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hzJgA8AA/euBSwSAuAWHnofJBoKyAGADwAD96wFqh7RgA8AA/euBTgSAuQWIFYheBoKzAGADwAD96wFqiDtgA8AA/euBUQSAugWId4igBoK0AGADwAD96wFqiIpgA8AA/euBVASAuwWIuYjqBoK1AGADwAD96wFqiNVgA8AA/euCYASAvAWJA4khBoK3AGADwAD96wFqiRFgA8AA/euAzQSAvQWJOYlbBoK4AGADwAD96wFqiUlgA8AA/euArASAvgWJc4nHBoK5AGADwAD96wFqiZ1gA8AA/euBNgSAvwWJ4IoBBoK6AGADwAD96wFqie9gA8AA/euBIQSAwAWKGopHBoK7AGADwAD96wFqii9gA8AA/euBJASAwQWKX4p+BoK8AGADwAD96wFqim1gA8AA/euBJwSAwgWKlorNBoK9AGADwAD96wFqiq9gA8AA/euBKgSAwwWK5osRBoCIAGADwAD96wFqivlgA8AA/euAsgSAxAWLKos9BoK+AGADwAD96wFqizNgA8AA/euApgSAxQWLVYudBoK/AGADwAD96wFqi3pgA8AA/euAtQSAxgWL/owWBoLAAGADwAD96wFqjAlgA8AA/euA1gSAxwWMLoxPBoLBAGADwAD96wFqjD1gA8AA/euA7gSAyAWMZ4yHBoLCAGADwAD96wFqjHZgA8AA/euA2QSAyQWMn4zOBoLDAGADwAD96wFqjLVgA8AA/euCYwSAygWM5o0IBoLFAGADwAD96wFqjPZgA8AA/euArwSAywWNII1IBoLGAGADwAD96wFqjTNgA8AA/euAqQSAzAWNYI1xBoLHAGADwAD96wFqjWhgA8AA/euBDASAzQWNiY2hBoLIAGADwAD96wFqjZRgA8AA/euBPwSAzgWNuY3fBoLJAGADwAD96wFqjctgA8AA/euA6ASAzwWN944oBn0AYAPAAP3rAWqODmADwAD964DlBIDQBY5AjpgGgsoAYAPAAP3rAWqOZmADwAD964DrBIDRBY6wjtIGgssAYAPAAP3rAWqOy2ADwAD964EbBIDSBY7qjxgGgswAYAPAAP3rAWqO/2ADwAD964E5BIDTBY8wj1oGgs0AYAPAAP3rAWqPQ2ADwAD964E8BIDUBY9yj4cGgIEAYAPAAP3rAWqPfGADwAD964C4BIDVBY+fj8QGgs4AYAPAAP3rAWqP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BAIAAoDAAEIBwACGImrAAEIQYAPAAP3rgTwAgU81AAAAAQBbARfAAEIqhMAAQijAAIb/gIEewABCNIEEAgACgMAAQj/AAIYiasAAQk5gA8AA/euAuACBUDUAAAABAFsBF8AAQl+EwABCXcAAhv+DAx7AAEJ2gQQCAAKAwABCgcAAhiJqwABCkGADwAD964C7AIFRNQAAAAEAWwEXwABCooTAAEKgwACG/4LPHsAAQr+BBgIAAoDAAELVwACGIiTAAEL5AWrAAELnYAPAAP3rgIMAgRk1AAAAAQBbARfAAEMDhMAAQwHAAIb/cR7AAEMRgQICAAKAwABDI8AAhiIkwABDQAJqwABDNWADwAD964CAJ4C8AIEaNQAAAAEAWwEXwABDSoTAAENIwACG/3IewABDWYECAgACgMAAQ2vAAIYiJMAAQ4kCasAAQ31gA8AA/euAjCeAvACBGzUAAAABAFsBF8AAQ5OEwABDkcAAhv9zHsAAQ6SBAgIAAoDAAEO2wACGIiTAAEPWAmrAAEPIYAPAAP3rgIkngLwAgRw1AAAAAQBbARfAAEPghMAAQ97AAIb/dB7AAEPygQICAAKAwABEBMAAhiIkwABEJQJqwABEFmADwAD964CPJ4C8AIEdNQAAAAEAWwEXwABEL4TAAEQtwACG/3UewABEPoEDAgACgMAARFDAAIYiJMAARHECasAARGJgA8AA/euAwSeAvACBWTUAAAABAFsBF8AARHuEwABEecAAhv92HsAARIuBAwIAAoDAAESdwACGIiTAAES/AmrAAESvYAPAAP3rgMQngLwAgVo1AAAAAQBbARfAAETJhMAARMfAAIb/gtQewABE04EEAgACgMAARN7AAIYiasAARO1gA8AA/euAhgCBHjUAAAABAFsBF8AARP6EwABE/MAAhv+C1R7AAEUVgQQCAAKAwABFIMAAhiJqwABFL2ADwAD964DHAIEfhADAAIb/BoFiB8AARU3AAEVSwABJMQAAgw8AAAABA8AARVrAAEkxAAAAAAAAAFwBPgVJwABGFRzAAEYzFsAARhkua4E/SAEAASsAwAD+kz4BPTDAAEZEH8AARk7AAPs4AQABJ4MQAD9JwABGjxzAAEayFsAARq0WwABGky5rgT9OwAD+d08BAAEnUADAAP38PgE9MMAARskfwABG08AA+zgBAAEkwABH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YAOaDwAAWwE+Aj0ewABHM4I5AwADFsAAR0EuhGOCw4DAAEdOwAE1Vy4APR7AAEdcgjkDAAMWwABHai6Eo4LGgMAAR3fAATVXLgAAAAEyMwABMnoAATLAAAEzKgABM2oAATPUAAE0XwABNLYAATUwAAE1qgAAAAkCgtoNwABH58AAR+3AAEnPA4SyAAABYAGCUgAAAgSC3A3AAEglwABIMAmEYwBdA8AA/KkBYAOErgAEgt0NwABIQcAASEgJhLMAYAPAAP3rAAEFguQNwABITcAASE3AAEigAAAAA8AASFjAAEigAAAAAgICwABIXgAABIRjXQPAAPypAWADhK4AwABIcAAABISzYAPAAP3rAABgA4LaAT4BPR7AAEh/gjQCAAIWwABIii6EY4LcLgADCAGC3IAAwAE2SggBgt2BAMABNl8JAcAASE2CZwAAAAAEBoLfDcAASKXAAEiqwABJAwAAhGQAAAABA8AASLfAAEkDAAAAAQEBwABIwwAAAISwYAOErgAAXAE+AT0cwABI4RbAAEjVLoRjgtxWAQABNcAASOUAAAEAYAOErgGAwABI5cABNtc1AAAAAQBbARfAAEjxgcAASO/AATb/hFIugliBAMABNv8AwAD8ugaC4A3AAEkIwABJCMAASTkAAIRNAAAAAQPAAEkOwABJOQAAAAEBAcAASRsAAACA8l0DmN8BWwAAWwFKwABJIQEcwABJI4DAAEkhwAE3YoS0AQABLgCZOAaC4Q3AAEk+wABJPsAASXoAAIROAAAAAQPAAElLwABJegAAAAEBAcAASVQAAACA8l0DmdMBWwAAXAE+AT0ewABJXYI1AgACFsAASWcuhGOC3IDAAEl0wAE3uQAGguINwABJf8AASX/AAEnNAACEVAAAAAEDwABJkMAASc0AAAABAQHAAEmdAAAAgPJgA5oPAABbAT4BPR7AAEmmgjkDAAMWwABJtC6EY4LcgMAAScHAATgULgAAAAE2sAABNzsAATeSAAE37QABOEcAAAAEAoLlDcAASgnAAEoPwABLzQOEtQAAAWABglIAAAIEgucNwABKNMAASjoYhLYAYAPAAPo/AASC6A3AAEpSwABKVwmEtwBdA8AA/KkBYAPAAP3rAAMFgvENwABKi8AASovAAEquAAAAA8AASpXAAEquAAAAAgICwABKmwAABIS2YAPAAPo/AMAASqgAAASEt10DwAD8qQFgA8AA/esAAGADguUBPwMIAYLngADAATjVCAGC6IEAwAE45QkBwABKi4JnAAAAAAWC8g3AAEqywABKssAASt0AhLgAA8AASsHAAErdAAAAAQEBwABKxwAABIS3XQPAAPypAWADwAD96wAAYAOC5QE/AwgBguiAAMABOUcIAILnKQkBwABKsoJnAAAAAAWC8w3AAErhwABK4cAASw0AhLkAA8AASvDAAEsNAAAAAQEBwABK9gAABIS3XQPAAPypAWADwAD96wAAYAOC5QE/AwgBguiAAMABOaQIAILnKgkBwABK4YJnAAAAAAUGguoNwABKXMAASnLAAEqGAQCEugAAAAEDwABKfcAASoYAAAAAAAAAYAOCwAFKwABKgAEmwABKgAEWwABKgC6EUoJYYAOCwAaC6w3AAEsSwABLG8AASywBAIS7AAAAAQPAAEsiwABLLAAAAAAAAABgA8AA+j8BSsAASyUBIRbAAEsmLoS2gucGgu0NwABLMcAASz3AAEttAACETQFqwABLMmADwAD9UQIAAAEDwABLQ8AAS20AAAABAQHAAEtQAAAAgPJdA5jfAVsAAFsBSsAAS1YBHMAAS1iAwABLVsABOpmEvAEAAS4AmTcGgu4NwABLcsAAS37AAEuYAACETgFqwABLc2ADwAD9UQIAAAEDwABLi8AAS5gAAAABAQHAAEuUAAAAgPJdA5nTAVsAAFwBPgAGgu8NwABLncAAS6nAAEvLAACEVAFqwABLnmADwAD9UQIAAAEDwABLusAAS8sAAAABAQHAAEvHAAAAgPJgA5oPAABbAT4AAAABOd8AATomAAE6ZgABOskAATsRAAE7VwAAAAUCgvQNwABL8cAAS/fAAFRFA4S9AAABYAGCaAABYAGCbwgEgvYNwABMgMAATIcYhGEAYAPAAP5sAASC9w3AAEycwABMvhiEYwBdA8AA/KkBYAOErgFqwABMql0DwAD8qQFgA4SuhBcEgvgNwABMycAATM0YgL0AYAPAAP3rAASC+Q3AAEzrwABM+QmEvgBdA8AA/KkBYAOJTwAEgvoNwABNBsAATQoYgpAAYAOIuAAEgvsNwABNxMAATeAJhL8AXQPAAPypAWADiU8ABIL8DcAATgTAAE4YCYTAAF0DwAD8qQFgA4hTAASC/Q3AAE48wABOSwmE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eoTEIxzAASSRgQDAAdqLSAEAASsAABbAASSdFsABJJQugmyEw4KQiFmBAMAB2osBYAOIuAaExw3AASSqwAEkqsABJOEAAIRNAAAAAQPAASSwwAEk4QAAAAEBAcABJMMAAACA8l0DmH0BWwAAWwFKwAEkyQEcwAEky4DAASTJwAHa94V7AQABLgCYggaEyA3AASTlwAEk5cABJSgAAIV1AAAAAQPAASTswAElKAAAAAICAsABJQAAAACA8l0DmhcCW1sAwAElAwAAAIV2WwAAWwFKwAElCwEcwAElDYDAASULwAHbToV7AgACLoHAASUkwAHbXwCaHAaEyQ3AASUtwAElLcABJWcAAIROAAAAAQPAASU6wAElZwAAAAEBAcABJUMAAACA8l0DmdMBWwAAXAE+AT01AAAAAQBgA4i4ARbAASVMLoV6hMQjHMABJVqBAMAB29FIAQABKwAAKxzAASVagQDAAdvRhE0BAAGAwAElYcAB27oAiLoBWwaEyg3AASVswAElbMABJesAAIRUAAAAAQPAASV9wAEl6wAAAAEBAcABJYoAAACA8mADmg8AAFsBPgFJwAElkyEcwAElpBbAASWXLoV6hMRIAQABKwCIvD4BPRfAASW1LoV6HMABJcaAwAElxMAB3D6ExAEAARbAASXULoV6hMQAmhGExD8AAAHaRwAB2tAAAdsnAAHbkwAB3BcAAdycAAAABQKEzQ3AASZOwAEmVMABKIIDhXwAAAFgAYSuAAACBITPDcABJovAASaTGIJsAGADiFMABITQDcABJqLAASanGICWAGADhK4AAQWE2A3AASaswAEmrMABJvEAAAADwAEmt8ABJvEAAAACAgLAASa9AAAEgmxgA4hTAMABJswAAASAlmADhK4AAGADhM0BPgE9NQAAAAEAYAOErgEWwAEm2S6AloTQIxzAASbgggDAAd1JSAEAASsAACsXwAEm4IIAwAHdSYRSLoJYAWADhM0DCAGEz4AAwAHdIwgBhNCBAMAB3TEJAcABJqyEtQAAAAAFBoTSDcABJvbAASb/wAEnQQAAhWwAAAABA8ABJwzAASdBAAAAAQEBwAEnHQAAAIVtYAObUQAAYAOIuAFKwAEnJwEcwAEnLRbAAScnLoCWhNCFbAEAAYDAASc7wAHdzwCEsAaE0w3AASdGwAEnRsABJ30AAIRNAAAA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MXqEAMAB6JRIAQABKwAAKxfAATF6hADAAeiUhFIuglgBYAOE6z01AAAAAQBgA4SuARbAATGNLoCWhO8jHMABMZSEAMAB6NNIAQABKwAAKxfAATGUhADAAejThFIuglgBYAOE6wUIAYTtgADAAehSCAGE7oEAwAHoYAgBhO+CAMAB6G4IAYTwgwDAAeh8CQHAATEGhLUAAAAABwaE8g3AATGqwAExtcABMeoBAIWBAAAAAQPAATHFwAEx6gAAAAAAAABgA4NeAUrAATHIATUAAAABAGADgnsBFsABMcguhYCE8CMcwAEx4oAAwAHpekgBAAErAAArFsABMeKAAMAB6XqEbIKEAWADg14GhPQNwAEx78ABMfjAATJWAgCFgQAAAAEDwAEyB8ABMlYAAAABAQHAATIPAAAAgmZgA4NeAABcAT4BPRfAATIdLoWAHsABMjiCPQEAAYDAATJLwAHp3QCE8AaE9g3AATJbwAEyZMABMqYAAIVsAAAAAQPAATJxwAEypgAAAAEBAcABMoIAAACFbWADm1EAAGADiLgBSsABMowBHMABMpIWwAEyjC6AloTvhWwBAAGAwAEyoMAB6jYAhLAGhPcNwAEyq8ABMqvAATLiAACETQAAAAEDwAEyscABMuIAAAABAQHAATLEAAAAgPJdA5h9AVsAAFsBSsABMsoBHMABMsyAwAEyysAB6peFigEAAS4AmIUGhPgNwAEy5sABMubAATMpAACFdQAAAAEDwAEy7cABMykAAAACAgLAATMBAAAAgPJdA5oXAltbAMABMwQAAACFdlsAAFsBSsABMwwBHMABMw6AwAEzDMAB6u6FigIAAi6BwAEzJcAB6v8Amh8GhPkNwAEzLsABMy7AATOPAACETgAAAAEDwAEzO8ABM48AAAABAQHAATNEAAAAgPJdA5nTAVsAAFwBPgM9NQAAAAEAYAOErgEWwAEzTS6Ff4TtIxzAATNXgQDAAetxSAEAASsAACscwAEzV4EAwAHrcYRNAQABgMABM17AAetaAISyAVs9NQAAAAEAYAOIgwEWwAEzZi6AvYTuIxzAATNsgQDAAeu5SAEAASsAACscwAEzbIEAwAHruYRNAQABgMABM3PAAetaAIiQAVs9NQAAAAEAYAOErgEWwAEzey6AloTvIxzAATOCgQDAAewBSAEAASsAACscwAEzgoEA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APwFiVEGiV0NwAKK6sACiu/AAouRAACEZAAAAAEDwAKK/MACi5EAAAABAQHAAosIAAAAhLBgA4SuAABcAT4CScACixoWwAKLKhbAAoseLoRjiVKBVcAA/Is+AT0XwAKLOy6EYzHAAotVYAOErgCJUj89HMACi28WwAKLYy6EY4lSVgEAATXAAotzAAABAGADhK4BgMACi3PAA0vsNQAAAAEAWwEXwAKLf4HAAot9wANMRoRSLoJYgQDAA0xGAMAA/LoGiV4NwAKLlsACi5bAAovJAACETQAAAAEDwAKLnMACi8kAAAABAQHAAoupAAAAgPJdA5jfAVsAAFsBSsACi68BHMACi7GAwAKLr8ADTKmGmQEAAS4AmToGiV8NwAKLzsACi87AAow7AACETgAAAAEDwAKL28ACjDsAAAABAQHAAovkAAAAgPJdA5nTAVsAAFwBPgM9HsACi+2CNQIAAhbAAov3LoRjiVKAwAKMBMADTQAAPRzAAowSFsACjAwuhW+JVIRNAQABgMACjBnAA00AAIi6PTUAAAABAGADiLgBFsACjCEuhpiJVSMcwAKMLoEAwANNV0gBAAErAAArHMACjC6BAMADTVeETQEAAYDAAow1wANNAACIugFbBolgDcACjEDAAoxAwAKNCQAAhFQAAAABA8ACjFHAAo0JAAAAAQEBwAKMXgAAAIDyYAOaDwAAWwE+Az0ewAKMZ4I5AwADFsACjHUuhGOJUoDAAoyCwANNxC4APRfAAoyQLoVvHMACjJqAwAKMmMADTcSExAEAARbAAoyoLoVviVQAmhGJVEnAAoy0IRzAAozEFsACjLguhpiJVUgBAAErAIi8PgE9F8ACjNUuhpgcwAKM5YDAAozjwANNxITEAQABFsACjPMuhpiJVQCaEYlVPwaJYQ3AAo2TwAKNmsACjc0AACMAAAABA8ACjaLAAo3NAAAAAAAAAGADwAD96wFKwAKNqAEewAKNqJcbAQABLgAGiVkNwAKN0sACjdvAAo4IAQCGmgAAAAEDwAKN98ACjggAAAAAAAAAYAPAAPo/AUrAAo36ARzAAo4BFsACjfouhFKCWEgBAAErAMAA/V4AAANKqgADSxQAA0vFAANMggADTNkAA02dAANObQADTq0AA077AAAACAKJZA3AAo4NwAKOE8ACkuUDhpsAAAFgAYJLAAACBIlmDcACjjjAAo5BGIZ6AGADgnsABIlnDcACjlrAAo5nCYUdAF0DwAD8qQFgA4i4AAIFiXENwAKObMACjmzAAo7qAAAAA8ACjnXAAo7qAAAAAgICwAKOfAAAAIToYAODGQDAAo6WAAAAhR1dA8AA/KkBYAOIuAAAYAOJZAE/AQoAwAKOsolyAgACHsACjr6CPgEAAYDAAo7QwANPlQCBwAKO3MADT6MABYlyDcACju/AAo7vwAKPKACEqgADwAKPBMACjygAAAACAgLAAo8KAAAEhnpgA4J7AMACjxoAAASFHV0DwAD8qQFgA4i4AABgA4lkAT8DCAGJZoAAwANQDAgBiWeBAMADUBoJAcACju+CUQAAAAAGBolpDcACjy3AAo83wAKPVQEAhOgAAAABA8ACj0HAAo9VAAAAAAAAAGADgxkBSsACj0QBFsACj04WwAKPRC6GeolmhGqCgwaJbQ3AAo9awAKPWsACj4UAAIRNAAAAAQPAAo9gwAKPhQAAAAEBAcACj2kAAACA8l0DmdMBWwAAWwFKwAKPbwEcwAKPcYDAAo9vwANQxYT8AQABLgCaBgaJbg3AAo+KwAKPisACj+oAAIROAAAAAQPAAo+XwAKP6gAAAAEBAcACj6AAAACA8l0DmdMBWwAAXAE+Aj0cwAKPsxbAAo+pLoToiWmE9QEAAYDAAo/DwANRHACDVj0ewAKPy4I1AgACFsACj9UuhR2JZ4DAAo/kwANRHAAGiWoNwAKP78ACkAHAApBNAQCGnAAAAAEDwAKQEcACkE0AAAAAAAAAYAOI8wE+AUrAApAXAR/AApAiiQMCAAIWwAKQMC6E6IlpFsACkDsuhR2JZwAGiW8NwAKQUsACkGDAApIBAwBIAAAAAQPAApBiwAKSAQAAAAEBAcACkGoAAACD1mADwAD9UQAAYAPAAPo/AT4CScACkHcewAKQe8AA9eYCAAIugMACkIvAA1HrAErAApCTASk/ScACkKQlwAKQroDAApCowANR62ADiWQ+BEnAApDEIRzAApDSFsACkMguhnqJZkgBAAEWwAKQ2xTAApDVwANR6wABYAOJZIZ6iWYAwAD9XkrAApDmASo/ScACkPohHMACkRMWwAKRDBbAApD+LoUdiWdhwAD82EgBAAEWwAKRKhbAApEcFMACkRbAA1HrAAFgA4lkhR2JZ2HAAPzYAMAA/ShKwAKRMgEqP0XAApFGAcACkU/AApFRAABiYAPAAPwFAZMBHMACkViBwAKRVsADUthjAQABFsACkWgWwAKRWi6FHYlnYcAA/NgAwAD9MgGJwAKRcsADUtgcwAKRcIHAApFywANS2GQBAAGUAMAA/So+AUnAApF/IRzAApGUHMACkZAWwAKRgy6FHYlnSwEAAYHAApGRwANS2ADAAPy4SAEAARzAApGqFsACkZ0UwAKRl8ADUesAAWADiWSFHYlnSwEAAYHAApGrwANS2ADAAPy4AIi8SsACka8BKj9KwAKRywEpPgFKwAKR6wEqBolrDcACkgbAApIOwAKS4wEAg8EAAAABA8ACkhfAApLjAAAAAAAAAGADwAD8BQE+A07AApIhwAKSJgAAg8hgA8AA/AUBHMACkjM3/////4N3AQABFsACkj8WwAKSNS6Geolmg8HAAP1kAMAA/B1FwAKSTQHAApJWwAKSWAAAYmADwAD8BQGTARzAApJfgcACkl3AA1QpYwEAARbAApJvFsACkmEuhR2JZ2HAAPzYAMAA/TIBicACknnAA1QpHMACkneBwAKSecADVClkAQABlADAAP0qPgE9iMACkoTAA1PnHMACkpY3/////4N3AQABHMACkqMcwAKSnoDAApKZwANT54OIAQABNx8AwAD9LGQBAAEcwAKSq4DAApKmwANT54O7AQABFsACkr4cwAKSuhbAApKtLoUdiWdLAQABgcACkrvAA1QpAMAA/LiDwcAA/WQAwAD8HwDAAP0qAMAA/B1KwAKS1AGAwAKS28ADU+cAAANQWAADUJ4AA1D1AANRcQADUcUAA1O1AANVJQAAAAYCiXMNwAKTqsACk7nAApcmB4adAAABYAGCSwAAAAEFiX4AAAAABAAAAwAAAAAAAAAAAGADiXMBPwEJAQCCUQAAAAAHBol1DcAClLLAApSywAKUygAChE4AAAABA8AClL/AApTKAAAAAQEBwAKUyAAAAIDyXQOZ0wFbAABcAAaJdg3AApUNwAKVDcAClSYAAoRNAAAAAQPAApUTwAKVJgAAAAEBAcAClSQAAACA8l0DmV4BWwAAWwAGiXcNwAKVcsAClXLAApWMAAKE9QAAAAEDwAKVgcAClYwAAAABAQHAApWKAAAAgPJdA5nTAVsAAFsABol8DcACllTAApZcwAKWZAECg8EAAAABA8AClmTAApZkAAAAAAAAAGADwAD8BQAGiXgNwAKWaMAClnbAApaGAwJIAAAAAQPAApZ4wAKWhgAAAAEBAcACloAAAACD1mADwAD9UQAAYAPAAPo/AAaJeQ3AApaxwAKWusACltgAAoaeAAAAAQPAApbBwAKW2AAAAAEBAcACltIAAACFbWADm1EAAGADiLgABol6DcAClt3AApbowAKXJAAAhp8AAAABA8AClvTAApckAAAAAAAAAGADhK4BPgFKwAKW/QEfwAKXCIc1AQABLgAAAANViQADVcMAA1X9AANWNwADVmYAA1akAANW3wADVyAAAAAHAol/DcAClynAApc4wAKYPgeGoAABAACCdmADwAD9UQFbAWABiXMAAAEEiYENwAKXasACl28JgJYAXwMAAAABBYmIDcACl3TAApd0wAKXkQAAAAPAApeFwAKXkQAAAAEBAcACl4sAAASAll8DAAAAAF0DiX8BXwMAAAE/AggBiYGAAMADV6YJAcACl3SJfgAAAAADBomDDcACl5bAApedwAKXswAAIwAAAAEDwAKXpcACl7MAAAAAAAAAYAPAAP3rAUrAAperASTAApezARbAApetLoCWiYEGiYYNwAKXuMACl8DAApfaAQCDwQAAAAEDwAKXycACl9oAAAAAAAAAYAPAAPwFAUrAApfMARbAApfSFsACl8wugJaJgYPBwAD9ZAaJhA3AApffwAKX7cACmDwDAEgAAAABA8ACl+/AApg8AAAAAQEBwAKX9wAAAIPWYAPAAP1RAABgA8AA+j8BSsACmAcBIiXAApgNgMACmAfAA1iMXQOJfwFfAwAAABzAApg0FsACmC4UwAKYKMADWIwAAV0DiX8BXwMAAICWiYFIAQABFsACmDcugJaJgQDAAP1eAAADV9gAA1gcAANYZgADWPgAAAADAomJDcACmEHAAphHwAKZcQOGoQAAAV0BiX8BYAPAAP0OAAAAAQWJkA3AAph4wAKYeMACmJQAAAADwAKYhMACmJQAAAAAAAAAYAOJiQE/AQkAwAKYiYmIAQABKwAEBomLDcACmJnAApiZwAKYswAAhE4AAAABA8ACmKbAApizAAAAAQEBwAKYrwAAAIDyXQOZ0wFbAABcAT4ABomMDcACmLfAApi3wAKY7QAAhE0AAAABA8ACmL3AApjtAAAAAQEBwAKY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wAKgQ8ACoHYAAAABAQHAAqBMAAAAgPJdA5nTAVsAAFsBSsACoFIBHMACoFSAwAKgUsADZGqGtAEAAS4AmfcGibwNwAKge8ACoILAAqEFAAAjAAAAAQPAAqCKwAKhBQAAAAAAAABgA8AA/esBPgFKwAKgkwEjIRzAAqCrFsACoJouhrKJt0gBAAErAMAA/V4kwAKg9wQnhrUWwAKg3BbAAqDSFsACoMEuhrKJt4RogoKEd4KNJ4ZgFsACoOkugL2JtiTAAqEBAieGtRbAAqD8LoC9ibYBYAPAAP3rBonADcACoQrAAqESwAKhQQEAg8EAAAABA8ACoRvAAqFBAAAAAAAAAGADwAD8BQFKwAKhHgEewAKhJIq7AgACFsACoSougL2JthbAAqEwLoayibcABom9DcACoUbAAqFUwAKh/wMASAAAAAEDwAKhVsACof8AAAABAQHAAqFeAAAAg9ZgA8AA/VEAAGADwAD6PwFKwAKhbgEiHsACoW7AAPXmAgACLoDAAqF+wANlsQABIiIlwAKhlYDAAqGPwANlsWADibQAHMACob8WwAKhuhTAAqG0wANlsQABYAOJtIC9ibZIAQABFsACocIugL2JtgDAAP36ABzAAqHrFsACodoUwAKh1MADZbEAAWADibSGsom3SAEAARbAAqHuLoayibcAwAD9XgaJvg3AAqIEwAKiDcACoj8AAIaeAAAAAQPAAqIUwAKiPwAAAAEBAcACoiUAAACFbWADm1EAAGADiLgBSsACoi8BFsACojWAwAKiL8ADZoWF7JtjAAADY7AAA2PsAANkQwADZJoAA2U3AANliwADZl4AA2axAAAABwKJww3AAqJEwAKiSsACppsDhrYAAAFgAYlzAAAEBInFDcAConrAAqKBCYXMAGADiLgABInGDcACopTAAqKdCYXNAGADiLgABInHDcACor7AAqLFCYPQAF0DwAD8qQFgA4nVAASJyQ3AAqSswAKkuxiGt4IuAGADwAD8BQErAQWJ1A3AAqLKwAKiysACowEAAAADwAKi1cACowEAAAADAwPAAqLbAAAEhcxgA4i4AMACoukAAASFzWADiLgAwAKi+QAABIPQXQPAAPypAWADidUAAGADicMBPwQIAYnFgADAA2d2CAGJxoEAwANnhAgBiceCAMADZ5IJAcACosqJfgAAAAAHBonLDcAC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AAABhF5gA4J7ABbAArEEFsACsPguhdOKBoNiwAD8/D4BPRzAArEkFsACsRyBwAKxEsADeXCEboKFhPUBAAGAwAKxNMADeQkAg6JGwAKxQsACsXbAArFWAAABhgVgA4lzABbAArFuFsACsWIuhdOKBinAAPz9PgE9HMACsYeBwAKxfsADeceE9QEAAYDAArGXwAN5CQCJdwaKDg3AArGowAKxqMACseIAAIRNAAAAAQPAArGuwAKx4gAAAAEBAcACsb8AAACA8l0DmV4BWwAAWwFKwAKxxQEcwAKxx4DAArHFwAN6MobDAQABLgCZagaKDw3AArHmwAKx5sACsioAAIT1AAAAAQPAArH1wAKyKgAAAAEBAcACsf4AAACA8l0DmdMBWwAAWwFKwAKyBAEcwAKyBoDAArIEwAN6iYbEAQABLgCZ+waKEA3AArIvwAKyNsACtAoAACMAAAABA8ACsj7AArQKAAAAAAAAAGADwAD96wE+B07AArJNwAKyUAABg+RgA8AA/jUBH8ACslbAAP5UAAAAAD0cwAKybYDAArJqwAN66oKKAQABJMACso4BFsACsoUWwAKydi6F0ooEhGqCgwDAAP5JScACspUhFsACssAWwAKysRbAArKpFsACspouhdKKBIRqgoOEvoMogVXAAPyLPgM9HMACstSAwAKy0cADeuqCigEAASdjAMAA/kk9HMACsumAwAKy5sADeuqCigEAARzAArMcHMACsv0WwAKy7y6FHYoFgKsBAWADwAD96wE0wAKzAQPAArMBwAKzGgAAAAEBAcACswIAAACCkGADiLgAAGADwAD96wFKwAKzCwEcwAKzEIHAArMLwAN7zSMAAAAAgk8AwAD8clgBAAEngYsAwAD8ewDAAP5JPRzAArMygMACsy/AA3rqgooBAAEngJcAwAD+ST89HMACs0uAwAKzSMADeuqCigEAASeGxQDAAP5JPRzAArNoFsACs1wuhdOKBoP4AQABNMACs3ADwAKzcMACs9gAAAACAgLAArN7AAAAhddgA4J7AMACs44AAACGBWADiXMAAGADwAD9DgE+AT0cwAKzo4DAArOgwAN66oKKAQABJMACs9AEFsACs70WwAKztYHAArOswAN8doRugoWAvYNiJ4NVgsACs8XAA3yEJ4GLAMAA/kkAwAD8+T0cwAKz4oDAArPfwAN66oKKAQABJ4bGAMAA/klKwAKz8gEcwAKz/IDAArP5wAN66iMAAAAAwAD+TgaKCw3AArQmwAK0LsACtOsBAIPBAAAAAQPAArQ3wAK06wAAAAAAAABgA8AA/AUBPgFKwAK0PQE1AAAAAQBgA8AA/AUBFsACtEQuhreCLooIIxzAArRUgADAA31bSAEAASsAwAD9KBfAArRELoa3gi4ewAK0Xoq6AwADFsACtIUWwAK0di6F0ooEg8HAAP1kHsACtJeCQgEAARbAArSkLoUdigUAHsACtMKKvgEAARbAArTaLoXTigYAAIoIgADAA31bAWADwAD8BQaKEQ3AArTwwAK0/sACtgoDAEgAAAABA8ACtQDAArYKAAAAAQEBwAK1CAAAAIPWYAPAAP1RAABgA8AA+j8BPgFKwAK1FQEiHsACtRzAAPXmAgACLoDAArUswAN+EgABIiIiJcACtUWAwAK1P8ADfhJgA4oCABzAArV9FsACtW4UwAK1aMADfhIAAWADigKF0ooESAEAARbAArWALoXSigQAwAD9XgAewAK1noJGAgACFsACta8UwAK1qcADfhIAAWADigKFHYoFFsACtb4uhR2KBQAAHsACtdyCRwIAAhbAArXsFMACtebAA34SAAFgA4oChdOKBhbAArX5LoXTigYABooSDcACtg/AArYYwAK2awAAhp4AAAABA8ACth/AArZrAAAAAQEBwAK2MAAAAIVtYAObUQAAYAOIuAFKwAK2QAEfwAK2RIkDAgACFsACtlIuhOiKChbAArZdLoUdigUAAAADeJwAA3jiAAN6CwADemIAA3q5AAN9IwADfewAA37tAAN/TQAAAAgCihUNwAK2cMACtnbAArshA4bHAAABYAGJcwAAAgSKFw3AAra+wAK2zQmGyABgA4okAASKGA3AArbmwAK26wmFbQBdA8AA/KkBYAOIuAABBYojDcACtvDAArbwwAK3LgAAAAPAArcMwAK3LgAAAAICAsACtxIAAASGyGADiiQAwAK3KAAABIVtXQPAAPypAWADiLgAAGADihUBPwMIAYoXgADAA3/nCAGKGIEAwAN/9QkBwAK28Il+AAAAAAcGihoNwAK3M8ACtzPAAreRAACETgAAAAEDwAK3QMACt5EAAAABAQHAArdJAAAAgPJdA5nTAVsAAFwBPgI9HMACt2IWwAK3Ui6GyIoXhPUBAAGAwAK3csADgFoAii09HsACt3qCNQIAAhbAAreELoVtihiAwAK3i8ADgFoABoobDcACt5bAAreWwAK33AAAhE0AAAABA8ACt5zAArfcAAAAAQEBwAK3rQAAAIDyXQOZXgFbAABbAUrAArezARzAAre1gMACt7PAA4DWhskBAAEuAJlrBoocDcACt+DAArfgwAK4NgAAhPUAAAABA8ACt+/AArg2AAAAAQEBwAK3+AAAAIDyXQOZ0wFbAABbAUrAArgEARzAArgGgMACuATAA4EthsoBAAEuAJn8BoodDcACuDvAArhCwAK4oQAAIwAAAAEDwAK4SsACuKEAAAAAAAAAYAPAAP3rAT4BSsACuFMBJMACuJ0GFsACuF0uhYbAAP1lJ4PXFsACuHwWwAK4bC6GyIoXhJaKKCdjHMACuI8WwAK4iS6FbYoYWAEAASeBiwDAAPx7J4bLBoohDcACuKbAAriuwAK5DAEAg8EAAAABA8ACuLfAArkMAAAAAAAAAGADwAD8BQFKwAK4ugEewAK4wIq4AgACFsACuOUWwAK41S6GyIoXg8GKKR7AArj1irwBAAEWwAK5BS6FbYoYAAAGih4NwAK5EcACuR/AArnEAwBIAAAAAQPAArkhwAK5xAAAAAEBAcACuSkAAACD1mADwAD9UQAAYAPAAPo/AT4BSsACuTYBIiIlwAK5Q4DAArk9wAOCaWADihUAHMACuYQWwAK5dBTAArluwAOCaQABYAOKFYbIihdIAQABFsACuYcuhsiKFwCKLwAewAK5ooJGAgACFsACubMUwAK5rcADgmkAAWADihWFbYoYFsACubouhW2KGAAGih8NwAK5ycACudLAArsfAACGngAAAAEDwAK52cACux8AAAABAQHAArnqAAAAhsxgA5tRAABgA4i4AT4ETsACuhTAAroZAAGCkGADiQUBHMACuisWwAK6Gy6GyIoXhp4BAAGAwAK6M8ADgyEAijBOwAK6T8ACulcAAYbNXQPAAPzaAmADiU9gA4i4ATLAArpyYAOJT2ADiLgARsACunrAArqnwAK6hQAAAYDtYAOJTwAWwAK6l4HAArqSwAODOIS+iQc+AT0cwAK6toLAArqvwAODaoC/AgACg8ACurfAA4OdHMACuskWwAK6xC6FbYoYSwEAARbAArrSgsACusrAA4NqYcAA/P4AwAD8uADAAPzvSsACuuUBHsACuuyarQIAAhbAArr8gcACuvfAA4M4ha+JE4LAArsTwAODagAAAAOAMwADgK8AA4EGAAOBXQADgdsAA4JDAAOC+gADhDgAAAAHAookDcACuyTAArsqwAK+fwOGzgAAAWABiXMAAAEEiiYNwAK7X8ACu3EJhs8AYAOCewACBYoyDcACu3bAArt2wAK78AAAAAPAAruFwAK78AAAAAEBAcACu5AAAACElmADg+oAAGADiiQBPgFAFsACu+OAwAK72cADhLKEGYP8wAK72cACu+sAAggAiiYWwAK7woDAAru4wAOEsoRegmoJAcACu3aJfgAAAAAFijMNwAK79cACu/XAArwpAISqAAPAArwQwAK8KQAAAAEBAcACvBYAAASGz2ADgnsAAGADiiQBPwIIAYomgADAA4UqCQHAArv1iX4AAAAACAaKKA3AArwuwAK8PMACvGgBAISWAAAAAQPAArxGwAK8aAAAAAAAAABgA4PqAUrAArxJATUAAAABAGADgnsBFsACvEkuhs+KJiMcwAK8XYAAwAOFi0gBAAErAAArFsACvF2AAMADhYuEcoKHAWADg+oGiisNwAK8bcACvG3AArzBAACETgAAAAEDwAK8esACvMEAAAABAQHAAryDAAAAgPJdA5nTAVsAAFwBPgE9HMACvKsWwAK8nxbAAryMLobPiiaEcoKHhPUBAAGAwAK8u8ADhe4AhB8GiiwNwAK8xsACvMbAArz/AACETQAAAAEDwAK8zMACvP8AAAABAQHAArzdAAAAgPJdA5leAVsAAFsBSsACvOMBHMACvOWAwAK848ADhlSG0AEAAS4AmWwGii0NwAK9A8ACvQPAAr1GAACE9QAAAAEDwAK9EsACvUYAAAABAQHAAr0bAAAAgPJdA5nTAVsAAFsBSsACvSEBHMACvSOAwAK9IcADhquG0QEAAS4Amf0Gii4NwAK9S8ACvVLAAr2MAAAjAAAAAQPAAr1awAK9jAAAAAAAAABgA8AA/esBPgFKwAK9YwEkwAK9iAQWwAK9bS6FhsAA/WUng9cWwAK9fC6EloooJ4MhBoopDcACvZHAAr2ZwAK9twEAg8EAAAABA8ACvaLAAr23AAAAAAAAAGADwAD8BQFKwAK9pQEWwAK9rxbAAr2lLoSWiiiDwYJWBoovDcACvbzAAr3KwAK+JAMASAAAAAEDwAK9zMACviQAAAABAQHAAr3UAAAAg9ZgA8AA/VEAAGADwAD6PwE+AUrAAr3hASIlwAK97oDAAr3owAOHoWADiiQAHMACvhQWwAK+ChTAAr4EwAOHoQABYAOKJISWiihIAQABFsACvhcuhJaKKADAAP1eBoowDcACvinAAr42wAK+fQAAhp4AAAABA8ACvj3AAr59AAAAAQEBwAK+TgAAAIVtYAObUQAAYAOJBQFKwAK+XgEWwAK+cRbAAr5oFsACvl4uhJaKKIJqg++FO4SaAAADhVcAA4XHAAOGLQADhoQAA4bbAAOHMwADh3sAA4gFAAOIYgAAAAgCijQNwAK+gsACvojAAsCqA4bSAAABYAGJcwAAAQSKNg3AAr7AwAK+xAmCkABgA4i4AAEFikENwAK+ycACvsnAAr7nAAAAA8ACvtzAAr7nAAAAAQEBwAK+4gAABIKQYAOIuAAAYAOKNAE/AggBijaAAMADiOAJAcACvsmJfgAAAAAHBoo4DcACvuzAAr7swAK/HQAAhE4AAAABA8ACvvnAAr8dAAAAAQEBwAK/AgAAAIDyXQOZ0wFbAABcAT4BPRzAAr8QFsACvwsugpCKNoRNAQABgMACvxfAA4k0AIi6Boo5DcACvyLAAr8iwAK/XwAAhE0AAAABA8ACvyjAAr9fAAAAAQEBwAK/OQAAAIDyXQOZXgFbAABbAUrAAr8/ARzAAr9BgMACvz/AA4mRhtMBAAEuAJltBoo6DcACv2PAAr9jwAK/qgAAhPUAAAABA8ACv3LAAr+qAAAAAQEBwAK/ewAAAIDyXQOZ0wFbAABbAUrAAr+BARzAAr+DgMACv4HAA4nohtQBAAEuAJn+Boo7DcACv6/AAr+2wAK/3QAAIwAAAAEDwAK/vsACv90AAAAAAAAAYAPAAP3rAUrAAr/EASTAAr/dBBbAAr/HLoWGwAD9ZSeD1xbAAr/WLoKQijYngyEGij8NwAK/4sACv+rAAsADAQCDwQAAAAEDwAK/88ACwAMAAAAAAAAAYAPAAPwFAUrAAr/2ARbAAr/7FsACv/YugpCKNoPBwAD9ZAaKPA3AAsAIwALAFsACwGoDAEgAAAABA8ACwBjAAsBqAAAAAQEBwALAIAAAAIPWYAPAAP1RAABgA8AA+j8BPgFKwALALQEiJcACwDqAwALANMADit5gA4o0ABzAAsBfFsACwFoUwALAVMADit4AAWADijSCkIo2SAEAARbAAsBiLoKQijYAiLwGij0NwALAb8ACwHjAAsCoAACGngAAAAEDwALAf8ACwKgAAAABAQHAAsCQAAAAhW1gA5tRAABgA4i4AUrAAsCaARbAAsCggMACwJrAA4tnhYebZAAAA4kNAAOJagADicEAA4oYAAOKbgADirgAA4tAAAOLkwAAAAcCikINwALArcACwLPAAsKWA4bVAAABYAGJcwAAAQSKRA3AAsDtwALA9wmCawBgA4SuAAEFikwNwALA/MACwPzAAsFEAAAAA8ACwQ/AAsFEAAAAAQEBwALBFQAABIJrYAOErgAAYAOKQgE+AT01AAAAAQBgA4SuARbAAsEnLoJrikQjHMACwTOBAMADjCVIAQABKwAAKxfAAsEzgQDAA4wlhFIrglgBYAPAAP0OAggBikSAAMADjA0JAcACwPyJfgAAAAAFBopGDcACwUnAAsFJwALBgAAAhE4AAAABA8ACwVbAAsGAAAAAAQEBwALBXwAAAIDyXQOZ0wFbAABcAT4BPRzAAsFzFsACwWgugmuKRIRNAQABgMACwXrAA4yjAISyBopHDcACwYXAAsGFwALBwgAAhE0AAAABA8ACwYvAAsHCAAAAAQEBwALBnAAAAIDyXQOZXgFbAABbAUrAAsGiARzAAsGkgMACwaLAA40AhtYBAAEuAJluBopIDcACwcbAAsHGwALCDQAAhPUAAAABA8ACwdXAAsINAAAAAQEBwALB3gAAAIDyXQOZ0wFbAABbAUrAAsHkARzAAsHmgMACweTAA41XhtcBAAEuAJn/BopJDcACwhLAAsIbwALCXAAAhp4AAAABA8ACwiLAAsJcAAAAAQEBwALCMwAAAIVtYAObUQAAYAOIuAFKwALCPQEcwALCSBbAAsI9LoJrikSFbAEAAYDAAsJWwAONrgCEsAaKSg3AAsJhwALCeMACwpQAAIafAWrAAsJiYAPAAP1RAgAAAQPAAsKEwALClAAAAAAAAABgA4SuAUrAAsKKARbAAsKKLoJrikQAAAOMfAADjNkAA40wAAONhwADjegAA44xAAAABQKKTQ3AAsOPwALDlcACzgIDggUAAAFgAYJSAAAGBIpPDcACw8jAAsPMCYbYAGADmn8ABIpQDcACxIXAAsSTGIR/AF0DwAD8qQFgA8AA/esBKwSKUQ3AAsSswALEtQmG2QBdA8AA/KkBYAOCiwAEilINwALFlcACxaAJhtoAXQPAAPzaAmADwAD+bGADiqUABIpTDcACxjLAAsZqCYbbAF0DwAD82gJgA8AA/etdA4pvAVsBMsACxmhgA8AA/etdA4pvAVsABIpUDcACxrXAAsbDGIbcAGADgnsBKwEFimUNwALGyMACxsjAAsfnAAAAA8ACxtHAAsfnAAAAAwAAA8ACxugAAACG3WADmn8BagBgA8AA/Q55wALHBgAAAIbZXQPAAPypAWADgosBagBgA8AA/Q55wALHKAAAAIbaXQPAAPzaAmADwAD+bGADiqUBagBgA8AA/Q55YAOKTQE+AT0cwALH1C6G3gAAAACKVgQIAIpPNQAAAAEAYAOafwGAwALHRcADj00jHMACx06DAMADj8JIAQABKwAAH8ACx1WaoQAAAACDAMADj8IBYAOafwgAilE1AAAAAQBdA8AA/KkBYAOCiwGBwALHf8ADj2QjHMACx4mDAMADkANIAQABKwAAMcACx5VgA4KLAIMAwAOQAwFdA8AA/KkBYAOCiwgAilI1AAAAAQBdA8AA/NoCYAPAAP5sYAOKpQGCwALHr8ADj4IjHMACx7uDAMADkFFIAQABKwAAMsACx8tgA8AA/mxgA4qlAIMAwAOQUQFdA8AA/NoCYAPAAP5sYAOKpQkBwALGyIJnAAAAAAwGilYNwALH7MACx/HAAsm3AACG3gAAAAEDwALH/sACybcAAAAAAAAAXAE+AUnAAsgHIRzAAsgVFsACyAsuhtmKUUgBAAErAMAA/V4+AUXAAsgmAcACyC/AAsgxAABiYAPAAPwFAZMBHMACyDiAwALINsADkQxjAQABFsACyEQWwALIOi6G2YpRYcAA/NgAwAD9MgGIwALITsADkQwcwALITIDAAshOwAORDGQBAAGUAMAA/So+BE7AAsjUwALI3AAAhENgA4KLARzAAsjnFsACyN4uhtmKUUsBAAGAwALI6MADkQwAwAD8uD0XwALI/IHAAsj0wAORcIRSLoJYTsACySHAAskmAACAvWADmn8BFsACyToWwALJMIHAAskowAORcIRegmqEX4J9ScACyVEiIRzAAslagsACyVXAA5G3SAEAASsAwAD9XgAhHMACyXEWwALJaoLAAsllwAORt4RSmolIAQABFsACyXQuhtiKTwDAAP1ePgE9HMACyYsWwALJhi6G2IpPht8BAAGCwALJlsADkbcAmpY/PwaKVw3AAsm8wALJwcACykkAAISZAAAAAQPAAsnWwALKSQAAAAAAAABcAT4BRcACyd8BwALJ6MACyeoAAGJgA8AA/AUBkwEcwALJ8YDAAsnvwAOShWMBAAEWwALJ/RbAAsnzLobZilFhwAD82ADAAP0yAYjAAsoHwAOShRzAAsoFgMACygfAA5KFZAEAAZQAwAD9Kj4BPRzAAsoSLobgAQABHMACyjsWwALKMi6G2YpRSwEAAYDAAso8wAOShQDAAPy4AIpYBopYDcACyk7AAspTwALK9AAAhuAAAAABA8ACynLAAsr0AAAAAQEBwALKewAAAIRDYAOCiwAAXAE+Aj0cwALKshzAAsqPFsACyoouhtiKT4bhAQABFsACyqeAwALKn8ADkz+Ed4KNAJqRhJsBAAEWwALKwYDAAsq5wAOTP4RegmoAmpg9HMACytmAwALK0cADkz+EmQAAAACCsQaKWQ3AAsr5wALK/sACyy8AAIbiAAAAAQPAAssSwALLLwAAAAAAAABcAT4BPRzAAssgFsACyxsuhtiKT4bjAAAAAJqaBopgDcACyzTAAstCwALLawEAglYAAAABA8ACy03AAstrAAAAAAAAAGADg+oBSsACy1ABNQAAAAEAYAOCewEWwALLUC6G3IpUIxzAAstggADAA5QqSAEAASsAACsWwALLYIAAwAOUKoRygocBYAOD6gaKYw3AAstwwALLecACy8cCAIJWAAAAAQPAAsuDwALLxwAAAAEBAcACy44AAACB52ADg+oAAFwBPgE9F8ACy5ouhtwewALLq4I9AQABgMACy77AA5SNAIpUBopaDcACy8zAAsvMwALL+wAAhE0AAAABA8ACy9LAAsv7AAAAAQEBwALL3wAAAIDyXQOY3wFbAABbAUrAAsvlARzAAsvngMACy+XAA5TmhuQBAAEuAJlBBopbDcACzADAAswAwALMXgAAhE4AAAABA8ACzA3AAsxeAAAAAQEBwALMFgAAAIDyXQOZ0wFbAABcAT4CPR7AAswfgjUCAAIWwALMKS6G2YpRgMACzDTAA5U9AD01AAAAAQBgA4PqARbAAsw8LoJWimAjHMACzEiBAMADlXNI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AAEAAAAAgdNbAD4BPRwAFADABC6cEACB2wIAAhQAwAQwPRwAFADABDBGHQAAwAC5Bz0VAMAELtkSHgDAALf4AQABFADABC8UGAAAPRUAwAQu4hMeAMAAt/IBAAEUAMAELxQYAAA9FQDABC7rFB4AwAC38wEAARQAwAQvFBgAAD0cwABMnRQAwAQunBAAagEAARQAwAQvFBgAAABKAAEWABQAwAQunBAAgdzAALkDTcAATXwCNQAAAAAAWwEewABNfMAAt/QEAAQcwABNjBTAAE2CwAQuSw4AIAEAARTAAE2NwAQtjQ0AAACEAMAELSKFAMAELSsUAMAELVQJAAArTsAATXDAAE16AACIPWADwAD+bAEUAMAELWsKAEnAAE2XIRzAAE2lFMAATZvABDFEDwBIAQABKwDAAP6TPgI9isAATa7ABC0GHMAATbUuiC8BAAEUwABNzMAEMUQPAACLxkIAAD9OwABOBsAAThAAAIg/YAPAAP5sARzAAE4WFMAAThLABC2NDQBsAQABJ4hAAMAA/pdBQ8AATikhHMAATj8WwABOOhTAAE4wwAQxqRAATsAA/ndIAQABFsAATkYUwABOQsAELY0NAE7AAP53AMAA/fo+BU3AAE5gAjUAAAAAAFsBHsAATmDAALf0BAAEHMAATnAUwABOZsAELksOACABAAEUwABOccAEMakQAAAAhADABC0ihQDABC0rFADABC1UCQAAKz0VwABOVMAEMUQPFADABC1rCgBJwABOgyEcwABOkRTAAE6HwAQxRA8ASAEAASsAwAD+k0LAAE6aAT89FcAATqfABC2NDRTAAE6twAQxqRAAPRXAAE6+wAQxqRAcwABOzhTAAE7KwAQtjQ0AbAEAASeIQADAAP6XScAATughHMAATvYUwABO7MAEMUQPAEgBAAErAMAA/pM+Aj2KwABO/8AELQYcwABPBi6ILwEAARTAAE8dwAQxRA8AAIvGQgAAPz2KwABPLcAELQZqwABPPWADnMmHe0IAAD0eAMAAt/cCAAKBAMAELOKCAMAELQYASsAAT0sAAwEAWwEAAAAAgdJbAAEAAAAAgdNbAD4BPRwAgQDABCzigdsCAAIUAMAEM2QNABQAwAQzbQ4AAMAAuQc9iwDABC0ZHgDAALf4AQABFADABC1UCQAAPYwAwAQtIh4AwAC38gEAARQAwAQt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XQORQwFgA8AA/Q4BasAAXEFgA5FZj/AEjF0XwABcqcAAXU0GiUoAYAORWQFqwABczGADkVmP8ASMXhfAAF29wABexwaH1wBdA5FlAWEDAWADwAD962ADkU4BasAAXexdA5FlAWEDAWADwAD962ADkU6HNgSMXxfAAF8vwABfyAaJSwBdA5FDAWEDAWADwAD962ADkU4BasAAX1pdA5FDAWEDAWADwAD962ADkU6QEgSMYBfAAGF1wABhzwaJTQBdA5FDAWADwAD9DgFqwABhpGADkVmQPQSMYRfAAGIdwABi7gaJUABgA5FZAWrAAGJRYAORWZA9BIxiF8AAYzvAAGOVBolRAF0DkUMBYAPAAP0OAWrAAGNqYAORWZBkBIxjF8AAY+PAAGUiBolVAGADkVkBasAAZBdgA5FZkGQEjGQXwABlb8AAZb8GiVYAXQORQwFgA8AA/Q4BasAAZZlgA5FZh1wEjGUXwABmDcAAZxkGh9IAYAORWQFqwABmPGADkVmHXASMZhfAAGdmwABntgaJVwBdA5FDAWADwAD9DgFqwABnkGADkVmHhgSMZxfAAGgEwABpBwaH0wBgA5FZAWrAAGgzYAORWYeGBIxoF8AAaXXAAGsDBolYAF0DkWUBYQMBYAPAAP3rYAORTgFqwABpt10DkWUBYQMBYAPAAP3rYAORTpCMBIxpF8AAa23AAGyDBolbAF0DkUMBYQMBYAPAAP3rYAORTgFqwABrq10DkUMBYQMBYAPAAP3rYAORTpC6BIxqF8AAbxDAAHBYBoleAF0DkWUBYQMBYAPAAP3rYAORTgFqwABvPl0DkWUBYQMBYAPAAP3rYAORTpDpBIxrF8AAcMDAAHGoBolhAF0DkUMBYQMBYAPAAP3rYAORTgFqwABw7l0DkUMBYQMBYAPAAP3rYAORTpEXBIxsF8AAc8TAAHUzBolkAF0DkWUBYQMBYAPAAP3rYAORTgFqwAB0AF0DkWUBYQMBYAPAAP3rYAORTpFDBIxtF8AAdZ3AAHahBolmAF0DkUMBYQMBYAPAAP3rYAORTgFqwAB11V0DkUMBYQMBYAPAAP3rYAORTpFkBIxuF8AAeQbAAHnSBofYAF0DkWUBYQMCYAPAAP5sYAPAAP3rYAORTgFqwAB5J10DkWUBYQMCYAPAAP5sYAPAAP3rYAORToerBIxvF8AAekTAAHr2BoloAF0DkUMBYQMCYAPAAP5sYAPAAP3rYAORTgFqwAB6YV0DkUMBYQMCYAPAAP5sYAPAAP3rYAORTpGaBIxwF8AAfMvAAH3YBolrAF0DkWUBYQMBYAOesWADkU4BasAAfQRdA5FlAWEDAWADnrFgA5FOkcwEjHEXwAB+QsAAfz0GiW0AXQORQwFhAwFgA56xYAORTgFqwAB+d10DkUMBYQMBYAOesWADkU6R9wSMchfAAIEWwACC2waJcABdA5FlAWEDAWADnrFgA5FOAWrAAIFGXQORZQFhAwFgA56xYAORTpIkBIxzF8AAg0HAAIQhBolzAF0DkUMBYQMBYAOesWADkU4BasAAg3FdA5FDAWEDAWADnrFgA5FOklAEjHQXwACGfcAAhsEGiXYAXQORQwFgA8AA/Q4BasAAhqFgA5FZkocEjHUXwACHD8AAh+kGiXoAYAORWQFqwACHOGADkVmShwSMdhfAAIg2wACIfAaJewBdA5FDAWADwAD9DgFqwACIW2ADkVmSrwSMdxfAAIjKwACJ/waJfwBgA5FZAWrAAIj0YAORWZKvBIx4F8AAikzAAIpwBomAAF0DkUMBYAPAAP0OAWrAAIpeYAORWZLbBIx5F8AAir7AAIvWBomEAGADkVkBasAAitlgA5FZktsEjHoXwACMI8AAjGkGiYUAXQORQwFgA8AA/Q4BasAAjEhgA5FZkwAEjHsXwACMt8AAjfIGiYcAYAORWQFqwACM4WADkVmTAASMfBfAAI4/wACOZQaJiABdA5FDAWADwAD9DgFqwACOUmADkVmTKwSMfRfAAI6zwACPdgaJjABgA5FZAWrAAI7PYAORWZMrBIx+F8AAj8PAAI/xBomNAF0DkUMBYAPAAP0OAWrAAI/aYAORWZNWBIx/F8AAkD/AAJESBomRAGADkVkBasAAkF9gA5FZk1YEjIAXwACRrMAAkx0GiZIAXQORZQFhAwJgA8AA/etgA8AA/etgA5FOAWrAAJHaXQORZQFhAwJgA8AA/etgA8AA/etgA5FOk34EjIEXwACTlcAAlIIGiZUAXQORQwFhAwJgA8AA/etgA8AA/etgA5FOAWrAAJPDXQORQwFhAwJgA8AA/etgA8AA/etgA5FOk7IEjIIXwACXkMAAmM4GiZgAXQORZQFhAwJgA8AA/etgA8AA/etgA5FOAWrAAJe1XQORZQFhAwJgA8AA/etgA8AA/etgA5FOk+cEjIMXwACZSsAAmfYGiZsAXQORQwFhAwJgA8AA/etgA8AA/etgA5FOAWrAAJlvXQORQwFhAwJgA8AA/etgA8AA/etgA5FOlBEEjIQXwACcTcAAnSYGiZ0AXQORZQFhAwFgA8AA/etgA5FOAWrAAJx6XQORZQFhAwFgA8AA/etgA5FOlEIEjIUXwACdjMAAnl4GiZ8AXQORQwFhAwFgA8AA/etgA5FOAWrAAJ21XQORQwFhAwFgA8AA/etgA5FOlG8EjIYXwACgLsAAoPsGiaIAXQORZQFhAwFgA8AA/etgA5FOAWrAAKBXXQORZQFhAwFgA8AA/etgA5FOlJsEjIcXwAChYcAAoeYGiaQAXQORQwFhAwFgA8AA/etgA5FOAWrAAKGGXQORQwFhAwFgA8AA/etgA5FOlLsEjIgXwACjqsAApHQGiaYAXQORZQFhAwFgA8AA/etgA5FOAWrAAKPSXQORZQFhAwFgA8AA/etgA5FOlOYEjIkXwACk2sAApZgGiagAXQORQwFhAwFgA8AA/etgA5FOAWrAAKT+XQORQwFhAwFgA8AA/etgA5FOlRMEjIoXwACnXcAAqDUGiasAXQORZQFhAwFgA8AA/etgA5FOAWrAAKeMXQORZQFhAwFgA8AA/etgA5FOlTwEjIsXwACom8AAqZ0GiawAXQORQwFhAwFgA8AA/etgA5FOAWrAAKjGXQORQwFhAwFgA8AA/etgA5FOlVwEjIwXwACrbMAArDYGia4AXQORZQFhAwFgA8AA/etgA5FOAWrAAKuUXQORZQFhAwFgA8AA/etgA5FOlYgEjI0XwACsnMAArVoGibAAXQORQwFhAwFgA8AA/etgA5FOAWrAAKzAXQORQwFhAwFgA8AA/etgA5FOlagEjI4XwACvH8AAr/cGibIAXQORZQFhAwFgA8AA/etgA5FOAWrAAK9OXQORZQFhAwFgA8AA/etgA5FOldEEjI8XwACwXcAAsV8GibMAXQORQwFhAwFgA8AA/etgA5FOAWrAALCIXQORQwFhAwFgA8AA/etgA5FOlfEEjJAXwACzMsAAtA8GibUAXQORZQFhAwFgA8AA/etgA5FOAWrAALNgXQORZQFhAwFgA8AA/etgA5FOlh0EjJEXwAC0dcAAtVQGibcAXQORQwFhAwFgA8AA/etgA5FOAWrAALSfXQORQwFhAwFgA8AA/etgA5FOlkoEjJIXwAC3C8AAt1kGiboAXQORQwFgA8AA/Q4BasAAtzRgA5FZlnYEjJMXwAC3p8AAuFcGib0AYAORWQFqwAC31WADkVmWdgSMlBfAALikwAC4zAaJvgBdA5FDAWADwAD9DgFqwAC4uGADkVmWoASMlRfAALkawAC59gaJwgBgA5FZAWrAALk3YAORWZagBIyWF8AAukPAALplBonDAF0DkUMBYAPAAP0OAWrAALpUYAORWZbLBIyXF8AAurPAALvyBonHAGADkVkBasAAus1gA5FZlssEjJgXwAC8P8AAvIsGicgAXQORQwFgA8AA/Q4BasAAvGdgA5FZlv0EjJkXwAC82cAAvc4GicwAYAORWQFqwAC9BmADkVmW/QSMmhfAAL4bwAC+cQaJzQBdA5FDAWADwAD9DgFqwAC+SGADkVmXIgSMmxfAAL6/wAC/iwaJ0ABgA5FZAWrAAL7xYAORWZciBIycF8AAv9jAAMA0BonRAF0DkUMBYAPAAP0OAWrAAMAIYAORWZdGBIydF8AAwILAAMFSBonUAGADkVkBasAAwLtgA5FZl0YEjJ4XwADBn8AAwd0GidUAXQORQwFgA8AA/Q4BasAAwb5gA5FZl3oEjJ8XwADCK8AAwz0GidoAYAORWQFqwADCU2ADkVmXegSMoBfAAMOKwADD3gaJ2wBdA5FDAWADwAD9DgFqwADDtmADkVmXrQSMoRfAAMQswADFNwaJ3wBgA5FZAWrAAMRdYAORWZetBIyiF8AAxYTAAMW6BongAF0DkUMBYAPAAP0OAWrAAMWfYAORWZfSBIyjF8AAxgjAAMbQBonjAGADkVkBasAAxixgA5FZl9IEjKQXwADHHcAAx0sGieQAXQORQwFgA8AA/Q4BasAAxzRgA5FZl/cEjKUXwADHmcAAx/4GiecAYAORWQFqwADHvWADkVmX9wSMphfAAMiCwADKNwaJ6ABdA5FlAWEDAWADwAD962ADkU4BasAAyKtdA5FlAWEDAWADwAD962ADkU6YGwSMpxfAAMqdwADLkQaJ6gBdA5FDAWEDAWADwAD962ADkU4BasAAysZdA5FDAWEDAWADwAD962ADkU6YSQSMqBfAAM5UwADPYwaJ7QBdA5FlAWEDAWADiXNgA5FOAWrAAM5+XQORZQFhAwFgA4lzYAORTph1BIypF8AAz9DAANCtBonvAF0DkUMBYQMBYAOJc2ADkU4BasAAz/pdA5FDAWEDAWADiXNgA5FOmKAEjKoXwADTRMAA1EMGifIAXQORZQFhAwFgA4lzYAORTgFqwADTal0DkWUBYQMBYAOJc2ADkU6YygSMqxfAANSwwADVfQaJ9ABdA5FDAWEDAWADiXNgA5FOAWrAANTWXQORQwFhAwFgA4lzYAORTpj1BIysF8AA2ATAANkUBon3AF0DkWUBYQMBYAOJc2ADkU4BasAA2DRdA5FlAWEDAWADiXNgA5FOmR8EjK0XwADZhcAA2okGifkAXQORQwFhAwFgA4lzYAORTgFqwADZtV0DkUMBYQMBYAOJc2ADkU6ZSgSMrhfAANzjwADdIQaJ/ABdA5FDAWADwAD9DgFqwADdAmADkVmZgQSMrxfAAN1vwADeKwaKAABgA5FZAWrAAN2XYAORWZmBBIywF8AA3pvAAN+UBooBAF0DkWUBYQMBYAPAAP3rYAORTgFqwADe010DkWUBYQMBYAPAAP3rYAORTpmmBIyxF8AA4ADAAOD+BooDAF0DkUMBYQMBYAPAAP3rYAORTgFqwADgNF0DkUMBYQMBYAPAAP3rYAORTpnGBIyyF8AA4ubAAOQXBooFAF0DkWUBYQMBYAOIuGADkU4BasAA4xFdA5FlAWEDAWADiLhgA5FOmfIEjLMXwADkgMAA5RoGigcAXQORQwFhAwFgA4i4YAORTgFqwADkq10DkUMBYQMBYAOIuGADkU6aEASMtBfAAOf/wADpcwaKCQBdA5FlAWEDBGADwAD962ADiXNgA4i4YAOIuGADkU4BasAA6DFdA5FlAWEDBGADwAD962ADiXNgA4i4YAOIuGADkU6aOQSMtRfAAOodwADrCgaKCwBdA5FDAWEDBGADwAD962ADiXNgA4i4YAOIuGADkU4BasAA6ktdA5FDAWEDBGADwAD962ADiXNgA4i4YAOIuGADkU6aZQSMthfAAO9bwADwyQaKDQBdA5FlAWEDAmADiXNgA4i4YAORTgFqwADvjV0DkWUBYQMCYAOJc2ADiLhgA5FOmpwEjLcXwADxSsAA8g0Gig8AXQORQwFhAwJgA4lzYAOIuGADkU4BasAA8XxdA5FDAWEDAmADiXNgA4i4YAORTpq+BIy4F8AA9YfAAPa0BooRAF0DkWUBYQMCYAPAAP3rYAOJc2ADkU4BasAA9bhdA5FlAWEDAmADwAD962ADiXNgA5FOmusEjLkXwAD3NMAA+DQGihMAXQORQwFhAwJgA8AA/etgA4lzYAORTgFqwAD3ZV0DkUMBYQMCYAPAAP3rYAOJc2ADkU6bHASMuhfAAPtLwAD8cQaKFgBdA5FlAWEDAmADwAD962ADiXNgA5FOAWrAAPt3XQORZQFhAwJgA8AA/etgA4lzYAORTptMBIy7F8AA/PHAAP3jBooYAF0DkUMBYQMCYAPAAP3rYAOJc2ADkU4BasAA/R1dA5FDAWEDAmADwAD962ADiXNgA5FOm3AEjLwXwAEA1cABAeAGihoAXQORZQFhAwFgA8AA/etgA5FOAWrAAQEGXQORZQFhAwFgA8AA/etgA5FOm6AEjL0XwAECRsABA0cGihwAXQORQwFhAwFgA8AA/etgA5FOAWrAAQJ3XQORQwFhAwFgA8AA/etgA5FOm80EjL4XwAEFWcABBvcGih8AXQORZQFhAwFgA4lzYAORTgFqwAEFmF0DkWUBYQMBYAOJc2ADkU6b+QSMvxfAAQdowAEIhAaKIQBdA5FDAWEDAWADiXNgA5FOAWrAAQejXQORQwFhAwFgA4lzYAORTpwkBIzAF8ABC5zAAQzvBookAF0DkWUBYQMBYAOJc2ADkU4BasABC8ddA5FlAWEDAWADiXNgA5FOnE4EjMEXwAENYMABDkAGiiYAXQORQwFhAwFgA4lzYAORTgFqwAENi10DkUMBYQMBYAOJc2ADkU6cbASMwhfAARFMwAESdQaKKABdA5FlAWEDA2ADiXNgA4i4YAOIuGADkU4BasABEXFdA5FlAWEDA2ADiXNgA4i4YAOIuGADkU6clgSMwxfAARMQwAETwgaKKgBdA5FDAWEDA2ADiXNgA4i4YAOIuGADkU4BasABEzFdA5FDAWEDA2ADiXNgA4i4YAOIuGADkU6cvASMxBfAARc4wAEYQwaKLABdA5FlAWEDAWADiXNgA5FOAWrAARdoXQORZQFhAwFgA4lzYAORTpztBIzFF8ABGLTAARm3BoouAF0DkUMBYQMBYAOJc2ADkU4BasABGOBdA5FDAWEDAWADiXNgA5FOnRgEjMYXwAEcbsABHaEGijEAXQORZQFhAwNgA8AA/etgA8AA/etgA8AA/etgA5FOAWrAARyVXQORZQFhAwNgA8AA/etgA8AA/etgA8AA/etgA5FOnUIEjMcXwAEeLcABHtoGijMAXQORQwFhAwNgA8AA/etgA8AA/etgA8AA/etgA5FOAWrAAR5UXQORQwFhAwNgA8AA/etgA8AA/etgA8AA/etgA5FOnW4EjMgXwAEhl8ABIpsGijUAXQORZQFhAwFgA8AA/etgA5FOAWrAASHDXQORZQFhAwFgA8AA/etgA5FOnaUEjMkXwAEjA8ABI+AGijcAXQORQwFhAwFgA8AA/etgA5FOAWrAASMvXQORQwFhAwFgA8AA/etgA5FOndIEjMoXwAEl18ABJvIGijoAXQORZQFhAwFgA8AA/etgA5FOAWrAASYHXQORZQFhAwFgA8AA/etgA5FOnf4EjMsXwAEnXsABKFYGijwAXQORQwFhAwFgA8AA/etgA5FOAWrAASeOXQORQwFhAwFgA8AA/etgA5FOnisEjMwXwAEqK8ABKncGij8AXQORQwFgA8AA/Q4BasABKlNgA5FZnmQEjM0XwAEqxcABK8kGikMAYAORWQFqwAEq8mADkVmeZASMzhfAASwWwAEsUgaKRABdA5FDAWADwAD9DgFqwAEsNGADkVmelgSMzxfAASygwAEtdAaKSABgA5FZAWrAASzHYAORWZ6WBIzQF8ABLcHAAS3zBopJAF0DkUMBYAPAAP0OAWrAAS3aYAORWZ67BIzRF8ABLkHAAS8BBopMAGADkVkBasABLmNgA5FZnrsEjNIXwAEvTsABL4QGik0AXQORQwFgA8AA/Q4BasABL2lgA5FZnuAEjNMXwAEv0sABMFsGilAAYAORWQFqwAEv9mADkVme4ASM1BfAATD5wAEyFQaKUQBdA5FlAWEDAmADwAD962ADwAD962ADkU4BasABMR5dA5FlAWEDAmADwAD962ADwAD962ADkU6fBASM1RfAATKRwAEzZgaKUwBdA5FDAWEDAmADwAD962ADwAD962ADkU4BasABMrZdA5FDAWEDAmADwAD962ADwAD962ADkU6fNwSM1hfAATWFwAE1qwaKVgBdA5FDAWADwAD9DgFqwAE1mGADkVmfbwSM1xfAATX5wAE3FwaKWgBgA5FZAWrAATYVYAORWZ9vBIzYF8ABN2TAATe4BopbAF0DkUMBYAPAAP0OAWrAATeQYAORWZ+kBIzZF8ABOAbAATmFBopgAGADkVkBasABODdgA5FZn6QEjNoXwAE6CcABO1UGimEAXQORZQFhAwFgA8AA/etgA5FOAWrAATo2XQORZQFhAwFgA8AA/etgA5FOn80EjNsXwAE7u8ABPJQGimQAXQORQwFhAwFgA8AA/etgA5FOAWrAATvoXQORQwFhAwFgA8AA/etgA5FOn/sEjNwXwAE+uMABPuoGimcAXQORQwFgA8AA/Q4BasABPtFgA5FZoDcEjN0XwAE/OMABQFYGimwAYAORWQFqwAE/WmADkVmgNwSM3hfAAUCjwAFAxwaKbQBdA5FDAWADwAD9DgFqwAFAtWADkVmgYwSM3xfAAUEVwAFB5waKcQBgA5FZAWrAAUEwYAORWaBjBIzgF8ABQjTAAUJkBopyAF0DkUMBYAPAAP0OAWrAAUJMYAORWaCYBIzhF8ABQrLAAUPiBop3AGADkVkBasABQtNgA5FZoJgEjOIXwAFETMABRRoGingAXQORZQFhAwFgA8AA/etgA5FOAWrAAUR0XQORZQFhAwFgA8AA/etgA5FOoL4EjOMXwAFFgMABRm0GinoAXQORQwFhAwFgA8AA/etgA5FOAWrAAUWkXQORQwFhAwFgA8AA/etgA5FOoOsEjOQXwAFIFcABSEcGin0AXQORQwFgA8AA/Q4BasABSC5gA5FZoSQEjOUXwAFIlcABSWsGioEAYAORWQFqwAFIt2ADkVmhJASM5hfAAUm4wAFJ/AaKggBdA5FDAWADwAD9DgFqwAFJ3GADkVmhTwSM5xfAAUpKwAFLGgaKhgBgA5FZAWrAAUpzYAORWaFPBIzoF8ABS2fAAUuxBoqHAF0DkUMBYAPAAP0OAWrAAUuOYAORWaGEBIzpF8ABS//AAU1TBoqMAGADkVkBasABTCtgA5FZoYQEjOoXwAFNoMABTewGio0AXQORQwFgA8AA/Q4BasABTchgA5FZobcEjOsXwAFOOsABTxQGipEAYAORWQFqwAFOZ2ADkVmhtwSM7BfAAU9hwAFPnwaKkgBdA5FDAWADwAD9DgFqwAFPgGADkVmh6QSM7RfAAU/twAFQ3QaKlgBgA5FZAWrAAVAVYAORWaHpBIzuF8ABUUvAAVI6BoqXAF0DkWUBYQMBYAPAAP3rYAORTgFqwAFRf10DkWUBYQMBYAPAAP3rYAORTqIOBIzvF8ABUqDAAVNrBoqZAF0DkUMBYQMBYAPAAP3rYAORTgFqwAFS0F0DkUMBYQMBYAPAAP3rYAORTqIuBIzwF8ABVTTAAVVuBoqbAF0DkUMBYAPAAP0OAWrAAVVRYAORWaJmBIzxF8ABVbzAAVZ1BoqfAGADkVkBasABVeJgA5FZomYEjPIXwAFWwsABVvoGiqAAXQORQwFgA8AA/Q4BasABVt5gA5FZoo4EjPMXwAFXSMABWEEGiqQAYAORWQFqwAFXbWADkVmijgSM9BfAAVivwAFZrQaKpQBdA5FlAWEDAWADwAD962ADkU4BasABWOFdA5FlAWEDAWADwAD962ADkU6isgSM9RfAAVoTwAFa7gaKpwBdA5FDAWEDAWADwAD962ADkU4BasABWkFdA5FDAWEDAWADwAD962ADkU6i0gSM9hfAAVy6wAFdAAaKqQBdA5FDAWADwAD9DgFqwAFc32ADkVmjAQSM9xfAAV1OwAFeiwaKrQBgA5FZAWrAAV14YAORWaMBBIz4F8ABXwvAAV/kBoquAF0DkWUBYQMCYAPAAP3rYAPAAP3rYAORTgFqwAFfMF0DkWUBYQMCYAPAAP3rYAPAAP3rYAORTqMmBIz5F8ABYGDAAWDrBoqwAF0DkUMBYQMCYAPAAP3rYAPAAP3rYAORTgFqwAFggV0DkUMBYQMCYAPAAP3rYAPAAP3rYAORTqNMBIz6F8ABYsTAAWL2BoqyAF0DkUMBYAPAAP0OAWrAAWLdYAORWaODBIz7F8ABY0TAAWRBBoq2AGADkVkBasABY2ZgA5FZo4MEjPwXwAFkjsABZLoGircAXQORQwFgA8AA/Q4BasABZKRgA5FZo64EjP0XwAFlCMABZeoGirsAYAORWQFqwAFlJ2ADkVmjrgSM/hfAAWaFwAFn5gaKvABdA5FlAWEDAmADwAD962ADwAD962ADkU4BasABZqpdA5FlAWEDAmADwAD962ADwAD962ADkU6j1gSM/xfAAWhfwAFpPwaKvwBdA5FDAWEDAmADwAD962ADwAD962ADkU4BasABaIRdA5FDAWEDAmADwAD962ADwAD962ADkU6kCgSNABfAAWvbwAFsqgaKwgBdA5FlAWEDAWADwAD962ADkU4BasABbARdA5FlAWEDAWADwAD962ADkU6kPASNARfAAW0QwAFt2waKxABdA5FDAWEDAWADwAD962ADkU4BasABbTVdA5FDAWEDAWADwAD962ADkU6kaQSNAhfAAW+lwAFwmAaKxwBdA5FlAWEDAWADwAD962ADkU4BasABb95dA5FlAWEDAWADwAD962ADkU6klQSNAxfAAXECwAFyAAaKyQBdA5FDAWEDAWADwAD962ADkU4BasABcTddA5FDAWEDAWADwAD962ADkU6kwgSNBBfAAXPqwAF0uAaKzABdA5FlAWEDAWADwAD962ADkU4BasABdAxdA5FlAWEDAWADwAD962ADkU6k7gSNBRfAAXUewAF11waKzgBdA5FDAWEDAWADwAD962ADkU4BasABdTxdA5FDAWEDAWADwAD962ADkU6lGwSNBhfAAXd/wAF35QaK0QBdA5FDAWADwAD9DgFqwAF3tGADkVmlVASNBxfAAXgzwAF5WQaK1QBgA5FZAWrAAXhxYAORWaVUBI0IF8ABeabAAXoWBorWAF0DkUMBYAPAAP0OAWrAAXngYAORWaV5BI0JF8ABemTAAXtABorZAGADkVkBasABeqdgA5FZpXkEjQoXwAF7rsABfTsGitoAXQORZQFhAwFgA8AA/etgA5FOAWrAAXvuXQORZQFhAwFgA8AA/etgA5FOpaAEjQsXwAF9pcABftoGit0AXQORQwFhAwFgA8AA/etgA5FOAWrAAX3hXQORQwFhAwFgA8AA/etgA5FOpc4EjQwXwAGBKMABgVwGiuAAXQORQwFgA8AA/Q4BasABgUJgA5FZpgAEjQ0XwAGBqsABgrIGiuQAYAORWQFqwAGBzWADkVmmAASNDhfAAYM2wAGEQgaK5QBdA5FlAWEDAWADwAD962ADkU4BasABg19dA5FlAWEDAWADwAD962ADkU6mJQSNDxfAAYSowAGFdgaK5wBdA5FDAWEDAWADwAD962ADkU4BasABhNFdA5FDAWEDAWADwAD962ADkU6mUgSNEBfAAYeCwAGIVwaK6gBdA5FlAWEDAWADwAD962ADkU4BasABh7RdA5FlAWEDAWADwAD962ADkU6mfgSNERfAAYi9wAGJgwaK7ABdA5FDAWEDAWADwAD962ADkU4BasABiOtdA5FDAWEDAWADwAD962ADkU6mngSNEhfAAYt7wAGNJwaK7gBdA5Fl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BowyAGADkVkBasACX7dgA5FZuPsEjaAXwAJgxsACYcgGjDMAXQORZQFhAwFgA56xYAORTgFqwAJg7V0DkWUBYQMBYAOesWADkU65IwSNoRfAAmIuwAJiwgaMNgBdA5FDAWEDAWADnrFgA5FOAWrAAmJRXQORQwFhAwFgA56xYAORTrlFBI2iF8ACZFzAAmSGBow4AF0DkUMBYAPAAP0OAWrAAmRxYAORWbl7BI2jF8ACZNTAAmWNBow8AGADkVkBasACZPJgA5FZuXsEjaQXwAJl2sACZiAGjD0AXQORQwFgA8AA/Q4BasACZf9gA5FZuaYEjaUXwAJmbsACZ1kGjEEAYAORWQFqwAJmmGADkVm5pgSNphfAAmfDwAJolgaMQgBdA5FlAWEDAWADwAD962ADkU4BasACZ/BdA5FlAWEDAWADwAD962ADkU65ywSNpxfAAmj8wAJpjQaMRABdA5FDAWEDAWADwAD962ADkU4BasACaSVdA5FDAWEDAWADwAD962ADkU656wSNqBfAAms6wAJrZAaMRgBdA5FDAWADwAD9DgFqwAJrT2ADkVm6FgSNqRfAAmuywAJ2rQaMSQBgA5FZAWrAAmvUYAORWboWBI2qF8ACdvrAAncmBoxKAF0DkUMBYAPAAP0OAWrAAncQYAORWbo6BI2rF8ACd3TAAnhaBoxNAGADkVkBasACd5dgA5FZujoEjawXwAJ43MACeckGjE4AXQORZQFhAwJgA4i4YAOIuGADkU4BasACeQRdA5FlAWEDAmADiLhgA4i4YAORTrpeBI2tF8ACekfAAnrdBoxQAF0DkUMBYQMCYAOIuGADiLhgA5FOAWrAAnprXQORQwFhAwJgA4i4YAOIuGADkU66gASNrhfAAn1+wAJ+ggaMUgBdA5FlAWEDAWADwAD962ADkU4BasACfbRdA5FlAWEDAWADwAD962ADkU66rQSNrxfAAn7swAJ/mAaMVABdA5FDAWEDAWADwAD962ADkU4BasACfx5dA5FDAWEDAWADwAD962ADkU66zQSNsBfAAoGMwAKCyQaMVgBdA5FlAWEDAWADwAD962ADkU4BasACga9dA5FlAWEDAWADwAD962ADkU66+ASNsRfAAoMvwAKDrgaMWABdA5FDAWEDAWADwAD962ADkU4BasACg1JdA5FDAWEDAWADwAD962ADkU67GASNshfAAoXswAKHFAaMWgBdA5FlAWEDAWADwAD962ADkU4BasAChhBdA5FlAWEDAWADwAD962ADkU67QwSNsxfAAod6wAKH/AaMXABdA5FDAWEDAWADwAD962ADkU4BasACh55dA5FDAWEDAWADwAD962ADkU67YwSNtBfAAoo6wAKLcQaMXgBdA5FlAWEDAWADwAD962ADkU4BasACil9dA5FlAWEDAWADwAD962ADkU67jgSNtRfAAovXwAKMXAaMYABdA5FDAWEDAWADwAD962ADkU4BasACi/xdA5FDAWEDAWADwAD962ADkU67rgSNthfAAo6UwAKPoQaMYgBdA5FlAWEDAWADwAD962ADkU4BasACjrFdA5FlAWEDAWADwAD962ADkU672QSNtxfAApAHwAKQdAaMZABdA5FDAWEDAWADwAD962ADkU4BasACkCRdA5FDAWEDAWADwAD962ADkU67+QSNuBfAApJ9wAKTSAaMZgBdA5FlAWEDAWADwAD962ADkU4BasACkqJdA5FlAWEDAWADwAD962ADkU68JASNuRfAApOuwAKUJwaMaABdA5FDAWEDAWADwAD962ADkU4BasACk89dA5FDAWEDAWADwAD962ADkU68RASNuhfAApXxwAKW6AaMagBdA5FlAWEDAWADiLhgA5FOAWrAApYQXQORZQFhAwFgA4i4YAORTrxvBI27F8ACl1HAApfHBoxsAF0DkUMBYQMBYAOIuGADkU4BasACl3BdA5FDAWEDAWADiLhgA5FOvI0EjbwXwAKaWMACm30GjG4AXQORZQFhAwNgA4i4YAOIuGADiLhgA5FOAWrAApp4XQORZQFhAwNgA4i4YAOIuGADiLhgA5FOvLYEjb0XwAKcDMACnKwGjHAAXQORQwFhAwNgA4i4YAOIuGADiLhgA5FOAWrAApwoXQORQwFhAwNgA4i4YAOIuGADiLhgA5FOvNwEjb4XwAKgL8ACoTsGjHIAXQORZQFhAwJgA8AA/etgA4i4YAORTgFqwAKgTl0DkWUBYQMCYAPAAP3rYAOIuGADkU69DQSNvxfAAqGxwAKiNAaMdABdA5FDAWEDAmADwAD962ADiLhgA5FOAWrAAqHQXQORQwFhAwJgA8AA/etgA4i4YAORTr0xBI3AF8ACpPrAAqXvBox2AF0DkWUBYQMB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uGADkU7AAFxrBI6MF8AESRbABEqdBo5KAF0DkWUBYQMCYAOIuGADiLhgA5FOAWrABElCXQORZQFhAwJgA4i4YAOIuGADkU7AAFyfBI6NF8AESxvABEwFBo5MAF0DkUMBYQMCYAOIuGADiLhgA5FOAWrABEtHXQORQwFhAwJgA4i4YAOIuGADkU7AAFzIBI6OF8AETx7ABE9WBo5OAF0DkUMBYAPAAP0OAWrABE86YAORWcAAXQsEjo8XwARPpMAEUFgGjlIAYAORWQFqwARPyWADkVnAAF0LBI6QF8AEUKXABFDTBo5TAF0DkUMBYAPAAP0OAWrABFC8YAORWcAAXUUEjpEXwARRIcAEUfYGjlcAYAORWQFqwARRQWADkVnAAF1FBI6SF8AEUmDABFMqBo5YAF0DkWUBYQMBYAPAAP3rYAORTgFqwARSil0DkWUBYQMBYAPAAP3rYAORTsAAXXAEjpMXwARTkMAEVBgGjloAXQORQwFhAwFgA8AA/etgA5FOAWrABFO2XQORQwFhAwFgA8AA/etgA5FOwABdlASOlBfABFW2wARV5AaOXABdA5FDAWADwAD9DgFqwARVzWADkVnAAF3GBI6VF8AEVjLABFbyBo5fAGADkVkBasAEVlJgA5FZwABdxgSOlhfABFc/wARXcQaOYABdA5FDAWADwAD9DgFqwARXWGADkVnAAF3zBI6XF8AEV7/ABFh8Bo5jAGADkVkBasAEV+FgA5FZwABd8wSOmBfABFjJwARZDQaOZABdA5FDAWADwAD9DgFqwARY7WADkVnAAF4wBI6ZF8AEWVvABFsBBo5pAGADkVkBasAEWYRgA5FZwABeMASOmhfABFtrwARcUAaOagBdA5FlAWEDAWADnrFgA5FOAWrABFuPXQORZQFhAwFgA56xYAORTsAAXl4EjpsXwARctsAEXUEGjmwAXQORQwFhAwFgA56xYAORTgFqwARc1l0DkUMBYQMBYAOesWADkU7AAF6DBI6cF8AEXujABF+6Bo5uAF0DkWUBYQMCYAPAAP5sYAPAAP3rYAORTgFqwARfDl0DkWUBYQMCYAPAAP5sYAPAAP3rYAORTsAAXrIEjp0XwARgLMAEYLQGjnAAXQORQwFhAwJgA8AA/mxgA8AA/etgA5FOAWrABGBOXQORQwFhAwJgA8AA/mxgA8AA/etgA5FOwABe3ASOnhfABGJwwARitAaOcgBdA5FDAWADwAD9DgFqwARilGADkVnAAF8UBI6fF8AEYwLABGQBBo51AGADkVkBasAEYytgA5FZwABfFASOoBfABGROwARkggaOdgBdA5FDAWADwAD9DgFqwARkaGADkVnAAF9QBI6hF8AEZNDABGW0Bo57AGADkVkBasAEZPNgA5FZwABfUASOohfABGYBwARmPwaOfABdA5FDAWADwAD9DgFqwARmIGADkVnAAF+BBI6jF8AEZo3ABGewBo5/AGADkVkBasAEZrVgA5FZwABfgQSOpBfABGf9wARoMwaOgABdA5FDAWADwAD9DgFqwARoGGADkVnAAF+uBI6lF8AEaIHABGlzBo6DAGADkVkBasAEaKVgA5FZwABfrgSOphfABGnAwARqCAaOhABdA5FDAWADwAD9DgFqwARp5mADkVnAAF/qBI6nF8AEalbABGs8Bo6JAGADkVkBasAEaoFgA5FZwABf6gSOqBfABGuJwARrrQaOigBdA5FDAWADwAD9DgFqwARrm2ADkVnAAGAbBI6pF8AEa/vABG0iBo6OAGADkVkBasAEbBZgA5FZwABgGwSOqhfABG2MwARueAaOjwBdA5FlAWEDAWADwAD962ADkU4BasAEbbJdA5FlAWEDAWADwAD962ADkU7AAGBHBI6rF8AEbt7ABG+bBo6RAF0DkUMBYQMBYAPAAP3rYAORTgFqwARvAF0DkUMBYQMBYAPAAP3rYAORTsAAYHoEjqwXwARxd8AEcpkGjpQAXQORZQFhAwFgA8AA/etgA5FOAWrABHGVXQORZQFhAwFgA8AA/etgA5FOwABgrwSOrRfABHL/wARzpQaOlwBdA5FDAWEDAWADwAD962ADkU4BasAEcx1dA5FDAWEDAWADwAD962ADkU7AAGDWBI6uF8AEdZ/ABHXdBo6ZAF0DkUMBYAPAAP0OAWrABHW+YAORWcAAYQwEjq8XwAR2K8AEdzkGjp0AYAORWQFqwAR2U2ADkVnAAGEMBI6wF8AEd4bABHfWBo6eAF0DkUMBYAPAAP0OAWrABHewYAORWcAAYUgEjrEXwAR4JMAEeTgGjqIAYAORWQFqwAR4U2ADkVnAAGFIBI6yF8AEeaTABHtDBo6jAF0DkWUBYQMBYAPAAP5sYAORTgFqwAR5y10DkWUBYQMBYAPAAP5sYAORTsAAYXYEjrMXwAR7psAEfFQGjqYAXQORQwFhAwFgA8AA/mxgA5FOAWrABHvNXQORQwFhAwFgA8AA/mxgA5FOwABhnQSOtBfABH6TwAR+2waOqABdA5FDAWADwAD9DgFqwAR+uWADkVnAAGHbBI61F8AEfynABIAlBo6sAGADkVkBasAEf1RgA5FZwABh2wSOthfABICdwASBogaOrQBdA5FlAWEDAmADwAD962ADwAD+bGADkU4BasAEgMxdA5FlAWEDAmADwAD962ADwAD+bGADkU7AAGIGBI63F8AEghbABILdBo6vAF0DkUMBYQMCYAPAAP3rYAPAAP5sYAORTgFqwASCQV0DkUMBYQMCYAPAAP3rYAPAAP5sYAORTsAAYjAEjrgXwASFDsAEhhMGjrEAXQORZQFhAwJgA8AA/etgA8AA/mxgA5FOAWrABIU9XQORZQFhAwJgA8AA/etgA8AA/mxgA5FOwABiZQSOuRfABIaHwASHTgaOswBdA5FDAWEDAmADwAD962ADwAD+bGADkU4BasAEhrJdA5FDAWEDAmADwAD962ADwAD+bGADkU7AAGKPBI66F8AEiVTABImiBo61AF0DkUMBYAPAAP0OAWrABIl9YAORWcAAYtMEjrsXwASJ8MAEiwMGjrkAYAORWQFqwASKHmADkVnAAGLTBI68F8AEi1DABIuUBo66AF0DkUMBYAPAAP0OAWrABIt0YAORWcAAYv4Ejr0XwASL4sAEjJUGjr0AYAORWQFqwASMC2ADkVnAAGL+BI6+F8AEjOLABI0aBo6+AF0DkUMBYAPAAP0OAWrABIz+YAORWcAAYzUEjr8XwASNaMAEjj0GjsIAYAORWQFqwASNjWADkVnAAGM1BI7AF8AEjqfABI9jBo7DAF0DkWUBYQMBYAPAAP3rYAORTgFqwASOyl0DkWUBYQMBYAPAAP3rYAORTsAAY2AEjsEXwASPycAEkKIGjsUAXQORQwFhAwFgA8AA/etgA5FOAWrABI/oXQORQwFhAwFgA8AA/etgA5FOwABjkwSOwhfABJIywASSZgaOyABdA5FDAWADwAD9DgFqwASSTGADkVnAAGPFBI7DF8AEkrTABJNHBo7LAGADkVkBasAEktdgA5FZwABjxQSOxBfABJOUwAST2AaOzABdA5FDAWADwAD9DgFqwASTuGADkVnAAGPzBI7FF8AElCbABJT7Bo7QAGADkVkBasAElE9gA5FZwABj8wSOxhfABJVIwASVlgaO0QBdA5FDAWADwAD9DgFqwASVcWADkVnAAGQgBI7HF8AEleTABJbcBo7UAGADkVkBasAElhJgA5FZwABkIASOyBfABJcpwASXbwaO1QBdA5FDAWADwAD9DgFqwASXTmADkVnAAGRRBI7JF8AEl73ABJj2Bo7ZAGADkVkBasAEl+dgA5FZwABkUQSOyhfABJliwASaSgaO2gBdA5FlAWEDAWADwAD8BWADkU4BasAEmZNdA5FlAWEDAWADwAD8BWADkU7AAGR+BI7LF8AEmq7ABJtvBo7cAF0DkUMBYQMBYAPAAPwFYAORTgFqwASa210DkUMBYQMBYAPAAPwFYAORTsAAZKIEjswXwASdCMAEnTQGjt4AXQORQwFgA8AA/Q4BasAEnR5gA5FZwABk4wSOzRfABJ2CwASe1QaO4wBgA5FZAWrABJ2hYAORWcAAZOMEjs4XwASfIsAEn2AGjuQAXQORQwFgA8AA/Q4BasAEn0FgA5FZwABlFASOzxfABJ+uwASgrgaO6ABgA5FZAWrABJ/WYAORWcAAZRQEjtAXwASg+8AEoT8GjukAXQORQwFgA8AA/Q4BasAEoR9gA5FZwABlUQSO0RfABKGNwASiwwaO7gBgA5FZAWrABKG2YAORWcAAZVEEjtIXwASjMcAEpAMGju8AXQORZQFhAwFgA8AA/etgA5FOAWrABKNgXQORZQFhAwFgA8AA/etgA5FOwABlfwSO0xfABKRpwASlJgaO8QBdA5FDAWEDAWADwAD962ADkU4BasAEpJRdA5FDAWEDAWADwAD962ADkU7AAGWjBI7UF8AEpyDABKkgBo7zAF0DkWUBYQMCYAPAAP3rXQPAAPypAWADwAD962ADkU4BasAEp1FdA5FlAWEDAmADwAD9610DwAD8qQFgA8AA/etgA5FOwABl1QSO1RfABKmfwASqrwaO9gBdA5FDAWEDAmADwAD9610DwAD8qQFgA8AA/etgA5FOAWrABKnQXQORQwFhAwJgA8AA/etdA8AA/KkBYAPAAP3rYAORTsAAZhgEjtYXwASt98AErh0GjvkAXQORQwFgA8AA/Q4BasAErgpgA5FZhkgEjtcXwASua8AErt8Gh9UAYAORWQFqwASuh2ADkVmGSASO2BfABK8swASvUAaO+gBdA5FDAWADwAD9DgFqwASvPmADkVmBrwSO2RfABK+ewASwQwaCDgBgA5FZAWrABK+5YAORWYGvBI7aF8AEsJDABLDMBo77AF0DkUMBYAPAAP0OAWrABLCuYAORWcAAZmkEjtsXwASxGsAEsj4GjwAAYAORWQFqwASxQWADkVnAAGZpBI7cF8AEsovABLLFBo8BAF0DkUMBYAPAAP0OAWrABLKoYAORWcAAZp0Ejt0XwASzE8AEtAUGjwUAYAORWQFqwASzOWADkVnAAGadBI7eF8AEtHHABLVXBo8GAF0DkWUBYQMBYAPAAP5sYAORTgFqwAS0j10DkWUBYQMBYAPAAP5sYAORTsAAZsoEjt8XwAS1usAEtl4GjwgAXQORQwFhAwFgA8AA/mxgA5FOAWrABLXYXQORQwFhAwFgA8AA/mxgA5FOwABm/QSO4BfABLfrwAS4NwaPCwBdA5FDAWADwAD9DgFqwAS4E2ADkVnAAGc1BI7hF8AEuIXABLliBo8PAGADkVkBasAEuLJgA5FZwABnNQSO4hfABLmvwAS57QaPEABdA5FDAWADwAD9DgFqwAS5zmADkVnAAGd0BI7jF8AEujvABLtMBo8VAGADkVkBasAEumNgA5FZwABndASO5BfABLvowAS9NwaPFgBdA5FlAWEDA2ADiLhgA4i4YAOIuGADkU4BasAEvB5dA5FlAWEDA2ADiLhgA4i4YAOIuGADkU7AAGeiBI7lF8AEvcbABL8GBo8YAF0DkUMBYQMDYAOIuGADiLhgA4i4YAORTgFqwAS9+F0DkUMBYQMDYAOIuGADiLhgA4i4YAORTsAAZ9sEjuYXwATCucAExCUGjxsAXQORZQFhAwNgA8AA/etgA8AA/etgA4i4YAORTgFqwATC510DkWUBYQMDYAPAAP3rYAPAAP3rYAOIuGADkU7AAGgTBI7nF8AExK3ABMW6Bo8dAF0DkUMBYQMDYAPAAP3rYAPAAP3rYAOIuGADkU4BasAExNtdA5FDAWEDA2ADwAD962ADwAD962ADiLhgA5FOwABoUASO6BfABMmFwATKvgaPIABdA5FlAWEDAmADwAD962ADwAD962ADkU4BasAEyahdA5FlAWEDAmADwAD962ADwAD962ADkU7AAGiPBI7pF8AEyzrABMvgBo8jAF0DkUMBYQMCYAPAAP3rYAPAAP3rYAORTgFqwATLXV0DkUMBYQMCYAPAAP3rYAPAAP3rYAORTsAAaL8EjuoXwATOFcAEzmkGjyUAXQORQwFgA8AA/Q4BasAEzkFgA5FZwABpBQSO6xfABM63wATPqwaPKQBgA5FZAWrABM7oYAORWcAAaQUEjuwXwATP+MAE0CQGjyoAXQORQwFgA8AA/Q4BasAE0A5gA5FZwABpNgSO7RfABNBywATRfgaPLgBgA5FZAWrABNCRYAORWcAAaTYEju4XwATRy8AE0f0Gjy8AXQORQwFgA8AA/Q4BasAE0eRgA5FZwABpdQSO7xfABNJLwATThQaPNABgA5FZAWrABNJtYAORWcAAaXUEjvAXwATT0sAE1BYGjzUAXQORQwFgA8AA/Q4BasAE0/ZgA5FZwABpqQSO8RfABNRkwATVWQaPOQBgA5FZAWrABNSNYAORWcAAaakEjvIXwATVpsAE1dYGjzoAXQORQwFgA8AA/Q4BasAE1b5gA5FZwABp3ASO8xfABNYkwATXDwaPPgBgA5FZAWrABNZFYAORWcAAadwEjvQXwATXXMAE14IGjz8AXQORQwFgA8AA/Q4BasAE129gA5FZwABqDwSO9RfABNfQwATYsAaPQwBgA5FZAWrABNfsYAORWcAAag8EjvYXwATY/cAE2TkGj0QAXQORQwFgA8AA/Q4BasAE2RtgA5FZwABqSwSO9xfABNmHwATaUQaPSABgA5FZAWrABNmuYAORWcAAaksEjvgXwATa1cAE29EGj0kAXQORZQFhAwFgA8AA/etgA5FOAWrABNr/XQORZQFhAwFgA8AA/etgA5FOwABqdgSO+RfABNw3wATc8QaPSwBdA5FDAWEDAWADwAD962ADkU4BasAE3GFdA5FDAWEDAWADwAD962ADkU7AAGqaBI76F8AE3szABN8aBo9NAF0DkUMBYAPAAP0OAWrABN71YAORWcAAas8EjvsXwATfaMAE4JYGj1EAYAORWQFqwATflmADkVnAAGrPBI78F8AE4QXABOI4Bo9SAF0DkWUBYQMBYAOesWADkU4BasAE4R9dA5FlAWEDAWADnrFgA5FOwABq/wSO/RfABOKewATjOwaPVQBdA5FDAWEDAWADnrFgA5FOAWrABOK4XQORQwFhAwFgA56xYAORTsAAayQEjv4XwATlLMAE5gMGj1cAXQORZQFhAwFgA8AA/etgA5FOAWrABOVVXQORZQFhAwFgA8AA/etgA5FOwABrVASO/xfABOZpwATnXQaPWQBdA5FDAWEDAWADwAD962ADkU4BasAE5o5dA5FDAWEDAWADwAD962ADkU7AAGuHBI8AF8AE6Q7ABOlYBo9cAF0DkUMBYAPAAP0OAWrABOk1YAORWcAAa7kEjwEXwATppsAE6jwGj18AYAORWQFqwATp0mADkVnAAGu5BI8CF8AE6tzABOx/Bo9gAF0DkWUBYQMCYAPAAP3rYAPAAPwFYAORTgFqwATq/10DkWUBYQMCYAPAAP3rYAPAAPwFYAORTsAAa+QEjwMXwATs/cAE7cgGj2MAXQORQwFhAwJgA8AA/etgA8AA/AVgA5FOAWrABO0gXQORQwFhAwJgA8AA/etgA8AA/AVgA5FOwABsEQSPBBfABPDkwATx5QaPZQBdA5FlAWEDAWADwAD8BWADkU4BasAE8QddA5FlAWEDAWADwAD8BWADkU7AAGxHBI8FF8AE8k3ABPMGBo9nAF0DkUMBYQMBYAPAAPwFYAORTgFqwATycF0DkUMBYQMBYAPAAPwFYAORTsAAbGsEjwYXwAT08MAE9SQGj2kAXQORQwFgA8AA/Q4BasAE9QpgA5FZwABsngSPBxfABPVywAT2pAaPbQBgA5FZAWrABPWVYAORWcAAbJ4EjwgXwAT28cAE9x0Gj24AXQORQwFgA8AA/Q4BasAE9wdgA5FZwABsygSPCRfABPdrwAT4jAaPcQBgA5FZAWrABPeKYAORWcAAbMoEjwoXwAT42cAE+R8Gj3IAXQORQwFgA8AA/Q4BasAE+P5gA5FZwABtBQSPCxfABPltwAT6egaPdgBgA5FZAWrABPmXYAORWcAAbQUEjwwXwAT6x8AE+wUGj3cAXQORQwFgA8AA/Q4BasAE+uZgA5FZwABtMASPDRfABPtTwAT76AaPegBgA5FZAWrABPt7YAORWcAAbTAEjw4XwAT8NcAE/HMGj3sAXQORQwFgA8AA/Q4BasAE/FRgA5FZwABtagSPDxfABPzBwAT+GAaPgABgA5FZAWrABPzpYAORWcAAbWoEjxAXwAT+hsAE/38Gj4EAXQORZQFhAwFgA8AA/etgA5FOAWrABP61XQORZQFhAwFgA8AA/etgA5FOwABtmASPERfABP/lwAUAogaPgwBdA5FDAWEDAWADwAD962ADkU4BasAFABBdA5FDAWEDAWADwAD962ADkU7AAG28BI8SF8AFAqDABQOqBo+FAF0DkWUBYQMBYAPAAP3rYAORTgFqwAUCyl0DkWUBYQMBYAPAAP3rYAORTsAAbesEjxMXwAUEEMAFBMoGj4cAXQORQwFhAwFgA8AA/etgA5FOAWrABQQ6XQORQwFhAwFgA8AA/etgA5FOwABuDwSPFBfABQazwAUG7QaPiQBdA5FDAWADwAD9DgFqwAUG0GADkVnAAG4+BI8VF8AFBzvABQfzBo+MAGADkVkBasAFB2FgA5FZwABuPgSPFhfABQiNwAUJswaPjQBdA5FlAWEDAmADwAD962ADwAD962ADkU4BasAFCLhdA5FlAWEDAmADwAD962ADwAD962ADkU7AAG5nBI8XF8AFCivABQswBo+PAF0DkUMBYQMCYAPAAP3rYAPAAP3rYAORTgFqwAUKVl0DkUMBYQMCYAPAAP3rYAPAAP3rYAORTsAAbqAEjxgXwAUNxMAFDm8Gj5IAXQORZQFhAwFgA8AA/etgA5FOAWrABQ3hXQORZQFhAwFgA8AA/etgA5FOwABu2ASPGRfABQ7VwAUPjQaPlABdA5FDAWEDAWADwAD962ADkU4BasAFDu5dA5FDAWEDAWADwAD962ADkU7AAG78BI8aF8AFEQzABRE4Bo+WAF0DkUMBYAPAAP0OAWrABREiYAORWcAAby4EjxsXwAURhsAFEgcGj5kAYAORWQFqwAURpWADkVnAAG8uBI8cF8AFElTABRJ4Bo+aAF0DkUMBYAPAAP0OAWrABRJmYAORWcAAb1YEjx0XwAUSxsAFE1QGj50AYAORWQFqwAUS4WADkVnAAG9WBI8eF8AFE77ABRSIBo+eAF0DkWUBYQMBYAOesWADkU4BasAFE+RdA5FlAWEDAWADnrFgA5FOwABvfwSPHxfABRTuwAUVagaPoABdA5FDAWEDAWADnrFgA5FOAWrABRUQXQORQwFhAwFgA56xYAORTsAAb6EEjyAXwAUW9MAFF8sGj6IAXQORZQFhAwFgA8AA/etgA5FOAWrABRceXQORZQFhAwFgA8AA/etgA5FOwABvzgSPIRfABRgzwAUY+waPpABdA5FDAWEDAWADwAD962ADkU4BasAFGFldA5FDAWEDAWADwAD962ADkU7AAG/yBI8iF8AFGofABRqvBo+mAF0DkUMBYAPAAP0OAWrABRqbYAORWcAAcCIEjyMXwAUa/cAFG3cGj6kAYAORWQFqwAUbGmADkVnAAHAiBI8kF8AFG8TABRvyBo+qAF0DkUMBYAPAAP0OAWrABRvbYAORWcAAcEoEjyUXwAUcQMAFHMYGj60AYAORWQFqwAUcYGADkVnAAHBKBI8mF8AFHRPABR07Bo+uAF0DkUMBYAPAAP0OAWrABR0nYAORWcAAcHIEjycXwAUdicAFHfwGj7EAYAORWQFqwAUdpmADkVnAAHByBI8oF8AFHknABR5lBo+yAF0DkUMBYAPAAP0OAWrABR5XYAORWcAAcKAEjykXwAUes8AFH7YGj7YAYAORWQFqwAUeymADkVnAAHCgBI8qF8AFIDrABSHtBo+3AF0DkWUBYQMBYAPAAP3rYAORTgFqwAUgaV0DkWUBYQMBYAPAAP3rYAORTsAAcNAEjysXwAUiU8AFI0UGj7oAXQORQwFhAwFgA8AA/etgA5FOAWrABSKCXQORQwFhAwFgA8AA/etgA5FOwABxBgSPLBfABSXxwAUm2gaPvQBdA5FlAWEDAWADwAD962ADkU4BasAFJiBdA5FlAWEDAWADwAD962ADkU7AAHE4BI8tF8AFJ0DABSfXBo+/AF0DkUMBYQMBYAPAAP3rYAORTgFqwAUna10DkUMBYQMBYAPAAP3rYAORTsAAcVwEjy4XwAUpu8AFKrQGj8EAXQORZQFhAwFgA8AA/etgA5FOAWrABSnqXQORZQFhAwFgA8AA/etgA5FOwABxiwSPLxfABSsawAUr/waPwwBdA5FDAWEDAWADwAD962ADkU4BasAFK0VdA5FDAWEDAWADwAD962ADkU7AAHG+BI8wF8AFLefABS7hBo/GAF0DkWUBYQMBYAPAAP3rYAORTgFqwAUuFl0DkWUBYQMBYAPAAP3rYAORTsAAcfAEjzEXwAUvR8AFMCwGj8gAXQORQwFhAwFgA8AA/etgA5FOAWrABS9yXQORQwFhAwFgA8AA/etgA5FOwAByFASPMhfABTH0wAUyPAaPygBdA5FDAWADwAD9DgFqwAUyGmADkVnAAHJGBI8zF8AFMorABTMlBo/NAGADkVkBasAFMrVgA5FZwAByRgSPNBfABTOPwAU0ZwaPzgBdA5FlAWEDAWADwAD962ADkU4BasAFM7ldA5FlAWEDAWADwAD962ADkU7AAHJuBI81F8AFNM3ABTV7Bo/QAF0DkUMBYQMBYAPAAP3rYAORTgFqwAU0810DkUMBYQMBYAPAAP3rYAORTsAAcpIEjzYXwAU3esAFOJ8Gj9IAXQORZQFhAwJgA8AA/etgA8AA/etgA5FOAWrABTemXQORZQFhAwJgA8AA/etgA8AA/etgA5FOwABywQSPNxfABTkXwAU6KwaP1ABdA5FDAWEDAmADwAD962ADwAD962ADkU4BasAFOUNdA5FDAWEDAmADwAD962ADwAD962ADkU7AAHL6BI84F8AFPOzABT4gBo/XAF0DkWUBYQMCYAPAAP3rYAPAAP3rYAORTgFqwAU9HV0DkWUBYQMCYAPAAP3rYAPAAP3rYAORTsAAczIEjzkXwAU+mMAFP8gGj9kAXQORQwFhAwJgA8AA/etgA8AA/etgA5FOAWrABT7JXQORQwFhAwJgA8AA/etgA8AA/etgA5FOwABzawSPOhfABUKzwAVD8QaP3ABdA5FlAWEDA2ADwAD962ADwAD962ADwAD962ADkU4BasAFQuJdA5FlAWEDA2ADwAD962ADwAD962ADwAD962ADkU7AAHOjBI87F8AFRHfABUWqBo/eAF0DkUMBYQMDYAPAAP3rYAPAAP3rYAPAAP3rYAORTgFqwAVEpl0DkUMBYQMDYAPAAP3rYAPAAP3rYAPAAP3rYAORTsAAc9MEjzwXwAVI+cAFSiQGj+AAXQORZQFhAwJgA8AA/etgA8AA/etgA5FOAWrABUknXQORZQFhAwJgA8AA/etgA8AA/etgA5FOwAB0EQSPPRfABUqcwAVLuQaP4gBdA5FDAWEDAmADwAD962ADwAD962ADkU4BasAFSspdA5FDAWEDAmADwAD962ADwAD962ADkU7AAHRKBI8+F8AFTsfABVEdBo/lAF0DkWUBYQMFYAPAAP3rYAPAAP3rYAOIuGADiLhgA8AA/etgA5FOAWrABU71XQORZQFhAwVgA8AA/etgA8AA/etgA4i4YAOIuGADwAD962ADkU7AAHSFBI8/F8AFUdXABVMNBo/oAF0DkUMBYQMFYAPAAP3rYAPAAP3rYAOIuGADiLhgA8AA/etgA5FOAWrABVIDXQORQwFhAwVgA8AA/etgA8AA/etgA4i4YAOIuGADwAD962ADkU7AAHTABI9AF8AFWKPABVplBo/qAF0DkWUBYQMEYAPAAP3rYAOIuGADiLhgA8AA/etgA5FOAWrABVjSXQORZQFhAwRgA8AA/etgA4i4YAOIuGADwAD962ADkU7AAHUHBI9BF8AFWxTABVxGBo/tAF0DkUMBYQMEYAPAAP3rYAOIuGADiLhgA8AA/etgA5FOAWrABVs/XQORQwFhAwRgA8AA/etgA4i4YAOIuGADwAD962ADkU7AAHU8BI9CF8AFYOfABWIPBo/vAF0DkWUBYQMCYAPAAP3rYAPAAP3rYAORTgFqwAVhFV0DkWUBYQMCYAPAAP3rYAPAAP3rYAORTsAAdXoEj0MXwAVih8AFY7IGj/EAXQORQwFhAwJgA8AA/etgA8AA/etgA5FOAWrABWK1XQORQwFhAwJgA8AA/etgA8AA/etgA5FOwAB1swSPRBfABWZZwAVnQwaP9ABdA5FlAWEDAmADwAD962ADwAD+bGADkU4BasAFZn1dA5FlAWEDAmADwAD962ADwAD+bGADkU7AAHXrBI9FF8AFZ7PABWgzBo/2AF0DkUMBYQMCYAPAAP3rYAPAAP5sYAORTgFqwAVn010DkUMBYQMCYAPAAP3rYAPAAP5sYAORTsAAdhUEj0YXwAVqPcAFaxgGh9sAXQORZQFhAwFgA8AA/etgA5FOAWrABWpkXQORZQFhAwFgA8AA/etgA5FOh9QEj0cXwAVrgMAFbAEGj/gAXQORQwFhAwFgA8AA/etgA5FOAWrABWujXQORQwFhAwFgA8AA/etgA5FOwAB2RwSPSBfABW2RwAVtswaP+gBdA5FDAWADwAD9DgFqwAVtomADkVnAAHaDBI9JF8AFbgHABW7LBo/+AGADkVkBasAFbhtgA5FZwAB2gwSPShfABW8YwAVvSAaP/wBdA5FDAWADwAD9DgFqwAVvMGADkVnAAHauBI9LF8AFb5bABXA6BpACAGADkVkBasAFb7dgA5FZwAB2rgSPTBfABXCHwAVwqQaQAwBdA5FDAWADwAD9DgFqwAVwmGADkVnAAHbZBI9NF8AFcPfABXIGBpAHAGADkVkBasAFcRFgA5FZwAB22QSPThfABXJTwAVykQaQCABdA5FDAWADwAD9DgFqwAVycmADkVnAAHcHBI9PF8AFct/ABXOIBpALAGADkVkBasAFcwdgA5FZwAB3BwSPUBfABXP0wAV1OgaQDABdA5FlAWEDAWADwAD+bGADkU4BasAFdBRdA5FlAWEDAWADwAD+bGADkU7AAHcyBI9RF8AFdZ3ABXZMBpAPAF0DkUMBYQMBYAPAAP5sYAORTgFqwAV1vV0DkUMBYQMBYAPAAP5sYAORTsAAd2gEj1IXwAV4lcAFebYGkBIAXQORZQFhAwNgA8AA/mxgA8AA/etgA8AA/etgA5FOAWrABXi/XQORZQFhAwNgA8AA/mxgA8AA/etgA8AA/etgA5FOwAB3mgSPUxfABXo4wAV7UwaQFABdA5FDAWEDA2ADwAD+bGADwAD962ADwAD962ADkU4BasAFemJdA5FDAWEDA2ADwAD+bGADwAD962ADwAD962ADkU7AAHfZBI9UF8AFffvABX4dBpAXAF0DkUMBYAPAAP0OAWrABX4MYAORWcAAeBcEj1UXwAV+a8AFfwYGkBoAYAORWQFqwAV+hWADkVnAAHgXBI9WF8AFf1PABX93BpAbAF0DkUMBYAPAAP0OAWrABX9lYAORWcAAeEgEj1cXwAV/xcAFgJkGkB8AYAORWQFqwAV/4GADkVnAAHhIBI9YF8AFgObABYEYBpAgAF0DkUMBYAPAAP0OAWrABYD/YAORWcAAeHgEj1kXwAWBZsAFgpMGkCQAYAORWQFqwAWBiGADkVnAAHh4BI9aF8AFguDABYMkBpAlAF0DkUMBYAPAAP0OAWrABYMEYAORWcAAeKYEj1sXwAWDcsAFhB0GkCgAYAORWQFqwAWDm2ADkVnAAHimBI9cF8AFhMTABYXPBpApAF0DkWUBYQMDYAPAAP5sYAPAAP5sYAPAAP5sYAORTgFqwAWE5l0DkWUBYQMDYAPAAP5sYAPAAP5sYAPAAP5sYAORTsAAeM4Ej10XwAWGTMAFh0oGkCsAXQORQwFhAwNgA8AA/mxgA8AA/mxgA8AA/mxgA5FOAWrABYZuXQORQwFhAwNgA8AA/mxgA8AA/mxgA8AA/mxgA5FOwAB4/gSPXhfABYnGwAWLLgaQLQBdA5FlAWEDA2ADwAD+bGADwAD+bGADwAD962ADkU4BasAFieNdA5FlAWEDA2ADwAD+bGADwAD+bGADwAD962ADkU7AAHk/BI9fF8AFi63ABYycBpAwAF0DkUMBYQMDYAPAAP5sYAPAAP5sYAPAAP3rYAORTgFqwAWLyl0DkUMBYQMDYAPAAP5sYAPAAP5sYAPAAP3rYAORTsAAeYEEj2AXwAWPPsAFj2AGkDMAXQORQwFgA8AA/Q4BasAFj09gA5FZwAB5wgSPYRfABY+uwAWQXAaQNwBgA5FZAWrABY/IYAORWcAAecIEj2IXwAWQw8AFkYIGkDgAXQORZQFhAwFgA8AA/mxgA5FOAWrABZDhXQORZQFhAwFgA8AA/mxgA5FOwAB57QSPYxfABZHlwAWScgaQOgBdA5FDAWEDAWADwAD+bGADkU4BasAFkf9dA5FDAWEDAWADwAD+bGADkU7AAHogBI9kF8AFk9PABZQBBpA9AF0DkUMBYAPAAP0OAWrABZPqYAORWcAAelIEj2UXwAWUT8AFlOIGkEAAYAORWQFqwAWUb2ADkVnAAHpSBI9mF8AFlS/ABZV/BpBBAF0DkUMBYAPAAP0OAWrABZVZYAORWcAAenoEj2cXwAWVzcAFlpsGkEQAYAORWQFqwAWV/GADkVnAAHp6BI9oF8AFlujABZcmBpBFAF0DkUMBYAPAAP0OAWrABZcHYAORWcAAeqIEj2kXwAWXdMAFmAoGkEgAYAORWQFqwAWXnGADkVnAAHqiBI9qF8AFmFfABZiRBpBJAF0DkUMBYAPAAP0OAWrABZh0YAORWcAAesoEj2sXwAWY38AFmYQGkEwAYAORWQFqwAWZBWADkVnAAHrKBI9sF8AFmfzABZsHBpBNAF0DkWUBYQMCYAPAAP3rYAPAAP5sYAORTgFqwAWaJV0DkWUBYQMCYAPAAP3rYAPAAP5sYAORTsAAevUEj20XwAWbd8AFnAYGkFAAXQORQwFhAwJgA8AA/etgA8AA/mxgA5FOAWrABZucXQORQwFhAwJgA8AA/etgA8AA/mxgA5FOwAB7IgSPbhfABZ4TwAWeQQaQUgBdA5FDAWADwAD9DgFqwAWeKmADkVnAAHtaBI9vF8AFno/ABZ9zBpBWAGADkVkBasAFnq9gA5FZwAB7WgSPcBfABZ/AwAWgCgaQVwBdA5FDAWADwAD9DgFqwAWf52ADkVnAAHuUBI9xF8AFoFjABaEoBpBbAGADkVkBasAFoIRgA5FZwAB7lASPchfABaF1wAWhvwaQXABdA5FDAWADwAD9DgFqwAWhnGADkVnAAHvRBI9zF8AFog3ABaNoBpBhAGADkVkBasAFojlgA5FZwAB70QSPdBfABaO1wAWkAQaQYgBdA5FDAWADwAD9DgFqwAWj3WADkVnAAHwRBI91F8AFpE/ABaWJBpBnAGADkVkBasAFpHxgA5FZwAB8EQSPdhfABaXWwAWmDgaQaABdA5FDAWADwAD9DgFqwAWl8mADkVnAAHxCBI93F8AFplzABadbBpBsAGADkVkBasAFpoFgA5FZwAB8QgSPeBfABaeowAWn4AaQbQBdA5FDAWADwAD9DgFqwAWnxGADkVnAAHx8BI95F8AFqC7ABaj+BpBxAGADkVkBasAFqFNgA5FZwAB8fASPehfABalLwAWpmQaQcgBdA5FDAWADwAD9DgFqwAWpdGADkVnAAHytBI97F8AFqefABar1BpB2AGADkVkBasAFqhVgA5FZwAB8rQSPfBfABat3wAWs3waQdwBdA5FlAWEDAmADiLhgA4i4YAORTgFqwAWrtl0DkWUBYQMCYAOIuGADiLhgA5FOwAB83QSPfRfABa1dwAWuiAaQegBdA5FDAWEDAmADiLhgA4i4YAORTgFqwAWtmF0DkUMBYQMCYAOIuGADiLhgA5FOwAB9BgSPfhfABbFxwAWxrQaQfABdA5FDAWADwAD9DgFqwAWxj2ADkVnAAH1ABI9/F8AFsfvABbMCBpCAAGADkVkBasAFsiJgA5FZwAB9QASPgBfABbNwwAW0ZQaQgQBdA5FlAWEDAWADwAD962ADkU4BasAFs55dA5FlAWEDAWADwAD962ADkU7AAH1tBI+BF8AFtMvABbXUBpCDAF0DkUMBYQMBYAPAAP3rYAORTgFqwAW09V0DkUMBYQMBYAPAAP3rYAORTsAAfaAEj4IXwAW3l8AFt+EGkIYAXQORQwFgA8AA/Q4BasAFt75gA5FZwAB95ASPgxfABbgvwAW5bAaQiwBgA5FZAWrABbhbYAORWcAAfeQEj4QXwAW5ucAFueUGkIwAXQORQwFgA8AA/Q4BasAFuc9gA5FZwAB+IQSPhRfABbozwAW66AaQkABgA5FZAWrABbpSYAORWcAAfiEEj4YXwAW7NcAFu28GkJEAXQORQwFgA8AA/Q4BasAFu1JgA5FZwAB+WwSPhxfABbu9wAW8hAaQlQBgA5FZAWrABbvjYAORWcAAflsEj4gXwAW80cAFvRsGkJYAXQORQwFgA8AA/Q4BasAFvPhgA5FZwAB+hgSPiRfABb1pwAW+NQaQmQBgA5FZAWrABb2VYAORWcAAfoYEj4oXwAW+gsAFvr4GkJoAXQORQwFgA8AA/Q4BasAFvqBgA5FZwAB+vQSPixfABb8MwAXAAQaQngBgA5FZAWrABb8zYAORWcAAfr0Ej4wXwAXAaMAFwSwGh9wAXQORZQFhAwFgA8AA/mxgA5FOAWrABcCMXQORZQFhAwFgA8AA/mxgA5FOhmwEj40XwAXBj8AFwgIGkJ8AXQORQwFhAwFgA8AA/mxgA5FOAWrABcGvXQORQwFhAwFgA8AA/mxgA5FOwAB+5QSPjhfABcOcwAXE+AaH3QBdA5FlAWEDAWADwAD+bGADkU4BasAFw8VdA5FlAWEDAWADwAD+bGADkU6HEgSPjxfABcVbwAXF6QaQoQBdA5FDAWEDAWADwAD+bGADkU4BasAFxYRdA5FDAWEDAWADwAD+bGADkU7AAH8PBI+QF8AFx//ABcjCBofeAF0DkWUBYQMBYAPAAP5sYAORTgFqwAXIJl0DkWUBYQMBYAPAAP5sYAORToaPBI+RF8AFySXABcmhBpCjAF0DkUMBYQMBYAPAAP5sYAORTgFqwAXJSF0DkUMBYQMBYAPAAP5sYAORTsAAfzkEj5IXwAXLAMAFy04GkKUAXQORQwFgA8AA/Q4BasAFyylgA5FZwAB/ZgSPkxfABcucwAXMbgaQqABgA5FZAWrABcvKYAORWcAAf2YEj5QXwAXMu8AFzRMGkKkAXQORQwFgA8AA/Q4BasAFzOlgA5FZwAB/jgSPlRfABc1hwAXOYgaQrABgA5FZAWrABc2UYAORWcAAf44Ej5YXwAXOzMAFz4gGkK0AXQORZQFhAwFgA8AA/etgA5FOAWrABc7vXQORZQFhAwFgA8AA/etgA5FOwAB/tgSPlxfABc/uwAXQxwaQrwBdA5FDAWEDAWADwAD962ADkU4BasAF0A1dA5FDAWEDAWADwAD962ADkU7AAH/pBI+YF8AF0lfABdJ/BpCyAF0DkUMBYAPAAP0OAWrABdJrYAORWcAAgCoEj5kXwAXSzcAF04cGkLYAYAORWQFqwAXS6mADkVnAAIAqBI+aF8AF09TABdQi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WQFqwAZ1LmADkVnAAI85BJAAF8AGdi/ABnZ3BpGmAF0DkUMBYAPAAP0OAWrABnZVYAORWcAAj2QEkAEXwAZ2xcAGd9MGkakAYAORWQFqwAZ28GADkVnAAI9kBJACF8AGeCDABnhwBpGqAF0DkUMBYAPAAP0OAWrABnhKYAORWcAAj54EkAMXwAZ4vsAGecgGka4AYAORWQFqwAZ47WADkVnAAI+eBJAEF8AGehXABno/BpGvAF0DkUMBYAPAAP0OAWrABnoqYAORWcAAj8wEkAUXwAZ6jcAGe1AGkbMAYAORWQFqwAZ6q2ADkVnAAI/MBJAGF8AGe53ABnvPBpG0AF0DkUMBYAPAAP0OAWrABnu2YAORWcAAkAYEkAcXwAZ8HcAGfOUGkbgAYAORWQFqwAZ8P2ADkVnAAJAGBJAIF8AGfYHABn76BpG5AF0DkWUBYQMCYAPAAP3rYAOIuGADkU4BasAGfaFdA5FlAWEDAmADwAD962ADiLhgA5FOwACQNASQCRfABn9wwAaALQaRvABdA5FDAWEDAmADwAD962ADiLhgA5FOAWrABn+QXQORQwFhAwJgA8AA/etgA4i4YAORTsAAkF8EkAoXwAaDi8AGhPsGkb4AXQORZQFhAwJgA8AA/etgA4i4YAORTgFqwAaDq10DkWUBYQMCYAPAAP3rYAOIuGADkU7AAJCYBJALF8AGhXHABoYuBpHBAF0DkUMBYQMCYAPAAP3rYAOIuGADkU4BasAGhZFdA5FDAWEDAmADwAD962ADiLhgA5FOwACQwwSQDBfABomDwAaK/AaRwwBdA5FlAWEDAmADwAD962ADiLhgA5FOAWrABomjXQORZQFhAwJgA8AA/etgA4i4YAORTsAAkPwEkA0XwAaLcsAGjC8GkcYAXQORQwFhAwJgA8AA/etgA4i4YAORTgFqwAaLkl0DkUMBYQMCYAPAAP3rYAOIuGADkU7AAJEnBJAOF8AGjz7ABo98BpHIAF0DkUMBYAPAAP0OAWrABo9dYAORWcAAkW8EkA8XwAaPysAGkS4Gkc0AYAORWQFqwAaP8mADkVnAAJFvBJAQF8AGkZjABpJXBpHOAF0DkWUBYQMBYAOesWADkU4BasAGkbxdA5FlAWEDAWADnrFgA5FOwACRnQSQERfABpK9wAaTagaR0ABdA5FDAWEDAWADnrFgA5FO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WAQAAWq9610DkUMBYQMBYAPAAP3rYAORTo2AAyIkvpIDJ5JHgL47wAVQOyeSTIiiJL7UAyeSSYC+xcAFUDsnkk1bMr7nYAPAAP3rWwEngL2AvvDABVA7BpBBF8AAQo3AAEKVwABEUQABkk6MIQAAAAEDwABCysAARFEAAAABAQHAAELSAAAAgL1gA8AA/esAAGADkU4BPgNJwABC3BbAAELlgMAAQuDABVEMgVXAAP3xPTDAAELuJ5IjPz2IwABDCsAFUQwewABDEYJJAQABgMAAQy7ABVEMAErAAEM3AR/AAENCkVgEAAFqwABDSl0DkUMBYQMBYAPAAP3rYAORTo3NAyIkwABD6wMnkkeAwABDo8AFUQwnkk+IoiTAAEQtAyeSSYDAAEQewAVRDCeSTVsywABEQGADwAD961sBJ4C9gMAAREnABVEMBpBCF8AASNfAAEjfwABKEQABklCMIQAAAAEDwABJB8AAShEAAAABAQHAAEkPAAAAgL1gA8AA/esAAGADkU4BPgNJwABJGRbAAEkigMAASR3ABVH/gVXAAP3xPTDAAEkrJ5IjPz2IwABJR8AFUf8ewABJToJJAQABgMAASWvABVH/AErAAEl0AR/AAEl/kVgDAAFqwABJh10DkUMBYQMBYAPAAP3rYAORTo5EAiIkwABJ7QMnklGAwABJy8AFUf8nklJbMsAASgBgA8AA/etbASeAvYDAAEoJwAVR/waQQxfAAE03wABNP8AATowAAZJTjCEAAAABA8AATWTAAE6MAAAAAQEBwABNawAAAJJUYAOesQAAYAORTgE+Ak7AAE19wABNhAAAgl5gA8AA/esBFsAATYyAwABNhsAFUtuCXp7LSsAATZYBH8AATaGRWAQAAWrAAE2pXQORQwFhAwFgA56xYAORTo6fAyIkwABOIQMnklWBwABN/cAFUvInklaIoieJLFsywABOeWADwAD961sBJ5JUgMAAToPABVLbBpBEF8AAUWzAAFF0wABSaQABkleMIQAAAAEDwABRoMAAUmkAAAABAQHAAFGnAAAAklRgA56xAABgA5FOAT4CTsAAUbnAAFHAAACCXmADwAD96wEWwABRyIDAAFHCwAVTnYJenstKwABR0gEfwABR3ZFYAwABasAAUeVdA5FDAWEDAWADnrFgA5FOjvQCIiTAAFJDAyeSWIHAAFIo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wAEbuAAAAAEBAcABGi4AAACShmADiXMAAGADkU4BPgROwAEaScABGlEAAJIuYAOfbQEfwAEaV5+SAAAAAE7AARp1wAEagwAAkoddA8AA/KkBYAPAAP1RARzAARqNgcABGoXABXdZkogBAAGAwAEam8AFd0IAn3ROwAEasMABGrkAAIYFYAPAAP3rARzAARrJgsABGrvABXd2WAAAAADAAPx7SsABGtMBH8ABGt6RWAMAAWrAARrmXQORQwFhAwFgA4lzYAORTp0YAiIcwAEbZSTAARtlAyeSjIPAARsuwAV3sCeSj2QBAAEWwAEbfYHAARt1wAV3WZI1n5AAwAD+AFsywAEbnmADwAD961sBJ4YFgMABG6vABXdCBpBlF8ABHxbAAR8ewAEhEQABkrCMIQAAAAEDwAEfQsABIREAAAADAwPAAR9PAAAAg+xgA8AA/esAwAEfXgAAAJJ2YAPAAP3rAMABH24AAACSsWADwAD96wAAYAORTgE+BEnAAR97FsABH4aAwAEff8AFeHuBVcAA/fE9MMABH48nkl0/ScABH60WwAEfuYHAAR+xwAV4i4FVwAD98T0wwAEfwieSXT9JwAEf4BbAAR/sgsABH+TABXibgVXAAP3xPTDAAR/1J5JdP0rAASATAR/AASAekVgDAAFqwAEgJl0DkUMBYQMDYAPAAP3rYAPAAP3rYAPAAP3rYAORTp1uAiIkwAEgwQcnkpaAwAEgccAFeHsnkpeBwAEggMAFeIsnkrKCwAEgtMAFeJsngUtbMsABINRgA8AA/etbAyeD7IDAASDfwAV4eyeSdoHAASDywAV4iyeSsYLAASEGwAV4mwaQZhfAASQcwAEkJMABJVEAAZKzjCEAAAABA8ABJE3AASVRAAAAAQEBwAEkVQAAAIPsYAPAAP3rAABgA5FOAT4CScABJGEWwAEkbIDAASRlwAV524FVwAD98T0wwAEkdSeSXT9KwAEkkwEfwAEknpFYAwABasABJKZdA5FDAWEDAWADwAD962ADkU6d0gIiJMABJSkDJ5K0gMABJP/ABXnbJ5K1WzLAASU8YAPAAP3rWwEng+yAwAElR8AFedsGkGcXwAEoksABKJrAASneAAGStowhAAAAAQPAASjHwAEp3gAAAAEBAcABKM8AAACD7GADwAD96wAAYAORTgE+AknAASjbFsABKOaA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AP3rYAORTr7lAyIkwAK5jAMnk2mAwAK5W8AFvQ8nk2yIoieMllsywAK6DGADwAD961sBJ4C9gMACuhXABb0PBpCrF8ACvWjAAr1wwAK/AwABk22MIQAAAAEDwAK9msACvwMAAAABAQHAAr2iAAAAgL1gA8AA/esAAGADkU4BPgNJwAK9rBbAAr21gMACvbDABb3wgVXAAP3xPTDAAr2+J5IjPz2IwAK92sAFvfAewAK94YJJAQABgMACvf7ABb3wAErAAr4HAR/AAr4SkVgEAAFqwAK+Gl0DkUMBYQMBYAPAAP3rYAORTr8yAyIkwAK+ggMnk26AwAK+ZMAFvfAnkr2IoieKY1sywAK+8mADwAD961sBJ4C9gMACvvvABb3wBpCsF8ACwnrAAsKCwALD8AABk2+MIQAAAAEDwALCt8ACw/AAAAABAQHAAsK/AAAAgL1gA8AA/esAAGADkU4BPgNJwALCyRbAAsLSgMACws3ABb7RgVXAAP3xPTDAAsLbJ5IjPz2IwALC98AFvtEewALC/oJJAQABgMACwxvABb7RAErAAsMkAR/AAsMvkVgDAAFqwALDN10DkUMBYQMBYAPAAP3rYAORTr+LAiIkwALDzAMng0KAwALDg8AFvtEnk3BbMsACw99gA8AA/etbASeAvYDAAsPowAW+0QaQrRfAAscGwALHDsACyFcAAZNxjCEAAAABA8ACx0jAAshXAAAAAQEBwALHVQAAAIC9YAPAAP3rAABgA5FOAT4DScACx18WwALHaIDAAsdjwAW/rYFVwAD98T0wwALHcSeSIz89iMACx43ABb+tHsACx5SCSQEAAYDAAsexwAW/rQBKwALHugEfwALHxZFYAwABasACx81dA5FDAWEDAWADwAD962ADkU6/1wIiJMACyDMDJ4NCgMACyBTABb+tJ5NyWzLAAshGYAPAAP3rWwEngL2AwALIT8AFv60GkK4XwALMKMACzDDAAs6jAAGTc4whAAAAAQPAAsxfwALOowAAAAICAsACzG4AAACSLGADiLgAwALMfgAAAJItYAOIuAAAYAORTgE+Bk7AAsyWwALMngAAki5gA59tAR/AAsykn5IAAAAATsACzMLAAszMAACSL10DwAD8qQFgA8AA/VEBHMACzNaCwALMzsAFwK6SMAEAAYDAAszgwAXAiQCfc07AAsz3wALN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PlYAAIKQYAPAAP3rARzAAz5ihcADPljABdUoWAAAAADAAPx7TsADPnPAAz55AACSMmADwAD96wEcwAM+hobAAz57wAXVYlgAAAAAwAD8e0rAAz6QAR/AAz6bkVgEAAFqwAM+o10DkUMBYQMEYAOIuGADiLhgA8AA/etgA8AA/etgA5FOwABKTwMiHMADP2okwAM/agknk5mHwAM+98AF1h4nk5oUwAM/HsAF1kkIACeTm4LAAz8+wAXU4ieSl4PAAz9LwAXU8ieTnWQBAAEWwAM/goTAAz96wAXVC5I1n5AAwAD+AIiiJ41RWzLAAz/1YAPAAP3rWwQngpCAwANAB8AF1MYnkjKBwANAH8AF1NQngL2CwANAN8AF1OInkkODwANATsAF1PIGkL4XwANFzMADRdTAA0rZAAGTnowhAAAAAQPAA0YCwANK2QAAAAYGBsADRgwAAACSLGADiLgAwANGIAAAAJItYAOIuADAA0YvAAAAgL1gA8AA/esAwANGPAAAAJJDYAPAAP3rAMADRkoAAACTn2ADwAD96wDAA0ZYAAAAk6BgA8AA/esAAGADkU4BPg5OwANGb8ADRncAAJIuYAOfbQEfwANGfZ+SAAAAAE7AA0abwANGpQAAki9dA8AA/KkBYAPAAP1RARzAA0avhsADRqfABdfakjABAAGAwANGucAF13UAn3NOwANG0MADRtsAAJIxXQPAAPypAWADwAD9UQEcwANG5YbAA0bdwAXX2pIwAQABgcADRu/ABdeDAJ9zScADRvoWwANHA4LAA0b+wAXXkYFVwAD98T0wwANHDCeSIz89isADRyjABdeRHsADRy+CSQEAAYLAA0dMwAXXkQBJwANHVRbAA0dfg8ADR1nABdehgVXAAP3xPTDAA0doJ5IjPz2LwANHhMAF16EewANHjIJJAQABg8ADR6nABdehAEnAA0ezFsADR72EwANHt8AF17GBVcAA/fE9MMADR8YnkiM/PYzAA0fiwAXXsR7AA0fqgkkBAAGEwANIB8AF17EAScADSBEWwANIG4XAA0gVwAXXwYFVwAD98T0wwANIJCeSIz89jcADSEDABdfBHsADSEiCSQEAAYXAA0hlwAXXwQBOwANIdsADSHsAAIKQYAPAAP3rARzAA0iHh8ADSH3ABdf3WAAAAADAAPx7TsADSJjAA0ieAACSMmADwAD96wEcwANIqxTAA0igwAXYMQgAWAAAAADAAPx7SsADSLUBH8ADSMCRWAQAAWrAA0jIXQORQwFhAwZgA4i4YAOIuGADwAD962ADwAD962ADwAD962ADwAD962ADkU7AAErQAyIcwANJqyTAA0mrDSeTmRTAA0kbwAXZbwkAJ5OaFMADSULABdmaCgAnk5uCwANJYsAF15EnkpeDwANJb8AF16Enk6GEwANJi8AF17Enk6KFwANJn8AF18EngUtkAQABFsADScOGwANJu8AF19qSNZ+QAMAA/gCIoieNUVsywANKQGADwAD961sGJ4KQgMADSlLABdd1J5IygcADSmrABdeDJ4C9gsADSoLABdeRJ5JDg8ADSpnABdehJ5OfhMADSrHABdexJ5OghcADSsnABdfBBpC/F8ADUNLAA1DawANWBQABk6OMIQAAAAEDwANREMADVgUAAAAGBgbAA1EaAAAAkixgA4i4AMADUS4AAACSLWADiLgAwANRPQAAAIC9YAPAAP3rAMADUUoAAACSQ2ADwAD96wDAA1FYAAAAk59gA8AA/esAwANRZgAAAJOgYAPAAP3rAABgA5FOAT4OTsADUX3AA1GFAACSLmADn20BH8ADUYufkgAAAABOwANRqcADUbMAAJIvXQPAAPypAWADwAD9UQEcwANRvYbAA1G1wAXba5IwAQABgMADUcfABdsGAJ9zTsADUd7AA1HpAACSMV0DwAD8qQFgA8AA/VEBHMADUfOGwANR68AF22uSMAEAAYHAA1H9wAXbFACfc0nAA1IIFsADUhGCwANSDMAF2yKBVcAA/fE9MMADUhonkiM/PYrAA1I2wAXbIh7AA1I9gkkBAAGCwANSWsAF2yIAScADUmMWwANSbYPAA1JnwAXbMoFVwAD98T0wwANSdieSIz89i8ADUpLABdsyHsADUpqCSQEAAYPAA1K3wAXbMgBJwANSwRbAA1LLhMADUsXABdtCgVXAAP3xPTDAA1LUJ5IjPz2MwANS8MAF20IewANS+IJJAQABhMADUxXABdtCAEnAA1MfFsADUymFwANTI8AF21KBVcAA/fE9MMADUzInkiM/PY3AA1NOwAXbUh7AA1NWgkkBAAGFwANTc8AF21IATsADU4TAA1OJAACCkGADwAD96wEcwANTlYfAA1OLwAXbiFgAAAAAwAD8e07A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gcADZ+7ABeFUJ4C9gsADaAbABeFiJ5Neg8ADaB3ABeFyJ5JDhMADaDbABeGABpDCF8ADbY/AA22XwANyCgABk6eMIQAAAAEDwANty8ADcgoAAAAFBQXAA23VAAAAkixgA4i4AMADbekAAACSLWADiLgAwANt+AAAAIC9YAPAAP3rAMADbgcAAACTXGADiLgAwANuFgAAAJJDYAPAAP3rAABgA5FOAT4MTsADbi3AA241AACSLmADn20BH8ADbjufkgAAAABOwANuWcADbmMAAJIvXQPAAPypAWADwAD9UQEcwANubYXAA25lwAXk3ZIwAQABgMADbnfABeSKAJ9zTsADbo7AA26ZAACSMV0DwAD8qQFgA8AA/VEBHMADbqOFwANum8AF5N2SMAEAAYHAA26twAXkmACfc0nAA264FsADbsGCwANuvMAF5KaBVcAA/fE9MMADbsonkiM/PYrAA27mwAXkph7AA27tgkkBAAGCwANvCsAF5KYATsADbyDAA28rAACTXV0DwAD8qQFgA8AA/VEBHMADbzWFwANvLcAF5N2SMAEAAYPAA28/wAXktgCfc0nAA29KFsADb1SEwANvTsAF5MSBVcAA/fE9MMADb10nkiM/PYzAA295wAXkxB7AA2+BgkkBAAGEwANvnsAF5MQATsADb6/AA2+0AACCkGADwAD96wEcwANvwIbAA2+2wAXk+lgAAAAAwAD8e07AA2/RwANv1wAAkjJgA8AA/esBHMADb+SHwANv2cAF5TRYAAAAAMAA/HtOwANv9cADb/sAAJNeYAPAAP3rARzAA3AIFMADb/3ABeWvCABYAAAAAMAA/HtKwANwEgEfwANwHZFYBAABasADcCVdA5FDAWEDBWADiLhgA4i4YAPAAP3rYAOIuGADwAD962ADkU7AAEzXAyIcwANw8CTAA3DwCyeTpBTAA3CHwAXmKgkAJ5OaFMADcK7ABeZVCgAnk5uCwANwzsAF5KYnkpcUwANw28AF5oALACeBaoTAA3DkwAXkxCeBS2QBAAEWwANxCIXAA3EAwAXk3ZI1n5AAwAD+AIiiJ41fWzLAA3GIYAPAAP3rWwUngpCAwANxmsAF5IonkjKBwANxssAF5JgngL2CwANxysAF5KYnk16DwANx4cAF5LYnkkOEwANx+sAF5MQGkMMXwAN2NsADdj7AA3cfAAGT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wAD96wEcwARAw4PABEC5wAYRZlgAAAAAwAD8e07ABEDUwARA2gAAkjJgA8AA/esBHMAEQOeEwARA3MAGEaBYAAAAAMAA/HtKwARA8QEfwARA/JFYBAABasAEQQRdA5FDAWEDAmADiLhgA4i4YAORTsAAW/wDIhzABEGKJMAEQYoFJ5P8hcAEQVjABhHaJ5P6hsAEQX7ABhIFJ4FLZAEAARbABEGigsAEQZrABhFJkjWfkADAAP4AiKInjkBbMsAEQilgA8AA/etbAieCkIDABEIywAYRJCeSMoHABEJCwAYRMgaQ5hfABEX6wARGAsAESHYAAZP9jCEAAAABA8AERifABEh2AAAAAgICwARGMQAAAJIsYAOIuADABEZBAAAAki1gA4i4AABgA5FOAT4GTsAERlnABEZhAACSLmADn20BH8AERmefkgAAAABOwARGhcAERo8AAJIvXQPAAPypAWADwAD9UQEcwARGmYLABEaRwAYTGJIwAQABgMAERqPABhLzAJ9zTsAERrrABEbFAACSMV0DwAD8qQFgA8AA/VEBHMAERs+CwARGx8AGExiSMAEAAYHABEbZwAYTAQCfc07ABEbrwARG8AAAgpBgA8AA/esBHMAERvyDwARG8sAGEzVYAAAAAMAA/HtOwARHDcAERxMAAJIyYAPAAP3rARzABEcghMAERxXABhNvWAAAAADAAPx7SsAERyoBH8AERzWRWAQAAWrABEc9XQORQwFhAwJgA4i4YAOIuGADkU7AAFxrAyIcwARHxiTABEfGBSeT/oXABEeUwAYTqSeT+obABEe6wAYT1CeBS2QBAAEWwARH3oLABEfWwAYTGJI1n5AAwAD+AIiiJ45GWzLABEhTYAPAAP3rWwIngpCAwARIXMAGEvMnkjKBwARIbMAGEwEGkOcXwARMQcAETEnABE7RAAGT/4whAAAAAQPABExywARO0QAAAAICAsAETIEAAACSLGADiLgAwARMkQAAAJItYAOIuAAAYAORTgE+Bk7ABEypwARMsQAAki5gA59tAR/ABEy3n5IAAAAATsAETNXABEzfAACSL10DwAD8qQFgA8AA/VEBHMAETOmCwARM4cAGFOeSMAEAAYDABEzzwAYUwgCfc07ABE0KwARNFQAAkjFdA8AA/KkBYAPAAP1RARzABE0fgsAETRfABhTnkjABAAGBwARNKcAGFNAAn3NOwARNO8AETUAAAIKQYAPAAP3rARzABE1Mg8AETULABhUEWAAAAADAAPx7TsAETV3ABE1jAACSMmADwAD96wEcwARNcITABE1lwAYVPlgAAAAAwAD8e0rABE16AR/ABE2FkVgEAAFqwARNjV0DkUMBYQMCYAOIuGADiLhgA5FOwABcyAMiHMAETh8kwAROHwUnlACFwARN7cAGFXgnk/qGwAROE8AGFaMngUtkAQABFsAETjeCwAROL8AGFOeSNZ+QAMAA/gCIoieOOlsywAROrmADwAD961sCJ4KQgMAETrfABhTCJ5IygcAETsfABhTQBpDoF8AEVFTABFRcwARVaQABlAGMIQAAAAEDwARUf8AEVWkAAAABAQHABFSHAAAAgL1gA8AA/esAAGADkU4BPgNJwARUkRbABFSagMAEVJXABhaRgVXAAP3xPTDABFSjJ5IjPz2IwARUv8AGFpEewARUxoJJAQABgMAEVOPABhaRAErABFTsAR/ABFT3kVgDAAFqwARU/10DkUMBYQMBYAPAAP3rYAORTsAAXZQCIiTABFVLAyeSw4DABFVBwAYWkSeBS1sywARVWGADwAD961sBJ4C9gMAEVWHABhaRBpDpF8AEXX3ABF2FwARebgABlAKMIQAAAAEDwARdosAEXm4AAAABAQHABF2pAAAAklRgA56xAABgA5FOAT4CTsAEXbvABF3CAACCXmADwAD96wEWwARdyoDABF3EwAYXb4JenstKwARd1AEfwARd35FYAwABasAEXeddA5FDAWEDAWADnrFgA5FOwABegwIiJMAEXkgDJ5QDgcAEXhzABheGJ5QEWzLABF5bYAPAAP3rWwEnklSAwAReZcAGF28GkOoXwARg8MAEYPjABGIjAAGUBYwhAAAAAQPABGEXwARiIwAAAAICAsAEYRwAAACSaGADwAD+bADABGEpAAAAg+xgA8AA/esAAGADkU4BPgNOwARhPMAEYUAAAICsYAPAAP3rAR7ABGFCkDUBAAGAwARhUMAGGC4AScAEYVkWwARhZIHABGFdwAYYPoFVwAD98T0wwARhbSeSXT9KwARhiwEfwARhlpFYAwABasAEYZ5dA5FDAWEDAmADwAD+bGADwAD962ADkU7AAF7cAiIkwARh9AUnlAaCwARh3sAGGFcnksaBwARh6cAG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wATIt2ADwAD961sDJ4C9gMAEyMDABiVAJ5JDgcAEyM/ABiVQJ4KQgsAEyN7ABiVgBpD3F8AEzBzABMwkwATNyAABlCiMIQAAAAEDwATMRMAEzcgAAAACAgLABMxMAAAAg+xgA8AA/esAwATMWwAAAJJ2YAPAAP3rAABgA5FOAT4DScAEzGgWwATMc4DABMxswAYnWYFVwAD98T0wwATMfCeSXT9JwATMmhbABMymgcAEzJ7ABidpgVXAAP3xPTDABMyvJ5JdP0rABMzNAR/ABMzYkVgEAAFqwATM4F0DkUMBYQMCYAPAAP3rYAPAAP3rYAORTsAAaL8DIiTABM1bBSeTDoDABM0kwAYnWSeUKYHABM1OwAYnaSeBS4iiJ48iWzLABM2fYAPAAP3rWwIng+yAwATNqsAGJ1knknaBwATNvcAGJ2kGkPgXwATdLcAE3TXABN5/AAGUKowhAAAAAQPABN1cwATefwAAAAEBAcAE3WQAAACAvWADwAD96wAAYAORTgE+A0nABN1uFsAE3XeAwATdcsAGKG+BVcAA/fE9MMAE3YAnkiM/PYjABN2cwAYobx7ABN2jgkkBAAGAwATdwMAGKG8ASsAE3ckBH8AE3dSRWAMAAWrABN3cXQORQwFhAwFgA8AA/etgA5FOwABqmgIiJMAE3lsDJ5QrgMAE3lHABihvJ4FLWzLABN5uYAPAAP3rWwEngL2AwATed8AGKG8GkPkXwATjd8AE43/ABOTCAAGULIwhAAAAAQPABOOWwATkwgAAAAEBAcAE450AAACSVGADnrEAAGADkU4BPgJOwATjr8AE47YAAIJeYAPAAP3rARbABOO+gMAE47jABilNgl6ey0rABOPIAR/ABOPTkVgEAAFqwATj210DkUMBYQMBYAOesWADkU7AAGskAyInj1OIoiTABOScBSeULYHABORbwAYpZCeULoHABOR8wAYpZCeUL1sywATkr2ADwAD961sBJ5JUgMAE5LnABilNBpD6F8AE55nABOehwATowQABlDCMIQAAAAEDwATnw8AE6MEAAAABAQHABOfLAAAAgL1gA8AA/esAAGADkU4BPgNJwATn1RbABOfegMAE59nABiodgVXAAP3xPTDABOfnJ5IjPz2IwAToA8AGKh0ewAToCoJJAQABgMAE6CfABiodAErABOgwAR/ABOg7kVgD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5QAAAAEBAcAArU8AAACD7mADhWcAAFwBPgQ9HMAArVsuhu8BAAFqwACtaWADwAD8BcAAaaYAlOY9HMAArXkul7MBAAEWwACtioDAAK2FwAgy24RTglkAlSA9HMAArZsul6wBAAEWwACttoDAAK2xwAgy24UehWkAlRs9HMAArcwuhvkBAAEWwACt24DAAK3WwAgy24CWhWoAlP4GlUQuwACt6sAArfvAAK8RAACFpgFqwACt62ADwAD9UQIAAAEDwACuEMAArxEAAAABAQHAAK4iAAAAg+5gA4WYAABcAT4GPRzAAK4uLobvAQABasAArjxgA8AA/AXAAGkzAJTmPRzAAK5TLpezAQABFsAArmSAwACuX8AIM6KEU4JZAJUgPRzAAK51Lob5AQABFsAAroSAwACuf8AIM6KFf4WaAJT+PRzAAK6TLob3AQABFsAArqKAwACuncAIM6KAvYWbAJUiPRzAAK6tLpd/AQABFsAArsWAwACuwMAIM6JbhZwAlQA9HMAArtUul2QBAAEWwACu9IDAAK7vwAgzooWAhZ0AlRoGlUUuwACvFsAAryfAALAuAACFqAFqwACvF2ADwAD9UQIAAAEDwACvQcAAsC4AAAABAQHAAK9YAAAAg+5gA4WrAABcAT4FPRzAAK9kLobvAQABasAAr3JgA8AA/AW0rwCU5j0cwACvji6XswEAARbAAK+fgMAAr5rACDSqhFOCWQCVID0cwACvsC6G9wEAARbAAK+/gMAAr7rACDSqgL2FrQCVIj0cwACvyi6XfwEAARbAAK/igMAAr93ACDSqW4WuAJUAPRzAAK/yLpdkAQABFsAAsBGAwACwDMAINKqFgIWvAJUaBpVGLsAAsDPAALBEwACxRQAAhZABasAAsDRgA8AA/VECAAABA8AAsF/AALFFAAAAAQEBwACwdwAAAIPuYAOFIQAAXAE+BT0cwACwgy6G7wEAAWrAALCRYAPAAPwFwACEgQCU5j0cwACwri6XswEAARbAALC/gMAAsLrACDWPhFOCWQCVID0cwACw0C6G+QEAARbAALDfgMAAsNrACDWPhX+FIwCU/j0cwACw7i6XrAEAARbAALEJgMAAsQTACDWPhR6FJACVGz0cwACxHy6XfwEAARbAALE3gMAAsTLACDWPW4UlAJUABpVHLsAAsUrAALFbwACyVwAAhaoBasAAsUtgA8AA/VECAAABA8AAsXDAALJXAAAAAQEBwACxggAAAIPuYAOFvQAAXAE+BD0cwACxji6G7wEAASMWwACxnYDAALGYwAg2doQdhcFqwACxq2ADwAD8BcAAhVlqwACxx2ADwAD8BcAAZzIBYAPAAPwFAJTmPRzAALHeLpezAQABFsAAse+AwACx6sAINnaEU4JZAJUgPRzAALIALpesAQABFsAAshuAwACyFsAINnaFHoW/AJUbPRzAALIxLpd/AQABFsAAskmAwACyRMAINnZbhcAAlQAGlUguwACyXMAAsm3AALONAACFrAFqwACyXWADwAD9UQIAAAEDwACyh8AAs40AAAABAQHAALKeAAAAg+5gA4XQAABcAT4EPRzAALKqLobvAQABIxbAALK5gMAAsrTACDdlhB2F1GrAALLPYAPAAPwFgzRqwACy+GADwAD8BcAAZpoBYAPAAPwFAJTmPRzAALMULpezAQABFsAAsyWAwACzIMAIN2WEU4JZAJUgPRzAALM2LpesAQABFsAAs1GAwACzTMAIN2WFHoXSAJUbPRzAALNnLpd/AQABFsAAs3+AwACzesAIN2VbhdMAlQAGlUkuwACzksAAs6PAALRlAACFoAFqwACzk2ADwAD9UQIAAAEDwACzscAAtGUAAAABAQHAALO8AAAAg+5gA4V4AABcAT4EPRzAALPILobzAQABHMAAs+sWwACz5BbAALPZgMAAs9TACDhShZOFe2HAAPzYZAEAARbAALP4FsAAs/KAwACz7cAIOFKFXYV8YcAA/NgAwAD9KgCU6D0cwAC0BS6XawEAARbAALQYgMAAtBPACDhShW2FegCU9T0cwAC0JC6XawEAARbAALQ3gMAAtDLACDhShZOFewCU9T0cwAC0SC6XawEAARbAALRbgMAAtFbACDhShV2FfACU9QaVSi7AALRqwAC0e8AAtOoAAIWiAWrAALRrYAPAAP1RAgAAAQPAALSPwAC06gAAAAEBAcAAtKAAAACD7mADhYYAAFwBPgI9HMAAtKwuhvYBAAEWwAC0xoDAALTBwAg5UIC9hYgAlO09HMAAtNEuhvkBAAEWwAC04IDAALTbwAg5UICWhYkAlP4GlUsuwAC078AAtQDAALVMAACFswFqwAC08GADwAD9UQIAAAEDwAC1CMAAtUwAAAABAQHAALUN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LsAA0bLAANHDwADSEwAAhh0BasAA0bNgA8AA/VECAAABA8AA0dbAANITAAAAAQEBwADR5gAAAIPuYAOHigAAXAE+AT0cwADR8i6G7wEAAWrAANIAYAPAAPwFoGAAlOYGlXIuwADSGMAA0inAANMWAACGIQFqwADSGWADwAD9UQIAAAEDwADSPcAA0xYAAAABAQHAANJOAAAAg+5gA4eSAABcAT4FPRzAANJaLobvAQABasAA0mhgA8AA/AWEeQCU5j0cwADSfi6G+QEAARbAANKNgMAA0ojACFaOhbqHlACU/j0cwADSnS6XswEAARbAANKugMAA0qnACFaOhh+HlgCVID0cwADSyS6XswEAARbAANLagMAA0tXACFaOhiCHlwCVID0cwADS8y6XgQEAARbAANMKgMAA0wXACFaOIoeVAJUKBpVzLsAA0xvAANMswADUJgAAhiMBasAA0xxgA8AA/VECAAABA8AA00HAANQmAAAAAQEBwADTUwAAAIPuYAOHnwAAXAE+BUnAANNfHMAA03EWwADTYy6XLZS1lLxIAQABKwDAAP1ePgE9F8AA04Iuly2UtR/AANOWldwAAAAAlLw/PRzAANO+FsAA07Auly2UtZS8l50BAAGAwADTxMAIV3MAldg9HMAA088uhu8BAAFqwADT3WADwAD8BcAAX34AlOY9HMAA0/QuhvkBAAEWwADUA4DAANP+wAhXc4Jph6EAlP49HMAA1BwWwADUDi6XLZS1lLwGAAAAAJXZBpV0LsAA1CvAANQ8wADVAwAAhgYBasAA1CxgA8AA/VECAAABA8AA1FPAANUDAAAAAQEBwADUZwAAAIPuYAOHKgAAXAE+BD0cwADUcy6G7wEAAWrAANSBYAPAAPwFwACaMACU5j0cwADUmi6XswEAARbAANSrgMAA1KbACFhvhFOCWQCVID0cwADUvC6G+AEAARbAANTPgMAA1MrACFhvgpCHLQCU8j0cwADU2i6XXAEAARbAANT2gMAA1PHACFhvhgWHLACU7waVdS7AANUIwADVGcAA1bgAAIYlAWrAANUJYAPAAP1RAgAAAQPAANUswADVuAAAAAEBAcAA1TwAAACD7mADh6kAAFwBPgM9HMAA1Uguhu8BAAFqwADVVmADwAD8BaOAAJTmPRzAANVrLpezAQABFsAA1XyAwADVd8AIWTaEU4JZAJUgPRzAANWNLobzAQABHMAA1aYWwADVmS6XLZS1lLxLAQABFsAA1ayAwADVp8AIWTaCRYerAJXaAJToBpV2LsAA1b3AANXOwADWeQAAhicBasAA1b5gA8AA/VECAAABA8AA1eHAANZ5AAAAAQEBwADV8QAAAIPuYAOHswAAXAE+BD0cwADV/S6G7wEAAWrAANYLYAPAAPwFo6sAlOY9HMAA1iAul7MBAAEWwADWMYDAANYswAhZ8oRTglkAlSA9HMAA1kIuhvkBAAEWwADWUYDAANZMwAhZ8oW6h7UAlP49HMAA1mEuhvkBAAEWwADWcIDAANZrwAhZ8oJph7YAlP4GlXcuwADWfsAA1o/AANcxAACGKQFqwADWf2ADwAD9UQIAAAEDwADWn8AA1zEAAAABAQHAANasAAAAg+5gA4e+AABcAT4EPRzAANa4LobvAQABasAA1sZgA8AA/AWl/QCU5j0cwADW2C6XswEAARbAANbpgMAA1uTACFq3hFOCWQCVID0cwADW+i6G+QEAARbAANcJgMAA1wTACFq3gmmHwACU/j0cwADXFC6G+QEAARbAANcjgMAA1x7ACFq3hbqHwQCU/gaVeC7AANc2wADXR8AA2LoAAIYtAWrAANc3YAPAAP1RAgAAAQPAANdYwADYugAAAAEBAcAA12YAAACD7mADh8kAAFwBPgk9IxzAANeDFsAA13IulyyUtZS7SAEAASsAwAD9XhfAANdyLpcslLUfwADXi5XSAAAAAJS7KwFgA5XGPRzAANezFsAA16IulyyUtZS7l54AAAAAlc09HMAA18Quhu8BAAFqwADX0mADwAD8Baf5AJTmPRzAANflLpezAQABFsAA1/aAwADX8cAIW3yEU4JZAJUgPRzAANgHLpfAAQABFsAA2CmAwADYJMAIW3yGK4fLAJWFPRzAANg5LpeBAQABFsAA2FCAwADYS8AIW3yFuofMAJUKPRzAANhgLpdrAQABFsAA2HOAwADYbsAIW3yGLIfNAJT1PRzAANiBLob5AQABFsAA2JCAwADYi8AIW3yCaYfOAJT+PRzAANisFsAA2JsulyyUtZS7l58AAAAAlc4GlXkuwADYv8AA2NDAANplAACGMQFqwADYwGADwAD9UQIAAAEDwADY48AA2mUAAAABAQHAANjzAAAAg+5gA4fWAABcAT4JPSMcwADZEBbAANj/LpcslLWUu0gBAAErAMAA/V4XwADY/y6XLJS1H8AA2RiV0gAAAACUuysBYAOVxj0cwADZQBbAANkvLpcslLWUu5eeAAAAAJXNPRzAANlRLobvAQABIxbAANlggMAA2VvACFzxhjCH3GrAANluYAPAAPwFvgRqwADZiGADwAD8Ba0PAWADwAD8BQCU5j0cwADZnS6XswEAARbAANmugMAA2anACFzxhFOCWQCVID0cwADZvy6XswEAARbAANnQgMAA2cvACFzxhi+H2ACVID0cwADZ4S6XxgEAARbAANn/gMAA2frACFzxgmyH2QCVhD0cwADaDi6G+QEAARbAANodgMAA2hjACFzxg8yH2gCU/j0cwADaLC6G+QEAARbAANo7gMAA2jbACFzxgmmH2wCU/j0cwADaVxbAANpGLpcslLWUu5efAAAAAJXOBpV6LsAA2mrAANp7wADb4AAAhjQBasAA2mtgA8AA/VECAAABA8AA2o/AANvgAAAAAQEBwADaoAAAAIPuYAOH5AAAXAE+B0nAANqsHMAA2sMWwADasC6XLpS1lL1IAQABKwDAAP1ePgE9F8AA2tQuly6UtR/AANrtleYAAAAAlL0/PRzAANsfFsAA2wwuly6UtZS9l50BAAGAwADbJcAIXo0AleI9HMAA2zAuhu8BAAFqwADbPmADwAD8BagkAJTmPRzAANtULpezAQABFsAA22WAwADbYMAIXo2EU4JZAJUgPRzAANt2Lob5AQABFsAA24WAwADbgMAIXo2Ca4fmAJT+PRzAANuWLpd3AQABFsAA27OAwADbrsAIXo2GM4fnAJT7PRzAANvSFsAA278uly6UtZS9BgEAAYDAANvXwAhejQCV4waVey7AANvlwADb9sAA3UwAAIY5AWrAANvmYAPAAP1RAgAAAQPAANwFwADdTAAAAAEBAcAA3BEAAACD7mADh+8AAFwBPgVOwADcTcAA3FQAAGFgA8AA/AUBFsAA3GcWwADcW4DAANxWwAhf0oW/h/FhwAD82D0cwADccy6G8wEAAYHAANx/wAhf5gCU6EXAANyMAcAA3JXAANyXAABiYAPAAPwFAZMBHMAA3J6CwADcnMAIYDJjAQABgcAA3KDACF/mAMAA/TIBisAA3KrACGAyHMAA3KiCwADcqsAIYDJkAQABlADAAP0q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F8AA/WcAAAAAAQaWCy7AASE8wAEhQMABIdkAAJdZAAAAAQPAASFDwAEh2QAAAAEBAcABIUgAAACArGADwAD+bAAAYAPAAPwFAT4DTsABIVfAASFeAACBdmADwAD8BQEcwAEhZRbAASFgLieWCUsBAAGAwAEhZsAIoAEAwAD87knAASFwHMABIXuBwAEhdMAIoBxIAQABKwDAAP0oPgI9icABIYzACKAcFsABIZsWwAEhlS4nlglhwAD8/j0cwAEhrhbAASGpLieWCYC/AgACgMABIa/ACKABgcABIbbACKAcAMAA/O8/SsABIcgBgcABIc/ACKAcAAAIn9oACKDGAAAAAQKWDi7AASIRwAEiF8ABLLwDmCIAAAFgAcAA/VEAAAkElhAuwAEiOcABIkYGmCMAYAPAAPwFAWrAASJAYAPAAPwFwACbAwSWES7AASJbwAEibwaYJABgA8AA/AUBasABImxgA8AA/AXAAJsJBJYSLsABIoTAASKRBpglAGADwAD8BQFqwAEijGADwAD8BcAAmw8ElhQuwAEiq8ABIrAJlzyUtQBdA8AA/bkBXQPAAPypAWADwAD8BQAElhUuwAEivsABItsYmCaUtQBgA8AA4ygBHsABIszAAOMsAQABasABItZgA8AA/AXAAJsDAASWGC7AASLjwAEi7RhhAGADwAD8BQGTBJYZLsABIvXAASMGGJgnAGADwAD8BQGTBJYWLsABIxfAASM5GJgolLUAYAPAAON6AR7AASMrwADjfgEAAZQABJYXLsABI0fAASNZGJgplLUAYAPAAOMoASsBBZYlLsABI4vAASOLwAEjowAAAAPAASOXwAEjowAAAAEBAcABI50AAASXPF0DwAD9uQFdA8AA/KkBYAPAAPwFAABgA5YOAT8CCAGWFIAAwAiiUwkBwAEji8AA/WcAAAAACAaWGy7AASNewAEjZsABI4YBAINcAAAAAQPAASNtwAEjhgAAAAAAAABgA8AA/AUBSsABI3ABHMABI3cWwAEjcC5hlhhkAQABFsABI3kumCeWGQDAAP0qBpYdLsABI6jAASOtwAElAgAAl88AAAABA8ABI7bAASUCAAAAAQEBwAEjvgAAAJacYAPAAPq3AABcAT4EPSMcwAEj2hbAASPHLpgplLWWF0gBAAErAMAA/V4XwAEjxy6YKZS1HMABI/MWwAEj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AMAA/WcAAAAAAQaWNi7AATHZwAEx5MABOLsAAZg0AAAAAQPAATHtwAE4uwAAAAUDBcABMfgAAACCRV0DwAD8qQFgA8AA/AUAwAEyBAAAACdgA8AA/AUAwAEyEgAAAINEYAPAAP3rAMABMiUAAABqYAPAAPwFAWrAATItYAPAAPwFCcABMjQAAACCjGADwAD8BQFqAGADwAD9DnkAYAPAAPwFAT4HPR7AATJLwAD7RQQABIHAATJbwAixrIDAATJiwAixlSsWwAEyd4DAATJwwAixlWHAAPzYAD2MwAEyhMAIseYewAEylcAA+0YDAAODwAEypcAIscuEwAEyrMAIseYWwAEyuILAATKxwAixu2HAAP3vAEnAATLFHMABMs+DwAEyycAIsctIAQABhMABMtLACLHmAMAA/ShKwAEy1wGBwAEy3sAIsaw/TsABMu3AATLvAABiYAPAAPwFAYPAATLxwAixy07AATMAwAEzBwAAYWADwAD8BQEWwAEzEIDAATMJwAixlWHAAPzYRMABMxw+A07AATMrwAEzNAAAmDVgA8AA/AUBHMABMz2CwAEzNsAIsbuECwEAATUAAAABAGADwAD8BQGFwAEzSMAIsq81AAAAAQBgA8AA/AUBjcABM0jACLKvHMABM0mHAMAIsx9kAQABlADAAP0qhwDACLMfAMAA/flDwAEzVBzAATNkh8ABM1vACLL4YwEAATeAgADAAP0yPgRJwAEzdRzAATN/gcABM3nACLGsgW0BAAGGwAEzgsAIsssAwAD9NUrAATOKARzAATORlIHEAAAAAMAA/Cg/PRzAATOjgMABM53ACLGVgL8CAAI1AAAAAQBgA8AA/AUBgcABM6TACLGsNQAAAAEAYAPAAPwFAYnAATOkwAixrBzAATOpFADACLPdCABkAQABlADAAP0qFADACLPdCACHwAEzr8AIsvgAwAD8uUnAATPBHMABM8eFwAEzxcAIsq+BbQEAAYTAATPKwAix5gDAAP01SsABM88BgcABM9bACLGsPz2PwAEz5cAIsvgcwAEz94LAATPwwAixu4QLAQABNQAAAAEAYAPAAPwFAYXAATQCwAiyrzUAAAABAGADwAD8BQGNwAE0AsAIsq8cwAE0AxQAwAi0iQgAZAEAAZQAwAD9KhQAwAi0iQgAAMAA/flJwAE0FhzAATQjh8ABNBrA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PdAVAIRShMAAoh3ACTgtglgBYAOD6j0cwACiLoTAAKIpwAk4LYUvAQABFMAAolTACTw3FAAAhB09F8AAonKEwACibcAJOC2FJBTAAKKhwAk7vBEAg/A9F8AAotCEwACiy8AJOC2FJRTAAKMDwAk73xIAg/FAIiEcwACjYhbAAKM/hMAAozrACTgthSSD8EgBAAErAMAA/V4BISIWwACjf4TAAKN6wAk4LYUqhAAAIRzAAKOmFsAAo6EWwACjmITAAKOTwAk4LYJqg++CaYSZSAEAASsAwAD9XsAAoznAAKOuAD89F8AAo7sumFKWOYDAAKPJwAk3fJZsSsAAo9gBhMAAo9/ACTgtBpa5L8AAo+zAAKQKwACryQAAmNcAAAABA8AApCvAAKvJAAAAAAAAAGADg8gBPh1OwACkOMAApDwAAIPnYAPAAPwFARzAAKQ+LocAAAAAAJZ8QBzAAKRZgMAApFXACT88SAEAAWrAAKRgYAPAAPwFwACaNgDAAP0owACkVcAApH0ATsAApIjAAKSWAACEX2ADmn8BHMAApJguhwUAAAAAlqROwACkvsAApMgAAIReYAOCewEcwACk2IHAAKTKwAk/jphxAAAAAJqcTsAApQrAAKUPAACD7mADg8gBJsAApQoBFsAApRuCwAClEcAJP66D7oJ+YAODyEnAAKUlFsAApSkuiB6WeT4BPYvAAKVMwAk/1is/TsAApWjAAKV4AACYwGADwAD6PwEiHMAApX+DwAClesAJP9ZIAQABKwDAAP1eARbAAKWKLphbljmWdEnAAKWvHMAApbiDwACls8AJP9ZIAQABKwDAAP1ePgE9i8AApcnACT/WH8AApdSD6QIAASsBhF6CwACmA8AJP64/TsAAph3AAKYlAACEYWADwAD+bAEcwACmJy6YcwAAAACWl07AAKZDwACmTgAAhFNgA8AA/AUBHMAAplAumMkAAAAAluBOwACmZsAApnQAAITSYAPAAPwFARzAAKZ2LpjJAAAAAJbgTsAApozAAKaSAACEfmADwAD8BQEcwACmlC6HAAAAAACWfE7AAKaowACmrQAAgL1gA4iDARzAAKavLocHAAAAAJasTsAApsPAAKbPAACEY10DwAD8qQFgA4SuARzAAKbRLph4AQABg8AApuTACT/WAJacQBzAAKdeNMAApvYDwACm9sAAp14A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YAOF0AEfwADUloXjAwACHMAA1MUumLoAAAAAlqkcwADU3C6Y5gAAAACW2QGEHSk1AAAAAQBbARfAANUUg8AA1RLACWSohFOCwADVIcAJZICCWYMAwAlkqAHAANU4asAA1ThgA8AA/AXAAGROAD4BSsAA1UUBH8AA1VCF+gEAARzAANVULphsAAAAAJbDAAHAANV2asAA1XZgA8AA/AWD+AA+AUrAANWRAR/AANWchgcDAAMcwADVri6YbAAAAACWwxzAANXMLpj0AQABHMAA1eQuhwAAAAAAlnwAlsAcwADV8S6YbAAAAACWwwABwADWE2rAANYTYAPAAPwFwABj8AA+AUrAANYyAR/AANY9hhUEAAQcwADWUy6YbAAAAACWwxzAANZlLphsAAAAAJbDHMAA1oMumGwAAAAAlsMcwADWlS6Y9wAAAACW1QABwADWu2rAANa7YAPAAPwFsLoAPgJOwADW3MAA1uMAAINcYAPAAPwFARzAANblLpjJAAAAAJbgSsAA1vsBNcAA1wYAAAEAYAOGFgEfwADXBoYgAQABHMAA1xoumMoAAAAAlsEANQAAAAEAWwEXwADXPIPAANc6wAlmOoRTgsAA10nACWYSglmDAMAJZjoBwADXYGrAANdgYAPAAPwFwACaPwA+A07AANd/wADXhgAAg1xgA8AA/AUBHMAA14gumMkAAAAAluBOwADXosAA168AAIXDYAOIuAEcwADXsS6HCAAAAACW1krAANfJATXAANfUAAABAGADhiEBH8AA19SGLAIAARzAANfmLpjKAAAAAJbBAYXDg8AA2BbACWbDNQAAAAEAWwEXwADYMITAANguwAlm6YRTgsAA2D3ACWahglmEAMAJZukBwADYVGrAANhUYAPAAPwFwACaQgA+A07AANhywADYeQAAg1xgA8AA/AUBHMAA2HsumMkAAAAAluBOwADYlcAA2KIAAIXDYAOIuAEcwADYpC6HCAAAAACW1krAANi8ATXAANjHAAABAGADhi0BH8AA2MeGOAIAARzAANjYLpjKAAAAAJbBAYXDg8AA2QjACWd9NQAAAAEAWwEXwADZIoTAANkgwAlno4RTgsAA2S/ACWdbglmEAMAJZ6MBwADZRmrAANlGYAPAAPwFwACaRQA+BE7AANlkwADZawAAg1xgA8AA/AUBHMAA2W0umMkAAAAAluBOwADZh8AA2Y8AAIXMYAOIuAEcwADZkS6HCAAAAACW1k7AANmtwADZtwAAhc1gA4i4ARzAANm5LocIAAAAAJbWSsAA2dEBNcAA2dwAAAEAYAOGOQEfwADZ3IZFAwABHMAA2e0umMoAAAAAlsEChcyDwADaGMAJaDeFzYTAANoswAloVzUAAAABAFsBF8AA2kOFwADaQcAJaH2EU4LAANpQwAloFYJZhQDACWh9AcAA2mdqwADaZ2ADwAD8BcAAmkgAPgtOwADahcAA2owAAINcYAPAAPwFARzAANqOLpjJAAAAAJbgTsAA2q7AANq9AACF0mADgnsBHMAA2r8umG8AAAAAlqhOwADa7MAA2voAAIUdXQPAAPypAWADiLgBHMAA2vwumOMAAAAAltJOwADbHMAA2ywAAJhwYAPAAPwFARzAANsuLocCAAAAAJZ9TsAA213AANtpAACF010DwAD82gJgA4J7YAOErgEywADbgmADgntgA4SuAEXAANuOAcAA25fAANuZAABiYAPAAPwFAZMBHMAA26CHwADbnsAJabVjAQABhcAA26LACWljAMAA/TIBj8AA27PACWm1HMAA27SHwADbs8AJabVkAQABlADAAP0qPgNOwADb1MAA290AAYXXYAOCewEcwADcChzAANvtLocFAAAAAJakmHEAAAAAmpxOwADcNcAA3DsAAYCWYAOErgEcwADcPS6YbAAAAACWwz0cwADcZIbAANxZwAlphYC/AgACFMAA3GXACWoOCAAUwADcccAJajsJAADAAPzvTsAA3I7AANyaAACY+GADwAD8BQEcwADcnC6HAgAAAACWfU7AANzGwADczgAAhdRdA8AA/KkBYAOHkgEewADc1MAA9gABAWADh5IBh8AA3OrACWqKAEXAAN0AAcAA3QnAAN0LAABiYAPAAPwFAZMBHMAA3RIUwADdEMAJauQJAGMBAAGHwADdFMAJaooAwAD9MgEVwADdIcAJauQJHMAA3SIUwADdIcAJauQJAGQBAAGUAMAA/So+AT0cwADdORTAAN0ywAlqrAgAgL8CAAIUwADdOsAJauQJACbAAN05ARzAAN0/LpjoAAAAAJbJYAOHkgDAAPy5TsAA3XPAAN2DAACF1V0DwAD8qQFgA4SuARzAAN2FLpjKAAAAAJbBSsAA3aMBNcAA3a4AAAEAYAOG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AACWfErAAREMAR/AAREXiTADAAMcwAERLy6YvAAAAACWqxzAARFTLpjjAAAAAJbSHMABEXlqwAERc10DwAD8qQFgA4iqhZFLAQABgcABEXrACZlPAMAA/LgAAcABEZ1qwAERnWADwAD8BcAAjF4APgFKwAERsQFqwAERvmADiOeElwHAARHbasABEdtgA8AA/AXAAJoDAD4BSsABEfABasABEf1gA4jDwACbJwHAARIbasABEhtgA8AA/AXAAJoGAD4BSsABEjABasABEj1gA4jPhIgBwAESW2rAARJbYAPAAPwFhA8APgFKwAESbQFqwAESemADiNvAAJs4AcABEpVqwAESlWADwAD8BcAAmgkAPgJOwAESsMABEsEAAJkKYAPAAPwFARzAARLDLocAAAAAAJZ8SsABEtcBH8ABEuKJBAMAAxzAARL8LphvAAAAAJaoHMABEx4umOMAAAAAltIcwAETRGrAARM+XQPAAPypAWADiKqFkUsBAAGBwAETRcAJmoAAwAD8uAABwAETaGrAARNoYAPAAPwFwACaEgA+Ak7AAROJwAETmgAAmQpgA8AA/AUBHMABE5wuhwAAAAAAlnxKwAETsAEfwAETu4kEAwADHMABE9UumG8AAAAAlqhqwAET910DwAD8qQFgA4i4hZ8cwAEUHWrAARQXXQPAAPypAWADiKqFkUsBAAGBwAEUHsAJmw8AwAD8uAABwAEUQWrAARRBYAPAAPwFwACaDAA+DE7AARRbwAEUdAAAmORgA8AA/AUBFsABFIkWwAEUdi6YUJZoYcAA/NhOwAEUncABFK4AAJkKYAPAAPwFARzAARSwLocAAAAAAJZ8TsABFMjAARTXAACEvl0DwAD8qQFgA4lPARzAARTZLpjRAAAAAJbXTsABFQXAARUcAACFH2ADwAD8BQEcwAEVHi6HAgAAAACWfU7AARU2wAEVSgAAmQtgA8AA/AUBHMABFUwuhwIAAAAAln1OwAEVZMABFW8AAIWTXQPAAPypAWADiLgBHMABFXEumOMAAAAAltJOwAEVkcABFZcAAIVdXQPAAPypAWADiTEBHMABFZkumQgAAAAAltNOwAEVusABFcYAAIZ+YAOIuAEcwAEVyC6Y9wAAAACW1UAcwAEWDhzAARX/FsABFfiGwAEV7cAJnFdhwAD82GQBAAEWwAEWB4fAARYB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APypAWADiFMBPgROwAEhXMABIWMAAGFgA8AA/AUBHMABIWUuhwIAAAAAln1OwAEhj8ABIZYAAIF2XQPAAPypAWADiFMBHsABIaTAAPyuAwFgA4hTAoDAASHFwAmniCsBhV4pRcABIegBwAEh8cABIfMAAGJgA8AA/AUBkwEcwAEh+oLAASH4wAmn5WMBAAGAwAEh/MAJp4gAwAD9MgGKwAEiBsAJp+UcwAEiBILAASIGwAmn5WQBAAGUAMAA/So+AT0cwAEiF4HAASIRwAmnqYC/AgACgsABIhjACaflHMABIh0umOcAAAAAlt4AwAD8uUrAASJJAYHAASJQwAmnqQaW3S/AASJfwAEic8ABIuwAAJkGAAAAAQPAASKXwAEi7AAAAAAAAABgA4hTAT4BSsABIqABIxzAASKnLph2AAAAAJabHMABIsEumOcAAAAAlt4rAWADiFMGlt4vwAEi8cABIwXAASOOAACY5wAAAAEDwAEjI8ABI44AAAAAAAAAYAOIUwE+A07AASMwwAEjOQAAgmxgA4hTARzAASM7Lpj6AAAAAJbfPRzAASNoFsABI1oumEyWZFYBAAGAwAEjbMAJqQQAwAD8ukrAASN7AYDAASOCwAmpBAaW3y/AASOTwAEjp8ABJrMAAJj6AAAAAQPAASO+wAEmswAAAAAAAABgA4hTAT4HTsABI8vAASPSAACDXGADwAD8BQEcwAEj1C6YyQAAAACW4E7AASPqwAEj+wAAhlFgA8AA/AUBHMABI/0umMkAAAAAluBOwAEkqsABJLYAAIRjXQPAAPypAWADhK4BHMABJLgumHgBAAErAJacTsABJNrAASTgAACEfmADwAD8BQEcwAEk4i6HAAAAAACWfE7AAST2wAEk+wAAg+5gA4hTATXAASUBAAABAGADiFMBH8ABJQGIdgQAARzAASUVLph1AAAAAJaaA4KQHMABJT4uhwgAAAAAltaFBxzAASVbLpjaAAAAAJbChH6DwAElesAJqfA1AAAAAQBbARfAASWJhMABJYfACaokhFOAwAEllsAJqYSCWTUAAAABAFsBF8ABJaWEwAElo8AJqiSGUYHAASW4wAmppohVhADACaokScABJc4WwAEl3oLAASXSwAmpyIOywAD8jD4CRcABJfIBwAEl+8ABJf0AAGJgA8AA/AUBkwEcwAEmBIXAASYCwAmq4mMBAAEWwAEmEoLAASYGwAmpyGHAAPzYAMAA/TIBjcABJhzACariHMABJhqFwAEmHMAJquJkAQABlADAAP0qPgJOwAEmLcABJjgAAISwYAOErgEcwAEmRYLAASY6wAmpyEsBAAGFwAEmRsAJquIAwAD8uD0XwAEmXYbAASZSwAmrRYRShMABJmbACaoSglg9F8ABJn+EwAEmesAJqhKEY4LAASaNwAmpyIhWP0rAASakAYTAASarwAmqEgaW4C/AASa4wAEmvMABJ0QAAJjJAAAAAQPAASbGwAEnRAAAAAAAAABgA8AA/AUBPgFKwAEnKwEcwAEnPRzAAScyLocCAAAAAJZ9gY0BAAGUAMAA/SsAAAjD1AAIxEUACMR4AAjE/gAIxnMACMciAAjI2gAIybIACMn8AAjMWwAIzJkACMzlAAjOxgAIz6cACNh6AAjZCgAI2VcACNmkAAjanwAI2wYACNu3AAjdEwAI3mAACN9lAAjgEAAI4ZUACOMVAAjkrwAI5tUACOfhAAjp4AAI7dUACO8sAAjzzQAI9dUACPt1AAj9BgAJAagACQJWAAkC8gAJA7cACQQ5AAkFHwAJBgUACQcDAAkHfQAJCFgACRTyAAkWFQAJF8EACRkQAAkZvAAJGucACRwKAAkc6gAJIEgACSq+AAkrLAAJK5kACTEJAAk3VQAJPwwACUVtAAlJAQAJSY8ACU6YAAlSJgAJUoIACVLmAAlTtwAJVGoACVWVAAlV7QAJeggACXszAAl7jwAJfLoACX06AAl9kgAJjWoACY+gAAmQywAJklIACZMIAAmTvgAJlEwACZSkAAmVzwAJlvoACZglAAmYgQAJmNkACZ+1AAmjlwAJpH8ACaXKAAmm9QAJp1EACah8AAmo1AAJqVQACau+AAmsEwAAAGYCluUvwAEnScABJ0/AAUPPA5kSAAABYAGWYgABYAGKigEElugvwAEoQMABKEwYmROWOQBdA8AA/KkBYAOXCwErAQWXCi/AAShRwAEoUcABKKYAAAADwAEoasABKKYAAAACAQLAAShrAAAAhDRbAMABKHMAAACC41sBagBgA8AA/Q55AGADluUBPwEJAMABKIaW5AIAASbAASiMAYDAASiMwAmuF10DwAD8qQFgA8AA/AUBguMmwAEonQGBwAEoncAJriJgA8AA/esdBpbrL8ABKKvAASi8wAEucwAAmGOWOQFqwAEorGADwAD9UQIAAAEDwAEo0cABLnMAAAACAgLAASjjAAAAglVgA4pNAMABKPIAAACYRWADwAD8BQAAXAE+BD0XwAEpti6YUpY5HMABKcIWwAEpti6YUpY5lmyBjQEAAZcAwAD9K5ZsTsABKdLAASniAAGZFGADwAD8BQEcwAEp5C6HAwAAAACWfk7AASn7wAEqBQAAmL1gA8AA/AUBHMABKhMWwAEqBy6YUpY5lmyBjQEAAZcAwAD9K0XAASpFAcABKk7AASpQAABiYAPAAPwFAZMBHMABKleEwAEqVcAJr1djAQABgsABKlnACa8AAMAA/TIBjMABKmrACa9XHMABKmuEwAEqasAJr1dkAQABlADAAP0qPgg9F8ABKrcumFKWORzAASrPg8ABKsXACa8igY0BAAGXAMAA/SuWbE7AASrgwAEq7gABl6BgA8AA/AUBHMABKvAuhwMAAAAAln5OwAErCsABKxcAAZkVYAPAAPwFARzAASspHMABKySDwAErGsAJryKBjQEAAZcAwAD9K4GNAQABHMABKzEcwAErLZeDiAEAAZUAwAD9LIOIAQABhcABKzPACa/WAMAA/SwAwAD9Kz0XwAErSC6YUpY5HMABK2OGwAErVsAJr/iBjQEAAZcAwAD9K5ZsTsABK6bAASuqAAGD52ADwAD96wEcwAEruBbAASusLphTljmWbUsBAAEcwAEruS6HAwAAAACWfgDAAPy4TsABK9XAASvgAAGG510Dim8BWwEcwAEr9BbAASvsgMABK+LACa6zhtuKU0sBAAGHwAEr9cAJsIMAwAD87knAASwBIRzAASwQFMABLAXACbC/CABIAQABKwDAAP1ePgVOwAEsXcABLGUAAYbNXQPAAPzaAmADwAD8BWADwAD8BQEywAEscWADwAD8BWADwAD8BQA9F8ABLH0umFKWOYbAASyLwAmv+JZsRcABLKEBwAEsqsABLKwAAJemYAPAAPwFAZMBHMABLLMUwAEsscAJsWwKAGMBAAGFwAEstcAJr9YAwAD9MgEVwAEsxMAJsWwKHMABLMUUwAEsxMAJsWwKAGQBAAGUAMAA/So+A07AASzbwAEs5gABl5VgA8AA/AUBHMABLOguhwMAAAAAln5OwAEtBsABLRUAAZkWYAPAAPwFARzAAS03gcABLRfACa7BZAEAARzAAS05LocDAAAAAJZ+AMAA/So9HMABLVgUwAEtUcAJsR4JAIC/AgACFMABLVnACbHLCwAUwAEtZ8AJse0MAADAAPzvPSMcwAEtlxbAAS2KLpkTljmW6EgBAAErAMAA/V4XwAEtii6ZE5Y5McABLbBgA5cLAJboKwFdA8AA/KkBYAOXCz0cwAEtyRbAAS28LpkTljmW6FYBAAEfwAEt0ZcQAgACFMABLeXACbC/CAAUwAEt8cAJsR4JAAAAwAD8uj89i8ABLk3ACa8iHMABLmaGwAEuWcAJr/iBjQEAAZcAwAD9KwaW7C/AAS54wAEuf8ABL3wAAJkXljkAAAABA8ABLozAAS98AAAAAwMDwAEukgAAAIPuYAOCSwDAAS6rAAAAhuddA4pvAVsAwAEuuwAAAINcYAPAAPwFAABgA8AA/VEBPgVOwAEu08ABLt8AAZkYYAPAAPwFARbAAS7hLphSljmWbD0XwAEu8i6YUpY5gsABLwDACbM9lmxOwAEvE8ABLxwAAYbbWwEcwAEvKYHAAS8ewAmzLYbsAgACgMABLzjACbMfLgCKdT0XwAEvSi6YUpY5g8ABL1jACbNYlmxKwAEvaQGEwAEvcMAJs44Glu4vwAEvgcABL5LAATAgAACG+gFqwAEvgmADwAD9UQIAAAEDwAEvnMABMCAAAAABAAABwAEvsgAAAIS+XQPAAPypAWADiU8BagBgA8AA/Q55XAE+AUnAAS/JIRzAAS/cgMABL83ACbQVSAEAASsAwAD9Xj4BPRzAATAAFsABL+0umFCWaIClAQABgMABMAfACbQVAMAA/Ls/BpbvL8ABMCXAATA2wAEwzQAAhv0BasABMCZgA8AA/VECAAABA8ABMEDAATDNAAAAAQAAAcABMFYAAACEvl0DwAD8qQFgA4lPAWoAYAPAAP0OeVwBPgFJwAEwbSEcwAEwgIDAATBxwAm0r0gBAAErAMAA/V4+AT01AAAAAQBdA8AA/KkBYAOJTwEWwAEwkS6YUJZoF8ABMKSBwAEwpMAJtPNhHMABMKsWwAEwpIHAATCkwAm082HAAPzYgY0BAAEWwAEwvYDAATCuwAm0r2HAAPzYAMAA/SvAAPzWPwaW7S/AATDSwAEw48ABMroAAJhkljkBasABMNNgA8AA/VECAAABA8ABMPXAATK6AAAAAgICwAEw+wAAAIPuYAOCSwDAATEFAAAAl5VgA8AA/AUAAGADgksBPgNJwAExFxzAATEoFsABMRsumROWOZboSAEAASsAwAD9Xj4BSsABMTkBgMABMUDACbWMP0bAATFRwAExdsABMVoAAACXlmADlwsAFsABMWgumROWOZboPgJOwAExzcABMdwAAZkWYAPAAPwFARzAATHwFsABMemCwAEx3sAJte2GzZcOSwEAAYHAATHxwAm1mgDAAPzuScABMgQhHMABMheDwAEyCMAJtgpIAQABKwDAAP0oPgE9HMABMkcWwAEyQBbAATI1gsABMirACbXthueXDYbNinKAvwIAAibAATJHAYDAATJIwAm1jGADglIcwAEyXC6ZF5Y5AwADgMABMmrACbWMFsABMnuCwAEycMAJte2G55cNg8ABMofACbYKAJbsAMAA/O8/SsABMqsBgMABMrLACbWMBpbwL8ABMr/AATLUwAEzZwAAhwgBasABMsBgA8AA/VECAAABA8ABMuDAATNnAAAAAAAAAGADiLgBPgNOwAEy78ABMvoAAZeVYAPAAPwFARbAATL8LphSljmWbE7AATMTwAEzGgABgXZgA4i4AR3AATMihwgAAAAAltZKwAEzNgEmwAEzNgEcwAEzPS6YZJY5AgACgcABM1DACbdEgMABM1jACbckAJbtYAOIuAaW8S/AATNswAEzgMABNEcAAJiyAWrAATNtYAPAAP1RAgAAAQPAATOLwAE0RwAAAAICAsABM5YAAACCVWADik0AwAEzpQAAAJi9YAPAAPwFAABgA4KLAT4DTsABM7zAATPHAAGXlWADwAD8BQEWwAEzyS6YUpY5lmxOwAEz4MABM+cAAYF2YAOCiwEdwAEz75iyAgACgMABM/vACbfHgcABNAbACbfVAJatSsABNBYBJsABNBYBHMABNB0umGSWOQIAAoPAATQwwAm4DoLAATQ4wAm37gCW7WADgosGlvIvwAE0TMABNGDAATTxAACYxAFqwAE0TWADwAD9UQIAAAEDwAE0a8ABNPEAAAAAAAAAYAOC9AE+A07AATR6wAE0hQABl5VgA8AA/AUBFsABNIcumFKWOZZsTsABNJ7AATSlAAGBdmADgvQBHcABNK2YxAAAAACWskrAATTAASbAATTAARzAATTHLphkljkCAAKBwAE02sAJuMyAwAE04sAJuKwAlu1gA4L0BpbzL8ABNPbAATUIwAE1qwAAmMUBasABNPdgA8AA/VECAAABA8ABNRHAATWrAAAAAQEBwAE1FgAAAJi9YAPAAPwFAABgA4MZAT4DTsABNS3AATU4AAGXlWADwAD8BQEWwAE1Oi6YUpY5lmxOwAE1UcABNVgAAYF2YAODGQEdwAE1YJjFAQABgMABNWrACblPAJazSsABNXoBJsABNXoBHMABNYEumGSWOQIAAoLAATWUwAm5iIHAATWcwAm5aACW7WADgxkGlvQvwAE1sMABNcLAATZPAACYxgFqwAE1sWADwAD9UQIAAAEDwAE1y8ABNk8AAAAAAAAAYAODfAE+A07AATXawAE15QABl5VgA8AA/AUBFsABNecumFKWOZZsTsABNf7AATYFAAGBdmADg3wBHcABNg2YxgAAAACWtkrAATYeASbAATYeARzAATYlLphkljkCAAKBwAE2OMAJuj2AwAE2QMAJuh0Alu1gA4N8Bpb1L8ABNlTAATZswAE3BQAAmNYBasABNlVgA8AA/VECAAABA8ABNnvAATcFAAAAAAAAAGADg6kBPgNOwAE2isABNpUAAZeVYAPAAPwFARbAATaXLphSljmWbE7AATauwAE2tQABgXZgA4OpAR3AATa9mNYAAAAAlrdKwAE21AEmwAE21AEcwAE22y6YZJY5AgACgcABNu7ACbrpgMABNvbACbrJAJbtYAODqQaW9i/AATcKwAE3IMABN8sAAJjHAWrAATcLYAPAAP1RAgAAAQPAATctwAE3ywAAAAEBAcABNzIAAACYvWADwAD8BQAAYAOD6gE+A07AATdJwAE3VAABl5VgA8AA/AUBFsABN1YumFKWOZZsTsABN23AATd0AAGBdmADg+oBHcABN3yYxwEAAYDAATeKwAm7bACWuErAATeaASbAATeaARzAATehLphkljkCAAKCwAE3tMAJu6WBwAE3vMAJu4UAlu1gA4PqBpb3L8ABN9DAATf6wAE4twAAmNcBasABN9FgA8AA/VECAAABA8ABOBvAATi3AAAAAAAAAGADg8gBPgNOwAE4KsABODUAAZeVYAPAAPwFARbAATg3LphSljmWbE7AAThOwAE4VQABgXZgA4PIAR3AAThdmNcAAAAAlrlKwAE4hgEmwAE4hgEcwAE4jS6YZJY5AgACgcABOKDACbxagMABOKjACbw6AJbtYAODyAaW+C/AATi8wAE41MABOW0AAJjdAWrAATi9YAPAAP1RAgAAAQPAATjjwAE5bQAAAAAAAABgA4Q2AT4DTsABOPLAATj9AAGXlWADwAD8BQEWwAE4/y6YUpY5lmxOwAE5FsABOR0AAYF2YAOENgEdwAE5JZjdAAAAAJa6SsABOTwBJsABOTwBHMABOUMumGSWOQIAAoHAATlWwAm9BoDAATlewAm85gCW7WADhDYGlvkvwAE5csABOYvAATqiAACHCQFqwAE5c2ADwAD9UQIAAAEDwAE5m8ABOqIAAAACAAACwAE5qQAAAJjqYAPAAPo/AWrAATm3YAPAAPo/AMABOcIAAACY62ADwAD8BQFqwAE50mADwAD8BYGeYAOEgwE+A07AATnjwAE57gABl5VgA8AA/AUBFsABOfAumFKWOZZsTsABOgfAAToOAAGBdmADhIMBHcABOhaHCQIAAAKY6oDAATo+wAm9ipjrgcABOlzACb2mlrxKwAE6cQEmwAE6cQEcwAE6eC6YZJY5AgACg8ABOovACb3rgsABOpPACb3LAJbtYAOEgwaW+i/AATqnwAE6vsABO1UAAJhsAWrAATqoYAPAAP1RAgAAAQPAATrMwAE7VQAAAAAAAABgA4SuAT4DTsABOtvAATrmAAGXlWADwAD8BQEWwAE66C6YUpY5lmxOwAE6/8ABOwYAAYF2YAOErgEdwAE7DphsAAAAAJbDSsABOyQBJsABOyQBHMABOysumGSWOQIAAoHAATs+wAm+rYDAATtGwAm+jQCW7WADhK4GlvsvwAE7WsABO3DAATwFAACY5gFqwAE7W2ADwAD9UQIAAAEDwAE7fcABPAUAAAAAAAAAYAOFeAE+A07AATuMwAE7lwABl5VgA8AA/AUBFsABO5kumFKWOZZsTsABO7DAATu3AAGBdmADhXgBHcABO7+Y5gAAAACW2UrAATvUASbAATvUARzAATvbLphkljkCAAKBwAE77sAJv1mAwAE79sAJvzkAlu1gA4V4Bpb8L8ABPArAATwmwAE8xwAAmREBasABPAtgA8AA/VECAAABA8ABPDnAATzHAAAAAAAAAGADhYYBPgNOwAE8SMABPFMAAZeVYAPAAPwFARbAATxVLphSljmWbE7AATxswAE8cwABgXZgA4WGAR3A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AJeePRzAAMfBLpl2AQABJ4JqAJecScAAx9whHMAAx+4WwADH5YDAAMfgwAp2moJqiHtIAQABKwDAAP1ePgE9HMAAx/8umaUCAAEWwADIEoDAAMgNwAp2moJqiHsBgL0cwADIIi6ZZwEAARbAAMg3gMAAyDLACnaagmyIegCXiZeqPgI9HMAAyFYumXYBAAEcwADIYC6ZZwEAARbAAMh1gMAAyHDACnaagmyIegCXiQCXnD0cwADIhy6ZcQEAASeaGgCXqQaYEjDAAMilwADIqsAAy+gAAJfGAAAAAQPAAMjCwADL6AAAAAIBAcAAyNcAAACD7mADiFMAAcAAyOkAAACaCWADwAD6PwFqwADI+GADwAD6PwBcAT4LScAAyQYWwADJCi6ESJd1PRzAAMkXLpl2AQABJMAAyTcDJ5mWFsAAySqAwADJJcAKd9OEU4JZJ5mXAJecP0nAAMk+FsAAyUIuhEmXdj0cwADJUC6ZigEAAYDAAMlewAp30wCXoT89HMAAyWkul7UCAAEWwADJgoDAAMl9wAp304RjiFYBmdAql709HMAAyaoumaICAAIWwADJvYDAAMm4wAp304QgiGUnhCoAl6c9HMAAydwumaICAAIWwADJ74DAAMnqwAp304URiGcnmdEAl6c9HMAAyiYumaICAAIWwADKOYDAAMo0wAp304QbiGMnhCUAl6c9HMAAylAumaICAAIWwADKY4DAAMpewAp304QdiGQnhCcAl6dJwADKeiEcwADKiBbAAMqDgMAAyn7ACnfTgpCIWUgBAAErAIi8PgE9HMAAypkumZsCAAIWwADKsYDAAMqswAp304KQiFk1AAAAAQBgA5dkARbAAMq3LplRl28jHMAAysKCAMAKeWFIAQABKwAAKxzAAMrCggDACnlhmUsCAAIugMAAytnACnfTAJdmAWADwAD96wCXoj9JwADK6yIiIoHAAMrvwAp34gAhFsAAywaAwADLAcAKd9OEG4hjACEWwADLF4DAAMsSwAp304QdiGQAHMAAyywWwADLJ4DAAMsiwAp304KQiFlIAQABKwCIvD4BPRzAAMs9Lpl2AQABJ4QmAJecPz0cwADLWS6ZdgEAARzAAMtjLplnAQABgMAAy3PACnfTAJeJAJecScAAy38hHMAAy5QWwADLiIDAAMuDwAp304UHiFtIAQABKwDAAP1e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AQABgMAARXzACvVFAJmAXwMAAAaZizHAAEWGwABFlMAARewAAIbQAWrAAEWHYAPAAP1RAgAAAQPAAEWowABF7AAAAAEBAcAARbkAAACD7mADiiQAAF8DAAABSsAARcgBJsAARcgBHMAARdIWwABFyC6aVph8mYeG0AEAAYDAAEXnwAr1vgCZf18DAAAGmYwxwABF8cAARf/AAEZ+AACGyQFqwABF8mADwAD9UQIAAAEDwABGIMAARn4AAAABAQHAAEY+AAAAg+5gA4oVAABfAwAAAUrAAEZNASbAAEZNARzAAEZXFsAARk0umlaYfJmHhskBAAGAwABGecAK9jcAmX5fAwAABpmNMcAARoPAAEaRwABG7AAAhsMBasAARoRgA8AA/VECAAABA8AARqbAAEbsAAAAAQEBwABGuAAAAIPuYAOKAgAAXwMAAAFKwABGxwEmwABGxwEcwABG0RbAAEbHLppWmHyZh4bDAQABgMAARufACvawAJl9XwMAAAaZjjHAAEbxwABG/8AAR0UAAIbAAWrAAEbyYAPAAP1RAgAAAQPAAEcPwABHRQAAAAEBAcAARxwAAACD7mADifEAAF8DAAABSsAARyUBJsAARyUBHMAARy8WwABHJS6aVph8mYeGwAEAAYDAAEdAwAr3KQCZfF8DAAAGmY8xwABHSsAAR1jAAEehAACGvQFqwABHS2ADwAD9UQIAAAEDwABHacAAR6EAAAABAQHAAEd3AAAAg+5gA4ngAABfAwAAAUrAAEeAASbAAEeAARzAAEeKFsAAR4AumlaYfJmHhr0BAAGAwABHnMAK96IAmXtfAwAABpmQMcAAR6bAAEe0wABH+gAAhrgBasAAR6dgA8AA/VECAAABA8AAR8TAAEf6AAAAAQEBwABH0QAAAIPuYAOJwwAAXwMAAAFKwABH2gEmwABH2gEcwABH5BbAAEfaLppWmHyZh4a4AQABgMAAR/XACvgbAJl6XwMAAAaZkTHAAEf/wABIDcAASGIAAIazAWrAAEgAYAPAAP1RAgAAAQPAAEggwABIYgAAAAEBAcAASDAAAACD7mADibQAAF8DAAABSsAASD8BJsAASD8BHMAASEkWwABIPy6aVph8mYeGswEAAYDAAEhdwAr4lACZeV8DAAAGmZIxwABIZ8AASHXAAEjKAACGrwFqwABIaGADwAD9UQIA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Moe1h8eH2AEAhFIAAAABA4fOh9gAAAAAAAAAYAOafwFKh9EBFofRLppjmn6aggaaijKJ04ncifUBAJeKAAAAAQOJ44n1AAAAAAAAAGADwAD6PwFKieYBHInuFonmLppjmn6agkgBAAErAMAA/V4GmosyifmKC4okAQCXrgAAAAEDihaKJAAAAAAAAABgA5p/AUqKGQEWihkummSafpqDBpqMMoopikWKgwEAl4gAAAABA4pOioMAAAAAAAAAXQPAAPxnAWADmn8BSopXATUAAAABAF0DwAD8ZwFgA5p/ATUAAAABAF0DwAD82gJgA8AA/etgA5p/ARaKVy6aZZp+moQjHIpigADAC048SAEAASsAACsWimKAAMALTjwpwAD8/QFdA8AA/GcBYAOafyMcimmAAMALTipIAQABKwAAaopsXQPAAPypAWADmn/AAJwXgADAC04qAV0DwAD8ZwFgA5p/BpqNMoqIiqSKxwEAl4kAAAABA4qziscAAAAAAAAAXQPAAPxnAWADmn8BSoq2ATUAAAABAF0DwAD82gJgA8AA/etgA5p/ARaKti6aZZp+moQjHIrBgADAC07tSAEAASsAACsWisGAAMALTu0pwAD8/QFdA8AA/GcBYAOafwaajzKKzIrRiygAAJpmAAAAAQOK2YsoAAAAAQEBiuEAAACAvWADwAD96wAAYAPAAPo/AT4BSortASIhHIr+For0Lpplmn6ahEgBAAErAMAA/V4AHIsTFosJLpplmn6ahIdHAQABgIsfwAtPVwDAAPztBpqQMostizuLxgAAhJ0AAAABA4tDi8YAAAABAQGLSwAAAIC9YAPAAP3rAABgA5p/AT4CTotbi18AAICrXQPAAPzaAmADwAD962ADmn8BNQAAAAEAXQPAAPzaAmADwAD962ADmn8BFothLpplmn6ahCMci2uBAMALT/pIAQABKwDAAP1eF4thLpplmn4yi4ZgA8AA/etgA5p/AJqEgQDAC0/6AV0DwAD82gJgA8AA/etgA5p/SouOATUAAAABAF0DwAD82gJgA8AA/etgA5p/AYGLlcALT981AAAAAQBgA8AA/esBgIuZwAtPyDUAAAABAGADmn8BHIuYgouYwAtQZEsBAAGDi5jAC1CDAMAA/O4jHIufhADAC1CXSAEAASsAwAD9XjUAAAABAGADmn8BH4unmqAC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gcAASNHAC3rKF8AASNaCwABI1sALewaaoRzAAEjPFsAASNaCwABI1sALewaaoZsQZAEAAZQAwAD9KpsQPYnAAEjowAt6yhbAAEj0gcAASO/AC3rKmp2bDj01AAAAAQBgA5sMAYDAAEkHwAt6thfAAEkOgsAASQ7AC3tqmqEcwABJBRbAAEkOgsAASQ7AC3tqmqGbEGQBAAGUAMAA/SqbEAabIjTAAEkhwABJKsAASoUAAJqMAAAAAQPAAEk3wABKhQAAAAEBAcAASUYAAACCbGADiU8AAGADiLgBPgNOwABJWsAASWYAAICJYAObDAEuQ8AASXIhHMAASYWBwABJecALe+5IAQABKwDAAP1ePgNOwABJmsAASaYAAIRXYAOIuAEcwABJtIHAAEmowAt77pb8AgACgMAASbvAC3vXFsAAScUumqCbDwCbEknAAEneIRzAAEnugsAASeLAC3whSAEAASsAiLw+Aj0cwABKAS6apAEAAYHAAEoTwAt77gCbIUrAAEopAYLAAEowwAt8IT89icAASkvAC3vuFsAASmWBwABKWcALe+6anZsOSsAASnYBKwabIzTAAEqKwABKk8AASvgAAIaTAAAAAQPAAEqpwABK+AAAAAEBAcAASrwAAACD7mADiT4AAGADiLgBPgFKwABKyAE1AAAAAQBgA4i4ARzAAErPLpqMAQABFsAASuKAwABK3cALfOuA7YlCAJsiIxzAAErtgQDAC30ISAEAASsAAIDAAErwwAt864EAwAt9CAFgA4i4AAALcHEAC3CuAAtw4QALcRUAC3IZAAty1gALcyQAC3NeAAtzmAALc9IAC3QMAAt1EAALdiYAC3beAAt3GQALeo8AC3uwAAt8xAALfVkAAAASApsmNMAASv3AAEsDwABOswOapQAAAWABmwQAAAIEmyg0wABLPsAAS0cYmqYAYAPAAPwFAZMEmyk0wABLUMAAS2IYmqcAYAPAAPo/ASoBBZsuNMAAS2fAAEtnwABMEAAAAAPAAEt7wABMEAAAAAIBAsAAS5kAAACE6l0DwAD82gJgA4lPYAOIuADAAEvDAAAAmp1gA5smAWoAYAPAAP0OeQBgA5smAT4BPRzAAEv4FsAAS+suhOqbBoClAQABgMAAS//AC34aAMAA/PYBCQDAAEvTmwsBAAGBwABL2cALfjMAAgabKzTAAEwVwABMNsAATJgAAJqiAWrAAEwWYAPAAP1RAgAAAQPAAExJwABMmAAAAAAAAABgA5smAT4BSsAATFIBH8AATF2bLgIAAjLAAEyLYAOJT2ADiLgALgAGmyw0wABMncAATLLAAE6xAACGkwFqwABMnmADwAD9UQIAAAEDwABMyMAATrEAAAABAQHAAEzbAAAAg+5gA4k+AABgA4i4AT4FTsAATPDAAEz8AACEV2ADiLgBHMAATP4umowBAAEWwABNEYDAAE0MwAt/GoDtiUIAmyJJwABNIRzAAE0xgcAATSXAC38xSAEAASsAiLxKwABNOgGAwABNQcALfxo/ScAATUsWwABNTy6ap5spSsAATVsBgcAATWLAC38xPz0XwABNdS6aphzAAE1zFsAATXUumqabKGQBAAGUAMAA/SqbKEnAAE2AHMAATYoWwABNhC6appsogJcBAAEWwABNmRbAAE2MLoTqmwZhwAD8/gDAAP00PgM9F8AATakumqcpmyk9F8AATcQumqYcwABNwhbAAE3ELpqmmyiBjQEAAZQAwAD9K5soSsAATdEBgcAATdjAC38xPgQ9icAATfjAC38xHMAATgYumo8BAAGBwABODMALfzEAmxc9HMAATmAWwABOVC6E6psGgL8CAAIWwABOZoDAAE5hwAt/GoDtiUKBwABOc8ALfzEAwAD87z0XwABOiC6aphzAAE6GFsAATogumqabKIGNAQABlADAAP0rmyhKwABOlQGBwABOnMALfzEAAAt+jAALfucAC4DQAAAAAgKbLzTAAE62wABOvMAAaIkDmqgAAAFgAcAA/VEAAAQEmzE0wABQRsAAUHAJhOoAXQPAAPzaAmADiU9gA4i4ATLAAFBuYAOJT2ADiLgABJsyNMAAUS3AAFFACZqpAF0DwAD9nAFgA4lPAASbNDTAAFPBwABUAQmaqpqpAF0DwAD9nAFgA4lPAR7AAFPtwADBFwABYAOJTwAABJs1NMAAVAvAAFQZGIKcAGADwAD6PwEpAQWbPTTAAFQewABUHsAAVTwAAAADwABULsAAVTwAAAADAwPAAFQ4AAAAmqtgA4i4AMAAVEgAAACSMmADiLgAwABUVAAABJqpXQPAAP2cAWADiU8AAGADmy8BPgI9HMAAVG8umqyaqQIAAoDAAFR2wAuBtIHAAFR9wAuBwgCbOUnAAFSJIhbA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AEiKwABIvwAAAAAAAABdA8AA/GcBYAODGQE+Aj0XwABIkC6bPimb5krAAEinARbAAEi3FsAASK4umzubl5vgg2LAAPz8BpwSN8AASMTAAEjMwABJEwEAm1gAAAABA8AASNzAAEkTAAAAAAAAAGADwAD8BQE+Aj0XwABI4i6bPimb5krAAEj5ARbAAEkJFsAASQAumzubl5vgYcAA/P4Gm+03wABKDsAASiXAAErMAACbWQAAAAEDwABKP8AASswAAAAAAAAAYAObvwE+Aj0jHMAASmYWwABKSC6bUZuXm+JIAQABKwDAAP1eF8AASkgum1Gblx/AAEp2m9oBAAEuAJviKwFgA5vMSsAASqQBFsAASqsum1Gbl5viBpvuN8AAStHAAErtwABLuAAAmwcBasAAStJgA8AA/VECAAABA8AASv7AAEu4AAAAAQEBwABLDwAAAJsIXQPAAPxnAWADgxkAAF0DwAD8ZwFgA4MZAT4DTsAASyTAAEsxAACbWl0DwAD9nAFgA4MZARzAAEs9gMAASzPAC+JRlRkAAAAAwAD8fkbAAEtKAMAAS1UAAACA9WADgxkAgMAAS1rAC+JRPTUAAAABAGADnCABHMAAS20WwABLZS6bO5uXm+BLAQABgsAAS27AC+KsAMAA/O4jHMAAS3KDAMAL4sVIAQABKwAAKxfAAEtygwDAC+LFm1UpnCIBYAPAAPo/SsAAS4MBHMAAS5gWwABLkxbAAEuKLps7m5eb4INiwAD8/IGlAQABFsAAS6uBwABLnsAL4naDF8AA/agAwAD8cwab7zfAAEu9wABLzsAATHcAAJsUAWrAAEu+YAPAAP1RAgAAAQPAAEvawABMdwAAAAICAsAAS+EAAACbFWADgxkAwABL8QAAAITsYAODGQAAYAPAAPo/AT4CScAATAMewABMB8AA9eYCAAKAwABMEcAL45CBwABMG8AL454ASsAATCgBKT9KwABMOQEcwABMUhzAAExALptUAQABgMAATEjAC+OQAJvqmxQBAAEcwABMXy6bVAEAAYHAAExnwAvjngCb6gCcNAab8DfAAEx8wABMjcAATTEAAJrnAWrAAEx9YAPAAP1RAgAAAQPAAEyYwABNMQAAAAICAsAATJ8AAACa5mADgxkAwABMrgAAAITsYAODGQAAYAPAAPo/AT4CScAATMAewABMxMAA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AAAAAQBbARzAALBQgsAAsE7ADDHHm0IBAAEWwACwYoHAALBdwAwxgJuHnCQAnBuCAMAMMcdOwACwfcAAsJEAAJupYAOcFgE1wACwlwAAAQBgA5wWAR/AALCXnB8AAAAANQAAAAEAWwEcwACwtoPAALC0wAwyKJtCAQABFsAAsMiBwACww8AMMYCbh5wkAJwbgwDADDIoScAAsOAhHMAAsPUWwACw64DAALDkwAwxbITagylIAQABKwCJbz4DTsAAsRHAALEfAACbqmADnCABHMAAsSkWwACxIS6bO5uXm+BLAQABFsAAsTsWwACxMYDAALEqwAwxbITagymE6IlpAMAA/O49HMAAsW2CwACxTcAMMbWbRQEAARbAALGLhMAAsX3ADDKem6ucKQCcHD0cwACxvoPAALGqwAwyFptFAQABFsAAsdyEwACxzsAMMp6brJwqAJwcP0nAALH/IRzAALIWFsAAsgqAwACyA8AMMWyE24MqSAEAASsAiW8+Ak7AALIywACyQgAAm61gA5wgARzAALJMFsAAskQumzubl5vgSwEAARbAALJgFsAAslSAwACyTcAMMWyE24MqhOiJaQDAAPzuPRzAALKRg8AAsnLADDIWm0UBAAEWwACysYTAALKhwAwzX5usnCoAnBw/RsAAstTAALMJwACy4wAAAITaYAOJZAAWwACy94DAALLwwAwxbITcgys+Ak7AALMcwACzKgAAm6pgA5wgARzAALM0FsAAsywumzubl5vgSwEAARbAALM/hMAAszXADDPYhOiJaQDAAPzuPRzAALNlg8AAs1HADDIWm0UBAAEWwACzg4XAALN1wAwz+5usnCoAnBw9F8AAs6uBwACzpsAMMYCbqxzAALPZgsAAs8TADDG1m0gAAAAAnB2cKT0XwACz94HAALPywAwxgJusHMAAtCODwAC0D8AMMhabSAAAAACcHZwqBpwNN8AAtTjAALVCwAC27QAAm64AAAABA8AAtVXAALbtAAAAAAAAAF0DwAD8qQFgA8AA/AUBPgNOwAC1YsAAtWkAAIF2XQPAAPypAWADwAD8BQExwAC1cGADwAD8BQBGwAC1eMAAtZzAALWDAAAAhJJgA4MZABbAALWWFsAAtY0umzubl5vgg2LAAPz8PgROwAC1qMAAta0AAIFUYAOcIAEcwAC1txbAALWvLps7m5eb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jPyM/Yz+jP+NAI0BjQKNA40EjQWNBo0HjQiNCY0KjQuNDI0NjQ6ND40QjRGNEo0TjRSNFY0WjReNGI0ZjRqNG40cjR2NHo0fjSCNIY0ijSONJI0ljSaNJ40ojSmNKo0rjSyNLY0ujS+NMI0xjTKNM400jTWNNo03jTiNOY06jTuNPI09jT6NP41AjUGNQo1DjUSNRY1GjUeNSI1JjUqNS41MjU2NTo1PjVCNUY1SjVONVI1VjVaNV41YjVmNWo1bjVyNXY1ejV+NYI1hjWKNY41kjWWNZo1njWiNaY1qjWuNbI1tjW6Nb41wjXGNco1zjXSNdY12jXeNeI15jXqNe418jX2Nfo1/jYCNgY2CjYONhI2FjYaNh42IjYmNio2LjYyNjY2OjY+NkI2RjZKNk42UjZWNlo2XjZiNmY2ajZuNnI2djZ6Nn42gjaGNoo2jjaSNpY2mjaeNqI2pjaqNq42sja2Nro2vjbCNsY2yjbONtI21jbaNt424jbmNuo27jbyNvY2+jb+NwI3BjcKNw43EjcWNxo3HjciNyY3KjcuNzI3Njc6Nz43QjdGN0o3TjdSN1Y3WjdeN2I3ZjdqN243cjd2N3o3fjeCN4Y3ijeON5I3ljeaN543ojemN6o3rjeyN7Y3uje+N8I3xjfKN8430jfWN9o33jfiN+Y36jfuN/I39jf6N/44AjgGOAo4DjgSOBY4GjgeOCI4JjgqOC44Mjg2ODo4PjhCOEY4SjhOOFI4VjhaOF44YjhmOGo4bjhyOHY4ejh+OII4hjiKOI44kjiWOJo4njiiOKY4qjiuOLI4tji6OL44wjjGOMo4zjjSONY42jjeOOI45jjqOO448jj2OPo4/jkCOQY5CjkOORI5FjkaOR45IjkmOSo5LjkyOTY5Ojk+OUI5RjlKOU45UjlWOVo5XjliOWY5ajluOXI5djl6OX45gjmGOYo5jjmSOZY5mjmeOaI5pjmqOa45sjm2Obo5vjnCOcY5yjnOOdI51jnaOd454jnmOeo57jnyOfY5+jn+OgI6BjoKOg46EjoWOho6HjoiOiY6KjouOjI6Njo6Oj46QjpGOko6TjpSOlY6WjpeOmI6ZjpqOm46cjp2Ono6fjqCOoY6ijqOOpI6ljqaOp46ojqmOqo6rjqyOrY6ujq+OsI6xjrKOs460jrWOto63jriOuY66jruOvI69jr6Ov47AjsGOwo7DjsSOxY7GjseOyI7JjsqOy47Mjs2Ozo7PjtCO0Y7SjtOO1I7VjtaO147YjtmO2o7bjtyO3Y7ejt+O4I7hjuKO447kjuWO5o7njuiO6Y7qjuuO7I7tju6O747wjvGO8o7zjvSO9Y72jveO+I75jvqO+478jv2O/o7/jwCPAY8CjwOPBI8FjwaPB48IjwmPCo8LjwyPDY8Ojw+PEI8RjxKPE48UjxWPFo8XjxiPGY8ajxuPHI8djx6PH48gjyGPIo8jjySPJY8mjyePKI8pjyqPK48sjy2PLo8vjzCPMY8yjzOPNI81jzaPN484jzmPOo87jzyPPY8+jz+PQI9Bj0KPQ49Ej0WPRo9Hj0iPSY9Kj0uPTI9Nj06PT49Qj1GPUo9Tj1SPVY9Wj1ePWI9Zj1qPW49cj12PXo9fj2CPYY9ij2OPZI9lj2aPZ49oj2mPao9rj2yPbY9uj2+PcI9xj3KPc490j3WPdo93j3iPeY96j3uPfI99j36Pf4+Aj4GPgo+Dj4SPhY+Gj4ePiI+Jj4qPi4+Mj42Pjo+Pj5CPkY+Sj5OPlI+Vj5aPl4+Yj5mPmo+bj5yPnY+ej5+PoI+hj6KPo4+kj6WPpo+nj6iPqY+qj6uPrI+tj66Pr4+wj7GPso+zj7SPtY+2j7ePuI+5j7qPu4+8j72Pvo+/j8CPwY/Cj8OPxI/Fj8aPx4/Ij8mPyo/Lj8yPzY/Oj8+P0I/Rj9KP04/Uj9WP1o/Xj9iP2Y/aj9uP3I/dj96P34/gj+GP4o/jj+SP5Y/mj+eP6I/pj+qP64/sj+2P7o/vj/CP8Y/yj/OP9I/1j/aP94/4j/mP+o/7j/yP/Y/+j/+QAJABkAKQA5AEkAWQBpAHkAiQCZAKkAuQDJANkA6QD5AQkBGQEpATkBSQFZAWkBeQGJAZkBqQG5AckB2QHpAfkCCQIZAikCOQJJAlkCaQJ5AokCmQKpArkCyQLZAukC+QMJAxkDKQMwAAAAAFBp0RPoGUgZ2B0QEBh/MAAAABA4GngdEAAAAAAAAAYAPAAPo/AUqBqgEWgcoWgcIagbqMEHqMCICBi6EGnRM+gdSB3YJVAAGG5QAAAAEDgeiCVQAAAAICAoHtAAAAgKxgA8AA/mwAgfYAAACHVGADwAD8BQAAYAOKZgE+AUqCBgE1AAAAAQBgA4qlARyCMBaCJRqC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lsYAYAPAAP3rAWqE3GADwAD968AAmqsEnbVFhWSFewaWyABgA8AA/esBaoVxYAPAAP3rwACargSdtkWF/IYWBpbKAGADwAD96wFqhgxgA8AA/evAAJqxBJ23RYaUhqsGlswAYAPAAP3rAWqGoWADwAD968AAmrQEnbhFhyqHQgaWzgBgA8AA/esBaoc4YAPAAP3rwACatwSduUWIAYipBpyXAGADwAD96wFqiJZgA8AA/evAAJxcBJ26RYi5iSIGnJgAYAPAAP3rAWqI0WADwAD968AAnFkLBp28RYkliSyJsAABltAAAAABA4kwibAAAAACAgKJOAAAAIPsYAPAAP3rAIlHAAAAg3lgA8AA/esAAGADwAD96wE+AUqJUgEjGolpjBIkiaYDgYmBwAzbo4CJiMAM25VqiZBgA8AA/evAAJy/gImowAzblQFgA8AA/esGnb1FibOJuonrAAGW0QAAAAEDib+J6wAAAAEBAYnHAAAAg+xgA8AA/esAAGADwAD96wFKidIBHonSnbwCAAKAidfADNwPaonfYAPAAP3rwACaogAGnb5Fie2J9IohAAGW0gAAAAEDifeKIQAAAAEBAYn/AAAAg+xgA8AA/esAAGADwAD96wFKigoBHooKnbwCAAKAig/ADNxjaooXYAPAAP3rwACapQAGnb9FiiOKKopbAAGW0wAAAAEDii+KWwAAAAEBAYo3AAAAg+xgA8AA/esAAGADwAD96wFKikIBHopCnbwCAAKAikfADNy3aopPYAPAAP3rwACaqAAGncBFil2KZIqXAAGW1AAAAAEDimqKlwAAAAEBAYpyAAAAg+xgA8AA/esAAGADwAD96wFKin0BHop9nbwCAAKAioLADN0LaoqKYAPAAP3rwACaqwAGncFFipmKoIrPAAGW1QAAAAEDiqSKzwAAAAEBAYqsAAAAg+xgA8AA/esAAGADwAD96wFKircBHoq3nbwCAAKAirzADN1faorEYAPAAP3rwACargAGncJFitGK2IsNAAGW1gAAAAEDit+LDQAAAAEBAYrnAAAAg+xgA8AA/esAAGADwAD96wFKivIBHorynbwCAAKAivfADN2zaor/YAPAAP3rwACasQAGncNFiw+LFotFAAGW1wAAAAEDixqLRQAAAAEBAYsiAAAAg+xgA8AA/esAAGADwAD96wFKiy0BHost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9gFqjVFgA8AA/VECAAABA41tjaYAAAAAAAAAYAOd5wFKjXMBH413nfMDAAMWjZEugpCeVhaNly6XDJ3InoQWjZ8ug1yeVwAAAAzoowAM6PcAAAABAp30RI4jjimtyQOVOAAAAWABnvkAAEcEnfZEjlyOtQadGgBgA530AWqOc2ADnfTAAJ37BJ33RI7PjycGnRsAYAOd9AFqjtpgA530wACeMwSd+ESPQY9rBp0cAGADnfQBao9QYAOd9MAAnmwEnflEj4WPvAadHQBgA530AWqPk2ADnfTAAJ6kBJ36RI/WkA0GnR4AYAOd9AFqj+RgA530wACe3ASd+0SQJ5BOBp0fAGADnfQBapA1YAOd9MAAnxQEnfxEkGiQjAadIABgA530AWqQdWADnfTAAJ9MBJ39RJCmkM0GnSEAYAOd9AFqkLRgA530wACfhASd/kSQ55EtBp0iAGADnfQBapD7YAOd9MAAn7wEnf9EkUeRhgadIwBgA530AWqRW2ADnfTAAJ/0BJ4ARJGgkdAGnSQAYAOd9AFqkbFgA530wACgLASeAUSR6pJGBp0lAGADnfQBapH8YAOd9MAAoGQEngJEkmCSjQadJgBgA530AWqScGADnfTAAKCcBJ4DRJKnku4GnScAYAOd9AFqkr5gA530wACg1ASeBESTCJMmBp0oAGADnfQBapMTYAOd9MAAoQwEngVEk0CThAadKQBgA530AWqTVmADnfTAAKFEBJ4GRJOek8IGnSoAYAOd9AFqk6tgA530wAChfASeB0ST3JQfBp0rAGADnfQBapPvYAOd9MAAobQEnghElDmUkwadLQBgA530AWqUSGADnfTAAKHsBJ4JRJStlNoGnS4AYAOd9AFqlL1gA530wACiJASeCkSU9JVXBp0vAGADnfQBapUGYAOd9MAAolwEngtElXGVygadMABgA530AWqViGADnfTAAKKUBJ4MRJXkligGnTEAYAOd9AFqlfpgA530wACizASeDUSWQpZpBp0yAGADnfQBapZQYAOd9MAAowQEng5EloOWwgadNABgA530AWqWl2ADnfTAAKM8BJ4PRJbclwkGnTUAYAOd9AFqluxgA530wACjdASeEESXI5dEBp02AGADnfQBapcvYAOd9MAAo6wEnhFEl16XpAadNwBgA530AWqXdWADnfTAAKPkBJ4SRJe+l/AGnTgAYAOd9AFql8pgA530wACkHASeE0SYCpg+Bp05AGADnfQBapgXYAOd9MAApFQEnhREmFiYdgadOgBgA530AWqYY2ADnfTAAKSMBJ4VRJiQmN0GnTsAYAOd9AFqmKlgA530wACkxASeFkSY95lRBp08AGADnfQBapkGYAOd9MAApPwEnhdEmWuZiQadPQBgA530AWqZdmADnfTAAKU0BJ4YRJmjme0GnT4AYAOd9AFqmbtgA530wAClbASeGUSaB5pOBp1AAGADnfQBapoYYAOd9MAApaQEnhpEmmiangadQQBgA530AWqadWADnfTAAKXdBJ4bRJq4mxUGnUMAYAOd9AFqmshgA530wACmFQSeHESbL5uGBp1EAGADnfQBaptDYAOd9MAApk0Enh1Em6Cb4AadRQBgA530AWqbtWADnfTAAKaFBJ4eRJv6nBsGnUcAYAOd9AFqnAZgA530wACmvQSeH0ScNZxZBp1IAGADnfQBapxCYAOd9MAApvUEniBEnHOcoQadSQBgA530AWqcfmADnfTAAKctBJ4hRJy7nOkGnUoAYAOd9AFqnMZgA530wACnZQSeIkSdA51KBp1LAGADnfQBap0aYAOd9MAAp50EniNEnWSduAadTABgA530AWqdd2ADnfTAAKfVBJ4kRJ3SngkGnU0AYAOd9AFqneBgA530wACoDQSeJUSeI558Bp1PAGADnfQBap46YAOd9MAAqEUEniZEnpaewwadUQBgA530AWqepmADnfTAAKh9BJ4nRJ7dnwcGnVIAYAOd9AFqnuxgA530wACotQSeKESfIZ9TBp1TAGADnfQBap8tYAOd9MAAqO0EnilEn22foQadVABgA530AWqfemADnfTAAKklBJ4qRJ+7n/sGnVUAYAOd9AFqn9BgA530wACpXQSeK0SgFaBoBp1WAGADnfQBaqAqYAOd9MAAqZUEnixEoIKgqQadVwBgA530AWqgkGADnfTAAKnNBJ4tRKDDoO0GnVgAYAOd9AFqoNJgA530wACqBQSeLkShB6E7Bp1ZAGADnfQBaqEUYAOd9MAAqj0Eni9EoVWheQadWgBgA530AWqhYmADnfTAAKp1BJ4wRKGToboGnVsAYAOd9AFqoaFgA530wACqrQSeMUSh1KH4Bp1cAGADnfQBaqHhYAOd9MAAquUEnjJEohKiMwadXQBg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AAAAYAOesQFKwABGfwEfwABGg56mBAAEFsAARpgugpCeVhbAAEaeLpcMnciehBbAAEamLoNcnlcWwABGri6c+53Inp8AAAANB2AADQeiAA0IIwANCJkAAAADAp6nRMAARtnAAEbfwABIAAORUwAAAWABnlQAAAEEnqlEwABHXcAAR2wYnXYBasAAR0xgA8AA/VECYAOesQErAQWesETAAEcGwABHBsAAR0YAAAADwABHFMAAR0YAAAACAgLAAEcfAAAAgpBgA575AMAARykAAACDXGADwAD8BQAAYAOepwE/AQkAwABHM56AAgACgMAARznADQkQgcAARz/ADQkeAAMGnqtEwABHccAAR4bAAEeZAQCEjQFqwABHcmADwAD9UQIAAAEDwABHksAAR5kAAAAAAAAAYAPAAPo/AUrAAEeVASkGnqxEwABHnsAAR7LAAEe9AQBhAWrAAEefYAPAAP1RAgAAAQPAAEe5wABHvQAAAAAAAABgA8AA/AUBSsAAR7wBkwaerkTAAEfCwABH1MAAR/4AAJz2AWrAAEfDYAPAAP1RAgAAAQPAAEfYwABH/gAAAAAAAABgA56xAUrAAEfeAR/AAEfinrACAAIWwABH8S6CkJ5WFsAAR/cug1yeVwAAAA0JVQANCZcADQnYAA0KNgAAAAMCnrFEwABI4cAASPDAAGWzB4ITAAABYAHAAP1RAAFgAadbAQSetETAAEjwAASWSJ3IAFsBMQBbARoAnrYAJwaetkTAAEluwABJdsAASc0EQQAAAAABA8AASXvAAEnNAAAAAwIDwABJhgAAAIKQYAOe+QDAAEmQAAAAg1xgA8AA/AUAwABJpgAAAJ1/YAOd5wFqAGADwAD9DnkAYAOesQE9NQAAAACCbVsBGgCegBMAAAaet0TAAEoswABKNMAASzoEAZ2AAAAAAQPAAEo9wABLOgAAAAIBAsAASkIAAACDXGADwAD8BQDAAEpYAAAAnO5gA53nAWoAYAPAAP0OeQBgA56xAT4ETsAASnjAAEp8AACdgGADnrEBH8AASoKegAMAA2rAAEqYYAOe+cAArbSAwABKncANCyKBwABKpcANCzIAPRfAAEsEgsAASwDADQtSnP2CwABLD8ANC1Ke1j0XwABLHILAAEsYwA0LUoOwgsAASyPADQtSntRKwABLLAGCwABLM8ANC1IGnrlE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nQEAYAOe+QFqwAB58GADnvnAAJyWBJ8DRMAAenXAAHreBp2cAGADnvkBasAAeoRgA575wACwLwSfBETAAHr6wAB7jgadnQBgA575AWrAAHsMYAOe+cAAsFsEnwVEwAB7qsAAfD0GnZ4AYAOe+QFqwAB7xmADnvnAALCNBJ8GRMAAfJ7AAH1NBp2fAGADnvkBasAAfL1gA575wACwxASfB0TAAH1pwAB95wadoQBgA575AWrAAH1+YAOe+cAAsPoEnwhEwAB+A8AAfkEGnaMAYAOe+QFqwAB+FGADnvnAALEsBJ8JRMAAfl3AAH6+Bp2kAGADnvkBasAAfmpgA575wACxXASfCkTAAH7awAB/RwadpQBgA575AWrAAH7qYAOe+cAAsZIEnwtEwAB/Y8AAf8IGnaYAYAOe+QFqwAB/dmADnvnAALHJBJ8MRMAAf97AAIBfBp2oAGADnvkBasAAf+pgA575wACx+QSfDUTAAIB7wACA6gadqQBgA575AWrAAICLYAOe+cAAsi0Enw5EwACBS8AAgcQGnaoAYAOe+QFqwACBXmADnvnAALJkBJ8PRMAAgeDAAIJMBp2sAGADnvkBasAAge9gA575wACymgSfEETAAIJowACCrwadrgBgA575AWrAAIJ8YAOe+cAAsswEnxFEwACCy8AAgxIGna8AYAOe+QFqwACC32ADnvnAALL5BJ8SRMAAgy7AAIO2Bp2wAGADnvkBasAAgzxgA575wACzJASfE0TAAIPSwACERAadsQBgA575AWrAAIPjYAOe+cAAs1sEnxREwACEYMAAhNIGnbMAYAOe+QFqwACEfGADnvnAALONBJ8VRMAAhO7AAIVHBp20AGADnvkBasAAhQhgA575wACzvwSfFkTAAIVjwACF2AadtQBgA575AWrAAIWAYAOe+cAAs+8EnxdEwACF9MAAhlMGnbYAYAOe+QFqwACF/2ADnvnAALQhBJ8YRMAAhm/AAIb1Bp23AGADnvkBasAAhn1gA575wAC0VASfGUTAAIfXwACILwaduABgA575AWrAAIfuYAOe+cAAtIsEnxpEwACIS8AAiJwGnTcAYAOe+QFqwACIYmADnvnAALS/BJ8bRMAAiLjAAIk2Bp26AGADnvkBasAAiMNgA575wAC07gSfHETAAIlSwACJ2gaduwBgA575AWrAAIlgYAOe+cAAtSAEnx1EwACJ9sAAinkGnbwAYAOe+QFqwACKBGADnvnAALVUBJ8eRMAAipXAAIsIBp29AGADnvkBasAAiqZgA575wAC1jQSfH0TAAIskwACLsQadvwBgA575AWrAAIs1YAOe+cAAtcMEnyBEwACLzcAAjEoGncAAYAOe+QFqwACL4WADnvnAALX8BJ8hRMAAjGbAAIyqBp3CAGADnvkBasAAjHlgA575wAC2LgSfIkTAAIzGwACNTAadwwBgA575AWrAAIzUYAOe+cAAtmMEnyNEwACNaMAAjfIGncQAYAOe+QFqwACNeWADnvnAALacBJ8kRMAAjg7AAI6MBp0RAGADnvkBasAAjhlgA575wACcxQSfJUTAAI6owACPMAadxQBgA575AWrAAI62YAOe+cAAts8EnyZEwACPTMAAj88GncYAYAOe+QFqwACPWmADnvnAALcDBJ8nRMAAj+vAAJBeBp3HAGADnvkBasAAj/xgA575wAC3OASfKETAAJB6wACQ/wadyQBgA575AWrAAJCIYAOe+cAAt2cEnylEwACRG8AAkY0GncoAYAOe+QFqwACRLGADnvnAALeeBJ8qRMAAkanAAJIhBp3MAGADnvkBasAAkb1gA575wAC31ASfK0TAAJI9wACSrAadEgBgA575AWrAAJJYYAOe+cAAnPYEnyxEwACSyMAAkyQGnRMAYAOe+QFqwACS4WADnvnAAJ0oBJ8tRMAAk0DAAJO3Bp0UAGADnvkBasAAk1xgA575wACdXQSfLkTAAJPTwACUZAadzgBgA575AWrAAJPjYAOe+cAAuAQEny9EwACUgMAAlPgGnc8AYAOe+QFqwACUk2ADnvnAALg9BJ8wRMAAlRTAAJVkBp3RAGADnvkBasAAlSlgA575wAC4bwSfMUTAAJWAwACV/gad0gBgA575AWrAAJWWYAOe+cAAuKYEnzJEwACWGsAAlpwGndMAYAOe+QFqwACWJ2ADnvnAALjVBJ8zRMAAlrjAAJcnBp3UAGADnvkBasAAlshgA575wAC5DASfNETAAJdDwACXtQad1gBgA575AWrAAJdVYAOe+cAAuUIEnzVEwACX0cAAmEMGndgAYAOe+QFqwACX4mADnvnAALlyBJ82RMAAmF/AAJjkBp3ZAGADnvkBasAAmHdgA575wAC5ogSfN0TAAJkAwACZigad2wBgA575AWrAAJkaYAOe+cAAudgEnzhEwACZpsAAmjwGndwAYAOe+QFqwACZw2ADnvnAALoPBJ85RMAAmljAAJqrBp3eAGADnvkBasAAmnBgA575wAC6QQSfOkTAAJrHwACbUgad3wBgA575AWrAAJrVYAOe+cAAum4EnztEwACbbsAAm+AGneAAYAOe+QFqwACbf2ADnvnAALqnBJ88RMAAm/zAAJyEBp3iAGADnvkBasAAnAlgA575wAC61gSfPUTAAJygwACdDwad4wBgA575AWrAAJywYAOe+cAAuw8Enz5EwACdK8AAncoGnRcAYAOe+QFqwACdU2ADnvnAAJ3LBJ8/RMAAnebAAJ6PBp3lAGADnvkBasAAng5gA575wAC7RQSfQETAAJ6rwACfLgad5wBgA575AWrAAJ65YAOe+cAAu3cEn0FEwACfSsAAn+gGnegAYAOe+QFqwACfXmADnvnAALutBJ9CRMAAoATAAKCJBp3pAGADnvkBasAAoBtgA575wAC75gSfQ0TAAKClwACg9Qad6wBgA575AWrAAKC8YAOe+cAAvBgEn0REwAChEcAAoWUGne0AYAOe+QFqwAChKWADnvnAALxHBJ9FRMAAoYHAAKH4Bp3uAGADnvkBasAAoZ5gA575wAC8dwSfRkTAAKIUwACiuQad7wBgA575AWrAAKI6YAOe+cAAvK0En0dEwACi1cAAo5EGnRYAYAOe+QFqwACjAWADnvnAAJ2WBJ9IRMAAo63AAKO8Bp0bAGADnvkBasAAo7pgA530wACeMwSfSUTAAKPYwACj5wadQABgA575AWrAAKPlYAOd9MAApaQEn0pEwACkNcAApLAGnfEAYAOe+QFqwACkR2ADnvnAALzfBJ9LRMAApUfAAKW4Bp3zAGADnvkBasAApVhgA575wAC9DASfTETAAKZEwACvOwad9QBdA8AA/KkBYAOe+QFqwACmSl0DwAD8qQFgA575wAC9NQSfTUTAAK9KwACvTgmCZwBgA8AA/AUABJ9ORMAAr8PAAK/NCZ1nAGADwAD6PwAEn09EwACwIMAAsCoJnXkAYAPAAPo/AASfUETAALDIwACw2QmdaABgA8AA+j8ABJ9RRMAAsU7AALFlCYIoAGADwAD6PwAEn1JEwACyBcAAsgsJgl4AYAPAAP3rAASfU0TAALJKwACy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wAD8BQE1AAAAAQBgA8ABAO0BNQAAAAEAYAPAAQCzARSKdsANVvQZACMcin8UAMANWUMbAEgBAAErAAArFop/FADADVlDGwCeQ8ABAMABYAPAAQDtIxyKjxQAwA1ZNhsASAEAASsAACsWio8UAMANWTYbAJ5FwAEA8AFgA8AA/AVNiqECNQAAAAAAWwEeiqHAALf0BAAEHIqrFIqnwA1RxRQAIAEAASSKvQQngZ0UirLADVhiGgAnguYUirjADVkmGwAAAIcAwA1ROhQAwA1RQwgAFADADVGOEAAAKz0UAMANUaERAE2KxgI1AAAAAABbAR6KxsAAt/QEAAQUiszADVb0GQCHAMANUToUAMANUUMIABQAwA1RjhAAACs9NYrGAAABAGADwAEAswEUAMANUaERADUAAAABAFsBF4rmForeFIrcwA1aThwAnkbAAQC9nkcaiwDAAQBRwAEAKDUAAAABAFsBHIsPFIsNwA1aThwAgooBAAEUixXADVaKFgAAwADw4xQAwA1aThwATYsiAjUAAAAAAFsBHosiwAC39AQABByLMBSLKMANVvQZAIKIAAAAAMABAMKHAMANUToUAMANUUMIABQAwA1RjhAAACs9FADADVGhEQBNiz8CNQAAAAAAWwEeiz/AALf0BAAEHItJFItFwA1RxRQAIAEAASeBagAAhwDADVE6FADADVFDCAAUAMANUY4QAAArPRQAwA1RoREAPwEBi1pbAYthAAABg01bAAGLZAAAAYhHYAPAAP2/AD4ETYttAjUAAAAAAFsBHottwAC39AQABByLdxSLc8ANUcUUACABAAEki5QFJ4CvHot9n6gBAAEUi4rADVtcGAAAJ4CvFIuQwA1bZhkAJ4CvAACHAMANUToUAMANUUMIABQAwA1RjhAAACs9FADADVGhEQBNi5sCNQAAAAAAWwEei5vAALf0BAAEHIulFIuhwA1RxRQAIAEAASSLxAMnnkgUi7nADVaKFgAnnkkAAIcAwA1ROhQAwA1RQwgAFADADVGOEAAAKz0UAMANUaERAD0ci9QUi83ADVauFwCCiAEAAAGePynAAQCtTYvqAjUAAAAAAFsBHovqwAC39AQABByL9BSL8MANUcUUACABAAEngK8AAIcAwA1ROhQAwA1RQwgAFADADVGOEAAAKz0UAMANUaERAD2Ni/7ADVEeHowJ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JMAAQZgBFsAAQYuCwABBgcANi3mFhsAA/WUnnq0WwABBzYDAAEHFwA2K1YdUwABWYBbAAEHhgMAAQdnADYrVhGHAAFZhAAaf6EnAAEH4wABCBMAASYUAAJ60AAAAAQPAAEIjwABJhQAAAAQEBMAAQioAAACZymADgxkAwABCNQAAAITuYAODGQDAAEJOAAAAmNtgA4OpAMAAQngAAACes10DwAD82gJgA4lPYAOIuAAAYAODqQE+Ck/AAEKPwABCowAAAZ61YQMBYAOIU2ADiFMAA8AAQq3AAEPmAAAAAQEBwABCwgAAAJm+YAOIUwAAYAOIUwE+A07AAEL/wABDBAAAnPZgA4hTAR/AAEMKiHYDAAEWwABDJYXAAEMewA2OzYC9iFcChBsWwABDRYXAAEM+wA2OzYQbiGOEHRbAAENehcAAQ1fADY7NhB2IZEnAAENuIRzAAEN+FsAAQ3mFwABDcsANjs2CkIhZSAEAASsAiLw+AT0XwABDlobAAEORwA2O5IKQHsAAQ52arQIAAhbAAEOvhcAAQ6jADY7NgpCIWYPAAEO1wA2OgwCIWT9KwABD1QGGwABD3MANjuROwABEB8AARBwAAITAXQPAAPypAWADiFMBMcAARDNgA4hTAE7AAERVwABEZQAAhMFdA8AA/KkBYAOIUwExwABEfGADiFMATsAARJXAAESgAACFk10DwAD8qQFgA4SuATHAAESuYAOErgBOwABEzMAARNIAAIVdXQPAAPypAWADhYYBMcAAROVgA4WGAEbAAETtwABFQ8AARQYAAACZvmADiFMAFsAARS0WwABFJILAAEUYwA2OdYJqg62EwISKPgI9HMAARWCFwABFS8ANj6tWAQABHMAARW6EwABFZMANjqkgAQABFMAARW/ADZA/CQAAAADAAPy6PRzAAEWKh8AARX/ADY/xVgEAAR/AAEWShMwBAAEWwABFs4XAAEWewA2Pq4HowAD8jgAAwAD8ukbAAEXFwABGDsAARd4AAACZvmADiFMAFsAARf0WwABF9ILAAEXowA2OdYJqg62EwYSLPgROwABGKsAARjAAAJ62YAOIUwEcwABGPITAAEYywA2OqSABAAEUwABGPcANkOEJAAAAPTXAAEZMAAABAF0DwAD8qQFgA8AA/VEBFsAARkwunm+f1DUAAAABAFsBHMAARlsUwABG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FsAApR0un1Kguj89HMAApTsun2UAAAAAoHs9iMAApVrADkCnHMAApWEun00AAAAAoGw+AknAAKWDHMAApYyAwAClh8AOQKeAlwEAATd/AMAA/TQ+Aj2LwACln8AOQOYqPYrAAKXBwA5A0So/PYjAAKXtwA5ApxzAAKX0Lp9NAAAAAKBsSsAAphEBgMAAphjADkCnBqClTcAApiXAAKYqwACm+wAAn54AAAABA8AApjfAAKb7AAAAAwMDwACmPAAAAGpgA8AA/AUAwACmTQAAAIKQYAOe+QDAAKZYAAAAnPFgA8AA+j8AAFwBPgNJwACmaSEWwACmbi6VQ6BaSsAApn8AP07AAKaYwACmowAAn6RgA510ARzAAKalLp9tAwADgcAAprjADkWFgMAApr7ADkV2gsAApsXADkWTAKCBPRzAAKbVLp+boFABAAGDwACm7MAORcAAoKkGoKZNwACnAMAApwXAAKfPAACfnQAAAAEDwACnEsAAp88AAAADAwPAAKcXAAAAamADwAD8BQDAAKcoAAAAgpBgA575AMAApzMAAACc8WADwAD6PwAAXAE+A0nAAKdEIRbAAKdJLpVDoFpKwACnWgA/TsAAp2zAAKd3AACfpGADnrEBHMAAp3kun24DAAOBwACnjMAORkqAwACnksAORjuCwACnmcAORlgAoII9HMAAp6kun5ugUAEAAYPAAKfAwA5GhQCgqQagp03AAKgrwACoMMAAqeMAAJ9YAAAAAQPAAKg7wACp4wAAAAEBAcAAqEIAAACSVGADnrEAAFwBPgQ9F8AAqFQWwACoTy6D66Big7CAwACoW8AORwCe1D0XwACobIDAAKhmwA5HAJz9FsAAqHcug+ugYp7WPRfAAKiBLoPrgMAAqIjADkcAoGJJwACokyIhHMAAqKAWwAColy6fRqBlSAEAASsAwAD9XgAcwACotBbAAKirLp9GoGVIAQABFsAAqL2AwACot8AORwCc7p7OAMAA/V4+Aj0XwACo2C6fRiugZT0XwACo7y6fRyugZj4BQCIiHMAAqaUWwACpnC6fRqBlSAEAASsAwAD9XgEWwACptoDAAKmwwA5HAISNnsUBJcAAqcuAwACpxcAORwBgA6FXwACpnMAAqdgABqCpTcAAqejAAKntwACrBAAAn5ugUAAAAAEDwACqA8AAqwQAAAABAQHAAKoKAAAAn6RgA56xAABcAT4BScAAqhwcwACqKRbAAKogLp9GoGVIAQABKwDAAP1ePgI9F8AAqjoun0YmwACqOgGAwACqRcAOSDxgA510oGU9F8AAqlcun0cWwACqZi6fRqBloGY+Az0XwACqkBbAAKqDLp9HoGaDsIDAAKqXwA5IPJ7UPRfAAKq7FsAAqrYWwACqqS6fR6Bmg7CezJz9FsAAqsYun0egZp7WPRfAAKraLp9HFsAAqvYWwACq6S6fR6Bmg7CezKBmBqCqTcAAqwnAAKsNwACsUAAAn3kAAAABA8AAqzHAAKxQAAAAAQEBwACrNgAAAIOwYAPAAPwFAABgA8AA/AUBPgNOwACrW8AAq2QAAJ+QYAPAAPwFARzAAKtmLp9PAAAAAKBuScAAq3IiHsAAq3bAAPXmAgACgcAAq4DADklIasAAq4pgA8AA/AWD+AABHsAAq5LAAPXmAgACgcAAq5zADklIasAAq6ZgA8AA/AXAAF6AAD4DTsAAq7jAAKu+AABqYAPAAPwFARbAAKvALp9SoLo9iMAAq9LADkktHMAAq9kun00AAAAAoGxKwACr6gEcwACr8S6ffQMAA4DAAKwAwA5JLYLAAKwGwA5JuykAoK4/SsAArB4BHMAArCUun3oCAAKAwACsQcAOSS0pAKCrBqCrTcAArFXAAKxZwACxjwAAn3oAAAABA8AArHTAALGPAAAAAgICwACseQAAAIOwYAPAAPwFAMAArIQAAACfpWADwAD6PwAAYAPAAPwFAT4ITsAArKTAAKyqAACCTmADrsABGsAArLmuyk7AAKzQwACs1gAAamADwAD8BQEWwACs2C6fUqC6ScAArRUiHMAArRxqwACtGWADwAD8BcAAX36BawEAAYDAAK0fwA5KXADAAP0zABzAAK0sgMAArSfADkpcgWsBAAFqwACtL2ADwAD8BcAAmgMAwAD9Mz4CPYrAAK07wA5KhxzAAK1JgsAArUPADkqHn6YBAAGAwACtVcAOSlwArsY9iMAArWLADkpcHMAArWkun00AAAAAoGxJwACtfyIcwACthmrAAK2DYAPAAPwFwACaFYFrAQABgMAArYnADkpcAMAA/TMAHMAArZaAwACtkcAOSlyBawEAAWrAAK2ZYAPAAPwFwACaYADAAP0zPgI9isAArh3ADkqHHMAAriuCwACuJcAOSoeDsAEAAYDAAK4wwA5KXACuxT2IwACuPcAOSlwcwACuRC6fTQAAAACgbD9DwACuWSIiIRzAAK5mgsAArmDADkqHSAEAASsAwAD9XgAcwACudGrAAK5xYAPAAPwFwACaFYFrAQABgMAArnfADkpcAMAA/TMAHMAAroSAwACuf8AOSlyBawEAAWrAAK6HYAPAAPwFwACaYADAAP0zPgI9isAArpPADkqHHMAArqGCwACum8AOSoeDsAEAAYDAAK6mwA5KXACuxT2IwACus8AOSlwcwACuui6fTQAAAACgbEnAAK7PIhzAAK7ZgsAArtPADkqHSAEAASsAwAD9XgEcwACu8hbAAK7qgsAAruTADkqHnW2uyUgBAAErAMAA/V4+AUrAAK8DARzAAK8KLp+nAwADgMAArx3ADkpcg8AAryPADkqggcAAryrADkpsAKCsP0nAAK9CIiEWwACvRy6fQqBQoF0AHMAAr3AWwACvaILAAK9iwA5Kh51trslIAQABasAAr3tgA530wACiXADAAP1ePgFKwACvjgEcwACvlS6fpwMAA4DAAK+owA5KXIPAAK+uwA5KoIHAAK+1wA5KbACgrD9JwACvzSIhFsAAr9Iun0OgUKBeACIcwACv/xbAAK/3gsAAr/HADkqHnW2uyUgBAAFqwACwCmADnfTAAKXdAMAA/V4BHMAAsCAWwACwGILAALASwA5Kh51trslIAQABasAAsCtgA530wACoRQDAAP1ePgFKwACwPgEcwACwRS6fpwMAA4DAALBYwA5KXIPAALBewA5KoIHAALBlwA5KbACgrD9JwACwfSIiIiIcwACwhWrAALCCYAPAAPwFwABffoFrAQABgMAAsIjADkpcAMAA/TMAHMAAsJWAwACwkMAOSlyBawEAAWrAALCYYAPAAPwFwACaAwDAAP0zASIcwACwq2rAALCoYAPAAPwFthSBawEAAYDAALCuwA5KXADAAP0zABzAALC7gMAAsLbADkpcgWsBAAFqwACwvmADwAD8BcAAjU8AwAD9MwEewACwzcAA9eYCAAKAwACw18AOSlxqwACw3WADwAD8BcAAmg8AAR7AALDswAD15gIAAoDAALD2wA5KXGrAALD8YAPAAPwFsLoAPgFKwACxCQEcwACxEC6fpwMAA4DAALEjwA5KXIPAALEpwA5KoIHAALEwwA5KbACg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/AWEDwA+Aj2PwADP7MAOYggcwADP8y6fTQAAAACgbEnAANAGHsAA0ArAAPXmAgACh8AA0BTADmIIasAA0BpgA8AA/AUJAELAANAhAD8/ScAA0DYewADQOsAA9eYCAAKHwADQRMAOYghqwADQSmADwAD8BYP+AD4CScAA0FohhcAA0F/ADmHWPgM9HMAA0Loun1ABAAGGwADQyMAOYesAoG89jcAA0OHADmHWKT2OwADRAcAOYesWwADREC6fUqC6Pz0cwADRLi6fZQAAAACge0nAANFSHMAA0VuHwADRVsAOYgiAlwEAATd/AMAA/TQ+Aj2MwADRbMAOYcEqPY3AANGNwA5h1io/PY/AANGywA5iCBzAANG5Lp9NAAAAAKBsScAA0c4hhcAA0dPADmHWPRzAANHiLp9QAQABhsAA0fDADmHrAKBvPz0cwADSAy6frwYAA4DAANIWwA5hNYHAANIhwA5hRYPAANItwA5hpQOc8YTAANJHwA5hwZ+wKZ+xKqC3SsAA0n4Bh8AA0oXADmIIBqC2TcAA0pLAANKWwADWRAAAnMUAAAABA8AA0qDAANZEAAAAAQEBwADSpQAAAJQzYAPAAPwFAABgA8AA/AUBPgJOwADSusAA0sUAAJ+3YAOhVwEewADSx6FWAgACgMAA0uXADmYZFsAA0vAunQKgYABJwADTASXAANMQgcAA0wXADmY0YAOhbD4JTsAA0zgAAACHVGADwAD8BQBOwADTVMAA014AAJ+4XQPAAPypAWADwAD8BQExwADTZWADwAD8BQBJwADTbyIcwADTfRbAANN4FsAA03Mug+ugYoKQntFIAQABasAA04pgA575wACvcwDAAP1eABzAANOlFsAA050WwADTmC6D66BinXWeu0gBAAEWwADTqC6dAqBgAMAA/Sg+Az2KwADTvsAOZn0WwADT0BbAANPLLoProGKHVJ66PRzAANPug8AA0+TADmaOgKUBAAEWwADUARbAANP6FsAA0/Uug+ugYoJensufuMAA/fMAwAD8uz0XwADUFS6D6xbAANQhFsAA1Bwug+ugYpz9ns+gYj4BPYrAANRCwA5mfRbAANRaFMAA1E/ADmY0AQFgA6Fsh1SeXj0cwADUfoPAANR0wA5mjlYBAAEWwADUjRTAANSCwA5mNAEBYAOhbJQzoW4AwAD8uj0cwADUny6f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NgaicFTAAMvXwADL4sAA0BUAAKGQAAAAAQPAAMv1wADQFQAAAAQEBMAAzAgAAACB1WADhK4AwADMEQAAAJJUYAOesQDAAMwjAAAAgkpgA4SuAMAAzCsAAACHemADwAD6PwAAYAOErgE+BE7AAMw/wADMRgAAoZFgA8AA+j8BKk7AAMxawADMYwAAhbZgA8AA/esBFsAAzGuBwADMZcAPXjKdep7QScAAzHwewADMgMAA9eYCAAInmeyFwADMkMAPXnwAPgI9jcAAzKPAD158J0g9jMAAzLrAD15nKT9JwADM0yIhHsAAzNidTwEAAYXAAMzpwA9efAAAIR7AAMz3nVEBAAGFwADNB8APXnwAPgFJwADNGh7AAM0enU0BAAGFwADNNsAPXnwAPgFKwADNSwEcwADNUi6g3AMAAxzAAM2MasAAzXJdA5FlAWEDAWADnrFgA5FOwABvf4gLAQABgcAAzZrAD14yAJFpFsAAzbSBwADNrsAPXjKHVJ66FsAAzdKBwADNzMAPXjJhnsoAoxY+AUrAAM3yARzAAM35LqDcAwADHMAAziRqwADODF0DkWUBYQMBYAOesWADkU7AAF5eiAsBAAGBwADOMsAPXjIAkWkWwADOTIHAAM5GwA9eModUnroWwADOXoHAAM5YwA9eMmGeygCjFj4CTsAAzo3AAM6UAACBdmADhK4BHMAAzpYuoXoGAASAwADOrMAPXiQewADOs4iMAQABhcAAzrjAD158ABzAAM7UFsAAzs0uoK+iDVsCAAIxwADO6mADhK4BgsAAzuvAD15AJsAAzu8BasAAzu9beWADnrEAtJwWwADPAoHAAM78wA9eModUnroCoZIhg8AAz57AD15Oh3qDwADPusAPXk6jKUrAAM/KASOEwADP0cAPXmccwADP4RbAAM/aLqCvog2hkwMAA4bAAM/vwA9f+CspALTLhsAA0AXAD1/4AWADhK4GonFUwADQGsAA0B/AANFRAAChiwAAAAEDwADQMsAA0VEAAAABAQHAANA5AAAAklRgA56xAABcAT4FTsAA0FHAANBaAAAfYAOErgEcwADQXC6g1QAAAACiN07AANB6wADQgwAAhX9gA4SuASbAANB6ARzAANCFLqDXAAAAAMAAWhZgA4SuTsAA0JvAANCtAAChlGADhK4BHMAA0L4WwADQty6gr6INoZQD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AACiNkrAAQ/QAD9OwAEP7MABD/IAAIMZYAOesQEmwAEP7AEWwAEP+oPAAQ/0wA+Ol4MZwAD8jWADnrFOwAEQDcABEBIAAIHoYAOesQEmwAEQDQEWwAEQGoPAARAUwA+Ol4HowAD8jmADnrFOwAEQLMABEDIAAKHLYAOvYgEewAEQNK9ZAQABFsABEEeEwAEQQcAPj0CCXp7LAE7AARBnwAEQcwAAhb9dA8AA/KkBYAOErgExwAEQgWADhK4AScABELYcwAEQzhbAARDHFsABEMCEwAEQusAPj0CCXp7LYcAA/e+AlwEAAZQAwAD9ND4CTsABEOTAARDqAACAlmADwAD96wEewAEQ+K9dBAAEFsABERaEwAEREMAPj0CCXp7LhsABER7AD4+ghMABESXAD49ALgBJwAEROxbAARFFFMABET/AD5AlCACDssAA/fI+AT0cwAERaYfAARFdwA+Pz1YBAAEcwAERdBbAARFtLqCvog2hygIAAhTAARGCwA+QJQgAhMABEYnAD49AALSrAMAA/Lo/P0XAARGqAcABEbPAARG1AABiYAPAAPwFAZQBHMABEbwUwAERusAPkNAIAGMBAAEcwAERyxbAARHEg8ABEb7AD46XYcAA/NiBjQEAAZQAwAD9KwDAAP0yARXAARHQwA+Q0AgcwAER0RTAARHQwA+Q0AgAZAEAAZQAwAD9Kj4CTsABEebAARHrAACZ8mADwAD9UQEcwAER8oPAARHtwA+Ol0sBAAEUwAER88APkNAIAADAAPy4ScABEf8lwAESCBTAARIDwA+RSAkAYAOesT4BScABEh4hHMABEjUWwAESLhbAARInFMABEiLAD5FICQFgA56xgl6ey2HAAP3vSAEAAZMAwAD9KD4CTsABElDAARJWAACAlmADwAD96wEewAESWK9gBAAEFsABEmYUwAESYcAPkUgJAWADnrGCXp7LhsABEm7AD4+gFMABEnXAD5FICQFgA56xLgA9HMABEpqHwAESjsAPj89WAQABHMABEqUWwAESni6gr6INocoCAAIUwAESs8APkdIKABTAARK6wA+RSAkBYAOesQC0qwDAAPy6Pz4BPRzAARL1h8ABEunAD4/PVgEAARzAARL5LqDWAQABFMABEwHAD5FICQAAojoAwAD8uknAARNMHMABE2MWwAETXBbAARNVhcABE1DAD49wgl6ey2HAAP3vgJcBAAGUAMAA/TQ+Ak7AARN5wAETfwAAgJZgA8AA/esBHsABE4GvXgUABRbAAROqhcABE6XAD49wgl6ey4bAAROywA+PoIXAARO5wA+PcBbAARPEhcABE7/AD49whI2exS4AScABE+AWwAET6hTAARPkwA+S0ggAg7LAAP3yPgE9HMABFA6HwAEUAsAPj89WAQABHMABFBkWwAEUEi6gr6INocoCAAIUwAEUJ8APktIIAIXAARQuwA+PcAC0qwDAAPy6Pz89HMABFE4uoNQBAAEcwAEUWhbAARRTLqCvog2hzAIAAofAARR4wA+Pz4HAARSFwA+NdQC0zwCiNgaig1TAARSewAEUr8ABFUUAAKHNAWrAARSfYAPAAP1RAgAAAQPAARTBwAEVRQAAAAICAsABFMgAAAChzmADnrEAwAEU2gAAAKHPYAPAAPo/AABcAT4CPRzAARTpLqD2AQABJ6HQAKMtScABFQmBwAEVDcAPlAI+AT0cwAEVJRbAARUeLqCvog2h0QEAASbAARU1ARzAARU1LqDXAAAAAMAAWhZgA4SuALSiPwaihFTAARVKwAEVW8ABFZMAAKHSAWrAARVLYAPAAP1RAgAAAQPAARVnwAEVkwAAAAEBAcABFW4AAACSVGADnrEAAFwBPgE9HMABFXsuoPYBAAEnodMAoy0GooVUwAEVmMABFanAARiQAACh1AFqwAEVmWADwAD9UQIAAAEDwAEVwsABGJAAAAABAQHAARXHAAAAodVgA8AA/AUAAFwBPgU9HMABFdsuoPYBAAEnodYAoy1OwAEWE8ABFhkAAISBXQPAAPypAWADhK4BHMABFhsuoN4BAAGAwAEWK8APlPcAojxOwAEWTwAAAIW/XQPAAPypAWADhK4ARcABFp4BwAEWp8ABFqkAAGJgA8AA/AUBkwEcwAEWsIPAARauwA+VamMBAAEWwAEWuIHAARaywA+VH2HAAPzYAMAA/TIBi8ABFsDAD5VqHMABFsGDwAEWwMAPlWpkAQABlADAAP0qPgJOwAEW2MABFt0AAJnyYAOErgEcwAEW5IHAARbfwA+VH0sBAAGDwAEW5cAPlWoAwAD8uEnAARbvJcABFviEwAEW88APlc1gA4YWPgJJwAEXGhzAARcqgsABFx7AD5VPSAEAASsAwAD9Xj4BPYrAARc/wA+VTxzAARdTgcABF03AD5UfgVgCAAKTg8ABF17AD5VqAMAA/Mw/RsABF3TAARekwAEXhAAAAIJrYAOErgAWwAEXlxTAAReSwA+VzQQBYAOGFoW/hhg+AT0cwAEXvILAARewwA+VT1YBAAGFwAEXwMAPlmwAwAD8uj4BScABF+4hHMABF/6CwAEX8sAPlU9IAQABKwDAAP1ePgE9HMABGB+CwAEYE8APlU9WAQABhMABGCPAD5XNAMAA/Lo/PRzAARhGLqDUAQABHMABGFIWwAEYSy6gr6INocwCAAI1AAAAAQBdA8AA/KkBYAOErgGCwAEYcMAPlU8jHMABGHyDAMAPlxpIAQABKwAAgcABGH/AD5UfgwDAD5caAV0DwAD8qQFgA4SuKwC0zwCiNgaihlTAARiVwAEYpsABGygAAKHXAWrAARiWYAPAAP1RAgAAAQPAARi2wAEbKAAAAAEBAcABGL0AAACSVGADnrEAAFwBPgQ9HMABGMouoPYBAAEnodgAoy1OwAEY7MABGPIAAICWYAPAAPwFAR7AARj4wAD8NQEAARbAARkHgMABGQHAD5ecgl6eywBJwAEZFBbAARkYLoJMohs+AknAARksHMABGTaBwAEZMMAPl8JIAQABKwDAAP0oPgE9HMABGUkuoNQBAAEewAEZTp0bBAAEJ6HZJ6HXFsABGZCAwAEZisAPl5yHVJ66FsABGZwugKyiGAAAojY+AT0cwAEZui6g1AEAARzAARnGFsABGb8uoK+iDaHaAgACgcABGdHAD5fCgMABGdjAD5ecALSlAKI2SsABGe8AP0nAARqLIhzAARqVgcABGo/AD5fCSAEAASsAwAD9KAEcwAEapoHAARqgwA+XwmMBAAGTAMAA/TI+AT0cwAEasy6g1AEAARzAARq/FsABGrguoK+iDaHbAgACFsABGtWAwAEaz8APl5yCXp7LgMABGt3AD5ecALSmAKI2PgE9HMABGvkuoNQBAAEcwAEbBRbAARr+LqCvog2h2gIAAoHAARsQwA+XwoDAARsXwA+XnAC0pQCiNgaih1TAARstwAEbPsABG8MAAKHcAWrAARsuYAPAAP1RAgAAAQPAARtVwAEbwwAAAAEBAcABG1wAAACh3WADnrEAAFwBPgI9HMABG20uoPYBAAEnod4Aoy09HMABG5cuoRgDAAOTK4DAARu1wA+ZiACiTgaiiFTAARvIwAEb2cABHH8AAKHfAWrAARvJYAPAAP1RAgAAAQPAARv1wAEcfwAAAAICAsABG/wAAACh4GADnrEAwAEcDgAAAJ0PYAOesQAAXAE+Aj0cwAEcHi6g9gEAASeh3gCjLT0cwAEcSC6h4QMAAykWwAEcbIDAARxhwA+Z+oOwnsyBwAEccsAPmggAookGoolUwAEchMABHJXAAR5DAACh4QFqwAEchWADwAD9UQIAAAEDwAEcp8ABHkMAAAADAwPAARy0AAAAoeJgA8AA+j8AwAEcyQAAAJ9VYAOesQDAARzbAAAAnQ9gA56xAABcAT4DPRzAARzrLqD2AQABJ4Y+AKMtTsABHRnAAR0kAACCa2ADhK4BI4DAAR0mwA+aixzAAR02LqDVAAAAAKI3KwFgA4SuScABHVAiIRzAAR1fg8ABHVTAD5rPSAEAASsAwAD9XgAWwAEdai6g0KIxPgE9HMABHYEuoNQBAAEcwAEdhi6h4wIAAmrAAR2tYAORWaFPFsABHdqBwAEdz8APmpuHVJ66AKMbAKI2PgE9HMABHfsuoNQBAAEcwAEeBxbAAR4ALqCvog2h5AMAA4HAAR4XwA+am4PAAR4jwA+az4LAAR4vwA+aqQC0zgCiNgaiilTAAR5IwAEeWcABHwsAAKHlAWrAAR5JYAPAAP1RAgAAAQPAAR5rwAEfCwAAAAEBAcABHnIAAACSVGADnrEAAFwBPgROwAEeisABHpQAAIW6YAOErgEcwAEeli6g1QAAAACiNz0cwAEeqS6h5gEAAYHAAR7DwA+b7gCjMD0cwAEe0y6g1AEAAYHAAR7YwA+b7gCiNj0dwAEe7qHlAQABgMABHwHAD5vaAK+nBqKLVMABHxDAAR8hwAEfhQAAoecBasABHxFgA8AA/VECAAABA8ABHzHAAR+FAAAAAQEBwAEfOAAAAJJUYAOesQAAXAE+Aj01AAAAAQBgA7BzARbAAR9FLqC1ohojHMABH1OBAMAPnJxIAQABKwAAKxzAAR9TgQDAD5ycoegAAAAAsH4BXD0dwAEfaqHnAQABgMABH3vAD5yHAK+oBqKMVMABH4rAAR+bwAEgygAAoekBasABH4tgA8AA/VECAAABA8ABH6nAASDKAAAAAgICwAEfsAAAAKHqYAOesQDAAR+/AAAAoetgA56xAABcAT4FTsABH9rAAR/jAACh7GADh2QBHMABH+UuoOMBAAGBwAEf+8APnTEAoj9OwAEgFcABIB4AAKHtYAOHZAEcwAEgIC6g5AAAAACiQE7AASA/wAEgSQAAhbpgA4SuASbAASA/ARzAASBLLqDXAAAAAMAAWhZgA4SuPTUAAAABAGADsHMBFsABIFYuoLWiGiMcwAEgZIUAwA+du0gBAAErAAArHMABIGSFAMAPnbuh7gAAAACwgQFcPRzAASB7LqDUAQABHMABIIcWwAEggC6gr6INoe8FAAWAwAEgk8APnSOEwAEgnMAPnY6DwAEgp8APnW6BwAEgscAPnTGCwAEgvMAPnUUAtMcAojYGoo1UwAEgz8ABIODAASG5AACh8AFqwAEg0GADwAD9UQIAAAEDwAEg9sABIbkAAAABAQHAASD9AAAAofFgA56xAABcAT4DPRzAASEXLqD2AQABJ6HyAKMtQBzAASFkFsABIViAwAEhRcAPnn6dep7QSAEAASeAvADAAP36wAEhRcABIWoAPRzAASFxLqHzAgABHMABIYYuoNUAAAAAojcBofSAwAEhosAPnn6ijwaijlTAASG+wAEhz8ABJaIAAKH1AWrAASG/YAPAAP1RAgAAAQPAASHqwAElogAAAAEBAcABIfEAAACSVGADnrEAAFwBPgY9HMABIf4uoPYBAAEnofYAoy1OwAEiLMABIjQAAIQdYAPAAPo/ASEcwAEiYhzAASJVFsABIjcuoMSiKoN3AQABasABIldgA8AA/AUhAMAA/B1IAQABkwDAAP0oTsABInHAASJ5AACEG2ADwAD6PwEhHMABIqccwAEimhbAASJ8LqDEoiqDdwEAAWrAASKcYAPAAPwFg1oAwAD8HUgBAAGTAMAA/ShOwAEivAAAAIUHYAOErgBJwAEizSEewAEi0sAAWb0CAAInmf6AwAEi4cAPnysAPgFJwAEjvIHAASPAwA+fUT4BPYvAASPTwA+f5BzAASPhLqDcAwADHMABJDdqwAEkAV0DkWUBYQMBYAPAAP3rYAORTp/NiAsBAAEWwAEkS4DAASRFwA+fK4JenssAkWkWwAEkZoDAASRgwA+fK4dUnroWwAEkhIDAASR+wA+fK2GeygCjFknAASSagsABJJ7AD5+aPgE9i8ABJLHAD5/kHMABJL8uoNwDAAMcwAElFWrAASTfXQORZQFhAwFgA8AA/etgA5FOvxGICwEAARbAASUpgMABJSPAD58rgl6eywCRaRbAASVEgMABJT7AD58rh1SeuhbAASVigMABJVzAD58rYZ7KAKMWPz89HMABJX0uofMBAAGDwAElksAPn+QAoo8Goo9UwAElp8ABJazAASmHAACh8wAAAAEDwAElwMABKYcAAAACAQHAASXMAAAAhQdgA4SuAAHAASXgAAAAofRgA56xAWoAYAPAAP0OeVwBPgpOwAEl+8ABJgAAAIPuYAPAAP1RARzAASYCLqDXAAAAAMAAWhZJwAEmDSXAASYWgsABJhHAD6GFYAPAAFpgPgI9HMABJjEuoNQBAAEUwAEmNsAPoYUCAWADwABaYACiNkrAASZDAD9OwAEmYMABJmsAAJ2YYAPAAFQ/ASbAASZgAYLAASZtwA+hhWADwABUP0AhHMABJpwWwAEmfi6gxKIqSAEAARzAASaflIHEAAAAAMAA/CgAwAD9KMABJn7AASahAE7AASatwAEmtQAAhB1gA8AA+j8BIRzAASbjHMABJtYWwAEmuC6gxKIqg3cBAAFqwAEm2GADwAD8BSEAwAD8HUgBAAGTAMAA/ShOwAEm8sABJvoAAIQbYAPAAPo/ASEcwAEnKBzAAScbFsABJv0uoMSiKoN3AQABasABJx1gA8AA/AWDWgDAAPwdSAEAAZMAwAD9KEAcwAEnQYTAASc5wA+iR0gBAAEcwAEnVRbAASdFLqDBoihIAQABasABJ2hgA67twADAyADAAP1eAMAA/V7AASc5wAEncQBOwAEnjMABJ5UAAIJsYAOIUwE1wAEnmwAAAQBgA63QAR/AASebreAHAAIWwAEny4PAASfAwA+h64C9wABUQRbAASfRLqC8oiIFofcWwAEoJh7AASgCwABUPgEAAYPAASgawA+h6wCEjZ7FhQeAwAEoSMAPoVqCkBzAAShjLqEUAQABFsABKHEuoMOiKQCjMoQbhcABKJ3AD6KQhB2EwAEot8APokc1AAAAAQBbARfAASjIhsABKMbAD6MyhFMWwAEo4IPAASjVwA+h64dUwABUQoJZNQAAAAEAWwEXwAEo84bAASjxwA+jMoZRHsABKQbAAFnBAQABgcABKRXAD6FpAIhVhgDAD6MyPRzAASkvFsABKScuhEOiDqH4AwADhsABKVDAD6MgFsABKVouhsyiMxbAASlrLoCsohgAqWM9HMABKXUuoNQBAAGGwAEpesAPoyAAojYGopBUwAEpjMABKZ3AASnjAACh+QFqwAEpjWADwAD9UQIAAAEDwAEpssABKeMAAAABAQHAASm5AAAAklRgA56xAABcAT4BPRfAASnGLqC5KaIfBqKRVMABKejAASn5wAEqyAAAofoBasABKelgA8AA/VECAAABA8ABKgzAASrIAAAAAgICwAEqEwAAAKHxYAOesQDAASotAAAAklRgA56xAABcAT4EPRzAASo6LqD2AQABJ4VHAKMtPRfAASpeLqC5KqIfQBzAASqkFsABKpiAwAEqhcAPpPqdep7QSAEAASeAvADAAP36wAEqhcABKqoAPRzAASqxLqDUAQABHMABKrYuoNUAAAAAojcAojYGopJUwAEqzcABKt7AASwMAACh+wFqwAEqzmADwAD9UQIAAAEDwAEq9sABLAwAAAABAQHAASr9AAAAklRgA56xAABcAT4CPRzAASsKLqD2AQABJ6H8AKMtScABKzAcwAErRBbAASs0LqDBoihIAQABasABK1dgA67twADAyADAAP1ePgE9HMABK64uoNQBAAEcwAEruhbAASuzLqCvog2hNQEAAYDAASvGwA+ltgC0qgCiNj4BPRzAASviLqDUAQABasABK/FgA8AAWdPAAMJ7AKI2BqKTVMABLBHAASwiwAEtoQAAof4BasABLBJgA8AA/VECAAABA8ABLDrAAS2hAAAAAQEBwAEsQQAAAKH/YAOesQAAXAE+Bz0cwAEshi6g9gEAASeiAACjLU7AASy2wAEsuwAAg+5gA8AA/VEBHMABLL0uoNcAAAAAwABaFknAASzIJcABLNGBwAEszMAPpq9gA8AAWmA+Aj0cwAEs7C6g1AEAARTAASzxwA+mrwEBYAPAAFpgAKI2SsABLP4AP07AAS0kwAEtLQAAgmxgA4hTASbAAS0kAYHAAS0vwA+mr2ADiFM9F8ABLUKCwAEtOcAPpxWEUxbAAS1ZgMABLU/AD6aJh1SeuoJZPRzAAS1pLqDUAQABgsABLW7AD6cVAKI2PRzAAS19LqDwAgACgsABLY3AD6cVFsABLZcuns2viQCiRAailFTAAS2mwAEtt8ABMKQAAKIBAWrAAS2nYAPAAP1RAgAAAQPAAS3QwAEwpAAAAAMDA8ABLd4AAACSVGADnrEAwAEt6wAAAKEKYAOesQDAAS38AAAAoQtgA56xAABcAT4KPRzAAS4TLqD2AQABJ6IBAKMtScABLnMhFsABLo4WwAEuhxbAAS6AFsABLnguhEOiDpUbqO6CRanPn0ungj4BPRzAAS6pLqENAQABgcABLsjAD6fZAMAAV9c/TsABLu3AAS7yAACCkGADwABXAgEmwAEu7QEcwAEu9C6g1wAAAADAAFoWYAPAAFcCTsABLwPAAS8NAACiAmADwAD8BQEewAEvGK8qAQABNQAAAAEAYAOesQGCwAEvMMAPp+cjHMABL0GEAMAPqKNIAQABKwAAKxbAAS9BhADAD6ijgl6eywFgA8AA/esAPR3AAS9UoNQBAAEWwAEvWS6gxKIqAMAAWhM9HcABL4Og1AEAATUAAAABAGADwABXAgEWwAEviC6gw6IpIxzAAS+hhQDAD6kHSAEAASsAAGrAAS+uYAPAAFnTwADClYUAwA+pBwFgA8AA/VEAwABaEz0XwAEvuS6gw4PAAS/UwA+oVaIpPRfAAS/eLqDEhMABL/7AD6iFoio9HcABMBOg1AEAARbAATAYLqDBoigAwABaEz0XwAEwLi6gwSMhHMABMFkcwAEwTITAATBCwA+ohYN3AQABasABME5gA8AA/AUhAMAA/B1IAQABkwDAAP0oasABMHlgA67twADAyGrAATCcYAOu7cAAwIgBYAOu7aIoBqKVVMABMKnAATC6wAE2awAAogQBasABMKpgA8AA/VECAAABA8ABMNHAATZrAAAAAgICwAEw1gAAAIDuYAPAAPwFAMABMOMAAACdD2ADnrEAAFwBPgI9HMABMPMuoPYBAAEnogUAoy1JwAExGxzAATElgMABMR/AD6olSAEAAZQAwAD9KD4JTsABMTrAATE/AACD7mADwAD9UQEcwAExQS6g1wAAAADAAFoWPRfAATFOLqDBJsABMU4BHMABMWAuoNcAAAAAwABaFmADru2iKD0XwAExbS6gwybAATFtARzAATGILqDXAAAAAMAAWhZgA8AAVwKiKT0XwAExlS6gxCbAATGVARzAATG1LqDXAAAAAMAAWhZgA8AA/AWiKk7AATHTwAEx3wAAhGNdA8AA/KkBYAOErgEmwAEx0wEcwAEx4S6g1wAAAADAAFoWXQPAAPypAWADhK5JwAEx7iXAATH3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AAAAAQPAApLfwAKUdwAAAAEBAcACkwEAAACjl10DwAD8qQFgA8AAVuYAAF0DwAD8qQFgA4lPAT4FScACkx0cwAKTNoDAApMhwBC2l0gBAAErAMAA/V5KwAKTPwErP07AApNkwAKTcwAAhL5dA8AA/KkBYAOJTwEewAKTecAA/K4DAWADiU8CFsACk7KAwAKTncAQtpdhwAD82CsBhV4pTsACk+HAApPjAABiYAPAAPwFAZNGwAKT7MAClCbAApQFAAAAhCFgA8AAVuYAgMAClBDAELaXPgE9HMAClDyBwAKULsAQtuOAvwIAAjUAAAABAGADwAD8BQGCwAKUPcAQtyQ1AAAAAQBgA8AA/AUBisAClD3AELckHMAClD6EAMAQt3BkAQABlADAAP0qhADAELdwFsAClEyDwAKURMAQt0CCRcAAVvEAwAD8uUrAApReAYHAApRlwBC24wajFVTAApR8wAKUjcAClWYAAKOYAWrAApR9YAPAAP1RAgAAAQPAApSjwAKVZgAAAAICAsAClKoAAACSVGADnrEAwAKUuQAAACJgA5FOAABcAT4CTsAClNLAApTcAACFUWADh2QBJsAClNIBHMAClN4uoNcAAAAAwABaFmADh2Q9HMAClOkuoNQBAAEfwAKU8odzAQABHMAClQYuoSEBAAEcwAKVKi6g3AMAA4HAApU3wBC4HxbAApVKgsAClUDAELgyhFOCWWrAApVWYAPAAPwFFQCjFgCjNgAAojYGoxZUwAKVa8AClYLAApdxAACg3AFqwAKVbGADwAD9UQIAAAEDwAKVjsACl3EAAAAFAwPAApWXAAAAImADkU4AwAKVpAAAAIdUYAPAAPwFAMAClbQAAABhYAPAAPwFAALAApXYAAAAglNdA8AA/KkBYAORbAFqAGADwAD9DnnAApXmAAAAojRgA8AA+j8BasAClfdgA8AA+j8AYAOErgE+A0nAApYFIYTAApYKwBC5OD4BPRzAApYjLp51BQADgMACli7AELjtgcACljfAELj6gsAClkPAELkKAp8oKYJTg8AClnDAELkaoyo/TsAClovAApaQAACBsGADwAD96wEcwAKWuRbAApaoFsAClqEWwAKWmhbAApaSLoRDog6VG6jugkWpz4JTp3eH+QIAAhzAApbIgMAClsDAELjtglsDAAMWwAKW1S6ArKIYgcACltrAELj6gsAClubAELkKAJFVasAClvhgA5GmgaMAjBdKwAKXBAEcwAKXCy6i3AIAAjXAApcwAAABAGADhLYBH8AClzCEwAEAAYXAApdCwBC5pgA1AAAAAQBbARfAApdJhsACl0fAELo6hFOBwAKXVsAQuPqCWYYAwBC6OoHAApdiwBC4+gCjNQajF1TAApd2wAKXjcACmbYAAKEDAWrAApd3YAPAAP1RAgAAAQPAApeawAKZtgAAAAQDA8ACl6YAAACCa2ADhK4AwAKXugAAACJgA5FOAMACl8cAAABhYAPAAPwFAAHAApfrAAAAglNdA8AA/KkBYAORbAFqAGADwAD9DnlgA4SuAT4DTsACl//AApgKAACHVGADwAD8BQEcwAKYExbAApgMLqCvog2YyQEAAYDAApgewBC6wwC0sE7AApg4wAKYQQAAh7JgA5GmARbAAphQFsACmEuBwAKYQ8AQutGCk5FQh7KRSUnAApheIhzAAphrhcACmGLAELtISAEAAWrAAph3YAORpoGjAMAA/V4BIhzAApiRhcACmIjAELtISAEAAWrAApidYAORpoijAMAA/V4AIRbAApi0LoJMohs+AUrAApjIARzAApjPLqDvAwACgMACmO/AELrDHMACmQOBwAKY+8AQutGCWwMAAxbAApkQLoCsohiEwAKZFcAQuxSCwAKZIcAQut4AkVUBglODwAKZPcAQuu6jGD4CPRzAAplaLp51BAADgcACmWXAELrRhMACmW7AELsUgsACmXrAELreAYJTg8ACmYvAELruoypKwAKZmwGAwAKZosAQusMGoxhUwAKZu8ACmdLAApyFAACg7wFqwAKZvGADwAD9UQIAAAEDwAKZ5sACnIUAAAADAgLAApnyAAAAgmtgA4SuAMACmg0AAAAiYAORbAABwAKaMgAAAIJTXQPAAPypAWADkWwBagBgA8AA/Q55YAOErgE+A07AAprcwAKa4wAAg1xgA8AA/AUBHMACmuwWwAKa5S6gr6INmMkBAAGAwAKa98AQvKEAtLBJwAKbCBzAApsTg8ACmwzAELzjSAEAARzAApsWlIHEAAAAAMAA/CgAwAD9KD4BPYvAApsiwBC84xbAApszgcACmyvAELyvh1SRbz9KwAKbSQEfwAKbVIdBAgACNcACm2UAAAEAYAOIUwEfwAKbZYh3AgABHMACm48uoSEBAAEcwAKbqi6g3AQAAxbAApvQgcACm8jAELyviLeRcRbAApvngcACm9/AELyvh1SRbxbAApv7gcACm/PAELyvYZFwAYJTgsACnBzAELy9oxYAozYBgpBqwAKcP2ADiOeElzUAAAABAFsBF8ACnFmEwAKcV8AQvXKEU4PAApxmwBC844JZhADAEL1ygMACnHbAELyhAAajGVTAApyKwAKclcACoB0AAKN2AAAAAQPAApyqwAKgHQAAAAEBAcACnK8AAACHVGADwAD8BQAAYAOErgE+Az0cwAKcwS6edQMAA2rAApzSYAORWcAAiM6AwAKc8MAQvk1qwAKc/GADwAD8BRUAoypOwAKd4sACnesAAIRbYAOKZgEewAKd7Z0UAgACFsACngkugKyiGIDAAp4OwBC+TQBKwAKeIAE1wAKeLgAAAQBgA4SuARzAAp4uFsACnicuoK+iDaGhAgACKxzAAp5VLqFPAwACFsACnpEWwAKehxbAAp6AFsACnnguhEOiDpUbqO6HZ6nEnGKcxBzAAp7LFsACnsQuoK+iDVsCAAIxwAKe4WADhK4CNcACnvgAAAEAYAOErgEcwAKe+BbAAp7xLqCvog2hygIAAiTAAp8gATUAAAABAGADwAD+bAE1AAAAAQBgA4pmAYHAAp8JwBC+lyMcwAKfE4IAwBC/ckgBAAErAAArFsACnxOCAMAQv3KBu4poAWADwAD+bCMcwAKfGIIAwBC/ZUgBAAErAAAWwAKfGy6ArKIYggDAEL9lAWADwAD+bCsAtKs1AAAAAQBbARfAAp86gsACnzjAEL89hFOAwAKfR8AQvk2CWYIAwBC/PTXAAp9oAAABAGADhK4BHMACn2gWwAKfYS6gr6INodoCAAI1AAAAAQBgA8AA/AUBNQAAAAEAYAOKZgGBwAKfc8AQvpcjHMACn32CAMAQwDZIAQABKwAAKxbAAp99ggDAEMA2gfqKaQFgA8AA/AUjHMACn4KCAMAQwClIAQABKwAAk4IAwBDAKQFgA8AA/AUrALSlNQAAAAEAWwEXwAKfoILAAp+ewBDAB4RTgMACn63AEL5NglmCAMAQwAcmwAKfyAFqwAKfyFt5YAOesQC0nAGHVIDAAp/twBC+TaLRALTSNQAAAAEAWwEXwAKgAoLAAqAAwBC+zYRTgMACoA/AEL5NglmCAMAQvs0GoxpUwAKgIsACoC3AAqNmAAChSwAAAAEDwAKgUcACo2YAAAADAgPAAqBhAAAAImADkU4AwAKgcQAAAIZ6YAPAAP3rAMACoIcAAACHVGADwAD8BQFqwAKglGADwAD8BYGeAGADhK4BPgU9HMACoJ8uoaIDAAOAwAKgtsAQwTaCwAKgv8AQwVMWwAKg1YHAAqDLwBDBQ2HAAP3vAKMrTsACoTLAAqE+AACY22ADwABU5QEcwAKhVxbAAqFQFsACoUguhEOiDpUbqO6fMgAAAACgSE7AAqGMwAKhlwAAoUNgA4SuARzAAqGZLqFPAwACJsACocQBFsACocSDwAKhuMAQwa2CRcAAVOxgA4NeNcACodsAAAEAYAOFeAEcwAKh2xbAAqHULqCvog1bAgACMcACofFgA4SuATXAAqIEAAABAGADhK4BHMACogQWwAKh/S6gr6INocoCAAKBwAKiEsAQwUMrALSrNQAAAAEAWwEXwAKiJITAAqIiwBDCR4RTgsACojHAEMFTglmEAMAQwkcmwAKiRwFqwAKiR1t5YAOesQC0nDUAAAABAFsBF8ACol+EwAKiXcAQwhyEU4LAAqJswBDBU4JZhADAEMIcAYdUgsACoozAEMFTotFJwAKinSXAAqKshMACoqHAEMHhYAOthT4BPYzAAqLbwBDB4RzAAqLoLqEhAQABhMACowPAEMHhAKM2P0rAAqMaATXAAqMoAAABAGADhK4BHMACoygWwAKjIS6gr6INoaECAAIrhMACoz7AEMHhALTSNQAAAAEAWwEXwAKjS4XAAqNJwBDDK4RTgsACo1jAEMFTglmFAMAQwysGoxtUwAKja8ACo3XAAqS0AACh4wAAAAEDwAKjisACpLQAAAAFAgLAAqOTAAAAImADkU4AwAKjoAAAAIdUYAPAAPwFAAPAAqPIAAAAglNdA8AA/KkBYAORbAFqAGADwAD9DnnAAqPVAAAAYWADwAD8BQFqAGADwAD9DnnAAqPiAAAAojRgA8AA+j8BasACo/NgA8AA+j8AYAOHZAE+Aj0jHMACpAiDwAKkAcAQw+VIAQABKwDAAP0oi8ACpAHAEMPlasACpAxgA8AA/AUVKwFgA8AA/AVKwAKkGgEfwAKkJaxjAQABHMACpEEuoNwFAAOAwAKkV8AQw6mBwAKkYMAQw7aDwAKkbMAQw+UCglOCwAKkhcAQw8eiNITAAqSfwBDD/aMWAAajHFTAAqS5wAKkw8ACpdoAAKDsAAAAAQPAAqTZwAKl2gAAAAICAsACpOQAAACFUWADh2QAwAKk9wAAACJgA5FOAABgA4dkAT4BSsACpZsBHMACpaIuoeMCAAKBwAKluMAQxNwWwAKly4DAAqXBwBDEzoRTglkAoxsGox1UwAKl38ACpffAAqbyAAChIAFqwAKl4GADwAD9UQIAAAEDwAKmDsACpvIAAAACAQLAAqYaAAAAgmtgA4SuAMACpjEAAACHVGADwAD8BQFqwAKmPmADwAD8BYGeAGADhDYBPgI9F8ACpkkuoLYqohxKwAKmdAE1wAKmfwAAAQBgA6zQAR/AAqZ/rNQBAAEfwAKmpYh3AQABgMACpsLAEMVTAAA1AAAAAQBbARfAAqbXgsACptXAEMWZhFOBwAKm5MAQxWGCWYIAwBDFmQajHlTAAqb3wAKnA8ACqFUAAKOZAAAAAQPAAqcfwAKoVQAAAAQDBMACpzMAAACCRWADg6kAwAKnTQAAAFtgA6vpAMACp2MAAACCa2ADhK4AwAKnegAAAIdUYAPAAPwFAWrAAqeHYAPAAPwFgZ4AYAOENgE+Aj0XwAKnki6gtiqiHErAAqe9ATXAAqfIAAABAGADrIkBH8ACp8iskAMAA4DAAqfxwBDGFYHAAqf5wBDGIx/AAqgIiHcBAAGCwAKoJcAQxjAAADUAAAABAFsBF8ACqDqEwAKoOMAQxnaEU4PAAqhHwBDGPoJZhADAEMZ2BqMfVMACqFrAAqhmwAKqTwAAo5oAAAABA8ACqIDAAqpPAAAABQUFwAKohwAAAISUYAODfADAAqiZAAAAgJZgA4SuAMACqK0AAACAvWADwAD96wDAAqi3AAAAg1xgA8AA/AUAwAKowwAAAKObYAPAAPwFAABgA4Q2AT4BSsACqOQBNcACqO8AAAEAYAOs1QEfwAKo76zeAwADgMACqRbAEMcEgcACqSXAEMcSH8ACqTiIdwEAARzAAqlVLqEhAQABHMACqX0uoNwDAAMcwAKp5mrAAqmhXQORZQFhAwFgA8AA/etgA5FOv16ICwEAAYLAAqn0wBDHIACRaYPAAqoLwBDHMGrAAqojYAPAAPwFFQCjFgCjNgAANQAAAAEAWwEXwAKqOIXAAqo2wBDHX4RTg8ACqkXAEMcwglmFAMAQx18GoyBUwAKsh8ACrJ/AAroJAAChIgFqwAKsiGADwAD9UQIAAAEDwAKstMACugkAAAAGBQXAAqy6AAAAhI1gA8AA+j8AwAKszgAAAIC9YAPAAP3rAMACrN4AAACjnGADwAD8BQDAAqzzAAAAo51gA8AA/AUAwAKtEAAAAIJrYAOErgABwAKtLAAAAKEjYAOIuAFqAGADwAD9DnlgA4Q2AT4CTsACrUvAAq1TAACEIWADwABU5QE1AAAAAQBgA8AAVOUBHMACrXUWwAKtcBbAAq1qFsACrV0uoLCiEJ7NwABUiJ7OqGJLAQABgcACrXbAEMhgAMAA/O4jHMACrXyGAMAQyNJIAQABKwAAHMACrZ4WwAKtmRbAAq2TFsACrYwWwAKtfy6gsKIQnlfAAFSYns3AAFSIns6oYksBAAGBwAKtn8AQyGAAwAD87oYAwBDI0gFgA8AAVOVJwAKtqiEcwAKtvDUAAAABAGADwABU5QGGwAKtrsAQyL4jHMACrbeHAMAQyX9IAQABKwAAKxbAAq23hwDAEMl/g7DAAFTnAWADwABU5UgBAAErAMAA/V4+AUrAAq35ATXAAq4EAAABAGADhHEBH8ACrgSEeQEAATXAAq4kAAABAGADiFMBH8ACriSIdwEAATXAAq5QAAABAGADhK4BHMACrlAuoSEBAAEcwAKuay6g3AMAAxzAAq6yasACrpFdA5FlAWEDAWADwAD962ADkU6puIgLAQABgcACrsDAEMhgAJFpgsACrtnAEMhwFsACrwGBwAKu/MAQyGBhwAD97wCjFgCjNjUAAAABAFsBF8ACrxyHwAKvGsAQygOEU4LAAq8pwBDIcIJZhwDAEMoDADUAAAABAFsBF8ACr0iHwAKvRsAQyeuEU4LAAq9VwBDIcIJZhwDAEMnrADUAAAABAFsBF8ACr3CHwAKvbsAQydOEU4LAAq99wBDIcIJZhwDAEMnTScACr5kiJcACr6WGwAKvncAQyL5gA8AAVSoAFsACr8AUwAKvuMAQyL4GAWADwABVKoUCwABWMj4EPSMcwAKv7BbAAq/aLp7PoitIAQABKwDAAP1eF8ACr9ouns8ywAKv/WADwAD962ADwAD8BQCiKysBXQPAAPzaAmADwAD962ADwAD8BUnAArAHHMACsB0WwAKwCy6ez6Irh0cBAAGBwAKwKcAQyGAAwAD87T4BSsACsDoBHMACsEEuo5oFAAUWwAKwZBTAArBcwBDIvgYBYAPAAFUqhJTAAFUuhMACsGvAEMiQgcACsHfAEMhgg8ACsInAEMiAHMACsKwWwAKwmy6ez6IrSwEAAYHAArCtwBDIYADAAPzuAKMfPz0cwAKw1BbAArDDLp7PoiuAvwIAAoHAArDVwBDIYIPAArDdwBDIgADAAPzvScACsPUiFsACsQEUwAKw+cAQyL4GAWADwABVKoQbwABWaAAWwAKxFBTAArEMwBDIvgYBYAPAAFUqo57AAFZrPgU9HMACsS4unnUEAAMcwAKxjWrAArFMXQORZQFhAwFgA8AA/etgA5FOv16ICwEAAYHAArGbwBDIYACRaYPAArGuwBDIgGrAArHMYAPAAPwFFQGCUzHAArHrYAORbAEcwAKycBzAArJJasACsgFdA5FlAWEDAWADwAD962ADkU6/t4gLAQABgcACslfAEMhgAJFpglsDAAMWwAKyfS6ArKIYFsACsooUwAKygsAQyL4GAWADwABVKodUwABWYBbAArKbgcACspbAEMhgYcAA/e8AkVWjKk7AArLHwAKy0wAAmNtgA8AAVOUBHMACsvAWwAKy6RbAArLhLoRDog6VG6junzQAAAAAoEpOwAKzKcACszQAAKFDYAOErgEcwAKzNi6hTwMAAibAArNlARbAArNlh8ACs1nAEM1RgkXAAFTsYAODXjXAArOAAAABAGADhXgBHMACs4AWwAKzeS6gr6INWwIAAjHAArOWYAOErgE1wAKzrQAAAQBgA4SuARzAArOtFsACs6YuoK+iDaHKAgACgcACs7vAEMhgKwC0qzUAAAABAFsBF8ACs8gUwAKzxsAQzesIAIRTg8ACs9XAEMiAglkUAMAQzesIACbAArP1AWrAArP1W3lgA56xALScNQAAAAEAWwEXwAK0ERTAArQPwBDNwAgAhFODwAK0HsAQyICCWRQAwBDNwAgAAYdUg8ACtEjAEMiAotFJwAK0YyXAArRyFMACtGfAEM2FCABgA62FPgE9FcACtKXAEM2FCBzAArSyLqEhAQABFMACtM3AEM2FCAAAozY/SsACtOwBNcACtPcAAAEAYAOs1QEfwAK096zeAwADFsACtSoUwAK1IsAQyL4GAWADwABVKoSUwABVLoTAArU9wBDIkB/AArVZiHcB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6Y1gA8AA/VECYAPAAFYtAASjVlTAAunNwALp1wmHVAFqwALpuGADwAD9UQJgA8AA/AUAAQWjZlTAAuncwALp3MAC6jEAAAADwALp5sAC6jEAAAAEBATAAunzAAAEgmdgA696AMAC6f4AAASgvGADwAD8BQDAAuoZAAAEhFJgA8AAVi0AwALqJgAABIdUYAPAAPwFAABgA6NQAT8FCAGjU4AAwBD9KggBo1SBAMAQ/TgIAaNVggDAEP1ICAGjVoMAwBD9WAkBwALp3MAAVQgAAAAADAajWFTAAuo2wALqSsAC6mMBAIRhAWrAAuo3YAPAAP1RAgAAAQPAAupSwALqYwAAAAAAAABgA8AA/mwBSsAC6lUBFsAC6lwWwALqVS6EUqNVhGHAAFZhBqNZVMAC6mjAAupxwALqngEAo3wAAAABA8AC6n/AAuqeAAAAAAAAAGADwAD6PwFKwALqggEcwALqhxbAAuqCLoJno1NIAQABasAC6plgA696wADESgDAAP1eBqNaVMAC6qPAAuqswALq3wEAo4gAAAABA8AC6r3AAurfAAAAAAAAAGADwAD6PwFKwALqwAEcwALqxRbAAurALoJno1NIAQABasAC6tdgA696wADEWwDAAP1eBqNbVMAC6uTAAurtwALrGAEAo4YAAAABA8AC6vrAAusYAAAAAAAAAGADwAD6PwFKwALq/QEcwALrAhbAAur9LoJno1NIAQABasAC6xRgA696wADEbADAAP1eBqNcVMAC6x3AAusmwALrQgEAoi8AAAABA8AC6y/AAutCAAAAAAAAAGADwAD6PwFKwALrMgEWwALrOBbAAusyLqDro1KDssAA/IwGo19UwALrR8AC60zAAuujAACjgAAAAAEDwALrVMAC66MAAAABAQHAAutfAAAAhVFgA4dkAABcAT4CQBbAAut3LqN8o1nAAut3wALrhAA9HMAC65EWwALriy6g66NSVgEAAYDAAuuVwBD/fADAAPy6BqNgVMAC66jAAuutwALsCgAAo4oAAAABA8AC67jAAuwKAAAAAQEBwALrwwAAAIVRYAOHZAAAXAE+AkAWwALr2y6jiKNawALr28AC6+sAPRzAAuv4FsAC6/IuoOujUlYBAAGAwALr/MAQ/+wAwAD8ugajYVTAAuwPwALsFMAC7GkAAKOHAAAAAQPAAuwbwALsaQAA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FKE6wBEisR4AAaP6FKFewBEqOCEAo75OoX+hkwAAo/tgA8AA+j8BKkahoqHVobYAAACEIWADwABV6QAUocHAESo4IQA+BD0cogMWofcaoe+MEIbajAmEWQEAARaiEhSiCsARKrUkAIRhwABWYQDAAPz3TqI0okAAAKP8YAPAAFXpARyibRaiZBaiXRaiTi6j2aOelRufuZ54oC6EWQEAARaifBSidMARKrUkAICswABV+wDAAPz3SaKKIRyimhSijsARKvslAEgBAAErAMAA/V4+Aj0Voq/AESqgIyk9NQAAAAEAXQPAAPzaAmADwAD+bGADwABV6QEWotUuo9ujoCMcouMUAMARK2cmAEgBAAErAAArHKLjFADAEStnJgCEWQEAARai8hSi6sARKrUkAICswABV+wDAAPz3AWADwABV6T9Jo04Wo20Wo1Iuo+OjqIOywAD9AD4CTqONo5EAAIiQYAOCiwEWo5sUo5PAESq1JACCRcAAVfo9HKOtLqP9AgACFKPZwBEr4iYAFKPewBEisR4AAKO3P0mkBxSkC8ARKqAjAD4CPRykShakQBakORakKi6j2aOelRufuYbZoDCCQgAAAADAAPzCRqRbpKGkbwAAAIQhYAPAAFXpABakmRakkBakiRakei6j2aOelRufuZ54oC4pwAD8/T4BPRykzRakwxakvBakrS6j2aOelRufuYbZoDBWAQABFqTZFKTRwBEsWCQAgkXAAFX6AMAA/Lo/SaT7FqT/LqPio6c+BU6ljqWgAACj/mADn7UBFqWiLqPZo549F6W6LqPZH6Xbn8IDAAMWpeYuh++jmRSl7sARIrEeABamBxal/xSl/cARILUNAHqMCIJFi68Ao55GphimcQAAAAEAYAPAAFXpABamaRamYBamWRSmR8ARLMokAJUbn7meeKAuKcAA/P0+BE6mMAAAAIRDYAOnngEmphgBFKYwwBEtHSUAYAOnnj0XpoUUpn3AES1LJgCVGxamnRamji6j2aOelRufuaehPRymzRamxRamvhamry6j2aOelRufuZ54oC6AvwIAAham1hSmzsARLUsmAICsp7cUpt3AES1LJgAAwAD870mm8CIcpwcWpwAWpvwUpvTAES1LJgCArKe3gbrAAP5ySAEAASeHbwDAAP36ABynJRanIBanHBSnFMARLUsmAICsp7dOwAD+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TK0BSsAARIEBHMAARIaCwABEgcARyxuCmwAAAAC4SACkFwGlKRbAAES3gsAARLLAEcsblia4Rr1HAKQXALWyAL1GAKQXBqR7WcAARO/AAET0wABICgAApQQAAAABA8AARQDAAEgKAAAABAMDwABFFAAAAKT4YAO69QDAAEUxAAAApLtgA704AMAARVAAAACCVmADvOgAAcAARWgAAAClBWEDAWADvThcAWoAYAPAAP0OeVwBPgE9HMAARZcWwABFji6Wg6RRloQCAWADwAD9DgInpQQ0wABFtgPAAEW2wABIBQAAAAAAAABgA8AA/Q4BPgc9HMAARcqBwABFwcARzLqlKgMAAxbAAEXaLqSzpEeCwABF9MARzMgcwABGNhbAAEYdgMAARgrAEcyshtm6+YCrAQFgA8AA/mwBNMAARjoDwABGOsAARmkAAAABAQHAAEZJAAAAhENgA7yyAABgA8AA/mwBSsAARlUBFsAARl2EwABGVcARzY+lK7y0AMAA/HIAvUQ9HMAARnwWwABGcy6CzqRWpSwAAAAApM89HMAARpAupSUCAAGBwABGm8ARzLoBpQWDwABGscARzNekej0XwABGzYHAAEbEwBHMuqUtKb07PRzAAEbygcAARunAEcy6gogAAAAAvUU9HMAAR20WwABHXi6ks6RHpS4BAAEWwABHg4HAAEd6wBHMuqUvvUAAwABNDkAiFsAAR5wupMSkXAEcwABHxIHAAEe7wBHMuqUwAQABgMAAR+rAEcysAL1IwABHnMAAR/0AAKQXBqR8WcAASLPAAEizwABI9wAApQkAAAABA8AASL3AAEj3AAAAAQEBwABIxwAAAKS7YAO9OAAAWwE+AT0cwABI4IDAAEjXwBHOtqUxAAAAAL1JBqR9WcAASPzAAEkBwABJ0wAApQYAAAABA8AASRfAAEnTAAAAAQEBwABJIQAAAKS7YAO9OAAAXAE+AkAcwABJPhbAAEk4LqTDpFtIAQABasAASUFgA8AA/AUVAMAA/SjAAEk4wABJUAEkwABJbAInpTIWwABJZi6kw6RbPRzAAEl8FsAASXMugs6kVqUzAwADJ6U0FsAASboWwABJqIDAAEmfwBHPB6U1vUFhwAD8iielNgCk0AakflnAAEnYwABJ3cAASmkAAKUSAAAAAQPAAEnwwABKaQAAAAEBAcAASfoAAACku2ADvTgAAFwBPgE9HMAAShMWwABKCi6CzqRWpTMDAAMnpTcWwABKURbAAEo/gMAASjbAEc+8pTW9QWHAAPyKJ6U4AKTQBqR/WcAASm7AAEpzwABK2AAClqgAAAABA8AASoPAAErYAAAAAwMDwABKlgAAACJgA7W3AMAASr0AAACWqV0DwAD8qQFgA7W3AMAAStMAAACCZ2ADk34AAFwABqSAWcAASt3AAEriwABLYwAAlq8AAAABA8AASvfAAEtjAAAAAwMDwABK/wAAACJgA8AA/esAwABLCAAAAIHsWwDAAEsTAAAAhkVbAABcAT4BPRzAAEsuFsAASyUupM2kZaU5AwADgMAAS0DAEdCKgcAAS0nAEdCZgsAAS1TAEdCkALW0BqSBWcAATGbAAExrwABNuAAApToAAAABA8AATILAAE24AAAAAgICwABMlQAAACJgA7W3AMAATK0AAACCZ2ADk34AAGADwAD6PwE+A0nAAEy5FsAATMUWwABMvS56pEiCyIFCPgFKwABNJgEpP0nAAE09FsAATVIWwABNShbAAE1BLqTNpGV6taWCuIEKPgFKwABNaQEpP0rAAE2AASEcwABNlmrAAE2IXQPAAPypAWADpOrAAMTHgxcBAAEWwABNrxbAAE2ngMAATZ/AEdEOIrW7gmelZQDAAPx2BqSCWcAATb3AAE3CwABOiwAApTsAAAABA8AATdnAAE6LAAAAAwMDwABN7AAAACJgA7W3AMAAThMAAACWqV0DwAD8qQFgA7W3AMAATikAAACCZ2ADk34AAFwBPgFJwABONRzAAE45LqU6AgACgMAATlHAEdHpgsAATlrAEdILAKSBPgE9F8AATmkupMQppFw/BqSDWcAATyrAAE8vwABPcAAApTwAAAABA8AAT0LAAE9wAAAAAAAAAGADwAD6PwE+AUrAAE9LARzAAE9SLqU9AQABFsAAT10upNKkaACkhAakhFnAAFL4wABS/cAAVIAAAKU9AAAAAQPAAFMHwABUgAAAAAIBAcAAUw8AAACWJmADvK0AAcAAUx4AAAClPmADwAD6PwFqwABTMGADwAD6PwBgA8AA+j8BPgVJwABTPhzAAFNKgMAAU0LAEdLISAEAASsAwAD9XkrAAFNTAYHAAFNawBHS1z9OwABTdMAAU38AAJilYAPAAP5sARzAAFOBLqU/pDkB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A6TqwADFLwSlAFqGMYYxBqXeAGADpOoBagBgA6TqwADFiASlAVqGQYZBBqXfAGADpOoBagBgA6TqwADFmgSlAlqGVIZUBqXgAGADpOoBagBgA6TqwADFdASlA1qGbYZtBqXhAGADpOoBagBgA6TqwADGrQSlBFqGmIaYBqXiAGADpOoBagBgA6TqwADGwQSlBVqGsIawBqXjAGADpOoBagBgA6TqwADG1QSlBlqG0IbQBqXkAGADpOoBagBgA6TqwADG6QSlB1qHBIcEBqXlAGADpOoBagBgA6TqwADG/QSlCFqHHYcdBqXmAGADpOoBagBgA6TqwADHEQSlCVqHO4c7BqXnAGADpOoBagBgA6TqwADHJQSlClqHX4dfBqXoAGADpOoBagBgA6TqwADHOQSlC1qHg4eDBqXpAGADpOoBagBgA6TqwADHTQSlDFqHrYetBqXqAGADpOoBagBgA6TqwADHYQSlDVqH0YfRBqXrAGADpOoBagBgA6TqwADHdQSlDlqH9of2BqXsAGADpOoBagBgA6TqwADHhwSlD1qIFogWBqXtAGADpOoBagBgA6TqwADHmwSlEFqILoguBqXuAGADpOoBagBgA6TqwADHrwSlEVqISIhIBqXvAGADpOoBagBgA6TqwADHwQSlElqIb4hvBqXwAGADpOoBagBgA6TqwADH1QSlE1qIj4iPBqXxAGADpOoBagBgA6TqwADH5wSlFFqIrIisBqXyAGADpOoBagBgA6TqwADH+wSlFVqI0IjQBqXzAGADpOoBagBgA6TqwADIDQSlFlqI8YjxBqX0AGADpOoBagBgA6TqwADIIQSlF1qJGIkYBqX1AGADpOoBagBgA6TqwADINQSlGFqJMokyBqX2AGADpOoBagBgA6TqwADISQSlGVqJWIlYBqX3AGADpOoBagBgA6TqwADIXQSlGlqJi4mLBqX4AGADpOoBagBgA6TqwADIbwSlG1qJr4mvBqX5AGADpOoBagBgA6TqwADIgwSlHFqJ0onSBqX6AGADpOoBagBgA6TqwADEogSlHVqJ5onmBqX7AGADpOoBagBgA6TqwADEtgSlHlqKAooCBqX8AGADpOoBagBgA6TqwADIlwSlH1qKHIocBqX9AGADpOoBagBgA6TqwADIqQSlIFqKM4ozBqX+AGADpOoBagBgA6TqwADIvQSlIVqKaYppBqX/AGADpOoBagBgA6TqwADIzwSlIlqKloqWBqYAAGADpOoBagBgA6TqwADI4QSlI1qKw4rDBqYBAGADpOoBagBgA6TqwADI8wSlJFqK64rrBqYCAGADpOoBagBgA6TqwADJBQSlJVqLDYsNBqYDAGADpOoBagBgA6TqwADJFwSlJlqLL4svBqYEAGADpOoBagBgA6TqwADJKQSlJ1qLUYtRBqYFAGADpOoBagBgA6TqwADJOwSlKFqLfot+BqYGAGADpOoBagBgA6TqwADJTQSlKVqLqIuoBqYHAGADpOoBagBgA6TqwADJYQSlKlqL44vjBqYIAGADpOoBagBgA6TqwADJdQSlK1qL/Yv9BqYJAGADpOoBagBgA6TqwADJhwSlLFqMEowSBqYKAGADpOoBagBgA6TqwADE9wSlLVqMOow6BqYLAGADpOoBagBgA6TqwADJmQSlLlqMWYxZBqYMAGADpOoBagBgA6TqwADJrQSlL1qMhIyEBqYNAGADpOoBagBgA6TqwADJvwSlMFqMnIycBqYOAGADpOoBagBgA6TqwADJ0QSlMVqMs4yzBqYPAGADpOoBagBgA6TqwADJ4wSlMlqM0ozSBqYQAGADpOoBagBgA6TqwADJ9wSlM1qM5IzkBqYRAGADpOoBagBgA6TqwADFYgSlNFqM/4z/BqYSAGADpOoBagBgA6TqwADKCQSlNVqNC40LBpCPAGADpOoBagBgA6TqwADKGwSlNlqNJI0kBqYTAGADpOoBagBgA6TqwADKLQSlN1qNSI1IBozOAGADpOoBagBgA6TqwADKPwSlOFqNX41fBqYUAGADpOoBagBgA6TqwADKUQSlOVqNgI2ABqYVAGADpOoBagBgA6TqwADKYwSlOlqNoo2iBqYWAGADpOoBagBgA6TqwADKdQSlO1qNtY21BozkAGADpOoBagBgA6TqwADKhwSlPFqNyY3JBqYXAGADpOoBagBgA6TqwADKmQSlPVqN8Y3xBo7HAGADpOoBagBgA6TqwADKqwSlPlqOBY4FBooVAGADpOoBagBgA6TqwADKvQSlP1qOG44bBpCxAGADpOoBagBgA6TqwADKzwSlQFqOL44vBqYYAGADpOoBagBgA6TqwADK4QSlQVqOVY5VBqYZAGADpOoBagBgA6TqwADK8wSlQlqOe457BpEn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gMAAUNvAEuw/W4RlAKfcAAaoP2zAAFD0wABQ9MAAUYgAAIVLAAAAAQPAAFEJwABRiAAAAAEBAcAAURsAAACD7mADhFMAAFsBPgFKwABRJwEfwABRMoRhAgACFsAAUV2AwABRWMAS7L+FHoRVHMAAUW4unrYBAWADhXgBFsAAUXmAwABRdMAS7L9bhFYAp9wABqhAbMAAUY3AAFGNwABRzgAAhMMAAAABA8AAUZnAAFHOAAAAAQEBwABRogAAAIPuYAOC9AAAWwE+AUrAAFGuARzAAFG1LocLAQABgMAAUcXAEu0/AKgyAAASrUsAEq3ZABKuEQASrkkAEq61ABKwBQASsYIAErHPABKyCwASsnEAErK5ABKzMAASs6sAErQgABK0swAStRoAErWfABK19gAStmsAEra0ABK3GwASt60AErgxABK4pQASuRsAErmRABK56gASum8AErseABK7kwASvCQAEry1ABK9YgASvv4AEr9xABLAGgASwGMAEsC4ABLA8wASwS4AEsGLABLCLAASws0AEsOKABLEAQASxFoAEsSzABLFIgASxWsAEsW0ABLF/QASxkYAEsaBABLHDQASx4QAEsfdABLIUgASyMcAEskCABLJnQASym4AEsrLABLLQgASy7kAEszEABLNfgASzsIAEs+AABLP3QAS0HYAEtDTABLRdgAS0lsAEtLSABLTYQAS1UsAEtXXABLXzQAS2dkAEtwHABLegQAS4PAAEuGWABLkJAAS5TkAEuW6ABLmEQAS5mMAEua1ABLnBwAS51kAEuerABLoGgAS6HcAEujOABLpTwAS6fwAEupHABLqngAS6vUAEutSABLrwQAS7BgAEuyYABLtGAAS7W8AAABpAqhDbMAAUdPAAFHZwABTKgOoIAAAAWABp8wAAAABBahHbMAAUgPAAFIDwABS3gAAAAPAAFITwABS3gAAAAIAAALAAFI5AAAAnrpdA8AA/NoCYAOJT2ADiLgBagBgA8AA/Q55wABSVgAAAKgLYAPAAPo/AWrAAFJpYAPAAPo/d2ADqEMBPwEJAMAAUnioQgIAAAKeuoDAAFKdwBLvXagLgcAAUs3AEu9/AQaoRWzAAFLjwABS+MAAUygAAKgYAWrAAFLkYAPAAP1RAgAAAQPAAFMNwABTKAAAAAEBAcAAUxsAAACD7mADhIMAAGADglIB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Kz89HLWHLp51BQAEarWbYAORWaHpgbW8wBNRCBa1z4S1yMATUVNhwAD97xa11y6EYaj2AYJTMbXxYAORbAEctmoctjRqtf1dA5FlAWEDAWADwAD962ADkU6iDogLAQABFrZVFrZCLqiIqP+AvamgAJFpglsDAAMWtncugKypFha2jxa2fC6oiKj/h1SpoRa2xRa2wBa2rS6oiKj/gL2poGHAAP3vAJFVqThKtt4BhbblwBNRYgapIHC29Lb5uaQAAKikAAAAAQO3ArmkAAAABgYGtyAAAACG210DwAD8qQFgA8AAVkAAtzcAAACArGADwAD96wC3VgAAAKilXQPAAPypAWADwABSFQC3fQAAAISjXQPAAPypAWADtVoAt5QAAACHVGADwAD8BQC3qgAAAKihYAPAAPwFAABcAT4ESbe7IRy3zoK3v8ATU3FIAQABKwDAAP1ePgFBRrffuAy38gAAAJU+YAPAAFIVAIK3/MATU3E+AUm4Fhy4Qxy4Gi6opgEAARa4N4a4MMATU9qop8AAUhgAqSFIAQABFrhNhrhGwBNT2oW6wABSGQDAAP36PgI9ibhkwBNTYxa4cYa4asATU9qEd8AAUhpCuIYAPz9OuK64vgAAqKhgA8AAVekBHLjQFrjALpUbqO6edgMAAhy41S5sAwADFrjiLoCsqRaBuOfAE1NjhbjswBNTpwCpHoS4+MATU5kBnncuoD89HLkphrkZwBNUTaipAwADLoO5O8ATU4aEuUjAE1OZAMAAVgE9HLlhFrlZLqiCqPRWAQABH7lpwABSKQQABC6GuXbAE1RNg7mHwBNThoS5lMATU5kAAMAA/LoGqSFwuam5sLx3AACopgAAAAEDucW8dwAAAAEBAbnNAAAAqKdgA8AA/esAAGADwAD96wE+Bkm6CiEcuhqAug/AE1URgdYBAAFquiVgA8AA/evAAJqcAMAA/f1Kui4BJwA/PYi6PcATVREculWAukrAE1URgL4BAAEWumZqul9gA8AA/evAAJqcYcAA/e8AwAD+AUm6cyEcupQWuoYWun8WungulRuo7oJFqc+VFqd1nNwBAAGAuqfAE1URAJ08Srq0AScAP06607rcAACHc2ADwABV6QEcuvUWuu0WuuYulRuo7p54oC5LAQABHrr6wAD+3wIAAAKBuieHb06AuxTAE1URAMAA/O5JuyccuzSBuyvAE1W6SAEAASsAwAD9Xj4CTrtUu2AAAJwyYAPAAFXpARy7aRa7Yi6VG6junnYCAAIcu3kubAMAAxa7lS6ArKkWHLvAHruewAD+3wIAAAKBuieHb04nh3AjAAAAAMAA/pQcu8yUgcQAAAAAwAD8KACpHhy725SBxAAAAADAAPwoAKA/PYm75sATVbocvBcWvA8WvAiCu/HAE1YWlRvAAFX4nnigLksBAAEevBzAAP7fAgAAAoG6J4dvToC8NsATVREAwAD87j9KvE4BIyEcvF6BvFXAE1W6SAEAASsAwAD9XieWuScAAWADwAD96wapInC8fLyBwABCUQAApDEAAAABA7yKwABCUQAAAAoKCryoAAAAhttdA8AA/KkBYAPAAFZAALy/AAAAgKxgA8AA/esAvN4AAACopV0DwAD8qQFgA8AAUhUAvPsAAACDJGADwAD96wC9GgAAAISjXQPAAPypAWADtVoAvTIAAACaAmADwAD6PwC9RgAAAIdUYAPAAPwFAL1cAAAAqKpgA8AA/AUAvXgAAACooWADwAD8BQC9jQAAAKirYAPAAPwFAABcAT4GSb2gIRy9s4K9pMATVzVIAQABKwDAAP1ePgFBRr3EvfG91wAAAJU+YAPAAFIVAIK94cATVzU+AUm9+xy+KBy9/y6opgEAARa+HBS+FcATV9YKAKinwABSGACpIUgBAAEWvjIUvivAE1fWCgCFusAAUhkAwAD9+j4CPYm+ScATVycWvlYUvk/AE1fWCgCEd8AAUhpCvmsAPz9Ovp6+pgAAhCFgA8AAVekBK06+twAAAIOXYAPAAP5sAE6+zwAAAKisYAPAAP3rAEm/FRy/HYG/GcATVyeB1gEAAWq/KGADwAD968AA3gsAwAD9/T4CTr9Pv1sAAKiuYAPAAP3rARy/YYG/XcATVyeAvgEAARa/gWq/a2ADwAD968AA3gthwAD97wDAAP4BSb+QHL+gFL+UwBNYpA0AgdYBAAEngdkAwAD9/T4DPRW/wcATWGALHL/PLmwDAAMWv+kugKypFhS/7sATWKQNABzAAEAFFL/7wBNXlQgAZAEAARbAAEAdasAAQAdgA8AA/evAAN4LYcAA/e8AwAD9KgCpHj0VwABALsATWGALHMAAQEoWwABAQxbAAEA8LpUbqO6CRanPnxMBAAEUwABAV8ATWGALAACniD0VwABAbcATWG8MHMAAQIYUwABAesATWGALACMAAAAAwAD+lD4CPRXAAECpwBNYYAsewABAu8AA/t8CAAACgbonnxGDGDHAAEDhYAPAAP3rAYHAAEDiwBNXJz0VwABA8cATWG8MgcAAQP7AE1cnPgI9FcAAQR7AE1hgCxzAAEEsLmwDAAMWwABBOS6ArKkWgcAAQT7AE1cnFMAAQUPAE1eVCAAAqR49FcAAQVXAE1hPChzAAEFmFsAAQV8ulRuo7p52AwACFMAAQWvAE1hgCwAUwABBeMATV5UIAAGedy6gPz0cwABBpxbAAEGfLpl3qPNWAQABH8AAQa/AAFI+CgAJLhTAAEG8wBNYTwoAhcAAQcXAE1drg8AAQc/AE1dKhMAAQdfAE1dYgsAAQezAE1c1hsAAQfzAE1d5h8AAQgjAE1eHFMAAQhrAE1ejCQABqK8UwABCQcATWG8MAADAAPy6BqkjcMAAQlbAAEJbwABEjwAAhJ8AAAABA8AAQmLAAESPAAAAAwMDwABCeQAAAIbbXQPAAPypAWADwABWQADAAEKKAAAAgKxgA8AA/esAwABCkwAAAIdUYAPAAPwFAABcAT4ITsAAQqkAAACDl2ADwAD+bABOwABCvgAAAKQ7YAPAAP5sAD2LwABCzsATW0ocwABC3C5sBAADFsAAQukugKypFoHAAELuwBNbJILAAELzwBNbNAGfISmpHj2MwABDEsATW1scwABDHy5sAwADFsAAQycuhGGo9oHAAEMwwBNbJILAAEM1wBNbNACpHj0cwABDTBbAAENGLoSBqPFWAQABJsAAQ1cBHMAAQ1cWwABDUC6VG6junnYEAAKDwABDXMATW0qCwABDacATWzQChGGEwABDhsATW1uedy6gP2ADqOsAwAD8uj0cwABDtBbAAEOoLp7cqPJWAQABgsAAQ7jAE1s0AMAA/LpOwABEJcAARCoAAJnyYAOC2gE1wABEMAAAAQBgA4LaAR/AAEQwguQCAAIxwABESGADhK4AgcAAREzAE1skADUAAAABAFsBF8AARFmFwABEV8ATXGOEU4LAAERmwBNbNIJZhQDAE1xjPRzAAER+FsAARHYuhEOpAoSfAQABhcAARIbAE1xRAIKzBqkkcMAARJTAAESZwABGtQAAqLAAAAABA8AARKLAAEa1AAAABAQEwABEwAAAAIbbXQPAAPypAWADwABWQADAAETRAAAAgL1gA8AA/esAwABE3gAAAICsYAPAAP3rAMAAROcAAACooWADwAD8BQAAXAE+Aj0XwABE+C6oh4HAAEUFwBNdFqj8ScAARQ8hHMAARReCwABFE8ATXSZIAQABKwDAAP36PgQ9F8AARSgunt0cwABFNC5sAwADFsAARUEugKypFoLAAEVGwBNdJoPAAEVLwBNdNgCpHqj9TsAARWHAAEVsAACkO2ADwAD+bAEcwABFbi5sAwADFsAARXYuhGGo9oLAAEV/wBNdJoPAAEWEwBNdNgCpHk7AAEWlwABFrQAAhENgA8AAVekBHMAARbYWwABFry6VG6junnYEAAIWwABFuy6e3aj9g8AARcbAE102AoRhhMAAReTAE120nncuoD9JwABGBxzAAEYYFsAARhIWwABGCy6VG6jugxmgN0gBAAEuAMAA/V4+AT0XwABGlBbAAEaNLpUbqO6DGYXAAEacwBNd8aA3Pz8GqSVwwABGusAARr/AAEtBAACosQAAAAEDwABGyMAAS0EAAAAFBQXAAEbQAAAAqIZgA8AA/esAwABG/AAAAIbbXQPAAPypAWADwABWQADAAEcQAAAAogJgA8AA/AUAwABHJwAAAIKQYAPAAFbAAMAARz0AAACosl0DwAD8qQFgA6mnAABcAT4BRsAAR0/AAEdywABHXgAAAIFUYAOppwCEwABHZsATXvI+CE7AAEd/wABHhwAAhB1gA8AA+j8BIRzAAEefHMAAR5OCwABHicATXtKDdwEAAWrAAEeVYAPAAPwFIQDAAPwdSAEAAZMAwAD9KE7AAEewwABHuAAAhBtgA8AA+j8BIRzAAEfQHMAAR8SCwABHusATXtKDdwEAAWrAAEfGYAPAAPwFg1oAwAD8HUgBAAGTAMAA/ShOwABH4cAASAUAAKizYAPAAPo/ASKGwABIB8ATXy8Bh8AASBLAE193TsAASCcAAACf62ADnrEAScAASDkiFMAASD3AE1/ACAABIhzAAEh0g8AASG/AE17iSAEAASsAwAD9XgAhFsAASIAugkyo+T4BPRXAAEiXwBNf6AkWwABIqYXAAEikwBNfFai0qas/ScAASMkhHMAASNgUwABIzcATX+gJAEgBAAErAMAA/V4+A07AAElVwABJXgAAnQ9gA56xARbAAEllhcAASWDAE18VqLWprD0cwABJghTAAEl5wBNgcAoAnXsBAAEewABJjp63AQABFsAASaYWwABJoRTAAEmYwBNgcAoAg7CezINcns0AAJ7bPRzAAEniHsAASbyetwEAARbAAEnaFsAASdEUwABJxsATX+gJAJz9ns+DXJ7NAJ17AQABFMAASerAE1/oCQAAnts/TsAASgrAAEoZAACjnmADwAD6PwEhHMAASjEWwABKIIXAAEobwBNfFai0qatIAQABKwDAAP1ePRzAAEpALoSTCgAJgMAASknAE16rgcAASl/AE167gsAASmnAE17Sg8AASnTAE17iFsAASn+FwABKesATXxWAvampFsAASpSFwABKj8ATXxWHVKmqFsAASqWFwABKoMATXxWoVamtFMAASrTAE1/oCQAUwABKwMATYRcKAAGotiMUwABK/8ATX8AIABTAAEslwBNf6AkAKwFgA56xqUEGqSZwwABLRsAAS1LAAFiVAACn9AAAAAEDwABLXMAAWJUAAAADAwPAAEtkAAAAgL1gA8AA/esAwABLdgAAAJ6lYAPAAFTlAMAAS4cAAACHVGADwAD8BQAAYAPAAFTlAT4KScAATEIcwABMS4DAAExGwBNiEUgBAAErAMAA/fo+AT0ewABMXJ0bBAAEJ4Q8J4C9gsAATHbAE2IxFsAATIIuhGGo9gA/ScAATJYcwABMrRbAAEyaLqiIqP9IAQABFsAATLAuqIGo7wDAAP1ePgFJwABMzCXAAEzcgcAATNDAE2IhYAPAAFYtPgE9F8AATQQUwABM+MATYiEBAWADwABWLYRSLsAAVi9JwABNICXAAE0wgcAATSTAE2IhYAPAAFbWPgE9F8AATWEUwABNVcATYiEBAWADwABW1oRSLsAAVttJwABNfSXAAE2NgcAATYHAE2IhYAPAAFaYPgFAHMAATcMWwABNvBTAAE2wwBNiIQEBYAPAAFaYhFLAAFacSAEAAS4AwAD9XsAATbDAAE3KAD4BSsAATeQBJsAATeQBHsAATeudGwQABCTAAE4eARbAAE4RgcAATgXAE2IhhYbAAP1lJ6f0gsAATi7AE2IxFsAATjouhGGo9gBgA8AAVOU+AUAcwABOgBbAAE55FsAATmYuqIio/4RSqY1IAQABFsAAToMuqIGo7wDAAP1ewABOZsAATpUATsAATqfAAE61AACHgGAD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ABTAAKFdwBOcCQkAFMAAoWnAE5wZCgCEwAChdMATm6sUwAChi8ATnnESAAGib4XAAKG6wBObu6k/h8AAodLAE5viKxTAAKJWwBOd0RAAFMAAomrAE547EQAuHsAAopbAAPyvAQFgA8AAVNYBFsAAor0uqFKo8AAUwACi3cATm/kIABTAAKLywBOcCQkAFMAAowbAE5wZCgABhOUUwACjLcATnnESAD01AAAAAQBgA6s7ARbAAKNUFsAAo00WwACjRi6VG6jugkWpz55sn8sjHMAAo3AUAMAToHwUAEgBAAErAAArHMAAo3AUAMAToHwUAKi7AgACFsAAo4wUwACjiMATn3UTAIJFwABUloHAAKOUwBObdACrQAFcPRzAAKPGFsAAo7AuqFKo8IJCAAAAAMAA/MJOwACj9MAApAgAAKjhXQPAAPzaAmADwAD962ADwABW5gEcwACkEi6o4gIAAoXAAKQlwBObuxTAAKQ0wBOfdRMAAKk9T8AApD7AAKRDAAABqONhAwJgA8AA/etgA8AAVi1cAAPAAKRMwACk2AAAAAICAsAApFQAAACAvWADwAD96wDAAKRoAAAAgmZgA8AAVi0AAFwBPgFDwACkeCEcwACkhhTAAKR/wBOhiRcASAEAASsAwAD9Xj4CPRfAAKSgFMAApJnAE6GJFwCEUhTAAKSpwBOfdRMAwABWLz0VwACktsAToYkXJsAApLYBFsAApMYUwACkv8AToYkXAIOwwABU52ADwABWLU/AAKTfwACk5AAAAajkYQMCYAPAAP3rYAPAAFYtXAADwACk/sAApwEAAAACAgLAAKUGAAAAgL1gA8AA/esAwAClGgAAAIJmYAPAAFYtAABcAT4CScAApSohHMAApUIUwAClLsAToQkUAEgBAAErAMAA/V4+Ak7AAKVpwAClbAAAqOVgA8AAVuYBHMAApYEUwAClbsAToQkUAEsBAAEUwAClgsAToj0XAADAAPzuScAApZEhHMAApZgUwACllcATooUZAEgBAAErAMAAVvw+AT0cwAClsRTAAKWtwBOfdRMAnnUEAAMcwACl3mrAAKW8XQORZQFhAwFgA8AA/etgA5FOlh2ICwEAARTAAKXswBOiPRcAAJFpFsAApggUwACmAcATok0YAIdUwABWYBbAAKYZFMAAphTAE6I9FwBhwAD97wGCUzHAAKY4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AAEDwAEPasABFfAAAAACAgLAAQ9zAAAAhENgA4KLAMABD5YAAACpGl0DwAD9nAFgA6jrAABcAT4FScABD6IhHMABD6yBwAEPp8AT5kNWAQABLgDAAP2pPgFKwAEPvwA/TsABEHLAARB+AACoq2ADwAD8BQGTTsABEIvAARCXAACpG2ADwAD8BQGTQ8ABEKAiHMABELOCwAEQp8AT5oVjAQABFsABEL0WwAEQtS6Zd6jzYcAA/NgAwAD9MgEcwAEQ04PAARDHwBPmmmMBAAEWwAEQ3RbAARDVLqiCqPRhwAD82ADAAP0yQT4BScABEO0iHMABEP2DwAEQ8cAT5pqBbQEAARbAAREIFsABEQAuqIKo9GHAAPzYAMAA/TUBIhzAAREpgsABER3AE+aFYwEAARbAAREzFsABESsumXeo82HAAPzYAMAA/TIAHMABEWsWwAERYBzAARFSFsABEUsumXeo80sBAAGCwAERU8AT5oUAwAD8uIdUwABSNmMBAAEWwAERlBzAARGGFsABEX8uqIKo9EsBAAGDwAERh8AT5poAwAD8uIdUwABSIwDAAP0yPgNOwAERyMABEc8AAISoYAPAAFItARzAARHYFsABEdEumXeo80sBAAE1AAAAAQBgA8AA/AUBgsABEdnAE+aFNQAAAAEAYAPAAPwFAYrAARHZwBPmhRzAARHkhADAE+f+ZAEAAZQAwAD9KoQAwBPn/gDAAPy4ScABEjshHMABElcWwAESRoTAARI/wBPn16ivwABSOEgBAAErAMAA/fo+Aj0cwAESbC6pGQEAARbAARKHhMABEoDAE+fXqK/AAFI4AKlMQsABEqQAP0nAARLBIhbAARLMhMABEsXAE+fXmgLAAFIyACEcwAES+TUAAAABAGADwABWmAEWwAES34TAARLYwBPn16kcwABSMSMcwAES7oUAwBPowEgBAAErAAArFsABEu6FAMAT6MCEusAAVqABYAOCwEgBAAErAMAA/V4+AT0cwAETFoDAARMOwBPmNYSeAQABFsABEzkWwAETK4TAARMkwBPn16kcwABSMYS6wABWoACCsj4BPRzAARNpgMABE2HAE+Y1hJ4BAAE1wAETewAAAQBgA4LAAR/AARN7gtcDAAEWwAETsxbAAROqhMABE6PAE+fXh3PAAFIwgkXAAFX6AoC9FsABE9aEwAETz8AT59eDJMAAUjOEox7AARP5p3EBAAEWwAEUFITAARQNwBPn14SjwABSNAA1AAAAAQBbARfAARQwhcABFC7AE+ljhFMWwAEURITAARQ9wBPn14dUwABSNoJZhQDAE+ljAIKyPgJOwAEUj8ABFJYAAISpYAPAAFIeARzAARSfFsABFJguqIKo9EsBAAE1AAAAAQBgA8AA/AUBg8ABFKDAE+aaNQAAAAEAYAPAAPwFAYvAARSgwBPmmhzAARSrhADAE+oyZAEAAZQAwAD9KoQAwBPqMgDAAPy4PRzAARTAgMABFLjAE+Y1hJ4BAAE1wAEU0gAAAQBgA4LAAR/AARTSgtgCAAEWwAEVCBbAART/hMABFPjAE+oLqR3AAFIhgkXAAFX6AYSjHsABFSmncQEAARbAARVEhMABFT3AE+oLhKPAAFIiADUAAAABAFsBF8ABFV6FwAEVXMAT6pKEUxbAARVyhMABFWvAE+oLh1TAAFIjglmFAMAT6pIAgrJGwAEVksABFbvAARWsAAAAmfJgA6jrABbAARW0LoSBqPE+AT0cwAEVyITAARXDwBPrKqi6AgACgMABFdjAE+Y1gcABFeHAE+ZDAKlNBqlOcMABFfXAARYNwAEk4wAAp/oBasABFfZgA8AA/VECAAABA8ABFijAASTjAAAABgQEwAEWNwAAAIC9YAPAAP3rAMABFkkAAACepWADwABU5QDAARZiAAAAg9ZgA8AAVOUAwAEWbQAAAIdUYAPAAPwFAALAARaFAAAAhK1gA8AA+j8BasABFo9gA8AA+j8AwAEWmwAAAISuYAPAAPo/AWrAARalYAPAAPo/AGADwABU5QE+FUnAARbpHMABFvmBwAEW7cAT67BIAQABgsABFvzAE+vAAMAA/V5KwAEXAwGBwAEXCsAT67A/ScABFxslwAEXK4HAARcfwBPrsGADwABV20rAARdCARTAARdJwBPrsAEBYAPAAFXbP0nAARdaJcABF2SCwAEXXsAT68BgA8AAVdtKwAEXewEUwAEXgsAT68ACAWADwABV2z9JwAEXjSXAARedgcABF5HAE+uwYAOoqD4CTsABF8/AARfVAACBxWADqKgBJsABF88BgcABF9fAE+uwYAOoqD2JwAEX6sAT67AWwAEX/obAARf4wBPs04QhqJ4/ScABGBElwAEYG4LAARgVwBPrwGADqKg+Ak7AARhNwAEYUwAAgcVgA6ioASbAARhNAYLAARhVwBPrwGADqKg9isABGGLAE+vAFsABGHCGwAEYasAT7S6EIaieP07AARiIwAEYkAAAobtgA8AA+j8BKk7AARiiwAEYsAAAqR5gA8AA+j8BKk7AARjJAAAAqR9gA8AAVOUATsABGNwAAACArGADwAD+bABOwAEY6QAAAKkgYAPAAP5sAE7AARj7AAAAqSFgA8AA/mwATsABGREAAACpImADwAD+bABJwAEZIBzAARk2HMABGS8WwAEZKhbAARkkLp7NwABV657OqGJLAQABgMABGTDAE+ugAMAA/O5IAQABgcABGTnAE+uwAMAA/V4+Az2OwAEZTsAT7XApPRXAARlkwBPtmgiBwAEZcMAT67A9FcABGYPAE+3eDB7AARmPqOkBAAGCwAEZocAT68AAPgM9FcABGbzAE+2rCR7AARnCqOkBAAGBwAEZ1MAT67AAPRXAARnowBPtvAoewAEZ86jpAQABgsABGgXAE+vAAEnAARoTJcABGiOBwAEaF8AT67BgA8AAUX0+Az2PwAEaRMAT7YUpPRXAARpiwBPtmggUwAEabsAT67ABAWADwABRfT0VwAEag8AT7c0LFMABGpLAE+28CgBJwAEaqSXAARqzgsABGq3AE+vAYAPAAFF9PgM9j8ABGtTAE+2FKT0VwAEa8sAT7ZoIFMABGv7AE+vAAgFgA8AAUX09FcABGw3AE+3NCxTAARscwBPtqwkAScABGy4iHMABG0M1AAAAAQBgA8AA/mwBFMABGzLAE+28CgAjHMABGzwUAMAT73INAEgBAAErAAArFsABGzwUAMAT73INAIG6wAD+cgFgA8AA/etIAQABJ4dvAMAA/foAIRzAARtcNQAAAAEAYAPAAP5sARTAARtQwBPtqwkAIxzAARtVFADAE+/NDQBIAQABKwAAKxbAARtVFADAE+/NDQCBusAA/nIBYAPAAP3rSAEAASeHbwDAAP36PgM9FcABG3HAE+2aCIHAARt9wBPrsD0VwAEbksAT7c0LFMABG6HAE+2rCQA9FcABG67AE+3eDBTAARu6wBPtvAoAScABG9EiHMABG+E1AAAAAQBgA8AA/mwBFMABG9XAE+2rCQAjHMABG9oUAMAT8G4NAEgBAAErAAArFsABG9oUAMAT8G4NAIG6wAD+cgFg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AoDAASSCwBProBzAASSQFMABJIjAE/ZGDgCCWwMAAxbAASSdLoRhqPaDwAEkpsAT69AWwAEkt4DAASSywBProGHAAP3vAJFVAaI0KgapT3DAASTowAEk7MABJhYAAJ6dAAAAAQPAASUGwAEmFgAAAAAAAABgA8AA/AUBPgNOwAElE8ABJRkAAKRmYAPAAPwFAZNGwAElIsABJT7AASUrAAAAhKhgA8AAUi0AFsABJTUumXeo8z4BScABJUYWwAElUYHAASVKwBP4U5oCwABSMj4DTsABJW/AASV3AACaI2ADg+oBJsABJW8BFsABJaEWwAEljhbAASWAgcABJXnAE/hTqRzAAFIxqSTAAFahmiPAAFGCYAOD6knAASWyIRzAASW+gsABJbbAE/iLSAEAASsAwAD9Xj0cwAElzxbAASXHLoRDqQKEkAEAAYLAASXZwBP4iwCCqz89iMABJevAE/g2HMABJfCAwAEl68AT+DZkAQABlADAAP0qP0rAASYGAYDAASYNwBP4NgapUHDAASYbwAEmH8ABLakAAKklAAAAAQPAASYvwAEtqQAAAAAAAABgA8AA/AUBPgVOwAEmPMABJkIAAIDuYAPAAPwFAZNOwAEmWMABJl8AAJ65YAOnzAEfwAEmZahCAAAAAEXAASZ5AcABJoLAASaEAABiYAPAAPwFAZMBHMABJouCwAEmicAT+atjAQABFsABJp8WwAEmjS6ojqkGYcAA/NgAwAD9MgGKwAEmp8AT+ascwAEmqYLAASanwBP5q2QBAAGVAMAA/So+CU7AASbBwAEmywAAqSZgA4PqARzAASbeFsABJs0uqI6pBksBAAGCwAEm38AT+asAwAD8uE7AASbzwAEm+gAAnldgA4PqARzAAScNFsABJvwuqI6pBksBAAEcwAEnEILAAScOwBP5q2QBAAGUAMAA/SoAwAD8uE7AASchwAEnMQAAqSdgA8AA/AUBFsABJ1gWwAEnQxbAASc6hMABJzPAE/pCgmqD74TAhIphwAD82EnAASdmIRzAASeZFsABJ5IWwAEnfRbAASd0g8ABJ2rAE/oPgmqD74TAhIphwAD82EgBAAGFwAEnnMAT+oQAwAD9KD4BSsABJ7cBJsABJ7cBHsABJ76dHAQABCTAASfoAYXAASfYwBP6hCTAASgpARbAASghFsABKAwWwAEoA4PA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FAVeCgBhwAD82ICXAQABkwDAAP00PgI9j8ABNyrAFASVKT0cwAE3Ui6edQQABGrAATddYAORWcAAQikWwAE3iRTAATeAwBQFKAkAh1TAAFZgFsABN7MWwAE3rhTAATelwBQFKAkAgL3AAFbaYcAA/e8WwAE3xBTAATe7wBQFKAkAhGHAAFZhAKk4P0nAATftIYfAATfywBQElT4CTsABOCXAATg2AACjkl0DwAD8qQFgA8AAVsABHsABOEa08wQABIXAAThWwBQEPoDAAThhwBQDtYHAAThuwBQDxYLAATh6wBQD1QBFwAE4kgHAATibwAE4nQAAYmADwAD8BQGTARzAATikFMABOKLAFAa0CQBjAQABFsABOLCFwAE4psAUBD5hwAD82ADAAP0yARXAATi6wBQGtAkcwAE4uBTAATi6wBQGtAkAZAEAAZQAwAD9Kj4BPRfAATjYHMABONSFwAE4y8AUBD5LAQABFMABONXAFAa0CQAAwAD8uIaYHMABOPYUwAE45sAUBmUIAEsBAAEUwAE498AUBrQJAADAAPy4wABW6T8/ScABOSAihsABOSTAFARVAYfAATkywBQElT4BRcABOYEBwAE5isABOYwAAGJgA8AA/AUBkwEcwAE5kxTAATmRwBQHkAgAYwEAARbAATmfhcABOZXAFAQ+YcAA/NgAwAD9MgEVwAE5qcAUB5AIHMABOacUwAE5qcAUB5AIAGQBAAGUAMAA/So+AT0XwAE5xRzAATnBhcABObjAFAQ+SwEAARTAATnCwBQHkAgAAMAA/LiGmIDAATnTwBQDtcAAVuk/SsABOfkBFsABOgqFwAE6AMAUBD5hwAD82E/AATodwAE6IgAAAakzYQMBXQPAAPypAWADwAD9UVwAA8ABOi7AATuqAAAAAQEBwAE6PAAAAKk0XQPAAPypAWADwAD9UQAAXAE+AUXAATpMAcABOlXAATpXAABiYAPAAPwFAZMBHMABOl6HwAE6XMAUCJljAQABFsABOmeGwAE6YMAUCHdhwAD82ADAAP0yAY/AATpvwBQImRzAATpxh8ABOm/AFAiZZAEAAZYAwAD9Kj4ETsABOpjAATqkAACepWADwABW1gEmwAE6mAEcwAE6rIbAATqmwBQId0sBAAGHwAE6rcAUCJkAwAD8uGADwABW1k7AATrBwAE6yQAAImADkU4B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rAAcwADSaRbAANJkFsAA0l+AwADSWsAVR5mAvYTcgL2IhkgBAAEnYQDAAP36PgJJwADSfhbAANKCLqodqmQ+AUrAANKhARzAANKoLpztAQABH8AA0rmqFgEAARbAANLeFsAA0tgUwADSz8AVSO4BAWADiayAlomBYcAA/e8AAKqvP0rAANL2ARzAANL9LpztAQABH8AA0w6JoAEAARbAANMpFsAA0yMUwADTGsAVSO4BAWADiayAlomBYcAA/e8AAKqvScAA0z4WwADTQi6qHKpjPgFKwADTXwEcwADTZi6qJAIAAoDAANNywBVHmR/AANOGhOkDAAMcwADTki6qJQEAAYHAANOawBVI7gCqbBbAANOqgMAA06XAFUeZgL2E3BbAANO1gMAA07DAFUeZhYGE3wAAqmtJwADT0yXAANPggcAA09fAFUjuYAOJiT4BSsAA0/kBHMAA1AAugcMCAAKAwADUB8AVR5lqwADUDWADkVmeuwCqaT9KwADUMwEcwADUOi6BwwIAAoDAANRKwBVHmRzAANR8asAA1FhdA5FlAWEDAmADwAD962ADiXNgA5FOm0yICwIAAhbAANShFsAA1JyAwADUl8AVR5mAvYTcgL2IhoHAANSnwBVI7gCRaQCqaQaqlXLAANS6wADUusAA1WQAAIYJAAAAAQPAANTCwADVZAAAAAEBAcAA1McAAACD7mADhzYAAGADiXMBPgI9HMAA1NcWwADU0y6We6pbqgECAAIWwADU9oDAANTxwBVLQ4JshzgcwADVAC6qH6oJAQABFsAA1SUWwADVHIDAANUXwBVLQ4JshziFB4hbAKp1AKrRSsAA1TgBHMAA1T8uqh+qCQEAARbAANVbgMAA1VbAFUtDgmmHOQCqdQaqlnLAANVpwADVacAA2MAAAIV7AAAAAQPAANV5wADYwAAAAAEBAcAA1YYAAACD7mADhMEAAGADiXMBPgROwADW9sAA1v8AAYJsYAOIUwEWwADXBoDAANcBwBVL/YJshMNJwADXFCIlwADXKBbAANchgcAA1xjAFUwUhFKCWGADhzYBHsAA1zKqDgEAAYHAANdFwBVMFAA+AUrAANdYATUAAAABAGADiXMBHMAA12MWwADXXy6We6pbqmABAAEWwADXd4DAANdywBVL/YJshMMAqtMjHMAA14GCAMAVTHZIAQABKwAA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AoDAARJ0wBV6QTTAARJ+A8ABEn7AARKMAAAAAAAAAGADiXMBSsABEoQBgMABEoTAFXpBAMAA/PUGqrBywAESlsABEpbAAROmAACqRAAAAAEDwAESrMABE6YAAAADAwPAARKzAAAAqUhgA4MZAMABEskAAACFHV0DwAD8qQFgA4i4AMABEtgAAACWKmEDAFsAAFsBPgJOwAES9MABEvgAAINaYAOquAEWwAES+i6qEKpaTD4CPRfAARMbLqoQH8ABEzGqxQMAAy6AwAETR8AVes+BwAETTsAVet0AqlpKwAETZAEcwAETbYLAARNrwBV68iAAAAAAAD4BPRfAAROHLqoQg8ABE5nAFXsGqloGqrFywAETq8ABE6vAARRmAACp/AAAAAEDwAETvcABFGYAAAABAQHAARO+AAAAliphAwBbAABbAT4CTsABE+bAARPtAAGqdWADqsYBFsABE+8ulnuqW0w+Aj0XwAEUBC6Wex/AARQOqtYAAAAAqltKwAEULQEcwAEUNoDAARQ0wBV7pCAAAAAAAD4BPRfAARRQLpZ7gcABFFbAFXu4qlsGqrJywAEUa8ABFHTAARYeAACqVwAAAAEDwAEUjsABFh4AAAAEBATAARSWAAAAqlRgA8AA/esAwAEUngAAAIHVYAPAAPwFAMABFKUAAACCSmADwAD8BQDAARSxAAAAg+5gA4JSAABgA4lzAT4ETsABFMEAAACBdmADwAD8BQBBR8ABFM2AwAEU1cAVfEMDAcABFOZqwAEU5mADwAD968AAm1kAPgI9jMABFPPAFXyKHMABFP6BwAEU/MAVfFOBBgEAAYLAARUAwBV8YwDAAPweQsABFQsAAcABFR1qwAEVHWADwAD968AAm18APgI9jMABFSrAFXyKHMABFTWBwAEVM8AVfFODdwEAAYLAARU3wBV8YwDAAPwdQsABFUIAAcABFVRqwAEVVGADwAD968AAm1wAPgI9jMABFWHAFXyKHMABFWyBwAEVasAVfFODuwEAAYLAARVuwBV8YwDAAPwfQsABFXkAScABFYsWwAEVjy6qHapkPgFKwAEVrAEcwAEVsy6c7QEAAR/AARXEqhYBAAGEwAEV2sAVfIoAAKqvP0rAARXuARzAARX1LpztAQABH8ABFgaJoAEAAYTAARYSwBV8igAAqq8GqrNywAEWI8ABFizAARlO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qUhgA4MZAMABIYIAAASFHV0DwAD8qQFgA4i4AABgA6q4AT8ECAGquoAAwBWIawgBqruBAMAViHkIAaq8ggDAFYiHCQHAASFRwAD9ZwAAAAADBqrBcsABIZXAASGawAEh6gAAqkkAAAABA8ABIafAASHqAAAAAgICwAEhrgAAAISUYAODfADAASG+AAAAhgVgA4lzAABcAT4BPRzAASHUFsABIc4uhIWqvYC/AgACgMABIdXAFYj4gcABId7AFYkGAMAA/O8GqsJywAEh78ABIgDAASOCAACqRwAAAAEDwAEiDcABI4IAAAAAAAAAYAOKAgE+BUAWwAEiJRbAASIdLoXUqr6BVcAA/IvAASIdwAEiLABOwAEiUsABIl4AAYXTXQPAAPzaAmADgntgA4lzATLAASJ1YAOCe2ADiXMAPRzAASKEFsABIn0uhIWqvYP4AQABNMABIowDwAEijMABIwoAAAACAgLAASKTAAAAhJRgA4N8AMABIqMAAACAlmADiXMAAGADwAD9DgE+AkAhJcABIr+CwAEiucAVifVgA4pCwAEiucABItYAPRzAASLqgMABIt/AFYmUgL8CAAIWwAEi8YHAASLrwBWJ54RegmqCwAEi/sAVifUAwAD87wDAAPz5QBbAASMoFsABIxguhdWqv4FVwAD8i8ABIxjAASMvAErAASM2AR/AASNBihQDAAMWwAEjWBbAASNSLqlIqruEXoJqFsABI2MuhR2qvIDAASNywBWJlAAGqsNywAEjh8ABI5jAASTwAACqRgAAAAEDwAEjsMABJPAAAAAAAAAAYAOGRgE+A07AASPawAEj5gABhdNdA8AA/NoCYAOCe2ADhK4BMsABI/9gA4J7YAOErgA9HMABJA4WwAEkBy6Ehaq9g/gBAAE0wAEkFgPAASQWwAEkegAAAAICAsABJB0AAACElGADg3wAwAEkLQAAAICWYAOJcwAAYAPAAP0OAT4BPRzAASRHgMABJDzAFYrpgL8CAAIWwAEkToHAASRIwBWLPIRegmocwAEkZRbAASRbLqp6qrqqJQEAAYLAASRtwBWLSgCqbADAAPzvAMAA/PlKwAEkgQEfwAEkjIZWBQAFFsABJKwWwAEkpi6pSKq7hF6CahbAASS3LoUdqryAwAEkxsAViukWwAEk0y6F1Kq+FsABJNwuhdWqvwAAABWI0QAViUUAFYq5ABWL/QAAAAMCqsZywAElPMABJULAASzMA6p7AAABYAHAAP1RAAADBKrJcsABJbHAASXjCalfqgkAXQPAAPzaAmADiU9gA4i4ATLAASXhYAOJT2ADiLgABKrKcsABJkjAASZ8Cap8qgkAXQPAAPzaAmADiFNgA4lzATLAASZ6YAOIU2ADiXMABKrLcsABJ0nAASeLCap9qgkAXQPAAP2cAWADiFMBHsABJ3HAAMEXAAFgA4hTAAABBarWAAAAAAQAAAMAAAAAAAAAAABgA6rGAT8BCQEAwAD9ZwAAAAAHBqrNcsABJ8DAASfJwAEoAAEAgVUAAAABA8ABJ9HAASgAAAAAAAAAAGADwAD6PwFKwAEn1AEiFsABJ+MWwAEn1C6pX6oJqsmBVcAA/P8AFsABJ/kWwAEn7i6qfKoJqsqBVcAA/P8GqtBywAEoBcABKArAASioAACqTgAAAAEDwAEoH8ABKKgAAAACAgLAASguAAAAgO1gA4lPAMABKEIAAACAlmADiLgAAFwBPgJAIRzAAShmFsABKFcuqV+qCarJh0cBAAGAwAEocsAVjXQAwAD87cABKFbAASh8AD0cwAEokRbAASiDLqlfqgmqyYC/AgACgMABKJLAFY10gcABKJ/AFY2CAMAA/O8GqtFywAEorcABKLLAASl2AACqAQAAAAEDwAEowsABKXYAAAACAgLAASjXAAAAgmxgA4hTAMABKOoAAACAlmADiXMAAFwBPgI9HMABKQEWwAEo9y6qfKoJqsqAvwIAAoDAASkCwBWOGYHAASkOwBWOJwDAAPzvScABKRklwAEpI4HAASkdwBWOJ2ADikI+AT0cwAEpXxbAASlDLqp9qgmqy1YBAAGAwAEpY8AVjhkAwAD9qT8GqtJywAEpe8ABKYTAASoZAACqfgAAAAEDwAEpmMABKhkAAAABAQHAASmnAAAAgO1gA4lPAABgA4i4AT4DTsABKcfAASnNAAGAlmADiLgBHMABKd0WwAEpzy6pX6oJqslLAQABgMABKd7AFY7NAMAA/O5AIRzAASn7gcABKfXAFY7kSAEAASsAiLzAASn1wAEqAgBKwAEqCQGBwAEqEMAVjuQGqtNywAEqHsABKifAASr3AACqYAAAAAEDwAEqNcABKvcAAAABAQHAASpKAAAAgmxgA4hTAABgA4lzAT4DTsABKmPAASppAACAlmADiXMBHMABKnUWwAEqay6qfKoJqspLAQABgMABKnbAFY9vAMAA/O5JwAEqhSXAASqPgcABKonAFY+GYAOKQj4BPRzAASrLFsABKq8uqn2qCarLhFkBAAGAwAEq0sAVj28AwAD9qz9KwAEq5wGBwAEq7sAVj4YGqs5ywAErP8ABK2HAASxAAQCqUgAAAAEDwAErfMABLEAAAAAAAAAAXQPAAPxnAWADikIBPgJJwAErghbAASuiFsABK4Yuqn2qCarLgVXAAPyLSsABK6sBasABK7JdA8AA/KkBYAOKQsAA4EA/SsABK8ABHMABK+MWwAErxy6qfaoJqsuAqwEBYAOKQgE0wAEsBQPAASwFwAEsOwAAAAEBAcABLBoAAACCbGADiFMAAGADikIBSsABLCcBJsABLCcBHMABLDEWwAEsJy6qfKoJqspLAQABgMABLDLAFZCpAMAA/O5gA4pCAMAA/HIGqtRywAEsRcABLE7AASzKAACFgwAAAAEDwAEsXMABLMoAAAABAQHAASxmAAAAgpBgA4i4AABgA4i4AT4CScABLHIWwAEshRbAASx2LqlfqgmqyYFVwAD8/0rAASyOAYDAASyVwBWRHD9KwAEsnwEewAEsppqtAgACgMABLLHAFZEcFsABLLcuqV+qCarJAAAAFYzoABWNTQAVjfIAFY6mABWPSAAVkAgAFZD1ABWRhAAAAAcCqtdywAEtCMABLQ7AAS21A6p/AAABYAHAAP1RAAADBKrZcsABLTLAAS02CYPuAGADglIABKracsABLUjAAS1PCSIAYAORTgAEqttywAEtbsABLXUJglMAXQPAAPypAWADkWwAAQWq3XLAAS16wAEtesABLbMAAAADwAEtisABLbMAAAADAgLAAS2QAAAEg+5gA4JSAMABLZsAAAQiYAORTgABwAEtqgAABIJTXQPAAPypAWADkWwBagBgA8AA/Q55YAOq1wE/BAgBqtmAAMAVkjAIAaragQDAFZI+CAGq24IAwBWSTAkBwAEtesAA/WcAAAAAAAAAFZKeAAAAAAKq3nLAAS24wAEtvsABLkYDqoAAAAFgAcAA/VEAAAIEquBywAEt7sABLfIJg+4AYAOCUgAEquFywAEuA8ABLgoJIgBgA8AA/esAAQWq43LAAS4PwAEuD8ABLkQAAAADwAEuK8AB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Bqw3ecAARerAAEX7wABGXwAAqysBasAARetgA8AA/VECAAABA8AARgrAAEZfAAAAAQEBwABGHAAAAIc0YAOuOgAAXAE+AUrAAEYrARzAAEY6gMAARjLAFhxbq2oBAAEuAK5SAAAWG+EAFhwoABYciwAAAAICrDp5wABGpMAARqrAAEgsA6trAAABYAGHNgABYAGsUQEErDx5wABG98AARwMYoUQAYAOIuAErAQWsQnnAAEcIwABHCMAAR2oAAAADwABHHcAAR2oAAAACAgLAAEcyAAAAgmxgA4hTAMAAR0cAAACCaWADhK4AAGADrDoBPwEJAMAAR1WHQQIAAoDAAEdbwBYc9oHAAEdlwBYdBAACBqw+ecAAR2/AAEd+wABHjgEAqyoAAAABA8AAR4fAAEeOAAAAAAAAAGADhK4BSsAAR4oBFsAAR4ougmmHOQasQHnAAEeTwABHpMAASCoAAKsrAWrAAEeUYAPAAP1RAgAAAQPAAEezwABIKgAAAAICAsAAR8UAAACHNGADrjoAwABH1wAAAKs6YAOIuAAAXAE+AUrAAEfqARzAAEf5gMAAR/HAFh2pq2wCAAIugcAASBrAFh23AK5TAAAWHTkAFh12ABYd8AAAAAICrEN5wABIccAASHfAAEmiA6ttAAABYAGHvgABYAGtOgABBaxJecAASLfAAEi3wABJAAAAAAPAAEjBwABJAAAAAAICAsAASMwAAACCaWADh2QAwABI3QAAAIW6YAOErgAAYAOsQwE/AQkAwABI6ofIAgACgMAASPDAFh5FgcAASPbAFh5TAAIGrEV5wABJBcAASRTAAEkyAQCrLgAAAAEDwABJJsAASTIAAAAAAAAAYAOErgFKwABJKQEWwABJKS6FuofBBqxHecAASTfAAElIwABJoAAAqysBasAASThgA8AA/VECAAABA8AASVfAAEmgAAAAAQEBwABJaQAAAIc0YAOuOgAAXAE+AUrAAEl4ARzAAEmHgMAASX/AFh74q24BAAEuAK5UAAAWHogAFh7FABYfKAAAAAICrEp5wABJ7sAASfTAAEsXA6tvAAABYAGGjwABYAGsUQEErEx5wABKRMAASlAYoUQAYAOIuAErAQWsUHnAAEpVwABKVcAASoAAAAADwABKY8AASoAAAAABAQHAAEprAAAAgJZgA8AA+rcAAGADrEoBPwEJAMAASnSGlwEAAYDAAEp6wBYfkwABBqxOecAASoXAAEqWwABLFQAAqysBasAASoZgA8AA/VECAAABA8AASqXAAEsVAAAAAgICwABKtwAAAIc0YAOuOgDAAErJAAAAqzpgA4i4AABcAT4BSsAAStwBHMAASuuAwABK48AWH/SrcAIAAi6BwABLBcAWIAIArlUAABYfwQAWIDsAAAABAqxRecAAS3DAAEt/wABMfAercQAAAWABhK4AAAEErFN5wABLssAAS74YoUQAYAOIuAErAQWsVwAAAAAEAAADAAAAAAAAAAAAYAOsUQE/AQkBAIS1AAAAAAEGrFV5wABMNsAATDvAAEx6AAKrKwAAAAEDwABMSsAATHoAAAACAgLAAExcAAAAhzRgA646AMAATG4AAACrOmADiLgAAFwAAAAWIKEAFiDnAAAAAQKsWHnAAEzKwABM0MAATbcDq3IAAAFgAYeKAAFgAa06AAEFrFx5wABNI8AATSPAAE07AAAAA8AATTnAAE07AAAAAAAAAGADrFgBPwEJAcAATSOHkQAAAAABBqxaecAATUDAAE1RwABNtQAAqysBasAATUFgA8AA/VECAAABA8AATWDAAE21AAAAAQEBwABNcgAAAIc0YAOuOgAAXAE+AUrAAE2BARzAAE2QgMAATYjAFiGAq3MBAAEuAK5WAAAWIU0AFiGwAAAAAQKsXXnAAE4KwABOEMAAT14Dq3QAAAFgAYdqAAFgAa06AAEFrGN5wABObcAATm3AAE6zAAAAA8AATojAAE6zAAAAAQEBwABOlAAAAIJrYAOErgAAYAOsXQE/AQkAwABOoodzAQABgMAATqjAFiIBAAIGrF95wABOuMAATsfAAE7dAQCrKgAAAAEDwABO0MAATt0AAAAAAAAAYAOErgFKwABO0wEWwABO0y6Ca4dsBqxhecAATuLAAE7zwABPXAAAqysBasAATuNgA8AA/VECAAABA8AATwLAAE9cAAAAAQEBwABPFAAAAIc0YAOuOgAAXAE+AUrAAE8jARzAAE8ygMAATyrAFiKdq3UBAAEuAK5XAAAWIi0AFiJqABYizQAAAAICrGR5wABPycAAT8/AAFHdA6t2AAABYAGFvQABYAGsUQEErGZ5wABQPMAAUEgYoUQAYAOIuAErAQWsbHnAAFBNwABQTcAAUPcAAAADwABQccAA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hAAAAKs6YAOIuAAAXAE+Ck7AAEWbwABFqAAAq4lgA4SuARbAAEWvgMAARarAFrNDq4mslk7AAEXFwABF0wAAq4pgA4SuARbAAEXagMAARdXAFrNDq4qslz0cwABGSBbAAEY/LqtLrjyrVwMAA4LAAEZYwBazZYHAAEZmwBazUSkArbROwABGgsAARooAAKw5YAOIuAEewABGjKvbAgACgsAARpzAFrNlFsAARqouq0uuPAA9F8AARscWwABGvoDAAEa5wBazQ4JshziCkITAAEbOwBaz2IhZScAARywlwABHPIHAAEcwwBazUWADq8Y+AT0cwABHXRbAAEdULqtLrjyrVwQAA4PAAEdtwBaziYTAAEd8wBaz2CkBq2AprbQ+AT0cwABHxxbAAEe+LqtLrjyrVwQAA4PAAEfXwBaziYHAAEfmwBazUSkBq2AprbROwABIJ8AASC8AAKtTYAOIuAEewABIMavbAgACg8AASEHAFrOJFsAASFAuq0uuPAA9F8AASO+AwABI6sAWs0OhRBzAAEklFsAASQ8WwABJBi6rS648oNKwKKtjAgAChMAASTvAFrPYhcAASUTAFrSkAMAAiO+skz0XwABJXBbAAElXgMAASVLAFrNDgmmslYW8HsAASWmr2wIAAoDAAEl5wBazQxbAAEl/LqtLrjwAhg1KwABJjgErBq5kesAASaLAAEmnwABLwQAAq40AAAABA8AASbbAAEvBAAAAAQEBwABJwgAAAIPuYAOsnAAAXAE+Bk7AAEnSwABJ5AAAqy5gA4SuARbAAEnrgMAASebAFrWCqy6snk7AAEoGwABKEwAAq1hgA4jzARbAAEoyFsAASigWwABKHhbAAEoVLqtLrjyHZ7ANms6ckoT6g0c9HMAASkgWwABKPy6rS648q1cDAAOBwABKYcAWtZaCwABKdMAWtbohFsAASowWwABKgy6rS648h4GwJQCttD0cwABKphbAAEqdLqtLrjyrWQQABILAAErAwBa1uh7AAErWq9sCAAKBwABK5sAWtZYWwABK+S6rS648ABbAAEsRgMAASwzAFrWChbqICRbAAEszFsAASymAwABLJMAWtYKFuogJhFOCWQCwNT0cwABLTRbAAEtELqtLrjyr5gEAARbAAEthgMAAS1zAFrWCga2ICgCttknAAEtsIRzAAEt/FsAAS3WAwABL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ARFtwABT6AEAAYLAARGCwBc/zgBOwAERk8ABEZgAAIKQYAOIuAEWwAERoYLAARGawBc/zoUDg3BJwAERsSIlwAERvILAARG1wBc/zmADg+oAHMABEdgWwAER0xTAARHMwBc/zgIBYAOD6oJng+1IAQABasABEelgA4QnhMUAwAD9Xj4BPYvAARH5wBdACRzAARIJFsABEgAuq0uuPKyEAwADg8ABEhzAF0AJgcABEiLAFz+6gMABEi/AFz+sALBRPz0cwAESSRbAARJALqtLrjysGwIAAoDAARJbwBc/rIPAARJhwBdACQCwMQauhXrAARJvwAESgMABFVoAAIWqAWrAARJwYAPAAP1RAgAAAQPAARKVwAEVWgAAAAICAsABEqcAAACD7mADhb0AwAEStgAAIKs6YAOIuAAAXAE+BU7AARLWwAES4QAArDpgA4kFASMhHMABEu8WwAES6IDAARLjwBdBEoJFhcRIAQABKwDAAP1eFsABExYWwAETDRbAARMGgMABEwHAF0ESgkWFxIJqg++FO4SaH8ABEzGJHgIAAjHAARM+YAOIuABqwAETSGADiM+EiAABYAOJBU7AARNhwAETegAArCJgA8AA+j8BIRzAAROtHsABE4Sr3wEAARbAAROigMABE53AF0ESW4XAAEgBAAErAMAA/V5OwAETvsABE84AAKwgYAOwbAEcwAET2RbAARPQLqtLrjysIQUABYHAARPpwBdBIBbAARP7gMABE/bAF0EShFOCWYLAARQPwBdBNBbAARQmgsABFBvAF0E0hTqJDRbAARQ3gMABFDLAF0ESW4XAALBIPRzAARRQFsABFEcuq0uuPKwbAgACgMABFGLAF0ESFsABFHiEwAEUaMAXQfKCkLBvALAxScABFIMiIYPAARSIwBdBsgAhHMABFLAWwAEUqYDAARSkwBdBEoJFhcRIAQABKwDAAP1ePgE9NQAAAAEAYAOo6wEWwAEUyhbAARTBLqtLrjyEQ7AqIxzAARTThQDAF0LLSAEAASsAACscwAEU04UAwBdCy6LgBAADgMABFPzAF0ESFsABFQsWwAEVAi6rS648oNKwKBbAARUyFsABFSsWwAEVIi6rS648lVywLICswABTrwGpPSmpZgFcPwauhnrAARVfwAEVcMABFokAAIXBAWrAARVgYAPAAP1RAgAAAQPAARWIwAEWiQAAAAICAsABFaQAAACD7mADhhYAwAEVswAAIKs6YAOIuAAAXAE+AUnAARXGIRbAARXUFsABFcsuq0uuPIeBsCU+AUbAARXowAEWEcABFfEAAACCa2ADhK4AFsABFgSAwAEV/8AXQ4KFv4YYPgE9HMABFiQWwAEWGy6rS648q1cDAAOCwAEWQcAXQ8dqwAEWU2ADq8bAAOB2IRbAARZsFsABFmMuq0uuPIeBsCUArbQ/Bq6HesABFo7AARafwAEW3QAAheEBasABFo9gA8AA/VECAAABA8ABFrHAARbdAAAAAgICwAEWwAAAAIPuYAOGfQDAARbPAAAgqzpgA4i4AABcAT4ABq6IesABFuLAARbnwAEY7QAAq8IAAAABA8ABFwTAARjtAAAAAQEBwAEXHgAAAIPuYAOtRQAAXAE+Ak7AARcuwAEXOwAAhOpgA5q/AR7AARdKmsYBAAEcwAEXeRbAARdhFsABF1guq0uuPKtosCabCwIAAhbAARetFsABF6QWwAEXmy6rS648hMKwKYToiPkWwAEXxBbAARe9gMABF7jAF0SngkWEWIT/g2YAm60APRzAARfjFsABF9ouq0uuPKwhBgAFKxbAARgPgMABGArAF0SnhFOCWSbAARgwARzAARgwgcABGCPAF0S7hYMBAAEWwAEYbhbAARhhFsABGFgWwAEYUYDAARhMwBdEp4JFhFiCaoOthTuEmoWviRMAms5gA4kFFsABGJcWwAEYji6rS648hMKwKRbAARiugMABGKnAF0Snq3etRwGsOCmwSAauiXrAARjywAEY98ABGzQAAKvEAAAAAQPAARkZwAEbNAAAAAICAsABGT8AAACD7mADrUwAwAEZTgAAAKs6YAOIuAAAXAE+A0nAARlhIRzAARl6FsABGWqAwAEZZcAXRfWFgYWxSAEAASsAwAD9Xj4BPTUAAAABAGADwABSQwEWwAEZlBbAARmLLqtLrjypgbAnIxzAARmlggDAF0ZBSAEAASsAACscwAEZpYIAwBdGQanFBAAEFsABGbUWwAEZrC6rS648gKywJBbAARm/gMABGbrAF0X1hFOCWSeCRR/AARnjwABSUwEAARbAARoGgMABGgHAF0X1hYGFsQAAwABSRQFcP07AARonwAEaNwAArCBgA7BsARzAARpCFsABGjkuq0uuPKx4CAAFgMABGmHAF0X1KxbAARpygMABGm3AF0X1hFOCWSqBwAEahcAXRgMDrIUWwAEasIDAARqrwBdF9YWBhbGshhbAARragMABGtXAF0X1gL2FrVsWwAEa+IDAARrzwBdF9VuFrrBMPRfAARsNgMABGwjAF0X1oUQWwAEbLILAARscwBdG1IKQsG+tTgauinrAARs5wAEbPsABHO8AAKvGAAAAAQPAARtbwAEc7wAAAAICAsABG3wAAACD7mADrVUAwAEbiwAAAKs6YAOIuAAAXAE+AknAARueIRzAARu3FsABG6eAwAEbosAXR6iFgYU5SAEAASsAwAD9Xj4BPTUAAAABAGADwABSQwEWwAEb0RbAARvILqtLrjypgbAnIxzAARviggDAF0f0SAEAASsAACscwAEb4oIAwBdH9KnFBAAEFsABG/IWwAEb6S6rS648gKywJBbAARv8gMABG/fAF0eohFOCWSeCRR/AARwgwABSUwEAARbAARxDgMABHD7AF0eohYGFOQAAwABSRQFcPz0cwAEcaRbAARxgLqtLrjysegYABIDAARx6wBdHqCsWwAEci4DAARyGwBdHqIRTglmBwAEcl8AXR7YCrIUWwAEcwoDAARy9wBdHqIWBhTmshxbAARzmgMABHOHAF0eogL2FNrBOBq6LesABHPTAARz5wAEhdAAAq8wAAAABA8ABHRXAASF0AAAAAQEBwAEdLgAAAIPuYAOtYwAAXAE+BE7AAR0+wAEdUQAAq8pgA4SuARbAAR1YgMABHVPAF0kSq8qtZT0cwAEdeRbAAR1wLqtLrjyrVwMAA4HAAR2JwBdJJmrAAR2jYAOrxsAA4HYpAK20TsABHcHAAR3QAACsiGADiLgBHsABHdKr2wIAAoHAAR3iwBdJJhbAAR32LqtLrjwARsABHgbAAR4xwAEeDwAAAKgVYAOtXAAWwAEeIoDAAR4dwBdJEqvLrWY+AkbAAR45wAEedMABHkIAAACsiWADhK4AFsABHl+DwAEeVMAXSbGryK1ePgJOwAEeh8ABHpoAAKyKYAOIuAEcwAEesRbAAR6oLqtLrjyrVwMAA4TAAR7BwBdJ3ILAAR7RwBdJeSkArbRJwAEfSSEcwAEfVxbAAR9OLqtLrjysSgIAAoLAAR9kwBdJeYXAAR90wBdJ/wCwND4BPRzAAR+lFsABH54WwAEflS6rS648lVywLJ51BAADHMABH+VqwAEfv10DkWUBYQMCYAOIuGADiLhgA5FOwACI+YgLAgACgsABIAbAF0l5hcABIBbAF0n/AJFpFsABIEiEwAEgOcAXSdyEU4JZasABIGJgA8AA/AUVAYJTMcABIINgA5FsARzAASC/asABIJVgA5FZwACJYoJbAwADFsABIOoWwAEg4S6rS648gKywJBbAASECgcABIO/AF0kmhFOCWWrAASEOYAPAAPwFFQCRYcAAU7U/PRzAASFLFsABIUIuq0uuPKvmAQABFsABIWWDwAEhWsAXSbGCaYfzAK22Bq6MesABIXnAASF+wAEiJwAAq84AAAABA8ABIZjAASInAAAAAgICwAEhtgAAAIPuYAOtawDAASHFAAAAqzpgA4i4AABcAT4CPRfAASHdgMABIdjAF0uRoUQWwAEiCxbAASH/FsABIfUWwAEh7C6rS648h2ewDZrUnL6E+oNHrW1KwAEiGAErBq6NesABIizAASIxwAElJwAAq9AAAAABA8ABIlrAASUnAAAAAgICwAEihwAAAIPuYAOtcgDAASKWAAAAqzpgA4i4AABcAT4GTsABIrYAAACsOmADiQUATsABIs8AAACFOmADiLgAScABIt8hHMABIvQWwAEi6IDAASLjwBdMGJjbrXRIAQABKwDAAP1ePgI9isABIwXAF0w6FsABIywWwAEjIxbAASMXgMABIxLAF0wYmNutdIJqg2+FO4SaPYvAASNAwBdMSR7AASNNq94BAAEWwAEjb4DAASNqwBdMGJjbrXQAPgI9isABI5DAF0w6H8ABI6GJHgIAAjHAASOuYAOIuABqwAEjuGADiM+EiAA9i8ABI87AF0xJasABI+FgA4jPhIhOwAEkFMABJCQAAKwgYAOwbAEcwAEkLxbAASQmLqtLrjysIQUABYHAASRIwBdMJhbAASRigMABJF3AF0wYhFOCWYLAASR2wBdMOoPAASSKwBdMSRbAASSjgMABJJ7AF0wYq3etdwCwSD0XwAEkwIDAASS7wBdMGKFEFsABJN+EwAEkz8AXTReCkLBvrYdKwAEk6QEcwAEk8C6r0wIAAoDAASURwBdMGIHAASUXwBdMJgCujwaujnrAASUswAElMcABJwkAAKvSAAAAAQPAASVKwAEnCQAAAAICAsABJWcAAACD7mADrX0AwAEldgAAAKs6YAOIuAAAXAE+Az01AAAAAQBgA4SuARbAASZHgMABJkLAF03wgmutfyMcwAEmWRbAASZSgsABJlLAF04ThFKCWEgBAAErAMAA/V4XwAEmUoLAASZSwBdOE4RSgMABJl3AF03wglgrAWADglI9HMABJnEWwAEmaC6rS648q1cDAAMWwAEmj4DAASaKwBdN8IJrrX9qwAEmoWADq8bAAOB2IRbAASa6FsABJrEuq0uuPIeBsCUArbRKwAEmywEcwAEm0i6r0wIAAoDAASbzwBdN8IHAASb5wBdN/gCujwauj3rAAScOwAEnE8ABJ9cAAKvTAAAAAQPAASczwAEn1wAAAAICAsABJ1cAAACD7mADrYUAwAEnZgAAAKs6YAOIuAAAXAE+Az0cwAEnfoDAASd5wBdPCqvUq9kAAAAArY89F8ABJ6CAwAEnm8AXTwqhRGrAASe1YAOIz4SIrYdKwAEnyAErBq6QesABJ9zAASfhwAEoIQAAhfEAAAABA8ABJ/TAASghAAAAAgICwAEoBAAAAIPuYAOGwADAASgTAAAgqzpgA4i4AABcAT4ABq6ResABKCbAASg3wAEoywAAhfUBasABKCdgA8AA/VECAAABA8ABKEHAASjLAAAAAgICwAEoSAAAAIPuYAOG0gDAAShXAAAgqzpgA4i4AABcAT4BPRzAAShzFsABKGouq0uuPKtXAwADFsABKJGAwAEojMAXT+SCa4bUasABKKNgA6vGwADgdiEWwAEovBbAASizLqtLrjyHgbAlAK20Bq6SesABKNDAASjVwAEpKAAArIsAAAABA8ABKOfAASkoAAAAAQEBwAEo9gAAAIPuYAOtlwAAXAE+AT0cwAEpCxbAASkCLqtLrjyr5gEAARbAASkfgMABKRrAF1B3gmmILgCttgauk3rAASktwAEpMsABKeEAAKvcAAAAAQPAASlHwAEp4QAAAAEBAcABKVkAAACD7mADrZ0AAFwBPgI9HMABKW4WwAEpZS6rS648q+YBAAEWwAEpgoDAASl9wBdQ24JpiB8ArbZGwAEpjcABKbXAASmWAAAArIxgA62XABbAASmlgMABKaDAF1Dbq9utnz4BPRzAASm9LqyLAQABgcABKdDAF1EhAK6SBq6UesABKebAASnrwAEqdQAAq94AAAABA8ABKgLAASp1AAAAAQEBwAEqFgAAAIPuYAOtpAAAXAE+Aj0cwAEqKxbAASoiLqtLrjyr5gEAARbAASo/gMABKjrAF1GCgmmINwCttj0cwAEqUxbAASpKLqtLrjyr5gEAARbAASpngMABKmLAF1GChkiIOACttgaulXrAASp6wAEqf8ABKyIAAKvoAAAAAQPAASqXwAErIgAAAAICAsABKrMAAACD7mADrbkAwAEqwgAAAKs6YAOIuAAAXAE+Aj0XwAEq2oDAASrVwBdSEKFEFsABKwYWwAEq/BbAASryFsABKukuq0uuPIdnsA2a1ZzDhPqDR627SsABKxMBKwaulnrAASsnwAErLMABLYAAAKv2AAAAAQPAAStLwAEtgAAAAAICAsABK24AAACD7mADrcoAwAErfQAAAKs6YAOIuAAAXAE+CU7AASuZAAAAq0xgA4i4AE7AASurwAErsAAAnnZgA4SuARbAASu3gMABK7LAF1KXnnasGUnAASvBJcABK8qDwAErxcAXUshgA4TBPgE9isABK+LAF1K5NQAAAAEAYAOIuAEWwAEr8hTAASvtwBdSyAMBYAOEwYV6hMQjHMABK/+EAMAXUw9IAQABKwAAFsABLBAWwAEsBxTAASwCwBdSyAMBYAOEwYJshMOCkIhZhADAF1MPAWADiLg/TsABLCnAASw2AACrTWADiLgBasABLD5gA6vGwADgdk7AASxVwAEsWwAAgopgA4SuARbAASxigMABLF3AF1KXgoqsG0nAASxtJcABLHeFwAEsccAXU5FgA4TNPgI9jMABLI/AF1NyFsABLK0WwAEspBTAASyewBdTkQUBYAOEzYJshM+CkIhZScABLLkhHMABLMKDwAEsvcAXUshIAQABKwDAAP1ePgE9HMABLNqAwAEs1cAXUperX6vZAwADFsABLOguq0uuPIPAASzywBdSyITAASz4wBdTcgCtkD8/PRzAAS0egMABLRnAF1KXq0qr2QMAAxbAAS0oLqtLrjyCwAEtMsAXUrmEwAEtPMAXU3IArCQ9HMABLVSAwAEtT8AXUper1KvZAAAAAK2PSsABLXEBKwaul3rAAS2FwAEtisABM0sAAKv6AAAAAQPAAS2qwAEzSwAAAAEBAcABLccAAACD7mADrdAAAFwBPghOwAEt18ABLesAAKv5YAOErgEWwAEt8oDAAS3twBdUy6v5rdpOwAEuD8ABLhwAAKyNYAOIuAEjFsABLiOAwAEuHsAXVMur96vZrdRqwAEuPGADq8bAAOB2FsABLlGAwAEuTMAXVMuCkIhZAWADiLhOwAEuZAAAAKFEYAOIuABOwAEufwAAAKwjYAOIuABJwAEulCEcwAEurIHAAS6YwBdU30gBAAErAMAA/V4+Az0cwAEuxhbAAS69LqtLrjyrVwQAA4HAAS7WwBdU34LAAS7rwBdVAyIhFsABLw0WwAEvBC6rS648h4GwJQEWwAEvIIDAAS8bwBdUy6v3q9mt1AGrYCmttD2MwAEvWMAXVV0ewAEvaqvbAgACgcABL3rAF1TfFsABL48uq0uuPAA9i8ABL6DAF1VOHMABL7gWwAEvry6rS648rI4BAAGEwAEvzcAXVV0AsEQ+AT2LwAEv8sAXVU5qwAEwB2ADiM+EiEnAATAgFsABMCmAwAEwJMAXVMur96vZrdQ+Aj01AAAAAQBgA8AAUkMBFsABMEwWwAEwQy6rS648qYGwJyMcwAEwXYUAwBdWaEgBAAErAAArHMABMF2FAMAXVmipxQQABBbAATBtFsABMGQuq0uuPICssCQWwAEwd4DAATBywBdUy4RTglkngpAfwAEwmcAAUloBAAGDwAEwtcAXVU4AAMAAUkUBXD0XwAEw0IDAATDLwBdUy4KQg8ABMNfAF1VOiFk/ScABMO8hHMABMQQWwAEw+IDAATDzwBdUy4UHiFtIAQABKwDAAP1ePgJOwAExGcABMS0AAKyPYAOErgEcwAExOBbAATEvLqtLrjyrWQUABBbAATFZgMABMVTAF1TLgpCIWYTAATFfwBdVXRbAATF1gMABMXDAF1TLhQeIWxbAATGHgMABMYLAF1TLhFOCWQGrYCXAATG2FsABMbGAwAExrMAXVMuCkIhZYAOI27A1ScABMcohHMABMeKFwAExzsAXVzdIAQABKwDAAP1ePgE9F8ABMfqAwAEx9cAXVMuFB4XAATIIwBdXN4hbPz9JwAEyLyEWwAEyPRbAATI0LqtLrjyHgbAlPgJOwAEyZsABMm4AAIRDYAOo6wEWwAEyeRbAATJwLqtLrjyEQ7AqScABMogWwAEykYDAATKMwBdUy6v3q9mt1D4BPRzAATK1hcABMq3AF1gVofgEAAOAwAEy48AXVMsWwAEy8hbAATLpLqtLrjyg0rAoFsABMxkWwAEzEhbAATMJLqtLrjyVXLAsgKzAAFOvAak9KaljPz8Grph6wAEzUMABM1XAATTUAACr/QAAAAEDwAEzfMABNNQAAAACAgLAATOnAAAAg+5gA63jAMABM7YAAACrOmADiLgAAFwBPgNOwAEzzcABM9QAAIF2XAEcwAEz1i6r0wIAAoDAATP3wBdY0YHAATP9wBdY3wCujz0cwAE0GBbAATQPLqtLrjysIQUABYHAATQxwBdY3xbAATRLgMABNEbAF1jRhFOCWRrAATRwsCJqwAE0j2ADiM+EiBbAATSrgMABNKbAF1jRq4at5QCwSErAATTDAYLAATTKwBdY8waumXrAATTZwAE03sABNkwAAKv/AAAAAQPAATUHwAE2TAAAAAICAsABNTQAAACD7mADresAwAE1QwAAAKs6YAOIuAAAXAE+Az0cwAE1XxbAATVWLqtLrjyrVwMAAxbAATV0gMABNW/AF1muo7et7mrAATV/YAOrxsAA4HYpAK20PRfAATWegMABNZnAF1muoUQjFsABNbKAwAE1rcAXWa6jtq3tasABNc1gA4jPhIgewAE15avbAgACFsABNfqAwAE19cAXWa6jt63uFsABNf8uq0uuPAABYAOIuK2HSsABNg4BHMABNhUuq9MCAAKAwAE2NsAXWa6BwAE2PMAXWbwAro8Grpp6wAE2UcABNlbAATl9AACsAwAAAAEDwAE2bsABOX0AAAACAgLAATaKAAAAg+5gA630AMABNpkAAACrOmADiLgAAFwBPgpOwAE2yMABNtEAAIJsYAOt0AEmwAE2yAEWwAE22IDAATbTwBdasYJshMNgA63QTsABNuvAATb8AACskGADwAD6PwEWwAE3B4LAATb+wBda06vzq9mt1k7AATcnwAE3PgAArJFgA4i4ARbAATdJgsABN0DAF1rTgpCIWU7AATddwAE3agAAhXpgA4i4ARzAATeLFsABN3UWwAE3bC6rS648oLWtsaySAwADFsABN6SAwAE3n8AXWrGsAavZrfgWwAE3sIDAATerwBdasawCq9mt+YPAATe4wBdbAQCwfUnAATfPIRzAATfghcABN9PAF1tNSAEAASsAiLw+AT01AAAAAQBgA8AAUkMBFsABN/oWwAE38S6rS648qYGwJyMcwAE4C4YAwBdbz0gBAAErAAArHMABOAuGAMAXW8+pxQQABBbAATgbFsABOBIuq0uuPICssCQWwAE4JYDAATggwBdasYRTglknhXofwAE4T8AAUloBAAGFwAE4a8AXW00AAMAAUkUBXD89F8ABOIqAwAE4hcAXWrGFeoXAATiZwBdbTYTETsABOK/AATi0AACCkGADiLgBNQAAAAEAYAOIuAGFwAE4tsAXW00jHMABOMOGAMAXXIdIAQABKwAAhMABOMbAF1sphgDAF1yHAWADiLhJwAE44hbAATjvgsABOObAF1rTq+6r2a3YPgE9jsABOQnAF1x1HMABORkWwAE5EC6rS648rIQDAAOGwAE5LMAXXHWBwAE5MsAXWr+AwAE5P8AXWrEAsFE/PRfAATlVgMABOVDAF1qxoUSGwAE5ZMAXXHWt9krAATluASsGrpt6wAE5gsABOYfAATtQAACsBQAAAAEDwAE5mcABO1AAAAABAQHAATmoAAAAg+5gA63+AABcAT4FTsABObjAATnKAACrLmADhK4BFsABOdGAwAE5zMAXXWOrLq4ATsABOezAATn5AACrWGADiPMBFsABOhgWwAE6DhbAAToEFsABOfsuq0uuPIdnsA2azpyShPqDRz0cwAE6LhbAATolLqtLrjyrVwMAA4HAATpHwBddd4LAATpawBddmyEWwAE6chbAATppLqtLrjyHgbAlAK20PRzAATqMFsABOoMuq0uuPKtZBAAEgsABOqbAF12bHsABOryr2wIAAoHAATrMwBdddxbAATrfLqtLrjwAFsABOveAwAE68sAXXWOFuoe1FsABOxkWwAE7D4DAATsKwBddY4W6h7WEU4JZALA1PRzAATszFsABOyouq0uuPKvmAQABFsABO0eAwAE7QsAXXWOCaYe2AK22Bq6cesABO1XAATtawAE+ZAAArAcAAAABA8ABO2zAAT5kAAAAAQEBwAE7ewAAAIPuYAOuBQAAXAE+BE7AATuLwAE7lAAAqypgA4SuARbAATubgMABO5bAF17MqyquB07AATutwAE7vAAArIBgA6/mARbAATvHFsABO74uq0uuPKyAsC1JwAE72xbAATvugsABO9/AF18ErIGv6T4DTsABPAfAATwTAACrOmADiLgBFsABPCSCwAE8FcAXXwSsgq/qScABPEAiFsABPEmAwAE8RMAXXsyGTYhHACEcwAE8ZIPAATxYwBdfQkgBAAErAIi8PgE9i8ABPHfAF19CHMABPI4WwAE8hS6rS648rCoCAAKDwAE8pMAXX0IjFsABPMyCwAE8vcAXXwSGMK/oFsABPPkWwAE87xbAATzmLqtLrjyHZ7ANmuCcthbAAT0qFsABPSAWwAE9Fy6rS648h2ewDZrenKMBYAODGQCwVz89HMABPVEWwAE9SC6rS648q1cDAAOBwAE9YcAXXuCDwAE9a8AXX0IpAK20PgE9HMABPZsWwAE9ki6rS648q1cDAAOBwAE9q8AXXuBqwAE9u2ADq8bAAOB2KQCttD0cwAE96oLAAT3bwBdfBKyTBQAFFsABPfYuq0uuPBbAAT4FgMABPgDAF17Mhk2IRx7AAT4aq9sCAAKBwAE+KsAXXuAWwAE+NC6rS648ABbAAT5EgMABPj/AF17MgmuIQhbAAT5VgMABPlDAF17MhFOCWQCv9waunXrAAT5pwAE+bsABQB4AAKwJAAAAAQPAAT6GwAFAHgAAAAICAsABPqIAAACD7mADrgwAwAE+sQAAAKs6YAOIuAAAXAE+Az0XwAE+yYDAAT7EwBdhCqFEHMABPv8WwAE+6RbAAT7gLqtLrjyg0rAohg0BAAFqwAE/EGADiM+EiACbb64PScABPyQhHMABPzcWwAE/LYDAAT8owBdhCluuDkgBAAErAMAA/V4+Ak7AAT9MwAE/VwAArDpgA4kFAR/AAT9diR4CAAIxwAE/amADiLgAFsABP3OAwAE/bsAXYQqhRK4PAD0cwAE/kRbAAT+ILqtLrjysIQUABYHAAT+hwBdhGBbAAT+zgMABP67AF2EKhFOCWYLAAT+/wBdhkhbAAT/ggsABP9XAF2GShTqJDRbAAT/xgMABP+zAF2EKq3euEQCwSD9KwAFADwErBq6eesABQCPAAUAowAFBEgAArAsAAAABA8ABQEfAAUESAAAAAgICwAFAagAAAIPuYAOuFgDAAUB5AAAAqzpgA4i4AABcAT4CPRfAAUCRgMABQIzAF2JZoUQfwAFApIkeAgACMcABQLpgA4i4ABzAAUDdFsABQMcWwAFAvi6rS648oNKwKIYNAQABasABQO5gA4jPhIgAm28ArhlKwAFBAwErBq6fesABQRfAAUEowAFBewAAhhEBasABQRhgA8AA/VECAAABA8ABQUHAAUF7AAAAAgICwAFBXgAAAIPuYAOHWQDAAUFtAAAgqzpgA4i4AABcAT4AAAAWjBkAFoykABaNLwAWjXMAFo23ABaN+wAWjn8AFo7PABaQKwAWkUoAFpG0ABaR+AAWkjwAFpM7ABaVQgAWmv4AFpssABab1AAWnPMAFp1eABadjAAWnfoAFp+WABagVQAWpN8AFqdQABarxgAWrMEAFq8iABavvgAWsO8AFrHOABazHAAWtVsAFrcYABa4XgAWvyIAFsGtABbGCwAWxpkAFscsABbHywAWyEkAFsnyABbXPAAW2y8AFuJuABbknAAW6AIAFwC0ABcGFAAXHhEAFyaLABcnkQAXKOEAFyoWABcrCwAXK18AFy0aABcwkAAXMT0AFzOFABcz2QAXNbsAFz1LABc/eQAXQN8AF0NPABdELAAXRIAAF0XOABdHgQAXSOsAF0tqABdL8QAXTckAF07jABdPaQAXT7EAF1BQABdQtAAXUVsAF1HpABdScAAXVKQAF1iqABdZhwAXWooAF108ABdepQAXYOMAF2IyABdi1AAXYygAAABdAq6ie4Nog26SSQOslAAAAV0BmhcCYAOIuGADsCAAAAABBa69e4PBg8eD3AEAAAOD2oPcAAAAAAAAAGADrqIBPwEJAYPHmksAAAAAGAaupHuD4YP2hLgAAJffAWqD4mADwAD9UQIAAAEDhAeEuAAAAAICAoQTAAAAg+5gA4SuAIQqAAAgq0tgA7AgAABgA4i4AT4CPR6EOp0bBAAEJIRZARaETICER8AXZRiFhsAA/WUnrJUWhHOAhG7AF2UYhFOCWRaEkIGEh8AXZSSArLAkAEqEmgFqhKdgA4jDwACbJwaupXuEvYTShUIAAIXjAWqEvmADwAD9UQIAAAEDhOGFQgAAAAICAoTtAAAAg+5gA4aGAIUEAAAgq0tgA7AgAABgA4i4AT4BSoUUARaFNxaFLhaFJIGFG8AXZbeHZ7ANms+cnoT6g0cGrqZ7hUeFXIXVAACF5gFqhUhgA8AA/VECAAABA4VuhdUAAAACAgKFfQAAAIPuYAOGjwCFlAAAIKtLYAOwIAAAYAOIuAE+AUqFpAEWhcoWhb4WhbSBhavAF2Yeh2ewDZrSnJmE+oNHBq6ne4Xahe+GYwAAhXgBaoXbYAPAAP1RAgAAAQOGBYZjAAAAAgIChh8AAACD7mADhLYAhjYAACCrS2ADsCAAAGADiLgBPgFKhkYBaoZTYAOI54SXBq6oe4Zohn2G6AAAhd4BaoZpYAPAAP1RAgAAAQOGjoboAAAAAgIChpwAAACD7mADhmMAhrMAACCrS2ADsCAAAGADiLgBPgFKhsMBHobKq9wBAAEWht+AhtrAF2bNgpCGZwAGrql7hu2HAod/AACGAAFqhu5gA8AA/VECAAABA4cWh38AAAACAgKHLgAAAIPuYAOHDwCHRQAAIKtLYAOwIAAAYAOIuAE+AUqHVQEch2WBh1zAF2c7rJYBAAGAh3bAF2cvALAyBq6qe4eEh5mIEAAAhfEBaoeFYAPAAP1RAgAAAQOHrIgQAAAAAgICh7wAAACD7mADhsAAh9MAACCrS2ADsCAAAGADiLgBPgFKh+MBHofqq9wBAAEWiAOBh/rAF2efhMKwKQAGrqt7iBWIKoidAACF6AFqiBZgA8AA/VECAAABA4g6iJ0AAAACAgKIRwAAAIPuYAOGmACIXgAAIKtLYAOwIAAAYAOIuAE+AUqIbgEWiJIWiIgWiH6BiHXAF2gBh2ewDZrOnJKE+oNHBq6se4iiiLeJMAAAhb0BaoijYAPAAP1RAgAAAQOI0YkwAAAAAgICiO8AAACD7mADhggAiQYAACCrS2ADsCAAAGADiLgBPgFKiRYBFokigIkdwBdoXIW8hg0Grq17iTWJSonTAACFrAFqiTZgA8AA/VECAAABA4lkidMAAAACAgKJggAAAIPuYAOF0ACJmQAAIKtLYAOwIAAAYAOIuAE+AUqJqQEcibmBibDAF2jBrJYBAAGAicrAF2i1ALAyBq6ue4nYie2KYgAAhdoBaonZYAPAAP1RAgAAAQOJ/opiAAAAAgICigwAAACD7mADhlcAiiMAACCrS2ADsCAAAGADiLgBPgFKijMBFopXFopNFopDgYo6wBdpJYdnsA2azpyShPqDRwaur3uKZ4p8iv8AAIYDAWqKaGADwAD9UQIAAAEDipOK/wAAAAICAoquAAAAg+5gA4cfAIrFAAAgq0tgA7AgAABgA4i4AT4BSorVARyK5YGK3MAXaYyslgEAAYCK9sAXaYAAsDIGrrB7iwSLGYufAACFuAFqiwVgA8AA/VECAAABA4svi58AAAACAgKLSQAAAIPuYAOF+wCLYAAAIKtLYAOwIAAAYAOIuAE+AUqLcAEWi5QWi4oWi4CBi3fAF2nwh2ewDZrOnJKE+oNHBq6xe4uki7mMHAAAhbMBaoulYAPAAP1RAgAAAQOLwYwcAAAAAgICi8YAAACD7mADhfAAi90AACCrS2ADsCAAAGADiLgBPgFKi+0BFowRFowHFov9gYv0wBdqV4dnsA2azpyShPqDRwausnuMIYw2jKkAAIXqAWqMImADwAD9UQIAAAEDjEaMqQAAAAICAoxTAAAAg+5gA4ahAIxqAAAgq0tgA7AgAABgA4i4AT4BSox6ARaMnhaMlBaMioGMgcAXar6HZ7ANms2crYT6g0cGrrN7jK6Mw40xAACFiAFqjK9gA8AA/VECAAABA4zTjTEAAAACAgKM4AAAAIPuYAOE2QCM9wAAIKtLYAOwIAAAYAOIuAE+AUqNBwEcjReBjQ7AF2slrJYBAAGAjSjAF2sZALAyBq60e402jUuNpAAAhfMBao03YAPAAP1RAgAAAQONV42kAAAAAgICjWAAAACD7mADhskAjXcAACCrS2ADsCAAAGADiLgBPgFKjYcBao2UYAOI54SXBq61e42pjb6OSgAAhcEBao2qYAPAAP1RAgAAAQON1o5KAAAAAgICjfIAAACD7mADhhYAjgkAACCrS2ADsCAAAGADiLgBPgFKjhkBFo4/Fo4zFo4pgY4gwBdr3YdnsA2a05y9hPqDRwautnuOT45kjt0AAIXhAWqOUGADwAD9UQIAAAEDjnaO3QAAAAICAo6FAAAAg+5gA4Z9AI6cAAAgq0tgA7AgAABgA4i4AT4BSo6sARaO0haOxhaOvIGOs8AXbESHZ7ANmtOcvYT6g0cGrrd7juKO95ATAACGCQFqjuNgA8AA/VECAAABA47/kBMAAAACAgKPBAAAAIPuYAOHNgCPGwAAIKtLYAOwIAAAYAOIuAE+AUqP6QEcj/mBj/DAF2yrrJYBAAGAkArAF2yfALAyBq64e5AYkC2QlwAAhZoBapAZYAPAAP1RAgAAAQOQO5CXAAAAAgICkEYAAACD7mADhVcAkF0AACCrS2ADsCAAAGADiLgBPgFKkG0BHJB9gZB0wBdtD6yWAQABgJCOwBdtAwCwMgauuXuQnJCxkTAAAIWqAWqQnWADwAD9UQIAAAEDkMaRMAAAAAICApDfAAAAg+5gA4W9AJD2AAAgq0tgA7AgAABgA4i4AT4BSpEGARyRFoGRDcAXbXOslgEAAYCRJ8AXbWcAsDIGrrp7kTWRSpGfAACF9QFqkTZgA8AA/VECAAABA5FUkZ8AAAACAgKRWwAAAIPuYAOG0gCRcgAAIKtLYAOwIAAAYAOIuAE+AUqRggFqkY9gA4jnhJcGrrt7kaSRuZJHAACGEQFqkaVgA8AA/VECAAABA5HSkkcAAAACAgKR7wAAAIPuYAOHWQCSBgAAIKtLYAOwIAAAYAOIuAE+AUqSFgEWkjwWkjAWkiaBkh3AF24rh2ewDZrMnK+E+oNHAAAXZPEAF2WEABdl6wAXZlIAF2amABdnCAAXZ2wAF2fOABdoNQAXaI4AF2jyABdpWQAXab0AF2okABdqiwAXavIAF2tWABdrqgAXbBEAF2x4ABds3AAXbUAAF22kABdt+AAXbl8AAAAYAAYGq9t7gP2BBoHtAAGslQAAAAEDgRWB7QAAAAICAoEhAAAAgmtgA4SuAIE+AAAAq0tgA7AgAABgA4i4AT4BSYFMJYFbgIFQwBdu52ADrFE+AUqBeAEWgYoUgX/AF27nAAFgA6xRoUSsUz4BSoGnASaBpwEcgbmAga7AF27nhXUCAAJqgcdgA66iwADge4GB3sAXbvMAhLNgA4i4Bqvce4HwgfmC7gABrJcAAAABA4IIgu4AAAABAQGCEgAAAIKQYAOIuAAAYAOIuAE+AUqCowEjIhyCsICCq8AXb4FIAQABKwCIvAElgsCAgrvAF2+BYAOIw2qC2GADiM+EiICC6MAXb4EBYAOIuAar3XuC8YL6g2UAAayYAAAAAQODBoNlAAAAAQEBgxAAAACCkGADiLgAAGADiLgBPgFKgxoBIyIcgyeAgyLAF2/uSAEAASsAiLwBJYM3gIMywBdv7mADiMNqg09gA4jPhIiAg1/AF2/uAWADiLgGq955jiCOLo7wAAGsmQAAAAEDjkqO8AAAAAEBAY5SAAAAmNtgA4NeAABgA4jzAT4BSY5jJY5zgI5nwBdwW2ADg6k+AUqOiQEWjqsWjpwUjpDAF3BbAAFgA4OphP+DZoTCg0g+AUqOxAEmjsQBFo7gFo7XgI7LwBdwW4Jqg2+FOoSMYAOI8war33mO848CkHoAAayaAAAAAQOPGpB6AAAAAQEBjyUAAABbYAOFeAAAXQPAAPypAWADiLgBPgFJjzQlj0KAjzjAF3DhYAOr6T4BSo9eASMWj28Uj2XAF3DhAAFgA6vpqyWr2avsFo+VFI+LwBdw4QABYAOr6YVthXorAV0DwAD8qQFgA4i4PgJAFpBbFpBVgJBLwBdw4YVthXqBVcAA/IuQS5BiAEqQaQErBqvgecAAarzAAGrHwABuVgABrJsAAAABA8AAaujAAG5WAAAABAQEwABrAQAAAKtLYAOtrwDAAGsPAAAAgJZgA8AA/AUAwABrHQAAAKLqYAPAAP3rAMAAayoAAACHVGADwAD8BQAAYAOErgE+CknAAGs6IhzAAGtEgcAAaz7AF3GjgW0BAAGTAMAA/TUAHMAAa1KBwABrTMAXcaOBawEAARzAAGtYlIO6AQABNzUAwAD8IQDAAP0zSsAAa2ABKz9JwABrbxzAAGuEFsAAa3yAwABrc8AXcZWEQ7AqSAEAASsAwAD9XkrAAGuNASs/ScAAa5whFsAAa9UWwABrwBbAAGu5FsAAa7IWwABrqoDAAGuhwBdxlYRDsCqVG6jugkWpz55Tp3aHd4r3SsAAa/MBKz9OwABsCcAAbA8AAKycYAPAAPoRARzAAGwkHsAAbBjAAPo+AQABgcAAbB3AF3GjAKnzAQABN0AAwAD6N07AAGw9wABsRgAAq5ZgA8AA+hEBHsAAbE/AAPo+AQABHMAAbFqEwABsVMAXcqCp8QAAAADAAPo6AEnAAGxpHMAAbHOEwABsbcAXcqBIAQABhcAAbHbAF3LbAMAA/V5KwABsgAErP07AAGyWwABsmwAAgbBgA8AA/esBNQAAAAEAYAPAAP3rAYLAAGydwBdxsyMcwABspYYAwBdzVUgBAAErAAAcwABsroHAAGyowBdxoyMAAAAAwAD8MoYAwBdzVQFgA8AA/etOwABsw8AAbMsAAKydYAPAAP3rASMiHMAAbNKGwABszcAXc0GB1gEAASesngDAAP39ARzAAGzrhsAAbObAF3NBgdYBAAEnrJ8AwAD9/STAAG0sAiesnhzAAG0ShcAAbQnAF3LbhAkBAAE3EADAAPo8HMAAbTeFwABtLsAXctsjAAAAAMAA+jsBYAPAAP3rTsAAbUnAAG1QAABhYAPAAPwFATUAAAABAGADwAD8BQE1AAAAAQBgA8AA/esBgsAAbVLAF3GzIxzAAG1bFADAF3RQCABIAQABKwAAKxbAAG1bFADAF3RQCABhwAD97wFgA8AA/AUjHMAAbWIUAMAXdEMIAEgBAAErAABqwABtZWADwAD8BRUUAMAXdEMIAAFgA8AA/AVKwABtcQEcwABtiBbAAG2BgMAAbXjAF3GVlVywLKEhAQABHMAAbboWwABtrIDAAG2jwBdxlZVcsCyg3AMAAxzAAG3/asAAbdJdA5FlAWEDAmADwAD962ADwAD962ADkU7AAJW2iAsCAAKGwABuHMAXc0GHwABuIsAXc6IAkWmDwABuNsAXccMUwABuTMAXdDAIAADAAFOzAMAAU7gDeXp7ABd1YAAWAjYAFgMBABYFMAAWBiEAFgeYABYIjwAWDHcAFhgUABYbcQAWHJwAFh4BABYfOQAWIEgAFiD0ABYhvQAWIt4AFiRyABYlaQAWJ3kAFij3ABYrCgAWLEQAFi5SABYvoQAWMOoAFjQcABY0rAAWN0sAFjqyABY7kgAWPU0AFj7NABZATQAWQhIAFkP4ABZFZAAWRzQAFklOABZL5gAWTSYAFk6BABZPCQAWT/8AFlE/ABZSzAAWU/kAFlWzABZXTQAWWFwAFln0ABZbFwAWYNIAFmI6ABZjkwAWZIoAFmZLABZs4gAWbe8AFnG4ABZyrgAWd6oAFnjNABZ6IQAWe4wAFnzEABZ+AAAWf4IAFoC8ABaBSwAWg5sAFotHABdkpQAXbsgAAABIABduygAXb2QAF2/RABdwPgAXcMQAF3FuABd1YAAAAAYAAgSuvqygfAAAG4DyAQDAAFQ6AAEBBayhogCoaayiqGuBmQEAqF8AAQEDqEan46hFgd8BAMAAVHYAAQEBqG+CHAEAwABUgQABAQGeToJMAQDAAFTVAAEBAahMgpsBAMAAVOQAAQEBnmKCyAEAwABVCQABAQGn4oMFAQDAAFUPAAEBAqhxqGWDRQEAwABVKQABAQGeZIN1AQDAAFVCAAEBAahmg7oBAMAAVV0AAQEEqE2ocJ5mqHSEVgEAwABVyAABAQGoZ4SVAQDAAFXaAAEBAZ5jhNIBAMAAVegAAQEBnmeFBgEAwABWLAABAQGoIoU4AQDAAFY/AAEBAahOhW4BAMAAVkkAAQEBqHOFtQEAwABWXAABAQGso4XrAQDAAFZ5AAEBAagqhhsBAMAAVn8AAQEBnmWGVAEAwABWlwABAQGoaIaGAQDAAFaqAAEBAahyhr8BAMAAVr8AAQEBnmiG7QEAwABW1QABAQGeaYcyAQDAAFblAAEBAagrh3EBAMAAVwEAAQEBqGqHpQEAwABXDgABAQGodSWoaqiSqKjAAFQ/wABUXMAAVGTAAFQ9wABUPsAAVHfAAFSCwABU1sAAVOXAAFUKwABVEMAAVSHAAFUqwABVQ8AAVV7AAFWHwABVnsAAVbzAAFXJwABV28AAVenAAFYtwABWQMAAVkrAAFZdwABWesAAVoDAAFaYwABWrcAAVsDAAFbWwABW5sAAVwLAAFcPAAAAAAABfAAXeNsAF3jZAAAAAAAXeNsAAAAAAAIErr+spH0AAAKA+wAAncic5gCBKwAAkm8AAQEEgjmCPIItgjcAAAAFAq7AfYGega2JrgefPgAAAWABwAD9UQAAAQSuw32CM4JBBKylrr8AYAOuwAErAQWuzAAAAAAEAAADAAAAAAAAAAAAYAOuwAE/AQkBAMAA/WcAAAAABQauxX2BvoHLgdYAAoOwAAAAAQOBz4HWAAAAAQEBgdQAAACA9WADwAD8BQAAYAOuwAAGrsZ9gdqB54H5AAKfpgAAAAEDgfKB+QAAAAEBAYH3AAAAgPVgA8AA/AUAAGADrsAABq7JfYH+ghOCGgECnW0AAAABA4IaghoAAAAAAAAAYAOd9AAGrsp9gkWCXYQAAQGspgAAAAEDgmuEAAAAAAAAAABgA67AAT4CSYJxHIKEGoJ1rsNIAQABKwDAAP1ePgROgqKCqgAAl1tdA8AA/KkBYAPAAP3rAR6CsMAA9gABAWADwAD96wEWgtVqgs5dA8AA/KkBYAOd9MAArJ9hwAD82ABFguQBgu2C7wAAYmADwAD8BQGTARyC9oGC9MAXendjAQABFoMQaoMJXQPAAPypAWADnfTAAKyfYcAA/NgAwAD9MgGJgxjAF3p3HIMZgYMYwBd6d2QBAAGUAMAA/So+AT0cgy6AgyfAF3oygL8CAAKBgy/AF3p3FoNPHINLaoNFXQPAAPypAWADnfTAAKyfSwEAAYGDTMAXencAwAD8uIJen1IAwAD8uT0cg22Ag2XAF3oygK4BAAE0g3IDg3KDigAAAAICAoNzAAAAgdVgA8AA/esAg3YAAACCSmADwAD96wAAYAPAAPwFAUqDfAEcg36Bg3zAF3s4gksBAAGCg4jAF3tGAMAA/fsAwAD8vD0bg5Ouwx6DpK7HBAAEk4CDwMAXejKTFoPUgIPMwBd6MmHAAPzYAD9Kg+cBGoPursMGrsd9hAWEGYmsAAGspwAAAAEDhDGJrAAAAAQEBIQ9AAAAamADwAD8BQCEUQAAAJdbXQPAAPypAWADwAD96wCEXgAAAINcYAPAAPwFAIRqAAAAYWADwAD8BQAAYAOuwAE+Ck6EfYSJAACsqGADwAD6PwEpToSphK8AAJhmXQPAAPypAWADrsABHoS1wAD2AAEBYAOuwAEchNAchMtqhMhgA8AA/AXAAJpggY0BAAFqhM1gA8AA/AXAAF9+AMAA/StkAQABlADAAP0qAEAhHITog4ThwBd7/kgBAAGTAMAA/SiE4YTsAE6E94T9AACsqWADwAD8BQGTToUKhRUAAKyqYAPAAPwFARyFF5SBxAAAAADAAPwoToUkhSsAAKyrYAPAAPo/ASpFhTgBhUGFQwAAYmADwAD8BQGChUXAF3vwARyFTxSFTcAXfNsJAGMBAAEchViChVHAF3vwZAEAAYOFWsAXe/4AwAD9KgDAAP0yARWFYsAXfNsJHIVjFIViwBd82wkAZAEAAZQAwAD9Kj4CSYVvHIWFFoV+HIV6gYVzwBd720sBAAEUhXvAF3zbCQAAwAD8uGHAAP3vSAEAAYCFiMAXe84AwAD9KD4BPRWFmcAXfMcIKT9JhbYchcwWhcUchcGBhbrAF3vbSwEAARSFwsAXfNsJAADAAPy4YcAA/e+AlwEAAYCFzsAXe84AwAD9ND4DToXjheUAAID1YAPAAPwFARyF8hyF7oGF58AXe9tLAQABFIXvwBd82wkAAMAA/LiECwEAAYCF/cAXe84AwAD9+UmGDSIchhRqhhFgA8AA/AXAAF9+gWsBAAEUhhfAF33GCgAAwAD9MwAchh4UhhzAF33GCgCBawEAAWqGIWADwAD8BcAAmgMAwAD9Mz4BPYyGMcAXfBQqP0mGWCEchmKGhlzAF3yYSAEAARSGZcAXfcYKAADAAP0oPgNJhnQhHIaDh4Z4wBd8qUgBAAEchoaUgcQAAAAAwAD8KADAAP0oPgJAHIaxHIakhYafwBd8JUsBAAEchquGhqXAF3yYgY0BAAFqhq1gA8AA/AXAAF9+AMAA/SsAwAD8uEgBAAErAMAA/V6Gn4a4AD0chsyFhsfAF3wlgL8CAAIchtOGhs3AF3yYgY0BAAFqhtVgA8AA/AXAAF9+AMAA/SsehtuuxwQABByHC4CHBcAXe85kAQABlADAAP0qgYcQwBd724eHGcAXfKkchycUhyXAF3zbCQCBjQEAAYeHKcAXfKkAwAD9KwAAwAD8uT89j4dMwBd8qRSHWcAXfNsJAD2Oh2bAF3yYFIduwBd9xgoAPz9Jh40hHIech4eRwBd8qUgBAAEch5+UgcQAAAAAwAD8KADAAP0oPgJAHIfEHIe3hYeywBd8JUsBAAEch76Gh7jAF3yYgY0BAAFqh8BgA8AA/AXAAF9+AMAA/SsAwAD8uEgBAAErAMAA/V6HsofLAD0ch9mFh9TAF3wlgL8CAAIch+CGh9rAF3yYgY0BAAFqh+JgA8AA/AXAAF9+AMAA/Sseh+iuxwQABByIEoCIDMAXe85kAQABlADAAP0qgYgXwBd724eIIMAXfKkciDwciDOCiCzAF3vwZAEAAYOINcAXe/4AwAD9KoGNAQABh4g+wBd8qQDAAP0rAADAAPy5PgJAHIhsg4hlwBd7/kgBAAGUAMAA/SiIZYhwAEqIeQEfiISu6wEAARyInIGIlcAXe9tLAQABgoidwBd78ADAAPy4AE6IuIi/AACda2ADwAD96wEjFIjBwBd8xwgAHIjRgYjKwBd720sBAAGCiNLAF3vwAMAA/LgrAWADwAD960mI5oSI6sAXfBQ+Aj2NiP/AF3wlHIkNhYkHwBd8JYFYAQABHIkYaokVYAPAAPwFwACaFYGNAQABaokaYAPAAPwFwABffgDAAP0rAMAA/MxKiSUBH4kwrtwCAAKFiUvAF3wlFIlSwBeA0AkAAD4BSoluAR+Jea7iAgAChYmUwBd8JRSJm8AXgNAJAAAAABd5cAAXeaEAF3nSABd59QAXe7EAF4GWAAAABQKuzX2J6In3jOIHrKwAAAFgAcAA/VEAAWABrsACBK7PfYo+ikMJmGYAXQPAAPypAWADrsAABK7QfYpeimUJnW0AYAOd9AABBa7WfYpqimqK5gAAAAOKe4rmAAAAAgICioEAAASYZl0DwAD8qQFgA67AAIqPAAAAnWtgA8AA/esAAGADrs0BPwMIAa7PgADAF4ISCACu0CMcirKBiqvAF4IlSAEAASsAwAD9+iscit0aitWeOksBAAGBit7AF4IlAMAA/O4BYAOd9AkBimrAAP1nAAAAAAMGrtJ9iuuK+IsDAAKDsAAAAAEDivyLAwAAAAEBAYsBAAAAgPVgA8AA/AUAAGADrsAABq7TfYsIixWLJwACn6YAAAABA4sgiycAAAABAQGLJQAAAID1YAPAAPwFAABgA67AAAau1H2LLIszjOAAACMAAAABA4s7jOAAAAAAAAAAYAPAAP3rAT4HTotRi1QAAIPkYAPAAP41AR+LWsAA/lQAAAAAPRyLcYCLbsAXgxKCigEAASeZlgDAAP5JSYuBIRyLjRaLhS6dba7QSAEAASsAwAD9Xj4DPRyLoYCLnsAXgxKCigEAASeDiADAAP5JPRyLtoCLs8AXgxKCigEAARaLvC6dba7QAMAA/kk9HIvPgIvMwBeDEoKKAQABJ4DZAMAA/kk/Tov4i/wAAKytXQPAAPypAWADrsABFov+Lphmrs9FjAkBjBKMFAAAYmADwAD8BQGTARyMG4KMGcAXg85jAQABFowhgYwdwBeDrmHAAPzYAMAA/TIBiowpwBeDzhyMKoKMKcAXg85kAQABlADAAP0qPgFJjDYhHIxBHIw9gYw6wBeDrksBAAGCjD7AF4POAMAA/LhIAQABKwDAAP1ePgE9HIxXgIxUwBeDEoKKAQABJAAEHoxkwAD+EwEAATGMeWADwAD8BQEcjHyCjHrAF4POZAEAAWqMfmADwAD8BcAAmhUAwAD9KgAng1UcjJmBjJbAF4OuSwEAAYKMmsAXg84AwAD8uCesrgDAAP5JPz0cjLiAjLXAF4MSgooBAAEnmZcAwAD+SUqMyAEcjNKAjM/AF4MSIwAAAADAAP5OAAAXgokAF4K6ABeC6wAXhOgAAAADAq7XfYzljOuODgOsrwAAAWABrs0AAAABBa7cfY0kjSSNsgAAAAONPo2yAAAAAgICjVIAAACYZl0DwAD8qQFgA67AAI1gAAAAnWtgA8AA/esAAGADrtcBPgFAHI2fFo2YgI2SwBeFLWHAAPzYSAEAARyNqhyNpWqNomADwAD8BcAAmmCBjQEAAWqNp2ADwAD8BcAAmhUAwAD9K2QBAAGUAMAA/SoAwAD9KI2Sja0AAQkAjXCu1gIAAoCNdsAXhS2BjX3AF4VAAAIGrtl9jbeNxI3gAACDsAAAAAEDjciN4AAAAAEBAY3NAAAAgPVgA8AA/AUAAGADrsABSo3TARyN2BaN0y6YZq7PSwEAARyN24CN2cAXheKBjQEAAWqN3WADwAD8BcAAmhUAwAD9KwDAAPy4Bq7afY3ljfKODAAAn6YAAAABA439jgwAAAABAQGOAgAAAID1YAPAAPwFAABgA67AAUqOCAErAAAXhcUAF4YvABeGZQAAAAICrt19jhGOF49DA6ywAAABYAGuzQAAAAEFruJ9jlCOUI7eAAAAA45qjt4AAAACAgKOfgAAAJhmXQPAAPypAWADrsAAjowAAACda2ADwAD96wAAYAOu3QE+AUAcjssWjsSAjr7AF4amYcAA/NhIAQABHI7WHI7Rao7OYAPAAPwFwACaYIGNAQABao7TYAPAAPwFwABffgDAAP0rZAEAAZQAwAD9KgDAAP0ojr6O2QABCQCOnK7WAgACgI6iwBeGpoGOqcAXhrkAAgau332O447wjwwAAIOwAAAAAQOO9I8MAAAAAQEBjvkAAACA9WADwAD8BQAAYAOuwAFKjv8BHI8EFo7/Lphmrs9LAQABHI8HgI8FwBeHW4GNAQABao8JYAPAAPwFwABffgDAAP0rAMAA/LgGruB9jxGPHo9BAACfpgAAAAEDjymPQQAAAAEBAY8uAAAAgPVgA8AA/AUAAGADrsABSo80ARyPORaPNC6YZq7PSwEAARyPPICPOsAXh8WBjQEAAWqPPmADwAD8BcAAX34AwAD9KwDAAPy4AAAXhz4AF4eoABeIEgAAAAICruN9j3uPgZCYA6yxAAABYAHAAP1RAAFgAa7AAQSu5X2PxY/MCZ1tAGADnfQAAQWu632P0Y/RkB4AAAADj+GQHgAAAAEBAY/pAAAAnWtgA8AA/esAAGADruMBPwIIAK7lHJAWGpAOnjpLAQABgJAXwBeIagDAAPzuCQGP0cAA/WcAAAAAAwau532QI5AwkEMAAIOwAAAAAQOQNJBDAAAAAQEBkDkAAACA9WADwAD8BQAAYAOuwAFKkD8BKwau6H2QR5BUkG4AAJ+mAAAAAQOQX5BuAAAAAQEBkGQAAACA9WADwAD8BQAAYAOuwAFKkGoBKwau6X2Qc5B6kJYAACMAAAABA5CCkJYAAAAAAAAAYAPAAP3rAUqQiAEWkJAWkIgunW2u5YJen1IAABeIqQAXiN8AF4kVABeJTAAAAAMAAAF9ABeJYwAXeRsAF4GzABeE/QAXhnYAF4gjABeJYQAAAAUAF4ljAAAAAAACBK7srLJ+AAAAAAAAAQKu7X6A+4EAhOALoGcAAAFgAcAA/VEAAAYEru9+gQCBAAknAGADwAD8BQAErvF+gQCBAAkoruwAYAPAAP3rAASu8n6BAIEABikAXQPAAPypAWADru0BagBdA8AA/KkBYAOu7cAA4IAErvN+gtyC3AaHjQBgA67tAWoAYAOu7cAAwIgErvR+g+KD4gapPQBgA67tAWoAYAOu7cAAwMgErvV+hNaE1gadUABgA67tAWoAYAOu7cAAwmoBBa75foEAgQCE4AEAAAOBAITgAAAAAgICgQAAAAQnYAPAAPwFAIEAAAAEKGADwAD96wAAYAOu7QE/AwgAru+AAMAXim0IAK7xgQDAF4p6CQAAwAD9ZwAAAAABBq73foEAgQCE4AAAIwAAAAEDgQCE4AAAAAAAAABgA8AA/esBSgABDwAurvEAABeKrwAXitsAAAABAAABfgAXiuoAF4mcABeK6AAAAAEAF4rqAAAAAAACBK76rLN/AAABgPMAAJ0XAAEBAZyzAAAAAgKvEH+BG4EggZILrLQAAAFgAcAA/VEAAAoErxJ/gSCBIAknAGADwAD8BQAErxR/gSCBIAkorvoAYAPAAP3rAASvFX+BIIEgBikAXQPAAPypAWADrxABagBdA8AA/KkBYAOvEMAA4QwErxZ/gTGBMQasvABgA68QAWoAYAOvEMAA4JUErxd/gT2BPQasvQBgA68QAWoAYAOvEMAA4KYErxh/gUaBRgasvgBgA68QAWoAYAOvEMAA4LcErxl/gVOBUwasvwBgA68QAWoAYAOvEMAA4MgErxp/gV+BXwaswABgA68QAWoAYAOvEMAA4NkErxt/gWiBaAaswQBgA68QAWoAYAOvEMAA4OsErxx/gY2BjQaswgBgA68QAWoAYAOvEMAA4P0BBa8gf4EggSCBkgEAAAOBIIGSAAAAAgICgSAAAAQnYAPAAPwFAIEgAAAEKGADwAD96wAAYAOvEAE/AwgArxKAAMAXjFwIAK8UgQDAF4xpCQAAwAD9ZwAAAAABBq8ef4EggSCBkgAAIwAAAAEDgSCBkgAAAAAAAABgA8AA/esBSgABDwAurxQAABeMngAXjMoAAAABAq8hf4gziDmNfQOgaQAAAWABwAD9UQAAAgSvI3+IWYhdCYJnAGADrxAABK8kf4hsiHAJrMMAYAPAAPwFAAEFryx/iHWIe4iZAQAAA4iDiJkAAAACAgKIiQAABIJnYAOvEACIlAAABKzDYAPAAPwFAABgA68hAT8DCAGvI4AAwBeNLQgBrySBAMAXjTkJAYh7wAD9ZwAAAAAEBq8mf4ieiKaKfAQBnOwAAAABA4i5inwAAAABAQGIwQAAAIPsYAPAAP3rAABgA68hAT4ISYjPHojTwAD15gIAAieEJICI6cAXjY0ASojyAWqI+WADryHAAOEuP0mJBx6JC8AA9eYCAAInhCeAiR7AF42NAEqJJwFqiS5gA68hwADhPD9JiTkeiT3AAPXmAgACJ4QqgIlUwBeNjQBKiV0BaolkYAOvIcAA4Uo/SYlzHol3wAD15gIAAieEKYCJjcAXjY0ASomWAWqJnWADryHAAOFZP0mJqx6Jr8AA9eYCAAInhCWAicLAF42NAEqJywFqidJgA68hwADhaD9Jid0eieHAAPXmAgACJ4QjgIn1wBeNjQBKif4BaooFYAOvIcAA4Xc/SYoRHooVwAD15gIAAieEJoCKJsAXjY0ASoovAWqKNmADryHAAOGGP0qKPwEmij8BHopGnRsEAASAilDAF42NJ6zEHIpvlIHEAAAAAMAA/CgrAGADryEGryh/ioGKgYrHAAAjAAAAAQOKiYrHAAAAAAAAAGADwAD96wFKio8BJIrHAyesxRyKoySKogEWip0ugmevI4C+AQABFoq9J6zGYcAA/e8AwAD+ASeDIQavKX+KzIrXjDEAAYMPAAAAAQOK34wxAAAAAgEBiu8AAACiAl0DwAD8qQFgA68hAAGLAAAAAIQaYAPAAPo/AWqLDGADwAD6PwBgA8AA/AUBPgROi3qLgQAAgXZgA8AA/AUBI4GLg8AXj3Bqi5BgA8AA/AUVkwFgA8AA/AVJi6Yci7SAi6rAF49cSAEAASsAwAD9XkqLvQGCi8TAF4+SP0aL0Iv1i94AAACoKGADryEAgIvqwBePXD4BPYqL/cAXj5IcjASCi/3AF4+SgQYBAAEWjBCDjAfAF4/jrMOvJADAAPweSowgAYKMJ8AXj5IGryp/jDaMQY17AAGsxwAAAAEDjFiNewAAAAEBAYxgAAAAgl5gA8AA/esAAGADwAD8BQE+BUmMbhyMeYCMcsAXkEpIAQABKwDAAP36SoyCAZM/SYyQHoyUwAD15gIAAieEJ4CMp8AXkEoASoywARaMvWqMt2ADryHAAOE8rMOvJD9JjMcejMvAAPXmAgACJ4QlgIzewBeQSgBKjOcBFoz0aozuYAOvIcAA4Wisw68kP0mM/h6NAsAA9eYCAAInhCaAjRPAF5BKAEqNHAEWjSdqjSNgA68hwADhhqzDryQ/So0xASaNMQEejTidGwQABICNQsAXkEonrMgcjW6UgcQAAAAAwAD8KCsAYAPAAPwFAAAXjXAAF47pABePPwAXkC0AF5E8AAAABBQErvx/gZ+BrwaoIwBgA8AA/AUBaoGuYAPAAPwFFQSu/X+BvIHZBqBqAGADwAD8BQFqgdVgA8AA/AUhBK7+f4HmggQGoGsAYAPAAPwFAWqCAGADwAD8BYFXBK7/f4IRgjIGqCQAYAPAAPwFAWqCLmADwAD8BYNHBK8Af4I/glwGoGwAYAPAAPwFAWqCWGADwAD8BYNaBK8Bf4JpgoQGqCUAYAPAAPwFAWqCgGADwAD8BYM0BK8Cf4KRgrwGqH0AYAPAAPwFAWqCuGADwAD8BYR5BK8Df4Mjg1gGqHwAYAPAAPwFAWqDVGADwAD8BYSgBK8Ef4Oag84GrMkAYAPAAPwFAWqDymADwAD8BcAA4ZQErwV/hCSEVgaoegBgA8AA/AUBaoRSYAPAAPwFwADeagSvBn+EtITkBqh7AGADwAD8BQFqhOBgA8AA/AXAAN6uBK8Hf4VIhX0GqHkAYAPAAPwFAWqFeWADwAD8BcAA3jAErwh/hfyGBwasygBgA8AA/AUBaoYGYAPAAPwFCQSvCX+GGYZXBqy8AGADryEBaoYqYAOvIcAA4S4Erwp/hmmGngasvQBgA68hAWqGd2ADryHAAOE8BK8Lf4awhvUGrL4AYAOvIQFqhsZgA68hwADhSgSvDH+HB4dFBqy/AGADryEBaocYYAOvIcAA4VkErw1/h1eHjAaswABgA68hAWqHZWADryHAAOFoBK8Of4eeh9YGrMEAYAOvIQFqh61gA68hwADhdwSvD3+IAYgwBqzCAGADryEBaogNYAOvIcAA4YYAAX8AF5OmABeLHwAXjNcAF5FVAAAAAgAXk6YAAAAAAAIEry2sy4CAAAABgP4AAIIuAAEBAYZaAAAAAB4Ery+AgIE2gVMFrMwAYAOIgwEegUqIjAEAASeDdwAErzCAgIFhgXgFrM0AYAOIgwEegW+IjAEAASeBBgAErzGAgIGGgaEFoG0AYAOIgwEegZWIjAEAAScgAASvMoCAga+ByAWszgBgA4iDAR6Bv4iMAQABJ4O7AASvM4CAgdaB8gWszwBgA4iDAR6B6YiMAQABJ1AABK80gICCAIIkBazQAGADiIMBHoIaiIwBAAEnl8oABK81gICCMoJQBazRAGADiIMBHoJGiIwBAAEnl8sABK82gICCXoKBBazSAGADiIMBHoJ3iIwBAAEnmesABK83gICCj4KnBZlYAGADiIMBHoKfiIwBAAEnAAAErziAgIK1gtAFrNMAYAOIgwEegsaIjAEAASdIAASvOYCAgt6C/QWs1ABgA4iDAR6C9IiMAQABJ4CXAASvOoCAgwuDMwWs1QBgA4iDAR6DKYiMAQABJ4FtAASvO4CAg0GDZgWs1gBgA4iDAR6DVYiMAQABJ5w2AASvPICAg3SDkQWgbgBgA4iDAR6Dh4iMAQABJ0sABK89gICDn4O9BaBvAGADiIMBHoOyiIwBAAEngL8ABK8+gICDy4PpBazXAGADiIMBHoPfiIwBAAEng7oABK8/gICD94QWBazYAGADiIMBHoQIiIwBAAEnYQAEr0CAgIQkhEAFrNkAYAOIgwEehDeIjAEAASdjAASvQYCAhE6EcwWs2gBgA4iDAR6EaYiMAQABJ4FrAASvQoCAhIGEmgWgcABgA4iDAR6EkYiMAQABJ4GNAASvQ4CAhKiExAWs2wBgA4iDAR6Eu4iMAQABJ4OIAASvRICAhNKE7wWs3ABgA4iDAR6E5YiMAQABJ4aHAASvRYCAhP2FGQWs3QBgA4iDAR6FEIiMAQABJ5npAASvRoCAhSeFUgWs3gBgA4iDAR6FPoiMAQABJ5z4AASvR4CAhWCFewWs3wBgA4iDAR6FcoiMAQABJ5W0AASvSICAhYmFoQWgcQBgA4iDAR6FmIiMAQABJ2QABK9JgICFr4XOBazgAGADiIMBHoXEiIwBAAEng7wABK9KgICF3IX9BazhAGADiIMBHoXyiIwBAAEnlbUABK9LgICGC4YkBaziAGADiIMBHoYbiIwBAAEnhIwABK9MgICGMoZVBazjAGADiIMBHoZHiIwBAAEngcQAAAGAgAAXl14AF5PgAAAAAAAXl14AAAAAAAIEr02s5ICBAAAQgPMAAJ3IAAEBAYITgR8AAMAAVxQAAQEBrOWBTQAAwABYOAABAQGgc4F3AADAAFklAAEBAazmgawAAIwhAAEBAofRj1GB/AEAwABZMAABAQGgcoImAQDAAFKfAAEBAal9gmgBAMAAWT4AAQEBoHSCrgEAwABZUAABAQGgdYLvAQDAAFcUAAEBAazlgx0BAMAAWZAAAQEBrOeDTgEAwABZngABAQGgdoOBAQDAAFg4AAEBAaBzg6sBAMAAWSUAAQEBrOaD4AEAwABZtQABAQGs6IQcAQDAAFm7AAEBBKB3oHigeaB6DsAAUqDAAFcVwABYO8AAWSbAAFkxwABZQ8AAWVbAAFmRwABZn8AAWbbAAFm9wABZwcAAWcjAAFnJAAABAq9QgIGEeIR+hkUDrOkAAAFgAcAAVxUAAAEEr1KAgYTDhOYJrOoAXQPAAPypAWADwABZJgExhORgA8AAWSYAAQWvVgAAAAAEAAADAAAAAAAAAAAAYAOvUAE/AQkBAMAAWDcAAAAAAQavVICBhOuE8IZDAACiJgAAAAEDhQaGQwAAAAMDA4UWAAAAImADkU4AhSUAAACf62ADnrEAhTcAAACdD2ADnrEAAFwBPgJJhZYchaKAhZrAF5kmSAEAAWqFpWADkVnAAGrPAMAA/V4+AUqF1AA/PRyGARaF5i6s6q9SVgEAAR+GCcAAWS8DAAOBhiDAF5kxgoYswBeZPYCGNsAXmSYAAMAA/LoAABeZCAAXmasAAAABAAEGr0+AgYZIhlqHHQABgwcAAAABA4Zfhx0AAAABAQGGZgAAAJU6YAOesQAAXQPAAPypAWADwABZJgE+BE6GioaTAACpkmADr1ABH4aZr1YAAAAAToa9hsQAAKFVYAPAAFg7AR+GysAAWSQBAAGBhtHAF5n2AD0chuWCht7AF5oNqZMBAAGAhu/AF5nYAMAAWE5KhvoBFocKgYcBwBeZ9qzqr1IBgIEAF5pcABeYoQAXmbgAAAABABeZugAXmlwAAAABAAIEr1es64CCAAADgPAAAJ0XAAEBAZyzgRgAAIwhoGgAgT0AAJJvAAEBFIIulcCWE4IvlcKCM5YRlcOCNpXBlfuV/5YGlgqWC5YMlg2WD5YclhsAAAACAq9igIKCo4KogzALoHsAAAFgAcAA/VEAAAsEr2SAgoKogqgJJwBgA8AA/AUABK9mgIKCqIKoCSivVwBgA8AA/esABK9ngIKCqIKoBikAXQPAAPypAWADr2IBagBdA8AA/KkBYAOvYsAA4iQEr2iAgoKygrIGrPQAYAOvYgFqAGADr2LAAOGbBK9pgIKCvIK8Bqz1AGADr2IBagBgA69iwADhrASvaoCCgsaCxgas9gBgA69iAWoAYAOvYsAA4b0Er2uAgoLZgtkGrPcAYAOvYgFqAGADr2LAAOHOBK9sgIKC7ILsBqz4AGADr2IBagBgA69iwADh3wSvbYCCgvmC+Qas+QBgA69iAWoAYAOvYsAA4fEEr26AgoMGgwYGrPoAYAOvYgFqAGADr2LAAOIDBK9vgIKDHIMcBqz7AGADr2IBagBgA69iwADiFQEFr3OAgoKogqiDMAEAAAOCqIMwAAAAAgICgqgAAAQnYAPAAPwFAIKoAAAEKGADwAD96wAAYAOvYgE/AwgAr2SAAMAXnDcIAK9mgQDAF5xECQAAwAD9ZwAAAAABBq9xgIKCqIKogzAAACMAAAABA4KogzAAAAAAAAAAYAPAAP3rAUoAAQ8ALq9mAAAXnHkAF5ymAAAAAQKvdICCpN2k7KVqB6z8AAABYAHAAP1RAAAAAQWveAAAAAAEAAADAAAAAAAAAAAAYAOvdAE/AQkBAMAA/WcAAAAAAQavdoCCpQalC6VoAAKs/QAAAAEDpR6laAAAAAQEBKU0AAAAImADkU4ApUcAAAiEW1sApVUAAACDXGADwAD8BQClYQAAAGFgA8AA/AUAAFwAAAAXnPUAF51FAAAAAQAJBq9ZgIKDM4M5hVcAAaB8AAAAAQODRYVXAAAAAQEBg00AAACDGWADwAD96wAAYAOvYgE+CUmDWByDYoCDXMAXnXKB1gEAASegAADAAP39SoN1AWqDgmADr2LAAOHOP0mDlRyDn4CDmcAXnXKB1gEAASegBADAAP39SoOzAWqDwGADr2LAAOIVP0mD1hyD4ICD2sAXnXKB1gEAASegAQDAAP39SoPzAWqEAGADr2LAAOG9P0mEExyEHYCEF8AXnXKB1gEAASegBQDAAP39SoQxAWqEPmADr2LAAOIDP0mEVByEXoCEWMAXnXKB1gEAASeDrgDAAP39SoRvAWqEfGADr2LAAOGsP0mEhhyEkICEisAXnXKB1gEAASegAgDAAP39SoSiAWqEr2ADr2LAAOHxP0mEvByExoCEwMAXnXKB1gEAASeDQgDAAP39SoTXAWqE5GADr2LAAOGbP0mE7hyE+ICE8sAXnXKB1gEAASegAwDAAP39SoUKAWqFF2ADr2LAAOHfP0qFJAEmhSQBHoUrnRsEAASAhTXAF51yJ6B8HIVMlIHEAAAAAMAA/CgrAGADr2IGr1qAgoXBhcWINwABrP4AAAABA4XliDcAAAACAgKF7QAAAIMZYAPAAP3rAIX4AAAAamADwAD8BQAAYAPAAPwFAT4DToYNhhcAAJ+4XQPAAPypAWADwAD8BQEWhh+AhhnAF58kn7jAAP3zQUWGLAGGNYY3AABiYAPAAPwFAYGGOcAXnzIBHIZCg4ZAwBefdWMBAAEWhk6ChkTAF59KYcAA/NgAwAD9MgGLhlbAF591HIZXg4ZWwBefdWQBAAGUAMAA/SpBPgZOhmWGagAAgpNgA8AA/AUBHIZ1goZswBefSksBAAGDhnbAF591AMAA/LhJhn4choeEhoLAF5/NSAEAAWqGimADwAD8BYQPAMAA/Sg+Aj2Lhp7AF591HIafg4aewBefdWQBAAGUAMAA/SpJhqkchq+Dhq3AF591YwEAARaGu4KGscAXn0phwAD82ADAAP0yPgE9jIbNwBefzRyG3YKG1MAXn0pLAQABg4bewBefdQDAAPy4PgFChvkAP0mHEiIchxuEhxbAF5/NSAEAAWqHHmADwAD8BYP7AMAA/SgBHIcrhIcmwBefzUgBAAFqhy5gA8AA/AWDNADAAP0oQoc2AT9Jh0Qch02Eh0jAF5/NSAEAAWqHUGADwAD8BYQBAMAA/Sg+AkmHXSIch2cch2ODh2HAF591ZAEAAZQAwAD9KmMBAAEWh3OCh2nAF59KYcAA/NgAwAD9MgAch44ch4aCh33AF59KSwEAARyHiYOHh8AXn3VkAQABlADAAP0qAMAA/LhIAQABaoeRYAPAAPwFg/4AwAD9KD4BPYuHoMAXn3Uch6GDh6DAF591ZAEAAZQAwAD9Kj9Kh7MBHIe8g4e6wBefdWQBAAGUAMAA/So/SYfLHIfUhIfPwBefzUgBAAFqh9dgA8AA/AWD/gDAAP0oPgFKh+QBHIftg4frwBefdWQBAAGUAMAA/So/Qof8AEqIKQGBiDDAF58yBq9bgIKIOog+ijwAAaz/AAAAAQOIToo8AAAAAgICiFYAAACDGWADwAD96wCIYwAAAKHLYAOvYgAAYAPAAPwFAT4CR4hugYh2wBeiDwQCiI5qiI5gA69iwADhm4ilaoilYAOvYsAA4awAPgFKiLMBlAKIzWqIzWADr2LAAOG9iO1qiO1gA69iwADhzgA+AUqJBAEeiQuvWgIAAoCJLMAXogGWAAKJR2qJR2ADr2LAAOHfiWFqiWFgA69iwADh8QA+AUqJcgGVAomMaomMYAOvYsAA4gOJr2qJr2ADr2LAAOIVAD4BSonJAR6J0K9aAgACgInxwBeiAZcASooCASaKAgEeigmdGwQABCSKGwGBihXAF6IPJ6z/HIoxlIHEAAAAAMAA/CgrAGADwAD8BQavXICCij+KQ4u9AAGtAAAAAAEDilKLvQAAAAEBAYpZAAAAoctgA69iAABgA8AA/AUBPgJHimSAimzAF6MuAgSKhGqKhGADr2LAAOGbiptqiptgA69iwADhrIqyaoqyYAOvYsAA4d+KzGqKzGADr2LAAOHxAD4BSordAZQEivdqivdgA69iwADhvYsXaosXYAOvYsAA4c6LN2qLN2ADr2LAAOIDi1pqi1pgA69iwADiFQA+AUqLdAGWSouEASaLhAEei4udGwQABCSLnQGAi5fAF6MuJ60AHIuylIHEAAAAAMAA/CgrAGADwAD8BQavXYCCi8CLx4yWAAGgfgAAAAEDi96MlgAAAAQEBIvmAAAAgxlgA8AA/esAi/MAAAChy2ADr2IAjAEAAACEW2ADwAD9UQCMJQAAAKmSYAOvdAAAYAPAAP3rAT4BSowzAR6MOq9gBAAEHIxJgIxDwBekG4C+AQABHoxTr1sCAAKAjGTAF6QbgYxrwBekKQAAwAD+AYGMdMAXpCmCjIHAF6Q1g4yLwBekQwAGr16AgoyZjKCNuAABoH8AAAABA4y2jbgAAAAFBQWMvgAAAIHoYAPAAP3rAIzKAAAAoctgA69iAIzYAAAAhFtgA8AA/VEAjOsAAACtAWADwAD6PwCNFwAAAKmSYAOvdAAAYAPAAP3rAT4CTo0pjS0AAIKMYAPAAPwFARyNOxaNNICNL8AXpMRhwAD974GNAQABI4ONPsAXpOyTHo1Zr1wBAAGBjWnAF6TSAAFgA8AA/AUAwAD9K0qNdAEejXuvYAQABByNiYCNhMAXpMSAvgIAApOFjZbAF6URAMAA/gGBjZzAF6TSgo2jwBek3oSNrcAXpPoABq9fgIKNu43CjuoAAaCAAAAAAQON0I7qAAAAAwMDjd0AAACD7GADwAD96wCN7AAAAIRbYAPAAP1RAI4MAAAAqZJgA690AABgA8AA/esBPgJOjiCOJgAAoctgA69iAR6OKK9ZAQABgI41wBeluABKjkABHo5Hr2AEAAQcjl6AjlfAF6W4gL4CAAIejmivWwIAAoCOecAXpbiDjoHAF6XrAByOoRaOmoCOk8AXpbhhwAD974GNAQABHo6jr1wBAAGDjrPAF6XrAADAAP0rAMAA/gGDjsLAF6XrgY7PwBelxoKO38AXpdQABq9ggIKO7Y70kj0AAaB9AAAAAQOO/JI9AAAABAQEjwQAAACD7GADwAD96wCPEgAAAKHLYAOvYgCPIAAAAIRbYAPAAP1RAI9EAAAAqZJgA690AABgA8AA/esBPgJHj1KBj1rAF6atBAKPcmqPcmADr2LAAOGbj4lqj4lgA69iwADhrAA+AUqPlwEjIRyPpoCPn8AXpp+DFwEAASeC5QDAAP4IgI/BwBemnx6P1K9hBAAEFo/tgI/mwBemn5+4wAD98yqCj//AF6a5g5AJwBemxwABYAPAAP3rApAkapAkYAOvYsAA4b2QRGqQRGADr2LAAOHOAD4BSpBbASMiIRyQaoCQY8AXpp+DFwEAASeC5QDAAP4IACEckISAkH3AF6afgxcBAAEng6UAwAD+CICQn8AXpp8ekLKvYQQABBaQy4CQxMAXpp+fuMAA/fMqgpDdwBemuYOQ58AXpscAAWADwAD96wKRAmqRAmADr2LAAOHfkRxqkRxgA69iwADh8QA+AUqRLQGAkTTAF6afApFMapFMYAOvYsAA4gORb2qRb2ADr2LAAOIVAD4BSpGJASMhHJGYgJGRwBemn4MXAQABJ4OlAMAA/giAkbPAF6afHpHGr2EEAAQWkd+AkdjAF6afn7jAAP3zKYKR8MAXprmDkfrAF6bHAAFgA8AA/etKkgsBJpILAR6SEp0bBAAEJJIkAYGSHsAXpq0noH0ckjKUgcQAAAAAwAD8KCsAYAPAAP3rBq9hgIKSo5KqpNoAAa0CAAAAAQOSu6TaAAAABAQEksYAAACfuF0DwAD8qQFgA8AA/AUAktYAAACfsWADwAD6PwCS5AAAAIRbYAPAAP1RAJMIAAAAqZJgA690AABgA8AA/esBPgROk2uTcgAAgXZdA8AA/KkBYAPAAPwFAR6TeMAA9gABAWADwAD8BQEWk4yAk4LAF6jQYcAA/NgATpObk6gAAK0DYAPAAPwFAZNFk7ABk7mTuwAAYmADwAD8BQGTARyTwoaTwMAXqWNjAQABFpPOgJPEwBeo0GHAAPzYAMAA/TIBjpPWwBepYxyT14aT1sAXqWNkAQABlADAAP0qPgNOk+WT6gAAgpNgA8AA/AUBHJP1gJPswBeo0EsBAAGGk/bAF6ljAMAA/LhJk/4clAeHlALAF6m0SAEAAWqUCmADwAD8BYQBAMAA/Sg+AkmUFyIclCEclB2GlBvAF6ljZAEAAZQAwAD9KmMBAAEWlC2AlCPAF6jQYcAA/NgAwAD9MgAclEgclECAlDfAF6jQSwEAARyUQ4aUQcAXqWNkAQABlADAAP0qAMAA/LhIAQABapRLYAPAAPwFg/4AwAD9KD4BPY6UWsAXqWMclFuGlFrAF6ljZAEAAZQAwAD9Kj89j5RtwBeptGqUdGADwAD8BYP+SZSEIiGBlInAF6jlAByUl4eUksAXqbRIAQABapSaYAPAAPwFhA8AwAD9KD4DSZSuHJTDFpS8gJSywBeo0GHAAPzYSAEAAY6UyMAXqWMclMaGlMjAF6ljZAEAAZQAwAD9KgDAAP0oPgI9HJTeg5TVwBepAaz9BAAEapUFYAORWcAAX66ClSLAF6jzhpUswBepY5QAr3ZKlTsBHpVGwAD+EwEAAYCVW8AXqNAAPz2PlXXAF6m0HJWFgJV8wBeo0EsBAAGGlYbAF6ljAMAA/LhJlysclzSHly/AF6m0SAEAAWqXN2ADwAD8BcAAmjwAwAD9KD4BPY+XRcAXqbRql0xgA8AA/AWD/kmXXhyXZ4eXYsAXqbRIAQABapdqYAPAAPwFwACaSADAAP0oPgE9j5d4wBeptGqXf2ADwAD8BYQBSZeRHJeah5eVwBeptEgBAAFql51gA8AA/AXAAJokAMAA/Sg+AT2Pl6vAF6m0apeyYAPAAPwFwACVSUmXxByXzYeXyMAXqbRIAQABapfQYAPAAPwFwACaGADAAP0oPgE9j5fewBeptGqX5WADwAD8BYNHSZf3HJgAh5f7wBeptEgBAAFqmANgA8AA/AXAAJpOAMAA/Sg+AT2PmBHAF6m0apgYYAPAAPwFg/tJmCscmDSHmC/AF6m0SAEAAWqYN2ADwAD8BcAAmlQAwAD9KD4BPY+YRcAXqbRqmExgA8AA/AXAAJYbSZhgHJhph5hkwBeptEgBAAFqmGxgA8AA/AXAAJpaAMAA/Sg+BE6YppisAACClGADwAD8BQGGmK7AF6ljSZi5HJjOFpjHgJi9wBeo0GHAAPzYgWsBAAEcmNOGmNHAF6ljZAEAAZUAwAD9KgDAAP0zPgI9HJjtg5jkwBepAaz9BAAEapkHYAORWcAAXcaCmSDAF6jzFJk4wBes7AgAHJlUHJlQFplJgJk/wBeo0GHAAPzYZAEAAZQAwAD9KoGNAQABFJlWwBes7AgAAMAA/SsAr3ZKmWgBHplzwAD+EwEAAYCZiMAXqNAAPz2PmabAF6m0k0WZuAGZwZnDAACXpmADwAD8BQGTARyZyhSZyMAXrbsJAGMBAAGVAMAA/TIBFZnPwBetuwkcmdAUmc/AF627CQBkAQABlADAAP0qPgNOmeSZ6gAArQRgA8AA/AUBHJn1gJnswBeo0EsBAAGOmfjAF6ljHJn2hpn4wBepY2QBAAGUAMAA/SoAwAD8uEmaBiEemguS4QEAARSaFsAXrgQKAAA+Aj0cmjWDmizAF6kBrP0EAARqmmBgA5FZwABdxoKaecAXqPMUmoPAF6zsCAAcmpAcmoyGmorAF6ljZAEAAZQAwAD9KoGNAQABFJqSwBes7AgAAMAA/SsAr3ZKmqYBHpqxwAD+EwEAAYCaxsAXqNAAPz2PmujAF6m0HJr7HJr1h5rwwBeptIO6AQABlwDAAPwhZAEAAR6a/ZLiAQABFJsLwBeuBAoAAADAAP0qSZsqHJszh5suwBeptEgBAAFqmzZgA8AA/AXAAJpRAMAA/Sg+BU6bSJtOAACClGADwAD8BQGGm1DAF6ljSZtbHJtwFptpgJtfwBeo0GHAAPzYSAEAARybdYabc8AXqWNkAQABlADAAP0qAMAA/Sg+Aj0cm4+Dm4bAF6kBrP0EAARqm6lgA5FZwABfroKb1MAXqPMUm97AF68pCAAcm/ocm/YWm++Am+XAF6jQYcAA/NhkAQABlADAAP0qgY0BAAEUm/zAF68pCAAAwAD9KwCvdkqcDgEenBnAAP4TAQABgJwuwBeo0AA/PY+cTMAXqbQcnFyAnFPAF6jQSwEAARycX4acXcAXqWNkAQABlADAAP0qAMAA/LhJnG0cnHaHnHHAF6m0SAEAAWqceWADwAD8BcAAmmMAwAD9KD4DSZzOHJzjFpzcgJzSwBeo0GHAAPzYSAEAAY6c6MAXqWMcnOaGnOjAF6ljZAEAAZQAwAD9KgDAAP0oPgI9HJ0Cg5z5wBepAaz9BAAEap0cYAORWcAAX66CnUnAF6jzFJ1TwBevKQgAHJ1gHJ1chp1awBepY2QBAAGUAMAA/SqBjQEAARSdYsAXrykIAADAAP0rAK92Sp12AR6dgcAA/hMBAAGAnZbAF6jQAD89j524wBeptJNBRZ3MAZ3VndcAAJemYAPAAPwFAZMBHJ3eFJ3cwBew9gkAYwEAATcHAMAA/TIBFZ3jwBew9gkcneQUnePAF7D2CQBkAQABlADAAP0qPgVJnfYcngsWngSAnfrAF6jQYcAA/NhIAQABjp4QwBepYxyeDoaeEMAXqWNkAQABlADAAP0qAMAA/Sg+Aj0cniyDniPAF6kBrP0EAARqnkZgA5FZwABfroKedcAXqPMUnn/AF68pCAAcnowcnoiGnobAF6ljZAEAAZQAwAD9KoGNAQABFJ6OwBevKQgAAMAA/SsAr3ZKnqQBHp6vwAD+EwEAAYCexMAXqNAAP06e7p70AACtBGADwAD8BQEcnv+AnvbAF6jQSwEAAYafAMAXqWMAwAD8uEmfECIhHJ8WFJ8UwBew9gkASAEAAZMAwAD9KAAcnyQUnx7AF7HqCgBIAQABap8nYAPAAPwFwACaaQDAAP0oQp89AD9Jn1AhHp9VkuEBAAEUn2DAF7HqCgAAPgI9HJ+Bg594wBepAaz9BAAEap+bYAORWcAAX66Cn8rAF6jzFJ/UwBevKQgAHJ/hHJ/dhp/bwBepY2QBAAGVAMAA/SqBjQEAARSf48AXrykIAADAAP0rAK92Sp/5AR6gBMAA/hMBAAGAoBnAF6jQAD89j6A/wBeptBygUhygTIegR8AXqbSDugEAAZcAwAD8IWQBAAEeoFSS4gEAARSgYsAXseoKAAAAwAD9Kj4DSaC7HKDQFqDJgKC/wBeo0GHAAPzYgWsBAAEcoNWGoNPAF6ljZAEAAZcAwAD9KgDAAP0zPgI9HKDxg6DowBepAaz9BAAEaqELYAORWcAAX66CoTjAF6jzFKFCwBevKQgAHKFeHKFaFqFTgKFJwBeo0GHAAPzYZAEAAZQAwAD9KoGNAQABFKFgwBevKQgAAMAA/SsAr3ZKoXQBHqF/wAD+EwEAAYChlMAXqNAAPz2PobbAF6m0k0WhygGh06HVAACXpmADwAD8BQGTARyh3BSh2sAXs9MJAGMBAAGXAMAA/TIBFaHhwBez0wkcoeIUoeHAF7PTCQBkAQABlADAAP0qPgNOofih/gAArQRgA8AA/AUBHKIJgKIAwBeo0EsBAAGOogzAF6ljHKIKhqIMwBepY2QBAAGUAMAA/SoAwAD8uEmiHCEeoiGS4QEAARSiLMAXtBwKAAA+Aj0cok2DokTAF6kBrP0EAARqomdgA5FZwABfroKilsAXqPMUoqDAF68pCAAcoq0coqmGoqfAF6ljZAEAAZQAwAD9KoGNAQABFKKvwBevKQgAAMAA/SsAr3ZKosUBHqLQwAD+EwEAAYCi5cAXqNAAPz2PowvAF6m0HKMeHKMYh6MTwBeptIO6AQABlwDAAPwhZAEAAR6jIJLiAQABFKMuwBe0HAoAAADAAP0qSaNUHKNdh6NYwBeptICXAQABN8AQ//8AwAD9ND4CPRyjfoOjdcAXqQGs/QQABGqjp2ADkVnAAF1FgqPAwBeo8xSjysAXrykIAByj1xyj04aj0cAXqWNkAQABlADAAP0qgY0BAAEUo9nAF68pCAAAwAD9KwCvdkqj6wEeo/bAAP4TAQABgKQLwBeo0AA/PgA/PRykgYSke8AXqRiAvwIAAjUAAAABAGADwAD8BQGFpILAF6lPNQAAAAEAYAPAAPwFAY2kgsAXqU8cpI4UAMAXtbwIAGQBAAGUAMAA/SoUAMAXtbwIAIeklMAXqbQAwAD8uUqkoAEepKvAAP4TAwADhKTAwBepGJOFpMvAF6lPAAGAggAXtioAF5rSABecswAXnVIAAAACABedVAAXnwYAF6HjABejEAAXo/0AF6SmABelmgAXpoEAF6iyABe2KgAAAAkAAgSvea0FgIMAAASA+QAAncgAAQEBghOBKAAAqF8AAQEBp+OBTAAAwABZ0gABAQKgha0GgYkBAMAAWdIAAQEEoIKgg6CFoIYEwABZ08AAWlXAAFpbwABaYAAAAgKveoCDgeyB8YI8C6CEAAABYAHAAP1RAAAGBK98gIOB8YHxCScAYAPAAPwFAASvfoCDgfGB8Qkor3kAYAPAAP3rAASvf4CDgfGB8QYpAF0DwAD8qQFgA696AWoAXQPAAPypAWADr3rAAOJKBK+AgIOCBIIEBq0HAGADr3oBagBgA696wADESgSvgYCDgg2CDQatCABgA696AWoAYAOvesAAxFsEr4KAg4IZghkGrQkAYAOvegFqAGADr3rAAMRsAQWvhoCDgfGB8YI8AQAAA4HxgjwAAAACAgKB8QAABCdgA8AA/AUAgfEAAAQoYAPAAP3rAABgA696AT8DCACvfIAAwBe3oggAr36BAMAXt68JAADAAP1nAAAAAAEGr4SAg4HxgfGCPAAAIwAAAAEDgfGCPAAAAAAAAABgA8AA/esBSgABDwAur34AABe35AAXuBEAAAABAq+HgIOCP4JOkuAHoIcAAQAArQpgA8AA/VEBWwFgAcAAWggAAAMEr4mAg4J/goQYns0AYAOoagAEr4qAg4KLgpZYog0AXwMAAAErBK+LgIOCnYKrWKIPAF8DAAABKwEFr6yAg4KwgrCC8wAAAAOCvYLzAAAAAQEBgsQAAACezWADqGoAAF0Dr4cBXwMAAAE/AggAr4k1AAAAAQBgA6hqAYCC1cAXuJYjHILbgQDAF7i0SAEAASsAAB+C4qiQAAAAAIEAwBe4tAFgA6hqCQGCsMAAWkMAAAAAHgavjYCDgviC+oMvAAKg8QAAAAEDgwqDLwAAAAICAoMaAAAAgmdgA696AIMkAAAAh1RgA8AA/AUAAF8DAAAABq+OgIODNIM2g5sAAK0LAAAAAQODR4ObAAAAAQEBg0wAAACHVGADwAD8BQAAXwMAAAE+AUqDXgEcg2UuoPECAAJqg4VgA696wADESoCDjMAXuVMAr40Gr4+Ag4Ogg6KEDQAArQwAAAABA4O2hA0AAAABAQGDuwAAAIdUYAPAAPwFAABfAwAAAT4BSoPNARyD1C6g8QIAAmqD9GADr3rAAMRbgIP+wBe5qQCvjQavkICDhBKEFIR3AACjZgAAAAEDhCSEdwAAAAEBAYQpAAAAh1RgA8AA/AUAAF8DAAABPgFKhDsBHIRCLqDxAgACaoRiYAOvesAAxGyAhGjAF7n/AK+NBq+RgIOEfISBhQYAAKFYAAAAAQOEkIUGAAAAAgEChJgAAACjyGADwAD96wCEqgAAAKg5YAOoagFqAGADwAD9DnkAXAE+Aj0chLsuoNQBAAEWhMAuns2viQDAAFoTPReEzC6ezTUAAAABAGADqGoBgYTUwBe6YyMchN2CAMAXupxIAQABKwAAHITmFoTgLp7Nr4micAEAAYCE+MAXulUAqHiCAMAXupwBYAOoaq+JBq+SgIOFC4UchV8AAKEbAWqFDGADwAD9UQIAAAEDhSqFXwAAAAAAAABcAT4CPReFMy6ezSaFMwEchTsuoNcAAAAAwABaFmADqGqviUAhHIVTFoVNLp7Nr4lIAQABKwDAAP1ehU2FWgAGr5OAg4VkhWmGBQAAogwAAAABA4V5hgUAAAACAQKFfgAAAIdUYAPAAPwFAIWNAAAggkVfAwAAAWoAYAPAAP0OeQBcAT4CPRyFnC6g1AEAATUAAAABAF8DAAABFoWhLqINr4ojHIWtggDAF7ueSAEAASsAAGqFumADwABZ08AA4l+CAMAXu54BYAPAAP1RAMAAWhM9F4XMLqINNQAAAAEAXwMAAAGBhdrAF7t5IxyF4YIAwBe76EgBAAErAAAcheQurQsBAAGAhfbAF7trAK+OggDAF7voAV8DAACvigavlICDhgqGD4a6AACiDgAAAAEDhiKGugAAAAIBAoYnAAAAh1RgA8AA/AUAhjYAACCCRV8DAAABagBgA8AA/Q55AFwBPgI9HIZFLqDUAQABNQAAAAEAXwMAAAEWhkouog+viyMchlmCAMAXvHtIAQABKwAAaoZmYAPAAFnTwADid4IAwBe8ewFgA8AA/VEAwABaEz0Xhnsuog81AAAAAQBfAwAAAYGGjMAXvFYjHIaTggDAF7zFSAEAASsAAByGli6tDAEAAYCGq8AXvEgAr4+CAMAXvMUBXwMAAK+LBq+VgIOGv4bBhyEAAKIuAAAAAQOG0IchAAAAAAAAAF8DAAABPgNOhtuG4wAAXl8DAAABFoblLqINr4o9F4b2LqINJob2ARyHBC6g1wAAAADAAFoWXwMAAK+KSocPAYCHFsAXvS4Gr5aAg4cmhyiHkQAAoi0AAAABA4c6h5EAAAAAAAAAXwMAAAE+A06HRYdNAABeXwMAAAEWh08uog+viz0Xh2Muog8mh2MBHId0LqDXAAAAAMAAWhZfAwAAr4tKh38BgIeGwBe9kwavl4CDh5aHm4gAAACiCwAAAAEDh6SIAAAAAAEBAYepAAAAh1RgA8AA/AUAAFwBPgI9HIe7LqIMAQABgIfMwBe97wCvkz0ch90uog4BAAGAh/HAF73vAK+UBq+YgIOIBYgWiJQAAK0PAWqIBmADwAD9UQIAAAEDiCyIlAAAAAEBAYgzAAAAgpRgA56xAABcAT4CPRyIQC6g9gEAASetDwDAAFoYPRyIai6hWAEAASetEACvkQavmYCDiJmIqok4AACtEQFqiJpgA8AA/VECAAABA4i7iTgAAAABAQGIwgAAAJJUYAOesQAAXAE+Az0ciM8uoPYBAAEnrREAwABaGD0ciPQuogsBAAEWiQSAiP7AF76th1SeugCvlz0ciRUuoVgBAAEnrRIAr5EGr5qAg4k9iU6J2wAArRMBaok+YAPAAP1RAgAAAQOJYYnbAAAAAgICiWgAAACjKmADnrEAiXoAAACiI2ADnrEAAFwBPgI9HImKLqD2AQABJ60TAMAAWhg9HImxLqFYAQABJ60UAK+RBq+bgIOJ4InxikkAAK0VAWqJ4WADwAD9UQIAAAEDifuKSQAAAAEBAYoCAAAAklRgA56xAABcAT4CPRyKDy6g9gEAASetFQDAAFoYPRyKLS6hWAEAASeZ/wCvkQavnICDik6KX4ryAACjWwFqik9gA8AA/VECAAABA4pvivIAAAABAQGKdgAAAJJUYAOesQAAXAE+Az0cioMuoPYBAAEno1sAwABaGD0ciqcuoVgBAAEno1wAr5E9HIrMLqIMAQABForjgIrdwBe/5YdUnroAr5MGr52Ag4r3iwiLeQAArRYBaor4YAPAAP1RAgAAAQOLHYt5AAAAAQEBiyQAAACSVGADnrEAAFwBPgI9HIsxLqD2AQABJ60WAMAAWhg9HItaLqILAQABFotqgItkwBfAW4dUnroAr5cGr56Ag4t+i4+L/AAArRcBaot/YAPAAP1RAgAAAQOLoov8AAAAAQEBi6kAAACSVGADnrEAAFwBPgI9HIu2LqD2AQABJ60XAMAAWhg9HIvdLqILAQABFovtgIvnwBfAwYdUnroAr5cGr5+Ag4wBjBKMmgAArRgBaowCYAPAAP1RAgAAAQOMK4yaAAAAAQEBjDIAAACSVGADnrEAAFwBPgI9HIw/LqD2AQABJ60YAMAAWhg9HIxsLqFYAQABJ60ZAK+RBq+ggIOMn4ywjUAAAK0aAWqMoGADwAD9UQIAAAEDjMeNQAAAAAEBAYzOAAAAklRgA56xAABcAT4EPRyM2y6g9gEAASetGgDAAFoYTo0KjQ8AAIJpYAPAAP1RARyNES6g1wAAAADAAFoWPRyNHC6hGwAAAACvkj0cjTIuoNQBAAGBjTfAF8GmAMAAWhMGr6GAg41FjVaN1wAArRsBao1GYAPAAP1RAgAAAQONbY3XAAAAAQEBjXQAAACSVGADnrEAAFwBPgI9HI2BLqD2AQABJ60bAMAAWhg9HI2sLqFYAQABJ60cAK+RBq+igION3I3tjnkAAK0dAWqN3WADwAD9UQIAAAEDjgKOeQAAAAEBAY4JAAAAklRgA56xAABcAT4EPRyOFi6g9gEAASetHQDAAFoYTo5DjkgAAIJpYAPAAP1RARyOSi6g1wAAAADAAFoWPRyOVS6hGwAAAACvkj0cjmsuoNQBAAGBjnDAF8KNAMAAWhMGr6OAg45+jo+PCgAArR4Bao5/YAPAAP1RAgAAAQOOpI8KAAAAAQEBjqsAAACSVGADnrEAAFwBPgI9HI64LqD2AQABJ60eAMAAWhg9HI7hLqFYAQABJ60fAK+RBq+kgIOPD48gj6gAAK0gAWqPEGADwAD9UQIAAAEDjzOPqAAAAAEBAY86AAAAklRgA56xAABcAT4EPRyPRy6g9gEAASetIADAAFoYTo9yj3cAAIJpYAPAAP1RARyPeS6g1wAAAADAAFoWPRyPhC6hGwAAAACvkj0cj5ouoNQBAAGBj5/AF8N0AMAAWhMGr6WAg4+tj76QJAAArSEBao+uYAPAAP1RAgAAAQOPzJAkAAAAAQEBj9MAAACSVGADnrEAAFwBPgI9HI/gLqD2AQABJ60hAMAAWhg9HJACLqFYAQABJ60iAK+RBq+mgIOQKZA6kLQAAK0jAWqQKmADwAD9UQIAAAEDkEaQtAAAAAEBAZBNAAAAklRgA56xAABcAT4EPRyQWi6g9gEAASetIwDAAFoYTpB+kIMAAIJpYAPAAP1RARyQhS6g1wAAAADAAFoWPRyQkC6hGwAAAACvkj0ckKYuoNQBAAGBkKvAF8RbAMAAWhMGr6eAg5C5kMqRMQAAoeUBapC6YAPAAP1RAgAAAQOQ3JExAAAAAQEBkOMAAACSVGADnrEAAFwBPgI9HJDwLqD2AQABJ6HlAMAAWhg9HJEWLqFYAQABJ4GtAK+RBq+ogIORNpFHkckAAKHnAWqRN2ADwAD9UQIAAAEDkVeRyQAAAAEBAZFeAAAAklRgA56xAABcAT4EPRyRay6g9gEAASeh5wDAAFoYTpGTkZgAAIJpYAPAAP1RARyRmi6g1wAAAADAAFoWPRyRpS6hGwAAAACvkj0ckbsuoNQBAAGBkcDAF8VCAMAAWhMGr6mAg5HOkd+SRgAArSQBapHPYAPAAP1RAgAAAQOR8ZJGAAAAAQEBkfgAAACSVGADnrEAAFwBPgI9HJIFLqD2AQABJ60kAMAAWhg9HJIrLqFYAQABJ5oQAK+RBq+qgIOSS5Jckt4AAK0lAWqSTGADwAD9UQIAAAEDkmyS3gAAAAEBAZJzAAAAklRgA56xAABcAT4EPRySgC6g9gEAASetJQDAAFoYTpKokq0AAIJpYAPAAP1RARySry6g1wAAAADAAFoWPRySui6hGwAAAACvkj0cktAuoNQBAAGBktXAF8YpAMAAWhMAABe49wAXuTUAF7mLABe54QAXujcAF7rlABe7TQAXvCoAF70HABe9bAAXvdEAF74qABe+hQAXvvsAF79iABe/vQAXwDMAF8CZABfA/wAXwVoAF8HmABfCQQAXws0AF8MoABfDtAAXxA8AF8SbABfE9gAXxYIAF8XdABfGaQAAAB4AAAGAgwAXxuwAF7bJABe4HgAXxuoAAAACABfG7AAAAAAAAgSvrQCAhAAACoDaAACCLoKQAIEFAACuvoKQAIEwAACxwIKQAIFnAACu+oKQAIGLAACSPIKQAIGvAACRwoKQAQEBghOB3QAAqF+CkACB/gAAwABTI4KQAIIwAADAAFnSAAEBAaCFgl4AAMAAWdKCkAAAAAADAq+xgISDaoN5jTUHrSYAAAFgAcAA/VEAABoEr7OAhIQihG8GrScAYAOvsQFqhDpdA6/RAWADhXjAAMFYBK+0gISEioS6BoVrAGADr7EBaoSXXQOv0QFgA4SuwADBlwSvtYCEhNWFBQasoQBgA6+xAWqE4l0Dr9EBYAPAAFQ/wADBrwSvtoCEhSCFQQatKABgA6+xAWqFKl0Dr9EBYAPAAPwFwADijASvt4CEhVyFoQatKQBgA6+xAWqFbF0Dr9EBXQPAAPypAWADwABVQ8AA4poEr7iAhIW8hiwGrSoAYAOvsQFqhdJdA6/RAV0DwAD8qQFgA8AAVUPAAOLJBK+5gISGR4Z1BqCSAGADr7EBaoZTXQOv0QFgA7HIwADBowSvuoCEhpCGwAatLABgA6+xAWqGnV0Dr9EBYAPAAFMkwADi4QSvu4CEhtuHDgatLQBgA6+xAWqG510Dr9EBXQPAAPypAWADryHAAOLvBK+8gISHKYd7Bq0uAGADr7EBaodBXQOv0QFdA8AA/KkBYAOvIcAA4xwEr72AhIeWh7cGhloAYAOvsQFqh51dA6/RAWADwAD968AA4zIEr76AhIfSiAcGrTAAYAOvsQFqh99dA6/RAWADwAD968AA41gEr7+AhIgiiFQGrTIAYAOvsQFqiDNgA6/ZwADjgwSvwICEiG+IxQatMwBgA6+xAWqIlWADr9nAAOOuBK/BgISI4IkkBq00AGADr7EBaoj9YAOv2cAA48cEr8KAhIk/iZoGrTUAYAOvsQFqiVpdA6/RAV0DwAD8qQFgA8AAVkDAAOPSBK/DgISJtYnhBoVCAGADr7EBaonAXQOv0QFgA5JBwADjaQSvxICEifyKOgaghgBgA6+xAWqKE10Dr9EBYAPAAFpgwADBvQSvxYCEilWKkwaggQBgA6+xAWqKbF0Dr9EBYAOom8AAwcsEr8aAhIquiuQGqGkAYAOvsQFqir5dA6/RAWADwABUZMAA444Er8eAhIr/iyUGghMAYAOvsQFqiwddA6/RAWADnrHAAOPqBK/IgISLQIuBBq02AGADr7EBaotUXQOv0QFgA56xwADkDgSvyYCEi5yL/AatOABgA6+xAWqLuF0Dr9EBXQPAAPypAWADwABXAsAAwX8Er8qAhIwXjEkGnmgAYAOvsQFqjCVdA6/RAWADwABWwMAA5B0Er8uAhIxkjLAGrTkAYAOvsQFqjH5dA6/RAWADwABWwMAA5CsEr8yAhIzLjTMGrToAYAOvsQFqjOpdA6/RAV0DwAD8qQFgA8AAVubAAOQ8AQWv0ICEg4eDjYOYAQAAA4OWg5gAAAAAAAAAYAOvsQE/AQkBg43AAP1nAAAAAAEGr86AhIPug/OEBgACo64AAAABA4P4hAYAAAABAQGEAAAAAICWYAPAAP1RAABgA8AA+j8AAAAXy3wAF8uwAAAAAQKv0YCEjZONmY8PA607AAEAAIJ2YAPAAP1RAVsBYAHAAP1RAAFgAa+xAQSv04CEjdaN3wmtPABgA8AAWdMAAQWv2ICEjeSN6o4MAQAAA436jgwAAAABAAGOAQAABK08YAPAAFnTAWoAYAPAAP0OeQBdA6/RAV8DAAABPwIIAa/TgADAF8wVCQGN6sAA/WcAAAAAAgav1YCEjhGOIo6dAACjrgFqjhJgA8AA/VECAAABA44njp0AAAABAQGOLwAAAICWYAPAAP1RAABgA8AA+j8BPgJJjjwiIRyOShaOQC6tPK/TSAEAASsAwAD9XgAcjluAjlXAF8x4SAEAARaOXi6tPK/TAMAA/V4+AUqOcQEpP0qOiAEljpWAjo/AF8x4XwMAAAav1oCEjqKOqY8NAAAjAAAAAQOOsY8NAAAAAAAAAGADwAD96wE+AkmOuiEcjsgWjr4urTyv00gBAAErAMAA/V4+AUqO2QEkjvIDLV8DAAAnrT0WjugurTyv0z9Kjv4BJI8JAS1fAwAAAAAXzFAAF8zgABfNSAAAAAICr9mAhI9Nj1ORPwOtPgAAAWABwAD9UQABYAGvsQEEr9uAhI+Sj5cJrT8AXQPAAPypAWADr7EAAQWv4ICEj5yPoo+9AQAAA4+xj70AAAABAQGPtwAABK0/XQPAAPypAWADr7EAAGADr9kBPwIIAa/bgADAF82qCQGPosAA/WcAAAAAAgav3YCEj8KP05BjAACjrgFqj8NgA8AA/VECAAABA4/YkGMAAAABAQGP4AAAAICWYAPAAP1RAABgA8AA+j8BPgJGj+2QC4/8AAAAgmdgA6+xABaQBC6tP6/bPgFJkBMckByBkBfAF84ho64BAAGAkCLAF84EAK/OPgFKkDQBKT9KkFMBKgav3oCEkGiQb5E9AAAjAAAAAQOQd5E9AAAAAAAAAGADwAD96wE+BE6QjZCQAACD5GADwAD+NQEfkJbAAP5UAAAAAE6QsZC0AACtQGADwAD96wEnAEaQvpDckM0AAACCZ2ADr7EAFpDVLq0/r9s+Az0ckOeAkOTAF86IgooBAAGBkO3AF86jAMAA/kk9HJD7gJD4wBfOiIKKAQABgpEBwBfOuQDAAP5JPYmRDsAXzqMnrT1KkSUBHJEvgJEswBfOiCMAAAAAwAD+TgAAF83cABfOYAAXzykAAAACAAIGr6+AhJGZkamSBAABrUEAAAABA5G2kgQAAAACAgKRwQAAAIJnYAOvsQCRywAAAIDuYAPAAPwFAABdA8AA/KkBYAOvsQE+AUqR1gEekeHAAPyxAgFgA6+xAoGR78AXz2Y0kfYDkfaSAQAAAAEBAZH3AAAAgLVgA8AA/AUAAGADr7EBSpH9AYCR/cAXz1oABq+wgISSSZJTkpoAAa1CAAAAAQOSX5KaAAAAAQEBknAAAACtP10DwAD8qQFgA6+xAABgA6+xAT4BSpJ7AR+Sgq/gAQABgJKSwBfP6AABgIQAF9AXABfHgQAXy70AF81ZABfPOgAAAAMAF888ABfPygAX0BcAAAACAAIEr+EAgIUAABWA3AAAgi6EMgCBCQAAgi4AAQEshZ2F24VhhneE0IW5hauGbIZzhWuFBoYChVOGfYWuhnmGcIWjhgiF9oX6hP2FpIZahemFI4U8hX6FiYY+hfiGEoWZhaeFlIWXhpuF8IRPhpeGkIZQhXmGdYT2AACblwABAQGbAoU5AACcSgABAQGbxYVyAACaqQABAQKawpVMhcwAAMAAUdsAAQEBoK2GEgAAwABSPwABAQSpeasLqwyrDYbTAACMIQABARqCJYfRiLSQlZCekgyH1ojri1GNN43Vje6OEo4gjiaOLI4yjjiOPo5EjkqOj48bkbmRvpHDir8AALHAAAEBAaCmiv8AAKvZAAEBBqtxqXqr4KPTrJqslYvuAAC07gABAQGtQ4wxAACvLQABAQKgbazjjGgAAJ0XAAEBA5TznMWcs4ywAACo5wABAQGeX4z7AADAAFOrAAEBAasOjTEAAMAAWmcAAQEBrUSNdgAAwABTuwABAQOrD6sQqE+N6QAAsHIAAQEBoImOGgAAq7gAAQECqwie9I5QAADAAFPrAAEBAasTjo0AAMAAU/oAAQEErUWrFa1GqxQAAAAGAq/mgIWS2JLeugsDrUcAAAFgAcAA/VEAAAkEr+iAhZL8kwMJhjAAYAPAAPo/AASv6YCFkxOTHgmsgQBgA8AA+j8ABK/qgIWVSJVcCayCAGADiLgABK/rgIWVcJWCCa1IAGADiLgABK/tgIWVkpWoCa1Jr+EAYAPAAPo/AASv7oCFl7KX1RitSq/hAGADiLgBKwSv74CFmBCYFxitSwBgA8AA+j8BKwSv8ICFmOCY8BitTABdA8AA/KkBYAOIEwErBK/xgIWZZJl5GK1NAF0DwAD8qQFgA4i4ASsBBa/9gIWdlJ2UnocAgLWv4QADnaSehwAAAAUFBZ2qAAAEhjBgA8AA+j8AnbgAAASsgWADwAD6PwCdygAABKyCYAOIuACd6wAABK1IYAOIuACeBAAABK1JYAPAAPo/AABgA6/mAT4BSZ4iFp4mLq1Jr+Gv7T4CPReeRi6tTDGeWWADiBMAr/A9F55jLq1NMZ57YAOIuACv8T8GCAGv6IAAwBfS+wgBr+mBAMAX0wkIAa/qggDAF9MXCAGv64MAwBfTIwgBr+2EAMAX0y8JAZ2UwAD9ZwAAAAAGBq/zgIWZfpmGnY8EAQAAAAABA5mUnY8AAAAEBASZpgAAAKtLYAOwIACZvAAAAIVUYAOEnwCZ2AAAAKw0YAOIuACZ7AAAAK1OYAPAAPo/AABgA6/mAT4GQCEcmh6CmhDAF9PsSAEAASsAiLyaEJolAE6aNZpIAACtSGADiLgBHppSwABT7QIAAhaaa4CaYsAX09SHZ7ANgpp2wBfT7ABOmo+alwAAhjBgA8AA+j8BIhyapYGamcAX0+BIAQABapq0YAOEn4UaAMAA/V4BHJrRgZrFwBfT4EgBAAFqmuBgA4SfhSkAwAD9Xk6a9JsAAACsgWADwAD6PwEiHJsOgZsCwBfT4EgBAAFqmx1gA4SfhQsAwAD9XgEcmz2BmzHAF9PgSAEAAWqbTGADhJ+FKQDAAP1eSZtbhptfwBfUoD4BSZt0hZt4wBfUVj4BPYqbi8AX0+wcm6SAm5vAF9PUrU8CAAKCm8PAF9PsFpvlFpvbgJvSwBfT1IdnsA2a4Jy2ALBBPgE9ipwKwBfT7BycI4CcGsAX09StTwIAAoKcQsAX0+wWnGQWnFqAnFHAF9PUh2ewDZrenKMAsEFJnIeFnIvAF9RWPgE9ipycwBfT7ByctYCcrMAX09SsGgEAARyc8Bac2oCc0cAX09Sg0rAohf8BAAGCnP3AF9PsAJtwALBVP0qdGAEfnSOv/QUABYWdNMAX1FaGnT3AF9Sggp1KwBfT7ISdYcAX1CiDnXXAF9P4AAav9YCFnoyekaj3AACtUAAAAAEDnqGo9wAAAAQEBJ6zAAAAq0tgA7AgAJ7GAAAAhTpgA4i4AJ7oAAAAhVFgA4gTAJ78AAAArIhgA4i4AABgA8AA+j8BPgdOn5afqgAArVFgA4i4ASMWn6wuhjCv6Byf3Rafx4CfvsAX1gSg0rAohf8BAAGBn+rAF9YQAJtwgaAAwBfWEAFgA4i4SaAQHKApFqAegqAUwBfWHIJriBVIAQABKwDAAP1ePgNJoN8iIiWg94Sg48AX1j9gA4jbASWhJIShEMAX1j9gA4jPARyhVIShQMAX1j9IAQABFqF0FqFqFqFggKFXwBfWBIdnsA2azZythPqDRwCIvD4BSqGHASk/PRehrIKhosAX1hyCazWhyQAAAQBgA4SuARyhyRahwoChucAX1gSVXLAsoQMDAAM1oeYAAAEAYAOGoQEfoeaGqQAAAAA1AAAAAQBbAReh9YWh88AX1ymEUxaiDIKiAsAX1hyEU4JZglmFAMAX1ylqoiJgA5FZwAB+vWqiTGADwAD8BRUAwABTtjUAAAABAFsBF6JghaJewBfXB4RSgqJpwBfWHIJYhQDAF9cHiBVKonoBKj9Jo2MiFqNnLq1Lr+8AJaOGhKNywBfWP2ADiNtKo5MBKT9OpECkWAAArVJgA4i4ASMWpFouhjCv6BykixakdYCkbMAX1gSg0rAohf8BAAGDpJjAF9YoAJtwg6SywBfWKAFgA4i4SaTGIiIiJaTVgaTKwBfWEGADiNsAISWlBIWk7MAX185gA4jbACElpTSFpRzAF9fOYAOIzwAhHKVnhaVPwBfXzkgBAAEWpYcWpX0WpXOApWrAF9YEh2ewDZrNnK2E+oNHAIi8PgI9F6WigqWYwBfWHIJrNaW/AAABAGADhK4BHKW/FqW4gKWvwBfWBJVcsCyhAwMAAxal4oKl2MAX1hyCa4gVaqXuYAORWcAAfltqpg1gA8AA/AUVAMAAU7Y1AAAAAQBbARemIYamH8AX2IOEUoKmKsAX1hyCWIYAwBfYg4gVSqY7ASo/Sab8IiIiJacYhacAwBfXzmADiNsAISWnQ4SnL8AX1j9gA4jbACElp2+Ep1vAF9Y/YAOIzwAhHKeehKeKwBfWP0gBAAEWp74Wp7QWp6qAp6HAF9YEh2ewDZrNnK2E+oNHAIi8PgI9F6fZgqfPwBfWHIJrNagBAAABAGADhK4BHKgBFqfvgKfmwBfWBJVcsCyhAwMAAxaoGYKoD8AX1hyCa4gVaqglYAORWcAAlYhqqDxgA8AA/AUVAMAAU7Y1AAAAAQBbAReoVIaoUsAX2WqEUoKoXcAX1hyCWIYAwBfZaogVSqhuASo/SqjoASkGr/aAhalxqXaxCAAArIMAAAABA6mCsQgAAAAEBASplAAAAKtLYAOwIACprgAAAIVRYAOIEwCpyAAAAIKQYAOIuACp0wAAAK1LYAPAAPo/AABcAT4ESaniFqnmLqyBr+lKqfMAP0mqRRyqVhaqTi6tS6/vSAEAASsAwAD9Xj4BPReqbC6tS4OqdsAX2iWv7z4BQByqphaqni6tS6/vSAEAAYOqqcAX2iUAwAD9XqqZqrAASaq+FqrCLq1Jr+Gv7T4HPRyrXxarTi6tTK/wVgEAAYGrY8AX2g0AwAD8uj0cq4sWq3UurU2v8VYBAAGCq4/AF9oZAMAA/LpJrB8iIRysOBasLYGsI8AX2g2Ca4gVSAEAASsAwAD9XgAhHK0EHKxWgKxNwBfaAatZBgAEFqxnLqyCr+qCrH3AF9oZFqyfgayVwBfaDYJriBUWrLWBrKvAF9oNhFOCWQKtUxas5i6GMK/oq2ApsDVIAQABKwDAAP1ePgE9iq1VwBfaGR6tXMAAU+0CAAIWrXWArWzAF9oBh2ewDRatgC6sgq/qAD9OramttwAArVRgA4i4AYKtucAX2hlJrcUWrckuhjCv6D4BPYyt3MAX24IcrgsWrfWArezAF9oBoNKwKIX/AQABgq4YwBfaGQCbcD9Jri0crlUWrjEurUqv4a/uSAEAASsAiLw+AT0XrmgurUqv4YSujsAX24Kv7j4BPReutC6tSq/hHK8GFq7jgK7awBfaAaDSsCirYwIAAhavLS6tSq/hr+6Er1LAF9uCAMAAiO+v7kqvcAA/Sa/jIhyv5y6tUAQABICv+MAX2gEWsAIurUiv64GwFsAX2g2CsCHAF9oZAK/1ACEcsEcWsDyBsDLAF9oNgmuIFUgBAAErAMAA/V4+AT0csGGAsFjAF9oBq1kGAAQWsHIurIKv6oKwiMAX2hkWsKKBsJjAF9oNgmuIFRawuIGwrsAX2g2EU4JZAq1TFrDhLoYwr+irYCmwNT8Gr/eAhbENsRK1kgAArJMAAAABA7EdtZIAAAAFBQWxLwAAAKtLYAOwIACxPgAAAIZNYAPAAPo/ALFUAAAAgpBgA4i4ALFrAAAAgmtgA4SuALF7AAAAhFNgA8AA/AUAAFwBPgRJsY0hFrGSLqyBr+lKsZ8AP06xr7G8AACrWGADiLgBI4GxvsAX3PgcsdQurVWv4QIAAoCx6sAX3OwWsfQurIKv6gCv+hayFC6sgq/qAWADiLhJsi4hHLKgHLI7gLIywBfc7KtZBQAEhbJMwBfdQ4KyWsAX3QaDsmDAF90ShLJswBfdHgGtUxayly6GMK/osDVIAQABKwDAAP1ePgE9irK5wBfdBh6ywMAAU+0CAAIWstmAstDAF9zsh2ewDYWy5MAX3UMAP0my/RazAS6tSa/hr+0+A06zJbMzAACtVGADiLgBgrM1wBfdBkmzQYGzRcAX3Pg+AT2Os1zAF94GNQAAAAEAYAOIuAEcs3WAs2zAF9zsrVYCAAKCs5/AF90GIxaztS6GMK/oFrPmFrPcgLPTwBfc7IdnsA2a4Jy2FrQbFrQRgLQIwBfc7IdnsA2a3pyjAWADgxkAsD0jHLQqhwDAF94vSAEAASsAAIK0OcAX3QaHAMAX3i8BYAOIuD9JtE0ctHUWtFEurUqv4a/uSAEAASsAiLw+AT0XtIgurUqv4Ya0rsAX3gav7j4BPRe01C6tSq/hHLUmFrUDgLT6wBfc7KDSsCirYwIAAha1TS6tSq/hr+6GtXLAF94GAMAAiO+v7j8Gr/iAhbWXtaC4dgAArVcAAAABA7WvuHYAAAABAQG1wQAAAKtLYAOwIAAAYAOIuAE+BkAWtdgurUmv4a/ttdi17gBOtf62CwAAoURgA4i4ARy2HoC2FcAX3zKtVwEAARa2Li6tSq/hr+4AsE9JtlghHLaFFrZmgLZdwBffMqDSsCia5wIAAoG2kcAX31cWtp8urIKv6gDAAFQnPgE9ibcgwBffVx63L8AAU+0CAAIWt0iAtz/AF98yh2ewDRa3Uy6sgq/qAD89ibd1wBffVxy3hC6tVa/hAgACgLeawBffMoG3pMAX31cAr/pFt7cBt8C3wgAAYmADwAD8BQGTARy3yYK3x8AX4AJjAQABFrfcFrfLLq1Mr/BhwAD82ADAAP0yAYq35sAX4AIct+SCt+bAF+ACZAEAAZQAwAD9Kj4BPRy38S6tUAQABIC4AsAX3zKBuAzAF99XHLgqFrgaLq1Mr/BLAQABgrgrwBfgAgDAAPy4HLhOFrg5Lq1Nr/FLAQABgrhPwBfgAgDAAPy4AK/1SrhfAYG4ZsAX31cGr/qAhbh7uIS6CQAArVWv4QAAAAEDuJm6CQAAAAICArirAAAAq0tgA7AgALi+AAAAgpBgA4i4AABgA4i4AT4BSbjKFrjOLqyBr+k+AUm44xa45y6GMK/oPgFKuPoBHLkKgLkBwBfgz6wqAgACgbkTwBfg2xa5LBa5IoC5GcAX4M+HZ7ANmuCctgCwVz4BSrlRARy5YYC5WMAX4M+sKgIAAoG5asAX4NsWuYMWuXmAuXDAF+DPh2ewDZrenKMAsFdJuaYWuaouhjCv6D4BSrm7ARy5y4C5wsAX4M+tWAEAAYG52sAX4NsAsFY+AUq59AGBufvAF+DbAAAX07cAF9XmABfZ4wAX3M4AF98UABfgrwAX4aYAAAAGAq/+gIW6eLp9u9gLrVkAAAFgAcAA/VEAAAYEsACAhbp9un0JJwBgA8AA/AUABLACgIW6fbp9CSiv4QBgA8AA/esABLADgIW6fbp9BikAXQPAAPypAWADr/4BagBdA8AA/KkBYAOv/sAA5IcEsASAhbrIusgGh40AYAOv/gFqAGADr/7AAORXBLAFgIW7ErsSBq1dAGADr/4BagBgA6/+wADkaASwBoCFu8W7xQatXgBgA6/+AWoAYAOv/sAA5HkBBbAKgIW6fbp9u9gBAAADun272AAAAAICArp9AAAEJ2ADwAD8BQC6fQAABChgA8AA/esAAGADr/4BPwMIALAAgADAF+KgCACwAoEAwBfirQkAAMAA/WcAAAAAAQawCICFun26fbvYAAAjAAAAAQO6fbvYAAAAAAAAAGADwAD96wFKAAEPAC6wAgAAF+LiABfjDwAAAAECsAuAhb0KvRnAAEQQB6CIAAABYAHAAP1RAAACBLANgIW9Or1DCYdnAGADnEsABLAPgIW9GQAElkiv4QBbATEAWwEaALARAQWwH4CFvUi9SL1sAKvhAAO9XL1sAAAAAQEBvWIAAASHZ2ADnEsAAGADsAsBPwIIAbANgADAF+N9CQG9SMAA/WcAAAAACwawEYCFvXG9eb4xBEEAAAAAAQO9hb4xAAAABQUFvacAAACr4mADrakAvbkAAACArGADwAD+bAC9yQAAAKclYAPAAPo/AL3nAAAAhMJgA4jzAL4MAAAAhENgA6jrAABgA7ALAT01AAAAAIJtWwEaAK24EwAABrATgIW+Nr5PvlYBAoRDAAAAAQO+Vr5WAAAAAAAAAGADqOsABrAUgIW+0r7jvu8BAqC1AAAAAQO+777vAAAAAAAAAGADsHMABrAVgIW/Or9Uv2kBAqDSAAAAAQO/ab9pAAAAAAAAAGADwABUHAAGsBaAhb/fv+e/6gECgKwAAAABA7/qv+oAAAAAAAAAYAPAAP5sAAawGICFwABAMsAAQDfAAECgAAKhEQAAAAEDwABATMAAQKAAAAADAwPAAEBdAAAAlVxgA8AAU6wAwABAbgAAAKyNYAOIuADAAECUAAAAhQdgA4SuAABcAAawGYCFwABA38AAQOTAAEFRAAKhNwAAAAEDwABA9cAAQVEAAAAEBATAAEEGAAAAlVxgA8AAU6wAwABBFwAAAIU6YAOIuADAAEE1AAAAhVRgA4SfAMAAQUwAAACCaWADh2QAAFwABrAagIXAAEGawABBn8AAQecAAqEuAAAAAQPAAEGvwABB5wAAAAICAsAAQcAAAACVXGADwABTrADAAEHbAAAAhQdgA4Q2AABcAAawG4CFwABCLcAAQjLAAEKDAAKg8wAAAAEDwABCP8AAQoMAAAACAgLAAEJXAAAAlVxgA8AAU6wAwABCdwAAAIRjXQPAAPypAWADhK4AAFwABrAcgIXAAEL3wABC/MAAQzsAAqw3AAAAAQPAAEMWwABDOwAAAAEBAcAAQy8AAACEY10DwAD8qQFgA4SuAABcAAawHYCFwABDnMAAQ6HAAEQOAAKhNgAAAAEDwABDusAARA4AAAADAwPAAEPLAAAAlVxgA8AAU6wAwABD6wAAAIUHYAOErgDAAEQBAAAArI1gA4i4AABcAAAAF+OoABfkHAAX5EAAF+RkABfkigAX5LAAF+UHABflbAAX5bUAF+YFABfmRQAX5pwAAAALArAggIXAAEUkwABFM8ABIq4HqH4AAAFgAbALAAAOBLAigIXAAEXTwABGGgWtXwBgA4kFAR/AAEXviR4CAAJqwABF/F0DwAD8qQFgA4i4hZ9qwABGDGADiM+EiAAEsCOAhcAARjnAAEY/CaviAGADwABT2AAEsCSAhcAARlrAAEZdCYCsAWrAAEZFYAPAAP1RAmADwAD+bAAEsCWAhcAARx3AAEcnCYeBAGADwAD6PwAEsCaAhcAAR0HAAEdPCatoAGADm6MABLAngIXAAEdqwABHeQmpgQBgA8AAUkMABLAogIXAAEeawABHrwmg0gBgA8AAVBwABLApgIXAAEfIwABH0AmEwgBgA4jzAASwKoCFwABH/MAASAMJhEMBasAAR9ZgA8AA/VECYAOo6wAEsCuAhcAASCbAAEhPCa1gAF0DwAD82gJgA4JSYAOIuAEywABITWADglJgA4i4AASwLICFwABIZMAASGoYlVwAYAPAAFOsASsEsC2AhcAASOHAAEjvGKyAAGADr+YBKwSwLoCFwABJh8AASZ8YrWEAYAOavwErBLAvgIXAAEo8wABKShitYgBgA4kFASsBBbBggIXAAEpPwABKT8AAS/sAq+EAA8AASmfAAEv7AAAABQUFwABKdAAABKviYAPAAFPYAMAASoEAAASArGADwAD+bADAAEqLAAAApyVgA8AA+j8AwABKmgAABITCYAOI8wDAAEqpAAAEhENgA6jrAABgA7AgAT8KCAGwI4AAwBfosQgBsCSBAMAX6MEIAbApgwDAF+jhCAGwKoQAwBfo7wwAQCIigsAASsLAF+jRABzAAErWhMAASs7AF+jvSAEAASsAwAD9XgEiIYLAAErkwBfo0QAhHMAASviEwABK8MAX6O9IAQABKwDAAP1ewABKwcAASwAACACwJhbAAEsjgMAASxzAF+ixq2jAAFPaCACwJyOCwABLTcAX6NErFsAAS2aAwABLX8AX6LGpgcAAU+EBYAPAAFJDCACwKBbAAEuegMAAS5fAF+ixoNLAAFPeCACwJYLAAEvKwBfo0QkAwABL4rAfAQABFsAAS/GAwABL6sAX6LGHZ8AAU9wALAawMYCFwABMAMAATAnAAE3YAACsGwAAAAEDwABMGsAATdgAAAACAgLAAEwkAAAAg+5gA4JSAMAATDMAAACCkGADiLgAAGADiLgBPgFJwABMPyXAAExIgMAATEPAF+ozYAOsUT4BSsAATGcBF8AATHMUwABMbsAX6jMAAWADrFGhRIHAAEyCwBfqQaxTPgJJwABMmxzAAEywFsAATJ8urWCwK4dHAQABgMAATLzAF+ozAMAA/O0+AT0ewABMzZ0ZAwADHMAATR5qwABM6l0DkWUBYQMCYAOIuGADwAD962ADkU7AAFXMiAsCAAIcwABNTRbAAE09Lq1gsCtLAQABgMAATU7AF+ozAMAA/O4kwABNagEWwABNXYDAAE1YwBfqM4WGwAD9ZQCRaRbAAE1+gMAATXnAF+ozhFOCWRbAAE2WLoCssCQAP0rAAE2qATUAAAABAF0DwAD82gJgA4JSYAOIuAEWwABNsS6tYLArNQAAAAEAYAOCUgGAwABNwsAX6jM1AAAAAQBgA4i4AYHAAE3KwBfqQTUAAAABAFwBHMAATcGCwABNwcAX61mAvwIAAoPAAE3BwBfreYQAwBfrjQDAAPzvhADAF+uNBrAygIXAAE3dwABN5sAATx4AAKyWAAAAAQPAAE32wABPHgAAAAEBAcAATgAAAACD7mADglIAAGADiLgBPgJJwABODCIhHMAATiIWwABOES6tYLArh0cBAAGAwABOLsAX6/0AwAD87QAhFsAATjguh4GwJT4BPR7AAE5MnRkDAAMcwABOomrAAE5nXQORZQFhAwFgA8AA/etgA5FOwABT7YgLAQABJMAATsUBFsAATriAwABOs8AX6/2FhsAA/WUAkWkWwABO14DAAE7SwBfr/YRTglkWwABO7S6ArLAkAD9KwABO/QEcwABPFBbAAE8ELq1gsCtLAQABgMAATxXAF+v9AMAA/O4GsF6AhcAAT33AAE+OwABPmgECoLUAAAABA8AAT5rAAE+aAAAAAAAAAGADsHMABrAzgIXAAE+fwABPpMAAUicAAKxCAAAAAQPAAE+zwABSJwAAAAEBAcAAT70AAACrOmADiLgAAGADwAD6PwE+AkPAAFD9IiIlwABREIDAAFEEwBftMmADiPMAHMAAUUIWwABROBTAAFEswBftMgABYAOI84ToiPlIAQABFsAAUU8WwABRRS6HZ7ANmticnADAAP1eABbAAFGCFsAAUXQUwABRaMAX7TIAAWADiPOFHYj3g7LAAPyMPgJOwABRpMAAUakAAIKQYAOI8wEmwABRpAGAwABRq8AX7TJgA4jzPYjAAFG+wBftMhbAAFHfFsAAUdGBwABRzMAX7cSFHYj3gxnAAPyNSsAAUfABHMAAUgOAwABR98AX7TJIAQABFsAAUhwWwABSEBbAAFIGLodnsA2a0pyZhPqDRwCIvAawNICFwABSLMAAUjHAAFL9AACsSgAAAAEDwABSPcAAUv0AAAACAgLAAFJHAAAAq1hgA4i4AMAAUl4AAACtY2ADiLgAAGADwAD6PwE+AUrAAFJwASIcwABSjRbAAFJ3LqDSsCia5wIAAoDAAFKZwBfuboHAAFKnwBfufADAAFQnARzAAFLUFsAAUr4uoNKwKJrnAgACgcAAUuDAF+58gMAAUuzAF+5uAMAAVCcGsDWAhcAAU5bAAFOhwABnIQAAq1kAAAABA8AAU7HAAGchAAAABwQEwABTuwAAAKtYYAOIuADAAFPSAAAArWNgA4i4AMAAU+8AAACCa2ADhK4AwABT/wAAAIRTYAPAAPwFAAPAAFQXAAAArVNgA8AA+j8BasAAVCpgA8AA+j8AwABUPAAAAKtgYAPAAPo/AWrAAFRLYAPAAPo/AMAAVIcAAACIsV0DkWUBYQMCYAOIuGADiLhgA5FOAWoAYAPAAP0OeWADhK4BPglAIRzAAFSsgMAAVJ/AF+8aSAEAASsAiLzAAFSfwABUswA9iMAAVLrAF+8aHsAAVMnAAFPtAgACFsAAVNkuh2ewDYDAAFTkwBfvGgBOwABVAcAAVRUAAK1kYAOIuAGAwABVF8AX7xpJwABVKSKEwABVLcAX71UAIRzAAFVDLqxKAgACgMAAVVDAF+8agcAAVV7AF+8oALA0PgNOwABWMsAAVkgAAK1lYAOIuAEcwABWahbAAFZULqDSsCiF/wEAAYDAAFZ3wBfvGgCbcE7AAFaVwABWqQAArWZgA4i4ARzAAFarLq1YAQABFMAAVrrAF/BVCAAAsFZJwABW2BzAAFbcLqxKAgACFMAAVunAF/BVCACBwABXAMAX7ygAsDQ+AT2IwABXF8AX7xoUwABXJsAX8FUIAEnAAFdKHMAAV04urEoCAAIUwABXW8AX8IcJAIHAAFdwwBfvKACwND4BPYjAAFeHwBfvGhTAAFeWwBfwhwkAPz9JwABYjhbAAFiSLoeBsCVKwABYngErP0nAAFloJcAAWXeBwABZbMAX7yhgA4jzPgNOwABZlcAAWZ8AAIToYAODGQEWwABZvybAAFmtABTAAFmiwBfvKAEBYAOI82ADiPOE6Ij5TsAAWdTAAFnfAACtZ2ADg14BHMAAWfAWwABZ4S6raLAmmxECAAIUwABaA8AX8WAIABrAAFoOrzEAm7JJwABaHyIlwABaLhTAAFojwBfxlAkAYAOD6gAcwABaThbAAFpJFMAAWj7AF/GUCQFgA4PqgmeD7UgBAAFqwABaX2ADhCeExQDAAP1ePgFJwABacRzAAFp1Lq1or+ECAAKAwABaiMAX7xoUwABalsAX7ygBAWADiPMAsFw+CU7AAFsYwABbHwAAhFJgA4JSARbAAFssgsAAWyHAF+82hFKCWE7AAFtCwABbRAAAg6ZgA4hTATXAAFtKAAABAGADiFMBH8AAW0qIdwIAAYLAAFtnwBfvNgGCkIHAAFt5wBfvKDUAAAABAFsBF8AAW5MUwABbkcAX8oILAIRTg8AAW6DAF+9EglkUAMAX8oILAE7AAFu6wABbxAAArWlgA4SuAR7AAFvGscQDAAMfwABb1oTMAQABFMAAW+LAF/JwCwAAg8AAW+bAF+9EJsAAW/IBFsAAW/IulVywLGADtBgATsAAXAnAAFwRAACtamADhNkBNcAAXCUAAAEAYAOE2QEfwABcJYTpAwADH8AAXDWEzAEAARTAAFxBwBfycAsAABrAAFxFrzEUwABcT8AX8ZQJAWADg+oANQAAAAEAWwEXwABcbRTAAFxrwBfzPg0AhFODwABcesAX70SCWRQAwBfzPg0APYnAAFyQwBfvKBzAAFydLqtWAgACFMAAXKvAF/GUCQFgA4PqgcAAXLfAF+8oALA8TsAAXNLAAFzeAACta2ADhggBH8AAXOSGFQQABBTAAFz6wBfy3AwANcAAXRcAAAEAYAOGoQEfwABdF4apAAAAADUAAAABAFsBF8AAXSYUwABdJMAX9AcOAIRTg8AAXTPAF+9EglkUAMAX9AcOABTAAF0/wBfzLA0AgcAAXUjAF+8oAE7AAF1jwABdZwAAmf1gA4c2ATXAAF1tAAABAGADhzYBH8AAXW2HQQIAAhTAAF1xwBfycAsAFMAAXXTAF/PgDgAANQAAAAEAWwEXwABdghTAAF2AwBf0dA8AhFODwABdj8AX70SCWRQAwBf0dA8APTUAAAABAGADglIBFMAAXaXAF/JMCgAjHMAAXa0UAMAX9NEQAEgBAAErAAArHMAAXa0UAMAX9NEQAIRVAgACgsAAXbrAF+82FMAAXcbAF/RiDwAAgl4BXD2KwABd1sAX7zYUwABd48AX9GIPAD8/P0nAAF4FIiXAAF4UgcAAXgnAF+8oYAOI2wAhhcAAXiTAF+9xPgROwABefcAAXoQAAIRSYAOCUgEWwABekYLAAF6GwBfvNoRSglhOwABeqsAAXrQAAK1sYAOErgEcwABexxbAAF7ALpVcsCyhAwMAA4LAAF7VwBfvNmrAAF7hYAORWcAAlYhqwABe+GADwAD8BRUAwABTtj01AAAAAQBgA4JSARTAAF8JwBf1ZQgAIxzAAF8RFADAF/XXCgBIAQABKwAAKxzAAF8RFADAF/XXCgCEVQIAAoLAAF8ewBfvNhTAAF8qwBf1iQkAAIJeAVxKwABfPAEUwABfQ8AX9YkJAD9JwABfWSIcwABfaoDAAF9dwBfvGkgBAAErAIi8ARzAAF+TFsAAX30uoNKwKJrnAgACgcAAX5/AF+8ogMAAX6vAF+8aAMAAVCc+AUrAAF/hASs/ScAAX/khHMAAYBQWwABf/i6g0rAomucCAAKAwABgIMAX7xqBwABgLsAX7ygAwABUJz4FTsAAYIDAAGCHAACEUmADglIBFsAAYJSCwABgicAX7zaEUoJYTsAAYK3AAGC3AACtbGADhK4BNcAAYL0AAAEAYAOGYwEfwABgvYZ0AgACgsAAYNXAF+82Ix7AAGHttP8BAAGAwABiAcAX7xoAasAAYhdgA4jnhJeAwABiJsAX7xoBYAOIuAA1AAAAAQBbARfAAGI+FMAAYjzAF/b7CQCF3SmGbDUAAAABAFsBF8AAYlsUwABiWcAX9vsJAIRTFsAAYnOCwABiaMAX7zaEU4JZglkUAMAX9vsJAEnAAGKFIiElwABiloDAAGKJwBfvGmADiMMAISXAAGK0gcAAYqnAF+8oYAOIwz4BPRXAAGLPwBf26QkcwABi4hbAAGLbLpVcsCyhAwMAAxTAAGL9wBf26QkAHMAAY001AAAAAQBdA5FlAWEDAmADiLhgA4i4YAORTgGGwABjFcAX740jHMAAYx4UAMAX9/wKAEgBAAErAABqwABjIV0DkWUBYQMCYAOIuGADiLhgA5FOwABYqxQAwBf3/AoAAV0DkWUBYQMCYAOIuGADiLhgA5FOiAsCAAKBwABjW8AX7yiAwABjZ8AX7xoAkWlqwABjgmADwAD8BRUAwABTtj89NQAAAAEAYAOCUgEUwABjm8AX9sUIACMcwABjoxQAwBf4nAoASAEAASsAACscwABjoxQAwBf4nAoAhFUCAAKCwABjsMAX7zYUwABjvMAX9ukJAACCXgFcSsAAY84BFMAAY9XAF/bpCQA+Ak7AAGP3wABkAAAAiLFdA5FlAWEDAmADiLhgA4i4YAORTgEcwABkAi6tba/hAQABgsAAZB/AF+82ALBbScAAZDIhHMAAZD8UwABkNsAX+QYIAEgBAAErAMAA/V4+BE7AAGTowABk7wAAhFJgA4JSARbAAGT8gsAAZPHAF+82hFKCWE7AAGUQwABlGgAArWxgA4SuARzAAGUjFsAAZRwulVywLKEDAwADgsAAZTHAF+82HMAAZVIUwABlScAX+QYIAIgLAgACgcAAZWDAF+8ogMAAZWzAF+8aAJFpasAAZXtgA8AA/AUVAMAAU7Y9NQAAAAEAYAOCUgEUwABljsAX+WMJACMcwABllhQAwBf58gsASAEAASsAACscwABllhQAwBf58gsAhFUCAAKCwABlo8AX7zYUwABlr8AX+YcKAACCXgFcSsAAZcMBFMAAZcrAF/mHCgA+BE7AAGYYwABmHwAAhFJgA4JSARbAAGYsgsAAZiHAF+82hFKCWE7AAGZAwABmSgAArW5gA4ZjATXAAGZQAAABAGADhmMBH8AAZlCGdAIAAoLAAGZdwBfvNofAAGZpwBfwBwA1AAAAAQBbARfAAGaKFMAAZojAF/qSCgCF3SmGbDUAAAABAFsBF8AAZqkUwABmp8AX+pIKAIRTg8AAZrbAF+9EglkUAMAX+pIKAD01AAAAAQBgA4JSARTAAGbKwBf6XAkAIxzAAGbSFADAF/sICwBIAQABKwAAKxzAAGbSFADAF/sICwCEVQIAAoLAAGbfwBfvNhTAAGbrwBf6gAoAAIJeAVxKwABm/wEUwABnBsAX+oAKAAawNoCFwABnJsAAZyvAAGeQAACtbwAAAAEDwABnMcAAZ5AAAAABAQHAAGc7AAAAgpBgA4i4AABgA8AA+j8BPgFKwABnRwEiJcAAZ1OAwABnTsAX+5dgA4jzABzAAGd2FsAAZ2wUwABnZ8AX+5cAAWADiPOE6Ij5SAEAARbAAGeDFsAAZ3kuh2ewDZrNnK0AwAD9XgawN4CFwABqNcAAajzAAHCTAACtcAAAAAEDwABqT8AAcJMAAAAIAwPAAGpZAAAAhYJgA4i4AMAAamwAAACAvWADiIMAwABqdgAAAIRTYAPAAPwFAAXAAGq2AAAArXFdA5FlAWEDAmADwAD962ADiLhgA5FOAWoAYAPAAP0OecAAatYAAACCa2ADhK4BagBgA8AA/Q55wABq8wAAAIV/YAOErgFqAGADwAD9DnnAAGsIAAAAmw5gA8AA+j8BasAAaxBgA8AA+j8AwABrIgAAAKtRYAPAAPo/AWrAAGswYAPAAPo/d2ADwAD9UQE+CEAiIRzAAGtRgMAAa0TAF/wqSAEAASsAiLwAHsAAa1yrugEAAYDAAGtkwBf8KgDAAGtEwABrcQA9iMAAa3nAF/wqHMAAa4gurCwBAAGAwABrncAX/CoAsFRJwABrsSIlwABrwoDAAGu1wBf8KmADiQUAHMAAa98WwABr2oHAAGvVwBf8OIC9iIZIAQABJyAAwAD9+j4BSsAAa/IBJyA/TsAAbBLAAGwcAACE6GADgxkBIyXAAGwrgMAAbB7AF/wqYAOI8xbAAGxTFMAAbEbAF/wqAAFgA4jzhOiI+RbAAGxxFsAAbGcuh2ewDZrMnK8BYAODGU7AAGyJwABsmQAArIVgA4NeARzAAGyjLq1yr+EEAAQUwABst8AX/Y4IAIHAAGzCwBf8OIbAAGzIwBf8roLAAGzQwBf8RgCwWknAAGzhIiKHwABs5cAX/MoAIRzAAG0KgMAAbP3AF/wqSAEAAWrAAG0TYAOIz4SIAIi8ACEcwABtPBTAAG0swBf94wkASAEAASsAwAD9Xj4BPTUAAAABAGADwABSQwEWwABtTS6pgbAnIxzAAG1eFADAF/58CgBIAQABKwAAKxzAAG1eFADAF/58CgCpxQQABBbAAG1lLoCssCSCwABtasAX/EYngkUfwABtjsAAUlMBAAEUwABtrMAX/eMJAAAAwABSRQFcP0nAAG3KIiIiIiIhFsAAbc8uh4GwJQAcwABt9RTAAG3lwBf94wkASAEAASsAwAD9XgAhJcAAbhWAwABuCMAX/CpgA4jPACElwABuPYDAAG4wwBf8KmADiMMAISIcwABuZ4DAAG5awBf8KkgBAAEWwABughbAAG50FsAAbmouh2ewDZrXnJqE+oNHAIi8ABzAAG6jFsAAbp6BwABumcAX/DiAvYiGSAEAAScgAMAA/foAIRzAAG7Hg8AAbrnAF/xXSAEAASsAwAD9Xj4DTsAAbtzAAG7jAABhYAPAAPwFARbAAG7vFsAAbuqBwABu5cAX/DiAvYiGYcAA/e9JwABu/SIewABvAcAA9eYCAAIWwABvEIHAAG8LwBf8OIC9iIYWwABvHxrAAG8WrzGAvYiGAAEewABvMsAA9eYCAAIWwABvQYHAAG88wBf8OIC9iIYWwABvVhrAAG9Hr0yAvYiGAD4BPRXAAG9nwBf/vAqUPz0cwABvkxbAAG+MhMAAb4HAF/yAhFKCWIRVAgAChMAAb6vAF/yAHMAAb8gWwABvwS6VXLAsoSEBAAEcwABv6hbAAG/jLpVcsCyg3AMAAxzAAHAUg8AAcAbAF/xXiAsCAAIWwABwJ4HAAHAiwBf8OIC9iIaAwABwLcAX/CoAkWmCwABwSsAX/EYUwABwZMAX/7wKAADAAFOzAMAAU7gAgl4/SsAAcHkBFMAAcIDAF/3jCQAGsDiAhcAAcPnAAHEAwAB5fgAAq1AAAAABA8AAcRrAAHl+AAAAAwICwABxKwAAAIWCYAOIuADAAHFOAAAArXNgA4WQAAHAAHFsAAAAq1FgA8AA+j8BasAAcXpgA8AA+j93YAPAAP1RAT4BScAAcfglwAByDYHAAHH8wBgBRmADhZg+A07AAHIuwAByPgAArIVgA8AA/VEBHMAAckAurXAHAAOAwAByX8AYATgWwAByfhTAAHJtwBgBRgEBYAOFmIC9hZsWwABylRTAAHKEwBgBRgEBYAOFmIRTglkErXFqwAByul0DkWUBYQMCYAPAAP3rYAOIuGADkU7AAJCYgmsUwABy6cAYAUYBAWADhZiFfxbAAHMgFMAAcw/AGAFGAQFgA4WYhX+FmqtRgsAAc0LAGAFVsDdJwABzVyIcwABzaIDAAHNbwBgBOEgBAAFqwABzcWADiM+EiACIvAAlwABzkoPAAHOCwBgBlGADg+o+Bk7AAHOuwABzuAAAW2ADhXgBFsAAc8sUwABzusAYAUYBAWADhZhbhZxOwABz4sAAc+wAAK10YAOEgwEWwABz/hTAAHPuwBgBlAMBYAOD6oJqg+9JwAB0ECIcwAB0MBbAAHQpFsAAdB6EwAB0FMAYAoGFk4V7YcAA/NhjAQABFsAAdDyFwAB0MsAYAqmFH4SJAMAA/TIBHMAAdH4WwAB0dxbAAHRshMAAdGLAGAKBhZOFe2HAAPzYgJcBAAEWwAB0rxbAAHSahcAAdJDAGAKphMCEimHAAPzYAMAA/TQ+AUrAAHTDASs/RsAAdOLAAHUIwAB06wAAAB9gA4WGABbAAHUBhMAAdPfAGAKBhV2FfD4BScAAdRQhHMAAdUIWwAB1I4XAAHUZwBgCqYTBhIuB1AEAATTAAHVGA8AAdUbAAHV4AAAAAQEBwAB1RwAAAJ6lYAOIUwAAYAPAAPo/AUrAAHVXARzAAHVoFsAAdWOHwAB1V8AYA8aAvYhXSAEAARbAAHV0hsAAdWvAGANvgL2FiADAAP36AMAA/Hw+AUrAAHWJASs/ScAAdbQigsAAdbjAGAFVACEcwAB12BbAAHXILqmBsCdIAQABKwDAAP1ePgE9HMAAdf0WwAB17S6pgbAnqcUEAAQWwAB2BC6ArLAkFsAAdhoUwAB2CcAYAUYBAWADhZiEU4JZJ4JFH8AAdkLAAFJTAQABFMAAdmDAGAGUAwFgA4PqAADAAFJFPz0XwAB2lhTAAHaFwBgBRgEBYAOFmIWBFMAAdqjAGAGUAwFgA4PqhaFJwAB2xiXAAHbag8AAdsrAGAGUYAODXj4BPRfAAHcAFMAAdu/AGAFGAQFgA4WYhYEUwAB3EsAYAZQDAWADg16FoT9KwAB3MQGDwAB3OMAYAZRJwAB3VCXAAHdpgcAAd1jAGAFGYAOFqz4EQCEcwAB3n4DAAHeSwBgBOEgBAAFqwAB3qGADiM+EiACIvMAAd5LAAHe1AE7AAHfCwAB30gAArIVgA8AA/VEBHMAAd9QurXAEAAOAwAB388AYATgWwAB4EhTAAHgBwBgBRgEBYAOFq4C9ha0WwAB4KRTAAHgYwBgBRgEBYAOFq4RTglkBq1GCwAB4TcAYAVWwN0nAAHhiJcAAeHaDwAB4ZsAYBWlgA4NePgE9F8AAeJwUwAB4i8AYAUYBAWADhauFgSbAAHicARTAAHiuwBgFaQMBYAODXmADg+qFsz9KwAB4zQGDwAB41MAYBWk+AT0wwAB4+B7AAHj+nRsEAAQkwAB5KQEWwAB5HIHAAHkLwBgBRoWGwAD9ZSerUBbAAHlkgcAAeVPAGAFGhFOCWRbAAHlwLoCssCQABrA5gIXAAHoXwAB6HsAAf+sAAKx9AAAAAQPAAHozwAB/6wAAAAMCAsAAej0AAACFgmADiLgAwAB6VgAAAK11YAOErgABwAB6bwAAAKtRYAPAAPo/AWrAAHp9YAPAAPo/d2ADwAD9UQE+AUnAAHsTJcAAeyOBwAB7F8AYBqtgA4TZPgNOwAB7P8AAe08AAKyFYAPAAP1RARzAAHtRLq1wBwADgMAAe3DAGAadFsAAe4oUwAB7fsAYBqsBAWADhNmAvYTcFsAAe5wUwAB7kMAYBqsBAWADhNmEU4JZBK1xasAAe8FdA5FlAWEDAmADwAD962ADiLhgA5FOwACQNIJrFMAAe/DAGAarAQFgA4TZhX8WwAB8HRTAAHwRwBgGqwEBYAOE2YV/hNurUYLAAHw/wBgGurA3ScAAfFQlwAB8aIPAAHxYwBgG+WADg14+AknAAHx9IiKCwAB8gcAYBroAIRzAAHytFsAAfJ0uqYGwJ0gBAAErAMAA/V4AHMAAfNGAwAB8xMAYBp1IAQABasAAfNpgA4jPhIgAiLw+AT0cwAB9BRbAAHz1LqmBsCepxQQABBbAAH0MLoCssCQWwAB9HRTAAH0RwBgGqwEBYAOE2YRTglkngkUfwAB9RcAAUlMBAAEUwAB9Y8AYBvkDAWADg14AAMAAUkU/PRfAAH2UFMAAfYjAGAarAQFgA4TZhYEUwAB9psAYBvkDAWADg16E4T9KwAB9xQGDwAB9zMAYBvlJwAB96CXAAH34gcAAfezAGAarYAOFND4EQCEcwAB+KYDAAH4cwBgGnUgBAAFqwAB+MmADiM+EiACIvMAAfhzAAH4/AE7AAH5MwAB+XAAArIVgA8AA/VEBHMAAfl4urXAEAAOAwAB+fcAYBp0WwAB+lxTAAH6LwBgGqwEBYAOFNIC9hTYWwAB+qRTAAH6dwBgGqwEBYAOFNIRTglkBq1GCwAB+zcAYBrqwN0nAAH7iJcAAfvaDwAB+5sAYCOpgA4NePgE9F8AAfxcUwAB/C8AYBqsBAWADhTSFgRTAAH8pwBgI6gMBYAODXoU7P0rAAH9IAYPAAH9PwBgI6j4BSsAAf3MBHsAAf3qdGwQABCTAAH+gARbAAH+TgcAAf4fAGAarhYbAAP1lJ6x9FsAAf9GBwAB/xcAYBquEU4JZFsAAf90ugKywJAAGsDqAhcAAgITAAICLwACF9AAAq7cAAAABA8AAgKDAAIX0AAAAAwICwACAqgAAAIWCYAOIuADAAIDDAAAArXZgA4SuAAHAAIDcAAAAq1FgA8AA+j8BasAAgOpgA8AA+j93YAPAAP1RAT4BScAAgPclwACBB4HAAID7wBgKImADhOs+A07AAIEjwACBMwAArIVgA8AA/VEBHMAAgTUurXAIAAOAwACBVMAYChQWwACBbhTAAIFiwBgKIgEBYAOE64C9hO4WwACBgBTAAIF0wBgKIgEBYAOE64RTglkFrXFqwACBpV0DkWUBYQMCYAPAAP3rYAOIuGADkU7AAJD8gmsUwACB1MAYCiIBAWADhOuFfxbAAIIBFMAAgfXAGAoiAQFgA4TrhX+E7ZsOKatRgsAAgjvAGAoxsDdJwACCUCXAAIJkg8AAglTAGApwYAODXj4CScAAgnkiIoLAAIJ9wBgKMQAhHMAAgqkWwACCmS6pgbAnSAEAASsAwAD9XgAcwACCzYDAAILAwBgKFEgBAAFqwACC1mADiM+EiACIvD4BPRzAAIMBFsAAgvEuqYGwJ6nFBAAEFsAAgwgugKywJBbAAIMZFMAAgw3AGAoiAQFgA4TrhFOCWSeCRR/AAINBwABSUwEAARTAAINfwBgKcAMBYAODXgAAwABSRT89F8AAg5AUwACDhMAYCiIBAWADhOuFgRTAAIOiwBgKcAMBYAODXoT0P0rAAIPBAYPAAIPIwBgKcEnAAIPkJcAAg/SBwACD6MAYCiJgA4VFPgRAIRzAAIQlgMAAhBjAGAoUSAEAAWrAAIQuYAOIz4SIAIi8wACEGMAAhDsATsAAhEjAAIRYAACshWADwAD9UQEcwACEWi6tcAUAA4DAAIR5wBgKFBbAAISTFMAAhIfAGAoiAQFgA4VFgL2FRxbAAISlFMAAhJnAGAoiAQFgA4VFhFOCWQKbDimrUYLAAITXwBgKMbA3ScAAhOwlwACFAIPAAITwwBgMZGADg14+AT0XwACFIRTAAIUVwBgKIgEBYAOFRYWBFMAAhTPAGAxkAwFgA4NehU0/SsAAhVIBg8AAhVnAGAxkPgE9MMAAhX0ewACFg50bBAAEJMAAhakBFsAAhZyBwACFkMAYCiKFhsAA/WUnq7cWwACF2oHAAIXOwBgKIoRTglkWwACF5i6ArLAkAAawO4CFwACF+cAAhgbAAIe/AACrVQAAAAEDwACGG8AAh78AAAACAgLAAIYlAAAArDpgA4i4AMAAhjYAAACtd2ADwAD6PwAAYAOJBQE+AknAAIZIJcAAhleAwACGTMAYDZFgA4kFPgFKwACGcAEUwACGd8AYDZEAAWADiQVJwACGjiKBwACGksAYDZ8AJcAAhquAwACGoMAYDZFgA4jzPgNOwACGycAAhtAAAIJmYAODXgEcwACG3C6tcq/hBAAEFsAAhvsUwACG8MAYDZEAAWADiPOE6Ij5GsAAhwavMSocwACHF5SBxAAAAADAAPwoALBaTsAAhybAAIcvAACteGADiLgBHMAAhzEuq1YCAAKCwACHP8AYDgoUwACHR8AYDZEAAWADiPMAsDxJwACHWiXAAIdng8AAh17AGA5cYAOJBT4BSsAAh4IBFMAAh4nAGA5cAwFgA4kFPz9KwACHpQEawACHrLAiBrA8gIXAAIfEwACHzcAAjQsAAKtWAAAAAQPAAIfawACNCwAAAAICAsAAh+IAAACshWADwAD9UQDAAIf8AAAAhYJgA4i4AABgA4i4AT4BScAAiBAewACIFMAA9eYCAAKAwACIHsAYDvgnIAA+AUrAAIhAAYHAAIhHwBgPCEnAAIhgHMAAiHSAwACIZMAYDvhIAQABKwDAAP1ePgFKwACIhQFqwACIkmADiM+EiEnAAIisJcAAiMCAwACIsMAYDvhgA4NePgVOwACI18AAiOMAAK15YAODGQEWwACI9RTAAIjlwBgO+AABYAODXoT/g2ZOwACJFAAAAKw6YAOIuABJwACJJiXAAIk6FMAAiSrAGA74AAFgA4NeYAOD6j4BScAAiVIcwACJaxbAAIlmFMAAiVbAGA74AAFgA4PqgmeD7UgBAAFqwACJfGADhCeEpwDAAP1ePgE9i8AAiZDAGA/AFsAAibYWwACJrRTAAImdwBgO+AABYAOD6oJqg++FOoSMPgE9i8AAid3AGA/AFsAAigMWwACJ+hTAAInqwBgO+AABYAOD6oJqg++FO4SaScAAiiglwACKPBTAAIoswBgO+AABYAODXmADg3w+AT2LwACKUMAYD8AWwACKbRTAAIpdwBgO+AABYAODfIKQg34+AT0wwACKih7AAIqQnRsEAAQcwACKthbAAIqqFMAAiprAGA74AAFgA4NehYbAAP1lIwAAAADAAP1fJ6tWKysAScAAivoWwACLGRbAAIsKgsAAiv7AGA+WhL6DKIOywAD8jD4CPYnAAIsvwBgPCBzAAIs+LqwsAQABgcAAi1PAGA8IALBUScAAi2olwACLe4HAAItuwBgPCGADiPM+Ak7AAIudwACLqAAAm3BgA4jzARzAAIvHFsAAi7guq2iwJoVyAgACFMAAi9vAGA8IAQFgA4jzgsAAi+nAGA+WAJuuPYvAAIwBwBgPwBzAAIxIHsAAjBuaxwEAAYTAAIwtwBgRXQCFgwEAAYPAAIxXwBgPwACazj8/SsAAjHwBg8AAjIPAGA/APgE9MMAAjKIewACMqJ0bBAAEHMAAjNkWwACMzYDAAIy9wBgO+IWGwAD9ZSMAAAAAwAD9XyerVisrAAawPYCFwACNEMAAjRnAAI5TAACtVgAAAAEDwACNMcAAjlMAAAACAgLAAI07AAAAgpBgA4i4AMAAjUcAAACEkmADgxkAAGADiLgBPgJJwACNVSXAAI1egMAAjVnAGBJEYAOI8z4CTsAAjXzAAI2SAACtemADiPMBHMAAja0WwACNni6raLAmhXICAAIUwACNwcAYEkQAAWADiPOBwACNx8AYElIAm65JwACN1iEcwACN8ILAAI3awBgSgkgBAAErAIkBPgFKwACOAwEcwACOLRbAAI4ggsAAjgrAGBKChR2I90sBAAGTAMAA/Lg/P0rAAI5EASsGsD6AhcAAjrbAAI7BwACO4QACq+MAAAABA8AAjtTAAI7hAAAAAQEBwACO2wAAAISUYAODfAAAYAOErgAGsD+AhcAAj1/AAI9mwACQDQAArXsAAAABA8AAj3PAAJANAAAAAQEBwACPewAAAIJmYAODXgAAYAODXgE+AknAAI+JIiXAAI+UgMAAj43AGBN0YAOD6gAWwACPqxTAAI+kwBgTdAABYAOD6oUqhAA+AUrAAI/FARbAAI/TFMAAj8zAGBN0AAFgA4PqhS2EDT9KwACP/AGAwACQA8AYE3QGsECAhcAAkBLAAJAbwACVjwAArDAAAAABA8AAkCjAAJWPAAAAAgICwACQMAAAAKyFYAPAAP1RAMAAkEoAAACFgmADiLgAAGADiLgBPgFJwACQXiXAAJBygMAAkGLAGBQTYAOJBT4BSsAAkIsBFMAAkJLAGBQTAAFgA4kFScAAkK4cwACQwoDAAJCywBgUE0gBAAErAMAA/V4+AUrAAJDTAWrAAJDgYAOIz4SIScAAkPolwACRDoDAAJD+wBgUE2ADg14+BU7AAJElwACRMQAArXlgA4MZARbAAJFDFMAAkTPAGBQTAAFgA4NehP+DZk7AAJFiAAAAhQRgA4i4AEnAAJF0JcAAkYgUwACReMAYFBMAAWADg15gA4PqPgNAHMAAkbwWwACRtxTAAJGnwBgUEwABYAOD6oJng+1IAQABasAAkc1gA4QnhLYAwAD9XsAAkafAAJHTAE7AAJHiwACR8wAArXxdA8AA/KkBYAOIUwEWwACSDhbAAJIFFMAAkfXAGBQTAAFgA4PqgmqD74TAhIo9i8AAkizAGBTbIxzAAJJRFsAAkkqEwACSOcAYFURhwAD82ICXAQABkwDAAP00FsAAknccwACSc4TAAJJjwBgVREsBAAGTAMAA/LiCkIhZasAAkpBgA4jPhIgBYAOIuEnAAJKsJcAAksAUwACSsMAYFBMAAWADg15gA4N8PgE9i8AAktTAGBTbFsAAkvEUwACS4cAYFBMAAWADg3yCkIN+PgE9MMAAkw4ewACTFJ0bBAAEHMAAkzoWwACTLhTAAJMewBgUEwABYAODXoWGwAD9ZSMAAAAAwAD9XyesMCsrAEnAAJN+FsAAk50WwACTjoLAAJOCwBgUsYS+gyiDssAA/Iw+Aj2JwACTs8AYFCMcwACTwi6sLAEAAYHAAJPXwBgUIwCwVEnAAJPuJcAAk/+BwACT8sAYFCNgA4jzPgJOwACUIcAAlCwAAJtwYAOI8wEcwACUSxbAAJQ8LqtosCaFcgIAAhTAAJRfwBgUIwEBYAOI84LAAJRtwBgUsQCbrj2LwACUhcAYFNscwACUzB7AAJSfmscBAAGEwACUscAYFrwAhYMBAAGDwACU28AYFNsAms4/P0rAAJUAAYPAAJUHwBgU2z4BPTDAAJUmHsAAlSydGwQABBzAAJVdFsAAlVGAwACVQcAYFBOFhsAA/WUjAAAAAMAA/V8nrDArKwAGsEGAhcAAlZTAAJWdwACWbwAArU8AAAABA8AAla7AAJZvAAAAAgICwACVuAAAAIKQYAOIuADAAJXEAAAAhJJgA4MZAABgA4i4AT4BScAAldIiJcAAlduAwACV1sAYF6NgA4jzAB7AAJXvwAD15gIAAhbAAJX+FMAAlfnAGBejAAFgA4jzhOiI+YHAAJYJwBgXsQA+AUrAAJYaARzAAJYzFsAAliYUwACWIcAYF6MAAWADiPOFHYj3SwEAAZMAwAD8uD4BSsAAlksBasAAllhgA6vGwADgdgawQoCFwACXSsAAl1XAAJ8tAACrXQAAAAEDwACXc8AAny0AAAAHBwfAAJeZAAAAq1pgA6/+AMAAl7sAAACsQGADhZgAwACX4AAAAFtgA4V4AMAAl/wAAACCa2ADhK4AwACYFwAAAKFEYAOIuADAAJg4AAAAhTtgA4kFAMAAmFAAAACEU2ADwAD8BQAAYAOErgE+A07AAJhmwACYegAArX1gA4SuATUAAAABAGADhZgBgcAAmHzAGBiIIxzAAJiQhwDAGBj4SAEAASsAAIPAAJiTwBgYo4cAwBgY+AFgA4SuQUfAAJijgMAAmKvAGBh6AwHAAJjhasAAmOFgA6/+wADkaAA+BU7AAJkAwACZBwAAhFJgA4JSARbAAJkdh8AAmQnAGBjmhFKCWE7AAJkxwACZPQAAhFdgA4ZjATXAAJlDAAABAGADhmMBH8AAmUOGdAIAAofAAJlQwBgY5oTAAJllwBgYsQA1AAAAAQBbARfAAJl/FMAAmX3AGBmOCQCF3SmGbDUAAAABAFsBF8AAmZ4UwACZnMAYGY4JAIRThsAAmavAGBjNglkUAMAYGY4JAD0cwACZxhTAAJm/wBgZWAgAhFUCAAKHwACZ08AYGOYUwACZ6MAYGXwJAACCXknAAJn+IRzAAJoSFsAAmgIuqYGwJ0gBAAErAMAA/V4+Ak7AAJorwACaMgAAg1xgA8AA/AUBIxzAAJpJFsAAmj6CwACaNMAYGJaEU4JZSAEAARzAAJpMlIHEAAAAAMAA/CgAwAD9KBbAAJpqg8AAml/AGBijhFOCWRbAAJqPgsAAmoXAGBiWhFOCWQFgA8AA/AU9HMAAmrUWwACapS6pgbAnqcUEAAQWwACavC6ArLAkFMAAmsHAGBpRCgAnrX4fwACa6sAAUloBAAGEwACbBsAYGLEAAMAAUkU/SsAAmygBFMAAmy/AGBl8CQABwACbZWrAAJtlYAOv/sAA5HkAPgdOwACbhMAAm4sAAIRSYAOCUgEWwACboYfAAJuNwBgY5oRSglhOwACbtcAAm8EAAK11YAOE2QEfwACbx4TpAwADFsAAm+eBwACb08AYGIiFf4WaFsAAnBGBwACb/cAYGIiAvYWbFsAAnCuBwACcF8AYGIiFgYWfAE7AAJxJwACcVgAAhp9gA4ZjATXAAJxcAAABAGADhmMBH8AAnFyGdAIAAhTAAJxpwBgbVAkAhcAAnHbAGBi/ADUAAAABAFsBF8AAnJAUwACcjsAYG7kKAIXdKYZsNQAAAAEAWwEXwACcrxTAAJytwBgbuQoAhFOGwACcvMAYGM2CWRQAwBgbuQoATsAAnNTAAJzgAACEV2ADhZgBH8AAnOaFqQMAAxTAAJ0EwBgbpwoAGsAAnRKvMRbAAJ0wgcAAnRzAGBiIW4WcAD0cwACdSxTAAJ1EwBgbMAgAhFUCAAKHwACdWMAYGOYUwACdbcAYHDALAACCXknAAJ2DIRzAAJ2XFsAAnYcuqYGwJ0gBAAErAMAA/V4+Ak7AAJ2wwACdtwAAg1xgA8AA/AUBIxzAAJ3OFsAAncOCwACducAYGJaEU4JZSAEAARzAAJ3RlIHEAAAAAMAA/CgAwAD9KBbAAJ3vg8AAneTAGBijhFOCWRbAAJ4UgsAAngrAGBiWhFOCWQFgA8AA/AU9HMAAnjoWwACeKi6pgbAnqcUEAAQWwACeQS6ArLAkFMAAnkbAGBy+DAAnrV4fwACedcAAUloBAAGFwACekcAYGL8AAMAAUkU/SsAAnrMBFMAAnrrAGBwwCwABwACe8GrAAJ7wYAOv/sAA5FcAPgFCwACe/gBKwACfDwGHwACfFsAYGOYGsEOAhcAAn9PAAJ/ewAClHQAArH4AAAABA8AAn/3AAKUdAAAABgYGwACgEAAAAIV/YAOErgDAAKAnAAAArIVgA8AA/VEAwACgSgAAAKx7YAOE2QDAAKBpAAAAgmtgA4SuAMAAoIQAAAChRGADiLgAwACgnAAAAIRTYAPAAPwFAABgA4SuAT4GTsAAoLPAAKC/AACtfmADwAD6PwEqScAAoMwiIiEcwACg2YDAAKDQwBgd2UgBAAErAMAA/V4AIRzAAKD8gcAAoOzAGB3nSAEAASsAwAD9XgAhJcAAoRiAwAChD8AYHdlgA4bAPgFJwAChNCXAAKFIgcAAoTjAGB3nYAOD6j4BPY7AAKFgwBgeOh7AAKFusFICAAIWwAChtRTAAKGlwBgd5wEBYAOD6oT/g2YWwACh6hbAAKHhFMAAodHAGB3nAQFgA4PqgmqD74U6hIwAScAAogQlwACiGIHAAKIIwBgd52ADg3w+AT2OwACiLMAYHjoewACiOrBSAgACFsAAooEUwACiccAYHecBAWADg3yE/4NmFsAAoqEUwACikcAYHecBAWADg3yCkIN+AD8/TsAAor7AAKLRAACtf2ADhK4BNQAAAAEAYAOE2QGCwACi08AYHfcjHMAAouCHAMAYH3hIAQABKwAAg8AAouPAGB4FhwDAGB94AWADhK5JwACi84bAAKL3wBgeOj4ETsAAoxDAAKMkAACtfWADhK4Bh8AAoybAGB9mTsAAo0TAAKNLAACEUmADglIBFsAAo2EUwACjTcAYH8MIAIRSglg9j8AAo2/AGB9mNcAAo4gAAAEAYAOGYwEfwACjiIZ0AgACFMAAo5XAGB/DCACEwACjqsAYHhMANQAAAAEAWwEXwACjwhTAAKPAwBggDgoAhd0phmw1AAAAAQBbARfAAKPfFMAAo93AGCAOCgCEU4XAAKPswBgeIYJZFADAGCAOCgA9HMAApAUUwACj/sAYH94JAIRVAgACFMAApBLAGB/DCACHwACkJ8AYH2YAgl4/ScAApEYiIRzAAKRaFsAApEouqYGwJ0gBAAErAMAA/V4AhsAApGXAGB46PgE9HMAApIoWwACkei6pgbAnqcUEAAQWwACkkS6ArLAkFsAApKGDwACklsAYHgWEU4JZJ61+H8AApMrAAFJaAQABhMAApObAGB4TAADAAFJFP0rAAKUAAYfAAKUHwBgfZgawRICFwAClcsAApXvAAKdSAACsjgAAAAEDwAClj8AAp1IAAAABAQHAAKWZAAAArCNgA4i4AABgA4i4AT4CScAApbAiJcAApcSAwACltMAYIWVgA4jnASIlwACl7oDAAKXewBghZWADiPMAHMAApigWwACmHhTAAKYOwBghZQABYAOI84ToiPlIAQABFsAApjUWwACmKy6HZ7ANms2crQDAAP1ePgFKwACnEgFqwACnH2ADiM+EiD9KwACnOAGAwACnP8AYIWUGsEWAhcAAqWzAAKl1wACp7AACq1cAAAABA8AAqYTAAKnsAAAABAMDwACpngAAAIJrYAOErgDAAKmzAAAAqzpgA4i4AMAAqcUAAACr5GADwAD6PwABwACp3QAAAKtgYAPAAPo/AWoAYAPAAP0OeWADiLgABrBGgIXAAKnxwACqAsAAq8AAAKERAWrAAKnyYAPAAP1RAgAAAQPAAKoXwACrwAAAAAMDA8AAqi0AAACVXGADwABTrADAAKpCAAAAglNgA4i4AMAAqmEAAACFB2ADhK4AAFwBPgZAHMAAqo4WwACqfy6sgLAtSAEAASsAwAD9XsAAqn/AAKqVAEAhFsAAqqQuh4GwJcAAqqPAAKquAD0XwACqui6VXIDAAKrDwBgiq7AsTsAAqtPAAKreAACtY2ADiLgBHMAAquguq1cEAAOCwACq+MAYIsmBwACrBcAYIrspAatgKbBFPRzAAKsuLqtZBQAEgcAAqz/AGCK7g8AAq0jAGCMpgsAAq1TAGCLJFsAAq22CwACrYcAYIsmEU4JZAatgJcAAq5iBwACrkMAYIrtgA4jbsDU9F8AAq68ulVwrsCwGsEeAhcAAq8XAAKvWwACtIgAAoTcBasAAq8ZgA8AA/VECAAABA8AAq+fAAK0iAAAABAQEwACr+AAAAJVcYAPAAFOsAMAArAkAAACFOmADiLgAwACsJwAAAIVUYAOEnwDAAKw+AAAAgmlgA4dkAABcAT4GQBzAAKxgFsAArFEurICwLUgBAAErAMAA/V7AAKxRwACsZwA9F8AArHMulVyAwACsfMAYI+6wLD0XwACsiC6sgB7AAKydr/MEAAQugsAArLLAGCQMgcAArL/AGCP+KgCwLT0cwACs1y6r5gEAAYPAAKzmwBgkGgCwUD0XwACs8S6sgCuwLT0XwACtES6VXCuwLAawSICFwACtt8AArdHAAMp5AACsIQAAAAEDwACt4MAAynkAAAAJBQXAAK3qAAAAqzpgA4i4AMAArfsAAACDXGADwAD8BQDAAK4WAAAArDpgA4kFAMAArisAAACFOmADiLgAwACuQQAAAFtgA4V4AATAAK5YAAAAhZFgA8AA+j8BasAArnhgA8AA+j8AwACujgAAAIWCYAOIuAFqAGADwAD9DnnAAK6nAAAArDhgA8AA+j8BasAArsJgA8AA+j8AwACu1AAAAIQdYAPAAPo/AWrAAK7dYAPAAPo/AGADsGwBPhg9F8AArusurWErsC49F8AArxAurWIrsC9OwACvP8AAr1QAAK2AXQPAAPypAWADiU8BFsAAr2GCwACvVsAYJQSEvokHScAAr3UWwACvjhTAAK95wBgluQkAg7LAAPyMPgROwACyR8AAsk0AAJqeYAOatAEewACyT5qzAQABFMAAsmbAGCW5CQAAPYrAALKDwBglBBzAALKWFMAAspDAGCYBCgCafQEAAYLAALKqwBglBACauT2LwACyvcAYJRIcwACy0BTAALLKwBgmAQoAmn4BAAGDwACy28AYJRIAmro9FcAAsu7AGCW5CRbAALMLFMAAswXAGCYBCgCafJq2P07AALM5wACzTwAArYFdA8AA/KkBYAOIuAEewACzUavfAQABhMAAs2rAGCUgAE7AALN/wACzjwAArEhgA8AA+j8BIiIhh8AAs5LAGCVhABzAALPNFMAAs7fAGCafCgBIAQABKwDAAP1eABbAALP1FMAAs+DAGCW5CQCDssAA/IxOwAC0CsAAtBsAAKwlYAPAAPo/ASEWwAC0Hi6HgbAlTsAAtD0AAACoj10DwAD8qQFgA4i4AE7AALRdAAAAhOpgA5q/AE7AALR+AAAArFBdA8AA/KkBYAOIuABOwAC0ngAAAKxRXQPAAPypAWADiLgAScAAtK8iFMAAtLPAGCbMCwABFMAAtMbAGCceDAA+Aj0VwAC04MAYJ2IPMcAAtO5gA4i4AD0VwAC0+MAYJ3gQMcAAtQZgA4i4AD9JwAC1FBTAALUYwBgmzAsAPgRJwAC1MSIUwAC1NcAYJX0IAAAhHMAAtUyAwAC1QMAYJOZIAQABKwCIvD4BPYjAALVfwBgk5hzAALWfH8AAtX3AAFQ5AQABFsAAtZQuh2ewDQCFgwEAAYDAALWuwBgk5gCazj89FcAAtcrAGCc9DR7AALXewAD8rgIBYAOIuAIWwAC2FBTAALX/wBgluQkAYcAA/NhqwAC2ImADq8bAAOB2AD0cwAC2ThbAALY4LqDSsCisUgYABoPAALZpwBglEhTAALZ/wBgluQkAKyuAwAC2ocAYJOYUwAC2rsAYJz0NAADAAFQkPRXAALbEwBgnUw4ewAC26prJAgACFMAAtvTAGCW5CQAUwAC3CsAYJz0NAABJwAC3JSIhHMAAtz8UwAC3KcAYJp8KAEgBAAErAMAA/V4AHMAAt24WwAC3ZxTAALdSwBgluQkAYcAA/NhIAQABFsAAt4cUwAC3ccAYJp8KAGHAAPzYAMAA/Sg+AT0VwAC3l8AYJ1MOHsAAt72ayQIAAhTAALfHwBgluQkAFMAAt93AGCafCgAAScAAuAAhHMAAuCAWwAC4GRTAALgEwBgluQkAYcAA/NhIAQABkwDAAP0oPgE9FcAAuC7AGCdTDh7AALhKmskCAAIUwAC4X8AYJbkJAB7AALiDwAD8rgIBYAOIuAIWwAC4vRTAALiowBgluQkAYcAA/NhqwAC4y2ADiM+EiAAAP07AALlfwAC5YQAAYmADwAD8BQGTPRzAALlqLq2Cr+ECAAKEwAC5e8AYJSA0wAC5hgPAALmGwAC8uQAAAAICAsAAuYcAAACAvWADwAD96wDAALmNAAAAgmtgA4SuAABgA8AA/Q4BPgVOwAC5qsAAubUAAKEjYAOIuAEjIRzAALm8FMAAubfAGCpAEgBIAQABKwDAAP36HsAAudDAAFP9AgACgsAAuebAGCUEFMAAufLAGCpAEgAAHsAAugTAAFP+AgACgsAAuh/AGCUENQAAAAEAYAPAAPwFARTAALorwBgqAhEANQAAAAEAYAPAAPwFARXAALorwBgqAhEcwAC6LBQAwBgqzRQAZAEAAZQAwAD9KhQAwBgqzRQAAAFgA4i4TsAAukDAALpTAACtg2ADiLgBIyEcwAC6YhTAALpVwBgnUw4ASAEAASsAwAD9XhzAALqDFMAAunbAGCdTDgCFgwEAARTAALqSwBgqaRQAAJrOFMAAuqrAGCppFAABYAOIuE7AALrAwAC6zwAArIhgA4i4ARzAALrRLqtXAwADFMAAuuzAGCpQEwAUwAC7AsAYKyEVACIiFMAAuyDAGCbMCwABhcAAu0HAGCUuARTAALtxwBgnHgwAALBFScAAu4oiFMAAu47AGCbMCwABFMAAu6HAGCceDAA+Aj0cwAC7yRTAALu9wBgnYg8AVgEAARTAALvNwBgqaRQAAMAA/Lo9HMAAu+4UwAC74sAYJ3gQAFYBAAEUwAC78sAYK4IWAADAAPy6P0nAALwRhcAAvBXAGCUuPgE9i8AAvD/AGCUSHMAAvGIWwAC8TC6g0rAohZICAAKGwAC8jcAYJUoUwAC8m8AYK4IWAADAAFQjPwCwWU7AALz9wAC9AwAAhV1dA8AA/KkBYAOFhgEWwAC9D4TAAL0FwBglIIVdhXxJwAC9GhzAAL0rFsAAvSQUwAC9HsAYLJASAGHAAPzYSAEAAZUAwAD9KD4BScAAvTkcwAC9SxbAAL1GHMAAvUIUwAC9PcAYLJASAEsBAAGTAMAA/LiAvYWISAEAARbAAL1XHMAAvVMUwAC9TsAYLJASAEsBAAGUAMAA/LiAvYWIAMAA/fo+BU7AAL1rwAC9cAAAgL1gA8AA/esBFsAAvXscwAC9dxTAAL1ywBgskBIASwEAAZQAwAD8uIC9hYhOwAC9jcAAvZMAAIHFYAOErgEcwAC9nBbAAL2VLpVcsCyhIQEAARzAAL2+FsAAvbculVywLKDcAwADHMAAvfhqwAC92F0DkWUBYQMBYAPAAP3rYAORTq3fiAsBAAEUwAC+BsAYLUETAACRaRbAAL4iHMAAvh4UwAC+GcAYLJASAEsBAAGUAMAA/LiEU4JZFsAAvj8UwAC+OsAYLUETAGHAAP3vAMAAU7MAwABTuD0XwAC+W4TAAL5RwBglIIVdMcAAvmNgA4WGAR/AAL5ohY8CAAIWwAC+iBzAAL6EFMAAvn/AGCyQEgBLAQABlADAAPy4gL2FiBTAAL6OwBgteBQAAIV8PRzAAL6rFMAAvp/AGCdiDwCGFwAAAADAAPzIPRzAAL7NFMAAvsHAGCd4EACGFwAAAADAAPzIP0nAAL7uHMAAvv8WwAC++BTAAL7ywBgskBIAYcAA/NiAlwEAAZUAwAD9ND4GTsAAvxDAAL8aAACthF0DwAD82gJgA8AA/etgA4WGATLAAL88YAPAAP3rYAOFhgBOwAC/SsAAv1UAAKG+YAPAAPo/ASpOwAC/aMAAv3cAAK2FYAPAAPwFARbAAL+OFsAAv4OEwAC/ecAYJSCFk4V7YcAA/NhOwAC/oMAAv6wAAK2GXQPAAPypAWADhYYBMcAAv8ZgA4WGAEbAAL/QwAC/7sAAv9kAAACCa2ADhYYAFMAAv+fAGCyQEgA+Ak7AAL/8wADAAQAAgL1gA8AA/esBFsAAwA4UwADAA8AYL30XAIC9hYhJwADAHBzAAMAqFMAAwCDAGC7eEwCHRwEAARTAAMA2wBgvmRgAAMAA/O0+BT0VwADAScAYLw0UKU7AAMBqwADAfgAArYdgA4WGARzAAMCJFMAAwIDAGC7eEwBLAQABFMAAwIrAGC+ZGAAAwAD87j0XwADArxTAAMCbwBgv+RkAgJY1wADAvgAAAQBgA4SuARzAAMC+FsAAwLculVywLKEhAQABHMAAwO8WwADA6C6VXLAsoNwDAAMcwADBL2rAAMEPXQORZQFhAwFgA8AA/etgA5FOrd+ICwEAARTAAME9wBgvmRgAAJFpFsAAwWEUwADBVsAYL30XAIRTglkWwADBhBTAAMF/wBgvmRgAYcAA/e8AwABTswDAAFO4NQAAAAEAWwEXwADBmxTAAMGZwBgwQhoAhFIUwADBpMAYL/kZAIJYFADAGDBCGgCFiT0cwADBzxTAAMHDwBgnYg8An9gBAAEUwADB2MAYLyIVAADAAPzHPRzAAMH/FMAAwfPAGCd4EACf2AEAARTAAMIIwBgvIhUAAMAA/Mc+Az0cwADCPRTAAMI0wBgu3hMAgL8CAAIUwADCPsAYL5kYABTAAMJGwBgvfRcAAMAA/O89HMAAwmgUwADCXMAYL1IWAFYBAAEUwADCbMAYL30XAADAAPy6PRXAAMKDwBgvIhUcwADCkRTAAMKDwBgvIhUAZAEAAZQAwAD9KknAAMKtFMAAwrHAGC8NFAA+AT0XwADC0YTAAMLHwBglIIVdFMAAwtnAGC9SFgCFfD8/ScAAwvkUwADC/cAYJswLAD4FPRzAAMMsFsAAwxYuoNKwKKxSBgAGg8AAw1LAGCUSFMAAw2jAGCW5CQAUwADDiMAYJ2IPABTAAMOfwBgneBAAgMAAw7bAGCTmFMAAw83AGCc9DQAAwABUJD0VwADD48AYJ1MOHsAAxAmayQIAAhTAAMQTwBgluQkAFMAAxCnAGCc9DQAAPTUAAAABAGADwABSQwEWwADEPy6pgbAnIxzAAMRQFADAGDKfEwBIAQABKwAAKxzAAMRQFADAGDKfEwCpxQQABBbAAMRXLoCssCSBwADEXMAYJPQnrFMfwADEfsAAUmEBAAEUwADEnsAYJz0NAAAAwABSRQFcPRzAAMTFFsAAxL+EwADEtcAYJSCFbYV6gkIAAAAAwAD8wj0cwADE5BbAAMTehMAAxNTAGCUghW2FeoClAQABFMAAxOvAGCc9DQAAwAD8uz9JwADFBSIUwADFCcAYJx4MAAAhHsAAxR7AAPXmAgACgsAAxSjAGCUEGsAAxTSwIgA+Ak7AAMVdwADFaAAAottgA5FsARzAAMV7FsAAxXQulVywLKLjAwADgsAAxZHAGCUEhMAAxZ3AGCUggcAAxajAGCT0AMAAU7RJwADFtyEcwADFxhTAAMW7wBgzlRMASAEAASsAwAD9Xj4BPRzAAMXgFsAAxdkulVywLJ51AwADFsAAxgMUwADF+MAYM5UTAIi3kXEWwADGHRTAAMYSwBgzlRMAh1SRbxbAAMY0FMAAxinAGDOVEwBhkXAAwABTtT4CTsAAxpPAAMalAACtiGADwAD8BQEWwADGvBbAAMaxhMAAxqfAGCUghZOFe2HAAPzYRcAAxswBwADG1cAAxtcAAGJgA8AA/AUBkwEcwADG3hTAAMbcwBg0iRUAYwEAARbAAMbsFMAAxuDAGCdiDwBhwAD82ADAAP0yARXAAMb0wBg0iRUcwADG9RTAAMb0wBg0iRUAZAEAAZQAwAD9Kj4FTsAAxwnAAMcUAAChI2ADiLgBHMAAxyEUwADHFsAYJ2IPAEsBAAEUwADHIsAYNIkVAADAAPy4TsAAxzTAAMdBAACrWGADiLgBIyEcwADHUBTAAMdDwBgnUw4ASAEAASsAwAD9XhzAAMd1FMAAx2jAGCdTDgCFgwEAARTAAMeEwBg08xYAAJrOFMAAx6DAGDTzFgABYAOIuE7AAMe6wADHxQAArWNgA4i4ARzAAMfSFMAAx8fAGCd4EABLAQABFMAAx9PAGDSJFQAAwAD8uE7AAMflwADH8AAAgmtgA4SuASMcwADH9BTAAMfywBg0iRUAYwEAARTAAMf2wBg0VBQAAMAA/TIcwADILBbAAMgihMAAyBjAGCUghZOFe0sBAAEUwADILcAYNIkVAADAAPy4FsAAyGccwADITxbAAMhKhMAAyEDAGCUghV2FfEsBAAEcwADIUhTAAMhQwBg0iRUAgY0BAAEUwADIVMAYNFQUAADAAP0rAMAA/LiAloWJAWADhK49HMAAyHguq1kGAAQUwADImMAYNSkXABTAAMimwBg1ihgAFMAAyLLAGDXAGQAWwADIyRTAAMi+wBg1wBkAhFOCWQKrYCXAAMj/FMAAyPLAGDUpFwBgA4jbiLFqwADJJF0DkWUBYQMCYAOIuGADiLhgA5FOiwOwNT9OwADJbQAAAKFEYAOIuAA9F8AAyX8urWEUwADJmsAYJ1MOALAuPRfAAMmsLq1igsAAyb3AGCUEsC89FcAAyc3AGDbtEyMcwADJ6RTAAMncwBgnUw4ASAEAASsAwAD9XoPAAMn7wBglEhzAAModFMAAyhDAGCdTDgCFgwEAAYPAAMoswBglEgCazgFgA4i4SsAAyj0BH8AAykiwcQIAAisUwADKaMAYNu0TAAAGsEmAhcAAyn7AAMqYwADiugAArDYAAAABA8AAyqrAAOK6AAAABAQEwADKuAAAAIJqYAOEgwDAAMrRAAAAqzpgA4i4AMAAyuIAAACEU2ADwAD8BQDAAMr3AAAArDRgA4i4AABgA7BsAT4UTsAAyxHAAMsnAACjGWADwAD6PwEqScAAyzQcwADLRoPAAMs4wBg360gBAAErAIi8PgI9jMAAy1fAGDgCKT2LwADLe8AYN+tqwADLkWADiM+EiD9JwADLqiEWwADLry6HgbAlPgNOwADLx8AAy9wAAITAXQPAAPypAWADiFMBFsAAy+eAwADL3sAYN7+EwISKRcAAzAMBwADMDMAAzA4AAGJgA8AA/AUBkwEcwADMFYbAAMwTwBg4l2MBAAEWwADMLIXAAMwXwBg4Z2HAAPzYAMAA/TIBjsAAzDTAGDiXHMAAzDWGwADMNMAYOJdkAQABlADAAP0qPgNOwADMR8AAzFEAAIDtYAOIUwEcwADMZ4XAAMxTwBg4Z0sBAAGGwADMaMAYOJcAwAD8uD0cwADMdC6sNwEAARbAAMyZh8AAzI/AGDj6hGOIVgCwS0nAAMyvIRzAAMzJFsAAzL2HwADMs8AYOPqFB4hbSAEAASsAwAD9Xj4BPRzAAMzeLqtXAwADFsAAzPiHwADM7sAYOPqFB4hbFsAAzQ+HwADNBcAYOPqCkIhZIRbAAM0WLoeBsCUAsEU/RsAAzTvAAM1rwADNRAAAAIDtYAOIUwAWwADNWoDAAM1RwBg3v4TBhIs+Aj0cwADNdS6sNwEAARbAAM2ahsAAzZDAGDm9hGOIVgCwSz0cwADNsC6rVwMAAxbAAM3KhsAAzcDAGDm9hQeIWxbAAM3hhsAAzdfAGDm9gpCIWSEWwADN6C6HgbAlALBFP07AAM6ZwADOqAAAhL5dA8AA/KkBYAOJTwEWwADOs4DAAM6qwBg3v4S+hIhOwADPucAAz8EAAKEeXQPAAPypAWADiFMBNcAAz+EAAAEAXQPAAPypAWADiFMBHMAAz+EWwADPzIDAAM/DwBg3v4TAhIqArQAAAADAAPx9NQAAAAEAWwEcwADP8obAAM/wwBg6hIClAQABFsAA0AKAwADP+cAYN7+EwYSLAMAA/LuGAMAYOoROwADSbwAAAITqYAOavwBOwADSkMAA0qcAAK2JXQPAAPypAWADiLgBHsAA0rXAAPyuAgFgA4i4AhbAANLThsAA0svAGDprYcAA/NgrAEnAANLmJcAA0vaBwADS6sAYN81gA4kFPgVFwADTDwHAANMYwADTGgAAYmADwAD8BQGTARzAANMhFMAA0x/AGDtdCQBjAQABFsAA0yuGwADTI8AYOmthwAD82ADAAP0yARXAANMzwBg7XQkcwADTNBTAANMzwBg7XQkAZAEAAZQAwAD9Kj4BScAA00IcwADTSBTAANNGwBg7XQkAYwEAARbAANNoFsAA01OAwADTSsAYN7+EwISKYcAA/NgAwAD9Mj4BPRzAANOSFMAA03zAGDsBCACAvwIAAhTAANOTwBg7XQkAHsAA06bAAFP+AgACFMAA08HAGDfNAQFgA4kFFMAA087AGDtdCQAAAMAA/Lk+AT0cwADUAxTAANPtwBg7AQgAgL8CAAIUwADUBMAYO10JAB7AANQXwABT/QIAAhTAANQtwBg3zQEBYAOJBRbAANRFHMAA1EGGwADUOsAYOmtLAQABFMAA1ELAGDtdCQAAwAD8uIC9iFcAAMAA/Lk9i8AA1GTAGDfrFsAA1IAUwADUdMAYN80BAWADiQWFOokNTsAA1QvAANUbAACes10DwAD82gJgA4lPYAOIuAEywADVNmADiU9gA4i4AEXAANVAAcAA1UnAANVLAABiYAPAAPwFAZMBHMAA1VIUwADVUMAYPQ8KAGMBAAEWwADVbxbAANVgFMAA1VTAGDfNAQFgA4kFhL6JB2HAAPzYAMAA/TIBFcAA1XfAGD0PChzAANV4FMAA1XfAGD0PCgBkAQABlADAAP0qPgE9HMAA1ZUUwADVhsAYPN8JAIC/AgACHMAA1bAWwADVohTAANWWwBg3zQEBYAOJBYS+iQdLAQABFMAA1bHAGD0PCgAAwAD8uCMcwADVxRTAANXDwBg9DwoAYwEAARbAANXWhcAA1cfAGDpAYcAA/NgAwAD9Mh/AANXziU4BAAEcwADWE4XAANYFwBg6QEsBAAEUwADWFMAYPQ8KAADAAPy4AGrAANYwYAOIz4SIAWADiLgAwAD87z2PwADWTcAYOvIewADWaZrDAQABFMAA1nHAGDzfCQAAPgE9j8AA18HAGDryasAA191gA5q/wACcHUXAANjHAcAA2NDAANjSAABiYAPAAPwFAZMBHMAA2NkUwADY18AYPnoJAGMBAAEWwADY44bAANjbwBg6a2HAAPzYAMAA/TIBFcAA2OvAGD56CRzAANjsFMAA2OvAGD56CQBkAQABlADAAP0qPgJOwADZFMAA2RsAAJm+YAOt0AEmwADZFAEcwADZJIbAANkdwBg6a0sBAAEUwADZJcAYPnoJAADAAPy4YAOt0EnAANkvHsAA2U+t3QEAARTAANlhwBg+4goAAD4ETsAA2X0AAAChRGADiLgAScAA2ZMcwADZsRzAANmtFMAA2ZfAGDsBCABLAQABFMAA2a7AGD56CQAAwAD8uEgBAAEWwADZyBbAANm+FsAA2bQuh2ewDZrNnK2E+oNHAIi8PgE9FcAA2d3AGD89CxbAANoCFsAA2fYWwADZ7C6HZ7ANmsycr4T6g0dJwADaGiEcwADaOBzAANo0FMAA2h7AGDsBCABLAQABFMAA2jXAGD56CQAAwAD8uEgBAAErAIi8PgE9FcAA2k3AGD89Cx7AANpcwABT7QIAAhbAANpsLodnsA0cwADakofAANqFwBg68oWDAQABHMAA2rcUwADaocAYOwEIAEsBAAEUwADauMAYPnoJAADAAPy4AJrOAD4BPRXAANrZwBg/PQtqwADa7mADiM+EiD01AAAAAQBgA8AAUkMBFsAA2w8uqYGwJyMcwADbIBQAwBhAdAwASAEAASsAACscwADbIBQAwBhAdAwAqcUEAAQWwADbJy6ArLAkFsAA2zMUwADbLMAYPuIKAIRTglkngpAfwADbV8AAUloBAAEUwADbc8AYPz0LAAAAwABSRQFcPRfAANuSFMAA24vAGD7iCgCCkBTAANuZwBg/PQsAiFk/ScAA3F4hJcAA3HCDwADcYsAYN+tgA6vGPgE9i8AA3InAGDfrHMAA3KaHwADcmcAYOvKFgwEAAYPAANy1wBg36wCazj9OwADdYcAA3XUAAK2KYAPAAPo/AYTAAN13wBg4Ak7AAN2hwADdswAArYtgA6/mARbAAN26LqyAsC1OwADd3cAA3ewAAKyAYAOv5gEewADd8q/zBAAELhbAAN4ZgMAA3hDAGDe/hVSEhoPAAN4mwBg36xTAAN41wBhBWAkAAD0XwADeVC6sgBTAAN5lwBhBkQsAsC09HMAA3nkuq+YBAAEWwADekYDAAN6IwBg3v4JphJkAsFBOwADgFgAAAK2MYAOIuABJwADgLhTAAOAywBhBWAkAPgE9FcAA4E/AGEIMDBzAAOBzFMAA4GTAGEGRCwCtVwEAAS4Ar/g/ScAA4XYUwADhesAYQVgJAD4CPTUAAAABAGADwABSQwEWwADhly6pgbAnIxzAAOGoFADAGEJlDQBIAQABKwAAKxzAAOGoFADAGEJlDQCpxQQABBbAAOGvLoCssCSCwADhtMAYN9snhTofwADh3MAAUloBAAEUwADh+MAYQgwMAAAAwABSRQFcPRfAAOIdgMAA4hTAGDe/hToUwADiKsAYQgwMAISMPz0XwADiTS6sgBTAAOJewBhBdQoAsC1KwADidQEfwADigLBxAgACKxbAAOKpgMAA4qDAGDe/hTuEmgAGsEqAhcAA4r/AAOLQwADjsAAAoPMBasAA4sBgA8AA/VECAAABA8AA4t3AAOOwAAAAAgICwADi9QAAAJVcYAPAAFOsAMAA4xUAAACEY10DwAD8qQFgA4SuAABcAT4BScAA4yghHMAA4ziBwADjLMAYQ3VIAQABKwDAAP1ePgM9F8AA404ulVyAwADjV8AYQ2WwLD0cwADjZS6sNwEAAYHAAOOAwBhDdQCwSz0XwADjmS6VXCuwLD8GsEuAhcAA47XAAOPGwADmPgAArDcBasAA47ZgA8AA/VECAAABA8AA4+DAAOY+AAAAAQEBwADj+QAAAIRjXQPAAPypAWADhK4AAFwBPgFJwADkDCEcwADkHIDAAOQQwBhEHEgBAAErAMAA/V4+BE7AAOT5wADlAQAArY1dA8AA/KkBYAOCUgEcwADlJBzAAOUPgMAA5QPAGEQcgKsBAWADglIBNMAA5RMDwADlE8AA5SIAAAABAQHAAOUUAAAAg01gA4SuAABgA4JSAUrAAOUaARbAAOUcgcAA5RrAGESfhFKCWADAAPxygK0AAAAAwAD8fT0fwADlOIbpAQABgMAA5UTAGEQcAEbAAOVYwADlfMAA5WEAAACEsGADhK4AgMAA5W/AGEQcPgE9HMAA5YYuq1cDAAOCwADllsAYRPhqwADlqGADq8bAAOB2IRbAAOW4LoeBsCUAsEVFwADl0wHAAOXcwADl3gAAYmADwAD8BQGTARzAAOXlgsAA5ePAGEVHYwEAARbAAOXzgMAA5efAGEQcYcAA/NgAwAD9MgGKwADl/cAYRUccwADl+4LAAOX9wBhFR2QBAAGUAMAA/So+AT0XwADmGRzAAOYVgMAA5grAGEQcSwEAAYLAAOYWwBhFRwDAAPy4hFIcwADmKYHAAOYiwBhEV0sBAAGCwADmKsAYRUcAwAD8uIJYPwawTICFwADm18AA5vHAAPdQAACseAAAAAEDwADnBsAA91AAAAAKBQXAAOcgAAAAgmtgA4SuAMAA50QAAACFf2ADhK4AwADnWAAAAIRTYAPAAPwFAMAA528AAAChe2ADwAD6PwDAAOeOAAAAqzpgA4i4AAXAAOe2AAAArHlgA4hTAWoAYAPAAP0OecAA598AAACsQGADhZgBagBgA8AA/Q55wADoAQAAAKyFYAPAAP1RAWoAYAPAAP0OecAA6B0AAACshmADiIMBagBgA8AA/Q55wADoOQAAAFtgA4V4AWoAYAPAAP0OeWADsGwBPg9OwADonsAA6KsAAIWCYAOIuAEjHMAA6LaBwADorcAYRipIAQABKwDAAP1eFsAA6MguhMKwKRzAAOjbLqtXAwADgcAA6OvAGEYqasAA6PtgA6vGwADgdikAsEUBYAOIuD01AAAAAQBgA4hTAYXAAOkVwBhGZyMcwADpJxQAwBhHQwsASAEAASsAACsXwADpJxQAwBhHQwsAgpAUwADpLsAYRuMKAIhZAWADiLhJwADpQCEcwADpWIbAAOlEwBhGfkgBAAErAMAA/V4+Az2PwADpacAYRpUcwADphS6rUAIAAhTAAOmgwBhG4woAhsAA6a7AGEZ+ALA4PRXAAOnKwBhGrggWwADp64bAAOnXwBhGfoC9hZs9FcAA6ffAGEbFCRbAAOoXhsAA6gPAGEZ+W4WcP07AAOoxwADqUAAAhZFgA8AA+j8BIiXAAOpih8AA6lLAGEaVYAOD6gAcwADqkBbAAOp6LqDSsCirUgIAAhTAAOrDwBhGlQcBYAOD6hTAAOrUwBhG4woAAMAAVClOwADq68AA6vYAAKw6YAOIuAEcwADq+C6rVgIAAofAAOsGwBhGlRTAAOsXwBhG4woAALA8TsAA6y7AAOs7AACFO2ADiQUBHMAA6z0uq1UCAAIUwADrU8AYSG8MACGDwADrYMAYRkgAsDtJwADrdiIiIiEcwADriofAAOt6wBhGlUgBAAErAMAA/V4AISXAAOuoFMAA653AGEhvDABgA4jPACEcwADrzhTAAOvDwBhIbwwASAEAARbAAOvpFsAA69sWwADr0S6HZ7ANmtecmoT6g0cAiLwAHsAA6/zAAPXmAgACFMAA7AbAGEijDQAawADsFLAiAD4ETsAA7DLAAOw5AACEUmADglIBFsAA7EaAwADsO8AYRhyEUoJYTsAA7GbAAOxsAACBxWADhK4BHMAA7HUWwADsbi6VXLAsoQMDAAOAwADsg8AYRhwcwADss2rAAOyZXQORZQFhAwFgA8AA/etgA5FOwABgR4gLAQABFsAA7MwUwADswcAYRq4IAIC9iIYAkWlqwADs02ADwAD8BRUAwABTtj01AAAAAQBgA4JSARTAAOzkwBhJZg4AIxzAAOzsFADAGEoHEABIAQABKwAAKxzAAOzsFADAGEoHEACEVQIAAoDAAOz5wBhGHBTAAO0FwBhJig8AAIJeAVxKwADtEwEfwADtHrBxAgACK2rAAO1EYAOIz4SIAD9OwADtYsAA7WwAAKtaYAOv/gEcwADtbi6rWwYABoHAAO2PwBhGKhTAAO2ZwBhG4woAh8AA7a/AGEaVhsAA7cDAGEZ+FMAA7dXAGEbFCQCAwADt4MAYRhwAsFNOwADt9cAA7gUAAKwgYAOwbAEcwADuBy6sIQcABYTAAO4XwBhGWILAAO4kwBhGOBTAAO4wwBhIow0AFsAA7lMUwADuRsAYSKMNAIU6iQ0UwADuX8AYRsUJAAKFkRTAAO6SwBhIFAsAhYIUwADuyMAYRuMKALBITsAA7t/AAO7sAAChRGADiLgBFsAA7v4UwADu7sAYStYPAIKQsG9JwADvCBzAAO8cFsAA7xcUwADvDMAYRq4IAIC9iIZIAQABJ0gAwAD9+j4BPRXAAO8twBhLTBAWwADvUBbAAO9GFsAA7zwuh2ewDZrOnJKE+oNHPz0cwADvYy6rXQcABxTAAO+CwBhKfA4AhsAA743AGEZ+FMAA76LAGEbFCQCAwADvtcAYRhwUwADvwcAYS0wQABTAAO/PwBhIow0AgsAA793AGEY4ALBCScAA7+4hHsAA7/PAAPXmAgACh8AA7/3AGEaVJyAAPgFJwADwHyIiIiKDwADwI8AYRkgAIRzAAPBPh8AA8D/AGEaVSAEAASsAwAD9XgAhIiXAAPB2h8AA8GbAGEaVYAOD6gAcwADwqRbAAPCkFMAA8JTAGEaVBwFgA4PqgmeD7UgBAAFqwADwumADhCeExQDAAP1eACElwADw3BTAAPDPwBhG4woAYAOIzwAhHMAA8QYUwADw+cAYRuMKAEgBAAEWwADxHxbAAPEJLqDSsCia1sAAiOoAiLw+A07AAPE+wADxRQAAhFJgA4JSARbAAPFSgMAA8UfAGEYchFKCWE7AAPFmwADxcAAArWxgA4SuARzAAPF5FsAA8XIulVywLKEDAwADgMAA8ZTAGEYcHMAA8cxqwADxrF0DkWUBYQMBYAOIuGADkU7AAEfOiAsBAAEUwADx2sAYRuMKAACRaWrAAPH1YAPAAPwFFQDAAFO2PTUAAAABAGADglIBFMAA8gjAGEz0EQAjHMAA8hAUAMAYTYoTAEgBAAErAAArHMAA8hAUAMAYTYoTAIRVAgACgMAA8h3AGEYcFMAA8inAGE0YEgAAgl4BXD8/ScAA8rwhHMAA8sgWwADywC6EQ7AqSAEAASsAwAD9Xj4FTsAA9BwAAACtjmADiLgATsAA9D0AAACFgWADg14ATsAA9FkAAACtj2ADiIMAScAA9HElwAD0gBTAAPR1wBhIbwwAYAOI8z4DPRXAAPScwBhOBBEUwAD0scAYSG8MAWADiPM9FcAA9MXAGE4TEis9FcAA9OXAGE4iExrAAPT4rzE+Az0VwAD1GcAYTgQRFMAA9S7AGEbjCgA9FcAA9UTAGE4TEiMlwAD1ZofAAPVWwBhGlWADg14UwAD1csAYRpUHAWADg14rAWADg149FcAA9ZLAGE4iExTAAPWlwBhGrggAPRzAAPXHFsAA9b8uhEOwKqlJCgAJFMAA9fDAGE4EEQAWwAD2Di6g0rAoFsAA9i8uq2iwJi4UwAD2WcAYTiITABTAAPZ1wBhOExIAFMAA9pDAGEbFCQAWwAD2rBbAAPalLpVcsCyArMAAU6+CwAD2u8AYRjgBqT0cwAD2/x7AAPbbq98BAAEUwAD29MAYRsUJAABIAQABKwDAAP1eqWc/SsAA9xQBH8AA9x+wcQIAAisUwAD3P8AYS0wQAAAGsE2AhcAA91XAAPdmwAD49QAAoTYBasAA91ZgA8AA/VECAAABA8AA93/AAPj1AAAAAwMDwAD3kAAAAJVcYAPAAFOsAMAA97AAAACFB2ADhK4AwAD3xgAAAKyNYAOIuAAAXAE+BkAcwAD38BbAAPfhLqyAsC1IAQABKwDAAP1ewAD34cAA9/cAPRfAAPgDLpVcgMAA+AzAGE/UsCxAIRzAAPgsgsAA+B/AGE/ySAEAASsAiLzAAPgfwAD4MwBOwAD4PsAA+EkAAK1jYAOIuAEcwAD4Sy6rVwMAA4HAAPhbwBhP5ILAAPhowBhP8ikAsEU9HMAA+IEuq1kEAASCwAD4m8AYT/KDwAD4qcAYUF6BwAD4tcAYT+QWwAD4zoHAAPjCwBhP5IRTglkAsDU9F8AA+OQulVwrsCwGsE6AhcAA+YTAAPmJwAEAEAAArHoAAAABA8AA+ZnAAQAQAAAACAQEwAD5pQAAAIJrYAOErgDAAPm8AAAAhX9gA4SuAMAA+dAAAACEU2ADwAD8BQDAAPnlAAAAqzpgA4i4AATAAPoNAAAArHlgA4hTAWoAYAPAAP0OecAA+jEAAACse2ADhNkBagBgA8AA/Q55wAD6TAAAAKyFYAPAAP1RAWoAYAPAAP0OecAA+mgAAACsh2ADiIMBagBgA8AA/Q55XAE+CU7AAPrVAAAAhYJgA4i4AEnAAPrnHMAA+vSBwAD668AYUQ5IAQABKwDAAP1ePgE9FcAA+wXAGFGeCBbAAPsULoTCsCk+Aj0cwAD7MS6rVwMAA4HAAPtBwBhRDmrAAPtRYAOrxsAA4HYpALBFPRXAAPttwBhRnggewAD7fKvbAgACgcAA+4zAGFEOLgA9NQAAAAEAYAOIUwGEwAD7p8AYUTsjHMAA+7kUAMAYUioJAEgBAAErAAArF8AA+7kUAMAYUioJAIKQFMAA+8DAGFGeCACIWQFgA4i4PSMcwAD734fAAPvSwBhRgkgBAAErAIiPj8AA+9LAGFGCFsAA+/CFwAD748AYUVKAvYTcKwFgA4iDScAA+/ohHMAA/AuFwAD7/sAYUVJIAQABKwDAAP1ePgI9jsAA/BzAGFFpHMAA/C4urXAGAAMUwAD8TcAYUZ4IAIfAAPxbwBhRgoLAAPxpwBhRHAOtcWrAAPyOXQORZQFhAwJgA8AA/etgA4i4YAORTsAAkDSCa4DAAPy9wBhRAIV/gcAA/N3AGFEOsDdJwAD87iXAAP0ChsAA/PLAGFFpYAODXj4CScAA/RciIRzAAP0rFsAA/RsuqYGwJ0gBAAErAMAA/V4AHMAA/UMUwAD9NsAYUZ4IAEgBAAFqwAD9TGADiM+EiACIvD4BPRzAAP13FsAA/WcuqYGwJ6nFBAAEFsAA/X4ugKywJBbAAP2QhcAA/YPAGFFShFOCWSeCRR/AAP24wABSUwEAARTAAP3WwBhRaQYBYAODXgAAwABSRT89F8AA/giFwAD9+8AYUVKFgRTAAP4awBhRaQYBYAODXoThPz9OwAD+QcAA/k4AAKFEYAOIuAEcwAD+UC6rVgIAAobAAP5ewBhRaRTAAP5vwBhRnggAALA8TsAA/obAAP6ZAACtf2ADhK4BHMAA/psurH4GAAaBwAD+u8AYUQ6GwAD+zcAYUWmFwAD+3sAYUVKAwAD+7MAYUQAUwAD++MAYVBIJAILAAP8GwBhRHACwQ0nAAP8XIiXAAP8shsAA/xzAGFFpYAOD6gAcwAD/WRbAAP9UFMAA/0TAGFFpBgFgA4PqgmeD7UgBAAFqwAD/amADhCeExQDAAP1ePgE9FcAA/3vAGFQSCRzAAP+ULqyEAwADFMAA/6fAGFQSCQCDwAD/tcAYUSwUwAD/wsAYVEYKAACwUT89HMAA/+EurBsCAAKAwAD/88AYUQAUwAD//8AYVBIJAACwMQawT4CFwAEAYMABAGnAAQDLAACtVwAAAAEDwAEAeMABAMsAAAABAQHAAQCCAAAAhTpgA4i4AABgA4i4AT4BSsABAJQBNQAAAAEAYAOIuAGAwAEAm8AYVW0jHMABAKaBAMAYVYpIAQABKwAAFsABAL8WwAEAqS6g0rAohXDAAIjogQDAGFWKAWADiLgGsFCAhcABAa3AAQGywAEB1QACq+YAAAABA8ABAcDAAQHVAAAAAQEBwAEBywAAAIVRYAOHZAAAXAAGsFGAhcABAjzAAQJFwAEGawAArIQAAAABA8ABAlfAAQZrAAAAAwMDwAECaAAAAK2QYAOIuADAAQJ+AAAAglNgA4i4AMABApIAAACCa2ADhK4AAGADiLgBPgJJwAECpCIiJcABArSAwAECqMAYVjFgA4kFACXAAQLXgcABAs/AGFY/YAOJBQAWwAEDCRbAAQL6FMABAvLAGFY/AQFgA4kFhL6JB4FVwAD8iz4CTsABAx7AAQMtAACEvl0DwAD8qQFgA4lPARbAAQM7FMABAy/AGFYxAAFgA4kFhL6JB0nAAQNRFsABA2SDwAEDVcAYVraDssAA/Iw+Bk7AAQN+wAEDjAAAqI9dA8AA/KkBYAOIuAEewAEDksAA/K4CAWADiLgCFsABA8SDwAEDtcAYVrZhwAD82GrAAQPSYAOrxsAA4HYATsABA+7AAQP/AACtkWADiQUBFsABBA0UwAEEAcAYVjEAAWADiQWFr4kTPRzAAQRCFsABBCwuoNKwKKxSBgAGhcABBGrAGFdMg8ABBHzAGFa2McABBIxgA4i4ADHAAQSQYAOIuAAUwAEElMAYVj8BAWADiQWEwAEEncAYVwIAwABUJEnAAQS1IRbAAQS6LoeBsCU+Ak7AAQTWwAEE3QAAhFJgA4JSARbAAQTqgsABBN/AGFZNhFKCWD0cwAEFA4bAAQT8wBhX4IRVAgACgsABBR/AGFZNNcABBT0AAAEAYAOF5AEfwAEFPYXvAgACgsABBUvAGFZNhMABBVfAGFcCADUAAAABAFsBF8ABBXiHwAEFdsAYWCGEUxbAAQWQgsABBYXAGFZNhFOCWYJZhwDAGFghAIJeP07AAQWzwAEFwAAAhOpgA5q/AR7AAQXbmskCAAKDwAEF5cAYVraEwAEF9cAYVwIASsABBg0BHMABBiGGwAEGFMAYWIKFgwEAAYXAAQYwwBhXTACazj8/SsABBlUBgMABBlzAGFYxBrBSgIXAAQjbwAEI58ABCs0AAa2SAAAAAQPAAQkQwAEKzQAAAAICAsABCR4AAACEkmADgxkAwAEJLwAAAIKQYAOIuAAAYAPAAPo/AT4DScABCTsWwAEJVRbAAQlGgMABCT/AGFkOhL6DKIFVwAD8i0rAAQleASo/TsABCZXAAQmdAACtk2ADwABTywEfwAEJq8AAU9cCAAEWwAEJ14DAAQnQwBhZDoS+gygBrZRqwAEKnmADwABTvsAA5JxKwAEKrgEmwAEKrgEcwAEKuoHAAQq1wBhZHIRNAQABgsABCsHAGFlfAIi6YAPAAPo/BrBTgIXAAQuBwAELn8ABETwAAKtbAAAAAQPAAQu/wAERPAAAAAYGBsABC9IAAACFf2ADhK4AwAEL6wAAAIWCYAOIuADAAQwGAAAArIVgA8AA/VEAwAEMLgAAAKxAYAOFmADAAQxTAAAAW2ADhXgAwAEMbwAAAIJrYAOErgAAYAOv/gE+AknAAQyBIiXAAQyVgsABDIXAGFoXYAODfAEiJcABDLmCwAEMqcAYWhdgA4PqABzAAQzqFsABDOUUwAEM1cAYWhcCAWADg+qCZ4PtSAEAAWrAAQz7YAOEJ4SnAMAA/V4+A07AAQ0PwAENFwAAhp5gA4i4ARzAAQ0ZLqtWAgACgsABDSfAGFoXgcABDTjAGFoJALA8ScABDU0lwAENWYbAAQ1RwBhauWADiM8+AUrAAQ1zAWrAAQ2YYAOv/sAA5Fc/ScABDawiIRzAAQ25gMABDbDAGFn7SAEAASsAwAD9XgAhJcABDc2AwAENxMAYWftgA4bAPgFJwAEN6yIiJcABDgCCwAEN8MAYWhdgA4N8AB7AAQ4csFICAAIWwAEOaxTAAQ5bwBhaFwIBYAODfIT/g2YWwAEOixTAAQ57wBhaFwIBYAODfIKQg34AASIlwAEOsoLAAQ6iwBhaF2ADg+oAHsABDtKwUgIAAhbAAQ8hFMABDxHAGFoXAgFgA4PqhP+DZhbAAQ9eFsABD1UUwAEPRcAYWhcCAWADg+qCaoPvhTqEjAA+AUrAAQ94AWrAAQ+dYAOv/sAA5Hk/P0nAAQ/NIiIiIRzAAQ/agMABD9HAGFn7SAEAASsAwAD9XgAhJcABD/aAwAEP7cAYWftgA4bAACXAARAkgsABEBTAGFoXYAOD6gAewAEQPLBSAgACFsABEIMUwAEQc8AYWhcCAWADg+qE/4NmFsABELgWwAEQrxTAARCfwBhaFwIBYAOD6oJqg++FOoSMAD4BSsABEM0BasABEPJgA6/+wADkaD9KwAERDwFqwAERNGADr/7AAORXBrBUgIXAARGOwAERl8ABFRYAAKwsAAAAAQPAARGrwAEVFgAAAAEBAcABEbUAAACCkGADiLgAAGADiLgBPgdPwAERwcABEcoAAAGtlmEDAWADiLhgA4i4AAPAARHYwAESXAAAAAEBAcABEeIAAACCkGADiLgAAGADiLgBPgFJwAER8CXAARH5gsABEfTAGF0uYAOJPj4BSsABEhkBFsABEiUUwAESIMAYXS4CAWADiT6Fb4lMPgFKwAESQwErTsABEmfAARJwAACtl2ADiLgBHMABEoCBwAEScsAYXQogAQABgMABEoHAGFzvAABJwAESjBzAARKZgsABEpDAGF2FSAEAASsAiLxKwAESogGAwAESqcAYXO8/PYjAARL3wBhc74LAARL+wBhdhU7AARMVwAETGgAAlWJgA4i4ARzAARMqgcABExzAGF0KIAEAAYDAARMrwBhc7wAAScABEzYcwAETP4PAARM6wBhd8kgBAAErAIi8SsABE0gBgMABE0/AGFzvP0PAARNZKT4HScABE24ewAETcsAA9eYCAAKAwAETfMAYXO+DwAETgsAYXfIAPgFKwAET1QFqwAET4mADiM+EiD9OwAEUIsABFCgAAK2YYAOIuAEcwAEUOIHAARQqwBhdCiABAAGDwAEUOcAYXfIAAEnAARRGHMABFFCEwAEUSsAYXoxIAQABKwCIvErAARRZAYPAARRgwBhd8j9OwAEUcMABFHYAAK2ZYAOIuAEcwAEUhoHAARR4wBhdCiABAAGEwAEUh8AYXowAAEnAARSVHMABFJ+FwAEUmcAYXuZIAQABKwCIvErAARSoAYPAARSvwBhd8j89i8ABFLvAGF3yhcABFMLAGF7mPYjAARTxwBhc7xzAARUGgcABFPjAGF0KIAEAAYDAARUHwBhc7wAABrBVgIXAARUbwAEVJMABFpEAAKwaAAAAAQPAARU0wAEWkQAAAAEBAcABFT4AAACCkGADiLgAAGADiLgBPgJJwAEVSiIlwAEVU4DAARVOwBhfoWADiPMAHsABFW/AAPXmAgACFsABFX4UwAEVecAYX6EAAWADiPOE6Ij5FsABFZMWwAEViS6HZ7ANmticnAA+AUrAARWrARTAARWywBhfoQABYAOI8z9KwAEWKgEfwAEWNYkDAgACFsABFlYWwAEWTC6H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wABLzQAAAAEBAcAASnsAAACuC2ADrBcAAGADhK4BPgVOwABKmMAASp0AAKGzYAOwxAE1AAAAAQBgA7BzARbAAEqnFsAASp8urgOxwLHLoLW0GyMcwABKvoEAwBj+o0gBAAErAAArHMAASr6BAMAY/qOhtAIAAhbAAErPLoJssfAWwABK4RbAAErZLq4DscCxy6C8tBwAsIQBYAOwxE7AAEsAwABLBgAAns1gA7DVATUAAAABAGADsHMBFsAASxAWwABLCC6uA7HAscugtbQbIxzAAEseggDAGP8gSAEAASsAACsWwABLHoIAwBj/IKG1sHsBYAOw1U7AAEs0wABLOQAAnnZgA630ATXAAEs/AAABAGADrfQBH8AASz+t/QMAAxbAAEtTLoJssfCBwABLXcAY/pGCwABLY8AY/w4ANQAAAAEAWwEXwABLcoPAAEtwwBj/eoRTHsAAS3/AAFnBAQABFsAAS44uklSxzACCWYMAwBj/ej01AAAAAQBgA6wXAYDAAEuawBj+eiMcwABLrYQAwBj/50gBAAErAAArF8AAS62EAMAY/+eedoPAAEu0wBj/aKwZAWADrfRKwABLvgGDwABLxcAY/2gGsfmAicAAS9LAAEvpwABOVQAArg6xwAFqwABL02ADwAD9UQIAAAEDwABL88AATlUAAAADAwPAAEv/AAAAgJZgA4SuAMAATAsAAACjOmADwAD6PwDAAEw4AAAArgtgA6wXAABgA4SuAT4EPTUAAAABAGADsHMBFsAATFkWwABMUS6uA7HAscugtbQbIxzAAExwgwDAGQCmSAEAASsAACscwABMcIMAwBkApq2zAgACFsAATH8ugmyx8BbAAEyRFsAATIkurgOxwLHLoLy0HACwhgFcTsAATLcAAACCimADhK4AScAATMIiFsAATM8WwABMxi6CbLHwhBuIYwEWwABM4xbAAEzaLoJssfCEHYhkPgI9i8AATPTAGQEOHMAATPwurhaxwAEAAYDAAE0OwBkAcACx2UnAAE0cIRzAAE0ygsAATSDAGQCOSAEAASsAwAD9Xj4CPYvAAE1FwBkBDhzAAE1VFsAATU0urgOxwLHLoSEBAAGDwABNcMAZAQ4AwABTuD0XwABNkoLAAE2AwBkAjoKKg8AATZrAGQEOrBs/PgI9i8AATbzAGQEONcAATcgAAAEAYAOEzQEf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ALScALThYAOr6QGFgRbAAKRqLqG8snM1AAAAAQBbARfAAKR6gMAApHjAGUQxhFMewACkh8AAWcEBAAEWwACkli6SVLHMAIJZgADAGUQxBrJ/gInAAKSlwACkvMAApsYAAK4NscABasAApKZgA8AA/VECAAABA8AApMzAAKbGAAAAAwMDwACk2AAAAICWYAOErgDAAKTkAAAAozpgA8AA+j8AwAClEQAAAK4LYAOsFwAAYAOErgE+BEnAAKUqIYHAAKUvwBlFUkrAAKU8ARzAAKVDLq4rscACAAKAwAClV8AZRUSCwAClXsAZRWIAsn0/TsAApXrAAKWAAACCimADrPQBNcAApYYAAAEAYAOs9AEfwAClhqz+BAADHMAApbAWwAClqC6uBLHAsc+hjwEAARbAAKW/LpJUscwAtNEawAClz689JsAApe0BHMAApe0WwACl5S6uBLHAsc+hdwEAARzAAKYQFsAApggurgSxwLHPWwIAAjHAAKYmYAOErgIWwACmJy4nsnKAwACmLsAZRUQWwACmNi6SVLHMALScALThYAOr6QGFgRbAAKZYLpsOsnQ1AAAAAQBbARfAAKZog8AApmbAGUXDhFMewACmdcAAWcEBAAEWwACmhC6SVLHMAIJZgwDAGUXDPTUAAAABAGADrBcBgsAAppDAGUViIxzAAKajhADAGUarSAEAASsAACsXwACmo4QAwBlGq4KKg8AApqvAGUWxrBsBYAOs9ErAAKa2AYPAAKa9wBlFsQaygICJwACmy8AApuLAAKhsAACuCrHAAWrAAKbMYAPAAP1RAgAAAQPAAKbrwACobAAAAAEBAcAApwYAAACuC2ADrBcAAGADhK4BPgNOwACnI8AApygAAJ52YAOs9AE1wACnLgAAAQBgA6z0AR/AAKcurP4EAAMcwACnWBbAAKdQLq4EscCxz6GPAQABFsAAp2cuklSxzAC00RrAAKd3rzwmwACnlQEcwACnlRbAAKeNLq4EscCxz6F3AQABHMAAp7gWwACnsC6uBLHAsc9bAgACMcAAp85gA4SuARzAAKfPLq4qAAAAALJ7FsAAp98uklSxzAC0nAC04WADq+kBhYEWwACoAS6hvLJzNQAAAAEAWwEXwACoEYHAAKgPwBlHXYRTHsAAqB7AAFnBAQABFsAAqC0uklSxzACCWYEAwBlHXT01AAAAAQBgA6wXAYDAAKg5wBlHNCMcwACoTIIAwBlIQUgBAAErAAArF8AAqEyCAMAZSEGedoHAAKhTwBlHS6wZAWADrPRKwACoXQGBwACoZMAZR0sGsoGAicAAqHHAAKiIwACqlAAArg6xwAFqwACocmADwAD9UQIAAAEDwACoksAAqpQAAAADAwPAAKieAAAAgJZgA4SuAMAAqKoAAACjOmADwAD6PwDAAKjXAAAArgtgA6wXAABgA4SuAT4EScAAqPAhgcAAqPXAGUjYSsAAqQIBHMAAqQkuriuxwAIAAoDAAKkdwBlIyoLAAKkkwBlI6ACyfT9OwACpQMAAqUYAAIKKYAOs9AE1wACpTAAAAQBgA6z0AR/AAKlMrP4EAAMcwACpdhbAAKluLq4EscCxz6GPAQABFsAAqYUuklSxzAC00RrAAKmVrz0mwACpswEcwACpsxbAAKmrLq4EscCxz6F3AQABHMAAqdYWwACpzi6uBLHAsc9bAgACMcAAqexgA4SuAhzAAKntLq4qAAAAALJ7gMAAqfzAGUjKFsAAqgQuklSxzAC0nAC04WADq+kBhYEWwACqJi6bDrJ0NQAAAAEAWwEXwACqNoPAAKo0wBlJSYRTHsAAqkPAAFnBAQABFsAAqlIuklSxzACCWYMAwBlJST01AAAAAQBgA6wXAYLAAKpewBlI6CMcwACqcYQAwBlKNkgBAAErAAArF8AAqnGEAMAZSjaCioPAAKp5wBlJN6wbAWADrPRKwACqhAGDwACqi8AZSTcGsoKAicAAqpnAAKqwwACrTAAArgixwAFqwACqmmADwAD9UQIAAAEDwACqt8AAq0wAAAACAgLAAKrKAAAAgmlgA4SuAMAAquoAAACuC2ADrBcAAGADhK4BPgFKwACrAwEdwACrEK4IscACAAIewACrGLHCAgACFsAAqyAurimydYDAAKsvwBlKvwCBwACrNsAZSs0AsdwGsoOAicAAq1HAAKtowACsGwAAoXkBasAAq1JgA8AA/VECAAABA8AAq3TAAKwbAAAAAgICwACreQAAAINcYAPAAPwFAMAAq4sAAABbYAOFeAAAYAOErgE+AUrAAKucARzAAKurFsAAq6MurgOxwLHLoXoFAAQcwACryi6g2wAAAACx1BrAAKvdrzGBwACr58AZS2OAwACr8sAZS1MBoXsptDAGsoSAicAArCDAAKxGwACsrAAArgwBasAArCFgA8AA/VECAAABA8AArFzAAKysAAAAAQEBwACsaAAAAKO3YAOErgAAYAOsFwFKwACsdgEmwACsdgEewACsh64vAwADKxbAAKyhLieycoDAAKyowBlL9QBgA6wXBrKFgInAAKyxwACswsAArqMAAIQsAWrAAKyyYAPAAP1RAgAAAQPAAKzJwACuowAAAAEBAcAArNUAAACEO2ADwAD+VQAAXAE+CU7AAKzswACs+wAAmVBgA5dKAR/AAK0Bl2MAAAAAPRzAAK0YgMAArRPAGUxrgooBAAEnri0AwAD+Vz0ewACtMLUaAwACFsAArTwuJ7JygMAArUPAGUxrAZlQgcAArVnAGUyBPRzAAK1zgMAArW7AGUxrgooBAAEnriAAwAD+Vz0ewACtjLUbAwACFsAAraEuobyyc4DAAK2pwBlMawGZUIHAAK2/wBlMgT0cwACt2YDAAK3UwBlMa4KKAQABJ64hAMAA/lc9HsAArfK1GwMAAhbAAK4HLpsOsnSAwACuD8AZTGsBmVCBwACuJcAZTIE9HMAArj+AwACuOsAZTGuCigEAASeuLwDAAP5XPR7AAK5ftRoDAAIWwACuay6uKbJ1gMAArnrAGUxrAZlQgcAArpDAGUyBAAAZQKoAGUDwABlBNwAZQcEAGUPsABlFDgAZRv4AGUiUABlKiQAZSx8AGUvBABlMNwAZTbQAAAAMArKIgInAAK6owACursAAwLIDoJ8AAAFgAbHIAAAEBLKKgInAAK7xwACu9gknAGADhK4ABLKLgInAAK8IwACvDgmhvABgA4NeAASyjICJwACvIMAAryYJmw4AYAODXgAEso2AicAArz/AAK9MGK4pAGADiFMBKwEFsp+AicAAr1HAAK9RwACv5AAAAAPAAK9swACv5AAAAAUFBcAAr4cAAACVXGADtBgAwACvlQAAAJJUYAOesQDAAK+nAAAEJ2ADhK4AwACvswAABKG8YAODXgDAAK/AAAAEmw5gA4NeAABgA7KIAT8ECAGyioIAwBlOowgBsouDAMAZTrAIAbKMhADAGU6+CQDAAK/Qse0CAAKAwACv1sAZToeBwACv3sAZTpUADAaykICJwACv6cAAr/TAALANAQCuBbHAAAAAAQPAALAGwACwDQAAAAAAAABgA8AA/esBSsAAsAkBJ0sGspGAicAAsBLAALAdwACwSAEArgaxwAAAAAEDwACwKMAAsEgAAAAAAAAAYAPAAP3rAUrAALArASegnwayk4CJwACwTcAAsFjAALDUAACuKgAAAAEDwACwY8AAsNQAAAAAAAAAYAOErgE+Aj0jHMAAsHoWwACwbC6uKbKNSAEAASsAwAD9XhfAALBsLq4pH8AAsIKIdwEAARbAALCfLieyigCyjSsBYAOIU0rAALCrAR/AALC2hMwBAAEWwACwwi6uKbKNAAaylYCJwACw2cAAsOTAALPMAACuK7HAAAAAAQPAALD3wACzzAAAAAICAsAAsQoAAACAlmADhK4AwACxKwAAAK4LYAOsFwAAYAOErgE+Bk7AALFIwACxVgAArixgA4hTAR/AALFciHcBAAGAwACxecAZUDoAScAAsYUcwACxkBbAALGJLpsOsoxIAQABKwDAAP1ePgE9HMAAsakWwACxoS6uA7HAscuhoAMAAhrAALG+rz0ewACxzMAAWcEBAAEWwACx2y6SVLHMAAGHeim0Nj9OwACyC8AAshEAAIKKYAOFqwE1wACyFwAAAQBgA4WrAR/AALIXhbsDAAMawACyNq89HMAAslQWwACyTC6uBLHAsc+hdwEAARzAALJqFsAAsmIurgSxwLHPWwIAAjHAALKNYAOErgIcwACyji6uKgAAAACykx/AALKhhMwBAAGCwACyrcAZUF8AFsAAssouklSxzAC0nAC04SbAALLbARbAALLbLpsOsoxgA4PqADUAAAABAFsBF8AAsuuDwACy6cAZUPOEUx7AALL4wABZwQEAARbAALMHLpJUscwAglmDAMAZUPM9NQAAAAEAYAOsFwGBwACzE8AZUEgjHMAAsyaEAMAZUcZIAQABKwAAKxfAALMmhADAGVHGgoqDwACzLsAZUOGsGwFgA4WrTsAAsz3AALNDAACuFGADiFMBH8AAs0mIdwEAAYPAALNmwBlQ4QBKwACzcgEewACzebHCAgACgsAAs4rAGVBfHsAAs5mxwgIAAoTAALOhwBlSCx/AALOshMwBAAGCwACzuMAZUF8AAAAGspaAicAAs9HAALPowAC1lAAArgmxwAFqwACz0mADwAD9UQIAAAEDwACz98AAtZQAAAAAAAAAYAOErgE+AknAALQAHMAAtAsWwAC0BC6hvLKLSAEAASsAwAD9Xj4B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nsAA0BMAAAADwADPssAA0BMAAAADAwPAAM/UAAAAlVxgA7QYAMAAz+IAAACSVGADnrEAwADP7gAABIQhYAPAAFF9AABgA7KzAT8CCAGytYIAwBlrnwkAwADP/7HtAgACgMAA0AXAGWuDgcAA0A3AGWuRAAUGsriAicAA0BjAANAvwADQUQEArgWxwAFqwADQGWADwAD9UQIAAAEDwADQQcAA0FEAAAAAAAAAYAPAAP3rAUrAANBEASeuNwayuYCJwADQVsAA0G3AANCRAQCuBrHAAWrAANBXYAPAAP1RAgAAAQPAANB4wADQkQAAAAAAAABgA8AA/esBSsAA0HsBJ6CXBrK8gInAANCVwADQrMAA0fIAAK4KscABasAA0JZgA8AA/VECAAABA8AA0LXAANHyAAAAAQEBwADQ0AAAAK4LYAOsFwAAYAOErgE+BD0WwADRAhbAANDxFsAA0OkuhCGyta44wABRgISsgstOwADRGcAA0R4AAJ52YAOuFgE1wADRJAAAAQBgA64WAR/AANEkrh0CAAIWwADRUBbAANFILoQhsrWuOMAAUYAcwADRahbAANFiLoQhsrWuOQEAARbAANGGFsAA0X4urgOxwLHLoK+0HgDAAFGIADUAAAABAFsBF8AA0ZeBwADRlcAZbOyEUx7AANGkwABZwQEAARbAANGzLpJUscwAglmBAMAZbOw9NQAAAAEAYAOsFwGAwADRv8AZbKQjHMAA0dKCAMAZbYBIAQABKwAAKxfAANHSggDAGW2AnnaBwADR2cAZbNqsGQFgA64WSsAA0eMBgcAA0erAGWzaBrK9gInAANH3wADSDsAA03AAAKF5AWrAANH4YAPAAP1RAgAAAQPAANIawADTcAAAAAICAsAA0h8AAACDXGADwAD8BQDAANIxAAAAW2ADhXgAAGADhK4BPgJJwADSQiIcwADSdBbAANJtHMAA0k4WwADSRi6uBLHAsc+i4QEAAYHAANJiwBluFwC0n2HAAPzYgJcBAAGTAMAA/TQBHMAA0qwWwADSpRzAANKLFsAA0oMurgSxwLHPouIBAAGBwADSmsAZbhcAtJ5hwAD82ICXAQABkwDAAP00PgE9HMAA0sEWwADSuS6uA7HAscuhogMAA2rAANLjYAORWcAAYduAwADTB8AZbgcWwADTHSeuN2HAAP3vALQzP0rAANMwARzAANM/FsAA0zcuhCGyta46AwADgMAA01HAGW4HFsAA01kurgSxwLHPgcAA02LAGW4XAMAAUYcGsr6AicAA03XAANOGwADT2wAAhCwBasAA03ZgA8AA/VECAAABA8AA043AANPbAAAAAQEBwADTmQAAAIQ7YAPAAP5VAABcAT4CPRzAANOqgMAA06XAGW9cgooBAAEnrjsAwAD+Vz0cwADTyYDAANPEwBlvXIKKAQABFsAA088uhCGytQDAAP5XAAAZa+AAGWwnABlsbgAZbdMAGW8oABlvsAAAAAUCssGAicAA0+DAANPmwADjHwOuPAAAAWABscgAAAIEssOAicAA1C3AANQ8Ca49AGADs2IABLLEgInAANRRwADUYAmuPgBgA7HIAAEFstWAicAA1GXAANRlwADU+gAAAAPAANR8wADU+gAAAAQEBMAA1JcAAACVXGADtBgAwADUpQAAAJJUYAOesQDAANS3AAAErj1gA7NiAMAA1M0AAASuPmADscgAAGADssEBPwMIAbLDggDAGXBXCAGyxIMAwBlwZQkAwADU5rHtAgACgMAA1OzAGXA7gcAA1PTAGXBJAAsGsseAicAA1P/AANUWwADVqQAArgmxwAFqwADVAGADwAD9UQIAAAEDwADVJcAA1akAAAAAAAAAYAOErgE+AUrAANUuARzAANU9FsAA1TUurgOxwLHLo60DAAMcwADVYRbAANVRLq4+ssSuCbHAAAAAALHWFsAA1YwWwADVfC6uPbLDgySzZBbAANWaFsAA1ZQuklSxzIdUnroAtC4GssiAicAA1a7AANXFwADWmQAArgqxwAFqwADVr2ADwAD9UQIAAAEDwADVzsAA1pkAAAABAQHAANXpAAAArgtgA6wXAABgA4SuAT4BSsAA1gIBHMAA1hEWwADWCS6uA7HAscujrQMAAxzAANY+FsAA1i4urj6yxK4KscABAAGAwADWSMAZcYAAsdoWwADWdBbAANZkLq49ssODJLNkFsAA1ooWwADWhC6SVLHMh1SeugC0LgayyYCJwADWnsAA1rXAANfJAACuDrHAAWrAANafYAPAAP1RAgAAAQPAANa/wADXyQAAAAMDA8AA1ssAAACAlmADhK4AwADW1wAAAKM6YAPAAPo/AMAA1wQAAACuC2ADrBcAAGADhK4BPgFKwADXHQEcwADXLBbAANckLq4DscCxy6OtAwADHMAA11kWwADXSS6uPrLErg6xwAMAA4DAANdkwBlyM4HAANdrwBlyQYLAANd4wBlyUQCx2xbAANekFsAA15Qurj2yw4Mks2QWwADXuhbAANe0LpJUscyHVJ66ALQuBrLKgInAANfOwADX9MAA2E4AAK4MAWrAANfPYAPAAP1RAgAAAQPAANgKwADYTgAAAAEBAcAA2BYAAACjt2ADhK4AAGADrBcBSsAA2CQBJsAA2CQBHsAA2DWuMwEAAYDAANhKwBlzFABgA6wXBrLLgInAANhTwADYX8AA2mcAAKEBAWrAANhUYAPAAP1RAgAAAQPAANhywADaZwAAAAMDA8AA2JIAAAChl2ADs7cAwADYnAAAAK4XYAPAAPwFAMAA2LEAAAChmWADwAD6PwAAWwE+Ak7AANjLwADY2gAArj9gA8AA/VEBHMAA2PQWwADY5C6uPrLEoQEDAAOAwADZCMAZc4CBwADZDsAZc46CwADZHsAZc54AseZJwADZMCXAANlDg8AA2TTAGXO0YAOxyD4BSsAA2VkBH8AA2WSy1QQABBbAANmHLq4DscCxyxbAANmQLpJUscwWwADZly6uPbLDFMAA2ajAGXO0AwFgA7HIAD4CTsAA2dfAANniAACCa2ADhK4BJsAA2dcBg8AA2eTAGXO0YAOErkrAANn6ARzAANoJFsAA2gEurgOxwLHLo60DAAOEwADaKMAZdFUWwADaRBbAANo0Lq49ssODJLNkFsAA2lIWwADaTC6SVLHMh1SeugC0Lgay0oCJwADabMAA2oPAANr8AQCuBbHAAWrAANptYAPAAP1RAgAAAQPAANqVwADa/AAAAAAAAABgA8AA/esBPgFKwADamwEmwADamwEewADaop0dAwADJ65AHsAA2tzAAFnBAQABFsAA2usuklSxzAAWwADa8y6uB7HAsdIAYAPAAP3rBrLTgInAANsBwADbGMAA2z8BAK4GscABasAA2wJgA8AA/VECAAABA8AA2yPAANs/AAAAAAAAAGADwAD96wFKwADbJgEnrjwGssyAicAA20TAANtcwADfpAAAom0BasAA20VgA8AA/VECAAABA8AA23rAAN+kAAAAAQEBwADbkAAAAFtdA8AA/KkBYAPAAFcCAABgA8AAVsABPghOwADbqMAA260AAIC9YAPAAP3r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AQBbARfAAQ/ThMABD9HAGZj0hFOBwAEP4MAZmF6CWYQAwBmY9BbAAQ/1LpJUscwAtJwBhTMpsvs1AAAAAQBbARfAARAdhMABEBvAGZi8hFOBwAEQKsAZmF6CWYQAwBmYvAazA4CJwAEQOcABEFDAARGSAACuEgFqwAEQOmADwAD9UQIAAAEDwAEQZcABEZIAAAAEAQHAARBrAAAArhFgA4iDAAPAARCGAAAAg1xgA8AA/AUBasABEI5gA8AA/AWBnsABEJcAAACjOmADwAD6PwFqwAEQpGADwAD6PwDAARC1AAAAhYFgA4PqAWoAYAPAAP0OeWADhK4BPgFKwAEQzQE1wAEQ1AAAAQBgA4SuARzAARDULq5MAgABHMABEPAWwAEQ6C6uBLHAsc9bAgACMcABERNgA4SuATXAAREcAAABAGADhK4BHMABERwWwAERFC6uBLHAsc+h2gIAApQrALSlNQAAAAEAWwEXwAERMYTAAREvwBmaWoRTgcABET7AGZnEglmEAMAZmloWwAERUy6SVLHMALScAYUzKbL7NQAAAAEAWwEXwAERe4TAARF5wBmaIoRTgcABEYjAGZnEglmEAMAZmiIGswSAicABEZfAARGuwAESfgAArg8BasABEZhgA8AA/VECAAABA8ABEcbAARJ+AAAABAMDwAER2QAAAICWYAOErgDAARHpAAAAgpBgA4i4AMABEfMAAACDXGADwAD8BQABwAESBwAAAKM6YAPAAPo/AWrAARIUYAPAAPo/AGADhK4BPgFKwAESIgEcwAESKS6uTAIAARzAARI8FsABEjQurgSxwLHPWwIAAjHAARJSYAOErgGAwAESU8AZmxsWwAESWy6SVLHMALScAYU1KbL7BrMFgInAARKDwAESmsABEvYAAKDbAWrAARKEYAPAAP1RAgAAAQPAARKpwAES9gAAAAAAAABgA4SuAT4BSsABErIBHMABErkurkwCAAEcwAESzBbAARLELq4EscCxz6FjAQABFsABEtsuklSxzAC0nQGFMymy+wazB4CJwAES+8ABExLAARNvAACuFbHAAWrAARL8YAPAAP1RAgAAAQPAARMiwAETbwAAAAAAAABgA4SuAT4BSsABEysBHMABEzIurkwCAAEcwAETRRbAARM9Lq4EscCxz6FjAQABFsABE1QuklSxzAC0nQGFMymy+wazCICJwAETdMABE4vAARQRAACuFrHAAWrAARN1YAPAAP1RAgAAAQPAAROcwAEUEQAAAAEBAcABE6gAAACAlmADhK4AAGADhK4BPgFKwAETtQEcwAETvC6uTAIAARzAARPPFsABE8curgSxwLHPWwIAAjHAARPlYAOErgGAwAET5sAZnNsWwAET7i6SVLHMALScAYU1KbL7BrMJgInAARQWwAEULcABFngAAKLvAWrAARQXYAPAAP1RAgAAAQPAARQ+wAEWeAAAAAYGBsABFFsAAACFHV0DwAD8qQFgA8AAVwIAwAEUdwAAAIC9YAPAAP3rAMABFI0AAABbYAOFeADAARSkAAAAof9gA56xAMABFLsAAACi7mADnrEAwAEU2gAAAKFQYAOxswAAYAOErgE+AknAARTrIRzAART9gMABFO/AGZ1xSAEAASsAwAD9Xj4CQBbAARU/HMABFR0WwAEVFS6uBLHAsc+hdAEAAYLAARU0wBmdmAC0oIFVwAD8i8ABFRXAARVGAD0cwAEVVxbAARVPLq4EscCxz6F1AgACgsABFXzAGZ2YHMABFY8WwAEVhy6uA7HAscuhdgEAAYDAARWmwBmdcQC0OwC0oT9KwAEVwQEcwAEV0BbAARXILq4DscCxy6LdBAAEHMABFgIWwAEV+i6uA7HAscuhIQEAARzAARYdLq5MAQABgsABFijAGZ2YALL7AMAAU7grgsABFkvAGZ2YHsABFl7AAFnBAQABFsABFm0uklSxzAAAtD4AABmSlgAZkyIAGZORABmT6AAZlFMAGZUaABmVmAAZlj0AGZbvABmYGwAZmYEAGZrnABmbtwAZnC0AGZylABmdPQAZnuYAAAAQArMQgInAARZ9wAEWg8ABIJgDoKQAAAFgAbL5AAABBLMSgInAARbbwAEW3wmAvQFqwAEWxWADwAD9UQJgA4iDAAEFsyOAicABF/zAARf8wAEYegCVTwADwAEYHMABGHoAAAADAwPAARg+AAAAlVxgA7QYAMABGEwAAACSVGADnrEAwAEYWAAABIC9YAOIgwAAYAOzEAE/AggBsxKCAMAZn7AJAMABGGazDwIAAoDAARhswBmflIHAARh0wBmfogAKBrMUgInAARbkwAEW7MABF/cEAQAAAAABA8ABFwPAARf3AAAAAwMDwAEXJQAAAJVcYAO0GADAARczAAAAklRgA56xAMABFz8AAACAvWADiIMAAGADsxABPgJJwAEXSxbAARdZFsABF1SCwAEXT8AZoDKAvYiGgVXAAP3xPgE9HsABF2qdGwQABCeFnieAvR7AAReFwABZwQEAAYHAAReUwBmgJAAWwAEXo4DAARecwBmgFoCswABTrwA/SsABF7MBH8ABF76zIwMAA4DAARffwBmgFoHAARfnwBmgJILAARfuwBmgMgAGsxeAicABGH/AARiWwAEYvQEArgaxwAFqwAEYgGADwAD9UQIAAAEDwAEYocABGL0AAAAAAAAAYAPAAP3rAUrAARikASegpAazGYCJwAEYwsABGNnAARnYAACheQFqwAEYw2ADwAD9UQIAAAEDwAEY5cABGdgAAAACAgLAARjqAAAAh1RgA8AA/AUAwAEZAAAAAFtgA4V4AABgA4SuAT4BSsABGREBHMABGSAWwAEZGC6uA7HAscui9AMAAxzAARlQFsABGUgurgOxwLHLoSEBAAEcwAEZeC6uTAIAAYHAARmDwBmhYAGDXIDAARmWwBmhULMaAMAAU7iBwAEZrMAZoWAWwAEZyYHAARm/wBmhYIRTglkAtEAGsxqAicABGd3AARn0wAEbrwAArkwBasABGd5gA8AA/VECAAABA8ABGf7AARuvAAAABAEBwAEaCQAAAFtgA4V4AAPAARogAAAAhTNgA8AA+j8BasABGipgA8AA+j8AwAEaNgAAAIU1YAPAAPo/AWrAARpAYAPAAPo/AMABGksAAACDXGADwAD8BQFqAGADwAD9DnlgA4SuAT4CPSMcwAEaYYPAARpawBmiZkgBAAErAMAA/SiLwAEaWsAZomYewAEaZcAAWcEBAAEWwAEaeS6SVLHMACsBYAPAAPwFSsABGoUBHMABGpQWwAEajC6uA7HAscui3AIAAhzAARq9FsABGrUurgOxwLHLoU4GAAQ1wAEa6QAAAQBgA4SuARzAARrpFsABGuEurgSxwLHPoTUBAAErALSqNQAAAAEAWwEXwAEa/ITAARr6wBmi+4RTg8ABGwnAGaJmglmEAMAZovsWwAEbHS6uBbHAsw2AwAEbPMAZoiCDwAEbU8AZomYChTOBwAEbccAZoi6FNYLAARuRwBmiSrQrg8ABG6TAGaJmALQ9BrMbgInAARu0wAEb5MABHE8AAKJrAWrAARu1YAPAAP1RAgAAAQPAARvzwAEcTwAAAAEBAcABG/oAAACAvWADnrEAAGADwAD9UQE+AUrAARwGAR/AARwRs4IEAAQWwAEcMS6uA7HAscuAwAEcOsAZo8IuKQAGsxyAicABHFTAARxrwAEc6QAAozkBasABHFVgA8AA/VECAAABA8ABHHrAARzpAAAAAgEBwAEchgAAAICWYAOErgABwAEckwAAAKM6YAPAAPo/AWrAARygYAPAAPo/AGADhK4BPgFKwAEcrgEcwAEctS6uTbHAAgACKoDAARzfwBmkNgCzIQazHYCJwAEc7sABHQXAAR4qAACuEAFqwAEc72ADwAD9UQIAAAEDwAEdHMABHioAAAAHAgLAAR0iAAAArhFgA4iDAMABHT0AAACAlmADhK4ABcABHU8AAACDXGADwAD8BQFqwAEdYGADwAD8BYGewAEddQAAAKM6YAPAAPo/AWrAAR2CYAPAAPo/AMABHZkAAACFgWADg+oBagBgA8AA/Q55wAEdtQAAAKtAYAPAAPo/AWrAAR3CYAPAAPo/AMABHdQAAACrP2ADwAD6PwFqwAEd4mADwAD6PwBgA4SuAT4BSsABHfABHMABHfcurk2xwAIAAimBwAEeIMAZpMoAsyEGsx6AicABHi/AAR5GwAEeyAAAoNsBasABHjBgA8AA/VECAAABA8ABHlXAAR7IAAAAAAAAAGADhK4BPgFKwAEeXgE1wAEeZQAAAQBgA4SuARzAAR5lLq5MAgABHMABHngWwAEecC6uBLHAsc+hYwEAARbAAR6HLpJUscwAtJ0BhTMpsxo1AAAAAQBbARfAAR6ngMABHqXAGaXLhFMWwAEeuhbAAR60LpJUscyHVJ66glmAAMAZpcsGsx+AicABHs3AAR7ewAEfMgAAhCwBasABHs5gA8AA/VECAAABA8ABHuXAAR8yAAAAAQEBwAEe8QAAAIQ7YAPAAP5VAABcAT4CPRzAAR8CgMABHv3AGaZzgooBAAEnrh8AwAD+Vz0cwAEfHoDAAR8ZwBmmc4KKAQABFsABHykWwAEfJC6AvbMSgL2IhgDAAP5XBrMhgInAAR83wAEfQsABIJYAAK5NscAAAAABA8ABH2TAASCWAAAAAgICwAEfcQAAAKO2YAPAAPo/AMABH4gAAACAlmADhK4AAGADhK4BPgFKwAEflQEcwAEfpBbAAR+cLq4DscCxy6O1BAAEHMABH9YWwAEfzi6uA7HAscuhIQEAARzAAR/xLq5MAgABHMABIBEWwAEgCS6uBLHAsc9bAgACMcABICdgA4SuAYHAASAowBmnChbAASAwLpJUscwAtJwBhTUpsxoAwABTuIDAASBewBmm+oHAASBywBmnChbAASCHFsABIIEuklSxzIdUnroAtEEAABmf7wAZoNUAGaEcABmh7AAZo44AGaQCABmkiAAZpYgAGaY/ABmm0AAZp8UAAAAKArMkgInAASCbwAEgocABJPoDoKMAAAFgAbHIAAADBLMmgInAASDjwAEg7gmepQBgA8AAUZEABLMngInAASEEwAEhDAmFfwBgA4SuAASzKICJwAEhHMABISAJgL0AYAOIgwABBbMzgInAASElwAEhJcABIkgAAAADwAEhNsABIkgAAAADAwPAASFYAAAAlVxgA7QYAMABIWYAAACSVGADnrEAwAEhcgAABJ6lYAPAAFGRAABgA7MkAT8ECAGzJoIAwBmomAgAsygewAEhkoiMAgACFsABIaOCwAEhl8AZqJiAvcAAUZMWwAEhuBbAASGwgMABIanAGah8hEO0GoJFwABV+gAIALMnNcABIdgAAAEAYAOEtgEfwAEh2ITAAQABFsABIfaCwAEh6sAZqJiAvcAAUZMANQAAAAEAWwEXwAEiCIPAASIGwBmo/4RTHsABIhXAAFnBAQABgcABIiTAGaiKAIJZgwDAGaj/CQDAASI0se0CAAKAwAEiOsAZqHyBwAEiQsAZqIoABgazK4CJwAEiTcABImTAASKJAQCuBbHAAWrAASJOYAPAAP1RAgAAAQPAASJ2wAEiiQAAAAAAAABgA8AA/esBSsABInkBFsABIoUWwAEieS6epbMmgL3AAFGTBrMsgInAASKOwAEipcABIsYBAK4GscABasABIo9gA8AA/VECAAABA8ABIrDAASLGAAAAAAAAAGADwAD96wFKwAEiswEnoKMGsy6AicABIsvAASLcwAEjNwAAhCwBasABIsxgA8AA/VECAAABA8ABIuPAASM3AAAAAQEBwAEi7wAAAIQ7YAPAAP5VAABcAT4CPRzAASMAgMABIvvAGapUgooBAAEnrh8AwAD+Vz0cwAEjHIDAASMXwBmqVIKKAQABFsABIy4WwAEjIi6epbMmgL3AAFGTAMAA/lcGsy+AicABIzzAASNTwAEj8gAAozkBasABIz1gA8AA/VECAAABA8ABI2LAASPyAAAAAgEBwAEjbgAAAICWYAOErgABwAEjewAAAKM6YAPAAPo/AWrAASOIYAPAAPo/AGADhK4BPgFKwAEjlgE1wAEjoQAAAQBgA4TrAR/AASOhhPwDAAMWwAEjrS6Ff7MnFsABI7cugL2zKIDAASO9wBmq5wA1AAAAAQBbARfAASPMgsABI8rAGasghFMewAEj2cAAWcEBAAEWwAEj6C6SVLHMAIJZggDAGasgBrMwgInAASP3wAEkDsABJHQAAKDbAWrAASP4YAPAAP1RAgAAAQPAASQdwAEkdAAAAAAAAABgA4SuAT4BSsABJCYBNcABJDEAAAEAYAOE2QEfwAEkMYTpAgACFsABJD0uhX+zJxbAASRHLoC9sygANQAAAAEAWwEXwAEkToDAASRMwBmrz4RTHsABJFvAAFnBAQABFsABJGouklSxzACCWYAAwBmrzwazMYCJwAEkecABJJDAAST4AACheQFqwAEkemADwAD9UQIAAAEDwAEknMABJPgAAAACAgLAASShAAAAg1xgA8AA/AUAwAEkswAAAFtgA4V4AABgA4SuAT4BSsABJMQBJsABJMQBHsABJMudHQMAAyeheYDAASTnwBmsZhbAASTvLq4HscCx0gBgA4SuAAAZqYAAGanZABmqIAAZqrMAGauMABmsMgAZrL4AAAAGArM0gInAAST9wAElDMABK+QHrk4AAAFgAbHIAAABBLM2gInAASVIwAElUQmhAABgA7HIAAEFs0WAicABJVbAASVWwAElzgAAAAPAASVrwAElzgAAAAMDA8ABJY0AAACVXGADtBgAwAElmwAAAJJUYAOesQDAASWnAAAEoQBgA7HIAABgA7M0AT8CCAGzNoIAwBmtUwkAwAElurHtAgACgMABJcDAGa03gcABJcjAGa1FAAkGszmAicABJdPAASXqwAEmSwEArgWxwAFqwAEl1GADwAD9UQIAAAEDwAEl/MABJksAAAAAAAAAYAPAAP3rAT4BSsABJgIBJsABJgIBHsABJgmdHQMAAyeuQxbAASYvFsABJikuklSxzIdUnroWwAEmQxbAASY7Lq4DscCxy4CswABTrwBgA8AA/esGszuAicABJlDAASZnwAEm5wAAoXkBasABJlFgA8AA/VECAAABA8ABJnPAASbnAAAAAgICwAEmeAAAAIdUYAPAAPwFAMABJo4AAABbYAOFeAAAYAOErgE+AUrAASafASbAASafAR7AASamnRsEAAQkwAEmwAEWwAEmsy6FhsAA/WUnoXmAwAEm0sAZrlAWwAEm3i6uB7HAsdIAYAOErgazPICJwAEm7MABJwPAASdpAACjOQFqwAEm7WADwAD9UQIAAAEDwAEnEsABJ2kAAAACAQHAASceAAAAgJZgA4SuAAHAAScrAAAAozpgA8AA+j8BasABJzhgA8AA+j8AYAOErgE+AUrAASdGARzAASdNLq4WscABAAGAwAEnX8AZru4As0MGsz2AicABJ27AASeFwAEoHAAArg8BasABJ29gA8AA/VECAAABA8ABJ53AASgcAAAABAMDwAEnsAAAAICWYAOErgDAASfAAAAAgpBgA4i4AMABJ8oAAACDXGADwAD8BQABwAEn3gAAAKM6YAPAAPo/AWrAASfrYAPAAPo/AGADhK4BPgFKwAEn+QEcwAEoAC6uFrHAAQABgMABKBLAGa9zALNDBrM+gInAASghwAEoOMABKTcAAK4QAWrAASgiYAPAAP1RAgAAAQPAAShPwAEpNwAAAAcCAsABKFUAAACuEWADiIMAwAEocAAAAICWYAOErgAFwAEoggAAAINcYAPAAPwFAWrAASiKYAPAAPwFgZ7AASiZAAAAozpgA8AA+j8BasABKKZgA8AA+j8AwAEovQAAAIWBYAOD6gFqAGADwAD9DnnAASjZAAAAq0BgA8AA+j8BasABKOZgA8AA+j8AwAEo+AAAAKs/YAPAAPo/AWrAASkGYAPAAPo/AGADhK4BPgFKwAEpFAEcwAEpGy6uFrHAAQABgcABKS3AGbAkALNDBrM/gInAASk8wAEpU8ABKfEAAKLTAWrAASk9YAPAAP1RAgAAAQPAASlnwAEp8QAAAAQBAcABKW0AAACuEWADiIMAA8ABKYgAAACDXGADwAD8BQFqwAEpkGADwAD8BYGewAEpmQAAAKM6YAPAAPo/AWrAASmmYAPAAPo/AMABKbcAAACFgWADg+oBagBgA8AA/Q55YAOErgE+AUrAASnPARzAASnWLq4WscABAAErALNDBrNAgInAASn2wAEqDcABKqwAAK4SAWrAASn3YAPAAP1RAgAAAQPAASoiwAEqrAAAAAQBAcABKigAAACuEWADiIMAA8ABKkMAAACDXGADwAD8BQFqwAEqS2ADwAD8BYGewAEqVAAAAKM6YAPAAPo/AWrAASphYAPAAPo/AMABKnIAAACFgWADg+oBagBgA8AA/Q55YAOErgE+AUrAASqKARzAASqRLq4WscABAAErALNDBrNCgInAASqxwAEqvcABKx4AAK4VscABasABKrJgA8AA/VECAAABA8ABKs3AASseAAAAAAAAAGADhK4BPgFKwAEq1gEmwAEq1gEewAEq3Z0dAwADJ65PFsABKwIWwAEq/C6SVLHMh1SeuhbAASsWFsABKw4urgOxwLHLgKzAAFOvAGADhK4Gs0OAicABKyPAASs6wAEr4gAArhaxwAFqwAErJGADwAD9UQIAAAEDwAErS8ABK+IAAAABAQHAAStXAAAAgJZgA4SuAABgA4SuAT4BSsABK2QBHMABK3MWwAEray6uA7HAscug3AMAA2rAASuAYAORWcAAQ5QewAErscAAWcEBAAEWwAErwC6SVLHMAB7AASvIwABZyAEAARbAASvXLpJUscwAAMAAU7MAABmtkgAZrhwAGa66ABmvPwAZr+IAGbDhABmxkgAZskMAGbLJABmzcQAAAAkCs0aAicABK+fAASvtwAE7zQOgkAAAAWABszQAAAIEs0iAicABLDLAASw3CYCWAGADhK4ABLNJgInAASxDwAEsVRih8QBgA8AA/esAAQWzVICJwAEsWsABLFrAAS0CAAAAA8ABLGvAAS0CAAAABQUFwAEshgAAAJVcYAO0GADAASyUAAAAklRgA56xAMABLKsAAAChAGADscgAwAEsuwAABICWYAOErgDAASzHAAAEofFgA8AA/esAAGADs0YBPwMIAbNIgwDAGbQ4CAGzSYQAwBm0RgkAwAEs47NFAwADgMABLOnAGbQOgcABLPHAGbQcgsABLPjAGbQqAAYGs0yAicABLQfAAS0ewAEtPwEArgaxwAFqwAEtCGADwAD9UQIAAAEDwAEtKcABLT8AAAAAAAAAYAPAAP3rAUrAAS0sASegkAazToCJwAEtRMABLVvAAS2VAACg2wFqwAEtRWADwAD9UQIAAAEDwAEtasABLZUAAAAAAAAAYAOErgE+AUrAAS1zARzAAS16Lq5QAQABKgCzUAazT4CJwAEtmsABLbHAAS3pAACg3QFqwAEtm2ADwAD9UQIAAAEDwAEtv8ABLekAAAAAAAAAYAOErgE+AUrAAS3IARzAAS3PLq5QAQABKQCzUAazUICJwAEt7sABLfnAATl0AACuUAAAAAEDwAEuCcABOXQAAAABAQHAAS4PAAAAozpgA8AA+j8AAGADhK4BPgJJwAEuIiEcwAEuPhbAAS4uFsABLiYurgOxwLHLoMG0HUgBAAFqwAEuUWADru3AAMCIAMAA/V4+AUrAAS5fARzAAS5uFsABLmYurgOxwLHLoNwDAANqwAEuhmADkVnAAG4+HsABLqXAAFnBAQABFsABLrQuklSxzAAWwAEuwhbAAS68LpJUscxhnsoAwABTsz9JwAEu1R7AAS7ZwAD15gIAAieAvBbAAS7oLqHxs0kAPgFKwAEvBQEcwAEvFhbAAS8MLqEAszajOQIAARbAAS8mLoCWs0gBozqAwAEvOsAZtaux3UnAAS9THsABL1fAAPXmAgACJ53VFsABL2cuofGzSQA+AUrAAS+EARzAAS+VFsABL4suoQCzNq4QBAACGsABL62vSBbAAS+3LoCWs0gCg1wewAEv0MAAWcEBAAEWwAEv3y6SVLHMAKM6gMABL/TAGbWrsd9JwAEwDR7AATARwAD15gIAAiedyxbAATAhLqHxs0kAPgFKwAEwPgEcwAEwTxbAATBFLqEAszauEAQAAhrAATBnr0IWwAEwci6AlrNIAoNcHsABMIvAAFnBAQABFsABMJouklSxzACjOoDAATCvwBm1q7HfScABMMgewAEwzMAA9eYCAAInneQWwAEw3C6h8bNJAD4BSsABMPkBHMABMQoWwAExAC6hALM2rhAEAAIawAExIq9DFsABMTAugJazSAKDXB7AATFJwABZwQEAARbAATFYLpJUscwAozqAwAExbcAZtaux30nAATGGHsABMYrAAPXmAgACJ53QFsABMZouofGzSQA+AUrAATG3ARzAATHIFsABMb4uoQCzNq4QBAACGsABMeCvRxbAATHtLoCWs0gCg1wewAEyBsAAWcEBAAEWwAEyFS6SVLHMAKM6gMABMirAGbWrsd9JwAEyQx7AATJHwAD15gIAAiedohbAATJXLqHxs0kAPgFKwAEydAEcwAEyhRbAATJ7LqEAszauEAQAAhrAATKdry8WwAEyrC6AlrNIAoNcHsABMsXAAFnBAQABFsABMtQuklSxzACjOoDAATLpwBm1q7HfScABMwIewAEzBsAA9eYCAAInneEWwAEzFi6h8bNJAD4BSsABMzMBHMABM0QWwAEzOi6hALM2rhAEAAIawAEzXK8zFsABM2ougJazSAKDXB7AATODwABZwQEAARbAATOSLpJUscwAozqAwAEzp8AZtaux30nAATPAHsABM8TAAPXmAgACJ53IFsABM9UuofGzSQA+AUrAATPyARzAATQDFsABM/kuoQCzNq4QBAACGsABNBuvPhbAATQqLoCWs0gCg1wewAE0Q8AAWcEBAAEWwAE0Ui6SVLHMAKM6gMABNGfAGbWrsd9JwAE0gB7AATSEwAD15gIAAiedvhbAATSVLqHxs0kAPgFKwAE0sgEcwAE0wxbAATS5LqEAszauEAQAAhrAATTbr0kWwAE06y6AlrNIAoNcHsABNQTAAFnBAQABFsABNRMuklSxzACjOoDAATUowBm1q7HfScABNUEewAE1RcAA9eYCAAInncEWwAE1Vy6h8bNJAD4BSsABNXQBHMABNYUWwAE1ey6hALM2rhAEAAIawAE1na9KFsABNa4ugJazSAKDXB7AATXHwABZwQEAARbAATXWLpJUscwAozqAwAE168AZtaux30nAATYEHsABNgjAAPXmAgACJ53dFsABNhkuofGzSQA+AUrAATY2ARzAATZHFsABNj0uoQCzNq4PBAADFsABNmsugJazSGrAATZ4YAOIz4SIHsABNofAAFnBAQABFsABNpYuklSxzAABozqAwAE2tcAZtaux3knAATbOHsABNtLAAPXmAgACJ52yFsABNuIuofGzSQA+AUrAATb/ARzAATcQFsABNwYuoQCzNq4QBAACGsABNyivMhbAATczLoCWs0gCg1wewAE3TMAAWcEBAAEWwAE3Wy6SVLHMAKM6gMABN3DAGbWrsd9JwAE3iR7AATeNwAD15gIAAiedrRbAATedLqHxs0kAPgFKwAE3ugEcwAE3yxbAATfBLqEAszauEAQAAhrAATfjrzAWwAE37C6AlrNIAoNcHsABOAXAAFnBAQABFsABOBQuklSxzACjOoDAATgpwBm1q7HfScABOEIewAE4RsAA9eYCAAInneoWwAE4Vy6h8bNJAD4BSsABOHQBHMABOIUWwAE4ey6hALM2rhAEAAIawAE4na9EFsABOKsugJazSAKDXB7AATjEwABZwQEAARbAATjTLpJUscwAozqAwAE46MAZtaux3z4BSsABOQkBJsABOQkBHsABORCdGwQABBbAATkaLqHxs0knrlAWwAE5SBbAATlCLpJUscyHVJ66FsABOWYWwAE5Xi6uA7HAscuArMAAU68AYAOErgazUYCJwAE5ecABOZHAATsPAAChIgFqwAE5emADwAD9UQIAAAEDwAE5psABOw8AAAABAQHAATm4AAAAns9dA8AA/NoCYAPAAP3rYAPAAPwFAABgA4Q2AT4CScABOdEiIR7AATnWwAD15gIAAieAvBbAATnlLqHxs0kAASElwAE6DhbAAToELqEAszZgA7IZPgFKwAE6NwEcwAE6SBbAATo+LqEAszahIgEAAYDAATpewBm9BwCx5D9KwAE6fAEcwAE6ixbAATqDLq4DscCxy6EiBQAFKhbAATqyFsABOqguoQCzNq4FscCx0B7AATrNwABZwQEAARbAATrmFsABOtwuoQCzNpJUscwAHsABOu7AAFnBAQABFsABOv0uklSxzAAWwAE7BS6AlrNIALQnBrNSgInAATsUwAE7JcABO8sAAIQsAWrAATsVYAPAAP1RAgAAAQPAATsswAE7ywAAAAEBAcABOzgAAACEO2ADwAD+VQAAXAE+BD0cwAE7SYDAATtEwBm+NYKKAQABJ65KAMAA/lc9HsABO2G1GgIAAhbAATttLoCWs0iAwAE7dMAZvjUAPRzAATuEgMABO3/AGb41gooBAAEnrlEAwAD+Vz0cwAE7roDAATupwBm+NYKKAQABFsABO7QuofGzSQDAAP5XAAAZtJoAGbThABm1MgAZtYMAGbzTABm+AQAZvsQAAAAGArNVgInAATvQwAE71sABP9UDoJEAAAFgAbM0AAACBLNXgInAATwbwAE8KQmuEQBgA4iDAASzWICJwAE8PsABPE0JhYEAYAOD6gABBbNhgInAATxSwAE8UsABPQYAAAADwAE8acABPQYAAAAFBQXAATyEAAAAlVxgA7QYAMABPJIAAACSVGADnrEAwAE8qQAAAKEAYAOxyADAATy5AAAErhFgA4iDAMABPM4AAASFgWADg+oAAGADs1UBPwMIAbNXgwDAGb99CAGzWIQAwBm/iwkAwAE857NFAwADgMABPO3AGb9TgcAB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YmADwAD8BQGTARyif4eifcAajzJjAQABFqKLgKKBwBqMBmHAAPzYAMAA/TIBj6KTwBqPMhyilIeik8AajzJkAQABlADAAP0qPgVOosSi0QAAhOpdA8AA/NoCYAPAAFbmYAPAAFbAATKi/WADwABW5mADwABWwABOoyujPAAArpddA8AA/NoCYAPAAFbmYAPAAFbAATKjaGADwABW5mADwABWwAA9HKN8FKNwwBqPgwgAgL8CAAIco4aAo33AGowGSwEAAYejh8AajzIAwAD8uByjk4SjjcAajFdLAQABh6OUwBqPMgDAAPy4AMAA/O89HKOsFKOcwBqPsAkAgL8CAAIco7aAo63AGowGSwEAAYejt8AajzIAwAD8uIKjvcAajCkAwAD870WjzQGj1qPYAACXpmADwAD8BQGTARyj3xSj3cAakGMKAGMBAAEWo+uAo+HAGowGYcAA/NgAwAD9MgEVo/PAGpBjChyj9BSj88AakGMKAGQBAAGUAMAA/So+AT0cpAaEpADAGoxXgL8CAAIUpAfAGpBjCgAepAy08QQAAxykIoSkHMAajFdLAQABFKQjwBqQYwoAAMAA/LgUpCfAGo+DCAAUpDXAGo+wCQABhCApAMAA/LlKpHIBhKR5wBqMVwa09ICOrTOtSrHPAAGumQAAAAEDrWCxzwAAAAICAq14AAAAgmxgA8AAVuYArZAAAACCkGADwABWwAAAXQPAAPypAWADwABWgAE+A06toK2lAACuml0DwAD8qQFgA8AAVoABMa25YAPAAFaAAEmtvyWtyIGtw8AakUhgA8AAVoA+AUmt4xyt+Bat7BSt58AakUgBAWADwABWgJ6lwABWhEgBAAGArfvAGpE6AMAA/V4+AT0crhKCrg3AGpFoVgEAARSuFsAakUgBAWADwABWgADAAPy6PgFJrjAhHK5DFq45FK40wBqRSAEBYAPAAFaAW8AAVoNIAQABKwDAAP1ePgFGrlaug65nAAAAH2ADwABWwAAWrngUrnPAGpFIAQFgA8AAVoBbwABWgz4BPRyulIKuj8AakWiApQEAAR6um7T0AgACgK6ywBqROoOuvMAakiEAAMAA/Ls/Sa7pJa7yga7twBqRSGADwABVyT4DPRyvFYKvEMAakWiApQEAAR6vHLT0AgACgK8zwBqROhavQhSvPcAakUgBAWADwABVyYU6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AD4CPRfAAE22gsAATavAG0+/gJYmwABNtgEcwABODBzAAE3TgMAATb7AG0fPr6EBAAEmwABN9wEWwABN94LAAE3swBtPvxK272ADvMEAwABkVq+fAQABFsAATi2CwABOIsAbT7+lYcAAk+AAwACT6WADwACVErb+QsAATksAAcAATnVqwABOdWADttvAAOcoAD4CPRfAAE6fgsAATpTAG0+/gJYmwABOnwEcwABO9BzAAE68gMAATqfAG0fPr6MBAAEmwABO3wEWwABO34LAAE7UwBtPvxK272ADvK0AwABkWK+fAQABFsAATxWCwABPCsAbT7+lYcAAk+AAwACT6WADwACVErb+QsAATzMAAcAAT11qwABPXWADttvAAOc5AD4CPRfAAE+JgsAAT37AG0+/gJYmwABPiQEcwABP4BzAAE+mgMAAT5HAG0fPr6UBAAEmwABPywEWwABPy4LAAE/AwBtPvxK272ADvNMAwABkVK+fAQABFsAAUAGCwABP9sAbT7+lYcAAk+AAwACT6WADwACVErb+QsAAUB8AAcAAUElqwABQSWADttvAAOdKAD4CPRfAAFBogsAAUF3AG0+/gJYmwABQaAEcwABQuRzAAFCHgcAAUHDAG0ffr6cBAAEmwABQpAEWwABQpILAAFCZwBtPvxK272ADwABg0gDAAFzbr58BAAEWwABQ2oLAAFDPwBtPv6VhwACT4ADAAJPpYAPAAJUStv5CwABQ+AABwABRImrAAFEiYAO228AA51wAPgI9F8AAUU2CwABRQsAbT7+AlibAAFFNARzAAFGpHMAAUWyBwABRVcAbR9+vqQEAASbAAFGUARbAAFGUgsAAUYnAG0+/ErbvYAPAAP3rAMAAXNqvnwEAARbAAFHKgsAAUb/AG0+/pWHAAJPgAMAAk+lgA8AAlRK2/kLAAFHoAAa2noCfwABSBMAAUhfAAFNmAAAjAWrAAFIFYAPAAP1RAgAAAQPAAFIfwABTZgAAAAAAAABgA8AA/esBPghOwABSNcAAUjgAAIPkYAPAAP41AR/AAFI+wAD+VAAAAAA9HMAAUlWAwABSUsAbU5SCigEAASevqgDAAP5JPRzAAFJ6gMAAUnfAG1OUgooBAAEjIRzAAFKFFsAAUoAugpO2lUgBAAErAMAA/V4ewABSj8AAkr0BAAEWwABSnS6Ck7aVACev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ZwAAAAABBrbogJ/AAGmxwABpscAAak8AACMAAAABA8AAabHAAGpPAAAAAAAAAGADwAD96wFKAAEPAC623wAAG2y6ABts8QAAAAECtuuAn8AAalLAAGpYwAB3CQOvzgAAAWABwACWWgABYAHAAGOiBAS27YCfwABqv8AAatkGg+cAYAPAAP3rAWrAAGrFYAPAAP3rwADn7wS27oCfwABq+sAAav4JgmcAYAO22wAEtu+An8AAaw/AAGsTCRIAYAPAAP1RAAS28YCfwABrJcAAaysYlwy2GABgA8AAlRIBKwEFtwCAn8AAazDAAGswwABrVwAAAAPAAGtBwABrVwAAAAICAsAAa0cAAASCZ2ADttsAwABrUgAABBJgA8AA/VEAAGADtusBPwMIAbbugADAG223CAG274EAwBttxQkBwABrMMAAlmEAAAAACQa284CfwABrXMAAa2TAAG+BBAGvFQAAAAEDwABriMAAb4EAAAABAQHAAGuUAAAAg0RgA8AAXUEAAGADtusBPgY9HMAAa6mAwABrosAbbieClAEAAWrAAGuvYAPAAP3rwADn7wDAAF1DTsAAa8/AAGvUAACCZ2ADttsBHMAAa92AwABr1sAbbievuQEBYAO22wFqwABr/F0DwAD8qQFgA7bbwADn0QDAAF1WTsAAbBAAAAASYAPAAP1RAEFHwABsGoHAAGwiwBtuaAYBwABsS2rAAGxLYAO228AA5wYAPgI9isAAbGvAG26qHMAAbHmAwABscsAbbieYsgAAAADAAF1wQsAAbJAAAcAAbLhqwABsuGADttvAAOcXAD4CPYrAAGzWwBtuqhzAAGzkgMAAbN3AG24nmMUAAAAAwABdc0LAAGz5AAHAAG0hasAAbSFgA7bbwADnKAA+A07AAG1DwABtVQAAr7pgA8AA+j8BHMAAbV6AwABtV8AbbievMwAAAADAAF1PScAAbXKDwABtdsAbb1k+AT2KwABtlcAbbqocwABto4DAAG2cwBtuJ5jFAAAAAMAAXXM+AT2KwABty8AbbqocwABt2YDAAG3SwBtuJ5jEAAAAAMAAXXdCwABt+gABwABuImrAAG4iYAO228AA5zkAPgI9isAAbkHAG26qHMAAbk+AwABuSMAbbiesPgAAAADAAF14QsAAbmUAAcAAbo1qwABujWADttvAAOdKAD4CPYrAAG6f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AHeWBrAXAGADtwEBagBgA7cBwADogQS3EICfwAB3pcAAd6UGsBgAYAO3AQFqAGADtwHAAOiTBLcRgJ/AAHeywAB3sgawGQBgA7cBAWoAYAO3AcAA6KUEtxKAn8AAd8bAAHfGBrAaAGADtwEBagBgA7cBwADotwS3E4CfwAB33cAAd90GoTUAYAO3AQFqAGADtwHAAOjLBLcUgJ/AAHfswAB37AawGwBgA7cBAWoAYAO3AcAA6N8EtxWAn8AAd/3AAHf9BqHKAGADtwEBagBgA7cBwADo8QS3FoCfwAB4DsAAeA4GsBwAYAO3AQFqAGADtwHAAOkFBLcXgJ/AAHgnwAB4JwaiUgBgA7cBAWoAYAO3AcAA6RkEtxiAn8AAeDbAAHg2BrAdAGADtwEBagBgA7cBwADpKwS3GYCfwAB4S8AAeEsGgmoAYAO3AQFqAGADtwHAAOk/BLcagJ/AAHhXwAB4VwawHgBgA7cBAWoAYAO3AcAA6VMEtxuAn8AAeGjAAHhoBrAfAGADtwEBagBgA7cBwADpZwS3HICfwAB4csAAeHIGgO0AYAO3AQFqAGADtwHAAOl7BLcdgJ/AAHh/wAB4fwawIABgA7cBAWoAYAO3AcAA6Y8Etx6An8AAeJbAAHiWBqGPAGADtwEBagBgA7cBwADpowS3H4CfwAB4qMAAeKgGsCEAYAO3AQFqAGADtwHAAOm3BLcggJ/AAHi3wAB4twawIgBgA7cBAWoAYAO3AcAA6csEtyGAn8AAeMLAAHjCBoMkAGADtwEBagBgA7cBwADp3wS3IoCfwAB4zMAAeMwGgnQAYAO3AQFqAGADtwHAAOnzBLcjgJ/AAHjWwAB41gawIwBgA7cBAWoAYAO3AcAA6gcEtySAn8AAeOjAAHjoBrAkAGADtwEBagBgA7cBwADqGwS3JYCfwAB4+cAAePkGrWsAYAO3AQFqAGADtwHAAOotBLcmgJ/AAHkIwAB5CAawJQBgA7cBAWoAYAO3AcAA6kEEtyeAn8AAeSLAAHkiBrAmAGADtwEBagBgA7cBwADqVQS3KICfwAB5MMAAeTAGsCcAYAO3AQFqAGADtwHAAOpnBLcpgJ/AAHlLwAB5SwawKABgA7cBAWoAYAO3AcAA6nsEtyqAn8AAeWDAAHlgBrApAGADtwEBagBgA7cBwADqjQS3K4CfwAB5bcAAeW0G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BLdegJ/AAICMwACAsAahjwBgA8AA/esBasAAgJ1gA8AA/evAAO1eBLdfgJ/AAIDIwACA5gawIQBgA8AA/esBasAAgNZgA8AA/evAAO1hBLdggJ/AAID+wACBFAawIgBgA8AA/esBasAAgQhgA8AA/evAAO1kBLdhgJ/AAIEswACBQAaDJABgA8AA/esBasAAgTVgA8AA/evAAO1nBLdigJ/AAIFYwACBbAaCdABgA8AA/esBasAAgWFgA8AA/evAAO1qBLdjgJ/AAIGEwACBqAawIwBgA8AA/esBasAAgZVgA8AA/evAAO1tBLdkgJ/AAIHAwACB4gawJABgA8AA/esBasAAgdBgA8AA/evAAO1wBLdlgJ/AAIH6wACCGAatawBgA8AA/esBasAAgghgA8AA/evAAO1zBLdmgJ/AAIIwwACCZAawJQBgA8AA/esBasAAgklgA8AA/evAAO12BLdngJ/AAIJ8wACCmAawJgBgA8AA/esBasAAgolgA8AA/evAAO15BLdogJ/AAIKwwACC5gawJwBgA8AA/esBasAAgspgA8AA/evAAO18BLdpgJ/AAIL+wACDKAawKABgA8AA/esBasAAgxJgA8AA/evAAO1/BLdqgJ/AAINAwACDWgawKQBgA8AA/esBasAAg0xgA8AA/evAAO2CBLdrgJ/AAINywACDmgawKgBgA8AA/esBasAAg4VgA8AA/evAAO2FBLdsgJ/AAIOywACD2gauegBgA8AA/esBasAAg8VgA8AA/evAAO2IBLdtgJ/AAIPywACEIAawKwBgA8AA/esBasAAhAhgA8AA/evAAO2LBLdugJ/AAIQ4wACEWgawLABgA8AA/esBasAAhEhgA8AA/evAAO2OBLdvgJ/AAIRywACEjgaoFQBgA8AA/esBasAAhH9gA8AA/evAAO2RBLdwgJ/AAISmwACEzAawLQBgA8AA/esBasAAhLhgA8AA/evAAO2UBLdxgJ/AAITkwACFAgaivwBgA8AA/esBasAAhPJgA8AA/evAAO2XBLdygJ/AAIUawACFOgaiyABgA8AA/esBasAAhSlgA8AA/evAAO2aBLdzgJ/AAIVSwACFdgawLgBgA8AA/esBasAAhWNgA8AA/evAAO2dBLd0gJ/AAIWOwACFtAah5ABgA8AA/esBasAAhaBgA8AA/evAAO2gBLd1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2sAbpCuhMcAAlhQAwABdAz0cwACj+BbAAKPzLoQ7t4SCjAEAAWrAAKQHYAPAAP3rwADtTwDAAFz4PRzAAKQWLrButhgBAAGAwACkIcAbpCsAt4oGt6OAn8AApC/AAKRAwAClNAAAsJABasAApDBgA8AA/VECAAABA8AApFLAAKU0AAAAAQEBwACkZAAAAIPuYAPAAJYBAABcAT4GPRzAAKR1FsAApHAuhDu3hK+9AQABasAApIpgA7cBwADpUwDAAF0DPRzAAKSjFsAApJ4uhDu3hIKUAQABasAApLRgA8AA/evAAO1SAMAAXPc9HMAApMgumo8BAAEWwACk04DAAKTOwBule4C9wACWAwC3hz0cwACk3i6ajwEAARbAAKTpgMAApOTAG6V7gmrAAJYEALeHPRzAAKT9FsAApPguhDu3hIKMAQABasAApQxgA8AA/evAAO1SAMAAXPg9HMAApSAusG62GAEAAYDAAKUrwBulewC3iga3pICfwAClOcAApUrAAKYnAACwkQFqwAClOmADwAD9UQIAAAEDwAClVcAApicAAAABAQHAAKVoAAAAg+5gA8AAli8AAFwBPgY9HMAApXkWwACldC6EO7eEr70BAAFqwACljmADtwHAAOlnAMAAXQM9HMAApaAWwAClmy6EO7eEgpQBAAFqwAClsWADwAD968AA7VUAwABc9z0cwAClvi6ajwEAARbAAKXJgMAApcTAG6adhX/AAJYxALeHPRzAAKXYLpqPAQABFsAApeOAwACl3sAbpp2k8cAAljIAt4c9HMAApfcWwACl8i6EO7eEgowBAAFqwACmBmADwAD968AA7VUAwABc+D0cwACmEy6wbrYYAQABgMAAph7AG6adALeKBrelgJ/AAKYswACmPcAApw4AALCSAWrAAKYtYAPAAP1RAgAAAQPAAKZLwACnDgAAAAEBAcAAplkAAACD7mADwACV8QAAXAE+BT0cwACmahbAAKZlLoQ7t4SvvQEAAWrAAKZ/YAO3AcAA6XsAwABdAz0cwACmlBbAAKaPLoQ7t4SClAEAAWrAAKalYAPAAP3rwADtWADAAFz3PRzAAKa6FsAAprUuhDu3hIG5AQABFsAApsuAwACmxsAbp7+AvcAAldIAwABc/z0cwACm2xbAAKbWLoQ7t4SCjAEAAWrAAKbqYAPAAP3rwADtWADA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AAABA8AAsD3AALFYAAAAAQEBwACwWAAAAIPuYAPAAJVwAABcAT4GPRzAALBpFsAAsGQuhDu3hK+9AQABasAAsH5gA7cBwADqQQDAAF0DPRzAALCgFsAAsJsuhDu3hIKUAQABasAAsLFgA8AA/evAAO12AMAAXPc9HMAAsM4umo8BAAEWwACw2YDAALDUwBuzFp6lwACVcgC3hz0cwACw6y6ajwIAARbAALD2gMAAsPHAG7MWgJbAAJViAZexKbeHPRzAALEYFsAAsRMuhDu3hIKMAQABasAAsSdgA8AA/evAAO12AMAAXPg9HMAAsUQusG62GAEAAYDAALFPwBuzFgC3iga3sICfwACxXcAAsW7AALJ9AACwnAFqwACxXmADwAD9UQIAAAEDwACxfcAAsn0AAAABAQHAALGMAAAAg+5gA8AAlV4AAFwBPgc9HMAAsZ0WwACxmC6EO7eEr70BAAFqwACxsmADtwHAAOpVAMAAXQM9HMAAscgWwACxwy6EO7eEgpQBAAFqwACx2WADwAD968AA7XkAwABc9z0cwACx6i6ajwEAARbAALH1gMAAsfDAG7Q7sJ3AAJVgALeHPRzAALINFsAAsgguhDu3hLCeAQABFsAAsiSAwACyH8AbtDuqVMAAlWEAwABdAD0cwACyLS6ajwEAARbAALI4gMAAsjPAG7Q7gJbAAJViALeHPRzAALJJFsAAskQuhDu3hIKMAQABasAAslhgA8AA/evAAO15AMAAXPg9HMAAsmkusG62GAEAAYDAALJ0wBu0OwC3iga3sYCfwACygsAAspPAALPSAACwnwFqwACyg2ADwAD9UQIAAAEDwACyr8AAs9IAAAABAQHAALLLAAAAg+5gA8AAlUEAAFwBPgY9HMAAstwWwACy1y6EO7eEr70BAAFqwACy8WADtwHAAOpnAMAAXQM9HMAAsxQWwACzDy6EO7eEgpQBAAFqwACzJWADwAD968AA7XwAwABc9z0cwACzQy6HMwEAARbAALNSgMAAs03AG7WLrm/AAJVDALeIPRzAALNqFsAAs2UuhDu3hK86AQABFsAAs3mAwACzdMAbtYuwoMAAlUQAwABc/D0cwACzkRbAALOMLoQ7t4SCjAEAAWrAALOgYAPAAP3rwADtfADAAFz4PRzAALO+LrButhgBAAGAwACzycAbtYsAt4oGt7KA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AAFqwADReWADwAD968AA7R8AwABdRELAANGRAAHAANGuasAA0a5gA7cBwADoKAA+Bj0cwADRxxbAANHALoNEt86ClAEAAWrAANHYYAPAAP3rwADtIgDAAF1DTsAA0fnAANH+AACAvWADwACVEgEcwADSAC6edgABYAPAAJUSAAC3007AANIewADSJAAAgJZgA8AAlRIBHMAA0iYunnYAAWADwACVEgAAt9M9isAA0jbAG9RWH8AA0kHAAJbTAgACg8AA0k3AG9aHhMAA0lPAG9avAD0cwADSahbAANJjLoNEt86CjAEAAWrAANJ5YAPAAP3rwADtIgDAAF1EQsAA0owAAcAA0qlqwADSqWADtwHAAOg5AD4GPRzAANLLFsAA0sQug0S3zoKUAQABasAA0txgA8AA/evAAO0lAMAAXUNOwADTCsAA0xUAAJ8YXQPAAPypAWADwACWxwEcwADTFy6vLwABYAPAAJbHAAC31E7AANMwwADTOwAAsIBgA8AA+j8BHMAA00QWwADTPS6DRLfOrzMAAAAAwABdTz2KwADTWMAb1FYfwADTY8AAlsYCAAGDwADTeMAb120BsICEwADTkMAb15w9HMAA06wWwADTpS6DRLfOgowBAAFqwADTu2ADwAD968AA7SUAwABdRELAANPXAAHAANP0asAA0/RgA7cBwADoSwA+BD0cwADUDhbAANQHLoNEt86ClAEAAWrAANQfYAPAAP3rwADtKADAAF1DPYrAANQzwBvUVh/AANQ+wACWtwAAAAA9HMAA1F0WwADUVi6DRLfOgowBAAFqwADUbGADwAD968AA7SgAwABdRELAANSAAAHAANSdasAA1J1gA7cBwADoXQA+BT0cwADUvhbAANS3LoNEt86ClAEAAWrAANTPYAPAAP3rwADtKwDAAF1DTsAA1P7AANUHAACIRV0DwAD8qQFgA8AAlRIBHMAA1Qkury8AAWADwACVEgAAt9Q9isAA1R3AG9RWH8AA1SjAAJarAQABg8AA1TzAG9jlAD0cwADVVhbAANVPLoNEt86CjAEAAWrAANVlYAPAAP3rwADtKwDAAF1EQsAA1YAAAcAA1Z1qwADVnWADtwHAAOhvAD4EPRzAANW5FsAA1bIug0S3zoKUAQABasAA1cpgA8AA/evAAO0uAMAAXUM9isAA1eDAG9RWH8AA1evAAJVdAQABHMAA1founnYAAWADwACVEgAAt9MAPRzAANYSFsAA1gsug0S3zoKMAQABasAA1iFgA8AA/evAAO0uAMAAXURCwADWNwABwADWVGrAANZUYAO3AcAA6IEAPgY9HMAA1nAWwADWaS6DRLfOgpQBAAFqwADWgWADwAD968AA7TEAwABdQ07AANajwADWrwAAsBdgA7a/AR7AANa9tsgBAAEWwADW0C6DRLfOAD0cwADW7hbAANbhLq9vt89WAQABg8AA1vLAG9o5AMAA/Lo9isAA1wjAG9RWg8AA1w/AG9o5PRzAANcrFsAA1yQug0S3zoKMAQABasAA1zpgA8AA/evAAO0xAMAAXURCwADXUAABwADXbWrAANdtYAO3AcAA6JMAPgY9HMAA14cWwADXgC6DRLfOgpQBAAFqwADXmGADwAD968AA7TQAwABdQ07AANe0wADXuwAAgyRgA8AAlRwBHMAA170unnYAAWADwACVHAAAt9NOwADX1cAA19oAAJZXYAPAAJUcARzAANfcLp52AAFgA8AAlRwAALfTPYrAANfswBvUVh/AANf3wABmYQIAAoPAANgBwBvbAoTAANgJwBvbKgA9HMAA2B8WwADYGC6DRLfOgowBAAFqwADYLmADwAD968AA7TQAwABdRELAANhCAAHAANhfasAA2F9gA7cBwADopQA+BD0cwADYgBbAANh5LoNEt86ClAEAAWrAANiRYAPAAP3rwADtNwDAAF1DPYrAANiswBvUVh/AANi3wABmNQEAARzAANjPFsAA2Mgug0S3zq+8AAAAAMAAXVIAPRzAANjtFsAA2OYug0S3zoKMAQABasAA2PxgA8AA/evAAO03AMAAXURCwADZFwABwADZNGrAANk0YAO3AcAA6LcAPgU9HMAA2VgWwADZUS6DRLfOgpQBAAFqwADZaWADwAD968AA7ToAwABdQ07AANmYwADZngAAhIFdA8AA/KkBYAPAAJZiARzAANmgLq8vAAFgA8AAlmIAALfUPYrAANm0wBvUVh/AANm/wACWkQEAAYPAANnWwBvchQA9HMAA2e0WwADZ5i6DRLfOgowBAAFqwADZ/GADwAD968AA7ToAwABdRELAANoaAAHAANo3asAA2jdgA7cBwADoywA+BD0cwADaUxbAANpMLoNEt86ClAEAAWrAANpkYAPAAP3rwADtPQDAAF1DPYrAANp6wBvUVh/AANqFwACWewAAAAA9HMAA2qYWwADany6DRLfOgowBAAFqwADatWADwAD968AA7T0AwABdRELAANrLAAHAANroasAA2uhgA7cBwADo3wA+BD0cwADbBhbAANr/LoNEt86ClAEAAWrAANsXYAPAAP3rwADtQADAAF1DPYrAANsvwBvUVh/AANs6wACWnQEAARzAANtSFsAA20sug0S3zq+8AAAAAMAAXVIAPRzAANtwFsAA22kug0S3zoKMAQABasAA239gA8AA/evAAO1AAMAAXURCwADblwABwADbtGrAANu0YAO3AcAA6PEAPgQ9HMAA29IWwADbyy6DRLfOgpQBAAFqwADb42ADwAD968AA7UMAwABdQz2KwADb+8Ab1FYfwADcBsAAloUBAAEcwADcHhbAANwXLoNEt86vvAAAAADAAF1SAD0cwADcPBbAANw1LoNEt86CjAEAAWrAANxLYAPAAP3rwADtQwDAAF1EQsAA3GMAAcAA3IBqwADcgGADtwHAAOkFAD4FPRzAANymFsAA3J8ug0S3zoKUAQABasAA3LdgA8AA/evAAO1GAMAAXUNOwADc38AA3OQAAIC9YAPAAJUcARzAANzmLp52AAFgA8AAlRwAALfTPYrAANz2wBvUVh/AAN0BwACVMAEAAYPAAN0awBve/wA9HMAA3TAWwADdKS6DRLfOgowBAAFqwADdP2ADwAD968AA7UYAwABdRELAAN1fAAHAAN18asAA3XxgA7cBwADpGQA+BD0cwADdmBbAAN2RLoNEt86ClAEAAWrAAN2pYAPAAP3rwADtSQDAAF1DPYrAAN2/wBvUVh/AAN3KwACWcwEAARzAAN3gFsAA3dkug0S3zq8zAAAAAMAAXU8APRzAAN38FsAA3fUug0S3zoKMAQABasAA3gtgA8AA/evAAO1JAMAAXURCwADeIQABwADePmrAAN4+YAO3AcAA6SsAPgY9HMAA3mAWwADeWS6DRLfOgpQBAAFqwADecWADwAD968AA7UwAwABdQ07AAN6fwADesQAAsB1gA7brAR7AAN7RtvMBAAEWwADe5C6DRLfOAD0cwADfCBbAAN71Lq9wt9BWAQABg8AA3wzAG+BRAMAA/Lo9isAA3yjAG9RWg8AA3y/AG+BRPRzAAN9RFsAA30ou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AAFqwADrvmADwAD968AA7XAAwABdRELAAOvWAAHAAOvzasAA6/NgA7cBwADqLQA+Bz0cwADsDxbAAOwILoNEt86ClAEAAWrAAOwgYAPAAP3rwADtcwDAAF1DTsAA7ETAAOxOAACFumADwACVEgEcwADsUC6edgABYAPAAJUSAAC3007AAOxuwADscwAAga1gA8AAlRIBHMAA7HUunnYAAWADwACVEgAAt9NOwADsk8AA7J0AAIW7YAPAAJUSARzAAOyfLp52AAFgA8AAlRIAALfTPYrAAOyvwBvUVh/AAOy6wACViQMAA4PAAOzJwBvrn4TAAOzUwBvrx4XAAOzawBvr7wA9HMAA7PUWwADs7i6DRLfOgowBAAFqwADtBGADwAD968AA7XMAwABdRELAAO0aAAHAAO03asAA7TdgA7cBwADqQQA+Bj0cwADtXhbAAO1XLoNEt86ClAEAAWrAAO1vYAPAAP3rwADtdgDAAF1DTsAA7Z/AAO2rAACepWADwACVGQEcwADtrS6edgABYAPAAJUZAAC3007AAO3LwADt0QAAgJZgA8AAlRIBHMAA7doWwADt0y6DRLfOsLgBAWADwACVEgE2FsAA7eounna30wFgA8AAlRIAwABdTT2KwADt+cAb1FYfwADuBMAAlXkCAAKDwADuHsAb7LaEwADuK8Ab7N4APRzAAO5CFsAA7jsug0S3zoKMAQABasAA7lFgA8AA/evAAO12AMAAXURCwADucgABwADuj2rAAO6PYAO3AcAA6lUAPgc9HMAA7qoWwADuoy6DRLfOgpQBAAFqwADuu2ADwAD968AA7XkAwABdQ07AAO7ewADu6wAAsJ1gA8AAlRIBHMAA7u0unnYAAWADwACVEgAAt9NOwADvBMAA7wcAAKpUYAPAAP3rARzAAO8QFsAA7wkug0S3zrC5AAAAAMAAXVNOwADvOsAA70AAAICWYAPAAJUSARzAAO9CLp52AAFgA8AAlRIAALfTPYrAAO9SwBvUVh/AAO9dwACVbwMAA4PAAO90wBvtuYTAAO+CwBvt4YXAAO+GwBvuDgA9HMAA750WwADvli6DRLfOgowBAAFqwADvrGADwAD968AA7XkAwABdRELAAO/BAAHAAO/easAA795gA7cBwADqZwA+Bj0cwADwBhbAAO//LoNEt86ClAEAAWrAAPAXYAPA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aKFoAAAAAAAAAGADvMEABriegKOhbaF9oYcBArFOAAAAAQOhh6GHAAAAAAAAAGADvMEABrifgKOhjKGcoakBArFPAAAAAQOhqaGpAAAAAAAAAGADvMEABriggKOhrqG+ockBArFQAAAAAQOhyaHJAAAAAAAAAGADvMEABrihgKOhzqHeoekBArFRAAAAAQOh6aHpAAAAAAAAAGADvMEABriigKOh7qH+ohoBArFSAAAAAQOiGqIaAAAAAAAAAGADvMEABrijgKOiH6Ivok0BArFTAAAAAQOiTaJNAAAAAAAAAGADvMEABrikgKOiUqJionsBArFUAAAAAQOie6J7AAAAAAAAAGADvMEABrilgKOigKKQoqcBArFVAAAAAQOip6KnAAAAAAAAAGADvMEABrimgKOirKK8oswBArFWAAAAAQOizKLMAAAAAAAAAGADvMEABringKOi0aLhovgBArFXAAAAAQOi+KL4AAAAAAAAAGADvMEABriogKOi/aMNoyABArFYAAAAAQOjIKMgAAAAAAAAAGADvMEABripgKOjJaM1o0YBArFZAAAAAQOjRqNGAAAAAAAAAGADvMEABriqgKOjS6Nbo3EBArFaAAAAAQOjcaNxAAAAAAAAAGADvMEABrirgKOjdqOGo54BArFbAAAAAQOjnqOeAAAAAAAAAGADvMEABrisgKOjo6Ozo8UBArFcAAAAAQOjxaPFAAAAAAAAAGADvMEABritgKOjyqPao+cBArFdAAAAAQOj56PnAAAAAAAAAGADvMEABriugKOj7KP8pAkBArFeAAAAAQOkCaQJAAAAAAAAAGADvMEABrkngKOkgaSGpLsAArFfAAAAAQOkpqS7AAAAAQEBpLQAAACCZmADvNMAAGADwAD6PwAGuK+Ao6TApNOk7QECsWAAAAABA6TtpO0AAAAAAAAAYAO86AAGuLCAo6TypQilHwECsWEAAAABA6UfpR8AAAAAAAAAYAO9AAAGuSiAo6WMpZulugACsWIAAAABA6WtpboAAAABAQGltQAAAIC9YAPAAP3rAABgA7zoAAa4sYCjpb+lz6XbAQKxYwAAAAEDpdul2wAAAAAAAABgA7zBAAa4soCjpeCl8KYBAQKxZAAAAAEDpgGmAQAAAAAAAABgA7zBAAa4s4CjpgamFqYmAQKxZQAAAAEDpiamJgAAAAAA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sji4SwBgA7zBASsEubmAo8AAt4HAALeZGLI5uEsAYAO9AAErBLm6gKPAALg+wAC4SRiyOrhLAGADvOgBKwS5u4CjwAC4xcAAuNEYsju4SwBgA7zoASsEubyAo8AAuVDAALldGLI8uEsAYAO86AErBLm9gKPAALnfwAC59xiyPbhLAGADvOgBKwS5voCjwAC6lMAAurAYsj64SwBgA7zoASsEub+Ao8AAu2PAALt6GLI/uEsAYAO86AErBLnAgKPAAMFbwADBghiyQLhLAGADvOgBKwS5wYCjwADYRcAA2E4YskG4SwBgA7zoASsEucKAo8AA2LvAANjIGLJCuEsAYAO86AErBLnDgKPAANlHwADZWBiyQ7hLAGADvOgBKwS5xICjwADZ3sAA2e0YskS4SwBgA7zoASsEucWAo8AA21zAANtnGLJFuEsAYAO85QErBLnGgKPAANvPwADb2hiyRrhLAGADvOUBKwS5x4CjwADcQsAA3FAYske4SwBgA7zlASsEuciAo8AA3MrAANzYGLJIuEsAYAO86AErBLnJgKPAAN1hwADdbxiySbhLAGADvOgBKwS5yoCjwADd+MAA3goYskq4SwBgA7zoASsEucuAo8AA3qLAAN6+GLJLuEsAYAO86AErBLnMgKPAAN91wADfkhiyTLhLAGADvOgBKwS5zYCjwADgTMAA4GsYsk24SwBgA7zoASsEuc6Ao8AA5tzAAOb2GLJOuEsAYAO8wQErBLnPgKPAAOeOwADnoBiyT7hLAGADvMEBKwS50ICjwADplMAA6a4YslC4SwBgA7zlASsEudGAo8AA6nTAAOqPGLJRuEsAYAO9AAErBLnSgKPAAOuQwADrpRiyUrhLAGADvMEBKwS504CjwADsesAA7JIYslO4SwBgA7zBASsEudSAo8AA7aHAAO2vGLJUuEsAYAO8wQErBLnVgKPAAO5qwADueBiyVbhLAGADvMEBKwS51oCjwADvLMAA70oYsla4SwBgA8AA+j8BKgS514CjwADvWsAA72wYsle4SwBgA7zBASsEudiAo8AA73zAAO+PGLJYuEsAYAO8wQErAQW69ICjwABIE8AASBPAAEg/AAAAA8AASCXAAEg/AAAAAgICwABIKwAABLHxYAO69QDAAEg2AAAEsfJgA4EUAABgA7lZAT8DCAG5XIAAwBxRBQgBuV2BAMAcURMJAcAASBPAAP1nAAAAAIEWBrnagKPAAEhgwABIfMAASMMBAJrMAWrAAEhhYAPAAP1RAgAAAQPAAEiIwABIwwAAAAAAAABgA7zBAUrAAEiRATUAAAABAGADvMEBFsAASJEum9u4S7leIxzAAEiegADAHFGOSAEAASsAwAD9XhfAAEiRLpvbuEscwABIoi6yWbhLAgACFsAASK0unDK57SebyAC6u7legADAHFGOAWADvMEGuduAo8AASOLAAEj+wABJOQEAms4BasAASONgA8AA/VECAAABA8AASQjAAEk5AAAAAAAAAGADvMEBSsAASQsBNQAAAAEAYAO8wQEWwABJCy6b3bhLuV8jHMAASRaAAMAcUi9IAQABKwDAAP1eF8AASQsum924SxzAAEkaLrJZuEsCAAIWwABJJS6cMrntJ5vKALq7uV+AAMAcUi8BYAO8wQa53ICjwABJV8AASXPAAEmrAQCa0QFqwABJWGADwAD9UQIAAAEDwABJfMAASasAAAAAAAAAYAO8wQFKwABJfwE1AAAAAQBgA7zBARbAAEl/LpvfuEu5YCMcwABJiYAAwBxS0EgBAAErAMAA/V4XwABJfy6b37hLHMAASY0uslm4SwIAAhbAAEmYLpwyue0nm8wAuru5YIAAwBxS0AFgA7zBBrndgKPAAEnJwABJ5cAASh0BAJrPAWrAAEnKYAPAAP1RAgAAAQPAAEnuwABKHQAAAAAAAABgA7zBAUrAAEnxATUAAAABAGADvMEBFsAASfEum964S7lhIxzAAEn7gADAHFNxSAEAASsAwAD9XhfAAEnxLpveuEscwABJ/y6yWbhLAgACFsAASgounDK57SebywC6u7lhgADAHFNxAWADvMEGud6Ao8AASj7AAEpawABKoQEAmtIBasAASj9gA8AA/VECAAABA8AASmbAAEqhAAAAAAAAAGADvMEBSsAASm8BNQAAAAEAYAO8wQEWwABKby6b4LhLuWIjHMAASnyAAMAcVBJIAQABKwDAAP1eF8AASm8um+C4SxzAAEqALrJZuEsCAAIWwABKiy6cMrntJ5vNALq7uWKAAMAcVBIBYAO8wQa534CjwABKwsAASt7AAEslAQCa0wFqwABKw2ADwAD9UQIAAAEDwABK6sAASyUAAAAAAAAAYAO8wQFKwABK8wE1AAAAAQBgA7zB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sooBnVAqurtJwACjYRzAAKNpg8AAo2XAHKHrSAEAASsAwAD9XkrAAKNyASo/PRfAAKOGLrInuEsmwACjhgEcwACjly6yZ7hLAwACg8AAo6jAHKHrJ4CmAZ1QKrq9YAO86LmmScAAo84cwACj4RbAAKPSLrInuEu5pkgBAAErAMAA/V5KwACj6gEqPz9KwACkAgEiHMAApBKAwACkCcAcoZKyowEAARbAAKQaLrInuEu5pgDAAEuEACIcwACkP4HAAKQ2wByhokgBAAErAMAA/V4BFsAApMwcwACke4LAAKRWwByhsLKkAwADgcAApI3AHKGiFsAApJcuseO6PxbAAKSvgMAApKbAHKGSpy7AAEtoAL5ZsqW91ga6P4CjwAClCMAApSfAAKV5AQCx4wFqwAClCWADwAD9UQIAAAEDwAClNcAApXkAAAAAAAAAYAO86AFKwAClPgEmwAClPgE1AAAAAQBgA7zoARbAAKU+LrInuEu5piMcwAClTYAAwByjc0gBAAErAMAA/V4XwAClPi6yJ7hLJsAApT4BHMAApVEusme4SwIAAhbAAKViLrFLuicngKYAur1gA7zouaaAAMAco3MBYAO802ADvOgGukCAo8AApaLAAKXBwACmHAEAseQBasAApaNgA8AA/VECAAABA8AApdLAAKYcAAAAAAAAAGADvOgBSsAApdsBJsAApdsBNQAAAAEAYAO86AEWwACl2y6yKLhLuacjHMAApe2AAMAcpChIAQABKwDAAP1eF8AApdsusii4SybAAKXbARzAAKXxLrJnuEsCAAIWwACmAi6xS7onJyMAur1gA7zouaeAAMAcpCgBYAO802ADvOgGukGAo8AApkjAAKZnwACmwQEAseUBasAApklgA8AA/VECAAABA8AApnvAAKbBAAAAAAAAAGADvOgBSsAApoQBJsAApoQBNQAAAAEAYAO86AEWwACmhC6yKbhLuagjHMAAppmAAMAcpNxIAQABKwDAAP1eF8AApoQusim4SybAAKaEARzAAKadLrJnuEsCAAIWwACmri6xS7onJ2QAur1gA7zouaiAAMAcpNwBYAO802ADvOgGukKAo8AApuPAAKb/wACnTQEAseYBasAApuRgA8AA/VECAAABA8AApwzAAKdNAAAAAAAAAGADvMEBSsAApxUBNQAAAAEAYAO8wQEWwACn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woAAwBzPfgFgA7zoBrqRgKPAANlcwADZe8AA2coBALGvAWrAANldYAPAAP1RAgAAAQPAANmMwADZygAAAAAAAABgA7zoAUrAANmVATUAAAABAGADvOgBFsAA2ZUuskO4S7nDIxzAANmngADAHNAVSAEAASsAwAD9XhfAANmVLrJDuEscwADZqy6yyLhLAQABJ7LQALrMucOAAMAc0BUBYAO86Aa6koCjwADZ8cAA2hDAANpeAQCxsAFqwADZ8mADwAD9UQIAAAEDwADaH8AA2l4AAAAAAAAAYAO86AFKwADaKAE1AAAAAQBgA7zoARbAANooLrJEuEu5xCMcwADaOIAAwBzQrEgBAAErAMAA/V4XwADaKC6yRLhLHMAA2jwussi4SwEAASexsAC6zLnEgADAHNCsAWADvOgGupSAo8AA2mPAANpzwADaoQEAstG4SwAAAAEDwADagcAA2qEAAAAAAAAAYAO8wQFKwADahAEcwADahC6yWbhLAgACFsAA2o8usRm59Cey0gC6uwa6lYCjwADapcAA2rXAANrtAQCy07hLAAAAAQPAANrHwADa7QAAAAAAAABgA7zBAUrAANrKARzAANrKLrJZuEsCAAIWwADa1S6xGbn0J7LUALq7BrrNgKPAANrxwADa/cAA20sAALLVuEsAAAABA8AA2w/AANtLAAAAAQEBwADbFwAAAIC9YAPAAP3rAABgA7zlAUrAANsmASbAANsmARzAANsmLrJnuEsCAAIWwADbNy6y0bhLupSAwADbRsAc0dIAur1gA7zlBrqWgKPAANtrwADbh8AA274BALGxAWrAANtsYAPAAP1RAgAAAQPAANuSwADbvgAAAAAAAABgA7zlAUrAANuVATUAAAABAGADvOUBFsAA25UuskW4S7nFIxzAANuhgADAHNJeSAEAASsAwAD9XhfAANuVLrJFuEscwADbpS6y1bhLAQABJ7LWALrNucWAAMAc0l4BYAO85Qa6l4CjwADb3sAA2/rAANwxAQCxswFqwADb32ADwAD9UQIAAAEDwADcBcAA3DEAAAAAAAAAYAO85QFKwADcCAE1AAAAAQBgA7zlARbAANwILrJGuEu5xiMcwADcFIAAwBzS9UgBAAErAMAA/V4XwADcCC6yRrhLHMAA3BgustW4SwEAASey1wC6zbnGgADAHNL1AWADvOUG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ymADvMEAwAD3CQAAALHPYAPAAGpFAABgA7zBAT4CScAA9yAcwAD3NIHAAPckwBzoarL0AQABgMAA90XAHOhcAMAAalI+AUrAAPdTARbAAPdaLrFVujE/SsAA960BIxzAAPfEgcAA97TAHOhqsvUBAAGAwAD30sAc6FwAwABqTRbAAPfhLrFKuiYWwAD3/i6azLnaAWADvMEAABxRTQAcUe4AHFKPABxTMAAcU9EAHFRyABxVEwAcVbQAHFZVABxW9gAcV5cAHFg4ABxY2QAcWXoAHFobABxavAAcW3MAHFwUABxctAAcXVUAHF38ABxeoAAcX0QAHF/oABxgjAAcYTAAHGHUABxiewAcYyIAHGPDABxkZQAcZiQAHGbyABxnpwAcaEYAHGk1ABxp1AAcajcAHGqTABxq7wAca0sAHGunABxsAwAcbF8AHGy7ABxtFwAcbXMAHG3PABxuKwAcbocAHG9TABxwHwAccY0AHHJZABxzJQAcc/EAHHR6ABx1AwAcdXQAHHZBABx3NQAceAQAHHisABx5FgAceaAAHHsZABx74QAcfCsAHHyQABx9mQAcfqAAHH/XAByANgAcgJUAHID0AByBUwAcggoAHINBAByDoAAcg/8AHIReAByEvQAchYkAHIZmAByGzwAch0IAHIeVAByH6AAciDsAHIiOAByI4QAciVoAHInTAByKTAAcip8AHIryAByLawAci74AHIwRAByMZAAcjLcAHI0cAByNswAcjkoAHI7hAByPSgAcj70AHJBUAByQ6wAckYIAHJIZABySsAAck0cAHJPeAByUdQAclQwAHJWjAByWOgAcltEAHJdoAByX/wAcmJYAHJktAByZxAAcmlsAHJryABybiQAcnCAAHJzVABydbAAcnhAAHJ6xAByfZgAcoBoAHKCxAByhXgAcoywAHKPhAByklQAcpUkAHKXqABym2wAcp8wAHKg1AByoqAAcqREAHKmoAByqPwAcqwQAHKubABysKQAcrMAAHK1hAByuFgAcrsoAHK9hABywAgAcsJkAHLDsAByxSwAcsaoAHLIJAByyaAAcsrsAHLMOAByzYQAcs/gAHLShABy1OAActc8AHLZmABy2/QAct5QAHLgrABy4fgAcuNEAHLkkABy5dwAcucoAHLodABy6cAAcusMAHLsWABy7aQAcu7wAHLwPABy8YgAcvPkAHL1MABy+FQAcvt4AHL+nABy/+gAcwE0AHMCgABzA8wAcwUYAHMGZABzB7AAcwj8AHMKSABzC5QAcwzgAHMOLABzD3gAcxDEAHMSEABzE1wAcxSoAHMV9ABzF0AAcxiMAHMZ2ABzGyQAcxxwAHMedABzH8AAcyEMAHMj4ABzJSwAcyZ4AHMnxABzKkgAcyz4AHMvMABzMWgAczK0AHM0AABzNygAczjMAHM6mABzPPQAcz9QAHNBrABzRAgAc0VUAHNGoABzSHQAc0rQAHNNLABzT4gAc1JkAHNVQABzWBwAc1p4AHNc1ABzXzAAc2B8AHNhyABzYxQAc2RgAHNlrABzZvgAc2hEAHNpkABzatwAc2woAHNtdABzbsAAc3AMAHNxWABzc9wAc3ZgAHN30ABzelQAc30kAHN/pABzgowAc4V0AHOIXABzi0QAc5DYAHOSVABzk9AAc5W4AHOYDABzm9gAc6CgAHOj8AAABFgK69YCjwAD6I8AA+jLAAQ+mB6SSAAABYAHAAP1RAAAAAQW7GAAAAAAEAAADAAAAAAAAAAAAYAO69QE/AQkBAMAA/WcAAAAAHwa694CjwAD6fcAA+o/AAPqaAQKy9gAAAAEDwAD6msAA+poAAAAAAAAAYAO8sgAGuviAo8AA+tLAAPrlwAD68QECpPwAAAABA8AA+vHAAPrxAAAAAAAAAGADvOgABrr5gKPAAPsZwAD7NcAA+z4BAobZAAAAAQPAAPs+wAD7PgAAAAAAAABdA8AA/GcBYAO8sgAGuvyAo8AA+5DAAPuXwAD7vAACmV0AAAABA8AA+6XAAPu8AAAAAQEBwAD7tAAAAIRDYAO8sgAAYAPAAP3rAAa6/YCjwAD8KcAA/DfAAPxlAAKyWwAAAAEDwAD8RMAA/GUAAAACAQHAAPxJAAAAgKxgA8AA/mwAAcAA/FQAAACdUGADwAD6PwFqwAD8XmADwAD6PwBgA7yyAAa6/oCjwAD8ocAA/KbAAPziAAKk+QAAAAEDwAD8ssAA/OIAAAACAgLAAPzBAAAAhENgA7yyAMAA/M8AAACBpmEDAWADvMFcAABcAAa6/4CjwAD9RsAA/VLAAP2fAAKyZQAAAAEDwAD9XcAA/Z8AAAADAgLAAP1sAAAAhENgA7yyAMAA/XwAAACAvWADwAD96wABwAD9jgAAAJ1QYAPAAPo/AWrAAP2YYAPAAPo/AGADvMEABrsAgKPAAP3dwAD94sAA/ioAArL3AAAAAQPAAP32wAD+KgAAAAICAsAA/gUAAACEQ2ADvLIAwAD+EwAAAIGmYQMBYAO801wAAFwABrsBgKPAAP6PwAD+nMAA/wUAArJmAAAAAQPAAP6vwAD/BQAAAAQCAsAA/r4AAACEQ2ADvLIAwAD+zgAAAIC9YAPAAP3rAALAAP7gAAAAmw5gA8AA+j8BasAA/uhgA8AA+j8AwAD+9AAAAJ1QYAPAAPo/AWrAAP7+YAPAAPo/AGADvNMABrsCgKPAAP9mwAD/c8AA/9kAArJoAAAAAQPAAP+JwAD/2QAAAAQCAsAA/5YAAACZymADvMEAwAD/ogAAAIC9YAPAAP3rAALAAP+0AAAAmw5gA8AA+j8BasAA/7xgA8AA+j8AwAD/yAAAAJ1QYAPAAPo/AWrAAP/SYAPAAPo/AGADvNMABrsDgKPAAQBxwAEAfsABAc0AALL4AAAAAQPAAQCPwAEBzQAAAAMCAsABAJwAAACZymADvMEAwAEAqAAAAIC9YAPAAP3rAAHAAQC6AAAAmw5gA8AA+j8BasABAMJgA8AA+j8AYAO80wE+BU7AAQDUwAEA2wAApCRgA7zTARzAAQDdLrJoAwACgMABAPTAHPD8gcABAPnAHPEKAZsOgsABAQfAHPEbuwJJwAEBFCEcwAEBH4PAAQEYwBzxP0gBAAErAMAA/V5KwAEBKAGDwAEBL8Ac8T8/TsABAUDAAQFLAACE7GADvMEBHMABAU0usvkBAAGAwAEBW8Ac8PwAuwhJwAEBZRzAAQF0hMABAWnAHPGqSAEAASsAwAD9XkrAAQF9ASs/SsABAY8BHMABAZYusvgDAAKEwAEBqMAc8aqBwAEBtMAc8QoBmw6CwAEBwsAc8Ru7Awa7BICjwAECM8ABAkXAAQKSAAKhYgAAAAEDwAECVsABApIAAAADAgLAAQJjAAAAmcpgA7zBAMABAm8AAACAvWADwAD96wABwAECgQAAAJ1QYAPAAPo/AWrAAQKLYAPAAPo/AGADvQAABrsFgKPAAQLQwAEC1cABAxoAArL6AAAAAQPAAQLswAEDGgAAAAICAsABAvkAAACZymADvMEAwAEDAwAAAIGmYQMBYAO801wAAFwABrsGgKPAAQP7wAEEAMABBF0AArL7AAAAAQPAAQQSwAEEXQAAAAICAsABBCYAAACZymADvMEAwAEEMAAAAIGmYQMCYAO8wWADvNNcAABcAAa7B4CjwAEFCcABBQ7AAQVfAAKy/AAAAAEDwAEFIMABBV8AAAACAgLAAQU0AAAAmcpgA7zBAMABBT4AAACBpmEDAWADvQBcAABcAAa7CICjwAEHVcABB2HAAQexAAKy+QAAAAEDwAEHbsABB7EAAAACAQHAAQd7AAAAmcpgA7zBAAHAAQeMAAAAsv1gA8AA+j8BasABB6pgA8AA+j8AYAO8wQAGuwmAo8ABB+PAAQfowAEIKgACsv4AAAABA8ABB/jAAQgqAAAAAgICwAEIBQAAAJnKYAO8wQDAAQgPAAAAgaZhAwFgA8AAYo1cAABcAAa7CoCjwAEId8ABCIXAAQjOAAKyaQAAAAEDwAEImMABCM4AAAACAgLAAQisAAAAmcpgA7zBAMABCMAAAACFHV0DwAD8qQFgA8AAYmYAAGADwABijQAGuvqAo8ABCPXAAQkCwAEJDQECnm0AAAABA8ABCQ3AAQkNAAAAAAAAAGADwABiZgAGuwuAo8ABCYzAAQmawAEJtQACr1oAAAABA8ABCaTAAQm1AAAAAQEBwAEJsQAAAJnKYAO8wQAAYAPAAGKNAAa7DICjwAEKRsABClTAAQpwAAKy/wAAAAEDwAEKX8ABCnAAAAABAQHAAQpsAAAAmcpgA7zBAABgA8AAYo0ABrsNgKPAAQqfwAEKpMABCsMAArMAAAAAAQPAAQqywAEKwwAAAAEBAcABCr8AAACZymADvMEAAGADwAD6PwAGuw6Ao8ABCxHAAQsWwAELOQAChO8AAAABA8ABCyjAAQs5AAAAAQEBwAELNQAAAJnKYAO8wQAAYAPAAPo/AAa7D4CjwAELfcABC4LAAQusAAKzAQAAAAEDwAELm8ABC6wAAAABAQHAAQuoAAAAmcpgA7zBAABgA8AA+j8ABrsQgKPAAQwSwAEMG8ABDFAAArMCAAAAAQPAAQwvwAEMUAAAAAEBAcABDEMAAACo8GADvM0AAGADwABiZgAGuxGAo8ABDHvAAQyIwAEMsAACswMAAAABA8ABDJfAAQywAAAAAQEBwAEMpwAAAIJqYAO86AAAYAPAAGL5AAa7EoCjwAEM9sABDQ3AAQ0+AAKzBAAAAAEDwAENJcABDT4AAAABAQHAAQ01AAAAgmpgA7zoAABdA8AA/KkBYAPAAGK5AAa7E4CjwAENc8ABDYDAAQ2hAAKzBQAAAAEDwAENlMABDaEAAAABAQHAAQ2bAAAAns5gA70MAABgA8AAYvkABrsUgKPAAQ3JwAEN0sABDfEAArMGAAAAAQPAAQ3ewAEN8QAAAAEBAcABDesAAACElGADvOUAAGADwABiZgAGuxWAo8ABDyLAAQ8rwAEPSgACswcAAAABA8ABDzvAAQ9KAAAAAQEBwAEPRQAAAIKQYAPAAGJmAABgA8AAYmYABrsWgKPAAQ+DwAEPiMABD6QAArMIAAAAAQPAAQ+TwAEPpAAAAAEBAcABD6AAAACZymADvMEAAGADwAD6PwAAABztpQAc7dMAHO4BABzuNgAc7nQAHO7OABzvGQAc74EAHO/MABzwUAAc8NQAHPIoABzykAAc8tsAHPMqABzzdQAc880AHPQaABz0bwAc9J8AHPTdABz1GwAc9VkAHPWXABz11QAc9hMAHPZRABz2lgAc9tQAHPcSABz3UgAc95AAAAAfArsZgKPAAQ+pwAEPuMABE8kHswkAAAFgAbr1AAAAAQW7IwAAAAAEAAADAAAAAAAAAAAAYAO7GQE/AQkBALsYAAAAAAcGuxuAo8ABEEXAARBKwAEQggACswoAAAABA8ABEFbAARCCAAAAAgICwAEQYwAAAJnKYAO8wQDAARBtAAAAgaZhAwFgA7zBXAAAXAAGuxyAo8ABENTAARDnwAERFAACswsAAAABA8ABEQHAAREUAAAAAQEBwAERDgAAAISUYAO85QAAYAPAAE2yAAa7HYCjwAERhcABEYrAARG6AAKzDAAAAAEDwAERpcABEboAAAABAQHAARGzAAAAgmZgA7zTAABgA8AA+j8ABrsegKPAARHrwAESAsABEiMAArMNAAAAAQPAARIMwAESIwAAAAEBAcABEhsAAACEQ2ADvLIAAF0DwAD8ZwFgA7y3AAa7H4CjwAESZMABEnzAARKlAAKzDgAAAAEDwAESjsABEqUAAAABAQHAARKdAAAAhENgA7yyAABdA8AA/GcBYAPAAGDSAAa7IICjwAES4sABEvrAARMbAAKzDwAAAAEDwAETCsABExsAAAABAQHAARMXAAAAmcpgA7zBAABdA8AA/GcBYAPAAGDSAAa7IYCjwAETW8ABE3PAARPHAAKzEAAAAAEDwAEThMABE8cAAAACAQHAAROSAAAAgmZgA7zTAAHAAROmAAAAsxFgA8AA+j8BasABE8BgA8AA+j8AXQPAAPxnAWADwABg0gAAABz4WQAc+KQAHPjiABz5IAAc+WMAHPmoABz57QAc+k4AAAAHArskgKPAARPMwAET28ABIIgHsxIAAAFgAbr1AAAAAQW7MwAAAAAEAAADAAAAAAAAAAAAYAO7JAE/AQkBALsYAAAAAAwGuyaAo8ABFFfAARRcwAEUpAACsxMAAAABA8ABFHbAARSkAAAAAgICwAEUgwAAAJnKYAO8wQDAARSNAAAAgaZhAwFgA7zTXAAAXAAGuyeAo8ABFN7AARTjwAEVQAACsxQAAAABA8ABFPnAARVAAAAAAgICwAEVDQAAAJnKYAO8wQDAARUXAAAAgaZhAwFgA70HXAAAXAAGuyiAo8ABFXrAARV/wAEVzwACsxUAAAABA8ABFZPAARXPAAAAAgICwAEVqAAAAIJmYAO80wDAARW1AAAAgaZhAwFgA7zoXAAAXAAGuymAo8ABFjfAARY8wAEWZAACsxYAAAABA8ABFlPAARZkAAAAAQEBwAEWYAAAAJnKYAO8wQAAYAPAAPo/AAa7KoCjwAEYocABGK3AARjUAAKzFwAAAAEDwAEYw8ABGNQAAAABAQHAARjQAAAAmcpgA7zBAABgA7zBAAa7K4CjwAEZdsABGX/AARm6AAKzGAAAAAEDwAEZmcABGboAAAABAQHAARmtAAAAqPBgA7zNAABgA8AAYmYABrssgKPAARpWwAEaX8ABGqwAArMZAAAAAQPAARp8wAEarAAAAAICAsABGpAAAACZrmADvO8AwAEaoQAAAIU6YAPAAGJmAABgA8AAYmYABrstgKPAARuBwAEbisABG8gAArMaAAAAAQPAARuvwAEbyAAAAAEBAcABG78AAACCamADvOgAAGADwABiZgAGuy6Ao8ABHN/AARzkwAEdQQACsxsAAAABA8ABHPjAAR1BAAAAAgICwAEdDAAAAJnKYAO8wQDAAR0WAAAAgaZhAwJgA7zBYAO85VwAAFwABrsvgKPAAR5cwAEeYcABHqcAArMcAAAAAQPAAR57wAEepwAAAAICAsABHogAAACZymADvMEAwAEekgAAAIGmYQMBYAO85VwAAFwABrswgKPAAR9FwAEfSsABH8MAArMdAAAAAQPAAR9awAEfwwAAAAICAsABH3QAAAiCamADvOgAwAEfiQAAAIGmYQMDYAPAAGJmYAPAAP3rYAPAAGDSXAAAXAAGuzGAo8ABIBHAASAWwAEghgACsx4AAAABA8ABIC3AASCGAAAAAwMDwAEgPgAAALMfYAPAAGr/AMABIGQAAACCamADvOgAwAEgcwAAAIGmYQMBYAO9DFwAAFwAAAAc+rcAHPsCABz7TQAc+5gAHPvWABz8EgAc/FAAHPyeABz83AAc/SsAHP12ABz9zwAc/ioAAAAMAAABgKMAHP5lABwYLwAcPTAAHD85ABxEfgAc7V0AHPgVABz6cwAc/mMAAAAHABz+ZQAAAAAAAgS7NLMggKQAABCA8gAAwAC9zAABAQGfCYEYAABSDQCBWQAAo/sAAQEBpFyBhwAApDYAAIGdAAC4SwABAQOxEqSSswmB/QAApDkAAQEBpK2CIwAAwABgnwABAQWzIbMisyOzJLMlgugAAMAAYmEAAIMGAAC8rAAAgycAAMAAa5sAAQEBsyaDWwAAwABc7AAAg4YAAID7AACDnQAAwABnZwAAg7kAAMAATKoAAQEDsyekqLMohBoAAIHgAAEBAYQuhEMAAMAATScAAQEBpKsAAAAQArs3gKSGPYZDjCgDsykAAAFgAcAA/VEAAV0BwAD6SwFgA7s3AwS7OYCkhr2GyQmzKgBgA8AA+j8ABLs6gKSHD4cTCYC9AGADwAD96wAEuzyApId2h34Jsyu7NABdA8AA/ZwBYAO8twABBbtDgKSHg4eDh7oAAAADh42HugAAAAMDA4eTAAAEsypgA8AA+j8Ah6YAAASAvWADwAD96wCHsQAABLMrXQPAAP2cAWADvLcAAGADuzcBPwQIAbs5gADAHP/tCAG7OoEAwBz/+wgBuzyCAMAdAAkJAYeDwAD9ZwAAAAADBrs+gKSHv4fPi6oAAIJLAWqHwGADwAD9UQIAAAEDh9iLqgAAAAEBAYfkAAAgg9ZgA7s3AABgA8AA/AUBPgpJh/Eeh/XAAPXmAgACLoCIBcAdAHcASogNAZM/SYgbIhaIHy6zKrs5ACEWiDaAiDDAHQB3syq7OUqIRAEciEuUgcQAAAAAwAD8KD9JiFMiIRaIWC6zKrs5ABaIboCIaMAdAHezKrs5Soh8AZQ/ToiOiJMAAJiGYAPAAPwFARaInhaIlS6zK7s0uzxhwADMxU6Iroi4AACzLGADwAD8BQEWiMkWiMCAiLrAHQB3syu7NLs8YcAAzMVJiNUhHIjegYjZwB0A+0gBAAGCiOHAHQEdAMAA/ShKiOwBHIj4gYjzwB0A+4JLAQABgokCwB0BHQDAAP0pP06JFokeAACZd10DwAD8qQFgA7y3ARyJKRaJIC6zK7s0uzyArQAAAADAAPx9Tok7iUgAALMtXQPAAPypAWADvLcBHIlZFolQgIlKwB0Ad7MruzS7PICtAAAAAMAA/H1FiWcBiXCJcgAAYmADwAD8BQGTARyJeYWJd8AdAeRjAQABgYl7wB0A+wDAAP0yAY2JgcAdAeQciYKFiYHAHQHkZAEAAZQAwAD9KkE+BUmJjhyJnRyJmYOJksAdAYNLAQABhYmawB0B5ADAAPy4SAEAARyJrISJoMAdAa9LAQABhYmtwB0B5ADAAPy4AMAA/V5CibEAP06JxYnHAACB1WADwAD96wEWidgWidQcidCDicnAHQGDSwEAAYWJ0cAdAeQAwAD8uICsvLxOwAD+d06J6InqAACCSmADwAD96wEWigAWifwcifiEiezAHQGvSwEAAYWJ+cAdAeQAwAD8uICsvLxOwAD+d06KEIoUAACzLmADwAD8BQEcihiGihbAHQJ2gksBAAGHiiLAHQKvAMAA/ftJiiwhHIo0FIowwB0C6AgASAEAAZMAwAD9KEqKOgEUikHAHQLoCAA/SouFARyLkRaLjC6Avbs6gksBAAEWi6GAi5vAHQB3gL27OgDAAP37BrtBgKSLr4vFi+IBALMvAAAAAQOL14viAAAAAAAAAF0DwAD9nAFgA7y3AUqL2gEWi9ousyu7NLs8Brs/gKSL54v6jCYAACMBaovoYAPAAP1RAgAAAQOMAowmAAAAAAAAAGADwAD96wFKjAgBJIwmBSezMBaMFS6Avbs6J4GLFowcLrMruzS7PCeDIQAAHQBPAB0DYQAdA5oAHQPsAAAAAwK7RICkjOSM88AAmFoHpJMAAAFgAaP8AAAMBLtHgKSNoI2vGLMxuzQAYAO7NwErBLtIgKSOKY5RCbMyuzQAXQPAAPypAWADuzcBHo4/wAD3owEBYAO7NwGTAAS7T4CkjpyOshilAABgA8AA+j8BKgS7UICkjtKPAwazMwBgA8AATQQBao7lYAPAAE0EwADwHgS7SYCkj4ePsgmzNbs0AF0DwAD82gJgA7y3YAPAAP3rATKPsGADvLdgA8AA/esABLtKgKSQBZA0GLM2uzQAXQPAAPzaAmADvMFgA7ueAR6QF8AA/OEAAmADvMFgA7ueAAAEu0uApJCIkL8Ysze7NABdA8AA/NoCYAO802ADu54BHpChwAD84QACYAO802ADu54AAAS7TICkkRSRRRizOLs0AF0DwAD82gJgA70MYAO7ngEekS7AAPzhAAJgA70MYAO7ngAABLtNgKSRnJHWGLM5uzQAXQPAAPzaAmADwABg0mADu54BHpG3wAD84QACYAPAAGDSYAO7ngAABLtOgKSS25MiCbM6uzQAXQPAAPzaAmADvLdgA7uBATKTIGADvLdgA7uBAAS7UYCkk4KTpQmzOwBgA7uQAR+Tk7udAAAAAAS7UoCkk7mTwQmClgBgA6Q8AAEFu4CApJS9lL2VogAAAAOUzZWiAAAAAQEBlNMAAASClmADpDwAAGADu0QBPgM9F5T+LrMxuzQflRS7QwMAAykngecelTHAAMEXAAFgA7y3AAAAu0c9F5VeFpVWFpVLLrM7u1GzPLuWsz0WlWUuszG7NLtHu6M9HJWKFpV6LrMyuzS7SFYBAAEWlY4uszG7NLtHAMAA/LoCCAG7UoAAwB0F/gkAlN+kHAEAARaU7oCU5cAdBf6WcKRiACgGu1SApI0djTSNTgEAgL0Bao0eYAPAAP1RAgAAAQONOY1OAAAAAAAAAGADwAD96wFKjTwBJ7M+BrtWgKSR25H2kjMBALM/uzQAAAABA5IKkjMAAAAAAAAAXQPAAPxnAWADvLcBSpITARaSLxaSEy6zOrs0u06DYsAA/PwGu1eApJPGk8+UCgEAgqQAAAABA5PjlAoAAAAAAAAAYAPAAPo/AUqT5gEWk/cWk+8Wk+Yugpa7UnqkSIKkgSwGu1iApJQOlBeUTAEAgtcAAAABA5QolEwAAAAAAAAAYAPAAPo/AUqUKwEWlDwWlDQWlCsugpa7UnqkSILXgSkGu1mApJRQlFmUuAEAgtgAAAABA5R8lLgAAAAAAAAAYAPAAPo/AUqUhQEWlJYWlI4WlIUugpa7UnqkSILYgSoGu1qApJWnlb+WBwEApPgAAAABA5XSlgcAAAAAAAAAYAO7GQFKldsBJpXbARaV9RaV5BaV2y6ClrtSpK6kPqT4vblgA7sZBrtbgKSWDJYfllkBALNAAAAAAQOWLpZZAAAAAAAAAGADuEwBSpYxARaWSxaWOhaWMS6ClrtSpK6kPrNAvboGu1yApJZelnWWkgEApM0AAAABA5Z+lpIAAAAAAAAAYAO1owFKloEBFpaKFpaBLoKWu1KkzaRlBrtfgKSXEpcemRsAAbNBuzQAAAABA5czmRsAAAABAQGXSwAAAJl3XQPAAPxnAWADvLcAAGADwAD6PwE+AkmXuxaXx4CXv8AdCLKBVcAA/ItKl9ABKj9KmNcBHJjmgJjewB0IspY2AQABNJjsA5jsmRYAAAABAQGY+gAAAISoYAO8twAAYAPAAPo/AUqZBQEWmQyBmQXAHQkJhK+8uwDAAPx6BrtzgKSZapmBmcIAArNCAAAAAQOZj5nCAAAAAgICmaMAAACWJmADvMEAmboAAACEQ2ADvLIAAF0DwAD8ZwFgA7y3AAa7dICkmhGaKJprAAKzQwAAAAEDmjeaawAAAAICAppMAAAAliZgA7zTAJpjAAAAhENgA7yyAABdA8AA/GcBYAO8twAGu3WApJq6mtGbFgACs0QAAAABA5rhmxYAAAACAgKa9wAAAJYmYAO8yACbDgAAAIRDYAO8sgAAXQPAAPxnAWADvLcABrtggKSby5vQnYQAALNFuzQAAAABA5vwnYQAAAADAwOb/gAAAKTfYAPAAE1tAJweAAAAliZgA7zTAJw0AAAAgM9gA7wFAABcAT4DSZy1IRyc2hacwxacui6ClrtSpNOkarNGAQABgZznwB0KKwDAAEwnPgFKnPkAPz0cnQsus0e7NAMAA4CdKsAdCh2BnTfAHQorgp1AwB0KNwC7ZT0cnVMus0gCAAKBnWrAHQorgp1zwB0KNwC7dwa7YYCknjSeOaGyAACzSbs0AAAAAQOeaaGyAAAAAwMDnn4AAACk32ADwABNbQCenQAAAJYmYAO8wQCeuQAAAIDPYAO8BQAAXAE+BU+fhp+LAAABs0phAwFgA7zTXAADn6CgogAAAAEBAZ+uAAAAgmZgA7zTAABcAT4ESZ++IRyf4xafzBafwy6ClrtSpNOkarNGAQABhJ/wwB0LHgDAAEwnSp/5AD9JoAchFqAThKAMwB0LHoUCvNhKoCUAPz0coECCoDPAHQrvhJABAAGEoErAHQseALwNPRygWS6zRbs0AwADgKB6wB0K1YSgh8AdCx6CoI/AHQrvALtgTqC1oLkAAJnKYAO8wQGBoLvAHQrjPRyg2xagyC6k+LtasvoCAAKEoPPAHQuxg6D4wB0LAwC7BT0coScWoRQupPi7WrL+AgAChKE4wB0LsTShPQOhPaGNAAAAAQEBoUwAAACCkGADwABijQAAYAPAAP0OAT4BPRyhWi6zS7s0AgAChaFzwB0MDYKhecAdCu8Au2MAuwk9HKGhgqGUwB0K74SRAQABhKGqwB0LsQC8DAa7YoCkomKiZ6ZkAACzTLs0AAAAAQOimKZkAAAAAwMDoq0AAACk32ADwABNbQCizQAAAJYmYAO80wCi6QAAAIDPYAO8BQAAXAE+A0mi/SWjCYGjAcAdDI1gA7zoPgE9HKMkLrNLuzQCAAIco1sWo0gupPi7WrMDAQABFKNrwB0MjQEBYAO86AC7EYKjdcAdDJkAu2M/SaOOIiIWo5qBo5LAHQyNhBm81wEWo66Bo6bAHQyNh4G81gEWo8SBo7zAHQyNh4C82T4CPRyj6IKj28AdDJmEkAEAAYGj8sAdDI0AvA09HKQCLrNFuzQDAAOApCPAHQx/gaQwwB0MjYKkOcAdDJkAu2A/SaRSIiWkXoGkVsAdDI1gA70AABakfhSkdsAdDI0BAWADvQCzTb0CPgJOpWSlaAAAmcpgA7zBARalchSlasAdDI0BAWADvQCE/7zhPRyliC6zSbs0AwADgKXEwB0Mf4Ol0cAdDZCCpdbAHQyZALthPwa7doCkpxinHaduAAKzTgAAAAEDpzmnbgAAAAICAqdIAAAAliZgA7ytAKdkAAAAmTRdA8AA/ZwBYAPAAGDSAABcAAa7d4Ckp76nw6gKAAKzSAAAAAEDp9moCgAAAAICAqfnAAAAliZgA7zTAKf9AAAAgM9gA7wFAABcAAa7Y4CkqEqoT6kEAACzS7s0AAAAAQOoZ6kEAAAAAwIDqHEAAACCkGADwABiZgCohAAAAIDPYAO8BQCopgAAAISoYAO8twFqAGADwAD9DnkAXAE+AT0cqPUfqLm8KwMAA4Goz8AdDn+CqN3AHQ6LFqjlLrNAu1sAmo8BAAGAqPvAHQ5xALwgBrtkgKSpCakOqiIAALNPuzQAAAABA6kuqiIAAAADAgOpSQAAAIUdXQPAAPxnAWADwABiZgCpZQAAAIDPYAO8BQCphwAAAISoYAO8twFqAGADwAD9DnkAXAE+AkmplhypqICpmsAdDvdIAQABKwDAAP1eSqmxAD89HKoGH6nBvCsDAAOBqdfAHQ8MgqnlwB0PGBap7S6zQLtbAIczAQABJqoQAYCqEMAdDvddA8AA/KkBYAPAAGJmALwhBrtlgKSqc6p4uxMAALNHuzQAAAABA6qWuxMAAAADAwOqpAAAAKTfYAPAAE1tAKrEAAAAliZgA7zTAKraAAAAgM9gA7wFAABcAT4CTqr6qwYAALNQYAPAAEytARyrHBarERarCC6ClrtSpNCkZksBAAGBqx3AHQ+/AMAA/O49HKtDFqs0FqsrLoKWu1Kks6RHs1EEAASBq1jAHQ+/g6tpwB0P3R+rgsAATSYDAAADr0A0q7YDq7aynAAAAAICAqvEAAAAgmZgA7zTAKvWAAAAr1xgA8AAZ6cAAGADwAD9DgE+A06r9Kv/AACzUmADvK0BFqwLhawBwB0QW5YmwABnqkmsHiWsLYasIsAdEHRgA7zTPgE9HKxZgqxMwB0Py4SQAgACFKxjwB0QdAYBYAO80xaseYWsb8AdEFuEp8AAZ68AvA0+BEAlrLuGrLDAHRB0YAPAAGwlrLCszAEerN61wwIAAoas58AdEHQkrRYDJ7NTha0LwB0QWyeBagBOrTWtQwAAs1RgA8AAbCUBJq01AYatRcAdEHRgA8AAbCU9HK2rLrNLuzQCAAIWrdKHrcTAHREOhTvAAGwrgq3gwB0PywC7Yz0crhcWrgiCrfvAHQ/Ls1W8CVYBAAGHrhvAHREOAMAA/alBR65BFq5Tha5JwB0QW4JnwABnqwMCrnpqrnpgA8AAZ4nAAPAwrq1qrq1gA8AAZ4nAAPBKAD4CPRywii6zT7s0AgACFrDNFrDIhbC+wB0QW4KQwABnrYUdwABikIKw3MAdD8sAu2RCsPkAA7EfarEfYAPAAGeJwADwZLFNarFNYAPAAGeJwADwfrF6arF6YAPAAGeJwADwlgA+Aj0csgEus0+7NAIAAhayP4WyNcAdEFuFHcAAZ7GCsk7AHQ/LALtkQrJrAAABPgCvQjSyrAOyrLnYAAAAAgICsroAAACCZmADvNMAssoAAACvYGADwABn8AAAYAPAAP0OAT4CTrLosu0AAIKQYAPAAGJmARay94Wy78AdEluCkMAAZ/NBR7MHFrMXhbMPwB0SW4JnwABn9AcBszxqszxgA8AAZ9vAAPCuAD4CSbNYFrNhhrNcwB0SdLNcwABibT4CTrOSs5wAAJ0/YAPAAGKNASazkgGGs57AHRJ0YAPAAGKNPRyzwYKztMAdD8uEkQIAAhaz6Yez38AdEtGWJsAAYo8Ws/qFs/LAHRJbhKfAAGf2ALwMP0K0KQABtE1qtE1gA8AAZ9vAAPDFAD4CPRy0cC6zS7s0AwADhrScwB0SdIK0osAdD8sWtLiFtLDAHRJbhKfAAGf2ALtjQrTXAAS0+2q0+2ADwABn28AA8N21J2q1J2ADwABn28AA8PW1Wmq1WmADwABn28AA8Q21gWq1gWADwABn28AA8SQAPgI9HLWbLrNLuzQCAAKGtbTAHRJ0grW6wB0PywC7Y0K11wABtftqtftgA8AAZ9vAAPE7AD4CSbYSFrZ8HLZFFrYigLYWwB0PsaUNwABNf7NjAQABgbZgwB0PvwDAAG5ggxyBaj4BPRy2mS6zS7s0AgAChraywB0SdIK2uMAdD8sAu2M/QrblAAG3CWq3CWADwABn28AA8VIAPgJJtyYWt5Qct1kWtzaAtyrAHQ+xpQ3AAE1/s2UBAAGBt3jAHQ+/AMAAbl6DHIFqPgE9HLexLrNLuzQCAAKGt8rAHRJ0grfQwB0PywC7Yz9Ct/0AAbgharghYAPAAGfbwADxagA+Akm4QBa4pxy4cxa4UIC4RMAdD7GlDcAATX+zZwEAAYG4i8AdD78AwABuXYMcgWo+AT0cuMQus0u7NAIAAoa43cAdEnSCuOPAHQ/LALtjP0K5EAACuTRquTRgA8AAZ9vAAPGCuVxquVxgA8AAZ9vAAPGaAD4CPR65ebXDAgACgbmCwB0PvyS5qwMns2qFuaLAHRJbJ4FqAEK5vACvQTS56wO567roAAAAAgICufkAAACCZmADvNMAugwAAACvXmADwABndQAAYAPAAP0OAT4BPRy6hi6zT7s0AgACFrrBhbq2wB0VYYUdwABnhYK60MAdD8sAu2RquwRgA8AATQTAAPAeAMAATQ0Gu2aApLxEvEnAAELMAACza7s0AAAAAQO8YcAAQswAAAAFBQW8dgAAAKTfYAPAAE1tALyXAAAAhgVgA8AAYNIAvLEAAACzbGADu54AvMkAAACXImADu54AvOEAAACzbWADu6wAAFwBPgVJvO4cvPuBvPLAHRXjSAEAASsAwAD9Xkq9BAA/Tr0UvR8AALNuYAO7ngEcvS8WvSEuszm7NLtNSwEAAYG9MMAdFeMAwAD87km9WBy9Z4W9XMAdFjdIAQABg71qwB0V/QDAAP1eSr1yAD9JvbwcvcuFvcDAHRY3SAEAARa92Ra9zi6zO7tRszy7lgDAAP1eSr3iAD9Jve8cvf6FvfPAHRY3SAEAAYK+AcAdFfEAwAD9Xj4EPRy+Hxa+ES6zObs0u02AvwIAAoG+IMAdFeODvizAHRX9AMAA/O9JvjolvkeBvj7AHRXjYAPAAGIjPgJOvnq+fgAAmcpgA7zBARa+jha+iRS+gMAdFeMBAWADwABiI4KQwABhm5YmwABijz0cvp8us2+7NAUABYC+tcAdFdWGvsLAHRcIgr7HwB0V8YO+z8AdFf2EvtfAHRYJALtnP0m+7SW++oG+8cAdFeNgA8AAYjQ+AUa/I79RvzEAAACCkGADwABiZgAWv0IUvznAHRXjAQFgA8AAYjSFHcAAYjY+AUm/XSW/Zoa/YcAdF4NgA8AAYo0+AT0cv4Yus2+7NAUABYC/rcAdFdUWv78Uv7rAHReDBgFgA8AAYo2WJsAAYo+Cv8jAHRXxg7/QwB0V/YS/2MAdFgkAu2c/Pz0cwABAHxzAAEANgcAAQATAHRXjs3AAAAAAwABg8IP4AQABNMAAQCcDwABAJ8AAQTAAAAABAQHAAEA2AAAAhLpgA8AAYNIAAGADwAD9DgE+AT0cwABA0i6za7s0BQAFgMAAQPjAHRXVhsAAQQXAHRg8gsAAQRHAHRXxg8AAQRnAHRX9hMAAQSHAHRYJALtmAMAA/Hc+AkAiIRzAAEGtg8AAQabAHRX9SAEAARbAAEG7FsAAQbAuszu7UbM8u5YAwAD9XgEhHMAAQc2CwABBxsAdFfFIAQABKwDAAP1ewABBpsAAQdQBHsAAQeC1wwIAAmrAAEH4YAO11cAAxOkkAAYns3EcwABCOYHAAEIwwB0V46bUAAAAAMAAYPIns3Ins3OFwABCicAdFjcngWoAPRzAAEKlhMAAQp/AHRYJqooCAAKBwABCscAdFeODwABCu8AdFf0Au7oGu2eApMAAQtHAAELWwABG0AAAs2+7NAAAAAEDwABC68AARtAAAAAFBQXAAEL5AAAApN9gA8AATW0AwABDEgAAAJYmYAO8wQDAAEMrAAAAs2xgA7ueAMAAQz0AAACXImADu54AwABDTwAAALNtYAO7rAAAXAE+BUnAAENcHMAAQ2iBwABDYMAdGZZIAQABKwDAAP1eSsAAQ3EAP07AAEOIwABDkwAAs25gA7ueARzAAEOgFsAAQ5Uusza7NLtKSwEAAYHAAEOhwB0ZlgDAAPzuScAAREIcwABEUYXAAERGwB0Z+EgBAAGDwABEVMAdGbIAwAD9XkrAAERcAD9JwABEphzAAES1hcAARKrAHRn4SAEAARbAAETDFsAARLguszu7UbM8u5YAwAD9XkrAAETMAD9JwABE2RzAAETohcAARN3AHRn4SAEAAYLAAETrwB0ZpADAAP1ePgU9HMAARUgWwABFPS6zNrs0u0qAvwIAAoHAAEVJwB0ZloPAAEVUwB0ZsgDAAPzvTsAARXDAAEV9AACAz2ADvAUBH8AARYO8EAAAAAA9HMAARZkus0m7NAMAA4DAAEXVwB0ZhoHAAEXiwB0ZlobAAEXrwB0a5AC7YU7AAEYOwABGFgAAhENgA7yyARbAAEYggcAARhjAHRmWhEO8wz0cwABGLy6zdLs0BwAHgMAARk/AHRmGh8AARlzAHRsthsAARmXAHRrkgsAARnPAHRmkg8AARnvAHRmyhMAARoPAHRnAgcAARorAHRmWALtvPgE9HMAARq2EwABGp8AdGcCEkQIAAoHAAEa2wB0ZloPAAEa/wB0ZsgC7uAa7aICkwABG1cAARtrAAErbAACzdbs0AAAAAQPAAEbwwABK2wAAAAUFBcAARv4AAACk32ADwABNbQDAAEcYAAAAliZgA7zTAMAARzEAAACzbGADu54AwABHQwAAAJciYAO7ngDAAEdVAAAAs21gA7usAABcAT4FScAAR2IcwABHboHAAEdmwB0cBUgBAAErAMAA/V5KwABHdwA/TsAAR47AAEeZAACzbmADu54BHMAAR6cWwABHmy6zN7s0u0tLAQABgcAAR6jAHRwFAMAA/O5JwABISRzAAEhYhcAASE3AHRxnSAEAAYPAAEhbwB0cIQDAAP1eSsAASGMAP0nAAEitHMAASLyFwABIscAdHGdIAQABFsAASMoWwABIvy6zO7tRszy7lgDAAP1eSsAASNMAP0nAAEjgHMAASO+FwABI5MAdHGdIAQABgsAASPLAHRwTAMAA/V4+BT0cwABJUBbAAElELrM3uzS7S4C/AgACgcAASVHAHRwFg8AASVzAHRwhAMAA/O9OwABJeMAASYUAAIDPYAO8BQEfwABJi7wQAAAAAD0cwABJoS6zTLs0AwADgMAASd7AHRv1gcAASevAHRwFhsAASfTAHR1TALtiTsAAShjAAEogAACEQ2ADvLIBFsAASiqBwABKIsAdHAWEQ7ziPRzAAEo5LrN0uzQHAAeAwABKWcAdG/WHwABKZsAdHZyGwABKb8AdHVOCwABKfcAdHBODwABKhcAdHCGEwABKjcAdHC+BwABKlMAdHAUAu28+AT0cwABKt4TAAEqxwB0cL4SQAgACgcAASsHAHRwFg8AASsrAHRwhALu5BrtpgKTAAErgwABK5cAATWEAALN2uzQAAAABA8AASvnAAE1hAAAAAwMDwABLBwAAALNUYAO9DADAAEsgAAAAs2xgA7ueAMAASzIAAACXImADu54AAFwBPgROwABLSsAAS1UAALNuYAO7ngEcwABLahbAAEtXLrM4uzS7TEsBAAGAwABLa8AdHmQAwAD87knAAEt/HMAAS46DwABLg8AdHpRIAQABgsAAS5HAHR6AAMAA/V5KwABLmQA/ScAAS+McwABL8oPAAEvnwB0elEgBAAEWwABMABbAAEv1LrM7u1GzPLuWAMAA/V5KwABMCQA/ScAATBYcwABMJYPAAEwawB0elEgBAAGBwABMKMAdHnIAwAD9Xj4BPRzAAExLFsAATDguszi7NLtMgL8CAAKAwABMTMAdHmSCwABMXcAdHoAAwAD87z4BPRzAAEyLFsAATHguszi7NLtMgL8CAAKAwABMjMAdHmQcwABMqBbAAEydLrM7u1GXAgIAAoPAAEyuwB0elILAAEy6wB0egAC7mQDAAPzvBrtqgKTAAE8AwABPAMAAT0QAALN3uzQAAAABA8AATxzAAE9EAAAAAQEBwABPJwAAAJciYAO7ngAAWwFKwABPMgEcwABPQBbAAE85gMAATzLAHR/5YbulgWsBAAGUAMAA/TMGu2uApMAAT0nAAE9OwABRoQAAs3i7NAAAAAEDwABPYMAAUaEAAAAFBQXAAE9wAAAAgVRgA7wRAMAAT4kAAACZd10DwAD8qQFgA7y3AMAAT58AAACDJGADwAD96wDAAE+uAAAAgL1gA8AA/esAwABPvgAAAIJTYAO11QAAXAE+Ak7AAE/RwABP3AAAhK9gA8AA+j8BHsAAT967XwEAAYHAAE/0wB0gaQBJwABQAoXAAFAGwB0gsj4CScAAUBohFsAAUB8ugte7WD4CPRfAAFBAgMAAUDvAHSBbhK8pvBM9F8AAUGCAwABQW8AdIFuZd4HAAFBqwB0gabwUP0nAAFCBFsAAUIUugti7WT4BPRzAAFC8FsAAULMupM27XK7bAwADhMAAUM/AHSCeasAAUORgA6TqwADFLzLAAFDtW1sBJ4GwJAAFgsAAUQPAHSB+J6R9g8AAUQzAHSCOJ7N5J7N6ALWrPz8Gu2yApMAAVGXAAFRqwABVuQAAs3u7NAAAAAEDwABUgcAAVbkAAAAEBATAAFSRAAAAgVRgA7wRAMAAVKMAAACZymADvMEAwABUvAAAAIRDYAO8sgDAAFTPAAAAglNgA7XVAABcAT4EScAAVN4WwABU54DAAFTiwB0hwISvvBNKwABU8wA/ScAAVP8iFsAAVQMugte7WAAhFsAAVRgugti7WUrAAFU8AD9OwABVTMAAVVQAAJl3XQPAAPxnAWADvLcBHMAAVVYus0ICAAKBwABVZcAdIc6CwABVasAdIdwAu3M9HMAAVXgus3i7NAUABYDAAFWLwB0hwCbAAFWRAYTAAFWRwB0iP10DwAD8qQFgA7y3J4TQFsAAVaeBwABVo8AdIc6Avbyvg8AAVa3AHSHqALtrBrttgKTAAFW+wABVw8AAVvsAALN8uzQAAAABA8AAVdvAAFb7AAAABAQEwABV6wAAAIFUYAO8EQDAAFX+AAAAgmZgA7zTAMAAVhoAAACEQ2ADvLIAwABWLQAAAIJTYAO11QAAXAE+A0nAAFY8IhbAAFZFgMAAVkDAHSLzhK+8EwEWwABWZBbAAFZcFsAAVlMugpa7UnqkSILXgSlKwABWdgA/TsAAVobAAFaOAACZd10DwAD8ZwFgA7y3ARzAAFaQLrNDAgACgcAAVqDAHSMBgsAAVqjAHSMPALt0PRzAAFa2LrN4uzQFAAWAwABWycAdIvMmwABWzwGEwABWz8AdI2xdA8AA/KkBYAO8tyeE/RbAAFbpgcAAVuLAHSMBgL28r4PAAFbvwB0jHQC7awa7boCkwABXAMAAVwXAAFm8AACzfbs0AAAAAQPAAFcfwABZvAAAAAQEBMAAVy8AAACBVGADvBEAwABXQwAAAIYFYAPAAGDSAMAAV2EAAACEQ2ADvLIAwABXdAAAAIJTYAO11QAAXAE+AknAAFeDIhbAAFeMgMAAV4fAHSQghK+8EwEWwABXqxbAAFejFsAAV5ougpa7UnqkSILXgSlKwABXvQA/ScAAV8klwABX1oHAAFfNwB0kLmADwABhpD4CTsAAV/jAAFf9AACCkGADwABiZgEWwABYCBTAAFf/wB0kLgEBYAPAAGGks37AAGGmScAAWB8lwABYKITAAFgjwB0ktmADwABijT4CTsAAWEjAAFhQAACZd10DwAD8ZwFgA7y3ARzAAFhSLrNCAgACFsAAWGYUwABYYcAdJLYEAWADwABijZYmwABij4LAAFhvwB0kPgC7cz0cwABYgS6zeLs0BQAFgMAAWKHAHSQgJsAAWKcBhcAAWKfAHSUBXQPAAPypAWADvLcns38WwABY1RbAAFjNFMAAWMjAHSS2BAFgA8AAYo2WJsAAYo+Avbyvg8AAWNvAHSRMALtrScAAWPIlwABY+4TAAFj2wB0ktmADwABioz4CTsAAWRnAAFkhAACZd10DwAD8ZwFgA7y3ARzAAFkjLrNEAgACFsAAWTkUwABZNMAdJLYEAWADwABio5YmwABipYLAAFlCwB0kPgC7dT0cwABZVC6zeLs0BQAFgMAAWXTAHSQgJsAAWXoBhcAAWXrAHSXNXQPAAPypAWADvLcns4AWwABZnBbAAFmUFMAAWY/AHSS2BAFgA8AAYqOWJsAAYqWAvbyvg8AAWaLAHSRMALtrPz8Gu2+ApMAAWcHAAFnGwABg5gAAs3S7NAAAAAEDwABZ2sAAYOYAAAAHBwfAAFnvAAAApN9gA8AATW0AwABaEAAAAIRDYAO8sgDAAFosAAAAgM9gA7wFAMAAWkoAAACzbGADu54AwABaYgAAAJciYAO7ngDAAFp6AAAAs21gA7usAMAAWpEAAACCU2ADtdUAAFwBPgQ9HMAAWrUWwABarYLAAFqgwB0mx4SDvAeD+AEAATTAAFq9A8AAWr3AAFxyAAAAAgICwABaygAAAJnKYAO8wQDAAFreAAAAgVRgA7wRAABgA8AA/Q4BPgI9HMAAWuwus3u7NAQABBTAAFsEwB0nUQgAh8AAWwrAHSdDgcAAWw/AHSa5hsAAWxjAHSb/ALtsScAAWygWwABbMRTAAFsswB0nUQgAhK+8Ez4BScAAW0cmwABbSwEcwABbSy6zd7s0AQABhMAAW2jAHSbjALtqYAPAAPo/PgFGwABbfcAAW6/AAFuPAAAAhKdgA7y3ABbAAFumFMAAW6HAHSdRCACZd7wUPgE9HMAAW8OFwABbvcAdJvGEkQIAAofAAFvMwB0nQxzAAFvcFsAAW9Euszu7UbOBAQABFMAAW+bAHSfwCQAAu5gAu7g/PgE9HMAAXCUus2+7NAUABYDAAFw7wB0mqYfAAFxIwB0nQ4PAAFxNwB0m1YTAAFxVwB0m44XAAFxdwB0m8QC7ZwDAAPz5PRzAAFyPFsAAXIeCwABcesAdJseEjrwIg/gBAAE0wABclwPAAFyXwABeXAAAAAICAsAAXKUAAACCZmADvNMAwABcvAAAAIFUYAO8EQAAYAPAAP0OAT4CPRzAAFzKLrN8uzQEAAQUwABc48AdKNsIAIfAAFzpwB0ozYHAAFzxwB0muYbAAFz6wB0m/wC7bUnAAF0KFsAAXRMUwABdDsAdKNsIAISvvBM+AUnAAF0pJsAAXS0BHMAAXS0us3e7NAEAAYTAAF1KwB0m4wC7amADwAD6Pz4BRsAAXV/AAF2RwABdcQAAAISnYAO8twAWwABdiBTAAF2DwB0o2wgAmXe8FD4BPRzAAF2lhcAAXZ/AHSbxhJACAAKHwABdr8AdKM0cwABdwhbAAF23LrM7u1GzgQEAARTAAF3MwB0pegkAALuYALu5Pz4BPRzAAF4LLrN1uzQFAAWAwABeIsAdJqmHwABeL8AdKM2DwABeN8AdJtWEwABeP8AdJuOFwABeR8AdJvEAu2gAwAD8+UbAAF5kwABencAAXm8AAACzVGADvQwAFsAAXo2CwABegMAdJsezVbwJPgE9HMAAXqUus3a7NAMAA4fAAF66wB0qL4PAAF7JwB0m1YTAAF7RwB0m4wC7aT0cwABfBRbAAF7ygsAAXuXAHSbHmTS8CoP4AQABNMAAXw0DwABfDcAAYOEAAAACAgLAAF8cAAAAhgVgA8AAYNIAwABfNQAAAIFUYAO8EQAAYAPAAP0OAT4CPRzAAF9DLrN9uzQEAAQUwABfXsAdKr4IAIfAAF9kwB0qroHAAF9uwB0muYbAAF93wB0m/wC7bknAAF+HFsAAX5AUwABfi8AdKr4IAISvvBM+AUnAAF+mJsAAX6oBHMAAX6ous3e7NAEAAYTAAF/HwB0m4wC7amADwAD6Pz4BRsAAX9zAAGAOwABf7gAAAISnYAO8twAWwABgBRTAAGAAwB0qvggAmXe8FD4BPRzAAGAihcAAYBzAHSbxqooCAAKHwABgLsAdKq4cwABgQxbAAGA4LrM7u1GzgQEAARTAAGBNwB0rXQkAALuYALu6Pz4BPRzAAGCMLrNruzQFAAWAwABgpcAdJqmHwABgssAdKq6DwABgvMAdJtWEwABgxMAdJuOFwABgzMAdJvEAu2YAwAD8+Qa7cICkwABhMsAAYTfAAGQCAACzgrs0AAAAAQPAAGFJwABkAgAAAAAAAABcAT4HTsAAYVbAAGFeAACEMWADwAD8BQGUT8AAYWfAAGFsAAABs4NhAwFgA7ueXAADwABhc8AAYnwAAAABAQHAAGF+AAAAs4RgA7ueAABcAT4FScAAYZEhHMAAYaQWwABhn4LAAGGVwB0sc7M9u6NIAQABKwDAAP1eSsAAYa0AP07AAGG/wABhxAAAsz1gA7s3AR/AAGHKu0MDAAMqJMAAYeYBgMAAYd7AHSw5HMAAYh8cwABiBRbAAGH8gsAAYfLAHSxzsyu7NLuhgKsBAWADvLcBNMAAYgkDwABiCcAAYh0AAAABAQHAAGIKAAAAYmADu4oAAGADvLcBSsAAYhABFsAAYhKDwABiEMAdLRuepbuMAMAA/HKVGQAAAADAAPx+AD2IwABiL8AdLDkcwABiNoDAAGIvwB0sOWQBAAGUAMAA/So9F8AAYkqCwABiQMAdLHOzPYPAAGJRwB0stbujPRzAAGJtFsAAYl0uszK7NLtIVgEAAYPAAGJxwB0stQDAAPy6PRzAAGMBFsAAYvoWwABi7i6zNrs0u0opwAD8/YP4AQABgcAAYwnAHSxSAMAA/Hc9HMAAYysWwABjJBbAAGMXLrM3uzS7SynAAPz9g/gBAAGBwABjM8AdLFIAwAD8dz0cwABjXBbAAGNVFsAAY0Euszi7NLtMKcAA/P2D+AEAAYHAAGNkwB0sUgDAAPx3PRzAAGOIFsAAY4EWwABjci6zObs0u00pwAD8/YP4AQABgcAAY5DAHSxSAMAA/Hc9HMAAY/gWwABj6C6zMrs0u0iArgAAAADAAPy8BrtxgKTAAGQHwABkJcAAa9cAALOFuzQAAAABA8AAZDbAAGvXAAAAAAAAAF0DwAD82gJgA8AA/etdA8AA/KkBYAO7NwE+Bk7AAGRdwABkaQAAs4ZdA8AA/NoCYAPAAP3rXQPAAPypAWADuzcBMsAAZGtgA8AA/etdA8AA/KkBYAO7NwBOwABkf8AAZI8AALOHXQPAAP2cAWADwAD96wEewABklcAAwRcAAWADwAD96wAARsAAZKnAAGTawABkuwAAAISoYAO8twAWwABkxS6zP7s0u1Y+A07AAGTpwABk8AAAgXZgA8AA/esBHMAAZPIus4gCAAKCwABlCcAdL0oWwABlES6ClrtSALt4QCEcwABlMIPAAGUpwB0vZ0gBAAErAMAA/frAAGUpwABlNwA9HMAAZhMWwABmAy6zNbs0u0mAvwIAAoLAAGYUwB0vSh7AAGYegesDAAODwABmKcAdL2eBwABmMcAdLxQngWoAAMAA/O9OwABpIMAAaTIAALOJXQPAAPypAWADuzcBHMAAaU0WwABpRBbAAGk0LrMyuzS7SJiIwAD82YCtAAAAAMAA/H1GwABpo8AAadTAAGm1AAAAhKhgA7y3ABbAAGm/LrM/uzS7Vj4CPRzAAGqNgMAAaoLAHS7XgL8CAAIcwABqnhbAAGqOLrM1uzS7SUsBAAGDwABqn8AdMEsAwAD87h7AAGquwAD3owEBYAO7NwGTAADAAPzvRsAAasgAwABq2AAAALOKYAO7NwCCwABq5sAdMARBPgJJwABrAxzAAGsShMAAawfAHTC7SAEAARbAAGsVLrMxuzS7RwDAAP1eQsAAayYAP0nAAGs4HMAAa1AWwABrR4TAAGs8wB0wu7MruzS7PIMXAQABg8AAa1nAHTBLAMAA/ag+AT0cwABrlBzAAGt5gMAAa27AHS7XSwEAARzAAGuKFsAAa3ouszW7NLtJSwEAAYPAAGuLwB0wSwDAAPzuAMAA/O5WAQABhMAAa5jAHTC7AMAA/Lo/SsAAa8EBgMAAa8jAHS7XBrt4gKTAAGwIwABsD8AAbVkAALOIAAAAAQPAAGwlwABtWQAAAAICAsAAbDMAAACepWADvLcAwABsSQAAAIKWYAOkPAAAYAPAAP3rAT4CQBbAAGxsgMAAbGDAHTHBhK+8u8AAbGDAAGx2AEnAAGx9IRzAAGySFsAAbI2AwABsgcAdMcGAvby5SAEAASsAwAD9+j4BSsAAbKMBFsAAbLaAwABsqsAdMcGAvby5PgJAFsAAbSyBwABtI8AdMc+kxKRcwABtI8AAbT0ASsAAbUYBJwAGu3mApMAAfUHAAH1QwACDOgAAgpsAAAABA8AAfVPAAIM6AAAAAgICwAB9YwAAAIHnYAO86ADAAH12AAAApN9gA8AATW0AAGADu+EBPgVJwAB9iSIiIRbAAH2OLqUAu08BHMAAfaWAwAB9oMAdMpJIAQABKwDAAP1eARbAAH2wLoKku1c+AUrAAH3NARzAAH3ULrOLuzQAAAAAu3I/T8AAfe/AAH3vAAABpSZhAwBgA8AA/Q4AA8AAffPAAIIgAAAAAAAAAGADwAD9DgE+Bk7AAH4CwAB+CAAAs21gA7usAR/AAH4Ou7wBAAEWwAB+HS6zO7tRAD0cwAB++YPAAH7zwB0zOYSQAgACgMAAfwPAHTKSFsAAfxQWwAB/CS6zO7tRszy7lgC7uUbAAIAhwACAfcAAgDMAAACWJmADvNMAFsAAgGEWwACAVIHAAIBIwB0yoLOMwABNcbONwACCAj4BPRzAAICNg8AAgIfAHTM5hJACAAKEwACAl8AdM5sWwACAqxbAAICgLrM7u1GzPLuWALu5RsAAgMPAAIEbwACA1AAAAJYmYAO8wQAWwACBAhbAAID1gcAAgOnAHTKgs4zAAE1xs47AAIIDPgE9HMAAgSuDwACBJcAdMzmEkQIAAoTAAIE0wB00BhbAAIFIFsAAgT0uszu7UbM8u5YAu7hPwACBYcAAgWYAAAGlJWEDAFwAA8AAgXDAAIIFAAAAAAAAAFwBPgFDwACBfRbAAIGKg8AAgYTAHTM5g7K7tT4CTsAAgavAAIGwAACHKGADu70BHMAAgbiDwACBssAdMzmzjwAAAAC7tz0cwACB04XAAIHOwB00qawyAwADLoHAAIHgwB0yoIPAAIHtwB0zOQC7wT0cwACCGITAAIIOwB00bSAAAAAAAD0cwACCMBbAAIInLqTNu1ylJwIAAhbAAIJIgMAAgkPAHTKShEO84jTAAIJRA8AAglHAAIJkAAAAAAAAAGADwAD9DgFKwACCVwEcwACCVy6WrgEBYAPAAP0OAYLAAIJfwB0zDACkDgC1sj0cwACC8hbAAILjFsAAgtougpa7UqSzpEelLgEAAWrAAIMQYAPAAE0EwADwHgDAAE0OSsAAgyEBHMAAgygus4u7NAAAAAC7cga7coCkwACDP8AAg07AAIfTAACzi7s0AAAAAQPAAINawACH0wAAAAAAAABgA7vhAT4QPRzAAINjLrOCuzQAAAAAu3BOwACDm8AAg6cAALOGXQPAAPzaAmADwAD9610DwAD8qQFgA7s3ARzAAIOpLrOFuzQAAAAAu3FOwACD38AAg+gAALOQXQPAAPzaAmADvMFgA7s3ATLAAIQDYAO8wWADuzcATsAAhCnAAIQzAACzkV0DwAD82gJgA7zTYAO7NwEywACET2ADvNNgA7s3AE7AAIRuwACEfwAAs5JdA8AA/NoCYAO9DGADuzcBMsAAhJRgA70MYAO7NwBOwACEu8AAhMcAALOTXQPAAPzaAmADwABg0mADuzcBMsAAhORgA8AAYNJgA7s3AD0cwACE+BbAAITsLrM2uzS7SoP4AQABNMAAhQADwACFAMAAhSIAAAACAgLAAIUBAAAAmcpgA7zBAMAAhQYAAACIR2ADu54AAGADuzcBSsAAhQwBNQAAAAEAXQPAAPzaAmADvMFgA7s3AYHAAIUMwB02OjUAAAABAGADvMEBhcAAhRXAHTcUNQAAAAEAYAO7NwEWwACFHobAAIUcwB03IrM9u6M1AAAAAQBcARzAAIUUh8AAhRTAHTc9gL8CAAIUwACFFMAdN1wIABQAwB03cAkAAMAA/O8UAMAdN3AJAADAAPz5PRzAAIU2FsAAhSkusze7NLtLg/gBAAE0wACFPgPAAIU+wACFZwAAAAICAsAAhT8AAACCZmADvNMAwACFRwAAAIhHYAO7ngAAYAO7NwFKwACFTQE1AAAAAQBdA8AA/NoCYAO802ADuzcBgsAAhU3AHTZlNQAAAAEAYAO80wGFwACFV8AdN/c1AAAAAQBgA7s3ARbAAIVjhsAAhWHAHTgFsz27ozUAAAABAFwBHMAAhVaHwACFVsAdOCCAvwIAAhTAAIVWwB04PwgAFADAHThTCQAAwAD87xQAwB04UwkAAMAA/Pk9HMAAhYIWwACFbi6zOLs0u0yD+AEAATTAAIWTA8AAhZPAAIXRAAAAAgICwACFlAAAALNUYAO9DADAAIWjAAAAiEdgA7ueAABgA7s3AUrAAIWpATUAAAABAF0DwAD82gJgA70MYAO7NwGDwACFqcAdNpA1AAAAAQBgA70MAYXAAIW6wB042jUAAAABAGADuzcBFsAAhc2GwACFy8AdOOizPbujNQAAAAEAXAEcwACFuYfAAIW5wB05A4C/AgACFMAAhbnAHTkiCAAUAMAdOTYJAADAAPzvFADAHTk2CQAAwAD8+T0cwACF5xbAAIXYLrM5uzS7TYP4AQABNMAAhe8DwACF78AAhh4AAAACAgLAAIXwAAAAhgVgA8AAYNIAwACF+gAAAIhHYAO7ngAAYAO7NwFKwACGAAE1AAAAAQBdA8AA/NoCYAPAAGDSYAO7NwGEwACGAMAdNrs1AAAAAQBgA8AAYNIBhcAAhgzAHTm9NQAAAAEAYAO7NwEWwACGGobAAIYYwB05zbM9u6M1AAAAAQBcARzAAIYLh8AAhgvAHTnogL8CAAIUwACGC8AdOgkIABQAwB06HwkAAMAA/O8UAMAdOh8JAADAAPz5PRfAAIYmLrM2uzQru0o9F8AAhj4usze7NCu7Sz0XwACGVy6zOLs0K7tMPRfAAIZ3LrM5uzQru009HMAAhpIus5QAAAAAu3pKwACGoQEfwACGrLwECgAKIhbAAIbJLqUAu08AIRbAAIbcLoKku1cWwACG/i6zMbs0u0eBwACHF8AdNjqCwACHKcAdNmWDwACHPMAdNpCEwACHVsAdNrsWwACHay6zMrs0u0gWwACHhC6zNbs0u0mAwACHnsAdNgQWwACHsy6zOrs0u04ABrt6gKTAAIgJwACIDsAAiBkAALOUAAAAAQPAAIgVwACIGQAAAAAAAABcAT4ABrt7gKTAAIgewACII8AAiqEAAKT+AAAAAQPAAIgzwACKoQAAAAICAsAAiDgAAACk52ADwAD+bADAAIhWAAAAhtldA8AA/GcBYAPAAP5sAABcAT4BPRzAAIhnLpaEAgFgA8AA/Q4CJ7OVNMAAiIEDwACIgcAAipwAAAAAAAAAYAPAAP0OAT4BRsAAiIzAAIinwACIlQAAAICsYAPAAP5sAIHAAIicwB07rD4CTsAAiL/AAIjHAACEQ2ADvLIBHMAAiNwWwACIyS6k+LtaslsBAAGCwACI6sAdPAQAuv09HMAAiQEWwACI+C6kzbtcpScCAAKDwACJFMAdPCA0wACJHQPAAIkdwACKjAAAAAAAAABgA8AA/Q4BPgI9HMAAiSwus5YBAAGDwACJR8AdPCAAu3xGwACJW8AAiZ/AAIltAAAAhKhgA7y3ABzAAImKFsAAiXcupPi7WrMNAQABg8AAiZXAHTwgALsePgFJwACJrRbAAIm4hMAAibHAHTyuhK+8uz4CPRzAAInvFsAAidQuszq7NLtOgL8CAAKEwACJ8MAdPK4fwACKELuJAwADhMAAiiLAHTyug8AAiirAHTwggMAAijPAHTucAADAAPzvPRfAAIpSLqUAKbtPPwC1sgCkFwa7fICkwACLicAAi47AAIu/AAKzlgAAAAEDwACLqMAAi78AAAABAQHAAIu3AAAAhENgA7yyAABcAAa7fYCkwACLxMAAi8nAAIv0AACzlwAAAAEDwACL28AAi/QAAAABAQHAAIvjAAAAliZgA7ytAABgA8AA+j8BSsAAi+8BKga7foCkwACMPMAAjEPAAJhYAACzmAAAAAEDwACMR8AAmFgAAAAAAAAAYAPAAP3rAT4LTsAAjG7AAIx5AACzmV0DwAD82gJgA7s3XQPAAPypAWADwAD96wEywACMlWADuzddA8AA/KkBYAPAAP3rAE7AAIy7wACMxwAAs5NdA8AA/NoCYAO7N10DwAD8qQFgA8AA/esBMsAAjONgA7s3XQPAAPypAWADwAD96wA9HMAAjPcWwACM6y6zNrs0u0qD+AEAATTAAIz/A8AAjP/AAI4IAAAAAgICwACNDAAAAJYmYAO8wQDAAI0fAAAAs4RgA7ueAABgA8AA/Q4BPgVJwACNMhzAAI02LrOXAQABgsAAjUnAHT6qALt9SsAAjVMAP07AAI1lwACNbgAAiEVdA8AA/KkBYAPAAP3rARzAAI17gMAAjXDAHT4GmR0CAAIWwACNkYPAAI2HwB0+uLM9u6M0wACNlwPAAI2XwACNpwAAAAAAAABdA8AA/KkBYAPAAP3rAUrAAI2dATHAAI2lYAPAAP3rAADAAPz1TsAAjbTAAI23AACzmmADwAD96wE1AAAAAQBgA8AA/esBFsAAjcGCwACNucAdPqqAvbyvIxzAAI3GhQDAHT+CSAEAASsAACTAAI3TAYLAAI3LwB0+qoUAwB0/ggFgA8AA/es9jcAAjdvAHT9uJMAAjekChcAAjeLAHT9uJ7ObPRzAAI36hMAAjfHAHT70VgEAAYXAAI3+wB0/bgDAAPy6AMAA/Pk9HMAAjhwWwACODy6zN7s0u0uD+AEAATTAAI4kA8AAjiTAAI+wAAAAAgICwACOMgAAAJYmYAO80wDAAI5FAAAAs4RgA7ueAABgA8AA/Q4BPghJwACOWBzAAI5cLrOXAQABgsAAjm/AHUA8ALt9SsAAjnkAP07AAI6LwACOlAAAiEVdA8AA/KkBYAPAAP3rARzAAI6hgMAAjpbAHT4GmR0CAAIWwACOt4PAAI6twB1ASrM9u6M0wACOvQPAAI69wACOzQAAAAAAAABdA8AA/KkBYAPAAP3rAUrAAI7DATHAAI7LYAPAAP3rAADAAPz1TsAAjtrAAI7dAACzmmADwAD96wE1AAAAAQBgA8AA/esBFsAAjueCwACO38AdQDyAvbyvIxzAAI7shQDAHUEUSAEAASsAACTAAI75AYLAAI7xwB1APIUAwB1BFAFgA8AA/etOwACPBcAAjwkAAJnKYAPAAP3rATUAAAABAGADvMEBFsAAjxOCwACPC8AdQDyE/7zhIxzAAI8jhgDAHUF2SAEAASsAACsWwACPI4YAwB1BdoC9vK8BYAPAAP3rScAAjy8hHMAAjzeGwACPM8AdQWJIAQABKwDAAP36PY3AAI9AwB1BACTAAI9PA4bAAI9HwB1BYieBaoXAAI9MwB1BAD9JwACPVxbAAI9jgsAAj1vAHUA8hTW83T2NwACPbcAdQQAkwACPeAKFwACPdMAdQQAngLw/PY3AAI+AwB1BACTAAI+RAoXAAI+HwB1BACeznD0cwACPooTAAI+ZwB1AhlYBAAGFwACPpsAdQQAAwAD8ugDAAPz5PRzAAI/LFsAAj7cuszi7NLtMg/gBAAE0wACP0wPAAI/TwACRfAAAAAICAsAAj9oAAACWJmADvQwAwACP7QAAALOEYAO7ngAAYAPAAP0OAT4IScAAkAAcwACQBC6zlwEAAYLAAJAXwB1CoQC7fUrAAJAhAD9OwACQM8AAkDwAAIhFXQPAAPypAWADwAD96wEcwACQSYDAAJA+wB0+BpkdAgACFsAAkF+DwACQVcAdQq+zPbujNMAAkGUDwACQZcAAkHUAAAAAAAAAXQPAAPypAWADwAD96wFKwACQawExwACQc2ADwAD96wAAwAD89U7AAJCCwACQhQAAs5pgA8AA/esBNQAAAAEAYAPAAP3rARbAAJCPgsAAkIfAHUKhgL28ryMcwACQlIUAwB1DeUgBAAErAAAkwACQoQGCwACQmcAdQqGFAMAdQ3kBYAPAAP3rTsAAkK3AAJC1AACCU1sBFsAAkNoWwACQzCbAAJDAAILAAJC4wB1CoVuznQCAvQA9jcAAkObAHUNlIyIcwACQ+BbAAJDzgsAAkOvAHUKhgL28r0gBAAErAMAA/foBHMAAkRAWwACRC4LAAJEDwB1CoYC9vK9IAQABJwAAwAD9+ieznoXAAJEowB1DZQFgA8AA/es9jcAAkTLAHUNlJMAAkUUDhsAAkTnAHUPHJ4FqhcAAkULAHUNlPY3AAJFNwB1DZSTAAJFdAoXAAJFUwB1DZSeznz0cwACRboTAAJFlwB1C61YBAAGFwACRcsAdQ2UAwAD8ugDAAPz5PRzAAJGSFsAAkYMuszm7NLtNg/gBAAE0wACRmgPAAJGawACTBgAAAAICAsAAkakAAACAlmADwABg0gDAAJG6AAAAs4RgA7ueAABgA8AA/Q4BPgJJwACSbRbAAJJ3gsAAknHAHUTqs6DAAGDiSsAAkoQAPz0cwACS4hzAAJKpgcAAkpLAHT5DmR0CAAIWwACSv4PAAJK1wB1E+rM9u6M0wACSxQPAAJLFwACS1QAAAAAAAABdA8AA/KkBYAPAAP3rAUrAAJLLATHAAJLTYAPAAP3rAADAAPz1VgEAARzAAJLsgsAAkubAHUTqr9YAAAAAwABg8wDAAPy6AMAA/PlOwACTJsAAkysAAIGwXQPAAPzaAmADuzdgA8AA/esBMsAAky1gA7s3YAPAAP3rAEbAAJM1wACTZMAAk0UAAACzimADuzcAFsAAk1MuszK7NLtIPgdOwACTecAAk4IAALOhYAPAAP41AR/AAJOIwAD+VAAAAABJwACTnhbAAJOtg8AAk6LAHUX1syq7OT4BPRzAAJPOhMAAk8XAHUYSgooBAAEns6IAwAD+ST4DPRzAAJQFhMAAk/zAHUYSgooBAAEns6MAwAD+SU7AAJQlwACULQAAmXddA8AA/KkBYAPAAP3rARzAAJSWHMAAlFAWwACUOoPAAJQvwB1F9bMruzS7PICrAQFgA8AA/esBNMAAlFQDwACUVMAAlIcAAAABAQHAAJRVAAAAYmADvLcAAGADwAD96wFKwACUWwEkwACUhwEcwACUdBbAAJRghcAAlF7AHUbds6S8uoM8AQABFsAAlIGFwACUf8AdRt2ArLy8AMAA/pgAwAD8coCtAAAAAMAA/H1GwACUqMAAlMfAAJSxAAAAYmADwAD96wA1wACUtgAAAQBdA8AA/KkBYAPAAP3rAYXAAJS2wB1GhjUAAAABAFsBHMAAlL+HwACUvcAdR1mArgAAAADAAPy8hwDAHUdZPgE9HMAAlNyEwACU08AdRhKCigEAASTAAJTsAyezpYbAAJTpwB1HSSeC5gDAAP5JTsAAlRTAAJUdAACIRV0DwAD8qQFgA8AA/esBHMAAlSmAwACVH8AdPgZLAQABg8AAlSrAHUX1AMAA/O5JwACVPSEcwACVSoXAAJVBwB1Hz0gBAAErAMAA/V4+Aj0cwACVZoTAAJVdwB1GEoKKAQABJ7OmAMAA/klGwACVhcAAla7AAJWRAAAAliZgA8AA/esANcAAlZwAAAEAXQPAAPypAWADwAD96wGFwACVnMAdR881AAAAAQBbARzAAJWmh8AAlaTAHUhfgK4AAAAAwAD8vIcAwB1IXz4BPRzAAJXDhMAAlbrAHUYSgooBAAEkwACV1wInr1GGwACVz8AdSE4AwAD+ST9OwACV/8AAlgkAAJk0XQPAAPypAWADwAD96wEcwACWFoHAAJYLwB0+Q0sBAAGDwACWF8AdRfUAwAD87knAAJYqIRzAAJY4hsAAli7AHUjTSAEAASsAwAD9Xj4CPRzAAJZUhMAAlkvAHUYSgooBAAEns6cAwAD+SUbAAJZ0wACWnMAAloAAAACAlmADwAD96wA1wACWiQAAAQBdA8AA/KkBYAPAAP3rAYbAAJaJwB1I0zUAAAABAFsBHMAAlpQUwACWksAdSWMIAICuAAAAAMAA/LwUAMAdSWMIAD4BPRzAAJaxhMAAlqjAHUYSgooBAAEkwACWwwInr1GHwACWvcAdSVIAwAD+ST89HMAAluKCwACW3sAdRb6AvwIAAoPAAJbjwB1F9STAAJb8AYTAAJbzwB1GEgDAAPzvTsAAlxbAAJcZAACD5GADwAD+NQEfwACXH8AA/lQAAAAARsAAlzPAAJeewACXQwAAALOKYAO7NwA1wACXYQAAAQBdA8AA/KkBYAO7NwEcwACXYRbAAJdRLrMyuzS7SICtAAAAAMAA/H01AAAAAQBbARzAAJdyhcAAl3DAHUpEgK4BAAE0wACXdwPAAJd3wACXmwAAAAICAsAAl3gAAACB1WADuzcAwACXewAAAIJKYAO7NwAAYAPAAPwFAUrAAJeBARzAAJeJHMAAl4WCwACXgcAdRb5LAQABhsAAl4bAHUqiAMAA/O6CSwEAARzAAJeXgsAAl5PAHUW+SwEAAYfAAJeYwB1KsADAAPzuAMAA/fsAwAD8vIUAwB1KRD4DPRzAAJepg8AAl6bAHUoMgooBAAEns6gAwAD+ST0cwACX4oPAAJffwB1KDIKKAQABJMAAmAkCJ7OpFsAAmAOEwACX+MAdSjWAvbs6AMAA/kk9HMAAmBWDwACYEsAdSgyCigEAASTAAJgzAievUBzAAJglgsAAmCHAHUW+SwEAAYTAAJgmwB1KNQDAAPzuAMAA/klKwACYQAEcwACYSoPAAJhHwB1KDCMAAAAAwAD+TgAAHQafAB0G1gAdBxoAHQdZAB0HmAAdB9cAHQgdAB0IWwAdCJIAHQk0AB0JdwAdCboAHQn9AB0KtQAdDF8AHQ3WAB0OGAAdDlEAHQ7XAB0PkQAdFbEAHRlcAB0bywAdHjoAHR/PAB0gMQAdIZYAHSLJAB0j9gAdJn8AHSwJAB0ukAAdMZkAHTJqAB01wAAdO0cAHTt0AB09VQAdPY4AHT3TAB1L1wAAACgCu4GApMAAmF3AAJhjwACapwOzqgAAAWABwAD9UQAAAwS7g4CkwACYs8AAmL8Js6sAYAPAAP3rAAS7hICkwACY/sAAmQQJgyQAYAPAAP3rAAS7hoCkwACZHcAAmS4Js6y7NABgA7yyAAIFu4iApMAAmTPAAJkzwACZjACVTwADwACZTcAAmYwAAAADAwPAAJlaAAAEs6tgA8AA/esAwACZbQAABIMkYAPAAP3rAMAAmXoAAASzrGADvLIAAGADu4EBPwQIAbuDgADAHU0NCAG7hIEAwB1NHQgBu4aCAMAdTS0JAcAAmTPAAP1nAAAAAAW7iYCkwACZkcAAmZHAAJqlAAAAA8AAmaLAAJqlAAAAAwMDwACZtwAAAISoYAO8twDAAJnNAAAAs61gA7yyAMAAmeMAAACzrmADwAD+bAAAYAO7gQE/AQoAwACaALuIAwADHsAAmhaTbwMAA4LAAJo4wB1NrhbAAJpZgcAAmkjAHU2gpSu8tCoAFsAAmoKAwACae8AdTZKAvby5gcAAmpTAHU2gAAAAAB1OFQAAAAACu4qApMAAm33AAJuDwACceAOzrwAAAWABwAD9UQAAAgS7jICkwACbqsAAm7UJnqUAYAO8twAEu42ApMAAnD/AAJxECScAYAPAAPwFAAEFu4+ApMAAnEnAAJxJwACcdgAAAAPAAJxYwACcdgAAAAICAsAAnF4AAASepWADvLcAwACccAAABCdgA8AA/AUAAGADu4oBPwMIAbuMgADAHU6PCAG7jYEAwB1OnQkBwACcScAA/WcAAAAAAAAAHU7XAAAAAAK7kICkwACeGsAAniDAAKYDA7OwAAABYAHAAP1RAAACBLuTgKTAAJ69wACezhizsbs0AF0DwAD82gJgA7y3YAO7igEywACezGADvLdgA7uKAAS7lICkwACfHcAAnzgYs7K7NABgA7ueAR/AAJ8tu6sAAAAAAQW7nQAAAAAEAAADAAAAAAAAAAAAYAO7kAE/AQkBAMAA/WcAAAAABAa7loCkwACfvcAAn8vAAJ/fAQCzPAAAAAEDwACf08AAn98AAAAAAAAAYAO7ngFKwACf1gEWwACf1i6zsrs0u5QGu5iApMAAoCTAAKAuwACgpgAAs4EAAAABA8AAoDfAAKCmAAAAAQEBwACgRQAAAISoYAO8twAAYAO7ngE+AUrAAKB+ARzAAKCPFsAAoIUus7K7NLuUs7O7NAEAARzAAKCULrO0uzQBAAGAwACgmsAdT+QAu5sAu6gGu5mApMAAoOzAAKD2wAClGQAAlwIAAAABA8AAoPvAAKUZAAAAAgICwAChBgAAAIHVYAO7ngDAAKETAAAAgkpgA7ueAABgA7ueAT4NScAAoRwiHMAAoSKAwAChIMAdUFxIAQABKwDAAP1eARzAAKEvgMAAoS3AHVBcSAEAARbAAKEyLrOyuzS7lADAAP1eSsAAoT0BgcAAoUTAHVBqP0nAAKFLIhzAAKFRgcAAoU/AHVBqSAEAASsAwAD9XgEcwAChXoHAAKFcwB1QakgBAAEWwAChYS6zsrs0u5QAwAD9XkrAAKFsAYDAAKFzwB1QXD9OwACiPMAAokUAALO1XQPAAPypAWADu4oBFsAAokmAwACiR8AdUFyzK7s0u6FOwACibcAAonYAALO2XQPAAPypAWADu4oBFsAAonqBwACieMAdUGqzK7s0u6FOwACijMAAoo4AAGJgA8AA/AUBk07AAKKTwACilQAAl6ZgA8AA/AUBk07AAKKawACipQAAs7dgA8AA/AUBk07AAKKqwACitQAAs7hgA8AA/AUBk07AAKLCwACiyQAAgXZgA7ueARbAAKLLLrOyuzS7lEPAAKLaIhzAAKLjhMAAouHAHVF/YwEAARbAAKLugsAAouXAHVElYcAA/NgAwAD9MgAcwACi+oXAAKL4wB1Rk2MBAAEWwACjBYPAAKL8wB1RUmHAAPzYAMAA/TI+BU7AAKMZwACjIQAAs7lgA7uKARzAAKMrgsAAoyPAHVElSwEAAYTAAKMswB1RfwDAAPy4TsAAozrAAKNCAACzumADu4oBHMAAo0yDwACjRMAdUVJLAQABhcAAo03AHVGTAMAA/LhAHMAAo2mGwACjXsAdUaiBawEAARbAAKN0FMAAo2zAHVJNCQAnu40AwAD9M8AAo17AAKN5AEAcwACjlIfAAKOJwB1RvYFrAQABFsAAo58UwACjl8AdUn8KACe7jQDAAP0zwACjicAAo6QAScAAo60cwACjvxbAAKO5FMAAo7HAHVJNCQAnu41jAQABFsAAo8kUwACjwcAdUn8KACe7jQDAAP0yPgI9FcAAo9rAHVHSCBzAAKPqFMAAo+PAHVHSCACzs7s0AQABFMAAo+/AHVJNCQAAu6g9jMAApAHAHVF/HMAApAKEwACkAcAdUX9kAQABlADAAP0qPgI9FcAApB3AHVHSCBzAAKQtFMAApCbAHVHSCACzs7s0AQABFMAApDLAHVJ/CgAAu6g9jcAApETAHVGTHMAApEWFwACkRMAdUZNkAQABlADAAP0qRcAApFsAARzAAKRkhMAApGLAHVF/YwEAARbAAKRvgsAApGbAHVElYcAA/NgAwAD9MgGMwACkd8AdUX8cwACkeITAAKR3wB1Rf2QBAAGUAMAA/So+AT0VwACkhMAdUdIIHMAApJQUwACkjcAdUdIIALOzuzQBAAEcwACkoYLAAKSZwB1RJUsBAAGEwACkosAdUX8AwAD8uAC7qEXAAKSxAAEcwACkuoXAAKS4wB1Rk2MBAAEWwACkxYPAAKS8wB1RUmHAAPzYAMAA/TIBjcAApM3AHVGTHMAApM6FwACkzcAdUZNkAQABlADAAP0qPgE9FcAApNrAHVHSCBzAAKTqFMAApOPAHVHSCACzs7s0AQABHMAApPeDwACk78AdUVJLAQABhcAApPjAHVGTAMAA/LgAu6hKwAClCAEUwAClD8AdUdIIAAa7m4CkwAClZMAApXTAAKYBAACztLs0AAAAAQPAAKV5wACmAQAAAAEBAcAApYcAAACEqGADvLcAAGADu4oBPgFKwACllQEcwAClqRbAAKWcLrOxuzS7k5kdAgACgMAApb7AHVVqNMAApcYDwAClxsAApfwAAAAAAAAAYAO7igFKwAClzAEfwACl0LuPAgACgMAApeDAHVVqFsAApfUWwACl6C6zsbs0u5NhwAD8/gAAwAD89QAAHU98AB1PvAAdUDQAHVVAAB1V9AAAAAQCu56ApMAApi/AAKY1wACrsQOzuwAAAWABwAD9UQAAAwS7oYCkwACnEsAApxoJsyu7NABdA8AA/KkBYAO7igAEu6KApMAAp4vAAKe+CbO8uzQAXQPAAPzaAmADu4pgA7ueATLAAKe8YAO7imADu54ABLujgKTAAKhNwACoURizPQBgA7s3ASsBBburgKTAAKfDwACnw8AAp/kAAAADwACnzMAAp/kAAAABAAHAAKfTAAAEsytdA8AA/KkBYAO7igFqwACn3l0DwAD8qQFgA7uKwADxrwBgA7ueAT8CCAG7oYAAwB1WuAkBwACnw8AA/WcAAAAAAwa7pYCkwACoVsAAqF7AAKh3AQBhAAAAAQPAAKhlwACodwAAAAAAAABgA8AA/AUBSsAAqGgBFsAAqHEWwACoaC6zK7s0u6FhwAD82Aa7qICkwACplsAAqaDAAKq2AACzs7s0AAAAAQPAAKmkwACqtgAAAAEBAcAAqbUAAACEqGADu4oAAGADu54BPgNOwACpzcAAqdQAAIF2YAO7ngEcwACp4hbAAKnWLrO8uzS7oksBAAGAwACp48AdV3cAwAD87knAAKnwHMAAqfuBwACp9MAdV45IAQABKwDAAP1ePgM9icAAqgzAHVeOH8AAqhm7qwEAATXAAKonAAABAF0DwAD8qQFgA7uKAR7AAKonwAD8rwEBYAO7igEWwACqMS6zK7s0u6EANQAAAAEAWwEcwACqPILAAKo6wB1X9lYBAAGAwACqQMAdV3cAwAD8uoIAwB1X9gA9HMAAqmMWwACqV4HAAKpQwB1XjrO8uzS7ooC/AgACgMAAqmTAHVd3gcAAqm7AHVeOAMAA/O89HMAAqogWwACqfC6zvLs0u6KAvwIAAoDAAKqJwB1Xd4HAAKqTwB1XjgDAAPzvP0rAAKqlAYHAAKqswB1Xjga7qYCkwACqu8AAqs7AAKuvAAAjAWrAAKq8YAPAAP1RAgAAAQPAAKrWwACrrwAAAAAAAABgA8AA/esBPgVOwACq7MAAqu8AAIPkYAPAAP41AR/AAKr1wAD+VAAAAAA9HMAAqwyAwACrCcAdWQiCigEAASTAAKstAyezvRbAAKskLmG7pSeBiwDAAP5JRsAAqzTAAKtRwACrPQAAAISoYAO7igAWwACrRy6zK7s0u6E+AT0cwACrXIDAAKtZwB1ZCIKKAQABJMAAq38CFsAAq3gWwACrbIHAAKtlwB1ZX56lu4yAvby5J4DZAMAA/kk9HMAAq4+AwACrjMAdWQiCigEAASeDIQDAAP5JSsAAq58BJMAAq6sBgMAAq6jAHVkIAAAdVwIAHVdNAB1YygAdWekAAAADArusgKTAAKvSwACr2MAAtvADs74AAAFgAcAA/VEAAAUEu66ApMAArDLAAKxPCbNtAF0DwADCawFgA7u9AR/AAKw+wADDFwABYAO7vQAABLuvgKTAAKy+wACs6AmzvwBdA8AA/NoCYAO8wWADu70BMsAArOZgA7zBYAO7vQAEu7CApMAArVnAAK2ECbPAAF0DwAD82gJgA7zTYAO7vQEywACtgmADvNNgA7u9AAS7sYCkwACt+MAAriwJs8EAXQPAAPzaAmADwABg0mADu70BMsAAripgA8AAYNJgA7u9AAS7s4CkwACufsAArokJs8K7NABgA7uQAAEFu7yApMAAro7AAK6OwACuqQAAAAPAAK6XwACuqQAAAAEBAcAArp0AAASzwmADu5AAAGADu6wBPwIIAbuzgADAHVsZCQHAAK6OwAD9ZwAAAAAFBru1gKTAAK7nwACu8MAArw4BAIOyAAAAAQPAAK77wACvDgAAAAAAAABgA8AA+j8BSsAArv4BFsAArwQWwACu/i6zbbuug7LAAPyMBru3gKTAAK88wACvRcAAr4wAALOPAAAAAQPAAK9NwACvjAAAAAAAAABgA7u9AT4CQBbAAK9dLoOyu7XAAK9dwACvZwBKwACvbgEcwACvexbAAK91LrNtu66fJQAAAADAAMJ2Bru4gKTAALCwwACwtcAAsfsAAISRAAAAAQPAALC9wACx+wAAAAICAsAAsMoAAACWJmADvMEAwACw3QAAALOEYAO7ngAAXAE+Ak7AALDywACw9wAAhyhgA7u9ARzAALEHFsAAsPkus7+7r0sBAAGAwACxCMAdXB4AwAD87knAALEWHMAAsR+CwACxGsAdXEBIAQABKwDAAP1ePgM9isAAsTDAHVxAH8AAsTu7ygIAAoDAALFJwB1cHoHAALFSwB1cLAA9HMAAsXIWwACxZC6zv7uvgL8CAAKAwACxc8AdXB6CwACxfsAdXEAAwAD87z0cwACxkBbAALGKLrNtu65WAQABgsAAsZTAHVxAAMAAwno+AT0XwACxs4LAALGuwB1cQLPDHMAAsc4WwACxwi6zwrs0u7OXAgIAAhbAALHZgsAAsdTAHVxAs8O7v4HAALHnwB1cLAC7mbu/Bru5gKTAALMfwACzJMAAtG0AAISQAAAAAQPAALMtwAC0bQAAAAICAsAAszsAAACWJmADvNMAwACzTgAAALOEYAO7ngAAXAE+Ak7AALNjwACzaAAAhyhgA7u9ARzAALN4FsAAs2ous8C7sEsBAAGAwACzecAdXXcAwAD87knAALOHHMAAs5CCwACzi8AdXZlIAQABKwDAAP1ePgM9isAAs6HAHV2ZH8AAs6y70QIAAoDAALO7wB1dd4HAALPEwB1dhQA9HMAAs+QWwACz1i6zwLuwgL8CAAKAwACz5cAdXXeCwACz8MAdXZkAwAD87z0cwAC0AhbAALP8LrNtu65WAQABgsAAtAbAHV2ZAMAAwno+AT0XwAC0JYLAALQgwB1dmbPDHMAAtEAWwAC0NC6zwrs0u7OXAgIAAhbAALRLgsAAtEbAHV2Zs8O7v4HAALRZwB1dhQC7mbu/Bru6gKTAALWTwAC1mMAAtu4AAKqKAAAAAQPAALWjwAC27gAAAAICAsAAtbIAAACGBWADwABg0gDAALXGAAAAs4RgA7ueAABcAT4CTsAAtdvAALXgAACHKGADu70BHMAAtfIWwAC14i6zwbuxSwEAAYDAALXzwB1e0ADAAPzuScAAtgIcwAC2C4LAALYGwB1e9EgBAAErAMAA/V4+Az2KwAC2HMAdXvQfwAC2J7vYAgACgMAAtjjAHV7QgcAAtkLAHV7gAD0cwAC2ZBbAALZULrPBu7GAvwIAAoDAALZlwB1e0ILAALZxwB1e9ADAAPzvPRzAALaDFsAAtn0us227rlYBAAGCwAC2h8AdXvQAwADCej4BPRfAALamgsAAtqHAHV70s8McwAC2wRbAALa1LrPCuzS7s5cCAgACFsAAtsyCwAC2x8AdXvSzw7u/gcAAttrAHV7gALuZu78AAB1bSAAdW5MAHVv2AB1dTwAdXqgAHWADAAAABQK7vYCkwAC3QsAAt1HAALkAB6SRAAABYAHAAP1RAAABBLu/gKTAALiAwAC4jBizwwBgA7ueAAEFu8OApMAAuJHAALiRwAC4rAAAAAPAALiZwAC4rAAAAAEBAcAAuJ8AAASzw2ADu54AAGADu70BPwIIAbu/gADAHWB6CQHAALiRwAD9ZwAAAAABBrvBgKTAALixwAC4tsAAuP4AAqwyAAAAAQPAALi8wAC4/gAAAAMDA8AAuM4AAACWkGADu0QAwAC44QAAAKTfYAPAAE1tAMAAuPgAAACzbWADu6wAAFwAAAAdYKkAHWEAAAAAAQK7xICkwAC5PcAAuUPAALstA7PEAAABYAG7vQAAAQS7xoCkwAC5n8AAuaIJmcoAYAO8wQABBbvKgKTAALmnwAC5p8AAueAAAAADwAC5tMAAueAAAAACAgLAALm6AAAEmcpgA7zBAMAAuckAAACXImADu54AAGADu8QBPwIIAbvGgADAHWFlCQDAALnTu8MBAAGBwAC52cAdYXMAAQa7yICkwAC55cAAufbAALsrAACsMgFqwAC55mADwAD9UQIAAAEDwAC5/MAAuysAAAADAwPAALoVAAAAlpBgA7tEAMAAuigAAACk32ADwABNbQDAALo/AAAAs21gA7usAABcAT4EPRzAALphFsAAulKCwAC6TMAdYfuzv7uvhFkBAAEWwAC6aC6ZyrvGAMAA/PdOwAC6fMAAuoMAALNsYAO7ngEcwAC6lRbAALqKgMAAuoXAHWHdsza7NLtKSwEAARbAALqWLpnKu8YAwAD87k7AALqqwAC6sQAAlyJgA7ueARzAALrDFsAAuriAwAC6s8AdYd2zO7tRlwICAAKDwAC6ycAdYjsWwAC60S6zw7u/ALuZPRzAALrpgMAAuuTAHWHds2+7NAUABYHAALr/wB1h6xbAALsMLpnKu8aDwAC7EcAdYjuEwAC7GcAdYnmCwAC7IcAdYfsAu2cAAB1hqQAdYwMAAAABArvLgKTAALtrwAC7ccAAvXADs8UAAAFgAbu9AAABBLvNgKTAALvQwAC71gmCZgBgA7zTAAEFu9GApMAAu9vAALvbwAC8GAAAAAPAALvpwAC8GAAAAAICAsAAu+8AAASCZmADvNMAwAC8AQAAAJciYAO7ngAAYAO7ywE/AggBu82AAMAdY2gJAMAAvAu7wwEAAYHAALwRwB1jdgABBrvPgKTAALwdwAC8LsAAvW4AAKwyAWrAALweYAPAAP1RAgAAAQPAALw0wAC9bgAAAAMDA8AAvE0AAACWkGADu0QAwAC8YAAAAKTfYAPAAE1tAMAAvHcAAACzbWADu6wAAFwBPgQ9HMAAvJkWwAC8ioLAALyEwB1j/rPAu7CEWQEAARbAALygLoJmu80AwAD8907AALy3wAC8vgAAs2xgA7ueARzAALzRFsAAvMWAwAC8wMAdY+CzN7s0u0tLAQABFsAAvNIugma7zQDAAPzuTsAAvOnAALzwAACXImADu54BHMAAvQIWwAC894DAALzywB1j4LM7u1GXAgIAAoPAAL0IwB1kPhbAAL0QLrPDu78Au5k9HMAAvSiAwAC9I8AdY+Czdbs0BQAFgcAAvT/AHWPuFsAAvUwugma7zYPAAL1UwB1kPoTAAL1cwB1kfILAAL1kwB1j/gC7aAAAHWOsAB1lBgAAAAECu9KApMAAvbDAAL22wAC/zAOzxgAAAWABu70AAAEEu9SApMAAvhrAAL4iCYYFAGADwABg0gABBbvYgKTAAL4nwAC+J8AAvmgAAAADwAC+N8AAvmgAAAACAgLAAL49AAAEhgVgA8AAYNIAwAC+UQAAAJciYAO7ngAAYAO70gE/AggBu9SAAMAdZW0JAMAAvlu7wwEAAYHAAL5hwB1lfQABBrvWgKTAAL5twAC+fsAAv8oAAKwyAWrAAL5uYAPAAP1RAgAAAQPAAL6EwAC/ygAAAAMDA8AAvp0AAACWkGADu0QAwAC+sAAAAKTfYAPAAE1tAMAAvscAAACzbWADu6wAAFwBPgQ9HMAAvusWwAC+2oLAAL7UwB1mBbPBu7GEWQEAARbAAL7yLoYFu9QAwAD8907AAL8LwAC/EgAAs2xgA7ueARzAAL8nFsAAvxmAwAC/FMAdZeezObs0u01LAQABFsAAvyguhgW71ADAAPzuTsAAv0HAAL9IAACXImADu54BHMAAv1oWwAC/T4DAAL9KwB1l57M7u1GXAgIAAoPAAL9gwB1mRRbAAL9oLrPDu78Au5k9HMAAv4CAwAC/e8AdZeeza7s0BQAFgcAAv5nAHWX1FsAAv6YuhgW71IPAAL+wwB1mRYTAAL+4wB1mg4LAAL/AwB1mBQC7ZgAAHWWzAB1nDQAAAAECu9mApMAAwGDAAMBmwADCSAOzxwAAAWABwAD9UQAAAQS73ICkwADAmcAAwKgJs8i7NABgA7vhAAEFu+CApMAAwK3AAMCtwADA3AAAAAPAAMDGwADA3AAAAAEBAcAAwMwAAASzyGADu+EAAGADu9kBPwIIAbvcgADAHWd2CQHAAMCtwAD9ZwAAAAABBrvegKTAAME+wADBQ8AAwkYAALPJAAAAAQPAAMFbwADCRgAAAAICAsAAwXAAAACzymADvNMAwADBjQAAALPLYAO80wAAXAE+AkAcwADBzhzAAMHCFsAAwbUWwADBpS6zyLs0u9yzzLs0u+hLAQABgcAAwcPAHWfbAMAA/O5IAQABKwDAAP1ewADBpcAAwdUAPRzAAMH5FsAAwewWwADB3C6zyLs0u9yzzLs0u+iAvwIAAoHAAMH6wB1n2xzAAMIfFsAAwg8us8i7NLvcs80BAAGAwADCM8AdZ80Au/YAwAD87wAAHWelAB1ohwAAAAECu+GApMAAw3vAAMOBwADz1AOklAAAAWABwAD9UQAACwS744CkwADEDcAAxCUGg+cAYAPAAP3rAWrAAMQTYAPAAP3rwADxtQS75ICkwADENcAAxEMJpQAAYAPAAPo/AAS75YCkwADEWMAAxGYJs88AYAO7NwAEu+eApMAAxI3AAMSZCbPQuzQAXQPAAPzaAmADvMFgA7s3AAS76ICkwADEwcAAxM4Js8y7NABdA8AA/NoCYAO802ADuzcABLvpgKTAAMTvwADFAwmz0bs0AF0DwAD82gJgA70MYAO7NwAEu+qApMAAxSzAAMU7CbPSuzQAXQPAAPzaAmADwABg0mADuzcABLvtgKTAAMVWwADFYQmwwQBdA8AA/KkBYAO7NwAEu+uApMAAxYXAAMWVCbM1uzQAXQPAAPzaAmADvLdgA8AA/esABLvugKTAAMd1wADHgAmzhgBdA8AA/NoCYAPAAP3rXQPAAPypAWADuzcABLvsgKTAAMgowADIQwmzOrs0AF0DwAD82gJgA7y3YAO7gQABBbwEgKTAAMhIwADISMAAyXIAAAADwADIVsAAyXIAAAAKCgrAAMhjAAAEpQBgA8AA+j8AwADIfgAABLPPYAO7NwDAAMiZAAAEs9BdA8AA/NoCYAO8wWADuzcAwADIsgAABLPMXQPAAPzaAmADvNNgA7s3AMAAyMwAAASz0V0DwAD82gJgA70MYAO7NwDAAMjtAAAEs9JdA8AA/NoCYAPAAGDSYAO7NwDAAMkJAAAEsMFdA8AA/KkBYAO7NwDAAMkhAAAEszVdA8AA/NoCYAO8t2ADwAD96wDAAMk+AAAEs4ZdA8AA/NoCYAPAAP3rXQPAAPypAWADuzcAwADJVgAABLM6XQPAAPzaAmADvLdgA7uBAABgA7vhAT8LCAG75IAAwB1qSggBu+WBAMAdaloIAbvnggDAHWpoCAG76IMAwB1qgQgBu+mEAMAdapoIAbvqhQDAHWqzCAG77YYAwB1qzggBu+uHAMAdauMIAbvuFADAHWr+CAAIAbvsFADAHWsgCQAJAcAAyEjAAP1nAAAAABEGu/CApMAAyajAAMmwwADQCQQBli4AAAABA8AAycPAANAJAAAABQUFwADJ2gAAAIPWYAO74QDAAMn1AAAAqfphAwFgA7yyYAO8sgDAAMqXAAAAs9NhAwJdA8AA/NoCYAO8wWADuzddA8AA/NoCYAO9DGADuzddA8AA/NoCYAO8wWADuzcAwADLJQAAALPUYQMCXQPAAPzaAmADvNNgA7s3XQPAAPzaAmADvQxgA7s3XQPAAPzaAmADvNNgA7s3AMAAy48AAACz1WEDAV0DwAD82gJgA8AAYNJgA7s3XQPAAPzaAmADwABg0mADuzcAAGADu+EBPgZOwADLxsAAy9IAALPWXQPAAPzaAmADvMFgA7s3ARzAAMvrgsAAy9zAHWwDIAIAAhbAAMvygMAAy+zAHWvgs9C7NLvnFsAAzAaAwADMAMAda+Cz0bs0u+kAAE7AAMw/wADMTAAAs9ddA8AA/NoCYAO802ADuzcBHMAAzGaDwADMVsAdbD0gAgACFsAAzG2AwADMZ8Ada+CzzLs0u+gWwADMgoDAAMx8wB1r4LPRuzS76QAATsAAzLzAAMzLAACz2F0DwAD82gJgA8AAYNJgA7s3ARzAAMznhMAAzNXAHWx3IAEAARbAAMzugMAAzOjAHWvgs9K7NLvqAABOwADNKcAAzUQAALPZXQPAAPzaAmADvLdgA7uBATLAAM1GYAO8t2ADu4EAPRzAAM15FsAAzVSAwADNTsAda+CzOrs0u+yD+AEAATTAAM2BA8AAzYHAAM6EAAAAAgICwADNjwAAAISoYAO8twDAAM2pAAAAlp1gA7uBAABgA8AA/Q4BPgE9HMAAzdgUwADNvsAdbagIAIC/AgACFMAAzdnAHW4FCQAfwADN57uIAwADFsAAzhkUwADODcAdbhMKALOru4MWwADOPRTAAM4xwB1uEwoAgyS7hBzAAM5dgcAAzk/AHWvuIAEAARbAAM5qFMAAzl7AHW4TCgCzrLs0u4YAAAAAwAD87wDAAPz5SsAAzowBH8AAzpe8BAoAChbAAM61gMAAzq/AHWvgpQC75BbAAM7TgMAAzs3AHWvgs8+75YXAAM7rwB1sr4bAAM8AwB1tCGrAAM9XXQPAAPzaAmADvQxgA7s3wADxuIfAAM98wB1tYRbAAM+agMAAz5TAHWvgsMG77RbAAM+1gMAAz6/AHWvgszW7NLvrFsAAz9WAwADPz8Ada+CzhrvuFMAAz+rAHW2oCAAABrvxgKTAANBLwADQU8AA16kEAa8VAAAAAQPAANB0wADXqQAAAAEBAcAA0IAAAACDRGADwABdQQAAYAO74QE+DD0cwADQlYDAANCOwB1vhoKUAQABasAA0JtgA8AA/evAAPG1AMAAXUNOwADQqsAA0LkAAKUAYAPAAPo/ARzAANDCgMAA0LvAHW+GrzMAAAAAwABdT07AANDjwADQ7wAAsMFdA8AA/KkBYAO7NwEcwADQ+IDAANDxwB1vhq8vAQFgA7s3ATTAANEBA8AA0QHAANHfAAAAAAAAAGADuzcBPgROwADREcAA0R4AALMqYAPAAPo/ARzAANEngMAA0SDAHW+GrzMAAAAAwABdT07AANFAwADRRQAAgL1gA8AA/esBHMAA0U6AwADRR8Adb4avvAAAAADAAF1STsAA0XTAANF+AACzhF0DwAD9nAFgA7y3ARzAANGVHMAA0YeAwADRgMAdb4az2gAAAADAAF2JlRkAAAAAwAD8fkrAANGkAR/AANGvu0MDAAOCwADRusAdcD+DwADRyMAdcGuEwADRzsAdcJcAAMAAXU5OwADR8cAA0gAAALPPYAO7NwEcwADSDYLAANICwB1v80sBAAEcwADSFYDAANIOwB1vhrDCAAAAAMAAXVAAwAD8uE7AANJDwADSTwAAs9ZdA8AA/NoCYAO8wWADuzcBHMAA0liAwADSUcAdb4az2wECYAO8wWADuzcBNMAA0mUDwADSZcAA0psAAAAAAAAAYAO7NwE+AUrAANJwARzAANKCgsAA0nfAHW/zSwEAARzAANKKgMAA0oPAHW+GsMIAAAAAwABdUADAAPy4AMAAXXZOwADSwMAA0s0AALPXXQPAAPzaAmADvNNgA7s3ARzAANLegMAA0tfAHW+Gs9wBAmADvNNgA7s3ATTAANLsA8AA0uzAANM1AAAAAQEBwADS+gAAAIJmYAO80wAAYAO7NwE+AUrAANMKARzAANMcgsAA0xHAHW/zSwEAARzAANMkgMAA0x3AHW+GsMIAAAAAwABdUADAAPy4AMAAXXtOwADTW8AA02oAALPYXQPAAPzaAmADwABg0mADuzcBHMAA03OAwADTbMAdb4az3QECYAPAAGDSYAO7NwE0wADTgwPAANODwADTuQAAAAAAAABgA7s3AT4BSsAA044BHMAA06CCwADTlcAdb/NLAQABHMAA06iAwADTocAdb4awwgAAAADAAF1QAMAA/LgAwABdhk7AANPawADT6gAAs95dA8AA/NoCYAO8t2ADwAD96wEcwADT+4DAANP0wB1vhrPfAQFgA8AA/esBFsAA1BCAwADUCcAdb4avvMAAXVIAwABdik7AANQ/wADUSwAAs4ZdA8AA/NoCYAPAAP3rXQPAAPypAWADuzcBHMAA1FSAwADUTcAdb4az4AEBXQPAAPypAWADuzcBNMAA1GIDwADUYsAA1MYAAAAAAAAAXQPAAPypAWADuzcBPgFKwADUbQEcwADUe4DAANR0wB1vhq8vAQFgA7s3ATTAANSEA8AA1ITAANS+AAAAAAAAAGADuzcBPgFKwADUkQEcwADUo4LAANSYwB1v80sBAAEcwADUq4DAANSkwB1vhrDCAAAAAMAAXVAAwAD8uADAAF1OAMAAXVVOwADU8sAA1Q0AALPZXQPAAPzaAmADvLdgA7uBARzAANUegMAA1RfAHW+Gs98BAWADu4EBNMAA1SwDwADVLMAA1i8AAAAAAAAAYAO7gQE+BE7AANU+wADVSwAAs6tgA8AA/esBHMAA1VSAwADVTcAdb4avvAAAAADAAF1STsAA1W/AANV2AACDJGADwAD96wEcwADVf4DAANV4wB1vhq+8AAAAAMAAXVJOwADVocAA1bIAALOtYAO8sgEcwADVu4DAANW0wB1vhpiyAAAAAMAAXXBKwADV0AEfwADV27uIAwADFMAA1gHAHXSFCQAUwADWD8AddLEKABTAANYXwB103QsAAADAAF2KPRzAANY9gMAA1jbAHW+GgowBAAFqwADWQWADwAD968AA8bUAwABdRErAANZLAR/AANZWvAQKAAqBwADWbsAdb8eDwADWhsAdcQiEwADWnsAdcUmFwADWs8AdcddqwADXCl0DwAD82gJgA70MYAO7N8AA8biGwADXL8AdcnOCwADXR8Adb/OHwADXXMAdcwUUwADXdcAdc1YIABTAANeKwB10NQkAAAa784CkwADX4MAA1+XAAN2IAACvFgAAAAEDwADX9MAA3YgAAAABAQHAANf+AAAAhDtgA8AAXPIAAFwBPgw9HMAA2A+AwADYCsAddguClAEAAWrAANgVYAPAAP3rwADxtQDAAFz3PRzAANgkgMAA2B/AHXYLrzoBAAEWwADYLi6lALvkAMAAXPxOwADYWMAA2GoAALPhXQPAAPzaAmADuzdgA8AA/AUBMsAA2GxgA7s3YAPAAPwFAD0cwADYeYDAANh0wB12C4hEAgFgA7s3AhbAANiDLrDBu+00wADYkAPAANiQwADZdQAAAAEBAcAA2JwAAACzimADuzcAAGADwAD9DgE+BD0cwADYwYHAANiwwB12bIC/AgACgsAA2MLAHXbQFsAA2OKBwADY0MAddmxhwAD8/gDAAPzvPRzAANj1gMAA2PDAHXYLrzoBAAEWwADZCoLAANj/wB120LMquzkAwABc/D0cwADZJIDAANkfwB12C4G5AQABFsAA2TuCwADZMMAddtCAvbs6AMAAXP89HMAA2U2AwADZSMAddguz4gEAARbAANllgsAA2VrAHXbQsyu7NLs8AMAAXTYAwABc+z0cwADZgYDAANl8wB12C7DIAQABHMAA2ZuBwADZisAddmxLAQABFsAA2Zwus8+75QDAAPzuAMAAXP09HMAA2beAwADZssAddguz4wIBYAO7NwIWwADZxS6z0Ls0u+c0wADZ0wPAANnTwADaJgAAAAEBAcAA2d8AAACzimADuzcAAGADwAD9DgE+AT0cwADZ+IDAANnzwB12C7DIAQABHMAA2hKBwADaAcAddmxLAQABgsAA2hPAHXgXAMAA/O4AwABc/QDAAF0jPRzAANoygMAA2i3AHXYLs+QCAWADuzcCFsAA2kEus8y7NLvoNMAA2lgDwADaWMAA2sAAAAACAgLAANpmAAAAgmZgA7zTAMAA2nkAAACzimADuzcAAGADwAD9DgE+AT0cwADakoDAANqNwB12C7DIAQABHMAA2qyBwADam8AddmxLAQABg8AA2q3AHXizAMAA/O4AwABc/QDAAF0oPRzAANrMgMAA2sfAHXYLs+UCAWADuzcCFsAA2t0us9K7NLvqNMAA2u4DwADa7sAA20EAAAABAQHAANr6AAAAs4pgA7s3AABgA8AA/Q4BPgE9HMAA2xOAwADbDsAddguwyAEAARzAANstgcAA2xzAHXZsSwEAAYLAANsuwB15QQDAAPzuAMAAXP0AwABdMT0cwADbTYDAANtIwB12C7PmAgFgA8AA/esCFsAA21wuszW7NLvrFsAA23OAwADbbsAddguBucAAXP8AwABdNz0cwADbioDAANuFwB12C7PnAgFdA8AA/KkBYAO7NwIWwADbmS6zhrvuNMAA26YDwADbpsAA3FsAAAABAQHAANu4AAAAsMFdA8AA/KkBYAO7NwAAYAPAAP0OAT4BPRzAANvSgMAA283AHXYLiEQCAWADuzcCgsAA2+fAHXoTNMAA2/4DwADb/sAA3FMAAAABAQHAANwKAAAAs4pgA7s3AABcAUrAANwnARzAANwsgMAA3CfAHXYLsMgBAAEcwADcRoHAANw1wB12bEsBAAGDwADcR8AdemcAwAD87gDAAFz9AMAAXPsAwABdAj0cwADcZ4DAANxiwB12C7PmAgFgA7uBAhbAANx2LrM6uzS77DTAANybA8AA3JvAAN1wAAAAAQEBwADcrgAAALPoYAO7gQAAYAPAAP0OAT4DPRzAANzOgMAA3MnAHXYLgbkBAAEWwADc7ILAANzawB16+LOru4MAwABc/z0cwADdBoDAAN0BwB12C4G5AQABFsAA3SSCwADdEsAdeviDJLuEAMAAXP89HMAA3TiAwADdM8Addguv0QEAASbAAN1XARbAAN1XgsAA3UXAHXr4s6y7NLuGYAPAAI5fAMAAXR0AwABdNz0cwADdfIDAAN13wB12C4KMAQABasAA3YBgA8AA/evAAPG1AMAAXPgGu/SApMAA3h/AAN4qwADfLwAAs+kAAAABA8AA3jzAAN8vAAAAAgEBwADeSQAAAJnKYAO8wQABwADeVAAAAJex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AET2AAK1bAAAAAEDwABE4cAARPYAAAABAQHAAETwAAAAgJZgA73nAABgA8AA/AUABr5GgKrAAEU+wABFQ8AARWcAAqJNAAAAAQPAAEVIwABFZwAAAAEBAcAARWEAAAiAlmADvecAAGADwAD6PwAGvkeAqsAARmzAAEZ6wABHEAACtW0AAAABA8AARojAAEcQAAAABAQEwABGngAAALVoYAO95wDAAEa6AAAAtWlgA8AA/VEAwABG3QAAALVqYAO80wDAAEcEAAAAmtlgA73nAABgA73nAAa+SICqwABHj8AAR53AAEfDAAK1bgAAAAEDwABHrsAAR8MAAAABAQHAAEe9AAAAgJZgA73nAABgA73nAAa+SYCqwABIC8AASBDAAEg0AAKsYQAAAAEDwABIFcAASDQAAAABAQHAAEguAAAIgJZgA73nAABgA8AA+j8ABr5KgKrAAEk+wABJTMAASfUAArVvAAAAAQPAAElawABJ9QAAAAUFBcAASXAAAAC1aGADvecAwABJjAAAALVpYAPAAP1RAMAASa8AAAC1amADvNMAwABJ1gAAAIPRYAO95wDAAEnvAAAAgJZgA73nAABgA73nAAa+S4CqwABKcMAASn7AAEqgAAK1cAAAAAEDwABKi8AASqAAAAABAQHAAEqaAAAAgJZgA73nAABgA73nAAa+TICqwABLHcAASyvAAEtPAAK1cQAAAAEDwABLOsAAS08AAAABAQHAAEtJAAAAgJZgA73nAABgA73nAAa+TYCqwABLysAAS8/AAEv6AAK1cgAAAAEDwABL28AAS/oAAAABAQHAAEv0AAAIgJZgA73nAABgA8AA+j8ABr5OgKrAAE0LwABNGcAATfQAArVzAAAAAQPAAE0uwABN9AAAAAYGBsAATUQAAAC1aGADvecAwABNYAAAALVpYAPAAP1RAMAATYMAAAC1amADvNMAwABNqgAAAIPRYAO95wDAAE3DAAAAgJZgA73nAMAATesAAAC1dF0DwAD82gJgA8AA/etgA73nAABgA73nAAa+T4CqwABOVMAATlnAAE6PAAK1dQAAAAEDwABObsAATo8AAAACAgLAAE59AAAAgJZgA73nAMAATosAAACD0WADwAD96wAAYAPAAPo/AAa+UICqwABPHcAATyvAAE9kAAK1dgAAAAEDwABPQ8AAT2QAAAACAgLAAE9SAAAAgJZgA73nAMAAT2AAAACD0WADwAD96wAAYAO95wAGvlGAqsAAUFXAAFBawABQrwACtXcAAAABA8AAUGzAAFCvAAAAAgICwABQggAAALV4YAO95wDAAFCgAAAAtXlgA73nAABgA8AA+j8ABr5SgKrAAFG+wABRzMAAUfIAArV6AAAAAQPAAFHdwABR8gAAAAEBAcAAUewAAACAlmADvecAAGADvecABr5TgKrAAFMOwABTFcAAUzsAArV7AAAAAQPAAFMmwABTOwAAAAEBAcAAUzUAAACAlmADvecAAGADwAD9UQAGvlSAqsAAVEjAAFRVwABUfgACtXwAAAABA8AAVGnAAFR+AAAAAQEBwABUeAAAAICWYAO95wAAYAO80wAGvlWAqsAAVNLAAFTXwABVBgACtX0AAAABA8AAVOfAAFUGAAAAAQEBwABVAAAACICWYAO95wAAYAPAAPo/AAa+VoCqwABVgcAAVY/AAFXlAAK1fgAAAAEDwABVo8AAVeUAAAACAgLAAFW5AAAAtWhgA73nAMAAVd8AAACAlmADwABhCAAAYAO95wAGvleAqsAAVpTAAFarwABW2wACtX8AAAABA8AAVrzAAFbbAAAAAQEBwABW1QAACICWYAO95wAAYAPAAGEIAAa+WICqwABXMMAAVz7AAFdtAAK1gAAAAAEDwABXTcAAV20AAAABAQHAAFdlAAAAhI5dA8AA/GcBYAO80wAAYAO95wAGvlmAqsAAWDjAAFhFwABYlQACsqQAAAABA8AAWFbAAFiVAAAAAwMDwABYbAAAAIV/YAO95wDAAFiDAAAAgmZgA7zTAMAAWJAAAACAvWADwABofQAAYAO9zQAGvlqAqsAAWRTAAFkhwABZbAACtYEAAAABA8AAWTrAAFlsAAAAAgICwABZUAAAAIV/YAO95wDAAFljAAAApPFgA8AAS2QAAGADvc0ABr5bgKrAAFovwABaPcAAWngAArWCAAAAAQPAAFppwABaeAAAAAEBAcAAWnMAAACCkGADwABiZgAAYAO95wAGvlyAqsAAWxvAAFsowABbXgACgxcAAAABA8AAWzDAAFteAAAAAgICwABbPwAAALWDYAO95wDAAFtXAAAAtYRgA73nAABgA73NAAa+XYCqwABcAcAAXA7AAFxAAAK1hQAAAAEDwABcEsAAXEAAAAAC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AQEBheQAAAiAlmADvecAAGADvc0BSoXuAWqF+2ADvc3AAPKzBr6PgKuGBYYehmkAALWGAWqGBmADwAD9UQIAAAEDhjCGaQAAAAICAoY/AAAAhX9gA73nAIZSAAAApPFgA8AAS2QAAGADvNMBSoZlASsGvpCAq4ZuhoeG1QAAtYUBaoZvYAPAAP1RAgAAAQOGi4bVAAAAAgIChpoAAAC1hGADvecAhrAAAAC1g2ADvecAAGADvc0BSobDAWqG0GADvc3AAPKzBr6RgKuG2obzh0UAAIMXAWqG22ADwAD9UQIAAAEDhvuHRQAAAAICAocKAAAAtYNgA73nAIciAAAAtYRgA73nAABgA73NAUqHMwFqh0BgA73NwADyswa+koCrh0qHY4fOAAC1gQFqh0tgA8AA/VECAAABA4d8h84AAAACAgKHlgAAAIV/YAO95wCHqQAAAKTxYAPAAEtkAABgA73NAUqHvAFqh8lgA73NwADyswa+k4Crh9OH7IhcAACypAFqh9RgA8AA/VECAAABA4f9iFwAAAADAwOIFwAAAIV/YAO95wCILgAAAIJmYAO80wCIOwAAAIC9YAPAAGh9AABgA73NAUqISgFqiFdgA73NwADyswa+lICriGGIe4jQAAC1gAFqiGJgA8AA/VECAAABA4iKiNAAAAABAQGIogAAAISOXQPAAPxnAWADvNMAAGADvecBSoi0AWqIumADvmjAAPLSBr6VgKuI1Yj4iSYAALV/AWqI1mADwAD9UQIAAAEDiQmJJgAAAAEBAYkYAAAIgJZgA73nAABgA8AAYQgBSokiASsGvpaAq4kriUWJxQAAtX4BaoksYAPAAP1RAgAAAQOJWYnFAAAAAgICiXMAAAC1aGADvecAiZkAAACAlmADwABhCAAAYAO95wFKiakBaomvYAO+aMAA8tIGvpeAq4nKiduKCQAAtX0BaonLYAPAAP1RAgAAAQOJ64oJAAAAAQEBifoAAAiAlmADvecAAGADwAD6PwFKigQBKga+mICrig6KJ4pYAAC1fAFqig9gA8AA/VECAAABA4o7ilgAAAABAQGKSgAAAICWYAO95wAAYAO80wFKilQBKwa+mYCril2KcIqeAAC1ewFqil5gA8AA/VECAAABA4qBip4AAAABAQGKkAAAAICWYAO95wAAYAPAAP1RAUqKmgErBr6agKuK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wB50lJkdAgACgIudwB50XoKLo8AedHgAwAD89Qa/HYCsi7eL0IxDAQCebQFqi7hgA8AA/VECAAABA4vcjEMAAAAAAAAAYAPAAECmAUqL3wE1AAAAAQBgA8AAQKYBFovfLrWrvva+/SMci+yAAMAedflIAQABKwDAAEDFF4vfLrWrvvYei/TAAECvAgACFowpFowaFowNLrWqvva+/LNAwABNM5rMuE4WjDYutaq+9r78AL79gADAHnX5AWADwABApga/HoCsjEiMYYzbAQC1KQFqjElgA8AA/VECAAABA4xtjNsAAAAAAAAAYAPAAECmAUqMcAE1AAAAAQBgA8AAQKYBFoxwLrWsvva+/iMcjH2AAMAedp5IAQABKwDAAEDFF4xwLrWsvvYejIXAAEC0AgACFozBFoyyFoylLrWqvva+/LNAwABNM5rMuE4WjM4utaq+9r78AL7+gADAHnaeAWADwABApga/H4CsjOCM+Y1cAQCFhQFqjOFgA8AA/VECAAABA40BjVwAAAAAAAAAYAPAAECmAUqNBAE1AAAAAQBgA8AAQKYBFo0ELrWuvva/ACMcjQ2AAMAed0NIAQABKwDAAEDFF40ELrWuvvYejRvAAEC0AgACFo1DFo00LrNAvxyxTrieFo1PLrWqvva+/AC/AIAAwB53QwFgA8AAQKYGvyCArI1hjXqN5gEAtS0Bao1iYAPAAP1RAgAAAQONhY3mAAAAAAAAAGADwABApgFKjYgBNQAAAAEAYAPAAECmARaNiC61r772vwEjHI2UgADAHnfdSAEAASsAwABAxReNiC61r772Ho2iwABAtAIAAhaNyhaNuy6zQL8csV24rRaN2S61qr72vvwAvwGAAMAed90BYAPAAECmBr8hgKyN644Ejm0BALUsAWqN7GADwAD9UQIAAAEDjg+ObQAAAAAAAABgA8AAQKYBSo4SATUAAAABAGADwABApgEWjhIutbC+9r8CIxyOHoAAwB54d0gBAAErAMAAQMUXjhIutbC+9h6OLMAAQLICAAIWjlEWjkIus0C/HLFeuK4WjmAutaq+9r78AL8CgADAHnh3AWADwABApga/IoCsjnKOi48RAQC1LgFqjnNgA8AA/VECAAABA46bjxEAAAAAAAAAYAPAAECmAUqOpAE1AAAAAQBgA8AAQKYBFo6kLrWxvva/AyMcjrWAAMAeeRFIAQABKwDAAEDFF46kLrWxvvYejr3AAEC0AgACFo7wFo7hLrNAvxyxXLisFo8ELrWqvva+/AC/A4AAwB55EQFgA8AAQKYGvyOArI8Wjy+PmAEAheUBao8XYAPAAP1RAgAAAQOPOo+YAAAAAAAAAGADwABApgFKjz0BNQAAAAEAYAPAAECmARaPPS61sr72vwQjHI9JgADAHnmrSAEAASsAwABAxRePPS61sr72Ho9XwABAsgIAAhaPfBaPbS6zQL8csU+4nxaPiy61qr72vvwAvwSAAMAeeasBYAPAAECmBr8kgKyPnY+2kBwBAJrQAWqPnmADwAD9UQIAAAEDj76QHAAAAAAAAABgA8AAQKYBSo/BATUAAAABAGADwABApgEWj8EutbO+9r8FIxyPyoAAwB56RUgBAAErAMAAQMUXj8EutbO+9h6P2MAAQLQCAAIWkAAWj/Eus0C/HLFNuJ0WkA8utaq+9r78AL8FgADAHnpFAWADwABApga/JYCskCGQOpCdAQCFpQFqkCJgA8AA/VECAAABA5BDkJ0AAAAAAAAAYAPAAECmAUqQRgE1AAAAAQBgA8AAQKYBFpBGLrW0vva/BiMckFCAAMAeet9IAQABKwDAAEDFF5BGLrW0vvYekF7AAECyAgACFpCDFpB0LrNAvxyxUbihFpCQLrWqvva+/AC/BoAAwB563wFgA8AAQKYGvyaArJCikLuRKgEAhTsBapCjYAPAAP1RAgAAAQOQyJEqAAAAAAAAAGADwABApgFKkMsBNQAAAAEAYAPAAECmARaQyy61tb72vwcjHJDZgADAHnt5SAEAASsAwABAxReQyy61tb72HpDnwABAtQIAAhaRDhaQ/y6zQL8cmte4VBaRHS61qr72vvwAvweAAMAee3kBYAPAAECmBr8ngKyRL5FIkawBAKxPAWqRMGADwAD9UQIAAAEDkVGRrAAAAAAAAABgA8AAQKYBSpFUATUAAAABAGADwABApgEWkVQutba+9r8IIxyRXoAAwB58E0gBAAErAMAAQMUXkVQutba+9h6RbMAAQLICAAIWkZEWkYIus0C/HLFMuJwWkZ8utaq+9r78AL8IgADAHnwTAWADwABApga/KICskbGRypJFAQC1LwFqkbJgA8AA/VECAAABA5HYkkUAAAAAAAAAYAPAAECmAUqR2wE1AAAAAQBgA8AAQKYBFpHbLrW3vva/CSMckeqAAMAefK1IAQABKwDAAEDFF5HbLrW3vvYekfLAAECyAgACFpIeFpIPLrNAvxyxW7irFpI4LrWqvva+/AC/CYAAwB58rQFgA8AAQKYGvymArJJKkmOS1gEAtSsBapJLYAPAAP1RAgAAAQOScZLWAAAAAAAAAGADwABApgFKknQBNQAAAAEAYAPAAECmARaSdC61uL72vwojHJKDgADAHn1HSAEAASsAwABAxReSdC61uL72HpKRwABAsgIAAhaSthaSpy6zQL8csVm4qRaSyS61qr72vvwAvwqAAMAefUcBYAPAAECmBr8qgKyS25L0k30BALUqAWqS3GADwAD9UQIAAAEDkwWTfQAAAAAAAABgA8AAQKYBSpMOATUAAAABAGADwABApgEWkw4utbm+9r8LIxyTIIAAwB594UgBAAErAMAAQMUXkw4utbm+9h6TKMAAQLICAAIWk1gWk0kus0C/HLFauKoWk3Autaq+9r78AL8LgADAHn3hAWADwABApga/K4Csk4KTm5QCAQCsdgFqk4NgA8AA/VECAAABA5OjlAIAAAAAAAAAYAPAAECmAUqTpgE1AAAAAQBgA8AAQKYBFpOmLrW6vva/DCMck6+AAMAefntIAQABKwDAAEDFF5OmLrW6vvYek73AAEC1AgACFpPkFpPVLrNAvxyxMLiBFpP1LrWqvva+/AC/DIAAwB5+ewFgA8AAQKYGvyyArJQHlCCUlwEAtTABapQIYAPAAP1RAgAAAQOULZSXAAAAAAAAAGADwABApgFKlDABNQAAAAEAYAPAAECmARaUMC61u772vw0jHJQ+gADAHn8VSAEAASsAwABAxReUMC61u772HpRGwABAtQIAAhaUdBaUZS6zQL8csWe4tRaUii61qr72vvwAvw2AAMAefxUBYAPAAECmBr8tgKyUnJS1lRwBAKxoAWqUnWADwAD9UQIAAAEDlL2VHAAAAAAAAABgA8AAQKYBSpTAATUAAAABAGADwABApgEWlMAutby+9r8OIxyUyYAAwB5/r0gBAAErAMAAQMUXlMAutby+9h6U18AAQLUCAAIWlP4WlO8us0C/HLEruHwWlQ8utaq+9r78AL8OgADAHn+vAWADwABApga/LoCslSGVOpWxAQC1MQFqlSJgA8AA/VECAAABA5VHlbEAAAAAAAAAYAPAAECmAUqVSgE1AAAAAQBgA8AAQKYBFpVKLrW9vva/DyMclViAAMAegElIAQABKwDAAEDFF5VKLrW9vvYelWDAAEC1AgACFpWOFpV/LrNAvxyxZri0FpWkLrWqvva+/AC/D4AAwB6ASQFgA8AAQKYGvy+ArJW2lc+WOAEAhcABapW3YAPAAP1RAgAAAQOV2pY4AAAAAAAAAGADwABApgFKld0BNQAAAAEAYAPAAECmARaV3S61vr72vxAjHJXpgADAHoDjSAEAASsAwABAxReV3S61vr72HpX3wABAsgIAAhaWHBaWDS6zQL8csUu4mxaWKy61qr72vvwAvxCAAMAegOMBYAPAAECmBr8wgKyWPZZWlr4BAIWHAWqWPmADwAD9UQIAAAEDll+WvgAAAAAAAABgA8AAQKYBSpZiATUAAAABAGADwABApgEWlmIutb++9r8RIxyWbIAAwB6BfUgBAAErAMAAQMUXlmIutb++9h6WesAAQLICAAIWlp8WlpAus0C/HLFluLMWlrEutaq+9r78AL8RgADAHoF9AWADwABApga/MYCslsOW3JdcAQC1MwFqlsRgA8AA/VECAAABA5bxl1wAAAAAAAAAYAPAAECmAUqW9AE1AAAAAQBgA8AAQKYBFpb0LrXAvva/EiMclwqAAMAeghdIAQABKwDAAEDFF5b0LrXAvvYelxjAAECyAgACFpc9FpcuLrNAvxyxQriSFpdPLrWqvva+/AC/EoAAwB6CFwFgA8AAQKYGvzKArJdhl3qX/wEAtTQBapdiYAPAAP1RAgAAAQOXipf/AAAAAAAAAGADwABApgFKl5MBNQAAAAEAYAPAAECmARaXky61wb72vxMjHJekgADAHoKxSAEAASsAwABAxReXky61wb72HpeswABAsgIAAhaX3BaXzS6zQL8csUO4kxaX8i61qr72vvwAvxOAAMAegrEBYAPAAECmBr8zgKyYBJgdmJsBALU1AWqYBWADwAD9UQIAAAEDmDGYmwAAAAAAAABgA8AAQKYBSpg0ATUAAAABAGADwABApgEWmDQutcK+9r8UIxyYSYAAwB6DS0gBAAErAMAAQMUXmDQutcK+9h6YV8AAQLICAAIWmHwWmG0us0C/HLFEuJQWmI4utaq+9r78AL8UgADAHoNLAWADwABApga/NICsmOeZAJkwAQCFcAFqmOhgA8AA/VECAAABA5kJmTAAAAAAAAAAYAPAAECmAUqZDAE1AAAAAQBgA8AAQKYBFpkMLrWtvva+/yMcmRaAAMAeg+VIAQABKwDAAEDFF5kMLrWtvvZqmSBgA7/UwADy9L7/gADAHoPlAWADwABApga/NYCsmTWZTpl4AQC1MgFqmTZgA8AA/VECAAABA5lYmXgAAAAAAAAAYAPAAECmAUqZWwFqmWFgA7/UwADy/wa/NoCsmX2ZipobAQC1zAAAAAEDmaGaGwAAAAAAAABgA8AAQKYBSpmqATUAAAABAGADwABApgEWmaoutcO+9r8VIxyZwoAAwB6Em0gBAAErAMAAQMUXmaoutcO+9h6ZysAAQLUCAAIWmfwWme0us0C/HLFWuKYWmg4utaq+9r78AL8VgADAHoSbAWADwABApga/N4CsmiCaLZqmAQC1zQAAAAEDmj+apgAAAAAAAABgA8AAQKYBSppCATUAAAABAGADwABApgEWmkIutcS+9r8WIxyaVYAAwB6FK0gBAAErAMAAQMUXmkIutcS+9h6aY8AAQLQCAAIWmosWmnwus0C/HLFMuJwWmpkutaq+9r78AL8WgADAHoUrAWADwABApga/OICsmquauJtBAQC1zgAAAAEDmsmbQQAAAAAAAABgA8AAQKYBSprSATUAAAABAGADwABApgEWmtIutcW+9r8XIxya5IAAwB6Fu0gBAAErAMAAQMUXmtIutcW+9h6a7MAAQLQCAAIWmx8WmxAus0C/HLFYuKgWmzQutaq+9r78AL8XgADAHoW7AWADwABApga/OYCsm0abU5voAQC1zwAAAAEDm2mb6AAAAAAAAABgA8AAQKYBSptyATUAAAABAGADwABApgEWm3Iutca+9r8YIxybiYAAwB6GS0gBAAErAMAAQMUXm3Iutca+9h6bkcAAQLICAAIWm8EWm7Ius0C/HLFbuKsWm9sutaq+9r78AL8YgADAHoZLAWADwABApga/OoCsm+2b+pyAAQC10AAAAAEDnAqcgAAAAAAAAABgA8AAQKYBSpwTATUAAAABAGADwABApgEWnBMutce+9r8ZIxycJIAAwB6G20gBAAErAMAAQMUXnBMutce+9h6cLMAAQLQCAAIWnF8WnFAus0C/HLFKuJoWnHMutaq+9r78AL8ZgADAHobbAWADwABApga/PYCsnIWcnp77AAC1PgFqnIZgA8AA/VECAAABA5yqnvsAAAABAQGctAAACKzDYAPAAECmAABgA73NAT4CTp2UnaMAALEbYAO8wQEWncEWnbIWnaUutaq+9r78s0DAAE0zsRu4akqd1QEenem92gEAASIiIiEcngSBnfXAHod/SAEAASsAwAD9XgAcnjMWniQWnhcutaq+9r78q2jAAE05qggBAAGBnkLAHod/AMAAcQAAHJ5igJ5dwB6HaLXRAgACgZ5swB6HfxaefC61qr72vvwAwABAyAAcnpqAnpXAHodotdECAAIWnsAWnrEWnqQutaq+9r78s0DAAE0zsWu4uRae6S61qr72vvwAwABAyAAGvz6ArJ8Anxmh+wAAtT8Bap8BYAPAAP1RAgAAAQOfKqH7AAAAAQEBnzQAAAisw2ADwABApgAAYAO9zQE+A0+fQJ9FAAABtdJhAwJgA8AAQKZgA8AAQKZgA8AA+j8AA59Pn6sAAAACAgKfWQAAAJqrYAPAAECmAJ9pAAAAkjJgA8AAQKYAAGADwAD6PwFKn3sBIRafpByfgoKffMAeiLuXAwIAAoOfj8AeiMkWn5Yutaq+9r78AMAAQM6BVcAAQNNOoDWgRAAAsRtgA7zBARagYhagUxagRi61qr72vvyzQMAATTOxG7hqSqB2AR6gir3cAQABIiIiIRygpoKgl8AeiRNIAQABKwDAAP1eAByg1RagxhaguS61qr72vvyraMAATTmqCAEAAYKg5MAeiRMAwABxAAAcoQmBoP/AHoiTIAIAAoChCsAeiHoeoRTAAECwAgACgqElwB6JExahNS61qr72vvwAAAAAHKFZgaFPwB6IkyACAAKAoWfAHoh6HqF9wABAsAIAAhahuxahrBahny61qr72vvyzQMAATTOxa7i5FqHoLrWqvva+/AAAAAAGvz+ArKIAohWidgAAtTkBaqIBYAPAAP1RAgAAAQOiJ6J2AAAAAQEBojQAAACZymADvMEAAGADwABApgE+AUqiPwEeokrAAECyAgACgKJgwB6KKhaiZS61qr72vvwABr9AgKyie6KQousAALU6AWqifGADwAD9UQIAAAEDoqOi6wAAAAEBAaKwAAAAmcpgA7zBAABgA8AAQKYBPgFKorsBHqLGwABArQIAAoCi1cAeiogWotoutaq+9r78AAa/QYCsovCjBaNsAAC1OwFqovFgA8AA/VECAAABA6Mao2wAAAABAQGjJwAAAJnKYAO8wQAAYAPAAECmAT4BSqMyAR6jPcAAQLQCAAKAo1bAHormFqNbLrWqvva+/AAGv0KArKNxo4aj6wAAtTwBaqNyYAPAAP1RAgAAAQOjmqPrAAAAAQEBo6cAAACZymADvMEAAGADwABApgE+AUqjsgEeo73AAEC1AgACgKPVwB6LRBaj2i61qr72vvwABr9DgKyj8KQFpGQAALU9AWqj8WADwAD9UQIAAAEDpBqkZAAAAAEBAaQnAAAAmcpgA7zBAABgA8AAQKYBPgFKpDIBHqQ9wABAsAIAAoCkTsAei6IWpFMutaq+9r78AAa/RICspGmkkKpwAAC1NgFqpGpgA8AA/VECAAABA6SkqnAAAAACAQKkrgAAAIKQYAPAAGJmAKTJAAAAtTdgA8AAcAwBaqTnYAPAAHAMwADyvgBgA73qAT4DTqT8pQYAALUlYAPAAPo/ASlDpRIlpR6ApRnAHowAYAPAAGK5PgROpUylWQAAqPBgA8AAYrkBJqVMAYClW8AejABgA8AAYrk9iKVnwB6MABylmRalexalbi61qr72vvyk+MAATTGzAgEAARalu4OlrsAejFiWJsAAYrsAuxA9iaXLwB6MDmql6WADwABwDMAA8r49iqX4wB6MMipJphUlph6AphnAHowAYAPAAGKNPgNJpjiCpjzAHowyPgFGppMApqEAAAAfYAPAAGJmABamshSmrcAejAAAAWADwABijYUdwABikEE+AkmmzSWm2oOm0cAejPFgA8AAYuxCpuoAPz2Kpv7AHowyKj9BR6cpgacxwB6MDgMBp11qp11gA8AAcAzAAPMNAD4BSqduAR+ndb3xAgACHqeowABArQIAAhansxSnrsAejAAAAWADwABijZYmwABijxanvC61qr72vvwAgqfLwB6MMgABp/Jqp/JgA8AAcAzAAPMkAD4CSagMIRyoHhaoES61qr72vvybFgEAARaoMRSoLMAejAAAAWADwABijZYmwABijwDAAE1FPgFKqEkBH6hQvfECAAIeqIXAAECvAgACFqiTFKiOwB6MAAABYAPAAGKNlibAAGKPFqicLrWqvva+/ACCqKvAHowyAD9CqM0AAajvaqjvYAPAAHAMwADyvgA+AUKpAgBKqRcBH6kevfECAAIeqU3AAECwAgACFqlaFKlVwB6MAAABYAPAAGKNlibAAGKPFqljLrWqvva+/ACCqXLAHowyAEmpiSWpkoCpjcAejABgA8AAYvk+AUqpqwEfqbK98QIAAh6p4cAAQLACAAIWqfgWqekus0C/HJrXuFQWqgcutaq+9r78ACoAPgFKqjEBH6o4vfECAAIWqlMunm2/HSoABr9FgKyqdaqKqroAALVAAWqqdmADwAD9UQIAAAEDqpWqugAAAAEBAaqfAAAIrMNgA8AAQKYAAGADwABApgFKqqgBHKqtgKqowB6PCIZpAAAAAMAAQL4Gv0aArKq/qtSrAQAAtUEBaqrAYAPAAP1RAgAAAQOq36sBAAAAAQEBqukAAAisw2ADwABApgAAYAPAAECmAUqq8gEcqveAqvLAHo9ehmgAAAAAwABAvQa/R4CsqwarH6uXAAC1QgFqqwdgA8AA/VECAAABA6srq5cAAAACAgKrNQAACLXVYAPAAECmAKtLAAAAmcpgA7zBAABgA73NAT4BSqtWAR6rar3aAQABHKt2LrXWvvYCAAKAq4TAHo+0gauOwB6PwgC/SQAGv0mArKucq6GsQwAAtda+9gAAAAEDq66sQwAAAAICAqu4AAAAtdVgA8AAQKYAq84AAACZymADvMEAAGADwAD6PwE+AUqr2QEiHKv8FqvtFqvgLrWqvva+/KtowABNOaoIAQABgawLwB6QLQDAAHEAABysJICsG8AekB+DFwIAAoGsLcAekC0WrDIutaq+9r78AMAAQMkGv1WArKxIrGGs4QAAtUMBaqxJYAPAAP1RAgAAAQOscazhAAAAAgICrHsAAAi11WADwABApgCskQAAAJnKYAO8wQAAYAO9zQE+AUqsnAEerLC92gEAARysvC611772AgACgKzOwB6QvYGs2MAekMsAv0oABr9KgKys5qzrrYcAALXXvvYAAAABA6z8rYcAAAACAgKtBgAAALXVYAPAAECmAK0cAAAAmcpgA7zBAABgA8AA+j8BPgFKrScBIhytShatOxatLi61qr72vvyraMAATTmqCAEAAYGtWcAekTYAwABxAAAcrXKArWnAHpEotdgBAAGBrX/AHpE2AMAAQMQGv1aArK2MraWuIQAAtUQBaq2NYAPAAP1RAgAAAQOtt64hAAAAAgICrcEAAAi11WADwABApgCt1wAAAJnKYAO8wQAAYAO9zQFKreUBHq3yvdoBAAEcrf4utdm+9gIAAoCuEsAekbyBrhzAHpHKAL9LAAa/S4CsriauK67EAAC12b72AAAAAQOuPq7EAAAAAgICrkgAAAC11WADwABApgCuXgAAAJnKYAO8wQAAYAPAAPo/AT4BSq5pASIcrn0WrnAutaq+9r78tdoBAAGBrovAHpIzAMAATUAAHK6kgK6bwB6SJbXRAgACga6uwB6SMxausy61qr72vvwAwABAyAa/V4Csrsmu4rC0AAC1RQFqrspgA8AA/VECAAABA67usLQAAAACAgKvCQAACLXbYAPAAECmAK8lAAAAmcpgA7zBAABgA73NAT4CTq8+r0cAALXVYAO95wEjHK9Oga9KwB6SyEgBAAEWr2AWr1Eus0C/HJrNuFcAwAD9XhyvdS61PQEAAYGvi8AeksgAv0Mcr5outTwBAAGBr6/AHpLIAL9CAWADwABApkmvuRyv6hyvzICvvcAekrqXAgIAAiav0gGCr9LAHpLdYAPAAECmFq/cLrWqvva+/ADAAEDMSAEAAYKv7cAekt0AwABAxT4BSq//AWqwE2ADvc3AAPKjSbAkHLA3gLAowB6SurXcAgACJrBCAYKwQsAekt1gA8AAQKYWsEwutaq+9r78AMAAQM0+AUqwYwFqsHdgA73NwADyqz4BSrCRAWqwpWADvc3AAPKzBr9YgKywubDSsRoAAIFVAWqwumADwAD9UQIAAAEDsNmxGgAAAAEBAbDjAAAIgJZgA8AAQKYAAGADvc0BSrDzAR6xAL3aAQABFrESgLEMwB6UDIFVwABA0wAGv1mArLEfsTixlQAAtUYBarEgYAPAAP1RAgAAAQOxP7GVAAAAAQEBsUkAAAiAlmADwABApgAAYAO9zQFKsVkBHrFmvdoBAAEiFrF4gLFywB6UZbVGwABA1wAhFrGKgLGEwB6UZbXdwABA1AAGv1qArLGasbOyEwAAtUcBarGbYAPAAP1RAgAAAQOxwLITAAAAAQEBscoAAAiAlmADwABApgAAYAO9zQFKsdoBHrHnvdoBAAEiFrH5gLHzwB6U0bVGwABA1wEcsgQutd6+9gEAAYCyDMAelNEAv0wABr9bgKyyGLIwsnwAALVIAWqyGWADwAD9UQIAAAEDsj2yfAAAAAEBAbJHAAAIrMNgA8AAQKYAAGADvMEBPgFKslMBHLJfgLJawB6VQbXfAQABFrJrLrWqvva+/ADAAEDLBr9cgKyygbKSssMAALV9AWqygmADwAD9UQIAAAEDsqKywwAAAAEBAbKsAAAIgJZgA8AAQKYAAGADwAD6PwFKsrYBFrK8gLK2wB6VobXgwABA3ga/XYCsssiy67ODAAC1fwFqsslgA8AA/VECAAABA7L8s4MAAAABAQGzBgAACKzDYAPAAECmAABgA8AAYQgBPgJJsxIWsxuAsxbAHpXzteDAAEDePgJOszqzRAAAteFgA8AAQRQBJrM6AYCzRsAelfNgA8AAQRRKs1IBFrNjgbNZwB6WIYCWwABBGD9Ks3QBKwa/XoCss4izorQ2AAC1fgFqs4lgA8AA/VECAAABA7O2tDYAAAACAgKz0QAACLVoYAPAAECmALP3AAAAgJZgA8AAYQgAAGADvecBPgFKtAQBH7QPwABBJwIAAoC0HcAeloOBtCzAHpaRAAa/X4CstDu0VLUfAACtbwFqtDxgA8AA/VECAAABA7RatR8AAAABAQG0ZAAACICWYAPAAECmAABgA73NAT4BSbRxFrR7gLR1wB6W7K1vwABA1T4BSrSLAWq0n2ADvc3AAPKjSbSwFrS6gLS0wB6W7LXdwABA1D4BSrTOAWq04mADvc3AAPKzPgFKtPwBarUQYAO9zcAA8qsGv0yArLUktSm1UAAAtd6+9gAAAAEDtTC1UAAAAAEBAbU6AAAAgJZgA8AAQKYAAGADwAD6PwFKtUQBFrVKgLVEwB6Xe61vwABA1Qa/YICstVW1brZkAACzoAFqtVZgA8AA/VECAAABA7V5tmQAAAABAQG1gwAACICWYAPAAECmAABgA73NAT4BSrWQAR61pL3cAQABIiIiIhy1sS614r72AQABgLXHwB6XzQC/TQEctdkuteO+9gEAAYC17sAel80Av08BHLYALrXkvvYBAAGAthfAHpfNAL9OARy2KS615b72AQABgLY/wB6XzQC/UQEctlEutd6+9gEAAYC2WcAel80Av0wABr9hgKy2abaCtuQAALVJAWq2amADwAD9UQIAAAEDtpO25AAAAAEBAbadAAAIgJZgA8AAQKYAAGADvc0BSratAR62ur3cAQABHLbHLrXivvYBAAGAtt3AHpiJAL9NAAa/TYCstum27rkcAAC14r72AAAAAQO3A7kcAAAAAQEBtw0AAACAlmADwABApgAAYAPAAPo/AT4BSrenASIiIiIiHLeuLrXWvvYCAAKAt7zAHpjfFrfSFrfDLrNAvxyxTbidAL9JARy37C611r72AgACgLf6wB6Y3xa4EBa4AS6zQL8csU64ngC/SQEcuCcutda+9gIAAoC4NcAemN8WuEsWuDwus0C/HLFcuKwAv0kBHLhqLrXWvvYCAAKAuHjAHpjfFriOFrh/LrNAvxyxXbitAL9JARy4qC611r72AgACgLi2wB6Y3xa4zBa4vS6zQL8csV64rgC/SQEcuOYutda+9gIAAoC49MAemN8WuQoWuPsus0C/HLFPuJ8Av0kGv2KArLkhuTq5ngAAtUoBarkiYAPAAP1RAgAAAQO5TLmeAAAAAQEBuVYAAAiAlmADwABApgAAYAO9zQFKuWYBHrlzvdwBAAEcuYAuteS+9gEAAYC5l8AemgUAv04ABr9OgKy5o7mouhAAALXkvvYAAAABA7m+uhAAAAABAQG5yAAAAICWYAPAAECmAABgA8AA+j8BPgFKudUBHLncLrXWvvYCAAKAuerAHppbFroAFrnxLrNAvxyxUbihAL9JBr9jgKy6Fbouuo4AALVLAWq6FmADwAD9UQIAAAEDuj66jgAAAAEBAbpIAAAIgJZgA8AAQKYAAGADvc0BSrpYAR66Zb3cAQABHLpyLrXjvvYBAAGAuofAHprDAL9PAAa/T4CsupO6mLvRAAC14772AAAAAQO6rLvRAAAAAQEBurYAAACAlmADwABApgAAYAPAAPo/AT4BSrrDASIiIhy6yi611r72AgACgLrYwB6bGRa67ha63y6zQL8csUy4nAC/SQEcuwcutda+9gIAAoC7FcAemxkWuysWuxwus0C/HLFZuKkAv0kBHLtJLrXWvvYCAAKAu1fAHpsZFrttFrteLrNAvxyxWriqAL9JARy7kC611r72AgACgLuewB6bGRa7tBa7pS6zQL8csVu4qwC/SQa/ZICsu9a777xTAAC1TAFqu9dgA8AA/VECAAABA7wDvFMAAAABAQG8DQAACICWYAPAAECmAABgA73NAUq8HQEevCq92gEAARy8Ni615r72AQABgLxMwB6b8wC/UAAGv1CArLxYvF29AQAAtea+9gAAAAEDvHK9AQAAAAEBAbx8AAAAgJZgA8AAQKYAAGADwAD6PwE+AUq8iQEiHLyWgLyQwB6cSbXnAQABFrypLrWqvva+/ADAAEDDARy8wi612b72AgACgLzWwB6cSRa87Ba83S6zQL8csVa4pgC/Swa/ZYCsvQa9H745AAC1TQFqvQdgA8AA/VECAAABA70rvjkAAAABAQG9NQAACICWYAPAAECmAABgA73NAT4BSr2AAR69lL3aAQABIhy9qS611772AgACgL27wB6c0Ra90Ra9wi6zQL8csVm4qQC/SgEcvfMutde+9gIAAoC+BcAenNEWvhsWvgwus0C/HLFbuKsAv0oABr9mgKy+Pr5XvuwAALVOAWq+P2ADwAD9UQIAAAEDvmi+7AAAAAEBAb5yAAAIgJZgA8AAQKYAAGADvc0BPgFKvn8BHr6TvdoBAAEcvqgutde+9gIAAoC+usAenWYWvtAWvsEus0C/HLFauKoAv0oABr9ngKy+8b8Kv5sAALVPAWq+8mADwAD9UQIAAAEDvxi/mwAAAAEBAb8iAAAIgJZgA8AAQKYAAGADvc0BPgFKvy8BHr9DvdoBAAEcv1gutdm+9gIAAoC/bMAendUWv4IWv3Mus0C/HLFYuKgAv0sABr9ogKy/oL+5wABAUgAAtVABar+hYAPAAP1RAgAAAQO/y8AAQFIAAAABAQG/1QAACICWYAPAAECmAABgA73NAT4BSr/iAR6/9r3aAQABHMAAQAsutdm+9gIAAoDAAEAfwB6eSBbAAEA1FsAAQCYus0C/HLFXuKcAv0sABr9pgKzAAEBXwABAcMAAQPMAALVRAWrAAEBYYAPAAP1RAgAAAQPAAEB3wABA8wAAAAEBAcAAQIEAAAiAlmADwABApgAAYAO9zQE+AUrAAECOAR7AAECivdoBAAEcwABAty612b72AgACgMAAQMvAHp7LFsAAQOEWwABA0i6zQL8csUy4nAC/SwAGv2qArMAAQPjAAEERwABBcwAAtVIBasAAQPlgA8AA/VECAAABA8AAQSLAAEFzAAAAAQEBwABBLAAACICWYAPAAECmAABgA73NAUrAAEE8AR7AAEFJvdwBAAEcwABBVi615b72AQABgMAAQWzAHp9UAL9RAAa/UYCswABBeMAAQX3AAEHmAAC15b72AAAAAQPAAEGSwABB5gAAAAEBAcAAQZwAAACAlmADwABApgAAYAPAAPo/AT4BSsAAQakBHMAAQbAutda+9gIAAoDAAEG+wB6fvhbAAEHUFsAAQcUus0C/HLFLuJsAv0kGv2uArMAAQevAAEIEwABCigAAtVQBasAAQexgA8AA/VECAAABA8AAQg3AAEKKAAAAAQEBwABCFwAACICWYAPAAECmAABgA73NAT4BSsAAQiQBHsAAQji92gEAASIcwABCU4DAAEJNwB6gPrXoAQABFsAAQmMutaq+9r78AMAAQL8AIRbAAEJ7gMAAQnXAHqA+td3AAEDUAAa/bICswABCj8AAQqjAAENBAAC1VQFqwABCkGADwAD9UQIAAAEDwABCsMAAQ0EAAAABAQHAAEK6AAAIgJZgA8AAQKYAAGADvc0BPgFKwABCxwEewABC273aAQABIiEWwABC7oDAAELowB6g1rXdwABA1AAcwABDBC612b72AgACgMAAQxjAHqDWFsAAQy4WwABDHy6zQL8csV24rQC/SwAGv22ArMAAQ0bAAENfwABD+AAAtVYBasAAQ0dgA8AA/VECAAABA8AAQ2fAAEP4AAAAAQEBwABDcQAACICWYAPAAECmAABgA73NAT4BSsAAQ34BHsAAQ5K92gEAASIhFsAAQ6WAwABDn8AeoXa13cAAQNQAHMAAQ7sutdm+9gIAAoDAAEPPwB6hdhbAAEPlFsAAQ9Yus0C/HLFeuK4Av0sABr9ugKzAAEP9wABEFsAARL0AALVXAWrAAEP+YAPAAP1RAgAAAQPAAEQnwABEvQAAAAEBAcAARDEAAAiAlmADwABApgAAYAO9zQE+AUrAAEQ+AR7AAERSvdoBAAEiIRbAAERlgMAARF/AHqIWtd3AAEDUABzAAER7LrXZvvYCAAKAwABEj8AeohYWwABEpRbAAESWLrNAvxyxXLisAL9LAAa/b4CswABEwsAARNvAAEV0AAC1WAFqwABEw2ADwAD9UQIAAAEDwABE8sAARXQAAAABAQHAAET8AAAIgJZgA8AAQKYAAGADvc0BPgFKwABFCQEewABFHb3aAQABHMAARTIutdm+9gIAAoDAAEVGwB6ithbAAEVcFsAARU0us0C/HLFcuKwAv0sABr9wgKzAAEV5wABFksAARgAAALVZAWrAAEV6YAPAAP1RAgAAAQPAAEWhwABGAAAAAAEBAcAARasAAAiAlmADwABApgAAYAO9zQE+AUrAAEW4AR7AAEXMvdoBAAEcwABF3oDAAEXYwB6jP7XoAQABFsAARe4utaq+9r78AMAAQL8ABr9xgKzAAEYFwABGHsAARqMAALVaAWrAAEYGYAPAAP1RAgAAAQPAAEYmwABGowAAAAEBAcAARjAAAAiAlmADwABApgAAYAO9zQE+AUrAAEY9AR7AAEZRvdoBAAEiHMAARmyAwABGZsAeo8C16QEAARbAAEZ8LrWqvva+/ADAAEDBACEWwABGlIDAAEaOwB6jwLXdwABA1AAGv3KArMAARqjAAEbBwABHGQAAtVsBasAARqlgA8AA/VECAAABA8AARs/AAEcZAAAAAQEBwABG2QAACICWYAPAAECmAABgA73NAUrAAEbpAR7AAEb2vdoBAAEcwABHAi616r72AQABgMAARxLAHqRYAL9SAAa/UoCswABHHsAARyPAAEd3AAC16r72AAAAAQPAAEcywABHdwAAAAEBAcAARzwAAACAlmADwABApgAAYAPAAPo/AT4BSsAAR0kBHMAAR1aAwABHUMAepMK16QEAARbAAEdmLrWqvva+/ADAAEDBBr9zgKzAAEd8wABHlcAASB0AALVcAWrAAEd9YAPAAP1RAgAAAQPAAEedwABIHQAAAAEBAcAAR6cAAAiAlmADwABApgAAYAO9zQE+AUrAAEe0AR7AAEfIvdoBAAEiHMAAR+OAwABH3cAepTq16wEAARbAAEf2LrWqvva+/ADAAEDAACEWwABIDoDAAEgIwB6lOrXdwABA1AAGv3SArMAASCLAAEg7wABIqwAAtV0BasAASCNgA8AA/VECAAABA8AASEnAAEirAAAAAQEBwABIUwAACICWYAPAAECmAABgA73NAT4BSsAASGABHsAASHS92gEAARzAAEiGgMAASIDAHqXStesBAAEWwABImS61qr72vvwAwABAwAAGv3WArMAASLDAAEjJwABJUAAAtV4BasAASLFgA8AA/VECAAABA8AASNLAAElQAAAAAQEBwABI3AAACICWYAPAAECmAABgA73NAT4BSsAASOkBHsAASP292gEAASIcwABJGIDAAEkSwB6mU7XsAQABFsAASSkutaq+9r78AMAAQMIAIRbAAElBgMAASTvAHqZTtd3AAEDUAAa/doCswABJVcAASW7AAEnIAAC1XwFqwABJVmADwAD9UQIAAAEDwABJfcAAScgAAAABAQHAAEmHAAAIgJZgA8AAQKYAAGADvc0BSsAASZcBHsAASaS92gEAARzAAEmwLrXtvvYBAAGAwABJwcAepusAv1MABr9TgKzAAEnNwABJ0sAASigAALXtvvYAAAABA8AASeLAAEooAAAAAQEBwABJ7AAAAICWYAPAAECmAABgA8AA+j8BPgFKwABJ+QEcwABKBoDAAEoAwB6nVbXsAQABFsAAShcutaq+9r78AMAAQMIGv3eArMAASi3AAEpGwABKzgAAtWABasAASi5gA8AA/VECAAABA8AASk7AAErOAAAAAQEBwABKWAAACICWYAPAAECmAABgA73NAT4BSsAASmUBHsAASnm92gEAASIcwABKlIDAAEqOwB6nzbXnAQABFsAASqcutaq+9r78AMAAQMMAIRbAAEq/gMAASrnAHqfNtd3AAEDUAAa/eICswABK08AASuzAAEtcAAC1YQFqwABK1GADwAD9UQIAAAEDwABK+sAAS1wAAAABAQHAAEsEAAAIgJZgA8AAQKYAAGADvc0BPgFKwABLEQEewABLJb3aAQABHMAASzeAwABLMcAeqGW15wEAARbAAEtKLrWqvva+/ADAAEDDAAa/eYCswABLYcAAS3rAAEvYAAC1YgFqwABLYmADwAD9UQIAAAEDwABLi8AAS9gAAAABAQHAAEuVAAAIgJZgA8AAQKYAAGADvc0BSsAAS6UBHsAAS7K92gEAARzAAEu+LrXuvvYBAAGAwABL0cAeqOYAv1QABr9UgKzAAEvdwABL4sAATJEAALXuvvYAAAABA8AAS/TAAEyRAAAAAQEBwABL/gAAAICWYAPAAECmAABgA8AA+j8BPgFKwABMCwEiIiIcwABMEi615r72AQABgMAATCjAHqlQAL9QARzAAEw6LrXqvvYBAAGAwABMSsAeqVAAv1IBHMAATFwute2+9gEAAYDAAExtwB6pUAC/UwEcwABMfy613r72AQABgMAATIfAHqlQAL9MBr96gKzAAEyWwABMq8AATOQAAJcCAWrAAEyXYAPAAP1RAgAAAQPAAEywwABM5AAAAAICAsAATLoAAAiB1WADwABApgDAAEzGAAAIgkpgA8AAQKYAAGADwABApgFKwABMzAEcwABMzoDAAEzMwB6qDpcCAgACgcAATNTAHqoeFsAATNcutaq+9r78AMAAQMwGv3uArMAATOnAAEz+wABNSwAAlwMBasAATOpgA8AA/VECAAABA8AATQrAAE1LAAAAAgICwABNFAAACIHVYAPAAECmAMAATSAAAAiCSmADwABApgAAYAPAAECmAUrAAE0sARzAAE0ugMAATSzAHqqdlwMCAAKBwABNO8Aeqq0WwABNPi61qr72vvwAwABAzga/fICswABNUMAATWnAAE3NAAC1ZAFqwABNUWADwAD9UQIAAAEDwABNdMAATc0AAAACAgLAAE1+AAAIgdVgA8AAQKYAwABNigAACIJKYAPAAECmAABgA73NAUrAAE2WAR7AAE2jvdoBAAEcwABNsYDAAE2vwB6rLLXcAgACgcAATbzAHqs8FsAATb8utaq+9r78AMAAQM0ABr99gKzAAE3SwABN68AATkIAAIQCAWrAAE3TYAPAAP1RAgAAAQPAAE32wABOQgAAAAEBAcAATgAAAAiB1WADwABApgAAYAO9zQFKwABODAEewABOGb3cAQABHMAATiiAwABOJsAeq8SEAgEAARbAAE40LrWqvva+/ADAAEDKAAa/foCswABOR8AATmHAAE7LAAC1ZQFqwABOSGADwAD9UQIAAAEDwABOgMAATssAAAABAQHAAE6PAAAAgJZgA8AAYNIAAGADvecBPgFKwABOnAEewABOo8AAcc8CAAIWwABOsy61qr72vvyAwABOwcAerEMABr9/gKzAAE7QwABO6sAAT2sAALVwAWrAAE7RYAPAAP1RAgAAAQPAAE73wABPawAAAAEBAcAATwYAAACAlmADvecAAGADvecBPgJJwABPEyXAAE8dgMAATxfAHqy3YAPAAEBLPgFKwABPNQEWwABPQhTAAE88wB6stwABYAPAAEBLhczAAEBSP0rAAE9VARbAAE9cLp5tvx0Gv4CArMAAT3DAAE+KwABQZgAAtXEBasAAT3FgA8AA/VECAAABA8AAT5nAAFBmAAAAAQEBwABPqAAAAICWYAO95wAAYAO95wE+AknAAE+1JcAAT7+AwABPucAerU9gA8AAQEs+AUrAAFAfATUAAAABAGADwABApgEWwABQLBTAAFAmwB6tTwABYAPAAEBLhc3AAEBRIxzAAFA2gQDAHq2HSAEAASsAABbAAFA5Lp5tvx2BAMAerYcBYAPAAECmP0rAAFBQARbAAFBXLp5t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tYECAAKBwABYsMAetLoWwABYui61qr72vvwAwABA0AAGv4iArMAAWNHAAFjqwABZkgAAgxcBasAAWNJgA8AA/VECAAABA8AAWPLAAFmSAAAAAgICwABZDQAACLWDYAPAAECmAMAAWSoAAAi1hGADwABApgAAYAO9zQE+AUrAAFk4AR7AAFlMvdwBAAEcwABZa4DAAFliwB61RLXyAgACgcAAWXjAHrVUFsAAWYAutaq+9r78AMAAQMcABr+JgKzAAFmXwABZsMAAWj8AALWFAWrAAFmYYAPAAP1RAgAAAQPAAFm0wABaPwAAAAICAsAAWcgAAAi1hGADwABApgDAAFnjAAAItYNgA8AAQKYAAGADvc0BPgFKwABZ8wEewABaB73aAQABHMAAWhqAwABaE8Aetd618wIAAoHAAFojwB617hbAAFotLrWqvva+/ADAAEDGAAa/ioCswABaRMAAWl3AAFrrAAC1hgFqwABaRWADwAD9UQIAAAEDwABab8AAWusAAAACAgLAAFqKAAAIhX9gA8AAQKYAwABanQAAAKTxYAPAAEtkAABgA7zTAT4BSsAAWq0BHMAAWr2AwABatMAetni1hgIAAoHAAFrQwB62iBbAAFraLrWqvva+/ADAAEDRBr+LgKzAAFrwwABbCcAAW6QAALGBAWrAAFrxYAPAAP1RAgAAAQPAAFsWwABbpAAAAAEBAcAAWyAAAAisw2ADwABApgAAYAO9zQE+AUrAAFssAR7AAFtAvdoBAAEcwABbUYDAAFtMwB63B7XRAgACFsAAW4AWwABbcRbAAFtkLrWqvva+/LNAwABNM7FWuKYWwABbki61qr72vvwAwABAyAAGv4yArMAAW6nAAFvCwABdIAAAtYcBasAAW6pgA8AA/VECAAABA8AAW9rAAF0gAAAAAQEBwABb7gAACKzDYAPAAECmAABgA73NAT4BSsAAW/oBHsAAXA692gEAASIiIRzAAFwfgMAAXBrAHreoSAEAASsAwABAxQAcwABcN4DAAFwywB63qLXRAgACFsAAXGoWwABcWxbAAFxOLrWqvva+/LNAwABNM7FWuKYWwABcfC61qr72vvwAwABAyAAhHMAAXMyAwABcx8Aet6i10QIAAhbAAFz/FsAAXPAWwABc4y61qr72vvyzQMAATTOxS7ibFsAAXQ4utaq+9r78AMAA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nICswABpZ8AAaYHAAGoIAAC1egFqwABpaGADwAD9UQIAAAEDwABpksAAaggAAAABAQHAAGmhAAAAgJZgA73nAABgA73nAT4CScAAaa4lwABpuIDAAGmywB7DMmADwABART4BSsAAadcBFsAAaeQUwABp3sAewzIAAWADwABARbXvwABAID9KwABp+QErBr+dgKzAAGoNwABqJ8AAbEAAALWCAWrAAGoOYAPAAP1RAgAAAQPAAGpTwABsQAAAAAEBAcAAal0AAACCkGADwABiZgAAYAO95wE+A0nAAGppJcAAanKAwABqbcAew8FgA8AAYo0+AknAAGqMFsAAaqMWwABqlRTAAGqQwB7DwQABYAPAAGKNhR3AAGKQg7LAAPyMSsAAaq8BKz9KwABrigEcwABrkS61PQEAARbAAGusFMAAa6fAHsPBAAFgA8AAYo2WJsAAYo8Av0M/ScAAa8AlwABryYDAAGvEwB7DwWADwABi7ErAAGvZARbAAGvgLp5tvx0/SsAAbDEBKwa/noCswABsRcAAbFjAAGyeAAC1iQFqwABsRmADwAD9UQIAAAEDwABsZsAAbJ4AAAABAQHAAGx1AAAAgJZgA73nAABgA8AA/esBPgFKwABsggEewABsib74AQABJsAAbJQBgMAAbJTAHsS+YAPAAECmAAa/n4CswABso8AAbLjAAG1dAACwvgFqwABspGADwAD9UQIAAAEDwABs18AAbV0AAAABAQHAAGzjAAAAg0RgA8AAXUEAAGADwABApgE+AUrAAGzxARzAAGz/gMAAbPjAHsUwsLoBAWADwABApgE0wABtHQPAAG0dwABtWAAAAAAAAABgA8AAQKYBSsAAbSMBHsAAbSfAAEC3AgACgMAAbUPAHsUwFsAAbUsutaq+9r78AADAAF1MBr+ggKzAAG1iwABtc8AAbh4AALDFAWrAAG1jYAPAAP1RAgAAAQPAAG2PwABuHgAAAAICAsAAbZkAAACEO2ADwABc8gDAAG2yAAAIgJZgA8AAQKYAAFwBPgE9HMAAbcSAwABtv8AexeawbwIBYAPAAECmAoHAAG3jwB7F9jTAAG3qA8AAberAAG4ZAAAAAQEBwABt9AAAAICWYAPAAECmAABcAUrAAG3+ARzAAG4EgsAAbf7AHsZCrxYBAAGAwABuFMAexeYAwABAuQDAAFz5AAAe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AAC2qgFqwABEl2ADwAD9UQIAAAEDwABEvMAAROcAAAABAQHAAETFAAAAg+5gA4JLAABgA73nAUrAAETOATUAAAABAGADwABBOwEWwABEzi623MAAQSjAAEGHIxzAAETVgQDAH8dmSAEAASsAACscwABE1YEAwB/HZraqAQABJsAAROIBgMAAROLAH8dLYAOCUgDAAEFFAWADvecGwABBkoC2wABE68AARQXAAEVAAAC2qwFqwABE7GADwAD9UQIAAAEDwABFE8AARUAAAAABAQHAAEUcAAAAg+5gA4JLAABgA73nAUrAAEUlATUAAAABAGADwABBOwEWwABFJS623MAAQSjAAEGHIxzAAEUsgQDAH8gUSAEAASsAACscwABFLIEAwB/IFLarAQABJsAARTsBgMAARTvAH8f5YAOCUgDAAEFGAWADvecGwABBk4C2wABFRMAARV7AAEWvAAC2rAFqwABFRWADwAD9UQIAAAEDwABFdMAARa8AAAABAQHAAEV9AAAAg+5gA4JLAABgA73nAUrAAEWMATUAAAABAGADwABBOwEWwABFjC623MAAQSjAAEGHIxzAAEWTgQDAH8jCSAEAASsAACscwABFk4EAwB/IwrasAQABJsAARaoBgMAARarAH8inYAOCUgDAAEFHAWADvecGwABBlIC2wABFs8AARc3AAEYcAAC2rQFqwABFtGADwAD9UQIAAAEDwABF4sAARhwAAAABAQHAAEXrAAAAg+5gA4JLAABgA73nAUrAAEX6ATUAAAABAGADwABBOwEWwABF+i623MAAQSjAAEGHIxzAAEYBgQDAH8lwSAEAASsAACscwABGAYEAwB/JcLatAQABJsAARhcBgMAARhfAH8lVYAOCUgDAAEFIAWADvecAAB/CbQAfxH4AH8ZnAB/HFQAfx8MAH8hxAB/JHwAfyc0AAAAHAsAAQZeAtsAARiHAAEYnwABLPAO23gAAAWABwAD9UQABYAHAAEFOBATAAEGZgLbAAEaSwABGnQmk3wFqwABGdGADwAD9UQJgA8AATSsABMAAQZuAtsAARs7AAEbiCbbfwABBKABgA8AAQagABMAAQZyAtsAARvrAAEcRCbbCwABBKABgA73nAATAAEGdgLbAAEc0wABHXAmlFwFqwABHFmADwAD9UQJgA8AAQr4BH8AAR0fAAEMKAAAAAAEFwABBp4C2wABHYcAAR2HAAEhnAAAAA8AAR4LAAEhnAAAAAQEBwABHiAAABKTfYAPAAE0rAABgA8AAQZcBPwQIAcAAQZmAAMAfytMIAMAAQZsfwABHuMAAQbgBAAEWwABIDBbAAEf4gMAAR+zAH8rTsL3AAE00nm299AAIAMAAQZwWwABIXBbAAEhIgMAASDzAH8rTsL3AAE00nm299AkBwABHYcAA/WcAAAAABwbAAEGfgLbAAEhswABIfcAASOQAAK8WAWrAAEhtYAPAAP1RAgAAAQPAAEiMwABI5AAAAAICAsAASJYAAACEO2ADwABc8gDAAEirAAAAs5lgA8AAcewAAFwBPgE9HMAASMKAwABIvcAfy5GvOgEAASkAwABc/AbAAEGggLbAAEjpwABI+sAASS8AALa0AWrAAEjqYAPAAP1RAgAAAQPAAEkYwABJLwAAAAEBAcAASSEAAACD7mADgksAAGADwAD6PwFKwABJKgEqBsAAQaGAtsAASTTAAElOwABJxgAAtrMBasAASTVgA8AA/VECAAABA8AASWLAAEnGAAAAAgICwABJbAAAAKTxYAPAAEtkAMAASYQAAACsw2ADvecAAGADvecBPgFKwABJkAEWwABJtxbAAEmjFsAASZcupN/AAEGZsL3AAE00nm299AbAAEGigLbAAEnLwABJ5cAASjAAALQ0AWrAAEnMYAPAAP1RAgAAAQPAAEn2wABKMAAAAAEBAcAASf0AAACA7WADvQwAAGADvecBPgFKwABKDgEWwABKFS62wsAAQSjAAEGcBsAAQaOAtsAASjXAAEphwABKqgAAtDIBasAASjZgA8AA/VECAAABA8AASm/AAEqqAAAAAQEBwABKfQAAAIJmYAO80wAAYAPAAEEpAT4BSsAASosBFsAASpIutt/AAEEowABBmwbAAEGkgLbAAEqvwABKycAASvQAALa2AWrAAEqwYAPAAP1RAgAAAQPAAErawABK9AAAAAEBAcAASucAAACD7mADglIAAGADvecBSsAASvABKwbAAEGlgLbAAEr5wABLE8AASzoAALa1AWrAAEr6YAPAAP1RAgAAAQPAAEsgwABLOgAAAAEBAcAASy0AAACD7mADglIAAGADvecBSsAASzYBKwAAH8tbAB/L0AAfzCMAH8ylAB/NBwAfzWsAH828AB/ODQAAAAcCwABBqIC2wABLP8AAS0XAAE8DA7bgAAABYAHAAP1RAAFgAcAAQSkBBMAAQaqAtsAAS7PAAEu+CZ5tAGADvecAAQXAAEG4gLbAAEvDwABLw8AAS/sAAAADwABL6cAAS/sAAAABAQHAAEvvAAAEnm1gA73nAABgA8AAQagBPwIIAcAAQaqAAMAfzpgJAcAAS8PAAP1nAAAAAAoGwABBrIC2wABMAMAATB7AAEwxAQCCkAFqwABMAWADwAD9UQIAAAEDwABMI8AATDEAAAAAAAAAYAO95wFKwABMJgEWwABMJi6ebcAAQaoGwABBrYC2wABMNsAATFTAAExtAQCFOgFqwABMN2ADwAD9UQIAAAEDwABMX8AATG0AAAAAAAAAYAO95wFKwABMYgEWwABMYi6ebcAAQaoGwABBroC2wABMcsAATIfAAEycAQC2qAFqwABMc2ADwAD9UQIAAAEDwABMlMAATJwAAAAAAAAAYAPAAPo/AUrAAEyXASoGwABBsYC2wABMocAATLvAAEzmAAC2rQFqwABMomADwAD9UQIAAAEDwABM0MAATOYAAAABAQHAAEzZAAAAg+5gA4JLAABgA73nAUrAAEziASsGwABBsoC2wABM68AATQXAAE0xAAC2rAFqwABM7GADwAD9UQIAAAEDwABNG8AATTEAAAABAQHAAE0kAAAAg+5gA4JLAABgA73nAUrAAE0tASsGwABBs4C2wABNNsAATVDAAE10AAC2qwFqwABNN2ADwAD9UQIAAAEDwABNXsAATXQAAAABAQHAAE1nAAAAg+5gA4JLAABgA73nAUrAAE1wASsGwABBtIC2wABNecAATZPAAE21AAC2qgFqwABNemADwAD9UQIAAAEDwABNn8AATbUAAAABAQHAAE2oAAAAg+5gA4JLAABgA73nAUrAAE2xASsGwABBtYC2wABNusAATdTAAE30AAC2qQFqwABNu2ADwAD9UQIAAAEDwABN3sAATfQAAAABAQHAAE3nAAAAg+5gA4JLAABgA73nAUrAAE3wASsGwABBr4C2wABN+cAATg7AAE4jAQC2pwFqwABN+mADwAD9UQIAAAEDwABOG8AATiMAAAAAAAAAYAPAAPo/AUrAAE4eASoGwABBtoC2wABOKMAATjnAAE8BAACvFgFqwABOKWADwAD9UQIAAAEDwABOSMAA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AQEBmPsAAACD7mADgksAAGADwABB4QFKmQQBKwbAAEITgLeZTplgmYUAAKM5AAAAAQOZb5mFAAAAAQEBmXgAAACD7mADgksAAGADwABB4QFKmYEBKwbAAEIUgLeZ+5oNmi8AALcJAAAAAQOaJZovAAAAAAAAAGADwABB4QFKmisBKwbAAEIVgLeabZp/mp8AALcKAAAAAQOaiZqfAAAAAQEBmpIAAACD7mADgksAAGADwABB4QFKmpsBKwbAAEIWgLea55r5mxkAALcLAAAAAQObA5sZAAAAAQEBmwwAAACD7mADgksAAGADwABB4QFKmxUBKwbAAEIXgLebZJt2m44AALcMAAAAAQObhJuOAAAAAAAAAGADwABB4QFKm4oBKwbAAEIYgLeb1Jvmm/4AALcNAAAAAQOb9Jv+AAAAAAAAAGADwABB4QFKm/oBKwbAAEIZgLecTZxfnIUAALcOAAAAAQOcb5yFAAAAAQEBnHgAAACD7mADgksAAGADwABB4QFKnIEBKwbAAEIagLec05zlnRMAALcPAAAAAQOc/Z0TAAAAAQEBnQYAAACD7mADgksAAGADwABB4QFKnQ8BKwbAAEIbgLedZ515naEAALcQAAAAAQOdi52hAAAAAQEBnZQAAACD7mADgksAAGADwABB4QFKnZ0BKwbAAEIcgLed854Fni0AALcRAAAAAQOeF54tAAAAAQEBniAAAACD7mADgksAAGADwABB4QFKnikBKwbAAEIdgLeegJ6SnrkAALcSAAAAAQOeo565AAAAAQEBnqwAAACD7mADgksAAGADwABB4QFKnrUBKwbAAEIegLefD58hn0QAALcTAAAAAQOfLp9EAAAAAQEBnzcAAACD7mADgksAAGADwABB4QFKn0ABKwbAAEIfgLeflJ+mn8YAALcUAAAAAQOfsJ/GAAAAAQEBn7kAAACD7mADgksAAGADwABB4QFKn8IBKwbAAEIggLegG6AtoFAAALcVAAAAAQOgOqBQAAAAAQEBoEMAAACD7mADgksAAGADwABB4QFKoEwBKwbAAEIhgLegnKCuoM8AALcWAAAAAQOguaDPAAAAAQEBoMIAAACD7mADgksAAGADwABB4QFKoMsBKwbAAEIigLehGqEsoUwAALcXAAAAAQOhNqFMAAAAAQEBoT8AAACD7mADgksAAGADwABB4QFK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usAARCHAAEQ0wABIHgAAopsBasAARCJgA8AA/VECAAABA8AARDnAAEgeAAAABwcHwABETgAAAIJmYAO80wDAAERpAAAApN9gA8AATSsAwABElwAAALa7YAPAAEFOAMAARLQAAACvB2ADwABCpwDAAETTAAAAt91gA7ZXAMAARPAAAACvdGADwABk/gDAAEUMAAAAr3VgA8AAXM8AAGADwABEmAE+Az0jHMAARSgWwABFGy6328AAQwvAAENZSAEAASsAwAD9XhfAAEUbLrfbwABDCx/AAEUwwABCmwEAARbAAEVQgcAARUTAIFeKpQ3AAE06AMAAQ1krAWADwABChD0jHMAARXcWwABFZi633MAAQwvAAENaSAEAASsAwAD9XhfAAEVmLrfcwABDCx/AAEV/wAB8RQIAAAKC+hbAAEW3FsAARa4usfLAAEMLwABDVIL6gTy33hbAAEXxFsAARegusfLAAEMLwABDVIK7gUXAAENaKwFgA8AAfDxKwABGCgEcwABGFxbAAEYRLrfYwABDC8AAQ1OWrgEBYAPAAESYATTAAEYfA8AARh/AAEgZAAAAAAAAAGADwABEmAE+Ak7AAEZAwABGSAAAhCFgA8AAer0BH8AARk7AAHvLEAAQFsAARm8usfLAAEMLwABDVBbAAEaDLqSwwABDC8AAQ1WAwABGmMAgV3wcwABGthbAAEaqLreZwABDC8AAQ1e33wEAAYDAAEbIwCBXfADAAHILFsAARtsut9nAAEMLwABDVhbAAEb0LreZwABDC8AAQ1eCwABHC8AgV5qBwABHHsAgV4qEwABHNcAgV7qFwABHScAgV8iGwABHWsAgV9gWwABHdYPAAEdtwCBXqrdjwABCrRbAAEePg8AAR4fAIFeqt2HAAEKrFsAAR6Uut9rAAEMLwABDWBbAAEfLLrfbwABDC8AAQ1kWwABH4y633MAAQwvAAENaAErAAEf8ARzAAEgLh8AASAPAIFkNopsAAAAAwAB7hQCkDgAAIFdGACBaRAAAAAECwABDX4C6wABII8AASCnAAFRZA7fgAAABYAHAAP1RAAFgAcAAchUCBMAAQ2KAusAASI/AAEimCbQfwABDCwBgA8AAQU4ABMAAQ2OAusAASMrAAEjYGLfhwABDCwBgA8AAQSkBKwEFwABDd4C6wABI3cAASN3AAElgAAAAA8AASPnAAElgAAAAAgICwABJDgAAAIJFYAO80wDAAEkbAAAEtB9gA8AAQU4AAGADwABDXwE+AT0XwABJOi634cAAQwscwABJSy634sAAQwsBAAGAwABJVcAgWtwAwABDZsAAQ2MCCAHAAENigQDAIFrqCQHAAEjdwAD9ZwAAAAAQBsAAQ2aAusAASWXAAEmFwABKCQAAt+LAAEMLAAAAAQPAAEmOwABKCQAAAAEBAcAASZwAAACDTWADvNMAAGADwABBKQFKwABJqAEcwABJyxbAAEmoLrQfwABDC8AAQ2K0MgEAASMlwABJ3IDAAEnawCBbfGADvQcWwABJ+RTAAEn3wCBbfAABYAO9B5jbvQmAwABKB8AgW3wBYAO80wDAAEFTBsAAQ2eAusAASg7AAEoowABKvwAAt+MBasAASg9gA8AA/VECAAABA8AASjfAAEq/AAAAAQEBwABKRwAAAIJqYAO86AAAYAO95wE+AUrAAEpXAR7AAEpzwAB8hQIAAoDAAEqZwCBcJhbAAEqjLrQfwABDC8AAQ2IABsAAQ2iAusAASsTAAErewABLcQAAt+QBasAASsVgA8AA/VECAAABA8AASvbAAEtxAAAAAgICwABLEgAAAIPuYAOFmADAAEssAAAAsL1gA73yAABgA73nAT4BSsAAS0cBHMAAS10WwABLTi634cAAQwvAAENjtqkBAAGAwABLaMAgXJ4AwABBMQbAAENpgLrAAEt2wABLkMAAS+cAALflAWrAAEt3YAPAAP1RAgAAAQPAAEuhwABL5wAAAAEBAcAAS7EAAACD7mADhNkAAGADvecBPgFKwABLvQEcwABL0xbAAEvELrfhwABDC8AAQ2O2qQEAAYDAAEvewCBdJgDAAEExBsAAQ2qAusAAS+zAAEwGwABMaQAAt+YBasAAS+1gA8AA/VECAAABA8AATB3AAExpAAAAAQEBwABMMwAAAIPuYAOE/gAAYAO95wE+AUrAAEw/ARzAAExVFsAATEYut+HAAEMLwABDY7apAQABgMAATGDAIF2gAMAAQTEGwABDa4C6wABMbsAATIjAAE0PAAC35wFqwABMb2ADwAD9UQIAAAEDwABMmcAATQ8AAAACAgLAAEywAAAAg+5gA4TrAMAATMoAAACwvWADvfIAAGADvecBPgFKwABM5QEcwABM+xbAAEzsLrfhwABDC8AAQ2O2qQEAAYDAAE0GwCBeGgDAAEExBsAAQ2yAusAATRTAAE0uwABN/gAAtrYBasAATRVgA8AA/VECAAABA8AATT/AAE3+AAAAAgICwABNVgAAALfoYAOG3QDAAE13AAAAsL1gA73yAABgA73nAT4BSsAATZIBNQAAAAEAYAO95wEcwABNsRbAAE2ZLrQfwABDC8AAQ2K2tgEAAYDAAE3DwCBeogDAAEFYIxzAAE3QggDAIF7NSAEAASsAABbAAE3vgcAATdvAIF6wnm299IIAwCBezQFgA73nBsAAQ22AusAATgPAAE4dwABOeAAAtqsBasAATgRgA8AA/VECAAABA8AATivAAE54AAAAAQEBwABOPgAAAIPuYAOH1gAAYAO95wE+AUrAAE5KARzAAE5gFsAATlEut+HAAEMLwABDY7arAQABgMAATm/AIF9lAMAAQTMGwABDboC6wABOfcAATpfAAE8AAAC2rQFqwABOfmADwAD9UQIAAAEDwABOrMAATwAAAAABAQHAAE6/AAAAg+5gA4fWAABgA73nAT4BSsAATssBHMAATuEWwABO0i634cAAQwvAAENjtq0BAAGAwABO98AgX98AwABBNQbAAENvgLrAAE8FwABPH8AAT4oAALasAWrAAE8GYAPAAP1RAgAAAQPAAE81wABPigAAAAEBAcAAT0gAAACD7mADh9YAAGADvecBPgFKwABPVAEcwABPahbAAE9bLrfhwABDC8AAQ2O2rAEAAYDAAE+BwCBgWQDAAEE0BsAAQ3CAusAAT4/AAE+gwABQgQAAt+kBasAAT5BgA8AA/VECAAABA8AAT7XAAFCBAAAAAgICwABPzwAAAIPuYAOH1gDAAE/pAAAAsL1gA73yAABgA8AA+j8BPgJOwABQEsAAUBcAAKzDYAO95wEcwABQGS62qwEAAYDAAFAowCBg0wDAAENtSsAAUDMBFsAAUG0cwABQToHAAFA6wCBg4bWHAQABgsAAUGfAIGD6AL5gtDa91QbAAENxgLrAAFCGwABQoMAAUVsAALfqAWrAAFCHYAPAAP1RAgAAAQPAAFCxwABRWwAAAAEBAcAAUMQAAACD7mADh9YAAGADvecBPgFKwABQ0AEewABQ7MAAfIgDAAMewABRF8AAS5IAAAAAHMAAUSkutqsBAAGAwABROMAgYYgAwABDbRbA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AACD7mADwABJNgAAWwFKwABD3QEcwABD3S64ywEAAYDAAEPuwCD8gwDAAETBBsAARPaAv8AAQ/fAAEP3wABENAAAuQAAAAABA8AARAfAAEQ0AAAAAQEBwABEFQAAAIPuYAPAAEcvAABbAUrAAEQeARzAAEQeLrjLAQABgMAARC/AIPzfAMAARMEGwABE94C/wABEOMAARETAAER7AAC4nAFqwABEOWADwAD9UQIAAAEDwABEUcAARHsAAAABAQHAAERcAAAAg+5gA8AARzYAAFsBSsAARGUBHMAARGUuuQABAAGAwABEdsAg/UcAwABE9gbAAET4gL/AAER/wABEi8AARMIAALidAWrAAESAYAPAAP1RAgAAAQPAAESYwABEwgAAAAEBAcAARKMAAACD7mADwABHPQAAWwFKwABErAEcwABErC65AAEAAYDAAES9wCD9rwDAAET2BsAARPmAv8AARMbAAETSwABFDQAAuJ4BasAARMdgA8AA/VECAAABA8AAROHAAEUNAAAAAQEBwABE7gAAAIPuYAPAAEhwAABbAUrAAET3ARzAAET3LrjLAQABgMAARQjAIP4XAMAARMEGwABE+oC/wABFEcAARR3AAEVeAAC4nwFqwABFEmADwAD9UQIAAAEDwABFLMAARV4AAAABAQHAAEU5AAAAg+5gA8AASEgAAFsBSsAARUIBHMAARUIuuPoBAAGAwABFWcAg/n8AwABEyQbAAET7gL/AAEViwABFbsAARaEAALihAWrAAEVjYAPAAP1RAgAAAQPAAEV5wABFoQAAAAEBAcAARYIAAACD7mADwABH6gAAWwFKwABFiwEcwABFiy64+QEAAYDAAEWcwCD+5wDAAETIBsAARPyAv8AARaXAAEWxwABF3gAAhbMBasAARaZgA8AA/VECAAABA8AARbnAAEXeAAAAAQEBwABFvwAAAIPuYAPAAEhoAABbAUrAAEXIARzAAEXILrjLAQABgMAARdnAIP9PAMAARMEGwABE/YC/wABF4sAARe7AAEY7AAC4ogFqwABF42ADwAD9UQIAAAEDwABGBcAARjsAAAABAQHAAEYaAAAAg+5gA8AASRMAAFsBSsAARiMBHMAARiMuuPcBAAGAwABGNsAg/7cAwABExgbAAET+gL/AAEY/wABGS8AARngAALikAWrAAEZAYAPAAP1RAgAAAQPAAEZTwABGeAAAAAEBAcAARlkAAACD7mADwABIiQAAWwFKwABGYgEcwABGYi64ywEAAYDAAEZzwCEAHwDAAETBBsAARP+Av8AARnzAAEaIwABGxAAAuKABasAARn1gA8AA/VECAAABA8AARpXAAEbEAAAAAQEBwABGoAAAAIPuYAPAAEeDAABbAUrAAEapARzAAEapLrjzAQABgMAARr/AIQCHAMAARMIGwABFAIC/wABGyMAARtTAAEcWAAC4owFqwABGyWADwAD9UQIAAAEDwABG58AARxYAAAABAQHAAEb4AAAAg+5gA8AASHYAAFsBSsAARwEBHMAARwEuuJ4BAAGAwABHEcAhAO8AwABE+QbAAEUBgL/AAEcawABHJsAAR2UAALilAWrAAEcbYAPAAP1RAgAAAQPAAEc6wABHZQAAAAEBAcAAR0wAAACD7mADwABJ6QAAWwFKwABHVQEcwABHVS64/gEAAYDAAEdgwCEBVwDAAETWBsAARQKAv8AAR2nAAEd1wABHugAAuKYBasAAR2pgA8AA/VECAAABA8AAR4nAAEe6AAAAAQEBwABHmwAAAIPuYAPAAEcUAABbAUrAAEekARzAAEekLrjLAQABgMAAR7XAIQG/AMAARMEGwABFA4C/wABHvsAAR8rAAEf4AAC4pwFqwABHv2ADwAD9UQIAAAEDwABH0sAAR/gAAAABAQHAAEfYAAAAg+5gA8AARiIAAFsBSsAAR+EBHMAAR+wWwABH5oDAAEfhwCECJ4CWwABGJIRNAQABLgDAAEXvBsAARQSAv8AAR/zAAEgIwABIRgAAuKgBasAAR/1gA8AA/VECAAABA8AASBbAAEhGAAAAAQEBwABIIgAAAIPuYAPAAEeeAABbAUrAAEgrARzAAEgrLrjzAQABgMAASEHAIQKaAMAARMIGwABFBYC/wABISsAASFbAAEiJAACwqwFqwABIS2ADwAD9UQIAAAEDwABIYcAASIkAAAABAQHAAEhqAAAAg+5gA8AASMwAAFsBSsAASHMBHMAASHMuuPsBAAGAwABIhMAhAwIAwABEygbAAEUGgL/AAEiNwABImcAASNIAALipAWrAAEiOYAPAAP1RAgAAAQPAAEinwABI0gAAAAEBAcAASLMAAACD7mADwABHtAAAWwFKwABIvAEcwABIvC649QEAAYDAAEjNwCEDagDAAETDBsAARQeAv8AASNbAAEjiwABJHQAAuKoBasAASNdgA8AA/VECAAABA8AASPHAAEkdAAAAAQEBwABI/gAAAIPuYAPAAEe9AABbAUrAAEkHARzAAEkHLrj1AQABgMAASRjAIQPSAMAARMMGwABFCIC/wABJIcAASS3AAElpAAC4rwFqwABJImADwAD9UQIAAAEDwABJOsAASWkAAAABAQHAAElFAAAAg+5gA8AAR4wAAFsBSsAASU4BHMAASU4uuPMBAAGAwABJZMAhBDoAwABEwgbAAEUJgL/AAEltwABJecAASawAALCnAWrAAEluYAPAAP1RAgAAAQPAAEmEwABJrAAAAAEBAcAASY0AAACD7mADwABHpwAAWwFKwABJlgEcwABJli64+wEAAYDAAEmnwCEEogDAAETKBsAARQqAv8AASbDAAEm8wABJ7wAAuKsBasAASbFgA8AA/VECAAABA8AAScfAAEnvAAAAAQEBwABJ0AAAAIPuYAPAAEj0AABbAUrAAEnZARzAAEnZLrjLAQABgMAASerAIQUKAMAARMEGwABFC4C/wABJ88AASf/AAEo8AAC4rAFqwABJ9GADwAD9UQIAAAEDwABKD8AASjwAAAABAQHAAEodAAAAg+5gA8AASSgAAFsBSsAASiYBHMAASiYuuMsBAAGAwABKN8AhBXIAwABEwQbAAEUMgL/AAEpAwABKTMAASosAALitAWrAAEpBYAPAAP1RAgAAAQPAAEpdwABKiwAAAAEBAcAASmwAAACD7mADwABJ8AAAWwFKwABKdQEcwABKdS64ywEAAYDAAEqGwCEF2gDAAETBBsAARQ2Av8AASo/AAEqbwABK1AAAuK4BasAASpBgA8AA/VECAAABA8AASqnAAErUAAAAAQEBwABKtQAAAIPuYAPAAEn5AABbAUrAAEq+ARzAAEq+LrjLAQABgMAASs/AIQZCAMAARMEGwABFDoC/wABK2MAASuTAAEsWAACwkwFqwABK2WADwAD9UQIAAAEDwABK7cAASxYAAAABAQHAAEr0AAAAg+5gA8AASH0AAFsBSsAASv0BHMAASv0uuKMBAAGAwABLEcAhBqoAwABFAAbAAEUPgL/AAEsawABLJsAAS1cAAIX1AWrAAEsbYAPAAP1RAgAAAQPAAEswwABLVwAAAAEBAcAASzgAAACD7mADwABI7AAAWwFKwABLQQEcwABLQS64+wEAAYDAAEtSwCEHEgDAAETKBsAARRCAv8AAS1vAAEtnwABLrAAAuLABasAAS1xgA8AA/VECAAABA8AAS3vAAEusAAAAAQEBwABLjQAAAIPuYAPAAEjSAABbAUrAAEuWARzAAEuWLrjLAQABgMAAS6fAIQd6AMAARMEGwABFEYC/wABLsMAAS7zAAEwIAAC4sQFqwABLsWADwAD9UQIAAAEDwABL0cAATAgAAAABAQHAAEvkAAAAg+5gA8AAR5UAAFsBSsAAS+0BHMAAS+0uuPMBAAGAwABMA8AhB+IAwABEwgbAAEUSgL/AAEwMwABMGMAATEUAALCoAWrAAEwNYAPAAP1RAgAAAQPAAEwgwABMRQAAAAEBAcAATCYAAACD7mADwABIKAAAWwFKwABMLwEcwABMLy64+wEAAYDAAExAwCEISgDAAETKBsAARROAv8AATEnAAExVwABMgAAAuJUBasAATEpgA8AA/VECAAABA8AATFzAAEyAAAAAAQEBwABMYQAAAIPuYAPAAElfAABbAUrAAExqARzAAExqLrjLAQABgMAATHvAIQiyAMAARMEGwABFFIC/wABMhMAATJDAAEzJAAC4lwFqwABMhWADwAD9UQIAAAEDwABMnsAATMkAAAABAQHAAEyqAAAAg+5gA8AASYkAAFsBSsAATLMBHMAATLMuuMsBAAGAwABMxMAhCRoAwABEwQbAAEUVgL/AAEzNwABM2cAATSAAALiWAWrAAEzOYAPAAP1RAgAAAQPAAEzuwABNIAAAAAEBAcAATQEAAACD7mADwABJfAAAWwFKwABNCgEcwABNCi64ywEAAYDAAE0bwCEJggDAAETBBsAARRaAv8AATSTAAE0wwABNbQAAuLIBasAATSVgA8AA/VECAAABA8AATUPAAE1tAAAAAQEBwABNVAAAAIPuYAPAAEmRAABbAUrAAE1dARzAAE1dLrj+AQABgMAATWjAIQnqAMAARNYGwABFF4C/wABNccAATX3AAE26AAC4tAFqwABNcmADwAD9UQIAAAEDwABNkMAATboAAAABAQHAAE2hAAAAg+5gA8AAScYAAFsBSsAATaoBHMAATaouuP4BAAGAwABNtcAhClIAwABE1gbAAEUYgL/AAE2+wABNysAATgcA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AAACAgLAAGO7AAAAuRxgA8AAShIAwABj0gAAALkdYAPAAEVGAABcAT4BPRfAAGPmLrkSH8AAY/bAAEoRAgACgMAAZAHAISM5gcAAZAzAISNJAMAARU8GwABFYYC/wABkIsAAZCfAAGSAAAC5HgAAAAEDwABkNcAAZIAAAAAAAAAAYAPAAPo/AUrAAGRBASIhHMAAZEsWwABkQS65EsAARU9IAQABKwDAAP1eACXAAGRlFsAAZGAWwABkVi65EsAARU+CacAASg5gA8AASlkGwABFWoC/wABkhcAAZJXAAGTvAQC5HwAAAAEDwABkqcAAZO8AAAAAAAAAYAPAAEVGAT4CScAAZK8cwABksy646AAAAADAAEVfSsAAZMMBLj9KwABk1AEWwABk2y65E8AARVAGwABFYoC/wABk9MAAZPnAAGUzAAClKgAAAAEDwABk/cAAZTMAAAAAAAAAXAE+AkAcwABlDS65GAAAAADAAEVcwABlDcAAZRQAPRfAAGUbLrkQasAAZSRgA8AA/AUVwABFTAbAAEVjgL/AAGU4wABlPcAAZaQAAIKIAAAAAQPAAGVCwABlpAAAAAEBAcAAZVAAAACCjGADwABGUwAAXAE+A0AcwABlYi65GQAAAADAAEVdwABlYsAAZWoAPRzAAGVxLrkgAgACFsAAZXougejAAEU5gMAAZYDAISTxAMAARWo9F8AAZYouuRBqwABlk2ADwAD8BSHAAEVMBsAARWSAv8AAZanAAGWuwABmTgAAuSEAAAABA8AAZbjAAGZOAAAAAQEBwABlxgAAALjNYAPAAEV9AABcAT4DQCElwABl7IDAAGXgwCEliWADwABIicAAZeDAAGX0AD0cwABl+y65BwIAAhbAAGYNLoMZwABFOIDAAGYUwCEliQDAAEU+PRzAAGYygMAAZibAISWJuSIBAAEuAMAARfAGwABFZYC/wABmU8AAZljAAGcwAAC43AAAAAEDwABmYcAAZzAAAAABAQHAAGZvAAAAuM1gA8AARX0AAFwBPgVAHMAAZokuuRoAAAAAwABFXsAAZonAAGaTAEAlwABmphbAAGahLoHowABFOWADwABGU8AAZqHAAGa1AEAhJcAAZs+AwABmw8AhJidgA8AASInAAGbDwABm1wA9HMAAZt4uuQcCAAIWwABm8C6B6MAARTmAwABm9sAhJicAwABFPj0cwABnFIDAAGcIwCEmJ7kiAQABLgDAAEXwBsAARWaAv8AAZzXAAGc6wABoSAAAuSMAAAABA8AAZ0TAAGhIAAAAAQEBwABnUgAAALjNYAPAAEV9AABcAT4HQCElwABneIDAAGdswCEnAGADwABIicAAZ2zAAGeAAEAcwABnmoDAAGeOwCEnALkKAAAAAMAARenAAGeOwABnqgBAHMAAZ7guuRoAAAAAwABFXsAAZ7jAAGfCAEAlwABn1RbAAGfQLoHowABFOWADwABGU8AAZ9DAAGfkAD0cwABn6y65BwIAAhbAAGf9LoHowABFOYDAAGgDwCEnAADAAEU+PRfAAGghgMAAaBXAIScAmf8uwABFhUAcwABoOi647gAAAADAAEV3wABoOsAAaEMABsAARWeAv8AAaE3AAGhSwABpEwAAVgAAAAEDwABoVcAAaRMAAAABAQHAAGhjAAAAuM1gA8AARX0AAFwBPgRAISXAAGiJgMAAaH3AISgQYAPAAEZTwABofcAAaJkAQCElwABos4DAAGinwCEoEGADwABIicAAaKfAAGi7AD0cwABowi65BQIAAhbAAGjTLoHowABFOYDAAGjZwCEoEADAAEU9PRzAAGj3gMAAaOvAISgQuSIBAAEuAMAARfAGwABFaIC/wABpGMAAaR3AAGnuAAC5JAAAAAEDwABpI8AAae4AAAABAQHAAGkpAAAAuSVgA8AASIkAAFwBPgRAIhzAAGlNFsAAaUYWwABpP4DAAGk7wCEozYJRwABFg2HAAPzYSAEAAZMAwAD9KAEcwABpZxbAAGlgFsAAaVmAwABpVcAhKM2CUcAARYNhwAD82EgBAAEWwABpdxbAAGlqLrjnwABFUmHAAPzYAMAA/SjAAGk7wABpfQBAHMAAaZUWwABpj4DAAGmLwCEozZn/wABFhUgBAAErAMAA/V7AAGmLwABpnAA9HMAAaagWwABpoy65EcAARU25BQIAAhbAAGm+FsAAabkuuRHAAEVNgejAAEU5gMAAacTAISjNAMAART09HMAAadKAwABpzsAhKM25IgEAAS4AwABF8AbAAEVpgL/AAGnzwABp+MAAamcAALkmAAAAAQPAAGoBwABqZwAAAAEBAcAAagcAAAC5JWADwABIiQAAXAE+Az0cwABqFxbAAGoSLrkRwABFTYRZAQABgMAAah7AISoKAMAARUBAHMAAajkWwABqM4DAAGovwCEqCpn/wABFhUgBAAEuAMAA/V7AAGovwABqQAA9HMAAakuAwABqR8AhKgq5JwAAAADAAEXxBsAARWqAv8AAamzAAGpxwABrZQAAuSAAAAABA8AAannAAGtlAAAAAgICwABqhwAAALkGYAPAAEV9AMAAapwAAAC4zWADwABFfQAAXAE+BUAhJcAAar2AwABqtsAhKrRgA8AASInAAGq2wABqxQBAISXAAGrfgcAAatPAISrEYAPAAEiJwABq08AAaucAQCIcwABq9S65GQAAAADAAEVdARzAAGsBLrkaAAAAAMAARV7AAGr1wABrCwA9HMAAaxIuuQUCAAKAwABrI8AhKrSBwABrK8AhKsQAwABFPT0cwABrSYHAAGs9wCEqxLkiAQABLgDAAEXwBsAARWuAv8AAa2rAAGtvwABsZQAAuSgAAAABA8AAa3jAAGxlAAAAAgICwABrhgAAALkGYAPAAEV9AMAAa5sAAAC4zWADwABFfQAAXAE+BUAhJcAAa7yAwABrtcAhK6pgA8AASInAAGu1wABrxABAISXAAGvegcAAa9LAISu6YAPAAEiJwABr0sAAa+YAQCIcwABr9C65GQAAAADAAEVdARzAAGwALrkaAAAAAMAARV7AAGv0wABsCgA9HMAAbBEuuQcCAAKAwABsI8AhK6qBwABsK8AhK7oAwABFPj0cwABsSYHAAGw9wCErurkiAQABLgDAAEXwBsAARWyAv8AAbGrAAGx7wABtVgAAhFkBasAAbGtgA8AA/VECAAABA8AAbIHAAG1WAAAAAQEBwABsjwAAALjNYAPAAEV9AABcAT4FQCIcwABsqS65GQAAAADAAEVdARzAAGy1LrkaAAAAAMAARV7AAGypwABsvwBAISXAAGzZgMAAbM3AISysYAPAAEiJwABszcAAbOEAPR3AAGzuhFkBAAGAwABs9cAhLKwAwABFQEAcwABtIBbAAG0agMAAbQ7AISysmf/AAEWFSAEAAS4AwAD9XsAAbQ7AAG0nAD0cwABtOoDAAG0uwCEsrLknAAAAAMAARfEGwABFbYC/wABtW8AAbWDAAG4QAAC5KQAAAAEDwABtbMAAbhAAAAABAQHAAG15AAAAmf9gA8AARUYAAFwBPgJJwABthhbAAG2VFsAAbYouuRXAAEVT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ZwBgA8AA/AUBasAAiNRgA8AA/AWypQTAAEW1gL/AAIjswACJAQa5aABgA8AA/AUBasAAiP9gA8AA/AXAAF8RBMAARbaAv8AAiRbAAIksBrlpAGADwAD8BQFqwACJKmADwAD8BbYUBMAARbeAv8AAiUHAAIleBrlqAGADwAD8BQFqwACJXGADwAD8BbjRBMAARbiAv8AAiXPAAImOBrlrAGADwAD8BQFqwACJjGADwAD8BbipBMAARbmAv8AAiaPAAIm6BrlsAGADwAD8BQFqwACJuGADwAD8BYlCBMAARbqAv8AAic/AAInxBrltAGADwAD8BQFqwACJ72ADwAD8BY38BMAARbuAv8AAigbAAIodBrluAGADwAD8BQFqwACKG2ADwAD8BZMoBMAARbyAv8AAijLAAIpJBrlvAGADwAD8BQFqwACKR2ADwAD8BZNTBMAARb2Av8AAm2PAAJtyGLlwAGADvecAAQXAAEYLgL/AAIpOwACKTsAAiv0AAAADwACKWsAAiv0AAAACAgLAAIpgAAAEglFdA8AA/KkBYAPAAEV9AMAAim0AAAS5cGADvecAAGADwABFfQE+AUAcwACKzhbAAIrHLoJRwABFg5Y2AQABNMAAitQDwACK1MAAiuQAAAABAQHAAIrVAAAAg01gA8AARX0AAGADwAD6PwFKwACK2wEhHMAAit2CwACK28AhSERIAQABKwDAAP1eAMAA/HrAAIrHwACK5QEkwACK+AInuXEWwACK8S6CUcAARYMFCAHAAEWDgADAIUfqCAHAAEW9gQDAIUgBCADAAEWBNQAAAAEAYAPAAPwFARrAAIqLwABFgjUAAAABAGADwAD8BQEbwACKi8AARYIcwACKlIIAwCFIvmQBAAGUAMAA/SqCAMAhSL4IAMAARYQxwACKt2ADwABFfQAJAcAAik7AAP1nAAAAAEoGwABFv4C/wACLAsAAixbAAIskAQCDwQFqwACLA2ADwAD9UQIAAAEDwACLH8AAiyQAAAAAAAAAYAPAAPwFAUrAAIsiARbAAIsiLrOawABFgQbAAEXDgL/AAIspwACLLsAAi0EAALlyAAAAAQPAAIs0wACLQQAAAAAAAABgA8AA+j8BSsAAizoBFsAAizouuT3AAEQlwABFigbAAEXEgL/AAItFwACLSsAAi24AALlzAAAAAQPAAItTwACLbgAAAAAAAABcAT4BPRfAAItcLrk9wABEJSnAAEWKBsAARcCAv8AAi3PAAIt8wACLkQEAuXQAAAABA8AAi4bAAIuRAAAAAAAAAGADwAD6PwFKwACLiQEcwACLiS65cgAAAADAAEXDBsAARcWAv8AAjC7AAIwzwACMzgAAuXUAAAABA8AAjDnAAIzOAAAAAQEBwACMTgAAALbjYAO98gAAYAPAAPo/AT4BSsAAjFwBIiIhHMAAjHAWwACMZC60SsAARYi5dgAAAADAAHgMACEcwACMmRbAAIyNLrRKwABFiLl3AAAAAMAAeA0AIRzAAIy6Lrl4AQABgMAAjMPAIUpwAMAARcgGwABFxoC/wACNucAAjb7AAI3vAAC5eQAAAAEDwACNysAAje8AAAABAQHAAI3fAAAAtuNgA73yAABgA8AA+j8BSsAAjeoBKgbAAEXHgL/AAI5YwACOZcAAjncAALl6AAAAAQPAAI5twACOdwAAAAAAAABgA8AARX0BSsAAjnMBLgbAAEXIgL/AAI6kwACOqcAAjtYAALl4AAAAAQPAAI6xwACO1gAAAAEBAcAAjsYAAAC242ADvfIAAGADwAD6PwFKwACO0QEqBsAARcmAv8AAjxHAAI8WwACPLgAAuXsAAAABA8AAjyPAAI8uAAAAAAAAAGADwAD6PwFKwACPKQEqBsAARcqAv8AAjzPAAI84wACPjQAAteAAAAABA8AAjz/AAI+NAAAAAQEBwACPVAAAALbjYAO98gAAYAPAAPo/AUrAAI9lARzAAI9sgMAAj2XAIUwOtX0BAAEWwACPfS65cMAARb0AvlUGwABFy4C/wACPksAAj5/AAI/pAACtbwAAAAEDwACPpcAAj+kAAAABAQHAAI+6AAAAtuNgA73yAABgA73NAUrAAI/LARzAAI/SgMAAj8vAIUx2rW8BAAEWwACP2S65cMAARb0AviAGwABFzIC/wACP7sAAj/vAAJBNAAC5fAAAAAEDwACQCMAAkE0AAAABAQHAAJAdAAAAtuNgA73yAABgA73NAUrAAJAuARzAAJA1gMAAkC7AIUzcgVUBAAEWwACQPS65cMAARb0AvhwGwABFzYC/wACQUsAAkF/AAJCzAACzoAAAAAEDwACQasAAkLMAAAABAQHAAJB/AAAAtuNgA73yAABgA73NAUrAAJCQARzAAJCXgMAAkJDAIU1Cs6ABAAEWwACQoy65cMAARb0AviEGwABFzoC/wACQuMAAkMXAAJElAAC1SQAAAAEDwACQ1sAAkSUAAAABAQHAAJDrAAAAtuNgA73yAABgA73NAUrAAJD8ARzAAJEDgMAAkPzAIU2otUkBAAEWwACRFS65cMAARb0AviIGwABFz4C/wACRKsAAkTfAAJGZAAC1SgAAAAEDwACRScAAkZkAAAABAQHAAJFeAAAAtuNgA73yAABgA73NAUrAAJFvARzAAJF2gMAAkW/AIU4OtUoBAAEWwACRiS65cMAARb0AviMGwABF0IC/wACRnsAAkavAAJIJAAC1SwAAAAEDwACRu8AAkgkAAAABAQHAAJHQAAAAtuNgA73yAABgA73NAUrAAJHhARzAAJHogMAAkeHAIU50tUsBAAEWwACR+S65cMAARb0AviQGwABF0YC/wACSDsAAkhvAAJKBAAC1TAAAAAEDwACSL8AAkoEAAAABAQHAAJJEAAAAtuNgA73yAABgA73NAUrAAJJVARzAAJJcgMAAklXAIU7atUwBAAEWwACScS65cMAARb0AviUGwABF0oC/wACShsAAkpPAAJLpAAC1TQAAAAEDwACSn8AAkukAAAABAQHAAJK0AAAAtuNgA73yAABgA73NAUrAAJLFARzAAJLMgMAAksXAIU9AtU0BAAEWwACS2S65cMAARb0AviYGwABF04C/wACS7sAAkvvAAJNbAAC1TgAAAAEDwACTDMAAk1sAAAABAQHAAJMhAAAAtuNgA73yAABgA73NAUrAAJMyARzAAJM5gMAAkzLAIU+mtU4BAAEWwACTSy65cMAARb0AvicGwABF1IC/wACTYMAAk23AAJPHAAC1TwAAAAEDwACTe8AAk8cAAAABAQHAAJOQAAAAtuNgA73yAABgA73NAUrAAJOhARzAAJOogMAAk6HAIVAMtU8BAAEWwACTty65cMAARb0AvigGwABF1YC/wACTzMAAk9nAAJQ7AAC1UAAAAAEDwACT68AAlDsAAAABAQHAAJQAAAAAtuNgA73yAABgA73NAUrAAJQRARzAAJQYgMAAlBHAIVBytVABAAEWwACUKy65cMAARb0AvikGwABF1oC/wACUQMAAlE3AAJSZAAC1UQAAAAEDwACUVMAAlJkAAAABAQHAAJRpAAAAtuNgA73yAABgA73NAUrAAJR6ARzAAJSBgMAAlHrAIVDYtVEBAAEWwACUiS65cMAARb0AvioGwABF14C/wACUnsAAlKvAAJULAAC1UgAAAAEDwACUvMAAlQsAAAABAQHAAJTRAAAAtuNgA73yAABgA73NAUrAAJTiARzAAJTpgMAAlOLAIVE+tVIBAAEWwACU+y65cMAARb0AvisGwABF2IC/wACVEMAAlR3AAJVtAAC1VAAAAAEDwACVJsAAlW0AAAABAQHAAJU7AAAAtuNgA73yAABgA73NAUrAAJVMARzAAJVTgMAAlUzAIVGktVQBAAEWwACVXS65cMAARb0Avi0GwABF2YC/wACVcsAAlX/AAJXNAAC1VQAAAAEDwACVh8AAlc0AAAABAQHAAJWcAAAAtuNgA73yAABgA73NAUrAAJWtARzAAJW0gMAAla3AIVIKtVUBAAEWwACVvS65cMAARb0Avi4GwABF2oC/wACV0sAAld/AAJYtAAC1VgAAAAEDwACV58AAli0AAAABAQHAAJX8AAAAtuNgA73yAABgA73NAUrAAJYNARzAAJYUgMAAlg3AIVJwtVYBAAEWwACWHS65cMAARb0Avi8GwABF24C/wACWMsAAlj/AAJafAAC1VwAAAAEDwACWUMAAlp8AAAABAQHAAJZlAAAAtuNgA73yAABgA73NAUrAAJZ2ARzAAJZ9gMAAlnbAIVLWtVcBAAEWwACWjy65cMAARb0AvjAGwABF3IC/wACWpMAAlrHAAJcdAAC1WAAAAAEDwACWyMAAlx0AAAABAQHAAJbdAAAAtuNgA73yAABgA73NAUrAAJbuARzAAJb1gMAAlu7AIVM8tVgBAAEWwACXDS65cMAARb0AvjEGwABF3YC/wACXIsAAly/AAJeLAAC1WQAAAAEDwACXPsAAl4sAAAABAQHAAJdTAAAAtuNgA73yAABgA73NAUrAAJdkARzAAJdrgMAAl2TAIVOitVkBAAEWwACXey65cMAARb0AvjIGwABF3oC/wACXkMAAl53AAJfrAAC1WgAAAAEDwACXpcAAl+sAAAABAQHAAJe6AAAAtuNgA73yAABgA73NAUrAAJfLARzAAJfSgMAAl8vAIVQItVoBAAEWwACX2y65cMAARb0AvjMGwABF34C/wACX8MAAl/3AAJhXAAC1WwAAAAEDwACYC8AAmFcAAAABAQHAAJggAAAAtuNgA73yAABgA73NAUrAAJgxARzAAJg4gMAAmDHAIVRutVsBAAEWwACYRy65cMAARb0AvjQGwABF4IC/wACYXMAAmGnAAJi3AAC1XAAAAAEDwACYccAAmLcAAAABAQHAAJiGAAAAtuNgA73yAABgA73NAUrAAJiXARzAAJiegMAAmJfAIVTUtVwBAAEWwACYpy65cMAARb0AvjUGwABF4YC/wACYvMAAmMnAAJkjAAC1XQAAAAEDwACY18AAmSMAAAABAQHAAJjsAAAAtuNgA73yAABgA73NAUrAAJj9ARzAAJkEgMAAmP3AIVU6tV0BAAEWwACZEy65cMAARb0AvjYGwABF4oC/wACZKMAAmTXAAJmFAAC1XgAAAAEDwACZPsAAmYUAAAABAQHAAJlTAAAAtuNgA73yAABgA73NAUrAAJlkARzAAJlrgMAAmWTAIVWgtV4BAAEWwACZdS65cMAARb0AvjcGwABF44C/wACZisAAmZfAAJnzAAC1XwAAAAEDwACZpsAAmfMAAAABAQHAAJm7AAAAtuNgA73yAABgA73NAUrAAJnMARzAAJnTgMAAmczAIVYGtV8BAAEWwACZ4y65cMAARb0AvjgGwABF5IC/wACZ+MAAmgXAAJpTAAC1YAAAAAEDwACaDcAAmlMAAAABAQHAAJoiAAAAtuNgA73yAABgA73NAUrAAJozARzAAJo6gMAAmjPAIVZstWABAAEWwACaQy65cMAARb0AvjkGwABF5YC/wACaWMAAmmXAAJq/AAC1YQAAAAEDwACac8AAmr8AAAABAQHAAJqIAAAAtuNgA73yAABgA73NAUrAAJqZARzAAJqggMAAmpnAIVbStWEBAAEWwACary65cMAARb0AvjoGwABF5oC/wACaxMAAmtHAAJsxAAC1YgAAAAEDwACa4sAAmzEAAAABAQHAAJr3AAAAtuNgA73yAABgA73NAUrAAJsIARzAAJsPgMAAmwjAIVc4tWIBAAEWwACbIS65cMAARb0AvjsGwABFwYC/wACbd8AAm4TAAJuUAQCk8QAAAAEDwACbjcAAm5QAAAAAAAAAYAPAAEtkAUrAAJuQASsGwABF54C/wACbmMAAm6XAAJvWAAC5fQAAAAEDwACbtMAAm9YAAAABAQHAAJvCAAAApN9gA8AATSsAAGADwABFfQFK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AAEBAcAAq5cAAACk32ADwABNKwAAYAPAAPo/AUrAAKunASoGwABGA4C/wACrscAAq7bAAKxZAAC47gAAAAEDwACrvcAArFkAAAAAAAAAYAPAAPo/AT4ETsAAq9HAAKvbAAC472ADwACGygEfwACr4cAAhtYAAAAAPRfAAKv9gMAAq/PAIWncuMoWwACsDC6Z/8AARYXAAESSPRzAAKwhgMAArBfAIWncuMsBAAEuAMAAhtRKwACsPQEWwACsToDAAKxEwCFp3LjuwACGzAbAAEYEgL/AAKxewACsY8AArIMAALmZAAAAAQPAAKx4wACsgwAAAAAAAABgA8AA+j8BSsAArH4BKgbAAEYFgL/AAKyIwACsjcAArKUAALmaAAAAAQPAAKyawACspQAAAAAAAABgA8AA+j8BSsAArKABKgbAAEYGgL/AAKyqwACsr8AArg4AALkxAAAAAQPAAKy4wACuDgAAAAEBAcAArMYAAACD1mADwABFfQAAYAPAAPo/AT4FScAArQQcwACtDS5IAQABgMAArRDAIWrtAMAA/V5KwACtFwEqP0nAAK0pIRzAAK0zFsAArS0umf/AAEWFSAEAARbAAK08gMAArTbAIWrtmf/AAEWFAMAA/V5KwACtQwEcwACtUBbAAK1KLpn/wABFhbkxAQABFsAArWCAwACtWsAhau2Z/8AARYUAwABFeD9OwACtesAArYIAAF5gA8AARX0BFsAArYkug7DAAEWHQ8AArZMhHMAAraKBwACtmsAha5dIAQABKwDAAP1ePgJJwACtsxzAAK2/gcAArbfAIWuXSAEAAYDAAK3CwCFq7QDAAP1eSsAArckBKT89icAArdzAIWuXFsAAre6BwACt5sAha5eDsMAARYdKwACt/gEqBsAARgeAv8AArhPAAK4gwACydAAAuZsAAAABA8AArivAALJ0AAAAAwMDwACuOQAAAKTfYAPAAE0rAMAArk8AAACCkGADwABiZgDAAK5ZAAAAgmdgA8AA/AUAAGADwABFfQE+CknAAK5lHMAArm6BwACuacAhbGFIAQABKwDAAP1eSsAArncBLj89icAArojAIWxhFsAArpSBwACuj8AhbGG0BsAAYmhAIRbAAK9DgcAArz7AIWxho6jAAGJwwACvPcAAr1EAQCIWwACvZIHAAK9fwCFsYbJrwABiaQEWwACv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AABgA8AARX0BSsAA0YgBIxzAANGWFsAA0Y8WwADRiC6CUcAARYNhwAD82ICXAQABlgDAAP00HMAA0aIWwADRnC6CUcAARYNLAQABlgDAAPy4FsAA0aguJ8AARkEBYAPAAEV9BsAARkWAv8AA0bHAANHCwADR2QAAuXsBasAA0bJgA8AA/VECAAABA8AA0c/AANHZAAAAAAAAAGADwAD6PwFKwADR1QEpBsAARkaAv8AA0d7AANHqwADSJAAAhE0BasAA0d9gA8AA/VECAAABA8AA0fDAANIkAAAAAQEBwADR+gAAAIc0XQPAAEQmAVsAAFsBSsAA0gYBHMAA0g6AwADSBsAhiga4fAEAAS4AwABELwbAAEZHgL/AANIowADSOMAA0mgAALmCAWrAANIpYAPAAP1RAgAAAQPAANJAwADSaAAAAAAAAABgA8AA/AUBSsAA0kYBasAA0lNgA8AA/AUhBsAARkiAv8AA0mzAANJ9wADSpwAAuYEBasAA0m1gA8AA/VECAAABA8AA0ofAANKnAAAAAQEBwADSiAAACIPWYAPAAEV9AABgA8AA+j8BSsAA0pIBJcAA0piAwADSksAhisBgA8AARjcGwABGSYC/wADSq8AA0rzAANLiAAC5hQFqwADSrGADwAD9UQIAAAEDwADSxsAA0uIAAAABAQHAANLUAAAIg9ZgA8AARX0AAGADwAD6PwFKwADS3gEpAAAhiAgAIYhaACGIrAAhiP8AIYmLACGJ0AAhijoAIYqKACGK8gAhi0cAAAAJAsAARkyAv8AA0ufAANL2wADUIQe5wwAAAWABwABGUwAAAAEFwABGUoC/wADTIsAA0yLAANOJAAAAA8AA0zTAANOJAAAAAgICwADTSQAAALbjYAO98gDAANNkAAAAglFdA8AA/KkBYAPAAEV9AABgA8AARkwBPwEJAMAA03TAAEZYAgACgMAA03rAIYu8gcAA04LAIYvKAAMGwABGToC/wADTjcAA057AANO0AQCFugAAAAEDwADTqMAA07QAAAAAAAAAYAPAAEV9AUrAANOrARzAANOxFsAA06suglHAAEWDSwEAAZMAwAD8uAbAAEZPgL/AANO4wADTyMAA0+kBALnEAAAAAQPAANPTwADT6QAAAAAAAABgA8AARUYBSsAA09YBHMAA0+YWwADT3BbAANPWLpn/wABFhbkVwABFU0sBAAGTAMAA/LgGwABGUIC/wADT7cAA0/3AANQfAQC5xQAAAAEDwADUCcAA1B8AAAAAAAAAYAPAAEVGAUrAANQMARzAANQcFsAA1BIWwADUDC6Z/8AARYW5FcAARVNLAQABlADAAPy4AAAhjAwAIYxfACGMvQAhjRsAAAADAsAARlOAv8AA1CTAANQzwADV2ge5xgAAAWABwABFfQAAAAEFwABGWIC/wADUWcAA1FnAANWAAAAAA8AA1GXAANWAAAAAAgICwADUegAAALbjYAO98gDAANSVAAAAglFdA8AA/KkBYAPAAEV9AABgA8AARlMBPwEJAMAA1WHAAEYLAgACgcAA1WfAIY2GFsAA1XaAwADVb8AhjXi1Mr4JAAIGwABGVYC/wADVhMAA1ZXAANWsAAC5ewFqwADVhWADwAD9UQIAAAEDwADVosAA1awAAAAAAAAAYAPAAPo/AUrAANWoASkGwABGVoC/wADVsMAA1cHAANXYAAC5mgFqwADVsWADwAD9UQIAAAEDwADVzsAA1dgAAAAAAAAAYAPAAPo/AUrAANXUASkAACGN0QAhjhYAIY5bAAAAAgLAAEZZgL/AANYHwADWDcAA2tYDuccAAAFgAcAARX0AAAQEwABGW4C/wADWQMAA1kcJliYAYAO8wQAEwABGXIC/wADWpMAA1q8JucgAYAPAAPo/AATAAEZdgL/AANf/wADYEBi5yQBdA8AA/KkBYAPAAGKNAATAAEZegL/AANiMwADYlhi0RgBgA7zoAAEFwABGZoC/wADYm8AA2JvAANmlAAAAA8AA2KLAANmlAAAABwQEwADYqAAABJYmYAO8wQDAANjEAAAAglFdA8AA/KkBYAPAAEV9AMAA2NoAAACCkGADvecAwADY+AAAAKVhYAPAAEHhAAPAANkXAAAEucldA8AA/KkBYAPAAGKNAWoAYAPAAP0OecAA2S8AAAS5yGADwAD6PwFqwADZPGADwAD6PwDAANlIAAAEtEZgA7zoAWoAYAPAAP0OeWADwABGWQE+AT0XwADZfC6lYYPAANmQwCGPUsAARYAFCAHAAEZbgADAIY8fCAHAAEZdhADAIY9jCAHAAEZchQDAIY+DCAHAAEZehgDAIY+fCQDAANldwABGCwIAAoHAANljwCGPLYLAANlrwCGPRAAEBsAARmCAv8AA2arAANm7wADZ6wAAuXkBasAA2atgA8AA/VECAAABA8AA2cfAANnrAAAAAQEBwADZ3AAAALbjYAO98gAAYAPAAPo/AUrAANnnASkGwABGZIC/wADZ8MAA2gHAANo/AQC5ygAAAAEDwADaCsAA2j8AAAAAAAAAYAPAAEV9AT4CQBbAANoXLrnIwABGXMAA2hfAANoiAErAANopARbAANo3FsAA2jAuglHAAEWDgejAAPyOBsAARmGAv8AA2kTAANpQwADahQAAhE0BasAA2kVgA8AA/VECAAABA8AA2lbAANqFAAAAAQEBwADaYAAAAIc0XQPAAEQmAVsAAFsBSsAA2mwBHMAA2nSAwADabMAhkRe4fQEAAS4AwABEMwbAAEZigL/AANqKwADancAA2tQAACMBasAA2otgA8AA/VECAAABA8AA2qXAANrUAAAAAAAAAGADwAD96wFKwADaqwEkwADa1AUnucsWwADatS6WJsAARlsngYsWwADawC65ycAARl0ngyEAACGQJwAhkHoAIZDhACGRSwAhkbUAAAAEAsAARmeAv8AA2xDAANsWwADcPQO5zAAAAWABwABFfQAAAAEFwABGbYC/wADbOsAA2zrAANt4AAAAA8AA20TAANt4AAAAAQEBwADbUwAAAIKQYAO95wAAYAPAAEZnAT8BCQDAANtbwABGCwIAAjHAANtvYAPAAEV9AIDAANtzwCGSFgADBsAARmmAv8AA233AANuOwADbvgAAuXkBasAA235gA8AA/VECAAABA8AA25rAANu+AAAAAQEBwADbrwAAALbjYAO98gAAYAPAAPo/AUrAANu6ASkGwABGaoC/wADbw8AA28/AANwHAACETQFqwADbxGADwAD9UQIAAAEDwADb1cAA3AcAAAABAQHAANvfAAAAhzRdA8AARCYBWwAAWwFKwADb6wEcwADb84DAANvrwCGS27h+AQABLgDAAEQ0BsAARmuAv8AA3AzAANwfwADcOwAAIwFqwADcDWADwAD9UQIAAAEDwADcJ8AA3DsAAAAAAAAAYAPAAP3rAUrAANwtASe5zQAAIZJSACGSpQAhkw8AIZNVAAAAAwLAAEZugL/AANxAwADcT8AA3xsHuc4AAAFgAcAARX0AAAMEwABGcYC/wADcdcAA3IoYuc/AAEQlAGADwAD6PwEqBMAARnKAv8AA3U3AAN1mGLnQAGADwAD6PwEqBMAARnOAv8AA3jHAAN5FBrnRAGADwAD8BQFqwADeRGADwAD8BRUBBcAARnmAv8AA3WvAAN1rwADeHAAAAAPAAN1ywADeHAAAAAICAsAA3YYAAACCUV0DwAD8qQFgA8AARX0AwADdnAAAALnSYAO95wAAYAPAAEZuAT4CPRzAAN3cFsAA3dAutErAAEWIt4EAAAAAwAB4Dj0cwADeARbAAN31LrRKwABFiLeCAAAAAMAAeBABCQDAAN2wwABGCwIAAoDAAN22wCGUEoHAAN2+wCGUKQADBsAARnWAv8AA3krAAN5bwADehwAAuXgBasAA3ktgA8AA/VECAAABA8AA3mPAAN6HAAAAAQEBwADeeAAAALbjYAO98gAAYAPAAPo/AUrAAN6DASkGwABGdoC/wADejMAA3p3AAN7WAAC5eQFqwADejWADwAD9UQIAAAEDwADeqcAA3tYAAAABAQHAAN6+AAAAtuNgA73yAABgA8AA+j8BSsAA3skBFsAA3skuuc/AAEQlwABGcQbAAEZ3gL/AAN7bwADe4MAA3xkAALnTAAAAAQPAAN7twADfGQAAAAEBAcAA3vMAAACAlmADwAD6PwAAXAE+AT0XwADfAC65z8AARCWAwADfEMAhlXrAAEZxAAAhlJsAIZTuACGVUAAhlakAAAADAsAARnqAv8AA3x7AAN8twADnMwe51AAAAWABwABGbgAABQTAAEZ8gL/AAN9vwADfegm51QBgA8AAhdMABMAARn2Av8AA35PAAN+bGKTxAWrAAN9/YAPAAP1RAmADwABLZAAEwABGf4C/wADfrcAA37oYudbAAEQlAGADvecABMAARoCAv8AA39LAAN/nCbnXwABEJQBgA73nAATAAEaBgL/AAN/4wADf/xiWJgBgA7zTAAEFwABGj4C/wADgBMAA4ATAAOIXAAAAA8AA4BLAAOIXAAAABgYGwADgHAAAAKTxYAPAAEtkAMAA4CsAAAS51mADvecAwADgPwAABJYmYAO80wDAAOBhAAAAglFdA8AA/KkBYAPAAEV9AMAA4G4AAAC52GADwAD6PwDAAOCLAAAAudJgA73nAABgA8AARnoBPgNAIRzAAOHBhMAA4bPAIZbZSAEAASsAwAD9XsAA4bPAAOHIAEAhHMAA4eQWwADh1i651sAARCXAAEZ/SAEAASsAwAD9XsAA4dbAAOHrAD0XwADh8i650ITAAOIGwCGW2cAARnIGCAHAAEZ/gQDAIZamCAHAAEaBggDAIZa0CADAAEZ9gMAA4K/AIZaWCADAAEaAgcAA4N7AIZamCADAAEZ8I4TAAOEDwCGW2R7AAOE4wACF2gEAAYDAAOFKwCGWlgBqwADhaGADwACF08AA+BgBYAPAAIXTCQDAAOGMwABGeQIAAoPAAOGSwCGWwoXAAOGawCGW6QAKBsAARoOAv8AA4hzAAOIuwADiSwEAhYIAAAABA8AA4jvAAOJLAAAAAAAAAGADvecBSsAA4j4BFsAA4j4uudbAAEQlwABGfwbAAEaHgL/AAOJQwADiVcAA4w0AALnZAAAAAQPAAOJnwADjDQAAAAICAsAA4oMAAACwvWADvfIAwADipgAAAICWYAO95wAAXAE+AT0XwADisy651sAARCUcwADi34DAAOLLwCGYaJcDAgACFsAA4uwuudfAAEQlwABGgIHAAOMDwCGYdgC+PsAARn8GwABGiIC/wADjEsAA4yXAAONrAAAjAWrAAOMTYAPAAP1RAgAAAQPAAOMtwADjawAAAAAAAABgA8AA/esBSsAA4zMBJMAA42sEJ7naFsAA404upPHAAEZ9J7nbFsAA414uhYLAAEaDBsAARoSAv8AA43DAAOOBwADjlgEAhX8AAAABA8AA44rAAOOWAAAAAAAAAGADwABFfQFKwADjjQEcwADjkxbAAOONLoJRwABFg0sBAAGTAMAA/LgGwABGiYC/wADjm8AA47TAAOQnAAC5fQFqwADjnGADwAD9UQIAAAEDwADjw8AA5CcAAAABAQHAAOPRAAAApN9gA8AATSsAAGADwABFfQE+AUrAAOPkASMcwADj6y653AEAAYDAAOP/wCGZuQDAAEaKHMAA5BQWwADkDi6CUcAARYNLAQABlADAAPy4HMAA5CAWwADkGi6CUcAARYNLAQABkwDAAPy4AWADwABFfQbAAEaFgL/AAORowADke8AA5IgBAoUdAAAAAQPAAOSIwADkiAAAAAAAAABdA8AA/KkBYAPAAGJmAAbAAEaKgL/AAOTKwADkz8AA5UYAALncAAAAAQPAAOTiwADlRgAAAAEBAcAA5PAAAACk32ADwABNKwAAYAPAAPo/AT4BSsAA5QMBIhbAAOUKLrnQwABGcgAcwADlKBbAAOUfLoV/wABGhLVTAQABgMAA5TbAIZqTAMAARgIGwABGi4C/wADlS8AA5VvAAOWNAAC5ggFqwADlTGADwAD9UQIAAAEDwADlY8AA5Y0AAAAAAAAAYAPAAPwFAUrAAOVpAWrAAOV2YAPAAPwFtK8GwABGjIC/wADlksAA5aPAAOXPAAC5gQFqwADlk2ADwAD9UQIAAAEDwADlrcAA5c8AAAABAQHAAOWuAAAIg9ZgA8AARX0AAGADwAD6PwFKwADluAElwADlvoDAAOW4wCGbbGADwABGegbAAEaNgL/AAOXUwADl5cAA5zEAALmFAWrAAOXVYAPAAP1RAgAAAQPAAOXvwADnMQAAAAEBAcAA5f8AAAiD1mADwABGegAAYAPAAPo/AT4BSsAA5tIBIhzAAObnFsAA5uIWwADm2S6k8cAARn2AvcAAS3JIAQABFsAA5vkWwADm8IDAAObqwCGb1KTxwABGfYC9wABLcgDAAP36ABzAAOcXFsAA5xIWwADnCS6k8cAARn2CZ8AAS2dIAQABFsAA5ykWwADnIIDAAOcawCGb1KTxwABGfYJnwABLZwDAAP1eAAAhl/gAIZg+ACGYyQAhmTAAIZmDACGaMAAhmmkAIZrlACGbNgAhm54AIZx+AAAACgLAAEaQgL/AAOc2wADnPMAA6VEDud0AAAFgAcAARnoAAAEEwABGkoC/wADnh8AA55QJhR0BasAA52dgA8AA/VECXQPAAPypAWADwABiZgABBcAARpaAv8AA55nAAOeZwADpAwAAAAPAAOenwADpAwAAAAUFBcAA57EAAACk8WADwABLZADAAOfJAAAAhYJgA73nAMAA5/AAAACCUV0DwAD8qQFgA8AARX0AwADoBgAAALnSYAO95wDAAOgXAAAEhR1dA8AA/KkBYAPAAGJmAABgA8AARpABPgNAFsAA6IOAwADoesAhnSS20sAAS3fAAOh6wADokABAHMAA6McWwADotRbAAOingMAA6J7AIZ0ktK7AAEtplWjAAGi2SAEAARbAAOjYFsAA6MouhR3AAEaSYcAA/NgAwAD9KMAA6J7AAOjeAEAhFsAA6O0uudDAAEZywADo7MAA6P4AAggBwABGkoQAwCGdZwkAwADoLsAARo8GAAaAwADoNMAhnSSBwADoPsAhnTQrgsAA6FLAIZ1CKoPAAOhhwCGdWQABBsAARpSAv8AA6QfAAOkTwADpTwAAhE0BasAA6QhgA8AA/VECAAABA8AA6RnAAOlPAAAAAQEBwADpIwAAAIc0XQPAAEQmAVsAAFsBSsAA6S8BHMAA6TeAwADpL8AhnoK4jQEAAS4AwABERAAAIZ5MACGetgAAAAECwABGl4C/wADpVMAA6VrAAOxHA7neAAABYAHAAEZ6AAABBMAARpmAv8AA6avAAOm4CYUdAWrAAOmLYAPAAP1RAl0DwAD8qQFgA8AAYmYAAQXAAEaegL/AAOm9wADpvcAA64gAAAADwADp0cAA64gAAAAHBgbAAOniAAAApPFgA8AAS2QAwADqAAAAAIWCYAO95wDAAOonAAAAglFdA8AA/KkBYAPAAEV9AMAA6kMAAAC50mADvecAwADqWgAABIUdXQPAAPypAWADwABiZgDAAOqBAAAApWFgA8AAQeEAAcAA6qAAAAC52GADwAD6PwFqwADqr2ADwAD6PwBgA8AARpcBPgI9F8AA6xEupWGFwADrJcAhn5LAAEWAQBzAAOtsFsAA61oWwADrTIDAAOtDwCGfOLSuwABLaZVowABotkgBAAEWwADrfRbAAOtvLoUdwABGmWHAAPzYAMAA/SjAAOtDwADrgwACCAHAAEaZhADAIZ97CQDAAOq/wABGjwYABoDAAOrFwCGfOIHAAOrPwCGfSCuCwADq48Ahn1aGwADq68Ahn6ODwADq+sAhn20AAgbAAEabgL/AAOuNwADroMAA6/MAACMBasAA645gA8AA/VECAAABA8AA66jAAOvzAAAAAAAAAGADwAD96wFKwADrtAEkwADr8wQnud8WwADr1i6k8cAARn0nudsWwADr5i6FgsAARoMGwABGnIC/wADr98AA7APAAOxFAACETQFqwADr+GADwAD9UQIAAAEDwADsCcAA7EUAAAABAQHAAOwTAAAAhzRdA8AARCYBWwAAWwFKwADsHwEcwADsJ4DAAOwfwCGhEriPAQABLgDAAERGAAAhoHUAIaDcACGhRgAAAAICwABGn4C/wADsSsAA7FnAAO4ZB7ngAAABYAHAAEZ6AAAAAQXAAEajgL/AAOyIwADsiMAA7a0AAAADwADsm8AA7a0AAAAGBgbAAOysAAAApPFgA8AAS2QAwADsygAAAIWCYAO95wDAAOzrAAAAliZgA7zTAMAA7Q0AAACCUV0DwAD8qQFgA8AARX0AwADtIAAAALnYYAPAAPo/AMAA7UMAAAC50mADvecAAGADwABGnwE/AQkAwADtV8AARo8GAAaAwADtasAhoZ+BwADtdMAhoa+CwADtgsAhob2DwADti8AhocuEwADtk8AhoeKFwADtosAhofIAAQbAAEahgL/AAO2ywADtxcAA7hcAACMBasAA7bNgA8AA/VECAAABA8AA7c3AAO4XAAAAAAAAAGADwAD96wFKwADt2QEkwADuFwQnueEWwADt+i6k8cAARn0nudsWwADuCi6FgsAARoMAACGiTwAhorYAAAABAsAARqSAv8AA7hzAAO4iwADyDwO54gAAAWABwABGnwAAAAEFwABGrYC/wADuV8AA7lfAAO/cAAAAA8AA7mvAAO/cAAAABwcHwADufAAAAKTxYAPAAEtkAMAA7poAAACFgmADvecAwADuuwAAAJYmYAO80wDAAO7dAAAAglFdA8AA/KkBYAPAAEV9AMAA7vAAAAC52GADwAD6PwDAAO8TAAAAudJgA73nAMAA7zcAAAClYWADwABB4QAAYAPAAEakAT4BPRfAAO+zLqVhhsAA78fAIaNswABFgAEJAMAA71LAAEajBgAGgMAA71jAIaMLgcAA72LAIaMbgsAA73DAIaMpg8AA73nAIaM3hMAA74HAIaNOhcAA75zAIaNeAAUGwABGpoC/wADv4cAA7+3AAPAvAACETQFqwADv4mADwAD9UQIAAAEDwADv88AA8C8AAAABAQHAAO/9AAAAhzRdA8AARCYBWwAAWwFKwADwCQEcwADwEYDAAPAJwCGkGLiOAQABLgDAAERFBsAARqqAv8AA8DTAAPA9wADwbwEAueMAAAABA8AA8EfAAPBvAAAAAAAAAGADwAD6PwFKwADwSgEiIRzAAPBSFsAA8EoulibAAEaBSAEAASsAwAD9XgAWwADwZRbAAPBdLpYmwABGgbLBvNsGwABGq4C/wADwdMAA8JPAAPC2AQCFHQFqwADwdWADwAD9UQIAAAEDwADwocAA8LYAAAAAAAAAXQPAAPypAWADwABiZgFKwADwpAFqwADwpF0DwAD8qQFgA8AAYmbAAPgfBsAARqeAv8AA8QzAAPEdwADxogAAuXgBasAA8Q1gA8AA/VECAAABA8AA8SXAAPGi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uMABEcnAARHiAQCFfwAAAAEDwAER0sABEeIAAAAAAAAAYAPAAEV9AUrAARHVARbAARHcFsABEdUuglHAAEWDgMPAAPyPBsAARwqAv8ABEefAARH4wAESTwAAuXgBasABEehgA8AA/VECAAABA8ABEgDAARJPAAAAAQEBwAESFQAAALbjYAO98gAAYAPAAPo/AUrAARImARbAARI+HMABEi8WwAESJi6Ff8AARwitbwEAAYDAARI2wCHB4wDAAEXLsqW91gbAAEcLgL/AARJUwAESbcABEqIAALl9AWrAARJVYAPAAP1RAgAAAQPAARJ8wAESogAAAAEBAcABEooAAACk32ADwABNKwAAYAPAAEV9AUrAARKaARbAARKaLoV/wABHCAbAAEcMgL/AARKmwAESt8ABEs4AALl+AWrAARKnYAPAAP1RAgAAAQPAARLEwAESzgAAAAAAAABgA8AA+j8BSsABEsoBKQbAAEcNgL/AARLTwAES38ABExcAAIRNAWrAARLUYAPAAP1RAgAAAQPAARLlwAETFwAAAAEBAcABEu8AAACHNF0DwABEJgFbAABbAUrAARL7ARzAARMDgMABEvvAIcMHuIUBAAEuAMAARDsGwABHDoC/wAETHMABEyzAARNaAAC5ggFqwAETHWADwAD9UQIAAAEDwAETNMABE1oAAAAAAAAAYAPAAPwFAUrAARM6AWrAARNHYAPAAPwFwABGXgbAAEcPgL/AARNewAETb8ABE5cAALmBAWrAARNfYAPAAP1RAgAAAQPAARN5wAETlwAAAAEBAcABE3oAAAiD1mADwABFfQAAYAPAAPo/AUrAAROEASXAAROKgMABE4TAIcPEYAPAAEcEBsAARxCAv8ABE5vAAROswAET0AAAuYUBasABE5xgA8AA/VECAAABA8ABE7bAARPQAAAAAQEBwAETwgAACIPWYAPAAEcEAABgA8AA+j8BSsABE8wBKQbAAEcRgL/AARPUwAET58ABFAIAACMBasABE9VgA8AA/VECAAABA8ABE+/AARQCAAAAAAAAAGADwAD96wFKwAET9QEnuf8AACHBXgAhwa0AIcIsACHCjAAhwtEAIcM7ACHDjgAhw/YAIcRLACHEkQAAAAkCwABHFIC/wAEUkcABFJfAARuBA7oAAAABYAHAAEYrAAAGBMAARxaAv8ABFNLAARTfBroBAGADwAD8BQFqwAEU3mADwAD8BQkEwABHF4C/wAEU8MABFPoGugIAYAPAAPwFAWrAART5YAPAAPwFFQTAAEcYgL/AARULwAEVFga6AwBgA8AA/AUBasABFRVgA8AA/AUhBMAARxmAv8ABFSzAARUzCZYmAGADvOUABMAARxqAv8ABFUTAARVICboEAGADwAD96wAEwABHG4C/wAEVVsABFVwJugUAYAPAAPwFAAQFwABHK4C/wAEVYcABFWHAARahAIC1wABEJQADwAEVc8ABFqEAAAAFBQXAARV5AAAEliZgA7zlAMABFYcAAAS6BGADwAD96wDAARWSAAAEugVgA8AA/AUAwAEVswAAAIJRXQPAAPypAWADwABFfQDAARXJAAAAgpBgA73nAABgA8AARxQBPgQ9HMABFf0WwAEV8S60SsAARYi59QAAAADAAHgPPRzAARYkFsABFhgutErAAEWIufYAAAAAwAB4ET0cwAEWTBbAARZALrRKwABFiLeAAAAAAMAAeCE9HMABFnoWwAEWbi60SsAARYi3fwAAAADAAHgfBAgBwABHGYAAwCHFyQgBwABHGoEAwCHF1wgBwABHG4IAwCHF5wkAwAEV18AARi0CAAKDwAEV3cAhxfeEwAEV5cAhxg4ABcAARyyAv8ABFqbAARamwAEXhwC6BgADwAEWv8ABF4cAAAAFBQXAARbMAAAAliZgA7zlAMABFtwAAAC6BGADwAD96wDAARb1AAAAhX9gA8AARX0AwAEXDAAAAIWyYAPAAEV9AMABFyMAAACCkGADvecAAGADwABHFAE/AQoAwAEXNsAARysFAAWAwAEXRcAhxwGBwAEXTsAhxw9qwAEXVGADwAD8BQkxwAEXbWADwABFfQKCwAEXbsAhxx+DwAEXeMAhxy+EwAEXgsAhxz8ABcAARy2Av8ABF4zAAReMwAEYOwC6BwADwAEXosABGDsAAAAEBATAARevAAAAliZgA7zlAMABF78AAAC6BGADwAD96wDAARfYAAAAhX9gA8AARX0AwAEX8AAAAIKQYAO95wAAYAPAAEcUAT8BCgDAARgDwABHKwUABYDAARgFwCHH0IHAARgOwCHH3mrAARgUYAPAAPwFFTHAARgqYAPAAEV9AYLAARgrwCHH7oPAARg2wCHH/gAFwABHLoC/wAEYQMABGEDAARjxALoIAAPAARhXwAEY8QAAAAQEBMABGGQAAACWJmADvOUAwAEYdAAAALoEYAPAAP3rAMABGI0AAACFf2ADwABFfQDAARilAAAAgpBgA73nAABgA8AARxQBPwEKAMABGLjAAEcrBQAFgMABGLrAIciGgcABGMPAIciUasABGMlgA8AA/AUhMcABGOBgA8AARX0BgsABGOHAIcikg8ABGOzAIci0AAsGwABHHYC/wAEY9sABGQfAARkcAQCFfwAAAAEDwAEZEMABGRwAAAAAAAAAYAPAAEV9AUrAARkTARzAARkZFsABGRMuglHAAEWDSwEAAZMAwAD8uAbAAEcegL/AARkhwAEZKsABGUUBALoJAAAAAQPAARkywAEZRQAAAAAAAABgA8AA+j8BSsABGTUBHMABGTwWwAEZNS66BcAARxtIAQABasABGT9gA8AA/AUVAMAA/SgGwABHH4C/wAEZScABGVLAARlvAQC6CgAAAAEDwAEZW8ABGW8AAAAAAAAAYAPAAPo/AUrAARleARzAARllFsABGV4uugXAAEcbSAEAAWrAARloYAPAAPwFIQDAAP0oBsAARyCAv8ABGXPAARl8wAEZnQEAugsAAAABA8ABGYfAARmdAAAAAAAAAGADwAD6PwFKwAEZigEcwAEZkRbAARmKLroFwABHG0gBAAFqwAEZlGADwAD8BQkAwAD9KAbAAEcjgL/AARmiwAEZs8ABGgoAALl4AWrAARmjYAPAAP1RAgAAAQPAARm7wAEaCgAAAAEBAcABGdAAAAC242ADvfIAAGADwAD6PwFKwAEZ4QEWwAEZ+RzAARnqFsABGeEuhX/AAEcdrW8BAAGAwAEZ8cAhyroAwABFy7KlvdYGwABHJIC/wAEaD8ABGijAARpdAAC5fQFqwAEaEGADwAD9UQIAAAEDwAEaN8ABGl0AAAABAQHAARpFAAAApN9gA8AATSsAAGADwABFfQFKwAEaVQEWwAEaVS6Ff8AARx0GwABHJYC/wAEaYcABGnLAARqJAAC5fgFqwAEaYmADwAD9UQIAAAEDwAEaf8ABGokAAAAAAAAAYAPAAPo/AUrAARqFASkGwABHIYC/wAEajsABGp/AARqxAQCAlgAAAAEDwAEapcABGrEAAAAAAAAAYAPAAEV9AUrAARqoARzAARquFsABGqguglHAAEWDSwEAAZQAwAD8uAbAAEcmgL/AARq1wAEawcABGv8AAIRNAWrAARq2YAPAAP1RAgAAAQPAARrHwAEa/wAAAAEBAcABGtEAAACHNF0DwABEJgFbAABbAUrAARrdARzAARrlgMABGt3AIcwxuKYBAAEuAMAARF4GwABHJ4C/wAEbBMABGxXAARsyAAC5mgFqwAEbBWADwAD9UQIAAAEDwAEbIsABGzIAAAAAAAAAYAPAAPo/AUrAARsoARbAARsoLroLwABHIAbAAEcogL/AARs2wAEbScABG38AACMBasABGzdgA8AA/VECAAABA8ABG1HAARt/AAAAAAAAAGADwAD96wFKwAEbVwEkwAEbfwYnugwWwAEbaS66BMAARxongNkWwAEbby66BcAARxsngNkWwAEbdy6WJsAARxkAACHJFwAhyWoAIcnIACHKJgAhyoQAIcsDACHLYwAhy6gAIcv7ACHMZQAhzLUAIc0rAAAACwLAAEcvgL/AARuEwAEbk8ABHGUHug0AAAFgAcAARX0AAAEEwABHMYC/wAEbxcABG80JgmwAYAO9DAABBcAARzWAv8ABG9LAARvSwAEcOAAAAAPAARvewAEcOAAAAAMDA8ABG+QAAASCbGADvQwAwAEcAQAAAIJRXQPAAPypAWADwABFfQDAARwXAAAAgpBgA73nAABgA8AARy8BPwIIAcAARzGAAMAhzcAJAMABHCXAAEYLAgACgcABHCvAIc3OgsABHDPAIc3lAAEGwABHM4C/wAEcPcABHE7AARxjAQCFfwAAAAEDwAEcV8ABHGMAAAAAAAAAYAPAAEV9AUrAARxaARzAARxgFsABHFouglHAAEWDSwEAAZMAwAD8uAAAIc4qACHOfQAAAAECwABHNoC/wAEcaMABHG7AAR4iA7oOAAABYAHAAEcvAAAAAQXAAEc8gL/AARzcwAEc3MABHbEAAAADwAEc5cABHbEAAAAEBATAARzsAAAAgmxgA70MAMABHQIAAACezmADwABIcADAAR0XAAAAgpBgA73nAMABHTUAAAClYWADwABB4QAAYAPAAEc2AT4BPRfAAR2ILqVhg8ABHZzAIc7+wABFgAEJAMABHVDAAEc1AwADgMABHVbAIc7SMcABHW5gA8AARX0BgcABHW/AIc7ggsABHXfAIc7wAAIGwABHOIC/wAEdtsABHcLAAR35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AAAACQLAAEdigL/AASqMwAEqm8ABLF0HuhsAAAFgAcAARX0AAAEEwABHZIC/wAEq3cABKuUJpPEBasABKsNgA8AA/VECYAPAAEtkAAEFwABHa4C/wAEq6cABKunAASvdAAAAA8ABKvbAASvdAAAABAQEwAErCwAAAIW1YAPAAEV9AMABKx4AAACFt2ADwABFfQDAASsqAAAEpPFgA8AAS2QAwAErQgAAAIKQYAO95wAAYAPAAEdiAT4DPRzAASuLFsABK38utErAAEWIufUAAAAAwAB4Dz0cwAErshbAASumLrRKwABFiLn2AAAAAMAAeBE9HMABK84uuXMAAAAAwABFxAIIAcAAR2SCAMAh3hoJAMABK1DAAEYLAgACMcABK2RgA8AARX0CgMABK2XAId36gcABK2vAId4Kg8ABK3PAId4qAAMGwABHZoC/wAEr4sABK/PAASwEAQCFtQAAAAEDwAEr+MABLAQAAAAAAAAAYAPAAEV9AUrAASv7ARzAASwBFsABK/suglHAAEWDSwEAAZMAwAD8uAbAAEdngL/AASwIwAEsGcABLCsBAIW3AAAAAQPAASwfwAEsKwAAAAAAAABgA8AARX0BSsABLCIBHMABLCgWwAEsIi6CUcAARYNLAQABlADAAPy4BsAAR2mAv8ABLDDAASxQwAEsWwACnMkAAAABA8ABLFnAASxbAAAAAAAAAGADwABpJgAAACHezgAh3yEAId90ACHfpgAAAAMCwABHbIC/wAEsYMABLG/AAS1oB7ocAAABYAHAAEdiAAAAAQXAAEdwgL/AASybwAEsm8ABLSsAAAADwAEsrMABLSsAAAAEBATAASy6AAAAhbVgA8AARX0AwAEszQAAAIW3YAPAAEV9AMABLN0AAACk8WADwABLZADAASz7AAAAgpBgA73nAABgA8AAR2wBPwEJAMABLQnAAEdrBAAEgMABLQ/AIeADgcABLRXAIeATgsABLRzAIeAjg8ABLSbAIeAzAAEGwABHboC/wAEtL8ABLVvAAS1mAAKcyQFqwAEtMGADwAD9UQIAAAEDwAEtZMABLWYAAAAAAAAAYAPAAGkmAAAAIeB+ACHgvAAAAAECwABHcYC/wAEta8ABLXHAAS9bA7odAAABYAHAAEdsAAAAAQXAAEd5gL/AAS2UwAEtlMABLhcAAAADwAEtmMABLhcA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BcAAR52Av8ABNbvAATW7wAE2SwAAAAPAATXMwAE2SwAAAAQEBMABNdoAAACFtWADwABFfQDAATXtAAAAhbdgA8AARX0AwAE1/QAAAKTxYAPAAEtkAMABNhsAAACCkGADvecAAGADwABHlQE/AQkAwAE2KcAAR3AEAASAwAE2L8Ah672BwAE2NcAh682CwAE2PMAh692DwAE2RsAh6+0ABQbAAEeXgL/AATZPwAE2W8ABNpoAAIRNAWrAATZQYAPAAP1RAgAAAQPAATZhwAE2mgAAAAEBAcABNmsAAACHNF0DwABEJgFbAABbAUrAATZ3ARzAATZ/gMABNnfAIexuuLEBAAEuAMAARG0GwABHmIC/wAE2n8ABNsvAATcAAACcyQFqwAE2oGADwAD9UQIAAAEDwAE21MABNwAAAAAAAAAAYAPAAGkmAUrAATbgAWrAATbwYAPAAGmzwAD4bwbAAEeZgL/AATcEwAE3FMABN0kAALmCAWrAATcFYAPAAP1RAgAAAQPAATccwAE3SQAAAAAAAABgA8AA/AUBSsABNyIBasABNy9gA8AA/AWwugbAAEeagL/AATdNwAE3XsABN40AALmBAWrAATdOYAPAAP1RAgAAAQPAATdowAE3jQAAAAEBAcABN2kAAAiD1mADwABFfQAAYAPAAPo/AUrAATdzASXAATd5gMABN3PAIe18YAPAAEeVBsAAR5uAv8ABN5HAATeiwAE3yAAAuYUBasABN5JgA8AA/VECAAABA8ABN6zAATfIAAAAAQEBwAE3ugAACIPWYAPAAEV9AABgA8AA+j8BSsABN8QBKQAAIew4ACHsogAh7PUAIe1GACHtrgAh7gMAAAAFAsAAR56Av8ABN83AATfTwAE54QO6IgAAAWABwABHbAAAAAEFwABHpoC/wAE3/MABN/zAATiFAAAAA8ABOAbAATiFAAAABAQEwAE4FAAAAIW1YAPAAEV9AMABOCcAAACFt2ADwABFfQDAATg3AAAApPFgA8AAS2QAwAE4VQAAAIKQYAO95wAAYAPAAEeeAT8BCQDAAThjwABHcAQABIDAAThpwCHuaIHAAThvwCHueILAATh2wCHuiIPAATiAwCHumAAFBsAAR6CAv8ABOInAATiVwAE4zQAAhE0BasABOIpgA8AA/VECAAABA8ABOJvAATjNAAAAAQEBwAE4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ALqLYAPAAGJmAMABqFUAAACCa2ADwABFfQDAAah1AAAAgpBgA73nAMABqI0AAAClYWADwABB4QAAYAPAAElfAT8BCgDAAaitwABJewUABYDAAajDwCJqIjHAAajTYAPAAEV9AYHAAajUwCJqMmrAAajhYAPAAPwFCYLAAajswCJqQoPAAajywCJqUAAFwABJeIC/wAGpSsABqUrAAapPALqOAAPAAalYwAGqTwAAAAQEBMABqWIAAAC6i2ADwABiZgDAAal/AAAAgmtgA8AARX0AwAGpnwAAAIKQYAO95wDAAam3AAAApWFgA8AAQeEAAGADwABJXwE/AQoAwAGp18AASXsGAAWAwAGp7cAiatoxwAGp/WADwABFfQGBwAGp/sAiaupqwAGqC2ADwAD8BQmCwAGqFsAiavqDwAGqHMAiawgBuowpBcAASXmAv8ABrO3AAaztwAGuBQC6jwADwAGs+cABrgUAAAAFBQXAAa0KAAAAuotgA8AAYmYAwAGtLQAAAIJrYAPAAEV9AMABrUwAAAAgYAPAAEV9AMABrWYAAACCkGADvecAwAGthAAAAKVhYAPAAEHhAABgA8AASV8BPwEKAMABraTAAEl7BQAFgMABra3AImuVMcABrb1gA8AARX0CgcABrb7AImulgsABrcrAImu1asABrdFgA8AA/AUVg8ABreHAImvEhMABrfPAImvSAAXAAEl6gL/AAa4KwAGuCsABryIAgmwAA8ABrhbAAa8iAAAABQUFwAGuJwAAALqLYAPAAGJmAMABrkoAAACCa2ADwABFfQDAAa5pAAAAIGADwABFfQDAAa6DAAAAgpBgA73nAMABrqEAAAClYWADwABB4QAAYAPAAElfAT8BCgDAAa7BwABJewUABYDAAa7KwCJsZTHAAa7aYAPAAEV9AoHAAa7bwCJsdYLAAa7nwCJshWrAAa7uYAPAAPwFIYPAAa7+wCJslITAAa8QwCJsogAFwABJe4C/wAGvJ8ABryfAAbBwAJVPAAPAAa8zwAGwcAAAAAYFBcABrzkAAAS6i2ADwABiZgDAAa9cAAAAglFdA8AA/KkBYAPAAEV9AMABr2kAAASCZ2ADwAD8BQDAAa+DAAAAgpBgA73nAMABr5sAAAClYWADwABB4QABwAGvvwAABLqMYAPAAPo/AWrAAa/OYAPAAPo/AGADwABJ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v8ACJvPAAib4wAIoSQAAuqQAAAABA8ACJwPAAihJAAAAAQEBwAInEQAAAKTfYAPAAE0rAABgA8AA+j8BPgRJwAInJCEWwAInNRbAAicpLq3jwABK+bUlve1KwAInQAEqP07AAidmwAInegAAsL1gA73yARbAAieIgMACJ3zAItrMsL3AAE00TsACJ6/AAie5AAC6nWADvecBFsACJ8gWwAInuy65MMAASv65cMAARb1KwAIn3QEWwAIoNRzAAigBgcACJ+TAItsKtYUCAAKCwAIoBsAi2zAWwAIoHRbAAigRLq3jwABK+bUkvewAvl20Nr3VBsAASwaAv8ACKE7AAihhwAIoywAAIwFqwAIoT2ADwAD9UQIAAAEDwAIoacACKMsAAAAAAAAAYAPAAP3rAT4CTsACKHnAAih/AACBxWADwAD96wEjFsACKIEuhd3AAEr7J7r+J7r/AWADwAD960rAAiiuASTAAijHAye7AIDAAijAwCLb2yeDIQAAItgEACLYVwAi2LYAItj7ACLZZQAi2bYAItoeACLaogAi25sAItwjAAAACQLAAEsJgL/AAikzwAIpOcACLlIDuwEAAAFgAcAARi4AAAQEwABLC4C/wAIpasACKXIJuvQAYAPAAGJmAATAAEsMgL/AAimXwAIpogmt4wBgA73qAATAAEsNgL/AAimxwAIpvAmF3QBgA8AA+j8ABMAASw6Av8ACKdPAAinZCZZHAGADvNMAAQXAAEsagL/AAinewAIp3sACKqAAAAADwAIp7MACKqAAAAAGBgbAAin6AAAAgx5gA8AARX0AwAIqCAAABLr0YAPAAGJmAMACKhcAAASt42ADveoAwAIqLwAABIXdYAPAAPo/AMACKkEAAASWR2ADvNMAwAIqVwAAAIKQYAO95wAAYAPAAEsJAT8GCAHAAEsLgQDAIt0MCAHAAEsMggDAIt0cCAHAAEsNgwDAIt0qCAHAAEsOhADAIt06DABAIRzAAip4g8ACKmzAIt0qSAEAASsAwAD9XsACKmzAAip/AAkAwAIqisAARjYCAAIxwAIqkGADwABFfQGAwAIqkcAi3PyFwAIqm8Ai3UgACAbAAEsQgL/AAiqlwAIqwsACKtsBALkwAWrAAiqmYAPAAP1RAgAAAQPAAirPwAIq2wAAAAAAAABgA8AARX0BSsACKtIBHMACKtgWwAIq0i6CUcAARYNLAQABkwDAAPy4BsAASxKAv8ACKuDAAirxwAIrCQAAuZoBasACKuFgA8AA/VECAAABA8ACKv7AAisJAAAAAAAAAGADwAD6PwFKwAIrBAEqBsAASxOAv8ACKw7AAisawAIrVgAAhE0BasACKw9gA8AA/VECAAABA8ACKyDAAitWAAAAAQEBwAIrKgAAAIc0XQPAAEQmAVsAAFsBSsACKzYBHMACKz6AwAIrNsAi3ry4vAEAAS4AwABEeQbAAEsUgL/AAitbwAIrYMACLLEAALqkAAAAAQPAAitrwAIssQAAAAEBAcACK3kAAACk32ADwABNKwAAYAPAAPo/AT4EScACK4whFsACK50WwAIrkS6t48AASwy1Jb3tSsACK6gBKj9OwAIrzsACK+IAALC9YAO98gEWwAIr8IDAAivkwCLfGrC9wABNNE7AAiwXwAIsIQAAup1gA73nARbAAiwwFsACLCMuuTDAAEsQuXDAAEW9SsACLEUBFsACLJ0cwAIsaYHAAixMwCLfWLWFAgACgsACLG7AIt9+FsACLIUWwAIseS6t48AASwy1JL3sAL5dtDa91QbAAEsVgL/AAiy2wAIsxsACLPkAALmCAWrAAiy3YAPAAP1RAgAAAQPAAizOwAIs+QAAAAAAAABgA8AA/AUBSsACLNQBasACLOFgA8AA/AW40QbAAEsWgL/AAiz+wAItD8ACLUgAALmBAWrAAiz/YAPAAP1RAgAAAQPAAi0ZwAItSAAAAAEBAcACLScAAAiD1mADwABFfQAAYAPAAPo/AUrAAi0xASXAAi03gMACLTHAIuBwYAPAAEsJBsAASxeAv8ACLU3AAi1ewAItzgAAuYUBasACLU5gA8AA/VECAAABA8ACLWjAAi3OAAAAAQEBwAIteAAACIPWYAPAAEsJAABgA8AA+j8BPgFKwAIthQEiHMACLZgWwAItjC6F3cAASw1IAQABFsACLaGAwAItm8Ai4NiF3cAASw0AwAD9XgAcwAItuRbAAi2wLrr0wABLC0gBAAEWwAItwoDAAi28wCLg2Lr0wABLCwDAAP1eBsAASxiAv8ACLdPAAi3mwAIuUAAAIwFqwAIt1GADwAD9UQIAAAEDwAIt7sACLlAAAAAAAAAAYAPAAP3rAT4CTsACLf7AAi4EAACBxWADwAD96wEjFsACLgYuhd3AAEsNJ7r+J7r/AWADwAD960rAAi4zASTAAi5MAye7AIDAAi5FwCLhlieDIQAAIt3iACLeQQAi3oYAIt7wACLf6QAi4DoAIuCiACLhVgAi4d4AAAAIAsAASxuAv8ACLoDAAi6GwAIwvwO7AgAAAWABwABGLgAAAAEFwABLJYC/wAIup8ACLqfAAi89AAAAA8ACLrTAAi89AAAAAwMDwAIuyQAAAJrmYAPAAEV9AMACLt8AAACE2mADwABFfQDAAi74AAAAgpBgA73nAABgA8AASxsBPgE9HMACLy4uuXMAAAAAwABFxAEJAMACLwbAAEY2AgACMcACLwxgA8AARX0CgMACLw3AIuJPgcACLxbAIuJfgsACLyLAIuJvAAYGwABLHYC/wAIvQsACL1PAAi9pAQC6+gAAAAEDwAIvXcACL2kAAAAAAAAAYAPAAEV9AUrAAi9gARzAAi9mFsACL2AuglHAAEWDSwEAAZQAwAD8uAbAAEsfgL/AAi9uwAIvesACL7UAAIRNAWrAAi9vYAPAAP1RAgAAAQPAAi+AwAIvtQAAAAEBAcACL4oAAACHNF0DwABEJgFbAABbAUrAAi+WARzAAi+egMACL5bAIuNYuL0BAAEuAMAARHoGwABLIIC/wAIvusACL8rAAi/7AAC5ggFqwAIvu2ADwAD9UQIAAAEDwAIv0sACL/sAAAAAAAAAYAPAAPwFAUrAAi/YAWrAAi/lYAPAAPwFuKkGwABLIYC/wAIwAMACMBHAAjBJAAC5gQFqwAIwAWADwAD9UQIAAAEDwAIwG8ACMEkAAAABAQHAAjApAAAIg9ZgA8AARX0AAGADwAD6PwFKwAIwMwElwAIwOYDAAjAzwCLkE2ADwABLGwbAAEsigL/AAjBOwAIwX8ACMIYAALmFAWrAAjBPYAPAAP1RAgAAAQPAAjBpwAIwhgAAAAEBAcACMHgAAAiD1mADwABLGwAAYAPAAPo/AUrAAjCCASkGwABLI4C/wAIwi8ACMJ7AAjC9AAAjAWrAAjCMYAPAAP1RAgAAAQPAAjCmwAIwvQAAAAAAAABgA8AA/esBSsACMKwBJ7sDAAAi4s8AIuMiACLjjAAi490AIuRFACLkmgAi5OAAAAAGAsAASyaAv8ACMQPAAjESwAIxlwe7BAAAAWABwABFfQAAAAEFwABLKIC/wAIxO8ACMTvAAjGVAAAAA8ACMUrAAjGVAAAAAgICwAIxXgAAAIJRXQPAAPypAWADwABFfQDAAjF0AAAAgpBgA73nAABgA8AASyYBPwEJAMACMYLAAEYLAgACgMACMYjAIuVJgcACMZDAIuVgAAAAACLlmQAAAAACwABLKYC/wAIx1sACMdzAAjQsA7sFAAABYAHAAEsmAAABBMAASyuAv8ACMgvAAjIZGLqLAGADwABiZgABBcAASzOAv8ACMlHAAjJRwAIyqwAAAAPAAjJawAIyqwAAAAICAsACMmAAAAS6i2ADwABiZgDAAjJ+AAAAgpBgA73nAABgA8AASykBPgE9HMACMpwuuXMAAAAAwABFxAIIAcAASyuAAMAi5gQJAMACMobAAEsoAgACMcACMoxgA8AARX0AgcACMpDAIuYUAAUGwABLLYC/wAIysMACMrzAAjLzAACETQFqwAIysWADwAD9UQIAAAEDwAIywsACMvMAAAABAQHAAjLMAAAAhzRdA8AARCYBWwAAWwFKwAIy2AEcwAIy4IDAAjLYwCLmpLi+AQABLgDAAER7BsAASy6Av8ACMvjAAjMIwAIzNQAAuYIBasACMvlgA8AA/VECAAABA8ACMxDAAjM1AAAAAAAAAGADwAD8BQFKwAIzFgFqwAIzI2ADwAD8BYlCBsAASy+Av8ACMzrAAjNLwAIzfwAAuYEBasACMztgA8AA/VECAAABA8ACM1XAAjN/AAAAAQEBwAIzYwAACIPWYAPAAEV9AABgA8AA+j8BSsACM20BJcACM3OAwAIzbcAi519gA8AASykGwABLMIC/wAIzhMACM5XAAjPoAAC5hQFqwAIzhWADwAD9UQIAAAEDwAIzn8ACM+gAAAABAQHAAjOqAAAIg9ZgA8AASykAAGADwAD6PwE+AUrAAjO3ARzAAjPNFsACM74uuovAAEsrSAEAARbAAjPWgMACM9DAIufHuovAAEsrAMAA/V4GwABLMYC/wAIz7cACNADAAjQqAAAjAWrAAjPuYAPAAP1RAgAAAQPAAjQIwAI0KgAAAAAAAABgA8AA/esBSsACNA4BJMACNCoDJ7sGFsACNBouuovAAEsrJ4MhAAAi5m4AIubYACLnKQAi55EAIugVACLocAAAAAUCwABLNIC/wAI1NcACNTvAAjdaA7sHAAABYAHAAEsmAAAAAQXAAEs8gL/AAjVswAI1bMACNeEAAAADwAI1gMACNeEAAAACAgLAAjWOAAAAlXdgA8AARX0AwAI1pgAAAIKQYAO95wAAYAPAAEs0AT4BPRzAAjXSLrlzAAAAAMAARcQBCQDAAjW0wABLKAIAAjHAAjW6YAPAAEV9AYDAAjW7wCLo1YHAAjXGwCLo5QAFBsAASzaAv8ACNebAAjXywAI2NAAAhE0BasACNedgA8AA/VECAAABA8ACNfjAAjY0AAAAAQEBwAI2AgAAAIc0XQPAAEQmAVsAAFsBSsACNg4BHMACNhaAwAI2DsAi6XK4vwEAAS4AwABEfAbAAEs3gL/AAjY5wAI2ScACNoEAALmCAWrAAjY6YAPAAP1RAgAAAQPAAjZRwAI2gQAAAAAAAABgA8AA/AUBSsACNlcBasACNmRgA8AA/AWN/AbAAEs4gL/AAjaGwAI2l8ACNtYAALmBAWrAAjaHYAPAAP1RAgAAAQPAAjahwAI21gAAAAEBAcACNq8AAAiD1mADwABFfQAAYAPAAPo/AUrAAja5ASXAAja/gMACNrnAIuotYAPAAEs0BsAASzmAv8ACNtvAAjbswAI3GgAAuYUBasACNtxgA8AA/VECAAABA8ACNvbAAjcaAAAAAQEBwAI3DAAACIPWYAPAAEs0AABgA8AA+j8BSsACNxYBKQbAAEs6gL/AAjcfwAI3MsACN1gAACMBasACNyBgA8AA/VECAAABA8ACNzrAAjdYAAAAAAAAAGADwAD96wFKwAI3QAEnuwgAACLpPAAi6aYAIun3ACLqXwAi6rQAIur6AAAABQLAAEs9gL/AAjeVwAI3m8ACOmsDuwkAAAFgAcAASyYAAAIEwABLP4C/wAI32sACN+YYuwoAYAPAAIWYAATAAEtAgL/AAjf1wAI4Axi6iwBgA8AAha4AAQXAAEtIgL/AAjgIwAI4CMACOKYAAAADwAI4EcACOKYAAAAEBATAAjgfAAAAgIlgA8AARX0AwAI4MQAABLsKYAPAAIWYAMACOEQAAAS6i2ADwACFrgDAAjhoAAAAgpBgA73nAABgA8AASz0BPgE9HMACOJcuuXMAAAAAwABFxAMIAcAASz+BAMAi66MIAcAAS0CCAMAi67MJAMACOHbAAEsoAgACMcACOHxgA8AARX0BgMACOH3AIuuTg8ACOIvAIuvDAAUGwABLQoC/wAI4q8ACOLfAAjjuAACETQFqwAI4rGADwAD9UQIAAAEDwAI4vcACOO4AAAABAQHAAjjHAAAAhzRdA8AARCYBWwAAWwFKwAI40wEcwAI424DAAjjTwCLsaLjAAQABLgDAAER9BsAAS0OAv8ACOPPAAjkDwAI5MAAAuYIBasACOPRgA8AA/VECAAABA8ACOQvAAjkwAAAAAAAAAGADwAD8BQFKwAI5EQFqwAI5HmADwAD8BZMoBsAAS0SAv8ACOTXAAjlGwAI5egAAuYEBasACOTZgA8AA/VECAAABA8ACOVDAAjl6AAAAAQEBwAI5XgAACIPWYAPAAEV9AABgA8AA+j8BSsACOWgBJcACOW6AwAI5aMAi7SNgA8AASz0GwABLRYC/wAI5f8ACOZDAAjonAAC5hQFqwAI5gGADwAD9UQIAAAEDwAI5msACOicAAAABAQHAAjmlAAAIg9ZgA8AASz0AAGADwAD6PwE+AUrAAjmyAR7AAjnEwACFsAQABBbAAjncLrqLwABLQBbAAjnsLrsKwABLPxbAAjoAgMACOfrAIu2LuovAAEtAFsACOhaAwAI6EMAi7Yu7CsAASz8ABsAAS0aAv8ACOizAAjo/wAI6aQAAIwFqwAI6LWADwAD9UQIAAAEDwAI6R8ACOmkAAAAAAAAAYAPAAP3rAUrAAjpNASTAAjppAye7CxbAAjpZLrqLwABLQCeDIQAAIuwyACLsnAAi7O0AIu1VACLt+AAi7lMAAAAFAsAAS0mAv8ACOq/AAjq1wAI8vwO7DAAAAWABwABLJgAAAAEFwABLUYC/wAI628ACOtvAAjt9AAAAA8ACOuTAAjt9AAAAAwMDwAI6+QAAAICJYAPAAEV9AMACOxMAAACFHWADwABFfQDAAjswAAAAgpBgA73nAABgA8AAS0kBPgE9HMACO24uuXMAAAAAwABFxAEJAMACOz7AAEsoAgACMcACO0RgA8AARX0CgMACO0XAIu64gcACO1LAIu7IgsACO2LAIu7YAAUGwABLS4C/wAI7gsACO47AAjvFAACETQFqwAI7g2ADwAD9UQIAAAEDwAI7lMACO8UAAAABAQHAAjueAAAAhzRdA8AARCYBWwAAWwFKwAI7qgEcwAI7soDAAjuqwCLvbrjBAQABLgDAAER+BsAAS0yAv8ACO8rAAjvawAI8BwAAuYIBasACO8tgA8AA/VECAAABA8ACO+LAAjwHAAAAAAAAAGADwAD8BQFKwAI76AFqwAI79WADwAD8BZNTBsAAS02Av8ACPAzAAjwdwAI8UQAAuYEBasACPA1gA8AA/VECAAABA8ACPCfAAjxRAAAAAQEBwAI8NQAACIPWYAPAAEV9AABgA8AA+j8BSsACPD8BJcACPEWAwAI8P8Ai8ClgA8AAS0kGwABLToC/wAI8VsACPGfAAjyKAAC5hQFqwAI8V2ADwAD9UQIAAAEDwAI8ccACPIoAAAABAQHAAjx8AAAIg9ZgA8AAS0kAAGADwAD6PwFKwAI8hgEpBsAAS0+Av8ACPI/AAjyiwAI8vQAAIwFqwAI8kGADwAD9UQIAAAEDwAI8qsACPL0AAAAAAAAAYAPAAP3rAUrAAjywASe7DQAAIu84ACLvogAi7/MAIvBbACLwsAAi8PYAAAAFAAABgL8AIvEVACC/JAAg0o4AINfBACDYjQAg2loAIOngACESQQAhFEYAIRWkACEeVAAhPnUAIXFnACGATgAhg4gAIYQpACGGRAAhi3QAIY0wACGObAAhkc4AIZNqACGVvgAhnK8AIZ7DACGhVwAhosMAIaZSACGo4gAhrBoAIbCmACGybgAhtDkAIbVjACG77AAhv+IAIcS+ACHNYAAhzooAIdA/ACHSjwAh1DoAId2MACHfuwAh4MkAIeN0ACHmHwAh6MoAIet1ACHuIAAh8M0AIfN2ACH0QgAh9u0AIfmaACH8RQAh/vIAIgGfACIDZQAiBfcAIgiLACILHwAiDG0AIg28ACIPnAAiEhsAIhRRACIWTwAiGAAAIhtaACIdRgAiI7oAIiX8ACIngQAiKcEAIiyzACIxZQAiMmgAIjUcACI3twAiOlIAIjztACI/iAAiQQ0AIkLyACJE2gAiRygAIkjvACJNdAAiUxMAIlZ+ACJZWQAiXV0AIl8NACJkbQAiaRkAInTbACJ4QQAiegQAIoZhACKO2gAikswAIpo6ACKbtgAinfgAIp+PACKjyQAipJ8AIqWnACKmUAAipy8AIqlwACKqUwAiqrYAIqyJACKuuwAisLYAIrQPACK6kAAivQkAIr+TACLCQgAixTgAIsfTACLM2AAizmkAItMCACLWiwAi3FAAIuIHACLlAQAi5aIAIuiNACLrFwAi7nAAIvETAAAAhgAi8RUAAAAAAAIEwABLUrsOgMAAAAqA9QAApDYAAIEOAAC37AABAQGw1oE4AAC8rAAAgVwAAMAAhte7DwCBjQAAwABofAAAga4AAMAAhuMAAIHTAADAAIdZAACCCAAAwABc7AAAgjYAAIHgAAEBAYO2gl8AAMAAaK0AAQEBsMsAAAACAsAAS1OAwIKRgpeFggO7EAAAAWABwAD9UQAACQTAAEtVgMCCtYK5CYC9AGADwAD96wAEwABLVoDAgtOC2wmDwQFqgr5gA8AA/VECYAPAAPwFAATAAEtXgMCDKoNSBrsRAGADwABLUwFqgzlgA8AAS1PAAPmqBMAAS1iAwINwg5gGuxIAYAPAAEtTAWqDf2ADwABLU8AA+cEEwABLWYDAg7aD2ga7EwBgA8AAS1MBaoPDYAPAAEtTwAD51QTAAEtagMCD+IQkBp1LAGADwABLUwFqhAlgA8AAS1PAAPnpBMAAS1uAwIRChGgGncMAYAPAAEtTAWqEUGADwABLU8AA+f8EwABLXIDAhIaEsAa7FABgA8AAS1MBaoSWYAPAAEtTwAD6FwTAAEtdgMCFF4WABCkAXQPAAPypAWADwABLUwFqhSBdA8AA/KkBYAPAAEtTwAD6LAEFwABLY4DAgt+C5YMLAQAAA4LxgwsAAAACAgKC9wAABIC9YAPAAP3rAIMCAAAEg8FgA8AA/AUAAGADwABLUwE/AwgBwABLVYAAwCL1LwgBwABLVoEAwCL1PQkBguXAAP1nAAAAAAIGwABLX4DAhLWEvYTOAQAnAAAAAQOEw4TOAAAAAAAAAGADwAD8BQFKhMYBFoTGLoPBwABLVgbAAEthgMCE04TmhPgAACMBaoTUYAPAAP1RAgAAAQOE7oT4AAAAAAAAAGADwAD96wFKhPQBFoT0LoC9wABLVQAAIvV6ACL1rwAi9e4AAAACAsAAS2SAwIWFhYuusAOkpgAAAWABwAD9UQAABgTAAEtmgMCGC4YbBoPnAGADwAD96wFqhhFgA8AA/evAAPpMBMAAS2eAwIYzhjcJgmcAYAPAAEtTAATAAEtogMCGRoZQCacuAGADwABofQAEwABLaYDAhmiGdQm0rgBgA8AAaK4ABMAAS2qAwIaQhpgJg8EBaoZ7YAPAAP1RAmADwAD8BQAEwABLa4DAjd+OGQS7FgBdA8AA/NoCYAPAAPwFXQPAAPypAWADwABLZAEejf/AAPzhAAJgA8AA/AVdA8AA/KkBYAPAAEtkAAABBcAAS5yAwImmiaaNjwCVTwADibeNjwAAAAQEBInEAAAEgmdgA8AAS1MAic8AAASnLmADwABofQCJ4AAABLSuYAPAAGiuAIn0AAAEg8FgA8AA/AUAAGADwABLZAE+A0AiHIoZFooULoJnwABLZ0gBAAFqiilgA8AAS1PAAPn/AMAA/V4BIiEcikoWij8upy7AAEtoSAEAAWqKU2ADwABofcAA7xYAwAD9XgAhHIp8FopxLqcuwABLaEgBAAFqioVgA8AAaH3AAO8qAMAA/V6KFIqUAR6KnrXDAgACaoqnYAO11cAAxOkkiwoGJ7sXForRLoJnwABLZye7GBaK4i6nLsAAS2gnuxkWivwutK7AAEtpAEAiIiIciycWiyIugmfAAEtnSAEAAWqLN2ADwABLU8AA+ekAwAD9XgEci1QWi08ugmfAAEtnSAEAAWqLZGADwABLU8AA+f8AwAD9XgEhHot6wABLfwEAARaLlBaLiS6nLsAAS2iBsMAAaIEAARyLuRaLtBaLqS6nLsAAS2iBsMAAaIFIAQABJ5nrAMAA/fqLIovAAR6LyrXDAgACaovTYAO11cAAxOkkjDYGJ7sXFov9LoJnwABLZye7GBaMDi6nLsAAS2gnuxkWjCgutK7AAEtpAEAiIiIiHIxTFoxOLoJnwABLZ0gBAAFqjGNgA8AAS1PAAPnVAMAA/V4BHIx8Fox3LoJnwABLZ0gBAAFqjIxgA8AAS1PAAPmqAMAA/V4BHIynFoyiLoJnwABLZ0gBAAFqjLdgA8AAS1PAAPnBAMAA/V4BHozNwABLfwEAARaM5xaM3C6nLsAAS2iBsMAAaIEAARyNDBaNBxaM/C6nLsAAS2iBsMAAaIFIAQABJ5nrAMAA/fqMTo0TAR6NHbXDAgACao0mYAO11cAAxOkkjYkGJ7sXFo1QLoJnwABLZye7GBaNYS6nLsAAS2gnuxkWjXsutK7AAEtpAAUIAcAAS2eAAMAi9wUIAcAAS2iBAMAi9xMIAcAAS2mCAMAi9yEIAcAAS2qDAMAi9y8JAYmmwAD9ZwAAAAAsBsAAS22AwIadhqWG0QEAuxoAAAABA4azhtEAAAAAAAAAYAPAAPwFAUqGtgEWhsQWhrYutK7AAEtpuxrAAGi3BsAAS26AwIbVht2HEwEAuxsAAAABA4bwhxMAAAAAAAAAYAPAAPwFAUqG8wEWhwEWhvMutK7AAEtpuxvAAGi5BsAAS2+AwIcXhx+HXwEAtz4AAAABA4c3h18AAAAAAAAAYAPAAPwFAUqHOgEWh0gWhzoutK7AAEtptz7AAGi6BsAAS3CAwIdjh2uHnwEAlWgAAAABA4d9h58AAAAAAAAAYAPAAPwFAUqHgAEWh44Wh4AutK7AAEtplWjAAGi2BsAAS3GAwIejh7SH4gEAqk0AAAABA4fDh+IAAAAAAAAAXQPAAPypAWADwAD96wFKh8YBFofUFofGLrSuwABLaapNwABovgbAAEtygMCH54fyiAkBAIC9AAAAAQOH94gJAAAAAAAAAGADwAD96wFKh/oBFogFFof6LqcuwABLaIGwwABogQbAAEtzgMCIDoggiD0BAIRDAAAAAQOIKIg9AAAAAAAAAGADvLIBSogrARaINhaIKy6nLsAAS2iEQ8AAaIcGwABLf4DAiEKITomhAAG7HAAAAAEDiFyJoQAAAAEBAYhkAAAAgL1gA8AA/esAAGADwAD6PwE+AUmIcByIeYCIdMAi+99IAQABFoiRaoiCYAPAAGh9wADvKoGwwABogQDAAP36PgFKiJ8BKUmItxyIwICIu8Ai+99IAQABFojYaojRYAPAAIbxwAD6ZrsewACG9QDAAP36PgFKiO4BKUmJBhyJD4CJCsAi+99IAQABFokraokgYAPAAIbxwAD6nLsewACG9QDAAP36PgFKiUEBKT4BSolhASEciZAeiXfAAIdCAQABgImKwCL73wBIAQABKwDAAP1eBsAAS4yAwI4ejiaQuQQBAAAAAAEDji6QuQAAAAMDA448AAAAgmdgA8AAS1MAjkcAAACAvWADwABofQCOWwAAALSuYAPAAGiuAABgA8AAS2QBPgZOjsCOyQAAg8FgA8AA/AUBHo7LwABLhgMAA4CO28Ai/NWBjuHAIvzjgo7nwCL88QBOjwqPDwAAg1tdA8AA/KkBYAPAAEtkARyPLRqPGcAAS2uZHQIAAoOPOcAi/Qo0j0MDj0OPVQAAAAAAAABdA8AA/KkBYAPAAEtkAUqPSQExj1NgA8AAS2QAAMAA/PVFj1wBj2WPZwAAYmADwAD8BQGTARyPboWPbMAi/ZpjAQABFo91hI9wwCL9OmHAAPzYAMAA/TIBjY99wCL9mhyPfoWPfcAi/ZpkAQABlADAAP0qPgJOj5OPnAAAg7lgA8AAS2QBHI+ihI+ewCL9OksBAAGFj6PAIv2aAMAA/LhJj60cj7qGj7HAIv3rXwMAA4CPwMAi/NWBj8bAIvzjgo/MwCL88QDAAEuFPgJAHI//Fo/2ho/twCL964PBwABLakgBAAGDkALAIv0KAMAA/SiP7ZAKAEqQFQGGkBzAIv3rP06QQZBIAACBdmADwABLZAEfkFbAAEucBAAEgJBowCL81YGQbsAi/OOCkHTAIvzxg5CDwCL9CgA9HJCXhJCSwCL9OlYBAAGFkJvAIv53AMAA/LpKkKgBhZCvwCL+dwbAAEuNgMCQvpDGlS4EAbsgAAAAAQOQ2pUuAAAAAQEBkOgAAACWJmADvNMAAGADwABLZAE+Ak6Q/JEBAACAvWADwABofQEWkQuAkQPAIv7zpy681UmRGxaRJ4CRH8Ai/vOywbzbPgROkUqRUwAAgmpgA7zoASaRSgGAkVXAIv7zYAO86EmRZByRbYGRaMAi/wpIAQABapF2YAPAAGh9wADvFgDAAP1ePgFKkYwBHpGXwABLkgAAAABJkbYckb+BkbrAIv8KSAEAAWqRyGADwABofcAA7yoAwAD9Xj4BSpHiAR6R7cAAS5MAAAAAP06SHpIsAAC0rmADwABorgEWkkoWkjeCki7AIv87tKC867SuvSBJkl8ekmPAAEt/AQABFpJ6gJJywCL+84C9vK8APgFKkw4BHpMZwABLjAMAA2qTL2ADwABLU8AA+emBkznAIv8Kg5M/wCL/wQA+AUqTZgEek3HAAEuUAgACgZN/wCL/CoOThcAi/8EASZOoFpO0gJOswCL+84U1vN0+AUqTxgEek9HAAEuPAQABgZPhwCL/CgBJk/MWk/+Ak/fAIv7zhTO83D4BSpQRAR6UHMAAS44BAAGBlCzAIv8KAEmUPhaUSoCUQsAi/vOHfbzaPgFKlFsBHpRmwABLjgEAAYGUdsAi/woASZSIFpSUgJSMwCL+84eAvNk+AUqUqwEelLbAAEuXAQABgZTPwCL/CgA+AT0wlOkelO+1wwIAAoCU+MAi/vMklSMCJ7shgJUbwCL+8wAGwABLjoDAlTOVO5WkBAGhvAAAAAEDlUqVpAAAAAEBAZVQAAAAgL1gA8AAaH0AAGADwABLZAFKlV8BHpVjwABLjAMAA2qVeWADwABLU8AA+aoWlYaAlYHAIwE0obzAAGiDapWcYAPAAGiuwADvqAAGwABLj4DAlamVsZYaBAGbDgAAAAEDlcCWGgAAAAEBAZXGAAAAgL1gA8AAaH0AAGADwABLZAFKldUBHpXZwABLjAMAA2qV72ADwABLU8AA+cEWlfyAlffAIwGjmw7AAGiEapYSYAPAAGiuwADvuQAGwABLkIDAlh+WJ5bUBAG7IgAAAAEDlj2W1AAAAAEBAZZFAAAAgL1gA8AA/esAAGADwABLZAFKlk4BHpZSwABLjAMAA2qWb2ADwABLU8AA+ekfloPAAGieAQABHpaOwACG4gIAAoCWqsAjAhIpAABqlsxgA8AAaK7AAO+oAAbAAEuRgMCW2Zbhl5AEAa4RAAAAAQOW+JeQAAAAAQEBlwAAAACAvWADwAD96wAAYAPAAEtkAUqXCQEelw3AAEuMAwADapcqYAPAAEtTwAD56R+XPsAAaJ4BAAEel0nAAIbiAgACgJdlwCMCjyoAAGqXiGADwABorsAA77kABsAAS5KAwJeVl52YAAQBJwAAAAEDl6uYAAAAAAAAAABgA8AAS2QBSpe3AR6Xu8AAS4wDAANql9FgA8AAS1PAAPn/apfeYAPAAGh9wADvFmqX+GADwABorsAA77kABsAAS5OAwJgFmA2YeQQBlaoAAAABA5gemHkAAAAAAAAAYAPAAEtkAUqYJAEemCjAAEuMAwADaphFYAPAAEtTwAD5/2qYUmADwABofcAA7ypqmHBgA8AAaK7AAPq7AAbAAEuUgMCYfpiGmPkEASAAAAABA5iTmPkAAAACAgKYmQAAAIC9YAPAAGh9AJitAAAAtK5gA8AAaK4AAGADwABLZAFKmMUBHpjJwABLjAMAA2qY32ADwABLU8AA+dWAmOXAIwPGgZjrwCMD1AAGwABLlYDAmP6ZBpnlBAG7IwAAAAEDmRqZ5QAAAAMBA5kfAAAAuyRgA8AA/AUAmT4AAACqTV0DwAD8qQFgA8AA/esBagBgA8AA/Q55mVIAAACVaGADwAD8BQFqmWZgA8AA/AUJAGADwABLZAFKmXMBHpl3wABLjAMAA2qZjWADwABLU8AA+dVqmZlgA8AAaH3AAO6GHpmtwABoxAMAA4CZu8AjBDSBmcLAIwRCgpnSwCMEYAAABsAAS5aAwJnqmfKaagQBuyUAAAABA5oKmmoAAAABAQGaFAAAAKTxYAPAAEtkAABgA8AAS2QBSponAR6aK8AAS4wDAANqmkFgA8AAS1PAAPnVappNYAPAAGh9wADuhhaaXICaU8AjBOm0rsAAS2kABsAAS5eAwJpvmnebNgQBuyYAAAABA5qPmzYAAAADAQOalQAAAIC9YAPAAGh9AJqqAAAAuyRgA8AA/AUBapqyYAPAAPwFCZrCAAAAqk1dA8AA/KkBYAPAAP3rAWoAYAPAAP0OeQBgA8AAS2QBSprcAR6a4MAAS4wDAANqmwFgA8AAS1PAAPnVgJsHwCMFWB6bEcAAaMQCAAKBmx/AIwVmgpsmwCMFfgAABsAAS5iAwJs7m0ObuwQBuycAAAABA5tim7sAAAAAAAAAYAPAAEtkAUqbaAEem2zAAEuMAwADapuJYAPAAEtTwAD51WqblWADwABojcAA+sxqm7NgA8AAaK7AAO+oAAbAAEuZgMCcBJwMnLwEAbDcAAAAAQOcKZy8AAAAAQEBnC4AAACFHWADwAD8BQAAYAPAAEtkAUqcQAEenETAAEuMAwADapxhYAPAAEtTwAD6F2qcdmADwABofcAA72kenJbAAGjEAwADkyuAnK3AIwZeAAAGwABLmoDAnPec/57WBAGvFQAAAAEDnRqe1gAAAAEBAZ0mAAAAg0RgA8AAXUEAAGADwABLZAE+CD0cnTuAnTTAIwbRgpQBAAFqnUFgA8AA/evAAPpMAMAAXUNOnVidXQAAgmdgA8AAS1MBHJ1mgJ1fwCMG0a+5AQFgA8AAS1MBGp18wABLXQDAAF1WTp2OnZcAAIU1YAPAAPo/ARydoICdmcAjBtGvMwAAAADAAF1PTp2+ncYAAIRDYAO8sgEcnc+AncjAIwbRuygAAAAAwABdcU6d7530AACBsGADwAD96wEcnf2AnfbAIwbRr7wAAAAAwABdUk6eHZ4rAAC0rmADwABorgEenjHAAGjFAQABgJ5SwCMG0QA9HJ5mgJ5fwCMG0YKMAQABap5qYAPAAP3rwAD6TADAAF1ESp50AR6ef8AAS4wDAAOBnpHAIwcMHp6bwABofwMAAoSeoMAjB4ODnqbAIwdhAYU1gp65wCMHPYWexMAjB6cABsAAS4CAwJ8HnwygGwAArxYAAAABA58boBsAAAABAQGfJQAAAIQ7YAPAAFzyAABcAT4HPRyfNoCfMcAjCEmClAEAAWqfPGADwAD968AA+kwAwABc9z0cn0uAn0bAIwhJr70BAAEWn1UugmfAAEtnAMAAXQM9HJ9lgJ9gwCMISa86AQABFp96Fp9vLqcuwABLaIU1wABoggDAAFz8PRyfjoCficAjCEm7KQEAASafrAEWn6wWn6Eupy7AAEtohEPAAGiHYAPAAI5fAMAAXR49HJ+/gJ+6wCMISYG5AQABFp/WFp/LLqcuwABLaIGwwABogQDAAFz/PRyf7xaf4S60rsAAS2mvFgEAAYCf/8AjCEkAwABoxz0coA+AoArAIwhJgowBAAFqoBNgA8AA/evAAPpMAMAAXPgGwABLdIDAoCCgKaBQAQCFMwAAAAEDoDKgUAAAAAAAAABgA8AA+j8BSqA1ARygOhagNS6CZ8AAS2dIAQABaqBKYAPAAEtTwAD5qgDAAP1eBsAAS3WAwKBUoF2ghAEAhTUAAAABA6BmoIQAAAAAAAAAYAPAAPo/AUqgaQEcoG4WoGkugmfAAEtnSAEAAWqgfmADwABLU8AA+cEAwAD9XgbAAEt2gMCgiKCRoLQBALKgAAAAAQOgmKC0AAAAAAAAAGADwAD6PwFKoJsBHKCgFqCbLoJnwABLZ0gBAAFqoLBgA8AAS1PAAPnVAMAA/V4GwABLd4DAoLigwaD5AQC20gAAAAEDoM+g+QAAAAAAAABgA8AA+j8BSqDSASIWoNIusqDAAEt2AByg5xag3C6nLsAAS2hIAQABaqDwYAPAAGh9wADuhgDAAP1eBsAAS3iAwKD+oQehQgEAttcAAAABA6EPoUIAAAAAAAAAYAPAAPo/AUqhEgEiHKEXFqESLoJnwABLZ0gBAAFqoSdgA8AAS1PAAPn/AMAA/V4AHKE+FqEwLrsawABLbUgBAAGUAMAA/SgGwABLeYDAoUahT6GNAQC20wAAAAEDoVqhjQAAAAAAAABgA8AA+j8BSqFdASIcoWIWoV0ugmfAAEtnSAEAAWqhcmADwABLU8AA+f8AwAD9XgAcoYkWoXsuuxrAAEttSAEAAZUAwAD9KAbAAEt6gMChkqGbocYBAJ15AAAAAQOhpqHGAAAAAAAAAGADwAD6PwFKoakBHKGuFqGpLoJnwABLZ0gBAAFqob5gA8AAS1PAAPnpAMAA/V4GwABLe4DAocqh06IGAQCVNQAAAAEDoeOiBgAAAAAAAABgA8AA+j8BSqHmASIWoeYunXnAAEt6AByiAhah9C67GsAAS21IAQABkwDAAP0oBsAAS3yAwKJUol+ilwEAuyoAAAABA6J6opcAAAAAAAAAYAPAAP3rAUqifQEjFqJ9LoU1wABLdSSikQIWooougL3AAEtyJ4C8FqKTLoC9wABLcgFgA8AA/esGwABLfYDAopyipKOAAQC7KwAAAAEDormjgAAAAAAAAABgA8AA/AUBPgNOosOiyAAAgmdgA8AA/AUBaqLKYAPAAPwFCUmi6hai7i6FM8AAS3Q+AT2IowDAIwyaaqMHYAPAAPwFFUmjLhajMi6FNcAAS3U+AT2Io0TAIwyaaqNLYAPAAPwFIT9Ko3EBgKN4wCMMmgbAAEuBgMCjhaOKpcEAALWXAAAAAQOjmKXBAAAAAQEBo6YAAACWJmADvNMAAGADwAD6PwE+CEAco8EWo7wugL3AAEtySAEAARajzICjxMAjDSGAvbyvAMAA/fqjvKPQAEmj1yIWo+YWo9supy7AAEtohl3AAGiFACEcpAYWo/4Wo/Mupy7AAEtohEPAAGiHSAEAARakEYCkCcAjDSGEQ7ziAMAA/V4+AUqkggEqP0mkmhakpoCknsAjDSGFNbzdSqSwARakty6FNcAAS3U/SaTFFqTRgKTJwCMNIYUzvNxKpNsBIhak4i6FM8AAS3QBFqTuLrKgwABLdj9JpPoWpQaApP7AIw0hh3282j4BSqUXASMWpR4uhTXAAEt1FqUxgKUpwCMNIaxKvN4iFqVALoUzwABLdAEWpUwusqDAAEt2AWADwAD6Pz9JpV4WpWIuhTPAAEt0SqVsASk/SaV9FqWBLoU1wABLdUqliwEqP0qlnQEcpaQuuywBAAEmpbUBgKW1wCMNIWADvOgAwABLgwbAAEuCgMCmEaYWqGwAALstAAAAAQOmL6hsAAAAAAAAAGADwAD6PwE+BU6mPKZBAACAvWADwAD96wEWpkgugL3AAEtySaZSIhamVi6decAAS3oAHKZpgKZkwCMOu0gBAAEnSADAAP36SqZyASk/SaatIhamsS6FM8AAS3QAIiIiHKbLgKbGwCMOu0gBAAEng8EAwAD9+gEcpu2ApujAIw67SAEAASeFhgDAAP36ARynEoCnDcAjDrtIAQABJyMAwAD9+gEcpzSApy/AIw67SAEAASec+ADAAP36SqdIASk/SafIIiIiFqfMLrKgwABLdgAcp+OAp97AIw67SAEAAScjAMAA/foAHKgUFqf8Lrc+wABLb0gBAAGTAMAA/SgAHKg3FqgkLrsbwABLbkgBAAGTAMAA/Sg+AUqoRQEpP0qoXAEqBsAAS4OAwKhxqHao7AAAuywAAAABA6iGqOwAAAABAQGolgAAAIJqYAO86AAAYAPAAPo/AT4BSqimARyouxaorS60rsAAS2m7LAEAARao1YCozMAjD/O0oLzrAMAAaM8GwABLhIDAqPGo9qloAACyowAAAAEDqP2paAAAAAEBAakLAAAAliZgA7zTAABgA8AA+j8BPgJJqRohHKkjFqkeLoC9wABLckgBAAEWqS6AqSbAIxBSgL28rwDAAP36Sqk0ASo/SqlGARypTS61lwEAAYCpXMAjEFIAwABLgQbAAEuFgMCpbalyqjcAAF8AAAABA6l3qjcAAAADAwOphQAAAIJnYAPAAEtTAKmQAAAApy5gA8AAaH0AqaoAAAC0rmADwABorgAAYAPAAPo/AT4BSqm/ASIiHKnQFqnLLoJnwABLZ0gBAAGAqdPAIxDOAMAA/V4AHKnzFqnoLqcuwABLaEgBAAGBqfbAIxDcAMAA/V4AHKofFqoRLrSuwABLaV8BAAGCqiXAIxDqAMAAaM0GwABLhoDAqjyqR6tyAAGEEgAAAAEDqlarcgAAAAMDA6prAAAAgmdgA8AAS1MAqnYAAACAvWADwABofQCqigAAALSuYAPAAGiuAABgA8AA/AUBPgJOqseqzAAAg8hgA8AA/AUBHqrWgfACAAIWquuBqubAIxGPg8HAAP1kFqr6gKr1wCMRgYPBwABLVgBKqzIBHqtBgfACAAKDq1HAIxG2FqtlgqtXwCMRnYPBwABowgAGwABLh4DAq3eriqvkAAAjAWqreGADwAD9UQIAAAEDq5Kr5AAAAAAAAABgA8AA/esBPgFKq5sBJKvgBye7LharrS6CZ8AAS2cngYsWq7QugL3AAEtyJ4GLHKvKFqu8LrSuwABLabsvAAAAAMAAaMsngyEGwABLiIDArPetAK1+AAC7MAAAAAEDrQytfgAAAAAAAABgA8AAS2QBSq0SASMWrSAWrRIutK7AAEtpuzHAAGi7Lh6tRsAAS4wDAAMWrU8ugmfAAEtnFq1VLqcuwABLaBytbxatYS60rsAAS2m7MAAAAADAAGjIAAFgA8AAS2QGwABLiYDArYOtjK3CAAC7MgAAAAEDrZqtwgAAAAAAAABgA8AAS2QBSq2gAR6tpMAAS5YBAAEuAAbAAEuKgMCuEK4Zrq4AALszAAAAAQOuJa6uAAAAAAAAAGADwABLZAE+AUquLgEjHK5VFq5DFq41LrSuwABLaZVowABotoCXAQABkwDAAP00Hq5nwABLjAMAAxaucC6CZ8AAS2cWrnYupy7AAEtoFq6QFq6CLrSuwABLabs0wABovwAuAWADwABLZAAAIvoBACL6QAAi+n8AIvq+ACL6/QAi+0MAIvuCACL7vwAi/LYAIv7TACMBFAAjAYMAIwHyACMCbwAjAuwAIwNJACMDpwAjBBQAIwTJACMFOAAjBeAAIwY+ACMGsQAjCCkAIwlgACMJrwAjCf4AIwpNACMKqAAjCxAAIwt4ACMLxwAjDBYAIwxvACMNAQAjDpAAIw/TACMQMgAjEK8AIxFhACMSEgAjEoQAIxMCACMTOgAjE8QAAAAsAAABgMAAIxR/ACLzvwAi9f8AIxR9AAAAAgAjFH8AAAAAAAIEwABLnQCAwQAAEoDaAADAAL3MAACA9QAApDYAAIEOAAC37AABAQGwzIE+AAC4SwAAgWAAAMAAYJ8AAIGDAAC8rAAAgacAAMAAYmEAAIHIAADAAHoDAAEBAbs1ghIAAMAAakQAAQEBsRGCUAAAwAB0lgAAgnQAAMAAaCEAAIKTAACB4AAAgq8AAMAATScAAILHAADAAGitAACC5QAAwABuiQAAgwEAAMAAS1IAAQEBpKaDJwAAwABnZwABAQWvD68QuzavEbS3g4UAAMAAb24AAAAAAAQCwABLnoDBhBWEJIVCB7s3AAABYAHAAP1RAAFgAcAAb6MAAQXAAEujAAAAAAQAAAMAAAAAAAAAAABgA8AAS54BPwEJAQDAAP1nAAAAAAIGwABLoIDBhIaEi4TEAAK7OAAAAAEDhKyExAAAAAEBAYS7AAAAhgVgA8AAYNIAAFwABsAAS6GAwYUshTmFQAACgogAAAABA4U+hUAAAAAAAAAAYAPAAEukAAAAIxXDACMV9AAjFhwAAAACAsAAS6SAwYV7hYqOLwe7OQAAAWABwABNXQAAAAEFwABLugAAAAAEAAADAAAAAAAAAAAAYAPAAEukAT8BCQEAwABNbAAAAAASBsAAS6aAwYX0hfmGOQACuzoAAAABA4YYhjkAAAABAQGGNwAAAIGmYQMBYAO86FwAAFwABsAAS6eAwYY+hkOGaAACuzsAAAABA4ZThmgAAAABAQGGYQAAAIJmYAO80wAAYAPAAPo/AAbAAEuogMGGpoarhtAAArs8AAAAAQOGu4bQAAAAAQEBhskAAACCZmADvNMAAGADwAD6PwAGwABLqYDBhtWG+IcWAAK7PQAAAAEDhwmHFgAAAAEBAYcRAAAAgL1gA8AA/esAAF0DwAD82gJgA8AAS2RgA8AAb28ABsAAS6qAwYcbhy6HUgACuz4AAAABA4dFh1IAAAABAQGHTQAAAIC9YAPAAP3rAABdA8AA/GcBYAPAAEtkAAbAAEurgMGHV4dqh44AArs/AAAAAQOHgYeOAAAAAQEBh4kAAACAvWADwAD96wAAXQPAAPxnAWADwABLZAAGwABLrIDBh5OHmIfvAAK7QAAAAAEDh6qH7wAAAAEBAYeyAAAAgaZhAwJgA8AA/etdA8AA/NoCYAPAAEtkYAPAAG9vWwAAXAAGwABLrYDBh/SH+YhSAAK7QQAAAAEDiA2IUgAAAAEBAYgVAAAAgaZhAwJgA8AA/etdA8AA/NoCYAPAAEtkYAPAAG9vWwAAXAAGwABLroDBiFeIXIi1AAK7QgAAAAEDiHCItQAAAAEBAYh4AAAAgaZhAwJgA8AA/etdA8AA/NoCYAPAAEtkYAPAAG9vWwAAXAAGwABLtIDBiZWJr4nKAQK01wAAAAEDicqJygAAAAAAAABdA8AA/GcBYAO8wQAGwABLtYDBigaKIIozAQK7QwAAAAEDijOKMwAAAAAAAABdA8AA/GcBYAO8wQAGwABLr4DBijiKPYptAAK7RAAAAAEDilSKbQAAAAEBAYpkAAAAgmpgA7zoAABgA8AA+j8ABsAAS7CAwYqdiqKK0gACu0UAAAABA4q0itIAAAABAQGK0AAAAIGmYQMBYAO85VwAAFwABsAAS7aAwYsYiy+LQAECu0YAAAABA4tAi0AAAAAAAAAAXQPAAPxnAWADwABiZgAGwABLt4DBi4eLnouvAQK7RwAAAAEDi6+LrwAAAAAAAABdA8AA/GcBYAPAAGJmAAbAAEuxgMGNGo0yjXwAArtIAAAAAQONSY18AAAAAQABjWwAAAC7SV4DAAICAmADwABg0mADwABg0gABVwPAAPWsAWADwABg0mADwAD8BQFqAGADwAD9DnkAXQPAAPxnAWADwABg0gAGwABLsoDBjcmNzo33AAK7SgAAAAEDjeKN9wAAAAEBAY3wAAAAgmZgA7zTAABgA8AA+j8ABsAAS7iAwY38jheOLQECt7cAAAABA44tji0AAAAAAAAAYAPAAHpNAAAAIxZ1ACMWqAAjFtwAIxcQACMXUwAjF5AAIxfNACMYFQAjGF0AIxilACMY0gAjGP8AIxkzACMZZgAjGZUAIxnEACMaKwAjGl8AIxqHAAAAEgLAAEu7gMGOMo44wABZNAO7SwAAAWABwABvqAABYAHAAEueEwTAAEu+gMGOo46vCbWqwABLnQBgA8AATSsABMAAS7+AwY7QjucJu0zAAEudAGADwAB6TQAEwABLwIDBkFuQkAm7TcAAS50AXQPAAP2cAWADvMEBHpB+wADBFwABYAO8wQAABMAAS8GAwZFPkXwJu07AAEudAF0DwAD9nAFgA8AAYo0BHpFowADBFwABYAPAAGKNAAAEwABLwoDBkdSSAAm7T8AAS50AXQPAAP2cAWADvMEBHpHuwADBFwABYAO8wQAABMAAS8OAwZI7kn8Ju1DAAEudAF0DwAD82gJgA8AA/etdA8AA/NoCYAPAAEtkYAPAAG9vATKSfWADwAD9610DwAD82gJgA8AAS2RgA8AAb28ABMAAS8SAwZK5kv8Ju1HAAEudAF0DwAD82gJgA8AA/etdA8AA/NoCYAPAAEtkYAPAAG9vATKS/WADwAD9610DwAD82gJgA8AAS2RgA8AAb28ABMAAS8WAwZM5k38Ju1LAAEudAF0DwAD82gJgA8AA/etdA8AA/NoCYAPAAEtkYAPAAG9vATKTfWADwAD9610DwAD82gJgA8AAS2RgA8AAb28ABMAAS8aAwZOnk9wJu1PAAEudAF0DwAD82gJgA7zBYAPAAG8YATKT2mADvMFgA8AAbxgABMAAS8eAwZSTlMUJu1TAAEudAF0DwAD82gJgA7zTYAPAAG6bATKUw2ADvNNgA8AAbpsABMAAS8iAwZXKlg4Ju1XAAEudAF0DwAD82gJgA8AA/etdA8AA/ZwBYAPAAG6bATKWDGADwAD9610DwAD9nAFgA8AAbpsABMAAS8mAwZahluQJu1bAAEudAF0DwAD82gJgA8AA/etdA8AA/ZwBYAPAAG6bATKW4mADwAD9610DwAD9nAFgA8AAbpsABMAAS8qAwZd4l7sJu1fAAEudAF0DwAD82gJgA8AA/etdA8AA/ZwBYAPAAG6bATKXuWADwAD9610DwAD9nAFgA8AAbpsABMAAS8uAwZfUl/MJu1jAAEudAF0DwAD9nAFgA8AAYmYBHpfkwADBFwABYAPAAGJmAAAEwABLzIDBmBqYNgm7WcAAS50AYAPAAG96AATAAEvNgMGYVJh+CbtawABLnQBdA8AA/ZwBYAPAAGDSAR6YasAAwRcAAWADwABg0gAABMAAS86AwZiXmL8Ju1vAAEudAF0DwAD9nAFgA8AAYmYBHpiwwADBFwABYAPAAGJmAAAEwABLz4DBmNeY/wm7XMAAS50AXQPAAP2cAWADwABiZgEemPDAAMEXAAFgA8AAYmYAAATAAEvQgMHAAFJ+wABSqwm7XcAAS50AXQPAAP2cAWADwABg0gEewABSl8AAwRcAAWADwABg0gAAAQXAAEvxgMGZBJkEmXUAAAADmRuZdQAAAAMDA5khAAAEtapgA8AATSsAmTQAAAS7WWADwABvegCZXQAABLtMYAPAAHpNAABgA8AAS7sBPwQIAcAAS76AAMAjHxwIAcAAS8yBAMAjHyoIAcAAS7+CAMAjHzgJAZkEwABvtQAAAAAbBsAAS9KAwZPhlAKUKwEAu14AAAABA5QXlCsAAAAAAAAAXQPAAPzaAmADvMFgA8AAbxgBSpQaARaUGi67U8AAS53AAEvGBsAAS9SAwZl6mZGZxwEAr1TAAEudAAAAAQOZpZnHAAAAAAAAAGADuvUBSpmoARaZtRaZqC61qsAAS53AAEu+pPjAAE0xBsAAS9WAwZnMmeCaCwEAt/XAAEudAAAAAQOZ8ZoLAAAAAAAAAGADwABqRQFKmfQBFpoBFpn0LrWqwABLncAAS763tMAATS8GwABL1oDBmhCaKpqUAQC7QwAAAAEDmj6alAAAAAAAAABdA8AA/GcBYAO8wQFKmkEBHJpfFppTFppBLrtTwABLncAAS8aDYsAA/PyBpQEAATSaZQOaZZqTAAAAAQEBmmYAAACZymADvMEAAGADwAD6PwFKmm4BFpqFHJp/FppuLrtTwABLncAAS8ZLAQABgJqAwCMgsADAAPzuqgjAAG8aAMAA/HMGwABL14DBms+a9Zs+AQC01wFqmtBgA8AA/VECAAABA5sRmz4AAAAAAAAAXQPAAPxnAWADvMEBPgFKmxcBFpseLrtNwABLncAAS8AGwABL2oDBnE2cUqCQAAC05AAAAAEDnGugkAAAAAICApyBAAAAgpBgA8AAYo0AnJkAAAC7X14DAAICAmADvMFdA8AAaCIBYAPAAG8mAAFXA8AAbowAXAAAXAE+BU6ctpy6AACZymADvMEBFpzBgJy8wCMhYpYmwABij06c05zcAACGTmADwAD6PwEcnO8WnN4ut/XAAEudwABL1bL1AQABgpz9wCMhnwDAAGpNPRydGhadBy67TsAAS53AAEvBVgEAAYCdHsAjIWIAwAD9qUmeLSIhFp42gp4ywCMhn4QavMUBg55EwCMhvT4CPRyecxaeVi67TcAAS53AAEvAVgEAAYKed8AjIZ8AwAD9qT0cnoMuu2DAAEudAgACgp6dwCMhn4GeosAjIXAAwABL5j9Jny0cn0UWnzEuu0/AAEudwABLwlYBAAGCn0nAIyGfAMAA/ak+Aj0cn2CBn1fAIyFwIAIAAoKfYcAjIZ8cn3ocn2Yuu2HAAEudAQABgp91wCMhnwDAAEvlu2IAAAAAwABvHwAAPRyfohafji6vVMAAS53AAEvUsv4CAAKCn7PAIyGfNJ+4A5+4oIUAAAABAQGfxwAAAITaYAPAAGKNAABgA8AA/Q4BPgFJn9wcn/QWn+Auu0/AAEudwABLwlYBAAEWoAKEn/jAIyMBlibAAGKPAMAA/ak+AT0coCGBoBjAIyFwIAIAAhagO4SgMcAjIwGWJsAAYo8coGYcoEQuu2HAAEudAQABFqBdhKBTwCMjAZYmwABijwDAAEvlu2IAAAAAwABvHwAAPwC7CT8GwABL3IDBoJWgmqJQAAC7Y8AAS50AAAABA6CuolAAAAADAwOg0gAAALtkXQPAAPzaAmADwABLZGADwABvbwCg8AAAAIJmYAO80wChBQAAALWWYAPAAE0rAABgA8AA+j8BPgNJoRIcoSCAoRbAIyPBSAEAASsAwAD9XkqhKQEqP0ahO6FloUkAAACk8WADwABLZAAWoV+AoVXAIyPBg2LAAPz8PgFJoW0coXqDoXHAIyQitZcBAAGBoYnAIyPcAMAAS4E+Ak6hsKG2AAC1nGADwABvbwEcocGAobjAIyPBSwEAAYOhwsAjJCIAwAD87kmh1Ryh34Sh2cAjJGO1mgMAA4Gh5sAjI9wWofeDoe7AIyQipy7AAEtogqIDwCMj6ADAAG9xPgFKohcBKT8/SqJAASoGwABL3YDBolWibaTQAAC7ZcAAS50AAAABA6KHpNAAAAACAgKisgAAALtkXQPAAPzaAmADwABLZGADwABvbwCiygAAAIJmYAO80wAAXQPAAPxnAWADwABorgE+BEmi2Byi5oCi3MAjJPNIAQABKwDAAP1eSqLvAWqi9l0DwAD8qQFgA8AAaK7AAPreP06jJgAAALtmXQPAAP2cAWADwABorgBGozqjZKNIAAAApPFgA8AAS2QAFqNegKNUwCMk84NiwAD8/D4BSaNsHKN5g6NwwCMldrWXAQABgaOIwCMlDgDAAEuBPgJOo6+jtQAAtZxgA8AAb28BHKPAgKO3wCMk80sBAAGDo8HAIyV2AMAA/O5Jo9Qco96Eo9jAIyW3tZoDAAOBo+XAIyUOFqP2g6PtwCMldqcuwABLaBakAi61qsAAS53AAEu+AMAAb3E+Aj0jHKQsgqQdwCMlXEgBAAErAMAA/V6KpB3AIyVcHqQ0wADBFwABYAPAAGiuAAArAV0DwAD9nAFgA8AAaK49HKRjgqRUwCMlXFYBAAEWpHCDpGfAIyV2tK7AAEtpAMAA/ak/P0qknAE1AAAAAQBdA8AA/ZwBYAPAAGiuAYKko8AjJVwjHKSygwDAIyaGSAEAASsAAGqktV0DwAD8qQFgA8AAaK7AAPregwDAIyaGAV0DwADMwwFgA8AAaK4GwABL3oDBpNWk7aVuAAC7Z8AAS50AAAABA6UJpW4AAAABAQGlFwAAAIJmYAO80wAAXQPAAPxnAWADwABorgE+AUqlJQEcpSwuu2XAAEudAgACHKVUFqVHLrtQwABLncAAS8NLAQABFqVcgKVVwCMm/YC9vK8AwAD87oClY8AjJv0AwABL3QbAAEvfgMGlc6V4pgEAALtowABLnQAAAAEDpYmmAQAAAAEBAaWXAAAAgmZgA7zTAABgA8AA+j8BPgFKpaUBHKWsLrtjwABLnQMAAxyl2Ralyi67UcAAS53AAEvESwEAARal4YCl2sAjJ4OAvbyvAMAA/O6ApejAIyeDFqXwLrWqwABLncAAS74AwABL3AbAAEvggMGmBqYLppQAALtpwABLnQAAAAEDphymlAAAAAEBAaYqAAAAgmZgA7zTAABgA8AA+j8BPgFKpjgBHKY/LrtjwABLnQMAAxymbBamXS67UsAAS53AAEvFSwEAARamdICmbcAjKBCAvbyvAMAA/O6ApnvAIygQFqaDLrWqwABLncAAS74AwABL3AbAAEvngMGmmaaergwAAK9dAAAAAQOmsK4MAAAAAgICpsMAAACvXmADwABndQCm4gAAALtqXgMAAgICYAO8010DwABoIgFgA8AAbwEAAVcDwABuiwBcAABcAT4ETqb9pwYAAKTxYAPAAEtkARanE4CnCMAjKJmk8cAAZ3hOpyinMwAArIZgA8AA/esBFqc+gqc1wCMo1oC9wABLck+nSadOAAABu2thAwNdA8AA/NoCYAPAAP3rXQPAAP2cAWADwABum2EDAWADwABum10DwABoIgFgA8AAbwFhAwFgA8AAbptgA8AA+j9cAAOnVqlkAAAAAwMDp34AAACzkV0DwAD82gJgA8AA/etdA8AA/ZwBYAPAAG6bAKekAAAAiKdhAwFgA8AAbptdA8AAaCIBYAPAAG8BAKfMAAAAu2xhAwFgA8AAbptgA8AA+j8AAFwBPgE9HKf4LrttwABLnQMAA4WoBMAjKW6DqA/AIyj2NKgbA6gbqV0AAAABAQGoKAAAALtuYAPAAG6bAABgA8AA+j8BPgJJqDkiHKhGgqg9wCMo1rWXAQABFqhbFKhVwCMp9AgApCTAAG6eAMAAS4EAHKiPFqhyLrtZwABLncAAS8y1lQMAA4Cor8AjKJkWqMEUqLvAIyn0CACkJMAAbp4WqMkutarAAEudwABLvgDAAG99PgI9HKjugajkwCMopyACAAIWqPUUqO/AIyn0CACkJMAAbp4cqQOGqP3AIymQIAEAARSpBMAjKfQIAAAAAABKqRcBHKkth6kewCMpriABAAEUqS7AIyn0CAAAAD9KqUgBKgDAAEvkQUepaxapfoCpc8AjKJmCZ8AAZ4QDAamgaqmgYAPAAGdowAD66QA+Az0cqbAuu3ACAAIWqeKAqdfAIyiZpPHAAGd4Fqn3gKnswCMomYUdwABnhQDAAG+ySaoPHKoTLrtxwABLnQIAAoCqKMAjKJkWqjQuu1DAAEudwABLwwDAAEvhPgE9HKpYhKpQwCMpGCADAAMWqmguu1XAAEudwABLyDSqlwOql6rWAAAAAQEBqpgAAABFYAPAAG6bAABdA8AAaCIBYAPAAG8BAUqqngEcqqCFqp7AIyuNu3ICAAJqqrBdA8AAaCIBYAPAAG9OwAD6/RaqyIKqv8AjKNa0rsAAS2kAwABuujSrhQOrhaumAAAAAQEBq4YAAAC7c2ADwABumwAAYAPAAPo/AUqrjAEhFquPhauNwCMr87t0wABurwAAP0KruwABq9xqq9xgA8AAZ2jAAPsSAD4CSavpHKvtLrtxwABLnQIAAoCsAsAjKJkWrA4uu1HAAEudwABLxADAAEvhPgE9HKw0hKwswCMpGCADAAMWrEQuu1bAAEudwABLyTSscgOscqyXAAAAAQEBrHMAAABFYAPAAG6bAABdA8AAaCIBYAPAAG8BAUqseQEcrHuFrHnAIyyPnnYBAAFqrIldA8AAaCIBYAPAAG9OwAD6/QDAAG64NKynA6ynrMYAAAABAQGsqAAAALtzYAPAAG6bAABgA8AA+j8BSqyuASEWrLGFrK/AIyzlu3bAAG6wAAA/QqzbAAGs/Gqs/GADwABnaMAA+ykAPgJJrQkcrQ0uu3HAAEudAgACgK0iwCMomRatLi67UsAAS53AAEvFAMAAS+E+AT0crVSErUzAIykYIAMAAxatZC67V8AAS53AAEvKNK2SA62SrbgAAAABAQGtkwAAAEVgA8AAbpsAAF0DwABoIgFgA8AAbwEBSq2ZARytm4WtmcAjLYGCigEAAWqtql0DwABoIgFgA8AAb07AAPr9AMAAbrk0rcgDrcit6AAAAAEBAa3JAAAAu3NgA8AAbpsAAGADwAD6PwFKrc8BIRat0oWt0MAjLde7eMAAbrEAAD9Crf0ABsAAS+GAwa4RrhawtgAAu3HAAEudAAAAAQOuKrC2AAAAAgICrjYAAACvXmADwABndQCueAAAALt5XQPAAPzaAmADwAD9610DwAD82gJgA8AAS2RgA8AAb28AAGADwAD6PwE+B06ulK6dAACk8WADwABLZAEWrqqArp/AIy4tpPHAAGd4Tq6/rsQAAIC9YAPAAP3rARauz4KuxsAjLm6AvcAAS3JOruCu6wAAraxgA8AA/VEBFq74gK7twCMuLbRUwABneU6vM689AAC7ZF0DwAD82gJgA8AAS2RgA8AAb28BNQAAAAEAXQPAAPzaAmADwAD9610DwAD82gJgA8AAS2RgA8AAb28Bga9HwCMuOzUAAAABAGADwAD96wGDr1PAIy6ONQAAAAEAXQPAAPzaAmADwABLZGADwABvbwEcr1KFr1LAIy7rSwEAAYavUsAjLxkAwAD87iMcr1mHAMAjLy1IAQABKwDAAP1eNQAAAAEAXQOUPQJgA8AAS2RgA8AAb28BH69hlFEAAmADwABLZGADwABvbwAANQAAAAEAXAEcr1KFr1LAIy7rgL8CAAKGr1LAIy8ZFADAIy91CAAAwAD87xQAwCMvdQgAhwDAIy8tAV0DwAD82gJgA8AAS2RgA8AAb29Or6qvtgAAhOdgA8AAb3UBJq+qARyvwYWvuMAjLs5LAQABgq/CwCMubgDAAPzuYAPAAG91Sa/RHK/hhq/VwCMv70gBAAErAMAA/V4+Aj0cr/uFr/LAIy7OgL8CAAKCr/zAIy5uHLAwFrAILrtZwABLncAAS8y1kwIAAoKwSsAjLm6EsFTAIy6uAMAAb3wAwAD870qwZwEpP0qwfgEcsJGGsIXAIy/vtZkBAAGEsKfAIy6uAMAAb3cGwABL6IDBsLuwwLEQAAC0+gAAAAEDsM+xEAAAAAEBAbDjAAAIgpBgA8AAYmYAAFwBPgE9HLD5FrDvLrtYwABLncAAS8tWAQABFrECgLD9wCMwxbQGwABiaADAAP2pBsAAS+mAwbEVsRq+FAAAr1sAAAABA7ErvhQAAAACAgKxNgAAAK9cYAPAAGenALFUAAAAu2peAwACAgJgA7zTXQPAAGgiAWADwABvAQABVwPAAG6LAFwAAFwBPgVOsXOxewAAliZgA7zTASaxcwEWsYeAsX3AIzEjlibAAGeqYAO8006xp7GuAAC0510DwABoIgFgA8AAbwEBH7G0wABoUwABYAPAAG8BAABOsdqx4AAAu25gA8AAbpsBHLHiLrt6wABLnQIAAoKx8sAjMWCDsfvAIzGGAMAAS+NBR7IIFrIagLIQwCMxI4JnwABnqxABsjtqsjtgA8AAZ4nAAPtAAD4CPRyyW4OyVMAjMYaApQEAARyyaISyYsAjMa6edgEAAWqydl0DwABoIgFgA8AAb07AAPtUAMAAbrgAwABoNEKyjgADsq5qsq5gA8AAZ4nAAPtpsttqsttgA8AAZ4nAAPuBswhqswhgA8AAZ4nAAPuZAD4BQrQNAAG0LWq0LWADwABnicAA+7EAPgM9HLRDLruAAQABgLRcwCMxIwDAAG+xPRy0d4O0cMAjMYaApQEAARy0kYS0i8AjMa67cgIAAmq0oV0DwABoIgFgA8AAb07AAPvGFrS4gLSuwCMxI7SuwABnrgDAAG66AMAAaDRCtNEAAbTxarTxYAPAAGeJwADwZAA+Az0ctQguu4ABAAGAtSHAIzEjAMAAb7E9HLU8g7U1wCMxhoClAQABHLVWhLVQwCMxrrtyAgACarVmXQPAAGgiAWADwABvTsAA+1QWtX6AtXTAIzEjtK7AAGeuAMAAbroAwABoNEK1lwABtbdqtbdgA8AAZ4nAAPvcAD4CPRy114O10MAjMYaApQEAARy15IS13sAjMa6CigEAAWq1810DwABoIgFgA8AAb07AAPvGAMAAbrkAwABoNEK2CgABtipqtipgA8AAZ4nAAPvzAD4CPRy2S4O2RMAjMYaApQEAARy2WIS2UsAjMa6CigEAAWq2Z10DwABoIgFgA8AAb07AAPvGAMAAbrkAwABoNEK2fgABtp5qtp5gA8AAZ4nAAPwLAD4CPRy2uYO2ssAjMYaApQEAARy2xoS2wMAjMa6CigEAAWq21V0DwABoIgFgA8AAb07AAPtUAMAAbrkAwABoNEK27QABtw1qtw1gA8AAZ4nAAPwlAD4CPRy3LIO3JcAjMYaApQEAARy3OYS3M8AjMa6edgEAAWq3R10DwABoIgFgA8AAb07AAPvGAMAAbrgAwABoNEK3XgABt35qt35gA8AAZ4nAAPw8AD4CPRy3mIO3kcAjMYaApQEAARy3pYS3n8AjMa6edgEAAWq3s10DwABoIgFgA8AAb07AAPvGAMAAbrgAwABoNEK3ygABt+pqt+pgA8AAZ4nAAPxTAD4CPRy4BYO3/sAjMYaApQEAARy4EoS4DMAjMa6edgEAAWq4IF0DwABoIgFgA8AAb07AAPtUAMAAbrgAwABoNEK4OAABuFhquFhgA8AAZ4nAAPxrAD4CPRy4c4O4bMAjMYaApQEAARy4gIS4esAjMa6qTwAAAADAAG62AMAAaDRCuJEAAbixarixYAPAAGeJwAD8hQA+Aj0cuNWDuM7AIzGGgKUBAAEcuOKEuNzAIzGuu4kBAAEWuPmAuO/AIzEjhgXAAGewAMAAbrcAwABoNEK5DQACuS1quS1gA8AAZ4nAAPAwuVpquVpgA8AAZ4nAAPBKAD4CPRy6C4O6BMAjMYaApQEAARy6JYS6H8AjMa67cgIAAmq6NV0DwABoIgFgA8AAb07AAPtUFrpNgLpDwCMxI7SuwABnrgDAAG66AMAAaDRCumYAAbqGarqGYAPAAGeJwADwlgA+BE66qrqxAACCZmADvNMBJrqqARa6vYC6s8AjMSOWJsAAZ6pgA7zTPRy7XYO7VsAjMYaApQEAARy7d4S7ccAjMa67cgIAAmq7h10DwABoIgFgA8AAb07AAPtUFrufgLuVwCMxI7SuwABnrgDAAG66AMAAaDRJu7g1AAAAAQBgA8AA+j8BNQAAAAEAXQPAAPypAWADwABiZgEWu8aAu7zAIzEjhR3AAGexIxy71YYAwCM3AUgBAAErAAArFrvVhgDAIzcBg7LAAPyMAWADwAD6PyMcu+CGAMAjNvRIAQABKwAAKoYAwCM29AFgA8AA+j8+AT0cu/Yuu3ACAAIevCPAAEuUAgACFrw4hbwxwCM2fqcuvNUWvE6AvETAIzEjtK7AAGeuABa8doC8bMAjMSOFHcAAZ7EAwABvsj9CvJgAAby4ary4YAPAAGeJwAD8nwA+Aj0cvMouu4ABAAGAvOPAIzEjAMAAb7FCvPcAAr0Xar0XYAPAAGeJwAD8ub05ar05YAPAAGeJwADwfgA+AT0evU+1wwIAAmq9WGADtdXAAMVDJL2+Aye7jBa9l4C9jcAjMSOCZ8AAZ6snu40ASb3LFr3Wg73PwCMxhoOywABoLj4BPRy99IG96sAjMTEgAgACFr37hL31wCMxrqQkwABunoO+A8AjMYYAAD8GwABL6oDBvhm+Hr97AAC05gAAAAEDvjG/ewAAAAMCAr4+AAAAmcpgA7zBAL5WAAAAu2peAwACAgJgA7zTXQPAAGgiAWADwABvAQABVwPAAG6LAFwAAb5uAAAAtNVgA8AA+j8Bar6IYAPAAPo/AFwBPgE9HL6qFr6WLq9UwABLncAAS9Sy+wIAAoC+vcAjOJY0vsoDvsq/dgAAAAICAr7XAAAAmcpgA7zBAL7pAAAAgmZgA7zTAABgA8AA/Q4BPgE9HL75LruOwABLnQQAA4O/GcAjORSEvx7AIzkggb8mwCM4ogG01YK/VsAjOMzAAEviALsGBsAAS+KAwb+Av4XAAEHGAAC7jsAAS50AAAABA7+kwABBxgAAAAQDA7+4AAAAmcpgA7zBAL/KAAAAgmZgA7zTAL/lAAAAu2peAwACAgJgA7zTXQPAAGgiAWADwABvAQABVwPAAG6LAFwAAb/9AAAAtNVgA8AA+j8BasAAQBdgA8AA+j8AXAE+BEnAAEAlIRbAAEAxgcAAQCrAIzmehQK82ErAAEBDAD9OwABAYsAAQGkAALTnXQPAAGgiAWADwABvAQEfwABAb8AAaFMAAWADwABvAQAATsAAQJXAAECbAAC7bmADwABumwEcwABAnS67esAAS50CAAKBwABArcAjOZ6EwABAtcAjOhIAwABL40nAAEDCFsAAQM2EwABAxsAjOhKDssAAaC4+AUnAAEDhg8AAQOXAIznUPgE9MMAAQQkfwABBE7XmAgACgcAAQS3AIzmeJMAAQYAEJ7uPgcAAQVfAIzmeJ7uQhcAAQXrAIzpAAD4BPRzAAEGkgsAAQZrAIzmqIAIAAoHAAEGlwCM5noTAAEGtwCM6EgAAPwbAAEvjgMHAAEHLwABB18AATLwAALt6wABLnQAAAAEDwABB5sAATLwAAAADAgLAAEH0AAAAgmZgA7zTAMAAQg8AAAC0510DwABoIgFgA8AAbwEAAcAAQiMAAAC01WADwAD6PwFqwABCPWADwAD6PwBgA8AAbpsBPgNOwABDAsAAQwgAALtuYAPAAG6bARzAAEMWFsAAQwouu1TAAEudwABLx0sBAAGAwABDF8AjOzQAwAD87knAAEMkHMAAQy6DwABDKMAjO4BIAQABKwDAAG67PgNOwABDTMAAQ1wAALuRYAPAAG9iARzAAENrFsAAQ14utarAAEudwABLvruSAQABgMAAQ3vAIzs0AMAATVJJwABDihbAAEOVgMAAQ47AIzs0hQK82D4KTsAAQ7jAAEPDAACnLmADwAD96wEWwABDzIDAAEPFwCM7NIC9vK9OwABD5sAAQ+oAAJnKYAO8wQEWwABD84DAAEPswCM7NIT/vOFOwABEEMAARBkAAIZOYAPAAPo/ARzAAEQsFsAARBsut/XAAEudwABL1bL1AQABhsAARDrAIzxVAMAAak09i8AAREjAIzuAHsAARFTAAG6gAgABgMAARGDAIzs0AbuRhMAARHnAIzvaScAARJMiFsAARJ6AwABEl8AjOzSHfbzaACGHwABEqsAjPHk+AT0cwABEx4HAAETAwCM7QoClAQABHMAARNSDwABEzsAjO4CqTwAAAADAAG62AMAAaDQ/ScAARO8lwABE+oDAAETzwCM7NGADwAB1lj4BPRzAAEXggcAARdnAIztCgKUBAAEcwABF/IPAAEX2wCM7gLtyAgACasAARgxdA8AAaCIBYAPAAG9OwAD6/WrAAEYpYAPAAGiuwADvqADAAG66AMAAaDQ/ScAARkciFsAARlGDwABGS8AjO4C7dsAAbrAAHMAARmouu2jAAEudAQABgMAARnzAIzs0AMAAS98+AT0cwABGmIHAAEaRwCM7QoClAQABHMAARqWDwABGn8AjO4CedgEAAWrAAEazXQPAAGgiAWADwABvTsAA+v0AwABuuADAAGg0P0nAAEbWIhbAAEbgg8AARtrAIzuAu3jAAG6xABzAAEb6LrtpwABLnQEAAYDAAEcMwCM7NADAAEvgPgE9HMAARyiBwABHIcAjO0KApQEAARzAAEc1g8AARy/AIzuAgooBAAFqwABHRF0DwABoIgFgA8AAb07AAPr9AMAAbrkAwABoND9JwABHZxbAAEdxg8AAR2vAIzuAu3TAAG6vPgJOwABHrsAAR70AALtmXQPAAPxnAWADwABorgEcwABHzS67Z8AAS50BAAGAwABH6sAjOzQAwABL3kFGwABH/cAASDHAAEgQAAAAtK5gA8AAaK4AFMAASCHAIz7ICAA+Aj0cwABIRoHAAEg/wCM7QoClAQABHMAASFODwABITcAjO4C7cgIAAmrAAEhjXQPAAGgiAWADwABvTsAA+v0UwABIcsAjPwkJAADAAG66AMAAaDRJwABIjyEWwABImoPAAEiUwCM7gLt0wABurz4BQsAASMMAPz9JwABI9yGCwABI/MAjO1o+A0nAAEkiFsAASSyDwABJJsAjO4C7dMAAbq8+AT0cwABJtxzAAEmEFsAASVMuu1XAAEudwABLyJkdAgAChcAASZDAIzwvNMAASZwDwABJnMAASaQAAAAAAAAAXQPAAP2cAWADwABumwFKwABJogE1AAAAAQBdA8AA/ZwBYAPAAG6bAR4AwADBFwABYAPAAG6bAAAUAMAjQBsIAADAAPz1VgEAAYPAAEm7wCM7gADAAP2pP0nAAEnZFsAASeODwABJ3cAjO4C7dsAAbrA+AT0cwABKaxzAAEo4FsAASgguu1bAAEudwABLyZkdAgAChcAA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u9UAAAFgAcAAb6gAAWABwABMLScEwABMWIDCo/KkLwm71sAATCQAXQPAAPzaAmADvMFgA8AATEkBMqQtYAO8wWADwABMSQAEwABMWYDCpIekswm7T8AATCQAXQPAAP2cAWADvMEBHqShwADBFwABYAO8wQAABMAATFqAwqU4pWsJu9fAAEwkAF0DwAD9nAFgA7zlAR6lWcAAwRcAAWADvOUAAATAAExbgMKl8KYsCbvYwABMJABdA8AA/ZwBYAO86AEephfAAMEXAAFgA7zoAAAEwABMXIDCpmamqgm7UMAATCQAXQPAAPzaAmADwAD9610DwAD82gJgA8AAS2RgA8AAb28BMqaoYAPAAP3rXQPAAPzaAmADwABLZGADwABvbwAEwABMXYDCpuSnKgm7UcAATCQAXQPAAPzaAmADwAD9610DwAD82gJgA8AAS2RgA8AAb28BMqcoYAPAAP3rXQPAAPzaAmADwABLZGADwABvbwAEwABMXoDCp2Snqgm7UsAATCQAXQPAAPzaAmADwAD9610DwAD82gJgA8AAS2RgA8AAb28BMqeoYAPAAP3rXQPAAPzaAmADwABLZGADwABvbwAEwABMX4DCp9KoBwm7U8AATCQAXQPAAPzaAmADvMFgA8AAbxgBMqgFYAO8wWADwABvGAAEwABMYIDCqLqo7Am7VMAATCQAXQPAAPzaAmADvNNgA8AAbpsBMqjqYAO802ADwABumwAEwABMYYDCqj6qggm7VcAATCQAXQPAAPzaAmADwAD9610DwAD9nAFgA8AAbpsBMqqAYAPAAP3rXQPAAP2cAWADwABumwAEwABMYoDCqxWrWAm7VsAATCQAXQPAAPzaAmADwAD9610DwAD9nAFgA8AAbpsBMqtWYAPAAP3rXQPAAP2cAWADwABumwAEwABMY4DCq+ysLwm7V8AATCQAXQPAAPzaAmADwAD9610DwAD9nAFgA8AAbpsBMqwtYAPAAP3rXQPAAP2cAWADwABumwAEwABMZIDCrEuscQm72cAATCQAXQPAAP2cAWADvOUBHqxfwADBFwABYAO85QAABMAATGWAwqyKrKkJu1jAAEwkAF0DwAD9nAFgA8AAYmYBHqyawADBFwABYAPAAGJmAAAEwABMZoDCrTatWAm72sAATCQAXQPAAP2cAWADvQwBHq1MwADBFwABYAO9DAAABMAATGeAwq13rcAJu9vAAEwkAF0DwAD9nAFgA7zoAR6tq8AAwRcAAWADvOgAAATAAExogMKt263jCbHywABMJABgA4EUAATAAExpgMKuAK4TCa9UwABMJABgA7r1AATAAExqgMKuJ64xCbvcwABMJABgA8AAY3kABMAATGuAwq5KrlkJtATAAEwkAGADuEwABMAATGyAwq50roQJt/XAAEwkAGADwABqRQAEwABMbYDCrqCusgm3+8AATCQAYAPAAGp0AATAAExugMKu067qCbvdwABMJABgA8AAehgABMAATG+Awq8IrxwJt/zAAEwkAGADwACCDAAEwABMcIDCrz6vTQm73sAATCQAYAPAAIMJAATAAExxgMKvZq94CbvfwABMJABgA8AAbbsABMAATHKAwq+br7QJt/3AAEwkAGADwAB6kwAEwABMc4DCr9Ov6Am74MAATCQAYAPAAG+3AATAAEx0gMKwCbAgCbgcwABMJABgA8AAboEABMAATHWAwrBHsGMJu1nAAEwkAGADwABvegAEwABMdoDCsIOwmQm74cAATCQAYAPAAHE/AATAAEx3gMKwsLC9CbviwABMJABgA8AAcXYABMAATHiAwrDHsNYYu+PAAEwkAGADwAD6PwEqBMAATHmAwrDnsPgYu+TAAEwkAGADwABNbQErBMAATHqAwrEUsUIJu+XAAEwkAF0DwAD9nAFgA7zTAR6xL8AAwRcAAWADvNMAAATAAEx7gMKxYLGKCbtawABMJABdA8AA/ZwBYAPAAGDSAR6xdsAAwRcAAWADwABg0gAABMAATHyAwrGgsckJu+bAAEwkAF0DwAD9nAFgA70MAR6xvcAAwRcAAWADvQwAAATAAEx9gMKx4LILGLvnwABMJABdA8AA/ZwBYAO80wEesfjAAMEXAAFgA7zTAAAEwABMfoDCsk6yWQm3mcAATCQAYAPAAIO8AAEFwABMqYDCsl6yXrSHAAAAA7J4tIcAAAARERGyhQAABLHyYAOBFACymgAABLeZYAPAAIO8ALKyAAAEr1RgA7r1ALLSAAAEu9xgA8AAY3kAsukAAAS0BGADuEwAswUAAAS39WADwABqRQCzIgAABLf7YAPAAGp0ALNBAAAEu91gA8AAehgAs2UAAAS3/GADwACCDACzhgAABLveYAPAAIMJALOiAAAEu99gA8AA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ni4AwABvfT4CPRzAAEmFgcAASXvAI494IAIAAhbAAEmMFMAASYbAI5DxCACkJMAAbp4cwABJmobAAEmUwCOQfSABAAEUwABJm8AjkPEIAAAAAABKwABJrgEcwABJxIfAAEm1wCOQnSABAAEUwABJxcAjkPEIAAAAP0rAAEnfASoAwABMlkFHwABKAhbAAEoVgMAASgrAI49ogmfAAGeEAwHAAEo3asAASjdgA8AAZ2jAAPrpAD4DPRzAAEpHLrtwAgACFsAASnmAwABKbsAjj2ik8cAAZ3gWwABKjoDAAEqDwCOPaIUdwABnhQDAAG+yScAASqYcwABKqi67ccAATCQCAAKAwABKv8Ajj2gWwABKyy67UMAATCTAAExcAMAATJI+AT0cwABK74TAAErnwCOP/SADAAMWwABK/y67VcAATCTAAExhNMAASy4DwABLLsAAS4sAAAABAQHAAEsvAAAARWADwABumwAAXQPAAGgiAWADwABvAQFKwABLNQEcwABLN4XAAEs1wCOS07tyAgACasAAS1pdA8AAaCIBYAPAAG9OwAD6/RbAAEt9FsAAS3SAwABLacAjj2ik8cAAZ3i0rsAAS2kAwABuujTAAEy/A8AATL/AAEzgAAAAAQEBwABMwAAAALtzYAPAAG6bAABgA8AA+j8BSsAATMYBIRbAAEzJhcAATMfAI5NYu3TAAG6vAAA/QsAATPUAAcAATRZqwABNFmADwABnaMAA+xIAPgJJwABNIxzAAE0nLrtxwABMJAIAAoDAAE08wCOPaBbAAE1ILrtRwABMJMAATF0AwABMkj4BPRzAAE1uhMAATWbAI4/9IAMAAxbAAE1+LrtWwABMJMAATGI0wABNrAPAAE2swABN0QAAAAEBAcAATa0AAABFYAPAAG6bAABdA8AAaCIBYAPAAG8BAUrAAE2zARzAAE21hcAATbPAI5QWnnYBAAFqwABNw10DwABoIgFgA8AAb07AAPr9AMAAbrg0wABO2APAAE7YwABO9wAAAAEBAcAATtkAAAC7c2ADwABumwAAYAPAAPo/AUrAAE7fASEWwABO4oXAAE7gwCOUfLt2wABusAAAP0LAAE8MAAHAAE8tasAATy1gA8AAZ2jAAPspAD4CScAATzocwABPPi67ccAATCQCAAKAwABPU8Ajj2gWwABPXy67UsAATCTAAExe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u8vAAExLKcAA/P0+AUbAAJPqwACUD8AAk/gAAACVd2ADwABMPgCHwACUBMAjxgo+AT0cwACUL4TAAJQdwCPFUlYBAAEWwACUPBTAAJQzwCPGSggAgpDAAExAAMAA/ak/AMAA/PlOwACUe8AAlIcAAKTfYAPAAE1tAR/AAJSNwACHjhwAARbAAJSeLreZwABMJMAATH4behbAAJS8LrHywABMJMAATGik+CbAAJTiARbAAJTiLq9UwABMJMAATGlgA7sZt7wWwACVCi673MAATCTAAExqs0AmwACVLgEWwACVLi60BMAATCTAAExrYAO5MLe0HMAAlWYWwACVUy63+8AATCTAAExtgogAAAAAwABqere4HMAAlaAWwACViC673cAATCTAAExugogAAAAAwAB6HLOMgsAAlb/AI8MjtrwcwACV/RbAAJXnLrvgwABMJMAATHOCiAAAAADAAG+7uAoWwACWHi673sAATCTAAExwtDoWwACWRi6738AATCTAAExxvAwWwACWdi67T8AATCTAAExZt70WwACWwBbAAJamLrf9wABMJMAATHK3vcAAepu8DRbAAJbwLrvlwABMJMAATHq7/hzAAJcnLrv9AAAAAMAATKO3rYPAAJdiwCPDaLZBFsAAl50WwACXhi674cAATCTAAEx2tkHAAHFIu/mBwACXzsAjwu+raBzAAJgbFsAAmAQuu+HAAEwkwABMdoKIAAAAAMAAcUqlDRzAAJhVFsAAmD0uuBzAAEwkwABMdIKIAQABFsAAmFsusfLAAEwkwABMaADAAG6Gu5kWwACYeC67WMAATCTAAExlu54WwACYqy67nsAAb6q7nxbAAJj0LrufwABvq7uYFsAAmTcuu5jAAG+su6wWwACZcC675sAATCTAAEx8vA4WwACZxC6728AATCTAAExns1UWwACaBS672sAATCTAAExmucmEwACaMcAjxVJJwACaSRrAAJpNpDg+AT0XwACaay675MAATCSFwACaf8AjxprAAEx5P0rAAJqWAYXAAJqdwCPGmgAAI4EwACOBdQAjgboAI4H0ACOCowAjgwcAI4NkACODrQAjhCAAI4UHACOFugAjiVQAI4urACONCwAjjWAAI44AACOOmQAjjzIAI5XcACOYLQAjmKAAI5koACOkRAAjpKQAI6VZACOnFAAjqEAAI6omACOx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ZC4AwABPxAbAAE65gMbAAGuFwABrlsAAa+oAALxpwABNigFqwABrhmADwAD9UQIAAAEDwABrq8AAa+oAAAABAQHAAGu5AAAAg+RgA8AA/jUAAFwBPgE9HMAAa8aAwABrw8AkZKmCigEAASTAAGvlAye8sxbAAGvcLpYmwABOsyeDIQDAAP5JBsAATryAxsAAa+/AAGwJwABs7AAAnukBasAAa/BgA8AA/VECAAABA8AAbBHAAGzsAAAAAQEBwABsKAAAAICJYAPAAIivAABgA8AAYNIBPgFKwABsOwEcwABsToDAAGxCwCRlJby0AgACFsAAbFwulibAAE6zNMAAbGUDwABsZcAAbOcAAAAAAAAAYAPAAGDSAT4CTsAAbIPAAGyMAACGBWADwABNsgEcwABsmoDAAGyOwCRlJby1AQABFsAAbKsulibAAE6zAMAAiLlKwABsuwEcwABsy4HAAGzCwCRlg57pAQABgMAAbNTAJGUlAMAATb8AwACIwQbAAE66gMbAAGzxwABtAcAAbSwAAIZhwABNigFqwABs8mADwAD9UQIAAAEDwABtEcAAbSwAAAAAAAAAYAPAAPwFAUrAAG0XARzAAG0aNw2DiAEAARbAAG0kFsAAbRwulibAAE6zg8HAAP1kAMAA/SwGwABOu4DGwABtMcAAbULAAG2SAAC8asAATYoBasAAbTJgA8AA/VECAAABA8AAbUnAAG2SAAAAAQEBwABtYgAACIPWYAPAAE6xAABgA8AA+j8BPgFKwABtbwEcwABtfhbAAG12LpYmwABOs0gBAAEWwABth4DAAG2BwCRmkJYmwABOswDAAP1eAAAkY5IAJGPlACRkbwAkZO8AJGXmACRmVgAkZt4AAAAGAsAATr+AxsAAbcPAAG3JwABxCwO8tgAAAWABwABNsgAAAQTAAE7BgMbAAG4UwABuGwmWJgBgA70MAAEFwABOzIDGwABuIMAAbiDAAG5NAAAAA8AAbj/AAG5NAAAAAQEBwABuRQAABJYmYAO9DAAAYAPAAE6/AT8CCAHAAE7BgADAJGdfCQHAAG4gwABNygAAAAAGBsAATsOAxsAAblLAAG55wABupgEAgmcBasAAblNgA8AA/VECAAABA8AAbn7AAG6mAAAAAAAAAGADwABNiwFKwABugQFqwABumGADwABNi8AA/8kGwABOxYDG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XYW1wABO9QDAAE3HABzAAK2EFsAArX4uhbfAAE72SAEAARbAAK2NgMAArYfAJJVdhbfAAE72AMAATccGwABPA4DGwACtm8AArbXAAK4BAAC8aAFqwACtnGADwAD9UQIAAAEDwACtwcAArgEAAAABAQHAAK3RAAAAs0BgA7hMAABgA8AAYo0BSsAAreoBFsAArfmAwACt6sAklhGFpbhvBsAATvqAxsAArgbAAK4bwACuXQEAvG8BasAArgdgA8AA/VECAAABA8AArifAAK5dAAAAAAAAAGADwAD6PwE+AUrAAK4tASIWwACuORbAAK40LoW1wABO9bxvwABNuwEWwACuThbAAK5ILoW3wABO9rxvwABNuwAAJJB+ACSQ0QAkkVsAJJJQACSTiwAklDUAJJR7ACSVIwAkldsAJJY/ACSWtQAAAAoCwABPBoDGwACujcAArpPAALqBA7zmAAABYAHAAE2yAAADBMAATwiAxsAArt7AAK7mCYW2AGADwACG8QAEwABPCYDGwACvA8AArw0JgmsAYAPAAE2yAATAAE8KgMbAALn8wAC6fwa8vQBdA8AA/NoCYAPAAIbkYAPAAPwFAWrAALoNXQPAAPzaAmADwACG5GADwAD8BcABA80BBcAATxmAxsAArxLAAK8SwACvgQAAAAPAAK8pwACvgQAAAAICAsAAry8AAASFtmADwACG8QDAAK8+AAAEgmtgA8AATbIAAGADwABPBgE+AUAhHMAAr3UcwACvZWrAAK9XXQPAAPzaAmADwACG5GADwAD8BcABA81LAQABFsAAr28WwACvZi6FtsAATwiCZ8AAhvMAwAD87kgBAAErAMAA/SjAAK9XwACvfAADCAHAAE8IgADAJJelCAHAAE8JgQDAJJe1CQHAAK8SwABNygAAAAAKBsAATwyAxsAAr4bAAK+twACv0QEAgmcBasAAr4dgA8AA/VECAAABA8AAr7LAAK/RAAAAAAAAAGADwABNiwFKwACvtQFqwACvzGADwABNi8AA/68GwABPEIDGwACv1sAAr+LAALBJAACETQFqwACv12ADwAD9UQIAAAEDwACv6MAAsEkAAAACAQLAALADAAAAhzRdA8AAT7MCW1sAwACwDQAAAIJTWwFqAGADwAD9DnkAWwE+AUrAALAdARzAALAsgMAAsCTAJJjbvOgCAAIugcAA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UAAAYAPAAPo/AUrAANHoARzAANHtFsAA0egugL3AAE9SSAEAARbAANH2gMAA0fDAJLi6gL3AAE9SAMAA/foGwABPXYDGwADR/8AA0hnAANJsAACe6QFqwADSAGADwAD9UQIAAAEDwADSIcAA0mwAAAABAQHAANI4AAAAgIlgA8AAiK8AAGADwABg0gE+AUrAANJLAR/AANJWwABiYAAAAAAGwABPVYDGwADSccAA0obAANKZAQC8bwFqwADScmADwAD9UQIAAAEDwADSksAA0pkAAAAAAAAAYAPAAPo/AUrAANKVASkAACS2OAAkto0AJLcXACS3lwAkuBAAJLiAACS5BgAkuWkAJLmuAAAACALAAE9ggMbAANKewADSrcAA1sIHvQEAAAFgAcAATbIAAAIEwABPYoDGwADTB8AA0wsJgL0AYAPAAE2yAATAAE9jgMbAANMowADTNAmDJQBgA8AATbIAAQXAAE9tgMbAANM5wADTOcAA03gAAAADwADTWsAA03gAAAACAgLAANNgAAAEgL1gA8AATbIAwADTawAABIMlYAPAAE2yAABgA8AAT2ABPwMIAcAAT2KAAMAkulMIAcAAT2OBAMAkumMJAcAA0znAAE3KAAAAAAUGwABPZoDGwADTfcAA04LAANUIAAC9AsAATYoAAAABA8AA05vAANUIAAAAAwMDwADTsgAAAICJYAPAAIivAMAA09gAAACAvWADwABNsgDAANPsAAAAqkFgA8AAYNIAAGADwAD6PwE+AknAANP9IRbAANQMgsAA1ALAJLrytWDAAGDcPgI9HMAA1CqAwADUHsAkutKlUQMAA4HAANRBwCS64mrAANRTYAOk6sAAyEkywADUd1tbAieGBYHAANSNwCS64ieCkBzAANStgsAA1KPAJLryhp4BAAEWwADUwYDAANS1wCS60rNAwACIsQDAAGDvAMAAiL5KwADU4QEqP0rAANT5ASkGwABPZ4DGwADVDcAA1R3AANVwAACGYcAATYoBasAA1Q5gA8AA/VECAAABA8AA1S3AANVwAAAAAAAAAGADwAD8BQE+AUrAANU2ARzAANVQHMAA1UA3DYOIAQABFsAA1UcWwADVQi6AvcAAT2KDwcAATbkAwAD9LGQBAAEcwADVVTcRg4gBAAEWwADVZBbAANVXLoMlwABPY4PBwABNuQDAAP0sAMAA/SoGwABPaIDGwADVdcAA1YbAANYAAAC8asAATYoBasAA1XZgA8AA/VECAAABA8AA1Y3AANYAAAAAAQEBwADVsAAACIPWYAPAAE9gAABgA8AA+j8BPgFKwADVvQEiHMAA1ckWwADVxC6AvcAAT2JIAQABFsAA1dKAwADVzMAkvIuAvcAAT2IAwABNxwAcwADV5xbAANXaLoMlwABPY0gBAAEWwADV8IDAANXqwCS8i4MlwABPYwDAAE3HBsAAT2qAxsAA1gXAANYawADWOwEAvG4BasAA1gZgA8AA/VECAAABA8AA1iXAANY7AAAAAAAAAGADwAD6PwE+AUrAANYrASoGwABPa4DGwADWQMAA1lXAANbAAQC8bwFqwADWQWADwAD9UQIAAAEDwADWYcAA1sAAAAAAAAAAYAPAAPo/AT4BSsAA1mcBIhbAANZzFsAA1m4ugL3AAE9ivG/AAE27ASIhHMAA1pgWwADWiy6DJcAAT2NIAQABKwDAAE3HABbAANawFsAA1qMugyXAAE9jvG/AAE27AAAkuqQAJLupACS8UQAkvQkAJL1QACS95AAAAAUCwABPboDGwADW8sAA1vjAAODiA70DAAABYAHAAE9gAAAAAQXAAE95gMbAANdQwADXUMAA19gAAAADwADXdcAA19gAAAACAgLAANeQAAAAgL1gA8AATbIAwADXqQAAAIMlYAPAAE2yAABgA8AAT24BPwEJAMAA17/AAE9tAgACgMAA18XAJL5JgcAA18vAJL5ZAAYGwABPcIDGwADX3cAA2ATAANhGAQCCZwFqwADX3mADwAD9UQIAAAEDwADYCcAA2EYAAAAAAAAAYAPAAE2LAT4BSsAA2A8BasAA2C1gA8AATYvAAP28BsAAT3KAxsAA2EvAANhXwADYzAAAhE0BasAA2ExgA8AA/VECAAABA8AA2F3AANjMAAAAAgECwADYeAAAAIc0XQPAAE+zAltbAMAA2IIAAACCU1sBagBgA8AA/Q55AFsBPgFKwADYkgEcwADYoYDAANiZwCS/H70EAgACLoHAANjAwCS/MgDAAE/LBsAAT3SAxsAA2NHAANjiwADaCQAAvGnAAE2KAWrAANjSYAPAAP1RAgAAAQPAANj3wADaCQAAAAEBAcAA2QUAAACD5GADwAD+NQAAXAE+BT0cwADZEoDAANkPwCS/rYKKAQABJ70FAMAA/kk9HMAA2UAWwADZOy6AvcAAT2K8acAATYoBAAGAwADZVsAkv60AwABNxD0cwADZYoDAANlfwCS/rYKKAQABJ70GAMAA/klJwADZfyEcwADZkBbAANmDLoMlwABPY0gBAAErAMAATcc+AT0cwADZrhbAANmhLoMlwABPY7xpwABNigEAAYDAANnEwCS/rQDAAE3EPgE9HMAA2d+AwADZ3MAkv62CigEAASeEPADAAP5JPRzAANn7gMAA2fjAJL+tgooBAAEngyEAwAD+SQbAAE91gMbAANoOwADaKMAA35YAAJ7pAWrAANoPYAPAAP1RAgAAAQPAANowwADflgAAAAEBAcAA2kcAAACAiWADwACIrwAAYAPAAGDSAT4ITsAA2mjAANp6AAC9B2ADwABg0gEcwADagRbAANp8LoC9wABPYp7pAQABgMAA2orAJMDfAMAATb9OwADaqgAAAL0IYAPAAGDSAEnAANrEIRzAANrVFsAA2sgugyXAAE9jSAEAASsAwABNxz4BPYrAANrmwCTBMhzAANsKFsAA2v0ugyXAAE9jnukBAAGAwADbE8AkwN8AwABNvz4BPYrAANs0wCTBMh7AANtLwABpDQEAASoAScAA23giIRbAANuPgcAA233AJMD6uNvAAGDUASEWwADbs4LAANuewCTBMrjbwABg1D4BSsAA28cBH8AA29LAAGJgAAAAAD9OwADb9cAA2/0AALjuYAPAAPo/ARzAANwHLr0CwABNigMAA4DAANwhwCTA3xbAANwuLoC9wABPYoHAANw0wCTA+gDAAE9mScAA3EwhHMAA3F0WwADcUC6DJcAAT2NIAQABKwDAAE3HPgFJwADcbiIhFsAA3IiCwADcc8AkwTK6SsAAYNYAIRbAANyogsAA3JPAJMEyrW/AAGDVPgI9HMAA3MaAwADcusAkwN+lUQMAAxbAANzSLoMlwABPY2rAANz4YAOk6sAAxukywADdKltbAieGBRbAAN1CLoMlwABPYyeCkBzAAN13gsAA3WLAJMEyhp4BAAEWwADdi4DAAN1/wCTA37NAwACIsQDAAGDvAMAAiL49i8AA3a/AJMH1Kj8/ScAA3dKDwADd1sAkwfU+A07AAN37wADeEwAAvQlgA8AAYYgBJsAA3fsBgcAA3hXAJMD6YAPAAGGITsAA3jXA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T9g9HMABIJsWwAEgmC6D5MAAT9aCigEAASe9IwDAAP5JPRzAASCtLoKKAgACgMABILPAJQXIFsABILyAwAEguMAlBci878AATy8AwABP2D0cwAEgzRbAASDKLoPkwABP1oKKAQABJ70kAMAA/kk9HMABIN8ugooCAAKAwAEg5cAlBcgWwAEg7oDAASDqwCUFyLzwwABPMADAAE/YBsAAT/CAxsABIQDAASERwAEhpAAAvPoBasABIQFgA8AA/VECAAABA8ABISDAASGkAAAAAgECwAEhPQAAAL0aYAPAAE9AAMABIUMAACCAtVsBagBgA8AA/Q55AFwBPgE9HMABIYUWwAEhgi6D5MAAT9aCigEAASTAASGfAye9JRbAASGXgMABIZPAJQbyJ8AAT0InmZcAwAD+SQbAAE/xgMbAASGpwAEhusABIkIAALz+AWrAASGqYAPAAP1RAgAAAQPAASHEwAEiQgAAAAIBAsABIdwAAAC9GmADwABPUADAASHiAAAggLVbAWoAYAPAAP0OeQBcAT4BPRzAASIkFsABIiEug+TAAE/WgooBAAEkwAEiPQMnvSUWwAEiNoDAASIywCUHjIC9wABPUieZlwDAAP5JBsAAT/KAxsABIkfAASJYwAEjbQAAvQQBasABIkhgA8AA/VECAAABA8ABInDAASNtAAAAAgECwAEilwAAAL0aYAPAAE9uAMABIqMAACCAtVsBagBgA8AA/Q55AFwBPgQ9HMABIrAWwAEirS6D5MAAT9aCigEAASe9JgDAAP5JPRzAASLaLpqPAQABFsABIuSAwAEi4MAlCCeAvcAAT2IAwABP2knAASLvIRzAASMEFsABIveAwAEi88AlCCeDJcAAT2NIAQABKwDAAE3HPgI9HMABIxgWwAEjFS6D5MAAT9aCigEAASe9JwDAAP5JPRzAASM5LpqPAQABFsABI0OAwAEjP8AlCCeDJcAAT2MAwABP2j89HMABI18WwAEjXC6D5MAAT9aCigEAASeDIQDAAP5JBsAAT/OAxsABI3LAASODwAEkjwAAvQwBasABI3NgA8AA/VECAAABA8ABI5rAASSPAAAAAgECwAEjwAAAAL0aYAPAAE96AMABI8YAACCAtVsBagBgA8AA/Q55AFwBPgQ9HMABI9MWwAEj0C6D5MAAT9aCigEAASe9KADAAP5JPRzAASP8LpqPAQABFsABJAaAwAEkAsAlCVmAvcAAT2IAwABP2knAASQRIRzAASQmFsABJBmAwAEkFcAlCVmDJcAAT2NIAQABKwDAAE3HPgI9HMABJDoWwAEkNy6D5MAAT9aCigEAASe9JwDAAP5JPRzAASRbLpqPAQABFsABJGWAwAEkYcAlCVmDJcAAT2MAwABP2j89HMABJIEWwAEkfi6D5MAAT9aCigEAASeDIQDAAP5JBsAAT/SAxsABJJTAASSlwAElwAAAvQ8BasABJJVgA8AA/VECAAABA8ABJL/AASXAAAAAAgECwAEk6AAAAL0aYAPAAE+GAMABJPQAACCAtVsBagBgA8AA/Q55AFwBPgQ9HMABJQEWwAEk/i6D5MAAT9aCigEAASe9KQDAAP5JPRzAASUtLpqPAQABFsABJTeAwAElM8AlCouAvcAAT2IAwABP2knAASVCIRzAASVXFsABJUqAwAElRsAlCouDJcAAT2NIAQABKwDAAE3HPgI9HMABJWsWwAElaC6D5MAAT9aCigEAASe9JwDAAP5JPRzAASWMLpqPAQABFsABJZaAwAElksAlCouDJcAAT2MAwABP2j89HMABJbIWwAElry6D5MAAT9aCigEAASeDIQDAAP5JBsAAT/WAxsABJcXAASXWwAEmpAAAvRUBasABJcZgA8AA/VECAAABA8ABJeHAASakAAAAAgECwAEl+wAAAL0aYAPAAE+SAMABJgEAACCAtVsBagBgA8AA/Q55AFwBPgQ9HMABJg4WwAEmCy6D5MAAT9aCigEAASeZ9QDAAP5JPRzAASYkLpqPAQABFsABJi6AwAEmKsAlC72FusAAT5QAwABP2knAASY+IRzAASZOFsABJkaAwAEmQsAlC70iwABPlUgBAAErAMAATcc+Aj0cwAEmYhbAASZfLoPkwABP1oKKAQABJ4GLAMAA/kk9HMABJnUumo8BAAEWwAEmf4DAASZ7wCULvSLAAE+VAMAAT9o/PRzAASaWFsABJpMug+TAAE/WgooBAAEngyEAwAD+SQbAAE/2gMbAASapwAEmusABJ3wAAIWwAWrAASaqYAPAAP1RAgAAAQPAASbMwAEnfAAAAAIBAsABJu0AAAC9GmADwABPogDAASbzAAAggLVbAWoAYAPAAP0OeQBcAT4FPRzAAScAFsABJv0ug+TAAE/W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AJ8awCWZIRzAAJ8pLr3LAgACgsAAnzjAJZh8g8AAn0bAJZkhAMAAULxOwACgAAAAAL3MXQPAAPypAWADwABU5QBOwACgpQAAAL3NXQPAAPypAWADwABU5QBOwAChhgAAAL3OXQPAAPypAWADwABU5QBOwACiVwAAAJuKXQPAAPypAWADwABU5QBOwACigAAAAL1aXQPAAPypAWADwABWwABOwACipQAAAJ59XQPAAPypAWADwABWwABOwACiugAAAL1lYAPAAPwFAEnAAKLTHMAAouGAwACi18AlljZIAQABKwDAAP1ePgU9jMAAoxLAJZnygsAAoyHAJZh8PY3AAKM1wCWaCoPAAKNEwCWZIT0VwACjWMAlmlIIHsAAo2vAAPYAAQFgA8AAVsABkwA9FcAAo4fAJZpqCR7AAKOYwAD2AAEBYAPAAFbAAZMAPRXAAKO0wCWaggqTPhA9FcAAo9/AJZqCChzAAKQRFsAAo/6AwACj9MAllja9ZcAAUM1kAQABlADAAP0qPRXAAKQcwCWaUggewACkL8AA9gABAWADwABWwAEcwACkXxbAAKRYFsAApEuAwACkQcAllja9WsAAUMthwAD82GQBAAGUAMAA/SoAPRzAAKR4FMAApGvAJZpSCACDXgMAA5McwACkmBbAAKSRFMAApITAJZpSCABhwAD82IGNAQABlADAAP0rHMAApKcuvc8CAAImwACkuwEWwACkuxbAAKS3LpnKwABQnoTawABUhWADwABWgBbAAKTQgMAApMbAJZY2vVrAAFDLAMAAULcAwAD8zj0cwACk8hTAAKTmwCWaUggAgL8CAAIcwAClBxbAAKUAFMAApPPAJZpSCABhwAD82IGNAQABlADAAP0rHMAApQ4uvdABAAEWwAClIhbAAKUeLpnKwABQnoTawABUhQDAAFC2AMAA/LlOwAClR8AApVgAAL3RXQPAAPypAWADwABWwAEcwAClWi690gEAARbAAKVtFsAApWkumcrAAFCenn3AAFSGAMAAUMFJwAClgBbAAKWIFsAApYQumcrAAFCehO/AAFSQPgFJwAClphzAAKW7FMAAparAJZyMCwBIAQABKwDAAP1ePgE9FcAApdDAJZyMCzHAAKXwYAPAAFbAARbAAKX1FsAApfEumcrAAFCehNvAAFSSPgE9FcAAph7AJZyMCzXAAKY+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ycABHErAARxhwAEcmgEAoWUBasABHEtgA8AA/VECAAABA8ABHHPAARyaAAAAAAAAAGADwAD96wFKwAEcdgEcwAEckRzAARyDFsABHHYurm/AAFEugKsBAWADwAD96wFqwAEch2EDAWADwABU5WADwAD968ABBNsAwAD8clgBAAEnlbQAwAD8ewbAAFE5gMnAARyfwAEcqMABHMUBAL11AAAAAQPAARy+wAEcxQAAAAAAAABgA8AA+j8BSsABHMEBKQbAAFE6gMnAARzKwAEc4cABHQQBAIJFAWrAARzLYAPAAP1RAgAAAQPAARzowAEdBAAAAAAAAABgA4NeAUrAARzrASbAARzrARbAARz+FsABHPgWwAEc6y6ub8AAUS6DGcAA/I2CRcAAVOxgA4NeAAAmI/IAJiUqACYlagAmJawAJiYHACYmYgAmJvAAJicpACYnlwAAAAgCwABRPYDJwAEd3MABHeLAASbhA74mAAABYAHAAFErAAACBMAAUT+AycABHizAAR5JGL4nAGADg14BKwTAAFFAgMnAAR5lwAEeegm9dQFqwAEeT2ADwAD9UQJgA8AA+j8AAQXAAFFHgMnAAR5/wAEef8ABH2sAAAADwAEep8ABH2sAAAAFBATAAR61AAAAhFJgA8AAVIIAwAEe1QAAAK5vXQPAAPypAWADwABU5QDAAR7oAAAAhTVgA8AA+j8AwAEe9wAAAL4lYAPAAPo/AAHAAR8RAAAEvXVgA8AA+j8BasABHylgA8AA+j93YAPAAFE9AT8CCAHAAFFAhADAJiiPCQDAAR84wABRPAQABIDAAR8+wCYoR4HAAR9GwCYoV4LAAR9UwCYoboPAAR9ewCYofgAEBsAAUUKAycABH3DAAR+DwAEgKAAAIwFqwAEfcWADwAD9UQIAAAEDwAEfi8ABICgAAAAAAAAAYAPAAP3rAT4BSsABH5QBJAAGJ74oFsABH9kWwAEf0i6EUsAAUS2hZcAAVJongYsnmZYcwAEgFhzAASAIFsABH/surm/AAFEugKsBAWADwAD96wFqwAEgDGEDAWADwABU5WADwAD968ABBNsAwAD8clgBAAEngYsAwAD8eye8hQbAAFFDgMnAASAtwAEgQMABIocAAKOuAWrAASAuYAPAAP1RAgAAAQPAASBFwAEihwAAAAEBAcABIFwAAACHa2ADwABQ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AVxBRcABMTgBwAExQcABMUMAAGJgA8AA/AUBkwEcwAExSoTAATFIwCY4BWMBAAEWwAExWRbAATFMLq5vwABRLmHAAPzYAMAA/TIBjMABMWHAJjgFHMABMWKEwAExYcAmOAVkAQABlADAAP0qPgROwAExfMABMYYAAIg9YAPAAFTlARzAATGUFsABMYgurm/AAFEuSwEAAYTAATGVwCY4BQDAAPy4TsABMajAATGvAACCRWADg14BJsABMagBFsABMbuFwAExscAmOGuCRcAAVOxgA4NeTsABMdTAATHiAAC+MWADiLgBHMABMeQuvi0DAAOAwAEx9sAmM42BwAEyAcAmNE2GwAEyC8AmOKIAwABRTUnAATIcIRzAATIhLr4uAwADgMABMjDAJjONg8ABMjvAJjSQh8ABMkrAJjjSAMAAUU4+BD01AAAAAQBgA8AAUHsBasABMmZgA8AAUHt5IxzAATJtFADAJjlDCABIAQABKwAAKxzAATJtFADAJjlDCACWeAEAASTAATLOBCe+Mh7AATKewABQcAEAAYLAATKnwCY0fwAnvjQewAEyucAAUHABAAGFwAEywsAmOGsAAMAAUH0BXE7AATLjwAEy5wAAgKxgA8AA/esBJMABMwABFsABMvsWwAEy8xbAATLsLoRSwABRLYRDwABUlICswABV+0nAATMMIiIcwAEzFBTAATMQwCY5wwgASAEAASe+NgDAAP36ABzAATNXFsABM1IWwAEzRRbAATM9FsABMzYuhFLAAFEthGHAAFZhgxjAAP56gejAAPyOSAEAASe+NwDAAP36ASIcwAEzgRTAATN9wCY5wwgASAEAASee0wDAAP36ABzAATPPFsABM8oWwAEzvRbAATO1FsABM64uhFLAAFEthGHAAFZhgxjAAP56gejAAPyOSAEAASe+OADAAP36PgA+Aj2KwAE0bcAmNH8rPYvAATSLwCY0kCtCwAE0twA/P0nAATTaHMABNOiCwAE03sAmNH9IAQABKwDAAP1ePgVOwAE1AMABNQUAAIC9YAPAAP3rARbAATUOFsABNQcuhFLAAFEtoWXAAFSaTsABNSvAATUyAABhYAPAAPwFASMWwAE1OxbAATU0LoRSwABRLb45wABVApQWwAE1YoTAATVdwCY6/2HAAP3vAWADwAD8BU7AATWFwAE1jQAAglNdA8AA/KkBYAORbAEcwAE2URzAATWcFsABNY8urm/AAFEugKsBAWADkWwBNMABNaADwAE1oMABNk8AAAABAQHAATWtAAAAlpxgA8AAVOUAAGADkWwBPgFKwAE1ugEcwAE2BWrAATXBYAORWaV5glsDAAMWwAE2FIbAATYSwCY7u4RhwABU6hbAATYfhsABNh3AJju7h1TAAFTrFsABNj8WwAE2LYbAATYrwCY7u6FlwABU7mHAAP3vAJFhAMAA/HKArQAAAADAAPx9PRzAATZpFsABNmIuhFLAAFEtnnUEAAMcwAE2pWrAATZ/XQORZQFhAwJgA8AA/etgA8AA/etgA5FOk36ICwIAAhbAATbJFsABNsIuhFLAAFEtoWXAAFSaFsABNu8WwAE26RbAATbcLq5vwABRLoMZwAD8jaFlwABU7gCRaRbAATcUFsABNw0uhFLAAFEth1TAAFZghcABNyrAJjsqAYJThsABN0XAJjtwwABUpUrAATdVASs/PTUAAAABAGADwABQewFqwAE3bGADwABQe3kjHMABN3OEAMAmPPxIAQABKwAAKxzAATdzhADAJjz8lngBAAEkwAE3ywQnvjoWwAE3oC6hZcAAUTgng1UewAE3tsAAUHABAAGCwAE3v8AmNH8AAMAAUH0BXE7AATfhwAE35gAAgmdgA4QnAWrAATf2YAOEJ4TFScABOAIiIhbAATgQgsABOAbAJjR/h33AAFTzARbAATglgsABOBvAJjR/hTXAAFT6ARbAATg7gsABODHAJjR/hTPAAFT1PgE9jMABOE3AJj1uIxbAAThULoU1wABRL2rAAThtYAOEJ4S2asABOIRgA4QnhKcBYAOEJ0nAATiXIiXAATisFsABOKWCwAE4m8AmNH+CRcAAVOxgA4PqABzAATjaFsABONUWwAE4zoLAATjEwCY0f4JFwABU7IJnAEgBAAFqwAE462ADhCeE1ADAAP1ePgE9jMABOP3AJj1uasABORJgA4QnhNQ/ScABOScWwAE5Ky6+JcAAUTA+Az01AAAAAQBgA8AAUHsBasABOUFgA8AAUHt5IxzAATlIhQDAJj6JSAEAASsAACscwAE5SIUAwCY+iZZ4AQABJMABOckLJ746FsABOXcuoWXAAFE4J747FsABOZ8uhFLAAFEtJ4GLgsABOajAJjR/J4GLFsABObQurm/AAFEu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ScAAQ0IcwABDURbAAENGLp59wABUhkgBAAErAMAA/V5KwABDWgA/TsAAQ58AAAC/6WADwABUggBOwABDu8AAQ8oAAL/qYAPAAFbAARbAAEPMLoTawABUhUnAAEPbJcAAQ+6CwABD38AorYFgA8AAVoA+Ak7AAEQXwABEHAAAv+tgA8AAVOUBFsAARC0UwABEHsAorYECAWADwABWgJ6lwABWhEnAAERAJcAAREmDwABERMAorbxgA8AAVII+AT2JwABEZMAorXAUwABEccAorbwDAWADwABUgj8/TsAARL0AAAC/7F0DwAD82gJgA8AAVIJgA8AA/AUATsAAROIAAAC/7V0DwAD82gJgA8AAVIJgA8AA/AUATsAARQnAAEUVAAC/7l0DwAD9nAFgA8AAVIIBHsAARRvAAMEXAAFgA8AAVIIAAEbAAEU0wABFWcAARUUAAACCkGADwABWwAAWwABFTS6efcAAVIY+AUnAAEVhJcAARWqGwABFZcAorpZgA8AAVoA+A07AAEWNwABFmAAAh1RgA8AA/AUBHMAARZqUgcQAAAAAwAD8KE7AAEXWwABF2wAAv+tgA8AAVOUBFsAAReIUwABF3cAorpYGAWADwABWgJ6lwABWhEnAAEX3JcAARgAUwABF+8AorvQIAGADwABUgj4CTsAARirAAEY0AACdP2ADwABUggEUwABGNsAorvQIAWADwABUgknAAEZGHMAARlWBwABGSsAorXBIAQABFMAARljAKK9BCQAAwAD9Xj4BPRzAAEZxLp51AwADHMAARqpqwABGjV0DkWUBYQMBYAPAAP3rYAORTsAAR2OICwEAARbAAEbCFMAARrjAKK9BCQCAvcAAVtoAkWmHwABG2cAortBqwABG9WADwAD8BRUAwABUpUnAAEcRHMAARyGFwABHFcAormCDFwEAARTAAEcqwCivQQkAAMAA/ag+BT0jHMAAR3ODwABHasAoriRIAQABKwDAAP1ei8AAR2rAKK4kHsAAR3vAAPzhAAJgA8AAVIJgA8AA/AUAACsBXQPAAPzaAmADwABUgmADwAD8BT01AAAAAQBdA8AA/NoCYAPAAFSCYAPAAPwFAYPAAEehwCiuJDUAAAABAGADwABUggEUwABHqsAor0EJACMcwABHtRzAAEepFMAAR6nAKLBvCgBLAQABFMAAR6nAKLCS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AL/1AAAAAQPAAK/OwADJvAAAAAQEBMAAr9UAAACFbWADwACJEgDAAK/mAAAAm6RgA4PqAMAAsAYAAACshWADg+oAwACwHAAAAL4gYAPAAPo/AABgA8AA+j8BPhRAHMAAsE8WwACwSoHAALA7wCjzvoJng+1IAQABasAAsGBgA4QnhMUAwAD9XsAAsDvAALBmAEAcwACwiRbAALCEgsAAsHTAKPPMgmeD7UgBAAFqwACwmmADhCeExQDAAP1ewACwdMAAsKAATsAAsKzAALC6AAC/9GADwAD6PwEqTsAAsNTAALDlAADAAEALYAOEgwEWwACw9oHAALDnwCjzvoJqg+9OwACxEcAAsSMAAMAAQAxgA4SDARbAALE1gsAAsSXAKPPMgmqD707AALFRwACxZwAAwABADWADmr8BHMAAsWkuwABACsAAVIEGAAaAwACxkMAo866BwACxn8Ao876CwACxt8Ao88yFwACx0MAo9HSGwACx6sAo9JqDwACyBcAo89oAwABUvE7AALIqwACyPwAAwABAFGADmr8BHMAAskkuwABAE8AAVIECAAKAwACyZsAo866BwACybcAo874AwABUvT0cwACygy7AAEAVwABUgQoACoDAALKYwCjzrofAALKnwCj0wBTAALLGwCj1IAgAgcAAsuTAKPO+gsAAsvzAKPPMFsAAsyaFwACzFcAo9HSFOoSMFsAAs0yGwACzOsAo9JqFOoSMKiuDwACzfcAo89oAwABUvknAALOUHMAAs8UWwACzvhbAALOphcAAs5jAKPR0hMCEimHAAPzYYwEAARbAALP2FsAAs+GGwACzz8Ao9JqEwISKYcAA/NgAwAD9Mj4BPRzAALQOFsAAtAYuhEPAAFSUnnUFAAQcwAC0TWrAALQkXQORZQFhAwJgA8AA/etgA8AA/etgA5FOwABzMogLAgACJAADFsAAtIsWwAC0fIHAALRtwCjzvoT/g2aAvYMfJ4FqFsAAtLwWwAC0t4HAALSowCjzvoC9g2KAvYiGJAADFsAAtPQWwAC05YLAALTVwCjzzIT/g2aAvYMfJ4FqFsAAtSYWwAC1IYLAALURwCjzzIC9g2KAvYiGAJFpFsAAtUiBwAC1OcAo876EU4JZasAAtV5gA8AA/AUVFsAAtYGBwAC1csAo876EYYNjAYJTHMAAtpQxwAC1nWADkWwB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BsAAVJqA5sAA1lvAANZmwADXFwEAoWUAAAABA8AA1njAANcXAAAAAAAAAGADwAD96wE+AUrAANZ+ASMiFsAA1oUuhO/AAFSQACEWwADWnC6o7sAAVJEkwADXDQMWwADWyxbAANbBLoTawABUhaFlwABWxSeHTBbAANbxFsAA1uUuhNvAAFSSoWXAAFbFFsAA1w8ugL3AAFbaAWADwAD96wbAAFTDgObAANccwADXIcAA2ccAAKnaAAAAAQPAANc2wADZxwAAAAAAAABcAT4CQBbAANdKFsAA10YumcrAAFSVhOWDOcAA10bAANdcAEbAANdjwADXn8AA13QAAACpvGADwABU5QAWwADXlxbAANeRFsAA14QuhN3AAFSJns6oYinAAPz9PgFJwADXpyIhFsAA17mAwADXrMApDSuEjcAAVPwAIhbAANfggMAA19PAKQ0rhB7AAFTyARbAANf6gMAA1+3AKQ0rh4DAAFTxPgE9HMAA2BQunnUEAAMcwADYY2rAANgsXQORZQFhAwFgA8AA/etgA5FOwABEv4gLAQABFsAA2HEuoWXAAFSaAJFpFsAA2JEuh1TAAFZgasAA2KlgA8AA/AUVAYJTMcAA2MhgA5FsARzAANlKHMAA2RZqwADY2F0DkWUBYQMBYAPAAP3rYAORTsAARSSICwEAARbAANkkLqFlwABUmgCRaYJbAwADFsAA2XuAwADZbsApDSuEYcAAVOoWwADZkYDAANmEwCkNK4dUwABU62rAANmdYAPAAPwFFQCRVcAAVKU/BsAAVMSA5sAA2czAANnRwADdLAAAqdsAAAABA8AA2ebAAN0sAAAAAQEBwADZ9gAAAIdrYAObowAAXAE+A07AANqUwADangAAhNpgA4jzARbAANquFsAA2qQWwADaoC6ZysAAVJWE2oMphpyJak7AANrQwADa3QAAhOpgA5q/AR7AANrsmsYBAAEWwADa/hbAANr6LpnKwABUlYTbgyoARsAA2xDAANtXwADbHwAAAK2sYAOJZAAcwADbPhbAANsxFsAA2y0umcrAAFSVhO2DO4TmAAAAAINRPgJOwADbbcAA23cAAJ0/YAOI8wEWwADbsBzAANuQgsAA24PAKQ7xhOsBAAGDwADbpMApDysAms+GnIlqScAA28chHMAA3AkcwADb1YDAANvLwCkOrYVyAgACgcAA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Lp5XwABVj4SWwABViYQaFsAAQ5IWwABDiC6ElsAAVYmEGoP9hBM9F8AAQ7MWwABDqRbAAEOiLp5XwABVj4SWwABViYQfFsAAQ8oWwABDwC6ElsAAVYmEH4P+hBQ9F8AAQ+sWwABD4RbAAEPaLp5XwABVj4SWwABViYJqFsAARAAWwABD9i6ElsAAVYmCaoPvg+89F8AARCgWwABEHxbAAEQVFsAARA4unlfAAFWPhJbAAFWJgmqD74RSFsAARDgWwABEMS6eV8AAVY+ElsAAVYmCWErAAERHAZQGwABVmoDtwABEWMAARGnAAETKAACpLQFqwABEWWADwAD9UQIAAAEDwABEdcAARMoAAAABAQHAAER9AAAAlRtgA6AsAABcAT4CPRfAAESVFsAARIsuhJbAAFWJhB8phBQ9HcAARLKpLQEAAYDAAES/wCmZ5ADAAFWABsAAVZuA7cAARM/AAETgwABFpgAAqTgBasAARNBgA8AA/VECAAABA8AAROrAAEWmAAAAAQEBwABE9wAAAJ1OYAPAAFTlAABcAT4BScAARQQlwABFDoDAAEUIwCmaXWADwABVhz4BScAARSscwABFLy7AAEBbAQABFMAARTrAKZpdAAFgA8AAVYcAwABVgT4BPRfAAEVSFMAARUzAKZpdAAFgA8AAVYeoiy7AAFWMPz4BPRzAAEWCLsAAQFwBAAGAwABFlsApml0AwABVggAAKZIPACmSewApkrYAKZLsACmTcwAplBQAKZT0ACmWyAAplxUAKZmuACmaJwApmvQAAAALAsAAVZ6A7cAARdDAAEXWwABmVQOocAAAAWABwABVXgAABwTAAFWggO3AAEYXwABGIgmY2wBgA4OpAATAAFWhgO3AAEYxwABGRAmpBABgA8AA/AUABMAAVaKA7cAARk7AAEZuGMAAQGAAYAPAAPo/ASoEwABVo4DtwABGhMAARpQYwABAYQBgA4RTASsEwABVpIDtwABGsMAARsYYwABAYgBgA4RiASsEwABVpYDtwABG0cAARuIYoScAYAOesQErBMAAVaaA7cAARwbAAEcSGKiLAWrAAEboYAPAAP1RAmADwABVngErAQXAAFW7gO3AAEcXwABHF8AASfwAAAADwABHKcAASfwAAAAMCwzAAEdHAAAAhttdA8AA/KkBYAPAAFZAAMAAR1sAAACiAmADwAD8BQDAAEd4AAAAhTpgA8AAVsAAwABHkQAAAIC9YAPAAP3rAMAAR7cAAACib10DwAD8qQFgA8AAVuYAwABH6QAAAKEeXQPAAPypAWADwABVQwDAAEgNAAAAv9tgA6jrAMAASCgAAACoVGADwAD8BQDAAEhDAAAAh1RgA8AA/AUAwABIWgAABKkEYAPAAPwFAMAASHkAAACoVWADwAD8BQDAAEiWAAAAqQVgA8AA/esBagBgA8AA/Q55AGADwABVngE/AwgBwABVoRQAwCmc2QkACADAAFWgNcAASMMAAAEAYAODqQEfwABIw4PHAgABKwGEYTUAAAABAGADqOsBhsAASN7AKZyrIxzAAEjvFADAKZ1NDABIAQABKwAAKxbAAEjvFADAKZ1NDACEYaj2AWADwAD+bDUAAAABAFsBF8AASQQUwABJAsApnTEMAITRh8AASRbAKZy5g6s1AAAAAQBbARfAAEkyFMAASTDAKZ0xDACEUxTAAEk/wCmcyQgAglk1AAAAAQBbARfAAElWFMAASVTAKZ0xDACE0hTAAElmwCmc6QoAg2AUAMApnTEMAAkAwABJfcAAVYYJAAmAwABJg8ApnDaBwABJjcApnE2CwABJmMApnF2DwABJpMApnG2EwABJqsApnH2FwABJucApnJSGwABJzsApnKsUwABJ38ApnMkIABTAAEnrwCmc+QsAABEGwABVqIDtwABKAcAASiTAAEpCAQCeVwFqwABKAmADwAD9UQIAAAEDwABKK8AASkIAAAAAAAAAYAPAAFWeAUrAAEouATUAAAABAGADwABVngEWwABKLi6oi8AAVaYjHMAASjuAAMApnrJIAQABKwAALoAAwCmesgFgA8AAVZ4GwABVqYDtwABKR8AASlDAAEppAQCFAgAAAAEDwABKYcAASmkAAAAAAAAAYAPAAPo/AUrAAEpkASoGwABVqoDtwABKbsAASnfAAEqMAQCHgAAAAAEDwABKhcAASowAAAAAAAAAYAPAAPo/AUrAAEqIASkGwABVq4DtwABKkcAASqHAAErCAQChMQAAAAEDwABKr8AASsIAAAAAAAAAYAOEnwFKwABKsgFqwABKvmADhJ+E9gbAAFWsgO3AAErHwABK2cAASuUBAIJnAAAAAQPAAErewABK5QAAAAAAAABgA4QnAUrAAErhASsGwABVrYDtwABK6sAASvPAAEtkAQCoJgAAAAEDwABLFsAAS2QAAAAAAAAAYAPAAPo/AT4BSsAASxwBHsAASyOncAEAARbAAEtULpjbwABVoAAGwABVroDtwABLacAAS3LAAExrAQDAAEBfAAAAAQPAAEuRwABMawAAAAAAAABgA8AA+j8BPgNJwABLlxbAAEujFsAAS5suhEPAAFY3gkzAAFXzSsAAS68BKj9JwABLwSEcwABLzRbAAEvFLqEewABVZUgBAAErAMAA/V4+AUbAAEvewABL+sAAS+cAAACZvmADwABVQwAWwABL8S6hHsAAVWU+AUnAAEwEIhzAAEwUFsAATA+AwABMCMApoKyCkMAAVUdIAQABKwDAAP1eABbAAEwmgMAATB/AKaCsoR/AAFZsSsAATDwBKT8/SsAATFsBKgbAAFWxgO3AAExwwABMfMAAT9AAAKKbAAAAAQPAAEyBwABP0AAAAAEBAcAATJcAAACEQ2ADqOsAAGADg6kBPgNJwABMphzAAEy7FsAATLYWwABMqi6Y28AAVaCAvYNiSAEAASsAiI8+CD0XwABM2BbAAEzMLpjbwABVoIJqHMAATOMuwABAWAEAAYDAAEzxwCmhQgDAAFWzg609F8AATRYWwABNDRbAAE0BLpjbwABVoIJqg62EUhbAAE0fLpjbwABVoIJYPRfAAE1HFsAATT4WwABNMi6Y28AAVaCCaoOthFMWwABNVC6pBMAAVaGCWT0XwABNhBbAAE17FsAATW8umNvAAFWggmqDrYTSFsAATaAWwABNlC6Y28AAVaCE0oNghIU9F8AATcoWwABNwRbAAE21LpjbwABVoIJqg62EvmrAAE3bXQPAAPypAWADiU+Fq4SIPRfAAE4GFsAATfoumNvAAFWghB0WwABOEC6EHcAAVmWDvD0XwABOKxbAAE4fLpjbwABVoIQfFsAATjguhB/AAFZng709F8AATlYWwABOSi6Y28AAVaCAvR7AAE5hiIwCAAIWwABOZi6AvcAAVWMWwABOdIDAAE5swCmhQoJFqRUAg2I/ScAATocWwABOiy7AAEBfwABVrj4CRsAATrPAAE7iwABOzwAAAJm+YAPAAFVDABbAAE7ZLqEewABVZT4BScAATuwiHMAATvwWwABO94HAAE7wwCmjD4KQwABVR0gBAAErAMAA/V4AFsAATw6BwABP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wABELS7AAECOAQABJ78LAMAAVxkGwABXdoD+wABEUMAARFXAAERxAADAAECvAAAAAQPAAERiwABEcQAAAAEBAcAARGkAAACSVGADnrEAAFwBPgAGwABXd4D+wABEdsAARHvAAESwAAC+3gAAAAEDwABEhsAARLAAAAABAQHAAESLAAAAgO5gA8AA/AUAAFwBPgE9HMAARJguwABAjgEAASe+3wDAAFcZBsAAV3iA/sAARLXAAES6wABE2QAAwABAsAAAAAEDwABEysAARNkAAAABAQHAAETRAAAAklRgA56xAABcAT4ABsAAV3mA/sAARN7AAETjwABFMwAAoekAAAABA8AARPHAAEUzAAAAAgICwABE+AAAAKHqYAOesQDAAEUHAAAAoetgA56xAABcAT4BPRzAAEUYLsAAQI4BAAEnhjwAwABXGQbAAFd6gP7AAEU4wABFPcAARV4AAKHlAAAAAQPAAEVPwABFXgAAAAEBAcAARVYAAACSVGADnrEAAFwBPgAGwABXe4D+wABFY8AARWjAAEWpAACh5wAAAAEDwABFeMAARakAAAABAQHAAEV/AAAAklRgA56xAABcAT4BPRzAAEWMLsAAQI4BAAEnwABAsQDAAFcZBsAAV3yA/sAARa7AAEWzwABF1AAArSQAAAABA8AARcXAAEXUAAAAAQEBwABFzAAAAJJUYAOesQAAXAE+AAbAAFd9gP7AAEXZwABF3sAARh8AAK0lAAAAAQPAAEXuwABGHwAAAAEBAcAARfUAAACSVGADnrEAAFwBPgE9HMAARgIuwABAjgEAASfAAECyAMAAVxkGwABXfoD+wABGJMAARinAAEZLAADAAECzAAAAAQPAAEY0wABGSwAAAAEBAcAARjsAAAC/G2ADnrEAAFwBPgAGwABXf4D+wABHPcAAR0LAAEefAAC/FAAAAAEDwABHVMAAR58AAAACAgLAAEdbAAAAvxVgA56xAMAAR3IAAAC/FmADnrEAAFwBPgE9HMAAR4MuwABAjgEAASe/FwDAAFcZBsAAV4CA/sAASEXAAEhKwABIlgAAvxoAAAABA8AASFPAAEiWAAAAAgICwABIWgAAAL8bYAOesQDAAEhvAAAAod1gA56xAABcAT4BPRzAAEiALsAAQI4BAAEnqG4AwABXGQbAAFeBgP7AAEnnwABJ7MAASjUAAL8eAAAAAQPAAEn/wABKNQAAAAEBAcAASgYAAACh3WADnrEAAFwBPgE9HMAAShcuwABAjgEAASfAAEC0AMAAVxkGwABXgoD+wABKOsAASj/AAEpiAADAAEC1AAAAAQPAAEpTwABKYgAAAAEBAcAASloAAACSVGADnrEAAFwBPgAGwABXg4D+wABKZ8AASmzAAEqvAAC/AwAAAAEDwABKfsAASq8AAAABAQHAAEqDAAAAgO5gA8AA/AUAAFwBPgE9HMAASpAuwABAjgEAASe/BADAAFcZBsAAV4SA/sAASrTAAEq5wABK3wAAwABAtgAAAAEDwABKzMAASt8AAAABAQHAAErTAAAArnVgA56xAABcAT4ABsAAV4WA/sAAS5rAAEufwABMCAAAvwAAAAABA8AAS7DAAEwIAAAAAwMDwABLtwAAAK51YAOesQDAAEvIAAAAoh5gA56xAMAAS9kAAAC/AWADnrEAAFwBPgE9HMAAS+ouwABAjgEAASe/AgDAAFcZBsAAV4aA/sAATA3AAEwSwABMZQAAvv0AAAABA8AATCLAAExlAAAAAgICwABMJwAAAIDuYAPAAPwFAMAATDQAAAC+/mADnrEAAFwBPgE9HMAATEsuwABAjgEAASe+/wDAAFcZBsAAV4eA/sAATGrAAExvwABMnQAAougAAAABA8AATI7AAEydAAAAAQEBwABMlQAAAJJUYAOesQAAXAE+AAbAAFeIgP7AAEyiwABMp8AATQIAAKLwAAAAAQPAAEzEwABNAgAAAAEBAcAATMsAAACSVGADnrEAAFwBPgE9HMAATNguwABAjgEAASei8QDAAFcZBsAAV4mA/sAATQfAAE0MwABNNQAAwABAtwAAAAEDwABNJsAATTUAAAABAQHAAE0tAAAAklRgA56xAABcAT4ABsAAV4qA/sAATTrAAE0/wABNlAAAof4AAAABA8AATVfAAE2UAAAAAQEBwABNXgAAAKH/YAOesQAAXAE+AT0cwABNby7AAECOAQABJ6IAAMAAVxkGwABXi4D+wABNmcAATZ7AAE3CAACh+QAAAAEDwABNs8AATcIAAAABAQHAAE26AAAAklRgA56xAABcAT4ABsAAV4yA/sAATiPAAE4owABOgQAAofoAAAABA8AATjvAAE6BAAAAAgICwABOQgAAALAmYAOesQDAAE5UAAAAklRg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AMAA/V4+Aj01AAAAAQBgA8AAiXwBgcAASE3AKrJsIxzAAEhdhADAKrWhSAEAASsAACscwABIXYQAwCq1ocAAQR8AAAAAwACJgQFcSsAASMUBHMAASMwuwABBIAEAAYPAAEjkwCqzGwDAAFiPP0nAAEkGIhbAAEkPgsAASQrAKrKqnXmexAAewABJHcAAWb0CAAIng9cWwABJMILAAEkrwCqyqoOwnswAPgM9HMAASY8uwABBIQIAAoLAAEmmwCqyqmrAAEmyYAORWcAAjC4AwABZED0cwABKORbAAEowLsAAQQXAAFhGwABBIgIAAoLAAEpewCqyqiTAAEqMAifAAEEjFsAASoCCwABKe8AqsqqHVJ66AMAAi1RKwABKlQEcwABKnC7AAEEgAQABgsAASrTAKrKqAMAAWI8/PRzAAEsZFsAASxAuqZLAAFg9wABA0AEAAYLAAEstwCqyqgDAAFfJSsAASzgBHMAASz8uwABBJAEAAYDAAEtfwCqyXgDAAFkUBsAAWFKA/8AAS+fAAEvtwABNiAAAwABBJQAAAAEDwABMC8AATYgAAAACAgLAAEwSAAAAamADnrEAwABMHwAAAJ1tYAOesQAAYAOesQE+A07AAEw0wABMPQAAqChgA56xARbAAExFgMAATD/AKrdHg7CezEPAAExPIRzAAExfgsAATFbAKrdrSAEAAYHAAExiwCq3VADAAP1ePgJJwABMcx7AAEx3wABZvQIAAieEJILAAEyMwCq3awA+Aj0cwABMoS7AAEEmAgACgsAATL/AKrdrgcAATMnAKrdUAMAAWFNKwABM2wGCwABM4sAqt2s+AT0cwABNFy7AAEEnAgACgsAATTPAKrdrgcAATT3AKrdUAMAAWFQ9isAATVXAKrdrFsAATWmCwABNYMAqt2uDsJ7MSsAATXkBKwbAAFhTgP/AAE3QwABN1cAATsQAAMAAQSYAAAABA8AATfLAAE7EAAAAAgICwABN+QAAAGpgA56xAMAATgYAAACdbWADnrEAAFwBPgJOwABOG8AATiQAAKgoYAOesQEWwABOLIDAAE4mwCq4gIOwnsxDwABONiEcwABORoLAAE49wCq4oUgBAAGBwABOScAquI0AwAD9Xj4CPRzAAE5sLsAAQScCAAKCwABOiMAquKGBwABOksAquI0AwABYVD2KwABOosAquKEW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wADS8cArD62DsJ7MPYvAANMFwCsQSxzAANMDg8AA0wXAKxBLZAEAAZQAwAD9KknAANMbIR7AANMgwABZvQIAAieAp4TAANMuwCsQaQA+AknAANM/IR7AANNEwABZvQIAAieZl4TAANNSwCsQaQA+Az0cwADTey7AAEEhAgAChMAA06HAKxBpHMAA08RqwADTrV0DkWUBYQMBYAPAAP3rYAORTrFgiAsBAAEnmZcAkWkAwABZED2MwADUFsArEGkWwADUI4LAANQdwCsP1J0Ynr5DwADUNyEcwADUSRbAANREgMAA1D7AKw+tg7CezEgBAAGEwADUTMArEGkAwAD9Xj4BPYjAANRgwCsPrRbAANRugMAA1GjAKw+tg7CezD9CwADUkgA/PYjAANSnwCsPrYTAANSvwCsQaUnAANS/HMAA1NKDwADUw8ArEEtIAQABkwDAAP0oPgM9HMAA1OAuwABBawMAA4DAANT9wCsPrWrAANUUYAORWa8IH8AA1UWepgQABGrAANVzYAOe+cAAr3MnABbAANWOFsAA1YmAwADVg8ArD62DsJ7Mh1SeupMAAMAAWKA9iMAA1aXAKw+tHMAA1a0uwABBagMAA4DAANXNwCsPrWrAANXoYAPAAFlDwADDLIHAANX8wCsPuwDAAFh0PYvAANYLwCsQSxzAANYJg8AA1gvAKxBLZAEAAZQAwAD9Kj89iMAA1iXAKw+tFsAA1jOAwADWLcArD62DsJ7MQB7AANZEwABZvQIAAieZl4DAANZSwCsPrQDAANZEwADWWAA9HMAA1mgWwADWXy6pksAAWD2inQMAA4PAANaEwCsQS4LAANaUwCsP1IDAANabwCsPrQDAAFetSsAA1qcBgMAA1q7AKw+tBsAAWHaA/8AA11fAANddwADcwwAAwABBaAAAAAEDwADXecAA3MMAAAACAgLAANeAAAAAklRgA56xAMAA15IAAACCZ2ADwABZnwAAYAOesQE+Ck7AANekwADXqgAAgpRgA56xAYjAANeswCsTxhbAANe6gMAA17TAKxPGg7CezEAewADXy8AAWb0CAAInmbaAwADX2cArE8YAwADXy8AA198APRzAANfvFsAA1+YuqZLAAFg9wABAxAEAAYLAANgNwCsT7QDAAFesTsAA2B3AANgsAACivmADwAD8BQGTQUPAANg1KT4HTsAA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YsArGwlqwADigWADwACLnMABC00AwABYi07AAOKdwADipwAAokRgA56xARbAAOKvgcAA4qnAKxtqg7CezE7AAOK9wADiwwAAgO5gA8AA/AUBk0nAAOLMHsAA4tDAAFm9AgACJ5m2gsAA4t7AKxumAD4CPYnAAOLywCsbaoLAAOL6wCsbpkFDwADjCyk+B07AAOMowADjLQAAg7BgA56xARbAAOM1gcAA4y/AKxtqg7CezEnAAONDHsAA40fAAFm9AgACJ4bGhMAA41XAKxwbAD4DPYnAAONowCsbaoTAAONwwCscG0nAAOOAHMAA44qDwADjhMArG8pIAQABkwDAAP0oPgE9HMAA454uwABBIQIAAoHAAOO1wCsbamrAAOPCYAORWa+4AMAAWRA/QsAA4/YAPz2JwADkD8ArG2ocwADkFy6/NQEAAYHAAOQpwCsbagDAAFhmPYnAAOQ5wCsbahzAAORBLsAAQTQCAAKBwADkUsArG2pqwADka2ADwACLocABBj8AwABYiz2MwADkisArHBsWwADkl4HAAOSRwCsbaoOwnsw9i8AA5KXAKxvKHMAA5KqDwADkpcArG8pkAQABlADAAP0qScAA5LYewADkusAAWb0CAAIngKeEwADkyMArHBsAPgE9icAA5NvAKxtqhMAA5OPAKxwbScAA5PgewADk/MAAWb0CAAInhsaEwADlCsArHBsAPgI9icAA5R3AKxtqhMAA5SXAKxwbQsAA5TUAPgJOwADlc8AA5XwAAJ0YYAOesQEWwADliILAAOV+wCsbpp0Ynr5JwADlnBbAAOWphcAA5aDAKx3DhI2exT4CPYnAAOYKwCsbahzAAOYbFsAA5hIuwABBBcAAWEbAAEFEAgACgcAA5inAKxtqhcAA5jDAKx3DAMAAizpCwADmRwBJwADmXxbAAOZohMAA5mPAKxwbnPOewD4BPRzAAOemLsAAQSECAAKEwADnzsArHBscwADn8WrAAOfaXQORZQFhAwFgA8AA/etgA5FOsWCICwEAASeApwCRaQDAAFkQPgM9HMAA6GUuwABBIQIAAoTAAOiNwCscGxzAAOiwasAA6JldA5FlAWEDAWADwAD962ADkU6xYIgLAQABJ4bGAJFpAMAAWRA9icAA6NHAKxtqFsAA6OOCwADo2cArG6adGJ6+QsAA6PkAPgI9isAA6YHAKxumHMAA6Y0uwABBewMAA4HAAOmZwCsbamrAAOmmXQORZQFhAwFgA56xYAORTrLPKwDAAFiaPYnAAOnNwCsbahbAAOnfgsAA6dXAKxumnRievkAewADp+sAAWb0CAAInhsaBwADqCMArG2oAwADp+sAA6g4APRzAAOoeFsAA6hUuqZLAAFg9v0gDAAOAwADqJsArGwmCwADqM8ArG6aDwADqPsArG8oAwABXR0rAAOpKAYHAAOpRwCsbagbAAFh8gP/AAOpfwADqZcAA7UsAAMAAQSkAAAABA8AA6obAAO1LAAAAAgICwADqlAAAAL8/YAOesQDAAOqpAAAAv0xgA56xAABgA56xAT4GQB7AAOrEwABZvQIAAieZ3YHAAOrWwCsgBQDAAOrEwADq4wBOwADq8MAA6vYAAIKUYAOesQE1AAAAAQBgA56xAYDAAOr4wCsf9yMcwADrBoIAwCsgUUgBAAErAACBwADrCcArIAWCAMArIFEBYAOesT0cwADrJBbAAOsbLqmSwABYPb96AQABgsAA60bAKyA/AMAAVylOwADrWMAA610AAIC9YAOesQEcwADrXy7AAEE0AgACgcAA63nAKyAFasAA65lgA8AAi4XAAQuKAMAAWItOwADryMAA684AAJJUYAOesQEcwADr8h7AAOvQwACLYQIAAoPAAOvmwCsgsSkAwABBWgIAAoPAAOwBwCsgsS4AwACLd0nAAOwSHsAA7BbAAFm9AgACJ4C8FsAA7CqEwADsJMArIO2DsJ7MAD4CPRzAAOxCFsAA7DkuqZLAAFg9v30DAAOCwADsXcArID+AwADsZMArH/eDwADsc8ArILEAwABXcErAAOyAARzAAOyHLsAAQX4DAAOEwADsosArIO2CwADsqcArID+BwADssMArIAUAwABYfT4CPRzAAOzbFsAA7NIuqZLAAFg9vz4DAAOCwADs8cArID+AwADs+MArH/eDwADtB8ArILEAwABXKkrAAO0UARzAAO0bLsAAQX8DAAOEwADtJsArIO2CwADtLcArID+BwADtNMArIAUAwABYfgbAAFh9gP/AAO1QwADtVsAA77IAAMAAQX4AAAABA8AA7XDAAO+yAAAAAwMDwADtfgAAAJJUYAOesQDAAO2LAAAAgpRgA56xAMAA7ZgAAAC/TGADnrEAAGADnrEBPglOwADtssAA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AgACFsABEXuEwAERasArNK6itsAAiyVqwAERjGADkVnAAEZhAMAAWRA/PY3AARG+wCs1FSk/PYjAARHlwCs0VxzAARHtLsAAQYcBAAGAwAESDMArNFcAwABYgknAARIbIRzAARJCFsABEjCEwAESH8ArNK6/TcAAiyZIAQABKwDAAP1ePgFJwAESVYbAARJZwCs1Tz4BPRzAARJ0LsAAQSECAAIWwAESnITAARKLwCs0rr9NwACLJmrAARLDYAORWcAAaXUAwABZED4BPY7AARL6wCs1Tyk/PRzAARMyFsABEykuqZLAAFg9v4MAAAAAwABXMyIhHsABE6jAAFm9AgACJ5m2FsABE7yAwAETtsArNFeDsJ7MAAAhHMABE8uHwAETxcArNadIAQABgMABE87AKzRXAMAA/V49F8ABE9suqZKDwAET5sArNIzAAFg9SsABE/sBgMABFALAKzRXBsAAWIaA/8ABFGLAARRowAEVEQAAwABBkgAAAAEDwAEUd8ABFREAAAABAQHAARR+AAAAklRgA56xAABgA56xAT4CScABFIshHsABFJDAAFm9AgACJ5oTFsABFKWAwAEUn8ArOTeDsJ7MAD4CPRzAARS9FsABFLQuqZLAAFg9v4YCAAIrkwDAAFcxSsABFNsBgMABFOLAKzk3P0rAARTzARzAART6LsAAQZQBAAGAwAEVB8ArOTcAwABYhwbAAFiHgP/AARUWwAEVHMABFwsAAMAAQZQAAAABA8ABFSjAARcLAAAAAQEBwAEVLwAAAJJUYAOesQAAYAOesQE+Bk7AARVCwAEVTAAAorZgA56xARbAARVUgMABFU7AKznyg7CezEAiIh7AARWqwABZvQIAAieaE4HAARW5wCs6CQABHsABFc/AAFm9AgACJ5nfgcABFePAKzoJAAEcwAEWChbAARYDgcABFfnAKzoJgl6ey0gBAAEnoX0AwAD9+sABFarAARYVAE7AARYgwAEWKgAAqM9gA8AA/AUBk0TAARYzPgI9iMABFj7AKznyHMABFmQewAEWRsAAi2ACAAIWwAEWWIDAARZSwCs58oOwnswpAMAAQYACAAIWwAEWfIDAARZ2wCs58oOwnswuAMAAi2k9isABFpHAKzqQHMABFo+CwAEWkcArOpBkAQABlADAAP0qHsABFqnAAFm9AgACJ4CnFsABFr2AwAEWt8ArOfKDsJ7MAD0cwAEW0hbAARbJLqmSwABYPb+GAgACgcABFuDAKzoJgsABFuvAKzqQAMAAVzFKwAEW+wGAwAEXAsArOfIGwABYiID/wAEXm8ABF6HAAR+gAADAAEErAAAAAQPAARevwAEfoAAAAAEBAcABF7YAAAC/RWADnrEAAGADnrEBPg5AHsABF9XAAFm9AgACJ4KPgMABF+vAKzumAMABF9XAARf8AE7AARgJwAEYDwAAklRgA56xAYDAARgRwCs7pk7AARgtwAEYMgAAgL1gA56xARbAARg6gcABGDTAKzvgg7CezEnAARhEIhbAARhNgsABGEjAKzv7nPOewAAhHsABGF7AAFm9AgACJ5oTgsABGG3AKzv7AD4BPYnAARh8wCs74ILAARiEwCs7+z4BPYrAARidwCs7+ys9icABGLTAKzvgHMABGN8ewAEYvMAAi2ECAAKBwAEY0sArO+ApAMAAQVoCAAKBwAEY7sArO+AuAMAAi3c9HMABGQkWwAEZAC6pksAAWD2/RAIAAoDAARkjwCs7poLAARk1wCs7+wDAAFc1TsABGUbAARlQAACitmADnrEBFsABGViBwAEZUsArO+CDsJ7MScABGWIhHsABGWfAAFm9AgACJ5oTg8ABGXbAKzzeAD4BScABGZwiIh7AARmgwABZvQIAAieZ34PAARm0wCs83gABHsABGczAAFm9AgACJ5ngg8ABGePAKzzeAAEewAEZ+8AAWb0CAAInmd6DwAEaDMArPN4APgE9HMABGiIuwABBIQIAAoPAARpGwCs83hzAARpvasABGlddA5FlAWEDAWADwAD962ADkU6z54gLAQABJ5oTAJFpAMAAWRA+Aj0cwAEanC7AAEEhAgACgcABGsDAKzvgHMABGulqwAEazV0DkWUBYQMBYAPAAP3rYAORTrBhiAsBAAEnmhMAkWkAwABZED2LwAEbB8ArPN4cwAEbHBbAARsTLsAAQQXAAFhGwABBXwIAAoHAARszwCs74GrAARtCYAOd9MAAp2UAwACLVT9OwAEbYsABG2sAAMAAQVdgA8AAi2MBHsABG23AAItgAgACg8ABG3nAKzzeKQA9icABG4/AKzvgHMABG6CEwAEbl8ArPkXAAEFKAgACg8ABG7HAKzzeLgDAAItqScABG8chHsABG8zAAFm9AgACJ5m2FsABG+CBwAEb2sArO+CDsJ7MAD4DTsABHAfAARwMAACDsGADnrEBFsABHBSBwAEcDsArO+CDsJ7MQUPAARwgIRbAARwthcABHCjAKz7KnXeevz4BScABHD4iIiIiHsABHELAAFm9AgACJ4CnhcABHFDAKz7KAAEewAEcZcAAWb0CAAInmd+FwAEcecArPsoAAR7AARyOwABZvQIAAieZ4IXAARylwCs+ygABHsABHLrAAFm9AgACJ5oThcABHMnAKz7KAAEewAEc3sAAWb0CAAInmd6FwAEc78ArPsoAPgQ9HMABHXIuwABBEgIAAoXAAR2SwCs+ymrAAR2eXQORZQFhAwFgA56xYAORTsAAkZ0AwABZET2JwAEdwsArO+CFwAEdysArPso9jcABHdrAKz7KFsABHeeBwAEd4cArO+CDsJ7MScABHfcWwAEeAIXAAR37wCs+ypzznsA+Aj2JwAEeHMArO+CFwAEeJMArPso9jcABHjbAKz7KFsABHkOBwAEePcArO+CDsJ7MPz4BQsABHnAAPRzAAR6PLsAAQXsDAAOBwAEem8ArO+ArJ8AAQZUAwABYmj89icABHwfAKzvgHMABHw8uwABBhAIAAmrAAR8vYAPAAFmRwAEGz4HAAR86wCs74ADAAFilPRzAAR9PFsABH0YuqZLAAFg9v0cDAAOAwAEfZ8ArO6aDwAEfecArPN6BwAEfhMArO+AAwABXNkrAAR+QAYHAAR+XwCs74AbAAFiJgP/AAR+lwAEfq8ABIQoAAMAAQZYAAAABA8ABH7rAASEKAAAAAQEBwAEfwQAAAJJUYAOesQAAYAOesQE+BE7AAR/UwAEf2QAAg7BgA56xARbAAR/hgMABH9vAK0ESg7CezEnAAR/rIRzAAR/5FsABH/SBwAEf78ArQSmCZ57JSAEAAWrAAR/8YAPAAPwFwABegADAAP0oPgI9HMABIBIuwABBEgIAAoHAASAywCtBKWrAASA+XQORZQFhAwFgA56xYAORTrTWAMAAWRE9icABIF3AK0EpHMABIG0WwAEgZC7AAEEFwABYRsAAQZcCAAKAwAEgecArQRIfwAEgjp6mAwADasABIK1gA575wACwLycAFsABIL6BwAEgucArQSmHVJ66AADAAIs5Pz0cwAEg3xbAASDWLqmSwABYPaHGAQABgcABIPDAK0EpAMAAWBxKwAEg+wGBwAEhAsArQSkGwABYioD/wAEhxMABIcrAASMHAADAAEEiAAAAAQPAASHjwAEjBwAAAAQCAsABIeoAAACSVGADnrEAwAEiAwAAAIJTYAPAAFlWAALAASIbAAAAImADkU4BagBgA8AA/Q55wAEiKgAAAMAAQZhgA56xAWoAYAPAAP0OeWADnrEBPgNOwAEiR8ABIkwAAIOwYAOesQEWwAEiVIDAASJOwCtCdYOwnsw9HMABIl4uwABBIQIAAjUAAAABAGADnrEBg8ABInXAK0KqIxzAASKEhQDAK0L9SAEAASsAAITAASKHwCtCy4UAwCtC/QFgA56xNQAAAAEAYAORTgGCwAEilcArQpQjHMABIp2FAMArQzhIAQABKwAAHMABIrkWwAEiqIHAASKgwCtCg8AAQZnAAFmKiAsBAAGEwAEix8ArQssAkWmFAMArQzgBYAORTgDAAFkQSsABItMBHMABIuMWwAEi2i7AAEEFwABYRsAAQSIBAAGAwAEi/cArQnUAwACLVAbAAFiLgP/AASRKwAEkUMABJdkAAMAAQTQAAAABA8ABJGDAASXZAAAAAgICwAEkZwAAAJJUYAOesQDAASSAAAAAglNgA8AAWVYAAGADnrEBPgVAIRzAASSegcABJJbAK0QCSAEAASsAwAD9XsABJJbAASSlAE7AASSywAEkvQAAnZhgA56xARbAASTFgMABJL/AK0P0g7CezEnAASTPIRzAASTjFsABJN6CwAEk08ArRD6CZ57JSAEAAWrAASTmYAPAAPwFwACaFQDAAP0oPgM9isABJQDAK0Q+HMABJRWBwAElDcArRALAAEE0AgACgMABJSbAK0P0LgDAAFmNQCEcwAElTILAASVBwCtEPkgBAAErAMAA/V7AASVBwAElUwBAFsABJW6CwAElY8ArRD6dcJ7CwAElY8ABJYMAPz0cwAElmRbAASWQLqmSwABYPaGnAgACgsABJarAK0Q+gcABJbbAK0QCAMAAV/9KwAElxAGCwAEly8ArRD4GwABYjID/wAEl3sABJePAASZuAADAAEGaAAAAAQPAASXwwAEmbgAAAAICAsABJfgAAACAlmADwAD96wDAASYFAAAAklRgA56xAABgA8AA+j8BPgFKwAEmEgEiIR7AASYawAD15gIAAhbAASYqgcABJiTAK0V/gmeeyWrAASYwYAPAAPwFCQAAIR7AASZHwAD15gIAAoDAASZRwCtFbxbAASZegcABJljAK0V/nXqe0AAGwABYjYD/wAEmc8ABJnnAASbrAADAAEGbAAAAAQPAASaOwAEm6wAAAAEBAcABJpUAAACSVGADnrEAAGADnrEBPgFKwAEmogEcwAEmzB7AASapwACLYQIAAoDAASa/wCtGICkAwABBWgIAAoDAASbbwCtGIC4AwACLdwbAAFiOgP/AASgowAEoLsABKMEAAL9UAAAAAQPAAShBwAEowQAAAAEBAcABKEgAAACSVGADnrEAAGADnrEBPgI9iMABKFXAK0aYHMABKF0uvzUBAAEcwAEoby6hWwEAAYDAASiGwCtGmADAAFkZAMAAWGZKwAEokwEWwAEouRzAASiaLsAAQSABAAGAwAEossArRpgAwABYj4OwnswGwABYj4D/wAEoxsABKMzAAT2dAADAAEEgAAAAAQPAASjjwAE9nQAAAAEBAcABKOoAAACSVGADnrEAAGADnrEBPhROwAEo/cABKQkAAMAAQZxgA56xAYDAASkLwCtHN07AASkcwAEpIQAAg7BgA56xARbAASkpgMABKSPAK0c3g7CezD0cwAEpPBbAASkzLqmSwABYPcAAQNABAAGCwAEpUMArR2sAwABXyU7AASliAAAAv4xgA56xAE7AASl7AAAAoQpgA56xAE7AASmQAAAAoQtgA56xAEnAASmmHsABKarAAIrgAQABgsABKbXAK0drAD4CScABKcQewAEpyMAAWb0CAAInhCmCwAEp3cArR2sAPgI9i8ABKe7AK0e2iMABKf7AK0c3gsABKgbAK0drPYrAASoUwCtHaxbAASohgMABKhvAK0c3g7CezD9JwAEqNR7AASo5wACK4AEAAYLAASpEwCtHawA+AknAASpVHsABKlnAAFm9AgACJ4QlgsABKmvAK0drAD4CPY3AASp+wCtH1IjAASqQwCtHN4LAASqYwCtHaz2KwAEqqMArR2sWwAEqtYDAASqvwCtHN4OwnsxJwAEqyh7AASrOwABZvQIAAieEJoLAASrewCtHawA+Aj2NwAEq8cArR9SIwAErA8ArRzeCwAErC8ArR2s9isABKxvAK0drFsABKyiAwAErIsArRzeDsJ7MScABKz0ewAErQcAAWb0CAAInhCeCwAErU8Ar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PRzAATW1FsABNawuwABBBcAAWEbAAEEiAgACgsABNeTAK0drJMABNhQCJ8AAQZ4WwAE2CILAATYDwCtHa4dUnroAwACLVD8/PRzAATZUFsABNksuqZLAAFg9vtMBAAGCwAE2dcArR2sAwABXyErAATaGAYLAATaNwCtHaz9JwAE21yEWwAE24YLAATbcwCtHa5zznsA+AUnAATcNFsABNxaCwAE3EcArR2udb57BPgBJwAE3qRzAATezgMABN63AK0c3SAEAAYHAATe2wCtHTgDAAP1ePgFKwAE39QEcwAE3/C7AAEEkAQABgMABOBzAK0c3AMAAWRQ+Aj0cwAE4ty7AAEEiAgACgMABONHAK0c3asABOOpgA8AAi+rAAQZ6AMAAWIo9isABOQjAK0drFsABORWAwAE5D8ArRzeDsJ7MPz89isABOWXAK0drFsABOXGCwAE5bMArR2uDsJ7MPRXAATl7wCtM0wkWwAE5iILAATmDwCtHa516ntBJwAE5mSIiIiIiIRzAATmmFMABOZ3AK0zECABIAQABKwDAAP1eAR7AATm5wAD15gIAAhTAATnDwCtM0wkAJ4PXAAEewAE52sAA9eYCAAIUwAE55MArTNMJACeZtgABHsABOfvAAPXmAgACFMABOgXAK0zTCQAnYwABHsABOhzAAPXmAgACFMABOibAK0zTCQAngWoAAR7AATo9wAD15gIAAhTAATpHwCtM0wkAJ5m3AD4CScABOl0hHMABOnGFwAE6YcArR9RIAQABKwDAAP1ePgFJwAE6hB7AATqIwABZvQIAAieEJoXAATqYwCtH1AA+AT0cwAE6ti7AAEEhAgAChcABOs3AK0fUasABOuRgA5FZwACVTADAAFkQPgE9HMABOxYuwABBEgIAAoXAATtFwCtH1GrAATtcXQORZQFhAwFgA56xYAORTrkjAMAAWRFJwAE7kCEcwAE7noTAATuUwCtHxUgBAAErAMAA/V4+AT0cwAE7sS7AAEESAgAChMABO97AK0fFasABO+9dA5FlAWEDAWADnrFgA5FOuSMAwABZET9KwAE8GgEcwAE8IS7AAEGfBgAGgcABPDXAK0dOg8ABPELAK0e2hsABPFHAK0wwh8ABPGfAK0xNFMABPHHAK0zECAAWwAE8gYDAATx7wCtHN4OwnswAwABYkT9JwAE8kyEcwAE8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ACEewAFmYMAAWb0CAAIngWqDwAFmbsArb24APgM9iMABZoDAK2reHMABZpEWwAFmiC7AAEEFwABYRsAAQaICAAKBwAFmpsAravVqwAFmtmADnvnAALQhAMAAi1Y9iMABZsPAK2reHMABZssuwABBIgQAAoDAAWblwCtq3mrAAWb+YAPAAIumwAEMowIiasABZyVgA5FZwABkIMAAQZiBwAFnaMAravXAAFiKSsABZ3cBHMABZ34uwABBrAEAAYLAAWedwCtrPgDAAFiZPz4EPYjAAWf9wCtq3hzAAWgFLsAAQSIEAAKAwAFoKsArat5qwAFoQ2ADwACLscABCvACImrAAWhuYAORWbC9wABBmIDAAWicwCtq3sAAWIo9iMABaKrAK2reHMABaLsWwAFosi7AAEEFwABYRsAAQaICAAKAwAFo0MArat5qwAFo4WADnvnAALQhAMAAi1Y9iMABaOzAK2reHMABaP0WwAFo9C7AAEEFwABYRsAAQSIBAAGAwAFpF8Arat4AwACLVErAAWklARzAAWksLsAAQawBAAGCwAFpS8Araz4AwABYmT2IwAFqksArat4cwAFqmi7AAEEiAwACgsABar3AK2s+asABauFgA8AAi7HAAQrwASJqwAFrCmADkVnAAGQgwABYij0cwAFrPxbAAWs2LsAAQQXAAFhGwABBogIAAoDAAWtUwCtq3mrAAWtlYAOe+cAAtCEAwACLVkrAAWtuARzAAWt1LsAAQawBAAGCwAFrlMAraz4AwABYmQbAAFiYgP/AAWwVwAFsG8ABcZYAAMAAQasAAAABA8ABbDrAAXGWAAAAAQEBwAFsRwAAAWpgA56xAABgA56xAT4GTsABbFrAAWxgAACSVGADnrEBFsABbGiAwAFsYsArcl+DsJ7MQB7AAWx5wABZvQIAAieZ54HAAWyLwCtydQDAAWx5wAFskQBOwAFsnsABbKMAAIOwYAOesQEWwAFsq4HAAWylwCtydYOwnsxJwAFstR7AAWy5wABZvQIAAieBaoLAAWzHwCtyvAA+BT2JwAFs1sArcnWCwAFs3sArcrw9isABbOrAK3K8FsABbPeBwAFs8cArcnWDsJ7MScABbQMhHMABbREWwAFtDILAAW0HwCtyvIJnnslIAQABasABbRRgA8AA/AXAAJoVAMAA/Sg+AT2KwAFtMMArcrwc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VMABgvcAAAABAQHAAYBbAAAAklRgA56xAABgA56xAT4ETsABgTvAAYFAAACDsGADnrEBFsABgUiAwAGBQsArfgeDsJ7MScABgVIewAGBVsAAWb0CAAInlqSBwAGBZMArfh4ASsABgWsBgcABgXLAK34ePz0cwAGCMi7AAEEhAgACHsABgknAAFm/AQABgMABgmjAK34HABzAAYKaasABgn5dA5FlAWEDAWADwAD962ADkU6wYYgLAQABJ5akAJFpAMAAWRBKwAGCswEcwAGCwxbAAYK6LsAAQQXAAFhGwABBogIAAoDAAYLYwCt+B2rAAYLpYAOe+cAAukEAwACLVgbAAFiggP/AAYOMwAGDksABhDkAAMAAQWsAAAABA8ABg6PAAYQ5AAAAAwMDwAGDqgAAAJJUYAOesQDAAYO5AAAAImADkU4AwAGDyAAAAMAAQbNgA56xAABgA56xAT4CPRzAAYPYLsAAQSECAAIWwAGD9YDAAYPvwCt/KIOwnsyBwAGD+8ArfzYAwABZEErAAYQJARzAAYQZFsABhBAuwABBBcAAWEbAAEGXAgACgMABhCXAK38ogsABhCzAK39DAMAAizkGwABYoYD/wAGEl8ABhJ3AAYX0AADAAEFpAAAAAQPAAYSywAGF9AAAAAEBAcABhLkAAACSVGADnrEAAGADnrEBPgVOwAGEzMABhNEAAIOwYAOesQEWwAGE2YDAAYTTwCt/7IOwnsxAHsABhOrAAFm9AgACJ0uBwAGE+cArgAMAwAGE6sABhP4ATsABhQvAAYUXAACEV2ADnrEBHMABhRkulikCAAIfwAGFK53mAgACasABhUBgA575wACdXRbAAYVagcABhVXAK4ADg1yezQAfwAGFb56AAgACasABhX9gA575wACz7xzAAYWhFsABhZqBwAGFlcArgAODXJ7NZAEAAZQAwAD9KgAAwABZGD0cwAGFtRbAAYWsLsAAQQXAAFhGwABBtgIAAoDAAYXLwCt/7ILAAYXSwCuASQDAAIs7SsABheQBgMABhevAK3/sBsAAWKKA/8ABhpvAAYahwAGITgAAwABBPwAAAAEDwAGGt8ABiE4AAAACAgLAAYa+AAAAklRgA56xAMABhtIAAADAAEG3XQPAAPypAWADwAD96wAAYAOesQE+A07AAYbswAGG8QAAg7BgA56xARbAAYb5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5gIAAoXAAiR8wCvnDGrAAiSMYAOe+cAAuG8AAR7AAiSlwAD15gIAAoXAAiSvwCvnDGrAAiS/YAOe+cAAuaIAPgI9iMACJjXAK+V6HMACJj0uwABB/QIAAhbAAiZhgMACJlvAK+V6g7CezGrAAiZ5YAPAAIumwAEM4ADAAFjHPRzAAianFsACJp4uqZLAAFg9oYgBAAEUwAImu8Ar6BoJAADAAFfuScACJtciIh7AAibbwAD15gIAAoXAAiblwCvnDGrAAib1YAOe+cAAnSgAAR7AAicSwAD15gIAAoXAAiccwCvnDGrAAicsYAOe+cAAnV0AAR7AAidSwAD15gIAAoXAAidcwCvnDGrAAidsYAOe+cAAnZYAPgE9iMACJ6DAK+V6HMACJ6guwABB/gIAAoDAAifBwCvleoPAAifIwCvmNQDAAFjGScACJ+MewAIn58AA9eYCAAKFwAIn8cAr5wxqwAIoAWADnvnAALZjAD4ETsACKCLAAiguAACEV2ADndwBJsACKCIBHMACKDAulikCAAIfwAIoSp3mAwADasACKF9gA575wACdXRbAAih5hMACKHTAK+boh1SeuibAAiieARbAAiiehMACKJnAK+bonO6ezmADnecAH8ACKMaegAIAAmrAAijWYAOe+cAAs+8cwAIo/BbAAijxhMACKOzAK+boh1SeumQBAAGUAMAA/SoAAMAAWRhgA53cPRzAAikYFsACKQ8uwABBBcAAWEbAAEG2AgACgMACKS7AK+V6FMACKTXAK+xqCgAAwACLOz0XwAIpWxTAAilPwCvsagoAnQ8WwAIpchTAAilmwCvsagoAg7CeWZ3ePYjAAimEwCvlehzAAimMLsAAQf4CAAKAwAIppcAr5XpqwAIprGADwACLcMABCygAwABYxknAAinQHsACKdTAAPXmAgAChcACKd7AK+cMasACKe5gA575wACxXAA+Aj0cwAIqDBbAAioDLqmSwABYPaJkAQABFsACKjCAwAIqKsAr5XqDsJ7MAMAAV9U9iMACKkPAK+V6hMACKkvAK+boPgI9HMACKoguwABBEgIAAhbAAiq/gMACKrnAK+V6g7CezGrAAirLXQORZQFhAwFgA56xYAORTsAAkZ0AwABZET2IwAIq8cAr5XqEwAIq+cAr5uhJwAIrGh7AAisewAD15gIAAoXAAisowCvn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iXwAAIOwYAOesQEWwAKJhIDAAol+wCwtp4OwnsxJwAKJjiEewAKJk8AAWb0CAAIng9eBwAKJocAsLb4APgNOwAKJ+MACigAAAJ4jYAPAAItwAR7AAooCwACLYQEAAYDAAooYwCwtpwBJwAKKJhzAAooygsACiirALC4DSAEAAWrAAoo1YAPAAItwwAELKADAAP1ePgE9HMACilEuwABBIQIAAoDAAop1wCwtpxzAAoqeasACioJdA5FlAWEDAWADwAD962ADkU6wYYgLAQABJ4PXAJFpAMAAWRA+BD0cwAKKyi7AAEEhAgACgMACiu7ALC2nasACivtgA5FZoYQAwABZED2IwAKLKcAsLaccwAKLOYLAAosxwCwuA8AAQVUCAAKAwAKLSMAsLacuAMAAi3Y9HMACi2cWwAKLXi6pksAAWD2jBgEAAYDAAouCwCwtpwDAAFfePYnAAouSwCwtvhbAAoufgMACi5nALC2ng7CezEnAAouzIR7AAou4wABZvQIAAieD14HAAovGwCwtvgA+AT2JwAKL18AsLb4cwAKL5xbAAoveLsAAQQXAAFhGwABBQQIAAoDAAov0wCwtpyoAwACLOD8/SsACjBUBHMACjBwuwABCJAEAAYHAAowvwCwtvgDAAFjmBsAAWNeA/8ACjJ3AAoyjwAKN6AAAwABCDgAAAAEDwAKMtcACjegAAAABAQHAAoy8AAAAklRgA56xAABgA56xAT4HTsACjM/AAozaAADAAEDiYAOesQEWwAKM4oDAAozcwCwv2YOwnsxAHsACjPPAAFm9AgACJ5nogcACjQPALC/wAMACjPPAAo0OAD0cwAKNHhbAAo0VLqmSwABYPaLkAQABgcACjTHALC/wAMAAWA89iMACjULALC/ZHMACjUouwABB0QEAAYHAAo1kwCwv8ADAAFiwPYjAAo11wCwv2RzAAo19LsAAQiUBAAGAwAKNocAsL9kAwABY1j0cwAKNthbAAo2tLqmSwABYPaLrAQABgcACjcfALC/wAMAAWBBKwAKN2AGAwAKN38AsL9kGwABY2ID/wAKN7cACjfPAAo9JAADAAEIFAAAAAQPAAo4SwAKPSQAAAAICAsACjiAAAACSVGADnrEAwAKOOgAAAJ4jYAPAAItwAABgA56xAT4GTsACjk/AAo5VAACClGADnrEBgMACjlfALDEHPRzAAo5rFsACjmIuqZLAAFg9ougBAAGAwAKOi8AsMQcAwABXhz2IwAKOl8AsMQccwAKOny7AAEHRAgACgMACjrnALDEHgcACjsDALDEVAMAAWLA9iMACjs7ALDEHHMACjtYuwABCJQEAAYDAAo76wCwxBwDAAFjWPRzAAo8PFsACjwYuqZLAAFg9ovABAAGCwAKPLcAsMS4AwABXiErAAo85AYDAAo9AwCwxBwbAAFjZgP/AApDmwAKQ7MAClW4AAMAAQg8AAAABA8ACkQDAApVuAAAAAQEBwAKRBwAAAJJUYAOesQAAYAOesQE+DE7AApEawAKRJwAAoj1gA56xAYjAApEpwCwyIBbAApE3gMACkTHALDIgg7CezEAewAKRSMAAWb0CAAInhCeBwAKRWsAsMjcAwAKRSMACkWcATsACkXTAApF5AACDsGADnrEBFsACkYGAwAKRe8AsMiCDsJ7MTsACkZjAApGeAAGAlmADwAD96wEWwAKRpYLAApGgwCwyh516ntBJwAKRtiIewAKRu8AA9eYCAAKDwAKRxcAsMqsnmZYAAR7AApHWwAD15gIAAoPAApHgwCwyqydLAD4FPRzAApIAFsACkfcuqZLAAFg9oucBAAGCwAKSEsAsMocAwABXPD0cwAKSKBbAApIfLqmSwABYPb7XAQABgsACkj7ALDKHAMAAV989iMACkkvALDIgHMACklMuwABCEQIAAoDAApJqwCwyIIHAApJxwCwyNwDAAFjPPRzAApKPFsACkoYuqZLAAFg9oukBAAEWwAKSpYDAApKfwCwyIIOwnswAwABXPUrAApKyAYDAApK5wCwyID9JwAKSyh7AApLOwAD15gIAAoPAApLYwCwyqyeZtgA+BT0cwAKS9hbAApLtLqmSwABYPaLnAQABgsACkwjALDKHAMAAVzw9HMACkx4WwAKTFS6pksAAWD2+1wEAAYLAApM0wCwyhwDAAFffPYjAApNBwCwyIBzAApNJLsAAQhICAAKAwAKTZMAsMiCBwAKTa8AsMjcAwABY0D0cwAKTiRbAApOALqmSwABYPaLpAQABFsACk5+AwAKTmcAsMiCDsJ7MAMAAVz1KwAKTrAGAwAKTs8AsMiA/ScACk8QewAKTyMAA9eYCAAKDwAKT0sAsMqsnYwA+BD0cwAKT8BbAApPnLqmSwABYPaLnAQABgsAClALALDKHAMAAVzw9iMAClA/ALDIgHMAClBcuwABCEwIAAoDAApQ4wCwyIIHAApQ/wCwyNwDAAFjSPRzAApRdFsAClFQuqZLAAFg9oukBAAEWwAKUc4DAApRtwCwyIIOwnswAwABXPUrAApSAAYDAApSHwCwyID89HMAClKEWwAKUmC6pksAAWD2i5gEAAYHAApS2wCwyNwDAAFfyPYjAApTJwCwyIBzAApTRLsAAQdEBAAGAwAKU68AsMiAAwABYsD2IwAKU98AsMiAcwAKU/y7AAEIlAQABgMAClSPALDIgAMAAWNY9HMAClTgWwAKVLy6pksAAWD2i9QEAAYHAApVLwCwyNwDAAFfzSsAClV4BgMAClWXALDIgBsAAWNqA/8AClbHAApW3wAKWigAAwABCBwAAAAEDwAKVxsAClooAAAABAQHAApXNAAAAklRgA56xAABgA56xAT4EPYjAApXawCw2FRbAApXogMACleLALDYVg7CezEAiHsAClfnAAPXmAgACFsAClgmAwAKWA8AsNhWCZ57JasAClg9gA8AA/AXAAJotAAEewAKWJcAA9eYCAAIWwAKWNYDAApYvwCw2FYJnnslqwAKWO2ADwAD8BcAAmloAwAKV+cAClk0APRzAApZdFsACllQuqZLAAFg9odcBAAGAwAKWbsAsNhUAwABYCUrAApZ6AYDAApaBwCw2FQbAAFjbgP/AApbPwAKW1cACl30AAMAAQggAAAABA8AClufAApd9AAAAAQEBwAKW7gAAAJJUYAOesQAAYAOesQE+BD2IwAKW+8AsNw8WwAKXCYDAApcDwCw3D4OwnsxAHsAClxrAAPXmAgACFsAClyqAwAKXJMAsNw+CZ57JasAClzBgA8AA/AXAAJoeAMAClxrAApc9AD0cwAKXTRbAApdELqmSwABYPaJTAQABgMACl2HALDcPAMAAWAhKwAKXbQGAwAKXdMAsNw8GwABY3ID/wAKX4cACl+fAApnVAADAAEG1AAAAAQPAApf5wAKZ1QAAAAEBAcACmAAAAACSVGADnrEAAGADnrEBPglAHsACmBTAAPXmAgACFsACmCkWwAKYJIDAApgewCw32YOwnsyCZ57JasACmC9gA8AA/AXAAF6AAMACmBTAApg8AE7AAphIwAKYTAAAg1pgA8AA+j8BFsACmE4uvr7AAFg+PRfAAphvLr6+KcAAWD49iMACmJfALDfZHMACmJ8uwABCJgEAAYDAApi4wCw32QDAAFjeTsACmMjAApjOAACA7mADwAD8BQGUQ8ACmNcewAKY3sAA9eYCAAIWwAKY8xbAApjugMACmOjALDfZg7CezIJnnslqwAKY+WADwAD8BcAAXoAAPgI9iMACmRDALDfZHMACmRguwABCJgEAAYDAApkxwCw32QDAAFjePYrAApk/wCw4hBzAAplEgsACmT/ALDiEZAEAAZQAwAD9KknAAplSHMACmVyCwAKZVsAsOISAlwEAAZQAwAD9ND4BPRzAAplyFsACmWkuqZLAAFg9odQBAAGCwAKZjMAsOIQAwABXoj89F8ACmZ4uvr6BwAKZvMAsODHAAFg+SsACmcUBgMACmczALDfZBsAAWN2A/8ACmkPAAppJwAKdiQAAwABCCQAAAAEDwAKaW8ACnYkAAAABAQHAAppiAAAAklRgA56xAABgA56xAT4FTsACmnXAApp/AACiX2ADnrEBiMACmoHALDm0FsACmo+AwAKaicAsObSDsJ7MQB7AApqgwABZvQIAAieGtYHAApquwCw5ywDAApqgwAKauAA9HMACmsgWwAKavy6pksAAWD3AAEDMAQABgcACmtvALDnLAMAAV8JOwAKa8cACmvYAAIOwYAOesQEWwAKa/oDAApr4wCw5tIOwnsxJwAKbCBbAApsRgsACmwzALDpCgiiexz4DPRzAAps7FsACmzIuqZLAAFg9o6EBAAGCwAKbSsAsOkIAwABYFT0cwAKbYBbAAptXLqmSwABYPaJeAgACgcACm3HALDnLlADAAFfDSsACm4YBgsACm43ALDpCScACm54ewAKbosAAWb0CAAInmh+CwAKbs8AsOkIAPgM9HMACm8sWwAKbwi6pksAAWD2jogEAAYLAApvcwCw6QgDAAFgWPRzAApvyFsACm+kuqZLAAFg9ol4CAAKBwAKcA8AsOcuUAMAAV8NKwAKcGAGCwAKcH8AsOkI+BU7AApw8wAKcQgAAgO5gA8AA/AUBlD2IwAKcTcAsObQcwAKcVS7AAEE0AgACgMACnGbALDm0asACnH9gA8AAi8DAAQ7OAMAAWItDwAKclR7AApycwABZvQIAAieBahbAApywgMACnKrALDm0g7CezAA+Aj2LwAKcwcAsO1UcwAKc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sQDAAqXiAAAAglNgA8AAWVYAAGADnrEBPgdOwAKl98ACpgIAAJ9VYAOesQGIwAKmBMAsQtAcwAKmDC7AAEE0AgACgMACph3ALELQgcACpiTALELeAMAAWItJwAKmMh7AAqY2wABZvQIAAieZ6RbAAqZKgMACpkTALELQg7CezAA+A07AAqZfwAKmZAAAomVgA56xARbAAqZsgMACpmbALELQg7CezE7AAqZ+wAKmgwAAg7BgA56xARbAAqaKg8ACpoXALENfg7CezEnAAqaWIh7AAqaawABZvQIAAieD14TAAqaowCxDgwABHsACprHAAFm9AgACJ5mWhMACpr/ALEODAD4CPRzAAqbZFsACptAuqZLAAFg9omQBAAGDwAKm98AsQ18AwABX1T2IwAKnBsAsQtCDwAKnDsAsQ18/P07AAqc5wAKnQQAAniNgA8AAi3ABHsACp0PAAItiAQABgMACp17ALELQAEnAAqdqIRzAAqd2g8ACp27ALEQcSAEAAWrAAqd5YAPAAItwwAELKADAAP1ePgE9iMACp5PALELQHMACp6ODwAKnm8AsRBzAAEFVAgACgMACp7LALELQLgDAAIt2PgE9HMACp9wWwAKn0y6pksAAWD2+1wEAARbAAqf4gMACp/LALELQg7CezADAAFffPYjAAqgJwCxC0BzAAqgRLr7BAQABgMACqCPALELQAMAAWOQ9HMACqDgWwAKoLy6pksAAWD2hbwIAAoLAAqhDwCxC9xbAAqhVgMACqE/ALELQg7CezADAAFe7SsACqGABgMACqGfALELQBsAAWOOA/8ACqHXAAqh7wAKpQgAAvsIAAAABA8ACqIvAAqlCAAAAAQEBwAKokgAAAJJUYAOesQAAYAOesQE+A07AAqilwAKoqgAAg7BgA56xARbAAqiygMACqKzALEVkg7CezD0cwAKoxRbAAqi8LqmSwABYPb7VAQABgcACqNfALEV7AMAAWBFJwAKo4h7AAqjmwABZvQIAAieD14HAAqj0wCxFewA+AUrAAqkDARbAAqkPgcACqQrALEV7nRievj4BSsACqSwBgMACqTPALEVkBsAAWOSA/8ACqUfAAqlNwAKqIAAAvsEAAAABA8ACqV7AAqogAAAAAQEBwAKpZQAAAJJUYAOesQAAYAOesQE+Ak7AAql4wAKpfQAAg7BgA56xARbAAqmFgMACqX/ALEY2g7CezEnAAqmPIR7AAqmUwABZvQIAAieD14HAAqmiwCxGTQA+Aj0cwAKpuhbAAqmxLqmSwABYPb7VAQABgcACqczALEZNAMAAWBFKwAKp2QGAwAKp4MAsRjY+AUrAAqn6ARzAAqoBLsAAQVUBAAGAwAKqEMAsRjYAwABY5QbAAFjlgP/AAqsuwAKrNMACq38AAMAAQVUAAAABA8ACq0LAAqt/AAAAAQEBwAKrSQAAAJJUYAOesQAAYAOesQE+AUrAAqtWARzAAqtdLsAAQiQBAAEWwAKrdoDAAqtwwCxHFIOwnswAwABY5gbAAFjmgP/AAquEwAKrisACsmwAAMAAQiQAAAABA8ACq5zAArJsAAAAAQEBwAKrowAAAJJUYAOesQAAYAOesQE+DE7AAqu2wAKrvAAAgpRgA56xAYDAAqu+wCxHgEAewAKr0MAAWb0CAAIng9eBwAKr3sAsR5cAwAKr0MACq+QAPRzAAqv0FsACq+suqZLAAFg9wABAkAEAAYHAAqwDwCxHlwDAAFcaTsACrBPAAqwhAAC7GmADwAD8BQGTTsACrC/AAqxEAADAAEIpYAPAAPo/ASpOwAKsVsACrFoAAINaYAPAAPo/ARbAAqxcLr6+wABYPj0XwAKsfS6+vinAAFg+QUPAAqylKT4KTsACrMDAAqzFAACDsGADnrEBFsACrM2AwAKsx8AsR4CDsJ7MScACrNkewAKs3cAAWb0CAAIngyGFwAKs68AsSF8APgI9iMACrPzALEeAhcACrQTALEhfQsACrRIAP07AAq0twAKtMwAAoYRgA56xAStJwAKtQR7AAq1FwABZvQIAAieC5hbAAq1YhcACrVPALEhfg7CezAA+Az2IwAKtacAsR4AWwAKt0BzAAq19LsAAQTQCAAKAwAKtjsAsR4BqwAKtp2ADwACL8cABD0gAwABYi4Ownsw9jsACrd7ALEi9gMACrebALEeAPYvAAq31wCxIESlJwAKuH4PAAq4jwCxIET4BPRzAAq54LsAAQSECAAKFwAKuj8AsSF9qwAKum2ADkVnAAHvRAMAAWRA/PYjAAq7PwCxHgBzAAq7XLqFaAQABgMACrufALEeAAMAAWL49jcACrvXALEhfFsACrwKAwAKu/MAsR4CDsJ7MScACrw4hHMACrxiGwAKvEsAsSL1IAQABKwDAAP1ePRzAAq8qFsACryEuqZLAAFg9owsBAAGGwAKvPsAsSL0AwABYDj89isACr07ALEf8HMACr0yCwAKvTsAsR/xkAQABlADAAP0qScACr2MhHsACr2jAAFm9AgACJ4CnhcACr3bALEhfAD4CScACr4cewAKvi8AAWb0CAAIngyGFwAKvmcAsSF8APgI9iMACr6zALEeAhcACr7TALEhfQsACr8QAP0nAAq/xHsACr/XAAFlUAQABhcACsA7ALEhfAD4BPY3AArCowCxIXxzAArCvLsAAQWsDAAOAwAKw0MAsR4AcwAKxAmrAArDrXQORZQFhAwFgA8AA/etgA5FOsWCICwEAASeApwCRaR/AArEonrACAAJqwAKxQWADnvnAALL5FsACsU2FwAKxSMAsSF+DXJ7NAADAAFigPgI9iMACsXLALEeAHMACsXouwABBZwIAAoDAArGLwCxHgIHAArGSwCxHlwDAAFicQsACsaQAPz2IwAKxw8AsR4CFwAKxy8AsSF9AHsACseLAAFm9AgACJ4MhgMACsfDALEeAAMACseLAArH2AD0XwAKx/S6+voTAArIbwCxIKMAAWD49HMACsi0WwAKyJC6pksAAWD2hZwMAA4LAArI6wCxH/IHAArJJwCxHl4DAArJQwCxHgADAAFcbSsACslwBgMACsmPALEeABsAAWOeA/8ACsrXAArK7wAK0VgAAwABB/wAAAAEDwAKyzsACtFYAAAABAQHAArLVAAAAklRgA56xAABgA56xAT4ITsACsujAArLxAACFtmADnrEBiMACsvPALEwXFsACswGAwAKy+8AsTBeDsJ7MQB7AArMSwABZvQIAAieZ94HAArMhwCxMLgDAArMSwAKzKgBOwAKzN8ACszsAAKJ/YAOesQErScACs0cewAKzS8AAWb0CAAInmekWwAKzX4DAArNZwCxMF4OwnswAPgE9isACs27ALEx+iMACs3TALEwXFsACs4KAwAKzfMAsTBeDsJ7MP07AArObwAKzpAAAwABBV2ADwACLYwEcwAKzpi7AAEIrAQABgMACs73ALEwXAMAAWOg9iMACs8nALEwXHMACs9qDwAKz0cAsTODAAEGAAgACgMACs+zALEwXLgDAAItpPRzAArQHFsACs/4uqZLAAFg9on4CAAKBwAK0GMAsTC6CwAK0IsAsTH4AwABYAUrAArQsARzAArQzLsAAQiwBAAGAwAK0TMAsTBcAwABY6gbAAFjogP/AArRbwAK0ZMACtlcAAMAAQisAAAABA8ACtHrAArZXAAAAAQEBwAK0gQAAAJJUYAOesQAAYAPAAItjAT4DTsACtJfAArSgAADAAEFXYAPAAItjAR7AArSiwACLYAIAAoDAArSuwCxNuSkAScACtMAWwAK0zYHAArTEwCxN0rXdwACLZz4CTsACtOfAArTsAACDsGADnrEBFsACtQccwAK094HAArTuwCxN0sAAQVgBAAGAwAK1AMAsTbkAwACLbYOwnsxJwAK1EyEewAK1GMAAWccCAAKCwAK1JcAsThpqwAK1K10DwAD8qQFgA8AA/evAAQ+AAD4BPYnAArYPwCxN0hbAArYjgcACthrALE3SwABCLcAAi2U/P0rAArZEAYHAArZLwCxN0gbAAFjpgP/AAraawAK2oMACt9UAAMAAQgAAAAABA8ACtrPAArfVAAAAAQEBwAK2ugAAAJJUYAOesQAAYAOesQE+Bk7AArbNwAK21gAAhbZgA56xAYjAArbYwCxO6BbAArbmgMACtuDALE7og7CezEAewAK298AAWb0CAAInmYuBwAK3BsAsTv8AwAK298ACtw8ATsACtx/AArcoAADAAEFXYAPAAItjARzAArcqLsAAQisBAAGAwAK3QcAsTugAwABY6D2IwAK3TcAsTugcwAK3XoLAArdVwCxPT8AAQYACAAKAwAK3cMAsTuguAMAAi2k9HMACt4sWwAK3gi6pksAAWD2iegEAAYHAArecwCxO/wDAAFfrSsACt6sBHMACt7IuwABCLAEAAYDAArfLwCxO6ADAAFjqBsAAWOqA/8ACt9rAArfgwAK6YgAAwABCLAAAAAEDwAK3+MACumIAAAABAQHAArf/AAAAklRgA56xAABgA56xAT4BQ8ACuAwpPglOwAK4J8ACuCwAAIOwYAOesQEWwAK4NIDAArguwCxQH4OwnsxOwAK4R8ACuE0AAICWYAPAAP3rARbAArhUgcACuE/ALFA+nXqe0EnAArhnIiEewAK4bMAA9eYCAAKCwAK4dsAsUGInmfcAACEewAK4h8AA9eYCAAKCwAK4kcAsUGInmYsAPgFKwAK4qQGAwAK4sMAsUB8/PRzAArk0LsAAQRICAAKBwAK5VMAsUD5qwAK5YF0DkWUBYQMBYAOesWADkU7AAJGdAMAAWRFJwAK5gB7AArmEwABZvQIAAieZ6RbAArmXgcACuZLALFA+g7CezAA+AT2JwAK5qMAsUD4WwAK5tIHAArmvwCxQPoOwnsw/TsACudHAArnaAADAAEFXYAPAAItjARzAArncLsAAQisBAAGBwAK588AsUD4AwABY6D2IwAK6AMAsUB8cwAK6EYPAAroIwCxRUMAAQVgBAAGBwAK6GsAsUD4AwACLbT2JwAK6J8AsUD4WwAK6NIDAArouwCxQH4Ownsw9isACukDALFBiFsACuk2BwAK6SMAsUD6dep7QBsAAWOuA/8ACus/AArrUwAK9qwAAwABCLgAAAAEDwAK66sACvasAAAABAQHAArrxAAAAklRgA56xAABgA8AA+j8BPgJJwAK6/hbAArsIgMACuwLALFIRnPOewD4DScACux4ewAK7IsAAWb0CAAInYxbAArs2gMACuzDALFIRg7CezAA+A07AArtawAK7ZAAAnu1gA8AAi3ABHsACu2bAAIthAQABgMACu3zALFIRAEnAAruMHMACu5qBwAK7kMAsUmtIAQABasACu51gA8AAi3DAAQsoAMAA/V4+AUrAAru7ASo/PYjAArvbwCxSERzAArvtgcACu+PALFJrli8BAAGAwAK78sAsUhEAwACLeD89iMACvAjALFIRFsACvBaAwAK8EMAsUhGDsJ7MScACvCIewAK8JsAAWb0CAAIng9eAwAK8NMAsUhEAPgI9iMACvEbALFIRFsACvF0WwAK8VIDAArxOwCxSEZ0Ynr6DsJ7MSsACvGsBIiIiHsACvHLAAFm9AgACJ5m2gMACvIDALFIRAAEewAK8lsAAWb0CAAInmbeAwAK8pcAsUhEAAR7AAry7wABZvQIAAieZsYDAArzNwCxSEQABHsACvOPAAFm9AgACJ5mvgMACvPTALFIRAEnAAr0JHsACvQ3AAFm9AgACJ5m3gMACvRzALFIRAD4BSsACvXwBKT8/SsACvZsBKgbAAFjsgP/AAr31wAK9+sACvqoAAMAAQiIAAAABA8ACvg/AAr6qAAAAAQEBwAK+FgAAAJJUYAOesQAAYAPAAPo/AT4BSsACviMBIiIiHsACvirAAFm9AgACJ5m2gMACvjjALFQiAAEewAK+SsAAWb0CAAInmbeAwAK+WcAsVCIAAR7AAr5rwABZvQIAAieZsYDAAr59wCxUIgABHsACvo/AAFm9AgACJ5mvgMACvqDALFQiAAbAAFjtgP/AAr6vwAK+tcACwjwAAMAAQe4AAAABA8ACvt/AAsI8AAAAAQEBwAK+7AAAAWpgA56xAABgA56xAT4ETsACvv/AAr8KAAC/o2ADnrEBFsACvxKAwAK/DMAsVNaDsJ7MQB7AAr8jwABZvQIAAieEJ4HAAr81wCxU7ADAAr8jwAK/QABJwAK/RyEewAK/TMAAiuABAAEWwAK/YoHAAr9XwCxU7IOwnswAPgNOwAK/esACv4MAAMAAQVdgA8AAi2MBHsACv4XAAItgAgACgcACv5HALFTsKgBJwAK/qxzAAr+4gsACv6/ALFVaSAEAAWrAAr+7YAPAAItjwAEKUQDAAP1ePgROwAK/08ACv9gAAIOwYAOesQEWwAK/5YHAAr/awCxU7IOwnsxJwAK/8yEWwAK//YPAAr/4wCxVtJzznsA+AUrAAsAXARzAAsAeLsAAQfABAAGAwALAN8AsVNYAwABYvT89i8ACwFHALFW0FsACwF2DwALAWMAsVbSDsJ7MScACwGshIiIiIh7AAsBxwABZvQIAAieAvIPAAsB/wCxVtAABFsACwLGDwALArMAsVbSdcJ7CAR7AAsDWwABZvQIAAieWpIPAAsDkwCxVtAABHsACwPnAAFm9AgACJ4Cng8ACwQfALFW0AAEewALBHMAAWb0CAAInmbaDwALBKsAsVbQAPgFKwALBPgEcwALBRS7AAEHwAQABgMACwV7ALFTWAMAAWL0/P0rAAsF+ARzAAsGFLsAAQdwGAAaBwALBxMAsVOyAwALB0MAsVNYrgcACwd3ALFTsgsACwenALFVaKgDAAFjvP0rAAsIFARzAAsIMLsAAQeABAAGAwALCMsAsVNYAwABY7gbAAFjugP/AAsUawALFIMACyn0AAMAAQeAAAAABA8ACxUXAAsp9AAAAAgECwALFUgAAAWpgA56xAMACxWUAAADAAEIvYAPAAPo/AWrAAsWJYAPAAPo/AABgA56xAT4HTsACxZ3AAsWjAACSVGADnrEBgMACxaXALFdkTsACxbbAAsW7AACDsGADnrEBFsACxcOCwALFvcAsV5iDsJ7MScACxc0ewALF0cAAWb0CAAIng3+DwALF38AsV7MAPgI9isACxe7ALFeYHMACxfYuvzUBAAGCwALGCMAsV5gAwABYZj2LwALGFsAsV7MWwALGI4LAAsYdwCxXmIOwnsw/TsACxjoAAAChCmADnrEATsACxk8AAAChC2ADnrEAScACxmUewALGacAAiuABAAGDwALGdMAsV7MAPgJJwALGgyIiHsACxofAAFm9AgACJ4Qmg8ACxpfALFezAAEewALGqsAAWb0CAAInhCWDwALGvMAsV7MAAR7AAsbPwABZvQIAAieEJ4PAAsbhwCxXswA+Aj2NwALG8sAsWEaKwALHBMAsV5gWwALHEoLAAscMwCxXmIOwnsw9i8ACxyDALFezFsACxy2CwALHJ8AsV5iDsJ7MScACx0AewALHRMAAWb0CAAInnUKDwALHVcAsV7MAPgM9jMACx2bALFg3isACx3LALFeYg8ACx3rALFezPYvAAseIwCxXsxbAAseVgsACx4/ALFeYg7CezEnAAsejIh7AAsenwACK4AEAAYPAAseywCxXswAAHsACx7vAAFm9AgACJ4Qlg8ACx83ALFezAD4CPY3AAsfgwCxYRorAAsfywCxXmIPAAsf6wCxXsz2LwALICsAsV7MWwALIF4LAAsgRwCxXmIOwnsw/P0nAAsg2HsACyDrAAIrgAQABg8ACyEXALFezAD4GTsACyILAAsiKAACCU2ADwACK4QE1wALIkAAAAQBgA8AAiuEBH8ACyJDAAIsHAQABLgA1AAAAAQBbARfAAsi6hsACyLjALFoEoQqEwALIxsAsWDfAAIrpNQAAAAEAWwEXwALI3IbAAsjawCxaBKELhcACyO7ALFhGwACK8IYAwCxaBD2KwALJCMAsV5gcwALJGIbAAskQwCxZ8MAAQjABAAGCwALJOsAsV5gAwACK+D2LwALJSsAsV7MWwALJV4LAAslRwCxXmIOwnsw9jMACyWbALFg3FsACyXqGwALJcsAsWfChCsAAiuk9jcACyY3ALFhGFsACyaeGwALJn8AsWfChC8AAivI9jsACycHALFnwKz8/SsACyeQBHMACyesuwABB3AYABoLAAsofwCxXmIDAAsomwCxXZITAAso1wCxYN4XAAspAwCxYRiuBwALKV8AsV3EAwABY7wbAAFjvgP/AAsq0wALKusAC3UQAAMAAQdwAAAABA8ACyu3AAt1EAAAABgYGwALLAQAAAcAAQW9gA56xAMACyx8AAAFqYAOesQDAAss4AAABoQpgA56xAMACy08AAAChC2ADnrEAwALLbwAAAMAAQVdgA8AAi2MAwALLhAAAAMAAQi9gA8AA+j8AAGADnrEBPg49IxzAAsu2hMACy63ALFuuSAEAASsAwAD9XozAAsutwCxbrh7AAsu6wACLYAIAAoDAAsvGwCxbdSoAKwFgA8AAi2NOwALL5cACy+sAAJJUYAOesQEcwALL9oTAAsvtwCxbrsAAQVgBAAGAwALL/8AsW3UAwACLbU7AAswWwALMGwAAg7BgA56xARbAAswjhsACzB3ALFwdg7CezEnAAswuhcACzDLALFvAPgFJwALMXSEcwALMa4LAAsxhwCxbkkgBAAErAMAA/V4+AT0cwALMfi7AAEESAgACgsACzKvALFuSasACzLxdA5FlAWEDAWADnrFgA5FOuSMAwABZET8+AUnAAsz0HMACzPguwABCLgEAAYfAAs0PwCxcUgDAAFjrPgZJwALNTyEcwALNY4PAAs1TwCxboEgBAAErAMAA/V4+AT0cwALNeC7AAEESAgACg8ACzafALFugasACzb5dA5FlAWEDAWADnrFgA5FOuSMAwABZEUnAAs3qIRzAAs34gsACze7ALFuSSAEAASsAwAD9Xj4BPRzAAs4NLsAAQRICAAKCwALOPMAsW5JqwALOTV0DkWUBYQMBYAOesWADkU65IwDAAFkRP0nAAs58IR7AAs6BwABZvQIAAieDfxbAAs6VgcACzo/ALFuFg7CezAA+Aj0cwALOsRbAAs6oLqmSwABYPcAAQMMBAAEWwALOyYHAAs7DwCxbhYOwnswAwABXqD0cwALO4xbAAs7aLqmSwABYPaEEAQABkwDAAFepP07AAs8PwALPHQAAwABCMWADnrEBHMACz0cewALPK8AAi2EBAAGHwALPQcAsXFIAwABBWgIAAofAAs9WwCxcUi4AwACLdz0cwALPdBbAAs9rLqmSwABYPaMTAQABFsACz5iBwALPksAsW4WDsJ7MAMAAV2Q9jsACz6fALFwdHMACz7iEwALPr8AsW67AAEFbAgACgMACz8LALFt1LgDAAItsSsACz90BHMACz+QuwABBzgQABIbAAs/7wCxcHRbAAtAIgcAC0ALALFuFg7CezBTAAtAOwCxeHQgAKgDAAFiu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PgFKwALn1AEcwALn2y7AAEI9AwADgcAC5+jALGsygMAC5/TALGskgsAC5/vALGtJAMAAWPYGwABY9ID/wALokcAC6JfAAu5tAADAAEI6AAAAAQPAAuitwALubQAAAAICAsAC6LQAAACjKmADnrEAwALoxgAAAKIjYAOesQAAYAOesQE+A07AAujcwALo7AAAoytgA56xARbAAuj3gcAC6O7ALG17g7CezEnAAukBIR7AAukGwABZvQIAAieD14LAAukUwCxtkgA+CD0cwALpQC7AAEEhAgACgsAC6WLALG2SHMAC6ZBqwALpeV0DkWUBYQMBYAPAAP3rYAORTrFgiAsBAAEng9cAkWkAwABZEE7AAum3wALpwQAAwABBsWADndwBJsAC6bcBHMAC6cwWwALpwy7AAEEFwABYRsAAQZcCAAKBwALp48AsbXsfwALp+56UAgACasAC6ihgA575wACdKBbAAupEgsAC6jTALG2Sg1yezQAAwACLOWADndxOwALqWwAAAJJUYAOesQBJwALqaCEcwALqd4DAAupswCxtbUgBAAErAMAA/V4+Az2MwALqisAsbowcwALqmxbAAuqSLsAAQQXAAFhGwABBIgEAAYPAAuq1wCxuHADAAItUPYzAAurJwCxujBzAAuraFsAC6tEuwABBBcAAWEbAAEFfAgAChMAC6vHALG6MasAC6wBgA530wAClNADAAItVPYzAAusNwCxujBzAAuseFsAC6xUuwABBBcAAWEbAAEEiAQABhMAC6zjALG6MAMAAi1Q+Aj2MwALrV8AsbowcwALraBbAAutfLsAAQQXAAFhGwABBogIAAoPAAut9wCxuHGrAAuuSYAOe+cAAukEAwACLVj2MwALrpsAsbowcwALrtxbAAuuuLsAAQQXAAFhGwABBogIAAoTAAuvMwCxujGrAAuvdYAOe+cAAukEAwACLVj0XwALsAoPAAuv4wCxuHJ0YjMAC7A3ALG6MHMAC7B4WwALsFS7AAEEFwABYRsAAQZcCAAKEwALsKsAsbowfwALsP56wAgACasAC7FhgA575wACzvxbAAux1gsAC7GXALG2Sg1yezQAAwACLOZ3kPYzAAuyGwCxujBzAAuyXFsAC7I4uwABBBcAAWEbAAEEiAQABhMAC7LHALG6MAMAAi1Q9HMAC7MgWwALsvy7AAEEFwABY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wANAx2ADwACL0cABEF0AwABYiz2KwANA3sAspPUpScADQPshFsADQQAuwABBCcAAWEo+AT0cwANBGC7AAEEhAgACgcADQS/ALKSlasADQUNgA5FZjf8AwABZED89iMADQWnALKSOHMADQXEuwABBMQEAAYDAA0GBwCykjgDAAFifPRzAA0GWFsADQY0uqZLAAFg9o3kDAAOCwANBq8AspPWBwANBtsAspKWAwANBxMAspI4AwABYA0rAA0HQAYDAA0HXwCykjgbAAFkIgP/AA0JNwANCU8ADSUIAAMAAQaoAAAABA8ADQl7AA0lCAAAAAgICwANCZQAAAJJUYAOesQDAA0JzAAAAgmdgA8AAWTEAAGADnrEBPhM9iMADQn/ALKY/FsADQo2AwANCh8Aspj+DsJ7MQB7AA0KewABZvQIAAieaA4DAA0KxwCymPwDAA0KewANCtwA9HMADQscWwANCvi6pksAAWD2jTgIAAoDAA0LTwCymP4HAA0LawCymTQDAAFgGTsADQuvAA0L5AACjT2ADnrEBgMADQvvALKY/TsADQwzAA0McAACjK2ADnrEBFsADQySAwANDHsAspj+DsJ7MScADQy4hHsADQzPAAFm9AgACJ4PXg8ADQ0HALKbuAD4CPRzAA0NtLsAAQSECAAKDwANDj8Aspu4cwANDvWrAA0OmXQORZQFhAwFgA8AA/etgA5FOsWCICwEAASeD1wCRaQDAAFkQPYvAA0PYwCym7hzAA0PzFsADQ+ouwABBBcAAWEbAAEFBAgACgMADRADALKY/KQDAAIs4Pz2IwANEGMAspj+DwANEIMAspu5OwANEO8ADREYAAKNRYAOesQErTsADRFfAA0RbAACDWmADwAD6PwEWwANEXS6+vsAAWD49F8ADRH4uvr4pwABYPj2IwANEp8Aspj8cwANEry6hWgEAAYDAA0S/wCymPwDAAFi+ScADRMsewANEz8AAWb0CAAIngKcWwANE44DAA0TdwCymP4OwnswAPgI9iMADRPLALKY/FsADRQCAwANE+sAspj+DsJ7MScADRQwhHsADRRHAAFm9AgACJ4MhFsADRSWAwANFH8Aspj+DsJ7MAD4DPYzAA0U2wCynv4DAA0VDwCymPz2IwANFUsAspj8cwANFWi6hWgEAAYDAA0VqwCymPwDAAFi+ScADRXoewANFfsAAWb0CAAIngKcWwANFkoDAA0WMwCymP4OwnswAPgE9iMADRc3ALKY/FsADRduAwANF1cAspj+DsJ7MPz8/TsADRgTAA0YNAACdGGADnrEBFsADRh+DwANGD8Aspu6dGJ6+ScADRi0cwANGPBbAA0Y3gMADRjHALKY/g7CezEgBAAGGwANGP8AsqRAAwAD9Xj4BPYjAA0ZRwCymP4bAA0ZZwCypED4BScADRogWwANGlYbAA0aMwCypEISNnsU+AT2IwANG+sAspj8cwANHCxbAA0cCLsAAQQXAAFhGwABBRAIAAoDAA0cZwCymP4bAA0cgwCypEADAAIs6PgI9HMADR0IuwABBEgIAAhbAA0d1gMADR2/ALKY/g7CezGrAA0eBXQORZQFhAwFgA56xYAORTsAAkZ0AwABZET2IwANHo8Aspj+GwANHq8AsqRBAHsADR8/AAFm9AgACJ4MhgMADR93ALKY/AMADR8/AA0fjAD0XwANH6i6+voXAA0gIwCyn0sAAWD5JwANIERzAA0gagcADSBXALKZNSAEAAWrAA0gkYAPAAFkxwADD2wDAAP1ePgE9HMADSDguwABBIQIAAoLAA0hPwCym02rAA0hkYAORWYu6AMAAWRBJwANIixzAA0iUgcADSI/ALKZNSAEAAWrAA0ieYAPAAFkxwADDxADAAP1ePgE9HMADSLEuwABBMQEAAYDAA0jBwCymPwDAAFifPz0cwANI3BbAA0jTLqmSwABYPaNQBQAFgsADSO/ALKbTgcADSP7ALKZNg8ADSQTALKbuhMADSRXALKe/FsADSSeAwANJIcAspj+DsJ7MAMAAWAdKwANJMgGAwANJOcAspj8GwABZCYD/wANJkMADSZbAA0pdAADAAEHqAAAAAQPAA0mqwANKXQAAAAEBAcADSbEAAACSVGADnrEAAGADnrEBPgJAHsADScXAAFm9AgACJ5oDFsADSd6AwANJ2MAsq4ODsJ7MAMADScXAA0njAErAA0opARbAA0pVHMADSjAuwABBqgIAAoDAA0o8wCyrg2rAA0pKYAPAAFkxwADDxADAAFkIg7CezAbAAFkKgP/AA0q6wANKwMADTfwAAMAAQekAAAABA8ADStbAA038AAAAAQEBwANK3QAAAJJUYAOesQAAYAOesQE+B07AA0rwwANLAAAAo4NgA56xAYjAA0sCwCysKhbAA0sQgMADSwrALKwqg7CezEAewANLIcAAWb0CAAInmg6BwANLNsAsrEEAwANLIcADS0YATsADS1LAA0tcAACjemADwAD6PwEqScADS2kWwANLeBbAA0tzgMADS23ALKwqg7CezJzznsA+Az2IwANLjsAsrCocwANLli7AAEE0AgACgMADS6fALKwqasADS8BgA8AAi9HAARBdAMAAWIs9isADS9fALKyRKUnAA0vvIRbAA0v0LsAAQQzAAFhMPgE9HMADTBouwABBIQIAAoHAA0w+wCysQWrAA0xVYAORWaKOAMAAWRA/ScADTIchFsADTIwuwABBCsAAWEs+AT0cwANMpy7AAEEhAgACgcADTMnALKxBIxzAA0zuFsADTOQuvsDAAFhASAEAAWrAA0z7YAPAAIrRwAEQRADAAP1easADTR5gA5FZowFqwANNVmADkVmijgFgA5FZAMAAWRA/PYjAA01/wCysKhzAA02HLsAAQTEBAAGAwANNl8AsrCoAwABYnz0cwANNrBbAA02jLqmSwABYPaOCAwADgsADTcTALKyRgcADTc/ALKxBgMADTeDALKwqAMAAWARKwANN7AGAwANN88AsrCoGwABZC4D/wANOP8ADTkXAA07gAADAAEHrAAAAAQPAA05YwANO4AAAAAEBAcADTl8AAACSVGADnrEAAGADnrEBPgQ9iMADTmzALK5TFsADTnqAwANOdMAsrlODsJ7MQB7AA06LwABZvQIAAieWpIDAA06ZwCyuUwDAA06LwANOnwA9HMADTq8WwANOpi6pksAAWD2jTAEAAYDAA07EwCyuUwDAAFgFSsADTtABgMADTtfALK5TBsAAWQyA/8ADT3TAA096wANQWQAAwABCUwAAAAEDwANPh8ADUFkAAAACAgLAA0+OAAAAwABByGADnrEAwANPoQAAAJJUYAOesQAAYAOesQE+A07AA0+0wANPuQAAg7BgA56xARbAA0/HgMADT7vALK8Ig7CezEPAA0/RIiEcwANP3YLAA0/YwCyvL0gBAAGBwANP4MAsrxgAwAD9XgAhHMADT+6CwANP6cAsry9IAQABgMADT/HALK8IAMAA/V4+Aj2IwANQBsAsrwiCwANQFMAsry89isADUCDALK8vFsADUDOAwANQJ8AsrwiDsJ7MSsADUEMBgMADUErALK8IBsAAWQ2A/8ADUSTAA1EqwANVFAAAwABBvwAAAAEDwANRScADVRQAAAAHBwfAA1FXAAAAwABBnGADnrEAwANRcAAAAL+MYAOesQDAA1GLAAAAoQhgA56xAMADUaQAAAChCWADnrEAwANRwAAAAKEKYAOesQDAA1HXAAAAoQtgA56xAMADUfQAAADAAEFvYAOesQAAYAOesQE+CE7AA1IPwANSGAAAwABBV2ADwACLYwEewANSGsAAi2ADAAOGwANSJsAssF0pKQBOwANSSsADUlUAAMAAQc1gA56xARzAA1Jgh8ADUlfALLB2wABBWAEAAYbAA1JpwCywXQDAAIttTsADUoDAA1KFAACDsGADnrEBFsADUpIUwANSh8AssKQIAIOwnsxJwANSnR7AA1KhwABZvQIAAieFthTAA1K2wCyw2wkAAD4BPRXAA1LFwCyw2wkWwANS0RTAA1LMwCyw2wkAg7CezD4CPRzAA1LqLsAAQSECAAIUwANTAcAssNsJAGrAA1MNYAORWcAAZp0AwABZED0cwANTPBbAA1MzLsAAQQXAAFhGwABBXwIAAhTAA1NTwCywpAgAasADU2dgA530wACnnQDAAItVQCIiIhbAA1OKFMADU4XALLDbCQCdeZ7EABzAA1OmFsADU50UwANTmMAssNsJAJ0Ynr5IAQABKwDAAP1eAR7AA1O6wABZvQIAAieduRTAA1PKwCyw2wkAAAEewANT28AAWb0CAAInnacUwANT68AssNsJAADAA1OEwANT8ABOwANT/sADVAQAAJJUYAOesQEcwANUBi7AAEG+CgAKgMADVBvALLAHgcADVDDALLAXgsADVEfALLAlg8ADVFzALLAzhMADVHTALLBBhcADVIfALLBPhsADVKDALLBdh8ADVLTALLB2KxbAA1TfFMADVNTALLCkCACDsJ7MAMAAWKk9HMADVPMWwANU6i6pksAAWD2hFwAAAADAAFelSsADVQQBFMADVQvALLIkCgAGwABZDoD/wANV/8ADVgXAA11aAADAAEHAAAAAAQPAA1YiwANdWgAAAAoKCsADVjAAAACSVGADnrEAwANWQwAAAMAAQZxgA56xAMADVlwAAAC/jGADnrEAwANWdwAAAKEIYAOesQDAA1aQAAAAoQlgA56xAMADVqwAAAChCmADnrEAwANWwwAAAKELYAOesQDAA1bgAAAAwABBb2ADnrEAwANW+wAAAMAAQVdgA8AAi2MAwANXEQAAAL7zYAOesQAAYAOesQE+Bk7AA1cnwANXLAAAg7BgA56xARbAA1c0gMADVy7ALLL9g7CezE7AA1dFwANXSwAAgJZgA8AA/esBFsADV1IUwANXTcAss5oKAJ16ntBJwANXZB7AA1dowAD15gIAAhTAA1dywCyzvgsAJ5ndAD4BSsADV4sBHMADV5IuwABCVAEAARTAA1eswCyzmgoAAMAAWRVJwANXvh7AA1fCwAD15gIAAhTAA1fMwCyzvgsAJ50sAD4BSsADV+QBHMADV+suwABCVQEAARTAA1gEwCyzmgoAAMAAWRZJwANYFh7AA1gawAD15gIAAhTAA1gkwCyzvgsAJ4aBAD4BSsADWD8BHMADWEYuwABCVgEAARTAA1hiwCyzmgoAAMAAWRdJwANYdCIWwANYfRTAA1h4wCyzmgoAnXmexAAcwANYmRbAA1iQFMADWIvALLOaCgCdGJ6+SAEAASsAwAD9Xj4BSsADWKoBHMADWLEuwABBvwcAB4HAA1jRwCyzC4LAA1jewCyzG4PAA1j3wCyzKYTAA1kEwCyzN4XAA1kUwCyzRYbAA1kfwCyzU4fAA1kwwCyzYQDAAFkNP0nAA1lIIiIiIRzAA1lVFMADWUzALLODCQBIAQABKwDAAP1eAR7AA1lowAD15gIAAhTAA1lywCyzvgsAJ4PXAAEewANZicAA9eYCAAIUwANZk8Ass74LACeZtwABHsADWavAAPXmAgACFMADWbXALLO+CwAnmbYAPgE9iMADWcrALLL9HMADWdIuwABBvgoACoHAA1npwCyzC4LAA1oAwCyzG4PAA1oZwCyzKYTAA1owwCyzN4XAA1pKwCyzRYbAA1pfwCyzU4fAA1p6wCyzYRTAA1qQwCyzcQgAFMADWqTALLODCQAWwANavoDAA1q4wCyy/YOwnswAwABYqUnAA1rQHMADWtqAwANa1MAssv1IAQABgcADWt3ALLMLAMAA/V4+Az0cwANbQC7AAEESAgACFMADW2DALLOaCgBqwANbbF0DkWUBYQMBYAOesWADkU6xrADAAFkRPRzAA1uZFsADW5AuqZLAAFg9vzgBAAEUwANbrcAss5oKAADAAFekScADW7ohHsADW7/AAPXmAgACFMADW8nALLO+CwAnhsYAPgE9iMADXATALLL9FMADXAzALLOaCgA/PgE9iMADXC3ALLL9HMADXDUuvzcKAAqBwANcTMAsswuCwANcY8AssxuDwANcfMAssymEwANck8AsszeFwANcrcAss0WGwANcwsAss1OHwANc3cAss2EUwANc88Ass3EIABbAA10NgMADXQfALLL9g7CezCoAwABYkD0cwANdORbAA10wLqmSwABYPaEXAAAAAMAAV6VKwANdSgGAwANdUcAssv0GwABZD4D/wANd7MADXfLAA19TAADAAEHZAAAAAQPAA14KwANfUwAAAAEBAcADXhEAAACSVGADnrEAAGADnrEBPgZOwANeJMADXikAAIOwYAOesQEWwANeMYDAA14rwCy31IOwnsw9HMADXjsuwABBIQIAAoHAA15SwCy362rAA15eYAORWcAAg8QAwABZED2JwANeecAst+scwANeiRbAA16ALsAAQQXAAFhGwABBogIAAoDAA16ewCy31GrAA16vYAOe+cAAukEAwACLVj0cwANeyBbAA16/LqmSwABYPaNMAQABgcADXt3ALLfrAMAAWAVDwANe6RzAA17wLsAAQZoCAAInhsaBwANfA8Ast+sAwABYjD4CPYjAA18SwCy31IHAA18awCy36z2JwANfJsAst+sWwANfM4DAA18twCy31IOwnsxKwANfQwGAwANfSsAst9QGwABZEID/wANfWMADX13AA2A9AADAAEEhAAAAAQPAA19zwANgPQAAAAICAsADX3oAAACSVGADnrEAwANfiQAAACJgA5FOAABcAT4CPYjAA1/YwCy5Kh7AA1/gwABZwAEAAYDAA1/3wCy5KgA9HMADYAwWwANgAy6pksAAWD2iJgMAA4HAA2AjwCy5OIDAA2AswCy5KoDAA2AzwCy5KgDAAFgrBsAAWRGA/8ADYELAA2BHwANhdQAAwABBEgAAAAEDwANgZsADYXUAAAACAgLAA2B0AAAAklRgA56xAMADYKEAAACIsV0DkWUBXgMAAQEBYAOesQABVwPAAFg6AWADnrFgA5FOAABcAT4CPYjAA2DxwCy5zR7AA2D5wABZwAEAAYDAA2EQwCy5zQA9HMADYSUWwANhHC6pksAAWD2iJgMAAxzAA2FOgcADYUXALLnbiAsBAAGAwANhXMAsuc0AkWmAwANhZMAsuc2AwANha8Asuc0AwABYKwbAAFkSgP/AA2F6wANhgMADYiIAAMAAQRMAAAABA8ADYZTAA2IiAAAAAQEBwANhmwAAAJJUYAOesQAAYAOesQE+AkPAA2GoJcADYbWAwANhr8AsuqNgA6FXPgI9HMADYdUWwANhzC6pksAAWD3AAEDbAQABJsADYeYBgMADYebALLqjYAOhVwDAAFgsPYjAA2H0wCy6oxbAA2ICgMADYfzALLqjg7CezErAA2ISAYDAA2IZwCy6owbAAFkTgP/AA2InwANiLcADYqIAAMAAQQ0AAAABA8ADYjzAA2KiAAAAAQEBwANiQwAAAJJUYAOesQAAYAOesQE+AkPAA2JQJcADYl2AwANiV8Asu1pgA6FXPgE9iMADYnTALLtaFsADYoKAwANifMAsu1qDsJ7MSsADYpIBgMADYpnALLtaBsAAWRSA/8ADYqfAA2KtwANkOgAAwABBJAAAAAEDwANizMADZDoAAAABAQHAA2LTAAAAklRgA56xAABgA56xAT4FTsADYubAA2LrAACDsGADnrEBFsADYvOAwANi7cAsu+CDsJ7MPRzAA2L9LsAAQRICAAKBwANjJsAsu/cjHsADYzTAAFm9AgACJ5akgcADY0LALLv3AGrAA2NcXQORZQFhAwFgA56xYAORTsAAkZ1qwANjiF0DkWUBYQMBYAOesWADkU6yUAFdA5FlAWEDAWADnrFgA5FOAMAAWRFJwANjqh7AA2OuwABZvQIAAieZtoHAA2O8wCy79wA+AT2JwANjy8Asu/ccwANj0i6+xgEAAYDAA2PkwCy74ADAAFj9Pz0cwANj/xbAA2P2LqmSwABYPb7TAQABgcADZCDALLv3AMAAV8hKwANkKwGBwANkMsAsu/cGwABZFYD/wANkP8ADZEXAA2dlAADAAEJUAAAAAQPAA2RewANnZQAAAAEBAcADZGUAAACSVGADnrEAAGADnrEBPgZAHsADZHnAAFm9AgACJ5ndgMADZIvALL01AMADZHnAA2SRAD0cwANkmC7AAEEhAgACgMADZK/ALL01asADZLxgA5FZkysAwABZED0cwANk3xbAA2TWLqmSwABYPb84AQABgMADZPPALL01AMAAV6ROwANlBcADZQoAAIOwYAOesQEWwANlEoDAA2UMwCy9NYOwnsxJwANl6BbAA2XxgcADZezALL27nPOewD4DPYjAA2YgwCy9NYHAA2YowCy9uz2JwANmNMAsvbsWwANmQYDAA2Y7wCy9NYOwnsxJwANm1SIewANm2cAAWb0CAAInmbaBwANm58AsvbsAACEcwANm/hbAA2b1gcADZvDALL27nRievkgBAAErAMAA/V4+AT2IwANnLMAsvTUWwANnOYHAA2c0wCy9u50Ynr4/P0rAA2dVAYDAA2dcwCy9NQbAAFkWgP/AA2dqwANncMADaqoAAMAAQlUAAAABA8ADZ4jAA2qqAAAAAQEBwANnjwAAAJJUYAOesQAAYAOesQE+BkAewANno8AAWb0CAAInnSyAwANntMAsvsMAwANno8ADZ7oAPRzAA2fBLsAAQSECAAKAwANn2MAsvsNqwANn5WADkVmv4wDAAFkQPRzAA2gHFsADZ/4uqZLAAFg9vzgBAAGAwANoG8AsvsMAwABXpE7AA2gtwANoMgAAg7BgA56xARbAA2g6gMADaDTALL7Dg7CezEnAA2kPFsADaRiBwANpE8Asv0mc857APgM9iMADaUbALL7DgcADaU7ALL9JPYnAA2lawCy/SRbAA2lngMADaWHALL7Dg7CezEnAA2lzIh7AA2l3wABZvQIAAieZtoHAA2mFwCy/SQAAIRzAA2mcFsADaZOBwANpjsAsv0mdGJ6+SAEAASsAwAD9Xj4BPYjAA2pxwCy+wxbAA2p+gcADannALL9JnRievj8/SsADapoBgMADaqHALL7DBsAAWReA/8ADaq/AA2q1wANsUAAAwABCVgAAAAEDwANq0MADbFAAAAABAQHAA2rXAAAAklRgA56xAABgA56xAT4EQB7AA2rrwABZvQIAAieGgYDAA2r/wCzAUQDAA2rrwANrBQA9HMADawwuwABBIQIAAoDAA2sjwCzAUWrAA2swYAORWcAAj8wAwABZED0cwANrVRbAA2tMLqmSwABYPb84AQABgMADa2nALMBRAMAAV6RKwANsQAGAwANsR8AswFEGwABZGID/wANsvsADbMTAA21RAACWKQAAAAEDwANsyMADbVEAAAACAgLAA2zUAAAAn1VgA53cAMADbOYAAACdD2ADnrEAAGADnrEBPgM9HMADbQGAwANs9sAswRGdewEAAYHAA20JwCzBHwCeeT0XwANtI4DAA20YwCzBEZ0YgcADbS7ALMEfneRKwANtPAGAwANtQ8AswREGwABZGYD/wANtncADbaPAA2+gAAChWwAAAAEDwANtucADb6AAAAABAQHAA23AAAAAklRgA56xAABgA56xAT4EScADbwshHMADbx4WwANvFYDAA28PwCzBqpz9ns9IAQABKwDAAP1ePgFKwANvLwEWwANvPIDAA282wCzBqpz9ns8/TsADb1bAA29dAACao2ADnrEBHsADb2OetwEAARzAA29tlIHEAAAAAMAA/CgAPRfAA299gcADb3bALMIDg7CAwANvhMAswaqe1ErAA2+PAYHAA2+WwCzCAwbAAFkagP/AA3AawANwIMADchkAAMAAQlcAAAABA8ADcCvAA3IZAAAAAQEBwANwMgAAAJJUYAOesQAAYAOesQE+BU7AA3BFwANwTgAAn0ZgA56xARbAA3BWgMADcFDALMKGnO6ezk7AA3BzwANwewAAn5xgA56xAStOwANwjMADcJgAAMAAQlhgA8AA+j8BKkPAA3ClIRzAA3C1gcADcKzALMKdSAEAASsAwAD9Xj4DTsADcM3AA3DUAACCXmADwAD96wEWwANw34HAA3DWwCzCnYJenstJwANw7RzAA3D4hMADcPHALMMLgdYBAAEnv6wAwAD9/T4BScADcRUhg8ADcRrALMLUPgI9isADcTPALMLBgcADcT3ALMKdPYvAA3FRwCzC1Ck/ScADcXwcwANxh4TAA3GAwCzDC4HWAQABJ7+rAMAA/f0+Aj2KwANxpMAswsGBwANxrsAswp09i8ADccDALMLUKj89icADcePALMKdFsADcfeBwANx7sAswp2DsJ7MSsADcgcBgsADcg7ALMLBBsAAWRuA/8ADctzAA3LgwANzowAAwABCWQAAAAEDwANy9sADc6MAAAABAQHAA3L9AAAAn5xgA56xAABgA8AA/AUBPgFKwANzDAEjHMADcyIWwANzG4DAA3MTwCzEGoJensuB1gEAASe/rADAAP39HMADcz4uwABCWgEAAYDAA3NiwCzEGgDAAFkdHMADc3UuwABCWwEAAYDAA3OXwCzEGgDAAFkcAWADwAD8BQbAAFkcgP/AA3QgwAN0JMADd+EAAMAAQlsAAAABA8ADdEXAA3fhAAAAAQEBwAN0TAAAAMAAQlxgA56xAABgA8AA/AUBPgpOwAN0Z8ADdG8AAJx4YAPA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ilfALNLhhMADimPALNNGhcADimvALNNVgMADinPALNKbAMAAWSFKwAOKhQEpP07AA4qswAOKtAAAnW1gA530ARbAA4q8gMADirbALNKbnW2eyEnAA4rNIiIcwAOK3IPAA4rRwCzS4UgBAAErAMAA/V4AHMADivqEwAOK88As00ZIAQABKwDAAP1eACIiIhzAA4sah8ADixLALNazSAEAAWrAA4slYAOd9MAAqnUAwAD9XgEcwAOLRYfAA4s9wCzWs0gBAAFqwAOLUGADnfTAAKb1AMAA/V4BHMADi3CHwAOLaMAs1rNIAQABasADi3tgA530wACq5QDAAP1eARzAA4ubh8ADi5PALNazSAEAAWrAA4umYAOd9MAAowQAwAD9Xj4APz89HMADjSgWwAONHy6pksAAWD3AAEDjAAAAAMAAWDNKwAONSAEqBsAAWSGA/8ADjV3AA41iwAOPOgAAwABCawAAAAEDwAONfsADjzoAAAAGBgbAA42MAAAAgpRgA56xAMADjZ0AAADAAEDfYAPAAPwFAMADjboAAADAAEDiYAOesQDAA43SAAAAgyRgA56xAMADjeYAAACg/2ADnrEAwAON+gAAAMAAQmxgA56xAABcAT4DTsADjmLAA45oAACSVGADnrEBgMADjmrALNf6RMADjnU+Aj01AAAAAQBgA56xAYbAA46AwCzYXBfAA46Gh8ADjobALNh/g1wcwAOOjRbAA46Gh8ADjobALNh/g1yezWQBAAGBwAOOkMAs2AgAwAD9Kp7VPY7AA46nwCzYXBbAA461hsADjq/ALNhcg7CezCEWwAOOz4bAA47JwCzYXJ13nr89HMADjuUWwAOO3C6pksAAWD3AAEDhBAAEgsADjwXALNgag8ADjxHALNgqhMADjxnALNg4hcADjyHALNhGAMAAWDIGwABZIoD/wAORZsADkWvAA5MrAADAAEJoAAAAAQPAA5F1wAOTKwAAAAICAsADkX0AAACceGADwAD96wDAA5GKAAAAwABCbWADwAD8BQAAYAPAAPo/AT4HTsADkaDAA5GnAABhYAPAAPwFARbAA5GxgMADkanALNlqYcAA/e9OwAORwcADkccAACdgA8AA/AUBHMADkdSBwAORycAs2XpkAQABlADAAP0qScADkd0cwAOR54PAA5HhwCzZvYFtAQABgsADkerALNmXAMAA/TU+AUrAA5H6ASo/TsADkhbAA5IZAADAAEJkYAPAAPwFARzAA5IjgMADkhvALNlqhAsBAAGDwAOSLsAs2b0AwAD9+UnAA5I6IhzAA5JBhMADkj7ALNoYSAEAATcoAMAA/SgBHMADkk+EwAOSTMAs2hhIAQABNzoAwAD9KD4BSsADkmABKT9DwAOSdx7AA5J+wABZxQEAAYTAA5KLwCzaGAA+Az2LwAOSmMAs2b0cwAOSpoPAA5KgwCzZvWQBAAGUAMAA/SpJwAOSsRzAA5K7g8ADkrXALNm9gW0BAAGCwAOSvsAs2ZcAwAD9NT4BSsADktABKj89jMADkuzALNoYHMADkvmAwAOS8cAs2WqECwEAAYPAA5MEwCzZvQDAAP35SsADkxYBHMADkyCEwAOTHcAs2hhIAQABN1sAwAD9KAAAKqZNACqmjAAqpwIAKqd2ACqn6gAqqDkAKqiLACqo3AAqqS4AKqy1ACqxewAqsjIAKrcbACq4VAAquS0AKrs9ACrDaAAqxKEAKsayACrIpAAqz3EAKtCcACrUdgAq1eEAKtdGACrZGwAq2iQAKtstACrcdAAq3gQAKt+EACrgnwAq4p4AKuPFACrmcAAq5zgAKusZACrszwAq7cwAKvB9ACrxfgAq8gEAKvMpACr0UwAq9NYAKvrlACr75QArD4EAKxOaACsXswArGKsAKxljACsacQArGt0AKx/LACsiLwArJDkAKyXdACsnagArLiEAKy92ACsw+AArM10AKzQrACs5CwArOcYAKzt6ACtA5gArQkkAK0PIACtFQwArRfQAK0ZuACtHCwArVHsAK1unACtgbAArYfUAK2TSACtmDwArZs0AK2qyACtyMwArddMAK3Z1ACt4YwArecgAK3suACt8bQArfdsAK378ACt/wAArgQ4AK4KHACuEBAArhGkAK4ZRACuHEwArh40AK5kkACukwgArq7YAK68oACuwVAArsasAK7QFACu1BgArt3EAK7i7ACu9MwArxnwAK8gUACvJ0QArzM0AK84EACvYgQAr2iYAK9wwACvdKwAr3xUAK9/TACvjEwAr48cAK+VOACvxFQAr8ikAK/axACv8RwAsAYYALAmAACwNFgAsDnEALA8wACwPnAAsEKkALBJQACwUQAAsGoEALCLRACwkpwAsKDYALCnzACwsWgAsLXsALC+tACww2wAsMfQALDXpACw24wAsN60ALDmIACw8YgAsP+wALEEfACxB7wAsQqQALEU6ACxGDAAsRugALEdUACxL6wAsTY0ALE68ACxP8wAsUeUALFP2ACxUqgAsVzgALFtJACxl8AAsZ6gALGimACxq+AAsbUEALHDpACx0TAAsdfMALHkhACx63wAsfmoALIBaACyDMgAshcgALIc8ACyI1wAsirMALIyfACyNsQAslwkALJjFACygGQAsoMwALKRiACymEwAsq1cALKv+ACyuJwAsrtwALK/bACyy0QAst6gALLj+ACy5oQAsuncALLsuACy7tAAsvQkALL6XACzAJQAswOcALMGAACzCWgAsw+4ALMSaACzIbwAsymMALM+HACzSbwAs184ALNk+ACzbSgAAANwAAAGA/wAs3sUAKqUfACzewwAAAAEALN7FAAAAAAACBMAAWSXAAEJugQAAAAKA/gAAjCEAAQEBh9GBKgAAkcIAAQEBghMAAAABAsAAWSaBAIFQgVaDXgOs5gAAAWABwAD9UQAAAwTAAFkogQCBu4HGCcAAQm8AYAPAAPwFAATAAFkpgQCCHoInCZi9AGADwAD8BQAEwABZKoEAgjqCQQkiAGADkU4AAgXAAFkugQCCRoJGgoEAAAADglGCgQAAAAMDA4JXAAAEwABCb2ADwAD8BQCCaQAABJi9YAPAAPwFAIJ5AAAEImADkU4AAGADwABZJgE/BAgBwABZKIAAwCzfhQgBwABZKYEAwCzflQgBwABZKoIAwCzfowkBgkbAAP1nAAAAAAXAAFkvgQCChoKGgw0AwABCcAADgpyDDQAAAAMDA4KjAAAAgpRgA56xAIKwAAAAgoxgA56xAIK9AAAAImADkU4AAGADwABZJgE/AQoAgs7AAFkuAwADFoLZgILTwCzgBodUnrocgvQWgumBguXALOASh1SeumQBAAEWgvqBgvbALOASnXSeuQDAAP0qgoMFwCzgHgABBsAAWSyBAIMSgxmDXAAAIwAAAAEDgyGDXAAAAAAAAABgA8AA/esBSoMnASSDXAYng38WgysuwABCb8AAWSgng1UWg0MWgzsuIsAAWSoikVEngK8Wg1cWg08uIsAAWSqIopFSAAAs4H0ALODgAAAAAQAAAYEAACzg7wAs3wwALODtAAAAAQAs4O8AAAAAAAIEwABZ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08AAwUQEwABZ2oEIg8KDwgbAAEKuAGADwABZ0wFqAGADwABZ08ABEtMEwABZ24EIg8iDyAbAAEKvAGADwABZ0wFqAGADwABZ08AAw6IEwABZ3IEIg9aD1gaGFQBgA8AAWdMBagBgA8AAWdPAAMEPBMAAWd2BCIPfg98GwABCsABgA8AAWdMBagBgA8AAWdPAAOJfBMAAWd6BCIPug+4GwABCsQBgA8AAWdMBagBgA8AAWdPAARLsBMAAWd+BCIQBhAEGvxMAYAPAAFnTAWoAYAPAAFnTwAEF6ATAAFnggQiEEIQQBsAAQrIAYAPAAFnTAWoAYAPAAFnTwAETBgTAAFnhgQiEHIQcBr8EAGADwABZ0wFqAGADwABZ08ABBg0EwABZ4oEIhC+ELwbAAEKzAGADwABZ0wFqAGADwABZ08ABEyAEwABZ44EIhE6ETgbAAEK0AGADwABZ0wFqAGADwABZ08ABEzoEwABZ5IEIhHGEcQbAAEK1AGADwABZ0wFqAGADwABZ08ABE1QEwABZ5YEIhIyEjAbAAEK2AGADwABZ0wFqAGADwABZ08ABE3AEwABZ5oEIhMKEwgbAAEK3AGADwABZ0wFqAGADwABZ08AA4ncEwABZ54EIhNSE1AbAAEK4AGADwABZ0wFqAGADwABZ08ABBiUEwABZ6IEIhOCE4AbAAEK5AGADwABZ0wFqAGADwABZ08ABE4wEwABZ6YEIhPiE+AaFawBgA8AAWdMBagBgA8AAWdPAAMK6BMAAWeqBCIUGhQYGwABCugBgA8AAWdMBagBgA8AAWdPAAROoBMAAWeuBCIUXhRcGhUcAYAPAAFnTAWoAYAPAAFnTwADCewTAAFnsgQiFK4UrBqKuAGADwABZ0wFqAGADwABZ08AA4rIEwABZ7YEIhT+FPwbAAEK7AGADwABZ0wFqAGADwABZ08AAxDAEwABZ7oEIhU+FTwbAAEK8AGADwABZ0wFqAGADwABZ08ABE8QEwABZ74EIhWmFaQbAAEK9AGADwABZ0wFqAGADwABZ08ABE+AEwABZ8IEIhYKFggasoQBgA8AAWdMBagBgA8AAWdPAAMNQBMAAWfGBCIWQhZAGvwsAYAPAAFnTAWoAYAPAAFnTwAEGtQTAAFnygQiFooWiBqEpAGADwABZ0wFqAGADwABZ08ABE/wEwABZ84EIhbKFsgbA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AAAAAABgA4MZAUrAAERUARbAAERqFsAARGAWwABEVC6AicAAWomHZ5tTmsycrwbAAFqMgQnAAER6wABEkMAARMQBAJrXAWrAAER7YAPAAP1RAgAAAQPAAESewABExAAAAAAAAABgA4MZAUrAAEShARbAAES3FsAARK0WwABEoS6AicAAWomHZ5tTmtecmgbAAFqNgQnAAETJwABE38AARRMBAJrYAWrAAETKYAPAAP1RAgAAAQPAAETtwABFEwAAAAAAAABgA4MZAUrAAETwARbAAEUGFsAARPwWwABE8C6AicAAWomHZ5tTmticnAbAAFqOgQnAAEUYwABFLsAARVoBAJrNAWrAAEUZYAPAAP1RAgAAAQPAAEU4wABFWgAAAAAAAABgA4MZAUrAAEU7ARbAAEVRFsAARUcWwABFOy6AicAAWomHZ5tTms2crQbAAFqQgQnAAEVfwABFcMAARd8AAL4dAWrAAEVgYAPAAP1RAgAAAQPAAEV9wABF3wAAAAICAsAARY0AAACtrGADwABT/wDAAEWiAAAAhoVgA4i4AABcAT4BPRzAAEW7FsAARa8ugInAAFqJvh0CAAKAwABFycAtWhyBwABF1cAtWiwAwABUIgbAAFqRgQnAAEXkwABF9cAARmQAAL4cAWrAAEXlYAPAAP1RAgAAAQPAAEYCwABGZAAAAAICAsAARhIAAACtrGADwABT/wDAAEYnAAAAhoRgA4i4AABcAT4BPRzAAEZAFsAARjQugInAAFqJvhwCAAKAwABGTsAtWqOBwABGWsAtWrMAwABUIQbAAFqSgQnAAEZpwABGfMAARx4AAJsRAWrAAEZqYAPAAP1RAgAAAQPAAEaOwABHHgAAAAMCAsAARpUAAACEkmADgxkAwABGogAAAIC9YAOIgwABwABGrgAAAJsOYAPAAPo/AWrAAEa2YAPAAPo/AGADg14BPgFKwABGxAEcwABG6hbAAEbXFsAARssugInAAFqJh2umQZsRAwACgMAARv3ALVsqgcAARwXALVs4AZsOgsAARxPALVtHm7IGwABak4EJwABHI8AARz3AAEe5AACFcgFqwABHJGADwAD9UQIAAAEDwABHUMAAR7kAAAACAgLAAEdfAAAAgpBgA4jzAMAAR2sAAACE7GADgxkAAGADiPMBPgFKwABHfQEcwABHkBbAAEeELoCJ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BsAAXTGBE7uRu5a79AACs+UAAAABA7upu/QAAAEAAIQEYAPAAP1RAVsDAgK7wAAAAICrXQPAAPzaAmADwABg0l8DAAAAu8oAAACBpmEDAV8DAABcAAG74gAAAJexYAPAAPo/AWq77WADwAD6PwBcAAbAAF0ygRO8KLwtvEsAAsAARBEAAAABA7w9vEsAAAABAQG8RQAAAICWYAPAAPq3AABcAAbAAF0zgRO9Gr0fvTsAAsAARBIAAAABA70wvTsAAAABAQG9NQAAAICWYAPAAPwFAABcAAbAAF00gRO9c714vZcAAsAARBMAAAABA72DvZcAAAABAQG9kQAAAICWYAO8twAAXAAGwABdNYETveK9574MAALAAEQUAAAAAQO9+L4MAAAAAQEBvgYAAACAlmADvLcAAFwABsAAXTaBE77lvuq/LgACs+IAAAABA772vy4AAAACAQG/DgAAACldA8AA/GcBYAO8twABvxwAAACXsWADwAD6PwFqvydgA8AA+j8AXAAGwABdN4ETwABAU8AAQFjAAECzAAKz5gAAAAEDwABAacAAQLMAAAEAAIQEYAPAAP1RAVsDAgLAAEB/AAAAgKtdA8AA/NoCYAO8t18DAAAAwABAiQAAAIGmYQMBXwMAAFwAAcAAQKEAAACXsWADwAD6PwFqwABArGADwAD6PwBcAAbAAF04gRPAAEE+wABBQ8AAQWoAArDEAAAAAQPAAEFVwABBagAAAAEBAcAAQWQAAACAlmADvecAAFwABsAAXTmBE8AAQgjAAEINwABCNwACsMcAAAABA8AAQiXAAEI3AAAAAQEBwABCMQAAAICWYAO7NwAAXAAGwABdOoETwABCwMAAQsXAAELfAAKwxgAAAAEDwABC0MAAQt8AAAABAQHAAELZAAAAgJZgA8AAk9sAAFwABsAAXTuBE8AAQ3vAAEOAwABDoAACr3IAAAABA8AAQ5HAAEOgAAAAAQEBwABDmgAAAICWYAPAAJPbAABcAAbAAF08gRPAAEQPwABEFMAARD0AArhkAAAAAQPAAEQowABEPQAAAAEBAcAARDYAAADAAEQVYAPAAF2jAABcAAbAAF09gRPAAESswABEscAARNwAArfEAAAAAQPAAETGwABE3AAAAAEBAcAARNUAAADAAEQVYAPAAF24AABcAAbAAF0+gRPAAEWAwABFhcAARbAAAsAARBYAAAABA8AARZTAAEWwAAAAAgICwABFnwAAAIJmYAODXgDAAEWsAAAAgaZhAwBcAABcAAAALmmxAC5p2AAuafsALmosAC5qXQAuaqgALmrzAC5rXAAua40ALmu+AC5r7wAubCAALmxRAC5soAAubRAALm08AC5tbQAubZwALm3LAC5t+gAubisALm56AC5u6gAubxkALm9KAC5vewAub6wALm/bAC5wKAAucJYALnDHAC5w+AAucUcALnG3AC5x6AAucjcALnKAAC5y0QAucxoALnNpAC5zmgAuc8sALnP8AC50bAAudJ0ALnTOAC51GwAudYkALnW6AC516wAudhwALnZpAC522wAudwwALnc9AC53bgAud70ALngrAC54XAAueI8ALnjgAC55UAAueYMALnm2AC555wAuehgALnplAC565QAueyAALntbAC57mAAue9UALnwUAC58UwAufJ4AAABKAsAAXUGBE8AARdjAAEXnwACCNAfAAEQXAAABYAHAAP1RAAAAAQXAAF2QAAAAAAQAAAMAAAAAAAAAAABgA8AAXUEBPwEJAQDAAP1nAAAAAEwGwABdQ4ETwABGq8AARrDAAEbBAAKClAAAAAEDwABGtcAARsEAAAABAQHAAEa9AAAAg+dgA8AA/esAAFwABsAAXUSBE8AAR3nAAEd+wABHjQACgowAAAABA8AAR4HAAEeNAAAAAQEBwABHiQAAAIPnYAPAAP3rAABcAAbAAF1FgRPAAEgTwABIGMAASFAAArfHAAAAAQPAAEgvwABIUAAAAAEBAcAASEAAAAC3wmADwABfbAAAXAAGwABdRoETwABI2MAASN3AAEkMAAK3xgAAAAEDwABI8cAASQwAAAABAQHAAEj/AAAAt8FgA8AAXZEAAFwABsAAXUeBE8AASX7AAEmDwABJrAACt8sAAAABA8AASZfAAEmsAAAAAQEBwABJpQAAALhmYAPAAF2aAABcAAbAAF1IgRPAAEoowABKLcAASlkAAsAARBgAAAABA8AASkDAAEpZAAAAAQEBwABKTQAAAMAARBlgA8AAXawAAFwABsAAXUmBE8AASs3AAErSwABK/QACt8UAAAABA8AASufAAEr9AAAAAQEBwABK9gAAALhmYAPAAF2xAABcAAbAAF1KgRPAAEuAwABLhcAAS7IAArhnAAAA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AIqVwACK8AAAAAICAsAAip8AAACEO2ADwABc8gDAAIq5AAAAgJZgA8AAjnoAAFwBPgE9HMAAisuAwACKxsAunBWwyAEAARbAAIragcAAitTALpwlwABES8AAjnwAwABc/QAALpntAC6aawAumusALptrAC6b6QAunGkAAAAFAsAAXayBE8AAiz/AAItOwACLnAfAAERMAAABYAHAAP1RAAAAAQXAAF2wAAAAAAQAAAMAAAAAAAAAAABgA8AAXawBPwEJAQDAAP1nAAAAAAEGwABdroETwACLXsAAi2TAAIuaAALAAERNAAAAAQPAAItzwACLmgAAAAICAsAAi4EAAACznWADvNMAwACLlAAAACdgA8AA/AUAAGADvQwAAAAunNYALp0lAAAAAQLAAF2xgRPAAIvowACL98AAjJ8HwABETgAAAWABwAD9UQAAAAEFwABdtwAAAAAEAAADAAAAAAAAAAAAYAPAAF2xAT8BCQEAwAD9ZwAAAAADBsAAXbOBE8AAjAnAAIwXwACMOwACsLwAAAABA8AAjCjAAIw7AAAAAQEBwACMNAAAAINEYAPAAF1BAABgA73nAAbAAF20gRPAAIw/wACMSsAAjHQAArDAAAAAAQPAAIxhwACMdAAAAAEBAcAAjG0AAACDRGADwABdQQAAYAO7NwAGwABdtYETwACMeMAAjIDAAIydAAKwvwAAAAEDwACMisAAjJ0AAAABAQHAAIyWAAAAg0RgA8AAXUEAAGADwACT2wAAAC6dggAuncIALp4CAC6eRAAAAAMCwABduIETwACM6cAAjPjAAI26B8AARE8AAAFgAcAA/VEAAAABBcAAXb4AAAAABAAAAwAAAAAAAAAAAGADwABduAE/AQkBAMAA/WcAAAAAAwbAAF26gRPAAI0KwACND8AAjUUAArDEAAAAAQPAAI0hwACNRQAAAAICAsAAjSsAAACEO2ADwABc8gDAAI0/AAAAgJZgA73nAABcAAbAAF27gRPAAI1JwACNTsAAjYcAArDHAAAAAQPAAI1mwACNhwAAAAICAsAAjXAAAACEO2ADwABc8gDAAI2BAAAAgJZgA7s3AABcAAbAAF28gRPAAI2LwACNkMAAjbgAArDGAAAAAQPAAI2bwACNuAAAAAICAsAAjaUAAACEO2ADwABc8gDAAI2zAAAAg+5gA8AAk9sAAFwA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gMAARB3ALteogL28uQDAAF/UPRzAAEQuLsAARGrAAFzsAQABFsAARD6AwABEOMAu16iArLy8AMAAXew9HMAAREguwABEasAAXOwBAAEWwABEWIDAAERSwC7XqLOkvLoAwABd7D0cwABEci7AAESEwABc7AEAARbAAESDgMAARH3ALteohK+8uwDAAF3hBsAAXhCBFMAARJfAAESowABFDgAAuGQBasAARJhgA8AA/VECAAABA8AARLzAAEUOAAAAAQEBwABEygAAAMAARBVgA8AAXaMAAFwBPgJAIRzAAETmgMAARN/ALtiPSAEAASsAwAD9XsAARN/AAETtAD0XwABE9C7AAERawABc7IDAAEUEwC7Yj8AAXc0GwABeEYEUwABFE8AARSTAAEWxAAC3xAFqwABFFGADwAD9UQIAAAEDwABFOcAARbEAAAABAQHAAEVIAAAAwABEFWADwABduAAAXAE+A0AhHMAARWSAwABFXcAu2RtIAQABKwDAAP1ewABFXcAARWsAQBzAAEWIFsAARXkuwABEW8AAXOzAAF3OSAEAASsAwAD9XsAARXnAAEWPAD0XwABFli7AAERbwABc7IDAAEWnwC7ZG8AAXc4GwABeEoEUwABFtsAARcfAAEbCAACwxwFqwABFt2ADwAD9UQIAAAEDwABF38AARsIAAAABAQHAAEXrAAAAgJZgA7s3AABcAT4CQCEcwABGFxbAAEYILsAARFvAAFzswABdzkgBAAErAMAA/V7AAEYIwABGHgEkAAInwABEzifAAETPPRzAAEaZFsAARoouwABEW8AAXOzAAF3OsMcCAAIugMAARrjALtnSAMAAXbsGwABeE4EUwABGx8AARtjAAEevAACwxAFqwABGyGADwAD9UQIAAAEDwABG6sAAR68AAAABAQHAAEb5AAAAgJZgA73nAABcAT4CQCEcwABHHBbAAEcNLsAARFvAAFzswABdzkgBAAErAMAA/V7AAEcNwABHIwEnwABE0D0cwABHjBbAAEd9LsAARFvAAFzswABdzrDEAgACLoDAAEelwC7agADAAF26BsAAXhSBFMAAR7TAAEfFwABIgQAAsMYBasAAR7VgA8AA/VECAAABA8AAR9DAAEiBAAAAAQEBwABH2QAAAICWYAPAAJPbAABcAT4CQCEcwABH/BbAAEftLsAARFvAAFzswABdzkgBAAErAMAA/V7AAEftwABIAwEnwABE0T0cwABIZRbAAEhWLsAARFvAAFzswABdzrDGAgACLoDAAEh3wC7bJgDAAF28BsAAXe+BFMAASNTAAEjZwABI6wACwABEX8AAXOwAAAABA8AASN/AAEjrAAAAAQEBwABI5wAAAIPnYAPAAP3rAABcAAbAAF3wgRTAAEk8wABJQcAASVEAAsAARGDAAFzsAAAAAQPAAElFwABJUQAAAAEBAcAASU0AAACD52ADwAD96wAAXAAGwABd8YEUwABJnMAASaHAAEm9AALAAETKwABc7AAAAAEDwABJssAASb0AAAABAQHAAEm3AAAAgJZgA8AA/mwAAFwABsAAXfKBFMAASgvAAEoQwABKMgACwABEycAAXOwAAAABA8AASiTAAEoyAAAAAQEBwABKLAAAAICWYAPAAP3rAABcAAbAAF3zgRTAAEqUwABKmcAASrUAAsAARGvAAFzsAAAAAQPAAEqqwABKtQAAAAEBAcAASq8AAACAlmADwAD8BQAAXAAGwABd9IEUwABLAsAASwfAAEsoAALAAER4wABc7AAAAAEDwABLGcAASygAAAABAQHAAEsiAAAAgJZbAABcAAAALqNrAC6lhQAupmYALqdcAC6o5QAuqoIALqtKAC6r8AAurN0ALq2BAC6uZgAuruEALq9NAC6wjQAusQYALrGDAC6x/AAusnkALrLyAC6zTAAus8IALrRYAC60twAutU0ALrXjAC62uQAutzUALreWAC64HgAuuL4ALrmtAC67AAAuvNEALsEiAC7DGQAuw5UALsVRAC7FtAAuxhkALsZ+AC7G4wAux0gALsetAC7KEwAuyo4ALssLAC7MGAAuzKAALsz7AC7NaQAu1WUALtXnAC7WaQAu1voALtd4AC7YWQAu2OUALtmcAC7aSgAu2vAALtuYAC7b2wAu3B4ALtxhAC7cpAAu3OcALt0lAAAAQgLAAF4ZgRWBX4FuwABmrQfAAETSAAABYAHAAF+qAAFgAcAAXUEOBMAAXhuBFYHCgc4Jt8MAYAPAAPo/AATAAF4dgRWB34IDGMAARNPAAFzsAGADwABdmgFqgfVgA8AAXZrAARu+BMAAXh6BFYIXgicYt9XAAFzsAGADwABfbAErBMAAXh+BFYI4gkUYt9TAAFzsAGADwABdkQErBMAAXiCBFYJVgmEYwABE1MAAXOwAYAPAAF2sASsEwABeIYEVgnOCgRjAAETVwABc7ABgA8AAXbEBKwTAAF4igRWCnIKoGMAARFXAAFzsAF0DwABfYwFgA8AA/esBKwTAAF4jgRWCv4LIGMAARFbAAFzsAF0DwABfYwFgA8AA/mwBKwTAAF4kgRWC54L3GMAARFfAAFzsAF0DwABfYwFgA8AAX5gBKwTAAF4lgRWDF4MjGLOxwABc7ABdA8AAX2MBYAO8twErBMAAXiaBFYNEg1IYwABEWMAAXOwAXQPAAF9jAWADwABg0gErBMAAXieBFYNwg4MYwABEWcAAXOwAXQPAAPzaAmADwAD+aV0DwABfYwFbATKDgWADwAD+aV0DwABfYwFbAATAAF4ogRWDkoOnGMAARF3AAFzsAGADg14BKwTAAF4pgRWDt4PJGMAARF7AAFzsAGADwABfmAErAQXAAF57gRWDzoPOhRcAAAADg+CFFwAAAAEAAAGD5wAABLfDYAPAAPo/AWqD9WADwAD6PwBgA8AAXhkBPgU9F4QDLsAARFXAAFzsH4QWwABfawEBYAPAAP3rAS4AwABeIj0XhDcuwABEVsAAXOwfhEfAAF9rAQFgA8AA/mwBLgDAAF4jPReEZS7AAERXwABc7B+EfMAAX2sBAWADwABfmAEuAMAAXiQ9F4SiLrOxwABc7B+EtcAAX2sBAWADvLcBLgDAAF4lPReE3C7AAERYwABc7B+E8cAAX2sBAWADwABg0gEuAMAAXiYCCAHAAF4bgADALuBNCQGDzsAAX9AAAAAATAbAAF4rgRWFHIUthWYAAIKUAWqFHWADwAD9UQIAAAEDhTKFZgAAAAEBAYU6AAAAg+dgA8AA/esAAFwBPgFJhUUWhUkut8PAAF4bPRyFVy7AAERfwABc7AEAAYCFXsAu4V0AwABeUj8GwABeLIEVhWuFfIWxAACCjAFqhWxgA8AA/VECAAABA4V/hbEAAAABAQGFhwAAAIPnYAPAAP3rAABcAT4BSYWSFoWWLrfDwABeGz0chaQuwABEYMAAXOwBAAGAhanALuHEAMAAXlM/BsAAXi2BFYW2hceGUgAAt8cBaoW3YAPAAP1RAgAAAQOF3oZSAAAAAQEBhe8AAAC3wmADwABfbAAAXAE+AkAchh4Whg0ut9XAAFzswABeHkgBAAErAMAA/V6GDYYlAD0Xhiwut9XAAFzsgIY/wC7iK8AAXh4GwABedIEVhleGa4bCAQC3wgAAAAEDhnuGwgAAAAAAAABgA8AAX2wBPgJAIRyGmRaGiC631cAAXOzAAF4eSAEAASsAwAD9XoaIhqAASoanARaGri631cAAXOzAAF4eBsAAXi6BFYbHhtiHUQAAt8YBaobIYAPAAP1RAgAAAQOG7IdRAAAAAQEBhvoAAAC3wWADwABdkQAAXAE+AkAchyMWhxUut9TAAFzswABeH0gBAAErAMAA/V6HFYcqAD0XhzEut9TAAFzsgIdBwC7i/cAAXh8GwABedYEVh1aHZ4e1AQC3wQAAAAEDh3SHtQAAAAAAAABgA8AAXZEBPgJAIRyHjxaHgS631MAAXOzAAF4fSAEAASsAwAD9XoeBh5YASoedARaHpC631MAAXOzAAF4fBsAAXi+BFYe6h8uIPgAAwABEGAFqh7tgA8AA/VECAAABA4feiD4AAAABAQGH6wAAAMAARBlgA8AAXawAAFwBPgJAHIgSFogFLsAARNTAAFzswABeIEgBAAErAMAA/V6IBYgZAD0XiCAuwABE1MAAXOyAiC/ALuPRwABeIAbAAF4wgRWIQ4hUiLoAALfLAWqIRGADwAD9UQIAAAEDiGiIugAAAAEBAYh2AAAAuGZgA8AAXZoAAFwBPgJAIRyIkoCIi8Au5EtIAQABKwDAAP1eiIuImQA9F4igLsAARNPAAFzsgIiwwC7kS8AAXh0GwABedoEViL+Iz4kaAQDAAEQZAAAAAQOI24kaAAAAAAAAAGADwABdrAE+AkAhHIj1FojoLsAARNTAAFzswABeIEgBAAErAMAA/V6I6Ij8AEqJAwEWiQouwABE1MAAXOzAAF4gBsAAXjGBFYkfiTCJvQAAt8UBaokgYAPAAP1RAgAAAQOJRYm9AAAAAQEBiVQAAAC4ZmADwABdsQAAXAE+A0AhHIlwgIlpwC7lH0gBAAErAMAA/V6JaYl3AEAciZQWiYUuwABE1cAAXOzAAF4hSAEAASsAwAD9XomFiZsAPReJoi7AAETVwABc7ICJs8Au5R/AAF4hBsAAXjKBFYnCidOKRgAAuGcBaonDYAPAAP1RAgAAAQOJ6opGAAAAAQEBifkAAAC4ZmADwABdsQAAXAE+AkAcih0Wig4uwABE1cAAXOzAAF4hSAEAAYCKIMAu5bIAwAD9XooOiiYAPReKLS7AAETVwABc7CvAAF4hBsAAXjOBFYpLilmLtwAAwABEFgFqikxgA8AA/VECAAABA4pri7cAAAEAAIJ2YAPAAP1RAVsCAgKKdgAAAIJTYAODXgCKgQAAAIGmYQMAXwMAAAAAXwMAAAE+CE6KloqnAADAAERkYAODXgEWiqkuwABEXcAAXOzAAF4oTorQit4AAMAARGVgA8AAX5gBForgLsAARF7AAFzswABeKT0XivguwABEXcAAXOyAixDALuY4wABeKD0Xix0uwABEXsAAXOwrwABeKU6LPotFAACBdl8DAAABHItIgYtHwC7mRCAAAAAAAD0Xi1AuwABEXsAAXOyDi2XALuZ8wABeKT0Xi3guwABEXcAAXOyCi5DALuZcwABeKEqLpgGEi63ALubIBsAAXneBFYu8i8yMiQEAwABEZgAAAAEDi96MiQAAAAAAAABgA8AAX5gBPgJAIRyMARaL6y7AAERdwABc7MAAXihIAQABKwDAAP1ei+uMCAEnwABEZ0qMQgE1AAAAAQBgA8AAX5gBFoxJLsAARF7AAFzswABeKSMcjFyAAMAu53pIAQABKwDAAP1eF4xJLsAARF7AAFzsHIxgLsAARIzAAFzsAQABFoxvLsAARF3AAFzswABeKADAAF5HwABeKYAAwC7negFgA8AAX5gGwABeNIEVjI6MnI0dAACwugFqjI9gA8AA/VECAAABA4ypjR0AAAEAAIPLYAPAAP1RAVsBAQGMrAAAAIGmYQMAXwMAAAAAXwMAAAE+Ak6MxYzMAACDRF0DwABfYwFbATUAAAABAF0DwAD82gJgA8AA/mldA8AAX2MBWwEWjM4uwABEWcAAXOzAAF4nNQAAAAEAYAPAAP5pAS1fAwAANQAAAAEAXQPAAF9jAVsBHIzcgYzcwC7oS0sBAAGCjNzALuh3AMAA/O4jHIzggwDALuiJSAEAASsAwAD9XjUAAAABAF0DwABfYwFfAwAAAR+M6MAAX2sBAV8DAAABLgA1AAAAAQBcARyM3IGM3MAu6EuAvwIAAoKM3MAu6HeEAMAu6MYAwAD874QAwC7oxoMAwC7oiQFdA8AAX2MBW0qNBAEmjQQBHI0SgY0LwC7oOZ52AQABgI0XwC7oIQDAAF9pXwMAAAbAAF41gRWNIo09jZcAAJiyAWqNI2ADwAD9UQIAAAEDjUiNlwAAAAAAAABgA8AAjl8BPgFKjVEBHI1mFo1YLsAARNPAAFzswABeHcAARD4CAAIuFo2GLrfBwABedQDAAF2cBsAAXjaBFY2cjbWOCwAAmMUBao2dYAPAAP1RAgAAAQONvo4LAAAAAAAAAGADwACOZQE+AUqNxwEcjdwWjc4uwABE08AAXOzAAF4dwABEPwIAAi4Wjfout8HAAF51AMAAXZ0GwABeN4EVjhCOK46FAACYxAFqjhFgA8AA/VECAAABA442joUAAAAAAAAAYAPAAI5/AT4BSo4/ARyOVBaORi7AAETTwABc7MAAXh3AAERAAgACLhaOdC63wcAAXnUAwABdngbAAF44gRWOio6kjvwAAKw+AWqOi2ADwAD9UQIAAAEDjq6O/AAAAAAAAABgA8AAjmsBPgFKjrcBHI7MFo6+LsAARNPAAFzswABeHcAAREECAAIuFo7rLrfBwABedQDAAF2fBsAAXjmBFY8BjyGPhQAAr7sBao8CYAPAAP1RAgAAAQOPMY+FAAAAAAAAAGADwACOegE+AUqPOgEcj08Wj0EuwABE08AAXOzAAF4dwABEQgIAAi4Wj3Qut8HAAF51AMAAXaAGwABeO4EVj4qPmZC7AADAAETWwABc7AAAAAEDj6eQuwAAAAEBAY/KAAAAwABEbl0DwAD8qQFgA8AAYssAAF0DwAD8qQFgA8AAYmYBPgROj+uP8QAAgO5gA8AA/AUBHI/zLrDCAAAAAMAAXmNOkBGQFwAAhW1dA8AA/KkBYAPAAGJmAR6QHcAA9gABAWADwABiZgGBkCzALuuFAEWQOAGQQZBHAAAnYAPAAPwFAZMBHJBSg5BMwC7r1WMBAAGBkFTALuuFAMAA/TIBi5BbwC7r1RyQYIOQW8Au69VkAQABlADAAP0qPgE9HJBxgpBswC7ro4C/AgACg5BywC7r1RyQey7AAETXwABc7AEAAYCQicAu61wAwABePQDAAPy5SpCrAYKQssAu66MGwABePIEVkMCQ0pH+AADAAETYwABc7AAAAAEDkOSR/gAAAAEBAZEDAAAAwABEbl0DwAD8qQFgA4lPAABdA8AA/KkBYAOIuAE+BE6RJJEqAACA7mADwAD8BQEckSwusMIAAAAAwABeY06RTZFTAACFbV0DwAD8qQFgA4i4AR6RWcAA9gABAWADiLgBgZFrwC7sqgBFkXcBkYCRhgAAJ2ADwAD8BQGTARyRkYORi8Au7PZjAQABgZGTwC7sqgDAAP0yAYuRmsAu7PYckZ+DkZrALuz2ZAEAAZQAwAD9Kj4BPRyRsIKRq8Au7MiAvwIAAoORscAu7PYckbouwABE2cAAXOwBAAGAkczALuyFAMAAXj4AwAD8uUqR7gGCkfXALuzIBsAAXliBFZIDkhqS5AAAwABELAFqkgRgA8AA/VECAAABA5IokuQAAAAAAAAAYAO1xQE+BT0ckjEuwABE2sAAXOwBAAFqkklgA8AAXqLAARXlAMAAXk9Okl6SYgAAgKxgA8AA/mwBHJJkLsAARNvAAFzsAAAAAMAAXkROkniSfgAAgpRgA8AA/AUBHJKALsAARNzAAFzsAAAAAMAAXlVOkpySoAAAgoxgA8AA/AUBHJKiLsAARNzAAFzsAAAAAMAAXlVKkroBH5LFtdADAAOAktDALu3XgZLVwC7t+4KS3MAu7h8ABsAAXlmBFZLpkv6TrgAAhwgBapLqYAPAAP1RAgAAAQOTCpOuAAAAAQAAAZMRAAAAl7FgA8AA+j8BapMcYAPAAPo/AGADwABiZgE+BD0ckyouwABE2sAAXOwBAAFqk0JgA8AAXqLAARX/AMAAXk9Ok1qTXwAAgpBgA8AAYmYBHJNhLsAARNfAAFzsAQABMZNvYAPAAGLLAADAAF49QCIhHJOEgZN/wC7u00gBAAErAMAA/V4BgJOPwC7uj5N/k5gASpOfAYGTpsAu7tMGwABePYEVk7OTvJ4tAADAAETXwABc7AAAAAEDk8meLQAAAAEBAZPlAAAAwABEbl0DwAD8qQFgA8AAYssAAGADwABiZgE+A06UD5QUAACCZ2ADwABfDgEclBYur7kBAWADwABfDgFqlCxdA8AA/KkBYAPAAF8OwAEckgDAAF5fR5Q5gZRBwC7vdwkBlGFqlGFgA8AAXw7AARYbAD4BSpRvASsBlJRqlJRgA8AAXw7AARvKAD4BSpSmAWqUs2ADwABi4MABHL4BlNdqlNdgA8AAXw7AARvjAD4BSpTtAR+U+MAAYsoBAAEclQkur7sAAAAAwABeOQABlTZqlTZgA8AAXw7AARv8AD4DTpVYlV4AACdgA8AA/AUBHJVgLrDCAAAAAMAAXmNAIhyVfJOBawEAAYKVf8Au8DkAwAD9MwAclY6ClYjALvA5YwEAARaVpoCVkMAu71VhwAD82ADAAP0ylXqVrABKlbcBHJXTgJW+wC7vVUsBAAGCldTALvA5AMAA/LgBlfRqlfRgA8AAXw7AARwVAD4LTpYOliAAAMAAROVgA8AA/AUBHJYiLrDCAAAAAMAAXmNOllCWXgAAom9dA8AA/KkBYAPAAGLLAR6WcMAA/LECAWADwABiywKClpTALvDGNJa3A5a3luUAAAABAQGWvAAAACdgA8AA/AUAAGADwABiywFKlsYBH5bKwABi3wEAAYOW38Au8SEAAD2IlvDALu9VNZcYAAABAF0DwAD8qQFgA8AAYssBHpcYwAD8rwEBYAPAAGLLAYCXOMAu71UANQAAAAEAWwEcl1+El13ALvFWgKUBAAGDl2bALvDmAMAA/LuEAMAu8VZFl34Bl4eXjQAAJ2ADwAD8BQGTARyXmISXksAu8a9jAQABgpeawC7wxgDAAP0yAYyXrcAu8a8cl7KEl63ALvGvZAEAAZQAwAD9Kj4BPReX1xyXz4OXwsAu8OZLAQABhJfQwC7xrwDAAPy4hW8cl98uwABE18AAXOwBAAGAl+3ALu9VAMAAXj3AAGLVTpggmCsAAIU6YAPAAGJmARyYLS7AAETXwABc7AEAAYCYO8Au71UAwABePU6Yaph5AAC0B10DwAD8qQFgA8AAYmYBHJh7LsAARNbAAFzsAQABgJiKwC7vVQDAAF47Tpi5mNAAALQIXQPAAPypAWADwABiZgEcmN4uwABE1sAAXOwBAAGAmO3ALu9VAMAAXjtOmRyZMAAAtAldA8AA/KkBYAPAAGJmARyZPi7AAETWwABc7AEAAYCZTcAu71UAwABeO06ZepmKAACEwV0DwAD8qQFgA8AA/esBHpmcwAD2AAEBYAPAAP3rARaZvYeZqcAu8sZhwAD82ABFmc4BmdeZ2QAAYmADwAD8BQGTARyZ4BSZ3sAu8zIJAGMBAAEWmfIUmeLALvL4CABhwAD82ADAAP0yARWZ+sAu8zIJHJn7FJn6wC7zMgkAZAEAAZQAwAD9Kj4BPRyaGhSaC8Au8vgIAIC/AgACFJobwC7zMgkAHJogLq+8AAAAAMAAXmIAwAD8uUqaQAEfmkvAAGMRBgAGhJplwC7yN4WafcAu8mKGmpnALvKUFJq9wC7y+AgAh5rawC7yxoOa+8Au8OYAAZskapskYAPAAF8OwAEcLwA+A06bSJtMAACZymADwACOZQEcm04umMUAAAAAwABeNk6bcpuAAACFHV0DwAD8qQFgA8AAYmYBHJuCLsAARNbAAFzsAQABgJuRwC7vVQDAAF47SpuxAR+bvMAAYqICAAKCm8rALvQGg5vPwC70JAABm/dqm/dgA8AAXw7AARxJAD4ETpwXnB8AAIaBYAPAAI5/ARycIS6YxAAAAADAAF43TpxHnFUAAIUdXQPAAPypAWADwABiZgEcnFcuwABE1sAAXOwBAAGAnGbALu9VAMAAXjtOnI+cmQAAtAZgA8AAYmYBHJybLsAARNfAAFzsAQABgJypwC7vVQDAAF49SpzJAR+c1MAAYrgDAAOCnODALvSGg5zpwC70pCac+AGEnPjALvTWYAPAAGL5AAGdHGqdHGADwABfDsABHGMAPgFKnTEBap0+YAPAAGLswAEcxQGdZWqdZWADwABfDsABHH0APgJOnYCdjQAAhcNgA8AAYmYBHJ2PLsAARNfAAFzsAQABgJ2dwC7vVQDAAF49Sp29AR+dyMAAYyQBAAGCndXALvVmAD0wne4fnfjAAPuXAQABJJ4oAifAAETmgZ4jwC7vdwAGwABeWoEVnjKeSp8JAADAAEQqAWqeM2ADwAD9UQIAAAEDnlqfCQAAAAEAAAGeYQAAAJexYAPAAPo/AWqebGADwAD6PwBgA4i4AT4EPRyeei7AAETawABc7AEAAWqekmADwABeosABFjQAwABeT06esZ62AACCkGADiLgBHJ64LsAARNnAAFzsAQABMZ7KYAOJTwAAwABePkAiIRye34Ge2sAu9jRIAQABKwCIvAGAnurALvXyntqe8wBKnvoBgZ8BwC72NAbAAF4+gRWfDp8arrAAAMAARNnAAFzsAAAAAQOfK66wAAAAAQEBn0MAAADAAERuXQPAAPypAWADiU8AAGADiLgBPgNOn3GfdgAAgmdgA8AAXzIBHJ94Lq+5AQFgA8AAXzIBap+SXQPAAPypAWADwABfMsABHgUAwABeX0efn4Gfp8Au9s4NAZ/Lap/LYAPAAF8ywAEWUAA+AUqf2QErAaACaqACYAPAAF8ywAEc0QA+AUqgFAFqoCFgA4jbwACbOAGgTGqgTGADwABfMsABHZ4APgFKoGEBaqBuYAOIw8AAmycBoJxqoJxgA8AAXzLAAR2EAD4BSqCwAWqgvWADiOeElwGg6mqg6mADwABfMsABHe4APgFKoQMBaqEQYAPAAI7vwAEeQQGhQ2qhQ2ADwABfMsABHOoAPgNOoW+hfQAAnr1gA4lPARyhfy7AAEQnAAAAAMAAXm1OoayhugAAhpJgA4i4ARyhvC7AAETZwABc7AEAAYChzsAu9rAAwABePkqh7gEfofmJTgIAAoKiDsAu98SDoh3ALvfiAAGiSWqiSWADwABfMsABHRwAPgROomuicQAAJ2ADwAD8BQEconMusMIAAAAAwABeY0AiHKKPk4FrAQABgqKSwC74OQDAAP0zAByioYKim8Au+DljAQABFqK5gKKjwC72sGHAAPzYAMAA/TKijaK/AE6i1qLkAACGkmADiLgBHKLmLsAARNnAAFzsAQABgKL4wC72sADAAF4+SqMYAR+jI4lOAgACHKNagKNFwC72sEsBAAGCo1vALvg5AMAA/LiDo2PALviVAAGjj2qjj2ADwABfMsABHQMAPg49HKOlLoKUAQABaqOrYAPAAP3rwAEeTADAAF4rTqPNo+AAAL2TYAPAAPwFARyj4i6wwgAAAADAAF5jTqQMpBsAAIS+XQPAAPypAWADiU8BHqQtwAD8sQIBYAOJTwKCpF7ALvkbNKRyA6RypJcAAAABAQGkdwAAACdgA8AA/AUAAGADiU8BSqSBAR+khYljAAAAAAA9iKSiwC72sDWkygAAAQBdA8AA/KkBYAOJTwEepMrAAPyvAQFgA4lPAYCk5sAu9rAANQAAAAEAWwEcpQ2EpQvALvmagKUBAAGDpRTALvk5AMAA/LuEAMAu+ZpFpS0BpTalPAAAJ2ADwAD8BQGTARylR4SlQcAu+e9jAQABgqVJwC75GwDAAP0yAYylXcAu+e8cpWKEpV3ALvnvZAEAAZQAwAD9Kj4DPReliBylgIOlcsAu+TlLAQABhKWBwC757wDAAPy4gL0cpY8ur7wAAAAAwABeYolTPRelvRyltYOlp8Au+TlLAQABhKW2wC757wDAAPy4hW8cpdMuwABE2cAAXOwBAAGApeXALvawAMAAXj6JVD0Xph0cphWDpgfALvk5SwEAAYSmFsAu+e8AwAD8uIaYHKY5LsAARNnAAFzsAQABgKZLwC72sADAAF4+iVVOpoGmjAAAhTpgA4i4ARymji7AAETZwABc7AEAAYCmoMAu9rAAwABePk6mxKbbAACFH2ADwAD8BQEcpt0usMIAAAAAwABeY06nAqcXAACEwF0DwAD8qQFgA4i4ARynJS7AAETYwABc7AEAAYCnOMAu9rAAwABePE6nXKdwAADAAET0YAPAAPwFARynci6wwgAAAADAAF5jTqeYp6gAAITBXQPAAPypAWADiTEBHqe6wAD2AAEBYAOJMQGHp83ALvtZAEWn6wGn9Kf6AAAnYAPAAPwFAZMBHKgFFKf/wC77pwkAYwEAAYeoB8Au+1kAwAD9MgEVqBzALvunCRyoIRSoHMAu+6cJAGQBAAGUAMAA/So+A06oOKg9AACAvWADwAD96wEcqD8ur7wAAAAAwABeYk6oY6hoAACCkGADiLgBHKhqLsAARNnAAFzsAQABgKh8wC72sADAAF4+PRyorRSonsAu+3kIAIC/AgACFKiuwC77pwkAH6i7iT0CAAIUqMjALvv1CgAUqM7ALvwTCwAAAMAA/LlOqPapAgAAhn5gA4kfASao9gEcqQQuwABE2cAAXOwBAAGAqRbALvawAMAAXj5gA4kfPRypNi6CjAEAAWqpOmADwAD968ABHkwAwABeLEqpWAEfqWOJHgYAAoapc8Au+ymEqYnALvriBITBFKmywC77eQgAhL6Dqd/ALvk5hR+FqhPALvsLhn4UqkTALvx3CQABqm9qqm9gA8AAXzLAAR02AD4DTqqPqpMAAJnKYAODGQEcqpUuwABEGwAAAADAAF5cTqrAqs4AAIUdXQPAAPypAWADiLgBHKrcLsAARNjAAFzsAQABgKrvwC72sADAAF48SqsPAR+rGokDAgACgqsrwC79GoOrMMAu/TgAAatcaqtcYAPAAF8ywAEduAA+A06rgKuEAACZymADgxkBHKuGLsAARBsAAAAAwABeXE6rsau/AACFHV0DwAD8qQFgA4i4ARyrzS7AAETYwABc7AEAAYCr4MAu9rAAwABePEqsAAEfrAvAAI76AgACgqwdwC79loOsIsAu/bQAAaxOaqxOYAPAAF8ywAEd0gA+A06sc6x3AACZymADgxkBHKx5LsAARBsAAAAAwABeXE6spKyyAACFHV0DwAD8qQFgA4i4ARyswC7AAETYwABc7AEAAYCs08Au9rAAwABePEqs8wEfrP7AAI8BAgACgq0RwC7+FIOtFsAu/jIAAa1Caq1CYAPAAF8ywAEdUAA+A06tXq1mAACGgWADgvQBHK1oLsAARBwAAAAAwABeXU6tla2jAACFHV0DwAD8qQFgA4i4ARytsS7AAETYwABc7AEAAYCtxMAu9rAAwABePEqt5AEfre+JLwIAAoKt/sAu/pKDrgfALv6wAAGuM2quM2ADwABfMsABHWoAPgFKrkgBaq5VYAOIz4SIPTCucR+ue8AA+5cBAAEkrqsCJ8AAROaBrqbALvbOAAbAAF4/gRWuta7BrxIAAMAARPXAAFzsAAAAAQOu0K8SAAAAAAAAAGADwABfmAE+AUqu2QEcrvEWruAuwABEV8AAXOzAAF4knnYBAAEWrvYuwABE9sAAXOzAAF5AAMAAX2kGwABeQIEVrxevI7E8AADAAET2wABc7AAAAAEDrzqxPAAAAAAAAABgA8AAX5gBPgNOr1WvWgAAgmdgA8AAXr4BHK9cLsAARPfAAFzsAQFgA8AAXr4Baq+AXQPAAPypAWADwABevsABHlEAwABeV0evjYCvlcAu/8sCAa+6aq+6YAPAAF6+wAEWgwA+A06v0q/WAACZymADwABfigEcr9guwABE+MAAXOwAAAAAwABeQU6v+a/+AACAvWADwAD96wEcsAAuwABE+cAAXOwAAAAAwABeRkqwFwEcsCKBsB7ALwAnwABE+gEAAYKwOcAvAEsAwABfkwGwXWqwXWADwABevsABFpwAPgNOsHuwgwAAhENgA8AAX3UBHLCFLsAARPvAAFzsAAAAAMAAXkNOsKiwrQAAgL1gA8AA/esBHLCvLsAARPnAAFzsAAAAAMAAXkZKsMYBHLDVgbDNwC8Ao8AARPoBAAGCsOzALwDHAMAAX4U9MLD9H7EHwAD7lwEAASSxNwInwABE/ICxMsAu/8sABsAAXluBFbFBsVexuAAAwABEHQFqsUJgA8AA/VECAAABA7FlsbgAAAAAAAAAYAODXgE+Aj0csW4uwABE2sAAXOwBAAFqsYZgA8AAXqLAARZpAMAAXk9KsZcBFrGwHLGeLsAARPXAAFzsAAAAAMAAXj+D7sAAX5oGwABeQYEVsb2xyLJZAADAAET4wABc7AAAAAEDsdayWQAAAAAAAABgA8AAX4oBPgNOseyx9AAAhENgA8AAX3UBHLH2LsAARPvAAFzsAAAAAMAAXkNOshWyGgAAgL1gA8AA/esBHLIcLsAARPnAAFzsAAAAAMAAXkZKsi8BHLI+gLI2wC8B0sAARP0BAAGBslDALwH2AMAAX4IGwABeXIEVsl6yc7LRAADAAEQbAWqyX2ADwAD9UQIAAAEDsoCy0QAAAAAAAABgA4MZAT4CPRyyiS7AAETawABc7AEAAWqyoWADwABeosABFrUAwABeT0qysQEWsskcsrguwABE+MAAXOwAAAAAwABeQYPuwABfjAbAAF5CgRWy1rLhs3AAAMAARP7AAFzsAAAAAQOy8bNwAAAAAAAAAGADgvQBPgNOswezDwAAhENgA8AAX3UBHLMRLsAARPvAAFzsAAAAAMAAXkNOszCzNQAAgL1gA8AA/esBHLM3LsAARPnAAFzsAAAAAMAAXkZKs0oBHLNZgLNRwC8C4MAARP8BAAGBs2fALwMEAMAAX4QGwABeXYEVs3WzjLPrAADAAEQcAWqzdmADwAD9UQIAAAEDs5uz6wAAAAAAAABgA4L0AT4CPRyzpC7AAETawABc7AEAAWqzvGADwABeosABFs8AwABeT0qzzgEcs9UuwABE/sAAXOwAAAAAwABeQgbAAF5DgRWz8LP9tHUAAMAARPvAAFzsAAAAAQO0DbR1AAAAAAAAAGADwABfdQE+Ak60GrQnAAClK2ADwAD+bAEctCkuwABE28AAXOwAAAAAwABeREq0OQEctFAWtEAut8LAAF50wABFAAEAAYC0ZMAvA+cAwABfcgbAAF5egRW0erSRtPUAAMAARBoBarR7YAPAAP1RAgAAAQO0oLT1AAAAAAAAAGADgosBPgI9HLSpLsAARNrAAFzsAQABarTBYAPAAF6iwAEW6QDAAF5PSrTTARa07Ry02i7AAET7wABc7AAAAADAAF5Dg+7AAF93BsAAXl+BFbT6tQi1dgAAr7kBarT7YAPAAP1RAgAAAQO1E7V2AAABAACDy2ADwAD9UQFbAQEBtRwAAAApXQPAAPypAV8DAAAAAF8DAAABPgI9HLUqLsAARNrAAFzsAQABarVCYAPAAF6iwAEXAwDAAF5PSrVSARy1WS7AAET3wABc7AEBXwMAAAGAtWvALwTbAMAAXlcGwABeYIEVtXu1i7XSAAC3JQFqtXxgA8AA/VECAAABA7WStdIAAAAAAAAAYAPAAP5sAT4CPRy1my7AAETawABc7AEAAWq1s2ADwABeosABFzUAwABeT0q1vQEctcQuwABE28AAXOwAAAAAwABeRAbAAF5EgRW117XbthcAAMAARNvAAFzsAAAAAQO147YXAAAAAAAAAGADwAD+bAE+AUq17AEctf0WtfMuwABEVsAAXOzAAF4jnnYBAAEWtgIuwABFAcAAXOzAAF5WAMAAX2kGwABeYYEVthy2LbZ3AACvMwFqth1gA8AA/VECAAABA7Y1tncAAAAAAAAAYAPAAPo/AT4CPRy2Pi7AAETawABc7AEAAWq2VmADwABeosABFxwAwABeT0q2YQEctmguwABFAsAAXOwAAAAAwABeRQbAAF5FgRW2fLaBtvIAAMAARQLAAFzsAAAAAQO2irbyAAAAAAAAAGADwAD6PwE+A062l7adAACAlmADwAD8BQEctp8uwABE3MAAXOwAAAAAwABeVUAiHLbEgLa+wC8GqEgBAAGTAMAA/SgBHLbSgLbMwC8GqEgBAAGUAMAA/Si2vrbWAEq23QEctuqAtuTALwaoSAEAAZQAwAD9KAbAAF5igRW297cKt1oAAK+8AWq2+GADwAD9UQIAAAEDtxS3WgAAAAAAAABgA8AA/esBPgI9HLcdLsAARNrAAFzsAQABarc1YAPAAF6iwAEXTwDAAF5PSrdCARy3SS7AAET5wABc7AAAAADAAF5GBsAAXkaBFbdft2a3qwAAwABE+cAAXOwAAAABA7dxt6sAAAAAAAAAYAPAAP3rAT4BSrd6ARy3jha3gS7AAERVwABc7MAAXiKedgEAARa3ky7AAEUDwABc7MAAXlQAwABfaQbAAF5jgRW3sLfAuBIAALDCAWq3sWADwAD9UQIAAAEDt8e4EgAAAAAAAABgA8AA/AUBPgI9HLfQLsAARNrAAFzsAQABarfoYAPAAF6iwAEXaADAAF5PSrf1ARy3/C7AAETcwABc7AAAAADAAF5VBsAAXmSBFbgXuC+4iQAAwABEIgFquBhgA8AA/VECAAABA7g7uIkAAAAAAAAAYAOCUgE+Aj0cuEQuwABE2sAAXOwBAAFquFxgA8AAXqLAAReBAMAAXk9KuGsBHLhyLsAARQTAAFzsAQABKwDAAF5MBsAAXkeBFbiOuJq6IQAAwABEjMAAXOwAAAABA7iouiEAAAABAQG4swAAAIPuYAODXgAAYAPAAF+YAT4CTrjMuNgAAMAARQVgA8AAX3UBHLjyFrjiLrfCwABedMAARQABAAEWuRwWuQuAuQbALwjlhKuDZ4R3go0AwABfckm5LCEcuUQWuTWAuTDALwjlhP+DZkgBAAErAMAA/V4+Ak65YLlqAADAAEUGYAPAAF+KARy5eIG5bMAvCPzAAEUHAQABFrmPgLmKwC8I5YT/g2YAwABfg0q5pgEcubeCua3ALwldwABFCAEAAYC5zsAvCOUAwABflD4BSrnoARy5+4G578AvCPzAAEUIAQABgLoSwC8I5QDAAF+GBsAAXmWBFbomuj66lwAAwABEIwFquidgA8AA/VECAAABA7pTupcAAAAAAAAAYAOCUgE+AUq6XAEcumMuwABFCQEAARa6gS7AAERmwABedwDAAF5mBsAAXmaBFbqcuqi7LwAAwABFCQAAAAEDusW7LwAAAAEBAbrSAAAAwABEi2ADwABfmAAAYAOCUgE+Aj0cuuQuwABE2sAAXOwBAAFquvxgA8AAXqLAAReBAMAAXk9KuwsBHLsSLsAARQTAAFzsAQABgLsgwC8KTADAAF5MBsAAXmeBFbs0u0y7+AAAwABEJAFquzVgA8AA/VECAAABA7tnu/gAAAAAAAAAYAOCUgE+A067dbt+AACwt2ADwAD6PwEcu4AurzMAAAAAwABeYUm7kIC7lMAvCto+AUq7pgEcu60uwABFCQEAARa7yy7AAERmwABedwDAAF5mP0q76QErBsAAXmiBFbv9vBG9dQAAwABEJQFqu/5gA8AA/VECAAABA7w+vXUAAAEAAIPLYAOCUgFgA4JSAQAAAbxMAAAArzBgA8AA+j8BarxZYAPAAPo/AF0DwAD8qQFfAwAAAT4FTrxrvHEAAIDuYAPAAPwFARy8cy6wwgAAAADAAF5jSbyCIhy8jIG8hsAvC4pIAQABkwDAAP0oAIC8lMAvC2NKvKEBKz9OvLq8vwAAg1tdA8AA/KkBXwMAAAEevMXAAPYAAQFfAwAAAYG8zcAvC4oARbzZAbzivOQAAGJgA8AA/AUBkwEcvOuDvOnALwv8YwEAAYG87cAvC4oAwAD9MgGLvPTALwv8HLz1g7z0wC8L/GQBAAGUAMAA/So+Ak69Db0SAACD7mADglIBHL0ULsAARQkBAAEWvTIuwABEZsAAXncAwABeZj0cvVCCvUzALwvOgL8CAAKDvVHALwv8Jr1QAYS9VsAvDEVfAwAAAMAA/LlKvWYBgr1twC8LzgbAAF5pgRW9er2QvwcAAMAARCYBar17YAPAAP1RAgAAAQO9wr8HAAACAACEA2ADglIBYAOCUgAAhARgA8AA/VEBWwIBAb3FAAAAgaZhAwBfAwEAAAG91gAAAK8wYAPAAPo/AWq942ADwAD6PwBdA8AA/NoCXwMAAF8DAQABPgVOvfW9+wAAgO5gA8AA/AUBHL39LrDCAAAAAMAAXmNJvgwiHL4Wgr4QwC8NJEgBAAGTAMAA/SgAgb4ewC8M+Uq+KwErP06+Rr5KAACAq10DwAD82gJfAwAAXwMBAAEyvkxfAwAAXwMBAABFvlQBvl2+XwAAYmADwAD8BQGTARy+ZoS+ZMAvDZBjAQABgr5owC8NJADAAP0yAYy+b8AvDZAcvnCEvm/ALw2QZAEAAZQAwAD9Kj4DTr6Ivo0AAIPuYAOCUgEcvo8uwABFCQEAARa+rS7AAERmwABedwDAAF5mTr7Jvs8AAICWXwMBAAEcvtKAvtHALwzpIAAAAAAAPRy+34O+3MAvDWiAvwIAAia+3wGFvuDALw3ZXwMAAIa+6MAvDgMAwAD870q++QGDvwDALw1oBsAAXmqBFb8Mvya/fAAAr9ABar8NYAPAAP1RAgAAAQO/Mr98AAAAAAAAAGADwABg0gE+Aj0cvzsuwABE2sAAXOwBAAFqv1NgA8AAXqLAARl7AMAAXk9Kv2IBHL9pLsAARQrAAFzsAAAAAMAAXkoGwABea4EVv4G/lL/uAADAAEQyAWq/gmADwAD9UQIAAAEDv6O/7gAAAAAAAABgA8AA+rcBPgI9HL+sLsAARNrAAFzsAQABar/EYAPAAF6iwAEZlwDAAF5PSr/RARy/2C7AAEULwABc7AAAAADAAF5IBsAAXkiBFb/zv/rAAEDdAADAAEULwABc7AAAAAEDwABACsAAQN0AAAAAAAAAYAPAAPq3AT4GTsAAQBzAAEAhAAASYAPAAOMEAR7AAEAnwADjCAEAATcIAD0cwABAPYDAAEA4wC8Pa8AARQwCAAKTHMAAQEousMIAAAAAwABeYwDAAOMSPRzAAEBfgMAAQFrALw9rwABFDAIAApUcwABAbC6wwgAAAADAAF5jAMAA4xI9HMAAQIGAwABAfMAvD2vAAEUMAgAClxzAAECOLrDCAAAAAMAAXmMAwADjEj0cwABAo4DAAECewC8Pa8AARQwCAAI3BhzAAECwLrDCAAAAAMAAXmMAwADjEkrAAEDAARzAAEDMgMAAQMfALw9rwABFDQEAAZMAwADjHQbAAF5sgRXAAEDiwABA8sAAQU0AAMAARDMBasAAQONgA8AA/VECAAABA8AAQQLAAEFNAAAAAAAAAGADwAD8BQE+Aj0cwABBCy7AAETawABc7AEAAWrAAEEjYAPAAF6iwAEZsQDAAF5PSsAAQS0BHMAAQUIcwABBNC7AAEUOwABc7AAAAADAAF5JqlYAAAAAwAD6OQbAAF5JgRXAAEFSwABBWcAAQZIAAMAARQ7AAFzsAAAAAQPAAEFkwABBkgAAAAAAAABgA8AA+hEBPgFKwABBbQEewABBe8AA+h0BAAEcwABBgS6vvAAAAADAAF5iAAbAAF5KgRXAAEGXwABBpcAAQfAAAMAARQrAAFzsAAAAAQPAAEGywABB8AAAAAAAAABgA8AAYNIBPgFKwABBuwEcwABB0RbAAEHCLsAARFjAAFzswABeJp52AQABFsAAQdYuwABFD8AAXOzAAF5LAMAAX2kGwABeS4EVwABB9cAAQgPAAE6+AADAAEUPwABc7AAAAAEDwABCGMAATr4AAAAAAAAAYAPAAGDSAT4DTsAAQjPAAEI4AACCZ2ADwABgoAEcwABCOi7AAET3wABc7AEBYAPAAGCgAWrAAEJeXQPAAPypAWADwABgoMABHmEAwABeV0fAAEJrgMAAQnPALxH8EgHAAEKYasAAQphgA8AAYKDAARnNAD4CTsAAQqvAAEKxAACAlmADwAD6PwEcwABCsy6vMwAAAADAAF5hSsAAQscBHsAAQtLAAGFfAQABgcAAQuTALxJoAAHAAEMJasAAQwlgA8AAYKDAARnnAD4CTsAAQx3AAEMjAACAlmADwAD6EQEcwABDJS7AAEUOwABc7AAAAADAAF5JSsAAQzwBHsAAQ0fAAGE4AQABgcAAQ1jALxK/AAHAAEN9asAAQ31gA8AAYKDAARoAAD4CTsAAQ5TAAEOaAACAlmADwAD6twEcwABDnC7AAEULwABc7AAAAADAAF5ISsAAQ7gBHsAAQ8PAAGFJAQABgcAAQ9fALxMcAAHAAEP8asAAQ/xgA8AAYKDAARoZAD4CTsAARBPAAEQZAACAlmADwAD96wEcwABEGy6vvAAAAADAAF5iSsAARDEBH8AARDzAAGGYAQABgcAARFDALxN5AAHAAER1asAARHVgA8AAYKDAARozAD4BSsAARIMBasAARJBgA8AAYRHAAPf3AcAARMJqwABEwmADwABgoMABGkwAPgNOwABE5MAARO0AAIJqYAPAAI5xASbAAETkARzAAETvLqw+AAAAAMAAXjhgA8AAjnFOwABFDsAARRMAAIKQYAPAAGJmARzAAEUVLocIAAAAAMAAXllKwABFLQEfwABFOMAAYQcCAAKBwABFTsAvE/wmwABFWAGCwABFWMAvFCxgA8AAYvkAAcAARXxqwABFfGADwABgoMABGmUAPgNOwABFk8AARZgAAIKQYAPAAGJmARzAAEWaLocIAAAAAMAAXllOwABFxsAARc4AAIPQXQPAAPypAWADwABg0gEcwABF0C7AAEQ0AAFgA8AAYNIAAMAAX8RKwABF6QEfwABF9MAAYcICAAImwABGBgGBwABGBsAvFJhgA8AAYo2CwABGDMAvFLwAAcAARjNqwABGM2ADwABgoMABGn8APgNOwABGScAARk4AAIKQYAPAAGJmARzAAEZQLocIAAAAAMAAXllOwABGecAARoEAAIPQYAPAAGHTASbAAEZ5ARzAAEaDLq/QAAAAAMAAXmpgA8AAYdNKwABGmwEfwABGpsAAai4CAAImwABGzAGBwABGzMAvFTdgA8AAYo2CwABG0sAvFVsAAcAARvlqwABG+WADwABgoMABGpkAPgZOwABHD8AARxQAAIKQYAPAAGJmARzAAEcWLocIAAAAAMAAXllOwABHQMAAR0gAAMAARL1gA8AAYbMBJsAAR0ABHMAAR0our9AAAAAAwABeamADwABhs07AAEd2wABHfQAAKV0DwAD8qQFgA8AAYNIBHMAAR38uwABENAABYAPAAGDSAADAAF/ETsAAR6bAAEexAADAAES+YAPAAGDSARzAAEezLsAARDEAAAAAwABfw07AAEfWwABH5QAAsSdgA8AA+j8BHMAAR+curzMAAAAAwABeYUrAAEf7AR/AAEgGwABqQwUABSbAAEg5AYHAAEg5wC8V02ADwABijYLAAEg/wC8V94PAAEhIwC8WKYTAAEhQwC8WW4XAAEhcwC8WgwABwABIimrAAEiKYAPAAGCgwAEaswA+A07AAEitwABIsgAAgpBgA8AAYo0BJsAASK0BHMAASLQuhwgAAAAAwABeWWADwABijU7AAEjswABI8wAAhIVdA8AA/NoCYAO85WADwABg0gEcwABJAS6z3AECYAO85WADwABg0gE0wABJPAPAAEk8wABJYwAAAAEBAcAASUoAAACCZmADvNMAAGADwABg0gFKwABJVQEcwABJVS6v0AAAAADAAF5qAMAAX7hKwABJbgEfwABJecAAYjMCAAKBwABJksAvFwqCwABJmMAvFzoAAcAASb5qwABJvmADwABgoMABGs0APgNOwABJ1cAASeUAALN+YAPAAGJmARzAAEnnLocIAAAAAMAAXllOwABKCMAASg0AAIKQYAPAAGJmARzAAEoPLocIAAAAAMAAXllKwABKJwEfwABKMsAAYbICAAKBwABKRMAvF+8mwABKVQGCwABKVcAvGBNgA8AAYo0AAcAASnlqwABKeWADwABgoMABGucAPgNOwABKn8AASq0AAIUdXQPAAPypAWADwABiZgEcwABKry7AAEQpAAAAAMAAX7FOwABK1sAASt8AAIJqYAPAAGDSARzAAErhLq/QAAAAAMAAXmpKwABK+QEfwABLBMAAYkMCAAKBwABLH8AvGH8mwABLLgGCwABLLsAvGKxgA8AAYPcAAcAAS1ZqwABLVmADwABgoMABGwMAPgFKwABLbAEfwABLd8AAYmAAAAAAAcAAS6hqwABLqGADwABgoMABGx8APgJOwABLycAAS80AAJnKYAO8wQEcwABLzy6YxQAAAADAAF42SsAAS+QBH8AAS+/AAGH2AQABgcAATAjALxlCAAHAAEwrasAATCtgA8AAYKDAARs7AD4DTsAATFLAAExbAACGBWADwABg0gEcwABMXS6v0AAAAADAAF5qTsAATIDAAEyFAACzPWADuzcBHMAATIcusMAAAAAAwABecErAAEyqAR/AAEy1wABiVAIAAoHAAEzRwC8Zl4LAAEzbwC8ZuwABwABM/2rAAEz/YAPAAGCgwAEbVQA+Ak7AAE0owABNNgAAtSRgA73nARzAAE04LrC8AAAAAMAAXnFKwABNVQEfwABNYMAAYhYBAAGBwABNfsAvGhkAAcAATatqwABNq2ADwABgoMABG28APgFKwABNwAFqwABNzWADwABiF8AA9/4BwABOBmrAAE4GYAPAAGCgwAEbiwA+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g/gBAAE0wABG/wPAAEb/wABHJAAAAAEBAcAARwAAAACCkGADwABiZgAAXAFKwABHCQEcwABHDoHAAEcJwDDAkcAARhsBAAGAwABHIsAwv68AwABidwDAAPx3PRzAAEdCFsAARysutAjAAGL9g/gBAAE0wABHSgPAAEdKwABHbwAAAAEBAcAAR0sAAACCkGADwABiZgAAXAFKwABHVAEcwABHWYHAAEdUwDDA/cAARhsBAAGAwABHbcAwv68AwABidwDAAPx3PRzAAEeKFsAAR3YutAnAAGL/g/gBAAE0wABHkgPAAEeSwABHtwAAAAEBAcAAR5MAAACCkGADwABiZgAAXAFKwABHnAEcwABHoYHAAEecwDDBacAARhsBAAGAwABHtcAwv68AwABidwDAAPx3BsAAYwiBIcAAR8HAAEfSwABKeQAAwABGGsAAYmEBasAAR8JgA8AA/VECAAABA8AAR+zAAEp5AAAAAQEBwABICAAAAMAARh1dA8AA/KkBYAPAAGLLAABgA8AA+j8BPgZOwABIHAAAAMAARjVgA8AA/AUAScAASCkWwABIOxbAAEgtLqJvwABjAIOywAD8jD4CScAASE8cwABIXIDAAEhTwDDB5kgBAAErAMAA/V4+AT2IwABIb8AwweYxwABIkGADwABiywA+AT2JwABIq8AwwgoWwABIvoDAAEi1wDDB5mHAAPzYPRzAAEjdgMAASNTAMMHmgKUBAAEWwABI5C6ib8AAYwAAwAD8uz9PwABI/8AASQQAAAHAAEY2YQMBYAPAAGJmYAPAAPo/AAPAAEkLwABJRwAAAAEBAcAASRUAAACCkGADwABiZgAAYAPAAPo/AUrAAEkeARzAAEkjg8AASR7AMMLjwABGGsAAYmEBAAGAwABJPsAwweYAwABifE7AAElTwABJWgAAgXZgA8AA+j8BIiIiIhzAAEljgsAASVzAMMK5IAEAARbAAElkLoU6wABi+wAAARzAAEmJFsAASXsuom/AAGMAgdQBAAE0wABJjQPAAEmNwABJqgAAAAEBAcAASY4AAACCkGADwABiywAAYAPAAPo/AUrAAEmXARzAAEmegsAASZfAMMK5IAEAARbAAEmkg8AASZ/AMMOLhW/AAGLRAAAAwAD8fAEcwABJxhbAAEm3LrQHwABi/IHUAQABgsAAScrAMMK5AMAA/HwB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JAAAAJ7NYAPAAGTQAALAAK03AAAAwABIJGADwAD6PwFqwACtT2ADwAD6PwDAAK1bAAAAwABIKmADwAD6PwFqwACtb2ADwAD6PwBgA8AA/esBPgdJwACtfYLAAK2BwDF62j4BPYjAAK2hwDF6uRzAAK2wLsAASC3AAGPFAQABgMAArcjAMXq5AMAAZCY/ScAAreGDwACt5cAxevg+AT2IwACuAcAxerkcwACuEC7AAEguwABjxQEAAYDAAK4kwDF6uQDAAGQnPz2IwACuPcAxerkcwACuTC7AAEgvwABjxQEAAYDAAK5hwDF6uQDAAGQvTsAArnsAAACIPWADwAD96wBJwACuihzAAK6UgcAAro7AMXrJwABIMAEAAYDAAK6dwDF6uQDAAGTXPgE9jMAArrTAMXu9gMAArsDAMXq5PgVOwACu5cAAru0AAIQxYAPAAPwFARzAAK8CFsAAru8uwABHx8AAY/1LAQABgMAArwPAMXq5AMAA/O5OwACvHMAArx4AAGJgA8AA/AUBIxzAAK8phcAAryHAMXwNSAEAASsAwAD9KJOFwACvOMAxfA0BYAPAAPwFQ8AAr0ccwACvVIHAAK9OwDF6ycAASCgBAAEkwACvbAKAwACvXcAxermGwACvasAxfEYAwABk1j4BPY7AAK95wDF8RhzAAK96hsAAr3nAMXxGZAEAAZQAwAD9Kj0cwACvnxbAAK+MLsAAR8fAAGP9gL8CAAKAwACvoMAxerkcwACvsobAAK+wwDF8RmQBAAGUAMAA/SoAwAD87z2MwACvvcAxe70kwACv2gKAwACvy8AxermGwACv2MAxfEY9HMAAr+yBwACv5sAxesnAAEgpAQABhMAAr/jAMXu9AMAAZNhKwACwCAGEwACwD8Axe70GwABkTIEjwACx88AAsf7AALNgAADAAEfvAAAAAQPAALIKwACzYAAAAAQCAsAAshcAAACezWADwABk0ADAALIlAAAAmSpgA8AA/esAAsAAsj8AAADAAEgkYAPAAPo/AWrAALJXYAPAAPo/AMAAsmMAAADAAEgqYAPAAPo/AWrAALJ3YAPAAPo/AGADwACVHAE+Ak7AALKMwACylgAAiD1gA8AA/esBHMAAspguwABILMAAY8UEAAKBwACytMAxfa2AwACywsAxfZ0CwABIJILAALLpwDF9vsAASCqDwACz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wDGLxYT/vOGAvbyvguQCAAIng3cngLUAwAD+C07AANHpwADR+AAAr4xgA8AA/esBHMAA0fouwABH+AEAARbAANIagMAA0hPAMYvFgL28rwDAAGRkSsAA0icBJMAA0lQEJ8AAR5+BwADSOMAxjDknneaCwADSRcAxjH0AwABkIwbAAGRSgSPAANJlwADSfMAA0yEAAK+AAWrAANJmYAPAAP1RAgAAAQPAANKOwADTIQAAAAEBAcAA0p4AAACWR2ADvOgAAGADwACVHAE+AUrAANKsASMWwADSuoDAANKzwDGNFYUCvNgcwADS1S6viAEAAYDAANLowDGNFQDAAGQ3HMAA0vour5QBAAGAwADTFsAxjRUAwABkQAFgA8AAlRwGwABkLoEjwADUX8AA1GTAANUlAADAAEg7wABjxQAAAAEDwADUgsAA1SUAAAABAQHAANSQAAAAliZgA7zTAABgA8AA+j8BPgFKwADVCwEWwADVGoDAANUSwDGNr4d9vNoGwABkU4EjwADVc8AA1XrAANYpAACvzAAAAAEDwADVj8AA1ikAAAABAQHAANWdAAAAliZgA7zTAABgA8AA/esBPgJJwADVrBzAANWwLsAASDvAAGPFAQABgMAA1c/AMY4JAMAAZC5KwADV2QEWwADV4C7AAEg8wABlAT9KwADV9wEcwADV/i6vyQEAARbAANYdgMAA1hXAMY4JhEO84gDAAGRZBsAAZFSBI8AA1i7AANZMwADXKAAAr6UBasAA1i9gA8AA/VECAAABA8AA1mXAANcoAAAAAQEBwADWcwAAAJYmYAO80wAAYAPAAJXdAT4CScAA1oIcwADWhi7AAEg7wABjxQEAAYDAANalwDGOuADAAGQuPgFKwADWtwEfwADWwsAAleYBAAEWwADW1C7AAEg8wABlAQA/SsAA1vIBHMAA1vkur54BAAEWwADXHIDAANcUwDGOuIRDvOIAwABkWgbAAGRVgSPAANctwADXNMAA15YAAK/KAAAAAQPAANdIwADXlgAAAAEBAcAA11UAAACWJmADvMEAAGADwAD96wE+AUrAANdkARzAANdrLq/JAQABFsAA14qAwADXgsAxj2qEQ7zDAMAAZFkGwABkVoEjwADXm8AA17nAANgjAACvoQFqwADXnGADwAD9UQIAAAEDwADX0cAA2CMAAAABAQHAANfeAAAAliZgA7zBAABgA8AAld0BPgFKwADX7QEcwADX9C6vngEAARbAANgXgMAA2A/AMY/ghEO8wwDAAGRaBsAAZFeBI8AA2CjAANgvwADY4QAAr8sAAAABA8AA2ELAANjhAAAAAQEBwADYSgAAAJYmYAO8rQAAYAPAAP3rAT4CScAA2FklwADYZYDAANhdwDGQSmADvMg+AUrAANh/ARzAANiGLq/JAQABFsAA2KUUwADYncAxkEoAAWADvMiEQ7zKAMAAZFk/SsAA2LkBHMAA2MAur8oBAAEmwADY1QGAwADY1cAxkEpgA7zBAMAAZFUGwABkWIEjwADY5sAA2QTAANnCAACvowFqwADY52ADwAD9UQIAAAEDwADZG8AA2cIAAAABAQHAANkjAAAAliZgA7ytAABgA8AAld0BPgJJwADZMiXAANk+gMAA2TbAMZEJYAO8yD4BSsAA2VgBHMAA2V8ur54BAAEWwADZghTAANl6wDGRCQABYAO8yIRDvMoAwABkWj9KwADZlgEcwADZnS6voQEAASbAANm2AYDAANm2wDGRCWADvMEAwABkVgbAAGRZgSPAANoEwADaC8AA24cAAK/JAAAAAQPAANohwADbhwAAAAEBAcAA2jAAAACEQ2ADvLIAAGADwAD96wE+BEnAANo/HMAA2kuAwADaQ8AxkbxIAQABFsAA2l4WwADaTi60BMAAY8XAAGQHsRe4ZgDAAP1eSsAA2nMBJ60KP07AANqHwADaiwAAgKxgA8AA/mwBFsAA2pWAwADajcAxkbylK7y0ScAA2qccwADathbAANqvgcAA2qvAMZIUgbrAAP5ySAEAASeHbwDAAP36PgNJwADayRzAANrWFsAA2tGBwADazcAxkhROwAD+d0gBAAEnsOcAwAD9+krAANrhASfAAEeVP0nAANrzHMAA2wAWwADa+4HAANr3wDGSFE7AAP53gdYBAAEngLUAwAD9/UrAANsRASfAAEeSP0rAANsjASeaej9KwADbOQEcwADbURrAANtAwABjz0sBAAEcwADbaBbAANtfFsAA21qAwADbUsAxkbyAvbyvg8HAAP3wlbQBAAEWwADbfBrAANtqwABjz2HAAPzYAMAA/S0AwAD8uAbAAGRagSPAANuMwADbqsAA3CMAAK+eAWrAANuNYAPAAP1RAgAAAQPAANvEwADcIwAA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AMAA/fo+AT2LwAER6MAxvNscwAER9hbAARHvLrecwABjxcAAZG/AAEhZAQABgsABEhvAMbyzAMAAZGU/PRzAARIsLsAASGoBAAGDwAESOsAxvNsAwABkgD0cwAESRS5WAQABHMABEkkuwABIZAIAAoDAARJUwDG8c5YAwABkfADAAGR/BsAAZJCBI8ABEmrAARJ7wAETTwAAuIwBasABEmtgA8AA/VECAAABA8ABEovAARNPAAAAAgECwAESpQAACIYFYAPAAGHnAMABErAAACiAtVsBagBgA8AA/Q55AFwBPgI9HMABEwguwABIaQEAARzAARMiFsABEx0WwAETGYDAARMQwDG+UpnKwABh6YC9vK+C5AIAAidkJ4C1AMAA/gsAwABkfj0cwAETPS5WAQABJ8AASGwAwABkfwbAAGSRgSPAARNUwAETZcABE8oAAMAARccBasABE1VgA8AA/VECAAABA8ABE3rAARPKAAAAAgECwAETmQAACIYFYAPAAGIHAMABE6QAACiAtVsBagBgA8AA/Q55AFwBPgE9HMABE64uVgEAASfAAEhtAMAAZH8GwABkkoEjwAETz8ABE+DAARQ1AADAAEXIAWrAARPQYAPAAP1RAgAAAQPAARPwwAEUNQAAAAIBAsABFAoAAAiGBWADwABiFwDAARQVAAAogLVbAWoAYAPAAP0OeQBcAT4BPRzAARQfLlYBAAEnwABIbgDAAGR/BsAAZJOBI8ABFDrAARRLwAEUjwAAwABFyQFqwAEUO2ADwAD9UQIAAAEDwAEUVsABFI8AAAACAQLAARRrAAAIhgVgA8AAYfcAwAEUdgAAKIC1WwFqAGADwAD9DnkAXAE+AT0cwAEUgC5WAQABJ4C9AMAAZH8GwABklIEjwAEUlMABFKXAARUBAADAAEXKAWrAARSVYAPAAP1RAgAAAQPAARS4wAEVAQAAAAIBAsABFNUAAAiGBWADwABiRADAARTgAAAogLVbAWoAYAPAAP0OeQBcAT4BPRzAARTqLsAASGkBAAEnwABCuADAAGR+AAAxqJsAMajwADGpRwAxqpwAMas9ADGtAQAxra8AMa9UADGwGwAxsHsAMbEHADGxkQAxsgMAMbJ3ADGzbwAxs94AMbRvADG09QAxtsUAMbelADG4uwAxvD0AMb4cADG+1AAxv0oAMb/AADHANAAxwK0AAAAbAsAAZJeBI8ABFkPAARZJwAEtlwPAAEhvAAABYAHAAP1RAAFdAcAAYLwCYAPAAPwFYAPAAP0OBQTAAGSagSPAARadwAEWrwbAAEhwwABjxQBgA8AA/AUBasABFqVgA8AA/AXAASvxBMAAZJuBI8ABFsDAARbmBsAASHHAAGPFAGADwAD8BQFqwAEW4GADwAD8BcABK/cEwABknIEjwAEW98ABFv0Jt5zAAGPFAGADwABjyAAEwABknYEjwAEXFMABFyAJtarAAGPFAGADwABNKwAEwABknoEjwAEXQsABF04JwABIc8AAY8UAXQPAAPzaAmADwABg0mADwAD8BQEywAEXTGADwABg0mADwAD8BQABBcAAZMCBI8ABF1PAARdTwAEXigAAAAPAARdqwAEXigAAAAICAsABF3AAAAS3nGADwABjyADAARd9AAAEtapgA8AATSsAAGADwABklwE/AwgBwABknIAAwDHCWAgBwABknYEAwDHCaAkBwAEXU8AA/WcAAAAAHAbAAGShgSPAARePwAEXp8ABF+MBAK9UwABjxQAAAAEDwAEXu8ABF+MAAAAAAAAAYAO7JAFKwAEXxAEWwAEX0RbAARfELrWqwABjxcAAZJ2k+MAATTEGwABkooEjwAEX58ABF/rAARgmAQC3/8AAY8UAAAABA8ABGAnAARgmAAAAAAAAAGADwABt+wFKwAEYDAEWwAEYGRbAARgMLrWqwABjxcAAZJ20OsAATS0GwABkpIEjwAEYK8ABGC/AARhiAADAAEhnAAAAAQPAARg2wAEYYgAAAAEBAcABGEUAAACGBWADwABg0gAAYAPAAPwFAUrAARhSARzAARhSLsAASGLAAGPFAQABgMABGFnAMcOBAMAAZKYGwABkpoEjwAEYZ8ABGGvAARkyAADAAEhiwABjxQAAAAEDwAEYccABGTIAAAABAQHAARiAAAAAhgVgA8AAYNIAAGADwAD8BQE+A07AARiUwAEYmQAAg8hgA8AA/AUBHMABGKIWwAEYmy7AAEhzwABjxcAAZJ5LAQABgMABGKPAMcPuAMAA/O5JwAEYshzAARi7gcABGLbAMcQJSAEAASsAwAD9KD4CPYnAARjMwDHECR7AARjTwABkrAEAASbAARjkARzAARjkgMABGNvAMcPuhE0CAAIuKwDAAGDxYAPAAPwFAD0cwAEZBhbAARj/LsAASHPAAGPFwABknoC/AgACgMABGQfAMcPugcABGRPAMcQJAMAA/O8/SsABGSMBgcABGSrAMcQJBsAAZK2BI8ABGTfAARlHwAEZdgAAvH8BasABGThgA8AA/VECAAABA8ABGVDAARl2AAAAAgECwAEZYwAACIYFYAPAAGERAMABGW4AACiAtWADwAD9DgFqAGADwAD9DnkAYAPAAPwFAUrAARl1AZQGwABkroEjwAEZe8ABGYvAARnAAADAAEXLAWrAARl8YAPAAP1RAgAAAQPAARmbwAEZwAAAAAIBAsABGa0AAAiGBWADwABiVQDAARm4AAAogLVgA8AA/Q4BagBgA8AA/Q55AGADwAD8BQFKwAEZvwGUBsAAZK+BI8ABGcXAARnVwAEaKAAAvHMBasABGcZgA8AA/VECAAABA8ABGd7AARooAAAAAgECwAEZ8QAACIYFYAPAAGFdAMABGfwAACiAtWADwAD9DgFqAGADwAD9DnkAYAPAAPwFAT4BSsABGgYBIxbAARoWgMABGg3AMcX5uk/AAGDXlZYBYAPAAPwFBsAAZLCBI8ABGi3AARo9wAEapgAAtCwBasABGi5gA8AA/VECAAABA8ABGkrAARqmAAAAAgECwAEaYQAACIYFYAPAAGD3AMABGmwAACiAtWADwAD9DgFqAGADwAD9DnkAYAPAAPwFAT4BSsABGnYBHMABGn0uwABIdMAAY8UCAAKUFsABGp0WwAEalYDAARqMwDHGhpYmwABg+YC9vK8AwABkpwbAAGSxgSPAARqrwAEau8ABGyIAAIWwAWrAARqsYAPAAP1RAgAAAQPAARrNwAEbIgAAAAIBAsABGukAAAiGBWADwABiNADAARr0AAAogLVgA8AA/Q4BagBgA8AA/Q55AGADwAD8BQE+AUrAARr+ARzAARsFLsAASGLAAGPFAQABFsABGxWAwAEbDMAxxymCasAAYjcAwABkpgbAAGSygSPAARsnwAEbN8ABHBQAALx2AWrAARsoYAPAAP1RAgAAAQPAARs/wAEcFAAAAAIBAsABG1EAAAiGBWADwABhKwDAARtcAAAogLVgA8AA/Q4BagBgA8AA/Q55AGADwAD8BQE+A07AARttwAEbcwAAgJZgA8AA+hEBFsABG36AwAEbdcAxx8KqZsAAYS1JwAEbjBzAARujHMABG5aCwAEbkMAxx/aqdwEAATcgAMAA+jhIAQABgsABG6bAMcf2AMAA/V4+AUrAARu1ARzAARvZHMABG9EcwAEbwoLAARu8wDHH9qnzAQABNyAAwAD6N6pWAAAAAMAA+jmDdwEAAWrAARvbYAPAAPwFwAEr8QDAAPwdP0rAARvsAR7AARvzwABkqgEAARzAARwFgsABG//AMcf2qfEAAAAAwAD6OgAGwABks4EjwAEcGcABHCnAARyKAAC8eQFqwAEcGmADwAD9UQIAAAEDwAEcNMABHIoAAAACAQLAARxJAAAIhgVgA8AAYUUAwAEcVAAAKIC1YAPAAP0OAWoAYAPAAP0OeQBgA8AA/AUBPgFKwAEcXgEewAEcZcAAZKoBAAEWwAEceoDAARxxwDHJBKuYwABhRwAGwABktIEjwAEcj8ABHJ/AAR0DAAC8fAFqwAEckGADwAD9UQIAAAEDwAEcqsABHQMAAAACAQLAARy/AAAIhgVgA8AAYYgAwAEcygAAKIC1YAPAAP0OAWoAYAPAAP0OeQBgA8AA/AUBPgFKwAEc1AEcwAEc2y7AAEh0wABjxQIAApUWwAEc84DAARzqwDHJlJ16wABhigDAAGSnBsAAZLWBI8ABHQjAAR0YwAEdgAAAhzMBasABHQlgA8AA/VECAAABA8ABHSHAAR2AAAAAAgECwAEdNAAACIYFYAPAAGGzAMABHT8AACiAtWADwAD9DgFqAGADwAD9DnkAYAPAAPwFAT4BSsABHUkBHMABHVAuwABIdcAAY8UCAAIWwAEdY4DAAR1awDHKLmHAAGG5FsABHXSAwAEda8Axyi6D0MAAYbUAwABkqAbAAGS2gSPAAR2FwAEdlcABHfoAALyHAWrAAR2GYAPAAP1RAgAAAQPAAR2dwAEd+gAAAAIBAsABHa8AAAiGBWADwABhwwDAAR26AAAogLVgA8AA/Q4BagBgA8AA/Q55AGADwAD8BQE+AUrAAR3EARzAAR3LLsAASHXAAGPFAgACFsABHd6AwAEd1cAxytphwABhyRbAAR3vgMABHebAMcraKcAAYcUAwABkqAbAAGS3gSPAAR3/wAEeD8ABHqMAALyKAWrAAR4AYAPAAP1RAgAAAQPAAR4XwAEeowAAAAIBAsABHikAAAiGBWADwABh0wDAAR40AAAogLVgA8AA/Q4BagBgA8AA/Q55AGADwAD8BQE+Ak7AAR5CwAEeRwAAg8hgA8AA/AUBHMABHkkuwABIdcAAY8UCAAIWwAEeXIDAAR5TwDHLhWHAAGHcFsABHm2AwAEeZMAxy4WDYsAAYdUAwABkqErAAR54ARzAAR5/LsAASHXAAGPFAgACgsABHonAMcu5FsABHpiAwAEej8Axy4UpwABh1gDAAGSoBsAAZLiBI8ABHqjAAR64wAEgKgAAvJABasABHqlgA8AA/VECAAABA8ABHsjAASAqAAAAAgECwAEe4gAACIYFYAPAAGIjAMABHu0AACiAtWADwAD9DgFqAGADwAD9DnkAYAPAAPwFAT4DTsABHvvAAR8AAACDyGADwAD8BQEcwAEfAi7AAEh0wABjxQIAApYWwAEfJxbAAR8fFsABHxqAwAEfEcAxzHeCkMAAYZuWJsAAYo+AvbyvAMAAZKc9HMABH0YWwAEfMi6vVMAAY8XAAGShsxsCAAIWwAEfaRbAAR9kgMABH1vAMcx3gpDAAGGblibAAGKPNMABH3oDwAEfesABIBQAAAACAgLAAR97AAAAgLVgA7zBAMABH4oAAACElGADvOUAAGADwAD9DgE+AknAAR+ZFsABH8AcwAEfrBbAAR+dLrf/wABjxcAAZKK0OwEAASbAAR+5AYTAAR+5wDHNWWADwAB1ewDAAG4FwABIa8AAbg9KwAEfygA/PYrAAR/YwDHMqx7AAR/fwABkqwIAAoLAAR/owDHMqxzAAR/uLsAASGLAAGPFAQABHMABIAQWwAEf/oDAAR/1wDHMd4SFwABiJUsBAAGEwAEgBcAxzVkAwAD87gDAAGSmAAC7LkrAASAbAYLAASAiwDHMqwbAAGS5gSPAASAvwAEgP8ABIUIAAJ7vAWrAASAwYAPAAP1RAgAAAQPAASBIwAEhQgAAAAIBAsABIFsAAAiGBWADwABhpADAASBmAAAogLVgA8AA/Q4BagBgA8AA/Q55AGADwAD8BQE+A07AASB5wAEgfgAAgpBgA8AAYmYBFsABIImAwAEggMAxzmezfsAAYaZOwAEg5cABIOoAAIC9YAPAAP3rARzAASDzFsABIOwut5zAAGPFwABknMAASFkBAAGCwAEhGMAxzpsAwABkZUrAASEjARzAASEqLsAASHTAAGPFAgACl4PAASE5wDHOwwDAAGSnBsAAZLqBI8ABIUfAASFXwAEh4gAAuIwBasABIUhgA8AA/VECAAABA8ABIWfAASHiAAAAAgECwAEhgQAACIYFYAPAAGHnAMABIYwAACiAtWADwAD9DgFqAGADwAD9DnkAYAPAAPwFAT4CTsABIZ3AASGmAADAAEB6YAPAAP3rARbAASG1FsABIbGAwAEhqMAxz1yZysAAYemAvbyvSsABIb8BHMABIcYuwABIdMAAY8UCAAI3BYLAASHVwDHPkADAAGSnBsAAZLuBI8ABIefAASH3wAEi1QAAwABFxwFqwAEh6GADwAD9UQIAAAEDwAEiDMABItUAAAACAQLAASIrAAAIhgVgA8AAYgcAwAEiNgAAKIC1YAPAAP0OAWoAYAPAAP0OeQBgA8AA/AUBPgE9MMABIkAewAEiRrXDAgACasABIlhgA7XVwADE6SQAAifAAEh2J8AASHcABsAAZLyBI8ABItrAASLqwAEjuQAAwABFyAFqwAEi22ADwAD9UQIAAAEDwAEi+sABI7kAAAACAQLAASMUAAAIhgVgA8AAYhcAwAEjHwAAKIC1YAPAAP0OAWoAYAPAAP0OeQBgA8AA/AUBPgE9MMABIykewAEjL7XDAgACasABI0FgA7XVwADE6SQAAifAAEh4J8AASHcABsAAZL2BI8ABI77AASPOwAEkjgAAwABFyQFqwAEjv2ADwAD9UQIAAAEDwAEj2cABJI4AAAACAQLAASPuAAAIhgVgA8AAYfcAwAEj+QAAKIC1YAPAAP0OAWoAYAPAAP0OeQBgA8AA/AUBPgE9MMABJAMewAEkCbXDAgACasABJBtgA7XVwADE6SQAAifAAEh5J8AASHcABsAAZL6BI8ABJJPAASSjwAElRQAAwABFygFqwAEklGADwAD9UQIAAAEDwAEktsABJUUAAAACAQLAASTTAAAIhgVgA8AAYkQAwAEk3gAAKIC1YAPAAP0OAWoAYAPAAP0OeQBgA8AA/AUBPgJOwAEk7MABJPEAAIPIYAPAAPwFARbAASUBFsABJPyAwAEk88Ax0eOzPcAAYkeDwcAA/WRKwAElDwEewAElFsAAZKsCAAKCwAElH8Ax0hccwAElJS7AAEhiwABjxQEAARbAASU1gMABJSzAMdHjwABExcAAYkYAwABkpgAGwABkp4EjwAElSsABJU7AASaTAADAAEh0wABjxQAAAAEDwAElWcABJpMAAAACAgLAASVeAAAAg8hgA8AA/AUAwAElawAAAIhHYAPAAP3rAABgA8AA/AUBPgROwAEleMABJX8AAGFgA8AA/AUBFsABJYOBwAElgcAx0tFhwAD97z2IwAElj8Ax0sEewAEllsAAZKsCAAKAwAEln8Ax0sGCwAElpcAx0uwARcABJhsBwAEmJMABJiYAAGJgA8AA/AUBkwEcwAEmLYPAASYrwDHTQGMBAAGCwAEmL8Ax0uwAwAD9MgGLwAEmN8Ax00AcwAEmOYPAASY3wDHTQGQBAAEcwAEmPpRkAQABHMABJkODwAEmQcAx00CDvAEAAZUAwAD8IgDAAP0qAMAA/So+AT2IwAEmUsAx0sEewAEmWcAAZKsCAAKAwAEmYsAx0sEcwAEmaoHAASZowDHS0YQLAQABg8ABJnXAMdNAAMAA/fkASsABJoQBgMABJovAMdLBBsAAZKiBI8ABJpjAASacwAEnSQAAwABIdcAAY8UAAAABA8ABJqXAASdJAAAAAgICwAEmqgAAAIPIYAPAAPwFAMABJsQAAACZNF0DwAD8qQFgA8AAYNIAAGADwAD8BQE+AkbAASbVwAEm/8ABJugAAACGBWADwABg0gCBwAEm9MAx1E8+AT2IwAEnB8Ax1D8ewAEnDsAAZKsCAAKAwAEnF8Ax1D8cwAEnHS7AAEhiwABjxQEAAYLAASckwDHUeQDAAGSmAErAASc6AYDAASdBwDHUPwbAAGSpgSPAASdOwAEnWcABJ9YAAcAASHrAAGPFAAAAAQPAASdhwAEn1gAAAAEBAcABJ2YAAACAlmADwAD8BQAAYAPAAPwFAT4CScABJ3McwAEngxzAASd9gMABJ3fAMdUSl84AAAAAwAD8KWMBAAFqwAEnhWADwAD8BcABK/cAwAD9MkrAASeUARzAASehasABJ5tgA8AA/AXAASvxg3cBAAGAwAEno8Ax1RIAwAD8HT9KwAEnrgEewAEntcAAZKoBAAEcwAEnx4DAASfBwDHVEqnxAAAAAMAA/UEABsAAZKqBI8ABJ9vAASfmwAErSwABwABIe8AAY8UAAAABA8ABJ/HAAStLAAAAAQEBwAEn+QAAAICWYAPAAPq3AABgA8AA/AUBPgNOwAEoDcABKBcAAMAASHxgA8AA+rcBHMABKB+AwAEoGcAx1e+XzgAAAADAAPrLTsABKC7AASgzAADAAEh9YAPAAPwFASMcwAEoO4DAASg1wDHV72MBAAGTAMAA/TKUkwFgA8AA/AVJwAEoTBzAAShagcABKFDAMdYKYwEAAWrAAShcYAPAAPwFwAEr9wDAAP0yPgdOwAEohcABKI4AAKpmYAPAAPwFARzAASiWgMABKJDAMdXvqlYAAAAAwAD9QE7AASj6wAEo/wAAg8hgA8AA/AUBHsABKQHAAGSpAQABg8ABKQrAMdadAEnAASkbHMABKSWAwAEpH8Ax1e9IAQABg8ABKSjAMdadAMAA/ShKwAEpMgGEwAEpOcAx1sk/PYzAASlFwDHWyR7AASlMwABkqwIAAoTAASlVwDHWyYLAASlbwDHWOABOwAEpbMABKXUAAMAASH5gA8AA/AUBHMABKaQcwAEplRzAASmDgcABKXnAMdYKgY0BAAEcwAEpjoPAASmFwDHWnZfOAAAAAMAA/CkAwAD6xYOIAQABHMABKZ5qwAEpmGADwAD8BcABK/FkAQABlADAAP0qAMAA+saqVgAAAADAAP1APYzAASmzwDHWyR7AASm6wABkqwIAAoTAASnDwDHWyYXAASnJwDHXUQBKwAEp2gGEwAEp4cAx1slJwAEp8hbAASn8gMABKfbAMdXvmqfAAP1MPgFKwAEqEAEewAEqF8AAZKsCAAI3BoLAASojwDHWOABJwAEqNRbAASo/gMABKjnAMdXvhq3AAP1KPgFKwAEqTgE3Bz4ETsABKm/AASp0AACDyGADwAD8BQGTQ8ABKn8cwAEqkIHAASqGwDHWCoFtAQABasABKpNgA8AA/AXAASv3AMAA/TU+Aj2JwAEqrMAx1gocwAEqwoHAASq4wDHWClABAAFqwAEqxGADwAD8BcABK/cAwAD6yD2LwAEq28Ax2GkcwAEq34PAASrbwDHYaWQBAAGUAMAA/So9i8ABKvHAMdhpHsABKvjAAGSrAgACg8ABKwHAMdhpgsABKwfAMdY4AErAASsUAR7AASsbwABkqwIAAoPAASskwDHYaR7AASsqwABkqgEAAYHAASs2wDHWCgAABsAAZKuBI8ABLB3AASwowAEs2QABwABIf8AAY8UAAAABA8ABLDDAASzZAAAAAgICwAEsNQAAAIPIYAPAAPwFAMABLD8AAACAlmADwAD8BQAAYAPAAPwFAT4EPYjAASxMwDHZiBzAASxZasABLFNgA8AA/AXAASvxg3cBAAEcwAEsYYDAASxcwDHZiGQBAAGBwAEsY8Ax2ZgAwAD9KgDAAPwdPYjAASxvwDHZiBzAASx8asABLHZgA8AA/AXAASvxg3cBAAEcwAEshIDAASx/wDHZiGQBAAEcwAEsnhzAASyWHMABLI9qwAEsiWADwAD8BcABK/GDvAEAATcKAMAA/CKDdwEAAYDAASyYwDHZiADAAPwdg7oBAAE3CgDAAPwhAMAA/SoAwAD8HT2IwAEsq8Ax2YgcwAEst4DAASyywDHZiIO7AQABHMABLL+AwAEsusAx2YiDvAEAATcGAMAA/CIAwAD8H0rAASzKAYDAASzRwDHZiAbAAGSsgSPAASzewAEs6cABLZUAAa4IwABjxQAAAAEDwAEs8MABLZUAAAABAQHAASz1AAAAg8hgA8AA/AUAAGADwAD8BQE+Az2IwAEtAcAx2vscwAEtDmrAAS0IYAPAAPwFwAEr8YN3AQABHMABLRaAwAEtEcAx2vtkAQABHMABLS8cwAEtJxzAAS0hasABLRtgA8AA/AXAASvxg7wBAAGWAMAA/CKDdwEAAYDAAS0pwDHa+wDAAPwdg7oBAAGWAMAA/CEAwAD9KgDAAPwdPYjAAS07wDHa+xzAAS1HgMABLULAMdr7g3cBAAEcwAEtT4DAAS1KwDHa+4O8AQABNwsAwAD8IgDAAPwdSsABLVsBHMABLWhqwAEtYmADwAD8BcABK/GDdwEAARzAAS1wgMABLWvAMdr7ZAEAARzAAS2KHMABLYIcwAEte2rAAS11YAPAAPwFwAEr8YO8AQABNw8AwAD8IoN3AQABgMABLYTAMdr7AMAA/B2DugEAATcPAMAA/CEAwAD9KgDAAPwdAAAxwqkAMcL+ADHDVQAxw74AMcTlADHFUwAxxcMAMcZQADHG8wAxx4wAMcjOADHJXgAxyfgAMcqkADHLTwAxzEEAMc4xADHPJgAxz+kAMdB/ADHRFQAx0asAMdKRADHUDwAx1OIAMdW/ADHZWAAx2s0AMdxbAAAAHALAAGTBgSPAAS2awAEtoMABNIUDwABIgAAAAV0BwABjMgJbWwAAAQTAAGTDgSPAAS3fwAEt4RiD5ABgA8AA/jUBKwEFwABkz4EjwAEt5sABLebAAS35AAAAA8ABLffAAS35AAAAAAAAAGADwABkwQE/AQkBwAEt5sAAYz0AAAAACAbAAGTFgSPAAS3+wAEuBcABLmwAAMAASEQAAAABA8ABLhDAAS5sAAAAAQEBwAEuGgAAAIKQYAPAAGJmAABgA8AA/esBPgM9F8ABLiYug+QfwAEuL8AA/lQAAAAAwABkwz0cwAEuQy6ajwEAAYDAAS5JwDHdgQDAAGTGSsABLlQBHMABLl4WwAEuWy6D5MAAZMMjAAAAAMAA/k4GwABkxoEjwAEuccABLn3AAS64AACajwFqwAEucmADwAD9UQIAAAEDwAEugsABLrgAAAACAQLAAS6MAAAIgpBgA8AAYmYAwAEukwAAIIC1WwFqAGADwAD9DnkAWwE+AT0cwAEuooDAAS6dwDHeJYRNAgJbWwIuKwDAAGJ5BsAAZMeBI8ABLr3AAS7JwAEu5gAAnu8BasABLr5gA8AA/VECAAABA8ABLtLAAS7mAAAAAgICwAEu3AAACIKQYAPAAGJmAMABLuIAACCAtVsAAFsBPgAGwABkyIEjwAEu68ABLvfAAS9GAACGfAFqwAEu7GADwAD9UQIAAAEDwAEvCcABL0YAAAACAgLAAS8YAAAIgpBgA8AAYo0AwAEvHgAAIIC1WwAAWwE+AT0cwAEvKhbAAS8nLoPkwABkw4KKAQABFsABLz0WwAEvNYDAAS8wwDHe95YmwABij4C9vK8AwAD+SQbAAGTJgSPAAS9LwAEvV8ABL6IAAIaMAWrAAS9MYAPAAP1RAgAAAQPAAS9nwAEvogAAAAICAsABL3QAAAiCkGADwABiowDAAS96AAAggLVbAABbAT4BPRzAAS+GFsABL4Mug+TAAGTDgooBAAEWwAEvmRbAAS+RgMABL4zAMd+GlibAAGKlgL28rwDAAP5JBsAAZMqBI8ABL6fAAS+zwAEwCAAAtAsBasABL6hgA8AA/VECAAABA8ABL8jAATAIAAAAAgICwAEv2gAACIKQYAPAAGK5AMABL+AAACCAtVsAAFsBPgE9HMABL+wWwAEv6S6D5MAAZMOCigEAARbAAS//FsABL/eAwAEv8sAx4BWWJsAAYruAvbyvAMAA/kkGwABkzIEjwAEwDcABMBLAATFhAADAAEiBwABjxQAAAAEDwAEwJ8ABMWEAAAABAQHAATA1AAAAgpBgA8AAYvkAAGADwAD6PwE+BUnAATBBIRbAATBWFsABMEuAwAEwRsAx4J6FOsAAYvuHf8AAYmtKwAEwYQEqP0nAATBzIRbAATCUFsABMH2AwAEweMAx4J60CMAAYv2BVcAA/ItKwAEwnQEqP0nAATCvIRbAATDNFsABMLmAwAEwtMAx4J60CcAAYv+BVcAA/ItKwAEw1gEqP0bAATDowAExGMABMPYAAACA7WADwABiZgAWwAExCIDAATEDwDHgnrQHwABi/D4BScABMSAhFsABMS+BwAExJcAx4UiHf8AAYmtKwAExOgEqP0rAATFSASkGwABkzYEjwAExZsABMXLAATSDAACGggFqwAExZ2ADwAD9UQIAAAEDwAExg8ABNIMAAAACAgLAATGRAAAIgpBgA8AAYvkAwAExlwAAIIC1WwAAWwE+B0nAATGgHMABMaQuwABIgcAAY8UBAAGAwAExusAx4c0AwABkzD4CPRzAATHMFsABMckug+TAAGTDgooBAAEkwAEx9QIngfwWwAEx7RbAATHegMABMdnAMeHNtAfAAGL8YcAA/NgAwAD+SUrAATH+AD89HMABMhAumo8BAAEWwAEyG4DAATIWwDHhzYU6wABi+wDAAGTGPRzAATIvFsABMiwug+TAAGTDgooBAAEngLUAwAD+SUbAATI/wAEyb8ABMk0AAACA7WADwABiZgAWwAEyX4DAATJawDHhzbQHwABi/D4CPRzAATJ6FsABMncug+TAAGTDgooBAAEngLUAwAD+ST0cwAEyjC6ajwEAAYLAATKSwDHiqgDAAGTGTsABMq3AATKzAACDGWADwAD6PwEqRsABMsDAATL4wAEyzgAAAIDtYAPAAGJmABbAATLggMABMtvAMeHNtAjAAGL9PgRJwAEzACGCwAEzBcAx4wo+AT0cwAEzGRbAATMWLoPkwABkw4KKAQABJ4C1AMAA/kk/PRzAATM2FsABMzMug+TAAGTDgooBAAEngLUAwAD+ST0cwAEzSC6ajwEAAYPAATNOwDHjJwDAAGTGPYrAATNgwDHjCilJwAEzeCEWwAEzlhbAATOCgMABM33AMeHNtAnAAGL/gVXAAPyLPgI9isABM6fAMeMKKkbAATO8wAEz8cABM8oAAACA7WADwABiZgAWwAEz3IDAATPXwDHhzbQJwABi/z4EScABM/shgsABNADAMeMKPgE9HMABNBYWwAE0Ey6D5MAAZMOCigEAASeAtQDAAP5JPz0cwAE0NxbAATQ0LoPkwABkw4KKAQABJ4C1AMAA/kk9HMABNEsumo8BAAGDwAE0UcAx4/0AwABkxj2KwAE0ZcAx4wopPwAAMd1VADHd7wAx3msAMd7BADHfUAAx398AMeBuADHhlwAx5JkAAAAIAsAAZNCBI8ABNIjAATSOwAE4ngPAAEiCAAABYAHAAP1RAAACBMAAZNOBI8ABNhvAATYvCcAASIPAAGPFAF0DwAD82gJgA8AA/etgA8AA/esBMsABNi1gA8AA/etgA8AA/esABMAAZNSBI8ABNkXAATZXCcAASITAAGPFAF0DwAD9nAFgA8AA/esBHsABNlLAAMEXAAFgA8AA/esAAAEFwABk3gAAAAAEAAADAAAAAAAAAAAAYAPAAGTQAT8BCQEAwAD9ZwAAAAAHBsAAZNaBI8ABNlzAATZhwAE2kQAAwABIKAAAAAEDwAE2Z8ABNpEAAAABAQHAATZvAAAAgL1gA8AA/esAAGADwAD6PwFKwAE2eAEcwAE2gxbAATZ4LsAASITAAGPFwABk1IMXAQABgMABNozAMeW3AMAA/agGwABk14EjwAE2lcABNprAATbNAADAAEgwAAAAAQPAATaiwAE2zQAAAAEBAcABNqoAAACAvWADwAD96wAAYAPAAPo/AUrAATazASEcwAE2vxbAATa0LsAASITAAGPFwABk1IMXAQABgMABNsjAMeYrAMAA/agGwABk2IEjwAE20cABNtbAATcGAADAAEgpAAAAAQPAATbhwAE3BgAAAAEBAcABNukAAACAvWADwAD96wAAYAPAAPo/AUrAATbyARzAATb9FsABNvIuwABIhMAAY8XAAGTUVgEAAYDAATcBwDHmoADAAP2pBsAAZNmBI8ABNwvAATcSwAE3SwAAwABIhQAAAAEDwAE3HcABN0sAAAABAQHAATclAAAAnrhgA8AA/esAAGADwAD96wFKwAE3MgEcwAE3QRbAATcyLsAASIPAAGPFwABk00sBAAGAwAE3QsAx5xMAwAD87gbAAGTagSPAATdPwAE3VMABN+oAAMAASIYAAAABA8ABN2HAATfqAAAAAgICwAE3aQAAAJ64YAPAAP3rAMABN3oAAADAAEiHYAPAAP3rAABcAT4CQCEcwAE3pBbAATeULsAASIPAAGPFwABk04dH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BsAAZTuBI8ABdsLAAXbfwAF31AAAr6EBasABdsNgA8AA/VECAAABA8ABdvfAAXfUAAAAAQEBwAF3BAAAAJYmYAO8wQAAYAPAAJUSAT4DTsABdyTAAXcvAACCa2ADwACVEgEfwAF3NbcAAgACasABd2ZgA7bbwADnF4DAAXd8wDIOqgA9HMABd5QWwAF3ii7AAEjewABjxcAAZTGvZQEAASbAAXeuAYHAAXeuwDIOw2ADtusAtnJKwAF3vwGBwAF3xsAyDsMGwABlPIEjwAF32cABd/bAAXjkAACvowFqwAF32mADwAD9UQIAAAEDwAF4DcABeOQAAAABAQHAAXgVAAAAliZgA7ytAABgA8AAlRIBPgNOwAF4NcABeEAAAIJrYAPAAJUSAR/AAXhGtwACAAJqwAF4d2ADttvAAOcogMABeIzAMg9vAD0cwAF4pBbAAXiaLsAASN7AAGPFwABlMa9lAQABJsABeL4BgcABeL7AMg+IYAO26wC2ckrAAXjPAYHAAXjWwDIPiAbAAGU9gSPAAXjpwAF5BsABef4AAK+lAWrAAXjqYAPAAP1RAgAAAQPAAXkfwAF5/gAAAAEBAcABeS0AAACWJmADvNMAAGADwACVEgE+A07AAXlNwAF5WAAAgmtgA8AAlRIBH8ABeV63AAIAAmrAAXmPYAO228AA5zmAwAF5psAyEDQAPRzAAXm+FsABebQuwABI3sAAY8XAAGUxr2UBAAEmwAF52AGBwAF52MAyEE1gA7brALZySsABeekBgcABefDAMhBNBsAAZT6BI8ABegPAAXoawAF67QAAr3wBasABegRgA8AA/VECAAABA8ABejjAAXrtAAAAAQEBwAF6RgAAAIJmYAO80wAAYAPAAJUcAT4DTsABel/AAXpkAACAvWADwACVHAEfwAF6crbaAgABasABeo5gA7ahwADlxwESgMABeqjAMhD5PRzAAXq/FsABerUuwABI3sAAY8XAAGUxr2QBAAEmwAF60wGBwAF608AyERJgA7a/ALZxSsABet4BgcABeuXAMhESBsAAZT+BI8ABevLAAXsJwAF7zgAAr34BasABevNgA8AA/VECAAABA8ABexrAAXvOAAAAAQEBwAF7KgAAAJYmYAO86AAAYAPAAJUcAT4DTsABe0TAAXtJAACAvWADwACVHAEfwAF7V7baAgABasAB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KIKkwABJxwAAXgMAAQIBYAPAAP3rAZ1QYAPAAPo/AVcDwABmoQBbAAGCtgAAAMAASchgA8AA/esAAYLMAAAAnVBgA8AA+j8ABALAAGangSiDKoMwhO8DwABJyQAAAWABwAD9UQAAAgTAAGapgSiDTYNRCYC9AGADwAD96wAEwABmqoEog62D1gbAAEnKAGADwABmpwFqg75gA8AAZqfAATiaAQXAAGaygSiDVYNbg3MBgLXAAGafAAODaINzAAAAAQEBg24AAASAvWADwAD96wAAYAPAAGanAT8CCAHAAGapgADAMpFLCQGDW8AA/WcAAAAAAwbAAGasgSiD24PvhAgBAIPBAWqD3GADwAD9UQIAAAEDg/iECAAAAAAAAABgA8AA/AUBSoP7ARaEABaD+y6AvcAAZqmDwcAA/fAGwABmroEohA2EIIQyAAAjAWqEDmADwAD9UQIAAAEDhCiEMgAAAAAAAABgA8AA/esBSoQuARaELi6AvcAAZqkGwABmr4EohDeESoTtAAGW9AAAAAEDhFKE7QAAAAEBAYRaAAAAgL1gA8AA/esAAGADwABmpwE+AUmEZhyEb4CEasAykiRIAQABJ8AAScsAwAD9+j4BSoSFAWqEjGADwABmp8ABOJo+AT0whKkfhLPAAPuXAQABJITiAyfAAEnMgITbwDKSJCeBSwAAADKRfAAykcUAMpIEADKSjgAAAAMCwABms4EohS2FM47eA8AASc0AAAFgAcAA/VEAAAYEwABmtYEohWyFjAbAAEnOAGADwABmswFqhYhgA8AAZrPAATipBMAAZraBKIWxhc8GwABJzwBgA8AAZrMBaoXLYAPAAGazwAD4JwTAAGa3gSiGIoZFBsAASdAAYAPAAGazAWqGQWADwABms8ABOLUEwABmuIEohqOGzwbAAEnRAGADwABmswFqhstgA8AAZrPAATjBBMAAZrqBKIbehuMJwABJ0sAAZp8AYAPAAPwFAATAAGa7gSiLEItXBikAXQPAAPypAWADwABmswFqixldA8AA/KkBYAPAAGazwAE4zQEFwABmyoEohueG7YcOAYC1wABmnwADhwKHDgAAAAEBAYcIAAAEwABJ0mADwAD8BQAAYAPAAGazAT8CCAHAAGa6gADAMpPCCQGG7cAA/WcAAAAACQbAAGa9gSiHE4cchzUBALl4AAAAAQOH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P8ABOYkAAGADwAD6P0nAAEZjIhzAAEZ0FMAARmfAMrMSFwBIAQABKQDAAP1eABzAAEaGFMAARn/AMrNnGABIAQABKQDAAP1ePgE9HMAARqIUwABGl8AyptIOACABAAEnwABKEgAAP0nAAEbTFMAARtfAMqa9DQBKwABG4gA/ScAAR0QhHMAAR1QUwABHSMAyslMVAEgBAAErAMAAeAU9HMAAR2uEwABHXcAypbsgAQABFMAAR2zAMrJTFQAAAD9JwABHfiEcwABHjRTAAEeCwDKyuRYASAEAASsAwAD9Xj0cwABHn4XAAEeWwDKl2CABAAEUwABHoMAysrkWAAAAP0nAAEexIRzAAEfCFMAAR7XAMrMSFwBIAQABKwDAAP1ePRzAAEfahsAAR8vAMqX1IAEAARTAAEfbwDKzEhcAAAA/ScAAR+4hHMAAR/kUwABH8sAys2cYAEgBAAErAMAA/V49HMAASAuHwABIAsAyphIgAQABFMAASAzAMrNnGAAAAD8GwABm54EowABIHMAASC/AAE/fAAHAAEoTAAAAAQPAAEg9wABP3wAAAAMDA8AASEoAAAClUWEDAWADwAD961wAwABIbgAAALoWYAPAAP3rAMAASH4AAADAAEoDYAPAAP3rAABgA8AAd/QBPgZJwABIjSIcwABImYHAAEiRwDK1ckgBAAErAMAA/foAHMAASKyCwABIpMAytYJIAQABKwDAAP36SsAASLUBKz9JwABIxyIcwABI04HAAEjLwDK1ckgBAAErAMAA/foBHMAASOaCwABI3sAytYJIAQABKwDAAP36PgI9HMAASQKAwABI98AytV4gAQABJ8AAShQAAErAAEk6ASs/TsAASV7AAElqAAC0SmADwAB39AEfwABJcMAAeC4AAAAAScAASYMcwABJj4HAAEmHwDK1ckgBAAEnh40AwAD9+j4BPRzAAEmug8AASaLAMrY5ufUAAAAAwAB4D0nAAEnQHMAASdyBwABJ1MAytXJIAQABJ531AMAA/fo+AD4DTsAASiTAAEoxAADAAEoVXQPAAPypAWADwAD96wEcwABKO4HAAEozwDK1coCmAQABJ4CnAMAA/g5JwABKTRbAAEpehMAASlHAMra3gVXAAPyLPgE9HMAASnyAwABKccAytV4gAQABJ8AAShYAAD9GwABKqcAASs3AAEq1AAAA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gv8GKQBdA8AA/KkBYAPAAGcEAWoAXQPAAPypAWADwABnBMABPDUEwABnCoEpg0+DTwbAAEpbAGADwABnBAFqAGADwABnBMABObgEwABnC4Epg5uDmwadHABgA8AAZwQBagBgA8AAZwTAATnRBMAAZwyBKYPQg9AGwABKXABgA8AAZwQBagBgA8AAZwTAATnqBMAAZw2BKYQWhBYGnR0AYAPAAGcEAWoAYAPAAGcEwAE6AwTAAGcOgSmEaYRpBsAASl0AYAPAAGcEAWoAYAPAAGcEwAE6HATAAGcPgSmEqYSpBrSiAGADwABnBAFqAGADwABnBMABOjYEwABnEIEphNGE0QbAAEpeAGADwABnBAFqAGADwABnBMABOlAEwABnEYEphQyFDAbAAEpfAGADwABnBAFqAGADwABnBMABOmoEwABnEoEphUmFSQbAAEpgAGADwABnBAFqAGADwABnBMABOoQEwABnE4EphZ2FnQbAAEphAGADwABnBAFqAGADwABnBMABOp4EwABnFIEphduF2wbAAEpiAGADwABnBAFqAGADwABnBMABOrgEwABnFYEphi2GLQbAAEpjAGADwABnBAFqAGADwABnBMABOtIEwABnFoEphniGeAbAAEpkAGADwABnBAFqAGADwABnBMABOu4EwABnF4Ephq2GrQbAAEplAGADwABnBAFqAGADwABnBMABOwoEwABnGIEphuKG4gbAAEpmAGADwABnBAFqAGADwABnBMABOyQEwABnGYEph1qHWgbAAEpnAGADwABnBAFqAGADwABnBMABO0AEwABnGoEph6SHpAbAAEpoAGADwABnBAFqAGADwABnBMABO1wEwABnG4Eph/6H/gbAAEppAGADwABnBAFqAGADwABnBMABO3YEwABnHIEpiDuIOwa0oQBgA8AAZwQBagBgA8AAZwTAATuSBMAAZx2BKYhjiGMGwABKagBgA8AAZwQBagBgA8AAZwTAATuuBMAAZx6BKYjaiNoGwABKawBgA8AAZwQBagBgA8AAZwTAATvKBMAAZx+BKYk9iT0GwABKbABgA8AAZwQBagBgA8AAZwTAATvmBMAAZyCBKYm1ibUGwABKbQBgA8AAZwQBagBgA8AAZwTAATwCBMAAZyGBKYpZilkGwABKbgBgA8AAZwQBagBgA8AAZwTAATweAQXAAGcl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FpHJLqTxwABneCeApxaR0y60VMAAZ3kngKcWkecuhR3AAGeFAAAy9V0AMvatADL4GQAy+s8AMvteADL77gAy/FQAMv1LADL9qAAAAAgCwABniYEqkfqR/5NvC7S3AAABYAHAAP1RAAAXBMAAZ4uBKpH/kf8JJwBgA8AA/AUABMAAZ42BKpH/kf8JKMAAZ2cAYAPAAP3rAATAAGeOgSqR/5H/BikAXQPAAPypAWADwABniQFqAF0DwAD8qQFgA8AAZ4nAAT0GBMAAZ4+BKpIRkhEGwABKkwBgA8AAZ4kBagBgA8AAZ4nAAPtABMAAZ5CBKpIkkiQGwABKlABgA8AAZ4kBagBgA8AAZ4nAAPwlBMAAZ5GBKpI2kjYGwABKlQBgA8AAZ4kBagBgA8AAZ4nAAPvcBMAAZ5KBKpJJkkkGwABKlgBgA8AAZ4kBagBgA8AAZ4nAAPw8BMAAZ5OBKpJWklYGwABKlwBgA8AAZ4kBagBgA8AAZ4nAAPvzBMAAZ5SBKpJqkmoGwABKmABgA8AAZ4kBagBgA8AAZ4nAAPuxBMAAZ5WBKpJ6knoGwABKmQBgA8AAZ4kBagBgA8AAZ4nAAPtpBMAAZ5aBKpKQkpAGwABKmgBgA8AAZ4kBagBgA8AAZ4nAAPuBBMAAZ5eBKpKmkqYGwABKmwBgA8AAZ4kBagBgA8AAZ4nAAPy5BMAAZ5iBKpKxkrEGwABKnABgA8AAZ4kBagBgA8AAZ4nAAPB+BMAAZ5mBKpLBksEGwABKnQBgA8AAZ4kBagBgA8AAZ4nAAPuZBMAAZ5qBKpLQktAGwABKngBgA8AAZ4kBagBgA8AAZ4nAAPAwBMAAZ5uBKpLmkuYGwABKnwBgA8AAZ4kBagBgA8AAZ4nAAPBKBMAAZ5yBKpMCkwIGwABKoABgA8AAZ4kBagBgA8AAZ4nAAPCWBMAAZ52BKpMTkxMGwABKoQBgA8AAZ4kBagBgA8AAZ4nAAPyfBMAAZ56BKpMfkx8GwABKogBgA8AAZ4kBagBgA8AAZ4nAAPBkBMAAZ5+BKpMwkzAGwABKowBgA8AAZ4kBagBgA8AAZ4nAAPxTBMAAZ6CBKpM+kz4GwABKpABgA8AAZ4kBagBgA8AAZ4nAAPwLBMAAZ6GBKpNMk0wGwABKpQBgA8AAZ4kBagBgA8AAZ4nAAPxrBMAAZ6KBKpNak1oGwABKpgBg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MxynhTO83MAAREjAAERrAR7AAER1tcMCAAKAwABEfsAzHKckwABEzQMnwABK2YDAAESowDMcpyfAAEq5AErAAETVAR/AAETgwABn2gIAAoDAAETzwDMcp2rAAEUKYAPAAGeJwAD8UwAGwABnyYEqwABFTsAARVbAAEbCBAHAAEraAAAAAQPAAEVpwABGwgAAAAEBAcAARXYAAACWJmADvOUAAGADwABnpwE+A0AWwABFnYDAAEWVwDMdvIUCvNjAAEWVwABFrQEewABFt7XDAgACgMAARcDAMx28JMAARg4DJ8AAStuAwABF6sAzHbwnwABK1gBAFsAARiWAwABGHcAzHbyHfbzawABGHcAARiwBHsAARja1wwIAAoDAAEY/wDMdvCTAAEZ2AyfAAErbgMAARl3AMx28J8AASsAASsAARn4BH8AARonAAGfaAgACgMAARpzAMx28asAARrNgA8AAZ4nAAPwLAAbAAGfKgSrAAEcRwABHGcAASTAEAcAAStwAAAABA8AARzTAAEkwAAAAAgICwABHTgAAAJYmYAO9AADAAEdlAAAAtK5gA8AAaK4AAGADwABnpwE+A0AWwABHkoDAAEeKwDMevYeAvNnAAEeKwABHnwEewABHqbXDAgACgMAAR7LAMx69JMAASAcDJ8AASt2AwABH6MAzHr0nwABK3gBAIRzAAEgtgcAASB/AMx7LSAEAASsAwABozsAASB/AAEg0AR7AAEg+tcMCAAKAwABIVMAzHr0kAAMnwABK34DAAEiywDMevSeBagBKwABIwwEfwABIzsAAZ9oDAAKAwABI4cAzHr1qwABI+GADwABnicAA8GQBtK6BwABJHsAzHssGwABny4EqwABJj8AASZfAAEwKBAHAAErgAAAAAQPAAEm3wABMCgAAAAQEBMAASdEAAACWJmADvQAAwABJ7gAAALSuYAPAAGiuAMAAShEAAACCkGADwABijQDAAEoqAAAAhKdgA7y3AABgA8AAZ6cBPgNAIRzAAEpMgsAASkfAMx/5SAEAASsAwABin8AASkfAAEpTAR7AAEpdtcMCAAKAwABKZsAzH9snwABK4QBAFsAASr2AwABKtcAzH9uHgLzZwABKtcAASsoBHsAAStS1wwIAAoDAAErqwDMf2yQABCfAAErigMAASybAMx/bJ4DZJ8AASuMASsAAS1wBH8AAS2fAAGfaBQACgMAAS3rAMx/basAAS5FgA8AAZ4nAAPAwA4KQgsAAS7PAMx/5tK6BwABL0MAzH+mEp4PAAEv3wDMgCQbAAGfMgSrAAExywABMesAATvwEAcAASuQAAAABA8AATJrAAE78AAAABAQEwABMtAAAAJYmYAO9AADAAEzRAAAAtK5gA8AAaK4AwABM9AAAAIKQYAPAAGKNAMAATQ0AAACEp2ADvLcAAGADwABnpwE+A0AhHMAATS+CwABNKsAzITxIAQABKwDAAGKfwABNKsAATTYBHsAATUC1wwIAAoDAAE1JwDMhHifAAErhAEAWwABNoIDAAE2YwDMhHoeAvNnAAE2YwABNrQEewABNt7XDAgACgMAATc3AMyEeJAAEJ8AASuWAwABOCcAzIR4ngNknwABK4wBKwABOPwEfwABOSsAAZ9oFAAKAwABOZsAzIR5qwABOfWADwABnicAA8EoDgpCCwABOpcAzITy0roHAAE7CwDMhLISng8AATunAMyFMBsAAZ82BKsAATzbAAE8+wABQQgQBwABK5gAAAAEDwABPUcAAUEIAAAABAQHAAE9eAAAAliZgA7zlAABgA8AAZ6cBPgJAFsAAT4WAwABPfcAzImGFArzYwABPfcAAT5UBHsAAT5+1wwIAAoDAAE+1wDMiYSTAAE/2AyfAAErngMAAT9PAMyJhJ8AASugASsAAT/4BH8AAUAnAAGfaAgACgMAAUBzAMyJhasAAUDNgA8AAZ4nAAPxrAAbAAGfOgSrAAFCFwABQjcAAUd0EAcAASukAAAABA8AAUKjAAFHdAAAAAgICwABQvAAAAJYmYAO85QDAAFDTAAAAhgVgA8AAYNIAAGADwABnpwE+AkAWwABQ+4DAAFDzwDMjGYUCvNjAAFDzwABRCwEewABRFbXDAgACgMAAUSvAMyMZJMAAUWwDJ8AASueAwABRScAzIxknwABK6ABKwABRdAEfwABRf8AAZ9oDAAKAwABRksAzIxlqwABRqWADwABnicAA/IUBhgWBwABR0MAzIycGwABnz4EqwABSI8AAUivAAFNZBAHAAErqAAAAAQPAAFI9wABTWQAAAAEBAcAAUkoAAACWJmADvOUAAGADwABnpwE+AkAiFsAAUnGAwABSacAzI+yFArzYASXAAFKNgMAAUoXAMyPsYAPAAH06wABSacAAUpwBHsAAUqa1wwIAAoDAAFKvwDMj7CTAAFMFAyfAAErngMAAUtnAMyPsJ8AASusASsAAUw0BH8AAUxjAAGfaAgACgMAAUyvAMyPsasAAU0JgA8AAZ4nAAPtpAAbAAGfQgSrAAFOgwABTqMAAVNYEAcAASuwAAAABA8AAU7rAAFTWAAAAAQEBwABTxwAAAJYmYAO85QAAYAPAAGenAT4CQCIWwABT7oDAAFPmwDMkuoUCvNgBJcAAVAqAwABUAsAzJLpgA8AAfTrAAFPmwABUGQEewABUI7XDAgACgMAAVCzAMyS6JMAAVIIDJ8AASueAwABUVsAzJLonwABK6wBKwABUigEfwABUlcAAZ9oCAAKAwABUqMAzJLpqwABUv2ADwABnicAA+4EABsAAZ9GBKsAAVQXAAFUNwABVdQQBtE8AAAABA8AAVR7AAFV1AAAAAQEBwABVJQAAAJYmYAO9DAAAYAPAAGenAT4BSsAAVTQBH8AAVT/AAGfaAgACgMAAVVLAMyWGasAAVWlgA8AAZ4nAAPy5AAbAAGfSgSrAAFXpwABV8cAAV0YEAcAASu0AAAABA8AAVgbAAFdGAAAAAwMDwABWDQAAAJYmYAO9DADAAFYkAAAAtK5gA8AAaK4AwABWSAAAAIUdXQPAAPypAWADwABiZgAAYAPAAGenAT4DTsAAVmfAAFZxAACvXGADwABnpwEfwABWd8AAZ9oEAAKAwABWk8AzJfVqwABWqmADwABnicAA8H4CtK6BwABWz8AzJgOFHYLAAFbtwDMmE0AcwABXEoPAAFcIwDMmNcAASqjAAGdnAAAAAMAAZ7TAAFcIwABXKwBKwABXMgGDwABXOcAzJjUGwABn04EqwABXfMAAV4TAAFf6BAG0RgAAAAEDwABXmMAAV/oAAAABAQHAAFeoAAAAlkdgA7zoAABgA8AAZ6cBPgFKwABXtgEfwABXwcAAZ9oCAAKAwABX1MAzJuRqwABX6mADwABnicAA+5kABsAAZ9SBKsAAWFfAAFhfwABZHgQBwABK7gAAAAEDwABYd8AAWR4AAAABAQHAAFiHAAAAliZgA7zoAABgA8AAZ6cBPgFKwABYlgEfwABYocAAZ9oDAAKAwABYtMAzJ1NqwABYy2ADwABnicAA8GQBtK4WwABZDBbAAFj5gMAAWPHAMydTtKC867SuvSAGwABn1YEqwABZQMAAWUjAAFoIBAHAAErvAAAAAQPAAFllwABaCAAAAAICAsAAWX8AAACWJmADvQAAwABZlgAAALGuYAPAAGKNAABgA8AAZ6cBPgFKwABZqgEfwABZtcAAZ9oDAAKAwABZyMAzJ99qwABZ32ADwABnicAA/J8BgpCBwABZ98AzJ+0GwABn1oEqwABaKsAAWjLAAFr2BAHAAErwAAAAAQPAAFpKwABa9gAAAAICAsAAWmEAAACWJmADvOgAwABaeQAAAIUdXQPAAPypAWADwABiZgAAYAPAAGenAT4BSsAAWo4BH8AAWpnAAGfaAwACgMAAWqzAMyhpasAAWsNgA8AAZ4nAAPyfAYUdgcAAWuTAMyh3BsAAZ7aBKsAAWvvAAFsVwABclAMASAFqwABa/GADwAD9UQIAAAEDwABbF8AAXJQAAAABAQHAAFsYAAAAg9ZbAABgA8AA+j8BPgJJwABbJR7AAFspwAD15gIAAi6AwABbOcAzKQMASsAAW0EBKT9KwABbUgEiIiIiIiIiJcAAW1+AwABbWcAzKQNgA8AAZ6cAHMAAW38WwABbdy6WJsAAZ6pIAQABFsAAW4gUwABbgsAzKQMAAWADwABnp5YmwABnqgDAAP1eABzAAFugFsAAW5sugmfAAGerSAEAARbAAFupFMAAW6PAMykDAAFgA8AAZ6eCZ8AAZ6sAwAD9XgAcwABbvhbAAFu5LoKQwABnrUgBAAEWwABbxxTAAFvBwDMpAwABYAPAAGengpDAAGetAMAAYp8AHMAAW+UWwABb1y60rsAAZ65IAQABFsAAW+4UwABb6MAzKQMAAWADwABnp7SuwABnrgDAAGjOAB7AAFwHgeQCAWADwABiZgIWwABcFS6FHcAAZ7EWwABcKhTAAFwkwDMpAwABYAPAAGenhR3AAGexAAAcwABcUxbAAFxELoSnwABnr0gBAAEWwABcXBTAAFxWwDMpAwABYAPAAGenhKfAAGevAMAA/V4AHMAAXH8WwABcdi6GBcAAZ7BIAQABFsAAXIgUwABcgsAzKQMAAWADwABnp4YFwABnsADAAP1eBsAAZ7eBKsAAXJnAAFyswABc/wAAIwFqwABcmmADwAD9UQIAAAEDwABctMAAXP8AAAAAAAAAYAPAAP3rAUrAAFzAASTAAFz/CyfAAErxFsAAXMwulibAAGeqJ4CnFsAAXNUugmfAAGerJ4CnFsAAXNsugpDAAGetJ4CnFsAAXOEuhR3AAGexJ4CnFsAAXPAutK7AAGeuJ4MhAAAzBCMAMwZLADMIcgAzCkYAMw7HADMQeQAzEXgAMxKHADMTpAAzFIUAMxXMADMWqQAzF3YAMxhDADMY5wAzGdMAMxqCADMa+AAzHHsAMx2QADMekQAzH68AMyDyADMiNQAzIu0AMyPAADMkjgAzJVwAMyXJADMmugAzJycAMyezADMoPQAzKM4AMyrhADMregAAACMCwABn24EqwABdBMAAXQnAAF3OC7S4AAABYAHAAP1RAAAOBMAAZ92BKsAAXQnAAF0JCScAYAPAAPwFAATAAGffgSrAAF0JwABdCQkowABnZwBgA8AA/esABMAAZ+CBKsAAXQnAAF0JBikAXQPAAPypAWADwABn2wFqAF0DwAD8qQFgA8AAZ9vAAT1jBMAAZ+GBKsAAXRnAAF0ZBsAASvIAYAPAAGfbAWoAYAPAAGfbwADxDQTAAGfigSrAAF0lwABdJQbAAErzAGADwABn2wFqAGADwABn28AA8TsEwABn44EqwABdMMAAXTAGwABK9ABgA8AAZ9sBagBgA8AAZ9vAAPEkBMAAZ+SBKsAAXT7AAF0+Bpo1AGADwABn2wFqAGADwABn28AA8K4EwABn5YEqwABdTsAAXU4GvGcAYAPAAGfbAWoAYAPAAGfbwADw3QTAAGfmgSrAAF1fwABdXwbAAEr1AGADwABn2wFqAGADwABn28AA8PUEwABn54EqwABdd8AAXXcGwABK9gBgA8AAZ9sBagBgA8AAZ9vAAPDFBMAAZ+iBKsAAXY7AAF2OBsAASvcAYAPAAGfbAWoAYAPAAGfbwADxUgTAAGfpgSrAAF2fwABdnwbAAEr4AGADwABn2wFqAGADwABn28AA8WoEwABn6oEqwABdssAAXbIGwABK+QBgA8AAZ9sBagBgA8AAZ9vAAPGCBMAAZ+uBKsAAXb/AAF2/BsAASvoAYAPAAGfbAWoAYAPAAGfbwADxmgEFwABn74EqwABdCcAAXQnAAF3OAQAAA8AAXQnAAF3OAAAAAgICwABdCQAABCdgA8AA/AUAwABdCQAABChgA8AA/esAAGADwABn2wE/AwgAwABn3YAAwDMudAgAwABn34EAwDMugwkAAMAA/WcAAAAAAQbAAGftgSrAAF0JwABdCcAAXc4AACMAAAABA8AAXQnAAF3OAAAAAAAAAGADwAD96wFKAAEPAC7AAGffAAAzLsAAMy77AAAAAQLAAGfwgSrAAF3qwABd8MAAcWEDrxIAAAFgAcAA/VEAAAUEwABn8oEqwABeEMAAXiAGg+cAYAPAAP3rAWrAAF4WYAPAAP3rwAE9lwTAAGfzgSrAAF40wABeOAmCkABgA8AAYmYABMAAZ/SBKsAAXk7AAF5SCYJnAGADwABn2wAEwABn9YEqwABebMAAXnQJg8EBasAAXldgA8AA/VECYAPAAPwFAATAAGf2gSrAAF6LwABemQmEpwBgA7y3AAEFwABoDIEqwABensAAXp7AAF9iAJVPAAPAAF6uwABfYgAAAAMCA8AAXrgAAACCkGADwABiZgDAAF7KAAAAgmdgA8AAZ9sAwABe1gAABISnYAO8twFqAGADwAD9DnkAYAPAAGfwAT8FCAHAAGf2ggDAMzAMCADAAGfzgMAAXvvAMy/sCADAAGf0gcAAXxXAMy/8CADAAGf1HsAAXzuB8gMAA4DAAF9HwDMv7IHAAF9NwDMv/ILAAF9TwDMwDAAJAcAAXp7AAP1nAAAAABEGwABn+IEqwABfZ8AAX2/AAGCuBAGvFQAAAAEDwABficAAYK4AAAABAQHAAF+VAAAAg0RgA8AAXUEAAGADwABn8AE+Bj0cwABfqoDAAF+jwDMwvIKUAQABasAAX7BgA8AA/evAAT2XAMAAXUNOwABfw8AAX8gAAIKQYAPAAGJmARzAAF/RgMAAX8rAMzC8hwgAAAAAwABda07AAF/xwABf9gAAgmdgA8AAZ9sBHMAAX/+AwABf+MAzMLyvuQEBYAPAAGfbAWrAAGAUXQPAAPypAWADwABn28ABPWMAwABdVk7AAGAuwABgPQAAhKdgA7y3ARzAAGBGgMAAYD/AMzC8wABENgAAAADAAF2IPRzAAGBlgMAAYF7AMzC8gowBAAFqwABgaWADwAD968ABPZcAwABdRErAAGBzAR/AAGB+wABoDAMAA4HAAGCPwDMw/4LAAGCVwDMxK4PAAGCbwDMxcwAGwABoBoEqwABgs8AAYLjAAGFnAACvFgAAAAEDwABgx8AAYWcAAAABAQHAAGDRAAAAhDtgA8AAXPIAAFwBPgU9HMAAYOKAwABg3cAzMh6ClAEAAWrAAGDoYAPAAP3rwAE9lwDAAFz3PRzAAGD3gMAAYPLAMzIehvgBAAEWwABhBS6CkMAAZ/MAwABdGD0cwABhFYDAAGEQwDMyHq+9AQABFsAAYR8ugmfAAGf0AMAAXQM9HMAAYS+AwABhKsAzMh7AAEQUAQABFsAAYUEuhKfAAGf2AMAAXTU9HMAAYVuAwABhVsAzMh6CjAEAAWrAAGFfYAPAAP3rwAE9lwDAAFz4BsAAaAqBKsAAYaDAAGGrwABmEAEAtK8AAAABA8AAYbXAAGYQAAAAAAAAAGADwAD96wE+BU7AAGHIwABhywAAg+RgA8AA/jUBH8AAYdHAAP5UAAAAAEFHwABh5RbAAGHtLoJnwABn9AsBwABiDGrAAGIMYAPAAGfbwADxDQA+Aj0cwABiIYDAAGIewDMzKYKKAQABJ8AASvwAwAD+SULAAGI3AAHAAGJVasAAYlVgA8AAZ9vAAPE7AD4CPRzAAGJpgMAAYmbAMzMpgooBAAEnwABK/QDAAP5JQsAAYn8AAcAAYp1qwABinWADwABn28AA8SQAPgI9HMAAYrSAwABiscAzMymCigEAASfAAEr+AMAA/klCwABizQABwABi62rAAGLrYAPAAGfbwADwrgA+Aj0cwABjBIDAAGMBwDMzKYKKAQABJ8AASv8AwAD+SULAAGMbAAHAAGM5asAAYzlgA8AAZ9vAAPDdAD4CPRzAAGNTgMAAY1DAMzMpgooBAAEnwABLAADAAP5JQsAAY2sAAcAAY4lqwABjiWADwABn28AA8MUAPgI9HMAAY6mAwABjpsAzMymCigEAASfAAEsBAMAA/klCwABjwgABwABj4GrAAGPgYAPAAGfbwADw9QA+Aj0cwABkAYDAAGP+wDMzKYKKAQABJ8AASwIAwAD+SULAAGQbAAHAAGQ5asAAZDlgA8AAZ9vAAPFSAD4CPRzAAGRTgMAAZFDAMzMpgooBAAEnwABLAwDAAP5JQsAAZGsAAcAAZIlqwABkiWADwABn28AA8WoAPgI9HMAAZKWAwABkosAzMymCigEAASfAAEsEAMAA/klCwABkvgABwABk3GrAAGTcYAPAAGfbwADxggA+Aj0cwABk8oDAAGTvwDMzKYKKAQABJ8AASwUAwAD+SULAAGUJAAHAAGUnasAAZSdgA8AAZ9vAAPGaAD4CPRzAAGVBgMAAZT7AMzMpgooBAAEnwABLBgDAAP5JQsAAZVwAPRzAAGVwgMAAZW3AMzMpgooBAAEWwABldi6CkMAAZ/MAwAD+SUnAAGWBIRzAAGWUFsAAZYUuhKfAAGf2SAEAASsAwAD9Xj4DPRzAAGWogMAAZaXAMzMpgooBAAEnmbYAwAD+ST0cwABlvYDAAGW6wDMzKYKKAQABFsAAZdIWwABlwy6Ep8AAZ/aAvby5AMAA/kk9HMAAZeKAwABl38AzMymCigEAASeGxgDAAP5JP0rAAGX4ARzAAGYCgMAAZf/AMzMpIwAAAADAAP5OBsAAZ/mBKsAAZlPAAGZbwABmuwQBrcoAAAABA8AAZmrAAGa7AAAAAQEBwABmdAAAAIKQYAPAAGJmAABgA8AAZ/ABPgFKwABmgAEfwABmi8AAaAwCAAKAwABmnMAzNttqwABmrmADwABn28AA8Q0ABsAAZ/qBKsAAZvDAAGb4wABnVgQBwABLBwAAAAEDwABnBsAAZ1YAAAABAQHAAGcQAAAAgpBgA8AAYmYAAGADwABn8AE+AUrAAGccAR/AAGcnwABoDAIAAoDAAGc4wDM3TGrAAGdKYAPAAGfbwADxOwAGwABn+4EqwABn3cAAZ+XAAGhTBAHAAEsIAAAAAQPAAGf7wABoUwAAAAEBAcAAaAUAAACCkGADwABiZgAAYAPAAGfwAT4BSsAAaBEBH8AAaBzAAGgMAgACgMAAaC3AMze9asAAaD9gA8AAZ9vAAPFqAAbAAGf8gSrAAGj+wABpBsAAaXAEAcAASwkAAAABA8AAaRrAAGlwAAAAAQEBwABpJAAAAIKQYAPAAGJmAABgA8AAZ/ABPgFKwABpMAEfwABpO8AAaAwCAAKAwABpTMAzOC5qwABpXmADwABn28AA8VIABsAAZ/2BKsAAacPAAGnLwABqLwQBwABLCgAAAAEDwABp3MAAai8AAAABAQHAAGnmAAAAgpBgA8AAYmYAAGADwABn8AE+AUrAAGnyAR/AAGn9wABoDAIAAoDAAGoOwDM4n2rAAGogYAPAAGfbwADxJAAGwABn/oEqwABqbcAAanXAAGsKBAGy0AAAAAEDwABqiMAAawoAAAACAgLAAGqSAAAAgpBgA8AAYmYAwABqpQAAAISnYAO8twAAYAPAAGfwAT4BSsAAarsBH8AAasbAAGgMAwADgMAAatfAMzkOasAAaulgA8AAZ9vAAPCugcAAavfAMzkeAAbAAGf/gSrAAGtHwABrT8AAa78EAa88AAAAAQPAAGtkwABrvwAAAAEBAcAAa3MAAACCkGADwABijQAAYAPAAGfwAT4BSsAAa38BH8AAa4rAAGgMAgACgMAAa5vAMzmUasAAa61gA8AAZ9vAAPDdAAbAAGgAgSrAAGwGwABsDsAAbMYEAcAASwsAAAABA8AAbCjAAGzGAAAAAgICwABsPgAAAIKQYAPAAGKNAMAAbFEAAACEp2ADvLcAAGADwABn8AE+AUrAAGxnAR/AAGxywABoDAMAA4DAAGyMwDM6BWrAAGyeYAPAAGfbwADwxYHAAGyzwDM6FQAGwABoAYEqwABs+MAAbQDAAG19BAHAAEsMAAAAAQPAAG0bwABtfQAAAAEBAcAAbSoAAACCkGADwABijQAAYAPAAGfwAT4BSsAAbTYBH8AAbUHAAGgMAgACgMAAbVLAMzqNasAAbWRgA8AAZ9vAAPD1AAbAAGgCgSrAAG2rwABts8AAbh0EAcAASw0AAAABA8AAbcvAAG4dAAAAAQEBwABt1QAAAIKQYAPAAGJmAABgA8AAZ/ABPgFKwABt4QEfwABt7MAAaAwCAAKAwABt/cAzOv5qwABuD2ADwABn28AA8YIABsAAaAOBKsAAbk3AAG5VwABvLAQBwABLDgAAAAEDwABucMAAbywAAAABAQHAAG56AAAAgpBgA8AAYmYAAGADwABn8AE+AUrAAG7wAR/AAG77wABoDAIAAoDAAG8MwDM7b2rAAG8eYAPAAGfbwADxggAGwABoBIEqwABv+cAAcAHAAHBrBAGFwwAAAAEDwABwFcAAcGsAAAABAQHAAHAfAAAAgpBgA8AAYmYAAGADwABn8AE+AUrAAHArAR/AAHA2wABoDAIAAoDAAHBHwDM73mrAAHBZYAPAAGfbwADxmgAGwABoB4EqwABwcMAAcIrAAHEjAwBIAWrAAHBxYAPAAP1RAgAAAQPAAHCMwABxIwAAAAEBAcAAcI0AAACD1lsAAGADwAD6PwE+A0nAAHCaHsAAcJ7AAPXmAgACLoDAAHCuwDM8WABKwABwtgEpP0nAAHDHISXAAHDRgMAAcMvAMzxYYAPAAGfwSsAAcN4BKj9KwABw8AEiHMAAcPwWwABw9y6CkMAAZ/NIAQABFsAAcQWAwABw/8AzPFiCkAAAwAD9XgAcwABxEhbAAHENLoJnwABn9EgBAAEWwABxG4DAAHEVwDM8WIJnAADAAP1eBsAAaAiBKsAAcSjAAHE7wABxXwAAIwFqwABxKWADwAD9UQIAAAEDwABxQ8AAcV8AAAAAAAAAYAPAAP3rAUrAAHFJASTAAHFfBSfAAEsPFsAAcVMugpDAAGfzJ4CnFsAAcVkugmfAAGf0J4MhAAAzMJIAMzH0ADMy9AAzNrEAMzcgADM3kQAzOAIAMzhzADM45AAzOWoAMznZADM6YQAzOtIAMztDADM7tAAzPCMAMz0RADM9fQAAABECwABoDYEqwABxgsAAcYjAAHacA68PAAABYAHAAP1RAAACBMAAaA+BKsAAcazAAHHABoPnAGADwAD96wFqwABxsmADwAD968ABPZwEwABoEIEqwABx2cAAcd4JgJYAYAPAAGDSAAUFwABoHIEqwABx48AAcePAAHH8AIC1wABnZwADwABx8MAAcfwAAAABAQHAAHH2AAAEgJZgA8AAYNIAAGADwABoDQE/AggBwABoEIAAwDM+WgkBwABx48AA/WcAAAAABcAAaB2BKsAAc+DAAHPgwAB0FQCqTwADwABz8MAAdBUAAAABAQHAAHP/AAAAgJZgA8AAYNIAAGADwABoDQE/AQoAwAB0DcAAaBwBAAGAwAB0D8AzPrQABcAAaB6BKsAAdFjAAHRYwAB0mwDAAEsRAAPAAHRywAB0mwAAAAEBAcAAdIUAAACAlmADwABhpAAAYAPAAGgNAT8BCgDAAHSTwABoHAEAAYDAAHSVwDM/DQAFwABoH4EqwAB0xcAAdMXAAHT9AKLqAAPAAHTYwAB0/QAAAAEBAcAAdOcAAACAlmADwABg0gAAYAPAAGgNAT8BCgDAAHT1wABoHAEAAYDAAHT3wDM/ZAAFwABoIIEqwAB1KMAAdSjAAHVvAJoCAAPAAHU8wAB1bwAAAAEBAcAAdVkAAACAlmADwABiRAAAYAPAAGgNAT8BCgDAAHVnwABoHAEAAYDAAHVpwDM/uwAGBsAAaBKBKsAAcgHAAHIJwABywQQBrxUAAAABA8AAcifAAHLBAAAAAQEBwAByMwAAAINEYAPAAF1BAABgA8AAaA0BPgQ9HMAAckiAwAByQcAzQBeClAEAAWrAAHJOYAPAAP3rwAE9nADAAF1DTsAAcmbAAHJsAACAlmADwABg0gEcwABydYDAAHJuwDNAF6/QAAAAAMAAXYE9HMAAcpCAwAByicAzQBeCjAEAAWrAAHKUYAPAAP3rwAE9nADAAF1ESsAAcp4BH8AAcqnAAGgcAQABgcAAcrfAM0BaAAbAAGgUgSrAAHLGwAByy8AAczUAAK8WAAAAAQPAAHLawABzNQAAAAEBAcAAcuQAAACEO2ADwABc8gAAXAE+Az0cwABy9YDAAHLwwDNA84KUAQABasAAcvtgA8AA/evAAT2cAMAAXPc9HMAAcwqAwABzBcAzQPOv0gEAARbAAHMYLoCWwABoEADAAF0uPRzAAHMpgMAAcyTAM0DzgowBAAFqwABzLWADwAD968ABPZwAwABc+AbAAGgYgSrAAHNuwABzecAAc6YBALSvAAAAAQPAAHODwABzpgAAAAAAAABgA8AA/esBPgFKwABziQEcwABzlhbAAHOQLoCWwABoEKbUAAAAAMAAYPIGwABoFYEqwAB1dMAAdY7AAHYXAwBIAWrAAHV1YAPAAP1RAgAAAQPAAHWQwAB2FwAAAAEBAcAAdZEAAACD1lsAAGADwAD6PwE+A0nAAHWeHsAAdaLAAPXmAgACLoDAAHWywDNCBwBKwAB1ugEpP0nAAHXLISXAAHXVgMAAdc/AM0IHYAPAAGgNSsAAdeYBKj9KwAB1+AEcwAB2BRbAAHX/LoCWwABoEEgBAAEWwAB2DoDAAHYIwDNCB4CWAADAAP1eBsAAaBmBKsAAdhzAAHYwwAB2SgEAg8EBasAAdh1gA8AA/VECAAABA8AAdjnAAHZKAAAAAAAAAGADwAD8BQFKwAB2PAEWwAB2QhbAAHY8LoCWwABoEIPBwAD9ZAbAAGgWgSrAAHZPwAB2YsAAdpoAACMBasAAdlBgA8AA/VECAAABA8AAdmrAAHaaAAAAAAAAAGADwAD96wFKwAB2cAEkwAB2mgMnwABLEhzAAHaFFsAAdn8ugJbAAGgQr9YAAAAAwABg8yeDIQAAMz/tADNAyQAzQX0AM0HSADNCkwAzQu4AM0NaAAAABgAAAYEqADNDfQAy8XcAMvL6ADL90QAzAbwAMywPADMvCAAzPcoAM0N7AAAABwAzQ30AAAAAAAIEwABoIcAASxOBKwAAAYD5AADAAL3MAAAAAAAFAsAAaCKBK4FegW2PTAfAAEsUAAEAAIPLYAPAAP1RAVsBYAHAAP1RAAABBMAAaCWBK4FtAASWSMAAaCEAWwExAFsDGgDAAGgnGgDAAGgoGgDAAGgpAQXAAGhDgSuD6YPvg/oBgLXAAGghAAOD+IP6AAAAAAAAAF0DwABoIgFfAwAAAT8BCQGD78AA/WcAAAAAFwbAAGgngSuBoIGogb8EQQAAAAABA4Gvgb8AAAEAAIPLYAPAAP1RAVsAAAAAXQPAAGgiAV8DAQABPTUAAAAAgm1bARoAwABoUzUAAAAAlklfAwEAASsTAAAGwABoKIErgfuCA4I3BEHAAEsVAAAAAQOCFII3AAABAACDy2ADwAD9UQFbAQEBghkAAACAlmADwAD8BQAAXQPAAGgiAV8DAQABPTUAAAAAgm1bARoAwABoVDUAAAAAlklfAwEAASsTAAAGwABoKYErgnaChIKvBEnAAEsWAAAAAQOCkYKvAAABAACDy2ADwAD9UQFbAQEBgpYAAACAlmADwAD8BQAAXQPAAGgiAV8DAQABPTUAAAAAgm1bARoAwABoZDUAAAAAlklfAwEAASsTAAAGwABoKoErgxGDGYPkBAHAAEsXAAAAAQODK4PkAAABAACDy2ADwAD9UQFbAgEBgzgAAAApXQPAAPxnAV8DAQAAAYNGAAAAwABLFmADwAD6PwFqg01gA8AA+j8AXQPAAGgiAV8DAQABPgFJg1uBg1/AM0XKPgFKg24BHoN5wABoWgEBXwMBAAGAg5XAM0W3AD4BSoOxAR+DvMAAaFUBAV8DAQABgIPTwDNFtwAGwABoLIErhEqEUoRXAQKAlgAAAAEDhFeEVwAAAAAAAABgA8AA/AUABsAAaDGBK4S/hMiE1wICgJYAAAABA4TNhNcAAAABAQGE0gAAAKzDYAPAAPwFAABcAAbAAGgzgSuFPIVBhVEAAlYAAAABA4VEhVEAAAABAQGFRwAAIMAARS9fAwAAAABgA8AA+j8ABsAAaDSBK4WHhYyFogACgKUAAAABA4WShaIAAAABAQGFngAAIJckXQPAAGgiAV8DAAAAAFwABsAAaDWBK4YMhhGGJAAChFkAAAABA4YXhiQAAAABAQGGGgAAIMAARS9fAwAAAABgA8AA+j8ABsAAaDaBK4aMhpeGsAAClv0AAAABA4aghrAAAAABAQGGrAAAIJckXQPAAGgiAV8DAAAAAF0DwABoIgFfAwAAAAbAAGg3gSuHBYcQh2oAAJcDAAAAAQOHHIdqAAAAAQEBhygAACCD1l0DwABoIgFfAwAAAABdA8AAaCIBXwMAAAE+AUqHNQEfh0DAAGhUAQFfAwAAARyHWBaHUi6AlsAAaCyDdwEAARaHYICHWsAzR46AlsAAaCwAwAD8HQAGwABoOIErh82H2IgrAACXAgAAAAEDh92IKwAAAAEBAYfpAAAgg9ZdA8AAaCIBXwMAAAAAXQPAAGgiAV8DAAABPgFKh/YBH4gBwABoVAEBXwMAAAEciBkWiBMugJbAAGgsgQYBAAEWiCGAiBvAM0gKgJbAAGgsAMAA/B4ABsAAaDmBK4iRiJyI8AAAwABLGAAAAAEDiKGI8AAAAAEBAYitAAAgg9ZdA8AAaCIBXwMAAAAAXQPAAGgiAV8DAAABPgFKiLoBH4jFwABoVAEBXwMAAAEciN0WiNcugJbAAGgsg3cBAAEciN8WiOaAiODAM0iIgJbAAGgshIwAAAAAwAD8IADAAPwdAAbAAGg6gSuJDIkRiRgAAoJCAAAAAQOJFokYAAAAAAAAAFwABsAAaDuBK4lRiVaJrwAAgxcAAAABA4leia8AAAABAQGJYQAAIMAARS9fAwAAAABgA8AA+j8BPgFKiXIBIRyJpxyJgBaJei6AlsAAaCyDdwEAARyJhZSDugEAASaJnwEWiZ8miZMAgImJwDNJNFsnAGADwAD8BQDAAPwhAMAA/B1IAQABkwDAAP0oBsAAaDyBK4sXiyOLbwAAg8wAAAABA4sri28AAAABAQGLNAAAICldA8AA/KkBXwMAAAAAXQPAAPxnAV8DAAABPgFKi0IBH4tNwABobQIBXwMAAAIugItkwDNJvgAGwABoPYEri7qLv4wHAAC10gAAAAEDi8mMBwAAAAEBAYvVAAAgg9ZdA8AAaCIBXwMAAAAAYAPAAPo/AT4BSoviASEci/8ci/AWi+ougJbAAGgsg3cBAAEWi/iAi/LAM0oagJbAAGgsAMAA/B1IAQABkwDAAP0oBsAAaC2BK4w3jECMVQEAgVUAAAABA4xIjFUAAAAAAAAAYAPAAPo/AUqMSwEcjFEWjEsugJbAAGgsSAEAAZMAwAD9KAbAAGgugSuMiYySjKoBAIOyAAAAAQOMnYyqAAAAAAAAAGADwAD6PwFKjKABIRyMphaMoC6AlsAAaCxIAQABkwDAAP0oBsAAaD6BK4z6jQWNLwAAnrYAAAABA40KjS8AAAAAAAAAXQPAAGgiAV8DAAABSo0QAR+NFMAAaFQBAV8DAAABFo0pLoCWwABoLAAGwABoL4ErjTSNSI1nAQCDwQFqjTVgA8AA/VECAAABA41RjWcAAAAAAAAAYAPAAPwFAUqNVAEcjWMWjVoWjVQugJbAAGgsg8HAAP1Jg4gBAAE3EwDAAP0sBsAAaD+BK41sjYaODgMASAFqjW1gA8AA/VECAAABA42Ijg4AAAABAQGNiQAAAIPWWwAAYAPAAPo/AT4DSY2WHo2awAD15gIAAi6AjarAM0vCAEqNsgEpP0mNwyEljc2AjcfAM0vCXQPAAGgiAV8DAABKjd0BKj9Kje8BHI38Fo32LoCWwABoLEgBAAEWjgWAjf/AM0vCgJYAAMAA/SgGwABoQIErjhOOJo9KAAAjAWqOFGADwAD9UQIAAAEDji6PSgAAAAAAAABgA8AA/esBPgZJjjccjkEWjjsugJbAAGgsSAEAAZMAwAD9KEqORwEnhAg/To5bjmEAACdgA8AA/AUBHI5zFo5pFo5jLoCWwABoLMAASxnAAPw7gY0BAAGUAMAA/StOjomOjAAAg+RgA8AA/jUBH46SwAD+VAAAAABOjqqOrwAArMNgA8AA/AUBHI6zlIO6AQABgI62wDNMjQDAAPwhQ47BHI7OgI7IwDNMjYFtAQABkwDAAP01PgM9HI7fgY7cwDNMv4KKAQABIyEcjvQcjuwWjuYugJbAAGgsg3cBAAGCju7AM0zaAMAA/B1IAQABkwDAAP0oJ8AASxonhAgBYAPAAP3rAMAA/kk9iI8NwDNMjRyPEoCPDcAzTI2BjQEAAZQAwAD9Kz2KjxzAM0zaHI8hgo8cwDNM2oO8AQABlADAAPwiSo8yARyPPIGPOcAzTL8jAAAAAMAA/k4AADNEXwAzRLcAM0UgADNFiQAzRjQAM0ZcADNGjQAzRsIAM0b4ADNHLgAzR24AM0fqADNIZgAzSPEAM0kUADNJngAzSfoAM0pwADNKswAzSvcAM0tBADNLmQAzTDcAM026AAAAFwLAAGhEgSuPeI9+kywDwABLGwABAACDy2ADwAD9UQFbAV0BwABoIgFfAwAAAAABBMAAaEeBK4+lj6sYlwzAAGghAGADwAD8BQADBcAAaFOBK4+wj7CPzgAAAAOPuI/OAAAAAAAAAF0DwABoRAFfAwAAAT8BCgCPwsAAaFQBAAGTAAXAAGhUgSuP04/Tj/4AwABLFQADj+WP/gAAAAEBAY/rAAAElwxgA8AA/AUAAF0DwABoRAFfAwAAAT8CCAHAAGhHgADAM06+CQCP+8AAaEMAAAAABcAAaFWBK5ADkAOQcwDAAEsXAAOQFpBzAAAAAQEBkCMAAAApXQPAAPxnAV8DAAAAAF0DwABoRAFfAwAAAT4BPRyQY4CQXMAzTxGD+AEAARaQay5WwABoTQDAAPx3AggAwABoR5MJAJBSwABoQwAAAAAHBsAAaEmBK5B4kIyQmwEAgJYBapB5YAPAAP1RAgAAAQOQkpCbAAAAAAAAAGADwAD8BQFKkJUBFpCVLpcMwABoIcAAaEcGwABoS4ErkKCQtZDcAgCAlgFqkKFgA8AA/VECAAABA5C6kNwAAAABAQGQvwAAAKzDYAPAAPwFAABcAT4BPReQyy6XDMAAaCGAkNTAM0/TwABoRwbAAGhNgSuQ4ZDykW4AAFYBapDiYAPAAP1RAgAAAQOQ9ZFuAAAAAQEBkPgAACDAAEUvXwMAAAAAYAPAAPo/AT4DTpENkRQAAJqjYAPAAPwFARaRFi6XDMAAaCHAAGhHPReRIi6XDMAAaCEckSkWkSIulwzAAGghwABoR4EGAQABHJEulIO6AQABJpFIARaRSCaRPACAkTLAM1AlWycAYAPAAPwFAMAA/CEAwAD8HsAAaEdKkVMBIRyRYRaRWi6XDMAAaCHAAGhHSAEAAYGRZMAzUD4AwAD9KAbAAGhOgSuRc5GEkbgAAIClAWqRdGADwAD9UQIAAAEDkYqRuAAAAAEBAZGWAAAglyRdA8AAaCIBXwMAAAAAXAE+AT0XkaEulwzAAGghHJGoFpGhLpcMwABoIcAAaEeBBgEAARaRr4CRq8AzUP6AlsAAaCwAwAD8HsAAaEcGwABoT4Erkb2RzpJQAACEWQFqkb5gA8AA/VECAAABA5HUklAAAAABAQGR1wAAIMAARS9fAwAAAABgA8AA+j8BPgNOkeyR8wAAmqNgA8AA/AUBFpH1LpcMwABoIcAAaEc9F5IBLpcMwABoIRySCBaSAS6XDMAAaCHAAGhHg3cBAAEckgsckg+Ug7oBAAEmkikBFpIpJpIdAICSE8AzUXpbJwBgA8AA/AUAwAD8IYSMAAAAAMAA/CAAwAD8HcAAaEdKkjUBIRySQxaSPC6XDMAAaCHAAGhHSAEAAYGSRsAzUZMAwAD9KAbAAGhQgSuSVZJskvgAAJb9AWqSVmADwAD9UQIAAAEDknWS+AAAAAEBAZKBAAAglyRdA8AAaCIBXwMAAAAAXQPAAGgiAV8DAAABPgNOkpCSmAAApEJgA8AA/AUBHJKhFpKaLpcMwABoIcAAaEeDdwEAARaSp4CSo8AzUmCAlsAAaCwAwAD8HT0XkrIulwzAAGghHJK5FpKyLpcMwABoIcAAaEeDdwEAARySvBaSwYCSvcAzUmCAlsAAaCyEjAAAAADAAPwgAMAA/B3AAGhHSpLMAR+S18AAaFQBAV8DAAABgZLswDNSgwAGwABoUYErkv2TDpMqAACCQgFqkv5gA8AA/VECAAABA5MTkyoAAAAAAAAAXAE+AT0XkxwulwzAAGghk8AAaEcAADNPZQAzT6kAM0/8ADNQ1AAzUVAAM1I2ADNTHgAzU10AAAAHAsAAaFaBK5Nak2CaNQPAAEscAAEAAIPLYAPAAP1RAVsBXQHAAGgiAV8DAAAAAAEEwABoWIErk56TowmAlgFqk4lgA8AA/VECYAPAAPwFAAEFwABoZIErk6iTrpPTAQAAA5O7k9MAAAABAQGTwQAABICWYAPAAPwFAABdA8AAaFYBXwMAAAE/AggBwABoWIAAwDNT7QkAk9DAAGhDAAAAAAcGwABoWoErk9iT4JTgBAHAAEsXAAAAAQOT+JTgAAABAACDy2ADwAD9UQFbAQEBlAUAAAApXQPAAPxnAV8DAQAAAF0DwABoVgFfAwEAAT4ETpQXlB0AAICWYAPAAPwFAZNPlCaUKwAAAVZhAwFfAwEAXAADlC6UnQAAAAEBAZQxAAAAwABFL18DAQAAAFwBPgFJlEQhHJRSg5RIwDNUoEgBAAErAMAA/V4+AT2JlGXAM1RzHJRrgZRlwDNUc4EGAQABHJRwlIO6AQABJpSKARaUiiaUfgCDlHTAM1SgWycAYAPAAPwFAMAA/CEAwAD8Hj89HJSrgJSkwDNUUYP4AQABgpSzwDNUhgDAAPx3SpS9AR+UyMAAaGQBAV8DAQABgZTWwDNUcwAGwABoXIErlOWU+pVAAgCAlgFqlOZgA8AA/VECAAABA5T/lUAAAAABAQGVBAAAAKzDYAPAAPwFAABcAT4BPTCVEB+VGsAA+5cBAAEnwABLHQAGwABoXoErlUWVVpWaAABWAWqVRmADwAD9UQIAAAEDlVmVmgAAAAEBAZVcAAAgwABFL18DAAAAAGADwAD6PwE+AT0wlW0flXfAAPuXAQABJ8AASx4ABsAAaF+BK5WflbCV/QAAgKUBapWgYAPAAP1RAgAAAQOVtpX9AAAAAQEBlcIAACCXJF0DwABoIgFfAwAAAABcAT4BPTCVzR+V18AA+5cBAAEnwABLHwAGwABoYIErlgKWE5cPAACCQgFqlgNgA8AA/VECAAABA5YYlw8AAAAAAAAAXAE+AUmWIRaWJS6BVcAAaC0+AD4BPTCW2h+W5MAA+5cBAAEnwABLIAAGwABoYYErlxSXJZgzAACEWQFqlxVgA8AA/VECAAABA5crmDMAAAABAQGXLgAAIMAARS9fAwAAAABgA8AA+j8BPgJJlz8Wl0MugVXAAGgtPgFKl+sBKj89MJgDH5gNwAD7lwEAASfAAEshAAbAAGhigSuYOJhPmjMAAJb9AWqYOWADwAD9UQIAAAEDmFiaMwAAAAEBAZhkAAAglyRdA8AAaCIBXwMAAAAAXQPAAGgiAV8DAAABPgNJmG8WmHMugVXAAGgtPgFKmRsBLj9JmTIWmTqAmTbAM1cugVXAAGgtPgFKmeIBHJntgJnpwDNXLp62AAAAAMAAaD4/PTCaAB+aCsAA+5cBAAEnwABLIgAAADNUIwAzVUkAM1WaADNV7wAzVkUAM1aZADNXBAAzV6cAAAAHAsAAaGWBK5o4mj6bLgPAAEsjAAEAAIPLYAPAAP1RAVsBXQHAAMD2AV8DAAAAAAIEwABoaIErmn+ahwnAAEskwABoIQBdA8AAaCIBXwMAAAAEwABoaYErmpmaoAnAAEslwABoIQBdA8AA/KkBXwMAAAABBcAAaG2BK5qlmqWa0gAAAAOatZrSAAAAAgICmrsAAATAAEskXQPAAGgiAV8DAAAAmsoAAATAAEslXQPAAPypAV8DAAAAAF0DwABoZQFfAwAAAT8DCAHAAGhogADAM1hZCAHAAGhpgQDAM1huCQGapcAAwPsAAAAAAQbAAGhrgSua15rzmywBAFwBaprYYAPAAP1RAgAAAQOa/JssAAAAAAAAAF0DwAD8ogFfAwAAAUqa/wEfmwPAAGh7AgFfAwAAAhabHRabFC7AAEskwABoIcAAaGiAlsAAaCwWmyQuwABLJcAAaCHAAGhpAAAAM1i3ADNZKQAAAAECwABoboErmzGbN53nA8AASyYAAQAAg8tgA8AA/VEBWwFgAcAA/VEAAV0BwAD8ogFfAwAABQTAAGhxgSubaptwGJcMwABoIQBgA8AA/AUABMAAaHKBK5t4m34YlxzAAGghAGADwAD8BQErBMAAaHOBK5uGm4sYwABLJ8AAaCEAYAPAAPwFASsEwABodIErm52bpAnAAEslwABoIQBdA8AA/KkBXwMAAAAEwABodYErm6qbsliIu8AAaCEAXwMAAAErAQXAAGh7gSubt5u3m+IAAAADm8eb4gAAAAICApvNAAAElwxgA8AA/AUAm9oAAATAAEslXQPAAPypAV8DAAAAAF0DwABobgFfAwAAAT8DCAHAAGhxgADAM1oTCAHAAGh0gQDAM1ohCQGbt8AA/WcAAAAAAgbAAGh3gSub55v5nAwBAF4BapvoYAPAAP1RAgAAAQOcAZwMAAAAAAAAAF8DAAABSpwEARacBC6Iu8AAaCHAAGh1BsAAaHmBK5wRnCKd5QAAXQFqnBJgA8AA/VECAAABA5wqneUAAAAAAAAAYAPAAPo/AT4BSZwzHJw+Fpw3LpcMwABoIcAAaHFIAQABkwDAAP0oPgFKnEwBKj4ESZxtHJx3FpxxLsAASyfAAGghwABoc0gBAAErAMAA/Sg+Aj0XnIoulxzAAGghHJykFpyaFpyTLpcMwABoIcAAaHHAAEsZwAD8O4GNAQABlADAAP0rwABocj0XnLEuwABLJ8AAaCEcnLuUg7oBAAEWnL4ulxzAAGghwABocgDAAPwhwABocz89F5zULoi7wABoISvAAGh1QUOc6xyc+Rac8i6XHMAAaCHAAGhygW0BAAGTAMAA/TU+BEmdCSEcnRwcnRMWnQ0uwABLJ8AAaCHAAGhzg3cBAAEWnRUulwzAAGghwABocQDAAPwdSAEAAZMAwAD9KD4BPRedLi6Iu8AAaCEcnUAWnTkuwABLJcAAaCHAAGh0SwEAARadQS6XHMAAaCHAAGhyAMAA/LjAAGh1Pz0XnVwuwABLJ8AAaCEcnWIWnVwuwABLJ8AAaCHAAGhzg7wBAAGUAMAA/CLAAGhzPRedcS6XHMAAaCEcnXcWnXEulxzAAGghwABocoGNAQABlADAAP0rwABockmdgyEcnZAWnYcuiLvAAGghwABodUgBAAErAMAA/V4+AUKdpQA/Sp3EASEcndQWncsuiLvAAGghwABodUgBAAErAMAA/V4AADNaagAzWqsAM1zVAAAAAgAAAYErADNc6AAzQ84AM04fADNTggAzV8wAM1k2ADNc5gAAAAUAM1zoAAAAAAACBMAAaHzAAEsogSwAAAKA+wAAUgABAQGCOIE+AAC8rAABAQG0lQAAAAMCwABofYEsghSCI4jhB4ZaAAABYAHAAP1RAAAAAAwGwABof4EsgwSDDIPsBAEAAAAAAQODEIPsAAAAAwICgxgAAACBsGADwAD96wCDLAAAAIRDYAO8sgABgzsAAACFNWADwAD6PwFqg0VgA8AA+j8AYAPAAGh9AT4CSYNTHoNXwABoiwEAAYCDZcAzXXsAPgFKg3QBH4N/wABorAMAAoCDi8AzXXuBg5HAM12JAYU1goOkwDNdlj9Kg7kBH4PEwABongIAAYCDz8AzXXsBhTWCg9/AM12WBsAAaIGBLIRPhFqEXgECgbAAAAABA4RehF4AAAAAAAAAYAPAAP3rAAbAAGiCgSyEoYSqhLIBAoU1AAAAAQOEsoSyAAAAAAAAAGADwAD6PwAGwABog4EshWaFb4V1AQKhvAAAAAEDhXWFdQAAAAAAAABgA8AAaH0ABsAAaISBLIYphjKGOAECmw4AAAABA4Y4hjgAAAAAAAAAYAPAAGh9AAbAAGiJgSyGmIadhsQAAsAASykAAAABA4athsQAAAABAQGGvAAAAJYmYAO8sgAAYAPAAPo/AAbAAGiFgSyG94cAhwkBAoZdAAAAAQOHCYcJAAAAAAAAAGADwAD6PwAGwABoioEsh3qHf4eWAALAAEsqAAAAAQOHioeWAAAAAQEBh5AAAACD1mADwABofQAAYAPAAPo/AAbAAGiGgSyHmoeih7EBAsAASysAAAABA4exh7EAAAAAAAAAYAPAAPwFAAbAAGiHgSyHtofIh88BAoRDAAAAAQOHz4fPAAAAAAAAAGADvLIABsAAaIuBLIgXiCOIYQABwABLLAAAAAEDiDCIYQAAAAEBAYg4AAAAiEdgA8AA/esAAGADwAD6PwFKiD4BIiEWiEGAiD/AM1+8gVXAAP3xAByIXByIToCITMAzX7yECwEAAZMAwAD9+UgBAAFqiF9gA8AA/AXAAJoPAMAA/SgGwABojIEsiKiItIjfAAHAAEstAAAAAQOIwIjfAAAAAQEBiMgAAACIR2ADwAD96wAAYAPAAPo/AUqIzgEhHojPwABoiwEAAYCI3cAzYDkAAAAzXVwAM14UADNePAAzXmQAM16MADNetAAzXuoAM18SADNfSgAzX3QAM1+aADNgFwAzYGYAAAAMAsAAaI2BLIjkiOqMbgOwygAAAWABwAD9UQABYAHAAGh9AgTAAGiPgSyJIokmCYGwAWqJCmADwAD9UQJgA8AA/esABMAAaJCBLIlBiUkJhTUBaokrYAPAAP1RAmADwAD6PwABBcAAaJ6BLIlOiVSJgQEAAAOJXomBAAAAAgEBiWQAAASBsGADwAD96wABiXAAAASFNWADwAD6PwFqiXpgA8AA+j8AYAPAAGiNAT8DCAHAAGiPgADAM2EdCAHAAGiQgQDAM2EsCQGJVMAA/WcAAAAACgbAAGiSgSyJhombicsBAKG8AWqJh2ADwAD9UQIAAAEDiaKJywAAAAAAAABgA8AAaH0BSomlASMWiaUuhTXAAGiQH4m0wABongEAARaJvy6BsMAAaI8ALgFgA8AAaI0GwABok4EsidCJ5YolAQCbDgFqidFgA8AA/VECAAABA4nsiiUAAAAAAAAAYAPAAGh9AUqJ7wEjFonvLoU1wABokC4figXAAGieAgABFooQLoGwwABojwGFNSkBYAPAAGiNBsAAaJmBLIoqijuKagAAwABLKQFqiitgA8AA/VECAAABA4pLimoAAAABAQGKWgAAAJYmYAO8sgAAYAPAAPo/AUqKZgEpBsAAaJSBLIpvioSKlgEAhl0BaopwYAPAAP1RAgAAAQOKjoqWAAAAAAAAAGADwAD6PwFKipEBKgbAAGiVgSyKm4qvisoBAIPBAWqKnGADwAD9UQIAAAEDiriKygAAAAAAAABgA8AA/AUBSoq7ARaKuy7AAEsrwABolgbAAGiagSyKz4rpi0IDAEgBaorQYAPAAP1RAgAAAQOK64tCAAAAAQEBiuwAAACD1lsAAGADwAD6PwE+AkmK+SEliwOAiv3AM2MYYAPAAGiNSosTASo/SoslARyLLC7AAEsqAQABJos4AYCLOMAzYxhgA8AAaH0AwABomwbAAGibgSyLR4tYi6kAAMAASyoBaotIYAPAAP1RAgAAAQOLY4upAAAAAQEBi2kAAACD1mADwABofQAAYAPAAPo/AUqLeQEiHIt+Fot5LoGwwABoj0gBAAEWi4eAi4HAM2OWgbDAAGiBAMAA/foAHIuYFouPLoU1wABokEgBAAEWi6GAi5vAM2OWhTXAAGiCAMAA/V4GwABoloEsi62LwYv6AQDAAEsrAWqLrmADwAD9UQIAAAEDi9GL+gAAAAAAAABgA8AA/AUBSovUARyL4haL2RaL1C6BsMAAaI+DwcAA/fBkAQABHIvnNwuDiAEAARaL8haL6S6FNcAAaJCDwcAA+kMAwAD9LADAAP0qBsAAaJeBLIv/jB2MLAEAhEMBaowAYAPAAP1RAgAAAQOMJYwsAAAAAAAAAGADvLIBSowoASsGwABonIEsjDGMRIxsAAAjAWqMMmADwAD9UQIAAAEDjEyMbAAAAAAAAABgA8AA/esBSoxSASMWjFIuhTXAAGiQJIxmAhaMXy6BsMAAaI8ngLwWjGgugbDAAGiPAWADwAD96wAAM2FyADNh0AAzYjEAM2J2ADNirQAzYu8AM2NqADNj/gAzZHcAM2SsADNlDgAAAAoCwABon4EsjHGMd4+bA8AASy4AAAFgAcAAaI0AAAEEwABooYEsjLqMwQmEQwFqjJtgA8AA/VECYAO8sgABBcAAaKyBLIzGjMaNLAAAAAOM0Y0sAAAAAwICjNkAAACBsGADwAD96wCM5AAABIRDYAO8sgABjPMAAACFNWADwAD6PwFqjP1gA8AA+j8AYAPAAGifAT8CCAHAAGihgQDAM2WlCQCNDcAAaJ4CAAGAjRPAM2WXAYU1go0jwDNlsgcGwABoo4EsjTGNRo2AAQChvAFqjTJgA8AA/VECAAABA41NjYAAAAAAAAAAYAPAAGh9AUqNUAEjFo1QLoU1wABokB+NX8AAaKwCAAIWjWsugbDAAGiPFo1xLoRDwABooQAuAWADwABonwbAAGikgSyNhY2ajfIBAJsOAWqNhmADwAD9UQIAAAEDjaGN8gAAAAAAAABgA8AAaH0BPgFKjacBIxaNri6FNcAAaJAuH43EwABorAMAAhaN0C6BsMAAaI8WjdYuhEPAAGihAYU1KQFgA8AAaJ8GwABoqIEsjfeOCI5FAADAAEspAWqN+GADwAD9UQIAAAEDjhiORQAAAAEBAY4nAAAAliZgA7yyAABgA8AA+j8BSo4zARyOOxaOMy6EQ8AAaKFIAQABgI4+wDNm/QDAAP1eBsAAaKWBLI5Kjl+OcAEAhl0Bao5LYAPAAP1RAgAAAQOOaY5wAAAAAAAAAGADwAD6PwFKjmwBKQbAAGimgSyOdY6JjrsBAIPBAWqOdmADwAD9UQIAAAEDjpKOuwAAAAAAAABgA8AA/AUBSo6VARyOpBiOm4PBwABolWQBAAEcjqk3DYOIAQABFo6zFo6rLoRDwABooYPBwAD9ZADAAP0sAMAA/SoGwABoqYEsjsCO2o9OAwBIAWqOwWADwAD9UQIAAAEDjtyPTgAAAAEBAY7dAAAAg9ZbAABgA8AA+j8BPgJJjuohJY70gI7uwDNn/2ADwABon0qPBQEqP0qPFwEiHY8kSAEAAYCPKMAzZ/8AwABomgAcjzoWjzIuhEPAAGihSAEAARaPQ4CPPcAzZ/+EQwAAwAD9XgbAAGiqgSyPU49mj5kAACMBao9UYAPAAP1RAgAAAQOPbo+ZAAAAAAAAAGADwAD96wFKj3QBJI+ZAxaPfxaPdy6EQ8AAaKGAvbyvJ4a1HY+NIwAAAADAAGicAAAzZfwAM2ZkADNm0QAzZzIAM2dpADNn1gAzaGgAM2jBAAAABwAAAYEsADNo6AAzXT4AM2CfADNlPwAzaOYAAAADADNo6AAAAAAAAgTAAGitwABLL4EtAAAFgPsAALfsAAEBAbDWgSUAALysAAEBAbSogWEAAMAAXOwAAIGPAACB4AAAgasAAMAAS1IAAQEBpKYAAAACAsAAaK6BLYKggqaa5gOwywAAAWABwAD9UQAACATAAGiwgS2DMINGBoPnAGADwAD96wFqgzZgA8AA/evAAT2hBMAAaLGBLYNmg44GwABLMQBgA8AAaK4BaoN2YAPAAGiuwADvqATAAGiygS2DrYPVBsAASzIAYAPAAGiuAWqDvWADwABorsAA77kEwABos4Etg/SEHQbAAEszAGADwABorgFqhAVgA8AAaK7AAPq7BMAAaLSBLYQ8hGcGwABLNABgA8AAaK4BaoRPYAPAAGiuwAE9pgTAAGi1gS2EhoSwBsAASzUAYAPAAGiuAWqEmGADwABorsABPbcEwABotoEthO+FAAmVaABgA8AA/AUABMAAaLeBLYVVhWIJuxoAYAPAAPwFAAEFwABo0oEthiaGLIZzAcAASzYAA4ZBhnMAAAACAQKGRwAABLsaYAPAAPwFAIZcAAAElWhgA8AA/AUBaoZwYAPAAPwFCQBgA8AAaK4BPwMIAcAAaLeAAMAzapoIAcAAaLaBAMAzaqgJAYYswAD9ZwAAAAAWBsAAaLmBLYWYhaCFtwEAuxsAAAABA4WzhbcAAAAAAAAAYAPAAPwFAUqFtgGTBsAAaLqBLYXxhfmGIQEAtz4AAAABA4YRhiEAAAAAAAAAYAPAAPwFAUqGFAEWhhQuuxrAAGi3BsAAaMSBLYZ4hoCHzwQBAAAAAAEDho2HzwAAAAMBA4aSAAAAuxpgA8AA/AUAhrUAAACqTV0DwAD8qQFgA8AA/esBagBgA8AA/Q55hskAAACVaGADwAD8BQFqht1gA8AA/AUJAGADwABorgE+AkmG5yIchvqBhuvAM2t/SAEAASsAwAD9XgEWhxSBhwXAM2t/gVXAAPyLPgFKhyUBH4cwwABo0gIAAoCHRsAza3GCh1XAM2udAD9Kh3MBH4d+wABo4wMAA4CHmsAza3GBh6nAM2t/goe5wDNrnQAGwABoxYEtiA+IF4lbBAGvFQAAAAEDiDeJWwAAAAEBAYhDAAAAg0RgA8AAXUEAAGADwABorgE+Bj0ciFiAiFHAM2xMgpQBAAFqiF5gA8AA/evAAT2hAMAAXUNOiGyIegAAuxpgA8AA/AUBHIiDgIh8wDNsTLDCAAAAAMAAXVBOiJ+IrgAAqk1dA8AA/KkBYAPAAP3rARyIt4CIsMAzbEyvMQAAAADAAF1UTojOiOAAAJVoYAPAAPwFARyI6YCI4sAzbEywwgAAAADAAF1QPRyI/4CI+MAzbEyCjAEAAWqJA2ADwAD968ABPaEAwABdREqJDQEeiRjAAGjEAwADgYkmwDNsh4KJNcAzbKuDiUXAM2zWAAbAAGjHgS2JkYmWilAAAK8WAAAAAQOJpYpQAAAAAQEBia8AAACEO2ADwABc8gAAXAE+BT0cicCAibvAM21fgpQBAAFqicZgA8AA/evAAT2hAMAAXPc9HInVgInQwDNtX7DIAQABFoneLrsawABotwDAAFz9PRyJ94CJ8sAzbV+vOAEAARaKBC6qTcAAaL4AwABdAT0cih6AihnAM21fsMgBAAEWiiculWjAAGi2AMAAXP09HIpEgIo/wDNtX4KMAQABaopIYAPAAP3rwAE9oQDAAFz4BsAAaLuBLYq/isiK3AEAuzEAAAABA4rVitwAAAAAAAAAYAPAAPo/AUqK2AEpBsAAaMiBLYtti3uLkQAAuzAAAAABA4uHi5EAAAAAAAAAYAPAAGiuAUqLjQEuBsAAaMmBLYuWi6SMHQAAwABLNwAAAAEDi7mMHQAAAAEBAYu+AAAAlWhgA8AA/AUAAGADwABorgFKi9oBHovewABoxAMAAxaL7C67GsAAaLcWi/suqk3AAGi+gIwLwDNujwAGwABovIEtjFGMWoxqAQCjwgAAAAEDjGKMagAAAAAAAABgA8AA+j8BSoxlASoGwABovYEtjKGMqoy7AQDAAEs4AAAAAQOMtIy7AAAAAAAAAGADwAD6PwFKjLcBKQbAAGi+gS2M+40MjS4BAKpNAAAAAQONG40uAAAAAAAAAF0DwAD8qQFgA8AA/esBSo0eAWqNHl0DwAD8qQFgA8AA/euDIwbAAGjKgS2Nco1/ja0AALc/AAAAAQONl42tAAAAAAAAAF0DwAD8qQFgA8AA/esBSo2dAWqNnV0DwAD8qQFgA8AA/euDIwbAAGi/gS2Nso3Eji4BALs0AAAAAQONz44uAAAAAAAAAGADwABorgFKjdIBIxyN5BaN0i6VaMAAaLZIAQABkwDAAP0oLh6OAsAAaMQCAAIWjhAuuxrAAGi3Fo4fLqpNwABovgABYAPAAGiuBsAAaMCBLY5njnKPhAEAtK8AAAABA458j4QAAAAAAAAAYAPAAP3rAT4GTo6PjpIAAIPkYAPAAP41AR+OmMAA/lQAAAAAPRyOr4COrMAzcEuCigEAASeD1wDAAP5JPRyOwoCOv8AzcEuCigEAARaOyC63PsAAaLoAwAD+SUmO5hyO/RaO6i67G8AAaLmAlwEAAZMAwAD9ND4CPRyPDYCPCsAzcEuCigEAASeApwDAAP5JPRyPIoCPH8AzcEuCigEAARyPQxyPKC63PwAAAADAAGjKWAEAASeApwDAAPx7AMAA/kk/PRyPXICPWcAzcEuCigEAASeDIQDAAP5JSo9sARyPdoCPc8AzcEsjAAAAAMAA/k4GwABoy4Etj7iPv5CXAAC7LwAAAAEDj9CQlwAAAAAAAABgA8AA/esBPgROj+aP6QAAg+RgA8AA/jUBH4/vwAD+VAAAAAA9HJAGgJADwDNxXoKKAQABJJAiAifAAEs5FpAULrsawABotwDAAP5JSZApIRyQPxaQLS6VaMAAaLZIAQABkwDAAP0oPgE9HJBQgJBNwDNxXoKKAQABJJByAifAAEs6FpBgLpVowABotgDAAP5JP0qQfwEckImAkIbAM3FeIwAAAADAAP5OBsAAaMyBLZCckK+Q5AAAIwFqkJ1gA8AA/VECAAABA5C3kOQAAAAAAAAAYAPAAP3rAUqQvQEkkOQDJ8AASzsckM4uuy8AAAAAwABoyyeDIQbAAGjBgS2Q6ZD2kSkBAMAASzwAAAABA5EDkSkAAAAAAAAAYAPAAEtkAUqRBgEekQrAAEuUAgACapEeYAPAAGh9wADuhi4ABsAAaM2BLZEukTOScQAAXwAAAAEDkTiScQAAAAEBAZFHAAAAg9ZgA8AAaK4AAGADwAD6PwE+AkmRVB6RWMAA9eYCAAIugJFowDNysgBKkXABKT9KkYEBIiIiHJGbFpGNLrsawABot0gBAAEWkaSAkZ7AM3KyuxrAAGi3AMAA/SgAHJHVFpHCLrsbwABouUgBAAEWkd6AkdjAM3KyuxvAAGi5AMAA/SgAHJITFpIBLpVowABotkgBAAEWkhyAkhbAM3KylWjAAGi2AMAA/SgAHpI5wABo0AIAAhaSSC6qTcAAaL4Wkl6AkljAM3Kyqk3AAGi+AAbAAGjCgS2SoZK1k20BAIPBAWqSomADwAD9UQIAAAEDkr6TbQAAAAAAAABgA8AA/AUBPgFKksQBHpLTgfMCAAIWkuUuqk3AAGi+HpMFgfECAAIWkxAuuxrAAGi3HpMzgfECAAIWkz4ulWjAAGi2FpNgFpNRLqpNwABovmHAAPzYAAAABsAAaM6BLZNyk4yT4gMASAFqk3NgA8AA/VECAAABA5OOk+IAAAABAQGTjwAAAIPWWwAAYAPAAPo/AT4CSZOcISWTpoCToMAzdDNgA8AAaK5Kk7kBKj9Kk8sBHJPSLl8BAAEmk9gBgJPYwDN0M2ADwABorgDAAGjNBsAAaM+BLZPnk+yaKQAAuywAAAABA5P8mikAAAABAQGUEAAAAJqIYAO9DwAAYAPAAPo/AT4HTpQmlD0AAIUfYAPAAPwFARaUSoCUP8AzdKK0qr0STpRmlH0AAMAASz1gA8AA/AUBFpSKgJR/wDN0orSsvR5OlKaUtQAAor5gA8AA/AUBHJTOgZS3wDN0uWQBAAGClNDAM3TXAMAA/SpJlOwclP4WlPAuuxrAAGi3gJcBAAGDlQDAM3T3AMAA/TRKlRABKj9JlSIclT4WlSYutz7AAGi6YwEAAYGVQMAzdLkAwAD9MkqVWAEqP0mVaiEclYAWlW4ulWjAAGi2SAEAAZMAwAD9KD4BSZWOIRyVpBaVki6VaMAAaLZIAQABFpWygJWnwDN0ooS+vRUAwAD9KEqVwgEqPz9JldsWlfoWleqAld/AM3SihMG9FIFVwAD8iz4CQByXDhaW9i63PsAAaLqBawEAAYOXEcAzdPcAwAD9M5b2lx8ASpcoARaXPhaXLy6qTcAAaL6BVcAA/Is+B0mXWhyXdhaXXi63PsAAaLqAlwEAAYGXeMAzdLkAwAD9NEqXkAEqP0Acl8MWl6sutz7AAGi6SAEAAYGXxsAzdLkAwAD9KJerl9wASZflHJf8FpfpLrsbwABouYCXAQABgpf+wDN01wDAAP00SpgWASo/TpgvmDkAAMAASz5gA8AA/AUBk06YUZhhAACEwV0DwAD8qQFgA8AA/esBFphugJhjwDN0ooTBvRRGmIWYtZiRAAAAgL1gA8AA/esAHJiZLrc/AAAAAMAAaMo+A06YxJjKAACewGADwAD6PwEqQUOZKRyZOoSZMMAzdoRjAQABFplMhZk8wDN2l2HAAPzYAMAA/TI+AkmZYByZaYaZZMAzdsBIAQABHJl7hZlswDN2l0sBAAGEmXzAM3aEAMAA/LgAwAD9+j4CPY+ZlsAzdt8pQpmwAD89jJnNwDN2hByZ1oSZzcAzdoRkAQABlADAAP0qSZnsIYeZ8cAzdt9KmfgBKj9KmhQBKQbAAGjQgS2aLpo6muQAAcAASz8AAAABA5pDmuQAAAACAgKaUQAAAIMZXQPAAPypAWADwAD96wCaZQAAAJqLXQPAAPypAWADwAD96wAAYAPAAPo/AT4CRZpzAZp8mn4AAGJgA8AA/AUBkwEcmoWCmoPAM3fjYwEAARaajYCah8Azd6thwAD82ADAAP0yAYqalcAzd+McmpaCmpXAM3fjZAEAAZQAwAD9Kj4BSZqiIRyarxyaq4CapsAzd6tLAQABgpqswDN34wDAAPy4SAEAARyauIGassAzd8BLAQABgpq5wDN34wDAAPy4AMAA/fpKmr0BKj9KmtUBKQAAM2rvADNrHAAza1IAM2wsADNtPwAzbhMAM25AADNubQAzbs8AM278ADNvKwAzb3AAM2+1ADNwIAAzcTMAM3H9ADNyTAAzcpMAM3OHADN0CgAzdIIAM3eJADN4ggAAABYCwABo04EtmxKbGKGwA8AAS0AAAAFgAcAAaK4AAAIEwABo1YEtm2SbcgmqTQFqm0ZgA8AA/VECXQPAAPypAWADwAD96wAEwABo14Etm4mbnwnAAEtBwABorQBdA8AA/KkBYAPAAP3rAAIFwABo44Etm6SbpJxlAAAAA5u2nGUAAAADAwObwgAAALsaYAPAAPwFAJveAAAAqk1dA8AA/KkBYAPAAP3rAJvyAAAAlWhgA8AA/AUAAGADwABo0wE/AQoAnBLAAGjkBAAEgJwowDN5Z4GcN8AzeXWCnEfAM3mKMZxiYAPAAP3rAAAFwABo5IEtnGqcap1KAJVPAAOchZ1KAAAABAQEnIoAAAC7GmADwAD8BQCcngAABKpNXQPAAPypAWADwAD96wCcuAAAAJVoYAPAAPwFAJzQAAAEwABLQV0DwAD8qQFgA8AA/esAAGADwABo0wE/BAgBwABo1YEAwDN59wgBwABo14MAwDN6GgwAQBadBoGc98AzefeDssAA/Iyc950QAAkAnSHAAGjSAgACgJ0pwDN56YKdOMAzegwACAbAAGjZgS2dT51knXMBAKPCAWqdUGADwAD9UQIAAAEDnWydcwAAAAAAAABgA8AA+j8BSp1vASkGwABo2oEtnXidjZ2fAQDAAEs4AWqdeWADwAD9UQIAAAEDnZednwAAAAAAAABgA8AA+j8BSp2aASoGwABo24EtnaSduJ3jAQC7GwFqnaVgA8AA/VECAAABA53LneMAAAAAAAAAYAPAAPwFAUqdzgEWnd0Wnc4uqk3AAGjVYcAA/NgGwABo3IEtneid/J45AQC3PgFqnelgA8AA/VECAAABA54UnjkAAAAAAAAAYAPAAPwFAUqeFwEcniUWnhcuuxrAAGi3gY0BAAEWnicuuxvAAGjbAMAA/SsGwABo3YEtnj6eU56LAQC7MQFqnj9gA8AA/VECAAABA55gnosAAAAAAAAAYAPAAPo/AUqeYwEcnnIWnmMuqk3AAGjVSAEAARaedS7AAEtBwABorcAAaNcAwAD9XgbAAGjfgS2ekJ6qn04AALswAWqekWADwAD9UQIAAAEDnrafTgAAAAAAAABgA8AAaK4BSp68AR+ewMAAaOQEAAQWnuMuuxrAAGi3HJ74Lrc/AAAAAMAAaOAWnxoulWjAAGi2HJ8zLrc/AAAAAMAAaOAABsAAaOCBLZ9Tn2ygmAAAtz8Bap9UYAPAAP1RAgAAAQOfhKCYAAAAAAAAAF0DwAD8qQFgA8AA/esBPgRJn40hFp+pFp+SLsAAS0HAAGitwABo14FVwAD8i0qfsgEWn7kuwABLQcAAaK3AAGjXPz0cn+0Wn9YuwABLQcAAaK3AAGjXgKUBAAEWn/Quqk3AAGjVAMAA/Ls9HKAgFqAJLsAAS0HAAGitwABo14CuAQABNKAlA6AloHAAAAACAgKgLQAAAIMZYAPAAP3rAKA7AAAAmotgA8AA/esAAGADwAD8BQE+AUqgSwEcoFiAoFLAM30egksBAAGBoGLAM30sAMAA/fsAwAD8vEqgdwEWoH4uwABLQcAAaK3AAGjXBsAAaOGBLaCdoLChrgAAuy8BaqCeYAPAAP1RAgAAAQOgwaGuAAAAAAAAAGADwAD96wE+BE6g16DaAACD5GADwAD+NQEfoODAAP5UAAAAAD0coPeAoPTAM32xgooBAAEkoTkFJ8AASzkWoQUuuxrAAGi3J8AAS0IcoSwWoR0uqk3AAGjVWAEAASeBiwDAAPx7J5mXAMAA/klJoUAhHKFWFqFELpVowABotkgBAAGTAMAA/Sg+AT0coWeAoWTAM32xgooBAAEkoYkCJ8AASzoWoXculWjAAGi2AMAA/kk/SqGWARyhoIChncAzfbEjAAAAAMAA/k4AADN6hgAzer0AM3r2ADN7PgAze5UAM3vxADN8YgAzfXwAM35xAAAACAAAAYEtADN+nAAzaVcAM3jjADN+mgAAAAIAM36cAAAAAAACBMAAaOXAAEtDgS4AAAWBYAAAuEsAAQEBsRKBlgAAvKwAAIG6AADAAIbjAACB3wAAwABiYQAAggAAAMAAYJ8AAAAAACQCwABpHIEuouui+qMZB8AAS0QAAAFgAcAA/VEAAAABBcAAaSAAAAAABAAAAwAAAAAAAAAAAGADwABpHAE/AQkBAMAA/WcAAAAAAQbAAGkegS6jCKMToxcBAoC9AAAAAQOjF6MXAAAAAAAAAGADwAD96wAAADN/SwAzf3MAAAABAsAAaSGBLqMcoyujuwfAAEtFAAABYAHAAGkcAAAAAQXAAGklAAAAAAQAAAMAAAAAAAAAAABgA8AAaSEBPwEJAQDAAGkgAAAAAAEGwABpI4Euo4+jnaO5AAKDWQAAAAEDo6GjuQAAAAEBAaOwAAAAhgVgA8AAYNIAAGADwABg0gAAADN/ygAzgAAAAAABAsAAaSaBLqO+o82khQfAAEtGAAABYAHAAGkcAAAAAQXAAGkrAAAAAAQAAAMAAAAAAAAAAABgA8AAaSYBPwEJAQDAAGkgAAAAAAIGwABpKIEupDKkQKRtAAKDWQAAAAEDpESkbQAAAAICAqRTAAAAhbVgA8AAYNIApGcAAACFt2ADwABg0gAAYAPAAGDSAAbAAGkpgS6kcaRxpIMAAq8/AAAAAQOkdqSDAAAAAgICpHcAAACFtVsApH0AAACFt1sAAFsAAAAzgFcAM4CbADOA0AAAAAICwABpLIEupIikjqbAA8AAS0cAAAFgAcAA/VEAAWABwABpIQEEwABpLoEupNWk3wmAvQFqpL1gA8AA/VECYAPAAP3rASeEjAEFwABpMoEupOSk6qT7AQAAA6T5pPsAAAAAAAAAYAPAAGksAT8BCQGk6sAA/WcAAAAAAQbAAGkwgS6lAKUapr4AAINZAWqlAWADwAD9UQIAAAEDpR6mvgAAAAEBAaUtAAAAhgVgA8AAYNIAAGADwABg0gE+AkmlPR6lQcAAaREBAAGApUfAM4GFAD4DSaWnFqW0gKWrwDOBhcAARc/AAGDoPgE9iKXLwDOBhR6l1sAAaQkBAAEapefAAPoTAD9Opg2mGQAAwABLSGADwABhKwEmpg0BgKYbwDOBhWADwABhK0qmeQEepoDAAGkIAQABHKaNFqaagaaOwDOB56pmwABhLYSMAAAAAMAA+i0AP0qmrwErAAAzgVsAM4I7AAAAAQLAAGkzgS6mw6bJqa4DwABLSQAAAWABwAD9UQABYAHAAGkhAQTAAGk1gS6nEKcfCYC9AWqm+GADwAD9UQJgA8AA/esBJ6GRAQXAAGk5gS6nJKcqpzsBAAADpzmnOwAAAAAAAABgA8AAaTMBPwEJAacqwAD9ZwAAAAABBsAAaTeBLqdAp1qprAAAg1kBaqdBYAPAAP1RAgAAAQOnXqmsAAAAAQEBp20AAACGBWADwABg0gAAYAPAAGDSAT4DT6d9p4sAAAHAAEtKYQMBYAPAAGDSYAPAAGDSAAOnkKjgAAAAAQEBp58AAACGBWADwABg0gAAYAPAAGDSAT4DSaexFqe+gqe1wDODK7pMwABg2T4CTqfgp+wAAMAAS0hgA8AAYSsBJqfgAYKn7sAzgytgA8AAYStKqAABHqgHwABpCQEAARyoERaoHoOoEsAzg1mqZsAAYS2BxAAAAADAAPogAD9JqDcWqESCqDvAM4MrtVzAAGDaPgJOqGyoewAAwABLS2ADwABhRQEmqGwBgqh9wDODK2ADwABhRUqojwEeqJbAAGkLAQABHKijFqizg6ikwDODvquYwABhR4HEAAAAAMAA+soAP0qozwErSajnFqj0gKjrwDOC7LpMwABg2T4CTqkUqSAAAMAAS0hgA8AAYSsBJqkUAYCpIsAzguxgA8AAYStJqTIcqUsWqUKCqTbAM4QoqmbAAGEtSAEAARqpVcAA+hMAwAD9Xj4BSqllAR6pbMAAaQsBAAEcqXkoAAAAAAAAAACBxAAAAADAAPrKAD8/SqmSARypnoGpmcAzgwcgAQABgKmfwDOC7AAAAAAzgsIAM4S0AAAAAQLAAGk6gS6psam3qvUDwABLTAAAAWABwAD9UQABYAHAAGkhAQTAAGk8gS6p+6oFCYC9AWqp42ADwAD9UQJgA8AA/esBJ5npAQXAAGlAgS6qCqoQqh4BAAADqhyqHgAAAAAAAABgA8AAaToBPwEJAaoQwAD9ZwAAAAABBsAAaT6BLqojqj2q8wAAg1kBaqokYAPAAP1RAgAAAQOqQarzAAAAAQEBqlAAAACGBWADwABg0gAAYAPAAGDSAT4CSapgFqptgKpkwDOFZbpKwABg1j4CTqqPqpwAAKplYAPAAGFdASaqjwGAqp7AM4VlYAPAAGFdSqquAR6qtcAAaQ0BAAEhFqrOgarBwDOFk5zywABhYgA/SqrkASsAADOFOwAzhdkAAAABAsAAaUGBLqs2q0WvTgfAAEtNAAABYAHAAP1RAAFgAcAAaSYAAQXAAGlGgS6rd6t9q5EBAAADq4+rkQAAAAAAAABgA8AAaUEBPwEJAat9wAD9ZwAAAAACBsAAaUOBLquWq7CvHQAAg1kBaquXYAPAAP1RAgAAAQOrtK8dAAAAAgICq8MAAACFtWADwABg0gCr1wAAAIW3YAPAAGDSAABgA8AAYNIBPgZPq+Sr8gAAAcAAS0phAwJgA8AAYNJgA8AAYNJgA8AAYNIAA6v3rV4AAAACAgKsBgAAAIW1YAPAAGDSAKwaAAAAhbdgA8AAYNIAAGADwABg0gE+AkmsKSIWrDKDrC3AM4a6ukzAAGDZABasQYSsO8Azhsi6TMAAYNk+BU6sY6xrAADAAEtOYAPAAGErASasYwGDrG3AM4a6YAPAAGErTqyMrJUAAMAAS09gA8AAYSsBJqyMAYSsl8AzhshgA8AAYStOrK2suQAAwABLUGADwAD6EQEcrLsuwABLUQIAAhaszIWsxMAzhwiqZsAAYS0WrN+GrNbAM4crqmbAAGEtAMAAaURJrPIcrQKHrPbAM4dOSAEAASsAwAD9XkqtCwErP0qtIAEerSfAAGkJAQABh60xwDOHTgA/Sq1NAStJrbAWrbmArbTAM4ZnwABFz8AAYOg+AT2Irc7AM4ZnHq3VwABpCQEAARqt5sAA+hMAP0mt9xauAYGt+8AzhnXAAEXPwABg6D4BPYmuFsAzhnUerh7AAGkJAQABGq4vwAD6EwA/Tq5RrlgAAIF2YAPAAGErASauUQEcrl+CrlrAM4aQIAIAAoCuYMAzhmeBrmbAM4Z1AABgA8AAYStJrnIhHK59g652wDOILUgBAAErAMAAYT4+AUqu3AEeruPAAGkIAQABFq73g67wwDOILapmwABhLQA/Sq8MAYOvE8AziC0GwABpRIEuryKvKa9MAALAAEtRAAAAAQOvMa9MAAAAAgICrzkAAACFtWADwAD6EQCvRgAAAIW3YAPAAPoRAABgA8AA+hEAAAAzhj0AM4ipADOI7wAAAAICwABpR4Eur1GvV7BFA8AAS1IAAAFgAcAAaUEAAAEEwABpSYEur5+vqQmAvQFqr4dgA8AA/VECYAPAAP3rASeDdwEFwABpToEur66vtK/FAQAAA6/Dr8UAAAAAAAAAYAPAAGlHAT8BCQGvtMAAaUYAAAAAAgbAAGlLgS6vyq/dsBAAAMAAS1EBaq/LYAPAAP1RAgAAAQOv5bAQAAAAAgICr+0AAACFtWADwAD6EQCv+gAAAIW3YAPAAPoRAABgA8AA+hEBSrAEARywCYCwBMAziaCDdwEAAYGwC8Azia4AwAD6KgbAAGlMgS6wFbAhsEMAAK8/AWqwFmADwAD9UQIAAAEDsCawQwAAAAICArAnAAAAhbVbALAtAAAAhbdbAABbAUqwNwEcsDyAsDfAM4oNg3cBAAGBsD7AM4oWAAAAADOJdAAzieMAM4o+AAAAAgLAAGlPgS6wSLBOsToDwABLUwAAAWABwABpQQAAAQTAAGlRgS6wlbCfCYC9AWqwfWADwAD9UQJgA8AA/esBJ4EGAQXAAGlWgS6wpLCqsLoBAAADsLiwugAAAAAAAABgA8AAaU8BPwEJAbCqwABpRgAAAAACBsAAaVOBLrC/sNKxBQAAwABLUQFqsMBgA8AA/VECAAABA7DasQUAAAACAgKw4gAAAIW1YAPAAPoRALDvAAAAhbdgA8AA+hEAAGADwAD6EQFKsPkBHLD+gLD5wDOK74EGAQABgbEAwDOK/QDAAPorBsAAaVSBLrEKsRaxOAAArz8BarELYAPAAP1RAgAAAQOxG7E4AAAAAgICsRwAAACFtVsAsSIAAACFt1sAAFsBSrEsARyxMYCxLMAzi1yBBgEAAYGxM8Azi2UAAAAAM4rDADOLMgAzi40AAAACAsAAaVeBLrE9sUOyMQPAAEtUAAABYAHAAGlBAAABBMAAaVmBLrGLsZUJgL0BarFzYAPAAP1RAmADwAD96wEng7sBBcAAaV6BLrGasaCxsQEAAAOxr7GxAAAAAAAAAGADwABpVwE/AQkBsaDAAGlGAAAAAAIGwABpW4EusbaxybH8AADAAEtRAWqxt2ADwAD9UQIAAAEDsdGx/AAAAAICArHZAAAAhbVgA8AA+hEAseYAAACFt2ADwAD6EQAAYAPAAPoRAUqx8AEcsfWAsfDAM4w+g7sBAAGBsffAM4xMAMAA+iwGwABpXIEusgGyDbIvAACvPwFqsgJgA8AA/VECAAABA7ISsi8AAAACAgKyEwAAAIW1WwCyGQAAAIW3WwAAWwFKsiMBHLIogLIjwDOMq4O7AQABgbIqwDOMtAAAAAAzjBIAM4yBADOM3AAAAAICwABpX4EusjSyOrPwA8AAS1UAAAFgAcAAaUEAAAEEwABpYYEusoWykAmAvQFqsm1gA8AA/VECYAPAAP3rASeDugEFwABpZoEuspWym7KvAQAAA7Ktsq8AAAAAAAAAYAPAAGlfAT8BCQGym8AAaUYAAAAAAgbAAGljgS6ytLLHs7oAAMAAS1EBarK1YAPAAP1RAgAAAQOyz7O6AAAAAgICstcAAACFtWADwAD6EQCy5AAAAIW3YAPAAPoRAABgA8AA+hEBPgJJs1AiHLNagbNUwDONm4CXAQABHrNgwAD6PgEAATdkAADAAPowARyzeoGzdMAzjZtjAQABGrODwAD6EwDAAPouSrOJASs/SrOaARyzpoCzocAzjY2DugEAARyzr4GzqcAzjZuqVgAAAADAAPo5AMAA+igGwABpZIEus7+zy7PuAACvPwFqs8BgA8AA/VECAAABA7PQs+4AAAACAgKz0QAAAIW1WwCz1wAAAIW3WwAAWwFKs+EBHLPmgLPhwDOOT4O6AQABgbPpwDOOWAAAAAAzjWEAM44lADOOgAAAAAICwABpZ4Eus/Oz+bm5A8AAS1YAAAFgAcAAaUEAAAEEwABpaYEutEW0UAmAvQFqtC1gA8AA/VECYAPAAP3rASeDvAEFwABpb4EutFW0W7RwAQAAA7RutHAAAAAAAAAAYAPAAGlnAT8BCQG0W8AAaUYAAAAAAwbAAGlrgS60dbSPuPcAAINZAWq0dmADwAD9UQIAAAEDtJO49wAAAAICArSiAAAAhbVgA8AAYNIAtLYAAACFt2ADwABg0gAAYAPAAGDSAT4CSbT8FrUFgLUAwDOPL7pMwABg2T4FTrUltTEAAMAAS0hgA8AAYSsBJrUlAYC1M8Azjy9gA8AAYStOtUa1TAAAgJZgA8AA+hEBFrVagrVOwDOPa6pmwABhLU61cbWAAADAAEtXYAPAAPoRARy1iIO1gsAzj46DdwEAARq1isAAaOgAwAD6Kkm1mRy1o4O1ncAzj45jAQABGrWswAD6EwDAAPouPgJOuAC4CQABwABLWGADwAD6EQEeuA/AAPo+AQABOap2AD2MuDDAM4+uHLg/hLgwwDOProGNAQABHLhNGrhJwAD6FYOIAQABHLhfhLhQwDOProN3AQABhbhhwDOP+gDAAPoqAMAA+iMAwAD6Ij9JuHohHLiEg7h+wDOPjkgBAAGEuIfAM4+uAMAA/V4+AT2IuKHAM48vHriowABpCQEAAYS4ssAzj64APz9KuNUBHbjig1kCAAKAuOfAM48vgbjtwDOPPQDAAGlDBsAAaWyBLrj8uQ+5gwAAwABLUQFquP1gA8AA/VECAAABA7kXuYMAAAACAgK5HwAAAIW1YAPAAPoRALksAAAAhbdgA8AA+hEAAGADwAD6EQE+Akm5ORy5Q4G5PcAzkPpjAQABGrlMwAD6EwDAAPouSrlSASs/SrljARy5b4C5asAzkOyDvAEAARy5eIG5csAzkPqqVgAAAADAAPo5AMAA+ikGwABpbYEuuYi5lLm3AACvPwFquYlgA8AA/VECAAABA7mZubcAAAACAgK5mgAAAIW1WwC5oAAAAIW3WwAAWwFKuaoBHLmvgLmqwDORi4O8AQABgbmywDORlAAAAAAzjwUAM5DAADORYQAzkbwAAAADAsAAaXCBLrm8ucu7mwfAAEtZAAABYAHAAP1RAAFgAcAAaSYAAQXAAGl1gS65/roEuhkBAAADuhe6GQAAAAAAAABgA8AAaXABPwEJAboEwAD9ZwAAAAACBsAAaXKBLroeuji7bwAAg1kBarofYAPAAP1RAgAAAQO6PLtvAAAAAgICuksAAACFtWADwABg0gC6XwAAAIW3YAPAAGDSAABgA8AAYNIBPgJJumwiFrp1gLpwwDOSUrpKwABg1gAWuoWBun/AM5JgukrAAGDWPgROuqe6sAAAwABLWmADwABhXQEmuqcBgLqywDOSUmADwABhXU660LraAADAAEtbYAPAAGFdASa60AGButzAM5JgYAPAAGFdTrruuvoAAMAAS1BgA8AA+j8BHLr8LsAAS1wCAAIWuw+CuwbAM5KgnPLAAGFiFrskg7sawDOSw5zywABhYgDAAGlzSrs2AR67PcAAaQ0BAAGEu0jAM5LmAD9Ku2ABKwbAAGlzgS67dLt5u5kAAsAAS1wAAAABA7uCu5kAAAACAgK7iAAAAIW1YAPAAPo/ALuTAAAAhbdgA8AA+j8AAGADwAD6PwAAADOSKAAzk0MAM5OJAAAAAgLAAGl2gS67nrukvJkDwABLXQAAAWABwABpcAAAAQTAAGl4gS678bv8CYC9AWq72WADwAD9UQJgA8AA/esBJ5fKAQXAAGl9gS68AbwHvBwBAAADvBq8HAAAAAAAAABgA8AAaXYBPwEJAbwHwABpdQAAAAACBsAAaXqBLrwhvDK8YwAAwABLXAFqvCJgA8AA/VECAAABA7w7vGMAAAACAgK8QQAAAIW1YAPAAPo/ALxMAAAAhbdgA8AA+j8AAGADwAD6PwFKvFYBIoC8VsAzlDoAgbxewDOUSAbAAGl7gS68aLx0vJcAAK8/AWq8aWADwAD9UQIAAAEDvHm8lwAAAAICArx6AAAAhbVbALyAAAAAhbdbAABbAUq8igEiJryKAYC8isAzlJxgA8AA+j8AJrySAYG8ksAzlKVgA8AA+j8AADOUDgAzlHIAM5TZAAAAAgLAAGl+gS68nLyivZUDwABLXgAAAWABwABpcAAAAQTAAGmAgS687rz5CYC9AWq81mADwAD9UQJgA8AA/esBJ5fLAQXAAGmFgS68/r0EvRgBAAADvRa9GAAAAAAAAABgA8AAaX4BPwEJAb0EwABpdQAAAAACBsAAaYKBLr0dvS69XwAAwABLXAFqvR5gA8AA/VECAAABA703vV8AAAACAgK9PQAAAIW1YAPAAPo/AL1IAAAAhbdgA8AA+j8AAGADwAD6PwFKvVIBIoC9UsAzlYoBgb1awDOVmAbAAGmDgS69ZL1wvZMAAK8/AWq9ZWADwAD9UQIAAAEDvXW9kwAAAAICAr12AAAAhbVbAL18AAAAhbdbAABbAUq9hgEiJr2GAYC9hsAzlexgA8AA+j8BJr2OAYG9jsAzlfVgA8AA+j8AADOVXgAzlcIAM5YpAAAAAgLAAGmGgS69mL2nwABC7gfAAEtfAAABYAHAAP1RAAFgAcAAaSYAAQXAAGmOgS693b3jvfsBAAADvfm9+wAAAAAAAABgA8AAaYYBPwEJAb3jwAD9ZwAAAAAFBsAAaYiBLr4AvhrAAEJhAACDWQFqvgFgA8AA/VECAAABA74ewABCYQAAAAICAr4tAAAAhbVgA8AAYNIAvkEAAACFt2ADwABg0gAAYAPAAGDSAT4ET75OvlwAAAHAAEtKYQMCYAPAAGDSYAPAAGDSYAPAAGDSAAO+YcAAQdUAAAACAgK+cAAAAIW1YAPAAGDSAL6EAAAAhbdgA8AAYNIAAGADwABg0gE+Akm+kyIWvpyDvpfAM5cWukvAAGDbABa+q4S+pcAzlyS6S8AAYNs+Bk6+zb7VAADAAEtgYAPAAGElASa+zQGDvtfAM5cWYAPAAGElTr72vv8AAMAAS2FgA8AAYSUBJr72AYS/AcAzlyRgA8AAYSVOvxQAAADAAEtiWwBJvykiFr8yg78twDOXFrpMwABg2QAWv0GEvzvAM5ckukzAAGDZPgNOv2W/bQAAwABLTmADwABhKwEmv2UBhb9vwDOXZGADwABhK06/k7+cAADAAEtPYAPAAGErASa/kwGGv57AM5eHYAPAAGErPY+/ssAzl6ocv8AuwABLUQIAAha/0RS/ycAzl90IAKpmwABhLRa/5BS/28AzmAAJAKpmwABhLQDAAGmLPgE9j8AAQArAM5eqHMAAQBguwABLYwIAAhbAAEAphcAAQCHAM5dkq5jAAGEnFsAAQD+GwABANsAzl4ermMAAYScAwABpjEnAAECnHMAAQLeHwABAq8Azl6pIAQABKwDAAP1eSsAAQMABKz9JwABA1SIiIhbAAEDeg8AAQNnAM5cWukzAAGDZABbAAEDthMAAQOfAM5ckukzAAGDZACEcwABA9y7AAEtkAAAAAMAAaYkBHMAAQQUuwABLZQAAAADAAGmKPgJAJcAAQTqHwABBLsAzl6pgA8AA+hHAAEEuwABBQwBKwABBUAEewABBV8AAaQkBAAEmwABBYQGHwABBYcAzl6pgA8AA+hEAPgFKwABBigEewABBkcAAaQsBAAEmwABBngGHwABBnsAzl6pgA8AA+rcAP0rAAEHEAStOwABB6sAAQfEAAIF2YAPAAGDSARzAAEH4gsAAQfPAM5bqIAIAAoDAAEH5wDOWwYHAAEH/wDOWzwAAScAAQgscwABCFoPAAEIPwDOZnEgBAAErAMAA/V5KwABCHwGDwABCJsAzmZw/SsAAQjIBHsAAQjnAAGkHAQABJsAAQlYBg8AAQlbAM5mcYAPAAGElAAbAAGmJgS7AAEJmwABCa8AAQn4AAMAAS2QAAAABA8AAQnPAAEJ+AAAAAAAAAGADwAD6PwFKwABCeQEqBsAAaYqBLsAAQoLAAEKHwABCpAAAwABLZQAAAAEDwABCmcAAQqQAAAAAAAAAYAPAAPo/AUrAAEKfASoGwABpi4EuwABCqMAAQqjAAELLAALAAEtRAAAAAQPAAEKwwABCywAAAAICAsAAQrgAAACFtWADwAD6EQDAAELFAAAAhbdgA8AA+hEAAFsABsAAaYyBLsAAQs/AAELPwABC7AACwABLYwAAAAEDwABC18AAQuwAAAACAgLAAELcAAAAhbVgA8AA/RsAwABC5gAAAIW3YAPAAP0bAABbAAAAM5aTADOaKgAzmmUAM5qgADOa7wAzmz4AAAAFAsAAaY+BLsAAQvHAAEL3wABELwPAAEtmAAABYAHAAGmGAAABBMAAaZGBLsAAQ0XAAENPCYC9AWrAAEMtYAPAAP1RAmADwAD96wEngY0BBcAAaZeBLsAAQ1TAAENawABDbQEAAAPAAENrwABDbQAAAAAAAABgA8AAaY8BPwEJAcAAQ1rAAGmOAAAAAAMGwABpk4EuwABDcsAAQ4XAAEO4AADAAEtRAWrAAENzYAPAAP1RAgAAAQPAAEONwABDuAAAAAICAsAAQ5UAAACFtWADwAD6EQDAAEOiAAAAhbdgA8AA+hEAAGADwAD6EQFKwABDrAEcwABDsYDAAEOswDOcH4GNAQABgcAAQ7PAM5wvAMAA+iIGwABplIEuwABDvcAAQ83AAEP6AADAAEtjAWrAAEO+YAPAAP1RAgAAAQPAAEPVwABD+gAAAAICAsAAQ9oAAACFtWADwAD9GwDAAEPkAAAAhbdgA8AA/RsAAGADwAD9GwFKwABD7gEcwABD84DAAEPuwDOcpoGNAQABgcAAQ/XAM5y2AMAA/SsGwABplYEuwABD/8AARAvAAEQtAACvPwFqwABEAGADwAD9UQIAAAEDwABEEMAARC0AAAACAgLAAEQRAAAAhbVbAMAARBcAAACFt1sAAFsBSsAARCEBHMAARCaAwABEIcAznSuBjQEAAYHAAEQowDOdNgAAAAAzm+cAM5xuADOc9QAznWgAAAADAsAAaZiBLsAARDLAAEQ4wABFcAPAAEtnAAABYAHAAGmGAAABBMAAaZqBLsAARIbAAESQCYC9AWrAAERuYAPAAP1RAmADwAD96wEng4gBBcAAaaCBLsAARJXAAESbwABErgEAAAPAAESswABErgAAAAAAAABgA8AAaZgBPwEJAcAARJvAAGmOAAAAAAMGwABpnIEuwABEs8AARMbAAET5AADAAEtRAWrAAES0YAPAAP1RAgAAAQPAAETOwABE+QAAAAICAsAARNYAAACFtWADwAD6EQDAAETjAAAAhbdgA8AA+hEAAGADwAD6EQFKwABE7QEcwABE8oDAAETtwDOeQYOIAQABgcAARPTAM55RAMAA+iMGwABpnYEuwABE/sAARQ7AAEU7AADAAEtjAWrAAET/YAPAAP1RAgAAAQPAAEUWwABFOwAAAAICAsAARRsAAACFtWADwAD9GwDAAEUlAAAAhbdgA8AA/RsAAGADwAD9GwFKwABFLwEcwABFNIDAAEUvwDOeyIOIAQABgcAARTbAM57YAMAA/SwGwABpnoEuwABFQMAARUzAAEVuAACvPwFqwABFQWADwAD9UQIAAAEDwABFUcAARW4AAAACAgLAAEVSAAAAhbVbAMAARVgAAACFt1sAAFsBSsAARWIBHMAARWeAwABFYsAzn02DiAEAAYHAAEVpwDOfWAAAAAAzngkAM56QADOfFwAzn4oAAAADAsAAaaGBLsAARXPAAEV5wABG5gPAAEtoAAABYAHAAGmGAAABBMAAaaOBLsAARcXAAEXPCYC9AWrAAEWtYAPAAP1RAmADwAD96wEnlbQBBcAAaamBLsAARdTAAEXawABF6wEAAAPAAEXpwABF6wAAAAAAAABgA8AAaaEBPwEJAcAARdrAAGmOAAAAAAMGwABppYEuwABF8MAARgPAAEZvAADAAEtRAWrAAEXxYAPAAP1RAgAAAQPAAEYLwABGbwAAAAICAsAARhMAAACFtWADwAD6EQDAAEYgAAAAhbdgA8AA+hEAAGADwAD6EQE+AknAAEYtHMAARjeBwABGMcAzoHNIAQABGsAARkHAAPoTAMAA/V5KwABGRwErP0rAAEZYARzAAEZkgMAARl/AM6BjlbQBAAGBwABGZsAzoHMAwAD6JgbAAGmmgS7AAEZ0wABGhMAARrEAAMAAS2MBasAARnVgA8AA/VECAAABA8AARozAAEaxAAAAAgICwABGkQAAAIW1YAPAAP0bAMAARpsAAACFt2ADwAD9GwAAYAPAAP0bAUrAAEalARzAAEaqgMAARqXAM6EZlbQBAAGBwABGrMAzoSkAwAD9LQbAAGmngS7AAEa2wABGwsAARuQAAK8/AWrAAEa3YAPAAP1RAgAAAQPAAEbHwABG5AAAAAICAsAARsgAAACFtVsAwABGzgAAAIW3WwAAWwFKwABG2AEcwABG3YDAAEbYwDOhnpW0AQABgcAARt/AM6GpAAAAADOgKwAzoOEAM6FoADOh2wAAAAMCwABpqoEuwABG6cAARu/AAEiFA8AAS2kAAAFgAcAAaYYAAAEEwABprIEuwABHPsAAR1AJgL0BasAARyZgA8AA/VECYAPAAP3rASeYMAEFwABpsoEuwABHVcAAR1vAAEdvAQAAA8AAR23AAEdvAAAAAAAAAGADwABpqgE/AQkBwABHW8AAaY4AAAAAAwbAAGmugS7AAEd0wABHh8AAR/wAAMAAS1EBasAAR3VgA8AA/VECAAABA8AAR4/AAEf8AAAAAgICwABHlwAAAIW1YAPAAPoRAMAAR6QAAACFt2ADwAD6EQAAYAPAAPoRAT4CScAAR7EcwABHu4HAAEe1wDOixEgBAAEawABHxcAA+hMAwAD9XkrAAEfLASs/SsAAR9wBHMAAR+iAwABH48AzorSYMAEAAYHAAEfywDOixADAAPonBsAAaa+BLsAASAHAAEgRwABIRwAAwABLYwFqwABIAmADwAD9UQIAAAEDwABIGcAASEcAAAACAgLAAEgeAAAAhbVgA8AA/RsAwABIKAAAAIW3YAPAAP0bAABgA8AA/RsBSsAASDIBHMAASDeAwABIMsAzo2qYMAEAAYHAAEhBwDOjegDAAP0xBsAAabCBLsAASEzAAEhYwABIgwAArz8BasAASE1gA8AA/VECAAABA8AASF3AAEiDAAAAAgICwABIXgAAAIW1WwDAAEhkAAAAhbdbAABbAUrAAEhuARzAAEhzgMAASG7AM6PvmDABAAGBwABIfcAzo/oAAAAAM6J8ADOjMgAzo7kAM6QsAAAAAwLAAGmzgS7AAEiIwABIjsAASsYDwABLagAAAWABwABphgAAAQTAAGm1gS7AAEjkwABI7wmAvQFqwABIzGADwAD9UQJgA8AA/esBJ4aHAQXAAGm8gS7AAEj0wABI+sAASRUBAAADwABJE8AASRUAAAAAAAAAYAPAAGmzAT8BCQHAAEj6wABpjgAAAAAEBsAAabeBLsAASRrAAEktwABJmgAAwABLUQFqwABJG2ADwAD9UQIAAAEDwABJNcAASZoAAAACAgLAAEk9AAAAhbVgA8AA+hEAwABJSgAAAIW3YAPAAPoRAABgA8AA+hEBPgJJwABJVxzAAElhgcAASVvAM6UVSAEAARrAAElrwAD6EwDAAP1eSsAASXEBKz9KwABJggEcwABJjoDAAEmJwDOlBYaHAQABgcAASZHAM6UVAMAA+iUGwABpuIEuwABJn8AASbLAAEpeAADAAEtjAWrAAEmgYAPAAP1RAgAAAQPAAEm6wABKXgAAAAICAsAASb8AAACFtWADwAD9GwDAAEnJAAAAhbdgA8AA/RsAAGADwAD6EQE+A07AAEnawABJ4AAAwABLa2ADwAD9GwEcwABJ54DAAEniwDOlu1ABAAGBwABJ6cAzpcsAwAD9LknAAEn0IhbAAEn+gsAASfjAM6Xmhq3AAP1KARbAAEoNgsAASgfAM6XmmqfAAP1MSsAAShkBKz9KwABKKgEewABKNcAA+j4BAAEcwABKUhzAAEpHgsAASkHAM6XmwABLbAAAAADAAP06qlYAAAAAwAD9QAAGwABpuYEuwABKY8AASm/AAEqSAACvPwFqwABKZGADwAD9UQIAAAEDwABKdMAASpIAAAACAgLAAEp1AAAAhbVbAMAASnsAAACFt1sAAFsBSsAASoUBHMAASoqAwABKhcAzpsSGhwEAAYHAAEqNwDOmzwAABsAAabqBLsAASpfAAEqowABKxAAAwABLZQFqwABKmGADwAD9UQIAAAEDwABKusAASsQAAAAAAAAAYAPAAPo/AUrAAErAASkAADOkzQAzpYMAM6aOADOnAQAzp0gAAAAEAsAAab2BLsAASsnAAErPwABMKwPAAEttAAABYAHAAGmGAAABBMAAab+BLsAASxvAAEslCYC9AWrAAEsDYAPAAP1RAmADwAD96wEnUAEFwABpxoEuwABLKsAASzDAAEtBAQAAA8AASz/AAEtBAAAAAAAAAGADwABpvQE/AQkBwABLMMAAaY4AAAAABAbAAGnBgS7AAEtGwABLWcAAS4wAAMAAS1EBasAAS0dgA8AA/VECAAABA8AAS2HAAEuMAAAAAgICwABLaQAAAIW1YAPAAPoRAMAAS3YAAACFt2ADwAD6EQAAYAPAAPq3AUrAAEuAARzAAEuFgMAAS4DAM6gkUAEAAYHAAEuHwDOoNADAAPokBsAAacKBLsAAS5HAAEuhwABLzgAAwABLYwFqwABLkmADwAD9UQIAAAEDwABLqcAAS84AAAACAgLAAEuuAAAAhbVgA8AA/RsAwABLuAAAAIW3YAPAAP0bAABgA8AA/RsBSsAAS8IBHMAAS8eAwABLwsAzqKpQAQABgcAAS8nAM6i6AMAA/S4GwABpw4EuwABL08AAS+TAAEv2AADAAEtkAWrAAEvUYAPAAP1RAgAAAQPAAEvswABL9gAAAAAAAABgA8AA+j8BSsAAS/IBKQbAAGnEgS7AAEv7wABMB8AATCkAAK8/AWrAAEv8YAPAAP1RAgAAAQPAAEwMwABMKQAAAAICAsAATA0AAACFtVsAwABMEwAAAIW3WwAAWwFKwABMHQEcwABMIoDAAEwdwDOpdVABAAGBwABMJMAzqYAAAAAAM6fsADOocgAzqPgAM6k/ADOpsQAAAAQCwABpx4EuwABMLsAATDTAAFEGA8AAS24AAAFgAcAA/VEAAWABwABpJgEEwABpyYEuwABMecAATIMJgL0BasAATGFgA8AA/VECYAPAAP3rASdkAQXAAGnOgS7AAEyIwABMjsAATJwBAAADwABMmsAATJwAAAAAAAAAYAPAAGnHAT8BCQHAAEyOwAD9ZwAAAAACBsAAacuBLsAATKHAAEy7wABQ0QAAg1kBasAATKJgA8AA/VECAAABA8AATL/AAFDRAAAAAgICwABMzgAAAIW1YAPAAGDSAMAATOIAAACFt2ADwABg0gAAYAPAAGDSAT4ET8AATO/AAEz9AAABwABLSmEDAmADwABg0mADwABg0mADwABg0gADwABNAsAAUCcAAAACAgLAAE0RAAAAhbVgA8AAYNIAwABNJQAAAIW3YAPAAGDSAABgA8AAYNIBPgFJwABNNCIWwABNPYPAAE04wDOq8LpMwABg2QAWwABNTITAAE1GwDOrALpMwABg2T4ETsAATW7AAE12AADAAEtOYAPAAGErASbAAE1uAYPAAE14wDOq8GADwABhK07AAE2XwABNoAAAwABLT2ADwABhKwEmwABNlwGEwABNosAzqwBgA8AAYStOwABNuMAATb8AAIF2YAPAAPoRARzAAE3SFsAATcmFwABNwcAzq0yqZsAAYS1kAQABFsAATd2GwABN1MAzq3eqZsAAYS0AwAD6IUrAAE3vAR7AAE32wABpCQEAAYfAAE4AwDOrogBJwABOFiIWwABOH4PAAE4awDOq8LpLwABg2wAWwABOLoTAAE4owDOrALpLwABg2z4ETsAATlDAAE5YAADAAEtgYAPAAGElASbAAE5QAYPAAE5awDOq8GADwABhJU7AAE55wABOggAAwABLYWADwABhJQEmwABOeQGEwABOhMAzqwBgA8AAYSVOwABOmsAATqEAAIF2YAPAAPq3ARzAAE63FsAATquFwABOo8AzrDmrmMAAYSdkAQABFsAATsKGwABOucAzrGSrmMAAYScAwAD6xErAAE7XAR7AAE7ewABpCwEAAYfAAE7rwDOsjwBJwABPASIWwABPCoPAAE8FwDOq8LVgwABg3AAWwABPHITAAE8WwDOrALVgwABg3D4ETsAAT0TAAE9PAADAAEtvYAPAAGGIASbAAE9EAYPAAE9RwDOq8GAD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bIEBKz9KwABslAEcwABspYHAAGybwDPJZiABAAGDwABspsAzzIwAAD9KwABsuAErAAAzyREAM80gAAAAAQLAAGohgS7AAGzMwABs0sAAbaMDwABLiAAAAWABwAD9UQABYAHAAGkhAQTAAGojgS7AAG0gwABtJAmAvQFqwABtCGADwAD9UQJgA8AA/esAAQXAAGongS7AAG0pwABtL8AAbVABAAADwABtRcAAbVAAAAABAQHAAG1LAAAEgL1gA8AA/esAAGADwABqIQE/AggBwABqI4AAwDPNowkBwABtL8AA/WcAAAAAAQbAAGolgS7AAG1VwABtb8AAbaEAAINZAWrAAG1WYAPAAP1RAgAAAQPAAG1zwABtoQAAAAEBAcAAbYIAAACGBWADwABg0gAAYAPAAGDSAT4BSsAAbZIBKwAAM83YADPOLwAAAAECwABqKIEuwABtpsAAbazAAG6gA8AAS4kAAAFgAcAAYcMAAAEEwABqKoEuwABt9sAAbf0Jg9AAYAPAAGHTAAEFwABqLoEuwABuAsAAbgLAAG5bAAAAA8AAbhfAAG5bAAAAAgICwABuJgAAAIKQYAPAAGKNAMAAbjEAAASD0GADwABh0wAAYAPAAGooAT8CCAHAAGoqgQDAM86wCQDAAG5CwABh0gIAAoDAAG5IwDPOoBbAAG5WgcAAbk7AM86wg2LAAGHVAAEGwABqLIEuwABuYMAAboDAAG6eAACzcAFqwABuYWADwAD9UQIAAAEDwABuj8AAbp4AAAAAAAAAXQPAAPypAWADwABg0gFKwABulQExwABulWADwABg0gEWwABuli6D0MAAaioAADPPAgAzz2UAAAABAsAAai+BLsAAbqPAAG6pwAB0eQPAAEuKAAABYAHAAGHTAAANBMAAajGBLsAAb3TAAG+QBsAAS4sAYAPAAP3rAWrAAG+FYAPAAP3rwAEhuwTAAGoygS7AAG/iwABv/AbAAEuMAGADwAD96wFqwABv72ADwAD968AA8A8EwABqM4EuwABwFMAAcDsGwABLjQBgA8AA/esBasAAcChgA8AA/evAAPASBMAAajSBLsAAcFPAAHB4BsAAS44AYAPAAP3rAWrAAHBmYAPAAP3rwADwFQTAAGo1gS7AAHCQwABwuQbAAEuPAGADwAD96wFqwABwpWADwAD968AA8BgEwABqNoEu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APzvBsAAariBL8AARN7AAET1wABFhQAAgogBasAARN9gA8AA/VECAAABA8AARPrAAEWFAAAAAAAAAGADwABqVgFKwABFAAEfwABFBMAAau0FAAUWwABFEy639cAAakTAAGquFsAARSUuwABL9MAAaq8WwABFPS7AAEv1wABqsBbAAEVTLsAAS/bAAGqxFsAARWwuwABL98AAarIAAAA0DLEANA4eADQOqQA0DzQANA+/ADQQWAAAAAUCwABqu4EvwABF+sAARgDAAHFnA8AAS/sAAAFgAcAA/VEAAmABwABqVmABwABqjwcEwABqvYEvwABGs8AARsYGg+cAYAPAAP3rAWrAAEa5YAPAAP3rwAE+agTAAGq/gS/AAEc+wABHXQbAAEv9wABqRABgA8AA/esBasAAR1dgA8AA/evAAT5vBMAAasCBL8AAR3zAAEeMCbf1wABqRABgA8AAao8ABMAAasGBL8AAR/jAAEgICcAAS/QAXQPAAPzaAmADvNNgA8AA/esABMAAasKBL8AASHXAAEiJCcAAS/UAXQPAAPzaAmADvOhgA8AAZssABMAAasOBL8AASPjAAEkPCcAAS/YAXQPAAPzaAmADvNNgA8AAZssABMAAasSBL8AASXzAAEmUCcAAS/cAXQPAAPzaAmADvNNgA8AAZssAAQXAAGrtgS/AAEmZwABJmcAASkwAAAADwABJp8AASkwAAAAFBQXAAEm0AAAEt/VgA8AAao8AwABJ0QAABMAAS/RdA8AA/NoCYAO802ADwAD96wDAAEnuAAAEwABL9V0DwAD82gJgA7zoYAPAAGbLAMAASg8AAATAAEv2XQPAAPzaAmADvNNgA8AAZssAwABKMwAABMAAS/ddA8AA/NoCYAO802ADwABmywAAYAPAAGq7AT8GCAHAAGrAgADANBHdCAHAAGrBgQDANBHtCAHAAGrCggDANBIKCAHAAGrDgwDANBInCAHAAGrEhADANBJECQHAAEmZwAD9ZwAAAAAiBsAAasaBL8AASlHAAEpZwABQ5QQBwABL7AAAAAEDwABKbsAAUOUAAAACAgLAAEqCAAAAgKtgA8AAg3sAwABKmAAAABJgA8AAgA8AAGADwABquwE+CE7AAEq4wABKyAAAsc9gA8AAao8BHsAAStbAAGqaAgACgMAASvHANBLigcAASvbANBLyAE7AAEsbwABLLAAAwABL9F0DwAD82gJgA7zTYAPAAP3rATLAAEsuYAO802ADwAD96wBOwABLWsAAS28AAMAAS/VdA8AA/NoCYAO86GADwABmywEywABLcWADvOhgA8AAZssATsAAS5vAAEuzAADAAEv2XQPAAPzaAmADvNNgA8AAZssBMsAAS7VgA7zTYAPAAGbLAE7AAEvfwABL+AAAwABL910DwAD82gJgA7zTYAPAAGbLATLAAEv6YAO802ADwABmywA9HMAATAiBwABMA8A0EvLAAEv/AQABNMAATCADwABMIMAATeUAAAAEBATAAEwrAAAAg+5gA4NeAMAATEAAAACAvWADwAD96wDAAExfAAAAwABKMl0DwAD8ZwFgA8AA/esAwABMjAAAAMAASjNdA8AA/GcBYAPAAP3rAABgA8AA/Q4BPgROwABMtcAATLwAAIJmYAO80wEcwABMwoDAAEy+wDQS4pwTAQABh8AATMzANBQsAMAAg4s9HMAATOmDwABM2cA0Ez+AvwIAAhTAAEzqwDQUhwsAFMAATPTANBQ6CAAAwAD8707AAE0FwABNEQAAwABKNWADwAD6PwEcwABNI4LAAE0TwDQTDMAAS8MBAAEUwABNNcA0FIcLAADAAGqlPRzAAE1YhMAATUTANBNwgL8CAAImwABNWAEUwABNWcA0FIcLAGADvOgcwABNZ4DAAE1jwDQS4sAATAAEAAOHwABNjcA0FCwUwABNk8A0FEoJABTAAE2nwDQUYwoAAcAASjUUwABN0sA0FOkMAMAAg58AwAD87wDAAIArPRzAAE3ygcAATe3ANBLywABMAQEAATTAAE4JA8AATgnAAFArAAAABAQEwABOFAAAAIPuYAODXgDAAE4pAAAAgL1gA8AA/esAwABOSAAAAMAASjJdA8AA/GcBYAPAAP3rAMAATnUAAADAAEozXQPAAPxnAWADwAD96wAAYAPAAP0OAT4FTsAATp3AAE6jAACElGADvOUBJsAATp0BHMAATqmAwABOpcA0EuKcEwEAAYfAAE6zwDQVyADAAIOLYAO85T0cwABO0IPAAE7AwDQTP4C/AgACFMAATtHANBYjCwAUwABO2sA0FdYIAADAAPzvTsAATuvAAE73AADAAEo1YAPAAPo/ARzAAE8JgsAATvnANBMMwABLwwEAARTAAE8bwDQWIwsAAMAAaqU9HMAAT0CFwABPKcA0E6GAvwIAAhTAAE9BwDQWIwsAHMAAT06AwABPSsA0EuLAAEwCBAADJsAAT3cBh8AAT3fANBXIYAODfBTAAE99wDQV5gkAFMAAT5HANBX/CgABwABKNRTAAE+8wDQWjwwAwACDnQDAAPzvPRzAAE/ohsAAT9DANBPSgL8CAAIUwABP6cA0FiMLABzAAFAAgMAAT/zANBLiwABMAwEAASbAAFAfAYfAAFAfwDQVyGADg3wAwACDngDAAPzvAMAAgCxKwABQMwEfwABQPsAAau0FAAWCwABQVsA0EwyDwABQb8A0Ez+EwABQicA0E3CFwABQp8A0E6GGwABQyMA0E9IABsAAaseBL8AAUOrAAFDywABVPgQBrxUAAAABA8AAURPAAFU+AAAAAgICwABRJgAAAINEYAPAAF1BAMAAUUEAAACk+GADuvUAAGADwABquwE+CD0cwABRYoDAAFFbwDQX/4KUAQABasAAUWhgA8AA/evAAT5qAMAAXUNOwABRgsAAUZIAALHPYAPAAGpFAR7AAFGgwABqmwIAAoDAAFHDwDQX/4HAAFHLwDQYDwBOwABR/sAAUg8AAMAAS/RdA8AA/NoCYAO802ADwAD96wEcwABSIIDAAFIZwDQX/7PcAQJgA7zTYAPAAP3rATTAAFIuA8AAUi7AAFJaAAAAAQEBwABSPAAAAIJmYAO80wAAYAPAAP3rAUrAAFJHARzAAFJOgMAAUkfANBf/r7wAAAAAwABdUgDAAF17TsAAUoXAAFKaAADAAEv1XQPAAPzaAmADvOhgA8AAZssBHMAAUquAwABSpMA0F/+z3AECYAO86GADwABmywE0wABSuQPAAFK5wABTCwAAAAEBAcAAUscAAACCZmADvNMAAGADwABmywFKwABS3gEewABS4sAAZtwBAAGAwABTBMA0F/8AAMAAXXtOwABTNMAAU0wAAMAAS/ZdA8AA/NoCYAO802ADwABmywEcwABTXYDAAFNWwDQX/7PcAQJgA7zTYAPAAGbLATTAAFNrA8AAU2vAAFO9AAAAAQEBwABTeQAAAIJmYAO80wAAYAPAAGbLAUrAAFOQAR7AAFOUwABm3AEAAYDAAFO2wDQX/wAAwABde07AAFPmwABT/wAAwABL910DwAD82gJgA7zTYAPAAGbLARzAAFQQgMAAVAnANBf/s9wBAmADvNNgA8AAZssBNMAAVB4DwABUHsAAVHAAAAABAQHAAFQsAAAAgmZgA7zTAABgA8AAZssBSsAAVEMBHsAAVEfAAGbcAQABgMAAVGnANBf/AADAAF17PRzAAFR+gMAAVHfANBf/gowBAAFqwABUgmADwAD968ABPmoAwABdRErAAFSMAR/AAFSXwABq7QUABSbAAFSvAYLAAFSvwDQYUGADwABqj4PAAFTIwDQYg4TAAFTiwDQZDoXAAFUAwDQZl4bAAFUhwDQaIAAGwABqyYEvwABVQ8AAVVTAAFgGAACvFgFqwABVRGADwAD9UQIAAAEDwABVY8AAWAYAAAABAQHAAFVtAAAAhDtgA8AAXPIAAFwBPgc9HMAAVX6AwABVecA0G1KClAEAAWrAAFWEYAPAAP3rwAE+agDAAFz3PRzAAFWfFsAAVY4ut/XAAGpEwABqwK8WAQABgMAAVa/ANBtSAMAAap09HMAAVcCAwABVu8A0G1Kz5AIBYAPAAP3rAhbAAFXPLsAAS/TAAGrBNMAAVekDwABV6cAAViUAAAACAgLAAFX3AAAAgmZgA7zTAMAAVgYAAACAvWADwAD96wAAXAFKwABWDwEcwABWFIDAAFYPwDQbUoG5AQABgsAAViDANBwCAMAAXP8AwABdKD0cwABWMoDAAFYtwDQbUrPkAgFgA8AAZssCFsAAVkEuwABL9cAAasI0wABWXwPAAFZfwABWuwAAAAICAsAAVm0AAACCZmADvNMAwABWhAAAAK89YAPAAGbLAABgA8AA/Q4BPgE9HMAAVp+CwABWlsA0HIuvFgEAAYDAAFavwDQbUgDAAGbeAMAAXSg9HMAAVsiAwABWw8A0G1Kz5AIBYAPAAGbLAhbAAFbXLsAAS/bAAGrDNMAAVvgDwABW+MAAV1QAAAACAgLAAFcGAAAAgmZgA7zTAMAAVx0AAACvPWADwABmywAAYAPAAP0OAT4BPRzAAFc4gsAAVy/ANB0WrxYBAAGAwABXSMA0G1IAwABm3gDAAF0oPRzAAFdggMAAV1vANBtSs+QCAWADwABmywIWwABXby7AAEv3wABqxDTAAFeRA8AAV5HAAFftAAAAAgICwABXnwAAAIJmYAO80wDAAFe2AAAArz1gA8AAZssAAGADwAD9DgE+AT0cwABX0YLAAFfIwDQdoa8WAQABgMAAV+HANBtSAMAAZt4AwABdKD0cwABX+oDAAFf1wDQbUoKMAQABasAAV/5gA8AA/evAAT5qAMAAXPgGwABq5IEvwABYC8AAWDbAAFh1AQDAAEvbAWrAAFgMYAPAAP1RAgAAAQPAAFhJwABYdQAAAAAAAABdA8AA/NoCYAO8smADwAD96wFKwABYUgEWwABYYxbAAFhSLrf1wABqRMAAasDAAEvbwABqlQbAAGrlgS/AAFh6wABYm8AAWOgBAMAAS90BasAAWHtgA8AA/VECAAABA8AAWLXAAFjoAAAAAAAAAF0DwAD9nAFgA7zBAUrAAFi+ARbAAFjPFsAAWL4ut/XAAGpEwABqwMAAS93AAGqXBsAAauaBL8AAWO3AAFkWwABZUQEAwABL3AFqwABY7mADwAD9UQIAAAEDwABZJ8AAWVEAAAAAAAAAXQPAAPzaAmADvMFgA8AA/esBSsAAWTABFsAAWUEWwABZMC639cAAakTAAGrAwABL3MAAapYGwABq54EvwABZVsAAWYDAAFm7AQDAAEveAWrAAFlXYAPAAP1RAgAAAQPAAFmRwABZuwAAAAAAAABdA8AA/NoCYAO802ADwAD96wFKwABZmgEWwABZqxbAAFmaLrf1wABqRMAAasDAAEvewABqmAbAAGrKgS/AAFnAwABZ0cAAWjwAAMAAS8oBasAAWcFgA8AA/VECAAABA8AAWerAAFo8AAAAAQEBwABZ9wAAAJYmYAO8wQAAYAPAAPo/AT4BSsAAWgYBHMAAWicWwABaDS7AAEvdwABq5YMXAQABgMAAWjDANB/0AMAA/agGwABqy4EvwABaQcAAWlLAAFqlAACy9QFqwABaQmADwAD9UQIAAAEDwABaX8AAWqUAAAABAQHAAFpsAAAAliZgA7zBAABgA8AA+j8BSsAAWn4BHMAAWo8WwABafi639cAAakTAAGrAsvUBAAGAwABancA0IG4AwABqngbAAGrMgS/AAFqqwABaw8AAWxwAAMAAS78BasAAWqtgA8AA/VECAAABA8AAWtfAAFscAAAAAQEBwABa5AAAAJnKYAO8wQAAXQPAAPypAWADwAD96wFKwABa8gEcwABbAxbAAFryLrf1wABqRMAAasDAAEu/AQABgMAAWxjANCDqAMAAap8GwABqzYEvwABbIcAAWzLAAFuXAADAAEvAAWrAAFsiYAPAAP1RAgAAAQPAAFtMwABblwAAAAEBAcAAW1kAAACZymADvMEAAGADwAD6PwFKwABbZwEcwABbeBbAAFtnLrf1wABqRMAAasDAAEvAAQABgMAAW5PANCFvAMAAaqAGwABq6IEvwABbnMAAW7HAAFvkAQDAAEvBAWrAAFudYAPAAP1RAgAAAQPAAFvBwABb5AAAAAAAAABgA8AA+j8BSsAAW8QBFsAAW9UWwABbxC639cAAakTAAGrAwABLwcAAaqgGwABqzoEvwABb6cAAW/rAAFxZAADAAEvCAWrAAFvqYAPAAP1RAgAAAQPAAFwMwABcWQAAAAEBAcAAXBsAAACWJmADvLIAAGADwAD6PwFKwABcLQEcwABcPhbAAFwtLrf1wABqRMAAasDAAEvCAQABgMAAXFHANCJQAMAAaqEGwABqz4EvwABcXsAAXG/AAFzIAACy9AFqwABcX2ADwAD9UQIAAAEDwABcf8AAXMgAAAABAQHAAFyMAAAAliZgA7zBAABgA8AA+j8BSsAAXJ4BHMAAXK8WwABcni639cAAakTAAGrAsvQBAAGAwABcwMA0IswAwABqogbAAGrQgS/AAFzNwABc3sAAXUUAAMAASBYBasAAXM5gA8AA/VECAAABA8AAXPXAAF1FAAAAAQEBwABdAgAAAJYmYAO8wQAAYAPAAPo/AUrAAF0UARzAAF0lFsAAXRQut/XAAGpEwABqwMAASBYBAAGAwABdPcA0I0gAwABqpgbAAGrRgS/AAF1KwABdXcAAXbgAAMAAS8kBasAAXUtgA8AA/VECAAABA8AAXXTAAF24AAAAAQEBwABdgwAAAJYmYAO8sgAAYAPAAP3rAT4BSsAAXZIBHMAAXasWwABdmS7AAEvbwABq5EsBAAGAwABdrMA0I8YAwAD87gbAAGrSgS/AAF29wABd0MAAXiUAAMAAS8sBasAAXb5gA8AA/VECAAABA8AAXeXAAF4lAAAAAQEBwABd8gAAAJYmYAO8wQAAYAPAAP3rAT4BSsAAXgEBHMAAXhgWwABeCC7AAEvcwABq5ksBAAGAwABeGcA0JEEAwAD87gbAAGrTgS/AAF4qwABePcAAXpQAAMAAS8wBasAAXitgA8AA/VECAAABA8AAXlPAAF6UAAAAAQEBwABeYQAAAJYmYAO80wAAYAPAAP3rAT4BSsAAXnABHMAAXocWwABedy7AAEvewABq50sBAAGAwABeiMA0JLwAwAD87gbAAGrVgS/AAF6ZwABeqsAAXwkAAMAAS/LAAGpEAWrAAF6aYAPAAP1RAgAAAQPAAF68wABfCQAAAAEBAcAAXsoAAACWJmADvNMAAGADwAD6PwE+AUrAAF7ZARzAAF7xFsAAXuAuwABL3sAAaueHRwEAAYDAAF79wDQlOwDAAPztBsAAatqBL8AAXw7AAF8fwABhbQAAwABLwwFqwABfD2ADwAD9UQIAAAEDwABfMMAAYW0AAAABAQHAAF8+AAAAliZgA7zTAABgA8AA+j8BPgFJwABfTSIiIhbAAF9ZgMAAX1HANCW3ssG82wEWwABfd4DAAF9vwDQlt4eAvNkBFsAAX5iAwABfkMA0JbeFM7zcARbAAF+0gMAAX6zANCW3hTW83T4GTsAAX9XAAF/eAACCamADvOgBJsAAX9UBgMAAX+DANCW3YAO86EnAAF/vIRbAAF/9gcAAX/TANCYlhB+86krAAGAJASo/ScAAYB4cwABgIi7AAEvywABqRAEAAYHAAGA1wDQmJQDAAGrVSsAAYEABKT9JwABgUyEcwABgbxbAAGBggcAAYFfANCYlhP+84UgBAAErAMAA/V4+AUrAAGCCARzAAGCJLrL0AQABFsAAYKOBwABgmsA0JiWE/7zhAMAAas8/ScAAYMIWwABgz4HAAGDGwDQmJYeBvNY+AUrAAGDlARzAAGDsLsAAS8IBAAEWwABhCIHAAGD/wDQmJYRDvOIAwABqzj9KwABhIAEqPgFKwABhQQEcwABhSC7AAEvywABqRAEAAYDAAGFbwDQltwDAAGrVBsAAatuBL8AAYXLAAGGDwABiAQAAwABIDgFqwABhc2ADwAD9UQIAAAEDwABhlsAAYgEAAAABAQHAAGGkAAAAliZgA7zTAABgA8AA+j8BPgFKwABhswEiHMAAYbouwABLwwEAAYDAAGHMwDQnkQDAAGraARzAAGHpFsAAYdguwABL9MAAasGHRwEAAYDAAGH1wDQnkQDAAPztBsAAatyBL8AAYgbAAGIZwABj9wAAwABIDwFqwABiB2ADwAD9UQIAAAEDwABiLMAAY/cAAAABAQHAAGI6AAAAliZgA7zTAABgA8AA/esBPgNOwABiUMAAYlUAAIC9YAPAAP3rARzAAGJnFsAAYlcuwABL9MAAasFLAQABgMAAYmjANCgqAMAA/O5JwABidiIcwABif4HAAGJ6wDQoQ0gBAAErAMAA/foAHMAAYoouwABLwwEAAYDAAGKcwDQoKgDAAGraPgI9icAAYzjANChDIxbAAGNHgMAAYz/ANCgqh4C82RzAAGNhLsAATATAAGpEAQABFsAAY3yAwABjdMA0KCqE/7zhAMAAatccwABjmC7AAEwFwABqRAEAAYDAAGOswDQoKgDAAGrYAWADwAD96z0cwABjzBbAAGO8LsAAS/TAAGrBgL8CAAKAwABjzcA0KCqBwABj2MA0KEMAwAD87z9KwABj6AGBwABj78A0KEMGwABq1oEvwABj/MAAZAPAAGTUAADAAEwGwABqRAAAAAEDwABkF8AAZNQAAAABAQHAAGQmAAAAliZgA7yyAABgA8AA/esBPgNOwABkPMAAZEoAAMAATAdgA8AA/esBHMAAZEwuwABLyQEAAYDAAGRkwDQpkgDAAGrRScAAZHIiIRzAAGSEgcAAZHbANCmrSAEAASsAwAD9+gAWwABknYHAAGSPwDQpq4OywAD98krAAGSpAYHAAGSwwDQpqz9KwABkwwEnmYAGwABq14EvwABk2cAAZODAAGXQAADAAEwEwABqRAAAAAEDwABk8sAAZdAAAAABAQHAAGT/AAAAliZgA7zBAABgA8AA/esBPgNOwABlFcAAZSMAAMAATAdgA8AA/esBHMAAZSUuwABLywEAAYDAAGU7wDQqWADAAGrSScAAZUkiIRzAAGVbgcAAZU3ANCpxSAEAASsAwAD9+gAWwABldIHAAGVmwDQqcYOywAD98krAAGWAAYHAAGWHwDQqcT9KwABlmgEcwABloS7AAEvNAQABFsAAZceAwABlv8A0KliAvbyvAMAAauIGwABq2IEvwABl1cAAZdzAAGfCAADAAEwFwABqRAAAAAEDwABl78AAZ8IAAAABAQHAAGX9AAAAliZgA7zTAABgA8AA/esBPgROwABmE8AAZiEAAMAATAdgA8AA/esBHMAAZjMWwABmIy7AAEvewABq50sBAAGAwABmNMA0Kz8AwAD87kAhIhzAAGZlFsAAZlQuwABL3sAAaueHRwEAAYDAAGZxwDQrPwDAAPztABzAAGaLgcAAZn3ANCtYSAEAASsAwAD9+sAAZlLAAGaT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rMA0Zu09HMAAQ8sWwABDwy7AAExKwABq/MAAa0dWAQABg8AAQ8/ANGdjAMAA/LpKwABD5QGDwABD7MA0Z2MGwABrU4EwwABEBMAARCrAAERmAQCZMgFqwABEBWADwAD9UQIAAAEDwABEMcAARGYAAAAAAAAAXQPAAPypAWADwACFgAE+AUrAAEQ3ATUAAAABAF0DwAD8qQFgA8AAhYABFsAARD4uwABMSsAAavzAAGtHIxzAAERGgADANGgsSAEAASsAAGrAAERJXQPAAPypAWADwACFgMAA+WGAAMA0aCwBXQPAAPypAWADwACFgAbAAGtRgTDAAERrwABEfsAARlMAACMBasAARGxgA8AA/VECAAABA8AARIbAAEZTAAAAAAAAAGADwAD96wE+DU7AAEScwABEnwAAg+RgA8AA/jUBH8AARKXAAP5UAAAAAD0cwABEvIDAAES5wDRozoKKAQABJ8AATE0AwAD+ST0cwABE2oDAAETXwDRozoKKAQABJ8AATE4AwAD+ST0cwABE+oDAAET3wDRozoKKAQABFsAARQAus53AAGtEAMAA/kk9HMAARReAwABFFMA0aM6CigEAASfAAExPAMAA/kk9HMAARTeAwABFNMA0aM6CigEAARbAAEU9LqhAwABrRQDAAP5JPRzAAEVTgMAARVDANGjOgooBAAEnwABMUADAAP5JPRzAAEV0gMAARXHANGjOgooBAAEWwABFei6jfMAAa0oAwAD+ST0cwABFkYDAAEWOwDRozoKKAQABJ8AATFEAwAD+ST0cwABFtYDAAEWywDRozoKKAQABFsAARbsuo4jAAGtLAMAA/klJwABF0iEcwABF3hbAAEXWLsAATErAAGr8wABrR0gBAAErAMAA/V4+Aj0cwABF8oDAAEXvwDRozoKKAQABJ8AATFIAwAD+ST0cwABGDoDAAEYLwDRozoKKAQABFsAARhQuwABMSsAAavzAAGtHAMAA/kk/PRzAAEYrgMAARijANGjOgooBAAEngyEAwAD+SUrAAEY7ARzAAEZFgMAARkLANGjOIwAAAADAAP5OAAA0YRIANGPdADRmiAA0Z94ANGiOADRqxAAAAAUCwABrVoEwwABGWMAARl7AAEkVA8AATFMAAAFgAcAAhYAAAAQEwABrWIEwwABGqMAARq4JgkUBasAARoxgA8AA/VECYAPAAIWJAATAAGtZgTDAAEbLwABG1AmjYwFqwABGs2ADwAD9UQJgA8AA/esABMAAa1qBMMAARunAAEb2GKN8AWrAAEbZYAPAAP1RAmADwAD6PwAEwABrW4EwwABHC8AARxsYo4gBasAARvtgA8AA/VECYAPAAPo/AAEFwABrYYEwwABHIMAARyDAAEeOAAAAA8AARzDAAEeOAAAABAICwABHNgAABIJFYAPAAIWJAMAAR0MAAASjY2ADwAD96wACwABHWgAABKN8YAPAAPo/AWrAAEdpYAPAAPo/AMAAR3UAAASjiGADwAD6PwFqwABHh2ADwAD6PwBgA8AAa1YBPwUIAcAAa1iAAMA0a8MIAcAAa1mBAMA0a9MIAcAAa1qCAMA0a+QIAcAAa1uDAMA0bAAJAcAARyDAAIWIAAAAAAIGwABrXYEwwABHk8AAR6rAAEe7AQCAvQFqwABHlGADwAD9UQIAAAEDwABHr8AAR7sAAAAAAAAAYAPAAP3rAUrAAEeyARbAAEeyLqNjwABrWQbAAGtfgTDAAEe/wABH0sAASRMAACMBasAAR8BgA8AA/VECAAABA8AAR9rAAEkTAAAAAAAAAGADwAD96wE+Ck7AAEfwwABH8wAAg+RgA8AA/jUBH8AAR/nAAP5UAAAAAD0cwABIEIDAAEgNwDRs9IKKAQABJ8AATFQAwAD+ST0cwABIM4DAAEgwwDRs9IKKAQABJ8AATFUAwAD+ST0cwABIUIDAAEhNwDRs9IKKAQABFsAASFYuo2PAAGtZAMAA/kk9HMAASGmAwABIZsA0bPSCigEAASfAAExQAMAA/kk9HMAASIqAwABIh8A0bPSCigEAARbAAEiQLqN8wABrWgDAAP5JPRzAAEingMAASKTANGz0gooBAAEnwABMUQDAAP5JPRzAAEjLgMAASMjANGz0gooBAAEWwABI0S6jiMAAa1sAwAD+ST0cwABI64DAAEjowDRs9IKKAQABJ4MhAMAA/klKwABI+wEcwABJBYDAAEkCwDRs9CMAAAAAwAD+TgAANGxkADRstAA0bjQAAAACAsAAa2KBMMAASRjAAEkewABL1wPAAExWAAABYAHAAI6EAAADBMAAa2SBMMAASVfAAElbCYC9AWrAAEk/YAPAAP1RAmADwAD96wAEwABrZYEwwABJcsAASX8Js50AYAO80wAEwABrZoEwwABJxsAASdgJwABMJABgA8AA+j8AAQXAAGttgTDAAEndwABJ3cAASlcAAAADwABJ48AASlcAAAADAgLAAEnpAAAEgL1gA8AA/esAwABJ9AAABLOdYAO80wABwABKCQAABMAATCRgA8AA+j8BasAASh1gA8AA+j8AYAPAAGtiAT4BQCElwABKQBbAAEoyLrOdwABrZWADwAB1T8AASjLAAEpSAAQIAcAAa2SAAMA0bukIAcAAa2WBAMA0bvkIAcAAa2aCAMA0bwgJAcAASd3AAI6IAAAAAAIGwABraYEwwABKXMAASmfAAEp3AQCpXcAAavwAAAABA8AASm3AAEp3AAAAAAAAAGADwAD96wFKwABKcAEnns4GwABra4EwwABKfMAASo/AAEvVAAAjAWrAAEp9YAPAAP1RAgAAAQPAAEqXwABL1QAAAAAAAABgA8AA/esBPghOwABKrcAASrAAAIPkYAPAAP41AR/AAEq2wAD+VAAAAAA9HMAASs2AwABKysA0cASCigEAASTAAErcAhbAAErVLqldwABq/MAAa2kng9cAwAD+SUnAAErjIRzAAEsEFsAASvUWwABK5y6zncAAa2WE/7zhSAEAASsAwAD9Xj4CPRzAAEsYgMAASxXANHAEgooBAAEWwABLOxbAAEssFsAASx4us53AAGtlhP+84YC9vK8AwAD+ST0cwABLS4DAAEtIwDRwBIKKAQABJ4FqAMAA/kk/PRzAAEtkgMAAS2HANHAEgooBAAEWwABLeBbAAEtqLrOdwABrZYC9vK8AwAD+ST0cwABLhoDAAEuDwDRwBIKKAQABJ4a1AMAA/kk9HMAAS5mAwABLlsA0cASCigEAARbAAEufLoC9wABrZADAAP5JPRzAAEutgMAAS6rANHAEgooBAAEngyEAwAD+SUrAAEu9ARzAAEvHgMAAS8TANHAEIwAAAADAAP5OAAA0b4UANG/EADRxfgAAAAICwABrboEwwABL2sAAS+DAAEziA8AATFcAAAFgAcAA/VEAAAIEwABrcIEwwABMC8AATA8Jg+4AYAOIUwAEwABrcoEwwABMHcAATCIYkizAAGr8AGADwABiZgErAQXAAGt4gTDAAEwnwABMJ8AATDsAAAADwABMMMAATDsAAAABAQHAAEw2AAAEg+5gA4hTAABgA8AAa24BPwIIAcAAa3CAAMA0chAJAcAATCfAAP1nAAAAAAIGwABrdIEwwABMQMAATEnAAEysAADAAEw9AAAAAQPAAExUwABMrAAAAAEBAcAATGQAAACzmWADwABx7AAAYAPAAGJmAT4BSsAATHYBNQAAAAEAYAPAAGJmARbAAEx9LpIswABq/MAAa3IjHMAATIOBAMA0cpBIAQABKwDAAP1eF8AATH0ukizAAGr8HMAATJKAwABMh8A0cm/AAEw9AQABFsAATKMWwABMni6D7sAAa3CCkIhZAMAAcfLAAGtygQDANHKQAWADwABiZgbAAGt2gTDAAEyxwABMxcAATOABAMAAQGMAAAABA8AATNLAAEzgAAAAAAAAAGADhIMBSsAATNUBJsAATNUBFsAATNoWwABM1S6D7sAAa3CEUoJYYAOEgwAANHJDADRzDgA0c2UAAAACAAEGwABq/oEwwABNecAATX7AAE8pAAHAAExYAAAAAQPAAE2cwABPKQAAAAQEBMAATbIAAACzH2ADwABq/wDAAE3WAAAAs5lgA8AAcewAwABN9QAAAIJqYAO86ADAAE4IAAAAgaZeAwABAgFgA70MAcAASGtgA8AA+j8AXAAAXAE+Ak7AAE5DwABOTQAAwABMFmADwAByKAEcwABOX4DAAE5PwDRzpMAATBgBAAGCwABObMA0c8QAwABrCD0ewABOecAAcesDAAOBwABOkcA0c7SCwABOncA0c8Q0wABOrQPAAE6twABPJgAAAAIBAcAATsUAAACCbGADiFMAAcAATtUAAADAAEhrYAPAAPo/AWoAYAPAAP0OeWADwAD9DgE+AT0cwABO54PAAE7mwDRz0iACAAEcwABO8oTAAE7owDRz+cAATDYBAAGFwABPA8A0dGQAwAByLAHAAEhrhsAATxjANHRzAAABgTAANHTdADQ6dgA0QPQANFSmADRe+gA0auEANG5FADRxjwA0c3YAAAAHADRzeAA0dN0AAAABAAIEwABrecAATFmBMQAABYF0AACCLoIGAIGcAACcSgAAgcUAAJuXAACB8wAAisMAAIIgAADAAIdZAAAAAAACAsAAa4CBMYVbhWGSaAO4RAAAAWABiu0AAAIEwABrgoExhZSFmQmEfgBgA4rLAATAAGuDgTGFtoW6CYC9AWqFnmADwAD9UQJgA8AA/esAAQXAAGuTgTGFv4W/heMA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SsAAbFA1AAAAAQBbARehp4KhpcA08De0PCahpwEcobiAobTANO/XSwEAASe0PADAAPzuYAPAAP3rwABsTjUAAAABAFsBF6HPgqHNwDTwN7OKJqHPARyh3C7AAEy5AQABHKHogKHkwDTv10sBAAEns4oAwAD87gDAAG1KYAPAAGyRwABsUjUAAAABAFsBF6IAgqH+wDTwN5iGJqIAARyiC4CiB8A079dLAQABJ5iGAMAA/O5gA8AA/AXAAGxPNQAAAAEAWwEXohyCohrANPA3gpAmohwBHKIngKIjwDTv10sBAAEngpAAwAD87mADwAD968AAbN01AAAAAQBbAReiOIKiNsA08DeFOiaiOAEcokmAokXANO/XSwEAASeFOgDAAPzuYAPAAP3rwABs3jUAAAABAFsBF6JggqJewDTwN62MJqJgARyieYCidcA079dLAQABJ62MAMAA/O5gA8AA/evAAGzfNQAAAAEAWwEXopiCopbANPA3mogcouocoswmosMAHKK0gKKwwDTv10sBAAEnmogAwAD87l0DwAD8qQFbgKsBAWADwABs9wE0otADotCi6AAAAAEBAaLRAAAAgNRbAABgA8AAbPcBSqLXARyi1y7AAEzBAQABJqLmARSi5sA08nYLAF0DwAD82gJbWwDAAG1HAMAA/HKArQAAAADAAPx9wABs4DUAAAABAFsBF6L7gqL5wDTwN4KTHKMCLsAATLoBAAEcoxCAowzANO/XSwEAASeCkwDAAPzuAMAAbUvAAGzjNQAAAAEAWwEXoyKCoyDANPA3tEomoyIBHKM0gKMwwDTv10sBAAEntEoAwAD87mADwAD968AAbOE1AAAAAQBbARejTIKjSsA08De0TCajTAEco1+Ao1vANO/XSwEAASe0TADAAPzuYAPAAPwFwABs4jUAAAABAFsBF6N4gqN2wDTwN6ICHKOOLsAATMIBAAEeo6HAAMEQAQJgA8AA/etgA8AA+j8BJqO8ARyjvICjuMA079dLAQABJ6ICAMAA/O5dA8AA/NoCW1sAAMAAbUjAAGzbNQAAAAEAWwEXo9SCo9LANPA3tEIcpDQcpAUmo/EAHKPkgKPgwDTv10sBAAEnl4gAwAD87l0DwAD8qQFbgKsBAWADwABs6QE0pBYDpBakJwAAAAEBAaQXAAAAgPVbAABgA8AAbOkBSqQdASak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hwE1wABKjgAAAQBdA8AA/NoCW1sBHMAASo4uwABM48AAbTQBAAGAwABKnsA1F0cAwABtXDUAAAABAFsBHMAASqyBwABKqsA1F2uApQEAATLAAErDYAPAAP3rYAPAAP1RASeCahbAAErlHMAAStAuwABM0AEAARbAAErbgMAAStbANRdHgmrAAGzrAMAAbVTAAEzDwABtdwDAAPz2gQDANRdrBsAAbWiBNMAASvzAAEr8wABLSQAAhMMAAAABA8AASwjAAEtJAAAAAQEBwABLFQAAAIFUYAPAAGzGAABdA8AA/NoCW1sBSsAASx4BNcAASx4AAAEAXQPAAPzaAltbARzAAEseLsAATOPAAG00AQABgMAASy7ANRg0AMAAbVw1AAAAAQBbARzAAEs1gcAASzPANRhWgL8CAAIngpAWwABLRYDAAEtAwDUYNIKQwABsyADAAPzvgQDANRhWBsAAbWmBNMAAS07AAEtOwABLywAAwABMkwAAAAEDwABLWcAAS8sAAAABAQHAAEtpAAAAgVRgA8AAbJEAAF0DwAD82gJbWwFKwABLcgE1wABLcgAAAQBdA8AA/NoCW1sBHMAAS3IuwABM48AAbTQBAAGAwABLgsA1GPAAwABtXDUAAAABAFsBHMAAS46BwABLjMA1GRKAvwIAAieC4xbAAEuigMAAS53ANRjwguPAAGyTAMAA/O81AAAAAQBbARzAAEuxgcAAS6/ANRkSgL8CAAInmXcWwABLxIDAAEu/wDUY8Jl3wABslADAAPzvgQDANRkSBsAAbV+BNMAAS9DAAEvXwABNAAAAwABM5MAAbTQAAAABA8AAS+XAAE0AAAAAAQEBwABL9QAAAIKTXQPAAPypAWADwABspAAAYAPAAP1RAT4CScAATAEWwABMBS60dcAAbVA+AUrAAEwjARzAAExCHMAATC+AwABMKsA1GeeAqwEBYAPAAP3rATTAAEwzA8AATDPAAExAAAAAAQEBwABMNAAAAID1YAPAAGykAABgA8AA/esBSsAATDoBFsAATDyBwABMOsA1GlOBsMAAbKgAwAD8clgBAAEngK8AwAD8ez9KwABMWAEcwABM9BzAAExtgMAATF/ANRnngKsBAWADwAD9UQE0wABMeQPAAEx5wABM6QAAAAEBAcAATHoAAACA9WADwABspAAAXQPAAPzaAmADwAD9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NVasADUfpQA1N2EANVUhAAAAAgA1Vb0ANVZAADVWrAAAAAIAAgTAAG26AIE2AAAPgNoAAIIuggYAgQMAAKQ2AACBHAAAwABgnwAAgT8AALysAACBYwAAwACG1wAAgYsAAMAAm44AAIGuAADAAHSWAAEBAcAATQ6B3gAAwAB/ZQAAggoAAMAAg3oAAIIvAADAAEN4AACCWAAAwABrmwABAQPAAExzwABMgMAATHqCnQAAwACHXgAAgsMAAID7AACC3QAAwABc7AAAgwsAAMAAbokAAAAAAAgCwABtu4E2hjuGQZclA7fxAAABYAHAAP1RAAADBMAAbb6BNoZthngJt5nAAG26AGADwACDewAEwABtv4E2hpqGqQnAAE0PwABtugBdA8AA/NoCYAPAAGumYAPAAG3IATKGp2ADwABrpmADwABtyAAEwABtwIE2htCG5QnAAE0QwABtugBdA8AA/NoCYAPAAGwSYAPAAG3OATKG42ADwABsEmADwABtzgABBcAAbceBNobqhuqHTwAAAAOG+IdPAAAAAQEBhxAAAADAAE0RYAPAAEN7AABgA8AAbbsBPwIIAMAAbb4Wh0WAhzbANVhLs5nAAEOYCQGG6sAA/WcAAAAABAbAAG3CgTaHv4fEk/8AAK9YAAAAAQOH3ZP/AAAAAQEBh+UAAACEkmADwABrpgAAXAE+Bk6H/IgGAACE6GADgxkBHIgUFogILreZwABtusAAbb7AAE0SAQABgIghwDVYqADAAIOaTohCiE8AAITdXQPAAPypAWADwABr2wExiFFgA8AAa9sAToh0iH4AALQ5XQPAAPzaAmADwABsEmADwABt1gEyiIBgA8AAbBJgA8AAbdYARoiIAIiWAAAAhJRgA4N8ABaIqYGIn8A1WLyEhYMsQT4FSYi5IRaIxISIvsA1WT+FAoORQojWAD9OiPOJAAAAwABNE2ADvOUBHIkOFokCLreZwABtusAAbb7AAE0UAQABhIkXwDVZPwDAAIOOTokziT4AAIJrYAOErgEWiUaEiUDANVk/hQeDgE6JZ4ltAACAlmADwABg0gEciXsWiW8ut5nAAG26wABtvsAATRUDAAGGiYzANVmoAsAATRYqwABNFynAAIOYSYnVIiEcid+HidnANVnESAEAASsAwAD9XgAWifCHierANVnEuNvAAGDUPgE9HIoPg4oG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TTxgA8AA+j8BIRa8NRS8KcA1eNcOAMAATTvAAG6nTrxXvGcAAMAATT9gA8AAbc4BHLyfFryPFryBgLx1wDVtGbQ6wACHc8AATRDAAG26wABtwEsBAAEUvKDANXeCCwAAwAD87k68v7zFAACAlmADwABg0gEcvNiBvMfANW0nwABNOAIAARa8+hS86sA1efcQAJY8wABt0AGXsSnAAH+lTr3AvckAAMAASGtgA8AA+j8BIiIUvdfANXnQDwAAIRy98xS97cA1ej0RAEgBAAErAMAA/V4AHL4JhL3+wDVtdiABAAEUvgrANXeCCwAAAE6+IQAAAMAATURgA8AA+j8ATsAAQMsAAADAAE1FXQPAAPypAWADvOUATsAAQO/AAED9AADAAE1GYAPAAPwFAStJwABBDhTAAEESwDV6eBIAPgE9FcAAQY3ANXrHEyo+Az0VwABDGcA1escTIRzAAEMpFMAAQyPANXo9EQBIAQABKwDAAP1eScAAQzwhFMAAQ0HANXrHEwA+A07AAEPjwABD7gAAwABNHGADwACcIQEWwABEABTAAEPwwDV59xAAwABNHMAAbdE9FcAARBjANXrHEzUAAAABAGADwAD6PwE1AAAAAQBgA8AAnCEBFMAARCLANXtgFgAjHMAARC4UAMA1e6YXAEgBAAErAAArFsAARC4UAMA1e6YXAMAATUTAAJwrAWADwAD6PyMcwABENhQAwDV7mRcASAEAASsAACoUAMA1e5kXAAFgA8AA+j9JwABETCIUwABEUMA1escTAAAhHMAARG0WwABEZhTAAERbwDV7YBYAhIXAAJwkSAEAASsAwAD9Xj4BQUbAAESGwABEr8AARJQAAACD7mADg3wAFsAARKcUwABEnMA1e2AWAISFwACcJD4GTsAARMjAAETTAADAAE1HYAPAAGwSASbAAETIARzAAETsFsAAROGAwABE1cA1bRmzmcAAh2HAAE0UAQABFMAARPXANXxYFwAAwACEHmADwABsEk7AAEUewABFKAAAwABNSGADwABuCQEcwABFNhTAAEUqwDV3XAoAIAEAARTAAEU3wDV8fxgAAABJwABFVBzAAEViFMAARVjANXzRGQBIAQABKwDAAP1ePgI9FcAARbfANXrHEypCwABF2gA/ScAARgMWwABGERTAAEYHwDV80RkAwABNScAAbhk+Aj0V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7gEWwABH9S7AAE1ywABuJ8AAbmYGwABufYE4wABIIcAASDnAAErmAADAAE1uAWrAAEgiYAPAAP1RAgAAAQPAAEhQwABK5gAAAAEBAcAASF4AAACCZmADvNMAAGADgWcBPgJJwABIbCEcwABId4DAAEhwwDWn2EgBAAErAMAA/V4+Ak7AAEiiwABIrgAAhGNdA8AAaCIBYAPAAG4rARzAAEjBFsAASLAuuA/AAG5pSwEAAYDAAEjCwDWn2ADAAPzuScAASNEhHMAASOGBwABI1cA1qA9IAQABKwDAAGg/PgFJwABI9BzAAEkEgcAASPjANagPgxcBAAFqwABJHmADwABuK8AA9sYAwABoOz4BSsAASTcBasAASUpgA4Fngw1JwABJYhzAAElygcAASWbANagPgxcBAAFqwABJjGADwABuK8AA9u0AwABoOz4BSsAASaUBasAASbhgA4FngxhJwABJ0BzAAEnggcAASdTANagPgxcBAAFqwABJ+mADwABuK8AA92YAwABoOz4BSsAAShYBasAASilgA4Fngw1JwABKQRzAAEpRgcAASkXANagPgxcBAAFqwABKa2ADwABuK8AA940AwABoOz4BSsAASocBasAASppgA4Fngxg/Pz9KwABKvwEWwABKxi7AAE1zwABuJ8AAbmcGwABufoE4wABK68AASwPAAEzOAACzYwFqwABK7GADwAD9UQIAAAEDwABLHcAATM4AAAABAQHAAEsrAAAAgmZgA7zTAABgA4FnAT4CScAASzkhHMAAS0SAwABLPcA1qblIAQABKwDAAP1ePgJOwABLb8AAS3sAAIRjXQPAAGgiAWADwABuKwEcwABLjhbAAEt9LrgPwABuaUsBAAGAwABLj8A1qbkAwAD87knAAEueIRzAAEuugcAAS6LANanwSAEAASsAwABoPz4BScAAS8EcwABL0YHAAEvFwDWp8IMXAQABasAAS+tgA8AAbivAAPZ4AMAAaDs+AUrAAEwBAWrAAEwUYAOBZ4MNScAATCwcwABMPIHAAEwwwDWp8IMXAQABasAATFZgA8AAbivAAPafAMAAaDs+AUrAAExsAWrAAEx/YAOBZ4MYPz8/SsAATKQBFsAATKsuwABNdMAAbifAAG5oAAA1miIANZtfADWcagA1nR4ANZ2KADWd9gA1nmIANZ7OADWfOgA1n6YANaASADWg6QA1odgANaLbADWj3gA1pb8ANaegADWpgwA1quYAAAASAsAAboGBOMAATNPAAEzZwABOcwPAAE12AAABYAHAAP1RAAABBMAAboOBOMAATSHAAE03GLgPAF0DwAD82gJgA7zTXQPAAGgiAWADwABuKwEywABNNWADvNNdA8AAaCIBYAPAAG4rAAEFwABuiAAAAAAEAAADAAAAAAAAAAAAYAPAAG6BAT8BCQEAwAD9ZwAAAAACBsAAboWBOMAATTzAAE1BwABN+QAAuCMAAAABA8AATVrAAE35AAAAAgICwABNbwAAAIJmYAO80wDAAE2RAAAAhGNdA8AAaCIBYAPAAG4rAABcAT4BScAATaQWwABNtIHAAE2owDWsAoOywABoLj4BPRzAAE3ZFsAATcguuA/AAG6DgL8CAAKAwABN2sA1q/SBwABN5MA1rAIAwAD87z8GwABuhoE4wABN/sAATg7AAE5xAACCiAAAAAEDwABOE8AATnEAAAABAQHAAE4kAAAAemADgRQAAGADwABuSgE+AUrAAE4zAR/AAE4+wABugAIAAoDAAE5SwDWskhbAAE5bLrgPwABugwAAADWrygA1rGgANazRAAAAAgACBsAAbimBOJQXlDKZgAABwABNdwAAAAEDlE2ZgAAAAAMDA5RjAAAAs0BgA7kwAJSLAAAApPhgA7sZAJSwAAAAliZgA7zTAABdA8AA/KkBYAPAAIAvAT4DTpTYlOQAAIRjXQPAAPypAWADwACALwExlOZgA8AAgC8ARpTsAJT/AAAAwABNG2ADwABg0gAclSmBlRbANa0SsxABAAGClTvANa0eALshQT4FSZVLIRaVXoSVUMA1rWDAAEXMwABg4EKVcwA/TpWalaAAAICWYAPAAGIjASaVmgGElaLANa1gYAPAAGIjTpXBlcUAAJnKYAO8wQEWldIWlc2FlcfANa2ogpDAAGGblibAAGKPQCEcleqGlebANa3JSAEAASsAwAD9XpXmlfEASZYVHJYdhpYZwDWtyUgBAAEWli+AliDANa0Gsde5NwDAAP1ePgE9HJZWg5ZKwDWtPFYBAAFqlmBgA8AAgC/AAUXVAMAA/LpJlo4clpaGlpLANa3JSAEAARaWqICWmcA1rQax2Lk4AMAA/V4+AT0cltCDlsTANa08VgEAAWqW2mADwACAL8ABRekA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QnouwABNNMAAbt6AqwEBYAPAAP3rATTAAEKPA8AAQo/AAEKqAAAAAQEBwABCkAAAAID1YAPAAGDSAABgA8AA/esBSsAAQpYBHMAAQpiAwABClsA16oKv1gAAAADAAGDzAMAA/HIngyEAADXhGQA14bUANeJdADXjJAA1420ANeRtADXkuAA15boANecNADXoQwA16sAAAAAKAsAAbuyBOcAAQurAAELwwABQQgPAAE2wAAABYAHAAG6bAAAFBMAAbu6BOcAAQzbAAENECcAATZoBasAAQxVgA8AA/VECXQPAAGgiAWADwABvTgAEwABu74E5wABDa8AAQ3sJwABNnAFqwABDSmADwAD9UQJdA8AAaCIBYAPAAG9OAATAAG7wgTnAAEOiwABDpwm7sgFqwABDgWADwAD9UQJdA8AAaCIBYAPAAG9OAATAAG7xgTnAAEPOwABD1Qm7uQFqwABDrWADwAD9UQJdA8AAaCIBYAPAAG9OAATAAG7ygTnAAEPvwABD/QnAAE2xAGADwABvOgACBcAAbv+BOcAARALAAEQCwABFcgC+dgADwABEFMAARXIAAAAHAwPAAEQkAAAAgmpgA7zoAMAARDMAAATAAE2xYAPAAG86AMAARFwAAADAAE2UXQPAAGgiAWADwABvAQAEwABEdAAABMAATZpdA8AAaCIBYAPAAG9OAWoAYAPAAP0OecAARIkAAAS7sl0DwABoIgFgA8AAb04BagBgA8AA/Q55wABElQAABMAATZxdA8AAaCIBYAPAAG9OAWoAYAPAAP0OecAARKwAAAS7uV0DwABoIgFgA8AAb04BagBgA8AA/Q55YAPAAG7sAT8KCAHAAG7ygQDANeweCAHAAG7ugwDANexKCAHAAG7whADANexsCAHAAG7vhQDANeyMCAHAAG7xhgDANeyuDABAIRzAAETUg8AARMXANexKSAEAASsAwABoP8AARMXAAETbAAwAQCEcwABE/oXAAETtwDXsjEgBAAErAMAAaD/AAETtwABFBQAMAEAhHMAARR2EwABFF8A17GxIAQABKwDAAGg/wABFF8AARSQADABAIRzAAEU+hsAARTbANeyuSAEAASsAwABoP8AARTbAAEVFAAkAwABFVsAAbsACAAKAwABFXcA17BCCwABFZ8A17DAABcAAbwCBOcAARXfAAEV3wABGzAAAAAPAAEWCwABGzAAAAAMBAcAARZIAAACCamADvOgAAsAARagAAATAAE2aXQPAAGgiAWADwABvTgFqAGADwAD9DnnAAEW9AAAEwABNnF0DwABoIgFgA8AAb04BagBgA8AA/Q55YAPAAG7sAT8ICAHAAG7ugQDANe37CAHAAG7vggDANe4dCADAAG7wH8AAReTAAGhTAAFgA8AAb04AAAgAwABu8R/AAEYFwABoUwABYAPAAG9OAAAIAMAAbvIfwABGLcAAb0wBAAEWwABGRYDAAEY8wDXt7LSgvOsADABAIRzAAEZ4gcAARmnANe37SAEAASsAwABoP8AARmnAAEZ/AAwAQCEcwABGooLAAEaRwDXuHUgBAAErAMAAaD/AAEaRwABGqQAJAMAARrrAAG6/AQABgMAARsPANe3sAAgGwABu9IE5wABG0cAARubAAEchAQDAAE2eAWrAAEbSYAPAAP1RAgAAAQPAAEbwwABHIQAAAAAAAABgA8AA+j8BSsAARvMBIhbAAEb7FsAARvMuu7nAAG7xg7LAAGguABbAAEcYFsAARwkuwABNscAAbvLAAE2ewABvSAbAAG72gTnAAEcmwABHScAAR6gBAMAATY/AAG6JAWrAAEcnYAPAAP1RAgAAAQPAAEdWwABHqAAAAAAAAABdA8AAaCIBYAPAAG8BAUrAAEdfASMWwABHZhbAAEdfLqQkwABunoUCvNhqwABHhF0DwABoIgFgA8AAbwHAAUZgasAAR55dA8AAaCIBYAPAAG8BwAFGcgFdA8AAaCIBYAPAAG8BBsAAbvqBOcAAR63AAEfMwABKwgAAnnYBasAAR65gA8AA/VECAAABA8AAR9DAAErCAAAAAQEBwABH4QAAAMAATZ9dA8AAaCIBYAPAAG9OAABdA8AAaCIBYAPAAG8BAT4GTsAAR/bAAEgHAADAAE2yYAPAAPo/ARbAAEgJLsAATZ7AAG70TsAASB3AAEgsAADAAE2hYAPAAPo/ARbAAEguLruuwABupD0cwABIQRbAAEg7LruywABu8IClAQABHMAASFcWwABISC7AAE2awABu7pb9AQABgMAASGHANfBqAMAAaDYAwABoND0cwABIeRbAAEhxLru5wABu8YClAQABHMAASJEWwABIgC7AAE2cwABu75b9AQABasAASKRdA8AAaCIBYAPAAG9OwAD6/QDAAGg2AMAAaDQ9HMAASMgWwABIuS7AAE2xwABu8sAATbMAAAAAwABvREnAAEjYgcAASNzANfCVPgJJwABI9oLAAEj6wDXwuT4BSsAASRQBasAASSZdA8AAaCIBYAPAAG8BwAFGPD9KwABJOgEcwABJTRbAAElBLsAATY7AAG6JwABukJb9AQABIxbAAEleFsAASVcupCTAAG6ehQK82GrAAEmGXQPAAGgiAWADwABvAcABRoVqwABJtV0DwABoIgFgA8AAbwHAAUaXAV0DwABoIgFgA8AAbwEAwABoNknAAEnYgsAASdzANfC5PgFKwABJ9AEcwABKBxbAAEn7LsAATY7AAG6JwABukJb9AQABasAAShxdA8AAaCIBYAPAAG8BwAFGTgDAAGg2PgFKwABKPQEcwABKUBbAAEpELsAATY7AAG6JwABukJb9AQABIxbAAEphFsAASloupCTAAG6ehQK82GrAAEqJXQPAAGgiAWADwABvAcABRmBqwABKrV0DwABoIgFgA8AAbwHAAUZyAV0DwABoIgFgA8AAbwEAwABoNgbAAG77gTnAAErHwABK5sAATGoAALtyAWrAAErIYAPAAP1RAgAAAQPAAErswABMagAAAAICAsAASwQAAADAAE2fXQPAAGgiAWADwABvTgDAAEscAAAAtK5gA8AAaK4AAF0DwABoIgFgA8AAbwEBPgROwABLNsAAS0cAAMAATbJgA8AA+j8BFsAAS0kuwABNnsAAbvQ9HMAAS2cWwABLWC7AAE2xwABu8rtyAQABgcAAS27ANfNUAMAAb0M9HMAAS4oWwABLgi67ucAAbvGApQEAARzAAEuiFsAAS5EuwABNnMAAbu+W/QEAAYDAAEuswDXzOwDAAGg2AMAAaDRJwABLvILAAEvAwDXzdj4BSsAAS9oBasAAS+xdA8AAaCIBYAPAAG8BwAFGPD4BSsAATAUBHMAATCMWwABMDC7AAE2OwABuicAAbpCW/QEAASMWwABMLS67rsAAbqRqwABMQl0DwABoIgFgA8AAbwHAAUY8asAATFRdA8AAaCIBYAPAAG8BwAFGTgFdA8AAaCIBYAPAAG8BAMAAaDYGwABu94E5wABMb8AATJLAAEzHAQDAAE03AWrAAExwYAPAAP1RAgAAAQPAAEykwABMxwAAAAAAAABgA70PAUrAAEynARbAAEy2FsAATKcuwABNscAAbvLAAE03wABvSgbAAG74gTnAAEzMwABM4cAATYIBALt0AWrAAEzNYAPAAP1RAgAAAQPAAEz5wABNggAAAAAAAABgA8AA+j8BSsAATQIBIhzAAE0TFsAATQIuwABNnMAAbu+DFwEAAWrAAE0jYAPAAG9OwAD81wDAAGg7ASIcwABNRBbAAE08Lru5wABu8YMXAQABasAATVRgA8AAb07AAPzXAMAAaDsAIRbAAE12FsAATWcuwABNscAAbvLAAE20wABvSQbAAG78gTnAAE2HwABNn8AATrAAAJ62AWrAAE2IYAPAAP1RAgAAAQPAAE2kwABOsAAAAAAAAABgA8AAbpsBPgFKwABNrQEfwABNuMAAbv8HAAMmwABN1AEWwABN1C6kJMAAbp5gA7zoHMAATesWwABN3C7AAE2xwABu8p62AAAAAMAAb0UcwABOABbAAE30LsAATY7AAG6JwABukJ62AAAAAMAAaD4Eu7IcwABOHhbAAE4YLruywABu8J62AAAAAMAAaD7AAE2aHMAATk4WwABOPy7AAE2awABu7p62AAAAAMAAaD67uRzAAE5wFsAATmguu7nAAG7xnrYAAAAAwABoPsAATZwcwABOpBbAAE6TLsAATZzAAG7vnrYAAAAAwABoPgbAAG79gTnAAE61wABOyMAAUEAAACMBasAATrZgA8AA/VECAAABA8AATtDAAFBAAAAAAAAAAGADwAD96wFKwABO1gEkABUnwABNtRbAAE7kLqQkwABunieApyfAAE2kHMAATwIWwABO/C67ssAAbvCDzAEAAWrAAE8SXQPAAPypAWADwABvTsABRigAwABoPCeApyfAAE2mHMAATzYWwABPLi67ucAAbvGDzAEAAWrAAE9GXQPAAPypAWADwABvTsABRigAwABoPCeApyfAAE22FsAAT2kuwABNscAAbvIngKcnwABNpxzAAE+iFsAAT5MuwABNmsAAbu6DzAEAAWrAAE+yXQPAAPypAWADwABvTsABRigAwABoPCeApyfAAE2pHMAAT+gWwABP1y7AAE2cwABu74PMAQABasAAT/hdA8AA/KkBYAPAAG9OwAFGKADAAGg8J4CnJ8AATaocwABQIxbAAFAXLsAATY7AAG6JwABukIPMAQABasAAUDZdA8AA/KkBYAPAAG8BwADy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AMAATnFgA4i4AWrAAKwpYAOIz4SIScAArD8WwACsSIDAAKxDwDa16IYwh9w+A07AAKxqwACsfgAAwABOcmADiPMBHMAArIAuwABOGgEAAYHAAKyTwDa2AQDAAHAvTsAArLnAAKzEAACa32ADiPMBHMAArNYWwACsxi6GzMAAjy6FcgIAAoPAAKz1wDa2bxbAAK0kFsAArRoWwACtCi6GzMAAjy6HZ5tTmuCctgCbgEnAAK04IRzAAK1HhMAArTzANraeSAEAASsAiQE+AT2KwACtWsA2tjcfwACtbYkDAgACFsAAraUWwACtmxbAAK2LLobMwACPLodnm1OcVpy5FsAArdGEwACtxsA2tp6FHYj3AD8+A07AAK4NwACuIwAAwABOc2ADiPMBHMAAriUuwABOGgEAAYHAAK44wDa2AQDAAHAvTsAArlfAAK5eAACCZmADg14BHMAArmoWwACuYC6Ha8AAcCebEQIAAhbAAK6eg8AArojANrdWhOiI+R7AAK6tiIwBAAFqwACuwWADwAD968AA7mEAAJuyScAArtMhHMAArt6EwACu18A2t4VIAQABKwDAAP1ePgE9isAArvHANrY3HMAAr6gewACvEJrHAQABHMAAr0MWwACvMy6GzMAAjy6FcgIAAoPAAK9swDa3VhbAAK+KhMAAr4PANreFhP+DZgCbgACFgwEAARbAAK++hMAAr7fANreFhQODcACazj89IxzAAK/1FsAAr90uwABODMAAcAnAAHAdSAEAASsAwAD9XhfAAK/dLsAATgzAAHAJMsAAr/lgA4fWYAOIuADAAHAdKwFdA8AA/NoCYAOH1mADiLg9HMAAsBgWwACwAS7AAE4MwABwCcAAcB2AvwIAAoDAALAZwDa16ILAALAhwDa2NwDAAPzvTsAAsDvAALBGAADAAE5vYAPAAHDpARfAALBILrYHHMAAsGIWwACwWi62B8AAcLmEWQEAARbAALCOHMAAsHwWwACwaS64LMAAcLfAAE5nAQABgMAAsIjANrXoAMAAgcPAAE5owACB2QDAAHDwwABwvz0cwACwpi7AAEaCAQABFsAAsLWAwACwsMA2teiCbIfZAMAAjwk9HMAAsMQuwABGggEAARbAALDTgMAAsM7ANrXogmmH2wDAAI8JPRzAALDeLsAATnADAAOAwACw88A2teiBwACw+cA2tgGCwACxB8A2tjcAwABwkj0XwACxGi62B4PAALEkwDa47cAAcL8GwABwlIE8wACxN8AAsUjAALI4AACGKQFqwACxOGADwAD9UQIAAAEDwACxWMAAsjgAAAABAQHAALFoAAAAg+5gA4e+AABgA8AA/Q4BPgROwACxfMAAsYcAAMAATm9gA8AAcOkBF8AAsYkutgccwACxoxbAALGbLrYHwABwuYRZAQABFsAAsc8cwACxvRbAALGqLrgswABwt8AATmcBAAGAwACxycA2uiAAwACBw8AATmjAAIHZAMAAcPDAAHC/PRzAALHnLsAARoIBAAEWwACx9oDAALHxwDa6IIJph8AAwACPCT0cwACyAS7AAEaCAQABFsAAshCAwACyC8A2uiCFuofBAMAAjwk9F8AAsiAutgeBwACyKsA2ujnAAHC/BsAAcJWBPMAAsj3AALJOwACzYwAAhicBasAAsj5gA8AA/VECAAABA8AAsmHAALNjAAAAAQEBwACydAAAAIPuYAOHswAAYAPAAP0OAT4FTsAAsojAALKTAADAAE5vYAPAAHDpARfAALKVLrYHHMAAsq8WwACypy62B8AAcLmEWQEAARbAALLbHMAAsskWwACyti64LMAAcLfAAE5nAQABgMAAstXANrs+AMAAgcPAAE5owACB2QDAAHDwwABwvz0cwACy8y7AAEaCAQABFsAAswKAwACy/cA2uz6Fuoe1AMAAjwk9F8AAsxIutgcWwACzHC7AAE4WwABwusAAcL89HMAAszEuwABGggEAARbAALNAgMAAszvANrs+gmmHtgDAAI8JPRfAALNLLrYHgcAAs1XANrtXwABwvwbAAHCWgTzAALNowACzbcAAs50AAMAATnQAAAABA8AAs4LAALOdAAAAAQEBwACzlgAAAIPuYAOH5AAAXAE+AAbAAHCXgTzAALOiwACzs8AAtcgAAIY0AWrAALOjYAPAAP1RAgAAAQPAALPHwAC1yAAAAAEBAcAAs9sAAACD7mADh+QAAGADwAD9DgE+CD0cwACz5y7AAEaCAQABFsAAs/aAwACz8cA2vLaCa4fmAMAAjwlOwAC0D8AAtB8AAMAAQjVgA8AAcOkBFsAAtCEutgfAAHC5TsAAtDzAALRCAACezWADwACB1wEcwAC0VxbAALRELrgswABwt8AATmcBAAGAwAC0Y8A2vLYAwACBw07AALR2wAC0hQAAwABOdWADwABw6QEcwAC0l4HAALSHwDa89IRZAQABFsAAtKSCwAC0nsA2vRbAAE5owACB2QDAAHDwTsAAtMTAALTPAADAAE52YAPAAHDpASMWwAC034LAALTZwDa9FsAATnfAAIHag8AAtPPANr1QgcAAtQTANrz0AWADwABw6UbAALUZwAC1RsAAtSwAAACoFWADh+8AFsAAtT+AwAC1OsA2vLaGM4fnPgI9F8AAtU4utgeEwAC1WMA2vZTAAHC/PRzAALVqLsAARoIBAAGFwAC1dMA2veIAwACPCT0cwAC1iy7AAE50AQABgMAAtaHANry2AMAAcJY9F8AAtawutgeDwAC1tsA2vVDAAHC/BsAAcJiBPMAAtc3AALXlwAC2XwAAhj8BasAAtc5gA8AA/VECAAABA8AAtfnAALZfAAAAAQEBwAC2DQAAAIPuYAOIEwAAYAOIuAE+Aj0cwAC2GS7AAEaCAQABFsAAtiiAwAC2I8A2vp6Ca4gVAMAAjwlKwAC2OQFqwAC2RmADwACO78ABHkEGwABwmYE8wAC2ZMAAtnzAALbwAACGPQFqwAC2ZWADwAD9UQIAAAEDwAC2jMAAtvAAAAABAQHAALacAAAAg+5gA4gHAABgA4i4AT4BSsAAtqgBHMAAtq8uwABOT8AAcAkDAAMWwAC2x4DAALbCwDa/JIW6iAkWwAC214DAALbSwDa/JIGtiAoWwAC24oDAALbdwDa/JIW7iAsAwABwOQbAAHCagTzAALb1wAC3BsAAt2IAAIZCAWrAALb2YAPAAP1RAgAAAQPAALcTwAC3YgAAAAEBAcAAtyAAAACD7mADiB0AAGADwAD9DgE+Aj0cwAC3LC7AAEaCAQABFsAAtzuAwAC3NsA2v8KCaYgfAMAAjwk9HMAAt0YuwABOGQEAARbAALdWgMAAt1HANr/ChkGIIADAAI8KBsAAcJuBPMAAt2fAALdswAC3iAAAwABOeAAAAAEDwAC3d8AAt4gAAAABAQHAALeBAAAAg+5gA4gpAABcAT4ABsAAcJyBPMAAt43AALeewAC37QAAhkYBasAAt45gA8AA/VECAAABA8AAt6jAALftAAAAAQEBwAC3sgAAAIPuYAOIKQAAYAPAAP0OAT4CPRzAALe+LsAATngBAAGAwAC3ysA2wJkAwABwmz0cwAC31S7AAEaCAQABFsAAt+SAwAC338A2wJmCaYguAMAAjwkGwABwnYE8wAC38sAAuAPAALhkAACGSQFqwAC382ADwAD9UQIAAAEDwAC4EsAAuGQAAAABAQHAALghAAAAg+5gA4g1AABgA8AA/Q4BPgI9HMAAuC0uwABGggEAARbAALg8gMAAuDfANsEogmmINwDAAI8JPRzAALhHLsAARoIBAAEWwAC4VoDAALhRwDbBKIZIiDgAwACPCQbAAHCegTzAALhpwAC4bsAAuJYAAMAATnkAAAABA8AAuH/AALiWAAAAAQEBwAC4jwAAAIPuYAOGtQAAXAE+AAbAAHCfgTzAALibwAC4s8AAuSMAAIXvAWrAALicYAPAAP1RAgAAAQPAALjDwAC5IwAAAAEBAcAAuNMAAACD7mADhrUAAGADiLgBPgI9HMAAuN8uwABOeQEAAYDAALjxwDbB/wDAAHCeSsAAuPwBHcAAuQmF7wEAAYDAALkawDbB/wDAAI8mBsAAcKCBPMAAuSjAALktwAC5VQAAwABOegAAAAEDwAC5PsAAuVUAAAABAQHAALlOAAAAg+5gA4dOAABcAT4ABsAAcKGBPMAAuVrAALlywAC54gAAhg4BasAAuVtgA8AA/VECAAABA8AAuYLAALniAAAAAQEBwAC5kgAAAIPuYAOHTgAAYAOIuAE+Aj0cwAC5ni7AAE56AQABgMAAubDANsLEAMAAcKBKwAC5uwEdwAC5yIYOAQABgMAAudnANsLEAMAAjysGwABwooE8wAC558AAuezAALocAADAAE57AAAAAQPAALoBwAC6HAAAAAEBAcAAuhUAAACD7mADh5IAAFwBPgAGwABwo4E8wAC6IcAAujLAALvCAACGIQFqwAC6ImADwAD9UQIAAAEDwAC6RsAAu8IAAAABAQHAALpaAAAAg+5gA4eSAABgA8AA/Q4BPghOwAC6bsAAun4AAMAATnxgA8AAcOkBFsAAuoAutgfAAHC5PRzAALqNLsAARoIBAAEWwAC6nIDAALqXwDbDiYW6h5QAwACPCU7AALq0wAC6ywAAwABOUGADwABw6QEWwAC6zS7AAE4WwABwuk7AALrqwAC7AgAAwABOUWADwABw6QEWwAC7BC7AAE4XwABwuz0XwAC7Gi62B4PAALskwDbEDcAAcL89HMAAu0EuwABGggEAARbAALtQgMAAu0vANsOJIoeVAMAAjwk9HMAAu14uwABOewEAAYDAALt0wDbDiQDAAHCiPRfAALt/LrYHIxbAALuJLrg/wABwtYLAALuWwDbD6YHAALuvwDbDogFgA8AAcOnAAHC/BsAAcKSBPMAAu8fAALvMwAC8BAAAwABOfQAAAAEDwAC75cAAvAQAAAABAQHAALv9AAAAg+5gA4h4AABcAT4ABsAAcKWBPMAAvAnAALwawAC+SgAAhlkBasAAvApgA8AA/VECAAABA8AAvDLAAL5KAAAAAQEBwAC8SgAAAIPuYAOIeAAAYAPAAP0OAT4KTsAAvF7AALxsAADAAE5mYAPAAHDpARzAALx+FsAAvHYutgfAAHC5hFkBAAEWwAC8qhzAALyYFsAAvIUuuCzAAHC3wABOZwEAAYDAALykwDbFLgDAAIHDwABOaMAAgdkAwABw8D0XwAC8wi62BxzAALzUFsAAvMwutgfAAHC5hFkBAAEWwAC87hbAALzbLrgswABwt8AATmjAAIHGAMAAcPDAAHC/TsAAvSLAAL0wAADAAE5pXQPAAP2cAWADiFMBFsAAvTIuwABOD8AAcAnAAHAgPRfAAL1JLsAATg/AAHAJNQAAAAEAXQPAAP2cAWADiFMBHgDAAMEXAAFgA4hTAACDAMA2xijAAHAgPRzAAL1lLsAATmoBAAEWwAC9eYDAAL10wDbFLoJqiHsAwABwqT0cwAC9iC7AAEaCAQABFsAAvaAWwAC9l4DAAL2SwDbFLoJqiHuCaYSZAMAAjwk9HMAAvasuwABOfQEAAYDAAL3FwDbFLgDAAHCkPRzAAL3mFsAAvdAuwABOEMAAcAnAAHAhlv0BAAEWwAC98C7AAE4PwABwCcAAcCAAwAD9rT0XwAC+CC7AAE4PwABwCYLAAL4cwDbF7MAAcCA9F8AAvi8utgeBwAC+OcA2xUfAAHC/BsAAcKaBPMAAvk/AAL5UwAC+ggAAwABOfgAAAAEDwAC+Y8AAvoIAAAABAQHAAL57AAAAg+5gA4hTAABcAT4ABsAAcKeBPMAAvofAAL6MwAC/GQAAsJIAAAABA8AAvprAAL8ZAAAAAQEBwAC+sgAAAIPuYAOIUwAAXAE+Az0cwAC+0BbAAL6+LsAATg/AAHAJwABwIFYBAAGAwAC+1MA2x48AwAD9qT0cwAC+3y7AAEaCAQABFsAAvu6AwAC+6cA2x4+FB4hbAMAAjwk9HMAAvwAuwABOfgEAAYDAAL8QwDbHjwDAAHCmBsAAcKiBPMAAvx7AAL8jwAC/SgAAwABOfwAAAAEDwAC/MsAAv0oAAAABAQHAAL9DAAAAg+5gA4SDAABcAT4ABsAAcKmBPMAAv0/AAL9UwADAAQAAwABOagAAAAEDwAC/YsAAwAEAAAABAQHAAL9zAAAAg+5gA4SDAABcAT4DPRzAAL+ZFsAAv4SAwAC/f8A2yHiEwISKg/gBAAEWwAC/oS6wksAAcKcAwAD8dz0cwAC/yxbAAL+7gMAAv7bANsh4hMGEi4P4AQABFsAAv9MusJLAAHCnAMAA/Hc9HMAAv+guwABOfwEAAYDAAL/4wDbIeADAAHCoBsAAcKqBPMAAwAbAAMALwADALwAAwABOgAAAAAEDwADAGsAAwC8AAAABAQHAAMAoAAAAg+5gA4PqAABcAT4ABsAAcKuBPMAAwDTAAMBFwADBnQAAhTgBasAAwDVgA8AA/VECAAABA8AAwFPAAMGdAAAAAQEBwADAYQAAAIPuYAOD6gAAYAPAAP0OAT4IPRfAAMBtLoTCHsAAwHzAAI72AQABNQAAAAEAYAODGQEWwADAmIDAAMCTwDbJeIT/g2YjHMAAwKiBAMA2yaZIAQABKwAAKxbAAMCogQDANsmmhMKDSAFgA4jzAMAAcL49F8AAwLcuwABOD8AAcAk1AAAAAQBdA8AA/ZwBYAOIUwEeAMAAwRcAAWADiFMAAIEAwDbJ/8AAcCA9HMAAwNMuwABOagEAARbAAMDngMAAwOLANsl4gmqD7wDAAHCpPRzAAMD2LsAARoIBAAEWwADBDhbAAMEFgMAAwQDANsl4gmqD74JphJkAwACPCT0cwADBGS7AAE6AAQABgMAAwSnANsl4AMAAcKo9HMAAwUoWwADBNC7AAE4QwABwCcAAcCGW/QEAARbAAMFULsAATg/AAHAJwABwIADAAP2tPRfAAMFsLsAATg/AAHAJK8AAcCA9F8AAwYouhMIrwABwvgbAAHCsgTzAAMGiwADBp8AAwc8AAMAAToEAAAABA8AAwbjAAMHPAAAAAQEBwADByAAAAIPuYAODqQAAXAE+AAbAAHCtgTzAAMHUwADB5cAAw2UAAIUaAWrAAMHVYAPAAP1RAgAAAQPAAMH1wADDZQAAAAEBAcAAwgUAAACD7mADg6kAAGADwAD9DgE+CT0XwADCES6Ewh7AAMIgwACO9gEAARbAAMJLFsAAwjyAwADCN8A2y2KE/4NmhMKDSADAAHC+PRfAAMJaLsAATg/AAHAJNQAAAAEAXQPAAP2cAWADiFMBHgDAAMEXAAFgA4hTAACBAMA2y7/AAHAgPRzAAMJ2LsAATmoBAAEWwADCioDAAMKFwDbLYoJqg60AwABwqT0cwADCmS7AAE4ZAQABFsAAwqmAwADCpMA2y2KFF4OuAMAAjwo9HMAAwrwuwABGggEAARbAAMLUFsAAwsuAwADCxsA2y2KCaoOtgmmEmQDAAI8JPRzAAMLfLsAAToEBAAGAwADC8cA2y2IAwABwrD0cwADDEhbAAML8LsAAThDAAHAJwABwIZb9AQABFsAAwxwuwABOD8AAcAnAAHAgAMAA/a09F8AAwzQuwABOD8AAcAkrwABwID0XwADDUi6EwivAAHC+BsAAcK6BPMAAw2rAAMNvwADDiwAAwABOggAAAAEDwADDesAAw4sAAAABAQHAAMOEAAAAg+5gA4N8AABcAT4ABsAAcK+BPMAAw5DAAMOhwADEyAAAhRQBasAAw5FgA8AA/VECAAABA8AAw6vAAMTIAAAAAQEBwADDtQAAAIPuYAODfAAAYAPAAP0OAT4HPRfAAMPBLoTCHsAAw9DAAI72AQABNQAAAAEAYAODGQEWwADD7IDAAMPnwDbNR4T/g2YjHMAAw/yBAMA2zXVIAQABKwAAKxbAAMP8gQDANs11hMKDSAFgA4jzAMAAcL49F8AAxAsuwABOD8AAcAk1AAAAAQBdA8AA/ZwBYAOIUwEeAMAAwRcAAWADiFMAAIEAwDbNzsAAcCA9HMAAxCcuwABGggEAARbAAMQ2gMAAxDHANs1HhQeDgADAAI8JPRzAAMRILsAAToIBAAGAwADEVMA2zUcAwABwrj0cwADEdRbAAMRfLsAAThDAAHAJwABwIZb9AQABFsAAxH8uwABOD8AAcAnAAHAgAMAA/a09F8AAxJcuwABOD8AAcAkrwABwID0XwADEtS6EwivAAHC+BsAAcLCBPMAAxM3AAMTSwADFCgAAwABOOgAAAAEDwADE68AAxQoAAAABAQHAAMUDAAAAg+5gA4hTAABcAT4ABsAAcDuBPMAAxQ/AAMUUwADGRwAAwABOVsAAcAkAAAABA8AAxSnAAMZHAAAAAQEBwADFQQAAAIPuYAOIUwAAXAE+Az0cwADFXxbAAMVNLsAATg/AAHAJwABwIFYBAAGAwADFY8A2zv0AwAD9qU7AAMV6wADFfwAAgpBgA4i4ARzAAMWBLsAARoIBAAEWwADFkIDAAMWLwDbO/YUHiFsAwACPCUnAAMWiIiIhHMAAxbcWwADFq4DAAMWmwDbO/YUHiFtIAQABKwDAAP1eABzAAMXdFsAAxcouuCzAAHC3wABNPAEAAYDAAMXwwDbO/QDAAIHEABbAAMYBLrhAwABwtj4BPRfAAMYygMAAxi3ANs79gpCBwADGOcA2zzuIWT8GwABwsYE8wADGTMAAxl3AAMbdAACGVwFqwADGTWADwAD9UQIAAAEDwADGdcAAxt0AAAABAQHAAMaNAAAAg+5gA4hTAABgA8AA/Q4BPgI9HMAAxpkuwABOVsAAcAkBAAGAwADGr8A20CIAwABwOz0cwADGui7AAE46AQABgMAAxtTANtAiAMAAcLAGwABwsoE8wADG4sAAxufAAMcdAADAAE6DAAAAAQPAAMb/wADHHQAAAAEBAcAAxxYAAACD7mADhyoAAFwBPgAGwABws4E8wADHIsAAxzrAAMfGAACGBgFqwADHI2ADwAD9UQIAAAEDwADHUcAAx8YAAAABAQHAAMdoAAAAg+5gA4cqAABgA4i4AT4CPRzAAMd0LsAAToMBAAGAwADHjcA20OsAwABwskrAAMeYAR3AAMelhgYBAAGAwADHvcA20OsAwACPLAAANkNdADZDuAA2Q+AANkQIADZEMAA2RJYANkUSADZFawA2RisANkaYADZHEQA2R3AANkfpADZISAA2SLwANkkbADZJuAA2SlUANkrpADZMbgA2TmoANk61ADZPEAA2Um4ANlK5ADZVwAA2VgsANldfADZXugA2WjEANlp8ADZbOQA2W6cANlxxADZdHwA2XcQANmUMADZwrAA2eCAANnscADZ7iQA2gFwANoCpADaC2gA2gycANoTLADaFGAA2hcIANoYPADaGuQA2hxgANoieADaI+wA2iqUANoryADaM/AA2jUkANo3zADaOUgA2kL8ANpPDADaUygA2l5UANphMADaYiwA2mnUANpsIADablwA2nD8ANpyaADad0QA2nyAANp+YADaf5wA2oK4ANqDtADahmAA2odcANqJdADainAA2oyIANqNhADaj5wA2pCYANqSsADak6wA2pXEANqWwADamNgA2pnUANqcgADanXwA2qAoANqhJADao9AA2qYwANqnLADasMAA2rG8ANq0aADatsgA2rhMANq6GADau5wA2r1oANq/NADawDAA2sJsANrDsADaxnAA2se0ANrKdADazEAA2s4QANrPSADa1VQA2tbIANrnqADa7CAA2vEEANryAADa+aAA2vu4ANr+MADbAJAA2wGMANsDyADbBigA2wckANsJPADbCjgA2wxQANsNTADbEuQA2xPgANscmADbHZQA2yA0ANshMADbJAwA2yUIANsrtADbLLAA2zNIANs0RADbOjgA2zs0ANs/sADbQdgA20LUANtE7AAAAlgLAAHDEgTzAAMfLwADH0cAAyFcDwABOhAAAAWABwAD9UQAAAgTAAHDGgTzAAMf7wADIBQmFkwBdA8AA/KkBYAOIuAAEwABwx4E8wADIIcAAyCYJhV0AXQPAAPypAWADiLgAAQXAAHDJgTzAAMgrwADIK8AAyFUAAAADwADIOMAAyFUAAAACAgLAAMg+AAAEhZNdA8AA/KkBYAOIuADAAMhPAAAEhV1dA8AA/KkBYAOIuAAAYAPAAHDEAT8DCAHAAHDGgADANtQkCAHAAHDHgQDANtQ5CQHAAMgrwAD9ZwAAAAAAAAA21H8AAAAAAsAAcMqBPMAAyV/AAMllwADUgwPAAE6FAAABYAHAAP1RAAAEBMAAcMyBPMAAybXAAMnBCayNAGADiLgABMAAcM2BPMAAyiTAAMotCcAAToYAXQPAAP2cAWADiLgABMAAcM6BPMAAypbAAMqgCcAATocAXQPAAP2cAWADiLgABMAAcNCBPMAAyqnAAMqyGIZ/wABwCQBgA8AA/AUBKwEFwABw2oE8wADKt8AAyrfAAMr1AAAAA8AAysHAAMr1AAAAAwMDwADKxwAABKyNYAOIuADAAMraAAAEwABOhl0DwAD9nAFgA4i4AMAAyuoAAATAAE6HXQPAAP2cAWADiLgAAGADwABwygE/BAgBwABwzIAAwDbVSwgBwABwzYEAwDbVWQgBwABwzoIAwDbVcAkBwADKt8AA/WcAAAAABQbAAHDSgTzAAMtywADLfsAAz7YAAMAATkAAAAABA8AAy4TAAM+2AAAAAQEBwADLmAAAAIbMYAObUQAAYAOIuAE+BE7AAMu7wADLxQAAiD1gA4i4ARbAAMvHLqyNwABwzEnAAMvZIRzAAMvoFsAAy90uwABOh8AAcM5IAQABKwDAAP1ePgFGwADMXcAAzILAAMxuAAAAgpBgA4i4ABbAAMx2LsAATofAAHDOPgFJwADMjBzAAMyggMAAzJDANtXwmucCAAIWwADMrC6sjcAAcMyCwADMusA21lIAm4U+AUrAAMzNARbAAMzkgMAAzNTANtXwhXCbXT8/ScAAzQohHMAAzRgWwADNDi7AAE6GwABwzUgBAAErAMAA/V4+AUbAAM0pwADNTcAAzToAAACCkGADiLgAFsAAzUIuwABOhsAAcM0+AknAAM1XHMAAzWCCwADNW8A21upIAQABFsAAzXOAwADNY8A21fCFcJtdAIi8PgFKwADNiQGCwADNkMA21uo/ScAAzagcwADNvIDAAM2swDbV8JrnAgACgsAAzcjANtbqgcAAzc7ANtYHAJuFPgE9icAAzebANtYHgsAAzfLANtbqScAAzgchHMAAzhyAwADODMA21fCa5wIAAoHAAM4owDbWB4LAAM4zwDbW6gCbhT4BSsAAz3kBKz8/SsAAz6IBgcAAz6nANtYHBsAAcNiBPMAAz7vAAM/PwADQjAEAg8EBasAAz7xgA8AA/VECAAABA8AAz9jAANCMAAAAAAAAAGADwAD8BQE+AknAAM/eHMAAz+wWwADP4i6Gf8AAcAnAAHDQSAEAASsAwAD9KD4BPRfAAM/9LoZ/wABwCR7AANARgfQCAWADiLgCFsAA0BkuwABOh8AAcM4ewADQN4H0AgFgA4i4AhbAANA/LsAATobAAHDNHsAA0FKB8QEAARbAANBdLqyNwABwzAAAAMAAcNA/SsAA0HgBFsAA0H8uhn/AAHAJwABw0AbAAHDTgTzAANCRwADQq8AA0ZgDAEgBasAA0JJgA8AA/VECAAABA8AA0K3AANGYAAAAAQEBwADQrgAAAIPWWwAAYAPAAPo/AT4CScAA0LsewADQv8AA9eYCAAIugMAA0M/ANtjkAErAANDXASk/SsAA0OgBIiIiJcAA0PWAwADQ78A22ORgA8AAcMoAHMAA0RsWwADRDi6sjcAAcMxIAQABFsAA0SQUwADRHsA22OQAAWADwABwyqyNwABwzACIvAAewADRPIHlAgFgA4i4AhbAANFGLsAATobAAHDNFsAA0VcUwADRUcA22OQAAWADwABwysAATobAAHDNAAAewADRbYHlAgFgA4i4AhbAANF3LsAATofAAHDOFsAA0YkUwADRg8A22OQAAWADwABwysAATofAAHDOAAbAAHDVgTzAANGdwADRosAA0y0AAMAATojAAHAJAAAAAQPAANGqwADTLQAAAAICAsAA0b8AAACD5GADwAD+NQDAANHqAAAAwABOiWEDAV0DwAD8ZwFgA4i4YAPAAP3rAABcAT4FPRzAANIAgMAA0f3ANtoXgooBAAEnmbYAwAD+SU7AANIXwADSHQAAorhgA8AA/esBJwBJwADSJyEcwADSNRbAANIrLsAATobAAHDNSAEAASsAwAD9Xj4DPRzAANJJgMAA0kbANtoXgooBAAEnwABOigDAAP5JPRzAANJigMAA0l/ANtoXgooBAAEcwADSc4HAANJowDbaJyABAAEWwADSdC7AAE6GwABwzQAAAMAA/kk9isAA0ofANtppJ4CnP0nAANKeIRzAANKtFsAA0qIuwABOh8AAcM5IAQABKwDAAP1ePgM9HMAA0sGAwADSvsA22heCigEAAYLAANLHwDbaaQDAAP5JPRzAANLYgMAA0tXANtoXgooBAAEnwABOiwDAAP5JPRzAANLygMAA0u/ANtoXgooBAAEcwADTA4HAANL4wDbaJyABAAEWwADTBC7AAE6HwABwzgAAAMAA/kk/PRzAANMfgMAA0xzANtoXgooBAAEnhsYAwAD+SQbAAHDWgTzAANMywADTRcAA1IEAACMBasAA0zNgA8AA/VECAAABA8AA003AANSBAAAAAAAAAGADwAD96wE+B07AANNjwADTZgAAg+RgA8AA/jUBH8AA02zAAP5UAAAAAD0cwADTg4DAANOAwDbcB4KKAQABJ8AATowAwAD+ST0cwADToIDAANOdwDbcB4KKAQABJMAA074CJ8AATo0WwADTsS6sjcAAcMwAwAD+SUnAANPFIRzAANPTFsAA08kuwABOhsAAcM1IAQABKwDAAP1ePgE9HMAA0+eAwADT5MA23AeCigEAASTAANP/Aie88hbAANP1LsAATobAAHDNAMAA/kk/ScAA1AwhHMAA1BsWwADUEC7AAE6HwABwzkgBAAErAMAA/V4+AT0cwADUL4DAANQswDbcB4KKAQABJMAA1EkCJ7zzFsAA1D4uwABOh8AAcM4AwAD+ST89HMAA1FmAwADUVsA23AeCigEAASeDIQDAAP5JSsAA1GkBHMAA1HOAwADUcMA23AcjAAAAAMAA/k4AADbVxAA219AANtivADbZ5wA228cANt1aAAAABQLAAHDbgTzAANWMwADVksAA9HEDwABOjgAAAWABwAD9UQAAAwTAAHDdgTzAANXiwADV7gmsjQBgA4i4AATAAHDegTzAANZDwADWTgnAAE6PAF0DwAD8ZwFgA8AAcMoABMAAcN+BPMAA1qnAANa4CcAATpAAXQPAAPxnAWADiLgAAQXAAHDogTzAANa9wADWvcAA1wIAAAADwADWx8AA1wIAAAADAwPAANbNAAAErI1gA4i4AMAA1uAAAATAAE6PXQPAAPxnAWADwABwygDAANbyAAAEwABOkF0DwAD8ZwFgA4i4AABgA8AAcNsBPwQIAcAAcN2AAMA23h0IAcAAcN6BAMA23isIAcAAcN+CAMA23kQJAcAA1r3AAP1nAAAAAAUGwABw4YE8wADYH8AA2CrAAN8RAADAAE4/AAAAAQPAANgxwADfEQAAAAIBAcAA2D4AAACCkGADiLgAAcAA2EoAAAC6T2ADwAD6PwFqAGADwAD9DnlgA8AAcNsBPgdOwADYacAA2HgAAMAATpFdA8AA/ZwBYAPAAHDKAR7AANh+wADBFwABYAPAAHDKAABPwADYlsAA2JsAAAHAAE6SYQMBYAPAAHDKYAPAAPo/AAPAANiowADcuwAAAAEBAcAA2LQAAADAAE6TYAPAAHDKAABgA8AA+j8BPgdOwADYzcAA2NUAAK6UYAPAAPo/ASpPwADY5cAA2PYAAAHAAE6UYQMCXQPAAP2cAWADiLhgA4i4XQPAAP2cAWADiLgAA8AA2P/AANpaAAAAAgICwADZEQAAAJckXQPAAP2cAWADiLgAwADZIgAAAIKQYAOIuAAAXQPAAP2cAWADiLgBPgROwADZQwAAAIF2XQPAAP2cAWADiLgAScAA2VMcwADZW4fAANlXwDbfwkgBAAErAMAA/V4+AT0VwADZcMA23/UJHsAA2X3AAMEXAAFgA4i4AABJwADZoBzAANmoh8AA2aTANt/CgxcBAAEUwADZscA239cIAADAAP2oPgFKwADZxAGHwADZy8A238I+AT0VwADZ68A23/UJHsAA2fLAAMEZAQFgA4i4AYfAANoKwDbfwgA9jcAA2iLANt9xKUrAANo6ATXAANpBAAABAF0DwAD9nAFgA4i4ARTAANpBwDbf9QkANQAAAAEAWwEcwADaSRTAANpHwDbgtwoAVgEAARTAANpNwDbf1wgAAMAA/akUAMA24LcKAE7AANp0wADafgAAwABOhl0DwAD9nAFgA4i4ATUAAAABAGADwABwygGEwADagMA231QjHMAA2oyHAMA24SZIAQABKwAAKxbAANqMhwDANuEmwABOhsAAcM0BXQPAAP2cAWADiLhOwADarsAA2rkAAMAAToddA8AA/ZwBYAOIuAE1AAAAAQBgA8AAcMoBhMAA2rvANt9UIxzAANrHFADANuGKCABIAQABKwAAKxbAANrHFADANuGKCADAAE6HwABwzgFdA8AA/ZwBYAOIuEnAANrZgcAA2t3ANt7TPgE9j8AA2u/ANuELHMAA2wSGwADa+8A234ogAgACh8AA2wXANuELgMAA2xDANt7EAAA+AT0VwADbLsA24W8IHMAA20SGwADbO8A234ogAgACFMAA20XANuFvCACAwADbUcA23sQAAD0cwADca4LAANxcwDbe9lYBAAEfwADcb8AAcNoDAAMWwADcei6sjcAAcN2HwADciMA24QsUwADck8A24W8IAAAAwAD9qUrAANynAYXAANyuwDbfcU7AANzHwADczwAArpRgA8AA+j8BKknAANzcFsAA3OwWwADc4C7AAE6PwABw3oFVwAD8iz4BPYzAANz9wDbioBzAAN0FhMAA3P3ANuKggQYBAAEcwADdFYPAAN0IwDbfKiABAAErAAAAwAD6SD4BRsAA3TDAAN1bwADdQAAAAMAATpNgA8AAcMoAFsAA3U4uwABOj8AAcN4+AT2MwADdZcA24qAcwADdbYTAAN1lwDbioIEGAQABHMAA3X2DwADdcMA23yogAQABhcAA3X7ANuMWAAAAwAD6SE7AAN2zAAAAwABOlV0DwAD8ZwFgA4i4AEnAAN3LHMAA3d8WwADdzy7AAE6QwABw34MXAQABgMAA3ejANt7EAMAA/HY+AT2NwADd98A243gWwADeDC7AAE6QwABw3z4CPY3AAN4wwDbjeDXAAN5JAAABAF0DwAD9nAFgA4i4AR7AAN5JwADBGQEBYAOIuAEWwADeXy7AAE6QwABw3wA1AAAAAQBbARzAAN56hsAA3njANuPhVgEAAYDAAN5+wDbexADAAP2phgDANuPhPYzAAN6LwDbioClKwADepQEjhMAA3qzANuKgH8AA3sLAAHDoAwADFsAA3s0urI3AAHDdgsAA3tvANt72hcAA3uvANuN4AC4BYAPAAHDbBsAAcOKBPMAA37PAAN++wADtZwAAWAAAAAEDwADfwsAA7WcAAAABAQHAAN/OAAAAg9ZgA8AAcNsAAGADwABw2wE+D0nAAN/bHMAA3+WAwADf38A25LlIAQABKwDAAP1eSsAA3+4BKz9JwADf/x7AAOADwAD15gIAAi6AwADgE8A25LkASsAA4BsBLj9OwADgPcAA4EwAAMAATpFdA8AA/ZwBYAPAAHDKAR7AAOBSwADBFwABYAPAAHDKAABOwADgesAA4I0AAMAATpVdA8AA/ZwBYAOIuAEewADgk8AAwRcAAWADiLgAAE/AAOFpwADhbgAAAcAATpZhAwRdA8AA/GcBYAPAAHDKXQPAAP2cAWADiLhdA8AA/ZwBYAOIuF0DwAD8ZwFgA4i4XAADwADhfMAA6NUAAAAEBATAAOGbAAAAwABOj10DwAD8ZwFgA8AAcMoAwADhwQAAAMAATpddA8AA/ZwBYAOIuADAAOHqAAAAwABOmF0DwAD9nAFgA4i4AMAA4hkAAADAAE6ZXQPAAPxnAWADiLgAAFwBPgFGwADiN8AA4mLAAOJHAAAAwABOk2ADwABwygCEwADiVcA25co+BU7AAOJ9AAAAwABOml0DwAD9nAFgA4i4AEnAAOKTIRzAAOKsFsAA4qIUwADil8A25jYIAMAATobAAHDNSAEAASsAwAD9Xj4EPRXAAOLBwDbmVAkewADi1MAAwRkBAWADiLgBFsAA4vUUwADi6sA25jYIAMAATobAAHDNAD0cwADjehTAAONtwDbmVAkAlwABAAGHwADjhMA25hEAwAD9rj0cwADkXhTAAORRwDbmVAkAlv0BAAGGwADkaMA25foAwAD9rUnAAOSEFsAA5JUUwADkiMA25lQJAIFVwAD8iz4BPRXAAOSswDbmVAkrPgE9HMAA5POCwADk4MA25U2ApQEAARTAAOT6wDbmVAkAAMAA/ao/TsAA5TgAAADAAE6bXQPAAP2cAWADiLgAScAA5U8hHMAA5WkWwADlXhTAAOVTwDbmNggAwABOh8AAcM5IAQABKwDAAP1ePgQ9FcAA5X7ANudnCh7AAOWSwADBGQEBYAOIuAEWwADlsxTAAOWowDbmNggAwABOh8AAcM4APRzAAOY6FMAA5izANudnCgCXAAEAAYfAAOZEwDbmEQDAAP2uPRzAAOceFMAA5xDANudnCgCW/QEAAYXAAOcowDbl4wDAAP2tScAA50MWwADnVRTAAOdHwDbnZwoAgVXAAPyLPgE9FcAA52zANudnCis+AT0cwADntILAAOehwDblTYClAQABFMAA57vANudnCgAAwAD9qj9JwADn6SIhHMAA5/oUwADn7cA25lQJAEgBAAErAMAA/V4BIRzAAOgTFMAA6AXANudnCgBIAQABKwDAAP1ePgE9HMAA6H+BwADoYcA25R1WAQABH8AA6IfAAHDaAwADFsAA6JIurI3AAHDdFMAA6KDANuZUCQAUwADorsA252cKAAAAwAD9qT9OwADo7cAA6PsAAMAATpxdA8AA/ZwBYAOIuAEewADpAcAAwRcAAWADiLgAAE7AAOkqwADpOQAAwABOnV0DwAD9nAFgA4i4AR7AAOk/wADBFwABYAOIuAAARsAA6VfAAOmCwADpZwAAAMAATpNgA8AAcMoAFsAA6XUuwABOj8AAcN4+AknAAOmKIRzAAOmjFsAA6ZmGwADpjsA26WHAAE6GwABwzUgBAAErAMAA/V4+AT0cwADpxITAAOm2wDbpAYClAQABFsAA6daGwADpy8A26WHAAE6GwABwzQDAAP2qP0nAAOnwIRzAAOoKFsAA6f+GwADp9MA26WHAAE6HwABwzkgBAAErAMAA/V4+AT0cwADqLIXAAOodwDbpLYClAQABFsAA6j6GwADqM8A26WHAAE6HwABwzgDAAP2qP07AAOpvwADqfgAAwABOl10DwAD9nAFgA4i4AR7AAOqEwADBFwABYAOIuAAATsAA6q3AAOq9AADAAE6YXQPAAP2cAWADiLgBHsAA6sPAAMEXAAFgA4i4AABGwADq28AA6wzAAOrrAAAAwABOk2ADwABwygAWwADq/4DAAOr5wDbkucAATo/AAHDePgJJwADrFCEcwADrLRbAAOsjFMAA6xjANuqeCADAAE6GwABwzUgBAAErAMAA/V4+AT0cwADrT4bAAOtAwDbqPoClAQABFsAA62EUwADrVsA26p4IAMAATobAAHDNAMAA/ao/ScAA63shHMAA65UWwADrihTAAOt/wDbqnggAwABOh8AAcM5IAQABKwDAAP1ePgE9HMAA67iHwADrqMA26mqApQEAARbAAOvKFMAA67/ANuqeCADAAE6HwABwzgDAAP2qPz0cwADr+IPAAOvqwDblfSAEAAQWwADr/i7AAE6PwABw3obAAOwLwDbqPofAAOwbwDbqahbAAOw6gMAA7DTANuS5wABOkMAAcN8AAD0cwADsXoPAAOxQwDblfSAEAAQWwADsboDAAOxowDbkucAATo/AAHDehMAA7HvANukBhcAA7IrANuktFsAA7J8uwABOkMAAcN8AAEnAAOy2FsAA7MmBwADsusA25R2BVcAA/Is+AkAWwADs9ILAAOzhwDblTYFVwAD8i8AA7OHAAOz7AErAAO0EASs/SsAA7RwBH8AA7SfAAHDoAwADFsAA7TIurI3AAHDdgcAA7UDANuUdgsAA7VDANuVNAAbAAHDjgTzAAO3mwADt8sAA8dcAAMAATkAAAAABA8AA7fjAAPHXAAAAAQEBwADuDAAAAIbMYAObUQAAYAOIuAE+A07AAO4vwADuOQAAiD1gA4i4AStGwADuRcAA7nDAAO5VAAAAwABOk2ADwABwygAWwADuYy7AAE6PwABw3j4DTsAA7oTAAO6JAACCkGADiLgBHMAA7paCwADui8A27PDAAE5AAQABgMAA7p3ANuy+AMAAcNJJwADutRzAAO6+g8AA7rnANu0TSAEAASsAiLw+AUrAAO8QASs/ScAA7yscwADvOYHAAO8vwDbs1UgBAAErAIi8PgE9icAA70zANuzVg8AA71jANu0TPgFJwADvdRzAAO9+g8AA73nANu0TSAEAARbAAO+RgMAA74HANuy+hXCbXQCIvD4AScAA79UcwADv44HAAO/ZwDbs1UgBAAEWwADv9oDAAO/mwDbsvoVwm10AiLw+AT2JwADwDMA27NWDwADwGMA27RNJwADwLRzAAPBBgMAA8DHANuy+mucCAAKBwADwTcA27NWDwADwWMA27RMAm4U+AT2JwADwa8A27NWDwADwd8A27RNJwADwjCEcwADwoYDAAPCRwDbsvprnAgACg8AA8K3ANu0TgcAA8LPANuzVAJuFPgFK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P07AAEQywABEOgAAhINdA8AA/KkBYAO8wQExwABESWADvMEAPRzAAERTLsAATq0CAAKCwABEa8A3IRw0wABEcQPAAERxwABF0gAAAAEBAcAARH4AAACbFWADvMEAAGADwACIIgE+AknAAESSHMAARJYumucCAAKFwABEosA3Jw+AwABErMA3IP4AwABxKT4CPRzAAETHhMAARL/ANybCVgEAAYXAAETLwDcnDwDAAPy6SsAARXQBasAARYlgA8AAiCLAAUhEP0rAAEWsAWrAAEXBYAPAAIgiwAFIXQDAAHEuSsAARdsBH8AARebAAHGtAQABhMAARfXANybCAD4EScAARhIiHMAARhuAwABGFsA3IP5IAQABgsAARh7ANyEcAMAA/V4BHMAARiYumucCAAKAwABGMsA3IP6CwABGOMA3IRwAwABxKT4BSsAARpgBasAARq5gA8AAcZ/AAUhxScAARsUcwABGyS6a5wIAAoLAAEbVwDchHIDAAEbbwDcg/gDAAHEpPgFKwABHOwFqwABHUWADwABxn8ABSCs/TsAASdfAAEnfAACEg10DwAD8qQFgA7zBATHAAEnuYAO8wQA9HMAASfguwABOsAIAAoDAAEoPwDcg/jTAAEoVA8AAShXAAEt2AAAAAQEBwABKIgAAAJsVYAO8wQAAYAPAAIgiAT4CScAASjYcwABKOi6a5wIAAoXAAEpGwDcorILAAEpQwDchHADAAHEpPgI9HMAASmuEwABKY8A3KF9WAQABhcAASm/ANyisAMAA/LpKwABLGAFqwABLLWADwACIIsABSEQ/SsAAS1ABasAAS2VgA8AAiCLAAUhdAMAAcTNKwABLfwEfwABLisAAca0BAAGEwABLmcA3KF8ABsAAcTqBPcAAS7DAAEvPwABMIAAAwABOtwFqwABLsWADwAD9UQIAAAEDwABL5MAATCAAAAABAQHAAEvxAAAAmcpgA7zBAABgA8AAh6ABPgFKwABL/AEcwABMFxbAAEwDLsAATrvAAHD3wABxHksBAAGAwABMGMA3KZIAwAD87gbAAHE7gT3AAEwlwABMOsAATHcAAMAATrgBasAATCZgA8AA/VECAAABA8AATEXAAEx3AAAAAQEBwABMUgAAAJnKYAO8wQAAYAPAAIfOAT4BSsAATF0BHMAATG4WwABMZC7AAE68wABw98AAcR9LAQABgMAATG/ANyoRAMAA/O4GwABxPIE9wABMfMAATI/AAE4fAACzmAFqwABMfWADwAD9UQIAAAEDwABMk8AATh8AAAABAAHAAEyhAAAAmcpgA7zBAWoAYAPAAP0OeQBgA8AA/esBPgROwABMusAATL0AAIPkYAPAAP41AR/AAEzDwAD+VAAAAABJwABM1yEcwABM34DAAEzbwDcqjkgBAAErAMAA/V4+AT0cwABM84HAAEzwwDcqsIKKAQABJMAATSkDJ8AATteAwABNIsA3Ko4ng4AAwAD+ST4BPRzAAE1CgcAATT/ANyqwgooBAAEnwABO2ADAAP5JPRzAAE2+HMAATYIuwABOtwEAARbAAE2oFsAATZgutATAAHD3wABxHZrMuE4AwABxOoQsBAACgcAATcbANyqwJ4DZAsAATtkcwABN5YDAAE3hwDcqjkgBAAErAMAA/V7AAE7agMAATf3ANyqOwACHvErAAE4HARzAAE4RgcAATg7ANyqwIwAAAADAAP5OAAA3C9sANw5CADcQQAA3EN4ANxF8ADcSGgA3ErgANxNaADcU/gA3FaMANxZsADcXOgA3F+IANxivADcZhQA3GlMANxskADcbzAA3HJkANx1vADce5gA3H44ANx/1ADcg0AA3KVoANynZADcqWAA3K80AAAAbAsAAcT+BPcAATiTAAE4qwABmNgOj0gAAAWABwAD9UQAABwTAAHFCgT3AAE7swABPLAnAAE67wABw9wBdA8AA/NoCYAO8wWADwACHoAEywABPKmADvMFgA8AAh6AABMAAcUOBPcAAT1HAAE93CcAATrzAAHD3AF0DwAD82gJgA7zBYAPAAIfOATLAAE91YAO8wWADwACHzgAEwABxSIE9wABPpMAAT94JtkEAXQPAAPzaAmADvMFdA8AA/ZwBYAO8wQEewABPusAA/OEAAmADvMFdA8AA/ZwBYAO8wQAABMAAcUSBPcAAT/jAAFAHCbQEwABw9wBgA7hMAATAAHFFgT3AAFAewABQKwm74sAAcPcAYAPAAHF2AATAAHFGgT3AAGMXwABjPxjAAE7bwABw9wBdA8AA/NoCYAO8wWADwABxWAEywABjPWADvMFgA8AAcVgABMAAcUeBPcAAZSzAAGVMGMAATtzAAHD3AF0DwAD82gJgA7zBYAPAAHFjATLAAGVKYAO8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AAABA42ejhEAAAACAgKNsAAACIYFYAPAAGHDAI3HAAAopN9gA8AATSsAAGADwABApgE+AUqN2gEmjdoBFo4BFo3tgY3hwDdtLLC9wABNNLUwvgdgA8AAQKYGwABx34E/jhaOK46mAAC8igFqjhdgA8AA/VECAAABA44zjqYAAAACAgKORQAACIYFYAPAAGHTAI5cAAAopN9gA8AATSsAAGADwABApgE+AUqObwEmjm8BFo6WFo6CgY52wDdtobC9wABNNLUxvghgA8AAQKYGwABx4IE/jquOwI85AAC8fwFqjqxgA8AA/VECAAABA47JjzkAAAACAgKO3AAACIYFYAPAAGERAI7zAAAopN9gA8AATSsAAGADwABApgE+AUqPBgEmjwYBFo8tFo8ZgY8NwDduFrC9wABNNIVwvgBgA8AAQKYGwABx4YE/jz6PU4/ZAADAAEXLAWqPP2ADwAD9UQIAAAEDj2OP2QAAAAICAo98AAAIhgVgA8AAYlUAj5MAACik32ADwABNKwAAYAPAAECmAT4BSo+mASaPpgEWj80Wj7mBj63AN26NsL3AAE00hXC+AGADwABApgbAAHHigT+P3o/zkHIAALx8AWqP32ADwAD9UQIAAAEDj/6QcgAAAAICApATAAAIhgVgA8AAYYgAkCoAACik32ADwABNKwAAYAPAAECmAT4BSpA9ASaQPQEWkGQWkFCBkETAN28CsL3AAE00hcC9+2ADwABApgbAAHHjgT+Qd5CMkQUAAJ7vAWqQeGADwAD9UQIAAAEDkJWRBQAAAAICApCoAAAIhgVgA8AAYaQAkL8AACik32ADwABNKwAAYAPAAECmAT4BSpDSASaQ0gEWkPkWkOWBkNnAN293sL3AAE00hYe99WADwABApgAAN2WcADdmfAA3ZwMAN2gfADdojwA3aQYAN2l9ADdp8gA3amcAN2rcADdsCgA3bH8AN2z0ADdtaQA3bd4AN25TADduygA3bz8AN2+0AAAAEgABBsAAcc+BP4HVgd6CYwABwABPJQAAAAEDge2CYwAAAAICAoH7AAAApN9gA8AATSsAghYAAACAlmADwABg0gAAYAPAAECmAT4BSoIhASaCIQEcgi6BgijAN3A3hE0CAAJqgjtgA8AAcdDAAUjBgIJVwDdwKQDAAGDxYAPAAECmAYE/ADdwhQA3ZT4AN3AF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QJqFmpOauQACt+UAAAABA5qkmrkAAAABAQGatAAAAJ52YAOE2QAAYAO95wAGwAByGoFAmv2bC5s9AAK35gAAAAEDmyKbPQAAAAEBAZs4AAAAnnZgA4T+AABgA73nAAbAAHIbgUCbg5uRm+gAArfnAAAAAQObopvoAAAAAgICm7kAAACCimADhOsAm9QAAACwvWADvfIAAGADvecABsAAchyBQJwfnC2cigACtrYAAAABA5w+nIoAAAACAgKcVQAAALfoYAOG3QCcdgAAALC9YAO98gAAYAO95wAGwAByHYFAnNCc3p0OAAK2qwAAAAEDnOydDgAAAAEBAZz/AAAAsC9gA4fWAABgA73nAAbAAHIegUCdVZ1jnZoAAratAAAAAQOdeJ2aAAAAAQEBnYsAAACwL2ADh9YAAGADvecABsAAch+BQJ3infCeKAACtqwAAAABA54GnigAAAABAQGeGQAAALAvYAOH1gAAYAO95wAGwAByIIFAno+elJ76AAK36QAAAAEDnqme+gAAAAICAp68AAAAsC9gA4fWAJ7mAAAAsL1gA73yAABgA8AA+j8ABsAAciGBQJ86n0ifewACt+oAAAABA59Zn3sAAAABAQGfbAAAALAvYAOH1gAAYAO95wAGwAByIoFAn62fu5/hAAK36wAAAAEDn8yf4QAAAAEBAZ/aAAAAgmZgA7zTAABgA73nAAbAAHIjgUCgGqAooFMAArfsAAAAAQOgQqBTAAAAAQEBoEkAAACA7WADvQwAAGADvecABsAAciSBQKC3oMWhBAACtrMAAAABA6DZoQQAAAACAgKg4wAAAKTxYAPAAEtkAKD7AAAAhX9gA73nAABgA73nAAbAAHIlgUChTaFbobEAArftAAAAAQOhcaGxAAAAAgICoYgAAACvS2ADwABmywChpQAAAKTfYAPAAE0rAABgA73nAAAAN3qqADd63AA3exoAN3tMADd7fgA3e7wAN3v6ADd8LAA3fF4AN3yQADd80AA3fQIAN300ADd9ZgA3faYAN33oAAAADwLAAHIogUCh5qH1qsYHwABPPAAAAWABwAD9UQAAAAEFwAByPAAAAAAEAAADAAAAAAAAAAAAYAPAAHIoAT8BCQEAwAD9ZwAAAAAQBsAAciqBQKIzokSiUQECqq0AAAABA6JRolEAAAAAAAAAYAO80wAGwAByLIFA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clfAAUnVAD4BSsAAQl4BHsAAQmnAAH2rAQABgMAAQpbAN49TAD0wwABCqR/AAEKzwAD7lwEAASTAAELgAifAAE9WgcAAQtvAN49uAAbAAHKIgUDAAEMdwABDIsAAQ0AAAq8WAAAAAQPAAEMxwABDQAAAAAEBAcAAQzsAAACEO2ADwABc8gAAXAAAADeOoQA3jskAN475ADePKQA3kIQAN5DBAAAABQLAAHKJgUDAAEN6wABDgMAARwgDwABPVwAAAWABwAD9UQABYAHAAHKAAgTAAHKLgUDAAEQ3wABEVwaD5wBgA8AA/esBasAARD1gA8AA/evAAUoHBMAAcoyBQMAARHfAAER7CYPuAWrAAERdYAPAAP1RAmADgxkAAQXAAHKWgUDAAESAwABEgMAARKEAAAADwABElsAARKEAAAABAQHAAEScAAAEg+5gA4MZAABgA8AAcokBPwIIAcAAcoyAAMA3kXsJAcAARIDAAP1nAAAAAAUGwAByjoFAwABEpsAARK7AAEV0BAGvFQAAAAEDwABE18AARXQAAAABAQHAAETjAAAAg0RgA8AAXUEAAGADwAByiQE+BD0cwABE+IDAAETxwDeR2IKUAQABasAARP5gA8AA/evAAUoHAMAAXUNOwABFEcAARRYAAIPuYAODGQEcwABFH4DAAEUYwDeR2MAARBsAAAAAwABdWT0cwABFO4DAAEU0wDeR2IKMAQABasAART9gA8AA/evAAUoHAMAAXURKwABFSQEfwABFVMAAcpYBAAGBwABFa8A3khsABsAAcpCBQMAARXnAAEWKwABGDgAArxYBasAARXpgA8AA/VECAAABA8AARZnAAEYOAAAAAQEBwABFowAAAIQ7YAPAAFzyAABcAT4EPRzAAEW0gMAARa/AN5LAr70BAAEWwABFvi6CZ8AAcpQAwABdAz0cwABFzoDAAEXJwDeSwIKUAQABasAARdRgA8AA/evAAUoHAMAAXPc9HMAAReOAwABF3sA3ksCXcgEAARbAAEXyLoPuwAByjADAAF0GPRzAAEYCgMAARf3AN5LAgowBAAFqwABGBmADwAD968ABSgcAwABc+AbAAHKTgUDAAEYTwABGLsAARl0BAIRbAWrAAEYUYAPAAP1RAgAAAQPAAEY3wABGXQAAAAAAAABgA7XFAUrAAEY6AR7AAEY6wACcNwEAARbAAEZYLoPuwAByjAAGwABylIFAwABGYsAARnzAAEaVAQCCZwFqwABGY2ADwAD9UQIAAAEDwABGgcAARpUAAAAAAAAAYAPAAHJXAUrAAEaEAWrAAEaOYAPAAHJXwAFJowbAAHKRgUDAAEaawABGrcAARwYAACMBasAARptgA8AA/VECAAABA8AARrXAAEcGAAAAAAAAAGADwAD96wFKwABGuwEkAAgnwABPWRbAAEbZLoJnwABylCeApyfAAE9QFsAARu0ug+7AAHKMJ8AAT1EWwABG/C6EW8AAcpMngyEAADeRrgA3kooAN5NvADeTygA3lB0AN5ScAAAABQAEBsAAceiBQKtLq1utfgABwABPWgAAAAEDq2qtfgAAAAICAqt/AAAAs5lgA8AAcewAq5gAAACCZmADvNMAAGADhIMBPgNOq7WrwAAAwABMS2ADwAByTgEcq82Aq8LAN5TdwABPNAEAAYGr4cA3lOsAwAByCUer7Bar/4Kr9MA3lQCCZ8AAclAEAawbaqwbYAPAAHI9wAFIzQA+Ak6sNKw5AACD7mADg14BJqw0ARasRoKsO8A3lQCD7sAAclFgA4NeSqxSARasXoOsWcA3lVaCaoNvAqx8aqx8YAPAAHI9wAFI5qydaqydYAPAAHI9wAFI/wA+Ak6svqzDAACD7mADg14BJqy+ARas0IKsxcA3lQCD7sAAclFgA4NeSqzcARas6IOs48A3lbCCaoNvAa0Gaq0GYAPAAHI9wAFJGAA+Ak6tKq0vAACD7mADhxoBJq0qARatPIKtMcA3lQCD7sAAclFgA4caSq1IARatVIOtT8A3lfuCaoccAAE+AEqtcQErBsAAcemBQMAAR83AAEfVwABJFQABq+MAAAABA8AAR+jAAEkVAAAAAgICwABH+AAAALOZYAPAAHHsAMAASBAAAACElGADvOUAAGADgksBPgROwABILMAASDcAAMAATEtgA8AAck4BHMAASESAwABIOcA3lmXAAE80AQABgcAASFjAN5Z1AMAAcglOwABIa8AASHAAAIPuYAODfAEmwABIawEWwABIfYLAAEhywDeWjIPuwAByUWADg3xJwABIhSIiFsAASI6DwABIicA3lsWFAoORACEWwABIroPAAEipwDeWxYQbg4oAJcAASNAWwABIxIPAAEi/wDeWxYUHg4BgA4ahPgFKwABI6QErP0rAAEj8ARbAAEkIg8AASQPAN5bFhQeDgAbAAHHqgUDAAEkYwABJHcAATQ4AAcAAT1sAAAABA8AASULAAE0OAAAABAMDwABJWAAAAIPuYAOEgwDAAEl1AAAAtKBgA70PAMAASZIAAACBpl4DAAEDAWADiFMCwABIa2ADwAD6P6EzYAPAAPo/AFwAAcAASeMAAADAAE9cYAPAAPo/AWrAAEn2YAPAAPo/AFwBPgVFwABKAgHAAEoLwABKFAAAgbFgA8AA/AUBkwEcwABKKITAAEofwDeX+WMBAAEWwABKRBbAAEovgMAASirAN5eLhMCEimHAAPzYAMAA/TIBjMAASlLAN5f5HMAASlqEwABKUsA3l/lkAQABlADAAP0qPgJOwABKe8AASoQAAIJsYAOIUwEcwABKnxbAAEqLgMAASobAN5eLhMCEiksBAAGEwABKoMA3l/kAwAD8uD0cwABKsILAAEqvwDeXpyADAAGFwABKscA3mGYCoTMcwABK2ITAAErPwDeX+YFtAQABFsAASu6BwABK28A3l5m0qr0SAMAA/TXAAEhrHMAASx2EwABLFMA3l/mBbQEAARbAAEszgcAASyDAN5eZhMC9EwDAAP01AEnAAEtRFsAAS2oWwABLWoDAAEtVwDeXi4TBhIuBVcAA/Is+AUrAAEt5AD9OwABLpcAAS7UAAITBXQPAAPypAWADiFMBHMAAS8wWwABLvIDAAEu3wDeXi4TBhIuArQAAAADAAPx9ScAAS9iDwABL3MA3l9E+AT0cwABMBYTAAEv1wDeZRICuAQABasAATAphAwJgA4hTYAOIU2ADwAD8BcABSgwAwAD8vD4BPRzAAEw6hMAATCrAN5lEgK4BAAFqwABMP2EDAmADiFNgA4hTYAPAAPwFwAFKEQDAAPy8RsAATFXAAEyOwABMcQAAAIJsYAOIUwCEwABMfcA3mUQ+AT0cwABMlYLAAEyUwDeXpyADAAGFwABMlsA3mf4CoTMpwABIayEcwABM8BbAAEzggcAATM3AN5eZhMG9FIMXAQABFsAATQKFwABM+cA3mf6AvYhXAMAA/HYABsAAceuBQMAATRHAAE0WwABSyAABwABPXQAAAAEDwABNLcAAUsgAAAADAwPAAE09AAAAs5lgA8AAcewAwABNWAAAAIJqYAO86ADAAE1rAAAAgaZeAwABAgFgA4hTAcAASGtgA8AA+j8AXAAAXAE+BU7AAE24wABNywAAtKBgA70PARbAAE3WgcAATc3AN5qstKC860/AAE3twABN8gAAAcAATn5eAwABAwFgA4hTAsAASGtgA8AA+j+hM2ADwAD6PwBcAAPAAE4BwABOdgAAAAMBAcAAThkAAACA7WADiFMAAsAATkEAAADAAEhrYAPAAPo/AWoAYAPAAP0OecAATjAAAAChM2ADwAD6PwFqAGADwAD9DnlcAT4BPRzAAE5TgsAATlLAN5q6IAIAAYXAAE5UwDebQwHAAEhrhsAATmnAN5tSAE7AAE6MwABOlwAAwABMS2ADwAByTgEcwABOpIDAAE6ZwDeanMAATzQBAAGBwABOuMA3mqwAwAByCUFHwABOxRbAAE7YhcAATs3AN5u2gmfAAHJQBAHAAE70asAATvRgA8AAcj3AAUjNAD4DTsAATwvAAE8QAACD7mADgksBFsAATx2FwABPEsA3m7aD7sAAclFJwABPKSXAAE8yhsAATy3AN5whYAOD6j4CPR7AAE9NwABx6gMAAxbAAE+FFMAAT4DAN5whBgFgA4PqgmqD74PAAE+PwDea4YTAAE+jwDebCQBKwABPvQA/QsAAT9MAAsAAT+5qwABP7mADwAByPcABSObAAFAPasAAUA9gA8AAcj3AAUj/AD4DTsAAUC7AAFAzAACD7mADgksBFsAAUECFwABQNcA3m7aD7sAAclFJwABQTCXAAFBVhsAAUFDAN5zPYAOD6j4CPR7AAFBwwABx6gMAAxbAAFCoFMAAUKPAN5zPBgFgA4PqgmqD74PAAFCywDea4YTAAFDGwDebCQBKwABQ4ABJwABQ9SXAAFD+hsAAUPnAN5zPYAODqT4CPR7AAFEbwABx6gMAAxbAAFFTFMAAUU7AN5zPBgFgA4OpgmqDrYPAAFFdwDea4YTAAFFxwDebCQBKwABRiwA/QsAAUaEAAcAAUbxqwABRvGADwAByPcABSRgAPgNOwABR4MAAUeUAAIPuYAOHGgEmwABR4AEWwABR8oXAAFHnwDebtoPuwAByUWADhxo9HsAAUf7AAHHqAwADFsAAUjSGwABSL8A3ncGCaoccg8AAUj7AN5rhhMAAUlLAN5sJAErAAFJqAAABPgA9HsAAUoW1wwIAAoHAAFKOwDearCTAAFLFAyfAAE9ehcAAUrnAN5u2J4FqAAGBQAA3nlgAN3GQADd6YAA3fi0AN4IhADeENAA3hnsAN4f+ADeLPAA3jn8AN5DeADeUuQAAAAoAN5S7ADeWOwA3l18AN5pwADeeWAAAAAQAAgTAAHKXAIFBAAAkgNoAAIIuggYAgQMAAFoAAIElAADAAIUNAACBPwAApDYAAIFYAAC37AAAgXcAAKQ5AACBkgAAuEsAAIG0AADAAGCfAACB1wAAvKwAAIH7AADAAGh8AACCHAAAwABiYQAAgj0AAMAAQr0AAIJoAADAAG+2AACCnQAAwABx5gAAgsQAAMAAfwoAAILoAADAAGr8AACDCgAAwABmnwAAgywAAID7AACDRgAAwABc7AAAg3QAAMAAaK0AAIOeAADAAEtSAACDwgAAwAB38wAAg+oAAMAATScAAIQCAAC9zAAAhCcAAMAAnvYAAIRFAADAAJ/UAACEYwAAwACf7oKGAISBAADAAJ/1AACEnwAAwACgVgAAhLoAAMAAoGUAAITUAADAAKB0AACE7gAAwACggQAAhQ0AAMAAca8AAIUwAADAAJxmAACFUAAAwACgygAAhWsAAMAAQSgAAAAAAAQCwABym4FBhi2GPKXSB8AAT18AAAFgAcAA/VEAAAEEwABynYFBhseI+wm2xgBdA8AA/ZwBYAPAAEtkAR6G7cAAwRkBAWADwABLZAExhwpgA8AAS2QIHocUwABLjgEAAWqHKmADwABojcABShkAHodIwABLjgEAAWqHXmADwABojcABSjAAHod7wABLjgEAAWqHkWADwABojcABSkcAHoewwABLlAIAAmqHxGADwABojcABSl5qh+1gA8AAaK7AAO+5AB6H/8AAS5QCAAJqiBNgA8AAaI3AAUp1aog6YAPAAGiuwADvuQAeiEzAAEuSAAAAAB6IZsAAS5QCAAJqiHpgA8AAaI3AAUqMaoigYAPAAGiuwADvuQAeiLLAAEuUAgACaojGYAPAAGiNwAFKo2qI7mADwABorsAA76gAAAEFwAByzgAAAAAEAAADAAAAAAAAAAAAYAPAAHKbAT8BCQEAwAD9ZwAAAAAtBsAAcp+BQYkAiRSJGwECegAAAAEDiRuJGwAAAAAAAABgA4EUAAbAAHKggUGJYIlxiXwBAqTfAAAAAQOJfIl8AAAAAAAAAGADwABNKwAGwAByoYFBiYCJl4mfAQKkzQAAAAEDiZ+JnwAAAAAAAABgA7WjAAbAAHKigUGJo4m7ifcBALC9AAAAAQOJz4n3AAAAAAAAAGADvfIBSonYARaJ5BaJ2C6k38AAcqCwvcAATTQGwAByo4FBifuKDoo6AQCzQAAAAAEDih2KOgAAAAAAAABgA7hMAUqKIAEWiiwWiiAupN/AAHKgs0DAAE0zBsAAcqSBQYqdirKK4gEAtrwAAAABA4rDiuIAAAAAAAAAYAPAAG/YAUqKxgEWitIWisYupN/AAHKgtrzAAE02BsAAcqWBQYrnivaK+wEChW0AAAABA4r7ivsAAAAAAAAAYAPAAKDYAAbAAHKmgUGK/4slizIBAsAAT2AAAAABA4syizIAAAAAAAAAXQPAAPzaAmADglJgA8AAnGsABsAAcqeBQYs2i06LYQECpQwAAAABA4thi2EAAAAAAAAAYAPAAELIAAbAAHKogUGLZot5i4QBAra6AAAAAQOLhIuEAAAAAAAAAGADvOgABsAAcqqBQYuJi46LogACwABPFQAAAAEDi6CLogAAAAAAAABcAAbAAHKrgUGLp4usi8gAAsAASioAAAABA4uzi8gAAAABAQGLwQAAAIJmYAO80wAAXAAGwAByrIFBi8yL0YwAAALAAE9hAAAAAQOL5owAAAAAAQEBi/sAAACBVGADwACd7wAAXAAGwAByrYFBjASMCYw2AALAAE9iAAAAAQOMHYw2AAAAAQEBjDEAAACBVGADwACeFAAAXAAGwAByroFBjDqMP4xsAALAAE9jAAAAAQOMU4xsAAAAAQEBjGcAAACBVGADwACeNgAAXAAGwAByr4FBjUKNUo24AALAAE9kAAAAAQONaI24AAAAAwMDjX8AAACWJmADvOgAjZgAAADAAE9lYAPAAJxrAI2wAAAAqPpgA8AAnGsAAGADwACcawAGwABysIFBjkOOSI6qAALAAE9mAAAAAQOOXo6qAAAAAwMDjm8AAACk8WADwABLZACOhwAAAKzDYAO95wCOkgAAAIGmYQMBYAO802ADwAD6PwAAXAAGwABysYFBkH+Qj5C5AALAAE9nAAAAAQOQqJC5AAAAAQEBkK8AAACA7WADvQwAAGADwACcawAGwABysoFBkdWR2pITAALAAE9oAAAAAQOSApITAAAAAQEBkgkAAACA7WADvQwAAGADwAD6PwAGwABys4FBkxCTFZN0AALAAE9pAAAAAQOTLpN0AAAAAwICkzUAAACA7WADvQwAk1AAAACCkGADwACcawABk2IAAACFAmADwAD6PwFqAGADwAD9DnlcAAbAAHK0gUGTeZOQk7wAAsAATxcAAAABA5Omk7wAAAABAQGTtAAAAJYmYAO80wAAXQPAAPxnAWADvNMABsAAcrWBQZP0lBOUNQACwABPGgAAAAEDlB+UNQAAAAEBAZQtAAAAliZgA7zTAABgA8AAQTsABsAAcraBQZQ6lD+UbAACwABPagAAAAEDlFGUbAAAAAEBAZRkAAAAliZgA70AAABgA8AA+j8ABsAAcreBQZRxlHaUtAACwABPawAAAAEDlIeUtAAAAAICApSaAAAAliZgA70AAJSoAAAAwABPbGADwAD6PwAAXAAGwAByuIFBlPmU/pU8AALAAE9tAAAAAQOVDpU8AAAAAgIClR4AAACWJmADvOgAlTcAAACCkGADwACcawAAXAAGwAByuYFBlXGVdpWyAALAAE9uAAAAAQOVh5WyAAAAAgIClZQAAACWJmADvOUAla0AAACCkGADwACcawAAXAAGwAByuoFBlhSWJJZZAALAAE9vAAAAAQOWMZZZAAAAAgICljoAAACD7mADgksAllAAAAAfYAPAAJxrAABgA8AAnGsABsAAcruBQZa7lsuXAAACwABPcAAAAAEDltiXAAAAAAICApbhAAAAg+5gA4JLAJb3AAAAH2ADwACcawAAYAPAAJxrAAbAAHK8gUGX75f/mPgAAsAAT3EAAAABA5gUmPgAAAAIBweYJAAAAIPuYAOCSwCYOQAAAKTxYAPAAEtkAJhXAAAArMNgA73nAJhzAAAAtE9gA8AAnGsAmI8AAAC57WADvNMAmKwAAABbYAPAAKAgAJjQAAAAt4xgA8AAeDEAAZjwAAAAwABPcmADwAD6PwFqAGADwAD9DnlgA8AAnGsABsAAcr2BQZpEmlSbRQACwABPcwAAAAEDmmibRQAAAAgICJp3AAAAg+5gA8AA/VEAmowAAACk8WADwABLZACaqgAAAKzDYAO95wCawwAAALntYAO80wCa3gAAAMAAT3RgA7zTAJr7AAAAW2ADwACgIACbHwAAALeMYAPAAHgxAJs+AAAAwABPcmADwAD6PwAAYAPAAJxrAAbAAHK+gUGcW5xrnZ0AAsAAT3UAAAABA5yBnZ0AAAAKCAickgAAAK14YAPAAJ1RAJyqAAAAg+5gA4JLAJy/AAAApPFgA8AAS2QAnN0AAACsw2ADvecAnPkAAACFgmADwACcawCdGgAAALntYAO80wCdNwAAAFtgA8AAoCAAnVsAAAC3jGADwAB4MQACnXsAAADAAE9yYAPAAPo/AWoAYAPAAP0OeZ2OAAAAwABPdmADwAD6PwFqAGADwAD9DnlgA8AAnGsABsAAcr+BQZ5gnmWfHwACwABPdwAAAAEDnn+fHwAAAAcFBZ6QAAAAue1gA8AAnGsAnqUAAADAAE90YAO80wCewgAAAFtgA8AAoCAAntYAAACk8WADwABLZACe7gAAAKzDYAO95wACnwAAAACEWWADwAD6PwFqAGADwAD9DnmfDQAAAMAAT3hgA8AA+j8Bap8ZYAPAAPo/d1wABsAAcsCBQZ8knymfoQACwABPeQAAAAEDnz+foQAAAAUFBZ9NAAAAqOZgA7zTAJ9dAAAArXhgA8AAnVEAn3UAAACD7mADgksAn4QAAACk8WADwABLZACfnAAAAKzDYAO95wAAXAAGwABywYFBn9Kf4qAKAALAAE96AAAAAQOf9KAKAAAAAQEBoAIAAACWJmADvNMAAGADwACcawAGwABywoFBoFagZqCuAAK21gAAAAEDoH6grgAAAAICAqCTAAAAliZgA7zTAKClAAAApPFgA8AAS2QAAGADwACcawAGwAByw4FBoNig6KEKAALAAE97AAAAAQOg9KEKAAAAAQEBoQIAAACWJmADvNMAAGADwACcawAGwAByxIFBoTShRKFiAALAAE98AAAAAQOhU6FiAAAAAQEBoVoAAACWJmADvQwAAGADwACcawAGwAByxYFBocGh0aIEAALAAE99AAAAAQOh5aIEAAAAAQEBofUAAACvS2ADwABmywAAYAPAAJxrAAbAAHLGgUGiCaIOoksAArbUAAAAAQOiJKJLAAAAAgICoi4AAACk8WADwABLZACiRgAAAKzDYAO95wAAYAPAAPo/AAbAAHLHgUGiUKJVoo8AArbVAAAAAQOiaKKPAAAAAgIConIAAACk8WADwABLZACiigAAAKzDYAO95wAAYAPAAPo/AAbAAHLIgUGilKKZoqAAAoKIAAAAAQOinqKgAAAAAAAAAFwABsAAcsmBQaKloqqisQACgkIAAAABA6KvorEAAAAAAAAAXAAGwAByyoFBo7ejvKP1AALAAE9+AAAAAQOj4KP1AAAAAQEBo+0AAACWJmADvOUAAGADwAD6PwAGwAByy4FBpP+lBKVVAALAAE9/AAAAAQOlNaVVAAAAAQEBpUwAAACCamADvOgAAGADwAD6PwAGwAByzIFBpamlrqXQAAK4MwAAAAEDpbul0AAAAAEBAaXJAAAAgmZgA7zTAABgA8AA+j8AAAA3oXgAN6GdADehxQA3oesAN6IoADeiZQA3oqQAN6LMADejAQA3oykAN6NPADejdAA3o6UAN6PYADekCwA3pD4AN6SSADek5gA3pRwAN6VSADelqAA3peMAN6YZADemTwA3ppAAN6bPADenDgA3p1EAN6eUADeoMgA3qMkAN6mOADeqJwA3qowAN6rCADerBAA3qzoAN6twADerqAA3q+oAN6wsADesTwA3rHIAN6yoADes3gA3rRIAAAAtAsAAcs+BQaXVpdvAALaUA8AAT4AAAAFgAcAAcpsAABIEwABy0YFBpiumawnAAE+BAF0DwAD82gJgA70MYAPAAJxrAR6mTsAA/OEAAmADvQxgA8AAnGsAAATAAHLSgUGmf6aaCbrCAGADwABxsAEfpo/AAHG7AAAAAATAAHLTgUGmv6bKCba6AWqmn2ADwAD9UQJgA7zoAATAAHLUgUGm5qcQCcAAT4IAXQPAAP2cAWADvNMBHqb9wADBFwABYAO80wAABMAActWBQafUp+gJwABPgwBgA8AA/AUBNwYEwABy1oFBp/GoBxjAAE+EAGADwAD8BQGTBMAActeBQagPqB8YwABPhQBgA8AA/AUBkwTAAHLYgUGoRqhNCXoBaqglYAPAAP1RAmADgRQABMAActmBQahgqGgJgs4AYAOkzQAEwABy2oFBqJGomQmkzQFqqG1gA8AA/VECYAO1owAEwABy3IFBqLKowQm4RsAAcpcAYAOAkQAEwABy3oFBqOao8Qmk3wFqqMdgA8AA/VECYAPAAH8LAATAAHLfgUGpG6kuCaUMAWqo9mADwAD9UQJgA8AAQsgABMAAcuCBQalQqVUJhW0Baqk0YAPAAP1RAmADwACg2AAEwABy4YFBqY2pygnAAE9gAWqpWmADwAD9UQJdA8AA/NoCYAOCUmADwACcawEeqafAAPzhAAJgA4JSYAPAAJxrAAAEwABy4oFBqeyqMwnAAE+GAF0DwAD9nAFgA70AAR6qG8AAwRcAAWADvQAAAATAAHLdgUGq6KszCcAARFTAAHKXAF0DwAD82gJgA7zTYAPAAEE7AR6rAMAA/OEAAmADvNNgA8AAQTsAAATAAHLjgUGrU6tnCbUMAGADwABvtwABBcAAcxeBQatsq2ysswAAAAOrfqyzAAAACAgIq4sAAAR6YAOBFACrnwAABILOYAOkzQCrtAAABKTNYAO1owCryQAABLhGYAOAkQCr5QAABKTfYAPAAH8LAKv9AAAEtQxgA8AAb7cArB4AAAS2umADvOgArDYAAASlDGADwABCyAAAYAPAAHLPAT8KCAHAAHLYgADAN7CBCAHAAHLZgQDAN7CMCAHAAHLaggDAN7CYCAHAAHLcgwDAN7CkCAHAAHLehADAN7CwCAHAAHLjhQDAN7C+CAHAAHLThgDAN7DMCAHAAHLfhwDAN7DYCADAAHLgH6xkwAChQAIAAoSsfMA3sLAfrI3AAHMqAQABhKymwDewsAAACQGrbMAAcs4AAAAALwbAAHLmgUGsuKzPrQQBAK9UwABylwAAAAEDrOOtBAAAAAAAAABgA7r1AUqs5gEWrPIWrOYupN/AAHLepPjAAH9FBsAAcuiBQa0JrRquGAAAwABPZgFqrQpgA8AA/VECAAABA60wrhgAAAADAwOtQQAAAKTxYAPAAEtkAK1ZAAAArMNgA73nAK1kAAAAgaZhAwFgA7zTYAPAAPo/AABcAT4CTq2araMAAIhFXQPAAPxnAWADvNMBHK2xFq2lLqTfwABy3rRkAgACgK2/wDex9IGtycA3sgIAwAB/Pkat1K31reYAAACDTWADvNMAg63rwDeyKT4BSa39IRyuA4KuAsA3sg4gAQABhK4EwDeyZwAASq4IAD8GwABy6YFBrlCue67qAADAAE8aAWquUWADwAD9UQIAAAEDroeu6gAAAAEBAa6VAAAAliZgA7zTAABgA8AAQTsBSq6nATUAAAABAF0DwAD82gJgA7zTYAPAAEE7ARaupy7AAERUwAByl8AAct01AAAAAQBgA7zTAYCus8A3ssg1AAAAAQBgA8AAQTsBHK6yga6ywDey4UsBAAGCrrLAN7MJAMAA/O4jHK68gwDAN7MbSAEAASsAwAD9XjUAAAABAGADwABzKwEfrsTAAHNCAAAAADUAAAABAFwBHK6yga6ywDey4YC/AgACgq6ywDezCYQAwDezVgDAAPzvhADAN7NWgwDAN7MbAWADwABBOwbAAHLqgUGvUK9Vs1EAAMAAT4cAAAABA69ms1EAAAADAwOvegAAALeMYAPAAHgxAK+dAAAApPFgA8AAS2QAr7QAAADAAE90YAO80wAAXAE+AUmvwhavzYKvxsA3s+eHfbzaPgFJr94Wr+mCr+LAN7PnhQK82D4BSbAFFrASgbAJwDez2YU1wABLdT4BPRywO4CwKMA3s8u3gAAAAADAAHg5SbBoFrB1gbBswDez2YUzwABLdD4BPRywnoCwi8A3s8u3fwAAAADAAHg6PgE9HLDxgLDewDezy8AAT4gAAAAAwAB4PT4BSbE8FrFJgbFAwDez2YU1wABLdT4BPRyxcoCxX8A3s8u6fQAAAADAAHg7SbGdFrGqgbGhwDez2YUzwABLdD4BPRyx04CxwMA3s8u6cQAAAADAAHg8PgE9HLIkgLIRwDezy8AAT4gAAAAAwAB4PUmyayIWsnaCsm/AN7PnhTO83AAhFrKMgbKDwDez2YUzwABLdD4BPRyysYCynsA3s8vAAE+IAAAAAMAAeD0+AT0cswyAsu7AN7PLul8BAAEcsykWsxUupQzAAHLft24BAAEmsz8BgrM/wDez52ADvOgAwABCywDAAHg/BsAAcuuBQbNWs3K5yAAAwABPfQFqs1dgA8AA/VECAAABA7OGucgAAAABAQGzlgAAAK9LYAPAAGbLAABgA8AAnGsBPgZJs6wcs7+As7DAN7WiSAEAASsAwAD9XkqzyAEWs9UWs88uhW3AAHLgnm3AAKEZP06z67P5AADAAEndXQPAAPypAVsBFrQKgLP7wDe1osAASd3AAGbOSbQdFrQvgbQhwDe16oFVwAD8i0q0OAEWtEUWtD8uhW3AAHLgnm3AAKEZP060ZgAAAIU6YAPAAJxrAEFGtHa0lrR/AAAAgpBbAIG0h8A3teo+BE60rgAAAMAAT4lgA8AAnGsASbTAHLTJg7TEwDe2T0gBAAFqtNhgA8AAZqfAATiaAMAA/V4+AT2MtOzAN7ZiHLT/FrT5LoVtwABy4LYWAQABFrUbFrUMLrNAwAByo5rMuE4AwAChMEm1Nhy1P4O1OsA3tk9IAQABFrVRFrVCLrNAwAByo4XAuHMAwAD9Xj4BPYy1Z8A3tmIWtXoWtXQuhW3AAHLghcDAAKEXSbWTHLWcg7WXwDe2T0gBAAEWta4WtZ8us0DAAHKjhYW4cQDAAP1ePgE9jLXBwDe2Yha11Ba1zi6FbcAAcuCFhcAAoQdJteoiHLXzg7XuwDe2T0gBAAEWtgUWtfYus0DAAHKjmtC4cADAAP1eARy2H4O2GsA3tk9IAQABFrYxFrYiLrNAwAByo4XluHIAwAD9Xj4BPYy3L8A3tmIWt0IWtzwuhW3AAHLgmtDAAKEMSbdYHLdhg7dcwDe2T0gBAAEWt3MWt2Qus0DAAHKjhaW4bwDAAP1ePgE9jLeHwDe2Yha3mha3lC6FbcAAcuCFpcAAoQ1Jt7Ect7qDt7XAN7ZPSAEAARa3zBa3vS6zQMAAcqOFcLh2AMAA/V4+AT2Mt+DAN7ZiFrfzFrftLoVtwABy4IVwwAChBkm4Cia4EwEWuBODuA7AN7ZPuZ0AYAPAAPo/PgE9jLglwDe2Yha4OBa4Mi6FbcAAcuCFcMAAoQZJuE8muFgBFrhYg7hTwDe2T4d/AGADwAD6Pz4BSrhtARa4eha4dC6FbcAAcuCebcAAoRlJuJQmuJ0BFridg7iYwDe2T7NcAGADwAD6Pz4BPYy4uMA3tmIcuMsWuMUuhW3AAHLgthgBAAEmuN8BFrjfg7jawDe2T5YmAGADvMEAwAChLj4BPYy5AMA3tmIWuRMWuQ0uhW3AAHLgnm3AAKEZPYq5LsA3tjscuUEWuTsuhW3AAHLgwABPigIAAoK5TMA3tjuEuVjAN7ZiAMAAoSFJuWscuXqCuW/AN7Y7SAEAARa5gxa5fS6FbcAAcuCebcAAoRkAwAD9Xj4BQrmaAD9KubMBgrm6wDe2OwbAAHLsgUG5zbnevKIAAMAAT3kBarnOYAPAAP1RAgAAAQO59LyiAAAABQUFugIAAACo5mADvNMAuhIAAACteGADwACdUQC6KgAAAIPuYAOCSwC6OQAAAKTxYAPAAEtkALpRAAAArMNgA73nAABcAT4DTrqCuocAABJgA8AAcysBJrqCARy6iS7AAE8aAQABgLqWwDe5rgDAAHLpYAPAAHMrQB66qcAAnGgCAAKBurfAN7m6grrBwDe5yAC6qbrGAEFHus2ButXAN7m6AgG69Wq69WADwACdUcABSrwAPgI9HLsKhbsFwDe59MAAT4wCAAImuxYBgrsWwDe5yGADglKEuxzAN7niAMAAcz9CuysAAbtGartGYAPAAJ1RwAFK1QA+Akm7VRy7YoO7WcA3udRIAQABGrtvuBcAwAD9Xj4BPRy7ioW7hcA3ufTAAE+OAgACJrueAYK7nsA3uchgA4fWhLukwDe54gDAAHM7Sbu6HLvHg7u+wDe51EgBAAEau9S4FgDAAP1ePgE9HLvuhbvpwDe59MAAT48CAAImvAEBgrwBwDe5yGADh9aEvAfAN7niAMAAczk+AkAcvDmDvDDAN7nUSAEAARq8RrgYAMAA/V68MLxOAD0cvGCFvFvAN7n0wABPkAIAAia8dAGCvHTAN7nIYAOH1oS8esA3ueIAwABzOkK8kwAGwABy7YFBvKe8uL0rAADAAE9qAWq8qGADwAD9UQIAAAEDvMq9KwAAAAEBAbzdAAAAliZgA70AAABgA8AA+j8BPgFKvOwBHL0WFrzzLsAAT4bAAHLigxcBAAGAvR/AN7u2AMAA/agGwABy7oFBvTC9Qb3YAADAAE9rAWq9MWADwAD9UQIAAAEDvVK92AAAAAICAr1lAAAAliZgA70AAL1zAAAAwABPbGADwAD6PwAAXAE+AUm9hoG9isA3vCg+AT0cvcIWvZ8uwABPhsAAcuJWAQABgL3GwDe8HADAAP2pPwbAAHLvgUG93b3uvrIAALbUAWq93mADwAD9UQIAAAEDvgS+sgAAAAICAr4OAAAApPFgA8AAS2QAviYAAACsw2ADvecAAGADwAD6PwE+AUq+MgEiIiEcvj6BvjnAN7yiSAEAASsAwAD9XgAcvmUWvlEusL3AAHKitWYBAAGBvnHAN7yiAL5CABy+nBa+gi62xsAAcp2DFwEAAYC+pcA3vJQAwAD9qAbAAHLwgUG+t77Iv1cAALbVAWq+uGADwAD9UQIAAAEDvtu/VwAAAAICAr7lAAAApPFgA8AAS2QAvv0AAACsw2ADvecAAGADwAD6PwE+AUq/CQEiIiEcvxWBvxDAN71HSAEAASsAwAD9XgAcvzQWvyAusL3AAHKirGEBAAGBvzrAN71HAL5JABa/TIC/Q8A3vTm218AAS3gGwABy8YFBv1y/bcAAQfkAAMAAT2EBar9dYAPAAP1RAgAAAQO/gsAAQfkAAAABAQG/lwAAAIFUYAPAAJ3vAABcAT4LSb+jFr+sgL+nwDe91sAAT5HAAJ6FSr+2AD89F7/HgL/CwDe91sAAT5EpwACehU6/77/2AAC3Y2ADwACgWgEfv/zAAKBkAgACgMAAQA7AN73WLgBOwABAJMAAQC4AAMAAT5JgA8AA+j8BHMAAQDeBwABAMMA3vhiCmwAAAADAAKBfScAAQEIhgsAAQEfAN749SsAAQFIAPz0XwABAZIDAAEBfwDe91sAAT5MqwACehD0XwABAjBbAAECAgMAAQHvAN73WmtnAAJ3xqT0pwACd2knAAEChHMAAQLkWwABApS6wvcAAcqK1dwIAAhbAAEDagMAAQNXAN73WwABPlMAAnfIWwABA/BbAAEDoLrC9wAByorUrvgIAvlE+AT0XwABBGYDAAEEUwDe91sAATyIWwABBMYHAAEEqwDe+GMAAT5XAAKBdwACd9T89HMAAQWMWwABBV4HAAEFQwDe+GMAAT5bAAKBcg/gBAAEWwABBfBbAAEFwgMAAQWvAN73WmtnAAJ3xwABPl8AAnIUAwAD8dz0cwABBxxbAAEG9LrrCwABy0lYBAAGAwABBy8A3vdYAwABxtD0cwABB4BbAAEHWLrrCwABy0lYBAAEWwABB6YDAAEHkwDe91prZwACd8QDAAHG0BsAAcvKBQcAAQf7AAEIPwABD6QAAwABPYgFqwABB/2ADwAD9UQIAAAEDwABCI8AAQ+kAAAABAQHAAEI3AAAAgVRgA8AAnhQAAFwBPgpJwABCQxbAAEJMgMAAQkfAN8AEwABPkcAAnoVKwABCVgA/PRfAAEJngMAAQmLAN8AEwABPkSnAAJ6FTsAAQo7AAEKVAAC3Y2ADwACgdwEfwABCm8AAoIACAAKAwABCrMA3wAQuAE7AAELCwABCzAAAwABPkmADwAD6PwEcwABC1YHAAELOwDfAVIKbAAAAAMAAoHtJwABC4CGCwABC5cA3wH9KwABC8AA/PRfAAEMCgMAAQv3AN8AEwABPkyrAAJ6EPRfAAEMqFsAAQx6AwABDGcA3wASa2cAAnhapPSnAAJ3aPRzAAENTFsAAQ0eBwABDQMA3wFTAAE+WwACgeYP4AQABFsAAQ2wWwABDYIDAAENbwDfABJrZwACeFsAAT5fAAJyFAMAA/Hc9HMAAQ7cWwABDrS66wsAActJWAQABgMAAQ7vAN8AEAMAAcbQ9HMAAQ9AWwABDxi66wsAActJWAQABFsAAQ9mAwABD1MA3wASa2cAAnhYAwABxtAbAAHLzgUHAAEPuwABD/8AARzsAAMAAT2MBasAAQ+9gA8AA/VECAAABA8AARBPAAEc7AAAAAQEBwABEJwAAAIFUYAPAAJ42AABcAT4NScAARDMWwABEPIDAAEQ3wDfBzcAAT5HAAJ6FSsAAREYAPz0XwABEV4DAAERSwDfBzcAAT5EpwACehU7AAER9wABEhAAAt2NgA8AAoGgBH8AARIrAAKBzAgACgMAARJvAN8HNLgBOwABEssAARLwAAMAAT5JgA8AA+j8BHMAARMWBwABEvsA3wh2CmwAAAADAAKBuScAARNAhgsAARNXAN8JISsAAROAAPz0XwABE8oDAAETtwDfBzcAAT5MqwACehEXAAEUJAcAARRLAAEUUAABiYAPAAPwFAZMBHMAARRuDwABFGcA3wqljAQABFsAARTMWwABFJIHAAEUdwDfCHcAAT5jAAKBqYcAA/NgAwAD9MgGLwABFPcA3wqkcwABFO4PAAEU9wDfCqWQBAAGUAMAA/So+Ak7AAEVYwABFYAAAqPpgA8AAnGsBHMAARWeAwABFYsA3wc3AAE+ZAwADFsAARXousL3AAHKiHMAARa4WwABFoIHAAEWZwDfCHcAAT5jAAKBqSwEAAYPAAEWvwDfCqQDAAPy4HMAARcoWwABFuoHAAEWzwDfCHcAAT5rAAKBrSwEAAYPAAEXLwDfCqQDAAPy4AMAAnkFJwABF1iEcwABF4oTAAEXawDfDGUgBAAErAMAA/V49HMAARfUWwABF6y66wsAActJWAQABhMAARfnAN8MZAMAAcbQ/RsAARg3AAEZAwABGIgAAAICrYAPAAJxrABbAAEYwgcAARinAN8IdwABPm8AAoGw+AT0cwABGUhbAAEZILrrCwABy0oClAQABHMAARl6AwABGWcA3wc3AAE+cAgACFsAARm8usL3AAHKiJsAARoQBg8AARoTAN8P4YAPAAJ42AMAAnkIAwABxtT0cwABGm4DAAEaWwDfBzcAAT50AAAAAwACeQz0cwABGuxbAAEaxLrrCwABy0lYBAAEWwABGxIDAAEa/wDfBzYXMwACeOQDAAHG0PRzAAEbcFsAARtIuusLAAHLSVgEAARbAAEblgMAARuDAN8HNhc3AAJ46AMAAcbQ9HMAARv8WwABG9S66wsAActKApQEAARbAAEcXFsAARwuAwABHBsA3wc3AAE+ewACeOCnAAPz9AMAAcbU9HMAARy4WwABHJC66wsAActJWAQABgMAARzLAN8HNAMAAcbQGwABy9IFBwABHQMAAR1HAAGQpAADAAE8VAWrAAEdBYAPAAP1RAgAAAQPAAEdjwABkKQAAAAAAAABcAT4TPRzAAEdsLsAAT58AAAAAwABy9U7AAEeUwABHmQAAs5hgA8AAoIIBIxrAAEepwACf8x/AAEe7wACgkAIAAhbAAEfJLrhGwAByl8AActwuACsBYAPAAKCCPTUAAAABAGADwACgggGAwABH7cA3xaEjHMAAR/OBAMA3xeZIAQABKwAAKxzAAEfzgQDAN8XmwABPoAAAAADAAKCLAVw9HMAASAkuwABPoQAAAADAAHL/PRzAAEgfLsAAT6IAAAAAwABy/j0cwABImxbAAEiUFsAASIUWwABIfy6FbcAAcuC2y8AAoOEpwAD8/YP4AQABNMAASKMDwABIo8AASOQAAAABAQHAAEi0AAAAgVRgA8AAnGsAAGADwAD9DgE+AT0cwABIwi7AAE9hAQABJsAASNgBgcAASNjAN8aOYAPAAJ3vAMAAcvEAwAD8dz0cwABJVxbAAElQFsAASUIWwABJPC6FbcAAcuDAAE+jwACg4inAAPz9g/gBAAE0wABJXwPAAElfwABJnwAAAAEBAcAASXAAAACBVGADwACcawAAYAPAAP0OAT4BPRzAAEl+LsAAT2IBAAEmwABJkwGBwABJk8A3xxdgA8AAnhQAwABy8gDAAPx3PRzAAEoqFsAASiMWwABKFRbAAEoPLoVtwABy4MAAT6TAAKDjKcAA/P2D+AEAATTAAEoyA8AASjLAAEpyAAAAAQEBwABKQwAAAIFUYAPAAJxrAABgA8AA/Q4BPgE9HMAASlEuwABPYwEAASbAAEpmAYHAAEpmwDfHoGADwACeNgDAAHLzAMAA/HdOwABKjsAASpoAAMAAT6VdA8AA/ZwBYAO86AEewABKoMAAwRcAAWADvOgAAD0cwABLDxbAAEr9FsAASvcuhW3AAHLgwABPpsAAoOSD+AEAATTAAEsXA8AASxfAAFdrAAAAAQEBwABLIAAAAIFUWwAAYAPAAP0OAT4CT8AASy7AAEszAAABge1hAwJdA8AA/GcBYAO86GADwACf1VwAA8AASzjAAFCzAAAAAgICwABLXQAAAIhFXQPAAPxnAWADvOgAwABLfAAAALdjYAPAAJ/VAABcAT4DPRzAAEuVhcAAS47AN8iogpsAAAAAwACf3UnAAEukIRbAAEuwhcAAS6nAN8iowABPp8AAs3o+Az0cwABL2ITAAEvPwDfIk4P4AQABNMAAS+ADwABL4MAATZ4AAAABAQHAAEvwAAAAliZgA7zoAABgA8AA/Q4BPgM9HMAATBsWwABMBy6lDMAAct+3bwEAAYbAAEw4wDfJHADAAELMScAATE5qwABMWGADwAD6PwA+AT0ewABMccAA9egBAAEkwABMogUnwABPqIbAAEyIwDfJHCe9HiknwABPqQA/PRzAAEzOFsAATMUWwABMvy6FbcAAcuClG8AAoN6zHQIAAobAAEzfwDfJHDTAAEzoA8AATOjAAE2QAAAAAQEBwABM7wAAAIDtYAO9DAAAYAPAAP0OAT4BPRzAAE1cHMAATSMWwABNCi6FbcAAcuC37AEAAYfAAE0+wDfJ1wDAAKEowABPqgIAAS4BwABPqyrAAJyKAMAAoM8AwAD8dz0cwABNt4HAAE2rwDfH6IClAQABhMAATb7AN8iTAMAA/apKwABN0wA/PRzAAE43HMAATgOEwABN7cA3yJOBpQEAATTAAE4JA8AATgnAAE4oAAAAAQEBwABOCgAAAINNYAO86AAAYAPAAPo/AUrAAE4QASEcwABOHYHAAE4RwDfH6IMXAQABhsAATibAN8qLAMAA/agAwAD8c4P4AQABNMAATj8DwABOP8AAUKoAAAABAQHAAE5PAAAAliZgA7zoAABgA8AA/Q4BPgM9HMAATnMWwABOahbAAE5kLoVtwABy4KUbwACg3rMdAgAChsAAToTAN8rnNMAATo0DwABOjcAAT1YAAAABAQHAAE6UAAAAgO1gA70MAABgA8AA/Q4BPgNOwABOxsAATssAAIFUYAPAAJ00ARzAAE7jFsAATt0uhW3AAHLgt+wBAAGHwABO/sA3yz4AwAChKD0cwABPGxTAAE8WwDfLVwgAwABPrAAAAADAAJyRPRzAAE9AFsAATzYuusLAAHLSVgEAARTAAE9EwDfLVwgAAMAAcbQAwACgz0nAAE9jFsAAT3kWwABPboXAAE9nwDfIqMAAT63AAJ/bwABPrsAAnJ0+AT0cwABPuRbAAE+lLqUMwABy37dvAQABhsAAT9bAN8rnAMAAQsw/ScAAT/ZqwABQAGADwAD6PwA+AT0ewABQF8AA9egBAAEkAAQnwABPqIbAAFAuwDfK5ye9HhzAAFBiFsAAUE4upQzAAHLft3ABAAGGwABQiMA3yucAwABCzQA/AMAA/HdJwABQvCXAAFDFgsAAUMDAN8hLYAPAAJ5yPgJOwABRA8AAUQwAAIhFXQPAAPxnAWADvOgBMcAAUQ5gA7zoARbAAFEUFMAAUQ/AN8hLAgFgA8AAnnK0T8AAnnc9HMAAUSuDwABRJsA3yGUgAgAChMAAUSzAN8yhH8AAUTrAAJ/oAwADhMAAUU/AN8yhFMAAUVnAN8hLAgFgA8AAnnIuAAAAScAAUXQlwABRfYLAAFF4wDfIS2ADwACdZT4BScAAUaMiIiXAAFGsFMAAUafAN8hLAgFgA8AAnWVgA8AAnXYAIRzAAFHqFsAAUeEUwABR3MA3yEsCAWADwACddqTxwACdakgBAAErAMAA/V4AFsAAUg8WwABSBhTAAFIBwDfISwIBYAPAAJ12pPHAAJ1qsqDAAEt2PgdOwABSsMAAUr4AAMAAT69gA7zoASbAAFKwARbAAFLFFMAAUsDAN8hLAgFgA8AAnXbAAE+vwACdeGADvOhAIiXAAFLzhMAAUuXAN827YAO9AAAWwABTJxTAAFMZwDfNuwQBYAO9ALNNvQLAAFLlwABTPgBOwABTV8AAU1sAAJnKYAO8wQEWwABTa4TAAFNdwDfNu4T/vOFOwABTlMAAU58AALRGYAO86AEcwABToS7AAE+wAQABhcAAU7LAN84tAMAAcvdAIRzAAFPUhsAAU8nAN85RSAEAASsAwAD9XsAAU8nAAFPbAR7AAFPdtcMBAAGFwABT5sA3zi0ATsAAVBDAAFQZAACIRV0DwAD8ZwFgA7zoATHAAFQbYAO86AGGwABUHMA3zlE9HMAAVDiDwABUM8A3yGUgAgACh8AAVDnAN861H8AAVEfAAJ/oAwADh8AAVFzAN861FMAAVGbAN8hLAgFgA8AAnXYuAAAAPgJOwABVZMAAVW0AAIhFXQPAAPxnAWADvOgBHsAAVXPAAPyvAQFgA7zoARzAAFWpFsAAVaEUwABVnMA3yEsCAWADwACdZcAAT7HAAJ1ygaUBAAE0wABVrwPAAFWvwABVwgAAAAEBAcAAVbAAAACDTWADvNMAAGADwAD6PwFKwABVtgEWwABVuITAAFW2wDfPjbLBvNsAwAD8cwA9HMAAVdWDwABV0MA3yGUgAgAChMAAVdbAN88pH8AAVeTAAJ/oAwADhMAAVfnAN88pFMAAVgPAN8hLAgFgA8AAnWUuAAAAScAAViglwABWMYLAAFYswDfIS2ADwACcxz4BPRzAAFZag8AAVlXAN8hlIAIAAjHAAFZrYAO86AEmwABWcQEWwABWcRTAAFZswDfISwIBYAPAAJzHgmbAAJzPYAO86B/AAFaKwACf7QMAAybAAFaxARbAAFaxFMAAVqzAN8hLAgFgA8AAnMeCZsAAnM9gA7zoFMAAVrnAN8hLAgFgA8AAnMcuAAAAScAAVtQlwABW3YLAAFbYwDfIS2ADwACdND4BPR7AAFcEtcMCAAJqwABXGmADtdXAAMTpJMAAV1sCJ8AAT7IUwABXVsA3yEsCAWADwACdNAA/AMAA/Hc9NQAAAAEAYAPAAKCCAYDAAFdzwDfFoSMcwABXeYIAwDfRBEgBAAErAAArHMAAV3mCAMA30QTAAE+zAAAAAMAAoIwBXE7AAFh3wABYgQAAwABPtF0DwAD9nAFgA8AAnGsBHsAAWIfAAMEXAAFgA8AAnGsAAEPAAFijIRbAAFi1FsAAWKsuusLAAHLSgVXAAHG4QT4FTsAAWNbAAFjbAACBVGADwACcawEcwABY5xbAAFjdLrrCwABy0oRZAAAAAMAAcbZJwABY9xzAAFkFgsAAWPvAN9FHgxcBAAGDwABZDsA30ZcAwAD9qELAAFkVAD9JwABZdiEcwABZgIPAAFl7wDfRl5zQAQABLgDAAJyMQsAAWY0APz0cwABZp4LAAFmdwDfRR1YBAAGDwABZq8A30ZcAwAD9qT0cwABZwhbAAFm4LrrCwABy0oClAQABFsAAWc6DwABZycA30Zeg68AAnG0AwABxtT0cwABZ6xbAAFnhLrrCwABy0oClAQABgsAAWfLAN9FHAMAAcbU9HMAAWgIuwABPogAAAADAAHL+ScAAWhFqwABaG2ADwAD6PwA+BT0cwABaThbAAFpHFsAAWjgWwABaMi6FbcAAcuC2y8AAoOEpwAD8/YP4AQABNMAAWlYDwABaVsAAW3gAAAABAQHAAFpXAAAAwABPtWADwACd7wAAYAPAAP0OAT4CTsAAWnzAAFqBAACBVGADwACd7wGDwABag8A30vQ9HsAAWpLAAPXoAQABJAAJFsAAWqCEwABam8A30xGCkMAAnHEngNknm5gcwABazxbAAFq7LrC9wAByorV7AQABFsAAWuaEwABa4cA30xHAAE+UwACd8gC+UyeA2SfAAE+2HMAAWx0WwABbCS6wvcAAcqK1fAEAARbAAFs3hMAAWzLAN9MRwABPlMAAnfIAvlQnwABPtxbAAFthhMAAW1zAN9MRwABPuMAAnHQAAMAA/Hc9HMAAW5wWwABblRbAAFuHFsAAW4EuhW3AAHLgwABPo8AAoOIpwAD8/YP4AQABNMAAW6QDwABbpMAAXMYAAAABAQHAAFulAAAAwABPtWADwACeFAAAYAPAAP0OAT4CTsAAW8nAAFvOAACBVGADwACeFAGDwABb0MA31CA9HsAAW9/AAPXoAQABJAAKFsAAW+2EwABb6MA31D2CkMAAnHEngNknm5gcwABcHBbAAFwILrC9wAByorV7AQABFsAAXDOEwABcLsA31D3AAE+UwACeFwC+UyeA2SfAAE+2HMAAXGoWwABcVi6wvcAAcqK1fAEAARbAAFyEhMAAXH/AN9Q9wABPlMAAnhcAvlQngNknwABPtxbAAFyvhMAAXKrAN9Q9wABPuMAAnHQAAMAA/Hc9HMAAXOoWwABc4xbAAFzVFsAAXM8uhW3AAHLgwABPpMAAoOMpwAD8/YP4AQABNMAAXPIDwABc8sAAXhMAAAABAQHAAFzzAAAAwABPtWADwACcawAAYAPAAP0OAT4CTsAAXRfAAF0cAACBVGADwACeNgEmwABdFwGDwABdHsA31U9gA8AAnjY9HsAAXS3AAPXoAQABJAAJFsAAXTuEwABdNsA31WyCkMAAnHEngNknm5gcwABdahbAAF1WLrC9wAByorV7AQABFsAAXYGEwABdfMA31WzAAE+UwACeOwC+UyeA2SfAAE+2HMAAXbgWwABdpC6wvcAAcqK1fAEAARbAAF3ShMAAXc3AN9VswABPlMAAnjsAvlQnwABPtxbAAF38hMAAXffAN9VswABPuMAAnHQAAMAA/Hc9HMAAXjQWwABeIhbAAF4cLoVtwABy4MAAT6bAAKDkg/gBAAE0wABePAPAAF48wABi6AAAAAEBAcAAXk0AAACBVGADwACcawAAYAPAAP0OAT4BScAAXl0lwABeZoPAAF5hwDfWfWADwACctT4BPR7AAF6NwAD16AEAASQAAxzAAF6bFMAAXpbAN9Z9AwFgA8AAnLXAAE+5AQABFsAAXrAuhW3AAHLgAMAAnLknviQWwABe1BTAAF7PwDfWfQMBYAPAAJy1o8jAAJy7AEnAAF7xJcAAXvqDwABe9cA31n1gA8AAnnI+AT0ewABfIcAA9egBAAEkAAMcwABfLxTAAF8qwDfWfQMBYAPAAJ5ywABPuQEAARbAAF9ELoVtwABy4ADAAJ5/J74kFsAAX2gUwABfY8A31n0DAWADwACecqPIwACeeABJwABfhSXAAF+Og8AAX4nAN9Z9XQPAAJ2HAVs+AknAAF+9FsAAX8YUwABfwcA31n0DAV0DwACdhwFbwABPusAAnZs+AT0ewABf68AA9egBAAEnwABPuwA/RsAAYBrAAGBMwABgLAAAAIJFYAO80wAWwABgOxTAAGA2wDfWfQMBXQPAAJ2HAVvAAE+8wACdnD4BScAAYFolwABgZYTAAGBewDfX6mADvOg+AT0ewABgiMAA9egBAAEkAAQcwABglxbAAGCRLoVtwABy4MAAT70BAAEUwABgtMA31+oEAWADvOgAwAChLSeA2SebmBTAAGDYwDfX6gQBYAO86AA+AT0ewABhBsAA9egBAAEkAAQWwABhNRzAAGEVFsAAYQ8uhW3AAHLgwABPHwEAAYTAAGEtwDfX6gDAAKEqgpDAAJxxJ4DZJ5uYhMAAYVbAN9fqAEnAAGGKJcAAYZODwABhjsA31n1gA8AAnXY+A07AAGHNwABh0QAAmcpgA7zBARbAAGHmFsAAYdgUwABh08A31n0DAWADwACddsAAT6/AAJ14hP+84U7AAGIPwABiGgAAtEZgA7zoARzAAGIcLsAAT7ABAAGEwABiLcA32PQAwABy9z0ewABiPcAA9egBAAEkwABigQMcwABiTBbAAGJGLoVtwABy4MAAT70BAAGFwABiacA32S0AwAChLSe+JITAAGJ8wDfY9AA+AT0ewABin8AA9egBAAEkwABi1AIWwABirYPAAGKowDfWfYKQwACccSfAAE++AADAAPx3PRzAAGMCFsAAYvEuwABPgsAActSD+AEAATTAAGMKA8AAYwrAAGOqAAAAAQEBwABjGAAAAKJAYAO80wAAYAPAAP0OAT4CTsAAYzjAAGM9AACCkGADwACcawEcwABjRRbAAGM/LoVtwABy4MAATx8BAAGDwABjXcA32gAAwAChKj0ewABjbMAA9egBAAEkwABjoAaDwABjdcA32gAnwABPv4TAAGOAwDfaGSeblBbAAGOShMAAY43AN9oZwABPlsAAnHwngNkAAMAA/Hc/PTUAAAABAGADwACgggGAwABjt8A3xaEjHMAAY72DAMA32qFIAQABKwAAKxzAAGO9gwDAN9qhwABPwAAAAADAAKCNAVw9HMAAY9wWwABj0y6kzcAActqWeAEAASTAAGQFAyfAAE/BFsAAY+suwABPhMAActYnwABPwgC1qD0cwABkDS7AAE/DAAAAAMAAcv0GwABy9YFBwABkWcAAZF7AAGaoAADAAE+fAAAAAQPAAGRwwABmqAAAAAAAAABcAT4ETsAAZJDAAGShAAC1Al0DwAD8ZwFgA7zTARzAAGTJFsAAZK8WwABkoy6k38AAct61AsAAfx6BpQEAATTAAGTPA8AAZM/AAGT6AAAAAQEBwABk3QAAAIJmYAO80wAAYAPAAPo/AUrAAGToASEWwABk8IDAAGTpwDfbrYQavOAAwAD8cz0cwABlCxbAAGUCLoLOwABy2aUsAAAAAKTPPRzAAGUugMAAZR3AN9tgg/gBAAE0wABlNgPAAGU2wABmWwAAAAEBAcAAZUQAAACCZmADvNMAAGADwAD9DgE+Aj0cwABlXRbAAGVULoLOwABy2aUzAwADJ8AAT8QWwABlfy7AAE+FwABy1yfAAE/FAKTQPRzAAGYrFsAAZiUuhW3AAHLgwABPxgIAAoHAAGY2wDfcIzTAAGY+A8AAZj7AAGZTAAAAAAAAAFwBSsAAZkQBHMAAZkQuwABKKgEAAYHAAGZMwDfcIwDAAHL4AMAAoR4AwAD8dz0cwABmaxbAAGZiLqTNwABy2pZ4AQABJMAAZqMDJ8AAT8QWwABmdy7AAE+FwABy1yfAAE/FALWoBsAAcvaBQcAAZtfAAGbfwABrHgAAwABPxwAAAAEDwABm8MAAax4AAAABAQHAAGb+AAAAgmZgA7zTAABgA4JLAT4ETsAAZx3AAGcoAADAAExLYAPAAHJOARzAAGdJFsAAZz4WwABnMi6k38AAct6zmcAAfyDAAE80AQABgMAAZ13AN901AMAAflNBR8AAZ2oWwABnfYHAAGdywDfdTIJnwAByUAUBwABnm2rAAGebYAPAAHI9wAFIzQA+A07AAGe2wABnuwAAg+5gA4NeASbAAGe2ARbAAGfIgcAAZ73AN91Mg+7AAHJRYAODXknAAGfWJcAAZ9+CwABn2sA33cVgA4N8PgFKwABn+AEewABn/8AAcekCAAIWwABoHxbAAGgTLqTfwABy3rOZwAB/ICbAAGgrAYDAAGgrwDfdNWADvOUAScAAaEMlwABoTILAAGhHwDfdxWADg+o+AUrAAGhpARbAAGh1FMAAaHDAN93FAgFgA4PqgmqD7z9CwABokQABwABormrAAGiuYAPAAHI9wAFI5gA+AUrAAGjDARbAAGjVgcAAaMrAN91Mg+7AAHJRAcAAaPFqwABo8WADwAByPcABSP8APgNOwABpFMAAaRkAAIPuYAODXgEmwABpFAEWwABpJoHAAGkbwDfdTIPuwAByUWADg15JwABpNCXAAGk9gsAAaTjAN97RYAODqT4BSsAAaVwBFsAAaWgUwABpY8A33tECAWADg6mCaoOtScAAaYElwABpioLAAGmFwDfe0WADg+o+AUrAAGmnARbAAGmzFMAAaa7AN97RAgFgA4PqgmqD7z9CwABpzwABwABp7GrAAGnsYAPAAHI9wAFJGAA+Ak7AAGoSwABqFwAAg+5gA4caASbAAGoSARbAAGokgcAAahnAN91Mg+7AAHJRYAOHGkrAAGoyARbAAGo+gsAAajnAN9+NgmqHHAPAAGpeasAAal5gA8AAcj3AAUkxwABqgmrAAGqCYAPAAHI9wAFJS8AAaqNqwABqo2ADwAByPcABSWUAPgFCwABqugA9HsAAasu1wwIAAoDAAGrUwDfdNSTAAGsIAyfAAE/IgcAAavzAN91MJ4FqAErAAGsPASsGwABy94FBwABri8AAa5rAAGzUAADAAE+wAAAAAQPAAGuqwABs1AAAAAEBAcAAa7cAAACZymADvMEAAGADvOgBPgNOwABr0cAAa9oAAIJqYAO86AEmwABr0QEcwABr+BbAAGvkLq9UwAByl8AAcuay+AIAAoDAAGwKwDfgdmrAAGwbYAPAAP3rwADuWgC7A2ADvOhJwABsJiIcwABsM4HAAGwqwDfgjUgBAAErAMAA/V4BFsAAbEeBwABsPsA34I2EGrzgPgE9icAAbFvAN+CNJsAAbFsBHMAAbIQWwABscC6vVMAAcpfAAHLmsvgCAAKAwABslsA34HZqwABsp2ADwAD968AA7mkAuwNgA7zoP0rAAGzBAYHAAGzIwDfgjQbAAHL4gUHAAGzZwABs6sAAdpYAAMAASioBasAAbNpgA8AA/VECAAABA8AAbPHAAHaWAAAAAQEBwABs/wAAAJYmYAO80wAAXAE+B0nAAG0OHMAAbSMWwABtEi7AAE+CwABy1IMXAQABgMAAbSzAN+GhAMAA/ahKwABtNgA/PRzAAG1TFsAAbUIuwABPgsAActRWAQABgMAAbVfAN+GhAMAA/alOwABtbsAAbXMAAIJpYAOCSwEcwABtdS7AAE/HAQABgMAAbYfAN+GhAMAAcvZOwABtpgAAAIKQYAPAAJxrAD0cwABtuRbAAG2wLqTNwABy2qUnAgACgMAAbczAN+GhNMAAbdUDwABt1cAAbhkAAAAAAAAAYAPAAP0OAT4BPYrAAG3gwDfiOhzAAG3nLsAAT8kCAAKAwABuBMA34aGBwABuDcA34g0AwABy+QC1sj0XwABuIC7AAE+FHMAAbiwWwABuIC7AAE+FwABy12QBAAGUAMAA/SrAAHLXScAAbjUWwABuQYDAAG45wDfhoYd9vNo+A07AAG5ewABuZAAAhJRgA7zlASbAAG5eAYDAAG5mwDfhoWADvOVJwABudSEWwABugIPAAG56wDfi/6xKvN4+AUnAAG75IRzAAG8CgcAAbv3AN+INSAEAASsAwAD9Xj4CScAAbxciISXAAG8ggsAAbxvAN+I6YAPAAJ3vACElwABvQILAAG87wDfiOmADwACeNj4CTsAAb/zAAHACAACAlmADwABg0gEcwABwBC68tQEAAYPAAHAVwDfi/wDAAHL7ScAAcCkhHMAAcDOEwABwLcA345FIAQABKwDAAP1ePgFJwABwTBbAAHBWhMAAcFDAN+ORssHAAGDhPgNOwABwisAAcJsAAMAAT8pgA8AAYPcBJsAAcIoBhMAAcJ3AN+ORYAPAAGD3TsAAcMPAAHDMAACCamADvOgBFsAAcN+FwABwzsA34/mWJsAAYPk9isAAcPjAN+I6HMAAcQUWwABw/y6FbcAAcuDAAE/LAQABhsAAcRXAN+QkAMAAoTQ+A07AAHIwwAByPAAAwABPzGADvecBHMAAcmYWwAByUi6wvcAAcqK1ZQEAAYTAAHKGwDfjkQC+QT2KwABynsA34jofwAByqcAAndcDAAMWwABy1C6wvcAAcqKCwABy6cA34jqFwABy78A35HwAPRzAAHMiFsAAcxMWwABzDS6FbcAAcuDAAE/NwACg51YBAAGCwABzJsA34joAwAD8uj8/PRzAAHNhLsAAT24CAAKDwABzc8A34v+CwABzesA34joAwABzB0nAAHOQIRbAAHOdgMAAc5XAN+GhhQK82D4BPRzAAHO7LsAAT24CAAKDwABzzcA34v8WwABz2hbAAHPULoVtwABy4IVwwAChBgDAAHMHP0nAAHP8HMAAdAWBwAB0AMA34g1IAQABKwDAAP1ePgFJwAB0nyIWwAB0q4DAAHSjwDfhoYQZvNcBFsAAdL+AwAB0t8A34aGHgbzWPgE9HMAAdNcuwABPbgIAAoPAAHTpwDfi/4LAAHTwwDfiOgDAAHMHPz4BPRzAAHUYLsAAT24CAAKDwAB1KsA34v+CwAB1McA34joAwABzB0nAAHVGIiIiFsAAdVOAwAB1S8A34aGEGbzXARbAAHVngMAAdV/AN+Ghh4G81gAhHMAAdYWBwAB1gMA34g1IAQABKwDAAP1eACEWwAB1o4DAAHWbwDfhoYQdvN8+AUnAAHW2HMAAdbouwABPzgIAAibAAHXcAYDAAHXcwDfhoWADvOWBwAB15cA34g0AwABy+j4BPRzAAHX4LsAAT24CAAKDwAB2CsA34v8WwAB2FxbAAHYRLoVtwABy4IVwwAChBgDAAHMHPz8+Ak7AAHZWwAB2XQAAlkdgA7zoASbAAHZWAYDAAHZfwDfhoWADvOg9HMAAdm4uwABPbQIAAoPAAHZ/wDfm74LAAHaHwDfiOgDAAHMIBsAAcvmBQcAAduPAAHbzwAB4ZAAAwABPyQAAAAEDwAB3D8AAeGQAAAACAgLAAHckAAAAgmZgA7zTAMAAdzQAAACCaWADgksAAGADwACcawE+Ak7AAHdXwAB3XwAAhzRgA8AAnvcBH8AAd2XAAJ+SBwAHFsAAd4UuesAActgWwAB3li6k38AAct4ugMAAd7nAN+dkgcAAd8nAN+dyHMAAd/MWwAB34xbAAHfXLqTfwABy3rMfwAB/JMAATBgBAAGAwAB4AMA352QAwABrCBzAAHgoFsAAeB0WwAB4ES6k38AAct6zmcAAfyDAAE86AQABgMAAeD7AN+dkAMAAfjUASsAAeEwBHMAAeFuCwAB4U8A354uCmwAAAADAAJ8rBsAAcvqBQcAAeN3AAHjiwAB8AQAAwABPzgAAAAEDwAB5A8AAfAEAAAACAgLAAHkXAAAAhJRgA7zlAMAAeSYAAACFB2ADgksAAGADwAD6PwE+AknAAHpwIiIiIiIiIiXAAHqAgcAAenTAN+iPYAOFmAElwAB6roHAAHqiwDfoj2ADhNkBJcAAeteBwAB6y8A36I9gA4TrASXAAHsAgcAAevTAN+iPYAOFvQElwAB7LoHAAHsiwDfoj2ADhVcBJcAAe1WBwAB7ScA36I9gA4VnASXAAHt8gcAAe3DAN+iPYAOHNgEiJcAAe52BwAB7kcA36I9gA4XQACEWwAB7yRTAAHu9wDfojwEBYAOF0IQdhdQ+AUrAAHvaASk/SsAAe/EBKgbAAHL7gUHAAHyGwAB8lMAAfQMAALy1AAAAAQPAAHykwAB9AwAAAAEBAcAAfLEAAACElGADvOUAAGADwABg0gE+AUrAAHy+ARbAAHzzHMAAfN8WwAB80RbAAHzFLqTfwABy3rQ6wAB/IrQ7AQABJsAAfOwBgMAAfOzAN+mgYAPAAHV7AMAAbgWWPMAAbgwGwABy/IFBwAB9O8AAfUDAAH3kAADAAE/PAAAAAQPAAH1LwAB95AAAAAEBAcAAfVgAAACZymADvMEAAGADwAD6PwE+AUrAAH1jASEcwAB90RzAAH2UFsAAfYEWwAB9dhbAAH1qLqTfwABy3rOZwAB/IIVtwAB+XcAARkUBAAEcwAB9vxbAAH2sFsAAfaAupN/AAHLepPjAAH9Fsv8BAAGAwAB9y8A36jAAuwwAwABji0gBAAErAMAAYw4GwABy/YFBwAB96cAAfe7AAIGdAADAAE/DAAAAAQPAAH4EwACBnQAAAAAAAABcAT4BPRzAAH4iFsAAfhMWwAB+DS6FbcAAcuDAAE/QwACg5oP4AQABNMAAfioDwAB+KsAAgZgAAAABAQHAAH5DAAAAgVRgA8AAnWUAAGADwAD9DgE+A0nAAH5RIRbAAH5bgMAAflbAN+snwABPcsAAnW1KwAB+YwA/ScAAfr8lwAB+yIDAAH7DwDfrJ2ADwACdoD4BSsAAfvUAP0nAAH8LJcAAfxSAwAB/D8A36ydgA8AAnXY+Ak7AAH9NwAB/VAAAgmZgA7zTARbAAH9bFMAAf1bAN+snAAFgA8AAnXbAAE+vwACdeD0cwAB/hhbAAH9yLqUMwABy37dxAQABgcAAf57AN+uiAMAAQs5JwAB/tCIhHMAAf8IWwAB/vYDAAH+4wDfrJ6zDwACda0gBAAErAMAA/V4AFsAAgAIcwAB/6xbAAH/XLrC9wAByooQCAQABFsAAf/yAwAB/98A36yesw8AAnWsAvkC1Gr3XPgE9HMAAgR4WwACBFoDAAIERwDfrJ8AAT7HAAJ1yg/gBAAE0wACBJgPAAIEmwACBiAAAAAEBAcAAgTQAAACWJmADvNMAAGADwAD9DgE+AT0cwACBXRbAAIFJLqUMwABy37dxAQABgcAAgXXAN+yOAMAAQs4AwAD8dz8AwAD8dwbAAHL+gUHAAIGiwACBp8AAhXgAAMAAT6IAAAABA8AAga3AAIV4AAAAAAAAAFwBPgI9HMAAgb8WwACBti6CzsAActmlLAAAAACkz0PAAIHRIRbAAIHjFsAAgdkuusLAAHLSgVXAAHG4Pgc9HMAAgf0WwACB9C6CzsAActmlMwMAAyfAAE/BFsAAghcuwABPhMAActYnwABPwgCk0E7AAIJNwACCUgAAgVRgA8AAnGsBHMAAgl4WwACCVC66wsAActKEWQAAAADAAHG2TsAAgnzAAIKEAADAAE/RYAO95wEWwACCi4DAAIKGwDftc4KQwACccU7AAIKlwACCrQAAqPpgA73nARzAAIK0gMAAgq/AN+1zwABPogEAAS4AwACch0AcwACDHYHAAIMVwDftokgBAAEWwACDJYDAAIMgwDftc4KQwACccQDAAP1ewACDFcAAgykAScAAgzIWwACDO4DAAIM2wDftc8AAT9LAAJxzPRfAAINUgMAAg0/AN+1zwABPESnAAJx2P0nAAINvIRzAAIOJF8AAg3mAwACDdMA37XOCkILAAIOAwDftysAAnHFIAQABgcAAg4zAN+2iAMAA/V4+BT0XwACDny7AAE+EHMAAg7EWwACDny7AAE+EwABy1mQBAAGUAMAA/SrAAHLWPTUAAAABAGADwACcawGAwACDvcA37XMXwACDwoPAAIPCwDfuycAAT7gcwACDzRbAAIPCg8AAg8LAN+7JwABPuMAAnHRkAQABlADAAP0qwACcdEnAAIPZHMAAg+4WwACD4oDAAIPdwDftc8AAT7jAAJx0gJcBAAEWwACD8C7AAE+DwABy1QDAAP00PgRJwACEDmrAAIQYYAPAAPo/AD4BPR7AAIQ0wAD16AEAASTAAIRtAifAAE/TgMAAhGjAN+1zAD89HMAAhIuAwACEhsA37XPAAE+qAQABLgDAAJyKPRfAAISogMAAhKPAN+1zgpAcwACEtIDAAISvwDftc8AAT6IBAAEuAMAAnIfAAJxxPRfAAITRgMAAhMzAN+1zwABPESnAAJx2Pz0cwACFAhbAAIT4LrrCwABy0oClAQABFsAAhQ6AwACFCcA37XOg68AAnG0AwABxtUnAAIUeHMAAhSeAwACFIsA37XPAAE/UAQABLgDAAJyOPgE9HMAAhU2AwACFSMA37XPAAE/VAQABLgDAAJyQPz8GwABy/4FBwACFfcAAhYLAAIZTAADAAE+hAAAAAQPAAIWQwACGUwAAAAAAAABcAT4EPRzAAIWjFsAAhZkuusLAAHLSgKUBAAEWwACFsBbAAIWqLoVtwABy4MAAT9bAAKEBAMAAcbU9HMAAhdgWwACFzi66wsAActKApQEAARbAAIXlFsAAhd8uhW3AAHLgwABPzcAAoOcAwABxtT0cwACGBBbAAIX6LrrCwABy0oClAQABFsAAhhEWwACGCy6FbcAAcuDAAE+mwACg5ADAAHG1PRzAAIYzFsAAhikuusLAAHLSgKUBAAEWwACGQBbAAIY6LoVtwABy4MAAT9DAAKDmAMAAcbUGwABzAIFBwACGWMAAhmnAAJBdAADAAE93AWrAAIZZYAPAAP1RAgAAAQPAAIaDwACQXQAAAAcFBcAAhpQAAAC57WADwACcawDAAIapAAAAwABPdGADvNMAwACGxgAAAFtgA8AAoCAAwACG2gAAAKTxYAPAAEtkAMAAhvIAAACsw2ADvecAAsAAhwQAAACEWWADwAD6PwFqAGADwAD9DnnAAIcRAAAAwABPeGADwAD6PwFqwACHHWADwAD6P3dcAT4CScAAhyocwACHOhbAAIc1gcAAhy7AN/GrgL28r0gBAAFqwACHSWADwAD968AA7mkAwAD9+krAAIdYAD9JwACHZBbAAIdvgcAAh2jAN/Grh3282j4BScAAh4AWwACHjYPAAIeEwDfxyoU1wABLdT4DTsAAh7jAAIe9AACBVGADwACctQEcwACHxRbAAIe/LoVtwABy4MAATx8BAAGBwACH3cA38asAwAChKknAAIfuhcAAh/LAN/HpPgE9HMAAiAuHwACIBsA38pTAAE/XAQABHMAAiDAWwACIJoLAAIgcwDfxu4WTwACgIksBAAGTAMAA/LgAwACchj4BPRzAAIhWh8AAiFHAN/KUwABPlwEAARzAAIh4FsAAiG6CwACIZMA38buFk8AAoCJLAQABkwDAAPy4AMAAnIVJwACIkIbAAIiUwDfyAj0cwACIqhbAAIigLrrCwABy0lYBAAGHwACIrsA38pQAwABxtD8/ScAAiMgWwACI04HAAIjMwDfxq4UzvNw+AUrAAIjlAEnAAIj4IiEcwACJBYPAAIj8wDfxykgBAAErAMAA/V4AFsAAiRmDwACJEMA38cqFM8AAS3Q+A0AWwACJe4HAAIl0wDfxq7LBvNvAAIl0wACJhQBOwACJpMAAiakAAIFUYAPAAJzHARzAAImxFsAAiasuhW3AAHLgwABPHwEAAYHAAInJwDfxqwDAAKEqScAAidiFwACJ3MA38ek+AT01AAAAAQBgA8AAnMcBh8AAie7AN/QBF8AAifMUwACJ88A39EwIAMAAT9gcwACKAhbAAInzFMAAifPAN/RMCADAAE/YwACczYGNAQABlADAAP0rwACczT4DPTUAAAABAGADwACcxwGHwACKHcA39AEXwACKIhTAAIoiwDf0pQgAwABP2BzAAIoxFsAAiiIUwACKIsA39KUIAMAAT9jAAJzNZAEAAZQAwAD9KsAAnM1JwACKPSIWwACKSIHAAIpBwDfxq4QZvNcBFsAAiluBwACKVMA38auHgbzWPgE9HMAAiosWwACKeRbAAIpzLoVtwABy4MAAT6bAAKDkVgEAAYfAAIqPwDf0AQDAAP2pPgE9HMAAi04WwACLPBbAAIs2LoVtwABy4MAAT6bAAKDkVgEAAYDAAItSwDfxmwDAAP2pPRzAAIt8FsAAi3MWwACLbS6FbcAAcuClG8AAoN6zHQIAAibAAIuNAYHAAIuNwDfxq2ADvOg0wACLlQPAAIuVwACMeQAAAAEBAcAAi5wAAACA7WADvQwAAGADwAD9DgE+A07AAIvMwACL0QAAgVRgA8AAnTQBHMAAi+cWwACL4S6FbcAAcuC37AEAARTAAIwCwDf10wgAAMAAoSg9HMAAjB0UwACMGMA39ewJAMAAT9kBAAEuAMAAnURJwACMS4bAAIxPwDfyAj0cwACMZRbAAIxbLrrCwABy0lYBAAEUwACMacA39ewJAADAAHG0PwDAAKDPPgROwACMpsAAjK0AAJZHYAO86AEmwACMpgGBwACMr8A38atgA7zoTsAAjNDAAIzjAAC0oGADvQ8BFsAAjOyHwACM5cA39oC0oLzrTsAAjQrAAI0ZAAC0SWADwAD8BQGTPRzAAI0zFsAAjSoWwACNJC6FbcAAcuClG8AAoN6zHQIAAibAAI1EAYHAAI1EwDfxq2ADvOg0wACNTAPAAI1MwACQUgAAAAEBAcAAjVMAAACA7WADvQwAAGADwAD9DgE+B07AAI14AAAAgpBgA8AAnGsAScAAjYYcwACNmRTAAI2KwDf2yQkAYwEAARbAAI2uFMAAjZvAN/alCAC0qr0SAMAA/TI+AT0VwACNzsA39z8LHMAAjekWwACN34LAAI3VwDfxu4WTwACgIksBAAEUwACN6sA39skJAADAAPy4ScAAjgoWwACOMRbAAI4hFMAAjg7AN/alCACEwb0Ug7LAAPyMPgE9FcAAjknAN/c/CxzAAI5fFsAAjlqCwACOUMA38buFXcAAoCNLAQABFsAAjmoUwACOYMA39yYKAIC9vK8AwAD87knAAI6AHMAAjpMUwACOhMA39skJAGMBAAEWwACOqhbAAI6fgsAAjpXAN/G7hZPAAKAiYcAA/NgAwAD9Mj4BPRXAAI6+wDf3PwscwACO2RbAAI7PgsAAjsXAN/G7hZPAAKAiSwEAARTAAI7awDf2yQkAAMAA/Lg/ScAAjv0cwACPBhTAAI8BwDf3PwsASAEAASsAwAD9Xj0VwACPD8A39z8LHMAAjxYuwABPZwEAARTAAI8wwDf3JgoAAMAAcwI/TsAAj1TAAI9ZAACBVGADwACcawEcwACPYRbAAI9bLoVtwABy4LfsAQABFMAAj3zAN/cmCgAAwAChKEnAAI+QhcAAj5TAN/HpPgE9HMAAj60UwACPqMA3+OIMAMAAT9cBAAEUwACPvsA39z8LAADAAJyGPgE9HMAAj+UUwACP4MA3+OIMAMAAT5cBAAEUwACP88A39z8LAADAAJyFPRXAAJAMwDf2yQkcwACQGhTAAJAMwDf2yQkAZAEAAZQAwAD9KknAAJAmhsAAkCrAN/ICPRzAAJBAFsAAkDYuusLAAHLSVgEAARTAAJBEwDf44gwAAMAAcbQ/AMAAoM8GwABzAYFBwACQYsAAkHPAAJRfAADAAE9pAWrAAJBjYAPAAP1RAgAAAQPAAJCMwACUXwAAAAMCAsAAkJMAAACA7WADvQwAwACQrgAAAIKQYAPAAJxrAAHAAJDAAAAAhQJgA8AA+j8BagBgA8AA/Q55XAE+BUAhHMAAkO6BwACQ6cA3+iJIAQABKwDAAP1ewACQ6cAAkPUBHsAAkPe1wwIAAoDAAJEAwDf6FCTAAJEsAyfAAE/agMAAkSHAN/oUJ4FqAE7AAJFEwACRTQAAg7lgA8AAnGsBHMAAkWUWwACRTy7AAE+BwABy0UsBAAGAwACRZsA3+hQAwAD87j0cwACRjBbAAJF2LsAAT4HAAHLRgL8CAAKAwACRjcA3+hSBwACRmsA3+iIAwAD8707AAJG0wACRuQAAgVRgA8AAnGsBHMAAkcEWwACRuy6FbcAAcuC37AEAAYDAAJHcwDf6FADAAKEoScAAkewiIRzAAJH5g8AAkfDAN/qfSAEAASsAwAD9XgAlwACSDYPAAJIEwDf6n2ADwACcoD4CScAAknWCwACSecA3+jM+Ak7AAJKqwACStgAAwABPlmADwACcpwEmwACSqgEWwACSvYTAAJK4wDf7CMAAT5bAAJx8YAPAAJynPRzAAJLehcAAktLAN/uGiEECAAIUwACS5sA3+p8DAWADwACcoIHAAJLwwDf6IgDAAJytPgJOwACTJMAAkzAAAMAAT5ZdA8AA/KkBYAPAAJxrASbAAJMkARbAAJM3hMAAkzLAN/sIwABPlsAAnHxdA8AA/KkBYAPAAJxrRcAAk0wBwACTVcAAk1cAAGJgA8AA/AUBkwEcwACTXobAAJNcwDf8PmMBAAEWwACTbIXAAJNgwDf782HAAPzYAMAA/TIBjsAAk3TAN/w+HMAAk3WGwACTdMA3/D5kAQABlADAAP0qPgFJwACThRzAAJOYHMAAk5SFwACTicA3+/NLAQABhsAAk5XAN/w+AMAA/LhIAQABFMAAk5vAN/qfAwFgA8AAnKAAwAD9Xj4BPRzAAJO+hcAAk7PAN/vzgL8CAAKGwACTv8A3/D6BwACTxMA3+iIAwAD8uT89HMAAlBSBwACUD8A3+iLAAE/bAQABFMAAlB/AN/qfAwFgA8AAnKAAwACcgj4BQBzAAJRNg8AAlETAN/qfSAEAASsAwAD9XsAAlETAAJRUAAbAAHMCgUHAAJRkwACUgMAAlVcAAMAAT2cBasAAlGVgA8AA/VECAAABA8AAlJnAAJVXAAAAAQEBwACUoAAAAIDtYAO9DAAAYAPAAJxrAT4BSsAAlLEBHMAAlM8WwACUuC7AAE+BwABy0ZkdAgACgMAAlNvAN/2aNMAAlOYDwACU5sAAlVIAAAAAAAAAYAPAAJygAT4BSsAAlPEBH8AAlPzAAJymAgACFsAAlSIusL3AAHKiFsAAlT0WwACVNy6FbcAAcuCqrcAAoQUAAMAA/PUGwABzA4FBwACVXMAAlW3AAJYrAADAAE9oAWrAAJVdYAPAAP1RAgAAAQPAAJWVwACWKwAAAAEBAcAAlZwAAACA7WADvQwAAGADwAD6PwE+Ak7AAJW9wACVwgAAqRpgA8AAnGsBHMAAldoWwACVxC7AAE+BwABy0UsBAAGAwACV28A3/moAwAD87krAAJXrASIhHMAAlfiBwACV88A3/oNIAQABKwDAAP1eACElwACWCIHAAJYDwDf+g2ADwACcoAbAAHMEgUHAAJYwwACWTMAAlqUAAMAAT3wBasAAljFgA8AA/VECAAABA8AAllvAAJalAAAAAQEBwACWYgAAAJYmYAO9DAAAYAPAAJxrAT4BSsAAlnEBHMAAln4WwACWeC6FbcAAcuC37AEAAYDAAJaZwDf/KQDAAKEoBsAAcwWBQcAAlqrAAJbGwACXXgAAwABPewFqwACWq2ADwAD9UQIAAAEDwACW0sAAl14AAAABAQHAAJbgAAAAliZgA7zTAABgA8AAnGsBPgJJwACW7yXAAJb7gMAAlvPAN/+jYAO86ErAAJcOARbAAJcbFsAAlxUuhW3AAHLghTvAAKEOP0rAAJctARzAAJc6FsAAlzQuhW3AAHLgwABPHwEAAYDAAJdSwDf/owDAAKEqBsAAcwaBQcAAl2PAAJd/wACYHQAAwABPegFqwACXZGADwAD9UQIAAAEDwACXkcAAmB0AAAABAQHAAJefAAAAliZgA7zTAABgA8AAnGsBPgJJwACXriElwACXuoDAAJeywDgAVGADvOhKwACXzgEWwACX2xbAAJfVLoVtwABy4J5twAChGT9KwACX7AEcwACX+RbAAJfzLoVtwABy4MAATx8BAAGAwACYEcA4AFQAwAChKgbAAHMHgUHAAJgiwACYM8AAmLQAAMAAT24BasAAmCNgA8AA/VECAAABA8AAmETAAJi0AAAAAgICwACYUQAAAJYmYAO85QDAAJhqAAAAgpBgA8AAnGsAAFwBPgE9HMAAmJ0cwACYfBbAAJh2LoVtwABy4MAATx8BAAGAwACYlMA4AQYAwAChKsAAT5cBAAGBwACYq8A4ARQAwACchQbAAHMIgUHAAJi5wACYysAAmscAAMAAT20BasAAmLpgA8AA/VECAAABA8AAmNrAAJrHAAAAAgICwACY6gAAAJYmYAO86ADAAJkDAAAAgpBgA8AAnGsAAFwBPgROwACZH8AAmSQAAIFUYAPAAJxrARzAAJksFsAAmSYuhW3AAHLgwABPHwEAAYDAAJlEwDgBogDAAKEqScAAmVIcwACZYxbAAJlegMAAmVbAOAGigL28r0gBAAEnSADAAP36PgE9HMAAmciCwACZw8A4AcbAAE+XAQABFsAAmdwWwACZ1i6FbcAAcuCFpcAAoQ0AwACchT9JwACabxzAAJp4gcAAmnPAOAGwSAEAASsAwAD9XkrAAJqBAD9JwACajRbAAJqiFsAAmpaCwACakcA4AcbAAE+WwACcfIFVwAD8iz0cwACasILAAJqrwDgBxsAAT5cBAAGBwACavsA4AbAAwACchT8GwABzCYFBwACazMAAmujAAJyoAADAAE9kAWrAAJrNYAPAAP1RAgAAAQPAAJr+wACcqAAAAAMDA8AAmxUAAACWJmADvOgAwACbLgAAAMAAT2VgA8AAnGsAwACbRgAAAKj6YAPAAJxrAABgA8AAnGsBPgROwACbZcAAm2oAAIKQYAPAAJxrARzAAJtyFsAAm2wuhW3AAHLgwABPHwEAAYDAAJuKwDgDAgDAAKEqScAAnBQiJcAAnCCAwACcGMA4AwJgA70AABbAAJxAFMAAnDjAOAMCAAFgA70As029Aj4BSsAAnGEBg8AAnGjAOAM9Pz0cwACcfYPAAJx4wDgDPcAAT5cBAAGCwACci8A4AyIAwACchUrAAJyZAYPAAJygwDgDPQbAAHMKgUHAAJytwACcycAAocAAAMAAT3MBasAAnK5gA8AA/VECAAABA8AAnN3AAKHAAAAACAgIwACc7AAAAIPuYAPAAP1RAMAAnQEAAACk8WADwABLZADAAJ0fAAAArMNgA73nAMAAnTgAAAC57WADvNMAwACdUwAAAMAAT3RgA7zTAMAAnXAAAABbYAPAAKAgAMAAnZQAAAC3jGADwAB4MQDAAJ2zAAAAwABPcmADwAD6PwAAYAPAAJxrAT4GTsAAndnAAJ3eAACBVGADwACdZQEfwACd5MAAnYYJAAkWwACeCy6wvcAAcqIWwACeLhbAAJ4oLoVtwABy4KqtwAChBYDAAJ5FwDgEJIPAAJ5TwDgEUoTAAJ5jwDgEYIHAAJ5zwDgENILAAJ6FwDgERIXAAJ6TwDgEcIfAAJ6mwDgEjwBJwACgJyIiIiEcwACgNIHAAKArwDgENEgBAAErAMAA/V4AFsAAoFCBwACgR8A4BDSyoMAAS3YAJcAAoGmEwACgYsA4BGBgA70AABbAAKCQFMAAoInAOARgBAFgA70As029Aj4CTsAAoL3AAKDBAACZymADvMEBFsAAoMoUwACgw8A4BGAEAWADvQCE/7zhScAAoOAcwACg5C7AAE/PAQABFMAAoPDAOAWTCQAAwABy/D4BPRzAAKEYFsAAoQYWwAChAC6FbcAAcuDAAE+mwACg5FYBAAEUwAChHMA4BKwIAADAAP2pPz89HMAAoToUwAChNcA4BKwIAMAAT9wBAAEuAMAAnXA9HMAAoWUWwAChVhbAAKFQLoVtwABy4MAAT9DAAKDmVgEAARTAAKFpwDgErAgAAMAA/Lo9HMAAoXQuwABPhwMAA4bAAKGGwDgEf4HAAKGawDgENITAAKGkwDgEYADAAHLqSsAAobEBFMAAobjAOASsCAAGwABzC4FBwAChxcAAoeHAAKZUAADAAE91AWrAAKHGYAPAAP1RAgAAAQPAAKH3wACmVAAAAAoICMAAoggAAACteGADwACdUQDAAKIgAAAAg+5gA4JLAMAAojUAAACk8WADwABLZADAAKJTAAAArMNgA73nAMAAom8AAACFgmADwACcawDAAKKQAAAAue1gA7zTAMAAoq0AAABbYAPAAKAgAMAAotEAAAC3jGADwAB4MQACwACi8QAAAMAAT3JgA8AA+j8BagBgA8AA/Q55wACjBAAAAMAAT3ZgA8AA+j8BagBgA8AA/Q55YAPAAJxrAT4HScAAoxoWwACjJ4LAAKMewDgG+7bSwABLdz4BSsAAoz4BHMAAo0UuwABPcQgAB4HAAKNbwDgG7YLAAKNhwDgG+4PAAKNrwDgHC4TAAKNxwDgHGYXAAKN/wDgHKYbAAKORwDgHN4fAAKOcwDgHRgHAAE9yFMAAo8LAOAdXCADAAHMOP0nAAKPWHMAAo+YWwACj2i6k38AAct62QwIAAoLAAKP6wDgG+4PAAKQEwDgHCwDAAH88PgE9HMAApCaHwACkE8A4B0bAAE+IAAAAAMAAeD0/PRzAAKSEHMAApGYWwACkWi6k38AAct60ZAIAAoLAAKR0wDgG+4PAAKR+wDgHCwDAAH8+g/gBAAE0wACkjAPAAKSMwACk2wAAAAEBAcAApI0AAADAAE90YAO80wAAYAPAAP0OAT4BPRzAAKSdLsAAT4cDAAOHwACkr8A4B0aCwACkw8A4BvsUwACkzcA4CLQKAADAAHLqAMAA/HdOwACk+8AApQAAAIFUYAPAAJ1lAR/AAKUGwACdnwsBYAOCSwsWwAClLi6wvcAAcqIWwAClURbAAKVLLoVtwABy4KqtwAChBYDAAKVowDgG3YHAAKV6wDgG7YXAAKWIwDgHKYLAAKWYwDgG+4PAAKWqwDgHC4TAAKW4wDgHGYbAAKXOwDgHNxTAAKXhwDgHVwgAFMAApfHAOAdyCQAAPRzAAKYLFMAApgbAOAkECgDAAE/cAQABLgDAAJ1wPRzAAKY2FsAApicWwACmIS6FbcAAcuDAAE/QwACg5lYBAAEUwACmOsA4CQQKAADAAPy6SsAApkUBFMAApkzAOAkECgAGwABzDIFBwACmWcAApnXAAKd5AADAAE9vAWrAAKZaYAPAAP1RAgAAAQPAAKaCwACneQAAAAICAsAAposAAACD7mADgksAwACmoQAAAB9gA8AAnGsAAGADwACcawE+BE7AAKbGwACmywAAgVRgA8AAno4BH8AAptHAAJ6ZAwADFsAApu8usL3AAHKiFsAApwoWwACnBC6FbcAAcuCqrcAAoQWAwACnGcA4CjoAPRzAAKcpgsAApyTAOApiwABPlwEAAYHAAKc3wDgKSADAAJyFPRzAAKdbFsAAp0wWwACnRi6FbcAAcuDAAE/NwACg51YBAAGCwACnX8A4CmIAwAD8ukrAAKdqAYLAAKdxwDgKYgbAAHMNgUHAAKd+wACnmsAAqJ4AAMAAT3ABasAAp39gA8AA/VECAAABA8AAp6fAAKieAAAAAgICwACnsAAAAIPuYAOCSwDAAKfGAAAAH2ADwACcawAAYAPAAJxrAT4ETsAAp+vAAKfwAACBVGADwACemgEfwACn9sAAnqUDAAMWwACoFC6wvcAAcqIWwACoLxbAAKgpLoVtwABy4KqtwAChBYDAAKg+wDgLSgA9HMAAqE6CwACoScA4C3LAAE+XAQABgcAAqFzAOAtYAMAAnIU9HMAAqIAWwACocRbAAKhrLoVtwABy4MAAT83AAKDnVgEAAYLAAKiEwDgLcgDAAPy6SsAAqI8BgsAAqJbAOAtyBsAAcw6BQcAAqKPAAKi/wACrQgAAwABPcQFqwACopGADwAD9UQIAAAEDwACo1MAAq0IAAAAIBwfAAKjkAAAAg+5gA4JLAMAAqPkAAACk8WADwABLZADAAKkXAAAArMNgA73nAMAAqTMAAAC0T2ADwACcawDAAKlPAAAAue1gA7zTAMAAqWwAAABbYAPAAKAgAMAAqZAAAAC3jGADwAB4MQABwACpsAAAAMAAT3JgA8AA+j8BagBgA8AA/Q55YAPAAJxrAT4FPRzAAKnShsAAqb/AOAyzwABPiAAAAADAAHg9TsAAqhjAAKodAACBVGADwACdZQEfwACqI8AAnawJAAkWwACqSy6wvcAAcqIWwACqbhbAAKpoLoVtwABy4KqtwAChBYDAAKqFwDgMWoTAAKqTwDgMloHAAKqjwDgMaILAAKq1wDgMeIPAAKrDwDgMhoXAAKrUwDgMpIfAAKrnwDgMxAA9HMAAqvkUwACq9MA4DQQIAMAAT9wBAAEuAMAAnXA9HMAAqyQWwACrFRbAAKsPLoVtwABy4MAAT9DAAKDmVgEAARTAAKsowDgNBAgAAMAA/LpKwACrMwEUwACrOsA4DQQIAAbAAHMPgUHAAKtHwACrWMAAq/gAAIKIAWrAAKtIYAPAAP1RAgAAAQPAAKtdwACr+AAAAAAAAABcAT4BRsAAq2bAAKvBwACrgQAAAMAATxlgA8AAnMcAFsAAq7kWwACrohbAAKucLoVtwABy4MAAT93AAKDgKcAA/P0+AT0cwACr2YDAAKvJwDgOLMAATyAAAAAAwACc3AbAAHMQgUHAAKv9wACsDsAArzMAAIJCAWrAAKv+YAPAAP1RAgAAAQPAAKwTwACvMwAAAAAAAABcAT4SScAArBwawACsIKQ4SsAArDYAP0/AAKxDwACsSAAAAbOUYQMBYAPAAJxrXAADwACsT8AArIIAAAABAQHAAKxgAAAAgVRgA8AAnGsAAFwBPgE9HMAArHOBwACsbsA4DvSzlAAAAADAAJySPRzAAKyeFsAArI8WwACsiS6FbcAAcuDAAE/QwACg5oP4AQABgMAArKbAOA7RAMAA/Hc9HMAArMkWwACsuhbAAKy0LoVtwABy4MAAT9DAAKDmgkIAAAAAwAD8wj0cwACs7hbAAKzXLsAAT4HAAHLRgkIAAAAAwAD8+D0cwACtIxbAAK0cFsAArQIWwACs/C6FbcAAcuDAAE/ewACg3ynAAPz9g/gBAAGAwACtK8A4DtEAwAD8dz0cwACtXRbAAK1WFsAArT8WwACtOS6FbcAAcuDAAE/dwACg4CnAAPz9g/gBAAGAwACtZcA4DtEAwAD8dz0cwACtiRbAAK16FsAArXQuhW3AAHLgwABPzcAAoOeD+AEAAYDAAK2RwDgO0QDAAPx3PRzAAK20FsAAraUWwACtny6FbcAAcuDAAE/NwACg54JCAAAAAMAA/MI9HMAArdYWwACtyBbAAK3CLoVtwABy4MAAT2DAAKDlgkIAAAAAwAD8+D0cwACt/BbAAK3qFsAAreQuhW3AAHLgwABPpsAAoOSD+AEAAYDAAK4EwDgO0QDAAPx3PRzAAK4qFsAArhgWwACuEi6FbcAAcuDAAE+mwACg5IJCAAAAAMAA/bU9HMAArkkWwACuOC7AAE+CwABy1IJCAAAAAMAA/bU9HMAArnkWwACuVi7AAE+GwABy4oJCAAAAAMAA/bU9HMAArqIWwACumxbAAK6NFsAArocuhW3AAHLgwABPpMAAoOMpwAD8/YP4AQABgMAArqrAOA7RAMAA/Hc9HMAArtMWwACuzBbAAK6+FsAArrguhW3AAHLgwABPo8AAoOIpwAD8/YP4AQABgMAArtvAOA7RAMAA/Hc9HMAArwUWwACu/hbAAK7vFsAArukuhW3AAHLgtsvAAKDhKcAA/P2D+AEAAYDAAK8NwDgO0QDAAPx3PRzAAK8oFsAArxwuwABEVMAAcpfAAHLdgkIAAAAAwAD8+AbAAHMRgUHAAK84wACvW8AAr/gAAMAATxcBasAArzlgA8AA/VECAAABA8AAr3HAAK/4AAAAAQEBwACvfwAAAJYmYAO80wAAXQPAAPxnAWADvNMBPgJOwACvpMAAr6kAAIFUYAPAAJzHARzAAK+xFsAAr6suhW3AAHLgwABPHwEAAYDAAK/JwDgSOgDAAKEqSsAAr9cBFsAAr+OBwACv3sA4EljAAE/fwACc0QbAAHMSgUHAAK/9wACwGcAAtDkAALbWAWrAAK/+YAPAAP1RAgAAAQPAALAxwAC0OQAAAAICAsAAsEYAAACWJmADvNMAwACwWAAAAKTxYAPAAEtkAABgA8AAnGsBPgFJwACwaCIcwACweRbAALB0gMAAsGzAOBLjgL28r0gBAAFqwACwiGADwAD968AA7mkAwAD9+gAhHMAAsK8WwACwqoHAALChwDgS8YC9wABLckgBAAEWwACwuoDAALCywDgS44C9vK8AwAD9+j4BSsAAsUEBHMAAsUguwABPegEAAYDAALFbwDgS4wDAAHMGScAAsXAWwACxfYHAALF0wDgS8YUzwABLdD4BScAAsY8WwACxm4DAALGTwDgS47LBvNs+AUrAALHwASMcwACyChbAALH9FsAAsfcuhW3AAHLghTvAAKEOSAEAASsAwAD9XhbAALImFsAAsiAuhW3AAHLgnm3AAKEZFsAAskYWwACyQC6FbcAAcuCFO8AAoQ4BYAPAAJxrScAAsmEWwACybYDAALJlwDgS44d9vNo+AUrAALKAARzAALKHLsAAT3sBAAGAwACylMA4EuMAwABzBUnAALKrFsAAsreAwACyr8A4EuOFM7zcPgFKwACyywEcwACy0i7AAE96AQABgMAAsuXAOBLjAMAAcwY+AkAqwACzDcAAsxIBHsAAsxS1wwIAAoDAALMdwDgS4yTAALNCAie22IDAALM6wDgS4wBKwACzTgEWwACzWxbAALNVLoVtwABy4J5twAChGUnAALN7IhbAALOHgMAAs3/AOBLjhTO83AEWwACzm4DAALOTwDgS44d9vNo+AkAiFsAAs7yBwACzs8A4EvGyoMAAS3YBFsAAs8+BwACzxsA4EvGFNcAAS3XAALOzwACz1wBKwACz4AEWwACz7RbAALPnLoVtwABy4J5twAChGT4BSsAAtA0BHMAAtBQuwABPegEAAYDAALQnwDgS4wDAAHMGBsAAcxOBQcAAtD7AALRPwAC1YAAAwABPfgFqwAC0P2ADwAD9UQIAAAEDwAC0c8AAtWAAAAABAQHAALSA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g+5gA4fWAMAA1gYAAACsw2ADvecAAFwBPgI9IxzAANYfFsAA1hIuwABP8sAAcpfAAHMySAEAASsAwAD9XhfAANYSLsAAT/LAAHKXMsAA1kVgA4fWYAO95wDAAHMyKwFdA8AA/NoCYAOH1mADvec9HMAA1lkWwADWTS7AAE/ywAByl8AAczKAvwIAAoDAANZawDgx6YHAANZiwDgx9wDAAPzvBsAAczuBQcAA1m/AANZ0wADXEgAAwABPjgAAAAEDwADWh8AA1xIAAAACAgLAANaaAAAAg+5gA4fWAMAA1q4AAACsw2ADvecAAFwBPgI9IxzAANbHFsAA1rouwABP8MAAcpfAAHMwSAEAASsAwAD9XhfAANa6LsAAT/DAAHKXMsAA1u1gA4fWYAO95wDAAHMwKwFdA8AA/NoCYAOH1mADvec9HMAA1wEWwADW9S7AAE/wwAByl8AAczCAvwIAAoDAANcCwDgyvoHAANcKwDgyzADAAPzvBsAAczyBQcAA1xfAANcxwADXtQAAtq0BasAA1xhgA8AA/VECAAABA8AA10bAANe1AAAAAQEBwADXYwAACIPuYAOH1gAAYAO95wE+AknAANdvHMAA138WwADXcy7AAE/xwAByl8AAczFIAQABKwDAAP1eSsAA14gBKz9KwADXmQEcwADXqxbAANegLsAAT/HAAHKXwABzMUsBAAGAwADXrMA4M50AwAD87gbAAHM9gUHAANe6wADX1MAA2FsAALasAWrAANe7YAPAAP1RAgAAAQPAANfqwADYWwAAAAEBAcAA2AcAAAiD7mADh9YAAGADvecBPgJJwADYExzAANgkFsAA2BcuwABP8sAAcpfAAHMySAEAASsAwAD9XkrAANgtASs/SsAA2D4BHMAA2FEWwADYRS7AAE/ywAByl8AAczJLAQABgMAA2FLAODRGAMAA/O4GwABzPoFBwADYYMAA2HrAANj5AAC2qwFqwADYYWADwAD9UQIAAAEDwADYiMAA2PkAAAABAQHAANilAAAIg+5gA4fWAABgA73nAT4CScAA2LEcwADYwhbAANi1LsAAT/DAAHKXwABzMEgBAAErAMAA/V5KwADYywErP0rAANjcARzAANjvFsAA2OMuwABP8MAAcpfAAHMwSwEAAYDAANjwwDg07wDAAPzuBsAAcz+BQcAA2P7AANkDwADZ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S1AEwABzioFCn4OfgwbAAFASAGADwABzgwFqAGADwABzg8ABS2kBBcAAc46BQprJmsmfigEAAAOayZ+KAAAAAgICmskAAAQnYAPAAPwFAJrJAAAEKGADwAD96wAAYAPAAHODAT8DCADAAHOFgADAOErOCADAAHOHgQDAOErbCQAAwAD9ZwAAAAABBsAAc4yBQprJmsmfigAAIwAAAAEDmsmfigAAAAAAAABgA8AA/esBSgABDwAuwABzhwAAOEsWADhLRwAAAAECwABzj4FCocKhx6YWC8AAUBMAAAFgAcAA/VEAAAYEwABzkYFCocehxwknAGADwAD8BQAEwABzk4FCocehxwkowABzRABgA8AA/esABMAAc5SBQqHHoccGKQBdA8AA/KkBYAPAAHOPAWoAXQPAAPypAWADwABzj8ABS40EwABzlYFCozOjMwbAAFARAGADwABzjwFqAGADwABzj8ABSwUEwABzloFCpJeklwbAAFAUAGADwABzjwFqAGADwABzj8ABSzcEwABzl4FCphGmEQbAAFAVAGADwABzjwFqAGADwABzj8ABSx4BBcAAc5uBQqHHocemFgEAAAOhx6YWAAAAAgICoccAAAQnYAPAAPwFAKHHAAAEKGADwAD96wAAYAPAAHOPAT8DCADAAHORgADAOExXCADAAHOTgQDAOExkCQAAwAD9ZwAAAAABBsAAc5mBQqHHocemFgAAIwAAAAEDocemFgAAAAAAAABgA8AA/esBSgABDwAuwABzkwAAOEyfADhM0AAAAAECwABznIFCpqGmp6zkA8AAUBYAAAFgAcAAeMQAAAYEwABznoFCqCGoKgazmgBgA8AA/esBaqgmYAPAAP3rwAFLoQTAAHOfgUKoSqh7CcAAUBgAYAPAAHN5AR+oZcAAc4IAAAAABMAAc6CBQqidqKMJuGYAYAPAAHidAATAAHOhgUKot6jGGMAAUBkAYAPAAHN0ASsEwABzooFCqN6o7BjAAFAaAF0DwAD8qQFgA8AAdBwBKwTAAHOjgUKpBqkWGMAAUBsAYAPAAHPDASsBBcAAc6iBQqkbqRurTgAAAAOpPatOAAAAAwIDqVMAAACDZWADwAB4qACpYgAABLhmYAPAAHidAKl6AAAAwABQHGADwAB0awFqAGADwAD9DnkAYAPAAHOcAT4EPRepiy7AAFAZIyEc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AAABA8AARvvAAEoGAAAAAQEBwABHBwAAAINEYAPAAF1BAABgA8AAdWwBPgs9HMAARxyAwABHFcA49uKClAEAAWrAAEciYAPAAP3rwAD5vgDAAF1DTsAARz7AAEdDAACCZ2ADwABevgEcwABHTIDAAEdFwDj24q+5AQFgA8AAXr4BasAAR2ddA8AA/KkBYAPAAF6+wAEeUQDAAF1WTsAAR30AAACEQ2ADwAB0mQBOwABHkQAAAIT/YAPAAHS4AEFHwABHpYHAAEetwDj3JQIBwABH0mrAAEfSYAPAAF6+wAEWnAA+Aj2KwABH48A4920mwABH4wEcwABH9IDAAEftwDj24piyAAAAAMAAXXBgA8AAdJlCwABICwABwABIL2rAAEgvYAPAAF6+wAEWgwA+Az2LwABIPMA4934mwABIPAEcwABIVIDAAEhNwDj24pjFAAAAAMAAXXNgA8AAdLg9isAASGnAOPdtFsAASIKDwABIc8A4936EQ8AAdLtCwABIkwBOwABIq8AASLAAAIC9YAPAAP3rARzAAEi5gMAASLLAOPbir7wAAAAAwABdUk7AAEjQwABI2QAAhBlgA8AA+j8BHMAASOKAwABI28A49uKvMwAAAADAAF1PTsAASPfAAEkCAACEH2ADwAD6PwEcwABJC4DAAEkEwDj24q8zAAAAAMAAXU9OwABJIMAASSsAAIQaYAPAAPo/ARzAAEk0gMAASS3AOPbirzMAAAAAwABdTz0cwABJS4DAAElEwDj24oKMAQABasAASU9gA8AA/evAAPm+AMAAXURKwABJWQEfwABJZMAAdXoGAAOCwABJdcA4922DwABJfsA4934ewABJksAAaH8DAAKEwABJl8A4+FOCwABJncA4920BhTUpA4QZhcAAScnAOPh/hB+GwABJ38A4+KuEGofAAEn3wDj41wbAAHVzgUPAAEoLwABKHMAAS+UAAK8WAWrAAEoMYAPAAP1RAgAAAQPAAEorwABL5QAAAAEBAcAASjUAAACEO2ADwABc8gAAXAE+CD0cwABKRoDAAEpBwDj5yK+9AQABasAASlxgA8AAdNPAAU9UAMAAXQM9HMAASm6AwABKacA4+ciClAEAAWrAAEp0YAPAAP3rwAD5vgDAAFz3ScAASn4hHMAASpEWwABKgi6E/8AAdOxIAQABKwDAAP1ePgI9HMAA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AQHAAKviAAAAgXZgA8AAlRIAAGADwACVEgE+Aj0XwACr8i7AAFGQhMAArATAOajwwAB2zkrAAKwXAYbAAKwewDmqHknAAKwxgsAArDXAOaiVPgZOwACsY8AArG8AAIUHYAPAAJa4ASbAAKxjARzAAKxxLpqPAgACg8AArHfAOajGgcAArIbAOah6AMAAdtZgA8AAlrhOwACs1MAArNkAAIC9YAPAAJUSARzAAKzbLsAAUZMCAAIWwACs94DAAKzywDmoapYmwABipYHAAK0AwDmoegDAAHbSTsAArSHAAK0wAADAAFGjYAPAAJUSASMWwACtN4DAAK0ywDmoarJrwABiq4fAAK1OwDmqshzAAK1fLoczAwACFsAArW6AwACtacA5qGqFHcAAYqaBwACtfcA5qHoBg+qHwACtjMA5qrLAAHbcAWADwACVEk7AAK3bwACt3wAAg+dgA8AAlnwBHMAAreRqwACt4WADwACXgMABH2mD7AEAARbAAK30FsAAresuwABRj8AAdhrAAHbKwABIv8AAdrsAwACXkT0cwACuHhbAAK4ThsAArgfAOapwnxjAAJa6VgEAAR/AAK4mwACW0wIAAhTAAK41wDmraAkAFMAArjrAOar1CAAAAMAA/LpKwACuUgEcwACuX4XAAK5ZwDmp9iABAAGGwACuYMA5qnAAAD4BSsAAroEBHMAAro6FwACuiMA5qfYgAQABHMAAro8umo8CAAKDwACulcA5qMaBwACupMA5qHoAwAB21gAABsAAduCBR8AArrzAAK7ZwACxbAAAtAUBasAArr1gA8AA/VECAAABA8AArurAALFsAAAAAgICwACu/wAACIKQYAPAAGMSAMAArxQAACCvdWADwABczwAAYAPAAJUSAT4FTsAArzjAAK9DAACfGF0DwAD8qQFgA8AAlscBMcAAr1VgA8AAlscAT8AAr17AAK9jAAABwABRn2EDAmADwAD962ADwACVElwAA8AAr27AAK/cAAAAAgICwACvdgAAAIC9YAPAAP3rAMAAr40AAACAlmADwACVEgAAXAE+AT0cwACvp4LAAK+cwDmswFYBAAEfwACvr8AAltMCAAIcwACvwWrAAK++YAPAAJeAwAEfaYPsAQABhMAAr8jAOa0WAMAAl5GFwACvz8A5rSYAAMAA/Lo9HMAAsIyDwACwgcA5rOsg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8OG428AAZyk+AT0coBiCoArAOuT4IAEAARagIhagGS7AAFLewAB53MAAeeLAAFKzwAB5RgAAPgE9HKBngaBOwDrk1K9fAQABHqB7wABn/wEAARagn4WgkcA68OGCkMAAZygAAMAATP1GoLqg96DNAAAAwABTD2ADwABnMgAWoOqAoN7AOuS7wABTEMAAf/g+AUmg/xahEYWhA8A68X2428AAZzU+AT0coTWCoSfAOuT4IAEAARahPxahNi7AAFLewAB53MAAeeLAAFK0wAB5RwAAPgE9HKGEgaFrwDrk1K9fAQABHqGYwABn/wEAARahvIWhrsA68X2CkMAAZzQAAMAATP1GodeiF6HrAAAAwABTEWADwABnPgAWogmAof3AOuS7wABTEsAAf/k+AT0coryBoqXAOuTUr18BAAEeotDAAGf/AQABFqL1haLmwDryGYKQwABnQAAAwABM/UajCKNLoxwAAADAAFMTYAPAAGdKABajOoCjLsA65LvAAFMUwAB//T4BPRykXhakSS63/MAAedzAAHnlwABTFQEAAYWkdcA68nIAwACCF0mkkRakshakoYCklcA65LvAAFMWwAB/+oOywAD8jD4BPRyk1IKkxsA65PggAQABFqTeFqTVLsAAUt7AAHncwAB54sAAUrbAAHlJAAA/RqT3pSulBgAAAK9cYAPAAGenABalH4ClE8A65LuvLMAATLE+AUFHpTMWpUWFpTvAOvMNgmfAAGerAgGlaGqlaGADwABnicAA/LkAPgU9HKWJgqV7wDrk+CABAAEWpZMWpYouwABS3sAAedzAAHnitE/AAHliAABOpa2ltQAAtE9gA70MASalrQEWpcGFpbfAOvMNlibAAGeqYAO9DE6l4aXmAACCkGADwABi+QEcpfwWpegur1TAAHncwAB54LMFAQABhqYRwDrzgAC7E0mmJSIWpi6HpinAOvOmu+vAAGMCASk+AT0cpt6CptDAOuT4IAEAARam6Bam3y7AAFLewAB53MAAeeKxk8AAeTIAAD9CpxEAAAE+AEanPKd+p1QAAACGBWADwABNsgAWp2yAp2DAOuS7wABTF8AAf/s+AUFHp4YWp5eFp47AOvQlgmfAAE23BgGnw2qnw2ADwABNi8AA/xMAPgI9HKfhgqfTwDrk+CABAAEWp+sWp+IuwABS3sAAedzAAHniwABSvsAAeU8AAEKoAwABqC5qqC5gA8AATYvAAP2lAD4CPRyoTIKoPsA65PggAQABFqhWFqhNLsAAUt7AAHncwAB54sAAUr/AAHlQAABCqG4AAaiZaqiZYAPAAE2LwAD+lQA+Aj0cqLaCqKjAOuT4IAEAARaowBaoty7AAFLewAB53MAAeeLAAFLAwAB5UQAAQqjXAAGpAmqpAmADwABNi8AA/hsAPgI9HKkigqkUwDrk+CABAAEWqSwWqSMuwABS3sAAedzAAHniwABSwcAAeVIAAEKpRgABqXFqqXFgA8AATYvAAP8tAD4CPRypkYKpg8A65PggAQABFqmbFqmSLsAAUt7AAHncwAB54sAAUsLAAHlTAABCqbUAAAE+AUAqqe2p8gEeqgK1wwIAAmqqC2ADtdXAAMTpJKpkAyfAAFMYFqpdhapUwDr0JYJnwABNtyeBagBGqnuqswAAAAEAWwAWqqeAqpvAOuS7t7TAAH/+PgJOqo8AAACvPWADwABmywEmqnsBhaqPwDr162ADwABmyz0cqtUWqrsut/3AAHncwAB55K9KAwADgar3wDrk1IarBMA69gWAqw7AOuS7AMAAeo9GqyerYKs4AAAAwABTGWADvMEAFqtTgKtHwDrku8AAUxrAAH/8PgE9HKt/FqtoLrvhwAB53MAAeeik+gEAAYWrjcA69loAwABxS0mrpharzBartoCrqsA65LuvHcAAf/+DssAA/Iw+AUar4Kw4q/oAAACvPGADwABnVwAWrCGArBXAOuS7rx3AAH//PgI9HKxQgqxCwDrk+CABAAEcrGcWrFEuwABS3sAAedzAAHniwABS2QEAARasmxasjYWsf8A69sKFHcAAZ1thwAD82ADAAHl/AAA9HKy9FqytLrvewAB53MAAeeevSQEAAYWs2sA69sIAwACDDj9KrP0Bga0EwDrk1AbAAHnsgVCtaa1usN4AAMAAUwkAAAABA613sN4AAAACAgKtgQAAAIKQYAPAAGJmAK2eAAAAhdhgA8AATOwAAFwBPgdPrbGttgAAAbRgYQMBYAPAAHjWXAADrcSuWQAAAAEBAa3TAAAAr25gA8AAeNYAAFwBPgI9HK3qg63jwDr3vLRgAgACga35wDr3iRauBi6vVMAAedzAAHngAMAAeOU9HK43Fq4iLrf8wAB53MAAeeXAAFMFAQABg65MwDr3vADAAIIVPYiuYMA693scrnsWrmcur1TAAHncwAB54LMHAQABgK6MwDr3ewC7FT0crqWCrpfAOvefIAEAARaurxaupi7AAFLewAB53MAAeeKtbsAAeVsAAEmuwCIiIRauyoCuxcA693uya8AAYmkBFq7dgK7YwDr3e7vrwABicwEWrvuArvbAOvd7uZzAAGJvPgI9HK8hgq8TwDr3nyABAAEWrysWryIuwABS3sAAedzAAHniwABSycAAeVwAAEmvRBavTYCvSMA693ujqMAAYnA+AT0cr3WCr2fAOvefIAEAARavfxavdi7AAFLewAB53MAAeeLAAFLLwAB5XgAAPz9Jr6klr7KAr63AOvd7YAPAAGL5PgE9HK/Zgq/LwDr3nyABAAEWr+MWr9ouwABS3sAAedzAAHniwABRFsAAeV8AAD9JsAEiJbAKgLAFwDr3e2ADwABijQAcsC8WsB4ut/XAAHncwAB547L1AQABFrBCFLA9wDr3ewABYAPAAGKNlibAAGKPAMAAak0+AT0csGKCsFTAOvefIAEAARawbBawYy7AAFLewAB53MAAeeLAAFLNwAB5YQAAP0mwiCWwkYCwjMA693tgA8AAYxI+AT0csLiCsKrAOvefIAEAARawwhawuS7AAFLewAB53MAAeeLAAFLMwAB5YAAAPwAAOuSRADr3WQA6+hQAAAACAsAAee+BULDjsOnAAEYfA8AAUxsAAAFgAcAA/VEAAAwEwAB58oFQsRmxJQm1qsAAedwAYAPAAE0rAATAAHnzgVCxQrFVCa9UwAB53ABgA7r1AATAAHn0gVCxbrF9CbQEwAB53ABgA7hMAATAAHn1gVCxlrGeCcAAUt7AAHncAGADwAB46AAEwAB59oFQsbOxvgnAAEfdwAB53ABgA8AAalYABMAAefeBULHVseIJwABS38AAedwAYAPAAIH1AATAAHn4gVCx/bIFCcAAUULAAHncAGADwACC3QAEwAB5+YFQsiWyOwm3m8AAedwAYAPAAHqhAATAAHn6gVCyS7JRCbecwAB53ABgA8AAY8gABMAAefuBULJysokJu0zAAHncAGADwAB6TQAEwAB5/IFQsq2yvgm3n8AAedwAYAPAAHYxAATAAHn9gVCy1rLkCcAAQ9DAAHncAGADwACOLgABBcAAegKBULLpsum0RgAAAAOzAbRGAAAADAwMsw4AAAS1qmADwABNKwCzJwAABK9UYAO69QCzRwAABLQEYAO4TACzYwAABMAAUt5gA8AAeOgAs3gAAATAAEfdYAPAAGpWALOQAAAEwABS32ADwACB9QCzqgAABMAAUUJgA8AAgt0As78AAAS3m2ADwAB6oQCz4gAABLecYAPAAGPIALP1AAAEu0xgA8AAek0AtBkAAAS3n2ADwAB2MQC0NwAABMAAQ9BgA8AAji4AAGADwAB57wE/DQgBwAB58oAAwDr7nwgBwAB584EAwDr7rQgBwAB59IIAwDr7uQgBwAB59YMAwDr7xQgBwAB59oQAwDr71QgBwAB594UAwDr75QgBwAB5+IYAwDr79QgBwAB5+YcAwDr8BQgBwAB5+hQAwDr8EwgACAHAAHn7FADAOvwhCQAIAcAAefwUAMA6/C8KAAgBwAB5/RQAwDr8PQsACQGy6cAA/WcAAAAAAgbAAHn/gVC0S7RQtxMAAMAAUxwAAAABA7RjtxMAAAACAgK0bQAAAIKQYAPAAGJmALSKAAAAhdhgA8AATOwAAFwBPgZJtJ0WtKaAtKHAOv0eh3/AAGJrSrSxAD9JtL0WtMaAtMHAOv0euZ3AAGJsSrTOAD89iLTawDr9Hha05oC04cA6/R60BsAAYmg9HLUIFrT+FrT1LsAAUt7AAHncwAB59a1uwAB5W7RgAgACgbUXwDr9LBa1JC6vVMAAedzAAHnzAMAAeOVJtT8iIRa1SYC1RMA6/R6ya8AAYmkBFrVcgLVXwDr9HrvrwABicz4BPRy1kxa1hBa1ey7AAFLewAB53MAAefXAAFLKwAB5XbRgAgACgbWiwDr9LBa1ry6vVMAAedzAAHnzAMAAeOU/SbXPIiW12IC108A6/R5gA8AAYo0AHLX4FrXsLsAAR93AAHncwAB59rL1AQABFrYLFLYGwDr9HgABYAPAAGKNlibAAGKPAMAAak0+AT0cttkWtskWtsAuwABS3sAAedzAAHn1wABSzcAAeWG0YAIAAoG26MA6/SwWtvUur1TAAHncwAB58wDAAHjlPwbAAHoAgVC3GLckwABGHQAAt8gAAAABA7c6wABGHQAAAAEBAbdJAAAAr25gA7YZAABgA8AATK0BPg1Ot263egAAhdhgA8AATOwBH7eAwABNAwEAAYC3l8A6/tkARrelt863sgAAAK9gYAPAAGfwABa3xIC3vcA6/tmvLcAATLI+Ak6337fkAACCkGADwABiZgEWt+6Ct+bAOv8WgpDAAGfzSbf6HLgLFrgGgrf+wDr/FoJnwABn9EgBAAFquBpgA8AAZ9vAAPENAMAA/V4+AT0cuC4uwABTHAIAAoO4QsA6/zeBuEjAOv7wAMAAef8/RrhpuJ64egAAAK9iYAPAAGgNABa4kIC4icA6/tmvLsAATLM+AUFHuKYWuMAWuLqCuK7AOv+pgJbAAGgQgmfAAGDtAgG452q452ADwABgoMABGzsAPgI9HLktFrkPFrkCLrWqwAB53MAAefKvBsAATT2z9gEAASa5VQEWuVWCuUnAOv+pgJbAAGgQYAPAAGJEALv9QrlnAAABPgFCuYkARrmjufq5wQAAAKOuXQOB+QJgA8AAYmZgA8AAYmYAFrnZgLnSwDr+2a8YtiI+AT0cuhQWugIut5/AAHncwAB5/K9EAgACFrpMgrpGwDsASIHVgfsWulWCuk/AOwBIgkqB/ADAAHYzRrpkupO6cwAAAK9cYAPAAGenABa6h4C6gMA6/tmvLMAATLE+AUFHupsWuq2CuqPAOwCugmfAAGerAgG60Gq60GADwABnicAA+5kAPgNOuva7AQAAtEZgA7zoASa69gEWuw2CuwPAOwCulibAAGeqYAO86Em7IBy7LRa7JC7AAFFCwAB53MAAefjAAFLkAQABg7tCwDsA9wDAAILkPgE9HLuIFrtmFrtdLsAAUt7AAHncwAB59bGTwAB5MrRgAgACgbuXwDr+8Ba7pC6vVMAAedzAAHnzAMAAeOU/QrvQABO78mq78mADwABnicAA+0C8Hmq8HmADwABnicAA+2m8TWq8TWADwABnicAA+4G8fGq8fGADwABnicAA+7G8pWq8pWADwABnicAA8GS8z2q8z2ADwABnicAA+9y8+2q8+2ADwABnicAA+/O9KGq9KGADwABnicAA/Au9T2q9T2ADwABnicAA/CW9emq9emADwABnicAA/Dy9oGq9oGADwABnicAA/FO9x2q9x2ADwABnicAA/Gu97mq97mADwABnicAA/IW+Hmq+HmADwABnicAA8DC+TWq+TWADwABnicAA8Eq+gmq+gmADwABnicAA8Ja+rGq+rGADwABnicAA/J++0Wq+0WADwABnicAA/Lm+9Wq+9WADwABnicAA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wABEcMA7bkaD7sAAclFgA4OpPRzAAESLLsAAU6fAAHqwAQABFsAARLSBwABEqMA7cweCaoOtAMAAew09HMAARMkuwABTrMAAerABAAGBwABE38A7cwcAwAB7IELAAET3AAHAAEUWasAARRZgA8AAcj3AAUkxAD4BSsAARX8BKwHAAEWkasAARaRgA8AAcj3AAUlLAD4FTsAARcHAAEXIAACCRWADgksBFsAARdWAwABFysA7bkaD7sAAclFOwABF9QAAAMAAU61gA4SDAEnAAEYUJcAARh+BwABGGMA7c7tgA4PqPgE9isAARj7AO3PhFsAARlsUwABGVMA7c7sBAWADg+qCaoPvScAARnYlwABGgYHAAEZ6wDtzu2ADhxo+AT2KwABGpMA7c+EWwABGwRTAAEa6wDtzuwEBYAOHGoJqhxw+AT0ewABG6rXDAgACFsAARwQuwABTcMAAeuAkAAQnwABTrhbAAEdXLsAAU3DAAHrgJ8AAU6+BwABHfMA7c7sAScAAR5wWwABHqBbAAEegLnrAAHregrSBVj4BPRzAAEfILsAAU7DAAHqwAQABgsAAR+TAO3PhAMAAex8+AT0cwABIGS7AAFOxwAB6sAEAAYLAAEgvwDtz4QDAAHseQsAASFsAAcAASHpqwABIemADwAByPcABSWUAPgI9HMAASJMuwABTssAAerACAAImwABItgEWwABIti7AAFNxwAB6sMAAesRgA8AAdU8cwABIzS7AAFOzwAB6sAEAASbAAEjoARbAAEjogMAASN3AO25Gg+7AAHJRYAOCUgDAAHsMAMAAeyRCwABI+gBAHMAASRwWwABJFi6kHsAAer+47gAAAADAAES4wABJFsAASSUBJMAASVIDJ8AAU7QWwABJOy7AAFNxwAB6sMAAesQngWpJwABJXBbAAEloFsAASWAuwABTc8AAerDAAHrGwABQ2cAAdco+BU7AAEmKwABJkQAAgmZgA7zTARbAAEmTLsAAU3HAAHqwwAB6xE7AAEm5wABJvgAAgL1gA8AA/esBFsAASceBwABJwMA7dfyAvbyvScAASdUiIhbAAEnggcAASdnAO3X8hQK82AEWwABKB4HAAEoAwDt1/IeAvNkBFsAASiuBwABKJMA7dfyEGbzXPgI9isAASkHAO3YgJMAASm0DFsAASmEWwABKUoHAAEpLwDt1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6wDAAPy6PgE9HMAA03+DwADTeMA7xMRWAQABHMAA05AWwADTgy7AAFN5wAB6sMAAes7AAFPdAgAChMAA06TAO8axgMAA07HAO8QHAMAAnuoAwAD8uj4BScAA1EwcwADUUC7AAFQFwAB6sAAAAADAAHslPgU9F8AA1aAWwADVmi6kHsAAer+40CnAAESePRfAANXIFsAA1cIupB7AAHq/uNGEwADV28A7xrHAAESfPRzAANYCFsAA1f2BwADV8MA7xBWCaYSZhE0BAAEuAIdmPRzAANYYLsAAU7/AAHqwAAAAAMAAey1KwADWMgA/TsAA1lzAANZhAACCaWADwAB1TwEcwADWbxbAANZjLreZwAB6sMAAeszAAE84AQABgMAA1oDAO8QHAMAAchA9HMAA1o8uoNQBAAEfwADWmMAARt8EAASFwADWtsA7yHKDwADWxMA7xMQWwADW6RbAANbULsAAU4rAAHqwwAB68Z5tvfSCwADXFMA7xI8AAMAAevs9HMAA1y4uwABTjcAAerABAAEfwADXTcAASNEDAAMWwADXVS7AAFOKwAB6sMAAevEcwADXay6g1wAAAADAAHr8gsAA13LAO8SPAADAAHsCPRzAANeMLsAAU7/AAHqwAAAAAMAAey0GwAB7JIFUwADX58AA1+zAANoRAADAAFOywAB6sAAAAAEDwADX/8AA2hEAAAACAgLAANgWAAAAgmpgA8AAdU8AwADYMAAAAMAAQGNgA4SDAABcAT4GTsAA2FPAANhZAACDz2ADvOgBFsAA2GSAwADYW8A7yZmCasAAdVI9HMAA2HIuwABTuMAAerAEAAGCwADYgMA7yb8DwABAY4HAANidwDvJqbSgFsAA2NCAwADYx8A7yZm0oMAAdQnAAFFGGsAA2QHAAKL2wAB7LD0XwADZEhbAANkMLqQewAB6v7jQKcAARJ5JwADZMCEWwADZShbAANk+gMAA2TXAO8mZmtnAAHVTwABGGcAAYnQ+AT0XwADZphbAANmgLqQewAB6v7jRFsAA2cKAwADZucA7yZma2cAAdVPAAESfPz0cwADZ6xbAANnmgcAA2dnAO8mpgmmEmYRNAQABLgCHZj0cwADZ/S7AAFO/wAB6sAAAAADAAHstBsAAeyWBVMAA2hbAANobwADbWwAAwABUBcAAerAAAAABA8AA2jHAANtbAAAA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EcgWwAERri7AAFOGwAB6sMAAevC2/wEAAYDAARHUwDvxigDAAEIJTsABEewAAACAlmADwABFfQBJwAER9xzAARILFsABEgCAwAER+8A78YqCa4gVSAEAASsAwAD9Xj4BPYrAARIcwDvx3BzAARIqFsABEiQupB7AAHq/uOQBAAEWwAESOi6k38AAeuEAwABEsz4DPRzAARJrFsABEmCAwAESW8A78YqCa4gVhE0BAAEuAISyPYrAARJ/wDvx3BzAARKHLqDXAAAAAMAAevxJwAESlBzAARKyFsABEqYWwAESmC7AAFN/wAB6sMAAetSFVMAAerVIAQABasABEsFgA7zvwADlSgDAAP1ePgA+AT2KwAEUoMA78dwcwAEUtRbAARSoLsAAU3nAAHqwwAB6zsAAU74DAAMWwAEU+BbAARTqLsAAU3/AAHqwwAB61IJmwAB6tILAARUAwDvx3BbAARUHLsAAU33AAHqwwAB60gDAAJ7kPRzAARUnLsAAU5nAAHqwAAAAAMAAewVJwAEVRCIWwAEVVxbAARVILsAAU3vAAHqwwAB60IFVwAD8iwAWwAEVcBbAARViLsAAU3DAAHrghTW83T4BScABFYIlwAEVkhbAARWLgMABFYbAO/GKhFKCWGADhIM+AUrAARaDAD8/PRzAARadLsAAVCrAAHqwAgACgsABFqnAO/HcgcABFrDAO/GeAMAAe3cGwAB7j4FUwAEWy8ABFtzAARsyAACGLQFqwAEWzGADwAD9UQIAAAEDwAEW7cABGzIAAAABAQHAARb+AAAAg+5gA4fJAABcAT4IQBbAARcRLsAAU4HAAHqwwAB62MABFxHAARcdAEAhHMABFzUWwAEXMIDAARcrwDv0BYJph85IAQABKwDAAP1ewAEXK8ABFzwAT8ABF0PAARdIAAABwABUK2EDAFwAA8ABF1jAARfOAAAAAAAAAFwBPgFGwAEXY8ABF57AARd/AAAAnqVgA4hTABbAAReTgMABF47AO/QFhiuHyz4BPRzAARe0gsABF6jAO/SShE0BAAEuAIhwT8ABF9XAARfiAAABwABULGEDAGADwABFfQADwAEX8MABGJ4AAAAAAAAAYAPAAEV9AT4DScABF/scwAEYDhbAARgEgMABF//AO/QFhbqHzEgBAAErAMAA/V4+AUrAARghARzAARguFsABGCgupB7AAHq/uOMCAAIpFsABGEQupN/AAHrhAMAARLI/PRzAARhvFsABGGWAwAEYYMA79AWFuofMhE0BAAEuAISySsABGIMBHMABGIouwABTwAAAAADAAHuGT8ABGKXAARiqAAABwABULWEDAFwAA8ABGLXAARmrAAAAAAAAAFwBPgFGwAEYwMABGO/AARjTAAAAgmtgA4SuABbAARjmgMABGOHAO/QFhiyHzT4DPRzAARkEhMABGPnAO/XBhE0BAAEuAISyQCEcwAEZIi7AAFOOAAAAAMAAe3/AARkhwAEZLQA9HMABGZguoNcAAAAAwAB6/E/AARmywAEZtwAAAZ8jYQMAXAADwAEZwMABGecAAAAAAAAAXAE+AT0cwAEZ1RbAARnQgMABGcvAO/QFgmmHzoRNAQABLgCHZk7AARn5wAEaBAAAwABULmADwACFiQEcwAEaERbAARoGLsAAU4fAAHqwwAB66sAATDMBAAGAwAEaJcA79AUAwAByNz0cwAEaPRbAARowLsAAU3jAAHqwwAB6zcAAVC8IAAiAwAEaUcA79AUcwAEachbAARpfLsAAU3LAAHqwwAB6xcAAVDABAAGAwAEah8A79AUAwACFGIXAARqWwDv2coHAARqqwDv0ZYLAARrEwDv00YPAARrcwDv1lITAARrxwDv2LhzAARseFsABGwQuwABThsAAerDAAHrwtwEBAAGAwAEbKMA79AUAwABCCwDAAKOjBsAAe5CBVMABGzfAARtIwAEc9gAAhjEBasABGzhgA8AA/VECAAABA8ABG1vAARz2AAAAAQEBwAEbbgAAAIPuYAOH1gAAXAE+AUnAARt6FsABG4OAwAEbfsA795mGMIfcPgE9HMABG5QuwABUMcAAerABAAGAwAEbpcA795kAwAB7MEnAARu3HMABG80WwAEbuy7AAFOJwAB6sMAAeu+36QIAAoDAARvswDv3mRbAARvyLsAAU4rAAHqwwAB68QDAAHIgPgE9HMABHKQuwABUMsAAerABAAGAwAEcucA795kAwAB7Lj4BPRzAARzTLsAAVDPAAHqwAQABgMABHOfAO/eZAMAAey8GwAB7LoFUwAEeTcABHlLAATNIAADAAFQywAB6sAAAAAEDwAEeZsABM0gAAAABAQHAAR55AAAAg+5gA4fWAABcAT4LTsABHpTAAR6iAACuKWADwACjjwEcwAEeshbAAR6kLsAAU23AAHrawABUNAEAASfAAFQ1AMAAo4tOwAEfJQAAAJ/dYAPAAEV9AE7AAR9RAAAAwABUNmADwAD6PwBOwAEfh8ABH5YAAMAAVDdgA8AARX0BK0/AAR++wAEfywAAAcAAVDhhAwFgA8AAQeFgA8AARX0AA8ABH9nAASDhAAAAAQEBwAEf7AAAAKVhYAPAAEHhAABgA8AARX0BPgNOwAEgEsABIBkAAIF2YAPAAEcEATXAASAfAAABAGADwABHBAEfwAEgH8AARxMDAAKCwAEgNcA7+OYWwAEgURbAASA8LsAAU4rAAHqwwAB68bUuvgUBrEohg8ABIHvAO/j3NQAAAAEAWwEXwAEgjofAASCMwDv5fqVhhsABIKLAO/lPwABFgIcAwDv5fj0cwAEguy5WAQABh8ABIL/AO/lqAMAAe4FKwAEgzgGHwAEg1cA7+WpPwAEg6MABIO0AAAHAAFQ5YQMAXAADwAEhEsABJH0AAAAAAAAAXAE+BknAASEdHMABITCEwAEhIcA7+QpIAQABKwDAAP1eSsABITkAP07AASIYwAEiKgAApWFgA8AAQeEBHMABIlAWwAEiNi7AAFOGwAB6sMAAevC3EQEAAYDAASJjwDv4mgDAAEIcTsABIn3AASKEAABhYAPAAEV9ARzAASKUhcABIobAO/klIAEAAYfAASKVwDv6awAAPRzAASKvLqDUAQABNcABIrgAAAEAYAPAAEidAR/AASK4wABIpwQABBTAASLNwDv6qQgAhMABItXAO/kKKxbAASMAFsABIusuwABTisAAerDAAHrxhaW99wA1AAAAAQBbARfAASMUFMABIxLAO/rlCQClYYfAASMowDv6a8AARYAUAMA7+uUJAADAAHr7PRzAASNCLsAAVBrAAHqwBQAEFsABI3MWwAEjYy60BMAAerDAAHrssYm41zHAASOfYAPAAEV9AhzAASOgLqDXAAAAAMAAevyCwAEjp8A7+OYcwAEjyxbAASO5LsAAU4nAAHqwwAB677fjAQABFsABI/oWwAEj6i60BMAAerDAAHrssYm41wDAAHIXasABJCddA8AA/KkBYAPAAGJmwAD4HwGlYYfAASRYwDv6a8AAe2E9HMABJHIuoNcAAAAAwAB6/E/AASSEwAEkiQAAAcAAVCthAwBcAAPAASSZwAEmjAAAAAAAAABcAT4GTsABJLbAASTIAAClYWADwABB4QEcwAEk7hbAASTULsAAU4bAAHqwwAB68LcQAQABgMABJQHAO/iaAMAAQhs9HMABJR0WwAElFIDAASUPwDv4moPMh9qETQEAAS4AhLI9isABJTHAO/jmHMABJTkuoNcAAAAAwAB6/D2LwAElRsA7+PcWwAElqxzAASVwFsABJVAuwABTisAAerDAAHrxtYgBAAEWwAElj4LAASWJwDv45rlwwABFvQC+YbQ2vdU9HMABJdEWwAElwy7AAFNtwAB62sAAU+ADAAKBwAEl6MA7+K4cwAEl/RbAASX3LqQewAB6v7jeAgACkxbAASYPLqTfwAB64QDAAEStAaVhFMABJjrAO/xQCADAAKOBPYzAASZUwDv5ChzAASZzhcABJmXAO/klIAEAARTAASZ0wDv8UAgAAABPwAEmk8ABJqAAAAHAAFQsYQMAYAPAAEV9AAPAASauwAEolwAAAAAAAABgA8AARX0BPgZOwAEmy8ABJt0AAKVhYAPAAEHhARzAAScDFsABJukuwABThsAAerDAAHrwtxEBAAGAwAEnFsA7+JoAwABCHE7AAScwwAEnNgAAJ2ADwABFfQEcwAEnRhbAASc4LsAAU23AAHrawABELgIAAYHAASdQwDv4rgGlYRTAASd8wDv9yQkAwACjfU7AASejwAEnqgAAYWADwABFfQEcwAEnuoXAASeswDv5JSABAAEUwAEnu8A7/ckJAAAATsABJ+LAASfqAACbIWADwABFfQE1wAEn+gAAAQBgA8AASLoBH8ABJ/rAAEjCBAAEFMABKADAO/4HCgAUwAEoB8A7/k8LACsWwAEoKhbAASgVLsAAU4rAAHqwwAB68YWlvfcANQAAAAEAWwEXwAEoQhTAAShAwDv+lQwApWEUwAEoVsA7/ckJAMAARYAUAMA7/pUMAD0cwAEoby5WAQABFMABKHPAO/6BDAAAwAB7gUrAASiDARTAASiKwDv+gQwAT8ABKJ7AASijAAABnyNhAwBcAAPAASiswAEuVgAAAAAAAABcAT4JTsABKz7AAStDAACCkGADvecBHMABK1cWwAErRS7AAFOJwAB6sMAAeu+36gEAAYDAAStpwDv4mgDAAHIhTsABK4nAASubAAClYWADwABB4QEcwAErwRbAASunLsAA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AEV/SAEAASsAwAD9XhfAATutFMABO63APAogCgClYBTAATu/wDwI4ggAwABFfysBYAO8rT89HMABO+oWwAE75YDAATvgwDwE9YJph9uETQEAAS4Ah2Y9HMABPBAWwAE8Ay7AAFN4wAB6sMAAes3AAFQvCAAIgMABPCTAPAT1HMABPEUWwAE8Mi7AAFNywAB6sMAAesXAAFQwAQABgMABPFrAPAT1AMAAhRgcwAE8dBbAATxpLsAAU4fAAHqwwAB66sAATDQBAAGAwAE8isA8BPUAwAByOIPAATyZwDwFUoTAATyzwDwGwzTAATzLA8ABPMvAATzQAAAAAAAAAGADwAD9DgE+AIXAATzawDwH2BzAAT0HFsABPO0uwABThsAAerDAAHrwtwEBAAGAwAE9EcA8BPUAwABCCwDAAKOjBsAAezCBVMABPSDAAT0lwAFKZgAAwABUMcAAerAAAAABA8ABPTXAAUpmAAAAAQEBwAE9SAAAAIPuYAOH1gAAXAE+FU7AAT2cAAAAsUVgA8AARX0APRzAAT2/FsABPbaAwAE9scA8C76DzIfahE0BAAEuAISyTsABPeXAAT3vAABbXQPAAPypAWADwABFfQExwAE98WADwABFfQEcwAE98i6g1wAAAADAAHr8TsABPgrAAT4OAACZymADvMEBFsABPiAWwAE+EC60BMAAerDAAHrssUW4lU7AAT49wAE+RQAAniNgA8AAYmYBHMABPlMWwAE+Ry63mcAAerDAAHrMwABMPQEAARbAAT5tFsABPmSAwAE+X8A8C76CbIfZgpCIWQDAAHHyTsABPobAAT6TAACxrmADwABijQEmwAE+hgEcwAE+qxbAAT6dLsAAU23AAHrawABT0AEAAR/AAT6+wABiogIAAoPAAT7MwDwMOjHAAT7RYAPAAGJmAYTAAT7SwDwMZQAAwACjcmADwABijU7AAT8owAE/OwAAwABUPmADwAB8FQEfwAE/ScAAfB8CAAKFwAE/VMA8DLVqwAE/cGADwABwDMAA8r4APRzAAT9+LsAAU9HAAHqwAQABhcABP5jAPAy1AMAAeylOwAE/vcABP88AAKVhYAPAAEHhARzAAT/zFsABP9kuwABThsAAerDAAHrwtxABAAGAwAFABsA8C74AwABCG0nAAUB3HMABQIQWwAFAey7AAFFCwAB6sMAAevTA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wAHHFi6g4sAAettWAQABHMABxyYWwAHHIC6kHsAAer+44QIAAhbAAcc9gMABxzjAPGIagJaGfxbAAcdELqTfwAB64QDAAESwAMAA/LoGwAB7oYFUwAHHWsABx2vAAcgkAACF7QFqwAHHW2ADwAD9UQIAAAEDwAHHfcAByCQAAAABAQHAAcePAAAAg+5gA4aqAABcAT4CPRzAAcehFsABx5suoOLAAHrbVgEAARzAAce0FsABx64upB7AAHq/qooCAAIcwAHHzBbAAcfALreZwAB6sMAAeszAAE0VAQABgMABx93APGK3AMAAcgUWwAHH5C6k38AAeuEAwABEqwDAAPy6PTUAAAABAGADtlcBFsABx/cut93AAHriIxzAAcgBgQDAPGM4SAEAASsAACscwAHIAYEAwDxjOK9FAQABFsAByBqAwAHIFcA8YreAloasALZoAVwGwAB7ooFUwAHIKcAByDrAAciXAACF6gFqwAHIKmADwAD9UQIAAAEDwAHISsAByJcAAAABAQHAAchaAAAAg+5gA4ahAABcAT4BPRzAAchsFsAByGYuoOLAAHrbVgEAARzAAch2FsAByHAupB7AAHq/uOQBAAEWwAHIhi6k38AAeuEAwABEswDAAPy6BsAAez6BVMAByNHAAcjewAHNFwAAwABUmMAAerAAAAABA8AByP3AAc0XAAAAAwMDwAHJCwAAAIPAYAPAAEV9AMAByScAAACCkGADwABijQDAAck/AAAApWFgA8AAQeEAAGADwABFfQE+BknAAclYIiEcwAHJZhbAAcldLsAAUULAAHqwwAB69MAAUVIBAAEWwAHJg4HAAcl+wDxkVJYmwABijwDAAILiARbAAcmUgcAByY/APGRUsmvAAGKVPgFKwAHJqAGAwAHJr8A8ZEQ/ScABycEWwAHJzRbAAcnFLnrAAHregrSBVj4ETsAByjfAAcpBAADAAFSZYAPAAGKNAR/AAcpNwABiogIAAhbAAcprFsABylsutATAAHqwwAB67LFMuJwWwAHKfoHAAcp5wDxkVIUdwABikABOwAHKocAByqUAALr5YAPAAEV9ARzAAcq+FsAByrEuwABTecAAerDAAHrOwABT0gIAAoPAAcrYwDxk/xbAAcrjLqVgwAB6+QDAAJ7rPTUAAAABAGADtlcBFsAByyUut93AAHriIxzAAcsv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AMAA/LpKwAKQgwA/PRzAApCfFsACkJYupM3AAHrfrtsDAAMcwAKQxxbAApC7LreZwAB6sMAAeszAAE82AgACFsACkNQuwABTcMAAeuCBwAKQ48A86igAwAByDmrAApECYAOk6sAAxS8ywAKRE1tbASeBsCfAAFUIALWrPRzAApF0FsACkW4uoOLAAHrbVgEAARzAApF+FsACkXgupB7AAHq/uOQBAAEWwAKRji6k38AAeuEAwABEswDAAPy6BsAAe1WBVMACkaTAApGowAKThgAAwABVCcAAerAAAAABA8ACkcrAApOGAAAAAgICwAKR4AAAAIYFYAPAAGDSAMACkfYAAACyamADvMEAAGADwAD8BQE+AknAApIKJcACkheAwAKSDsA87D1gA8AAYiM+AUnAApI8HMACklYWwAKSThbAApJJFMACkkDAPOw9AAFgA8AAYiOCkMAAYZuWJsAAYo9IAQABgcACklnAPOxNAMAA/V4+A0AiHMACko8WwAKSiBbAApKBFMACknjAPOw9AAFgA8AAYiOEhcAAYiVhwAD8/kgBAAGUAMAA/SgBHMACkq4WwAKSpxbAApKgFMACkpfAPOw9AAFgA8AAYiOEhcAAYiVhwAD8/kgBAAGVAMAA/SjAApJ4wAKSsgBOwAKSy8ACktkAAMAAS35gA8AAYNIBFsACkvIWwAKS6xbAApLkFMACktvAPOw9AAFgA8AAYiOEhcAAYiUpwAD8/YMZwAD8jUnAApMBJcACkxOCwAKTBcA87TxgA8AAYSs+AUrAApM0ARzAApNSFsACk0kUwAKTO8A87TwCAWADwABhK6pmwABhLapWAAAAAMAA+jk/Pz9KwAKTdwErBsAAe1aBVMACk83AApPVwAKVBwAAwABVB8AAerAAAAABA8ACk+nAApUHAAAAAgICwAKT+AAAAIYFYAPAAGDSAMAClA8AAACvdGADwABk/gAAYAPAAJUcAT4DTsAClCDAApQmAAAnYAPAAPwFARzAApQoLsAAVQnAAHqwAgACgMAClFTAPO4IFsAClG4WwAKUXi60BMAAerDAAHrsscy5FwDAAHtVScAClIIcwAKUjILAApSGwDzuM0gBAAErAMAA/ShKwAKUlQErP0rAApSmARzAApSzgcAClK3APO4YwABIqgIAAmrAApTQYAO11cAAxUMcwAKU+2rAApT1XQPAAPypAWADwACaMMABVcRLAQABgsAClPzAPO4zAMAA/LgAwABlKwbAAHtXgVTAApUMwAKVEcACmPAAAMAAVNHAAHqwAAAAAQPAApUvwAKY8AAAAAEBAcAClUQAAAChQ2ADhb0AAFwBPgdJwAKVVhzAApVaLsAAVOvAAHqwAwABgMAClXbAPO8sAsAAVOyVwABU7ZXAAHtOPgI9HMACleAWwAKV2i6g4sAAettWAQABHMACleoWwAKV5C6kHsAAer+45AEAARbAApX6LqTfwAB64QDAAESzAMAA/LpKwAKWDwA/TsAClijAApYzAADAAFUKYAPAAP3rARzAApY1LsAAVP7AAHqwBAAEgMACll3APO8slCew0ifAAFULAMAAe09OwAKWnsAClqMAAK30YAPAAJkcARzAAparasAClqhgA8AAl4DAAR9pwABVBAEAARzAApbYFsACls8uwABD0cAAerDAAHrCr6kBAAGBwAKW9cA877kAwABc2gDAAJeOTsAClxfAApcmAACvS2ADwABmywEcwAKXPBbAApcwLreZwAB6sMAAeszAAE8wAQABgMACl2XAPO8sAMAAcgRAIRzAApeVg8ACl4bAPPBVSAEAASsAwAD9XsACl4bAApecAR7AApemtcMCAAIcwAKXuxbAApevLreZwAB6sMAAeszAAE82AgACFsACl8guwABTcMAAeuCAwAKX18A87ywAwAByDiTAApgTAifAAFUMgMACmAjAPO8sAE7AApgqwAKYMgAAwABVDWADvecBHMACmE4WwAKYPC7AAFOJwAB6sMAAeu+37QIAAoPAAphlwDzwVRbAAph1LqTfwAB64QDAAHIlPRzAApiHLqDUAQABH8ACmJDAAEdgBAADgsACmJ3APO/3hMACmKPAPPENasACmKxdA8AA/KkBYAPAAEV9wAD5DgGvS4PAApjcwDzwVQDAAHr7BsAAe1iBVMACmPXAApj6wAKe+QAAwABU0sAAerAAAAABA8ACmRHAAp75AAAAAQEBwAKZJgAAAKFDYAOFvQAAXAE+DknAApk4HMACmTwuwABU68AAerACAAGAwAKZWMA88dcBwABU7JXAAHtOPgI9HMACmagWwAKZoi6g4sAAettWAQABHMACmbIWwAKZrC6kHsAAer+45AEAARbAApnCLqTfwAB64QDAAESzAMAA/LpK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hK4BFsACrtsWwAKu0BbAAq7GgMACrrvAPP/OW4XAhZOFe4DDwAD8jz0cwAKu8IHAAq7nwD0AW4RNAQABLgCEsk7AAq8PwAKvIwAAwABVLmADwABFfQEcwAKvJS6g1wAAAADAAHr8ScACrzAlwAKvSILAAq80wD0AqWADwABIUj4CTsACr2zAAq99AADAAFUvYAPAAGDSARbAAq+TFMACr3/APQCpAgFgA8AASFKGBcAASFRJwAKvoyIlwAKvuIPAAq+nwD0A6mADwABhpAAlwAKv+xbAAq/rFMACr9rAPQDqAwFgA8AAYaSzfsAAYaZgA8AAYo0+BU7AArAlwAKwKgAAgpBgA8AAYo0BJsACsCUBFsACsD0UwAKwLMA9AOoDAWADwABhpLN+wABhpmADwABijU7AArCqwAKwswAAhgVgA8AAYNIBH8ACsLnAAGH2AQABFsACsNeEwAKw0sA9AWCWJsAAYo8ATsACsPbAArECAAC4zWADwABFfQEcwAKxChbAArEELqQewAB6v6qKAgAChcACsRbAPQGcFsACsSAupN/AAHrhAMAARKs9HMACsTwWwAKxNi6g4sAAettWAQABhsACsUDAPQHRAMAA/LpKwAKxVgA/Pz0cwAKxehbAArFxLqTNwAB6367bAgACHMACsaIWwAKxli63mcAAerDAAHrMwABPNgIAAhbAArGvLsAAU3DAAHrggMACsb7APP/OAMAAcg5qwAKx32ADpOrAAMtPALWrPRzAArIWFsACshAuoOLAAHrbVgEAARzAArIgFsACshoupB7AAHq/uOQBAAEWwAKyMC6k38AAeuEAwABEswDAAPy6BsAAe12BVMACskbAArJLwAK1AwAAwABU2MAAerAAAAABA8ACsmfAArUDAAAAAQEBwAKyfAAAAKFDYAOFvQAAXAE+B0nAArLAHMACssQuwABU68AAerADAAGAwAKy4MA9AxECwABU7JTAAFTtlMAAe04+Aj0cwAKzShbAArNELqDiwAB621YBAAEcwAKzVBbAArNOLqQewAB6v7jkAQABFsACs2QupN/AAHrhAMAARLMAwAD8ukrAArN5AD9OwAKzmcACs6IAAB9gA4SuARbAArPEFsACs7kWwAKzr4DAArOkwD0DEVuFwIWThXuAw8AA/I89HMACs9mBwAKz0MA9A56ETQEAAS4AhLJOwAKz+MACtAwAAMAAVS5gA8AARX0BHMACtA4uoNcAAAAAwAB6/E7AArQswAK0PgAApWFgA8AAQeEBHMACtGIWwAK0SC7AAFOGwAB6sMAAevC3BAIAAoDAArRswD0DEYDAArR4wD0DEQDAAEIOTsACtJbAArSiAAC4zWADwABFfQEcwAK0rC7AAFTFwAB6sAIAAoLAArS8wD0D7IPAArTRwD0EEgDAAHtkPRzAArTvFsACtOkuoOLAAHrbVgEAAYTAArTzwD0EWQDAAPy6BsAAe16BVMACtQjAArUNwAK30wAAwABU2sAAerAAAAABA8ACtS/AArfTAAAAAQEBwAK1RAAAAKFDYAOFvQAAXAE+BUnAArVWIhzAArVaLsAAVOvAAHqwAwABgMACtXbAPQToAsAAVOyTwABU7ZPAAHtOASEWwAK1xhbAArW+LnrAAHregrSBVj4CPRzAArYJFsACtgMuoOLAAHrbVgEAARzAArYTFsACtg0upB7AAHq/uOQBAAEWwAK2Iy6k38AAeuEAwABEswDAAPy6SsACtjgAP07AAraAwAK2jAAAwABVMGADwABijQEfwAK2lsAAYqICAAIWwAK2tBbAArakLrQEwAB6sMAAeuyxTLicMcACtsJgA8AAYmYBH8ACtsPAAGL4AAAAAABOwAK26sACtvwAAKVhYAPAAEHhARzAArcgFsACtwYuwABThsAAerDAAHrwtwQCAAKAwAK3KsA9BOiAwAK3NsA9BOgAwABCDk7AArdUwAK3WAAAuvlgA8AARX0BNcACt1oAAAEAYAPAAEspAR/AArdawABLMwIAAoHAArdkwD0FjBbAAreGFsACt3EuwABTisAAerDAAHrxnm299AA1AAAAAQBbARfAArebg8ACt5nAPQY8pWGCwAK3r8A9BeHAAEWAgwDAPQY8PRzAArfGLqDUAQABg8ACt8vAPQYoAMAAevsGwAB7X4FUwAK32MACt93AAsNtAADAAFTHwAB6sAAAAAEDwAK37cACw20AAAABAQHAArgCAAAAoUNgA4W9AABcAT4OScACuBQcwAK4GC7AAFTrwAB6sAQAAYDAArg0wD0G8QPAAFTslcAAVO0rlWiUwAB7Tj4CPRzAAri3FsACuLEuoOLAAHrbVgEAARzAArjBFsACuLsupB7AAHq/uOQBAAEWwAK40S6k38AAeuEAwABEswDAAPy6SsACuOYAP07AArkIwAK5FwAAr0tgA8AAZssBHMACuS0WwAK5IS63mcAAerDAAHrMwABPLgEAAYDAArlIwD0G8QDAAHICQCEcwAK5eIHAArlpwD0HgUgBAAErAMAA/V7AArlpwAK5fwEewAK5ibXDAgACHMACuZ4WwAK5ki63mcAAerDAAHrMwABPNgIAAhbAArmrLsAAU3DAAHrggMACubrAPQbxAMAAcg4kwAK59gInwABVDIDAArnrwD0G8QBOwAK6EsACuhkAAIJRXQPAAPypAWADwABFfQExwAK6KWADwABFfQBGwAK6McACunnAArpEAAAAH2ADhK4AHMACunAWwAK6ZRbAArpbgMACulDAPQbxW4XAhZOFe5YvAQABlQDAAPyBPgI9HMACuoqDwAK6gcA9CGiETQEAAS4AhLI9HMACuqWCwAK6nsA9CDlWAQABHMACuqkuoNcAAAAAwAB6/ADAAPy6ScACurwhHMACuvQWwAK63BbAArrPgcACusDAPQeBuhPAAGbRtz7AAJkjSAEAARbAArr+gsACuvfAPQg5YcAA/NgAwAD9KD4DPRzAArsXFsACuw4upM3AAHrfrtsDAAMcwAK7QRbAArs1LreZwAB6sMAAeszAAE82AgACFsACu04uwABTcMAAeuCAwAK7XcA9BvEAwAByDmrAAruAYAOk6sAAxS8ywAK7iVtbASeBsCQAAifAAFUxJ8AAVTIAtas9HMACvCYWwAK8IC6g4sAAettWAQABHMACvDAWwAK8Ki6kHsAAer+45AEAARbAArxALqTfwAB64QDAAESzAMAA/LpKwAK8VQA/ScACvGgewAK8hMAAmocBAAEWwAK8phbAAryZgcACvIrAPQeBuhPAAGbRtG7AAJkhAD4BPRzAAry9FsACvLQupM3AAHrfrtsCAAIcwAK85xbAArzbLreZwAB6sMAAeszAAE82AgACFsACvPQuwABTcMAAeuCAwAK9A8A9BvEAwAByDmrAAr0mYAOk6sAAyXUAtas/TsACvVjAAr1gAADAAFUNYAO95wEcwAK9fBbAAr1qLsAAU4nAAHqwwAB677ftAgACgcACvZPAPQeBFsACvaMupN/AAHrhAMAAciVOwAK9yMACvdoAAKVhYAPAAEHhAStOwAK988ACvfgAAIKTYAPAAEV9ATXAAr3+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AELDAD0cwALJWC6g1AEAASbAAsldAYbAAsldwD0QMGADwABFfQDAAHr7BsAAe2KBVMACyXLAAsl3wALX+AAAwABUPcAAerAAAAABA8ACyY3AAtf4AAAABwcHwALJnQAAAIPuYAOCSwDAAsm0AAAAwABVOWADwAB8FQDAAsncAAAAhYJgA73nAMACyfkAAACk8WADwABLZADAAsocAAAAW10DwAD8qQFgA8AARX0AwALKPAAAAIUdXQPAAPypAWADwABiZgDAAspjAAAApWFgA8AAQeEAAFwBPg5OwALKisACypQAAMAAVTpgA73nARbAAssVHMACyrQWwALKli7AAFOKwAB6sMAAevG1NgIAAhbAAsrpgcACytbAPRJkgpDAAHwXFsACywKBwALK78A9EmS8AcAAfBgAvg61JL3sPYrAAssowD0SdiMcwALLRILAAss3wD0SdkgBAAErAMAA/V6HwALLVsA9EtccwALLfxbAAstqLsAAU4rAAHqwwAB68ZcDAgACgsACy4zAPRJ2h8ACy5rAPRLXAL4+AWADvedPwALMf8ACzIQAAAHAAFU7YQMCYAPAAEtkYAO802ADwAD6PwADwALMpcACzqYAAAACAgLAAsy4AAAApPFgA8AAS2QAwALMzwAAAJYmYAO80wAAYAPAAPo/AT4CTsACzOXAAszuAADAAFU8YAPAAPo/ASIWwALM+RTAAszwwD0TzwkAhTPAAEt0ABzAAs0TFsACzQ4UwALNBcA9E88JAIC9wABLckgBAAEnYQDAAP36ScACzSYiFMACzSrAPRP4CwABFsACzT8UwALNNsA9E88JALbXwABLeD4BSsACzVIBHMACzXQWwALNZRbAAs1ZLqTfwAB64atowABNOZrnAgACFsACzZUUwALNjcA9E98KAIT/vOEWwALNtRbAAs2lLrQEwAB6sMAAeuyxVrimAMAAcQZJwALN1RbAAs3iFMACzdnAPRPPCQC208AAS3k+AUrAAs34ARzAAs4aFsACzgsWwALN/y6k38AAeuGraMAATTma5wIAAhbAAs47FMACzjPAPRPfCgCE/7zhFsACzlsWwALOSy60BMAAerDAAHrssVe4pwDAAHEGPgFKwALOjAEqT8ACzq3AAs6yAAABwABVPWEDAmADwABLZGADvNNgA8AA+j8AA8ACzsjAAtFAAAAAAgIC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AQABkwDAAP00ARbAA0tvFsADS2kupB7AAHq/uNTAAESiScADTAUcwANMFhbAA0wJLrfbwAB6sMAAetW3XQEAAYDAA0wnwD1vlADAAEKXSsADTDIBKj9OwANMScADTFwAAMAAVWpgA8AA+j8BHMADTHMWwANMZi6328AAerDAAHrVt1QCAAGAwANMfcA9b5QBt1UUwANMk8A9cL8IAMAAQpNJwANMpBzAA0y7FMADTKjAPXE/CQBIAQABKgDAAP1eSsADTMUBKj9PwANM2MADTN0AAAHAAFVrYQMAYAPAAPo/AAPAA0zxwANU2AAAAAAAAABgA8AA+j8BPghJwANM/BbAA00IFsADTQAuesAAet6Co4ErSsADTRkBKj9AIiIiIiEcwANNSYHAA01AwD1vokgBAAErAMAA/V4BFsADTWuAwANNYsA9b5SEGbzXARbAA02OgMADTYXAPW+Uh4G81gEWwANNs4DAA02qwD1vlIeAvNkBJcADTduAwANN0sA9b5RgA70HwANNQMADTfMBHsADTf+1wwIAAoDAA04IwD1vlCTAA04/AyfAAFVsgMADTjXAPW+UJ4FqAEnAA05JIRzAA05WgcADTk3APW+iSAEAASsAwAD9Xj4CScADTmkhHMADTneBwANObsA9b6KyowEAAYDAA05/wD1vlADAAEuESsADTooBKj9JwANOoCIhHMADTqmCwANOpMA9b7JIAQABKwDAAP1eABbAA08uHMADTuYWwANOwC7AAFOKwAB6sMAAevGypAMAA4LAA074wD1vsoDAA07+wD1vlBbAA08RgcADTwjAPW+ipy7AAEtoAL5ZtRq91z4BSsADT00BKj8/ScADT3QcwANPhBbAA094LsAAR93AAHqwwAB68sAAS8MBAAGAwANPlsA9b5QAwABqZUrAA0+hASo/ScADT/0cwANQDxbAA1AKgMADUAHAPW+UgL28r0gBAAEnSADAAP36PgFJwANQIiIhHMADUD4WwANQL4DAA1AmwD1vlIT/vOFIAQABFsADUFEWwANQQS60BMAAerDAAHrsmsy4TgDAAP1eABbAA1DAHMADUJIcwANQfYPAA1BswD1vwEsBAAGUAMAA/LitbwEAARbAA1CZLsAAU4rAAHqwwAB68QDAAEXLsqW91j4BSsADUN8BKj8/ScADUZ8iIiXAA1GsgMADUaPAPW+UYAO9AAAWwANR1xTAA1HOwD1vlAABYAO9ALNNvQIAHMADUggWwANR/C7AAEfdwAB6sMAAevLAAEgWAQABFsADUikUwANSIMA9b5QAAWADvQCE/7zhAMAAalA+AUrAA1JEASo/ScADUtYhJcADUuOAwANS2sA9b5RgA70HPgFJwANTCBbAA1M8HMADUyMWwANTDC6lD8AAeuO0MgEAAYDAA1MywD1vlADAAEFTtqjAAEE5PgI9F8ADVIAuwABTgcAAerAqwAB62ErAA1SgASo/P0rAA1THASlPwANU38ADVOQAAAHAAFVtYQMBYAPAAHwgYAPAAPo/AAPAA1T2wANVigAAAAEBAcADVQIAAADAAFVuYAPAAHwgAABgA8AA+j8BPgFKwANVUQEcwANVYxTAA1VYwD11dQwAwABVbwEAAAHAAFVwlMAAfDRPwANVkcADVZYAAAHAAFVxYQMBYAPAAHwgYAPAAPo/AAPAA1WowANXQgAAAAEBAcADVbQAAADAAFVuYAPAAHwgAABgA8AA+j8BPgNJwANWQRzAA1ZFLsAAVXLAAHqwAQABgMADVlPAPW+UAMAAe3w+AUrAA1ZoARzAA1Z6FMADVm/APXXnDQDAAFVvAAAAAMAAfDQ/ScADVpgcwANWpxTAA1acwD115w0AwABVcwEAAAG7GhbAA1bpg8ADVtfAPW/AYcAA/NjAAHw2PgFKwANW/AEpP0rAA1cXARzAA1cwFMADVx7APXVLCwAgAQABFMADVzHAPXXnDQAAAE/AA1dJwANXTgAAAcAAVXRhAwBgA8AA+j8AA8ADV2LAA2RMAAAAAAAAAGADwAD6PwE+EUnAA1eQHMADV6MWwANXlC7AAFN7wAB6sMAAetCB1AEAATTAA1enA8ADV6fAA1fMAAAAAQEBwANXqAAAAIPPYAPAAHvTAABgA8AA+j8BSsADV7IBHMADV8EWwANXuBTAA1eywD13Gw4AgmrAAHvVSAEAAYDAA1fEwD1vlADAAP1eAMAA/Hw+AUrAA1fZASo/TsADWJHAA1ivAACz8mADwAD6PwEcwANY1xbAA1i9FsADWLEupN/AAHrhrwbAAE09s/ICAAIWwANY9S7AAFNxwAB6sMAAesSAwANZDMA9b5QAu/tOwANZKcADWTQAAMAAVW5gA8AAfCABHMADWVEWwANZQC633MAAerDAAHrWwABVdQIAAhbAA1lfLreZwAB6sMAAesyAwANZbMA9b5QAwAB8Q0nAA1l+IRTAA1mDwD13dg4APgFKwANZrAEcwANZxRTAA1mzwD11SwsAIAEAARTAA1nGwD13yQ8AAAA/ScADWi4iFsADWjIuwABTesAAerDAAHrPARbAA1pKLsAAU37AAHqwwAB60z4BSsADWnIBHMADWosUwANaecA9db0MACABAAEUwANajMA9d8kPAAAAP0nAA1qoHMADWr8UwANarMA9cT8JAEgBAAEpAMAA/V4+A07AA1thAAAApWNgA8AA/esAQBzAA1vDFcADW4bAPXjKEBzAA1uaFMADW4/APXfJDwDAAFV2AQAAAcAAVXcpwAB8NUgBAAErAMAA/frAA1uFwANb2gEewANb6LXDAgACgMADW/HAPW+UJMADXB0EJ8AAVXiAwANcC8A9b5Qng1UUwANcFsA9eMoQAABKwANcKQEpP07AA1xJwANcVwAAwABVeWADwAD8BQEWwANcdRbAA1xigMADXFnAPW+UtKC867StvR9OwANckAAAAMAAVXBgA8AA/AUAScADXKgUwANcrMA9cL8IAD4BPRXAA1zCwD15jhEcwANc/WrAA1ziYAPAAPwFg/hkAQABHMADXT5qwANdGGADwAD8BYFXg4gBAAEUwANdQMA9eV0QAADAAP0sAMAA/So+AT0VwANdZsA9eY4RHMADXaJqwANdhmADwAD8BcAAibtkAQABHMADXeRqwANdvWADwAD8BVODiAEAARTAA13mwD15XRAAAMAA/SwAwAD9Kk7AA14JwANeGQAAwABVemADwAD6PwEcwANeKBbAA14bLrfbwAB6sMAAetW3XgEAAYDAA146wD1vlADAAEKZTsADXlDAA15bAADAAFV7YAPAAPo/ARzAA15dLsAAVXLAAHqwAQABgMADXmvAPW+UAMAAe3xJwANfPSIUwANfQcA9elASAAEUwANfVMA9eo4TAD4BPRXAA19qwD15jhErP07AA1+WwANfoQAAwABVd2ADwAD6PwEqScADX7AUwANftMA9elASAD4BPRXAA1/PwD167xQpP07AA1/2wANgAAAAt1RgA8AA+j8BHMADYA0UwANgAsA9d8kPAMAAVW8CAAACwABVcBTAA2A3wD15jhEAwABVdxTAA2BVwD167xQAwAB8NEnA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gVbAAEOrwABDwAnAAFZCAF0DwAD8ZwFgA70MAATAAHy4gVbAAEPcwABD5Qm59wFqwABDxWADwAD9UQJgA70MAATAAHy5gVbAAEQIwABEFgnAAFY4AF0DwAD82gJgA70MYAPAAH06AATAAHy6gVbAAESNwABEmgnAAE8bAF0DwAD9nAFgA70MAAIFwAB8xIFWwABEn8AARJ/AAEUOAJVPAAPAAESzwABFDgAAAAQEBMAARLkAAATAAFZCXQPAAPxnAWADvQwAwABE1QAABLn3YAO9DADAAETrAAAEwABWOF0DwAD82gJgA70MYAPAAH06AMAARQAAAATAAE8bXQPAAP2cAWADvQwAAGADwAB8tAE/BQgBwAB8t4AAwD42dwgBwAB8uIEAwD42jggBwAB8uYIAwD42nAgBwAB8uoMAwD42uQkBwABEn8AAhTMAAAAABcAAfMWBVsAARRPAAEUTwABHdACWLgADwABFI8AAR3QAAAAEBATAAEUpAAAEwABWOF0DwAD82gJgA70MYAPAAH06AMAARUkAAACBVGADwACAQwDAAEVnAAAAwABMFmADwAByKADAAEWBAAAAs5lgA8AAcewAAGADwAB8tAE+AUnAAEcbFsAARySBwABHH8A+N1vAAFYywACASz4BPRzAAEdXFsAAR0kuwABPG8AAfLpWAQABFsAAR2AuuffAAHy4AMAA/ak/BQgBwAB8uYAAwD43PggAwAB8uCMWwABFq4HAAEWmwD43W8AAVkPAAIBGH8AARcrAAIVpAQABFsAARewWwABF3oLAAEXUwD43a6qtwAByKoT/vOEAKwFgA8AAhWAIAMAAfLccwABGfBzAAEZcFsAARkaBwABGQcA+N1vAAFZCwACARYCrAQFgA70MARbAAEZqgsAARmDAPjdrwABMNsAAciwAwAD8cpUZAAAAAMAA/H4IAMAAfLocwABHDRzAAEbCFsAARqeBwABGosA+N1vAAE8bwACASYCrAQFgA70MATTAAEbGA8AARsbAAEb+AAAAAQEBwABGzwAAAIPuYAOCSwAAYAO9DAFKwABG2AEewABG2MAAfI8DAAOEwABG4sA+ONGCwABG6MA+N2uDwABG88A+N30AAMAA/HKVGQAAAADAAPx+CQHAAEUTwACFMwAAAAAGBsAAfLyBVsAAR3nAAEeKwABIGAAAwABWRAFqwABHemADwAD9UQIAAAEDwABHnsAASBgAAAABAQHAAEefAAAAgaZhAwJgA70MYAO85VsAAFwBPgE9HMAAR9cWwABHyC7AAFY4wAB8uYP4AQABNMAAR98DwABH38AASBMAAAACAgLAAEfmAAAAgmNgA70MAMAAR/YAAADAAEjiYAPAAH06AABgA8AA/Q4BPgE9HMAASASAwABIA8A+OWkgAgACgcAASAXAPjmxgsAASAjAPjm/AAAAwAD8+QbAAHy9gVbAAEgdwABILsAASIYAAMAAVkUBasAASB5gA8AA/VECAAABA8AASETAAEiGAAAAAQEBwABISwAAAIJsYAO9DAAAYAPAAPo/AUrAAEheARzAAEh0FsAASF4uwABWQsAAfLeDFwEAAYDAAEh9wD46PwDAAPx2BsAAfL6BVsAASIvAAEiewABJYAAAIwFqwABIjGADwAD9UQIAAAEDwABIpsAASWAAAAAAAAAAYAPAAP3rAT4ETsAASLzAAEi/AACD5GADwAD+NQEfwABIxcAA/lQAAAAAPRzAAEjcgMAASNnAPjrBgooBAAEkwABI9AMnwABWRhbAAEjpLrn3wAB8uCeApwDAAP5JPRzAAEj+gMAASPvAPjrBgooBAAEkwABJQQMnwABWRxzAAEk0FsAASR4uwABWQsAAfLdYAQABJ4GLAMAA/HsnhsYAwAD+SUrAAElIARzAAElSgMAASU/APjrBIwAAAADAAP5OBsAAfL+BVsAASWXAAEl2wABJvQAAwABUDAFqwABJZmADwAD9UQIAAAEDwABJhcAASb0AAAABAQHAAEmMAAAAgmxgA70MAABgA8AA+j8BSsAASZkBHMAASagWwABJmS7AAFY4wAB8uYdHAQABgMAASbTAPjuvAMAA/O0GwAB8woFWwABJwsAAScrAAEvDBAGvFQAAAAEDwABJ6MAAS8MAAAABAQHAAEn0AAAAg0RgA8AAXUEAAGADwAB8tAE+Bz0cwABKCYDAAEoCwD48G4KUAQABasAASg9gA8AA/evAAVnVAMAAXUNOwABKKcAASj8AAMAAVkJdA8AA/GcBYAO9DAEcwABKSIDAAEpBwD48G8AARDAAAWADvQwAAMAAXX9OwABKYMAASmoAALn3YAO9DAEcwABKc4DAAEpswD48G8AARC8AAAAAwABdfk7AAEqjwABKsgAAwABWOF0DwAD82gJgA70MYAPAAH06ARzAAErDgMAASrzAPjwbtskBAmADvQxgA8AAfToBNMAASuUDwABK5cAASv4AAAAAAAAAYAPAAH06AUrAAErrASbAAErrARzAAErygMAASuvAPjwbrD4AAAAAwABdeGADwAB9OgDAAF2ATsAASxDAAEseAADAAE8bXQPAAP2cAWADvQwBHMAASzQcwABLJ4DAAEsgwD48G8AARDAAAWADvQwAAMAAXX+VGQAAAADAAPx+PRzAAEtIgMAAS0HAPjwbgowBAAFqwABLTGADwAD968ABWdUAwABdRErAAEtWAR/AAEthwAB8xAQABIHAAEt/wD48XoLAAEuWwD48l4PAAEuhwD48w4TAAEuxwD49TAAGwAB8wIFWwABLyMAAS9nAAE0DAACvFgFqwABLyWADwAD9UQIAAAEDwABL6MAATQMAAAABAQHAAEvyAAAAhDtgA8AAXPIAAFwBPgc9HMAATAOAwABL/sA+PiivvQEAAWrAAEwbYAPAAIUawAFZ3wDAAF0DPRzAAEwwgMAATCvAPj4ogpQBAAFqwABMNmADwAD968ABWdUAwABc9z0cwABMRYDAAExAwD4+KMAARA4BAAEWwABMUS7AAFZCwAB8twDAAF0sPRzAAExygMAATG3APj4owABEDQEAARbAAEyDLrn3wAB8uADAAF0rPRzAAEyYgMAATJPAPj4ots0CAWADwAB9OgIWwABMpi7AAFY4wAB8uRbAAEy7gMAATLbAPj4orC/AAF0lAMAAXS09HMAATNKAwABMzcA+PijAAEQOAQABFsAATN4uwABPG8AAfLoAwABdLD0cwABM94DAAEzywD4+KIKMAQABasAATPtgA8AA/evAAVnVAMAAXPgAAD45MQA+OgcAPjqBAD47dwA+O/EAPj3yAD4/bwAAAAYCwAB8xoFWwABNCMAATQ7AAFSKA8AAVkkAAAFgAcAAfLQAAWABwACFNAIEwAB8yIFWwABNycAATd8Gg+cAYAPAAP3rAWrAAE3PYAPAAP3rwAFZ8wTAAHzJgVbAAE38wABOAwmCUwFqwABN5WADwAD9UQJgA70MAAIFwAB80YFWwABOCMAATgjAAE8tAJVPAAPAAE4gwABPLQAAAAUFBcAATjgAAADAAFZCXQPAAPxnAWADvQwAwABOWwAAALn3YAO9DADA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AKWpAQABgMAAiojAPneaAE7AAIqiwACKqwAArXhgA8AAYvkBJsAAiqIBHMAAirSAwACKrcA+d5qHCAAAAADAAF1rYAPAAGL5PRzAAIrPgMAAisjAPneagowBAAFqwACK02ADwAD968ABWn0AwABdRErAAIrdATXAAIroAAABAGADwAB9SAEfwACK6MAAfVEEAASBwACK+cA+d92CwACLBcA+eAmDwACLD8A+eEGEwACLGsA+eHkANQAAAAEAWwEXwACLMobAAIswwD55C614hcAAiz3APnilwAB9S4YAwD55CwbAAH1PgVbAAItOwACLX8AAjI0AAK8WAWrAAItPYAPAAP1RAgAAAQPAAItuwACMjQAAAAEBAcAAi3gAAACEO2ADwABc8gAAXAE+CD0cwACLiYDAAIuEwD55rK+9AQABasAAi6JgA8AApI/AAVqHAMAAXQM9HMAAi7WAwACLsMA+eayClAEAAWrAAIu7YAPAAP3rwAFafQDAAFz3PRzAAIvQFsAAi8UuwABMS8AAfR2vFgEAAYDAAIvgwD55rADAAHKIPRzAAIvwgMAAi+vAPnmshvgBAAEWwACL/i6EwsAAfR4AwABdGD0cwACMEoDAAIwNwD55rIb4AQABFsAAjCAuhNrAAH0gAMAAXRg9HMAAjD8WwACMMC7AAFZlwAB9H68WAQABgMAAjE/APnmsAMAApaw9HMAAjF+AwACMWsA+eayG+AEAARbAAIxtLq14wAB9SwDAAF0YPRzAAIyBgMAAjHzAPnmsgowBAAFqwACMhWADwAD968ABWn0AwABc+AAAPndwAD55dgA+evYAAAACAsAAfVKBVsAAjJLAAIyYwACQVgPAAFZtAAABYAHAAP1RAAFgAcAAcoACBMAAfVSBVsAAjU/AAI1vBoPnAGADwAD96wFqwACNVWADwAD968ABWpsEwAB9VYFWwACNkcAAjZkJhFsBasAAjXVgA8AA/VECYAO1xQABBcAAfV+BVsAAjZ7AAI2ewACNwwAAAAPAAI20wACNwwAAAAEBAcAAjboAAASEW2ADtcUAAGADwAB9UgE/AggBwAB9VYAAwD57pAkBwACNnsAA/WcAAAAABQbAAH1XgVbAAI3IwACN0MAAjqEEAa8VAAAAAQPAAI35wACOoQAAAAEBAcAAjgUAAACDRGADwABdQQAAYAPAAH1S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x4KUAQABasAARYFgA8AA/evAAVuRAMAAXUM9HMAARaKFwABFlcA+wMzAAFbSAQABNMAARbADwABFsMAASCYAAAACAgLAAEW1AAAAJ2ADwAD8BQDAAEXKAAAAgmZgA8AAjmsAAGADwAD9DgE+BE7AAEXmwABF6wAAEmADwACk1AEewABF8cAApN0BAAGEwABGEMA+v8cAPRzAAEYnFsAARh8uhI7AAH3hwABMJQMCYAPAAI5rYAPAAKTUAxTAAEY3wD7NOAsAFMAARj7APs1HDAAUwABGRsA+zWINAADAAI6qQUfAAEZTFsAARmsWwABGYBTAAEZbwD7NYg0AwABMS8AApNaCZ8AAclACAsAARotqwABGi2ADwAByPcABSM3AAEasasAARqxgA8AAcj3AAUjmAD4DTsAARs3AAEbSAACD7mADg14BJsAARs0BFsAARuQWwABG2RTAAEbUwD7NYg0AwABMS8AApNaD7sAAclFgA4NeScAARvQWwABG/xTAAEb4wD7NRwwAh3282j4BPRzAAEceFsAARxYuvJ3AAH3qgL8CAAImwABHHgEUwABHH8A+zioOAGADg3wmwABHHgEUwABHJ8A+zUcMAGADwACOdwDAAPzvScAAR0AWwABHSxTAAEdEwD7NRwwAh4C82T4BPRzAAEd2FsAAR2guwABWr8AAfeiAvwIAAhTAAEd3wD7OKg4AJsAAR3YBFMAAR3/APs1HDABgA8AAjnQAwAD87z4BPRzAAEevFsAAR6YuwABWsMAAfemAvwIAAibAAEevARTAAEewwD7OKg4AYAOD6ibAAEevARTAAEe4wD7NRwwAYAPAAI5xAMAA/O9CwABH1gAAAT4AQBzAAEgJFMAASAPAPs04CwBIAQABFsAASBMUwABIDMA+zUcMALfPwACObQDAAP0owABIA8AASB4AAMAAftQ9HMAASDSEwABILcA+v8eCjAEAAWrAAEg4YAPAAP3rwAFbkQDAAF1EPRzAAEhUhMAASE3APr/HgpQBAAFqwABIWmADwAD968ABW5YAwABdQz0cwABIgYXAAEh0wD7AzMAARhsBAAE0wABIlQPAAEiVwABJswAAAAICAsAASJoAAAAnYAPAAPwFAMAASK8AAACo8GADwAB1sAAAYAPAAP0OAT4DTsAASNfAAEjcAAASYAPAAKWSAR7AAEjiwAClmgEAAYTAAEkHwD6/xwA9HMAASSUWwABJFi7AAFauwAB954C/AgACFsAASSsUwABJJsA+0F4NAIPuwACllRzAAElLFsAAST0uom/AAH3iwABMJQMCYAPAAI56YAPAAKWSAxTAAElbwD7QNAsAFMAASWLAPtBDDAAUwABJcMA+0F4NAADAAI6qAMAA/O9AHMAASYoUwABJhMA+0DQLAEgBAAEWwABJmhTAAEmNwD7QQwwAwABES8AAjnwAwAD9KMAASYTAAEmrAADAAH7VPRzAAEnBhMAASbrAPr/HgowBAAFqwABJxWADwAD968ABW5YAwABdRD0cwABJ54TAAEngwD6/x4KUAQABasAASe1gA8AA/evAAVubAMAAXUM9HMAAShcWwABKBS7AAFaxwAB9v8AAfdmApQEAARzAAEolhMAASh7APr/Hs9wBAmADwACOa10DwAD8qQFgA8AAjnEBNMAASjwDwABKPMAASnoAAAABAQHAAEpKAAAAgmZgA7zTAABdA8AA/KkBYAPAAI5xAUrAAEpVARzAAEpchMAASlXAPr/HrzYAAWADwACOcQAAwABdegDAAF17AMAA/PY9HMAASomEwABKgsA+v8eCjAEAAWrAAEqNYAPAAP3rwAFbmwDAAF1EPRzAAEqthMAASqbAPr/HgowBAAFqwABKsWADwAD968ABW2wAwABdRAMIAcAAfc6AAMA+v5gIAcAAfc+BAMA+v6MJAbc4wAD9ZwAAAAB0BsAAfe+BWMAAS9HAAEvVwABOQQAAt80AAAABA8AAS/PAAE5BAAAAAAAAAGADwAD8BQE+CE7AAEwAwABMBwAAYWADwAD8BQEWwABMERbAAEwJLoSOwAB94WHAAI6URcAATB0BwABMJsAATDIAALfPYAPAAPwFAZMBHMAATEOBwABMN8A+0w9jAQABgMAATEXAPtLhAMAA/TIBicAATE3APtMPHMAATFiBwABMTcA+0w9kAQABlADAAP0qQT4ETsAATHHAAEx4AACCZmADvNMBHMAATIIWwABMei6EjsAAfeG30AEAAYHAAEyMwD7TDwDAAI6QScAATKAcwABMq4LAAEykwD7TakgBAAErAMAA/V5CwABMtAA/ScAATMQlwABMz4LAAEzIwD7TamADwAB1Gz4BPRzAAEz0LsAATzcBAAEmwABNKgEWwABNKhbAAE0f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W+HAPuQnAwFgA8AAjmUAwACOo0AhHMAAXAGEwABb/MA+5WNIAQABKwDAAP1ewABb/MAAXAgBJMAAXCsEJ8AAVtkUwABcGMA+5CcDAWADwACOZSeBni5KwABcNgEWwABcTRbAAFxChMAAXD3APuVjwABMS8AApKKEW8AAcoRJwABcZCIlwABccoPAAFxowD7kJ2ADwACOawAcwABcphbAAFyaFMAAXJDAPuQnAwFgA8AAjmu3z8AAjm1jAQABFsAAXLAWwABcqC6EjsAAfeFhwACOlADAAP0yPgNOwABczsAAXNMAABJgA8AApNQBHMAAXN0WwABc1S6EjsAAfeHAAEw7AQABFMAAXOXAPuQnAwFgA8AAjmsAwACOo0AhHMAAXQWEwABdAMA+5mtIAQABKwDAAP1ewABdAMAAXQwBJMAAXS8EJ8AAVtkUwABdHMA+5CcDAWADwACOayeBni5KwABdOgEWwABdURbAAF1GhMAAXUHAPuZrwABMS8AApNaEW8AAclJJwABdaCXAAF12g8AAXWzAPuQnYAPAAGtiPgFKwABdiwEcwABdki63ygIAAhbAAF2qFMAAXaDAPuQnAwFgA8AAa2KzncAAa2WBwABducA+4+YAwAB98T9KwABd2AErTsAAXfvAAF4GAACWrWADtcUBHMAAXhWCwABeCMA+5AEgAQABgMAAXhbAPuPYAAA9IxzAAF4xg8AAXibAPud0SAEAASsAtc2LwABeJsA+53QcwABeQoLAAF41wD7kASABAAGBwABeQ8A+4+YAACsBYAO1xUrAAF5YAYPAAF5fwD7ndAbAAH3ygVjAAF5ywABegMAAXz8AALJbAAAAAQPAAF6NwABfPwAAAAEBAcAAXpIAAACArGADwAD+bAAAYAO8sgE+A07AAF6pwABetAAAwABW2mADwACkHwEcwABewRbAAF62Lre6wAB93rJbAQABgMAAXs/APugfAMAApBtJwABe2RzAAF7ogcAAXt3APug4SAEAASsAwAD9XkrAAF7xASs/SsAAXwIBHMAAXwkuwABW1wIAAhbAAF8ngcAAXxzAPug4hEPAAKQigcAAXzDAPug4AMAAfksGwAB99IFYwABfRMAAX0vAAF/7AADAAFbbwAB9vwAAAAEDwABfWsAAX/sAAAABAQHAAF9qAAAAhENgA8AAjl8AAGADwAD96wE+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AKS4SAEAASsAwAD9Xj4DPRzAAGz2LsAAVuTAAH2/AgACgMAAbQzAPvaiFMAAbRHAPvawAQFgA8AApKwAwAB9907AAG0owABtLQAAg+5gA4MZARbAAG00FMAAbS/APvawAQFgA8AApKyZysAApK9JwABtQBzAAG1TFsAAbUmCwABtRMA+92WE2oMpSAEAASsAiW8+Az0XwABtaxTAAG1mwD72sAEBYAPAAKSswABWZR7AAG2AwAClqgEAARbAAG2eFMAAbZnAPvawAQFgA8AApKyEwsAApLMAwACkuD0XwABtthTAAG2xwD72sAEBYAPAAKSshO8qwACksT0XwABt3xTAAG3awD72sAEBYAPAAKSsnn1qwABt7F0DwAD8qQFgA8AAYo3AAVV6wACktz4LT8AAbhzAAG4qAAABwABRTWEDAWADiWRgA8AAYo0AA8AAbjrAAG9mAAAAAQEBwABuSAAAAIPuYAOJZAAAYAPAAGKNAT4FTsAAbmjAAG5yAACE2mADwABijQEcwABugxbAAG50LsAAVqjAAH2/wAB904T8AQABhMAAbpLAPviAAMAApqlOwABusMAAbrsAAITsYAPAAI5lASbAAG6wARbAAG7HhcAAbr3APviZlibAAGKPYAPAAI5lTsAAbuXAAG7vAADAAFbnYAPAAKScARzAAG75FsAAbvEuhIPAAH3gwABMOwEAAYbAAG8BwD741wDAAI6jPRzAAG8YLsAAVuPAAH2/AgAChsAAbyrAPvjXh8AAbzbAPvkLAMAAffhKwABvTAGFwABvU8A++JlOwABvfwAAAITaYAPAAGKNAE7AAG+twABvuQAAwABW6F0DkxgBYAPAAGKNAR/AAG/Lk2wAAWADwABijQAAScAAb/EWwABv+oLAAG/1wD73ZYTlgzk+AkbAAHIgwAByXsAAcjIAAACtrGADiWQAHMAAckWCwAByQMA+92WE5gAAAACDUT4BPRzAAHJ4hcAAcmzAPvmQhCIBAAEcwABykIPAAHKAwD74WCABAAGGwABykcA++d0AAACTIz2MwABy3sA++X8WwABy+hbAAHLqLrQEwAB9v8AAfdGGELn6PgE9jMAAcyHAPvl/HMAAcz2DwABzLcA++FggAQABFsAAc0OCwABzPsA+92WE2oMpAABJwABzYRzAAHNvhMAAc2XAPvl/SAEAARbAAHOC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4MAATDsBAAGAwACjbsA/J/oAwACOoz0cwACjeC7AAFbjwAB9vwIAAoDAAKOKwD8n+oHAAKOPwD8oOgDAAH34SsAAo5oBFsAAo7UWwACjpoHAAKOhwD8oOsAAVmXAAKSowABXDMAApbUGwAB+MYFYwACjxsAAo+rAAKSWAADAAEZwAWrAAKPHYAPAAP1RAgAAAQPAAKP3wACklgAAAAEBAcAApAUAAACZymADwACOZQAAXQPAAPxnAWADwABijQE+BEAcwACkFy7AAFbcAQABgMAApCPAPyj8AMAAfknAAKQXwACkJwBOwACkOcAApD4AABJgA8AApJwBHMAApEgWwACkQC6Eg8AAfeDAAEw7AQABgMAApFDAPyj8AMAAjqM9HMAApFouwABW48AAfb8CAAKAwACkbMA/KPyBwACkccA/KUMAwAB9+ErAAKR8ARbAAKSIgcAApIPAPylDnn3AAKSnBsAAfjKBWMAApJvAAKSswAClPAAAwABXDQAAAAEDwACkx8AApTwAAAABAQHAAKTgAAAIgmZgA8AAjmsAAGADwAByTgE+AkAcwACk9S7AAFbcAQABgMAApQHAPynqAMAAfknAAKT1wAClCABKwAClDwEWwAClLhzAAKUeFsAApRYuhI7AAH3hwABMOwEAAYDAAKUmwD8p6gDAAI6jwABMS8AApNYGwAB+M4FYwAClQcAApVHAAKXWAADAAFcOAAAAAQPAAKVrwACl1gAAAAEBAcAApYMAAAiZymADwACOZQAAYAPAAHKAAT4CQBzAAKWVLsAAVtwBAAGAwAClocA/Ko4AwAB+ScAApZXAAKWlAErAAKWsARbAAKXIHMAApbsWwAClsy6Eg8AAfeDAAEw7AQABgMAApcPAPyqOAMAAjqPAAExLwACkogbAAH40gVjAAKXbwACl9MAApqoAAMAATzEBasAApdxgA8AA/VECAAABA8AApf3AAKaqAAAAAQEBwACmEwAAAIPuYAOCwAAAYAO8twE+A07AAKYqwACmMgAAhENgA4KLASbAAKYqARbAAKY5gMAApjTAPys+hFKCWGADgotOwACmUsAAplcAABJgA8AApDIBHMAApmMWwACmWS6G2cAAfd/AAEw7AQABJsAApmsBHMAApmsuwABW1wEAAYHAAKZ+wD8rVQDAAH5LYAPAAI5fAMAAjqNKwACmjQEcwACmoBbAAKaZgsAAppTAPyuDmXfAAKQ2SwEAAYDAAKahwD8rPgDAAPzuBsAAfmOBWMAApq/AAKbGwACnmwEAhswAAAABA8AAptbAAKebAAAAAAAAAGADm1EBPgJJwACm3BzAAKbxFsAApuAuwABWqsAAfb/AAH3WSAEAASsAwAD9Xj4BPSMcwACnExbAAKcCLsAAVqrAAH2/wAB91kgBAAErAMAA/V4XwACnAi7AAFaqwAB9vx7AAKcbm1oCAAIfwACnPZzHAQABFsAAp1UWwACnSi63usAAfd63u8AApBcAFsAAp2Uuq2jAAH5kAMAAfdYrAWADm1E/SsAAp4ABFsAAp4cuwABWqsAAfb/AAH3WBsAAfmSBWMAAp6DAAKe2wACoWQEAq2gAAAABA8AAp8XAAKhZAAAAAAAAAGADm6MBPgJJwACnyxzAAKffFsAAp88uwABWq8AAfb/AAH3XSAEAASsAwAD9Xj4BPSMcwACoABbAAKfwLsAAVqvAAH2/wAB910gBAAErAMAA/V4XwACn8C7AAFarwAB9vx7AAKgIm6UBAAEWwACoJRbAAKgaLre6wAB93re7wACkFwDAAH3XKwFgA5ujP0rAAKg/ARbAAKhGLsAAVqvAAH2/wAB91wbAAH41gVjAAKhewACofcAArY4AAMAATzoBasAAqF9gA8AA/VECAAABA8AAqJLAAK2OAAAAAQEBwACooAAAAIJmYAO80wAAYAPAAJ6/AT4GTsAAqL/AAKjQAADAAFcPYAPAAHJOARbAAKjqHMAAqNoWwACo0i6EjsAAfeHAAEw7AQABJsAAqOIBgMAAqOLAPy35YAPAAI5rAMAAjqPAAExLwACk1k7AAKkKAAAAwABXEGADwACcWABOwACpMgAAAITCYAOI8wBBR8AAqUAWwACpWYHAAKlIwD8uEoJnwAByUAMDwACpd2rAAKl3YAPAAHI9wAFIzcAAqZZqwACplmADwAByPcABSObAAKm5asAAqblgA8AAcj3AAUj/AD4ETsAAqdzAAKnhAACD7mADg14BJsAAqdwBFsAAqfSBwACp48A/LhKD7sAAclFgA4NePYvAAKoCwD8uejUAAAABAGADgxkBFsAAqhKEwACqDcA/LuGE/4NmIxzAAKoihQDAPy8bSAEAASsAACsWwACqIoUAwD8vG4TCg0gBYAOI8z2KwACqNMA/LmcWwACqYBzAAKpQFsAAqkguhI7AAH3hwABMOwEAASbAAKpYAYDAAKpYwD8t+WADwACOawDAAI6jwABWc8AApNhCwACqdQABwACqkmrAAKqSYAPAAHI9wAFJGAA+A07AAKqzwACquAAAg+5gA4JSASbAAKqzARbAAKrLgcAAqrrAPy4Sg+7AAHJRYAOCUkFDwACq2SEcwACq5YTAAKrgwD8vxkgBAAErAMAA/V4+AknAAKr6JcAAqwOEwACq/sA/L8ZgA4NePgROwACrKcAAqzAAAIJmYAODXgEUwACrMsA/L8YEAWADg149i8AAq0TAPy56NQAAAAEAYAODGQEWwACrVoXAAKtPwD8wMIT/g2YjHMAAq2aGAMA/MFtIAQABKwAAKxbAAKtmhgDAPzBbhMKDSAFgA4jzPYrAAKt8wD8uZxbAAKuzHMAAq5gWwACrkC6EjsAAfeHAAEw7AQABJsAAq6ABHMAAq6AunBMBAAGFwACrqsA/MDAAwAB+HWADwACOawDAAI6jwABWc8AApNhCwACrzAE/PYzAAKvpwD8vxhbAAKv1hMAAq/DAPy/GhFKCWELAAKwPAAPAAKwsasAArCxgA8AAcj3AAUkxwACsUGrAAKxQYAPAAHI9wAFJS8AArHFqwACscWADwAByPcABSWUAPgI9isAArIjAPy5nasAArKJgA8AAnFjAAVvAQsAArL0AQCEcwACs6ILAAKzWwD8uZ0gBAAErAMAA/V7AAKzWwACs7wEkwACtFgMnwABXEYDAAK0OwD8t+SeBakrAAK0dAR/AAK0owACl8wMAAxbAAK05LobMwAB+Y4LAAK1KwD8uZx7AAK1pwACO9gEAAYPAAK2AwD8uegAABsAAfjaBWMAArZPAAK2kwACuGQAAmRwBasAArZRgA8AA/VECAAABA8AAravAAK4ZAAAAAQEBwACttAAAAIC9YAOIgwAAYAPAAGh9AT4BSsAArcABHsAArcvAAGh/AgACFsAArd6AwACt2cA/MiuAvYiGIxbAAK3pgMAAreTAPzIrhl2IihzAAK31LpwRAQABFsAArgWAwACuAMA/MiuEQ4iJAMAAfhgrAWADvLIABsAAfjeBWMAArh7AAK44wACvYAAAwABPKQFqwACuH2ADwAD9UQIAAAEDwACuSMAAr2AAAAABAQHAAK5WAAAAW2ADhXgAAGADwABorgE+A07AAK5rwACueQAAuxpgA8AA/AUBHMAArpcWwACukBbAAK6FgMAArnvAPzLbhZOFe2HAAPzYZAEAARbAAK6pFsAArqOAwACumcA/MtuFXYV8YcAA/NgAwAD9Kk7AAK7CwACu0QAAqk1dA8AA/KkBYAPAAP3rARzAAK72HMAAruMWwACu3YDAAK7TwD8y24VdhXyAqwEBYAPAAP3rATTAAK7nA8AArufAAK70AAAAAQEBwACu6AAAAINNYAOFhgAAYAPAAP3rAUrAAK7uARbAAK7wgsAAru7APzOigL2FiADAAPxygK0AAAAAwAD8fUrAAK8EAR7AAK8PwABoxAMAA4HAAK8mwD8y84LAAK81wD8zTRbAAK9VFsAAr0+AwACvRcA/MtuFbYV6YcAA/NgABsAAfjiBWMAAr2XAAK96wACy5gAAwABPKgFqwACvZmADwAD9UQIAAAEDwACvhcAAsuYAAAABAQHAAK+UAAAAg+5gA4SuAABgA8AAS2QBPgdJwACwQiXAALBLgMAAsEbAPzRYYAOE2T4BSsAAsGYBHMAAsG0uwABXEgEAARbAALCEFMAAsH/APzRYAAFgA4TZgL2E3ADAAH46P0nAALCVJcAAsJ6AwACwmcA/NFhgA4T+PgFKwACwvwEcwACwxi7AAFcSAQABFsAAsOQWwACw3RTAALDYwD80WAABYAOE/oJFhQOAvYNiAMAAfjo/ScAAsPUlwACw/oDAALD5wD80WGADhTQ+AUrAALEeARzAALElLsAAVxIBAAEWwACxPBTAALE3wD80WAABYAOFNIC9hTYAwAB+Oj9JwACxTSXAALFWgMAAsVHAPzRYYAOE6z4BSsAAsXEBHMAAsXguwABXEwEAARbAALGPFMAAsYrAPzRYAAFgA4TrgL2E7gDAAH47P0nAALGgJcAAsamAwACxpMA/NFhgA4VFPgFKwACxyQEcwACx0C7AAFcTAQABFsAAsecUwACx4sA/NFgAAWADhUWAvYVHAMAAfjs/ScAAsfglwACyAYDAALH8wD80WGADhZA+AUrAALIlARzAALIsLsAAVxQBAAEUwACyQsA/NFgAAWADhZAAwAB+OT89MMAAslMewACyWbXDAgACasAAsmtgA7XVwADFQyQAAifAAFcVgMAAstvAPzRYAAbAAH45gVjAALLrwACy9MAAtPkAAMAAVxQAAAABA8AAswnAALT5AAAAAQEBwACzIgAAAKFDYAOFkAAAYAPAAEtkAT4FTsAAsznAALM+AACAvWADwABofQEcwACzQC6ZHAEAARbAALNTgMAAs0jAPzaHgL2FkwDAAH42TsAAs2sAAACCZ2ADwABLUwBJwACzdR7AALOCwABLfwEAARbAALOWgcAAs5HAPzaggbDAAGiBAD4BScAAs6UiHMAAs66BwACzqcA/NqBIAQABasAAs7dgA8AAaH3AAO8WAMAA/V4BHMAAs8qBwACzxcA/NqBIAQABasAAs9NgA8AAaH3AAO8qAMAA/V4+AT2KwACz7cA/NtZqwAC0AWADwABLU8AA+f8+AT2KwAC0H8A/NtZqwAC0M2ADwABLU8AA+ek+AT2KwAC0WMA/NtZqwAC0bGADwABLU8AA+dVOwAC0i8AAtJkAALSuYAPAAGiuARzAALSbLsAATykBAAEWwAC0t4DAALSswD82h1uFkgDAAH43SsAAtMcBHsAAtNLAAEuMAwADgsAAtNvAPzbWgcAAtOHAPzagg8AAtOfAPzezAAbAAH46gVjAALT+wAC1B8AAtbkAAMAAVxIAAAABA8AAtRjAALW5AAAAAQEBwAC1IQAAAMAAVxZgA4iDAABgA8AAS2QBPgJOwAC1NMAAtTkAAIC9YAPAAGh9AR7AALU/wABofwIAAhbAALVUgMAAtU3APzhDgL2IhiMWwAC1YYDAALVawD84Q4ZdiIocwAC1bS6cEQEAARbAALV/gMAAtXjAPzhDhEOIiQDAAH4YKwFgA7yyAErAALWVAR7AALWgwABLjgEAAYHAALWwwD84XgAGwAB+O4FYwAC1vsAAtcfAALZ5AADAAFcTAAAAAQPAALXYwAC2eQAAAAEBAcAAteEAAADAAFcWYAOIgwAAYAPAAEtkAT4CTsAAtfTAALX5AACAvWADwABofQEewAC1/8AAaH8CAAIWwAC2FIDAALYNwD85E4C9iIYjFsAAtiGAwAC2GsA/OROGXYiKHMAAti0unBEBAAEWwAC2P4DAALY4wD85E4RDiIkAwAB+GCsBYAO8sgBKwAC2VQEewAC2YMAAS48BAAGBwAC2cMA/OS4ABsAAfjyBWMAAtzDAALc7wAC4CgAAwABXFwAAAAEDwAC3RcAAuAoAAAABAAABwAC3TAAAAMAAVxhgA8AA+j8BasAAt1pgA8AA+j93XgMAAQIBYAPAAP3rAZ1QYAPAAPo/AVcDwABmoQBbAT4BSsAAt2cBI4DAALduwD855DUAAAABAF4DAAECAWADwAD96wGdUGADwAD6PwFXA8AAZqEAWwEWwAC3hi7AAFa0wAB9v8AAfdwjHMAAt5uBAMA/OjRIAQABKwDAAP1eF8AAt4YuwABWtMAAfb8cwAC3ny7AAFcZwAB9vwEAAAHAAFcYKcAAfgfAAH3cgQDAPzo0AV4DAAECAWADwAD96wGdUGADwAD6PwFXA8AAZqEAWzUAAAABAF4DAAECAWADwAD96wGdUGADwAD6PwFXA8AAZqEAWwEWwAC3yy7AAFa1wAB9v8AAfd0jHMAAt+GBAMA/OtNIAQABKwDAAP1eF8AAt8suwABWtcAAfb8cwAC35S7AAFcZwAB9vwEAAAHAAFcYKsAAfgfAAH3dgQDAPzrTAV4DAAECAWADwAD96wGdUGADwAD6PwFXA8AAZqEAWwFeAwABAgFgA8AA/esBnVBgA8AA+j8BVwPAAGahAFsGwAB+B4FYwAC4V8AAuGLAAMELAADAAFcZwAB9vwAAAAEDwAC4bcAAwQsAAAABAAABwAC4dAAAAMAAVxhgA8AA+j8BasAAuIJgA8AA+j93XgMAAQIBYAPAAP3rAZ1QYAPAAPo/AVcDwABmoQBbAT4ETsAAuJQAAADAAFcaYAPAAPo/AE/AALivwAC4tAAAAcAAVxthAwBgA8AA+j8AA8AAuMPAALnOAAAAAAAAAGADwAD6PwE+Ak7AALjSwAC42gAAwABXHGADwAD+bAEWwAC4+xbAALjvFsAAuNwupPjAAH5esvbAAH5upSu8tErAALlIASIcwAC5XBbAALlXg8AAuU/APzxHTsAA/neDFwEAASfAAExsAMAA/ggBHMAAuaAWwAC5m4PAALmTwD88R07AAP53gxcBAAEnwABMbQDAAP4IT8AAudXAALneAAABlvxeAwABAgFgA8AA/esBnVBgA8AA+j8AYAPAAGJmAAPAALnkwADA8wAAAAIBAcAAuewAAADAAEB6YAPAAP3rAAHAALn8AAAAnVBgA8AA+j8BagBgA8AA/Q55YAPAAGJmAT4WT8AAug/AALoYAAABwABXHWEDAWADvLJgA8AAYmYAA8AAuiXAALu8AAAAAQEBwAC6NAAAAIRDYAO8sgAAYAPAAGJmAT4CScAAukchHMAAulOHwAC6S8A/PW5IAQABKwDAAP1ePgJOwAC6dMAAungAAJnKYAO8wQEcwAC6jRbAALp6LqT4wAB+XrJlAgACh8AAupnAPz1uhMAAuqLAPz0MAMAAfpBJwAC6tyEcwAC6vxTAALq7wD89pwgASAEAASsAwAD9Xj4BSsAAuwsBI4DAALsSwD87wRzAALtEFsAAuzEupPjAAH5er1oBAAEUwAC7T8A/PacIAADAAH50HMAAu3kWwAC7Zi6k+MAAfl6y/wEAARTAALuFwD89pwgAAMAAfnMBYAPAAGKNPz9KwAC7qQErT8AAu8XAALvOAAABwABXHmEDAWADwAD+bGADwABiZgADwAC71MAAvCsAAAABAQHAALvZAAAAgKxgA8AA/mwAAGADwABiZgE+AUrAALvoARzAALv8hsAAu+/APz1GIAEAARzAALwQFsAAu/0upPjAAH5eslsBAAEUwAC8HsA/PqIIAADAAH6SAABOwAC86wAAAIKQYAPAAGJmAEnAALz3NQAAAAEAYAPAAPo/AYHAALz7wD88ASMcwAC9ERQAwD8/EwkASAEAASsAwAD9XonAALz7wD88ARzAAL0kgsAAvRXAPzwYIAAAAAAAFADAPz8TCQABYAPAAPo/PgE9IxzAAL03FMAAvTLAPz79CABIAQABKwDAAP1eFcAAvTLAPz79CBzAAL1IhsAAvTvAPz1GIAEAARbAAL1cFsAAvUkupPjAAH5esvbAAH5uAAArAWADwABiZj89IxzAAL19FMAAvXjAPz79CABIAQABKwDAAP1eFcAAvXjAPz79CBzAAL2Hh8AAvYHAPz54IAEAARrAAL2NuCsAACsBYAPAAGJmPSMcwAC9pBTAAL2fwD8+/QgASAEAASsAwAD9XhXAAL2fwD8+/QgcwAC9rofAAL2owD8+eCABAAEawAC9tLg5AAArAWADwABiZj0jHMAAvdEUwAC9zMA/Pv0IAEgBAAErAMAA/V4VwAC9zMA/Pv0IHMAAvduHwAC91cA/PnggAQABGsAAveG4OwAAKwFgA8AAYmY9IxzAAL4BFMAAvfzAPz79CABIAQABKwDAAP1eFcAAvfzAPz79CBzAAL4Lh8AAvgXAPz54IAEAARrAAL4RuDMAACsBYAPAAGJmPSMcwAC+NhTAAL4xwD8+/QgASAEAASsAwAD9XhXAAL4xwD8+/QgcwAC+QIfAAL46wD8+eCABAAEawAC+RrgqAAArAWADwABiZj0jHMAAvmMUwAC+XsA/Pv0IAEgBAAErAMAA/V4VwAC+XsA/Pv0IHMAAvm2HwAC+Z8A/PnggAQABGsAAvnO4MAAAKwFgA8AAYmY9IxzAAL6KFMAAvoXAPz79CABIAQABKwDAAP1eFcAAvoXAPz79CBzAAL6Uh8AAvo7APz54IAEAARrAAL6auCwAACsBYAPAAGJmPSMcwAC+sRTAAL6swD8+/QgASAEAASsAwAD9XhXAAL6swD8+/QgcwAC+u4fAAL61wD8+eCABAAEawAC+wbgtAAArAWADwABiZj0jHMAAvt8UwAC+2sA/Pv0IAEgBAAErAMAA/V4VwAC+2sA/Pv0IHMAAvumHwAC+48A/PnggAQABGsAAvu+4NQAAKwFgA8AAYmY9IxzAAL8FFMAAvwDAPz79CABIAQABKwDAAP1eFcAAvwDAPz79CBzAAL8Ph8AAvwnAPz54IAEAARrAAL8VuDYAACsBYAPAAGJmPSMcwAC/MRTAAL8swD8+/QgASAEAASsAwAD9XhXAAL8swD8+/QgcwAC/O4fAAL81wD8+eCABAAEawAC/Qbg3AAArAWADwABiZj0jHMAAv1oUwAC/VcA/Pv0IAEgBAAErAMAA/V4VwAC/VcA/Pv0IHMAAv2SHwAC/XsA/PnggAQABGsAAv2q4OAAAKwFgA8AAYmY9IxzAAL+EFMAAv3/APz79CABIAQABKwDAAP1eFcAAv3/APz79CBzAAL+Oh8AAv4jAPz54IAEAARrAAL+UuC4AACsBYAPAAGJmPSMcwAC/sRTAAL+swD8+/QgASAEAASsAwAD9XhXAAL+swD8+/QgcwAC/u4fAAL+1wD8+eCABAAEawAC/wbg0AAArAWADwABiZj0jHMAAv94UwAC/2cA/Pv0IAEgBAAErAMAA/V4VwAC/2cA/Pv0IHMAAv+iHwAC/4sA/PnggAQABGsAAv+64OgAAKwFgA8AAYmY9IxzAAMAFFMAAwADAPz79CABIAQABKwDAAP1eFcAAwADAPz79CBzAAMAPh8AAwAnAPz54IAEAARrAAMAVuDEAACsBYAPAAGJmScAAwCoiHMAAwDMUwADALsA/Pv0IAEgBAAErAMAA/V4AhcAAwD7APz0fPgE9HMAAwFsWwADAUi6kzcAAfc+u2wMAA2rAAMBuYAO11cAAxUNqwADAoWADpOrAAMUvMsAAwKpbWwEngbAkwADA0AMnksiEwADAu8A/PQwnlM0Atas/SsAAwOIBFMAAwOnAPz79CABKwADA+gGDwADBAcA/PNcGwAB+CIFYwADBEMAAwRfAAMGaAADAAFcfwAB9vwAAAAEDwADBKcAAwZoAAAACAgLAAME+AAAAg+5gA4W9AMAAwUgAAAAnYAPAAPwFAABgA8AA/esBPgFKwADBVQEmwADBVQEcwADBfRzAAMF1FsAAwWsWwADBYYDAAMFcwD9FKVuFwIWThXtLAQABgcAAwXbAP0U3AMAA/LiETQEAAR/AAMGIwACmdAAAAAAAhLJgA8AA/esGwAB+PYFYwADB08AAwe7AAMW4AADAAE8uAWrAAMHUYAPAAP1RAgAAAQPAAMIIwADFuAAAAAEBAcAAwh0AAACD7mADhb0AAGADwABmywE+BknAAMIpIhzAAMJOFsAAwkcWwADCPBbAAMIygMAAwi3AP0XlW4XAhZOFe2HAAPzYYwEAAZUAwAD9MgEWwADCchbAAMJsFsAAwmKAwADCXcA/ReVbhcCFXYV8g7LAAPyMPgI9HMAAwo8WwADChi6kzcAAfc+u2wIAAmrAAMKtYAO11cAAxUNqwADC1GADpOrAAMsZALWrSsAAwvIBH8AAwv3AAGbsAAAAAD9OwADDIMAAwysAAMAASfRgA8AA/esBHMAAwy0uwABXH8AAfb8CAAKAwADDQMA/ReWTAMAAfghJwADDThzAAMNdgcAAw1LAP0anSAEAASsAwAD9+j4CPRzAAMN3FsAAw24upM3AAH3PrtsCAAJqwADDlWADtdXAAMVDasAAw7xgA6TqwADLKwC1q0rAAMPgAR/AAMPrwABm7AAAAAA/TsAAxA/AAMQaAADAAEolYAPAAP3rARzAAMQcLsAAVx/AAH2/AgACgMAAxC/AP0XllADAAH4IScAAxD0cwADETILAAMRBwD9HREgBAAErAMAA/fo+Aj0cwADEZhbAAMRdLqTNwAB9z67bAgACasAAxIRgA7XVwADFQ2rAAMSrYAOk6sAAyz0AtatKwADE0AEfwADE28AAZuwAAAAAP0rAAMT4AR7AAMUOwABm6AYABoHAAMUgwD9Gp4LAAMU0wD9HRBzAAMVILsAAVxcBAAABwABXGCnAAH48asAAxXBgA7XVwADFQxbAAMWTLqTNwAB9zxbAAMWlLrNAwAB+XwAGwAB+PoFYwADF8cAAxgzAAMleAADAAE8vAWrAAMXyYAPAAP1RAgAAAQPAAMYtwADJXgAAAAEBAcAAxkIAAACD7mADhb0AAGADwABmywE+BUnAAMZOHMAAxnMWwADGbBbAAMZhFsAAxleAwADGUsA/SHlbhcCFk4V7YcAA/NhjAQABlADAAP0yPgI9HMAAxokWwADGgC6kzcAAfc+lYgIAAmrAAMaiYAO11cAAxUMnwABXIAC1qUrAAMbqAR/AAMb1wABm7AAAAAA/ScAAxxEcwADHNhbAAMcvFsAAxyQWwADHGoDAAMcVwD9IeVuFwIWThXthwAD82GMBAAGVAMAA/TI+Aj0cwADHTBbAAMdDLqTNwAB9z6ViAgACasAAx2VgA7XVwADFQyfAAFchALWpSsAAx6YBH8AAx7HAAGbsAAAAAD9OwADH1MAAx98AAMAASfRgA8AA/esBHMAAx+EuwABXH8AAfb8CAAKAwADH9MA/SHmTAMAAfghJwADIAhzAAMgRgcAAyAbAP0mGSAEAASsAwAD9+j4CPRzAAMgrFsAAyCIupM3AAH3PpWICAAJqwADIRGADtdXAAMVDJ8AAVyIAtalKwADIhAEfwADIj8AAZuwAAAAAP0rAAMirAR7AAMjBwABm6QUABYHAAMjawD9JhhzAAMjuLsAAVxcBAAABwABXGCnAAH48asAAyRZgA7XVwADFQxbAAMk5LqTNwAB9zxbAAMlLLrNAwAB+XwAGwAB+P4FYwADJl8AAybLAAM4gAADAAE8wAWrAAMmYYAPAAP1RAgAAAQPAAMnawADOIAAAAAEBAcAAyfYAAACD7mADhb0AAGADwABmywE+BknAAMoCHMAAyicWwADKIBbAAMoVFsAAyguAwADKBsA/SqpbhcCFk4V7YcAA/NhjAQABlADAAP0yPgI9HMAAyj0WwADKNC6kzcAAfc+lYgIAAmrAAMpLYAO11cAAxUMnwABXIwC1qUrAAMqlAR/AAMqwwABm7AAAAAA/ScAAyswcwADK8RbAAMrqFsAAyt8WwADK1YDAAMrQwD9KqluFwIWThXthwAD82GMBAAGVAMAA/TI+Aj0cwADLBxbAAMr+LqTNwAB9z6ViAgACasAAyyBgA7XVwADFQyfAAFckALWpSsAAy2kBH8AAy3TAAGbsAAAAAD9JwADLkCIcwADLtRbAAMuuFsAAy6MWwADLmYDAAMuUwD9KqluFwIWThXthwAD82ICXAQABlQDAAP00ARbAAMvZFsAAy9MWwADLyYDAAMvEwD9KqluFwIVdhXyDssAA/Iw+Aj0cwADL9hbAAMvtLqTNwAB9z6ViAgACasAAzARgA7XVwADFQyfAAFclALWpSsAAzGEBH8AAzGzAAGbsAAAAAD9OwADMj8AAzJoAAMAASfRgA8AA/esBHMAAzJwuwABXH8AAfb8CAAKAwADMr8A/SqqTAMAAfghJwADMvRzAAMzMgcAAzMHAP0xZSAEAASsAwAD9+j4CPRzAAMzmFsAAzN0upM3AAH3PpWICAAJqwADM/2ADtdXAAMVDJ8AAVyIAtalKwADNPwEfwADNSsAAZuwAAAAAP0rAAM1mAR7AAM18wABm6gUABYHAAM2cwD9MWRzAAM2wLsAAVxcBAAABwABXGCnAAH48asAAzdhgA7XVwADFQxbAAM37LqTNwAB9zxbAAM4NLrNAwAB+XwAGwAB+QIFYwADOJcAAzj/AANIhAADAAE0VAWrAAM4mYAPAAP1RAgAAAQPAAM5PwADSIQAAAAMBAcAAzl4AAACD7mADhK4AAsAAznAAAADAAE0WYAPAAPo/AWrAAM6BYAPAAPo/d8AAzowAAADAAE0XYAPAAPo/AWrAAM6aYAPAAPo/AGADwABg0gE+B0nAAM6oJcAAzrGAwADOrMA/TX1gA4cqPgFKwADO0wEcwADO7RbAAM7aLsAAVqzAAH2/wAB92IYHAQABFsAAzwAUwADO+8A/TX0AAWADhyqGBYcsAJmgP07AAM8pAAAAhgVgA8AATbIAScAAzzccwADPQIDAAM87wD9NfUgBAAErAMAA/V4+AknAAM9RIYLAAM9WwD9Nqj4BPTDAAM9uHsAAz3S1wwIAAmrAAM+KYAO11cAAxUMnwABXJgA/PYvAAM/TwD9OKR/AAM/iwABOHwAAAAA+AT2LwADQD8A/TikcwADQXh/AANAowACmoAIAAS4BwABNFoHAANBNwD9NjJqPAQABgMAA0GTAP019AMAApoBJwADQdRzAANCCg8AA0HnAP04pSAEAASsAwABNxz4CScAA0JOBwADQl8A/TYw+AT0wwADQsh/AANC8wAD7lwEAASTAANENAifAAFcnHsAA0PrAAKYjAQABgMAA0QbAP019AAA/SsAA0R4BKz9OwADRQ8AA0UkAAICWYAPAAGDSARzAANFLLsAAVvkDAAIewADRacAAnDcBAAGAwADRh8A/TX0Ag8AA0Y7AP04pAcAATRaBwADRscA/TYzAAH4oScAA0cciIRbAANHShMAA0czAP09QuNvAAGDUACGBwADR4cA/TYw+AUrAANH6ASs/SsAA0hEBhMAA0hjAP09QBsAAfkGBWMAA0mTAANJ4wADTlAAAwABXKAAAAAEDwADSg8AA05QAAAABAQHAANKYAAAAhGNdA8AA/KkBYAOErgAAXQPAAPypAWADwABg0gE+BEnAANKrFsAA0ruAwADSr8A/UAyBVcAA/ItKwADSxAFqwADSy10DwAD8qQFgA8AAYNLAAR+SP07AANL8wADTBQAAhttdA8AA/KkBYAPAAGDSATHAANMWYAPAAGDSAD0cwADTKoDAANMewD9QDIP4AQABNMAA0zIDwADTMsAA03oAAAABAQHAANNBAAAAg+5gA4SuAABgA8AA/Q4BPgE9HMAA01iBwADTT8A/UGlWAQABHMAA01wuwABNFQEAAYLAANNtwD9QtwDAAH5AAMAA/LoAwAD8d0rAANOBAYHAANOIwD9QaQbAAH5CgVjAANOZwADTtMAA1x8AAMAATf0BasAA05pgA8AA/VECAAABA8AA08jAANcfAAAAAQEBwADT1QAAAJnKYAO8wQAAYAO86AE+BEFDwADT4CEcwADT64DAANPnwD9RTkgBAAErAMAA/V4+Az2IwADT/MA/UU4cwADUFRbAANQCLqT4wAB+XrL5AQABgMAA1CPAP1FOAMAAfoZOwADUPMAA1EMAAIJmYAO80wEcwADUWBbAANRFLqT4wAB+XrJoAgACgMAA1HrAP1FOasAA1ItgA8AA/evAAO5pAMAAfoVJwADUoSIhHMAA1KyBwADUpcA/UbRIAQABKwDAAP1eACEWwADUv4HAANS4wD9RtIQavOA+AknAANTVFsAA1OCBwADU2cA/UbSywbzbPgJOwADVB8AA1RAAAIJqYAO86AEmwADVBwGBwADVEsA/UbRgA7zoScAA1SQcwADVWRbAANVEFsAA1TGCwADVKMA/Uke0oLzrhMC9E4FtAQABlADAAP01PgFKwADVbQGCwADVdMA/Ukc/P0LAANYGAD9OwADWLsAA1jcAAIJqYAO86AEmwADWLgEcwADWTBbAANY5LqT4wAB+XrJoAgACFsAA1nsWwADWbC6zQMAAfl+azLnaasAA1pRgA8AA/evAAO5pAMAAfoVgA7zoQCEcwADWuIHAANavwD9StkgBAAErAMAA/V7AANavwADWvwEewADWybXDAgACgMAA1tLAP1FOJMAA1wQDJ8AAVymAwADW/8A/UU4ngWoASsAA1wwBgcAA1xPAP1K2BsAAfkOBWMAA1yTAANc3wADXwQAAwABWygAAAAEDwADXScAA18EAAAADAwPAANdYAAAAtJ1gA7ytAMAA13AAAACAvWADwAD96wDAANd6AAAAJ2ADwAD8BQAAYAO8zQE+AUrAANeHAR/AANeSwAB1vAMAA4DAANegwD9TmYHAANexwD9Tp4LAANe3wD9TtwAGwAB+RIFYwADXxsAA19fAANiAAADAAFcqAAAAAQPAANfswADYgAAAAAICAsAA2AYAAACY22ADvQAAwADYJgAAALSgYAO9DwAAYAPAAHU0AT4BSsAA2EABH8AA2EvAAHVAAgACJsAA2FwBgMAA2FzAP1QoYAPAAHUOgcAA2GnAP1Q2AAbAAH5FgVjAANiFwADYlMAA2RgAAMAAVysAAAABA8AA2KfAANkYAAAAAgICwADYvgAAAIJqYAO86ADAANjRAAAAmtlgA8AAYmYAAGADwAB1TwE+AUrAANjkAR/AANjvwAB1XQIAAibAANj+AYDAANj+wD9Uq2ADwAB1B4HAANkIwD9UuQAGwAB+RoFYwADZHcAA2SLAANnDAACzFQAAAAEDwADZNsAA2cMAAAACAgLAANlLAAAAgmZgA7zTAMAA2VgAAACBpmEDAWADvOhcAABcAT4CQBzAANmALsAAVtwBAAGAwADZjMA/VS4AwAB+ScAA2YDAANmTAD01AAAAAQBdA8AA/KkBYAPAAI5xARzAANmrFsAA2ZouwABWscAAfb/AAH3ZSwEAAYDAANmswD9VLgDAAPzuIxzAANm1ggDAP1V6SAEAASsAACscwADZtYIAwD9VeoP4AQABgcAA2b3AP1U8AMAA/HcBXAbAAH5HgVjAANnIwADZ4sAA2kkAALffAWrAANnJYAPAAP1RAgAAAQPAANnzwADaSQAAAAEBAcAA2gEAAACCZmADvNMAAGADwABijQE+AUrAANoPARzAANouHMAA2h4WwADaFi6EjsAAfeHAAEw7AQABJsAA2iYBgMAA2ibAP1YgYAPAAI5rAMAAjqO33wEAAS4AwACk2gbAAH5IgVjAANpOwADacsAA2vIAAMAATzUBasAA2k9gA8AA/VECAAABA8AA2pXAANryAAAAAQEBwADaqgAAAIJmYAO80wAAYAPAAJ7GAT4BSsAA2rgBFsAA2tccwADaxxbAANq/LoSOwAB94cAATDsBAAEmwADazwGAwADaz8A/VrhgA8AAjmsAwACOo8AAVnnAAKTXBsAAfkmBWMAA2vfAANr8wADbzgAAwABW3AAAAAEDwADbB8AA284AAAABAQHAANsPAAAApCRgA7ytAABgA8AA+j8BPgJAHMAA2zckwADbNgGAwADbL8A/V0GB1gEAAWrAANtCYAPAAP3rwAD1MwDAAP39wADbLcAA21IBHsAA21y1wwIAAoDAANtlwD9XQSTAANu3BSfAAFcsgMAA243AP1dBJ8AAVy1qwADbpmADwAD968AA9TMngWoASsAA278BKQbAAH5KgVjAANvTwADb6cAA3NwAAMAATzYBasAA29RgA8AA/VECAAABA8AA2/XAANzcAAAAAgICwADcAwAAAIJmYAO80wDAANwTAAAAg+5gA4JLAABgA7XVAT4ETsAA3CoAAACWrWADtcUAScAA3DolwADcQ4HAANw+wD9YHGADglI+AT2KwADcW8A/WDMewADcaMAAnDcBAAEUwADchsA/WBwBAWADglIAPz0jHMAA3KKCwADcl8A/WDNIAQABKwC1zYrAANyXwD9YMxzAANymLrfKAgACgMAA3LTAP1gOKwDAAH3xKwFgA7XFSsAA3McBgsAA3M7AP1gzBsAAfmWBWMAA3OHAANz9wADdMwEAwABXLgAAAAEDwADdEcAA3TMAAAAAAAAAXQPAAPxnAWADvLIBPgFKwADdFwEWwADdKRbAAN0eLqQbwAB95CnAAPz9BsAAfkuBWMAA3TjAAN1GwADd/wAAwABW1wAAAAEDwADdWMAA3f8AAAACAQLAAN1kAAAAg+5gA4KLAMAA3XcAAACWe2ADwACkHwFqAGADwAD9DnkAYAO8sgE+A07AAN2RwADdmQAAhENgA7yyARzAAN2lFsAA3ZsupBvAAH3kSwEAAYDAAN2mwD9ZVADAAPzuQCEcwADdwILAAN24wD9ZhEgBAAErAMAA/V7AAN24wADdxwEkwADd5gInwABXL4DAAN3hwD9ZVErAAN3tAYLAAN30wD9ZhAbAAH5MgVjAAN4EwADeEMAA3rEAAMAAVuAAAAABA8AA3iDAAN6xAAAAAgECwADeKgAAAIPuYAODGQDAAN47AAAAlntgA8AApEoBagBgA8AA/Q55AGADvMEBPgNOwADeU8AA3lcAAJnKYAO8wQEcwADeYRbAAN5ZLrOQwAB95UsBAAGAwADeYsA/WioAwAD87kAhHMAA3niCwADedMA/WlpIAQABKwDAAP1ewADedMAA3n8BJMAA3pwCJ8AAVzCAwADel8A/WipKwADeowGCwADeqsA/WloGwAB+TYFYwADetsAA3sLAAN9YAADAAFbtAAAAAQPAAN7SwADfWAAAAAEBAcAA3twAAACD7mADg3wAAGADvOUBPgNOwADe9MAA3voAAISUYAO85QEcwADfBBbAAN78LrydwAB96ksBAAGAwADfBcA/WwAAwAD87kAhHMAA3x2BwADfF8A/WxdIAQABKwDAAP1ewADfF8AA3yQBJMAA30ECJ8AAVzGAwADfPMA/WwBKwADfSAGBwADfT8A/WxcGwAB+ToFYwADfXcAA32zAAOAXAADAAFbVAAAAAQPAAN99wADgFwAAAAEBAcAA34sAAACD7mADg+oAAGADvOgBPgNOwADfpsAA368AAIJqYAO86AEcwADfuhbAAN+xLsAAVrDAAH3pSwEAAYDAAN+7wD9bvQDAAPzuQCEcwADf1oHAAN/NwD9b1EgBAAErAMAA/V7AAN/NwADf3QEkwADf/QInwABXMoDAAN/4wD9bvUrAAOAEAYHAAOALwD9b1AbAAH5PgVjAAOAcwADgLsAA4O8AAMAAVu4AAAABA8AA4ETAAODvAAAAAQEBwADgTwAAAIPuYAODXgAAYAO9AAE+A07AAOBtwADgeQAAmNtgA70AARzAAOCJFsAA4HsuwABWr8AAfehLAQABgMAA4IrAP1x8AMAA/O5AIRzAAOCogcAA4JzAP1yTSAEAASsAwAD9XsAA4JzAAOCvASTAAODSAifAAFczgMAA4M3AP1x8SsAA4NkBgcAA4ODAP1yTBsAAflCBWMAA4PTAAOEHwADlYQAAwABW5QAAAAEDwADhHsAA5WEAAAABAQHAAOEwAAAAg+5gA4lPAABgA7zNAT4ETsAA4U/AAOFcAACo8GADvM0BHMAA4W0WwADhXi7AAFauwAB950sBAAGAwADhbsA/XTsAwAD87knAAOF5HMAA4YqBwADhfcA/XVJIAQABKwDAAP1ePgFJwADhmyXAAOGrFsAA4aSAwADhn8A/XTuEUoJYYAOEgz4DTsAA4dnAAOHeAADAAFGLYAOEgwEmwADh2QEWwADh5YDAAOHgwD9dO4RSglhgA4SDTsAA4fnAAOH/AAAnYAPAAPwFARzAAOIVFsAA4gaCwADiAcA/XcqEvoSIgLsBAAGAwADiHcA/XTsAwAD8vknAAOIsJcAA4jwWwADiNYLAAOIwwD9dyoRSglhgA4OpPgNOwADiasAA4nYAAJjbYAODqQEmwADiagEWwADifYLAAOJ4wD9dyoRSglhgA4OpTsAA4pjAAOKcAACZymADgxkBFsAA4qqEwADinsA/XlmE/4NmPRzAAOLTFsAA4sQuwABWrsAAfeeAvwIAAoDAAOLUwD9dO4nAAOLqwD9dUhzAAOL5LsAAVuUBAAEcwADjIxbAAOMVhcAA4xHAP16HhL6DKEsBAAGDwADjJMA/XfoAwAD8uADAAH5QAMAA/O9JwADjPCXAAONMFsAA40WCwADjQMA/XcqEUoJYYAOD6j4CTsAA43bAAOOAAACElmADg+oBJsAA43YBFsAA44eCwADjgsA/XcqEUoJYYAOD6knAAOOZHMAA46wWwADjp4TAAOOdwD9fOIJng+1IAQABasAA48BgA4QngdEAwAD9Xj4CTsAA4+DAAOPkAACZymADgxkBFsAA4/CEwADj5sA/XziE/4NmPRzAAOQbFsAA5AwuwABWrsAAfeeAvwIAAoDAAOQcwD9dO4nAAOQkwD9dUhzAAORDLsAAVuUBAAEcwADkbRbAAORfhcAA5FvAP1+YhL6DKEsBAAGDwADkbsA/XfoAwAD8uADAAH5QAMAA/O8/Pz8/QCEcwADkvIHAAOSvwD9dUkgBAAErAMAA/V7AAOSvwADkwwEkAAQnwABXNIDAAOTrwD9dOyfAAFc1IyXAAOUMFsAA5QWAwADlAMA/XTuEUoJYYAOEgxbAAOUtFsAA5SaAwADlIcA/XTuEUoJYhFKCWBbAAOU7gMAA5TbAP107hFKCWAFgA4JSSsAA5UoBgcAA5VHAP11SBsAAflGBWMAA5WbAAOV0wADmGgAAwABW7AAAAAEDwADlhsAA5hoAAAABAQHAAOWSAAAAg+5gA4L0AABgA7zIAT4DTsAA5azAAOW0AACGgWADvMgBHMAA5cAWwADlti7AAFatwAB95ksBAAGAwADlwcA/YOwAwAD87kAhHMAA5duBwADl08A/YQNIAQABKwDAAP1ewADl08AA5eIBJMAA5gECJ8AAVzaAwADl/MA/YOxKwADmCAGBwADmD8A/YQMGwAB+UoFYwADmH8AA5jrAAObNAADAAE83AWrAAOYgYAPAAP1RAgAAAQPAAOZMwADmzQAAAAEBAcAA5lwAAACD7mADg6kAAGADvOgBPgJOwADmesAA5oYAAJjbYAO9AAEcwADmiC6n2QEAAYDAAOaXwD9htwDAAH4fSsAA5qIBHMAA5qkuwABXN8AAfb8BAAEmwADmvQGBwADmvcA/Yc5gA8AAjnQAwAB+CQbAAH4JgVjAAObSwADm48AA7AIAAMAAVzfAAH2/AAAAAQPAAOb2wADsAgAAAAEBAcAA5woAAACY22ADwACOdAAAYAPAAHU0AT4DTsAA5zLAAOc3AAASYAPAAKVTASbAAOcyARzAAOdBFsAA5zkuhI7AAH3hwABMOwEAAYDAAOdJwD9iWQDAAI6jYAPAAKVTScAA51scwADndBbAAOdkgcAA51/AP2J0wABPRcAApVhIAQABKwDAAP1ePghOwADoR8AA6FoAALSgYAO9DwEcwADoZi7AAFc4wAB9vwEAARbAAOiXFsAA6JKBwADojcA/YnSD7sAApOKCaoNvAMAAfgxOwADousAA6MoAAMAAT0VgA8AAdTQBHMAA6NYuwABXKgIAAoDAAOjswD9iWYLAAOj5wD9i5QDAAH5EPRzAAOkcFsAA6RQuhI7AAH3hwABMNwICYAPAAI5xYAPAAKTpAoPAAOlPwD9jKh/AAOluwAClbwQABBbAAOmagcAA6ZXAP2J0g+7AAKTiFsAA6bgWwADps4HAAOmuwD9idIPuwACk4oJqg28fwADp1MAAcn8CAAIWwADqBIHAAOn/wD9idIPuwACk4mrAAOoVYAPAAHI9wAFI/wAWwADqOoHAAOo1wD9idMAAVnPAAKTkAADAAI6pTsAA6lzAAOpgAACZymADwACOZQEmwADqXAEWwADqboDAAOpiwD9iWYT/vOFgA8AAjmVOwADqksAA6psAAMAAVt9gA8AApFgBJsAA6pIBHMAA6qUWwADqnS6Eg8AAfeDAAFa3AQABhMAA6qzAP2QbAMAAjrNgA8AApFg9HMAA6yOFwADrGsA/ZE3AAFc5AQABg8AA6zbAP2MqAMAApGs9HMAA62gWwADrTi63s8AAfe2zyQIAAoDAAOuMwD9iWYPAAOuZwD9jKgC73j0XwADrtoHAAOuxwD9idMAAT0WDwADryMA/YyrAAKVYP0rAAOvjARbAAOvvgcAA6+rAP2J0wABPRcAApVgGwAB+U4FYwADsB8AA7CTAAOyBAADAAE80AWrAAOwIYAPAAP1RAgAAAQPAAOw3wADsgQAAAAEBAcAA7EUAAACCZmADvNMAAGADwAByTgE+AUrAAOxTARzAAOxaLsAAVw0BAAEmwADsdgGAwADsdsA/ZVlgA8AAjmsAwAB+MgbAAH5UgVjAAOyGwADsnMAA74wAALbIAWrAAOyHYAPAAP1RAgAAAQPAAOywwADvjAAAAAEBAcAA7L4AAACCZmADvNMAAGADg14BPgRPwADszMAA7NYAAAHAAFc6YQMBYAOCUmADg14AA8AA7OXAAO2UAAAAAQEBwADs8gAAAIPuYAOCUgAAYAODXgE+AkPAAO0AIRzAAO0MgsAA7QfAP2YVSAEAASsAwAD9Xj4CScAA7R8lwADtKILAAO0jwD9mFWADg14+AUrAAO1CARTAAO1JwD9mFQIBYAODXj89isAA7WHAP2YVFsAA7W2CwADtaMA/ZhWEUoJYSsAA7YMBK07AAO2swADttwAAwABMS2ADwAByTgEcwADtuS7AAE80AQABgMAA7c3AP2XUAMAAflNHwADt2hbAAO3tgsAA7eLAP2aegmfAAHJQAgPAAO4LasAA7gtgA8AAcj3AAUjNwADuKmrAAO4qYAPAAHI9wAFI5sAA7k1qwADuTWADwAByPcABSP8APgFKwADuZgEmwADuZgEWwADueILAAO5twD9mnoPuwAByUWADg14EwADulGrAAO6UYAPAAHI9wAFJGMAA7rdqwADut2ADwAByPcABSTHAAO7basAA7ttgA8AAcj3AAUlLwADu/GrAAO78YAPAAHI9wAFJZQA+AUrAAO8TARzAAO8pgcAA7xrAP2XvIAEAASbAAO81ARbAAO81gsAA7yrAP2aeg+7AAHJRYAOCUgAAPTDAAO9GH8AA71DAAPuXAQABJMAA74cCJ8AAVzuCwADve8A/Zp4ABsAAflWBWMAA75HAAO+twADwAQAAwABPMgFqwADvkmADwAD9UQIAAAEDwADvv8AA8AEAAAABAQHAAO/MAAAImcpgA7zBAABgA8AAcoABPgFKwADv1wEcwADv3i7AAFcOAQABJsAA7/kBgMAA7/nAP2gwYAPAAI5lAMAAfjMGwAB+VoFYwADwn8AA8KTAAPHRAACzHQAAAAEDwADwtMAA8dEAAAADAgLAAPDPAAAIgmpgA8AAjnEAwADw5AAAAIGmYQMDYAPAAGJmYAPAAP3rYAPAAGDSXAABwADxKwAAAIZOYAPAAPo/AWrAAPE1YAPAAPo/AFwBPgJOwADxUMAA8VUAABJgA8AApOkBJsAA8VABHMAA8V8WwADxVy6EjsAAfeHAAEw7AQABgMAA8WfAP2ifAMAAjqNgA8AApOk9HMAA8XuDwADxdsA/aPGzHQQAAy4WwADxm4DAAPGSwD9on7SgvOuBwADxr8A/aK8Bhk6CwADxxMA/aNDAAKTtBsAAfleBWMAA8dbAAPHbwADygQAAsxQAAAABA8AA8fHAAPKBAAAAAgICwADyBgAAAJnKYAPAAI5lAMAA8hAAAACBpmEDAWADvQdcAABcAT4CTsAA8kHAAPJFAACWe2ADwACkSgEcwADyTxbAAPJHLoSDwAB94MAAVrcBAAGAwADyVsA/aZ8AwACOsz0cwADyZILAAPJgwD9px7MUAQABgcAA8nvAP2mvAMAApFMGwAB+WIFYwADyhsAA8ovAAPMMAACzEwAAAAEDwADypcAA8wwAAAACAgLAAPK6AAAAmcpgA8AAjmUAwADyxAAAAIGmYQMBYAO801wAAFwBPgE9NQAAAAEAXQPAAPypAWADwACOawEcwADy9xbAAPLiLsAAVrPAAH2/wAB920sBAAGAwADy+MA/akwAwAD87iMcwADy/oIAwD9qdUgBAAErAAArHMAA8v6CAMA/anWD+AEAAYHAAPMGwD9qXADAAPx3AVwGwAB+CoFYwADzEcAA8x7AAPXBAADAAFc8wAB9vwAAAAEDwADzOMAA9cEAAAAFBQXAAPNOAAAAwABWcmADwABijQDAAPN7AAAAgmxgA4hTAMAA85QAAADAAEU2YAPAAIVVAMAA874AAACzkV0DwAD82gJgA8AA/etgA7zTAMAA8+EAAADAAEwWYAPAAHIoAABgA8AAfToBPgVOwADz+MAA8/4AAJ7OYAO9DAEcwAD0CoTAAPQAwD9rYsAATDYBAAGBwAD0G8A/aycAwAByLE7AAPQ3wAD0QgAAwABXPWADwAB9OgEfwAD0UMAAfUcDAAIWwAD0Y4XAAPRdwD9rf4C9vK+CwAD0acA/azUBhB0WwAD0hYHAAPR8wD9rJ4QdiGQ9HMAA9JsWwAD0ky6EjsAAfeHAAEw3AgJgA8AAfTpgA8AAfYoChsAA9K3AP2u0H8AA9MXAAH2YAgACH8AA9OfAAH2lAwADHsAA9P/AAJw3AQABgcAA9R3AP2snAGrAAPVDYAPAAHI9wAFJMYHAAPVRwD9rJwCAwAD1aMA/axUAAMAAjqk9HMAA9YeDwAD1fsA/a0eAvwIAAhbAAPWThsAA9YjAP2u0gL3AAHT2hsAA9ZvAP2u0AMAA/O9KwAD1rAGGwAD1s8A/a7QGwAB+WYFYwAD2qMAA9s3AAPv9AADAAE85AWrAAPapYAPAAP1RAgAAAQPAAPbgwAD7/QAAAAMDA8AA9vgAAACBVGADwACAQwDAAPcLAAAAgmZgA7zTAMAA9yUAAADAAEwWYAPAAHIoAABdA8AA/NoCYAO9DGADwAB9OgE+A07AAPdPwAD3WwAAwABXPl0DwAD82gJgA70MYAPAAH06ATLAAPddYAO9DGADwAB9OgBJwAD3ZRbAAPd9FsAA926AwAD3acA/bQbAAFY4wACAR4OywAD8jD4KTsAA95nAAPedAADAAEjiYAPAAIBjARbAAPekgMAA95/AP20GwABXP8AAgEhOwAD34cAA9+sAALORXQPAAPzaAmADwAD962ADwACOawEywAD4BGADwAD962ADwACOawBOwAD4FsAA+CAAALZiYAPAAH0uAR/AAPgmwAB9OQIAAhbAAPg1gcAA+C7AP20WhEO84hbAAPhChMAA+D7AP22lgL3AAIBlAE7AAPhYwAD4YQAAwABFNmADwACFVQEfwAD4Z8AAhV8BAAGGwAD4cMA/bgQATsAA+JDAAPiZAACEwmADwABijQEfwAD4n8AAYqICAAKGwAD4rcA/bgRqwAD4uF0DwAD8qQFgA8AAYmbAAPgfAE7AAPjhwAD46wAAhNpgA8AAYo0BFsAA+PwWwAD47S6zQMAAfl+GELn6TsAA+RnAAPknAADAAFdAYAPAAKScAR/AAPktwAB9LQQABB/AAPlMwAB9swEAARbAAPmCHMAA+WYuwABPNAEAAYHAAPl6wD9tFgDAAH5ThFvAAHJSABTAAPmXwD9udwgAFMAA+avAP263CQAcwAD55RzAAPnALsAAVwsBAAEmwAD53AEWwAD53BTAAPnSwD9utwkAlibAAGKPYAPAAI5lAMAAfi/AAFdBAQABFMAA+fHAP253CAAAwAClrQA9HMAA+gsWwAD6Ay6Eg8AAfeDAAEw3AwNgA8AAfS5gA8AApJxgA8AApHEDhsAA+hTAP24EFMAA+h/AP27gCgAfwAD6MsAApIQBAAGFwAD6PMA/bdEAAMAAjrhOwAD6XsAA+m0AAMAAVnJgA8AAYo0BIyEcwAD6hRbAAPp2gcAA+m/AP20WhP+84UgBAAErAMAA/V4cwAD6rBbAAPqZLqT4wAB+XrL/AQABFsAA+r+BwAD6uMA/bRaE/7zhAMAAfnMrAWADwABijUbAAPrnwAD7JMAA+wMAAACCbGADiFMAFsAA+xSAwAD7D8A/bQbAAFY4wACARz4BPRzAAPs5g8AA+y7AP21MgL8CAAIcwAD7RILAAPs6wD9tJMAATDYBAAEUwAD7VcA/cGwMAADAAHIsHMAA+24uwABXPMAAfb8FAAUUwAD7msA/b/YLABTAAPuqwD9wbAwAh8AA+7TAP25LhcAA+77AP23RgsAA+8nAP20kAMAAfgoAwAD87z9KwAD75wGDwAD77sA/bUwGwAB+C4FYwAD8AsAA/AfAAPyWAADAAFdCwAB9vwAAAAEDwAD8EsAA/JYAAAACAgLAAPwkAAAAns5gA70MAMAA/EQAAADAAFdDXQPAAPzaAmADvQxgA8AAfToAAGADwAD6PwFKwAD8aQEcwAD8hIHAAPxpwD9xZYdHAQABgMAA/JDAP3FXAMAA/O0GwAB+DIFYwAD8m8AA/K7AAP6BAADAAFc4wAB9vwAAAAEDwAD81MAA/oEAAAABAQHAAPzsAAAAg+5gA4SDAABgA70PAT4FTsAA/PzAAP0PAAC0qmADwAD8BQEWwAD9FoDAAP0RwD9x4YUfhIlOwAD9NsAA/UsAAITAYAPAAPwFARbAAP1nFsAA/VKAwAD9TcA/ceGEwISKYcAA/NhOwAD9d8AA/YYAAIS+YAPAAPwFARbAAP2cFsAA/Y2AwAD9iMA/ceGEvoSIYcAA/NhOwAD9tcAA/cUAAITBXQPAAPypAWADwAD96wE1wAD99wAAAQBdA8AA/KkBYAPAAP3rARzAAP33HMAA/eQWwAD91IDAAP3PwD9x4YTBhIuAqwEBYAPAAP3rATTAAP3oA8AA/ejAAP31AAAAAQEBwAD96QAAAIDUYAOIUwAAYAPAAP3rAUrAAP3vARbAAP3xhMAA/e/AP3LqgL2IVwDAAPxygK0AAAAAwAD8fTUAAAABAFsBHMAA/gGEwAD9/8A/cpmArgAAAADAAPy8hADAP3KZSsAA/g0BH8AA/hi9JQQABIHAAP4rwD9x+ILAAP4/wD9yHoTAAP5dwD9yfoPAAP5uwD9yTgAGwAB+WoFYwAD+hsAA/p3AAQ2bAADAAFdEAAAAAQPAAP6ywAENmwAAAAgHB8AA/scAAACCZmADvNMAwAD+5QAAAIPuYAOEgwDAAP76AAAAhKtgA8AAdJkAwAD/KwAAAMAAV0NdA8AA/NoCYAO9DGADwAB9OgDAAP9dAAAAgVRgA8AAgEMAwAD/ewAAAMAATBZgA8AAcigAwAD/mgAAAITaYAPAAGKNAAHAAP+xAAAAwABWPGADwAD6PwFqAGADwAD9DnlgA8AAfOABPhdOwAD/3cAA/+wAAMAAVnJgA8AAYo0BIyEcwAEABBbAAP/1gMAA/+7AP3OuhP+84UgBAAErAMAA/V4cwAEAKRbAAQAWLqT4wAB+XrL/AQABFsABADyAwAEANcA/c66E/7zhAMAAfnMrAWADwABijU7AAQB4wAEAiwAAwABXRWADwACexgEWwAEArRzAAQCdFsABAJUuhI7AAH3hwABMOwEAASbAAQClAYDAAQClwD9zrmADwACOawDAAI6jwABWecAApNdJwAEAyhzAAQDhFMABAM7AP3S9CQBIAQABasABAPxgA8AAnsbAAVr9AMAA/V4+AT0VwAEBtsA/dL0JasABAeNgA8AAnsbAAVrkP07AAQH/wAECBAAAgL1gA8AA/esBHMABAgYuwABXRsAAfb8BAAGBwAECGsA/c7wAwAB+EU7AAQIwwAECOQAAhFtgA7XFAR7AAQI7wACcNwEAAYHAAQJZwD9zvABOwAECf8ABAokAALORXQPAAPzaAmADwAD962ADwACOawEywAEComADwAD962ADwACOawBOwAECssABAr4AAMAAUxlgA8AAdLgBH8ABAsTAAH0BAgACgsABAtLAP3PKFMABAuTAP3VcCgAATsABA47AAQOXAACEwmADwABijQEfwAEDncAAYqICAAIUwAEDq8A/deoNAGrAAQO4XQPAAPypAWADwABiZsAA+B8ATsABA+LAAQPuAADAAFdHYAPAAH1IAR/AAQP0wAB9UQQABB/AAQQSwAB9XwEAARTAAQQpwD91jwsAABTAAQQ8wD92IQ4AhsABBE7AP3QZHMABBIYcwAEEYS7AAFcLAQABJsABBH0BFsABBH2GwAEEc8A/dBmWJsAAYo9gA8AAjmUAwAB+L8AAV0EBAAEUwAEEksA/diEOAADAAKWtAD0cwAEEqhbAAQSiLoSDwAB94MAATDcDA2ADwAB0uGADwAB9SGADwACkhQMUwAEEs8A/deoNABTAAQTAwD92Yw8AH8ABBNHAAKSOAQABFMABBOHAP3W3DAAAAMAAjrhOwAEE+QAAAMAAVlNgA70MAEnAAQUMJcABBRwWwAEFFYHAAQUQwD9zvIRSglhgA4h4PgJOwAEFVsABBV0AAIRSYAOIeAEmwAEFVgEWwAEFZIHAAQVfwD9zvIRSglhgA4h4PRXAAQVywD93XhAcwAEFjIXAAQWCwD90B8AATDYBAAEWwAEFpBTAAQWdwD93kREAgmyIegDAAHIsScABBbolwAEFyhbAAQXDgcABBb7AP3O8hFKCWGADhx8+AT0VwAEF7MA/d14QH8ABBgDAAH0MAQABJsABBhYBFMABBhbAP3XqDQBgA8AAfPYAP07AAQY/wAEGSgAAtEZgA8AAjnEBH8ABBlDAAHWVAwADFMABBmPAP3XqDQAcwAEGeC7AAFc4wAB9vwEAAYHAAQafwD9zvADAAH4MHsABBqbAAJw4AQABgcABBrXAP3O8AAA9HMABBxQcwAEG3BbAAQbBLsAAVrHAAH2/wAB92ZkdAgACJsABBugBgMABBujAP3OuYAPAAI5rNMABBvADwAEG8MABBwkAAAAAAAAAXQPAAPypAWADwACOcQFKwAEG9gExwAEHB2ADwACOcQAAwAD89VYBAAEUwAEHGMA/eEoRAADAAPy6TsABB+/AAQf1AAAnYAPAAPwFAZNGwAEH/sABCDrAAQgUAAAAnr1gA4lPABbAAQgqgcABCCXAP3O8hL6EiD4CPRzAAQhRFsABCEIuwABWrsAAfeeAvwIAAhTAAQhSwD95TBMAHMABCHEWwAEIYy6ib8AAfeLAAEw3AgJgA8AAjnpgA8AApZICJsABCIUBHMABCIUuwABWygMAAxTAAQiYwD94ShEAFsABCLIUwAEIpMA/eUwTAIC9iVMUwAEIuMA/eTASAADAAH5DYAPAAI56H8ABCM7AAKWgAQABFMABCODAP3lMEwAAAMAAjqkAwAD87z0VwAEI98A/eTASHMABCPwUwAEI98A/eTASAGQBAAGUAMAA/SpOwAEJIsABCTMAAMAAVjpgA8AAfOABH8ABCUHAAHz1CAAIFMABCXPAP3XqDQCBwAEJjMA/c7wywAEJs2ADvQxgA8AAfToAhMABCcPAP3P3hcABCdXAP3QHFMABCezAP3deEAAjFsABCgyEwAEKB8A/c/fAAFZDwACARh/AAQovwACFaQEAARbAAQpRFsABCkOFwAEKOcA/dAeqrcAAciqE/7zhACsBYAPAAIVgLgA9HMABCpAuwABXSMAAfb8HAAcUwAEKqcA/ekYTAIDAAQq7wD9zrhTAAQrDwD90TwgAhMABCtPAP3P3hcABCuHAP3QHg8ABCuzAP3PaFMABCwjAP3W3DAAAwAB+DUnAAQsZh8ABCx3AP3QqPgE9HMABCzwuwABXScAAfb8GAAYUwAELVsA/ekYTABTAAQtowD91twwAgcABC3PAP3O8FMABC4PAP3RPCAAUwAELk8A/dY8LABTAAQudwD90vQkAAMAAfg8/PRfAAQvJFMABC73AP3ZjDwCteBzAAQvULrMDAQABgcABC+TAP3O8AMAAfifAAH1LPRzAAQv4FsABC/AuhI7AAH3hwABMNwICYAPAAI5xYAPAAKTpAhTAAQwpwD94ShEAH8ABDEHAAH2JBQAFH8ABDGbAAH2lAwADFMABDI/AP3WPCwBqwAEMpGADwAByPcABSRgWwAEMtoHAAQyxwD9zvIRSglgAFMABDMvAP3RPCAAWwAEM8xTAAQznwD92Yw8ArXjAAH1LgcABDQnAP3O8FMABDRvAP3S9CQAAAMAAjqk9HMABDT4UwAENNcA/dbcMAIC/AgACFsABDUoUwAENP8A/eEoRAIC9vK8XwAENYxTAAQ1SwD96RhMAtEYmwAENYwEUwAENcMA/eEoRAGADwAB1B8AAfOMAwAD870rAAQ2AARTAAQ2HwD96RhMABsAAfg2BWMABDaDAAQ2lwAEZJgAAwABXSMAAfb8AAAABA8ABDb3AARkmAAAABwcHwAEN3AAAAMAAVjpgA8AAfOAAwAEOAQAAAIJmYAO80wDAAQ4dAAAAwABWcmADwABijQDAAQ5DAAAAgVRgA8AAgEMAwAEOYQAAAMAATBZgA8AAcigAwAEOiwAAAMAAV0NdA8AA/NoCYAO9DGADwAB9OgDAAQ7HAAAAs5FdA8AA/NoCYAPAAP3rYAO80wAAXAE+BE7AAQ9ywAEPfgAAwABXSmADwAD8BQGTRsABEM7AARD7wAEQ2wAAAIJsYAOCSwAWwAEQ7IPAARDnwD99ZsAATxvAAIBJPgFJwAERAyXAAREQFMABEQfAP33lCABgA4hTPgJOwAERO8ABEUkAAMAAV0tgA70MARzAARFVhMABEUvAP312wABMNgEAARTAARFmwD995QgBYAOIUwDAAHIsScABEXkcwAERfS7AAFdCwAB9vwIAAhTAARGJwD9+JwkAhcABEZjAP32IAMAAfgs+Ak7AARHGwAER1wAAwABXTGADwAD6PwEcwAER2S7AAFdNwAB9vwcABxTAARIIwD9+JwkAgMABEiXAP300gsABEkXAP31UhsABEmPAP32lFMABEnzAP33lCAFgA4hThcABEpTAP32Ih8ABEr7AP33GAMAAfg5JwAES1hTAARLawD9+lQoAPY/AARLswD99xhzAARL3h8ABEuzAP33GZAEAAZQAwAD9Kj8/P0nAARNEFsABE02DwAETSMA/fWbAAFYywACASz4CPRzAARNtLsAAV07AAH2/CAAIFsABE6CAwAETj8A/fTS598AAfOaAwAETtcA/fTSCwAET0cA/fVSGwAET68A/faUmwAEUKgEWwAEUKhzAARQALsAATzIBAAEWwAEUGoHAARQTwD99RoT/vOEAwAB+VYPuwAByg2ADglIpKofAARRbwD99xgDAAH4QPY/AARRvwD99xhzAARR6h8ABFG/AP33GZAEAAZQAwAD9Kj9GwAEUicABFLbAARSWAAAAgmxgA4JLABbAARSng8ABFKLAP31mwABPG8AAgEk+AUnAARVEJcABFVEUwAEVSMA/gA8IAGADiFM+Ak7AARV8wAEVigAAwABXS2ADvQwBHMABFZaEwAEVjMA/fXbAAEw2AQABFMABFafAP4APCAFgA4hTAMAAcixJwAEVuiEcwAEVvy7AAFdCwAB9vwIAAhTAARXLwD+AUQkAhcABFdrAP32IAMAAfgs+Aj0cwAEWAy7AAFdOwAB9vwgACBTAARYpwD+AUQkAgMABFkbAP300gsABFmbAP31UhsABFoTAP32lFMABFp3AP4APCAFgA4hTFsABFr4UwAEWtcA/gA8IAWADiFOEHYhkKofAARcgwD99xgDAAH4QPY/AARc4wD99xhzAARdDh8ABFzjAP33GZAEAAZQAwAD9Kj9JwAEXXiXAARdrFMABF2LAP4APCABgA8AAgLA+Aj0cwAEXlS7AAFdOwAB9vwgACBzAARfDhMABF7nAP312wABMOAIAAhbAARfhFMABF9jAP4APCAFgA8AAgLCCkMAAgLMuAMAAci2AwAEX+sA/fTSCwAEYGMA/fVSGwAEYNMA/faUWwAEYWRbAARhUFMABGEvAP4APCAFgA8AAgLCCkMAAgLOA7YlCKSqHwAEYlcA/fcYAwAB+ED2PwAEYq8A/fcYcwAEYtofAARirwD99xmQBAAGUAMAA/So+AT0wwAEY0R/AARjbwAD7lwEAASTAARkTAifAAFdPFMABGQrAP4APCAAABsAAfg6BWMABGxvAARsgwAEgUQAAwABXTcAAfb8AAAABA8ABGz/AASBRAAAABwcHwAEbTQAAAMAAV0tgA70MAMABG3kAAADAAFY6YAPAAHzgAMABG58AAADAAFZyYAPAAGKNAMABG88AAACzkV0DwAD82gJgA8AA/etgA7zTAMABG+wAAADAAFaCYAOCUgDAARwXAAAAwABXQ10DwAD82gJgA70MYAPAAH06AMABHD0AAADAAFdKYAPAAPwFAABgA8AA+j8BPghOwAEcXcABHGkAAMAAULZgA8AAfToBHMABHIWFwAEca8A/guJLAQABgMABHIbAP4KDAMAA/O5JwAEdEBzAAR01FsABHSWBwAEdFMA/gpPAAFZUwAB86IdHAQABFsABHU2HwAEdQcA/gxzAAEjiwAB9PQDAAPztPgI9HMABHXoWwAEdbIHAAR1bwD+Ck8AAVjjAAHy5gL8CAAKAwAEde8A/goOHwAEdjMA/gxwAwAD870rAAR2fASo/TsABHcTAAR3RAADAAE9GYAO85QEfwAEd18AAfRgFAAMkwAEeAQInwABXUIbAAR31wD+C/4HAAR4DwD+CkxbAAR4lFsABHiGHwAEeFcA/gxzAAEjiwAB9PYC9wACFWQKEHSmsSio9HMABHmUWwAEeXS6EjsAAfeHAAEw3AgJgA8AAjndgA8AApXACJsABHpEBFMABHpHAP4PUCABgA8AAjncfwAEeq8AAfZgCAAIfwAEezcAAfaUDAAMewAEe9sAAnDcBAAGEwAEfFMA/gtIAasABHzxgA8AAcj3AAUkxhMABH1rAP4LSAILAAR9zwD+CpQAAwACOqT0cwAEfkoPAAR+JwD+Ct4C/AgACFsABH6AUwAEfk8A/g9QIAIC9vK8UwAEfqMA/g9QIAADAAPzvPRzAAR/aFsABH8uBwAEfusA/gpPAAFZUwAB86IC/AgACFsABH+eHwAEf28A/gxzAAEjiwAB9PSbAAR/aARTAAR/uwD+D1AgAYAPAAHV7AMAA/O89HMABIB8WwAEgEYHAASAAwD+Ck8AAVjjAAHy5gL8CAAKAwAEgIMA/goOHwAEgMcA/gxwAwAD870rAASBCASkGwAB+D4FYwAEgVsABIFvAASN/AADAAFdJwAB9vwAAAAEDwAEgdMABI38AAAAGBgbAASCTAAAAwABWOmADwAB84ADAASDFAAAAs5FdA8AA/NoCYAPAAP3rYAO80wDAASDmAAAAwABWVmADhIMAwAEhDQAAAMAAVnJgA8AAYo0AwAEhLgAAAIRbYAO1xQDAASFWAAAAwABXRWADwACexgAAXAE+A07AASF/wAEhjwAAwABQtWADvOgBH8ABIZ3AAHWhAQABFsABIb+AwAEhrsA/hcTAAFVFwAB85wA9HMABIeAWwAEh2C6EjsAAfeHAAEw3AgJgA8AAjnFgA8AApOkCJsABIhEBhsABIhHAP4Y5YAPAAI5xH8ABIi7AAKU1BAAEH8ABIlXAAHJ/AgACFsABIpCCwAEifsA/hfGEUoJYasABIqNgA8AAcj3AAUlLAIPAASK7wD+GARbAASLpgsABItfAP4XxhL6EiIXAASMFwD+GIQAAwACOqT0cwAEjKIHAASMfwD+F1oC/AgACFsABIzmGwAEjKcA/hjmAvbyvF8ABI1qAwAEjScA/hcTAAFC1JsABI1oBhsABI2zAP4Y5YAPAAHWWwAB85ADAAPzvBsAAfhCBWMABI4TAASOJwAEnKwAAwABXTsAAfb8AAAABA8ABI5/AAScrAAAACAgIwAEjrQAAAMAAV0tgA70MAMABI9kAAADAAFY6YAPAAHzgAMABI/8AAADAAFZyYAPAAGKNAMABJC8AAACzkV0DwAD82gJgA8AA/etgA7zTAMABJEwAAADAAFaCYAOCUgDAASRjAAAAhB1gA8AA+j8AwAEkdwAAAKxKYAPAAPo/AMABJI8AAADAAFdKYAPAAPwFAABcAT4ETsABJK7AASS7AADAAE9GYAO85QEfwAEkwcAAfRgFAAMcwAEk2C7AAFdRwAB9vwIAAhbAAST+gMABJPDAP4eTgL28r4fAASUEwD+IEgDAAH4SgcABJRrAP4ejFsABJUKAwAElNMA/h5OAvbyvAoQdhcABJVnAP4fyrEqGwAEleMA/iAI9HMABJZQWwAEljC6EjsAAfeHAAEw3AgJgA8AAjndgA8AApXACJsABJcABFMABJcDAP4gqCABgA8AAjncfwAEl2sAAfZgCAAIfwAEl/MAAfaUDAAMewAEmJcAAnDcBAAGEwAEmQ8A/h+IAasABJmtgA8AAcj3AAUkxhMABJonAP4fiAILAASaiwD+HtQAAwACOqT0cwAEmwYPAASa4wD+Hx4C/AgACFsABJs8UwAEmwsA/iCoIAIC9vK8UwAEm18A/iCoIAADAAPzvPRzAAScJFsABJvqBwAEm6cA/h6PAAFZUwAB86IC/AgACgMABJwrAP4eTJsABJwkBFMABJxvAP4gqCABgA8AAdXsAwAD87wbAAH4RgVjAASduwAEndcABLQsAAMAAV0bAAH2/AAAAAQPAASeIwAEtCwAAAAEBAcABJ5UAAADAAEUUYAOCUgAAYAPAAP3rAT4FTsABJ6nAASevAACEgV0DwAD8qQFgA8AA/esBMcABJ7lgA8AA/esATsABKG3AASh3AADAAFdSYAPAAP3rASe0T07AASiUwAEonAAAXmADglIBgMABKJ7AP4nsQUPAASjhIRzAASjwg8ABKOjAP4pHSAEAASsAwAD9Xj4DTsABKQXAASkKAACD7mADglIBg8ABKQzAP4pHScABKRslwAEpJITAASkfwD+KgmADhx8+Aj0cwAEpToHAASlIwD+KB1YBAAGCwAEpUsA/ii4AwAD8uj2KwAEpZsA/ii4nAEnAASmDJcABKYyEwAEph8A/ioJgA4h4PgJOwAEpuMABKb0AAIC9YAPAAP3rARbAASnNFsABKcQUwAEpv8A/ioIEAWADiHiCbIh6gL2IV0nAASnbIiEcwAEp5IXAASnfwD+K/EgBAAErAMAA/foAIRzAASn0hcABKe/AP4r8SAEAAScAAMAA/fo+AT0cwAEqDYHAASoHwD+KB1YBAAEewAEqEcAAhuABAAGFwAEqMMA/ivwAAMAA/Lo+Aj0cwAEqWYHAASpTwD+KB1YBAAGCwAEqXcA/ii4AwAD8uj2KwAEqc8A/ii4nAEnAASqaJcABKqOEwAEqnsA/ioJgA4MZPgI9HMABKxGBwAErC8A/igdWAQABFsABKxoUwAErFcA/ioIEAWADgxmAvYMfAMAA/LpCwAErKQBJwAErPSXAAStGhMABK0HAP4qCYAOD6j4BScABK2EcwAErbxbAAStqFMABK2XAP4qCBAFgA4PqgmeD7UgBAAFqwAErg2ADhCeB0QDAAP1ePgE9HMABK56BwAErmMA/igdWAQABHsABK6LAAIbeAQABJsABK8MBHMABK8MunBMBAAEUwAErzcA/ioIEAWADg+oAwAB+HWADvOgAAMAA/Lo+AT0cwAEr94HAASvxwD+KB1YBAAEewAEr+8AAhuABAAEWwAEsJBbAASwfFMABLBrAP4qCBAFgA4PqgL2DYoC9iIYAAMAA/LpJwAEsQyXAASxMhMABLEfAP4qCYAODqT4CPRzAASxvgcABLGnAP4oHVgEAAR7AASxzwACG3gEAASbAASyUARzAASyULpwTAQABFMABLJ7AP4qCBAFgA4OpAMAAfh1gA7zoAADAAPy6QsABLK8APz2LwAEsxMA/ikcWwAEs1oPAASzOwD+KR4RSglhKwAEs6AEcwAEs/hbAASz1gcABLO/AP4oHmIjAAPzZWAEAASeAtQDAAPx7BsAAfhKBWMABLxnAAS8gwAEvdQAAwABXUcAAfb8AAAABA8ABLzfAAS91AAAAAgICwAEvPwAAAIC9YAPAAP3rAMABL0kAAACzmmADwAD8BQAAYAPAAP3rAT4BSsABL1MBJMABL3EEJ8AAV1OAwAEvZ8A/jeQngLWBwAEvbsA/jfQGwAB+W4FYwAEvesABL5XAATPSAADAAE84AWrAAS97YAPAAP1RAgAAAQPAAS+lwAEz0gAAAAEBAcABL8AAAAiCamADwACOcQAAYAPAAHVPAT4DTsABL9/AAS/tAADAAE9HYAPAAHVPARzAAS//FsABL+8uwABWssAAfb/AAH3aSwEAAYDAATAAwD+ObADAAPzuScABMA8cwAEwIYHAATATwD+Oh0gBAAErAMAA/V4+CE7AATA/wAEwTAAAwABXVGADwACk6QEmwAEwPwEcwAEwVhbAATBOLoSOwAB94cAATDsBAAGAwAEwXsA/jmwAwACOo2ADwACk6U7AATB7wAEwgAAAg+5gA4JSASbAATB7ARbAATCaFsABMI+CwAEwgsA/juXAAExLwACk1oPuwAByUWADglJOwAEwr8ABMLsAAJrZYAPAAGJmARzAATDaFsABMMcupPjAAH5esxoBAAGAwAExAMA/jmwAwAB+fz2JwAExEcA/joccwAExIS7AAFcrAgACgMABMTXAP45shMABMT/AP49qAMAAfkU9HMABMVsWwAExUy6EjsAAfeHAAEw3AgJgA8AAjnFgA8AApOkCgcABMY7AP46HH8ABMavAAKVNAgACgsABMcXAP47lH8ABMeXAAHJ/AgACg8ABMf3AP48tasABMg5gA8AAcj3AAUllAAAAwACOqUnAATInIRzAATJDFsABMjSAwAEyK8A/jmyE/7zhSAEAASsAwAD9Xj4BPRzAATL2NQAAAAEAXQPAAPzaAmADwACOZV0DwAD8qQFgA8AAjmsBFsABMqMuwABWs8AAfb/AAH3bNQAAAAEAYAO8wQEWwAEywoDAATK5wD+ObIT/vOE1AAAAAQBdA8AA/KkBYAPAAI5rARzAATK4hcABMrjAP5BtSwEAAYbAATK4wD+QoADAAPzuIxzAATLShwDAP5C9SAEAASsAwAD9XjUAAAABAF0DwAD8qQFgA8AAjmsBMcABMuVgA8AAjmsANQAAAAEAXAEcwAEyuIXAATK4wD+QbYC/AgACJsABMrgBhsABMrjAP5CgYAPAAI5lFADAP5EHCAAAwAD87xQAwD+RBwgAhwDAP5C9AV0DwAD8qQFgA8AAjmtWAQABgcABMvrAP46HAMAA/Lo/PRzAATMyFsABMxgut7PAAH3ts8kCAAIWwAEzZIHAATNWwD+Oh4JqwAB1UoHAATNuwD+OhwC73j0cwAEzlBbAATOELsAAVrLAAH2/wAB92oC/AgACgMABM5XAP45sgcABM6HAP46HAMAA/O8/SsABM7oBgcABM8HAP46HAAA+0qwAPtVVAD7hdQA+4csAPuIfAD7icQA+4xAAPuOuAD7n9QA+6MsAPunIAD7rFgA+7EMAPu2KAD7u7AA+7/AAPvDLAD7xdQA+8eAAPvJLAD7zPgA+9gUAPvZyAD797AA+/q4APwBBAD8DOwA/A6YAPwYvAD8GnAA/BwkAPweHAD8IAgA/CQ4APwmYAD8SIAA/Et4APxOtAD8U+QA/FeoAPxbTAD8XpgA/GIAAPxlTAD8aIgA/GusAPxwHAD8c8gA/HbUAPx54AD8fkAA/IGkAPyGFAD8jhwA/JGMAPyU4AD8mzQA/J8IAPyjEAD8pvgA/KmIAPysGAD8sCgA/LPEAPy3BAD8x9QA/MqMAPzQgAD82WwA/OBcAPzjnAD85twA/O5AAP0T5AD9FrQA/SEEAP0pyAD9NRQA/T+AAP1EWAD9TbQA/U/wAP1R/AD9VBAA/VeoAP1aAAD9XFQA/V9YAP1jRAD9ZKAA/Wf4AP1rUAD9bkQA/XFAAP10PAD9gwAA/YX8AP2IpAD9lIQA/ZZ4AP2f4AD9odQA/aXUAP2oiAD9q5QA/bM4AP3EnAD9xsQA/c4IAP30EAD+CUwA/hZQAP4djAD+JvAA/jbQAP440AD+SDQAAAHQCwAB+aYFYwAEz18ABM93AAVfYA8AAV1UAAAFgAbr1AAFgAbskAQTAAH5rgVjAATRPwAE0WQmzmQBgA8AAfcAAAQXAAH6ZgVjAATRewAE0XsABNIMAAAADwAE0csABNIMAAAABAQHAATR4AAAEs5lgA8AAfcAAAGADwAB+aQE/AggBwAB+a4AAwD+UTAkBwAE0XrsYAAAAACoGwAB+bYFYwAE0iMABNKHAATTDAQCebQFqwAE0iWADwAD9UQIAAAEDwAE0rcABNMMAAAAAAAAAYAPAAGJmAUrAATSwAWrAATS2YAPAAGLswAEcxQbAAH5ugVjAATTIwAE05sABNQwBALL2AWrAATTJYAPAAP1RAgAAAQPAATTywAE1DAAAAAAAAABgA7yyAUrAATT1ARbAATUAFsABNPUus5nAAH5rwABW1sAAfb/AAH5iBsAAfm+BWMABNRHAATUwwAE1WAEApPwBasABNRJgA8AA/VECAAABA8ABNT3AATVYAAAAAAAAAGADvOgBSsABNUABFsABNUsWwAE1QC6zmcAAfmvAAFbUwAB9v8AAfmEGwAB+cIFYwAE1XcABNYXAATWwAQCG2QFqwAE1XmADwAD9UQIAAAEDwAE1j8ABNbAAAAAAAAAAXQPAAPxnAWADvLIBSsABNZIBFsABNZ0WwAE1ki6zmcAAfmvAAFcuwAB+ZQbAAH5ygVjAATW1wAE1yMABNiIAAJldAWrAATW2YAPAAP1RAgAAAQPAATXWwAE2IgAAAAEBAcABNeUAAACEQ2ADvLIAAGADwAD96wE+AUrAATX0ARzAATYGFsABNfsus5nAAH5rwABW28AAfb8BAAEmwAE2FgGAwAE2FsA/lihgA8AAjl8AwAB99AbAAH5zgVjAATYnwAE2QcABNooAALL/AWrAATYoYAPAAP1RAgAAAQPAATZMwAE2igAAAAEBAcABNlkAAACZymADvMEAAGADwABijQE+AUrAATZkARzAATZ2FsABNmsus5nAAH5rsv8BAAEmwAE2ggGAwAE2gsA/lrJgA8AAjmUAwAB+KwbAAH50gVjAATaPwAE2qcABNvEAAK9aAWrAATaQYAPAAP1RAgAAAQPAATazwAE28QAAAAEBAcABNsAAAACZymADvMEAAGADwABijQE+AUrAATbLARzAATbdFsABNtIus5nAAH5rsmHAAH2/AQABJsABNukBgMABNunAP5c2YAPAAI5lAMAAffkGwAB+dYFYwAE29sABNwfAATdhAACzAAFqwAE292ADwAD9UQIAAAEDwAE3FcABN2EAAAABAQHAATciAAAAmcpgA7zBAABgA8AA+j8BPgFKwAE3LQEWwAE3UxbAATdFHMABNzQusv8BAAGAwAE3QMA/l74AwAB+c4UdwABikIOywAD8jAbAAH52gVjAATdmwAE3d8ABN88AAITvAWrAATdnYAPAAP1RAgAAAQPAATeJwAE3zwAAAAEBAcABN5YAAACZymADvMEAAGADwAD6PwE+AUrAATehARzAATezFsABN6gus5nAAH5rwABXAsAAfb8BAAEmwAE3xwGAwAE3x8A/mEFgA8AAjmUAwAB9/gbAAH53gVjAATfUwAE35cABOEsAALMBAWrAATfVYAPAAP1RAgAAAQPAATf+wAE4SwAAAAEBAcABOAsAAACZymADvMEAAGADwAD6PwE+AUrAATgWARzAATgoFsABOB0us5nAAH5rwABXA8AAfb8BAAEmwAE4QwGAwAE4Q8A/mMtgA8AAjmUAwAB9/wbAAH54gVjAAThQwAE4YcABOMMAALMWAWrAAThRYAPAAP1RAgAAAQPAATh4wAE4wwAAAAEBAcABOIUAAACZymADvMEAAGADwAD6PwE+AUrAATiQARzAATiiFsABOJcus5nAAH5rwABXBMAAfb8BAAEmwAE4uwGAwAE4u8A/mVVgA8AAjmUAwAB+AAbAAH55gVjAATjIwAE44MABOagAALMXAWrAATjJYAPAAP1RAgAAAQPAATj2wAE5qAAAAAEBAcABOQMAAACZymADvMEAAGADvMEBPgNJwAE5DiEcwAE5Ey6E7wEAAYDAATkmwD+Z3wDAAH52SsABOSwBKz9EwAE5PT4BPYjAATlIwD+Z3xzAATlZFsABOU4us5nAAH5rwABO5gEAASbAATlpAYDAATlpwD+Z32ADwACOZQDAAH4tHMABOXwuhO8BAAGAwAE5j8A/md8AwAB+dkrAATmaAYDAATmhwD+Z3wbAAH56gVjAATmtwAE5wsABOjYAALMCAWrAATmuYAPAAP1RAgAAAQPAATnWwAE6NgAAAAEBAcABOeoAAACo8GADvM0AAGADwABiZgE+AUrAATn+ARzAAToQFsABOgUus5nAAH5rswIBAAEmwAE6JQGAwAE6JcA/mr1gA8AAjnoAwAB+LAbAAH57gVjAATo7wAE6UMABOtEAALMYAWrAATo8YAPAAP1RAgAAAQPAATpqwAE60QAAAAEBAcABOn4AAACo8GADvM0AAGADwABiZgE+AUrAATqSARzAATqkFsABOpkus5nAAH5rwABXAMAAfb8BAAEmwAE6wAGAwAE6wMA/m0FgA8AAjnoAwAB9/QbAAH58gVjAATrWwAE68MABO3AAALJpAWrAATrXYAPAAP1RAgAAAQPAATsDwAE7cAAAAAICAsABOxcAAACZymADvMEAwAE7KwAAAIUdXQPAAPypAWADwABiZgAAYAPAAGKNAT4BSsABO0ABH8ABO0vAAGKiAgACgMABO1nAP5vLgcABO17AP5vZAAbAAH59gVjAATt1wAE7jsABO+0AALMDAWrAATt2YAPAAP1RAgAAAQPAATudwAE77QAAAAEBAcABO60AAACCamAD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AAFgA4oChOiKCoSrg0OEd4KNSAEAARqkl7g5AMAA/pM+A0AcpNEWpMoWpL4UpLXAQKOkAAFgA4oChdOKBmHAAPz+SAEAAZQAwAD9KKS1pNUATqTopPMAAMAAU7xgA4lzARalERalChak/hSk9cBAo6QAAWADigKF04oGKcAA/P2Aw8AA/I9JpR0lpSyBpSHAQKReYAOJrD4BSqVKARalXBSlUcBApF4BAWADiayAlomBPz9KpW8BKwbAAIAKgV2lf6WGpywAAcAAWB7AAIACAAAAAQOlm6csAAAAAQEBpagAAACGBWADiXMAAGADwAD96wE+AkmltiIiJaXDgKW6wECk6mADigIAHKX7FqX2FqXsFKXjwECk6gABYAOKAoToigqAvYMfSAEAASeytwDAAP36ABymPxamNRamJBamGhSmEcBApOoAAWADigKE6IoKhKuDQ4R3go1IAQABGqZHuDkAwAD+kz4DQBymgRamehambhSmZcBApOoAAWADigKF04oGYcAA/P5IAQABlADAAP0opmWmhQBOppimowAAwABTvGADiXMBFqbBFqa6FqauFKalwECk6gABYAOKAoXTigYpwAD8/YDDwAD8j0mmzSWm3IGm0cBApaRgA4msPgFKpvoBFqcMFKcBwEClpAEBYAOJrICWiYE/P0qnHwErBsAAgAuBXacvpzapDwABwABYH8AAgAIAAAABA6dHqQ8AAAABAQGnVAAAAIYFYAOJcwAAYAPAAP3rAT4CSadiIiIlp2+Ap2bAQKYwYAOKAgAcp6cWp6IWp5gUp4/AQKYwAAFgA4oChOiKCoC9gx9IAQABJ7DQAMAA/foAHKfmFqfcFqfLFqfBFKe4wECmMAABYAOKAoToigqEq4NDhHeCjUgBAAEap+64PwDAAP6TPgNAHKgjFqgcFqgQFKgHwECmMAABYAOKAoXTigZhwAD8/kgBAAGUAMAA/SioB6gnAE6oOqhFAADAAFO8YAOJcwEWqGMWqFwWqFAUqEfAQKYwAAFgA4oChdOKBinAAPz9gMPAAPyPSahvJah+gahzwECm6mADiYk+AUqomgEnAEmosCWov4GotMBApupgA4msPgFKqN0BFqjvFKjkwECm6gEBYAOJrICWiYE/P0qpAgErBsAAgAyBXakSqRep6gABwABYIMAAgAIAAAABA6ksqeoAAAABAQGp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AcAA/VEAABMEwACAa4FemgqaCgknAGADwAD8BQAEwACAbYFemgqaCgkowACAOQBgA8AA/esABMAAgG6BXpoKmgoGKQBdA8AA/KkBYAPAAIBpAWoAXQPAAPypAWADwACAacABXIMEwACAb4Femp2anQafHQBgA8AAgGkBagBgA8AAgGnAAVg2BMAAgHCBXprmmuYGwABYLwBgA8AAgGkBagBgA8AAgGnAAVhoBMAAgHGBXpskmyQGwABLCQBgA8AAgGkBagBgA8AAgGnAAVhPBMAAgHKBXpt6m3oGt+gAYAPAAIBpAWoAYAPAAIBpwAFZcQTAAIBzgV6bzpvOBqxrAGADwACAaQFqAGADwACAacABWYoEwACAdIFenCGcIQbAAFgwAGADwACAaQFqAGADwACAacABWaQEwACAdYFenHKccgbAAFgxAGADwACAaQFqAGADwACAacABWIEEwACAdoFenNKc0gbAAFgyAGADwACAaQFqAGADwACAacABWJsEwACAd4FenTCdMAbAAFgzAGADwACAaQFqAGADwACAacABWLUEwACAeIFenY6djgbAAFg0AGADwACAaQFqAGADwACAacABWM8EwACAeYFendud2wbAAFg1AGADwACAaQFqAGADwACAacABWOkEwACAeoFeni6eLgbAAFg2AGADwACAaQFqAGADwACAacABWQMEwACAe4FennqeegbAAFg3AGADwACAaQFqAGADwACAacABWR8EwACAfIFentCe0AbAAFg4AGADwACAaQFqAGADwACAacABWTsEwACAfYFenwufCwbAAFg5AGADwACAaQFqAGADwACAacABWVUEwACAfoFen0yfTAbAAFg6AGADwACAaQFqAGADwACAacABWb4BBcAAgIKBXpoKmgqfZwEAAAOaCp9nAAAAAgICmgoAAAQnYAPAAPwFAJoKAAAEKGADwAD96wAAYAPAAIBpAT8DCADAAIBrgADAQLvfCADAAIBtgQDAQLvsCQAAwAD9ZwAAAAABBsAAgICBXpoKmgqfZwAAIwAAAAEDmgqfZwAAAAAAAABgA8AA/esBSgABDwAuwACAbQAAQLwnAEC8WAAAAAECwACAg4Fen2qfcK2OA8AAWDsAAAFgAcAA/VEAAAwEwACAhYFen5afmgmCZwBgA8AAgGkABMAAgIaBXp+un7QJgmYAYAODXgAEwACAh4Fen8+f3AmzVABgA4caAATAAICIgV6f+qAECaFDAGADhZgABMAAgImBXqAfoCwJrzwAYAOF5AAEwACAioFeqByoYAafHQBgA8AAgIMBaqgzYAPAAICDwAFcywTAAICLgV6ofqjEBsAAWC8AYAPAAICDAWqolmADwACAg8ABXO4EwACAjIFeqOKpLgbAAEsJAGADwACAgwFqqP1gA8AAgIPAAV0RBMAAgI2BXqlMqZYGt+gAYAPAAICDAWqpZmADwACAg8ABXTQEwACAjoFeqbSp/AasawBgA8AAgIMBaqnNYAPAAICDwAFdVwTAAICPgV6qGqpiBsAAWDAAYAPAAICDAWqqM2ADwACAg8ABXXoEwACAkIFeqoCqxgbAAFg5AGADwACAgwFqqphgA8AAgIPAAV2dCgXAAICYgV6gMaA3oNYBwABYPMAAgDkAA6BKoNYAAAABAQGgUAAABIJnYAPAAIBpAABgA8AAgIMBPwYIAcAAgIWAAMBAvgkIAMAAgIYrCADAAICHKwgAwACAiCsIAMAAgIkrCQGgN8AA/WcAAAAABcAAgJmBXqDboNuhnQDAAFg1AAOg9qGdAAAAAQEBoPwAAASCZmADg14AAGADwACAgwE/BggBwACAhoAAwEC+cwgAwACAhWqhKGADwACAacABWOkIAMAAgIcrCADAAICIKwgAwACAiSsJAaDbwAD9ZwAAAAAFwACAmoFeoaKhoqJiAMAAWDYAA6G8omIAAAABAQGhwgAABLNUYAOHGgAAYAPAAICDAT8GCAHAAICHgADAQL7nCADAAICFaqH1YAPAAIBpwAFZAwgAwACAhisIAMAAgIgrCADAAICJKwkBoaLAAP1nAAAAAAXAAICbgV6iZ6JnoysAwABYNwADooOjKwAAAAEBAaKJAAAEgmZgA4NeAABgA8AAgIMBPwYIAcAAgIaAAMBAv1sIAMAAgIVqorVgA8AAgGnAAVkfCADAAICHKwgAwACAiCsIAMAAgIkrCQGiZ8AA/WcAAAAABcAAgJyBXqMwozCj8gDAAFg4AAOjS6PyAAAAAQEBo1EAAASzVGADhxoAAGADwACAgwE/BggBwACAh4AAwEC/zwgAwACAhWqjhGADwACAacABWTsIAMAAgIYrCADAAICIKwgAwACAiSsJAaMwwAD9ZwAAAAAFwACAnYFeo/ej96TJAMAAWDEAA6QapMkAAAABAQGkIAAABIJmYAODXgAAYAPAAICDAT8GCAHAAICGgADAQMBDCADAAICFaqRMYAPAAIBpwAFYgQgAwACAhysIAMAAgIgrCADAAICJKwkBo/fAAP1nAAAAAAXAAICegV6kzqTOpZYAwABYMgADpOyllgAAAAEBAaTyAAAEgmZgA4NeAABgA8AAgIMBPwYIAcAAgIaAAMBAwLcIAMAAgIVqpR5gA8AAgGnAAVibCADAAICHKwgAwACAiCsIAMAAgIkrCQGkzsAA/WcAAAAABcAAgJ+BXqWbpZumZwDAAFgzAAOlu6ZnAAAAAQEBpcEAAAShQ2ADhZgAAGADwACAgwE/BggBwACAiIAAwEDBKwgAwACAhWql8WADwACAacABWLUIAMAAgIYrCADAAICHKwgAwACAiSsJAaWbwAD9ZwAAAAAFwACAoIFepmymbKcjAMAAWDQAA6aJpyMAAAACAgKmjwAABLNUYAOHGgCmowAABKFDYAOFmAAAYAPAAICDAT8GCAHAAICHgADAQMGfCAHAAICIgQDAQMGrCADAAICFaqbTYAPAAIBpwAFYzwgAwACAhisIAMAAgIkrCQGmbMAA/WcAAAAABcAAgKGBXqcopyin/gDAAFg6AAOnTaf+AAAAAQEBp1MAAASvPGADheQAAGADwACAgwE/BggBwACAiYAAwEDCJAgAwACAhWqnhmADwACAacABWb4IAMAAgIYrCADAAICHKwgAwACAiCsJAacowAD9ZwAAAAADBsAAgJKBXqrLqt+riQEAg8EBaqrMYAPAAP1RAgAAAQOq6KuJAAAAAAAAAGADwAD8BQFKqvEBHKtmHKtFHKshHKsEHKr/Fqr2FqrxLoJnwACAhYPBwAD9ZIOIAQABNwsAwAD9LGQBAAEcqxwWqxMWqwwugmbAAICGg8GCVoOIAQABNw0AwAD9LADAAP0qZAEAARyrQBarNxarKS6zVMAAgIeDwcAA/WSDiAEAATcRAMAA/SwAwAD9KmQBAAEcq2EWq1gWq00uoUPAAICIg8GCVoOIAQABNxMAwAD9LADAAP0qZAEAARyrhRarfBarbi6vPMAAgImDwYJWg4gBAAE3FwDAAP0sAMAA/SoGwACAlIFeq46rqKzbAwBIAWqrj2ADwAD9UQIAAAEDq6qs2wAAAAEBAaurAAAAg9ZbAABgA8AA+j8BPgNJq7geq7zAAPXmAgACLoCrzMBAw64ASqvUASk/SavlISWr74Cr6cBAw65gA8AAgINKrAABKj9KrBIBIiIiIhysHhasGS6CZ8AAgIVIAQABFqwngKwhwEDDroJnAADAAP1eABysPhasNy6CZsAAgIZIAQABFqxHgKxBwEDDroJmAADAAP1eABysZxasWS6zVMAAgIdIAQABFqxwgKxqwEDDrrNUAADAAP1eAByslBasiS6hQ8AAgIhIAQABFqydgKyXwEDDrqFDAADAAP1eAByswRassy6vPMAAgIlIAQABFqzKgKzEwEDDrq88AADAAP1eBsAAgJWBXqzgrPOtjAAAIwFqrOFgA8AA/VECAAABA6z7rYwAAAAAAAAAYAPAAP3rAUqtAQEkAA0nwABYPRatFC6CZ8AAgIUnwABYPhatIS6CZsAAgIYngKcnwABYPxatQC6zVMAAgIcnwABYQBatWi6hQ8AAgIgngKcnwABYQRatfS6vPMAAgIkngyEAAEDCewBAw4UAQMSyAEDFPgAAAAMCwACAooFerZGtlq3GC8AAWEIAAAFgAcAA/VEAAAcEwACApIFerZatlgknAGADwAD8BQAEwACApoFerZatlgkowACAOQBgA8AA/esABMAAgKeBXq2WrZYGKQBdA8AA/KkBYAPAAICiAWoAXQPAAPypAWADwACAosABXiQEwACAqIFeramtqQaZygBgA8AAgKIBagBgA8AAgKLAAV3FBMAAgKmBXq2ura4GlkcAYAPAAICiAWoAYAPAAICiwAFd3gTAAICqgV6ttq22Bp7OAGADwACAogFqAGADwACAosABXfcEwACAq4Ferb2tvQaCagBgA8AAgKIBagBgA8AAgKLAAV4QAQXAAICvgV6tlq2WrcYBAAADrZatxgAAAAICAq2WAAAEJ2ADwAD8BQCtlgAABChgA8AA/esAAGADwACAogE/AwgAwACApIAAwEDGcggAwACApoEAwEDGfwkAAMAA/WcAAAAAAQbAAICtgV6tlq2WrcYAACMAAAABA62WrcYAAAAAAAAAYAPAAP3rAUoAAQ8ALsAAgKYAAEDGugBAxusAAAABAsAAgLCBXq4srjK4uAPAAFhHAAABYAHAAP1RAAFgAYJLBATAAICygV6uc656CYJTAGADgksABMAAgLOBXq6Zrp0JgpAAYAOJPgAEwACAtIFerriuvAmCZwBgA8AAgKIABMAAgLWBXq7SruEJtJ0AYAOCUgABBcAAgMCBXrXxtfG2VgCVTwADthW2VgAAAAQEBLYiAAAEgpBgA4k+ALYtAAAEglNgA4JLALY7AAAEgmdgA8AAgKIAtkYAAAS0nWADglIAAGADwACAsAE/BQgBwACAs4AAwEDHiQgBwACAsoEAwEDHlQgBwACAtIIAwEDHoQgBwACAtYMAwEDHrwkBtfHAAP1nAAAAAAYGwACAt4Fer02vVbXsBAEAAAAAAQOvcLXsAAAAAgICr40AAACCkGADiT4Ar58AAACCU2ADglIAAGADwACAsAE+BE6vvwAAAIJnYAPAAICiAE6v1a/lAAC0nWADglIBFq/2Fq/sgK/nwEDIIYDtiUKEUoJYSbACHLAWg7AGwEDIU0gBAAErAMAA/V4+AT2KsHfAQMhEarCPYAPAAICiwAFeEEmwpCWwuIOwqMBAyFNgA4MZPgE9irEbwEDIRGqxM2ADwACAosABXcVJsUMlsV4WsVeDsUfAQMhThFKCWGADg14+Ak6xfrGFAACCZmADg14BJrF+ARaxl4Oxh8BAyFOEUoJYYAODXkmxpSIlsbCEsanAQMjmYAODqQEiJbHXhLHQwEDI5mADg+oAFrHxFLHqwEDI5gQBYAOD6oQehAs+Aj2KstrAQMhEarLyYAPAAICiwAFdxT2Lsv/AQMhTFrMYhLMRwEDI5oT/g2Y+Az2Ks5vAQMhEarOzYAPAAICiwAFd3j2Ls8PAQMhTFrPlg7PVwEDIU4RSglg9ibP1wEDILYOz/8BAyFM+BEAltLkWtLKDtKLAQMhThFKCWGADhxq0orTMASS1BwInwABYSIO098BAyFM9irUQwEDIRGq1KGADwACAosABXfc9i7U1wEDIUxa1V4O1R8BAyFOEUoJYPYm1ZcBAyC2DtW/AQMhTSrWKAR+1lcAAgMAEAASAtcPAQMghgbXJwEDILYK10sBAyESDtdjAQMhTAAbAAIC5gV62W7ZntsYAAIRNAWq2XGADwAD9UQIAAAEDtm22xgAAAAEBAbZ5AAAAgPJdA5nTAVsAAFsBPgE9MLaCH7aMwAD7lwEAASfAAFhJAAbAAIC6gV62y7bXt0QAAIROAWq2zGADwAD9UQIAAAEDtuS3RAAAAAEBAbbwAAAAgPJdA5nTAVsAAFwBPgE9MLb5H7cDwAD7lwEAASfAAFhKAAbAAIC+gV63Sbddt3YBAIPBAWq3SmADwAD9UQIAAAEDt2a3dgAAAAAAAABgA8AA/AUBSrdpARa3bha3aS6CkMAAgLODwYlLBsAAgLuBXrd7t5W4GwMASAFqt3xgA8AA/VECAAABA7eXuBsAAAABAQG3mAAAAIPWWwAAYAPAAPo/AT4CSbelISW3r4C3qcBAy01gA8AAgLBKt9ABKj9Kt+IBIhy37ha36S6CkMAAgLNIAQABFrf3gLfxwEDLTYKQAACJSAAcuAcWt/8uglPAAICySAEAARa4EIC4CsBAy02CUwAAwAD9XgbAAIC8gV64ILgzuLYAACMBarghYAPAAP1RAgAAAQO4O7i2AAAAAAAAAGADwAD96wFKuEcBJAAKJ8AAWEsWuGougpDAAICzJ8AAWEwWuHguglPAAICyJ4CnJ7sXFriPLoJnwACAtCfAAFhNFrilLrSdwACAtSeDIQAAQMgCAEDKOwBAyowAQMrdAEDLJABAy8QAQMw8AAAABgAAAYFeAEDMXwBArT4AQK5zAECz4wBAtpEAQLhUAEC5DgBAvGUAQMVTAEDG+ABAzF0AAAAJAEDMXwAAAAAAAgTAAIDBAIFfAAAMgNoAAFIAAQEBgiaBMQAAgi6CBgCBWQAAm5eCBgCBjQAAm06CBgCBwwAApDYAAIHcAADAAI69AACB9QAAwACoFAAAghAAAMAAmroAAII1AADAAIG3AACCSgAAwABwCQAAgmUAAMAAnFcAAIKGAADAAJwyAAAAAAAGAsAAgMWBX4N5g4iXCAfAAFhOAAABYAHAAP1RAAAAAQXAAIECAAAAAAQAAAMAAAAAAAAAAABgA8AAgMUBPwEJAQDAAP1nAAAAADoGwACAx4Ffg5uDoIO9AALAAFhPAAAAAQODsoO9AAAAAQEBg7cAAACAlmADwAD8BQAAXAAGwACAyIFfg8KDx4PqAALAAFhQAAAAAQOD3IPqAAAAAQEBg+QAAACAlmADwAD6twAAXAAGwACAyYFfg++D9IQTAALAAFhRAAAAAQOEB4QTAAAAAQEBhA0AAACAlmADwAD6PwAAXAAGwACAyoFfhBiEHYRAAALAAFhSAAAAAQOEMoRAAAAAAQEBhDoAAACAlmADwAD96wAAXAAGwACAy4FfhEWESoRtAALAAFhTAAAAAQOEX4RtAAAAAQEBhGcAAACAlmADwAD96wAAXAAGwACAzIFfhHKEd4SMAALAAFhUAAAAAQOEioSMAAAAAAAAAFwABsAAgM2BX4SRhJaE5gACwABYVQAAAAEDhKmE5gAAAAMBAYS2AAAAmtlgA4i4AAKEzwAAAIQdYAPAAPo/AWoAYAPAAP0OeYTdAAAAgVVgA8AA+j8BagBgA8AA/Q55XAAGwACAzoFfhOuE8IU/AALAAFhWAAAAAQOFAoU/AAAAAwEBhQ8AAACa2WADiLgAAoUoAAAAhB1gA8AA+j8BagBgA8AA/Q55hTYAAACBVWADwAD6PwFqAGADwAD9DnlcAAbAAIDPgV+FRIVJhasAAsAAWFcAAAABA4VbhasAAAAEAgKFaAAAAIXMYAOIuACFfQAAAIXNYAOIuAAChZQAAACEHWADwAD6PwFqAGADwAD9DnmFogAAAIFVYAPAAPo/AWoAYAPAAP0OeVwABsAAgNCBX4WwhbWGBgACwABYWAAAAAEDhcqGBgAAAAICAoXfAAAAhJZgA4PqAIX/AAAAhKhgA4LAAABcAAbAAIDRgV+GC4YQhlAAAsAAWFkAAAABA4YhhlAAAAACAgKGLAAAAIJmYAODXgCGSQAAAISoYAOCwAAAXAAGwACA0oFfhlWGWoaaAALAAFhaAAAAAQOGa4aaAAAAAgIChnYAAACCZmADg14AhpMAAACEqGADgsAAAFwABsAAgNOBX4afhqSGxgACwABYWwAAAAEDhrKGxgAAAAEAAAGGuQAAAMAAWFxgA8AA+j8BagBgA8AA/Q55XAAGwACA1IFfhsuG0Ic0AAKvSQAAAAEDhuyHNAAAAAICAocEAAAArIhgA4kFAIcmAAAAhR1dA8AA/KkBYAOIuAAAXAAGwACA1YFfhzmHPodnAALAAFhdAAAAAQOHTodnAAAAAQEBh1sAAACa2WADiLgAAFwABsAAgNaBX4dsh3GHlwACwABYXgAAAAEDh36HlwAAAAEBAYeLAAAAmtlgA4i4AABcAAbAAIDXgV+HnIehh8sAAsAAWF8AAAABA4eyh8sAAAABAQGHvwAAAJrZYAOIuAAAXAAGwACA2IFfh9CH1YfyAALAAFhgAAAAAQOH8IfyAAAAAAAAAFwABsAAgNmBX4f3h/yIIwACwABYYQAAAAEDiBGIIwAAAAEBAYgeAAAAg+5gA4JSAABcAAbAAIDagV+IKIgtiE4AAsAAWGIAAAABA4hMiE4AAAAAAAAAXAAGwACA24FfiFOIWIh5AAK0+gAAAAEDiGeIeQAAAAEBAYh0AAAAgpBgA4i4AABcAAbAAIDcgV+IfoiDiKkAAsAAWGMAAAABA4iXiKkAAAABAQGIpAAAAIKQYAOIuAAAXAAGwACA3YFfiK6Is4jTAALAAFhkAAAAAQOIwYjTAAAAAQEBiM4AAACCkGADiLgAAFwABsAAgN6BX4jYiN2I7AACwABYZQAAAAEDiOqI7AAAAAAAAABcAAbAAIDfgV+I8Yj2iWYAAsAAWGYAAAABA4kHiWYAAAADAwOJFAAAAJrdYAOIuACJLgAAAMAATnFgA4i4AIlQAAAAwABYZ2ADwABwDAAAXAAGwACA4IFfiWuJcInhAALAAFhoAAAAAQOJgonhAAAAAwMDiY8AAACa3WADiLgAiakAAADAAE5xYAOIuACJywAAAMAAWGdgA8AAcAwAAFwABsAAgOGBX4nmieuJ+gACwABYaQAAAAEDifiJ+gAAAAAAAABcAAbAAIDigV+J/4oEihgAAsAAWGoAAAABA4oWihgAAAAAAAAAXAAGwACA44Ffih2KIopFAALAAFhrAAAAAQOKM4pFAAAAAQEBikAAAACCkGADiLgAAFwABsAAgOSBX4pKik+KkQACwABS9AAAAAEDimKKkQAAAAICAopvAAAAgpBgA4i4AIqKAAAAhKhgA4LAAABcAAbAAIDlgV+KloqbisUAAsAAWGwAAAABA4q2isUAAAABAQGKwAAAAIPuYAODfAAAXAAGwACA5oFfisqKz4skAALAAFhtAAAAAQOK8oskAAAAAgICiwMAAACD7mADg3wAixsAAACGBWADwACO4AAAXAAGwACA54FfiymLLotDAALAAFhuAAAAAQOLQYtDAAAAAAAAAFwABsAAgOiBX4tIi02L9wACwABYbwAAAAEDi2uL9wAAAAQEBIuCAAAAmNtgA4OpAIuZAAAAqkxgA8AA/AUAi8EAAACqTV0DwAD8qQFgA8AA/esAi+kAAACFHV0DwAD8qQFgA4i4AABcAAbAAIDpgV+L/IwBjCkAAsAAWHAAAAABA4wXjCkAAAABAQGMJAAAAIKQYAOIuAAAXAAGwACA6oFfjC6MM4xGAALAAFhxAAAAAQOMRIxGAAAAAAAAAFwABsAAgOuBX4xLjFCNOAACwABYcgAAAAEDjFuNOAAAAAcGBoxtAAAAmNtgA4NeAIyRAAAAgpBgA4jzAIyhAAAAqkxgA8AA/AUAjMkAAACqTV0DwAD8qQFgA8AA/esAjPEAAACFHV0DwAD8qQFgA4i4AI0bAAAAhKhgA4LAAAGNLwAAAIQdYAPAAPo/AWoAYAPAAP0OeVwABsAAgOyBX409jUKNrgACwABYcwAAAAEDjVyNrgAAAAMDA41mAAAAmcpgA4MZAI19AAAAhR1dA8AA/KkBYAOIuACNpwAAAISoYAOCwAAAXAAGwACA7YFfjbONuI54AAK7gAAAAAEDjdCOeAAAAAUFBY3lAAAAgkVgA4PqAI33AAAAqkxgA8AA/AUAjh8AAACqTV0DwAD8qQFgA8AA/esAjkcAAACFHV0DwAD8qQFgA4i4AI5xAAAAhKhgA4LAAABcAAbAAIDugV+OfY6CjzcAAsAAWHQAAAABA46hjzcAAAAEBASOwAAAALNUYAOIeACO2QAAAKpMYAPAAPwFAI8BAAAAqk1dA8AA/KkBYAPAAP3rAI8pAAAAhR1dA8AA/KkBYAOIuAAAXAAGwACA74FfjzyPQZAWAAK7cAAAAAEDj1qQFgAAAAYGBo9uAAAAhYJgA4i4AI+QAAAAvAFgA8AAcAwAj6gAAACAvWADiIMAj7gAAACqTGADwAD8BQCP4AAAAKpNXQPAAPypAWADwAD96wCQCAAAAIUdXQPAAPypAWADiLgAAFwABsAAgPCBX5AbkCCQ+gACwABYdQAAAAEDkDqQ+gAAAAYGBpBOAAAAhYJgA4i4AJBwAAAAvAFgA8AAcAwAkIoAAACCRWADg14AkJwAAACqTGADwAD8BQCQxAAAAKpNXQPAAPypAWADwAD96wCQ7AAAAIUdXQPAAPypAWADiLgAAFwABsAAgPGBX5D/kQSRqAACwABYdgAAAAEDkR6RqAAAAAQEBJEyAAAAhYJgA4i4AJFKAAAAqkxgA8AA/AUAkXIAAACqTV0DwAD8qQFgA8AA/esAkZoAAACFHV0DwAD8qQFgA4i4AABcAAbAAIDygV+RrZGykgsAAsAAWHcAAAABA5HEkgsAAAADAwOR2AAAAIWCYAOIuACR9AAAALwBYAPAAHAMAJIGAAAAgL1gA4iDAABcAAbAAIDzgV+SEJIVknMAAsAAWHgAAAABA5IoknMAAAADAwOSPAAAAIWCYAOIuACSWAAAALwBYAPAAHAMAJJsAAAAgkVgA4NeAABcAAbAAID0gV+SeJJ9ktYAAsAAWHkAAAABA5KPktYAAAADAwOSowAAAIWCYAOIuACSvwAAALwBYAPAAHAMAJLRAAAAgL1gA4iDAABcAAbAAID1gV+S25Lgkz4AAsAAWHoAAAABA5Lzkz4AAAADAwOTBwAAAIWCYAOIuACTIwAAALwBYAPAAHAMAJM3AAAAgkVgA4NeAABcAAbAAID2gV+TQ5NIk8oAAsAAWHsAAAABA5Nfk8oAAAAEBASTaAAAAIC9YAOIgwCTcgAAAKpMYAPAAPwFAJOaAAAAqk1dA8AA/KkBYAPAAP3rAJO8AAAAhR1dA8AA/KkBYAOIuAAAXAAGwACA94Ffk8+T1JPyAALAAFh8AAAAAQOT5JPyAAAAAQEBk+0AAACAvWADiIMAAFwABsAAgPiBX5P3k/yUGgACwABYfQAAAAEDlAyUGgAAAAEBAZQVAAAAgL1gA4iDAABcAAbAAID5gV+UH5QklOAAAsAAWH4AAAABA5Q8lOAAAAAFBQWUUwAAAINEYAODqQCUcAAAAIJFYAODqQCUggAAAKpMYAPAAPwFAJSqAAAAqk1dA8AA/KkBYAPAAP3rAJTSAAAAhR1dA8AA/KkBYAOIuAAAXAAGwACA+oFflOWU6pVoAALAAFMVAAAAAQOVAJVoAAAABAQElRAAAACD7mADhNkAlSkAAACCZ2ADwACavQCVQQAAAIWCYAOIuACVWwAAAMAASnhgA4i4AABcAAbAAID7gV+VsZW2leIAAsAAWH8AAAABA5XNleIAAAABAQGV3QAAAIPuYAODqQAAXAAGwACA/IFfleaV65YLAALAAFiAAAAAAQOV/JYLAAAAAQEBlgYAAACD7mADg3wAAFwABsAAgP2BX5YPlhSWPAACwABYgQAAAAEDlimWPAAAAAEBAZY3AAAAg+5gA4PqAABcAAbAAID+gV+WQJZFlnsAAsAAWIIAAAABA5ZhlnsAAAABAQGWdgAAAIPuYAOFvQAAXAAGwACA/4Ffln+WhJa4AALAAFiDAAAAAQOWn5a4AAAAAQEBlrMAAACD7mADh+QAAFwABsAAgQCBX5a8lsGXBgACwABYhAAAAAEDlueXBgAAAAEBAZcBAAAAg+5gA4XQAABcAAAAQM1pAEDNnABAzc8AQM4CAEDONQBAzmgAQM6NAEDO7ABAz0sAQM+2AEDP8wBA0DAAQNBtAEDQqwBA0O0AQNEeAEDRTwBA0YAAQNGlAEDR1gBA0fsAQNIqAEDSWwBA0owAQNKxAEDTAABA008AQNN0AEDTmQBA08oAQNQHAEDUOABA1HcAQNScAEDVAwBA1TQAQNVZAEDV7wBA1j8AQNawAEDXFwBA15YAQNgXAEDYfgBA2MkAQNkUAEDZXwBA2aoAQNoRAEDaQgBA2nMAQNrmAEDbPwBA23AAQNuhAEDb0gBA3AMAQNw0AEDcZQAAADoCwACBA4FflwuXGsAAT2kHwABYhQAAAWABwABwGQABYAHAAIDFAQTAAIEFgV+XjZefCbgsAWqXaWADwAD9UQJgA8AAgcEAAQXAAIE3gV+XpJekmEkAAAADl7WYSQAAAAMDA5fJAAAAhsxgA5tRAJfyAAAAq2hgA5ujAJgHAAAEuCxgA8AAgcEAAGADwACBAwE/AggBwACBBYIAwEDd0AkAmCPAAHDDAgACgJgpwEDduIGYOsBA3cQALwbAAIEHgV+YTphfmKwAAMAATlwBaphPYAPAAP1RAgAAAQOYb5isAAAAAQEBmH4AAACD7mADhoYAAFwBPgE9HJiKLsAAWE8BAAEWmKKAmJ3AQN47gJaGiADAAIDHBsAAgQiBX5ixmMKZGAAAwABOXQFqmLJgA8AA/VECAAABA5jVmRgAAAABAQGY5wAAAIPuYAOGjwAAXAE+AT0cmPMuwABYUAEAARaZDoCZCcBA3peAloaRAMAAgMgGwACBCYFfmR2ZLpl+AADAAE5eAWqZHmADwAD9UQIAAAEDmT+ZfgAAAAEBAZlPAAAAg+5gA4aYAABcAT4BPRyZWy7AAFhRAQABFpl0gJlvwEDe84CWhpoAwACAyQbAAIEKgV+Zg5mUmeoAAMAATl8BapmEYAPAAP1RAgAAAQOZp5nqAAAAAQEBmbkAAACD7mADhn0AAFwBPgE9HJnFLsAAWFIBAAEWmeCAmdvAQN9PgJaGfwDAAIDKBsAAgQuBX5nvmgCaVgAAwABOYAFqmfBgA8AA/VECAAABA5oTmlYAAAABAQGaJQAAAIPuYAOGqgAAXAE+AT0cmjEuwABYUwEAARaaTICaR8BA36uAloasAMAAgMsGwACBDIFfmluabJqyAADAAE5hAWqaXGADwAD9UQIAAAEDmn2asgAAAAEBAZqNAAAAg+5gA4ahAABcAT4BPRyamS7AAFhUAAAAAMAAgMwGwACBDYFfmreayJthAADAAE5iAWqauGADwAD9UQIAAAEDmtmbYQAAAAEBAZrpAAAAg+5gA4bdAABcAT4BPRya9S7AAFhVAwABFpsOgJsJwEDgVYXDhuAChB0WmzKAmy3AQOBVhB2G34FVFptVFptJgJtEwEDgVYW/huGBVcAA/IvAAIDNBsAAgQ6BX5tmm3ecDQAAwABOYwFqm2dgA8AA/VECAAABA5uHnA0AAAABAQGblgAAAIPuYAOG6gAAXAE+AT0cm6IuwABYVgMAARabuoCbtcBA4NqFw4btAoQdFpvegJvZwEDg2oQdhuyBVRacARab9YCb8MBA4NqFv4bugVXAAPyLwACAzgbAAIEPgV+cEpwjnMAAAMAATmQBapwTYAPAAP1RAgAAAQOcM5zAAAAAAQEBnEIAAACD7mADhvcAAFwBPgE9HJxOLsAAWFcEAAIWnGaAnGHAQOFfhcyG+hacdICcb8BA4V+FzYb7AoQdFpyVgJyQwEDhX4QdhvmBVRactBacrICcp8BA4V+D0Ib8gVXAAPyLwACAzwbAAIEQgV+cxZzWnhAAAMAATkMBapzGYAPAAP1RAgAAAQOc5Z4QAAAAAgICnPMAAACD7mADhVcAnQUAAAC50mADiLgAAFwBPgJOnSGdKAAAgkVgA4NeARadL4CdKsBA4fKCRYVbSZ07IiWdRoKdP8BA4hBgA4PqABydZRadYBSdWcBA4hACAWADg+qCZ4PtSAEAAWqdeWADhCeExQDAAP1ePgE9HJ2JLsAAWFgCAAIUnZ/AQOIQAgFgA4PqHp2nwACcOgEAAYCducBA4fIAAMAAgNA+AT0cndQuwABYWQIAAoKd5sBA4hAene7AAJw6AQABgJ4AwEDh8gAAwACA0QbAAIERgV+eFZ4mnqEAAMAATkQBap4WYAPAAP1RAgAAAQOeNZ6hAAAAAgICnkMAAACD7mADhWcAnlUAAACFzWADiLgAAFwBPgE9HJ5mLsAAWFoCAAIWnn2AnnjAQOLxgkWFbB6ehcAAnDoBAAGAnpfAQOLxAADAAIDSBsAAgRKBX56mnrefIQAAwABOewFqnqdgA8AA/VECAAABA57MnyEAAAABAQGe4AAAAIPuYAOHkgAAXAE+AT0cnuwuwABYWwEAAAHAAFhcIRyfFRafDYCfCMBA42sih5VIAQABKwDAAP1ewACA0wbAAIETgV+fJp83n+oAAMAATlgBap8nYAPAAP1RAgAAAQOfSp/qAAAAAwMDn1wAAACD7mADheQAn3gAAACsiGADiQUAn5QAAAC50mADiLgAAFwBPgE9HJ+mLq9JAgACgZ/DwEDj5Baf2ICf08BA49iFHYXnAMAAgNQGwACBFIFfn++f9KYuAADAAFiGAAAAAQOgBaYuAAAAAQEBoBYAAACCamADhIMAAFwBPgNOoDWgQQAAhVRgA4SfARagTICgQ8BA5EeFVISGTqBpoHQAAIU6YAOIuAEWoH+AoHbAQORHhTqEjEFHoJCBoJjAQORZBQGgwWqgwWADhJ+E9gA+AUKgzwABoPBqoPBgA4SfhQsAPgROoQ6hGgAAmtlgA4i4AWqhImADiM+EiEmhPCWhS4KhQMBA5HVgA4jzPgFJoWwcoYUWoXsUoXDAQOR1AgFgA4jzhOiI+UgBAAEWoaIWoZgWoYguhszAAI8uh2ebU5renKMAwAD9Xj4BPYuhv8BA5L8WoeYWodgUoc3AQOR1AgFgA4jzhR2I94MZwAD8jT8/PRyiCy7AAFhdAQABg6IcwEDkvwDAAIDVQqIyAAGiVGqiVGADhJ+FGgA+BE6ib6J7AACa2WADiLgBaqKDYAOIz4SISaKdJaKsgqKhwEDkdWADiPM+AUmizRyi5hai3BSi0cBA5HUCAWADiPOE6Ij5SAEAARajAxai+Rai6S6GzMAAjy6HZ5tTmticnADAAP1ePgE9i6MgwEDleBajRxajORSjLsBA5HUCAWADiPOFHYj3gxnAAPyNSaNfHKN4FqNuFKNjwEDkdQIBYAOI84ToiPlIAQABFqOjFqOZFqOJLobMwACPLodnm1Oa4ZybAMAA/V4+AT2Lo77AQOV4FqPlFqPXFKPMwEDkdQIBYAOI84UdiPeDGcAA/I0/Pz0cpAouwABYXgEAAYOkGMBA5XgAwACA1kKkLgABpFBqpFBgA4SfhSkAPgROpG+kewAAmtlgA4i4AWqkg2ADiM+EiEmknSWkrIKkocBA5HVgA4jzPgFJpM0cpOYWpNwUpNHAQOR1AgFgA4jzhOiI+UgBAAEWpQMWpPkWpOkuhszAAI8uh2ebU5rgnLYAwAD9Xj4BPYulHsBA5pMWpUUWpTcUpSzAQOR1AgFgA4jzhR2I94MZwAD8jT8/PRylai7AAFhfAQABg6V8wEDmkwDAAIDXQqWSAAGltGqltGADhJ+FOAA+AT0epcq1wwIAAmql02ADtdXAAMVDJKYjAifAAFiHgaYWwEDkWQAGwACBFYFfpjOmRKaiAADAAE5bAWqmNGADwAD9UQIAAAEDpl2mogAAAAEBAaZ1AAAAg+5gA4YWAABcAT4BPRymgS7AAFhgAAAAAMAAgNgGwACBFoFfpqemuKc6AADAAE59AWqmqGADwAD9UQIAAAEDptGnOgAAAAEBAabpAAAAg+5gA4h4AABgA8AA/Q4BPgI9HKb1LsAAWGEBAAGApwvAQOfqAMAAgNk9HKcWLsAAWIYBAAEWpy2ApyjAQOfqgmqIewDAAIEUBsAAgReBX6c/p1Cn0AAAwABOZQFqp0BgA8AA/VECAAABA6dop9AAAAABAQGnfwAAAIPuYAOHHwAAXAE+Aj0cp4suwABYYQEAAYCnocBA6GMAwACA2T0cp6wuwABYhgEAARanw4CnvsBA6GOCaochAMAAgRQGwACBGIFfp9Wn5qh0AADAAE46AWqn1mADwAD9UQIAAAEDp/+odAAAAAEBAagXAAAAg+5gA4hTAABcAT4BSagjHKg4FqgsgKgnwEDo14UHiFtIAQABKwDAAP1ePgE9HKhJLsAAWGIAAAAAwACA2j8GwACBGYFfqHmoiqjXAADAAE5UAWqoemADwAD9UQIAAAEDqJyo1wAAAAEBAaitAAAAg+5gA4ZXAABcAT4BPRyouS60+gEAARaozoCoycBA6UaCkIZaAMAAgNsGwACBGoFfqNyo7aobAADAAE4lAWqo3WADwAD9UQIAAAEDqP+qGwAAAAICAqkQAAAAg+5gA4ZjAKkiAAAAwABOWmADiLgAAFwBPgJJqTUcqUkWqTkuhszAAI8umucCAAKBqVXAQOmsFqlngKliwEDpoIKQhmcAm4U+AUqplAA/SammFqmvgKmqwEDpoIXdhmo+AT0cqcQuwABYYwEAARap3oCp2cBA6aCCkIZnAMAAgNw+AT0cqfguwABYZAEAARaqDICqB8BA6aCCkIZnAMAAgN0GwACBG4FfqiCqMaplAADAAE5rAWqqIWADwAD9UQIAAAEDqjyqZQAAAAEBAapGAAAAg+5gA4bSAABcAT4BPRyqUi7AAFhlAAAAAMAAgN4GwACBHIFfqmqqe6voAADAAE5wAWqqa2ADwAD9UQIAAAEDqo+r6AAAAAMDA6qiAAAAg+5gA4fWAKq0AAAAmt1gA4i4AKrUAAAAwABOcWADiLgAAFwBPgFJqugWqvGAquzAQOrAhjCH3D4BPRyrAi7AAFhoAwADgasVwEDqzIKrI8BA6tgeqzvAAHALAQABgqtYwEDq2AAAwACA4D4BPRyrey7AAFhmAwADgauNwEDqzIKrm8BA6tgeq7PAAHALAQABgqvQwEDq2AAAwACA3wbAAIEdgV+r7av+rMsAAMAATngBaqvuYAPAAP1RAgAAAQOsCazLAAAAAQEBrBMAAACD7mADiCkAAFwBPgM9HKwfLsAAWGkAAAAAwACA4UmsNCEcrEgWrD2ArDjAQOuOhkWILUgBAAErAMAA/V4+AT0crFkuwABYagAAAADAAIDiP0mseSElrIgWrIKArH3AQOuOhkSIK2ADiM8+AT0crKQuwABYawEAARasu4CstsBA646GRIgrAMAAgOM/BsAAgR6BX6zQrOGtSQAAwABOeQFqrNFgA8AA/VECAAABA6zyrUkAAAABAQGtAgAAAIPuYAOGtQAAXAE+AT0crQ4uwABS9AIAAhatJ4CtIsBA7EqCkIa3Hq0twACcOgEAAYCtP8BA7EoAAMAAgOQGwACBH4FfrU6tX63BAADAAE5sAWqtT2ADwAD9UQIAAAEDrXWtwQAAAAEBAa2KAAAAg+5gA4REAABcAT4BPRytli7AAFhsAQABFq23gK2ywEDsuISUhEkAwACA5QbAAIEggV+txq3Xrh0AAMAATnoBaq3HYAPAAP1RAgAAAQOt6K4dAAAAAQEBrfgAAACD7mADh04AAFwBPgE9HK4ELsAAWG4AAAAAwACA5wbAAIEhgV+uIq4zr0YAAMAATm0Baq4jYAPAAP1RAgAAAQOuT69GAAAAAgICrnEAAACD7mADhGIAroUAAADAAE4oYAPAAHDEAABcAT4BPRyumi7AAFhvBAAEFq7HgK7CwEDtYoJFhGcWrvEWruYWrtyArtfAQO1iW4RlhZOFe2HAAPzYHq8BwACAxAEAARavGYCvFMBA7WJbhGUAFq88Fq8ygK8twEDtYluEZYVthXoAwACA6AbAAIEigV+vS69cr74AAMAATn4Baq9MYAPAAP1RAgAAAQOva6++AAAAAQEBr4MAAACA7WADiFMAAFwBPgE9HK+ULsAAWHABAAEWr7WAr6vAQO4WgpCIWQDAAIDpBsAAgSOBX6/Dr9SwcQAAwABOfwFqr8RgA8AA/VECAAABA6/jsHEAAAABAQGv9AAAAIPuYAOEgwAAXAE+AUawALA4sBYAAACA7WADiU8AFrAogLAjwEDucoS+hIg+AT0csEAuwABYcAEAARawYYGwV8BA7oiFb4lUAMAAgOkGwACBJIFfsHawh7DVAADAAE6BAWqwd2ADwAD9UQIAAAEDsJiw1QAAAAEBAbCoAAAAg+5gA4OpAABcAT4BPRywtC7AAFh/AQABgLDMwEDu7wDAAID7BsAAgSWBX7DasOuyPgAAwABOggFqsNtgA8AA/VECAAABA7D2sj4AAAABAQGxAAAAAISUYAODfAAAXAE+Az0csQ0uwABYcAEAARaxKoCxJMBA70SCkIN+AMAAgOlJsTUhHLFLFrE/gLE5wEDvRIUHg4BIAQABKwDAAP1ePgFJsVwiIiEWsWeAsWHAQO9EhQKDkQAhFrGMgLGGwEDvRIQdg4sAISWxsxaxp4CxocBA70SFB4OAYAOGoT4BPRyx0S7AAFhxAAAAAMAAgOo/PgE9HLIBLsAAWFQAAAAAwACAzD0csiIuwABYgAEAAYCyNMBA70QAwACA/AbAAIEmgV+yQ7JUstEAAMAAToABarJEYAPAAP1RAgAAAQOyY7LRAAAAAQEBsnEAAACElmADg+oAAFwBPgI9HLKCLsAAWIYBAAEWsp6AspTAQPA7gmqD7wDAAIEUPRyyrS7AAFiBAQABgLLDwEDwOwDAAID9BsAAgSeBX7LWsue0rAAAqkUBarLXYAPAAP1RAgAAAQOzArSsAAAAAwMDsxwAAACD7mADhdAAszYAAADAAE4oYAPAAHDEALNRAAAAudJgA4i4AABcAT4CPRyzYy7AAFhyBwAGFrN9gLN4wEDwrYJFhdcWs5KAs43AQPCtha2F2BazxRazuhazsICzq8BA8K1bhdOFk4V7YcAA/Nges9XAAIDEAQABFrPtgLPowEDwrVuF0wAWtBAWtAaAtAHAQPCtW4XThW2Feh60H8AAnDoBAAGAtDHAQPCtAAGEHRa0ToC0ScBA8K2EHYXUwACA60m0XBa0ZYC0YMBA8K2EHYXUPgE9HLR2LsAAWIQBAAGAtJ3AQPCtAMAAgQA/BsAAgSiBX7SxtMK7ZAAAwABORQFqtLJgA8AA/VECAAABA7TYu2QAAAADAwO07QAAAIPuYAOFvQC1BwAAAMAATihgA8AAcMQAtSIAAACFOmADiLgAAFwBPgVOtTi1SgAAwABYiGADwAD8BQEWtWYWtVsWtVGAtUzAQPHJW4XAhZOFe2HAAPzYTrV/tY4AAKpNXQPAAPypAWADwAD96wEetZDAAIDEAQABFrWogLWjwEDxyVuFwABOtcq12AAAhR1dA8AA/KkBYAOIuAEWtekWtd+AtdrAQPHJW4XAhW2Fekm19By2CRa2BBa1/YC1+MBA8cmCRYXEgmeD7UgBAAFqth1gA4QngdEAwAD9Xj4BPRy5mi7AAFhyBwAGFrm2gLmxwEDxyYJFhcQfucyJAwIAAha56Ra54oC53cBA8cmCRYXEhP+DZoW5+cBA8lQAg7oTwEDx94S6MMBA8iUWulkWuk+AukrAQPHJW4XAhW2Feh66asAAnDoBAAGAunzAQPHJAAGEHRa6m4C6lsBA8cmEHYXBwACA6z4BPRy6uC67gAUABRa61oC60cBA8cmCRYXEg7rewEDx94S68cBA8iWFuwvAQPJUHrsawACcOgEAAYC7LMBA8ckAAMAAgO09HLs+LsAAWIIBAAGAu1vAQPHJAMAAgP4GwACBKYFfu2m7esAAQ4IAAMAATj0BartqYAPAAP1RAgAAAQO7kMAAQ4IAAAAEBAS7rAAAAIPuYAOFmAC7xAAAAIWCYAOIuAC75gAAAMAATihgA8AAcMQAvAcAAACFOmADiLgAAFwBPgVOvB28LwAAwABYiGADwAD8BQEWvEsWvEAWvDaAvDHAQPPBW4WchZOFe2HAAPzYTrxkvHMAAKpNXQPAAPypAWADwAD96wEevHXAAIDEAQABFryNgLyIwEDzwVuFnABOvK+8vQAAhR1dA8AA/KkBYAOIuAEWvM4WvMSAvL/AQPPBW4WchW2Fek6857zwAACFf2ADhK4BFrz3gLzywEDzwYV/hZpJvQUiIiW9Eoe9CcBA9IFgA4TBABa9QRa9OBS9L8BA9IEHAWADhMGCbITDhBuIYwAlvW0WvWYWvV0UvVTAQPSBBwFgA4TBgmyEw4RSglhgA4h4PgE9HL2QLsAAWHQEAAQmvcIBFr3CFr25FL2wwED0gQcBYAOEwYJshMOEUoJYYAOIeIS91MBA8/uFvefAQPQphr33wED0WADAAIDuPgNOvii+MQAAvAFgA8AAcAwBHr4zwABwCwEAAYG+UMBA880ATr5wvoAAAIWBYAODXgEWvoeAvoLAQPPBhYGFn0m+nhy+shS+osBA9V4JAEgBAAErAMAA/V4+Aj0cvsUuu3AGAAaBvt/AQPPNFL7twED1PAgAFr78gL73wEDzwYC9hZuEvw7AQPP7hb8hwED0KYa/McBA9FgAwACA70m/2yIcwABAAh6/35I+AQABFr/8Fr/3gL/ywEDzwYC9hZuAvYiGAEgBAAErAMAA/V4AJcAAQCaBwABAGcBA881gA4jPPgE9HMAAQI0uwABYdgQABGrAAECuYAOIz4SIhMAAQMDAQPP7hcAAQOHAQPQphsAAQPHAQPRYAMAAgPE/PgFJwABBIiIlwABBNhTAAEEmwED1XgkAYAODfAEiJcAAQWEUwABBUcBA9V4JAGADg+oAHMAAQZkWwABBlBTAAEGEwED1XgkBYAOD6oJng+1IAQABasAAQa1gA4QnhKcAwAD9Xj4CPRzAAEHBLsAAWHUGAAaBwABB3MBA880UwABB6sBA9TwIABTAAEH0wED1XgkAhMAAQhPAQPP7hcAAQibAQPQphsAAQjbAQPRYAMAAgPA9HMAAQlAuwABYdgQABBbAAEJ7FMAAQmvAQPVeCQCFA4NwhMAAQpXAQPP7hcAAQqjAQPQphsAAQrjAQPRYAMAAgPE+AT0cwABC4y7AAFh1BgAGgcAAQv7AQPPNFMAAQwzAQPU8CAAUwABDFsBA9V4JAITAAEM1wEDz+4XAAENIwED0KYbAAENYwED0WADAAIDwBsAAgSqBX8AAQ4fAAEOYwABFHgAAwABOJwFqwABDiGADwAD9UQIAAAEDwABDtMAARR4AAAAEBATAAEPWAAAAg+5gA4UhAMAAQ+4AAACFgmADiLgAwABEEAAAAMAATihgA8AAcMQAwABEMQAAAIU6YAOIuAAAXAE+AT0cwABEQy7AAFh1BgAGgcAARGfAQPfgasAARItgA8AAcAzAAPMNFsAARJ+AwABEmsBA99KCRYUnFsAARMkWwABEvhbAAES0gMAARK/AQPfSW4UlhZOFe2HAAPzYHsAARNnAAIDEAQABFsAARPGAwABE7MBA99JbhSUAFsAARRQWwABFCoDAAEUFwED30luFJYVthXoAwACA8AbAAIErgV/AAEUjwABFNMAARqIAAMAAThwBasAARSRgA8AA/VECAAABA8AARUXAAEaiAAAAAwMDwABFXAAAAIPuYAOE2QDAAEVuAAAAhYJgA4i4AMAARYgAAAC50mADiLgAAFwBPgJOwABFqMAARbEAALwBYAPAAHAMAR7AAEWzwABwCwEAAYHAAEXQwED48gBJwABF4yEcwABF/BbAAEXsgMAARefAQPjkhYGE30gBAAErAMAA/V4+AT0cwABGDS7AAFh4AwADgcAARiHAQPjyg8AARi/AQPkUFsAARj6AwABGOcBA+OSFgYTfAMAAgPM+AT0cwABGYy7AAFh3AwADgcAARnbAQPjyg8AARoTAQPkUFsAARpOAwABGjsBA+OSAvYTcAMAAgPIGwACBLIFfwABGp8AARrjAAEdwAADAAE4mAWrAAEaoYAPAAP1RAgAAAQPAAEbPwABHcAAAAAMDA8AARuUAAACD7mADhP4AwABG/QAAAIWCYAOIuADAAEcXAAAAudJgA4i4AABcAT4BPRzAAEcpLsAAWHgDAAOBwABHPcBA+hxqwABHWWADwABwDMAA8w0WwABHZYDAAEdgwED6DoJFhQMAwACA8wbAAIEtgV/AAEd1wABHhsAASPMAAMAATiMBasAAR3ZgA8AA/VECAAABA8AAR5fAAEjzAAAAAwMDwABHrgAAAIPuYAOE6wDAAEfAAAAAhYJgA4i4AMAAR9oAAACFzWADiLgAAFwBPgJOwABH+cAASAIAALwBYAPAAHAMAR7AAEgEwABwCwEAAYHAAEghwED6wABJwABINCEcwABITRbAAEg9gMAASDjAQPqyhYGE8kgBAAErAMAA/V4+AT0cwABIXi7AAFh6AwADgcAASHLAQPrAg8AASIDAQPriFsAASI+AwABIisBA+rKFgYTyAMAAgPU+AT0cwABItC7AAFh5AwADgcAASMfAQPrAg8AASNXAQPriFsAASOSAwABI38BA+rKAvYTuAMAAgPQGwACBLoFfwABI+MAASQnAAEnAAADAAE4qAWrAAEj5YAPAAP1RAgAAAQPAAEkgwABJwAAAAAMDA8AASTYAAACD7mADhQ8AwABJTgAAAIWCYAOIuADAAEloAAAAhc1gA4i4AABcAT4BPRzAAEl5LsAAWHoDAAOBwABJjcBA++pqwABJqWADwABwDMAA8w0WwABJtYDAAEmwwED73IJFhRUAwACA9QbAAIEvgV/AAEnFwABJ1sAAStwAAMAATkgBasAAScZgA8AA/VECAAABA8AASfHAAErcAAAAAwMDwABKCwAAAIPuYAOFqwDAAEolAAAAwABOKGADwABwxADAAEpAAAAAhTpgA4i4AABcAT4BPRzAAEpSLsAAWHsEAAQWwABKb4DAAEpqwED8gIC9ha0WwABKjxbAAEqEFsAASnqAwABKdcBA/IBbha6Fk4V7YcAA/NgewABKn8AAgMQBAAEWwABKt4DAAEqywED8gFuFrgAWwABK0hbAAErIgMAASsPAQPyAW4WuhW2FegDAAID2BsAAgTCBX8AASuHAAErywABLZwAAwABORgFqwABK4mADwAD9UQIAAAEDwABLCMAAS2cAAAACAgLAAEskAAAAg+5gA4U0AMAASzYAAAC50mADiLgAAFwBPgE9HMAAS0guwABYfAEAARbAAEtegMAAS1nAQP1sgL2FNgDAAID3BsAAgTGBX8AAS2zAAEt9wABL6gAAwABORwFqwABLbWADwAD9UQIAAAEDwABLk8AAS+oAAAACAgLAAEuoAAAAg+5gA4VFAMAAS7oAAACFzWADiLgAAFwBPgE9HMAAS8suwABYfQEAARbAAEvhgMAAS9zAQP3qgL2FRwDAAID4BsAAgTKBX8AAS+/AAEwAwABNFgAAwABObgFqwABL8GADwAD9UQIAAAEDwABMFsAATRYAAAACAgLAAEwyAAAAg+5gA4RTAMAATEYAAADAAE4oYAPAAHDEAABcAT4BPRzAAExbLsAAWH4FAAUmwABMggEWwABMgoDAAEx9wED+aIRSglhgA4OpFsAATJeAwABMksBA/miCRYRYFsAATMEWwABMthbAAEysgMAATKfAQP5oW4RWhZOFe2HAAPzYHsAATNHAAIDEAQABFsAATOmAwABM5MBA/mhbhFYAFsAATQwWwABNAoDAAEz9wED+aFuEVoVthXoAwACA+QbAAIEzgV/AAE0bwABNLMAATbIAAIY0AWrAAE0cYAPAAP1RAgAAAQPAAE1AwABNsgAAAAEBAcAATVQAAACD7mADh+QAAGADwAD9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wABIlMBCds8IHsAASKjAAPyxAgFgA8AAYssCFsAASOsWwABI3IDAAEjXwEJypIS+hIhhwAD82DTAAEj9A8AASP3AAEkrAAAAAQEBwABJAgAAACdgA8AA/AUAAGADwABiywFKwABJDAEfwABJEMAAYt8BAAEUwABJJcBCd+sKAAAAT8AASTXAAEk+AAABveNhAwFgA8AAYmZgA8AAYmYAA8AASUPAAEmVAAAAAQEBwABJTQAAAIKQYAPAAGJmAABgA8AAYmYBPgFKwABJXQEcwABJaRTAAElkwEJ4TgsAveMCAAIUwABJb8BCds8IABTAAEl+wEJ3CwkAAMAAYng9icAASZ7AQnK9HMAASbAUwABJq8BCeCYKACABAAGBwABJscBCcr0AAD2KwABJxMBCczkcwABJ7xzAAEnkgsAASdXAQnM5gKsBAWADwABiZgEUwABJ6MBCeCYKAADAAPxygK0AAAAAwAD8fT2LwABJ/8BCc2AcwABKOhzAAEovg8AAShjAQnNggKsBAWADwABiZgEUwABKM8BCeCYKAADAAPxygK0AAAAAwAD8fT2OwABKSsBCdTccwABKfxzAAEp0hsAASmDAQnU3gKsBAWADwABiZgEUwABKeMBCeCYKAADAAPxygK0AAAAAwAD8fUXAAEqPAcAASpjAAEqeAAAnYAPAAPwFAZMBHMAASqkUwABKo8BCeZMLAGMBAAEWwABKuRTAAEqrwEJ2zwgAYcAA/NgAwAD9MgEVwABKwcBCeZMLHMAASsYUwABKwcBCeZMLAGQBAAGUAMAA/So+AT0XwABK6RzAAErhFMAAStTAQnbPCABLAQABFMAASuLAQnmTCwAAwAD8uIVvHMAASwIUwABK/cBCeCYKACABAAEcwABLAy7AAEw9AQABFsAASyocwABLIhbAAEsUgMAASw/AQnKkhL6EiEsBAAEUwABLI8BCeZMLAADAAPy4hW+JVADAAIQfAADAAGLVPgE9FcAAS07AQnbPCGrAAEteXQPAAPypAWADwABiy8ABICBKwABLiQEfwABLlMAAYxEGAAaBwABLocBCcr2CwABLrcBCczmDwABLvcBCc2CFwABL3cBCdRCGwABL7sBCdTcUwABMA8BCds8IAAAGwACEJIFpwABMGsAATCjAAE1AAADAAFb5AAAAAQPAAEw8wABNQAAAAAQCAsAA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gLsBAAGAwACiL8BCyzgAwAD8vkrAAKI8ARzAAKJRFsAAokMuom/AAIPTwABMNwICYAPAAI56YAPAAKfAAibAAKJlARzAAKJlLsAAVsoDAAMcwACieC7AAFbgAQABgcAAoonAQsupAMAAhEIWwACilIDAAKKPwELLOIC9iVOCwACimsBCy9cAwACEWGADwACOeh/AAKKwwACnywEAAYDAAKLCwELLOAAAwACOqT9JwACi1CXAAKLkFsAAot2AwACi2MBCyziEUoJYYAOEgz4DTsAAoxDAAKMVAADAAFGLYAOEgwEmwACjEAEWwACjHIDAAKMXwELLOIRSglhgA4SDTsAAoy7AAKM0AAAnYAPAAPwFARzAAKNKFsAAozuBwACjNsBCzNCEvoSIgLsBAAGAwACjUsBCyzgAwAD8vknAAKNfJcAAo28WwACjaIHAAKNjwELM0IRSglhgA4OpPgNOwACjm8AAo6cAAJjbYAODqQEmwACjmwEWwACjroHAAKOpwELM0IRSglhgA4OpTsAAo8fAAKPLAACZymADgxkBFsAAo9mDwACjzcBCzV+E/4NmSsAAo/EBHMAAo/guwABW5QEAARzAAKQiFsAApBSEwACkEMBCzY2EvoMoSwEAAYLAAKQjwELNAADAAPy4AMAAhERJwACkOSXAAKRJFsAApEKBwACkPcBCzNCEUoJYYAOD6j4CTsAApHHAAKR7AACElmADg+oBJsAApHEBFsAApIKBwACkfcBCzNCEUoJYYAOD6knAAKSSHMAApKUWwACkoIPAAKSWwELOFIJng+1IAQABasAApLlgA4QngdEAwAD9Xj4CTsAApNfAAKTbAACZymADgxkBFsAApOeDwACk3cBCzhSE/4NmSsAApQEBHMAApQguwABW5QEAARzAAKUyFsAApSSEwAClIMBCznSEvoMoSwEAAYLAAKUzwELNAADAAPy4AMAAhEQ+AUrAAKVXARzAAKVsFsAApV4uom/AAIPTwABMNwICYAPAAI56YAPAAKfAAibAAKWEARzAAKWELsAAVsoDAAMcwAClqi7AAFbVAQABg8AApbzAQs4UAMAAhEYWwAClzYDAAKXIwELLOIC9iVOCwACl08BCzQAAwACEWGADwACOeh/AAKXtwACnywEAAYDAAKX/wELLOAAAwACOqUnAAKYeJcAApi4WwACmJ4HAAKYiwELM0IRSglhgA4caPgI9HMAAppUuwABZeQEAASbAAKarARbAAKargcAApqbAQszQhFKCWGADhxoAwACETkrAAKa8ARzAAKbSFsAApsMuwABWrsAAg9lLAQABgMAAptPAQss4AMAA/O4+AT0wwACm8R/AAKb7wAD7lwEAASQABCfAAFmbJ8AAWZwWwACnU4HAAKdOwELM0IRSglgngWoAPz0wwACncR/AAKd7wAD7lwEAASTAAKe5AyfAAFmdgMAAp7PAQss4J4FqAAbAAIRFgWnAAKfDwACn1cAAqEEAAMAAVu4AAAABA8AAp+vAAKhBAAAAAQEBwACn9gAAAIPuYAODXgAAYAO9AAE+AUrAAKgCATUAAAABAF0DwAD82gJgA4NeYAPAAI50ARbAAKgJLsAAVq/AAIPaNQAAAAEAYAODXgGAwACoGMBC0H01AAAAAQBgA8AAjnQBHMAAqBeBwACoF8BC0JpLAQABgsAAqBfAQtDAAMAA/O4jHMAAqB6DAMBC0NRIAQABKwDAAP1eNQAAAAEAYAO9AAEmwACoFwEcwACoIi7AAFmewACDtwEAAYDAAKg4wELQfQDAAIQJYAPAAI50NQAAAAEAXAEcwACoF4HAAKgXwELQmoC/AgACgsAAqBfAQtDAhADAQtEXAMAA/O+EAMBC0ReDAMBC0NQBYAO9AAbAAIQJgWnAAKhGwACoWMAArjAAAMAAWZ7AAIO3AAAAAQPAAKhtwACuMAAAAAEBAcAAqHgAAACD7mADg14AAGADvQABPghAIRbAAKiVLsAAVsvAAIPVwAColMAAqKABJAAGJ8AAWY8uJ8AAWZAnwABZn4DAAKj4wELRvCeBak7AAKkVAAAAwABAY2ADhIMATsAAqTPAAKlCAACE/2ADvMEBHMAAqUQuwABW4AEAARbAAKlagMAAqVXAQtG8hP+DZgDAAIRCTsAAqXTAAKl5AACAvWADwABofQEcwACpey6ZHAEAARbAAKmIgMAAqYPAQtG8gL2DYgDAAIQyTsAAqZjAAKmjAACEH2ADwAD6PwEWwACpqoDAAKmlwELRvIQfg25OwACpzgAAAJjbYAPAAI50AEnAAKnfJcAAqeiAwACp48BC0bxgA4OpPgI9icAAqgPAQtILFsAAqhcUwACqEsBC0bwAAWADg6mCaoOtPY3AAKonwELSrhzAAKo1LsAAWaAFAAOCwACqUcBC0hyDwACqYcBC0lIcwACqcS7AAFmLAgABgcAAqofAQtILAcAAWYwqwACENAKEH4TAAKrKwELSiIQdFsAAquQUwACq38BC0bwAAWADg6mEHYOzwACEWUnAAKr5JcAAqwKAwACq/cBC0bxgA4PqPgM9icAAqxvAQtILFsAAqy8UwACrKsBC0bwAAWADg+qCaoPvTsAAq0TAAKtWAADAAFmhYAPAAPo/ASIihMAAq1jAQtKIABzAAKt6FsAAq3WDwACrcMBC0lKBsMAAaIFIAQABJ5xlAMAA/foAHMAAq7xqwACrnF0DwAD8qQFgA8AA/evAAWDbgxcBAAEWwACr1ILAAKvFwELSHIC9vK8AwAD8dj2NwACr4cBC0q4cwACr7y7AAFmiBgADgsAArAjAQtIcg8AArBjAQtJSHMAArCguwABZiwIAAYHAAKw+wELSCwHAAFmMKsAAhDQDhB+EwACsgcBC0oiEHRbAAKylFMAArKDAQtG8AAFgA4PqhB2D/7LyhsAArNbAQtOowACEWj4BPTDAAK1GHsAArUy1wwIAAmrAAK1gYAO11cAAxOkkwACtngMnwABZo4DAAK2XwELRvCeBagBKwACtqwEcwACtuhbAAK2yLoSOwACD0sAATDcCAmADwACOdGADwACnkAKFwACt8sBC0q4fwACuA8AAp6MCAAKAwACuGMBC0byBwACuHsBC0gsAAMAAjqkGwACERoFpwACuNcAArkTAAK8SAADAAFbVAAAAAQPAAK5VwACvEgAAAAEBAcAArmMAAACD7mADg+oAAGADvOgBPgFKwACu3gE1AAAAAQBgA8AAjnEBHMAAru4WwACu5S7AAFawwACD20sBAAGAwACu78BC1V4AwAD87iMcwACu9YEAwELVe0gBAAErAAAcwACu+C7AAFmkwACDtwEAAYDAAK8JwELVXgDAAIQKgQDAQtV7AWADvOgGwACECoFpwACvF8AArybAALciAADAAFmkwACDtwAAAAEDwACvNsAAtyIAAAABAQHAAK9EAAAAg+5gA4PqAABgA7zoAT4PQCEWwACvYS7AAFbLwACD1cAAr2DAAK9sASQABifAAFmPLifAAFmQJ8AAWaWAwACvwcBC1hkngWpOwACv3QAAAIJqYAO86ABOwACv+QAAAIRDYAO8sgBOwACwEgAA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AIPimte54BzAAMzQLsAATuIBAAEmwADM8QEWwADM8RbAAMziLrNAwACD4prXueBgA8AAjmUAwACELQDAAKWwScAAzQYhHMAAzRSDwADNCsBC7vJIAQABKwDAAGKfPgFKwADNJQEpP0rAAM08ASXAAM1RFsAAzUiBwADNQ8BC7o2teMAApzFgA8AAYvkGwACET4FpwADNacAAzYDAAM3PAADAAFlzAWrAAM1qYAPAAP1RAgAAAQPAAM2OwADNzwAAAAEBAcAAzZ0AAAiGgWADvMgAAGADgvQBPgFKwADNrAEcwADNsy7AAFmKwACDtwEAASbAAM3DAYDAAM3DwELv7GADwACOfwDAAIQCBsAAhFCBacAAzdTAAM3swADP/wAAwABZdwFqwADN1WADwAD9UQIAAAEDwADN+sAAz/8AAAABAQHAAM4PAAAAg+5gA4W9AABgA8AAg6gBPgJJwADOGxzAAM4uFsAAzh8us0DAAIPisc0BAAEcwADOPi6cEwEAARbAAM5NgMAAzkjAQvBrgkWFxADAAIQZALrvPgFHwADOXxbAAM54FsAAznMWwADObIDAAM5nwELwa4JFhcSAvYNigL2IhgQBwADOmWrAAM6ZYAPAAP3rwADudAA+AUrAAM6nAWrAAM66YAPAAIOowAFgRgHAAM7XasAAztdgA8AA/evAAO53AD4BSsAAzu0BasAAzwBgA8AAg6jAAWBfAcAAzyVqwADPJWADwAD968AA7noAPgFKwADPQwFqwADPVmADwACDqMABYHgBwADPg2rAAM+DYAPAAP3rwADufQA+AUrAAM+mAWrAAM+5YAPAAIOowAFgkT9KwADP5AFqwADP92ADwACDqMABYKoGwACEUYFpwADQBMAA0B7AANILAADAAFl4AWrAANAFYAPAAP1RAgAAAQPAANBCwADSCwAAAAEBAcAA0FcAAACD7mADhb0AAGADwABijQE+BEnAANBjIiEcwADQiBbAANCBFsAA0HYWwADQbIDAANBnwELx7VuFwIWThXthwAD82EgBAAGUAMAA/SgBFsAA0K0WwADQpxbAANCdgMAA0JjAQvHtW4XAhV2FfIOywAD8jD4BPRzAANDKFsAA0MEupM3AAIO/rtsCAAJqwADQ3WADtdXAAMVDasAA0Q5gA6TqwADLTwC1qz9OwADRTcAA0VYAAB9gA4JLARbAANFyFsAA0WcWwADRXYDAANFYwELx7VuFwIWThXuDGcAA/I1JwADRfSIlwADRioHAANGBwELynWADhrUAJcAA0a0WwADRqBTAANGfwELynQEBYAOGtYKQhrdgA4jzPgFKwADRygEcwADR0S7AAE8oAQABJsAA0esBFsAA0esUwADR4sBC8p0BAWADhrWCkIa3YAOI8wDAAIQiP0rAANH8ASsGwACEUoFpwADSRMAA0l/AANPaAADAAEwCAWrAANJFYAPAAP1RAgAAAQPAANJ8wADT2gAAAAQDA8AA0oYAAACElGADg3wAwADSpAAAAMAASjJdA8AA/GcBYAPAAP3rAMAA0skAAADAAEozXQPAAPxnAWADwAD96wABwADS6QAAAMAASjVgA8AA+j8BagBgA8AA/Q55YAPAAGbLAT4CTsAA0wbAANMLAACCkGADwABiZgEcwADTDS7AAEw9AQABFsAA0x+AwADTGcBC84iCkIN+AMAAhB9KwADTKgEcwADTRxbAANMxLsAAWa3AAIPrwABKNwUABITAANNewELz7oHAANNswELzloLAANOAwELzrxzAANOULsAAVxcBAAABwABXGCrAAIQ4AcAASjWDwADTysBC88nAAGb+BsAAhFOBacAA1BPAANQuwADUzgAAwABMAwFqwADUFGADwAD9UQIAAAEDwADUTMAA1M4AAAABAQHAANRWAAAAhJRgA4N8AABgA8AAZssBPgJOwADUbMAA1HEAAIKQYAPAAGJmARzAANRzLsAATD0BAAEWwADUhYDAANR/wEL0wYKQg34AwACEH0rAANSQARzAANStFsAA1JcuwABZrcAAg+vAAEo4AQABgcAA1MXAQvTaAMAAZv8GwACEVIFpwADVB8AA1SLAANeLAADAAEwAAWrAANUIYAPAAP1RAgAAAQPAANU8wADXiwAAAAQDA8AA1UcAAACCZmADg14AwADVZgAAAMAASjJdA8AA/GcBYAPAAP3rAMAA1YsAAADAAEozXQPAAPxnAWADwAD96wABwADVqwAAAMAASjVgA8AA+j8BagBgA8AA/Q55YAPAAGbLAT4DTsAA1cgAAACCkGADwABiZgBJwADV0iXAANXdgMAA1dbAQvV3YAOD6j4BPYzAANX2wEL13RzAANX9LrMDAQABFsAA1hQUwADWDcBC9XcAAWADg+qC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hBUAwABqTT4CPRzAARJuLsAAWcHAAIO3AgACgMABEn3AQy3kgcABEoPAQy3yAMAAhMdKwAESmgEpPgJOwAESwcABEsYAAIC9YAPAAP3rARzAARLILsAAWcLAAIO3AgACgMABEuLAQy3kgcABEujAQy3yAMAAhMpJwAES/yEcwAETCILAARMDwEMurEgBAAErAMAA/fo+AT0ewAETG7XDAgACHsABEzHAAJw3AQABgMABE0/AQy3kACQAAyfAAFnDgMABE6/AQy3kJ4FqAD9KwAETygEqBsAAhMaBacABFGXAARRqwAEXFAAAwABZusAAg7cAAAABA8ABFIPAARcUAAAAAgICwAEUlQAAAIPuYAODXgDAARSsAAAAwABZW2ADwACADwAAYAPAAPo/AT4CScABFMIcwAEUxi7AAFnEwACDtwIAAoDAARTWwEMvdYHAARTcwEMvgwDAAITOPgJJwAEU9SIhHMABFQ0WwAEU/oDAART5wEMvdYT/g2ZIAQABKwDAAP1eACEWwAEVHoDAARUZwEMvdYUCg20+AknAARU6IRzAARVdFsABFT8ut/XAAIO3wACEvLL1AQABHMABFXcWwAEVay63mcAAg7fAAIS7nBoBAAEWwAEVhYDAARWAwEMvdYT/g2YAwACEFQDAAGpNPgI9HMABFbgWwAEVrxbAARWjLreZwACDt8AAhLukzcAAg7+u2wIAAh7AARXawACcNwEAAYDAARX4wEMvdQBqwAEWGWADpOrAAMmtALWrSsABFk0BKj89HMABFm0uwABZxcAAg7cCAAKAwAEWi8BDL3WBwAEWkcBDL4MAwACEyD4BPRzAARa5LsAAWcHAAIO3AgACgMABFsjAQy91gcABFs7AQy+DAMAAhMdKwAEW7QEpP0rAARcEASoGwACEx4FpwAEXg8ABF4jAARh7AADAAFnBwACDtwAAAAEDwAEXlsABGHsAAAACAgLAARehAAAAg+5gA4NeAMABF7gAAADAAFlbYAPAAIAPAABcAT4DTsABF9XAARfaAACAvWADwAD96wEcwAEX3C7AAFnCwACDtwIAAoDAARf2wEMxS4HAARf8wEMxWQDAAITKPSMcwAEYFoLAARgRwEMxcUgBAAErAMAA/fqKwAEYEcBDMXEWwAEYJBbAARgfgMABGBrAQzFLgL2DYoC9iIYrAWADwAD96z0cwAEYQRbAARguLrf7wACDt8AAhL3AAEvYAgACHMABGGEWwAEYVS63mcAAg7fAAIS7nBMBAAGAwAEYa8BDMUsAwACEGYLAARhywEMxcQDAAGp5BsAAhMiBacABGoPAARqIwAEdpgAAwABZxcAAg7cAAAABA8ABGqXAAR2mAAAAAgICwAEatwAAAIPuYAODXgDAARrOAAAAwABZW2ADwACADwAAXAE+A07AARrrwAEa8AAAgL1gA8AA/esBHMABGvIuwABZwsAAg7cCAAKAwAEbDMBDMnWBwAEbEsBDMoMAwACEyj0jHMABGyyCwAEbJ8BDMptIAQABKwDAAP36isABGyfAQzKbFsABGzoWwAEbNYDAARswwEMydYC9g2KAvYiGKwFgA8AA/etJwAEbRBzAARtILsAAWcbAAIO3AQABgsABG1bAQzKbAMAAhMk+BE7AARtxwAEbdQAAmcpgA7zBARzAARuDFsABG3cut5nAAIO3wACEu5waAQABFsABG5GAwAEbjMBDMnWE/4NmAMAAhBVOwAEbtcABG8EAAMAAWcddA8AA/KkBYAPAAP3rARzAARvUFsABG8Mut/XAAIO3wACEvMAAS78BAAGDwAEb6cBDM0MAwABqTknAARv1IRzAARwMFsABHAWEwAEb+cBDM4ZhwAD82EgBAAGUAMAA/Sg+AT0ewAEcHLXDAgACHsABHDLAAJw3AQABgMABHFDAQzJ1ACQAAyfAAFnIJ8AAWcmEwAEcuMBDM4YAPz0cwAEc6BbAARzVLrf7wACDt8AAhL3AAEvYAgACHMABHRMWwAEdBy63mcAAg7fAAIS7nBMBAAGAwAEdHcBDMnUAwACEGSTAAR09AxzAAR0yhMABHSfAQzOGSwEAAZMAwAD8uCeBaoLAAR04wEMymwDAAGp5PgE9HMABHWYWwAEdUy63+8AAg7fAAIS9wABL2AIAAhzAAR2GFsABHXout5nAAIO3wACEu5wTAQABgMABHZDAQzJ1AMAAhBmCwAEdl8BDMpsAwABqeQbAAITJgWnAAR2rwAEdsMABHeIAAMAAWcbAAIO3AAAAAQPAAR29wAEd4gAAAAEBAcABHcUAAACIR2ADwAD96wAAYAPAAPo/AUrAAR3LARzAAR3XGsABHcvAAIS6qksBAAGAwAEd4MBDNSgAwAD9iAbAAITKgWnAAR5GwAEeTcABIS8AAMAAWcLAAIO3AAAAAQPAAR5mwAEhLwAAAAICAsABHngAAACD7mADg14AwAEejwAAAMAAWVtgA8AAgA8AAGADwAD96wE+A07AAR6sAAAAwABH1mADwAD96wBJwAEeuCEcwAEey4HAAR68wEM1pUgBAAErAMAA/V4+AT2KwAEe3MBDNcIcwAEe9IHAAR7lwEM1pcAAWBEBAAGAwAEfCMBDNZcAwACAHz4CTsABHy3AAR84AACWrWADtcUBHsABHzrAAJw3AQABgMABH1jAQzWXAEbAAR9lwAEf0MABH3gAAACAlmADwABg0gAcwAEfoBbAAR+BLq9UwACDt8AAhMCzEAEAARzAAR++FsABH7Iut5nAAIO3wACEu5wTAQABgMABH8jAQzWXAMAAhBkAuyE+Ak7AAR/hwAEf5gAAgL1gA8AA/esBHsABH+jAAIMxAwADg8ABIAjAQzYkhMABIBTAQzZUFsABICsWwAEgGy60BMAAg7fAAITBsXO4wQBJwAEgSxzAASBWgsABIE/AQzXCSAEAASsAwAD9+j4BPYrAASBrwEM1woXAASB0wEM2rEnAASCJIRzAASCShcABII3AQzasSAEAASsAwAD9+j4BPR7AASCntcMCAAKDwAEgv8BDNiQkwAEg/wInwABZyhzAASDxhMABIOvAQzZUptQAAAAAwABg8gA/SsABIR4BgsABISXAQzXCBsAAhMuBacABITTAASFDwAEh8wAAwABZwMAAg7cAAAABA8ABIWPAASHzAAAAAQEBwAEhdQAACISUYAPAAGwSAABgA8AAZssBPgJOwAEhi8ABIZAAAIPuYAODfAEmwAEhiwEcwAEhnhbAASGSLreZwACDt8AAhLu4HwEAAYDAASGswEM3wQDAAIQvYAODfErAASG4ARzAASHLFsABIb8ut5nAAIO3wACEu8AATAMBAAGBwAEh6sBDN9wAwACEUwbAAITMgWnAASH4wAEiB8ABJaQAAMAAWb7AAIO3AAAAAQPAASImwAElpAAAAAMCAsABIjUAAACElGADwABsEgDAASJNAAAAwABZW2ADwACADwABwAEiaQAAAMAASjVgA8AA+j8BagBgA8AA/Q55YAPAAGbLAT4FTsABIobAASKLAACD7mADg3wBJsABIoYBHMABIpkWwAEijS63mcAAg7fAAIS7uB8BAAGAwAEip8BDOH8AwACEL2ADg3xOwAEixAAAAMAASjJdA8AA/GcBYAPAAP3rAE7AASLtAAAAwABKM10DwAD8ZwFgA8AA/esAScABIwUhHMABIxiBwAEjCcBDOI9IAQABKwDAAP1ePgI9jMABIynAQzkLHMABI02BwAEjPsBDOI/AAEo/AQABg8ABI2PAQzjHAMAAgCA9jcABI3DAQzklHMABI5SBwAEjhcBDOI/AAEpAAQABg8ABI6rAQzjHAMAAgCE+A07AASPYwAEj4QAAhttdA8AA/KkBYAPAAGDSASbAASPYARzAASQBFsABI+0ur1TAAIO3wACEwLMQAQABgMABJBPAQzh/ALshXQPAAPypAWADwABg0j2MwAEkIcBDOQsewAEkNsAAZqUDAAMWwAEkYxbAASRXLreZwACDt8AAhLukzcAAg78WwAEkeRbAASRtLreZwACDt8AAhLuzQMAAg+KGwAEkicBDObsAPY3AASSawEM5JR7AASSvwABmpgMAAxbAASTcFsABJNAut5nAAIO3wACEu6TNwACDvxbAASTyFsABJOYut5nAAIO3wACEu7NAwACD4obAASUCwEM5uwBKwAElFwEcwAElKhbAASUeLreZwACDt8AAhLvAAEwCBAADg8ABJVHAQzjHhMABJVfAQzkLhcABJWvAQzklAcAASjWCwAEllMBDOKLAAIRSBsAAhM2BacABJanAASW4wAEpXAAAwABZu8AAg7cAAAABA8ABJdTAASlcAAAAAwICwAEl5gAAAIJqYAPAAGvUAMABJgEAAADAAFlbYAPAAIAPAAHAASYdAAAAwABKNWADwAD6PwFqAGADwAD9DnlgA8AAZssBPgVOwAEmO8ABJkAAAIPuYAODXgEcwAEmThbAASZCLreZwACDt8AAhLu4HwEAAYDAASZcwEM7OQDAAIQvTsABJnwAAADAAEoyXQPAAPxnAWADwAD96wBOwAEmpQAAAMAASjNdA8AA/GcBYAPAAP3rAEnAASa9IRzAASbQgcABJsHAQztJSAEAASsAwAD9Xj4CPYzAASbhwEM7uxzAAScFgcABJvbAQztJwABKPwEAAYPAAScbwEM7gQDAAIAgPY3AAScowEM71RzAASdMgcABJz3AQztJwABKQAEAAYPAASdiwEM7gQDAAIAhPgNOwAEnkMABJ5kAAIbbXQPAAPypAWADwABg0gEmwAEnkAEcwAEnuRbAASelLq9UwACDt8AAhMCzEAEAAYDAASfLwEM7OQC7IV0DwAD8qQFgA8AAYNI9jMABJ9zAQzu7HsABJ/HAAGalAwADFsABKB4WwAEoEi63mcAAg7fAAIS7pM3AAIO/FsABKDQWwAEoKC63mcAAg7fAAIS7s0DAAIPihsABKETAQzxrAD2NwAEoVcBDO9UewAEoasAAZqYDAAMWwAEolxbAASiLLreZwACDt8AAhLukzcAAg78WwAEorRbAASihLreZwACDt8AAhLuzQMAAg+KGwAEovcBDPGsASsABKNIBHMABKOUWwAEo2S63mcAAg7fAAIS7wABMAAQAA4PAASkJwEM7gYTAASkPwEM7u4XAASkjwEM71QHAAEo1gsABKUzAQztcwACEVAbAAITOgWnAASlhwAEpZsABLScAAMAAWcTAAIO3AAAAAQPAASl1wAEtJwAAAAICAsABKYAAAACD7mADg14AwAEplwAAAMAAWVtgA8AAgA8AAGADwAD6PwE+BUnAASmtIR7AASmywABrfwEAARbAASnaFsABKcmAwAEpxMBDPemEq4NnhHeCjQBKwAEp5gEqP07AASn9AAAAwABYEGADwAD6PwBJwAEqECEcwAEqI4HAASoUwEM990gBAAErAMAA/V4+AT2KwAEqNMBDPkocwAEqU4HAASpEwEM998AAWBABAAGAwAEqYcBDPekAwACAHj4BPYrAASp7wEM+ShzAASqcFsABKpCAwAEqi8BDPemEY4NhgdQBAAE0wAEqoAPAASqgwAErdwAAAAEBAcABKq8AAACCa2ADhK4AAGADwAD6PwE+AUrAASrFASIlwAEq14PAASrMwEM+5WADhdAAHMABKzscwAErDhbAASsCLreZwACDt8AAhLvAAE8oAQABFsABKyoUwAErH8BDPuUDAWADhdCFrYXYAMAAhCJIAQABFsABK14WwAErTi60BMAAg7fAAITBscq5FQDAAGKfAMAA/HxJwAErhCIiIYLAASuJwEM+SgAWwAErp4DAASuiwEM96YQfg24AIRzAASvPFsABK74ut/XAAIO3wACEvMAAS8MBAAEcwAEr7RbAASvhLreZwACDt8AAhLucEwEAAYDAASv3wEM96QDAAIQZAMAAalM+AT0cwAEsoBbAASyXFsABLIsut5nAAIO3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AABgA73nAT4ETsAAl4TAAJeJAACFtWADwABFfQEcwACXnRbAAJeXgMAAl4vARAExglHAAEWDSwEAAZQAwAD8uE7AAJezwACXuQAAhbdgA8AARX0BHMAAl80WwACXx4DAAJe7wEQBMYJRwABFg0sBAAGVAMAA/LhJwACX1iIWwACYCRzAAJffg8AAl9rARAFqtVYBAAEWwACX9ILAAJfowEQBUbC9wABNNADAAEXatDa91QAWwACYVRzAAJgrhMAAmCXARAGhtVYBAAEWwACYQILAAJg0wEQBUbC9wABNNADAAEXatDa91T4BSsAAmG8BFsAAmJYWwACYgoLAAJh2wEQBUbC9wABNNLUsvgM/SsAAmKwBHcAAmLnAAFoQAwADgMAAmNPARAExgcAAmODARAFBgsAAmOnARAFRAMAAhkgGwACGc4FwwACY/sAAmRfAAJpIAADAAFoiAWrAAJj/YAPAAP1RAgAAAQPAAJkowACaSAAAAAMDA8AAmTgAAAC4zWADwABGegDAAJlmAAAAtrtgA8AAQU4AwACZfAAAAKTfYAPAAE0rAABgA8AARX0BPgFKwACZjwEfwACZmsAAR+AEAAQcwACZvRbAAJm3gMAAmavARALYglHAAEWDSwEAAZQAwAD8uBzAAJncFsAAmdaAwACZysBEAtiCUcAARYNLAQABlQDAAPy4FsAAmfWAwACZ6cBEAtik8cAARn0cwACaBy7AAFoQAwADgMAAmiHARALYgcAAmi7ARALogsAAmjfARAL4AMAAhnIABsAAhnSBcMAAmk3AAJpewACa8wAAwABaHwFqwACaTmADwAD9UQIAAAEDwACacsAAmvMAAAADAwPAAJqOAAAAlnhgA8AAqnsAwACaoAAAAJ64YAPAAEV9AMAAmrcAAACXWGADwABFfQAAXAE+AT0cwACazIDAAJrIwEQD5MAAWksCAAImwACa2wGBwACa28BEA/RgA8AARnomwACa5QGCwACa5cBEBARgA8AAR9gAwACqmQAARACkAEQA+QBEAqAARAOsAEQEXgAAAAQCwACGd4FwwACa+MAAmwfAAKCXB8AAWkwAAAFgAcAAhdMAAAABBcAAhn6BcMAAm0LAAJtIwACbXwEAAAPAAJtdwACbXwAAAAAAAABgA8AAhncBPwEJAcAAm0jAAIXcAAAAAAQGwACGeYFwwACbZMAAm37AAJz/AADAAFoQAWrAAJtlYAPAAP1RAgAAAQPAAJuXwACc/wAAAAMDA8AAm6cAAAC4zWADwABGegDAAJvVAAAAtrtgA8AAQU4AwACb6wAAAKTfYAPAAE0rAABgA73nAT4CScAAm/4WwACcXRzAAJwhHMAAnBQWwACcDoDAAJwCwEQFEoJRwABFg0sBAAGUAMAA/Li1YgEAARbAAJw/gsAAnDPARAUysL3AAE00AMAARea0Nr3VPgFKwACcdwEWwACcnhbAAJyKgsAAnH7ARAUysL3AAE00haW99z9KwACcsgEdwACcv8AAWhADAAOAwACc2cBEBRKBwACc5sBEBSKCwACc78BEBTIAwACF1QbAAIZ6gXDAAJ0EwACdHcAAn8gAAMAAWhEBasAAnQVgA8AA/VECAAABA8AAnTDAAJ/IAAAABgYGwACdRwAAALjNYAPAAEZ6AMAAnWEAAACkHmADwABEmADAAJ2JAAAAtrtgA8AAQU4AwACdqAAAALNAYAO5PwDAAJ3LAAAApN9gA8AATSsAwACd8gAAAJZ4YAPAAKp7AABgA8AARX0BPgROwACeCsAAng8AAIW1YAPAAEV9ARzAAJ4jFsAAnh2AwACeEcBEBi6CUcAARYNLAQABlADAAPy4TsAAnjnAAJ4/AACFt2ADwABFfQEcwACeUxbAAJ5NgMAAnkHARAYuglHAAEWDSwEAAZUAwAD8uEnAAJ5cIhbAAJ6PHMAAnmWGwACeYMBEBpe1WgEAARbAAJ56hMAAnm7ARAZssL3AAE00AMAARd60Nr3VABbAAJ7bHMAAnrGHwACeq8BEBs61WgEAARbAAJ7GhMAAnrrARAZssL3AAE00AMAARd60Nr3VPgNOwACfAsAAnwwAAJdYYAPAAEV9ARzAAJ8OLsAAWiICAAKAwACfIMBEBi6EwACfLcBEBmwAwACGe0nAAJ9BIRzAAJ9JhcAAn0XARAZ8SAEAASsAwAD9Xj4BPRzAAJ9cLsAAWh8DAAOFwACfccBEBnyAwACfdsBEBi4UwACfg8BEB3gIAADAAIZ8P0rAAJ+dARTAAJ+kwEQHeAgAP0rAAJ+5ASsGwACGe4FwwACfzcAAn9rAAKAoAALAAFoiAAAAAQPAAJ/rwACgKAAAAAICAsAAoAIAAAC4zWADwABGegDAAKAcAAAApN9gA8AATSsAAGADwABFfQAGwACGfIFwwACgLcAAoDLAAKCVAALAAFofAAAAAQPAAKBGwACglQAAAAMDA8AAoGIAAACWeGADwACqewDAAKB0AAAAnrhgA8AARX0AwACgiwAAAJdYYAPAAEV9AABcAAAARATaAEQF9gBECBkARAhtAEQIzAAAAAQCwACGf4FwwACgmsAAoKDAAKjFA8AAWk0AAAFgAcAAhncAAAABBcAAhoaBcMAAoNTAAKDawACg7QEAAAPAAKDrwACg7QAAAAAAAABgA8AAhn8BPwEJAcAAoNrAAIZ+AAAAAAQGwACGgYFwwACg8sAAoQvAAKa0AADAAFoRAWrAAKDzYAPAAP1RAgAAAQPAAKEewACmtAAAAAYGBsAAoTUAAAC4zWADwABGegDAAKFPAAAApB5gA8AARJgAwAChdwAAALa7YAPAAEFOAMAAoZYAAACzQGADuT8AwAChuQAAAKTfYAPAAE0rAMAAoeAAAACWeGADwACqewAAYAPAAEV9AT4ITsAAofjAAKH9AACFtWADwABFfQEcwACiERbAAKILgMAAof/ARAmAglHAAEWDSwEAAZQAwAD8uE7AAKInwACiLQAAhbdgA8AARX0BHMAAokEWwACiO4DAAKIvwEQJgIJRwABFg0sBAAGVAMAA/LhOwACiWMAAomgAALlwYAO95wEWwACib4bAAKJqwEQJ6blwwABFvUnAAKKEIhzAAKKOh8AAoojARAoguZEAAAAAwABF+gEWwACi/BzAAKK8hsAAoqrARAnptWIBAAEWwACi2oTAAKLOwEQJvrC9wABNNADAAEXmtDa91T4DTsAAoyPAAKMtAACXWGADwABFfQEcwACjLy7AAFoiAgACgMAAo0HARAmAhMAAo07ARAm+AMAAhoNJwACjYiEcwACjaoXAAKNmwEQJzkgBAAErAMAA/V4+AT0cwACjfS7AAFofAwADhcAAo5LARAnOgMAAo5fARAmAFMAAo6TARArTCQAAwACGhD9KwACjvgEUwACjxcBECtMJAD9JwACj2hzAAKPqhMAAo97ARAm+tkMCAAIWwACkE4DAAKQHwEQJgKTxwABGfRTAAKQdwEQKVwgAAMAATU4+AUrAAKQ3ASs/TsAApGXAAKRtAAC+hV0DwAD8ZwFgA7zTARzAAKSDhMAApHfARAm+tGQCAAIWwACknYDAAKSRwEQJgKTxwABGfRTAAKSnwEQKVwgAAMAATVBJwAClgRzAAKWWFMAApYXARAu0CQCWNgEAARbAAKW3FsAApaiEwAClnMBECb6zQMAATTOx3blDAMAA/Ho+A07AAKXuwACl+AAAl1hgA8AARX0BHMAApfouwABaIgIAAoDAAKYMwEQJgITAAKYZwEQJvgDAAIaDScAApi0hHMAApjWFwACmMcBECc5IAQABKwDAAP1ePgE9HMAApkguwABaHwMAA4XAAKZdwEQJzoDAAKZiwEQJgBTAAKZvwEQMQgoAAMAAhoQ/SsAApokBFMAAppDARAxCCgA/SsAApqUBKwbAAIaCgXDAAKa5wACm5cAApxcAAJzJAWrAAKa6YAPAAP1RAgAAAQPAAKbuwACnFwAAAAAAAABgA8AAaSYBPgFKwACm9wFqwACnDmADwABp+sABA4wGwACGg4FwwACnHMAApzXAAKgYAADAAFoiAWrAAKcdYAPAAP1RAgAAAQPAAKdGwACoGAAAAAICAsAAp10AAAC4zWADwABGegDAAKd3AAAApN9gA8AATSsAAGADwABFfQE+AUrAAKeKAR/AAKeVwABIpwQABBzAAKexFsAAp6uAwACnn8BEDXCCUcAARYNLAQABlADAAPy4HMAAp8gWwACnwoDAAKe2wEQNcIJRwABFg0sBAAGVAMAA/LgWwACn4YDAAKfVwEQNcKTxwABGfRbAAKgLFsAAp/eBwACn68BEDYCwvcAATTSFpb33AAbAAIaEgXDAAKgdwACoLsAAqMMAAMAAWh8BasAAqB5gA8AA/VECAAABA8AAqELAAKjDAAAAAwMDwACoXgAAAJZ4YAPAAKp7AMAAqHAAAACeuGADwABFfQDAAKiHAAAAl1hgA8AARX0AAFwBPgE9HMAAqJyAwAComMBEDlzAAFpOAgACJsAAqKsBgcAAqKvARA5sYAPAAEZ6JsAAqLUBgsAAqLXARA58YAPAAEidAMAAqpoAAEQJSABEDOMARA04AEQOJABEDtYAAAAEAsAAhoeBcMAAqMjAAKjOwACrIQPAAFpPAAABYAHAAIZ3AAAAAQXAAIaNgXDAAKkAwACpBsAAqRcBAAADwACpFcAAqRcAAAAAAAAAYAPAAIaHAT8BCQHAAKkGwACGfgAAAAADBsAAhomBcMAAqRzAAKlIwACpeQAAnMkBasAAqR1gA8AA/VECAAABA8AAqVHAAKl5AAAAAAAAAGADwABpJgE+AUrAAKlaAWrAAKlxYAPAAGnWwAD5QwbAAIaKgXDAAKl+wACpl8AAqnYAAMAAWiIBasAAqX9gA8AA/VECAAABA8AAqajAAKp2AAAAAgICwACpvwAAALjNYAPAAEZ6AMAAqdkAAACk32ADwABNKwAAYAPAAEV9AT4BSsAAqewBH8AAqffAAEjCBAAEHMAAqg8WwACqCYDAAKn9wEQP34JRwABFg0sBAAGUAMAA/LgcwACqJhbAAKoggMAAqhTARA/fglHAAEWDSwEAAZUAwAD8uBbAAKo/gMAAqjPARA/fpPHAAEZ9FsAAqmkWwACqVYHAAKpJwEQP77C9wABNNIWlvfcABsAAhouBcMAAqnvAAKqMwACrHwAAwABaHwFqwACqfGADwAD9UQIAAAEDwACqoMAAqx8AAAADAwPAAKq8AAAAlnhgA8AAqnsAwACqzgAAAJ64YAPAAEV9AMAAquUAAACXWGADwABFfQAAXAE+AT0cwACq+oDAAKr2wEQQy8AAWlACAAImwACrBwGBwACrB8BEENtgA8AARnomwACrEQGCwACrEcBEEOtgA8AASLoAwACqmwAARA9SAEQPpwBEEJMARBFFAAAAAwLAAIaOgXDAAKskwACrKsAArYwDwABaUQAAAWABwACGdwAAAAEFwACGlIFwwACrX8AAq2XAAKt5AQAAA8AAq3fAAKt5AAAAAAAAAGADwACGjgE/AQkBwACrZcAAhn4AAAAAAwbAAIaQgXDAAKt+wACrqsAAq94AAJzJAWrAAKt/YAPAAP1RAgAAAQPAAKuzwACr3gAAAAAAAABgA8AAaSYBPgFKwACrvAFqwACr02ADwABp6MAA+SUGwACGkYFwwACr48AAq/zAAKzeAADAAFoiAWrAAKvkYAPAAP1RAgAAAQPAAKwNwACs3gAAAAICAsAArCQAAAC4zWADwABGegDAAKw+AAAApN9gA8AATSsAAGADwABFfQE+AUrAAKxRAR/AAKxcwABIsAQABBzAAKx3FsAArHGAwACsZcBEEkqCUcAARYNLAQABlADAAPy4HMAArI4WwACsiIDAAKx8wEQSSoJRwABFg0sBAAGVAMAA/LgWwACsp4DAAKybwEQSSqTxwABGfRbAAKzRFsAArL2BwACsscBEElqwvcAATTSFpb33AAbAAIaSgXDAAKzjwACs9MAArYoAAMAAWh8BasAArORgA8AA/VECAAABA8AArQjAAK2KAAAAAwMDwACtJAAAAJZ4YAPAAKp7AMAArTYAAACeuGADwABFfQDAAK1NAAAAl1hgA8AARX0AAFwBPgE9HMAArWKAwACtXsBEEzbAAFpSAgACJsAArXIBgcAArXLARBNGYAPAAEZ6JsAArXwBgsAArXzARBNWYAPAAEioAMAAqpwAAEQRvQBEEhIARBL+AEQTsAAAAAMCwACGlYFwwACtj8AArZXAALAQA8AAWlMAAAFgAcAAhncAAAABBcAAhpuBcMAArc/AAK3VwACt7gEAAAPAAK3swACt7gAAAAAAAABgA8AAhpUBPwEJAcAArdXAAIZ+AAAAAAMGwACGl4FwwACt88AArh/AAK5YAACcyQFqwACt9GADwAD9UQIAAAEDwACuKMAArlgAAAAAAAAAYAPAAGkmAT4BSsAArjEBasAArkhgA8AAafHAAPk0BsAAhpiBcMAArl3AAK52wACvXQAAwABaIgFqwACuXmADwAD9UQIAAAEDwACuh8AAr10AAAACAgLAAK6eAAAAuM1gA8AARnoAwACuuAAAAKTfYAPAAE0rAABgA8AARX0BPgFKwACuywEfwACu1sAASLkEAAQcwACu9hbAAK7wgMAAruTARBS1glHAAEWDSwEAAZQAwAD8uBzAAK8NFsAArweAwACu+8BEFLWCUcAARYNLAQABlQDAAPy4FsAAryaAwACvGsBEFLWk8cAARn0WwACvUBbAAK88gcAArzDARBTFsL3AAE00haW99wAGwACGmYFwwACvYsAAr3PAALAOAADAAFofAWrAAK9jYAPAAP1RAgAAAQPAAK+HwACwDgAAAAMDA8AAr6MAAACWeGADwACqewDAAK+1AAAAnrhgA8AARX0AwACvzAAAAJdYYAPAAEV9AABcAT4BPRzAAK/hgMAAr93ARBWhwABaVAIAAibAAK/2AYHAAK/2wEQVsWADwABGeibAALAAAYLAALAAwEQVwWADwABIsQDAAKqeAABEFCgARBR9AEQVaQBEFhsAAAADAsAAhpyBcMAAsBPAALAZwACyhQPAAFpVAAABYAHAAIZ3AAAAAQXAAIaigXDAALBQwACwVsAAsGwBAAADwACwasAAsGwAAAAAAAAAYAPAAIacAT8BCQHAALBWwACGfgAAAAADBsAAhp6BcMAAsHHAALCdwACw0wAAnMkBasAAsHJgA8AA/VECAAABA8AAsKbAALDTAAAAAAAAAGADwABpJgE+AUrAALCvAWrAALDGYAPAAGnfwAD5UgbAAIafgXDAALDYwACw8cAAsdUAAMAAWiIBasAAsNlgA8AA/VECAAABA8AAsQLAALHVAAAAAgICwACxGQAAALjNYAPAAEZ6AMAAsTMAAACk32ADwABNKwAAYAPAAEV9AT4BSsAAsUYBH8AAsVHAAEjLBAAEHMAAsW4WwACxaIDAALFcwEQXIIJRwABFg0sBAAGUAMAA/LgcwACxhRbAALF/gMAAsXPARBcgglHAAEWDSwEAAZUAwAD8uBbAALGegMAAsZLARBcgpPHAAEZ9FsAAscgWwACxtIHAALGowEQXMLC9wABNNIWlvfcABsAAhqCBcMAAsdrAALHrwACygwAAwABaHwFqwACx22ADwAD9UQIAAAEDwACx/8AAsoMAAAADAwPAALIbAAAAlnhgA8AAqnsAwACyLQAAAJ64YAPAAEV9AMAAskQAAACXWGADwABFfQAAXAE+AT0cwACyWYDAALJVwEQYDMAAWlYCAAImwACyawGBwACya8BEGBxgA8AARnomwACydQGCwACydcBEGCxgA8AASMMAwACqnQAARBaTAEQW6ABEF9QARBiGAAAAAwLAAIajgXDAALKIwACyjsAAt6UDwABaVwAAAWABwACF0wAAAAEFwACGqIFwwACyycAAss/AALLmAQAAA8AAsuTAALLmAAAAAAAAAGADwACGowE/AQkBwACyz8AAhdwAAAAAAgbAAIalgXDAALLrwACzF8AAs04AAJzJAWrAALLsYAPAAP1RAgAAAQPAALMgwACzTgAAAAAAAABgA8AAaSYBPgFKwACzKQFqwACzQGADwABqEsABPkIGwACGpoFwwACzU8AAs2zAALejAADAAFoRAWrAALNUYAPAAP1RAgAAAQPAALN/wAC3owAAAAYGBsAAs5YAAAC4zWADwABGegDAALOwAAAApB5gA8AARJgAwACz2AAAALa7YAPAAEFOAMAAs/cAAACzQGADuT8AwAC0GgAAAKTfYAPAAE0rAMAAtEEAAACWeGADwACqewAAYAPAAEV9AT4DTsAAtN7AALTn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hwqBc4cnhycGncMAYAPAAIcCAWoAYAPAAIcCwAECzgTAAIcLgXOHMIcwBsAAWrwAYAPAAIcCAWoAYAPAAIcCwAEBvwTAAIcMgXOHN4c3BsAAWr0AYAPAAIcCAWoAYAPAAIcCwAEB1gTAAIcNgXOHPoc+BsAAWr4AYAPAAIcCAWoAYAPAAIcCwAEB7gTAAIcOgXOHRYdFBsAAWr8AYAPAAIcCAWoAYAPAAIcCwAECBgTAAIcPgXOHTIdMBsAAWsAAYAPAAIcCAWoAYAPAAIcCwAECHgTAAIcQgXOHVIdUBsAAWsEAYAPAAIcCAWoAYAPAAIcCwAECnATAAIcRgXOHW4dbBsAAWsIAYAPAAIcCAWoAYAPAAIcCwAEBdQTAAIcSgXOHYodiBsAAWsMAYAPAAIcCAWoAYAPAAIcCwAEBjQTAAIcTgXOHaYdpBsAAWsQAYAPAAIcCAWoAYAPAAIcCwAEBpQTAAIcUgXOHcYdxBsAAWsUAYAPAAIcCAWoAYAPAAIcCwAECaATAAIcVgXOHeYd5Bp26AGADwACHAgFqAGADwACHAsABAjYEwACHFoFzh3+HfwbAAFrGAGADwACHAgFqAGADwACHAsABAoIEwACHF4Fzh4eHhwadEQBgA8AAhwIBagBgA8AAhwLAAQJOBMAAhxiBc4eNh40GwABaxwBgA8AAhwIBagBgA8AAhwLAAQFDBMAAhxmBc4eUh5QGwABayABgA8AAhwIBagBgA8AAhwLAAQFbBMAAhxqBc4eah5oGwABayQBgA8AAhwIBagBgA8AAhwLAAQEpBMAAhxuBc4ehh6EGmioAYAPAAIcCAWoAYAPAAIcCwAEA9QTAAIccgXOHsIewBpopAGADwACHAgFqAGADwACHAsABAQ8EwACHHYFzh76HvgbAAFrKAGADwACHAgFqAGADwACHAsABArQBBcAAhyGBc4cAhwCHxwEAAAOHAIfHAAAAAgIChwAAAAQnYAPAAPwFAIcAAAAEKGADwAD96wAAYAPAAIcCAT8DCADAAIcEgADARFGXCADAAIcGgQDARFGkCQAAwAD9ZwAAAAABBsAAhx+Bc4cAhwCHxwAAIwAAAAEDhwCHxwAAAAAAAABgA8AA/esBSgABDwAuwACHBgAARFHfAERSEAAAAAECwACHIoFzh8qH0J2KA8AAWssAAAFgAcAA/VEAABgEwACHJIFzh/yIAAmCZwBgA8AAhwIABMAAhyWBc4gRiBUJgL0AYAPAAP3rAATAAIcmgXOJTYmLBp22AGADwACHIgFqiV5gA8AAhyLAAWJbBMAAhyeBc4nDieYGwABauwBgA8AAhyIBaonSYAPAAIdHwAFicgTAAIcogXOKHopiBp3DAGADwACHIgFqijJgA8AAhyLAAWKJBMAAhymBc4qgit8GwABavABgA8AAhyIBaoqyYAPAAIciwAFioATAAIcqgXOLHYtcBsAAWr0AYAPAAIciAWqLL2ADwACHIsABYrcEwACHK4Fzi5qL2QbAAFq+AGADwACHIgFqi6xgA8AAhyLAAWLOBMAAhyyBc4wXjFYGwABavwBgA8AAhyIBaowpYAPAAIciwAFi5QTAAIctgXOMlYzXBsAAWsAAYAPAAIciAWqMqGADwACHIsABYvwEwACHLoFzjRWNVAbAAFrBAGADwACHIgFqjSdgA8AAhyLAAWMTBMAAhy+Bc42TjdMGwABawgBgA8AAhyIBao2lYAPAAIciwAFjKgTAAIcwgXOOEo5SBsAAWsMAYAPAAIciAWqOJGADwACHIsABY0EEwACHMYFzjpKO1AbAAFrEAGADwACHIgFqjqVgA8AAhyLAAWNYBMAAhzKBc48Tj1UGwABaxQBgA8AAhyIBao8mYAPAAIciwAFjbwTAAIczgXOPk4/QBp26AGADwACHIgFqj6RgA8AAhyLAAWOGBMAAhzSBc5APkFEGwABaxgBgA8AAhyIBapAiYAPAAIciwAFjnQTAAIc1gXOQj5DMBp0RAGADwACHIgFqkKBgA8AAhyLAAWO0BMAAhzaBc5EKkUkGwABaxwBgA8AAhyIBapEcYAPAAIciwAFjywTAAIc3gXORh5HEBsAAWsgAYAPAAIciAWqRmGADwACHIsABY+IEwACHOIFzkgKSQQbAAFrJAGADwACHIgFqkhRgA8AAhyLAAWP5BMAAhzmBc5KBktEGmioAYAPAAIciAWqSm2ADwACHTcABZBAEwACHOoFzkw+TXQaaKQBgA8AAhyIBapMoYAPAAIdNwAFkJwTAAIc7gXOTnZPkBsAAWsoAYAPAAIciAWqTs2ADwACHU8ABZD4BBcAAh0aBc4gaiCCIRgGAtcAAhuMAA4gwiEYAAAACAgKINgAABIJnYAPAAIcCAIhBAAAEgL1gA8AA/esAAGADwACHIgE/AwgBwACHJIAAwERVqggBwACHJYEAwERVuAkBiCDAAP1nAAAAAAYGwACHPYFziKeIsIjHAQDAAFq4AAAAAQOIwIjHAAAAAAAAAGADwAD6PwFKiMMBKQbAAIc+gXOIzIjXiOsBALseAAAAAQOI5IjrAAAAAAAAAGADwAD96wFKiOcBFojnLoC9wACHJQbAAIdAgXOI8IkDiRUAACMBaojxYAPAAP1RAgAAAQOJC4kVAAAAAAAAAGADwAD96wFKiREBFokRLoC9wACHJQbAAIdBgXOT6ZP/lO0AAYMHAAAAAQOUBJTtAAAAAQEBlAwAAACAlmADwAD96wAAYAPAAIciAT4BR5QZgJQhwERWuQQBlDVqlDVgA8AA/evAAJr5AD4BSpRDAWqUSmADwACHIsABZBABlGJqlGJgA8AA/evAAJr8AD4BSpRwAWqUd2ADwACHIsABZCcBlI5qlI5gA8AA/evAAJtGAD4BSpScAWqUo2ADwACHIsABZD4AAT4BSpTDAR6UysAAh0IBAAGAlN3ARFa5AAbAAIdCgXOU8pUImCcAAcAAWswAAAABA5UamCcAAAABAQGVIgAAAICWYAPAAP3rAABgA8AAhyIBPgFHlS+AlTfARFeEFAGVS2qVS2ADwAD968AAm0kAPgFKlVkBapVgYAPAAIciwAFiWwGVb2qVb2ADwAD968AAm0sAPgFKlX0BapWEYAPAAIciwAFicgGVl2qVl2ADwAD968AAtl4APgFKlaUBapWsYAPAAIciwAFiiQGVvmqVvmADwAD968AAm20APgFKlcsBapXSYAPAAIciwAFizgGV4mqV4mADwAD968AAm3MAPgFKle8BapX2YAPAAIciwAFi5QGWBmqWBmADwAD968AAm3AAPgFKlhMBapYaYAPAAIciwAFjEwGWKmqWKmADwAD968AAm3UAPgFKljgBapY/YAPAAIciwAFi/AGWUGqWUGADwAD968AAm2gAPgFKll0BapZkYAPAAIciwAFioAGWdGqWdGADwAD968AAm2oAPgFKloEBapaIYAPAAIciwAFitwGWmGqWmGADwAD968AAm2UAPgFKlqYBapatYAPAAIciwAFjKgGWvWqWvWADwAD968AAm2IAPgFKlssBapbSYAPAAIciwAFjQQGW4mqW4mADwAD968AAtb0APgFKlvEBapb4YAPAAIciwAFjWAGXCWqXCWADwAD968AAm1EAPgFKlxcBapceYAPAAIciwAFjbwGXL2qXL2ADwAD968AAm04APgFKlzwBapdDYAPAAIciwAFjhgGXUmqXUmADwAD968AAm1YAPgFKl2ABapdnYAPAAIciwAFjnQGXeGqXeGADwAD968AAm1QAPgFKl4UBapeMYAPAAIciwAFjtAGXm2qXm2ADwAD968AAm18APgFKl6gBapevYAPAAIciwAFjywGXv2qXv2ADwAD968AAm1wAPgFKl8wBapfTYAPAAIciwAFj+QGX42qX42ADwAD968AAm1kAPgFKl/ABapf3YAPAAIciwAFj4gABPgFKmBIBKwbAAIdDgXOYSJhenYgAAcAAWrkAAAABA5hmnYgAAAABAQGYegAAAIJnYAPAAIcCAABgA8AAhyIBPgFHmIaAmI7ARFp+FgGYtGqYtGADwACHAsABAMcAPgFKmMABapjHYAPAAIciwAFiWwGY6WqY6WADwACHAsABAN4APgFKmPkBapkAYAPAAIciwAFicgGZJmqZJmADwACHAsABAs4APgFKmTUBapk8YAPAAIciwAFiiQGZYWqZYWADwACHAsABAe4APgFKmW4Bapl1YAPAAIciwAFizgGZmGqZmGADwACHAsABAgYAPgFKmaUBapmsYAPAAIciwAFi5QGZz2qZz2ADwACHAsABApwAPgFKmdwBapnjYAPAAIciwAFjEwGaBmqaBmADwACHAsABAh4APgFKmhQBapobYAPAAIciwAFi/AGaP2qaP2ADwACHAsABAb8APgFKmkwBappTYAPAAIciwAFioAGadmqadmADwACHAsABAdYAPgFKmoMBapqKYAPAAIciwAFitwGarWqarWADwACHAsABAXUAPgFKmroBaprBYAPAAIciwAFjKgGa5Gqa5GADwACHAsABAY0APgFKmvEBapr4YAPAAIciwAFjQQGbG2qbG2ADwACHAsABAaUAPgFKmykBapswYAPAAIciwAFjWAGbVGqbVGADwACHAsABAmgAPgFKm2IBaptpYAPAAIciwAFjbwGbjWqbjWADwACHAsABAjYAPgFKm5kBapugYAPAAIciwAFjhgGbwmqbwmADwACHAsABAoIAPgFKm9ABapvXYAPAAIciwAFjnQGb+2qb+2ADwACH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uMBEkS4jAAAAAMAA/k4GwACHvoFEu8674bv9AAAjAWq7z2ADwAD9UQIAAAEDu+m7/QAAAAAAAABgA8AA/esBSrvvARy78xa77y6ZysAAh6wjAAAAAMAA/V8AAER4zgBEelIARHqoAER7KQBEe38ARHwAAER8QgBEfiUARH5xAER+rwBEgFAARIKuAESEDgBEhJIARITXAESFqwBEhf4ARIZCAESGxQBEh/MARIovAESKxwBEi+wARJC5AESRkgBEkd0AAAAZAsAAh86BRMAAQcjAAEHOwAB24gObvAAAAWABwAD9UQAABQTAAIfQgUTAAEJOwABCXwaD5wBgA8AA/esBasAAQlRgA8AA/evAAWS7BMAAh9GBRMAAQn3AAEKBCYPuAGADwACHoAAEwACH04FEwABCkcAAQq8YwABa+cAAh48AYAO8wQErBMAAh9SBRMAARUzAAEVVGMAAWvrAAIePAF0DwAD8qQFgA8AAh6ABKwTAAIfVgUTAAEctwABHPxjAAFr7wACHjwBdA8AA/KkBYAPAAIegASsBBcAAh/CBRMAAR0TAAEdEwABHVwAAAAPAAEdMwABHVwAAAAEBAcAAR1IAAASD7mADwACHoAAAYAPAAIfOAT8CCAHAAIfRgADARJNECQHAAEdEwAD9ZwAAAAAVBsAAh9eBRMAAR5LAAEeawABJ4QQBrxUAAAABA8AAR7XAAEnhAAAAAgICwABHyAAAAINEYAPAAF1BAMAAR/UAAADAAFrqXQPAAPzaAmADvMFgA8AAh6AAAGADwACHzgE+Bj0cwABIC4DAAEgEwESTo4KUAQABasAASBFgA8AA/evAAWS7AMAAXUNOwABILsAASDMAAIPuYAPAAIegARzAAEg8gcAASDXARJOzSwEAARzAAEhEgMAASD3ARJOjmMUAAAAAwABdcwDAAPzuTsAASG/AAEh4AACbSl0DwAD8qQFgA8AAh6ABHMAASIGAwABIesBEk6OvLwIBYAPAAIegATTAAEiKA8AASIrAAEi+AAAAAAAAAGADwACHoAE+AUrAAEiVARzAAEijgcAASJzARJOzSwEAARzAAEirgMAASKTARJOjmMUAAAAAwABdcwDAAPzuAa8wKcAAXU5OwABI8cAASQMAAMAAWvxdA8AA/KkBYAPAAIegARzAAEkMgMAASQXARJOjry8CAWADwACHoAE0wABJFQPAAEkVwABJSQAAAAAAAABgA8AAh6ABPgFKwABJIAEcwABJLoHAAEknwESTs0sBAAEcwABJNoDAAEkvwESTo5jFAAAAAMAAXXMAwAD87gGvMCnAAF1OPRzAAElqgMAASWPARJOjgowBAAFqwABJbmADwAD968ABZLsAwABdRErAAEl4ATXAAEmDAAABAGADwACHzgEfwABJg8AAh/ABAAGCwABJjMBElAMANQAAAAEAWwEXwABJmoXAAEmYwESVlMAAWvrAAIePg8AASabARJRGwACH1DUAAAABAFsBF8AASbeFwABJtcBElZTAAFr7wACHj4TAAEnMwESU1cAAh9WFAMBElZQGwACH2YFEwABKEsAAShfAAEtyAACvFgAAAAEDwABKJsAAS3IAAAABAQHAAEowAAAAhDtgA8AAXPIAAFwBPgU9HMAASkGAwABKPMBElj+ClAEAAWrAAEpHYAPAAP3rwAFkuwDAAFz3PRzAAEpWgMAASlHARJY/r74BAAEWwABKZhbAAEphLoPuwACH0ZnKwACHrADAAF0gPRzAAEp1gMAASnDARJY/iEQDAWADwACHoAIWwABKfy7AAFr6wACHj8AAh9Q0wABKigPAAEqKwABKzAAAAAEBAcAASp4AAACD7mADwACHoAAAYAPAAP0OAT4BPRzAAEqxgMAASqzARJY/r74BAAEWwABKwYHAAEq8wESW7JnKwACHrADAAF0gAZexKcAAXPs9HMAASumAwABK5MBElj+IRAMBYAPAAIegAhbAAErzLsAAWvvAAIePwACH1TTAAEsHA8AASwfAAEtJAAAAAQEBwABLGwAAAIPuYAPAAIegAABgA8AA/Q4BPgE9HMAASy6AwABLKcBElj+vvgEAARbAAEs+gcAASznARJd7mcrAAIesAMAAXSABl7EpwABc+z0cwABLZoDAAEthwESWP4KMAQABasAAS2pgA8AA/evAAWS7AMAAXPgGwACH6oFEwABLd8AAS4fAAEuWAQCZygAAAAEDwABLi8AAS5YAAAAAAAAAYAO8wQFKwABLjgEWwABLkxbAAEuOLoPuwACH0ZnKwACHrAbAAIfagUTAAEvXwABL3MAATBwAAMAATsYAAAABA8AAS+fAAEwcAAAAAQEBwABL+wAAAIPWYAPAAIegAABgA8AA+j8BSsAATAUBHMAA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J6c8LieBagBKnsQBgp7LwETzbAbAAIjggXifFZ8ooWgAALz8AAAAAQOfPaFoAAAAAQEBn0IAAAAnYAPAAPwFAABgA8AATbIBPgRJn08cn1mAn1PARPQngW0BAAEWn2oWn1wutK7AAIjctz7AAGi6AMAA/TU+AkAhHJ/kHJ/cFp/PLsAAWynAAIjbSwEAAYCf3cBE9CcAwAD87kgBAAErAMAATcefz5/rAR6f97XDAgACaqAAYAO11cAAxUMkoGQFJ8AAW0eAoFTARPQnJ4GeLieBagBKoG4BHKCCFqB1LsAAWynAAIjbSwEAAYCgg8BE9CcAwAD87j9OoKigrgAAgJZgA8AATbIBHKC5FqCwLlvAAIjdSwEAAYCgusBE9CcAwAD8uEAhHKDcgaDWwET07UgBAAErAMAATceg1qDjAR6g7bXDAgACaqD2YAO11cAAxUMkoVAFJ8AAW0iAoUDARPQnJ4GeLieBagBKoVgBgaFfwET07QbAAIjhgXihbaGApMIAACMBaqFuYAPAAP1RAgAAAQOhiKTCAAAAAAAAAGADwAD96wE+C06hnqGhAACD5GADwAD+NQEfoafAAP5UAAAAAD0cob6AobvARPWdgooBAAEnwABbSQDAAP5JPRyh5ICh4cBE9Z2CigEAASfAAFtKAMAA/klOogeiEgAAu9NgA8AA+j8BKj0coi0Woh8uwABbKcAAiNuD+AEAATSiNQOiNaN9AAAAAgICojoAAACD0VsAolIAAACAlmADwABNsgAAYAPAAP0OAT4FSaJhgaJlwET17D4BPRyifoCie8BE9Z2CigEAASeApwDAAP5JP0mimCWioIKinMBE9h9gA8AA/es+Az0coriAorXARPWdgooBAAEng64AwAD+ST0cos+AoszARPWdgooBAAEUotXARPYfAgFgA8AA/esAwAD+ST0couaAouPARPWdgooBAAEng64AwAD+ST4BPRyjDICjCcBE9Z2CigEAAYKjEsBE9h8AwAD+ST0coymAoybARPWdgooBAAEnguYAwAD+ST0coz6AozvARPWdgooBAAEco0qDo0TARPYor9YAAAAAwABNwgDAAP5JPYmjZcBE9ewpAMAA/Pk9HKOHgKOEwET1nYKKAQABJ8AAW0sAwAD+ST0co6mAo6bARPWdgooBAAEWo68utK7AAIjcAMAA/kk9HKPG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sQC4EwAAAKELYAOesQC4KAAAAIDuYAPAAPwFALg1AAAAn1VgA56xALhHAAAAnQ9gA56xAABcAT4BPTUAAAABAGADwABXFQEWuFcuqZLAAImdIxy4YYcAwEXRq0gBAAErAAArHLhhhwDARdGroQ4HAAeAuGvARdFOgbh4wEXRWoK4iMBF0WaDuJPARdFyhLiswEXRfoW4s8BF0YyGuL/ARdGYAMAAV1MBXAbAAIoYgX640bjiuS0AAKIhAWq40mADwAD9UQIAAAEDuPO5LQAAAAEBAbj6AAAAklRgA56xAABcAT4BPTUAAAABAGADwABXFQEWuQcuqZLAAImdIxy5EYEAwEXSVkgBAAErAAArHLkRgQDARdJWoiEBAAGAuSPARdJDAMAAV/UBXAbAAIoZgX65MrlDuYIAAKM7AWq5M2ADwAD9UQIAAAEDuUu5ggAAAAEBAblSAAAAnQ9gA56xAABcAT4BPTUAAAABAGADwABXFQEWuWIuqZLAAImdIxy5bIEAwEXS10gBAAErAAArHLlsgQDARdLXozsBAAGAuXXARdLEAMAAV10BXAbAAIoagX65h7mYudkAAK0jAWq5iGADwAD9UQIAAAEDuaS52QAAAAEBAbmrAAAAklRgA56xAABcAT4BPTUAAAABAGADwABXFQEWubguqZLAAImdIxy5woEAwEXTWEgBAAErAAArHLnCgQDARdNYrSMBAAGAuc/ARdNFAMAAV2EBXAbAAIobgX653rnvuj4AAKMuAWq532ADwAD9UQIAAAEDugK6PgAAAAEBAboJAAAAklRgA56xAABcAT4BPTUAAAABAGADwABXFQEWuhYuqZLAAImdIxy6IIEAwEXT2UgBAAErAAArHLoggQDARdPZoy4BAAGAujTARdPGAMAAV/YBXAbAAIocgX66Q7pUuqEAAKMnAWq6RGADwAD9UQIAAAEDuma6oQAAAAEBAbptAAAAklRgA56xAABcAT4BPTUAAAABAGADwABXFQEWunouqZLAAImdIxy6hIEAwEXUWkgBAAErAAArHLqEgQDARdRaoycBAAGAupfARdRHAMAAV18BXAbAAIodgX66prq3vBoAAKKRAWq6p2ADwAD9UQIAAAEDusm8GgAAAAcHB7rXAAAAopJgA56xALrwAAAAopNgA56xALsNAAAAof9gA56xALskAAAAopRg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AAAAAQBgA8AAVxUBFsAARDkuqZLAAImdIxzAAERDgQDARd+ASAEAASsAACscwABEQ4EAwEXfgKErAQABgMAARFLARd9rAMAAV5IBXAbAAIovgX7AAERhwABEcsAARO8AAKEoAWrAAERiYAPAAP1RAgAAAQPAAESBwABE7wAAAAMDA8AARIYAAACA7mADwAD8BQDAAESTAAAAn1VgA56xAMAARKUAAACdD2ADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAES1LqmSwACJnSMcwABEv4MAwEXgNUgBAAErAAArHMAARL+DAMBF4DWhKAMAA4DAAETPwEXgAoHAAETWwEXgEoLAAETiwEXgIADAAFeUAVwGwACKMIF+wABE9MAARQXAAEVcAACjQwFqwABE9WADwAD9UQIAAAEDwABFGMAARVwAAAABAQHAAEUdAAAAo0BgA8AA/AUAAFwBPgE9NQAAAAEAYAPAAFcVARbAAEUvLqmSwACJnSMcwABFOYEAwEXg4EgBAAErAAArHMAARTmBAMBF4OCjQwEAAYDAAEVNwEXgyQDAAFebAVwGwACKMYF+wABFYcAARXLAAEXlAAC++wFqwABFYmADwAD9UQIAAAEDwABFgMAAReUAAAACAgLAAEWHAAAAvvxgA56xAMAARZ0AAACh3WADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAEWuLqmSwACJnSMcwABFuIIAwEXhhUgBAAErAAArHMAARbiCAMBF4YW++wIAAoDAAEXHwEXhYoHAAEXXwEXhcADAAFedAVwGwACKMoF+wABF6sAARfvAAEZ2AAChyAFqwABF62ADwAD9UQIAAAEDwABGC8AARnYAAAACAgLAAEYQAAAAoclgA8AA/AUAwABGKgAAAJ0PYAOesQAAXAE+AT01AAAAAQBgA8AAVxUBFsAARjouqZLAAImdIxzAAEZEggDAReI1SAEAASsAACscwABGRIIAwEXiNaHIAgACgMAARlXAReIQgcAARmnAReIgAMAAV6EBXAbAAIozgX7AAEZ7wABGjMAARwMAAKJeAWrAAEZ8YAPAAP1RAgAAAQPAAEacwABHAwAAAAICAsAARqMAAACiX2ADnrEAwABGsgAAAKJgYAPAAPwFAABcAT4BPTUAAAABAGADwABXFQEWwABGyS6pksAAiZ0jHMAARtOCAMBF4uVIAQABKwAAKxzAAEbTggDAReLlol4CAAKAwABG5MBF4sCBwABG78BF4s4AwABXwwFcBsAAijSBfsAARwjAAEcZwABHfgAAox4BasAARwlgA8AA/VECAAABA8AARzTAAEd+AAAAAQEBwABHOwAAAJ0PYAOesQAAXAE+AT01AAAAAQBgA8AAVxUBFsAAR0suqZLAAImdIxzAAEdVgQDAReOFSAEAASsAACscwABHVYEAwEXjhaMeAQABgMAAR3HAReNwAMAAV2UBXAbAAIo1gX7AAEeDwABHlMAAR78AAKEXAWrAAEeEYAPAAP1RAgAAAQPAAEedwABHvwAAAAAAAABcAT4BPTUAAAABAGADwABXFQEWwABHpi6pksAAiZ0jHMAAR7CAAMBF5A5IAQABKwAAKxzAAEewgADAReQOoRcAAAAAwABXpQFcBsAAijaBfsAAR8TAAEfVwABIYgAAoPgBasAAR8VgA8AA/VECAAABA8AAR+DAAEhiAAAAAwMDwABH5wAAAJ9VYAOesQDAAEf5AAAAoPlgA56xAMAASBEAAACdD2ADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAEghLqmSwACJnSMcwABIK4MAwEXkuEgBAAErAAArHMAASCuDAMBF5Lig+AMAA4DAAEg3wEXkh4HAAEhDwEXklYLAAEhVwEXkowDAAFerAVwGwACKN4F+wABIZ8AASHjAAEi9AAChBAFqwABIaGADwAD9UQIAAAEDwABIh8AASL0AAAABAQHAAEiMAAAAgO5gA8AA/AUAAFwBPgE9NQAAAAEAYAPAAFcVARbAAEiZLqmSwACJnSMcwABIo4EAwEXlY0gBAAErAAArHMAASKOBAMBF5WOhBAEAAYDAAEizwEXlTADAAFepAVwGwACKOIF+wABIwsAASNPAAEmlAAC/LwFqwABIw2ADwAD9UQIAAAEDwABI3MAASaUAAAAFBQXAAEjjAAAAvvNgA56xAMAASPMAAACfVWADnrEAwABJBQAAAL8wYAOesQDAAEkdAAAAoSdgA56xAMAASTYAAACdD2ADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAElGLqmSwACJnSMcwABJUIUAwEXmMkgBAAErAAArHMAASVCFAMBF5jK/LwUABYDAAEljwEXl5YHAAEltwEXl84LAAEl5wEXmAYPAAEmFwEXmD4TAAEmYwEXmHQDAAFenAVwGwACKOYF+wABJqsAASbvAAEoyAAC/QwFqwABJq2ADwAD9UQIAAAEDwABJzsAASjIAAAACAgLAAEnVAAAAv0JgA56xAMAASekAAACdD2ADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAEn5LqmSwACJnSMcwABKA4IAwEXm+0gBAAErAAArHMAASgOCAMBF5vu/QwIAAoDAAEoXwEXm2IHAAEolwEXm5gDAAFc0AVwGwACKOoF+wABKN8AASkjAAEqrAACjHQFqwABKOGADwAD9UQIAAAEDwABKYsAASqsAAAABAQHAAEppAAAAnQ9gA56xAABcAT4BPTUAAAABAGADwABXFQEWwABKeS6pksAAiZ0jHMAASoOBAMBF55tIAQABKwAAKxzAAEqDgQDAReebox0BAAGAwABKnsBF54YAwABXYwFcBsAAijuBfsAASrDAAErBwABLpwAAv0sBasAASrFgA8AA/VECAAABA8AAStnAAEunAAAABQUFwABK4AAAAIKUYAOesQDAAErtAAAAv0xgA56xAMAASwEAAACVpmADnrEAwABLFQAAAL9NYAOesQDAAEsuAAAAnQ9gA56xAABcAT4BPTUAAAABAGADwABXFQEWwABLPi6pksAAiZ0jHMAAS0iFAMBF6GpIAQABKwAAKxzAAEtIhQDARehqv0sFAAWAwABLasBF6B2BwABLccBF6CuCwABLf8BF6DmDwABLh8BF6EeEwABLmsBF6FUAwABXcgFcBsAAijyBfsAAS6zAAEu9wABMBgAAousBasAAS61gA8AA/VECAAABA8AAS83AAEwGAAAAAQEBwABL1AAAAJJUYAOesQAAXAE+AT01AAAAAQBgA8AAVxUBFsAAS+EuqZLAAImdIxzAAEvrgQDAReklSAEAASsAACscwABL64EAwEXpJaLrAQABgMAAS/zARekQAMAAWBABXAbAAIo9gX7AAEwLwABMHMAATLgAAKKdAWrAAEwMYAPAAP1RAgAAAQPAAEw3wABMuAAAAAMDA8AATEMAAACA7mADwAD8BQDAAExQAAAAn1VgA56xAMAATGIAAACdD2ADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAExyLqmSwACJnSMcwABMfIMAwEXp2kgBAAErAAArHMAATHyDAMBF6dqinQMAA4DAAEyYwEXpp4HAAEyfwEXpt4LAAEyrwEXpxQDAAFetAVwGwACKPoF+wABMvcAATM7AAE0tAAC/IQFqwABMvmADwAD9UQIAAAEDwABM1cAATS0AAAACAgLAAEzcAAAAvtBgA56xAMAATO8AAACh3WADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAE0ALqmSwACJnSMcwABNCoIAwEXqkUgBAAErAAArHMAATQqCAMBF6pG/IQIAAoDAAE0SwEXqboHAAE0fwEXqfADAAFevAVwGwACKP4F+wABNMsAATUPAAE3gAAC+zwFqwABNM2ADwAD9UQIAAAEDwABNTMAATeAAAAAEBATAAE1aAAAAvtBgA56xAMAATW0AAAC+0WADnrEAwABNfgAAAKHdYAOesQDAAE2OAAAAoc9gA8AA+j8AAFwBPgE9NQAAAAEAYAPAAFcVARbAAE2dLqmSwACJnSMcwABNp4QAwEXrXUgBAAErAAArHMAATaeEAMBF612+zwQABIDAAE2xwEXrHIHAAE2+wEXrKoLAAE3JwEXrOIPAAE3UwEXrRgDAAFexAVwGwACKQIF+wABN5cAATfbAAE51AAC/KAFqwABN5mADwAD9UQIAAAEDwABOD8AATnUAAAACAgLAAE4WAAAAn1VgA56xAMAATigAAACdD2ADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAE44LqmSwACJnSMcwABOQoIAwEXsHUgBAAErAAArHMAATkKCAMBF7B2/KAIAAoDAAE5cwEXr+oHAAE5owEXsCADAAFezAVwGwACKQYF+wABOesAATovAAE8CAACjRAFqwABOe2ADwAD9UQIAAAEDwABOnsAATwIAAAACAgLAAE6lAAAAo0VgA56xAMAATrkAAACdD2ADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAE7JLqmSwACJnSMcwABO04IAwEXsy0gBAAErAAArHMAATtOCAMBF7MujRAIAAoDAAE7nwEXsqIHAAE71wEXstgDAAFfGAVwGwACKQoF+wABPB8AATxjAAE+zAACh4QFqwABPCGADwAD9UQIAAAEDwABPKsAAT7MAAAADAwPAAE83AAAAoeJgA8AA+j8AwABPTAAAAJ9VYAOesQDAAE9eAAAAnQ9gA56xAABcAT4BPTUAAAABAGADwABXFQEWwABPbi6pksAAiZ0jHMAAT3iDAMBF7YlIAQABKwAAKxzAAE94gwDARe2JoeEDAAOAwABPi8BF7VaBwABPmsBF7WaCwABPpsBF7XQAwABXugFcBsAAikOBfsAAT7jAAE/JwABQDAAAvwwBasAAT7lgA8AA/VECAAABA8AAT9DAAFAMAAAAAQEBwABP1wAAAL8NYAOesQAAXAE+AT01AAAAAQBgA8AAVxUBFsAAT+ouqZLAAImdIxzAAE/0gQDARe4ySAEAASsAACscwABP9IEAwEXuMr8MAQABgMAAT/zARe4dAMAAV70BXAbAAIpEgX7AAFARwABQIsAAUKUAAKNvAWrAAFASYAPAAP1RAgAAAQPAAFAwwABQpQAAAAMDA8AAUDUAAACjcGADwAD8BQDAAFBGAAAAn1VgA56xAMAAUFgAAACdD2ADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAFBoLqmSwACJnSMcwABQcoMAwEXu50gBAAErAAArHMAAUHKDAMBF7uejbwMAA4DAAFCBwEXutIHAAFCMwEXuxILAAFCYwEXu0gDAAFfBAVwGwACKRYF+wABQqsAAULvAAFINAACjaQFqwABQq2ADwAD9UQIAAAEDwABQyMAAUg0AAAAHBwfAAFDUAAAAo0BgA8AA/AUAwABQ6gAAAKNeYAPAAPwFAMAAUQcAAACjamADnrEAwABRIwAAAKNrYAOesQDAAFFAAAAAo2xgA8AA/AUAwABRXAAAAJ9UYAOesQDAAFF0AAAAnQ9gA56xAABcAT4BPTUAAAABAGADwABXFQEWwABRhC6pksAAiZ0jHMAAUY6HAMBF7+pIAQABKwAAKxzAAFGOhwDARe/qo2kHAAeAwABRnMBF73uBwABRqMBF74uCwABRucBF75uDwABR0cBF76mEwABR5MBF77eFwABR9MBF78eGwABSAMBF79UAwABYHwFcBsAAikaBfsAAUhLAAFIjwABSmgAAo20BasAAUhNgA8AA/VECAAABA8AAUjXAAFKaAAAAAgICwABSPAAAAKNuYAOesQDAAFJRAAAAnQ9gA56xAABcAT4BPTUAAAABAGADwABXFQEWwABSYS6pksAAiZ0jHMAAUmuCAMBF8MVIAQABKwAAKxzAAFJrggDARfDFo20CAAKAwABSfsBF8KKBwABSjcBF8LAAwABXvwFcBsAAikeBfsAAUp/AAFKwwABS+QAAoecBasAAUqBgA8AA/VECAAABA8AAUsDAAFL5AAAAAQEBwABSxwAAAJJUYAOesQAAXAE+AT01AAAAAQBgA8AAVxUBFsAAUtQuqZLAAImdIxzAAFLegQDARfFlSAEAASsAACscwABS3oEAwEXxZaHnAQABgMAAUu/ARfFQAMAAV3sBXAbAAIpIgX7AAFL+wABTD8AAU2QAAMAAQM4BasAAUv9gA8AA/VECAAABA8AAUyXAAFNkAAAAAQEBwABTLAAAAJJUYAOesQAAXAE+AT01AAAAAQBgA8AAVxUBFsAAUzkuqZLAAImdIxzAAFNDgQDARfH+SAEAASsAACscwABTQ4EAwEXx/sAAQM4BAAGAwABTWsBF8ekAwABXxwFcBsAAikmBfsAAU2nAAFN6wABUuAAAoQcBasAAU2pgA8AA/VECAAABA8AAU4vAAFS4AAAABwcHwABTmQAAAKEIYAOesQDAAFOyAAAAoQlgA56xAMAAU84AAAChCmADnrEAwABT5QAAAKELYAOesQDAAFQAAAAAgO5gA8AA/AUAwABUEwAAAJ9VYAOesQDAAFQrAAAAnQ9gA56xAABcAT4BPTUAAAABAGADwABXFQEWwABUOy6pksAAiZ0jHMAAVEWHAMBF8u1IAQABKwAAKxzAAFRFhwDARfLtoQcHAAeAwABUV8BF8oKBwABUZMBF8pCCwABUdMBF8p6DwABUh8BF8qyEwABUmMBF8rqFwABUn8BF8sqGwABUq8BF8tgAwABXygFcBsAAikqBfsAAVL3AAFTOwABVVwAAvvIBasAAVL5gA8AA/VECAAABA8AAVN/AAFVXAAAAAwMDwABU5gAAAJ9VYAOesQDAAFT4AAAAvvNgA56xAMAAVQgAAACdD2ADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAFUYLqmSwACJnSMcwABVIoMAwEXz1kgBAAErAAArHMAAVSKDAMBF89a+8gMAA4DAAFU0wEXzpYHAAFVAwEXzs4LAAFVKwEXzwQDAAFfMAVwGwACKS4F+wABVXMAAVW3AAFYAAACiwAFqwABVXWADwAD9UQIAAAEDwABVfMAAVgAAAAADAwPAAFWBAAAAosFgA8AA/AUAwABVkwAAAKLCYAOesQDAAFWlAAAAosNgA56xAABcAT4BPTUAAAABAGADwABXFQEWwABVuy6pksAAiZ0jHMAAVcWDAMBF9J1IAQABKwAAKxzAAFXFgwDARfSdosADAAOAwABV1cBF9GqBwABV4cBF9HqCwABV7cBF9IgAwABX0wFcBsAAikyBfsAAVgXAAFYWwABWlQAAowQBasAAVgZgA8AA/VECAAABA8AAVibAAFaVAAAAAwMDwABWKwAAAIDuYAPAAPwFAMAAVjgAAACfVWADnrEAwABWSgAAAJ0PYAOesQAAXAE+AT01AAAAAQBgA8AAVxUBFsAAVlouqZLAAImdIxzAAFZkgwDARfVkSAEAASsAACscwABWZIMAwEX1ZKMEAwADgMAAVnXARfUxgcAAVnzARfVBgsAAVojARfVPAMAAV90BXAbAAIpNgX7AAFaawABWq8AAVugAAL7eAWrAAFabYAPAAP1RAgAAAQPAAFa2wABW6AAAAAEBAcAAVrsAAACA7mADwAD8BQAAXAE+AT01AAAAAQBgA8AAVxUBFsAAVsguqZLAAImdIxzAAFbSgQDARfYPSAEAASsAACscwABW0oEAwEX2D77eAQABgMAAVt7ARfX4AMAAV3cBXAbAAIpOgX7AAFbtwABW/sAAV30AAKONAWrAAFbuYAPAAP1RAgAAAQPAAFcNwABXfQAAAAMDA8AAVxQAAACSVGADnrEAwABXHwAAACdgA8AA/AUAwABXLAAAAKOOYAOesQAAXAE+AT01AAAAAQBgA8AAVxUBFsAAV0IuqZLAAImdIxzAAFdMgwDARfbDSAEAASsAACscwABXTIMAwEX2w6ONAwADgMAAV1zARfaRgcAAV2PARfafgsAAV2rARfauAMAAV+IBXAbAAIpPgX7AAFeCwABXk8AAWAAAAKOQAWrAAFeDYAPAAP1RAgAAAQPAAFejwABYAAAAAAICAsAAV6oAAACfVWADnrEAwABXvAAAAJ0PYAOesQAAXAE+AT01AAAAAQBgA8AAVxUBFsAAV8wuqZLAAImdIxzAAFfWggDARfd6SAEAASsAACscwABX1oIAwEX3eqOQAgACgMAAV+fARfdXgcAAV/PARfdlAMAAV+QBXAbAAIpQgX7AAFgFwABYFsAAWIUAAKHwAWrAAFgGYAPAAP1RAgAAAQPAAFgswABYhQAAAAEBAcAAWDMAAACh8WADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAFhNLqmSwACJnSMcwABYV4EAwEX4GkgBAAErAAArHMAAWFeBAMBF+Bqh8AEAAYDAAFhuwEX4BQDAAFePAVwGwACKUYF+wABYisAAWJvAAFkKAACiBAFqwABYi2ADwAD9UQIAAAEDwABYssAAWQoAAAACAgLAAFi3AAAAgO5gA8AA/AUAwABYxAAAAJ0PYAOesQAAXAE+AT01AAAAAQBgA8AAVxUBFsAAWNQuqZLAAImdIxzAAFjeggDARfjBSAEAASsAACscwABY3oIAwEX4waIEAgACgMAAWPbARficgcAAWP3ARfisAMAAV+gBXAbAAIpSgX7AAFkPwABZIMAAWZMAAKNKAWrAAFkQYAPAAP1RAgAAAQPAAFkxwABZkwAAAAICAsAAWTgAAACjI2ADnrEAwABZTAAAAJ0PYAOesQAAXAE+AT01AAAAAQBgA8AAVxUBFsAAWVwuqZLAAImdIxzAAFlmggDARflvSAEAASsAACscwABZZoIAwEX5b6NKAgACgMAAWXjARflMgcAAWYbARflaAMAAV+oBXAbAAIpTgX7AAFmYwABZqcAAWfwAAK0dAWrAAFmZYAPAAP1RAgAAAQPAAFm+wABZ/AAAAAEBAcAAWcUAAACSVGADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAFnSLqmSwACJnSMcwABZ3IEAwEX6D0gBAAErAAArHMAAWdyBAMBF+g+tHQEAAYDAAFnywEX5+gDAAFdFAVwGwACKVIF+wABaAcAAWhLAAFqdAACjWAFqwABaAmADwAD9UQIAAAEDwABaI8AAWp0AAAADAwPAAFoqAAAAo1lgA56xAMAAWjwAAACiOmADnrEAwABaTQAAAJ0PYAOesQAAXAE+AT01AAAAAQBgA8AAVxUBFsAAWl0uqZLAAImdIxzAAFpngwDARfrCSAEAASsAACscwABaZ4MAwEX6wqNYAwADgMAAWnnARfqRgcAAWoXARfqfgsAAWpDARfqtAMAAWCoBXAbAAIpVgX7AAFqiwABas8AAWwIAAKJ6AWrAAFqjYAPAAP1RAgAAAQPAAFrDwABbAgAAAAEBAcAAWsoAAACFtmADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAFraLqmSwACJnSMcwABa5IEAwEX7a0gBAAErAAArHMAAWuSBAMBF+2uiegEAAYDAAFr1wEX7VgDAAFfrAVwGwACKVoF+wABbB8AAWxjAAFt1AACiCQFqwABbCGADwAD9UQIAAAEDwABbMsAAW3UAAAABAQHAAFs5AAAAklRgA56xAABcAT4BPTUAAAABAGADwABXFQEWwABbRi6pksAAiZ0jHMAAW1CBAMBF/AJIAQABKwAAKxzAAFtQgQDARfwCogkBAAGAwABba8BF++0AwABX7AFcBsAAileBfsAAW3rAAFuLwABcAAAAojgBasAAW3tgA8AA/VECAAABA8AAW57AAFwAAAAAAgICwABbpQAAAKI5YAOesQDAAFu3AAAAojpgA56xAABcAT4BPTUAAAABAGADwABXFQEWwABbyC6pksAAiZ0jHMAAW9KCAMBF/KdIAQABKwAAKxzAAFvSggDARfynojgCAAKAwABb5sBF/ISBwABb8sBF/JIAwABXHAFcBsAAiliBfsAAXAXAAFwWwABcsQAAo3kBasAAXAZgA8AA/VECAAABA8AAXCrAAFyxAAAAAwMDwABcNwAAAKN6YAPAAPo/AMAAXEgAAACje2ADnrEAwABcXAAAAJ0PYAOesQAAXAE+AT01AAAAAQBgA8AAVxUBFsAAXGwuqZLAAImdIxzAAFx2gwDARf1lSAEAASsAACscwABcdoMAwEX9ZaN5AwADgMAAXIvARf0ygcAAXJbARf1CgsAAXKTARf1QAMAAWAMBXAbAAIpZgX7AAFy2wABcx8AAXS4AAKN3AWrAAFy3YAPAAP1RAgAAAQPAAFzWwABdLgAAAAICAsAAXN0AAAChgmADnrEAwABc8AAAAKGEYAOesQAAXAE+AT01AAAAAQBgA8AAVxUBFsAAXP0uqZLAAImdIxzAAF0HggDARf4cSAEAASsAACscwABdB4IAwEX+HKN3AgACgMAAXRfARf35gcAAXSTARf4HAMAAV84BXAbAAIpagX7AAF0zwABdRMAAXcsAAKK1AWrAAF00YAPAAP1RAgAAAQPAAF1UwABdywAAAAMDA8AAXVsAAACitmADnrEAwABdbAAAAKK3YAOesQDAAF2AAAAAorhgA56xAABcAT4BPTUAAAABAGADwABXFQEWwABdjS6pksAAiZ0jHMAAXZeDAMBF/thIAQABKwAAKxzAAF2XgwDARf7YorUDAAOAwABdqMBF/qeBwABds8BF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AAKAwABsoMBGEFmBwABsp8BGEGcAwABX/wFcBsAAinaBfsAAbLjAAGzJwABtGAAAvwoBasAAbLlgA8AA/VECAAABA8AAbN3AAG0YAAAAAQEBwABs4gAAAIDuYAPAAPwFAABcAT4BPTUAAAABAGADwABXFQEWwABs7y6pksAAiZ0jHMAAbPmBAMBGESBIAQABKwAAKxzAAGz5gQDARhEgvwoBAAGAwABtDsBGEQkAwABXdQFcBsAAineBfsAAbR3AAG0uwABtqwAAvxQBasAAbR5gA8AA/VECAAABA8AAbUDAAG2rAAAAAgICwABtRwAAAL8VYAOesQDAAG1eAAAAvxZgA56xAABcAT4BPTUAAAABAGADwABXFQEWwABtby6pksAAiZ0jHMAAbXmCAMBGEcVIAQABKwAAKxzAAG15ggDARhHFvxQCAAKAwABtjMBGEaKBwABtncBGEbAAwABXfwFcBsAAiniBfsAAbbDAAG3BwABuZQAAoskBasAAbbFgA8AA/VECAAABA8AAbdjAAG5lAAAAAgICwABt5gAAAKLKYAOesQDAAG3/AAAAostgA56xAABcAT4BPTUAAAABAGADwABXFQEWwABuGS6pksAAiZ0jHMAAbiOCAMBGEnNIAQABKwAAKxzAAG4jggDARhJzoskCAAKAwABuO8BGElCBwABuTsBGEl4AwABYAAFcBsAAinmBfsAAbmrAAG57wABvDAAAwABAwAFqwABua2ADwAD9UQIAAAEDwABumMAAbwwAAAACAgLAAG6fAAAAojxgA56xAMAAbrIAAACiPmADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAG7GLqmSwACJnSMcwABu0IIAwEYTI0gBAAErAAArHMAAbtCCAMBGEyPAAEDAAgACgMAAbu7ARhMAgcAAbvvARhMOAMAAV6ABXAbAAIp6gX7AAG8RwABvIsAAb3kAAMAAQLoBasAAbxJgA8AA/VECAAABA8AAbznAAG95AAAAAQEBwABvQAAAAJJUYAOesQAAXAE+AT01AAAAAQBgA8AAVxUBFsAAb00uqZLAAImdIxzAAG9XgQDARhPHSAEAASsAACscwABvV4EAwEYTx8AAQLoBAAGAwABvb8BGE7IAwABXlgFcBsAAinuBfsAAb37AAG+PwABv6gAAo6QBasAAb39gA8AA/VECAAAB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iLcAAKHGAWrAAIheYAPAAP1RAgAAAQPAAIh+wACItwAAAAEBAcAAiIUAAACSVGADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAIiSLqmSwACJnSMcwACInIEAwEY0GkgBAAErAAArHMAAiJyBAMBGNBqhxgEAAYDAAIitwEY0BQDAAFgcAVwGwACKr4F+wACIvMAAiM3AAIlEAACjCQFqwACIvWADwAD9UQIAAAEDwACI4sAAiUQAAAACAgLAAIjpAAAAklRgA56xAMAAiQIAAACCU2ADwABZVgAAXAE+AT01AAAAAQBgA8AAVxUBFsAAiREuqZLAAImdIxzAAIkbggDARjTBSAEAASsAACscwACJG4IAwEY0waMJAgACgMAAiTHARjScgcAAiTjARjSqAMAAWB0BXAbAAIqwgX7AAIlJwACJWsAAiaMAAKOiAWrAAIlKYAPAAP1RAgAAAQPAAIlqwACJowAAAAEBAcAAiXEAAACSVGADnrEAAFwBPgE9NQAAAAEAYAPAAFcVARbAAIl+LqmSwACJnSMcwACJiIEAwEY1YUgBAAErAAArHMAAiYiBAMBGNWGjogEAAYDAAImZwEY1TADAAFgWAVwGwACKsYF+wACJqMAAibnAAIouAACjCAFqwACJqWADwAD9UQIAAAEDwACJzcAAii4AAAACAgLAAInUAAAAklRgA56xAMAAie0AAACCU2ADwABZVgAAXAE+AT01AAAAAQBgA8AAVxUBFsAAifwuqZLAAImdIxzAAIoGggDARjYISAEAASsAACscwACKBoIAwEY2CKMIAgACgMAAihvARjXjgcAAiiLARjXxAMAAWCABXAbAAIqygX7AAIozwACKRMAAirsAAKKMAWrAAIo0YAPAAP1RAgAAAQPAAIpZwACKuwAAAAICAsAAimAAAACijWADnrEAwACKcgAAAJ0PYAOesQAAXAE+AT01AAAAAQBgA8AAVxUBFsAAioIuqZLAAImdIxzAAIqMggDARja2SAEAASsAACscwACKjIIAwEY2tqKMAgACgMAAiqLARjaTgcAAiq7ARjahAMAAV8QBXAbAAIqzgX7AAIrAwACK0cAAizoAAKJnAWrAAIrBYAPAAP1RAgAAAQPAAIrbwACLOgAAAAICAsAAiuIAAACfVWADnrEAwACK9AAAAKJoYAOesQAAXAE+AT01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OwAAYAOesQAGwACLaoGEh7iHvofqAALAAEFKAAAAAQOHzofqAAAAAgICh9UAAACSVGADnrEAh+MAAAChVWADwABYOwAAYAOesQAGwACLa4GEiRyJIolOAALAAFvOAAAAAQOJMolOAAAAAgICiTkAAACSVGADnrEAiUcAAAChVWADwABYOwAAYAOesQAGwACLbIGEinyKgoqnAALAAEFbAAAAAQOKi4qnAAAAAgICipIAAACSVGADnrEAiqAAAAChVWADwABYOwAAYAOesQAGwACLbYGEi3qLgIuVAALAAEFYAAAAAQOLiIuVAAAAAQEBi48AAACSVGADnrEAAGADnrEAAABGh4oARoe0AEaH3gBGiAYARohIAEaIigBGiMwARokOAEaJQgAAAAgCwACLcIGEjDSMQ5IAB8AAQPIAAAFgAcAA/VEAAAABBcAAi3qBhIxajGCMdAEAAAOMcox0AAAAAAAAAGADwACLcAE/AQkBjGDAAP1nAAAAAAYGwACLcoGEjL+MyIzlAQDAAFvPAAAAAQOM3YzlAAAAAAAAAGADwAD6PwFKjOABKgbAAItzgYSNFI0cjS0BApVoAAAAAQONLY0tAAAAAAAAAGADwAD8BQAGwACLdIGEjbyNyY4dAQDAAEFXAAAAAQON0o4dAAAAAAAAAGADwACLYwE+AT0wjdgkjhkDJ8AAW60WjfAuhYbAAP1lJ8AAW9AGwACLdoGEj0+PVY9/AALAAEFVAAAAAQOPY49/AAAAAgICj2oAAACSVGADnrEAj3gAAAChVWADwABYOwAAYAOesQAGwACLd4GEkNiQ3pEIAALAAEFaAAAAAQOQ7JEIAAAAAgICkPMAAACSVGADnrEAkQEAAAChVWADwABYOwAAYAOesQAGwACLeIGEkeeR7ZH+AAKWLwAAAAEDkfGR/gAAAAEBAZH4AAAAklRgA56xAABgA56xAAAARom8AEaJ6wBGihMARopbAEaKnQBGit8ARosRAAAABgMEwACLWoGEkoqSoQbAAED3AGADwACLYwFqkplgA8AAqynAAQpRBMAAi1uBhJNSk30GwABA+ABgA8AAi3ABapNrYAPAAKuewAELKATAAItcgYST+5QWBsAART8AYAPAAItjAWqUDGADwACrc8ABZpcFBsAAi16BhJQZlB6UrwABwABb0QAAAAEDlDeUrwAAAAEB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i8aBhcAAQ5rAAEOgwABI1APAAFvoAAABYAHAAFlWAAAAAgXAAIvKgYXAAEPowABD7sAARFgBAAADwABEF8AARFgAAAAAAAAAYAPAAIvGAT8BCQDAAEQiwABZjwIAASfAAEHPAaGsKQXAAIvLgYXAAERdwABEY8AARQgBuR0AA8AARJnAAEUIAAAAAAAAAGADwACLxgE/AQkAwABEpMAAWY8DAAEnwABCfAKhrCnAAEJ/KQEGwACLyIGFwABFDcAARR/AAEjSAADAAEE0AWrAAEUOYAPAAP1RAgAAAQPAAEUvwABI0gAAAAICAsAARTYAAACSVGADnrEAwABFRAAAAKFVYAPAAFg7AABgA56xAT4FTsAARVjAAEVjAACdmGADnrEBFsAARWuAwABFZcBGumODsJ7MQCEcwABFjBbAAEWHgsAARXzARrqKgmeeyUgBAAFqwABFj2ADwAD8BcAAmhUAwAD9KMAARXzAAEWfAEnAAEWmFsAARbWCwABFqsBGuoqc857APgI9HsAARcvAAIt9AgACgsAARezARrqKgcAARfjARrpxAErAAEYHAYLAAEYOwEa6ij9JwABGNSIewABGOcAAWccCAAKCwABGRsBGuopqwABGUl0DwAD8qQFgA8AA/evAAWf/AAEewABGesAAWVUBAAGCwABGksBGuooAPgE9isAARqfARrqKHMAARruBwABGtMBGunHAAEEiAwACgMAARtXARrpjLgEiHMAARxZqwABG+10DkWUBYQMBYAOesWADkU6zn4gLAQABgsAARyTARrqKAJFpwABYij4CPRzAAEdMgcAAR0XARrpxwABBEgIAAoLAAEd3wEa6imrAAEeJXQORZQFhAwFgA56xYAORTrOfAMAAWRFJwABHrCEWwABHvILAAEexwEa6ip1wnsI+AT2KwABIZ8BGuoocwABIhBbAAEh7gcAASHTARrpxwABBBcAAWEbAAEEiAQABgsAASJ7ARrqKAMAAi1Q/SsAASL0BgsAASMTARrqKAABGuisARrx4AAAAAQLAAIvMgYXAAEkFwABJC8AATWcDwABb6QAAAWABwABZVgAAAAEFwACL0IGFwABJS8AASVHAAEmrAQAAA8AASXLAAEmrAAAAAAAAAGADwACLzAE/AQkAwABJfcAAWY8CAAEnwABB8gGhrCkBBsAAi86BhcAASbDAAEnCwABNZQAAwABBNAFqwABJsWADwAD9UQIAAAEDwABJ0sAATWUAAAACAgLAAEnZAAAAklRgA56xAMAASecAAAChVWADwABYOwAAYAOesQE+BU7AAEn7wABKBgAAnZhgA56xARbAAEoOgMAASgjARr0og7CezEAhHMAASi8WwABKKoLAAEofwEa9T4JnnslIAQABasAASjJgA8AA/AXAAJoVAMAA/SjAAEofwABKQgBJwABKSRbAAEpYgsAASk3ARr1PnPOewD4CPR7AAEpuwACLfQIAAoLAAEqPwEa9T4HAAEqbwEa9NgBKwABKqgGCwABKscBGvU8/ScAAStgiHsAAStzAAFnHAgACgsAASunARr1PasAASvVdA8AA/KkBYAPAAP3rwAFoFwABHsAASw3AAFlVAQABgsAASyXARr1PAD4BPYrAAEs6wEa9TxzAAEtOgcAAS0fARr02wABBIgMAAoDAAEtowEa9KC4BIhzAAEupasAAS45dA5FlAWEDAWADnrFgA5FOs5+ICwEAAYLAAEu3wEa9TwCRacAAWIo+Aj0cwABL34HAAEvYwEa9NsAAQRICAAKCwABMCsBGvU9qwABMHF0DkWUBYQMBYAOesWADkU6znwDAAFkRScAATD8hFsAATE+CwABMRMBGvU+dcJ7CPgE9isAATPrARr1PHMAATRcWwABNDoHAAE0HwEa9NsAAQQXAAFhGwABBIgEAAYLAAE0xwEa9TwDAAItUP0rAAE1QAYLAAE1XwEa9TwAARrzwAEa/PQAAAAECwACL0YGFwABNlsAATZzAAFGoA8AAW+oAAAFgAcAAWVYAAAABBcAAi9WBhcAATdrAAE3gwABOGwEAAAPAAE3/wABOGwAAAAAAAABgA8AAi9EBPwEJAMAATgTAAFmPAQABJ8AAQlIAAQbAAIvTgYXAAE4gwABOMsAAUaYAAMAAQTQBasAATiFgA8AA/VECAAABA8AATkLAAFGmAAAAAgICwABOSQAAAJJUYAOesQDAAE5XAAAAoVVgA8AAWDsAAGADnrEBPgVOwABOa8AATnYAAJ2YYAOesQEWwABOfoDAAE54wEa/6oOwnsxAIRzAAE6fFsAATpqCwABOj8BGwBGCZ57JSAEAAWrAAE6iYAPAAPwFwACaFQDAAP0owABOj8AATrIAScAATrkWwABOyILAAE69wEbA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fgEAAYLAAIi4wEbfbgABHsAAiM/AAFlVAQABgsAAiOfARt9uAAEewACI/sAAWccCAAKCwACJC8BG325qwACJF10DwAD8qQFgA8AA/evAAWjTAD4CPRzAAIk4gcAAiTHARt9VwABBEgIAAoLAAIljwEbfbmrAAIl1XQORZQFhAwFgA56xYAORTrOfAMAAWRE9isAAiZjARt9uHMAAibUWwACJrIHAAImlwEbfVcAAQQXAAFhGwABBIgEAAYDAAInPwEbfRwDAAItUScAAieIWwACJ9hbAAInxgsAAiebARt9ugpCe0Z1ln1o+AT0cwACKEIHAAIoJwEbfVcAAQRICAAKCwACKO8BG325qwACKTV0DkWUBYQMBYAOesWADkU6OyQDAAFkRPgI9HMAAipCBwACKicBG31XAAEESAgACgsAAirvARt9uasAAis1dA5FlAWEDAWADnrFgA5FOs58AwABZEUnAAIrwIRbAAIsAgsAAivXARt9unXCewj4BPYrAAIurwEbfbhzAAIvIFsAAi7+BwACLuMBG31XAAEEFwABYRsAAQSIBAAGCwACL4sBG324AwACLVD9KwACMAQGCwACMCMBG324AAEbfDwBG4esAAAABAAMGwACLfYGFwACMG8AAjCDAAI2iAAHAAFv2AAAAAQPAAIxAwACNogAAAAICAsAAjEcAAACdmGADnrEAwACMWgAAAKFVYAPAAFg7AABcAT4BScAAjGYiIRbAAIxygcAAjGvARuI0wABBCMAAWEkAFsAAjJEWwACMjIDAAIyBwEbiJoKQntGdZp9ePgFJwACMoR7AAIylwABZvQIAAieZ/IDAAIy3wEbiJgA+AT0cwACM04HAAIzMwEbiNMAAQSECAAKAwACM6sBG4iZqwACM/GADkVmMDwDAAFkQScAAjSIewACNJsAAWb0CAAInmhmAwACNOMBG4iYAPgE9HMAAjVSBwACNTcBG4jTAAEEhAgACgMAAjWvARuImasAAjX1gA5FZwACWSwDAAFkQPz8GwACLfoGFwACNpcAAjarAAI4oAAHAAFv3AAAAAQPAAI3JwACOKAAAAAEBAcAAjdAAAACSVGADnrEAAGADwAD6PwFKwACN3gEiFsAAjeSAwACN3sBG41KdZ57DAR7AAI3ywABZxwIAAoDAAI3/wEbjUmrAAI4GXQPAAPypAWADwAD968ABaPMABsAAi3+BhcAAjivAAI4wwACO1QABwABb+AAAAAEDwACOV8AAjtUAAAABAQHAAI5eAAAAklRgA56xAABgA8AA+j8BSsAAjmwBIhbAAI5ygMAAjmzARuPanWiexgEewACOi8AAWccCAAKAwACOmMBG49pqwACOn10DwAD8qQFgA8AA/evAAWkLAAGBhQBG5DYARprWAEac6ABGn3AARqHiAEakNQBGpt8ARqlnAEarbABGrosARrCwAEaySQBGtKYARrdxAEa5dQBGvIUARr9KAEbB9ABGxfAARsjmAEbMbQBG0AoARtK3AEbWdgBG2hkARt6fAEbh+AAAABkARuH6AEbjJgBG464ARuQ2AAAAAwACBMAAjA7AAFv5gYYAAB+BBwAAwADqLgAAgRkAAMAAxPgAAQEBiGmBQQAApDYAAIFdAAC37AABAQKw1qSPgZUAAMAAYJ8AAQECsyG0G4HsAAC4SwABAQKx2rMSgjsAALs0AAEBA7QMsymklIKYAAC8rAAAgr8AAMAAYmEAAILjAADAAEHdAACDDgAAwABjkIKBAIMvAADAAG26AAEBAsAATU28K4OJAADAAIH0AACDtwAAwAB5pgAAg/AAAMAAQr0AAIQeAADAAHoDAACETwAAwABjxQABAQKZG8AASbSEkgAAwABqRAAAhL4AAMAAdhoAAQECwABRLcAAUV6FHQAAwAB3fAABAQG3lIViAADAAIKLAAEBAbwvhbEAAMAAdJYAAQECwABGnMAAUMmF/gAAwAB6bwABAQHAAFNfhj0AAID7AACGWgAAwABLnQAAho4AAMAAS1IAAQEBpKaGwwAAwABvbgABAQHAAE3fhwgAAMAATScAAQEBpKqHNQAAwAB6bgABAQnAAFv6t5evDsAAW/vAAFv8wABb/cAAW/7AAFv/wABcAIhfAADAAI0/AACIdwAAwACIQAAAAAMAwABcAQDAAFwCAMAAXAMBwACMEIGHhDjAAFwEAABeAwAGBgZgA7zlYAPAAJUcYAPAAJUcYAPAAPo/YAPAAPo/YAPAAPo/AAFXA8AAjBAAXAAGhFAAAACCZmADvOUAhGAAAACAvWADwACVHACEbgAAAMAAXAVgA8AAlRwAhIUAAADAAFwGYAPAAPo/AISXAAAAwABcB2ADwAD6PwCEqQAAAMAAXAhgA8AA+j8AAAYCwACMEYGGiVmJX8AAulADwABcCQAAAWABwAD9UQAAIgTAAIwUgYaJiImQCbHywACMDgBgA4EUAATAAIwVgYaJrYm2CaSwwACMDgBgA7WjAATAAIwWgYaJ1InnCa9UwACMDgBgA7skAATAAIwXgYaKAYoQCbQEwACMDgBgA7k/AATAAIwYgYaKKYo4CbPIwACMDgBgA7vhAATAAIwZgYaKT4pcCcAAXArAAIwOAGADwABLpAAEwACMGoGGinyKkgm3m8AAjA4AYAPAAHqhAATAAIwbgYaKqYq2CcAAUt/AAIwOAGADwACB9QAEwACMHIGGisuK1gnAAEfdwACMDgBgA8AAalYABMAAjB2BhorxivkJwABRQsAAjA4AYAPAAILdAATAAIwegYaLE4sjCcAAUznAAIwOAGADwAB6BAAEwACMH4GGi0CLSgnAAFwLwACMDgBgA8AAdiEABMAAjCCBhotoi3MJwABTdMAAjA4AYAPAAHZjAATAAIwhgYaLi4ucCcAAXAzAAIwOAGADwAB3fQAEwACMIoGGi72L1Am7TMAAjA4AYAPAAHpNAATAAIwjgYaL/IwaCbeawACMDgBgA8AAebwABMAAjCSBhoxFjFMJwABcDcAAjA4AXQPAAPzaAmADvNNgA8AAlRIABMAAjCWBhoxjjGkJt5zAAIwOAGADwABjyAAEwACMJoGGjIOMiAm32MAAjA4AYAPAAFy4AATAAIwngYaMn4yrCbWqwACMDgBgA8AATSsABMAAjCiBhozEjNIJt//AAIwOAGADwABt+wAEwACMKYGGjOmM9gnAAFOLwACMDgBgA8AAQr4ABMAAjCqBho0ajTQJt9rAAIwOAGADwABB+wAEwACMK4GGjZGNmAnAAFeBwACMDgBgA8AAiEEABMAAjDWBho7hjuoJvmwAYAPAAIxbAATAAIwsgYaO/o8HCcAASN7AAIwOAGADwACMrAAEwACMLYGGjyGPLgnAAFbUwACMDgBgA7zoAATAAIwugYaPTo9fCcAAXA7AAIwOAF0DwAD8ZwFgA7zBAATAAIwvgYaPsI/VGMAAXA/AAIwOAGADwAD6PwEqBMAAjDCBhpU7lVwJm73AAIwOAF0DwAD82gJgA7zBYAPAAI2kATKVWmADvMFgA8AAjaQABMAAjDGBhpYRljQJwABcEMAAjA4AXQPAAPzaAmADuzdgA8AAjV8BMpYyYAO7N2ADwACNXwAEwACMMoGGlumXEQnAAFwRwACMDgBdA8AA/NoCYAPAAGDSYAPAAI19ATKXD2ADwABg0mADwACNfQAEwACMM4GGlyGXNxjAAFwSwACMDgBdA8AA/ZwBYAPAAI2kASsEwACMNIGGmCuYOxjAAFwTwACMDgBdA8AA/ZwBYAO8wQErAQXAAIxagYaP2o/alKMAAAADj+iUowAAABoaGo/1AAAEsfJgA4EUAJAKAAAEpLBgA7WjAJAgAAAEr1RgA7skAJBAAAAEtARgA7k/AJBcAAAEs8hgA7vhAJB4AAAEwABcCmADwABLpACQkgAABLebYAPAAHqhAJC1AAAEwABS32ADwACB9QCQzwAABMAAR91gA8AAalYAkOcAAATAAFFCYAPAAILdAJD8AAAEwABTOWADwAB6BACRGQAABMAAXAtgA8AAdiEAkTAAAATAAFN0YAPAAHZjAJFIAAAEwABcDGADwAB3fQCRZgAABLtMYAPAAHpNAJGKAAAEt5pgA8AAebwAkbUAAATAAFwNXQPAAPzaAmADvNNgA8AAlRIAkdAAAAS3nGADwABjyACR4wAABLfYYAPAAFy4AJH1AAAEtapgA8AATSsAkg4AAAS3/2ADwABt+wCSKQAABMAAU4tgA8AAQr4AkkMAAAS32mADwABB+wCSagAABMAAV4FgA8AAiEEAkn4AAATAAFwOXQPAAPxnAWADvMEAkpwAAATAAFbUYAO86AAAYAPAAIwRAT8dCAHAAIwUgADARutcCAHAAIwVgQDARutoCAHAAIwWggDARut0CAHAAIwXgwDARuuACAHAAIwYhADARuuMCAHAAIwZhQDARuuYCAHAAIwahgDARuuoCAHAAIwbhwDARuu2CAHAAIwcFADARuvGCAAIAcAAjB0UAMBG69YJAAgBwACMHhQAwEbr5goACAHAAIwfFADARuv2CwAIAcAAjCAUAMBG7AYMAAgBwACMIRQAwEbsFg0ACAHAAIwiFADARuwmDgAIAcAAjCMUAMBG7DQPAAgBwACMJBQAwEbsQhAACAHAAIwlFADARuxdEQAIAcAAjCYUAMBG7GsSAAgBwACMJxQAwEbseRMACAHAAIwoFADARuyHFAAIAcAAjCkUAMBG7JUVAAgBwACMKhQAwEbspRYACAHAAIwrFADARuyzFwAIAcAAjC4UAMBG7MMYAAgBwACMLRQAwEbs2BkACADAAIw1H5LIwACMgA4ADoCS38BG61yDkvXARuuAgpMSwEbrdISTM8BG64yFk1DARuuYFJNrwEbsXREAFpOFFJN/wEbsaxIAr3XAAFzGFJOawEbrxggAFJOzwEbr5goAFJPRwEbsJg4AFJP2wEbseRMAJpQQARSUEMBG7MMYAF0DwAD9nAFgA7zBFJQvwEbsQhAAFJRLwEbssxcAAAgAwACMLB+UcsAAjMMCAAIWlIuElHvARuuMs8+75RSUm8BG7LMXAAAJAY/awAD9ZwAAAAAhBsAAjDeBhphAmEim4AAAwABcFAAAAAEDmFSm4AAAAAEAAAGYWwAAAMAAXBVgA8AA+j8Baph5YAPAAPo/AGADwACNQAE+Gz0cmJEWmIcuvmzAAIw1wABRpwAAAADAAIx+PRyYoC7AAFwWwACMDgAAAADAAIw6PReYyC7AAFwPwACMDoCY6MBG70HAAIwvPRyaBxaZ8haZ4xaZ1i61qsAAjA7AAIwnrwbAAE09sMG77YP4AQABFpoZFpoPLsAASN7AAIwOwACMLMAAXBfAAIy9AMAA/Hc9HJpNFpo8FpoyLr5swACMNcAAXBjAAIxug/gBAAEWml8WmlUuwABI3sAAjA7AAIwswABcGcAAjL4AwAD8+T0cmpEWmn8WmnUuvmzAAIw1wABcGsAAjHCD+AEAARaaoxaamS7AAEjewACMDsAAjCzAAFwbwACMvwDAAPz5PRya1xaawxaauS6+bMAAjDXAAFwcwACMb4P4AQABFprfLsAAXB3AAIwOwACMVwDAAPz5PRybIRabAhaa+C6+bMAAjDXAAFwewACMcYP4AQABFpszFpspLsAASN7AAIwOwACMLMAAXBvAAIy/AMAA/Pk9HJt7LsAAXB/AAIwOAAAAAMAAjFg9HJyTFpx5FpxvLr5swACMNcAAXBjAAIxug/gBAAE0nJsDnJuc8AAAAAICApynAAAAgLVgA7s3AJy8AAAAhINdA8AA/KkBYAO8wQAAYAPAAP0OAT4BPRyc1YKczcBG8SyD+AEAARac3S7AAFwgwACMDsAAjEkAwAD8dwDAAPz5PRydURadSC6bvcAAjA7AAIwwg/gBAAE0nVkDnVmgjgAAAAICAp1mAAAAmcpgA7zBAJ1xAAAAgPVgA8AAjaQAAGADwAD9DgE+A06diJ2TAACE7GADvMEBHJ2pFp2VLq9UwACMDsAAjBay+QEAAYGdt8BG8ZgAuwhJncMhHJ3Sg53HwEbxvUgBAAErAMAA/V4+Aj0cneeCneXARvGkwABcIQEAARyd/Rad9S6bvcAAjA7AAIwwSwEAAYOd/sBG8b0AwAD87gDAAI3HQCEcnjUWniqCnijARvGkhOzAAI3CSAEAASsAwAD9Xp4onjwBHp5KtcMCAAKBnmTARvGYJAAFJ8AAXCKDnrzARvG9J6QAgp7MwEbxpCeBagA/SZ7hIhae54Ke5cBG8aTAAFwjwACNwQEWnwWCnwPARvGksxbAAI26PgNOnzSfSAAAwABcJGADvMEBHJ9qFp9WLq9UwACMDsAAjBazFwEAAYGfgcBG8ZgAuyo9HJ+Rgp+PwEbxpMAAXCUBAAEcn6cWn58um73AAIwOwACMMEsBAAGEn6jARvK3AMAA/O4AwACNyEAhHJ/oFp/dgp/bwEbxpK2gwACNw0gBAAErAMAA/V6f25/vAR6f/bXDAgACgaAXwEbxmCQABSfAAFwmhKBMwEbytyfAAFc1gaB4wEbxmCeBagA/AMAA/PlOoKKgsAAAwABTWl0DwAD8qQFgA8AAjaQBHKEjHKDgFqC8FqCyLr5swACMNcAAWWPAAIx0gKsBAWADwACNpAE0oOQDoOShGAAAAAEBAaDxAAAAsmpgA7zBAABgA8AAjaQBSqECARyhChahAi6bvcAAjA7AAIwwSwEAAYGhC8BG88MAwAD87gDAAPxygK0AAAAAwAD8fU6hQ6FnAADAAFwnXQPAAP2cAWADvMEBHKF7FqFxLr5swACMNcAAXCgAAAAAwACMdj0Xoa4uwABcEsAAjA4codsWoc0Woccut9jAAIwOwACMJre/wABcxcAAXCkDAAOBofnARvN3gqIIwEb0DBaiLS7AAFwOwACMDsAAjC4AwACOP8AAjDM9HKJGLsAAXCrAAIwOAQABFqJjFqJZLsAASN7AAIwOwACMLMAAXCvAAIy1AMAAjEZOooiilQAAwABcLGADwACNawEcopcuwABcLcAAjA4BAAEWorQWoqouwABI3sAAjA7AAIwswABcK8AAjLUAwACMPU6i3qLwAADAAFwuXQPAAPxnAWADwACNXwEcoxkWowQWovouwABI3sAAjA7AAIwswABcL8AAjLiAqwEBYAPAAI1fARajHS7AAFwwwACMDsAAjD8AwAD8ck6jSqNUAADAAEhhXQPAAPypAWADwACNXwEeo1rAAPYAAQFgA8AAjV8BFqNzFqNpLsAASN7AAIwOwACMLMAAXDHAAIy5AD0co5SFo4vARvVZgL8CAAKTg6OawEb0wQDAAPy5PRyjtoWjrMBG9Vmf2wIAApSEo8DARvUCAMAA/MU9HKPZLsAAXDLAAIwOAAAAAMAAjDlOpACkCAAAwABcM10DwAD8qQFgA8AAjVUBHKQcFqQUFqQKLsAASN7AAIwOwACMLMAAXDPAAIy3gK0BAAABhV4qwAD8fU6kP6RSAADAAFw0YAPAAPo/ARakcxakXC63m8AAjA7AAIwawABTHcAAeoVAIiGHpJ7ARvYxARakwoGktMBG83eDssAA/IyknaTMAE6k7KT3AADAAFw1XQPAAPypAWADwABjpwExpPlgA8AAY6cBFqUAFqT6LrfYwACMDsAAjCaebMAAXMBJpRglpSMWpRwut5zAAIwOwACMJWADwABjpz4CTqVFpVUAAMAAXDZgA8AAY8gBFqVXLrecwACMDsAAjCU9HKVwFKVlwEb2fAgAVgEAASalhAAUpXTARvbSCQBgA8AAY6cAwAD8uj9KpaYBH6WxwACNVAkABoWlucBG9VmGpcTARvXtHKXNLsAAXDfAAIwOAAAAAMAAjDscpeYuwABcOMAAjA4AAAAAwACMPBamChamBC632MAAjA7AAIwmnmzAAFzAFKYdwEb2fAgAA8AAXDSHpkXARvYxwABcORamhxamfS6+bMAAjDXAAFw5wACMc8AAXDohHKbUFqbDLsAAXBPAAIwOwACMNEgBAAErAMAA/V4GwACMOYGGpuWm6qcmAADAAFwywACMDgAAAAEDpvunJgAAAAAAAABcAT4BPRynBC7AAFw7wACMDgAAAADAAIxSBsAAjDqBhqcrpzCxJgAAwABcFsAAjA4AAAABA6dKsSYAAAAAAAAAXAE+Ak6nV6dsAADAAFw8YAPAAP3rARandxanbi6x8sAAjA7AAIwUgq+BV0mnmCEcp7GAp5zARvgySAEAASsAwAD9+j4KTqiaqKQAAMAAXD1dA8AA/ZwBYAPAAP3rARypLzGopmADwAD96wQnntMnntAnwABcPiee0pUZAAAAAMAA/H5OqaupsAAAgbtgA8AA7sQBHqm2wADuxgEAAYCpu8BG+DIASap8IRyqhoKqgcBG+LGDnAAAAADAAPAEPgI9HKqoFqqeLqSwwACMDsAAjBWWeAEAASSq4AInwABcP4Cqy8BG+DIAtahKqusAP0mrARyrFxyrCoKrBcBG+LGDngAAAADAAO7RSAEAAZMAwAD9KD4CPRyrMRarJy6ksMAAjA7AAIwVlngBAAEnwABcQAC1qEqrcwA/TquRq5YAABJgA8AA/esBHKu3HqucwADuxgEAAYCrocBG+DIAwABcQQAAAADAAO7hTqvdq/IAAMAAXEJdA8AA/ZwBYAPAAP3rASar3QEcrAoWrAUeq/TAAMUeAQABg6v/wEb5ZgCDYgCVGQAAAAAAXQPAAP2cAWADwAD9606sKqw7AADAAFxDXQPAAP2cAWADvMEBHqxBwADBFwABYAO8wQAAT6yWrJsAAAHAAFGnYQMBYAO8wVwAA6yirhAAAAABAQGsrwAAAJYmYAO8wQAAXAE+BD0crNOFrMLARvniVgEAAYes18BG+icAwAD9qUms6RytARas7S6vVMAAjA7AAIwWhO8BAAGHrRTARvonALsOPgE9HK0xhq0qwEb6CiABAAEcrUYWrTIur1TAAIwOwACMFrMXAQABh61dwEb6JwC7KgAAP06thq2RAACE7GADvMEBHK2nFq2TLq9UwACMDsAAjBay+QEAAYettcBG+icAuwhJrcchHK3WFK3LwEb6qwgASAEAASsAwAD9Xj4BPRyt8oat68BG+gogAQABFK3zwEb6qwgAAAA/PRyu6Rau2Bauzi6+bMAAjDXAAFwYwACMboP4AQABNK7xA67xsPAAAAACAgKu8gAAAIC1YAO7NwCvBwAAAIhFXQPAAPypAWADvMEAAGADwAD9DgE+AUavG69BrywAAACWJmADvMEAFK83wEb7RwgAPgJOr8SvyAAAg9FgA8AA/esBJK/7Axav3Rav1RSvzcBG+2kJAIRDvMOlK7y0J4LmFq/1FK/twEb7aQkAgL28r0mwByIiHLAghLALwEb5loMXAQABFLApwEb7gQoAAMAA/agBHLBLFrA/LsAAR93AAIwOwACMHLL0AQABFLBcwEb7aQkAAMAAalIBHLCAgbB2wEb4c4MXAQABHLCmFrCZFrCRFLCJwEb7aQkAhEO8w6UrvLQjAAAAAMAA/pQAwAD9qD4BPRywyIawwcBG+gogAQABFLDJwEb7aQkAAAA/AMAA/Pk9F7D5LsAAXBPAAIwOhbEMwEb54sAAjDQ/BsAAjDuBhrFesXqy2QAAwABcN8AAjA4AAAABA7GHstkAAAAAAAAAXQPAAPzaAmADwAD9610DwAD8qQFgA8AAjV8BPgNOsayxtAAAwABcRF0DwAD82gJgA8AA/etdA8AA/KkBYAPAAI1fATKxzmADwAD9610DwAD8qQFgA8AAjV8APRyyBxax8hax4xax1i61qsAAjA7AAIwnrwbAAE09s4a77oP4AQABNLIPA7IPssAAAAACAgKyFwAAAMAAVCNgA8AA/esAsjAAAACwwV0DwAD8qQFgA7s3AABgA8AA/Q4BPgE9HLJMgLJFwEb8v4C/AgACgbJNwEb9MByyohyyboKyV8BG/UCAqwEBYAPAAI1fATSycgOycrKVAAAAAQEBsn4AAACzPWADuzcAAGADwACNXwFKsocBHLKPFrKHLsAAXBDAAIwOwACMMUsBAAGDspDARv2aAMAA/O4AwAD8coCtAQAAAYVeKsAA/H0AwAD87wDAAPz5SrLHAYCyzsBG/L8GwACMPIGGst6y7LRHAADAAFw4wACMDgAAAAEDswa0RwAAAAAAAABgA8AAlRIBPgJOsyizNgAAwABcRWADwACicgEfszzAAKKIBwAHFrNeLrQEwACMDsAAjBcWs30Ws3cut9jAAIwOwACMJq91wABcxhazji63m8AAjA7AAIwaFrOuLrecwACMDsAAjCUWs74ut5rAAIwOwACMIxaz5i7AAFwKwACMDsAAjBkWs/0utarAAIwOwACMJwBKtBABHLQlgLQXwEb+LcAAXEYAAAAAwACihgbAAIw9gYa0TLRZtokAAMAAXC3AAIwOAAAAAQO0a7aJAAAAAQEBtHkAAADAAFxHYAPAAIyZAABgA8AAjWsBPgNOtOq08QAAgXZgA8AAjWsBH7T3wACNcwcABxa1GoC1DcBG/vazisAAjKAnABy1dC7AAFxIwACMDgAAAADAAIw+HLWQLsAAXEnAAIwOAQABgLWgwEb+9gDAAIxFHLW3LsAAXErAAIwOAQABgLXSwEb+9gDAAIxBHLXpLsAAXEvAAIwOAQABgLYNwEb+9gDAAIxDHLYkLsAAXEzAAIwOAQABgLY0wEb+9gDAAIxAAD0ctlAWtkguwABcEMAAjA7AAIwxgL8CAAIWtl6AtlHARv72s4rAAIyggbZswEb/EQDAAPzvSrZ4AYG2f8BG/xEGwACMPoGGto62m7cOAADAAFxIwACMDgAAAAEDtqu3DgAAAAAAAABgA8AAk/sBPgFKtrQBHrbRwACijAIAAha28xa27S632MAAjA7AAIwmr3XAAFzGFrb8LsAAVtTAAIwOwACMLQAGwACMP4GGtxO3JLkZAADAAFwwwACMDgAAAAEDtzq5GQAAAAEBAbdIAAAAwABcR2ADwACMmQAAYAPAAI10AT4DTrdtt3QAAIF2YAPAAI10AR+3esAAjXwHAAcWt6GAt5TARwCJs4rAAIygHre1uzYDAAIWt8ousfLAAIwOwACMFBa34YC31MBHAImAvcAAjJ8BtA0qFrgSgLgFwEcAiYC9wACMnxy4IC7AAFxJwACMDgEAAYC4MMBHAIkAwACMRRy4Ry7AAFxKwACMDgEAAYC4YsBHAIkAwACMQRy4eS7AAFxLwACMDgEAAYC4ncBHAIkAwACMQxy4tC7AAFxMwACMDgEAAYC4xMBHAIkAwACMQAA9HLjgFrjYLsAAXBDAAIwOwACMMYC/AgACFrjugLjhwEcAibOKwACMoIG4/MBHAKQAwAD870q5CAGBuQ/ARwCkBsAAjECBhrkeuS26dQAAwABcTMAAjA4AAAABA7k8unUAAAABAQG5SgAAAMAAXEdgA8AAjJkAAF0DwAD8qQFgA8AAjX0BPgNOuXK5gQAAwABcTV0DwAD8qQFgA8AAYNIBHLmoFrmVFrmLLr5swACMNcAAXBzAAIxvSwEAARa5toC5qcBHAdqzisAAjKAAwAD87km5xxy52oG5y8BHAfxIAQABKwDAAP1eSrnjAWq56l0DwAD8qQFgA8AAjX3AAWkrP0q6AgEculocuiGBugnARwH8gKsBAWADwACNfQE0uiUDuiW6TwAAAAEBAbo0AAAAgJZgA8AAYNIAAGADwACNfQFKuj4BHLpIFro+LsAAXBHAAIwOwACMMksBAAGCuknARwKfAMAA/O4AwAD8coCtAQAAAYVeKsAA/H0GwACMQYGGunq6jLvTAADAAFxKwACMDgAAAAEDuqa70wAAAAEBAbq0AAAAwABcR2ADwACMmQAAXQPAAPypAWADwACNlgE+A0662rrvAADAAFxOXQPAAPypAWADvOUBHLshFrsDFrr5Lr5swACMNcAAXB7AAIxxSwEAARa7L4C7IsBHAxSzisAAjKAAwAD87km7QBy7WYG7RMBHAzZIAQABKwDAAP1eSrtiAWq7aV0DwAD8qQFgA8AAjZbAAWkzP0q7hQEcu7gcu6GBu4zARwM2gKsBAWADwACNlgEWu6UuwABcT8AAjA7AAIxCAMAA/HKArQEAAAGFXirAAPx9BsAAjEKBhrvYu+TAAEAzAADAAFxPwACMDgAAAAEDu/XAAEAzAAAAAQEBvAIAAACWJmADvOUAAGADwACNlgE+Bk68I7wtAAC0OWADwABuCQEcvD4WvC8ut//AAIwOwACMKLQ7AQABJrxLAYC8S8BHBBVgA8AAdXsAwABuBU68Z7x0AACWPGADwABg0gEWvICBvHbARwQsljzAAG4MTrygAAAAgpNgA8AAlRIASbyqIRy8u4K8rsBHBGhIAQABKwDAAP1ePgI9HL08Fr0yLsAASN7AAIwOwACMLMAAXFACAAEcvVIWvUsut5zAAIwOwACMJcAASD8BAAGCvWrARwRoAMAAZF4BwABcUSnAAIzBPYu9o8BHBIgcvbgWvbAWvaout9jAAIwOwACMJq91wABcxq+nAQABgr3KwEcEaADAAFzbPgJAFr39gb3zwEcELMAATUTAAG4QvfO+BAA9i74NwEcEiBy+Iha+FC7AAFwNwACMDsAAjCRLAQABgL4jwEcEFQDAAPzuTr4/vkQAAIC9YAPAAJUcARy+TRa+Ri63nMAAjA7AAIwlr5QBAAGAvmnARwQVAMAAZEBKv3EBH798wACNowgABYC/kcBHBBWEv5rARwVyKxy/pi7AAFwfwACMDgAAAADAAIxYg7/EwEcEiAOEGyrAAE1JKsAAXFIhHMAAQCeCwABAGsBHBGhIAQABKwDAAP1eBsAAjEOBhsAAQDjAAEBKwABCjAAAwABcS8AAjA4AAAABA8AAQG3AAEKMAAAAAQEBwABAggAAAMAAXEdgA8AAjJkAAF0DwAD8qQFgA8AAjZYBPgNOwABAqMAAQLMAAMAAXFNdA8AA/KkBYAO85QExwABAtWADvOUAPRzAAEDLFsAAQL0uwABcCsAAjA7AAIwZu0UBAAE0wABA3gPAAEDewABBxAAAAAEBAcAAQOsAAACElGADvOUAAGADwAD9DgE+AUnAAED6IhbAAEEtHMAAQRkWwABBCxbAAED+LrWqwACMDsAAjCe0OsAATS20OwEAASbAAEEmAYLAAEEmwEcGqmADwAB1ewDAAG4FwABNScAAbhkAHMAAQWwcwABBURbAAEFBLrPIwACMDsAAjBizzQEAAYLAAEFlwEcGqgC79kgBAAEWwABBioDAAEF9wEcGMbOKwACMoADAAP1ePgE9HMAAQauBwABBoMBHBlVWAQABgsAAQa/ARwaqAMAA/Lo/AMAAS7BKwABBywEcwABCcRzAAEIiHMAAQgQcwABB4xbAAEHSLsAAV4HAAIwOwACMK8AAV6EBAWADvOUBgcAAQe/ARwZVAMAAiEaAqwEBYAPAAI2WARbAAEIILsAAXFTAAIwOwACMRADAAPxygaUBAAE0wABCKAPAAEIowABCQAAAAAEBAcAAQikAAACElGADwACNlgAAYAPAAPo/AUrAAEIzASEcwABCOYLAAEIzwEcIBkgBAAErAMAA/V4AwAD8c4CtAQAAAYVeKsAA/H0GwACMRIGGwABCkcAAQp3AAEXJAADAAFxUwACMDgAAAAEDwABCrMAARckAAAABAQHAAEK5AAAAliZgA7zlAABgA8AAjZYBPgVOwABC1sAAQtsAAIKTYAPAAJUSARzAAELrFsAAQt0uwABcDcAAjA7AAIwkSwEAAYDAAELswEcIfwDAAPzuScAAQ5YcwABDn4HAAEOawEcImEgBAAErAMAA/V5KwABDqAErP07AAEPCwABDxwAAgL1gA8AAlRwBHMAAQ9AWwABDyS63nMAAjA7AAIwlr5QBAAGAwABD7MBHCH8AwABkQE7AAEQCwABEDQAAwABH2WADwACVHAEcwABEFhbAAEQPLrecwACMDsAAjCWvjgEAAYDAAEQqwEcIfwDAAGRbSsAARTEBH8AARTzAAI2jBwAFgMAARVHARwh/gsAARVrARwj6g8AARWDARwk2HMAARWwuwABcH8AAjA4AAAAAwACMWIHAAEWKwEcImAKEGyEWwABFqoDAAEWiwEcIf6xKvN7AAE1JKQbAAIxFgYbAAEXOwABF3MAARzkAAMAAXEnAAIwOAAAAAQPAAEXrwABHOQAAAAEBAcAARfkAAADAAFxHYAPAAIyZAABdA8AA/KkBYAPAAI2LAT4ETsAARhvAAEYlAACG2V0DwAD8qQFgA8AAjYsBHsAARivAAPYAAQFgA8AAjYsBFsAARkaAwABGOcBHCgphwACMqABOwABGV8AARl0AAIDuYAPAAPwFAZM9HMAARnOAwABGZsBHCgqD+AEAATTAAEZ7A8AARnvAAEceAAAAAwMDwABGigAAAIRDYAO8sgDAAEalAAAAhINdA8AA/KkBYAO8wQDAAEbJAAAAhI5dA8AA/KkBYAO80wAAYAPAAP0OAT4BPRzAAEbjgcAARtrARwougL8CAAI1AAAAAQBgA8AA/AUBgsAARuTARwpvNQAAAAEAYAPAAPwFAYrAAEbkwEcKbxzAAEbphgDARwsCZAEAAZQAwAD9KoYAwEcLAhzAAEbvLsAAXFXAAIwOAwADg8AARv3ARwqrhMAARwbARwq5hcAARw/ARwrOAMAAjEcAwAD8uQDAAIymSsAARyUBgcAARyzARwouBsAAjEaBhsAARz7AAEdDwABdiAAAwABcKsAAjA4AAAABA8AAR1XAAF2IAAAAAQEBwABHYwAAAMAAXEdgA8AAjJkAAFwBPgRJwABHdxzAAEeEFsAAR3sum73AAIwOwACMMIdHAQABFsAAR6AWwABHkC60BMAAjA7AAIwXmsy4TgDAAPztPgJOwABHvsAAR9EAAMAAXFZgA8AAlRwBHMAAR9oWwABH0y63nMAAjA7AAIwlr4wBAAEawABH87gbAMAAZDs9HMAASKAWwABIlhzAAEh4FsAASHAum73AAIwOwACMMEsBAAEWwABIiRbAAEh5LrQEwACMDsAAjBeazLhOAMAA/O7AAFxXwACNsVYBAAEmwABIpAEcwABIpC7AAFxYwACMDgIAAh/AAEjEwABmNQEAAScjABzAAEjuasAASO9gA8AAl4DAAR9pIAIAAifAAFxZgcAASRjARwwZAMAAl4IAwACMUWADwACODADAAPy6P07AAEtEwABLVQAAuARgA8AAjaQBHMAAS18WwABLVy6bvcAAjA7AAIwwSwEAARbAAEtwFsAAS2AutATAAIwOwACMF7FVuKUAwAD87k7AAEuawABLpAAAwABcWl0DwAD9nAFgA8AA/esBNQAAAAEAXQPAAP2cAWADwAD96wEeAMAAwRcAAWADwAD96wAAggDARw1tPRzAAEvEgMAAS67ARwvCg/gBAAE0wABLzAPAAEvMwABdgwAAAAMDA8AAS9sAAACEQ2ADvLIAwABL9gAAAMAAXFtdA8AA/KkBYAO8wQDAAEwFAAAAgLVdA8AA/KkBYAO80wAAYAPAAP0OAT4BRsAATBDAAEw3wABMIQAAAJnKYAO8wQCEwABMKMBHDcw+AUnAAExBHMAATFEWwABMRS7AAEfdwACMDsAAjByy9AEAAYbAAExiwEcOCwDAAGpSPgE9HMAATIgWwABMdC6vVMAAjA7AAIwWsvoCAAKGwABMoMBHDgs0wABMswPAAEyzwABdaQAAAAEBAcAATMEAAACCZmADvNMAAGADwAD9DgE+CE7AAEzewABM5QAAwABH1mADwAD96wEcwABNAxbAAEz3LsAAR93AAIwOwACMHMAAS80BAAEWwABNKIfAAE0hwEcOjYC9vK8AwABqaknAAE07IRbAAE1Hh8AATUDARw6NhQK82ErAAE1ZAD9JwABNbSIiFsAATXiHwABNccBHDo2FM7zcARbAAE2Lh8AATYTARw6Nh3282gEWwABNnYfAAE2WwEcOjbLBvNs+Ak7AAE3MwABN1gAAu2RdA8AA/GcBYAPAAEtkARzAAE34FsAATeouwABcCsAAjA7AAIwZuz4BAAEWwABOF4fAAE4QwEcOjYC9vK8AwABLqknAAE4sIiEcwABOOhTAAE4wwEcPUQkASAEAASsAwAD9XgAhFsAATlAUwABORsBHD1EJAIFVwAD8iz4BRsAATmvAAE6QwABOeQAAAKTxYAPAAEtkABTAAE6FwEcPUQkAPgJOwABOrMAATrUAAMAAXFxgA8AAlRwBHMAATr4WwABOty63nMAAjA7AAIwlr4wBAAEUwABOzcBHD+IKAADAAGQ7ScAATuocwABO+ILAAE7uwEcNUFYBAAEWwABPBRTAAE78wEcQAAsAg9HAAJUjAMAA/ak+AT0cwABPPBbAAE8ygcAATyHARw0FwABcV8AAjbFWAQABJsAAT0ABHMAAT0AuwABcWMAAjA4DAAIUwABPUcBHEAALABzAAE91asAAT3ZgA8AAl4DAAR9pIAIAAifAAFxdMcAAT5tgA8AA/esBFMAAT5zARw6mCAAAwACXggGWJofAAE/HwEcOjcAAjFFgA8AAjgwAwAD8uj8/P0nAAFAiIhbAAFAth8AAUCbARw6NhTW83QEiFsAAUEGHwABQOsBHDo2HfbzaACEWwABQVIfAAFBNwEcOjYQdvN8+Ak7AAFCBwABQiwAAu2RdA8AA/GcBYAPAAEtkARzAAFCtFsAAUJ8uwABcCsAAjA7AAIwZuz8BAAEWwABQzIfAAFDFwEcOjYC9vK8AwABLq0nAAFDhIiEcwABQ7xTAAFDlwEcRTwkASAEAASsAwAD9XgAhFsAAUQUUwABQ+8BHEU8JAIFVwAD8iz4CTsAAUSTAAFEtAADAAFxcYAPAAJUcARzAAFE2FsAAUS8ut5zAAIwOwACMJcAASBcBAAGHwABRRsBHDo0AwABkRUnAAFFfHMAAUW2CwABRY8BHDVBWAQABFsAAUXoUwABRccBHEdgKAIPRwACVIwDAAP2pPgE9HMAAUa8WwABRpYHAAFGUwEcNBcAAXFfAAI2xVgEAASbAAFGzARzAAFGzLsAAXFjAAIwOAwACFMAAUcTARxHYCgAcwABR5mrAAFHnYAPAAJeAwAEfaSACAAInwABcXjHAAFITYAPAAP3rARTAAFIUwEcOpggAAMAAl4IBliaHwABSPcBHDo3AAIxRYAPAAI4MAMAA/Lo/Pz9OwABTDMAAUxsAAMAAXF9gA8AA+j8BKk7AAFM9wABTSgAAhTtgA8AAYvkBK0nAAFNfFsAAU2qHwABTY8BHDo2ywbzbPgJOwABTlcAAU5gAAJYqYAO86AEmwABTlQGHwABTmsBHDo1gA7zoPRXAAFOwwEcS/AocwABT0xbAAFO/Lq9UwACMDsAAjBazAwEAARTAAFPjwEcTKgsAALsRScAAU/sWwABUBofAAFP/wEcOjYUzvNw+AT0VwABUIMBHEuUJKT9JwABUeiIUwABUfsBHEuUJAAEhHMAAVJ0UwABUkMBHEvwKAEgBAAErAMAAYw4+BU7AAFS6AAAAwABcYGADwAD8BQBOwABU1QAAAMAAXGFgA8AA/AUAScAAVOwhHMAAVP0UwABU8MBHEvwKAEgBAAErAMAAYw4+Aj0VwABVGMBHE9cLFsAAVT4WwABVLxTAAFUiwEcS/AoAtAfAAGL8YcAA/Ng9FcAAVVbARxPqDBzAAFVoFMAAVWDARxPXCwBkAQABFsAAVY4WwABVdxTAAFVqwEcS/AoAtAjAAGL9YcAA/NgAwAD9Kj4CPRXAAFW9wEcT1wuTPRXAAFXawEcT6gw3wAB//07AAFYNwABWFwAAu2RdA8AA/NoCYAPAAEtkYAPAAG9vARzAAFYnFsAAVhkuwABcCsAAjA7AAIwZuz0BAAEWwABWQIfAAFY5wEcOjYC9vK8AwABLqUnAAFcVIiEcwABXIxTAAFcZwEcUrA0ASAEAASsAwAD9XgAhFsAAVzkUwABXL8BHFKwNAIFVwAD8/z4BRsAAV1QAwABXXQAAAKTxYAPAAEtkABbAAFdzFMAAV2nARxSsDQCDYsAA/PxBPghOwABX08AAV+EAALsaYAPAAPwFARbAAFfsFMAAV+PARxVADgC7GsAAS21JwABYTxzAAFhvFsAAWFwUwABYU8BHFUAOALsbwABLboCXAQABkwDAAP00QsAAWHQAP0nAAFiQHMAAWKIUwABYlMBHFWoPAGMBAAEUwABYpMBHE9cLAADAAP0yQsAAWK0AP0nAAFjJHMAAWNsUwABYzcBHFWoPAICXAQABFMAAWN3ARxPqDAAAwAD9NELAAFjmAD9OwABZBsAAWQ8AAMAAXFxgA8AAlRwBHMAAWRgWwABZES63nMAAjA7AAIwlr4wBAAEUwABZJ8BHFUAOAADAAGQ7ScAAWUQhHMAAWVOCwABZScBHDVBWAQABFsAAWWAUwABZV8BHFicQAIPRwACVIwDAAP2pQsAAWWYAP07AAFmGwABZkQAAmohdA8AA/KkBYAPAAP3rAR7AAFmtwAD8sQIBYAPAAP3rAhTAAFnDwEcVag8ANMAAWdIDwABZ0sAAWd4AAAABAQHAAFnTAAAAYmADwAD8BQAAYAPAAP3rAUrAAFnZASTAAFneAieA1BTAAFncwEcW7BEAAD0cwABcRBbAAFw6gcAAXCnARw0FwABcV8AAjbFWAQABJsAAXEgBHMAAXEguwABcWMAAjA4DAAIUwABccMBHFicQABzAAFySasAAXJNgA8AAl4DAAR9pIAIAAifAAFxiMcAAXOJgA8AA/VEDFMAAXOPARxahEQAUwABc78BHDqYIABTAAFz3wEcWoREAAMAAl4IBliaHwABdJMBHDo3AAIxRYAPAAI4MAMAA/Lo/PwC7BT8AwACMpgbAAIxHgYbAAF38wABeBMAAYekAAMAAXFXAAIwOAAAAAQPAAF4RwABh6QAAAAMDA8AAXiAAAACEQ2ADvLIAwABeOwAAAMAAXFtdA8AA/KkBYAO8wQDAAF5jAAAAwABcY10DwAD8qQFgA7zTAABgA8AAjYsBPgdOwABegMAAXoQAAICsYAPAAP3rARzAAF6bFsAAXo6AwABehsBHGAWlK7y0IwAAAADAAP6UTsAAXr/AAF7HAADAAFxkXQPAAPypAWADwACOGAEcwABfUhzAAF8jHMAAXwMcwABe4YLAAF7JwEcYKoGlAQABNMAAXucDwABe58AAXvgAAAABAQHAAF7oAAAAg01gA7zTAABgA8AA+j8BSsAAXu4BIRbAAF7xhMAAXu/ARxjSh3282gDAAPxzljgAAWADvOgAAMAA/HCAqwEBYAPAAI4YARbAAF81LsAAXGXAAIwOwACMVgDAAPxygK0AAAAAwAD8fUnAAF9hHMAAX22AwABfZcBHGAVIAQABFsAAX4AWwABfcC60BMAAjA7AAIwXsRe4ZgDAAP1ePgI9HMAAX6WEwABfncBHGICApQEAARzAAF+sLsAAXGbAAIwOAAAAAMAAjFMAwAD8uz0cwABf3YTAAF/VwEcYgIClAQABHMAAX+QuwABcZ8AAjA4AAAAAwACMVQDAAPy7P07AAGAcwABgJAAAhINdA8AA/KkBYAPAAI2kARzAAGDiHMAAYIAcwABgPYHAAGAmwEcYE4CrAQFgA8AAjaQBNMAAYEEDwABgQcAAYHUAAAABAQHAAGBOAAAAsmpgA7zBAABgA8AAjaQBSsAAYF8BHMAAYGcWwABgXy6bvcAAjA7AAIwwSwEAAYXAAGBowEcaKADAAPzuAMAA/HKBpQEAATTAAGCGA8AAYIbAAGDXAAAAAQEBwABgjQAAAJnKYAPAAI2kAABgA8AA+j8BSsAAYKEBIiEWwABgpoXAAGCiwEcaiYZOwACNtwEhHMAAYMoWwABgsy7AAFwSwACMDsAAjDODFwEAAYXAAGDTwEcaiQDAAP2oAMAA/HOArQEAAAGFXirAAPx9TsAAYQXAAGESAADAAFxoYAPAAPo/ASlOwABhKsAAYUQAAMAAXGldA8AA/KkBYAPAAI3TARzAAGFOLsAAXGrAAIwOAgAAAoRDgMAAYWTARxgFwABcaIbAAGF7wEca/MAAjFRKwABhjwEfwABhmsAAjZUFAAWAwABhq8BHGAWDwABhtMBHGEyEwABhucBHGICFwABhwsBHGdeHwABhy8BHGxMABsAAjEiBhsAAYe7AAGHzwABiaAAAwABca8AAjA4AAAABA8AAYgLAAGJoAAAAAQEBwABiDwAAAJYmYAO8wQAAYAPAAPo/AT4BSsAAYh4BIiEcwABiNhbAAGIlLsAAXBPAAIwOwACMNEgBAAErAMAA/V4AIRzAAGJTFsAAYkIuwABcE8AAjA7AAIw0gxcBAAGAwABiXMBHG80AwAD9qAbAAIxJgYbAAGJtwABic8AAgdcAAMAAXCDAAIwOAAAAAQPAAGJ+wACB1wAAAAEBAcAAYosAAACZymADvMEAAGADwACNpAE+H07AAGKbwABipgAAwABcbGADwAD6PwEcwABiyhbAAGKyFsAAYqguvmzAAIw1wABcbcAAjG2DFwEAAYDAAGLTwEccagDAAP2oTsAAYuLAAGLuAADAAFxuYAPAAPo/ARzAAGL5FsAAYvAuwABRQsAAjA7AAIwdwABRUgEAAYDAAGMRwEccagDAAILiScAAYxscwABjKxbAAGMfLsAAR93AAIwOwACMHLL0AQABgMAAYzzARxxqAMAAalI+AT2JwABjzcBHHIMpP07AAGPvwABkAgAAwABcb2ADwAD6PwEcwABkCIDAAGQEwEccakgBAAEWwABkGxbAAGQLLrQEwACMDsAAjBexY7ixAMAA/V5OwABkO8AAZEMAAMAASGxdA8AA/KkBYAPAAI3rATHAAGRFYAPAAI3rAE7AAGRewABkaAAAwABcV10DwAD8qQFgA8AAjgwBMcAAZHZgA8AAjgwATsAAZJLAAGSlAADAAFxwYAPAAKJHAR/AAGSrwACiWwYABRbAAGTNFsAAZMcut9jAAIwOwACMJq91wABcxhbAAGTWLrQEwACMDsAAjBcWwABk5y63nMAAjA7AAIwlFsAAZO8uwABcCsAAjA7AAIwZFsAAZP4utarAAIwOwACMJwGC9xbAAGUxFsAAZSgusfLAAIwOwACMFIL3gThOwABlX8AAZXQAAMAAXHFgA8AAos0BH8AAZXrAAKLfBgAGFsAAZZgutATAAIwOwACMFxbAAGWxLrPIwACMDsAAjBgWwABlyi632MAAjA7AAIwmFsAAZdkut5zAAIwOwACMJRbAAGXpLsAAXAvAAIwOwACMHxbAAGX9LsAAU3TAAIwOwACMIABPwABmEMAAZhUAAAHAAFxyYQMBYAO801wAA8AAZijAAGktAAAAAQEBwABmNgAAAIJmYAO80wAAXAE+AknAAGZGIiEWwABmUhTAAGZLwEcfKgkAhBq84AAhFsAAZmgUwABmYcBHHyoJAId9vNo+AUnAAGZ7ISXAAGaGFMAAZn/ARx8qCQBgA8AAdZY+Ak7AAGavwABmtgAAlkdgA8AAjesBHMAAZrguwABcc8AAjA4BAAEmwABmxQEUwABmxcBHHyoJAGADvOgAwACMTUnAAGbYIRzAAGbjFMAAZtzARx+PCgBIAQABKwDAAP1ePRzAAGb0hMAAZuzARx2PVgEAARTAAGb4wEcfjwoAAMAA/Lo/Pz9JwABnGSIWwABnJBTAAGcdwEcfKgkAhTO83AEWwABnNxTAAGcwwEcfKgkAh3282j4CTsAAZ23AAGd3AAC7ZF0DwAD82gJgA8AAS2RgA8AAb28BHMAAZ5MWwABnhS7AAFwKwACMDsAAjBm7PQEAARbAAGesFMAAZ6XARx8qCQCAvbyvAMAAS6lJwABnuyIhHMAAZ8kUwABnv8BHIEUKAEgBAAErAMAA/V4AIRbAAGffFMAAZ9XARyBFCgCBVcAA/P8+Ak7AAGgQwABoIwAAwABcdF0DwAD82gJgA8AAlRxgA8AAlRIBHMAAaEaGwABoM8BHHeHAAFx1AgACFMAAaGHARx8qCQAUwABoacBHIEUKAADAAKJXPRzAAGiSFMAAaH/ARyDWCwCD+AEAATTAAGiaA8AAaJrAAGkUAAAAAgICwABoowAAAIC9YAPAAJUcAMAAaLcAAACCk2ADwACVEgAAYAPAAP0OAT4BPRzAAGjVhcAAaMvARx24VgEAASbAAGjZARzAAGjZLsAAXFjAAIwOAwACFMAAaOrARyFSDAAUwABo8MBHIWINAAGWJhTAAGj/wEcfKgkAwACMUWADwACODADAAPy6AMAA/Pk/P0/AAGk0wABpOQAAAcAAXHZhAwFgA7zTXAADwABpRMAAabIAAAABAQHAAGlSAAAAgmZgA7zTAABcAT4BScAAaWIWwABpbRTAAGlmwEciCAoAhQK82D4BPRzAAGmcFMAAaYnARx8HCAAgAQABFMAAaZ3ARyIICgAAAD9OwABpysAAadwAAMAAXHddA8AA/KkBYAPAAI4MATHAAGnqYAPAAI4MAEnAAGnzIhbAAGoFFsAAafcuwABS38AAjA7AAIwbtIzAAIIKABzAAGongMAAaiPARxxqSAEAARbAAGo6FsAAaioutATAAIwOwACMF5rMuE4AwAD9Xj4CTsAAambAAGpwAAC7ZF0DwAD82gJgA8AAlRxgA8AAS2QBHMAAao+GwABqfMBHHeHAAFx4AAAAAMAAolg9HMAAasEUwABqt8BHItkLAIP4AQABNMAAaskDwABqycAAbB0AAAACAgLAAGrSAAAAgL1gA8AAlRwAwABq4QAAAKTxYAPAAEtkAABgA8AA/Q4BPgNOwABrTMAAa1kAALseYAPAAP3rARbAAGtkFMAAa1vARyNNDQCAvcAAS3JJwABrchbAAGt/FMAAa3bARyNNDQCFNcAAS3U9FcAAa4nARyNoDiTAAGuoAhTAAGuawEcjaA4AJ4C8Pz0cwABrxBTAAGuywEciWgoAVgEAARzAAGvohsAAa9XARx3hwABceQIAAhTAAGwEwEcjPQwAFMAAbArARyNNDQAAwACiWQDAAPy6AMAA/Pk/ScAAbCuDwABsL8BHHUk+A07AAGykwABsqQAAgL1gA8AAlRwBHMAAbLIWwABsqy63nMAAjA7AAIwlwABIGQEAAWrAAGzIYAPAAGh9wADuhgDAAGRJTsAAbNzAAGzlAACCamADwACWEAEmwABs3AEcwABs6WrAAGzqYAPAAJeAwAEfaSABAAEnwABcegDAAJeCYAPAAJYQPRzAAG0dhcAAbRPARx24VgEAASbAAG0hARzAAG0hLsAAXFjAAIwOAgACFMAAbTLARyQtCwAUwABtOMBHJHEMAADAAIxRYAPAAI4MAMAA/Lo/ScAAbU8iHMAAbWMWwABtUy60BMAAjA7AAIwXseoBAAGAwABteMBHHGoAuUoAIYHAAG2BwEccgz4BPRzAAG2fhcAAbZXARx24gKUBAAEcwABtpi7AAFx7wACMDgEAAYDAAG3CwEccagDAAIxQAMAA/Ls/TsAAblHAAG5pAACzFmADwAD6PwEqScAAbnYhgcAAbnvARxyDPgFJwABujxzAAG6nFsAAbpMur1TAAIwOwACMFrMWAQABgMAAbr/ARxxqALspPgVOwABu4sAAbuoAAISOXQPAAPypAWADvNMBMcAAbvpgA7zTAE/AAG8GwABvCwAAAVZhAwFgA7zTXAADwABvDsAAb7UAAAABAQHAAG8cAAAAgmZgA7zTAABcAT4BScAAbzAcwABvShbAAG87FMAAbzTARyYQDgCE/7zhSAEAAYDAAG9NwEccagDAAP1ePgI9HMAAb2gUwABvYMBHJckMAFYBAAEUwABvbMBHJhAOAADAAPy6PRXAAG+BwEcldgspPz0cwABv1BbAAG/ALq9UwACMDsAAjBay+gIAAoDAAG/swEccahTAAG/xwEcl8A0AALsFPRzAAHATFsAAb/8ur1TAAIwOwACMFrMTAgACgMAAcC7ARxxqFMAAcDPARyXwDQAAuyZJwABwQhbAAHBOFMAAcEbARyXJDACDssAA/Iw+AT0cwABwgxzAAHBuFsAAcGYuwABXgcAAjA7AAIwrwABXoQEBYAO80wEUwABwesBHJckMAADAAIhGg/gBAAEUwABwi8BHIeUJAADAAPx3P0nAAHCwIRzAAHDJFsAAcLUur1TAAIwOwACMFoTvAQABgMAAcNzARxxqALsOPgVOwABw/8AAcQcAAISOXQPAAPypAWADvNMBMcAAcRdgA7zTAD0cwABxNxbAAHEjLq9UwACMDsAAjBay+gIAAoDAAHFPwEccahbAAHFcFMAAcVTARyeFDABWwAD8ugC7BT0cwABxfhbAAHFqLq9UwACMDsAAjBazEwIAAoDAAHGZwEccahbAAHGmFMAAcZ7ARyeFDABWwAD8ugC7Jj0cwABxyBbAAHG0Lq9UwACMDsAAjBazFAIAAoDAAHHfwEccahbAAHHsFMAAceTARyeFDABWwAD8ugC7Jz0cwAByFxzAAHICFsAAcfouwABXgcAAjA7AAIwrwABXoQEBYAO80wEUwAByDsBHJ4UMAADAAIhGg/gBAAEUwAByH8BHIeUJAADAAPx3Pz9OwAByRMAAclcAALn4YAPAAPo/ARzAAHJqFsAAclkuwABTOcAAjA7AAIweufgBAAGAwAByfcBHHGoAwAB6DE7AAHKTwAByogAAwABcfF0DwAD8qQFgA8AAjdMBI4HAAHKkwEccg2rAAHK5XQPAAPypAWADwACN08ABaTscwABy0y7AAFxqwACMDgMAAAOZyoDAAHLywEccasAAXGgqwABcfRTAAHM+wEcoqwwAwACMVAFdA8AA/KkBYAPAAI3TTsAAc2PAAHN9AADAAFxpXQPAAPypAWADwACN0wEjgcAAc3/ARxyDasAAc5RdA8AA/KkBYAPAAI3TwAFpOxzAAHOuLsAAXGrAAIwOAwAAA5nKgMAAc83ARxxqwABcaCnAAFx9FMAAdBjARyirDADAAIxUAV0DwAD8qQFgA8AAjdNOwAB0RcAAdE8AAMAAXH5gA8AAosEBHMAAdGaHwAB0UcBHHnzAAFx/AwACgMAAdH/ARxxqFsAAdIQuwABcDcAAjA7AAIwkAcAAXIAWwAB0uS7AAFwPwACMDsAAjC/AAKLYTsAAdO/AAHT+AADAAFyBXQPAAPypAWADwACODAExwAB1DGADwACODABOwAB1JcAAdS4AALuZXQPAAPypAWADwACODAExwAB1PGADwACODABJwAB1RBzAAHVUFsAAdUguwABH3cAAjA7AAIwcsvQBAAGAwAB1ZcBHHGoAwABqUj4BPRzAAHaBFMAAdnfARynpDwDAAFyCAgACFsAAdpEuwABXgcAAjA7AAIwrNMAAdpoDwAB2msAAd0AAAAACAgLAAHajAAAAgL1gA8AAlRwAwAB2sQAAAIKTYAPAAJPbAABgA8AA/Q4BPgE9HMAAdxYWwAB3ABzAAHbJFsAAdsEum73AAIwOwACMMEsBAAEWwAB22hbAAHbKLrQEwACMDsAAjBexVbilAMAA/O67mcAAja5WAQABJsAAdxoBHMAAdxouwABcWMAAjA4CAAIUwAB3K8BHKwgSACbAAHcxARTAAHcxwEcrGBMAYAPAAJUSAMAAjFFgA8AAjgwAwAD8ugDAAKLKPgJGwAB3VsAAd3rAAHdhAAAAhJRgA8AAjdMAFMAAd2rARyjpDQA+AUnAAHeEFsAAd44UwAB3iMBHK9cSAMAAXAjAAI3aPgdAIRbAAHe8FMAAd7bARyvXEgDAAFyDwACN4MAAd7XAAHfQAE7AAHfpwAB38QAAliZgA7zlARbAAHf5FMAAd/PARyvXEgCWJsAAjdVOwAB4GsAAeB8AAIKTYAPAAJUSARzAAHgvFsAAeCEuwABcDcAAjA7AAIwkSwEAARTAAHgwwEcsNxMAAMAA/O5AIRzAAHhQFMAAeEvARyxfFABIAQABKwDAAP1ewAB4S8AAeFcBJMAAeHsCJ8AAXIQUwAB4dcBHK9cSAEnAAHiIHMAAeJEUwAB4jMBHLF8UAEgBAAErAMAA/V4+AT0VwAB5gcBHLF8UHMAAeYpqwAB5i2ADwACXgMABH2kgAQABJ8AAXIUAwACXgj9OwAB5vsAAecMAAIC9YAPAAJUcARzAAHnMFsAAecUut5zAAIwOwACMJcAASAEBAAEWwAB54xTAAHndwEcr1xIAwABcBcAAjdcAwABkRj0cwAB6CxTAAHn8wEcqShAAVgEAASbAAHoPARzAAHoPLsAAXFjAAIwOAwACFMAAeiDARy0oFQAUwAB6JsBHLF8UAAGWJhTAAHo1wEcsNxMAwACMUWADwACODADAAPy6Pz0cwAB6YxTAAHpZwEcp6Q8AwABcggIAAhbAAHpzLsAAV4HAAIwOwACMKzTAAHp8A8AAenzAAHrWAAAAAgICwAB6hQAAAIC9YAPAAJUcAMAAepMAAACCk2ADwACT2wAAYAPAAP0OAT4BPRzAAHqsFMAAeqPARypzEQBWAQABJsAAerABHMAAerAuwABcWMAAjA4CAAIUwAB6wcBHLhISACbAAHrHARTAAHrHwEcuIhMAYAPAAJUSAMAAjFFgA8AAjgwAwAD8ugDAAKLKTsAAeuzAAHrxAACAvWADwACVHAEcwAB6+hbAAHrzLrecwACMDsAAjCWGegEAAYDAAHsEwEccagDAAGRQTsAAexXAAHsgAADAAFyGYAPAAP3rARzAAHspFsAAeyIut5zAAIwOwACMJa/KAQABgMAAez7ARxxqAMAAZFVOwAB7scAAe7gAAMAAUaVgA8AAjVUBHMAAe8QWwAB7ui7AAEjewACMDsAAjCzAAFxQAQABFMAAe9PARy7cEwAAwACMwU7AAHvpwAB7+AAAqghgA8AA+j8BIiEcwAB8BxbAAHv7LsAAR93AAIwOwACMHLL0AQABgMAAfBjARxxqAMAAalIAHMAAfFIWwAB8NhbAAHwoLsAAXArAAIwOwACMGbTXwABLtIMXAQABgMAAfFvARxxqAMAA/HZOwAB8bAAAAIF2YAPAAI2kAEnAAHx4IiIcwAB8kBbAAHx8Lq9UwACMDsAAjBaE7wEAAYDAAHyjwEccagC7DgAhgcAAfLTARxyDACEUwAB8y8BHJXYLAD4EQCEcwAB9ABbAAHz0LsAAR93AAIwOwACMHLL1AQABgMAAfQ7ARxxqAMAAak3AAHzzwAB9EgBAFsAAfSqEwAB9IsBHHY+BVcAA/IvAAH0iwAB9MQBAIYPAAH1CwEcdScAAfUHAAH1UAD0VwAB9XsBHL9QWH8AAfWvAAI3SDQAKgMAAfYfARxxqFMAAfZbARy6gEgAUwAB9psBHLxoUABTAAH24wEco6Q0AFMAAfdLARylpDgCFwAB998BHHbgUwAB+DMBHKkoQABTAAH4mwEcqcxEAHMAAflMWwAB+RRbAAH46LsAAXAvAAIwOwACMH8AAUS7AAHYjSwEAAYDAAH5UwEccagDAAHdfFsAAfm4UwAB+ZMBHKekPAMAAXIfAAKLDA7vMFMAAfqPARy9eFQDAAFxugsAAfsrARxzKwABcbIHAAH7twEccgz4BPRXAAH8NwEcv1BYfwAB/GsAAjcsTAAyAwAB/K8BHHGoUwAB/OsBHLqASABTAAH9KwEcvGhQAhMAAf1zARx2PFMAAf2/ARyjpDQAUwAB/icBHKWkOAIXAAH+uwEcduBTAAH/DwEciWgoAFMAAf+DARypKEAAUwAB/+sBHKnMRABzAAIAnFsAAgBkWwACADi7AAFwLwACMDsAAjB/AAFEuwAB2I0sBAAGAwACAKMBHHGoAwAB3XxbAAIBCFMAAgDjARynpDwDAAFyHwACiwwe7zBTAAIB3wEcvXhUAwABcboLAAICewEccysAAXGyBwACAwcBHHIOGThzAAIDtFsAAgOEuwABH3cAAjA7AAIwcsvUBAAGAwACA+8BHHGoAwABqTcAAXG+DwACBH8BHHUnAAFyIHMAAgU0uwABca8AAjA4BAAGAwACBXcBHHGoAwACMSLMWFMAAgYbARyV2CwA9HMAAgbIWwACBqi6bvcAAjA7AAIwwgL8CAAKAwACBs8BHHGoUwACBusBHL9QWAADAAPzvSsAAgcYBFMAAgc3ARy/UFgAGwACMSoGGwACB3MAAgeHAAILsAADAAFyJwACMDgAAAAEDwACB8sAAguwAAAABAQHAAIICAAAAlkdgA7zoAABgA8AA+j8BPgNJwACCECXAAIIbgMAAghTARzNIYAPAAHVPSsAAgi4BKj9JwACCQCXAAIJLgMAAgkTARzNIYAO9B0rAAIJlASo/SsAAgncBIiEcwACCqxbAAIKYFsAAgoWAwACCfsBHM0i0oLzrtKy9HkgBAAGTAMAA/SgBIRzAAILkFsAAgtUWwACCwoDAAIK7wEczSLSgvOuEvr0VSAEAAZMAwAD9KAbAAIxLgYbAAILxwACC9sAAg4wAAMAAXIrAAIwOAAAAAQPAAIMJwACDjAAAAAEBAcAAgxkAAACWR2ADvOgAAGADwAD6PwE+AUrAAIMnASIWwACDPBbAAIMuLsAAUt/AAIwOwACMG7SPwACCCAAcwACDaRbAAINbLsAAU4vAAIwOwACMKbdrAQABgMAAg4HARzQuAMAAQscGwACMTIGGwACDosAAg6LAAIe2AADAAFyLwACMDgAAAAEDwACDwMAAh7YAAAABAQHAAIPQAAAAlkdgA7zoAABbAT4ETsAAg/MAAADAAFyMWwBOwACEKsAAhD0AALSgYAO9DwEWwACERoDAAIQ/wEc0xbSgvOtJwACEXhbAAISFFsAAhHWCwACEYsBHNOeEwb0Ug7LAAPyMPgI9icAAhJnARzTZHsAAhL7AAPzhAAJgA8AA/etgA8AAYNIAAD0cwACE9hbAAITiLq9UwACMDsAAjBazHQIAAoDAAIUHwEc0xTTAAIUZA8AAhRnAAIYNAAAAAwMDwACFIwAAAIKQYAPAAGJmAMAAhTAAAACAvWADwAD96wDAAIVEAAAAgyVgA8AAYNIAAGADwAD9DgE+AUnAAIVcHMAAhYMWwACFc4LAAIVgwEc054TBvRSDFwEAAYTAAIWMwEc1mQDAAPx2PgJAIRzAAIWzhcAAhabARzWpSAEAASsAwAD9XsAAhabAAIW6AD0cwACF5YHAAIXHwEc02YC/AgAChMAAhebARzWZhcAAhe7ARzWpAAA/ALswPgM9icAAhiPARzTZMcAAhlNgA8AAYNIATsAAhmHAAIZnAAAnYAPAAPwFAZM9HMAAhoYWwACGci6vVMAAjA7AAIwWsx0CAAKAwACGl8BHNMU0wACGqQPAAIapwACHgAAAAAMDA8AAhrMAAACCkGADwABiZgDAAIbAAAAAgL1gA8AA/esAwACG1AAAAIMlYAPAAGDSAABgA8AA/Q4BPgJJwACG7BzAAIb2g8AAhvDARzZcgW0BAAEWwACHDILAAIb5wEc057SqvRIAwAD9NT4BPRzAAIdLgcAAhyzARzTZVgEAAYbAAIdPwEc2xwAAPz2LwACHcMBHNlwcwACHdYPAAIdwwEc2XGQBAAGUAMAA/SoAuzBKwACHjQGBwACHlMBHNNkGwACMTYGGwACHu8AAh8bAAJK1AADAAFxzwACMDgAAAAEDwACH0sAAkrUAAAABAQHAAIfiAAAAliZgA7zoAABgA8AAjfIBPhhOwACH+cAAh/4AAIC9YAPAAJUcARzAAIgHFsAAiAAut5zAAIwOwACMJa+AAQABgMAAiBrARzeVAMAAZFJOwACINsAAiDsAAIKTYAPAAJUSARzAAIhLFsAAiD0uwABcDcAAjA7AAIwkSwEAAYDAAIhMwEc3lQDAAPzuScAAiKEcwACIqoLAAIilwEc36kgBAAErAMAA/V5KwACIswErP07AAIjKwACI1QAAwABcjWADwAD6PwEqTsAAiOoAAADAAFyOYAPAAJUcAE7AAIkAwACJFAAAwABcj2ADwAD6PwEqTsAAiSbAAIk3AADAAFyQYAPAAPo/ASIiIRbAAIlKgMAAiULARzeVssG82wEWwACJYIDAAIlYwEc3lYUzvNwBFsAAiXSAwACJbMBHN5WFNbzdTsAAiYjAAImVAADAAFyRYAPAAPo/ARzAAImXLsAAXIrAAIwOAQABgMAAiavARzeVAMAAjEtOwACJwsAAicwAAMAAXJJgA8AAlRwBIxzAAIncFsAAic4uwABcCsAAjA7AAIwZu0oBAAGAwACJ8cBHN5UAwABLshzAAIoLFsAAigQut5zAAIwOwACMJa98AQABgMAAiirARzeVAMAAZFErAWADwACVHEnAAIpIhsAAikzARziNPgE9i8AAimbARzhMKj4BScAAio0WwACKqBbAAIqZgMAAipHARzeVhP+84bSavMQ+Aj2LwACKvcBHOEwqPY3AAIrZwEc4dik+Aj2LwACLL8BHOEwiHMAAi0oWwACLPC7AAFwKwACMDsAAjBm7OwEAAYDAAItbwEc3lQDAAEunARzAAIuBFsAAi3MuwABcCsAAjA7AAIwZu0QBAAGAwACLmcBHN5UAwABLrz2MwACLq8BHOGMcwACLwBbAAIu5LrecwACMDsAAjCXAAEgYAQABgMAAi9HARzeVAMAAZEhJwACL7oPAAIvywEc4TD4CQCElwACMFYDAAIwNwEc3lWADvQDAAIwNwACMKgEewACMLLXDAQABgMAAjDXARzeVAEAhJcAAjFWAwACMTcBHN5VgA70HwACMTcAAjG4BHsAAjHC1wwEAAYDAAIx5wEc3lQA/TsAAjJTAAIyiAAC52GADwAD6PwEcwACMyRbAAIy5FsAAjKwutarAAIwOwACMJ7e4wABNMMAAUx8BAAGAwACM3cBHN5UAwAB6DU7AAIz0wACM/QAAoG1gA8AAlRwBK0nAAI0Jg8AAjQ3ARzhMPgJOwACNKsAAjTcAAMAASzxgA8AAS2QBHMAAjWUewACNR8AAS40BAAGAwACNXMBHN5UAuzIAAAAAwABLiT0VwACNfcBHOysKHMAAjY8WwACNiC63nMAAjA7AAIwlr4wBAAEUwACNnsBHO1ALAADAAGQ7P07AAI3BwACNzAAAwABck2ADwABiZgEcwACN4hbAAI3OLq9UwACMDsAAjBazAwEAAYDAAI3ywEc3lQC7EU7AAI4OAAAAhTtgA8AAlRIAScAAjiCDwACOJMBHOEw+Ak7AAI5DwACOTgAAs4pgA7s3ARzAAI5gFsAAjlAus8jAAIwOwACMGLPNAQABgMAAjnTARzeVALv2PRXAAI6EwEc7/QwcwACOky7AAFyUwACMDgIAAibAAI6pARTAAI6pwEc7wQsAYAPAAGL5FMAAjrXARzweDQAAwACMTj9OwACO3MAAjuMAAJZHYAO86AGAwACO5cBHN5VOwACPBcAAjxgAALSgYAO9DwEWwACPIRTAAI8awEc8mg0AtKC8607AAI89wACPVAAAhR9gA8AA/AUBFsAAj2kUwACPVsBHPLUOALSqvRJOwACPlgAAAMAAXIxbAE7AAI++wACPyQAAwABclWADwAD8BQGTScAAj9KHwACP1sBHON4+Aj0VwACP7MBHPQMQHMAAkA0uwABci8AAjA4BAAEUwACQLMBHPJoNAADAAIxMScAAkDscwACQYRbAAJBSFMAAkD/ARzy1DgCEvr0VgJcBAAGTAMAA/TQ+AT0VwACQcMBHPRERlD8/SsAAkJMBH8AAkJ7AAI4LDwAFgMAAkK3ARzeVgcAAkLbARzeugsAAkLzARzfqHMAAkMouwABclsAAjA4DAAOAwACQ4sBHN5WDwACQ68BHOEyHwACQ98BHON4AwACMTxTAAJEGwEc7KwoACsAAXJeDwACRJsBHOEzAAFyOhMAAkUfARzhjwABcj4XAAJFxwEc4drnYFMAAkZ3ARzriCQDAAFySFMAAkb/ARzkTCADAAFyRh8AAkeDARzjehR8UwACSDsBHPNsPAMAAXIwUwACSTsBHPQMQAIU7FMAAkoTARzv9DADAAFyVFMAAkqbARz0REQAGwACMToGGwACSusAAksjAAJQsAADAAFyUwACMDgAAAAEDwACS3cAAlCwAAAACAgLAAJLyAAAAgpBgA8AAYvkAwACTAwAAALOKYAO7NwAAYAPAAJUSAT4BScAAkxUWwACTHoDAAJMZwEc+vrvrwABjAj4CTsAAk0vAAJNWAADAAFyYYAPAAJUSARzAAJNaasAAk1tgA8AAl4DAAR9pIAEAASfAAFyZAMAAl4JKwACTeAEcwACTixbAAJN/LsAAU3TAAIwOwACMIMAAUV8EAAQWwACTqy63nMAAjA7AAIwlFsAAk7kWwACTsy632MAAjA7AAIwmr3XAAFzGgMAAk8LARz6+gsAAk8jARz8CAMAAdmU+AUrAAJPoARzAAJQHFsAAk/UWwACT7y632MAAjA7AAIwmnmzAAFzAwABcmgIAAoDAAJQRwEc+voHAAJQXwEc+zgDAAI00BsAAjE+BhsAAlDHAAJRLwACWwwAAwABclsAAjA4AAAABA8AAlGLAAJbDAAAAAwMDwACUeQAAAJYmYAO86ADAAJSHAAAAwABcjWADwAD6PwDAAJSYAAAAwABckWADwAD6PwAAXQPAAPypAWADwACOEQE+A0nAAJSsIRzAAJSxLsAAXInAAIwOAQABgMAAlMPAR0AVAMAAjEpKwACUzQFqwACU1F0DwAD8qQFgA8AAjhHAAWlDP07AAJUPwACVGQAAoQBgA8AAopoBH8AAlR/AAKKwCgAKFsAAlUUWwACVPy632MAAjA7AAIwmr3XAAFzGFsAAlVwWwACVVi632MAAjA7AAIwmt7/AAFzFFsAAlXMut5zAAIwOwACMJRbAAJWDLsAAU3TAAIwOwACMICMWwACVoRbAAJWYLrHywACMDsAAjBSCtIFWFsAAlbQuwABcDMAAjA7AAIwhKwFgA8AAd30WwACV1i7AAEfdwACMDsAAjBwWwACV6y7AAFM5wACMDsAAjB4WwACWBS7AAFwKwACMDsAAjBkWwACWHC61qsAAjA7AAIwnFsAAljIut9rAAIwOwACMKgBKwACWUwEcwACWZIPAAJZawEdAm8AAXJsDAAGAwACWe8BHQBUCwABcjYHAAJaYwEdAI8AAXJGCwACWssBHQDXAAKKuBsAAjFCBhsAAlsjAAJbZwACX8wAAwABce8AAjA4AAAABA8AAlvTAAJfzAAAAAQEBwACXAQAAAMAAXJxgA7zBAABdA8AA/KkBYAPAAI4MAT4CTsAAlzbAAJdAAAChAGADwACiXQEfwACXRsAAonAFAAUWwACXai632MAAjA7AAIwmFsAAl3Eut5zAAIwOwACMJRbAAJd5LrWqwACMDsAAjCcWwACXhy7AAFwKwACMDsAAjBkWwACXli632sAAjA7AAIwqAErAAJe3ARzAAJfIgcAAl77AR0IywABcnQIAAoDAAJfWwEdCECsAwACibgbAAIxRgYbAAJhzwACYesAAmQgAAMAAXFjAAIwOAAAAAQPAAJiKwACZCAAAAAMCAsAAmJMAAACAvWADwACVHADAAJinAAAAgpNgA8AAlRIAAcAAmMEAAACWJmADvNMBagBgA8AA/Q55YAPAAI3rAT4BSsAAmNEBH8AAmNzAAI4QAwACgMAAmOfAR0L+gcAAmO3AR0MOAZYmgsAAmPzAR0MfBsAAjFKBhsAAma3AAJmywACbJQAAwABcO8AAjA4AAAABA8AAmc7AAJslAAAAAAAAAFwBPgJOwACZ+8AAmggAAMAAUzpdA8AA/GcBYAPAAHpmARbAAJoqFsAAmhIuu0zAAIwOwACMIq8awAB6V0bAAJpKwACahsAAmmkAAAC6kGADwAB6ZgCAwACaeMBHQ6U+AUbAAJqOwACav8AAmp8AAACWJmADvMEAFsAAmraBwACaqsBHQ+WEg8AAemk+Ak7AAJrPwACa0wAAmcpgA8AAjaQBHMAAmt0WwACa1S6bvcAAjA7AAIwwSwEAAYLAAJrewEdECQDAAPzuScAAmvAhHMAAmviDwACa9MBHRC5IAQABKwDAAP1ePRfAAJsFg8AAmwHAR0QuwABNRCnAAI28PwbAAIxTgYbAAJsqwACbRcAAoLMAAMAAXGbAAIwOAAAAAQPAAJtjwACgswAAAAAAAABdA8AA/GcBYAPAAI4mAT4ITsAAm4XAAJuTAADAAFxFYAPAAKJyAR/AAJuZwACiiAcABxbAAJu7LrQEwACMDsAAjBcWwACb2hbAAJvULrfYwACMDsAAjCavdcAAXMYWwACb6y63m8AAjA7AAIwaFsAAnAsut5zAAIwOwACMJRbAAJwbLreawACMDsAAjCMWwACcQy7AAFwKwACMDsAAjBkWwACcWi61qsAAjA7AAIwnAE7AAJx1wACcgAAAwABchmADwAD96wEcwACckRbAAJyKLrecwACMDsAAjCWvyQEAARbAAJy4FsAAnKgutATAAIwOwACMF7EXuGYAwABkWU7AAJ1NwACdVAAAwABRpWADwACNVQEcwACdYBbAAJ1WLsAASN7AAIwOwACMLMAAXFABAAGBwACdb8BHRYEAwACMwU7AAJ2OwACdlAAAhLddA8AA/KkBYAPAAJUcATHAAJ2WYAPAAJUcAE7AAJ3GwACd1QAAwABcnl0DwAD82gJgA8AAlRxgA8AAemYBMsAAnddgA8AAlRxgA8AAemYARsAAnd/AAJ5JwACd/gAAALqQYAPAAHpmABbAAJ4tFsAAnhUuu0zAAIwOwACMIq8awAB6Vz4ETsAAnlnAAJ5eAACAvWADwACVHAEcwACeZxbAAJ5gLrecwACMDsAAjCWvmAEAARbAAJ6JhcAAnn3AR0Z1hIPAAHppAMAAZE09HMAAnp+DwACemcBHRhFWAQABhsAAnqPAR0ajAMAA/LpAIRzAAJ7ShMAAnsPAR0Y4h0cBAAGGwACe3sBHRqMAwAD87cAAnsLAAJ7jASQAByfAAFyfhsAAnxvAR0ajJ8AAXKAcwACfSITAAJ86wEdGOEsBAAGGwACfScBHRqMAwAD87ifAAFyhhcAAn1fAR0Z1J4FqPRzAAJ98hMAAn27AR0Y4gL8CAAKGwACffcBHRqOFwACfhcBHRnUAwAD87z0cwACfooPAAJ+cwEdGEYCuAAAAAMAA/LxKwACfrgEcwACfu4PAAJ+1wEdGEYCrAQFgA8AAjiYBNMAAn78DwACfv8AAoK4AAAABAQHAAJ/IAAAAgL1gA8AAlRwAAGADwACOJgE+A07AAJ/wwACf/AAAupBgA8AAemYBHMAAoAyEwACf/sBHRjhLAQABhcAAoA3AR0f0AMAA/O5OwACgKMAAoC0AAIKTYAPAAJUSARzAAKBHgMAAoDnAR0ThwABcogEAAYbAAKBkwEdIDwDAAKKBSsAAoHgBH8AAoIPAAI4sAwADhcAAoJTAR0f0gsAAoJrAR0XPh8AAoKLAR0hDAADAAPxyBsAAjFSBhsAAoLjAAKDEwACo9AAAwABcasAAjA4AAAABA8AAoNDAAKj0AAAABAAABMAAoN4AAADAAFxoYAPAAPo/AWrAAKDsYAPAAPo/AMAAoP4AAADAAFx9YAPAAPo/AWrAAKEYYAPAAPo/AMAAoTMAAACEQ2ADvLIBagBgA8AA/Q55wAChTgAAAJnKYAO8wQFqAGADwAD9DnldA8AA/KkBYAPAAI3TAT4FTsAAoWbAAKFtAACEhV0DwAD8qQFgA8AAjdMBMcAAoXZgA8AAjdMAT8AAoX/AAKGEAAABhRRhAwZgA7zlYAPAAJUcYAPAAJUcYAPAAPo/YAPAAPo/YAPAAPo/XAADwAChjsAAp98AAAAGBgbAAKGbAAAAhJRgA7zlAMAAoaoAAACAvWADwACVHADAAKG4AAAAwABcBWADwACVHADAAKHTAAAAwABcBmADwAD6PwDAAKHlAAAAwABcB2ADwAD6PwDAAKH3AAAAwABcCGADwAD6PwAAXAE+Ck7AAKIXwACiIwAAwABco2ADwAD8BQGTScAAoi4UwACiMsBHSfIJAD4BScAAokkigMAAok3AR0jdASEcwACiexbAAKJqLsAAUznAAIwOwACMHsAAUyABAAGGwACilcBHScIAwAB6Dj4BPRXAAKKpwEdKLgyUPgI9FcAAotXAR0ouDBzAAKLhFMAAotXAR0ouDABkAQABlQDAAP0qScAAo9AhgcAAo9XAR0j7PgE9FcAAo/3AR0ouDBzAAKQJFMAAo/3AR0ouDABkAQABlADAAP0qPz9OwACkOMAApEQAAMAAXKRgA8AA/AUBk0nAAKRPFMAApFPAR0oECgA+AUnAAKRqIoDAAKRuwEdI3QEhHMAApJwWwACkiy7AAFM5wACMDsAAjB7AAFMhAQABhsAApLbAR0nCAMAAeg8+AT0VwACkysBHSwENlD4CPRXAAKT2wEdLAQ0cwAClAhTAAKT2wEdLAQ0AZAEAAZUAwAD9KknAAKUSIYHAAKUXwEdI+z4BPRXAAKU/wEdLAQ0cwAClSxTAAKU/wEdLAQ0AZAEAAZQAwAD9Kj8/TsAApYjAAKWSAAC0OWADwABuCQEcwACloxbAAKWULrf/wACMDsAAjCi0OwEAASbAAKWwAYbAAKWwwEdJwmADwAB1ewDAAG4FTsAApcwAAADAAFylYAPAAGDSAEnAAKXqFsAApfgUwACl7sBHS9QOAMAATTrAAG4NPgE9FcAAphzAR0wcDxbAAKY/FMAApjXAR0vUDgCWPMAAbgw/TsAApmkAAADAAE0bYAPAAGDSAEnAAKZ+FsAApowUwACmgsBHS9QOAMAATTnAAG4aPgE9FcAApq3AR0xwEBbAAKbHFMAApr3AR0vUDgDAAE0bwABuGz89HMAApuyEwACm5cBHSVhWAQABH8AApvTAAI3qCQAJhsAApwXAR0nCh8AApxbAR0nQFMAApybAR0ngCAAUwACnPsBHSi4MABTAAKdVwEdLAQ0AFMAAp2zAR0oWCwAUwACnisBHTBwPABTAAKeswEdMcBAAFsAAp88UwACnxcBHS9QOAMAASGvAAG4PAADAAPy6TsAAp/PAAKf7AACHNGADwACMgQEfwACoAcAAjJIHAAcWwACoDi6x8sAAjA7AAIwUFsAAqBgur1TAAIwOwACMFhbAAKg1LrQEwACMDsAAjBcWwACoRi7AAFwKwACMDsAAjBkWwACoVS7AAEfdwACMDsAAjBwWwACoYi63nMAAjA7AAIwlFsAAqGoutarAAIwOwACMJwA9HMAAqIWGwACofcBHTVfAAFymBAABhcAAqJHAR0mDA8AAXGiAwACos8BHSN2EQ4LAAKjKwEdJGZnKg8AAqNjAR0kwwACMjErAAKjjAYTAAKjqwEdJWAbAAIxVgYbAAKj5wACpFMAArocAAMAAXGfAAIwOAAAAAQPAAKkwwACuhwAAAAAAAABdA8AA/GcBYAPAAI4mAT4ITsAAqVLAAKlgAADAAFxFYAPAAKJyAR/AAKlmwACiiAcABxbAAKmILrQEwACMDsAAjBcWwACppxbAAKmhLrfYwACMDsAAjCavdcAAXMYWwACpuC63m8AAjA7AAIwaFsAAqdgut5zAAIwOwACMJRbAAKnoLreawACMDsAAjCMWwACqEC7AAFwKwACMDsAAjBkWwACqJy61qsAAjA7AAIwnAE7AAKpCwACqTQAAwABchmADwAD96wEcwACqXhbAAKpXLrecwACMDsAAjCWvyQEAARbAAKqFFsAAqnUutATAAIwOwACMF7EXuGYAwABkWU7AAKsawACrIQAAwABRpWADwACNVQEcwACrLRbAAKsjLsAASN7AAIwOwACMLMAAXFABAAGBwACrPMBHTyMAwACMwU7AAKtbwACrYQAAhLddA8AA/KkBYAPAAJUcATHAAKtjYAPAAJUcAE7AAKuMwACrmwAAwABcnl0DwAD82gJgA8AAlRxgA8AAel0BMsAAq51gA8AAlRxgA8AAel0ARsAAq6XAAKwBwACrvQAAALqQYAPAAHpdABbAAKvsFsAAq9Quu0zAAIwOwACMIq8fwAB6Vj4ETsAArBHAAKwWAACAvWADwACVHAEcwACsHxbAAKwYLrecwACMDsAAjCWvmgIAAhbAAKxQhcAArETAR1AXpPHAAHpfFsAArGaFwACsWsBHUBeEg8AAemEAwABkTj0cwACsfIPAAKx2wEdPs1YBAAGGwACsgMBHUEUAwAD8ukAhHMAArK+EwACsoMBHT9qHRwEAAYbAAKy7wEdQRQDAAPztwACsn8AArMABJAAHJ8AAXJ+GwACs+MBHUEUnwABcoBzAAK0lhMAArRfAR0/aSwEAAYbAAK0mwEdQRQDAAPzuJ8AAXKGFwACtNMBHUBcngWo9HMAArVmEwACtS8BHT9qAvwIAAobAAK1awEdQRYXAAK1iwEdQFwDAAPzvPRzAAK1/g8AArXnAR0+zgK4AAAAAwAD8vErAAK2LARzAAK2Yg8AArZLAR0+zgKsBAWADwACOJgE0wACtnAPAAK2cwACuggAAAAEBAcAAraUAAACAvWADwACVHAAAYAPAAI4mAT4DTsAArcbAAK3SAAC6kGADwAB6XQEcwACt4oTAAK3UwEdP2ksBAAGFwACt48BHUaoAwAD87k7AAK3+wACuAwAAgpNgA8AAlRIBHMAArh2AwACuD8BHToPAAFynAQABhsAArjjAR1HFAMAAooVKwACuTAEfwACuV8AAjiwDAAOFwACuaMBHUaqCwACubsBHT3GHwACudsBHUfkAAMAA/HIGwACMVoGGwACujMAArp3AALbTAADAAFxlwACMDgAAAAEDwACur8AAttMAAAABAQHAAK6/AAAAliZgA7zoAABgA8AAjh0BPhNOwACu1sAArtsAAIC9YAPAAJUcARzAAK7kFsAArt0ut5zAAIwOwACMJa+AAQABgMAArvfAR1KSAMAAZFJOwACvDMAArxMAAMAAUaVgA8AA/esBHMAArxwWwACvFS63nMAAjA7AAIwlr8wBAAGAwACvMsBHUpIAwABkU07AAK9OwACvUwAAgpNgA8AAlRIBHMAAr2MWwACvVS7AAFwNwACMDsAAjCRLAQABgMAAr2TAR1KSAMAA/O5OwACveMAAr4YAAMAAXKhgA8AA+j8BIiIhFsAAr5mAwACvkcBHUpKHgLzZACEWwACvs4DAAK+rwEdSkoUzvNwAIRbAAK/IgMAAr8DAR1KShTW83U7AAK/bwACv6AAAwABckWADwAD6PwEcwACv6i7AAFyKwACMDgEAAYDAAK/+wEdSkgDAAIxLTsAAsBLAALAfAADAAFyXYAPAAPo/ASKEwACwKcBHU2IAHMAAsFoWwACwSBbAALA6LsAAXArAAIwOwACMGbuvwABNZ4MXAQABgMAAsGPAR1KSAMAA/HZOwACwesAAsIYAAMAAXI5gA8AAlRwBI4bAALCQwEdT6hzAALCmFsAAsJ8ut5zAAIwOwACMJa9+AQABgMAAsLjAR1KSAMAAZFwrAWADwACVHE7AALDWwACw3wAAoG1gA8AAlRwBK0nAALDrhsAAsO/AR1PqPgJOwACxDsAAsRsAAMAASzxgA8AAS2QBHMAAsUkewACxK8AAS40BAAGAwACxQMBHUpIAuzIAAAAAwABLiT0VwACxYcBHVJAIHMAAsXMWwACxbC63nMAAjA7AAIwlr4wBAAEUwACxgsBHVLUJAADAAGQ7P07AALGpAAAAhTtgA8AAlRIATsAAscTAALHJAACCkGADwABiZgEcwACx3xbAALHLLq9UwACMDsAAjBazAwEAAYDAALHvwEdSkgC7EUnAALH9hsAAsgHAR1PqPgJOwACyIsAAsi0AALOKYAO7NwEcwACyPxbAALIvLrPIwACMDsAAjBizzQEAAYDAALJTwEdSkgC79j0VwACyY8BHVSYJHMAAsnIuwABclMAAjA4CAAImwACyiAEUwACyiMBHVTcKAGADwABi+RTAALKOwEdVgQsAAMAAjE4/TsAAsrXAALK8AACWR2ADvOgBgMAAsr7AR1KSTsAAst7AALLxAAC0oGADvQ8BFsAAsvoUwACy88BHVf0LALSgvOtOwACzFsAAsy0AAIUfYAPAAPwFARbAALNCFMAAsy/AR1YYDAC0qr0STsAAs28AAADAAFyMWwBOwACzl8AAs6IAAMAAXJVgA8AA/AUBk0nAALOrhcAAs6/AR1O1PgI9FcAAs8XAR1ZmDhzAALPmLsAAXIvAAIwOAQABFMAAtAXAR1X9CwAAwACMTEnAALQUHMAAtDoWwAC0KxTAALQYwEdWGAwAhL69FYCXAQABkwDAAP00PgE9FcAAtEnAR1Z0D5Q/P0rAALTWAR/AALThwACOJQ0ABoDAALT7wEdSkoHAALUMwEdSqxzAALUkFsAAtRouwABI3sAAjA7AAIwswABcUAEAAYLAALUzwEdS5wDAAIzBg8AAtUTAR1MlHMAAtVIuwABclsAAjA4DAAOAwAC1asBHUpKGwAC1c8BHU+qFwAC1gcBHU7UAwACMTxTAALWYwEdUkAgAB8AAXJeGwAC1uMBHU+rAAFyOh8AAtdvAR1RAwABckYXAALX+wEdTtYUfFMAAtizAR1Y+DQDAAFyMFMAAtmzAR1ZmDgCFOxTAALaiwEdVJgkAwABclRTAALbEwEdWdA8ABsAAjFeBhsAAttjAALbdwAC5vwAAwABcHcAAjA4AAAABA8AAtu/AALm/AAAAAgICwAC3AgAAALOKYAO7NwDAALcmAAAAwABcTV0DwAD8ZwFgA8AAYNIAAFwBPgJJwAC3jBzAALefgcAAt5DAR1gySAEAASsAwAD9XkrAALeoAD9GwAC3tMAAt+jAALfHAAAAwABNG2ADwABg0gCBwAC32MBHWDI+Bz0cwAC3+hbAALfwLsAASN7AAIwOwACMLMAAXKkCAAKAwAC4C8BHWCSCwAC4F8BHWH0AwACMwEAhHMAAuEAWwAC4NS7AAFwRwACMDsAAjDKHRwEAAYLAALhMwEdYfQDAAPztwAC4NMAAuFoATsAAuGvAALhwAACAvWADwACVHAEcwAC4eRbAALhyLrecwACMDsAAjCXAAEfsAQABgsAAuIbAR1h9AMAAZDJOwAC4o8AAuLIAAMAAXKpgA8AA/esBHMAAuLsWwAC4tC63nMAAjA7AAIwlwABIPwEAAYLAALjTwEdYfQDAAGReTsAAuPDAALj3AADAAFGlYAPAAI1VARzAALkNFsAAuQMuwABI3sAAjA7AAIwswABcUAIAAYTAALkcwEdZRAHAAFxRKcAAjMFOwAC5VcAAuV4AAIYFYAPAAI19AR/AALlkwACNhQMAA4PAALltwEdZBoXAALlzwEdZhILAALl7wEdYfQA9HMAAuZsWwAC5kS7AAFwRwACMDsAAjDKAvwIAAoLAALmcwEdYfYbAALmtwEdZywDAAPzvBsAAjFiBhsAAucTAALnLwAC6TgAAwABcH8AAjA4AAAABA8AAueXAALpOAAAAAAAAAGADwACNVQE+AUrAALnuARzAALn/FsAAufUuwABI3sAAjA7AAIwswABcUAIAARbAALoVFsAAug4ut5zAAIwOwACMJcAASDzAAGUBAcAAXKspwACMwQAARu8eAEb3xgBG+AYARvx6AEb9/ABG/tAARv/9AEcAYwBHAbQARwLuAEcD6wBHBgEARwhPAEcJ2gBHC5IARxfVAEcbnQBHHDoARzMYAEcz/gBHNJUARzdlAEc+jgBHP+UAR0HgAEdCzgBHQ28AR0SfAEdIrABHTkEAR1JiAEdX9ABHWjoAR1q/AAAAIQLAAIxbgYiB9oH8rxsDwABcrAAAAWABwAD9UQAAFwTAAIxegYiCIIIoCbHywACMDgBgA4EUAATAAIxfgYiCQoJRCbQEwACMDgBgA7k/AATAAIxggYiCb4KCCa9UwACMDgBgA7skAATAAIxhgYiCm4KqCbPIwACMDgBgA7vhAATAAIxigYiCwYLOCcAAXArAAIwOAGADwABLpAAEwACMY4GIgyKDKAm3nMAAjA4AYAPAAGPIAATAAIxkgYiDOoNCCcAAQ9HAAIwOAGADwABc3wAEwACMZYGIg1eDYgnAAEfdwACMDgBgA8AAalYABMAAjGaBiIN8g4wJwABTOcAAjA4AYAPAAHoEAATAAIxngYiDrYPECbtMwACMDgBgA8AAek0ABMAAjGiBiIPbg+cJtarAAIwOAGADwABNKwAEwACMaYGIhAKEEwnAAFwOwACMDgBdA8AA/ZwBYAO8wQAEwACMaoGIhD6ETAnAAFwNwACMDgBdA8AA/NoCYAO802ADwACVEgAEwACMa4GIhF2EZAnAAFeBwACMDgBgA8AAiEEABMAAjGyBiISAhKYJtEQAXQPAAP2cAWADvMEBHoSUwADBFwABYAO8wQAABMAAjG2BiITyhQkYwABcbQBdA8AA/ZwBYAO8wQErBMAAjG6BiIU2hXcJwABcGABdA8AA/NoCYAO7N10DwAD8qQFgA7zBAR6FU8AA/OEAAmADuzddA8AA/KkBYAO8wQAABMAAjG+BiIWmhewJwABcHABdA8AA/NoCYAO7N10DwAD8qQFgA8AAYNIBHoXGwAD84QACYAO7N10DwAD8qQFgA8AAYNIAAATAAIxwgYiGGoZdCcAAXBoAXQPAAPzaAmADuzddA8AA/KkBYAO80wEehjjAAPzhAAJgA7s3XQPAAPypAWADvNMAAATAAIxxgYiGiobZCcAAXB4AXQPAAPzaAmADuzddA8AA/KkBYAO85QEehrXAAPzhAAJgA7s3XQPAAPypAWADvOUAAATAAIxygYiHB4dLCcAAXK0AXQPAAPzaAmADuzddA8AA/ZwBYAO8sgEehybAAPzhAAJgA7s3XQPAAP2cAWADvLIAAATAAIxzgYiHx4fpGMAAXDkAYAPAAPo/ASoEwACMdIGIiAaIMgnAAFljAF0DwAD8qQFgA7zBATGIMGADvMEAAQXAAIyAgYiIN4g3ia8AAAADiECJrwAAAA4ODohNAAAEsfJgA4EUAIhiAAAEtARgA7k/AIh+AAAEr1RgA7skAIieAAAEs8hgA7vhAIi6AAAEwABcCmADwABLpACI1AAABLecYAPAAGPIAIjnAAAEwABD0WADwABc3wCI/AAABMAAR91gA8AAalYAiRQAAATAAFM5YAPAAHoEAIkxAAAEu0xgA8AAek0AiVUAAAS1qmADwABNKwCJbgAABMAAXA5dA8AA/ZwBYAO8wQCJjAAABMAAXA1dA8AA/NoCYAO802ADwACVEgCJpwAABMAAV4FgA8AAiEEAAGADwACMWwE/DwgBwACMXoAAwEde3AgBwACMX4EAwEde6AgBwACMYIIAwEde9AgBwACMYYMAwEdfAAgBwACMYoQAwEdfDAgBwACMY4UAwEdfHAgBwACMZIYAwEdfKggBwACMZYcAwEdfOggBwACMZhQAwEdfSggACAHAAIxnFADAR19aCQAIAcAAjGgUAMBHX2gKAAgBwACMaRQAwEdfdgsACAHAAIxqFADAR1+LDAAIAcAAjGsUAMBHX6YNAAkBiDfAAP1nAAAAAAkGwACMdoGIibSJxYtxAADAAFwoAAAAAQOJ74txAAAAAAAAAF0DwAD9nAFgA7zBAT4ETooJihEAAISDXQPAAP2cAWADvMEBHooXwADBFwABYAO8wQAATopHilEAAJk0XQPAAPxnAWADwABg0gEcimEWilMuwABcCsAAjA7AAIxiu0gAAAAAwABLsUaKgIqqipMAAACGBWADwABg0gCBip/AR2DXPgFJirIlir+CirbAR2EPYAPAAGHnPgJOiv+LEwAAwABcrmADwABh5wEUixXAR2EPAgFgA8AAYec9HIsvgIsnwEdgs1YBAAEWi0eDizPAR2E8mcrAAGHpAMAA/ak/SotfAYCLZsBHYLMGwACMd4GIi9uL5JCuAADAAFyvAAAAAQOL9pCuAAAAAQEBjA0AAADAAFywXQPAAPxnAWADvMEAAGADwAD7+wE+CE6MOIxIAADAAFyxXQPAAP2cAWADvMEBHoxOwADBFwABYAO8wQAAPRyM/IGM7MBHYc5WAQABFo0QFo0ALrQEwACMDsAAjF+azrhPAMAA/alOjZuNogAAwABcsl0DwAD9nAFgA7zBAR6NqMAAwRcAAWADvMEAAEaNwI4qjd8AAAC6kGADwAB6ZgAWjg4WjfYuu0zAAIwOwACMZ68awAB6Vz4BPRyOOYKOMsBHYh2ApQEAARaOTIOOQMBHYkeEg8AAemkAwAD9qj0cjpmCjpLAR2IdgKUBAAEcjqAuwABcKAAAAADAAIx2AMAA/apGjxOPWI8kAAAAupBgA7zBABaPRBaPMy7AAFM5wACMDsAAjGa6dMAAehc+AUmPYCIhHI9sgo9lwEdiHYMXAQABg491wEdivQDAAP2oACEcj5uDj4/AR2K9SAEAARaPrhaPni60BMAAjA7AAIxfmsy4TgDAAP1ePgE9HI/VgY/FwEdhzlYBAAGDj9nAR2K9AMAA/ak/PRyQT4GQP8BHYc6ApQEAAYCQVsBHYa4AwAD9qkqQcAE0kHcDkHeQqgAAAAEBAZCEAAAAmcpgA7zBAABgA8AA+j8BSpCMASEckJ2BkI3AR2HOgxcBAAGDkKbAR2N6AMAA/agGwACMeIGIkQCRHZLhAAHAAFyzAAAAAQORMpLhAAAAAQEBkUoAAACzQGADuT8AAF0DwAD8ZwFgA7zBAT4BSpFgATGRdGADvMEGFpGLgJF8wEdj0LFYuKgWkbWAkabAR2PQsVm4qRaR3YCRzsBHY9CxWriqFpJ9gJJuwEdj0LFduK0WkqGAkpLAR2PQsV64rhaSxYCStsBHY9CxXLisBsAAjHmBiJMckyGWcgAAwABctAAAAAEDkzeWcgAAAAAAAABcAT4CTpNYk2IAAJk0XQPAAPxnAWADwABg0gEck3oWk2wuwABcCsAAjA7AAIxiu0gBAAEWk5sWk5IuwABD0cAAjA7AAIxkwABD7sAAXOcAwABLsUaTsgCTxQAAAIYFYAPAAGDSAICT0cBHZHNBPgVJk+Qck/EWk+guwABD0cAAjA7AAIxkwABD7wEAAYGUE8BHZMUAwABc6EKUHgA/SZQvFpQ8gZQzwEdkxbpNwABg3T0XlEQuwABcOSnAAIxzP06UeZSGAADAAFy1YAO7NwEclJgWlIgus8jAAIwOwACMYbPvAQABgZSuwEdkxQC7+EmUvxyU0IKUw8BHZS5IAQABKwDAAP1ePgE9ipW5wEdlLhaV2BaVyC6zyMAAjA7AAIxhs8+75T89HJZbHJYVFpX2LsAAXBzAAIxvmR0CAAKCliHAR2UuNJYvA5Yvlk4AAAAAAAAAXQPAAPypAWADwABg0gFKljUBHpY5wAD3owEBYAPAAGDSAZMAAMAA/PVWAQABgZZfwEdkxQDAAPy6BsAAjHqBiJa4lr2lSgAAwABctgAAAAEDltalSgAAAAAAAABcAT4STpbwlwMAAMAAXLBdA8AA/ZwBYAO8wQEclzQelw3AAIx4AQABFpcjLrQEwACMDsAAjF8AlRkAAAAAwAD8fk6XcpeGAAC7Q10DwAD9nAFgA7zBARyYYhyYJxaX/haX8C7AAFwKwACMDsAAjGK018AAS7SBpQEAASaYLQEcmC0uwABcrwEAAYCYQMBHZiMAwACMd2EDAWADvMFgA8AA+j8AwAD8c5UZAAAAAMAA/H5PmHCYdQAAAcAAXLdhAwFgA7zBXAADmI2ZpAAAAAEBAZiaAAAAmcpgA7zBAABcAT4CPRyYtRaYpy60RMAAjGxWAQABg5i5wEdm7wDAAP2pRZjFAZjWmOEAAITsYAO8wQEcmPcWmOMur1TAAIwOwACMYLL5AQABg5kFwEdm7wC7CAEhHJkghJkVwEdnIkgBAAErAMAA/V4BjJkzwEdnIhyZVBaZQC6vVMAAjA7AAIxgsvkBAAGEmWLAR2ciALsIPgE9HJmHFpl5LrREwACMbFYBAAGEmYvAR2ciAMAA/alPmauZsAAAAcAAXLhhAwFdA8AA/GcBYAO8wVwAA5nKmkgAAAABAQGZ4QAAAISDXQPAAPxnAWADvMEAAFwBPgFGmfKaE5oDAAAAmcpgA7zBAISaCsBHZ9Q+AT0cmjWCmh3AR2bSIAEAAYWaNsBHZ/EAAD0cmqqDmpDAR2ewIAEAAYGaq8BHZmAAAE6bAZsOAADAAFy5XQPAAP2cAWADvMEBHJuXHJteHJsnFpsQLrREwACMbIGlAQABFptBFpstLq9UwACMDsAAjGCE77sOAMAA/HOAqwEBYAO8wQEWm3YWm2Iur1TAAIwOwACMYLMXuyoAwAD8cpUZAAAAAMAA/H49HJuyFpukLrREwACMbIClAQABhJu5wEdoNwDAAP2qPRediS7AAFxtHp2nwADBFwABYAO8wQAAwACMbUadvwCd0AAAAJnKYAO8wQAWndcuwABcDsAAjA7AAIxpQT4CSZ3yHJ4JgJ32wEdmI4MXAQABhZ4SwEdo6wDAAP2oQp4YAD9BQ54oIiEcnjOFni/AR2jrSAEAASsAwAD9XgAhHJ5NFp4/LrREwACMbIMXAQABhZ5WwEdo6wDAAP2oPgJJnmYhHJ6DFp5rLsAAXG3AAIxtVgEAAYWeh8BHaOsAwAD9qUKejQE/PY2enMBHaOscnrYWnqIur1TAAIwOwACMYLL5AQABhZ7EwEdo6wC7CD0cnusWnt0utETAAIxsgKUBAAEWnvIuwABcbcAAjG0AwAD9qkmfURyfYxafVS60RMAAjGyDFwEAARaffBafbC60BMAAjA7AAIxfsU64ngDAAP2oPgE9HJ+fFp+RLrREwACMbFYBAAEWn7MWn6MutATAAIwOwACMX5rPuFEAwAD9qT9Jn8gcn9oWn8wutETAAIxsgxcBAAEWn/MWn+MutATAAIwOwACMX7FPuJ8AwAD9qD4BPRygGRagCy60RMAAjGxWAQABFqAtFqAdLrQEwACMDsAAjF+a0rhSAMAA/ak/SaBFHKBXFqBJLrREwACMbIMXAQABFqBwFqBgLrQEwACMDsAAjF+xTbidAMAA/ag+AT0coJYWoIgutETAAIxsVgEAARagqhagmi60BMAAjA7AAIxfmtG4UADAAP2pP0mgvxyg0Ragwy60RMAAjGyDFwEAARag6hag2i60BMAAjA7AAIxfsUu4mwDAAP2oPgE9HKEQFqECLrREwACMbFYBAAEWoSQWoRQutATAAIwOwACMX5rTuFMAwAD9qT9JoTwcoU4WoUAutETAAIxsgxcBAAEWoWcWoVcutATAAIwOwACMX7FRuKEAwAD9qD4BPRyhixahfS60RMAAjGxWAQABFqGfFqGPLrQEwACMDsAAjF+azrhPAMAA/ak/SaG1HKHHFqG5LrREwACMbIMXAQABFqHgFqHQLrQEwACMDsAAjF+xTLicAMAA/ag+AT0cogUWofcutETAAIxsVgEAARaiGRaiCS60BMAAjA7AAIxfmtq4WgDAAP2pP06iZ6J1AADAAFy6XQPAAPypAWADvMEBJqJnARyifxaidy7AAFeBwACMDsAAjGvAAFejAQABFqKLLrREwACMbADAAIhEXQPAAPypAWADvMFGoqCix6KxAAAAmcpgA7zBAIWiuMBHbBI+AUmizyIcot8WotMuwABH3cAAjA7AAIxlwABIFgEAAYai98BHbGUAwABqUAAhHKMiFqMKLsAAXG3AAIxtgxcBAAGGoyvAR2xlAMAA/ag+Az0co6EWo4YuwABZY8AAjHRWAQABhqOlwEdsZQDAAPy6QCEco8sWo7sus8jAAIwOwACMYbPxAQABhqPbwEdsZQC7+qO6o98BHqPhtcMBAAGGo+rAR2xlAD0cpIAcpBcWo/kuwABcGMAAjG6ZHQIAAhakRBakNC6zyMAAjA7AAIxhs8+75TSkVAOkVKRxAAAAAAAAAF0DwAD8qQFgA7zBAUqkWgEepF7AAPejAQFgA7zBAZMAAMAA/PVWAQABhqSEwEdsZQDAAPy6PgE9HKUwHKS/FqShLsAAXBjAAIxumR0CAAIcpNsWpMsus8jAAIwOwACMYbPpAQABhqTuwEdsZQC79DSlBAOlBKUhAAAAAAAAAF0DwAD8qQFgA7zBAUqlCgEepQ7AAPejAQFgA7zBAZMAAMAA/PVWAQABhqU0wEdsZQDAAPy6BsAAjHuBiKVPpVSnNgAAwABcuwAAAAEDpWinNgAAAAAAAABcAT4DT6VxpXYAAAHAAFy8YQMBYAO802ADwAD6PwADpYal1QAAAAEBAaWUAAAAliZgA7zTAABgA8AA+j8BSqWoASIhFqWxgaWpwEduWoUCvNgAIRalzoGlxsBHblqHfbzaTqXzpfwAAIhFXQPAAPxnAWADvNMBHKYaFqYVFqYGLsAAXA3AAIwOwACMaoNiwAD8/IGlAQABgKYgwEduOADAAPxzRqY4pnOmSgAAAIJmYAO80wAcplwWplQuwABXgcAAjA7AAIxrwABXoQEBYAO80wGBpmjAR26TAMAAiEY+Ak6mjqaTAACDW10DwAD8qQFgA7zTARympxamlS7AAFwawACMcJkdAgACHKbOFqa+LrPIwACMDsAAjGGzzQEAAYKm4sBHbtkAu/Y0pvUDpvWnEwAAAAAAAABdA8AA/KkBYAO80wFKpvsBHqb/wAD3owEBYAO80wGTAADAAPz1PRynIYOnHMBHbxJWAQABgqclwEdu2QDAAPy6BsAAjHyBiKc7p0Cr9gAAwABcvQAAAAEDp2Gr9gAAAAAAAABcAT4FT6dqp2oAAAHAAFy+YQMBYAO85WADwAD9DgADp3moWwAAAAEBAaeGAAAAliZgA7zlAABgA8AA/Q4BPgJOp6mnrgAAg1tdA8AA/KkBYAO85QEcp88Wp7AuwABcHsAAjHGZHQIAAhyn9han5i6zyMAAjA7AAIxhs80BAAGBqArAR2/1ALv2NKgeA6geqDsAAAAAAAAAXQPAAPypAWADvOUBSqgkAR6oKMAA96MBAWADvOUBkwAAwAD89T0cqEmCqETAR3AMVgEAAYGoTcBHb/UAwAD8uk6odKiAAADAAFy/XQPAAPypAWADvOUBMaiCYAO85QA9HKiYFqiKLsAAXArAAIwOwACMYrtFAQABNKirA6irqTIAAAABAQGouAAAAISUYAO85QAAYAPAAP0OAT4BSajHFqj6HKjmFqjYFqjLLrWqwACMDsAAjGi0OsAATS20OwEAASao8wGCqPPAR3DpYAPAAHV7AMAAbgXAAE1EwABuED4BPRypGYGpDcBHcKRWAQABgqkdwEdw6QDAAPy6PwDAAEuwPRypRoGpOsBHcKSArgEAATSpSwOpS6vHAAAAAgICqVgAAACB1WADvOUAqWcAAACCSmADvOUAAGADwAD8BQE+BU6phKmPAADAAFzAYAPAAG4JARyprBapnhapkS61qsAAjA7AAIxotDrAAE0ttDsBAAEmqbkBgqm5wEdxg2ADwAB1ewDAAG4FTqnVqeAAAMAAXMFgA8AAbgkBHKn9FqnvFqniLrWqwACMDsAAjGi0OsAATS20OwEAASaqCgGDqgrAR3GPYAPAAHV7AMAAbgVOqhiqHwAAwABcwmADwAD8BQEWqiyEqiHAR3GmwABNQsAAbhFOqkqqUQAAwABcw2ADwAD8BQEWql6FqlPAR3HtwABNQsAAbhFJqngiIRyqg4aqfMBHcjRIAQABKwDAAP0oACEcqpWHqo7AR3JYSAEAASsAwAD9KD4BSqqoARyqtoaqr8BHcjSCSwEAAYeqwMBHclgAwAD9KUmq1iEcquGGqtrAR3I0SAEAASsAwAD9KD4BSqsUAZRJqyshHKs2h6svwEdyWEgBAAErAMAA/Sg+AUqraQEcq3CUgcQAAAAAwAD8KD4BSquLARyrmharki7AAFeBwACMDsAAjGvAAFeiAgACgquzwEdxg4OrtsBHcY8AwACISgDAAPy8PRyr2oGrzsBHcKSD+AEAAYCr4sBHb9MAwAD8dwbAAIx9gYir+6wArl8AAMAAXMQAAAABA6wWrl8AAAAAAAAAXAE+Aj0crDMWrC4WrB8uwABcDcAAjA7AAIxqg2LAAPz8g/gBAAE0rDsDrDutPQAAAAEBAaxJAAAAliZgA7zTAABgA8AA/Q4BPgNOrGWsagAAsz1gA7s3ARysfBasbC6zyMAAjA7AAIxhs80BAAGArJDAR3PBALv2TqyurLYAAIRDYAO8sgEWrMCArLjAR3PBhEO84j0crSocrO0WrM8uwABcrcAAjHKZHQIAAoGs+cBHc9g0rP8DrP+tHQAAAAAAAABdA8AA/ZwBYAO8sgFKrQUBHq0JwADBFwABYAO8sgAAAMAA/PVWAQABgq0uwEd0BgDAAP2pAMAA/Hc9HK1SFq1ELrREwACMbIP4AQABNK1aA61arloAAAABAQGtZwAAAJYmYAO8wQAAYAPAAP0OAT4DTq2DrYgAALM9YAO7NwEcrZoWrYous8jAAIwOwACMYbPpAQABgK2twEd0qQC79E6ty63TAACEQ2ADvLIBFq3dgK3VwEd0qYRDvMM9HK5HHK4KFq3sLsAAXK3AAIxymR0CAAKBrhbAR3TANK4cA64crjoAAAAAAAAAXQPAAP2cAWADvLIBSq4iAR6uJsAAwRcAAWADvLIAAADAAPz1VgEAAYKuS8BHdO4AwAD9qQDAAPx3BsAAjH6BiK5krmmvGQAAwABRpwAAAAEDrnCvGQAAAAAAAABcAT4FPRyueS7AAFy2AAAAAMAAjHo9HK6aLsAAXLQAAAAAwACMeT0crrguwABcuwAAAADAAIx7PRyu1C7AAFy9AAAAAMAAjHw9HK79LsAAXMQAAAAAwACMfQAAR2CBAEdhjABHY64AR2RLAEdl+wBHbg4AR2+pAEdzagBHdXAAR3XsAAAACQLAAIyBgYeEv4TFmkoDwABcxQAAAWABwAD9UQAABwTAAIyEgYeE7IT0CbHywACMDgBgA4EUAATAAIyFgYeFEoUlCa9UwACMDgBgA7skAATAAIyGgYeFP4VOCbQEwACMDgBgA7k/AATAAIyHgYeFZYVyCcAAXArAAIwOAGADwABLpAAEwACMiIGHhYeFkgnAAEfdwACMDgBgA8AAalYABMAAjImBh4WihagJt5zAAIwOAGADwABjyAAEwACMioGHhb+Fywm1qsAAjA4AYAPAAE0rAAEFwACMkoGHhdCF0IZnAAAAA4XchmcAAAAHBweF4gAABLHyYAOBFACF8QAABK9UYAO7JACGCwAABLQEYAO5PwCGJwAABMAAXApgA8AAS6QAhjsAAATAAEfdYAPAAGpWAIZNAAAEt5xgA8AAY8gAhloAAAS1qmADwABNKwAAYAPAAIyBAT8ICAHAAIyEgADAR3cHCAHAAIyFgQDAR3cTCAHAAIyGggDAR3cfCAHAAIyHgwDAR3crCAHAAIyIhADAR3c7CAHAAIyJhQDAR3dLCAHAAIyKhgDAR3dZCQGF0MAA/WcAAAAABQbAAIyMgYeIvYjClagAAMAAXKYAAAABA4jNlagAAAAEAQGI2gAAAIGmXgMABgYGYAO85WADwACVHGADwACVHGADwAD6P2ADwAD6P2ADwAD6PwABVwPAAIwQAFwAA4jpAAAAwABcaGADwAD6PwFqiPdgA8AA+j8AiQwAAACEQ2ADvLIBagBgA8AA/Q55iSEAAACZymADvMEBagBgA8AA/Q55XAE+Bk6JMolAAACy9WADwAD6PwEqTolSiVwAAMAAXMZgA8AA+j8BKk6Jbol9AACqCGADwAD6PwEqSYmKIRyJkoOJjsBHeF5IAQABKwDAAP1ePgI9jImjwEd4eByJvxaJsy7AAEfdwACMDsAAjIiy9QEAAYOJzcBHeF4AwABqTT2OinTAR3icHIqvFoqTFoqFLsAAXArAAIwOwACMh7TXwABLtIMXAQABg4q4wEd4XgDAAPx2SYrJIRyK1YKKzcBHeElIAQABKwDAAP1ePgI9jYrmwEd4iSlAgYsFwEd4L4sFixEBHosTtcMBAAGCixzAR3hJAD4BPR6LOrXDAgACaotOYAO11cAAxOknwABcxwBPi5+LpAAAAYUUXgMAAQIBYAO85QHAAFGlYAO8wQBcAAOLrpD4AAAAAgEBi7sAAACElGADvOUAAYvPAAAAwABRpWADvMEBagBgA8AA/Q55XAE+BU6L5Yv4AADAAFzIYAPAAPo/ASKEjATAR3h4AByMKRaMFS6vVMAAjA7AAIyFhO8BAAEUjDzAR3m7CQAAuw5OjTKNPgAAwABcBmADwAD6PwEqTo1SjV4AAMAAXAdgA8AA+j8BKkmNbSIihY1xwEd4iQEUjX7AR3nXCgABHI2bFI2UwEd5uwkASAEAAYONnsBHeF4AwAD9Xj4CPRWNrcBHehQLHI27LsAAXMkBAAEUjczAR3muCAAAwACMjT0VjdzAR3onDByN6i7AAFzKAQABFI37wEd5rggAAMAAjI4/SY4SIiIiho4XwEd4nAAhHI42Fo4qLsAAR93AAIwOwACMiLL1AQABg45EwEd4XgDAAGpNARSOV8BHehQLAAEUjnDAR3onDAA+BU6Oj46cAADAAFwFYAPAAJUcARyOpRaOni63nMAAjA7AAIyJwABICQEAARSOt8BHea4IAADAAGQ+To7PjtkAAMAASBNgA8AAlRwBHI7iFo7bLrecwACMDsAAjInAAEgLAQABFI70wEd5rggAAMAAZD9OjwmPHAAAwABcCGADwAD6PwEqSY8tIiIWj48cj18Wjz4WjzEutarAAIwOwACMiqUNwABNOrNnAQABFI93wEd5rggAAMAAbl2DHIFqABSPqMBHeicMAAAhHI/ELsAAXMsBAAEUj+PAR3muCAAAwACMkD4CPRWP98BHe20PKT0VkBzAR3onDCo/PRyQkICQj8BHd/QgBgAGFJCRwEd5rggAFJCYwEd7NQ4AFJCjwEd6/Q0AFJCxwEd6FAsAFJC+wEd6JwwAFJDXwEd7bQ8AAAA/SZD/hZEDwEd4iT4BPRyRKhaRFi6vVMAAjA7AAIyFsvcCAAKCkT/AR3hJNJFIA5FIkZcAAAABAQGRVgAAAIJmYAO80wAAYAPAAP0OAT4BSZFoFpFzFJFswEd8dAgAh3282j0ckYaHkXzAR3mGIAEAASaRhwEUkYfAR3x0CABgA7zlAAA/ALsASZGlgZGpwEd4Lz4BPRyR0xaRvy6vVMAAjA7AAIyFsvoCAAKDkevAR3heNJHwA5HwknUAAAABAQGR/gAAAIJmYAO80wAAYAPAAP0OAT4BSZIQIhaSGxSSFMBHfPsIAId9vNoAFpItFJImwEd8+wgAhBm81z4BPRySTYeSQ8BHeYYgAgABJpJOARSSTsBHfPsIAGADvOUBwABRpYOSXsBHeF4APwC7BT4BPRyUqBaUlC6vVMAAjA7AAIyFsvsCAAKDlLvAR3heNJTKA5TKlZ0AAAACAgKU1wAAAMAAUaVgA7zBAJTsAAAAgmZgA7zTAABgA8AA/Q4BPgJJlP4iIRyVBoOVAsBHeF5IAQABFJUJwEd9lwgAAMAA/V4AIYaVFMBHeJxKlSQAP0mVNCIWlT8UlTjAR32lCQCHfbzaACEWlVIUlUvAR32lCQCEGbzXPgE9HJVyh5VowEd5hiACAAEmlXMBFJVzwEd9pQkAYAO85QHAAFGlFJWDwEd9lwgAAD8AuwYGwACMjYGHla2VspZ2AADAAFzJAAAAAQOVwpZ2AAAAAQEBlc8AAACElGADvOUAAGADwAD6PwE+A0AWlemAlePAR35nh3282pXjlfAASZX3HpX7wACMjwEAAYCWEsBHfmcASpYaASo/SpYsASIWljmAljPAR35nhQK82AAcllsWlk0uwABcCsAAjA7AAIyHuzsBAAGAlmzAR35nAMAAS6cGwACMjoGHlnuWgJdvAADAAFzKAAAAAQOWkJdvAAAAAQEBlp0AAACElGADvOUAAGADwAD6PwE+BEAWlreAlrHAR38Gh3282paxlr4ASZbFHpbJwACMjwEAAYCW4MBHfwYASpboASo/SZb6IRaXBYCW/8BHfwasSrzeSpcTASo/SpclASIWlzKAlyzAR38GhQK82AAcl1QWl0YuwABcCsAAjA7AAIyHuzwBAAGAl2XAR38GAMAAS6gGwACMj4GHl3SXgJkUAAHAAFzMAAAAAQOXlpkUAAAAAQEBl6MAAACElGADvOUAAGADwAD6PwE+AUqXsAEqBsAAjJCBh5kZmR6aSAAAwABcywAAAAEDmTyaSAAAAAEBAZlJAAAAgmZgA7zlAABgA8AA+j8BPgNJmZchFpmjgJmcwEd/+oUCvNhKmbUBKT9Omc+Z1AAAgpBgA8AAYmYBHJnqFpnWLq9UwACMDsAAjIWzBgEAAYCZ98BHf/oAuxRKmgQBIhaaEIGaC8BHgCnAAEYXwABiagEcmieBmiLAR4ApSAEAARaaOhaaKi60BMAAjA7AAIyGhhC4bgDAAP1eAABHd9IAR35FAEd+5ABHf5sAR3/YAEeAmAAAAAUCwACMk4GJgQeBDYGLA8AAXM0AAAFgAcAA/VEAAAIEwACMlYGJgTmBUgmEgwBdA8AA/KkBYAO8wQExgVBgA7zBAATAAIyWgYmBb4GJCYSOAF0DwAD8qQFgA7zTATGBh2ADvNMAAQXAAIyYAAAAAAQAAAMAAAAAAAAAAABgA8AAjJMBPwEJAQDAAP1nAAAAAAAAAEeBRQAAAAACwACMmYGJgpCCloeXA8AAXM4AAAFgAcAA/VEAAAUEwACMnIGJgtGDBAmcjsAAjA4AXQPAAPzaAmADvLJgA8AAjJMBMoMCYAO8smADwACMkwAEwACMnYGJg4SDkBjAAFzPwACMDgBgA7yyASsEwACMnoGJg6SDsBjAAFzQwACMDgBgA8AAjJMBKwTAAIyfgYmD8oP2CYC9AGADwAD96wAEwACMoIGJhAuEFQmzigBgA7s3AAIFwACMqoGJhBqEGoRIAIHnAAOEK4RIAAAAAQEBhDEAAASzimADuzcAAGADwACMmQE/AwgBwACMoIAAwEeCHggAwACMnycACQGEGsAA/WcAAAAABcAAjKuBiYRNhE2EmwCaAgADhGKEmwAAAAICAoRoAAAEs4pgA7s3AIR5AAAEgL1gA8AA/esAAGADwACMmQE+AUAhHISRFoSMLoC9wACMn0gBAAEnAADAAP36hIyElgADCAHAAIyggADAR4JwCAHAAIyfgQDAR4J8CQGETcAA/WcAAAAABQbAAIyjgYmEoISwhYgAAMAAXNHAAIwOAAAAAQOEu4WIAAAAAQEBhMoAAACEQ2ADvLIAAGADwACMkwE+AkmE2SEchOoWhN0uwABcz8AAjA7AAIydSAEAAYCE7cBHgv8AwAD9Xj4CPReE/i7AAFzPwACMDoCFDcBHgv/AAIydPReFHC7AAFzQwACMDhyFNBaFKy6cjsAAjA7AAIycmR0CAAKAhUDAR4L/NIVJA4VJhWQAAAAAAAAAYAPAAIyTAUqFTwEfhVPAAIyYAAAAAADAAPz1wACMnj9KhXEBFoV4LsAAXNDAAIwOwACMngbAAIykgYmFjYWShfoAAISRAAAAAQOFmoX6AAAAAgIChakAAACEQ2ADvLIAhb4AAACWJmADvMEAAFwBPgE9HIXqFoXiHIXNLsAAXNHAAIwOAQABgIXZwEeD4wDAAIyjhIPAAIyVVgEAAYGF7sBHg+8AwAD8ugbAAIylgYmF/4YEhm4AAISQAAAAAQOGDYZuAAAAAgIChhwAAACEQ2ADvLIAhjIAAACWJmADvNMAAFwBPgE9HIZeFoZWHIZBLsAAXNHAAIwOAQABgIZNwEeEWADAAIyjhI7AAIyWVgEAAYGGYsBHhGQAwAD8ugbAAIyogYmGc4Z7hpQBAGEAAAABA4aChpQAAAAAAAAAYAPAAPwFAUqGhQEWho4WhoUunI7AAIwOwACMnGHAAPz+BsAAjKaBiYaZhp6HlQAAg/gAAAABA4alh5UAAAABAQGGsgAAAIGmYQMDYAO8sl0DwAD8qQFgA7zBXQPAAPypAWADvNNcAABcAT4BPRyHHBaHEy6cjsAAjA7AAIycg/gBAAE0hyQDhySHkAAAAAICAoczAAAAhENgA7yyAIdMAAAAhs1gA8AAjJMAAGADwAD9DgE+AT0ch16Ah13AR4UOIAMAA4GHX8BHhV4Wh3CCh2jAR4VqhIPAAIyVFoeBgod5wEeFaoSOwACMlgAAAMAA/PkAAEeC2QBHg8MAR4Q4AEeErQBHhO4AR4W/AAAABQLAAIysgYmIcYh3k5UDwABc0gAAAWABwAD9UQAABwTAAIyvgYmIlYikCbMxwACMDgBgA7s3AATAAIywgYmItYi8CcAAV4HAAIwOAGADwACIQQAEwACMsYGJiNqI+gnAAFzTwACMDgBdA8AA/NoCYAPAAP3rYAPAAI1VATKI+GADwAD962ADwACNVQAEwACMsoGJiSKJXAnAAFzUwACMDgBdA8AA/NoCYAO7N2ADwACMmQEyiVpgA7s3YAPAAIyZAATAAIyzgYmJl4mmGMAAXNXAAIwOAGADuzcBKwTAAIy0gYmJt4nIGMAAXNbAAIwOAGADwACMmQErBMAAjLWBiYrViuUYwABcKwBgA8AAjJkBKwEFwACMw4GJiuqK6osWAAAAA4ryixYAAAACAgKK+AAABLMxYAO7NwCLDgAABMAAV4FgA8AAiEEAAGADwACMrAE/AwgBwACMr4AAwEeHCQgBwACMsIEAwEeHFQkBiurAAP1nAAAAAAkGwACMt4GJic2J4on/AQDAAFwzAAAAAQOJ6on/AAAAAAAAAF0DwAD8ZwFgA8AAjVUBSontARaJ+RaJ7S7AAFzTwACMDsAAjLEpwAD8/QbAAIy4gYmKA4oeilgBAMAAXC8AAAABA4ozilgAAAAAAAAAXQPAAPxnAWADwACMmQFKijwBFopSFoo8LsAAXNTAAIwOwACMsinAAPz9BsAAjLmBiYqGio6KwwEAwABcMQAAAAEDiqCKwwAAAAAAAABgA8AA/AUBSoqjARyKwBaKuRaKoy7AAFzUwACMDsAAjLJhwAD8/mQBAAGUAMAA/SoGwACMvIGJixuLKIyQAADAAFzXwACMDgAAAAEDiz6MkAAAAAEBAYtKAAAAwABc2GADuzcAAGADwACMmQE+BkmLXByLa4CLYMBHiGdIAQABFotuLsAAXNXAAIwOwACMswDAAP1eSot/ARaLhi7AAFzWwACMDsAAjLQ/Touri7IAAIF2YAPAAIyZASMci8CAi7XAR4hnSAEAARaLwy6zMcAAjA7AAIyvAMAA/V4Wi94uwABcK8AAjLUcjA4Wi/kuwABc1MAAjA7AAIyySwEAAYCMD8BHiGcAwAD87gFgA8AAjJlAIRyML4GMKMBHiLtIAQABKwDAAP1ejCiMNgA9F4w9LsAAXNXAAIwOgIxPwEeIZ8AAjLM9F4xfLsAAXNbAAIwOgYxzwEeIu8AAjLRKjH8BgYyGwEeIuwbAAIy9gYmMlYyajjEAAMAAXBcAAAABA4ysjjEAAAABAQGMuAAAALOKYAO7NwAAXAE+AUmMyhyM2YCMzsBHiZpIAQABFozcLrMxwACMDsAAjK8AwAD9Xj4CQByNDRaM/C7AAFwrwACMtUgBAAErAMAA/V6M/I0UAD0XjR0uwABcKx+NNMAAjKoBAAEWjUYuszHAAIwOwACMrwDAAIy1PgNAIRyNiRaNcy7AAFzUwACMDsAAjLKHRwEAAYCNlcBHiZoAwAD87Y1yjaAATo2wjbUAAIC9YAPAAP3rARaNwoCNt8BHiZqAvbs6PRyN4xaNzi7AAFzUwACMDsAAjLKAvwIAAoCN5MBHiZofjgDAAIyrAgACgI4WwEeJmoGOIsBHikQAAMAA/O8GwACMvoGJjpCOlY+uAADAAFwZAAAAAQOOpI+uAAAAAgICjrAAAACzimADuzcAjtIAAACIRV0DwAD8ZwFgA7zBAABcAT4CTo7vjwIAAMAAXNlgA8AAjJkBHI8ELsAAXNfAAIwOAQABgI8bwEeKwQDAAIy8Ro8sj2ePPQAAAJYmYAO8wQAcj1AWj0guwABXgcAAjA7AAIywwABXowEAAYGPXMBHis0AwACIRD4BPRyPgoKPb8BHiuaEkQIAAhaPk4OPi8BHixeEQ7zDg4+cwEeLFwDAAIykBsAAjL+BiZANkBKRLgAAwABcGwAAAAEDkCGRLgAAAAICApAtAAAAs4pgA7s3AJBQAAAAiEVdA8AA/GcBYAO80wAAXAE+Ak6QbZCAAADAAFzZYAPAAIyZARyQgi7AAFzXwACMDgEAAYCQmcBHi5cAwACMvEaQqpDmkLwAAACWJmADvNMAHJDPFpDHLsAAV4HAAIwOwACMsMAAV6EBAWADvNMBgZDbwEeLowDAAIhGPgE9HJEBgpDuwEeLvISQAgACFpETg5ELwEeL7YRDvOKDkRzAR4vtAMAAjKUGwACMwIGJkTOROJGYAADAAFypAAAAAQORSJGYAAAAAgICkVQAAACzimADuzcAkW4AAADAAE0bYAPAAGDSAABcAT4ABsAAjMGBiZGdkaSTkwAAwABcUAAAAAEDkbKTkwAAAAMBAZG6AAAAgL1gA8AA/esAApHMAAAAwABcq2ADwAD6PwFqkeFgA8AA+j8Ake0AAADAAFxRYAPAAPo/AWqSAGADwAD6PwBgA8AAjVUBPgJAIhySJxySIBaSFS7AAFzTwACMDsAAjLFLAQABgJIhwEeMtADAAPzuSAEAASsAwAD9XgEiHJJhFpJNHJJGFpI7LsAAXNPAAIwOwACMsUsBAAGAkkfAR4y0AMAA/O7AAFyrwACNWUgBAAGBkmTAR4zDAMAA/V4AHJKrFpKZHJKSFpKHLsAAXNPAAIwOwACMsUsBAAGAkpPAR4y0AMAA/O7AAFxRwACNWkgBAAGCkq7AR4zdAMAA/V6SFZLAAEqSyAEcktsWks8uwABc08AAjA7AAIyxmR0CAAKAkufAR4y0NJLtA5Ltk44AAAAAAAAAYAPAAI1VAT4BSpL4AR+TA8AAjV4EAAKAkwrAR4y0FpMcFpMQLsAAXNPAAIwOwACMsWHAAPz+AsAAXKuBk0PAR4zDwABcUYKTdcBHjN0AwAD89QAAR4dUAEeHoQBHh+4AR4hBAEeJeABHip8AR4t1AEeMTwBHjJIAR45AAAAACQAABIGGgYeBiIGJAEeObwBG5ygAR1tMAEd2GQBHgLUAR4FOAEeF3ABHjm0AAAAGAEeObwAAAAAAAgTAAIzEwABc2oGKAAAVgQcAAFoAAIEsAACkNgAAgUgAALYYAACBbAAAo/sAAIGOAADAAGCfAACBtAAAuzQAAQEBsymB5wAAvFEAAIIGAAC8rAAAgi0AAMAAQd0AAIJYAADAAGOQgoEAgnkAAMAAq9MAAIKqAADAAGPFAACC0AAAwAB2GgAAgv4AAMAAd3wAAQEBt5SDQwAAgPsAAINgAADAAEudAAEBAbs5g6YAAMAATScAAQEBpKqD0wAAwAB6bgABAQKvDreWhA0AAMAAjT8AAIQlAADAAIwOAAEBAcAAXAmEawAAwACsFAAAAAAAAwLAAIzFgYqEiYSYjooHwABc2wAAAWABwAD9UQABYAHAAFzPAQTAAIzIgYqE3ITiCbecwACMxABgA8AAZP4AAQXAAIzYgYqE54TnhQYAAAADhPmFBgAAAAEBAYT/AAAEt5xgA8AAZP4AAGADwACMxQE/AggBwACMyIAAwEeP8AkBhOfAAP1nAAAAAA0GwACMyoGKhQuFHYYLAADAAFzcAAAAAQOFOYYLAAAAAQEBhUYAAACWJmADvMEAAGADwACWLwE+A06FXYViAACAvWADwACVHAEchWsWhWQut5zAAIzEwACMyK+QAQABgIWGwEeQQwDAAGURToWmhakAAMAAXN1gA8AAli8BH4W3wACWPQIAAhyF0BaFyS63nMAAjMTAAIzIr6EBAAGAhenAR5BDAMAAZQ6BhfPAR5BaAEqF/gGChgXAR5CMBsAAjMuBioYQhiKHCAAAwABc3gAAAAEDhj2HCAAAAAEBAYZFAAAAliZgA7ytAABgA8AAli8BPgNOhlyGYQAAgL1gA8AAlRwBHIZqFoZjLrecwACMxMAAjMivkgEAAYCGhMBHkP4AwABlE06GpIanAADAAFzdYAPAAJYvAR+GtcAAlj0CAAIchs4Whscut5zAAIzEwACMyK+jAQABgIbmwEeQ/gDAAGUPgYbwwEeRFQBKhvsBgocCwEeRRwbAAIzMgYqHDYcfiBEAAMAAXN8AAAABA4c8iBEAAAABAQGHSgAAAJYmYAO80wAAYAPAAJYvAT4DTodhh2YAAIC9YAPAAJUcARyHbxaHaC63nMAAjMTAAIzIr5QBAAGAh4vAR5G5AMAAZRJOh6uHrgAAwABc3WADwACWLwEfh7zAAJY9AgACHIfVFofOLrecwACMxMAAjMivpQEAAYCH78BHkbkAwABlEIGH+cBHkdAASogEAYKIC8BHkgIGwACMzYGKiBaINIiRAADAAEPkAWqIF2ADwAD9UQIAAAEDiEWIkQAAAAEBAYhSAAAAliZgA7zBAABgA8AAli8BPgFKiGEBHIhoLsAAXNwBAAGAiIXAR5J+AMAAjMoGwACMzoGKiJaIsIlgAADAAEPiAWqIl2ADwAD9UQIAAAEDiMyJYAAAAAEBAYjZAAAIliZgA7zlAABgA8AAlRIBPgFKiOgBH4jzwACWPQIAAhyJDBaJBS63nMAAjMTAAIzIr6UBAAGAiSbAR5LbAMAAZRAciT8WiTgut5zAAIzEwACMyK+OAQABgIlTwEeS2wDAAGUhAAbAAIzPgYqJZYmDiecAAMAAQ+ABaolmYAPAAP1RAgAAAQOJl4nnAAAAAQEBiacAAACWJmADvOgAAGADwACWLwE+AUqJtgEcib0uwABc3wEAAYCJ28BHk3AAwACMzAbAAIzQgYqJ7IoKimgAAMAAQ+EBaontYAPAAP1RAgAAAQOKG4poAAAAAQEBiigAAACWJmADvOUAAGADwACWLwE+AUqKNwEcij4uwABc3wEAAYCKXMBHk80AwACMzAbAAIzRgYqKbYqLi3QAAMAAQ94BaopuYAPAAP1RAgAAAQOKmot0AAAAAgEBiqcAAACWJmADvMEAAYq8AAAAwABD32ADwAD6PwFqAGADwAD9DnlgA8AAli8BPgJOiuaK8gAAmNtgA8AAlRIBI4GK/MBHlDccixIuwABD5AEAAYCLJMBHlCoAwACMzRyLLy7AAEPlAQABgIs6wEeUKgDAAIzSAWADwACVEkqLSAEmi0gBHItRaotSYAPAAJeAwAEfaSACAAInwABc4IKLZMBHlFoAwACXgmADwACWLwbAAIzSgYqLeYuTi+MAAMAAQ+UBaot6YAPAAP1RAgAAAQOLnYvjAAAAAQEBi6UAAACWJmADvK0AAGADwACVEgE+AUqLtAEci7suwABc3gEAAYCL18BHlQUAwACMywbAAIzTgYqL6Iv8jFcAAMAAQ+YBaovpYAPAAP1RAgAAAQOMDIxXAAAAAQEBjBQAAACWJmADvK0AAGADwACVHAE+AUqMIwEcjDEWjCout5zAAIzEwACMyK+SAQABgIxLwEeVYgDAAGUTBsAAjNSBioxcjHCM6AAAwABD5wFqjF1gA8AA/VECAAABA4yIjOgAAAABAQGMnAAAAJYmYAO8zQAAYAPAAJUcAT4BSoyrARyMuRaMsi63nMAAjMTAAIzIr5YBAAGAjNzAR5XKAMAAZRQGwACM1YGKjO2NB43bAADAAEPjAWqM7mADwAD9UQIAAAEDjRqN2wAAAAEBAY0qAAAIliZgA7zoAABgA8AAlRIBPgFKjTkBH41EwACVmAIAAh+NWcAAlj0CAAIcjXIWjWsut5zAAIzEwACMyK+lAQABgI2MwEeWMgDAAGUQHI2pFo2iLrecwACMxMAAjMivfgEAAYCNu8BHljIAwABlIgBqjc5dA8AA/KkBYAPAAJUSwAFpSwAGwACM1oGKjeCN846IAADAAEPpAWqN4WADwAD9UQIAAAEDjhWOiAAAAAEBAY4dAAAAwABD6GADwAD96wAAYAPAAP3rAT4BSo5vASSOhAInwABc4YCOfcBHluYAAEeQIQBHkNwAR5GXAEeSUgBHkq8AR5NEAEeToQBHk/4AR5TZAEeVNgBHlZ4AR5YGAEeWugBHlxQAAAANAsAAjNmBio6NjpOS0wPAAEWMAAABYAHAAIzFAAACBMAAjNyBio7bjuQJwABI3sAAjMQAYAO2VwAEwACM3YGKjwWPFQnAAFziwACMxABgA8AAq9cAAQXAAIzigYqPGo8aj8UAAAADjyyPxQAAAAMDA49BAAAAr3RgA8AAZP4Aj00AAATAAEjeYAO2VwCPaAAAAHpgA4EUAABgA8AAjNkBPwMIAcAAjNyBAMBHl88IAMAAjN0fj5DAAKv0AQABgo+nwEeX3QAJAI+5wACM2AEAAYCPv8BHl8EAAgbAAIzfgYqPyo/kkcMAAK+nAWqPy2ADwAD9UQIAAAEDj/WRwwAAAAEBAZAEAAAAhgVgA8AAYNIAAGADwACVEgE+BkmQFBaQIYCQGMBHmFSywcAAYOE+Ak6QS5BUAACCamADwABg9wEmkEsBgJBWwEeYVGADwABg90qQZgEckG0uwABD4wEAARaQioGQgcBHmIKWJsAAYPkAwACM1T9OkKyQtwAAgmtgA8AAlRIBHJDKFpC5LsAAXOLAAIzEwACM3cAAXOMBAAGAkNPAR5hUAMAAq91JkOIhHJDxgZDmwEeYyEgBAAErAMAA/V4+AUqRAgGBkQnAR5jIPz2JkR/AR5jIH5E4twACAAJqkWBgA7bbwADnSoCRasBHmFQAPRyRgxaReS7AAEjewACMxMAAjNyvZQEAASaRnQGBkZ3AR5jIYAO26wC2ckqRrgGBkbXAR5jIBsAAjOCBipHIkeKS0QAAr6kBapHJYAPAAP1RAgAAAQOR/pLRAAAAAQEBkgYAAADAAEPoYAPAAP3rAABgA8AAlRIBPgNOkiKSLQAAgmtgA8AAlRIBH5IztwACAAJqkmRgA7bbwADnXICSesBHmaYAPRySkRaShy7AAEjewACMxMAAjNyvZQEAASaSqwGBkqvAR5nBYAO26wC2ckqSvAGBksPAR5nBAABHmCoAR5l8AEeaIQAAAAICwACM44GKktaS3J1yA8AAXOQAAAFgAcAAjMUAAWABwABc3wcEwACM5oGKkzOTPAmksMAAjMQAYAO1owAEwACM54GKk1OTXwm1qsAAjMQAYAPAAE0rAATAAIzogYqTfZOICcAAU3TAAIzEAGADwAB2YwAEwACM6YGKk6CTsQnAAFwMwACMxABgA8AAd30ABMAAjOqBipPIk80Jt9jAAIzEAGADo/wABMAAjOuBipPek+YYwABD0cAAjMQAYAPAAKwcASsEwACM7IGKk/+UEBjAAEPqAWqT7GADwAD9UQJgA8AAjUABKwEFwACM+4GKlBWUFZazAAAAA5QglrMAAAALCwuUOAAAAHpgA4EUAJRMAAAEpLBgA7WjAJRsAAAAgXJgA4CRAJSPAAAApL1gA7x9AJSpAAAAr3RgA8AAY8gAlLsAAAS1qmADwABNKwCU1AAABMAAU3RgA8AAdmMAlOwAAATAAFwMYAPAAHd9AJUfAAAArwlgA8AAQfsAlUUAAAS32GADo/wAlVcAAADAAFzlYAPAAPo/AABgA8AAjOMBPgE9F5WLLsAAQ9HAAIzEH5WawACsPgwADICVsMBHmzQWlcEupLDAAIzEwACM5oKV1MBHm0uDlezAR5tXhJYCwEebYxaWES61qsAAjMTAAIznFpYnLrfYwACMxMAAjOouFJZEwEebnwgAFpZnLsAAU3TAAIzEwACM6BaWfC7AAFwMwACMxMAAjOkUlpfAR5u5CgAAwACM6wYIAcAAjOaBAMBHmz8IAcAAjOeFAMBHm3EIAcAAjOiGAMBHm38IAcAAjOmHAMBHm48IAcAAjOoUAMBHm60JAAkAlXjAAIzYAQABhJV+wEebYwAKBsAAjO+Bipa4ls6W5AEAt5zAAIzEAWqWuWADwAD9UQIAAAEDltWW5AAAAAAAAABgA8AAY8gBSpbYASaW2AEYlt63nMAAjMTAAIzIYAPAAGPIBsAAjPGBipbplvmYeAAAwABD3QFqlupgA8AA/VECAAABA5cEmHgAAAACAgKXFAAAAMAAQ9pgA8AAjBEAlzEAAAClE2ADwABLpAAAYAPAAPwFAT4DTpdNl1UAALAwYAPAAI1AARyXXRaXVy632MAAjMTAAIzqloQCAWADwACNQAInwABc5jSXfQOXfZezAAAAAAAAAGADwACNQAE+AUqXiAEcl56Al4/AR504wABcFAAAAADAAIw3AKQXSZe6Gpe+pDg+AT0Xl9wuwABD6oKX8MBHnWHAAIzsP0qYAwEcmBAWmAout9jAAIzEwACM6paEAgFgA8AA/AUCJ8AAXOc0mC8DmC+YcwAAAAAAAABgA8AA/AUBPgFKmDoBHJhKFphBLsAAQ9HAAIzEwACM68AAQ90CAAKCmFbAR51hgZhfwEedSADAAKw2AKQXBsAAjPKBiph9mJeY+QAAwABD7AFqmH5gA8AA/VECAAABA5itmPkAAAABAQGYugAAAJYmYAO8wQAAYAPAAJUSAT4BSpjJARyY0C7AAFzcAQABgJjtwEeeggDAAIzKBsAAjPOBipj+mQ+ZjgAAwABD7wFqmP9gA8AA/VECAAABA5kwmY4AAAABAQGZPwAAAIYFYAPAAGDSAABgA8AA+j8BPgFKmU8BHJlfFplWLsAAQ9HAAIzEwACM68AAQ+8BAAGAmYHAR57fAMAArDMGwACM9IGKmZOZo5oGAADAAEPuAWqZlGADwAD9UQIAAAEDmbOaBgAAAAICApnCAAAAgdVgA8AAYNIAmdMAAACCSmADwABg0gAAYAPAAPwFAT4BSpncARyZ7BaZ4y7AAEPRwACMxMAAjOvAAEPuAgACgJn9wEefTYGaAMBHn1sAwACsNAbAAIz1gYqaC5olmoYAAK+nAWqaDGADwAD9UQIAAAEDmjaahgAAAAEBAZpFAAAAgJZgA8AAYNIAAGADwACVEgE+AUqaUgEcmmIWmlkuwABD0cAAjMTAAIzrwABc6AEAAYCafMBHn84AwACsNQbAAIz2gYqai5qlmxMAAK+pAWqajGADwAD9UQIAAAEDmsGbEwAAAAEBAZrJAAAAwABD6GADwAD96wAAYAPAAJUSAT4BSprXARya4Gqa4WADwACXgMABH2kgAQABHJrkLsAAQ+kBAAGAmwfAR6A6AMAAjNYAwACXggbAAIz3gYqbGJtjm6wAAMAAQ+0BapsZYAPAAP1RAgAAAQObgpusAAAAAAAAAGADwACVEgE+AUqbiwEcm5Rqm5VgA8AAl4DAAR9pIAEAASfAAFyFAMAAl4IGwACM+IGKm7Gby5w1AADAAEPrAWqbsmADwAD9UQIAAAEDm+WcNQAAAAEBAZvyAAAAg01gA7zBAABgA8AAlRIBPgFKm/sBHJwEapwFYAPAAJeAwAEfaSACAAInwABc4BycFy7AAEPsAQABgJwuwEehDADAAIzyAMAAl4IGwACM+YGKnDqcSp1wAAC0UQFqnDtgA8AA/VECAAABA5xXnXAAAAABAQGcYwAAALM9YAO7NwAAYAPAAPwFAT4DSZxvHJyNFpx8FpxzLsAAQ9HAAIzEwACM68AAXOnAAKwsgdQBAAE0nJEDnJGcrAAAAAEBAZySAAAAgaZgA8AAjV8AAGADwAD6PwFKnJgBHJylFpyagZyYwEehz7OKwACNYUgBAAGAnKjAR6GFAMAA/V4AwAD8fD4BSpy3AZM/TpzUnNgAAIPRYAPAAI1fARyc/xac8Rac4xac2i7AAEPRwACMxMAAjOvAAFzqwACsK4NiwAD8/JY6AQABNJ0KA50KnTwAAAABAQGdFAAAAJZfYAPAAI1fAABgA8AA+j8BSp0hARydNRadKoGdIcBHomOzisAAjWFIAQABgJ04wEehhQDAAP1eAMAA/INKnUMBFp1mHJ1gFp1TFp1KLsAAQ9HAAIzEwACM68AAXOrAAKwrSwEAAYGdYcBHohoAwAD87mHAAFAoAABHnLsAR50MAEeeVgBHnrMAR58hAEefpABHoBAAR6CIAEeg4ABHoVsAR6LfAAAACgAAAYGKAEejEgBHj5YAR5dRAEeaMgBHoxAAAAADAEejEgAAAAAAAgTAAIz8wABc64GLAAAPgQoAAMAAYI3AAFzsAIFJAACkNgAAgWIAALhLAAEBAbMSgZ0AAMAAYJ8AAIHAAAC7NAABAQGzKYHwAAC8rAABAQG0n4IpAAC8rAAAgk0AAMAAYmEAAIJuAADAAGOQtB0Ago8AAMAAY5AAAQEBgoGCrwAAwAB2GgABAQHAAFFegvMAAMAAd3wAAQEBt5SDNQAAwACFlwABAQHAAEWNg3YAAID7AACDkQAAwABctwABAQGvDgAAAAQCwACM/YGLhK+EvoZmB8AAXO0AAAFgAcAAlkgAAl0BwAD6SwFbYAHAAGOyAAEFwACNBgAAAAAEAAADAAAAAAAAAAAAYAPAAIz9AT8BCQEAwACWUAAAAAAEBsAAjP+Bi4UnhTyFQQECg88AAAABA4VBhUEAAAAAAAAAYAPAAJUSAAbAAI0AgYuFRYVZhV4BAoCWAWqFRmADwAD9UQIAAAEDhV6FXgAAAAAAAABgA8AA/AUABsAAjQKBi4VihWqFbQECwABJb8AAjPwAAAABA4VthW0AAAAAAAAAYAPAAPwFAAbAAI0EgYuGL4ZAhmQAAsAARoMBaoYwYAPAAP1RAgAAAQOGSIZkAAAAAQEBhlwAAACHNGADwABjrAAAXAAAAEekUwBHpHsAR6StAEek2wBHpRgAAAAEAsAAjQeBi4Zphm+JIQPAAFzuAAABYAHAAIz9AAADBMAAjQqBi4aihq0YlwzAAIz8AGADwAD8BQEchquUgcQAAAAAwAD8KATAAI0LgYuGwYbIGMAASW/AAIz8AWqGsmADwAD9UQJgA8AA/AUBkwTAAI0MgYuG74b0CYPPAWqGzWADwAD9UQJgA8AAlRIAAQXAAI0XgYuG+Yb5hxgAAAADhwyHGAAAAAEBAYcSAAAEg89gA8AAlRIAAGADwACNBwE/AggBwACNDIAAwEel2gkBhvnAAI0GAAAAAAcGwACNDoGLhx2HJodBAQDAAEfYAAAAAQOHModBAAAAAAAAAGADwAD6PwFKhzUBIRyHPBaHNS6XDMAAjPzAAI0KSAEAARyHP5SBxAAAAADAAPwoAMAA/SgGwACNEoGLh0aHRoeMAAChgAAAAAEDh06HjAAAAAEBAYdTAAAAgJZgA8AA/AUAAFsBPgJAIRaHaC7AAEfYwACNDodnh3MAPReHei6XDMAAjPyAh4PAR6aCwACNCgbAAI0PgYuHkYelh9sBAICWAWqHkmADwAD9UQIAAAEDh6uH2wAAAAAAAABgA8AA/AUBPgJAFoe4LsAAR9jAAI0Oh7iHwwBKh8oBFofRLpcMwACM/MAAjQoGwACNEIGLh+CH6Yf6AQDAAEgoAAAAAQOH8If6AAAAAAAAAGADwAD6PwFKh/MBHIf3FofzLsAASW/AAIz8wACNC4CXAQABkwDAAP00BsAAjROBi4f/iBCIbAAAwABGgwFqiABgA8AA/VECAAABA4gYiGwAAAABAQGIKwAAAIc0XQPAAJMAAVsAAFwBPgI9F4g6LsAASW/AAIz8HIg9Fog6LsAASW/AAIz8wACNC2QBAAGUAMAA/SrAAI0LSYhFHIhNFohJLsAASW/AAIz8wACNC0gBAAGUAMAA/Sg9HIhZFohTLoPPwACNDIRNAQFbAYCIYMBHp44AwACT4z8GwACNFIGLiHGIgYjCAACCSwFqiHJgA8AA/VECAAABA4iKiMIAAAABAQGIpAAAKIPWYAPAAIz9AABgA8AA/AUBSoiuARyIuBaItICIrsBHqDzAAElvwACM/MAAjQKBjQEAARaIvy7AAElvwACM/MAAjQsAwAD9KwbAAI0VgYuIx4jaiR8AACMBaojIYAPAAP1RAgAAAQOI4okfAAAAAAAAAGADwAD96wFKiOgBJIkfByfAAFzvFoj+LoPBwAD9ZCfAAFzwFokLLsAASW/AAIz8wACNCyfAAFzxFokXLpcMwACM/MAAjQongyEAAEemCwBHpmIAR6a+AEenFgBHp2IAR6gSAEeoiQBHqPwAAAAHAsAAjRiBi4kkiSqKtQPAAFzyAAABYAHAAJZaAAABBMAAjRuBi4luiXQYlwzAAIz8AGADwACVEgErAQXAAI0iAAAAAAQAAAMAAAAAAAAAAABgA8AAjRgBPwEJAQDAAJZhAAAAAAMGwACNHYGLiXmJfooTAADAAFzzAAAAAQOJi4oTAAAAAQEBiZ0AAACAlmADwACVEgAAXAE+A0AcibgWibEulwzAAIz8wACNG0gBAAErAMAA/V6JsYm/AEAcieMWidOAic3AR6mor9PAAJUUSAEAARaJ6y6v08AAjSAAwAD9KInNifoAPReKAS6XDMAAjPyAigrAR6mowACNGwbAAI0fgYuKGIo5inIBAICWAWqKGWADwAD9UQIAAAEDij+KcgAAAAAAAABgA8AAlRIBPgJAIRyKUxaKTC6XDMAAjPzAAI0bSAEAASsAwAD9XopMiloASophARaKaC6XDMAAjPzAAI0bBsAAjSCBi4p3iouKswEAr9MBaop4YAPAAP1RAgAAAQOKm4qzAAAAAAAAAGADwAD8BQFKip4BaoqsYAPAAPwFwACJuwAAR6mGAEeqHgBHqoYAR6rJAAAAAwLAAI0jgYuKuIq+ok0DnmsAAAFgAcAA/VEAAWABwABjpwoEwACNJoGLiwqLEgmx8sAAjPwAYAOBFAAEwACNL4GLiy+LNwmkzQBgA7WjAATAAI0ngYuLSYtRCcAAQ9HAAIz8AGADwABc3wAEwACNKIGLi2+LegnAAFN0wACM/ABgA8AAdmMABMAAjSmBi4uSi6MJwABcDMAAjPwAYAPAAHd9AATAAI0qgYuLwYvUCa9UwACM/ABgA7skAATAAI0rgYuMg4y/GMAAXPTAAIz8AF0DwAD82gJgA7s3YAPAAI0YAR6Mn8AA/OEAAmADuzdgA8AAjRgAAATAAI0sgYuNyY4OGMAAXPXAAIz8AF0DwAD82gJgA7s3XQPAAPzaAmADwAD962ADwACNBwEyjgxgA7s3XQPAAPzaAmADwAD962ADwACNBwAEwACNLYGLjumPIhjAAFz2wACM/ABdA8AA/NoCYAO7N2ADwACNGAEejwLAAPzhAAJgA7s3YAPAAI0YAAAEwACNLoGLkCWQaRjAAFz3wACM/ABdA8AA/NoCYAO7N10DwAD82gJgA8AAYmZgA8AAjQcBMpBnYAO7N10DwAD82gJgA8AAYmZgA8AAjQcAAQXAAI0+gYuQbpBukPYAAAADkH+Q9gAAAAYGBpCFAAAEsfJgA4EUAJCUAAAEpM1gA7WjAJCjAAAEwABD0WADwABc3wCQuAAABMAAU3RgA8AAdmMAkMoAAATAAFwMYAPAAHd9AJDiAAAEr1RgA7skAABgA8AAjSMBPwcIAcAAjSaAAMBHrMoIAcAAjS+BAMBHrNYIAcAAjSeCAMBHrOIIAcAAjSiDAMBHrPIIAcAAjSmEAMBHrQIIAcAAjSqFAMBHrRIJAZBuwAD9ZwAAAAALBsAAjTGBi4zEjNWNWAAAwABc+AAAAAEDjO2NWAAAAAEBAYz5AAAAs4pgA7s3AABgA8AAlRIBPgFKjQsBHI0iFo0SLsAAXPTAAIz8wACNK5kdAgACgI0uwEetnzSNOgONOo1TAAAAAAAAAGADwACNGAFKjUABH41EwACNIgAAAAAAwAD89QbAAI0ygYuPJ484j7UAAMAAXPkAAAABA49Nj7UAAAABAQGPWQAAALOKYAO7NwAAYAPAAJUSAT4BSo9rARyPfxaPci7AAFz2wACM/MAAjS2ZHQIAAoCPi8BHriQ0j5cDj5ePsAAAAAAAAABgA8AAjRgBSo+dAR+PocAAjSIAAAAAAMAA/PUGwACNM4GLkPuRFpM5AADAAFz6AAAAAQORK5M5AAAAAgICkUIAAACCamADvOgAkVcAAACzimADuzcAAF0DwAD8qQFgA8AAlkgBPgNOkdKR4AAAwABbKV0DwAD8qQFgA8AAlkgBMZH4YAPAAJZIAD0ckhQWkgAur1TAAIz8wACNKrMdAgACgJIlwEeuqTSSNwOSN5MaAAAAAwMDkjgAAACAtWADwABiZgCSQgAAAIC9YAPAAP3rAJJWAAAAhgVgA8AAYNIAAGADwAD9DgE+A0mSaBySdYWSbMBHrz1IAQABKwDAAP1eSpJ+AD9Okp2SqAAAgmtgA8AAlRIBHJKzFpKqLsAAQ9HAAIz8wACNJ6+nAQABhZLFwEevPQDAAFzbPRyS5IKS1sBHrtNWAQABHJLoLsAAXPvAAIz8AgAChpL7wEevcoGTB8BHrrUAwACNOADAAPy6ALswSpMhAYKTKMBHrtMGwACNNIGLkz6TT5O1AADAAFyaAAAAAQOTWJO1AAAAAgICk2IAAACCkGADwABiZgCTcwAAALOKYAO7NwAAYAPAAJUSAT4BSpOFARyTjC7AAFz8AgACgJOgwEewC4GTpsBHsBkAwACNOwbAAI01gYuTupPLlDkAAMAAXP0AAAABA5PUlDkAAAACAgKT3AAAAIC9YAPAAP3rAJPtAAAAs4pgA7s3AABgA8AAlRIBPgFKk/8BHJQGLsAAXPvAAIz8AgACHJQcapQZYAPAAJeAwAEfaYPsAQABgJQjwEewcwDAAJeRgZQqwEewgQDAAI04BsAAjTaBi5Q+lE+U1QAAwABc/gAAAAEDlF6U1QAAAAICApR3AAAAgmtgA8AAlRIAlI4AAACzimADuzcAAGADwACVEgE+AUqUoAEclKcuwABc+8AAjPwCAAKAlLrAR7D5gZTGwEexBwDAAI04BsAAjTiBi5TalOmWpgAAwABc+8AAjPwAAAABA5T7lqYAAAACAgKVBwAAAIPuYAPAAJPbAJUYAAAAs4pgA7s3AABgA8AAjP0BPgRPlSqVMQAAAcAAXP9hAwFgA8AAlRxgA8AA/esAA5U6lVwAAAABAQGVRgAAAIC9YAPAAJUcAABgA8AA/esBSpVPASSVXAEWlVeDlVLAR7G0g9HAAJUjTpVplXEAAMAAXQBgA8AA/esBHpVzwABjkgMAAYCVhcBHsWkCgvcWlbAWlacusfLAAIz8wACNJoL3gTjAAEaOgpXdwEexkD01AAAAAQBdA8AA/NoCYAO7N10DwAD82gJgA8AA/etgA8AAjQcBFpXtLsAAXPXAAIz8wACNLDUAAAABAGADuzcBgZX6wEexdyMclgYclfmElfnAR7IqSwEAAYWV+cBHsl8AwAD87kgBAAErAMAA/V41AAAAAQBdA8AA/NoCYAPAAP3rYAPAAI0HAR6WDsAA/OEAAmADwAD962ADwACNBwAANQAAAAEAXAEclfmElfnAR7IqgL8CAAKFlfnAR7JfhgDAR7KZAMAA/O+GAMBHspkrAV0DwAD82gJgA8AA/etgA8AAjQdKljYBHJZWHJZJFpY9LsAAXPXAAIz8wACNLEsBAAGBlkrAR7F3AMAA/O6ZHQIAAoOWYsBHseM0lmsDlmuWoQAAAAAAAABgA8AAjQcBPgFKlnYBH5aBwACNFwEAASaWlQGAlpXAR7FpYAPAAJUSAADAAPz1BsAAjTmBi5arlryZmwAAwABdAcAAjPwAAAABA5bWmZsAAAABAQGW4AAAAIKQYAPAAGJmAABgA8AAlRIBPgNOlv2XDAAAwABRkmADwACVEgEclyIWlxYuwABTdMAAjPzAAI0owABFnAQABBaXOC7AAEPRwACM/MAAjSeAl0LAR7OmNJdIA5dImBMAAAABAQGXSQAAAIJsYAPAAGK5AABgA8AAlnQBPgI9HpdbtcMCAAJql29gA7XVwADE6SQABSfAAF0CgZe4wEe0DyeBnoCX0sBHs6YnwABdAwBKl/IBH5f/wACWewAAAAA0mBUDmBWYRgAAAAEBAZgiAAAAhoFgA8AAYqMAAGADwAD6PwE+AUqYMwEqAMAAdmZJmE4lmGGBmFLAR7O/YAPAAJZ8PgE9HJkeFpkVLqTNwACNL6ViAgACapk3YAO11cAAxOknwABdBAC1qT9KmYIBgZmJwEezvwbAAI06gYuZoJmxmkUAAMAAXQXAAIz8AAAAAQOZ0ZpFAAAAAQEBmdsAAACCkGADwABiZgAAYAPAAJUSAT4BSpnnARyaABaZ7i7AAFwMwACM/MAAjSnAAEWgAgACFpocLsAAQ9HAAIz8wACNJx+aJsAAhbsBAAGAmjvAR7UGAADAAHeABsAAjTuBi5pKmlub+QAAwABc/AAAAAEDmm6b+QAAAAICApp4AAAAgpBgA8AAYmYAmokAAACzimADuzcAAGADwACVEgE+Aj01AAAAAQBdA8AA/NoCYAO7N10DwAD82gJgA8AAYmZgA8AAjQcBFpqbLsAAXPfAAIz8wACNLjUAAAABAGADuzcBgZqlwEe1kyMcmrEcmqSCmqTAR7WrSwEAAYOapMBHteAAwAD87kgBAAErAMAA/V41AAAAAQBdA8AA/NoCYAPAAGJmYAPAAI0HAR6aucAA/OEAAmADwABiZmADwACNBwAANQAAAAEAXAEcmqSCmqTAR7WrgL8CAAKDmqTAR7XghADAR7YaAMAA/O+EAMBHthorAV0DwAD82gJgA8AAYmZgA8AAjQdKmuMBHJsAHJrzFprqLsAAXPfAAIz8wACNLksBAAGBmvTAR7WTAMAA/O6ZHQIAAoCbDMBHtYU0mxIDmxKb9AAAAAAAAABgA8AAjQcBPgFJmx0WmyoWmyEusfLAAIz8wACNJoK0gVY+AUqbRgEfm1HAAI0XAQABHJtlLsAAXQXAAIz8AQABgJuGwEe1hQDAAI06AD4BSpulAR+bsMAAjRcBAAEcm8QuwABdAcAAjPwBAAGAm9/AR7WFAMAAjTkAAMAA/PUGwACNPIGLm/6cD6JLAADAAEaAAWqb/2ADwAD9UQIAAAEDnB2iSwAAAAAAAABcAT4ET5wmnCsAAAHAAF0GYQMBXQPAAPxnAWADwACNB1wAA5w9nUkAAAABAQGcXAAAAIPQXQPAAPxnAWADwACNBwAAXAE+Ak6cgJyIAACEMWADwABjrAEfnI7AAGOxAAAAAD0cnSccnPQcnL2BnKrAR7ergaUBAAE0nMMDnMOc5wAAAAEBAZzYAAAAg01gA8AAjQcAAGADwAD6PwFKnN4BHJzkFpzgg5zewEe4BMAASW/AAIz8wACNC4CXAQABkwDAAP00AMAA/HOAqwEBYAPAAJUSATSc+AOc+J0aAAAAAQEBnQ0AAACDTWADwACNBwAAYAPAAJUSAUqdEwEWnRWDnRPAR7hgg8/AAI0MAMAA/HKD+AEAARadN4KdL8BHt8bAAEaEwABjrwDAAPx3T51QnWcAAAHAAF0HYQMBXQPAAPzaAltgA8AAjQdgA8AAlp4AA51yn8UAAAABAQGdlQAAAICrXQPAAPzaAltgA8AAjQcAAGADwACWngE+B0+dop2nAAABwABIKGEDAWADwACNB2ADwAD6PwADna2d2AAAAAEBAZ3CAAAAg89gA8AAjQcAAGADwAD6PwFKncwBFp3ShJ3MwEe5IcAASCjAAI0QTp36ngIAAIPQXQPAAPypAWADwACNBwEcnh0cng8WngiCngTAR7jaKcAA/P2BpQEAAYOeFcBHuP0AwAD8c4CtAAAAAMAA/H09HJ41hJ4twEe5ToCuAAAAAMAA/LxOnsOeyQAAgO5gA8AA/AUBk0ae1J7/nu0AAACDz2ADwACNBwCEnvbAR7lOPgE9HJ8Php8JwEe5v6GAAQABNQAAAAEAYAPAAPwFAYWfGMBHuao1AAAAAQBgA8AA/AUBjZ8YwEe5qhyfHYcAwEe552QBAAGUAMAA/SqHAMBHuecAwACNEk6fQp9JAAApXQPAAPypAWADwACT2wEcn4Ucn12En1XAR7lOgKsBAWADwACVEgE0n2EDn2GfgwAAAAEBAZ92AAAAg01gA8AAjQcAAGADwACVEgFKn3wBFp9+hp98wEe6aIPPwACNDADAAPxygK0AAAAAwAD8fUqflgEfn6HAAJarAQABJp+4AYafuMBHui1dA8AA/KkBYAPAAJUSAD0cn9wWn8wuwABc9MAAjPzAAI0rg/gBAAE0n+QDn+Sg9gAAAAICAp/wAAAAs4pgA7s3AKAKAAAAklRgA8AAjRgAAGADwAD9DgE+Ak6gHaApAADAAF0IXQPAAPzaAltbARygNxagKy7AAFz1wACM/MAAjSxLAQABgqA4wEe67wDAAPzuSaBLIRygW4SgT8BHuxRIAQABKwDAAP1ePgE9HKB0g6BuwEe6+8AAXPMBAAEcoI2BoILAR7iuIAEAASagjgGEoI7AR7sUXQPAAPzaAltgA8AAjQcAAADAAI0dPgE9HKC6g6C0wEe6+8AAXPMBAAEfoMzAAJarAQABMaDjYAPAAJUSAAAAwACNHQDAAPz5PRyhCxag/i7AAFz2wACM/MAAjS2D+AEAATShEwOhE6JGAAAAAgICoR8AAACzimADuzcAoTkAAACSVGADwACNGAAAYAPAAP0OAT4CTqFMoVUAAMAAXQldA8AA/NoCW1sBHKFgFqFXLsAAXPfAAIz8wACNLksBAAGCoWHAR7v/AMAA/O5JoXQhHKGBhKF4wEe8JEgBAAErAMAA/V4+Aj0coaaAoZTAR7eFIAEAASahsAEWobCEoafAR7wkKcAA/P1dA8AA/GcBYAPAAI0HAAA9HKHHg6HBwEe8C8AAXPMBAAEcoeCBodXAR7iuIAEAASah4QGEoeHAR7wkXQPAAPzaAltgA8AAjQcAAADAAI0dPgE9HKIKg6IEwEe8C8AAXPMBAAEfohzAAJarAQABMaIzYAPAAJUSAAAAwACNHQDAAPz5AABHrX0AR64CAEeuhwBHr+kAR7BRAEew1wBHsUMAR7OAAEe04ABHtWMAR7dRAEe9GQAAAAsAAAGBiwBHvVAAR6P7AEelMQBHqSEAR6reAEe9TgAAAAQAR71QAAAAAAACBMAAjT/AAF0KgYwAAAeBAQAAwABgnwABAQGzIYE3AAC7NAABAQGzKYFnAAC8rAAAgYsAAMAAY5CCgQEBBIVrhlqGEsAARn+B2gAAwACZ2YKBAQEBwABdC4IQAADAAHc7AACCQwAAwAB6bgABAQGeawAAABQCwACNQIGMgnWCe4x4A8AAXQwAAAFgAcAA/VEAAAkEwACNQoGMgpyCpQnAAEhhAF0DwAD8qQFgA8AAjV8ABMAAjUOBjIK8gsMJwABcMwBdA8AA/KkBYAPAAI1VAATAAI1EgYyC0oLsCcAAXDkAYAPAAPo/AATAAI1FgYyC+4MNCcAAXDQAYAPAAPo/AATAAI1GgYyDHIMyCcAAXDoAYAPAAPo/AATAAI1HgYyDo4OqCcAAXEQAXQPAAPzaAmADwAD9610DwAD8qQFgA8AAjV8ABMAAjUiBjIRkhHgJwABdDQBgA8AAlRIABMAAjUqBjIUohToJwABdDsAAjT8AYAPAAI0jAATAAI1LgYyFYIVqCcAAXDUAXQPAAPxnAWADwABjpwABBcAAjVSBjIVvhW+GtQAAAAOFdoa1AAAACQYGhXwAAATAAEhhXQPAAPypAWADwACNXwCFjAAABMAAXDNdA8AA/KkBYAPAAI1VAIWaAAAEwABcRF0DwAD82gJgA8AA/etdA8AA/KkBYAPAAI1fAIWoAAAEwABdDWADwACVEgCFyQAABMAAXQ5gA8AAjSMAheIAAATAAFw1XQPAAPxnAWADwABjpwADhfoAAATAAFw0YAPAAPo/AWoAYAPAAP0OeYYZAAAEwABcOWADwAD6PwFqAGADwAD9DnmGQAAABMAAXDpgA8AA+j8BagBgA8AA/Q55YAPAAI1AAT4CQCEchnkWhmYuwABcNMAAjUVIAQABKwDAAP1ehmaGgABAIRyGqRaGji7AAFw5wACNREgBAAErAMAA/V6GjoawAAoIAcAAjUKAAMBHvywIAcAAjUOBAMBHv0MIAcAAjUeCAMBHv1oIAcAAjUiDAMBHv34IAcAAjUqEAMBHv44IAcAAjUuFAMBHv54IAcAAjUWGAMBHv7YIAcAAjUSHAMBHv88IAcAAjUYUAMBHv+gIAAkBhW/AAP1nAAAAAAUGwACNTYGMiPOJAYlqAADAAF0PAAAAAQOJFolqAAAAAQEBiSIAAACzPWADuzcAAGADwACVEgE+AUqJLgEciUgWiTUuwABdDsAAjT/AAI1KwABc+AEAAYCJYcBHwOgAwACNMQbAAI1OgYyLX4tti9gAAMAAXRAAAAABA4uHi9gAAAABAQGLkwAAALM9YAO7NwAAYAPAAJUSAT4BSoufARyLuRaLpi7AAF0OwACNP8AAjUrAAFz5AQABgIvPwEfBSgDAAI0yBsAAjVCBjIvdi+aMBQEAwABdEQAAAAEDi+6MBQAAAAAAAABgA8AA+j8BSovxARyMAhaL+xaL8S7AAEhhwACNQmHAAPzYgJcBAAGUAMAA/TQGwACNUYGMjAmMIIxGAQDAAFwuAAAAAQOMMoxGAAAAAAAAAF0DwAD8ZwFgA8AAjV8BSow1ARyMPxaMNS7AAEhhwACNQpYvAQABlADAAPyBBsAAjVKBjIxKjFeMdgEAwABcLAAAAAEDjGSMdgAAAAAAAABgA8AAjV8BSoxnARaMcRaMZy7AAEhhwACNQoMZwAD8jQAAR8DGAEfBKABHwYoAR8HaAEfCKQBHwmwAAAAFAsAAjVWBjIzkjOqOEQPAAF0SAAABYAHAAP1RAAAEBMAAjVeBjI0CjQYJgL0AYAPAAP3rAATAAI1YgYyNFI0ZCScAYAPAAPwFAATAAI1ZgYyNKI07CcAAXKsAYAPAAPo/AATAAI1agYyNSo1bCcAAXFEAYAPAAPo/AAEFwACNXoGMjWCNYI3FAAAAA41mjcUAAAAEAgKNbAAABIC9YAPAAP3rAI13AAAEJ2ADwAD8BQACjYoAAATAAFyrYAPAAPo/AWqNn2ADwAD6PwCNqwAABMAAXFFgA8AA+j8Bao2+YAPAAPo/AGADwACNVQE/BQgBwACNV4AAwEfDHggBwACNWIEAwEfDLAgBwACNWYIAwEfDOggBwACNWoMAwEfDVAkBjWDAAP1nAAAAAAEGwACNXIGMjcqN3Y4PAAAjAWqNy2ADwAD9UQIAAAEDjeWODwAAAAAAAABgA8AA/esBPgFKje4BJI4LAyfAAF0TFo4ELoC9wACNVyeDIQAAR8O0AEfEAQAAAAECwACNX4GMjpuOqpG9B8AAXRQAAAFgAcAA/VEAAAYEwACNYYGMj0+PWQmzigBgA7s3AATAAI1igYyPco97CYbZAF0DwAD8qQFgA8AAjYsABMAAjWOBjI+Uj50JmTQAXQPAAPypAWADwACNfQAEwACNZIGMkAaQGgnAAFxOAF0DwAD8qQFgA8AAjZYABMAAjWWBjJCBkJ4JwABdFQBdA8AA/KkBYAPAAI2WAATAAI1mgYyQ2pDoCcAAXRYAYAPAAP3rAAEFwACNaoGMkO2Q7ZGfAAAAA5D1kZ8AAAAGBgaRAgAABLOKYAO7NwCRGQAABMAAXRZgA8AA/esAkTQAAASG2V0DwAD8qQFgA8AAjYsAkUoAAATAAFxOXQPAAPypAWADwACNlgCRawAABMAAXRVdA8AA/KkBYAPAAI2WAJGVAAAEmTRdA8AA/KkBYAPAAI19AABgA8AAjV8BPwcIAcAAjWGAAMBHxOwIAcAAjWaBAMBHxPgIAcAAjWKCAMBHxQgIAcAAjWSDAMBHxR0IAcAAjWWEAMBHxTQIAcAAjWOFAMBHxUsJAZDtwAD9ZwAAAAABBsAAjWiBjJGkka2RuwECwABdFwAAAAEDkbuRuwAAAAAAAABgA8AA+j8AAABHxb8AR8XpAAAAAQLAAI1rgYyST5JVlJIDwABdGAAAAWABwACNXwAAAQTAAI1tgYySipKUCcAAXRkAYAPAAJP7AAEFwACNc4GMkpmSmZQcAAAAA5KllBwAAAAHBweSuAAAALOKYAO7NwCS0QAAAMAAXRZgA8AA/esAkuwAAATAAF0ZYAPAAJP7AJMMAAAAhtldA8AA/KkBYAPAAI2LAJMvAAAAwABcTl0DwAD8qQFgA8AAjZYAk10AAADAAF0VXQPAAPypAWADwACNlgCTkQAAAJk0XQPAAPypAWADwACNfQAAYAPAAI1rAT8CCAHAAI1tggDAR8ZkCQCTpMAAjWoGAAaAk6rAR8ZIgZO2wEfGVIOTxsBHxnSEk9HAR8aJhZPzwEfGoIaUEsBHxrcAAgbAAI1vgYyUIZQ2lEwBAMAAXRcBapQiYAPAAP1RAgAAAQOURZRMAAAAAAAAAGADwAD6PwFKlEgBKQbAAI1xgYyUUZRklJAAACMBapRSYAPAAP1RAgAAAQOUbJSQAAAAAAAAAGADwAD96wE+AUqUdQEnwABdGgAAR8cZAEfHUgBHx44AAAACAsAAjXSBjJS9lMOXBwPAAF0bAAABYAHAAI1fAAABBMAAjXaBjJT2lPoJgL0AYAPAAP3rAAEFwACNfIGMlP+U/5aAAAAAA5UPloAAAAAHBweVIgAAALOKYAO7NwCVOwAAAMAAXRZgA8AA/esAlVYAAASAvWADwAD96wCVcAAAAIbZXQPAAPypAWADwACNiwCVkwAAAMAAXE5dA8AA/KkBYAPAAI2WAJXBAAAAwABdFV0DwAD8qQFgA8AAjZYAlfUAAACZNF0DwAD8qQFgA8AAjX0AAGADwACNdAE/AggBwACNdoIAwEfICwkAlgjAAI1qBgAGgJYOwEfH74GWGsBHx/uDlirAR8gZhJY1wEfILoWWV8BHyEWGlnbAR8hcAAIGwACNeIGMloWWmpaxAQDAAF0XAWqWhmADwAD9UQIAAAEDlqmWsQAAAAAAAABgA8AA+j8BSpasASoGwACNeoGMlraWyZcFAAAjAWqWt2ADwAD9UQIAAAEDltGXBQAAAAAAAABgA8AA/esBPgFKltoBJJcBAyfAAF0cFpb6LoC9wACNdieDIQAAR8i+AEfI9wBHyUQAAAACAsAAjX2BjJcKlxCYCAOGnQAAAWABwAD9UQAAAwTAAI1/gYyXK5cvCYC9AGADwACVHAAEwACNgIGMl0CXRgnAAFGlAGADwACNVQAEwACNgYGMl16XYwmAlgBgA8AAYNIAAQXAAI2FgYyXaJdol5QAAAADl3CXlAAAAAMDA5d2AAAEgL1gA8AAlRwAl4EAAATAAFGlYAPAAI1VAJeOAAAEgJZgA8AAYNIAAGADwACNfQE/BAgBwACNf4AAwEfJ0QgBwACNgIEAwEfJ3wgBwACNgYIAwEfJ7wkBl2jAAP1nAAAAAAEGwACNg4GMl5mXrJgGAAAjAWqXmmADwAD9UQIAAAEDl7SYBgAAAAAAAABgA8AA/esBPgFKl70BJJgCBSfAAF0dFpfaFpfVLoC9wACNf4PRwACVIyev1xyX7RaX5y6AlsAAjYGv1gAAAADAAGDzJ4MhAABHyjgAR8qoAAAAAQLAAI2GgYyYC5gamFgHwABdHgAAAWABwAD9UQAAAAEFwACNigAAAAAEAAADAAAAAAAAAAAAYAPAAI2GAT8BCQEAwAD9ZwAAAAABBsAAjYiBjJgtmD2YVgECwABcaQAAAAEDmFaYVgAAAAAAAABdA8AA/KkBYAPAAI3TAAAAR8r/AEfLMAAAAAECwACNi4GMmFuYYZp8A4R2AAABYAHAAP1RAAFgAcAAjYYFBMAAjY2BjJkfmSYJliYAYAO8sgAEwACNjoGMmTiZOwmArABgA8AA/esABMAAjY+BjJlYmV8JwABcZABdA8AA/KkBYAPAAI4YAATAAI2QgYyZdZl8CYSDAF0DwAD8qQFgA8AAjaQABMAAjZGBjJmfmbgJwABcaQFqmYJgA8AA/VECXQPAAPypAWADwACN0wABBcAAjZWBjJm9mb2aHgAAAAOZxJoeAAAABQUFmcoAAASWJmADvLIAmdgAAASArGADwAD96wCZ4gAABMAAXGRdA8AA/KkBYAPAAI4YAJnwAAAEhINdA8AA/KkBYAPAAI2kAJoEAAAEwABcaV0DwAD8qQFgA8AAjdMAAGADwACNiwE/BggBwACNjYAAwEfMCggBwACNjoEAwEfMFggBwACNj4IAwEfMJAgBwACNkIMAwEfMOwgBwACNkYQAwEfMUAkBmb3AAP1nAAAAAAEGwACNk4GMmiOaNpp6AAAjAWqaJGADwAD9UQIAAAEDmj6aegAAAAAAAABgA8AA/esBPgFKmkcBJJp2BSfAAF0fFppdLoCswACNjifAAF0gFppsLpYmwACNjSeDIQAAR8y6AEfNFgAAAAECwACNloGMmn+ahZ15A8AAQo0AAAFgAcAA/VEAAAgEwACNmIGMmyubMgmWJgBgA7zlAATAAI2ZgYybRZtJCYC9AGADwACVHAAEwACNmoGMm1ubZQnAAEfZAGADwACVHAAEwACNm4GMnAScCgnAAFGlAGADwACNVQAEwACNnIGMnCKcJgmCkwBgA8AAlRIABMAAjZ2BjJw1nDwJhBsAYAPAAPo/AATAAI2egYycS5xRCcAATUkAYAPAAPo/AATAAI2fgYycYJx3CcAAXFIAYAPAAPo/AAEFwACNo4GMnHycfJ0RAAAAA5yHnREAAAAIBQWcjQAABJYmYAO85QCcmwAABIC9YAPAAJUcAJymAAAEwABH2WADwACVHACctwAABMAAUaVgA8AAjVUAnMQAAASCk2ADwACVEgADnNYAAASEG2ADwAD6PwFqAGADwAD9Dnmc5AAABMAATUlgA8AA+j8BagBgA8AA/Q55nPEAAATAAFxSYAPAAPo/AWqdCmADwAD6PwBgA8AAjZYBPwkIAcAAjZiAAMBHzhMIAcAAjZmBAMBHzh8IAcAAjZqCAMBHzi0IAcAAjZuDAMBHzj0IAcAAjZyEAMBHzk0IAcAAjZ2FAMBHzlwIAcAAjZ6GAMBHznMIAcAAjZ+HAMBHzowJAZx8wAD9ZwAAAAABBsAAjaGBjJ0WnSmddwAAIwFqnRdgA8AA/VECAAABA50xnXcAAAAAAAAAYAPAAP3rAT4BSp06ASSdcwUnwABdIRadWhadVS6AvcAAjZmD0cAAlSMnwABdIBadaS6WJsAAjZgngyEAAEfPHABHz4EAAAABAsAAjaSBjJ18nYKo7AOE0AAAAWABwAD9UQABYAHAAI2GGQTAAI2mgYyePJ5DCZYmAGADvMEABMAAjaeBjJ5WnloJgL0AYAPAAJUcAATAAI2ogYyea55xCcAAUaUAYAPAAI1VAATAAI2qgYyee56GGMAAXSLAAI0/AGADwACNpAErBMAAjauBjJ6QnpsYwABdI8AAjT8AYAPAAI2kASsEwACNrIGMnrKeuQnAAEhsAF0DwAD8qQFgA8AAjesABMAAja2BjJ7PntUJhIUAXQPAAPypAWADwACN0wAEwACNroGMnvCe+Am7mQBdA8AA/KkBYAPAAI4MAATAAI2vgYyfDp8fCcAAXSQAYAPAAHdPAATAAI2wgYyfOp9ICcAAXIEAXQPAAPypAWADwACODAAEwACNsYGMn6efsAnAAFxXAF0DwAD8qQFgA8AAjgwABMAAjbKBjKAToCQJwABcdwBdA8AA/KkBYAPAAI4MAATAAI2zgYygRqBfCcAAXGkBaqApYAPAAP1RAl0DwAD8qQFgA8AAjdMABMAAjbSBjKBuoHkJwABcbgBgA8AA+j8ABMAAjbWBjKC/oMkJwABcbABgA8AA+j8ABMAAjbaBjKDYoO4Ju8wAYAPAAPo/AATAAI23gYyg/aEFCYZOAGADwAD6PwAEwACNuIGMoRShJgnAAFxvAGADwAD6PwAEwACNuYGMod+h7QnAAFyIAGADwAD6PwAEwACNuoGMof2iFAmzFgBgA8AA+j8ABMAAjbuBjKLDotQJwABchwBgA8AAlRIABMAAjbyBjKMRoyAYwABNRABgA8AA+j8BKgTAAI29gYyjbaN7GMAAXSUAXQPAAPypAWADwAD96wErBMAAjb6BjKPMo90YwABdJgBdA8AA/KkBYAPAAP3rASsEwACNv4GMpDGkQRjAAF0nAF0DwAD8qQFgA8AAjaQBKwEFwACNy4GMpEakRqbXAAAAA6RLptcAAAATDAykWAAABJYmYAO8wQCkbAAABIC9YAPAAJUcAKR9AAAEwABRpWADwACNVQCkkAAABMAASGxdA8AA/KkBYAPAAI3rAKSkAAAEhIVdA8AA/KkBYAPAAI3TAKS3AAAEwABcaV0DwAD8qQFgA8AAjdMApN0AAATAAFxXXQPAAPypAWADwACODACk8wAABMAAXHddA8AA/KkBYAPAAI4MAKURAAAEwABcgV0DwAD8qQFgA8AAjgwApSwAAAS7mV0DwAD8qQFgA8AAjgwApUEAAATAAF0kYAPAAHdPAKVfAAAEwABch2ADwACVEgAHpX4AAATAAFxuYAPAAPo/AWoAYAPAAP0OeaWWAAAEwABcbGADwAD6PwFqAGADwAD9DnmlrQAABLvMYAPAAPo/AWoAYAPAAP0OeaXQAAAEhk5gA8AA+j8BagBgA8AA/Q55peUAAATAAFxvYAPAAPo/AWoAYAPAAP0OeaYEAAAEwABciGADwAD6PwFqphVgA8AA+j8ApicAAASzFmADwAD6PwFqAGADwAD9DnlgA8AAjaQBPgRAIRymWRamTi7AAFxswACNtUgBAAErAMAA/V6mTqZgAEAhHKaFFqZuLrvMwACNtkgBAAErAMAA/V6mbqaMAEAhHKajFqaaLoZOwACNt0gBAAErAMAA/V6mmqaqAEAhHKbLFqa4LsAAXG/AAI24SAEAASsAwAD9Xqa4ptIAFAgBwACNpoAAwEfScggBwACNp4EAwEfSfggBwACNqIIAwEfSjAgBwACNrIMAwEfSnAgBwACNrYQAwEfSswgBwACNs4UAwEfSyAgBwACNsYYAwEfS3wgBwACNsocAwEfS9ggBwACNsBQAwEfTDQgACAHAAI2uFADAR9MkCQAIAcAAja8UAMBH0zkKAAgBwACNuxQAwEfTSQsACAHAAI20FADAR9NaDAAIAcAAjbUUAMBH03MNAAgBwACNthQAwEfTjA4ACAHAAI23FADAR9OjDwAIAcAAjbgUAMBH07oQAAgBwACNuRQAwEfT0xEACAHAAI26FADAR9PtEgAJAaRGwAD9ZwAAAAAIBsAAjcGBjKbcpuWnBgEAwABcIwAAAAEDpv6nBgAAAAAAAABgA8AA+j8BSqcBASoGwACNwoGMpwunFacuAQCE7AAAAAEDpyCnLgAAAAAAAABgA8AAjaQBSqcjARanIy7AAF0iwACNP8AAjaoGwACNx4GMpzOnOKd6AADAAFwhAAAAAQOnRad6AAAAAQEBp0wAAACE7GADwACNpAAAXAE+AT0Xp14uwABdIsAAjT+Ap2zAR9YewACNqgbAAI3DgYynf6eJp6IBAK2gAAAAAQOnlKeiAAAAAAAAAGADwACNpAFKp5cBFqeXLsAAXSPAAI0/wACNqwbAAI3IgYynp6esp+4AAMAAXCUAAAABA6e5p+4AAAABAQGnwAAAAK2gYAPAAI2kAABcAT4BPRen0i7AAF0jwACNP4Cn4MBH1qfAAI2rBsAAjcSBjKfzp/+oPAEAwABdKAAAAAEDqA6oPAAAAAAAAABgA8AAlRwBSqgRASMcqBwWqBEuhOzAAI3CSAEAASsAwAD9XisWqDgWqC0uhOzAAI3CgL3AAI2nAWADwACVHAbAAI3FgYyoQahJqJoBAMAAXSkAAAABA6hfqJoAAAAAAAAAYAPAAPwFAUqoaAEjHKh0FqhpLoTswACNwkgBAAErAMAA/V6TFqiVFqiOFqiDLoTswACNwsAAUaXAAI2oJ8AAjVgBYAPAAPwFBsAAjcmBjKifqLKo6gAAIwFqqKBgA8AA/VECAAABA6i6qOoAAAAAAAAAYAPAAP3rAUqowAEkqOoFJ8AAXSoWqNMWqM4ugL3AAI2ng9HAAJUjJ8AAXSAWqOEulibAAI2mJ4MhAABH1ZEAR9XAAEfV/ABH1kkAR9aFAEfW0gBH1zMAR9eeAEfYAQAAAAgCwACNzIGMqO+o9a2cA8AAXSsAAAFgAcAAjaQAAAABBcAAjdKBjKkYqRitEAAAAAOpKK0QAAAADQoKqTwAAACWJmADvMEAqVMAAACAvWADwACVHACpZgAAAMAAUaVgA8AAjVUAqYAAAADAAFx8XQPAAPypAWADwACN0wCpogAAAMAAXGldA8AA/KkBYAPAAI3TAKnUAAAAwABcV10DwAD8qQFgA8AAjgwAqfYAAADAAFyBXQPAAPypAWADwACODACqHQAAALuZXQPAAPypAWADwACODACqOQAAAMAAXSRgA8AAd08AqmAAAADAAFyHYAPAAJUSAAOqfwAAAMAAXG5gA8AA+j8BagBgA8AA/Q55qpcAAADAAFxsYAPAAPo/AWoAYAPAAP0OeaquAAAAu8xgA8AA+j8BagBgA8AA/Q55YAPAAI3MAT8BCQCqz8AAjcsSAAyAquLAR9hkgar3wEfYcIKrCcBH2H5qqx1dA8AA/KkBYAPAAI3rwAFpU4OrO8BH2I6Eq1fAR9ilhat+wEfYvGqrlV0DwAD8qQFgA8AAjgzAAWlbhqu3wEfY04er08BH2OoUq+nAR9j/CAAUrAjAR9kPCQAGwABcbhSsNMBH2SAKAMAAXGwUrFnAR9k5CwC7zBSsicBH2VIMAIZOKsAAXG8qsxYqAgbAAI3OgYytFa0qrUoBAMAAXCMBaq0WYAPAAP1RAgAAAQOtQ61KAAAAAAAAAGADwAD6PwFKrUYBKQbAAI3QgYytT61irZoAACMBaq1QYAPAAP1RAgAAAQOtaq2aAAAAAAAAAGADwAD96wFKrXABJK2aBSfAAF0sFq2DFq1+LoC9wACNp4PRwACVIyfAAF0gFq2RLpYmwACNpieDIQAAR9ohAEfaWgBH2r0AAAACAsAAjdOBjK4Wrhy0lQOFBgAAAWABwAD9UQAACQTAAI3VgYyuvK7DCZYmAGADvOUABMAAjdaBjK7WrtoJgL0AYAPAAJUcAATAAI3XgYyu7K74CcAAXAUAYAPAAJUcAATAAI3YgYyvxq/RCcAAXKMAYAPAAPwFAATAAI3ZgYywtbDACcAAXKQAYAPAAPwFAATAAI3agYyw0LDiCcAAXAgAYAPAAPo/AATAAI3bgYyw+7ERCcAAXKUAYAPAAGDSAATAAI3cgYyxKrE3CcAATRsAYAPAAGDSAATAAI3dgYyxR7FPCcAASGsAYAPAAPo/AAEFwACN6oGMsYGxgbJmAAAAA7GGsmYAAAAJCQmxkwAABJYmYAO85QCxpwAABIC9YAPAAJUcALG4AAAEwABcBWADwACVHACx0QAABMAAXKNgA8AA/AUAsekAAATAAFykYAPAAPwFALIBAAAEwABcCGADwAD6PwCyIAAABMAAXKVgA8AAYNIAskMAAATAAE0bYAPAAGDSALJdAAAEwABIa2ADwAD6PwAAYAPAAI3TAT8KCAHAAI3VgADAR9vYCAHAAI3WgQDAR9vkCAHAAI3XggDAR9vyCAHAAI3YgwDAR9wCCAHAAI3ZhADAR9wSCAHAAI3ahQDAR9wiCAHAAI3bhgDAR9wyCAHAAI3chwDAR9xCCAHAAI3dFADAR9xSCAAJAbGBwAD9ZwAAAAAJBsAAjd+BjLJrsnSykwEAwABcBgAAAAEDsoCykwAAAAAAAABgA8AA+j8BSrKDASEcso8WsoMuwABco8AAjdhIAQABkwDAAP0oBsAAjeCBjLKXsqCyyAEAwABcgwAAAAEDsrWyyAAAAAAAAABgA8AA+j8BSrK4ASEcssQWsrguwABcpMAAjdlIAQABkwDAAP0oBsAAjeGBjLLNstay/wEAwABdLQAAAAEDsu2y/wAAAAAAAABgA8AA+j8BSrLwARyy/Bay8C7AAFyjwACN2ICXAQABlADAAP00BsAAjeKBjLMDswyzNQEAwABdLgAAAAEDsyOzNQAAAAAAAABgA8AA+j8BSrMmARyzMhazJi7AAFykwACN2YCXAQABlADAAP00BsAAjeOBjLM6s0OzdwEAwABdLwAAAAEDs2SzdwAAAAAAAABgA8AA+j8BSrNnARyzcxazZy7AAFyjwACN2EgBAAGVAMAA/SgGwACN5IGMs3uzhLO4AQDAAF0wAAAAAQOzpbO4AAAAAAAAAGADwAD6PwFKs6gBHLO0FrOoLsAAXKTAAI3ZSAEAAZUAwAD9KAbAAI3lgYyzvbPGs/YBAMAAXTEAAAABA7Pjs/YAAAAAAAAAYAPAAPo/AUqz5gEcs/IWs+YuwABco8AAjdhIAQABlgDAAP0oBsAAjeaBjLP6tAO0MwEAwABdMgAAAAEDtCC0MwAAAAAAAABgA8AA+j8BSrQjARy0Lxa0Iy7AAFykwACN2UgBAAGWAMAA/SgGwACN6IGMtDi0S7STAAAjAWq0OWADwAD9UQIAAAEDtFO0kwAAAAAAAABgA8AA/esBPgFKtFwBJLSPBSfAAF0zFrR2FrRxLoC9wACN1oPRwACVIyfAAF0gFrSFLpYmwACN1SeDIQAAR9znAEfdLwBH3XcAR92/AEfeBwBH3k4AR96VAEfe3ABH3yMAR9+IAAAACQLAAI3rgYy0mLSntoEHhT8AAAFgAcAA/VEAAAMEwACN7YGMtUm1UAmWJgBgA7zTAATAAI3ugYy2MLY0CYC9AGADwACVHAAEwACN74GMtky2UAmCkwBgA8AAlRIAAQXAAI3xgYy2VbZVtn8AAAADtlu2fwAAAAMDA7ZhAAAEliZgA7zTALZvAAAEgL1gA8AAlRwAtnoAAASCk2ADwACVEgAAYAPAAI3rAT8ECAHAAI3tgADAR+AtCAHAAI3ugQDAR+A5CAHAAI3vggDAR+BHCQG2VcAA/WcAAAAAAAAAR+CQAAAAAALAAI3ygYy2zLbbvUEHwABdNAAAAWABwACN6wAACQTAAI30gYy3BLcQCcAAXJcAYAPAAPo/AATAAI31gYy3IrctCcAAXI4AYAPAAJUcAATAAI32gYy3UbdfCcAAXTUAXQPAAPypAWADwACOEQAEwACN94GMt263egnAAFyRAGADwAD6PwAEwACN+IGMt4i3kgnAAFyVAGADwAD8BQAEwACN+YGMuLS4wAmFOwBgA8AAlRIABMAAjfqBjLmrucEJhR8AYAPAAPwFAATAAI37gYy53Ln6CcAAXIwAWwAEwACN/IGMusm60QmgbQBgA8AAlRwAAQXAAI4AgYy61rrWvSkAAAADuuC9KQAAAAwFBbrwAAAAliZgA7zoALsBAAAAgL1gA8AAlRwAuxUAAACCk2ADwACVEgC7JgAABMAAXTVdA8AA/KkBYAPAAI4RALs7AAAEoG1gA8AAlRwAB7tRAAAEwABcl2ADwAD6PwFqAGADwAD9Dnm7agAABMAAXI5gA8AAlRwBagBgA8AA/Q55u4IAAATAAFyRYAPAAPo/AWoAYAPAAP0OebubAAAEhR9gA8AA/AUBagBgA8AA/Q55u74AAATAAFyMWwFqAGADwAD9Dnm76QAABIU7YAPAAJUSAWoAYAPAAP0OebwCAAAEwABclWADwAD8BQFqAGADwAD9DnlgA8AAjfIBPgRAIRy8TBa8Py7AAFyXwACN9EgBAAErAMAA/V68P7xTAEAiIRa8Yi7AAFyXwACN9AEhHLx+FrxyLsAAXI7AAI31SAEAASsAwAD9XrxhvIUAQCEcvKAWvJMuwABckcAAjfdIAQABKwDAAP1evJO8pwBAIiEWvLYuwABckcAAjfcBIiEcvOYWvM8uhR/AAI36SAEAASsAwAD9KAAhHL0cFrz9LsAAXIzAAI37SAEAASsAwAD9Xry1vSQACggBwACN9oMAwEfhzwgBwACN/IQAwEfh5ggBwACN9IUAwEfh9QgBwACN9YYAwEfiDggBwACN94cAwEfiJwgBwACN+hQAwEfiQAgACAHAAI37FADAR+JXCQAIAcAAjfkUAMBH4msKAAgBwACN+BQAwEfiggsACQC8F8AAjfEDAAOAvB3AR+GngbwmwEfhs4K8LMBH4cEAAQbAAI3+gYy9Lr03vT8BAoQZAAAAAQO9P70/AAAAAAAAAGADwAD6PwAAAEfj8wBH5BsAAAABAsAAjgGBjL1EvUrAAERfA8AAXTYAAAFgAcAAjfIAAAMEwACOA4GMvnm+ggnAAFySAGADwACVHAAEwACOBIGMv02/YAnAAFyPAGADwAD6PwAEwACOBYGMv7q/xwm52ABgA8AA+j8AAQXAAI4LgYzAAEAxwABAMcAAQ6AAAAADwABAP8AAQ6AAAAAPBQXAAEBPAAAAliZgA7zoAMAAQGAAAACAvWADwACVHADAAEB0AAAAgpNgA8AAlRIAwABAmgAAAMAAXTVdA8AA/KkBYAPAAI4RAMAAQLIAAACgbWADwACVHAAKwABAyAAAAMAAXJdgA8AA+j8BagBgA8AA/Q55wABA5AAAAMAAXI5gA8AAlRwBagBgA8AA/Q55wABA/AAABMAAXJJgA8AAlRwBagBgA8AA/Q55wABBEgAAAMAAXJFgA8AA+j8BagBgA8AA/Q55wABBKgAAAIUfYAPAAPwFAWoAYAPAAP0OecAAQVkAAADAAFyMWwFqAGADwAD9DnnAAEGEAAAEwABcj2ADwAD6PwFqAGADwAD9DnnAAEGkAAAEudhgA8AA+j8BagBgA8AA/Q55wABBxwAAAIU7YAPAAJUSAWoAYAPAAP0OecAAQd8AAADAAFyVYAPAAPwFAWoAYAPAAP0OeWADwACOAQE+AUAhHMAAQ5QWwABDgC7AAFyPwACOBEgBAAErAMAA/V7AAEOAwABDmwAECAHAAI4DhwDAR+VCCAHAAI4EFADAR+WnCwAIAcAAjgUUAMBH5cIMAAkAwABB9MAAjgAMAAWAwABB+sBH5LSBwABCA8BH5MKCwABCCcBH5NKDwABCD8BH5OKEwABCH8BH5PsHwABcl4XAAEJDwEflDMAAXI6GwABCasBH5SfAAFyRFMAAQpHAR+VdCACFHxTAAELDwEfleAkAwABcjBTAAEMHwEflkQoAhTsUwABDQcBH5dsNAMAAXJUUwABDZ8BH5fQOAAIGwACOB4GMwABDpcAAQ7rAAEPLAQCEGQFqwABDpmADwAD9UQIAAAEDwABDw8AAQ8sAAAAAAAAAYAPAAPo/AUrAAEPGASoGwACOCYGMwABD0MAAQ+PAAERdAAAjAWrAAEPRYAPAAP1RAgAAAQPAAEPrwABEXQAAAAAAAABgA8AA/esBPgFKwABD9AEkAAcnwABdNxbAAEQXFsAARBIugL3AAI3ug9HAAJUjJ8AAXSAWwABEJi6WJsAAje0nwABdOB7AAERBwACZ2wEAARbAAERRLoKTwACN7wAngyEAAEfnBgBH50sAR+fhAAAAAgLAAI4MgYzAAEVKwABFUMAARmUDwABdOQAAAWABwACN6wAAAAEFwACOEIGMwABFbsAARW7AAEXVAAAAA8AARXjAAEXVAAAAAwICwABFgQAAAIC9YAPAAJUcAMAARZUAAACCk2ADwACVEgABwABFqQAAAJYmYAO80wFqAGADwAD9DnlgA8AAjgwBPwEJAMAARbvAAI3xAwADgsAARcHAR+hdgMAARcrAR+g8gcAARdDAR+hMAAEGwACODoGMwABF2sAARe3AAEZjAAAjAWrAAEXbYAPAAP1RAgAAAQPAAEX1wABGYwAAAAAAAABgA8AA/esBPgFKwABF/gEkAAcnwABdOhbAAEYdFsAARhgugL3AAI3ug9HAAJUjJ8AAXSAWwABGLC6WJsAAje0nwABdOB7AAEZHwACZ2wEAARbAAEZXLoKTwACN7wAngyEAAEfopwBH6T0AAAABAsAAjhGBjMAAR6DAAEemwABKawPAAF07AAABYAHAAI4MAAABBMAAjhOBjMAASQ/AAEkXGKBtAGADwACVHAABBcAAjheBjMAASRzAAEkcwABJqgAAAAPAAEkvwABJqgAAAAQDA8AASTgAAACAvWADwACVHADAAElDAAAEoG1gA8AAlRwAwABJWwAAAIKTYAPAAJUSAAHAAEl1AAAAliZgA7zTAWoAYAPAAP0OeWADwACOEQE/AggBwACOE4EAwEfpvgkAwABJh8AAjhADAAKAwABJjcBH6a6CwABJk8BH6c4BliaDwABJosBH6d8BBsAAjhWBjMAASa/AAEnCwABKaQAAIwFqwABJsGADwAD9UQIAAAEDwABJysAASmkAAAAAAAAAYAPAAP3rAT4BSsAASdMBJAAJJ8AAXTwWwABJ+xbAAEn2LoC9wACN7oPRwACVIyfAAF09NQAAAAEAYAPAAJUcARbAAEoMLqBtwACOEyMcwABKFoAAwEfqoUgBAAErAAArFsAAShaAAMBH6qGD0cAAlSMBYAPAAP3rJ7noFsAASjEulibAAI3tJ8AAXT4ewABKTcAAmdsBAAEWwABKXS6Ck8AAje8AJ4MhAABH6jcAR+sVAAAAAQLAAI4YgYzAAEpuwABKfcAASrMHwABCiwAAAWABwAD9UQABYAHAAI3rAAEFwACOHAAAAAAEAAADAAAAAAAAAAAAYAPAAI4YAT8BCQEAwAD9ZwAAAAABBsAAjhqBjMAASqDAAEqrwABKsQECwABRpQAAAAEDwABKscAASrEAAAAAAAAAYAPAAI1VAAAAR+t4AEfrrAAAAAECwACOHYGMwABKtsAASrzAAE7/A8AAXT8AAAFgAcAAjfIAAWABwACOGAEEwACOH4GMwABLFcAASxsJwABRpQFqwABK/WADwAD9UQJgA8AAjVUAAQXAAI4lgYzAAEsgwABLIMAATj8AAAADwABLMMAATj8AAAANBgbAAEtHAAAAliZgA7zoAMAAS14AAACAvWADwACVHADAAEtvAAAEwABRpWADwACNVQDAAEuLAAAAgpNgA8AAlRIAwABLsQAAAMAAXTVdA8AA/KkBYAPAAI4RAMAAS88AAACgbWADwACVHAAHwABL5QAAAMAAXJdgA8AA+j8BagBgA8AA/Q55wABMAQAAAMAAXI5gA8AAlRwBagBgA8AA/Q55wABMGQAAAMAAXJFgA8AA+j8BagBgA8AA/Q55wABMMQAAAIUfYAPAAPwFAWoAYAPAAP0OecAATGAAAADAAFyMWwFqAGADwAD9DnnAAEyUAAAAhTtgA8AAlRIBagBgA8AA/Q55wABMrAAAAMAAXJVgA8AA/AUBagBgA8AA/Q55YAPAAI4dAT8CCAHAAI4fggDAR+xPCQDAAEzBwACOAAwABYDAAEzHwEfsMYHAAEzQwEfsP4PAAEzWwEfsYYTAAEzcwEfscYXAAEzswEfsigfAAFyXhsAATRDAR+ybwABcjofAAE03wEfstsAAXJEUwABNXsBH7NEIAIUfFMAATZDAR+zsCQDAAFyMFMAATdTAR+0FCgCFOxTAAE4OwEftGwsAwABclRTAAE40wEftNAwAAgbAAI4hgYzAAE5EwABOWcAATmkBAIQZAWrAAE5FYAPAAP1RAgAAAQPAAE5iwABOaQAAAAAAAABgA8AA+j8BSsAATmUBKQbAAI4jgYzAAE5uwABOgcAATv0AACMBasAATm9gA8AA/VECAAABA8AATonAAE79AAAAAAAAAGADwAD96wE+AUrAAE6SASQAByfAAF1AFsAATrcWwABOsi6AvcAAje6D0cAAlSMnwABdIBbAAE7GLpYmwACN7SfAAF04HsAATuHAAJnbAQABFsAATvEugpPAAI3vACeDIQAAR+4BAEfuRgBH7twAAAACAsAAjiaBjMAATwLAAE8IwABQVQPAAF1BAAABYAHAAI4MAAFgAcAAjhgBBMAAjiiBjMAAT1vAAE9hGMAAUaUBasAAT0lgA8AA/VECYAPAAI1VAAEFwACOLIGMwABPZcAAT2XAAE++AAAAA8AAT3XAAE++AAAAAwMDwABPfgAAAIC9YAPAAJUcAMAAT4kAAATAAFGlYAPAAI1VAMAAT58AAACCk2ADwACVEgAAYAPAAI4mAT8CCAHAAI4ogQDAR+91CQDAAE+twACOEAIAAoDAAE+zwEfvZYLAAE+5wEfvhwABBsAAjiqBjMAAT8PAAE/WwABQUwAAIwFqwABPxGADwAD9UQIAAAEDwABP3sAAUFMAAAAAAAAAYAPAAP3rAT4BSsAAT+cBJAAIJ8AAXUIWwABQDBbAAFAHLoC9wACN7oPRwACVIyfAAF0gFsAAUBsulibAAI3tJ4bGJ8AAXTgewABQN8AAmdsBAAEWwABQRy6Ck8AAje8AJ4MhAABH784AR/BnAAAAAQAAAYGMAEfwdgBHve0AR8KJAEfEDgBHxfYAR8efAEfJVQBHyrUAR8s9AEfNIwBHz44AR9gqAEfazgBH37UAR+CZAEfkKABH5/IAR+lKAEfrIgBH67kAR+7tAEfwdAAAABQAR/B2AAAAAAACBMAAji3AAF1DgY0AAAyBBgAApDYAAIEfAAC4SwABAQKx2rMSgWsAAMAAYmEAAQEChmyGfYGoAAC8rAAAgcwAAMAAY5C0HQCB7QAAwABjkAABAQGCgYINAADAAHoDAACCOwAAwABqRAAAgmQAAMAAem8AAQEBwABTX4KgAADAAE0nAAEBAaSqgssAAMAAXLcAAQEBt5eDAQAAwACNPwAAAAAAAQLAAI4ugY2DF4MdtfIDwABDzQAAAWABwAD9UQAABwTAAI4xgY2DRYNRCbeewACOLQBgA8AAXLgABMAAjjKBjYNog3QJtarAAI4tAGADwABNKwAEwACOM4GNg5SDqgm3m8AAji0AYAPAAHqhAATAAI40gY2D6oQCGMAAXUQAYAPAAPo/ASoEwACONYGNhF6EkRibSgBdA8AA/NoCYAO8wV0DwAD8qQFgA7zBATKEj2ADvMFdA8AA/KkBYAO8wQAEwACONoGNhPSFLRjAAFNjAF0DwAD82gJgA7zBXQPAAPypAWADvMEBMoUrYAO8wV0DwAD8qQFgA7zBAATAAI43gY2Fd4WgGKiMAF0DwAD9nAFgA7zoAR6Fi8AAwRcAAWADvOgAAAEFwACOR4GNhaWFpYX8AAAAA4WyhfwAAAADAwOFvwAABLeeYAPAAFy4AIXSAAAEtapgA8AATSsAheUAAAS3m2ADwAB6oQAAYAPAAI4uAT8ECAHAAI4xgADAR/LBCAHAAI4ygQDAR/LPCAHAAI4zggDAR/LdCQGFpcAA/WcAAAAACwbAAI46gY2GAYYVhkMBALQEwACOLQAAAAEDhiWGQwAAAAAAAABgA7k/AUqGKAEWhjUWhigutarAAI4twACOMrNAwABNMwbAAI47gY2GR4ZfhpsBAK9UwACOLQAAAAEDhnOGmwAAAAAAAABgA7skAUqGfAEWhokWhnwutarAAI4twACOMqT4wABNMQbAAI48gY2Gn4auhtQBAMAAR93AAI4tAAAAAQOGuobUAAAAAAAAAGADwABqVgFKhr0BFobKFoa9LrWqwACOLcAAjjK3tMAATS8GwACOPYGNhtiG7IccAQDAAFM5wACOLQAAAAEDhv2HHAAAAAAAAABgA8AAegQBSocAARaHDRaHAC61qsAAji3AAI4yt7jAAE0wBsAAjj+BjYzgjOughQAAwABcKQAAAAEDjP+ghQAAAAMDA40TAAAAhINdA8AA/KkBYAPAAI2kAI0zAAAAwABcJ10DwAD9nAFgA7zBAI10AAAAwABdRV0DwAD8ZwFgA7zBAABdA8AA/ZwBYAPAAI2kAT4TQByNnoCNlsBH9GSWNgEAATSNpAONpI2+AAAAAQEBjasAAACZymADwACNpAAAYAPAAPo/AUqNswEhHI23g42zwEf00kgBAAErAMAA/V4AwAD8eo2Wjb8APReNxy7AAF1EFo3igI3awEf0ZIOywAD8jMAAjjROjrSOvQAAwABdRl0DwAD8qQFgA8AAjaQBMY7GYAPAAI2kAE6O2Y7eAACpGl0DwAD9nAFgA8AAjaQBHo7kwADBFwABYAPAAI2kAABOjv2PCQAAmsxgA8AAjaQBK06PG48uAACxSmADwACNpAErT487j0AAAAHAAF1HYQMBYAPAAI2kXAADj0SQqgAAAAEBAY9LAAAAmcpgA8AAjaQAAFwBPgZJj1gcj2gWj2AUj1zAR/W3CACWJsAAjaZIAQABFo97Fo9rLrQEwACOLcAAjjqazLhOAMAA/V4+Aj2Nj5LAR/V0FI+gwEf1twgASo+tAD9Jj8Mcj9MWj8sUj8fAR/W3CACWJsAAjaZIAQABFo/mFo/WLrQEwACOLcAAjjqxSriaAMAA/V4+Aj2OkATAR/WFFJAZwEf1twgASpAmAD9JkDwckEWEkEDAR/VMgxcBAAEUkE7AR/W3CAAAwAD9qEqQVAA/PRyQZ4SQYsBH9UxWAQABFJBrwEf1twgAAMAA/ak9HJB7h5B3wEf1mCABAAEWkIAUkHzAR/W3CACE7MAAjcIAAD0ckJyDkJPAR/UpVgEAARSQoMBH9bcIAADAAPy6PRyQuYCQscBH9GSD+AEAAYeQwcBH9ZgAwAD8d06RipGYAAC0RF0DwAD9nAFgA8AAjaQBHpGewADBFwABYAPAAI2kAABOkbuRygAAwABdSF0DwAD9nAFgA8AAjaQBHpHQwADBFwABYAPAAI2kAABOkfuSCwAAwABdSV0DwAD82gJgA8AAjaRdA8AA/KkBYAPAAI2kARySDS7AAF1KAQABg5IkwEf1KQDAAI5APRySQhSSNMBH9wUIAFYBAAGFkkbAR/V0AMAA/alGklmSfpJkAAAAmcpgA8AAjaQAFpJ0g5JrwEf1KZiIwAD82T4FTpKSkp8AALJqYAO8wQEWkqUUkqHAR/e1CwCWJsAAjaZOk3GTeAAAwABcsmADwAD6PwEqSZOHIRaTkBSTjMBH97ULAIZOwACNtz4BPRWUgsBH9/YNKUmUniEclKMuwABdSwEAARSUssBH97ULAADAAI5BPgE9FZTCwEf39g0pSZTeHJUGgZTiwEf0eYMXAQABFJUPwEf31gwAAMAA/ag+AT0VlSjAR/f2DSlJlUQclVyClUjAR/SOgxcBAAEUlWXAR/fWDAAAwAD8dj4BPRWVfsBH9/YNKUmVmhyVrhSVnsBH91cKAIdHAQABFJW6wEf3tQsAAMAA/O0+AT0VlcrAR/f2DSk/SZXnHJX3FpXrLsAAR93AAI4twACOPLL0AQABFJYIwEf31gwAAMAAalI+AT0VliHAR/f2DSlJlnEiFpZ5FJZ1wEf3tQsAhk7AAI23AByWmxaWjy7AAEfdwACOLcAAjjzAAEvAAQABFJa2wEf31gwAAMAAak8+Aj0Vls/AR/f2DSk9HJb1FJbmwEf3LQkAVgEAARSW+cBH97ULAADAAP2pP0mXDiIUlxLAR/f2DQABHJcqFJccwEf3BQgAgxcBAAEUlzPAR/e1CwAAwAD9qD4DPRyXURSXQ8BH9wUIAFYBAAEUl1XAR/e1CwAAwAD9qT0cl3EUl2PAR/cFCABWAQABFpd5FJd1wEf3tQsAhOzAAI3CAMAA/ak9HJedFJeOwEf3LQkAVgEAARaXpRSXocBH97ULAITswACNwgDAAP2pP06YGZgiAADAAF1MXQPAAPzaAmADwACNpF0DwAD9nAFgA8AA/esBHpgowAD84QACYAPAAI2kXQPAAP2cAWADwAD96wAATphfmGsAAMAAXU1dA8AA/NoCYAPAAI2kXQPAAP2cAWADwAD96wEemHHAAPzhAAJgA8AAjaRdA8AA/ZwBYAPAAP3rAABGmJEAmJwAAACZymADwACNpACAmKPAR/RkQT4FSZi0IRaYvRSYucBH+qUNAIZOwACNt0KYxwA/TpjjmOsAAJYmYAO8wQEWmPEUmO3AR/qlDQCWJsAAjaZJmQAcmRAWmQQuwABH3cAAji3AAI48svQBAAEUmSHAR/rZDgAAwABqUkKZKwA/TplImVMAAMAAXU5dA8AA/KkBYAPAAP3rARyZYRaZVS7AAEfdwACOLcAAjjzAAEu/AQABFpl6FJl2wEf6pQ0AlibAAI2mAMAAak5JmYsiHJmeFJmPwEf3LQkAgxcBAAEUmafAR/qlDQAAwAD9qAEcmb8Uma/AR/dXCgCHRwEAARSZy8BH+qUNAADAAPztPgE9HJorHJn0FJnbwEf6XgwAmR0CAAIUmgDAR/qlDQA0mgUDmgWaHAAAAAAAAABdA8AA/ZwBYAPAAP3rAUqaCwEemg/AAMEXAAFgA8AA/esAAADAAPz1gKUBAAEUmjLAR/snDwAAwAD9qj4ETppcmnEAAMAAXU9gA8AAjaQBFJpzwEf6pQ0AQ5qAIRyalhSaiMBH9wUIAIMXAQABFJqfwEf8IBAAAMAA/ag+AT0VmsLAR/wgEBaa7hSa2cBH/CAQAITswACNwkmbDBybJRSbEMBH/CAQAEgBAAGFmyjAR/V0AMAA/V4+AT0Vm0HAR/wgEIabWMBH9YU/PRyb3ByblBSbfsBH+hoLAJkdAgACFJugwEf8IBAANJu2A5u2m80AAAAAAAAAXQPAAP2cAWADwAD96wFKm7wBHpvAwADBFwABYAPAAP3rAAAAwAD89YClAQABFJvjwEf7Jw8AAMAA/apPnAOcCAAAAcAAXVBhAwFgA8AAjaRcAAOcFp3BAAAAAQEBnB0AAACZymADwACNpAAAXAE+BEAiIhycRBacNRScMcBH/TYOAMAAXSXAAI29SAEAASsAwAD9XgAcnG8WnF0UnFnAR/02DgDAAF0mwACNvkgBAAErAMAA/V4AHJyZFpyIFJyEwEf9Ng4AwABdJ8AAjb9IAQABKwDAAP1enDGcoABJnKkhHJy7HJy1FJytwEf6GgsASwEAARSctsBH/TYOAADAAPzuSAEAASsAwAD9Xj4BPRec0hSczsBH/TYOAMAAXSUcnPEcnOsUnOPAR/oaCwBLAQABFJzswEf9Ng4AAMAA/O6ArQEAAAGFXirAAPx9wACNvT9JnRghHJ0tHJ0nFJ0cwEf6XgwASwEAARSdKMBH/TYOAADAAPzuSAEAASsAwAD9Xj4BPRedRBSdQMBH/TYOAMAAXSYcnWkcnWMUnVjAR/peDABLAQABFJ1kwEf9Ng4AAMAA/O6ArQEAAAGFXirAAPx9wACNvj89F52UFJ2QwEf9Ng4AwABdJxydthSdp8BH91cKAEsBAAEUnbfAR/02DgAAwAD87sAAjb9JnksWnmYWnk8ut5vAAI4twACOM8AAUx3AAHqFPgI9HJ6aFJ6MwEf9Fw0AIAEAAYaem8BH9YUAAEaetp7RnsEAAACZymADwACNpACAnsjAR/RkPgFJntsiIRae5BSe4MBH/xAOAIZOwACNtwEcnv4UnvDAR/cFCACDFwEAARSfB8BH/xAOAADAAP2oPgE9HJ8nFJ8ZwEf9Fw0AIAEAARSfKMBH/xAOAAAAPz9KoBYBHKB6HKAugKAdwEf0ZIGlAQABNKA0A6A0oG8AAAABAQGgOwAAAJnKYAPAAI2kAABgA8AA+j8BSqBDASIWoEcUoEPAR/+iDgCGTsAAjbcAIRygYhSgVMBH9wUIAIMXAQABFKBrwEf/og4AAMAA/agAwAD8c5UZAAAAAMAA/H4GwACOQIGNoVShbKPkAADAAF1KAAAAAQOhgqPkAAAAAQEBoY8AAACEg10DwAD8qQFgA8AAjaQAAF0DwAD82gJgA8AAjaRdA8AA/KkBYAPAAI2kAT4FT6GeoaQAAAHAAFlnYQMBYAPAAI2kYAPAAI2kAAOhtqJBAAAAAQEBob0AAACZymADwACNpAAAYAPAAI2kAT4DSaHKHKHSgqHOwEgAe0gBAAErAMAA/V5KodsBKz9Joe4WofaCofLASAB7hk7AAI23SqIAAYKiB8BIAHs/SqISARyiK4GiGcBIAFcgAQABFqIwgqIswEgAe4TswACNwgAAT6JIok4AAAHAAF1RYQMBYAPAAI2kYAPAAI2kAAOiXqKhAAAAAQEBomUAAACZymADwACNpAAAYAPAAI2kAT4BSqJyARyii4GiecBIAFcgAQABFqKQg6KMwEgBGoTswACNwgAATqLAosQAAICrXQPAAPzaAmADwACNpF0DwAD8qQFgA8AAjaQBHqLKwAD84QACYAPAAI2kXQPAAPypAWADwACNpAAARqLqAKL1AAAAmcpgA8AAjaQAgKL8wEgAIUE+A0mjDRajFYSjEcBIAZyGTsAAjbdCox8AP06jNaNEAADAAF1SYAPAAI2kARyjVoKjRsBIAPYgAQABhKNXwEgBnAAASaNjIRyjdoWjZ8BIAc1IAQABKwDAAP1ePgE9HKO6HKONg6OJwEgBV5kdAgAChaOZwEgBzTSjqQOjqaO4AAAAAAAAAF0DwAD8qQFgA8AAjaQBSqOvATGjtmADwACNpAAAwAD89VYBAAGEo77ASAGcAMAA/Lo/SqPWAYOj3cBIAVcGwACOQYGNo+mj7qVmAADAAF1LAAAAAQOj/KVmAAAAAQEBpAMAAACZymADwACNpAAAYAPAAPo/AT4CT6QOpBMAAAHAAF1TYQMBYAPAAI3TYAPAAPo/AAOkIKSiAAAAAQEBpCcAAACElGADwACN0wAAYAPAAPo/AT4BSqQ2ASIiFqRDgqQ9wEgC1sAAXAbAAI3fARakYoKkXMBIAtbAAFyDwACN4AEWpIqCpITASALWwABcCMAAjdpKpKkBIiIiIhakvBaktICksMBIApfAAEhswACNrIFVwAD8iwAWpNwWpNOApM/ASAKXu5nAAI2ugVXAAPyLABak/Rak84Ck78BIApfAAFxXwACNsYFVwAD8iwAhFqUgFqUVgKURwEgCl4TswACNwsAAXCPAAI3BACEcpVAWpUmApUXASAKXhIXAAI2tgdQBAAGBpVTASAKyAMAA/HwGwACOQoGNpWulcKmyAADAAF1UAAAAAQOlkqmyAAAAAwMDpakAAACGFl0DwAD8qQFgA8AAk/sApcoAAACCZmADvOgApegAAADAAF1VXQPAAPypAWADwACV8QAAXAE+Ak6mDwAAALGOYAPAAJUSAD0cpjkWpiUur1TAAI4twACOO7MdAgACgaZKwEgD/zSmWgOmWqmtAAAAAwMDpmQAAACCkGADwABiZgCmcQAAAIC9YAPAAP3rAKZ3AAAAgLVgA8AAYNIAAGADwAD9DgE+AUFGpwunQacgAAAAwABdVmADwACV8QCCpzHASAQLPgFJp0scp2IWp12Hp0/ASAScgL3AAJXSSAEAAYWnZcBIBHAAwAD9+j4CPYynd8BIBGIWp4OEp37ASARitAbAAGJoSaeYFqehhKecwEgEYrmcwABibz4FPSMcp9CDp7/ASAQoSAEAASsAwAD9Xounv8BIBCgcp/oWp+EWp9Qut57AAI4twACOMa91wABcxsAAQ+ABAAEWqB8WqA8utATAAI4twACOOrGOuNwAwABc0isBYAPAAJUSTqi3qMQAAIU7YAPAAGL5ASaotwGEqMbASARiYAPAAGL5TqjcqOIAALskYAPAAPwFARapABao8RSo5MBIBWsIALQHwABi/GHAAPzYPRypH4CpFMBIA+pWAQABHKk3aqkjYAPAAJeAwAEfaYVRAgACJKlTAyfAAF1XFKlMwEgFjAkAJ4MhMalVYAPAAP1RA4WpVsBIBHCDqVzASAQohaluwEgEcADAAJeDAMAA/LpCqYMAPz8AuzAGwACOQ4GNqbepzbKcAADAAF1YAAAAAQOp7LKcAAAABgYGqgMAAACCZmADvOgAqhYAAADAAFMfYAPAAPo/AKo8AAAAr4xgA8AAlRwAqmgAAADAAF1VXQPAAPypAWADwACV8QCqlQAAAMAAXVldA8AA/KkBYAPAAJUSAKqwAAAAwABdWmADwAD8BQAAXQPAAPypAWADwACT+wE+Ck6sNKw/AACGFl0DwAD8qQFgA8AAk/sBMaxSYAPAAJP7AD0crFouwABdVAMAA4asfcBIBryArInASAZCg6yRwEgGbADAAI5CTqyuAAAAgkVgA8AA/esATqzLAAAAhX9gA8AAlRIATqzwAAAAW10DwAD8qQFgA8AAlRIAQBytFRatBy6ojMAAjjeDFwEAAYCtHsBIBkIAwAD9qK0HrSUBHq0ntcMBAAGArTDASAZCAD2Prb7ASAcDHK3TFq3HLsAAR93AAI4twACOPMAASA8BAAGArefASAZCAMAAamNJrfWBrfnASAZOPgI9Fa4WwEgHEggcrjCEriHASAaDSwEAAZMAwAD8uD0VrjvASAchCRyuV4SuR8BIBoOBWAIAApQcrpWFrm3ASAaaZAEAAZQAwAD9KgDAAPzMPgNAFq79gK72wEgGQoQZvNeu9q8FAR6vB7XDAQABgK8QwEgGQgA9Fa8gwEgHIQkcrzyEryzASAaDgVgCAAKTHK96ha9SwEgGmmQBAAGUAMAA/SoAwAD8zEmvhhyvlhavii7AAEfdwACOLcAAjjzAAEvDAQABgK+owEgGQgDAAGplPgE9FbFXwEgHEggmsVcBHLHaHLFyarFiYAPAAJeAwAEfacAAVBwBAAEcsaoWsZ4uwABH3cAAji3AAI48wABLyAEAAYCxxMBIBkIAwABqZADAAJeMsN0BAAExseZbAADAAJkrYAPAAJUSPgE9FbICwEgHEggcsg9qsg1gA8AAl4DAAR9pIAEAASeZ+QDAAJeCPRyyP4ayK8BIBrxWAQABHLJGarJDYAPAAJeAwAEfaYVRAgACJ8AAXVsxsmFgA8AA/VEDFLJiwEgHEggAh7JswEgHAxSydMBIByEJAADAAJeDAMAA/LpKsocBhrKOwEgGvAbAAI5EgY2yobKms1kAAMAAXVwAAAABA7K+s1kAAAABAQGyywAAAJYmYAO8wQAAYAPAAPo/AT4CSbLaHLLvFrLeLsAAUznAAI4twACOPcAAUyUBAAGAswvASAmGAMAAehM+AUqzHQEpP0qzNQEhHLNOHLNEFrM8LptKwACONUsBAAGAs0XASAmGAMAA/O5IAQABKwDAAP1eBsAAjkWBjbNes2O18AAAwABdXQAAAAEDs3i18AAAAAEBAbOFAAAAliZgA7zBAABgA8AA+j8BPgNOtXK1dgAAmcpgA7zBAYC1eMBICh5JtYUctZUWtYkuwABH3cAAji3AAI48wABIFgEAAYG1rcBICjUAwABqUEq1swEpP0q1xAEctcsuwABdXAEAAYC15MBICh4AwACORAAAR/MmAEfzawBH87AAR/P5AEf0QgBH//8ASAJ1AEgDyABIBiAASAlkAEgJ/ABICpMAAAALAAABgY0ASArKAEfxggBICsgAAAABAEgKygAAAAAAAgTAAI5IwABdXoGOAAAHgQoAAKQ2AACBIwAAuEsAAIFFAAC8rAAAgWkAAMAAdhoAAQECwABRLcAAUTKBywAAwAB3OwABAQHAAFHJgiEAAID7AACCOwAAwABLnQAAAAAAAQLAAI5JgY6CbYJziXUDwABDzgAAAWABwAD9UQAABATAAI5MgY6CoYK0Ca9UwACOSABgA7r1AATAAI5NgY6DLoM/GMAAXA7AAI5IAF0DwAD9nAFgA7zBASsEwACOToGOg1qDYgmx8sAAjkgAYAOBFAAEwACOT4GOg3qDhBjAAFwLwACOSABgA8AAdiEBKwEFwACOV4GOg4mDiYPCAAAAA4OZg8IAAAACAgKDnwAABLHyYAOBFACDrgAABK9UYAO69QAAYAPAAI5JAT8DCAHAAI5OgADASAvwCAHAAI5MgQDASAv8CQGDicAA/WcAAAAABAbAAI5RgY6Dx4PehJIBAMAAQ9sAAAABA4PohJIAAAAAAAAAYAPAAHYhAT4CQCEchAkWg/4uwABcC8AAjkjAAI5PSAEAASsAwAD9XoP+hBABHoQatcMCAAJqhCNgA7XVwADE6SfAAF1fAEqEfQEWhIQuwABcC8AAjkjAAI5PBsAAjlKBjoSXhLGFeAEAwABD3AAAAAEDhMKFeAAAAAAAAABdA8AA/GcBYAO8wQE+AkAhHITqFoTYLsAAXA7AAI5IwACOTUgBAAErAMAA/V6E2ITxAR6E+7XDAgACaoUEYAO11cAAxOknwABdYABKhVwBFoVjLsAAXA7AAI5IwACOTQbAAI5UgY6FfYWCiKwAAMAAQ9gAAAABA4WZiKwAAAACAgKFtAAAALdgYAPAAHd0AIXjAAAAwABdYV0DwAD8ZwFgA7zTAABcAT4EPReF9i7AAFwOwACOSB6GDsAAwRcAAWADvMEAAMAAjk1PhieGLAAAAcAAXLdhAwFgA7zBXAADhkSHYwAAAAEBAYZRAAAAmcpgA7zBAABcAT4CPRyGcBaGXi7AAFwOwACOSMAAjk1WAQABg4Z0wEgNwADAAP2pRYaAAYaRhpwAAITsYAO8wQEchrIWhp4ur1TAAI5IwACOTLL5AQABg4bAwEgNwAC7CAEhHIbbhIbQwEgN+UgBAAErAMAA/V4BjIbuwEgN+RyHDxaG+y6vVMAAjkjAAI5MsvkBAAGEhx3ASA35ALsIPgE9HIdGFoc0LsAAXA7AAI5IwACOTVYBAAGEh0rASA35AMAA/alPh2qHbwAAAcAAXLhhAwFdA8AA/GcBYAO8wVwAA4eJiAcAAAABAQGHoAAAAISDXQPAAPxnAWADvMEAAFwBPgFGh7GH0ofCAAAAmcpgA7zBAISHycBIDrE+AT0ch/SCh9zASA2jIAEAAYWH9cBIDs4AAD0ciI2DiHPASA6NIAEAARaImBaIji7AAEPbwACOUZvGwAB2JAAABsAAjlWBjoixiLaJcwAAwABD1wAAAAEDiM+JcwAAAAICAojxAAAAt6lgA8AAdjEAiRAAAAClE2ADwABLpAAAXAE+AT0XiSQuwABcC8AAjkgciUKAiTHASA9DwABRMwIAAoGJWMBID1EWiWYusfLAAI5IwACOTgDAAHY1wACOTwAASAw3AEgMtABIDTYASA8hAEgPoAAAAAQAAAGBjgBID7sASAtHAEgPuQAAAAEASA+7AAAAAAACBMAAjlgAgY8AAAGBJwAAvKwAAAAAABACwACOWYGPgUyBW4F0B8AAXWIAAAFgAcAA/VEAAAEEwACOXIGPgWyBchiXHMAAjlgAYAPAAPwFASsBBcAAjl4AAAAABAAAAwAAAAAAAAAAAGADwACOWQE/AQkBAMAA/WcAAAAAAAAASBBUAAAAAALAAI5fgY+Bd4GGglsHwABdYwAAAWABwACOWQABYAG8sgABBcAAjmQAAAAABAAAAwAAAAAAAAAAAGADwACOXwE/AQkBAMAAjl4AAAAAAgbAAI5hgY+CCYIRgicBAKcrAAAAAQOCHoInAAAAAAAAAGADwAD8BQFKgiEBFoIhLpccwACOWMAAjlwGwACOYoGPgiuCP4JZAQCDwQFqgixgA8AA/VECAAABA4JIglkAAAAAAAAAYAPAAPwFAUqCSwEcglYcgk03B4OIAQABFoJPLpccwACOWMAAjlwAwAD9LGQBAAGVAMAA/SoAAEgQqwBIEOUASBFFAAAAAgLAAI5lgY+CXoJtgzoHwABa1QAAAWABwACOWQABYAG8wQABBcAAjmoAAAAABAAAAwAAAAAAAAAAAGADwACOZQE/AQkBAMAAjl4AAAAAAgbAAI5ngY+C6oLygwYBAMAAREYAAAABA4L9gwYAAAAAAAAAYAPAAPwFAUqDAAEWgwAulxzAAI5YwACOXAbAAI5ogY+DCoMegzgBAIPBAWqDC2ADwAD9UQIAAAEDgyeDOAAAAAAAAABgA8AA/AUBSoMqARyDNRyDLDcHg4gBAAEWgy4ulxzAAI5YwACOXADAAP0sZAEAAZQAwAD9KgAASBGkAEgR4ABIEkAAAAACAsAAjmuBj4M9g0yEGQfAAF1kAAABYAHAAI5ZAAFgAbzTAAEFwACOcAAAAAAEAAADAAAAAAAAAAAAYAPAAI5rAT8BCQEAwACOXgAAAAACBsAAjm2Bj4PMg9SD6QEAt88AAAABA4Pgg+kAAAAAAAAAYAPAAPwFAUqD4wEWg+MulxzAAI5YwACOXAbAAI5ugY+D7YQBhBcBAIPBAWqD7mADwAD9UQIAAAEDhAqEFwAAAAAAAABgA8AA/AUBSoQNARyEDzcHg4gBAAEWhBEulxzAAI5YwACOXADAAP0sAABIEp8ASBLZAEgTLAAAAAICwACOcYGPhByEK4R6B8AAXWUAAAFgAcAAjlkAAmABwACOa2ABvOgAAQXAAI5zAAAAAAQAAAMAAAAAAAAAAABgA8AAjnEBPwEJAQDAAI5eAAAAAAAAAEgTkQAAAAACwACOdIGPhH2EjITSB8AAXWYAAAFgAcAA/VEAAmABwACOcWABvQAAAQXAAI52AAAAAAQAAAMAAAAAAAAAAABgA8AAjnQBPwEJAQDAAP1nAAAAAAAAAEgT7gAAAAACwACOd4GPhNWE5IUYB8AAXWcAAAFgAcAA/VEAAmABwACOa2ABvOUAAQXAAI55AAAAAAQAAAMAAAAAAAAAAABgA8AAjncBPwEJAQDAAP1nAAAAAAAAAEgUSwAAAAACwACOeoGPhRuFKoXmB8AAXWgAAAFgAcAAjlkAAWABvM0AAQXAAI5+AAAAAAQAAAMAAAAAAAAAAABgA8AAjnoBPwEJAQDAAI5eAAAAAAEGwACOfIGPhcGFyYXkAQDAAERLAAAAAQOF24XkAAAAAAAAAGADwAD8BQFKhd4BFoXeLpccwACOWMAAjlwAAEgUogBIFN4AAAABAsAAjn+Bj4XphfiGmwfAAF1pAAABYAHAAI5ZAAFgAbzIAAEFwACOgwAAAAAEAAADAAAAAAAAAAAAYAPAAI5/AT8BCQEAwACOXgAAAAABBsAAjoGBj4Z7hoOGmQEAwABESAAAAAEDhpCGmQAAAAAAAABgA8AA/AUBSoaTARaGky6XHMAAjljAAI5cAABIFTkASBV1AAAAAQLAAI6EgY+Gnoathv4HwABdagAAAWABwACOWQABYAG9DAABBcAAjogAAAAABAAAAwAAAAAAAAAAAGADwACOhAE/AQkBAMAAjl4AAAAAAQbAAI6GgY+G4IbohvwBAMAARKUAAAABA4bzhvwAAAAAAAAAYAPAAPwFAUqG9gEWhvYulxzAAI5YwACOXAAASBXQAEgWDAAAAAECwACOiYGPh0mHWImzB8AAXWsAAQAAg8tgA8AAjlkBYAPAAI5ZAWABwAD9UQAAAwTAAI6MgY+Hg4eSGLvjwACOWABgA8AA+j8BKgTAAI6NgY+Hm4ekGKe4wACOWABgA8AA/AUBkwTAAI6OgY+HsIe9WJcawACOWABdA8AA/KkBXwMAAAExh7tfAwAAAAEFwACOlgAAAAAEAAADAAAAAAAAAAAAXQPAAI6JAV8DAAABPwEJAQDAAP1nAAAAAAQGwACOkIGPh/GH84gXAAC30AAAAAEDh/yIFwAAAAEBAYgBAAAAJ2ADwAD8BQAAXwMAAAFKiAsBHIgQFogLLpcawACOWMAAjo5LAQABgIgRwEgW9gDAAPy4BsAAjpOBj4hWiF6IawEAmIYAAAABA4hjiGsAAAAAAAAAYAPAAPwFAUqIZgEWiGYup7jAAI5YwACOjQbAAI6UgY+Isoi6iNABAGEAAAABA4jBiNAAAAAAAAAAYAPAAPwFAUqIxAEWiMoWiMQulxrAAI5YwACOjmHAAPzYBsAAjpGBj4mMiZGJsQAAgogAAAABA4mWibEAAAAAAAAAXAE+AT0XiZ8uu+PAAI5YKcAAjowAAEgW1gBIFy4ASBdoAEgXqQBIF94AAAAEAsAAjpeBj4njiemNigPAAF1sAAEAAIPLYAPAAI5ZAWADwACOWQFdAcAAjokBXwMAAAAAAAEFwACOnQAAAAAEAAADAAAAAAAAAAAAXQPAAI6XAV8DAAABPwEJAQDAAI6WAAAAAAMGwACOmYGPiqaKqYvDAADAAEw3AAAAAQOKv4vDAAABAQDAAF1tXwMAAAFfAwAAAQEBisMAAACkJF8DAQAAAF8DAQABPgdAIRaK4i6748AAjljAAI6MiuGK6QEkiyYFJ8AAXW6AiwDASBiNJ8AAQx0WixEWiwsulxrAAI5YwACOjmHAAPzYJ8AAXW9AIRyLO4CLNMBIGI1IAQABKwDAAP1eizSLQgBAHIteFotXgItQwEgYjZccwACOWMAAjlxIAQABKwDAAP0oi1CLZQA9F4tzgItswEgYjZccwACOWBaLghaLfC6XGsAAjljAAI6OYcAA/NjAAI5cPRyLlBaLji6XGsAAjljAAI6OVgEAAYCLmMBIGI0AwAD8uj0Xi6Uup7jAAI5YHIuqFoulLqe4wACOWMAAjo1kAQABlADAAP0qwACOjUqLsgGAi7nASBiNBsAAjpqBj4v9jACMkgAAwABMJQAAAAEDjB2MkgAAAQEAwABdbV8DAAABXwMAAAICAowiAAAAJ2ADwAD8BQCMLAAAAKQkXwMBAAAAXwMBAAE+A0AcjEeAjEHASBnbgW0BAAEWjFAWjEoulxrAAI5YwACOjmHAAPzYAMAA/TWMQYxWAD0XjGMWjF0ulxrAAI5YwACOjmGAjGzASBnbwAD81kqMdwEcjH4uwABMNwEBXwMBAAGBjIfASBnoAMAAjpkGwACOm4GPjMGMxo2IAACD+AAAAAEDjNuNiAAAAQEAwABdbV8DAAABXwMAAAEBAYzhAAAAgaZhAwFfAwEAXAAAXAE+AUWM9QGM/o0EAAAnYAPAAPwFAZMBHI0PgY0JwEgasWMBAAEWjRcWjREulxrAAI5YwACOjmHAAPzYAMAA/TIBiY0fwEgasRyNJIGNH8BIGrFkAQABlADAAP0qPgJOjTKNOQAApCRfAwAAARyNQBaNOy6XGsAAjljAAI6OSwEAAYGNQcBIGrEAwAD8uEmNTyEcjVqCjVPASBsJSAEAASsAwAD9Xj4BPRyNboCNbcBIGpggAQABJo1vAYKNb8BIGwlfAwEAAAA/AABIGFwASBmqAEgaaQBIG3IAAAADAsAAjp6Bj44FjhSPrwfAAF1wAAIAAIPLYAPAAI5ZAWADwACOWQAAwABHj2ADwAD9UQFbAV0BwACOiQFfAwAAAAABBMAAjqGBj45mjnNYttzAAI5YAF0DwAD8qQFfAwEAATGOcV8DAQAAAQXAAI6lAAAAAAQAAAMAAAAAAAAAAABdA8AAjp4CXwMAAF8DAQABPwEJAQDAAI6WAAAAAAEGwACOo4GPjreOuY+tAADAAEw7AAAAAQOOwI+tAAAAAQEBjsMAACCkJF8DAAAAAF8DAQABPgNOjtWO2wAAJ2ADwAD8BQEWjuSAjt3ASBxHlxzAAI5YwACOXEmO8CIcjvqBjvTASBxcYwEAARaPAhaO/C6XGsAAjljAAI6OYcAA/NgAwAD9MgAcjxKBjwzASBxcgW0BAAEWjxsWjxUuttzAAI5YwACOoWHAAPzYAMAA/TU+AT0wjysfjzXAAPulAQABJI+JAyfAAF1xHI9/Fo96LpcawACOWMAAjo5LAQABgY+AwEgcXADAAPy4J4FqAD9Kj5YBHI+iFo+dLrbcwACOWMAAjqFLAQABgY+jwEgcXADAAPy4AABIHCUASB06AAAAAQLAAI6mgY+QEJAWloMDwABdcgACAACDy2ADwACOWQFgA8AAjlkAAMAAR49gA8AA/VEBWwFdAcAAjp4CXwMAAF8DAQAAAAABBcAAjq0AAAAABAAAAwAAAAAAAAAAAF0DwACOpgJfAwAAXwMBAAE/AQkBAMAAjqUAAAAABAbAAI6ogY+QhJCJkO8AAMAAVsAAAAABA5CSkO8AAAABAQGQlwAAACdgA8AA/AUAAFwBPgNAHJCxgJCrwEgd5EgBAAEWkLoWkLQulxrAAI5YwACOjmHAAPzYAMAA/SiQq5DAAD0ckM0WkMculxrAAI5YwACOjlYBAAErAMAA/Lo9HJDiFpDcLrbcwACOWMAAjqFWAQABKwDAAPy6BsAAjqmBj5GhkaSTpAAAwABMNwAAAAEDkciTpAAAAgEAwABdbV8DAAABXwMAAAEAwABdc18DAQABXwMBAAICApHMAAAApCRfAwIAAJHXAAAAEl8DAwAAAF8DAgABPgpAIRaR9C6748AAjljAAI6MkfOR+wEkkjgFJ8AAXW6AkhLASB6dJ8AAQx0WkiMWkh0ulxrAAI5YwACOjmHAAPzYJ8AAXW9AIRySTYCSRsBIHp1IAQABKwDAAP1ekkaSVABAHJJwFpJpgJJiwEgenZccwACOWMAAjlxIAQABKwDAAP0okmKSdwBAHJKbFpKUFpKOLpcawACOWMAAjo5hwAD82EgBAAEWkqQWkp4uttzAAI5YwACOoWHAAPzYAMAA/SiSjpKqASQABifAAF10FpLOFpLILrbcwACOWMAAjqFhwAD82CfAAF11J8AAXXYWkw4WkwgulxrAAI5YwACOjmHAAPzYJ4FqPReTJYCTHsBIHp2XHMAAjlgWkzQWky4ulxrAAI5YwACOjmHAAPzYwACOXD0ck0YWk0AulxrAAI5YwACOjlYBAAGAk0rASB6dAMAA/Lo9F5NXLqe4wACOWByTXBaTVy6nuMAAjljAAI6NZAEAAZQAwAD9KsAAjo1AIRyTcIGTa8BIHqlIAQABKwDAAP1ek2uTdwA9HJOEFpN+LrbcwACOWMAAjqFWAQABgZOIwEgeqQDAAPy6SpOTAYCTmsBIHp0GwACOqoGPlAWUCJTNAADAAEwlAAAAAQOUM5TNAAACAQDAAF1tXwMAAAFfAwAAAQDAAF1zXwMBAAFfAwEAAwMDlD8AAAAnYAPAAPwFAJRJAAAApCRfAwIAAJRUAAAAEl8DAwAAAF8DAgABPgNAHJRtgJRnwEggwYFtAQABFpR2FpRwLpcawACOWMAAjo5hwAD82ADAAP01lGeUfAA9F5SJFpSDLpcawACOWMAAjo5hF5SYFpSSLrbcwACOWMAAjqFhgJShwEggwcAA/NbAAPzWSpSsARyUsy7AAEw3AgJfAwIAXwMDAAKBlLzASCDOgpTEwEgg2gDAAI6pBsAAjquBj5UflSSWgQAAg/gAAAABA5VHloEAAAIBAMAAXW1fAwAAAV8DAAABAMAAXXNfAwEAAV8DAQABAQGVTQAAAIGmYQMCXwMCAF8DAwBcAABcAT4CSZVqIRyVexaVdBaVbi6XGsAAjljAAI6OYcAA/NhIAQABFpWEFpV+LrbcwACOWMAAjqFhwAD82ADAAP0oPgE9MJWUH5WewAD7pQEAASfAAF13AD9FleABlemV7wAAJ2ADwAD8BQGTARyV+oGV9MBIIiljAQABFpYCFpX8LpcawACOWMAAjo5hwAD82ADAAP0yAYmWCsBIIikclg+BlgrASCIpZAEAAZQAwAD9Kj4CTpYdliQAAKQkXwMAAAEclisWliYulxrAAI5YwACOjksBAAGBlizASCIpAMAA/LhJljohHJZFgpY+wEgigUgBAAErAMAA/V4+AT0cllmAlljASCG5IAIAAiaWWgGCllrASCKBXwMCACaWZwEclmcWlmIuttzAAI5YwACOoUsBAAGBlmjASCIpAMAA/LhfAwMAAAA/AABIHcIASB5dAEgggQBIIXsASCMTAAAABALAAI6ugY+XGpcpmNMHwABdeAADAACDy2ADwACOWQFgA8AAjlkAAMAAR49gA8AA/VEBWwAAhARgA8AA/VEBWwFdAcAAjp4CXwMAAF8DAQAAAAEEwACOsYGPl4iXlFix8cAAjlgAXQPAAPypAV8DAgABMZeSXwMCAAABBcAAjrUAAAAABAAAAwAAAAAAAAAAAF0DwACOrgNfAwAAXwMBAF8DAgABPwEJAQDAAI6lAAAAAAEGwACOs4GPl9+X4ZjRAADAAFa3AAAAAQOX55jRAAAAAQEBl+oAACCkJF8DAAAAAF8DAgABPgNOl/yYAgAAJ2ADwAD8BQEWmAuAmATASCQAlxzAAI5YwACOXEmYFyIcmCGBmBvASCQVYwEAARaYKRaYIy6XGsAAjljAAI6OYcAA/NgAwAD9MgAcmDmBmDPASCQVgW0BAAEWmEEWmDwusfHAAI5YwACOsWHAAPzYAMAA/TU+AT0wmFEfmFvAAPulAQABJJiuAyfAAF15HJikFpifLpcawACOWMAAjo5LAQABgZilwEgkFQDAAPy4J4FqAD9KmLsBHJjGFpjCLrHxwACOWMAAjrFLAQABgZjHwEgkFQDAAPy4AABII94ASCTzAAAAAQLAAI62gY+ZT5lVoT8DwABdegADAACDy2ADwACOWQFgA8AAjlkAAMAAR49gA8AA/VEBWwAAhARgA8AA/VEBWwFdAcAAjq4DXwMAAF8DAQBfAwIAAAAAAQXAAI68AAAAAAQAAAMAAAAAAAAAAABdA8AAjrYDXwMAAF8DAQBfAwIAAT8BCQEAwACOtQAAAAADBsAAjriBj5qEmoedbQAAwABMNwAAAAEDmrmdbQAAAwEAwABdbV8DAAABXwMAAAEAwABdc18DAQABXwMBAAEAwABde18DAgABXwMCAAMDA5rEAAAApCRfAwMAAJrPAAAAEl8DBAAAmtgAAACWe18DBQAAAF8DAwABPg1AIRaa9C6748AAjljAAI6MmvOa+wEkmzgFJ8AAXW6AmxLASCXeJ8AAQx0WmyMWmx0ulxrAAI5YwACOjmHAAPzYJ8AAXW9AIRybTYCbRsBIJd5IAQABKwDAAP1em0abVABAHJtwFptpgJtiwEgl3pccwACOWMAAjlxIAQABKwDAAP0om2KbdwBAHJubFpuUFpuOLpcawACOWMAAjo5hwAD82EgBAAEWm6QWm54uttzAAI5YwACOoWHAAPzYAMAA/SibjpuqASQABifAAF10FpvOFpvILrbcwACOWMAAjqFhwAD82CfAAF11J8AAXXYWnA4WnAgulxrAAI5YwACOjmHAAPzYJ4FqQBycOxacNBacLi6XGsAAjljAAI6OYcAA/NhIAQABFpxDFpw+LrHxwACOWMAAjrFhwAD82ADAAP0onC6cSQEkAAYnwABdfBacaxacZi6x8cAAjljAAI6xYcAA/NgnwABddSfAAF12FpyrFpylLpcawACOWMAAjo5hwAD82CeBaj0XnMKAnLvASCXelxzAAI5YFpzRFpzLLpcawACOWMAAjo5hwAD82MAAjlw9HJzjFpzdLpcawACOWMAAjo5WAQABgJznwEgl3gDAAPy6PRec9C6nuMAAjlgcnPkWnPQup7jAAI5YwACOjWQBAAGUAMAA/SrAAI6NQCEcnQ2BnQjASCXqSAEAASsAwAD9Xp0InRQAPRydIRadGy623MAAjljAAI6hVgEAAYGdJcBIJeoAwAD8ukAhHJ07gp03wEgl9UgBAAErAMAA/V6dN51CAD0cnU4WnUkusfHAAI5YwACOsVYBAAGCnVLASCX1AMAA/LpKnVwBgJ1jwEgl3gbAAI65gY+d5J3nntUAAMAATCUAAAABA54gntUAAAMBAMAAXW1fAwAAAV8DAAABAMAAXXNfAwEAAV8DAQABAMAAXXtfAwIAAV8DAgAEBASeLAAAACdgA8AA/AUAnjYAAACkJF8DAwAAnkEAAAASXwMEAACeSgAAAJZ7XwMFAAAAXwMDAAE+A0AcnmKAnlzASCjZgW0BAAEWnmsWnmUulxrAAI5YwACOjmHAAPzYAMAA/TWeXJ5xAD0Xnn4WnngulxrAAI5YwACOjmEXno0WnocuttzAAI5YwACOoWEXnpsWnpYusfHAAI5YwACOsWGAnqTASCjZwAD81sAA/NbAAPzWSp6vARyeti7AAEw3AwNfAwMAXwMEAF8DBQADgZ6/wEgo5oKex8BIKPKDns3ASCj9AMAAjrgGwACOuoGPnz2fQqE9AACD+AAAAAEDn3OhPQAAAwEAwABdbV8DAAABXwMAAAEAwABdc18DAQABXwMBAAEAwABde18DAgABXwMCAAEBAZ+AAAAAgaZhAwNfAwMAXwMEAF8DBQBcAABcAT4DSZ+lIRyfthafrxafqS6XGsAAjljAAI6OYcAA/NhIAQABFp+/Fp+5LrbcwACOWMAAjqFhwAD82ADAAP0oPgE9MJ/PH5/ZwAD7pQEAASfAAF13AD9JoBshHKAsFqAlFqAfLpcawACOWMAAjo5hwAD82EgBAAEWoDQWoC8usfHAAI5YwACOsWHAAPzYAMAA/Sg+AT0woEQfoE7AAPulAQABJ8AAXX0AP0WgjwGgmKCeAAAnYAPAAPwFAZMBHKCpgaCjwEgq1GMBAAEWoLEWoKsulxrAAI5YwACOjmHAAPzYAMAA/TIBiaC5wEgq1BygvoGgucBIKtRkAQABlADAAP0qPgJOoMyg0wAApCRfAwAAARyg2hag1S6XGsAAjljAAI6OSwEAAYGg28BIKtQAwAD8uEmg6SEcoPSCoO3ASCssSAEAASsAwAD9Xj4BPRyhCIChB8BIKg0gAwADJqEJAYKhCcBIKyxfAwMAJqEWARyhFhahES623MAAjljAAI6hSwEAAYGhF8BIKtQAwAD8uF8DBAAmoSMBHKEjFqEfLrHxwACOWMAAjrFLAQABgaEkwEgq1ADAAPy4XwMFAAAAPwAASCWPAEgoigBIKcAASCvnAAAAAwAAAYGPAEgr/gBID+8ASBBdAEgRVgBIElEASBM9AEgTmgBIE/cASBRUAEgU6wBIFYIASBYZAEgX9wBIG4cASB1HAEgjLABIJQAASCv8AAAAEABIK/4AAAAAAAIEwACOvQCBkAAABYDaAACCLoIGAIECAACbToIGAIE3AADAAKm6ggYAgYMAAFKCBgCBxAAAwABreQAAAAABwACOv4GQgfXAAF1+AABeAwACAgJgA5FsXQPAAPypAWADkWwAAVcDwACOvwBcAAKCMAAAACJgA5FsAIJRAAAAglNdA8AA/KkBYAORbAAABALAAI7AgZCCXIJiiNUDwABdfwAAAWABqkYAAAIEwACOw4GQgqeCxQnAAF2AwACOvQBgA8AA+j8ABMAAjsSBkILPgt8YwABdgQBgA8AA+j8BKwEFwACOyoGQguSC5IS1AAAAA4L8hLUAAAAEAgKDFwAAAIbMYAObUQCDPAAAAKVRXgMAAgICYAORbF0DwAD8qQFgA5FsAAFXA8AAjr8AXAACg2QAAACAiV0DwAD82gJgA8AA/etgA8AA/esBaoNxXQPAAPzaAmADwAD962ADwAD964Jpg4YAAADAAF2CYAPAAPo/AWqDpWADwAD6PwBgA8AAjsABPwIIAMAAjsODg9bASC23CQCD/aq3BAAEaoQWYAPAAGuUwAFpY4KEYMBILYSAhHnASC1QH4SawACO1AEAAYGEqMBILVwAAAIGwACOxoGQhLqE2IT8AQCp+QFqhLtgA8AA/VECAAABA4TmhPwAAAAAAAAAYAPAAI7LAUqE6QEmhOkBGITvqfmqTmADwACOywbAAI7IgZCFAYUZiNMAAJ7pAWqFAmADwAD9UQIAAAEDhSGI0wAAAAIBAYUwAAAAg+5gA4SuAAGFPAAAAMAATRZgA8AA+j8BaoVNYAPAAPo/d2ADiXMBPgM9F4VoFoVaLqn5wACOxsAAXYGBhXvASC6dwACOz0mFkCWFmYCFlMBILpBgA4cqPgNOhceF0AAAhgVgA4lzARaF1xSF0sBILpAAAWADhyqGBYcsSYXnJYX0goXrwEgu72ADikI+BE6GJYYsAACBdmADiXMBHYY0nukBAAEWhkYUhj3ASC7vAgFgA4pCgmuKRACqaEAiJYZ2g4ZvwEgvJGADikIBISaGowEchquDhqTASC8khE0BAAFqhrhgA8AAjtXAAWlvAIl2YAPAAPo/hm+G1AEkhyAFJ8AAXYODhvzASC8kJ5uUFocTFIcKwEgu7wIBYAOKQoJrikQngWpJhyshFocwLsAAXYDAAI69wACOwz4BPReHYRSHXMBILpAAAWADhyqGBYOHbMBILySHLD9Kh4YBg4eNwEgvJD9Kh6MBgoeqwEgu7z9Jh76Bh8LASC6dPgFKiD8BHYhMnukBAAGAiFXASC6QAKpoPgFLPgFKiH0BHYiKnukBAAGAiJPASC6QAKpoAAGIolsBiKkAAAGDTVsAAD4BSoi2ASsAAEguHwBILmYASDBZAAAAAgLAAI7LgZCI2IjeinMDqoEAAAFgAcAA/VEAAWABquQCBMAAjs6BkIkmiTIJiIvAAI69AF4DAAICAmADkWxdA8AA/KkBYAORbAABVwPAAI6/AFwABMAAjs+BkIk7iUsYwABdgQBgA8AA+j8BKwEFwACO1IGQiVCJUIlwAAAAA4ldiXAAAAABAQGJYwAABIiLXgMAAgICYAORbF0DwAD8qQFgA5FsAAFXA8AAjr8AXAAAYAPAAI7LAT8CCAHAAI7OgADASDDyCQGJUMAA/WcAAAAAAgbAAI7RgZCJdYmGicwAAKoiAWqJdmADwAD9UQIAAAEDiZ2JzAAAAAEBAYmzAAAAg+5gA4S2AABcAT4ABsAAjtKBkInRieKKcQAAgcMBaonSYAPAAP1RAgAAAQOJ6IpxAAAAAgICifsAAAAiYAORbACKHAAAAIJTXQPAAPypAWADkWwAAFwBPgFJiisWii8uwABdgcAAjs8+AT0cikkuiIvAAI69AgACgIpWwEgxoYGKX8BIMawAwACOzj8AAEgxPABIMXcASDH3AAAAAgLAAI7VgZCK5orsj+MDwABdhAAAAV0BmV4BYAPAAPo/AAAAAQXAAI7fgZCLK4sxi0wBAAADi0qLTAAAAAAAAABgA8AAjtUBPwEJAYsxmXAAAAAABwbAAI7XgZCLUYtii4wAAJfXAWqLUmADwAD9UQIAAAEDi3GLjAAAAAEBAYt+AAAAg+5gA4lzAABgA8AA+j8BSouHASoGwACO2IGQi5GLoovfAACG1gFqi5JgA8AA/VECAAABA4u6i98AAAABAQGL0gAAAIPuYAOKQgAAYAPAAPo/AUqL2wEpBsAAjtmBkIvki/WMbwAAhskBaovlYAPAAP1RAgAAAQOMFoxvAAAAAQEBjDcAAACD7mADihUAAGADwAD6PwE+AUqMQwEmjEMBHIxfFoxPgIxKwEgzDIbIiheETQEAAS4AiixgA8AA+j8GwACO2oGQjHSMhY1HAACGwwFqjHVgA8AA/VECAAABA4yajUcAAAABAQGMrwAAAIPuYAOKAgAAYAPAAPo/AT4CRoy7jO6MzAAAAICWYAOJcwAWjOYWjNqAjNXASDN0hdOKBinAAPz9PgFJjPYmjQABHI0AgYz6wEgzj4RNAQABLgCJdmADwAD6Pz4BSo0YASk/So03ASoGwACO24GQjUyNXY4KAACGwAFqjU1gA8AA/VECAAABA41tjgoAAAABAQGNfQAAAIPuYAOJ8QAAYAPAAPo/AT4CRo2JjbGNmgAAAICWYAOJcwAWjaiAjaPASDQKg9CJ9D4BSY25Jo3DARyNw4GNvcBINCWETQEAAS4AiXZgA8AA+j8+AUqN2wEpP0qN+gEqBsAAjtyBkI4PjiCOzwAAhr0Bao4QYAPAAP1RAgAAAQOOMY7PAAAAAQEBjkIAAACD7mADieAAAGADwAD6PwE+AkaOTo52jl8AAACAlmADiXMAFo5tgI5owEg0mIPQieM+AUmOfiaOiAEcjoiBjoLASDSzhE0BAAEuAIl2YAPAAPo/PgFKjqABKT9Kjr8BKgbAAI7dgZCO1I7lj+EAAIa4AWqO1WADwAD9UQIAAAEDjvWP4QAAAAEBAY8FAAAAg+5gA4nDAABgA8AA+j8BPgJGjxGPQY8qAAAAg89gA4nVABaPOICPM8BINSaD0InHPgJJj0kmj1cBHI9XFo9TgY9NwEg1QYPRideETQEAAS4AiXZgA8AA+j8+AUqPbwEpP0mPiiaPmgEcj5oWj5SBj47ASDVBgJaJ2IRNAQABLgCJdmADwAD6Pz4BSo+yASk/So/RASoAAEgyXABIMp8ASDLiAEgzSgBIM+AASDRuAEg0/ABINcAAAAAHAsAAjuCBkJL2kvyWMwPAAF2FAAABYAGCUgAAAgTAAI7igZCTQpNMCYJrAGADhyoABMAAjuOBkJNik2oJhgUAYAOJcwABBcAAju2BkJNvk2+ToAAAAAOTgJOgAAAAAgICk4YAAASCa2ADhyoAk5cAAASGBWADiXMAAGADwACO4AE/AwgBwACO4oAAwEg2RQgBwACO44EAwEg2UQkBk2+CZwAAAAAGBsAAjuWBkJOlk7aUGQAAhE4BapOmYAPAAP1RAgAAAQOTw5QZAAAAAQEBk88AAACA8l0DmdMBWwAAXAE+AT0wk9gfk+LAAPuXAQABJ8AAXYYABsAAjuaBkJQelCqUgwAAhE0BapQfYAPAAP1RAgAAAQOUMJSDAAAAAQEBlEAAAACA8l0DmN8BWwAAWwE+AT0wlEkflFPAAPuXAQABJ8AAXYcABsAAjueBkJSIlJSVAwAAhFQBapSJYAPAAP1RAgAAAQOUpZUDAAAAAQEBlLUAAACA8mADmg8AAFsBPgE9MJS+H5TIwAD7lwEAASfAAF2IAAbAAI7rgZCVCJUclT4BAIPBAWqVCWADwAD9UQIAAAEDlSWVPgAAAAAAAABgA8AA/AUBSpUoARyVKzcNg4gBAAEWlTYWlS0uhgXAAI7jg8GJfADAAP0sBsAAjuiBkJVDlV2V5AMASAFqlURgA8AA/VECAAABA5VfleQAAAABAQGVZwAAAIPWYAPAAP1RAABgA8AA+j8BPgJJlXQelXjAAPXmAgACLoCViMBIN/oASpWQASk/SpWhASIlla6AlajASDf6YAPAAI7gAByVzxaVxi6GBcAAjuNIAQABFpXYFJXSwEg3+gABYAPAAI7ghgXAAI7jAIl4BsAAjumBkJXplfyWMQAAIwFqlepgA8AA/VECAAABA5YEljEAAAAAAAAAYAPAAP3rAUqWCgEkljEDJ8AAXYkWlicuhgXAAI7jJ4MhAABINooASDbbAEg3LABIN3sASDfRAEg4cABIOLsAAAAGAAABgZAASDjeAEgs4wBIMGoASDIIAEg15QBIONwAAAAEAEg43gAAAAAAAgTAAI7uAIGRAAAFgNoAAIIuggYAgQIAAJuXggYAgTYAAJxKggYAgWUAAJqpggYAgZYAAJtOggYAAAAABALAAI7vgZGCgYKHgw8DwABdigAAAWABiOcAAAABBcAAjvOBkYK1gruC0AEAAAOCzoLQAAAAAAAAAGADwACO7wE/AQkBgruI8gAAAAABBsAAjvGBkYLVguiDDQAAIwFqgtZgA8AA/VECAAABA4Lwgw0AAAAAAAAAYAPAAP3rAUqC9gEnwABdiwAASDmQAEg5ygAAAAECwACO9IGRg4qDkIUKA8AAXYwAAAFgAYjzAAAAAQXAAI76gZGDv4O/hC8AAAADg9CELwAAAAIBAoPaAAAAhOhgA4MZAIP4AAAAhR1dA8AA/KkBYAOIuAFqAGADwAD9DnkAYAPAAI70AT8BCQCEEIkDAgACgIQWwEg6D4GEIcBIOhsAAgbAAI72gZGENIQ8hMgEAZYuAAAAAQOEUoTIAAAAAQEBhGQAAACCkGADiPMAAGADwACO9AFKhG0BIyEchHKAhG3ASDp6SAEAASsAiQEfhIbAAI76AgACFoSdgISYwEg6eoToiPkWhK2AhKjASDp6hR2I9wArAWADwACO9AbAAI74gZGEzYTghQgAACMBaoTOYAPAAP1RAgAAAQOE6IUIAAAAAAAAAGADwAD96wFKhO4BJIUIAifAAEqRHYT8IwAAAACCTwAASDpaAEg61QBIOx0AAAACAsAAjvuBkYWrhbGHMAPAAF2NAAABYAGI8wAAAAEFwACPAYGRheGF4YZSAAAAA4XzhlIAAAACAQKF/QAAAIToYAODGQCGGwAAAIUdXQPAAPypAWADiLgBagBgA8AA/Q55AGADwACO+wE/AQkAhjOJAwIAAoCGOcBIO2aBhkTASDtyAAIGwACO/YGRhleGX4btBAGWLgAAAAEDhnaG7QAAAAEBAYaIAAAAgpBgA4jzAABgA8AAjvsBSoaRASMhHIaWgIaRwEg70UgBAAErAIkBH4aqwACPAQIAAhaGwoCGvcBIO9GE6Ij5FobSgIbNwEg70YUdiPcAKwFgA8AAjvsGwACO/4GRhvKHBYcuAAAjAWqG82ADwAD9UQIAAAEDhw2HLgAAAAAAAABgA8AA/esBSocTASSHLgInwABKkh2HIiMAAAAAgk8AAEg7sQBIPCwASDx0AAAAAgLAAI8CgZGJMolBmkYHwABdjgAAAV0BmdMBYAOIuAAAAQTAAI8FgZGJjYmdCcAAVqrAAI7uAGADm1EAAQXAAI8xgZGJoomiiccAAAADibCJxwAAAAEBAYm2AAAEwABWqmADm1EAAGADwACPAgE/AggBwACPBYAAwEg83AkBiaKaCQAAAAAoBsAAjweBkYnMicyJ6wAAgcIAAAABA4nQiesAAAABAQGJ2AAAACJgA8AA/esAAFsBSonkAYCJ5MBIPSsGwACPLoGRifCKB4oqAQCGzAAAAAEDiheKKgAAAAAAAABgA5tRAUqKGgEWihouwABWqsAAju7AAI8FBsAAjy+BkYovikWKTQEChMIAAAABA4pNik0AAAAAAAAAYAPAAI70AAbAAI8IgZGKUopqipkAAJfVAWqKU2ADwAD9UQIAAAEDinWKmQAAAAEBAYp+AAAAg+5gA4JLAABgA4i4AT4BSoqKASsGwACPCYGRip6KqorlAADAAEaCAAAAAQOKs4rlAAAAAQEBirwAAACD7mADgksAAGADiLgBPgFKisgBJorIATUAAAABAGADgksBgIrPwEg+DSMcitWBAMBIPipIAQABKwAAKxyK1YEAwEg+KoRNAQABLgCCTQFbYAOIuAbAAI8KgZGK6orvi1IAAMAAThkAAAABA4r5i1IAAAABAQGLCAAAAIcyXQPAAPypAWADgksAAGADwAD9DgE+AUaLFYsxiyIAAACD7mADgksAgIsqwEg+hz4BPRyLOS7AAEaCAQABgYtDwEg+qQDAAI8JBsAAjwuBkYtXi2+L1wAAl98BaotYYAPAAP1RAgAAAQOLgIvXAAAAAQEBi48AAACD7mADhK4AAGADiLgBPgE9MIubHIuhLoHCAQABJIvSBSfAAE4YgIu3wEg/ACeDSRaLxICLv8BIPwCFhsAA/WUngyEAwACPBwbAAI8MgZGL3Iv0jDYAAIXeAWqL3WADwAD9UQIAAAEDjAWMNgAAAAEBAYwWAAAAg+5gA4ZjAABgA4i4AT4BSowiARaMLoCMKcBIP3aCkIZnBsAAjw2BkYw7jFOMxwAAhgABaow8YAPAAP1RAgAAAQOMZ4zHAAAAAQEBjHsAAACD7mADhw8AAGADiLgBPgFKjIcBHIyeFoyOLobMwACPLoX/AQABHIyrLsAARoIBAAEWjLqAjLXASD/GhbKHEQDAAI8JAJtwBsAAjw6BkYzMjOSNJQAAhegBaozNYAPAAP1RAgAAAQOM9I0lAAAAAQEBjQQAAACD7mADhpgAAGADiLgBSo0NARaNHRaNDS6GzMAAjy6FpZteBsAAjw+BkY0qjUKNnQAAhhEBao0rYAPAAP1RAgAAAQONW42dAAAAAQEBjXQAAACD7mADh1kAAGADiLgBSo2DARaNkxaNgy6GzMAAjy6GEJtcBsAAjxCBkY2ijbqOBwAAheEBao2jYAPAAP1RAgAAAQONzI4HAAAAAQEBjd4AAACD7mADhn0AAGADiLgBSo3tARaN/RaN7S6GzMAAjy6FwJtiBsAAjxGBkY4MjiSOhQAAhcEBao4NYAPAAP1RAgAAAQOOPI6FAAAAAQEBjlQAAACD7mADhhYAAGADiLgBPgFKjmABFo53Fo5nLobMwACPLoXAm2IGwACPEoGRjoqOoo7jAACF6gFqjotgA8AA/VECAAABA46yjuMAAAABAQGOwgAAAIPuYAOGoQAAYAOIuAFKjssBFo7bFo7LLobMwACPLoVwm10GwACPE4GRjuiPAI8+AACF4wFqjulgA8AA/VECAAABA48Pjz4AAAABAQGPHgAAAIPuYAOGhgAAYAOIuAFKjycBFo83Fo8nLobMwACPLoWFm18GwACPFIGRj0OPW4+oAACF5gFqj0RgA8AA/VECAAABA49tj6gAAAABAQGPfwAAAIPuYAOGjwAAYAOIuAFKj44BFo+eFo+OLobMwACPLoXlm2EGwACPFYGRj62PxZASAACF7QFqj65gA8AA/VECAAABA4/XkBIAAAABAQGP6QAAAIPuYAOGqgAAYAOIuAFKj/gBFpAIFo/4LobMwACPLoXsm2MGwACPFoGRkBeQL5CYAACF9wFqkBhgA8AA/VECAAABA5A/kJgAAAABAQGQTwAAAIPuYAOG3QAAYAOIuAE+AUqQWwEckHIWkGIuhszAAI8uhcUBAAEWkIeAkILASELFhcOG4ACbagbAAI8XgZGQnZC1kRsAAIX5AWqQnmADwAD9UQIAAAEDkMSRGwAAAAEBAZDTAAAAg+5gA4bqAABgA4i4AT4BSpDfARyQ9haQ5i6GzMAAjy6FyQEAARaRCoCRBcBIQyqFw4btAJtrBsAAjxiBkZEgkTiRqQAAhfsBapEhYAPAAP1RAgAAAQORR5GpAAAAAQEBkVYAAACD7mADhvcAAGADiLgBPgFKkWIBHJF5FpFpLobMwACPLoXPAgACFpGNgJGIwEhDj4XMhvoWkZuAkZbASEOPhc2G+wCbbAbAAI8ZgZGRrpHGkhIAAIV9AWqRr2ADwAD9UQIAAAEDkdaSEgAAAAEBAZHmAAAAg+5gA4TNAABgA4i4AT4BSpHyARyR+S7AAEaCAQABFpIIgJIDwEhEAoCWhNAAwACPCQbAAI8agZGSF5IvknsAAIWKAWqSGGADwAD9UQIAAAEDkj+SewAAAAEBAZJPAAAAg+5gA4TrAABgA4i4AT4BSpJbARySYi7AAEaCAQABFpJxgJJswEhEYoCWhO8AwACPCQbAAI8bgZGSgJKYkvAAAIWOAWqSgWADwAD9UQIAAAEDkq6S8AAAAAEBAZLEAAAAg+5gA4UPAABgA4i4AT4BSpLQARyS1y7AAEaCAQABFpLmgJLhwEhEwoCWhRMAwACPCQbAAI8cgZGS9ZMTk0oAAIXxAWqS9mADwAD9UQIAAAEDkyaTSgAAAAEBAZM5AAAAg+5gA4bAAABgA8AAjvQBSpNCARaTQi6EwsAAjy8GwACPHYGRk0+TZ5OiAACFmgFqk1BgA8AA/VECAAABA5N1k6IAAAABAQGTgwAAAIPuYAOFVwAAYAOIuAFKk4wBFpOYFpORgJOMwEhFboJFhVuFA4NwBsAAjx6BkZOnk7+UBwAAhZwBapOoYAPAAP1RAgAAAQOTzZQHAAAAAQEBk9sAAACD7mADhWcAAGADiLgBPgFKk+cBHJPuLsAARoIBAAEWk/2Ak/jASEXDgJaFagDAAI8JBsAAjx+BkZQMlCSUegAAhZgBapQNYAPAAP1RAgAAAQOUOZR6AAAAAQEBlE4AAACD7mADhUUAAGADiLgBPgFKlFoBHJRhLsAARoIBAAEWlHCAlGvASEYjgJaFSADAAI8JBsAAjyCBkZR/lJeUzwAAhfUBapSAYAPAAP1RAgAAAQOUoZTPAAAAAQEBlKsAAACD7mADhtIAAGADiLgBSpS0AWqUumADwACO78ABHkEGwACPIYGRlNSU7JUoAACF8wFqlNVgA8AA/VECAAABA5T4lSgAAAABAQGVBAAAAIPuYAOGyQAAYAOIuAFKlQ0BapUTYAPAAI7vwAEeQQbAAI8igZGVLZVFlZgAAIW4AWqVLmADwAD9UQIAAAEDlVuVmAAAAAEBAZVxAAAAg+5gA4X7AABgA4i4AUqVgAEWlZAWlYAuhszAAI8uhaWbXgbAAI8jgZGVnZW1lfQAAIWzAWqVnmADwAD9UQIAAAEDlb2V9AAAAAEBAZXFAAAAg+5gA4XwAABgA4i4AT4BSpXRARaV6BaV2C6GzMAAjy6FpZteBsAAjySBkZX5lhGWawAAhb0BapX6YAPAAP1RAgAAAQOWK5ZrAAAAAQEBlkUAAACD7mADhggAAGADiLgBPgFKllEBFpZdgJZYwEhHwYW8hg0GwACPJYGRlnCWiJbZAACF2gFqlnFgA8AA/VECAAABA5aZltkAAAABAQGWqgAAAIPuYAOGVwAAYAOIuAE+AUqWtgEWls0Wlr0uhszAAI8uhaWbXgbAAI8mgZGW3pb2lzcAAIXvAWqW32ADwAD9UQIAAAEDlwaXNwAAAAEBAZcWAAAAg+5gA4a1AABgA4i4AUqXHwEWly8Wlx8uhszAAI8uhYebZAbAAI8ngZGXPJdUl7MAAIYDAWqXPWADwAD9UQIAAAEDl2uXswAAAAEBAZeCAAAAg+5gA4cfAABgA4i4AT4BSpeOARaXoxaXmoCXlcBISLWCaochhTuEmgbAAI8ogZGXuJfQmAsAAIYJAWqXuWADwAD9UQIAAAEDl9iYCwAAAAEBAZfgAAAAg+5gA4c2AABgA4i4AT4BSpfsARyX8y7AAEaCAQABFpgCgJf9wEhJDIJphzkAwACPCQbAAI8pgZGYEJgomHwAAIYLAWqYEWADwAD9UQIAAAEDmDyYfAAAAAEBAZhQAAAAg+5gA4dCAABgA4i4AT4BSphcARyYYy7AAEaCAQABFphygJhtwEhJbICWh0UAwACPCQbAAI8qgZGYgZiZmO8AAIV4AWqYgmADwAD9UQIAAAEDmK+Y7wAAAAEBAZjFAAAAg+5gA4S2AABgA4i4AUqY1AFqmNpgA8AAju/AAR5BBsAAjyuBkZj0mQyZdQAAhg4Bapj1YAPAAP1RAgAAAQOZHJl1AAAAAQEBmSwAAACD7mADh04AAGADiLgBPgFKmTgBHJlPFpk/LobMwACPLoYNAQABaplgYAOIz4SIAJtvBsAAjyyBkZl6mZKaRAAAhgYBapl7YAPAAP1RAgAAAQOZqZpEAAAAAQEBmcAAAACD7mADhyoAAGADiLgBPgFKmhYBHJoigJodwEhKeYVsAQABFpowLobMwACPLgCHLwAASD0LAEg9RgBIPYAASD2oAEg96wBIPmUASD7WAEg/TABIP5wASEARAEhAYgBIQLMASEEEAEhBVwBIQagASEH5AEhCSgBIQpsASEMAAEhDZQBIQ9gASEQ4AEhEmABIRPgASEVEAEhFmQBIRfkASEZZAEhGpgBIRvMASEdEAEhHlwBIR+cASEg6AEhIiwBISOIASElCAEhJogBISe8ASEpPAEhKrQAAACgAAAGBkQBIS1gASDlDAEg51wBIOy4ASDyFAEhLVgAAAAQASEtYAAAAAAACBMAAjzLAAF2PgZIAAAeA8gAAwAC9zAAAgQwAAMAA0AoAAQEBwABJEoEqAADAAKyiwABdkACBewAApDYAAIGUAADAAEHdAAEBAaSfgdMAAIHgAAEBAYPTgfkAAMAAY5CCgQAAAAAFAsAAjzaBkoQxhEDAAOseB8AAXZEAAAFdAcAAkr4BWwAAJwTAAI84gZKE6IUTGMAAXZIAXQPAAPypAWADwACV5wExhRFgA8AAlecABMAAjzmBkoUqhVIYwABdkwBdA8AA/NoCYAPAAJPbYAPAAPwFAR6FP8AA/OEAAmADwACT22ADwAD8BQAABMAAjzqBkoVohY0YwABdlABdA8AA/NoCYAPAAJPbYAPAAPwFAR6FesAA/OEAAmADwACT22ADwAD8BQAABMAAjzuBkoXIhfAYwABdlQBdA8AA/NoCYAPAAJQAYAPAAPwFAR6F3MAA/OEAAmADwACUAGADwAD8BQAABMAAjzyBkofNh/QYwABdlgBdA8AA/NoCYAPAAJPbYAPAAPwFAR6H4cAA/OEAAmADwACT22ADwAD8BQAABMAAjz2Bkof9iAYYwABdlwBgA8AA/AUBKwTAAI8+gZKIDogaGMAAXZgAYAPAAPwFASsEwACPP4GSiq6KxxjAAFNvAF0DwAD8qQFgA8AAk9sBMYrFYAPAAJPbAATAAI9AgZKK1ortGMAAXZkAXQPAAPypAWADwAD8BQExiutgA8AA/AUABMAAj0GBkor7iw8YwABdmgBdA8AA/KkBYAPAAPwFATGLDWADwAD8BQAEwACPQoGSix2LMhjAAF2bAF0DwAD8qQFgA8AA/AUBMYswYAPAAPwFAATAAI9DgZKLUot+GMAAXZwAXQPAAPypAV0DgfkCYAPAAP3rYAPAAP3rATGLfF0DgfkCYAPAAP3rYAPAAP3rAATAAI9EgZKLmouiGMAAXZ0AYAPAAJAaASsEwACPRYGSi7aLxgnAAEWqAGADwAD7+wAEwACPRoGSj5ePoRjAAF2eAGADwAD96wErBMAAj0eBkpAQkB0YwABdnwBgA8AA/esBKwTAAI9IgZKQn5CnGMAARawAYAPAAJUcAATAAI9JgZKRsZG5GMAAXaAAYAPAAP3rASsEwACPSoGSkkiSUxjAAF2hAGADwAD96wErBMAAj0uBkpQglDgYwABdogBgA8AA+j8BKgTAAI9MgZKU4JToGMAAXaMAYAPAAP3rASsEwACPTYGSlYKVkRjAAF2kAGADwAD96wErBMAAj06BkpY4lkgYwABdpQBgA8AA/esBKwTAAI9PgZKW6pb4GMAAXaYAYAPAAP3rASsEwACPUIGSl6eXrxjAAF2nAGADwAD96wErBMAAj1GBkpgOmCwYwABdqABdA8AA/KkBYAPAAP3rATGYKmADwAD96wAEwACPUoGSmEqYUgmkzQBgA7WjAATAAI9UgZKY5pjwGMAAW0PAAI8yAGADtdUABMAAj1WBkpj5mQoYwABdqcAAjzIAYAPAAPwFAZMEwACPVoGSmU+ZZhjAAF2qAGADwAD8BQGTBMAAj1eBkpm2mc4YwABdqwBgA8AA/AUBkwTAAI9YgZKZ6poWGMAAXawAXQPAAPzaAmADwAD8BWADwACVEgEemf3AAPzhAAJgA8AA/AVgA8AAlRIAAATAAI9ZgZKlFaVXGMAAXa0AXQPAAMEMAmADwAD8BV0DwAD8qQFgA8AAk/sBHqUvwADBDgACYAPAAPwFXQPAAPypAWADwACT+wAABMAAj1qBkqW5pd8YwABdrgBdA8AA/NoCYAPAAPwFYAPAAP3rAR6lzcAA/OEAAmADwAD8BWADwAD96wAABMAAj1uBkqYppj0YwABdrwBgA8AA+j8BKgTAAI9cgZKmtabYGMAAXbAAYAPAAPo/ASoEwACPXYGSpyenRhjAAF2xAGADwAD6PwEqBMAAj16Bkqe2p8oYwABdsgBgA8AA+j8BKgTAAI9fgZKoPahTGMAAXbMAXQPAAPypAWADwACT+wErAQXAAI/WgZKaepp6mtgAAAADmoua2AAAAAQEBJqYAAAEpM1gA7WjAJqnAAAEwABbQ2ADtdUAmrgAAATAAEWqYAPAAPv7AJrPAAAEwABFrGADwACVHAAAYAPAAI82AT8FCAHAAI9SgADASFGCCAHAAI9UgQDASFGOCAHAAI9FggDASFGcCAHAAI9IgwDASFGsCQGaesAAkv8AAAAAcgbAAI9hgZKPUY9kj4wBAIF2AAAAAQOPa4+MAAAAAAAAAGADwACV3QFKj24BH49ywACV5gEAARaPgS7AAF2ewACPRgAGwACPYoGSkW+RgpGmAQC6MgAAAAEDkYeRpgAAAAAAAABgA8AAld0BSpGKAR+RjsAAleYBAAEWkZ0uwABdoMAAj0kABsAAj2OBkpIAkhOSPQEAVQAAAAEDkhuSPQAAAAAAAABgA8AAld0BSpIeAR+SIsAAleYBAAEWkjEuwABdocAAj0oABsAAj2SBkpSelLGU1QEAg7AAAAABA5S2lNUAAAAAAAAAYAPAAJXdAUqUuQEflL3AAJXmAQABFpTMLsAAXaPAAI9MAAbAAI9lgZKVMpVFlXcBAMAARtsAAAABA5VRlXcAAAAAAAAAYAPAAJXdAUqVVAEflVjAAJXmAQABFpVnLsAAXaTAAI9NAAbAAI9mgZKV5pX5li0BAMAAXbQAAAABA5YGli0AAAAAAAAAYAPAAJXdAUqWCQEflg3AAJXmAQABFpYcLsAAXaXAAI9OAAbAAI9ngZKXZZd4l5wBAJmAAAAAAQOXfZecAAAAAAAAAGADwACV3QFKl4ABH5eEwACV5gEAARaXky7AAF2nwACPUAAGwACPaIGSmHWYg5jXAQClTgAAAAEDmI2Y1wAAAAAAAABgA7XVAT4BSpiTASMcmKYWmJsuwABbQ8AAjzLAAI9USAEAASsAwAD9XmqYsWADtdXAAMTpFpjJLsAAW0PAAI8ywACPVAFgA7XVBsAAj2mBkpobmiSaNAEAhjAAAAABA5osmjQAAAAAAAAAYAPAAPo/AUqaLwEqBsAAj2qBkpo4mkGaVAEAwABdtQAAAAEDmkyaVAAAAAAAAABgA8AA+j8BSppPASoGwACPa4GSmliaYZp1AQDAAF22AAAAAQOabZp1AAAAAAAAAGADwAD6PwFKmnABKgbAAI9ugZKbCpsPmyAAAsAAXbcAAAABA5semyAAAAAAAAAAXAAGwACPb4GSm9mb4J9TAAC5LAAAAAEDm+efUwAAAAQDBJvvAAAAg+5gA8AAlhAAnAcAAADAAEWWYAPAAEHhAJw2AAAAwABFl2ADwABB4QCcXgAAAKVOYAO11QFqAGADwAD9DnkAYAPAAJYQAT4OPReccC7AAFtDwACPMoOcfcBIVUPAAI9UPRecjS7AAF2dH5ycwACQaQEAARacsy6cyMAAj3wAwACPRD0cnM4WnMUuwABdncAAj0TAAEoqAQABgJzWwEhVFQDAAJApPRedUC7AAF2eHJ1dLsAASYEBAAEngXYAwACPcsAAj0Y9F512LsAAXZ8cnYYuwABJgQEAASeB9ADAAI9ywACPRz0XnaIuwABdoBydrS7AAEmBAQABJ7oyAMAAj3LAAI9JPRedxC7AAF2hHJ3SLsAASYEBAAEnVQDAAI9ywACPSj0XnewuwABdoxyd9y7AAEmBAQABJ4OwAMAAj3LAAI9MPReeDi7AAF2kHJ4gLsAASYEBAAEnwABG2wDAAI9ywACPTT0Xnj4uwABdpRyeUS7AAEmBAQABJ8AAXbQAwACPcsAAj049F55wLsAAXaYcnoEuwABJgQEAASeanQDAAI9ywACPTz0XnpkuwABdpxyepC7AAEmBAQABJ5mAAMAAj3LAAI9QPRye7S7AAF23AAAAAMAAj25KnwUBJp8FARyfDC7AAF24AwADgJ8cwEhVFYGfIsBIVSOCnznASFUzAMAAj41gA8AAlhAGwACPbIGSn1ifap/uAQDAAF25AAAAAQOffp/uAAAAAAAAAGADwACVEgE+AUqfhAEen4vAAJK3AQABHJ+iFp+VLsAAXZbAAI88SwEAARyfuBafrC7AAFNvwACPP5Y/AQABNJ/CA5/Cn+cAAAABAQGfwwAAAIPuYAPAAJPbAABgA8AA+j8BSp/MASEcn+Acn9kWn8wuwABdlsAAjzxLAQABgJ/awEhXlQDAAPzuSAEAASsAwAD9KADAAPyEAMAA/O4ABsAAj3CBkp/zn/egzAAAwABdugAAAAEDoAagzAAAAAAAAABgA8AA/AUBPgRAHKArFqAWLsAAXavAAI9XgW0BAAEWoC4uwABdqsAAj1YAwAD9NaAWoEEAPRegSC7AAF2qHKBbFqBILsAAXarAAI9WZAEAAZQAwAD9KsAAj1Y9F6BjLsAAXaseoHrAANAlAgFgA8AA/AUCFqB+LsAAXarAAI9WFqCTLsAAXavAAI9XAMAAj1dKoK4BFqC1LsAAXarAAI9WBsAAj3GBkqDRoOChVgAAwABduwAAAAEDoOqhVgAAAAEBAaDvAAAAYmADwAD8BQAAYAPAAJXdAT4BSqD4ASag+AEcoQwWoP8uwABdrMAAj1iZHQIAAoChIcBIWMw0oSQDoSShUQAAAAAAAABgA8AAld0BSqEqAR+hLsAAleYBAAEcoT0uwABJgQEAASShTwInvqGAoU3ASFjMAMAAj3IAAMAA/PVgA8AAld0GwACPcoGSofmiAKMwAADAAEmBAAAAAQOiCaMwAAAAAQEBohEAAADAAEfXYAPAAP3rAABgA8AA/esBPgZOoiyiNQAAwABdvGADwAD96wEmoiwBHKI3LsAARaoBAAGAokjASFl2AMAAj0VgA8AA/etOomKiaQAAgXZgA8AA/esBgaJrwEhZkU6ifaKFAACEMWADwAD8BQGUQ6KOHKKoFqKeFqKVLsAAXZ3AAI9EhDDAAJAggxcBAAGCorHASFnEAMAA/ag+Aj2KosLASFnEJKLeAoGizcBIWZGDotbASFnbPYui6MBIWdscouaDoujASFnbZAEAAZQAwAD9Kj0cow4WowQWovsuwABdncAAj0SEMMAAkCBWAQABgqMSwEhZxADAAP2pSqMfAYKjJsBIWcQGwACPc4GSozWjSaQwAADAAF29AAAAAQOjXaQwAAAAAQEBo3IAAACFbV0DwAD8qQFgA8AAlRIAAF0DwAD8qQFgA8AAlRIBPgJJo38co4mAo4PASFqlSAEAASsAwAD9Xj4DTqOho6YAAIC9YAPAAP3rARyjqC7AAEmBAQABJ4KQAMAAj3I9HKPTFqPBLsAAXajAAI9RVgEAAYGj18BIWuUAwAD8ukqj5AExo/pgA8AAlRIBH6P/wACV5gEAAYGkDsBIWuUAP0qkIAGApCfASFqlBsAAj3SBkqkHqQupugAAwABdvgAAAAEDqROpugAAAAEAAakcAAAAnHhgA8AA/esBagBgA8AA/Q55AGADwAD8BQE+BE6pMKk3AACBdmADwAD8BQEWqTkuwABdqcAAjzLAAI9VPRepTC7AAF2pwACPMhypWRapTC7AAF2pwACPMsAAj1VkAQABlADAAP0qwACPVUmpYSEcqW2AqWXASFt1SAEAASsAwAD9+j4BPRypixapfi7AAF2uwACPWoC/AgACgamMwEhbl4CplsBIW3UAwAD87z9KqakBgamwwEhblwbAAI91gZKqVKpZqzwAAMAAXb8AAAABA6pjqzwAAAABAQGqaAAAAJkBYAPAAPwFAABcAT4EQCEcqosWqn0uwABdrcAAj1mHRwEAAYCql8BIXFQAwAD87ap8qp0APReqpC7AAF2zMarLYAPAAJP7AMAAj189HKrgFqrTLsAAXa3AAI9ZgL8CAAKAquHASFxUFqrqLsAAXbPAAI9fAMAA/O89HKsGLoYZAQABH6sXwACXfwEAARyrLxarIi7AAF2uwACPWksBAAGAqzDASFxUAMAA/O4AAMAAj3kGwACPdoGSq/6sC6zRAADAAF3AAAAAAQOsGqzRAAAAAgICrB8AAACZAWADwAD8BQCsOAAAAKVhYAPAAEHhAABgA8AAk/sBPgFKrFEBH6xcwACUGAEAASaspAEcrKQcrHVqrHZgA8AAl4DAAR9pIAIAAifAAFVCMayKYAPAAJUSAhasiy66MsAAj2IerJHAAJK3AQABgKybwEhdLQAAwACXgq+fAQABgay6wEhdOwDAAJPpYAPAAJUSAAbAAI93gZKtYq1rr+QAAMAAXcEAAAABA613r+QAAAACAgKtfAAAAJkBYAPAAPwFAK2VAAAApWFgA8AAQeEAAGADwACUAAE+BU6twa3MAACGFl0DwAD8qQFgA8AAk/sBMa3cYAPAAJP7AEmt5Byt9hat6C7AAF2uwACPWodHAQABgK4CwEhd5gDAAPztPgE9HK4dgq4SwEheDVYBAAEfriXAAJd/AQABJK5OAifAAF3CHK5FFq44LsAAXa7AAI9aSwEAAYCuRsBIXeYAwAD87gAAwAD8uj89HK5ngq5cwEheDVYBAAEcrmsuwABdwAIAAoCue8BIXeaBroLASF30AMAAj3YAwAD8ukmumxauny7AAF2wwACPXD4CPReuxC7AAF2xKcAAj109HK71gq7qwEheDVYBAAEmryEBHK8hH679wACUgwEAARavBi7AAF2mwACPTwCvnwEAAYGvN8BIXfQAwACT6WADwACT+wDAAPy6PgE9HK91gq9fwEheDVYBAAEmr4wBHK+MH699wACUgwEAASsA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aMzAAI9WSsAARboBhsAARcHASGmeBsAAj4eBksAARyTAAEckwABKsgAAwABd1AAAAAEDwABHM8AASrIAAAACAgLAAEdIAAAAhzJdA8AA/KkBYAPAAJUSAMAAR08AAACWKmEDAV0DwAD8qQFgA8AAlRJbAABbAT4ITsAAR3rAAEeKAADAAF3QYAPAAPwFARbAAEeMLsAAXarAAI9WTsAASCzAAEg/AADAAF3VYAPAAPwFAZNBRcAASEgBwABIUcAASFMAAGJgA8AA/AUBHMAASGIWwABIW4DAAEhVwEhqJWHAAPzYgY0BAAGUAMAA/SsBHMAASGmEwABIZ8BIap6BbQEAAZMAwAD9NQGMwABIccBIap4cwABIb4TAAEhxwEhqnoGNAQABlADAAP0rQT4CScAASHwcwABIiRzAAEiFgMAASIDASGolSwEAAYTAAEiGwEhqngDAAPy4SAEAASsAwAD9XkLAAEiSAT9JwABIohzAAEimLsAAXcQBAAEcwABIu4DAAEi2wEhqJUsBAAGEwABIvMBIap4AwAD8uADAAI97PgI9i8AASMvASGqBhMAASODASGqeQsAASOsAP07AAEkSwABJGgAArqZdA8AA/KkBYAPAAJPbARzAAEmmHMAASTscwABJIoDAAEkcwEhqJZZEAQABg8AASSfASGqBAMAA/H+AqwEBYAPAAJUSATTAAEk/A8AAST/AAEmkAAAAAQEBwABJSAAAAIPuYAPAAJPbAABgA8AAlRIBPgFKwABJVgEjHMAASWOEwABJXsBIbAZIAQABKwDAAP1eKxzAAEl1LsAAXczAAI8yAQABHMAASYcuwABdywEAASbAAEmXAYTAAEmXwEhsBmADwACVEgDAAI+AAMAAj4IBYAPAAJUSAMAA/HKArQAAAADAAPx9PRzAAEm8hMAASbTASGuigKUBAAEcwABJ6xzAAEnSgMAASczASGolli8BAAGDwABJ18BIaoEAwAD8gYCrAQFgA8AAlRIBNMAASf4DwABJ/sAASlAAAAABAQHAAEoHAAAAg+5gA8AAk9sAAGADwACVEgE+AUrAAEoVASMcwABKIoXAAEodwEhs7EgBAAErAMAA/V4rHMAASjQuwABdywEAASbAAEpEAYXAAEpEwEhs7GADwACVEgDAAI+AAWADwACVEgDAAPxyAMAA/LtOwABKXMAASmMA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oXIAAACFumADwACVEgAAYAPAAP0OAT4DTsAAoZTAAKGjAADAAF4LYAPAAJP7ARzAAKGlLsAAXfkBAAEWwAChv4DAAKG6wEilBIGtwACUJgDAAI+pTsAAodvAAKHqAADAAF4MYAPAAJP7ARzAAKHsLsAAXfkBAAEWwACiBoDAAKIBwEilBIW7wACUJwDAAI+pPRzAAKIaLoYZAQABH8AAoivAAJQyAwADgcAAojHASKWmgsAAojzASKXBg8AAokzASKX9AADAAI95AcAAXc8qwACPhErAAKJ8AD9OwACiksAAopwAAMAAXetgA8AA/AUBHMAAop4uwABdvgEAASeBrQDAAI90TsAAorjAAKLCAADAAF3sYAPAAPwFARzAAKLELsAAXb4BAAEnWADAAI90TsAAot7AAKLoAADAAF3yYAPAAPwFASMlwACjAhbAAKL4gMAAovPASKUEhbvAAJQnYAPAAJQZgsAAoxrASKauHMAAoyYuwABdvgEAASeaEADAAI90AWADwAD8BT0cwACjPS7AAF3OAwACFsAAo1GAwACjTMBIpQSFusAAlCU0wACjXAPAAKNcwACkIwAAAAEBAcAAo2sAAACFumADwACVEgAAYAPAAP0OAT4BPRzAAKN+LsAAXcMBAAEfwACjmcAAlW4CAAIWwACjsi66MsAAj2IfwACjxsAAlYkDAAOEwACj5MBIp2gewACj78AAkrcBAAGBwACj+cBIpoMAHsAApAXAAJK3AQABg8AApA/ASKbYAAAAAMAAj3oBwABdzyrAAI+EPRzAAKQ4LqOAAQABJsAApEYBFsAApEaAwACkQcBIpQSlYcAAk+BgA8AAQeEAwACPnz0cwACkXi7AAF2/AQABgcAApGnASKaDAMAAj3U9HMAApHkuwABdyQEAARbAAKSNgMAApIjASKUEga3AAJQmAMAAj35JwACkmCElwACkqxbAAKShgMAApJzASKUEhbvAAJQnYAPAAJQZPgM9HMAApMouo4cCAAKCwACk0sBIpq4mwACk4gEWwACk4oDAAKTdwEilBKVhwACT4GADwABB4QDAAI94PRzAAKT8LsAAXb8BAAGDwAClB8BIptgAwACPdT0cwAClGS7AAF3JAQABFsAApS2AwAClKMBIpQSFu8AAlCcAwACPfj89HMAApUMuwABdvwEAAYLAAKVOwEimrgDAAI91BsAAj6yBksAApWHAAKVtwAClywAAsHkBasAApWJgA8AA/VECAAABA8AApYjAAKXLAAAAAQEBwAClowAAAIPuYAPAAJbiAABbAT4BSsAApa8BHMAApbYunMgBAAGAwAClwsBIqWUAwACPfAbAAI+tgZLAAKXQwACl3MAApjwAALBwAWrAAKXRYAPAAP1RAgAAAQPAAKX4wACmPAAAAAEBAcAAphQAAACD7mADwACXSQAAWwE+AUrAAKYgARzAAKYnLpzIAQABgMAApjPASKnPAMAAj3wGwACProGSwACmQcAApk3AAKaXAACwdwFqwACmQmADwAD9UQIAAAEDwACmZcAAppcAAAABAQHAAKZ9AAAAg+5gA8AAlvcAAFsBSsAApoYBHMAApoYunMgBAAGAwACmksBIqjkAwACPfAbAAI+vgZLAAKacwACmqMAApwQAALB1AWrAAKadYAPAAP1RAgAAAQPAAKbCwACnBAAAAAEBAcAAptwAAACD7mADwACXCgAAWwE+AUrAAKboARzAAKbvLpzIAQABgMAApvvASKqhAMAAj3wGwACPsIGSwACnCcAApxXAAKdvAACwdAFqwACnCmADwAD9UQIAAAEDwACnLsAAp28AAAABAQHAAKdHAAAAg+5gA8AAlyEAAFsBPgFKwACnUwEcwACnWi6cyAEAAYDAAKdmwEirCwDAAI98BsAAj7GBksAAp3TAAKeAwACn3AAAsHIBasAAp3VgA8AA/VECAAABA8AAp5rAAKfcAAAAAQEBwACntAAAAIPuYAPAAJc2AABbAT4BSsAAp8ABHMAAp8cunMgBAAGAwACn08BIq3UAwACPfAbAAI+ygZLAAKfhwACn8sAAqjYAAIYjAWrAAKfiYAPAAP1RAgAAAQPAAKgHwACqNgAAAAEBAcAAqBwAAACD7mADwACU7AAAXAE+B0nAAKgoIRzAAKgtLsAAXcQBAAGAwACoPcBIq98AwACPez4CPRzAAKhMLoYZAQABH8AAqGjAAJT4AgACFsAAqIGAwACofMBIq9+ZAcAAlO4cwACoiC7AAF35AQABFsAAqKKAwAConcBIq9+CacAAlO8AwACPqQAAwACPeUrAAKixAD9OwACpbcAAqXgAAMAAXg1gA8AA/AUBHMAAqXouwABdvgEAASTAAKmYAie6NxbAAKmRgMAAqYzASKvfmQHAAJTuAMAAj3Q9HMAAqaoWwACpny7AAF2UwACPOoC/AgACgMAAqavASKvfgcAAqbPASKx3AMAA/O89HMAAqdAWwACpxC7AAFNvwACPP1YBAAGAwACp1MBIq98AwAD8uj0cwACp3y7AAF3JAQABFsAAqfOAwACp7sBIq9+CacAAlO8AwACPfj0cwACqChbAAKn+LsAAU2/AAI8/hhcAAAAAwAD8yD0cwACqHC7AAF2/AQABgcAAqifASKx3AMAAj3UGwACPs4GSwACqO8AAqlXAAKqCAACwiQFqwACqPGADwAD9UQIAAAEDwACqZcAAqoIAAAABAQHAAKp1AAAAg+5gA8AAlmoAAGADwACVEgFKwACqfgGAwACqfsBIragGwACPtIGSwACqh8AAqpPAAKrZAACwoQFqwACqiGADwAD9UQIAAAEDwACqqcAAqtkAAAABAQHAAKq/AAAAg+5gA8AAlTEAAFsBSsAAqsgBHMAAqsgunMgBAAGAwACq1MBIrgUAwACPfAbAAI+1gZLAAKrewACq+MAAqyUAALCGAWrAAKrfYAPAAP1RAgAAAQPAAKsIwACrJQAAAAEBAcAAqxgAAACD7mADwACWdAAAYAPAAJUSAUrAAKshAYDAAKshwEiubQbAAI+2gZLAAKsqwACrRMAAq3UAALCHAWrAAKsrYAPAAP1RAgAAAQPAAKtWwACrdQAAAAEBAcAAq2gAAACD7mADwACWkgAAYAPAAJUSAUrAAKtxAYDAAKtxwEiuygbAAI+3gZLAAKt6wACrhsAAq8oAALCkAWrAAKt7YAPAAP1RAgAAAQPAAKubwACrygAAAAEBAcAAq7AAAACD7mADwACU+QAAWwFKwACruQEcwACruS6cyAEAAYDAAKvFwEivJwDAAI98BsAAj7iBksAAq8/AAKvpwACsGgAAsIgBasAAq9BgA8AA/VECAAABA8AAq/vAAKwaAAAAAQEBwACsDQAAAIPuYAPAAJZ8AABgA8AAlRIBSsAArBYBgMAArBbASK+PBsAAj7mBksAArB/AAKw5wACsdgAAhcEBasAArCBgA8AA/VECAAABA8AArFHAAKx2AAAAAQEBwACsaQAAAIPuYAPAAJaGAABgA8AAlRIBSsAArHIBgMAArHLASK/sBsAAj7qBksAArHvAAKyPwACsrgAAhl4BasAArHxgA8AA/VECAAABA8AArJjAAKyuAAAAAQEBwACsoQAAAIPuYAPAAJUcAABgA8AAlRwBSsAArKoBgMAArKrASLBJBsAAj7uBksAArLPAAKzOwACtIAAAsIMBasAArLRgA8AA/VECAAABA8AArN7AAK0gAAAAAQEBwACs7gAAAIPuYAPAAJVQAABgA8AAlVABPgI9HMAArPounMgBAAGAwACtBsBIsKYAwACPfErAAK0RASsGwACPvIGSwACtJcAArTHAAK12AACwkAFqwACtJmADwAD9UQIAAAEDwACtQ8AArXYAAAABAQHAAK1VAAAAg+5gA8AAlgEAAFsBPgE9HMAArWEunMgBAAGAwACtbcBIsRcAwACPfAbAAI+9gZLAAK17wACtlcAArdAAALCOAWrAAK18YAPAAP1RAgAAAQPAAK2swACt0AAAAAEBAcAArcMAAACD7mADwACWWgAAYAPAAJUSAUrAAK3MAYDAAK3MwEixfAbAAI++gZLAAK3VwACt78AAriIAALCMAWrAAK3WYAPAAP1RAgAAAQPAAK4CwACuIgAAAAEBAcAArhUAAACD7mADwACWSAAAYAPAAJUSAUrAAK4eAYDAAK4ewEix2QbAAI+/gZLAAK4nwACuQcAArnQAALCKAWrAAK4oYAPAAP1RAgAAAQPAAK5UwACudAAAAAEBAcAArmcAAACD7mADwACWUQAAYAPAAJUSAUrAAK5wAYDAAK5wwEiyNgbAAI/AgZLAAK55wACuk8AAr8gAALCZAWrAAK56YAPAAP1RAgAAAQPAAK6bwACvyAAAAAEBAcAArqMAAACD7mADwACVmQAAYAPAAJUSAT4CTsAArrTAAK7AAADAAF3wYAPAAPo/ARzAAK7RFsAArseAwACuwsBIspNbwACVjYHUAQABFsAArtUuwABdxMAAj3sAwAD8fErAAK7rASbAAK7rARzAAK7yLsAAXdEDAAIWwACvEIDAAK8LwEiyk4JFwACVjDTAAK8YA8AArxjAAK+vAAAAAQEBwACvGQAAAIJFYAPAAJUSAABbAT4BSsAArykBHMAArzAuwABd1AIAAhbAAK9FgMAAr0DASLKTW8AAlY00wACvUAPAAK9QwACvpwAAAAEBAcAAr2UAAABbXQPAAPypAWADwACVEgAAYAPAAJWZAT4BSsAAr3oBH8AAr4XAAJWgAgACgsAAr4zASLM0g8AAr5TASLODAADAAI+HAcAAXc+BwACvuMBIsq7AAI+FYAPAAJUSBsAAj8GBksAAr83AAK/nwACxgwAAsH8BasAAr85gA8AA/VECAAABA8AAr/3AALGDAAAAAQEBwACwEwAAAIPuYAPAAJa4AABgA8AAlRIBPgFKwACwHwEmwACwHwEcwACwJi7AAF3UAgACHMAAsH0cwACwTxbAALBEgMAAsD/ASLQbnxjAAJa6gKsBAWADwACVEgE0wACwUwPAALBTwACwewAAAAEBAcAAsGAAAACfGWADwACWxwAAYAPAAJUSAUrAALBtARbAALB2gcAAsG3ASLSLgJbAAJbKAMAA/HKArQAAAADAAPx9NMAAsI8DwACwj8AAsX4AAAABAQHAALCeAAAAKV0DwAD8qQFgA8AAk9sAAGADwACWuAE+Ak7AALDAwACwywAAnxhdA8AA/KkBYAPAAJbHAR7AALDRwAD8sQIBYAPAAJbHAhbAALDmgcAAsN/ASLTgYcAA/Ng0wACw7gPAALDuwACxQwAAAAEBAcAAsPMAAABiYAPAAPwFAABgA8AAlscBPgFKwACxAAEfwACxC8AAltMCAAIWwACxKhzAALEmFsAAsRyAwACxF8BItBufGMAAlrpLAQABgsAAsSfASLVUAMAA/LiAvcAAlskmwACxNgEcwACxNoHAALEwwEi04EsBAAGCwACxN8BItVQAwAD8uGADwACVEgAASsAAsUwBH8AAsVfAAJbGAQABgsAAsWzASLUBAADAAI+HYAPAAJUSBsAAj8KBksAAsYjAALGUwACxygAAsJIBasAAsYlgA8AA/VECAAABA8AAsaLAALHKAAAAAQEBwACxsAAAAIPuYAPAAJXxAABbAUrAALG5ARzAALG5LsAASG4BAAGAwACxxcBItkAAwACPfQbAAI/DgZLAALHPwACx6cAAtOEAALCVAWrAALHQYAPAAP1RAgAAAQPAALH1wAC04QAAAAEBAcAAsgEAAACD7mADwACVwQAAYAPAAJUSAT4CScAAsg0iHMAAshkWwACyFoDAALIRwEi2qqpUwACVw0gBAAEnndcAwAD9+gEcwACyLBbAALIpgMAAsiTASLaqqlTAAJXDSAEAASedzQDAAP36PgJOwACyS8AAslQAAB9gA8AAlRIBFsAAsluAwACyVsBItqofwACV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2YDAAOrUwEjnRqVhwACT4GADwABB4QDAAI/TAcAAXc8qwACPhD0cwADrBy7AAF2/AQABgcAA6xLASOeEAMAAj3UAAEhSAwBIUkYASFKJAEhSywBIUw4ASFNTAEhTmABIU9sASFRFAEhUcgBIVKEASFTQAEhU9QBIVyYASFfnAEhYqgBIWVQASFqDAEhbUwBIXDIASF0LAEhdxABIX4oASGB2AEhgyQBIYR8ASGGIAEhh3wBIYkQASGKQAEhjNgBIY5QASGTXAEhl7QBIaGAASGn5AEhtxABIbgMASG5CAEhuuwBIb2MASG+uAEh4XgBIeTAASHpOAEh6rQBIe4YASH7UAEh/KABIgOsASIGFAEiHGQBIh68ASIjjAEiKjgBIivoASItmAEiLywBIkRoASJJOAEiTRwBIloUASJbvAEiawABImyUASJuXAEihngBIofQASKJZAEijgABIpFoASKTOAEipLwBIqZkASKoDAEiqawBIqtUASKs/AEirqQBIrXIASK3PAEiuNwBIrpQASK7xAEivWQBIr7YASLATAEiwcABIsOEASLFGAEixowBIsgAASLJdAEiz5QBItgoASLZ0AEi5dABIvHYASLzeAEi9xwBIviQASMBXAEjNIgBIzYQASM5/AEjPhQBI0c8ASN5XAEjevgBI4H0ASODkAEjiUABI5rEASOcQAEjotQAAAHICwACP14GSwADtWsAA7WDAAQoSA8AAXisAAAFgAcAAjzYAAAgEwACP2YGSwADuKMAA7jUYwABeLABgA8AA/esBKwTAAI/agZLAAPBQwADwWgnAAEWlAGADwACVEgAEwACP24GSwADxIcAA8SsJwABFpgBgA8AAlRIABMAAj9yBksAA8erAAPH1CcAARacAYAPAAJUSAATAAI/dgZLAAPLOwADy2gnAAEWoAGADwACVEgAEwACP3oGSwADzWcAA82kJwABFowBgA8AAlRIABMAAj9+BksAA84HAAPOeGMAARakAXQPAAPypAWADwACVEgAEwACP4IGSwADzt8AA878JsTsAYAPAAJUSAAEFwACP7YGSwADzxMAA88TAAPVLAAAAA8AA89HAAPVLAAAACwICwADz5QAAAKTNYAO1owDAAPP5AAAApU5gA7XVAAnAAPQQAAAEwABFpWADwACVEgFqAGADwAD9DnnAAPQnAAAEwABF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AQpqwAEKcQAAAAAAAABgA8AA+j8BSsABCm0BKQbAAI/4gZLAAQ8HwAEPGMABEMoAAMAAXikBasABDwhgA8AA/VECAAABA8ABDyDAARDKAAAAAwMDwAEPLgAAAIPuYAPAAJUFAMABD0IAAACCa2ADwACVEgDAAQ9mAAAApWFgA8AAQeEAAFwBPgFJwAEPfxbAAQ+IgMABD4PASP3gsKPAAJUIPgE9HMABD5kuhhkBAAEmwAEQJwEcwAEQJx/AAQ+qwACUjwEAASbAAQ/yARzAAQ/yH8ABD7jAAJWYAgACFsABD8AuwABFsMAAj/MxwAEP1WADwACVEgGBwAEP1sBI/fAAr58BAAGCwAEQCMBI/gAAwACT6WADwACVEgCvnwEAAYLAARA9wEj+AADAAJPpYAPAAJP7AMAAj3k+AT0cwAEQZS6GGQEAASbAARCXARzAARCXH8ABEIHAAJSPAQABgcABEIvASP3wAK+fAQABgsABEK3ASP4AAMAAk+lgA8AAk/sAwACPeQbAAI/5gZLAARDPwAEQ4sABHx4AAKEwAWrAARDQYAPAAP1RAgAAAQPAARDwwAEfHgAAAAYGBsABEQsAAACaiF0DwAD8qQFgA8AAlfEAwAERMAAAAIS+XQPAAPypAWADwACV8QDAARFTAAAAwABd2WADwACT+wDAARGDAAAAwABd2mADwACVQQDAARGxAAAAwABd22ADwABB4QDAARHkAAAAwABFlmADwABB4QAAYAPAAJYQAT4NTsABEuXAARLyAACub10DwAD8qQFgA8AAlXABMcABExdgA8AAlXAATsABEzLAARNEAADAAF5IXQPAAPypAWADwACV8QExwAETVGADwACV8QBGwAETXMABE4fAARNuAAAAgO1gA8AAlfEAgMABE3vASP9JPgROwAETlsABE5sAAIC9YAPAAP3rARbAAROnFMABE53ASQAiCACAvcAAldJOwAETusABE8YAAMAAXklgA8AA/esBHMABE8guwABJgQEAARTAARPSwEkAPgkAAMAAj3I9HMABE/GHwAET38BI//FWAQABH8ABE/nAAJX4AQABFMABFAbASQBoCgAAAMAA/Lo9HMABFCiGwAEUG8BI/8pWAQABH8ABFDDAAJV5AgACH8ABFFnAAJXwAQABFMABFHDASQA+CQAAH8ABFHvAAJXmAQABFMABFIrASQBoCgAAAADAAPy6TsABFL/AARTOAADAAF5KYAPAAJVBAR/AARTcwACVTwEAAYbAART3wEj/ygBOwAEVGcABFSkAAMAAXktgA8AAlRIBJsABFRkBHMABFZkcwAEVLWrAARUuYAPAAJeAwAEfaSACAAInwABeTDLAARVMYAPAAP3rYAPAAP3rAieBdhbAARVeLsAAXZ7AAI9GJ8AAXbQWwAEVgC7AAF2lwACPTgDAAJeCr58BAAGFwAEVr8BI/60AwACT6WADwACVEk7AARXZwAEV4QAAwABeTWADwACVEgEmwAEV2QEcwAEWNBzAARXlasABFeZgA8AAl4DAAR9pIAIAAifAAF5OMsABFf1gA8AA/etgA8AAld0CJ7oyFsABFg0uujLAAI9iJ1UWwAEWJC5VwACPYwDAAJeCr58BAAGFwAEWSsBI/60AwACT6WADwACVEk7AARZzwAEWggAAwABeT2ADwACT+wEmwAEWcwEcwAEXoxzAARaKasABFodgA8AAl4DAAR9phVECAAInwABeUDLAARcHYAPAAP3rYAPAAP1RBCeB9BbAARccLsAAXZ/AAI9HJ5T2HsABFzrAAJK3AQABasABF1BgA8AA/AUVACfAAF5LFMABF3HASQFMCQAnwABeTRTAAReTwEkB3goAAMAAl4OvnwEAAYXAARe5wEj/rQDAAJPpYAPAAJP7TsABF+bAARf5AADAAF5RYAPAAJYBASbAARfmARzAARklHMABF/1qwAEX/mADwACXgMABH2kgAgACJ8AAXlIywAEYe2ADwAD962ADwAD9UQUnwABeU4LAARiRwEj/dyeB9BbAARizLsAAXZ/AAI9HJ4JpFsABGNAuwABFrMAAj0gngXYWwAEY6i7AAF2ewACPRifAAF5PFMABGQ7ASQJoCwAAwACXgq+fAQABhMABGTvASP+bAMAAk+lgA8AAlgFOwAEZZcABGX4AAMAAXlRgA8AAlIQBJsABGWUBHMABGasfwAEZhMAAlI8BAAEUwAEZjsBJAyQMAACvnwEAAYXAARnBwEj/rQDAAJPpYAPAAJSETsABGeTAARnyAADAAF4+YAPAAJYQASbAARnkARzAARt0HMABGfZqwAEZ92ADwACXgMABH2kgAgACJ8AAXlUywAEasmADwAD962ADwAD9UQQnwABeVhbAARrWgMABGsvASP9Jg7LAAPyMJ8AAXkoUwAEa+sBJASAIACfAAF5Xg8ABGxvASP+JJ8AAXlQUwAEbU8BJA+MNAADAAJeCr58BAAGEwAEbisBI/5sAwACT6WADwACWEE7AARu4wAEbzAAAwABeWGADwACVEgEmwAEbuAEcwAEcjBzAARvYasABG9lgA8AAl4DAAR9pIAIAAifAAF5ZMsABHAdgA8AA/etgA8AA/VEDJ8AARa4WwAEcIi7AAEWuwACP8CeCkBbAARxBLsAARa/AAI/xJ8AAXj4UwAEcdsBJBDUOAADAAJeCr58BAAGFwAEcosBI/60AwACT6WADwACVEk7AARzLwAEc5QAAwABeWmADwACT+wEmwAEcywEcwAEdEx/AARzrwACUjwEAARTAARz1wEkE6g8AAK+fAQABhcABHSnASP+tAMAAk+lgA8AAk/tKwAEdRQEmwAEdRQEcwAEe6hzAAR1OasABHU9gA8AAl4DAAR9pIAIAAifAAF5bMsABHhBgA8AA/etgA8AA/VEFJ8AAXkiHwAEeLcBI//EnhL6BwAEeWMBI/2AnwABeXBbAAR6EFsABHnsuwABdncAAj0SpF8AAkCInmYAWwAEemy7AAF2nwACPUCfAAF5aFMABHsjASQWMEAAAwACXgq+fAQABhMABHwDASP+bAMAAk+lgA8AAlhAGwACP+oGSwAEfI8ABHzTAASDkAADAAF3XAWrAAR8kYAPAAP1RAgAAAQPAAR9AwAEg5AAAAAEBAcABH1MAAAClYWADwABB4QAAXAE+BD0XwAEfbC7AAF2iKcAAj0s9HMABH7UuwABdvwEAARbAAR/ALsAAXZjAAI8+AMAAj3VOwAEf4cABH/0AAMAAXl1gA8AAlRIBJsABH+EBHMABIEgcwAEgAWrAASACYAPAAJeAwAEfaSACAAInwABFoTHAASANYAPAAJUSAhbAASAVLsAARbHAAI/0FsABIDQuwABdtMAAj2YAwACXgq+fAQABgMABIF7ASQbMAMAAk+lgA8AAlRI9HMABIHYuhhkBAAEmwAEgtwEcwAEgtx/AASCHwACUjwEAAYHAASCRwEkHEwCvnwEAAYDAASDNwEkGzADAAJPpYAPAAJP7AMAAj3kGwACP+4GSwAEhM8ABIUTAASLpAADAAF3WAWrAASE0YAPAAP1RAgAAAQPAASFSwAEi6QAAAAEBAcABIWUAAAClYWADwABB4QAAXAE+A0nAASF+FsABIYsWwAEhgi7AAF2dwACPRMAAXd7AAJAhPgE9HMABIacuwABdvwEAARbAASGyLsAAXZfAAI89AMAAj3U+AT0cwAEh0S6GGQEAAR/AASHiwACXfwEAASfAAF4yAADAAI95TsABIhrAASItAADAAF5eYAPAAJUSASbAASIaARzAASJWHMABIjlqwAEiOmADwACXgMABH2kgAgACJ8AAXl8xwAEiRGADwACVEgEWwAEiRS6xQcAAj/IAwACXgq+fAQABgMABImzASQgZAMAAk+lgA8AAlRI9HMABIoQuhhkBAAEmwAEivAEcwAEivB/AASKVwACUjwEAAYHAASKfwEkIlwCvnwEAAYDAASLSwEkIGQDAAJPpYAPAAJP7AMAAj3kGwACP/IGSwAEi7sABIx7AASPLAADAAF3cAWrAASLvYAPAAP1RAgAAAQPAASM1wAEjywAAAAEBAcABI08AAAClYWADwABB4QAAXQPAAPxnAWADwACVcAE+Ak7AASOIwAEjkgAAhitdA8AA/KkBYAPAAJVwATHAASOvYAPAAJVwAErAASO3AYHAASO+wEkJrwbAAI/9gZLAASPQwAEj6cABJKcAAMAAXecBasABI9FgA8AA/VECAAABA8ABI/fAASSnAAAAAgICwAEkDQAAAICWYAPAAJUSAMABJCYAAAClYWADwABB4QAAYAPAAJP7AT4BPTDAASQ/HMABJE4WwAEkRS6kzcAAj1KlYgIAAhbAASRlLqVOwACPaCfAAF5gALWpBsAAj/6BksABJKzAASS9wAElMgAAwABdtwFqwAEkrWADwAD9UQIAAAEDwAEkzMABJTIAAAAAAAAAXAE+AT0XwAEk1S7AAEWvHMABJPwuwABdvQEAARbAASURLsAARa/AAI/xAMAAj3PAAI/xAABI/WEASP2oAEj/EwBJBpQASQfhAEkJVQBJCeQASQp2AEkK4gAAAAgCwACQAYGSwAElN8ABJT3AAU5CA8AAXmEAAAFgAcAAjzYAAAkEwACQA4GSwAEmicABJp0YwABeYgBgA8AA/esBKwTAAJAEgZLAASbmwAEm9BjAAF5jAGADwAD96wErBMAAkAWBksABKSLAASkxCbE/AGADwACVEgAEwACQBoGSwAEptsABKcMJwABFsgBgA8AAlRIABMAAkAeBksABKdvAASn1GMAARbMAXQPAAPypAWADwACVEgAEwACQCIGSwAEqU8ABKmUJsUAAYAPAAJUSAATAAJAJgZLAASr2wAErBQnAAEW0AGADwACVEgAEwACQCoGSwAErncABK7AJwABFsABgA8AAlRIABMAAkAuBksABK8nAASvRCbE7AGADwACVEgABBcAAkBmBksABK9bAASvWwAEtcwAAAAPAASvnwAEtcwAAAAsCAsABK/sAAACkzWADtaMAwAEsDwAAAKVOYAO11QAJwAEsJgAABLE/YAPAAJUSAWoAYAPAAP0OecABLEIAAASxQGADwACVEgFqAGADwAD9DnnAASxhAAAEwABFsmADwACVEgFqAGADwAD9DnnAASx7AAAEwABFs10DwAD8qQFgA8AAlRIBagBgA8AA/Q55wAEsogAABMAARbRgA8AAlRIBagBgA8AA/Q55wAEsvgAABMAARbBgA8AAlRIBagBgA8AA/Q55wAEs3gAABLE7YAPAAJUSAWoAYAPAAP0OecABLPUAAADAAEWqYQMBYAPAAP3rYAPAAP3rAWoAYAPAAP0OecABLSoAAADAAEWsYAPAAJUcAWoAYAPAAP0OeWADwACQAQE/CAgBwACQBYIAwEkMcQgBwACQCIMAwEkMiggBwACQBoQAwEkMowgBwACQB4UAwEkMvggBwACQCYYAwEkM4AgBwACQCocAwEkM+wgBwACQCxQAwEkNFggACQDAAS09wACP1gQABIDAAS1DwEkMVIHAAS1NwEkMYhTAAS1YwEkNLwkAFMABLWrASQ1TCgAACgbAAJANgZLAASVtwAElgsABJZUBAMAAXbYBasABJW5gA8AA/VECAAABA8ABJY7AASWVAAAAAAAAAGADwAD6PwFKwAElkQEpBsAAkA6BksABJiDAASYzwAEmfQEAwABeZAAAAAEDwAEmRMABJn0AAAAAAAAAYAPAAJXdAT4BSsABJkoBH8ABJlXAAJXmAQABFsABJmQuwABeYsAAkAMABsAAkA+BksABJvjAAScLwAEnOwEAwABeZQAAAAEDwAEnFsABJzsAAAAAAAAAYAPAAJXdAUrAAScZAR/AAScdwACV5gEAARbAAScsLsAAXmPAAJAEAAbAAJARgZLAAS8kwAEvNcABNIEAAMAAXikBasABLyVgA8AA/VECAAAB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wACXgMABH2kgAgACJ8AAXk4ywAE4emADwAD962ADwACV3QInujIWwAE4ii66MsAAj2InVRbAATihLlXAAI9jAMAAl4KvnwEAAYXAATjHwEkTtQDAAJPpYAPAAJUSTsABOPDAATj/AACjf2ADwACT+wEmwAE48AEcwAE5HB/AATkNwACUgwEAASsAr58BAAGFwAE5MsBJE7UAwACT6WADwACT+07AATlbwAE5ZgAAqBVgA8AAk/sBJsABOVsBHMABO6UcwAE5bmrAATlrYAPAAJeAwAEfaYVRAgACJ8AAXnMywAE6X2ADwAD962ADwAD9UQgngfQWwAE6dC7AAF2fwACPRyfAAF50HsABOqDAAJK3AQABasABOrZgA8AA/AUhACfAAF5rhsABOuDASRPSJ8AAXm8UwAE7A8BJFN8IACeaBRTAATshwEkWhgsAJ5T2HsABO0DAAJK3AQABasABO1ZgA8AA/AUVACfAAF5xFMABO3PASRVqCQAnwABechTAATuTwEkV/AoAAMAAl4OvnwEAAYXAATu7wEkTtQDAAJPpYAPAAJP7TsABO+TAATvsAADAAF51YAPAAJP7ASbAATvkARzAATz7HMABO/RqwAE78WADwACXgMABH2mFUQIAAifAAF52MsABPGNgA8AA/etgA8AA/VEEJ4H0FsABPHguwABdn8AAj0cnlPYewAE8lsAAkrcBAAFqwAE8rGADwAD8BRUAJ8AAXnEUwAE8ycBJFWoJACfAAF5yFMABPOnASRX8CgAAwACXg6+fAQABhcABPRHASRO1AMAAk+lgA8AAk/tOwAE9OsABPUUAAMAAXndgA8AAk/sBJsABPToBHMABPiocwAE9TWrAAT1KYAPAAJeAwAEfaYVRAgACJ8AAXngywAE9wmADwAD962ADwAD9UQMnwABd4hbAAT3fFsABPdYuwABdncAAj0TAAF3iwACQIyeoFRTAAT39wEkWzAwAJ8AAXnUUwAE+GsBJF9ANAADAAJeDr58BAAGFwAE+QMBJE7UAwACT6WADwACT+07AAT5jwAE+cQAAwABePmADwACWEAEmwAE+YwEcwAE/chzAAT51asABPnZgA8AAl4DAAR9pIAIAAifAAF55MsABPuVgA8AA/etgA8AA/VEEJ4H0FsABPvouwABdn8AAj0cngXYWwAE/GS7AAF2ewACPRifA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R1nASXvFYAPAAEpETsAAR2zAAEdzAADAAF7JYAPAAEUpARbAAEeEgcAAR3XASXv+utfAAEpGTsAASO/AAEj2AACBdmADwAD8BQFqwABI+GADwAD8BSFOwABJGsAASSUAAMAAXspgA8AARUYBFsAASS6CwABJJ8BJfClqwABFK0TAAEk5PgNOwABJUcAASVkAAF5gA8AARX0BFsAASWaEwABJW8BJfHODGcAARThDwABJcyEcwABJgoXAAEl6wEl8o0gBAAEWwABJkITAAEmFwEl8c4HowABFOQDAAP1ePgNJwABJvhzAAEnKhcAAScLASXyjuXsAAAAAwABFyT4BSsAASecBasAASe5gA8AA/AUJP0nAAEp8IhbAAEqPFsAASoiFwABKgMBJfKO5C8AARYSBVcAA/IsBJcAASqKFwABKmsBJfKNgA8AARvg+AT2LwABKvMBJfFNqwABKxWADwAD8BRU/PY3AAErowEl8oxbAAEr6hcAASvLASXyjg7DAAEWHScAASw4lwABLGoXAAEsSwEl8o2ADwABICz4BPYzAAEsuwEl8cxzAAEtQFsAAS0aEwABLO8BJfHO5FcAARVNLAQABkwDAAPy4ScAAS2IlwABLboXAAEtmwEl8o2ADwABGTD4BScAAS48cwABLpRbAAEuTLsAAXp7AAJCSgxcBAAEUwABLrsBJfKMFAWADwABGTADAAP2oPgE9jMAATMzASXxzHMAATO4WwABM5ITAAEzZwEl8c7kVwABFU0sBAAGTAMAA/Lg+AUrAAE1dASMewABNZMAA9eYCAAKEwABNbsBJfHMWwABNgYLAAE16wEl8KYKMwABFLACDwABNiMBJfFNqwABNkWADwAD8BQkBYAPAAPwFPgFKwABN8wFqwABN+mADwAD8BQkcwABOJoLAAE4fwEl8KYMXAQABhMAATi/ASXxzAMAARS5KwABOQQGDwABOSMBJfFMGwACQvYGTwABOV8AATlzAAE7JAADAAF7LAAAAAQPAAE5qwABOyQAAAAEBAcAAToIAAACBVGADwABKHwAAYAPAAPo/AT4BSsAATo4BIR7AAE6WwAD15gIAAhzAAE6gLqyIAQABgMAATq/ASX8jAMAAkLxqwABOtmADwAD8BQkABsAAkL6Bk8AATs7AAE7TwABP0wAAwABezAAAAAEDwABO4MAAT9MAAAABAQHAAE74AAAAgVRgA8AASh8AAGADwAD6PwE+A07AAE8jwABPKQAApB5gA8AASkQBJsAATyMBgMAATyvASX+iYAPAAEpETsAAT0PAAE9KAADAAF7JYAPAAEUxARbAAE9SgcAAT0zASX+9utfAAEpGSsAAT2UBIiEewABPbcAA9eYCAAIcwABPdy6siAEAAYDAAE+GwEl/ogDAAJC8asAAT41gA8AA/AUJAAAlwABPuRbAAE+0FsAAT7CCwABPqcBJf+aCjMAARSyB6MAARTlgA8AARkwGwACQv4GTwABQrMAAULHAAFGgAADAAF7NAAAAAQPAAFDDwABRoAAAAAEBAcAAUNYAAACZ/2ADwABKEgAAXAE+AUnAAFDjJcAAUO2AwABQ58BJgKBgA8AASho+AT0cwABRFRTAAFEPwEmAoAABYAPAAEoahE0BAAEuAMAAShw+Ak7AAFFVwABRYAAAgmtgA8AASkQBJsAAUVUBgMAAUWLASYCgYAPAAEpEPRzAAFFvLsAAXsQBAAEWwABRiIHAAFF9wEmA9brXwABKRgDAAJC7BsAAkMCBk8AAUaXAAFGuwABSuAAAwABezgAAAAEDwABRysAAUrgAAAABAQHAAFHdAAAAmf9gA8AAShIAAGADwACUAAE+Bk7AAFHzwABR+gAAgXZgA8AAlAABH8AAUgDAAJQMAAAAAE7AAFIfwABSLAAAwABez2ADwACUAAEWwABSLi7AAF6jwACQmD0XwABSRC7AAF6jgcAAUlfASYGLwACQmD0cwABSYy7AAF7NAQABgMAAUnbASYFwAMAAkL89F8AAUoIuwABeo4LAAFKVwEmBrMAAkJhKwABSpwGBwABSrsBJgYsGwACQwYGTwABTm8AAU6jAAFTVAADAAF7QAAAAAQPAAFO3wABU1QAAAAEBAcAAU8EAAACZ/2ADwACUAAAAYAPAAJP7AT4ETsAAU9LAAFPWAACXbGADwAD8BQEWwABT6RbAAFPegMAAU9jASYJWhhbAAJQCYcAA/NhJwABT9RzAAFP9gcAAU/nASYJxSAEAAZMAwAD9KErAAFQDAR/AAFQOwACUIgAAAAA/ScAAVCccwABUL4HAAFQrwEmCcUgBAAGUAMAA/Sg+A07AAFRKwABUUQAAgXZgA8AAk/sBHMAAVGMWwABUWYDAAFRTwEmCVoYWwACUAksBAAGTAMAA/LhJwABUbiXAAFR5gsAAVHLASYLzYAPAAJQASsAAVIYBHMAAVI0uwABe0AEAARTAAFSdwEmC8wIBYAPAAJQAAMAAkME/SsAAVKwBgsAAVLPASYLzP0rAAFTFAYDAAFTMwEmCVgbAAJDCgZPAAFUNwABVG8AAWWEAAMAAXtEAAAABA8AAVS3AAFlhAAAAAQEBwABVRQAAAIJrYAPAAEofAABgA8AAlRIBPgtAJcAAVaCAwABVlcBJg7dgA8AASkTAAFWVwABVwQBOwABVzsAAVegAAMAAXtJgA8AA+j8BFsAAVeouwABem8AAkIU9F8AAVgYuwABemynAAJCFTsAAVj3AAFZQAADAAF7TXQPAAPypAWADwACVEgEWwABWUi7AAF6kwACQmU7AAFZ7wABWjAAAwABe1F0DwAD8qQFgA8AAlRIBMcAAVp1gA8AAlRIAPRfAAFalLsAAXqSDwABWt8BJhE/AAJCZTsAAVuzAAFb/AADAAF7VYAPAAEpEASbAAFbsAYDAAFcBwEmDt2ADwABKRD0cwABXES7AAF7EAQABFsAAVzKEwABXH8BJhJC618AASkYAwACQuz0XwABXRi7AAF6kgsAAV1jASYQkwACQmT0XwABXcC7AAF6bgcAAV4nASYPwwACQhUnAAFeoFsAAV72DwABXrMBJhE+BVcAA/Is+AUrAAFgdAStJwABYNRzAAFhRFsAAWEqDwABYOcBJhE9hwAD82EgBAAGUAMAA/Sg+AUrAAFhfARzAAFh2g8AAWGbASYRPSwEAAZMAwAD8uD4DTsAAWJzAAFijAACBdmADwACVEgEcwABYtoPAAFilwEmET4YXAAAAAMAA/MhDwABYyhbAAFjig8AAWNHASYRPg7LAAPyMPgE9jcAAWPjASYV9H8AAWQXAAJWxAwADJ4CnHMAAWSWDwABZFMBJhE+GFwAAAADAAPzIhcAAWTPASYV9AErAAFlKAYXAAFlRwEmFfQbAAJDDgZPAAFm0wABZyMAAWxoAAIWgAAAAAQPAAFnWwABbGgAAAAIBAcAAWeoAAACCUV0DwAD8qQFgA8AARX0AAcAAWf0AAABqYAPAAPwFAWrAAFoMYAPAAPwFFV0DwAD8qQFgA8AAlRIBPgRAHMAAWjoWwABaM4DAAFoswEmGN2HAAPzYgW0BAAGBwABaPcBJhk8AwAD9NcAAWizAAFpCAE7AAFpdwABaZAAAgXZdA8AA/KkBYAPAAJUSAR7AAFpqwAD2AAEBYAPAAJUSARzAAFqMFsAAWoWAwABafsBJhjdhwAD82IGNAQABgcAAWo7ASYZPAMAA/SsARcAAWpoBwABao8AAWqUAAGJgA8AA/AUBgcAAWqfASYZPARzAAFqwg8AAWq7ASYcOYwEAARbAAFq5gMAAWrLASYY3YcAA/NgAwAD9MgGLwABawcBJhw4cwABawoPAAFrBwEmHDmQBAAGUAMAA/So+Aj0cwABazi6vNwEAARzAAFrYgMAAWtLASYY3SwEAAYPAAFrZwEmHDgDAAPy4AMAAkMg9HMAAWuqCwABa5MBJhrCAvwIAAhzAAFrtg8AAWuvASYcOgY0BAAGBwABa78BJhk8AwAD9KxzAAFr4LqDXAAAAAMAAkLMAwAD8uUrAAFsJAYLAAFsQwEmGsAbAAJDEgZPAAFsfwABbJMAAW8IAAMAAXtYAAAABA8AAWzbAAFvCAAAAAQEBwABbPgAAAMAAVVdgA8AA/esAAGADwAD6PwE+AUrAAFtSASIcwABbaBbAAFtZLsAAXqnAAJCegxcBAAGAwABbccBJiC4AwAD9qAEcwABbqBbAAFuKLsAAXqjAAJCdgxcBAAGAwABbscBJiC4AwAD9qAbAAJDFgZPAAFvHwABb1cAAYOoAAMAAXtcAAAABA8AAW/HAAGDqAAAAAwMDwABb+QAAAMAAVVdgA8AA/esAwABcGwAAAICWYAPAAJUSAMAAXDQAAAClYWADwABB4QAAYAPAAJUSAT4CScAAXPMlwABc/YHAAFz3wEmI3GADwACVoT4DTsAAXR3AAF0kAACCdGADwACVoQEUwABdJsBJiNwBAWADwACVoU7AAF06wABdPQAAqlRgA8AA/esBFsAAXUaDwABdP8BJiSKqVMAAlaNJwABdUCIiIiIiIiIcwABdV4TAAF1UwEmJR0gBAAEnZADAAP36ARzAAF1uhMAAXWvASYlHSAEAASeBjQDAAP36ARzAAF2FhMAAXYLASYlHSAEAASdQAMAA/foBHMAAXZyEwABdmcBJiUdIAQABJ4OIAMAA/foBHMAAXbOEwABdsMBJiUdIAQABJ5W0AMAA/foBHMAAXcqEwABdx8BJiUdIAQABJ4O7AMAA/foBHMAAXeGEwABd3sBJiUdIAQABJ4N3AMAA/foBHMAAXfiEwABd9cBJiUdIAQABJ4EGAMAA/fo+Ak7AAF4YwABeHQAAhbVgA8AAlRIBFsAAXiaDwABeH8BJiSKFtcAAlaRJwABeNCIlwABePYXAAF44wEmKUmADwACV3QAcwABeXBbAAF5XFMAAXlLASYpSBQFgA8AAld2AvcAAldJIAQABgMAAXl/ASYjKAMAA/fo+A07AAF8UwABfGgAAhbdgA8AAlRIBFsAAXyODwABfHMBJiSKFt8AAlaVJwABfNCIiIhzAAF88hMAAXznASYlHSAEAASdkAMAA/foBHMAAX0mEwABfRsBJiUdIAQABJ4GNAMAA/foAJcAAX2iGwABfYsBJispgA8AAlpIAHMAAX5kWwABfkxTAAF+NwEmKygYBYAPAAJaSgJbAAJaUSAEAASfAAEsaAMAA/fo+AUrAAF+vAR/AAF+6wACVwAIAAiMcwABfx4TAAF/EwEmJR0gBAAEnZADAAP36J53XJ53NAWADwAD96xTAAF/dwEmKUgUBYAPAAJXdAD9KwABf+gEfwABgBcAAlW8DAAMWwABgI4PAAGAcwEmJIoW1wACVpITAAGApwEmJRxbAAGA0g8AAYC3ASYkihbfAAJWlAD8/P0rAAGBYASbAAGBYARzAAGCjH8AAYGPAAJVuAgACH8AAYHXAAJXmAQABgMAAYITASYjKAIHAAGCTwEmI3ACvnwEAATUAAAABAGADwACT2AEWwABgv4HAAGC5wEmI3KVhwACT4CMcwABg0YMAwEmMSkgBAAErAACCwABg1MBJiOyDAMBJjEoBYAPAAJPYAMAAk+lgA8AAlRIGwACQxoGTwABg78AAYPTAAGd4AADAAF7YAAAAAQPAAGECwABneAAAAAMDA8AAYQoAAADAAFVXYAPAAP3rAMAAYSYAAACAlmADwACVEgDAAGFFAAAApWFgA8AAQeEAAFwBPgFJwABhXhbAAGFiLsAAXpvAAJCFPgJJwABiGSEcwABiHi7AAF7WAQABgMAAYjHASYzKAMAAkMQ+AT0cwABiaBbAAGJKLsAAXqjAAJCdVgEAAYDAAGJswEmMygDAAP2pPz0cwABiiS6g1AEAARzAAGKZLsAAXtcDAAOAwABitsBJjMqBwABixMBJjNyCwABiy8BJjOwAwACQxQDAAJCyScAAY3YiIRbAAGN7LsAAXqfAAJCcACEcwABjsRbAAGOiLsAAXqnAAJCegxcBAAGAwABjusBJjMoAwAD9qD4FPRzAAGQ9FsAAZB8uwABeqMAAkJ2EWQEAAYDAAGREwEmMygDAAP2rPRzAAGRoFsAAZFkuwABeqcAAkJ5WAQABgMAAZGzASYzKAMAA/alOwABkmMAAZJ0AAL/rYAPAAJXnAR/AAGSjwACV8AEAAYDAAGS6wEmMygBOwABk6cAAZPgAAMAAXiVgA8AAlXABH8AAZQjAAJV5AgACg8AAZSLASY4rgcAAZSjASYzcAD0cwABlNy7AAF63AgACH8AAZWDAAJVPAQABMcAAZaVgA8AAlXABhMAAZabASY5VAILAAGXCwEmM7ADAAJCxPgJJwABmciEcwABmhhbAAGZ3LsAAXqnAAJCegxcBAAGAwABmj8BJjMoAwAD9qD4BPRzAAGbGFsAAZqguwABeqMAAkJ1WAQABgMAAZsrASYzKAMAA/ak/PRzAAGbnLsAAXrcCAAIcwABnDC7AAF7XAwADgMAAZynASYzKgcAAZzfASYzcgsAAZz7ASYzsAMAAkMWCwABnXMBJjOwAwACQsQbAAJDHgZPAAGd9wABngsAAa/4AAMAAXtkAAAABA8AAZ4jAAGv+AAAAAQEBwABnlgAAALjNYAPAAEV9AABcAT4FTsAAaE3AAGhdAADAAF7aYAPAAPo/ASlJwABoaSXAAGh5gMAAaG3ASY+TYAPAAEYuPgFJwABojCIiIiIlwABonBTAAGiQwEmPkwABYAPAAEYuYAPAAEmRASXAAGjIFMAAaLzASY+TAAFgA8AARi5gA8AASa0BJcAAaPQUwABo6MBJj5MAAWADwABGLmADwABK9wElwABpGRTAAGkNwEmPkwABYAPAAEYuYAPAAEsJASXAAGlEFMAAaTjASY+TAAFgA8AARi5gA8AAScY+Ak7AAGlpwABpcwAAgX5gA8AA/esBHMAAaYMWwABpdS7AAF6mwACQm5kcAQABFsAAaZcUwABpi8BJj5MAAWADwABGLrkwwABGMADAAK21ScAAaa4cwABp1RzAAGnAFsAAabIuwABepsAAkJuZHAEAARTAAGnIwEmPkwABYAPAAEYuAMAArbVIAQABgsAAadjASZB2AMAA/fo+AT2JwABp78BJj6kqPz8/ScAAaiQlwABqNIDAAGoowEmPk2ADwABIcD4BPYnAAGpMwEmPqSo/ScAAanAiIoHAAGp0wEmPqQAhHMAAapyAwABqkMBJj5O5ewAAAADAAEXJABzAAGrFFsAAarcuwABepsAAkJuhzwEAAYDAAGrNwEmPkwDAAK24PgM9HMAAauMuwABdywEAAYDAAGrzwEmPkwDAAJDKPRzAAGsHLsAAXtgDAAMcwABrJBbAAGsWLsAAXqbAAJCbmRwBAAGAwABrLMBJj5MAwACttRzAAGs6LqDXAAAAAMAAkLMWwABrV4DAAGtLwEmPk6VhwABFgADAAJDGSsAAa3EAP0nAAGuEFsAAa4guwABem8AAkIU+AT0cwABrqC7AAF3LAQABgMAAa7jASY+TAMAAkMo+AT0cwABr2S7AAF3JAQABgMAAa+jASY+TAMAAkMsGwACQyIGTwABsA8AAbAjAAG39AACvNwAAAAEDwABsC8AAbf0AAAABAQHAAGwZAAAAH2ADwABFfQAAXAE+AUnAAGwpHMAAbC0uwABerQEAAYDAAGxBwEmSjwDAAJCrPgE9HMAAbFQuwABdywEAAYDAAGxkwEmSjwDAAJDKScAAbHoiJcAAbIeAwABsfsBJko9gA8AARi4AIRzAAGyjFsAAbJUuwABepsAAkJuhzwEAARTAAGyrwEmSjwABYAPAAEYuAMAArbg+A07AAGzFwABsywAAo65gA8AARi4BFMAAbM3ASZKPAAFgA8AARi5AIRzAAG07FsAAbS0uwABepsAAkJuhzwEAARbAAG1JgcAAbUPASZMuuTDAAEYwAMAArbjAAG0swABtVgA9HMAAbV8urzcBAAEWwABtaYHAAG1jwEmTLrkwwABGMADAAJDIPgJAHMAAbaAWwABtki7AAF6mwACQm6HPAQABgMAAbajASZKPAMAArbjAAG2SwABtsQA9HMAAbbouoNQBAAEfwABtw8AAleYBAAEcwABt4BbAAG3SLsAAXqbAAJCbmRwBAAGAwABt6MBJko8AwACttQAAwACQsgbAAJDJgZPAAG4CwABuAsAAbjYAAJqPAAAAAQPAAG4HwABuNgAAAAEBAcAAbhUAAACD7mADwABFfQAAWwE+AT0cwABuJoDAAG4hwEmUU4RNAQABLgDAAEXvBsAAkMqBk8AAbjvAAG47wABvCwAAwABdywAAAAEDwABuSsAAbwsAAAABAQHAAG5YAAAAg+5gA8AARX0AAFsBPgROwABuacAAboMAAMAAXtJgA8AA+j8BFsAAboUuwABem8AAkIU9F8AAbqEuwABemynAAJCFPRzAAG7ELpqPAQABgMAAbsrASZSuAMAAkMk9F8AAbtUuwABem4HAAG7uwEmUxMAAkIUGwACQy4GTwABvEMAAbxDAAHAuAADAAF3JAAAAAQPAAG8ewABwLgAAAAEBAcAAbywAAACD7mADwABFfQAAWwE+A0AhFsAAb0AuwABem8AAkIXAAG8/wABvVgA9HMAAb10umo8BAAGAwABvY8BJlVUAwACQyUnAAG9uIRbAAG+DFsAAb3MuwABepMAAkJmBVcAA/Is+A0AcwABvshbAAG+rFsAAb5suwABepMAAkJlhwAD82EgBAAGUAMAA/SjAAG+bwABvtgBOwABvzcAAb9gAAIJrYAPAAJUSARzAAG/aLqDXAAAAAMAAkLM9HMAAb+cuwABetwIAAoHAAHABwEmV8BbAAHASgMAAcA3ASZVVpWHAAEWAAMAAkLE/BsAAkMyBk8AAcDPAAHA4wABwpwAAwABe2wAAAAEDwABwR8AAcKcAAAABAQHAAHBYAAAAgkVgA8AAhYAAAFwBPgE9HMAAcGYuwABetQEAAR/AAHB4wACUgwEAARzAAHCIFsAAcIEut5zAAJBqwACQjsAASKYBAAGAwABwmsBJlnAAwABlKAAAwACQrwbAAJDNgZPAAHCswABwscAAcSsAAMAAXtwAAAABA8AAcMjAAHErAAAAAQEBwABw1AAAAIJFYAPAAIWJAABcAT4BPRzAAHDiLsAAXrUBAAEfwABw9MAAlIMBAAEcwABxBBbAAHD9LrecwACQasAAkI7AAEioAQABgMAAcR7ASZb7AMAAZSkAAMAAkK8GwACQzoGTwABxMMAAcTXAAHGrAADAAF7dAAAAAQPAAHFLwABxqwAAAAEBAcAAcVcAAACCRWADwACFiQAAXAE+AT0cwABxZS7AAF61AQABH8AAcXfAAJSDAQABHMAAcYcWwABxgC63nMAAkGrAAJCOwABIpQEAAYDAAHGewEmXhgDAAGUnAADAAJCvBsAAkM+Bk8AAcbDAAHG9wABy9wAAwABe3gAAAAEDwABxy8AAcvcAAAACAgLAAHHgAAAAgXZgA8AAk/sAwABx/gAAAJkyXQPAAPypAWADwACFgAAAYAPAAJP7AT4CRsAAcgzAAHIywAByIQAAAJkBYAPAAIWAAIHAAHIqwEmYIT4BScAAcjoWwAByRILAAHI+wEmYS8AAWfbAAIWEPgJOwAByX8AAcnAAAMAAXt9gA8AA/esBHMAAcnkWwAByci63nMAAkGrAAJCOwABIpAEAAYLAAHKIwEmYSwDAAGUmPYjAAHKYwEmYER/AAHKlwACU+AIAAoPAAHK5wEmYhIDAAHLLwEmYEQA/SsAAcuYBgMAAcu3ASZgRBsAAkNCBk8AAczvAAHNMwABzegAAussBasAAczxgA8AA/VECAAABA8AAc1fAAHN6AAAAAQEBwABzbAAAAIFUYAPAAEp/AABgA8AA+j8BSsAAc3UBKgbAAJDRgZPAAHN/wABzkMAAfUwAALrNAWrAAHOAYAPAAP1RAgAAAQPAAHOfwAB9TAAAAAEBAcAAc7gAAACBVGADwABKpQAAYAPAAPo/AT4QTsAAc8nAAHPWAACigmADwAD6PwEcwABz2C7AAF7LAQABFsAAc+yAwABz58BJmYeCa8AASqcAwACQvUnAAHP9IYHAAHQCwEmZoj4BPRzAAHQYLsAAXs0BAAEWwAB0MIDAAHQrwEmZh4JrwABKpwDAAJC/P0nAAHRIgcAAdEzASZmiPgE9HMAAdGIuoNQBAAEcwAB0Zy7AAF7RAQABFsAAdH+AwAB0esBJmYeCa8AASqcAwACQwgDAAJCyPgE9HMAAdKAurzcBAAEWwAB0tBbAAHSpgMAAdKTASZmHgmvAAEqnuQPAAEojAMAAkMhOwAB04sAAdOYAAIPRYAPAAJUSARzAAHToLqDXAAAAAMAAkLNOwAB0+MAAdQcAAMAAXuBgA8AA+j8BKk7AAHUqwAB1MAAAhjNdA8AA/KkBYAPAAJTEATHAAHVDYAPAAJTEAE7AAHVTwAB1ZQAAwABUjGADwABHpwEmwAB1UwEWwAB1exbAAHV3FsAAdWyAwAB1Z8BJmYeCa8AASqeCjMAAShWB6MAARTlgA8AAR6dOwAB1mMAAdZ8AAIJRXQPAAPypAWADwABFfQEWwAB1s4XAAHWhwEma8IJRwABFg07AAHXRwAB13AAAuRVdA8AA/KkBYAPAAEVGARbAAHX2FsAAdfCFwAB13sBJmvCZ/8AARYW5FcAARVNOwAB2EMAAdh0AAMAAXs9gA8AAlAABFsAAdh8uwABeo8AAkJhFwAB2NQLAAHY+wAB2SQAAubNgA8AA/AUBlMAAdk7AAHZdAADAAF7hYAPAAPwFAZMBHMAAdnUUwAB2asBJm84JAGMBAAEWwAB2fobAAHZ3wEmbPGHAAPzYAMAA/TIBFcAAdo7ASZviChzAAHacFMAAdo7ASZviCgBkAQABlADAAP0qPgJOwAB2tMAAdr4AAMAAVblgA8AARUYBHMAAdsqHwAB2wMBJm2tLAQABHMAAdtYUwAB2y8BJm84JAIGNAQABlADAAP0rAMAA/LhJwAB3RxbAAHdVFMAAd0vASZxNCwC5FMAARVE+A0TAAHdnPgQ9HMAAd3Yumo8BAAEcwAB3gobAAHd8wEmbPEsBAAEUwAB3g8BJm84JAADAAPy4AMAAkMk9F8AAd5suwABeox/AAHeywACUDAAAAADAAJCYPRzAAHfUhMAAd87ASZrJVgEAAR/AAHfcwACU1AIAAhzAAHfkLqDXAAAAAMAAkLMWwAB36y7AAF6jwACQmAAAwAD8uj0VwAB4CcBJm84JHMAAeBMUwAB4CcBJm84JAGQBAAGUAMAA/SoiHMAAeEQcwAB4M4fAAHgpwEmba0sBAAEcwAB4PxTAAHg0wEmbzgkAgY0BAAGUAMAA/SsAwAD8uEgBAAEUwAB4R8BJnE0LAADAAP1eABzAAHhtFMAAeGLASZvOCQBjAQABFsAAeHaGwAB4b8BJmzxhwAD82ADAAP0yScAAePEcwAB5BBTAAHj1wEmb4goASAEAARzAAHkeFsAAeRcWwAB5DIDAAHkHwEmZh4YWwABKqGHAAPzYgY0BAAGUAMAA/SsAwAD9KD4DPRfAAHkvLsAAXqMfwAB5RsAAlAwAAAAAwACQmD0cwAB5aITAAHliwEmayVYBAAEfwAB5cMAAlN4BAAEWwAB5ey7AAF6jwACQmAAAwAD8uj2LwAB5mcBJmrIpPz0cwAB5wy7AAF7NAQABHMAAeeUWwAB524DAAHnWwEmZh4YWwABKqEsBAAEUwAB55sBJm+IKAADAAPy4AMAAkL8+AUPAAHpdIhzAAHqAHMAAem+HwAB6ZcBJm2tLAQABHMAAensUwAB6cMBJm84JAIGNAQABlADAAP0rAMAA/LhIAQABFMAAeoPASZxNCwAAwAD9XgAcwAB6qRTAAHqewEmbzgkAYwEAARbAAHqyhsAAeqvASZs8YcAA/NgAwAD9Mj4BPRXAAHrJwEmbzgkcwAB6xxTAAHrJwEmbzgkAZAEAAZQAwAD9KknAAHtdIhbAAHt8FsAAe3YWwAB7cRbAAHtmgMAAe2HASZmHhhbAAEqogejAAPyOasAAShS5FMAARVEAIYPAAHuHwEmasj4DPRfAAHufLsAAXqMfwAB7tsAAlAwAAAAAwACQmD0cwAB7zi7AAF7NAQABFsAAe/EWwAB75oDAAHvhwEmZh4YWwABKqIHowAD8jgDAAJC/ScAAe/4WwAB8HhbAAHwTFsAAfAIuwABeo8AAkJiGFsAAlAKDssAA/Iw+AT0cwAB8OoTAAHw0wEmayVYBAAEfwAB8QsAAlN4BAAEWwAB8TS7AAF6jwACQmAAAwAD8uj8/PRfAAHx0LsAAXqMUwAB8h8BJm6UIAMAAkJhOwAB8p8AAfK4AAIF2YAPAAJP7ASbAAHynARzAAHzSH8AAfLzAAJTDAgACgsAAfMbASZqOhMAAfMvASZrJAK+fAQABFsAAfO2AwAB86MBJmYelYcAASqsAwACT6WADwACT+z0cwAB9BS7AAF61AQABHMAAfRMuwABe3gIAAhTAAH0iwEmgiAkAFsAAfS+AwAB9KsBJmYeZMsAASqoAwACQzwDAAJCvSsAAfT0BKQbAAJDSgZPAAH1RwAB9YsAAfa4AALrOAWrAAH1SYAPAAP1RAgAAAQPAAH1zwAB9rgAAAAEBAcAAfZIAAACBVGADwABKTwAAYAPAAPo/AT4BSsAAfZ4BKgbAAJDTgZPAAH2zwAB9xMAAfi0AALrPAWrAAH20YAPAAP1RAgAAAQPAAH3VwAB+LQAAAAEBAcAAffAAAACBVGADwABKOgAAYAPAAPo/AT4CPRzAAH38LsAAXsQBAAEWwAB+D4DAAH4KwEmhwbrVwABKPADAAJC7SsAAfh4BKQbAAJDUgZPAAH4ywAB+Q8AAfpUAALrSAWrAAH4zYAPAAP1RAgAAAQPAAH5ZwAB+lQAAAAEBAcAAfnkAAACBVGADwABKRAAAYAPAAPo/AT4BSsAAfoUBKgbAAJDVgZPAAH6awAB+q8AAfu0AALrRAWrAAH6bYAPAAP1RAgAAAQPAAH65wAB+7QAAAAEBAcAAftEAAACBVGADwABKiwAAYAPAAPo/AT4BSsAAft0BKgbAAJDWgZPAAH7ywAB/A8AAgzAAALrMAWrAAH7zYAPAAP1RAgAAAQPAAH8PwACDMAAAAAEBAcAAfyUAAACBVGADwABKmAAAYAPAAPo/AT4HTsAAfzrAAH8/AACCaWADwACUAAEcwAB/QS7AAF7OAQABFsAAf2OAwAB/XsBJou2CacAASpoAwACQwE7AAH93wAB/gQAAsKlgA8AAlKoBK07AAH+WwAB/ogAAsKpgA8AAlAABK0nAAH+uIRzAAH/CFsAAf7eAwAB/ssBJou26O8AASpxIAQABKwDAAP1ePghPwAB/08AAf9gAAAHAAEw3YQMBYAO8wVwAA8AAf+DAAIC9AAAAAQEBwAB/7QAAALJqYAO8wQAAXAE+AUnAAIAFIRzAAIAWhcAAgAnASaO+SAEAASsAwAD9Xj4BPRzAAICEFsAAgCsuwABI3sAAkGrAAJCRr1gBAAGFwACAnsBJo74AtmE/PRzAAIDOhMAAgMbASaObIAEAARbAAIDfFsAAgM8utATAAJBqwACQprFSuKIAAD0cwACBDITAAIEEwEmjmyABAAEWwACBHRbAAIENLrQEwACQasAAkKaxU7ijAABOwACBUcAAgVsAAIHsYAPAAEhwARbAAIFigMAAgV3ASaLtuufAAEqbTsAAgX7AAIGDAACAvWADwAD96wEcwACBkxbAAIGFLsAAXqbAAJCbmRwBAAGFwACBm8BJpHgAwACttU7AAIHEwACByQAAv+tgA8AAlecBH8AAgc/AAJXwAQABhsAAgebASaSgAE7AAIH8wACCBwAAujtgA8AAlAABHMAAggkuwABezgEAARbAAIIrgMAAgibASaLtujvAAEqcAMAAkMA9isAAgj7ASaNCH8AAgk7AAJS2AgACh8AAglfASaTaFMAAgl3ASaUECAAAP0nAAIJ0IRzAAIKKFsAAgn2AwACCeMBJou2ixMAASp1IAQABKwDAAP1ePgE9i8AAgpvASaNXHMAAgqkuwABezgEAARbAAILLgMAAgsbASaLtosTAAEqdAMAAkMA/PRzAAILkLsAAXrUBAAEfwACC9sAAlKkDAAOBwACC/cBJowiCwACDA8BJo0KDwACDDsBJo1cAAMAAkK9KwACDIQEpBsAAkNeBk8AAgzXAAIM6wACEnQAAwABe4gAAAAEDwACDT8AAhJ0AAAABAQHAAINmAAAAgVRgA8AASmcAAFwBPgFJwACDchzAAIOGFsAAg4AWwACDe4DAAIN2wEmmM4JpwABKcmrAAEoUuR4AAAAAwABFYT4ETsAAg7LAAIO6AADAAF7jYAPAAEoSARbAAIO8LsAAXqvAAJCgPRfAAIPbLsAAXqsWwACEDxbAAIQFFsAAg/8WwACD+oDAAIP1wEmmM4JpwABKcmrAAEoUuRLAAEVPgmnAAEoOwACQoD0cwACEGy7AAF7NAQABFsAAhDOAwACELsBJpjOCacAASnIAwACQvz0XwACEQC7AAF6rgcAAhFrASaZ9wACQoD4BPRzAAIR2LsAAXs0BAAEWwACEjoDAAISJwEmmM4JpwABKcgDAAJC/BsAAkNiBk8AAhKLAAISzwACp3AAAusoBasAAhKNgA8AA/VECAAABA8AAhMDAAKncAAAAAQEBwACE1wAAAIFUYAPAAEpnAABgA8AA+j8BPghOwACE+sAAhQQAAIW6YAPAAEofARbAAIULgMAAhQbASaeBhbrAAEpxTsAAhR/AAIU1AADAAF7kYAPAAPo/ARzAAIU3LsAAXswBAAGBwACFRcBJp5wAwACQvk7AAIVeAAAAvqBgA8AAlDQAQUfAAIVpFsAAhXaAwACFccBJp4GCZ8AASm8DBMAAhdlqwACF2WADwAD8BRXAAIYEasAAhgRgA8AA/AUJwACGMWrAAIYxYAPAAPwFU8AAhl9qwACGX2ADwAD8BYFXAD4LTsAAho/AAIaeAADAAF4lYAPAAEoSARbAAIalgMAAhqDASaeBhQfAAEpwTsAAhr7AAIbRAADAAF7lYAPAAPwFAWrAAIbTYAPAAPwFCUnAAIbrIRzAAIb+hMAAhu/ASahmSAEAASsAwAD9Xj4CPY3AAIcTwEmokBzAAIcoLqyIAQABJsAAhzcBhMAAhzfASahmYAPAAEofAMAAkLxJwACHUhzAAIdphcAAh1bASaiQSAEAAWrAAIdsYAPAAPwFCQDAAP0oPgI9HMAAh4ouwABezQEAAYTAAIedwEmoZgDAAJC/PYzAAIe6wEmoZis/P07AAIiVwACIogAAwABez2ADwACUAAEWwACIpC7AAF6jwACQmE7AAIjHwACI1gAAwABe5mADwACUAAEfwACI3MAAlAwAAAAAPRfAAIj2LsAAXqOHwACJCcBJqXjAAJCYPRzAAIkhLsAAXucBAAEWwACJURbAAIlGFsAAiUKBwACJOMBJp5yCjMAAShW5FcAARVOB6MAA/I4AwACQ4E7AAIllwACJcwAAwABe6GADwAD6PwEhFsAAiZAWwACJhYfAAIl2wEmpeIYWwACUAoFVwAD8iz0XwACJoS7AAF6jhsAAibTASalUwACQmEnAAInLIiIigsAAic/ASafEACEUwACJ9cBJqfAIAAAhHMAAih8WwACKF4DAAIoSwEmngYYswABKc0gBAAErAMAA/V4AHMAAijYuwABeywEAARbAAIpKgMAAikXASaeBhizAAEpzAMAAkL0+C07AAIrhwACK8gAAwABe6WADwACVEgErScAAiwQhHMAAixeEwACLCMBJqGZIAQABKwDAAP1ePgNOwACLMsAAi0gAAMAAXupgA8AA/AUBFsAAi2gWwACLSi7AAF6owACQnWHAAMzFPRXAAIt8wEmqqgkcwACLjy7AAF7RAQABJsAAi6IBhMAAi6LASahmYAPAAEofAMAAkMJJwACLvyIhFsAAi8QuwABep8AAkJwAHMAAjAgUwACL8sBJquEKAGMBAAEWwACMKBbAAIwKLsAAXqjAAJCdYcAAzMUAwAD9Mj4DTsAAjbcAAADAAE+WXQPAAPypAWADwACVXgBPwACN08AAjdgAAAHAAF7rYQMBYAPAAJUSYAPAAPo/AAPAAI3swACQvAAAAAEBAcAAjfsAAACCa2ADwACVEgAAYAPAAPo/AT4CScAAjhklwACOKBTAAI4dwEmr0g0AYAPAAJVePgJOwACOXMAAjmcAALAmYAPAAJVeARTAAI5pwEmr0g0BYAPAAJVeScAAjociJcAAjqMWwACOlhTAAI6LwEmsCg4AsJ3AAJVgYAPAAJXdACEWwACO2hTAAI7PwEmsCg4Ao7bAAJVlPgNJwACO/BzAAI8MFMAAjwDASauKCwBIAQABKwDAAP1ePRXAAI8VwEmrigsxwACPMmADwACVXgA/PRzAAI9WFMAAj0rASauKCwBWAQABFMAAj1rASavSDQFgA8AAlV4AwAD8ukrAAI97ASk/ScAAj7MWwACPwhTAAI+3wEmr0g0AwABe7MAAk+E+Ak7AAI/xwACP+AAAgnRgA8AAlaEBJsAAj/EBFMAAj/rASavSDQBgA8AAlaFKwACQGAEiHMAAkDMUwACQH8BJq6gMACABAAEWwACQOxTAAJA0wEms+Q4AhbXAAJWkAAAAHMAAkG4UwACQWsBJq6gMACABAAEWwACQdhTAAJBvwEms+Q4AhbfAAJWlAAA/SsAAkKABKknAAJDNHMAAkOUUwACQ0cBJq6gMACABAAEUwACQ5sBJqqoJAAAAPgNOwACRK8AAkTEAAMAAXu1dA8AA/KkBYAPAAJVwATHAAJFiYAPAAJVwAEbAAJF2wACRpMAAkYkAAACwJmADwACVXgAUwACRl8BJq4oLAD4FTsAAkb/AAJHCAACzmmADwAD96wEWwACR8CbAAJHdABbAAJHQFMAAkcXASa3lDgCwncAAlWBgA8AAld2AvcAAldJOwACSEMAAkhwAAJ6lYAPAAJPbAR/AAJIiwACV8AEAARTAAJI5wEmuAw8AAD0cwACSVhTAAJJQwEmttA0AVgEAAR/AAJJewACVeQIAAibAAJKPARTAAJKPwEmuRBAAYAPAAJUZFsAAkqcUwACSnMBJreUOAICWwACVYgAAwAD8uj0cwACS4BbAAJLCLsAAXqjAAJCdhFkBAAEUwACS58BJrgMPAADAAP2rPRzAAJMNFsAAkv4uwABeqcAAkJ5WAQABFMAAkxHASa4DDwAAwAD9qT0VwACTOMBJqqoJH8AAk0/AAJVPAQABFMAAk2rASa20DQAAPz8/TsAAk7TAAJPAAADAAF7uYAPAAJUSARzAAJPCLsAAXtEBAAGBwACT1cBJp5wAwACQwk7AAJP5wACUAwAAwABe72ADwACVEgEcwACUBS7AAF7RAQABFsAAlB2AwACUGMBJp4GGLMAASnMAwACQwj2OwACU+8BJqVQWwACVCi7AAF6jwACQmE7AAJUzwACVOAAAgmlgA8AAk/sBH8AAlT7AAJQMAAAAAD0XwACVWi7AAF6jJsAAlVoBFMAAlW3ASa/ADABgA8AAlADAAJCYPRzAAJV9LsAAXuIBAAGAwACVk8BJp4EAwACQ1z0XwACVpC7AAF6jhsAAlbfASalUwACQmD0VwACVz8BJr8AMHMAAldYuwABe0AEAASbAAJXmARTAAJXmwEmvwAwAYAPAAJQAAMAAkME9i8AAlffASaf1JsAAlfcBHMAAlkgfwACWAsAAlEYEAAQUwACWCcBJqqoJABTAAJYbwEmvOwoAFMAAlijASa9sCwAUwACWM8BJr8AMAACvnwEAARbAAJZjgMAAll7ASaeBpWHAAEp2AMAAk+lgA8AAlDQ+CUnAAJb5IRzAAJcMhMAAlv3ASahmSAEAASsAwAD9Xj4BPRzAAJcjLsAAXs0BAAGEwACXNsBJqGYAwACQvz9OwACXawAAAMAAXu5gA8AAlRIATsAAl4vAAJeYAADAAF7PYAPAAJQAARbAAJeaLsAAXqPAAJCYTsAAl8PAAJfIAACCaWADwACT+wEfwACXzsAAlAwAAAAAScAAl+oigsAAl+7ASafEACEUwACYCMBJqfAIAD4CPRXAAJglwEmxIAkcwACYMy7AAF7RAQABgcAAmEbASaecAMAAkMI9F8AAmF4uwABeoybAAJheARTAAJhxwEmxVwsAYAPAAJQAwACQmD4JPRXAAJiWwEmxIAkcwACYpC7AAF7wAgACKRbAAJi+gMAAmLnASaeBpWHAAEp2AMAAkR89F8AAmN4uwABeoybAAJjeARTAAJjxwEmxVwsAYAPAAJQAwACQmD0cwACZAy7AAF7NAQABgcAAmRbASaecAMAAkL89HMAAmS4urzcBAAEWwACZPIHAAJkywEmnnLkDwABKIwDAAJDITsAAmWzAAJlzAADAAF7xYAPAAJUSAR/AAJl5wACVwAIAAieZ6RzAAJmILqDXAAAAAMAAkLMATsAAmanAAJmxAADAAF7yYAPAAJP7AR/AAJm3wACUgwEAASsATsAAmeAAAADAAF7zYAPAAJP7AEnAAJn2FsAAmhQWwACaCYfAAJn6wEmpeIYWwACUAoFVwAD8iz4BPRXAAJotwEmy1w4UwACaOMBJsrMNAD4CPRzAAJp+FsAAmnOHwACaZMBJqXiGFsAAlAJWAQABFMAAmoLASbKzDQAAwAD8uj0VwACamsBJstcOh8AAmqXASal4PRzAAJrPLsAAXrUBAAEfwACa4cAAlDMCAAIUwACa7sBJsn0MABTAAJr2wEmy1w4AAADAAJCvScAAmxghHMAAmykWwACbIYDAAJscwEmngYYswABKc0gBAAErAMAA/V4+Aj0cwACbQC7AAF70AQABgMAAm1jASaeBAMAAkNo9HMAAm2suwABezQEAARbAAJuDgMAAm37ASaeBhizAAEpzAMAAkL8+AT0cwACbrC7AAF7iAQABgMAAm8LASaeBAMAAkNc9F8AAm98uwABeoxTAAJvywEmxMwoAwACQmD0VwACcCsBJsVcLHMAAnBEuwABe0AEAASbAAJwhARTAAJwhwEmxVwsAYAPAAJQAAMAAkME9i8AAnDLASaf1JsAAnDIBHMAAnGgfwACcPcAAlF8CAAIUwACcRsBJsSAJABTAAJxTwEmxVwsAAK+fAQABFsAAnIOAwACcfsBJp4GlYcAASnYAwACT6WADwACUNELAAJypAAHAAJzRasAAnNFgA8AA/AUhAD4WScAAnOghHMAAnP0WwACc8YDAAJzswEmngYUHwABKcEgBAAErAMAA/V4+AT0cwACdEi7AAF7NAQABFsAAnSqAwACdJcBJp4GFB8AASnAAwACQvz9OwACd78AAnfwAAMAAXs9gA8AAlAABFsAAnf4uwABeo8AAkJhOwACeIcAAnjQAAMAAXvVgA8AAlAABH8AAnjrAAJQMAAAAAD0XwACeVC7AAF6jhcAAnmfASbVnwACQmD0cwACegy7AAF7nAQABFsAAnrMWwACeqBbAAJ6kgcAAnprASaecgozAAEoVuRXAAEVTgejAAPyOAMAAkOBOwACex8AAntkAAMAAXvZgA8AA+j8BIRbAAJ76FsAAnu+FwACe3MBJtWeGFsAAlAKBVcAA/Is9F8AAnwsuwABeo4TAAJ8ewEm1Q8AAkJg9jMAAnzXASbVDFsAAn0QuwABeo8AAkJhOwACfZ8AAn2wAAIJpYAPAAJQAAR/AAJ9ywACUDAAAAABOwACg48AAoO0AAMAAXvdgA8AARUYBHMAAoQIWwACg+BbAAKD0gMAAoO/ASaeBgozAAEp6uRXAAEVTSwEAAZMAwAD8uE7AAKEYwAChIwAAwABe+GADwACUAAEfwAChKcAAlAwAAAAAPRfAAKFDLsAAXqMUwAChVsBJtqoJAMAAkJg9HMAAoWouwABe5wEAARTAAKGBwEm2ZggAAMAAkOBOwAChmsAAoagAAMAAXuhgA8AA+j8BIRbAAKHBFsAAobYUwAChq8BJtqoJAIYWwACUAoFVwAD8iz0XwACh0i7AAF6jh8AAoeXASbZFwACQmD0cwACh8y7AAF7iAQABgMAAognASaeBAMAAkNdJwACiGCEcwACiKRbAAKIhgMAAohzASaeBhizAAEpzSAEAASsAwAD9Xj4BPRzAAKI+LsAAXs0BAAEWwACiVoDAAKJRwEmngYYswABKcwDAAJC/P0nAAKJygsAAonbASafEPgE9HMAAopkuoNQBAAEcwACini7AAF7RAQABgcAAorHASaecAMAAkMIAwACQsj4CPRzAAKLZLsAAXs0BAAGBwACi7MBJp5wAwACQvz0cwACjAi6vNwEAARbAAKMQgcAAowbASaecuQPAAEojAMAAkMhOwACjRsAAo1IAAMAAXu5gA8AAlRIBHMAAo1QuoNcAAAAAwACQs0nAAKNjHMAAo3MUwACjZ8BJuEMLAEgBAAErAMAA/V4+AT2LwACkQcBJp/UmwACkQQEcwACkux/AAKRMwACUXwIAAhzAAKRVLsAAXvACAAIpFsAApG+AwACkasBJp4GlYcAASnYAwACRHxzAAKSVLsAAXtABAAGHwACkpcBJtkUAwACQwQCvnwEAARbAAKTWgMAApNHASaeBpWHAAEp2AMAAk+lgA8AAlDQ+AknAAKUFIhTAAKUJwEm3BQoAAYbAAKUawEm13z4GPRzAAKVRFsAApUYUwAClO8BJtqoJAIYWwACUAlYBAAEfwAClWcAAlHcBAAErAADAAPy6TsAApYbAAKWOAADAAF7yYAPAAJP7AR/AAKWUwACUgwEAASsATsAApb0AAADAAF7zYAPAAJP7AEnAAKXTFsAApfUWwACl6oXAAKXXwEm1Z4YWwACUAoFVwAD8iz4BPRXAAKYOwEm5iA0UwACmGcBJuWQMAD4CPRzAAKZjFsAApliFwACmRcBJtWeGFsAAlAJWAQABFMAApmfASblkDAAAwAD8uj0VwACmf8BJuYgNhcAAporASbVnPRzAAKbIFsAApr2HwACmuMBJtkWGFsAAlAJWAQABH8AAptDAAJQyAwADFMAAptbASbhDCwAUwACm48BJtqoJABTAAKbvwEm5iA0AAADAAPy6PRXAAKcHwEm4QwscwACnFS7AAF7wAgACKRbAAKcvgMAApyrASaeBpWHAAEp2AMAAkR8/PYvAAKdZwEmn9SbAAKdZARzAAKedH8AAp2TAAJRrAgACHMAAp2ouwABe0AEAAYfAAKd6wEm2RQDAAJDBFMAAp4HASbhDCwAAr58BAAEWwACnuIDAAKezwEmngaVhwABKdgDAAJPpYAPAAJQ0PRfAAKfeLsAAXqOEwACn8cBJtUPAAJCYQsAAqAcAAAE+AT0ewACoJbXDAgACFsAAqDiBwACoLsBJp5y5A8AASiMkwACofgMnwABe+RbAAKh3gMAAqHLASaeBgmfAAEpvJ4FqAE7AAKiYwAConwAAgXZgA8AAk/sBg8AAqKHASaf1ScAAqKscwACouRbAAKi0gMAAqK/ASaeBgmfAAEpvSAEAAWrAAKjSYAPAAPwFgVcAwAD9KD4CTsAAqPfAAKkLAADAAF76YAPAAP3rARzAAKkeFsAAqRcut5zAAJBqwACQjsAASKgBAAEWwACpPYDAAKk4wEmngYJFwABKdADAAGUpPYzAAKlMwEm7bx/AAKlZwACU+AIAAoXAAKltwEm7woTAAKmCwEm7bwA/PRzAAKmVLsAAXrUBAAEcwACpoy7AAF7eAgAChMAAqbLASbtvFsAAqb+AwACpusBJp4GZMsAASnUAwACQzwDAAJCvSsAAqc0BKQbAAJDZgZPAAKnhwACp8sAAs9IAALrJAWrAAKniYAPAAP1RAgAAAQPAAKoHwACz0gAAAAEBAcAAqiEAAADAAF77YAPAAEpZAABgA8AA+j8BPg5OwACqRsAAqlgAAMAAXvxdA5LnAWADvK0BasAAqmBdA5LnAWADvK3AAWl7TsAAqn7AAKqLAADAAF7PYAPAAJQAARbAAKqNLsAAXqPAAJCYTsAAqqzAAKqxAACCaWADwACUAAEfwACqt8AAlAwAAAAATsAAqtrAAKrhAACBdmADwACT+wGDwACq48BJvSE9F8AAqu4uwABeo4PAAKsBwEm9IcAAkJhJwACr5RbAAKv6gMAAq+nASby1utrAAEpePgZGwACsDsAArEXAAKwjAAAAmQFgA8AAhYAAFsAArD2AwACsLMBJvLWZMsAASlw+AUnAAKxPFsAArFmFwACsU8BJvZqjiMAAhYY+BE7AAKx+wACsiAAAo2NgA8AA/esBHMAArJEWwACsii63nMAAkGrAAJCOwABIpgEAAYXAAKyjwEm9mgDAAGUoPYzAAKy1wEm9Qh/AAKzCwACU+AIAAobAAKzWwEm93ITAAKzhwEm9QgA9HMAArQMWwACs9C7AAF6hwACQlVYBAAGFwACtB8BJvZoAwAD9qT2JwACtGcBJvNIcwACtP4HAAK0twEm80oPoAQABhcAArUfASb2aAJL0P07AAK5JwACuUAAAgkVgA8AAhYkBFsAArmOAwACuUsBJvLWCRcAASl1OwACueMAAroIAAKNjYAPAAP3rARzAAK6LFsAAroQut5zAAJBqwACQjsAASKgBAAGFwACupcBJvpMAwABlKT2MwACutMBJvUIfwACuwcAAlPgCAAKGwACu1cBJvruEwACu4MBJvUIAPRzAAK8GFsAAru8uwABeosAAkJZWAQABhcAArwrASb6TAMAA/ak9icAArxnASbzSHMAArz+BwACvLcBJvNKD6AEAAYXAAK9HwEm+kwCS9D4BRsAAr2PAAK+awACveAAAAJkBYAPAAIWAABbAAK+SgMAAr4HASby1mTLAAEpcPgFJwACvpBbAAK+uhcAAr6jASb97o3zAAIWFPgJOwACv0MAAr9oAAKNjYAPAAP3rARzAAK/jFsAAr9wut5zAAJBqwACQjsAASKQBAAGFwACv8sBJv3sAwABlJj2MwACwBMBJvUIfwACwEcAAlPgCAAKGwACwJcBJv72EwACwMMBJvUIAP07AALBgwACwZwAAgkVgA8AAhYkBFsAAsHqAwACwacBJvLWCRcAASl1JwACwhhbAALCRhcAAsIrAScAlwABMQcAAhZE+A07AALFTwACxXQAAo2NgA8AA/esBHMAAsWYWwACxXy63nMAAkGrAAJCOwABIpQEAAYXAALF9wEnAJQDAAGUnPYzAALGMwEm9Qh/AALGZwACU+AIAAobAALGtwEnAaoTAALG4wEm9QgA9HMAAsdMWwACxxy7AAF6gwACQlFYBAAGFwACx18BJwCUAwAD9qT89F8AAsesuwABeo4PAALH+wEm9IcAAkJg9HMAAsgguwABezQEAARbAALIsgMAAshvASby1gmnAAEpbAMAAkL9JwACyOBbAALJNgMAAsjzASby1utrAAEpePgFDwACyYSEWwACye4HAALJpwEm80oFVkuw+Az0cwACynRbAALKOLsAAXqHAAJCVhFkBAAEWwACytoHAALKkwEm80oPqkukAwAD9qz0cwACy3BbAALLFLsAAXqLAAJCWhFkBAAEWwACy9YHAALLjwEm80oPqkukAwAD9qz2JwACzBMBJvNIWwACzKoHAALMYwEm80oPrkuo+AT0cwACzVxbAALNLLsAAXqDAAJCUhFkBAAEWwACzb4DAALNewEm8tYJFwABKXQDAAP2rPRfAALODLsAAXqOCwACzlsBJvP3AAJCYPRzAALOoLsAAXrUBAAGEwACztsBJvUIAwACQr0rAALPDASkGwACQ2oGTwAC0OsAAtD/AALjXAADA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jQAAAKVhYAPAAEHhAABcAT4EPRzAANKmLq83AQABFsAA0q+AwADSqsBJ12GFtcAAR2YAwACQyE7AANLIwADSzwAAwABfD2ADwACVEgEcwADS0S6g1wAAAADAAJCzPRzAANLcLq83AQABFsAA0uWAwADS4MBJ12GFt8AAR2cAwACQyD0cwADS8S6g1AEAASbAANMgARzAANMgH8AA0vrAAJWxAwADgcAA0wTASddxg8AA0wjASde8HMAA0xAuoNcAAAAAwACQswCvnwEAAYLAANM2wEnXgQDAAJPpYAPAAJUSAMAAkLIGwACQ44GTwADTUsAA017AANOYAAC4lwFqwADTU2ADwAD9UQIAAAEDwADTbMAA05gAAAABAQHAANN4AAAAg+5gA8AASYkAAFsBPgE9HMAA04QurzcBAAEWwADTjYDAANOIwEnYoIJFwABJiwDAAJDIBsAAkOSBk8AA053AANOdwADUDAAAuPQAAAABA8AA067AANQMAAAAAgICwADTvQAAAIPuYAPAAEdiAMAA08oAAACqVGADwAD96wAAWwE+AT0cwADT1C7AAF8OAwADgMAA0+fASdkEgcAA0+3ASdkUFsAA0/aAwADT8cBJ2QSlYcAARYAAwACQ4gbAAJDlgZPAANQRwADUEcAA1HwAALj9AAAAAQPAANQgwADUfAAAAAICAsAA1C0AAACD7mADwABImADAANQ6AAAAqlRgA8AA/esAAFsBPgE9HMAA1EQuwABfDgMAA4DAANRXwEnZjIHAANRdwEnZnBbAANRmgMAA1GHASdmMpWHAAEWAAMAAkOIGwACQ5oGTwADU9cAA1PXAANYHAADAAF8QAAAAAQPAANUJwADWBwAAAAICAsAA1RcAAACD7mADwABHsQDAANUkAAAAqlRgA8AA/esAAFsBPgI9HMAA1S4uuPQCAAKAwADVQMBJ2haBwADVRsBJ2iYAwACQ5EnAANVPIiEcwADVVoHAANVTwEnaJkgBAAEnlbUAwAD9+gAcwADVYi7AAF60AQABgMAA1XnASdoWAMAAkK4+AT0cwADViC6g1AEAASbAANXPARzAANXPH8AA1ZHAAJWxAwADJ5W1HMAA1aIuoNcAAAAAwACQsx/AANWtwACWnQEAASeECAAAr58BAAEWwADV6oDAANXlwEnaFqVhwABFgADAAJPpYAPAAJUS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rIZgA8AAlRwBHMABD8gWwAEPwS63nMAAkGrAAJCOr4gBAAEmwAEP4AEWwAEP4IDAAQ/bwEoIRJYmwABGumADvOgAwABlF07AARACwAEQDAAAW10DwAD8qQFgA8AAlRIBHMABEA4uhaABAAEWwAEQIoDAARAdwEoIRIJRwABFgwDAAJDDPRzAARAvLqDUAQABJsABEHUBHMABEHUewAEQNMAAkroDAAOBwAEQTcBKCI6CwAEQVcBKCLKDwAEQYcBKCQMAr58BAAEWwAEQkIDAARCLwEoIRKVhwABFgADAAJPpYAPAAJUSAMAAkLI9HMABELMWwAEQqS7AAEjewACQasAAkJGvWwEAAR7AARDJwABnxQIAAibAARD3ARbAARD3gMABEPLASghElibAAEa6YAO9Bx/AAREEwABo0gEAARbAAREkg8ABERrASgkDYcAA/NgAAAC2YgbAAJEKgZPAARE2wAERR8ABFF8AALiUAWrAARE3YAPAAP1RAgAAAQPAARFfwAEUXwAAAAEBAcABEXUAAACD7mADwABG2gAAXAE+A07AARGQwAERmAAAliZgA8AAdU8BJsABEZABFsABEZ+AwAERmsBKCkmWJsAARrpgA8AAdU9JwAERrBbAARG4gcABEbDASgpfhQLAAHUAPgU9HMABEdIurzcBAAEcwAER4RbAARHbgMABEdbASgpJglHAAEWDSwEAAZMAwAD8uADAAJDITsABEfvAARICAACDwGADwACVEgEcwAESBC6g1wAAAADAAJCzTsABEiXAARIvAABbXQPAAPypAWADwACVEgEcwAESMS6FoAEAARbAARJFgMABEkDASgpJglHAAEWDAMAAkMNOwAESXMABEmcAAKyGYAPAAJUcARzAARJwFsABEmkut5zAAJBqwACQjq+IAQABgcABEoPASgpfAMAAZRc9HMABEpMuoNQBAAEmwAES3QEcwAES3R7AARKYwACSugMAA4LAARKzwEoK4oTAARK7wEoLRIPAARLHwEoLBgCvnwEAARbAARL4gMABEvPASgpJpWHAAEWAAMAAk+lgA8AAlRIAwACQsj4DPRzAARMgLqDUAQABHMABEy4WwAETJS7AAEPRwACQasAAkInAAEPgAQABgcABE0PASgpfAMAAXNIAwACQsk7AARNowAETcgAAW10DwAD8qQFgA8AAlRIBHMABE3QuhaACAAEWwAETiIDAARODwEoKSYJRwABFgwFqk8AAkMM9HMABE6EuoNQBAAEfwAETqsAAlZgDAAIcwAETsi6g1wAAAADAAJCzgsABE7nASgwnAaVhFsABE+aAwAET4cBKCkmlYcAARYAAwACQsj0cwAEUGRbAARQGLsAASN7AAJBqwACQka9bAQABHsABFC/AAGfGAQABJsABFFIBFsABFFKAwAEUTcBKCkmWJsAARrpgA7zoAAC2YgbAAJELgZPAARRkwAEUdcABF8AAALiiAWrAARRlYAPAAP1RAgAAAQPAARSMwAEXwAAAAAEBAcABFKEAAACD7mADwABJEwAAXAE+CU7AARTBwAEUywAAW10DwAD8qQFgA8AAlRIBHMABFM0uhaABAAEWwAEU4YDAARTcwEoNNIJRwABFgwDAAJDDTsABFPzAARUEAACw7WADwACVEgEcwAEVFRbAARUOLrecwACQasAAkI6vngEAARbAARVAFsABFTAutATAAJBqwACQprEXuGYAwABlDU7AARVjwAEVbAAApPFgA8AAS2QBFsABFXOAwAEVbsBKDTSk8cAARn1OwAEVksABFZoAAISDXQPAAP2cAWADvMEBHMABFbUWwAEVpC7AAFM5wACQasAAkKjAAFMmAgACFsABFdaDwAEVzcBKDdSAvcAAS3IWwAEV3C61qsAAkGrAAJCQAMAAehQ9HMABFfkWwAEV7y7AAEjewACQasAAkJGvTQEAAYPAARYUwEoN1AC2ak7AARYrwAEWNgAArIZgA8AAlRwBHMABFj8WwAEWOC63nMAAkGrAAJCOr5oCAAKDwAEWWcBKDdSEwAEWY8BKDfwAwABlGz0cwAEWcS6g1AEAASbAARa4ARzAARa4HsABFnbAAJK6AwADgsABFo/ASg2IhcABFpjASg6FgcABFqTASg1KAK+fAQABFsABFtOAwAEWzsBKDTSlYcAARYAAwACT6WADwACVEgDAAJCyScABFuwWwAEW+YPAARbwwEoN1IUzwABLdD4BPRzAARcLLsAAXyMBAAGAwAEXGsBKDTQAwACRD0nAARcsFsABFzmDwAEXMMBKDdSFNcAAS3U+AT0cwAEXSy7AAF8kAQABgMABF1rASg00AMAAkQ4+AT0cwAEXdC7AAF8iAQABgMABF4nASg00AMAAkQ09HMABF6QWwAEXmi7AAEjewACQasAAkJGvRwAAAAC2awbAAJEMgZPAARfFwAEX08ABG+kAAMAAXyUAAAABA8ABF+rAARvpAAAAAwMDwAEYAQAAAIPuYAPAAEZ6AMABGBAAAACk8WADwABLZADAARgoAAAArMNgA73nAABgA73nAT4CScABGDQhHMABGEUWwAEYPYDAARg4wEoQCZYmwABGgUgBAAErAMAA/V4+Ak7AARljwAEZbQAAreFgA7zBARbAARl8FsABGXSAwAEZb8BKEAmWJsAARoGE/7zhScABGZIcwAEZshbAARmjFsABGZYutarAAJBqwACQkKtowABNOaoIAQABg8ABGcHAShBrAMAAcQA+AUrAARnXARzAARnzFsABGd4uwABTisAAkGrAAJCptTkBAAGDwAEaBsBKEGsAvg8+AkAcwAEasBbAARqjLrWqwACQasAAkJCbFgEAAYPAARq+wEoQawDAAE1FwAEao8ABGsgBHsABGta1wwIAAoDAARrwwEoQCSQABifAAF8mFsABGxaAwAEbEcBKEAmWJsAARoEnm5SDwAEbJcBKEGsnwABALyfAAF8nAErAARtnARzAARuDFsABG24uwABTisAAkGrAAJCptTwBAAGDwAEbmMBKEGsAvhI/SsABG7YBNQAAAAEAYAO95wGCwAEbvcBKECkjHMABG8KDAMBKEbFIAQABKwAAFsABG9oWwAEbxS7AAFOKwACQasAAkKmebb30gwDAShGxAWADvecGwACRDYGTwAEb7sABG/PAASOdAADAAF8iAAAAAQPAARwHwAEjnQAAAAEBAcABHBcAAACD7mADwABGegAAXAE+BE7AARwswAEcNQAApPFgA8AAS2QBFsABHDyAwAEcN8BKEimk8cAARn1OwAEdCMABHQ8AAIJFYAO80wEWwAEdFoDAAR0RwEoSKZYmwABGgUnAAR0jIiIcwAEdL4LAAR0owEoSZ0gBAAErAMAA/V4BFsABHUGCwAEdOsBKEmeFM7zcACEcwAEe24HAAR7SwEoSP0gBAAEawAEe6LgbAMAA/V4+Ak7AAR+2wAEfuwAAIGADwABLZAEewAEfwcAAS5YBAAGBwAEf2sBKEj8APRzAASAAFsABH+suwABI3sAAkGrAAJCRr10BAAEfwAEgF8AAZ4gDAAODwAEgIsBKEuErFsABIDOAwAEgLsBKEimFHcAARoUAALZjP0nAASBOIRzAASBZgsABIFLAShJnSAEAASsAwAD9Xj4DQBzAASF8gcABIXPAShI/sqMBAAGCwAEhhMBKEmcAwABLhMABIXPAASGLAR7AASGXtcMCAAKAwAEhoMBKEikkwAEhywOBwAEhqMBKEj8nwABfKILAASHEwEoSZwBAIiEWwAEh5oHAASHdwEoSP4UzwABLdAAhFsABIfyBwAEh88BKEj+FNcAAS3XAASHcwAEiBAEkwAEiQwMnwABfKYHAASI5wEoSPyeBaj0cwAEiVhbAASJMLsAASN7AAJBqwACQka9bAQABHsABImzAAGfHAwADJsABIo4BgsABIo7AShJnYAO86BbAASKfgcABIpbAShI/tK7AAEtpFsABIrOAwAEirsBKEimFHcAARoUAALZiPgJOwAEi5cABIuoAAKzDYAO95wEcwAEi9i7AAF8lAwADgMABIw7AShIpgcABIxTAShI/FsABIyOAwAEjHsBKEimFgsAARoMAwACRDD0cwAEjQhbAASM4LsAASN7AAJBqwACQka9dAQABH8ABI2TAAGeIAwADgcABI2/AShI/g8ABI3nAShSJFsABI4SAwAEjf8BKEimFHcAARoUAALZjBsAAkQ6Bk8ABI6LAASOnwAEmZwAAwABfJAAAAAEDwAEjtcABJmcAAAACAQHAASPFAAAAg+5gA8AARnoAAcABI9EAAAC55mADwAD6PwFqwAEj3WADwAD6PwBcAT4BScABI+siJcABI/wWwAEj9IDAASPvwEoVUZYmwABGgWADvOUAIYHAASQPwEoVYj4BPRzAASUrFsABJSEuwABI3sAAkGrAAJCRr1sBAAEewAElQcAAZ8kBAAEmwAElWgEWwAElWoDAASVVwEoVUZYmwABGgWADvOUAALZiPgNOwAElgcABJYoAAKTxYAPAAEtkARbAASWRgMABJYzAShVRpPHAAEZ9TsABJa/AASW0AACsw2ADvecBHMABJcAuwABfJQMAA4DAASXYwEoVUYLAASXewEoWABbAASXtgMABJejAShVRhYLAAEaDAMAAkQw9HMABJgwWwAEmAi7AAEjewACQasAAkJGvXQEAAR/AASYuwABniAMAA4LAASY5wEoWAIPAASZDwEoWKBbAASZOgMABJknAShVRhR3AAEaFAAC2YwbAAJEPgZPAASZswAEmccABKcUAAMAAXyMAAAABA8ABJn/AASnFAAAAAQEBwAEmjwAAAIPuYAPAAEZ6AABcAT4BScABJpsiIRzAASasFsABJqSAwAEmn8BKFvCWJsAARoFIAQABKwDAAP1eACIWwAEmzRbAASbFgMABJsDAShbwlibAAEaBhTO83AEWwAEm5hbAASbegMABJtnAShbwlibAAEaBh3282j4BPRzAASiJFsABKH8uwABI3sAAkGrAAJCRr1sBAAEewAEon8AAZ8gBAAEWwAEouIDAASizwEoW8JYmwABGgQAAtmI+A07AASjfwAEo6AAApPFgA8AAS2QBFsABKO+AwAEo6sBKFvCk8cAARn1OwAEpDcABKRIAAKzDYAO95wEcwAEpHi7AAF8lAwADgMABKTbAShbwgcABKTzASheyFsABKUuAwAEpRsBKFvCFgsAARoMAwACRDD0cwAEpahbAASlgLsAASN7AAJBqwACQka9dAQABH8ABKYzAAGeIAwADgcABKZfASheygsABKaHAShfaFsABKayAwAEpp8BKFvCFHcAARoUAALZjBsAAkRCBk8ABKcrAASnWwAErGwAAuJABasABKctgA8AA/VECAAABA8ABKe7AASsbAAAAAQEBwAEqBAAAAIPuYAPAAEauAABbAT4EPRzAASoQLq83AQABFsABKhmAwAEqFMBKGKyFf8AARoQAwACQyE7AASowwAEqNQAAgL1gA8AAlRwBHMABKj4WwAEqNy63nMAAkGrAAJCOr4wBAAEWwAEqUoDAASpNwEoYrKTxwABGfQDAAGUZPRzAASphLqDUAQABJsABKrIBHMABKrIewAEqZsAAkroDAAMcwAEqfy6g1wAAAADAAJCzgcABKobAShjnHMABKowuhaABAAEWwAEqoIDAASqbwEoYrIJRwABFgwDAAJDDAK+fAQABFsABKs2AwAEqyMBKGKylYcAARYAAwACT6WADwACVEgDAAJCyPRzAASrmLsAAXyQCAAGAwAEq9cBKGKwBueYWwAErDIDAASsHwEoYrLnmwABGsMAAkQ4GwACREYGTwAErIMABKyzAASxUAAC4jgFqwAErIWADwAD9UQIAAAEDwAErRMABLFQAAAABAQHAAStaAAAAg+5gA8AARqQAAFsBPgQ9HMABK2YurzcBAAEWwAErb4DAAStqwEoaH4V/wABGhADAAJDITsABK4bAASuLAACAvWADwACVHAEcwAErlBbAASuNLrecwACQasAAkI6vjAEAARbAASuogMABK6PAShofpPHAAEZ9AMAAZRk9HMABK7cuoNQBAAEmwAEsCAEcwAEsCB7AASu8wACSugMAAxzAASvVLqDXAAAAAMAAkLOBwAEr3MBKGlocwAEr4i6FoAEAARbAASv2gMABK/HAShofglHAAEWDAMAAkMMAr58BAAEWwAEsI4DAASwewEoaH6VhwABFgADAAJPpYAPAAJUSAMAAkLI9HMABLDwuwABfIwEAAYDAASxLwEoaHwDAAJEPBsAAkRKBk8ABLFnAASxlwAEumgAAuI0BasABLFpgA8AA/VECAAABA8ABLHfAAS6aAAAAAQEBwAEshwAAAIPuYAPAAEaQAABbAT4ETsABLJzAASyhAAAgYAPAAEtkAR7AASynwABLlgEAARbAASzFgMABLMDASht8pPHAAEZ9AD0cwAEs1C6vNwEAARbAASzdgMABLNjASht8hX/AAEaEAMAAkMg9HMABLOwuoNQBAAEmwAEtYQEcwAEtYR7AASzxwACSugMAAxzAAS0XLqDXAAAAAMAAkLMcwAEtJRbAAS0eLrecwACQasAAkI6vjAEAAYHAAS00wEobkgDAAGUZHMABLTsuhaABAAEWwAEtT4DAAS1KwEobfIJRwABFgwDAAJDDAK+fAQABFsABLXyAwAEtd8BKG3ylYcAARYAAwACT6WADwACVEgDAAJCyPRzAAS5UFsABLkEuwABI3sAAkGrAAJCRr10BAAEfwAEua8AAZ4gDAAOBwAEudsBKG5IrFsABLoeAwAEugsBKG3yFHcAARpIAALZjBsAAkROBk8ABLp/AAS6rwAE5RQAAuJEBasABLqBgA8AA/VECAAABA8ABLrzAATlFAAAAAQEBwAEuywAAAIPuYAPAAEa4AABbAT4ETsABLuTAAS7sAACWJmADvNMBFsABLvOAwAEu7sBKHRSWJsAARro9NQAAAAEAXQPAAPypAWADwABijQEWwAEvBYDAAS8AwEodFLnJwABGvSMcwAEvGIIAwEodUUgBAAErAAArHMABLxiCAMBKHVGD+AEAARbAAS8qFsABLyAuwABI3sAAkGrAAJCRr1m2bADAAPx3AVxOwAEvW8ABL2UAAFtdA8AA/KkBYAPAAJUSARzAAS9nLoWgAgABFsABL3uAwAEvdsBKHRSCUcAARYMBapPAAJDDScABL5McwAEvn4HAAS+XwEodKkgBAAEWwAEvshbAAS+iLrQEwACQasAAkKaxibjXAMAA/V4+BUAcwAExVxbAATFQgsABMUbASh2/YcAA/NhIAQABlQDAAP0owAExRsABMVsATsABMXPAATGBAADAAF8qYAO86AEWwAExnRbAATGNLrQEwACQasAAkKaxirjYPRzAATHPFsABMcUuwABI3sAAkGrAAJCRr1sBAAEewAEx8MAAZ7oCAAKDwAEyB8BKHmJqwAEyJGADwABorsAA77kAALZiTsABNIbAATSMAACFt2ADwACVEgEmwAE0hgEcwAE09xzAATSQasABNJFgA8AAl4DAAR9pIAIAAifAAF8rMcABNKFgA8AAlRICHMABNLQWwAE0qy7AAEPRwACQasAAkInAAEPgAQABg8ABNMnASh5iAMAAXNIcwAE06oLAATThwEodv0sBAAGUAMAA/LgAwACXgq+fAQABFsABNRKAwAE1DcBKHRSlYcAARYAAwACT6WADwACVEj0cwAE1LC6g1AEAASbAATVYARzAATVYHMABNTNqwAE1NGADwACXgMABH2kgAgACJ8AAXywxwAE1QWADwACVEgIcwAE1S4LAATVCwEodv0sBAAGTAMAA/LiEwAE1UMBKHtQAwACXgq+fAQABFsABNX6AwAE1ecBKHRSlYcAARYAAwACT6WADwACVEgDAAJCyPgVOwAE1sAAAAK9cYAPAAGenAEnAATXBFsABNc2BwAE1xcBKHSqHgLzZPgJOwAE19MABNgIAALSuYAPAAGiuAR/AATYIwABo0gIAAhbAATY1gsABNivASh2/YcAA/NgWwAE2UBbAATZCgMABNj3ASh0UhR3AAEa7YcAA/NgAPYvAATZhwEogGh7AATZxwABnygIAAibAATaNAYHAATaNwEodKmADvQCEwAE2lsBKIEQAScABNrMWwAE2v4HAATa3wEodKoUzvNw+AT2LwAE208BKIBoewAE248AAZ7wBAAGBwAE298BKHSoAScABNw4WwAE3GoHAATcSwEodKoU1vN0+AT2LwAE3LsBKIBoewAE3PsAAZ70BAAGBwAE3UsBKHSoAPgNAFsABN4KBwAE3esBKHSqywbzbwAE3esABN4wATsABN6XAATezAAC0rmADwABorgEfwAE3ucAAaNICAAIWwAE35oLAATfcwEodv2HAAPzYFsABOAEWwAE384DAATfuwEodFIUdwABGu2HAAPzYAD2LwAE4EsBKIBoewAE4IsAAZ7oDAAMmwAE4RgGBwAE4RsBKHSpgA7zohMABOE/ASiFZFsABOGOAwAE4XsBKHRSFHcAARrsAPRzAATiLFsABOIEuwABI3sAAkGrAAJCRr1sBAAGDwAE4ncBKIBoAtmI9HMABOK8uoNQBAAEcwAE4vRbAATi0LsAAQ9HAAJBqwACQicAAQ+ABAAEmwAE40gGBwAE40sBKHSpgA7zoAMAAXNIAwACQsj0cwAE44y6g1AEAAR/AATjswACVmAMAAhzAATj0LqDXAAAAAMAAkLOCwAE4+8BKHb8BpWEWwAE5KIDAATkjwEodFKVhwABFgADAAJCyBsAAkRSBk8ABOUrAATlWwAFE/wAAuJIBasABOUtgA8AA/VECAAABA8ABOWbAAUT/AAAAAQEBwAE5dAAAAIPuYAPAAEbFAABbAT4GTsABOY3AATmaAADAAF8tYAO80wEWwAE5oYDAATmcwEoi5JYmwABGuk7AATm6wAE5xQAAv+lgA7zBARbAATnUgcABOcfASiL6hP+84U7AATnxwAE5+gAApPFgA8AAS2QBFsABOgGAwAE5/MBKIuSk8cAARslOwAE6FMABOiQAAMAAXy5gA8AA+j8BHsABOibAAKypAgACgcABOj/ASiL6g8ABOk3ASiNGAEnAATpcFsABOmmDwAE6YMBKI0aFM8AAS3Q+AUnAATp7IhbAATqMgcABOn/ASiL6h3282gEWwAE6pIHAATqXwEoi+oUzvNw+AT0cwAE6whbAATq4LsAASN7AAJBqwACQka9bAQABHsABOtjAAGfAAQABgcABOuvASiL6AAC2Yj4BPRzAATscFsABOxIuwABI3sAAkGrAAJCRr1sBAAEewAE7MsAAZ8MBAAEmwAE7TgEWwAE7ToDAATtJwEoi5JYmwABGumADvOgAALZiScABO2wWwAE7eYPAATtwwEojRoU1wABLdT4BScABO4sWwAE7nIHAATuPwEoi+od9vNo+AT0cwAE7uRbAATuvLsAASN7AAJBqwACQka9bAQABHsABO8/AAGfBAQABJsABO+cBgcABO+fASiL6YAO8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6wDAAbRlAAAApWFgA8AAQeEAAFwBPgZOwAG0h8ABtIwAAIKQYAPAAGJmARbAAbSTgMABtI7ASo42uovAAElkPRzAAbSxFsABtKcuwABI3sAAkGrAAJCRr18BAAEewAG0xcAAZ/kBAAGDwAG01cBKjmwAALZkTsABtO7AAbT0AACBe2ADwABFfQEWwAG0+4DAAbT2wEqONoJrwABJakAiHMABtYiBwAG1f8BKjkZIAQABJ525AMAA/foBHMABtZ2BwAG1lMBKjkZIAQABJ52nAMAA/frAAbV/wAG1pQBOwAG1scABtboAAKpYYAPAAPo/ARzAAbXFgcABtbzASo5GSAEAASedpwDAAP36ScABtdQiFsABtd2AwAG12MBKjja6lMAASW4BFsABtfWAwAG18MBKjja6lcAASW8+Aj0cwAG2Di6vNwEAARbAAbYXgMABthLASo42upLAAElsAMAAkMhJwAG2KYXAAbYtwEqPMj0cwAG2Ny6g1AEAAR/AAbZAwACVwAIAAieZ6RzAAbZPLqDXAAAAAMAAkLMAAMAAkLI/PgVAFsABtneAwAG2csBKjja6k8AASW3AAbZywAG2gQBOwAG2l8ABtqMAALqQYAPAAEV9ARbAAbaqgMABtqXASo42upDAAElrTsABtsvAAbbZAAC5oWADwABijQEmwAG2ywGDwAG228BKjmxgA8AAYo1OwAG288ABtvsAAJYmYAO8wQEWwAG3C4fAAbb9wEqQPpYmwABij0nAAbcaHMABtyYUwAG3HsBKkGcIAEgBAAEWwAG3ORbAAbcpLrQEwACQasAAkKaazbhXAMAA/V4+AUnAAbdOhcABt1LASo8yPgE9HMABt2guwABfXgEAAYTAAbd1wEqOygDAAJFLPgE9HMABt5guwABfXQEAAYTAAbeiwEqOygDAAJFKScABt8EcwAG3zRTAAbfFwEqQZwgASAEAARbAAbfqFsABt9outATAAJBqwACQpprMuE4AwAD9Xj4BPRzAAbiZLqDUAQABHMABuJ4uwABe8AIAAiGFwAG4rsBKjzKCwAG4uMBKjlYAwACRHwDAAJCyScABuNocwAG45hTAAbjewEqQZwgASAEAARbAAbj5FsABuOkutATAAJBqwACQpprTuFMAwAD9Xj4BPRzAAbkQLrLEAwADhMABuRzASo7KgcABuSPASo5GgsABuS3ASo5WAMAAkUBJwAG5ThzAAblaFMABuVLASpBnCABIAQABFsABuW0WwAG5XS60BMAAkGrAAJCmmtK4UgDAAP1ePgE9HMABuYQuwABfTgMAA4TAAbmQwEqOyoHAAbmXwEqORoLAAbmhwEqOVgDAAJE/ScABucIcwAG5zhTAAbnGwEqQZwgASAEAARbAAbnhFsABudEutATAAJBqwACQpprRuFAAwAD9Xj4BPRzAAbn1LrLDAwADhMABuf7ASo7KgcABugXASo5GgsABug/ASo5WAMAAkT5JwAG6MBzAAbo8FMABujTASpBnCABIAQABFsABuk8WwAG6Py60BMAAkGrAAJCmms64TwDAAP1ePgE9HMABumQuwABfTwMAA4TAAbpuwEqOyoHAAbp1wEqORoLAAbp/wEqOVgDAAJFBScABuqAcwAG6rBTAAbqkwEqQZwgASAEAARbAAbq/FsABuq8utATAAJBqwACQpprPuFEAwAD9Xj4EPRzAAbubLrLDAwADhMABu6TASo7KgcABu6vASo5GgsABu7XASo5WAMAAkT5OwAG738ABu+cAAMAAX2pgA8AAlRIBHMABu+kuoNcAAAAAwACQsz0cwAG7+C7AAF9JAwADhMABvATASo7KgcABvAvASo5GgsABvBXASo5WAMAAkTw9HMABvDEuoNQBAAEmwAG8eQEcwAG8eR/AAbw6wACVsQMAAyOFwAG8RMBKjzInl8snl8oBYAPAAP3rFMABvFzASpN8CQAcwAG8ZS6g1wAAAADAAJCzAK+fAQABgsABvI/ASo5WAMAAk+lgA8AAlRIAwACQsknAAbyxFsABvLqAwAG8tcBKjja6jMAASWY+AkAcwAG85obAAbzawEqQFkgBAAErAMAA/V7AAbzawAG87QA9HMABvPguwABfYAQAA4TAAb0PwEqOyibAAb0WAYPAAb0WwEqObGADwABijYLAAb0cwEqOVgGqWIXAAb1FwEqPMsAAkU5JwAG9XRzAAb1xFsABvWEutATAAJBqwACQprEhAQABFMABvYvASpBnCAAAuSE+AT0cwAG9ny7AAF9iBQAEhMABvc/ASo7KhsABvdbASpAWJsABveMBg8ABvePASo5sYAPAAGKNgsABvenASo5WAapYhcABvhLASo8ywACRT0nAAb4qHMABvj4WwAG+Li60BMAAkGrAAJCmsSIBAAEUwAG+VMBKkGcIAAC5Ij4BPRzAAb5oLsAAX2cFAASEwAG+g8BKjsqGwAG+isBKkBYmwAG+lwGDwAG+l8BKjmxgA8AAYo2CwAG+ncBKjlYBqliFwAG+xsBKjzLAAJFQScABvt4iHMABvuoUwAG+4sBKkGcIAEgBAAEWwAG+/RbAAb7tLrQEwACQasAAkKaa2rhaAMAA/V4BHMABvyQWwAG/FC60BMAAkGrAAJCmsSMBAAEUwAG/NMBKkGcIAAC5Iz4BPRzAAb9ILsAAX2gFAASEwAG/Y8BKjsqGwAG/asBKkBYmwAG/dwGDwAG/d8BKjmxgA8AAYo2CwAG/fcBKjlYBqliFwAG/psBKjzLAAJFRScABv74WwAG/x4PAAb/CwEqObLmcwABibz4BPRzAAb/hLqjQBQAEhMABv+vASo7KhsABv/LASpAWg8ABv//ASo5sgsABwAXASo5WAapYhcABwC7ASo8ywACRTEnAAcBGIiIWwAHAcxzAAcBRhMABwEvASo7Ks6ABAAEWwAHAXS7AAFOKwACQasAAkKkAwABFzbKlvdYAFsABwMMcwAHAnITAAcCWwEqOyrVLAQABFsABwK0uwABTisAAkGrAAJCpAMAARdC1Gr3XARbAAcEGHMABwOmEwAHA48BKjsqtbwEAARbAAcDwLsAAU4rAAJBqwACQqQDAAEXLsqW91j4EPRzAAcEjLsAAX1EDAAOEwAHBL8BKjsqBwAHBNsBKjkYWwAHBRYDAAcFAwEqONqVhwABFgADAAJFCTsABwW/AAcF6AADAAF9lYAPAAJUSARzAAcF8LqDXAAAAAMAAkLM9HMABwYsuqNAFAASEwAHBlcBKjsqGwAHBnMBKkBaDwAHBqcBKjmyCwAHBr8BKjlYBqliFwAHB2MBKjzLAAJFMPRzAAcHrLqDUAQABJsABwjYBHMABwjYfwAHB9MAAlbEDAAMjhcABwf7ASo8yJ5fLJ5fKAWADwAD96xTAAcIWwEqXqQkAHMABwiIuoNcAAAAAwACQswCvnwEAAYLAAcJMwEqOVgDAAJPpYAPAAJUSAMAAkLI+AT0cwAHCeC6o0AUABITAAcKCwEqOyobAAcKJwEqQFoPAAcKWwEqObILAAcKcwEqOVgGqWIXAAcLFwEqPMsAAkUwGwACRVYGTwAHC5cABwurAAcPeAADAAF88AAAAAQPAAcL+wAHD3gAAAAMCAsABwxgAAACD7mADwABJfADAAcMwAAAApWFgA8AAQeEAAcABw08AAACqWGADwAD6PwFqwAHDWWADwAD6PwBcAT4BPRzAAcNnLsAAX18EAAMWwAHDioDAAcOFwEqY8LqQwABJgBbAAcOcgMABw5fASpjwuovAAEl+gcABw6zASpkAAapYgsABw9HASpkRwACRTQbAAJFWgZPAAcPjwAHD9MAByEkAALiyAWrAAcPkYAPAAP1RAgAAAQPAAcQHwAHISQAAAAEBAcABxBgAAACD7mADwABJkQAAXAE+D0AiFsABxDCAwAHEK8BKmba6osAASZ0BFsABxESAwAHEP8BKmba6o8AASZ7AAcQrwAHETwBOwAHEX8ABxGQAAIKQYAPAAGJmARbAAcRrgMABxGbASpm2uovAAEmVQCEWwAHEjIHAAcSHwEqaALqewABibsABxIbAAcSVAEAhFsABxKmBwAHEpMBKmgCHf8AAYmvAAcSjwAHEsgBAIRbAAcTGgcABxMHASpoAuZ3AAGJswAHEwMABxMwAScABxNMWwAHE3IHAAcTXwEqaALmcwABibz4BPRzAAcVkFsABxU8uwABI3sAAkGrAAJCRr18BAAEewAHFeMAAZ/kBAAEWwAHFmBbAAcWILrQEwACQasAAkKaFO7h1AAC2ZD89HMABxbwWwAHFsi7AAEjewACQasAAkJGvXwEAAR7AAcXQwABn+QEAAYHAAcXgwEqaAAAAtmROwAHF/8ABxgYAAJVcYAPAAHXiARzAAcYcFsABxgguwABencAAkGrAAJCKwABRGgMAAoHAAcY6wEqaABbAAcZNFsABxkAutarAAJBqwACQkLNAwABNMwHAAFEbFsABxnSAwAHGb8BKmba6o8AASZ7AAHYUTsABxpHAAcabAACvXGADwABnpwEcwAHGpILAAcadwEqbHcAAUO4BAAEWwAHGvhbAAcaxLrWqwACQasAAkJCzQMAATTMAwAB15j0cwAHG3RbAAcbTLsAASN7AAJBqwACQka9bAQABg8ABxu/ASpuQALZiTsABxxPAAccdAABbXQPAAPypAWADwACVEgExwAHHLmADwACVEgA9HMABxzYurzcBAAEWwAHHP4DAAcc6wEqZtrkwwABJnADAAJDIPRzAAcdchMABx1LASpwCVgEAARzAAcdg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PQEkiWQCJ8AAXroWiV6HiVjASslogL3AAJFuTol3iYcAAILJYAPAAPo/ARaJkhaJiS6x8sAAkWnAAJF2gsmBRE6JuYnHAADAAF97XQPAAP2cAWADwABFfQEeic3AAMEXAAFgA8AARX0AAE6J9AAAAMAAX3xgA8AAkjYATooXAAAAwABffWADwACSUQBOikEAAACWeGADwACqewBJikoaik6kOD4CPSMcin4WimwuwABfecAAkXhIAQABKwDAAP1eF4psLsAAX3kyioJgA7zTYAPAAKp7AMAAkXgrAV0DwAD82gJgA7zTYAPAAKp7PRyKnRaKjC7AAF95wACReIC/AgACgIqewErI8RWKqMBKyqULH4qywACqqQAAAAAAwAD87z89HIrULpauAQFgA8AA/Q4BNIrcA4rcm+QAAAAAAAAAYAPAAP0OAT4HTor/iwYAAMAAX35dA8AA/KkBYAPAAJFsATGLG2ADwACRbBYfi6LAAJHHBgAGhIu7wErJJxaL0y6x8sAAkWnAAJF2FovxgovpwErJC7dgwABCqoOMA8BKyRmFjBDASsk1FIwawErKpQsAAB+MLMAAklABAAGDjEbASskZAB+MYMAAkh0AAAAAH4yJwACSFgAAAAAfjK3AAK49BAAEhIy/wErJJxaM74OM48BKyRmzQMAATTODjP/ASskZFI0MwErKpQsAAB+NccAAkccGAAaEjYrASsknFo2iLrHywACRacAAkXYWjcCCjbjASskLt2DAAEKqg43SwErJGYWN38BKyTUUjenASsqlCwAAH437wACR2gMAA4eODMBKyjSDjh3ASskZFI4qwErKWQgAAB+ORsAAkccGAAaEjl/ASsknFo53LrHywACRacAAkXYWjpWCjo3ASskLt2DAAEKqg46nwErJGYWOtMBKyTUUjr7ASsqlCwAAH47QwACR2gMAA4eO4cBKyjSDjvLASskZFI7/wErKWQgAAB+PG8AArj0EAASEjy3ASsknFo9dg49RwErJGbNAwABNM4OPbcBKyRkUj3rASsqlCwAAH5ATwACR+wIAAoOQKcBKyRkuAB+QScAAkjUBAAEWkGyDkGDASskZsL3AAE00AB+RDcAArj0EAASEkR/ASsknFpFPg5FDwErJGbNAwABNM4ORX8BKyRkUkWzASsqlCwAAFZF6wErKgwkfkYvAAJJBAQABFpGlg5GZwErJGbC9wABNNAAVkcPASsqUCh+R2cAAkoEBAAGDkezASskZAB+SBsAAkh0AAAAAH5IvwACSFgAAAAAfkxjAAJJQAQABg5MywErJGQAfk0zAAK49BAAEhJNewErJJxaTjoOTgsBKyRmzQMAATTODk57ASskZFJOrwErKpQsAAB+TvcAAryUCAAKDk9PASskZLgAflGXAAJHHBgAGhJR+wErJJxaUli6x8sAAkWnAAJF2FpS0gpSswErJC7dgwABCqoOUxsBKyRmFlNPASsk1FJTdwErKpQsAAB+U78AAkdoDAAOHlQDASso0g5URwErJGRSVHsBKylkIAAA9HJVEFJU9wErLYwwAg/gBAAGGlUzASslJAMAA/Hc9HJYphpYhwErJSSABAAEfli7AAK4NAgACg5ZGwErJGRaWWoCWU8BKyPGE/7zhAAAATpaJlo0AAMAAX39gA8AAkdsBH5aTwACR+wIAAoOWqcBKyRkuAD0clsuGlsPASslJIAEAARSWzMBKzu0NAAAASZbYIiIWlucUltzASsqDCQDAAF+AwACSOwEWlwIUlv7ASs7tDQDAAF+BwACR5AEWlzUUlyXASsqUCgDAAF+CwACSWj4BPRWXUcBKy2MMMZdtYAPAAJFsCB+XfcAArj0EAASEl4/ASsknFpfBg5e1wErJGbNAwABNM4OX0cBKyRkUl97ASsqlCwAAH5fywACSNQEAARaYFYOYCcBKyRmwvcAATTQAH5g5wACSQQEAARaYU4OYR8BKyRmwvcAATTQAH5h3wACvJQIAAoOYjcBKyRkuAB+Yr8AAkccGAAaEmMjASsknFpjgLrHywACRacAAkXYWmQCCmPjASskLt2DAAEKqg5kSwErJGYWZH8BKyTUUmSnASsqlCwAAH5k9wACR2gMAA4eZTsBKyjSDmV/ASskZFJlswErKWQgAAB+ZisAArg0CAAKDmaLASskZFpm2gJmvwErI8YT/vOEAH5nVwACR+wIAAoOZ68BKyRkuAD4BPRWaIcBKy2MMMZo9YAPAAJFsAh+aTcAArj0EAASEml/ASsknFpqRg5qFwErJGbNAwABNM4OaocBKyRkUmq7ASsqlCwAAH5sswACRxwYABoSbRcBKyScWm10usfLAAJFpwACRdhabfYKbdcBKyQu3YMAAQqqDm4/ASskZhZucwErJNRSbpsBKyqULAAA9HJvMFJvFwErLYwwAg/gBAAGGm9TASslJAMAA/HcApA4AAErIlABKyM8AStFJAAAAAgLAAJF/gZSf6J/uwAEcHgPAAF+DAAABYAHAAES8AAFgAcAAkWwJBMAAkYGBlKD6oSgGwABfhABgA8AA/AUBaqElYAPAAPwFwADeagTAAJGCgZShRqFnCYC9AWqhLmADwAD9UQJgA8AA/esBJ8AAX4MEwACRhIGUoYyhowm0H8AAkWkAYAPAAEFOAATAAJGFgZShvaHFCbHywACRaQBgA4EUAATAAJGGgZSh6aH6CcAAUdTAAJFpAGADwAB3dAAEwACRh4GUohGiHQm1qsAAkWkAYAPAAE0rAATAAJGIgZSiN6JACcAASN7AAJFpAGADtlcABMAAkYmBlKJeomIJwABfhcAAkWkAYAPAAKp7AATAAJGKgZSibaJzGMAAX4bAAJFpAGADwABEmAErAQXAAJHHgZSieKJ4owkAAAADopCjCQAAAAYGBqKWAAAEtB9gA8AAQU4AorQAAASx8mADgRQAoskAAATAAFHUYAPAAHd0AKLhAAAEtapgA8AATSsAovQAAATAAEjeYAO2VwCjBAAABMAAX4VgA8AAqnsAAGADwACRfwE/BwgBwACRhIAAwErSoQgBwACRhYEAwErSrwgBwACRhoIAwErSuwgBwACRh4MAwErSywgBwACRiIQAwErS2QgBwACRiYUAwErS5wkBonjAAEUoAAAAADcGwACRjIGUow6jIqNPAQCzQAAAAAEDozGjTwAAAAAAAABgA7k/AUqjNAEWo0EWozQutarAAJFpwACRh7NAwABNMwbAAJGOgZSjVKNso6oBAMAAU4rAAJFpAAAAAQOjgaOqAAAAAAAAAGADvfIBSqOKARajlxajii61qsAAkWnAAJGHsL3AAE00BsAAkY+BlKOvo76j5AEAwABH3cAAkWkAAAABA6PKo+QAAAAAAAAAYAPAAGpWAUqjzQEWo9oWo80utarAAJFpwACRh7e0wABNLwbAAJGRgZSj6aP6pFAAALjwAWqj6mADwAD9UQIAAAEDpASkUAAAAAEBAaQMAAAAwABaZmADwABEmAAAXAE+Aj0XpBsuwABfhsAAkWmApCTAStRRwACRij0cpDEuuMMBAAGApETAStRRAMAARIMGwACRkoGUpFWkYawHAAC4xQFqpFZgA8AA/VECAAABA6RwrAcAAAABAQGkfQAAAJn/YAPAAEVGAABbAT4DPRykii7AAF+HAQABgKSXwErUvgDAAJGTTqSwpLwAALjNYAPAAEV9ARakxICkvsBK1L6DGcAARThDpM8hHKTigaTWwErU6kgBAAErAMAA/V4+BE6lAKUFAACDsGADwABFfQEWpROBpQfAStTqg7DAAEWHTqUspTgAAIRXYAPAAEV9ASalLAEcpUaBpTrAStTqhE0BAAEuAMAARe9gA8AARX1JpVohHKVqg6VewErVREgBAAGBpW3AStTqAMAA/V4+Bj0cpYqApYTAStS+uSwCAAKBpZLAStTqg6WfwErVRADAAEVvSabLISIWpyQcpu6DptHAStVEtVsBAAEWpv0uwABTisAAkWnAAJGOAMAARd+0Nr3VABanlxynYYGnRMBK1Oq1WwEAARancC7AAFOKwACRacAAkY4AwABF37Q2vdU+Ak6oPahFAACo+mADvecBHKhcFqhHLsAAU4rAAJFpwACRjpcDAgACFqiEg6h4wErVRLlwwABFvRaooYGolcBK1Oq5cMAARb0Avj49F6jJg6i9wErVRLlwhKjbwErWFMAARb0/PTUAAAABAGADwABFfQGDqYTAStVEIxypnhapkISpkMBK1nelYMAARX9IAQABKwDAAP1eF6mQhKmQwErWd6VgFqmugamiwErU6qVgwABFf8AARX8rAWADvK09NQAAAAEAYAPAAEV9AYOpxcBK1UQjHKnjFqnRhKnRwErW0KVhwABFgEgBAAErAMAA/V4XqdGEqdHAStbQpWEWqfOBqefAStTqpWHAAEWAwABFgCsBYAPAAEHhSaoOIRyqH4OqE8BK1US5CgAAAADAAEXpPgI9HKr5gKrzwErUvrkgAgACgasCwErU6oOrD8BK1UQAwABFaj2Kq5zAStUkg6ujwErVRD89HKvIgKvCwErUvoRZAQABgavPwErU6gDAAEVsPz2Jq+vAStTqgqv5wErVJAbAAJGTgZSsR6xHugkAAMAAX4cAAAABA6xTugkAAAABAQGsYAAAAJn/YAPAAEVGAABbAT4ZSazMFqzbFqzWgKzQwErXxLkRwABFTYFVwABFO0qs5AA/Tqz1rPkAALklYAPAAEiJASas9QEWrQYWrQGArPvAStfEuRHAAEVNgxnAAEU4YAPA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gMAAQjXASuYUulQAAAAAwABIeD4CScAAQlQhHMAAQmUWwABCXoDAAEJZwErmFLkLwABFhJY2AQABNMAAQmsDwABCa8AAQoYAAAABAQHAAEJsAAAAo71gA8AARX0AAGADwAD6PwFKwABCdQElwABCeoHAAEJ1wErmhWADwABHNgDAAPx6SsAAQokBgMAAQpDASuYUP0bAAEL9wABDKgAAAAEAYAPAAEV9ABzAAEMgFsAAQxmAwABDFMBK5hS5C8AARYSArQAAAADAAPx9PgNOwABDDAAAAKO9YAPAAEc2ASbAAEL9AYHAAEMMwErm1WADwABHNj0cwABDPxbAAEM5gsAAQzTASucHmf/AAEWFuSwCAAKCwABDR8BK5weAwABDTcBK5hQAwABFbz0cwABDZxbAAENhgsAAQ1zASucHmf/AAEWFhFkBAAGCwABDbsBK5wcAwABFbD89HMAAQ4guwABflQEAAYDAAEOlwErmFADAAJGbSsAAQ7ABgMAAQ7fASuYUBsAAkZ2BlMAAQ8TAAEPdwABFZQAAhbMBasAAQ8VgA8AA/VECAAABA8AAQ+XAAEVlAAAAAQEBwABD6wAAAIPuYAPAAEhoAABgA8AARX0BPgVOwABECsAARBEAAIJRXQPAAPypAWADwABFfQEWwABEGIDAAEQTwErn8YJRwABFg0AcwABEORbAAEQygcAARCvASugMYcAA/NhIAQABlADAAP0owABEK8AARD0ATsAARFHAAERXAACBe2ADwABFfQEcwABEX4HAAERZwEroDEsBAAGTAMAA/LhJwABEaCXAAERygsAARGzASuhnYAPAAEhSPgNOwABEksAARJsAAIYFYAPAAEhSARTAAESdwEroZwIBYAPAAEhSTsAARK/AAES2AAC6T2ADwAD6PwEWwABEyhbAAETBg8AARLjASuiuhgXAAEhUuk/AAGDXSsAARNgBHMAAROYWwABE3y7AAF+GwACRacAAkYq44wIAAiGEwABE98BK6NMWwABE/y61qsAAkWnAAJGHAMAARLJJwABFGSXAAEUjgsAARR3ASuhnYAPAAEhoPgFKwABFNAEcwABFRxbAAEVBFMAARTvASuhnAgFgA8AASGiCUcAARYNLAQABkwDAAPy4P0rAAEVWAYDAAEVdwErn8QbAAJGegZTAAEVqwABFg8AARhsAALj5AWrAAEVrYAPAAP1RAgAAAQPAAEWTwABGGwAAAAEBAcAARaEAAACD7mADwABH4QAAYAPAAEV9AT4CTsAARbrAAEXBAADAAF+WYAPAAEV9ARzAAEXDLsAAX5cCAAIcwABF0oDAAEXNwErp2JzJAAAAAMAAR+cWwABF5IDAAEXfwErp2IWywABH5QDAAJGfSsAARfIBIyEcwABGAIHAAEX5wErp80gBAAErAMAA/V6BwABGCsBK6fOAwABGE8BK6dgBYAPAAEV9BsAAkZ+BlMAARiDAAEYtwABHaAAAwABflwAAAAEDwABGNsAAR2gAAAACAgLAAEZdAAAAnMlgA8AAaSEAwABGdQAAAIWyYAPAAEV9AABgA8AARX0BPgJJwABGhCXAAEaQgcAARojASuq7YAPAAEhSPgNOwABGsMAARrkAAIV/YAPAAEhSARTAAEa7wErquwEBYAPAAEhSTsAARtjAAEbfAADAAF+WYAPAAGDSARzAAEbrgMAARuHASuqrg1kBAAEWwABG+YLAAEbwwErq8YYFwABIVADAAGkjScAARwohHMAARxWDwABHDsBK6xZIAQABKwDAAP1eSsAARx4BHMAARywWwABHJS7AAF+GwACRacAAkYqqigIAAoPAAEc4wErrFhbAAEdALrWqwACRacAAkYcAwABEqz8/SsAAR1kBKwbAAJGggZTAAEdtwABHesAATkMAAMAAX5gAAAABA8AAR5zAAE5DAAAAAQEBwABHrAAAAIPuYAPAAEZ6AABgA8AARX0BPgNOwABHxcAAR9QAAMAAX5lgA8AARX0BHMAAR+EWwABH24DAAEfWwErr6oJRwABFg0sBAAGUAMAA/LhJwABH6hbAAEg6HMAASAaBwABH7sBK7AW1TAEAARbAAEgbLsAAU4rAAJFpwACRjgDAAEXRtDa91T4HScAASFQcwABIZ4HAAEhYwErsBbmUAAAAAMAARf0+A07AAEiPwABInQAAwABfmmADwABIUgEmwABIjwGBwABIn8BK7AVgA8AASFJOwABIy8AASNQAAIYFYAPAAGGIASbAAEjLARbAAEjkgsAASNbASuyXhgXAAEhUYAPAAGGISsAASPYBHMAASQQWwABI/S7AAF+GwACRacAAkYq43gIAAhbAAEkcg8AASRPASuzCYcAAYY4WwABJJC61qsAAkWnAAJGHAMAARK1JwABJQBzAAElTgcAASUTASuwFuZUAAAAAwABF/j4DTsAASXnAAEmHAADAAF+aYAPAAEhSASbAAEl5AYHAAEmJwErsBWADwABIUk7AAEmzwABJvAAAhgVgA8AAYbMBJsAASbMBFsAAScyCwABJvsBK7V+GBcAASFRgA8AAYbNKwABJ3gEcwABJ7BbAAEnlLsAAX4bAAJFpwACRirjeAgACFsAASgSDwABJ+8BK7YphwABhuRbAAEoMLrWqwACRacAAkYcAwABErT9OwABKLsAASjYAAMAAVDZgA8AA+j8BHsAASkLAAJFrAgACFsAASl+BwABKUMBK7AW5cMAARb0WwABKcC61qsAAkWnAAJGHAE7AAEqTwABKngAArWNgA73nARbAAEqlgMAASqDASuvquXDAAEW9TsAASsrAAErVAAC50mADvecBFsAASuwWwABK1y7AAFOKwACRacAAkY61Lr4FScAAS04WwABLuhzAAEtyFsAAS1IuwABTisAAkWnAAJGOtUQCAAKDwABLhcBK7lAWwABLoBbAAEuRLrNAwACRjLFeuK4Avhq0Nr3VPgE9jMAAS9bASu52FsAAS/gWwABL4y7AAFOKwACRacAAkY61LL4DScAATBEWwABMfRzAAEw1FsAATBUuwABTisAAkWnAAJGOtUQCAAKDwABMSMBK7lAWwABMYxbAAExULrNAwACRjLFduK0Avhq0Nr3VPgE9jMAATJnASu52FsAATLsWwABMpi7AAFOKwACRacAAkY61Lb4EP07AAEzgwABM5wAAgXZgA8AARwQBH8AATPfAAEcTAwACgcAATQLASuwFhMAATRLASu52AaxKIYLAAE0twEruCUrAAE09AYXAAE1EwErviEnAAE1XHMAATWqBwABNW8BK7AW5lgAAAADAAEX/PgNOwABNjcAATZsAAMAAX5pgA8AASFIBJsAATY0BgcAATZ3ASuwFYAPAAEhSTsAATcTAAE3NAACGBWADwABh0wEmwABNxAEWwABN3YLAAE3PwErv9YYFwABIVGADwABh00rAAE3tARzAAE37FsAATfQuwABfhsAAkWnAAJGKuN4CAAIWwABOE4PAAE4KwErwIGHAAGHcFsAAThsutarAAJFpwACRhwDAAEStP0rAAE40ASsGwACRoYGUwABOSMAATlXAAF1/AADAAF+bAAAAAQPA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SxcPhbfAAEdnTsAAiU3AAIlXAACcyWADwABpJgEcwACJXoDAAIlZwEsXD5zJAAAAAMAAR2lOwACJecAAiYAAAMAAX5ZgA8AASFIBJsAAiXkBHMAAiYIuwABfnAMAA4PAAImNwEsXeoHAAImYwEsXKoLAAImewEsXUgDAAJGmYAPAAEhSScAAiaohHMAAibWEwACJrsBLF6ZIAQABKwDAAP1eSsAAib4BhMAAicXASxemP0rAAInRAYDAAInYwEsXDwbAAJGqgZTAAInlwACJ/sAAikwAALj9AWrAAInmYAPAAP1RAgAAAQPAAIoNwACKTAAAAAEBAcAAihoAAACD7mADwABImAAAYAPAAEV9AT4BSsAAiiYBJsAAiiYBHcAAijO4/QEAAYDAAIpDwEsYZwDAAETMYAPAAEV9BsAAkauBlMAAilHAAIpewACScgAAwABfrgAAAAEDwACKccAAknIAAAABAQHAAIp+AAAAg+5gA8AASJgAAGADwABFfQE+DU7AAIqXwACKnAAAhbVgA8AARX0BFsAAiqOAwACKnsBLGNeFtcAAR2ZOwACKusAAisAAAIW3YAPAAEV9ARbAAIrHgMAAisLASxjXhbfAAEdnTsAAiuDAAIrpAAC83GADvecBFsAAivCBwACK68BLGPK5cMAARb1OwACLE8AAix0AALzeYAO95wEWwACLJYLAAIsfwEsZGrlwwABFvU/AAIs7wACLSAAAAcAAX69hAwBgA8AARX0AA8AAi1DAAIuAAAAAAAAAAGADwABFfQFKwACLVgEcwACLXRbAAItWLsAAX4bAAJFpwACRirjjAgACKRbAAItzLrWqwACRacAAkYcAwABEsk/AAIuGwACLkwAAAcAAX7BhAwBgA8AARX0AA8AAi5zAAIvNAAAAAAAAAGADwABFfQFKwACLogEcwACLqRbAAIuiLsAAX4bAAJFpwACRirjjAgACKhbAAIvALrWqwACRacAAkYcAwABEsknAAIxYISIWwACMiBzAAIxjgcAAjF7ASxjytVsBAAEWwACMci7AAFOKwACRacAAkY4AwABF37Q2vdUAFsAAjM8cwACMqoLAAIykwEsZGrVbAQABFsAAjLkuwABTisAAkWnAAJGOAMAARd+0Nr3VPgFJwACM6hbAAI06HMAAjQ4WwACM7i7AAFOKwACRacAAkY61ZAIA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kWnAAJGHAMAARLI+AEnAAKNfIhbAAKOwHMAAo3uEwACjY8BLJV21SQEAARbAAKONLsAAU4rAAJFpwACRjgDAAEXOsqW91gAcwACj1YPAAKPNwEslN0gBAAEWwACj5xbAAKPYLrNAwACRjJrPuFEAwAD9Xj4BSsAApDEBgMAApDjASyOdScAApTEhHsAApVDAAHd5AQABgcAApWHASyO4AD4DTsAApX7AAKWNAAC122ADvecBFsAApZqEwAClj8BLJV25cMAARb1OwAClvsAApcsAALVFYAO9zQEcwACl7BbAAKXXLsAAU4rAAJFpwACRjrVFAgAChcAApfnASymng8AApgnASyU3AL4bScAAphkWwACmKobAAKYdwEspzbQ2vdU+AUrAAKZGARzAAKZUFsAApk0uwABfhsAAkWnAAJGKuOMCAAIpFsAApmoutarAAJFpwACRhwDAAESyScAApoYWwACml4bAAKaKwEspzbUavdc+AUrAAKa0ARzAAKbCFsAAprsuwABfhsAAkWnAAJGKuOMCAAIqFsAAptkutarAAJFpwACRhwDAAESyPz9KwACm+gGAwACnAcBLI50GwACRsIGUwACnDsAApyfAAKoBAAC4sgFqwACnD2ADwAD9UQIAAAEDwACnOsAAqgEAAAABAQHAAKdLAAAAg+5gA8AASZEAAGADwABFfQE+BEnAAKdXHMAAp2CAwACnW8BLKvi6pAEAARbAAKdsLrWqwACRacAAkYcAwABJqErAAKd7ARbAAKeHgMAAp4LASyr4uTDAAEmcP07AAKfUwACn4AAAreNgA8AAYmYBFsAAp+eAwACn4sBLKvi6i8AASZVJwACn+yIlwACoC4HAAKf/wEsrW2ADwABiuQAcwACoNRbAAKguFsAAqCeAwACoIsBLKviCUcAARYNhwAD82EgBAAGVAMAA/Sg+Ak7AAKhQwACoVAAAwABftmADwABFfQEWwACoW4DAAKhWwEsq+LqgwABJm0nAAKh1IiIlwACofYLAAKh5wEsrzWADwABK2QAcwACoqhbAAKilFMAAqKHASyvNAgFgA8AAStmCZ8AASttIAQABasAAqMRgA8AASs3AAPlsAMAA/V4AFsAAqOUWwACo3hTAAKjawEsrzQIBYAPAAErZglHAAEWDgVXAAPyLPgJOwACpAcAAqQYAAIKQYAPAAGJmARbAAKkMFMAAqQjASyvNAgFgA8AAStm69MAAStxJwACpHiIWwACpJ4PAAKkiwEssdrNcwABibQAWwACpP4PAAKk6wEssdrJrwABiaT4BSsAAqVcBNcAAqXAAAAEAYAPAAEV9ARzAAKlwFsAAqWOAwACpXsBLKvi5MMAASZy5mwMAAxbAAKl8LrWqwACRacAAkYeDwACpisBLLHYWwACplYDAAKmQwEsq+IJnwABJlgDAAEYHNQAAAAEAWwEXwACpqYTAAKmnwEss3aVhFsAAqcKAwACpvcBLKvilYcAARYDAAEWAhADASyzdPz8/SsAAqfIBgMAAqfnASyr4BsAAkbGBlMAAqgbAAKofwACqoAAAuLMBasAAqgdgA8AA/VECAAABA8AAqjLAAKqgAAAAAQEBwACqQwAAAIPuYAPAAEmtAABgA8AARX0BPgJJwACqTxzAAKpYgMAAqlPASy26uqQBAAEWwACqZC61qsAAkWnAAJGHAMAASb9KwACqcwEWwACqf4DAAKp6wEsturkwwABGMD9KwACqkQGAwACqmMBLLboGwACRsoGUwACqpcAAqr7AAKs/AAC4tAFqwACqpmADwAD9UQIAAAEDwACq0cAAqz8AAAABAQHAAKriAAAAg+5gA8AAScYAAGADwABFfQE+AknAAKruHMAAqveAwACq8sBLLmG6pAEAARbAAKsDLrWqwACRacAAkYcAwABJzkrAAKsSARbAAKsegMAAqxnASy5huTDAAEYwP0rAAKswAYDAAKs3wEsuYQbAAJGzgZTAAKtEwACrXcAAq8cAALi1AWrAAKtFYAPAAP1RAgAAAQPAAKtrwACrxwAAAAEBAcAAq3cAAACD7mADwABJ0gAAYAPAAEV9AT4BSsAAq4MBIxzAAKuPgMAAq4rASy8IuqQBAAEWwACrmy61qsAAkWnAAJGHAMAASeEWwACrsIDAAKurwEsvCLkwwABGMIDAAKu/wEsvCAFgA8AARX0GwACRtIGUwACrzMAAq9jAAK04AADAAF+3AAAAAQPAAKv5wACtOAAAAAICAsAArBUAAACD7mADwABGnwDAAKwoAAAAhX9gA8AARX0AAGADvOUBPgNOwACsRsAArFMAAIWCYAO95wEWwACsXoHAAKxVwEsvsblwwABFvU7AAKyAwACshwAAgmZgA7zTASMlwACslhbAAKyOgMAArInASy+hlibAAEaBYAO85RbAAKy0gMAArK/ASy+hlibAAEaBHMAArNMWwACsxi61qsAAkWnAAJGHtYYCAAIWwACs64DAAKzmwEsvoaTxwABGfYLAAKz1wEsvygDAAE1RAWADvNNKwACtCAEjJcAArRaDwACtD8BLL/BgA7zlFMAArSfASy/wAwFgA7zlKwFgA7zlBsAAkbWBlMAArT3AAK1WwACv3wAAuIIBasAArT5gA8AA/VECAAABA8AArWPAAK/fAAAAAQEBwACtbgAAAIPuYAPAAEbnAABgA8AARX0BPgRJwACtehbAAK2DgMAArX7ASzDYufnAAEb1SsAArZABgMAArZfASzDYP07AAK2lwACtrgAAhX9gA8AARX0BFsAArbWAwACtsMBLMNiFf8AARuRJwACuISXAAK4ugcAAriXASzEcYAPAAEhSPgJOwACuUsAArlsAAIYFYAPAAGDSARbAAK5mFMAArl3ASzEcAQFgA8AASFKGBcAASFRJwACudhbAAK6DgsAArnrASzFfwABFzMAAYOA+BE7AAK67wACuzwAAwABfuGADwABiIwEmwACuuwGCwACu0cBLMV9gA8AAYiNOwACvA8AArwoAAISFXQPAAPzaAmADvOVgA8AAYNIBFsAAryCDwACvDMBLMayEhcAAYiVOwACvPsAAr0QAAICWYAPAAGDSARzAAK9MhMAAr0bASzHXSwEAARbAAK9SgMAAr03ASzDYlibAAEbiAMAA/O5JwACvZCEcwACvboXAAK9owEsyCkgBAAErAMAA/V4+AUrAAK+DARzAAK+RFsAAr4ouwABfhsAAkWnAAJGKqooCAAKFwACvncBLMgoWwACvpC61qsAAkWnAAJGHAMAARKs/Pz9KwACv0AGAwACv18BLMNgGwACRtoGUwACv5MAAr/3AALfnAAC4hQFqwACv5WADwAD9UQIAAAEDwACwC8AAt+cAAAABAQHAALAXAAAAg+5gA8AARwQAAGADwABFfQE+BE7AALAwwACwOQAAhX9gA8AARX0BFsAAsECAwACwO8BLMvCFf8AARwhJwACwThzAALBtFsAAsFkWwACwUi7AAF+GwACRacAAkYq41sAARKSDFwEAAYHAALB2wEszCwDAAP2oPgFJwACxgBbAALG3HMAAsZccwACxkxbAALGNgcAAsYTASzMLglHAAEWDSwEAAZMAwAD8uLVUAQABFsAAsaEuwABTisAAkWnAAJGOAMAARdi0Nr3VPgFKwACx0wEcwACx6RbAALHjgcAAsdrASzMLglHAAEWDSwEAAZMAwAD8uD9JwACyARzAALIOgcAAsgXASzMLuZUAAAAAwABF/j4DTsAAsjLAALJDAADAAF+5YAPAAEhSASbAALIyAYHAALJFwEszC2ADwABIUk7AALJnwACycAAAhgVgA8AAYbMBJsAAsmcBFsAAsoOCwACycsBLNAyGBcAASFRgA8AAYbNKwACykwEcwACyoRbAALKaLsAAX4bAAJFpwACRirjeAgACFsAAsrmDwACysMBLNDdhwABhuRbAALLBLrWqwACRacAAkYcAwABErUnAALLbHMAAsuiBwACy38BLMwu5lAAAAADAAEX9PgNOwACzDsAAsx8AAMAAX7lgA8AASFIBJsAAsw4BgcAAsyHASzMLYAPAAEhSTsAAs0XAALNOAACGBWADwABhiAEmwACzRQEWwACzYYLAALNQwEs01IYFwABIVGADwABhiErAALNxARzAALN/FsAAs3guwABfhsAAkWnAAJGKuN4CAAIWwACzl4PAALOOwEs0/2HAAGGOFsAAs58utarAAJFpwACRhwDAAEStPgJOwACzz8AAs9QAAIKQYAO95wEWwACz34HAALPWwEszC7lwwABFvUnAALP2IhzAALQPFsAAs/ouwABTisAAkWnAAJGOtWYBAAGCwAC0G8BLNX8AvkIAIRzAALRcHMAAtEMWwAC0Li7AAFOKwACRacAAkY61bAEAAYLAALRWwEs1fwC+RUgBAAErAMAA/Sg+Ak7AALR8wAC0hQAAhgVgA8AARX0BHMAAtI4WwAC0hy7AAF+GwACRacAAkYq43gIAAhzAALS/FsAAtKouwABTisAAkWnAAJGOtWwBAAGCwAC00sBLNX8AvkUWwAC02S61qsAAkWnAAJGHAMAARK1JwAC08BbAALUWHMAAtQkWwAC09C7AAFOKwACRacAAkY6tbwEAAYLAALUQwEs1fwC+ILKlvdY+Aj0cwAC2GRbAALYTgMAAtg7ASzLwmf/AAEWFuSwCAAKAwAC2IcBLMvCDwAC2J8BLNg4AwABFb0rAALY8AYDAALZDwEsy8D4BSsAAtmQBg8AAtmvASzYOP0nAALaSIhbAALab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AAEBAcAAzxMAAACD7mADwABGkAAAYAPAAEV9AT4DTsAAzyzAAM80AAC0T2ADwABFfQEcwADPO4DAAM82wEtIrLl9AQABFsAAz0sutarAAJFpwACRhwDAAEaJScAAz8glwADP1IHAAM/MwEtIx2ADwABIUj4CTsAAz/jAANABAACGBWADwABg0gEWwADQCxTAANADwEtIxwEBYAPAAEhShgXAAEhUScAA0BslwADQKILAANAfwEtJHmADwABg9z4DTsAA0FvAANBiAACCRWADvOgBFsAA0G0UwADQZMBLSR4CAWADwABg95YmwABg+U7AANCRwADQpAAAtKBgA70PARbAANCtg8AA0KbAS0lptKC860nAANDJHMAA0O4WwADQ4ITAANDNwEtJl7SuvSBIAQABFsAA0P8WwADQ9oDAANDxwEtIrKTxwABGfbSuwABLaQDAAGjOPgJAIRbAANFwgMAA0WvAS0isudDAAEZywADRasAA0YEASsAA0Y4BNcAA0ZkAAAEAYAPAAEa4AR/AANGZwABGxAQABIPAANGnwEtJaRzAANHDHMAA0bsWwADRtIDAANGvwEtIrIJRwABFg5YvAQABlADAAPyBgK0AAAAAwAD8fRbAANHggMAA0dvAS0isuXDAAEW9FsAA0faAwADR8cBLSKyFHcAARpIANQAAAAEAWwEXwADSE4XAANIRwEtKJqVhFsAA0iyAwADSJ8BLSKylYcAARYDAAEWAhQDAS0omPz8/SsAA0lsBgMAA0mLAS0isBsAAkbuBlMAA0m/AANKIwADbyQAAuJEBasAA0nBgA8AA/VECAAABA8AA0pnAANvJAAAAAQEBwADSqAAAAIPuYAPAAEa4AABgA8AARX0BPgQ9HMAA0rQuwABflQEAAYDAANLRwEtLJADAAJGbTsAA0unAANLxAACWJmADvNMBFsAA0viAwADS88BLSySWJsAARrpJwADTBhzAANMSgcAA0wrAS0tbSAEAARbAANMkFsAA0xUus0DAAJGMsR64bADAAP1ePgFJwADTPxzAANNWFsAA008WwADTSIDAANNDwEtLJIJRwABFg2HAAPzYSAEAAZUAwAD9KD4BSsAA02YBNcAA03EAAAEAYAPAAEidAR/AANNxwABIpwQABBzAANOTFsAA042AwADTiMBLSySCUcAARYNLAQABkwDAAPy4HMAA06MWwADTnYDAANOYwEtLJIJRwABFg0sBAAGUAMAA/LgrFsAA08MWwADTri7AAFOKwACRacAAkY6Fpb33ADUAAAABAFsBF8AA09mCwADT18BLS+6lYRbAANPygMAA0+3AS0skpWHAAEWAwABFgIIAwEtL7j9JwADUGBzAANQkgcAA1BzAS0tbSAEAARbAANQ2FsAA1Ccus0DAAJGMsZC43gDAAP1ePgFJwADUUhzAANRpFsAA1GIWwADUW4DAANRWwEtLJIJRwABFg2HAAPzYSAEAAZUAwAD9KD4BSsAA1HkBHMAA1IAuwABfvwEAAYDAANSUwEtLJADAAJG8P0nAANSuHMAA1LqBwADUssBLS1tIAQABFsAA1MwWwADUvS6zQMAAkYyxibjXAMAA/V4+AUnAANT2HMAA1Q0WwADVBhbAANT/gMAA1PrAS0skglHAAEWDYcAA/NhIAQABlQDAAP0oPgJOwADVKsAA1TgAAMAAX8BgA8AARX0BHMAA1UUWwADVP4DAANU6wEtLJIJRwABFg0sBAAGTAMAA/LhJwADVUiXAANVkgsAA1VbAS02UYAPAAEhSPgJOwADViMAA1ZEAAIYFYAPAAEhSARTAANWTwEtNlAIBYAPAAEhSScAA1awWwADVwhbAANW5g8AA1bDAS03ohgXAAEhUuk/AAGDXSsAA1coBg8AA1dHAS03oPz8/ScAA1fgcwADWCxbAANX8LrNAwACRjLHnAQABgcAA1hbAS0tbALlHPgFJwADWKBzAANY/FsAA1jgWwADWMYDAANYswEtLJIJRwABFg2HAAPzYSAEAAZQAwAD9KD4CTsAA1lzAANZlAAAfYAPAAEV9ARzAANZyFsAA1myAwADWZ8BLSySCUcAARYNLAQABkwDAAPy4ScAA1n8WwADWrBzAANaMgsAA1oPAS06gtVQBAAEWwADWli7AAFOKwACRacAAkY4AwABF2LQ2vdU+AUrAANbKAYLAANbRwEtOoD8/ScAA1vgcwADXCxbAANb8LrNAwACRjLHoAQABgcAA1xbAS0tbALlIPgFJwADXKBzAANc/FsAA1zgWwADXMYDAANcswEtLJIJRwABFg2HAAPzYSAEAAZQAwAD9KD4CTsAA11zAANdlAAAfYAPAAEV9ARzAANdyFsAA12yAwADXZ8BLSySCUcAARYNLAQABkwDAAPy4ScAA138WwADXqxzAANeMgsAA14PAS09+tVoBAAEWwADXlS7AAFOKwACRacAAkY4AwABF3rQ2vdU+AUrAANfJAYLAANfQwEtPfj8/ScAA1/ccwADYChbAANf7LrNAwACRjLHpAQABgcAA2BjAS0tbALlJPgFJwADYKhzAANhBFsAA2DoWwADYM4DAANguwEtLJIJRwABFg2HAAPzYSAEAAZQAwAD9KD4CTsAA2F7AANhnAAAfYAPAAEV9ARzAANh0FsAA2G6AwADYacBLSySCUcAARYNLAQABkwDAAPy4ScAA2IEWwADYrRzAANiOgsAA2IXAS1BctWABAAEWwADYly7AAFOKwACRacAAkY4AwABF5LQ2vdU+AUrAANjLAYLAANjSwEtQXD8/ScAA2PkiHMAA2QWBwADY/cBLS1tIAQABFsAA2RcWwADZCC6zQMAAkYyxeLjGAMAA/V4BHMAA2TeBwADZL8BLS1tIAQABFsAA2UkWwADZOi6zQMAAkYyxdrjEAMAA/V4+AUnAANldHMAA2XQWwADZbRbAANlmgMAA2WHAS0skglHAAEWDYcAA/NhIAQABlADAAP0oPgJOwADZkcAA2ZoAAB9gA8AARX0BHMAA2acWwADZoYDAANmcwEtLJIJRwABFg0sBAAGTAMAA/LhJwADZtCXAANnBgsAA2bjAS1FyYAPAAEhSPgJOwADZ6cAA2fIAAIYFYAPAAGDSARbAANn9FMAA2fTAS1FyAgFgA8AASFKGBcAASFRJwADaERbAANoeg8AA2hXAS1HDukrAAGDWPgNOwADaOcAA2j8AAICWYAPAAPo/ARbAANpKg8AA2kHAS1HDuk/AAGDXScAA2l4cwADaaoHAANpiwEtLW0gBAAEWwADafBbAANptLrNAwACRjLF2uMQAwAD9Xj4BSsAA2uIBHMAA2vAWwADa6S7AAF+GwACRacAAkYq44wIAAiGEwADbAcBLUg4WwADbCC61qsAAkWnAAJGHAMAARLI/ScAA23WEwADbecBLUg5KwADbgAEUwADbh8BLUXICAWADwABIUj8/Pz8/SsAA27oBgMAA28HAS0skBsAAkbyBlMAA287AANvbwADg0gAAwABfvwAAAAEDwADb7sAA4NIAAAABAQHAANv9AAAAg+5gA8AARrgAAGADwABFfQE+BU7AANxTwADcWgAA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AOp3FMAA6nHAS11qBQFgA8AAYSu1VQAAAADAAGE7SsAA6oMBKz9KwADqmAEcwADqp4LAAOqfwEtcLSABAAEkwADquwEWwADqsRTAAOqrwEtdagUBYAPAAGErqmbAAGEtAAA/ScAA6swlwADq1oXAAOrQwEtdamADwABhXT4BSsAA6vYBHMAA6wWCwADq/cBLXC0gAQABIxbAAOsMFMAA6wbAS11qBQFgA8AAYV2c8sAAYWInlrknnTMBYAPAAP3rAAA/ScAA6zklwADrQ4XAAOs9wEtdamADwABhET4BSsAA62MBHMAA63KCwADrasBLXC0gAQABJ4Q8AAA/ScAA64olwADrlIXAAOuOwEtdamADwABhRT4BSsAA7E4BHMAA7F2CwADsVcBLXC0gAQABJMAA7HQBFsAA7GcUwADsYcBLXWoFAWADwABhRauYwABhRwAAP0rAAOyFAStPwADsncAA7KoAAAGlW2EDAGADwABFfQADwADstcAA8vkAAAAAAAAAYAPAAEV9AT4HScAA7fsWwADuJxzAAO4FgcAA7f/AS1uos6ABAAEWwADuES7AAFOKwACRacAAkY4AwABFzbKlvdY+AUrAAO5EASs/ScAA7l8WwADuhhzAAO5pgcAA7mPAS1uorW8BAAEWwADucC7AAFOKwACRacAAkY4AwABFy7KlvdY+AUrAAO6jASs/TsAA7sfAAO7QAACk8WADwABLZAEawADu3LgbTsAA7vvAAO8IAADAAF/EYAO95wEewADvKcAAfIgDAAOFwADvVsBLX9EWwADvZoHAAO9gwEtbqLlwwABFvRbAAO93LrQfwACRacAAkYQAScAA75cWwADwHxzAAO+7FsAA75suwABTisAAkWnAAJGOtUMCAAKGwADv28BLX+wWwADwBRbAAO/2FsAA7+kutarAAJFpwACRh7NAwABNM7FLuJsAvhm1G73YPgFKwADwPQErP0nAAPD0FsAA8UgcwADxGBbAAPD4LsAAU4rAAJFpwACRjrVTAQABFsAA8SyBwADxJsBLW6i5cMAARb0Aviy1Gr3XPgNOwADxacAA8XAAAIJRXQPAAPypAWADwABFfQExwADxgGADwABFfQKBwADxgcBLW6iBwADxiMBLW6hOwADxwcAA8cgAAIF2YAPAAEV9AR/AAPHOwABGngcABoXAAPHwwEtf0RbA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acAAkY61UwEAARbAARbyg8ABFuvAS2nmuXDAAEW9AL4stRq91z4BSsABFysBH8ABFzbAAErMAwADgcABF2fAS2mDg8ABF3HAS2nmFsABF36AwAEXecBLaWi5cMAARb0APz9KwAEXowGAwAEXqsBLaWgGwACRw4GUwAEXt8ABF9DAARhzAAC4wAFqwAEXuGADwAD9UQIAAAEDwAEX3cABGHMAAAABAQHAARfoAAAAg+5gA8AASz0AAGADwABFfQE+AknAARf0HsABGAPAAIWxAgACFsABGBOAwAEYDsBLc3+6i8AAS0AWwAEYKIDAARgjwEtzf7sKwABLPwA+AUrAARg/ARbAARhSFsABGEuAwAEYRsBLc3+CUcAARYOAw8AA/I8/SsABGGQBgMABGGvAS3N/BsAAkcSBlMABGHjAARiRwAEbfwAAuLsBasABGHlgA8AA/VECAAABA8ABGJ3AARt/AAAAAQEBwAEYpwAAAIPuYAPAAEr3AABgA8AARX0BPgRJwAEYsxzAARi8gMABGLfAS3RAuqQBAAEWwAEYyC61qsAAkWnAAJGHAMAASwVKwAEY1wEWwAEY44DAARjewEt0QLkwwABK/j9OwAEZPMABGUYAALr6YAPAAEV9ARbAARlNgMABGUjAS3RAuvrAAEr9ScABGVwlwAEZaoHAARlgwEt0o2ADwABLKT4DTsABGYnAARmSAAC69GADwABiZgEWwAEZnhTAARmUwEt0owEBYAPAAEspuovAAEsrTsABGcHAARnSAADAAF/RYAO80wEewAEZ5sAAre0DAAOCwAEZ/cBLdOYWwAEaDIDAARoHwEt0QIXdwABK+xbAARomFsABGhkutarAAJFpwACRh7NAwABNMwBJwAEaPSEcwAEaUoPAARpBwEt1FkgBAAErAMAA/V4+Ak7AARqAwAEajAAAreNgA73qARzAARqvFsABGpouwABTisAAkWnAAJGOtTYBAAGCwAEaxMBLdOYAvg5KwAEa1wEfwAEa3sAASxoGAAYWwAEa8oDAARrtwEt0QLkwwABK/oLAARsAwEt05oTAARsKwEt1jxbAARsogMABGyPAS3RAhd3AAEr7g8ABGzXAS3UWFsABG0yAwAEbR8BLdEC5cMAARb0APz9KwAEbcAGAwAEbd8BLdEAGwACRxYGUwAEbhMABG53AARwcAAC4vAFqwAEbhWADwAD9UQIAAAEDwAEbr8ABHBwAAAABAQHAARu/AAAAg+5gA8AASwkAAGADwABFfQE+AknAARvLHMABG9SAwAEbz8BLdnm6pAEAARbAARvgLrWqwACRacAAkYcAwABLFErAARvvARbAARv7gMABG/bAS3Z5uTDAAEsQP0rAARwNAYDAARwUwEt2eQAAStNWAErTlwBK094AStQnAErUlABK16IASuEIAErh3ABK4p0ASuNsAErjuQBK5KsASuXeAErnuwBK6aIASup/AErrvgBK8KUASvnmAEr+twBLCe4ASw/oAEsRdwBLExkASxT3AEsW2QBLGDEASxirAEsemQBLH2YASyB7AEsjZwBLKsIASy2EAEsuKwBLLtIASy91AEswogBLMroASzeaAEs6JABLQRQAS0LUAEtIdgBLSu4AS1LjAEtV3wBLW1cAS2JAAEtisQBLY80AS2kyAEtzSQBLdAoAS3ZDAEt26gAAADcCwACRyIGUwAEcIcABHCfAASnCA8AAX9IAAAFgAcAARLwAAWABwACRbAUEwACRyoGUwAEchsABHJMJwABfewBdA8AA/ZwBYAPAAEV9AATAAJHLgZTAARyiwAEcsQmCyQBgA8AA+j8ABMAAkcyBlMABHMjAARzTCaTfAGADwABNKwAEwACRzYGUwAEc8MABHQkJgL0BasABHNhgA8AA/VECYAPAAP3rASfAAF/SBMAAkc6BlMABHRTAAR0ZGKQeAGADwABEmAErAQXAAJHagZTAAR0ewAEdHsABHWoAAAADwAEdLsABHWoAAAADAwPAAR00AAAEgslgA8AA+j8AwAEdSgAABKTfYAPAAE0rAMABHVwAAATAAF97XQPAAP2cAWADwABFfQAAYAPAAJHIAT8ECAHAAJHLgADAS3i8CAHAAJHMgQDAS3jMCAHAAJHKggDAS3jcCQHAAR0ewABFKAAAAAAHBsAAkdGBlMABHW/AAR2HwAEdxAEAwABTisAAkWkAAAABA8ABHZzAAR3EAAAAAAAAAGADvfIBSsABHaUBFsABHbEWwAEdpS6k38AAkcywvcAATTQGwACR04GUwAEdycABHdrAAR8JAAC48AFqwAEdymADwAD9UQIAAAEDwAEd5MABHwkAAAABAQHAAR3sAAAApB5gA8AARJgAAFwBPgM9F8ABHf4upB6AwAEeBsBLebvAAJHOScABHsoWwAEezi6CycAAkctKwAEe3wA/PRzAAR7sLrjDAQABgMABHv/AS3m7AMAARIMGwACR1IGUwAEfDsABHx/AASAOAAC4xQFqwAEfD2ADwAD9UQIAAAEDwAEfLsABIA4AAAABAQHAAR87AAAAmf9gA8AARUYAAFwBPgJOwAEfVcABH2EAALjNYAPAAEV9ARbAAR9pgMABH2PAS3pOgxnAAEU4Q8ABH3QhHMABH4eBwAEfe8BLemRIAQABKwDAAP1ePgNOwAEfpcABH6oAAIOwYAPAAEV9ARbAAR+4gcABH6zAS3pkg7DAAEWHPYnAAR/EwEt6ZCbAAR/EARzAAR/egcABH9LAS3pkhE0BAAEuAMAARe9gA8AARX09icABH/LAS3pkgsABIADAS3qsBsAAkdWBlMABIBPAASAgwAElvAAAwABf0wAAAAEDwAEgMcABJbwAAAADAwPAASBGAAAAwABf1GADwABFfQDAASBeAAAAn91gA8AARX0AwAEgcgAAAMAAX9VgA8AARX0AAGADwABGNwE+CE7AASCSwAEgmQAAYWADwABHBAEfwAEgn8AARxMDAAKBwAEgs8BLe1MWwAEg2hbAASDGFsABILoupN/AAJHMsL3AAE00tS6+BQGsSiEewAEhAsAAkWsCAAIWwAEhFoHAASEQwEt7U7lwwABFvRbAASEnLqTfwACRzAA9HMABIUoWwAEhRIDAASE6wEt7QZn/wABFhbkoAgACgMABIVTAS3tBg8ABIV/AS3uAAMAARWtOwAEhe8ABIYAAAIKQYAO95wEjFsABIcAcwAEhmILAASGKwEt7Y7VXAQABFsABIaouwABTisAAkWnAAJHRAMAARdu0Nr3VFsABIe2CwAEh38BLe2O5cMAARb0WwAEiKxbAASIXFsABIgsupN/AAJHMsL3AAE00tS6+BQFgA73nTsABIk3AASJTAACjrmADwABGNwE1wAEiWQAAAQBgA8AARjcBH8ABIlnAAEZLBAAEgsABImbAS3tjg8ABInXAS3uAgcABIn3AS3tThMABIoTAS3wvADUAAAABAFsBF8ABIpKFwAEikMBLfMKlYRbAASKwgMABIqbAS3tBpWHAAEWAwABFgIUAwEt8wj0cwAEi1xbAASLRgMABIsfAS3tBmf/AAEWFuSgCAAKAwAEi4cBLe0GFwAEi7MBLfK4AwABFa0nAAST2FsABJSgcwAElCILAAST6wEt7Y7VUAQABFsABJRIuwABTisAAkWnAAJHRAMAARdi1G73YPgE9HMABJVKCwAElRMBLe2O5jQIAAoDAASVtwEt7QYXAASV4wEt8rgDAAEX2Pz0cwAElmBbAASWKLsAAX3vAAJHKVgEAAYDAASWcwEt7QQDAAP2pSsABJawBhcABJbPAS3yuBsAAkdaBlMABJcHAASXSwAEmfAAAuIoBasABJcJgA8AA/VECAAABA8ABJdzAASZ8AAAAAQEBwAEl5AAAAIPuYAPAAEk9AABcAT4DScABJfAcwAEmAhbAASX0LsAAX3vAAJHKgxcBAAGAwAEmC8BLfj8AwAD9qErAASYSAD9OwAEmK8ABJjEAACdgA8AARX0BFsABJjiAwAEmM8BLfj8nwABJSz2JwAEmQ8BLfoccwAEmSy7AAF/TAwADgMABJl3AS34/FsABJmiAwAEmY8BLfj+Ff8AASUqBwAEmcsBLfocAwACR1QbAAJHXgZTAASaBwAEmksABJ0gAALiLAWrAASaCYAPAAP1RAgAAAQPAASaiwAEnSAAAAAEBAcABJrAAAACD7mADwABJTwAAXAE+A0nAASa8HMABJs4WwAEmwC7AAF97wACRyoMXAQABgMABJtfAS38kAMAA/ahKwAEm3gA/TsABJvfAASb9AAAnYAPAAEV9ARbAAScEgMABJv/AS38kJ8AASVo9icABJw/AS39sHMABJxcuwABf0wMAA4DAAScpwEt/JBbAASc0gMABJy/AS38khX/AAElZgcABJz7AS39sAMAAkdUGwACR2IGUwAEnTcABJ17AASnAAAC4jwFqwAEnTmADwAD9UQIAAAEDwAEndsABKcAAAAABAQHAASeMAAAAg+5gA8AARpcAAFwBPghOwAEnpcABJ60AAJYmYAO80wEWwAEntIDAASevwEuACZYmwABGgUnAASfBFsABJ8qAwAEnxcBLgAm50MAARnJKwAEn3QA/ScABJ+khHMABJ/WBwAEn7cBLgB9IAQABFsABKBMWwAEoBBbAASf4LqTfwACRzLNAwABNM7HfuU4AwAD9XkrAASgmAD9JwAEoMhzAAShEFsABKDYuwABfe8AAkcqDFwEAAYDAAShNwEuACQDAAP2oSsABKFQAP07AASjcwAEo4gAAo65gA8AARjcBHMABKOQuwABf0wMAA4DAASj/wEuACRbAASkKgMABKQXAS4AJhX/AAEaEHMABKRoWwAEpFC6kHsAAkc643gIAApMWwAEpLC6k38AAkcwAwABErQDAAJHVTsABKUzAASlVAADAAF/WYAPAAEV9ARzAASldFsABKVcupB7AAJHOuN4CAAIcwAEpbJSBxAAAAADAAPwoFsABKXAupN/AAJHMAMAARK09HMABKY8WwAEpiILAASmCwEuA24JRwABFg1YBAAGDwAEpk8BLgUYAwAD8uj0cwAEpshbAASmrg8ABKaLAS4FGuQvAAEWEVgEAAYLAASm2wEuA2wDAAPy6AABLeTIAS3mFAEt6GABLexUAS34JAEt+7gBLf9MAS4HqAAAABwLAAJHbgZTAASnFwAEpy8ABWWoDwABf1wAAAWABwABEgQABYAHAAJFsCATAAJHdgZTAASoxwAEqTwmAvQFqwAEqGWADwAD9UQJgA8AA/esBJ8AAX9cEwACR3oGUwAEqZ8ABKnIJpN8AYAPAAE0rAATAAJHfgZTAASqNwAEqlgnAAEWQAGADwACRcwAEwACR4YGUwAEqocABKqcYwABfhsAAkWkAYAPAAESYASsEwACR4oGUwAEqwMABKsgYnOYAYAPAAJH8ASsEwACR44GUwAEq5MABKyYYwABf2ABdA8AA/NoCYAPAAEV9YAPAAPo/AR/AASsKlFEAAmADwABFfWADwAD6PwAABMAAkeSBlMABKy/AAStMGMAAX4EAYAPAAPo/ASoEwACR5YGUwAEr9MABLAcYwABf2QBgA8AARX0BKwEFwACR+4GUwAErUcABK1HAASuIAAAAA8ABK2bAASuIAAAAAgICwAErbAAABKTfYAPAAE0rAMABK34AAATAAEWQYAPAAJFzAABgA8AAkdsBPwMIAcAAkd6AAMBLg3YIAcAAkd+BAMBLg4YJAcABK1HAAESHAAAAABEGwACR6IGUwAErjcABK6XAASviAQDAAFOKwACRaQAAAAEDwAErusABK+IAAAAAAAAAYAO98gFKwAErwwEWwAErzxbAASvDLqTfwACR3rC9wABNNAbAAJHpgZTAASwLwAEsHMABLVIBAMAAX9oAAAABA8ABLCvAAS1SAAAAAAAAAGADwABFfQE+AknAASwxHMABLEkWwAEsNS7AAF/ZwACR5UgBAAErAMAA/V4+Ak7AASyuwAEstwAAhgVgA8AAYNIBasABLL9gA8AAYhfAAPf+PRfAASzhLsAAX9kcwAEtBhbAAS0AFsABLPcunObAAJHipB7AAJH+qooCAAKAwAEtEsBLhHcWwAEtHC6k38AAkd4AwABEq8AAkeU/SsABLTQBFsABLTsuwABf2cAAkeUGwACR64GUwAEt2sABLd/AAS7eAADAAF/bAAAAAQPAAS32wAEu3gAAAAICAsABLgQAAADAAFTBYAPAAEdOAMABLhoAAACFf2ADwABFfQAAYAPAAPo/AT4EScABLiocwAEuRBbAAS49FsABLjaAwAEuLsBLhSSCUcAARYNhwAD82GMBAAGUAMAA/TJKwAEuSQEqP0nAAS5bIRzAAS50FsABLm4WwAEuZ4DAAS5fwEuFJIJRwABFg4MZwAD8jUgBAAGBwAEud8BLhTYAwAD9XkrAAS6BASo/ScABLpMWwAEurRbAAS6fgMABLpfAS4UkuhTAAEdTwABJ08AAZr5KwAEuvQEpP0rAAS7OASoGwACR7IGUwAEvlcABL5rAATWEAADAAF/cAAAAAQPAAS+xwAE1hAAAAAEBAcABL78AAAC4zWADwABFfQAAYAPAAPo/AT4ETsABL9/AAS/oAACFf2ADwABFfQEcwAEv9oDAAS/qwEuGL7l9AQABFsABMAYupN/AAJHeAMAARedOwAEwJcABMC0AAF5gA8AARX0BFsABMDuAwAEwL8BLhi+DsMAARYdEwAEwRT4GScABMFAiHMABMHocwAEwXYLAATBVwEuGgrl9AQABFsABMG0upN/AAJHeAMAARedIAQABgcABMH3AS4ZKAMAA/V4AHMABMJyCwAEwlMBLhoK5eAEAARbAATClLsAAU4rAAJFpwACR6ADAAEXIPgFKwAEwxgEpP0nAATDhIiXAATDtgsABMOXAS4aCYAPAAEdOABzAATEKLsAAX9sCAAIUwAExIsBLhoICAWADwABHToHAATErwEuGSgDAAJHrPgFKwAExQAEpP0nAATFbIhzAATFngsABMV/AS4aCuXgBAAEWwAExcC7AAFOKwACRacAAkegAwABFyAEcwAExpxbAATGbgsABMZPAS4aCtErAAEWIuXYAAAAAwAB4DD4BSsABMcMBKj9OwAEx7MABMfEAAIOwYAPAAEV9ARbAATH7gsABMfPAS4aCg7DAAEWHScABMgccwAEyEIPAATILwEuH1UgBAAErAMAA/V4+A07AATLLAAAAwABVuWADwABFRgBJwAEy3iXAATLqgsABMuLAS4aCYAPAAEgLPgE9jMABMwDAS4gcFsABMyUWwAEzGhbAATMUFMABMwzAS4aCAgFgA8AASAuZ/8AARYW5FcAARVOAw8AA/I9JwAEzPCXAATNIgsABM0DAS4aCYAPAAEg8PgJOwAEzsMABM7oAAIW6YAPAAEV9ARbAATPLFsABM8QUwAEzvMBLhoICAWADwABIPIJRwABFg4MZwAD8jUnAATPcJcABM+qFwAEz4MBLiKFgA8AASFI+A07AATQLwAE0EgAAuk9gA8AA+j8BFsABNCcWwAE0HhTAATQUwEuIoQUBYAPAAEhShgXAAEhUuk/AAGDXPYzAATQ7wEuIHCOGwAE0R8BLiPcWwAE0WBTAATRQwEuGggIBYAPAAEg8ukLAAEhDFsABNGwUwAE0ZMBLhoICAWADwABIPLpDwABIRAFgA8AARUZAIRzAATSUFsABNIsunObAAJHiwABf3QEAAYTAATSgwEuIHADAAJIIwAE0isABNKoAPz9JwAE0yyIhHMABNNmEwAE0z8BLiBxIAQABKwDAAP1eABzAATTxFsABNO6EwAE05MBLiByzmsAARUiAlwEAARbAATUBFsABNPuCwAE088BLhoKZ/8AARYWzmsAARUgAwAD9ND4BPYvAATURwEuH1RbAATUihMABNRjAS4gcgxnAAEU4Pz89isABNUHAS4aCg8ABNUvAS4fVIRzAATVmgsABNV7AS4aCSAEAASsAwAD9XkrAATV0ASoGwACR7YGUwAE1icABNY7AATlnAADAAF/eAAAAAQPAATWowAE5ZwAAAAEBAcABNbYAAAC4zWADwABFfQAAYAPAAPo/AT4CT8ABNqTAATapAAABwABf32EDAWADwABFfWADwAD6PwADwAE2ssABOH0AAAABAQHAATbAAAAArzdgA8AARX0AAGADwAD6PwE+AknAATbNJcABNtWCwAE20cBLiuNgA8AARvg+AUnAATeLHMABN7AcwAE3kxTAATePwEuK4wIBYAPAAEb4uX0BAAEWwAE3oy6k38AAkd4AwABG+0gBAAGAwAE3s8BLipoAwAD9XkrAATfAASk/ScABN9olwAE34oLAATfewEuK42ADwABG5z4CQBzAATgiHMABOAUUwAE4AcBLiuMCAWADwABG57l9AQABFsABOBUupN/AAJHeAMAARu1IAQABgMABOCXAS4qaAMAA/V7AATgBwAE4MABJwAE4OxzAATg/LsAAX+ABAAEUwAE4SsBLiuMCAWADwABG5wDAAJHvSsABOFABKT8/SsABOGsBKkrAATiEASIiHMABOJeAwAE4i8BLipq5eQEAARbAATikLsAAU4rAAJFpwACR6ADAAEXGABzAATjRgMABOMXAS4qauXUBAAEWwAE42C7AAFOKwACRacAAkegAwABFxQAcwAE5ExbAATj5LsAAX9jAAJHjmR0CAAKAwAE5LMBLipo0wAE5OQPAATk5wAE5YgAAAAAAAABgA8AA+j8BSsABOT8BHMABOVIWwAE5S4DAATk/wEuKmrkLwABFhJY2AQABgcABOVjAS4q5AMAA/HoAwAD89QbAAJHugZTAATlswAE5ccABOhcAAMAAX+EAAAABA8ABOYPAAToXAAAAAQEBwAE5kQAAALjNYAPAAEV9AABgA8AA+j8BPgFKwAE5pAEiJcABObeAwAE5q8BLjQZgA8AARvgAHMABOc8uwABf3gEAARzAATn2FMABOerAS40GAAFgA8AARvi5fQEAARbAAToGLqTfwACR3gDAAEb7AMAAke0GwACR74GUwAE6HMABOiHAATzfAADAAF/gAAAAAQPAATorwAE83wAAAAEBAcABOjkAAAC4zWADwABFfQAAYAPAAPo/AT4HScABOkwhFsABOmQWwAE6XYDAATpRwEuNprkLwABFhIFVwAD8i0rAATptASo/ScABOn8cwAE6gy7AAF/hAQABgMABOpbAS42mAMAAke5KwAE6pAEpP0nAATq1HMABOtEWwAE6xYDAATq5wEuNprRKwABFiLl2AAAAAMAAeAxKwAE64wEqP0nAATr1HMABOwWAwAE6+cBLjaa5eAEAARbAATsOLsAAU4rAAJFpwACR6ADAAEXIPgJJwAE7LSIcwAE7PYDAATsxwEuNprl+AAAAAMAARegAHMABO1AuwABf3AEAAYDAATtowEuNpgDAAJHsPgFKwAE8NwEpP0rAATxSASo/ScABPGolwAE8eoDAATxuwEuNpmADwABIdkrAATyOASo/ScABPKAlwAE8sIDAATykwEuNpmAD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AaeiFMABp53AS+LwBAFgA8AASdK6s8AASdRIAQABgsABp6/AS+JfAMAA/V4AHMABp9wWwAGnzxTAAafKwEvi8AQBYAPAAEnSuTDAAEYwSAEAAYHAAaffwEviTwDAAP1ePgFKwAGn8AA/P07AAagWwAGoHwAAuYxgA8AASdIBH8ABqCXAAEnnAgACgsABqDfAS+JfgcABqEbAS+JPAD0cwAGoXIDAAahSwEviP7koAgACFsABqHCAwAGoZsBL4j+DGcAARTiEwAGod8BL48MAwABFaz0cwAGolIPAAaiGwEvidYRYAQABhMABqKDAS+PDAMAARhQGwACSTIGUwAGossABqMPAAaxhAAC4lQFqwAGos2ADwAD9UQIAAAEDwAGoysABrGEAAAABAQHAAajPAAAAuM1gA8AASV8AAFwBPgtOwAGo68ABqPAAAIKQYAPAAGJmARbAAaj+gMABqPLAS+SDuovAAElkScABqRIhFsABqSOAwAGpF8BL5IO6k8AASW0+AUrAAak3AEnAAalKFsABqVOBwAGpTsBL5Jm6nsAAYm4+AUrAAalmAEnAAal5FsABqYKBwAGpfcBL5Jm5nsAAYnI+AUrAAamWAD9OwAGptsABqcQAALmhYAPAAGKNASbAAam2AYHAAanGwEvkmWADwABijU7AAancwAGp4AAAmcpgA7zBARbAAanwgsABqeLAS+UmlibAAGKPTsABqhDAAaocAADAAGAXXQPAAPypAWADwABFRgExwAGqK2ADwABFRgBOwAGqRcABqlIAAMAAYBhdA8AA/KkBYAPAAEVGATHAAaphYAPAAEVGAD0cwAGqai7AAGAZAwADgMABqnnAS+SDhMABqobAS+V1hcABqpPAS+WeAMAAkk5JwAGqpyIWwAGqt4TAAaqrwEvldYFVwAD8iwAWwAGqz4XAAarCwEvlnoFVwAD8i0rAAarYAD9OwAGq88ABqwEAAMAAYBVgA73nARzAAasgFsABqwsuwABTisAAkWnAAJJItTwBAAGDwAGrNcBL5U8AvhJOwAGrTMABq1IAAIF7YAPAAEV9ARbAAatggMABq1TAS+SDgmvAAElqRsABq3HAAauYwAGrggAAAJn/YAPAAEVGAITAAauLwEvldT4BPRzAAaugLsAAYBQDAAMUwAGrx8BL5pcIAIfAAavOwEvmZ4bAAavVwEvm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AIV2XwMBAAAAXAE+AkbAAK9NAMAAr1wAAACZGWADwACV8QAWwACvZS6D78AAlhI9HMAAr3OCwACvbcBNLeOFdQICXwMAAF8DAQACgMAAr3vATS2xgcAAr4TATS3KAMAAlfQ9HMAAr5MWwACvji6CacAAlhOFdQICXwMAAF8DAQACgMAAr5vATS2xgcAAr6TATS3KAMAAlAUGwACWG4CgwACvscAAr7XAAK/0AACvx8AAkqoAAAABA8AAr7vAAK/0AAAAAAAAAGADwACWEAFKwACvwQEfwACvxcAAlh8DAAIWwACvyS6D78AAlhIWwACv0S6CacAAlhMBoTEWwACv5i6hMcAAlhQGwACWHYCgwACv+cAAsAHAALAiAQCv0wAAAAEDwACwEcAAsCIAAAAAAAAAYAPAAPwFAUrAALAUAWrAALAUYAPAAPwFwACMKwAATSulAE0sFQBNLKwATS1tAE0uaABNLtcATS8eAAAABgLAAJYggKDAALAnwACwLcAAsy0DgicAAAFgAcAA/VEAAAkEwACWIoCgwACwScAAsE4JJwBgA8AA/AUABMAAliOAoMAAsF3AALBkCYYwAGADwAD6PwAEwACWJICgwACwc8AAsH0JtKMAYAPAAPo/AATAAJYlgKDAALCOwACwmQmWnQBgA8AA/esABMAAliaAoMAAsRbAALFkBpmvAGADwACWIAFqwACxKWADwACWIMAA7cQEwACWJ4CgwACxg8AAsdIGmbEAYAPAAJYgAWrAALGXYAPAAJYgwADt4gTAAJYogKDAALHxwACyRAbAAGB9AGADwACWIAFqwACyCWADwACWIMAA7gMEwACWKYCgwACyY8AAsrUGwABgfgBgA8AAliABasAAsnpgA8AAliDAAO4kBMAAliqAoMAAstvAALMGBikAXQPAAPypAWADwACWIAFqwACy5F0DwAD8qQFgA8AAliDAAO5CAQXAAJYugKDAALCewACwpMAAsPYBAAADwACwscAAsPYAAAAEAgLAALC3AAAEJ2ADwAD8BQDAALDDAAAElp1gA8AA/esAAsAAsNwAAASGMGADwAD6PwFqAGADwAD9DnnAALDqAAAEtKNgA8AA+j8BagBgA8AA/Q55YAPAAJYgAT8FCAHAAJYigADATTDMCAHAAJYlgQDATTDbCAHAAJYjggDATTDsCAHAAJYkgwDA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0NnATVQlAMAAlswGwACWwICgwADQ6sAA0O/AANFtAADAAGBVAAAAAQPAANEDwADRbQAAAgAAlvlgA8AA/VEBWwAAg9RgA8AA/VEBWwICAsAA0RcAAACHNF0DwACTSwJfAwAAXwMBAADAANEiAAAAhXZfAwEAAABcAT4BRsAA0S0AwADROwAAAKpPYAPAAJbHABbAANFDLp8YwACWuj0cwADRVILAANFPwE1U/YV1AgJfAwAAXwMBAAKAwADRXMBNVMuBwADRZcBNVOQAwACWzQbAAJbCgKDAANFywADRhMAA0c8AAK/HwACSqgAAAAEDwADRisAA0c8AAAAAAAAAYAPAAJa4AUrAANGWAR/AANGawACWxgIAARbAANGsLp8YwACWugGwgBbAANHELrCAwACWuwbAAJbEgKDAANHUwADR3MAA0fYBAK/TAAAAAQPAANHswADR9gAAAAAAAABgA8AA/AUBSsAA0e8BasAA0e9gA8AA/AXAAIm7AABNUugATVNYAE1T7wBNVIcATVVMAE1VrwBNVfYAAAAGAsAAlseAoMAA0fvAANIBwADUfAPAAGCKAAABYAHAAJPbAAACBMAAlsmAoMAA0izAANIwCYC9AGADwACVEgAEwACWyoCgwADSRcAA0koJgJYAYAPAAJUSAAEFwACW04CgwADST8AA0k/AANKsAAAAA8AA0lfAANKsAAAAAgICwADSXQAABIC9YAPAAJUSAMAA0mgAAASAlmADwACVEgAAYAPAAJbHAT8ECAHAAJbJgADATVaVCAHAAJbKgQDATValDABAIiXAANKDgMAA0n7ATVaVYAPAAJZiASXAANKWgMAA0pHATVaVYAPAAJZawADSfsAA0qsACQHAANJPwACT7gAAAAAFBsAAlsyAoMAA0rHAANKzwADS8wAAhE0AAAABA8AA0rzAANLzAAABAACCdmADwAD9UQFbAQEBwADSzAAAAIc0XQPAAJK+AV8DAAAAAF8DAAABSsAA0tgBHMAA0uCAwADS2MBNV1KwfgEAAS4AwACS9AbAAJbNgKDAANL4wADS+sAA01QAAIV1AAAAAQPAANMHwADTVAAAAgAAlvlgA8AA/VEBWwAAg9RgA8AA/VEBWwICAsAA0xsAAACHNF0DwACTSwJfAwAAXwMBAADAANMmAAAAhXZfAwEAAABfAwAAAUrAANM0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wACSqgAAAAEDwADXTcAA130AAAAAAAAAYAPAAJbiAUrAANdTAR/AANdXwACW7wEAARbAANduLsAARpjAAJbkAAbAAJbtgKDAANeCwADXisAA16QBAK/TAAAAAQPAANeawADXpAAAAAAAAABgA8AA/AUBSsAA150BasAA151gA8AA/AXAAIm7AABNXSoATV2aAE1eMQBNXoEATV7xAE1fSABNX48AAAAGAsAAlvCAoMAA16nAANevwADZsTfAAGCOAAABYAHAAJZiAAFgAcAAltQAAQXAAJb2AAAAAAQAAAMAAAAAAAAAAABgA8AAlvABPwEJAADAAJZpAAAAAAMGwACW8oCgwADU4cAA1OXAANTzAQLAAEaYAAAAAQPAANTzwADU8wAAAAAAAABbAAbAAJbzgKDAANT4wADVAcAA1SQBAKPCAAAAAQPAANUJwADVJAAAAAAAAABgA8AA+j8BSsAA1QwBJcAA1RsWwADVDC7AAEaYwACW1mADwAD96wbAAJb0gKDAANUpwADVMsAA1VcBAL7wAAAAAQPAANU/wADVVwAAAAAAAABgA8AA+j8BSsAA1UIBJcAA1VEWwADVQi7AAEaYwACW1mADwAD8BQAATWAGAE1gNQBNYIYATWDXAAAAAwLAAJb3gKDAANepwADXr8AA2bEDwABgjwAAAWABwACW8AAAAQTAAJb5gKDAANfzwADYAQnAAEaYAFsAAQXAAJcCgKDAANgGwADYBsAA2C4AAAADwADYGcAA2C4AAAABAQHAANgfAAAEwABGmFsAAGADwACW9wE/AggBwACW+YAAwE1hTQkBwADYBsAAlvYAAAAABQbAAJb7gKDAANgzwADYNcAA2IAAAIRNAAAAAQPAANg+wADYgAAAAQAAgnZgA8AA/VEBWwEBAcAA2E4AAACHNF0DwACSvgFfAwAAAABfAwAAAUrAANhaARzAANhigMAA2FrATWG1sHcBAAEuAMAAkvkGwACW/ICgwADYhcAA2IfAANjsAACFdQAAAAEDwADYlMAA2OwAAAIAAJb5YAPAAP1RAVsAAIPUYAPAAP1RAVsCAgLAANioAAAAhzRdA8AAk0sCXwMAAF8DAQAAwADYswAAAIV2XwMBAAAAXwMAAAFKwADYwQEcwADYyYDAANjBwE1iMbB3AgACLoHAANjowE1iSgDAAJOGBsAAlv2A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ltMCAAIcwABD5C6D7AEAAYLAAEPrwE2aiADAAJeRg8AAQ/LATZqYAADAAPy6AMAA/PlKwABEBwEfwABEEsAAlsYBAAGBwABEJMBNmjoAAABNf2oATYCGAE2BowBNgjsATYM9AE2EPwBNhJgATYU9AE2F4gBNhjIATYaCAE2IpgBNkcsATZI1AE2TmQBNk+8ATZQ9AE2VmABNlhkATZbpAE2XTwBNl68ATZhIAE2Y3wBNmT0ATZnmAE2bGgAAABoCwACXn4GYwABH+MAAR/7AAEuNA8AAYL8AAAFgAcAA/VEAAAIEwACXoYGYwABIWsAASGAJoVUAYAPAAJenAATAAJeigZjAAEhxwABIeAkiAGADwAD96wABBcAAl6aBmMAASBTAAEgUwABIQgAAAAPAAEglwABIQgAAAAICAsAASCsAAAShVWADwACXpwDAAEg4AAAEImADwAD96wAAYAPAAJefAT4AAwgBwACXoYAAwE2cCAgBwACXooEAwE2cGAkBwABIFMAA/WcAAAAAAQbAAJekgZjAAEh9wABIhMAAS4sAACMAAAABA8AASIzAAEuLAAAAAAAAAGADwAD96wE+Ck7AAEiZwABInQAAn8dgA8AA/AUBFsAASKYWwABIny6hVcAAl6HAAGDAwACXq07AAEkBwABJBQAAwABJGWADwAD96wEWwABJDhbAAEkHLqFVwACXocAASRnAAJeuTsAASRvAAEkmAADAAGDBYAPAAPwFARzAAEksgcAASSjATZy6gLsCAAIngK+AwABJOsBNnI0AwAD9/knAAElEHMAASVOCwABJSMBNnOmBbQEAAYDAAElWwE2cjQDAAP01PYnAAElbwE2cuhzAAEllgcAASWHATZy6gL4CAAKTgsAASXLATZzpAMAA/gE/TsAASczAAEnRAACB+mADwAD96wGBwABJ08BNnLpOwABJ4MAASe4AAMAAYMJgA8AA/AUBHMAASfWDwABJ8MBNnXaWYAEAASeArwDAAP3/ScAASgwcwABKHoTAAEoQwE2dk4FtAQABkwDAAP01PYvAAEokwE2ddhzAAEowg8AASivATZ12gL4BAAEcwABKSITAAEo6wE2dk2QBAAGUAMAA/SoAwAD+AT9OwABKWcAASmAAAIMkYAPAAP3rARzAAEpng8AASmLATZ12gL4CAAKTHMAASniAwABKdMBN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wABpGhzAAGknFsAAaR4ugbHAAJesSAEAARbAAGkuFsAAaSouwABJGcAAl65hwAD97wDAAP0oPgQ9F8AAaT4uwABgyGrAAGlNYAPAAPwFgZ7AAJepPRfAAGlZLsAAYMkrwACXqj0XwABpcS7AAGDAFsAAaYAugbHAAJeswACXq0rAAGmQAD9OwABppsAAaasAAIKTYAPAAPwFARzAAGmxFsAAaa0uwABJGcAAl66ECwEAARbAAGm8LoGxwACXrADAAP35PRfAAGnLLsAAYMAWwABp2i6BscAAl6zAAJerScAAaegiHMAAafGAwABp7MBNs+9IAQABasAAaf5gA8AA/AXAAF6AAMAA/SgBHMAAagqAwABqBcBNs+9IAQABasAAahdgA8AA/AWD+ADAAP0oPgI9F8AAaj0uwABgyGrAAGpMYAPAAPwFIcAAl6k9F8AAalouwABgyRzAAGpmLsAAYOUBAAEWwABqcy6BscAAl6wAwACX0cAAl6pJwABqiSIiHMAAapKAwABqjcBNs+9IAQABasAAap9gA8AA/AW2FADAAP0oABzAAGq6HMAAarYWwABqrS6BscAAl6xkAQABlQDAAP0qYwEAARbAAGrAFsAAarwuwABJGcAAl65hwAD97wDAAP0yABzAAGrvHMAAatYWwABq0i7AAEkZwACXroQLAQABHMAAauoWwABq4S6BscAAl6xkAQABlADAAP0qAMAA/flIAQABasAAavxgA8AA/AXAAJpaAMAA/Sg+BEFFwABrHgEAAAABAGADwAD8BQEXwABrIy6BsRzAAGssFsAAayMugbHAAJesZAEAAZUAwAD9KsAAl6wBHMAAazsWwABrMi6BscAAl6xjAQABFsAAa0EWwABrPS7AAEkZwACXrmHAAP3vAMAA/TIBF8AAa0kugbEcwABrURbAAGtJLoGxwACXrGQBAAGUAMAA/SrAAJesPgJOwABrY8AAa2cAAMAAYOFgA8AA/AUBHsAAa2nAAJfQAQABHMAAa3YWwABrci7AAEkZwACXroQLAQABFsAAa4EugbHAAJesAMAA/fkAScAAa5UiIRzAAGudgsAAa5nATbY+SAEAAWrAAGugYAPAAPwFFQDAAP0oACEcwABrr4LAAGurwE22PkgBAAFqwABrsmADwAD8BQkAwAD9KELAAGu5AD89F8AAa84uwABgyGrA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wACkTcBN43AgAQABg8AApFXATeR0AABKwACkagEfwACkdcAAlU8BAAGBwACkjcBN40MABsAAl+qBmMAApKXAAKSwwAClVQAAwABhFAAAAAEDwACkz8AApVUAAAAAAAAAYAPAAJUSAT4BScAApNgcwACk3C7AAGD1AQABJ4QmAMAAl9c+AUrAAKT5ARzAAKUALsAAYREAAAAAwACX6D4BSsAApTMBHMAApTouoVoAAAAAwACX5wbAAJfrgZjAAKVawAClZcAApk0AAIJrAAAAAQPAAKVvwACmTQAAAAAAAABgA8AAlRIBPgNOwAClg8AApY4AAIJrYAPAAJUSARzAAKWQLsAAYRQAAAAAwACX6knAAKW3IiEcwAClyBbAAKW7LsAAYMjAAJepSAEAAWrAAKXLYAPAAPwFgZ4AwAD9KAEhHMAApdwWwACl0y6BscAAl6xIAQABFsAApeMWwACl3y7AAEkZwACXrmHAAP3vAMAA/Sg+AT0cwACl8y6BxQEAASTAAKYrAifAAGEVHsAApgvAAJfOAQABFsAAphwuwABgyMAAl6kAAMAAl9g/SsAApjgBgMAApj/ATeWKBsAAl+yBmMAAplLAAKZcwACnXAAAhVEAAAABA8AApmXAAKdcAAAAAAAAAGADwACT+wE+A07AAKZ4wACmggAAhVFgA8AAk/sBHMAApoQuwABB2AAAAADAAJfuScAAppoiIRzAAKarFsAApp4uwABgyMAAl6lIAQABasAApq5gA8AA/AWBngDAAP0oASEcwACmvxbAAKa2LoGxwACXrEgBAAEWwACmxhbAAKbCLsAASRnAAJeuYcAA/e8AwAD9KD4BPRzAAKbWLoHFAQABJMAApw4CJ8AAYRUewACm7sAAl84BAAEWwACm/y7AAGDIwACXqQAAwACX2D9KwACnSAGAwACnT8BN5pEGwACX7YGYwACnYcAAp2fAAKhGAADAAEHdAAAAAQPAAKdxwACoRgAAAAAAAABgA8AAlAABPgNOwACnisAAp5UAAIYWXQPAAPypAWADwACT+wExwACnomADwACT+wBDwACnqyEcwACnsy7AAGDwAQABasAAp8JgA8AA/AWD+wDAAJfUPgJOwACn3cAAp+cAAIVRYAPAAJP7ARzAAKfpLsAAQdgAAAAAwACX7j0cwACoDIDAAKgBwE3nmlYBAAGBwACo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l69hwAD82IGNAQABlADAAP0rgsAAsGPATe6/AMAA/LlKwACwdgGCwACwfcBN7r8/P0rAALCbAR/AALCmwACUGAEAAYHAALC6wE3tnAAGwACX74GYwACwzsAAsNjAALGDAADAAGEWAAAAAQPAALDjwACxgwAAAAAAAABgA8AAk/sBPgRJwACw7BzAALDwLsAAYPIAAAAAwACX1krAALEDAR/AALEOwACUjwAAAAA/TsAAsSfAALEyAACCa2ADwACVEgEcwACxNC6hWgAAAADAAJfnPRzAALFLLsAAYPEAAAAAwACX1UrAALFiAR/AALFtwACUjwEAAYDAALF0wE3v2wAGwACX8IGYwACxiMAAsZLAALI+AADAAGEiAAAAAQPAALGcwACyPgAAAAAAAABgA8AAk/sBPgROwACxqsAAsbIAALCjYAPAAPo/ARzAALG0LsAAYPUBAAEng4gAwACX107AALHWwACx4QAAgmtgA8AAlRIBHMAAseMuoVoAAAAAwACX5z0cwACx+i7AAGDxAAAAAMAAl9VKwACyEQEfwACyHMAAlRECAAKBwACyJsBN8I2AwACyMsBN8GQABsAAl/GBmMAAskPAALJNwACzDgAAwABhFwAAAAEDwACyV8AAsw4AAAAAAAAAYAPAAJP7AT4EScAAsmAWwACyZC7AAGDKwACXrT0cwACydC6BxQEAASfAAGElAMAAl9g/TsAAsrPAALK+AACCa2ADwACVEgEcwACywC6hWgAAAADAAJfnPRzAALLXLsAAYPEAAAAAwACX1UrAALLuAR/AALL5wACUmwEAAYDAALL/wE3xSQAGwACX8oGYwACzE8AAsx3AALQRAADAAGEYAAAAAQPAALMxwAC0EQAAAAEBAcAAszIAAACY21sAAGADwACT+wE+BE7AALNJwACzVAAAnZhgA8AA/esBFsAAs1YuwABgycAAl6pJwACzZSIhFsAAs2ouwABgysAAl60AHMAAs3wuwABg8AEAAWrAALOLYAPAAPwFCQDAAJfUPgI9HMAAs5suwABg8QAAAADAAJfVSsAAs7QBJsAAs7QBHMAAs8aAwACzu8BN8ccgAQABgcAAs8fATfHdAABgA8AAk/s/PRzAALPeLsAAYPEAAAAAwACX1UrAALP1ASbAALP1ARzAALQHgMAAs/zATfHHIAEAASsAAGADwACT+wbAAJfzgZjAALQWwAC0IMAAtegAAMAAYRkAAAABA8AAtC/AALXoAAAAAAAAAGADwACT+wE+BT0cwAC0OC7AAGDvAQABasAAtEdgA8AA/AWEFADAAJfTTsAAtF/AALRpAACFumADwACVEgEcwAC0ay6hWgAAAADAAJfnPRzAALSCLsAAYO8BAAFqwAC0kWADwAD8BYTwAMAAl9NOwAC0qMAAtLYAAK52YAPAAJP7ARzAALS4LsAAQdgAAAAAwACX7knAALTOHMAAtNIuwABg9QEAASeaEADAAJfXPgJOwAC1PcAAtUsAAK54YAPAAJP7ARzAALVNLsAAQdgAAAAAwACX7krAALVlAR/AALVwwACUMgMAA4DAALVzwE3zCIHAALV+wE3zTILAALWNwE3zjgA+AUrAALWwAR/AALW7wACUMwIAAoDAALXFwE3zCIHAALXQwE3zTAAGwACX9IGYwAC17cAAtffAALuuAADAAGEaAAAAAQPAALX/wAC7rgAAAAAAAABgA8AAk/sBPgdPwAC20cAAttsAAAHAAGEmYQMBYAPAAJUSYAPAAJP7AAPAALbkwAC4iAAAAAEBAcAAtvAAAACqT2ADwACVEgAAYAPAAJP7AT4GTsAAtwnAALcTAACFumADwACVEgErScAAtyEhHMAAtyYuwABg8AEAAWrAALc1YAPAAPwFwACJuwDAAJfUPgI9isAAt0vATfSIHMAAt1cuoVoAAAAAwACX5z0cwAC3ci7AAGDvAQABasAAt4FgA8AA/AXAAIm7AMAAl9M/TsAAt6bAALetAACsMmADwACVEgErScAAt7shHMAAt8AuwABg8AEAAWrAALfPYAPAAPwFhPAAwACX1D4CPYvAALfiwE31AxzAALfrLqFaAAAAAMAAl+c9HMAAuAYuwABg7wEAAWrAALgVYAPAAPwFhPAAwACX0z9OwAC4NsAAuDsAAIJpYAPAAJP7ARzAALg9LsAAQdgAAAAAwACX7krAALhVAR/AALhgwACURgQABIHAALhkwE30bYLAALhqwE30iIPAALh1wE31A4TAALh9wE31egA9HMAAuI8uwABg7wEAAWrAALieYAPAAPwFhBQAwACX00nAALirHMAAuK8uwABg8AEAAWrAALi+YAPAAPwFwACJuwDAAJfUPgFKwAC40gEcwAC44oDAALjZwE30QyAB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AJYSSAEAASsAwAD9Xj4BPRzAAEJFLsAAYU8EAAIWwABCXYDAAEJZwE40YoPvwACWEmrAAEJlYAPAAPwFwACJuwLAAGFRKsAAYVIqwACYVT89HMAAQrQubwEAASeDIQDAAJhHQUfAAELCFsAAQs6AwABCysBONGKhMcAAlhQEAcAAQvhqwABC+GADwACWIMAA7cQAPgFCwABDBgABwABDJmrAAEMmYAPAAJYgwADt4gA+Az0cwABDNS5vAgABJ4DZAcAAQP8pwACYRz0cwABDWy5vAQABJ5mxAMAAmEdCwABDcQABwABDkWrAAEORYAPAAJYgwADuJAA+Az0cwABDoy5vAgABJ4DZAcAAQP8pwACYRz0cwABDyS5vAQABJ5mwAMAAmEdCwABD3wABwABD/2rAAEP/YAPAAJYgwADuAwA+Az0cwABEEi5vAgABJ4DZAcAAQP8pwACYRz0cwABEOC5vAQABJ5myAMAAmEdCwABETwA9HMAARGAuwABhRQAAAADAAJhGTsAARHTAAESEAADAAEZ8YAPAAPwFARzAAESOLsAAYVgDAAEWwABEm4DAAESXwE40YoJpwACWEwLAAGFZKsAAYVcqwACYWz0cwABE2xbAAETQLsAAYTfAAJgzhv0AAAAAwACY5UrAAETtAYPAAET0wE43AwbAAJhxgZbAAEUMwABFGMAARnwAAIZZAWrAAEUNYAPAAP1RAgAAAQPAAEUwwABGfAAAAAEBAcAARUUAAACepWADwACU3wAAWwE+B07AAEVlwABFagAAwABhYWADwACYrgEfwABFcMAAmMEAAAAAPRzAAEWJgcAARYTATjfBhlkBAAGAwABFosBON6sAwACYuj0cwABFtC6oQgAAAADAAJhMPRzAAEXCLsAAYUwBAAEWwABF2IDAAEXMwE43q4JqwACU4gDAAJhRPRfAAEXzFsAARecuwABVacAAmD/AAEZ8HMAARg0uwABhYAMAAxbAAEYlgMAARhnATjergmrAAJTiFsAARjuAwABGL8BON6uAvcAAlOGBwABGQcBON8EAwACYcMAAmQs9HMAARkwuwABhTgEAARbAAEZggMAARlTATjergmrAAJTiAMAAmFM9HMAARm8uwABhRAAAAADAAJhFBsAAmHKBlsAARoHAAEaBwABKAAAAwABhUwAAAAEDwABGlsAASgAAAAAE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/AWE8D2NwABmo8BOTztqwABmwGADwAD8BYNHQsAAZtQABsAAZuZqwABm5mADwAD968AAm1TAAGb2asAAZvZgA8AA/evAAJtOwABnBmrAAGcGYAPAAP3rwACbVsAAZxdqwABnF2ADwAD968AAm1HAAGcoasAAZyhgA8AA/evAASA0wABnQWrAAGdBYAPAAP3rwAClLgA+Az2MwABnT8BOTyhqwABna2ADwAD8BYNHPY3AAGd/wE5PO2rAAGecYAPAAPwFg/tCwABnqwADwABnvWrAAGe9YAPAAP3rwACbYsAAZ85qwABnzmADwAD968AAm2XAAGffasAAZ99gA8AA/evAALW9AD4DPYzAAGfuwE5PKGrAAGgKYAPAAPwFg/s9jcAAaBnATk87asAAaDZgA8AA/AWD/kLAAGhIAALAAGhaasAAaFpgA8AA/evAAJtowABoamrAAGhqYAPAAP3rwACbagA+Az2MwABod8BOTyhqwABok2ADwAD8BYP+PY3AAGllwE5PO2rAAGmCYAPAAPwFwACWG0LAAGmaAAPAAGmsasAAaaxgA8AA/evAAJttwABpvGrAAGm8YAPAAP3rwACbc8AAacxqwABpzGADwAD968AAm3AAPgM9jMAAadnATk8oasAAafVgA8AA/AXAAJYbPY3AAGpawE5PO2rAAGp3YAPAAPwFwACVSULAAGqGAAABPgE9HMAAaqwWwABqpC6CU8AAmDCBxQEAASTAAGrIAifAAGFyg8AAasXATk8AAMAAmB89HMAAatYuwABhUwQAAoHAAGrswE5OsITAAGrywE5PKALAAGFRFsAAayMuwABhOcAAmDjAAGFSFsAAa0MuwABhOsAAmDnAAJhyScAAa1siHMAAa2KDwABrX8BOTwBIAQABJ5n+AMAA/foBHMAAa3CDwABrbcBOTwBIAQABJ8AARqIAwAD9+j4DPRzAAGv4Lm8CAAEngNkBwABA/ynAAJhHPRzAAGwcLm8BAAGDwABsIMBOTwAAwACYRz0cwABsKy5vAgABJ4DZAcAAQP8pwACYRz4DScAAbFyGwABsYMBOT049HMAAbGsuwABhRQAAAADAAJhGPz0cwABsfS5vAQABg8AAbIHATk8AAMAAmEc9HMAAbIwuwABhRQAAAADAAJhGPRzAAGyiLsAAYVMEAAKCwABsuMBOTtiFwABsv8BO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AMAAmTpOwABGBsAARgkAAKpUYAPAAP3rARbAAEYQgMAARgvATuFbqlTAAJVhTsAARiXAAEYvAADAAGHaXgMAAQEBWwABVwPAAJKtAFsBHMAARjEuwABhrgEAARbAAEZEgMAARj/ATuFbgJbAAJViAMAAmTtKwABGUAE0wABGVwPAAEZXwABG0gAAAAEBAcAARlgAAABbWwAAYAPAAJVeAT4BSsAARmsBH8AARnbAAJVvAwADJsAARqUBHMAARqWBwABGlcBO4YEgAQABhMAARqbATuJOAABgA8AAlRKCwABGssBO4cYmwABGvwEcwABGv4PAAEa2wE7h7iABAAGEwABGwMBO4k4AAGADwACVEgAGwACZZIGXwABG28AARujAAEgfAACwmwAAAAEDwABHA8AASB8AAAABAQHAAEcbAAAAg+5gA8AAlXAAAF4DAAEBAVsAAVcDwACSrQBbAT4DTsAARzTAAEdEAADAAGHTXgMAAQEBWwABVwPAAJKtAFsBHMAAR0Yumo8BAAEWwABHUYDAAEdMwE7i+p6lwACVcgDAAJk6TsAAR3DAAEd6AADAAGHaXgMAAQEBWwABVwPAAJKtAFsBHMAAR3wuwABhrgEAARbAAEePgMAAR4rATuL6gJbAAJViAMAAmTtKwABHmwE0wABHogPAAEeiwABIGwAAAAEBAcAAR6MAAABbWwAAYAPAAJVwAT4BSsAAR7YBH8AAR8HAAJV5AgACJsAAR/IBHMAAR/KBwABH48BO4yAgAQABg8AAR/PATuPFAABgA8AAlRkmwABICAEcwABICILAAEf/wE7jZSABAAGDwABICcBO48UAAGADwACVEgAGwACZZYGXwABIJMAASDHAAElyAACwmgAAAAEDwABIQcAASXIAAAABAQHAAEhOAAAAwABgTGADwACVegAAXgMAAQEBWwABVwPAAJKtAFsBPgROwABIZ8AASHUAAMAAYcdeAwABAQFbAAFXA8AAkq0AWwEcwABIdy6ajwEAARbAAEiCgMAASH3ATuRohbrAAJV8AMAAmTpOwABIn8AASKgAAMAAYcheAwABAQFbAAFXA8AAkq0AWwEcwABIqi6ajwEAARbAAEi1gMAASLDATuRoga3AAJV9AMAAmTpOwABIzcAASNsAAMAAYcleAwABAQFbAAFXA8AAkq0AWwEcwABI3S6ajwEAARbAAEjogMAASOPATuRohbvAAJV+AMAAmTpKwABI+AE0wABI/wPAAEj/wABJbgAAAAEBAcAASQAAAABbWwAAYAPAAJV6AUrAAEkOAR/AAEkSwACViQMAAybAAEkrARzAAEkrgcAASR7ATuSQIAEAAYTAAEkswE7leAAAYAPAAJUSJsAASUgBHMAASUiCwABJQMBO5NUgAQABhMAASUnATuV4AABgA8AAlRImwABJYgEcwABJYoPAAElVwE7lGiABAAGEwABJY8BO5XgAAGADwACVEgAGwACZZoGXwABJd8AASYTAAEnoAACwmQAAAAEDwABJjMAASegAAAABAQHAAEmRAAAAg+5gA8AAlZkAAF4DAAEBAVsAAVcDwACSrQBbAUrAAEmgARzAAEmgLsAAYdsCAAKAwABJsMBO5kI0wABJtgPAAEm2wABJ5wAAAAICAsAASbcAAACCRVsAwABJvwAAAFtbAABgA8AAlZkBSsAASc0BH8AASdHAAJWgAgACJsAASdUBgcAASdXATuaVYAPAAJUSJsAASd0BgsAASd3ATuagXQPAAPypAWADwACVEgAAwACZaAbAAJlngZfAAEntwABJ+sAASmEAALCYAAAAAQPAAEoDwABKYQAAAAEBAcAASgkAAACD7mADwACVigAAXgMAAQEBWwABVwPAAJKtAFsBSsAAShgBHMAAShguwABh2wIAAoDAAEoowE7nJTTAAEouA8AASi7AAEpgAAAAAgICwABKLwAAAIJFWwDAAEo3AAAAW1sAAGADwACVigFKwABKRQEfwABKScAAlZgCAAImwABKTgGBwABKTsBO53hgA8AAlRImwABKVgGCwABKVsBO54NdA8AA/KkBYAPAAJUSAADAAJloBsAAmWiBl8AASmbAAEpzwABNaAAAwABh2wAAAAEDwABKgsAATWgAAAACAgLAAEqIAAAAg+5gA8AAlYoAwABKjgAAAIceYQMCW1tbAABeAwABAQFbAAFXA8AAkq0AWwE+A07AAEq8wABKxwAAwABh3F4DAAEBAVsAAVcDwACSrQBbARzAAErJLpqPAQABFsAAStSAwABKz8BO6AqCRcAAlYwAwACZOk7AAEr4wABLBwAAwABh3V0DwAD8ZwFeAwABAQFbAAFXA8AAkq0AWwEcwABLPhzAAEsgFsAASxaAwABLEcBO6ApbwACVjYCrAQFeAwABAQFbAAFXA8AAkq0AWwEWwABLJC7AAGG2wACZQgDAAPxygK0AAAAAwAD8fUrAAEuqATTAAEuxA8AAS7HAAE1kAAAAAQEBwABLsgAAAFtbAABbAT4ETsAAS8rAAEvRAACCRWADwACT2wEmwABLygEcwABL3YLAAEvTwE7oQCABAAGEwABL3sBO6RYAAGADwACT207AAEwBwABMDwAAwABh3l0DwAD8qQFgA8AAlRIBMcAATB1gA8AAlRIARsAATCfAAExZwABMOQAAAJqzXgMAAQEBWwABVwPAAJKtAFsAg8AATEnATuiFPgJOwABMZ8AATG4AAIF2WwEcwABMfIfAAExwwE7plCABAAGEwABMfcBO6RYAAEnAAEyRJcAATJwUwABMlcBO6bsIAF0DwAD8ZwFbPgE9HMAATMOGwABMtcBO6WOApQEAASbAAEzKARTAAEzKwE7puwgBXQPAAPxnAVtdA8AA/GcBYAPAAJUSAMAA/Ls+AT0cwABM/IbAAEzuwE7pY1YBAAEmwABNAAEUwABNAMBO6bsIAGADwACVEgDAAPy6SsAATSEBHMAATS6BwABNKMBO6BogAgAChcAATS/ATukmHMAATUWGwABNN8BO6WOArQEAAAGFXirAAPx9AAAGwACZaYGXwABNbcAATXrAAE5rAACwlwAAAAEDwABNhcAATmsAAAABAQHAAE2NAAAAg+5gA8AAlaEAAF4DAAEBAVsAAVcDwACSrQBbAT4ETsAATabAAE2vAADAAGHfXgMAAQEBWwABVwPAAJKtAFsBHMAATbEumo8BAAEWwABNvIDAAE23wE7q3YW1wACVpADAAJk6TsAATdTAAE3eAADAAGHgXgMAAQEBWwABVwPAAJKtAFsBHMAATeAumo8BAAEWwABN64DAAE3mwE7q3YW3wACVpQDAAJk6TsAATf7AAE4BAACqVGADwAD96wEWwABOCIDAAE4DwE7q3apUwACVo0rAAE4QATTAAE4XA8AAThfAAE5nAAAAAQEBwABOGAAAAFtbAABgA8AAlaEBSsAATi4BH8AATjLAAJWxAwADg8AATjnATuuNJsAATkUBHMAATkWBwABOPcBO6wMgAQABhMAATkbATuvOAABgA8AAlRImwABOWwEcwABOW4LAAE5SwE7rSCABAAGEwABOXMBO684AAGADwACVEgAGwACZaoGXwABOcMAATn3AAE8qAACwlgAAAAEDwABOiMAATyoAAAABAQHAAE6QAAAAg+5gA8AAlbIAAF4DAAEBAVsAAVcDwACSrQBbAT4DTsAATqnAAE61AADAAGHhXgMAAQEBWwABVwPAAJKtAFsBHMAATrcumo8BAAEWwABOwoDAAE69wE7seB/AAJW1AMAAmTpOwABO2MAATtsAAKpUYAPAAP3rARbAAE7igMAATt3ATux4qlTAAJW0SsAATuoBNMAATvEDwABO8cAATyYAAAABAQHAAE7yAAAAW1sAAGADwACVsgFKwABPAAEfwABPBMAAlcACAAKCwABPC8BO7OImwABPGgEcwABPGoHAAE8PwE7sniABAAGDwABPG8BO7SMAAGADwACVEgAGwACZa4GXwABPL8AATzzAAE/sAACwlQAAAAEDwABPSMAAT+wAAAABAQHAAE9RAAAAg+5gA8AAlcEAAF4DAAEBAVsAAVcDwACSrQBbAT4DTsAAT2rAAE92AADAAGHhXgMAAQEBWwABVwPAAJKtAFsBHMAAT3gumo8BAAEWwABPg4DAAE9+wE7tpB/AAJXEAMAAmTpOwABPmcAAT5wAAKpUYAPAAP3rARbAAE+jgMAAT57ATu2kqlTAAJXDSsAAT6sBNMAAT7IDwABPssAAT+gAAAABAQHAAE+zAAAAW1sAAGADwACVwQFKwABPwQEfwABPxcAAlc8CAAKCwABPzcBO7g4mwABP3AEcwABP3IHAAE/RwE7tyiABAAGDwABP3cBO7k8AAGADwACVEgAGwACZbIGXwABP8cAAT/7AAFBTAACwlAAAAAEDwABQDsAAUFMAAAABAQHAAFAbAAAAg+5gA8AAld0AAF4DAAEBAVsAAVcDwACSrQBbAUrAAFAqATTAAFAqA8AAUCrAAFBTAAAAAQEBwABQKwAAAFtbAABgA8AAld0BSsAAUDkBH8AAUD3AAJXmAQABFsAAUE6AwABQScBO7tCAvcAAldIABsAAmW2Bl8AAUFjAAFBlwABQlgAAsJMAAAABA8AAUG7AAFCWAAAAAQEBwABQdAAAAIPuYAPAAJX5AABeAwABAQFbAAFXA8AAkq0AWwFKwABQfQE0wABQfQPAAFB9wABQlgAAAAEBAcAAUH4AAABbWwAAYAPAAJX5AUrAAFCMAR/AAFCQwACWAAAAAAAGwACZboGXwABQm8AAUKjAAFEVAACGVwAAAAEDwABQwMAAURUAAAABAQHAAFDVAAAAg+5gA8AAlecAAF4DAAEBAVsAAVcDwACSrQBbAUrAAFDkATTAAFDkA8AAUOTAAFEVAAAAAQEBwABQ5QAAAFtbAABgA8AAlecBSsAAUPMBH8AAUPfAAJXwAQABFsAAURCAwABRC8BO7/yAvcAAldIABsAAmW+Bl8AAURrAAFEnwABRdgAAsJIAAAABA8AAUTXAAFF2AAAAAQEBwABRQAAAAIPuYAPAAJXxAABeAwABAQFbAAFXA8AAkq0AWwFKwABRTwE0wABRTwPAAFFPwABRdgAAAAEBAcAAUVAAAABbWwAAYAPAAJXxAUrAAFFeAR/AAFFiwACV+AEAARbAAFFxgMAAUWzATvCcgL3AAJXSAAbAAJlwgZfAAFF7wABRiMAAUoEAALCRAAAAAQPAAFGTwABSgQAAAAEBAcAAUaMAAACD7mADwACWLwAAXgMAAQEBWwABVwPAAJKtAFsBPgNOwABRvMAAUckAAMAAYeJeAwABAQFbAAFXA8AAkq0AWwEcwABRyy6ajwEAARbAAFHWgMAAUdHATvE8hX/AAJYxAMAAmTpOwABR8sAAUf8AAMAAYeNeAwABAQFbAAFXA8AAkq0AWwEcwABSAS6ajwEAARbAAFIMgMAAUgfATvE8pPHAAJYyAMAAmTpKwABSGwE0wABSIgPAAFIiwABSfQAAAAEBAcAAUiMAAABbWwAAYAPAAJYvAUrAAFI5AR/AAFI9wACWPQIAAibAAFJYARzAAFJYgcAAUkzATvFiIAEAAYPAAFJZwE7yBQAAYAPAAJUSJsAAUnEBHMAAUnGCwABSZcBO8acgAQABg8AAUnLATvIFAABgA8AAlRIABsAAmXGBl8AAUobAAFKTwABTkwAAsJAAAAABA8AAUqXAAFOTAAAAAQEBwABStAAAAIPuYAPAAJYBAABeAwABAQFbAAFXA8AAkq0AWwE+A07AAFLNwABS3QAAwABh014DAAEBAVsAAVcDwACSrQBbARzAAFLfLpqPAQABFsAAUuqAwABS5cBO8qaAvcAAlgMAwACZOk7AAFMCwABTDwAAwABh2F4DAAEBAVsAAVcDwACSrQBbARzAAFMRLpqPAQABFsAAUxyAwABTF8BO8qaCasAAlgQAwACZOkrAAFMrATTAAFMyA8AAUzLAAFOPAAAAAQEBwABTMwAAAFtbAABgA8AAlgEBSsAAU0kBH8AAU03AAJYPAgACJsAAU2oBHMAAU2qBwABTW8BO8swgAQABg8AAU2vATvNvAABgA8AAlRkmwABTgwEcwABTg4LAAFN3wE7zESABAAGDwABThMBO828AAGADwACWEAAGwACZcoGXwABTmMAAU6XAAFYOAACwjwAAAAEDwABTrcAAVg4AAAABAQHAAFOyAAAAg+5gA8AAlhAAAF4DAAEBAVsAAVcDwACSrQBbAT4DTsAAU9HAAFPdAADAAGHkXQPAAPypAV4DAAEBAVsAAVcDwACSrQBbARzAAFP/HMAAU+sWwABT5IDAAFPfwE70EIPvwACWEoCrAQFeAwABAQFbAAFXA8AAkq0AWwEWwABT7y7AAGGvwACZPADAAPxygK0AAAAAwAD8fU7AAFQawABUIwAAwABhzF4DAAEBAVsAAVcDwACSrQBbARzAAFQlLpqPAQABFsAAVDCAwABUK8BO9BCCacAAlhMAwACZOkrAAFSJATTAAFSQA8AAVJDAAFYKAAAAAQEBwABUkQAAAFtbAABgA8AAlhABPgROwABUtMAAVLsAAIPvXQPAAPypAWADwACV8QExwABUyGADwACV8QBGwABU0sAAVQHAAFTkAAAAmrNeAwABAQFbAAFXA8AAkq0AWwCBwABU9MBO9DY+Ak7AAFUPwABVFgAAgXZbARzAAFUkhcAAVRjATvVRIAEAAYPAAFUlwE71DQAAScAAVTklwABVRIbAAFU9wE71eF0DwAD8ZwFbPgE9HMAAVWSEwABVXcBO9SKApQEAASbAAFVrARTAAFVrwE71eAYBXQPAAPxnAVtdA8AA/GcBYAPAAJXxAMAA/Ls+AT0cwABVloTAAFWPwE71IlYBAAEmwABVmgGGwABVmsBO9XhgA8AAlfEAwAD8uk7AAFXFwABVygAAgmlgA8AAk/sBJsAAVcUBHMAAVdSCwABVzMBO9K8gAQABg8AAVdXATvUNAABgA8AAk/tKwABV5wEfwABV8sAAlh8CAAKEwABV9sBO9SImwABV/gGFwABV/sBO9i9gA8AAlAAABsAAmXOBl8AAVhPAAFYgwABWXgAAsI4AAAABA8AAVjfAAFZeAAAAAQEBwABWSwAAAIPuYAPAAJZaAABeAwABAQFbAAFXA8AAkq0AWwFKwABWVAEewABWVMAAmTgBAAGAwABWWcBO9sYABsAAmXSBl8AAVmPAAFZwwABWpgAAsIwAAAABA8AAVoPAAFamAAAAAQEBwABWkwAAAIPuYAPAAJZIAABeAwABAQFbAAFXA8AAkq0AWwFKwABWnAEewABWnMAAmTgBAAGAwABWocBO9y8ABsAAmXWBl8AAVqvAAFa4wABW9wAAsIoAAAABA8AAVsvAAFb3AAAAAQEBwABW2wAAAIPuYAPAAJZRAABeAwABAQFbAAFXA8AAkq0AWwFKwABW5AE0wABW5APAAFbkwABW9wAAAAEBAcAAVuUAAABbWwAAYAPAAJZRAUrAAFbzAYDAAFbzwE73mAbAAJl2gZfAAFb8wABXCcAAV18AALCJAAAAAQPAAFcZwABXXwAAAAEBAcAAVyYAAACD7mADwACWagAAXgMAAQEBWwABVwPAAJKtAFsBSsAAVzUBNMAAVzUDwABXNcAAV18AAAABAQHAAFc2AAAAW1sAAGADwACWagFKwABXRAEfwABXSMAAlnMBAAEWwABXWYDAAFdUwE74IICWwACWbAAGwACZd4GXwABXZMAAV3HAAFfNAACwiAAAAAEDwABXg8AAV80AAAABAQHAAFeSAAAAg+5gA8AAlnwAAF4DAAEBAVsAAVcDwACSrQBbAUrAAFehATTAAFehA8AAV6HAAFfNAAAAAQEBwABXogAAAFtbAABgA8AAlnwBSsAAV7ABH8AAV7TAAJaFAQABFsAAV8eAwABXwsBO+MCAlsAAln4ABsAAmXiBl8AAV9LAAFffwABYOwAAsIcAAAABA8AAV/HAAFg7AAAAAQEBwABYAAAAAIPuYAPAAJaSAABeAwABAQFbAAFXA8AAkq0AWwFKwABYDwE0wABYDwPAAFgPwABYOwAAAAEBAcAAWBAAAABbWwAAYAPAAJaSAUrAAFgeAR/AAFgiwACWnQEAARbAAFg1gMAAWDDATvlggJbAAJaUAAbAAJl5gZfAAFhAwABYTcAAWJkAALCGAAAAAQPAAFhdwABYmQAAAAEBAcAAWGoAAACD7mADwACWdAAAXgMAAQEBWwABVwPAAJKtAFsBSsAAWHkBNMAAWHkDwABYecAAWJkAAAABAQHAAFh6AAAAW1sAAGADwACWdAFKwABYiAEfwABYjMAAlnsAAAAABsAAmXqBl8AAWJ7AAFirwABaHAAAhcEAAAABA8AAWMPAAFocAAAAAQEBwABY2AAAAIPuYAPAAJaGAABeAwABAQFbAAFXA8AAkq0AWwE+Ak7AAFj3wABZAgAAwABh5V0DwAD8qQFeAwABAQFbAAFXA8AAkq0AWwEcwABZIhzAAFkXFsAAWRGAwABZDMBO+oyEgcAAloiAqwEBXgMAAQEBWwABVwPAAJKtAFsBFsAAWRsumo/AAJk6AMAA/HKArQEAAAGFXirAAPx9SsAAWT8BNMAAWUYDwABZRsAAWhgAAAABAQHAAFlHAAAAW1sAAGADwACWhgE+Ak7AAFlowABZbgAAhIFdA8AA/KkBYAPAAJZiASbAAFloARzAAFnNHMAAWYaBwABZcMBO+rKAqwEBWwE0wABZigPAAFmKwABZwAAAAAEBAcAAWZgAAACas14DAAEBAVsAAVcDwACSrQBbAABbAUrAAFmpARzAAFm1g8AAWanATvunIAEAAYLAAFm2wE77RQAAAMAA/HKArQEAAAGFXirAAPx9XQPAAPypAWADwACWYkrAAFnsAR/AAFn3wACWkQEAAYPAAFoLwE77WgAGwACZe4GXwABaIcAAWi7AAFpQAACGXgAAAAEDwABaN8AAWlAAAAABAQHAAFo9AAAAg+5gA8AAlRwAAF4DAAEBAVsAAVcDwACSrQBbAUrAAFpGAR7AAFpGwACZOAEAAYDAAFpLwE78TQAGwACZfIGXwABaVcAAWmLAAFs4AACwgwAAAAEDwABacsAAWzgAAAABAQHAAFp/AAAAg+5gA8AAlVAAAF4DAAEBAVsAAVcDwACSrQBbAT4CTsAAWpjAAFqlAADAAGHmXgMAAQEBWwABVwPAAJKtAFsBHMAAWqcumo8BAAEWwABasoDAAFqtwE78trCEwACVUgDAAJk6SsAAWsEBNMAAWsgDwABayMAAWzQAAAABAQHAAFrJAAAAW1sAAGADwACVUAE+Ak7AAFrnwABa8AAAsIRgA8AAlRIBJsAAWucBHMAAWv6BwABa8sBO/NwgAQABgsAAWv/ATv06AABgA8AAlRJKwABbEQEfwABbGMAAlV0BAAGDwABbJMBO/U8ABsAAmX2Bl8AAWz3AAFtKwABdBQAAsIIAAAABA8AAW1/AAF0FAAAAAQEBwABbcQAAAIPuYAPAAJaeAABeAwABAQFbAAFXA8AAkq0AWwE+Ak7AAFu2wABbxAAAwABh510DwAD8qQFeAwABAQFbAAFXA8AAkq0AWwEcwABb5xzAAFvcFsAAW9OAwABbzsBO/dGIRcAAlqCAqwEBXgMAAQEBWwABVwPAAJKtAFsBFsAAW+Aumo/AAJk6AMAA/HKArQEAAAGFXirAAPx9SsAAXAQBNMAAXAsDwABcC8AAXQEAAAABAQHAAFwMAAAAW1sAAGADwACWngE+Ak7AAFwwwABcOQAAiEVdA8AA/KkBYAPAAJUSARzAAFy2HMAAXFSBwABcO8BO/feAqwEBYAPAAJUSATTAAFxzA8AAXHPAAFypAAAAAQEBwABcgQAAAJqzXgMAAQEBWwABVwPAAJKtAFsAAGADwACVEgFKwABckgEmwABckgEcwABcnoPAAFySwE7+6yABAAGCwABcn8BO/ooAAGADwACVEgDAAPxygK0BAAABhV4qwAD8fUrAAFzVAR/AAFzgwACWqwEAAYPAAFzxwE7+nwAGwACZfoGXwABdCsAAXRfAAF1lAACwgQAAAAEDwABdJcAAXWUAAAABAQHAAF0wAAAAg+5gA8AAlqwAAF4DAAEBAVsAAVcDwACSrQBbAT4BSsAAXTwBNMAAXUMDwABdQ8AAXWEAAAABAQHAAF1EAAAAW1sAAGADwACWrAFKwABdUgEfwABdVsAAlrcAAAAABsAAmX+Bl8AAXWrAAF13wABfuwAAsH8AAAABA8AAXY3AAF+7AAAAAQEBwABdoAAAAIPuYAPAAJa4AABeAwABAQFbAAFXA8AAkq0AWwE+A07AAF2/wABdzgAAwABh6F0DwAD8qQFeAwABAQFbAAFXA8AAkq0AWwEcwABd/BzAAF3oFsAAXd2AwABd2MBPACOfGMAAlrqAqwEBXgMAAQEBWwABVwPAAJKtAFsBFsAAXewuwABhr8AAmTwAwAD8coCtAAAAAMAA/H1OwABeD8AAXhoAALCAYAPAAPo/ARbAAF4hgMAAXhzATwAjsIDAAJa7SsAAXjEBNMAAXjgDwABeOMAAX7cAAAABAQHAAF45AAAAW1sAAGADwACWuAE+A07AAF5bwABeZgAAnxhdA8AA/KkBYAPAAJbHATHAAF5yYAPAAJbHAEbAAF58wABersAAXo4AAACas14DAAEBAVsAAVcDwACSrQBbAIHAAF6ewE8AST4CTsAAXrzAAF7DAACBdlsBHMAAXtGFwABexcBPAUcgAQABg8AAXtLATwEDAABJwABe5iXAAF7xhsAAXurATwFuXQPAAPxnAVs+AT0cwABfFYTAAF8KwE8BGIClAQABJsAAXxwBFMAAXxzATwFuBgFdA8AA/GcBW10DwAD8ZwFgA8AAlscAwAD8uz4BPRzAAF9LhMAAX0DATwEYVgEAASbAAF9PAYbAAF9PwE8BbmADwACWxwDAAPy6SsAAX3ABH8AAX3vAAJbGAgABhMAAX43ATwEYAbCAgsAAX6XATwDCBsAAmYCBl8AAX8DAAF/NwABgsgAAsH4AAAABA8AAX9rAAGCyAAAAAQEBwABf5AAAAIPuYAPAAJbHAABeAwABAQFbAAFXA8AAkq0AWwE+A07AAF/9wABgBgAAwABh114DAAEBAVsAAVcDwACSrQBbARzAAGAILpqPAQABFsAAYBOAwABgDsBPAnWAvcAAlskAwACZOk7AAGArwABgNQAAwABh2l4DAAEBAVsAAVcDwACSrQBbARzAAGA3LpqPAQABFsAAYEKAwABgPcBPAnWAlsAAlsoAwACZOkrAAGBOATTAAGBVA8AAYFXAAGCuAAAAAQEBwABgVgAAAFtbAABgA8AAlscBPgFKwABgaQEfwABgdMAAltMCAAImwABghQEcwABghYHAAGB9wE8CmyABAAGDwABghsBPAz4AAGADwACVEibAAGCbARzAAGCbgsAAYJLATwLgIAEAAYPAAGCcwE8DPgAAYAPAAJUSAAbAAJmBgZfAAGC3wABgxMAAYSIAALB9AAAAAQPAAGDWwABhIgAAAAEBAcAAYOUAAACD7mADwACXWAAAXgMAAQEBWwABVwPAAJKtAFsBSsAAYPQBNMAAYPQDwABg9MAAYSIAAAABAQHAAGD1AAAAW1sAAGADwACXWAFKwABhAwEfwABhB8AAl2UBAAEWwABhGoDAAGEVwE8D4RvAAJdaAAbAAJmCgZfAAGEnwABhNMAAYWYAALB7AAAAAQPAAGFAwABhZgAAAAEBAcAAYUkAAACD7mADwACXdAAAXgMAAQEBWwABVwPAAJKtAFsBSsAAYVIBJsAAYVIBHMAAYVIuwABhzwEAASewewDAAJlRXgMAAQEBWwABVwPAAJKtAFsGwACZg4GXwABha8AAYXjAAGIgAACwfAAAAAEDwABhgsAAYiAAAAABAQHAAGGJAAAAg+5gA8AAl2YAAF4DAAEBAVsAAVcDwACSrQBbAT4CTsAAYaLAAGGxAADAAGHQXgMAAQEBWwABVwPAAJKtAFsBHMAAYbMumo8BAAEWwABhvoDAAGG5wE8E/4JrwACXaADAAJk6SsAAYc8BNMAAYdYDwABh1sAAYhwAAAABAQHAAGHXAAAAW1sAAGADwACXZgE+AUrAAGHqAR/AAGH1wACXcwEAASbAAGIJARzAAGIJgcAAYfvATwUlIAEAAYLAAGIKwE8FgwAAYAPAAJUSAAAATrC5AE6xVwBOsZQATrICAE6yOQBOsvIATrN9AE6z2wBOtDQATrSlAE61FgBOtkIATrduAE65bABOumgATrwtAE69YwBOvmwATsBuAE7ChwBOxOIATsWkAE7GFgBOxq8ATsoaAE7LpgBOzZIATs8cAE7PbwBO0J0ATtHLAE7STQBO0s8ATtOhAE7UgQBO1VEATtbdAE7YCQBO2bQATtr8AE7b+gBO3WQATt50AE7e8wBO33IATuExAE7i0ABO5D4ATuYYAE7m+wBO594ATuqzAE7sTgBO7XoATu6mAE7vRgBO79IATvByAE7xEgBO8nwATvPmAE72nABO9wUATvduAE739gBO+JYATvk2AE751gBO+mIATvwjAE78jABO/acATv9rAE7/+QBPAksATwO3AE8EVgBPBNUATwXTAAAATgLAAJmGgZfAAGKzwABiucAAZVkDwABh6QAAAV0BwACTAAFbAAADBMAAmYiBl8AAYvrAAGMkCcAAYeoAXQPAAP2cAWADwACT2wEewABjGcAAwRcAAWADwACT2wAABMAAmYmBl8AAYzrAAGNXCcAAYaAAXQPAAP2cAWADwAD96wEewABjSsAAwRcAAWADwAD96wAABMAAmYqBl8AAY1/AAGNoGIDuAGADwAD8BQGTAQXAAJmRgZfAAGNtwABjbcAAY4cAAAADwABjhcAAY4cAAAAAAAAAYAPAAJmGAT8BCQHAAGNtwACTSgAAAAAEBsAAmYyBl8AAY4zAAGORwABj5gAAwABhrQAAAAEDwABjqsAAY+YAAAABAQHAAGOwAAAAg+5gA8AAk9sAAGADwAD6PwFKwABjvwEcwABj2BbAAGO/LsAAYerAAJmIgxcBAAGAwABj4cBPCCwAwAD9qAbAAJmNgZfAAGPrwABj8MAAZBwAAJqPAAAAAQPAAGP1wABkHAAAAAEBAcAAY/sAAACD7mADwACT2wAAXAE+AT0cwABkDIDAAGQHwE8ImoRNAQFbAS4AwACT4wbAAJmOgZfAAGQhwABkJsAAZLIAAMAARoIAAAABA8AAZC/AAGSyAAAAAQEBwABkNQAAAIPuYAPAAJPbAABcAT4DTsAAZEXAAGRMAACao2ADwAD8BQEWwABkTi6A7sAAmYo9HMAAZF6AwABkWcBPCPaETgEBWwEuAMAAk+RJwABkdyEcwABkgRbAAGR7LoDuwACZikgBAAGBwABkhMBPCQwAwAD9KD0cwABkpRbAAGSMLsAAYerAAJmIVgEAAYDAAGSpwE8I9gDAAP2pPwbAAJmPgZfAAGS3wABkt8AAZVcAAMAAYFIAAAABA8AAZMzAAGVXAAAAAQEBwABk3gAAAIPuYAPAAJbUAABbAT4DPRzAAGUDFsAAZOouwABh6sAAmYhWAQABgMAAZQfATwnCAMAA/alJwABlEhbAAGUbgMAAZRbATwnCo8LAAJbXPRzAAGUuFsAAZSQuwABhoMAAmYlWAQABJsAAZTcBFsAAZTeAwABlMsBPCcLAAEaYwACW1mADwAD96wDAAP2pPz0XwABlTi6A7hzAAGVMFsAAZU4ugO7AAJmKZAEAAZQAwAD9KsAAmYoAAE8IAABPCHAATwjKAE8JlgBPCn4AAAAEAsAAmZKBmYE2gTzAAEAgA8AAYesAAAFgAcAA/VEAAV0BwACTSwJgA8AA+j9gA8AAk9sAAQXAAJnYgZmBd4F9gZEBAAADgY+BkQAAAAAAAABgA8AAmZIBPwEJAYF9wAD9ZwAAAABDBsAAmZSBmYImgiuCUgAAwABh7AAAAAEDgjGCUgAAAAICAoI3AAAAvV5gA8AAk9sAgkMAAAC9X2ADwACT2wAAYAPAAPo/AUqCTQEqBsAAmZWBmYKngqyDBgAAwABh7QAAAAEDgraDBgAAAAQEBIK8AAAAvV5gA8AAk9sAgsoAAACHIWADwAD9UQCC1wAAAL1fYAPAAJPbAILlAAAAhyJgA8AA/VEAAGADwAD6PwFKgvYBHIL9gYL2wE8LeEgBAAGDgwDATwuUAMAA/V4GwACZloGZg1KDV4OxAADAAGHuAAAAAQODYYOxAAAABAQEg2cAAAC9XmADwACT2wCDdQAAAMAAYe9gA8AA/esAg4IAAAC9X2ADwACT2wCDkAAAAMAAYfBgA8AA/esAAGADwAD6PwFKg6EBHIOogYOhwE8L+EgBAAGDg6vATwwWAMAA/foGwACZl4GZg7aDu4R7AADAAGHxAAAAAQODxIR7AAAAAgICg8oAAAC9XmADwACT2wCD1gAAAL1fYAPAAJPbAABgA8AA+j8BPgNJg+Meg+fAAPXmAgACgIPxwE8MboGD+MBPDHwASoQAASk/SYQRIhyEG4CEFcBPDG5IAQABKwDAAP1eARyELIGEJsBPDHxIAQABKwDAAP1eSoQ1ARyEPC7AAGHsAgACgIRDwE8MboGESsBPDHwAwACZlD9KhFYBHIRjgIRdwE8MboV1AgJgA8AA+j9gA8AAk9sCLoGEccBPDHwAwACT5QbAAJmYgZmEgISFhg4AAMAAYfIAAAABA4SShg4AAAACAgKEngAAAMAAYfNdA8AA/KkBYAPAAJPbAISwAAAAwABh9F0DwAD8qQFgA8AAk9sAAGADwAD6PwE+BE6EwYTHAAAnYAPAAPwFAZNDhNAiHITdgoTXwE8NjWMBAAEWhOWAhN/ATw1UYcAA/NgAwAD9MgAchPWChO/ATw2NYwEAARaE/YGE98BPDWthwAD82ADAAP0yPgJJhQ0hHIUSLsAAYfECAAIchSGAhRzATw1USwEAAYKFIsBPDY0AwAD8uByFL4GFKsBPDWtLAQABgoUwwE8NjQDAAPy4AMAAmZdKhTkBKj89ioVNwE8NjRyFUoKFTcBPDY1kAQABlADAAP0qSYVgHIVqgoVkwE8NjWMBAAEWhXKAhWzATw1UYcAA/NgAwAD9Mj4BSoWCARyFiS7AAGHsAgACHIWVgIWQwE8NVEsBAAGChZbATw2NAMAA/LgrAMAAmZRJhbAchbqChbTATw2NYwEAARaFwoGFvMBPDWthwAD82ADAAP0yPgFKhdIBHIXZLsAAYewCAAIcheWBheDATw1rSwEAAYKF5sBPDY0AwAD8uCsAwACZlD9Khf8BKQbAAJmZgZmGE4YkhsoAALC0AWqGFGADwAD9UQIAAAEDhjCGygAAAAICAoY5AAAAg+5gA8AAk+8AhkQAACCFdmADwACT2wAAYAPAAPo/AT4DSYZPISWGV4GGU8BPDztgA8AAk+9KhmQBHIZrLsAAYewCAAKAhnLATw8tgYZ4wE8POwDAAJmUP06GioaQAACD1mADwACT7wEmhooBgYaSwE8PO2ADwACT70qGmwEchqIuwABh8gIAAhaGtYCGsMBPDy2CacAAk/EWhsGChrvATw+LgmnAAJPxAMAAmZgGwACZmoGZhs+G4IfkAACwcAFqhtBgA8AA/VECAAABA4b8h+QAAAACAgKHFQAAAIPuYAPAAJdJAIcgAAAghXZgA8AAk9sAAGADwAD6PwE+A0mHKyElhzOBhy/ATxAXYAPAAJdJSodQARyHVy7AAGHsAgACgIdewE8QCYGHZMBPEBcAwACZlD9Oh4aHjAAAg9ZgA8AAl0kBJoeGAYGHjsBPEBdgA8AAl0lKh5cBHIeeLsAAYe0EAASAh6nATxAJFoe0gIevwE8QCcAARpjAAJdLgofEwE8QZxaH0YKHy8BPEGfAAEaYwACXSwDAAJmVBsAAmZuBmYfph/qI9gAAsHIBaofqYAPAAP1RAgAAAQOIFIj2AAAAAgICiCsAAACD7mADwACXNgCINgAAIIV2YAPAAJPbAABgA8AA+j8BPgNJiEEhJYhJgYhFwE8RBWADwACXNkqIZAEciGsuwABh7AIAAoCIcsBPEPeBiHjATxEFAMAAmZQ/ToiYiJ4AAIPWYAPAAJc2ASaImAGBiKDATxEFYAPAAJc2SoipARyIsC7AAGHtBAAEgIi7wE8Q9xaIxoCIwcBPEPfAAEaYwACXOIKI1sBPEVUWiOOCiN3ATxFVwABGmMAAlzgAwACZlQbAAJmcgZmI+4kMigQAALB0AWqI/GADwAD9UQIAAAEDiSWKBAAAAAICAok7AAAAg+5gA8AAlyEAiUYAACCFdmADwACT2wAAYAPAAPo/AT4DSYlRISWJWYGJVcBPEfNgA8AAlyFKiXMBHIl6LsAAYewCAAKAiYHATxHlgYmHwE8R8wDAAJmUP06JpomsAACD1mADwACXIQEmiaYBgYmuwE8R82ADwACXIUqJtwEcib4uwABh7QQABICJycBPEeUWidSAic/ATxHlwABGmMAAlyOCieTATxJDFonxgonrwE8SQ8AARpjAAJcjAMAAmZUGwACZnYGZigmKGosWAACwdQFqigpgA8AA/VECAAABA4o0ixYAAAACAgKKSwAAAIPuYAPAAJcKAIpWAAAghXZgA8AAk9sAAGADwAD6PwE+A0mKYSElimmBimXATxLhYAPAAJcKSoqEARyKiy7AAGHsAgACgIqSwE8S04GKmMBPEuEAwACZlD9OiriKvgAAg9ZgA8AAlwoBJoq4AYGKwMBPEuFgA8AAlwpKiskBHIrQLsAAYe0EAASAitvATxLTFormgIrhwE8S08AARpjAAJcMgor2wE8TMRaLA4KK/cBPEzHAAEaYwACXDADAAJmVBsAAmZ6BmYsbiyyMIAAAsHcBaoscYAPAAP1RAgAAAQOLRIwgAAAAAgICi1kAAACD7mADwACW9wCLZAAAIIV2YAPAAJPbAABgA8AA+j8BPgNJi28hJYt3gYtzwE8Tz2ADwACW90qLkAEci5cuwABh7AIAAoCLnsBPE8GBi6TATxPPAMAAmZQ/TovCi8gAAIPWYAPAAJb3ASaLwgGBi8rATxPPYAPAAJb3SovTARyL2i7AAGHtBAAEgIvlwE8TwRaL8ICL68BPE8HAAEaYwACW+YKMAMBPFB8WjA2CjAfATxQfwABGmMAAlvkAwACZlQbAAJmfgZmMJYw2jTYAALB5AWqMJmADwAD9UQIAAAEDjFGNNgAAAAICAoxpAAAAg+5gA8AAluIAjHQAACCFdmADwACT2wAAYAPAAPo/AT4DSYx/ISWMh4GMg8BPFL1gA8AAluJKjKMBHIyqLsAAYewCAAKAjLHATxSvgYy3wE8UvQDAAJmUP06M2IzeAACD1mADwACW4gEmjNgBgYzgwE8UvWADwACW4kqM6QEcjPAuwABh7QQABICM+8BPFK8WjQaAjQHATxSvwABGmMAAluSCjRbATxUNFo0jgo0dwE8VDcAARpjAAJbkAMAAmZUGwACZoIGZjTuNTI4CAACwewFqjTxgA8AA/VECAAABA41YjgIAAAACAgKNYQAAAIPuYAPAAJd0AI1sAAAghXZgA8AAk9sAAGADwAD6PwE+A0mNdyEljX+BjXvATxWrYAPAAJd0So2MARyNky7AAGHsAgACgI2awE8VnYGNoMBPFasAwACZlD9OjbKNuAAAg9ZgA8AAl3QBJo2yAYGNusBPFatgA8AAl3RKjcMBHI3KLsAAYe0EAASAjdXATxWdFo3ggI3bwE8VnZx4wACXdoKN6cBPFfsWjfaCjfDATxX7nHjAAJd2AMAAmZUGwACZoYGZjgeOGI6+AACwfAFqjghgA8AA/VECAAABA44ijr4AAAACAgKOKQAAAIPuYAPAAJdmAI40AAAghXZgA8AAk9sAAGADwAD6PwE+A0mOPyEljkeBjkPATxaVYAPAAJdmSo5SARyOWS7AAGHsAgACgI5gwE8Wh4GOZsBPFpUAwACZlD9OjnaOfAAAg9ZgA8AAl2YBJo52AYGOfsBPFpVgA8AAl2ZKjocBHI6OLsAAYfECAAIWjp2AjpjATxaHgmvAAJdoFo6vgo6pwE8W5YJrwACXaADAAJmXBsAAmaKBmY7DjtSPogAAsH0Bao7EYAPAAP1RAgAAAQOO5o+iAAAAAgICjvUAAACD7mADwACXWACPAAAAIIV2YAPAAJPbAABgA8AA+j8BPgNJjwshJY8TgY8PwE8XcWADwACXWEqPJgEcjy0uwABh7AIAAoCPNMBPF2OBjzrATxdxAMAAmZQ/To9Sj1gAAIPWYAPAAJdYASaPUgGBj1rATxdxYAPAAJdYSo9jARyPai7AAGHtBAAEgI91wE8XYxaPgICPe8BPF2MbwACXWoKPicBPF8EWj5aCj5DATxfBG8AAl1oAwACZlQbAAJmjgZmPp4+4kIwAALB+AWqPqGADwAD9UQIAAAEDj8WQjAAAAAICAo/PAAAAg+5gA8AAlscAj9oAACCFdmADwACT2wAAYAPAAPo/AT4DSY/lISWP7YGP6cBPGFlgA8AAlsdKj/sBHJACLsAAYewCAAKAkAnATxhLgZAPwE8YWQDAAJmUP06QIpAoAACD1mADwACWxwEmkCIBgZAqwE8YWWADwACWx0qQMwEiHJA6LsAAYfECAAIWkEmAkETATxhLgL3AAJbJFpBVgpBPwE8YqYC9wACWyQDAAJmXAByQZi7AAGHxAgACFpB1gJBwwE8YS4CWwACWyhaQgoKQfMBPGKmAlsAAlsoAwACZlwbAAJmkgZmQkZCikXwAALB/AWqQkmADwAD9UQIAAAEDkLiRfAAAAAICApDLAAAAg+5gA8AAlrgAkNYAACCFdmADwACT2wAAYAPAAPo/AT4DSZDhISWQ6YGQ5cBPGWdgA8AAlrhKkQABHJEHLsAAYewCAAKAkQ7ATxlZgZEUwE8ZZwDAAJmUP06RMJE2AACD1mADwACWuAEmkTABgZE4wE8ZZ2ADwACWuEqRQQEckUguwABh8gIAAhaRW4CRVsBPGVmfGMAAlroWkW2CkWfATxm3nxjAAJa6AMAAmZgGwACZpYGZkYGRkpIFAACwgQFqkYJgA8AA/VECAAABA5GgkgUAAAACAgKRqwAAAIPuYAPAAJasAJG2AAAghXZgA8AAk9sAAGADwAD6PwE+AkmRwSElkcmBkcXATxpDYAPAAJasSpHYARyR3y7AAGHsAgACgJHmwE8aNYGR7MBPGkMAwACZlD9KkfYBKQbAAJmmgZmSCpIbku0AALCCAWqSC2ADwAD9UQIAAAEDkjCS7QAAAAICApJCAAAAg+5gA8AAlp4Akk0AACCFdmADwACT2wAAYAPAAPo/AT4DSZJYISWSYIGSXMBPGs9gA8AAlp5KknYBHJJ9LsAAYewCAAKAkoTATxrBgZKKwE8azwDAAJmUP06SpZKrAACD1mADwACWngEmkqUBgZKtwE8az2ADwACWnkqStgEckr0uwABh8gIAAhaS0ICSy8BPGsGIRcAAlqAWkuCCktrATxsfiEXAAJagAMAAmZgGwACZp4GZkvKTA5OlAACGXgFqkvNgA8AA/VECAAABA5MMk6UAAAACAgKTEgAAAIPuYAPAAJUcAJMdAAAghXZgA8AAk9sAAGADwAD6PwE+A0mTKCElkzCBkyzATxurYAPAAJUcSpM6ARyTQS7AAGHsAgACgJNIwE8bnYGTTsBPG6sAwACZlD9Ok12TYwAAg9ZgA8AAlRwBJpNdAYGTZcBPG6tgA8AAlRxKk24BHJN1LsAAYe0EAASAk4DATxudFpOLgJOGwE8bnYPRwACVI4KTkMBPG/sWk52Ck5fATxv7g9HAAJUjAMAAmZUGwACZqIGZk6qTu5SDAACwgwFqk6tgA8AA/VECAAABA5PLlIMAAAACAgKT2AAAAIPuYAPAAJVQAJPjAAAghXZgA8AAk9sAAGADwAD6PwE+A0mT7iElk/aBk/LATxyVYAPAAJVQSpQHARyUDi7AAGHsAgACgJQVwE8ch4GUG8BPHJUAwACZlD9OlDGUNwAAg9ZgA8AAlVABJpQxAYGUOcBPHJVgA8AAlVBKlEIBHJRJLsAAYe0EAASAlFTATxyHFpRfgJRawE8ch7CEwACVUoKUacBPHOUWlHaClHDATxzlsITAAJVSAMAAmZUGwACZqYGZlIiUmZVxAACFwQFqlIlgA8AA/VECAAABA5SxlXEAAAACAgKUxgAAAIPuYAPAAJaGAJTRAAAghXZgA8AAk9sAAGADwAD6PwE+A0mU3CEllOSBlODATx1/YAPAAJaGSpT9ARyVBC7AAGHsAgACgJULwE8dcYGVEcBPHX8AwACZlD9OlS+VNQAAg9ZgA8AAloYBJpUvAYGVN8BPHX9gA8AAloZKlUABHJVHLsAAYfICAAIWlVqAlVXATx1xhIHAAJaIFpVngpVhwE8dz4SBwACWiADAAJmYBsAAmaqBmZV2lYeWAAAAsIYBapV3YAPAAP1RAgAAAQOVl5YAAAAAAgIClaQAAACD7mADwACWdACVrwAAIIV2YAPAAJPbAABgA8AA+j8BPgJJlbohJZXCgZW+wE8eW2ADwACWdEqV0wEcldouwABh7AIAAoCV4cBPHk2BlefATx5bAMAAmZQ/SpXxASkGwACZq4GZlgWWFpbgAACwhwFqlgZgA8AA/VECAAABA5YoluAAAAACAgKWNwAAAIPuYAPAAJaSAJZCAAAghXZgA8AAk9sAAGADwAD6PwE+A0mWTSElllWBllHATx7nYAPAAJaSSpZoARyWby7AAGHsAgACgJZ2wE8e2YGWfMBPHucAwACZlD9OlpSWmgAAg9ZgA8AAlpIBJpaUAYGWnMBPHudgA8AAlpJKlqUBHJasLsAAYe0EAASAlrfATx7ZFpbCgJa9wE8e2YCWwACWlIKWycBPHzcWltaCltDATx83gJbAAJaUAMAAmZUGwACZrIGZluWW9pfAAACwiAFqluZgA8AA/VECAAABA5cIl8AAAAACAgKXFwAAAIPuYAPAAJZ8AJciAAAghXZgA8AAk9sAAGADwAD6PwE+A0mXLSEllzWBlzHATx/RYAPAAJZ8SpdIARyXTy7AAGHsAgACgJdWwE8fw4GXXMBPH9EAwACZlD9Ol3SXegAAg9ZgA8AAlnwBJpd0AYGXfMBPH9FgA8AAlnxKl4UBHJeMLsAAYe0EAASAl5fATx/DFpeigJedwE8fw4CWwACWfoKXqcBPICEWl7aCl7DATyAhgJbAAJZ+AMAAmZUGwACZrYGZl8WX1piYAACwiQFql8ZgA8AA/VECAAABA5fmmJgAAAACAgKX8wAAAIPuYAPAAJZqAJf+AAAghXZgA8AAk9sAAGADwAD6PwE+A0mYCSElmBGBmA3ATyC7YAPAAJZqSpgiARyYKS7AAGHsAgACgJgwwE8grYGYNsBPILsAwACZlD9OmEyYUgAAg9ZgA8AAlmoBJphMAYGYVMBPILtgA8AAlmpKmF0BHJhkLsAAYe0EAASAmG/ATyCtFph6gJh1wE8grYCWwACWbIKYgcBPIQsWmI6CmIjATyELgJbAAJZsAMAAmZUGwACZroGZmJ2Yrpl8AACwigFqmJ5gA8AA/VECAAABA5jBmXwAAAACAgKY0QAAAIPuYAPAAJZRAJjcAAAghXZgA8AAk9sAAGADwAD6PwE+A0mY5yElmO+BmOvATyGlYAPAAJZRSpkDARyZCi7AAGHsAgACgJkRwE8hl4GZF8BPIaUAwACZlD9OmTCZNgAAg9ZgA8AAllEBJpkwAYGZOMBPIaVgA8AAllFKmUEBHJlILsAAYe0EAASAmVPATyGXFplegJlZwE8hl4CWwACWVoKZZcBPIfUWmXKCmWzATyH1gJbAAJZWAMAAmZUGwACZr4GZmYGZkppgAACwjAFqmYJgA8AA/VECAAABA5mlmmAAAAACAgKZtQAAAIPuYAPAAJZIAJnAAAAghXZgA8AAk9sAAGADwAD6PwE+A0mZyyElmdOBmc/ATyKPYAPAAJZISpnnARyZ7i7AAGHsAgACgJn1wE8igYGZ+8BPIo8AwACZlD9OmhSaGgAAg9ZgA8AAlkgBJpoUAYGaHMBPIo9gA8AAlkhKmiUBHJosLsAAYe0EAASAmjfATyKBFppCgJo9wE8igYCWwACWTYKaScBPIt8WmlaCmlDATyLfgJbAAJZNAMAAmZUGwACZsIGZmmWadptGAACwjgFqmmZgA8AA/VECAAABA5qNm0YAAAACAgKaoQAAAIPuYAPAAJZaAJqsAAAghXZgA8AAk9sAAGADwAD6PwE+A0matyElmr+BmrvATyN5YAPAAJZaSprXARya3i7AAGHsAgACgJrlwE8ja4Ga68BPI3kAwACZlD9OmwibDgAAg9ZgA8AAlloBJpsIAYGbEMBPI3lgA8AAllpKmxkBHJsgLsAAYfECAAIWmy+AmyrATyNrgJbAAJZfFps8gps2wE8jyYCWwACWXwDAAJmXBsAAmbGBmZtLm1ycbgAAsI8BaptMYAPAAP1RAgAAAQObZJxuAAAAAgICm2kAAACD7mADwACWEACbdAAAIIV2YAPAAJPbAABgA8AA+j8BPgNJm38hJZuHgZuDwE8kVWADwACWEEqbkAEcm5cuwABh7AIAAoCbnsBPJEeBm6TATyRVAMAAmZQ/Tpuym7gAAIPWYAPAAJYQASabsgGBm7rATyRVYAPAAJYQSpvDASIiHJvKLsAAYfICAAIWm92Am9jATyRHg+/AAJYSFpvrgpvlwE8kpYPvwACWEgDAAJmYAByb/i7AAGHxAgACFpwNgJwIwE8kR4JpwACWExacGYKcE8BPJKWCacAAlhMAwACZlwAcnCouwABh7QQABICcNcBPJEcWnECAnDvATyRHoTHAAJYUgpxPwE8kpRacXIKcVsBPJKWhMcAAlhQAwACZlQbAAJmygZmcc5yEnXIAALCQAWqcdGADwAD9UQIAAAEDnJadcgAAAAICApylAAAAg+5gA8AAlgEAnLAAACCFdmADwACT2wAAYAPAAPo/AT4DSZy7ISWcw4Gcv8BPJaNgA8AAlgFKnNYBHJzdLsAAYewCAAKAnOTATyWVgZzqwE8lowDAAJmUP06dAp0IAACD1mADwACWAQEmnQIBgZ0KwE8lo2ADwACWAUqdEwEiHJ0aLsAAYfECAAIWnSmAnSTATyWVgL3AAJYDFp01gp0vwE8l84C9wACWAwDAAJmXABydRi7AAGHxAgACFp1VgJ1QwE8llYJqwACWBBadZYKdX8BPJfOCasAAlgQAwACZlwbAAJmzgZmdd52InnoAALCRAWqdeGADwAD9UQIAAAEDnZOeegAAAAICAp2jAAAAg+5gA8AAli8Ana4AACCFdmADwACT2wAAYAPAAPo/AT4DSZ25ISWdwYGdvcBPJrFgA8AAli9KndUBHJ3cLsAAYewCAAKAnePATyajgZ3pwE8msQDAAJmUP06eAp4IAACD1mADwACWLwEmngIBgZ4KwE8msWADwACWL0qeEwEiHJ4aLsAAYfECAAIWnimAniTATyajhX/AAJYxFp45gp4zwE8nAYV/wACWMQDAAJmXAByeTi7AAGHxAgACFp5dgJ5YwE8mo6TxwACWMhaebYKeZ8BPJwGk8cAAljIAwACZlwbAAJm0gZmef56Qn0gAALCSAWqegGADwAD9UQIAAAEDnp6fSAAAAAICAp6pAAAAg+5gA8AAlfEAnrQAACCFdmADwACT2wAAYAPAAPo/AT4DSZ6/ISWex4Gew8BPJ79gA8AAlfFKntYBHJ7dLsAAYewCAAKAnuTATyexgZ7qwE8nvwDAAJmUP06e/p8EAACD1mADwACV8QEmnv4BgZ8GwE8nv2ADwACV8UqfDwEcnxYuwABh7QQABICfIcBPJ7EWnyyAnyfATyexgL3AAJXSgp8ywE8oDxafP4KfOcBPKA+AvcAAldIAwACZlQbAAJm1gZmfTZ9eoIYAAIZXAWqfTmADwAD9UQIAAAEDn3aghgAAAAICAp+LAAAAg+5gA8AAlecAn5YAACCFdmADwACT2wAAYAPAAPo/AT4DSZ+hISWfqYGfpcBPKKlgA8AAledKn8IBHJ/JLsAAYewCAAKAn9DATyibgZ/WwE8oqQDAAJmUP06f9J/6AACD1mADwACV5wEmn/QBgZ/8wE8oqWADwACV50qgBQEiHKAMLsAAYe0EAASAoBfATyibFqAigKAdwE8om4C9wACV0oKgKMBPKPkWoDWCoC/ATyj5gL3AAJXSAMAAmZUAHKBGLsAAYe0EAASAoFHATyibFqBcgKBXwE8om6/CwACV6YKgacBPKPkWoHaCoHDATyj5r8LAAJXpAMAAmZUGwACZtoGZoIugnKEAAACwkwFqoIxgA8AA/VECAAABA6CloQAAAAACAgKgqwAAAIPuYAPAAJX5AKC2AAAghXZgA8AAk9sAAGADwAD6PwE+AkmgwSEloMmBoMXATynTYAPAAJX5SqDTARyg2i7AAGHsAgACgKDhwE8pxYGg58BPKdMAwACZlD9KoPEBKQbAAJm3gZmhBaEWodYAALCUAWqhBmADwAD9UQIAAAEDoSah1gAAAAICAqEzAAAAg+5gA8AAld0AoT4AACCFdmADwACT2wAAYAPAAPo/AT4DSaFJISWhUYGhTcBPKl9gA8AAld1KoWIBHKFpLsAAYewCAAKAoXDATypRgaF2wE8qXwDAAJmUP06hjKGSAACD1mADwACV3QEmoYwBgaGUwE8qX2ADwACV3UqhnQEcoaQuwABh7QQABIChr8BPKlEWobqAobXATypRgL3AAJXSgqHAwE8qrxahzYKhx8BPKq+AvcAAldIAwACZlQbAAJm4gZmh26HsoswAALCVAWqh3GADwAD9UQIAAAEDofiizAAAAAICAqIBAAAAg+5gA8AAlcEAogwAACCFdmADwACT2wAAYAPAAPo/AT4DSaIXISWiH4GiG8BPK0lgA8AAlcFKoiwBHKIzLsAAYewCAAKAojrATys7gaJAwE8rSQDAAJmUP06iUqJYAACD1mADwACVwQEmolIBgaJawE8rSWADwACVwUqiYwEiHKJqLsAAYe0EAASAonXATys7FqKAgKJ7wE8rO6pUwACVw4KihMBPK5kWopGCoovATyuZqlTAAJXDAMAAmZUAHKKgLsAAYfECAAIWoq+AoqrATys7H8AAlcQWor+CornATyuZH8AAlcQAwACZlwbAAJm5gZmi0aLio74AALCWAWqi0mADwAD9UQIAAAEDou2jvgAAAAICAqL1AAAAg+5gA8AAlbIAowAAACCFdmADwACT2wAAYAPAAPo/AT4DSaMLISWjE4GjD8BPLGNgA8AAlbJKox8BHKMmLsAAYewCAAKAoy3ATyxVgaMzwE8sYwDAAJmUP06jRKNKAACD1mADwACVsgEmo0QBgaNMwE8sY2ADwACVskqjVQEiHKNcLsAAYe0EAASAo2fATyxVFqNygKNtwE8sVapUwACVtIKjdsBPLLMWo4OCo33ATyyzqlTAAJW0AMAAmZUAHKOSLsAAYfECAAIWo6GAo5zATyxVH8AAlbUWo7GCo6vATyyzH8AAlbUAwACZlwbAAJm6gZmjw6PUpNYAALCXAWqjxGADwAD9UQIAAAEDo9+k1gAAAAICAqPnAAAAg+5gA8AAlaEAo/IAACCFdmADwACT2wAAYAPAAPo/AT4DSaP9ISWkBYGkAcBPLX1gA8AAlaFKpBEBHKQYLsAAYewCAAKApB/ATy1vgaQlwE8tfQDAAJmUP06kNqQ8AACD1mADwACVoQEmpDYBgaQ+wE8tfWADwACVoUqkRwEiIhykTi7AAGHxAgACFqRdgKRYwE8tb4W1wACVpBakaYKkY8BPLc2FtcAAlaQAwACZlwAcpHouwABh7QQABICkhcBPLW8WpJCApIvATy1vqlTAAJWjgqSUwE8tzRakoYKkm8BPLc2qVMAAlaMAwACZlQAcpLAuwABh8QIAAhakv4CkusBPLW+Ft8AAlaUWpMyCpMbATy3NhbfAAJWlAMAAmZcGwACZu4GZpNuk7KXAAACwmAFqpNxgA8AA/VECAAABA6T1pcAAAAACAgKk+wAAAIPuYAPAAJWKAKUGAAAghXZgA8AAk9sAAGADwAD6PwE+A0mlESElpRmBpRXATy7LYAPAAJWKSqUjARylKi7AAGHsAgACgKUxwE8uvYGlN8BPLssAwACZlD9OpUalTAAAg9ZgA8AAlYoBJqVGAYGlTsBPLstgA8AAlYpKpVcBIhylXi7AAGHxAgACFqVtgKVowE8uvYJFwACVjBale4KldcBPLxuCRcAAlYwAwACZlwAcpY4uwABh8gIAAhaloYClnMBPLr1bwACVjRalsoKlrMBPLxtbwACVjQDAAJmYBsAAmbyBmaXFpdampgAAsJkBaqXGYAPAAP1RAgAAAQOl3qamAAAAAgICpeMAAACD7mADwACVmQCl7gAAIIV2YAPAAJPbAABgA8AA+j8BPgNJpfkhJaYBgaX9wE8v12ADwACVmUqmCgEcphEuwABh7AIAAoCmGMBPL8mBph7ATy/XAMAAmZQ/TqYspjIAAIPWYAPAAJWZASamLAGBpjTATy/XYAPAAJWZSqY9ASIcpkQuwABh8QIAAhamU4CmTsBPL8mCRcAAlYwWpmGCplvATzAngkXAAJWMAMAAmZcAHKZ0LsAAYfICAAIWpoeApoLATy/JW8AAlY0WppiCppLATzAnW8AAlY0AwACZmAbAAJm9gZmmq6a8p9oAALCaAWqmrGADwAD9UQIAAAEDpsyn2gAAAAICAqbZAAAAg+5gA8AAlXoApuQAACCFdmADwACT2wAAYAPAAPo/AT4DSabvISWm94Gm88BPMONgA8AAlXpKpwgBHKcPLsAAYewCAAKApxbATzDVgaccwE8w4wDAAJmUP06nMqc4AACD1mADwACVegEmpzIBgac6wE8w42ADwACVekqnQwEiIhynSi7AAGHxAgACFqdZgKdUwE8w1YW6wACVfBanaoKnZMBPMTOFusAAlXwAwACZlwAcp4AuwABh8QIAAhanj4CnisBPMNWBrcAAlX0Wp5uCp5XATzEzga3AAJV9AMAAmZcAHKesLsAAYfECAAIWp7uAp7bATzDVhbvAAJV+FqfMgqfGwE8xM4W7wACVfgDAAJmXBsAAmb6Bmaffp/CpfAAAsJsBaqfgYAPAAP1RAgAAAQOoC6l8AAAAAgICqCMAAACD7mADwACVcACoLgAAIIV2YAPAAJPbAABgA8AA+j8BPgNJqDkhJahBgag9wE8yI2ADwACVcEqoXQEcqGQuwABh7AIAAoCoa8BPMhWBqHHATzIjAMAAmZQ/TqiSqJgAAIPWYAPAAJVwASaokgGBqJrATzIjYAPAAJVwSqijASIiIhyoqi7AAGHxAgACFqi5gKi0wE8yFZ6lwACVchaozIKoxsBPMnOepcAAlXIAwACZlwAcqOQuwABh8QIAAhao84Co7sBPMhWwncAAlWAWqQeCqQHATzJzsJ3AAJVgAMAAmZcAHKkgLsAAYe0EAASAqSvATzIVFqk2gKkxwE8yFapUwACVYYKpOsBPMnMWqUeCqUHATzJzqlTAAJVhAMAAmZUAHKlWLsAAYfECAAIWqWWAqWDATzIVgJbAAJViFqlygqlswE8yc4CWwACVYgDAAJmXBsAAmb+BmamBqZKqtAAAsJwBaqmCYAPAAP1RAgAAAQOpoaq0AAAAAgICqa0AAACD7mADwACVXgCpuAAAIIV2YAPAAJPbAABgA8AA+j8BPgNJqcMhJanLganHwE8zo2ADwACVXkqp2wEcqeIuwABh7AIAAoCp6cBPM5WBqe/ATzOjAMAAmZQ/TqoEqgoAAIPWYAPAAJVeASaqBAGBqgzATzOjYAPAAJVeSqoVASIiHKocLsAAYfECAAIWqiuAqibATzOVsJ3AAJVgFqo/gqo5wE8z87CdwACVYADAAJmXAByqWC7AAGHtBAAEgKpjwE8zlRaqboCqacBPM5WqVMAAlWGCqnLATzPzFqp/gqp5wE8z86pUwACVYQDAAJmVAByqji7AAGHxAgACFqqdgKqYwE8zlYCWwACVYhaqqoKqpMBPM/OAlsAAlWIAwACZlwbAAJnAgZmquarKq8AAALCfAWqqumADwAD9UQIAAAEDquarwAAAAAICAqr/AAAAg+5gA8AAlUEAqwoAACCFdmADwACT2wAAYAPAAPo/AT4DSasVISWrHYGrGcBPNPFgA8AAlUFKqzoBHKtBLsAAYewCAAKAq0jATzTjgatOwE808QDAAJmUP06rcKt2AACD1mADwACVQQEmq3ABgat4wE808WADwACVQUqrgQEcq4guwABh8gIAAharm4CrlsBPNOOub8AAlUMWq6+Cq6nATzVBrm/AAJVDAMAAmZgGwACZwYGZq8Wr1qzqAACwoQFqq8ZgA8AA/VECAAABA6vsrOoAAAACAgKr/wAAAIPuYAPAAJUxAKwKAAAghXZgA8AAk9sAAGADwAD6PwE+A0msFSElrB2BrBnATzXNYAPAAJUxSqw0ARysOy7AAGHsAgACgKxCwE81v4GsSMBPNc0AwACZlD9OrGSsagAAg9ZgA8AAlTEBJqxkAYGsbMBPNc1gA8AAlTFKrHUBIhysfC7AAGHtBAAEgKyHwE81vxaskoCsjcBPNb+IscAAlTOCrJzATzYdFqypgqyjwE82HYixwACVMwDAAJmVABysvi7AAGHyAgACFqzRgKzMwE81v4JRwACVNBas34Ks2cBPNh2CUcAAlTQAwACZmAbAAJnCgZms760ArfYAALCiAWqs8GADwAD9UQIAAAEDrQ6t9gAAAAICAq0ZAAAAg+5gA8AAlQUArSQAACCFdmADwACT2wAAYAPAAPo/AT4DSa0vISWtN4GtM8BPNulgA8AAlQVKrUYBHK1NLsAAYewCAAKArVTATzbbga1awE826QDAAJmUP06tbq10AACD1mADwACVBQEmrW4Bga12wE826WADwACVBUqtfwEiHK2GLsAAYfECAAIWrZWArZDATzbbgmvAAJUHFq2ngq2hwE83OYJrwACVBwDAAJmXABytvi7AAGHtBAAEgK3JwE822xat1ICtz8BPNtuwo8AAlQiCrd3ATzc5Fq3qgq3kwE83ObCjwACVCADAAJmVBsAAmcOBma37rgyu4AAAsKQBaq38YAPAAP1RAgAAAQOuIa7gAAAAAgICrjMAAACD7mADwACU+QCuPgAAIIV2YAPAAJPbAABgA8AA+j8BPgNJrkkhJa5Rga5NwE84BWADwACU+UquZwEcrm4uwABh7AIAAoCudcBPN/eBrnvATzgFAMAAmZQ/Tq6WrpwAAIPWYAPAAJT5ASaulgGBrp7ATzgFYAPAAJT5Sq6nARyuri7AAGHtBAAEgK65wE839xauxICuv8BPN/eCk8AAlPuCrsrATzhVFq7Xgq7RwE84VYKTwACU+wDAAJmVBsAAmcSBma7lrvav+AAAhiMBaq7mYAPAAP1RAgAAAQOvC6/4AAAAAgICrx0AAACD7mADwACU7ACvKAAAIIV2YAPAAJPbAABgA8AA+j8BPgNJrzMhJa87ga83wE8472ADwACU7EqvUQEcr1guwABh7AIAAoCvX8BPOOGBr2XATzjvAMAAmZQ/Tq+Ar4YAAIPWYAPAAJTsASavgAGBr4jATzjvYAPAAJTsSq+RASIcr5guwABh7gQABICvo8BPOOEWr66Ar6nATzjhmQHAAJTugq+1wE85PxavwoKvvMBPOT+ZAcAAlO4AwACZlgAcr9QuwABh8QIAAhav44Cv3sBPOOGCacAAlO8Wr++Cr+nATzk/gmnAAJTvAMAAmZcGwACZxYGZr/2wDrEUAACGWQFqr/5gA8AA/VECAAABA7AmsRQAAAACAgKwOwAAAIPuYAPAAJTfALBGAAAghXZgA8AAk9sAAGADwAD6PwE+A0mwUSElsFmBsFXATzoLYAPAAJTfSrByARyweS7AAGHsAgACgLCAwE85/YGwhsBPOgsAwACZlD9OsKSwqgAAg9ZgA8AAlN8BJrCkAYGwrMBPOgtgA8AAlN9KsLUBIhywvC7AAGHxAgACFrDLgLDGwE85/YC9wACU4Raw14Kw0cBPOluAvcAAlOEAwACZlwAcsOguwABh8QIAAhaw94Cw8sBPOf2CasAAlOIWsQeCsQHATzpbgmrAAJTiAMAAmZcGwACZxoGZsRmxKrHMAACwpQFqsRpgA8AA/VECAAABA7E2scwAAAACAgKxPwAAAIPuYAPAAJTVALFKAAAghXZgA8AAk9sAAGADwAD6PwE+A0mxVSElsV2BsVnATzsZYAPAAJTVSrFqARyxcS7AAGHsAgACgLF4wE87C4GxfsBPOxkAwACZlD9OsZCxlgAAg9ZgA8AAlNUBJrGQAYGxmMBPOxlgA8AAlNVKsaEBHLGoLsAAYfECAAIWsbeAsbLATzsLgmnAAJTGFrHDgrG9wE87aYJpwACUxgDAAJmXBsAAmceBmbHRseKysAAAsKYBarHSYAPAAP1RAgAAAQOx67KwAAAAAgICsfEAAACD7mADwACUyQCx/AAAIIV2YAPAAJPbAABgA8AA+j8BPgNJsgchJbIPgbILwE879WADwACUyUqyGQEcsiAuwABh7AIAAoCyJ8BPO+eBsi3ATzv1AMAAmZQ/TrI8skIAAIPWYAPAAJTJASayPAGBskTATzv1YAPAAJTJSrJNASIcslQuwABh8QIAAhayY4CyXsBPO+eCa8AAlMsWsnWCsm/ATzxFgmvAAJTLAMAAmZcAHLKMLsAAYfECAAIWspuAspbATzvngmnAAJTGFrKngrKhwE88RYJpwACUxgDAAJmXBsAAmciBmbK1ssazlAAAsKcBarK2YAPAAP1RAgAAAQOy0bOUAAAAAgICstkAAACD7mADwACUtwCy5AAAIIV2YAPAAJPbAABgA8AA+j8BPgNJsu8hJbL3gbLzwE89A2ADwACUt0qzAwEcswouwABh7AIAAoCzEcBPPPWBsxfATz0DAMAAmZQ/TrMosy4AAIPWYAPAAJS3ASazKAGBszDATz0DYAPAAJS3SrM5ASIcs0AuwABh8QIAAhazT4CzSsBPPPWD0cAAlLkWs1qCs1TATz1Tg9HAAJS5AMAAmZcAHLNqLsAAYfICAAIWs32As3jATzz1hjPAAJS6FrOKgrOEwE89U4YzwACUugDAAJmYBsAAmcmBmbOZs6q0fgAAhkYBarOaYAPAAP1RAgAAAQOztLR+AAAAAgICs7sAAACD7mADwACUqgCzxgAAIIV2YAPAAJPbAABgA8AA+j8BPgNJs9EhJbPZgbPVwE8+EWADwACUqkqz5AEcs+suwABh7AIAAoCz8sBPPgOBs/jATz4RAMAAmZQ/TrQItA4AAIPWYAPAAJSqASa0CAGBtBDATz4RYAPAAJSqSrQZASIctCAuwABh8QIAAha0L4C0KsBPPgOepcAAlKwWtEKCtDzATz5hnqXAAJSsAMAAmZcAHLRaLsAAYfECAAIWtGmAtGTATz4DgmnAAJStFrR1grRvwE8+YYJpwACUrQDAAJmXBsAAmcqBmbSDtJS1lgAAsKgBarSEYAPAAP1RAgAAAQO0nLWWAAAAAgICtKEAAACD7mADwACUnAC0rAAAIIV2YAPAAJPbAABgA8AA+j8BPgNJtLchJbS/gbS7wE8/H2ADwACUnEq0yAEctM8uwABh7AIAAoC01sBPPxGBtNzATz8fAMAAmZQ/TrTqtPAAAIPWYAPAAJScASa06gGBtPLATz8fYAPAAJScSrT7ASIiHLUCLsAAYfECAAIWtRGAtQzATz8RgmnAAJSeFrUdgrUXwE8/b4JpwACUngDAAJmXABy1Li7AAGHxAgACFrU9gLU4wE8/EbCpwACUnxa1ToK1SMBPP2+wqcAAlJ8AwACZlwActWQuwABh8QIAAha1c4C1bsBPPxGwqsAAlKAWtYaCtYDATz9vsKrAAJSgAMAAmZcGwACZy4GZtZu1rLZSAACF9QFqtZxgA8AA/VECAAABA7W2tlIAAAACAgK1vQAAAIPuYAPAAJSQALXIAAAghXZgA8AAk9sAAGADwAD6PwE+A0m10yEltduBtdfAT0BfYAPAAJSQSrXmARy17S7AAGHsAgACgLX0wE9AUYG1+sBPQF8AwACZlD9Otgq2EAAAg9ZgA8AAlJABJrYKAYG2EsBPQF9gA8AAlJBKthsBHLYiLsAAYfECAAIWtjGAtizAT0BRgmvAAJSSFrZDgrY9wE9Ar4JrwACUkgDAAJmXBsAAmcyBmbZXtmi3CAAAsKsBarZYYAPAAP1RAgAAAQO2c7cIAAAAAgICtnsAAACD7mADwACUhAC2hgAAIIV2YAPAAJPbAABgA8AA+j8BPgNJtpEhJbaZgbaVwE9BO2ADwACUhEq2pQEctqwuwABh7AIAAoC2s8BPQS2BtrnAT0E7AMAAmZQ/TrbKttAAAIPWYAPAAJSEASa2ygGBttLAT0E7YAPAAJSESrbbARy24i7AAGHxAgACFrbxgLbswE9BLYCWwACUhha2/oK2+MBPQYuAlsAAlIYAwACZlwbAAJnNgZm3Dbcet9QAALCsAWq3DmADwAD9UQIAAAEDtyi31AAAAAICArcvAAAAg+5gA8AAlHgAtzoAACCFdmADwACT2wAAYAPAAPo/AT4DSbdFISW3TYG3ScBPQhdgA8AAlHhKt1gBHLdfLsAAYewCAAKAt2bAT0IJgbdswE9CFwDAAJmUP063fLeCAACD1mADwACUeAEmt3wBgbeEwE9CF2ADwACUeEq3jQEct5QuwABh7gQABIC3n8BPQgkWt6qAt6XAT0IJsK3AAJR6gre3wE9CZxa3xIK3vsBPQmewrcAAlHoAwACZlgbAAJnOgZm32bfquKwAALCuAWq32mADwAD9UQIAAAEDt/e4rAAAAAICArgBAAAAg+5gA8AAlGwAuAwAACCFdmADwACT2wAAYAPAAPo/AT4DSbgXISW4H4G4G8BPQwFgA8AAlGxKuC0BHLg0LsAAYewCAAKAuDvAT0LzgbhBwE9DAQDAAJmUP064VLhaAACD1mADwACUbAEmuFQBgbhcwE9DAWADwACUbEq4ZQEcuGwuwABh7gQABIC4d8BPQvMWuIKAuH3AT0LzsK3AAJRugriPwE9DURa4nIK4lsBPQ1GwrcAAlG4AwACZlgbAAJnPgZm4sbjCuYYAALCvAWq4smADwAD9UQIAAAEDuMm5hgAAAAICArjNAAAAg+5gA8AAlGAAuNgAACCFdmADwACT2wAAYAPAAPo/AT4DSbjjISW464G458BPQ+tgA8AAlGBKuPMBHLj6LsAAYewCAAKAuQHAT0PdgbkHwE9D6wDAAJmUP065FLkaAACD1mADwACUYAEmuRQBgbkcwE9D62ADwACUYEq5JQEiHLksLsAAYfECAAIWuTuAuTbAT0PdhbrAAJRiFrlMgrlGwE9EO4W6wACUYgDAAJmXABy5Yi7AAGHxAgACFrlxgLlswE9D3YJpwACUNha5fYK5d8BPRDuCacAAlDYAwACZlwbAAJnQgZm5i7mcumwAALCwAWq5jGADwAD9UQIAAAEDuaa6bAAAAAICArmtAAAAg+5gA8AAlFQAubgAACCFdmADwACT2wAAYAPAAPo/AT4DSbnDISW5y4G5x8BPRPlgA8AAlFRKudYBHLndLsAAYewCAAKAueTAT0TrgbnqwE9E+QDAAJmUP065+roAAACD1mADwACUVAEmufoBgboCwE9E+WADwACUVEq6CwEiHLoSLsAAYfECAAIWuiGAuhzAT0TrhbrAAJRWFroygroswE9FSYW6wACUVgDAAJmXABy6SC7AAGHxAgACFrpXgLpSwE9E64JpwACUNha6Y4K6XcBPRUmCacAAlDYAwACZlwbAAJnRgZm6cbqCu4gAALCxAWq6cmADwAD9UQIAAAEDuoy7iAAAAAICArqTAAAAg+5gA8AAlEcAup4AACCFdmADwACT2wAAYAPAAPo/AT4DSbqpISW6sYG6rcBPRgdgA8AAlEdKurwBHLrDLsAAYewCAAKAusrAT0X5gbrQwE9GBwDAAJmUP0664LrmAACD1mADwACURwEmuuABgbrowE9GB2ADwACUR0q68QEiIhy6+C7AAGHxAgACFrsHgLsCwE9F+bCdwACUSRa7G4K7FcBPRlewncAAlEkAwACZlwAcuzQuwABh8QIAAha7Q4C7PsBPRfmDwMAAlEoWu1GCu0vAT0ZXg8DAAJRKAMAAmZcAHLtkLsAAYfECAAIWu3OAu27AT0X5gmnAAJQ2Frt/grt5wE9GV4JpwACUNgDAAJmXBsAAmdKBmbuNu568wgAAsLIBaruOYAPAAP1RAgAAAQO7przCAAAAAgICu6sAAACD7mADwACUOQC7tgAAIIV2YAPAAJPbAABgA8AA+j8BPgNJu8EhJbvJgbvFwE9HR2ADwACUOUq70gEcu9kuwABh7AIAAoC74MBPRzmBu+bAT0dHAMAAmZQ/Trv0u/oAAIPWYAPAAJQ5ASa79AGBu/zAT0dHYAPAAJQ5SrwFASIiIhy8DC7AAGHxAgACFrwbgLwWwE9HOapPwACUOxa8J4K8IcBPR5eqT8AAlDsAwACZlwAcvDguwABh8QIAAha8R4C8QsBPRzmFusAAlDwWvFiCvFLAT0eXhbrAAJQ8AMAAmZcAHLxuLsAAYfECAAIWvH2AvHjAT0c5rDLAAJQ9FryLgryFwE9Hl6wywACUPQDAAJmXABy8ni7AAGHxAgACFrytgLyowE9HOYJpwACUNha8uYK8s8BPR5eCacAAlDYAwACZlwbAAJnTgZm8x7zYvdIAALCzAWq8yGADwAD9UQIAAAEDvN+90gAAAAICArzjAAAAg+5gA8AAlCMAvO4AACCFdmADwACT2wAAYAPAAPo/AT4DSbz5ISW9AYG8/cBPSLlgA8AAlCNKvQkBHL0QLsAAYewCAAKAvRfAT0irgb0dwE9IuQDAAJmUP069Kr0wAACD1mADwACUIwEmvSoBgb0ywE9IuWADwACUI0q9OwEiIhy9Qi7AAGHxAgACFr1RgL1MwE9Iq4W6wACUJRa9YoK9XMBPSQmFusAAlCUAwACZlwAcvXguwABh8QIAAha9h4C9gsBPSKuBrcAAlCYWvZOCvY3AT0kJga3AAJQmAMAAmZcAHL2kLsAAYfECAAIWvbOAva7AT0irhbvAAJQnFr3Egr2+wE9JCYW7wACUJwDAAJmXBsAAmdSBmb3Xvei+agAAhh0Bar3YYAPAAP1RAgAAAQO9+75qAAAAAgICvgsAAACD7mADwACUGQC+FgAAIIV2YAPAAJPbAABgA8AA+j8BPgJJviEhJb4pgb4lwE9J+WADwACUGUq+PQEcvkQuwABh7AIAAoC+S8BPSeuBvlHAT0n5AMAAmZQ/Sr5bASkGwACZ1YGZvm++gL9eAACGFAFqvnBgA8AA/VECAAABA76Yv14AAAACAgK+rQAAAIPuYAPAAJQNAL64AAAghXZgA8AAk9sAAGADwAD6PwE+A0m+wyElvsuBvsfAT0qFYAPAAJQNSr7kARy+6y7AAGHsAgACgL7ywE9Kd4G++MBPSoUAwACZlD9Ovxa/HAAAg9ZgA8AAlA0BJr8WAYG/HsBPSoVgA8AAlA1KvycBHL8uLsAAYfECAAIWvz2AvzjAT0p3gmvAAJQPFr9Pgr9JwE9K1YJrwACUDwDAAJmXBsAAmdaBmb9jv3TAAEAeAACGGAFqv2RgA8AA/VECAAABA79+wABAHgAAAAICAr+FAAAAg+5gA8AAlAAAv5AAACCFdmADwACT2wAAYAPAAPo/AT4DSb+bISW/o4G/n8BPS2VgA8AAlABKv64BHL+1LsAAYewCAAKAv7zAT0tXgb/CwE9LZQDAAJmUP06/0r/YAACD1mADwACUAAEmv9IBgb/awE9LZWADwACUAEq/4wEcv+ouwABh8gIAAha//YC/+MBPS1eGFsAAlAIWwABAD4LAAEAJwE9LtYYWwACUAgDAAJmYAABPCv0ATwtIAE8LyABPDEwATw0yAE8PAwBPD98ATxDNAE8RuwBPEqkATxOXAE8UhQBPFXMATxZdAE8XOQBPGCEATxkvAE8aCwBPGpcATxtzAE8cXQBPHUcATx4jAE8erwBPH5kATyCDAE8hbQBPIlcATyNBAE8kHQBPJWsATyZ5AE8nhwBPKHEATymbAE8qJwBPKxEATywrAE8tRQBPLpMATy+fAE8wqwBPMesATzNrAE80uQBPNZUATzaxAE83zQBPOLcATznTAE864QBPO70ATzzLAE892QBPPucAT0AnAE9BAwBPQd8AT0LJAE9DswBPRMEAT0XPAE9HDwBPSIEAT0nBAE9KTQBPSykAT0wNAAAAQwIEwACSr4GYguKDCQTAAGH1AGADwACZEQEfgvjAAJkbAAAAAATAAJKwgZib2ZvvBoKBAGADwACXgAFqm+RgA8AAl4DAAR9pDAbAAJKygZjAAEQ4wABERsAARG4AAYPsAAAAAQPAAERMwABEbgAAAAEBAcAARFQAAACAlmADwAD96wAAYAPAAJZ8AUrAAEReARzAAERhasAARF5gA8AAl4DAAR9pg+wBAAGAwABEaMBPTZQAwACXkQbAAJKzgZjAAERwwABEfsAARNwAAcAAUPIAAAABA8AARIfAAETcAAAAAgEBwABEjQAAAIC9YAPAAJUcAAHAAESUAAAAl7FbAWrAAESfYAPAAPo/AGADwACWfAE+AUrAAESrARzAAES1asAARLJgA8AAl4DAAR9pwABQ8gIAAYDAAES/wE9OBQGXsYHAAETQwE9OFsAAl5UGwACStIGYwABE38AARO3AAEUdAAHAAFHxAAAAAQPAAET3wABFHQAAAAEBAcAARP8AAACAlmADwAD96wAAYAPAAJZ8AUrAAEUJARzAAEUMasAARQlgA8AAl4DAAR9pwABR8QEAAYDAAEUXwE9OnADAAJeSBsAAkrWBmMAARR/AAEUxwABFlgABwABSAgAAAAEDwABFPcAARZYAAAACAgLAAEVQAAAAg1tdA8AA/GcBYAPAAJZiAMAARV4AAACBr2ADwACWYgAAXQPAAPxnAWADwACWYgE+AUrAAEVtARzAAEV3asAARXRgA8AAl4DAAR9pwABSAgIAAoDAAEWEwE9PD4HAAEWKwE9PJgDAAJeUBsAAkraBmMAARZnAAEWtwABGMAABwABSAQAAAAEDwABFv8AARjAAAAACAQHAAEXSAAAAhIFdA8AA/GcBYAPAAJZiAAHAAEXeAAAAwABgulsBasAARelgA8AA+j8AYAPAAJaGAT4BSsAARfUBHMAARf9qwABF/GADwACXgMABH2nAAFIBAgABgMAARhLAT0+rAcAAYLqBwABGJMBPT8PAAJeTBsAAkreBmMAARjPAAEZBwABGZgABwABRmQAAAAEDwABGR8AARmYAAAABAQHAAEZMAAAAgJZgA8AA/RsAAGADwACWkgFKwABGVgEcwABGWWrAAEZWYAPAAJeAwAEfacAAUZkBAAGAwABGYMBPUE0AwACXlgbAAJK4gZjAAEZowABGecAARqoAAcAAYLsAAAABA8AARoHAAEaqAAAAAQEBwABGkAAAAINbXQPAAPxnAWADwAD8BQAAYAPAAJaeAUrAAEaZARzAAEacasAARplgA8AAl4DAAR9pwABguwEAAYDAAEalwE9QwADAAJeYBsAAkrmBmMAARqzAAEa9wABG9wABwABgvAAAAAEDwABGyMAARvcAAAABAQHAAEbaAAAAg1tdA8AA/GcBYAPAAP3rAABgA8AAlp4BSsAARuMBHMAARuZqwABG42ADwACXgMABH2nAAGC8AQABgMAARvLAT1E6AMAAl5kGwACSuoGYwABG+cAARv7AAEeTAAHAAGC9AAAAAQPAAEcKwABHkwAAAAMDA8AARxsAAACFf2ADwACVEgDAAEcwAAAAwABIE2ADwACVEgDAAEdMAAAAW10DwAD8qQFgA8AAlRIAAGADwACVigE+AUrAAEdbARzAAEdlasAAR2JgA8AAl4DAAR9pwABgvQMAA4DAAEdywE9RtIHAAEd8wE9RxILAAEeHwE9R1gDAAJebBsAAkruBmMAA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m3ObFmqbFmADwAD968AAm3CbJmqbJmADwAD968AAm2ibNmqbNmADwAD968AAm2qbRmqbRmADwAD968AAm2WbV2qbV2ADwAD968AAm2KbaGqbaGADwAD968AAtb2bemqbemADwAD968AAm1SbimqbimADwAD968AAm06bmmqbmmADwAD968AAm1abq2qbq2ADwAD968AAm1GbvGqbvGADwAD968AAm0mbzWqbzWADwAD968AAtIWb32qb32ADwAD968AAm0ub8Gqb8GADwAD968AAscOcAmqcAmADwAD968AAm1+cEmqcEmADwAD968AAm1ycImqcImADwAD968AAm1kAPgFKnC8BHpw2wACaowIAAoGcP8BPhnCCnEXAT4aeAAGcWWqcWWADwAD964FrAD4BSpxmAR6cbcAAmqMCAAKBnHbAT4Zwgpx8wE+GngACnJBqnJBgA8AA/evAAJr5nKFqnKFgA8AA/evAAJr8AD4BSpyvAR6ctsAAmqQCAAKBnL3AT4ZwHpzDwACaowIAAoGczMBPhnCCnNLAT4aeAAACnOdqnOdgA8AA/evAASA0nQBqnQBgA8AA/evAAKUuAT4BSp0dAWqdOGADwABms8AA+CcGwACasoGcnUqdap3OAACF9QFqnUtgA8AA/VECAAABA510nc4AAAABAQGdfgAAAIPuYAPAAJSQAABgA8AAZrMBPgFKnYoBHp2RwACaowIAAhydmi6ajwEAARadpYCdoMBPiPmCa8AAlJIAwACapWqdxmADwABms8AA+CcABsAAmrOBnJ3TnfOfhQAAsJYBap3UYAPAAP1RAgAAAQOd/p+FAAAAAQEBngkAAACD7mADwACVsgAAYAPAAGazAT4DSZ4VIhyeIRaeHoCeGcBPiXWqVMAAlbRIAQABJ8AARqMAwAD9+gAlnj4WnjWAnjDAT4l1H8AAlbVgA8AAld1KnlcBap5yYAPAAGazwAE4qT9OnpGemAAAgXZgA8AAZrMBHJ6aLpqPAQABFp6lgJ6gwE+JdR/AAJW1AMAAmqVHnrQWnsGAnrzAT4l1qlTAAJW0Agae0mqe0mADwAD968AAm2ie4mqe4mADwAD968AAm2qe8mqe8mADwAD968AAsVafAmqfAmADwAD968AAu3GfEmqfEmADwAD968AAq7+fJWqfJWADwAD968ABIDkAPgFKnzcB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AJPeN8AAYpkAAAFdAZnTAWADwACcIQABYAHAAIHqAgTAAJuRgWKMjIygGMAAWNgAYAPAAIHdASsEwACbkoFijLuM7Bi4LABgA8AAgckBH4zUwACB1gAAAAABBcAAm5gAAAAABAAAAwAAAAAAAAAAAGADwACbjwE/AQkAAJoJAAAAAAMGwACblIFijPGM9o4FAADAAFjZAAAAAQONCo4FAAAAAgICjRcAAACG2GADglIAjSIAAACBpmEDAFwAAFwBPgVOjT+NSAAAwABY2mADwACB3QEWjUouwABY2MAAgew9F41kLsAAWNgmjWQBHI2OFo17LrgswACB7cAAWNABAAGAjZ3AT+2VAMAAgc9gA8AAgd3AAIHsPTUAAAABAGADwACB3QGCjajAT+2zIxyNsoMAwE/uCUgBAAErAAArHI2ygwDAT+4JwABY1QEAARaNvi7AAFjYwACB7ADAAIHkAVw9HI3agY3ZwE/toSAAAAAAAD0XjeIuwABY2IKN+cBP7bPAAIHsBsAAm5WBYo4Kjg+OugAAwABY0QAAAAEDjieOugAAAAEBAY4/AAAAg+5gA4hTAABcAT4CPTUAAAABAGADwACB3QEWjksuwABY2MAAgewjHI5hgQDAT+6rSAEAASsAACscjmGBAMBP7qvAAFjRAQABgI56wE/umADAAIHlAVw9HI6YFo6FLrgswACB7cAAWNEBAAGAjrHAT+6YAMAAgdAGwACbloFijr+OxI8VAADAAFjbAAAAAQOO2o8VAAAAAAAAAFwBPgE9NQAAAAEAYAPAAIHdARaO4y7AAFjYwACB7CMcjvmAAMBP7z1IAQABKwAAKxeO+YAAwE/vPcAATncpwACB4gFgA8AA+j8AAE/tcwBP7nYAT+8UAE/vgAAAAAMCwACbmYGigo+ClcAAk94DwABimgAAAWABwACbjwAADQTAAJucgaKDEIMiCcAAWYTAAJuOAGADqkYABMAAm52BooM/g18JwABim8AAm44AYAPAAIA6AR+DTMAAgEIAAAAABMAAm56BoobMhtsYwABinMAAm44AXQPAAPypAWADgksBKwTAAJufgaKHx4fZGMAAYp3AAJuOAGADglIBKwTAAJuggaKIIog6GMAAYp7AAJuOAGADwAD6PwEqBMAAm6GBooiOiJwYwABin8AAm44AYAOCSwErBMAAm6KBoomY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wACbvT9KwABEjQFqwABEmmADwACcIcABa8MGwACbzIGiwABEv8AARMTAAExhAADAAGK6AAAAAQPAAETSwABMYQAAAAICAsAARN8AAACD7mADglIAwABE6gAAAIGmYQMAXAAAXAE+FEAiJcAARQGAwABE/MBQEF5gA4NeASXAAEUWgMAARRHAUBBeYAOHGsAARPzAAEUpAE7AAEU1wABFSAAAwABiu2ADwAD6PwEWwABFSi7AAGKewACbjsAAm6BOwABFbMAARYEAAMAAYrxgA4JSARbAAEWDLsAAYp3AAJuOwACbn07AAEWrwABFuAAAwABT+GADwACAQwEWwABFui7AAGKjwACbjsAAm6U9F8AARlouwABinsAAm44hHMAARnwWwABGbS7AAGKfwACbjsAAm6FIAQABKwDAAP1ewACboD0XwABGiS7AAGKdwACbjoDAAEaewFAQXsAAm589F8AARqkuwABio8AAm44fwABGwcAAgFABAAEWwABG0S7AAGKkwACbjsAAm6YAwACbpUnAAEbmFsAARuouwABinsAAm47AAJugPgE9HMAARxcWwABHBC7AAGKowACbjsAAm6yAvwIAAoDAAEcYwFAQXhbAAEcgLsAAYqPAAJuOwACbpQDAAPzvPgI9F8AAR0YuwABin8AAm46AwABHV8BQEF7AAJuhPRfAAEdqFsAAR2MuwABim8AAm47AAJudwABT+RbAAEd2LsAAYqPAAJuOwACbpcAAgDw9HMAAR5QuwABirwIAAoDAAEeiwFAQXoHAAEeowFAQbADAAJu0TsAAR8HAAEfQAADAAGK9YAPAAIBDARbAAEfSLsAAYqPAAJuOwACbpU7AAEfuwABIAwAAwABivmADwAD6PwEWwABIBS7AAGKewACbjsAAm6A9F8AASDcuwABinsAAm46CwABISsBQELDAAJugPRfAAEhiLsAAYqPAAJuOhMAASHbAUBD+wACbpT0XwABIiC7AAGKdwACbjoPAAEidwFAQ2MAAm59OwABJMMAAST4AAMAATxtdA8AA/GcBYAOCSwEWwABJT4XAAElAwFASdMAATxvAAIBJQCIWwABJd4fAAElpwFATGIFVwAD8iwGGwABJgsBQEpzAAElpwABJlgBGwABJncAAScnAAEmqAAAAwABiv2ADgksAh8AASbrAUBMYPgI9HMAASeQWwABJ0S7AAGKhwACbjsAAm6NWAQABFMAASejAUBN6CAAAwAD9qT0cwABJ/S7AAGKzwACbjgIAAhTAAEoRwFATeggAasAASitgA8AAgIPAAVzLAMAAm7w9HMAASmMWwABKT4XAAEpAwFASdMAAVjPAAIBKg/gBAAE0wABKdAPAAEp0wABLOwAAAAICAsAASpEAAADAAGLAYAPAAICwAMAASsIAAAC0510DwAD9nAFgA8AAgIMAAGADwAD9DgE+AUbAAErSwABK9MAASuMAAAC7bmADwACAgwAUwABK7MBQFDkJAD4BPRzAAEr+LsAAYrPAAJuOAgACFMAASxLAUBQnCAAUwABLJsBQFGMKAADAAJu8AMAA/PlJwABLQiIWwABLRi7AAGKewACbjsAAm6AAFsAAS2mFwABLWsBQEnTAAFYywACASz4BPRfAAEubFsAAS4kuwABio8AAm47AAJulwABWMinAAIBLP0nAAEvEFsAAS8guwABinsAAm47AAJugPgE9HMAATCAWwABL9BbAAEviLsAAYqPAAJuOwACbpcAAVjHAAIBMgKUBAAEWwABMNoXAAEwnwFASdMAAVjHAAIBMAMAA/ao/BsAAm76BosAATMXAAEzKwABObgAAwABitsAAm44AAAABA8AATNvAAE5uAAAAAQEBwABM5AAAAIJsYAOCSwAAYAPAAPo/AT4FQCIlwABNBIDAAEz7wFAVlGADiFMBJcAATTKAwABNKcBQFZRgA8AAgLDAAEz7wABNUABJwABNVyXAAE1kgMAATVvAUBWUYAPAAICwPgFKwABNjAEcwABNpBbAAE2cFMAATZPAUBWUAAFgA8AAgLCCU8AAgLJIAQABFsAATacuwABincAAm47AAJufAMAA/V4/TsAATdHAAE3WAACD7mADglIBJsAATdEBgMAATdjAUBWUYAOCUkPAAE3mIiEcwABN8oHAAE3twFAWPUgBAAEWwABN9S7AAGKfwACbjsAAm6EAwAD9XgAhHMAATgyBwABOB8BQFj1IAQABFsAATg8uwABincAAm47AAJufAMAA/V4+AT2JwABOK8BQFj0WwABON4HAAE4ywFAWPYRSglhKwABOSQEcwABOVYHAAE5QwFAWPUgBAAEWwABOWC7AAGKdwACbjsAAm58AwAD9XgbAAJvNgaLAAE5zwABOlcAAT5MAAIUU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wABeLWADwACcIcABa8MGwACb4YGiwABeUsAAXnTAAF7NAACGDgFqwABeU2ADwAD9UQIAAAEDwABehMAAXs0AAAABAQHAAF6UAAAAg+5gA4dOAABgA8AAnCEBPgFKwABeoAFqwABerWADwACcIcABa8MGwACb4oGiwABe0sAAXvTAAF9mAACGEQFqwABe02ADwAD9UQIAAAEDwABfDcAAX2YAAAABAQHAAF8tAAAAg+5gA4dZAABgA8AAnCEBPgFKwABfOQFqwABfRmADwACcIcABa8MGwACb44GiwABfa8AAX43AAGLMAACFYAFqwABfbGADwAD9UQIAAAEDwABfnsAAYswAAAABAQHAAF+vAAAAg+5gA4SDAABgA8AAnCEBPgdOwABfx8AAX9YAAMAATbFgA8AAgIMBIyXAAF/kFsAAX92AwABf2MBQJjqEUoJYYAODXh/AAF//wACAmQEAASbAAGAgARbAAGAggMAAYBvAUCY6hFKCWGADg14AH8AAYDbAAICaAQABJsAAYFYBFsAAYFaAwABgUcBQJjqEUoJYYAOHGgABYAPAAICDPRzAAGBjLsAAYrkCAAIWwABgfIDAAGB3wFAmOoS+hIiBwABgjMBQJlMAwACb20bAAGChwABg58AAYL0AAACepWADiFMAFsAAYNGAwABgzMBQJjqEwISKPgE9HMAAYO8uwABitcAAm44CAAKCwABhCsBQJxSBwABhF8BQJlMAwACbu0bAAGEywABhc8AAYU4AAACepWADiFMAFsAAYWKAwABhXcBQJjqEwYSLPgE9HMAAYXsuwABitcAAm44CAAKCwABhlsBQJ2iBwABho8BQJlMAwACbuz0cwABhvi7AAGK0AgACFsAAYduAwABh1sBQJjqFOoSMIyXAAGH7FsAAYfSAwABh78BQJjqEUoJYYAODXh/AAGIawACAmwEAASbAAGI8ARbAAGI8gMAAYjfAUCY6hFKCWGADg14AH8AAYlbAAICcAQABJsAAYncBFsAAYneAwABicsBQJjqEUoJYYAOHGgABYAPAAICDAMAAm9o9HMAAYoUuwABGggEAARbAAGKUgMAAYo/AUCY6gmmEmQDAAJuwSsAAYp8BasAAYqxgA8AAnCHAAWvDBsAAm+SBosAAYtHAAGLzwABkUAAAhfcBasAAYtJgA8AA/VECAAABA8AAYwPAAGRQAAAAAQEBwABjEwAAAIPuYAOG3QAAYAPAAJwhAT4DTsAAYzXAAGNAAADAAE0cYAPAAJwhARzAAGNKLsAAYrQCAAIWwABjXoDAAGNZwFAovYXDhuBqwABjeGADwACAg8ABXTQAwACb2j2JwABjisBQKNYcwABjooHAAGOXwFAo1ocdAQABHMAAY6ouwABOGQEAARbAAGO6gMAAY7XAUCi9hb+G4QDAAJuxAMAAnCZJwABjzRbAAGPWgMAAY9HAUCi9hB2G3z4BSsAAY+cBasAAY/RgA8AAnCHAAWwJPgFKwABkKQEcwABkO4HAAGQwwFAo1sAAYsMAAAAAwACcJwbAAJvlgaLAAGRVwABkd8AAZdEAAIX5AWrAAGRWYAPAAP1RAgAAAQPAAGSGwABl0QAAAAEBAcAAZJUAAACD7mADhuoAAGADwACcIQE+A07AAGS3wABkwgAAwABNHGADwACcIQEcwABkzC7AAGK0AgACFsAAZOCAwABk28BQKeqFw4btasAAZPpgA8AAgIPAAV1XAMAAm9o9icAAZQvAUCoDHMAAZSOBwABlGMBQKgOHHQEAARzAAGUrLsAAThkBAAEWwABlO4DAAGU2wFAp6oW/hu4AwACbsQDAAJwmScAAZU4WwABlV4DAAGVSwFAp6oQdhuw+AUrAAGVoAWrAAGV1YAPAAJwhwAFsCT4BSsAAZaoBHMAAZbyBwABlscBQKgPAAGLDAAAAAMAAnCcGwACb5oGiwABl1sAAZfjAAGevAACF+wFqwABl12ADwAD9UQIAAAEDwABmB8AAZ68AAAABAQHAAGYWAAAAg+5gA4b3AABgA8AAnCEBPgROwABmOMAAZkMAAMAATRxgA8AAnCEBHMAAZk0uwABitAIAAhbAAGZhgMAAZlzAUCsXhcyG+mrAAGZ2YAPAAICDwAFdegDAAJvaPYnAAGaHwFArMBzAAGaogcAAZpTAUCswhx0BAAEcwABmsC7AAGK0AgACFsAAZsSAwABmv8BQKxeFzYb7asAAZttgA8AAgIPAAV16AMAAm9oAwACcJj2JwABm7cBQKzAcwABnBYHAAGb6wFArMIcdAQABHMAAZw0uwABOGQEAARbAAGcdgMAAZxjAUCsXg9CG/ADAAJuxAMAAnCZJwABnLBbAAGc1gMAAZzDAUCsXhB2G+T4BSsAAZ0YBasAAZ1NgA8AAnCHAAWwJPgFKwABniAEcwABnmoHAAGePwFArMMAAYsMAAAAAwACcJwbAAJvngaLAAGe0wABn1sAAaGwAAIX9AWrAAGe1YAPAAP1RAgAAAQPAAGfjwABobAAAAAEBAcAAZ/AAAACD7mADhwUAAGADwACcIQE+Ak7AAGgSwABoHQAAwABNHGADwACcIQEcwABoHy7AAEaCAQABFsAAaC6AwABoKcBQLJmD0YcHAMAAm7BKwABoOAEcwABoSoHAAGg/wFAssocdAQABHMAAaFIuwABGggEAARbAAGhhgMAAaFzAUCyZgJaHCADAAJuwAMAAnCYGwACb6IGiwABoccAAaJPAAGjoAACF6gFqwABocmADwAD9UQIAAAEDwABoo8AAaOgAAAABAQHAAGizAAAAg+5gA4ahAABgA8AAnCEBSsAAaMIBasAAaMhgA8AAnCHAAWwJBsAAm+mBosAAaO3AAGkPwABpaAAAheEBasAAaO5gA8AA/VECAAABA8AAaSHAAGloAAAAAQEBwABpMwAAAIPuYAOGfQAAYAPAAJwhAUrAAGlCAWrAAGlIYAPAAJwhwAFsCQbAAJvqgaLAAGltwABpj8AAaeIAAIXjAWrAAGluYAPAAP1RAgAAAQPAAGmewABp4gAAAAEBAcAAaa0AAACD7mADhoYAAGADwACcIQFKwABpvAFqwABpwmADwACcIcABbAkGwACb64GiwABp58AAagnAAGpiAACF5gFqwABp6GADwAD9UQIAAAEDwABqG8AAamIAAAABAQHAAGotAAAAg+5gA4aPAABgA8AAnCEBSsAAajwBasAAakJgA8AAnCHAAWwJBsAAm+yBosAAamfAAGqJwABq4gAAhe0BasAAamhgA8AA/VECAAABA8AAapvAAGriAAAAAQEBwABqrQAAAIPuYAOGqgAAYAPAAJwhAUrAAGq8AWrAAGrCYAPAAJwhwAFsCQbAAJvtgaLAAGrnwABrCcAAa14AAIXoAWrAAGroYAPAAP1RAgAAAQPAAGsZwABrXgAAAAEBAcAAaykAAACD7mADhpgAAGADwACcIQFKwABrOAFqwABrPmADwACcIcABbAkGwACb7oGiwABrY8AAa4XAAGwQAACFwQFqwABrZGADwAD9UQIAAAEDwABrncAAbBAAAAABAQHAAGu1AAAAg+5gA4YWAABgA8AA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A8AAYw0AAAFgAcAAnMcAAAEEwACc+YGlwABIcsAASHcJkizAAJxmAGADwABi+QABBcAAnQKBpcAASHzAAEh8wABJGgAAAAPAAEiRwABJGgAAAAMDA8AASKYAAACwvWADvfIAwABI0AAAAJYmYAO86ADAAEjeAAAEkixgA8AAYvkAAGADwACc9gE/AggBwACc+YIAwFCZpQkAwABI88AAnOcCAAKAwABI/cBQmYmBwABJEsBQmZcAAwbAAJz8gaXAAEg2wABIScAASFsBAMAAYw7AAJxmAAAAAQPAAEhRwABIWwAAAAAAAABgA7zoAUrAAEhUASbAAEhUARbAAEhULsAAUirAAJxmwACcymADvOgGwACc/oGlwABJH8AASTnAAEmcAADAAGMGAWrAAEkgYAPAAP1RAgAAAQPAAElLwABJnAAAAAEBAcAASVsAAACrS2ADwABymwAAYAO95wE+AUrAAElrARzAAElyLsAAYwfAAJxmAgACFsAASYYuwABjDsAAnGbAAJz8gMAASY/AUJp8AMAAnNoGwACdAIGlwABJocAASbvAAEpQAADAAGMJwACcZgFqwABJomADwAD9UQIAAAEDwABJ0cAASlAAAAACAgLAAEnnAAAArMNgA73nAMAASfwAAACrS2ADwABymwAAYAO95wE+AUrAAEoMAR7AAEoTwACcagMAAxbAAEoogcAASh/AUJsVpN/AAHKggMAASjXAUJsHFsAASkEWwABKOy6SLMAAnGbAAJz5hTrAAGL7AAAAUJnsAFCaRABQmssAUJt4AAAAAwLAAJ0DgaXAAEpVwABKW8AATFMDwABjDwAAAWABwACcxwAAAAEFwACdDIGlwABKvcAASr3AAEtQAAAAA8AAStLAAEtQAAAAAgICwABK7gAAALC9YAO98gDAAEsSAAAAliZgA7zoAABgA8AAnQMBPwEJAMAASynAAJznAgACgMAASzPAUJvXgcAAS0jAUJvlAAMGwACdBoGlwABKk8AASqbAAEq4AQDAAGMQwACcZgAAAAEDwABKrsAASrgAAAAAAAAAYAO86AFKwABKsQEmwABKsQEWwABKsS7AAFIqwACcZsAAnMpgA7zoBsAAnQiBpcAAS1XAAEtvwABL0gAAwABjBgFqwABLVmADwAD9UQIAAAEDwABLgcAAS9IAAAABAQHAAEuRAAAAq0tg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AAABA8AAciTAAHMVAAAAAgICwAByLgAAAK14YAPAAJ1RAMAAcj8AAAAgYAPAAP1RAABgA8AA+j8BPgJHwABySYDAAHJRwFFCBgIBwAByb2rAAHJvYAPAAJ1RwAFKvAA+AUrAAHJ9ASXAAHKJgcAAcoTAUUIWYAOCSwHAAHKnasAAcqdgA8AAnVHAAUrVAD4BSsAAcrQBJcAAcsCBwAByu8BRQhZgA4fWPTDAAHLcH8AAcubAAPulAQABJMAAcxIDJ8AAY4yAwABzCMBRQgYngWoABsAAnGqBpcABD+LAAQ/wwAEUfwABwABjjcAAnGYAAAABA8ABD/vAARR/AAAABAMDwAEQDgAAAKTfYAPAAE0rAMABECkAAACCkGADvecAwAEQOAAAAISwYAPAAGJmAAHAARBOAAAAtd1gA8AA+j8BasABEFpgA8AA+j93YAO95wE+Bk7AARB5wAEQjQAAsL1gA73yARbAARCbgMABEI/AUUL2sL3AAE00TsABEMAAAADAAGOOYAO95wBJwAEQzRbAARDcgsABENHAUUMUwABGF8AAYmo+AUrAARDyAYHAARD5wFFDBknAAREIFsABEReCwAERDMBRQxSzXMAAYm0+A07AARE8wAERSgAAuaFgA8AAYo0BJsABETwBgsABEUzAUUMUYAPAAGKNScABEVwcwAERdhbAARFuhsABEWDAUUPHlibAAGKPSAEAARbAARGUFsABEYWAwAERecBRQvazQMAATTOazLhOAMAA/V4+AUrAARGpAYHAARGwwFFDBj89jcABEcDAUUNvHMABEeCEwAERzMBRQ0m1PAEAARbAARIDhsABEfXAUUPHlibAAGKPAL4SScABEhYWwAESJYLAARIawFFDFLmdwABibD4BSsABEjMBgcABEjrAUUMGScABEkkiFsABEliCwAESTcBRQxS6nsAAYm4BFsABEnCCwAESZcBRQxS5nMAAYm8+AT2NwAEShsBRQ28WwAESshbAARKegMABEpLAUUL2sL3AAE00hTu99knAARLJFsABEtiCwAESzcBRQxS5nsAAYnI+AUrAARMdAYHAARMkwFFDBj4CQCIWwAETS4LAARNAwFFDFKOowABicAEWwAETaILAARNdwFFDFMAARhjAAGJxwAETQMABE34ASsABE64BgcABE7XAUUMGScABE8GDwAETxcBR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9gAAAAEDwAChwsAAo5IAAAABAQHAAKHVAAAAmNtgA70AAABgA8AA+j8BPgJOwACh9MAAofgAAJnKYAO8wQEWwACiBoDAAKH6wFHnRIT/vOFKwACiGgEiIiIiHMAAojoWwACiLRbAAKIlgcAAoiHAUeddhEO8w6UrvLRIAQABGsAAokK4MwDAAP6TABzAAKJ9FsAAonIWwACiZS61qsAAnvbAAJ77t7TAAH8OsvUBAAGBwACii8BR510AwABqTQAcwACixBbAAKKoFsAAopsutarAAJ72wACe+6towAB/H5rnAgACgcAAotDAUeddFsAAovEWwACi4hbAAKLVLrWqwACe9sAAnvuzQMAAf0axG7hqAMAAcQYAHMAAozUWwACjGRbAAKMMLrWqwACe9sAAnvuraMAAfx+a5wIAAoHAAKNBwFHnXRbAAKNiFsAAo1MWwACjRi61qsAAnvbAAJ77s0DAAH9Gmtq4WgDAAHEGABzAAKOJFsAAo4SAwACjeMBR50SAvbyvSAEAAScAAMAA/foGwACfaIGowACjl8AAo6fAAKwCAADAAGPHAAAAAQPAAKO+wACsAgAAAAYGBsAAo84AAACD7mADgksAwACj5wAAAFtgA4V4AMAApAEAAACk8WADwABLZADAAKQfAAAArMNgA73nAMAApD0AAACY22ADvQAAwACkXwAAAMAAZApgA8AAoCAAAGADwACcawE+Ak7AAKSFwACkkAAAhTpgA8AAnGsBHMAApJouwABj9wUABYDAAKStwFHo7YLAAKSzwFHpCIPAAKS9wFHpGITAAKTDwFHpJoXAAKTQwFHpNADAAJ9pScAApOUcwAClBBbAAKT1FsAApOkut5nAAJ72wACfFbNAwABx7rHbAQABhMAApR3AUekmALlBPgFJwAClVSIWwAClbhbAAKVjgcAApVnAUej7hZOFe4FVwAD8iwAWwACliRbAAKWDgcAApXnAUej7hV2FfIFVwAD8iz4BSsAApb0BHMAApdwWwAClzhbAAKXELsAAY6bAAJ72wACe/MAAT2DAAHKmmR0CAAImwACl9QGAwACl9cBR6O1gA4JSNMAApgcDwACmB8AApnoAAAAAAAAAYAPAAJxrAUrAAKYNARzAAKYUFsAApg0uwABRQcAAnvbAAJ79wABj4wUABRbAAKYoFsAApiEuwABRQcAAnvbA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wABjrcAAnvbAAJ8GAcAAT3IWwACuki7AAE9ywACfF8AAcrwGwACfa4GowACuosAArrLAALOeAADAAGQMAAAAAQPAAK7FwACzngAAAAUFBcAAruEAAACD7mADhb0AwACu/AAAAIJqYAO86ADAAK8bAAAAW2ADwACgIADAAK81AAAApPFgA8AAS2QAwACvUwAAAKzDYAO95wAAYAPAAJxrAT4DTsAAr2bAAK9rAACAvWADwAD96wEWwACvdoHAAK9twFHyGYC9vK89HMAAr4AuwABj9wUABYDAAK+TwFHyC4PAAK+ZwFHyNoTAAK+jwFHyRoHAAK+pwFHyGYLAAK+zwFHyJwDAAJ9pScAAr8McwACvzIXAAK/HwFHyX0gBAAFqwACv22ADwAD968AA7nQAwAD9+j4DTsAAr/bAALAFAACvS2ADwABmywEcwACwHRbAALARLreZwACe9sAAnxXAAE8uAQABgMAAsDjAUfILAMAAcgI9HMAAsFkWwACwRS7AAGOtwACe9sAAnwZWAQABFsAAsGyGwACwXcBR8vK0SsAAZtIAwAB4QErAALCAARzAALCRFsAAsIcuwABjpsAAnvbAAJ78wABPfQEAAYbAALCmwFHy8gDAAHLFScAAsMIcwACwy4XAALDGwFHyX0gBAAFqwACw2mADwAD968AA7noAwAD9+j4DTsAAsQXAALEUAACvS2ADwABmywEcwACxLBbAALEgLreZwACe9sAAnxXAAE8wAQABgMAAsVXAUfILAMAAcgQ9HMAAsXYWwACxYi7AAGOtwACe9sAAnwZWAQABFsAAsYmGwACxesBR88S0SsAAZtIAwAB4QErAALGdARzAALGuFsAAsaQuwABjpsAAnvbAAJ78wABPfQEAAYbAALHDwFHzxADAAHLFScAAsd8cwACx6IXAALHjwFHyX0gBAAFqwACx92ADwAD968AA7ncAwAD9+j4DTsAAshrAALIpAACvS2ADwABmywEcwACyQRbAALI1LreZwACe9sAAnxXAAE8vAQABgMAAsmPAUfILAMAAcgM9HMAAsoQWwACycC7AAGOtwACe9sAAnwZWAQABFsAAspeGwACyiMBR9Ja0SsAAZtIAwAB4QErAALKrARzAALK8FsAAsrIuwABjpsAAnvbAAJ78wABPfQEAAYbAALLRwFH0lgDAAHLFScAAsu0c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AwACH8ABEQTAAI7tAgACFsABERYugmvAAJ+WgMABESLAUkJlABzAARE+FsABETaAwAERMcBSQmWD0InjgKsBAWADwACcawE0wAERQgPAARFCwAERWQAAAAEBAcABEUMAAACDTWADiXMAAGADwACcawFKwAERSQEcwAERSS6GBwEAAYHAARFXwFJC8wCZoADAAPxyAYQdKcAAn0gGwACfoYGowAERe8ABEZfAARJqAACGwAFqwAERfGADwAD9UQIAAAEDwAERp8ABEmoAAAABAQHAARG3AAAAg+5gA4nxAABgA8AAnGsBPgFKwAERwwEcwAER0hbAARHKLoQhwACflcAAY+QDAAIfwAER+MAAju0CAAIWwAESCi6Ca8AAn5aAwAESFsBSQ2kAHMABEjIWwAESKoDAARIlwFJDaYPQifSAqwEBYAPAAJxrATTAARI2A8ABEjbAARJNAAAAAQEBwAESNwAAAINNYAOJcwAAYAPAAJxrAUrAARI9ARzAARI9LoYHAQABgcABEkvAUkP3AJmgAMAA/HIBhB0pwACfSgbAAJ+igajAARJvwAESi8ABFEQAAIbDAWrAARJwYAPAAP1RAgAAAQPAARKgwAEURAAAAAEBAcABErUAAACD7mADigIAAGADwACcawE+Aj0cwAES0hbAARLGgMABEsHAUkRthdOKBoP4AQABNMABEtoDwAES2sABE5QAAAACAgLAARLoAAAAhF5gA4J7AMABEv8AAACAlmADiXMAAGADwAD9DgE+AT0cwAETIBbAARMWFsABEw4uhCHAAJ+VwABjpsAAnvbAAJ78wABPbgIAAhzAARNRFsABE0UWwAETPS6EIcAAn5W3mcAAnvbAAJ8VwABNFAEAARbAARNkgcABE1rAUkS2hG6ChQDAAHH8HMABE3guhgcBAAGCwAEThsBSRMQAmaAAwAByuQDAAPz5SsABE5sBHMABE7EWwAETqhbAAROiLoQhwACflcAAUUHAAJ72wACe/cAAY+8BAAEcwAET/xbAARPiFsABE9UWwAETxC6EIcAAn5W1qsAAnvbAAJ77sL3AAH9JtTkBAAEcwAEUJhbAARQaFsABFBIuhCHAAJ+Vt5nAAJ72wACfFZwaAQABFsABFDSAwAEUL8BSRG2E6IoKAMAAcf0Avg8AwAChLAbAAJ+jgajAARRJwAEUZcABFR0A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+j8GwACfv4GowAEfR8ABH1fAAR+dAACYxgAAAAEDwAEfYMABH50AAAABAQHAAR9tAAAAhJRgA7zlAABgA8AAnGsBPgFKwAEfegEcwAEfiRbAAR+BLsAAZDTAAJ72wACfs5jGAQABgMABH5PAUlDUAMAAoBoGwACfwIGowAEfosABH6fAASAGAADAAGPFAAAAAQPAAR+ywAEgBgAAAAICAsABH78AAACElGADvOUAwAEf1gAAAIKQYAPAAJxrAABcAT4BPRzAAR/qFsABH+IuwABkNMAAnvbAAJ+zwABjxQIAAoDAAR/2wFJRSIHAAR/9wFJRVgDAAKAZBsAAn8GBqMABIAvAASAbwAEhMgAAwABELgAAAAEDwAEgJMABITIAAAADAwPAASA0AAAAq0tgA8AAcpsAwAEgXAAAAMAAY7RdA8AA/NoCYAO9DGADvOUAwAEgdAAAAJ7OYAO9DAAAYAPAAJxrAT4CTsABII3AASCTAACElGADvOUBHMABIKWBwAEglcBSUd1LAQABgsABIKbAUlH4AMAA/O5JwAEgsiEcwAEgvIPAASC2wFJSEUgBAAErAMAA/V4+AUrAASDNARzAASDdgMABINTAUlHNwABPewEAAYPAASDqwFJSEQDAAHLDPgFKwAEhBQEcwAEhFBbAASEMLsAATB/AAJ72wACfsq83AgACgMABIRjAUlHNgsABISLAUlH4AMAAoEUGwACfwoGowAEhN8ABITzAASNVAADAAFPgAAAAAQPAASFHwAEjVQAAAAcGBsABIV4AAACrS2ADwABymwDAASGGAAAAwABjtF0DwAD82gJgA70MYAO85QDAASGkAAAAns5gA70MAMABIcEAAACCkGADwACcawDAASHVAAAAg+5gA4JLAMABIeoAAACFvGADwABiZgABwAEh/QAAALXdWwFqwAEiCWADwAD6P3dcAT4EQCEcwAEiIoPAASIdwFJTK0gBAAErAMAA/V7AASIdwAEiKQA9i8ABIjDAUlMrHMABIkYWwAEiQIDAASI3wFJS8oVtwABypcAAY/gDAAKDwAEiUcBSUyuFwAEiV8BSU0kBtd0mwAEibwGGwAEib8BSU1pgA8AA+j/AAKEnTsABIo3AASKTAACElGADvOUBHMABIqWBwAEilcBSUwJLAQABgsABIqbAUlMdAMAA/O5JwAEisiEcwAEivIfAASK2wFJT8UgBAAErAMAA/V4+AT0cwAEi1oDAASLNwFJS8sAAT24CAAKHwAEi6MBSU/GDwAEi78BSUysAwAByuT4BPRzAASMRFsABIwkuwABMH8AAnvbAAJ+yrDIGAAaAwAEjGMBSUvKCwAEjIsBSUx2DwAEjKcBSUyuEwAEjL8BSUzuFwAEjNcBSU0kWwAEjQS7AAGQ1wACe9sAAn7QAwACgRgbAAJ/DgajAASNawAEjX8ABJLMAAMAAZBMAAAABA8ABI2rAASSzAAAABQUFwAEjgQAAAKtLYAPAAHKbAMABI6kAAADAAGO0XQPAAPzaAmADvQxgA7zlAMABI8cAAACezmADvQwAwAEj3QAAAIKQYAPAAGJmAMABI/EAAACD7mADgksAAFwBPgJOwAEkDcABJBkAAMAAZARgA8AAnGsBHMABJBsuwABELgMAA4DAASQlwFJU/oHAASQvwFJVDoLAASRBwFJVKQDAAJ/BPRzAASRNLsAAU+AHAAaAwAEkWcBSVP6BwAEkY8BSVQ6CwAEkdcBSVSmFwAEkfMBSVVuEwAEkicBSVUeDwAEkj8BSVTcBtd0qwACfwgbAAJ/EgajAASS4wAEkw8ABJlUAAMAAZCkAAAABA8ABJMzAASZVAAAAAgICwAEk3AAAAKtLYAPAAHKbAMABJPEAAACD1mADwACfrwAAYAPAAJ+vAT4FPRfAAST+LsAAY8gqwACftT0XwAElHS7AAGPSKsAAn7ZJwAElPxbAASVJgcABJUPAUlYlwABjzcAAn7o+AUrAASVZAS4/TsABJX7AASWFAADAAFRbYAPAAKBAARzAASWPFsABJYcuwABMH8AAnvbAAJ+ywABkKQIAAoDAASWZwFJWFRbAASWpgcABJaPAUlYlwABMH8AAnvbAAJ+yAMAAoEdKwAEltwEfwAElwsAAn9MFAAOCwAEl1sBSVoUWwAEl3i7AAGQ0wACe9sAAn7MWwAEl5y7AAGQ1wACe9sAAn7QCwABjyBbAASYNLsAAY8jAAJ+1wABj0hbAASY9LsAAY9LAAJ+2BsAAn8WBqMABJlrAASZlwAEqUgAAwABj0QAAAAEDwAEmdcABKlIAAAADAwPAASaMAAAAq0tgA8AAcpsAwAEmoQAAAMAAZDtgA8AAn68AwAEmuAAAAMAAZDxgA8AAn68AAGADwACfrwE+Bj0XwAEmyi7AAGPIIhbAASbxgcABJubAUleAwABjyMAAn7UAFsABJxGCwAEnBsBSV5LAAGPIwACftcAAn7U9F8ABJyguwABj0iIWwAEnUYHAASdGwFJXgMAAY9LAAJ+2ABbAASdzgsABJ2jAUleSwABj0sAAn7bAAJ+2TsABJ5sAAADAAFRbYAPAAKBAAEnAASenFsABJ6suwABjzcAAn7o+AT2LwAEnu8BSWCkWwAEnxC7AAEwfwACe9sAAn7JJwAEn2BbAASfngcABJ9zAUleAwABjzcAAn7o+AT2LwAEn98BSWCkcwAEoCBbAASgALsAATB/AAJ72wACfssAAZCkDAAKAwAEoEsBSV3AWwAEoJ4LAASgcwFJXksAATB/AAJ72wACfsgHAAGQ9KcAAoEdJwAEoSxbAAShagsABKE/AUleSwABjzcAAn7o+AT2LwAEoasBSWCkcwAEoexbAAShzLsAATB/AAJ72wACfssAAZCkDAAKAwAEohcBSV3AWwAEomoHAASiPwFJXgMAATB/AAJ72wACfsgHAAGQ9KcAAoEc+AT2LwAEoxsBSWCkcwAEo1xbAASjPLsAATB/AAJ72wACfssAAY9EDAAOAwAEo88BSV3AWwAEpCIHAASj9wFJXgMAATB/AAJ72wACfshbAASkcgsABKRHAUleSwABMH8AAnvbAAJ+yAMAAoEhOwAEpSsABKVUAAMAAZDlgA8AAoBEBNQAAAAEAYAPAAKARARbAASlXLsAAZDTAAJ72wACfsyMcwAEpYIQAwFJZ00gBAAErAAArHMABKWCEAMBSWdPAAGPRAwADgMABKXrAUldwFsABKY+BwAEphMBSV4DAAGQ0wACe9sAAn7MWwAEpo4LAASmYwFJXksAAZDTAAJ72wACfswDAAKAcAWADwACgEUrAASmxAR/AASm8wACf0wUAA4PAASnQwFJYKYTAASnYwFJZvRbAASnkLsAAZDXAAJ72wACftALAAGPIFsABKgouwABjyMAAn7XAAGPSFsABKjouwABj0sAAn7YGwACfxoGowAEqV8ABKmLAAS1uAADAAGPUAAAAAQPAASpywAEtbgAAAAMCAsABKoIAAACrS2ADwABymwDAASqdAAAAwABkPl0DwAD8qQFgA8AAn68AAcABKrEAAADAAGPdYAPAAPo/AWrAASrAYAPAAPo/d2ADwACfrwE+Bk7AASrSwAEq4wAAwABkP2ADwAD6PwEpRsABKu/AASsQwAEq/wAAAIJOYAPAAJ+vAIHAASsIwFJa9z4BPYvAASsYwFJbOSKDwAErK8BSWzkAFsABK0WEwAErP8BSW1jAAGPIwACftT2KwAErY8BSWxEigsABK3PAUlsRACEWwAErhS7AAGPIwACftU7AASurwAErsgAAwABUW2ADwACgQAEcwAErvBbAASu0LsAATB/AAJ72wACfssAAY9QDAAKAwAEr1sBSWuccwAEsPxzAASv8gcABK+jAUlr3gaUBAAE0wAEsAgPAASwCwAEsMAAAAAEBAcABLA4AAACCTmADwACfrwAAYAPAAPo/AUrAASwYASEWwAEsH4TAASwZwFJcK8AAY8jAAJ+1AMAA/HOAqwEBYAPAAKBAATTAASxDA8ABLEPAASxmAAAAAQEBwAEsTwAAAIJOYAPAAJ+vAABgA8AAoEABSsABLFkBFsABLF+EwAEsWcBSXITAAEwfwACe9sAAn7IAwAD8cgHAAGPdgsABLIDAUlsRwACgST0XwAEslC7AAGPIIoPAASyowFJbOQAhgsABLL3AUlsRwACftUrAASzQAR/AASzbwACf0wUAA4TAASzvwFJbwxbAASz3LsAAZDTAAJ72wACfsxbAAS0ALsAAZDXAAJ72wACftALAAGPIFsABLSYuwABjyMAAn7XAAGPSFsABLVYuwABj0sAAn7YGwACfx4GowAEtc8ABLXjAAS6QAADAAGPaAAAAAQPAAS2AwAEukAAAAAICAsABLZAAAACrS2ADwABymwDAAS2rAAAAwABkPl0DwAD8qQFgA8AAn68AAGADwAD6PwE+AkAhFsABLcEuwABjyMAAn7XAAS3AwAEt0gBKwAEt2QEcwAEt6BbAAS3gLsAATB/AAJ72wACfssAAY9oCAAKAwAEt+sBSXYccwAEuYxzAAS4ggcABLgzAUl2XgaUBAAE0wAEuJgPAAS4mwAEuVAAAAAEBAcABLjIAAACCTmADwACfrwAAYAPAAPo/AUrAAS48ASEWwAEuQ4LAAS49wFJeLMAAY8jAAJ+1AMAA/HOAqwEBYAPAAKBAATTAAS5nA8ABLmfAAS6KAAAAAQEBwAEucwAAAIJOYAPAAJ+vAABgA8AAoEABSsABLn0BFsABLoOCwAEufcBSXoXAAEwfwACe9sAAn7IAwAD8cgDAAKBKBsAAn8iBqMABLpXAAS6awAEu9gAAwABUTQAAAAEDwAEuo8ABLvYAAAACAgLAAS6zAAAAq0tgA8AAcpsAwAEuxQAAAL6gYAOCSwAAXAE+AT0cwAEu2RbAAS7RLsAATB/AAJ72wACfssAAVE0CAAKAwAEu48BSXvOBwAEu7cBSXwMAwACgSwbAAJ/JgajAAS77wAEvAMABL1gAAMAAVGMAAAABA8ABLwfAAS9YAAAAAgICwAEvFwAAAKtLYAPAAHKbAMABLykAAAC+oGADgksAAFwBPgE9HMABLz0WwAEvNS7AAEwfwACe9sAAn7LAAFRjAgACgMABL0XAUl94gcABL0/AUl+IAMAAoEwGwACfyoGowAEvXcABL2TAAS/vAACv1gAAAAEDwAEvdMABL+8AAAABAQHAAS98AAAAqEJgA8AA/esAAGADwAD96wE+A07AAS+XwAEvmgAAg+RgA8AA/jUBH8ABL6DAAP5UAAAAAD0cwAEvtC7AAGLzwACe9gIAAoHAAS/GwFJgFoDAAS/KwFJf+wDAAJ/MSsABL9cBHMABL+GBwAEv3sBSYBYjAAAAAMAA/k4GwACfzIGowAEv9MABL/nAATDMAADAAGLzwACe9gAAAAEDwAEwCsABMMwAAAACAgLAATAYAAAAg+RgA8AA/jUAwAEwIwAAAKhCYAPAAP3rAABcAT4EPRzAATA0gMABMDHAUmCsgooBAAEkwAEwUwMnwABkQBbAATBHLoPBwAD9ZCfAAGRBAMAA/kk9HMABMF2AwAEwWsBSYKyCigEAASTAATB5AyeAr4HAATBowFJgvCfAAGRCAMAA/kk9HMABMIOAwAEwgMBSYKyCigEAARzAATCRFsABMIkuwABMH8AAnvbAAJ+yr9YBAAEkwAEwsQKBwAEwpcBSYLwnvfgAwACgTQDAAP5JPRzAATC8gMABMLnAUmCsgooBAAEnwABkQwDAAP5JBsAAn82BqMABMNHAATDkwAEyYwAAIwFqwAEw0mADwAD9UQIAAAEDwAEw7MABMmMAAAAAAAAAYAPAAP3rAT4ITsABMQLAATEFAACD5GADwAD+NQEfwAExC8AA/lQAAAAAPRzAATEigMABMR/AUmHggooBAAEnwABkQADAAP5JPRzAATE/gMABMTzAUmHggooBAAEkwAExVgInwABkRBbAATFOLsAATB/AAJ72wACfsgDAAP5JScABMV0hHMABMWkWwAExYS7AAGQ0wACe9sAAn7NIAQABKwDAAP1ePgE9HMABMX2AwAExesBSYeCCigEAASTAATGVAifAAGRFFsABMY0uwABkNMAAnvbAAJ+zAMAA/kk/ScABMaIWwAExpi7AAGPIwACftT4BPRzAATHEgMABMcHAUmHggooBAAEnwABkRgDAAP5JP0nAATHrFsABMe8uwABj0sAAn7Y+AT0cwAEyD4DAATIMwFJh4IKKAQABJ8AAZEcAwAD+ST89HMABMjuAwAEyOMBSYeCCigEAASeDIQDAAP5JSsABMksBHMABMlWAwAEyUsBSYeAjAAAAAMAA/k4AAFJNqABSTtIAUk8sAFJPqgBSUCoAUlCqAFJRHABSUaEAUlLGAFJU0gBSVekAUldEAFJauwBSXVsAUl7HAFJfTABSX9EAUmB8AFJhoABSY1UAAAATAAABgagAUmOsAFF0DwBSPI0AUkh2AFJJSgBSY6oAAAAEAFJjrAAAAAAAAgTAAJ/UwABkSIGpAAAIgQkAALfsAAEBArDMsNaBQAAAvKwAAIFkAADAAEtSAAEBAaSmgZYAAL3MAACBuwAAwACf7oKGAIHZAADAAHKXAACB+AAAwACzaQAAghMAAMAAnGYAAAAAAAICwACf1YGpgjSCOpI0A8AAZEkAAAFgAcAAs24AAAIEwACf14GpgoiClgnAAGRKAF0DwAD8ZwFgA7zoAATAAJ/ZgamCvoL5CcAAZEvAAJ/UAF0DwAD8qQFgA8AAnWUBHoLawAD3owEBYAPAAJ1lAZMAAQXAAJ/ogamC/oL+hDIAAAADgxKEMgAAAAMDA4MYAAAEwABkSl0DwAD8ZwFgA7zoAINBAAAAwABPrWADwACcmwCDYgAAAKtLYAPAAHKbAABgA8AAn9UBPgFAHIO1FoOmLsAAZErAAJ/XljYBAAE0g7sDg7uDzwAAAAEBAYO8AAAAgaZgA7zoAABgA8AA+j8BSoPCASEWg8WDg8PAUmUohBq84ADAAPx6g6aD0AEkAAInwABkTByEERaEAi7AAGRKwACf14GlAQABNIQXA4QXhCoAAAABAQGEGAAAAIGmYAO86AAAYAPAAPo/AUqEHgEWhCCDhB7AUmWDhBq84ADAAPxzAggBwACf14AAwFJkyAkAg3TAALOhAgACgYN6wFJk3YKDhsBSZO0ACgbAAJ/bgamEN4RghH4BAMAAT60BaoQ4YAPAAP1RAgAAAQOEa4R+AAAAAAAAAGADwACcmwFKhG4BJoRuARiEdMAAT63AALNwYAPAAJybBsAAn92BqYSDhIiGGwAAgpsAAAABA4SLhhsAAAAAAAAAXAE+BD0chJQuwABKKgAAAADAALN/SYSjIRaEqC7AAE+nwACzekqEuwA/PRyE1xaExy7AAGRLwACf1MAAn9mD+AEAARaE3y7AAGRNwACf1MAAn+EAwAD8d0aE8oUhhQYAAACWJmADvOgAFoURLsAAZErAAJ/XPgE9HIVBFoU4FoUyFoUpLqtLwACzcYVtwABypaUbwACg3rMdAgACgIVSwFJmoTSFWwOFW4YQAAAAAQEBhWIAAACA7WADvQwAAGADwAD9DgE+Ak6FjoWTAACBVGADwACctQEchbAWhaoWhaEuq0vAALNxhW3AAHKlt+wBAAGBhcvAUmb1AMAAoSg9F4XkgoXfwFJnDMAAYvsqwACctwDAAKDPBsAAn9+BqYYghiWG7QAAwABkTsAAn9QAAAABA4Y+hu0AAAABAAGGRwAAAKVjYAPAAP3rAWoAYAPAAP0OeQBcAT4CPReGYRaGVi7AAE+twACf28AAT64pwACcnUmGimqGlGADwAD6PwA+AT0ehqXAAPXoAQABJIbiBCfAAGOBFoa1LsAAT63AAJ/bJ8AAZE+AhtvAUmeBAD8GwACf4IGphvKG94dWAADAAGRQwACf1AAAAAEDhxSHVgAAAAEBAYctAAAAgVRgA8AAnWUAAFwBPgE9HIdJFoc5LsAAZEvAAJ/UwACf2VYBAAGAh03AUmgZAMAA/LoGwACf4YGph1uHYIk2AADAAGRNwACf1AAAAAEDh2yJNgAAAAEBAYeFAAAAgVRgA8AAnWUAAFwBPgNOh5qHowAApPFgA8AAS2QBFoeqgIelwFJodqTxwACdak6HxofLAACsw2ADvecBFofSgIfNwFJodqzDwACdaz0ch+sWh9wuwABkSsAAn9eD+AEAATSH8wOH84kxAAAAAQEBiAMAAADAAGRRYAO86AAAYAPAAP0OAT4CSYgcIRyIQxaIKoGIIcBSaIq0rsAAS2m7LAEAARaIZIOIVMBSaOq0oLzrAMAAaM8+AUqIgwA/PRyIohaImS6rS8AAs3HAAE93BwAFgIjIwFJodoOIzsBSaOoWiOSAiN/AUmh2W8AAnWyBiO/AUmiKgoj5wFJoqgKEWSrAAE94KsAAcr8AwAD8dwbAAJ/kgamJO4lHilQAAMAAY0ABaok8YAPAAP1RAgAAAQOJaopUAAAAAQEBiYoAAACBVGADwACdoAAAXAE+Aj0diZzAAGNAAQABgInAwFJptgDAALOQSYnLHIncFonUgInPwFJptrRPwACdokgBAAEWid8uwABkUsAAs3kAwAD9Xj4BPRyJ9C7AAGRQwACf1AEAAYCKEsBSabYAwACf4D4BPRyKLC7AAGRTAQABJ8AAZFQAwACzgAbAAJ/lgamKWYpljfEAAMAAYykBaopaYAPAAP1RAgAAAQOKh43xAAAAAQEBiqYAAACBVGADwACddgAAWwE+BT0dirjAAGMpAQABgIrbwFJqbQDAALORTorzivoAAMAAZFVgA7zTARaLAYCK/MBSam3AAE+vwACdeEmLFByLPBaLLRaLIRaLGC6rS8AAs3Gk38AAcqCzQMAATTOx7gEAAYGLRsBSapgAuUs+Ak6LXotjAACAvWADwAD96wEWi2yBi2XAUmqYgL28r0mLeCIci4GCi3zAUmrtSAEAAWqLkGADwAD968AA7nQAwAD9+gEci5uCi5bAUmrtSAEAAWqLqmADwAD968AA7oMAwAD9+j4BPRyLyC7AAGRTAQABJIvuAifAAGRWFovjgIvewFJqbaPIwACdcwDAALOAPz9JjAMiIiIWjA6BjAfAUmqYhTO83AAhHIwwFowngIwiwFJqbaTxwACdakgBAAErAMAA/V4AFoxRFoxIgIxDwFJqbaTxwACdarKgwABLdgAcjJIcjHIWjGwWjGMuq0vAALNxhW3AAHKlwABPHwEAAYGMisBSapgAwAChKkgBAAEWjJUuwABkUsAAs3kAwAD9Xj4BPRyNEy7AAGRQwACf1AEAAYCNMcBSam0AwACf4D9JjUIiIhyNRi7AAGRXwACf1AEAAYGNXMBSapgAwACf4wAhHI1+Fo10gI1vwFJqbVvAAJ1sSAEAASsAwACgKgAcjaAWjZaAjZHAUmptW8AAnWyDFwEAARaNqS7AAGRSwACzeQDAAKAuPgE9HI2/LsAAZE7AAJ/UAQABJ8AAZFgAwACf3z8GwACf4oGpjfaN+45sAADAAGRZwACf1AAAAAEDjg6ObAAAAAEBAY4cAAAAliZgA7zTAABgA8AA+j8BSo4uARyOXhyOPRaONxaOLi6rS8AAs3GFbcAAcqXAAE8fAQABgI5VwFJs1QDAAKEqSAEAARaOYS7AAGRSwACzeQDAAP1eBsAAn+OBqY5xjnaO9QAAwABkV8AAn9QAAAABA46LjvUAAAABAQGOmQAAAJYmYAO80wAAYAPAAPo/AT4BSo6oARyO0xaOxBaOuBaOry6rS8AAs3Gk38AAcqCzQMAATTOxHwEAAYCO6cBSbVQAuRoGwACf5oGpjvqPBpIyAADAAGM8AWqO+2ADwAD9UQIAAAEDjymSMgAAAAEBAY9JAAAAgVRdA8AAnYcBWwAAXAE+Aj0dj1vAAGM8AQABgI9/wFJtyADAALOaSY+KFo+cFo+TgI+OwFJtyKTxwACdarKgwABLdj4BSY+sHI+/Fo+1gI+wwFJtyFvAAJ1sgxcBAAEWj8guwABkUsAAs3kAwACgLj4CSY/gIhaP6YCP5MBSbcjAAE+6wACdmwEckCMWkBOAkA7AUm3IwABPvMAAnZyB1AEAATSQJwOQJ5BHAAAAAQEBkCgAAACWJmADvNMAAGADwAD6PwFKkDQBIRaQPYGQNcBSbn6ywbzbAMAA/Hw+AT0ckFYuwABkUwEAASfAAGRUAMAAs4A/SZCIHJChFpCRgJCMwFJtyMAAT7zAAJ2cgdQBAAEWkKUuwABkV8AAn9TAAJ/jAMAA/Hw+AT0ckMkuwABkTsAAn9QBAAEnwABkWgDAAJ/fP0mRCxyRJBaRFICRD8BSbcjAAE+8wACdnIHUAQABFpEoLsAAZFnAAJ/UwACf4gDAAPx8PgE9HJFILsAAZFDAAJ/UAQABgJFmwFJtyADAAJ/gP0mRgCIWkZIWkYmAkYTAUm3IpPHAAJ1qhTPAAEt0AByRvxaRtBaRq4CRpsBSbcik8cAAnWqnLsAAS2hIAQABapHIYAPAAGh9wADuhgDAAP1ePgE9HJILLsAAZFsBAAGAkiPAUm3IAMAAs3w/AABSZdYAUmYjAFJnWwBSZ/MAUmhQAFJpigBSakEAUmyvAFJtLgBSbZwAUm/OAAAACgLAAJ/pgamSN5I9lEcDwABkXAAAAWABwACf1QAAAAEFwACf7YGpkoCSgJMRAAAAA5KhkxEAAAADAwOSuAAAAMAAZF1gA7zoAJLHAAAAwABPrVsAktMAAACrS1sAAGADwACf6QE/AQkAkuXAAJ/oAwADMZLrYAO86AGAkuzAUnA5JpL8AYGS/MBScEdgA8AAnJsmkwgBgpMIwFJwUmADwABymwABBsAAn+uBqZMWkyKURQAAwABjKQFqkxdgA8AA/VECAAABA5NElEUAAAABAQGTYwAAAIFUYAPAAJ12AABbAT4CPR2TdcAAYykBAAGAk5jAUnDPAMAAn+VJk6MiIhyTuhaTrICTp8BScM/AAE+vwACdeEgBAAEWk8wWk70uwABkSsAAn9eDGcAA/I0AwAD9XgAhHJPrFpPigJPdwFJwz6TxwACdakgBAAErAMAA/V4AFpQMFpQDgJP+wFJwz6TxwACdaoUzwABLdD4BPRyUHi7AAGRbAQABgJQ2wFJwzwDAALN8PwAAUnCjAFJxhQAAAAEAAAGBqQBScZQAUmQ8AFJv/wBScZIAAAACAFJxlAAAAAAAAgTAAJ/uwABkXoGqAAAAAAAAAAUEwACf8IGqgT6BTQbAAGRfAGADwAD6PwFqgUhgA8AA+j8ABMAAn/GBqoFagW8GwABkYABgA8AA+j8BaoFqYAPAAPo/AATAAJ/ygaqBfIGQBsAAZGEAYAPAAPo/AWqBi2ADwAD6PwAEwACf84GqgZeBqgTAAGRiAGADwAD6PwEqBMAAn/SBqoGxgc4EwABkYwBgA8AA+j8BKgABgaoAUnJhAFJxxwAAAAAAUnJhAAAAAAACBMAAn/XAAGRkgasAAAiA8wAAwAC9zAABAQHAAGRlgSAAAIIuggYAgUgAALysAACBbAAAwABiYQAAgY0AAMAAnDIAAIGnAACB4AAAgcMAAMAAcpcAAIHiAADAAJxmAAAAAAAFAsAAn/aBq4NLg1GWRQPAAFjSAAABYAHAAP1RAAAFBMAAn/mBq4Phg+cJwABkZsAAn/UAYAPAAPwFAATAAJ/6gauECIQRGIYrAF0DwAD82gJgA70MYAPAAJxrAATAAJ/7gauEY4RpCYRSAGADwACf9gAEwACf/IGrhKmEsQmixwBgA4JLAATAAJ/9gauEyoTQCcAAZGcAYAPAAJ/2AAMFwACgDoGrhNWE1YV2AAAAA4TihXYAAAABAAABhOkAAASEUmADwACf9gFqAGADwAD9DnlgA8AAn/YBPwYIAcAAn/uAAMBSc5cIAMAAn/orCADAAJ/9KwgAwACf/CsIAMAAn/kchXM1AAAAAQBgA8AA/AUBNQAAAAEAYAPAAJ/2AYCFXcBSc5cjHIVlgQDAUnPvSAEAASsAACsWhWWBAMBSc+/AAGRmwACf9cAAn/kBYAPAAPwFIxyFbIEAwFJz4kgBAAErAAAchW+UgcQAAAAAwAD8KIEAwFJz4gFgA8AA/AVkAQABlADAAP0qCQGE1cAA/WcAAAAABcAAoA+Bq4V7hXuGngCixwADhZGGngAAAAIBAYWXAAAEosdgA4JLAAGFpwAABIRSYAPAAJ/2AWoAYAPAAP0OeWADwACf9gE+AUAiJYYtFoYkLqLHwACf/GADiB0BJYZIFoY/LqLHwACf/GADiDWGJIZYASSGmQMnwABkaBaGdS6ix8AAn/wnwABkaQYIAcAAn/yAAMBSdI4IAcAAn/uBAMBSdJsIAMAAn/orCADAAJ/9KwgAwACf+RyGEzUAAAABAGADwAD8BQE1AAAAAQBgA8AAn/YBgYX9wFJ0myMchgWCAMBSdTtIAQABKwAAKxaGBYIAwFJ1O8AAZGbAAJ/1wACf+QFgA8AA/AUjHIYMggDAUnUuSAEAASsAAByGD5SBxAAAAADAAPwoggDAUnUuAWADwAD8BWQBAAGUAMAA/SoJAYV7wAD9ZwAAAAAFwACgEIGrhqOGo4gwAMAAZDgAA4a7iDAAAAABAQGGygAAAIPWYAPAAJ/2AABgA8AAn/YBPwYIAMAAn/ojHIb1FobrgIblwFJ13IYrwACf+kgBAAErAMAA/V4rHociwADBEAECYAO9DGADwACcawEWh0mAh0PAUnXchivAAJ/6AAFdA8AA/NoCYAO9DGADwACcawgAwACf/BaHboCHaMBSddyix8AAn/wIAMAAn/01AAAAAQBgA8AAn/YBFoePgIeJwFJ13MAAZGfAAJ/9IxyHloEAwFJ2bUgBAAErAACAh5nAUnXcgQDAUnZtAWADwACf9ggAwACf+RaHt4CHscBSddzAAGRmwACf9cAAn/kIAMAAn/sjHIfdFofWgIfQwFJ13IRSwACf+0gBAAErAMAA/V4rH4gKwACgEAEAARaIKYCII8BSddyEUsAAn/sAAWADwACf9gkBhqPAAP1nAAAAAAwGwACf/4GriGSIbYiGAQDAAGN7AAAAAQOIc4iGAAAAAAAAAGADwAD6PwFKiHYBIRyIfxaIdi6ix8AAn/xIAQABKwDAAP1eBsAAoACBq4lviYGJmwEAwABLogAAAAEDiYqJmwAAAAAAAABgA8AAn/YBSomNATUAAAABAGADwACf9gEWiY0uwABkZ8AAn/0jHImUgADAUneVSAEAASsAAC6AAMBSd5UBYAPAAJ/2BsAAoAKBq4nuifyLdAAAwABkagAAAAEDigiLdAAAAAEBAYoXAAAAg9ZgA8AAn/YAAGADwACf9gE+AUmKJByKMRaKKC7AAEuiwACgAEgBAAEWijqAijTAUnfuwABLosAAoAAAwAD9Xj4BSopMARaKUy7AAEuiwACgAEmKaByKcxaKbC7AAGRmwACf9cAAn/mAlwEAARaKe4CKdcBSd+7AAGRmwACf9cAAn/kAwAD9ND4BSoqLARyKmRaKki6EUsAAn/vAAGRqAQABgIqmwFJ37gDAAKACSYq5HIrEFoq9LsAAZGbAAJ/1wACf+WMBAAEWisyAisbAUnfuwABkZsAAn/XAAJ/5AMAA/TI+AUqK3AEciuMuwABkagEAARaK9oCK8MBSd+6EUsAAn/sAwACgAkmLChyLFRaLDi7AAGRmwACf9cAAn/mAlwEAAZMAwAD9ND4BSosiARyLMBaLKS6EUsAAn/vAAGRqAQABFotDgIs9wFJ37oRSwACf+wDAAKACPgFKi18BKwbAAKADgauLeYuSjFwDAEsAAAABA4uUjFwAAAABAQGLmwAAAIJsYAO9DAAAYAPAAJxrAT4DTou7AAAAgXZgA8AAnGsASYvHIhyL1RaLyy6GK8AAn/pIAQABKwDAAP1eARyL/4mL4cBSeYkci/MWi+ouhivAAJ/6SwEAAYCL9MBSeXIAwAD87kgBAAErAMAA/V4+AUqMEAEjHIweFowXLoRSwACf+0gBAAErAMAA/V4rHIw1FowvLoRSwACf+0sBAAGAjDbAUnlyAMAAoAMBYAPAAJxrP0qMSwGBjFLAUnmJBsAAoASBq4xhjG+NLwMAgL8AAAABA4xyjS8AAAACAgKMeQAAAIJsYAO9DACMkwAAAKzDYAPAAJxrAABcAT4DQCEcjKuBjKbAUnpfSAEAASsAwAD9XoymjLIASYy5HIzHFoy9LoYrwACf+kgBAAErAMAA/V4+AT0XjNguhisejOjAAPzhAAJgA70MYAPAAJxrAADAAJ/6Pz0cjRoWjREuhivAAJ/6gL8CAAKAjRvAUnpTgY0nwFJ6XwDAAPzvBsAAoAWBq43BjcaObQAAwABkawAAAAEDjdyObQAAAAICAo3yAAAAns1gA8AAn/YAjf4AAACBpmEDAmADvQxgA8AAnGtcAABcAT4BPRyOLS7AAGRswACf9QQABICORcBSexKBjkzAUnsgH45TlJYAAWADvQwAAC4AwACgBwbAAKAHgauOco53kUAAAMAAZGzAAJ/1AAAAAQOOjpFAAAAABAQEjqQAAACezWADwACf9gCOtgAAAIGmYQMCYAO9DGADwACca1wAjvMAAADAAGRtXQOUdgFgA70MAI8TAAAAnldgA8AAn/YAAFwBPgNJjyEhHI8vFo8lLoYrwACf+kgBAAErAMAA/V4+AT0cj0oWj0AuhivAAJ/6g/gBAAE0j1IDj1KP3AAAAAICAo9TAAAAgmxgA70MAI9dAAAAgpBgA8AAnGsAAGADwAD9DgE+A0mPbRyPfIKPccBSe7aDFwEAAYSPhcBSfBoAlIFKj5AAPz0cj6uCj6DAUnu2VgEAAYSPr8BSfBoAlII9HI/DgY/CwFJ7oCACAAKEj8TAUnwahY/OwFJ8JgAAAMAA/Pk/SY/pHI/9NQAAAAEAYAPAAJ/2AYCP7cBSe5IjHI/0hADAUnykSAEAASsAACsWj/SEAMBSfKTAAEuiwACgAAFgA8AAn/ZIAQABFpAALsAAS6LAAKAAAMAA/V4+AUqQEgA/SZAkIRyQLxaQKC6EUsAAn/tIAQABKwDAAP1ePgE9HJBHFpBALoRSwACf+8AAZGzAAJ/1BAAEgJBfwFJ7koGQZsBSe6CCkGnAUnu2g5B1wFJ7yQDAAKAHPgFAHJCpgJCjwFJ7kkgBAAErAMAA/V6Qo5CwASQABifAAGRuJ8AAZG8ckO2DkObAUnvJr9YBAAEnAADAAKALJ4CvJ8AAZHAckR+AkRnAUnuSr9YBAAEnAADAAKALBsAAoAmBq5FFkUqRrgAAwABkcQAAAAEDkVaRrgAAAAEBAZFcAAAAgaZhAwJgA70MYAPAAJxrXAAAXAE+AT0ckYsuwABkawIAAiuAkajAUn3TAMAAoAUGwACgCoGrkbORuJIpAACGLAAAAAEDkb+SKQAAAAEBAZHGAAAAgmxgA70MAABgA8AA+j8BPgJJkdYckeQWkdouhivAAJ/6SAEAASsAwAD9XkqR7QEqP0qR/wEckhAWkgYuhivAAJ/6h0cBAAGAkhzAUn4nAMAA/O0GwACgC4Grki6SNZLAAACv1gAAAAEDkkWSwAAAAAEBAZJNAAAAqEJgA8AA/esAAGADwAD96wE+A06SaJJrAACD5GADwAD+NQEfknHAAP5UAAAAAD0ckoUuwABi88AAn/UCAAKBkpfAUn64gJKbwFJ+nwDAAKAISpKoARySsoGSr8BSfrgjAAAAAMAA/k4GwACgCIGrksWSypW8AADAAGLzwACf9QAAAAEDktuVvAAAAAICApLpAAAAg+RgA8AA/jUAkvQAAACoQmADwAD96wAAXAE+Bz0ckwWAkwLAUn8ygooBAAEkkycDJ8AAZHIWkxsug8HAAP1kJ8AAZEEAwAD+ST0ckzGAky7AUn8ygooBAAEkk1MEJ4CvgZM8wFJ/QCfAAGRzFpNMLsAAZGbAAJ/1wACf+QDAAP5JSZNaIRyTZRaTXi7AAGRnwACf/UgBAAErAMAA/V4+AT0ck3mAk3bAUn8ygooBAAEkk7YFJ4CvgZOEwFJ/QCfAAGR0FpOrFpOkLsAAZGfAAJ/9g8HAAP1kJ4MhAMAA/kk/SZPDIRyT0BaTxy6ix8AAn/xIAQABKwDAAP1ePgE9HJPkgJPhwFJ/MoKKAQABJJQhBCeAr4GT78BSf0AnwABkdR6UBMAAnDQBAAEWlBYuosfAAJ/8AADAAP5JP0mULiEclDwWlDIuhivAAJ/6SAEAASsAwAD9Xj4CPRyUUICUTcBSfzKCigEAASSUbwMngK+BlFvAUn9AJ8AAZHYAwAD+ST0clIIWlHguhivAAJ/6g/gBAAE0lIoDlIqVIAAAAAICApSRAAAAns5gA70MAJSoAAAAgpBgA8AAnGsAAGADwAD9DgE+Aj0clLuAlLjAUn8ygooBAAEklNoFJ4CvgZTGwFJ/QCe9+IKU0sBSgNkng1UAwAD+ST0clOiAlOXAUn8ygooBAAEclPODlO7AUoDlr9YBAAEklRUCgZUHwFJ/QCfAAGR3AMAAnJMAwAD+SQDAAPz5P0mVLSEclTgWlTEuhFLAAJ/7SAEAASsAwAD9Xj4CPRyVTICVScBSfzKCigEAASSVaAMngK+BlVfAUn9AJ8AAZHgAwAD+ST0clXgWlXEuhFLAAJ/7wABi88AAn/UCAAKAlYrAUn8yJJWeAoGVkcBSf0AnwABkeQDAAKAIPz0cla6AlavAUn8ygooBAAEnmZcAwAD+SQbAAKAMgauVwZXUlkMAACMBapXCYAPAAP1RAgAAAQOV3JZDAAAAAAAAAGADwAD96wE+Ak6V7JXxAADAAGR6YAPAAP3rASMclfoWlfMuhFLAAJ/7SAEAASsAwAD9XieEPByWFBaWDS6EUsAAn/sjAAAAAMAAoAwBYAPAAP3rSpYkASSWPwQnmbYWli4uhivAAJ/6J8AAZHuAljrAUoIzAABSdyAAUndmAFJ3zABSeVMAUnozAFJ68ABSe2wAUn2xAFJ+BwBSfn8AUn8MAFKB/wBSgp0AAAAMAsAAoBGBq5aFlouezAPAAGR8AAABYAHAAP1RAAADBMAAoBOBq5bKltAYhIUAXQPAAPzaAmADvOVgA8AAnGsBKwTAAKAUgauW2ZbmGMAAY74AYAPAAPo/AATAAKAVgauXa5d3GMAAZDoAYAPAAPo/AAIFwACgHoGrl3yXfJfSAAAAA5eUl9IAAAAAAAAAYAPAAKARAT8DCADAAKAUKggAwACgFSoJAZd8wAD9ZwAAAAAFwACgH4Grl9eX15hzAMAAZH0AA5f8mHMAAAABAQGYFgAAAIPWYAPAAKARAABgA8AAoBEBPwMIAMAAoBQWmDuAmDXAUoOkwABjvsAAoBQIAMAAoBUWmGeAmGHAUoOkwABkOsAAoBUJAZfXwAD9ZwAAAAAFBsAAoBeBq5h4mICZIwQBli4AAAABA5idmSMAAAABAQGYtwAAAIPWYAPAAKARAABgA8AAoBEBPgJJmMQcmM6AmMjAUoQZSAEAASsAwAD9XkqY1wErP0qY6AEfmPPAAKAfAQABgJkZwFKEGQAGwACgGYGrmSiZLZn1AADAAGPFAAAAAQOZOJn1AAAAAgICmUUAAACElGADvOUAmVwAAACCkGADwACcawAAXAE+BEmZaBaZbC7AAGO+wACgFEqZewA/SZmHFpmLLsAAZDrAAKAVSpmZAD89IxyZrBaZpS6EhcAAoBNIAQABKwDAAP1eF5mlLoSFHpm0wAD84QACYAO85WADwACcawAAwACgEysBXQPAAPzaAmADvOVgA8AAnGs9HJnjFpndLoSFwACgE4C/AgACgJnkwFKEhoGZ7cBShJIAwAD87wbAAKAagauZ+poKml0AAJjGAAAAAQOaE5pdAAAAAQEBmiAAAACElGADvOUAAGADwACcawE+AUqaLQEjHJo7Fpo0LoSFwACgE0gBAAErAMAA/V4rHJpSFppMLoSFwACgE0sBAAGAmlPAUoVeAMAA/O4BYAPAAJxrBsAAoBuBq5pimmeavgAAg/gAAAABA5pumr4AAAABAQGadAAAAIGmYQMCYAO85WADwACca1wAAFwBPgE9NQAAAAEAXQPAAPzaAmADvOVgA8AAnGsBFpqoLoSFwACgEyMcmrCBAMBShfJIAQABKwAAKxyasIEAwFKF8oP4AQABgJq4wFKF1QDAAPz5AVwGwACgHIGrm0WbXp7KAADAAGPRAAAAAQObbp7KAAAAAwMDm34AAACrS2ADwABymwCbpwAAAMAAZH5gA8AAoBEAm8sAAADAAGR/YAPAAKARAABgA8AAoBEBPghAIRyb7YKb48BShoFIAQABKwDAAP1em+Ob9ABJnIkWnI0uwABjvsAAoBRKnJwBLj9JnK0WnLEuwABkOsAAoBVKnL8BLj9OnOqc9QAAwABkgGADwACgEQEjHJ0QFp0Jgpz/wFKGgYSFwACgE0gBAAErAMAA/V4ugp0hwFKGgQFgA8AAoBE9HJ07gZ0xwFKGcYP4AQABNJ1DA51DniYAAAACAgKdUAAAAISUYAO85QCdZwAAAIKQYAPAAJxrAABgA8AA/Q4BPgNOnYWdjwAAwABjjmADwACcawEcnZyDnZHAUobhmMYBAAGEnabAUoc9AMAAoBpJnbQcncKGnbjAUodiSAEAASsAwAD9XkqdywA/PRyd2S7AAGPFAgAChJ3lwFKHPRyd+xad9YCd7MBShmOFbcAAcqXAAGQkAgAChZ4OwFKHSYaeFMBSh2IAwAChOADAAKAZAMAAoBs9F54uLsAAY74iFp5IgZ4+wFKGccAAY77AAKAUARaeY4KeWcBShoHAAGO+wACgFMAAoBQ9F552LsAAZDoiFp6PgZ6FwFKGccAAZDrAAKAVARaeqYKen8BShoHAAGQ6wACgFcAAoBVKnrsBLgAAUoP5AFKEZABShT4AUoW1AFKGQQBSiF8AAAAFAsAAoCCBq58GnwyllQPAAGLkAAABXQHAAMDTAWADwACcawAAAgTAAKAigaufYp9sCYWTAF0DwAD8qQFgA8AAnGsABMAAoCOBq5+Tn5gJhV0AXQPAAPzaAmADwAD962ADwACcawACBcAAoDCBq5+cn5ygqAAAAAOfqqCoAAAAAgICn7AAAASFk10DwAD8qQFgA8AAnGsAn7wAAACFXVsAAGADwACgIAE+AkAcoCkWoB4uhZPAAKAiljYBAAE0oC8DoC+gVQAAAAEBAaBAAAAAgpBgA8AAnGsAAGADwAD6PwFKoEkBIRygToKgScBSiUZIAQABKwDAAP1eAMAA/HqgGaBWAEAcoHYWoG8WoGkuhV3AAKAjKcAA/P2WNgEAATSgfAOgfKCiAAAAAQEBoI0AAACCkGADwACcawAAYAPAAPo/AUqglgEhHKCbgqCWwFKJqEgBAAErAMAA/V4AwAD8eqBkoKMAAwgBwACgIoAAwFKI/QgAwACgIyaf1gEjIhyf34Gf2cBSiRJIAQABKwDAAP1eASaf8AEWn/CBn+rAUokSgVUAYAPAAPo/ap/7XQPAAPzaAmADwAD962ADwACca8ABbHmBoAbAUokSAVtdA8AA/NoCYAPAAP3rYAPAAJxrCQGfnMAAwPUAAAAABcAAoDGBq6CtoK2g+wCFngADoMGg+wAAAAAAAABgA8AAoCABPwMIAMAAoCJqoNldA8AA/KkBYAPAAJxrwAFsVggAwACgI2qg810DwAD82gJgA8AA/etgA8AAnGvAAWx5CQGgrcAAwPUAAAAACQbAAKAlgauhAKEUoT4BAGEBaqEBYAPAAP1RAgAAAQOhG6E+AAAAAAAAAGADwAD8BQFKoR4BHKEwFqEpFqEeLoWTwACgImHAAPzYZAEAARahOBahMi6FXcAAoCNhwAD8/gDAAP0qBsAAoCaBq6FDoW2hmQEAXAFqoURgA8AA/VECAAABA6F2oZkAAAAAAAAAXQPAAPyiAWADwACcawFKoXkBH6F9wACgPwEAAS4ABsAAoCmBq6GeobGh7QAAIwFqoZ9gA8AA/VECAAABA6G5oe0AAAAAAAAAYAPAAP3rAUqhvwEkoe0FJ8AAZIEWodAuhZPAAKAiJ8AAZIIWoeUuhV3AAKAjJ8AAZIMGwACgKoGrofKiDKOWAwBIAWqh82ADwAD9UQIAAAEDog6jlgAAAAEBAaIPAAAAg9ZbAABgA8AA+j8BPgZJohwhHKIyFqIrFqIgLoWTwACgImHAAPzYSAEAARaiRhaiO4CiNcBSjAeFkwBhAADAAP0oSqJOASo/SaJgIRyicRaiahaiZC6FXcAAoCNhwAD8/kgBAAEWooAWonqAonTAUowHhV0AYQAAwAD9KEqiiAEqP0WimgGio6KlAABiYAPAAPwFAZMBHKKsgaKqwFKMkmMBAAEWorkWoq4uhZPAAKAiYcAA/NgAwAD9MgGJosHAUoySHKLCgaLBwFKMkmQBAAGUAMAA/So+AUmiziEcouAcotwWotIuhZPAAKAiSwEAAYGi3cBSjJIAwAD8uEgBAAEcovMWoumAouPAUowHhZMASwEAAYGi9MBSjJIAAADAAP1eSqL4ASo/TqMUoxsAAIF2YAPAAPo/ASk9HKMtFqMnLoVdwACgI4P4AQABNKM1A6M1o34AAAACAgKjNgAAAIC9YAPAAP3rAKM8AAAAgpBgA8AAnGsAAGADwAD9DgE+AUmjSiEco2Aco1kWo1SAo07AUowHhV0ASwEAAYKjWsBSjWcAAEgBAAGDo2PAUo11AMAA/V49iaNpwFKNNio/AMAA/PlKo4UBgaOMwFKNNgbAAKAngaujm6Ovo/ABAIPBAWqjnGADwAD9UQIAAAEDo7ij8AAAAAAAAABgA8AA/AUBSqO7ATCjux+jxcAA+5cBAAEnwABkhAAGwACgK4Gro/Wj+qQxAADAAGM1AAAAAQOkCKQxAAAAAAAAAGADwAD6PwFKpA4BIhakGRakDi6Fk8AAoCKBVcAA/IsAFqQqFqQkLoVdwACgI4FVwAD8/wbAAKAsgaukNqRHpKkAAIP4AWqkN2ADwAD9UQIAAAEDpE6kqQAAAAEBAaRUAAAAgaZhAwFgA8AAnGtcAABcAT4CPRykfhakcy6Fk8AAoCKD+AEAAYCkhsBSjqQAwAD8dz0cpJsWpJQWpI4uhV3AAKAjKcAA/P2D+AEAAYCko8BSjqQAwAD8dwbAAKAtgaukrqS/pSAAAJY2AWqkr2ADwAD9UQIAAAEDpMSlIAAAAAEBAaTKAAAAgaZhAwFgA8AAnGtgA8AA+j8AAGADwAD6PwE+AUqk6QEiHKT7FqTwLoWTwACgIpY2AQABgKUBwFKPKwDAAPx6ABylFBalDRalBy6FXcAAoCMpwAD8/ZY2AQABgKUawFKPKwDAAPx6BsAAoC6Bq6UlpTalkwAAgxcBaqUmYAPAAP1RAgAAAQOlPqWTAAAAAQEBpUYAAACCkGADwAD9UQAAYAPAAPo/AT4BSqVSASIcpWQWpVkuhZPAAKAigxcBAAGApW3AUo/AAMAA/HYBHKV8FqV2LoVdwACgI8AAQzQBAAGApYrAUo/AAMAA/OwAAFKK1QBSizoAUouCAFKL3gBSjdsAUo4kAFKOegBSjwEAUo+WAFKQHAAAAAkCwACgMoGrpZilnqhJA8AAZIUAAAFgAcAA/VEAAV0BwAD8ogFgA8AAnGsDBMAAoDSBq6X+pggJhZMAXQPAAPyiAWADwACcawAEwACgNYGrpiymMQmFXQBdA8AA/KIBYAPAAJxrAATAAKA3gaumOqZTGMAAZIbAAJ/1AGADwAD6PwEpAQXAAKA/gaumWKZYpukAAAADpm6m6QAAAAEBAaZ+AAAAwABkh2ADwACgIAAAYAPAAKAyAT8DCADAAKA0FqaxFqamgKadwFKQ54WTwACgIlzAAPyJCADAAKA1FqbhFqbaFqbUgKbLwFKQ54VdwACgIynAAPz9XMAA/IkJAaZYwAD9ZwAAAAADBsAAoDqBq6bupwynTQEAwABkiMAAn/UAAAABA6cdp00AAAAAAAAAXQPAAPyiAWADwACcawFKpyYBIxanJi7AAGSGwACf9cAAoDcWpzsuhZPAAKA0FqdILoVdwACgNQFdA8AA/KIBYAPAAJxrBsAAoDuBq6dSp3KnlQEAXgFqp1NgA8AA/VECAAABA6d6p5UAAAAAAAAAYAPAAJxrAUqnfQEWp44Wp30uwABkiMAAn/XAAKA6XsAA/KYGwACgPYGrp5qnq6hHAABdAWqnm2ADwAD9UQIAAAEDp7OoRwAAAAAAAABgA8AA+j8BPgNJp7wiFqfALsAAZIbAAJ/1wACgNwAcp+EWp9YuhZPAAKA0XQAAAADAAPykPgFKp/UBKT89F6gMLsAAZIbAAJ/1KsAAoDdKqCwBHKg5FqgzLoVdwACgNV0AAAAAwAD8pAAAUpFSAFKRvgBSkgsAUpKdAAAAAwLAAKBAgauog6iJwABRjQPAAGSJAAABYAHAAP1RAAABBMAAoEOBq6ivqLYJwABMH8AAn/UAYAPAAJ/2AAQFwACgUoGrqLuou6jqAAAAA6jIqOoAAAAAAAAAYAPAAKBAAT8CCADAAKBDH6jbwACgDgAAAAAJAai7wAD9ZwAAAAAFwACgU4GrqO+o76lRAJYuAAOpAalRAAAAAQEBqRAAAACD1mADwACgQAAAYAPAAKBAAT8CCADAAKBDH6ktwACgDgEAAAGEUhapSYCpQ8BSk03AAEwfwACf9cAAoEMJAajvwAD9ZwAAAAAFwACgVIGrqVapVqnfAKLHAAOpbKnfAAAAAgICqXsAAACD1mADwACgQACpjgAAAJn/YAOCUgAAYAPAAKBAAT8CCADAAKBDH6mrwACgDwIAAYGpwsBSk8QBhFIWqdeAqdHAUpO2wABMH8AAn/XAAKBDCQGpVsAA/WcAAAAABcAAoFWBq6nkqeSqTwDAAGQ4AAOp/KpPAAAAAQEBqgsAAACD1mADwACgQAAAYAPAAKBAAT8CCADAAKBDH6oowACgEAEAARaqR4CqQcBSlDTAAEwfwACf9cAAoEMACQGp5MAA/WcAAAAACwbAAKBFgauqVKpkqq0AAK83AAAAAQOqZ6qtAAAAAgICqncAAACrS2ADwABymwCqhwAAAJ7OYAO9DAAAYAPAAJxrAT4BSqqUARyqohaqmy7AAEwfwACf9cAAoENLAQABgaqjwFKUrgDAAKADBsAAoEaBq6qyqreutgAArDIAAAABA6q9rrYAAAAGBgaqzQAAAKtLYAPAAHKbAKrdAAAAns5gA70MAKr0AAAAgpBgA8AAnGsAqwgAAACD7mADgksAqxcAAACFvGADwABiZgCrMQAAAKLHYAPAAKBAAABcAT4BSatBIRyrToWrRcBSlU1IAQABKwDAAP1ePgNOrI6slwAAg7lgA8AAnGsBHKywFqyqFqyihayZwFKVTcAATB/AAJ/1wACgQ4RSwACf+0sBAAGBrLHAUpUZAMAAoANJrL8hHKzMhqzDwFKVe0gBAAErAMAA/V4+A06s76z3AADAAGA+YAPAAJxrARytCBatAoCs+cBSlQuFbcAAcqXAAGPgBAADFq0yFq0qha0hwFKVTcAATB/AAJ/1wACgQ6LHwACf/IGtPMBSlRmGrUPAUpV7AcAAY3sWrXEWrWmFrWDAUpVNwABMH8AAn/XAAKBDwABje8AAn//AAKE5Tq2RrZsAALqdYAPAAJxrARytuBatsoCtqcBSlQuFbcAAcqXAAGPhAwADga3EwFKVGSatywGHrcvAUpXXYAPAAJ5dgq3UwFKVJQDAAKE8PRyt+hat9Bat7IWt48BSlU3AAEwfwACf9cAAoEOEUsAAn/uAvwIAAoGt+8BSlRkUrgTAUpZaCAAAwACgBD89HK50Fq5tLsAATB/AAJ/1wACgQ4C/AgACga51wFKVGYKufsBSlSUAwACgBD4BPRyunhauly7AAEwfwACf9cAAoEOAvwIAAoGun8BSlRmCrqjAUpUlAMAAoAQGwACgR4GrsAOwEbOWAADAAGQpAAAAAQOwGrOWAAAAAwICsCoAAACrS2ADwABymwCwQgAAAIPWYAPAAKBAAAGwVQAAAMAAZD1gA8AA+j8BarBeYAPAAPo/AGADwACgQAE+BU6werCBAACWY2ADwACf9gEcsIsWsIMuwABMH8AAn/XAAKBDwABkagEAARawnoGwmMBSl2/AAEwfwACf9cAAoEMAwACgAkAhHLDDg7C8wFKXokgBAAErAMAA/V6wvLDKASQABifAAGSKJ8AAZIscsQIWsPouwABMH8AAn/XAAKBDr9YBAAEng9wAwACgCyeAryfAAGSMHLE4FrEwgbEqwFKXb8AATB/AAJ/1wACgQ6/WAQABJ4PcAMAAoAtAIhyxboOxZ8BSl6JIAQABFrFxLsAATB/AAJ/1wACgQwDAAP1eARyxjhaxhBaxfC7AAEwfwACf9cAAoEOGK8AAn/pIAQABKwDAAP1esWexlQEkAAYnwABkjSfAAGSLHLHTg7HMwFKXoq/WAQABJ4PcAMAAoAsngK8nwABkjByyAxax+y7AAEwfwACf9cAAoEOv1gEAASeD3ADAAKALPRyyMBayKIGyIsBSl2/AAEwfwACf9cAAoEPAAGRrAgACg7JHwFKXojSyVwOyV7OAAAAAAgICsl4AAACezmADvQwAsnUAAACCkGADwACcawAAYAPAAP0OAT4ETrKTspoAAMAAZI5gA8AAnGsBHLKjFrKcLsAATB/AAJ/1wACgQ0sBAAGEsqTAUpkvAMAAoANJsrIcsr2GsrbAUplUSAEAASsAwAD9XkqyxgA/SbL8HLMFhbMAwFKZO0gBAAGGswjAUplUAMAA/V5KsxAAPz0csyUWsx4uwABMH8AAn/XAAKBDgL8CAAKEsybAUpkvI4KzOcBSl36Fs0PAUpk7HLNZFrNTgLNKwFKXYYVtwABypcAAZCQCAAKGs2zAUplUhbN0wFKZOwDAAKE4AWADwACcawDAAKAEAMAAoAVKs4cBLgbAAKBIgau0IbQvurEAAMAAY9EAAAABA7Q/urEAAAADAwO0TwAAAKtLYAPAAHKbALRtAAAAwABkO2ADwACgQAC0hwAAAMAAZDxgA8AAoEAAAGADwACgQAE+CUAhHLSrgrSgwFKaeEgBAAErAMAA/V60oLSyAE+0urS/AAABwABkj2EDAWADvQxcAAO0ybZSAAAAAQEBtNAAAACezmADvQwAAFwBPgVOtO+09gAAwABkjmADwACcawEctP8WtPguwABMH8AAn/XAAKBDSwEAAYS1AMBSms0AwACgA0m1Dhy1GYW1EsBSmt9IAQABKwDAAP1eSrUiAD9OtUC1SQAAwABkkGADwACcawEctV0WtVaCtUvAUpp4wABMH8AAn/XAAKBDSwEAAYS1XsBSms0AwACgA061fLWFAACsTGADwACcawEctZkWtZKBtYfAUppowABMH8AAn/XAAKBDSwEAAYS1msBSms0AwACgA0m1qBy1tYe1rMBSm2tIAQABhrW4wFKbMADAAP1ePgE9HLXTFrXMLsAATB/AAJ/1wACgQ4C/AgAChLXUwFKazYe13cBSm2sAwACgBD4BPRy2BRa1/i7AAEwfwACf9cAAoEOAvwIAAoS2BsBSms0cth4WthiAtg/AUppahW3AAHKlwABkJAIAAoe2McBSm2uGtjvAUpswAMAAoTgAwACgBE62Z7ZuAACWY2ADwACf9gEctngWtnAuwABMH8AAn/XAAKBDwABkagEAARa2kIG2hcBSmmjAAEwfwACf9cAAoEMAwACgAkAhHLa1hLauwFKcQ0gBAAErAMAA/V62rra8ASQABifAAGSKJ8AAZIsctvQWtuwuwABMH8AAn/XAAKBDr9YBAAEng9wAwACgCyeAryfAAGSMHLcvFrcngbccwFKaaMAATB/AAJ/1wACgQ6/WAQABJ4PcAMAAoAtAHLeHHLdmFrdeLsAATB/AAJ/1wACgQ8AAZGoBAAEWt36Ct3PAUpp4wABMH8AAn/XAAKBDAMAAoAJIAQABhLeKwFKcQwDAAP1et163kAEkAAUnwABkkSfAAGSLHLfJhLfCwFKcQ6/WAQABJ4PcAMAAoAsnwABkkjUAAAABAGADwACf9gEct/kWt/EuwABMH8AAn/XAAKBDwABkagEAARa4EYK4BsBSmnjAAEwfwACf9cAAoEMAwACgAiMcuBuFAMBSnXVIAQABKwAAKxy4G4UAwFKdda/WAQABJ4PcAMAAoAsBYAPAAP3rQCIcuFGEuErAUpxDSAEAARa4VC7AAEwfwACf9cAAoEMAwAD9XgEcuHEWuGcWuF8uwABMH8AAn/XAAKBDhivAAJ/6SAEAASsAwAD9XrhKuHgBJAAJJ8AAZI0nwABkkxy4u4S4tMBSnEOv1gEAASeD3ADAAKALJ4CvJ8AAZIscuOsWuOMuwABMH8AAn/XAAKBDr9YBAAEng9wAwACgCyeAryfAAGSMHLkmFrkegbkTwFKaaMAATB/AAJ/1wACgQ6/WAQABJ4PcAMAAoAs9HLlYFrlQgblFwFKaaMAATB/AAJ/1wACgQ8AAZGsCAAKEuW/AUpxDNLl3A7l3uagAAAACAgK5fgAAAJ7OYAO9DAC5hQAAAIC1YAPAAJxrAABgA8AA/Q4BPgE9HLmag7mQwFKasCABAAGFuZvAUp7mAAAAwACgBT0cucIWubqCua/AUpp4wABMH8AAn/XAAKBDwABkawIAAoS52cBSnEM0ueEDueG6mwAAAAICArnoAAAAns5gA70MALnvAAAAgLVgA8AAnGsAAGADwAD9DgE+AUm6WyEcunMWumuBumDAUppowABMH8AAn/XAAKBDhiwBAAGFunvAUp9dAMAAoAo9HLqNg7qDwFKasCABAAGFuo7AUp9dAAA/AMAAoAVKuqIBLgbAAKBJgau+hL6SwABIPgAAwABj1AAAAAEDvqLAAEg+AAAAAwICvrkAAACrS2ADwABymwC+2wAAAFJdA8AA/GcBYAPAAKBAAAG+8QAAAMAAY91gA8AA+j8Bar8AYAPAAPo/d2ADwACgQAE+B06/Fb8eAACix2ADgksBFr8oFr8gLsAATB/AAJ/1wACgQ6LHwACf/E6/8r/5AADAAGSUYAPAAJ/2ASMhHMAAQASDv/vAUqA/SAEAASsAwAD9Xh/AAEAawACgDwIAAYPAAEAxwFKgPwGEUhbAAEBDLsAATB/AAJ/1wACgQx/AAEBawACgDgEAAAGEUhbAAEBwLsAATB/AAJ/1wACgQwFgA8AAn/ZOwABAicAAQJQAAMAAZG1dA8AA/ZwBYAO9DAEfwABAmpSWAAFgA70MAABGwABA0MAAQPjAAEDjAAAAVWADwACgQACBwABA7sBSoAY+BE7AAEEOwABBFQAAlmNgA8AAn/YBHMAAQR8WwABBFy7AAEwfwACf9cAAoEPAAGRqAQABFsAAQTSGwABBLMBSoRTAAEwfwACf9cAAoEMAwACgAkAhHMAAQV2HwABBVsBSoS9IAQABKwDAAP1ewABBVsAAQWQBJAAGJ8AAZIonwABkixzAAEGgFsAAQZguwABMH8AAn/XAAKBDr9YBAAEng9wAwACgCyeAryfAAGSMHMAAQdoWwABB0obAAEHKwFKhFMAATB/AAJ/1wACgQ6/WAQABJ4PcAMAAoAtAIhzAAEIUh8AAQg3AUqEvSAEAARbAAEIXLsAATB/AAJ/1wACgQwDAAP1eARzAAEI0FsAAQioWwABCIi7AAEwfwACf9cAAoEOGK8AAn/pIAQABKwDAAP1ewABCDcAAQjsBJAAJJ8AAZI0nwABkkxzAAEKCh8AAQnvAUqEvr9YBAAEng9wAwACgCyeAryfAAGSLHMAAQrQWwABCrC7AAEwfwACf9cAAoEOv1gEAASeD3ADAAKALJ4CvJ8AAZIwcwABC7hbAAELmhsAAQt7AUqEUwABMH8AAn/XAAKBDr9YBAAEng9wAwACgCz0cwABDHxbAAEMXhsAAQw/AUqEUwABMH8AAn/XAAKBDwABkawIAAofAAEM2wFKhLzTAAEM+A8AAQz7AAEVTAAAAAgICwABDPwAAAJ7OYAO9DADAAENGAAAAwABjjmADwACcawAAYAPAAP0OAT4FTsAAQ2vAAENyAADAAGSOYAPAAJxrARzAAEN6hMAAQ3TAUqBmSwEAARTAAEN7wFKjNAgAAMAAoANJwABDixzAAEOWFMAAQ4/AUqNfCgBIAQABKwDAAP1eSsAAQ58AP07AAEO/AAAAqPpgA8AAnGsAScAAQ9AhHMAAQ+CFwABD1cBSoOKDFwEAARTAAEPpwFKjNAgAAMAA/ag+Aj0VwABD/cBSo70LHMAARBYWwABEEIDAAEQHwFKf+IVtwABypcAAY+AEAAMWwABEOITAAEQxwFKgZqLHwACf/BTAAERCwFKjNAgAFMAAREnAUqNCCQABwABjexbAAERwhMAARGnAUqBmwABje8AAn//AAKE5PRzAAESNhcAARILAUqDiVgEAARTAAESRwFKjNAgAAMAA/ak+AT0VwABEtMBSo70LHMAARM0WwABEx4DAAES+wFKf+IVtwABypcAAY+EDAAMUwABE2cBSozQIACbAAETgARTAAETgwFKjXwoAYAPAAJ5dFMAAROjAUqNCCQAAwAChPEnAAEUGIRzAAEUSFMAARQrAUqO9CwBIAQABFMAARRXAUqNfCgAAwAD9Xj4BPRzAAEUvhMAARSnAUqBmgL8CAAIUwABFMMBSozQIABTAAEU5wFKjvQsAAMAAoAQ/AMAAoAVJwABF64LAAEXvwFKgGz4BRsAARgbAAEYpwABGEQAAAIJsYAO9DACFwABGHcBSoOI+Ak7AAEZDwABGUAAAwABPlGADwACcawEcwABGWRbAAEZSLsAATB/AAJ/1wACgQ0sBAAGGwABGWsBSpWgAwACgA0nAAEZtIRzAAEZ+h8AARnHAUqWCSAEAASsAwAD9Xj4BPRzAAEaZhMAARpPAUqBmgL8CAAKGwABGmsBSpWgcwABGxBbAAEavgMAARqbAUp/4hW3AAHKlwABj4QMAA4bAAEbQwFKlaCbAAEbgARzAAEbghMAARtrAUqBmSwEAAYbAAEbhwFKlaADAAKADYAPAAJ5dh8AARuzAUqWCAMAAoTwAwACgBD8/PRzAAEeDhMAAR3zAUqBmwABkawIAAoTAAEeawFKgZjTAAEeqA8AAR6rAAEgoAAAAAgICwABHsQAAAIJsYAO9DADAAEfLAAAAgpBgA8AAnGsAAGADwAD9DgE+AT0cwABH4BbAAEfZLsAATB/AAJ/1wACgQ4C/AgAChsAAR+HAUqaaHMAAR/wWwABH9oDAAEftwFKf+IVtwABypcAAX+UDAAODwABICMBSoD+GwABIEsBSppomwABIHAGHwABIHMBSpqhgA8AAnl0AwAChOwDAAKAEAMAAoAVKwABILwEuBsAAoEqBq8AASL/AAEjEwABM7AAAwABj2gAAAAEDwABIzMAATOwAAAACAgLAAEjcAAAAq0tgA8AAcpsAwABI/gAAAFJdA8AA/GcBYAPAAKBAAABgA8AA+j8BPgNOwABJE8AASRsAAK6UYAPAAPo/ASo9HMAASTGBwABJKMBSp4GD+AEAATTAAEk5A8AASTnAAEzTAAAAAQEBwABJSAAAAIPWYAPAAKBAAABgA8AA/Q4BPgROwABJZcAASWwAAJZjYAPAAJ/2ARzAAEl2FsAASW4uwABMH8AAn/XAAKBDwABkagEAARbAAEmJg8AASYPAUqfewABMH8AAn/XAAKBDAMAAoAJAIRzAAEmyhMAASavAUqf5SAEAASsAwAD9XsAASavAAEm5ASQABifAAGSKJ8AAZIscwABJ9RbAAEntLsAATB/AAJ/1wACgQ6/WAQABJ4PcAMAAoAsngK8nwABkjBzAAEotFsAASiWDwABKH8BSp97AAEwfwACf9cAAoEOv1gEAASeD3ADAAKALQCIcwABKZ4TAAEpgwFKn+UgBAAEWwABKai7AAEwfwACf9cAAoEMAwAD9XgEcwABKhxbAAEp9FsAASnUuwABMH8AAn/XAAKBDhivAAJ/6SAEAASsAwAD9XsAASmDAAEqOASQACSfAAGSNJ8AAZJMcwABK1YTAAErOwFKn+a/WAQABJ4PcAMAAoAsngK8nwABkixzAAEsHFsAASv8uwABMH8AAn/XAAKBDr9YBAAEng9wAwACgCyeAryfAAGSMHMAASz8WwABLN4PAAEsxwFKn3sAATB/AAJ/1wACgQ6/WAQABJ4PcAMAAoAs9HMAAS24WwABLZoPAAEtgwFKn3sAATB/AAJ/1wACgQ8AAZGsCAAKEwABLhcBSp/k0wABLjQPAAEuNwABMywAAAAICAsAAS44AAACezmADvQwAwABLlQAAAMAAY45gA8AAnGsAAGADwAD9DgE+BE7AAEu6wABLwQAAwABkjmADwACcawEcwABLyhbAAEvDLsAATB/AAJ/1wACgQ0sBAAGFwABLy8BSqf4AwACgA0nAAEvbHMAAS+aHwABL38BSqilIAQABKwDAAP1eSsAAS+8AP07AAEwPwABMFwAAqPpgA8AAnGsBHMAATDQWwABMLoDAAEwlwFKncYVtwABypcAAY+EDAAOFwABMQMBSqf4mwABMRwGHwABMR8BSqilgA8AAnl2GwABMT8BSqgwAwAChPEnAAExjIRzAAExvFMAATGfAUqqMCABIAQABh8AATHLAUqopAMAA/V4+Aj2KwABMhsBSp6IpPRzAAEynFsAATKAuwABMH8AAn/XAAKBDgL8CAAKFwABMqMBSqf4UwABMscBSqowIAADAAKAEPwDAAKAFAMAA/HdKwABM2gGCwABM4cBSp6IGwACgS4GrwABM8cAATPbAAE4tAADAAFRNAAAAAQPAAEz/wABOLQAAAAICAsAATQ8AAACrS2ADwABymwDAAE0hAAAAvqBgA4JLAABcAT4BPRzAAE01FsAATS0uwABMH8AAn/XAAKBDwABkcQEAATTAAE1CA8AATULAAE4oAAAAAgICwABNSQAAAIJsYAO9DADAAE1jAAAAgpBgA8AAnGsAAGADwAD9DgE+Ak7AAE2BwABNiQAAqPpgA8AAnGsBHMAATaQWwABNnoDAAE2VwFKrnIVtwABypcAAZJUEAAOBwABNtMBSq6yCwABNusBSq/KDwABNxMBSrAABwABjeyrAAKE6ScAATd8hHMAATeuEwABN48BSrBtIAQABg8AATe7AUqwAAMAA/V4+AT0cwABOBRbAAE3+LsAATB/AAJ/1wACgQ4C/AgACgsAATgbAUqvyhMAAThLAUqwbAMAAoAQ/AMAAoAkGwACgTIGrwABOMsAATjfAAE9aAADAAFRjAAAAAQPAAE4+wABPWgAAAAICAsAATk4AAACrS2ADwABymwDAAE5gAAAAvqBgA4JLAABcAT4BPRzAAE50FsAATmwuwABMH8AAn/XAAKBDwABkcQEAATTAAE6BA8AAToHAAE9VAAAAAgICwABOiAAAAIJsYAO9DADAAE6iAAAAgpBgA8AAnGsAAGADwAD9DgE+Ak7AAE7AwABOyAAAqPpgA8AAnGsBHMAATuMWwABO3YDAAE7UwFKtAYVtwABypcAAX+UDAAOBwABO78BSrRGCwABO9cBSrVcmwABO/wGDwABO/8BSrWVgA8AAnl0AwAChO0nAAE8MIRzAAE8YhMAATxDAUq2ASAEAAYPAAE8bwFKtZQDAAP1ePgE9HMAATzIWwABPKy7AAEwfwACf9cAAoEOAvwIAAoLAAE8zwFKtV4TAAE8/wFKtgADAAKAEPwDAAKAJBsAAoE2Bq8AAT1/AAE9mwABP8QAAr9YAAAABA8AAT3bAAE/xAAAAAQEBwABPfgAAAKhCYAPAAP3rAABgA8AA/esBPgNOwABPmcAAT5wAAIPkYAPAAP41AR/AAE+iwAD+VAAAAAA9HMAAT7YuwABi88AAn/UCAAKBwABPyMBSroaAwABPzMBSrmsAwACgT0rAAE/ZARzAAE/jgcAAT+DAUq6GIwAAAADAAP5OBsAAoE+Bq8AAT/bAAE/7wABQzAAAwABi88AAn/UAAAABA8AAUAzAAFDMAAAAAgICwABQGgAAAIPkYAPAAP41AMAAUCUAAACoQmADwAD96wAAXAE+BD0cwABQNoDAAFAzwFKvHIKKAQABJMAAUFgDJ8AAZJYWwABQTC6DwcAA/WQnwABkQQDAAP5JPRzAAFBigMAAUF/AUq8cgooBAAEkwABQfgMngK+BwABQbcBSrywnwABkQgDAAP5JPRzAAFCNFsAAUIUuwABMH8AAn/XAAKBDwABi88AAn/UCAAKAwABQn8BSrxwkwABQsgKBwABQpsBSrywnvfgAwACgCD0cwABQvIDAAFC5wFKvHIKKAQABJ8AAZEMAwAD+SQbAAKBQgavAAFDRwABQ5MAAUYsAACMBasAAUNJgA8AA/VECAAABA8AAUOzAAFGLAAAAAAAAAGADwAD96wE+BU7AAFECwABRBQAAg+RgA8AA/jUBH8AAUQvAAP5UAAAAAD0cwABRIoDAAFEfwFKwR4KKAQABJ8AAZJYAwAD+ST0cwABRQoDAAFE/wFKwR4KKAQABJMAAUVkCJ8AAZEQWwABRUS7AAEwfwACf9cAAoEMAwAD+ST0cwABRY4DAAFFgwFKwR4KKAQABJ4MhAMAA/klKwABRcwEcwABRfYDAAFF6wFKwRyMAAAAAwAD+TgAAUpSAAFKU6wBSlz8AUpo4AFKf0gBSp0UAUqtwAFKs1QBSrkEAUq7sAFKwBwBSsPQAAAALAAABgasAUrErAFJy3QBSgtYAUoh8AFKQSQBSkrIAUrEpAAAABQBSsSsAAAAAAAIEwACgVsAAZJeBrAAABoEGAAC37AAAgSUAALysAACBSQAAwABLUgABAQGkpoF7AACB4AABAQGXH4GjAADAALNpAACBvgAAwACcZgAAAAAAAQLAAKBagayIl4idk+sDwABkmAAAAWABwACzbgAAAgTAAKBcgayJD4k6GMAAT5YAXQPAAP2cAWADwACcawEfiSGUlgABYAPAAJxrAAAEwACgXYGsiUOJXhjAAE+VAGADwAD6PwEqAQXAAKBkgayJY4ljiagAAAADiXSJqAAAAAICAol1AAAAwABPrVsAiYEAAACrS1sAAGADwACgWgE/AQkAiY3AALOhAgACJomTAYCJk8BSsilgA8AAnGsmiZ8BgYmfwFKyNGADwABymwAEBsAAoF+BrIqIio2MCwAAgpsAAAABA4qQjAsAAAAAAAAAYAPAAPo/AT4DPRyKmS7AAEoqAAAAAMAAs39OiryKwQAAg1tgA8AAne8BJoq8ARaKwy7AAE+twACzcGADwACd70mK0xaK1y7AAE+nwACzej4DSYryIiEWivcuwABPlcAAoF0AHIsiFosTgIsOwFKyssAAY1fAAJ30SAEAASsAwAD9KD4BPReLOoCLNcBSsrLAAGNXFotQgItLwFKyssAAVDfAAJ3zwACd9D89HItzgItuwFKyssAAY1UBAAEWi4cuwABjVMAAs3gAwACei0qLmQEpPgM9F4u5LsAAT5UpwACgXT0Xi9suwABPlivAAKBcSov1ASoGwACgYIGsjBCMHIyNAADAAGNAAWqMEWADwAD9UQIAAAEDjD+MjQAAAAEBAYxfAAAAgVRgA8AAnaAAAFwBPgE9HIxrLsAAZFMBAAEnwABkVADAALOABsAAoGGBrIySjJ6N6gAAwABjKQFqjJNgA8AA/VECAAABA4zAjeoAAAABAQGM3wAAAIFUYAPAAJ12AABbAT4DPR2M8cAAYykBAAGAjRTAUrQNAMAAs5FOjSyNMwAAwABkVWADvNMBFo06gI01wFK0DcAAT6/AAJ14SY1NIhyNdRaNZhaNWhaNUS6rS8AAs3Gk38AAcqCzQMAATTOx7gEAAYGNf8BStDgAuUsAHI2eFo2ZgY2SwFK0OIC9vK9IAQABao2tYAPAAP3rwADudADAAP36PgE9HI25LsAAZFMBAAEkjd8CJ8AAZFYWjdSAjc/AUrQNo8jAAJ1zAMAAs4A/BsAAoGKBrI3vjfuT6QAAwABjPAFqjfBgA8AA/VECAAABA44ek+kAAAABAQGOPgAAAIFUXQPAAJ2HAVsAAFwBPgQ9HY5QwABjPAEAAYCOdMBStQwAwACzmk6OiI6RAACk8WADwABLZAEWjpiAjpPAUrUMpPHAAJ1qTo6tjroAALseYAPAAP3rARaOxYGOvMBStTmAvcAAS3JJjs8cjt8WjtMuwABkUsAAs3lIAQABFo7ngI7iwFK1DIV/wACdjQDAAP1ePgNJjvkhHI8RGo7+wACgWIMXAQABgo8awFK1WQDAAP2oPgFJjzMWj0CBjzfAUrU5sqDAAEt2PgJOj1iPaQAAwABkmWADwAD8BQEWj4UWj3oWj3CAj2vAUrUMW8AAnWyFk8AAoCJhwAD82EmPlxyPqIKPm8BStVlIAQABJ1YAwAD9+j4BSY/AHI/Vg4/EwFK13EgBAAGUAMAA/Sg+AT0cj/cWj+suwABPlsAAoFxWAQABHJAUFpAKFpAAgI/7wFK1DFvAAJ1shZPAAKAiSwEAAZMAwAD8uADAAP2pP0mQORyQSoKQPcBStVlIAQABJ57VAMAA/fo+AUmQZRyQeoOQacBStdxIAQABlQDAAP0oPgE9HJCcFpCQLsAAT5bAAKBcVgEAARyQuRaQrxaQpYCQoMBStQxbwACdbIWTwACgIksBAAGUAMAA/LgAwAD9qT8+Aj0ckOwuwABkUwEAASfAAGSaAMAAs4BKkR4ASZFBFpFOgZFFwFK1ObbTwABLeT4BPRyRchaRZi7AAE+WwACgXFYBAAEckY8WkYUWkXuAkXbAUrUMW8AAnWyFk8AAoCJLAQABlADAAPy4AMAA/alJkaQhFpGygZGpwFK1ObbXwABLeD4CPRyRxy7AAGRTAQABJ8AAZJoAwACzgEqR9wA/P0mSFyEckjoakhzAAKBZgxcBAAGCkkPAUrVZAMAA/ag+AT0XklwuwABPlSnAAKBdP0mShiIckpeCkorAUrVZSAEAASdhAMAA/foAFpKvgZKmwFK1OYU1wABLdT4CPReSwy7AAE+VKcAAoF09HJLzFpLnLsAAT5bAAKBcVgEAARaTBhaTABaS9y6rS8AAs3GFbcAAcqWFcMAAoQYAwAD9qT9JkyQiFpMxgZMowFK1ObKgwABLdgAiFpNJgJNEwFK1DMAAT7rAAJ2bARyTgxaTc4CTbsBStQzAAE+8wACdnIHUAQABNJOHA5OHk6cAAAABAQGTiAAAAJYmYAO80wAAYAPAAPo/AUqTlAEhFpOdg5OVwFK4hLLBvNsAwAD8fD4CPRyTsy7AAGRTAQABJ8AAZFQAwACzgEqT2QA/AABSsnYAUrOMAFKz4QBStOAAUrjNAAAABAIEwACgWIGsgqOFvgTAAGSbAF0DwAD9nAFgA8AA/esBHoK8wADBGQEBYAPAAP3rAWqCzV0DwAD8qQFgA8AA/evAAWz7AATAAKBZgayFzYiUBMAAZJ4AXQPAAP2cAWADwAD96wEehfHAAMEZAQFgA8AA/esBaoYCXQPAAPypAWADwAD968ABbcsAAAGBrABSuXAAUrGoAFK45gAAAAEAUrlwAAAAAAACBMAAoGXAAGSfga0AAAWBBQAAt+wAAIEkAAC8rAAAgUgAAMAAS1IAAQEBpKaBegAAwACzaQAAgZUAAMAAnGYAAAAAAAECwACgaIGtgu2C85MdA8AAZKAAAAFgAcAAs24AAAMEwACgaoGtg/eEGxjAAE+YAF0DwAD8qQFgA8AAnGsBMYQZYAPAAJxrAATAAKBrga2ENYRbGMAAT5oAXQPAAPypAWADwACcawExhFlgA8AAnGsABMAAoGyBrYTNhPQYwABPmwBdA8AA/KkBYAPAAJ42ATGE8mADwACeNgABBcAAoHOBrYT5hPmFPQAAAAOFCYU9AAAAAgIChQoAAADAAE+tWwCFFgAAAKtLWwAAYAPAAKBoAT8BCQCFIsAAs6ECAAImhSgBgIUowFK6hmADwACcayaFNAGBhTTAUrqRYAPAAHKbAAQGwACgboGthkKGR4c6AACCmwAAAAEDhkqHOgAAAAAAAABgA8AA+j8BPgU9HIZTLsAASioAAAAAwACzf06GdYZ5AACAq2ADwACeNgEmhnUBFoZ7LsAAT63AALNwYAPAAJ42SYaLFoaPLsAAT6fAALN6PgI9HIaugIaqwFK7D8AAY1UBAAEWhsIuwABjVMAAs3gAwACei0qG1AEpPz0XhusuwABPmBeG/C7AAE+aF4cPLsAAT5srwACgbMAAoGvAAKBqSocqASoGwACgb4Gthz+HS4e8AADAAGNAAWqHQGADwAD9UQIAAAEDh26HvAAAAAEBAYeOAAAAgVRgA8AAnaAAAFwBPgE9HIeaLsAAZFMBAAEnwABkVADAALOABsAAoHCBrYfBh82JGQAAwABjKQFqh8JgA8AA/VECAAABA4fviRkAAAABAQGIDgAAAIFUYAPAAJ12AABbAT4DPR2IIMAAYykBAAGAiEPAUrwaAMAAs5FOiFuIYgAAwABkVWADvNMBFohpgIhkwFK8GsAAT6/AAJ14SYh8IhyIpBaIlRaIiRaIgC6rS8AAs3Gk38AAcqCzQMAATTOx7gEAAYGIrsBSvEUAuUsAHIjNFojIgYjBwFK8RYC9vK9IAQABaojcYAPAAP3rwADudADAAP36PgE9HIjoLsAAZFMBAAEkiQ4CJ8AAZFYWiQOAiP7AUrwao8jAAJ1zAMAAs4A/BsAAoHGBrYkeiSqTGwAAwABjPAFqiR9gA8AA/VECAAABA4lNkxsAAAABAQGJbQAAAIFUXQPAAJ2HAVsAAFwBPgQ9HYl/wABjPAEAAYCJo8BSvRkAwACzmk6Jt4nAAACk8WADwABLZAEWiceAicLAUr0ZpPHAAJ1qTonciekAALseYAPAAP3rARaJ9IGJ68BSvUaAvcAAS3JJif4cig4WigIuwABkUsAAs3lIAQABFooWgIoRwFK9GYV/wACdjQDAAP1ePgFJiighHIo/GootwACgZ4MXAQABgopIwFK9ZgDAAP2oPgFJimEWim6BimXAUr1GsqDAAEt2PgFJioIcipOCiobAUr1mSAEAASeApQDAAP36PgJOixWLGQAAgKtgA8AAnGsBHIs0FosqFosggIsbwFK9GVvAAJ1shZPAAKAiSwEAAZMAwAD8uEmLRSWLTYOLScBSvgRgA8AAnjY+Aj0ci30Wi3Quq0vAALNxwABPYwEAARSLksBSvgQDAWADwACeNgDAAHKuPRyLtRaLpi7AAE+bwACgbFYBAAEUi7nAUr4EAwFgA8AAnjYAwAD8uj4BPRyM4S7AAGRTAQABJ8AAZKEAwACzgEmNPByNTYKNQMBSvWZIAQABJ5kdAMAA/fo+Aj0cjvYWjucuwABPmMAAoGpWAQABHI8TFo8JFo7/gI76wFK9GVvAAJ1shZPAAKAiSwEAAZMAwAD8uADAAPy6PRyPNhaPJS7AAE+awACga1YBAAEWj0kWj0MWjzouq0vAALNxhW3AAHKlnm3AAKEZAMAA/Lo+Aj0ckL0uwABkUwEAASSQ9AMnwABkooKQ5sBSvWYnmZcAwACzgEqRAwBJkSYWkTOBkSrAUr1GttPAAEt5PgI9HJFaFpFLLsAAT5jAAKBqVgEAARyRdxaRbRaRY4CRXsBSvRlbwACdbIWTwACgIksBAAGTAMAA/LgAwAD8uj0ckZgWkYcuwABPmsAAoGtWAQABHJG1FpGrFpGhgJGcwFK9GVvAAJ1shZPAAKAiSwEAAZQAwAD8uADAAPy6SZHKIRaR2IGRz8BSvUa218AAS3g+Aj0cke0uwABkUwEAASSSJAMnwABkooKSFsBSvWYnmZcAwACzgEqSMQA/P0mSViIWkmOBklrAUr1GsqDAAEt2ACIWknuAknbAUr0ZwABPusAAnZsBHJK1FpKlgJKgwFK9GcAAT7zAAJ2cgdQBAAE0krkDkrmS2QAAAAEBAZK6AAAAliZgA7zTAABgA8AA+j8BSpLGASEWks+DksfAUsCQssG82wDAAPx8PgI9HJLlLsAAZFMBAAEnwABkVADAALOASpMLAD8AAFK60wBSu5kAUrvuAFK87QBSwNkAAAAEAQTAAKBnga2BwoLqBMAAZKMAXQPAAP2cAWADwAD96wEegdrAAMEZAQFgA8AA/esBaoHjXQPAAPypAWADwAD968ABbpAAAAGBrQBSwTgAUrnRAFLA8gAAAAEAUsE4AAAAAAACBMAAoHTAAGSkga4AAAWBBQAAt+wAAIEkAAC8rAAAgUgAAMAAS1IAAQEBpKaBegAAwACzaQAAgZUAAMAAnGYAAAAAAAECwACgd4GuhSWFK42QA8AAZKUAAAFgAcAAs24AAAEEwACgeYGuhWyFjRjAAE+WAF0DwAD8qQFgA8AAnGsBMYWLYAPAAJxrAAEFwACggIGuhZKFkoXWAAAAA4WihdYAAAACAgKFowAAAMAAT61bAIWvAAAAq0tbAABgA8AAoHcBPwEJAIW7wACzoQIAAiaFwQGAhcHAUsH8YAPAAJxrJoXNAYGFzcBSwgdgA8AAcpsABAbAAKB7ga6GtYa6h4YAAIKbAAAAAQOGvYeGAAAAAAAAAGADwAD6PwE+BT0chsYuwABKKgAAAADAALN/TobohuwAAJckYAPAAJ4UASaG6AEWhu4uwABPrcAAs3BgA8AAnhRJhv4WhwIuwABPp8AAs3o+Aj0chyGAhx3AUsKFwABjVQEAARaHNS7AAGNUwACzeADAAJ6LSodHASk/PReHXi7AAE+WK8AAoHlKh3YBKgbAAKB8ga6Hi4eXiAgAAMAAY0ABaoeMYAPAAP1RAgAAAQOHuogIAAAAAQEBh9oAAACBVGADwACdoAAAXAE+AT0ch+YuwABkUwEAASfAAGRUAMAAs4AGwACgfYGuiA2IGYllAADAAGMpAWqIDmADwAD9UQIAAAEDiDuJZQAAAAEBAYhaAAAAgVRgA8AAnXYAAFsBPgM9HYhswABjKQEAAYCIj8BSw3gAwACzkU6Ip4iuAADAAGRVYAO80wEWiLWAiLDAUsN4wABPr8AAnXhJiMgiHIjwFojhFojVFojMLqtLwACzcaTfwAByoLNAwABNM7HuAQABgYj6wFLDowC5SwAciRkWiRSBiQ3AUsOjgL28r0gBAAFqiShgA8AA/evAAO50AMAA/fo+AT0ciTQuwABkUwEAASSJWgInwABkVhaJT4CJSsBSw3ijyMAAnXMAwACzgD8GwACgfoGuiWqJdo2OAADAAGM8AWqJa2ADwAD9UQIAAAEDiZmNjgAAAAEBAYm5AAAAgVRdA8AAnYcBWwAAXAE+BD0dicvAAGM8AQABgInvwFLEdwDAALOaTooDigwAAKTxYAPAAEtkARaKE4CKDsBSxHek8cAAnWpOiiiKNQAAux5gA8AA/esBFopAgYo3wFLEpIC9wABLckmKShyKWhaKTi7AAGRSwACzeUgBAAEWimKAil3AUsR3hX/AAJ2NAMAA/V4+AUmKdCEciooainnAAKB2gxcBAAGCipPAUsTEAMAA/ag+AUmKrBaKuYGKsMBSxKSyoMAAS3Y+AkFHis2CitXAUsTEAwGK9mqK9mADwAD968ABMLwAPgI9HIsXFosLLsAAT5bAAKB5VgEAARyLNBaLKhaLIICLG8BSxHdbwACdbIWTwACgIksBAAGTAMAA/LgAwAD8ukKLSAABi2Bqi2BgA8AA/evAAW7YAD4CPRyL2y7AAGRTAQABJ8AAZKYAwACzgEKMKgAAAT4BPRyMVC7AAGRTAQABJIyLAyfAAGSngox9wFLExCeZlwDAALOASoykAD8/SYzJIhaM1oGMzcBSxKSyoMAAS3YAIhaM7oCM6cBSxHfAAE+6wACdmwEcjSgWjRiAjRPAUsR3wABPvMAAnZyB1AEAATSNLAONLI1MAAAAAQEBjS0AAACWJmADvNMAAGADwAD6PwFKjTkBIRaNQoONOsBSxlOywbzbAMAA/Hw+Aj0cjVguwABkUwEAASfAAGRUAMAAs4BKjX4APwAAUsJJAFLC9wBSw0wAUsRLAFLGnAAAAAQBBMAAoHaBroJ6hSIEwABkqABdA8AA/ZwBYAPAAP3rAR6CkcAAwRkBAWADwAD96wFqgqJdA8AA/KkBYAPAAP3rwAFu8AAAAYGuAFLG+wBSwZkAUsa1AAAAAQBSxvsAAAAAAAIEwACggcAAZKmBrwAAB4EEAABaAACBJgAAvKwAAIFKAADAAIbXuw8AgXsAAL3MAACBoAAAwABylwAAgb8AAMAAnGYAAIHfAADAAJ/uAAAAAAACAsAAoIKBr4SLhJGSsQPAAGSqAAABYAHAAP1RAAAGBMAAoISBr4S3hM4GwABkqwBgA8AA/esBaoTDYAPAAP3rwAFvpATAAKCFga+E6IT2CRkAYAOAkQAEwACghoGvhQ+FFwmrSwBgA8AAcpsABMAAoIeBr4VMhZcJwABkrQBdA8AA/NoCYAPAAJxrXQPAAP2cAWADwACcawEyhZVgA8AAnGtdA8AA/ZwBYAPAAJxrAATAAKCIga+FzIYWCcAAZK4AXQPAAPzaAmADwACca10DwAD9nAFgA8AAnGsBMoYUYAPAAJxrXQPAAP2cAWADwACcawAEwACgiYGvhiyGTQnAAGSvAF0DwAD9nAFgA8AA/esBHoZAwADBFwABYAPAAP3rAAABBcAAoJCBr4ZShlKGgwAAAAOGX4aDAAAAAgIChmUAAAQZYAOAkQCGegAABKtLYAPAAHKbAABgA8AAoIIBPwMIAcAAoIWAAMBSyKgIAcAAoIaBAMBSyLMJAYZSwAD9ZwAAAAAEBsAAoIuBr4bwhvWH2wAAwABPoAAAAAEDhwOH2wAAAAAAAABcAT4BRocMh0KHIQAAAIPuYAPAAJxrABaHOBaHMhaHKS6rS8AAoIaFbcAAcqXAAGSwwAChAj4CTodfh2QAAJz2XQPAAP2cAWADwACcawEch3cWh2uAh2bAUskcwABPlsAAnHyVGQAAAADAAPx+SYeGIRaHkIGHi8BSyUuBVcAA/Is+AT0ch7wWh6MuwABkrcAAoIeAvwIAAoCHvcBSyRyBh8XAUslLAMAA/O8/BsAAoIyBr4giiCeJCwAAwABPswAAAAEDiDSJCwAAAAAAAABcAT4BRog9iHOIUgAAAIPuYAPAAJxrABaIaRaIYxaIWi6rS8AAoIaFbcAAcqXAAGSwwAChAj4CToiQiJUAAJz2XQPAAP2cAWADwACcawEciKgWiJyAiJfAUsnrwABPlsAAnHyVGQAAAADAAPx+SYi3IRaIwYGIvMBSyhqBVcAA/Is+AT0ciOwWiNQuwABkrsAAoIiAvwIAAoCI7cBSyeuBiPXAUsoaAMAA/O8/BsAAoI2Br4kuiTONZgAAwABPwAAAAAEDiUCNZgAAAAAAAABcAT4DTomribEAAIcyXQPAAPzaAmADvNNdA8AA/KkBYAPAAJxrATKJ4GADvNNdA8AA/KkBYAPAAJxrAEaJ6Ioeif0AAACD7mADwACcawAWihQWig4WigUuq0vAAKCGhW3AAHKlwABksMAAoQI+AUmKJiEcij0Wii+BiirAUsrxwABi7cAAnHtIAQABKwDAAP1ePgE9HIqrHIpjgIpQwFLKtpkdAgACFop0gYpvwFLK8cAAYu3AAJx7NIqDA4qDipwAAAAAAAAAXQPAAPypAWADwACcawFKiokBMYqaYAPAAJxrAADAAPz1VgEAAYGKr8BSyvEAwAD8uj9Giu2LFor/AAAAliZgA7zTABaLEICLCsBSyraDYsAA/Pw+Ak6LKQAAAIGTYAOAhQBMPgZOi0yLUQAAgL1gA8AA/esBHItTLsAAZLEBAAGBi2fAUsuvAMAAoI49iot5wFLLzhyLkRaLgi4ZwACghYKOAwADJIvBA2qLsWADwAD968ABb6QnUIOLvMBSy94nmUlqi9VgA3WCRQCAk06L9Yv9AACHNGADwACgkQEfjAPAAKDJBAAELoGMJsBSy6+CjC/AUsvOFoxUFoxAFow3LqtLwACghrC9wAByorWJvmIARoxtjJqMggAAAIPuYAPAAJxrAByMj4CMisBSyrZLAQABgYyQwFLLrwDAAPzuPgE9HIyuhIymwFLMRpqPAQABhYy0wFLMjgDAAKCoPRyM1YSMzcBSzEbAAGSyAAAAAMAAoKc9HIz4hIzwwFLMRoceAAAAAMAAoKY+AUmNHCEcjSeCjSDAUsvOSAEAASsAwAD9Xj4BPRyNQ4KNPMBSy86CiAAAAACAiD8GwACgjoGvjj6ORZKvAADAAGSxAAAAAQOOWJKvAAAAAQEBjmYAAACWJmADvNMAAGADwAD96wE+CU6O8o74AACEgV0DwAD8qQFgA8AA/esBMY8CYAPAAP3rAD0cjxCBjwrAUs1pVgEAARaPPhaPMRaPJBaPHICPFMBSzVKEQ7zipSu8tIMYwAD+eoHowAD8jgDAAPy6PRyPT4GPScBSzWlWAQABNQAAAAEAYAO8wQEWj1uAj1PAUs1ShP+84SMcj2uCAMBSzdRIAQABKwAAKxaPa4IAwFLN1IC9vK8BYAPAAP3rAMAA/LpJj3YWj4KAj3rAUs1ShTO83D4BPRyPmoGPlMBSzWlWAQABJI+zAifAAGSzFo+tgI+lwFLNUoC9vK8AwAD8ukmPwRaPzYCPxcBSzVKFNbzdPgE9HI/lgY/fwFLNaVYBAAEkj/4CJ8AAZLQWj/iAj/DAUs1SgL28rwDAAPy6SZAMFpAYgJAQwFLNUoeAvNk+AUmQLxaQQBaQO4CQM8BSzVKAvbyvgVXAAP3xPgE9HJBZgZBTwFLNaVYBAAEnwABktQDAAPy6PgE9HJCLgZCFwFLNaVYBAAEWkJeAkI/AUs1SgL28rwDAAPy6PgE9HJC/gZC5wFLNaVYBAAEckPsekM7AAIbgAQABFpD1gJDtwFLNUoC9vK8AguQCAAInneYngY0AwAD+CwDAAPy6TpEkkS0AAILjYAPAAP3rARyRWByRNYGRL8BSzWmBpQEAATSROwORO5FWAAAAAQEBkTwAAACDe2ADwAD96wAAYAPAAPo/AUqRQgEiIRyRRIKRQsBSz3FIAQABKwDAAP36ACEckVGCkU/AUs9xSAEAAScAAMAA/foAwAD8c1gBAAEngWoAwAD8e0mRZxyReRaRay7AAGSvwACgiVYBAAGCkX3AUs9CAMAA/alKkYgBgpGPwFLPQj9Okh2SKgAAwABktmADwAD8BQGVQ5IzIRySSRaSOy7AAGSvwACgiVYBAAEkkmYDgpJPwFLPQieBjYOSWcBSz/gAwAD9qT4BPYuSc8BSz/gcknGDknPAUs/4ZAEAAZQAwAD9KkqSiwEkkqsDgpKUwFLPQieBjYOSnsBSz/gAAFLI8ABSyb8AUsqOAFLNMABS0HIAAAAEAsAAoJGBr5LskvK6rgPAAGS3AAABXQHAAJ6mAVsAABIEwACgk4GvkzmTPwnAAEPoAGADwACgggAEwACglIGvk16TfwmpGgBdA8AA/ZwBYAPAAJxrAR6TacAAwRcAAWADwACcawAABMAAoJWBr5Ofk8UJm4YAXQPAAPypAWADwACcawEek67AAPejAQFgA8AAnGsBkwAEwACgloGvk+mUCgnAAGS4AF0DwAD82gJgA8AAnGtgA8AA/AUBMpQIYAPAAJxrYAPAAPwFAATAAKCXga+UM5Q9CbaiAGEDAWADvedgA8AA/esABMAAoJiBr5RFlFAYwABMzwBgA8AA/AUBkwTAAKCZga+UZZRrCYGTAGADgIUABMAAoJqBr5SClIkJliYAYAO80wAEwACgm4GvlJ2UqBjAAEbbAGADwACcawErBMAAoJyBr5oBmiYJwABkuQBgA8AA/XsBHpoUwAD9lAEAASfAAGS6AATAAKCdga+f4p/+BsAAZLsAYAPAAP3rAWqf9WADwAD968ABb6kEwACgnoGvoBagKgbAAGS9AGADwAD96wFqoCFgA8AA/evAAW+uBMAAoJ+Br6BCoFgGwABkvwBgA8AA/esBaqBQYAPAAP3rwAFvrgTAAKCgga+gcKCFBsAAZMAAYAPAAP3rAWqgfGADwAD968ABb7MEwACgoYGvoPqhEQbAAGTCAGADwAD96wFqoQpgA8AA/evAAW+4BMAAoKKBr6EpoT0GwABkwwBgA8AA/esBaqE1YAPAAP3rwAFvuwTAAKCjga+hVaFpBsAAZMUAYAPAAP3rAWqhY2ADwAD968ABb8AEwACgpIGvoYGhmQbAAGTHAGADwAD96wFqoZFgA8AA/evAAW/FAQXAAKDJga+UrZStlaAAAAADlLyVoAAAAAQEBJTCAAAEwABD6GADwACgggCUzwAABJYmYAO80wCU3QAABIGTYAOAhQCU6gAABLaiYQMBYAO952ADwAD96wAAYAPAAKCRAT4DPReU/C7AAEbbHJUgFpUaFpURFpUKLsAAQ+jAAKCTq0vAAKCGhW3AAHKlwABPHwEAARaVOC6WJsAAoJoAwAChKsAAoJs9HJVGLsAAZMkBAAEWlU4uwABG28AAoJsAwACgrD0clYkuwABkygEAASfAAGTLAMAAoKkFCAHAAKCTgADAUtM4CAHAAKCagQDAUtNICAHAAKCZggDAUtNUCAHAAKCXgwDAUtNgCQGUrcAAnr0AAAAAIgbAAKCmga+VpZWqlcgAAIceAAAAAQOVsJXIAAAAAAAAAFwBPgE9HJW5LsAAZMoBAAEnhsYAwACgqQbAAKCnga+WsZa2l2MAAMAAZLIAAAABA5bFl2MAAAAAAAAAXAE+AUOWzhaW3haW1S6bhsAAoJWDssAA/Iw+A06XApcHAACD7mADwACcawEclxIWlwkum4bAAKCVhhcAAAAAwAD8yEAclzQWly0uwABkuMAAoJaHRwEAAYCXQMBS1K0AwAD87Zctl0UAPRyXTi6ajwEAAYCXVMBS1K0AwACgqAbAAKCoga+XaJdtl8kAAJqPAAAAAQOXcpfJAAAAAQEBl4MAAACBVGADwACcawAAXAE+AkmXjxyXmBaXky6pGsAAoJSDFwEAAYCXocBS1S8AwAD9qEqXqAA/PRyXuYCXtMBS1S+ETQEAAS4AwACcjQbAAKCpga+XzpfTmBEAAMAAZMoAAAABA5fZmBEAAAABAQGX4QAAAIPsYAPAAP3rAABcAT4BPTWX7wAAAQBgA4CFARaX7y6Bk8AAoJk1AAAAAQBbARyX94GX9cBS1bVWAQABgJf7wFLVoACAhzUAAAABAFsBHJgEgZgCwFLVtVYBAAEngK8AgIeBAMBS1bUGwACgqoGvmBaYHZi4AADAAGTMAAAAAQOYJJi4AAAAAQEBmCwAAACBsGADwAD96wAAYAPAAP3rAT4CSZg4HJhIFphBgJg8wFLWLmHAAP3vgJcBAAE3KADAAP00PgFKmFYBHJh7HJhzHJhigJhdwFLWLoC+AgACkzcTAMAA/gFkAQABJ5y6AMAA/gBkAQABHJiCgJh9wFLWLoC+AQABHJiYFpiRgJiMwFLWLmHAAP3vgY0BAAE3EgDAAP0rAMAA/gEAwAD+AD9KmKkBgJiwwFLWLgbAAKCrga+YvZjBmNoAAMAAZM0AAAABA5jLmNoAAAAAAAAAYAPAAPwFAUqY0QEXmNMuwABMzxyY0RaY0y7AAEzPwACgmGQBAAGUAMAA/SrAAKCYBsAAoKyBr5kbmSKZ7wAAwABkyQAAAAEDmSmZ7wAAAAEBAZk6AAAAgVRgA8AAnGsAAGADwAD96wE+Ak6ZSplNAACzmmADwAD8BQEcmVYWmU8uwABkuMAAoJaZHQIAAoCZYsBS11I0mWgDmWiZ2AAAAAAAAABgA8AA/AUBPgI9HJl8FplzLpuGwACglVYBAAGAmYDAUtdSAMAA/LpKmb4BHJnFLsAAZM0AAAAAwACgqwDAAPz1SpnfASSZ6wGBmejAUtdrBsAAoK2Br5p0mnua4gAAwABkzgAAAAEDmoaa4gAAAAEBAZqOAAAAgbBgA8AA/esAAGADwAD96wE+AUqamgEcmqaAmqHAUtgVwABINQIAAhaaty7AAGS5wACgnDSaxQOaxZrdAAAAAQEBmsYAAABFYAPAAP1uAABgA8AA/esBSprMASSa3QInguUcmtOBmtHAUthcwABDawEAAZMAwAD9dgDAAP4MBsAAoK6Br5ujm6ifPwAAwABikAAAAAEDm6+fPwAAAAQCApvAAAAAwABJGWADwACcawCb1QAAAMAAZM9gA8AAnGsAApvoAAAAll1gA8AA/esBagBgA8AA/Q55m/UAAACDeWADwAD96wFqm/xgA8AA/evAAW+4XAE+BEmcDCIcnBAuhB8BAAGAnBvAUti6AMAAoK8AHJwjLoQfAQABgZwuwFLYygDAAKCvPgFKnDwAP06cgZyJAADAAGTQYAPAAP3rARyciy7AAGTJAQABgZyTwFLYygDAAKCsSZydIRycpoKcocBS2NtIAQABKwDAAP36PgE9jJy3wFLZSBycv4Sct8BS2UhkAQABJJzKAieC5oKcxcBS2NsAwAD+AD9JnNYlnN6AnNrAUti6YAPAAJ2tPgZOnc2d0AAAs5pgA8AA/AUBHJ3SLsAAZM0AAAAAwACgq06d7Z3yAACCkGADwAD96wEcnfQuwABkzgEAASSeGQEcngMutqIBAAEWnhIUng7AUti6AAFgA8AAna2CkMAAnHEAwACglwDAAKCtTp4pni4AAIGwYAPAAP3rASfAAGTRTp5Jnk8AAJkBYAPAAP3rASSebQUnmbaHnlTAUto0J8AAZNKGnmfAUtnqJ4bGPRyedS7AAGTKAQABJJ6sBIWefsBS2conwABk0xSepMBS2kkIACfAAGTUAMAAoKk9HJ61LsAAZMoBAAEknt4GhZ6+wFLZyiet04SexcBS2UgnwABk1YOe1sBS2PInwABk1ADAAKCpPgE9HJ70LsAAZMoBAAEknzQGHJ7+LsAAZMkBAAGAnwbAUti6AMAAoKwnwABk1oSfG8BS2UgnwABk1YOfLMBS2PInwABk1ADAAKCpBsAAoK+Br6G/ocSiKgAAhB8AAAABA6HOoioAAAABAQGh3wAAAIPuYAPAAJxrAABgA8AA+j8BPgFKoesBIiEcofeAofLAUttGSAEAARah+i7AAEbbwACgmwDAAP1eACEcohwWog6AognAUttGwABi7cAAnHtIAQABFqIfLpYmwACgmgDAAP1eBsAAoLCBr6Ivojai0AAAwABk1wAAAAEDokWi0AAAAAICAqJWAAAAg+5gA8AAnGsAomMAAACDeWADwAD96wAAYAPAAP3rAT4BSqJwASMconcuhB8BAAGAooLAUtvPAMAAoK8nwABk2CSizAMnwABk2YGixcBS290ng64BYAPAAP3rBsAAoLGBr6MioymkOwAAwABk2gAAAAEDozakOwAAAAICAqNHAAAAg+5gA8AAnGsAo1QAAACBsGADwAD96wAAYAPAAP3rAT4DSaNgHKNpgKNkwFLcUEgBAAEWo2wuwABG28AAoJsAwAD9Xj4BSqOBASSjnwKBo4rAUtxeJ8AAZNs/SaOrIiEco8IWo7SAo6/AUtxQwABi7cAAnHtIAQABKwDAAP1eACEco+AWo9KAo83AUtxQwABi7cAAnHtIAQABFqPjLpYmwACgmgDAAP1ePgFKo/QBJKQgBIGj/cBS3F4nwABk3BakEICkC8BS3FDAAGLtwACceyeDIT9KpCwBgaQzwFLcXgbAAKCyga+k/KUBrLwAAMAAWTAAAAABA6UIrLwAAAAEAgKlGQAAAIPuYAPAAJxrAKUmAAAAgbBgA8AA/esAAqU6AAAAg3lgA8AA/esBaqVBYAPAAP3rwAFvqaVwAAAAglFdA8AA/NoCYAPAAP3rYAPAAJxrAWoAYAPAAP0OeVwBPgg9HKWEFqV/LqkawACglFYBAAGApYjAUt1WAMAA/alOpZqloAAAwABJiGADwAD96wEcpaIuwABk1wIAAoClssBS3VaCpbjAUt1zAMAAoLA9iaXEwFLdZBylyy7AAGTaAgACgKXZwFLdVoGl38BS3WQAwACgsT2JperAUt1kHKXxLsAAZM4BAAGBpf3AUt1kAMAAoK1Opg+mEgAAs5pgA8AA/esBHKYULsAAZMkBAAGAphzAUt1WAMAAoKxOpi6mOQAAhTpgA8AA/esBHKY7LsAAZM4BAAEcpkcutqIBAAEWpleAplLAUt1WgpDAAJxxAMAAoJcAwACgrUmmYyEcpm6DpmfAUt2OSAEAASsAwAD9Xj4FTqaQppUAAINiXQPAAPxnAWADwAD96wEcpqMWpp6DppfAUt2Og2LAAPz8gaUBAAE0pqkDpqmmxQAAAAEBAaaqAAAAg9FgA8AA/esAAGADwAD6PwFKprIBIRymvhymuIOmssBS3Y5LAQABh6a5wFLfBQDAAPzuSAEAASsAwAD9XgDAAPxzTqbVptwAAJlwYAPAAP3rARynABym44em3sBS3smAqwEBYAPAAP3rATSm5wOm56b+AAAAAQEBpugAAACD0WADwAD96wAAYAPAAP3rAUqm8AEkpv4EJ8AAZN0UpvTAUt+CCAAnwABk3hSm+sBS34IIAADAAPxyWAEAASeBBgDAAPx7TqcYpx4AAJkBYAPAAP3rASSnTAcnwABk3xSnJMBS300IACfAAGTggactwFLdZCfAAGTShqdAwFLecSeGxj0cp1QuwABkygEAASSnhQaFp13AUt5KJ8AAZOEUp3bAUt/OCQAnwABk4oSnfsBS3dUnmZcAwACgqUanjqenp5oAAACD0WADwAD96wCHp6HAUt7JPgE9HKexLsAAYpADAAIcp7+Dp7nAUt2OSwEAARSnwMBS4EgKAADAAPzugKfGwFLdVgGWXSSn2QIngdUUp9XAUuBICgDAAKCuPghOp/6oBAAAmQFgA8AA/esBJKgoBSeZtoGoCcBS3WQnwABk0oaoHMBS3nEnhsY9HKgwLsAAZMoBAAEkqGEGhag5wFLeSifAAGThh6hSwFLgqCfAAGTihKhawFLd1SeZlwDAAKCpTqjuqPoAAMAAZONbATUAAAABAF0DwAD9nAFgA8AAnGsBHKkcFqkDFqj8LsAAQ+jAAKCTwABkrcAAoIdLAQABgKkdwFLdVgDAAPzuIxypIxQAwFLhGQgASAEAASsAAGqpJl0DwAD8qQFbgmYUAMBS4RkIAAFgA8AA/VFOqTqpRAAAwABk5GADwAD9UQE1AAAAAQBdA8AA/ZwBYAPAAJxrARypZRapTRapRi7AAEPowACgk8AAZK7AAKCISwEAAYCpZsBS3VYAwAD87iMcqWwUAMBS4ZgJAEgBAAErAABqqW9dA8AA/KkBW4JmFADAUuGYCQABYAPAAP1RTqmDqY4AALNuXQPAAP2cAWADwACcawEcqaEWqZWAqZDAUt1WwABPlsAAnHyVGQAAAADAAPx+Rqmwqd+pxQAAALAmYAPAAJxrABSp08BS4gUKAD4CTqnwqfYAAIN5YAPAAP3rASMmqhABHKoQFKoEwFLhDAgAgxcBAAEUqhnAUuI/CwAAAGADwAD6P2qqJ2ADwAD968ABb7hqqjdgA8AA/evAAW+7AWADwAD96z0cqkouwABikAMAAhSqUsBS4j8LAICqXsBS3VYBg3kUqmvAUuJZDADAAKCuRqqBqrEAAAABAFsAJqqkARSqpMBS4QwIAF0DwAD8ZwFbPgJOqpYAAACwJmADwACcawEmqoEBFKqWwFLi4QsAYAPAAJxrSaq7IRyqyxSqwMBS4gUKAIMXAQABFKrUwFLjAAwAAMAA/ag+AT0cqu0uwABikAMAAhSq9cBS4wAMAICrAcBS3VYBg3lqqw5gA8AA/evAAW/AwACgrj9GqzSrYgAAAAEAWwAmq1cBFKtXwFLhhgkAXQPAAPxnAVs+Ak6rSQAAALAmYAPAAJxrASarNAEUq0nAUuN8CwBgA8AAnGtJq2wiIRyrfBSrccBS4gUKAIMXAQABFKuFwFLjmwwAAMAA/agAISaroAEcq60Uq6HAUuEMCACDFwEAARSrtsBS45sMAAAAYAPAAPo/PgE9HKvPLsAAYpADAAIUq9fAUuObDACAq+PAUt1WAYN5aqvwYAPAAP3rwAFvxcAAoK4/SawcGqwgwACf9D4BRqw/rGisVAAAAKO9YAPAAJxrABasYYCsXMBS3Vag68AAnG0+AUmsciEcrHcuhB8BAAGHrILAUuRMAMAAoK8+AT0crJUumo8BAAGHrJvAUuRMAMAAoKg/PwbAAKCzga+swazSrcQAAMAAY08BaqzCYAPAAP1RAgAAAQOs7K3EAAAAAQEBrQMAAACBVGADwACdzgAAXAE+AkmtKyIhGq0wwACf9AAWrVQWrU6ArUnAUuTLoOvAAJxtgVXAAPyLSq1dAD89HK1pLsAAWTADAAKArXHAUuTLJK2jAifAAGTlHK2CLraiAQABFq2SgK2NwFLky8AAY0rAAJ3QAMAAoJcBg3lqrbRgA8AA/evAAW+uwACgsgbAAKC0ga+tya3arrwAAMAAY34Baq3KYAPAAP1RAgAAAQOt+K68AAAAAQEBrhMAAACBVGADwACeXQAAXAE+AkmuOCIhGq49wACf9AAWrmEWrluArlbAUuWFoOvAAJxtgVXAAPyLSq5qAD89HK52LsAAWTADAAKArn7AUuWFJK6mAifAAGTmNQAAAAEAYAPAAP3rATUAAAABAGADvQwBFq6QgK6LwFLlhYJswACeYCMcrpqBAMBS5e1IAQABKwAAKxaumoEAwFLl7YC9vK8BYAPAAP3rIxyun4EAwFLl4EgBAAErAAAnAIEAwFLl4AFgA8AA/esBg3lqrq9gA8AA/evAAW+uwACgsgbAAKC1ga+uwa7Sr1UAAMAAY1wBaq7CYAPAAP1RAgAAAQOu+K9VAAAAAQEBryIAAACBVGADwACd/wAAXAE+AT0cry4uwABZMAIAAoCvNsBS5o0nwABk5wDAAKCyBsAAoLaBr69ar2uv1QAAwABjYwFqr1tgA8AA/VECAAABA6+Lr9UAAAABAQGvqAAAAIFUYAPAAJ4hAABcAT4BPRyvtC7AAFkwAgACgK+8wFLm6SfAAGToAMAAoLIGwACgt4Gvr9qv67BJAADAAGN0AWqv22ADwAD9UQIAAAEDsAewSQAAAAEBAbAgAAAAgVRgA8AAnk4AAFwBPgE9HLAsLsAAWTACAAKAsDTAUudFJ8AAZOkAwACgsgbAAKC4ga+wTrBfsMMAAMAAY3cBarBPYAPAAP1RAgAAAQOwfbDDAAAAAQEBsJgAAACBVGADwACeVAAAXAE+AT0csKQuwABZMAIAAoCwrMBS56EnwABk6gDAAKCyBsAAoLmBr7DIsNmxKwAAwABjWQFqsMlgA8AA/VECAAABA7DxsSsAAAABAQGxBgAAAIFUYAPAAJ3vAABcAT4BPRyxEi7AAFkwAgACgLEawFLn/SebzwDAAKCyBsAAoLqBr7EwsUGxkAAAwABjYAFqsTFgA8AA/VECAAABA7FYsZAAAAABAQGxbAAAAIFUYAPAAJ4UAABcAT4BPRyxeC7AAFkwAgACgLGAwFLoVyecQQDAAKCyBsAAoLuBr7GVsaax9QAAwABjbQFqsZZgA8AA/VECAAABA7G9sfUAAAABAQGx0QAAAIFUYAPAAJ42AABcAT4BPRyx3S7AAFkwAgACgLHlwFLosSeb0ADAAKCyBsAAoLyBr7H6sguyaQAAwABjQwFqsftgA8AA/VECAAABA7InsmkAAAABAQGyQAAAAIFUYAPAAJ2tAABcAT4BPRyyTC7AAFkwAgACgLJUwFLpCyfAAGTRAMAAoLIGwACgvYGvsm6yf7M0AADAAGNGAWqyb2ADwAD9UQIAAAEDsqCzNAAAAAEBAbK+AAAAgVRgA8AAnb0AAFwBPgJOstGy1gAAgbBgA8AA/esBHLLsHLLYLsAAZMwBAAEWsuWAsuDAUulngJbAAJ2/AMAAoKqC5AIAAieAryeEDgDAAP4LPRyzCS7AAFkwAgACgLMRwFLpZySzLwMnwABk64GzKcBS6Xsng64AwACgsgbAAKC+ga+zObNKs8AAAMAAY0gBarM6YAPAAP1RAgAAAQOzabPAAAAAAQEBs4UAAACBVGADwACdxgAAXAE+AT0cs5EuwABZMAIAAoCzmcBS6hQks7sCJ8AAZOwWs7SAs6/AUuoUgJbAAJ3IAMAAoLIGwACgv4Gvs8WzyrXnAADAAGTtAAAAAQOz1LXnAAAAAwMDs+0AAACBVGADwACdZQCz+gAAAIGwYAPAAP3rALQjAAAAglFdA8AA/NoCYAPAAP3rYAPAAJxrAABcAT4ETrQ4tEMAAJi1YAPAAP3rARy0RS7AAGTMAQABJLRgARa0VYC0UMBS6nqjyMAAnXMAwACgqj2JtGfAUuqIJLSCA4G0cMBS6ogngK+DtHfAUuq3SbSIIRy0mxa0kYC0jMBS6npbwACdbEgBAAErAMAAoCo+AkW0rAG0tbS3AABiYAPAAPwFAZMBHLS+hLS8wFLrLWMBAAEWtNoWtM8WtMWAtMDAUup6W8AAnWyFk8AAoCJhwAD82ADAAP0yAYy05MBS6y0ctOKEtOTAUustZAEAAZQAwAD9Kj4BPRy094K08cBS6paAvwIAAiS0/wInhXaEtP3AUustHLUcFrUSFrUIgLUDwFLqelvAAJ1shZPAAKAiSwEAAYS1HcBS6y0AwAD8uADAAPzvRrUvtWG1OwAAAMAAZO5gA8AA/esAFrVbFrVVFrVLgLVGwFLqelvAAJ1shV3AAKAjg2LAAPz8PgE9HLVxgrVrwFLqloC/AgAChLVywFLr4Ry1kRa1jBa1goC1fcBS6npbwACdbIVdwACgI0sBAAGEtZLAUuvhAMAA/O4AwAD87z89HLWuLsAAWTAEAAKAtbbAUup6gbW8wFLqiAKDeWq1yWADwAD968ABb7OCUYK13MBS6pbAAKCyBsAAoMCBr7Xstf22fgAAwABjQAFqte1gA8AA/VECAAABA7Ygtn4AAAABAQG2RwAAAIFUYAPAAJ2gAABcAT4BPRy2Uy7AAGTtAwADgLZewFLsvyfAAGTvMrZ3YAPAAP3rYAPAAJxrAADAAKC/BsAAoMGBr7aDtpS3CwAAwABjKQFqtoRgA8AA/VECAAABA7a2twsAAAABAQG21QAAAIFUYAPAAJ12AABcAT4BPRy24S7AAGTtAwADgLbswFLtKyfAAGTwMrcEYAPAAP3rYAPAAJxrAADAAKC/BsAAoMKBr7cQtyG3tgAAwABjPAFqtxFgA8AA/VECAAABA7dEt7YAAAABAQG3awAAAIFUXQPAAJ2HAVsAAFwBPgE9HLd3LsAAZO0DAAOAt4LAUu2XJ8AAZPEyt5tgA8AA/etgA8AAnGsBJ8AAZPIWt6iAt6PAUu2XhX/AAJ2NAMAAoL8GwACgw4Gvt7u3zLg3AADAAGMKAWq3vGADwAD9UQIAAAEDt+a4NwAAAAEBAbf9AAAAgVRgA8AAnMcAAFwBPgE9HLgJLsAAWTACAAKAuBHAUu4aJLgyAifAAGTzFrgngLgiwFLuGqPIwACc0ADAAKCyBsAAoMSBr7g8uE24wAAAwABjHAFquD1gA8AA/VECAAABA7hquMAAAAABAQG4hAAAAIFUYAPAAJ00AABcAT4BPRy4kC7AAFkwAgACgLiYwFLuiiS4uwInwABjHRa4sIC4q8BS7oqjyMAAnUIAwACgsgbAAKDFga+4xbjWuWgAAMAAY4IBarjGYAPAAP1RAgAAAQO48bloAAAAAQEBuQkAAACBVGADwACecgAAXAE+Ak65HLkhAACBsGADwAD96wEcuSMuwABkzAEAASS5PgEWuTOAuS7AUu76o8jAAJ54AMAAoKo9HLlFLsAAWTACAAKAuU3AUu76JLljAifAAGT0gblewFLvDgDAAKCyBsAAoMaBr7ltuX66CgAAwABjhgFquW5gA8AA/VECAAABA7mXugoAAAABAQG5rQAAAIFUYAPAAJ6OAABcAT4CTrnAucUAAIGwYAPAAP3rARy5xy7AAGTMAQABJLniARa514C50sBS75WjyMAAnpcAwACgqj0cuekuwABZMAIAAoC58cBS75UkugUCJ8AAZPWBugDAUu+pAMAAoLIGwACgx4Gvug+6ILqsAADAAGOJAWq6EGADwAD9UQIAAAEDujm6rAAAAAEBAbpPAAAAgVRgA8AAnpoAAFwBPgJOumK6ZwAAgbBgA8AA/esBHLppLsAAZMwBAAEkuoQBFrp5gLp0wFLwMKPIwACeowDAAKCqPRy6iy7AAFkwAgACgLqTwFLwMCS6pwInwABk9oG6osBS8EQAwACgsgAAUtQ0AFLUbQBS1Q8AUtV+AFLWDABS1t0AUtcwAFLX8wBS2JgAUtsmAFLbrQBS3C4AUt00AFLknwBS5VkAUuZhAFLmvQBS5xkAUud1AFLn0QBS6CsAUuiFAFLo3wBS6TsAUunoAFLqWABS7JMAUuz/AFLtawBS7e4AUu5eAFLuzgBS72kAUvAEAFLwnwAAACIAAAGBrwBS8TIAUsdqAFLQiwBS8TAAAAACAFLxMgAAAAAAAgTAAKDKAIGwAAAHgNoAAIIuggYAgQIAAKQ2AACBGwAAvKwAAIE/AADAAGJhAACBYAAAwABNJwAAgXgAAL3MAACBnQAAwACcZgAAAAAAAgLAAKDLgbCCKYI4hqoHwABk9wAAAWABwAD9UQAAAAEFwACg1wAAAAAEAAADAAAAAAAAAAAAYAPAAKDLAT8BCQEAwAD9ZwAAAAAJBsAAoM2BsIKDgpmC+QACwABP7AAAAAEDgrSC+QAAAAICAoLQAAAAsL1gA73yAILyAAAAgmZgA7zTAABgA8AAnMcABsAAoM6BsIM4g1GDzgACwABP6QAAAAEDg2+DzgAAAAMDA4OLAAAAsL1gA73yAIOsAAAAgO1gA70MAIPIAAAAhW1gA8AAoNgAAGADwACdNAAGwACgz4GwhAWECoRMAAKzHQAAAAEDhBqETAAAAAICAoQqAAAAgmpgA7zoAIQ5AAAAgaZhAwFgA70MXAAAXAAGwACg0IGwhI6Ek4StAALAAE/oAAAAAQOEn4StAAAAAQEBhKgAAACD7mADgksAAGADwAD6PwAGwACg0YGwhOyE8YUPAALAAE/nAAAAAQOFAYUPAAAAAQEBhQoAAACD7mADgksAAGADwAD6PwAGwACg0oGwhVWFWoV1AALAAE/mAAAAAQOFZ4V1AAAAAQEBhXAAAACD7mADgksAAGADwAD6PwAGwACg04GwhbqFv4XZAALAAE/lAAAAAQOFy4XZAAAAAQEBhdQAAACD7mADgksAAGADwAD6PwAGwACg1IGwhh6GI4Y9AALAAE/kAAAAAQOGL4Y9AAAAAQEBhjgAAACD7mADgksAAGADwAD6PwAGwACg1YGwhoKGh4aoAALAAE/jAAAAAQOGl4aoAAAAAQEBhqQAAACZymADvMEAAGADwAD6PwAAAFLx6wBS8i0AUvJ9AFLyvABS8vIAUvMoAFLzXgBS85QAUvPKAFL0AAAAAAkCwACg2IGwhvOG+cAAYd8DwABk+AAAAWABwAD9UQAAJQTAAKDbgbCHG4cnCbWqwACgygBgA8AATSsABMAAoN6BsIdEh0wJpRsAYAPAAKDLAATAAKDcgbCH/IgqCcAAZPnAAKDKAF0DwAD8qQFgA8AAnGsBMYgoYAPAAJxrAATAAKDfgbCIjIjYCcAAT94AXQPAAPzaAmADvQxgA8AAnTQBHoiywAD84QACYAO9DGADwACdNAAABMAAoOCBsIk4iYUJwABP3QBdA8AA/NoCYAO802ADwACcxwEeiVvAAPzhAAJgA7zTYAPAAJzHAAAEwACg4YGwieeKKQm2ywBdA8AA/NoCYAOCUmADwACd7wEeigLAAPzhAAJgA4JSYAPAAJ3vAAAEwACg4oGwioiKyAnAAE+jAF0DwAD82gJgA4JSYAPAAJ4UAR6KosAA/OEAAmADglJgA8AAnhQAAATAAKDjgbCLJIthCcAAT6QAXQPAAPzaAmADglJgA8AAnGsBHos+wAD84QACYAOCUmADwACcawAABMAAoOSBsIuri9kJwABPpgBdA8AA/ZwBYAPAAJxrAR6Lw8AAwRcAAWADwACcawAABMAAoOWBsIwyjHEJwABPYABdA8AA/NoCYAO952ADwACcawEejEzAAPzhAAJgA73nYAPAAJxrAAAEwACg5oGwjNuNDQnAAE/QAF0DwAD8qQFgA8AAnWUBMY0LYAPAAJ1lAATAAKDngbCNl427CcAAT80AXQPAAPypAWADwACcawExjblgA8AAnGsABMAAoN2BsJFakW8YwABMHsAAoMoAYAPAAJzHASsEwACg6IGwktGS3hjAAGT6AGADwACcawErBMAAoOmBsJObk6cYwABk+wBgA8AAnGsBKwTAAKDqgbCUX5RuGMAAZPwAYAPAAJxrASsEwACg64GwlT2VTBjAAGT9AGADwACcawErBMAAoOyBsJYbli8YwABk/gBgA8AAnGsBKwTAAKDtgbCXF5cmGMAAZP8AYAPAAJxrASsEwACg7oGwl/WYARjAAGUAAGADwACcawErBMAAoO+BsJi5mMYYwABlAQBgA8AAnGsBKwTAAKDwgbCZg5mUGMAAZQIAYAPAAJxrASsEwACg8YGwmm2aehjAAGUDAGADwACcawErBMAAoPKBsJs3m0kYwABlBABgA8AAnGsBKwTAAKDzgbCcJ5w5GMAAZQUAYAPAAJxrASsEwACg9IGwnRedLBjAAGUGAGADwACcawErBMAAoPWBsJ4ZniUYwABlBwBgA8AAnGsBKwTAAKD2gbCepJ61GMAAZQgAYAPAAJxrASsEwACg94Gwn0OfTxjAAGUJAGADwACcawErBMAAoPiBsKAHoBgYwABlCgBgA8AAnGsBKwTAAKD5gbCg8aEAGMAAZQsAYAPAAJxrASsEwACg+oGwoc+h3BjAAGUMAGADwACcawErBMAAoPuBsKKZoqkYwABlDQBgA8AAnGsBKwTAAKD8gbCjfaORGMAAZQ4AYAPAAJxrASsEwACg/YGwpKukxBjAAGUPAGADwACcawErBMAAoP6BsKXFpd0YwABlEABgA8AAnGsBKwTAAKD/gbCm2abpGMAAYzQAYAPAAJxrASsBBcAAoUCBsJAIkAiQhAAAAAOQEpCEAAAAAgICkBgAAAS1qmADwABNKwCQKwAABKUbYAPAAKDLAABgA8AAoNgBPgE9F5A7LsAAYzQckE4uwABj7wEAARaQdhaQYS7AAFOKwACgysAAoQS1Mr4JAMAAoSzAAKD/AwgBwACg24AAwFL5CwgBwACg3oEAwFL5GQkBkAjAAP1nAAAAADsGwAChAYGwjk+ObY6mAQDAAE/WAAAAAQOOhY6mAAAAAAAAAF0DwAD8ZwFgA8AAnGsBSo6OARaOji7AAGT5wACgysAAoNwGwAChAoGwjquOyZADAQDAAGSwAAAAAQOO0pADAAAAAAAAAF0DwAD8ZwFgA8AAnGsBSo7VARyP8zGO1V0DwAD8ZwFgA8AAnGsJFo75Fo7fLsAAT97AAKDfKcAA/P0WjyAWjwkuwABP3cAAoOApwAD8/RaPPxaPMC62y8AAoOEpwAD8/RaPXRaPTy7AAE+jwACg4inAAPz9Fo97Fo9tLsAAT6TAAKDjKcAA/P0Wj4suwABPpsAAoOQWj7QWj6YuwABPYMAAoOUpwAD8/RaPxC7AAE/QwACg5haP3C7AAE/NwACg54SPAQFgA8AAnGsBNI/6A4/6kAIAAAABAQGP+wAAAIN7XQPAAPxnAWADwACcawAAXQPAAPxnAWADwACcawFKkAEBgJABwFL6zADAAPx1BsAAoQSBsJCJkKGQ3wEAwABTisAAoMoAAAABA5C2kN8AAAAAAAAAYAO98gFKkL8BFpDMFpC/LrWqwACgysAAoNuwvcAATTQGwAChBYGwkXORjZGsAQCqrQAAAAEDkZuRrAAAAAAAAABgA8AAnMcBSpGeARaRni7AAEwewACgysAAoN0GwAChHoGwkbGRtpK8AADAAE/GAAAAAQORwJK8AAAAAgICkc4AAACWJmADvNMAkdwAAACIp2EDAFwAAFwBPgRAHJICFpHzLsAATB7AAKDKwACg3UgBAAErAMAA/V6R85IJAR6SE7XDAgACgJIcwFL7pSSSVgMnwABlERaSRi7AAEwewACgysAAoN0ngWoAPReSXi7AAEwewACgyhySby7AAE8fAQABgJKHwFL7pQDAAKEqwACg3T0ckpuBkpXAUvuxIAAAAAAAPReSoy7AAEwewACgyivAAKDdBsAAoQaBsJLikvaThgEAhXAAAAABA5L/k4YAAAAAAAAAYAPAAJxrAT4CSZMFIRyTFxaTCS7AAGT6wACg6EgBAAErAMAA/V5KkyABFpMnLsAAZPrAAKDoP0qTOgEXk0EuwABk+hyTUS7AAGPvAQABFpN5FpNkLsAAU4rAAKDKwAChBIVwvgAAwAChLMAAoOgGwAChB4Gwk6uTv5RKAQCFhQAAAAEDk8eUSgAAAAAAAABgA8AAnGsBPgJJk80hHJPeFpPRLsAAZPvAAKDpSAEAASsAwAD9XkqT5wEWk+4uwABk+8AAoOk/SpQAAReUBy7AAGT7HJQWLsAAY+8BAAEWlD4WlCkuwABTisAAoMrAAKEEhYW9+ADAAKEswACg6QbAAKEIgbCUcpSGlSgBALUtAAAAAQOUkZUoAAAAAAAAAGADwACcawE+AkmUlyEclKsWlJsuwABk/MAAoOpIAQABKwDAAP1eSpS0ARaUuy7AAGT8wACg6j9KlNABF5TXLsAAZPwclPEuwABj7wEAARaVGRaVBC7AAFOKwACgysAAoQS1Lb4EAMAAoSzAAKDqBsAAoQmBsJVQlWSWBgEAtSwAAAABA5VvlgYAAAAAAAAAYAPAAJxrAT4CSZV1IRyViRaVeS7AAGT9wACg60gBAAErAMAA/V5KlZIBFpWZLsAAZP3AAKDrP0qVrgEXlbUuwABk/RyVzy7AAGPvAQABFpX3FpXiLsAAU4rAAKDKwAChBLUsvgMAwAChLMAAoOsGwAChCoGwljOWR5cCAQC1LgAAAAEDlleXAgAAAAAAAABgA8AAnGsBPgJJll0hHJZ2FpZhLsAAZP7AAKDsSAEAASsAwAD9XkqWfwEWloYuwABk/sAAoOw/SpagAReWpy7AAGT+HJbGLsAAY+8BAAEWlu4WltkuwABTisAAoMrAAKEEtS6+BQDAAKEswACg7AbAAKELgbCXKpc+l+ABAIXlAAAAAQOXSZfgAAAAAAAAAGADwACcawE+AkmXTyEcl2MWl1MuwABk/8AAoO1IAQABKwDAAP1eSpdsARaXcy7AAGT/wACg7T9Kl4gBF5ePLsAAZP8cl6kuwABj7wEAARaX0RaXvC7AAFOKwACgysAAoQSF5b35AMAAoSzAAKDtBsAAoQyBsJgFmBmYpAEAmtAAAAABA5ghmKQAAAAAAAAAYAPAAJxrAT4CSZgnIRyYOBaYKy7AAGUAwACg7kgBAAErAMAA/V5KmEEBFphILsAAZQDAAKDuP0qYWgEXmGEuwABlAByYcC7AAGPvAQABFpiYFpiDLsAAU4rAAKDKwAChBJrQvfoAwAChLMAAoO4GwAChDYGwmMqY3pluAQCFpQAAAAEDmOeZbgAAAAAAAABgA8AAnGsBPgJJmO0hHJj/FpjxLsAAZQHAAKDvSAEAASsAwAD9XkqZCAEWmQ8uwABlAcAAoO8/SpkiAReZKS7AAGUBHJk5LsAAY+8BAAEWmWEWmUwuwABTisAAoMrAAKEEhaW99wDAAKEswACg7wbAAKEOgbCZmJmsmlgBAIU7AAAAAQOZuZpYAAAAAAAAAGADwACcawE+AkmZvyEcmdUWmcMuwABlAsAAoPBIAQABKwDAAP1eSpneARaZ5S7AAGUCwACg8D9KmfwBF5oDLsAAZQIcmh8uwABj7wEAARaaRxaaMi7AAFOKwACgysAAoQSFO732AMAAoSzAAKDwBsAAoQ+BsJp+mpKbIgEArE8AAAABA5qbmyIAAAAAAAAAYAPAAJxrAT4CSZqhIRyasxaapS7AAGUDwACg8UgBAAErAMAA/V5KmrwBFprDLsAAZQPAAKDxP0qa1gEXmt0uwABlAxya7S7AAGPvAQABFpsVFpsALsAAU4rAAKDKwAChBKxPvfwAwAChLMAAoPEGwAChEIGwm02bYZwSAQC1LwAAAAEDm2+cEgAAAAAAAABgA8AAnGsBPgJJm3UhHJuMFpt5LsAAZQTAAKDySAEAASsAwAD9XkqblQEWm5wuwABlBMAAoPI/Spu0ARebuy7AAGUEHJvYLsAAY+8BAAEWnAAWm+suwABTisAAoMrAAKEEtS++BgDAAKEswACg8gbAAKERgbCcPZxRnQIBALUrAAAAAQOcX50CAAAAAAAAAGADwACcawE+AkmcZSEcnHwWnGkuwABlBcAAoPNIAQABKwDAAP1eSpyFARacjC7AAGUFwACg8z9KnKQBF5yrLsAAZQUcnMguwABj7wEAARac8Bac2y7AAFOKwACgysAAoQS1K74CAMAAoSzAAKDzBsAAoRKBsJ0wnUSeBAEAtSoAAAABA51VngQAAAAAAAAAYAPAAJxrAT4CSZ1bIRyddRadXy7AAGUGwACg9EgBAAErAMAA/V5KnX4BFp2FLsAAZQbAAKD0P0qdoAEXnacuwABlBhydxy7AAGPvAQABFp3vFp3aLsAAU4rAAKDKwAChBLUqvgEAwAChLMAAoPQGwAChE4GwnimePZ6PAQCsdgAAAAEDnkWejwAAAAAAAABgA8AAnGsBSp5OATUAAAABAGADwACcawEWnk4uwABlB8AAoPUjHJ5bgADAUwPMSAEAASsAwAD9XheeTi7AAGUHHJ5fLsAAY+8BAAEWnocWnnIuwABTisAAoMrAAKEErHa9/QDAAKEswACg9YAAwFMDzAFgA8AAnGsGwAChFIGwnrmezZ8uAQC1MAAAAAEDntqfLgAAAAAAAABgA8AAnGsBSp7dATUAAAABAGADwACcawEWnt0uwABlCMAAoPYjHJ7vgADAUwRlSAEAASsAwAD9Xhee3S7AAGUIHJ75LsAAY+8BAAEWnyEWnwwuwABTisAAoMrAAKEEtTC+BwDAAKEswACg9oAAwFMEZQFgA8AAnGsGwAChFYGwn1OfZ5/yAQCsaAAAAAEDn2+f8gAAAAAAAABgA8AAnGsBPgJJn3UhHJ+GFp95LsAAZQnAAKD3SAEAASsAwAD9XkqfjwEWn5YuwABlCcAAoPc/Sp+oARefry7AAGUJHJ++LsAAY+8BAAEWn+YWn9EuwABTisAAoMrAAKEErGi9/gDAAKEswACg9wbAAKEWgbCgHKAwoNwBALUxAAAAAQOgPaDcAAAAAAAAAGADwACcawE+AkmgQyEcoFkWoEcuwABlCsAAoPhIAQABKwDAAP1eSqBiARagaS7AAGUKwACg+D9KoIABF6CHLsAAZQocoKMuwABj7wEAARagyxagti7AAFOKwACgysAAoQS1Mb4IAMAAoSzAAKD4BsAAoReBsKEEoRihugEAhcAAAAABA6EjoboAAAAAAAAAYAPAAJxrAT4CSaEpIRyhPRahLS7AAGULwACg+UgBAAErAMAA/V5KoUYBFqFNLsAAZQvAAKD5P0qhYgEXoWkuwABlCxyhgy7AAGPvAQABFqGrFqGWLsAAU4rAAKDKwAChBIXAvfsAwAChLMAAoPkGwAChGIGwoeCh9KKEAQCFhwAAAAEDof2ihAAAAAAAAABgA8AAnGsBPgJJogMhHKIVFqIHLsAAZQzAAKD6SAEAASsAwAD9XkqiHgEWoiUuwABlDMAAoPo/SqI4AReiPy7AAGUMHKJPLsAAY+8BAAEWoncWomIuwABTisAAoMrAAKEEhYe99QDAAKEswACg+gbAAKEZgbCiraLBo2gBAJ5tAAAAAQOizaNoAAAAAAAAAGADwACcawE+Akmi0yEcougWotcuwABlDcAAoPtIAQABKwDAAP1eSqLxARai+C7AAGUNwACg+z9Kow4BF6MVLsAAZQ0cozAuwABj7wEAARajWBajQy7AAFOKwACgysAAoQSebb30AMAAoSzAAKD7BsAAoRqBsKPHo9uklgEAtTQAAAABA6PrpJYAAAAAAAAAYAPAAJxrAT4CSaPxIRykChaj9S7AAGUOwACg/EgBAAErAMAA/V5KpBMBFqQaLsAAZQ7AAKD8P0qkNAEXpDsuwABlDhykWi7AAGPvAQABFqSCFqRtLsAAU4rAAKDKwAChBLU0vgsAwAChLMAAoPwGwAChG4GwpMik3KWwAQC1MwAAAAEDpPGlsAAAAAAAAABgA8AAnGsBPgJJpPchHKUVFqT7LsAAZQ/AAKD9SAEAASsAwAD9XkqlHgEWpSUuwABlD8AAoP0/SqVEARelSy7AAGUPHKVvLsAAY+8BAAEWpZcWpYIuwABTisAAoMrAAKEEtTO+CgDAAKEswACg/QbAAKEcgbCl4aX1psQBALU1AAAAAQOmCabEAAAAAAAAAGADwACcawE+AkmmDyEcpiwWphMuwABlEMAAoP5IAQABKwDAAP1eSqY1ARamPC7AAGUQwACg/j9KploBF6ZhLsAAZRAcpoQuwABj7wEAARamrBamly7AAFOKwACgysAAoQS1Nb4MAMAAoSzAAKD+BsAAoR+BsKbupv6nlgAAwABj8gAAAAEDpw+nlgAAAAEBAacXAAAAgJZgA8AA/esAAGADwACcawE+AUqnJAEfpy/AAJ3FAwADFqdVLsAAU4rAAKDKwAChBICna8BTCWsWp4cWp3IuwABTisAAoMrAAKEEhcC9+wAGwAChIIGwp5unq6g7AADAAGPtAAAAAQOnuqg7AAAAAQEBp8AAAACAlmADwAD6PwAAYAPAAJxrAT4BSqfNAR+n2MAAnc0DAAMWp/wuwABTisAAoMrAAKEEgKgSwFMJ4haoLhaoGS7AAFOKwACgysAAoQSFpb33AAbAAKEhgbCokKigqogAAMAAT4oAAAABA6iqqogAAAACAgKowgAAAMAAZCJgA8AAnGsAqN0AAADAAGQjYAPAAJxrAABgA8AAnGsBPgZJqO8cqP2AqPPAUwpZSAEAASsAwAD9XkqpBgGBqQ3AUwppP0mpHRypK4CpIcBTCllIAQABgakuwFMKaQDAAP1eSqk6AYCpQcBTClk/SalQHKlegKlUwFMKWUgBAAEWqWEuwABjNMAAoP8AwAD9XkqpcwGBqXrAUwppP0mpihypmYGpjsBTCmlIAQABFqmcLsAAYzTAAKD/AMAA/V5Kqa4BgKm1wFMKWT9JqcQiHKnSgKnIwFMKWUgBAAEWqdUunm3AAKEZAMAA/V4BHKnvgankwFMKaUgBAAEWqfIunm3AAKEZAMAA/V4+AUqqBwEWqg4unm3AAKEZP0qqJQEcqiwuwABj7wEAARyqXRaqSC7AAFOKwACgysAAoQSXAgIAAhaqbYCqY8BTClmCkMAAnHEWqn6BqnPAUwppgpDAAJxxAL48AMAAoSwGwAChIoGwquuq8KtQAADAAGP9AAAAAQOrA6tQAAAAAgICqxQAAACBVGADwACcawCrKAAAAKzDYAO95wAAYAPAAPo/AT4BSqs0ASEcq0UWq0CAqzvAUwvsgpDAAJxxSAEAAYGrSMBTC/oAwAD9XgbAAKEkgbCrVataq/MAAMAAZRLAAKDKAAAAAQOraqvzAAAAAQEBq3sAAACCkGADwACcawAAYAPAAPo/AUqrigEiJauPgKuKwFMMXmADwACdzgAWq+Icq8YWq7EuwABTisAAoMrAAKEErW8BAAEWq9IUq83AUwxeAAFgA8AAnc7AAGNKwACd0AC+ILUavdcGwAChJ4GwrIesl7LBAADAAGP4AAAAAQOsobLBAAAAAwICrLIAAACCkGADwACcawCswQAAAISwYAPAAGJmAAGs2QAAALXdYAPAAPo/AWqs5WADwAD6P3dgA8AAnGsBPghOrQAAAADAAGOOYAO95wBJrQ8WrR6BrRPAUwz2uZ3AAGJsSq0mAYCtLcBTDOg/Sa03Fq1Gga07wFMM9sAARhfAAGJqPgNJrV6CrWLAUw0FSq1uAYCtdcBTDOg/Sa34HK38LsAAZRLAAKDKAQABgK4NwFMM6ADAAKEkSq4UAYCuG8BTDOg/PYuuJ8BTDSccrkgWrjMuwABTisAAoMrAAKEEtUABAAEWrmAWrlQunm3AAKEZgpDAAJxxAL4WSa5yFq6Bga52wFMM9rNcwABibT4CTq6orrIAAJ0/YAPAAGKNASauqAGBrrTAUwz2YAPAAGKNSa7GHK7cFq7UhK7KwFMN95YmwABij0gBAAEWrvsWruwWrt8utarAAKDKwACg27NAwABNM5rMuE4AwAD9Xj4DSa8Sgq8WwFMNBUqvIgGArynAUwzoP0mvNxyvOy7AAGUSwACgygEAAYCvTMBTDOgAwAChJEqvUwGAr1rAUwzoPz2Lr2jAUw0nHK+JFq90LsAAU4rAAKDKwAChBLVAAQABFq+hFq+VLp5twAChGYKQwACccQC+Fj4BPYuvv8BTDSccr+wWr9cuwABTisAAoMrAAKEEtTwBAAEWsAuEsAHAUw33libAAGKPAL4SSbAoIhawN4GwLMBTDPa6nsAAYm4BFrBPgbBEwFMM9rmcwABibz4BPYuwZ8BTDScWsIAWsHMuhTvAAKEOgpDAAJxxSbCRFrCggbCVwFMM9rmewABicj4BSrDxAYCw+MBTDOg+AkAWsSOBsRjAUwz2o6jAAGJwsRixMQBKsWUBgLFswFMM6EmxfIKxgMBTDQU+AT2LsZTAUw0nHLG1FrGgLsAAU4rAAKDKwAChBLVBAQABg7HBwFMNJwC+Fz9JsdcWsgMcsfAWsdsuwABTisAAoMrAAKEEtUYBAAEWsf2AsfjAUwzogpDAAJxxAL4dtDa91UqyFQGAshzAUwzoP06yNrI+AACo+mADwACcawEfskzAAJ3XAwADFrJiLsAAU4rAAKDKwAChBICyeMBTDOiDsn7AUw0nAD0csp0Wso4uwABPzcAAoOdWAQABhLKhwFMP/wDAAPy6SrKvAYSytsBTD/8GwAChKIGwssay37RFAAC37AAAAAEDsvm0RQAAAAEBAbMAAAAAgO1gA70MAABgA8AAnTQBPgFKsxEBHLMyFrMYLsAAT97AAKDfmR0CAAKAsz7AUxCCNLNJA7NJtEAAAAAAAAAAYAPAAJ00AT4DTrNts30AAMAATxlgA8AAnTQBHLOSFrOJLqUbwACg3sAAT+kDAAMWs8AuwABTisAAoMrAAKEEgLPWwFMQgi4AwACgzj0ctAcWs+4uwABk+cAAoMrAAKDcVgEAAYG0C8BTENAAwAD8ukq0IwGBtCrAUxDQAMAA/PUGwAChKYGwtEq0T7TcAADAAE8hAAAAAQO0Y7TcAAAAAQEBtHAAAACBpmEDAmADvQxgA8AAnTRcAABcAT4BPRy0zha0tC7AAE/ewACg34P4AQABgLTWwFMRaADAAPz5BsAAoSqBsLThtPe12QAAwABPHwAAAAEDtQ612QAAAAEBAbUcAAAAgmZgA7zTAABgA8AAnMcBPgJAIRa1OYC1MsBTEcaEGrzgtTG1QwEetU21wwIAAoC1VsBTEcYktYMDJ8AAZROAtXvAUxHGJ4FqAEq1iwE1AAAAAQBdA8AA/NoCYAO802ADwACcxwEWtZIuwABP3cAAoOA1AAAAAQBgA7zTAYC1qcBTEcY1AAAAAQBgA8AAnMcBHLWogbWowFMSGUsBAAGCtajAUxI9AMAA/O4jHLWxgwDAUxJPSAEAASsAwAD9XjUAAAABAGADwACcxwEctbUuwABlFMAAoMoBAAGAtc7AUxHGAMAAoSU1AAAAAQBcARy1qIG1qMBTEhmAvwIAAoK1qMBTEj2EAMBTEooAwAD874QAwFMSioMAwFMSTwFgA8AAnMcGwAChK4Gwtd6147ZrAADAAE8cAAAAAQO19LZrAAAAAQEBtgEAAACBpmEDAmADvNNgA8AAnMdcAABcAT4BPRy2XRa2Ri7AAE/dwACg4IP4AQABgLZlwFMTDwDAAPz5BsAAoSWBsLZwtoa3fwAAwABlFMAAoMoAAAABA7aet38AAAABAQG2rAAAAIJmYAO80wAAYAPAAJzHAT4DTrbQtuAAAMAATxlgA8AAnMcBHLbzFrbqLqUbwACg3sAAT+wCAAIWtw8uwABTisAAoMrAAKEEgLclwFMTcQDAAKDNPRy3Sxa3Mi7AAGT5wACgysAAoNxWAQABgbdPwFMTiADAAPy6SrdlAYG3bMBTE4gGwAChLIGwt8O327iIAADAAGPvAAAAAQO37biIAAAAAQEBt/wAAACsw2ADvecAAGADwACdrQE+AkAhHLgUgLgPwFMUGkgBAAErAMAA/V64D7gbAEq4IgEmuCIBHLg3FrgpLsAAT2DAAKDlmR0CAAKAuEPAUxQaNLhJA7hJuIMAAAAAAAAAYAPAAJ2tAT4BSrhUAR+4X8AAnbwBAAGAuHfAUxQaAADAAPz1YAPAAJ2tBsAAoS2BsLiNuJS6JwAAwABPvQAAAAEDuLC6JwAAAAEBAbjAAAAAgmpgA7zoAABgA8AA/esBPgVOuOe47AAAgVRgA8AAnLUBHLjuLsAATx8BAAGAuQbAUxTJAMAAoSpOuRm5HQAAn/dgA8AA/esBJwA9HLkwFrknLqUbwACg3rMdAgACgLlBwFMUyTS5SwO5S7nyAAAAAQEBuVIAAACA7WADvQwAAGADwAD9DgE+Ak65dbl6AACCkGADwACcawEcuXwut+wBAAGDuZfAUxVAAMAAoSg9irmpwFMVBxy5rYK5qcBTFQdkAQABJLnrBCMWubeCubPAUxUHgVXAAP3xJ4PXJ4GLAWADwAD96xa504S5zsBTFVeCkMAAnHEngNkWueWDudvAUxVAgL28rwDAAP4AAMAAoM89irn5wFMVBxy5/YK5+cBTFQdkAQABJLoTAifAAEBoFroNgboIwFMU4IKQwACccQDAAP4ASroZAYK6IMBTFQcGwAChLoGwuiy6PLrbAAC2GAAAAAEDukq62wAAAAEBAbpXAAAAmcpgA7zBAABgA8AAnGsBPgJAHLpyFrppLqUbwACg3sAAT+MBAAGAuoPAUxY9AMAAoNW6abqHAEq6jgEcupUuwABj7wEAARy6vRa6qC7AAFOKwACgysAAoQS1PAEAAYC60sBTFj0AvhIAwAChLAbAAKEvgbC64Lrwu5EAALYXAAAAAQO6/7uRAAAAAQEBuwwAAACZymADvMEAAGADwACcawE+AkAcuycWux4upRvAAKDewABP4wEAAYC7OMBTFs8AwACg1bseuzwASrtDARy7Si7AAGPvAQABHLtyFrtdLsAAU4rAAKDKwAChBLU7AQABgLuIwFMWzwC+EQDAAKEsBsAAoTCBsLuWu6a8QQAAthYAAAABA7uyvEEAAAABAQG7vwAAAJnKYAO8wQAAYAPAAJxrAT4CQBy72ha70S6lG8AAoN7AAE/jAQABgLvrwFMXYQDAAKDVu9G77wBKu/YBHLv9LsAAY+8BAAEcvCUWvBAuwABTisAAoMrAAKEEtTkBAAGAvDjAUxdhAL4PAMAAoSwGwAChMYGwvEa8VryGAAC2FQAAAAEDvGK8hgAAAAAAAABgA8AAnGsBPgFKvGsBFrxyLsAAYzTAAKD/BsAAoTKBsLyLvJC8zgAArW8AAAABA7yWvM4AAAABAQG8pwAAAIKQYAPAAJxrAABgA8AA+j8BPgFKvLMBHLy/gLy6wFMYLUgBAAEWvMIuhXDAAKEGAMAA/V4GwAChM4GwvNO848AAQksAAMAAY+MAAAABA7zvwABCSwAAAAUDBb0HAAAAgpBgA8AAnGsAvRkAAACD7mADglIAvSwAAACt4WADvNMAvU4AAACa2WADwACcawFqAGADwAD9Dnm9XwAAAGFgA8AA/AUBagBgA8AA/Q55AGADwACcawE+DUAcvX4WvXUupRvAAKDewABP5gEAAYG9jMBTGJoAwACg0r11vZEATr2kvbMAALEbYAO8wQEWvdEWvcIWvbUutarAAKDKwACg27NAwABNM7EbuGpOveq99wAAtT5gA8AA+j8BIiIhHL4Ihb35wFMZEEgBAAErAMAA/V4AHL43Fr4oFr4bLrWqwACgysAAoNuraMAATTmqCAEAAYW+RsBTGRAAwABxAAAWvr4cvoMWvmEuwABTisAAoMrAAKEEtUQCAAIWvpuAvpbAUxiMgpDAAJxxhb6hwFMZEAC+GrQ2vdVOvtm+4QAAhB1gA8AA+j8BHL7uFr7pgL7kwFMYjIKQwACccUgBAAEWvwYWvvEuwABTisAAoMrAAKEEtS++BgDAAP1eTr8fvycAAMAAVDZgA8AA+j8BIiIcvzQWvy+AvyrAUxiMgpDAAJxxSAEAARa/TBa/Ny7AAFOKwACgysAAoQS1K74CAMAA/V4Bh79mwFMZyQGGv3nAUxk8Tr+Qv6IAAMAAZRVgA8AA+j8BIoe/pMBTGckBhr+vwFMZPE6/xr/VAADAAGNXYAPAAPwFASMUv9fAUxoMCACEv+HAUxjJKwFgA8AA/AVOwABAAsAAQBIAAMAAZRZgA73nASMUwABAHMBTGmMJABbAAEA8g8AAQDDAUxiygpDAAJxxFsAAQE8WwABAQy6ebcAAoRmCkMAAnHEBYAO9507AAEBnwABAbAAArMNgA73nARzAAECDFsAAQG4uwABTisAAoMrAAKEEtWcFAAUWwABApoDAAEChwFMYjIKQwACccYHAAECswFMYmoLAAECywFMYphTAAEC9wFMasAsAFMAAQM7AUxqFCgAAvkNOwABBBcAAQQ0AAJYmYAPAAJ3/AR/AAEEbwACeBAMAAxbAAEFKLsAAU4rAAKDKwAChBBbAAEFgLqqtwAChBYPAAEFvwFMYsgA9F8AAQYkUwABBgcBTG20NAKk9FMAAQZTAUxpjCQDAAJ3aPRzAAEG7FsAAQawuwABPzcAAoOdWAQABFMAAQb/AUxttDQAAwAD8ukrAAEHNATUAAAABAF0DwAD82gJgA4JSYAPAAJ3vARbAAEHULrbLwACg4TUAAAABAGADglIBgcAAQePAUxiaNQAAAAEAYAPAAJ3vAR/AAEHvwACd/gUABRbAAEIMLsAAU4rAAKDKwAChBBbAAEIiLqqtwAChBRTAAEIxwFMbAAwAFMAAQjfAUxttDQCEwABCQMBTGMkANQAAAAEAXAEcwABB4hTAAEHiwFMcBQ4AgL8CAAIUwABB4sBTHCkPABQAwFMcPRAAAMAA/O8UAMBTHD0QAAbAAKE0gbDAAEM1wABDRcAARBcAAMAAT8sAAAABA8AAQ1TAAEQXAAAAAQEBwABDZAAAAJYmYAO86AAAYAPAAJxrAT4DTsAAQ4PAAEOKAACBdmADwACcawEfwABDkMAAnoEDAAMWwABDsC7AAFOKwACgysAAoQQWwABDxi6qrcAAoQWAwABD1cBTHPwAPRzAAEP1FsAAQ+MuwABPpsAAoORWAQABgcAAQ/nAUx0VAMAA/alKwABEBgGBwABEDcBTHRUGwAChNYGwwABEHMAARCzAAEcLAADAAGPlAAAAAQPAAEQ3wABHCwAAAAQDBMAARE8AAACCkGADwACcawDAAERhAAAAg+5gA4JSAMAARHQAAACt4WADvNMAwABElgAAAJrZYAPAAJxrAWoAYAPAAP0OeQBgA8AAnGsBPghAHMAARLoWwABEsS6lG8AAoN7AAE/lAQABgcAARMfAUx3NAMAAoNPAAESxwABEzABOwABE2MAAROAAAIQdYAPAAPo/ARzAAETsFsAAROeAwABE4sBTHb2CkMAAnHFIAQABFsAARQQWwABE7y7AAFOKwACgysAAoQS1ML4HAMAA/V5OwABFJcAARTUAAMAAZRZgA73nASOEwABFP8BTHj0WwABFVYPAAEVJwFMd6YKQwACccRbAAEVoFsAARVwunm3AAKEZgpDAAJxxAWADvedOwABFgMAARYUAAKzDYAO95wEcwABFnBbAAEWHLsAAU4rAAKDKwAChBLVtBAAEFsAARbmAwABFtMBTHb2CkMAAnHGBwABFv8BTHc2CwABFxcBTHduFwABF0MBTHo4AvkdOwABGAsAARgoAAJYmYAPAAJ4hAR/AAEYQwACeJgMAAxbAAEY1LsAAU4rAAKDKwAChBBbAAEZLLqqtwAChBYPAAEZawFMd6QA9F8AARnSHwABGbMBTHzypPYTAAEZ/wFMePcAAndo9HMAARpwWwABGjS7AAE/NwACg51YBAAGHwABGoMBTHzwAwAD8ukrAAEauATUAAAABAF0DwAD82gJgA4JSYAPAAJ4UARbAAEa1LsAAT6PAAKDiNQAAAAEAYAOCUgGBwABGw8BTHc01AAAAAQBgA8AAnhQBH8AARtfAAJ4gAwADFsAARuouqq3AAKEFhsAARvnAUx7ch8AARv/AUx88ADUAAAABAFwBHMAARsIUwABGwsBTH84IAIC/AgACFMAARsLAUx/0CQAUAMBTIAgKAADAAPzvFADAUyAICgAGwAChNoGwwABHEMAARyDAAE+QAADAAGPqAAAAAQPAAEcrwABPkAAAAAUDBcAAR0sAAACCkGADwACdrQDAAEddAAAAg+5gA4JSAMAAR3AAAACWJmADvNMAwABHlgAAAMAAY+hdA8AA/KkBYAPAAJxrAWoAYAPAAP0OecAAR7YAAADAAGPpXQPAAPypAWADwACcawFqAGADwAD9DnkAYAPAAJxrAT4VQBzAAEfZFsAAR9AupRvAAKDewABP5AEAAYHAAEfmwFMguADAAKDUwABH0MAAR+sAQBzAAEgJFsAASAKDwABH+cBTINRhwAD82EgBAAEWwABIF4TAAEgMwFMg9mHAAPzYAMAA/SjAAEf5wABIHQBOwABIKcAASDEAAMAAVDZgA8AA+j8BHMAASD4WwABIOYDAAEg0wFMgqIKQwACccUgBAAEWwABIVhbAAEhBLsAAU4rAAKDKwAChBLUxvggAwAD9Xk7AAEh6AAAAhcxgA8AAnGsATsAASIMAAACFzWADwACcawBFwABIkgHAAEibwABInQAAYmADwAD8BQGTARzAAEikFMAASKLAUyILCABjAQABFsAASK+DwABIpsBTINRhwAD82ADAAP0yARXAAEi5wFMiCwgcwABItxTAAEi5wFMiCwgAZAEAAZQAwAD9Kj4ETsAASNTAAEjZAACCkGADwACcawEcwABI44PAAEjbwFMg1EsBAAEUwABI5MBTIgsIAADAAPy4PY7AAEjuwFMh5CMcwABJAIbAAEj4wFMh5EgBAAErAMAA/V4cwABJFC7AAGPgBAADKysUwABJLMBTInMJAAHAAGN7KsAAoTkcwABJTC7AAGPhAwADKybAAEleAYbAAElewFMh5GADwACeXRTAAElnwFMicwkAAMAAoTwBYAPAAJ5dPRXAAEl1wFMicwkcwABJhoTAAEl8wFMg9ksBAAEUwABJh8BTIgsIAADAAPy4PY/AAEmRwFMh9SMcwABJp4fAAEmdwFMh9UgBAAErAMAA/V4cwABJuy7AAGPgBAADKysUwABJ08BTInMJAAHAAGN7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AACwqAFqwABCTWADwAD9UQIAAAEDwABCZ8AAREcAAAABAQHAAEJtAAAAg+5gA8AASCgAAGADwAD96wE+B07AAEKLwABClgAAuRVdA8AA/KkBYAPAAEVGARbAAEKlFsAAQpguuMrAAKFhuRXAAEVTTsAAQrzAAELFAACix2ADwAD96wEkwABC3QIng9UWwABC2RzAAELVgcAAQsvAU3SySwEAAZMAwAD8uLOawABFSE7AAELqwABC9QAAujtgA8AA/esBJ4eNScAAQwMhHMAAQxcWwABDDIDAAEMHwFN0l7o7wABIK0gBAAErAMAA/V4+AT2LwABDKMBTdSQkwABDSwIng9UWwABDRxzAAENDgcAAQznAU3SySwEAAZQAwAD8uLOawABFSD9OwABDX8AAQ2wAAKLEYAPAAP3rASeHjUnAAEN6IRzAAEOQFsAAQ4OAwABDfsBTdJeixMAASCxIAQABKwDAAP1ePgE9jMAAQ6HAU3WdJMAAQ8oCJ4PVFsAAQ8YWwABDuYDAAEO0wFN0l6LEwABILLOawABFSD9KwABD1wEkAAknwABlkoLAAEPlwFN05CfAAGWTg8AAQ/fAU3UkJ8AAZZSEwABEDcBTdZ0ngYsnwABllRbAAEQ/FsAARDqBwABEL8BTdLKB6MAA/I6zmsAARUgGwAChroGxwABETMAARF/AAETiAAC4lQFqwABETWADwAD9UQIAAAEDwABEZsAAROIAAAABAQHAAERrAAAAg+5gA8AASV8AAGADwAD96wE+Ak7AAER+wABEgwAAgpBgA8AA/esBHMAARJkWwABEioDAAESFwFN2obqLwABJZCMAAAAAwAD9X0rAAESpASTAAETeBCfAAGWWHMAARLcuwABlKQEAARbAAETIgMAARMPAU3ahgmvAAElqAMAAoWcnupaBwABE2cBTdrwGwAChr4GxwABE58AARPrAAEWmAAC4lgFqwABE6GADwAD9UQIAAAEDwABFD8AARaYAAAABAQHAAEUiAAAAg+5gA8AASXwAAGADwAD96wE+Ak7AAEU1wABFOgAAgpBgA8AA/esBHMAARVAWwABFQYDAAEU8wFN3arqLwABJfiMAAAAAwAD9X0rAAEVgASTAAEWiBCfAAGWXHMAARXwuwABlKQEAARzAAEWTFsAARY2AwABFiMBTd2qCUcAARYNLAQABkwDAAPy4AMAAoWcnupaBwABFncBTd4UGwAChsIGxwABFq8AARb7AAEdWAAC4sgFqwABFrGADwAD9UQIAAAEDwABF0cAAR1YAAAABAQHAAEXiAAAAg+5gA8AASZEAAGADwAD96wE+BU7AAEX1wABGAgAAuTBgA8AA/esBHMAARgQuwABlKQEAARbAAEYVgMAARhDAU3hCuTDAAEmcAMAAoWdOwABGLwAAAMAAZHpgA8AA/esAScAARjkcwABGUBbAAEZJFsAARkKAwABGPcBTeEKCUcAARYNhwAD82EgBAAGVAMAA/Sg+AT2KwABGXsBTeJckwABGiAIngNkcwABGaS7AAGUpAQABFsAARoEWwABGeoDAAEZ1wFN4QoJRwABFg4HowAD8jgDAAKFnPgJAHMAARrcWwABGsBbAAEapgMAARqTAU3hCglHAAEWDYcAA/NhIAQABlADAAP0owABGpMAARrsAPYrAAEbEwFN4lycATsAARuDAAEblAACCZ2ADwAD96wEcwABG5y7AAGWYwAChQQEAAYDAAEb7wFN4QgDAAKGySsAARwYBJMAAR1IHJ8AAZZmDwABHH8BTeWcngNmBwABHJcBTeF0ngZ0WwABHPIDAAEc3wFN4QrlwwABFvYLAAEdNwFN4lwbAAKGygbHAAEdbwABHYsAAR/4AAMAAZZjAAKFBAAAAAQPAAEd1wABH/gAAAAEBAcAAR4YAAACD7mADwABJkQAAYAPAAP3rAT4DScAAR5IWwABHm4DAAEeWwFN6D7qiwABJnUrAAEeoASe6mz9JwABHwRbAAEfKgMAAR8XAU3oPuqPAAEmeSsAAR9cBJ7qcP0rAAEfwASeA9AbAAKG0gbHAAEgDwABIFsAASR0AALizAWrAAEgEYAPAAP1RAgAAAQPAAEgpwABJHQAAAAEBAcAASDoAAACD7mADwABJrQAAYAPAAP3rAT4ETsAASE3AAEhaAAC5MGADwAD96wEcwABIXC7AAGUpAQABFsAASG2AwABIaMBTeq65MMAARjAAwAChZ0AcwABImhbAAEiTFsAASIyAwABIh8BTeq6CUcAARYNhwAD82EgBAAGUAMAA/SjAAEiHwABIngBOwABIrMAASLEAAIJnYAPAAP3rARzAAEizLsAAZZrAAKFBAQABgMAASMfAU3quAMAAobNKwABI0gEkwABJGQYnwABlm4LAAEjrwFN7OieA2YHAAEjxwFN6ySeBnRbAAEkIgMAASQPAU3quuXDAAEW9BsAAobOBscAASSLAAEkpwABJ0QAAwABlmsAAoUEAAAABA8AASTzAAEnRAAAAAQEBwABJTQAAAIPuYAPAAEmtAABgA8AA/esBPgNJwABJWRbAAEligMAASV3AU3vZuq3AAEnDSsAASXcBJ8AAZZw/ScAASY4WwABJl4DAAEmSwFN72bquwABJwkrAAEmsASfAAGWdP0rAAEnDASeA9AbAAKG1gbHAAEnWwABJ6cAASn0AALi0AWrAAEnXYAPAAP1RAgAAAQPAAEn8wABKfQAAAAEBAcAASg0AAACD7mADwABJxgAAYAPAAP3rAT4CTsAASiDAAEotAAC5MGADwAD96wEcwABKLy7AAGUpAQABFsAASkCAwABKO8BTfHy5MMAARjAAwAChZ0rAAEpTASTAAEp5AifAAGWegcAASmzAU3yXBsAAobaBscAASoLAAEqVwABLtgAAuLUBasAASoNgA8AA/VECAAABA8AASqPAAEu2AAAAAQEBwABKrwAAAIPuYAPAAEnSAABgA8AA/esBPgRAHMAAStUWwABKzhbAAErHgMAASsLAU30gglHAAEWDYcAA/NiBawEAAZUAwAD9M8AASsLAAErZAE7AAErnwABK7gAAgXZgA8AA/esBJMAASzsEJ8AAZZ8cwABLBi7AAGUpAQABFsAASxeAwABLEsBTfSC5MMAARjAAwAChZye6lhbAAEswgMAASyvAU30gurPAAEnUScAAS0EhHMAAS1IWwABLSoDAAEtFwFN9ILq3wABJ5EgBAAErAMAA/V4+AT2JwABLY8BTfXMcwABLaoHAAEtjwFN9c2QBAAEkwABLmQInwABloBzAAEt+LsAAZSkBAAEWwABLj4DAAEuKwFN9ILq3wABJ5ADAAKFnAMAA/gA/SsAAS6UBgcAAS6zAU31zBsAAobeBscAAS7vAAEvOwABMMgAAuKUBasAAS7xgA8AA/VECAAABA8AAS+LAAEwyAAAAAQEBwABL9AAAAIPuYAPAAEnpAABgA8AA/esBPgFKwABMAAEkwABMLgInwABloRbAAEwggMAATBvAU36RuTDAAEYwBsAAobiBscAATDfAAExKwABM2wAAuLcBasAATDhgA8AA/VECAAABA8AATF7AAEzbAAAAAQEBwABMcAAAAIPuYAPAAEqzAABgA8AA/esBPgJOwABMgMAATIcAAIJRYAPAAP3rARzAAEymHMAATJUWwABMjoDAAEyJwFN/BoJRwABFg4CrAQFgA8AA/esBFsAATJkuwABlKcAAoWcAwAD8clgBAAEngYsAwAD8e0rAAEy2ASTAAEzXAifAAGWigcAATNDAU38hBsAAobmBscAATODAAEzzwABNpQAAuLgBasAATOFgA8AA/VECAAABA8AATQzAAE2lAAAAAQEBwABNIwAAAIPuYAPAAEq8AABgA8AA/esBPgJOwABNM8AATToAAIJRYAPAAP3rARzAAE1ZHMAATUgWwABNQYDAAE08wFN/zIJRwABFg4CrAQFgA8AA/esBFsAATUwuwABlKcAAoWcAwAD8clgBAAEngYsAwAD8e0rAAE1pASTAAE2hBCfAAGWjFsAATY6AwABNicBTf8yCbMAASr4ng9yBwABNmsBTf+cGwAChuoGxwABNqsAATb3AAE6KAAC4uQFqwABNq2ADwAD9UQIAAAEDwABN1MAATooAAAABAQHAAE3pAAAAg+5gA8AAStkAAGADwAD96wE+Ak7AAE35wABOAAAAglFgA8AA/esBHMAATh8cwABODhbAAE4HgMAATgLAU4CpglHAAEWDgKsBAWADwAD96wEWwABOEi7AAGUpwAChZwDAAPxyWAEAASeBiwDAAPx7SsAATi8BJAAHJ8AAZaQWwABOUoDAAE5NwFOAqbr3wABK5ieA2RbAAE5ngMAATmLAU4CpuvTAAErcJ4NJgcAATn7AU4DEJ4MhBsAAobuBscAATo/AAE6iwABO8gAAsHwBasAATpBgA8AA/VECAAABA8AATqzAAE7yAAAAAQEBwABOtAAAAIPuYAPAAEjZAABgA8AA/esBPgFKwABOwAEkwABO7gInwABlpRzAAE7RLsAAZSkBAAEcwABO6BbAAE7igMAATt3AU4GdglHAAEWDSwEAAZMAwAD8uADAAKFnBsAAobyBscAATvfAAE8KwABPdAAAuLYBasAATvhgA8AA/VECAAABA8AATxTAAE90AAAAAQEBwABPHAAAAIPuYAPAAEjiAABgA8AA/esBPgFKwABPKAEkwABPcAQnwABjiCMWwABPPIDAAE83wFOCM7CjwABI5CeDiCcAAWADwAD96yeDVRzA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AMAAXIIAAAABA4qEjE0AAAACAgKKkwAAALwyYAPAAIhBAIqgAAAAgaZhAwJgA8AAlRxgA8AAk9tcAABcAT4CT4rRitYAAAHAAGbOYQMBYAPAAKK0XAADiuSLTwAAAAEBAYruAAAAwABmz2ADwACitAAAXAE+AkmLAByLDYOLBMBUIRlIAQABKwDAAP1eSosWAD89HIslgYskwFQg2iACAAIWiy+DiybAVCEZgL3AAKK2Fos+g4s1wFQhGYJrwACitwAARotWi5SLZwAAAJnKYAO8wQAci3WAi27AVCDMwABXowEAARaLjRaLgS7AAGbKwACiscAAosWDYsAA/PwAwACIRD4EToumi7AAAMAAXH5gA8AAoroBHIu9FouyLsAAZsrAAKKxwACixUsBAAGDi77AVCGAAMAA/O49HIvYgovKwFQg+iABAAEWi+OEi9nAVCG+wABmycAAorwAAD0cjACCi/LAVCD6IAEAARaMC4SMAcBUIb6E6sAAor0AAD0cjC6CjCDAVCD6IAEAARaMOYSML8BUIb6tdMAAor4AAAAAVB4sAFQfAgBUH9YAVCCqAFQiVwAAAAQCwACizYG5jFKMWK4cA8AAW/8AAAFgAcAA/VEAAAcEwACi0IG5jIaMlQm0BMAAorEAYAO4TAAEwACi0YG5jK6MvQmzyMAAorEAYAO74QAEwACi1oG5jNeM4gmvBQBgA8AAXLgABMAAotKBuYzyjPgJt5zAAKKxAGADwABjyAAEwACi04G5jRWNHwnAAFwLwACisQBgA8AAdiEABMAAotSBuY09jUgJwABTdMAAorEAYAPAAHZjAATAAKLVgbmNdI2GCcAAZtDAAKKxAGADwACi4AABBcAAot+BuY2LjYuOhQAAAAONn46FAAAABgYGjaUAAAS0BGADuEwAjbsAAASzyGADu+EAjdcAAASvBWADwABcuACN6QAABLecYAPAAGPIAI32AAAEwABcC2ADwAB2IQCOBwAABMAAU3RgA8AAdmMAAGADwACizQE/CAgBwACi0IAAwFQjXggBwACi0YEAwFQjaggBwACi1oIAwFQjdggBwACi0oMAwFQjhAgBwACi04QAwFQjkggBwACi1IUAwFQjoggAwACi1R+ONcAAovICAAKAjmTAVCNegY51wFQjagAJAY2LwAD9ZwAAAAAFBsAAotiBuZH2kgmh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DknAAEToHMAAROwuwABnBAEAAYDAAET/wFR3vwDAAKN4PgE9HMAARRsWwABFDy7AAFPHwACjXoC/AgACgMAARRzAVHe/gcAARSXAVHfNAMAA/O9JwABFNxzAAEU7LsAAU9gBAAGAwABFQ8BUd78AwACjej4HTsAARV/AAEVoAAC/4mADvOUBHMAARXwWwABFai7AAGbxwACjX0sBAAGAwABFfcBUd78AwAD87kAhHMAARZuDwABFksBUeRJIAQABKwDAAP1ewABFksAARaIATsAARbQAAADAAGcKYAPAAIVVAEnAAEXEJcAARdGDwABFyMBUeRJgA8AAfTo+AT2MwABF7MBUeWwWwABGABTAAEX3wFR5EgMBYAPAAH06wABI4sAAfT0/QCEcwABGI4TAAEYawFR5bEgBAAErAMAAhVzAAEYawABGKgBOwABHQsAAR0YAAMAASOJgA8AARX0BHMAAR0guwABELgEAAYTAAEdSwFR5bADAAKN9PRzAAEdrFsAAR2MuhCHAAKNgVgEAATXAAEdzAAABAGADwABG+AEfwABHc8AARwMEAAQWwABHfS7AAFOKwACjW8AAo2+DwABHk8BUeRKFwABHncBUeeaBwABHosBUd80ANQAAAAEAWwEXwABHs4bAAEexwFR6LaVhgsAAR8fAVHfewABFgIYAwFR6LQDAAHuBPgNAHMAAR/UuwABnBsAAo1sBAAGAwABIDcBUd78AwACjfMAAR/XAAEgTAE7AAEgowABIMwAAwABnC2ADwABIcAEcwABINS7AAGcMAQABgMAASD7AVHe/AMAAo389HMAASFQWwABITC6EIcAAo2BWAQABNcAASFwAAAEAYAPAAEc9AR/AAEhcwABHRQQABBbAAEhmLsAAU4rAAKNbwACjb4DAAEh8wFR3v4PAAEiDwFR60oHAAEiPwFR3zQA1AAAAAQBbARfAAEighMAASJ7AVHsZpWGCwABItMBUd97AAEWAhADAVHsZAMAAe4EGwACjgoG9wABRIMAAUSXAAFLRAADAAFRNAAAAAQPAAFEuwABS0QAAAAICAsAAUUgAAADAAFRQYAPAAIU8AMAAUWQAAAClYWADwABB4QAAXAE+AUnAAFF9FsAAUYqAwABRgcBUe77AAFZPwACFQD4BPRzAAFKgLob6AgACgMAAUqvAVHu+gcAAUrXAVHvQ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AGK5AAbAAKTtgVfAAEXJwABFzsAARpEAArMdAAAAAQPAAEXewABGkQAAAAQDA8AARfUAAACzmWADwABx7ADAAEYaAAAAtKBgA70PAMAARjkAAACBpmEDA2ADwABiZmADwAD962ADwABg0lwAAcAARoAAAACGTmADwAD6PwFqwABGimADwAD6PwBcAAAAVQS1AFUE9wBVBUAAVQXHAAAAAwLAAKTwgVfAAEaWwABGpcAASmwHwABnewAAAWABwAD9UQABYAHAAKTpAQTAAKTzgVfAAEcbwABHKRipX8AApA8AXQPAAPypAWADwABiuQErAQXAAKT5AAAAAAQAAAMAAAAAAAAAAABgA8AApPABPwEJAQDAAP1nAAAAAAIGwACk9YFXwABG4MAARvTAAEcAAQLAAEBjAAAAAQPAAEcAwABHAAAAAAAAAABgA4SDAAbAAKT3gVfAAEcuwABHUcAASmoAALMEAWrAAEcvYAPAAP1RAgAAAQPAAEdpwABKagAAAAEBAcAAR5AAAAizmWADwAB9wAAAXQPAAPypAWADwABiuQE+AknAAEeiHMAAR7UWwABHpi6pX8AApA/AAKTzSAEAASsAwAD9Xj4BScAAR8YWwABH5hbAAEfXFsAAR8ouwABAY8AApPWEvoSIgVXAAPyLPgE9F8AAR/kuqV/AAKQPasAASApdA8AA/KkBYAPAAGK5wAFaoMAApPM+Ak7AAEhJwABIUAAAhFJgA4JSARbAAEhfFsAASFIuwABAY8AApPWEUoJYScAASG8iJcAASHqBwABIc8BVB1pgA4OpASIlwABIo4HAAEicwFUHWmADg+oAHMAASNIWwABIzRTAAEjGwFUHWgEBYAOD6oJng+1IAQABasAASOZgA4QngdEAwAD9Xj4BPRfAAEj8LqlfwACkD2rAAEkNXQPAAPypAWADwABiucABWqDAAKTzPgE9F8AASUQuqV/AAKQPHMAASiscwABJgBbAAEliFsAASVUuwABAY8AApPWEvoSIgKsBAWADwABiuQE0wABJlgPAAEmWwABKKQAAAAEBAcAASagAAACevWADiU8AAGADwABiuQE+AUrAAEnFASbAAEnFARzAAEnogMAASczAVQbAwABMPQEAAR/AAEn4iU4BAAGCwABKDcBVCFgAAMAAfiNgA8AAYrkAwAD8coCtAAAAAMAA/H3A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wABOssAAVfM3wABnfgAAAWABwAClAQABYAHAAKT6AAEFwAClEgAAAAAEAAADAAAAAAADAwMAAAAAg+5bAAAAAADAAExLWwAAAAAAwABWc1sAAGADwAClCwE/AQkAAMAApQoDAAOAAMBVD/2BAMBVEAWCAMBVEA8AAwbAAKUNgVfAAE6ywABOsgAAErMEAADAAKTsAQMAAAAAAAEBAQAAAAizmWADwACj9AAAXQPAAPypAWADwABiuQAGwAClEIFXwABKvMAAStDAAErcAQLAAEBjAAAAAQPAAErcwABK3AAAAAAAAABgA4SDAAbAAKUOgVfAAErhwABK8sAATqcAALMdAWrAAEriYAPAAP1RAgAAAQPAAEsCwABOpwAAAAQDA8AASxkAAACzmWADwABx7ADAAEs+AAAAtKBgA70PAMAAS10AAACBpmEDA2ADwABiZmADwAD962ADwABg0lwAAcAAS6QAAACGTmADwAD6PwFqwABLrmADwAD6PwBcAT4CT8AAS7zAAEvBAAABwABOfl4DAAECAWADiFMBoTNgA8AA+j8AXAADwABL0MAATYcAAAACAQHAAEvoAAAAg+5gA4hTAAHAAEv0AAAAoTNgA8AA+j8BasAATABgA8AA+j93XAE+BU7AAEwYwABMHQAAgpBgA8AAYmYBHMAATCqAwABMH8BVEOnAAEw9AQABFsAATDuFwABMNsBVEX2CkIhZAMAAcfJOwABMT8AATFQAAIC9YAPAAP3rARbAAExbhcAATFbAVRF9gL2IV07AAEx1AAAAgyVgA8AAYNIAScAATImGwABMjcBVEYw+AUnAAEyjIRzAAEy4FsAATKyFwABMp8BVEX2FB4hbSAEAASsAwAD9Xj4BPRXAAEzNwFUSEwkcwABM54DAAEzcwFUQ6cAATRUBAAEWwABM/YXAAEz4wFURfYUHiFsAwAByBT4BPRXAAE0mwFUSEwkfwABNOcAAYSQAAAAAPz0cwABNZ4LAAE1mwFURByADAAOHwABNaMBVEa0UwABNbsBVEe0IABTAAE10wFUSEwkAAAA9HsAATY7AAHHqBAADFsAATbQuwABAY8AApPyBwABNwsBVEPk0wABN3gPAAE3ewABOhQAAAAMBAcAATfYAAACA7WADiFMAAsAAThgAAADAAEhrYAPAAPo/AWoAYAPAAP0OecAATgcAAACh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DABgA8AA/AUBHJoJlIHEAAAAAMAA/CgEwAClwoHCmiKaJQmZygBgA7zBAAEFwACl0IHCmiqaKppNAAAAA5pDmk0AAAABAQGaSQAABJnKYAO8wQAAYAPAAKW+AT8CCAHAAKXCgADAVVZfCQGaKsAA/WcAAAAACgbAAKXEgcKaUppgmoYAArL/AAAAAQOaa5qGAAAAAQEBmoIAAAiZymADvMEAAGADwABijQAGwAClxYHCmoqamJrsAALAAEZuAAAAAQOapprsAAAAAgICmsYAAAiCkGADwABijQCa5AAACIJTYAPAAGKNAABgA8AAYo0ABsAApcaBwprwmvSbIAACwABO4gAAAAEDmwWbIAAAAAEBAZscAAAImcpgA7zBAABgA8AA/AUABsAApceBwpskmzObXwACwABXCwAAAAEDm0SbXwAAAAEBAZtbAAAImcpgA7zBAABgA8AApaIABsAApciBwptkm3+deQAAwABW6wFqm2VgA8AA/VECAAABA5uTnXkAAAACAgKbqQAAAITaYAPAAGKNAJvDAAAAnn1dA5LnAWADwABiZgAAYAPAAKWiAT4GPRycLy5WAQABgJwzwFVXoADAAKXMRZxDAZxXnFwAAJYpXQOS5wFgA8AAYmYBgZxewFVXrgEhFpxwgpxrwFVX5IFVkuwBipx5wFVX5BachYKcgMBVV+SD65LqPgE9HJyTLlYBAAEmnJwBFpycgpyXwFVX5IPqkulgA8AAYo0AwAClzD0cnK4uwABnrcAApaEBAAGAnMDAVVegAMAApcpFnNABnOSc6QAAlildA5LnAWADwABiZgGBnOvAVVeuASEWnP2CnPjAVVhtgVWS7AGKnQbAVVhtFp0Sgp0NwFVYbYPrkuo+AT0cnSAuwABnrcAApaEBAAEmnTcBFp03gp0ywFVYbYPqkulgA8AAYo0AwAClyj0cnUguVgEAARydTC6y/wEAARadWC6ZysAApcIAwAClxADAAKXMSp1jARydai7AAGeuAAAAAMAApc0GwAClyoHCnemd7p/tAADAAGetwACloQAAAAEDnf+f7QAAAAEBAZ4OAAAAgpBgA8AAYo0AAFwBPgROniaeMwAAsmpgA7zBARaeOoCeNcBVWT2WJsAAYo9OnlueZgAAm35dA5LnAWADwABijQEWnogcnmguwABXCwEAAYGeesBVWVEAwACl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plGmXwAAhR1dA8AA/KkBYAPAAGJmARymmBymfBamboCmacBVpt2FHYXngKsBAWADwABiZgEWposWpoAus5nAAKZ4wABMPcAAo/YAwAD8coCtAAAAAMAA/H1Gpqam06a0AAAAhcNgA8AAYmYAgabEwFWm9D4BSabbFqbsgqbfwFWnUrvrwABicz4BSqcNASs/Tqc/p0oAAIJrYAPAAE2yARynTC6ajwEAARanV4CnUsBVpt2Ca4XmAMAApoBJp2gcp3eCp2zAVaeFSAEAASsAwABNx0qngAErP0qnkQEfp5zAAE+yAgACgae8wFWm9IKny8BVp4UABsAAppaBx6ffp/6owQAAhbMBaqfgYAPAAP1RAgAAAQOoBqjBAAAAAQEBqA4AAACD7mADhfAAAGADwABNsgE+A06oLag4AACCa2ADwABNsgEcqDoumo8BAAEWqEWAqEDAVagUhbKF8gDAAKaASahTHKhigahXwFWoK0gBAAErAMAATcdKqGsBKz9KqHwBH6iHwABPGQIAAmqorWADwACG8cABYd+BqLLAVagrAAbAAKaXgceoxqjlqooAAIW9AWqox2ADwAD9UQIAAAEDqP+qigAAAAEBAakZAAAAg+5gA4YIAABgA8AATbIBPgdOqTipQgAAhbpgA8AATbIBHKlELpqPAQABFqlPgKlKwFWowIW6hgoAwACmgEmpXxypbYGpY8BVqNdIAQABKwDAAE3HSql2ASs/TqmaqaIAALzvYAPAAE2yARyppC6ajwEAARapr4CpqsBVqMCBrYYLAMAApoBJqbocqcaCqb7AVakgSAEAASsAwABNx0qpzwErP06p86n8AAC88GADwABNsgEcqf4umo8BAAEWqgmAqgTAVajAhbuGDADAAKaASaoZHKomg6odwFWpaUgBAAErAMAATcdKqi8BKz9KqkABH6pLwABPPwMAA4GqacBVqNeCqnTAVakgg6p9wFWpaQAGwACmmIHHqo+qrqvIAACFiAFqqpBgA8AA/VECAAABA6q+q8gAAAABAQGqzgAAAIPuYAOE2QAAYAPAAE2yAT4ESaraIRyq7Raq6Baq44Cq3sBVqf+AvYTcgL2IhkgBAAEnYQDAAP36PgI9IxyrCxarAi7AAGfNwACmeUgBAAErAMAA/V4XqwIuwABnzYCrD8BVqf/AAKZ5KwFgA4JSSqsbASs/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o/QAwABFygAAAIC9YAPAAP3rAABgA70AAT4DPRzAAEXWLsAARWvAAKbJAQABJsAAReIBgMAAReLAVglXYAPAAIO8AMAApxxOwABF/cAARgkAAJjbYAODXgEcwABGGhbAAEYLLsAAZ2PAAKbJwACnEEsBAAGBwABGG8BWCWcAwAD87krAAEYmASMhHMAARjmCwABGLcBWCaxIAQABKwDAAP1eHMAARk6AwABGQ8BWCVen2QEAAYLAAEZdwFYJrADAAKP5KwFgA70ABsAApyGByMAARnnAAEaKwABHfQAAsvwBasAARnpgA8AA/VECAAABA8AARpzAAEd9AAAAAgICwABGswAAALOZYAPAAKP0AMAARsQAAACBpmEDAWADvQBcAABcAT4CPRzAAEbsLsAARWvAAKbJAQABJsAARvgBgMAARvjAVgpjYAPAAIO8AMAApxw9HMAARyAWwABHGRbAAEcJLsAAZ2PAAKbJwACnECnAAPz9g/gBAAE0wABHKAPAAEcowABHeAAAAAEBAcAARzMAAACY22ADg14AAGADwAD9DgE+AT0cwABHSYHAAEdIwFYKcyABAAEcwABHVYDAAEdKwFYKY6fZAQABgsAAR2TAVgrxAMAAo/kAAADAAPx3BsAApyKByMAAR4LAAEeHwABILAAAwABXOQAAAAEDwABHmcAASCwAAAABAQHAAEewAAAAwABPRWADvQcAAFwBPgI9IxzAAEfcFsAAR8cuwABnZMAApsnAAKcVSAEAASsAwAD9XhfAAEfHLsAAZ2TAAKbJMcAAR/dgA70HAMAApxUrAV0DwAD8qQFgA70HPRzAAEgUFsAAR/8uwABnZMAApsnAAKcVVgEAAYDAAEgYwFYLcADAAPy6BsAApyOByMAASDHAAEhCwABIrgAAsxQBasAASDJgA8AA/VECAAABA8AASFjAAEiuAAAAAQEBwABIXgAAAIGmYQMBYAO9B1wAAFwBPgE9NQAAAAEAXQPAAPypAWADvQcBFsAASIouwABnZMAApsnAAKcVIxzAAEiggQDAVgxKSAEAASsAACscwABIoIEAwFYMSoP4AQABgMAASKjAVgwxAMAA/HcBXAbAAKckgcjAAEizwABIycAAT7oAAIi+AWrAAEi0YAPAAP1RAgAAAQPAAEjQwABPugAAAAICAsAASOAAAACzmWADwACj9ADAAEkRAAAAt61dA8AA/NoCYAO802ADwABumwAAYAPAAKRKAT4JTsAAST8AAADAAFavXQPAAPzaAmADwAD962ADg14ATsAASWoAAACzkV0DwAD82gJgA8AA/etgA4NeAE7AAEmQAAAAwABnWF0DwAD82gJgA8AA/etgA4NeAE7AAEmvAAAAhI5dA8AA/KkBYAODXgBJwABJvBzAAEnQFsAAScAuwABnY8AApsnAAKcQSAEAASsAwAD9Xj4BPYrAAEnhwFYNDWrAAEnyXQPAAPzaAmADwAD962ADg17AAXHAPgI9isAASiLAVg0NMsAASkZgA8AA/etgA4NeAD0cwABKYBbAAEpQLsAAZ2PAAKbJwACnEIP4AQABNMAASmgDwABKaMAASy0AAAACAgLAAEpwAAAAgL1gA8AA/esAwABKgAAAAIPuYAODXgAAYAPAAP0OAT4CTsAASp3AAEqkAACCZmADvNMBHMAASrGAwABKpsBWDNecEwEAAYfAAEq7wFYOIwDAAKP3ScAASsocwABK3oHAAErOwFYM54dHAQABFMAASurAVg48CAAAwAD87T4BPRzAAEsNgsAASv/AVg0NgL8CAAKGwABLDsBWDhOHwABLFsBWDiMAwAD87z8AwAD8+UnAAEs6HMAAS0kWwABLPi7AAGdWwACmycAApxFIAQABKwDAAP1ePgE9i8AAS1rAVg0rasAAS2ZdA8AA/NoCYAPAAP3rYAODXsABccA+Aj2LwABLlsBWDSsywABLtWADwAD962ADg14APRzAAEvKFsAAS78uwABnVsAApsnAAKcRg/gBAAE0wABL0gPAAEvSwABMkgAAAAICAsAAS9oAAACAvWADwAD96wDAAEvqAAAAg+5gA4NeAABgA8AA/Q4BPgJOwABMB8AATA4AAIJmYAO80wEcwABMG4DAAEwQwFYM15wTAQABh8AATCXAVg9yAMAAo/dJwABMNBzAAExIgcAATDjAVgznh0cBAAEUwABMVMBWD4sIAADAAPztPgE9HMAATHKDwABMacBWDSuAvwIAAobAAExzwFYPYofAAEx7wFYPcgDAAPzvPwDAAPz5ScAATJ8cwABMrhbAAEyjLsAAZ1fAAKbJwACnEkgBAAErAMAA/V4+AT2MwABMv8BWDUdqwABMy10DwAD82gJgA8AA/etgA4NewAFxwD4CPYzAAEz7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iEQDAWADwACpWwIWwABUoS7AAFiewACoFMAAqHk0wABUwwPAAFTDwABU9AAAAAEBAcAAVNwAAACugGADwACpWwAAXAFKwABU4gEcwABU5IHAAFTiwFarTcAAaBcBAAGAwABU78BWovkAwACpYwGXsSnAAFz7PRzAAFUZgMAAVRTAVqL5wABD/AIAARbAAFUqLsAAWKDAAKgUwACoegGXsSnAAF0JPRzAAFVZgMAAVVTAVqL5wABD/QMBXQPAAPypAWADwACO4AIWwABVbC7AAFihwACoFMAAqHsWwABVjYDAAFWIwFai+bbOwABdEAGXsSnAAF0KPRzAAFXAgMAAVbvAVqL5iEQDAWADwACpZgIWwABVyi7AAFFqwACoFMAAqHw0wABV2QPAAFXZwABV/wAAAAEBAcAAVecAAACugGADwACpZgAAXAFKwABV7QEcwABV74HAAFXtwFasUsAAaBcBAAGAwABV+sBWovkAwACpbgGXsSnAAFz7PRzAAFYkgMAAVh/AVqL5ts4CAAEWwABWMy672sAAqBTAAKh9AZexKcAAXRA9HMAAVl+AwABWWsBWovmIRAMBYAPAAKlxAhbAAFZyLq8nwACoFMAAqH40wABWigPAAFaKwABWuQAAAAEBAcAAVqEAAACugGADwACpcQAAXAFKwABWpwEcwABWqYHAAFanwFatAMAAaBcBAAGAwABWtMBWovkAwACpeQGXsSnAAFz7PRzAAFbegMAAVtnAVqL5iEQDAWADwACpfAIWwABW6C7AAFixwACoFMAAqH80wABW9QPAAFb1wABXHAAAAAEBAcAAVwQAAACugGADwACpfAAAXAFKwABXCgEcwABXDIHAAFcKwFathMAAaBcBAAGAwABXF8BWovkAwACphAGXsSnAAFz7PRzAAFdBgMAAVzzAVqL5iEQDAWADwACpfAIWwABXSy7AAFiywACoFMAAqIA0wABXWAPAAFdYwABXfwAAAAEBAcAAV2cAAACugGADwACpfAAAXAFKwABXbQEcwABXb4HAAFdtwFauCMAAaBcBAAGAwABXesBWovkAwACphAGXsSnAAFz7PRzAAFekgMAAV5/AVqL5iEQDAWADwACpfAIWwABXri7AAFizwACoFMAAqIE0wABXvwPAAFe/wABX5gAAAAEBAcAAV84AAACugGADwACpfAAAXAFKwABX1AEcwABX1oHAAFfUwFaujMAAaBcBAAGAwABX4cBWovkAwACphAGXsSnAAFz7PRzAAFgLgMAAWAbAVqL5iEQDAWADwACphwIWwABYFS7AAFi0wACoFMAAqII0wABYIwPAAFgjwABYSAAAAAEBAcAAWDAAAACugGADwACphwAAXAFKwABYNgEcwABYOIHAAFg2wFavEMAAaBcBAAGAwABYQ8BWovkAwACpkQGXsSnAAFz7PRzAAFhtgMAAWGjAVqL5iEQDAWADwACplAIWwABYdy7AAFi1wACoFMAAqIM0wABYhgPAAFiGwABYsQAAAAEBAcAAWJkAAACugGADwACplAAAXAFKwABYnwEcwABYoYHAAFifwFavlMAAaBcBAAGAwABYrMBWovkAwACpnQGXsSnAAFz7PRzAAFjWgMAAWNHAVqL5iEQDAWADwACplAIWwABY4C7AAFi2wACoFMAAqIQ0wABY7gPAAFjuwABZGQAAAAEBAcAAWQEAAACugGADwACplAAAXAFKwABZBwEcwABZCYHAAFkHwFawGMAAaBcBAAGAwABZFMBWovkAwACpnQGXsSnAAFz7PRzAAFk+gMAAWTnAVqL5rzgCAAEWwABZSy7AAFi4wACoFMAAqIUBl7EpwABdAT0cwABZd4DAAFlywFai+a84AgABFsAAWYQuwABYucAAqBTAAKiGAZexKcAAXQE9HMAAWbCAwABZq8BWovmIRAMBYAPAAPo/AhbAAFm6LsAAWLrAAKgUwACohxbAAFnOgMAAWcnAVqL5rzrAAFz8AZexKcAAXPs9HMAAWfSAwABZ78BWovmIRAMBYAPAAPq3AhbAAFn+LsAAWLvAAKgUwACoiBbAAFoUgMAAWg/AVqL5wABEEcAAXTIBl7EpwABc+z0cwABaQYDAAFo8wFai+YhEAwFgA8AA/AUCFsAAWksuwABYvMAAqBTAAKiJFsAAWl6AwABaWcBWovnAAEQSwABdMwGXsSnAAFz7PRzAAFqMgMAAWofAVqL5iEQDAWADwACpoAIWwABali7AAFi9wACoFMAAqIo0wABaqAPAAFqowABa0QAAAAEBAcAAWrkAAACugGADwACpoAAAXAFKwABavwEcwABawYHAAFq/wFax1MAAaBcBAAGAwABazMBWovkAwACpqgGXsSnAAFz7PRzAAFs9gMAAWzjA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AYDAAKNPwFbwpgDAAKiiPRzAAKNfgMAAo1rAVvCmgowBAAFqwACjY2ADwAD968ABclYAwABc+AAAVu7lAFbwegBW8aMAAAACAsAAqPmBYMAAo3DAAKN2wACmTQPAAGgjAAABYAHAAP1RAAADBMAAqPuBYMAAo6fAAKPHBoPnAGADwAD96wFqwACjrWADwAD968ABclsEwACo/IFgwACj6cAAo/YJs1QAYAOIeAAEwACo/YFgwACkD8AApBwJtK4AYAPAAKiYAAEFwACpA4FgwACkIcAApCHAAKRhAAAAA8AApDnAAKRhAAAAAgICwACkPwAABLNUYAOIeADAAKRTAAAEtK5gA8AAqJgAAGADwACo+QE/AwgBwACo/IAAwFbyWQgBwACo/YEAwFbyZwkBwACkIcAA/WcAAAAAAgbAAKj/gWDAAKRmwACkbsAApbAEAcAATU8AAAABA8AApJXAAKWwAAAAAQEBwACkoQAAAINEYAPAAF1BAABgA8AAqPkBPgU9HMAApLaAwACkr8BW8tSClAEAAWrAAKS8YAPAAP3rwAFyWwDAAF1DTsAApN3AAKTrAACzVGADiHgBJsAApN0BHMAApPSAwACk7cBW8tTAAEQiAAAAAMAAXWFgA4h4TsAApRfAAKUlAAC0rmADwAComAEewAClK8AAqKABAAGAwAClScBW8tQAPRzAAKVdgMAApVbAVvLUgowBAAFqwAClYWADwAD968ABclsAwABdRErAAKVrAR/AAKV2wACpAwIAAoHAAKWPwFbzF4LAAKWewFbzTQAGwACpAYFgwACltcAApbrAAKZLAADAAGgXAAAAAQPAAKXEwACmSwAAAAEBAcAApc4AAACEO2ADwABc8gAAXAE+BD0cwACl34DAAKXawFbz74KUAQABasAApeVgA8AA/evAAXJbAMAAXPc9HMAApfSAwACl78BW8+/AAEQAAQABFsAApgIus1TAAKj8AMAAXQ49HMAApiQWwACmFi60rsAAqP3AAGgXAQABgMAApi/AVvPvAMAAqKI9HMAApj+AwACmOsBW8++CjAEAAWrAAKZDYAPAAP3rwAFyWwDAAFz4AABW8qgAVvPDAFb0ogAAAAICwACpBIFgwACmUMAAplbAAKmQA8AAaCQAAAFgAcAA/VEAAAQEwACpBoFgwACmgMAAppkGg+cAYAPAAP3r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wACwgcAAsIbAALFJAADAAGgXAAAAAQPAALCQwACxSQAAAAEBAcAAsJoAAACEO2ADwABc8gAAXAE+BT0cwACwq4DAALCmwFb/oYKUAQABasAAsLFgA8AA/evAAXJqAMAAXPc9HMAAsMCAwACwu8BW/6GXcgEAARbAALDPLpnKwACpIQDAAF0GPRzAALDegMAAsNnAVv+hwABECQEAARbAALDxLoUdwACpIgDAAF0bPRzAALEKgMAAsQXAVv+hwABD/wEAARbAALErLoSowACpIwDAAF0NPRzAALE9gMAAsTjAVv+hgowBAAFqwACxQWADwAD968ABcmoAwABc+AAAVv4mAFb/dQBXAHkAAAACAsAAqSqBYMAAsU7AALFTwACyGAvAAGgnAAABYAHAAP1RAAANBMAAqSyBYMAAsVPAALFTCScAYAPAAPwFAATAAKkugWDAALFTwACxUwkowACoFABgA8AA/esABMAAqS+BYMAAsVPAALFTBikAXQPAAPypAWADwACpKgFqAF0DwAD8qQFgA8AAqSrAAXIDBMAAqTCBYMAAsWDAALFgBsAAUsQAYAPAAKkqAWoAYAPAAKkqwAFeQQTAAKkxgWDAALFtwACxbQauNwBgA8AAqSoBagBgA8AAqSrAAV5zBMAAqTKBYMAAsXzAALF8BoZFAGADwACpKgFqAGADwACpKsABXqUEwACpM4FgwACxisAAsYoGor8AYAPAAKkqAWoAYAPAAKkqwAFevgTAAKk0gWDAALGZwACxmQahoQBgA8AAqSoBagBgA8AAqSrAAV7XBMAAqTWBYMAAsazAALGsBsAAaCgAYAPAAKkqAWoAYAPAAKkqwAFfPQTAAKk2gWDAALHHwACxxwawGgBgA8AAqSoBagBgA8AAqSrAAV9XBMAAqTeBYMAAsd7AALHeBsAAUrgAYAPAAKkqAWoAYAPAAKkqwAFfvwTAAKk4gWDAALHzwACx8wbAAFK3AGADwACpKgFqAGADwACpKsABX9kEwACpOYFgwACyC8AAsgsGwABSvgBgA8AAqSoBagBgA8AAqSrAAV/zAQXAAKk9gWDAALFTwACxU8AAshgBAAADwACxU8AAshgAAAACAgLAALFTAAAEJ2ADwAD8BQDAALFTAAAEKGADwAD96wAAYAPAAKkqAT8DCADAAKksgADAVwLDCADAAKkugQDA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AFwBPgNOwABGPcAARkQAAJZHYAO86AEmwABGPQEcwABGWRbAAEZOLrOZwACqNMAATy0DAAIWwABGaC6qrcAAqjWAwABGd8BXSQYBmw4qwACDkWADvOhOwABGoMAARrIAAMAAaD9dA8AA/KkBYAPAAGJmARzAAEa0LsAAaDrAAKm7AQABg8AARsbAV0k7AMAAqjxJwABG2iEcwABG5YTAAEbewFdJVkgBAAErAMAA/V4+AT0cwABHBBbAAEb2LrUNwACqNq9bAQABHsAARxrAAGe/AwADhMAARzvAV0lWHsAAR1HAAGjEAwADHMAAR3OBwABHX8BXSRRkAQABFsAAR4SCwABHdcBXSSRhwAD82ADAAP0qgsAAR5rAV0kkFsAAR7iDwABHqsBXSTthwAD82ACFwABHy8BXSacAAMAATNU+Aj0cwABIARbAAEfzLrUNwACqNq9bAQABHsAASBfAAGe/AgACHMAASEMWwABIOC6zmcAAqjTAAE39AQABFsAASGYWwABIWC6qrcAAqjWE/7zhAMAAg5JqwABIj2ADwABorsAA77kAAMAATNU9HMAASK4WwABIoC61DcAAqjbAAGg7AQABasAASMZgA8AAZwTAATtAAMAAs8cGwACp6IHLwABI6sAASPvAAEtoAADAAFh8AWrAAEjrYAPAAP1RAgAAAQPAAEkLwABLaAAAAAEBAcAASRQAAACAvWADiIMAAFwBPgJOwABJLcAASTQAAIJmYAO80wEcwABJSRbAAEk+LrOZwACqNMAATy0DAAIWwABJWC6qrcAAqjWAwABJZ8BXS2EBmw4qwACDkUnAAEmBIRzAAEmMgcAASYXAV0t1SAEAASsAwAD9Xj4BScAASZ0WwABJqIHAAEmhwFdLdbLBvNs+AT0cwABJzBbAAEm+LrUNwACqNq9bAQABHsAASeLAAGfDAQABJsAASfkBgcAASfnAV0t1YAO86AAAwABM1T4BPRzAAEooFsAAShoutQ3AAKo2r1sBAAEewABKPsAAZ8ABAAGBwABKUcBXS3UAAMAATNU+Aj0cwABKhBbAAEp2LrUNwACqNq9bAQABHsAASprAAGe/AgACHMAASsYWwABKuy6zmcAAqjTAAE39AQABFsAASukWwABK2y6qrcAAqjWE/7zhAMAAg5JqwABLEmADwABorsAA77kAAMAATNU9HMAA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2ADAAP0qgsAAR5rAV5x2FsAAR7iDwABHqsBXnI1hwAD82ACFwABHy8BXnPkAAMAATNU+Aj0cwABIARbAAEfzLrUNwACqNq9bAQABHsAASBfAAGe/AgACHMAASEMWwABIOC6zmcAAqjTAAE39AQABFsAASGYWwABIWC6qrcAAqjWE/7zhAMAAg5JqwABIj2ADwABorsAA77kAAMAATNU9HMAASK4WwABIoC61DcAAqjbAAGg7AQABasAASMZgA8AAZwTAATtAAMAAs8cGwACqWYHLwABI6sAASPvAAEtoAADAAFh8AWrAAEjrYAPAAP1RAgAAAQPAAEkLwABLaAAAAAEBAcAASRQAAACAvWADiIMAAFwBPgJOwABJLcAASTQAAIJmYAO80wEcwABJSRbAAEk+LrOZwACqNMAATy0DAAIWwABJWC6qrcAAqjWAwABJZ8BXnrMBmw4qwACDkUnAAEmBIRzAAEmMgcAASYXAV57HSAEAASsAwAD9Xj4BScAASZ0WwABJqIHAAEmhwFeex7LBvNs+AT0cwABJzBbAAEm+LrUNwACqNq9bAQABHsAASeLAAGfDAQABJsAASfkBgcAASfnAV57HYAO86AAAwABM1T4BPRzAAEooFsAAShoutQ3AAKo2r1sBAAEewABKPsAAZ8ABAAGBwABKUcBXnscAAMAATNU+Aj0cwABKhBbAAEp2LrUNwACqNq9bAQABHsAASprAAGe/AgACHMAASsYWwABKuy6zmcAAqjTAAE39AQABFsAASukWwABK2y6qrcAAqjWE/7zhAMAAg5JqwABLEmADwABorsAA77kAAMAATNU9HMAASzEWwABLIy61DcAAqjbAAGg7AQABasAAS0lgA8AAZwTAATtAAMAAs8cGwACqWoHLwABLbcAAS37AAE3uAADAAFh9AWrAAEtuYAPAAP1RAgAAAQPAAEuOwABN7gAAAAEBAcAAS5cAAACAvWADiIMAAFwBPgJOwABLsMAAS7cAAIJmYAO80wEcwABLzBbAAEvBLrOZwACqNMAATy0DAAIWwABL2y6qrcAAqjWAwABL6sBXoIcBmw4pwACDkUnAAEwDIRzAAEwOgcAATAfAV6CbSAEAASsAwAD9Xj4BScAATB8WwABMKoHAAEwjwFegm4d9vNo+AT0cwABMSxbAAEw9LrUNwACqNq9bAQABHsAATGHAAGfBAQABJsAATHkBgcAATHnAV6CbYAO85QAAwABM1T4BPRzAAEyoFsAATJoutQ3AAKo2r1sBAAEewABMvsAAZ8IBAAEmwABM1wGBwABM18BXoJtgA7zoAADAAEzVPgI9HMAATQoWwABM/C61DcAAqjavWwEAAR7AAE0gwABnvwIAAhzAAE1MFsAATUEus5nAAKo0wABN/QEAARbAAE1vFsAATWEuqq3AAKo1hP+84QDAAIOSasAATZhgA8AAaK7AAO+5AADAAEzVPRzAAE23FsAATakutQ3AAKo2wABoOwEAAWrAAE3PYAPAAGcEwAE7QADAALPHBsAAqluBy8AATfPAAE4EwABR2QAAwABYdAFqwABN9GADwAD9UQIAAAEDwABOI8AAUdkAAAAEBATAAE5CAAAAs1RgA4h4AMAATlsAAACqTGADwAD8BQDAAE6DAAAAqk1dA8AA/KkBYAPAAP3rAMAATqsAAACFHV0DwAD8qQFgA4i4AABcAT4ETsAATs7AAE7cAAC0rmADwABorgEewABO4sAAaMQDAAMcwABPDYHAAE75wFeic2QBAAEWwABPHoLAAE8PwFeig2HAAPzYAMAA/SqCwABPLsBXooMWwABPVIPAAE9GwFeimmHAAPzYAE7AAE9wwABPggAAwABoP10DwAD8qQFgA8AAYmYBHMAAT4QuwABoOsAAqbsBAAGDwABPlsBXopoAwACqPD0cwABQKBbAAFAaLrUNwACqNq9bAQABHsAAUD7AAGfSAwADHMAAUGgWwABQXS6zmcAAqjTAAFl5AQABgMAAUHnAV6JlAMAAg6KEwABQkcBXorWFwABQqMBXoxwAAMAATNU9HMAAUXUWwABRZy61DcAAqjavXQEAAR/AAFGVwABniAMAAxbAAFGuhMAAUaDAV6K1wABLPMAAaMErhcAAUcLAV6McAADAAEzTBsAAqlyBy8AAUd7AAFHvwABUJQAAu3ABasAAUd9gA8AA/VECAAABA8AAUgjAAFQlAAAABgYGwABSHAAAAIWCYAOIuADAAFI+AAAAvAFgA8AAcAwAwABSVgAAAIC9YAOIgwDAAFJmAAAAqkxgA8AA/AUAwABSjgAAAKpNXQPAAPypAWADwAD96wDAAFK2AAAAhR1dA8AA/KkBYAOIuAAAXAE+A07AAFLUwABS3QAApPFgA8AAS2QBHMAAUuoWwABS3y6zmcAAqjTAAFcUBAAEgsAAUwnAV6RVg8AAUw/AV6RjhMAAUyTAV6RzFsAAU0KFwABTNMBXpIphwAD82ADAAIOKTsAAU17AAFNwAADAAGg/XQPAAPypAWADwABiZgEcwABTci7AAGg6wACpuwEAAYXAAFOEwFekigDAAKo8PRzAAFOmFsAAU5gutQ3AAKo2r10BAAEfwABTvcAAZ4gDAAOGwABTyMBXpKUcwABT2i7AAGg4wACpuwIAAoDAAFP1wFekN4HAAFQDwFekRQDAAKo7h8AAVA7AV6UEAADAAEzTBsAAql2By8AAVCrAAFQ7wABWjQAAwABYdgFqwABUK2ADwAD9UQIAAAEDwABUVcAAVo0AAAAEBATAAFRpAAAAhYJgA4i4AMAAVIEAAACqTGADwAD8BQDAAFSpAAAAqk1dA8AA/KkBYAPAAP3rAMAAVNEAAACFHV0DwAD8qQFgA4i4AABcAT4DTsAAVPTAAFUCAAC0rmADwABorgEewABVCMAAaMQDAAMcwABVM4HAAFUfwFel6GQBAAEWwABVRILAAFU1wFel+GHAAPzYAMAA/SqCwABVVMBXpfgWwABVeoPAAFVswFemD2HAAPzYAE7AAFWWwABVqAAAwABoP10DwAD8qQFgA8AAYmYBHMAAVaouwABoOsAAqbsBAAGDwABVvMBXpg8AwACqPD0cwABV3hbAAFXQLrUNwACqNq9dAQABH8AAVfXAAGeIAwADFsAAVheEwABWCcBXpirAAEs8wABowRzAAFYtLsAAaDjAAKm7AgACgMAAVkjAV6XaasAAVmRgA8AAcAzAAPK+AMAAqjuFwABWdsBXppEAAMAATNMGwACqXoHLwABWksAAVqPAAFjXAADAAFh1AWrAAFaTYAPAAP1RAgAAAQPAAFa9wABY1wAAAAYGBsAAVtEAAACFgmADiLgAwABW8wAAALwBYAPAAHAMAMAAVw0AAACCRWADg14AwABXHwAAAKpMYAPAAPwFAMAAV0cAAACqTV0DwAD8qQFgA8AA/esAwABXbwAAAIUdXQPAAPypAWADiLgAAFwBPgJOwABXk8AAV6UAAMAAaD9dA8AA/KkBYAPAAGJmARzAAFenLsAAaDrAAKm7AQABhcAAV7nAV6fNAMAAqjw9HMAAV9sWwABXzS61DcAAqjavXQEAAR/AAFfywABniAMAAxzAAFgRFsAAWAYus5nAAKo0wABXFAQABBbAAFgugsAAWCfAV6eYgL2DYoPAAFg0wFenpoTAAFhVwFenthbAAFhzhcAAWGXAV6fNYcAA/NgAwACDihzAAFiELsAAaDjAAKm7AgACgMAAWJ/AV6d6gcAAWK3AV6eIAMAAqjuGwABYwMBXp+gAAMAATNMGwACqX4HLwABY3MAAWO3AAFoRAADAAFh3AWrAAFjdYAPAAP1RAgAAAQPAAFj/wABaEQAAAAMDA8AAWRMAAACFgmADiLgAwABZLwAAALwBYAPAAHAMAMAAWUEAAACAvWADiIMAAFwBPgE9HMAAWVsWwABZTS61DcAAqjavXQEAAR/AAFlywABniAMAAx7AAFmKwABLjgEAARzAAFmlFsAAWZous5nAAKo0mRwBAAGCwABZrcBXqScAwACDkwAcwABZvS7AAGg4wACpuwIAAoDAAFnYwFepCYHAAFnmwFepFwDAAKo7asAAWfldA8AA/KkBYAPAAGJmwAD4HwAAwABM0wbAAKpggcvAAFoWwABaJ8AAW1cAAMAAWHgBasAAWhdgA8AA/VECAAABA8AAWjrAAFtXAAAAAwMDwABaTgAAAIWCYAOIuADAAFpqAAAAvAFgA8AAcAwAwABafgAAAIJFYAODXgAAXAE+AT0cwABamhbAAFqMLrUNwACqNq9dAQABH8AAWrHAAGeIAwADHsAAWsnAAEuOAQABHMAAWuQWwABa2S6zmcAAqjSZHAEAARbAAFrzgsAAWuzAV6oogL2DYgDAAIOTABzAAFsDLsAAaDjAAKm7AgACgMAAWx7AV6oKgcAAWyzAV6oYAMAAqjtqwABbP10DwAD8qQFgA8AAYmbAAPgfAADAAEzTBsAAqmGBy8AAW1zAAFttwABckQAAwABYeQFqwABbXWADwAD9UQIAAAEDwABbf8AAXJEAAAADAwPAAFuTAAAAhYJgA4i4AMAAW68AAAC8AWADwABwDADAAFvBAAAAgL1gA4iDAABcAT4BPRzAAFvbFsAAW80utQ3AAKo2r10BAAEfwABb8sAAZ4gDAAMewABcCsAAS48BAAEcwABcJRbAAFwaLrOZwACqNJkcAQABgsAAXC3AV6syAMAAg5MAHMAAXD0uwABoOMAAqbsCAAKAwABcWMBXqxSBwABcZsBXqyIAwACqO2rAAFx5XQPAAPypAWADwABiZsAA+B8AAMAATNMGwACqYoHLwABclsAAXKfAAF3XAADAAFh6AWrAAFyXYAPAAP1RAgAAAQPAAFy6wABd1wAAAAMDA8AAXM4AAACFgmADiLgAwABc6gAAALwBYAPAAHAMAMAAXP4AAACCRWADg14AAFwBPgE9HMAAXRoWwABdDC61DcAAqjavXQEAAR/AAF0xwABniAMAAx7AAF1JwABLjwEAARzAAF1kFsAAXVkus5nAAKo0mRwBAAEWwABdc4LAAF1swFesM4C9g2IAwACDkwAcwABdgy7AAGg4wACpuwIAAoDAAF2ewFesFYHAAF2swFesIwDAAKo7asAAXb9dA8AA/KkBYAPAAGJmwAD4HwAAwABM0wbAAKpjgcvAAF3cwABd7cAAYoQAAMAAUxUBasAAXd1gA8AA/VECAAABA8AAXgPAAGKEAAAABAQEwABeEwAAAIPuYAOE2QDAAF4sAAAAgmdgA8AAmr0AwABeRAAAAIWCYAOIuADAAF5eAAAAwABKeGADiLgAAFwBPgROwABee8AAXowAAMAAaEFgA8AAYmYBHMAAXpkWwABeji6zmcAAqjTAAEw9AQABgsAAXqXAV609AMAAg4ROwABewcAAXtIAAMAAaEJgA8AAYmYBIxzAAF7pg8AAXtzAV61LSAEAASsAiLwrHMAAXwUWwABe+i6zmcAAqjTAAEw9AQABg8AAXxHAV61LAMAAg4QBYAPAAGJmScAAXyUWwABfMhbAAF8pLrHywACpu8AAqjCCu4FFPgFBR8AAX06BwABfVsBXrS0CAcAAX35qwABffmADwACavcABPKIAPgJJwABfkCEWwABfnhbAAF+VLrHywACpu8AAqjCCvYFHPgFJwABfxBzAAF/ZhMAAX8jAV61hSAEAARbAAF/rFsAAX9wus0DAAKo4hhC4bgDAAP1ePgE9HMAAYBAWwABgBy6kzcAAqjOu3AIAAh7AAGAiwACcNwEAAYDAAGBAwFetHwBqwABgZWADpOrAAMpRALWvPgE9HMAAYLEWwABgqC6kzcAAqjOu3AMAAx7AAGDWwACcNwEAAYDAAGD0wFetHwBqwABhGWADpOrAAMpjMsAAYUtbWwEnhYIkwABhcgKEwABhX8BXrWEngWoAta8/QsAAYZoAAsAAYcFqwABhwWADwACavcABPLvAAGHpasAAYelgA8AAmr3AATzUAD4BQsAAYfwAPz0cwABiIxbAAGIVLrUNwACqNsAAUxUBAAEfwABiR8AAZ1YDAAOBwABiVsBXrS2EwABiXMBXrWGFwABibsBXrZ0AAMAAs8UGwACqZIHLwABiicAAYprAAGMpAADAAFhbAWrAAGKKYAPAAP1RAgAAAQPAAGKowABjKQAAAAEAAAHAAGKvAAAAwABYXGADwAD6PwFqAGADwAD9DnlcAT4BPRzAAGLRFsAAYsMutQ3AAKo2wABoOwEAASOAwABi6sBXr+JqwABjAGADwABnBMABOepqwABjHmADwABnBMABOdEBYAPAAGcEAMAAs8cGwACqZYHLwABjLsAAYz/AAGSjAACvSQFqwABjL2ADwAD9UQIAAAEDwABjW8AAZKMAAAACAgLAAGNzAAAArIhgA4kFAMAAY5UAAACFHV0DwAD8qQFgA4i4AABcAT4BPRzAAGQDFsAAY/UutQ3AAKo2r1kBAAEfwABkHcAAZ2YCAAIcwABkRhbAAGQ7LrOZwACqNMAATD0BAAGAwABkUsBXsIQAwACDhBzAAGSVHMAAZHmBwABka8BXsJKAqwEBYAPAAGJmARbAAGSIFsAAZH0us5nAAKo0wABMPcAAg4QAwAD8coCtAAAAAMAA/H0AAMAAs8sGwACqZoHLwABkqMAAZLnAAGVdAADAAFhgAWrAAGSpYAPAAP1RAgAAAQPAAGTUwABlXQAAAAAAAABcAT4CPRzAAGTrFsAAZN0utQ3AAKo2wABoOwEAAWrAAGUDYAPAAGcEwAE7CgDAALPHPRzAAGUsFsAAZR4utQ3AAKo2wABoOwEAAWrAAGVEYAPAAGcEwAE7JADAALPHBsAAqmeBy8AAZWLAAGVzwABmHQAAwABYYQFqwABlY2ADwAD9UQIAAAEDwABliMAAZh0AAAABAQHAAGWVAAAAg+5gA4JSAABcAT4CTsAAZafAAGWwAACCamADvQwBHMAAZb0WwABlsi6zmcAAqjTAAFl5AQABJsAAZc4BgMAAZc7AV7IQYAOHGgDAAIOiPRzAAGXnFsAAZdkutQ3AAKo2r1sBAAEewABl/cAAZ9EBAAGBwABmD8BXsiQAAMAATNUGwACqaIHLwABmIsAAZjPAAGafAADAAFhiAWrAAGYjYAPAAP1RAgAAAQPAAGZSwABmnwAAAAAAAABcAT4BPRzAAGZpFsAAZlsutQ3AAKo2wABoOwEAAWrAAGaBYAPAAGcEwAE6uADAALPHBsAAqmmBy8AAZqTAAGa1wABnOgAAtPoBasAAZqVgA8AA/VECAAABA8AAZsTAAGc6AAAAAQEBwABm0QAAAIKQYAOIuAAAXAE+AT0cwABm9BbAAGbdLrUNwACqNq9fAQABHsAAZwjAAGf5AQABHMAAZyMWwABnGC6zmcAAqjTAAEw9AQABgMAAZy/AV7M3AMAAg4QAAMAATNQGwACqaoHLwABnP8AAZ1DAAGffAADAAFhjAWrAAGdAYAPAAP1RAgAAAQPAAGdkwABn3wAAAAEBAcAAZ3EAAACCkGADiLgAAFwBPgE9HMAAZ4sWwABnfS61DcAAqjavXwEAAR7AAGeowABn/AEAARzAAGfIFsAAZ70us5nAAKo0wABMPQEAAYDAAGfUwFez0QDAAIOEAADAAEzUBsAAqmuBy8AAZ+TAAGf1wABoeAAAwABYZAFqwABn5WADwAD9UQIAAAEDwABoA8AAaHgAAAABAQHAAGgQAAAAgpBgA4i4AABcAT4BPRzAAGgzFsAAaBwutQ3AAKo2r18BAAEewABoR8AAZ/oBAAEcwABoYRbAAGhWLrOZwACqNMAATD0BAAGAwABobcBXtGsAwACDhAAAwABM1AbAAKpsgcvAAGh9wABojsAAaN8AAMAAWGUBasAAaH5gA8AA/VECAAABA8AAaJvAAGjfAAAAAAAAAFwBPgE9HMAAaLIWwABopC61DcAAqjbAAGg7AQABasAAaMpgA8AAZwTAATuuAMAAs8cGwACqbYHLwABo5MAAaPXAAGtdAADAAFhmAWrAAGjlYAPAAP1RAgAAAQPAAGkGwABrXQAAAAMDA8AAaRMAAACa3WADiLgAwABpLQAAAMAATnFgA4i4AMAAaU8AAADAAFhnYAPAAHAMAABcAT4FTsAAaXPAAGmGAAC0VGADwAD9UQEcwABpkC7AAGg4wACpuwIAAoHAAGmrwFe1fYLAAGm5wFe1jQDAAKo7PRzAAGnjFsAAadUutQ3AAKo2wABoOwEAAWrAAGn7YAPAAGcEwAE7dgDAALPHPRzAAGobFsAAag0utQ3AAKo2r10BAAEfwABqO8AAZ4gDAAMawABqULgXg8AAalrAV7WlasAAam5dA8AA/KkBYAPAAGJmwAD4HwAAwABM0z0cwABqjBbAAGp+LrUNwACqNq9dAQABH8AAaqzAAGeIAwADGsAAasG4FoPAAGrKwFe1pWrAAGreXQPAAPypAWADwABiZsAA+B8AAMAATNM9HMAAavwWwABq7i61DcAAqjavXQEAAR/AAGscwABniAMAAxrAAGsxuBiDwABrO8BXtaVqwABrT10DwAD8qQFgA8AAYmbAAPgfAADAAEzTBsAAqm6By8AAa2LAAGtzwABt2wAAwABYaAFqwABrY2ADwAD9UQIAAAEDwABrhcAAbdsAAAADAwPAAGuSAAAAmt1gA4i4AMAAa6wAAADAAE5xYAOIuADAAGvOAAAAwABYZ2ADwABwDAAAXAE+BU7AAGvywABsBQAAtFRgA8AA/VEBHMAAbA8uwABoOMAAqbsCAAKBwABsKsBXt0CCwABsOMBXt1AAwACqOz0cwABsYhbAAGxULrUNwACqNsAAaDsBAAFqwABsemADwABnBMABOhwAwACzxz0cwABsmxbAAGyNLrUNwACqNq9dAQABH8AAbLvAAGeIAwADGsAAbNC4FYPAAGzYwFe3aGrAAGzsXQPAAPypAWADwABiZsAA+B8AAMAATNM9HMAAbQoWwABs/C61DcAAqjavXQEAAR/AAG0qwABniAMAAxrAAG0/uBaDwABtSMBXt2hqwABtXF0DwAD8qQFgA8AAYmbAAPgfAADAAEzTPRzAAG16FsAAbWwutQ3AAKo2r10BAAEfwABtmsAAZ4gDAAMawABtr7gYg8AAbbnAV7doasAAbc1dA8AA/KkBYAPAAGJmwAD4HwAAwABM0wbAAKpvgcvAAG3gwABt8cAAbkEAAMAAWGkBasAAbeFgA8AA/VECAAABA8AAbf7AAG5BAAAAAAAAAFwBPgE9HMAAbhUWwABuBy61DcAAqjbAAGg7AQABasAAbi1gA8AAZwTAATpQAMAAs8cGwACqcIHLwABuRsAAblfAAG6xAADAAFhqAWrAAG5HYAPAAP1RAgAAAQPAAG5pwABusQAAAAAAAABcAT4BPRzAAG6AFsAAbnIutQ3AAKo2wABoOwEAAWrAAG6YYAPAAGcEwAE67gDAALPHBsAAqnGBy8AAbrbAAG7HwABvUAAAwABYawFqwABut2ADwAD9UQIAAAEDwABu2MAAb1AAAAABAQHAAG7lAAAAgpBgA4i4AABcAT4BPRzAAG8IFsAAbvEutQ3AAKo2r18BAAEewABvHMAAZ/0BAAEcwABvORbAAG8uLrOZwACqNMAATD0BAAGAwABvRcBXuckAwACDhAAAwABM1AbAAKpygcvAAG9VwABvZsAAcVkAAMAAUvQBasAAb1ZgA8AA/VECAAABA8AAb3nAAHFZAAAAAgICwABvhgAAAIKQYAOIuADAAG+hAAAAhKhgA4LAAABcAT4DTsAAb7zAAG/LAACEp2ADvLcBHMAAb9gWwABvzS6zmcAAqjTAAE8xAQABgcAAb+LAV7pxAMAAg5k9HMAAb/0WwABv7y61DcAAqjavXwEAAR7AAHAawABn/gIAAhzAAHA5FsAAcC4us5nAAKo0wABMPQEAAYDAAHBFwFe6YwDAAIOEgsAAcEzAV7qFAADAAEzUScAAcGIlwABwa4DAAHBmwFe6Y2ADiQU+AkAhHMAAcJsWwABwkxTAAHCOwFe6YwABYAOJBYaBiRJIAQABKwDAAP1ewABwjsAAcKIAPRzAAHEzFsAAcSgus5nAAKo0wABPLAEAARbAAHFHFMAAcULAV7pjAAFgA4kFhoGJEgDAAIOQPwbAAKpzgcvAAHFewABxb8AAcgAAAMAAWGwBasAAcV9gA8AA/VECAAABA8AAcYrAAHIAAAAAAQEBwABxlAAAAIPuYAODfAAAXAE+AT0cwABxtxbAAHGgLrUNwACqNq9bAQABHsAAcc3AAGfNAQABHMAAcewWwABx4S6zmcAAqjTAAE0UAQABgMAAcfXAV7vOAMAAg44AAMAATNUGwACqdIHLwAByBcAAchbAAHMXAADAAFhtAWrAAHIGYAPAAP1RAgAAAQPAAHI5wABzFwAAAAICAsAAckoAAACD7mADg3wAwAByYgAAAIYFYAPAAI7gAABcAT4BPRzAAHKAFsAAcnIutQ3AAKo2r1sBAAEewABylsAAZ84CAAIcwAByxhbAAHK7LrOZwACqNMAATRQBAAGAwAByz8BXvGgAwACDjhzAAHLxFsAAct4uwABWrMAAqbvAAKoyhgcBAAEWwABzCIHAAHL/wFe8doYFwACO4wCZoAAAwABM1QbAAKp1gcvAAHMcwABzLcAAdPkAAMAAWG8BasAAcx1gA8AA/VECAAABA8AAc0vAAHT5AAAABAQEwABzYgAAAJjbYAODqQDAAHN5AAAAqkxgA8AA/AUAwABzoQAAAKpNXQPAAPypAWADwAD96wDAAHPJAAAAhR1dA8AA/KkBYAOIuAAAXAE+Ak7AAHPwwABz9wAAgkVgA70AARzAAHQEFsAAc/kus5nAAKo0p9kBAAGAwAB0E8BXvUUAwACDjT0cwAB0MxbAAHQlLrUNwACqNq9bAQABHsAAdEnAAGfEAgAChMAAdHPAV72VHsAAdIfAAGjEAwADHMAAdKmBwAB0lcBXvVNkAQABFsAAdLqCwAB0q8BXvWNhwAD82ADAAP0qgsAAdM7AV71jFsAAdOyDwAB03sBXvXphwAD82AAAAMAATNUGwACqdoHLwAB0/sAAdQ/AAHXnAADAAFhuAWrAAHT/YAPAAP1RAgAAAQPAAHUiwAB15wAAAAAAAABcAT4CPRzAAHU5FsAAdSsutQ3AAKo2r1sBAAEewAB1T8AAZ7oCAAIWwAB1fhbAAHVvLrNAwACqOLF9uMtqwAB1oWADwABorsAA77kAAMAATNU9HMAAdb4WwAB1sC61DcAAqjbAAGg7AQABasAAddZgA8AAZwTAATrSAMAAs8cGwACqd4HLwAB17MAAdf3AAIGlAADAAFiDAWrAAHXtYAPAAP1RAgAAAQPAAHYYwACBpQAAAAEBAcAAdiwAAACD7mADh+QAAFwBPgdOwAB2fwAAAMAAaENgA4JSAE7AAHaXAAAAwABoRGADwABiZgBOwAB2vAAAAIHFYAO1twBOwAB238AAduUAAJapXQPAAPypAWADtbcBMcAAdvpgA7W3AE/AAHcDwAB3CAAAAcAAaEVhAwFgA8AAYo1gA8AA+j8AA8AAdxfAAHlbAAAAAQEBwAB3JgAAAIKQYAPAAGKNAABgA8AA+j8BPgRJwAB3NBzAAHc9hsAAdzjAV7/WSAEAARbAAHdPFsAAd0Aus0DAAKo4sSq4ewDAAGKfPgFKwAB3uQEqP07AAHfhwAB35QAAmcpgA7zBARbAAHfshsAAd+fAV7/WlibAAGKPQ8AAd/shHMAAeAaHwAB4AsBXwCxIAQABKwDAAP1ePgJOwAB4JsAAeC0AAIJmYAO80wEcwAB4WRbAAHhGFsAAeDsus5nAAKo0pPjAAIN9svgCAAKHwAB4a8BXwCwnSAC7A0nAAHh/FsAAeIoUwAB4g8BXwHIIAIQavOA+AT2PwAB4osBXwCwcwAB4xhbAAHizFsAAeKgus5nAAKo0pPjAAIN9svkBAAGHwAB41MBXwCwAuwg+AUrAAHj1ASEcwAB5EhbAAHkDFMAAePzAV8ByCACE/7zhSAEAARbAAHkkFsAAeRUus0DAAKo4msy4TgDAAP1eSsAAeUkBKkbAAHliwAB5j8AAeXUAAACoFWADh+8AFsAAeYiAwAB5g8BXvz6GM4fnPgFGwAB5l8AAedDAAHmqAAAAgmtgA4SuABbAAHnDhsAAebjAV8FUhb+H8T4DTsAAeejAAHnuAACAlmADwABg0gEcwAB5+xbAAHnwLrOZwACqNMAATRUBAAGHwAB6DMBXwX8AwACDmE7AAHoqwAB6LwAAgpBgA8AAYmYBHMAAejcUwAB6McBXwaIIAIaeAQABFsAAekoWwAB6Py6zmcAAqjSzQMAAg38AwABg70nAAHpjHMAAenWCwAB6Z8BXv2NIAQABKwDAAP1ePgM9icAAeorAV79Sh8AAepbAV8F/PYrAAHqswFe/YxTAAHq8wFfB3AkAScAAe0YcwAB7TxTAAHtKwFfB3AkASAEAARbAAHthFsAAe1Ius0DAAKo4heW4cgDAAP1ePgE9HMAAe4QWwAB7ey6kzcAAqjOu2wMAAx7AAHuowACcNwEAAYfAAHvGwFfBfwBqwAB772ADpOrAAMtzMsAAfCNbWwEngpAnm80AtatJwAB8SRzAAHxSFMAAfE3AV8HcCQBIAQABFsAAfGQWwAB8VS6zQMAAqjiFO7h1AMAA/V4+AT0cwAB8iRbAAHyALqTNwACqM67bAwADHsAAfJzAAJw3AQABgMAAfLrAV78+AGrAAHzdYAOk6sAAy2EywAB89FtbASeCkCeb1AC1q0nAAH0cIiIWwAB9JhTAAH0gwFfBoggAnhvAAGDjACEcwAB9RRTAAH1AwFfB3AkASAEAARbAAH1XFsAAfUgus0DAAKo4sSC4eADAAP1eABzAAH2HhcAAfXjAV7+sIAEAASbAAH2IARTAAH2IwFfB3AkAYAPAAGKNAAA+AT0cwAB9phbAAH2dLqTNwACqM67bAwADHsAAfcrAAJw3AQABgcAAfejAV79SAGrAAH4QYAOk6sAAy3MywAB+RFtbASeCkBTAAH5NwFfB3AkAALWrPz4BScAAfnwhHMAAfoUUwAB+gMBXwdwJAEgBAAGCwAB+iMBXv2MAwAD9Xj4CScAAfqUcwAB+r4PAAH6pwFe/dkgBAAErAMAA/V4+Aj2LwAB+yMBXv3YcwAB+2RbAAH7QLqTNwACqM6VNAwADHsAAfvrAAJw3AQABgMAAfxjAV78+AGrAAH89YAOk6sAAy4UywAB/bFtbASeCkILAAH91wFe/YwC1sz0cwAB/moTAAH+UwFe/hVYBAAEcwAB/pxbAAH+eLqTNwACqM6VNAwADHsAAf8jAAJw3AQABgcAAf+bAV79SAGrAAIAQYAOk6sAAy5kywACARFtbASeCkILAAIBNwFe/YwC1swDAAPy6Pz0cwACAf4TAAIB5wFe/hVYBAAEcwACAjBbAAICDLqTNwACqM6VNAwADHsAAgKvAAJw3AQABh8AAgMnAV8F/AGrAAIDyYAOk6sAAy5kywACBJFtbASeCkBTAAIEtwFfB3AkAALWzAMAA/Lo/ScAAgV4hHMAAgWiDwACBYsBXv3ZIAQABKwDAAP1ePgE9HMAAgYIWwACBeS6kzcAAqjOlUQIAAoPAAIGOwFe/doTAAIGVwFe/hQC1rD8AAFd6kwBXer0AV3rjAFd7CwBXezEAV3tZAFd7fwBXe6UAV3vRAFd7/wBXfPcAV32nAFd+SgBXfqIAV4DvAFeC3wBXg64AV4R9AFeFTABXhzwAV4fBAFeILABXiJcAV4kCAFeJYgBXibgAV4qPAFeLZgBXjGkAV4+YAFeQiABXkjYAV5NXAFeVSQBXl0EAV5m6AFeaiABXm1QAV5wgAFeeewBXoE8AV6ItAFekAQBXpaIAV6dCAFeo0QBXqdIAV6rcAFer3QBXrOcAV6+pAFewTgBXsUEAV7HYAFeylwBXswEAV7OZAFe0MwBXtM0AV7U3AFe2+gBXuL0AV7knAFe5kQBXuisAV7uWAFe8MABXvQ0AV75PAFe/BgBXxfwAAABGAAABgcsAV8cfAFcmwQBXc8UAV3dEAFd6QQBXxx0AAAAEAFfHHwAAAAAAAgTAAKp6AIHMAAADgNoAALysAACA/gAAwACzzwAAgTQAAMAARCUAAAAAAAICwACqe4HMgXeBfZ+DA8AAaEoAAAFgAcAA/VEAAAIEwACqfYHMgbCBvBiD0ABdA8AA/KkBYAPAAKqqATGBumADwACqqgAEwACqf4HMgeCB7BjAAGhLwACqegBdA8AA/NoCYAPAAP3rXQPAAP2cAWADwABFfQErAQXAAKqpAAAAAAQAAAMAAAAAAAAAAABgA8AAqnsBPwEJAQDAAP1nAAAAACYGwACqgoHMgfGB+oO0AADAAEV5wACqegAAAAEDggODtAAAAAQEBIILAAAAg+dgA8AA/esAgh0AAACeuGADwABFfQCCNAAAAJdYYAPAAEV9AIJKAAAAgaZhAwFgA8AAs9BcAABgA8AAs9ABPgVJgmYcgnSCgmrAV8hXSAEAASsAwAD9Xj4DPSMcgpIWgoUuwABoS8AAqnrAAKp/SAEAASsAwAD9XheChS7AAGhLwACqejKClmADwAD9610DwAD9nAFgA8AARX0AwACqfysBXQPAAPzaAmADwAD9610DwAD9nAFgA8AARX1OgrKCtgAAlyRdA8AA/ZwBYAPAAEV9ATUAAAABAF0DwAD82gJgA8AA/etdA8AA/ZwBYAPAAEV9ARaCuC7AAGhLwACqesAAqn81AAAAAQBgA8AA/esBgILFwFfIOzUAAAABAF0DwAD9nAFgA8AARX0BHILEhILEwFfJFEsBAAGFgsTAV8lFAMAA/O4jHILKhgDAV8lZSAEAASsAwAD9XjUAAAABAF0DwAD9nAFgA8AARX0BHoLSwADBFwABYAPAAEV9AAA1AAAAAQBcARyCxISCxMBXyRSAvwIAAoWCxMBXyUWHAMBXyZsAwAD874cAwFfJm4YAwFfJWQFdA8AA/ZwBYAPAAEV9SYLtIRyC9oSC8sBXyP1WAQABgYL6wFfISQDAAP2pPgFKgw8BKz8/ToM3g0AAAMAAUlpgA8AAs9ABH4NGwACz5QAAAAA9HINXg4NWwFfIZSABAAGEg1jAV8oqAAA9HINvFoNnLoPQwACqfVYBAAEfg3fAAKqxAgACgIOMwFfIO4SDkcBXyioAAMAA/LpKg6EBhIOowFfKKgbAAKqEgcyDuYO+hToAAMAAX7sAAAABA4POhToAAAACAgKD5AAAAJ64YAPAAEakAIP4AAAAl1hgA8AARucAAFwBPgNOhBKEGwAAwABSWmADwACz0AEfhCHAALPlAAAAAEmEMSEchEcWhD+BhDXAV8rJlibAAEbiSAEAASsAwAD9Xj4BPRyEYIKEWMBXyt2AvwIAAieAvSSEuQMWhJkWhIoWhIKBhHjAV8rJlibAAEbihP+84YC9vK8ngWoWhLMWhKuBhKHAV8rJlibAAEbigL28rwDAALPaPgE9HITWgoTOwFfK3YC/AgACJ4C9J8AAaEwAwACz2j0chQMWhPsug9DAAKp9VgEAAR+FC8AAqrECAAInwABoTYKFLMBXyt0AAMAA/LoGwACqhYHMhT+FRIbFAADAAF++AAAAAQOFVIbFAAAAAgEChWoAAACeuGADwABGrgCFfwAAAJdYYAPAAEb4AWoAYAPAAP0OeQBcAT4DToWahaMAAMAAUlpgA8AAs9ABH4WpwACz5QAAAABJhbkhHIXHgYW9wFfL7UgBAAErAMAA/V4+AT0cheCChdjAV8wKgL8CAAIngL0khjkDFoYZFoYKFoYCgYX4wFfL7ZYmwABG4oT/vOGAvbyvJ4FqFoYzFoYrgYYhwFfL7ZYmwABG4oC9vK8AwACz2j4BPRyGVoKGTsBXzAqAvwIAAiekQhaGdhaGbYCGZMBXy9+k8cAARn2AvcAAS3IAwACz2j0cho4WhoYug9DAAKp9VgEAAR+GlsAAqrECAAInwABoToKGt8BXzAoAAMAA/LoGwACqhoHMhsqGz4hNAADAAF+mAAAAAQOG4IhNAAAAAgIChvYAAACeuGADwABGlwCHCgAAAJdYYAPAAEbnAABcAT4DTockhy0AAMAAUlpgA8AAs9ABH4czwACz5QAAAABJh0MhHIdZFodRgYdHwFfNJZYmwABG4kgBAAErAMAA/V4+AT0ch3KCh2rAV805gL8CAAIngL0kh8sDFoerFoecFoeUgYeKwFfNJZYmwABG4oT/vOGAvbyvJ4FqFofFFoe9gYezwFfNJZYmwABG4oC9vK8AwACz2j4BPRyH6IKH4MBXzTmAvwIAAieAvSfAAGhMAMAAs9o9HIgVFogNLoPQwACqfVYBAAEfiB3AAKqxAgACJ8AAaE+CiD/AV805AADAAPy6BsAAqoeBzIhSiFeJtwAAwABfvAAAAAEDiG+JtwAAAAMDA4iMAAAAnrhgA8AARqQAiKIAAACElGADvOUAiLMAAACXWGADwABIUgAAXAE+BE6IzYjWAADAAFJaYAPAALPQAR+I3MAAs+UAAAAAPRyI9IOI7MBXzmmAvwIAAieAvSSJKwMWiRcWiQiBiQLAV85JhP+84YC9vK8ngWoWiSWBiR/AV85JgL28rwDAALPaPRyJOYOJMcBXzmmAvwIAAieAlhyJWBaJT4KJRcBXzlWGBcAASFSv1gAAAADAAGDzAMAAs9o9HIl4FolwLoPQwACqfVYBAAEfiYDAAKqxAgACJ8AAaFCDianAV85pAADAAPy6BsAAqoiBzIm8icGLIwAAwABfpwAAAAEDidqLIwAAAAMDA4n3AAAAnrhgA8AARpcAig0AAACElGADvOUAih4AAACXWGADwABIUgAAXAE+BE6KOIpBAADAAFJaYAPAALPQAR+KR8AAs+UAAAAAPRyKX4OKV8BXz3qAvwIAAieAvSSKlgMWioIWinOBim3AV89ahP+84YC9vK8ngWoWipCBiorAV89agL28rwDAALPaPRyKpIOKnMBXz3qAvwIAAieAlhyKwxaKuoKKsMBXz2aGBcAASFSv1gAAAADAAGDzAMAAs9o9HIrjForbLoPQwACqfVYBAAEfiuvAAKqxAgACJ8AAaFGDixXAV896AADAAPy6BsAAqoOBzIsoizGMvAAAwABoUsAAqnoAAAABA4tFjLwAAAAEAwSLXAAAAJ64YAPAAEZ6AItzAAAAl1hgA8AARX0Ai4UAAACAvWADwAD96wCLmQAAAMAAaFNgA8AA/esBagBgA8AA/Q55AGADwACz0AE+AkAhIhyLxIGLusBX0G9IAQABKwDAAP1eAByL34OLz8BX0ItIAQABKwDAAP36i7iL5wBKi+4BHIv1LsAARXnAAKp6BAAEJ8AAaFSAjA7AV9BhgYwYwFfQbzSMIwOMI4y3AAAAAQEBjC0AAADAAFJaYAPAALPQAABgA8AA/Q4BPgFJjD8hHIxNgYxDwFfQb0gBAAErAMAA/V4+AT0cjGmEjGDAV9ETVgEAAYKMbcBX0H0AwACz1j4BPRyMlISMi8BX0RNWAQABg4yYwFfQiwDAALPWAMAAqoIGwACqiYHMjMGMxo1NAADAAFoWAAAAAQOM2Y1NAAAAAgICjOkAAACeuGADwABGegCNAAAAAJdYYAPAAElPAABcAT4BPRyNES7AAGhSwACqegMAA4CNJsBX0aaBjTDAV9G0J8AAaFUAwACqgwbAAKqKgcyNUo1XjcwAAMAAWhgAAAABA41kjcwAAAACAgKNdAAAAJ64YAPAAEZ6AI2FAAAAl1hgA8AAST0AAFwBPgE9HI2WLsAAaFLAAKp6AwADgI2rwFfSEYGNtcBX0h8nwABoVgDAAKqDBsAAqouBzI3RjdaOTgAAwABaGgAAAAEDjeSOTgAAAAICAo30AAAAnrhgA8AARnoAjgYAAACXWGADwABH/AAAXAE+AT0cjhcuwABoUsAAqnoDAAOAjizAV9J8gY42wFfSiifAAGhXAMAAqoMGwACqjIHMjlOOWI7VAADAAFocAAAAAQOOa47VAAAAAgICjnsAAACeuGADwABGegCOjQAAAJdYYAPAAEfqAABcAT4BPRyOni7AAGhSwACqegMAA4COs8BX0ueBjr3AV9L1J8AAaFgAwACqgwbAAKqNgcyO2o7fj04AAMAAWh4AAAABA47qj04AAAACAgKO+gAAAJ64YAPAAEZ6AI8JAAAAl1hgA8AAR/MAAFwBPgE9HI8aLsAAaFLAAKp6AwADgI8vwFfTUoGPOcBX02AnwABoWQDAAKqDBsAAqo6BzI9Tj1iPxwAAwABaJwAAAAEDj2OPxwAAAAICAo9zAAAAnrhgA8AARnoAj4IAAACXWGADwABHcQAAXAE+AT0cj5MuwABoUsAAqnoDAAOAj6jAV9O9gY+ywFfTyyfAAGU3AMAAqoMGwACqj4HMj8yP0ZBJAADAAFopAAAAAQOP35BJAAAAAgICj+8AAACeuGADwABGegCQAQAAAJdYYAPAAEd6AABcAT4BPRyQEi7AAGhSwACqegMAA4CQJ8BX1CiBkDHAV9Q2J8AAZUkAwACqgwbAAKqQgcyQTpBTkOEAAMAAWi4AAAABA5BhkOEAAAACAQKQcQAAAJ64YAPAAEZ6AJCHAAAAl1hgA8AAR54BagBgA8AA/Q55AFwBPgE9HJCZLsAAaFLAAKp6BAAEgJCuwFfUk4GQuMBX1KEnwABoWifAAGhbAMAAqoMGwACqkYHMkOaQ65FsAADAAFowAAAAAQOQ/JFsAAAAAgICkQwAAACeuGADwABGegCRIQAAAJdYYAPAAEeeAABcAT4BPRyRMi7AAGhSwACqegMAA4CRR8BX1QyBkVHAV9UaJ8AAZZAAwACqgwbAAKqSgcyRcZF2kfQAAMAAWjIAAAABA5GGkfQAAAACAgKRlgAAAJ64YAPAAEZ6AJGqAAAAl1hgA8AAR4MAAFwBPgE9HJG7LsAAaFLAAKp6AwADgJHQwFfVd4GR2sBX1YUnwABldwDAAKqDBsAAqpOBzJH5kf6SfAAAwABaNAAAAAEDkg6SfAAAAAICApIeAAAAnrhgA8AARnoAkjIAAACXWGADwABHjAAAXAE+AT0ckkMuwABoUsAAqnoDAAOAkljAV9XigZJiwFfV8CfAAGWJAMAAqoMGwACqlIHMkoGShpNZAADAAFo6AAAAAQOSnpNZAAAAAgICkrUAAACeuGADwABGegCS0QAAAJdYYAPAAEeVAABcAT4BPRyS4i7AAGhSwACqegQABICS98BX1k2BkwHAV9ZbJ8AAZY8kk1QCJ8AAaFwWk04Wk0WAkzzAV9ZNpPHAAEZ9gL3AAEtyAMAAqoMGwACqlYHMk16TY5QTAADAAFpAAAAAAQOTdJQTAAAAAgICk4QAAACeuGADwABGegCTmQAAAJdYYAPAAEe0AABcAT4BPRyTqi7AAGhSwACqegQABICTv8BX1tqBk8nAV9boJ8AAZX8klA4CJ8AAaF0WlAgWk/+Ak/bAV9bapPHAAEZ9gL3AAEtyAMAAqoMGwACqloHMlBiUHZTRAADAAFpFAAAAAQOUL5TRAAAAAgIClD8AAACeuGADwABGegCUVQAAAJdYYAPAAEe9AABcAT4BPRyUZi7AAGhSwACqegQABICUe8BX12eBlIXAV9d1J8AAZYAklMwCJ8AAaF4WlMYWlL2AlLTAV9dnpPHAAEZ9gL3AAEtyAMAAqoMGwACql4HMlNaU25VQAADAAFpHAAAAAQOU6JVQAAAAAgIClPgAAACeuGADwABGegCVCQAAAJdYYAPAAEfGAABcAT4BPRyVGi7AAGhSwACqegMAA4CVL8BX1/SBlTnAV9gCJ8AAZToAwACqgwbAAKqYgcyVVZValdIAAMAAWkkAAAABA5VoldIAAAACAgKVeAAAAJ64YAPAAEZ6AJWKAAAAl1hgA8AAR88AAFwBPgE9HJWbLsAAaFLAAKp6AwADgJWwwFfYX4GVusBX2G0nwABlOADAAKqDBsAAqpmBzJXXldyWVAAAwABaSwAAAAEDleqWVAAAAAICApX6AAAAnrhgA8AARnoAlgwAAACXWGADwABH2AAAXAE+AT0clh0uwABoUsAAqnoDAAOAljLAV9jKgZY8wFfY2CfAAGU7AMAAqoMGwACqmoHMllmWXpbYAADAAFpOAAAAAQOWbJbYAAAAAgIClnwAAACeuGADwABGegCWkAAAAJdYYAPAAEidAABcAT4BPRyWoS7AAGhSwACqegMAA4CWtsBX2TWBlsDAV9lDJ8AAaF8AwACqgwbAAKqbgcyW3Zbil1QAAMAAWlAAAAABA5bul1QAAAACAgKW/gAAAJ64YAPAAEZ6AJcOAAAAl1hgA8AASLoAAFwBPgE9HJcfLsAAaFLAAKp6AwADgJc0wFfZoIGXPsBX2a4nwABlcADAAKqDBsAAqpyBzJdZl16X2QAAwABaUgAAAAEDl22X2QAAAAICApd9AAAAnrhgA8AARnoAl5AAAACXWGADwABIqAAAXAE+AT0cl6EuwABoUsAAqnoDAAOAl7bAV9oLgZfAwFfaGSfAAGVXAMAAqoMGwACqnYHMl96X45hlAADAAFpWAAAAAQOX9JhlAAAAAgICmAQAAACeuGADwABGegCYGQAAAJdYYAPAAEjDAABcAT4BPRyYKi7AAGhSwACqegMAA4CYP8BX2naBmEnAV9qEJ8AAaGAAwACqgwbAAKqegcyYaphvmPoAAMAAWlQAAAABA5iDmPoAAAACAgKYkwAAAJ64YAPAAEZ6AJirAAAAl1hgA8AASLEAAFwBPgE9HJi8LsAAaFLAAKp6AwADgJjRwFfa4YGY28BX2u8nwABoYQDAAKqDBsAAqp+BzJj/mQSZzgAAwABaWQAAAAEDmRaZzgAAAAEBAZkmAAAAnrhgA8AARnoAAFwBPgNOmT+ZSAAAwABSWmADwACz0AEfmU7AALPlAAAAAD0cmWaBmV7AV9tggL8CAAIngL0WmYMWmXqAmXHAV9tMpPHAAEZ9gL3AAEtyAMAAs9o9HJmVFpmNLoPQwACqfVYBAAEfmZ3AAKqxAgACJ8AAaGKBmcDAV9tgAADAAPy6BsAAqqCBzJnTmdia6QAAwABaWwAAAAEDmema6QAAAAIBApn5AAAAnrhgA8AARnoAmg4AAACXWGADwABIUgFqAGADwAD9DnkAXAE+A06aKZoyAADAAFJaYAPAALPQAR+aOMAAs+UAAAAASZpIIRyaVoGaTMBX3AtIAQABKwDAAP1ePgE9HJpvgppnwFfcKIC/AgACJ4YFHJqRFpqIgZp+wFfcC4YFwABIVKbUAAAAAMAAYPIAwACz2j89HJqxFpqpLoPQwACqfVYBAAEfmrnAAKqxAgACJ8AAaGOCmtvAV9woAADAAPy6BsAAqqGBzJrumvObjAAAwABaXgAAAAEDmwSbjAAAAAEBAZsUAAAAnrhgA8AARnoAAFwBPgJOmy2bNgAAwABSWmADwACz0AEfmzzAALPlAAAAAD0cm1QWm0wug9DAAKp9VgEAAR+bXMAAqrECAAInwABoZIGbfsBX3PgAAMAA/LoGwACqooHMm5GblpwlAADAAFpgAAAAAQObopwlAAAAAQEBm7IAAACeuGADwABGegAAXAE+Ak6by5vUAADAAFJaYAPAALPQAR+b2sAAs+UAAAAAPRyb8hab6i6D0MAAqn1WAQABH5v6wACqsQIAAifAAGhlgZwXwFfdeAAAwAD8ugbAAKqjgcycKpwvnM4AAMAAWmIAAAABA5xDnM4AAAABAQGcUwAAAJ64YAPAAEZ6AABcAT4CTpxsnHUAAMAAUlpgA8AAs9ABH5x7wACz5QAAAAA9HJyTFpyLLoPQwACqfVYBAAEfnJvAAKqxAgACJ8AAaGaBnMDAV934AADAAPy6BsAAqqSBzJzTnNidPAAAwABaZAAAAAEDnOWdPAAAAAEBAZz1AAAAnrhgA8AARnoAAFwBPgE9HJ0FLsAAaFLAAKp6BAAEgJ0awFfeZCsrJ8AAaGcAwACqgwbAAKqlgcydQZ1GnwIAAMAAaGgAAAABA51cnwIAAAACAgKdagAAAJ64YAPAAEV9AJ2EAAAAo65gA8AASa0AAFwBPgROnZqdowAAwABSWmADwACz0AEfnanAALPlAAAAAEmduhadxIGdvsBX3sq6rcAAScM+AT0cnemCneHAV97egL8CAAIngmcnhX8AwACz2kmeCxaeFYGeD8BX3sq6rsAAScI+AT0cnjqCnjLAV97egL8CAAIngmcnHwDAALPaP0meWyEcnnQWnmWBnl/AV97KuovAAEmxSAEAASsAwAD9Xj4BPRyejYKehcBX3t6AvwIAAieCkCSesQEWnqGBnpvAV97KuovAAEmxAMAAs9o/PRyexRaevS6D0MAAqn1WAQABH57NwACqsQIAAifAAGhpgp70wFfe3gAAwAD8ugbAAKqmgcyfB58OnzwAAL1AAAAAAQOfFZ88AAAAAAAAAGADwAD96wE+AUqfHgEcny0WnyUug9DAAKp9WAEAASfAAFr3AMAA/HsGwACqp4HMn0GfVJ+BAAAjAWqfQmADwAD9UQIAAAEDn1yfgQAAAAAAAABgA8AA/esBSp9iASSfgQMnwABoahyfdS69QAAAAADAAKqmJ4MhAABXyBUAV8qZAFfLvQBXzPUAV84ZAFfPKgBX0DsAV9GEAFfR7wBX0loAV9LFAFfTMABX05sAV9QGAFfUcQBX1OoAV9VVAFfVwABX1isAV9a4AFfXRQBX19IAV9g9AFfYqABX2RMAV9l+AFfZ6QBX2lQAV9q/AFfbKgBX29sAV9zCAFfdQgBX3cIAV95CAFfemgBX39gAV+AhAFfgcAAAACYCwACqqoHMn6Wfq6DRA8AAaGsAAAFgAcAA/VEAAAIEwACqrIHMoA6gEQmD5wBgA8AA/esABMAAqq2BzKBSoFoJwABSWgBgA8AAs9AAAQXAAKqxgcygX6BfoIwAAAADoHOgjAAAAAICAqB5AAAEg+dgA8AA/esAoIMAAATAAFJaYAPAALPQAABgA8AAqqoBPwMIAcAAqqyAAMBX4XkIAcAAqq2BAMBX4YcJAaBfwAD9ZwAAAAABBsAAqq+BzKCRoKSgzwAAIwFqoJJgA8AA/VECAAABA6CsoM8AAAAAAAAAYAPAAP3rAUqgsgEkoM8EFqC0LoPnwACqrCeD1xygwxagui7AAFJawACqrb1AAAAAAMAAs94ngyEAAFfhxgBX4igAAAABAAABgcwAV+I3AFfHcwBX4REAV+I1AAAAAgBX4jcAAAAAAAIEwACqsgCBzQAABIDZAACdyAAAgPwAAMAAisEAAIEeAADAAFg4AACBNAAAwABZuwAAAAAAEQLAAKq2gc2C4ILmiXIDwABobAAAAWABwACKxwAAAQTAAKq4gc2DFYMcGMAAaG0AYAPAAPo/ASsBBcAAqr2BzYMhgyGDQQAAAAODLYNBAAAAAAAAAGADwACqtgE/AQkAgzLAAIrPAgACKpMAAgbAAKq6gc2DRoNYhtIAAIMHAWqDR2ADwAD9UQIAAAEDg12G0gAAAAICAoNkAAAAklRgA56xAINyAAAAoVVgA8AAWDsAAGADnrEBPgtOg4aDiwAAg7BgA56xARaDk4CDjcBX4yODsJ7MToOjAAAAoypgA56xAEmDsx6Dt8AAWb0CAAInmfyCg8nAV+NGAD4CPYuD2MBX42KIg+XAV+MjgoPtwFfjRj2Kg/nAV+NGFoQGgIQAwFfjI4Ownsw/ToQchCUAAaIjYAOesQGChCfAV+NGQB6EOMAAWb0CAAInmgiEhEjAV+O2AIQ4hFEAPRyEaBaEX4GEWMBX4y+pksAAWD2tEwIAAoOEfMBX42KEhIjAV+O2AMAAV/Q9iISYwFfjIxyEp4GEoMBX4y/AAEI6AgACg4S+wFfjYoSEysBX47YAwABY9E6E34TqAACdmGADnrEBFoTygITswFfjI4Ownsw9iIT8wFfjIxyFC4GFBMBX4y/AAEI7AwADgIUgwFfjI4OFJ8BX42KEhTPAV+O2AMAAWPVJhUMiHoVHwABZvQIAAieZ/haFXICFVsBX4yODsJ7MAAEehWXAAFm9AgACJ4LmFoV5gIVzwFfjI4OwnswAPgI9F4WuLsAAaG0pwACquD2IhcTAV+MjHIXTgYXMwFfjL8AAQj8EAASAhfbAV+Mjg4X9wFfjYoSGCcBX47aFhhPAV+Q+AMAAWPk+Aj0Xhl4uwABobSrAAKq4PYiGdcBX4yMchoSBhn3AV+MvwABCPgMAA4CGmsBX4yOEhqHAV+O2g4arwFfjYgDAAFj3SobCAYCGycBX4yMGwACqu4HNhteG9IlwAADAAEIdAWqG2GADwAD9UQIAAAEDhv+JcAAAAAEBAYcGAAAAklRgA56xAABgA8AAiscBPgNOhxmHHgAAg7BgA56xARaHJoCHIMBX5Y2DsJ7MSYcwIh6HNMAAWb0CAAInmgiBh0TAV+WkAAEiHodWwABZvQIAAieZ/IGHaMBX5aQAAB6HccAAWb0CAAInmggWh4aBh4HAV+Wkg7CezAA+AUqHlgEfh6HAAKsWAgACH4e1wACqvQAAAAAjFofNLsAAaG3AAKq4aofdYAPAAKrXwAFyxGqH9WADwACq0sABctUBYAPAAIrHAEmIGB6IHMAAWb0CAAInmg+BiCvAV+WkAD4BSog6AR+IRcAAqxYCAAJqiFVgA8AAisfAAWZhIxaIai7AAGhtwACquGqIemADwACq18ABcsRqiJJgA8AAqtLAAXLVAWADwACKxwBJiLUiHoi5wABZvQIAAiecuoGIycBX5aQAAR6I0sAAWb0CAAInnfCBiOPAV+WkAD4BSojyASMWiPkuwABobcAAqrhqiQlgA8AAqsPAAXLmaokfYAPAAKq+wAFy9wFgA8AAqwc/Sok2ASMWiT0uwABobcAAqrhqiU1gA8AAqs3AAXMIaoliYAPAAKrIwAFzGQFgA8AAiscAAFfi+QBX5WEAV+dQAAAAAgLAAKq+gc2JzInSimkDwABobgAAAWABwACrBwAAAAEFwACqwoHNifeJ/YoIAQAAA4oGiggAAAAAAAAAYAPAAKq+AT8BCQGJ/cAAqwsAAAAAAQbAAKrAgc2KDYoqimcAAMAAQh0BaooOYAPAAP1RAgAAAQOKNYpnAAAAAQEBijwAAACSVGADnrEAAGADwACKxwE+AUqKSQFqilZgA8AAqtLAAXLVAABX57IAV+gFAAAAAQLAAKrDgc2KxorMi2kDwABobwAAAWABwACrBwAAAAEFwACqx4HNivOK+YsGAQAAA4sEiwYAAAAAAAAAYAPAAKrDAT8BCQGK+cAAqwsAAAAAAQbAAKrFgc2LC4soi2cAAMAAQh0BaosMYAPAAP1RAgAAAQOLM4tnAAAAAQEBizoAAACSVGADnrEAAGADwACKxwE+AUqLRwFqi1RgA8AAqtfAAXLEAABX6GMAV+i2AAAAAQLAAKrIgc2L0YvXjH8DwABocAAAAWABwACKxwAAAAEFwACqzIHNi/2MA4weAQAAA4wLjB4AAAAAAAAAYAPAAKrIAT8BCQCMEMAAis8CAAIpkwABBsAAqsqBzYwjjECMfQAAwABCHQFqjCRgA8AA/VECAAABA4xLjH0AAAABAQGMUgAAAJJUYAOesQAAYAPAAIrHAT4BSoxfAWqMbGADwACq0sABctUAAFfpFgBX6WkAAAABAsAAqs2BzYzqjPCNngPAAGhxAAABYAHAAIrHAAAAAQXAAKrRgc2NGI0ejTsBAAADjSiNOwAAAAAAAABgA8AAqs0BPwEJAI0twACKzwIAAimTAAEGwACqz4HNjUCNXY2cAADAAEIdAWqNQWADwAD9UQIAAAEDjWiNnAAAAAEBAY1vAAAAklRgA56xAABgA8AAiscBPgFKjXwBao2JYAPAAKrXwAFyxAAAV+nJAFfqHAAAAAECwACq0oHNjaGNp450A8AAaHIAAAFgAcAAiscAAAABBcAAqtaBzY3QjdaN9QEAAAON4Y31AAAAAAAAAGADwACq0gE/AQkAjebAAIrPAgACKpMAAQbAAKrUgc2N+o4MjnIAAIMHAWqN+2ADwAD9UQIAAAEDjhGOcgAAAAICAo4YAAAAklRgA56xAI4mAAAAoVVgA8AAWDsAAGADnrEBPgI9HI5EFo47gY40wFfqsqmSwABYPaIhAQABgI5WwFfqpgDAAFf1So5iAYCOacBX6qYAAFfqfABX6vgAAAABAsAAqteBzY53jn2PUAPAAGhzAAABYAHAAIrHAAAAAQXAAKrbgc2OqI6ujs8BAAADjruOzwAAAAAAAABgA8AAqtcBPwEJAI7AwACKzwIAAiqTAAEGwACq2YHNjtSO5o9OAACDBwFqjtVgA8AA/VECAAABA47rj04AAAACAgKO8gAAAJJUYAOesQCPAAAAAKFVYAPAAFg7AABgA56xAT4CPRyPHhaPFYGPDsBX646pksAAWD2jLgEAAYCPMsBX64IAwABX9kqPPgGAj0XAV+uCAABX61gAV+vUAAAAAQLAAKrcgc2PnY+jkxEDwABodAAAAWABwACKxwAAAAEFwACq4YHNj8yP0o/xAQAAA4/dj/EAAAAAAAAAYAPAAKrcAT8BCQCP4sAAis8CAAIqlAACBsAAqt6BzY/2kAiRKgAAgwcBao/3YAPAAP1RAgAAAQOQDZEqAAAAAgICkBQAAACSVGADnrEAkCIAAAChVWADwABYOwAAYAOesQE+Bk6QNpA+AAGh6mADnrEBFpBGgJBAwFfsXoOwnsxAHpBXwABZvQIAAieaD4KQZsBX7IEAkFeQbgA9HJCFFpB8gZB1wFfsaqmSwABYPaL2AQABgpCYwFfsgQDAAFf3TpCskLMAAIF2YAOesQEckLyBkLXAV+xqwABCFQEAAYKQ2cBX7IEAwABYyT0ckPcWkO6BkOfAV+xqqZLAAFg9ovcBAAGDkQzAV+zdAMAAV/hKkRkBg5EgwFfs3QbAAKrfgc2RL5FMkw8AAMAAQh0BapEwYAPAAP1RAgAAAQORV5MPAAAAAQEBkV4AAACSVGADnrEAAGADwACKxwE+A06RcZF2AACDsGADnrEBFpF+gJF4wFftY4OwnsxJkYgiHpGMwABZvQIAAieaCIGRnMBX7XoAASIeka7AAFm9AgACJ5n8gZHAwFftegAAHpHJwABZvQIAAieaCBaR3oGR2cBX7XqDsJ7MAD4BSpHuAR+R+cAAqxYCAAIfkgTAAKq9AAAAAGqSGmADwACq7MABcyoASZI0HpI4wABZvQIAAieaD4GSR8BX7XoAPgFKklYBH5JhwACrFgIAAmqSaGADwACKx8ABZmFqkntgA8AAquzAAXMqAEmSlSIekpnAAFm9AgACJ5y6gZKpwFftegABHpKywABZvQIAAied8IGSw8BX7XoAPgFKktIBapLfYAPAAKriwAFzOz9KkvUBapMCYAPAAKrnwAFzTAAAV+w0AFftNwBX7qIAAAACAsAAquKBzZNvk3WT+wPAAGh1AAABYAHAAKsHAAAAAQXAAKrmgc2TmZOfk6kBAAADk6eTqQAAAAAAAABgA8AAquIBPwEJAZOfwACrCwAAAAABBsAAquSBzZOuk8uT+QAAwABCHQFqk69gA8AA/VECAAABA5PWk/kAAAABAQGT3QAAAJJUYAOesQAAYAPAAIrHAUqT5wFqk+1gA8AAquzAAXMqAABX7wQAV+9VAAAAAQLAAKrngc2UZ5RtlQQDwABodgAAAWABwACKxwAAAAEFwACq64HNlJKUmJSyAQAAA5SflLIAAAAAAAAAYAPAAKrnAT8BCQCUpMAAis8CAAIpkwABBsAAqumBzZS3lNSVAgAAwABCHQFqlLhgA8AA/VECAAABA5TflQIAAAABAQGU5gAAAJJUYAOesQAAYAPAAIrHAUqU8AFqlPZgA8AAquzAAXMqAABX77UAV/AGAAAAAQLAAKrsgc2VB5UNlogDwABodwAAAWABwACKxwAAAAEFwACq8YHNlTWVO5VZAQAAA5VFlVkAAAAAAAAAYAPAAKrsAT8BCQCVSsAAis8CAAIqkwACBsAAqu6BzZVelXCWBgAAgwcBapVfYAPAAP1RAgAAAQOVdZYGAAAAAgIClXwAAACSVGADnrEAlYoAAAChVWADwABYOwAAYAOesQE+AkmVmCEelZ3AAFm9AgACJ5oQFpW0gJWuwFfwkIOwnswAPgE9HJXTFpXKgZXDwFfwnKmSwABYPaL5AQABgJXkwFfwkADAAFf6P0qV9gGAlf3AV/CQBsAAqu+BzZYLliiWhgAAwABCHQFqlgxgA8AA/VECAAABA5YzloYAAAABAQGWOgAAAJJUYAOesQAAYAPAAIrHAT4BSpZHASMelk7AAFm9AgACJ5oQFpZlgJZfwFfxMYOwnswAapZzYAPAAKrywAFzXSsBYAPAAKryAABX8GYAV/EFAFfxfQAAAAICwACq8oHNls6W1JoFA8AAaHgAAAFgAcAAiscAAAABBcAAqveBzZb4lv6XGQEAAAOXBJcZAAAAAAAAAGADwACq8gE/AQkAlwnAAIrPAgACKhyXFpSBxAAAAADAAPwoAAIGwACq9IHNlx6XMJftAACDBwFqlx9gA8AA/VECAAABA5c1l+0AAAACAgKXPAAAAJJUYAOesQCXSgAAAKFVYAPAAFg7AABgA56xAT4ETpdel2gAAKHrYAOesQEWl3CAl2rAV/IYg7CezEAel4HAAFm9AgACJ5oQgpeSwFfyOwCXgZecAD0cl7MWl6qBl6PAV/IkqZLAAFg9ovgBAAGCl8nAV/I7AMAAV/lKl9kBgpfgwFfyOwbAAKr1gc2X8pgPmgMAAMAAQh0BapfzYAPAAP1RAgAAAQOYGpoDAAAAAQEBmCEAAACSVGADnrEAAGADwACKxwE+BEAemDXAAFm9AgACJ5oQgJhGwFfyzQCYNZhMAE6YWZheAACDsGADnrEBFphmgJhgwFfyzYOwnsxJmHAiHph0wABZvQIAAieaCIGYhMBX8v8AASIemJbAAFm9AgACJ5n8gZiowFfy/wAAHpixwABZvQIAAieaCBaYxoGYwcBX8v+DsJ7MAD4BSpjWAR+Y4cAAqxYCAAIfmOzAAKq9AAAAAGqZAmADwACrAsABc28ASZkgHpkkwABZvQIAAieaD4GZM8BX8v8APgFKmUIBH5lNwACrFgIAAmqZVGADwACKx8ABZmFqmWdgA8AAqwLAAXNvAEmZhSIemYnAAFm9AgACJ5y6gZmZwFfy/wABHpmiwABZvQIAAied8IGZs8BX8v8APgFKmcIBapnPYAPAAKr4wAFzgD9KmecBapn0YAPAAKr9wAFzkQAAV/HuAFfyoQBX9CcAAAACAsAAqviBzZoImg6aqgPAAGh5AAABYAHAAKsHAAAAAQXAAKr8gc2aNJo6mkYBAAADmkSaRgAAAAAAAABgA8AAqvgBPwEJAZo6wACrCwAAAAABBsAAqvqBzZpLmmiaqAAAwABCHQFqmkxgA8AA/VECAAABA5pzmqgAAAABAQGaegAAAJJUYAOesQAAYAPAAIrHAT4BSpqHAWqalGADwACrAsABc28AAFf0iQBX9NwAAAABAsAAqv2BzZqtmrObYAPAAGh6AAABYAHAAIrHAAAAAQXAAKsBgc2a2prgmvwBAAADmuma/AAAAAAAAABgA8AAqv0BPwEJAJruwACKzwIAAimTAAEGwACq/4HNmwGbHpteAADAAEIdAWqbAmADwAD9UQIAAAEDmymbXgAAAAEBAZswAAAAklRgA56xAABgA8AAiscBPgFKmz0BaptKYAPAAKsCwAFzbwAAV/U8AFf1jwAAAAECwACrAoHNm2ObaZw/A8AAaHsAAAFgAcAAiscAAAABBcAAqwaBzZuVm5ubvQEAAAObqZu9AAAAAAAAAGADwACrAgE/AQkAm67AAIrPAgACKpMAAQbAAKsEgc2bwpvUnD0AAIMHAWqbw2ADwAD9UQIAAAEDm9mcPQAAAAICApvgAAAAklRgA56xAJvuAAAAoVVgA8AAWDsAAGADnrEBPgI9HJwMFpwDgZv8wFf2JamSwABYPaL8AQABgJwhwFf2GQDAAFf7SpwtAYCcNMBX9hkAAFf17wBX9msAAAABAsAAqweBzZx1nHud6gPAAGh8AAABYAHAAIrHAAAAAQXAAKsLgc2cp5ytnM8BAAADnLuczwAAAAAAAABgA8AAqwcBPwEJAJzAwACKzwIAAiqTAAEGwACrCYHNnNSc5p3oAACDBwFqnNVgA8AA/VECAAABA5zrnegAAAACAgKc8gAAAJJUYAOesQCdAAAAAKFVYAPAAFg7AABgA56xAT4FTp0UnR0AAYW2YAOesQEWnSWAnR/AV/b1g7CezEAiHp02wABZvQIAAiecuoKdRsBX9xgAAR6dU8AAWb0CAAInnfCCnWTAV/cYAJ02nW0APYiddMBX9vUcnYOBnXzAV/cBoVoBAAGCnZPAV/cYAMAAWL49HJ2yFp2pgZ2iwFf3AamSwABYPaL/AQABgp3JwFf3GADAAFf8Sp3YAYCd38BX9vUAAFf2ywBX97gAAAABAsAAqwyBzZ3tnfOfyAPAAGh9AAABYAHAAIrHAAACBMAAqw6BzZ4onjIYwABofgBgA8AAiscABMAAqw+BzZ5NnlUJwABofwBgA8AAiscAAQXAAKsWgc2eWp5anpIAAAADnmCekgAAAAICAp5mAAAEwABofmADwACKxwCedwAABMAAaH9gA8AAiscAAGADwACrDAE/AwgBwACrDoAAwFf4LwgBwACrD4EAwFf4PwkAnoPAAIrPAgACKpMAAwbAAKsRgc2el56snssBAMAAQhsBap6YYAPAAP1RAgAAAQOetZ7LAAAAAAAAAGADwAD6PwFKnrgBFp7DFp64LsAAaH7AAKsOwABCG8AAiskGwACrE4HNntCe4p8mAACDBwFqntFgA8AA/VECAAABA57nnyYAAAACAgKe7gAAAJJUYAOesQCe/AAAAKFVYAPAAFg7AABgA56xAUqfBwEcnxIWnwcuwABofsAAqw6DBwIAAoCfGMBX+PmBnx/AV/kFAMAAiswGwACrFIHNnyufSJ/GAADAAEIdAWqfLGADwAD9UQIAAAEDn1OfxgAAAAEBAZ9aAAAAklRgA56xAABgA8AAiscBPgI9F59nLsAAaH4cn38Wn3QuwABofsAAqw7AAEIdAQABgJ+LwFf5cADAAIrNwACrDkqflwEjIRyfqRafni7AAGh+wACrDkgBAAErAMAA/V4uFp+6LsAAaH/AAKsPAWADwACKxwAAV/iAAFf4zwBX+UQAV/noAAAAAwIEwACqtIHNgcWB5gbAAGiAAGADwACKxwFqgdlgA8AAqtzAAWZhBMAAqrWBzYJsgpMGwABogQBgA8AAiscBaoKDYAPAAKsHwAFmcgABgc0AV/pJAFfijQBX52EAV+gSAFfowwBX6XYAV+opAFfrBQBX6+EAV+6zAFfvYgBX8BMAV/GOAFf0OABX9OkAV/WcAFf2eABX98UAV/n9AAAAEQBX+kkAAAAAAAIEwACrF8AAaIKBzgAAC4EAAACdyAABAQORU4ITnOeBSgAAjCGgaACBcgAAoa8AAQEBnOiBswAAkuYAAQEBgj2B2gAAwACJmgABAQHAAEDlghYAAMAAWVAAAQEBoHWCUAAAwABZngABAQGgdoJ8AADAAFcUAAEBAazlgqMAAMAAWDgAAQEBoHOCxgAAwACLWAAAguAAAMAAWbsAAQEIoHrAAEKTwABClMAAQpfAAEKYwABCmcAAQpXAAEKaAAAADQLAAKspgc6NX41lkMUDvt0AAAFgAcAA/VEAAWABwACLYwABBcAAqzWBzo2EjYqNkgEAAAONkI2SAAAAAAAAAGADwACrKQE/AQkBjYrAAP1nAAAAAAgGwACrK4HOjZeNsI3FAQDAAEItAWqNmGADwAD9UQIAAAEDjb6NxQAAAAAAAABgA8AAi2MBSo3BAS4GwACrLIHOjcqN3435AQDAAEIyAWqNy2ADwAD9UQIAAAEDjfGN+QAAAAAAAABgA8AA+j8BSo30ASoGwACrLYHOjf6OE44mAQC13QFqjf9gA8AA/VECAAABA44ejiYAAAAAAAAAYAPAAPo/AUqOIQEqBsAAqy+Bzo4rjj2PMgAAwABBgAFqjixgA8AA/VECAAABA45OjzIAAAACAgKOVQAAAJJUYAOesQCOYwAAAKFVYAPAAFg7AABgA56xAT4DPRyOeIGOccBX/JvAAEESAgACFo6ngI6hwFf8j4OwnsxqjrNdA5FlAWEDAWADnrFgA5FOtXcAwABZET0cjt4WjtWBjs7AV/ybwABBBcAAWEbAAEEiAQABgI74wFf8jwDAAItUSo8EARyPFmqPC2ADwACLY8ABZtTAAEFbAgACgI8gwFf8j4GPJ8BX/JsAwACLbAbAAKswgc6PN49Jj58AAMAAQUoBao84YAPAAP1RAgAAAQOPWY+fAAAAAgICj2AAAACSVGADnrEAj24AAAChVWADwABYOwAAYAOesQFKj38BHI9/LsAAQYACAAKAj5HAV/1ugY+YwFf9egDAAKsvBsAAqzGBzo+kj7aQBAAAwABbzgFqj6VgA8AA/VECAAABA4/GkAQAAAACAgKPzQAAAJJUYAOesQCP2wAAAKFVYAPAAFg7AABgA56xAUqP7AEcj+wuwABBWwIAAoCP9sBX/dyBj/3AV/3oAMAAqzIGwACrMoHOkAmQG5CAAADAAEFbAWqQCmADwAD9UQIAAAEDkCSQgAAAAAICApArAAAAklRgA56xAJA5AAAAoVVgA8AAWDsAAGADnrEBPgI9HJBXFpBOgZBHwFf+VqmSwABYPb7bAQABgJBkwFf+SgDAAFgTSpBwAYCQd8BX/koGwACrM4HOkIWQl5DDAADAAEFYAWqQhmADwAD9UQIAAAEDkJ+QwwAAAAEBAZCmAAAAklRgA56xAABgA56xAT4BSpCzAYCQusBX/sgAAFf7ugBX+/MAV/wsAFf8YwBX/UIAV/2wAFf+HgBX/pwAV/7nAAAACALAAKs2gc6Q+5EBldADwABogwAAAWABwAD9UQABYAHAAItjAAEFwACrQoHOkSaRLJE6AQAAA5E4kToAAAAAAAAAYAPAAKs2AT8BCQGRLMAA/WcAAAAACAbAAKs4gc6RP5FYkW0BAMAAQi0BapFAYAPAAP1RAgAAAQORZpFtAAAAAAAAAGADwACLYwFKkWkBLgbAAKs5gc6RcpGHkaABAMAAQjIBapFzYAPAAP1RAgAAAQORmZGgAAAAAAAAAGADwAD6PwFKkZwBKQbAAKs6gc6RpZG6kc0BALXdAWqRpmADwAD9UQIAAAEDkcWRzQAAAAAAAABgA8AA+j8BSpHIASoGwACrPIHOkdKR5JIzAADAAEGAAWqR02ADwAD9UQIAAAEDkfWSMwAAAAICApH8AAAAklRgA56xAJIKAAAAoVVgA8AAWDsAAGADnrEBSpIbARySGy7AAEFbAgACgJIlwFgAPIGSLMBYAEgAwACrPwbAAKs9gc6SOJJKkpgAAMAAQUoBapI5YAPAAP1RAgAAAQOSWpKYAAAAAgICkmEAAACSVGADnrEAkm8AAAChVWADwABYOwAAYAOesQFKkoABHJKALsAAQVsCAAKAkorAWACqgZKRwFgAtgDAAKs/BsAAqz6BzpKdkq+S/QAAwABbzgFqkp5gA8AA/VECAAABA5K/kv0AAAACAgKSxgAAAJJUYAOesQCS1AAAAKFVYAPAAFg7AABgA56xAUqS5QEckuUuwABBWwIAAoCS78BYARiBkvbAWAEkAMAAqz8GwACrP4HOkwKTFJV8AADAAEFbAWqTA2ADwAD9UQIAAAEDkx2VfAAAAAICApMkAAAAklRgA56xAJMyAAAAoVVgA8AAWDsAAGADnrEBPg1Ok0aTTAAAamADnrEBiJNOwFgBhhaTXICTVsBYAYaDsJ7MQBaTc4CTbcBYAYadcJ7Ck22TiABOk5iToQAAqZJgA8AAVxUBFpOqgZOjwFgBkqmSwABYPT0ck8GDk7jAWAHfoacCAAKAk9LAWAGGapPrYAPAAIwCwAEQ/wDAAFf/TpQOlBUAAKD/YAOesQGIlBfAWAGGFpQlgJQfwFgBhoOwnsxAHpQ2wABZvQIAAieBaoCURMBYAYYAlDaUSgA9iJRSwFgBhhaUYICUWsBYAYaDsJ7MQBaUd4CUccBYAYadcJ7ClHGUjAA9HJScg5STwFgB36GnAgACgJS2wFgBhmqUz2ADwACMAsABEXkAwABX/z0clPiDlO/AWAHfocEBAAGElQjAWAIoAMAAWBs9HJUfg5UWwFgB377XAQABFpU7gJU1wFgBhoOwnswAwABX3z0clU+DlUbAWAHfomcCAAKClVrAWAGpKwDAAFfUSpVsAYCVc8BYAYYGwACrQIHOlYGVk5XOAADAAEFYAWqVgmADwAD9UQIAAAEDlZuVzgAAAAEBAZWiAAAAklRgA56xAABgA56xAT4BSpWvARaVxhaVwRaVvICVtsBYA0uDsJ7Mg7CezIOwnswAAFf/ZwBX/6AAV//ZAFgAEABYAH4AWADsAFgBWgBYAx8AWAN/AAAACALAAKtDgc6WGZYfmHQDwABohAAAAWABwACrTAAAAAEFwACrS4HOlmOWaZanAQAAA5aIlqcAAAAAAAAAYAPAAKtDAT8BCQCWjcAAq1sBAAFqlpNgA8AAi3DAAWawAAQGwACrRYHOlqyWxZbtAQDAAEItAWqWrWADwAD9UQIAAAEDltOW7QAAAAAAAABgA8AAi2MBSpbWAWqW1mADwACLY8ABc6IGwACrRoHOlvKXB5cZAQC13QFqlvNgA8AA/VECAAABA5cSlxkAAAAAAAAAYAPAAPo/AUqXFQEpBsAAq0iBzpcelzCX5QAAwABohQFqlx9gA8AA/VECAAABA5c9l+UAAAADAwOXRAAAAGpgA56xAJdRAAAAklRgA56xAJdfAAAAoVVgA8AAWDsAAGADnrEBPgQ9iZdtwFgEuRaXe4GXdcBYBLmDsJ7MQB6XjMAAWb0CAAIngPSBl5rAWAS5AJeMl6AAPRyXtxaXroKXp8BYBMWpksAAWD2iZwIAAoCXwsBYBK6Bl8nAWAS5AMAAV9RKl9UBgZfcwFgEuQbAAKtJgc6X6pf8mHIAAMAAQVgBapfrYAPAAP1RAgAAAQOYBJhyAAAAAQEBmAsAAACSVGADnrEAAGADnrEBPgM9iJgYwFgFbxaYNh2YJsAAQVgBAAGAmC/AWAVvAMAAq1mDsJ7MQB6YR8AAWb0CAAIngPSAmFXAWAVvAJhHmFsASphiAYCYacBYBW8AAFgEBgBYBEsAWASCAFgFQwBYBc4AAAAEAsAAq0yBzpi1mLudWQPAAGiGAAABYAHAAP1RAAFgAcAAi2MBBMAAq06BzpkEmQsJniMAYAPAAItwAAEFwACrW4HOmRCZFpk7AQAAA5ktmTsAAAABAQGZMwAABJ4jYAPAAItwAABgA8AAq0wBPwIIAcAAq06AAMBYBj0JAZkWwAD9ZwAAAAAJBsAAq1CBzplAmVmZbgEAwABCLQFqmUFgA8AA/VECAAABA5lnmW4AAAAAAAAAYAPAAItjAUqZagEuBsAAq1GBzplzmYiZogEAwABCMgFqmXRgA8AA/VECAAABA5mamaIAAAAAAAAAYAPAAPo/AUqZnQEqBsAAq1KBzpmnmbyZzwEAtd0BapmoYAPAAP1RAgAAAQOZx5nPAAAAAAAAAGADwAD6PwFKmcoBKgbAAKtUgc6Z1JnmmjUAAMAAQYABapnVYAPAAP1RAgAAAQOZ95o1AAAAAgICmf4AAACSVGADnrEAmgwAAAChVWADwABYOwAAYAOesQFKmh0BHJodLsAAQVsCAAKAmifAWAdDgZouwFgHTwDAAKtXBsAAq1WBzpo6mkyamgAAwABBSgFqmjtgA8AA/VECAAABA5pcmpoAAAACAgKaYwAAAJJUYAOesQCacQAAAKFVYAPAAFg7AABgA56xAUqaggEcmoIuwABBWwIAAoCajMBYB7GBmpPAWAe9AMAAq1cGwACrVoHOmp+asZr/AADAAFvOAWqaoGADwAD9UQIAAAEDmsGa/wAAAAICAprIAAAAklRgA56xAJrWAAAAoVVgA8AAWDsAAGADnrEBSprnARya5y7AAEFbAgACgJrxwFgIH4Ga+MBYCCsAwACrVwbAAKtXgc6bBJsWnEAAAMAAQVsBapsFYAPAAP1RAgAAAQObH5xAAAAAAgICmyYAAACSVGADnrEAmzQAAAChVWADwABYOwAAYAOesQE+BU6bSJtOAABqYAOesQGIm1DAWAiNFptegJtYwFgIjYOwnsxAFpt1gJtvwFgIjZ1wnsKbb5uKAD0cm6EWm5iBm5HAWAiZqZLAAFg9oacCAAKAm7LAWAiNapvLYAPAAIwCwAERPADAAFf/PYib38BYCI0cm+8Wm+cuniPAAKtOwABBVQIAAoCb/sBYCI2BnAXAWAiZAMAAi3ZKnBIBHJwZLsAAaIUDAAOCnCfAWAiwgJwuwFgIjYGcNcBYCJkAwACrWAbAAKtYgc6cRZxLnMUAAMAAaIUAAAABA5xYnMUAAAADAwOcXwAAAGpgA56xAJxsAAAAklRgA56xAJx6AAAAoVVgA8AAWDsAAGADnrEBPgI9HJyYFpyPgpyIwFgJqKmSwABYPaJnAgACgJyjwFgJkSsAwABX1EqctQGBnLzAWAmcBsAAq1mBzpzKnNydVwAAwABBWAFqnMtgA8AA/VECAAABA5zknVcAAAABAQGc6wAAAJJUYAOesQAAYAOesQE+Az2InPjAWAobFp0GgJ0AwFgKG4OwnsxAFp0dgJ0XwFgKG51wnsKdF50yAEqdOQEcnUgWnUAuniPAAKtOli8BAAGAnU3AWAobAMAAi3gAAFgGbgBYBqcAWAbgAFgHFwBYB4UAWAfzAFgIYQBYCW8AWAnvAFgKewAAAAkCwACrXIHOnZWdm59YA8AAaIcAAAFgAcAAq2UAAAABBcAAq2SBzp3Fncud3wEAAAOd3Z3fAAAAAAAAAGADwACrXAE/AQkBncvAAKtyAAAAAAQGwACrXoHOneSd/Z4YAQDAAEItAWqd5WADwAD9UQIAAAEDngueGAAAAAAAAABgA8AAi2MBSp4OAWqeDmADwACLY8ABZtQGwACrX4HOnh2eMp5EAQC13QFqnh5gA8AA/VECAAABA549nkQAAAAAAAAAYAPAAPo/AUqeQAEpBsAAq2GBzp5JnlufCQAAwABohQFqnkpgA8AA/VECAAABA55onwkAAAACAgKebwAAAGpgA56xAJ59AAAAoVVgA8AAWDsAAGADnrEBPgROnpGelwAAklRgA56xARaen4CemcBYC6GDsJ7MQB6esMAAWb0CAAIngPSCnr7AWAvDAJ6wnsQAPRye2xae0oGey8BYC6ypksAAWD2iZwIAAoCe5sBYC6GCnu3AWAvDAMAAV9RKnvkBgp8AwFgLwwbAAKtigc6fDp8gn1YAAMAAQVgBap8PYAPAAP1RAgAAAQOfKJ9WAAAAAQEBny8AAACSVGADnrEAAGADnrEBPgFKnzwBFp9OFp9JgJ9DwFgMXIOwnsyDsJ7MAABYCvkAWAs+AFgLdQBYDDAAWAyJAAAABALAAKtlgc6fjJ+So4EDwABoiAAAAWABwAD9UQABYAHAAItjAAEFwACrcoHOn7Wfu5/HAQAAA5/Fn8cAAAAAAAAAYAPAAKtlAT8BCQGfu8AA/WcAAAAACQbAAKtngc6fzJ/ln/oBAMAAQi0Bap/NYAPAAP1RAgAAAQOf85/6AAAAAAAAAGADwACLYwFKn/YBLgbAAKtogc6f/6AUoC0BAMAAQjIBaqAAYAPAAP1RAgAAAQOgJqAtAAAAAAAAAGADwAD6PwFKoCkBKQbAAKtpgc6gMqBHoFoBALXdAWqgM2ADwAD9UQIAAAEDoFKgWgAAAAAAAABgA8AA+j8BSqBVASoGwACra4HOoF+gcaDAAADAAEGAAWqgYGADwAD9UQIAAAEDoIKgwAAAAAICAqCJAAAAklRgA56xAKCXAAAAoVVgA8AAWDsAAGADnrEBSqCoARygqC7AAEFbAgACgKCywFgNzoGgucBYDdoAwACrbgbAAKtsgc6gxaDXoSUAAMAAQUoBaqDGYAPAAP1RAgAAAQOg56ElAAAAAgICoO4AAACSVGADnrEAoPwAAAChVWADwABYOwAAYAOesQFKoQ0BHKENLsAAQVsCAAKAoRfAWA48gaEewFgOSADAAKtuBsAAq22BzqEqoTyhigAAwABbzgFqoStgA8AA/VECAAABA6FMoYoAAAACAgKhUwAAAJJUYAOesQChYQAAAKFVYAPAAFg7AABgA56xAUqhcgEcoXIuwABBWwIAAoChfMBYDqqBoYPAWA62AMAAq24GwACrboHOoY+hoaK/AADAAEFbAWqhkGADwAD9UQIAAAEDoaqivwAAAAICAqGxAAAAklRgA56xAKG/AAAAoVVgA8AAWDsAAGADnrEBPgU9iKHNwFgPGBah24Ch1cBYDxiDsJ7MQB6h7MAAi18BAAGAogHAWA8YAKHsogcAPRyiHhaiFYGiDsBYDySpksAAWD2hpwIAAoCiL8BYDxhqokhgA8AAjALAARE8AMAAV/89iKJcwFgPGByidWqiZGADwACLcMABCyjAAEFVAgACgKKEwFgPGIGii8BYDyQAwACLdkqimAEcop8uwABohQIAAoCircBYDxiBorTAWA8kAMAAq28GwACrb4HOosSiyqM3AADAAGiFAAAAAQOi16M3AAAAAgICot4AAACSVGADnrEAouwAAAChVWADwABYOwAAYAOesQE+Aj0cowoWowGBovrAWBAcqZLAAFg9omcCAAKAoxXAWBAQKwDAAFfUSqMnAYCjLsBYEBAGwACrcIHOozyjTqN/AADAAEFYAWqjPWADwAD9UQIAAAEDo1ajfwAAAAEBAaNdAAAAklRgA56xAABgA56xAT4BSqNqARajd4CjccBYEI+DsJ7MAABYDPkAWA0yAFgNawBYDaIAWA4QAFgOfgBYDuwAWA/uAFgQYwBYELUAAAAJAsAAq3OBzqOzo7mnQQOGdQAAAWABwAD9UQABYAHAAItjAAEFwACrf4HOo9qj4KPqAQAAA6Poo+oAAAAAAAAAYAPAAKtzAT8BCQGj4MAA/WcAAAAACAbAAKt1gc6j76QIpB0BAMAAQi0BaqPwYAPAAP1RAgAAAQOkFqQdAAAAAAAAAGADwACLYwFKpBkBLgbAAKt2gc6kIqQ3pFEBAMAAQjIBaqQjYAPAAP1RAgAAAQOkSaRRAAAAAAAAAGADwAD6PwFKpEwBKgbAAKt3gc6kVqRrpH4BALXdAWqkV2ADwAD9UQIAAAEDpHakfgAAAAAAAABgA8AA+j8BSqR5ASoGwACreYHOpIOklaWMAADAAEGAAWqkhGADwAD9UQIAAAEDpKaljAAAAAICAqStAAAAklRgA56xAKS7AAAAoVVgA8AAWDsAAGADnrEBPgI9HKUVgaUOwFgSGMAAQSECAAIWpTKApSzAWBIMg7CezGqlPmADkVnAAGAbAMAAWRBKpVcBHKVpaqVeYAPAAItjwAFm1MAAW84CAAKApXrAWBIMgaWBwFgSGADAAItrBsAAq3qBzqWRpaOl8QAAwABBSgFqpZJgA8AA/VECAAABA6WzpfEAAAACAgKlugAAAJJUYAOesQClyAAAAKFVYAPAAFg7AABgA56xAUql2QEcpdkuwABBWwIAAoCl48BYEriBperAWBLEAMAAq3wGwACre4HOpfamCKZeAADAAFvOAWql92ADwAD9UQIAAAEDphimXgAAAAICAqYfAAAAklRgA56xAKYtAAAAoVVgA8AAWDsAAGADnrEBSqY+ARymPi7AAEGAAgACgKZQwFgTJoGmV8BYEzIAwACreQbAAKt8gc6mY6Z1pvcAAMAAQVsBaqZkYAPAAP1RAgAAAQOmfqb3AAAAAgICpoUAAACSVGADnrEAppMAAAChVWADwABYOwAAYAOesQE+Az2IpqHAWBOUFqavgKapwFgTlIOwnsw9HKbJFqbAgaa5wFgToKmSwABYPaJ4AQABgKbbwFgTlADAAFgoSqbnAYCm7sBYE5QGwACrfYHOpvynDqc/AADAAEFYAWqm/WADwAD9UQIAAAEDpxanPwAAAAEBAacdAAAAklRgA56xAABgA56xAT4BSqcqARanN4CnMcBYFCiDsJ7MAABYETcAWBFwAFgRqQBYEeAAWBKMAFgS+gBYE2gAWBP8AFgUTgAAAAgCwACrgIHOqwirDsAAUgwDwABoiQAAAWABwAD9UQABYAHAAItjBgTAAKuCgc6raatuGGoAYAOesQAEwACrg4HOq7yryQmFHQBgA8AAi3AABMAAq4SBzqyRrKMYwABoigBgA56xASsEwACrhYHOrNqs3RiCjABgA56xAATAAKuGgc6tXq2IGMAAaIsAXQOS5wFgA56xAWqte10DkucBYAOescABc7EEwACrh4HOriGuMRjAAGiMAGADwAD6PwACBcAAq5uBzq42rjauugAAAAOuRa66AAAAAgICrkwAAADAAEGcYAOesQCuXgAABIUdYAPAAItwAABgA8AAq4ABPgFAIRyurhauoC6FHcAAq4NIAQABKwDAAP1erqCutQAFCAHAAKuHKwgBwACrhSsIAcAAq4OBAMBYFV4IAMAAq4IWro6AroLAWBVQg7CezAkBrjbAAP1nAAAAAAXAAKudgc6uv66/rz0AwABojcAAqxcAA67brz0AAAAFBQWu4QAABGpgA56xAK7tAAAEhR1gA8AAi3AArwEAAASCjGADnrEArxEAAATAAGiLXQOS5wFgA56xAK8sAAAEwABojGADwAD6PwAAYAPAAKuAAT8GCAHAAKuCgADAWBXxCAHAAKuDgQDAWBX8CAHAAKuFggDAWBYKCAHAAKuGgwDAWBYWCAHAAKuHhADAWBYpCQGuv8AA/WcAAAAAEAbAAKuJgc6vQq9bsCwBAMAAQi0Baq9DYAPAAP1RAgAAAQOvabAsAAAAAAAAAGADwACLYwE+AUqvbwEjHK+JFq92LsAAaIrAAKuESAEAASsAwAD9Xi4fr67AAKudBQAFFq/LLmrAAKuCFq/SLoUdwACrgxav7S7AAGiKwACrhBawAS7AAGiLwACrhhawFy7AAGiMwACrhwABYAPAAKuABsAAq4qBzrAxsEawogEAwABCMgFqsDJgA8AA/VECAAABA7BYsKIAAAAAAAAAYAPAAPo/AUqwYQEiHLBvFrBhLoUdwACrg0gBAAFqsHJgA8AAi3DAAQsoAMAA/V4AFrCbFrCGLsAAaIvAAKuGgVWS7AbAAKuLgc6wp7C8sOQBALXdAWqwqGADwAD9UQIAAAEDsMew5AAAAAAAAABgA8AA+j8BSrDKASEcsN0WsMouwABoisAAq4RIAQABKwDAAP1eBsAAq42BzrDpsPuxSgAAwABBgAFqsOpgA8AA/VECAAABA7EMsUoAAAACAgKxEwAAAJJUYAOesQCxIQAAAKFVYAPAAFg7AABgA56xAUqxMgEcsTIuwABBWwIAAoCxPMBYGBaBsUPAWBgiAMAAq5AGwACrjoHOsU+xYbGvAADAAEFKAWqxUGADwAD9UQIAAAEDsXGxrwAAAAICArF4AAAAklRgA56xALGGAAAAoVVgA8AAWDsAAGADnrEBSrGXARyxly7AAEFbAgACgLGhwFgYhIGxqMBYGJAAwACrkAbAAKuPgc6xtLHGshQAAMAAW84BarG1YAPAAP1RAgAAAQOx1rIUAAAAAgICsd0AAACSVGADnrEAsesAAAChVWADwABYOwAAYAOesQFKsfwBHLH8LsAAQVsCAAKAsgbAWBjygbINwFgY/gDAAKuQBsAAq5CBzrIZsiu/6AAAwABBWwFqshpgA8AA/VECAAABA7I0v+gAAAACAgKyOwAAAJJUYAOesQCySQAAAKFVYAPAAFg7AABgA56xAT4KQB6yXsAA9eYCAAIWsm6AsmjAWBlgg7CezBaydC5qwACrggCyXrJ6AEmygh6yhsAAWb0CAAIngWoWspQuasAAq4IAPgE9F7LoLmocsveBsvDAWBlswABBIgIAAoCzHMBYGWBqszVgA8AAjALAARD/AMAAWIrAAKuCP06zXrN0AAHAAGiOXQPAAPypAWADnrEBMbN9YAOesQBFs4UBs5azmAAAg6ZdA5LnAWADnrEBFrOaLsAAaIvAAKuGARazsoOzsMBYGh6DspLtAYuzvsBYGh4Ws8SDs8LAWBoeg+uS6j4CPRyz6IKz0sBYGfxWAQABHLQbHrP3wACLYQIAAha0D4O0DcBYGh6D6pLpKQDAAEFaAgACFrQsg7QqwFgaHoPqkumBtDLAWBlsAMAAi3cAwAD8uj0ctFIWtEmBtELAWBlsqZLAAFg9om4BAAEWtGQuasAAq4IAwABX2km0dxy0jBa0ey7AAGiMwACrh0gBAAEqAMAA/V4+AT0ctTpqtTNgA8AAi2PAAQpRwABBWwIAAoC1RMBYGWCBtUvAWBlsAMAAi2w+Ak61bbV9AADAAGiPYAOesQEWtYWAtX/AWBlgg7CezEm1kR61lcAAWb0CAAInmh+DtabAWBsoAD4BPYi1wsBYGWActdNqtcpgA8AAi2PAAWaXwABBWwIAAoC13cBYGWCBteTAWBlsAMAAi2w+BUm2BCIhHrYJwABZvQIAAieBaoO2F8BYGygAACEetjjAAFm9AgACJ4FqFrZWg7ZGwFgbKIOwnswAPgE9iLZpwFgZYBy2hoG2f8BYGWzAAEE0AgACgLaXwFgZYGq2sGADwACMAsABETwAwABYiz4DPYi228BYGWActuqBtuPAWBlswABBNAIAAoC3CsBYGWBqtyNgA8AAjALAARD/AMAAWIs9iLdFwFgZYBy3VIG3TcBYGWzAAEF6AgACgLd2wFgZYGq3j2ADwACMAsABEXkAwABYeUm3tSIWt7+At7nAWBlghI2exQAct9IWt84ugozAAKuFSAEAARa35YO31cBYGyiDsJ7MAMAA/V4+AT0XuEcugoyAuE3AWBlgwACrhT89iLhywFgZYBy4iBa4ei6FHcAAq4PAAEFVAgACgLiXwFgZYIG4nsBYGWwAwACLdk64+LkFAACiaGADnrEBFrkNgLkHwFgZYIOwnsxJuRsiHrkfwABZvQIAAieA9IS5LcBYHOEAACIWuWGCuUvAWBn8g7LAAPyMASEcuYIWuW8uwABoisAAq4RIAQABKwDAAP1ePgE9iLmYwFgZYIS5oMBYHOE+AT2MucnAWBzhKz0cugEWufiBufHAWBlsqZLAAFg9omcCAAKDugzAWBsohLodwFgc4QDAAFfUTrpDulEAAMAAaJBgA8AA/AUBHLpwFrppgrpTwFgZ/GHAAPzYgY0BAAGUAMAA/StFunkBuoq6jAAAg6ZdA5LnAWADnrEBFrqOLsAAaIvAAKuGARa6poS6pMBYHb2DspLtAYy6ssBYHb0WuriEurbAWB29g+uS6j4JPYi6xsBYGWAWutSAus7AWBlgg7CezEAeuufAAFm9AgACJ5vUgLr8wFgZYAC657sCAE67EbsfAACidmADnrEBgLshwFgZYEm7Lx67M8AAWb0CAAInYxa7R4C7QcBYGWCDsJ7MAD4CPYi7kcBYGWAcu66Cu5nAWBn8SwEAAYO7r8BYHYsAwAD8uEAeu87AAFm9AgACJ4CXgLvcwFgZYAC7zrviAD89iLvzwFgZYBy8AoG7+8BYGWzAAEFcAgACgLwuwFgZYGq8QGADwABZn8AAwuYAwABYcE68p7y0AACiaGADnrEBFry8gLy2wFgZYIOwnsxJvMgiHrzMwABZvQIAAieA9Ia82sBYHtkAACIcvQSDvPbAWB2LgJcBAAGTAMAA/TQBIRy9Hha9Cy7AAGiKwACrhEgBAAErAMAA/V4+AT2IvTLAWBlghr06wFge2T4BPY69X8BYHtkrPYu9hcBYHYscvYODvYXAWB2LgY0BAAGUAMAA/Ss9HL2qFr2hgb2awFgZbKmSwABYPaJ1AgAChb26wFgeNIa9ycBYHtkAwABX20AiHr8hwAD15gIAAoC/K8BYGWAWvzIugozAAKuFAAEevzrAAFm9AgACJ4CXgL9IwFgZYAC/Ib9OAD0Xv8cugoyAv83AWBlgwACrhUq/2AGAv9/AWBlgBsAAq5GBzr/tv//AAEApAADAAEFYAWq/7mADwAD9UQIAAAEDwABAB8AAQCkAAAABAQHAAEAOAAAAklRgA56xAABgA56xAT4BSsAAQBsBFsAAQCIugozAAKuFBsAAq5KBzsAAQKjAAECxwABB4gAAwABb1QAAAAEDwABAwcAAQeIAAAACAgLAAEDIAAAAwABBnGADnrEAwABA2gAAAJ1QYAPAAPo/AABgA8AAi2MBPgZAHsAAQPHAAFm9AgACJ5vUFsAAQQYuasAAq4IAwABA8cAAQQwAQBzAAEErFsAAQSaAwABBGsBYIICDsJ7MSAEAARbAAEEuLmrAAKuCAMAA/V7AAEEawABBMwA9HMAAQTsuwABokQIAAoDAAEFHwFgggIHAAEFUwFggkADAAKuZScAAQWMcwABBeBbAAEFnLsAAaIzAAKuHSAEAASsAwAD9Xj4BSsAAQYkBI4HAAEGQwFggkGrAAEGbYAPAAItjwAFm1GrAAEGoYAPAAItjwAEKUQFgA8AAi2M/QCEcwABBxRbAAEHBLoKMwACrhUgBAAErAMAA/V7AAEHBwABBzABKwABB0wEuBsAAq5OBzsAAQmbAAEJvwABDcgAAwABb1AAAAAEDwABCfcAAQ3IAAAABAQHAAEKDAAAAnVBgA8AA+j8AAGADwACLYwE+BkAewABCmsAAWb0CAAInmh8WwABCqy5qwACrggDAAEKawABCsQBAHsAAQr/AAFm9AgACJ5vUFsAAQtoWwABC1C5qwACrgoOwnswAwABCv8AAQt8APRzAAELnLsAAaJECAAIWwABC8y5qwACrgoDAAEL6wFgh3ADAAKuZScAAQwkcwABDHhbAAEMNLsAAaIzAAKuHSAEAASsAwAD9Xj4BSsAAQy8BasAAQzZgA8AAi2PAAWaXP0AhHMAAQ1UWwABDUS6CjMAAq4VIAQABKwDAAP1ewABDUcAAQ1wASsAAQ2MBLgbAAKuUgc7AAEP8wABEBcAARRQAAMAAW9cAAAABA8AARBnAAEUUAAAAAQEBwABEHwAAAJ1QYAPAAPo/AABgA8AAi2MBPgZAHsAARDbAAItfAQABFsAAREsuasAAq4IAwABENsAARFEAQB7AAERfwABZvQIAAieb1BbAAER6FsAARHQuasAAq4KDsJ7MAMAARF/AAER/AD0cwABEhy7AAGiRAgACFsAARJMuasAAq4KAwABEmsBYIwMAwACrmUnAAESpHMAARL4WwABErS7AAGiMwACrh0gBAAErAMAA/V4+AUrAAETPAWrAAETWYAPAAItjwAFm1D9AIRzAAET3FsAARPMugozAAKuFSAEAASsAwAD9XsAARPPAAET+AErAAEUFAS4GwACrlYHOwABFosAARavAAEb2AADAAFvYAAAAAQPAAEXHwABG9gAAAAEBAcAARc0AAACdUGADwAD6PwAAYAPAAItjAT4HQB7AAEXkwACLXwEAARbAAEX5LmrAAKuCAMAAReTAAEX/AEAewABGDcAAWb0CAAIngPQWwABGIRbAAEYbLmrAAKuCg7CezADAAEYNwABGJgBAHsAARjTAAFm9AgACJ5vUFsAARlQWwABGTxbAAEZJLmrAAKuCg7CezIOwnswAwABGNMAARlkAPRzAAEZhLsAAaJECAAIWwABGbS5qwACrgoDAAEZ0wFgkJwDAAKuZScAARoMcwABGmBbAAEaHLsAAaIzAAKuHSAEAASsAwAD9Xj4BSsAARqkBasAARrBgA8AAi2PAAWbNP0AhHMAARtkWwABG1S6CjMAAq4VIAQABKwDAAP1ewABG1cAARuAASsAARucBLgbAAKuWgc7AAEdzwABHfMAASFUAAMAAW9IAAAABA8AAR5XAAEhVAAAAAQEBwABHmwAAAJ1QYAPAAPo/AABgA8AAi2MBPgVAIhbAAEe9FsAAR7gWwABHsi5qwACrgoKQntGdZZ9aAR7AAEfKwABZvQIAAieEJhbAAEfaLmrAAKuCAMAAR7LAAEfgAD0XwABH6C6CjBzAAEf8FsAAR+4uhR3AAKuDli8BAAEWwABIAS5qwACrggDAAIt4wACrhT0cwABIDS7AAGiRAgACFsAASBkugozAAKuFgMAASB7AWCWCAMAAq5lAIRzAAEg4FsAASDQugozAAKuFSAEAASsAwAD9XsAASDTAAEg/AErAAEhGAS4GwACrl4HOwABI0cAASNrAAEpkAADAAFvWAAAAAQPAAEj4wABKZAAAAAEBAcAASP4AAACdUGADwAD6PwAAYAPAAItjAT4IQB7AAEkVwACLXwEAARbAAEkqLmrAAKuCAMAASRXAAEkwAEAewABJPsAAWb0CAAInYxbAAElSFsAASUwuasAAq4KDsJ7MAMAAST7AAElXAEAhHMAASXMWwABJZS6FHcAAq4NIAQABasAASXZgA8AAi3DAAQsoAMAA/V7AAEllwABJhgA9F8AASY4ugowcwABJohbAAEmULoUdwACrg5YvAQABFsAASacuasAAq4IAwACLeMAAq4U9HMAASbMuwABokQIAAhbAAEm/LoKMwACrhYDAAEnEwFgmlADAAKuZScAASdQiIiGAwABJ2cBYJpQAIR7AAEnmwACrJAEAARbAAEn4FsAASfQugozAAKuFg7CezAAAHMAAShIWwABKAS7AAGiMwACrh0gBAAErAMAA/V4+AUrAAEojAWrAAEoqYAPAAItjwAEKUT9AIRzAAEpHFsAASkMugozAAKuFSAEAASsAwAD9XsAASkPAAEpOAErAAEpVAS4GwACrmIHOwABLHMAASyXAAE0XAADAAFvTAAAAAQPAAEs4wABNFwAAAAEBAcAASz4AAACdUGADwAD6PwAAYAPAAItjAT4JTsAAS1TAAEtaAACSVGADnrEBFsAAS1wuasAAq4JJwABLZyEewABLbMAAWb0CAAIngWqBwABLesBYKGsAPgJAFsAAS5eBwABLkcBYKGudcJ7CwABLkcAAS6wAPYnAAEu1wFgoaxbAAEvDgcAAS73AWChrg7CezD9AHsAAS9rAAFm9AgACJ4FqgcAAS+jAWChrAMAAS9rAAEvuAEnAAEv1FsAATAQWwABL/4HAAEv5wFgoa4OwnsydcJ7CPgE9icAATCPAWChrFsAATDGBwABMK8BYKGuDsJ7MPz0XwABMQi6CjBzAAExWFsAATEguhR3AAKuDli8BAAGBwABMW8BYKGsAwACLeMAAq4U9HMAATGcuwABokQIAAhbAAExzLoKMwACrhYDAAEx4wFgoUADAAKuZScAATIciIiGAwABMjMBYKFAAIR7AAEyZwACrJAEAARbAAEyrFsAATKcugozAAKuFg7CezAAAHMAATMUWwABMtC7AAGiMwACrh0gBAAErAMAA/V4+AUrAAEzWAWrAAEzdYAPAAItjwAEKUT9AIRzAAEz6FsAATPYugozAAKuFSAEAASsAwAD9XsAATPbAAE0BAErAAE0IAS4GwACrmYHOwABNHMAATSHAAFIKAADAAGiRAAAAAQPAAE0swABSCgAAAAICAsAATTMAAACSVGADnrEAwABNPwAAAJ1QYAPAAPo/AABcAT4DScAATU8ewABNU8AAWb0CAAIngPQWwABNZ4DAAE1hwFgqYIOwnswAPgI9F8AATXYuwABoioDAAE2LwFgqYMAAq4Q9F8AATZgugoyIwABNnsBYKmAWwABNrIDAAE2mwFgqYIOwnszAAKuFPz2IwABNvMBYKmAWwABNyoDAAE3EwFgqYIOwnsxBQ8AATdQewABN28AAWb0CAAInm9SAwABN8MBYKmAAPg5OwABOBsAAThgAAMAAaJJgA56xAYDAAE4awFgqYD2IwABOZMBYKmAcwABOjx7AAE5swACLYQIAAoDAAE6CwFgqYCkAli8BAAGAwABOlMBYKmAAwACLeD2IwABOosBYKmAWwABOsIDAAE6qwFgqYIOwnsxJwABOvCEewABOwcAAWb0CAAIng9eAwABOz8BYKmAAPgFCwABO4QA/PYjAAE8OwFgqYBbAAE8cgMAATxbAWCpgnRievknAAE8sHMAATzaAwABPMMBYKmBIAQABKwDAAP1ePgFCwABPSQA/ScAAT3YhgcAAT3vAWCpuPgNOwABPlcAAT5oAAIOwYAOesQEWwABPooDAAE+cwFgqYIOwnsxJwABPsB7AAE+0wABZvQIAAieA9IPAAE/CwFgsGAA+AT2LwABP1cBYLBgWwABP4YPAAE/cwFgsGIOwnsw/ScAAT/khIhbAAFAEg8AAT//AWCwYnPOewAEewABQFMAAWb0CAAInmfmDwABQJcBYLBgAPgFCwABQOQA/P0AewABQmcAAWb0CAAIngyGAwABQp8BYKmAAwABQmcAAUK0APSMcwABQxxbAAFC2LsAAaIzAAKuHSAEAASsAwAD9XhfAAFC2LsAAaIwhHMAAUN2CwABQy8BYKytIAQABFsAAUOAuasAAq4IAwAD9XsAAq4crAWADwAD6Pz0XwABQ7S7AAGiLHMAAURkWwABRBC7AAGiLwACrhoPoAQABgsAAUSHAWCsrAJL0wACrhj0XwABRPC7AAGiKK8AAq4Q9F8AAUV0ugoyAwABRY8BYKmDAAKuFPYjAAFFwwFgqYBbAAFF+gMAAUXjAWCpgg7CezEnAAFGLHsAAUY/AAFm9AgACJ4D0gMAAUZ3AWCpgAD4DPRfAAFGvLsAAaIoWwABRxC6CjMAAq4XAAKuEPRfAAFHRLoKMgMAAUdfAWCpgwACrhT2IwABR5sBYKmAWwABR9IDAAFHuwFgqYIOwnsw/AABYFowAWBcqAFgXmgBYF+oAWBhYAFgYxgBYGTQAWB/6AFggVABYIbAAWCLXAFgj+wBYJVYAWCZoAFgoJABYKjQAWC4TAAAAEALAAKuegc7AAFIrwABSMcAAU/kDwABokwAAAWABwACLcAAAAAEFwACrpoHOwABSYcAAUmfAAFJ5AQAAA8AAUnfAAFJ5AAAAAAAAAGADwACrngE/AQkBwABSZ8AAi3oAAAAABAbAAKuggc7AAFJ+wABSksAAUqgBAJVoAWrAAFJ/YAPAAP1RAgAAAQPAAFKkwABSqAAAAAAAAABgA8AA/AUBSsAAUqcBkwbAAKuigc7AAFKtwABSv8AAUzcAAMAAQVUBasAAUq5gA8AA/VECAAABA8AAUs3AAFM3AAAAAgICwABS1AAAAJJUYAOesQDAAFLiAAAAoVVgA8AAWDsAAGADnrEBPgI9HMAAUwAWwABS94HAAFLwwFgvSqmSwABYPb7XAQABFsAAUxyAwABTFsBYLzyDsJ7MAMAAV99KwABTJwGAwABTLsBYLzwGwACro4HOwABTPMAAU07AAFPGAADAAEFaAWrAAFM9YAPAAP1RAgAAAQPAAFNcwABTxgAAAAICAsAAU2MAAACSVGADnrEAwABTcQAAAKFVYAPAAFg7AABgA56xAT4CPRzAAFOPFsAAU4aBwABTf8BYL+2pksAAWD2jlAEAARbAAFOrgMAAU6XAWC/fg7CezADAAFgUSsAAU7YBgMAAU73AWC/fBsAAq6SBzsAAU8vAAFPdwABT9wAAli8BasAAU8xgA8AA/VECAAABA8AAU+HAAFP3AAAAAQEBwABT6AAAAJJUYAOesQAAYAOesQFKwABT8gGAwABT8sBYMIAAAFguvwBYLwQAWC+nAFgwSgBYMKMAAAAEAsAAq6eBzsAAU/zAAFQCwABbMAPAAGiUAAABYAHAAItwAAAAAQXAAKuzgc7AAFQ1wABUO8AAVFABAAADwABUTsAAVFAAAAAAAAAAYAPAAKunAT8BCQHAAFQ7wACLegAAAAAIBsAAq6mBzsAAVFXAAFRqwABUhgEAwABbzwFqwABUVmADwAD9UQIAAAEDwABUf8AAVIYAAAAAAAAAYAPAAPo/AUrAAFSCASkGwACrqoHOwABUi8AAVJ/AAFS1AQCVaAFqwABUjGADwAD9UQIAAAEDwABUscAAVLUAAAAAAAAAYAPAAPwFAUrAAFS0AZQGwACrq4HOwABUusAAVNPAAFT2AQDAAEFXAWrAAFS7YAPAAP1RAgAAAQPAAFTcwABU9gAAAAAAAABgA8AAi2MBSsAAVN8BasAAVN9gA8AAi2PAAXOiBsAAq62BzsAAVPvAAFUNwABWnwAAwABBVQFqwABU/GADwAD9UQIAAAEDwABVG8AAVp8AAAACAgLAAFUiAAAAklRgA56xAMAAVTAAAAChVWADwABYOwAAYAOesQE+CE7AAFVEwABVTwAAwABBsGADnrEBFsAAVVeAwABVUcBYMjiDsJ7MQB7AAFVowABZvQIAAidjgsAAVXbAWDJfAMAAVWjAAFWBAE7AAFWOwABVlwAAnRhgA56xARzAAFWZLsAAaJUCAAKCwABVp8BYMl8WwABVvoLAAFWzwFgyX4OwnswAwACrsU7AAFXSwABV2wAAqZJgA8AAVxUBFsAAVeSBwABV3cBYMkapksAAWD09HMAAVfuEwABV8sBYMubAAEDWAQABgsAAVg7AWDJfAMAAV9w9HMAAVipqwABWH2ADwACLY8ABZtTAAEFbAgACgsAAVjTAWDJfgcAAVkDAWDJGAMAAi2w9HMAAVl0WwABWVIHAAFZNwFgyRqmSwABYPaMEAwADlILAAFZxwFgyX4PAAFZ9wFgypwDAAFfdSsAAVowBg8AAVpPAWDKnBsAAq66BzsAAVqTAAFa2wABZaQAAwABBWgFqwABWpWADwAD9UQIAAAEDwABWxMAAWWkAAAACAgLAAFbLAAAAklRgA56xAMAAVtkAAAChVWADwABYOwAAYAOesQE+D07AAFbtwABW+AAAwABBsGADnrEBFsAAVwCAwABW+sBYM+KDsJ7MQB7AAFcRwABZvQIAAidjgsAAVx/AWDQJAMAAVxHAAFcqAD2IwABXMcBYM+IWwABXRILAAFc5wFg0CYOwnsxOwABXVMAAV10AAJ0YYAOesQEcwABXXy7AAGiVAgACgsAAV23AWDQJgMAAV3nAWDPiAMAAq7FOwABXjsAAV5cAAKmSYAPAAFcVARbAAFeggcAAV5nAWDPwqZLAAFg9PRzAAFe3hMAAV67AWDSjwABA1wEAAYLAAFfKwFg0CQDAAFfjPRzAAFfkhMAAV9vAWDSjwABAwwEAAYDAAFf2wFgz4gDAAFeoPRzAAFgLhMAAWALAWDSjoQQBAAGTAMAAV6k9HMAAWCyEwABYI8BYNKOhpwIAAoDAAFg9wFgz4mrAAFhWYAPAAIwJwAEQwgDAAFf/PRzAAFh9hMAAWHTAWDSjo4sBAAGAwABYj8BYM+IAwABX4D0cwABYpITAAFibwFg0o6OMAgACgMAAWL/AWDPilADAAFfhPRzAAFjXhMAAWM7AWDSjvtsBAAGAwABY5MBYM+IAwABYEz0cwABY+YTAAFjwwFg0o6ONAwADg8AAWQnAWDRtkysAwABX4j0cwABZKoTAAFkhwFg0o6OQAgACgsAAWTvAWDQJg8AAWUfAWDRtAMAAV+RKwABZVgGDwABZXcBYNG0GwACrr4HOwABZbsAAWYDAAFoxAACWLwFqwABZb2ADwAD9UQIAAAEDwABZhMAAWjEAAAABAQHAAFmLAAAAklRgA56xAABgA56xAT4FPYjAAFmYwFg2WBbAAFmmgMAAWaDAWDZYg7CezEAewABZt8AAWb0CAAInY4DAAFnFwFg2WADAAFm3wABZywA9iMAAWdLAWDZYFsAAWeCAwABZ2sBYNliDsJ7MQBbAAFn3gMAAWfHAWDZYnXCewsAAWfHAAFoMAErAAFoTARzAAFoaLsAAaJYBAAGAwABaJ8BYNlgAwACrsAbAAKuwgc7AAFo2wABaPMAAWqYAAMAAaJYAAAABA8AAWkjAAFqmAAAAAQEBwABaTwAAAJJUYAOesQAAYAOesQE+Az2IwABaXMBYNzEWwABaaoDAAFpkwFg3MYOwnsxAHsAAWnvAAFm9AgACJ4CXgMAAWonAWDcxAMAAWnvAAFqPAErAAFqWAYDAAFqdwFg3MQbAAKuxgc7AAFqrwABascAAWy4AAMAAaJUAAAABA8AAWr7AAFsuAAAAAgICwABaxQAAAMAAQbBgA56xAMAAWtcAAACSVGADnrEAAGADnrEBPgM9icAAWuTAWDfRFsAAWvKBwABa7MBYN9GDsJ7MQB7AAFsDwABZvQIAAieAl4HAAFsRwFg30QDAAFsDwABbFwBKwABbHgGBwABbJcBYN9EAAFgxHwBYMWYAWDGrAFgyAABYM6oAWDYiAFg3BQBYN5UAWDg1AAAACALAAKu0gc7AAFszwABbOcAAXYMDwABolwAAAWABwACrpwAAAAEFwACru4HOwABbccAAW3fAAFuQAQAAA8AAW47AAFuQAAAAAAAAAGADwACrtAE/AQkBwABbd8AAq7MAAAAAAwbAAKu2gc7AAFuVwABbrsAAW9UBAMAAQVcBasAAW5ZgA8AA/VECAAABA8AAW7fAAFvVAAAAAAAAAGADwACLYwFKwABbugFqwABbumADwACLY8ABc7oGwACruIHOwABb2sAAW+DAAFxWAADAAGiWAAAAAQPAAFvswABcVgAAAAEBAcAAW/MAAACSVGADnrEAAGADnrEBPgM9iMAAXADAWDlCFsAAXA6AwABcCMBYOUKDsJ7MQB7AAFwfwABZvQIAAieBbYDAAFwuwFg5QgDAAFwfwABcNABKwABcOwEewABcQsAAWcsBAAGAwABcTMBYOUIABsAAq7mBzsAAXFvAAFxhwABdgQAAwABolQAAAAEDwABcbsAAXYEAAAACAgLAAFx1AAAAwABBsGADnrEAwABchwAAAMAAaJhgA56xAABgA56xAT4ETsAAXKPAAFysAACdGGADnrEBFsAAXL2BwABcrsBYOe+DsJ7MScAAXMchHsAAXMzAAFm9AgACJ4CXgsAAXNrAWDoIAD4CPYrAAFztwFg6CB7AAFz4wABZywEAAYLAAF0CwFg6CAA9HMAAXSEWwABdHILAAF0TwFg6CIOwnsydewEAARbAAF03FsAAXTKCwABdKcBYOgiDsJ7Mg7CezACe2z89HMAAXVeBwABdSMBYOe+dewEAAYLAAF1fwFg6CACe20rAAF1uAYLAAF11wFg6CAAAWDjBAFg5FgBYObMAWDrXAAAAAwLAAKu8gc7AAF2GwABdjMAAX9YDwABomQAAAWABwACrpwAAAAEFwACrw4HOwABdxMAAXcrAAF3jAQAAA8AAXeHAAF3jAAAAAAAAAGADwACrvAE/AQkBwABdysAAq7MAAAAAAwbAAKu+gc7AAF3owABeAcAAXigBAMAAQVcBasAAXelgA8AA/VECAAABA8AAXgrAAF4oAAAAAAAAAGADwACLYwFKwABeDQFqwABeDWADwACLY8ABc8kGwACrwIHOwABeLcAAXjPAAF6pAADAAGiWAAAAAQPAAF4/wABeqQAAAAEBAcAAXkYAAACSVGADnrEAAGADnrEBPgM9iMAAXlPAWDvQFsAAXmGAwABeW8BYO9CDsJ7MQB7AAF5ywABZvQIAAieDvIDAAF6BwFg70ADAAF5ywABehwBKwABejgEewABelcAAWcwBAAGAwABen8BYO9AABsAAq8GBzsAAXq7AAF60wABf1AAAwABolQAAAAEDwABewcAAX9QAAAACAgLAAF7IAAAAwABBsGADnrEAwABe2gAAAMAAaJhgA56xAABgA56xAT4ETsAAXvbAAF7/AACdGGADnrEBFsAAXxCBwABfAcBYPH2DsJ7MScAAXxohHsAAXx/AAFm9AgACJ4CXgsAAXy3AWDyWAD4CPYrAAF9AwFg8lh7AAF9LwABZzAEAAYLAAF9VwFg8lgA9HMAAX3QWwABfb4LAAF9mwFg8loOwnsydewEAARbAAF+KFsAAX4WCwABffMBYPJaDsJ7Mg7CezACe2z89HMAAX6qBwABfm8BYPH2dewEAAYLAAF+ywFg8lgCe20rAAF/BAYLAAF/IwFg8lgAAWDtPAFg7pABYPEEAWD1lAAAAAwLAAKvEgc7AAF/ZwABf38AAh5MDwABomgAAAWABwACLcAAABATAAKvGgc7AAGBLwABgUAlqAGADnrEABMAAq8eBzsAAYPHAAGD+CaGsAGADwAD6PwAEwACryIHOwABhE8AAYSQYlWgBasAAYQRgA8AA/VECYAPAAPwFASsEwACryYHOwABiMcAAYjgYwABomwBgA56xASsBBcAAq9KBzsAAYj3AAGI9wABi5AAAAAPAAGJWwABi5AAAAAICAsAAYl0AAACSVGADnrEAwABiaQAABKGsYAPAAPo/AABgA8AAq8QBPwUIAcAAq8eBAMBYPkUMAEAewABih8AAWb0CAAInYxbAAGKbgMAAYpXAWD43g7CezADAAGKHwABioAAMAEAhHMAAYsCBwABissBYPkVIAQABKwDAAP1ewABissAAYscACADAAKvGFsAAYuCAwABi2sBYPjeDsJ7MCQHAAGI9wACLegAAAAAGBsAAq8uBzsAAY4/AAGOiwABq0QAAwABb2QAAAAEDwABjqcAAatEAAAAAAAAAYAPAAItwAT4HTsAAY7gAAACSVGADnrEATsAAY8nAAGPOAACDsGADnrEBFsAAY9AuasAAq8Y9F8AAY9sulWiTwACryEFDwABj9ik+B07AAGQUwABkHQAA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TsAAqQfAAKkSAADAAEfZYAPAAJUcARzAAKkbFsAAqRQut5zAAKwUwACsRMAASAABAAEWwACpMoDAAKkswFjwXsAAXAXAAI3XAMAAZEdKwACpRQEfwACpUMAAjhACAAKCwACpW8BY8rWBwACpZ8BY8JkABsAArGWB0cAAqaXAAKmswACszwAAwABmJQAAAAEDwACpusAArM8AAAABAQHAAKnBAAAAhJRgA8AAjdMAAGADwACN6wE+BkAWwACp24DAAKnVwFjzUsAAXIPAAI3gwACp1cAAqe8ATsAAqf4AAACIsWADwAD96wBOwACqGgAAAIKTYAPAAJUSAEnAAKokFsAAqi6AwACqKMBY81LAAEhrwACN3T4BPYrAAKpAwFjznhzAAKpJasAAqkpgA8AAl4DAAR9pIAEAASfAAGmWAMAAl4I+A0nAAKpzFsAAqn2AwACqd8BY81LAAF0wwACN5D4BPYnAAKqpwFjzjSfAAGmXScAAqvoWwACrBIDAAKr+wFjzUsAAXTLAAI3mPgE9icAAqyzAWPONJ8AAaZg+AkAhFsAAq5GAwACri8BY81LAAF0uwACN4sAAq4rAAKunAD2JwACrssBY840nwABpmU7AAKwEwACsDgAAwABIE2ADwACVEgEewACsEMAAkrMBAAEWwACsI4DAAKwdwFjzUoC9wACN1gA9isAArDDAWPOeHMAArDlqwACsOmADwACXgMABH2kgAgACgcAArD3AWPONg8AArEfAWPSEAMAAl4JOwACsZsAArHEAAMAAR9pgA8AAlRwBHMAArHoWwACscy63nMAArBTAAKxEwABIAQEAARbAAKyRgMAArIvAWPNSwABcBcAAjdcAwABkRkrAAKykAR/AAKyvwACOEAIAAoPAAKy6wFj09ILAAKzGwFjzngAGwACsZoHRwACtGcAArSrAAK6BAADAAGmNAAAAAQPAAK1AwACugQAAAAEBAcAArUcAAACZymADwACNpAAAXQPAAPxnAWADwACN6wE+A07AAK1jwACtawAAwABpml0DwAD8ZwFgA8AAjesBHMAArbQcwACtgRbAAK1xgMAArW3AWPWRhIXAAI2tgaUBAAE0wACthwPAAK2HwACtqQAAAAEBAcAArY4AAACElGADwACN0wAAYAPAAPo/AUrAAK2YARbAAK2egcAArZjAWPYGwABcBsAA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wACsksAAaeMBAAEfwAEOr8AAlsYBAAGGwAEOxMBZMkkAAMAArJw9HMABDxEWwAEO94LAAQ7iwFkxisAAYljAAKyTwABp4wEAAR7AAQ8awACSuQEAAYTAAQ8pwFkx9wAAwACsnD0cwAEPbhbAAQ9SgsABDz3AWTGKwABiWsAArJTAAGnjAQABHsABD3fAAJK5AQABhcABD4bAWTIgAADAAKycBsAArHSB0cABEHDAARB8wAET8wAAwABp5AAAAAEDwAEQksABE/MAAAAAAAAAYAPAAJbHAT4FTsABEK3AARCzAACEt10DwAD8qQFgA8AAlscBMcABELVgA8AAlscATsABEM3AARDcAACzQGADuEwBFsABEOsWwAEQ3i61qsAArBTAAKxIs0DAAE0zTsABEYLAARGkAADAAGnlXQPAAPypAWADvMEBMcABEaZgA7zBBxbAARG9gcABEa7AWTaAms+4URbAARHcgcABEc3AWTaAmtK4UhbAARH+gcABEe/AWTaAmtG4UBbAARIdgcABEg7AWTaAmtO4UxbAARI/gcABEjDAWTaAms64TxbAARJfgcABElDAWTaAms24VxbAARJ/gcABEnDAWTaAmtq4Wj0cwAES/oLAARLcwFk2rYP4AQABNMABEwYDwAETBsABE4YAAAABAQHAARMHAAAAliZgA7zBAABgA8AA/Q4BPgE9HMABEx6AwAETGMBZNllWAQABH8ABEybAAJbTAgACHsABEz3AAJKzAQABHMABE1EWwAETSi63nMAArBTAAKxEhnoBAAGDwAETW8BZN3cAwABkUAAewAETZsAAkrIBAAEWwAETeIPAARNwwFk3d4C9vK8AAADAAPy6AMAA/HdKwAETjgEfwAETmcAAltMCAAIewAETrsAAkrIBAAFqwAETuGADwAD968ABazIAH8ABE9PAAJbGAQABgMABE+jAWTZZAAAGwACsdYHRwAEUvsABFMrAARViAADAAGnmAAAAAQPAARTdwAEVYgAAAAAAAABgA8AAlscBPgJOwAEU9MABFP0AAIJqYAPAAJUSARzAARUBasABFQJgA8AAl4DAAR9pIAEAASfAAGnnAMAAl4JKwAEVHwEfwAEVKsAAltMCAAIewAEVNsAAkrIBAAFqwAEVQGADwAD968ABay0AgMABFVXAWTiJAAbAAKx2gdHAARX7wAEWDcABGDMAAMAAaegAAAABA8ABFhnAARgzAAAAAQEBwAEWIgAAALAwYAPAAI1AAABdA8AA/KkBYAPAAJbHAT4ITsABFkPAARZTAADAAGnpXQPAAPypAWADwACWxwExwAEWVWADwACWxwBPwAEWXsABFmoAAAHAAGnqYQMCYAPAAJUSYAPAAP3rYAPAAJbHAAPAARZ2wAEW3wAAAAICAsABFoUAAACG22ADwACVEgDAARaWAAAAwABD6GADwAD96wAAYAPAAJbHAT4BSsABFqYBH8ABFrHAAJbTAgACHsABFr3AAJKyAQABhMABFsfAWTmxAIPAARbQwFk5oQBOwAEW6sABFvMAAMAAaetgA7s3ARbAARcKFsABFv2AwAEW9cBZOSLAAFwswACNUrOKwACNYU7AARcowAEXMQAAhttgA8AAlRIBHMABFzuAwAEXM8BZOSLAAF0PAQABg8ABF1HAWToAAMAAjU09HMABF3CBwAEXYMBZOURWAQABHMABF4CCwAEXdMBZOXEgAgAChMABF4HAWTo1asABF4tgA8AA/evAAVgYAAAAwAD8uk7AARepwAEXrwAAhW1gA8AAlRIBHMABF7mAwAEXscBZOSLAAF0QAQABg8ABF9TAWToAAMAAjU49HMABF/OBwAEX48BZOURWAQABHMABGAOCwAEX98BZOXEgAgAChcABGATAWTqwasABGAtgA8AA/evAAVgbAAAAwAD8ukrAARgZAYHAARggwFk5RAbAAKx3gdHAARhawAEYZ8ABHmsAAMAAaVgAAAABA8ABGH/AAR5rAAAAAgICwAEYjwAAALAwYAPAAI1AAMABGK0AAADAAGj7YAPAAKyQAABgA8AAk/sBPgtOwAEY28ABGOMAAMAASCJdA8AA/KkBYAPAAJbHATHAARjlYAPAAJbHAEnAARjuFsABGQIWwAEY+oDAARjywFk7ZcAAXETAAI1Hg7LAAP0APgE9HMABGSmCwAEZFsBZO5KApQEAARzAARkwLsAAadEBAAGBwAEZVsBZO3UAwACscgDAAPy7P0nAARl5IRzAARmaFsABGYWAwAEZfcBZO2XAAF0NwACNSEgBAAErAMAA/V4+AT0cwAEaFILAARoMwFk7klYBAAEfwAEaHMAAltMCAAIewAEaM8AAkrIBAAFqwAEaPWADwAD968ABa1UAH8ABGlrAAJZ7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0cAArBTAAKxFwABD4AEAAYPAASMpwFlDHQDAAFzSasABIzhgA8AA/evAAWuCHMABI1wWwAEjTC7AAGkswACsFMAArEvAAFH/AQABgcABI2rAWUC9AMAAd/AAwACXgwbAAKx6gdHAASQYwAEkJsABJcgAAMAAaewAAAABA8ABJDfAASXIAAAAAAAAAGADwACVEgE+Bk7AASRSwAEkYQAAwABp8V0DwAD8qQFgA8AAlscBMcABJGNgA8AAlscAT8ABJGvAASRwAAABwABp8mEDAmADwAD962ADwAD961wAA8ABJHnAASThAAAAAgICwAEkgQAAAIC9YAPAAP3rAMABJI4AAACAlmADwAD96wAAXAE+AT0cwAEkrIDAASSdwFlEJVYBAAEfwAEks8AAltMCAAIewAEkvMAAkrIBAAGCwAEkxsBZRH0AHMABJM9qwAEk0GADwACXgMABH2kgAQABg8ABJNPAWUSNAMAAl4IAAMAA/Lo9HMABJPGBwAEk6MBZRFIgAgACGsABJQjAAJp8J8AAafMAAD0cwAElLoHAASUlwFlEUiACAAIawAElRcAAmn0nmbUAAD0cwAElZIHAASVbwFlEUiACAAIawAEle8AAmn4nSwAASsABJZkBH8ABJaPAAJbGAQABgMABJbXAWUQlAAbAAKx7gdHAASdNwAEnWsABMLkAAMAAaV0AAAABA8ABJ2vAATC5AAAAAQEBwAEndQAAAJZfYAPAAI1fAABgA8AAk/sBPgpOwAEnmMABJ6MAAIYWXQPAAPypAWADwACT+wExwAEnpWADwACT+wBJwAEn+SIWwAEoBoDAASf9wFlFr8AAXRfAAI1oAB7AASgwwACikgEAARbAAShwFsABKGMutarAAKwUwACsSLOMwABNLgA+AT0cwAEokoHAASiHwFlFylYBAAEewAEopsAAopMDAAMWwAEo5xbAASjaLrWqwACsFMAArEizjMAATS4WwAEo9S6vqcAArFccwAEpFWrAASkWYAPAAJeAwAEfaSACAAInwABp9DHAASpjWwAAwACXggAAwAD8uj9OwAEqkMABKqIAAMAAYkpdA8AA/NoCYAPAAP3rYAPAAJUSATLAASqkYAPAAP3rYAPAAJUSAE7AASrHwAEq0AAAwABdTF0DwAD82gJgA8AA/etgA8AAlRIBMsABKtJgA8AA/etgA8AAlRIATsABKu3AASsBAADAAGn1XQPAAPypAWADwACT+wExwAErA2ADwACT+wBGwAErDMABKzjAASsZAAAAhENgA8AAjYsAFsABKy2AwAErJMBZRa+G2cAAjWI+AUbAAStAwAErY8ABK0sAAACZymADwACNpAAWwAErWoXAAStSwFlHSYSDwACNkD4CScABK20hHMABK4QWwAErdYbAAStxwFlHeMAAXSXAAI29SAEAASsAwAD9Xj4BRsABK5nAASvAwAErpQAAAIPnYAPAAP3rABbAASuwhsABK6zAWUd4wABdJcAAjb0+Aj0cwAEr34LAASvOwFlGroC/AgACh8ABK+DAWUfUHMABK+cuhdIBAAGGwAEr9sBZR3gAwACsWQDAAPzvPRzAASwQg8ABLAjAWUbjgL8CAAKHwAEsEcBZR9QfwAEsHMAAlnMBAAEpAADAAPzvP0nAASxQIRzAASxqFsABLFiGwAEsVMBZR3jAAF0mwACNvkgBAAErAMAA/V4+AkbAASx/wAEsqcABLIsAAACD52ADwAD96wAWwAEslobAASySwFlHeMAAXSbAAI2+PgI9HMABLMiCwAEst8BZRq6AvwIAAofAASzJwFlInhzAASzQLoXSAQABhsABLN/AWUd4AMAArFkAwAD87z0cwAEs+YPAASzxwFlG44C/AgACh8ABLPrAWUieH8ABLQXAAJZzAQABKgAAwAD870nAAS0yIRzAAS1LFsABLTqGwAEtNsBZR3jAAF0nwACNv0gBAAErAMAA/V4+A07AAS1uwAEteQAAwABOyF0DwAD8qQFgA8AAjaQBFsABLX+GwAEte8BZR3jAAF0nwACNv07AAS2rwAEtsAAAlldgA8AAlRIBHsABLbLAAJKyAQABHMABLdEWwAEtwIbAAS28wFlHeMAAXSbAAI2+SwEAAZMAwAD8uABGwAEt5MABLgfAAS3vAAAAmxVgA8AAjaQAh8ABLfvAWUlfPgE9HMABLiuEwAEuF8BZRxhWAQABHMABLjVqwAEuMmADwACXgMABH2mFUQIAAifAAGnKMcABLktgA8AA/VEDHMABLl0uhdIBAAEUwAEubMBZSeAJAADAAKxZasABLodgA8AA/evAAWsjFMABLrPAWUmSCAAAwACXgwDAAPy6Pz9JwAEvAhbAAS8YgsABLwbAWUaug7LAAP0APgE9HMABLzeBwAEvLMBZRcpWAQABHMABL0FqwAEvPmADwACXgMABH2mFUQIAAifAAGn2HsABL5DAAJK7AQABgsABL6HAWUauAADAAJeDAMAA/Lo/ScABL8EWwAEvzoPAAS/FwFlG44OywAD9AD4BPRzAAS/tgcABL+LAWUXKVgEAARzAAS/3asABL/RgA8AAl4DAAR9phVECAAInwABp9x7AATAzwACSuwEAAYPAATBEwFlG4wAAwACXgwDAAPy6Pz0cwAEwZoHAATBbwFlFyoClAQABhMABMG3AWUcYAMAA/LtKwAEwiAEcwAEwjy7AAGmrAgACJ8AAaVyBwAEwqsBZRcoAwACsbAAAWLiHAFi43gBYuTMAWLnyAFi6sQBYu3AAWLvkAFi8WgBYvQcAWL3qAFjICQBYyaQAWNK7AFja/ABY3EQAWN3BAFjm5gBY6iMAWPAyAFjzJgBY9WUAWPePAFj8tABZB6cAWQtCAFkOgABZD3cAWRAeAFkjHgBZJYAAWSoVAFks6wBZMRkAWTYiAFk4UgBZOPYAWTs5AFk/AQBZQEMAWUPuAFlFgwBZS5sAAAApAsAArH6B0cABML7AATDEwAEzAwPAAGn4AAABYAHAAP1RAAABBMAArIGB0cABMPbAATECCcAATB/AAKwUAF0DwAD82gJgA8AA/etgA8AAlRIBMsABMQBgA8AA/etgA8AAlRIAAQXAAKyJAAAAAAQAAAMAAAAAAAAAAABgA8AArH4BPwEJAQDAAP1nAAAAAAQGwACsg4HRwAExB8ABMRDAATEqAQCBVQAAAAEDwAExGMABMSoAAAAAAAAAYAPAAPo/AUrAATEbARbAATEjFsABMRsuwABMH8AArBTAAKyBgVXAAPz/BsAArISB0cABMS7AATE3wAExTQEAg7IAAAABA8ABMULAATFNAAAAAAAAAGADwAD6PwFKwAExRQEhFsABMUYugVXAAKyDBsAArIaB0cABMVLAATFZwAExvwAAwABG8gAAAAEDwAExXcABMb8AAAACAgLAATFlAAAAwABhamADwAD96wDAATFzAAAAgmtgA8AA/esAAGADwAD96wE+Aj01AAAAAQBdA8AA/NoCYAPAAP3rYAPAAJUSARbAATGFLsAATB/AAKwUwACsgTUAAAABAGADwAD96wGAwAExjcBZTZ0jHMABMZQcwAExjILAATGMwFlNy0sBAAGDwAExjMBZTfcAwAD87kgBAAErAMAA/V41AAAAAQBgA8AAlRIBHMABMZpqwAExm2ADwACXgMABH2kgAQABgcABMZ7AWU2vAMAAl4I1AAAAAQBcARzAATGMgsABMYzAWU3LgL8CAAKDwAExjMBZTfeEAMBZTj0AwAD874QAwFlOPSsBYAPAAJUSSsABMa8BgMABMbbAWU2dBsAArIeB0cABMcTAATHRwAEzAQAAwABgWAAAAAEDwAEx3MABMwEAAAAAAAAAYAPAAJP7AT4DTsABMgXAATIVAADAAGn5XQPAAPypAWADwACVcAExwAEyF2ADwACVcAA9HMABMicWwAEyHy7AAEwfwACsFMAArIGD+AEAATTAATIvA8ABMi/AATKsAAAAAgICwAEyMAAAAJ7OYAPAAP3rAMABMjcAAACAlmADwACVEgAAYAPAAP0OAT4BPRzAATJhgMABMkbAWU7yVgEAAR/AATJowACVeQIAAh/AATKCwACV8AEAAYHAATKWwFlPSwCCwAEynsBZT1sAAMAA/LoAwAD8+UrAATKzAR/AATK9wACUGAEAAR/AATLUwACVTwEAAYDAATLswFlO8gAAAABZTNcAWU0sAFlNcQBZTrsAWU/nAAAABALAAKyKgdHAATNAwAEzRsABM8cDwABp+gAAAWABwAD9UQAAAgTAAKyMgdHAATNowAEzdQnAAGloAF0DwAD8qQFgA8AAjVUABMAArI2B0cABM4bAATOQGIYWAGADwACT+wABBcAArI+B0cABM5TAATOUwAEzxQAAAAPAATOewAEzxQAAAAIAAALAATOlAAAEwABpaF0DwAD8qQFgA8AAjVUBagBgA8AA/Q55wAEzuQAABIYWYAPAAJP7AWoAYAPAAP0OeWADwACsigE/AwgBwACsjIAAwFlQiAgBwACsjYEAwFlQqgkBwAEzlMAA/WcAAAAAAAAAWVDzAAAAAALAAKyQgdHAATPKwAEz0MABNKEDwABp+wAAAWABwAD9UQAAAwTAAKySgdHAATPvwAE0JQnAAGJWAGADwACslwEfwAE0CsAArKEAAAAABMAArJOB0cABNC/AATRhCcAAYlgAYAPAAKyXAR/AATRGwACsoQAAAAAEwACslIHRwAE0a8ABNJ8JwABiWgBgA8AArJcBH8ABNITAAKyhAAAAAAEFwACs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A8AASYkBH8AAoInAAEmQAQABgMAAoJTAWbOEAD0XwAChGYTAAKEPwFm0A6VhFsAAoTKAwAChLcBZs4SlYcAARYDAAEWAPRfAAKFThMAAoUnAWbQDpWAfwAChY8AArVgBAAGCwAChc8BZs68AwABFfz0cwAChiRbAAKGDgMAAoX7AWbOEmf/AAEWFuSACAAKAwAChksBZs4SEwAChmMBZtAMAwABFakbAAKGowAChycAAoboAAACjvWADwABFfQCDwAChwsBZs8U+AUnAAKHRHMAAod6BwACh1cBZs5QgAQABhcAAod/AWbS/AAA+AT0cwACh9YXAAKHwwFm0v7mKAgACgMAAof/AWbOEhMAAogXAWbQDAMAARfU/BsAArVCB08AAoibAAKI3wAClUgAAsJMBasAAoidgA8AA/VECAAABA8AAokDAAKVSAAAAAQEBwACiRwAAAIPuYAPAAEh9AABcAT4ETsAAolfAAKJcAACYhmADwAD8BQGXTsAApM3AAKTWAADAAGpAYAPAAPwFARbAAKTkFsAApN2AwACk2MBZtWC5C8AARYRhwAD82EnAAKTwHMAApQQcwACk/YLAAKT0wFm1i4OIAQABgcAApP/AWbV2AMAA/SyBawEAARzAAKUQHMAApQk3B2QBAAGBwAClC8BZtXYAwAD9KmQBAAEcwAClG4LAAKUSwFm1i4OIAQABlADAAP0sAMAA/SoAwAD9M0rAAKUgAD89HMAApSwuwABFTcAArKcDAAOAwAClM8BZtWA0wAClOQPAAKU5wAClRAAAAAEBAcAApToAAACAtWADwABFfQAAYAPAAPo/AUrAAKVAASknwABqQQDAAK1MBsAArVGB08AApVfAAKVowACm0AAAhgcBasAApVhgA8AA/VECAAABA8AApXXAAKbQAAAAAQEBwAClgAAAAIPuYAPAAEhSAABcAT4FScAApYwcwACloxbAAKWcFsAApZWAwAClkMBZtsi5C8AARYRhwAD82IFrAQABlADAAP0zSsAApakAP07AAKXDwAClzAAAhgVgA8AAYNIBFsAApdOAwAClzsBZtsiGBcAASFRJwACl4hbAAKXvgcAApebAWbcYrW/AAGDVPgI9HMAApf8uwABqQsAArKcBAAGAwACmC8BZtsgAwACtTUrAAKYYAD9JwACmKxbAAKY4gcAApi/AWbcYukzAAGDZPgI9HMAApkcuwABqQ8AArKcCAAKAwACmUsBZtsgmwACmWAGBwACmWMBZtxhgA8AAYSsAwACtTkrAAKZpAD9JwACmfBbAAKaJgcAApoDAWbcYtWDAAGDcPgI9HMAAppsuwABqRMAArKcCAAKAwACmqcBZtsgmwACmrwGBwACmr8BZtxhgA8AAYYgAwACtT0rAAKbAAD8GwACtTYHTwACm1cAAptrAAKpcAADAAGpCwACspwAAAAEDwACm5cAAqlwAAAABAQHAAKbwAAAAg+5gA8AASFIAAFwBPgZOwACnAMAApwUAAJiGYAPAAPwFAZdPwACnD8AApxQAAAHAAGpFYQMBYAPAAEV9YAPAAPo/AAPAAKcjwACppAAAAAEBAcAApzEAAAC4zWADwABFfQAAYAPAAPo/AT4HScAAp4klwACnmYPAAKeNwFm4uGADwABJE0rAAKexASo/ScAAp8YlwACn1oPAAKfKwFm4uGADwABGbkrAAKfiASk/ScAAp/UlwACoBYPAAKf5wFm4uGADwABGWUrAAKgRASk/ScAAqCQlwACoNIPAAKgowFm4uGADwABIiUrAAKg9ASk/ScAAqJslwACoq4PAAKifwFm4uGADwABIzErAAKi3ASo/ScAAqRElwACpIYPAAKkVwFm4uGADwABInUrAAKkvASo/SsAAqZIBKk7AAKmvwACpuAAAwABqQGADwAD8BQEcwACpui7AAGo+wACspwIAAoDAAKnOwFm4X4LAAKnUwFm4jgDAAK1LScAAqeocwACp/hzAAKn3g8AAqe7AWbmgg4gBAAGBwACp+cBZuHUAwAD9LIFrAQABHMAAqgocwACqAzcHZAEAAYHAAKoFwFm4dQDAAP0qZAEAARzAAKoVg8AAqgzAWbmgg4gBAAGUAMAA/SwAwAD9KgDAAP0zSsAAqhoAPz0cwACqJi7AAEVNwACspwMAA4DAAKotwFm4X4LAAKozwFm4jifAAGpGAMAArUxKwACqUgAGwACtToHTwACqYcAAqmbAAK45AADAAGpDwACspwAAAAEDwACqcMAArjkAAAACAgLAAKp7AAAAg+5gA8AASFIAwACqkgAAAMAAS0hgA8AAYSsAAFwBPghOwACqrMAAqrIAAICWYAPAAPoRARbAAKrAgcAAqrTAWbrNqmbAAGEtTsAAqtXAAKraAACBsGADwAD96wEcwACq4oLAAKrcwFm65SMAAAAAwAD6O07AAKr2wACq+wAAmIZgA8AA/AUBFsAAqwKDwACq/cBZuw1hwAD970nAAKsOHMAAqxeEwACrEsBZuziBawEAAZYAwAD9M0rAAKsdAD9PwACrKsAAqy8AAAHAAGpFYQMBYAPAAEV9YAPAAPo/AAPAAKs+wACtcwAAAAEBAcAAq0wAAAC4zWADwABFfQAAYAPAAPo/AT4HScAAq2ElwACrcYbAAKtlwFm7smADwABGbkrAAKt9ASk/ScAAq5AlwACroIbAAKuUwFm7smADwABGWUrAAKusASk/ScAAq78lwACrz4bAAKvDwFm7smADwABIzErAAKvbASk/ScAAq+4lwACr/obAAKvywFm7smADwABIiUrAAKwHASk/ScAArFwlwACsbIbAAKxgwFm7smADwABInUrAAKx6ASo/ScAArN0lwACs7YbAAKzhwFm7smADwABHTkrAAKz+ASo/SsAArWEBKk7AAK1+wACthwAAwABqQGADwAD8BQEcwACtiS7AAGo+wACspwIAAoDAAK2dwFm6vYXAAK2jwFm7iADAAK1LScAArbkcwACtzRzAAK3GhsAArb3AWbyag4gBAAGEwACtyMBZuzgAwAD9LIFrAQABHMAArdkcwACt0jcHZAEAAYTAAK3UwFm7OADAAP0qZAEAARzAAK3khsAArdvAWbyag4gBAAGUAMAA/SwAwAD9KgDAAP0zSsAArekAPz0cwACt9S7AAEVNwACspwMAA4DAAK38wFm6vYXAAK4CwFm7iCTAAK40AieAtRzAAK4cg8AArhfAWbsNwABDBQIAAieBjSeAtQDAAP4JAMAArUwGwACtT4HTwACuPsAArkPAALKEAADAAGpEwACspwAAAAEDwACuUMAAsoQAAAACAgLAAK5bAAAAg+5gA8AASFIAwACudQAAAMAAS31gA8AAYYgAAFwBPghOwACuksAArpgAAICWYAPAAP3rARbAAK6pgcAArprAWb3lnXrAAGGKTsAArr7AAK7FAABhYAPAAPwFARbAAK7NgsAArsfAWb39YcAA/e9OwACu3cAAruIAAJiGYAPAAPwFARzAAK7rg8AAruTAWb4lZAEAAZUAwAD9KknAAK8HHMAArxCEwACvC8BZvkuBawEAAZUAwAD9M0rAAK8WAD9PwACvI8AArygAAAHAAGpFYQMBYAPAAEV9YAPAAPo/AAPAAK83wACx0QAAAAEBAcAAr0UAAAC4zWADwABFfQAAYAPAAPo/AT4IScAAr6glwACvuIbAAK+swFm+ymADwABHTkrAAK/JASo/ScAAsBEcwACwHIPAALAVwFm+JYFtAQABNxAAwAD9NUrAALAjASk/ScAAsDclwACwR4bAALA7wFm+ymADwABGbkrAALBTASk/ScAAsGYlwACwdobAALBqwFm+ymADwABGWUrAALCCASk/ScAAsJUlwACwpYbAALCZwFm+ymADwABIzErAALCxASk/ScAAsMQlwACw1IbAALDIwFm+ymADwABIiUrAALDdASk/ScAAsT8lwACxT4bAALFDwFm+ymADwABG+ErAALFdASk/SsAAsb8BKk7AALHcwACx5QAAwABqQGADwAD8BQEcwACx5y7AAGo+wACspwIAAoDAALH7wFm91YXAALIBwFm+oADAAK1LScAAshccwACyKxzAALIkhsAAshvAWb/Zg4gBAAGEwACyJsBZvksAwAD9LIFrAQABHMAAsjccwACyMDcHZAEAAYTAALIywFm+SwDAAP0qZAEAARzAALJChsAAsjnAWb/Zg4gBAAGUAMAA/SwAwAD9KgDAAP0zSsAAskcAPz0cwACyUy7AAEVNwACspwMAA4DAALJawFm91YXAALJgwFm+oCTAALJ/AyfAAGpHg8AAsnbAWb4lJ4C1AMAArUwAAFmxOwBZscsAWbKzAFmzVABZtSoAWbaSAFm4LwBZuo0AWb2lAFnA0gAAAAkCwACtVIHTwACy68AAsvHAALNUA8AAakgAAAFgAcAA/VEAAWABvK0BBMAArVaB08AAszDAALM0CYC9AWrAALMYYAPAAP1RAmADwAD96wABBcAArViB08AAszjAALM4wACzUgAAAAPAALNHwACzUgAAAAEBAcAAs00AAASAvWADwAD96wAAYAPAAK1UAT8CCAHAAK1WgADAWcFzCQHAALM4wAD9ZwAAAAAAAABZwagAAAAAAAEGwACsqYHTgxCDFYN1AAHAAGpJAAAAAQODLYN1AAAAAgICgzsAAACCZmADvNMAg0wAAACk8WADwABLZAAAYAPAAPo/AT4BSoNaASEWg2uBg2LAWcHhhTPAAEt0AYHTAFnCDgBZVgsAWVbXAFl0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AENNgwDAWewjZAEAAZQAwAD9KoMAwFnsIwDAAGUqSsAAQ14BgsAAQ2XAWeuFBsAArcqB1MAAQ3LAAEN5wABEpwAAwABqeAAAAAEDwABDisAARKcAAAAAAAAAYAPAAP3rAT4EQ8AAQ5MhFsAAQ64WwABDmy7AAGp0wACtxYFVwAD8iz4CTsAAQ8bAAEPLAACAvWADwAD96wEcwABD4BbAAEPNLsAAanTAAK3FhhcAAAAAwAD8yEnAAEP0IRzAAEQDFsAAQ/kuhDDAAK3EgxcBAAGAwABEDMBZ7NUAwAD9qErAAEQTAYDAAEQawFns1T9OwABEMcAARDYAAIC9YAPAAP3rASTAAEROAieDpjUAAAABAGADwAD8BQEWwABEPC7AAGp1wACtxjUAAAABAGADwAD8BQEXwABEPC7AAGp1HMAAREqAAMBZ7V1kAQABlADAAP0qwACtxoAAwFntXUPAAERUHMAARGUWwABEWy6EMMAArcSDFwEAAYDAAERuwFntQADAAP2oPYjAAER1wFntQCTAAESSAieDpjUAAAABAGADwAD8BQEWwABEgC7AAGp1wACtxjUAAAABAGADwAD8BQEXwABEgC7AAGp1HMAARI6BAMBZ7epkAQABlADAAP0qwACtxoEAwFnt6krAAESYAYDAAESfwFntQAbAAK3LgdTAAESswABEscAARYcAAMAAankAAAABA8AARMjAAEWHAAAAAQEBwABE1gAAALjNYAPAAEV9AABgA8AASIkBPgJGwABE6cAARRfAAET7AAAAo71gA8AARX0AFsAARQ+AwABFA8BZ7nW5C8AARYQ+AUnAAEUfIiXAAEUogcAARSPAWe6YYAPAAEiJACEcwABFRhbAAEU4FMAARTPAWe6YAQFgA8AASImlYMAARX9IAQABKwDAAP1ePgFKwABFWQEUwABFYMBZ7pgBAWADwABIiT9KwABFeAErBsAArcyB1MAARYzAAEWTwABKJgAAwABqegAAAAEDwABFn8AASiYAAAABAQHAAEWtAAAAuM1gA8AARX0AAGADwAD96wE+BE7AAEXHAAAAgL1gA8AA/esAScAARdElwABF4YDAAEXVwFnvUmADwABGLj4DTsAARl3AAEZiAAC+oWADwABFfQEUwABGZMBZ71IAAWADwABGLkTAAEZ3PgI9isAARoTAWe+ZFsAARpwmwABGkQCCwABGjMBZ75lgA8AARi65MMAARjA9icAARrLAWe9tHMAARsYWwABGvxbAAEa5LoS3wACtwcAAam3AAK2vSwEAAYLAAEbHwFnvmQDAAPzuIhzAAEbigcAARt3AWe9tSAEAASsAwAD9+gAlwABG8oLAAEbtwFnvmWADwABGLknAAEcEIRzAAEcNgcAARwjAWe9tSAEAASsAwAD9+krAAEcWARzAAEcdLsAAansCAAIUwABHLsBZ71IAAWADwABGLoHAAEc7wFnvbQDAAK3NPz9JwABHTSEcwABHaxbAAEddgMAAR1HAWe9SpWDAAEV/SAEAASsAwAD9Xj4BScAAR3whHMAAR58WwABHmhbAAEeMgMAAR4DAWe9SpWDAAEV/gL28r0gBAAErAMAA/fo+AT2JwABHssBZ720cwABHuS7AAGp3AQABFsAAR+QWwABH1oDAAEfKwFnvUqVgwABFf4C9vK8AwACtyT4BPYnAAEg8wFnvbRzAAEhDLsAAangAAAAAwACtyj4CTsAASTXAAEk5AAC5JWADwABIiQEcwABJOy7AAGp5AQABgMAASVPAWe9SAMAArctJwABJZyEcwABJb4LAAElrwFnxYUgBAAErAMAA/V4+AT2JwABJgsBZ720cwABJiS7AAGp3AQABFsAASawWwABJnoLAAEmawFnxYaVgwABFf4C9vK8AwACtyT4BPYnAAEnKwFnvbRzAAEnRLsAAangAAAAAwACtykrAAEn4ARzAAEn/LsAAansCAAKAwABKEMBZ71KBwABKHcBZ720AwACtzQbAAK3NgdTAAEorwABKMsAAStwAAMAAansAAAABA8AASkLAAErcAAAAAgICwABKUAAAALjNYAPAAEV9AMAASmQAAACAvWADwAD96wAAYAPAAP3rAT4EPRzAAEp6FsAASnAuhDDAAK3EVgEAAYHAAEp+wFnybADAAP2pPRzAAEqPFsAASokuhLfAAK3BwABqcgEAAYHAAEqbwFnybADAAK23PRzAAEqzFsAASqwWwABKpi6Et8AArcHAAGptwACtr4C/AgACgMAASrTAWfJcgcAASsPAWfJsAMAA/O9KwABKzQGBwABK1MBZ8mwGwACtzoHUwABLLMAASzHAAE0aAADAAGp8AAAAAQPAAEs5wABNGgAAAAEBAcAAS0cAAAC4zWADwABFfQAA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rJ/AWhjZYAPAAEbFABysyBSsw8BaGNkDAWADwABGxbncAQABFqzcLrWqwACt8sAArfcAwABGzwAcrP6ArPnAWhQSSAEAARatBhStAcBaGNkDAWADwABGxYV/wABGywDAAP1eABytMx6tHsAArggCAAIUrSfAWhjZAwFgA8AARsWArS3AWhQSAEgBAAGUAMAA/Sg+AT0crViBrUXAWhTwgKUBAAEcrXAWrV8uwABTOcAArfLAAK39wABTJgIAAhatpRatnBStl8BaGNkDAWADwABGxaTxwABGyYC9wABLchatqy61qsAArfLAAK33AMAAehQAwAD9qj4CPRyuaIGuVcBaFPCApQEAARaugBauby7AAFM5wACt8sAArf26dMAAehcAwAD9qkKunwA9F67IgK7DwFoUErp0ga7dwFoU8MAASQNOrwOvDAAAhX9gA8AARX0BFq8TgK8OwFoUEoV/wABJDE6vXK9wAADAAGqOYAPAAEV9ARyvei7AAGqMAgACg6+YwFobSIGvosBaFPAAwACuBUmvuyEcr9OEr7/AWhtoSAEAASsAwAD9Xj4CPRyv7xav6YCv5MBaFBKZ/8AARYW5LAIAAoCv98BaFBKEr/3AWhtoAMAARW9KsBkBKj9JsMUWsM6AsMnAWhQSunbAAEkNSrDwASo/SbJIFrJyHLJVg7JMwFobSK1vAQABFrJcLsAAU4rAAK3ywACt/gDAAEXLsqW91j4BSbKNIRyypYGyksBaFPCDFwEAARayvhayri60BMAArfLAAK38sVC4oADAAP2oPgFJsyYhIiIWs38cs0aDsyzAWhtItUkBAAEWs1guwABTisAArfLAAK3+AMAARc6ypb3WARaz9ByzuoOzoMBaG0i1SgEAARazzS7AAFOKwACt8sAArf4AwABFz7KlvdYBFrRoHLQvg7QVwFobSLVSAQABFrRBLsAAU4rAAK3ywACt/gDAAEXXsqW91j4CTrSUtKUAALgEYAO8wQEctKcuwABqjwIAAhy08Ra03C7AAFOKwACt8sAArf61QAEAARa1BoO0/cBaG0i5cMAARb0AvhaBtSbAWhTwAMAArgZJtUUhHLVahbVJwFoc50gBAAErAMAA/V4+BE61frWSAADAAF+rYAPAAEV9ARy1mxa1lC7AAF+GwACt8sAArfmqigIAAh+1vMAAYfYBAAGFtdXA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wABFfQEcwABGKC7AAGqMAgACHMAARlEWwABGS4DAAEZGwFon64JRwABFg0sBAAGUAMAA/LgWwABGW4DAAEZWwFon67p0wABJFgDAAK4FScAARnUcwABGgoHAAEZ5wFooBkgBAAErAMAA/V5KwABGiwEqP07AAEanwABGsAAApPFgA8AAS2QBFsAARreAwABGssBaJ+uk8cAARn1OwABG08AARuAAAIWCYAO95wEWwABG54DAAEbiwFon64WCwABGg07AAEcGAAAAuM1gA8AARX0AScAARxcWwABHJILAAEcbwFooiIUzwABLdD4BPYzAAEc2wFoo1h/AAEdIwABGrQcAB4LAAEdowFooiIPAAEd8wFoosBbAAEeZgMAAR5TAWifrlibAAEaBMcAAR7pgA8AARX0CgcAAR7vAWigGHMAAR9AWwABHyoDAAEfFwFon64JRwABFg0sBAAGUAMAA/LgpFsAAR/WAwABH8MBaJ+u5cMAARb0WwABIFYDAAEgQwFon66VhwABFgABJwABINBbAAEhBgsAASDjAWiiIhTXAAEt1PgE9jMAASFPAWijWH8AASGXAAEa3BwAHgsAASIXAWiiIg8AASJnAWiiwFsAASLaAwABIscBaJ+uWJsAARoExwABI12ADwABFfQOBwABI2MBaKAYcwABI7RbAAEjngMAASOLAWifrglHAAEWDSwEAAZQAwAD8uBzAAEj9FsAASPeAwABI8sBaJ+uCUcAARYNLAQABlQDAAPy4KRbAAEkigMAASR3AWifruXDAAEW9FsAASUKAwABJPcBaJ+ulYcAARYAAPgNOwABJfMAASYMAAIJRXQPAAPypAWADwABFfQEewABJicAA/K8BAWADwABFfQEWwABJpoDAAEmhwFon64JRwABFgwA9HMAASbuFwABJtcBaKn6AvwIAApOBwABJwcBaKAYAwAD8uT2MwABJ0cBaKNYfwABJ48AARp4HAAaCwABJ+MBaKIiDwABKAsBaKLCFwABKEMBaKn4WwABKJ4DAAEoiwFon67lwwABFvRbAAEo9gMAASjjAWifrhR3AAEkVFsAASlGAwABKTMBaJ+ulYcAARYABudgpTsAASpvAAEqhAACZ/2ADwABFRgEWwABKqIDAAEqjwFon65n/wABFhT0cwABKuYXAAEqzwForVLkgAgACgMAASsLAWifr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AAAAYAPAAPo/AUqw1gEiFrDbFrDWLoW1wACut6pZwACuWgAWsO8WsOkuhbfAAK64wABF4cAArlsGwACu0oHYsP2xErFDAQDAAEXhAWqw/mADwAD9UQIAAAEDsR2xQwAAAAAAAABgA8AA+j8BSrEgASIWsSUWsSAuhbXAAK63wABF4cAArlsAFrE5FrEzLoW3wACuuKpZwACuWgbAAK7OgdixR7FasXgAACMBarFIYAPAAP1RAgAAAQOxYrF4AAAAAAAAAGADwAD96wFKsWgBJLF4Axaxai6FtcAArrcnkiEWsXIuhbfAAK64AABafyYAWn/IAFqAEQBagGgAWoHdAFqDVABag7QAWoQWAFqEZgAAAAgCwACu1YHYsX2xg7dKA8AAaskAAAFgAcAArk8AAAEEwACu14HYsa2xsgmAlgBgA8AArk8AAQXAAK7kgdixtrG2seEAAAADscGx4QAAAAICArHHAAAEgJZgA8AArk8Asc4AAACBVFsAAGADwACu1QE/AggBwACu14AAwFqE3wkAsdbAAK5eAQABJrHcAYGx3MBahO1gA8AArj8ACQbAAK7Zgdix5rIAslwDAEgBarHnYAPAAP1RAgAAAQOyArJcAAAAAQEBsgMAAACD1lsAAGADwAD6PwE+AkmyECElshqAshTAWoVTYAPAAK7VSrIrASo/SrI9ARyyShayRC6AlsAArtdIAQABFrJTgLJNwFqFU4CWAADAAP1eBsAAruCB2LJhsnWyrgEAg8EBarJiYAPAAP1RAgAAAQOyfrKuAAAAAAAAAGADwAD8BQFKsoEBMLKBH7KLwAD7lwEAASfAAGrKAAbAAK7agdiys7LOtIoDAGQBarK0YAPAAP1RAgAAAQOyz7SKAAAAAQEBstAAAACD1mADwACuTwAAYAPAAK5PAT4GSbLdFrLngLLhwFqGGapTwACuXEqy7wEuP0mzAByzCoCzBMBahhlIAQABFrMNLoCWwACu1wDAAP1eSrMUARazIBazGy6BVMAArlHAAGqpwACuQT9Jsy0lszeAszHAWoYZYAPAAK7VSrNHARyzUy6BjQEAARazWxSzVcBahhkAAWADwACu1YCWwACu1wDAAK7cP0mzZiWzcICzasBahhlgA8AArmc+AkmzhRazjxSzicBahhkAAWADwACuZ6pZwACudT4BSrOlARyzsRazrC6BVMAArlHAAGqvAgACLhyzyBSzycBahhkAAWADwACuZ4HEAAAAAMAArm0AwACuSD9Ks98BHLPrFrPmLoFUwACuUcAAaq8CAAIUs/zAWoYZAAFgA8AArmcWtAMugJbAAK7XAMAArkg/SbQVJbQfgLQZwFqGGWADwACuoT4BSrQ8ARy0SBa0Qy6BVMAArlHAAGqvAgACFLRZwFqGGQABYAPAAK6hFrRgLoCWwACu1wDAAK5IP0q0cgEctH+AtHnAWoYZgY0BAAEWtIEugJbAAK7XAMAArlQGwACu24HYtI+0qrTQAwCDdwFqtJBgA8AA/VECAAABA7SrtNAAAAABAQG0sgAAAIPWYAPAAK5PAABgA8AArk8BSrS8AWq0wmADwACulMABdBoGwACu3IHYtNW08LZ/AwCBjQFqtNZgA8AA/VECAAABA7Txtn8AAAABAQG08gAAAIPWYAPAAK5PAABgA8AArk8BPgVJtP8WtQmAtQPAWohPqlPAAK5cSrURAS4/SbUiJbUsgLUmwFqIT2ADwACuZz4CSbVBFrVLFLVFwFqITwABYAPAAK5nqlnAAK51PgFKtWEBHLVtFrVoLoFUwACuUcAAaq8CAAIctX4UtX/AWohPAAFgA8AArmeBxAAAAADAAK5tFrWGLoCWwACu1wDAAK5IP0q1nAEctagWtaMugVTAAK5RwABqrwIAAi4Utb/AWohPAAFgA8AArmcAwACuSD9JtdEltduAtdXAWohPYAPAAK6hPgFKtfgBHLYEFrX/LoFUwACuUcAAaq8CAAIuFLYbwFqITwABYAPAAK6hAMAArkg/SbYtJbY3gLYxwFqIT2ADwACu1Uq2RwEctlMuZAEAARa2WxS2VcBaiE8AAWADwACu1YCWwACu1wDAAK7aP0q2ZgEctnQctm2Atm7AWohPgcQAAAAAwACuVYGNAQABFrZ2LoCWwACu1wDAAK5UBsAArt2B2LaEtp+2qwMAgcQBaraFYAPAAP1RAgAAAQO2oLarAAAAAAAAAGADwACuTwFKtqYBFramLoCWwACu1wbAAK7hgdi2sLbFtuMBAKpZAWq2sWADwAD9UQIAAAEDttC24wAAAAAAAABgA8AA+j8BSrbTARa22Ra20y6AlsAArtfAAEXhwACuWwbAAK7igdi257b8txoBAMAAReEBarboYAPAAP1RAgAAAQO3B7caAAAAAAAAAGADwAD6PwFKtwoBFrcQFrcKLoCWwACu16pZwACuWgbAAK7egdi3Hrcxt0gAACMBarcfYAPAAP1RAgAAAQO3ObdIAAAAAAAAAGADwAD96wFKtz8BJLdIAieBjRa3Qi6AlsAArtcAAFqFKgBahacAWoXwAFqH1ABaiCUAWonTAFqKEwBail4AWoqpAFqK7wAAAAkCwACu5YHYt9+35cAARZgDwABHdgAAAWABwAD9UQAAAwTAAK7ngdi3+7gACYaEAGADwACuTwAEwACu6IHYuBC4FQmGhQBgA8AArk8ABMAArumB2LguuDIJgVQAYAPAAK4/AAMFwACu/YHYuDa4Nri5AAAAA7g7uLkAAAADAwO4QQAABIaEYAPAAK5PALhNAAAEhoVgA8AArk8AuFkAAASBVGADwACuPwAAYAPAAK7lAT4CQCEcuHIWuGwuhoTAAK7nSAEAAWq4e2ADwACulMABdBoAwAD9XrhsuIkAQCEcuJ0WuJcuhoXAAK7oSAEAAWq4pmADwACulMABdBoAwAD9XriXuLQABAgBwACu54AAwFqLmggBwACu6IEAwFqLqAgBwACu6YIAwFqLtgkBuDbAAP1nAAAAAAXAAK7+gdi4vri+uQgAwABqywADuMu5CAAAAAEBAbjMAAAAgVRbAABgA8AAruUBPwEKALjUwACu/QMAA2q432ADwACuh8ABdCZquPRgA8AArnrAAXQyJrkDAYC5A8BajHFgA8AArj8ABcAArv+B2Ll8uXy6NQCWWgADuYu6NQAAAAMDA7mSAAAAg75gA8AArk8AuZ0AAADAAGqzYAPAAK5PALmhAAAAgVRbAABgA8AAruUBPwEKALmvwACu/QMAAyMcubiAubTAWozXSAEAAWq5wWADwACulMABdBoAwAD9Xmq52GADwACuh8ABdCaAuejAWozXAWADwACuTyMcufyBufnAWozlSAEAAWq6BWADwACulMABdBoAwAD9Xmq6HGADwACuesABdDKBuizAWozlAWADwACuTya6MAGCujDAWoz1YAPAAK4/ABAGwACu64HYujq6QLq0AACXAgAAAAEDukW6tAAAAAEBAbpMAAAAg9ZgA8AAruUAAGADwACu5QE+AUq6WQEcumUWumAugVTAAK7pwABqsgIAAhy6hxa6gS6GhMAAruecrwEAARa6kYC6i8Bajb6GhMAArucAwACuVxy6nxa6mS6GhcAArujAAEkSAQABFrqpgLqjwFqNvoaFwACu6ADAAK5YAMAArksGwACu7IHYurm6v71iAACXAwAAAAEDusu9YgAAAAEBAbrSAAAAg9ZgA8AAruUAAGADwACu5QE+BU665brpAACDvmADwACuTwEcuvEWuusuhoTAAK7nwABJEgEAARa6+4C69cBajmOGhMAArucAwACuWE67DbsQAADAAGqzYAPAAK5PARy7GBa7Ei6GhcAAruicrwEAARa7IoC7HMBajmOGhcAArugAwACuV0m7txy7v4G7u8BajnxIAQABarvIYAPAAK6UwAF0GgDAAP1ePgFJu+Alu+oWu+QuhoTAAK7nYAPAAK5nPYm7/8BajnwWvAUuhoTAAK7nSbwXJbwnFrwhgLwbwFqOY4aEwACu52ADwACuZz2JvDzAWo58FrxIgLxCwFqOY4aEwACu5z2JvGLAWo58FrxoLoaEwACu5z9JvHkcvICCvH3AWo61SAEAAWq8iWADwACulMABdBoAwAD9Xj4BSbyhJbyrFrylLoaFwACu6GADwACuZz2KvMDAWo61FrzFLoaFwACu6Em81yW85xa84YC828BajmOGhcAAruhgA8AArmc9irz8wFqOtRa9B4C9AcBajmOGhcAArug9ir0hwFqOtRa9Ji6GhcAArug/Sr03ARy9Qxa9Pi6BVMAArunAAGqyAgACgb1WwFqOfIK9W8BajrUAwACuSwbAAK7tgdi9Z712vdcDAGQAAAABA713vdcAAAABAQG9fgAAAIPWYAPAAK7lAABgA8AAruUBPgFKvYsBHL2XFr2SLoFUwACu6cAAarICAAIcvbAWvaouhoTAAK7nZAEAARa9uIC9ssBakF+GhMAArucAwACuUxy9xRa9vy6GhcAAruhkAQABFr3NgL3HwFqQX4aFwACu6ADAAK5TAMAArksGwACu7oHYvdy9675MAwCBjQAAAAEDvey+TAAAAAEBAb3zAAAAg9ZgA8AAruUAAGADwACu5QE+AUq+AAEcvgwWvgcugVTAAK7pwABqsgIAAhy+JRa+Hy6GhMAArueBjQEAARa+LYC+J8BakQCGhcAArugAwACuVBy+Oha+NC6GhcAAruiBjQEAARa+QoC+PMBakQCGhMAArucAwACuVADAAK5LBsAAru+B2L5R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AK7oAMAA/V4GwACu9YHYwABEjcAARJvAAETbAwCBbQAAAAEDwABEncAARNsAAAABAQHAAESkAAAAg9ZgA8AAruUAAGADwAD6PwE+AUrAAESxARzAAETPHMAARL4WwABEuC6GhMAArufAAEkSAQABFsAARMiAwABEwsBamMaGhcAArugAwACuWEgBAAEWwABE0i6GhMAArucAwAD9XgbAAK75gdjAAETgwABE6cAARQcBAKpZAAAAAQPAAET0wABFBwAAAAAAAABgA8AA+j8BSsAARPcBFsAARP0WwABE9y6GhcAAruiqWcAArloGwACu+oHYwABFC8AARRTAAEUyAQDAAEXhAAAAAQPAAEUfwABFMgAAAAAAAABgA8AA+j8BSsAARSIBFsAARSgWwABFIi6GhMAArufAAEXhwACuWwbAAK77gdjAAEU2wABFP8AARV4BAMAAaswAAAABA8AARU3AAEVeAAAAAAAAAGADwAD6PwFKwABFUAEcwABFVhbAAEVQLoaEwACu50gBAAEWwABFWS6GhcAArugAwAD9XgbAAK72gdjAAEVjwABFdsAARZYAACMBasAARWRgA8AA/VECAAABA8AARX7AAEWWAAAAAAAAAGADwAD96wFKwABFhAEkwABFlgUnmZYWwABFhy6GhMAArucngYsWwABFjy6GhcAArugnmZcAAFqNngBajkMAWpBAAFqQ4ABakYMAWpH4AFqVWwBaliUAWpaAAFqXQwBamAkAWpicAFqZMQBamYAAWpnTAFqaMwBamp0AAAAQAsAArwCB2MAARobAAEaMwACRjwPAAGrOAAABYAHAAES8AAFgAcAAkWwGBMAArwKB2MAAR77AAEfgCcAAas8AXQPAAPypAWADwABJ6QExwABH3mADwABJ6QAEwACvA4HYwABIbMAASJMJwABfeABdA8AA/NoCYAPAAEV9YAPAAK7lAR7AAEh5wAD84QACYAPAAEV9YAPAAK7lAAAEwACvBIHYwABIq8AASLYJpN8AYAPAAE0rAATAAK8FgdjAAEjPwABI0wmBVABgA8AArj8ABMAArwaB2MAASO7AAEj3CcAARZAAYAPAAJFzAATAAK8HgdjAAEkDwABJCBikHgBgA8AARJgBKwEFwACvJYHYwABJDcAASQ3AAEmYAAAAA8AASSLAAEmYAAAAAgICwABJMAAAAKTfYAPAAE0rAMAASUIAAATAAEWQYAPAAJFzAABgA8AArwABPwQIAcAArwaBAMBanCIIAMAArwUfwABJYMAArk4AAAAACADAAK8EgMAASY3AWpwSCQHAAEkNwABFKAAAAAAaBsAArwmB2MAARtjAAEbvwABHEAEAgL0BasAARtlgA8AA/VECAAABA8AARvTAAEcQAAAAAAAAAGADwAD96wFKwABG9wEnwABq0AbAAK8LgdjAAEmdwABJrsAASyoAALjwAWrAAEmeYAPAAP1RAgAAAQPAAEm4wABLKgAAAAEBAcAAScAAAACkHmADwABEmAAAXAE+BD0XwABJ0i6kHoDAAEnawFqc+sAArwc9HMAASeUuuMMBAAGAwABJ+MBanPoAwABEgz0cwABKsS7AAGrRAAAAAMAArww9F8AASxcWwABLDS7AAEWQwACvBsAAX3gWwABLIC7AAF94wACvA8AAkXcGwACvDIHYwABLL8AASzTAAEwDAADAAGrRAAAAAQPAAEtJwABMAwAAAAAAAABcAT4BPRzAAEteFsAAS1IuwABqz8AArwKD+AEAATTAAEtmA8AAS2bAAEv+AAAAAQEBwABLeAAAALjNYAPAAEnpAABgA8AA/Q4BPgI9HMAAS58WwABLmYDAAEuNwFqd2pn/wABFhbksAgACgMAAS6fAWp3aHMAAS8YWwABLwIDAAEu0wFqd2oJRwABFg0sBAAGTAMAA/LgAwABFbz0cwABL5BbAAEvegMAAS9LAWp3amf/AAEWFhFkBAAGAwABL68BandoAwABFbADAAPx3BsAArw2B2MAATAjAAEwZwABNmQAAuMUBasAATAlgA8AA/VECAAABA8AATCjAAE2ZAAAAAQEBwABMNQAAAJn/YAPAAEVGAABcAT4DT8AATELAAExHAAABmo9hAwFgA8AARX1cAAPAAExMwABNUgAAAAEBAcAATFoAAAC4zWADwABFfQAAXAE+Ak7AAEx1wABMewAAwABqT2ADwACu5QEmwABMdQEcwABMiYLAAEx9wFqe6YRNAQABLgDAAEXvYAPAAK7lScAATJ0WwABM7hzAAEy4gsAATKHAWp7ptVQBAAEWwABMzhbAAEzCLqTfwACvBLC9wABNNADAAEXYtDa91T4CQCEcwABNF4PAAE0RwFqe/0gBAAErAMAArvHAAE0RwABNHgA9HMAATS8WwABNKS7AAF94wACvA4C/AgACgsAATTDAWp7pg8AATT/AWp7/AMAA/O8/PRzAAE1fgMAATVnAWp6suTgBAAGBwABNasBansYAwABFdT0cwABNfIDAAE12wFqerLk6AQABgcAATY/AWp7GAMAARXYGwACvDoHYwABNnsAATbDAAE/NAAC4ywFqwABNn2ADwAD9UQIAAAEDwABNwMAAT80AAAABAQHAAE3OAAAAuM1gA8AARX0AAGADwACu5QE+AUnAAE3hFsAATjYcwABN+oDAAE3lwFqgRrVXAQABFsAAThgWwABODC6k38AArwSwvcAATTQAwABF27Q2vdU+AUrAAE5QARzAAE5cFsAATlcugVTAAK8FwABqsgIAAhbAAE5/FsAATnougVTAAK8FwABqqcAArkEcwABOjRbAAE6ILoFUwACvBcAAaq0BAAGAwABOnsBaoEYAwACuRgDAAK5LScAATrgWwABPBRzAAE7RgMAATrzAWqBGtVQBAAEWwABO5xbAAE7bLqTfwACvBLC9wABNNADAAEXYtDa91T4CTsAATzDAAE82AACAlmADwACuoQEmwABPMAEcwABPPRbAAE84LoFUwACvBcAAaqwBAAGAwABPUcBaoEYAwACuRWADwACuoUrAAE9lARzAAE9xFsAAT2wugVTAAK8FwABqsgIAAoHAAE+EwFqhQYHAAE+LwFqhQQDAAK5LPgFKwABPpgEcwABPshbAAE+tLoFUwACvBcAAarEAAAAAwACuSgbAAK8PgdjAAE/SwABP5MAAU40AALikAWrAAE/TYAPAAP1RAgAAAQPAAE/swABTjQAAAAEBAcAAT/IAAAC5JWADwABIiQAAYAPAAK7lAT4GScAAT/0WwABQMBzAAFAFgMAAUAHAWqIWtVQBAAEWwABQGxbAAFAPLqTfwACvBLC9wABNNADAAEXYtRu92ErAAFBKARzAAFBWFsAAUFEugVTAAK8FwABqsQAAAADAAK5KP0nAAFGCHMAAUZEWwABRioDAAFGGwFqiFoJRwABFg4HUAQABNMAAUZUDwABRlcAAUeMAAAABAQHAAFGWAAAAYmADwABFfQAAYAPAAPo/AUrAAFGkARbAAFHRHMAAUaaBwABRpMBaosi1VAEAARbAAFG8FsAAUbAupN/AAK8EsL3AAE00AMAARdi1G73YAMAA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AEVvPRzAAGihFsAAaJuAwABokMBasTCZ/8AARYWEWQEAAYDAAGiowFqxMADAAEVsP0rAAGi/ARzAAGjLFsAAaMYugVTAAK8FwABqsQAAAADAAK5KBsAArxWB2MAAaOXAAGjqwABqEwAAwABq2wAAAAEDwABo/cAAahMAAAABAQHAAGkKAAAAg+5gA8AASJgAAFwBPgNOwABpHMAAaSIAAIW3YAPAAK7lARzAAGkqFsAAaSQuwABfeMAArwNLAQABFsAAaTCAwABpK8BatTSFt8AAR2cAwAD87k7AAGlCwABpRwAAhbVgA8AAruUBHMAAaU8WwABpSS7AAF94wACvA0sBAAEWwABpVYDAAGlQwFq1NIW1wABHZgDAAPzuScAAaWAiIhbAAGlpgsAAaWTAWrWOwABqzMAArvsAFsAAaYCBwABpesBatUrAAGrMwACu+wAcwABploLAAGmRwFq1jkgBAAGBwABpmcBatUoAwACu8T4CPRzAAGmzFsAAaa2AwABpqMBatTSZ/8AARYW5LAIAAoDAAGm7wFq1NBzAAGnHFsAAacEupB7AAK8HuOMCAAIpFsAAad0upN/AAK8EAMAARLIAwABFbz0cwABp/RbAAGn3gMAAafLAWrU0mf/AAEWFhFkBAAGAwABqBMBatTQAwABFbD8GwACvFoHYwABqGMAAah7AAG8OAADAAGrcAAAAAQPAAGowwABvDgAAAAEBAcAAakYAAAC7cmADwABGlwAAYAPAAK7lAT4FTsAAamHAAGpmAACFtWADwABFfQEcwABqdRbAAGpvgMAAamjAWrbXglHAAEWDSwEAAZQAwAD8uE7AAGqLwABqkQAAhbdgA8AARX0BHMAAaqAWwABqmoDAAGqTwFq214JRwABFg0sBAAGVAMAA/LhOwABqr8AAarcAAMAAat1gA8AAruUBHMAAar8WwABquS7AAF94wACvA0sBAAGCwABqwMBatykAwAD87knAAGrMIRzAAGrYg8AAatDAWrdgSAEAASsAwACu8T4BScAAa0siFsAAa38cwABrVIHAAGtPwFq28rVUAQABFsAAa2oWwABrXi6k38AArwSwvcAATTQAwABF2LQ2vdUAFsAAa84cwABro4LAAGudwFq3KbVUAQABFsAAa7kWwABrrS6k38AArwSwvcAATTQAwABF2LQ2vdU+AUnAAGvqFsAAa/aDwABr7sBat2DAAEXhwACu+j4BSsAAbA4BHMAAbBoWwABsFS6BVMAArwXAAGqyAgACFsAAbEEWwABsPC6BVMAArwXAAGqpwACuQRzAAGxYFsAAbFKDwABsSsBat2CGhcAAruiBjQEAARbAAGxfFsAAbFougVTAAK8FwABqqsAArkIAwACuVADAAK5LScAAbHcWwABsg4PAAGx7wFq3YKpZwACu+T4BSsAAbJsBHMAAbKcWwABsoi6BVMAArwXAAGqyAgACFsAAbM4WwABsyS6BVMAArwXAAGqpwACuQRzAAGz6HMAAbNwWwABs1y6BVMAArwXAAGqwAQABFsAAbPODwABs68Bat2CGhMAArucAwACuSYGNAQABFsAAbQEWwABs/C6BVMAArwXAAGqqwACuQgDAAK5UAMAArks/ScAAbSEiFsAAbXIcwABtOYHAAG0lwFq28rVaAQABFsAAbU4WwABtQi6k38AArwSwvcAATTQAwABF3rQ2vdUAFsAAbcAcwABtloLAAG2QwFq3KbVaAQABFsAAbasWwABtny6k38AArwSwvcAATTQAwABF3rQ2vdU+AUnAAG3cFsAAbeiDwABt4MBat2DAAEXhwACu+j4BSsAAbgABHMAAbgwWwABuBy6BVMAArwXAAGqyAgACFsAAbiQWwABuHy6BVMAArwXAAGqpwACuQRbAAG41g8AAbi3AWrdghoXAAK7oAMAArktJwABuTBbAAG5Yg8AAblDAWrdgqlnAAK75PgFKwABucAEcwABufBbAAG53LoFUwACvBcAAarICAAIWwABuoxbAAG6eLoFUwACvBcAAaqnAAK5BHMAAbrEWwABurC6BVMAArwXAAGqwAQABFsAAbsiDwABuwMBat2CGhMAArucAwACuSQDAAK5LPz8/SsAAbu0BHMAAbvkWwABu9C6BVMAArwXAAGqxAAAAAMAArkoGwACvF4HYwABvE8AAbyXAAHQtAAC4qAFqwABvFGADwAD9UQIAAAEDwABvM8AAdC0AAAABAQHAAG8/AAAAuM1gA8AAR54AAGADwACu5QE+BU7AAG9fwABvZAAAhbVgA8AARX0BHMAAb3gWwABvcoDAAG9mwFq7Q4JRwABFg0sBAAGTAMAA/LhOwABvjsAAb5QAAIW3YAPAAEV9ARzAAG+oFsAAb6KAwABvlsBau0OC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AWrAAIX+YAPAAGnxwAD5NADAAP1ePgE9i8AAhi/AWst0HMAAhjwWwACGNy6BVMAArwXAAGqyAgACFsAAhlqCwACGT8Bay1eGhMAArudqwACGZ2ADwACuesABdDIAwACuSz4BPYvAAIaKwFrLdBzAAIaXFsAAhpIugVTAAK8FwABqsQAAAADAAK5KSsAAhrQBHMAAhsGDwACGu8Bay3SXAwEAAYHAAIbOwFrLRQDAAK7sBsAAryKB2MAAhuHAAIbzwACRIQAAuPoBasAAhuJgA8AA/VECAAABA8AAhwnAAJEhAAAAAQEBwACHHQAAAMAAUHdgA8AARkwAAGADwACu5QE+Dk7AAIczwACHPQAAhbpbARbAAIdGgMAAhz/AWs43hbrAAEZOScAAh4ghJcAAh5aBwACHjMBazlRgA8AASJhKwACHpwEcwACHsxbAAIeuLoFUwACvBcAAarEAAAAAwACuSj9JwACHyiXAAIfYgcAAh87AWs5UYAPAAEidSsAAh+YBHMAAh/IWwACH7S6BVMAArwXAAGqxAAAAAMAArko/TsAAiBbAAIgcAACFt2ADwABFfQEmwACIFgEWwACIKIHAAIgewFrOVIW3AGADwABFfU7AAIhAwACIRQAAhbVgA8AARX0BJsAAiEABFsAAiFGBwACIR8BazlSFtQBgA8AARX1JwACIWxbAAIiPHMAAiGSDwACIX8BazyO1VAEAARbAAIh6FsAAiG4upN/AAK8EsL3AAE00AMAARdi1G73YPgFKwACIqwEcwACItxbAAIiyLoFUwACvBcAAarEAAAAAwACuSj9JwACI1BbAAIkJHMAAiN6CwACI2MBazvK1VAEAARbAAIj0FsAAiOgupN/AAK8EsL3AAE00AMAARdi1G73YPgFKwACJJQEcwACJMRbAAIksLoFUwACvBcAAarEAAAAAwACuSj9OwACJVcAAiWAAAMAAatlgA8AAruUBHMAAiWgWwACJYi7AAF94wACvA0sBAAGCwACJacBazvIAwAD87k7AAIl7wACJhQAAwABq2mADwACu5QEcwACJjRbAAImHLsAAX3jAAK8DSwEAAYPAAImOwFrPIwDAAPzuTsAAibPAAIm9AACcyWADwABpHAEmwACJswEcwACJyYHAAIm/wFrOVJzJAAAAAABgA8AAaRxOwACJ9MAAif0AAMAAauRg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AF94AF0DwAD82gJgA8AARX1gA8AAruUABMAAryqB2MAAkmrAAJJuCYFUAGADwACuPwABBcAArzSB2MAAknLAAJJywACSsAAAAAPAAJKGwACSsAAAAAMDA8AAkowAAASk32ADwABNKwDAAJKeAAAEwABfeF0DwAD82gJgA8AARX1gA8AAruUAwACSqwAABIFUYAPAAK4/AABgA8AAryYBPwQIAcAAryiAAMBa2DQIAcAArymBAMBa2EQIAcAAryqCAMBa2GMJAcAAknLAAEUoAAAAAAcGwACvLIHYwACStcAAkrvAAJZ+AACCmwAAAAEDwACSvsAAln4AAAABAQHAAJLEAAAAwABq52ADwABIiQAAYAPAAK7lAT4IPRzAAJNPFsAAk0kuwABfeMAArymAvwIAAoDAAJNQwFrY2hzAAJNgFsAAk1sugVTAAK8qwABqtAAAAADAAK5MAMAA/O9OwACTfMAAk4gAAMAAauhgA8AAruUBHMAAk4oumo8BAAEcwACTnhbAAJOYgMAAk5DAWtjaglHAAEWDSwEAAZQAwAD8uADAAK8tPRzAAJOuFsAAk6guwABfeMAArymAvwIAAoDAAJOvwFrY2isAwAD870nAAJPEHMAAk9SBwACTyMBa2TtIAQABKwDAAK7xSsAAk90BKz9OwACT9MAAk/8AAMAAaulgA8AAruUBHMAAlAcWwACUAS7AAF94wACvKUsBAAEcwACUFhbAAJQQgMAAlAjAWtjaglHAAEWDSwEAAZMAwAD8uADAAPzuTsAAlVzAAJVgAACDvmADwACuTwEjJcAAlXQWwACVboHAAJViwFrZO4aEwACu52ADwACuXxbAAJWYgsAAlY3AWtnRhoTAAK7nHMAAlboWwACVtIHAAJWowFrZO4aEwACu55yvAQABFsAAlcmCwACVvsBa2dGGhMAArucAwACuVwFgA8AArk9OwACV28AAld4AAMAAarNgA8AArk8BIyXAAJXyFsAAleyBwACV4MBa2TuGhcAAruhgA8AArl8WwACWFoLAAJYLwFrZ0YaFwACu6BzAAJY4FsAAljKBwACWJsBa2TuGhcAArujAAEkSAQABFsAAlkeCwACWPMBa2dGGhcAArugAwACuWAFgA8AArk9KwACWUwEcwACWXxbAAJZaLoFUwACvKsAAarICAAKDwACWcsBa2iaEwACW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SGQAAAAAAAAAXwMBAAE+Aj2KwABIPMBcdm4pSsAASFEBgMAASFjAXHYkAMAA/PVKwABIawGCwABIcsBcdm4GwACzEIHswABIgcAASIbAAEi7AACApQAAAAEDwABIjMAASLsAAAABAQHAAEiZAAAgiEVdA8AA/GcBXwMBAAAAXAFKwABIpgEcwABIr4DAAEimwFx3HIP4AQABFsAASLcuVsAAsw8AwAD8dwbAALMRgezAAEjAwABIxcAASOAAAIJCAAAAAQPAAEjKwABI4AAAAAAAAABcAUrAAEjQARzAAEjZFsAASNAuwABr0cAAsjPAALMDgkIAAAAAwAD8+AbAALMSgezAAEjlwABI6sAASSYAAIQCAAAAAQPAAEj1wABJJgAAAAEBAcAASQcAAACD1l0DwAD8ZwFgA8AA/VEAAGADwAD6PwFKwABJEQEcwABJF4DAAEkRwFx325Y2AQABFsAASR0ugxfAALMNAMAA/HoGwACzE4HswABKpsAASq3AAEsIAACXBAAAAAEDwABKt8AASwgAAAABAQHAAErEAAAAg9ZdA8AA/ZwBYAPAAP1RAABdA8AA/ZwBXwMBAAFKwABK1AEcwABLARzAAErULoGlAQABNMAAStoDwABK2sAASv8AAAABAQHAAErbAAAAliZfAwEAAABgA8AA+j8BSsAASucBIRzAAErugMAASujAXHhOgxcBAAGBwABK98BceJwAwAD9qADAALJYlRkAAAAAwAD8fgbAALMUgezAAEyGwABMjcAATM0AAJcDAAAAAQPAAEyZwABMzQAAAAEBAcAATKYAAACD1l0DwAD9nAFgA8AA/VEAAF0DwAD9nAFfAwEAAUrAAEywARzAAEzGHMAATLAugaUBAAEWwABMvIDAAEy2wFx5E4MXwAD9qADAALJYlRkAAAAAwAD8fgbAALMVgezAAEzSwABM1MAATWsAAJb8AAAAAQPAAEzawABNawAAAAEBAcAATOIAAACWJmADwAD9UQAAXwMBAAE+A0nAAEzxIiEcwABM/YDAAEz1wFx5mkgBAAErAMAA/V4AISXAAE0QgMAATQjAXHmaXwMBAErAAE0XASs/TsAATSzAAE0wAACD0V8DAAABHMAATTIuwABr1MAAsjMBAAEmwABNRwCAwABNP8BceZpfAwEAAMAAswRKwABNUwEcwABNYhbAAE1aLsAAa9HAALIzwACzA0sBAAGBwABNY8Bcee4AwAD87gbAALMWgezAAE1wwABNdcAATlAAAIRZAAAAAQPAAE17wABOUAAAAAEBAcAATYMAAACWJmADwAD9UQAAYAPAAPo/AT4FScAATZIiIRzAAE2egMAATZbAXHqBSAEAASsAwAD9XgAhJcAATbGAwABNqcBceoFfAwEASsAATbgBKj9OwABNzsAATdIAAIPRXwMAAAEcwABN1C7AAGvUwACyMwEAASbAAE3pAIDAAE3hwFx6gV8DAQAAwACzBEnAAE31IRzAAE4DFsAATfouwABr0cAAsjPAALMDh0cBAAGBwABOD8BcetcAwAD87UrAAE4VASo/PRzAAE4wFsAATicuwABr0cAAsjPAALMDhFkBAAGBwABON8BcetcAwAD890rAAE5BASkGwACzF4HswABOVcAATlrAAE6aAACW/QAAAAEDwABOY8AATpoAAAABAQHAAE51AAAAiEVdA8AA/GcBYAPAAP1RAABcAUrAAE6CARzAAE6LgMAAToLAXHulg/gBAAEWwABOky6EWcAAsxYAwAD8dwbAALMYgezAAE6fwABOpMAAT14AAJb+AAAAAQPAAE6vwABPXgAAAAEBAcAATrUAAACW/2EDAV8DAQBgA8AA+j8AAFwBPgNOwABO0MAATtkAAMAAa9ZdA8AA/KkBWwExwABO21sAPRzAAE7sFsAATuMuwABr0cAAsjPAALMDg/gBAAE0wABO9APAAE70wABPMgAAAAICAsAATvUAAACD0V8DAAAAwABO+gAAAICWXwMBAAAAYAPAAP0OAT4BScAATwkcwABPEYDAAE8NwFx8EyABAAGDwABPEsBcfI0AAD0cwABPI4HAAE8awFx8MFYBAAGCwABPJ8BcfH8AwAD8uj8AwAD8+T0cwABPQoHAAE85wFx8MIP4AQABFsAAT1MWwABPSi7AAGvRwACyM8AAswOEWcAA/PcAwAD8dwbAALMZgezAAE9jwABPaMAAUVAAAJcAAAAAAQPAAE9xwABRUAAAAAEBAcAAT4MAAACIRV0DwAD8ZwFgA8AA/VEAAFwBPgVOwABPl8AAT6YAAMAAa9ddA8AA/ZwBXwMBAAEewABPrMAAwRgAAV8DAQAAAEbAAE/DAMAAT8wAAACWJmADwAD9UQCAwABP18BcfU5BPgRJwABP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/esBPgFJhPAahPTAALTNPgFKhQUBJIVBA2qFFmADwAD968AAmqiAhSTAXXrJaoUyYAPAAP3rwACcvz4BSoVSAYCFWcBdeskGwAC00oH5ha+FtoZHAAHAAG0KAAAAAQOFxIZHAAAAAQEBhcwAAACBsGADwAD96wAAYAPAAP3rAT4BSYXWGoXawAC0zT4BSoXrASSGJQNqhfxgA8AA/evAAJqlgIYIwF17RWqGFmADwAD968AAnL8+AUqGNgGAhj3AXXtFBsAAtNOB+YaUhpuHMAABwABtCwAAAAEDhquHMAAAAAEBAYazAAAAgbBgA8AA/esAAGADwAD96wE+AUmGvRqGwcAAtM0+AUqG0gEkhw4DaobjYAPAAP3rwACaqICG8cBde8Fqhv9gA8AA/evAAJy/PgFKhx8BgIcmwF17wQbAALTUgfmHcId3iA4AAcAAbQwAAAABA4eIiA4AAAABAQGHkAAAAIGwYAPAAP3rAABgA8AA/esBPgFJh5oah57AALTNPgFKh68BJIfsA2qHwGADwAD968AAmquAh8/AXXw9aofdYAPAAP3rwACcvz4BSof9AYCIBMBdfD0GwAC01YH5iG+IdokiAAHAAG0NAAAAAQOIgokiAAAAAwMDiIoAAACcxmADwAD96wCImwAAALyEYAPAAP3rAIitAAAAnMdgA8AA/esAAGADwAD96wE+AUqIuQEkAAMeiMPAALTTAQABgIjUwF18uQAeiOnAALTUAQABgYj7wF18xwAeiQjAALTSAQABgokXwF181QAGwAC01oH5iZCJl4oZAAHAAG0OAAAAAQOJqYoZAAAAAwMDibEAAABqYAPAAP3rAIm/AAAAgbBgA8AA/esAicwAAACCjGADwAD96wAAYAPAAP3rAT4BSonVASSKFwMeid/AALTUAQABgInxwF19TACBifnAXX1ZHon/wAC01AEAAYKKEcBdfWcABsAAtNeB+ZKXkpyYDAABwABtDwAAAAEDkq6YDAAAAAUEBJKzAAAAtyJgA8AA/mwAksUAAACC42ADwAD96wCS3QAAAIKTYAPAALU0AJMPAAAAhc5dA8AA/NoCYAPAAP3rXQPAALTcAWADwAC1YQABkx8AAACBdGEDAWADwAD961wBagBgA8AA/Q55XAE+A06TTJNUAADAAG0QXQPAAPypAWADwAD96wEck2AWk1uD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AYeImcBeP1sAwAD9KgA9HIivhYiqwF4+0oC/AgACkxyIwBaItS7AAG6awAC2yMAAttlkAQABHojCwAC3vAIAAoSI08BePquBiN7AXj3/AADAAP0qAMAA/Lk9iYjswF49/xyI8YGI7MBePf9kAQABlADAAP0qPY6I+8BePuGUPReJFi7AAG6awAC2yB6JI8AAts0FAAWEiSvAXj6rgYk2wF49/4KJPcBePgyFiULAXj7SholJwF4+4QDAALbZPRyJYRaJWy6XPMAAtsjAALbYVgEAAYWJZcBePtIAwAD9u0mJcYOJdcBePho9HIl9LsAAbpvAALbIAgACgImEwF498YKJjMBePgwAwAC23z8GwAC23IIOiZmJrInzAADAAG6eAAAAAQOJtonzAAAAAQEBibwAAACHEWADwAD6PwAAYAPAAMcbAUqJ1QEfidnAALbuAQABFontLpc8wAC2yMAAttgABsAAtt2CDon4if2KEAAAgogAAAABA4oCihAAAAAAAAAAXAFKiggBHIoILsAAbpvAALbIAAAAAMAAtt8GwAC234IOinyKgYtIAADAAG6bwAC2yAAAAAEDioeLSAAAAAIAAoqQAAAAg+xgA8AA/esBagBgA8AA/Q55ipwAAAAnYAPAAPwFAWoAYAPAAP0OeQBcAT4CSYqqIRyKuRaKri7AAG6awAC2yMAAttlIAQABKwDAAP0oPgE9MIrKH4rUwAD74AMAAyfAAG6fgIscwF5Bf4GLJMBeQZYAPz0ciz0WizculzzAALbIwAC22IKIAAAAAMAA/bwAAF49zwBeQMkAXkEeAF5BWQBeQhMAAAAEAsAAtuKCDouWi5yRpgPAAG6gAAABYAHAAMcmAAACBMAAtuWCDowwjDUJlzzAALbIAF0DwAD9uQFdA8AA/KkBYAPAAPwFAATAALbmgg6NKY0zGMAAbprAALbIAGADwAD8BQErAQXAALbugg6NOI04jVcAAAADjUuNVwAAAAEBAY1RAAAElzxdA8AA/bkBXQPAAPypAWADwAD8BQAAYAPAALbiAT8CCAHAALblgADAXkKrCQGNOMAAxywAAAAABAbAALbogg6NXI1hjaAAAFYAAAABA41kjaAAAAABAQGNbwAAIKypXQPAAPypAWADwAD8BQAAXAFKjXkBHI15LsAAbc0EAASAjYLAXkMJkxaNkoCNjMBeQwlhwAD82CoAwAC26QbAALbpgg6NpY2qkE8AAMAAbc0AAAABA42ykE8AAAAEBASNvQAAAKypXQPAAPypAWADwAD8BQCNyAAAAGpgA8AA/AUAjdMAAACCjGADwAD8BQCN3QAAAMAAbc5gA8AA+j8AAFwBPgg9Ho32wAD7RgMAA4GOBsBeQ4SCjg3AXkORFo4YgI4SwF5Db2HAAPzYAEmOJhyOMIGOKsBeQ4RIAQABgo4zwF5DkQDAAP0oPgJJjkCDjkTAXkOfPRyOTC7AAG6bwAC2yAIAAoCOU8BeQ2+CjlrAXkORAMAAtuw/So5mAD9OjoMAAACENGADwADjKABOjpIAAADAAG6cYAPAAPwFAEmOohyOsRaOpi7AAG6awAC2yMAAtuZIAQABKwDAAP0oPgI9jI7CwF5EMB6OzsAA4ywBAAEcjuYcjt2CjtnAXkORgY0BAAGBjt/AXkOEAMAA/SuGhwEAAZUAwAD9LwA9jY7zwF5EP5M+BU6PGo8jAADAAG6dYAPAAPwFARyPNxyPMhyPKoKPJsBeQ5GBjQEAAYGPLMBeQ4QAwAD9K4GNAQABlADAAP0rhocBAAGVAMAA/S89jI9DwF5EMB6PT8AA4ywBAAEcj1uUZAEAAYaPXcBeRLkAwAD9KgA9HI9zhI9uwF5EMIC/AgACkxyPhBaPeS7AAG6awAC2yMAAtuZkAQABHo+GwAC3vAIAAoCPl8BeQ2+Bj57AXkOEAADAAP0qAMAA/Lk9iY+swF5DhByPsYGPrMBeQ4RkAQABlADAAP0qPY2Pu8BeRD+UPReP1i7AAG6awAC2yB6P48AAts0FAAWAj+vAXkNvgY/ywF5DhIKP+cBeQ5GEj/7AXkQwhZAFwF5EPwDAALbmPRyQHRaQFy6XPMAAtsjAALblVgEAAYSQIcBeRDAAwAD9u0mQLYOQMcBeQ589HJA5LsAAbpvAALbIAgACgJBAwF5Db4KQR8BeQ5EAwAC27D8GwAC26oIOkFSQWZBsAACCiAAAAAEDkF6QbAAAAAAAAABcAUqQZAEckGQuwABum8AAtsgAAAAAwAC27AbAALbsgg6Q15DckaQAAMAAbpvAALbIAAAAAQOQ4pGkAAAAAgACkO4AAACsqV0DwAD8qQFgA8AA/AUBagBgA8AA/Q55kPkAAAAnYAPAAPwFAWoAYAPAAP0OeQBcAT4CSZEHIRyRFhaRCy7AAG6awAC2yMAAtuZIAQABKwDAAP0oPgE9MJEnH5ExwAD74AMAAyfAAG6fgJF5wF5GiIGRgMBeRqYAPz0ckZkWkZMulzzAALbIwAC25YKIAAAAAMAA/bwAAF5C6gBeQ00AXkYnAF5GYgBeRyMAAAAEAQTAALbKgg6BdYGWBsAAboUAYAPAALbOAWqBiGADwAC2zsABfhoBBsAAts2CDpL8kwCU/AABwABuocAAtsgAAAABA5MHlPwAAAAFBQWTEgAAAJ+4XQPAAPypAWADwAD8BQCTIQAAAMAAbqJgA8AA/AUAkzIAAADAAG6jYAPAAPwFAJNLAAAAwABfAl0DwAD8qQFgA8AA/AUAk1wAAADAAG6kYAPAAPwFAABgA8AA/AUBPgROk3aThwAAwABupWADwAD8BQGEk4nAXkfVRZOdAZOmk6gAAGJgA8AA/AUBgZOqwF5HngEck7mGk7fAXkgMYwEAARyTxYKTu8BeR66BjQEAAZQAwAD9KwDAAP0yAY6TysBeSAwck8yGk8rAXkgMZAEAAZUAwAD9Kj4DTpPck+cAAMAAbqZgA8AA/AUBHpPpwAC3vAIAAoCT+sBeR4mGlAXAXkgMAE6UEZQdAADAAG6nYAPAAPwFAR6UH8AAt7wCAAKAlDDAXkeJHJQ9hpQ7wF5IDGQBAAGUAMAA/SoAPRyUUoOUR8BeR76AvwIAAjUAAAABAGADwAD8BQGFlFPAXkfwNQAAAAEAYAPAAPwFAY2UU8BeR/AclGMUAMBeSNwJAGQBAAGUAMAA/SoUAMBeSNwJAByUeRyUbDcQg4gBAAGHlG7AXkhpAMAA/SxkAQABFJR7wF5IlAgAAMAA/SoAwAD8uUmUjxaUrRyUnoKUlMBeR66BjQEAAYGUoMBeR54AwAD9K8AAbpfAAPw5SpS1ASs/SpTEARyUzjcQg4gBAAEelNDAALe8AgACgJThwF5HiRyU9oKU7MBeR66BjQEAAZQAwAD9KwAAwAD9LAGCDgBeSbkAXjs7AF49EQBeQiwAXkc8AAAAAwBeR2MAXkm5AAAAAQACBMAAtu/AAG6ogg8AAAKA/AAAwADE+AAAgRQAAKaUAAAAAAACAsAAtvaCD4M4gz6EQAPAAG6pAAABXQHAAMeDAl0DwAD8qQFgA8AA/AVgA8AA/esAAAABBcAAtvyCD4N2g3yDjgGAtcAAtu8AA4OMg44AAAAAAAAAYAPAALb2AT8BCQGDfMAAx4wAAAAAAgbAALb4gg+Dk4Oag9YAAIi+AAAAAQODoYPWAAAAAQEBg6wAACCENF0DwAD8qQFgA8AA/AUAAGADwAD96wFKg7YBHoO2wAC29AMAA4CDv8BeSpCTFoPPgIPJwF5KkGHAAPzYAAbAALb5gg+D24PuhD4AALR0AAAAAQOEBIQ+AAAAAQEBhBIAACCEO10DwAD9uQFgA8AA/esAAGADwADHGwFKhCEBH4QlwAC3BgEAAYCEOcBeSvMAAABeSnAAXkrTAF5LJgAAAAICwAC2/YIPhH+EhYaMA8AAbqoAAAFgAcAAxyYAAAEEwAC3AIIPhRaFGwmXPMAAtu8AXQPAAP25AWADwAD96wABBcAAtwaCD4UghSCFPwAAAAOFM4U/AAAAAQEBhTkAAASXPF0DwAD9uQFgA8AA/esAAGADwAC2/QE/AggBwAC3AIAAwF5LkgkBhSDAAMcsAAAAAAMGwAC3AoIPhUSFSYWTAABWAAAAAQOFTIWTAAAAAQEBhVcAACCsqV0DwAD8qQFgA8AA/AUAAFwBPgE9HIVqFoVkLpc8wAC278AAtwBWAQABHoVuwAC29AMAA4CFd8BeS+mTFoWHgIWBwF5L6WHAAPzYAADAAP27BsAAtwOCD4WYhZ2GYQAAwABtzQAAAAEDhaWGYQAAAAQEBIWwAAAArKldA8AA/KkBYAPAAPwFAIW7AAAAamADwAD8BQCFxgAAAIKMYAPAAPwFAIXQAAAAwABtzmADwAD6PwAAXAE+Az0ehenAAPtGAwADgYX5wF5Md4KGAMBeTIQWhguAhgXAXkxiYcAA/NgAPRyGHhaGGC6XPMAAtu/AALcAVgEAAR6GIsAAtvQDAAOAhivAXkxigYYywF5Md4KGOcBeTIQAAMAA/btJhkSDhkjAXkySPRyGVhaGUC6XPMAAtu/AALcAgogAAAAAwAD9vD8GwAC3BIIPhmaGa4aKAACCiAAAAAEDhnCGigAAAAAAAABcAT4BPRyGfxaGeS6XPMAAtu/AALcAgogAAAAAwAD9vAAAXkvKAF5MQABeTTIAXk1zAAAAAwEEwAC28YIPgXGBmgbAAG6JAGADwAC29gFqgYhgA8AAtvbAAX4hAgbAALb0gg+Gj4aWjXkAAcAAbpDAALbvAAAAAQOGno15AAAAAwMDhqkAAACENF0DwAD8qQFgA8AA/AUAhrQAAABqYAPAAPwFAIa/AAAAgoxgA8AA/AUAAGADwAD96wE+Bk6GzIbTAACCi2ADwAD+NQEfhtnAAP5UAAAAAE6HkoeZAADAAG6SYAPAAPwFAZNFh6ABh6mHqwAAYmADwAD8BQGBh63AXk3qARyHtoWHtMBeTkFjAQABgoe4wF5N9wDAAP0yAY2HvcBeTkEch76Fh73AXk5BZAEAAZQAwAD9KkE+B06HzIfRAACG8GADwAD8BQEch9iAh9PAXk3VSwEAAYWH2cBeTkEAwAD8uD2Mh+HAXk4rHIfohIfhwF5OK4EGAQABhofrwF5OkQDAAPweTokjiSoAAMAASZRgA8AA/AUBHIkxNyCBBgEAAYaJM8BeTpEAwAD8HkmJPSIiIiIiIhyJSYeJQsBeTt6BbQEAAWqJTGADwAD8BcAAmhUAwAD9NQAciVmHiVLAXk7egWsBAAFqiVxgA8AA/AXAAJpgAMAA/TMBIhyJcYaJbMBeTpGBbQEAAWqJdGADwAD8BbYUAMAA/TUAHIl/hol6wF5OkYFrAQABaomCYAPAAPwFwACNTwDAAP0zARyJloaJkcBeTpFIAQABaomZYAPAAPwFwABDkQDAAP0oARyJr4aJqsBeTpFIAQABaomyYAPAAPwFsqUAwAD9KAEciceGicLAXk6RSAEAAWqJymADwAD8BcAAmg8AwAD9KAEcieaGieHAXk6RSAEAAWqJ6WADwAD8BcAAmmwAwAD9KD4CPRyKOIOKMcBeThCEEQEAAYaKRsBeTpEAwAD+SkKKUwA/PRyKb4OKaMBeThCEEQEAAWqKfWADwAD8BcAAYQkAwAD+Sj0ci2+Di2jAXk4QhBEBAAEei33AALb1AQABHIudHIuVhouQwF5OkYN3AQABN4DwAMAA/B2DvAEAAZcAwAD8IgAAwAD+Sj0ci7CDi6nAXk4QhBEBAAEei77AALb1AQABHIvVhovQwF5OkYN3AQABNw8AwAD8HQAAwAD+SkmL5iIci/GEi+rAXk4rgW0BAAGTAMAA/TUAHIwAhIv5wF5OK4FrAQABN4D/AMAA/TNKjAgBHIwWg4wPwF5OECMAAAAAwAD+Tj9FjGgBjHGMcwAAYmADwAD8BQGBjHXAXk3qARyMfoWMfMBeUSNjAQABgoyAwF5N9wDAAP0yAY2MhcBeUSMcjIaFjIXAXlEjZAEAAZQAwAD9KkE+A06MlIyZAACG8GADwAD8BQEcjKCAjJvAXk3VSwEAAYWMocBeUSMAwAD8uEmMqSIcjLKGjK3AXlFzgW0BAAGTAMAA/TUAHIy/hoy6wF5Rc4FrAQABN4D/AMAA/TNCjMgAPz0wjNYfjODAAPvgAwADJI1ABSfAAG6TIxyNDoaNCcBeUXNjAQABkwDAAP0yJ4GNJwABYAPAAP3rJ6yeHI0sHI0mho0hwF5Rc5fOAAAAAMAA/CmECQEAATcQAMAA/DMngWqAjUrAXk3VhY1ZwF5RIwA9MI1kJ8AASG4GwAC29YIPjdiN3I4lAAHAAG6UwAC27wAAAAEDje2OJQAAAAEBAY3yAAAArQRgA8AA/AUAAGADwAD8BQFKjfwBIxyOAoCN/MBeUnFjAQABNwoAwAD9MhyOD4COCcBeUnFkAQABao4RYAPAAPwFthQAwAD9KhyOIRyOHICOFsBeUnFkAQABao4eYAPAAPwFwABffgDAAP0qgY0BAAE3CgDAAP0rAWADwAD8BQGCDwBeUvUAXkoGAF5LNwBeTYgAAAACAF5NrwBeUksAXlL1AAAAAgACBMAAtwfAAG6rghAAAASA/AAAwADE+AAAgRQAAKaUAACBOgAAwAC2rwAAgWgAAMAAt7oAAAAAAAMCwAC3EIIQg82D04X2A8AAbqwAAAFdAcAAx4MCYAPAAP3rXQPAAPypAWADwAD8BQAAAAEFwAC3FoIQhAuEEYQjAYC1wAC3BwADhCGEIwAAAAAAAABgA8AAtxABPwEJAYQRwADHjAAAAAACBsAAtxKCEIQohDKFhwAAiL4AAAABA4Q5hYcAAAABAQGEQQAAIIPsYAPAAP3rAABdA8AA/KkBYAPAAPwFAT4EToRThFoAAIKLYAPAALdjAR+EYMAAt2gAAAAAToR3hIEAAMAAbq1gA8AA/AUBHoSDwAC3DgQABBaEkoCEi8BeU+CfuMAA/fOTFoSngISgwF5T4GHAAP3vgYSvwF5UAABJhL0hHITLgoTBwF5UG0gBAAErAMAA/Sg+AT0whNwfhObAAPvgAwADJ8AAbp+AhS7AXlPgFoU9gIU2wF5T4GHAAP3vAD9KhVEBHIVmFoVfgYVYwF5UAIKLwAC3QJgqAgACkxaFfIGFdcBeVABhwAC3PADAAOLXBsAAtxOCEIWMhaGF9AAAtHQAAAABA4W3hfQAAAABAQGFyAAAIIQ7XQPAAP25AV0DwAD8qQFgA8AA/AUAAGADwADI5gFKhdcBH4XbwAC3IwEAAYCF78BeVPQAAABeU8AAXlTUAF5VLgAAAAICwAC3F4IQhjWGO419A8AAbq4AAAFgAcAAyRkAAAIEwAC3GoIQhtGG1gmXPMAAtwcAXQPAAP25AV0DwAD8qQFgA8AA/AUABMAAtxuCEIiOiJgYwABumsAAtwcAYAPAAPwFASsBBcAAtyOCEIidiJ2IvAAAAAOIsIi8AAAAAQEBiLYAAASXPF0DwAD9uQFdA8AA/KkBYAPAAPwFAABgA8AAtxcBPwIIAcAAtxqAAMBeVb4JAYidwADJGwAAAAAEBsAAtx2CEIjBiMaLwwAAwABtzQAAAAEDiM6LwwAAAAQEBIjWAAAAg+xgA8AA/esAiOIAAABqYAPAAPwFAIjtAAAAgoxgA8AA/AUAiPcAAADAAG3OYAPAAPo/AABcAT4JPR6JEMAA+0YDAAOBiSDAXlYtgoknwF5WOhaJM4CJLMBeVh9hwAD97wBJiUEciUuBiUXAXlYtSAEAAYKJTsBeVjoAwAD9KD4CSYlbg4lfwF5WSD0ciWcuwABum8AAtwcCAAKAiW7AXlYfgol2wF5WOgDAALchP0qJggA/TomZiaAAAIKLYAPAALdjAR+JpsAAt2gAAAAATom9iccAAJ+4XQPAAPypAWADwAD8BQEWidCAicnAXlYfn7jAAP3zSYnfHInuFonjLsAAbprAALcHwAC3G0gBAAFqifFgA8AA/AWBngDAAP0oPgM9F4oHLsAAbprAALcHHIoXNxCDiAEAAR6KGcAAt7wCAAKFiirAXlb0gYo1wF5WLQAAwAD9LMAAtxs9iYpDwF5WLRyKSIGKQ8BeVi1kAQABlADAAP0qSYpTHIpdgYpXwF5WLUgBAAGCimDAXlY6AMAA/Sg+AkmKb4OKc8BeVkg9HIp7LsAAbpvAALcHAgACgIqCwF5WH4KKisBeVjoAwAC3IT9KipgAPz9JirMhHIrCFoq3LsAAbprAALcHwAC3G0gBAAErAMAA/Sg+Aj0citqEitPAXlbZVgEAARyK6RaK3i7AAG6awAC3B8AAtxtkAQABHorrwAC3vAIAAoWK/MBeVvSBiwfAXlYtAADAAP0qAMAAt049iYsWwF5WLRyLG4GLFsBeVi1kAQABlADAAP0qPz0XiyouwABumsAAtwceizfAALcOBAAEhYs/wF5W9IGLSsBeVi2Ci1HAXlY6hItWwF5W2QDAALcbPRyLahaLZC6XPMAAtwfAALcaVgEAARyLfBaLdYSLbsBeVtmCi8AAt0CYKgIAApMWi5KEi4vAXlbZYcAAtzwAwADi1wDAAP27SYugg4ukwF5WSD0ci6wuwABum8AAtwcCAAKAi7PAXlYfgou7wF5WOgDAALchPwbAALceghCLyIvbjCYAAMAAbp4AAAABA4vljCYAAAABAQGL6wAAAIcRYAPAAPo/AABgA8AAxxsBSowEAR+MCMAAtzABAAEWjCAulzzAALcHwAC3GgAGwAC3H4IQjCuMMIxDAACCiAAAAAEDjDWMQwAAAAAAAABcAUqMOwEcjDsuwABum8AAtwcAAAAAwAC3IQbAALchghCMr4y0jXsAAMAAbpvAALcHAAAAAQOMuo17AAAAAgACjMMAAACD7GADwAD96wFqAGADwAD9DnmMzwAAACdgA8AA/AUBagBgA8AA/Q55AFwBPgJJjN0hHIzsFozhLsAAbprAALcHwAC3G0gBAAErAMAA/Sg+AT0wjP0fjQfAAPvgAwADJ8AAbp+AjU/AXlnbgY1XwF5Z8gA/PRyNcBaNai6XPMAAtwfAALcagogAAAAAwAD9vAAAXlX9AF5ZJQBeWXoAXlm1AF5abwAAAAQCwAC3JIIQjc2N05TNA8AAbq8AAAFgAcAAxyYAAAIEwAC3J4IQjmuOcAmXPMAAtwcAXQPAAP25AV0DwAD8qQFgA8AA/AUABMAAtyiCEJAokDIYwABumsAAtwcAYAPAAPwFASsBBcAAtzCCEJA3kDeQWgAAAAOQTpBaAAAAAQEBkFQAAASXPF0DwAD9uQFdA8AA/KkBYAPAAPwFAABgA8AAtyQBPwIIAcAAtyeAAMBeWwcJAZA3wADHLAAAAAAEBsAAtyqCEJBfkGSQowAAVgAAAAEDkGeQowAAAAEBAZByAAAgrKldA8AA/KkBYAPAAPwFAABcAUqQfAEckHwuwABtzQQABICQhcBeW2WTFpCVgJCPwF5bZWHAAPzYKgDAALcrBsAAtyuCEJCokK2TdgAAwABtzQAAAAEDkLWTdgAAAAQEBJDAAAAArKldA8AA/KkBYAPAAPwFAJDLAAAAamADwAD8BQCQ1gAAAIKMYAPAAPwFAJDgAAAAwABtzmADwAD6PwAAXAE+CD0ekPnAAPtGAwADgZEJwF5b4IKREMBeW+0WkRuAkRXAXlvLYcAA/NgASZEpHJEzgZEtwF5b4EgBAAGCkTbAXlvtAMAA/Sg+AkmRQ4ORR8BeW/s9HJFPLsAAbpvAALcHAgACgJFWwF5by4KRXcBeW+0AwAC3Lj9KkWkAP06RgJGHAACCi2ADwAC3YwEfkY3AALdoAAAAAEmRoByRrxaRpC7AAG6awAC3B8AAtyhIAQABapGyYAPAAPwFgZ4AwAD9KD4DPReRyC7AAG6awAC3BxyR2DcQg4gBAAEekdrAALe8AgACgJHrwF5by4GR8sBeW+AAAMAA/SzAALcoPYmSAMBeW+AckgWBkgDAXlvgZAEAAZQAwAD9KkmSEBySGoGSFMBeW+BIAQABgpIdwF5b7QDAAP0oPgJJkiyDkjDAXlv7PRySOC7AAG6bwAC3BwIAAoCSP8BeW8uCkkbAXlvtAMAAty4/SpJUAD8/SZJvIRySfhaScy7AAG6awAC3B8AAtyhIAQABKwDAAP0oPgI9HJKWhJKPwF5cjFYBAAEckqUWkpouwABumsAAtwfAALcoZAEAAR6Sp8AAt7wCAAKAkrjAXlvLgZK/wF5b4AAAwAD9KgDAALdOPYmSzsBeW+AcktOBks7AXlvgZAEAAZQAwAD9Kj89F5LiLsAAbprAALcHHpLvwAC3DgQABICS98BeW8uBkv7AXlvggpMFwF5b7YSTCsBeXIwAwAC3KD0ckx4WkxgulzzAALcHwAC3J1YBAAEckzAWkymEkyLAXlyMgovAALdAmCoCAAKTFpNGhJM/wF5cjGHAALc8AMAA4tcAwAD9u0mTVIOTWMBeW/s9HJNgLsAAbpvAALcHAgACgJNnwF5by4KTbsBeW+0AwAC3Lj8GwAC3LIIQk3uTgJOTAACCiAAAAAEDk4WTkwAAAAAAAABcAUqTiwEck4suwABum8AAtwcAAAAAwAC3LgbAALcughCT/pQDlMsAAMAAbpvAALcHAAAAAQOUCZTLAAAAAgAClBUAAACsqV0DwAD8qQFgA8AA/AUBagBgA8AA/Q55lCAAAAAnYAPAAPwFAWoAYAPAAP0OeQBcAT4CSZQuIRyUPRaUMi7AAG6awAC3B8AAtyhIAQABKwDAAP0oPgE9MJROH5RYwAD74AMAAyfAAG6fgJSgwF5fEoGUp8BeXzAAPz0clMAWlLoulzzAALcHwAC3J4KIAAAAAMAA/bwAAF5bRgBeW6kAXl6xAF5e7ABeX60AAAAEAgTAALcJghCBt4HgBsAAbooAYAPAALcQAWqBzmADwAC3EMABfigEwAC3C4IQgemB+gbAAG6wwAC3BwBgA8AA/AUBaoH4YAPAAPwFgZ4CBsAAtw6CEJYjliecPAABwABuocAAtwcAAAABA5YunDwAAAAEBASWOQAAAJ+4XQPAAPypAWADwAD8BQCWSAAAAGpgA8AA/AUAllMAAACCjGADwAD8BQCWZAAAAIKLYAPAALdjAABgA8AA/AUBPgVOlySXLwAAwABusWADwAD8BQGTTpe1l8AAAMAAbrJgA8AA/AUBgZfCwF5gT0WXywGX1JfWAABiYAPAAPwFAYGX2MBeYE8BHJfhhpffwF5gsmMBAAGCl+PAXmBcAMAA/TIBjpfowF5gshyX6YaX6MBeYLJkAQABlADAAP0qQT4LTpgkmC0AAJg1YAPAAPwFARyYOICYL8BeYDpLAQABhpg5wF5gsgDAAPy4SZhBIRyYUhyYToCYRcBeYDpLAQABhphPwF5gsgDAAPy4SAEAAWqYVWADwAD8BcAAYQkAwAD9KD4CPYyYZ8BeYIMcmHKEmGfAXmCDgQYBAAGHmHXAXmECAMAA/B5CmIUAP0mZFxyZHYaZG8BeYLKAlwEAAYWZH8BeYJYAwAD9ND4CPR6ZM8AAtw8EAASEmUzAXmCDgJlYwF5gOoWZY8BeYJaGmW/AXmCyAD0cmYCDmXnAXmBqgKUDAAOAmYfAXmA6hZmSwF5gloaZnsBeYLIAwAC3Tz89jpnswF5gshyZ7YaZ7MBeYLJkAQABlADAAP0qSZn1HJn7hpn5wF5gsoFtAQABgpn+wF5gXADAAP01SpoDAWqaCmADwAD8BYGeP06aIZosAADAAG6mYAPAAPwFAR6aLsAAt7wCAAKAmj/AXmA6hppKwF5gsgA9jppSwF5gshyaU4aaUsBeYLJkAQABlADAAP0qSZpbHJphhppfwF5gsoFtAQABgppkwF5gXADAAP01SpppARyaczcQg4gBAAEUmnXAXmJKCAAAwAD9LD9OmoqalgAAwABup2ADwAD8BQEempjAALe8AgACgJqpwF5gOoaatMBeYLIAPRyaw4OavMBeYGpWAQABHJrXHJrKNxCDiAEAARSazMBeYkoIAADAAP0sZAEAARSa2cBeYswJAADAAP0qAMAAt049jZsswF5glhybO4abOcBeYLJkAQABlADAAP0qSZtHHJtPgptLwF5gXICXAQABhZtRwF5glgDAAP00PgI9HptjwAC3DwQABISbfMBeYIOAm4jAXmA6hZuTwF5gloKbn8BeYFwASZupHJuzgZutwF5gT0gBAAGFm7bAXmCWAMAA/Sg+AT0cm9GDm8rAXmBqgKUBAAGAm9jAXmA6AMAAt08+AT0cm/6Dm/fAXmBqgKUDAAOAnAXAXmA6hZwQwF5gloKcHMBeYFwAwAC3Tz9KnC8BKwbAALcPghCcP5xEnesAAcAAbrPAALcHAAAAAQOcXJ3rAAAABAQEnGYAAADAAG6xYAPAAPwFAJx8AAAAn7hdA8AA/KkBYAPAAPwFAJyLAAAAamADwAD8BQCclgAAAIKMYAPAAPwFAABcAT4CSZyfIhycroCco8BeZC6BbQEAAZMAwAD9NQAcnMGAnLbAXmQugWsBAAE3fwDAAP0zSpzKAD9FnNUBnN6c4AAAYmADwAD8BQGCnOLAXmRTARyc64Sc6cBeZKxjAQABg5ztwF5kYADAAP0yAYyc8sBeZKwcnPOEnPLAXmSsZAEAAZQAwAD9KkE+A06dAZ0KAACYNWADwAD8BQEcnRWBnQzAXmQ+SwEAAYSdFsBeZKwAwAD8uEmdHiIcnSuFnSLAXmT8gW0BAAGTAMAA/TUAHJ08hZ0zwF5k/IFrAQABN38AwAD9M0KdRQA/PTCdUx+dXcAA++ADAAMkAAMnwAButCeSPRydtRydo4WdmsBeZPyECQEAATcQAMAA/DOSPwIAApcnhAgAwAD+BoGd0MBeZD6EnePAXmSsAAGCEABeZakAXlNWAF5VPwBeWogAXl/GAAAAAwBeYBQAXmQIAF5lqQAAAAIAAgTAALcxwAButYIRAAACgqgAAMAAvcwAAQEBwAButoLQAADAANOrAAAAAAAQAsAAtzKCEYLrgvqoUwfAAG63AAEAAIPLYAPAAP1RAVsBXQHAAMGaAV8DAAAAAAMEwAC3NIIRgzeDSQbAAG64AGADwAD8BQFqg0hgA8AA/AWDRwTAALc2ghGEF4QeWJgmwAC3MQBdA8AA/KkBXwMAAAAEwAC3N4IRhLyEwxic+8AAtzEAYAPAAPwFAAEFwAC3VoIRhMiEyIUsAAAAA4TYhSwAAAABAQGE4QAAAIKLXQPAAPypAV8DAAAAAF0DwAC3MgFfAwAAAT8DCADAALc2gIUAwF5mqQgAwAC3NxaFJoCFH8BeZqlhwAD82AkBhMjAAMGeAAAAABgGwAC3OoIRhFeEZYSJAQDAAG65wAC3MQAAAAEDhHKEiQAAAAAAAABgA8AA4ugBSoR1ASaEfQAWhHUumCbAALcxwAC3NmADwADi6AbAALc8ghGFMYU5hUoBAGEAAAABA4VAhUoAAAAAAAAAYAPAAPwFAUqFQwEWhUMunPvAALcxwAC3NwbAALdCghGFToVZhcgDAEsAAAABA4VbhcgAAAABAQGFYAAAACdgA8AA/AUAAF8DAAABPgJJhW0chXeAhXHAXmecgW0BAAEWhXouYcAAtzwAwAD9NT0whYIfhYzAAPtbAgACgIWdwF5nnC4AP0qFrwEchb0WhbYumCbAALcxwAC3NksBAAGAhb7AXmecAMAA/LgGwAC3Q4IRhc2F24ZVAwCAvwAAAAEDhd6GVQAAAAICAoXjAAAAJ2ADwAD8BQCF7AAAIICWXwMAAAAAXAE+AkmF+RyGA4CF/cBeaC6BbQEAARaGBi5hwAC3PADAAP01PTCGDh+GGMAA+1sCAAKAhinAXmguLgA/PRyGQhaGOy6YJsAAtzHAALc2gL8CAAKAhkPAXmgugYZMwF5oOwDAAPy5BsAAt1SCEYZahmOIaAIAYQAAAAEDhmmIaAAAAAEBAYZuAAAAl1dgA8AA/AUAAFwBPgJJhn8cho2AhoPAXmjNYwEAARaGjy6c+8AAtzHAALc3AMAA/TI+Ak6GooavAACDJV8DAAABFoaxLsAAbrrAALcxwAC3O0WGxgGGz4bRAABiYAPAAPwFAYCG08BeaM0BHIbggobewF5pKGMBAAEWhuIunPvAALcxwAC3NwDAAP0yAYqG68BeaSgchuyChuvAXmkoZAEAAZQAwAD9Kj4BPRyHARaG+i6YJsAAtzHAALc2gL8CAAKChwLAXmkogYcHwF5pBwDAAPy5SYcoHIc2gIcswF5ozYCXAQABFodAFoc4LpgmwAC3McAAtzZhwAD82ADAAP00PgROh1gAAADAAG67XQPAAPypAV8DAAAASYdpHId8Fod1FodtLpgmwAC3McAAtzZhwAD82EgBAAGTAMAA/Sg+AT2Jh4zAXmnXHIeYLsAAbrzAALcxAQABgIemwF5ozQDAALdNPgE9iYfJwF5p1xyH1S7AAG69wAC3MQEAAYCH6cBeaM0AwAC3Sj0ciA2BiAPAXmnXg14DAAOTFogZLpz7wAC3McAAtzcWiCIumCbAALcxwAC3NgDAAPzOPReIMi6YJsAAtzGBiDzAXmnXwAC3Nj89F4hRLpz7wAC3MYCIW8BeaM3AALc3BsAAt0WCEYhtiHKI1wAAs7PAALcxAAAAAQOIdojXAAAAAQEBiHkAACCAll8DAAAAAFwBPgJJiIYciJIWiIounPvAALcxwAC3N0gBAAEWiJ0WiJUumCbAALcxwAC3NmHAAPzYAMAA/Sg9HIilLsAAQtHAALcxAQABFoirLpz7wAC3McAAtzcAwAC3Sz89HIjAFoi5LpgmwAC3McAAtzaAvwIAAjUAAAABAGADwAD8BQEWiMEunPvAALcxwAC3NzUAAAABAGADwAD8BQEXiMEunPvAALcxHIjIgQDAXmtfZAEAAZQAwAD9KsAAtzeBAMBea1+AiM7AXmrfAMAA/LkGwAC3ToIRiZWJmom8AABWAAAAAQOJnYm8AAAAAQEBiaAAACCAll8DAAAAAFwBPgE9HImtLrOzwAC3MQEAAYCJssBea9gAwAC3RQbAALdPghGLq4uwjKMAAIClAAAAAQOLtoyjAAAAAwEDi8MAACApXQPAAPxnAV8DAAAAi9AAAABqYAPAAPwFAWqL2GADwAD8BQmL3wAAAIKMYAPAAPwFAWoAYAPAAP0OeQBcAT4DPR6L9sAA+0cCAAKBjAfAXmw1J2oASYwcIiEcjCSCjCDAXmxMSAEAASsAwAD9KAAcjDWBjC/AXmw1gJcBAAGCjDfAXmxMAMAA/TQ+AT0wjEQfjE7AAPtPBAAEgoxfwF5sTIGMZMBebDUrJ4KMAD89HIyELsAAbr7AALcxAwADgIyMwF5sI4GMlMBebDWCjJvAXmxMAMAAt0cGwAC3UIIRjpmOnpV+AACf2QAAAAEDjqeVfgAAAAQCBI6sAAAAJ2ADwAD8BQCOvwAAICldA8AA/GcBXwMAAACOzAAAAGpgA8AA/AUBao7UYAPAAPwFCY7bAAAAgoxgA8AA/AUBagBgA8AA/Q55AFwBPhA9Ho7ywAD7RQQABICPAsBebSAuJyccjyAWjxgunPvAALcxwAC3N2QBAAGUAMAA/SoAPR6PNcAA+0cCAAKCj0bAXm0/J2oASY9bIRyPY4OPX8BebVZIAQABKwDAAP0oPgJJj3Qcj36Cj3jAXm0/gJcBAAGDj4DAXm1WAMAA/TQ+AT0wj48fj5nAAPtPBAAEg4+qwF5tVoKPr8BebT8rJ4KMAD9Jj9Icj9yCj9bAXm0/SAEAAYOP38BebVYAwAD9KEqP5AA/P0mRNByRPoCROMBebSBIAQABFpFBLpz7wAC3McAAtzcAwAD9KD4CPRyRUi7AAG6+wAC3MQMAA4GRWsBebS2CkWLAXm0/g5FpwF5tVgDAALdHSpF1AD9JkYgiHJGQg5GMwF5tVkgBAAErAMAA/SgAJZGigZGbwF5tLV0DwAD8qQFbPgE9i5GzwF5tVhaRwIGRucBebS1hwAD8ij9JkdIhHJHag5HWwF5tVkgBAAErAMAA/Sg+Aj0ckesuwABuv8AAtzEEAASAkf7AXm0ggZIFwF5tLYKSDcBebT+DkhTAXm1WAMAAt0hKkiAAP06St5LCAADAAG7AYAPAAPwFARaSxC6c+8AAtzHAALc3TpLVkt8AAJ/OYAPAAPwFAYKS4cBebT9GkuwAkvUAAACAll8DAAAAgZL+wF5tLUE+A0mTDhyTHIWTEsBeb0KAlwEAAZMAwAD9ND4CPY2TK8Beb0IckzSFkyvAXm9CgY0BAAGUAMAA/StCk0AAP0mTWByTZ4STXMBebyJIAQABFpNyFpNqLpgmwAC3McAAtzZhwAD82ADAAP0oPgE9HJOELsAAQtHAALcxAQABhJOKwF5vIgDAALdLPz0ck6wWk6UumCbAALcxwAC3NoC/AgACNQAAAAEAYAPAAPwFAYSTrcBebyI1AAAAAQBgA8AA/AUBjJOtwF5vIhyTt4cAwF5wEWQBAAGUAMAA/SqHAMBecBGGk73AXm9cAMAA/LlJk88ck92Fk9PAXm9CgJcBAAGTAMAA/TQ+AT0wk+ofk/TAAPulAQABJ8AAbsEAP0mUHiIhHJQmg5QiwF5tVkgBAAErAMAA/SgAHJQ8hJQxwF5vImMBAAGDlD7AXm1WAMAA/TI+AT0wlEsflFXAAPtPBAAEg5RmwF5tVoKUa8BebT+ElHLAXm8iJ4KMAD89HpTdwAC3RgMAAxaU5i6YJsAAtzHAALc2gJTvwF5tIBaU9i6c+8AAtzHAALc3AD0elQTAALdGAwADFpUNLpgmwAC3McAAtzYWlRYunPvAALcxwAC3N4SVH8BebyIAPR6VMMAAt0YDAAMWlTkumCbAALcxwAC3NoCVQsBebSCElUnAXm8iAD0XlVounPvAALcxhJVkwF5vIsAAtzdKlXQABsAAt0aCEZWzlb+W3AABwABq/MAAtzEAAAABA5XHltwAAAADAwOVzQAAAIKLXQPAAPypAVsAldkAAABqYAPAAPwFAJXkAAAAgoxgA8AA/AUAAFwBPgI9ipXvwF5xzRyV8oKV78Becc2BjQEAAZQAwAD9K0OWLByWOYGWM8BeccBjAQABgpY7wF5xzQDAAP0yPgZOlkyWUgAAgxlbARyWWoCWVMBecbBLAQABgZZbwF5xwADAAPy4TpZtlnIAAIHoWwEclnqAlnTAXnGwSwEAAYKWe8Becc0AwAD8uD0clo2AlofAXnGwgL8CAAKClo7AXnHNg5aVwF5yHQDAAPy5PRyWqICWosBecbCAvwIAAoGWqcBeccCElrLAXnJCAMAA/Lk9iZa+wF5xwByWw4GWvsBeccBkAQABlADAAP0qPYqWzcBecc0cltCCls3AXnHNgY0BAAGUAMAA/SsGwAC3R4IRl7mXvpolAADAAG6+wAC3MQAAAAEDl8WaJQAAAAMBA5fSAAAgKV0DwAD8ZwFfAwAAAJffAAAAamADwAD8BQFql+dgA8AA/AUJl+4AAACCjGADwAD8BQFqAGADwAD9DnkAXAE+BUmX+iWYBYCX/sBecwtdA8AA/KkBWz0jHJgSgpgOwF5zNEgBAAErAMAA/SiKmA7AXnM0FpgdgJgWwF5zC2HAAPyKKwFgA8AA/AU/SZj0IRyY/IKY+MBeczRIAQABKwDAAP0oPgI9HJkNLsAAbr/AALcxBAAEFpkgLpz7wAC3McAAtzeAmSnAXnMLgZkxwF5zHYKZOMBeczQAwAC3SEqZRAA/TpmMmY4AAGJgA8AA/AUBk0aZl5mxmaAAAACAll8DAAAAgJmpwF5zCz4CSZm5HJm/g5m9wF5z8oFtAQABgZnCwF5zHQDAAP01PRyZyS5WAQABhJnNwF50BgDAALdOPz2LmdvAXnPyHJncg5nbwF5z8mQBAAGUAMAA/SpJmeocmfCDme7AXnPyYwEAAYGZ8sBecx0AwAD9Mj0wmfkfmgPAAPulAQABJ8AAbsEAPwbAALdIghGadpp7nMgAAMAAbr/AALcxAAAAAQOajZzIAAAABAQEmpIAAAAnYAPAAPwFAJqlAAAgKV0DwAD8ZwFfAwAAAJqxAAAAamADwAD8BQCavAAAAIKMYAPAAPwFAABcAT4HSZrHJZrSgZrLwF500F0DwAD8qQFbPgI9Ixya54Oa48BedO9IAQABKwDAAP0oi5rjwF507xaa8oGa68BedNBhwAD8iisBYAPAAPwFSZsAIhybCoKbBMBedOKAlwEAARabE4GbDMBedNBhwAD8igDAAP00ARybIYObHcBedO+AlwEAARabKoGbI8BedNBhwAD8igDAAP00PgE9MJs8H5tGwAD7pQEAASfAAG7BAD8+AUAhHJuMg5uIwF5070gBAAErAMAA/SibiJuTAE6bpZuyAADAAG7CYAPAAPwFARybuIObtMBedO+BjQEAAYKbusBedOIAwAD9K06byZvTAACXV2ADwAD8BQEcm90Wm9UunPvAALcxwAC3N2QBAAGEm9/AXnXNAMAA/So9HJvxLsAAbsPAALcxAQABhZwBwF51+gDAALdJPRycGhacEi6YJsAAtzHAALc2g14EAAQcnDKAnCzAXnTDZAEAAYScNMBedc0AwAD9KhycShacQi6c+8AAtzHAALc3ZAEAAYScTMBedc0AwAD9KhacWi6YJsAAtzHAALc2gJxjwF50wwDAAPzOPRycdxacby6YJsAAtzHAALc2g14EAASAnIDAXnTDHJyNgJyHwF50w2QBAAGEnI/AXnXNAMAA/SqBnJ3AXnTQgpylwF504gDAAPzOPRecsS6c+8AAtzGFnLvAXnX6wAC3NwbAALdRghGczZzSnuUAAJ7VAAAAAQOc2J7lAAAAAgICnN0AAAAnYAPAAPwFAJzmAAAgliZfAwAAAABcAT4ISZz1Ihyc/4Cc+cBedzNjAQABkwDAAP0yARydDICdBsBedzOAlwEAARadDi6c+8AAtzHAALc3AMAA/TQ+AT0wnR8fnSnAAPtPAwADgJ06wF53M5MWnUQunPvAALcxwAC3NwA/SZ1YHJ1kFp1cLpz7wAC3McAAtzdjAQABFp1uFp1mLpgmwAC3McAAtzZhwAD82ADAAP0yPgQ9HJ2GFp1+LpgmwAC3McAAtzaDXgQABBydlYCdj8BedzNkAQABlADAAP0qHJ2iFp2aLpz7wAC3McAAtzdkAQABlADAAP0qFp2nLpgmwAC3McAAtzaAnbDAXnczAMAA/M49HJ3FFp2+LpgmwAC3McAAtzaAvwIAAoCdxsBedzOBnc/AXndAAMAA/Lk9F53eLpz7wAC3MRyd5Rad3i6c+8AAtzHAALc3ZAEAAZQAwAD9KsAAtzdKne8AP06eCZ4TAADAAG67XQPAAPypAV8DAAABHJ4VLsAAbr3AALcxAQABKwDAALdKPRyePoKeNMBeeKODXgMAA5OAnkrAXnczFp5RLpgmwAC3McAAtzYAwAD8zj0cnmmCnl/AXnijg14EAAQcnniAnnLAXnczZAEAAZQAwAD9KhyehRaefS6c+8AAtzHAALc3ZAEAAZQAwAD9Khaeii6YJsAAtzHAALc2gJ6TwF53MwDAAPzOPRyeqIKen8BeeKOAvwIAAoCeqcBedzOBnrLAXndAAMAA/Lk9F56/Lpz7wAC3MRyexhaevy6c+8AAtzHAALc3ZAEAAZQAwAD9KsAAtzc9F57OLpgmwAC3MYKe2MBeeKPAALc2BsAAt0mCEZ9xn3agVQAAwABuw8AAtzEAAAABA5+FoFUAAAABAQGfigAAAMAAbsRgA8AA/AUAAFwBPgRJn6Icn7eAn6bAXnnbgWsBAAEWn8IWn7oumCbAALcxwAC3NmHAAPzYAMAA/TNKn8oAP06f2p/kAADAAG67XQPAAPypAV8DAAABHJ/mLsAAbr3AALcxAQABgJ/6wF552wDAALdKPRygG4GgEcBeeiODXgMAA5MWoCcunPvAALcxwAC3NxagMC6YJsAAtzHAALc2AMAA/M49F6A+LpgmwAC3MYGgSMBeeiPAALc2BsAAt0qCEaFnoW+ipwAAwABuvcAAtzEAAAABA6GCoqcAAAABAQGhhwAAAMAAbsRgA8AA/AUAAF0DwAD8qQFfAwAAAT4DTqGjoa0AAJdXYAPAAPwFARyhvhahtxahry6YJsAAtzHAALc2YcAA/NiDiAEAAZUAwAD9LEmhxyIhHKHcgKHLwF56wkgBAAErAMAA/SgAHKHxgaHnwF564mMBAAGAofPAXnrCAMAA/TI+AT2Jog3AXnrigKIZwF56wkmiNhyiRIGiOsBeeuJjAQABaqJGYAPAAPwFg0cAwAD9Mj4BPYmiXsBeeuJqompgA8AA/AWDRz9KooQBHKKLLsAAbrzAALcxAQABgaKZwF564gDAALdNBsAAt0uCEaMNoxKjbwAAwABC0cAAtzEAAAABA6MXo28AAAABAQGjHAAAAGFgA8AA/AUAAFwBPgE9F6MqLpgmwAC3MTWjNAAAAQBdA8AA/KkBXwMAAAEcozQuwABuvcAAtzEBAAErAMAAt0o1AAAAAQBbARyjT4GjTcBee/SDXgMAA5OAo1vAXnvWFqNjLpgmwAC3McAAtzYAwAD8zoEAwF579MAAtzYGwAC3UoIRo3SjeaQ1AACDXgAAAAEDo4GkNQAAAAQDBKOGAAAAamADwAD8BQCjkQAAAIKMYAPAAPwFAKOiAAAgg0RdA8AA/GcBXwMAAACjrwAAAJ/OYAPAAPwFAWqju2ADwAD8BQkAXAE+AkmjxRyjzYGjycBefISAlwEAARajzy6c+8AAtzHAALc3AMAA/TQ9MKPYH6PiwAD7TwMAA4Gj88BefISTFqP7Lpz7wAC3McAAtzcAPz0cpAkuwABuxcAAtzEEAASApBPAXnx3gaQawF58hIKkH8BefJKDpCfAXnylAMAAt0wGwAC3TIIRpG6kc6VqAADAAG7FwAC3MQAAAAEDpHylagAAAAQEBKSBAAAAamADwAD8BQCkjAAAAIKMYAPAAPwFAKSdAAAgg0RdA8AA/GcBXwMAAACkqQAAAJ/OYAPAAPwFAABcAT4BSaS6JaTFgqS+wF59f10DwAC3MgFfAwAAPgE9HKTtFqTlLpgmwAC3McAAtzaDXgQABICk9sBefWSBpP3AXn1xFqUJFKUCwF59fwIBXQPAALcyAV8DAACYJsAAtzHAALc2g6USwF59kgDAAPzOPgE9HKU5FqUxLpgmwAC3McAAtzaDXgQABIClQsBefWSBpUnAXn1xgqVOwF59f4OlVsBefZIAwAD8zgbAALc9ghGlgKWIpb0BAMAAbsYAAAABA6Wbpb0AAAAAAAAAYAPAAPwFAUqlngEWpasWpZ4uwABuucAAtzHAALc6wABuxsAA4uoGwAC3PoIRpcKlyqYEAQDAAG5rAAAAAQOl2KYEAAAAAAAAAGADwAD8BQFKpdsBHKXjFqXbLpz7wAC3McAAtzeDiAEAARal8hal5S7AAG65wAC3McAAtzrAAG7GwADi6gDAAP0sBsAAtz+CEaYJphGmPAEAqZEAAAABA6YfpjwAAAAAAAAAYAPAAPwFAUqmIgEWpi8WpiIuwABuucAAtzHAALc6qZHAAOLrBsAAt0CCEacrpzqnVwEAgosAAAABA6dBp1cAAAAAAAAAYAPAAOLTAUqnRAEWp1EWp0QuwABuucAAtzHAALc6govAAOLtBsAAtzuCEafrp/Gn/gECwABuusAAtzEAAAABA6f+p/4AAAAAAAAAXwMAAAAGwAC3TYIRqDKoOqhRAALAAG68wAC3MQAAAAEDqEeoUQAAAAEBAahMAAAAmIZgA8AA/AUAAF0DwAD8qQFfAwAAAAAAXmb6AF5nRABeZ30AXmgOAF5orgBearsAXmu5AF5sAwBebQAAXnGKAF5y5QBedJ0AXncTAF55tQBeepwAXnuwAF58VwBefT4AXn5LAF5+lABefvgAXn89AF5/ggBef64AXn/vAAAAGALAALdXghGoVqhlqN8HwABuxwAAAV0BwAC3MgFgA8AA/AUAAAABBcAAt1yCEaiSqJKovgAAAAOonKi+AAAAAQEBqKcAAACCi10DwAD8qQFgA8AA/AUAAGADwAC3VwE/AQkAqLHAALdWAQABgKi3wF6AmQABBsAAt1qCEajDqMuo3QEAwABuusAAtzEAAAABA6jZqN0AAAAAAAAAYAPAAPwFAUqo3AGTAABegMwAXoD/AAAAAQLAALddghGo4qjxqXoHwABuyAAAAV0BwAC3MgFgA8AA+rcAAAABBcAAt2KCEakjqSOpVAAAAAOpL6lUAAAAAQEBqT0AAACCi10DwAD8qQFgA8AA+rcAAGADwAC3XQE/AQkAqUfAALdWAQABgKlNwF6BTQABBsAAt2CCEalZqWSpeAEAwABuusAAtzEAAAABA6lyqXgAAAAAAAAAYAPAAPq3AUqpdQEoAAAAAAAAAAAAAF6BgABegbsAAAABAsAAt2OCEal9qYOqLgPAAG7JAAABYAHAALdXAAAAAQXAALdoghGppqmmqfAAAAADqbGp8AAAAAEAAam3AAAAwABuymADwAD8BQFqqcdgA8AA/AUJAGADwAC3YwE/AQkAqc3AALdcAQABHqnXwADjLAEAAYCp4cBeggIAAAEGwAC3ZoIRqfSp/qosAADAAG68wAC3MQAAAAEDqguqLAAAAAEBAaoQAAAAmIZgA8AA/AUAAGADwADjKAFKqhkBHqodwADjLAEAAYCqJ8BegmsAAABegkUAXoKXAAAAAQLAALdpghGqMao3qt0DwABuywAAAWABwAC3VwAAAAEFwAC3boIRqlmqWaqhAAAAA6pjqqEAAAABAAGqaQAAAMAAbspgA8AA/AUBaqp5YAPAAPwFCQBgA8AAt2kBPwEJAKp/wAC3XAEAAR6qicAA4yMBAAGAqpLAXoLeAAABBsAAt2yCEaqlqq6q2wAAwABuvMAAtzEAAAABA6q7qtsAAAABAQGqwAAAAJiGYAPAAPwFAABgA8AA4x8BSqrJAR6qzcAA4yMBAAGAqtbAXoNHAAAAXoMhAF6DcwAAAAECwAC3b4IRquCq5qu6A8AAbswAAAFgAcAAt1cAAAABBcAAt3SCEasQqxCrbgAAAAOrIqtuAAAAAQABqygAAADAAG7KYAPAAPwFAWqrOGADwAD8BQkAYAPAALdvAT8BCQCrRMAAt1wBAAEeq07AAOM2AQABgKtfwF6DugAAAQbAALdyghGrcquDq7gAAMAAbrzAALcxAAAAAQOrkKu4AAAAAQEBq5UAAACYhmADwAD8BQAAYAPAAOMyAUqrngEeq6LAAOM2AQABgKuzwF6EIwAAAF6D/QBehE8AAAABAsAAt3WCEau9q8OscwPAAG7NAAABYAHAALdXAAAAAQXAALd6ghGr56vnrDMAAAADq/OsMwAAAAEAAav5AAAAwABuymADwAD8BQFqrAlgA8AA/AUJAGADwAC3dQE/AQkArA/AALdcAQABHqwZwADjSAEAAYCsJMBehJYAAAEGwAC3eIIRrDesQqxxAADAAG68wAC3MQAAAAEDrE+scQAAAAEBAaxUAAAAmIZgA8AA/AUAAGADwADjRAFKrF0BHqxhwADjSAEAAYCsbMBehP8AAABehNkAXoUrAAAAAQLAALd7ghGsdqx8rScDwABuzgAAAWABwAC3VwAAAAEFwAC3gIIRrJ+sn6zpAAAAA6yqrOkAAAABAAGssAAAAMAAbspgA8AA/AUBaqzAYAPAAPwFCQBgA8AAt3sBPwEJAKzGwAC3XAEAAR6s0MAA4z8BAAGArNrAXoVyAAABBsAAt36CEaztrPetJQAAwABuvMAAtzEAAAABA60ErSUAAAABAQGtCQAAAJiGYAPAAPwFAABgA8AA4zsBSq0SAR6tFsAA4z8BAAGArSDAXoXbAAAAXoW1AF6GBwAAAAECwAC3gYIRrSqtMK3gA8AAbs8AAAFgAcAAt1cAAAABBcAAt4aCEa1UrVStoAAAAAOtYK2gAAAAAQABrWYAAADAAG7KYAPAAPwFAWqtdmADwAD8BQkAYAPAALeBAT8BCQCtfMAAt1wBAAEerYbAAONaAQABgK2RwF6GTgAAAQbAALeEghGtpK2vrd4AAMAAbrzAALcxAAAAAQOtvK3eAAAAAQEBrcEAAACYhmADwAD8BQAAYAPAAONWAUqtygEerc7AAONaAQABgK3ZwF6GtwAAAF6GkQBehuMAAAABAsAAt4eCEa3jremulAPAAG7QAAABYAHAALdXAAAAAQXAALeMghGuDK4MrlYAAAADrheuVgAAAAEAAa4dAAAAwABuymADwAD8BQFqri1gA8AA/AUJAGADwAC3hwE/AQkArjPAALdcAQABHq49wADjUQEAAYCuR8BehyoAAAEGwAC3ioIRrlquZK6SAADAAG68wAC3MQAAAAEDrnGukgAAAAEBAa52AAAAmIZgA8AA/AUAAGADwADjTQFKrn8BHq6DwADjUQEAAYCujcBeh5MAAABeh20AXoe/AAAAAQLAALeNghGul66dr00DwABu0QAAAWABwAC3VwAAAAEFwAC3koIRrsGuwa8NAAAAA67Nrw0AAAABAAGu0wAAAMAAbspgA8AA/AUBaq7jYAPAAPwFCQBgA8AAt40BPwEJAK7pwAC3XAEAAR6u88AA42wBAAGArv7AXogGAAABBsAAt5CCEa8RrxyvSwAAwABuvMAAtzEAAAABA68pr0sAAAABAQGvLgAAAJiGYAPAAPwFAABgA8AA42gBSq83AR6vO8AA42wBAAGAr0bAXohvAAAAXohJAF6ImwAAAAECwAC3k4IRr1CvVrABA8AAbtIAAAFgAcAAt1cAAAABBcAAt5iCEa95r3mvwwAAAAOvhK/DAAAAAQABr4oAAADAAG7KYAPAAPwFAWqvmmADwAD8BQkAYAPAALeTAT8BCQCvoMAAt1wBAAEer6rAAONjAQABgK+0wF6I4gAAAQbAALeWghGvx6/Rr/8AAMAAbrzAALcxAAAAAQOv3q//AAAAAQEBr+MAAACYhmADwAD8BQAAYAPAAONfAUqv7AEer/DAAONjAQABgK/6wF6JSwAAAF6JJQBeiXcAAAABAsAAt5mCEbAEsAqwxwPAAG7TAAABYAHAALddAAAAAQXAALeeghGwMbAxsIUAAAADsD6whQAAAAEAAbBEAAAAwABuymADwAD8BQFqsFRgA8AA/AUJAGADwAC3mQE/AQkAsGDAALdiAQABHrBqwADjdQEAAYCwdsBeib4AAAEGwAC3nIIRsImwlbDFAADAAG68wAC3MQAAAAEDsKKwxQAAAAEBAbCnAAAAmIZgA8AA/AUAAGADwADjcQFKsLABHrC0wADjdQEAAYCwwMBeiicAAABeigEAXopTAAAAAQLAALefghGwyrDQsY0DwABu1AAAAWABwAC3XQAAAAEFwAC3pIIRsPew97FLAAAAA7EEsUsAAAABAAGxCgAAAMAAbspgA8AA/AUBarEaYAPAAPwFCQBgA8AAt58BPwEJALEmwAC3YgEAAR6xMMAA434BAAGAsTzAXoqaAAABBsAAt6KCEbFPsVuxiwAAwABuvMAAtzEAAAABA7FosYsAAAABAQGxbQAAAJiGYAPAAPwFAABgA8AA43oBSrF2AR6xesAA434BAAGAsYbAXosDAAAAXordAF6LLwAAAAECwAC3pYIRsZCxlrK4A8AAbtUAAAFdAcAAtzIBYAPAAOTJAAABBMAAt6iCEbHZsfgEwABrIMAAtzEAYAPAAOTJAR6x5cAA5cwEAASTk5OTAAEFwAC3sIIRsfyx/LJQAAAAA7IJslAAAAABAAGyDwAAAMAAbspgA8AA/AUBarIfYAPAAPwFCQBgA8AAt6UBPwEJALIrwAC3VgEAAR6yNcAA45EBAAGAskHAXouoAAACBsAAt6uCEbJUsmCydgEAwABuusAAtzEAAAABA7JusnYAAAAAAAAAYAPAAOTJAUqycQEasnHAALeoBsAAt66CEbJ6soaytgAAwABuvMAAtzEAAAABA7KTsrYAAAABAQGymAAAAJiGYAPAAPwFAABgA8AA440BSrKhAR6ypcAA45EBAAGAsrHAXoxKAAAAXovrAF6MJABejHYAAAACAsAAt7GCEbK7ssGzzgPAAG7WAAABXQHAALcyAWADwADjoQAAAAEFwAC3uYIRsvmy+bNRAAAAA7MIs1EAAAABAAGzDgAAAMAAbspgA8AA/AUBarMeYAPAAPwFCQBgA8AAt7EBPwEJALMqwAC3VgEAAR6zNMAA44cBAAGAs0LAXozIAAACBsAAt7SCEbNVs2OziAEAwABuusAAtzEAAAABA7Nxs4gAAAAAAAAAYAPAAOOhAUqzdAEes3jAAOSmAAAAAAbAALe3ghGzjLOas8wAAMAAbrzAALcxAAAAAQOzp7PMAAAAAQEBs6wAAACYhmADwAD8BQAAYAPAAOODAUqztQEes7nAAOOHAQABgLPHwF6NbgAAAF6NCwBejUgAXo2aAAAAAgAAAYIRAF6NrQBeZgIAXoBYAF6BDABegcgAXoKkAF6DgABehFwAXoU4AF6GFABehvAAXofMAF6IqABeiYQAXopgAF6LPABejIcAXo2rAAAAEABeja0AAAAAAAIEwAC3usAAbteCEgAAAYDyAACmlAAAAAAAAAABBsAAt7yCEoHegeKGVwABwABu2AAAAAEDgfKGVwAAAAICAoH9AAAAn7hdA8AA/KkBYAPAAPwFAIIMAAAAJ2ADwAD8BQAAYAPAAPwFAT4EToPHg9AAAJg1YAPAAPwFARyD24CD0sBejkRLAQABgYPcwF6OWQDAAPy4ToPqg/AAAK0EYAPAAPwFARyD9WqD8mADwAD8BbYUg7sBAAGCg/fAXo5xAMAA/B9JhAMchA2DhAfAXo6bgWsBAAE3CQDAAP0zPgFJhBkchCODhB3AXo6bgW0BAAGTAMAA/TVKhCkBg4QwwF6Omz8+Ak6FXIVjAADAAEmUYAPAAPwFARyFajcggQYBAAGChWzAXo5xAMAA/B5JhXoiHIWBaoV+YAPAAPwFwACaFYFrAQABhIWEwF6PCwDAAP0zAByFlYSFjsBejwuBawEAAWqFmGADwAD8BcAAmiQAwAD9M0qFnAEcha8chaqEhaPAXo8LgY0BAAFqhaxgA8AA/AXAAJoVAMAA/StkAQABNwoAwAD9Kj89MIW8H4XGwAD74AMAAyQABCfAAG7ZJ5I9HIYkHIYSgoYJwF6OcYQJAQABNxAAwAD8M5I/AgAClyeECADAAP4GJ4FqgIY+wF6ORIGGT8BejlkAAYISAF6P/wBejiAAAAAAAF6OIgBej/8AAAABAAIEwAC3vcAAbtqCEwAAA4HpAADAAMrqAAEBAsAAbtudTo8QAADAAL3MAAEBAsAARpqWS49FAADAAMrqAAEBB8AAbtzAAG7dwABu3sAAbt/AAG7gwABu4cAAbuIADQDAAG7jAMAAbuQAwABu5QDAAG7mAMAAbucAwABu6ADAAG7pAMAAbuoAwABu6wDAAG7sAMAAbu0AwABu7gDAAG7vKMAAt7+CE4IGwABu8AAAXgMAAQEBYQMAXAABVwPAALe/AFwAAYIlAAAAmcFhAwBcAADAALfAghOFVcAAbvEAAF4DAAMDA2ADwAD8BWEDAWADwAC8vlxgA8AA+j8AAVcDwAC3wABgA8AAvL4AA4VzAAAAlpNgA8AA/AUAhYYAAACZwWEDAWADwAC8vlwAhaIAAADAAG7yYAPAAPo/AADAALfBghSBTcAAbvMAAgAAlk1gA8AA/VEBWwAAgnZgA8AA/VEBW14DAAEBAV8DAAAAAVcDwAC3wQJfAwAAXwMBAF0DwAC42gFfAwEAAAGBZAAAAICWXwMAAAAAwAC3woIUgb3AAG70AABeAwABAQFgA8AA/VEAAVcDwAC3wgBgA8AA+j8AAYHVAAAAgcVgA8AA/VEAAMAAt8OCFIIKwABu9QAAXgMAAAAAAAFXA8AAt8MAWwAAAMAAt8SCFYD8wABu9gAAXgMAAAAAAAFXA8AAt8QAXAAAAMAAt8WCFoGgwABu9wAAXgMAAAAAAAFXA8AAt8UAXAAAAMAAt8aCF4IewABu+AAAXgMAAAAAAAFXA8AAt8YAXAAAAMAAt8eCF4KxwABu+QAAXgMAAAAAAAFXA8AAt8cAWwAAAMAAt8iCF8AAcALAAG76AABeAwAAAAAAAVcDwAC3yABbAAAAwAC3yYIYuuHAAG77AAEAAIJ2YAPAAP1RAVteAwAAAAAAAVcDwAC3yQFfAwAAXQPAALtbAV8DAAAAAADAALfKghjAAEQDwABu/AABAACCdmADwAD9UQFbXgMAAQEBXwMAAAABVwPAALfKAV8DAABcAAHAAEQVAAAAgJZfAwAAAADAALfLghjAAEQqwABu/QAAXgMAAAAAAAFXA8AAt8sAXAAAAMAAt8yCGMAAVSLAAG7+AAEAAIJ2YAPAAP1RAVteAwABAQFdA8AAucYBXwMAAAABVwPAALfMAV8DAABcAAHAAFVOAAAAgfhdA8AAucYBXwMAAAAAwAC3zYIZhlDAAG7/AABeAwACAgJbYAPAAP2/AAFXA8AAt80AXAAChl8AAACBxVsAhnEAAACGRWADwAD9vwAAwAC3zoIZlaTAAG8AAAEAAIJ2YAPAAP1RAVteAwABAQFfAwAAAAFXA8AAt84BXwMAAGADwAD6PwABlbQAAACAll8DAAAAAMAAt8+CGZjHwABvAQACAACWTWADwAD9UQFbAACCdmADwAD9UQFbXgMAAQEBXwMAAAABVwPAALfPAl8DAABfAwEAXwMBAAABmN8AAACAll8DAAAAAMAAt9CCGZ2DwABvAgAAXgMAAQEBWwABVwPAALfQAGADwAD6PwABnY4AAACBxVsAAMAAt9GCGbLOwABvAwABAACCdmADwAD9UQFbXgMAAgICXwMAAF8DAAAAAVcDwAC30QFfAwAAYAPAAPo/AAKy3QAAAIHVXwMAAACy4gAAAIJKXwMAAAAAwAC30oIajvvAAG8EAAIAAJZNYAPAAP1RAVsAAIJ2YAPAAP1RAVteAwABAQFdA8AAudMBXwMBAAABVwPAALfSAl8DAABfAwEAXQPAALnTAV8DAAAAAY8aAAAAgZNdA8AAudMBXwMBAAAAwAC304IalJzAAG8FAAIAAJZNYAPAAP1RAVsAAIJ2YAPAAP1RAVteAwACAgJfAwAAXQPAALnTAV8DAQAAAVcDwAC30wJfAwAAXwMBAFwAApS6AAAAEl8DAAAAlM0AAACEO10DwAC50wFfAwEAAADAALfUghqVIsAAbwYAAQAAgnZgA8AA/VEBW14DAAMDA2ADwAD9UWADwAD9v10DwAC50wFfAwAAAAFXA8AAt9QBXwMAAFwAA5VIAAAAgcVgA8AA/VEAlVoAAACGRWADwAD9vwCVcwAAAIQ7XQPAALnTAV8DAAAAAMAAt9WCGpXHwABvBwABAACCdmADwAD9UQFbXgMAAQEBXQPAALnTAV8DAAAAAVcDwAC31QFfAwAAXAABle0AAACEO10DwAC50wFfAwAAAADAALfWghqfYcAAbwgAAgAAlk1gA8AA/VEBWwAAgnZgA8AA/VEBW14DAAICAl0DwAC5jQFfAwAAYAPAAPo/AAFXA8AAt9YCXwMAAF8DAQBdA8AAucYBXwMBAAACn48AAACB9V0DwAC5jQFfAwAAAJ+cAAAAwABvCWADwAD6PwAAwAC314IbgPnAAG8KAAEAAJb5YAPAAP1RAVteAwAAAAAAAVcDwAC31wFfAwAAXwMAAAAAAMAAt9iCG4EWwABvCwACAACW+WADwAD9UQFbAACCdmADwAD9UQFbXgMAAQEBXwMBAAABVwPAALfYAl8DAABfAwEAXwMAAAABgTAAAACFdl8DAQAAAMAAt9mCG4FAwABvDAADAACW+WADwAD9UQFbAACkdmADwAD9UQFbAACkd2ADwAD9UQFbXgMAAgICXwMBAF8DAgAAAVcDwAC32QNfAwAAXwMBAF8DAgBfAwAAAAKBYQAAAMAAQytfAwEAAIFqAAAAwABDLF8DAgAAAMAAt9qCG4F6wABvDQAAXgMABQUFYAPAAL0WYAPAAL0FYAPAAL0WYAPAAP1RYAPAAP2/AAFXA8AAt9oAXAAFgaoAAACZgGADwAC9FgCBwQAAAIRSYAPAAL0FAIHOAAAApHVgA8AAvRYAgdsAAACBxWADwAD9UQCB7QAAAIZFYAPAAP2/AADAALfbghuCAsAAbw4AAF4DAQAAlvlgA8AA/VEBWwQEBGADwAC9FmADwAC9BWADwAC9FmEDAF8DAAAAAVcDwAC32wBfAwAAAQAAlvlgA8AA/VEBWwSCJwAAAJmAYAPAAL0WAII6AAAAhFJgA8AAvQUAgkcAAACkdWADwAC9FgCCWgAAAIGmYQMAXwMAAAAAwAC33IIbgmbAAG8PAABeAwIAAJb5YAPAAP1RAVsAAIJ2YAPAAP1RAVsFBQVgA8AAvRZgA8AAvQVgA8AAvRZhAwFfAwEAXwMAAF8DAQAAAVcDwAC33ABfAwAAAgAAlvlgA8AA/VEBWwAAgnZgA8AA/VEBWwWCkwAAAJmAYAPAAL0WAIKmAAAAhFJgA8AAvQUAgrMAAACkdWADwAC9FgCCywAAAIGmYQMBXwMBAF8DAAAAgtAAAACFdl8DAQAAAMAAt92CG4LewABvEAAAXgMDAACW+WADwAD9UQFbAACkdmADwAD9UQFbAACkd2ADwAD9UQFbBgYGYAPAAL0WYAPAAL0FYAPAAL0WYQMCXwMBAF8DAgBfAwAAXwMBAF8DAgAAAVcDwAC33QBfAwAAAwAAlvlgA8AA/VEBWwAApHZgA8AA/VEBWwAApHdgA8AA/VEBWwaDDAAAAJmAYAPAAL0WAIMfAAAAhFJgA8AAvQUAgzAAAACkdWADwAC9FgCDUwAAAIGmYQMCXwMBAF8DAgBfAwAAAINZAAAAwABDK18DAQAAg2IAAADAAEMsXwMCAAAAwAC33oIbg3HAAG8RAABeAwEAAJb5YAPAAP1RAVsEBARgA8AAvRZgA8AAvQVgA8AAvRZhAwBfAwAAAAFXA8AAt94AXgMAAAAAAAFXA8AAt9cBXwMAAF8DAAABAACW+WADwAD9UQFbBIOxAAAAmYBgA8AAvRYAg8QAAACEUmADwAC9BQCD0QAAAKR1YAPAAL0WAIPkAAAAgaZhAwBfAwAAAADAALffghuD8MAAbxIAAF4DAgAAlvlgA8AA/VEBWwAAgnZgA8AA/VEBWwQEBGADwAC9FmADwAC9BWADwAC9FmEDAV8DAQBfAwAAAAFXA8AAt98AXgMAAQEBXwMBAAABVwPAALfYAl8DAABfAwEAXwMAAAIAAJb5YAPAAP1RAVsAAIJ2YAPAAP1RAVsEhEAAAACZgGADwAC9FgCEUwAAAIRSYAPAAL0FAIRgAAAApHVgA8AAvRYAhHgAAACBpmEDAV8DAQBfAwAAAADAALfgghuEhMAAbxMAAF4DAwAAlvlgA8AA/VEBWwAApHZgA8AA/VEBWwAApHdgA8AA/VEBWwQEBGADwAC9FmADwAC9BWADwAC9FmEDAl8DAQBfAwIAXwMAAAABVwPAALfgAF4DAAICAl8DAQBfAwIAAAFXA8AAt9kDXwMAAF8DAQBfAwIAXwMAAAMAAJb5YAPAAP1RAVsAAKR2YAPAAP1RAVsAAKR3YAPAAP1RAVsEhN8AAACZgGADwAC9FgCE+gAAAIRSYAPAAL0FAIUHAAAApHVgA8AAvRYAhSoAAACBpmEDAl8DAQBfAwIAXwMAAAAAwAC34YIbhUHAAG8UAABeAwAFBQVgA8AAvRZgA8AAvQVgA8AAvRZgA8AA/VFgA8AA/b8AAVcDwAC34QBgA8AAvMsABYVbAAAAmYBgA8AAvRYAhW4AAACEUmADwAC9BQCFfwAAAKR1YAPAAL0WAIWMAAAAgcVgA8AA/VEAhZ4AAACGRWADwAD9vwAAwAC34oIbhbjAAG8VAABeAwAEBARgA8AAvRZgA8AAvQVgA8AAvRZhAwBcAAFXA8AAt+IAXAAEhdsAAACZgGADwAC9FgCF7gAAAIRSYAPAAL0FAIX7AAAApHVgA8AAvRYAhgYAAACBpmEDAFwAAMAAt+OCG4YawABvFgAAXgMABQUFYAPAAL0WYAPAAL0FYAPAAL0WYAPAAPrbYQMAXAABVwPAALfjAGADwAC8vgAFhjcAAACZgGADwAC9FgCGSgAAAIRSYAPAAL0FAIZXAAAApHVgA8AAvRYAhmYAAACBs2ADwAD62wCGdQAAAIGmYQMAXAAAwAC35IIbhonAAG8XAABeAwAFBQVgA8AAvRZgA8AAvQVgA8AAvRZgA8AA+tthAwFgA8AAvL5cAAFXA8AAt+QAYAPAALy+AAWGqQAAAJmAYAPAAL0WAIa8AAAAhFJgA8AAvQUAhs0AAACkdWADwAC9FgCG3AAAAKD/YAPAAPrbAIbpAAAAgaZhAwFgA8AAvL5cAADAALflghuHB8AAbxgAAF4DAAQEBGADwAC9FmADwAC9BWADwAC9FmADwAD96wABVwPAALflAFwABIceAAAAmYBgA8AAvRYAhzEAAACEUmADwAC9BQCHPgAAAKR1YAPAAL0WAIdLAAAAgfpgA8AA/esAAMAAt+aCG4dfwABvGQAAXgMABQUFYAPAAL0WYAPAAL0FYAPAAL0WYAPAALzfXQPAAPzaAltbAAFXA8AAt+YAYAPAAL0WAAWHcAAAAJmAYAPAAL0WAIeDAAAAhFJgA8AAvQUAh5AAAACkdWADwAC9FgCHrAAAAMAAbxpgA8AAvN8Ah78AAACIqF0DwAD82gJbWwAAYALAALgkghyDF4MdhjkDnCoAAQAAgnZgA8AA/VEBWwFgAcAA/VEAAV0BwAC4/gFfAwAAAgTAALgnghyDV4N7ScAAbxvAALe9AF0DwAC4/gFfAwAAAR6DaMAAuQEAAV8DAAAAAATAALgoghyDhIOKGMAAbxwAYAPAAPo/AAEFwAC4MYIcg4+Dj4O2AAAAA4Ojg7YAAAAAAAAAXQPAALgkAV8DAAABPwIIAMAAuCgqCQGDj8AA/WcAAAAABQbAALgqghyDu4PAhOMAAMAAbx0AAAABA4PIhOMAAAABAAGD1gAAIICWXQPAALjaAV8DAAABagBgA8AA/Q55AFwBPgFJg+QWg+guwABvHMAAuCg+AT0chAMWg/guwABvG8AAt73AALgnwABvHQEAAYCEDMBeoTIAwAC5BkmEHyWEKYCEI8BeoTJdA8AAuN4BXwMAAD4BPRyERRSEP8BeoTIAAV0DwAC43gFfAwAAga0CAVwBFoRVFoRKLsAAbxvAALe9wAC4J8AAbx3AALkGAYHrFoRzFoRoLsAAbxvAALe9wAC4J4HbwAC5B8AAuPE+AT0ehJbAALgiAQABNISoA4SohNgAAAAAAAAAYAPAAP0OAT4BPRyEwBaEtS7AAG8bwAC3vcAAuCfAAG8dAQABgITJwF6hMgDAALkGAAbAALgrghyE6ITthaQAAIHbAAAAAQOE+oWkAAAAAgEChPsAAACDTWADwAD9UQCE/wAAAKPxYAPAAP2/AWoAYAPAAP0OeQBcAT4BSYUKFoUOLsAAbxzAALgoPgE9HIUpFoUeLsAAbxvAALe9wAC4J4HbAgACgIU3wF6ia4GFOsBeonkAwAC5Bz4BPR6FUsAAuCIBAAE0hWQDhWSFmQAAAAAAAABgA8AA/Q4BPgE9HIV8FoVxLsAAbxvAALe9wAC4J4HbAgACgIWKwF6ia4GFjcBeonkAwAC5BwAGwAC4LIIchamFroXXAABqAAAAAQOFs4XXAAAAAQEBhbQAAACBplsAAFwBPgI9HIW+gIW9wF6jQyAAAAAAAD0XhcYuwABvHCnAALgoBsAAuC6CHIXcheqGBQEAgdwAAAABA4XxhgUAAAAAAAAAXQPAALjeAV8DAAABSoX0ARaF/xaF9C7AAG8bwAC3vcAAuCeB3MAAuQMGwAC4L4IchgmGEoY3AQDAAG8eAAAAAQOGHoY3AAAAAAAAAGADwAD6PwFKhiEBFoYsFoYhLsAAbxvAALe9wAC4J8AAbx7AALkEAABeoRAAXqJLAF6jJABeo3AAXqO6AF6kAwAAAAUCwAC4MoIck2yTjKO0A5wUAWqTbWADwAD6BsABfjsBAACCdmADwAD9UQFbAWABwAD9UQAABwTAALg0ghyTwpPMWMAAXmUAXQPAALoVAV8DAAABKwTAALg1ghyT2ZPmGMAAUqEAYAPAAPv7AATAALg2ghyT75P/GMAAbyAAYAPAAPo/ASoEwAC4N4IclAiUIBjAAG8hAGADwAD6PwEqBMAAuDiCHJQplDwYwABvIgBgA8AA+j8BKgTAALg5ghyURZRfGMAAbyMAYAPAAPo/ASoEwAC4OoIclG2UiRjAAG8kAF0DwAC4/gFbASsBBcAAuEiCHKB9oH2hOwAAAAOgl6E7AAAAAQEBoJ0AAATAAFKhYAPAAPv7AABdA8AAuDIBXwMAAAE+AT0XoLIuwABeZR6gw8AAuiEDAV8DAAAAA8AAbyUWoOwuwABvJcAAuETAAG8mFqENLsAAbybAALhFwABvJxahLi7AAG8nwAC4RsAAuDQCCAHAALg1gADAXqUmCQGgfcAA/WcAAAAACgbAALg8ghyUjpSclTkBAIH1AAAAAQOUo5U5AAAAAAAAAF0DwAC5jQFfAwAAAT4DTpS5lL8AAZ7OXQPAALmNAV8DAAABFpTMFpTBLsAAXmXAALg0gfXAALoXSZTYJZTigJTcwF6l210DwAC7GwFfAwAAPgE9F5UDFJT9wF6l2wABXQPAALsbAV8DAADAAG8owAC3vRaVEC7AAFKhwAC4NcAAux8/SpUpAYCVMMBepdsGwAC4PoIclT6VQ5WfAADAAG8pAAAAAQOVSpWfAAAAAAAAAFwBPgM9F5VTLsAAbyIqwAC4OD0XlWwuwABvIyrAALg5PRyVjC7AAFKhAAAAAMAAuDUGwAC4P4IclaSVqZZHAADAAG8qAAAAAQOVupZHAAAAAAAAAFwBPgNJlcMiIhaVxy7AAG8iwAC4OAEWleEWldYuwABeZcAAuDTAAG8rwAC6HgEWle0uwABvIMAAuDY+AUqV/wA/PReWES7AAG8iKcAAuDg9HpYpwAC4IgEAARaWOy7AAG8pwAC4PgAGwAC4QIIcmAaYC5mGAABWAAAAAQOYDpmGAAAAAQEBmBEAACCbul8DAAAAAGADwAD6PwE+B0mYHiEWmCMuwABvIcAAuDc9Hpg1wAC38QEAASfAAG8sAD9JmGcWmGsuwABvI8AAuDk9Hph/wAC38QEAASfAAG8tAD9JmOchFpj3FpjsLsAAXmXAALg0wABvLsAAuh8+AUqZDAEpPz0cmS4WmSMuwABeZcAAuDRWAQABgJkywF6nVwDAALopPRyZPi7AAG8qAAAAAMAAuD89F5lXLsAAbyMpwAC4OUqZdgEqBsAAuEGCHJqOmpOccgAAnBgAAAABA5qcnHIAAAABAQGapwAAIIH1XQPAALmNAV8DAAAAAGADwAD6PwE+BkmatSEWmrouwABvIcAAuDc9HprMwAC38QEAASfAAG8sAD9Jm0YhFptWFptLLsAAXmXAALg0wABvLsAAuh9Km2MBKT89F5t0LsAAbyApwAC4Nk6bjZucAADAAG8vXQPAALjeAVsBHJupFpueLsAAXmXAALg0nBgCAAGAm7PAXqg3AcAAbwkqwAC6LD0cm+WBm9bAXqimga0BAVsBNJvqA5vqnFsAAAABAQGb6wAAAIC1WwAAYAPAAP0OAT4DPReb9i7AAG8gKsAAuDY9HJwOLsAAbyoAAAAAwAC4P0mcKSEWnC4uwABvIsAAuDg9F5w7LsAAbyMpwAC4OT8AwAC48UqcYgEqBsAAuEKCHJx3nHyfawAAnBYAAAABA5yEn2sAAAACAgKcjAAAAIHFYAPAAP1RAJyeAAAAhkVgA8AA/b8AAFwBPgNJnLAiIRycyxactS7AAG8kwAC4OkgBAAErAMAA/V4AIRac7hac2C7AAG8kwAC4OsAAbx7AALkEPgI9HJ1+Fp1oLsAAbyTAALg6gdsCAAKAnYzAXql4gZ2TwF6phgDAALkHSp2mAD9JngAhFp4QFp4FLsAAXmXAALg0wABvLsAAuh9Knh0APz0cnjQWnikuwABeZcAAuDScFgIAAoCePcBeqXiBnkTAXqmGAMAAuioGwAC4Q4Icn3CfcKB4AACCiAAAAAEDn3WgeAAAAAAAAABbAT4CSZ9+IiEcn5kWn4MuwABvJMAAuDpIAQABKwDAAP1eACEWn7wWn6YuwABvJMAAuDrAAG8ewAC5BD4BPRygTBagNi7AAG8kwAC4OsAAbx0AAAAAwAC5Bj89HKBtFqBiLsAAXmXAALg0gogAAAAAwAC6KwbAALhEghyhQKFAoaQAAMAAbyUAAAABA6FIoaQAAAAAAAAAWwE+A0AhFqFZLsAAbyHAALg3oVihaQA9F6FwLsAAbyEpwAC4Nz0coY0uwABvKgAAAADAALg/BsAAuEWCHKGpoamh9wAAwABvJgAAAAEDobGh9wAAAAAAAABbAT4BSaG6FqG+LsAAbyPAALg5PgE9HKHaLsAAbyoAAAAAwAC4Pz8GwAC4RoIcofyh/KOyAADAAG8nAAAAAQOiBKOyAAAAAAAAAFsBPgNJog0WohwWohEuwABeZcAAuDS5GsAAuh0+AUqiLgErP0miRRyiXxaiSS7AAG8kwAC4OkgBAAErAMAA/V4+Aj0XonAuwABvJB6ijMAAuQAAAVsAAMAAuDpJo0IWo0YuwABvI8AAuDk+AT0co2QuwABvKgAAAADAALg/Pz9Ko4sBFqOoFqOSLsAAbyTAALg6gdzAALkDAABepasAXqZaAF6mrgBepzgAXqgXAF6pWABeqkcAXqrcAF6rNQBeq38AXqw6AAAACgLAALhJgh2CM4I5gnsDwABvMAAAAWABwAD9UQAAAQTAALhMgh2CcYJ5BMAAUorAALe9AF4DAAEBAWEDAFwAAVcDwAC3vwBcASsBBcAAuE4AAAAABAAAAwAAAAAAAAAAAGADwAC4SQE/AQkBAMAA/WcAAAAAAAAAXqzgAAAAAALAALhPgh6Fr4W1he0DwABvMQAAAWABwAD9UQAAAQTAALhSgh6F44XrBMAAbzLAALe9AF4DAAMDA2ADwAD8BWEDAWADwAC8vlxgA8AA+j8AAVcDwAC3wABgA8AAvL4BKwEFwAC4VAAAAAAEAAADAAAAAAAAAAAAYAPAALhPAT8BCQEAwAD9ZwAAAAAAAABerXUAAAAAAsAAuFWCH4DvgPWBoQPAAG8zAAEAAIJ2YAPAAP1RAVsBXQHAALqdAV8DAAAAAAABBcAAuFmCH4EqgSqBfgAAAAOBOoF+AAAAAQEBgVkAAADAAF5lXQPAALo0AV8DAAAAAF0DwAC4VQFfAwAAAT8BCQCBbcAAuqgBAAGAgXPAXq3JAAEGwAC4V4IfgYOBjIGfAQDAAG80AAAAAQOBmIGfAAAAAAAAAGADwAD6PwFKgZsBKQAAXq4BAF6uMAAAAAECwAC4WoIfgaSBqoeYA8AAbzUAAQAAgnZgA8AA/VEBWwFdAcAAuqkBXwMAAAAABgTAALhdgh+B/IIPBsAAbzbAALe9AGADwAD8BQFqgg5gA8AA/AUVBMAAuF6CH4IkgjUGwABvN8AAt70AYAPAAPwFAWqCNGADwAD8BSEEwAC4X4IfgkqCaAbAAG84wAC3vQBgA8AA/AUBaoJnYAPAAPwFgVcEwAC4YIIfg0aDVRjAAG85wAC3vQBgA8AA/AUBkwTAALhhgh+Do4OoWMAAbzrAALe9AF0DwAC4WgFfAwAAASsEwAC4YoIfg8aDz1jAAG87wAC3vQBdA8AAuFoBXwMAAAErAQXAALhvgh+D1IPUhMkAAAADg+qEyQAAAAUFBYQJAAAAwABeZV0DwAC6NAFfAwAAAIQgAAAAwABvPGEDAV8DAABcAIQ5AAAAgetgA8AA+/sAhEcAAACDiWEDAFwAhFYAAADAAG8JYAPAAPo/AABdA8AAuFoBXwMAAAE+AT0XhK0uwABvOsAAt70XhLUuwABvO8AAt70uwAC4YsAAuGEBCQCEbcAAurMFAAWAhHPAXq9cgYR/wF6vcYKEh8Ber4ODhJDAXq+RhISYwF6vnQAHBsAAuGWCH4TOhNOFGwAAwABvPcAAt70AAAABA4TghRsAAAABAQGE5QAAAMAAbz5gA8AA/AUAAGADwAD6PwFKhPEBHIURHIT+FoTyLsAAbznAALe9wAC4YIN3AQABaoUAYAPAAPwFFQDAAPwdSAEAAYCFFMBesDUAwAD9KAbAALhmgh+FIIUlhV4AAMAAbz/AALe9AAAAAQOFM4VeAAAAAAAAAFwBPgE9F4U8LsAAbznAALe9HIVIFoU8LsAAbznAALe9wAC4YIO7AQABaoVLYAPAAPwFFQDAAPwfwAC4YAbAALhsgh+FY4VshZsBAMAAb0DAALe9AAAAAQOFdoWbAAAAAAAAAGADwAD6PwFKhXkBIRyFlxyFhhaFei7AAG85wAC3vcAAuGCDdwEAAWqFiGADwAD8BSEAwAD8HUgBAAGTAMAA/SgGwAC4Z4IfhaCFpYYHAADAAG9BwAC3vQAAAAEDhbqGBwAAAAAAAABcAT4CQBaFyi7AAG9AwAC3vcAAuGyFyoXTAD0XhdouwABvOcAAt70cheYWhdouwABvOcAAt73AALhggQYBAAFqhelgA8AA/AWBVwDAAPwewAC4YAbAALhtgh+GDIYVhmABAMAAb0LAALe9AAAAAQOGKIZgAAAAAAAAAGADwAD6PwFKhjEBIRyGXByGPhaGMi7AAG85wAC3vcAAuGCDdwEAAWqGQGADwAD8BYFXAMAA/B1IAQABkwDAAP0oBsAAuGiCH4baht+G6wAAwABvQ8AAt70AAAABA4bnhusAAAAAAAAAXAE+AAbAALhpgh+HZodrh3gAAMAAb0TAALe9AAAAAQOHdId4AAAAAAAAAFwBPgAAAF6wDwBesIsAXrDuAF6xVQBesc8AXrI3AF6yYgBeso0AAAAHAsAAuHCCH4ebh6qq6wfAAG9FAAEAAIJ2YAPAAP1RAVsBYAHAAP1RAAFdAcAAuj0BXwMAAAwEwAC4c4IfiAWIFwbAAG9GwAC3vQBgA8AA/AUBaogWYAPAAPwFCQTAALh0gh+ILIg/BsAAbzbAALe9AGADwAD8BQFqiD5gA8AA/AUVBMAAuHWCH4hUiGUGwABvN8AAt70AYAPAAPwFAWqIZGADwAD8BSEEwAC4doIfiHqIiwbAAG9HwAC3vQBgA8AA/AUBaoiKYAPAAPwFgVcEwAC4d4IfiKCItAbAAG9IwAC3vQBgA8AA/AUBaoizYAPAAPwFg0cEwAC4fYIfiMyI1BjAAG8lAF4DAAAAAAABVwPAALfGAFwABMAAuH6CH4jxiPkYwABvJwBeAwAAAAAAAVcDwAC3xwBbAATAALh4gh+JIIkmGMAAY7XAALe9AGADwAD8BQAEwAC4eYIfiXKJhFjAAG9JwAC3vQBdA8AAuFoBXwMAAAErBMAAuHqCH4miibNYwABvSsAAt70AXQPAALhaAV8DAAABKwTAALh7gh+J/YoMWMAAb0vAALe9AF0DwAC6wQFfAwAAASsEwAC4fIIfjC6MORjAAG9MwAC3vQBdA8AAuUkBWwErAQXAALilgh+MPow+jJYAAAADjFiMlgAAAAICAoxeAAAEwABvJV4DAAAAAAABVwPAALfGAFwAjG0AAATAAG8nXgMAAAAAAAFXA8AAt8cAWwAAXQPAALhwAV8DAAABPwQIAcAAuH2AAMBetKgIAcAAuH6BAMBetMIIAMAAuHhqjIhgA8AA/AUJCQGMPsAA/WcAAAAAIAbAALiAgh+Mm4yyjSYBAMAAb00AAAABA4y6jSYAAAAAAAAAXgMAAAAAAAFXA8AAt8YAXAE+AT0wjMAfjMrAAPuXAQABJ8AAb04ABsAAuI+CH40rjTSNvwIAwABvTQAAAAEDjTuNvwAAAAEBAY1BAAAAwABvT2EDAFwAAFwBPgE9MI1ZH41jwAD7lwEAASfAAG9OAAbAALiBgh+NxI3bjlABAMAAbyYAAAABA43kjlAAAAAAAAAAXgMAAAAAAAFXA8AAt8YAXAE+AT0wjeofjfTAAPuXAQABJ8AAb04ABsAAuJCCH45Vjl6O6wIAwABvJgAAAAEDjmaO6wAAAAEBAY5sAAAAwABvUGEDAFwAAFwBPgE9MI6FH46PwAD7lwEAASfAAG9OAAbAALiCgh+PEo8gj0cBAIH1AAAAAQOPJ49HAAAAAAAAAF0DwAC5jQFfAwAAAUqPKgEfjy7AALhZAQFfAwAAAS4ABsAAuIOCH49Mj16PhQEAhDsAAAABA49jj4UAAAAAAAAAXQPAALnrAV8DAAABSo9mAR+PasAAusABAV8DAAABLgAGwAC4hIIfj4qPk4+8AQC5GgAAAAEDj5yPvAAAAAAAAABgA8AA+j8BSo+fASEcj7gcj6cWj6AuwABjtcAAt73AALh4g3cBAAFqj6lgA8AA/AWBVwDAAPwdSAEAAZMAwAD9KAbAALiFgh+QYJBpkHoBAMAAbysAAAABA5BykHoAAAAAAAAAYAPAAPo/AUqQdQEqBsAAuIaCH5C9kMaQ3gEAwABvLgAAAAEDkNKQ3gAAAAAAAABgA8AA+j8BSpDVASEWkNYuwABvUcAAt73AALiMBsAAuIiCH5FpkXKR2gEAwABvUsAAt70AAAABA5GCkdoAAAAAAAAAYAPAAPo/AT4CQCEWkZAuwABvUcAAt73AALiMkY+RmABKkZ8BHpGmwAD15gIAAhaRsC7AAG9JwAC3vcAAuHkWkcQuwABvSsAAt73AALh6AAbAALiJgh+SMJI5kmMBAMAAb0DAALe9AAAAAQOSQ5JjAAAAAAAAAGADwAD6PwFKkkYBIRySXxySThaSRy7AAGO1wAC3vcAAuHiDdwEAAWqSUGADwAD8BSEAwAD8HUgBAAGTAMAA/SgGwAC4ioIfkmiScZKkAQDAAG9TwAC3vQAAAAEDkoGSpAAAAAAAAABgA8AA+j8BSpKEASEckqAckowWkoUuwABjtcAAt73AALh4g3cBAAFqko5gA8AA/AWDRwDAAPwdSAEAAZMAwAD9KAbAALiLgh+SqZKyktoBAMAAb1TAALe9AAAAAQOSv5LaAAAAAAAAAGADwAD6PwFKksIBHJLKFpLDLsAAY7XAALe9wAC4eGMBAAFqksxgA8AA/AWBVwDAAP0yBsAAuJOCH5LfkueTWAAAwABvVcAAt70AAAABA5L4k1gAAAAAAAAAXQPAALlJAVsBPgJJkwEhHJMRFpMFLsAAb0zAALe9wAC4fEgBAAErAMAA/V5KkxoBFpMhLsAAb0zAALe9wAC4fD9KkzIBF5M5LsAAb0zAALe9H5NLwAC5fAABWwAAwAC4fAbAALiMgh+Td5OAk6YBAMAAb1HAALe9AAAAAQOTiZOmAAAAAAAAAGADwAD6PwFKk4wBHJOfFpOMLsAAb0nAALe9wAC4eUgBAAErAMAA/V4GwAC4lIIfk+qT75XwAADAAG9WwAC3vQAAAAEDk/uV8AAAAAEBAZQWAAAggfhdA8AAuFoBXwMAAAAAXAE+B0AelDHAAPXmAgACFpRIgJQ7wF66M8AAbzrAALe9wAC4YYCUT8BeujMAlDGUXAA9F5RwgJRjwF66M8AAbznAALe9HJSGFpR/LsAAY7XAALe9wAC4eIN3AQABapSIYAPAAPwFFQDAAPwdwAC4YE6U65TzAADAAG9XXQPAALhaAV8DAAABFpT1LsAAb0rAALe9wAC4ej0XlQwuwABvSsAAt72AlSDAXrozwAC4ej0XlT+AlTLAXrozwABvOsAAt70rwAC4YT0XlV6AlVHAXrozwABvO8AAt72BlWrAXrq4wAC4YkmVdxyVg4GVe8BeurhIAQABKwDAAP1ePgE9F5WULsAAb0nAALe9gJWpwF66M8AAuHk+AT0XldKBlcrAXrq4wABvOsAAt72AldrAXrozwAC4YQbAALiVgh+V9ZX6mJIAAMAAb1jAALe9AAAAAQOWCZiSAAAAAQEBliQAACCB+F0DwAC4WgFfAwAAAABcAT4HQB6WP8AA9eYCAAIWllaAlknAXrujwABvWcAAt73AALqsLgCWP5ZoAEAhHpZ3wAD15gIAAhaWjoCWgcBeu6PAAG86wAC3vcAAuGGAlpXAXrujAJZ2lqIATpbDlswAAJz9XQPAALhaAV8DAAABFpbbgJbOwF67o8AAbzvAALe9wAC4Yk6XBJcJAACDsF0DwAC4WgFfAwAAARaXGICXC8Beu6PAAG86wAC3vcAAuGFJlyMclzCBlyfAXrwTSAEAASsAwAD9Xj4BPReXay7AAG9JwAC3vYKXgMBevD7AALh5PgE9F5eigZeZwF68E8AAbzrAALe9gpeqwF68PsAAuGFJl7ocl8OCl77AXrw+SAEAASsAwAD9Xj4BPReX/S7AAG9KwAC3vYGYEcBevBPAALh6PgE9F5gzgpguwF68PsAAbzvAALe9gZg/wF68E8AAuGI9F5hhgJhUwF67o8AAbzrAALe9F5h2gJhpwF67o8AAbzvAALe9gJiCwF67o8AAuGLAALhhBsAAuJaCH5jDmNma/wAAwABvWsAAt70AAAABA5jjmv8AAAAEBASY6QAAAMAAbzxhAwFfAwAAXACZAgAAAIHrYAPAAPv7AJkWAAAAg4lhAwBcAJklAAAAwABvCWADwAD6PwAAXQPAALnGAV8DAAABPgVJmToWmT4uuRrAALiEPgI9IxyZV4KZUMBevYRIAQABKwDAAP1eiplQwF69hGqZW2EDAFzAAX5PKwFhAwBcSplzAR+ZfsAAu5QBAV8DAAABgpmZwF69hAA/TpnCmc8AAIH4XQPAALnGAV8DAAABH5nVwAC4bwUBXwMAAAUugJn+wF69ZIGaBsBevXaCmg/AXr2Eg5oXwF69kAA9HJorLsAAb1bAALe9AQABJpo4AYSaOMBevghdA8AAuFoBXwMAAADAALiUSZpLHppPwAD15gIAAhaaWS7AAG9JwAC3vcAAuHkWmm0uwABvSsAAt73AALh6AD4BPR6ax8AAuAcBAAEWmtMuwABvJcAAuH0AP0qa6AGEmu/AXr4IBsAAuJeCH5sEmwudTQAAwABvW8AAt70AAAABA5sYnU0AAAABAQGbLwAAIJVnXQPAALnGAV8DAAAAAF0DwAC43gFbAT4ETptUm2EAAIH4XQPAALhaAV8DAAABJptUAYCbY8Bevu1dA8AAuFoBXwMAAEmbrB6bsMAA9eYCAAIWm8eBm7rAXr8NwABvOsAAt73AALhhgZvOwF6/DQBKm90BKz9Jm+4Wm/+Bm/LAXr8NwABvQMAAt73AALhsPgE9HJwfgZwSwF6/DcAAb0HAALe9AAAAAMAAuGc+Aj0cnEsuwABvWMAAt70BAAGBnFvAXr8NAMAAuJVJnPUiIRac+i7AAG9AwAC3vcAAuIkAFp0HLsAAb1HAALe9wAC4jD4BPRydGy7AAG9cwAC3vQAAAADAALifP0qdPgErBsAAuJiCH51SnVediQAAwABvXcAAt70AAAABA51jnYkAAAABAQGdegAAIIH4XQPAALnGAV8DAAAAAFwBPgAGwAC4mYIfnY2dkp3FAADAAG9ewAC3vQAAAAEDnZ+dxQAAAAEBAZ22AAAggfhdA8AAucYBXwMAAAAAXAE+AAbAALiagh+d5Z3rns4AAMAAb1/AALe9AAAAAQOd+Z7OAAAAAAAAAGADwAD7CgE+A0meAhaeBi65GsAAuIQ+AUqeGAEfniPAAPulAQABJ8AAb2AAP0AWnm0uwABvU8AAt73AALiKnm2efABKnoMBH56OwAD7pQEAASfAAG9hAAbAALiggh+e057YnywAAFYAAAABA57bnywAAAABAQGe3gAAIBJfAwAAAABcAT4CSZ7qIRae7y7AAG9UwAC3vcAAuIs9MJ79HJ8DLsAAb1/AALe9AAAAAMAAuJo/PRyfGS7AAG9iwAC3vQEAAYCfI8BewRgAwAC63QbAALihgh+fMZ82oKoAAJwWAAAAAQOfPqCqAAAAAgECn0YAAACBxWADwAD9UQCfWQAAAIZFYAPAAP2/AWoAYAPAAP0OeQBcAT4FPYifbMBewZEen3TAALgBAQABgJ+CwF7BkQBJn44hFp+TLsAAb1TAALe9wAC4iz0wn6Ecn6cuwABvX8AAt70AAAAAwAC4mj9On8if1AAAhFdgA8AAvMsBHJ/jGp/bwAC9HMAAb2MCAAKAn/HAXsGRgZ/4wF7BnwDAAL0ySaAJIRygGYKgDcBewgNIAQABKwDAAP1ePgI9iKAqwF7BkR6gMsAAuAEBAAEWoEyCoEDAXsIDgcXAALzNAD2JoFrAXsGfFqBzgqBnwF7CA4ZFwAC8zj89HKCJLsAAb2TAALe9AgACgKCUwF7BkYGgm8BewZ8AwAC63gbAALiigh+gr6C2oboAAIKIAAAAAQOgu6G6AAAAAAAAAF0DwAC43gFbAT4GSaDEFqDILrkawAC4hD4CQCEcoO0WoOEuwABvTMAAt73AALh8SAEAASsAwAD9XqDhoPQASqD9ARahBC7AAG9MwAC3vcAAuHw/SaEbIRahIC7AAG9UwAC3vcAAuIs9MKEuHKE0LsAAb1/AALe9AAAAAMAAuJo/PRehSi7AAGO1wAC3vRyhURahSi7AAGO1wAC3vcAAuHiBBgEAAWqhVGADwAD8BYFXAMAA/B7AALh4TqFuoXkAAMAAb2VdA8AAuN4BWwEcoXsuwABvVcAAt70AAAAAwAC4kz0coZQuwABvZsAAt70AAAAAwAC630qhpQGAoazAXsOKBsAAuI2CH6G/ocqh5QEAn5MAAAABA6HPoeUAAAAAAAAAXQPAALjeAVsBSqHSARyh0i7AAG9VwAC3vQAAAADAALiTBsAAuKOCH6HqofGi8wAAnBgAAAABA6H6ovMAAAACAQGiBQAAIIH1XQPAALmNAV8DAAAAAaITAAAAwABvCWADwAD6PwFqAGADwAD9DnldA8AAuN4BWwE+BEmiKSEWoi4uwABvVMAAt73AALiLPTCiPByiQi7AAG9fwAC3vQAAAADAALiaPz0XolguwABjtcAAt70col8WolguwABjtcAAt73AALh4gQYBAAFqomJgA8AA/AWDRwDAAPwewAC4eD0XonguwABvS8AAt70foo7AALrMAwFfAwAAAy6AoqTAXsQzNQAAAAEAYAPAAPo/AYGirMBexEcjHKK6ggDAXsT1SAEAASsAACqCAMBexPUBYAPAAPo/AMAAuHtKoskBFqLgFqLQLsAAb0vAALe9wAC4e8AAb2fAALrDBsAAuJuCH6MvozSjWgAAs7PAALe9AAAAAQOjOKNaAAAAAQEBozsAACASXwMAAAAAXAE+AT0co0cuwABvYsAAt70BAAGAo1HAXsVvAMAAut0GwAC4nIIfo1+jZKO6AADAAG9owAC3vQAAAAEDo22jugAAAAICAqN1AAAAgcVgA8AA/VEAo4cAAACGRWADwAD9vwAAXAE+AT0co5kuwABvZMAAt70CAAKAo6TAXsXBgaOrwF7FzwDAALreBsAAuJ2CH6O/o8SkdAAAwABum8AAt70AAAABA6PKpHQAAAAAAAAAXAE+BUAWo9ouwABvU8AAt73AALiKo9qj6QBOpACkCQAAwABvaV0DwAC6wQFbARakCy7AAG9LwAC3vcAAuHs9F6QgLsAAb0vAALe9K8AAuHs9F6Q8LsAAY7XAALe9HKRDFqQ8LsAAY7XAALe9wAC4eIN3AQABHKRGaqRHYAPAAPwFg0eEjAAAAADAAPwgAMAA/B3AALh4PRykZoCkXcBexkfAAG8dAAAAAMAAusoGwAC4noIfpI6kk6oNAADAAG9qwAC3vQAAAAEDpKOqDQAAAAEBAaSwAAAAiKdhAwFdA8AAuuIBXwMAAFwAAFwBPghJpOwWpPAuwABvQMAAt73AALiJPgE9MKUDH6UNwAD7pQEAASfAAG9rAD9JpW4WpXIuwABvUcAAt73AALiMSqV8AD9OpbClswAAs5pgA8AA/AUBHKW9FqW2LsAAY7XAALe9wAC4eIN3AQABaqW/YAPAAPwFFQDAAPwdPRenIi7AAGO1wAC3vRynKRanIi7AAGO1wAC3vcAAuHiDuwEAARynPGqnLGADwAD8BRWBBgEAAWqnPmADwAD8BSEAwAD8HgDAAPwfwAC4eE6na6d4AACB+F0DwAC4WgFfAwAAARanei7AAG9JwAC3vcAAuHlDp5IhHKemgqeZwF7H5EgBAAErAMAA/V4+AUmntxynyIKnu8Bex+TAAG89wAC3vQEAAYGn1sBex14AwAC4ZT4HPTUAAAABAF0DwAC4WgFfAwAAAYKn5cBex+QXp/KDp/LAXshKwABvOcAAt70cp/4Wp/KDp/LAXshKwABvOcAAt73AALhggQYBAAFqqBhgA8AA/AUhAMAA/B7AALhgPRyoNYCoL8Bexv8gAQABgqg2wF7H5AAAPRyoWoKoTcBex+TAAG8/wAC3vQAAAADAALhmTqiOqJMAAIOwXQPAALhaAV8DAAABFqiigqiVwF7H5MAAbzrAALe9wAC4YUmosRaowoKotcBex+TAAG9CwAC3vcAAuG0+AT0cqOIuwABvWMAAt70BAAGCqPLAXsfkAMAAuJU/PTUAAAABAF0DwAC4WgFfAwAAAYKpE8Bex+QXqSCEqSDAXsk9wABvOcAAt70cqSwWqSCEqSDAXsk9wABvOcAAt73AALhgg3cBAAEcqS9qqUdgA8AA/AUhhIwAAAAAwAD8IADAAPwdwAC4YD2KqV7AXsfkg6ltwF7I2T4BPYqpisBex+QWqaaCqZnAXsfkwABvOsAAt73AALhhPRepvy7AAGO1wAC3vRypxhapvy7AAGO1wAC3vcAAuHiDdwEAARypyWqpymADwAD8BSGEjAAAAADAAPwgAMAA/B3AALh4SaneFqniLsAAb1HAALe9wAC4jD4BPRyp9C7AAG9cwAC3vQAAAADAALifPwbAALifgh+qEqoXqukAAMAAb1zAALe9AAAAAQOqJKrpAAAAAAAAAFwBPgNAFqo0LsAAb1HAALe9wAC4jKo0qjwASapDIhaqRy65GsAAuIQAFqpfFqpTLsAAb0zAALe9wAC4fMAAb2zAALe9wAC5Vz4BPRyqsBaqpC7AAG9MwAC3vcAAuHzAAG9twAC3vQEAASsAwAC5cj89HqrQwAC4BwEAARaq3C7AAG8nwAC4fgAAAF61IABetWoAXrWzAF61/QBetkYAXraHAF62yABetyoAXrdZAF63mABeuA4AXrh1AF643QBeuTYAXrm+AF66DQBeu30AXr0+AF6+xwBev/8AXsA9AF7AewBewPkAXsFxAF7CrwBew9EAXsQTAF7FSwBexZsAXsYFAF7G2QBeykQAXsrzAAAAIALAALimgh+q7qr0sNADwABvbgABAACCdmADwAD9UQFbAV0BwAC4cAFfAwAAAAFdAcAAui0BXwMAAAABBcAAuLGCH6tuq26r0AAAAAOrjKvQAAAAAgICq5IAAADAAG8lYQMAXACrowAAAMAAbydhAwBcAABdA8AAuKYBXwMAAAE/AQkAq7fAALilAgACgKu9wF7L0oGrx8Bey+AABQbAALipgh+r9Kv9rC0BAMAAb1TAALe9AAAAAQOsCqwtAAAAAAAAAGADwAD6PwFKrA0BIhisE8AAb1TAALe9wAC4iwAhFqwkLsAAb0DAALe9wAC4iQbAALisgh+sMqwyrO0AAMAAb1/AALe9AAAAAQOsQKztAAAAAAAAAGADwAD7CgE+AkmsSRasTS7AAG9AwAC3vcAAuIk+AUqsYAEfrGvAAPulAQABJ8AAb2sAP0qszAEdrNnAAG9fwAC3vQAAAADAALiaBsAAuK2CH6zyrPeu0QAAwABvYsAAt70AAAABA60ArtEAAAABAQGtAwAAIBJfAwAAAABcAT4DSa0PFq0TLsAAb1HAALe9wAC4jEqtHQA/Sa0pFq0tLsAAb1LAALe9wAC4iD4GPRetRi7AAGO1wAC3vRytTRatRi7AAGO1wAC3vcAAuHiBBgEAAWqta2ADwAD8BSEAwAD8HsAAuHhOrZqtpwAAgfhdA8AAuFoBXwMAAAEWrakuwABvScAAt73AALh5PRyt0IGtw8BezXmzs8AAt70BAAGArdXAXs0DAMAAuvk9F63iLsAAY7XAALe9HK3pFq3iLsAAY7XAALe9wAC4eIN3AQABHK3saq4IYAPAAPwFIYSMAAAAAMAA/CAAwAD8HcAAuHhJrh0WriEuwABvUcAAt73AALiMPgE9HK41LsAAb1zAALe9AAAAAMAAuJ8/Sq5UAD89HK5mLsAAb2rAALe9AQABNK53A653rswAAAABAQGumAAAAIH4XQPAALriAV8DAAAAAGADwAD9DgE+AT0crruBrq7AXs5Qs7PAALe9AQABgK7AwF7NAwDAALr5AMAAuJ4GwAC4roIfrtau26+oAADAAG9kwAC3vQAAAAEDruWvqAAAAAICAq7tAAAAgcVgA8AA/VEArv8AAACGRWADwAD9vwAAXAE+AkmvERavFS7AAG9RwAC3vcAAuIxKrx8APz0crysuwABvasAAt70BAAE0rzwDrzyvowAAAAEBAa9dAAAAgfhdA8AAuuIBXwMAAAAAYAPAAP0OAT4BPRyvgIKvc8Bezw/AAG9owAC3vQIAAoCvisBezriBr5HAXs7GAMAAuvoAwAC4ngbAALivgh+vra+ysM4AAMAAb2bAALe9AAAAAQOvu7DOAAAAAAAAAFwBPgFJr8QhFq/JLsAAb1HAALe9wAC4jD4BPRyv2y7AAG9qwAC3vQEAATSv7AOv7LBDAAAAAQEBsA0AAACB+F0DwAC64gFfAwAAAABgA8AA/Q4BPgE9HLAygLAlwF7PucAAbpvAALe9AAAAAMAAuvsAwAC4nj4DQCEcsGwWsGAuwABvTMAAt73AALh8SAEAASsAwAD9XrBgsHMAQBawjxawgy7AAG9MwAC3vcAAuHzAAG9swAC3vcAAuVewg7CbAD0csLAWsKQuwABvTMAAt73AALh8wABvbcAAt70BAAErAMAAuXIAAF7MGABezGwAXszdAF7OkgBez1oAXtBmAAAABQLAALiygh+w07DZtUMDwABvbwABAACCdmADwAD9UQFbAV0BwAC4cAFfAwAAAAAAAQXAALi5gh+xJrEmsYkAAAADsUWxiQAAAAICArFLAAAAwABvJWEDAFwAsVwAAADAAG8nYQMAXAAAXQPAALiyAV8DAAABPwEJALFwwAC4pQIAAoCxdsBe0M6BsYDAXtDcAAMGwAC4tYIfsa2xsrKaAADAAG9iwAC3vQAAAAEDsbuymgAAAAEBAbG+AAAgEl8DAAAAAFwBPgFFscoBsemx9gAAgfhdA8AAuFoBXwMAAAEWsfguwABvScAAt73AALh5ASEcsiGBshTAXtFOSAEAASsAwAD9XgGJsjLAXtFOFrJOgbJBwF7RTsAAbzrAALe9wAC4YT4BPRyyaoGyXcBe0U7AAG9wwAC3vQEAAR+yesAAu0kBAV8DAAABgLKKwF7ROgAAwAC6/wbAALi2gh+yn7Kks7UAAMAAb2TAALe9AAAAAQOyrrO1AAAAAgICsrYAAACBxWADwAD9UQCyyAAAAIZFYAPAAP2/AABcAT4BRbLaAbL5swYAAIH4XQPAALhaAV8DAAABFrMILsAAb0nAALe9wAC4eQEhHLMxgrMkwF7SJEgBAAErAMAA/V4BirNCwF7SJBazXoKzUcBe0iTAAG86wAC3vcAAuGE+AT0cs3qCs23AXtIkwABvcMAAt70BAAEfs4rAALtRAgACgLOYwF7R/4Gzn8Be0g0AAMAAuv8GwAC4t4Ifs7qzv7VBAADAAG9mwAC3vQAAAAEDs8i1QQAAAAAAAABcAT4BSbPRIRaz1i7AAG9RwAC3vcAAuIw+AUWz6AG0B7QUAACB+F0DwAC4WgFfAwAAARa0Fi7AAG9JwAC3vcAAuHkBIRy0QYC0NMBe0vdIAQABKwDAAP1eAYi0VMBe0vcWtHCAtGPAXtL3wABvOsAAt73AALhhPgE9HLSOgLSBwF7S98AAb3DAALe9AQABarSgYAPAALtSwAF+VADAALr/PgNAIRy03xa00y7AAG9MwAC3vcAAuHxIAQABKwDAAP1etNO05gBAFrUCFrT2LsAAb0zAALe9wAC4fMAAb2zAALe9wAC5V7T2tQ4APRy1Ixa1Fy7AAG9MwAC3vcAAuHzAAG9twAC3vQEAASsAwAC5cgAAXtEUAF7R2QBe0rIAXtPpAAAAAwLAALi6gh+3JLcqvI0DwABvcQABAACCdmADwAD9UQFbAV0BwAC4pgFfAwAAAAFdAcAAutoBXwMAAAEEwAC4vYIft663tljAAGKXwAC3vQBdA8AAu24BXwMAAAErAQXAALjJgh+3u7e7uBsAAAADt9e4GwAAAAICArfdAAAAwABvJWEDAFwAt+4AAADAAG8nYQMAXAAAXQPAALi6AV8DAAABPwEJALgCwAC4sQIAAoC4CMBe1HaBuBLAXtSEAAYGwAC4wIIfuCC4KbhdAQDAAG9ywAC3vQAAAAEDuDW4XQAAAAAAAABgA8AA+j8BSrg4ASIhHLhBFrg4LsAAYpfAALe9wAC4vUgBAAErAMAA/V4AIRa4Vha4TS7AAGKXwAC3vcAAuL2BVcAAu3MGwAC4w4IfuGK4Z7jXAADAAG9zwAC3vQAAAAEDuHe41wAAAAEBAbiGAAAAm7pdA8AAuzwBWwAAXAE+Aj0jHLicFriTLsAAYpfAALe9wAC4vUgBAAErAMAA/V4XuJMuwABil8AAt70fuKTAALt5AAFfAwAAAADAALi9KwFdA8AAu24BXwMAAD0cuMkWuMAuwABil8AAt73AALi9VgEAAYC4zcBe1U4AwAC7dQbAALjFgh+43LjhubAAAFYAAAABA7jkubAAAAABAQG45wAAIBJfAwAAAABcAT4DSbjzIiEWuPguuRrAALiEABa5BC7AAG9AwAC3vcAAuIk+Aj0cuRcuwABvc8AAt70BAAEfuSzAALtJAQFfAwAAAYC5PMBe1fEAAMAAuMNKuUoAPz0duWJWAQABgLlmwF7V8QDAALigQ7lxFrl4LsAAb3LAALe9wAC4wD4BPRy5lha5jS7AAGKXwAC3vcAAuL3AAG90AQABLgDAALt2BsAAuMaCH7m1ubq69QAAnBYAAAABA7nCuvUAAAACAQK5ygAAAIHFYAPAAP1RALndAAAAhkVgA8AA/b8BagBgA8AA/Q55AFwBPgRJufAiIRa59S65GsAAuIQAFroBLsAAb0DAALe9wAC4iT4CPRy6FC7AAG9zwAC3vQEAAR+6KcAAu1ECAAKAujfAXta9gbo+wF7WywAAwAC4w0q6UgA/SbpkIRa6aS7AAG9UwAC3vcAAuKk9MLp3HLp9LsAAb1/AALe9AAAAAMAAuKw/PRy6ky7AAG9kwAC3vQIAAoC6nsBe1r2BuqXAXtbLAMAAuK5DurYWur0uwABvcsAAt73AALjAPgE9HLrbFrrSLsAAYpfAALe9wAC4vcAAb3QBAAEuAMAAu3YGwAC4x4Ifuvq7AbwGAACCiAAAAAEDuwa8BgAAAAAAAABdA8AAuN4BWwE+BEm7DyIhFrsULrkawAC4hAAWuyAuwABvQMAAt73AALiJPgM9HLszLsAAb3PAALe9AQABartKYAPAALtSwAF+VADAALjDPRe7YS7AAGO1wAC3vRy7aBa7YS7AAGO1wAC3vcAAuHiBBgEAAWq7hmADwAD8BYFXAMAA/B7AALh4SrubARi7qJ+TwAC4jT9Ou7+7xgAAgXZdA8AAuN4BWwEdu86CiAAAAADAALiiQCEWu+MuwABvcsAAt73AALjAu+K77gBKu/UBgLv8wF7YegbAALjEgh+8C7wQvIsAAMAAb1zAALe9AAAAAQO8HbyLAAAAAAAAAFwBPgJJvCYWvCouwABvcsAAt73AALjAPgI9HLxIFrw/LsAAYpfAALe9wAC4vYJCAAAAAMAAu3c9F7xXLsAAYpfAALe9K8AAuL0/PR28eMAAb1zAALe9AAAAAMAAuJ8AAF7UvABe1SgAXtXSAF7WnQBe18IAXti6AF7ZPwAAAAYCwAC4yoIggZKBt4LyA8AAb3UCaoG3YAPAAMstwAF+W2qBt2ADwAD58sABfmcAAWABwAD9UQAAAgTAALjMgiCB2IHjCYZcAGADwAD96wAEwAC4zYIggfSB9wmArABgA8AA/esAAQXAALjRgiCB/IICgi8BAAADghGCLwAAAAIBAYIXAAAEhlxgA8AA/esAAYIqAAAEgKxgA8AA/esBagBgA8AA/Q55YAPAALjKAT8DCAHAALjMgADAXtngCAHAALjNgQDAXtnvCQGCAsAA/WcAAAAAAQbAALjPgiGBVIFqgj8AAKThAWqBamADwADLLcABflsAAAEDgW6CPwAAAAAAAABdA8AAuN4BYAPAAP0OAT4DToHcgeMAAIHcXQPAALjeAVsBHoHpwAC45wEBYAPAAP0OASsAPRyCGBqCB8AAt+lWAQABFoIcLoZcwAC4zADAAP2pSoIuASaCLgGAgjXAXtpzXQPAALjeAWADwAD9DgAAXto0AF7a0AAAAAECwAC40oIggy6DNIPNA8AAb3cAAAFgAcAA/VEAAWABwAD7zgEEwAC41YIgg8mDywnAAGpHwAC3vQBgA8AA/esAAQXAALjZgiCDY4Njg4EAAAADg3iDgQAAAAEBAYN+AAAEwABqR2ADwAD96wAAYAPAALjSAT8CCAHAALjVgADAXts5CQGDY8AA/WcAAAAAAQbAALjXgiCDhYOMg7gAACMAAAABA4OUg7gAAAAAAAAAYAPAAP3rAUqDmgEkg7gDJ8AAb3gWg7QuwABqR8AAt73AALjVJ4NCAABe22wAXtuzAAAAAQLAALjagiKGI4YyhvsHnDQAAQAAgnZgA8AA/VEBWwFgAcAA/VEAAAABBcAAuN2CIoamhqaG+QCAtcAAt70AA4awhvkAAAAAAAAAXQPAALjaAV8DAAABPgE9MIa5H4bDwAD7lwEAASfAAG95AAEJAYamwAD9ZwAAAAAAAABe3DoAAAAAAsAAuN6CIpd+l43AAGm3BwMAAQAAgnZgA8AA/VEBWwFgAcAA/VEAAAIEwAC44YIil+SYJAXAAG96wAC3vQBdA8AAuUkBYAPAAP0OAR+X/MAAuX4CAWADwAD9DgIrapgfYAPAAL0WwAF+dgAEwAC44oIimHOYtQXAAG97wAC3vQBdA8AAuUkBYAPAAPo/AR+YjMAAuX4CAWADwAD6PwIqapiwYAPAAL0WwAF+dgAAEAbAALjkgiKaw5rLm88EAQAAAAABA5rRm88AAAEAAIJ2YAPAAP1RAVsBAQGa3gAAAMAAb3xhAwBdA8AAuNoBXwMBAAAAXQPAALjeAV8DAQABPgNOmv6bBQAAgXZdA8AAuUkBXwMBAAEfmwvAALl8AAFfAwEAAAA9HpsjwAC8wwEAATSbJwObJ5u3AAAAAAAAAGADwAD9DgE+AUs+AT0cm0eBm0DAXt1FwABvfcAAt70BAAEcm1yAm1HAXt0dIAAAAAAAAMAAuW8BAZtpWwGbcAAAAYNNWwABm3MAAAGIR2ADwAD9vwA+AT0em4DAALf/AwADgZubwF7dRYKbo8Be3b+Dm6bAXt3JAABKm74BgZvFwF7dRQbAALjlgiKd8Z35nw8EAcAAb34AAAABA54Jnw8AAAEAAIJ2YAPAAP1RAVsBAQGeFgAAAMAAb3xhAwBdA8AAuNoBXwMBAAAAXQPAALjeAV8DAQABPgNOnjaePQAAgXZdA8AAuUkBXwMBAAEfnkPAALl8AAFfAwEAAAA9Hp5VwAC4IgEAATSeZwOeZ573AAAAAAAAAGADwAD9DgE+AUs+AT0cnoeBnoDAXt5cwABvfcAAt70BAAEcnpyAnpHAXt40IAAAAAAAAMAAuW8BAZ6pWwGesAAAAYNNWwABnrMAAAGIR2ADwAD9vwA+AT0ensDAALf/AwADgZ7bwF7eXIKe48Be3taDnubAXt7gAABKnv4BgZ8FwF7eXAbAALjmgiKgrqC2oxMEAZmvAAAAAQOgwaMTAAABAACCdmADwAD9UQFbAQEBoM4AAADAAG98YQMAXQPAALjaAV8DAQAAAF0DwAC43gFfAwEAAT4BSz4CTqDzoPoAAIF2XQPAALjaAV8DAQABHKEHgKD8wF7fSSAAAAAAAEmhESWhHIGhFcBe33RdA8AAuN4BXwMBAD4BSqE0ARShO8Be33QBAV0DwAC43gFfAwEAPgFKoVoBH6FlwAC5gAEBXwMBAAEmoXYBgaF2wF7fdF8DAQAAAQGhjVsBoZQAAAGBxVsAAaGbAAABhkVgA8AA/b8APgROobOhugAAgdxdA8AAuUkBXwMBAAEfocDAALl8AAFfAwEAAABOod+h6wAAhFdgA8AAvMsBHKH6GqHywAC9HMAAb2MCAAKBogjAXt/0gqIPwF7f/gDAAL0ySaIiIRyiMoSiJsBe4DNIAQABKwDAAP1ePgE9HKJMg6JFwF7gD8AAb3/AALe9AgACHqJtwAC4AQEAARaih4Sie8Be4DOBxcAAvM0AFqKbhKKPwF7gM4ZFwAC8zgDAALl0PgE9HKLGg6K/wF7gD8AAb3/AALe9AgACgaLawF7f9IKi4cBe3/4AwAC5dEqi/AGDowPAXuAPBsAAuOeCIqVPpVelqQQBgJYAAAABA6VjpakAAAEAAIJ2YAPAAP1RAVsBAAGlcQAAAICWXQPAALjaAV8DAQABagBgA8AA/Q55AF0DwAC43gFfAwEAAT4BSqV/AR+lisAAuX0BAV8DAQABgKWfwF7hKAAGwAC46IIip4ynlKk2BAGBxQAAAAEDp6CpNgAAAQAAgnZgA8AA/VEBWwIBAqeoAAAAgcVgA8AA/VEAp7sAAACGRWADwAD9vwFqAGADwAD9DnkAXQPAALjeAV8DAQABPgM9iKfOwF7hmR6n1sAAuAEBAAGAp+TAXuGZAEmn8CEep/XAAPXmAgACGqgEwAC9HGqoDWADwAC9msABfnYAPgJOqCyoOAAAhFdgA8AAvMsBHKhHGqg/wAC9HMAAb2MCAAKAqFXAXuGZgahcwF7hpwDAAL0ySahvIRyof4Koc8Be4g1IAQABKwDAAP1ePgI9iKiSwF7hmR6omsAAuAEBAAEWqLSCqKjAXuINgcXAALzNAD2JqMTAXuGnFqjdgqjRwF7iDYZFwAC8zj8/Sqj7AR+pBsAAuX8CAV8DAQACgKkgwF7hmYGpJ8Be4acABsAAuOmCIqzgrOiudQQBwABvgAAAAAEDrPaudQAAAQAAgnZgA8AA/VEBWwIBAq0AAAAAgbNgA8AA+tsArRcAAADAAG98YQMAXQPAALjaAV8DAQABagBgA8AA/Q55AF0DwAC43gFfAwEAAT4DTq04rT8AAIF2XQPAALlJAV8DAQABH61FwAC5fAABXwMBAAAAPR6tW8AAvMACAAKArWHAXuLmNK1rA61rrl0AAAAAAAAAYAPAAP0OAT4BSa12HK2Gga16wF7i9EgBAAErAMAA/V4+AT0craCCrZnAXuMlwABvfcAAt70BAAErAMAAuW8+AUs+AT0crd+CrdjAXuMlwABvfcAAt70BAAEcrfSBrenAXuL0IAAAAAAAAMAAuW8BAa4DWwGuCgAAAYNNWwABrg0AAAGIR2ADwAD9vwA+AT0erhzAALf/AwADgq43wF7jJYOuP8Be492ErkLAXuPnAABKrmQBgq5rwF7jJQbAALjrgiKz27PywABApAABwABvgQAAAAEDs/nAAECkAAABAACCdmADwAD9UQFbAwEBtA4AAADAAG+CXQPAAPxnAV0DwAC43gFfAwEAAAK0IwAAAMAAb4NgA8AA+j8BarQvYAPAAPo/ALQ7AAAAwABURGEDAV8DAQBcAWoAYAPAAP0OeV0DwAC43gFdA8AA/KkBXwMBAAE+CE60crR5AAGBdl0DwAC5SQFdA8AA/KkBXwMBAAEftH/AALl8AAFdA8AA/KkBXwMBAAAATrSfAAAAKV0DwAD8qQFfAwEAAE603bTnAACXDmADwAD8BQGTTrUcAAAAgcVbAE61VAAAAIZFYAPAAP2/AE+2KrYqAAABwABvhGEDAltgA8AA/b9gA8AA/Q4AA7Y1uO4AAAACAgK2NgAAAMAAb4VbALZLAAAAwABvhmADwAD9vwAAYAPAAP0OAT4CPY22YsBe5QMctmuFtmLAXuUDgY0BAAGUAMAA/StJtnUhHLaAhLZ5wF7k8EgBAAErAMAA/V4+A0m2kyEctp+CtpfAXuSNSAEAASsAwAD9Xj4BRra0ts62vQAAAICWXwMBAACEtsbAXuTwPgFJttwhHLbmFLbgwF7lzwsASAEAASsAwAD9Xj4BPR63PcAAuOYBAVsBNLdJA7dJt30AAAAAAAAAYAPAAP0OAT4BPRy3ZYK3XsBe5I0gAQABFLdmwF7lzwsAAAAAPz89jLeswF7k8CtJt8MiHLfRhbfHwF7lA0gBAAGTAMAA/SgBgbfZwF7kcz4BPRy3+IO38cBe5L7AAG+HwAC3vQIAAhS4B8Be5VQJABS4EcBe5V8KAADAALlxPgI9jrg8wF7lFBS4RMBe5VQJAD2PuFjAXuUeFLhlwF7lXwoASbiLIhy4mYW4j8Be5QNIAQABkwDAAP0oACGBuKLAXuRzPgE9HLi/g7i4wF7kvsAAb4fAALe9AgAChrjOwF7lFIe41cBe5R4AwAC5cT9LPgNGuXK5jrl7AAAAgdxdA8AAuN4BXwMBAACAuYXAXuRWPgNOuZy5oAAAn8dgA8AA/AUBhbmiwF7lAz0cubwUubXAXucSCQCBrQIBWwE0ucEDucG79gAAAAEBAbnEAAAAgJZfAwEAAABgA8AA/Q4BPgI9jbnXwF7lAxy54IW518Be5QOBjQEAAZQAwAD9K0m57iEcufmEufLAXuTwSAEAASsAwAD9Xj4CPRy6FoS6EMBe5PCAvwIAAhS6F8Be5y8KABS6HsBe52YLAADAAPy5SboxHLo/hbo1wF7lA0gBAAGTAMAA/Sg+AT0culyDulXAXuS+wABviMAAt70BAAGEum/AXuTwAMAAuXA/PgJJuqUiIRy6sYK6qcBe5I1IAQABKwDAAP1eACEcusIUurzAXudmCwBIAQABKwDAAP1ePgE9HrsZwAC45gEBWwE0uyUDuyW7WQAAAAAAAABgA8AA/Q4BPgE9HLtBgrs6wF7kjSABAAEUu0LAXudmCwAAAAA/Sbt2Ihy7hIW7esBe5QNIAQABkwDAAP0oACGBu43AXuRzPgE9HLuwg7upwF7kvsAAb4fAALe9AgAChru/wF7lFIe7xsBe5R4AwAC5cT8BgesUvAHAXuUvCADAALjxPY283cBe5QMcvOaFvN3AXuUDZAEAAZQAwAD9Kkm8+By9BoW8/MBe5QNIAQABkwDAAP0oPgFKvRYBHr0hwAC45wEBXQPAAPypAV8DAQABar0uXQPAAPypAWADwAD9DsABdGAAPz2MvUfAXuTwHr1UwAD2AAEBXwMBAAGFvVzAXuUDAAEBvW5bAb11AAABg01bAAG9eAAAAaPxYAPAAP2/AD4BSb4TIhy+IYW+F8Be5QNIAQABkwDAAP0oAYG+KcBe5HM+AUq/lwEev6LAALjoAgFdA8AA/KkBXwMBAAIUv6/AXulwCQAUv7LAXul6CgAAPgI9jsAAQF3AXuUUFMAAQGXAXulwCQA9j8AAQHDAXuUeFMAAQH3AXul6CgBKwABAkwGDwABAmsBe5L4GwAC47IIiwABCT8AAQmDAAEQIAAGB1AAAAAEDwABCZsAARAgAAAEAAIJ2YAPAAP1RAVsBAQHAAEJ7AAAAwABvgl0DwAD8ZwFdA8AAuN4BXwMBAAAAXQPAALjeAV8DAQABPgVOwABCjsAAQpgAAMAAXi1dA8AAuP4BXwMBAAEewABCnsAAuQEAAV8DAQAAAE7AAEK7wABCwwAAwABviWEDAV8DAQBgA8AA/Q4BNMAAQsUDwABCxcAAQxMAAAABAQHAAELIAAAAgJZfAwEAAABgA8AA/Q4BPgFJwABC1yEWwABC5oHAAELcwF7qd8AAbx7AALkEPRzAAEL9gcAAQvPAXup3wABvHQEAAYLAAEMGwF7q0wDAALkGP07AAEMdwABDJQAAgethAwJbYAPAAP2/YAPAAP0OATTAAEMnA8AAQyfAAEORAAAAAgICwABDKAAAAIHFWwDAAEM6AAAAoOJgA8AA/b8AAGADwAD9DgE+AUnAAENJIRbAAENYgcAAQ07AXup3wABvHsAAuQQ9HMAAQ2+BwABDZcBe6neB2wIAAoPAAEN9wF7rXoTAAEOEwF7raQDAALkHP0bAAEOXwABDs8AAQ6AAAACB3F0DwAC43gFfAwEAAIDAAEOqwF7qST4BPRzAAEPChMAAQ7vAXuvUga0CAVsBgsAAQ8fAXuqjAYHrg8AAQ9nAXustwAC48UrAAEPtARbAAEP+gcAAQ/TAXup3gdzAALkDBsAAuO2CIsAARsfAAEbVwABIAgABg/gAAAABA8AARt/AAEgCAAABAACCdmADwAD9UQFbAgICwABG7AAAAIhFXQPAAPxnAV8DAQAAwABG/wAAAIinYQMBXwMBAF0DwAC42gFbAABdA8AAuN4BWwE+Ak7AAEccwABHJQAAXF0DwAD8ogFfAwEAARbAAEcwgMAARyfAXuxyXMAA/IlKwABHPgEewABHRcAAuPABAAE0wABHTQPAAEdNwABH/QAAAAAAAABdA8AAuNoBYAPAAPo/AT4EScAAR1ghHMAAR2aCwABHXcBe7K1dAAAAAMAA/KRKwABHcgEqP07AAEeKwABHkQAAgXZdA8AAuNoBWwEcwABHmYHAAEeTwF7shyABAAEWwABHo4LAAEeawF7srV7AAPymAABJwABHsyXAAEe+g8AAR7fAXu00XQPAALjeAVtKwABHyQEcwABH1xTAAEfQwF7tNAMBXQPAALjeAVuBrQEBYAPAAPo/AWrAAEfcYQMBW2ADwAD6P8ABfn0AwAC48T9KwABH6wEpAAbAALjvgiLAAEhFwABIUcAASGIAAcAAb4rAALe9AAAAAQPAAEhXwABIYgAAAAEBAcAASFgAAACAtVsAAGADwAD6PwFKwABIXgEpBsAAuPCCIsAATD7AAExMwABQWQABwABviwAAAAEDwABMU8AAUFkAAAABAQHAAExjAAAAiKdhAwBdA8AAuNoBYAPAAPo/AABdA8AAuN4BWwE+BU7AAEx7wABMhgAAwABvjF0DwAC5SQFbAR/AAEyMwAC5fAABWwAATsAATK8AAADAAG+NYQMBYAPAAPo/XAA9isAATaXAXu6YHMAATcIawABNusAAvRzAAG+OAQFgA8AA+j8BNMAATdsDwABN28AAUCQAAAABAQHAAE3hAAAAwABvj2ADwAD6PwAAYAPAAP0OAT4CQ8AATfSDwABN+8Be7uc+BE7AAE4fAAAAgXZdA8AAuNoBYAPAAPo/AEs+AT2MwABOP8Be7xQcwABOToDAAE5IwF7uSyAAAAAAAAEBwABOXFsBwABOYwAAAYHFWwABwABOagAAAYZFYAPAAP2/AD4CPR7AAE7xwAC4AAMAA4HAAE8RwF7ucoXAAE8dwF7vVIbAAE8kwF7vYABKwABPOwBJwABPVSXAAE9ghMAAT1nAXu8UXQPAALjeAWADwAD6Pz4CPRzAAE+EFMAAT33AXu8UBAFdA8AAuN4BYAPAAPo/ga0CAVwBgsAAT4nAXu6YAYHrFsAAT6yBwABPocBe7nLAAG+HwAC3vcAAuXHAALjxSsAAT8cAPz2LwABP4cBe7ucmwABP4QGEwABP7cBe7xRgA8AA+j89HMAAUA6BwABQA8Be7nLAAG99wAC3vQEAASsAwAC5bwDAAL0wPRzAAFA4gsAAUCvAXu6YIAEAASkAAErAAFBEAYHAAFBLwF7ucgbAALjxgiLAAFkbwABZJcAAWV4AAoGtAAAAAQPAAFkswABZXgAAAQAAlvlgA8AA/VEBWwIBAcAAWTkAAADAAG+JYQMBXwMAAF0DwAC42gFfAwEAAAHAAFlVAAAAgetgA8AA+/sBagBgA8AA/Q55XQPAALjeAV8DAQAABsAAuPKCIsAAYETAAGBOwABghQACgfEAAAABA8AAYFjAAGCFAAAAAgEBwABgYgAAAIHrYAPAAPv7AAHAAGBxAAAAlv9hAwFgA8AA/VFgA8AA+j8BagBgA8AA/Q55XQPAALjeAV8DAAAABsAAuPOCIsAAZZHAAGWbwABlugACgf4AAAABA8AAZafAAGW6AAAAAQEBwABlsQAAAIinYQMAXQPAALjaAVsAAF0DwAC43gFfAwAAAAbAALj0giLAAGb8wABnBsAAZxAAAsAAb5AAAAABA8AAZw7AAGcQAAAAAAAAAF0DwAC5jQFfAwAAAAbAALj1giLAAGl1wABpf8AAabUAAsAAb5EAAAABA8AAaYbAAGm1AAAAAgEBwABpkAAAAMAAb5JgA8AA+tsAAcAAaagAACDAAG+TYQMAXQPAALjaAV8DAAABagBgA8AA/Q55XQPAALjeAV8DAAAAAABe3PIAXt4GAF7fHQBe4PwAXuFtAF7iuABe5CQAXuoTAF7sPABe7dUAXu4fAF7wgQBe8PsAXvFkAF7xsABe8ekAXvJXAAAAEALAALj2giLAAGoQwABqFsAAa9QDwABvlAAAAWABwAD9UQABYAHAAPvOAgTAALj4giLAAGp/wABqhgkiAGADwAD96wAEwAC4+YIiwABqwsAAasoJgbMAYAPAAPrbAAEFwAC4/YIiwABqz8AAas/AAGr+AAAAA8AAat/AAGr+AAAAAgECwABq5QAABCJgA8AA/esAwABq9AAABIGzYAPAAPrbAWoAYAPAAP0OeQBgA8AAuPYBPwMIAcAAuPiAAMBe8yMIAcAAuPmBAMBe8zIJAcAAas/AAP1nAAAAAAEGwAC4+4IiwABrA8AAawrAAGvSAAAjAAAAAQPAAGsSwABr0gAAAAAAAABgA8AA/esBPgROwABrIsAAaykAAIF2YAPAAP3rASfAAG+UScAAa0MhHMAAa1AWwABrRy6Bs8AAuPlIAQABKwDAAPr4PYjAAGtZwF7zsCTAAGuEAifAAG+VFsAAa3sugbPAALj5P0nAAGuKIRzAAGuWFsAAa44uIsAAuPhIAQABKwDAAP36PYjAAGufwF7zsCTAAGu7A4DAAGuqwF7zsCeDVRbAAGuzLiLAALj4P0rAAGvBAYDAAGvIwF7zsAAAXvN8AF70YgAAAAECwAC4/oIiwABxAMAAcQ/AAIUZB5wvAAEAAIJ2YAPAAP1RAVsBYAHAAP1RAAAAAAYGwAC5AIIiwABzv8AAc8fAAHPuBAEAAAAAAQPAAHPQwABz7gAAAQAAgnZgA8AA/VEBWwAAAABdA8AAuP4BXwMBAAFKwABz1gEfwABz2sAAuRoAAV8DAQAAAAbAALkBgiLAAH1FwAB9TcAAfXgEAZmvAAAAAQPAAH1bwAB9eAAAAQAAgnZgA8AA/VEBWwAAAABdA8AAuP4BXwMBAAFKwAB9YQEfwAB9ZcAAuSEAAV8DAQAAAAbAALkDgiLAAH4TwAB+IcAAficBAoHcAAAAAQPAAH4nwAB+JwAAAAAAAABdA8AAuN4BXwMAAAAGwAC5BoIiwACACMAAgA3AAIAqAALAAG8dAAAAAQPAAIAVwACAKgAAAAEAAcAAgCMAACCAll0DwAC42gFfAwAAAWoAYAPAAP0OeQBcAAbAALkHgiLAAILHwACCzMAAgwAAAoHbAAAAAQPAAILZwACDAAAAAAIBAsAAguEAAACBxWADwAD9UQDAAIL0AAAAhkVgA8AA/b8BagBgA8AA/Q55AFwABsAAuQSCIsAAhQPAAIUMwACFFwECwABvHgAAAAEDwACFF8AAhRcAAAAAAAAAYAPAAPo/AAAAXvSfAF70+ABe9VIAXvWJAF711gBe9iwAXvZgAAAABgLAALkIghSCHIIrhS8HwABvlgABAACCdmADwAD9UQFbAWABwAD9UQABXQHAALj+AV8DAAABBMAAuQqCFIJmgn8JgdwAXQPAALlJAV8DAAABH4JzwAC5fAABXwMAAAAAAQXAALkTAAAAAAQAAAMAAAAAAAAAAABdA8AAuQgBXwMAAAE/AQkBAMAA/WcAAAAABAbAALkMghSChIKJgqYAAsAAbx0AAAABA4KRgqYAAAABAAGCnwAAIICWXQPAALjaAV8DAAABagBgA8AA/Q55AFwABsAAuQ2CFIKrgrCETgAAgdsAAAABA4K9hE4AAAACAQKCxQAAAIHFYAPAAP1RAILYAAAAhkVgA8AA/b8BagBgA8AA/Q55AFwBPgU9iILrwF73ch6C88AAuAEBAAGAgwHAXvdyAEmDDSEWgxkWgxIugdzAALkKwABvbMAAt73AALlXPTCDJx+DMcAA+6UBAAEnwABvlwA/ToNog3QAAIRXYAPAALzLARyDgxqDe8AAvRzAAG9jAgACgIORwF73coGDmMBe94AAwAC9MkmDqSEcg7mCg63AXvfpSAEAASsAwAD9Xj4CPYiDysBe93Ieg9LAALgBAQABFoPsgoPgwF736YHFwAC8zQA9iYP6wF73gBaEE4KEB8Be9+mGRcAAvM4/PRyEKS7AAG+HwAC3vQIAAoCEOMBe93KBhD/AXveAAMAAuQ8GwAC5D4IUhFOEWISLAALAAG+HwAC3vQAAAAEDhGaEiwAAAAICAoRuAAAAgcVgA8AA/VEAhIAAAACGRWADwAD9vwAAXAAGwAC5EYIUhQGFCoUtAQDAAG8eAAAAAQOFFoUtAAAAAAAAAGADwAD6PwFKhRkBIRaFIRaFGi6B3MAAuQrAAG9swAC3vcAAuVcAAF73EQBe91IAXviVAF742gBe+SIAAAAEAsAAuRSCFIUyhTiGdQPAAG+YAAEAAIJ2YAPAAP1RAVsBXQHAALkIAV8DAAAAAAABBcAAuRoAAAAABAAAAwAAAAAAAAAAAF0DwAC5FAFfAwAAAT8BCQEAwAC5EwAAAAACBsAAuRaCFIVlhWqF/gAAwABvHQAAAAEDhXKF/gAAAAEAAYWAAAAggJZdA8AAuNoBXwMAAAFqAGADwAD9DnkAXAE+AkmFjiEWhZoWhZMugdzAALkKwABvbMAAt73AALlXPTCFqB+FssAA+6UBAAEnwABvlwA/PRyF5RaF3i6B3MAAuQrAAG9twAC3vQEAAYCF9MBe+b0AwAC5cgbAALkYghSGA4YIhnMAAMAAb4fAALe9AAAAAQOGFoZzAAAAAgIChh4AAACBxWADwAD9UQCGMAAAAIZFYAPAAP2/AABcAT4BPRyGSRaGQi6B3MAAuQrAAG9/wAC3vQIAAoCGXcBe+luBhmTAXvppAMAAuXQAAF75mwBe+jUAXvqoAAAAAgLAALkbghSGeIZ+h7ADwABvmQABAACCdmADwAD9UQFbAV0BwAC5CAFfAwAAAAAAAQXAALkhAAAAAAQAAAMAAAAAAAAAAABdA8AAuRsBXwMAAAE/AQkBAMAAuRMAAAAAAgbAALkdghSGqoavhz4AAMAAbx0AAAABA4a3hz4AAAABAAGGxQAAIICWXQPAALjaAV8DAAABagBgA8AA/Q55AFwBPgJJhtMhFobfFobYLoHcwAC5CsAAb2zAALe9wAC5Vz0whu0fhvfAAPulAQABJ8AAb5cAPz0chyoWhyMugdzAALkKwABvfcAAt70BAAGAhzTAXvs7AMAAuW8GwAC5H4IUh0OHSIeuAADAAG+HwAC3vQAAAAEDh1aHrgAAAAICAodeAAAAgcVgA8AA/VEAh3AAAACGRWADwAD9vwAAXAE+AT0ch4kWh4IugdzAALkKwABvh8AAt70CAAKAh5jAXvvZgYefwF775wDAALlxAABe+xkAXvuzAF78JgAAAAICwAC5IoIUh7OHuZRKA8AAb5oAAgAAlk1gA8AA/VEBWwAAgnZgA8AA/VEBWwFgAcAA/VEAAA8EwAC5JIIUh+SH8QbAAFrsAGADwAD8BQFqh/BgA8AA/AUVBMAAuSWCFIgGiBMGwABvmwBgA8AA/AUBaogSYAPAAPwFIQTAALkmghSIKIg5BsAAb5wAYAPAAPwFAWqIOGADwAD8BYFXBMAAuSeCFIhOiGIGwABvnQBgA8AA/AUBaohhYAPAAPwFg0cEwAC5KIIUiHeIhQbAAG+eAGADwAD8BQFqiIRgA8AA/AUJBMAAuSmCFIiaiK8GwABvnwBgA8AA/AUBaoimYAPAAPwFFQTAALkqghSIxIjsBsAAb6AAYAPAAPwFAWqI4WADwAD8BVMEwAC5K4IUiQGJHAbAAG+hAGADwAD8BQFqiRNgA8AA/AUhBMAAuSyCFIkxiWAGwABvogBgA8AA/AUBaolRYAPAAPwFhBQEwAC5LYIUiXWJmQbAAG+jAGADwAD8BQFqiYlgA8AA/AWDRwTAALkvghSJ7Yn6GMAAb6TAALe9AF0DwAC5IgJbWwErBMAAuTCCFIpMilIJgXYAXQPAALlJAV8DAQAABMAAuTGCFIp+ioMJgk4AYAPAAPwFAATAALkyghSKyorSCZnBAGADwAD7+wAEwAC5M4IUiwSLEQnAAG9jAGADwAD7+wADBcAAuUaCFIsWixaL/gCBrQADiyqL/gAAAAMDA4s3AAAEgXZdA8AAuUkBXwMBAACLVAAAAMAAb4leAwABAQFfAwAAAAFXA8AAt8ECXwMAAF8DAQBdA8AAuNoBXwMBAACLZgAAAMAAb2NgA8AA+/sAAF0DwAC5IgJfAwAAXwMBAAE/BQgBwAC5MIAAwF7+YQgAwAC5MoGLiMBe/nQIAMAAuTOCi6nAXv6kCADAALkxIxyL14KLycBe/qRIAQABKwDAAPwAaoviYAPAAPwFFWqL7mADwAD8BVMBYAPAAPwFCQGLFsAA/WcAAAAABcAAuUeCFIwDjAOMmACB8QADjB2MmAAAAAMDA4wjAAAEgXZdA8AAuUkBXwMBAACMMAAABMAAb2NgA8AA+/sAjEQAAASZwWADwAD7+wAAXQPAALkiAl8DAABfAwEAAT8FCAHAALkwgADAXv9LCAHAALkzgQDAXv9eCAHAALkyggDAXv9uCADAALkxIxyMaIKMX8Be/25IAQABKwDAAPwAaoxzYAPAAPwFIWqMhWADwAD8BYQUAWADwAD8BQkBjAPAAP1nAAAAAAXAALlIghSMnYydjRUAgf4AA4y5jRUAAAACAgKMvwAABIF2XQPAALlJAV8DAQAAjMwAAASZwWADwAD7+wAAXQPAALkiAl8DAABfAwEAAT8FCAHAALkwgADAXwASCAHAALkygQDAXwAlCADAALkzKwgAwAC5MWqNBGADwAD8BYNHCQGMncAA/WcAAAAADgbAALk2ghSNGo0jjTgBAMAAb6XAALe9AAAAAQONKY04AAAAAAAAAGADwAC9FgFKjSwBFo0zFo0sLoF2wAC5MMAAb6XAALe9wAC5UwbAALk7ghSNPY1GjW4BAMAAb6YAAAABA41TjW4AAAAAAAAAYAPAAPo/AUqNVgEhHI1pHI1dFo1XLoJOwAC5MYN3AQABao1fYAPAAPwFFQDAAPwdSAEAAZMAwAD9KAbAALk8ghSNco17jaMBAMAAb6cAAAABA42IjaMAAAAAAAAAYAPAAPo/AUqNiwEhHI2eHI2SFo2MLoJOwAC5MYN3AQABao2UYAPAAPwFIQDAAPwdSAEAAZMAwAD9KAbAALk9ghSNp42wjd4BAMAAb6gAAAABA429jd4AAAAAAAAAYAPAAPo/AUqNwAEcjccWjcEugk7AALkxSAEAAWqNymADwAD8BYQUAMAA/SgGwAC5PoIUjeKN644aAQDAAG+pAAAAAQON+44aAAAAAAAAAGADwAD6PwFKjf4BHI4FFo3/LoJOwAC5MUgBAAFqjghgA8AA/AWDRwDAAP0oBsAAuTeCFI4fjjiOdAEAwABvqsAAt70AAAABA45BjnQAAAAAAAAAXgMAAQEBXwMAAAABVwPAALfBAl8DAABfAwEAXQPAALjaAV8DAQABPgJAFo5OLsAAb6bAALk7jk6OWgBKjmEBJo5hARaOaC6ZwcAAuTJeAwABAQFfAwAAAAFXA8AAt8ECXwMAAF8DAQBdA8AAuNoBXwMBAAbAALk4ghSOeY6Gjp8BAMAAb6vAALe9AAAAAQOOj46fAAAAAAAAAGADwAD7+wFKjpIBFo6SLsAAb2PAALkzBsAAuTmCFI6jjriO9gEAwABvrMAAt70AAAABA47DjvYAAAAAAAAAXgMAAQEBYAPAAP1RAAFXA8AAt8IAYAPAAPo/AT4CQBaO0C7AAG+owAC5PY7QjtwASo7jASaO4wEWjuoumcHAALkyXgMAAQEBYAPAAP1RAAFXA8AAt8IAYAPAAPo/BsAAuTqCFI77jw2PVwEAwABvrcAAt70AAAABA48hj1cAAAAAAAAAXgMAAAAAAAFXA8AAt8MAWwE+AkAWjy4uwABvqcAAuT6PLo89AEqPRAEmj0QBFo9LLpnBwAC5Ml4DAAAAAAABVwPAALfDAFsGwAC5P4IUj92P5pAyAQDAAG+uAAAAAQOP95AyAAAAAAAAAGADwAD6PwE+AkAWkAQuwABvp8AAuTyQBJAQAEqQFwEhHJAnFpAeLsAAb6vAALe9wAC5OEgBAAErAMAA/AAGwAC5QYIUkDeQQ5CmAADAAG+vAAAAAQOQTpCmAAAAAQEBkFEAACDAAG+wXwMAAAAAXQPAALjaAV8DAQABPgFKkGUBHJByFpBsLsAAb6XAALe9wAC5NqRxAgJdA8AAuNoBXwMBAF8DAAACFpCLLsAAb6rAALe9wAC5N4CQlcBfBHIAwAC9JAbAALlCghSQq5CwkUcAAMAAb7EAAAABA5DAkUcAAAABAQGQzAAAAMAAb7JgA8AAvMsAAGADwAD6PwE+AkmQ3iEWkOMuwABvqMAAuT1KkPEBKT9KkQIBHJEPFpEJLsAAb6XAALe9wAC5NqRxAgJgA8AA+j9gA8AA/VECFpEmLsAAb6zAALe9wAC5ORaRPYCRMsBfBPiBxcAAvM0AwAC9JAbAALlDghSRTJFYk9wAAMAAb4QAAAABA5Fjk9wAAAABAQGRbwAAAMAAb7JgA8AAvMsAAF0DwAC42gFfAwEAAT4DQCIWkYguwABvp8AAuTwAFpGYLsAAb67AALk/kYiRqABOkbORwQAAwABvY2ADwAD7+wEWkcguwABvY8AAuTNJkoQlkpaBkojAXwXXYQMCYAPAAP1RYAPAAP2/Wz4BSpLHASaSxwEcktQWks4uwABvpcAAt73AALk2pHMDA1tgA8AA/VFgA8AA/b8DFJMGwF8F1wEBYQMCYAPAAP1RYAPAAP2/WxaTIICTFcBfBZeBxcAAvM0WkzKAkyfAXwWXhkXAALzOAMAAvSVdA8AAuNoBXwMBAD4CQCWTZ4GTWcBfBddhAwFgA8AA/VFbk1mTggBKk4sBJpOLARyTmBaTki7AAG+lwAC3vcAAuTakcQICW2ADwAD9UQImk7IBgZOywF8F12EDAWADwAD9UVsWk8yAk8HAXwWXgcXAALzNAMAAvSRdA8AAuNoBXwMBAAbAALlEghST4ZPplEgAAMAAb7MAAAABA5P7lEgAAAAAAAAAWwE+AkAhFpQMLsAAb6fAALk8lAuUGABKlB8BHJQsFpQmLsAAb6XAALe9wAC5NoKbAQFbARaUMC7AAG+twAC3vcAAuToAwAC9IwAAXwCDAF8AzgBfASsAXwGIAF8B1wBfAiYAXwLAAF8C/gBfA4IAXwPwAF8EUABfBNYAXwV1AF8HAQBfB20AAAAOAsAAuUmCFJRNlFPAAGMbA7KBAWqUU2ADwADLLcABflsBAACCdmADwAD9UQFbAWABwAD9UQABXQHAALjeAV8DAAAJBMAAuUyCHKSApIgYwABvtMAAt70AYAPAAPv7ASsEwAC5TYIUlSeVOwbAAG+1wAC3vQBgA8AA/AUBapU6YAPAAPwFCQTAALlOghSWDJYlBsAAb7bAALe9AGADwAD8BQFqliRgA8AA/AUVBMAAuU+CFJb3lwgGwABvt8AAt70AYAPAAPwFAWqXB2ADwAD8BSEEwAC5UIIUl1eXZgbAAG+4wAC3vQBgA8AA/AUBapdlYAPAAPwFgVcEwAC5UYIUl7aXxQbAAG+5wAC3vQBgA8AA/AUBapfEYAPAAPwFg0cEwAC5UoIUmASYHRjAAGO1wAC3vQBgA8AA/AUBapgNYAPAAPwFCQTAALlTghSZLZkyCcAAb6XAALe9AGADwAC9FgAEwAC5VIIUm8ib2hjAAG+6wAC3vQBbASsFBcAAuXyCFJwNnA2cLQAAAAOcFJwtAAAAAAAAAF0DwAC5SQFfAwAAAT8CCADAALlTGpwmwAC9HAkBnA3AAP1nAAAAAAXAALl9ghScMpwynI8AwABvuwADnEOcjwAAAAEBAZxQAAAAgXZdA8AAuNoBXwMAAAAAXQPAALlJAV8DAAABPgE9HJx1LsAAb23AALe9AQABgJyEwF8JiQDAALlyAggAwAC5UxqcZ8AAvRwJAZwywAD9ZwAAAAAFwAC5foIUnNWc1Z0WAMAAb7wAA5zmnRYAAAACAgKc6QAAAICWXwMAAACc9QAABMAAb6VgA8AAvRYAAF0DwAC5SQFfAwAAAT4BPRydAi7AAG+9wAC3vQEAAYCdDMBfCf8AwAC5ZQIIAcAAuVOBAMBfCgsJAZzVwAD9ZwAAAAAFwAC5f4IUnRudG52jAMAAb74AA50xnaMAAAACAQKdNgAAAIHFWwCdSQAAAIZFYAPAAP2/AWoAYAPAAP0OeQBdA8AAuUkBXwMAAAE+AT0cnXkuwABvf8AAt70CAAKAnY3AXwp9gZ2UwF8KhgDAALl0AggAwAC5Uxqda8AAvRwJAZ0bwAD9ZwAAAAAFwAC5gIIUneyd7J4oAICWAAOd+Z4oAAAAAQEBnfwAAACAll8DAAAAAF0DwAC5SQFfAwAAAT8BCgCeCsAAuX4CAAKAnhTAXwsFGp4gwAC9HAAiBsAAuVeCFJ4tnjaeYAEAwABvbMAAt70AAAABA55DnmAAAAAAAAAAYAPAAPo/AUqeRgEcnk0WnkYuwABjtcAAt73AALlSSAEAAWqeUGADwAD8BQkAwAD9KAbAALlYghSeZJ5tnqIBAMAAb7/AALe9AAAAAQOegJ6iAAAAAAAAAGADwAD6PwFKnoMBHJ6KFp6DLsAAY7XAALe9wAC5UkgBAAFqno1gA8AA/AUVAMAA/SgGwAC5WYIUnqaer57hAQDAAG/AwAC3vQAAAAEDnr+e4QAAAAAAAABgA8AA+j8BSp7CARyeyRaewi7AAGO1wAC3vcAAuVKBawEAAWqezGADwAD8BRUAwAD9MwbAALlaghSe5Z7unxMBAMAAb8HAALe9AAAAAQOe+Z8TAAAAAAAAAGADwAD6PwFKnvwBHJ8DFp78LsAAY7XAALe9wAC5UkgBAAFqnwZgA8AA/AUhAMAA/SgGwAC5W4IUnxefIJ9EAQDAAG/CwAC3vQAAAAEDnyyfRAAAAAAAAABgA8AA+j8BSp8vARyfNhafLy7AAGO1wAC3vcAAuVKBbQEAAWqfOWADwAD8BYFXAMAA/TUGwAC5XIIUn0ifUZ9zAQDAAG/DwAC3vQAAAAEDn1ufcwAAAAAAAABgA8AA+j8BSp9eARyfZRafXi7AAGO1wAC3vcAAuVJIAQABap9oYAPAAPwFg0cAwAD9KAbAALlhghSfeJ99n/cAAMAAb8TAALe9AAAAAQOfiJ/3AAAAAQEBn5EAAACDRF0DwAC5SQFbAABcAT4DQBafpi7AAG/AwAC3vcAAuVmfpp+1AD0Xn7wuwABjtcAAt71qn8VgA8AA/AUhwAC5Uj0Xn9guwABvusAAt72An+3AXw11wAC5VAbAALl2ghSf/KAGohQAAIGtAAAAAQOgDaIUAAABAACW+WADwAD9UQFbAgEBoBoAAACBpmEDAV8DAABdA8AAuNoBXwMBAAABoDAAAACB62ADwAD7+wFqAGADwAD9DnldA8AAuN4BXwMBAAE+A06gRaBRAADAAG/FYAPAAL0WARqgWMAAvRxJoGUhHqBqwAD15gIAAoKgdMBfDkBqoIFgA8AAvZrAAX52AD4CPYiglcBfDf8coKWCoJnAXw5AwABvxgECXQPAALjaAV8DAQBfAwAAAYCgy8BfDf8AwAC9Kkmg1SEcoOGBoNnAXw4aSAEAASsAwAD8AD4BPYmhmsBfDhoeoaTAALgCAgACgaG6wF8OGoKhw8BfDkAAPz9KoeMBHKHqLsAAb8fAALe9AgFfAwEAAoCiBcBfDf+BogjAXw4aAMAAuWIGwAC5YoIUokKiTKMfAADAAG/HwAC3vQAAAAEDomajHwAAAQAAg8tgA8AA/VEBWwICAqJ6AAAAgaZhAwFfAwAAXQPAALjaAV8DAQAAoo8AAACB62ADwAD7+wAAXQPAALjeAV8DAQABPgNOoqmisAAAgXZdA8AAuUkBXwMBAAEforbAALl8AAFfAwEAAAA9HKLILsAAb1bAALe9AQABH6LZwAC5RgMCXwMAAF8DAQADgqL0wF8PgoCi/MBfD0qBov/AXw9kAADAALlpSqMOAYKjFcBfD4IGwAC5d4IUoySjLqSrAACB8QAAAAEDozikqwAAAAIBAaNCAAAAgetgA8AA+/sAAaNRAAAAlv9hAwFbYAPAAPo/AWoAYAPAAP0OeV0DwAC43gFfAwAAAT4ETqNwo3cAAIF2XQPAALlJAV8DAAABH6N9wAC5fAABXwMAAAAASaOPIR6jlMAA9eYCAAIWo6WCo57AXxBGwABvpcAAt73AALlTaqOsYAPAAL2awAF+dgA+Aj2Io8DAXxANHqPKwAC4AgIAAoCj4MBfEA0Wo/CCo+nAXxBGwABvpcAAt73AALlTAEmj/iEcpAeBpALAXxAcSAEAASsAwAD9Xj2JpBDAXxAcHKQkFqQegqQXwF8QRsAAb6XAALe9wAC5U8AAb8YBAmADwAD6P1sBgaQ6wF8QHADAAL0qPz89HKRLLsAAb1bAALe9AQABH6RcwAC5RwMCXwMAAF8DAAADgqR9wF8QRoCkhcBfEA2BpI7AXxAcAADAALlpSqSaAYKkocBfEEYGwAC5eIIUpLCkuqXYAACB/gAAAAEDpMal2AAAAAEBAaTPAAAAiKdhAwBbAABdA8AAuN4BXwMAAAE+BE6k6qTxAACBdl0DwAC5SQFfAwAAAR+k98AAuXwAAV8DAAAAAEmlCSEepQ7AAPXmAgACFqUfgaUYwF8RpsAAb6XAALe9wAC5U2qlJmADwAC9msABfnYAPgE9iKU6wF8RihylUBalSoGlQ8BfEabAAG+lwAC3vcAAuVPAAG/IAQFbAYClasBfEYoAwAC9KT89HKV9LsAAb1bAALe9AQABH6WOwAC5SAICXwMAAF8DAAACgaWxwF8RpoClucBfEYoAAMAAuWlKpccBgaXOwF8RpgbAALl5ghSl3aXnphMAAMAAb5AAAAABA6XvphMAAAAAAAAAXQPAALmNAV8DAAABSqX1AR6l+cAAuZUBAV8DAAABLgAGwAC5Y4IUphimHaZ1AADAAG/JwAC3vQAAAAEDpjCmdQAAAAAAAABcAT4CQBamQC7AAG9swAC3vcAAuVemQKZMAD0XplMuwABjtcAAt71qplxgA8AA/AUVwAC5UgbAALlkghSmeqZ/ptoAAMAAb8rAALe9AAAAAQOmlKbaAAAAAAAAAFwBPgJAFqakLsAAb7/AALe9wAC5WKakprYAPRemvS7AAGO1wAC3vWqmxmADwAD8BQnAALlSBsAAuV2CFKbfpu6nLwEAwABvy8AAt70AAAABA6b1py8AAAAAAAAAYAPAALzLAT4CQBanAi7AAG/DwAC3vcAAuVynAqcLAEqnEgEmpxIBFqcZLsAAb7rAALe9wAC5VGADwAC8ywbAALleghSnNKdAp4gBAMAAb8zAALe9AAAAAQOnTaeIAAAAAAAAAF0DwAC5SQFbAT4CQBanWi7AAG/BwAC3vcAAuVqnWqdkAEqnawEmp2sBFqdyLsAAb7rAALe9wAC5VF0DwAC5SQFbBsAAuWWCFKe2p7uoTAAAwABvvcAAt70AAAABA6fEqEwAAAABAQGnxwAAIICWXwMAAAAAXAE+A0AhFqfcLsAAb8LAALe9wAC5W6fbp+cAPReoFC7AAGO1wAC3vWqoHWADwAD8BYFXwAC5Uj0XqC4uwABvusAAt72AqEPAXxRhwAC5VAbAALlmghSoUahWqPYAAMAAb83AALe9AAAAAQOoZaj2AAAAAQEBqHEAAACBxWADwAC8ywAAXAE+A0AhFqiGLsAAb8LAALe9wAC5W6iFqJEAPReovi7AAGO1wAC3vWqox2ADwAD8BYNHwAC5Uj0XqNguwABvusAAt72AqO3AXxTjwAC5VAbAALlnghSo+6kAqWsAAMAAb87AALe9AAAAAQOpCalrAAAAAgICqREAAACBxWADwAD9UQCpIwAAAIZFYAPAAP2/AABcAT4BPRypNS7AAG/NwAC3vQEAAR+pScAAvNgCAAKAqVTAXxVngalbwF8VdQAAwAC5ZgbAALloghSp/KoBqqwAAMAAb8/AALe9AAAAAQOqDaqsAAAAAQEBqhYAAACDRF0DwAC5SQFbAABcAT4EQCEWqiwuwABvwsAAt73AALlbqiuqNwBAFqpMgKpFwF8V3MAAb8LAALe9wAC5W6pFqlcAPReqXi7AAGO1wAC3vRaqboCqZ8BfFdzAAGO1wAC3vcAAuVLAALlSPReqei7AAG+6wAC3vRaqloCqj8BfFdzAAG+6wAC3vcAAuVTAALlUBsAAuWmCFKqxqratngAAwABvVsAAt70AAAABA6rCrZ4AAAABAQGq0wAAAKmSXQPAALkiAltbAABcAT4CQByrARaq84Cq6sBfFpjAAG+kwAC3vcAAuS9IAQABKwDAAP1equqrCABJqw8WqxMuwABvwMAAt73AALlZPgI9F6s1gKsswF8WmMAAb6TAALe9Jqs1ARarRS7AAG+6wAC3vcAAuVRdA8AAuSICW1vAALkvPRerXy7AAG+6wAC3vYCrdMBfFpjAALlUPgNJq5EWq5UuwABvwcAAt73AALlaPgNOrEusUgAAg0RdA8AAuUkBWwEWrFQuwABvzMAAt73AALleSaxqIRasdoGsb8BfF1DAAG/CwAC3vcAAuVs+Aj0crJaBrI/AXxdQwABvVsAAt70BAAGArKPAXxaYAMAAuWlKrLgAPz0crNIuwABvz8AAt70BAAGBrN/AXxdQAMAAuWg/QBas/S7AAG/CwAC3vcAAuVus/a0IAD0crUYWrUAuwABvpcAAt73AALlTwABv0AEAATStWAOtWK2TAAAAAAAAAGADwAD9DgE+AT0erWXAALl1AgACLoCtgcBfFpgAAMAAvTMGwAC5aoIUraOtqLGQAADAAG/RwAC3vQAAAAEDrbmxkAAAAAEBAa3KAAAAwABQbV0DwAC5IgJbWwAAXAE+Akmt2xyt6YCt38BfGFlIAQABKwDAAP1eSq3yAD9Jrf4WrgIuwABvwMAAt73AALlZPgNOriuuPQAAwABv0l0DwAC5IgJbWwEmrisBFq4/LsAAb7rAALe9wAC5VF0DwAC5IgJbWz0XrlkuwABvusAAt72Arm7AXxhZwAC5VEmufyEcrpWBroPAXxijSAEAASsAwAD9Xj4DTq64rr8AALkGXQPAALkiAltbAYCuwcBfGFlDrtQhHK7wFq7igq7bwF8ZB8AAb6TAALe9wAC5L0gBAAErAMAA/V4+AT2KrwXAXxkHFq8Vgq8OwF8ZB8AAb6TAALe9wAC5Lz0Xrz2CrzbAXxkHwABvpMAAt72Br03AXxijwAC5Lz8+BEmvexavfy7AAG/BwAC3vcAAuVo+A06wNbA8AACDRF0DwAC5SQFbARawPi7AAG/MwAC3vcAAuV5JsFQhFrBggbBZwF8ZnsAAb8LAALe9wAC5Wz4CPRywgIGwecBfGZ7AAG/RwAC3vQEAAYCwksBfGFkAwAC5akqwqAA/PRywwi7AAG/PwAC3vQEAAYGwz8BfGZ4AwAC5aD9AFrDtLsAAb8LAALe9wAC5W7DtsPgAPYixAcBfGFkcsQ0uwABv08AAt70BAAGAsR/AXxhZAMAAuWw9HLE3FrExLsAAb6XAALe9wAC5U8AAb9ABAAE0sUkDsUmxhQAAAAAAAABgA8AA/Q4BPgE9HrFWwAC5dQIAAi6AsXLAXxhZAADAAL0zBsAAuWuCFLGVsaWytQAAwABv1MAAt70AAAABA7G1srUAAAAAAAAAXQPAALkiAltbAT4EQCEWsi0uwABvwsAAt73AALlbsiyyOABOsk+yVwAAXl0DwAC5IgJbWwEmsk8BFrJZLsAAb7rAALe9wAC5VF0DwAC5IgJbWz0XsnEuwABvusAAt70rwAC5VEqykAEcspcuwABv08AAt70BAAGAsqnAXxrvAMAAuWwGwAC5bIIUsrqyyrP3AADAAG/TwAC3vQAAAAEDstuz9wAAAAEBAbLsAAAAwABQbV0DwAC5IgJbWwAAXQPAALkiAltbAT4ETrMNAAAAwABnsl0DwAC5IgJbWwBOsyezLwAAXl0DwAC5IgJbWwGAszHAXxt0Q7NAIRyzT4KzR8BfG6lIAQABKwDAAP1ePgROs3CzdQAAg7BdA8AAuSICW1sBFrN/grN3wF8bqcAAb6TAALe9wAC5Lz0Xs5yCs5TAXxupwABvpMAAt72Bs6zAXxuVwAC5Lz2Js7jAXxuVgrO/wF8bqT2Ks87AXxupg7PYwF8b3Eqz6AGBs+/AXxuVBsAAuW2CFLTxtP26PQABwABv1cAAt70AAAABA7UQuj0AAAACAgK1GAAAAINEXQPAALjeAVsAtSgAAACCRV0DwAC5SQFbAABcAT4EQCEWtUWBtT7AXxyBwABvwsAAt73AALlbtT21UABAISW1ZYC1XsBfHHFdA8AAuUkBW7VetXAAPRy1v4G1uMBfHIHAAG/JwAC3vQAAAADAALljSz4BPRy17YC15sBfHHGBrQIBWwE0tfIDtfK3RQAAAAEBAbXzAAAAgJZbAABgA8AA/Q4BPgNAFrYSgbYLwF8cgcAAb7/AALe9wAC5WLYLtiQAPRy234G22MBfHIHAAG/KwAC3vQAAAADAALlkPRy3LIG3JcBfHIHAAG99wAC3vQEAAYK3NsBfHQkAwAC5bwGB6zS4YwO4Y7jqAAAAAgECuGQAAACBxVsAuHcAAACGRWADwAD9vwFqAGADwAD9DnkAYAPAAP0OAT4CQBa4nIG4lcBfHIHAAG+/wAC3vcAAuVi4lbiuAD0cuMCBuLnAXxyBwABvh8AAt70CAAKCuM/AXx2Gg7jWwF8djwDAALlxwAC48QEBuPNbAbj6AAABg01bAAG4/QAAAYhHYAPAAP2/AD4BPR6578AAuCIBAAE0ugEDugG6MgAAAAAAAABgA8AA/Q4BPgE9HLoVgboOwF8cgcAAb4fAALe9AgACgrokwF8d/4O6J8BfHgkAwAC5cQAGwAC5boIUuta64rz3AAHAAG/WwAC3vQAAAAEDuvK89wAAAAICArr7AAAAg0RdA8AAuUkBWwC7CwAAAIJFXQPAALlJAVsAAFwBPgNAFrsngbsgwF8enMAAb8DAALe9wAC5WbsguzYAQ7tkFrtygLtrwF8ejMAAb8HAALe9wAC5Wj4BPYi7hsBfHowWu5aAu4/AXx6MwABvzMAAt73AALleSbuuFru5gLuywF8ejMAAb8LAALe9wAC5Wz4DTrveu+gAAMAAUG1dA8AAuSICW1sBHLvxgbvqwF8enMAAb9TAALe9AAAAAMAAuWs9HLwSgbwLwF8enMAAb8/AALe9AQABgLwfwF8ejADAALloPR68LsAAuXUCAAKBvETAXx6cgrxMwF8fIgA+A068e7yFAADAAFBtXQPAALkiAltbASa8ewEWvI6BvIfAXx6cwABvusAAt73AALlUXQPAALkiAltbPRy8r4G8qMBfHpzAAG/EwAC3vQEAAYC8u8BfHowAwAC5YT0cvNGAvMrAXx6MwABv0cAAt70BAAGCvOPAXx+PAMAAuWoGwAC5b4IUvPy9Ab5yAADAAG99wAC3vQAAAAEDvQq+cgAAAAEBAb0XAAAggJZdA8AAuNoBXwMAAAAAXAE+AkAhFr0sLsAAb8LAALe9wAC5W70rvTcASb0+Jb1IgL1CwF8gMF0DwAC43gFfAwAAPgFJvV4lvWgUvWLAXyAwAAFdA8AAuN4BXwMAAF0DwAC5SQFfAwAAPgE9Hr2BwAC5bgIAAhS9ksBfIDAAAV0DwAC5SQFfAwAALgA+AT0evbfAALltAgACFL3LwF8gMAABXQPAALjeAV8DAAAuAD4DTr4Evg4AAMAAUG1dA8AAuSICW1sBHL4QLsAAb9TAALe9AAAAAMAAuWs9HL4qLsAAb73AALe9AQABJr40AYC+NMBfIDBfAwAAAMAAuWU9Hr5CwAC5dQIAAi6Bvl7AXyDnAAbAALlwghS+d758v04AAMAAb4jAALe9AAAAAQO+jr9OAAAAAQEBvpEAACCAll8DAAAAAFwBPgVAIRa+pi7AAG/CwAC3vcAAuVu+pb6xAEAhJb7FgL6/wF8hbV0DwAC43gFfAwAAvr++0gBOvuq+9AAAwABQbV0DwAC5IgJbWwEcvvYuwABv1MAAt70AAAAAwAC5az0cvw4uwABvvcAAt70BAAGAvxjAXyFtAMAAuWU9Hr8kwAC5dQIAAi6Bv0DAXyGyAAbAALlxghS/U79YwABALwAAwABvh8AAt70AAAABA79mwABALwAAAAIBAr9uAAAAgcVgA8AA/VEAv4EAAACGRWADwAD9vwFqAGADwAD9DnkAXAE+BEAhFr+cLsAAb8LAALe9wAC5W7+bv6cATr+/v8kAAMAAUG1dA8AAuSICW1sBHL/LLsAAb9TAALe9AAAAAMAAuWs9HL/jLsAAb87AALe9AgACgL/twF8iNIG/9MBfIkIAwAC5Zz0ewABABcAAuXUCAAIugsAAQCHAXyJ2AAbAALlyghTAAEA0wABAOcAAQ5YAAMAAb23AALe9AAAAAQPAAEBHwABDlgAAAAEBAcAAQFQAACCAll0DwAC42gFfAwAAAABcAT4EQCEWwABAaS7AAG/CwAC3vcAAuVvAAEBowABAdABJwABC5iXAAELwgMAAQurAXyMJXQPAALjeAV8DAAA+Aj0cwABDBi7AAG/XwAC3vQEAARTAAEMTwF8jCQABXQPAALjeAV8DAAAAwAC5c0rAAEMhAD89HMAAQzMuwABvycAAt70AAAAAwAC5Yz0cwABDVBbAAENOLsAAb6XAALe9wAC5U8AAb9ABAAE0wABDZgPAAENmwABDkQAAAAAAAABgA8AA/Q4BPgE9HMAAQ3EuwABviMAAt70BAAEmwABDhAGAwABDhMBfIwlfAwAAAMAAuXAAwAC9MwbAALlzghTAAEObwABDoMAARX4AAMAAb9fAALe9AAAAAQPAAEOswABFfgAAAAEBAcAAQ7cAACCAll0DwAC43gFfAwAAAABcAT4CScAAQ8QlwABDzoDAAEPIwF8kR10DwAC5SQFfAwAAPgJJwABD5RbAAEPvFMAAQ+nAXyRHAAFdA8AAuUkBXwMAAMAAb8PAALe9wAC5XD4CPRzAAERJLsAAb8nAALe9AAAAAMAAuWM9HMAARG4WwABEaC7AAG+lwAC3vcAAuVPAAG/QAQABNMAARIADwABEgMAARLcAAAAAAAAAYAPAAP0OAT4BPR7AAESPwAC5bgIAAhTAAESgwF8kRwABXQPAALlJAV8DAAAuAADAAL0zPgE9HsAARNHAALluAgACFMAAROLAXyRHAAFdA8AAuUkBXwMAAC4ASsAARP4APz0ewABFWsAAuW0CAAKAwABFbsBfJEcuAAbAALl0ghTAAEWDwABFiMAARkYAAMAAb3/AALe9AAAAAQPAAEWbwABGRgAAAAICAsAARZwAAACBxVsAwABFrgAAAIZFYAPAAP2/AABcAT4DQCEWwABFyC7AAG/CwAC3vcAAuVvAAEXHwABF0wA9HMAARdsuwABvycAAt70AAAAAwAC5Yz0cwABF/BbAAEX2LsAAb6XAALe9wAC5U8AAb9ABAAE0wABGDgPAAEYOwABGQQAAAAAAAABgA8AA/Q4BPgE9HMAARhkuwABvh8AAt70CAAKAwABGKMBfJaOBwABGL8BfJa4AwAC5cQDAAL0zBsAAuXWCFMAARsDAAEbMwABfbQABwABv2MAAt70AAAABA8AARuHAAF9tAAAAAgICwABG6gAAAINEXQPAALlJAVsAwABHAgAAAMAAUG1dA8AAuSICW1sAAFwBPgFDwABHEylBPg1AFsAARzaAwABHL8BfJpLAAG/CwAC3vcAAuVvAAEcvwABHQQBOwABHT8AAR1gAAMAAb9lgA8AA+j8BFsAAR2GAwABHWsBfJpLAAG/DwAC3vcAAuVxJwABHchzAAEeAgcAAR3bAXyakSAEAASsAwAD9Xj4CScAAR5OCwABHl8BfJuw+Ak7AAEe4wABHwwAAwABvsmADwAC8ywEWwABHzIDAAEfFwF8mksAAb8vAALe9wAC5XT0cwABH+hbAAEflgMAAR97AXyaSwABvpcAAt73AALlTwABv2gIAAhbAAEgZg8AASA7AXydLgcXAALzNFsAASCuDwABIIMBfJ0uGRcAAvM4AwAC9ID9KwABISgA/Q8AASSchHMAASUYWwABJOIHAAEkuwF8mpMAAb6TAALe9wAC5L0gBAAErAMAA/V4+BE7AAElpwABJcgAAqZJdA8AAuSICW1sBgcAASXTAXyakPYnAAEmHwF8mpBbAAEmcg8AASZPAXygIwABvpMAAt73AALkvPRfAAEm8g8AASbPAXygIwABvpMAAt70rwAC5Lz0ewABJ2sAAuXUCAAKAwABJ8MBfJpKDwABJ+MBfKAgATsAASiHAAEoqAACpkl0DwAC5IgJbWwGBwABKLMBfJqROwABKQ8AASlAAAcAAb7BbARbAAEpZgMAASlLAXyaSwABvusAAt73AALlUTsAATCjAAEw5AADAAG/bYAPAAPo/AYLAAEw7wF8m7E7AAExPwABMZAAAwABv3FsBhMAATGbAXyioScAATVkiIoLAAE1dwF8m7AEWwABNcoPAAE1pwF8oiMAAb6bAALk7ARbAAE2Lg8AATYLAXyiIwABvqcAAuT4+Ck7AAE2rwABNsAAApHVgA8AAvRYBFsAATbuDwABNssBfKIjAAG+lwAC3vcAAuTZJwABNyiKCwABNzsBfJuwAIRzAAE3oFsAATeKAwABN28BfJpLAAG+lwAC3vcAAuVPAAG/dAQABh8AATfjAXylMAMAAvSE+A07AAE5MwABOVwAAwABvsmADwAC8ywEWwABOYIDAAE5ZwF8mksAAb8vAALe9wAC5XT0cwABOjhbAAE55gMAATnLAXyaSwABvpcAAt73AALlTwABv2gIAAhbAAE6tFMAATqLAXynBCACBxcAAvM0WwABOvxTAAE60wF8pwQgAhkXAALzOAMAAvSBKwABO1gA/TsAATvYAAADAAG/eYAPAAL0WAEnAAE8HIR7AAE8MwAD15gIAAhrAAE8bwAC9HIfAAE8kwF8pTAA+AT0VwABPZcBfKlAIHsAAT3TAAL04AQABh8AAT3vAXylMAD9PwABQI8AAUCgAAAHAAG/fYQMAXAADwABQQsAAVcQAAAAAAAAAXAE+BUAhFsAAURKDwABRCcBfKIjAAG+mwAC5O8AAUQjAAFEeAEAhFsAAUTyDwABRM8BfKIjAAG+nwAC5PMAAUTLAAFFIAE7AAFFZAAAAwABv4FsASz4BPRXAAFGFwF8rFwocwABRn4PAAFGWwF8oiMAAb7MAAAAAwAC5RAEBwABRwVsBwABRyAAAAYNNWwABwABRywAAAYhHYAPAAP2/AD4DScAAUdwigsAAUeDAXybsAB7AAFHswAD15gIAAhbAAFIEFsAAUf2AwABR9sBfJpLAAG/LwAC3vcAAuV2BxcAAvM0UwABSC8BfK1QLAAA+AT2OwABSH8BfKPIWwABSPYDAAFI2wF8mksAAb8vAALe9wAC5XT4BPY7AAFJowF8o8h/AAFKDwAC82AIAAhTAAFKOwF8rVAsAFMAAUpHAXytgDAAAPY3AAFKvwF8o0ylKwABS1ABJwABS8iXAAFMFFMAAUvbAXysXCgBdA8AAuN4BWz4EScAAUx4iJcAAUzEUwABTIsBfKxcKAV0DwAC43gFbXQPAALlJAVsAFsAAU04UwABTP8BfKxcKAV0DwAC5SQFbwABvwsAAt73AALlbPgJJwABTaxbAAFN+FMAAU2/AXysXCgFdA8AAuUkBW8AAb8PAALe9wAC5XD4CPY7AAFObwF8o8hbAAFPBFMAAU7LAXysXCgFdA8AAuUkBW8AAb8vAALe9wAC5XT2NwABT2cBfKNMpP0rAAFROAD9OwABVIsAAVTEAAMAAb+FdA8AAuUkBWwGAwABVM8BfJpI9jsAAVUfAXyjyHMAAVW0UwABVXsBfKxcKAV0DwAC43gFbga0BAVsBNMAAVXIDwABVcsAAVYcAAAABAQHAAFVzAAAAgLVbAABdA8AAuUkBWwFKwABVeQEUwABVecBfLP4LAADAALjxPY3AAFWWwF8o0yo/T8AAVc/AAFXUAAABwABv4mEDAFwAA8AAVefAAFbQAAAAAAAAAFwBPgFLPgE9jsAAVgjAXyjyHMAAViiDwABWH8BfKIjAAG+vAQABhMAAVjTAXyioAMAAuUEBAcAAVk9bAcAAVlYAAAGDTVsAAcAAVlkAAAGIR2ADwAD9vwA+Aj2OwABWasBfKPIfwABWhcAAvNgCAAIUwABWkMBfLfILABTAAFaTwF8t/gwAAD2NwABWo8BfKNMpT8AAVtvAAFbgAAABwABvhGEDAFwAA8AAVuvAAFkxAAAAAAAAAFwBPgFLPgJOwABXF8AAVyIAAMAAb7JgA8AAvMsBFsAAVyuAwABXJMBfJpLAAG/LwAC3vcAAuV1JwABXPyIcwABXTIPAAFdDwF8oiMAAb7EBAAEUwABXXcBfLnUMAADAALlCABbAAFeFg8AAV3zAXyiIwABvrsAAuT8+Aj2OwABXp8BfKPIcwABXx4PAAFe+wF8oiMAAb4QBAAEUwABX08BfLnUMAADAALlDPY3AAFfuwF8o0yo/AQHAAFgiWwHAAFgpAAABg01bAAHAAFgsAAABiEdgA8AA/b8APgJJwABYPR7AAFhBwAD15gIAAhbAAFhZFsAAWFKAwABYS8BfJpLAAG/LwAC3vcAAuV2BxcAAvM0UwABYYMBfLysMAAA+AT2OwABYdMBfKPIWwABYkoDAAFiLwF8mksAAb8vAALe9wAC5XT4BPY7AAFi9wF8o8h/AAFjYwAC82AIAAhTAAFjjwF8vKwwAFMAAWObAXy83DQAAPY3AAFkEwF8o0ylJwABZPBbAAFlJg8AAWUDAXyiIwABvqcAAuT4+AT0cwABZgBTAAFlmwF8qsAkAIAAAAAAAScAAWZMhgsAAWZjAXybsPgFJwABZrhbAAFm7g8AAWbLAXyiIwABvpsAAuTs+AT0cwABZ6hTAAFnXwF8tlgoAIAAAAAAAPz4BScAAWhUWwABaIoPAAFoZwF8oiMAAb6fAALk8PgE9HMAAWkkUwABaPsBfLk0LACAAAAAAAD9JwABapSEcwABasRTAAFqpwF8qUAgASAEAASsAwAD9Xj0ewABav8AAvTkBAAEUwABaxsBfKlAIAAA/ScAAW18lwABbeIbAAFtjwF8o8l0DwAC43gFbPgROwABblsAAW6IAAMAAb+NdA8AAuN4BWwEmwABblgGGwABbpMBfKPJdA8AAuN4BW07AAFwxwABcOAAAgXZdA8AAuUkBWwEWwABcQ4PAAFw6wF8oiIF2wAC5MEnAAFxVJcAAXGUUwABcWcBfMPQMAF0DwAC5SQFbPgFJwABcfxbAAFyPFMAAXIPAXzD0DAFdA8AAuUkBW8AAb8LAALe9wAC5Wz4EPYnAAFyswF8mpBzAAFy/FMAAXLjAXzEjDQDAAG/UwAC3vQAAAADAALlrPRzAAFzoFMAAXOHAXzEjDQDAAG/PwAC3vQEAARTAAFz1wF8w9AwBXQPAALlJAVsAwAC5aD2IwABdEcBfJpIUwABdGsBfMPQMAV0DwAC5SQFbQsAAXTUAPgE9HsAAXWLAALluAgACFMAAXXPAXzD0DAFdA8AAuUkBWxTAAF2AwF8xIw0AAD4BPR7AAF22wAC5bQIAAhTAAF3KwF8w9AwAFMAAXdfAXzEjDQAASsAAXfYAPz9OwABeHsAAXiUAAIF2XQPAALlJAVsBFsAAXjCDwABeJ8BfKIiBdsAAuTA9icAAXj7AXyakHMAAXlGHwABeSsBfMnTAAG/UwAC3vQAAAADAALlrScAAXmshhcAAXnDAXyjTPgE9HMAAXpOHwABejMBfMnTAAG+9wAC3vQEAAYbAAF6dwF8o8gDAALllPgJOwABe1sAAXuEAAMAAb7JgA8AAvMsBJsAAXtYBhsAAXuPAXyjyYAPAALzLPRzAAF8Ih8AAXwHAXzJ0wABvzcAAt70BAAEUwABfGMBfMwEIAADAALlmPYjAAF9UwF8mkofAAF9dwF8ydAbAALl6ghTAAF9ywABffMAAYxkAAMAAb5EAAAABA8AAX4PAAGMZAAAAAgEBwABfjQAAAMAAb5JgA8AA+tsAAcAAX6UAACDAAG+TYQMAXQPAALjaAV8DAAABagBgA8AA/Q55XQPAALjeAV8DAAABPgZJwABfuRbAAF+9LsAAb8LAALe9wAC5W0rAAF/KAR/AAF/VwAC5fQEBXwMAAAEuAD9OwABf/cAAYAQAAIF2XQPAALlJAV8DAAABH8AAYArAALl8AAFfAwAAAABOwABgIgAAAMAAb+RgA8AAvL4AScAAYC0cwABgO4HAAGAxwF8zp0gBAAErAMAA/V4+AT2LwABgTMBfNDMewABgWMAAvMACAAKAwABgXsBfM5Q0wABgaQPAAGBpwABg2gAAAAAAAABgA8AA/Q4BPgE9HMAAYH2CwABgdsBfNAnAAG+HwAC3vQEAAR/AAGCdwAC4/QIAAifAAG/lgMAAYMbAXzOUAADAALlxAD4DTsAAYPXAAGD6AACkdWADwAC9FgEawABhAcAAvRw9icAAYRDAXzOnHMAAYSGEwABhHMBfNN/AAG/IAQFdA8AAuNoBXwMAAAGBwABhMsBfM6cAwAC9KT2LwABhRMBfNDMewABhUMAAvMACAAKAwABhVsBfM5Q0wABhYQPAAGFhwABh9gAAAAAAAABgA8AA/Q4BPgFLPgE9HMAAYYWCwABhfsBfNAnAAG99wAC3vQEAARzAAGGUhMAAYY/AXzTfgpsBAV0DwAC42gFfAwAAAYHAAGGYwF8zpwDAAL0jAMAAuW8BAcAAYa9bAcAAYbYAAAGDTVsAAcAAYbkAAAGIR2ADwAD9vwA+AT0cwABhz4LAAGHIwF80CcAAb4fAALe9AgAChcAAYd7AXzXGhsAAYeHAXzXSAMAAuXEAPRzAAGIILoGtAgFbATTAAGINA8AAYg3AAGJ8AAAAAQEBwABiEAAAAIDyXwMAAAAAYAPAAP0OAT4BScAAYhsWwABiJYPAAGIfwF80M4ilwAC8yj4CPRzAAGI/g8AAYjnAXzQznFUAAAAAwAC8xD0cwABiWILAAGJRwF80CcAAb4jAALe9AQABhMAAYmvAXzY3AMAAuXA/AYHrNMAAYocDwABih8AAYwEAAAACAgLAAGKIAAAAg01bAMAAYpYAAACIR2ADwAD9vwAAYAPAAP0OAT4BScAAYqEWwABiq4PAAGKlwF80M4ilwAC8yj4CPRzAAGLFg8AAYr/AXzQznFUAAAAAwAC8xD0cwABi3oLAAGLXwF80CcAAb4fAALe9AgAChMAAYu3AXzbDhcAAYvDAXzbOAMAAuXE/wAC5dkrAAGMIAYLAAGMPwF80CQAAXws7AF8LkwBfC+sAXwxEAF8MnABfDPYAXw1PAF8N0wBfDxgAXw/tAF8RagBfEnQAXxK3AF8TEwBfE28AXxPTAF8UOwBfFL0AXxVBAF8VtgBfFnIAXxgzAF8apABfG04AXxxLAF8eZgBfIAoAXyFHAF8iCgBfItkAXyQXAF8lcwBfJmIAXzNoAF83YQAAACICwAC5gYIVgQ+BFYGOA8AAb+YAAAFgAcAA/VEAAAIEwAC5g4IVgUKBSgmZwQBeAwAAAAAAAVcDwAC3xABcAATAALmEghWBYoFmGIOwAGADwAC5gQErAQXAALmGghWBaoFqgYwAAAADgX2BjAAAAAEBAYGDAAAEmcFeAwAAAAAAAVcDwAC3xABcAABgA8AAuYEBPwIIAcAAuYOAAMBfOGMJAYFqwAD9ZwAAAAAAAABfOJ4AAAAAAsAAuYeCFZJwknaTDQPAAG/nAWqSdmADwADLLcABflsAAWABwAD9UQAAAAEFwAC5jAAAAAAEAAADAAAAAAAAAAAAYAPAALmHAT8BCQEAwAD9ZwAAAAABBsAAuYqCHYEVgSqB9AABwABv6MAAt70BaoEqYAPAAMstwAF+WwAAAQOBPIH0AAAAAQEBgUIAAACZwWEDAFwAAFwBPgJJgVQcgXQagWvAALhMSAEAASsAwAD9Xj4BPTCBhR+Bj8AA+5cBAAEnwABv6QA/PRyB5hqB3sAAuEwgAQABgIHnwF85MQAAAABfOP4AXzmIAAAAAQLAALmNghaOno6twADjTweb2QABAACCdmADwAD9UQFbAWABwAD9UQAAAQTAALmQghaOrQAElkjAALe9AFsBMQBbARoAwAC5kgIFwAC5w4IWjruOu47DAAAAA47BjsMAAAAAAAAAXQPAALmNAV8DAAABPwEJAY67wAD9ZwAAAAAFwAC5xYIWj62Ps4/FAYZbwAC3vQADj8OPxQAAAAAAAABdA8AAuY0BXwMAAAE/AQkBj7PAAP1nAAAAAC4GwAC5koIWkGSQcpCSBEmFngAAAAEDkH6QkgAAAQAAgnZgA8AA/VEBWwAAAABdA8AAuY0BXwMBAAE9NQAAAACCbVsBGgDAALvUNQAAAACWSV8DAQABKxMAAAbAALmTghaS45Lrk4kEAYCWAWqS1GADwADLQMABfocAAAEDkveTiQAAAQAAgnZgA8AA/VEBWwEBAZL6AAAAgJZfAwEAAABdA8AAuY0BXwMBAAFKkwoBFpODNZMLAAABAF0DwAC6hwFfAwEAAR+TC8AAuokEAV8DAQAEKysrKwA1AAAAAQBbARyTS4GTScBfOwOzs8AAt70BAAGAk1DAXzriAMAAumQ1AAAAAQBbARyTZYGTY8BfOwPAAG/rwAC3vQAAAADAALpjgQDAXzsDgfXAALpRBsAAuZSCFpaAloiXVQQBgcUBapZxYAPAAMtAwAF+hwAAAQOWlJdVAAABAACCdmADwAD9UQFbAgEClpwAAACBxWADwAD9UQCWrwAAAIZFYAPAAP2/AWoAYAPAAP0OeQBdA8AAuY0BXwMBAAFKlsUBFpdPNZbGAAABAF0DwAC6hwFfAwEAAR+WxsAAuokEAV8DAQAEKysrKwA1AAAAAQBbARyXBoKXBMBfO/DAAG9owAC3vQIAAoCXEMBfO7aBlxfAXzvEAMAAumU1AAAAAQBbARyXMYKXL8BfO/DAAG/rwAC3vQAAAADAALpjggDAXzvwgfXAALpRBsAAuZWCFpgnmC+aigQBwABv7AAAAAEDmECaigAAAQAAgnZgA8AA/VEBWwEBAZhLAAAAgdxdA8AAuN4BXwMBAAAAXQPAALmNAV8DAQABPgNOmUKZTQAAwABeZV0DwAC6QAFfAwEAAR+ZW8AAupEEAV8DAQAEKysrKwA9HJmYgJmRwF88oYGtAgFbATSZnQOZnZnuAAAAAQEBmZ4AAACAll8DAQAAAGADwAD9DgE+Aj0cmbiBma3AXzzEs7PAALe9AQABgpm9wF89DADAALpkPRyZ1oGZy8BfPMTAAG/rwAC3vQAAAADAALpjAYHrNJn5A5n5mmcAAAACAgKZ+gAAAIHFWwCaAQAAAIZFWwAAYAPAAP0OAT4CPRyaIIGaFcBfPMTAAG9owAC3vQIAAoKaKsBfPW4mmjEBg5oxwF89d2ADwAD9vwDAALplPRyaT4GaRMBfPMTAAG/rwAC3vQAAAADAALpjwAC48UqabgEWmoCBmnXAXzzEgfXAALpRBsAAuZaCFpzKnNKhWgQBwABv7QAAAAEDnOShWgAAAQAAgnZgA8AA/VEBWwEBAZz5AAAAwABvgl0DwAD8ZwFdA8AAuN4BXwMBAAAAXQPAALmNAV8DAQABPgdOnR2dKAAAwABeZV0DwAC6QAFfAwEAAR+dNsAAupEEAV8DAQAEKysrKwBOnXCddgAAgO5gA8AA/AUBk06eMJ44AADAAG+JYQMBXwMBAGADwAD9DgE0njoDnjqezQAAAAEBAZ49AAAAgJZfAwEAAABgA8AA/Q4BPgFJnkwhFp5cgZ5RwF8+SrkawAC6Wz4CPRyee4GecMBfPkqzs8AAt70BAAGDnoDAXz6rAMAAumRJnpAcnpyKnpbAXz50HJ6Ugp6WwF8+dIGNAQABlADAAP0rSAEAAZMAwAD9KD0cnq2BnqLAXz5KwABv68AAt70AAAAAwAC6Yz8/Tp7Xnt8AAIHrYQMCW2ADwAD9v2ADwAD9DgE0nuEDnuGfkAAAAAICAp7iAAAAgcVbAJ70AAAAoOJgA8AA/b8AAGADwAD9DgE+AUmfAyEWnxOBnwjAXz5KuRrAALpbPgI9HJ8ygZ8nwF8+SsAAb2jAALe9AgAChJ88wF8/aIWfQ8BfP3EAwAC6ZUmfUxyfX4qfWcBfPnQcn1eCn1nAXz50gY0BAAGUAMAA/StIAQABkwDAAP0oPRyfcIGfZcBfPkrAAG/rwAC3vQAAAADAALpjPz9GoGighKBxAAAAgdxdA8AAuN4BXwMBAACAoHvAXz4ePgI9iqCMwF8+dBygkYKgjMBfPnRkAQABlADAAP0qPRygooWgm8BfQBaBrQIBWwGDoKfAXz6FAYHrhKC5wF8/QcAAuPFJoQUcoQ+CoQnAXz50SAEAAZMAwAD9KD0eoRXAALgiAQABFqEygaEnwF8+SoKIwAC6bgA/SqE+ARahUIGhRcBfPkqB9cAAulEGwAC5l4IWo8SjzKRaBAHAAG/uAAAAAQOj36RaAAABAACCdmADwAD9UQFbAQEBo+wAAACIRV0DwAD8ZwFfAwEAAABdA8AAuY0BXwMBAAE+AUqj/AEfpAfAALswAQFfAwEAATSkKAOkKKRVAAAAAAAAAF0DwAC7MQFfAwEAAUqkLgEfpDLAALs7AQFfAwEAAYCkTMBfQOoAAAbAALmYghalsKW4q1MEAcAAb+8AAAABA6XHq1MAAAEAAIJ2YAPAAP1RAVsCAQKl0QAAAKD/YAPAAPrbAKXiAAAAwABvfGEDAWADwAD8BV8DAQABagBgA8AA/Q55AF0DwAC5jQFfAwEAAT4ITqYSAAAAwABv5GADwAC8vgBOpiGmMgAAwABv8GADwAD8BQGTTqZPAAAAwABeZV0DwAC6FQFfAwEAAE6mrqa0AADAAG/xYAPAAP3TAR+musAA/eoAAAAAT6bMptEAAAHAAG/yYQMAXAADptqn5QAAAAAAAABcAT4EPRym64Wm5cBfQfqc0AAAAADAAP3hTqb8AAAAEl8DAQAASacIIRynGIGnDMBfQZBIAQABKwDAAP1ePgFLPgE9j6c7wF9CTRynTYGnQsBfQZAgAQABNQAAAAEAYAPAAPwFAYOnTsBfQdE1AAAAAQBgA8AA/AUBi6dOwF9B0RynXhQAwF9CjAgAZAEAAZQAwAD9KhQAwF9CjAgAAAABAadtWwGndAAAAYNNWwABp3cAAAGIR2ADwAD9vwA+Aj0cp5GEp4bAX0HknBYCAAIUp5rAX0LYCAAUp53AX0LiCQAAwAC6KkqnqwA/PRyn1oSny8BfQeRWAQABh6fawF9CTQDAALopT6fsp/EAAAHAAG/zYQMAXAADqAOogQAAAAAAAABcAT4CQByoG4KoFcBfQcBIAQABKwDAAP1eqBWoIgA9iqgrwF9BwB6oN8AAvMECAAKAqEbAX0GCNKhOA6hOqHoAAAABAQGoVQAAAMAAb+RgA8AAvL4AAGADwAD9DgE+AT0cqG+GqGbAX0IZIAAAAAAAAD2MqIjAX0HkHqiZwAC6IQUBXwMBAAAFma8pwABvJTSo1AOo1KkbAAAAAAAAAGADwAD9DgE+Aj0cqOmFqOPAX0H6agAAAADAAP3fPRypDoeo/MBfQzwgAAAAAADAAG9NNKkuA6kuqYYAAAAAAAAAYAPAAP0OAT4DPRypQ4KpPcBfQcCcVQAAAADAALzEPYqpV8BfQcArPRypdYWpb8BfQfqkawAAAADAAP3gwABvJjSpmgOpmqqkAAAAAAAAAGADwAD9DgE+BEAcqbaCqbDAX0HASAEAASsAwAD9Xqmwqb0ATqnTqdsAAIGfYAPAAPrbARap44Wp3cBfQfqBn8AA/eU9HKn8han2wF9B+moAAAAAwAD93z2Kqg/AX0HAHqobwAC8wAIAAhyqKICqIcBfQYKBjQEAARSqKsBfRKgIAADAAPrxNKozA6ozqpgAAAAAAAAAYAPAAP0OAT4DPYqqRMBfQcArPRyqcIeqXsBfQzwgAAAAAAA9HKqJhqqAwF9CGSAAAAAAAADAAG8nNKq4A6q4qzAAAAAAAAAAXQPAALlJAWADwAD9DgE+A0mqxyEcqtGCqsvAX0HASAEAASsAwAD9Xj0cquCCqtrAX0HAnFUAAAAAwAC8xD89iqr0wF9BwCtKqwwBGqsawAC44UqrNwEWq0mEqz7AX0HkgfXAALoXBsAAuZmCFrGcsaSyLgQBwABv9AAAAAEDsbuyLgAAAQAAgnZgA8AA/VEBWwICArHKAAAAg0RdA8AAuY0BWwCx3AAAAMAAb/VhAwFdA8AAudMBXwMBAF0DwAC50wFbAABdA8AAuY0BXwMBAAE+AUqx/gEfsgnAALyNAgJbXwMBAAKAshrAX0X1gbIiwF9GBQAGwAC5m4IWs1izabOvAAHAAG/2AAAAAQOzd7OvAAACAACWTWADwAD9UQFbAACCdmADwAD9UQFbAQEBs4IAAACDRF0DwAC5jQFfAwEAAABdA8AAuY0BXwMCAAFKs5MBH7OXwADLvQECXwMBAF8DAgABgLOowF9GkAAGwAC5vIIWs/Cz+bQNAQDAAG80AAAAAQO0BbQNAAAAAAAAAGADwAD6PwFKtAgBKgbAALmcgha4L7g5uQQAAMAAb/cAAAABA7hKuQQAAAACAAACuFgAAADAAG8lYQMBXQPAALnGAV8DAABcAWoAYAPAAP0OebiRAAAAwABvJ2EDAV0DwAC5xgFfAwAAXAFqAGADwAD9DnldA8AAuY0BXwMAAAE+AUq4xgEfuNHAALurAwFfAwAAAy6AuO3AX0cggbj3wF9HQgAGwAC5nYIWv3C/hr/fAAKB+QAAAAEDv4y/3wAAAAQBAb+SAAAAwABvPGEDAV8DAABcAAO/swAAAIHrYAPAAPv7AWoAYAPAAP0Oeb/BAAAAg4lhAwBcAWoAYAPAAP0Oeb/QAAAAwABvCWADwAD6PwFqAGADwAD9DnldA8AAucYBXwMAAAAGwAC5noIWwABCBcAAQg/AAEJZAACBpQAAAAEDwABCFMAAQlkAAAABAQHAAEIaAAAAlv9hAwFfAwAAYAPAAPo/AABdA8AAuY0BXwMAAAE+AUrAAEIvAR/AAEI6wAC7/QIBXwMAAAIugMAAQlDAX0hCAAbAALmfghbAAEdNwABHV8AAR6YAAICrAAAAAQPAAEddwABHpgAAAQAAlk1gA8AA/VEBWwEBAcAAR2AAAACIvmEDAV8DAABfAwEAAABdA8AAuY0BXwMBAAE+AUrAAEd4AR/AAEeDwAC8BgICXwMAAF8DAQACLoDAAEeawF9IvwAGwAC5oIIWwABJIcAASSvAAE6mAADAAG/4AAAAAQPAAEk2wABOpgAAAQAAg8tgA8AA/VEBWwEBAcAASUMAAACIvmEDAV8DAABdA8AAuNoBXwMBAAAAXQPAALmNAV8DAQABPgVOwABJdAAAAMAAXmVdA8AAuj0BXwMBAABOwABJmgAAAIH4XQPAALnGAV8DAAAAT8AASa3AAEmyAAABwABvJWEDAFwAA8AASbrAAEx+AAAAAAAAAFwBPgROwABJy8AASc8AAVZhAwFfAwEAXAEWwABJ3IHAAEnRwF9JbFbAALopQCIlwABJ+YHAAEnuwF9JbF0DwAC6QAFfAwEAASXAAEopgcAASh7AX0lsXQPAALhwAVvAAEnuwABKRgBOwABKVcAASl4AAZwWYQMCYAPAAP1RYAPAAP2/XAEWwABKa4HAAEpgwF9JbMAAb2jAALe9wAC61j2KwABKfMBfSYQcwABKkC6B+QMAATTAAEqXA8AASpfAAExKAAAAAQEBwABKmgAAAJu6XwMAAAAAYAPAAP0OAT4DTsAASrcAAACFLl0DwAC42gFfAwEAAEs+AT2PwABK2cBfSp8cwABK64DAAErkwF9JQCABAAGGwABK7MBfSoYAAAEBwABK/lsBwABLBQAAAYNNWwABwABLCAAAAYhHYAPAAP2/AD4CPRzAAEsigcAASxfAX0lsnBYCAAIUwABLK8BfSuYIABTAAEsuwF9K8gkAAMAAuipKwABLPABJwABLViXAAEtjh8AAS1rAX0qfXQPAALjeAV8DAQA+Aj0cwABLioLAAEt9wF9JhIH7AAAAAMAAucw9HMAAS+EcwABLtRTAAEudwF9KnwcBXQPAALjeAV8DAQCBrQIBXAGEwABLusBfScMBgeuFwABLyMBfSibAALjxgf4BAAEWwABL+4LAAEvuwF9JhIIEwAC5zQDAALjzPgE9HMAATCqBwABMH8BfSWxWAQABJsAATC4Bh8AATC7AX0qfXwMBAADAALopAoHrhcAATFXAX0omg4kWwABMcoHAAExnwF9JbIKIwAC6K8AAuZ1JwABMhRbAAEyOLsAAbzTAALm8PgE9icAATKPAX0lsJsAATKMBHsAATLTAALoiAwFfAwEAAAPAAG8lg8AATOfAX0mewABvJzTAAE0FA8AATQXAAE04AAAAAAAAAGADwAD9DgE+AT0cwABNI4LAAE0WwF9JhJxVAAAAAMAAuciZryldA8AAuj0BXwMBAD4BPYnAAE1kwF9JbCbAAE1kAR7AAE11wAC6IQUBXwMBAAAFwABvJYPAAE2ewF9JnsAAb000wABNuwPAAE27wABN7QAAAAAAAABgA8AA/Q4BPgE9HMAATdmCwABNzMBfSYSB+wAAAADAALnMwABvJjTAAE4DA8AATgPAAE42AAAAAAAAAGADwAD9DgE+AT0cwABOIYLAAE4UwF9JhIIEAAAAAMAAuc3AAG8nNMAATkwDwABOTMAATmcAAAAAAAAAXQPAALjeAVsBSsAATlIBHMAATl+CwABOUsBfSYScVQAAAADAALnIma8pXQPAALo9AV8DAQBKwABOigEWwABOnIHAAE6RwF9JbIH1wAC6FwbAALmhghbAAFI4wABSQsAAV08AAMAAb/kAAAABA8AAUlDAAFdPAAABAACDy2ADwAD9UQFbAQEBwABSWwAAAIi+YQMBXwMAAF0DwAC5jQFfAwEAAABdA8AAuY0BXwMBAAE+BU7AAFKMAAAAwABeZV0DwAC6PQFfAwEAAE7AAFKyAAAAgfhdA8AAucYBXwMAAABPwABSxMAAUskAAAHAAG8lYQMAXAADwABS0cAAVScAAAAAAAAAXAE+AkAiJcAAUu6BwABS48BfTiFdA8AAukABWwElwABTG4HAAFMQwF9OIV0DwAC4cAFbwABS48AAUzgAPYrAAFNBwF9OORzAAFNVLoH5AwABNMAAU1wDwABTXMAAVLIAAAABAQHAAFNfAAAAm7pfAwAAAABgA8AA/Q4BPgNOwABTegAAAMAAb/pdA8AAuY0BXwMBAABLPgE9jcAAU53AX07xHMAAU7CAwABTqcBfTfUgAQABhMAAU7HAX07YAAABAcAAU8NbAcAAU8oAAAGDTVsAAcAAU80AAAGIR2ADwAD9vwA+Aj0cwABT54HAAFPcwF9OIZwWAgAChsAAU/DAX086h8AAU/PAX09GAMAAuipKwABUAQBJwABUGyEcwABUKYXAAFQfwF9O8UgBAAErAMAA/V4+Aj0cwABUS4LAAFQ+wF9OOYH7AAAAAMAAucw9HMAAVH4cwABUaYHAAFRewF9OIZwYAQABhcAAVHPAX07xAMAAuiyB/gEAARbAAFSYgsAAVIvAX045ggTAALnNAMAAuPM/AoHrFsAAVNKBwABUx8BfTiHAAG9owAC3vcAAutaDiRbAAFUbgcAAVRDAX04hgojAALorwAC5nUnAAFUuFsAAVTcuwABvNMAAubw+AT2JwABVTMBfTiEmwABVTAEewABVXcAAuiIDAV8DAQAAA8AAbyWDwABVkMBfTlPAAG8nNMAAVa4DwABVrsAAVeEAAAAAAAAAYAPAAP0OAT4BPRzAAFXMgsAAVb/AX045nFUAAAAAwAC5yJmvKV0DwAC6PQFfAwEAPgE9icAAVg3AX04hJsAAVg0BHsAAVh7AALohBQFfAwEAAAXAAG8lg8AAVkfAX05TwABvTTTAAFZkA8AAVmTAAFaWAAAAAAAAAGADwAD9DgE+AT0cwABWgoLAAFZ1wF9OOYH7AAAAAMAAuczAAG8mNMAAVqwDwABWrMAAVt8AAAAAAAAAYAPAAP0OAT4BPRzAAFbKgsAAVr3AX045ggQAAAAAwAC5zcAAbyc0wABW9QPAAFb1wABXEAAAAAAAAABdA8AAuN4BWwFKwABW+wEcwABXCILAAFb7wF9OOZxVAAAAAMAAuciZryldA8AAuj0BXwMBAErAAFczARbAAFdFgcAAVzrAX04hgfXAALoXBsAAuaKCFsAAXUvAAF1VwABdxgAAwABvhAAAAAEDwABdYMAAXcYAAAACAQHAAF1qAAAAgetgA8AA+/sAAcAAXXkAAACW/2EDAVtgA8AA+j8BagBgA8AA/Q55XQPAALmNAV8DAAABPgFKwABdjQEfwABdmMAAvBkDAV8DAAADLoDAAF20wF9SBYHAAF29wF9SFgAGwAC5o4IWwABhP8AAYUnAAGGqAACEjwAAAAEDwABhUsAAYaoAAAEAAJZNYAPAAP1RAVsBAQHAAGFfAAAAiL5hAwFfAwAAXQPAAPxnAV8DAQAAAF0DwAC5jQFfAwEAAT4BSsAAYXkBH8AAYYTAALwPAgJfAwAAXwMBAAIugMAAYZ7AX1KhAAbAALmkghbAAGRVwABkXMAAZNYAAMAAb/sAAAABA8AAZGDAAGTWAAAAAQEBwABkcwAAIMAAb/xdA8AAueUBXwMAAAAAXQPAALjeAVsBPgFKwABkiQEcwABkrxzAAGSfgMAAZJDAX1MdnBgBAAEuAMAAueeBrQEBWwE0wABktAPAAGS0wABk0QAAAAEBAcAAZLUAAACAtVsAAF0DwAC43gFbAUrAAGS7ARzAAGTKgMAAZLvAX1MdgogAAAAAwAC56ADAALjxBsAAuaWCFsAAaYbAAGmQwABp9QAAgfYAAAABA8AAaZzAAGn1AAABAACWTWADwAD9UQFbAQEBwABptQAAIMAAb/1dA8AAufICXwMAAF8DAQAAAF0DwAC5jQFfAwEAAT4BSsAAac4BHMAAaeeAwABp1cBfU+yeewEAAS4AwAC5/AbAALmmghbAAGzvwABs+cAAcUsAAJZAAAAAAQPAAGz/wABxSwAAAAEBAcAAbQIAACCHHWEDAl8DAABfAwAAXwMAAAAAXQPAALjeAV8DAAABPgZOwABtM8AAbToAAIF2XQPAALlJAV8DAAABH8AAbUDAALl8AAFfAwAAAABOwABtV8AAbWEAAMAAb/5gA8AA+j8BKk7AAG1wAAAAgJZfAwAAAE7AAG2OAAAAgfhdA8AAucYBWwA9jMAAbaDAX1TYHMAAbbQugfkEAAE0wABtxAPAAG3EwABu9QAAAAEBAcAAbccAAACWJl8DAAAAAGADwAD9DgE+AUnAAG3cgsAAbeDAX1SyPgE9HsAAbfnAALgLAwFfAwAAAzTAAG4GA8AAbgbAAG4jAAAAAAAAAF8DAAABSsAAbgwBHMAAbhOAwABuDMBfVF8gAgACg8AAbhTAX1TJhcAAbhvAX1UTAAA0wABuJQPAAG4lwABuYQAAAAEBAcAAbigAAACFLl8DAAAAAGADwAD9DgE+AT2LwABuQsBfVMmGwABuSsBfVaYewABuY8AAuA4CAAKEwABuesBfVNiBwABuiMBfVIgAAD4CPYvAAG6xwF9UyYXAAG65wF9VEz2KwABuzsBfVLIpA4HrFsAAbw+BwABvCMBfVIjAAG+HwAC3vcAAuXGDiTTAAG8vA8AAby/AAHEWAAAAAAAAAGADwAD9DgE+AUnAAG8+IYLAAG9DwF9Usj4BSz4BPTDAAHA+HsAAcFnAAM4nAAAAAAEBwABwdFsBwABwewAAAYNNWwABwABwfgAAAYhHYAPAAP2/AD4BPR7AAHCRwAC3/wMAA4HAAHCswF9UiIXAAHC0wF9WfYbAAHC3wF9WiQA+AT0cwABw74HAAHDowF9UiMAAb33AALe9AQABg8AAcPnAX1TJAMAAuW/AAG8JKcAAuZ1KwABxOgGBwABxQcBfVIgGwAC5p4IWwAB0CMAAdBLAAHY3AACDWQAAAAEDwAB0GcAAdjcAAAEAAJZNYAPAAP1RAVsCAgLAAHQcAAAAljxfAwEAAMAAdCwAAACHHWEDAl8DAQBfAwAAXwMBAAAAXQPAALjeAV8DAQABPgVOwAB0XcAAdGQAAIF2XQPAALlJAV8DAQABH8AAdGrAALl8AAFfAwEAAABOwAB0fsAAdIQAAICWXwMBAAGAwAB0hsBfVzxOwAB0qwAAAIH4XQPAALnGAVsAPYzAAHS9wF9XuBzAAHTRLoH5BAABNMAAdOEDwAB04cAAdZcAAAABAQHAAHTkAAAAliZfAwAAAABgA8AA/Q4BPgE9HsAAdPnAALgLAwFfAwEAAzTAAHUGA8AAdQbAAHUjAAAAAAAAAF8DAQABSsAAdQwBHMAAdROBwAB1DMBfV0ogAgACg8AAdRTAX1edhcAAdRvAX1fzAAA0wAB1JQPAAHUlwAB1XQAAAAEBAcAAdSgAAACFLl8DAQAAAGADwAD9DgE+AT2LwAB1QMBfV52GwAB1SMBfWHYewAB1X8AAuA4CAAKEwAB1dsBfV7iCwAB1hMBfV3MAAAOB6xbAAHWxgsAAdarAX1dzwABvh8AAt73AALlxg4k0wAB10QPAAHXRwAB2AgAAAAAAAABgA8AA/Q4BPgE9HMAAdeeCwAB14MBfV3PAAG99wAC3vQEAAYPAAHXxwF9XnQDAALlvwABvCSnAALmdSsAAdiYBgsAAdi3AX1dzBsAAuaiCFsAAeErAAHhZwAB7BgAAWAAAAAEDwAB4XcAAewYAAAABAAHAAHhmAAAAga9gA8AA/esBasAAeHJgA8AA/euEEgBdA8AAuN4BYAPAAP3rAT4GTsAAeI3AAHiUAACBdl0DwAC5SQFgA8AA/esBH8AAeJrAALl8AAFgA8AA/esAAE7AAHi+wAB4xQAAgotgA8AA/jUBH8AAeMvAAP5UAAAAAE7AAHjyAAAAgfhdA8AAucYBWwBOwAB5CcAAeQ8AAIMZYAPAAPo/ASk9i8AAeRvAX1nlHMAAeS8ugfkEAAE0wAB5PwPAAHk/wAB6WgAAAAEBAcAAeUIAAACWJl8DAAAAAGADwAD9DgE+A0nAAHlXIYTAAHlcwF9Z+D4BPRzAAHl4gsAAeXHAX1nEgooBAAGAwAB5fsBfWWcAwAD+ST89jMAAeaDAX1n4Kks+AT0cwAB50oLAAHnLwF9ZxIKKAQABhcAAedjAX1o1AMAA/kkBAcAAee5bAcAAefUAAAGDTVsAAcAAefgAAAGIR2ADwAD9vwA+AT0ewAB6CcAAuA0EAASDwAB6KMBfWeWBwAB6NsBfWZaGwAB6PsBfWrmHwAB6QcBfWsUAA4HrFsAAenSBwAB6bcBfWZbAAG+HwAC3vcAAuXGDiTTAAHqUA8AAepTAAHrRAAAAAAAAAGADwAD9DgE+AT0cwAB6qoHAAHqjwF9ZlsAAb33AALe9AQABHMAAeruCwAB6tMBfWcQjAAAAAMAA/k4AwAC5b8AAbwkpwAC5nUrAAHr1AYHAAHr8wF9ZlgbAALmpghbAAHz/wAB9DMAAfz0AAIMXAAAAAQPAAH0UwAB/PQAAAAEBAcAAfRwAAADAAG//YAPAAP1RAABdA8AAuN4BYAPAAPo/AT4ETsAAfTjAAH0/AACB3F0DwAC5SQFgA8AA+j8BH8AAfUXAALl8AAFgA8AA+j8AAE7AAH1tAAAAgfhdA8AAucYBWwA9isAAfX/AX1wQHMAAfZMugfkEAAE0wAB9owPAAH2jwAB+nQAAAAEBAcAAfaYAAACWJl8DAAAAAGADwAD9DgE+AT0ewAB9u8AAuAsDAWADwAD6PwM0wAB9yAPAAH3IwAB94QAAAAAAAABgA8AA+j8BSsAAfc4BHMAAfdeDwAB9z8BfXEtIAQABgMAAfdrAX1u+AMAA/V40wAB94wPAAH3jwAB+YwAAAAEBAcAAfekAAADAAELbYAPAAPo/AABgA8AA/Q4BPgFJwAB+AITAAH4EwF9czD4BPR7AAH4dwAC4DwMAA4LAAH4twF9cEIHAAH47wF9b4ikAPx7AAH5lwAC4DgIAAoLAAH58wF9cEIHAAH6KwF9b4gAAA4HrFsAAfreBwAB+sMBfW+LAAG+HwAC3vcAAuXGDiTTAAH7XA8AAftfAAH8IAAAAAAAAAGADwAD9DgE+AT0cwAB+7YHAAH7mwF9b4sAAb33AALe9AQABKgDAALlvwABvCSnAALmdSsAAfywBgcAAfzPAX1viBsAAuaqCFsAAgIXAAICMwACClgAAg/gAAAABA8AAgJPAAIKWAAAAAQEBwACAmQAAAIinYQMBXwMAAFwAAF0DwAC43gFbAT4ETsAAgLrAAIDBAACB3F0DwAC5SQFbAR/AAIDHwAC5fAABWwAATsAAgOkAAACB+F0DwAC5xgFbAD2KwACA+8BfXhwcwACBDy6B+QQAATTAAIEfA8AAgR/AAIH3AAAAAQEBwACBIgAAAJYmXwMAAAAAYAPAAP0OAT4BPR7AAIF8wAC4CwMBWwM0wACBkgPAAIGSwACBpwAAAAAAAABcAUrAAIGYARzAAIGegMAAgZjAX13ZIAEAAYPAAIGfwF9eVwAANMAAgakDwACBqcAAga8AAAABAQHAAIGqAAAAgLVbAABgA8AA/Q4BPgAewACBv8AAuA4CAAKCwACB1sBfXhyBwACB5MBfXfgAAAOB6xbAAIIRgcAAggrAX134wABvh8AAt73AALlxg4k0wACCMQPAAIIxwACCYQAAAAAAAABgA8AA/Q4BPgE9HMAAgkeBwACCQMBfXfjAAG99wAC3vQEAASsAwAC5b8AAbwkpwAC5nUrAAIKFAYHAAIKMwF9d+AbAALmrghbAAISvwACEvMAAhuwAAJY2AAAAAQPAAITBwACG7AAAAAEBAcAAhMcAAACW/2EDAV8DAABgA8AA+j8AAF0DwAC43gFgA8AA+j8BPgROwACE7MAAhPMAAIHcXQPAALlJAWADwAD6PwEfwACE+cAAuXwAAWADwAD6PwAATsAAhSEAAACB+F0DwAC5xgFbAD2KwACFM8BfX/YcwACFRy6B+QQAATTAAIVXA8AAhVfAAIZNAAAAAQEBwACFWgAAAJYmXwMAAAAAYAPAAP0OAT4BPR7AAIVvwAC4CwMBYAPAAPo/AzTAAIV8A8AAhXzAAIWPAAAAAAAAAGADwAD6PwFKwACFggEcwACFhoDAAIWCwF9fnyABAAGDwACFh8BfYDEAADTAAIWRA8AAhZHAAIYTAAAAAQEBwACFlwAAAMAAQttgA8AA+j8AAGADwAD9DgE+AUnAAIWuIYTAAIWzwF9grz4BPR7AAIXMwAC4DwMAA4LAAIXcwF9f9oHAAIXqwF9fyCoAPx7AAIYVwAC4DgIAAoLAAIYswF9f9oHAAIY6wF9fyAAAA4HrFsAAhmeBwACGYMBfX8jAAG+HwAC3vcAAuXGDiTTAAIaHA8AAhofAAIa3AAAAAAAAAGADwAD9DgE+AT0cwACGnYHAAIaWwF9fyMAAb33AALe9AQABKQDAALlvwABvCSnAALmdSsAAhtsBgcAAhuLAX1/IBsAAuayCFsAAiQPAAIkQwACLPQAAgdQAAAABA8AAiRPAAIs9AAAAAQEBwACJGQAAAJb/YQMBXwMAAGADwAD6PwAAXQPAALjeAWADwAD6PwE+BE7AAIk+wACJRQAAgdxdA8AAuUkBYAPAAPo/AR/AAIlLwAC5fAABYAPAAPo/AABOwACJcwAAAIH4XQPAALnGAVsAPYrAAImFwF9iFBzAAImZLoH5BAABNMAAiakDwACJqcAAip0AAAABAQHAAImsAAAAliZfAwAAAABgA8AA/Q4BPgE9HsAAicHAALgLAwFgA8AA+j8DNMAAic4DwACJzsAAieEAAAAAAAAAYAPAAPo/AUrAAInUARzAAInYgMAAidTAX2G9IAEAAYPAAInZwF9iTwAANMAAieMDwACJ48AAimMAAAABAQHAAInpAAAAwABC22ADwAD6PwAAYAPAAP0OAT4BScAAigCEwACKBMBfYs0+AT0ewACKHcAAuA8DAAOCwACKLcBfYhSBwACKO8BfYeYpAD8ewACKZcAAuA4CAAKCwACKfMBfYhSBwACKisBfYeYAAAOB6xbAAIq3gcAAirDAX2HmwABvh8AAt73AALlxg4k0wACK1wPAAIrXwACLCAAAAAAAAABgA8AA/Q4BPgE9HMAAiu2BwACK5sBfYebAAG99wAC3vQEAASoAwAC5b8AAbwkpwAC5nUrAAIssAYHAAIszwF9h5gbAALm9ghbAAIz8wACNDMAAjjEBAGEAAAABA8AAjRPAAI4xAAAAAAAAAF0DwAC43gFgA8AA/AUBPgROwACNJsAAjS0AAIHcXQPAALlJAWADwAD8BQEfwACNM8AAuXwAAWADwAD8BQAATsAAjUvAAI1RAACA7mADwAD8BQGTPRzAAI1fLoH5BAABNMAAjW8DwACNb8AAjZEAAAABAQHAAI1wAAAAgLVfAwAAAABgA8AA/Q4BPgE9icAAjX/AX2QZHMAAjYSBwACNf8BfZBlkAQABlADAAP0qA4HrFsAAjauAwACNpMBfY+vAAG+HwAC3vcAAuXGDiTTAAI3LA8AAjcvAAI38AAAAAAAAAGADwAD9DgE+AT0cwACN4YDAAI3awF9j68AAb33AALe9AQABgcAAjevAX2QZAMAAuW/AAG8JKcAAuZ1KwACOIAGAwACOJ8BfY+sGwAC5voIWwACQMMAAkEHAAJGuAQCBVQAAAAEDwACQScAAka4AAAAAAAAAXQPAALjeAWADwAD6PwE+BE7AAJBdwACQZAAAgdxdA8AAuUkBYAPAAPo/AR/AAJBqwAC5fAABYAPAAPo/AABOwACQkgAAAIH4XQPAALnGAVsAPYnAAJCkwF9lbhzAAJC4LoH5BAABNMAAkMgDwACQyMAAkQ8AAAABAQHAAJDJAAAAgLVfAwAAAABgA8AA/Q4BPgE9HsAAkNjAALgPAwADgcAAkOjAX2VugMAAkPbAX2VAKgADgesWwACRKYDAAJEiwF9lQMAAb4fAALe9wAC5cYOJNMAAkUkDwACRScAAkXkAAAAAAAAAYAPAAP0OAT4BPRzAAJFfgMAAkVjAX2VAwABvfcAAt70BAAEpAMAAuW/AAG8JKcAAuZ1KwACRnQGAwACRpMBfZUAGwAC5rYIWwACSg8AAko3AAJK1AACWOAAAAAEDwACSlMAAkrUAAAEAAJb5YAPAAP1RAVsAAAAAXQPAALmNAV8DAQABSsAAkpoBHsAAkqHAALmbAQJfAwAAXwMBAAEuAAbAALmughbAAJQywACUQsAAlYkAAICtAAAAAQPAAJRIwACViQAAAAAAAABdA8AAuN4BXQPAAPypAV8DAAABPgROwACUWcAAlGAAAIF2XQPAAPypAV8DAAABMcAAlGVfAwAAAE7AAJR+wACUhQAAgdxdA8AAuUkBXQPAAPypAV8DAAABH8AAlIvAALl8AAFdA8AA/KkBXwMAAAAAPRzAAJSoLoH5BAABNMAAlLgDwACUuMAAlOgAAAABAQHAAJS7AAAAEl8DAAAAAGADwAD9DgE+AT0cwACU1IDAAJTNwF9m91YBAAGCwACU2MBfZ3EAwAD8ugOB6xbAAJUCgcAAlPvAX2cawABvh8AAt73AALlxg4k0wACVIgPAAJUiwACVVAAAAAAAAABgA8AA/Q4BPgE9HMAAlTiBwACVMcBfZxrAAG99wAC3vQEAAYDAAJVCwF9m9wDAALlvwABvCSnAALmdSsAAlXgBgcAAlX/AX2caBsAAua+CFsAAmAfAAJgWwACZYAAAlRkAAAABA8AAmBvAAJlgAAAAAAAAAF0DwAC43gFdA8AA/ZwBXwMAAAE+BE7AAJgrwACYMgAAgXZdA8AA/ZwBXwMAAAEewACYOMAAwRcAAV8DAAAAAE7AAJhWwACYXQAAgdxdA8AAuUkBXQPAAP2cAV8DAAABH8AAmGPAALl8AAFdA8AA/ZwBXwMAAAAAPRzAAJh/LoH5BAABNMAAmI8DwACYj8AAmL8AAAABAQHAAJiSAAAAEl8DAAAAAGADwAD9DgE+AT0cwACYq4DAAJikwF9oZ1YBAAGCwACYr8BfaOgAwAD9qQOB6xbAAJjZgcAAmNLAX2iRwABvh8AAt73AALlxg4k0wACY+QPAAJj5wACZKwAAAAAAAABgA8AA/Q4BPgE9HMAAmQ+BwACZCMBfaJHAAG99wAC3vQEAAYDAAJkZwF9oZwDAALlvwABvCSnAALmdSsAAmU8BgcAAmVbAX2iRBsAAubCCFsAAm4bAAJuQwACb7QAAwABwAAAAAAEDwACbmMAAm+0AAAEAAIPLYAPAAP1RAVsBAAHAAJucAAAAwABwAV8DAQABagBgA8AA/Q55AF0DwAC43gFfAwEAAUrAAJuzARzAAJvVHMAAm7MugfkCAAErAcAAbwkpwAC5ncAAcAIBAV8DAQABgMAAm+HAX2nVAMAAuc4GwAC5sYIWwACfncAAn6fAAJ/nAACWRAAAAAEDwACfq8AAn+cAAAABAQHAAJ+wAAAAgO5gA8AA/AUAAF0DwAC5jQFfAwAAAT4BSsAAn70BH8AAn8jAALwjAgFfAwAAAi6AwACf3cBfal8ABsAAubKCFsAAo7zAAKPGwACkGgAAlkUAAAABA8AAo8/AAKQaAAAAAQEBwACj1QAAAJb/YQMBXwMAAGADwAD6PwAAXQPAALmNAV8DAAABPgFKwACj7AEfwACj98AAvDwCAV8DAAACLoDAAKQRwF9qyQAGwAC5s4IWwACmhMAApo7AAKbOAACWLwAAAAEDwACmksAAps4AAAABAQHAAKaXAAAAgO5gA8AA/AUAAF0DwAC5jQFfAwAAAT4BSsAApqQBH8AApq/AALxGAgFfAwAAAi6AwACmxMBfazoABsAAubSCFsAAqhXAAKofwACqcwAAlkMAAAABA8AAqijAAKpzAAAAAQEBwACqLgAAAJb/YQMBXwMAAGADwAD6PwAAXQPAALmNAV8DAAABPgFKwACqRQEfwACqUMAAvFACAV8DAAACLoDAAKpqwF9rpAAGwAC5tYIWwACudMAArn7AAK7fAADAAHADAAAAAQPAAK6GwACu3wAAAAEAAcAAro0AAACVpmEDAl8DAABfAwAAYAPAAPo/AWoAYAPAAP0OeQBdA8AAuY0BXwMAAAE+AUrAAK6wAR/AAK67wAC8WwIBXwMAAAIugMAArtTAX2wXAAbAALm/ghbAALGhwACxr8AAs5kBAIMZAAAAAQPAALG1wACzmQAAAAAAAABdA8AAuN4BXwMAAAE+BE7AALHGwACxzQAAgdxdA8AAuUkBXwMAAAEfwACx08AAuXwAAV8DAAAAAE7AALH4AAAAgfhdA8AAucYBWwA9icAAsgrAX2zPHMAAsh4ugfkEAAE0wACyLgPAALIuwACyewAAAAEBAcAAsjEAAACAll8DAAAAAGADwAD9DgE+AT0ewACyRMAAuA8DAAOBwACyVMBfbM+AwACyYsBfbKWCwACyasBfbQoAA4HrFsAAspWAwACyjsBfbKXAAG+HwAC3vcAAuXGDiTTAALK1A8AAsrXAALNkAAAAAAAAAGADwAD9DgE+AUs+AT0wwACy1h7AALLxwADOJwAAAAABAcAAswpbAcAAsxEAAAGDTVsAAcAAsxQAAAGIR2ADwAD9vwA+AT0ewACzJcAAt/8DAAOAwACzQMBfbKWCwACzSMBfbaaDwACzS8BfbbIAwABvCSnAALmdSsAAs4gBgMAAs4/AX2ylBsAAucCCFsAAtMnAALTXwAC3FgEAgegAAAABA8AAtNzAALcWAAAAAAAAAF0DwAC43gFfAwAAAT4FTsAAtO3AALT0AACB3F0DwAC5SQFfAwAAAR/AALT6wAC5fAABXwMAAAAATsAAtQ4AAACBdl8DAAAATsAAtR/AALUrAADAAHAEYAPAAPo/ASo9HMAAtTgugfkEAAE0wAC1SAPAALVIwAC1lQAAAAEBAcAAtUsAAACAll8DAAAAAGADwAD9DgE+Aj2KwAC1XsBfbngpPYnAALV8wF9uaYPAALWFwF9urgOB6xbAALWvgMAAtajAX24/wABvh8AAt73AALlxg4k0wAC1zwPAALXPwAC24QAAAAAAAABgA8AA/Q4BPgJJwAC13oLAALXiwF9ueD4CPRzAALYEgMAAtf3AX24/wABvfcAAt70BAAGBwAC2DsBfbmkAwAC5b0rAALYjAD9LPgE9MMAAtlMewAC2bsAAzicAAAAAAQHAALaHWwHAALaOAAABg01bAAHAALaRAAABiEdgA8AA/b8APgE9HsAAtqLAALf/AwADgMAAtr3AX24/g8AAtsXAX29+hMAAtsjAX2+KAMAAbwkpwAC5nUrAALcFAYDAALcMwF9uPwbAALnBghbAALg8wAC4SsAAu+4BAIDDAAAAAQPAALhRwAC77gAAAAAAAABdA8AAuN4BXwMAAAE+Bk7AALhiwAC4aQAAgdxdA8AAuUkBXwMAAAEfwAC4b8AAuXwAAV8DAAAAAE7AALiDAAAAgXZfAwAAAE7AALiUwAC4oAAAwABwBGADwAD6PwEqTsAAuMAAAACB+F0DwAC5xgFbAD2LwAC40sBfcGccwAC45i6B+QQAATTAALj2A8AAuPbAALptAAAAAQEBwAC4+QAAAICWXwMAAAAAYAPAAP0OAT4DScAAuQyCwAC5EMBfcFA+Aks+AT0wwAC5cR7AALmMwADOKAAAAAABAcAAuaVbAcAAuawAAAGDTVsAAcAAua8AAAGIR2ADwAD9vwA+AT0ewAC5wsAAuA0EAASDwAC54cBfcGeAwAC578BfcBeFwAC598BfcOiGwAC5+sBfcPQASsAAuhgAPz2KwAC6NsBfcFApPYnAALpUwF9wQYTAALpdwF9wogOB6xbAALqHgMAAuoDAX3AXwABvh8AAt73AALlxg4k0wAC6pwPAALqnwAC7uQAAAAAAAABgA8AA/Q4BPgJJwAC6toLAALq6wF9wUD4CPRzAALrcgMAAutXAX3AXwABvfcAAt70BAAGBwAC65sBfcEEAwAC5b0rAALr7AD9LPgE9MMAAuysewAC7RsAAzicAAAAAAQHAALtfWwHAALtmAAABg01bAAHAALtpAAABiEdgA8AA/b8APgE9HsAAu3rAALf/AwADgMAAu5XAX3AXhMAAu53AX3H3hcAAu6DAX3IDAMAAbwkpwAC5nUrAALvdAYDAALvkwF9wFwbAALm2ghbAAMBSwADAXMAAw5sAAJY6AAAAAQPAAMBmwADDmwAAAAIBAcAAwGwAAACW/2EDAV8DAABgA8AA+j8AAcAAwIAAACCWO2EDAF8DAAABagBgA8AA/Q55XQPAALjeAV8DAAABPgROwADAnMAAwKMAAIHcXQPAALlJAV8DAAABH8AAwKnAALl8AAFfAwAAAABOwADAywAAAIH4XQPAALnGAVsAPYvAAMDdwF9y6xzAAMDxLoH5BAABNMAAwQEDwADBAcAAwfIAAAABAQHAAMEEAAAAgJZfAwAAAABgA8AA/Q4BPgE9HsAAwRfAALgLAwFgA8AA+j8DNMAAwSQDwADBJMAAwTUAAAAAAAAAYAPAAPo/AUrAAMEqARzAAMEugMAAwSrAX3KAIAEAAYTAAMEvwF9zJgAANMAAwTcDwADBN8AAwbgAAAABAQHAAME9AAAAwABC22ADwAD6PwAAYAPAAP0OAT4BScAAwVSFwADBWMBfc6Q+AT0ewADBccAAuA8DAAODwADBgcBfcuuCwADBj8BfcsGEwADBl8BfcyYAPx7AAMG6wAC4DgIAAoPAAMHRwF9y64LAAMHfwF9ywQAAA4HrFsAAwgyCwADCBcBfcsHAAG+HwAC3vcAAuXGDiTTAAMIsA8AAwizAAMNmAAAAAAAAAGADwAD9DgE+AknAAMI7IRzAAMJGgcAAwj/AX3KYSAEAASsAwAD9Xj4CPR7AAMJdwAC4CwMBXwMAAAOBwADCasBfcpgWwADCeYLAAMJywF9ywcAAb33AALe9wAC5bxbAAMKLgsAAwoTAX3LBwABvh8AAt73AALlxAErAAMKoAD9LPgE9MMAAwtgewADC88AAzicAAAAAAQHAAMMMWwHAAMMTAAABg01bAAHAAMMWAAABiEdgA8AA/b8APgE9HsAAwyfAALf/AwADgsAAw0LAX3LBhMAAw0rAX3TrhcAAw03AX3T3AMAAbwkpwAC5nUrAAMOKAYLAAMORwF9ywQbAALm3ghbAAMUpwADFM8AAyQwAAJY/AAAAAQPAAMU8wADJDAAAAAIBAcAAxUIAAACW/2EDAV8DAABgA8AA+j8AAcAAxVYAACCWO2EDAF8DAAABagBgA8AA/Q55XQPAALjeAV8DAAABPgZOwADFcsAAxXkAAIHcXQPAALlJAV8DAAABH8AAxX/AALl8AAFfAwAAAABOwADFkAAAAIF2XwMAAABOwADFocAAxa0AAMAAcARgA8AA+j8BKk7AAMXNAAAAgfhdA8AAucYBWwA9jcAAxd/AX3YFHMAAxfMugfkEAAE0wADGAwPAAMYDwADHAAAAAAEBAcAAxgYAAACAll8DAAAAAGADwAD9DgE+AT0ewADGGcAAuAsDAWADwAD6PwM0wADGJgPAAMYmwADGPwAAAAAAAABgA8AA+j8BSsAAxiwBHMAAxjEpSAEAARzAAMY4gMAAxjTAX3V0IAEAAYbAAMY5wF92QAAAAMAA/V40wADGQQPAAMZBwADGxgAAAAEBAcAAxkcAAADAAELbYAPAAPo/AABgA8AA/Q4BPgFJwADGXofAAMZiwF92zT4CPYzAAMZ7wF917ik9i8AAxp3AX3XfhsAAxqbAX3ZAPx7AAMbIwAC4DgIAAoXAAMbfwF92BYLAAMbtwF91tQAAA4HrFsAAxxqCwADHE8BfdbXAAG+HwAC3vcAAuXGDiTTAAMc6A8AAxzrAAMjXAAAAAAAAAGADwAD9DgE+A0nAAMdJhMAAx03AX3XuPgI9HMAAx2+CwADHaMBfdbXAAG99wAC3vQEAAYPAAMd5wF913wDAALlvSsAAx44AP0nAAMesIRzAAMe3gcAAx7DAX3WMSAEAASsAwAD9Xj4CPR7AAMfOwAC4CwMBXwMAAAOBwADH28BfdYwWwADH6oLAAMfjwF91tcAAb33AALe9wAC5bxbAAMf8gsAAx/XAX3W1wABvh8AAt73AALlxAErAAMgZAD9LPgE9MMAAyEkewADIZMAAzicAAAAAAQHAAMh9WwHAAMiEAAABg01bAAHAAMiHAAABiEdgA8AA/b8APgE9HsAAyJjAALf/AwADgsAAyLPAX3W1hsAAyLvAX3hIh8AAyL7AX3hUAMAAbwkpwAC5nUrAAMj7AYLAAMkCwF91tQbAALm4ghbAAMnQwADJ2sAAztgAAJZCAAAAAQPAAMnlwADO2AAAAAIBAcAAyesAAACW/2EDAV8DAABgA8AA+j8AAcAAyf8AACCWO2EDAF8DAAABagBgA8AA/Q55XQPAALjeAV8DAAABPgZOwADKG8AAyiIAAIHcXQPAALlJAV8DAAABH8AAyijAALl8AAFfAwAAAABOwADKPAAAAIF2XwMAAABOwADKTcAAylkAAMAAcARgA8AA+j8BKk7AAMp5AAAAgfhdA8AAucYBWwA9jcAAyovAX3liHMAAyp8ugfkEAAE0wADKrwPAAMqvwADMxAAAAAEBAcAAyrIAAACAll8DAAAAAGADwAD9DgE+AT0ewADKxcAAuAsDAWADwAD6PwM0wADK0gPAAMrSwADK6wAAAAAAAABgA8AA+j8BSsAAytgBHMAAyt0pSAEAARzAAMrkgMAAyuDAX3jRIAEAAYbAAMrlwF95nQAAAMAA/V40wADK7QPAAMrtwADMigAAAAEBAcAAyvMAAADAAELbYAPAAPo/AABgA8AA/Q4BPgFJwADLCofAAMsOwF96Kj4DScAAyyeEwADLK8BfeUs+Aks+AT0wwADLYh7AAMt9wADOKAAAAAABAcAAy5pbAcAAy6EAAAGDTVsAAcAAy6QAAAGIR2ADwAD9vwA+AT0ewADLu8AAuA0EAASFwADL2sBfeWKCwADL6MBfeRIUwADL8MBfeoQIABTAAMvzwF96kAkAAErAAMwZAD89jMAAzD/AX3lLKT2LwADMYcBfeTyGwADMasBfeZ0/HsAAzIzAALgOAgAChcAAzKPAX3ligsAAzLHAX3kSAAADgesWwADM3oLAAMzXwF95EsAAb4fAALe9wAC5cYOJNMAAzP4DwADM/sAAzqMAAAAAAAAAYAPAAP0OAT4CScAAzQ2EwADNEcBfeUs+Aj0cwADNM4LAAM0swF95EsAAb33AALe9AQABg8AAzT3AX3k8AMAAuW9KwADNUgA/Sz4CScAAzYIhHMAAzY2BwADNhsBfeOlIAQABKwDAAP1ePgI9HsAAzabAALgLAwFfAwAAA4HAAM2zwF946RbAAM3CgsAAzbvAX3kSwABvfcAAt73AALlvFsAAzdSCwADNzcBfeRLAAG+HwAC3vcAAuXEASsAAzfMAPz0wwADOFR7AAM4wwADOJwAAAAABAcAAzklbAcAAzlAAAAGDTVsAAcAAzlMAAAGIR2ADwAD9vwA+AT0ewADOZMAAt/8DAAOCwADOf8BfeRKGwADOh8BffC6HwADOisBffDoAwABvCSnAALmdSsAAzscBgsAAzs7AX3kSBsAAubmCFsAA0TLAANE8wADT5QAAljkAAAABA8AA0UXAANPlAAAAAQEBwADRSgAAACdgA8AA/AUAAF0DwAC43gFfAwAAAT4HPR7AANFlwAD7MQIAAoDAANFywF98tycnAD0ewADRksAA+0cCAAKAwADRo8BffLcnJwBOwADRw8AA0coAAIHcXQPAALlJAV8DAAABH8AA0dDAALl8AAFfAwAAAABOwADR9QAAAIH4XQPAALnGAVsATsAA0gvAANIYAADAAHAFYAPAAPwFAZM9isAA0iHAX30yHMAA0jUugfkEAAE0wADSRQPAANJFwADS+AAAAAEBAcAA0kgAAACAll8DAAAAAGADwAD9DgE+AknAANJbHMAA0mWAwADSX8BffLdIAQABg8AA0mjAX31FAMAA/Sg+Aj0ewADShMAAuA8DAAOCwADSlMBffTKBwADSosBffQiEwADSqsBffYQASsAA0r4APz2LwADS3MBffUUcwADS6YPAANLcwF99RWQBAAGUAMAA/SoDgesWwADTEoHAANMLwF99CMAAb4fAALe9wAC5cYOJNMAA0zIDwADTMsAA07AAAAAAAAAAYAPAAP0OAT4BPRzAANNIgcAA00HAX30IwABvh8AAt70BAAEfwADTasAA+1sFAAWAwADTe8BffLcuJycrg8AA05fAX31FAADAALlxwABvCSnAALmdSsAA09QBgcAA09vAX30IBsAAubqCFsAA2QnAANkTwADjTQAAwABvkQAAAAEDwADZGsAA400AAAACAQHAANkkAAAAwABvkmADwAD62wABwADZNQAAAMAAb5NhAwFdA8AAudMBXwMAAFwBagBgA8AA/Q55XQPAALmNAV8DAAABPgxOwADZcwAAAMAAXmVdA8AAuj0BXwMAAABOwADZywAAAIH4XQPAALnGAV8DAAAATsAA2eMAAADAAG/kYAPAALy+AE7AANnzAAAApHVgA8AAvRYATsAA2gwAAADAAG+RXgMAAAAAAAFXA8AAt8UAXABPwADaGsAA2h8AAAHAAG88YQMBXwMAAFwAA8AA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fnaCwACuAsBhPccAPgE9jMAArkjAYT3nHMAArliCwACuU8BhPcfAAHDSAQJbYAPAALy+AYTAAK56wGE95wDAAL0tP0rAAK6LAR7AAK6YwAC8xwIAAoPAAK6twGE914TAAK63wGE95wAGwAC4HoIbwACuxcAArsrAAK8nAAHAAHEowAC3vQAAAAEDwACu1MAArycAAAAEBATAAK7aAAAAmYBgA8AAvRYAwACu7QAAAIRSYAPAAL0FAMAArvoAAACkdWADwAC9FgDAAK8HAAAAgfpgA8AA/esAAFwBPgE9HsAArxHAAMsGAQABg8AAryDAYT7sAAbAALgfghvAAK8qwACvL8AAr2cAAcAAcSnAALe9AAAAAQPAAK87wACvZwAAAAEBAcAAr0MAAACB+mADwAD96wAAXAE+AT0cwACvWhrAAK9SwAC9HMAARwEBAAGAwACvYMBhP0gAwAC9NgbAALggghvAAK9qwACvb8AAspwAAcAAcSrAALe9AAAAAQPAAK94wACynAAAAAUFBcAAr34AAACZgGADwAC9FgDAAK+RAAAAhFJgA8AAvQUAwACvngAAAKR1YAPAAL0WAMAAr7oAAADAAG8aYAPAALzfAMAAr80AAACIqF0DwAD82gJbWwAAYAPAAL0WAT4FPRvAALB9wADK9mrAALCLYQMBYAPAAP3rXMABgkRJwACwnBzAALCug8AAsKDAYT/hSAEAASsAwAD9Xj4BPYvAALC9wGE/4WrAALDTYAPAALz0wAGCSUnAALDxISXAALEDg8AAsPXAYT/hYAPAALz0PgE9MMAAsSEfwACxK8AA+zgBAAEkAAInwABxKyfAAHEsAD9OwACxmQAAAMAAcS1dA8AA/NoCW1sAScAAsaUcwACxtITAALGpwGE/80gBAAErAMAA/V4+AUnAALHDJcAAscyCwACxx8BhP9FgA8AAvVI+AT2NwACx3sBhQKMWwACx7hTAALHpwGE/0QIBYAPAAL1SqhvAALe9wAC9Yz4BPY3AALIHwGFAox7AALIWwADAxAACW1sAAD4BPY3AALI2wGFAox7AALJFwADAxgECW1sBhMAAslLAYT/zAErAALJlAR/AALJwwAC9mQMAAybAALJ8AYLAALJ8wGE/0WADwAC9UoPAALKCwGE/4YXAALKRwGFAowAGwAC4I4IbwADPFcAAzxfAANWa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AHJcwADF6SfAAHLCAMAAxeY+AkAcwABC1IDAAELIwGTrAEgBAAFqwABC12ADwAD8BVMAwAD9KMAAQsjAAELmAD0cwABC8S6BwgEAARbAAEL2LsAAclzAAMXpAMAAxeY/ScAAQyohHMAAQzQWwABDLi6CTsAAxcFIAQABasAAQzdgA8AA/AXAAGkzAMAA/Sg+AT0cwABDSi6BwgEAARbAAENPLsAAclzAAMXpAMAAxeY/BsAAxeiCNcAARDHAAEQ8wABEYwEAgXYAAAABA8AAREPAAERjAAAAAAAAAGADwAD9UQE+AUrAAERJARbAAERZFsAARFAuqZLAAMXAgXbAAMU3BsAAxeyCNcAARJDAAESZwABEqAICrKkAAAABA8AARJ7AAESoAAAAAQEBwABEoQAAIINEXwMAAAAAXAAGwADF6YI1wABFG8AARSPAAEUrAQLAAHJcAAAAAQPAAEUrwABFKwAAAAAAAABgA8AA/AUABsAAxeqCNcAARa/AAEW1wABFugECrKkAAAABA8AARbrAAEW6AAAAAAAAAF8DAAAABsAAxcmCNcAARp/AAEajwABGtQACwABywwAAAAEDwABGqsAARrUAAAABAQHAAEavAAAAJ2ADwAD8BQAAYAPAAPwFAAbAAMXKgjXAAEdfwABHZMAAR6UAAsAAcsQAAAABA8AAR3PAAEelAAAABAQEwABHeAAAAGpgA8AA/AUAwABHgwAAAIKMYAPAAPwFAMAAR5IAAACCRV0DwAD8qQFgA8AA/AUAwABHngAAAINcYAPAAPwFAABcAAbAAMXLgjXAAEjWwABI28AASOgAAsAAcsUAAAABA8AASObAAEjoAAAAAAAAAFwABsAAxcyCNcAASVzAAElhwABJfgACwAByxgAAAAEDwABJcMAASX4AAAABAQHAAEl1AAAAwABhc2ADwAD8BQAAXAAGwADFzYI1wABKCcAASg7AAEoyAALAAHLHAAAAAQPAAEoewABKMgAAAAICAsAASiMAAABqYAPAAPwFAMAASi4AAACCjGADwAD8BQAAXAAGwADFzoI1wABKfcAASoTAAEqPAALAAHLIAAAAAQPAAEqNwABKjwAAAAAAAABgA8AA/esABsAAxc+CNcAATNvAAEziwABNCQACwABfwQAAAAEDwABM68AATQkAAAADAwPAAEzwAAAAamADwAD8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YAPAAPwFgIBqwABLP2ADwAD8BcABhbZqwABLQ2ADwAD8BcABhbZqwABLR2ADwAD8BcABhbZqwABLS2ADwAD8BcABhbZqwABLT2ADwAD8BcABhbZqwABLU2ADwAD8BcABhbZqwABLV2ADwAD8BcABhbZqwABLW2ADwAD8BcABhbZqwABLX2ADwAD8BcABhbZqwABLY2ADwAD8BcABhbZqwABLZ2ADwAD8BcABhbZqwABLa2ADwAD8BcABhbZqwABLb2ADwAD8BcABhbZqwABLc2ADwAD8BcABhbZqwABLd2ADwAD8BcABhbZqwABLe2ADwAD8BcABhbZqwABLhmADwAD8BcABhbZqwABLimADwAD8BcABhbZqwABLjmADwAD8BcABhbZqwABLkmADwAD8BcABhbZqwABLlmADwAD8BcABhbZqwABLmmADwAD8BcABhbZqwABLnmADwAD8BcABhbZqwABLomADwAD8BcABhbZqwABLpmADwAD8BcABhbZqwABLqmADwAD8BcABhbZqwABLrmADwAD8BcABhbZqwABLsmADwAD8BcABhbZqwABLtmADwAD8BcABhbZqwABLumADwAD8BcABhbZqwABLvmADwAD8BcABhbZqwABLwmADwAD8BcABhbZqwABLzWADwAD8BcABhbZqwABL0WADwAD8BcABhbZqwABL1WADwAD8BcABhbZqwABL2WADwAD8BcABhbZqwABL3WADwAD8BcABhbZqwABL4WADwAD8BYGeasAAS+VgA8AA/AXAAYW2asAAS+lgA8AA/AXAAYW2asAAS+1gA8AA/AXAAYW2asAAS/FgA8AA/AXAAYW2asAAS/VgA8AA/AXAAYW2Nz5qwABL/WADwAD8BcABhbY3PmrAAEwFYAPAAPwFwAGFtjc/NzQ3NTc2Nzc3ODc5Nzo3Ozc8Nz1qwABMPGADwAD8BcABhbZqwABMQGADwAD8BcABhbZqwABMRGADwAD8BcABhbZqwABMSGADwAD8BYGeasAATExgA8AA/AXAAYW2asAATFBgA8AA/AXAAYW2asAATFtgA8AA/AXAAYW2k5SVlpc3BTcGNwc3CDcJNwo3CzcMNw03DjcPNxA3ETcSNxM3FDcVNxY3FzcYNxlqwABMzmADwAD8BcABhbZqwABM0mADwAD8BcABhbZqwABM1mADwAD8BcAB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AMtHglKZSJlXBsAAdX4AYAPAAPwFAWqZVGADwAD8BcAAmh4EwADLSIJSmWyZhAbAAHV/AGADwAD8BQFqmYFgA8AA/AXAAJohBMAAy0mCUpmpmbkGwAB1gAFqmYlgA8AAy0DAAX6bYAPAAPwFAWqZtmADwAD8BcAAmiQEwADLSoJSmc6Z1gbAAHWBAGADwAD8BQFqmdNgA8AA/AWDMATAAMtLglKZ65n4BsAAdYIAYAPAAPwFAWqZ9WADwAD8BcABimIEwADLTIJSmg2aGwbAAHWDAGADwAD8BQFqmhhgA8AA/AXAAYpmBMAAy02CUpowmlEGwAB1hABgA8AA/AUBappOYAPAAPwFwAGKagTAAMtOglKaZpp1BsAAdYUAYAPAAPwFAWqacmADwAD8BcABim4EwADLT4JSmoqanAbAAHWGAGADwAD8BQFqmplgA8AA/AXAAYpyBMAAy1CCUpqxmsUGwAB1hwBgA8AA/AUBaprCYAPAAPwFwAGKdgTAAMtRglKa6pr7BsAAdYgBaprKYAPAAMtAwAF+m2ADwAD8BQFqmvhgA8AA/AXAAYp6BMAAy1KCUpsgmzUGwAB1iQFqmwBgA8AAy0DAAX6bYAPAAPwFAWqbMmADwAD8BcABin4EwADLU4JSm1qbZgbAAHWKAWqbOmADwADLQMABfptgA8AA/AUBaptjYAPAAPwFwAGKggTAAMtUglKbe5uQBsAAdYsAYAPAAPwFAWqbjWADwAD8BcABioYEwADLVYJSm6WbuwbAAHWMAGADwAD8BQFqm7hgA8AA/AXAAYqKBMAAy1aCUpvQm9sGnsAAYAPAAPwFAWqb2GADwAD8BcABio4EwADLV4JSm/CcBgbAAHWNAGADwAD8BQFqnANgA8AA/AXAAYqOBMAAy1iCUpw2nEQGwAB1jgBgA8AA/AUBapxBYAPAAPwFwAGKkgTAAMtZglKcWZxqBsAAdY8AYAPAAPwFAWqcZ2ADwAD8BcABipYEwADLWoJSnH+cjQbAAHWQAGADwAD8BQFqnIpgA8AA/AXAAYqaBMAAy1uCUpyinLkGwAB1kQBgA8AA/AUBapy2YAPAAPwFwAGKngTAAMtcglKc3pz1BsAAdZIBapy+YAPAAMtAwAF+m2ADwAD8BQFqnPJgA8AA/AXAAYqiBMAAy12CUp0KnRoGwAB1kwBgA8AA/AUBap0XYAPAAPwFwAGKpgTAAMteglKdL51BBsAAdZQAYAPAAPwFAWqdPmADwAD8BcABiqoEwADLX4JSnVadawbAAHWVAGADwAD8BQFqnWhgA8AA/AXAAYquBMAAy2CCUp2AnY8GwAB1lgBgA8AA/AUBap2MYAPAAPwFwAGKsgTAAMthglKdpJ2yBpxpAGADwAD8BQFqna9gA8AA/AXAAYq2BMAAy2KCUp3Hnd0GwAB1lwBgA8AA/AUBap3aYAPAAPwFwAGKugTAAMtjglKd8p4FBsAAdZgAYAPAAPwFAWqeAmADwAD8BcABir4EwADLZIJSnhqeOwbAAHWZAGADwAD8BQFqnjhgA8AA/AXAAYrCBMAAy2WCUp5QnmQGwAB1mgBgA8AA/AUBap5hYAPAAPwFwAGKxgTAAMtmglKeeZ6HBsAAdZsAYAPAAPwFAWqehGADwAD8BcABisoEwADLZ4JSnpyepgbAAHWcAGADwAD8BQFqnqNgA8AA/AXAAYrOBMAAy2iCUp67ns8GwAB1nQBgA8AA/AUBap7MYAPAAPwFwAGK0gTAAMtpglKe5J78BsAAdZ4AYAPAAPwFAWqe+WADwAD8BcABitYEwADLaoJSnxGfLAbAAHWfAGADwAD8BQFqnylgA8AA/AXAAYraBMAAy2uCUp9Bn1gGwAB1oABgA8AA/AUBap9VYAPAAPwFwAGK3gTAAMtsglKfbZ+HBsAAdaEAYAPAAPwFAWqfhGADwAD8BcABiuIEwADLbYJSn5yfvgbAAHWiAGADwAD8BQFqn7tgA8AA/AXAAYrmBMAAy26CUp/Tn+oGwAB1owBgA8AA/AUBap/nYAPAAPwFwAGK6gTAAMtvglKgD6AnBsAAdaQBap/vYAPAAMtAwAF+m2ADwAD8BQFqoCRgA8AA/AXAAYruBMAAy3CCUqBMoGUGwAB1pQFqoCxgA8AAy0DAAX6bYAPAAPwFAWqgYmADwAD8BcABivIEwADLcYJSoIqglgbAAHWmAWqgamADwADLQMABfptgA8AA/AUBaqCTYAPAAPwFwAGK9gTAAMtyglKgu6DRBsAAdacBaqCbYAPAAMtAwAF+m2ADwAD8BQFqoM5gA8AA/AXAAYr6BMAAy3OCUqDmoPsGwAB1qABgA8AA/AUBaqD4YAPAAPwFwAGK/gTAAMt0glKhIKE6BsAAdakBaqEAYAPAAMtAwAF+m2ADwAD8BQFqoTdgA8AA/AXAAYsCBMAAy3WCUqFfoXQGwAB1qgFqoT9gA8AAy0DAAX6bYAPAAPwFAWqhcWADwAD8BcABiwYEwADLdoJSoZmhugbAAHWrAWqheWADwADLQMABfptgA8AA/AUBaqG3YAPAAPwFwAGLCgTAAMt3glKh36IEBsAAdawBaqG/YAPAAMtAwAF+m2ADwAD8BQFqogFgA8AA/AXAAYsOBMAAy3iCUqIpokkGwAB1rQFqoglgA8AAy0DAAX6bYAPAAPwFAWqiRmADwAD8BcABixIEwADLeYJSom6ihwbAAHWuAWqiTmADwADLQMABfptgA8AA/AUBaqKEYAPAAPwFwAGLFgTAAMt6glKinKK1BsAAda8AYAPAAPwFAWqismADwAD8BcABixoEwADLe4JSosqi3gbAAHWwAGADwAD8BQFqottgA8AA/AXAAYseBMAAy3yCUqLzowMGwAB1sQBgA8AA/AUBaqMAYAPAAPwFwAGLIgTAAMt9glKjGKMwBsAAdbIAYAPAAPwFAWqjLWADwAD8BcABiyYEwADLfoJSo0WjWQbAAHWzAGADwAD8BQFqo1ZgA8AA/AXAAYsqBMAAy3+CUqNuo4sGwAB1tABgA8AA/AUBaqOIYAPAAPwFwAGLLgTAAMuAglKjsKPLBsAAdbUBaqOQYAPAAMtAwAF+m2ADwAD8BQFqo8hgA8AA/AXAAYsyBMAAy4GCUqPwpAkGwAB1tgFqo9BgA8AAy0DAAX6bYAPAAPwFAWqkBmADwAD8BcABizYEwADLgoJSpC6kQAbAAHW3AWqkDmADwADLQMABfptgA8AA/AUBaqQ9YAPAAPwFwAGLOgTAAMuDglKkZaR2BsAAdbgBaqRFYAPAAMtAwAF+m2ADwAD8BQFqpHNgA8AA/AXAAYs+BMAAy4SCUqSbpL4GwAB1uQFqpHtgA8AAy0DAAX6bYAPAAPwFAWqku2ADwAD8BcABi0IEwADLhYJSpPalFgbAAHW6AGADwAD8BQFqpRNgA8AA/AXAAYtGBMAAy4aCUqVTpWcGnSQBaqUcYAPAAPnywAGLT2ADwAD8BQFqpV5gA8AA/AXAAJoeBMAAy4eCUqWspdQGwAB1vAFqpWxgA8AA+fLAAYtjYAPAAPwFAWqlwmADwAD8BcAAmiEEwADLiIJSpgmmEAbAAHW+AWql2WADwAD58sABi3dgA8AA/AUBaqYOYAPAAPwFgzAEwADLiYJSpkqmWwbAAHXAAWqmFWADwAD58sABi4tgA8AA/AUBaqZUYAPAAPwFwAGKYgTAAMuKglKmlqapBsAAdcIBaqZgYAPAAPnywAGLn2ADwAD8BQFqpqFgA8AA/AXAAYpmBMAAy4uCUqb3pzIGwAB1xAFqpq5gA8AA+fLAAYuzYAPAAPwFAWqnF2ADwAD8BcABimoEwADLjIJSp26nhAbAAHXGAWqnN2ADwAD58sABi8dgA8AA/AUBaqd7YAPAAPwFwAGKbgTAAMuNglKnw6ffBsAAdcgBaqeJYAPAAPnywAGL22ADwAD8BQFqp9NgA8AA/AXAAYpyBMAAy46CUqggqEAGwAB1ygFqp+RgA8AA+fLAAYvvYAPAAPwFAWqoMmADwAD8BcABinYEwADLj4JSqIKopAbAAHXMAWqoRWADwAD58sABjANgA8AA/AUBaqiVYAPAAPwFwAGKhgTAAMuQglKo56kLBsAAdc4BaqipYAPAAPnywAGMF2ADwAD8BQFqqPtgA8AA/AXAAYqKBMAAy5GCUqlDqVAGwAB10AFqqRBgA8AA+fLAAYwrYAPAAPwFAWqpS2ADwAD8BcABio4EwADLkoJSqZOptwbAAHXSAWqpVWADwAD58sABjD9gA8AA/AUBaqmnYAPAAPwFwAGKjgTAAMuTglKp8qoGBsAAddQBaqm8YAPAAPnywAGMU2ADwAD8BQFqqf5gA8AA/AXAAYqSBMAAy5SCUqpEql4GwAB11gFqqgtgA8AA+fLAAYxnYAPAAPwFAWqqU2ADwAD8BcABipYEwADLlYJSqpmqrQbAAHXYAWqqY2ADwAD58sABjHtgA8AA/AUBaqqlYAPAAPwFwAGKmgTAAMuWglKq8asXBsAAddoBaqqyYAPAAPnywAGMj2ADwAD8BQFqqwZgA8AA/AXAAYqeBMAAy5eCUqtUq2wGwAB13AFqqxxgA8AA+fLAAYyjYAPAAPwFAWqrYmADwAD8BcABiqYEwADLmIJSq6urxgbAAHXeAWqrcWADwAD58sABjLdgA8AA/AUBaqu6YAPAAPwFwAGKqgTAAMuZglKsCKwqBsAAdeABaqvLYAPAAPnywAGMy2ADwAD8BQFqrBtgA8AA/AXAAYquBMAAy5qCUqxmrHsGwAB14gFqrC9gA8AA+fLAAYzfYAPAAPwFAWqscmADwAD8BcABirIEwADLm4JSrLasygbAAHXkAWqsgGADwAD58sABjPNgA8AA/AUBaqzCYAPAAPwFwAGKtgTAAMucglKtDa0yBsAAdeYBaqzPYAPAAPnywAGNB2ADwAD8BQFqrSJgA8AA/AXAAYq6BMAAy52CUq1yrZAGwAB16AFqrTdgA8AA+fLAAY0bYAPAAPwFAWqtg2ADwAD8BcABir4EwADLnoJSrd6uGQbAAHXqAWqtlWADwAD58sABjS9gA8AA/AUBaq3+YAPAAPwFwAGKwgTAAMufglKuWq56BsAAdewBaq4eYAPAAPnywAGNQ2ADwAD8BQFqrmxgA8AA/AXAAYrGBMAAy6CCUq61rsgGwAB17gFqrn9gA8AA+fLAAY1XYAPAAPwFAWquwGADwAD8BcABisoEwADLoYJSrv+vCgbAAHXwAWquzWADwAD58sABjWtgA8AA/AUBaq8GYAPAAPwFwAGKzgTAAMuiglKvS69rBsAAdfIBaq8PYAPAAPnywAGNf2ADwAD8BQFqr11gA8AA/AXAAYrSBMAAy6OCUq+wr9gGwAB19AFqr3BgA8AA+fLAAY2TYAPAAPwFAWqvxmADwAD8BcABitYEwADLpIJSsCCwUAbAAHX2AWqv3WADwAD58sABjadgA8AA/AUBarA7YAPAAPwFwAGK2gTAAMulglKwlLC8BsAAdfgBarBVYAPAAPnywAGNu2ADwAD8BQFqsKtgA8AA/AXAAYreBMAAy6aCUrEDsTAGwAB1+gFqsMFgA8AA+fLAAY3PYAPAAPwFAWqxHGADwAD8BcABiuIEwADLp4JSsX+xwwbAAHX8AWqxNWADwAD58sABjeNgA8AA/AUBarGnYAPAAPwFwAGK5gTAAMuoglKyB7ItBsAAdf4BarHIYAPAAPnywAGN92ADwAD8BQFqshxgA8AA/AXAAYrqBMAAy6mCUrJvspEGwAB2AAFqsjJgA8AA+fLAAY4LYAPAAPwFAWqygmADwAD8BcABiv4EwADLqoJSstezAgbAAHYCAWqylmADwAD58sABjh9gA8AA/AUBarLvYAPAAPwFwAGLGgTAAMurglKzQ7NjBsAAdgQBarMHYAPAAPnywAGOM2ADwAD8BQFqs1VgA8AA/AXAAYseBMAAy6yCUrOgs7gGwAB2BgFqs2hgA8AA+fLAAY5HYAPAAPwFAWqzrmADwAD8BcABiyIEwADLrYJSs/20JQbAAHYIAWqzvWADwAD58sABjltgA8AA/AUBarQTYAPAAPwFwAGLJgTAAMuuglK0ZrSGBsAAdgoBarQqYAPAAPnywAGOb2ADwAD8BQFqtHhgA8AA/AXAAYsqBMAAy6+CUrTQtQQGwAB2DAFqtItgA8AA+fLAAY6DYAPAAPwFAWq07WADwAD8BcABiy4EwADLsIJStVG1iwbAAHYOAWq1CWADwAD58sABjpdgA8AA/AUBarVxYAPAAPwFwAGLRgEFwADLsgAAAAAEAAADAAAAAAAAAAAAYAPAAMtFAT8BCQEAwAD9ZwAAAAAAAABnXy0AAAAAAsAAy7OCV4EigSiDDgPAAG7cAAIAAJZNYAPAAP1RAVsAAIJ2YAPAAP1RAVsBXQHAALmNAV8DAQAAAAEEwADLtoJXgV+BZgm5pcAAyuoAXQPAALmNAV8DAAAAAQXAAMu9gleBaoFqgYIAAAADgXSBggAAAAEBAYF6AAAEuaVdA8AAuY0BXwMAAAAAXQPAAMuzAl8DAABfAwEAAT8CCAHAAMu2gADAZ1+sCQGBasAAucMAAAAAAwbAAMu4gleBhoGPgbEBAMAAbzQAAAABA4GbgbEAAAAAAAAAYAPAAPo/AUqBngEWgaYWgZ4uuaXAAMrqwADLtsAAbzTAALm8BsAAy7qCV4G2gcyC0wAAgfkAAAABA4HSgtMAAAAEAQGB2AAAAMAAbzxhAwFfAwEAXAADgfgAAACB62ADwAD7+wFqAGADwAD9DnmCBgAAAIOJYQMAXAFqAGADwAD9DnmCFQAAAMAAbwlgA8AA+j8BagBgA8AA/Q55XQPAALnGAV8DAQABPgFKgisBNYI2AAABAF0DwADLvgJfAwAAXwMBAAEfgjbAAMvSAQJfAwAAXwMBAAEcgmQWglwuuaXAAMrqwADLtoH5AwABKwKDiYKCecBnYHzAAG8Jg4KQwGdgkcAAuZ0ANQAAAAEAWwEcgqiEgqbAZ2C9wABvPAEAAYCCr8BnYFIAwADLxzUAAAABAFsBHIK/hIK9wGdgvYHrAQABgYLHwGdgZQDAAMvIhADAZ2C9BsAAy7uCV4LYguKDDAAAljgAAAABA4LpgwwAAAEAAJb5YAPAAP1RAVsAAAAAXQPAALmNAV8DAgABSoLvAR+C88AAy70BAl8DAABfAwIAARaDBC65pcAAyurAAMu2AAAAZ1/rAGdgMgBnYWQAZ2HCAAAAAwLAAMu+gleDEYMXik8DwAB2EAACAACWTWADwAD9UQFbAACCdmADwAD9UQFbAWABwAD9UQABXQHAALnGAV8DAQAEBMAAy8GCV4N1g3wJuaXAAMrqAF0DwAC5xgFfAwAAAATAAMvCgleDsIPECcAAb6XAAMrqAGADwAC9FgEag73AAL0cBMAAy8OCV4QChA0YwABwlMAAyuoAYQMBXwMBAFwBKwTAAMvEgleEdYSBGMAAcJXAAMrqAGADwAD7+wErAQXAAMvSgleEhoSGhMwAAAADhJyEzAAAAAEBAYSiAAAEuaVdA8AAucYBXwMAAAAAXQPAAMu+Al8DAABfAwEAAT4BPRyEuRaEsS65pcAAyurAAMvBwABvPAEAARaEwC7AAHBNwADK6sAAy8sAwAC5yQIIAcAAy8GAAMBnYrIJAYSGwAD9ZwAAAAAJBsAAy8aCV4TRhNiE9AAAnFUAAAABA4TehPQAAAAAAAAAXQPAALjeAVsBSoTkARyE7BaE5C65pcAAyurAAMvBnFUAAAAAwAC5yAbAAMvHgleE+YT+hZUAAMAAbzwAAAABA4UEhZUAAAABAQGFCgAAAMAAcAthAwFfAwEAXAAAXAE+AT0XhSQuwABwlMAAyuojHIU9gIUywGdji0gBAAErAMAA/V4rHIVkFoVeLsAAb6XAAMrqwADLwsAAb8YBAltfAwEAAYCFhsBnY4sAwAC9KgFeAwABAQFfAwEAAAFXA8AAt9gCW18DAQBbwADLwwbAAMvIgleFmoWfhx4AAIHrAAAAAQOFpoceAAAAAQEBhbAAAADAAG+EYAPAAPv7AABcAT4CPRyFyxaFwy65pcAAyurAAMvBgesBAAGAhdPAZ2QuAMAAucpJheUchfWAhenAZ2QuSAEAASsAwAD8AD4BPReGBi7AAHCVwADK6ivAAMvESYYmJYY2gIYqwGdkLmEDAmADwAD9DmADwAD9Dls+AT0XhlcuwABwlcAAyuochncWhmYuwABvpcAAyurAAMvCwABwUQEDW2ADwAD9UWADwAD9vwEmhqsBFIarwGdkLgABYQMCYAPAAP0OYAPAAP0OW2EDAmADwAD9UWADwAD9v1sAwAC9K8AAy8Q+AT0XhswuwABwlcAAyuochuEWhtsuwABvpcAAyurAAMvCwABvxgECW2ADwAD9UQEmhwgBgIcIwGdkLmEDAWADwAD9UVsAwAC9KsAAy8QGwADLyYJXhyOHKIdmAACDiQAAAAEDhy6HZgAAAAEBAYc0AAAAwABwDGEDAFwAAFwBPgE9HIdQFodILrmlwADK6sAAy8GDiQEAAYCHV8BnZYgAwAC5ywbAAMvLgleHa4dwiVsAAMAAcE3AAMrqAAAAAQOHd4lbAAAAAQEBh3oAACASXwMAAAAAXAE+BEmHhhyHlhaHii7AAHCUwADK6sAAy8NIAQABKwDAAP1eSoefAD9Oh60AAACIcl8DAQAASz4BPYmHycBnZhomh9sAgIfWwGdl5F8DAQABAYfnWwGH7gAAAYHFWwABh/UAAAGg4mADwAD9vwA+AkmIBByIFRaICC7AAHCVwADK6sAAy8RIAQABKwDAAPwAPgE9HIguFogoLsAAb6XAAMrqwADLwsAAb9oCAAKCiELAZ2ZGg4hJwGdmUADAAL0gSYheJYhvFohiLsAAcJXAAMrqwADLxGEDAmADwAD9DmADwAD9Dls+AT0ciJgWiJIuwABvpcAAyurAAMvCwABwYwMCW2ADwAD9vwMmiKkBFoipLsAAcJXAAMrqwADLxGEDAltgA8AA/b9cgoi3wGdmRoOIvsBnZlAAwAC9KD4BPRyI4xaI3S7AAG+lwADK6sAAy8LAAHAJAgFbAiaI8wEWiPMuwABwlcAAyurAAMvEYQMBW1yCiQHAZ2ZGAMAAvSdKiRcAPRyJLxaJKS7AAG+lwADK6sAAy8LAAHAJAgFfAwEAAhaJPy7AAHCUwADK6sAAy8OBiUzAZ2YaAMAAvScGwADLzIJXiWCJZYmnAACB+wAAAAEDiWqJpwAAAAEAAYlzAAAAwABwDV0DwAC43gFbAWoAYAPAAP0OeQBcAT4BPRyJkBaJiC65pcAAyurAAMvBgfsBAAGAiZbAZ2fOAMAAucwGwADLzYJXiayJsYnUAACCBAAAAAEDibeJ1AAAAAAAAABcAT4BPRyJyBaJwC65pcAAyurAAMvBggQAAAAAwAC5zQbAAMvQgleJ2Yniif4BAMAAbysAAAABA4nrif4AAAAAAAAAYAPAAPo/AUqJ7gEWifYWie4uuaXAAMrqwADLwcAAbyvAALnQBsAAy86CV4oDig2KTQAAwABwAgAAAAEDihiKTQAAAQAAg8tgA8AA/VEBWwEAAYocAAAAwABwAV8DAgABagBgA8AA/Q55AF0DwAC43gFfAwIAAUqKLQEcijUWii0uuaXAAMrqwADLwcAAcAIBAV8DAgABgIpBwGdoxwDAALnOAABnYyAAZ2NpAGdkDgBnZWgAZ2W+AGdnrgBnaBEAZ2hSAGdomQBnaRcAAAAJAsAAy9OCV4pSiliLvwPAAG7dAAQAAMAAcBdgA8AA/VEBWwAAwABwGGADwAD9UQFbAADAAHAZYAPAAP1RAVsAAMAAcBpgA8AA/VEBWwFdAcAAuf4CXwMCAF8DAwAAAAEEwADL1oJXisyK0wm5pcAAyuoAXQPAALnyAl8DAABfAwEAAAEFwADL24JXiteK14r6AAAAA4rsivoAAAABAQGK8gAABLmlXQPAALnyAl8DAABfAwEAAABdA8AAy9MEXwMAAF8DAQBfAwIAXwMDAAE/AggBwADL1oAAwGdp4gkBitfAALoCAAAAAAIGwADL2IJXiv+LGYtjAACWOAAAAAEDiyWLYwAAAgAAwABwG2ADwAD9UQFbAADAAHAcYAPAAP1RAVsAAAAAXQPAALnyAl8DBABfAwUAAUqLMQEfizXAAMvbAQRfAwAAXwMBAF8DBABfAwUAARaLWy65pcAAyurAAMvWAAbAAMvZgleLZ4tyi70AAJ57AAAAAQOLdou9AAAAAQEBi4IAACCB9V0DwAC5jQFfAwIAAABdA8AAuY0BXwMDAAFKi5MBHIuzHIubFouTLrmlwADK6sAAy9aeewEAARyLp4CLoMBnaseWOAABXwMAAAAAwAC5rQDAALn8ljgAAV8DAwAAAMAAua0AAGdqLQBnaqcAZ2svAAAAAgLAAMvcgleLwovIjV8DwABySgAEAADAAHAXYAPAAP1RAVsAAMAAcBhgA8AA/VEBWwAAwABwGWADwAD9UQFbAADAAHAaYAPAAP1RAVsBXQHAAMeDAl8DAgBfAwMAAAABBMAAy9+CV4wcjCMJuaXAAMrqAF0DwADHgwJfAwAAXwMBAAABBcAAy+WCV4wnjCeMQgAAAAOMNIxCAAAAAQEBjDoAAAS5pV0DwADHgwJfAwAAXwMBAAAAXQPAAMvcBF8DAABfAwEAXwMCAF8DAwABPwIIAcAAy9+AAMBna94JAYwnwADHjAAAAAADBsAAy+GCV4xHjEqMgQAAiL4AAAABA4xRjIEAAAABAQGMVQAAIIF7XwMCAAAAXwMDAAFKjF8BJox8AByMZxaMXy65pcAAyurAAMvfiL4BAAEmjHUAgIxvwGdsSV8DAAAAwADHhl8DAwAGwADL4oJXjK6MuY0EAACeewAAAAEDjL2NBAAAAAEBAYzJAAAggfVdA8AAuY0BXwMCAAAAXQPAALmNAV8DAwABSozaARyM+hyM4haM2i65pcAAyurAAMvfnnsBAAEcjO6AjOfAZ2yxljgAAV8DAAAAAMAAua0AwADHiZY4AAFfAwMAAADAALmtBsAAy+OCV40JjRuNXQAAljgAAAABA40njV0AAAIAAMAAcBtgA8AA/VEBWwAAwABwHGADwAD9UQFbAAAAAF0DwADHgwJfAwQAXwMFAAFKjTMBH403wADL5QEEXwMAAF8DAQBfAwQAXwMFAAEWjVUuuaXAAMrqwADL3wAAAGdsKQBnbJEAZ20ZAGdtkwAAAAMCwADL5oJYgSCBL4b7B8AAdhEAAgAAlk1gA8AA/VEBWwAAgnZgA8AA/VEBWwFdAcAA/GcBXwMBAAAAAAEFwADL+QAAAAAEAAADAAAAAAAAAAAAXQPAAMvmAl8DAABfAwEAAT8BCQEAwAD8kQAAAAAOBsAAy+mCWIFfgW+BdgECuaXAAMrqAAAAAQOBdoF2AAAAAAAAAF0DwAD8ZwFfAwAAAAbAAMvqgliBe4GLgb8BAFwAAAABA4GUgb8AAAAAAAAAXQPAAPyiAV8DAQABSoGXAR+Bm8AAzAMBAl8DAABfAwEAARaBthaBri65pcAAyurAAMvpXMAA/IkABsAAy+uCWIO3g7+D1wEAYQAAAAEDg8aD1wAAAAAAAABgA8AA/AUBSoPJARaD0RaDyS65pcAAyurAAMvpYcAA/IoGwADL7IJYg9uD5IP+AQCBVQAAAAEDg+yD/gAAAAAAAABgA8AA+j8BSoPvARaD9xaD7y65pcAAyurAAMvpgVXAAPyLBsAAy+2CWIQChAuEKwEAg7IAAAABA4QWhCsAAAAAAAAAYAPAAPo/AUqEGQEWhCEWhBkuuaXAAMrqwADL6YOywAD8jAbAAMvygliEMIQ8hHoAAJYvAAAAAQOEQIR6AAAAAQEBhEUAAACA7mADwAD8BQAAXQPAAPxnAV8DAQABSoRPAR6EU8AAzAkBAl8DAABfAwEAARyEbhaEZi65pcAAyurAAMvpli8BAAGAhHPAZ2+JAMAA/IEABsAAy/OCWIR+hIqEyAAAlkQAAAABA4SOhMgAAAABAQGEkwAAAIDuYAPAAPwFAABdA8AA/GcBXwMBAAFKhJ0BHoShwADMCQECXwMAAF8DAQABHIS8FoS0LrmlwADK6sAAy+mWRAEAAYCEwcBnb/0AwAD8fwAGwADL9IJYhM2Ez4UEAACWOQAAAAEDhNiFBAAAAAEBAYTdAAAAJ2ADwAD8BQAAXwMBAAFKhOcBJoUAAByE7xaE5y65pcAAyurAAMvpljkBAAGAhPnAZ3BxAMAA/IZfAwEABsAAy+6CWIUIhQ6FKQEAgxkAAAABA4UUhSkAAAAAAAAAXwMBAAFKhRcBJoUlABaFHxaFFy65pcAAyurAAMvpgxnAAPyNXwMBAAbAAMvvgliFLYUzhUwBAIHoAAAAAQOFOIVMAAAAAAAAAF8DAQABSoU7ASaFSAAWhUMWhTsuuaXAAMrqwADL6YHowAD8jl8DAQAGwADL8IJYhVCFVoVzAQCAwwAAAAEDhV2FcwAAAAAAAABfAwEAAUqFYAEmhW8AFoVoFoVgLrmlwADK6sAAy+mAw8AA/I9fAwEABsAAy/WCWIV4hX2FrgAAgxcAAAABA4WFha4AAAABAQGFjQAAAIPWYAPAAP1RAABgA8AA+j8BSoWXARyFnxaFly65pcAAyurAAMvpgxcBAAGAhajAZ3GtAMAA/HYGwADL9oJYhhqGHIbNAACWPwAAAAEDhiWGzQAAAAIBAYYrAAAAlv9hAwFfAwEAYAPAAPo/AAGGPwAAIJY7YQMAXwMBAAFqAGADwAD9DnlfAwEAAUqGUwEmhskAHIZbFoZTLrmlwADK6sAAy+mWPwIAATSGZQOGZYaGAAAAAQEBhmgAAACWJl8DAAAAAGADwAD6PwFKhnQBHIZ4gIZ0wGdyCSABAAEmhoEAgoZ5wGdyaF8DAQAAAAGWOyMchqKBhpvAZ3IfSAEAASsAwAD9Xis0hrQDhrSGxwAAAAAAAABfAwAAAUqGugEmhsMAHIbAgYa6wGdyHyAAAAAAAF8DAAABYQMAXwMAAMAA/IRfAwEABsAAy/eCWIbShtmG+QAAIwAAAAEDhuGG+QAAAAAAAABgA8AA/esBSobnARyG7xaG5y65pcAAyurAAMvpIwAAAADAAPyHAABnbhgAZ25JAGduogBnbuMAZ28mAGdvaQBnb90AZ3BRAGdwsgBncPsAZ3FEAGdxjQBncekAZ3L4AGdzPQAAAA4CwADL+oJYhv6HBIe3A8AAdhIAAgAAlk1gA8AA/VEBWwAAgnZgA8AA/VEBWwFgAcAA/VEAAV0BwAD8ogFfAwEAAQTAAMv9gliHPodFWLmlwADK6gBdA8AA/KIBXwMAAAABBcAAzAOCWIdJh0mHYwAAAAOHVYdjAAAAAQEBh1sAAAS5pV0DwAD8ogFfAwAAAABdA8AAy/oCXwMAAF8DAQABPwIIAcAAy/2AAMBnc/oJAYdJwAD9ZwAAAAACBsAAy/+CWIdnh2yHjAAAXQAAAAEDh3SHjAAAAAAAAABgA8AA+j8BSod6ARyHghaHei65pcAAyurAAMv9XQAAAADAAPykBsAAzAGCWIeQh5aHtQEAXgAAAAEDh56HtQAAAAAAAABfAwEAAUqHoQEmh7EAFoepFoehLrmlwADK6sAAy/1ewAD8pl8DAQAAAGd0OQBndH4AZ3TFAAAAAgLAAMwEgliHuofAiUIDwAB2EwACAACWTWADwAD9UQFbAACCdmADwAD9UQFbAV0BwADL5gJfAwAAXwMBAAAAAQTAAMwHgliICYgQCbmlwADK6gBdA8AA/GcBXwMAAAABBcAAzA6CWIgViBWIMQCAtcAAyuoAA4gjiDEAAAABAQGIKQAABLmlXQPAAPxnAV8DAAAAAF0DwADMBAJfAwAAXwMBAAE/AggBwADMB4AAwGd1VQkBiBXAAMv5AAAAAAIGwADMCYJYiDaIPokDBAEAAAAAAQOISokDAAACAACWTWADwAD9UQFbAACCdmADwAD9UQFbAQEBiFcAAACDRF0DwAD8ZwFfAwIAAABdA8AAzAQCXwMCAF8DAwABPgJJiGUliHCAiGnAZ3XLXQPAAMzDAV8DAgA+AUqIlwEfiKLAAMwRAQJfAwIAXwMDAAEUiMXAZ3XLAAFdA8AAzMMBXwMCAAA/SojYAR+I48AAzA4BAl8DAgBfAwMAAYCI+MBndcsABsAAzAuCWIkIiRSJQAAAljgAAAABA4kbiUAAAAEAAJb5YAPAAP1RAVsAAAAAXQPAAPxnAV8DAgABSokhAR6JJcAAzAkBAl8DAABfAwIAARaJOC65pcAAyurAAMwHAAAAZ3WUAGd2VQBndrMAAAACAsAAzA+CWIlFiUuKEAPAAHYUAAIAAJZNYAPAAP1RAVsAAIJ2YAPAAP1RAVsBXQHAAMwEAl8DAABfAwEAAAFdAcAAzMMBXwMBAAABBcAAzBGCWIm3ibeKDgAAAAOJ04oOAAAAAQEBie8AAACDRF0DwADMwwFfAwAAAABdA8AAzA8CXwMAAF8DAQABPwEJAIoFwADMDgEAAYCKB8BndyoAAAAAZ3dkAAAAAALAAMwSgliKE4oikm83wAB2FQACAACWTWADwAD9UQFbAACCdmADwAD9UQFbAV0BwADL5gJfAwAAXwMBAAABXQHAAMGfAV8DAQAAAQXAAMwUAAAAAAQAAAMAAAAAAAAAAABdA8AAzBICXwMAAF8DAQABPwEJAADAAMv5AAAAAD0GwADMFk6J7on+ih8BAFwAAAABA4oHih8AAAAAAAAAXQPAAPyiAV8DAQABSooKAR+KCsAAzQQBAV8DAQABLgAGwADMHk6KJIomikkAAJY5AAAAAQOKL4pJAAAAAQEBijQAAAAnYAPAAPwFAABfAwEAAUqKPgEcikIuSwEAAYCKQ8BneEoAwAD8uAbAAMwfTopOilqKsgAAlj0AAAABA4pkirIAAAABAQGKcQAAIIPWXQPAAPxnAV8DAQAAAF0DwAD8ZwFfAwEAAUqKgQEeinjAAM3yAgFfAwEAAi6AiqzAZ3iUAAbAAMwgToq3iryLngAAg/gAAAABA4rDi54AAAABAQGKyQAAAIinYQMBXwMBAFwAAFwBPgJOiuaK7QAAYWADwAD8BQEWivQuYcAA/NhFiwABiwmLCwAAYmADwAD8BQGTARyLEoKLEMBneR9jAQABgYsUwGd5BADAAP0yAYqLHMBneR8cix2CixzAZ3kfZAEAAZQAwAD9Kj4CPRyLL4CLKcBneO4gAQABHIs0LksBAAGCizXAZ3kfAMAA/LgAAEmLQCEci0uBi0TAZ3kESAEAARaLUy5hwAD82ADAAP0oPgE9MItlH4trwAD7rAEAAS4APwbAAMwXTouji8qL4AEAgVUBaoukYAPAAPoGwAC+3AAAAQOL0ovgAAAAAAAAAGADwAD6PwFKi9UBHIvcFovVLmHAAPzYSAEAAZMAwAD9KAbAAMwYTovli+6MBAEAg7IAAAABA4v5jAQAAAAAAAAAYAPAAPo/AUqL/AEhFov9LoFVwADBogbAAMwZTowJjA+MagEAgxkAAAABA4wVjGoAAAAAAAAAXwMBAAE+AkmMGxyMJhaMHy5hwAD82EgBAAGTAMAA/Sg9MIwsHoxHwADOJwAAAAA/SoxYARyMYy5LAQABkwDAAPy4BsAAzFROjG+MeIzdAgCDGQAAAAEDjH2M3QAAAAEBAYyAAAAggJZfAwEAAABcAT4CSYyNHIyYFoyRLmHAAPzYSAEAAZMAwAD9KD0wjJ4ejLnAAM4nAAAAAD89HIzOLoC/AgACk4CM1MBnesQAwAD8uQbAAMwaTozijOiNSwEAgegAAAABA4ztjUsAAAAAAAAAXwMBAAE+AkmM8xyM/haM9y5hwAD82EgBAAGTAMAA/Sg9MI0EHo0fwADOJwAAAAA/So0wARyNOy5LAQABHI1DFo08LmHAAPzYgY0BAAGUAMAA/SsAwAD8uAbAAMxVTo1QjVmNxgIAgegAAAABA41djcYAAAABAQGNYAAAIICWXwMBAAAAXAE+AkmNbRyNeBaNcS5hwAD82EgBAAGTAMAA/Sg9MI1+Ho2ZwADOJwAAAAA/PRyNri6AvwIAAhyNthaNry5hwAD82IGNAQABlADAAP0rgI29wGd7rADAAPy5BsAAzBtOjcuN0Y5nAQCAwwAAAAEDjdiOZwAAAAAAAABfAwEAAT4DSY3eHI3pFo3iLmHAAPzYSAEAAZMAwAD9KD0wje8ejgrAAM4nAAAAAD9JjhscjiYWjh8uYcAA/NiAlwEAAZQAwAD9ND0wjisejkbAAM4oAAAAAD9KjlUBHI5gLksBAAGTAMAA/LgGwADMIU6ObI5xj3IAAIMXAAAAAQOOeY9yAAAAAQEBjoEAAACWJmADwAD9UQAAYAPAAPo/AT4DTo6UjpsAAGFgA8AA/AUBFo6iLmHAAPzYRY6uAY63jrkAAGJgA8AA/AUBkwEcjsCCjr7AZ3zyYwEAAYGOwsBnfNcAwAD9MgGKjsrAZ3zyHI7Lgo7KwGd88mQBAAGUAMAA/So+AkmO1xyO4xyO3y5LAQABgo7gwGd88gDAAPy4SAEAAYCO5sBnfL4AwAD9XkqO7wEpP0mPAiEcjw2BjwbAZ3zXSAEAARaPFS5hwAD82ADAAP0oPgE9MI8nH48twAD7rAEAAS4AP0qPYgEqBsAAzCJOj3ePfJB8AACWNgAAAAEDj4GQfAAAAAEBAY+HAAAAlv9hAwFfAwEAYAPAAPo/AABgA8AA+j8BPgNOj6KPqQAAYWADwAD8BQEWj7AuYcAA/NhFj7wBj8WPxwAAYmADwAD8BQGTARyPzoKPzMBnffxjAQABgY/QwGd94QDAAP0yAYqP2MBnffwcj9mCj9jAZ338ZAEAAZQAwAD9Kj4CSY/lIRyP7oCP6sBnfcEgAQABHI/zLksBAAGCj/TAZ338AMAA/LgAAEqP+QEqP0mQDSEckBiBkBHAZ33hSAEAARaQIC5hwAD82ADAAP0oPgE9MJAyH5A4wAD7rAEAAS4AP0qQbQEpBsAAzCNOkIGQhpGDAACB1AAAAAEDkImRgwAAAAEBAZCPAAAAlv9hAwFfAwEAYAPAAPo/AABgA8AA+j8BPgNOkKqQsQAAYWADwAD8BQEWkLguYcAA/NhFkMQBkM2QzwAAYmADwAD8BQGTARyQ1oKQ1MBnfwRjAQABgZDYwGd+6QDAAP0yAYqQ4MBnfwQckOGCkODAZ38EZAEAAZQAwAD9Kj4CSZDtHJD1gJDxwGd+ySABAAEckPouSwEAAYKQ+8BnfwQAwAD8uAAASpEAASk/SZETIRyRHoGRF8BnfulIAQABFpEmLmHAAPzYAMAA/Sg+AT0wkTgfkT7AAPusAQABLgA/SpFzASoGwADMJE6RiJGKkv0AAJY6AAAAAQORlJL9AAAAAgEBkZoAAACW/2EDAV8DAQBgA8AA+j8AAZGuAAAgljthAwBfAwEAAWoAYAPAAP0OeV8DAQABPgROkcORygAAYWADwAD8BQEWkdEuYcAA/NhFkd0BkeaR6AAAYmADwAD8BQGTARyR74OR7cBngCFjAQABgpHxwGeABgDAAP0yAYuR+cBngCEckfqDkfnAZ4AhZAEAAZQAwAD9Kj4DTpIIkhAAAJYmXwMBAAEckhYuSwEAAYOSF8BngCEAwAD8uEmSIRySKYCSJcBnf9AgAQABhJIqwGeAagAASpI0AYSSO8BngGo/SZJKIRySVYKSTsBngAZIAQABFpJdLmHAAPzYAMAA/Sg+AT0wkm8fknXAAPusAQABLgA/SZKqIRyStYGSrsBnf+ZIAQABKwDAAP1eSpK+ARySy4GSxcBnf+YgAAAAAAA/PTCS0x6S7sAAzicAAAAABsAAzCVOkwKTBJR7AACWPwAAAAEDkw2UewAAAAIBAZMTAAAAlv9hAwFfAwEAYAPAAPo/AAGTJwAAIJY7YQMAXwMBAAFqAGADwAD9DnlfAwEAAT4ETpM8k0MAAGFgA8AA/AUBFpNKLmHAAPzYRZNWAZNfk2EAAGJgA8AA/AUBHJNqgpNjwGeBdYGNAQABlADAAP0rARyTcYOTb8BngZCBbQEAAZMAwAD9NQGLk3fAZ4GQHJN4g5N3wGeBkIGNAQABlADAAP0rPgNOk4aTjgAAliZfAwEAARyTlC5LAQABg5OVwGeBkADAAPy4SZOfHJOngJOjwGeBPyABAAGEk6jAZ4HpAABKk7IBhJO5wGeB6T9Jk8ghHJPTgpPMwGeBdUgBAAEWk9suYcAA/NgAwAD9KD4BPTCT7R+T88AA+6wBAAEuAD9JlCghHJQzgZQswGeBVUgBAAErAMAA/V5KlDwBHJRJgZRDwGeBVSAAAAAAAD89MJRRHpRswADOJwAAAAAGwADMJk6UgJSClsQAAJZCAAAAAQOUjZbEAAAAAgEBlJMAAACW/2EDAV8DAQBgA8AA+j8AAZSnAAAgljthAwBfAwEAAWoAYAPAAP0OeV8DAQABPgdOlLyUwwAAYWADwAD8BQEWlMouYcAA/NhOlNgAAABfXwMBAABOlOiU8wAAn75gA8AA+j8BKkWVAAGVCZULAABiYAPAAPwFAZMBHJUShZUQwGeDLGMBAAGClRTAZ4L0AMAA/TIBjZUcwGeDLByVHYWVHMBngyxkAQABlADAAP0qPgNOlSuVMwAAliZfAwEAARyVOS5LAQABhZU6wGeDLADAAPy4SZVEHJVMgJVIwGeCviABAAGGlU3AZ4N1AAA+A0mVYYSVZcBngxg+AT0wlX0elZjAAM4oAAAAAD89jJW1wGeDGCk9i5XQwGeDDIaV2MBng3U/SZXvIRyV+oKV88BngvRIAQABFpYCLmHAAPzYAMAA/Sg+AT0wlhQflhrAAPusAQABLgA/SZZPhJZTwGeDGEqWXwGDlmbAZ4MMP0mWcSEclnyBlnXAZ4LUSAEAASsAwAD9XkqWhQEclpKBlozAZ4LUIAAAAAAAPz0wlpoelrXAAM4nAAAAAAbAAMwnTpbJltCXdQAAWAAAAAEDltSXdQAAAAEAAZbdAAAAga9gA8AA/esBapbpYAPAAP3rhBIAYAPAAP3rAT4DSZb0HJb/Fpb4LmHAAPzYSAEAAZMAwAD9KEqXBQEnAD9OlyGXKAAAgotgA8AA/jUBNZcqAAABAGADwAD+NQEflyrAAP5UAAAAADUAAAABAFsBHJc6gZc4wGeE3p+/AgACLoCXScBnhIoAwAD+S4EAwGeE3kqXWQEcl2eBl2DAZ4TOIwAAAADAAP5OBsAAzChOl3qXhpfBAACBpQAAAAEDl4uXwQAAAAEBAZeRAAAAlv9hAwFfAwEAYAPAAPo/AABdA8AA/GcBXwMBAAFKl6UBH5elwADNPAIBXwMBAAIugJe8wGeFVgAGwADMKU6XxpfSl/4AAJZGAAAAAQOX3pf+AAABAACCdmADwAD9UQFbAAAAAF0DwAD8ZwFfAwIAAUqX5AEfl+TAAM4aAQFfAwIAAS4ABsAAzCpOmAOYD5hKAACAqwAAAAEDmBWYSgAAAQAAgnZgA8AA/VEBWwEBAZgYAAAAgaZhAwFfAwEAXwMCAAAAXQPAAPxnAV8DAgABSpgpAR+YKcAAzTECAl8DAQBfAwIAAi6AmEjAZ4YKAAbAAMwrTphPmFuYpQAAhI8AAAABA5hkmKUAAAEAAIJ2YAPAAP1RAVsBAQGYcQAAAIGmYQMBXwMBAF0DwAD8ZwFfAwIAAABdA8AA/GcBXwMCAAFKmIgBH5iIwADNUAICXwMBAF8DAgACLoCYo8BnhnQABsAAzCxOmKqYrJoSAACWQAAAAAEDmLKaEgAAAAEBAZi1AAAghx1hAwJfAwEAXwMBAF8DAQAAAF8DAQABPgVOmOSY6wAAYWADwAD8BQEWmPIuYcAA/NhJmP4cmQmBmQLAZ4b5SAEAAZMAwAD9KD0wmQ8emSrAAM4nAAAAAD9OmT2ZQwAAgJZfAwEAARyZSS5LAQABkwDAAPy4RZlSAZlbmV0AAGJgA8AA/AUBlAEcmWSDmWLAZ4dXYwEAAYGZZsBnhvkAwAD9MgGLmW7AZ4dXHJlvg5luwGeHV2QBAAGUAMAA/So+Aj2KmXvAZ4c4HJmKgJmDwGeG2SACAAKCmYvAZ4c4HJmWLksBAAGDmZfAZ4dXAMAA/LgAAEmZoiEcma2BmabAZ4b5SAEAARaZtS5hwAD82ADAAP0oPgE9MJnHH5nNwAD7rAEAAS4AP0qaAgGCmgnAZ4c4BsAAzC1OmheaGZtaAACDWQAAAAEDmiCbWgAAAQAAgnZgA8AA/VEBWwICApojAAAAljxfAwIAAJozAAAAhx1hAwJfAwIAXwMBAF8DAgAAAF8DAgABPgROmmKaaAAAgJZfAwIAAYCaasBniDtOmoCahwAAYWADwAD8BQEWmo4uYcAA/NhFmpoBmqOapQAAYmADwAD8BQGTARyarISaqsBniJdjAQABg5quwGeIfADAAP0yAYyatsBniJccmreEmrbAZ4iXZAEAAZQAwAD9Kj4CPYqaw8BniGccmtKBmsvAZ4hHIAIAAoKa08BniGccmt4uSwEAAYSa38BniJcAwAD8uAAASZrqIRya9YOa7sBniHxIAQABFpr9LmHAAPzYAMAA/Sg+AT0wmw8fmxXAAPusAQABLgA/SptKAYKbUcBniGcGwADMLk6bX5trm6MAAJYvAAAAAQObb5ujAAAAAQEBm3QAAACA7mADwAD8BQAAXQPAAPxnAV8DAQABSpt+AR+bfsAAzPcDAV8DAQADLoCbl8BniW8rAAbAAMwvTpuom7ScBQAAlkMAAAABA5u9nAUAAAABAQGbwwAAAJb/YQMBXwMBAGADwAD6PwAAXQPAAPxnAV8DAQABPgFKm9oBH5vhwADNugIBXwMBAAIugJv8wGeJxQAGwADMME6cCpwWnEsAAJZEAAAAAQOcGpxLAAAAAQEBnB8AAACA7mADwAD8BQAAXQPAAPxnAV8DAQABSpwpAR+cKcAAzPcDAV8DAQADLpOAnEXAZ4ojAAbAAMwxTpxQnFycrQAAlkUAAAABA5xlnK0AAAABAQGcawAAAJb/YQMBXwMBAGADwAD6PwAAXQPAAPxnAV8DAQABPgFKnIIBH5yJwADNggIBXwMBAAIugJykwGeKeQAGwADMMk6cspy6nboAAICtAAAAAQOcwJ26AAAAAQAAAZzHAAAAhV5gA8AA+j8BapzSYAPAAPo/d10DwAD8qQFfAwEAAT4ETpznAAAAgXZdA8AA/KkBXwMBAABJnPOAnPfAZ4rYPgE9iZ0JwGeK/zWdFQAAAQBdA8AA/KkBXwMBAAExnRVfAwEAADUAAAABAFsBF50Zgp0XwGeLJ2EWnSIuYcAA/NjAAPzWggDAZ4snPgE9iZ09wGeK/x6dRsAA9gABAV8DAQABFp1OLmHAAPzYAEWdYQGdap1sAABiYAPAAPwFAZMBHJ1zgp1xwGeLjWMBAAEWnXUuYcAA/NgAwAD9MgGKnX3AZ4uNHJ1+gp19wGeLjWQBAAGUAMAA/So+AT0cnZCBnYrAZ4r/gL8CAAKCnZHAZ4uNHJ2aLksBAAGCnZvAZ4uNAMAA/LgAwAD8uUqdqQGBnbDAZ4r/BsAAzDNOnb+dxp5LAACVGQAAAAEDncueSwAAAAAAAABdA8AA/ZwBXwMBAAE+A06d253iAACBdl0DwAD9nAFfAwEAAR6d5MAAwRcAAV8DAQAAAEWd8gGd+539AABiYAPAAPwFAZMBHJ4EgZ4CwGeMaGMBAAEWngYuYcAA/NgAwAD9MgGJng7AZ4xoHJ4PgZ4OwGeMaGQBAAGUAMAA/So+AT0cniKAnhvAZ4xBVgEAARyeKi5LAQABgZ4rwGeMaADAAPy4AMAA/alKnjoBgJ5BwGeMQQbAAMw0Tp5lnmqeoAAAVgAAAAEDnm2eoAAAAAEBAZ5wAAAgliZfAwEAAABcAT4BPRyegy6AvwIAAjUAAAABAGADwAD8BQEWnokuYcAA/Ng1AAAAAQBgA8AA/AUBF56JLmEcno+BAMBnjR9kAQABlADAAP0qwAD81oEAwGeNH4CelcBnjQMAwAD8uQbAAMw1Tp6lnqqfmAAAgKUAAAABA56wn5gAAAABAQGevQAAIIPMXQPAAPxnAV8DAQAAAFwBPgJOntGe0wAAYmADwAD8BQEWntouYcAA/NhGnuYAnu0AAACWJl8DAQAAgJ74wGeNjj4EQCIcnx0WnxYuYcAA/NhIAQABgZ8gwGeNpwDAAP0oATCfJh+fLMAA+6wBAAEuAJ8Rn04APRefXC5hHJ9ngZ9lwGeNp2QBAAGUAMAA/SrAAPzWPRyfdi6AvwIAAoGfd8BnjaeCn3zAZ43CAMAA/Lk9iZ+LwGeNpxyfjIGfi8BnjadkAQABlADAAP0qBsAAzDZOn52foqBgAACEWQAAAAEDn6igYAAAAAEBAZ+wAAAAliZgA8AA/VEAAGADwAD6PwE+AkWfvwGfyJ/KAABiYAPAAPwFAZMBHJ/RgZ/PwGeOnGMBAAEWn9guYcAA/NgAwAD9MgGJn+DAZ46cHJ/hgZ/gwGeOnGQBAAGUAMAA/So+AUmf7Ryf+Ryf9S5LAQABgZ/2wGeOnADAAPy4SAEAAYCf/MBnjoAAwAD9Xj4CPRygFC6fwMAAvcwCAAKBoB7AZ46cHKAjgaAhwGeOnGQBAAGUAMAA/SoAwADBw0qgMQEpP0qgUAEqBsAAzDhOoOGg5qH+AACfwMAAvcwAAAABA6Dvof4AAAACAgKg9AAAAGpgA8AA/AUAoP8AAACCjGADwAD8BQAAXAE+B06hDqEVAABhYAPAAPwFARahHC5hwAD82EAcoTGTgWsBAAGAoTTAZ49uAMAA/TOhL6E5AEAcoU2AoUfAZ49uYwEAAYGhT8Bnj3sAwAD9MqFHoVIAQByhZIGhYMBnj3uBawEAAYKhZ8Bnj48AwAD9M6FgoW0ATqF4oX0AAJiGYAPAAPwFARyhg4Ghf8Bnj3uBjQEAAYChhcBnj24AwAD9K0WhkAGhmaGbAABiYAPAAPwFAYGhncBnj3sBHKGkhKGiwGeQMWMBAAGCoabAZ4+PAMAA/TIBjKGuwGeQMRyhr4ShrsBnkDFkAQABlADAAP0qPgE9HKG/LoC/AgACHKHChKHAwGeQMYGNAQABg6HEwGeQAwDAAP0rHKHQLksBAAGEodHAZ5AxAMAA/LgAwAD8uT0XoeQuYRyh9IKh7cBnj4+BjQEAAYOh9sBnkAMAwAD9K8AA/NYGwADMO06iA6IIokgAAJb+AAAAAQOiE6JIAAAAAQEBohkAAACW/2EDAV8DAQBgA8AA+j8AAFwBPgE9HKIwLp/BwAC9zAIAAoCiOMBnkQEqAMAAwcQGwADMPE6iTaJSopEAAJcBAAAAAQOiXaKRAAAAAQEBomMAAACW/2EDAV8DAQBgA8AA+j8AAFwBPgE9HKJ6Lp/BwAC9zAIAAoCigsBnkVUpAMAAwcQGwADMOU6ilqKbpJAAAJ/BwAC9zAAAAAEDoqKkkAAAAAICAqKoAAAAlv9hAwFfAwEAYAPAAPo/AKK+AAAAn8JgA8AA+j8AAFwBPgROotyi5QAAn8NdA8AA/KkBXwMBAAExoupfAwEAAE6i9qL9AABhYAPAAPwFARajBC5hwAD82EWjEAGjGaMbAABiYAPAAPwFAZMBHKMihKMgwGeSDmMBAAGDoyTAZ5HzAMAA/TIBjKMswGeSDhyjLYSjLMBnkg5kAQABlADAAP0qPgNOoz2jRQAAliZfAwEAARyjSy5LAQABhKNMwGeSDgDAAPy4SaNWHKNoHKNegKNawGeRrSABAAGFo1/AZ5JXAABIAQABgaNrwGeRwgDAAP1ePgE9HKOOgqOFwGeR1lYBAAGFo5LAZ5JXAMAA/Lo/SaOqIRyjtYOjrsBnkfNIAQABFqO9LmHAAPzYAMAA/Sg+AT0wo88fo9XAAPusAQABLgA/SaQKIRykHhakF4KkDsBnkdZhwAD82EgBAAEWpCYuYcAA/NgAwAD9KD4CPRykOy6DXgMAA5MWpFCCpEfAZ5HWYcAA/NiCpFjAZ5HWAMAAwdM9F6RuLmEWpICCpHfAZ5HWYcAA/NjAAPzWPwbAAMw9TqSVpJqkuwAAgkIAAAABA6SfpLsAAAAAAAAAXAE+AT0XpK0uYZPAAPzWBsAAzD5OpMCkyKTuAACWOAAAAAEDpM+k7gAAAQAAlvlgA8AA/VEBWwAAAABdA8AA/KkBXwMCAAFKpNUBHqTawAD8tAECXwMBAF8DAgABLgAGwADMP06k8qT0pZIAAIYXAAAAAQOk/qWSAAAAAAAAAF8DAQABPgRJpQccpRIWpQsuYcAA/NhIAQABkwDAAP0oPgE9MKUgHqU7wADOJwAAAAA/TqVUpVsAAIF2XwMBAAEcpWEuSwEAARylaRalYi5hwAD82IGNAQABlADAAP0rAMAA/Lg9F6VzLmEcpXkWpXMuYcAA/NiBjQEAAZQAwAD9K8AA/NZKpYEBgKWIwGeUMgbAAMxATqWXpZyl6wAAgK4AAAABA6WgpesAAAABAAGlpgAAAJshYQMCXwMBAF8DAQBgA8AA/AUBagBgA8AA/Q55AFwBPgE9HqXFwADOvQIBXwMBAAIuNQAAAAEAYQMCXwMBAF8DAQBgA8AA/AUBgKXQwGeUriMcpdiBAMBnlOZIAQABKwAAaqXbYQMCW1tgA8AA/AXAAL7wgQDAZ5TmAWEDAl8DAQBfAwEAYAPAAPwFAAbAAMw6TqXwpfumpgABn8TAAL3MAAAAAQOmBqamAAAAAgICpgcAAACB1VsApgoAAACCSlsAAGADwAD8BQE+AUqmgwEeppXAAPpOAgACJqadAYCmncBnlWNdA8AA+ksBWyamoAGBpqDAZ5VsXQPAAPpLAVsABsAAzEFOpqumsKezAACfxQAAAAEDprenswAAAAEAAabAAAAAn8ZgA8AA0G0BagBgA8AA/Q55AFwBPgM9Ixym1oCmz8BnldNIAQABKwDAAP1eiKbPwGeV0x6m2sAA0G8AAAAAKwFgA8AA0G1Opuym8wAAYWADwAD8BQEWpvouYcAA/NhDpwYcpxSBpw3AZ5YggJcBAAGUAMAA/TQ+BU6nJacpAACfx2ADwAD8BQEcpzKApyvAZ5XTn8gBAAGBpzrAZ5YgAMAA0HI9iadJwGeWIBynUIGnScBnliCBjQEAAZQAwAD9K06nYKdkAACfyV8DAQABHKdqLksBAAGBp2vAZ5YgAMAA/Lg9HKd+LoC/AgACgad/wGeWIBynjS5LAQABgqeOwGeWUgDAAPy4AMAA/Lk9HKeeLoC/AgACgqefwGeWUoOnpsBnlpoAwAD8uQbAAMxCTqe4p8Sn8QAAnGoAAAABA6fJp/EAAAAAAAAAXQPAAPzaAmADwAD8BV8DAQABPgFKp9IBH6fZwADOngEBXwMBAAEuAAbAAMxDTqf2qAeo0QMAZAAAAAEDqAio0QAAAAEBAagRAAAgg9ZdA8AA/KkBXwMBAAAAXQPAAPypAV8DAQABPgROqCKoKQAAgXZdA8AA/KkBXwMBAAE1qC4AAAEAXQPAAPypAV8DAQABMaguXwMBAAA1AAAAAQBbAReoMoGoMMBnl6BhHKhIFqhBLmHAAPzYZAEAARaoUICoSsBnl2hhwAD82ADAAP0qwAD81oEAwGeXoD0cqGSBqF3AZ5eLg14DAAOTFqh1LmHAAPzYLgDAAPzOPRyoj4GoiMBnl4uDXgMAAxaonS5hwAD82BaorIGopcBnl4thwAD82ICotMBnl2gAwAD8zkqowAGBqMfAZ5eLBsAAzEROqNao3qogAACBWAAAAAEDqOWqIAAAAAIBAqjqAAAAamADwAD8BQCo9gAAAIKMYAPAAPwFAWoAYAPAAP0OeQBdA8AA/KkBXwMBAAE+B06pBqkRAACfymADwAD8BQEWqRguYcAA/Ng9IxypKIGpJMBnmIZIAQABKwDAAP0oiakkwGeYhoKpLMBnmK0rAWADwAD8BT0eqUfAAPtGAwADgKlXwGeYeYGpXsBnmIaCqWPAZ5itAE6peKl/AABhYAPAAPwFARyphYGpgcBnmIaBjQEAAYCph8BnmHkAwAD9K06pmqmhAACBdl0DwAD8qQFfAwEAATWppgAAAQBdA8AA/KkBXwMBAAExqaZfAwEAADUAAAABAFsBF6mqhKmowGeZUmGDqbPAZ5kTwAD81oQAwGeZUkWpvwGpyKnKAABiYAPAAPwFAZMBHKnRhanPwGeZlGMBAAGDqdPAZ5kTAMAA/TIBjanbwGeZlByp3IWp28BnmZRkAQABlADAAP0qPgE9HKnuhKnowGeZPYC/AgAChanvwGeZlByp+C5LAQABHKn/gKn5wGeYeWQBAAGFqgHAZ5mUAMAA/SoAwAD8uADAAPy5SqoPAYSqFsBnmT0GwADMRU6qJaoxqrwAAJ/LAAAAAQOqOaq8AAAAAgICqj4AAABqYAPAAPwFAKpJAAAAgoxgA8AA/AUAAF0DwAD8ZwFfAwEAAT4CPR6qX8AA+0YDAAOAqm/AZ5pJgap2wGeaVhaqgC5hwAD82ABKqo0BH6qUwADM9wMBXwMBAAMugKqtwGeaSYGqtMBnmlYABsAAzEZOqsGqxqtdAACfzAAAAAEDqtGrXQAAAAICAqrWAAAAamADwAD8BQCq4QAAAIKMYAPAAPwFAABcAT4CPR6q98AA+0YDAAOAqwfAZ5rXgasOwGea5BarGC5hwAD82ABJqyUcqy2BqynAZ5rkgJcBAAGAqy/AZ5rXAMAA/TQ+AT0cqz4un8DAAL3MAgACgKtIwGea14GrT8BnmuQAwADBwz8GwADMR06rYqtnrBAAAJuxAAAAAQOrcKwQAAAAAwIDq3UAAABqYAPAAPwFAKuAAAAAgoxgA8AA/AUAq4gAACCfzV8DAQABagBgA8AA/Q55AFwBPgI9HqugwAD7RgMAA4CrsMBnm3uBq7fAZ5uIFqvBLmHAAPzYAEWrzgGr16vZAABiYAPAAPwFAYCr28Bnm3sBHKvkg6viwGeb12MBAAGBq+bAZ5uIAMAA/TIBi6vrwGeb1xyr7IOr68Bnm9dkAQABlADAAP0qPgE9HKv8LoC/AgACg6v9wGeb14KsAsBnm5YAwAD8uQbAAMxITqwVrBqv2gAAg14AAAABA6wir9oAAAAEAwSsJwAAAGpgA8AA/AUArDIAAACCjGADwAD8BQCsQwAAIIPMXQPAAPxnAV8DAQAArFIAAACfzmADwAD8BQFqrF5gA8AA/AUJAFwBPgk9HqxzwAD7RgMAA4Csg8BnnGGBrIrAZ5xuFqyULmHAAPzYAE6spaysAABhYAPAAPwFARyssoGsrsBnnG6BjQEAAYCstMBnnGEAwAD9K0msvxysyoSsw8BnnNBIAQABkwDAAP0oSqzQAD89HqznwAD7RwIAAoOs+MBnnI8nn84ATq0eAAAAn89dA8AA/KkBXwMBAABOrTEAAACf0GADwAD8BQBJrW8lrXyCrXPAZ5x8XQPAAPypAV8DAQA+Aj2NrZDAZ50sFK2cwGecfAIBXQPAAPypAV8DAQA9jq2swGedQIOtucBnnI8+Aj2NrdfAZ50sHK38HK3sgq3jwGecfJYvAQABg63xwGecjwDAAPyBgK0BAAABhV4qwAD8fT2OrhvAZ51Ak0muNRyuTRyuRIauOcBnnUBkAQABhK5GwGec0ADAAP0qgJcBAAEWrlmFrk/AZ50sYcAA/NgAwAD9ND4BPTCuaR6uhMAAzikAAAAAP0mumByup4aunMBnnUBjAQABgK6pwGecYQDAAP0yPgFFrvoBrwOvBQAAYmADwAD8BQEcrw6ErwfAZ5zQgY0BAAGUAMAA/SsBHK8Vh68TwGeeP4FtAQABkwDAAP01AY+vG8Bnnj8crxyHrxvAZ54/gY0BAAGUAMAA/Ss+AT0cry4ugL8CAAIcrzWAry/AZ5xhZAEAAYevN8Bnnj8AwAD9KhyvRYWvPMBnnSxLAQABHK9Rhq9GwGedQGQBAAGHr1PAZ54/AMAA/SoAwAD8uADAAPy5PgFFr3IBr3uvfQAAYmADwAD8BQGTARyvhIevgsBnnvNjAQABhK+GwGec0ADAAP0yAY+vjsBnnvMcr4+Hr47AZ57zZAEAAZQAwAD9Kj4BPRyvoS6AvwIAAhyvqICvosBnnGFkAQABh6+qwGee8wDAAP0qHK+4ha+vwGedLEsBAAEcr8SGr7nAZ51AZAEAAYevxsBnnvMAwAD9KgDAAPy4AMAA/LkGwADMSU6v36/ksyAAAJ/RAAAAAQOv8LMgAAAAAwMDr/UAAABqYAPAAPwFALAAAAAAgoxgA8AA/AUAsBEAACCf0l0DwAD8ZwFfAwEAAABcAT4FPR6wL8AA+0YDAAOAsD/AZ5+wgbBGwGefvRawUC5hwAD82ABJsF0hJbBtgrBhwGefy10DwADMwwFbPgE9irCSwGefyxywrIKwoMBnn8uArQAAAADAAPx9P06wxLDRAACf02ADwAD8BQEcsNeBsNPAZ5+9gY0BAAGAsNnAZ5+wAMAA/StOsOiw9QAAn9RgA8AA/AUBFrEDgrD3wGefy2HAAPyKSbEPHLEgg7ETwGegPIFtAQABhLEjwGegZwDAAP01PgNOsT2xRwAAn9VgA8AA/AUBHLFPgLFJwGefsGQBAAGEsVHAZ6BnAMAA/So9HLFqLoNeAwADgLFzwGefsIWxesBnoKaCsYXAZ5/LAMAAwdNJsZkcsaqDsZ3AZ6A8gJcBAAGEsazAZ6BnAMAA/TQ+AT0cscQun8DAAL3MAgAChbHOwGegpoGx2cBnn70AwADBwz8+Bk6x/rIEAACbMGADwAD8BQEcshOEsgbAZ6BngY0BAAGDshXAZ6A8AMAA/StOsi2yNwAAl1dgA8AA/AUBHLJFFrI+LmHAAPzYZAEAAYWyR8BnoTgAwAD9Kk6yWLJiAACf1WADwAD8BQEcsmqAsmTAZ5+wZAEAAYSybMBnoGcAwAD9Kj0XspouYYayo8BnoWPAAPzWPRyyuS6DXgQABIeywsBnoY+Gss3AZ6FjLoGy3sBnn70AwADB0z0csu8ug14DAAOAsvjAZ5+wh7L/wGehj4KzCsBnn8sAwADB0wbAAMxKTrMlsymz4QAAgLsAAAABA7Mws+EAAAACAQKzOAAAIJYmYAPAAP1RALNGAAAAamADwAD8BQFqs05gA8AA/AUJAGADwAD8BQE+A0mzWByzYoGzXMBnoj9jAQABkwDAAP0yPYmzZ8Bnoj+TP0WzdgGzf7OBAABiYAPAAPwFAYGzg8Bnoj8BHLOMgrOKwGeihWMBAAEWs5MuYcAA/NgAwAD9MgGKs5vAZ6KFHLOcgrObwGeihWQBAAGUAMAA/So+AUmzqByztByzsC5LAQABgrOxwGeihQDAAPy4SAEAAYCzt8BnojEAwAD9XkqzwAGCs8fAZ6KFP0qz1AEcs9uUgcQAAAAAwAD8KAbAAMxLTrPms+q0pgAAn9YAAAABA7P0tKYAAAACAQKz+gAAAJb/YQMBXwMBAGADwAD6PwC0EAAAAGpgA8AA/AUBarQYYAPAAPwFCQBgA8AA/AUBPgNJtCIctCyBtCbAZ6NRYwEAAZMAwAD9Mj2JtDHAZ6NRkz9FtEABtEm0SwAAYmADwAD8BQGBtE3AZ6NRARy0VoK0VMBno5djAQABFrRdLmHAAPzYAMAA/TIBirRlwGejlxy0ZoK0ZcBno5dkAQABlADAAP0qPgFJtHIctHqAtHbAZ6M8IAEAARy0fy5LAQABgrSAwGejlwDAAPy4AABKtIUBgrSMwGejlz9KtJkBHLSglIHEAAAAAMAA/CgGwADMTE60q7SvtYgAAJZgAAAAAQO0urWIAAAAAgECtMIAACCWJmADwAD9UQC00AAAAGpgA8AA/AUBagBgA8AA/Q55AGADwAD8BQE+A0m03iIctOiBtOLAZ6RZSAEAASsAwAD9KAEctPmBtPPAZ6RZgW0BAAEWtQEuYcAA/NgAwAD9NT2JtQnAZ6RZHLUdFrUWLmHAAPzYgY0BAAGUAMAA/Ss/RbUmAbUvtTEAAGJgA8AA/AUBgbUzwGekWQEctTyCtTrAZ6TTgW0BAAGTAMAA/TUBirVCwGek0xy1Q4K1QsBnpNOBjQEAAZQAwAD9Kz4BSbVPHLVbHLVXLksBAAGCtVjAZ6TTAMAA/LhIAQABgLVewGekSwDAAP1eSrVnAYK1bsBnpNM/SrV7ARy1gpSBxAAAAADAAPwoBsAAzE1OtY21kbZuAACf1wAAAAEDtZ+2bgAAAAIBArWlAAAAlv9hAwFfAwEAYAPAAPo/ALW7AAAAamADwAD8BQFqAGADwAD9DnkAYAPAAPwFAT4DSbXJIhy104G1zcBnpZlIAQABKwDAAP0oARy15IG13sBnpZmBbQEAARa17C5hwAD82ADAAP01PYm19MBnpZkctggWtgEuYcAA/NiBjQEAAZQAwAD9Kz9FthEBthq2HAAAYmADwAD8BQGBth7AZ6WZARy2J4K2JcBnphOBbQEAAZMAwAD9NQGKti3AZ6YTHLYugrYtwGemE4GNAQABlADAAP0rPgFJtjoctkKAtj7AZ6WEIAEAARy2Ry5LAQABgrZIwGemEwDAAPy4AABKtk0BgrZUwGemEz9KtmEBHLZolIHEAAAAAMAA/CgGwADMTk62c7Z4t7IAAJ7VAAAAAQO2freyAAAAAgICtoMAAAAnYAPAAPwFALaMAAAgliZfAwEAAABcAT4GPR62qcAA+zECAAKAtrbAZ6bBJycAPR621sAA+0QEAASAtuvAZ6bBkxa29S5hwAD82CcnAEm3Cxy3FYC3D8BnpsFIAQABFrcdLmHAAPzYAMAA/Sg+Aj0cty0uVgEAAYG3McBnps4AwADBv0q3QQA/PRe3WC5hHLdeFrdYLmHAAPzYZAEAAZQAwAD9KsAA/NY9HLdmLoNeBAAEHLd1gLdvwGemwWQBAAGUAMAA/SoWt38uYcAA/NgugLeNwGemwQDAAMHTPRy3nS6AvwIAAoC3nsBnpsGBt6fAZ6bOAMAA/LkGwADMT063t7e5uCEAAJ/YAAAAAQO3wbghAAAAAQEBt8YAAAAnYAPAAPwFAABfAwEAAT4DTrfVt9wAAIF2XwMBAAEct+IuSwEAAYC348Bnp94AwAD8uD0ct+8un8DAAL3MAgACgLf5wGen3hy4BoC4AMBnp95kAQABlADAAP0qAMAAwcNKuBABgbgXwGen9AbAAMxQTrgmuCu7mgAAn9kAAAABA7g0u5oAAAACAgK4OQAAACdgA8AA/AUAuEwAACCDzF0DwAD8ZwFfAwEAAABcAT4HPR64Z8AA+0QEAASAuHzAZ6htkxa4hi5hwAD82CcnAEm4nCIhJbipgbigwGeoel0DwADMwwFbAR64yMAA9eYCAAKBuNLAZ6h6LgA+AT2JuOvAZ6h6HLj/gbj2wGeoeoCtAAAAAMAA/H0/TrkXuScAAJ/aYAPAAPwFARa5MoG5KcBnqHphwAD8ij0XuhwuYRy6Ixa6HC5hwAD82GQBAAGCuibAZ6j8AMAA/SrAAPzWSbo7IRy6Txa6SIG6P8BnqHphwAD8ikgBAAGCulLAZ6j8AMAA/Sg+Aj0XuuYuYRy67Ra65i5hwAD82IGNAQABgrrwwGeo/ADAAP0rwAD81j0wuwcfuw3AAPusAQABgbspwGeoegA/PRy7Pi6DXgQABBy7TYC7R8BnqG1kAQABgrtPwGeo/ADAAP0qFrtlLmHAAPzYLoC7c8BnqG0AwADB0z0cu38un9sCAAKAu4bAZ6htgbuNwGeoegDAAMHcBsAAzFFOu5+7pLyGAACf2wAAAAEDu6q8hgAAAAICAruvAAAAJ2ADwAD8BQC7wgAAIIPMXQPAAPxnAV8DAQAAAFwBPgFJu9Ilu9+Bu9bAZ6opXQPAAPypAVs+AT0cu/Aug14DAAOAu/nAZ6ocHLwGgLwAwGeqHGQBAAEWvBGBvAjAZ6opYcAA/IoAwAD9KoG8GcBnqikAwADB0z4BRrw3ALw+AAAAliZfAwEAAIG8ScBnqik+AT0cvGEugL8CAAI1AAAAAQBgA8AA/AUBgLxiwGeqHDUAAAABAGADwAD8BQGIvGLAZ6ocHLxngwDAZ6q9ZAEAAZQAwAD9KoMAwGeqvYK8bcBnqp0AwAD8uQbAAMwcTryLvJu8xAEAmIgAAAABA7ykvMQAAAAAAAAAXQPAAPxnAV8DAQABSrynAR+8p8AAzqgBAV8DAQABLgAGwADMUk68ybzQvQ8AACMAAAABA7zYvQ8AAAAAAAAAYAPAAP3rAUq83gEevOvAAMD5AwADLieZlieZlwAAAGd37ABneCsAZ3h1AGd4zwBneb8AZ3oNAGd6QwBneqUAZ3sVAGd7jQBnfBMAZ3yfAGd9ogBnfqoAZ3+xAGeBIABngp8AZ4RsAGeFNwBnhZMAZ4XfAGeGSQBnhroAZ4gQAGeJUABniaYAZ4oEAGeKWgBnirgAZ4wSAGeM5QBnjW8AZ45hAGePSwBnkOIAZ5E2AGeRigBnk2AAZ5OPAGeT3wBnlI8AZ5VAAGeVtABnlwIAZ5dKAGeYWgBnmioAZ5q4AGebXABnnEIAZ5+RAGeiEgBnox0AZ6QsAGelZQBnpqIAZ6e/AGeoTgBnqf0AZ6sJAGerSQBnq4UAAAA9AsAAzFaCWIoTiiKSbwfAAHYWAAIAAJZNYAPAAP1RAVsAAIJ2YAPAAP1RAVsBXQHAAMwSAl8DAABfAwEAAAAAAQXAAMxxAAAAAAQAAAMAAAAAAAAAAABdA8AAzFYCXwMAAF8DAQABPwEJAQDAAMwUAAAAABUGwADMWYJYinCKfIqDAQK5pcAAyuoAAAABA4qDioMAAAAAAAAAXQPAAPypAV8DAAAABsAAzFuCWIspizSLWAMASwAAAAEDizaLWAAAAAEBAYs7AAAAJ2ADwAD8BQAAXwMBAAFKi0UBJotUAByLTBaLRS65pcAAyurAAMxZSwEAAYCLTcBnrUYAwAD8uF8DAQAGwADMXIJYi12La4uoAwCAvwAAAAEDi26LqAAAAAICAotzAAAAJ2ADwAD8BQCLfAAAIICWXwMBAAAAXAE+AT0ci5AWi4kuuaXAAMrqwADMWYC/AgACgIuRwGetpiaLoACBi5rAZ62zXwMAAADAAPy5BsAAzG+CWIuti7aL6gIAYQAAAAEDi7yL6gAAAAEBAYvBAAAAYWADwAD8BQAAXAE+AT0Xi9cWi88uuaXAAMrqwADMWWGAi+DAZ64VwAD81gbAAMxdgliL74v0jCIAAFYAAAABA4v3jCIAAAABAQGL+gAAIICWXwMBAAAAXAE+AT0cjA8WjAcuuaXAAMrqwADMWVYBAAEmjBkAgIwTwGeuZF8DAAAAwAD8ugbAAMxegliMJ4wsjH8AAIClAAAAAQOMMox/AAAAAQEBjD8AACApXQPAAPxnAV8DAQAAAFwBPgE9HIxVFoxNLrmlwADK6sAAzFmApQEAAR6MYMAAzAkBAl8DAQBfAwAAAYCMc8Bnrr8AAMAA/LsGwADMX4JYjISMiY0MAACArgAAAAEDjI2NDAAAAAEAAYyTAAAAmyFhAwJfAwEAXwMBAGADwAD8BQFqAGADwAD9DnkAXAE+AT0cjLcWjK8uuaXAAMrqwADMWYCuAQABIxyMzYCMxcBnryxIAQABKwDAAP1eKzSM3gOM3o0HAAAAAgICjOEAAADAAHYXXwMAAACM5wAAAMAAUBdfAwAAAABgA8AA/AUBSozuARyM9YCM7sBnrywgAgACJoz5AIGM9sBnr45fAwEAJo0CAIKM/8Bnr5xfAwEAAAABYQMCXwMAAF8DAABgA8AA/AUAwAD8vAbAAMxggliNEY0WjVAAAJ/FAAAAAQONHY1QAAAAAQABjSYAAACfxmADwADQbQFqAGADwAD9DnkAXAE+AT0cjT0WjTUuuaXAAMrqwADMWZ/FAQABgI1FwGewGwDAAPy9BsAAzGGCWI1VjVqNpAAAntUAAAABA41gjaQAAAACAgKNZQAAACdgA8AA/AUAjW4AACCWJl8DAQAAAFwBPgE9HI2FFo19LrmlwADK6sAAzFme1QIAAoCNjMBnsHomjZsAgY2TwGewh18DAAAAwAD8wwbAAMxigliNqY2ujh0AAJ/ZAAAAAQONt44dAAAAAgICjbwAAAAnYAPAAPwFAI3PAAAgiEVdA8AA/GcBXwMBAAAAXAE+AT0cjecWjd8uuaXAAMrqwADMWZ/ZAgACgI3xwGew6h6N/MAAzAkBAl8DAQBfAwAAAYGOD8BnsPcAAMAA/MQGwADMY4JYjiKOJ46QAACf2wAAAAEDji2OkAAAAAICAo4yAAAAJ2ADwAD8BQCORQAAIIhFXQPAAPxnAV8DAQAAAFwBPgE9HI5dFo5VLrmlwADK6sAAzFmf2wIAAoCOZMBnsWwejm/AAMwJAQJfAwEAXwMAAAGBjoLAZ7F5AADAAPzFBsAAzGSCWI6VjpqOxwAAhFkAAAABA46gjscAAAABAQGOqAAAAICWYAPAAP1RAABgA8AA+j8BSo6yARyOuhaOsi65pcAAyurAAMxZhFkBAAGAjsHAZ7HuAMAA/MYGwADMZYJYjsyOzo8BAACf2AAAAAEDjtaPAQAAAAEBAY7bAAAAJ2ADwAD8BQAAXwMBAAFKjuUBJo79AByO7RaO5S65pcAAyurAAMxZn9gBAAGAjvbAZ7JKAMAA/MdfAwEABsAAzGaCWI8GjwiPMQAAhhcAAAABA48SjzEAAAAAAAAAXwMBAAFKjxgBJo8tAByPIBaPGC65pcAAyurAAMxZhhcAAAAAwAD8yF8DAQAGwADMZ4JYjzaPO4+dAACW/gAAAAEDj0aPnQAAAAEBAY9MAAAAlv9hAwFfAwEAYAPAAPo/AABcAT4BPRyPaxaPYy65pcAAyurAAMxZlv4BAAE0j3cDj3ePmAAAAAEBAY96AAAAliZfAwAAAABgA8AA+j8BSo+GARyPioCPhsBnsvggAQABJo+TAIGPi8BnszdfAwEAAAAAwAD8yQbAAMxogliPoo+nkAkAAJcBAAAAAQOPspAJAAAAAQEBj7gAAACW/2EDAV8DAQBgA8AA+j8AAFwBPgE9HI/XFo/PLrmlwADK6sAAzFmXAQEAATSP4wOP45AEAAAAAQEBj+YAAACWJl8DAAAAAGADwAD6PwFKj/IBHI/2gI/ywGezkyABAAEmj/8AgY/3wGez0l8DAQAAAADAAPzKBsAAzGmCWJAOkBqQdAAAn8sAAAABA5AikHQAAAACAgKQJwAAAGpgA8AA/AUAkDIAAACCjGADwAD8BQAAXQPAAPxnAV8DAQABSpBAAR6QRMAAzAkBAl8DAABfAwEAARyQXxaQVy65pcAAyurAAMxZn8sCAAKAkGjAZ7QugZBvwGe0OwDAAPzNAAbAAMxqgliQeZB+kRkAAINeAAAAAQOQhpEZAAAABAMEkIsAAABqYAPAAPwFAJCWAAAAgoxgA8AA/AUAkKcAACCDzF0DwAD8ZwFfAwEAAJC2AAAAn85gA8AA/AUBapDCYAPAAPwFCQBcAT4BPRyQ1BaQzC65pcAAyurAAMxZg14EAASAkN3AZ7S2gZDkwGe0wx6Q7cAAzAkBAl8DAQBfAwAAAYKRAMBntNEAg5ELwGe05ADAAPzOBsAAzGuCWJEekSORbAAAn8wAAAABA5EukWwAAAACAgKRMwAAAGpgA8AA/AUAkT4AAACCjGADwAD8BQAAXAE+AT0ckVEWkUkuuaXAAMrqwADMWZ/MAgACgJFdwGe1bIGRZMBntXkAwAD8zwbAAMxsgliRcZF2kdoAAJuxAAAAAQORf5HaAAAAAwIDkYQAAABqYAPAAPwFAJGPAAAAgoxgA8AA/AUAkZcAACDAAEM9XwMBAAFqAGADwAD9DnkAXAE+AT0ckbEWkakuuaXAAMrqwADMWZuxAwADgJG7wGe11oGRwsBnteMmkdEAgpHHwGe18V8DAAAAwAD80AbAAMxtgliR35Hkkm0AAJ/RAAAAAQOR8JJtAAAAAwMDkfUAAABqYAPAAPwFAJIAAAAAgoxgA8AA/AUAkhEAACCEV10DwAD8ZwFfAwEAAABcAT4BPRySLBaSJC65pcAAyurAAMxZn9EDAAOAkjnAZ7ZmgZJAwGe2cx6SScAAzAkBAl8DAQBfAwAAAYKSXMBntoEAAMAA/NEAAGes9gBnrScAZ62GAGet9gBnrkUAZ66fAGevDABnr/sAZ7BaAGewygBnsUwAZ7HOAGeyKgBnsosAZ7LYAGezcwBntA4AZ7SWAGe1TABntbYAZ7ZGAGe23QAAABUCwADMcoJYknKSeJMNA8AAdhgAAgAAlk1gA8AA/VEBWwAAgnZgA8AA/VEBWwFdAcAAzFYCXwMAAF8DAQAAAAEEwADMdYJYkrWSvAm5pcAAyuoAXQPAAPypAV8DAAAAAQXAAMx5gliSwJLAktYAAAADksiS1gAAAAEBAZLOAAAEuaVdA8AA/KkBXwMAAAAAXQPAAMxyAl8DAABfAwEAAT8CCAHAAMx1gADAZ7e0CQGSwMAAzHEAAAAAAQbAAMx3gliS25LjkwsAAJY4AAAAAQOS6pMLAAABAACW+WADwAD9UQFbAAAAAF0DwAD8qQFfAwIAAUqS8AEfkvTAAMx5AQJfAwAAXwMCAAEWkwMuuaXAAMrqwADMdQAAAGe38wBnuFEAAAABAsAAzHqCWJMQkxabPgPAAHYZAAIAAJZNYAPAAP1RAVsAAIJ2YAPAAP1RAVsBXQHAAMvmAl8DAABfAwEAAAFdAcAA/ZwBXwMBAAIEwADMfYJYk2eTbgm5pcAAyuoAXQPAAP2cAV8DAAAABMAAzH6CWJQXlCAJs7LAAMrqAF4DAQAAlvlgA8AA/VEBWwAAAAAAXQPAAP2cAV8DAgAAAQXAAMyUgliUJZQllEoAAAADlCyUSgAAAAICApQyAAAEuaVdA8AA/ZwBXwMAAACUQAAABLOyXgMBAACW+WADwAD9UQFbAAAAAABdA8AA/ZwBXwMCAAAAXQPAAMx6Al8DAABfAwEAAT8DCAHAAMx9gADAZ7kWCAHAAMx+gQDAZ7kpCQGUJcAAy/kAAAAAEgbAAMyBgliUT5RdlIIAAcAAdhrAAMrqAAAAAQOUcJSCAAABAACW+WADwAD9UQFbAAAAAF0DwAD9nAFfAwIAAUqUdgEelHrAAMEXAAFfAwIAAAAGwADMhIJYlIeUjpTAAACWOAAAAAEDlJWUwAAAAQAAlvlgA8AA/VEBWwAAAABdA8AA/ZwBXwMCAAFKlJsBH5SfwADMlAICXwMAAF8DAgACFpStLrmlwADK6sAAzH0WlLYus7LAAMrqwADMfgAGwADMhYJYlMSUyZTwAABWAAAAAQOUzJTwAAAAAQEBlM8AACCAll8DAQAAAGADwAD6PwFKlNkBHJThFpTZLrmlwADK6sAAzH1WAQABJpTrAICU5cBnumVfAwAAAMAA/akGwADMhoJYlPWU+pVRAACApQAAAAEDlQCVUQAAAAEBAZUNAAAgiEVdA8AA/GcBXwMBAAAAXAE+AT0clSUWlR0uuaXAAMrqwADMfYClAQABHpUwwADMCQECXwMBAF8DAAABgJVDwGe6xgAAwAD9qgbAAMyHgliVVpVblYoAAIRZAAAAAQOVYZWKAAAAAQEBlWkAAACDwGADwAD9UQAAYAPAAPo/AUqVdAEclXwWlXQuuaXAAMrqwADMfYRZAQABgJWDwGe7NADAAP2rBsAAzIiCWJWPlZSV3AAAlv0AAAABA5WdldwAAAABAQGVrwAAAMAAQ05dA8AA/GcBYAPAAP1RAABcAT4BPRyVxhaVvi65pcAAyurAAMx9lv0BAAGAldDAZ7uQAMAA/a0GwADMiYJYleGV5pYuAACXAAAAAAEDle+WLgAAAAEBAZYBAAAAwABDTl0DwAD8ZwFgA8AA/VEAAFwBPgE9HJYYFpYQLrmlwADK6sAAzH2XAAEAAYCWIsBnu+8AwAD9rgbAAMyKgliWM5Y4lpoAAJb+AAAAAQOWQ5aaAAAAAQEBlkkAAACW/2EDAV8DAQBgA8AA+j8AAFwBPgE9HJZoFpZgLrmlwADK6sAAzH2W/gEAATSWdAOWdJaVAAAAAQEBlncAAACWJl8DAAAAAGADwAD6PwFKloMBHJaHgJaDwGe8TiABAAEmlpAAgZaIwGe8jV8DAQAAAADAAP2vBsAAzIuCWJaflqSXBgAAlwEAAAABA5avlwYAAAABAQGWtQAAAJb/YQMBXwMBAGADwAD6PwAAXAE+AT0cltQWlswuuaXAAMrqwADMfZcBAQABNJbgA5bglwEAAAABAQGW4wAAAJYmXwMAAAAAYAPAAPo/AUqW7wEclvOAlu/AZ7zpIAEAASaW/ACBlvTAZ70oXwMBAAAAAMAA/bAGwADMjIJYlwuXEJdVAACEAgAAAAEDlxuXVQAAAAEBAZctAAAAwABDTl0DwAD8ZwFgA8AA/VEAAGADwAD6PwFKlzkBHJdBFpc5LrmlwADK6sAAzH2EAgEAAYCXTcBnvYQAwAD9sQbAAMyNgliXWpdhmAYAAJcDAAAAAQOXbZgGAAAAAQEBl3oAAACD1l0DwAD9nAFgA8AA/VEAAF0DwAD9nAFfAwEAAT4CSZeHIRyXlRaXiy6zssAAyurAAMx+SAEAASsAwAD9XkqXngEcl6UuwAB2G8AAyuoCAAKAl7XAZ73pKQDAAMyCP0qXxwEfl9LAAMyUAgJfAwAAXwMBAAIcl+gWl+AuuaXAAMrqwADMfZcDAQABgJf1wGe96QDAAP2yKwAGwADMjoJYmAuYEpi0AACXBAAAAAEDmByYtAAAAAEBAZgpAAAAg9ZdA8AA/ZwBYAPAAP1RAABdA8AA/ZwBXwMBAAE+AkmYNiEcmEQWmDous7LAAMrqwADMfkgBAAErAMAA/V5KmE0BHJhULsAAdhvAAMrqAgACgJhkwGe+pyoAwADMgj9KmHcBH5iCwADMlAICXwMAAF8DAQACHJiYFpiQLrmlwADK6sAAzH2XBAEAAYCYo8BnvqcAwAD9tCsABsAAzIKCWJi5mMCZ9QAAwAB2G8AAyuoAAAABA5jPmfUAAAACAgKY3AAAAIPWXQPAAP2cAWADwAD9UQCY6AAAAMAAdhxgA8AA+j8AAF0DwAD9nAFfAwEAAT4DTpkEmQsAAIF2XQPAAP2cAV8DAQABIxyZGBaZDi6zssAAyurAAMx+SAEAASsAwAD9Xh6ZJ8AAwRcAAV8DAQAAAByZMi6zssAAyuoAAV8DAQAAAMAAzH4BXQPAAP2cAV8DAQBGmUaZY5lPAAAAliZfAwAAABaZWi65pcAAyurAAMx9PgJOmW2ZeQAAwAB2HV8DAQABJpmDAIOZe8BnwAZfAwEASZmPHJmhgZmTwGe/gEgBAAEcmaqAmaTAZ79rgxcBAAGEmbPAZ8AjAMAA/agAwAD9Xj0cmciCmcHAZ7+gVgEAAYSZzMBnwCMAwAD9qT9KmeQBgpnrwGe/oAbAAMyPgliZ+poBmi8AAJcCAAAAAQOaBpovAAAAAQEBmg4AACCD1l0DwAD9nAFfAwEAAABdA8AA/ZwBXwMBAAFKmhgBNZoYAAABAF0DwAD9nAFfAwEAARyaGC6vx8AAyuoAAAAAwADMgzUAAAABAFsBHJoigZogwGfA3oClAQABgJopwGfAuQDAAP2qgQDAZ8DeBsAAzJCCWJo0mjmaWgAAgkIAAAABA5o+mloAAAAAAAAAXAE+AT0cmk8WmkcuuaXAAMrqwADMfYJCAAAAAMAA/bUGwADMg4JYml+aZproAACvx8AAyuoAAAABA5psmugAAAAAAAAAXQPAAP2cAV8DAQABPgNOmnyagwAAgXZdA8AA/ZwBXwMBAAEjHJqQFpqGLrOywADK6sAAzH5IAQABKwDAAP1eHpqfwADBFwABXwMBAAAAHJqqLrOywADK6gABXwMBAAAAwADMfgFdA8AA/ZwBXwMBAD0cmsWAmr7AZ8GggKUBAAEuAMAA/apKmtcBgJrewGfBoAbAAMyRglia7Zr0mwcAAJUZAAAAAQOa+ZsHAAAAAAAAAF0DwAD9nAFfAwEAAUqa/wEcmv8ur8fAAMrqAAAAAMAAzIMGwADMkoJYmwybDps8AACW/AAAAAEDmxSbPAAAAAEBAZscAAAAg9FgA8AA/VEAAF8DAQABSpskASabOAAcmywWmyQuuaXAAMrqwADMfZb8AQABgJszwGfChQDAAP2sXwMBAAAAZ7mIAGe52gBnukYAZ7qmAGe7FABnu3AAZ7vPAGe8LgBnvMkAZ71kAGe9yQBnvocAZ79FAGfAmQBnwSsAZ8FsAGfCIgBnwmUAZ8LHAAAAEgLAAMyVglibQZtHotoDwAB2HgAEAADAAHYfYAPAAP1RAVsAAMAAdiBgA8AA/VEBWwAAhANgA8AA/VEBWwAAhARgA8AA/VEBWwFdAcAAweMCXwMCAF8DAwAAAAEEwADMmIJYm4mbkAm5pcAAyuoAXQPAAPzaAl8DAABfAwEAAAEFwADMsIJYm5WblZuqAAAAA5ucm6oAAAABAQGbogAABLmlXQPAAPzaAl8DAABfAwEAAABdA8AAzJUEXwMAAF8DAQBfAwIAXwMDAAE/AggBwADMmIAAwGfDsgkBm5XAAMHrAAAAABQGwADMmoJYm6+bu5vxAACWOAAAAAEDm8eb8QAAAgAAwABDMmADwAD9UQFbAADAAEMzYAPAAP1RAVsAAAAAXQPAAPzaAl8DBABfAwUAAUqbzQEfm9HAAMywAQRfAwAAXwMBAF8DBABfAwUAARab6S65pcAAyurAAMyYAAbAAMybglib9pv7nDYAAMAAQzQAAAABA5wInDYAAAABAQGcEAAAAICWYAPAAP1RAABgA8AA+j8BSpwaARycIhacGi65pcAAyurAAMyYwABDNAEAAYCcMMBnxJkAwAD87AbAAMycglicO5xAnHMAAIdHAAAAAQOcS5xzAAAAAQEBnFMAAACD0WADwAD9UQAAYAPAAPo/AUqcWwEcnGMWnFsuuaXAAMrqwADMmIdHAQABgJxvwGfE9wDAAPztBsAAzJ2CWJx4nIOcpgMASwAAAAEDnIWcpgAAAAEBAZyNAAAAg9FgA8AA/VEAAF8DAwABSpyVASacogAcnJwWnJUuuaXAAMrqwADMmEsBAAGAnJ3AZ8VSAMAA/O5fAwMABsAAzJ6CWJyrnLmc9wMAgL8AAAABA5y8nPcAAAACAgKcvwAAIIPRXwMCAACcxgAAIICWXwMDAAAAXAE+AT0cnNoWnNMuuaXAAMrqwADMmIC/AgACJpzfAICc28BnxbNfAwAAJpzuAIGc6MBnxb9fAwEAAMAA/O8GwADMn4JYnPyc/p2AAACZHQAAAAEDnQmdgAAAAAICAp0MAAAgg9FfAwIAAJ0TAAAgwABDNWEDAF8DAwAAAF8DAwABSp0iASadfAAcnSoWnSIuuaXAAMrqwADMmJkdAgACJp1BAICdPcBnxipfAwAAIxydUoGdScBnxjZIAQABKwDAAP1eKzSdZAOdZJ16AAAAAAAAAF8DAQABSp1qASaddQAcnXKBnWrAZ8Y2IAAAAAAAXwMBAAFhAwBfAwEAAMAA/PVfAwMABsAAzKCCWJ2FnYqd3AAAgKUAAAABA52QndwAAAABAQGdmwAAIIPWXQPAAPzaAl8DAgBfAwMAAABcAT4BPRydsBadqC65pcAAyurAAMyYgKUBAAEfnbvAAMywAQRfAwIAXwMDAF8DAABfAwEAAYCd0cBnxvEAAMAA/PYGwADMoYJYneGd454RAACEWQAAAAEDnemeEQAAAAEBAZ3xAAAAg9FgA8AA/VEAAF8DAwABSp35ASaeDQAcngEWnfkuuaXAAMrqwADMmIRZAQABgJ4IwGfHawDAAPz3XwMDAAbAAMyiglieFp4bnjwAAIJCAAAAAQOeIJ48AAAAAAAAAFwBPgE9HJ4xFp4pLrmlwADK6sAAzJiCQgAAAADAAPz4BsAAzKOCWJ5BnkaeugAAg/gAAAABA55NnroAAAABAQGeUwAAAIGmYQMCXwMCAF8DAwBcAABcAT4BPRyedBaebC65pcAAyurAAMyYg/gBAAE0nnwDnnyetQAAAAICAp6AAAAAg9FfAwAAAJ6IAAAAgJZfAwEAAABgA8AA/Q4BPgE9HJ6YgJ6XwGfIDiACAAImnp0AgZ6ZwGfITF8DAgAmnqkAgp6jwGfIWF8DAwAAAADAAPz5BsAAzKmCWJ6/ns+e/AEAg2IAAAABA57UnvwAAAAAAAAAXQPAAPxnAV8DAgABSp7XAR6e28AAzAkBAl8DAABfAwIAARae9xae7y65pcAAyurAAMyYg2LAAPz8AAbAAMyqglifAZ8Rn0IBACkAAAABA58Yn0IAAAAAAAAAXQPAAPxnAV8DAwABSp8bAR6fH8AAzAkBAl8DAQBfAwMAARafOxafMy65pcAAyurAAMyYKcAA/P0ABsAAzKuCWJ9Hn0+fZwEAYQAAAAEDn1afZwAAAAAAAABgA8AA/AUBSp9ZARafYRafWS65pcAAyurAAMyYYcAA/P4GwADMrIJYn2yfdZ+PAQCBVQAAAAEDn32fjwAAAAAAAABgA8AA+j8BSp+AARafiBafgC65pcAAyurAAMyYgVXAAPz/BsAAzK2CWJ+Un52fvQEAg7IAAAABA5+on70AAAAAAAAAYAPAAPo/AUqfqwEWn7MWn6suuaXAAMrqwADMmIOywAD9AAbAAMykglifwp/EoJIAAKwyAAAAAQOfyqCSAAAAAwICn80AACCD0V8DAgAAn9QAACCsMmEDAV8DAwBfAwMAAAGf6AAAIMAAQzVhAwBfAwMAAWoAYAPAAP0OeV8DAwABPgFKn/sBJqCKABygChagAi65pcAAyurAAMyYrDIDAAImoBUAgKARwGfKPV8DAAA0oBwDoBygQgAAAAEBAaAgAAAAgJZfAwEAAABfAwEAAUqgKgEmoD0AHKAwgaAqwGfKSSABAAEmoDcAg6AxwGfKuV8DAwAAAF8DAQABwABDNSMcoGCCoFfAZ8pdSAEAASsAwAD9Xis0oHIDoHKgiAAAAAAAAABfAwEAAUqgeAEmoIMAHKCAgqB4wGfKXSAAAAAAAF8DAQABYQMAXwMBAMAA/PJfAwMABsAAzKWCWKCXoJyhFQAAwABDOQAAAAEDoKWhFQAAAAEBAaCoAAAgrDJhAwJfAwIAXwMDAF8DAwAAAFwBPgE9HKDOFqDGLrmlwADK6sAAzJjAAEM5AQABNKDYA6DYoRAAAAACAgKg3AAAAIPRXwMAAACg5AAAAICWXwMBAAAAXwMBAAFKoO4BJqELAByg9ICg7sBny3MgAgACJqD5AIGg9cBny7ZfAwIAJqEFAIKg/8Bny8JfAwMAAABfAwEAAMAA/PMGwADMroJYoRqhN6HCAQCD0AAAAAEDoT+hwgAAAAAAAABdA8AA/GcBXQPAAP0BAl8DAgBfAwMAAT4BSqFFARyhXBahVBahTC65pcAAyurAAMyYg9DAAPz7gKsBAV0DwAD9AQJfAwIAXwMDAAE0oXkDoXmhvQAAAAEBAaGLAAAAg01dA8AA/QECXwMAAF8DAQAAAF0DwAD9AQJfAwIAXwMDAAFKoZEBH6GVwAD9DQICXwMCAF8DAwACJqGqABahpoChpMBnzI2D0cAA/QNfAwIAJqG4ABahsoChsMBnzI2AlsAA/QRfAwMAAADAAPxyBsAAzKaCWKHHocyiWAAAwABDNgAAAAEDodaiWAAAAAEBAaHwAAAgg9BdA8AA/GcBXQPAAP0BAl8DAgBfAwMAAABcAT4BRqH/ohqiCAAAAIPPXQPAAP0BAl8DAgBfAwMAAICiEcBnzSM+AT0coikWoiIuuaXAAMrqwADMmIC/AgACJqI0ABaiMIGiKsBnzUuD0cAA/QNfAwAAJqJJABaiQ4GiPcBnzUuAlsAA/QRfAwEAAMAA/O8GwADMp4JYol2iYqLYAACW/gAAAAEDom2i2AAAAAEBAaJzAAAAlv9hAwJfAwIAXwMDAGADwAD6PwAAXAE+AT0copcWoo8uuaXAAMrqwADMmJb+AQABNKKjA6KjotMAAAACAgKipwAAAIPRXwMAAACirwAAAICWXwMBAAAAYAPAAPo/AUqiuQEcor2AornAZ83XIAIAAiaiwgCBor7AZ84aXwMCACaizgCCosjAZ84mXwMDAAAAAMAA/PQAAGfD/QBnxHcAZ8TXAGfFMwBnxZMAZ8YKAGfG0QBnx0sAZ8etAGfH7gBnyKIAZ8j9AGfJVgBnyZcAZ8naAGfKHQBny1EAZ8wTAGfNAQBnzbcAZ85xAAAAFALAAMyxglii3aLjpkkDwAB2IQACAACWTWADwAD9UQFbAACCdmADwAD9UQFbAV0BwADL5gJfAwAAXwMBAAABXQHAAMJrAV8DAQABBMAAzLSCWKM6o0EJuaXAAMrqAF0DwADCawFfAwAAAAEFwADMwoJYo0WjRaNcAAAAA6NOo1wAAAABAQGjVAAABLmlXQPAAMJrAV8DAAAAAF0DwADMsQJfAwAAXwMBAAE/AggBwADMtIAAwGfPTwkBo0XAAMv5AAAAAAsGwADMtoJYo2CjaaOSAACWOAAAAAEDo3CjkgAAAQAAlvlgA8AA/VEBWwAAAABdA8AAwmsBXwMCAAFKo3YBH6N6wADMwgECXwMAAF8DAgABFqOKLrmlwADK6sAAzLQABsAAzLeCWKOXo5mjxAAAnyUAAAABA6Oko8QAAAAAAAAAXwMBAAFKo6oBJqPAAByjshajqi65pcAAyurAAMy0nyUAAAAAwADCdl8DAQAGwADMuIJYo8ijyqPzAACGFwAAAAEDo9Sj8wAAAAAAAABfAwEAAUqj2gEmo+8AHKPiFqPaLrmlwADK6sAAzLSGFwAAAADAAMJ3XwMBAAbAAMy5glij+KP9pCsAAFYAAAABA6QApCsAAAABAQGkAwAAIICWXwMBAAAAXAE+AT0cpBgWpBAuuaXAAMrqwADMtFYBAAEmpCIAgKQcwGfQpV8DAAAAwADCegbAAMy6glikMKQ1pG0AAMAAa54AAAABA6Q9pG0AAAABAQGkQAAAIICWXwMBAAAAXAE+AT0cpFUWpE0uuaXAAMrqwADMtMAAa54BAAEmpGQAgKRewGfRAl8DAAAAwADCeAbAAMy7glikcqR3pK0AAIQiAAAAAQOkfqStAAAAAQEBpIEAACCAll8DAQAAAFwBPgE9HKSWFqSOLrmlwADK6sAAzLSEIgEAASakpACApJ7AZ9FgXwMAAADAAMJ5BsAAzLyCWKSypLek5AAAhFkAAAABA6S9pOQAAAABAQGkxQAAAIPWYAPAAP1RAABgA8AA+j8BSqTPARyk1xakzy65pcAAyurAAMy0hFkBAAGApN7AZ9G8AMAAwnsGwADMvYJYpOik7aVEAACApQAAAAEDpPOlRAAAAAEBAaUAAAAgiEVdA8AA/GcBXwMBAAAAXAE+AT0cpRgWpRAuuaXAAMrqwADMtIClAQABHqUjwADMCQECXwMBAF8DAAABgKU2wGfSGAAAwADCfAbAAMy+glilSaVOpbAAAJb+AAAAAQOlWaWwAAAAAQEBpV8AAACW/2EDAV8DAQBgA8AA+j8AAFwBPgE9HKV+FqV2LrmlwADK6sAAzLSW/gEAATSligOliqWrAAAAAQEBpY0AAACWJl8DAAAAAGADwAD6PwFKpZkBHKWdgKWZwGfShiABAAEmpaYAgaWewGfSxV8DAQAAAADAAMJ9BsAAzL+CWKW1pbqmHAAAlwEAAAABA6XFphwAAAABAQGlywAAAJb/YQMBXwMBAGADwAD6PwAAXAE+AT0cpeoWpeIuuaXAAMrqwADMtJcBAQABNKX2A6X2phcAAAABAQGl+QAAAJYmXwMAAAAAYAPAAPo/AUqmBQEcpgmApgXAZ9MhIAEAASamEgCBpgrAZ9NgXwMBAAAAAMAAwn4GwADMwIJYpiGmJqZHAACCQgAAAAEDpiumRwAAAAAAAABcAT4BPRymPBamNC65pcAAyurAAMy0gkIAAAAAwADCfwAAZ8+OAGfP7ABn0DkAZ9CGAGfQ4ABn0UAAZ9GcAGfR+ABn0mYAZ9MBAGfTnABn090AAAALAsAAzMOCU4FcgWuCdQfAAHYiAAEAAIJ2YAPAAP1RAVsBXQHAAPxnAV8DAAAAAAABBcAAzMeCU4GegaSBvQEAAAOBu4G9AAAAAAAAAF0DwADMwwFfAwAAAT8BCQGBpMAA/JEAAAAAAQbAAMzFglOCZYJtgnMBAmEAAAABA4JzgnMAAAAAAAAAYAPAAPwFAAAAZ9R5AGfUoAAAAAECwADMyIJTgzKDQZi4B8AAdiMAAQAAg8tgA8AA/VEBWwFdAcAAzMMBXwMAAAAAAAEFwADM5YJTg6GDp4O1AQAAA4Ozg7UAAAAAAAAAXQPAAMzIAV8DAAABPwEJAYOnwADMxwAAAAAZBsAAzMqCU4N4g4CDhgECYQAAAAEDg4aDhgAAAAAAAABgA8AA/AUABsAAzNGCU4OKg4yDnAACljkAAAABA4OVg5wAAAABAQGDmgAAAGJgA8AA/AUAAF8DAAAABsAAzMuCU4O6g8qD7wEAXAAAAAEDg9OD7wAAAAAAAABdA8AA/KIBXwMAAAFKg9YBH4PawADNBAEBXwMAAAEuAAbAAMzSglOD9IP5hOQAAIP4AAAAAQOEAITkAAAAAQEBhAYAAACIp2EDAV8DAABcAABcAT4CToQjhCoAAGFgA8AA/AUBFoQxLmHAAMzKRYQ9AYRGhEgAAGJgA8AA/AUBkwEchE+ChE3AZ9X/YwEAAYGEUcBn1eQAwAD9MgGKhFnAZ9X/HIRagoRZwGfV/2QBAAGUAMAA/So+Aj0chGyAhGbAZ9XOIAEAARyEbS6WOQEAAYKEd8Bn1f8AwADM0QAASYSCIRyEjYGEhsBn1eRIAQABFoSVLmHAAMzKAMAA/Sg+AT0whKcfhLHAAPusAQABLgA/BsAAzMyCU4TphPKFCAEAgVUAAAABA4T6hQgAAAAAAAAAYAPAAPo/AUqE/QEchQQWhP0uYcAAzMpIAQABkwDAAP0oBsAAzM2CU4UNhROFcwEAgxkAAAABA4UZhXMAAAAAAAAAXwMAAAE+AkmFHxyFKhaFIy5hwADMykgBAAGTAMAA/Sg9MIUwHoVLwADOJwAAAAA/SoVcARyFYy6WOQEAAZMAwADM0QbAAMzOglOFeIV+heYBAIHoAAAAAQOFg4XmAAAAAAAAAF8DAAABPgJJhYkchZQWhY0uYcAAzMpIAQABkwDAAP0oPTCFmh6FtcAAzicAAAAAP0qFxgEchc0uljkBAAEchd4WhdcuYcAAzMqBjQEAAZQAwAD9KwDAAMzRBsAAzM+CU4XrhfGGjAEAgMMAAAABA4X4howAAAAAAAAAXwMAAAE+A0mF/hyGCRaGAi5hwADMykgBAAGTAMAA/Sg9MIYPHoYqwADOJwAAAAA/SYY7HIZGFoY/LmHAAMzKgJcBAAGUAMAA/TQ9MIZLHoZmwADOKAAAAAA/SoZ1ARyGfC6WOQEAAZMAwADM0QbAAMzTglOGkYaWh6AAAIMXAAAAAQOGnoegAAAAAQEBhqYAAACWJmADwAD9UQAAYAPAAPo/AT4DToa5hsAAAGFgA8AA/AUBFobHLmHAAMzKRYbTAYbcht4AAGJgA8AA/AUBkwEchuWChuPAZ9iiYwEAAYGG58Bn2IcAwAD9MgGKhu/AZ9iiHIbwgobvwGfYomQBAAGUAMAA/So+AkmG/ByHDRyHAC6WOQEAAYKHCsBn2KIAwADM0UgBAAGAhxDAZ9huAMAA/V5KhxkBKT9JhywhHIc3gYcwwGfYh0gBAAEWhz8uYcAAzMoAwAD9KD4BPTCHUR+HW8AA+6wBAAEuAD9Kh5ABKgbAAMzUglOHpYeqiLMAAJY2AAAAAQOHr4izAAAAAQEBh7UAAACW/2EDAV8DAABgA8AA+j8AAGADwAD6PwE+A06H0IfXAABhYAPAAPwFARaH3i5hwADMykWH6gGH84f1AABiYAPAAPwFAZMBHIf8gof6wGfZrmMBAAGBh/7AZ9mTAMAA/TIBiogGwGfZrhyIB4KIBsBn2a5kAQABlADAAP0qPgJJiBMhHIgcgIgYwGfZcyABAAEciB0uljkBAAGCiCfAZ9muAMAAzNEAAEqILAEqP0mIQCEciEuBiETAZ9mTSAEAARaIUy5hwADMygDAAP0oPgE9MIhlH4hvwAD7rAEAAS4AP0qIpAEpBsAAzNWCU4i4iL2JwwAAgdQAAAABA4jAicMAAAABAQGIxgAAAJb/YQMBXwMAAGADwAD6PwAAYAPAAPo/AT4DTojhiOgAAGFgA8AA/AUBFojvLmHAAMzKRYj7AYkEiQYAAGJgA8AA/AUBkwEciQ2CiQvAZ9q4YwEAAYGJD8Bn2p0AwAD9MgGKiRfAZ9q4HIkYgokXwGfauGQBAAGUAMAA/So+AkmJJByJLICJKMBn2n0gAQABHIktLpY5AQABgok3wGfauADAAMzRAABKiTwBKT9JiU8hHIlagYlTwGfanUgBAAEWiWIuYcAAzMoAwAD9KD4BPTCJdB+JfsAA+6wBAAEuAD9KibMBKgbAAMzWglOJyInKi0YAAJY6AAAAAQOJ1ItGAAAAAgEBidoAAACW/2EDAV8DAABgA8AA+j8AAYnuAAAgljthAwBfAwAAAWoAYAPAAP0OeV8DAAABPgROigOKCgAAYWADwAD8BQEWihEuYcAAzMpFih0BiiaKKAAAYmADwAD8BQGTARyKL4OKLcBn29djAQABgooxwGfbvADAAP0yAYuKOcBn29ccijqDijnAZ9vXZAEAAZQAwAD9Kj4DTopIilAAAJYmXwMAAAEcilIuljkBAAGDilzAZ9vXAMAAzNFJimYcim6AimrAZ9uGIAEAAYSKb8Bn3CAAAEqKeQGEioDAZ9wgP0mKjyEcipqCipPAZ9u8SAEAARaKoi5hwADMygDAAP0oPgE9MIq0H4q+wAD7rAEAAS4AP0mK8yEciv6BivfAZ9ucSAEAASsAwAD9XkqLBwEcixSBiw7AZ9ucIAAAAAAAPz0wixweizfAAM4nAAAAAAbAAMzXglOLS4tNjM0AAJY/AAAAAQOLVozNAAAAAgEBi1wAAACW/2EDAV8DAABgA8AA+j8AAYtwAAAgljthAwBfAwAAAWoAYAPAAP0OeV8DAAABPgROi4WLjAAAYWADwAD8BQEWi5MuYcAAzMpFi58Bi6iLqgAAYmADwAD8BQEci7OCi6zAZ90tgY0BAAGUAMAA/SsBHIu6g4u4wGfdSIFtAQABkwDAAP01AYuLwMBn3Ugci8GDi8DAZ91IgY0BAAGUAMAA/Ss+A06Lz4vXAACWJl8DAAABHIvZLpY5AQABg4vjwGfdSADAAMzRSYvtHIv1gIvxwGfc9yABAAGEi/bAZ92hAABKjAABhIwHwGfdoT9JjBYhHIwhgowawGfdLUgBAAEWjCkuYcAAzMoAwAD9KD4BPTCMOx+MRcAA+6wBAAEuAD9JjHohHIyFgYx+wGfdDUgBAAErAMAA/V5KjI4BHIybgYyVwGfdDSAAAAAAAD89MIyjHoy+wADOJwAAAAAGwADM2IJTjNKM1I8mAACWQgAAAAEDjN+PJgAAAAIBAYzlAAAAlv9hAwFfAwAAYAPAAPo/AAGM+QAAIJY7YQMAXwMAAAFqAGADwAD9DnlfAwAAAT4HTo0OjRUAAGFgA8AA/AUBFo0cLmHAAMzKTo0qjTAAAF9fAwAAAStOjUGNTAAAn75gA8AA+j8BKkWNWQGNYo1kAABiYAPAAPwFAZMBHI1rhY1pwGfe6GMBAAGCjW3AZ96uAMAA/TIBjY11wGfe6ByNdoWNdcBn3uhkAQABlADAAP0qPgNOjYSNjAAAliZfAwAAARyNji6WOQEAAYWNmMBn3ugAwADM0UmNohyNqoCNpsBn3nggAQABho2rwGffMQAAPgNJjb+EjcPAZ97UPgE9MI3bHo32wADOKAAAAAA/PYyOE8Bn3tQpPYuOLsBn3saGjjbAZ98xP0mOTSEcjliCjlHAZ96uSAEAARaOYC5hwADMygDAAP0oPgE9MI5yH458wAD7rAEAAS4AP0mOsYSOtcBn3tRKjsEBg47IwGfexj9JjtMhHI7egY7XwGfejkgBAAErAMAA/V5KjucBHI70gY7uwGfejiAAAAAAAD89MI78Ho8XwADOJwAAAAAGwADM2YJTjyuPMpKJAABYAAAAAQOPNpKJAAAAAQABjz8AAACBr2ADwAD96wFqj0tgA8AA/euEEgBgA8AA/esBPgJOj1qPYQAAYWADwAD8BQEWj2guYcAAzMpJj3QhFo+DgI95wGfgSIFVwAD98T4GSY+UHI+fgY+YwGfgbEgBAAGTAMAA/ShKj6UBJwA/To+9j8MAAIMZYAPAAP3rASSP1gEcj8guljkBAAGTAMAAzNFJj94hHI/pgY/iwGfgbEgBAAEWj/EuYcAAzMoAwAD9KD4BPTCQAx+QDcAA+6wBAAEuAD9OkEuQUgAAgotgA8AA/jUBH5BYwAD+VAEAAYKQZcBn4LgARZBzAZB8kH4AAGJgA8AA/AUBlAEckIWEkIPAZ+EzYwEAAYGQh8Bn4GwAwAD9MgGMkI/AZ+EzHJCQhJCPwGfhM2QBAAGUAMAA/So+Az0ckKWDkJ7AZ+EOgooBAAGAkKvAZ+BIAMAA/kk9HJDGg5C/wGfhDoKKAQABHJDMLpY5AQABhJDWwGfhMwDAAMzRAMAA/klJkOMhHJDugZDnwGfgbEgBAAEWkPYuYcAAzMoAwAD9KD4BPTCRCh+RFMAA+6wBAAEuAD9KkU8BHJFdg5FWwGfhDiMAAAAAwAD+Tj4DTpGJkZAAAIKLYAPAAP41AR+RlsAA/lQAAAAARZGsAZG1kbcAAGJgA8AA/AUBkwEckb6DkbzAZ+IsYwEAAYGRwMBn4GwAwAD9MgGLkcjAZ+IsHJHJg5HIwGfiLGQBAAGUAMAA/So+Aj0ckd6CkdfAZ+IOgooBAAEckeQuljkBAAGDke7AZ+IsAMAAzNEAwAD+SUmR+yEckgaBkf/AZ+BsSAEAARaSDi5hwADMygDAAP0oPgE9MJIiH5IswAD7rAEAAS4AP0qSZwEcknWCkm7AZ+IOIwAAAADAAP5OBsAAzNqCU5KOkpqSygAAgaUAAAABA5KfksoAAAABAQGSpQAAAJb/YQMBXwMAAGADwAD6PwAAXQPAAPxnAV8DAAABSpK5AR2Sv4GlAQABgJLFwGfjCADAAPxzBsAAzNuCU5LPktuTGgAAgKsAAAABA5LhkxoAAAEAAIJ2YAPAAP1RAVsBAQGS5AAAAIGmYQMBXwMAAF8DAQAAAF0DwAD8ZwFfAwEAAUqS9QEfkvnAAM0xAgJfAwAAXwMBAAIugJMYwGfjbgAGwADM3IJTkx+TIZSNAACWQAAAAAEDkyeUjQAAAAEBAZMqAAAghx1hAwJfAwAAXwMAAF8DAAAAAF8DAAABPgVOk1GTWAAAYWADwAD8BQEWk18uYcAAzMpJk2sck3aBk2/AZ+PtSAEAAZMAwAD9KD0wk3wek5fAAM4nAAAAAD9Ok6qTsAAAgJZfAwAAARyTsi6WOQEAAZMAwADM0UWTxAGTzZPPAABiYAPAAPwFAZQBHJPWg5PUwGfkTGMBAAGBk9jAZ+PtAMAA/TIBi5PgwGfkTByT4YOT4MBn5ExkAQABlADAAP0qPgI9ipPtwGfkLByT/ICT9cBn480gAgACgpP9wGfkLByUBC6WOQEAAYOUDsBn5EwAwADM0QAASZQZIRyUJIGUHcBn4+1IAQABFpQsLmHAAMzKAMAA/Sg+AT0wlD4flEjAAPusAQABLgA/SpR9AYKUhMBn5CwGwADM3YJTlJKUlJXeAACDWQAAAAEDlJuV3gAAAQAAgnZgA8AA/VEBWwICApSeAAAAljxfAwEAAJSuAAAAhx1hAwJfAwEAXwMAAF8DAQAAAF8DAQABPgROlN2U4wAAgJZfAwEAAYCU5cBn5TJOlPuVAgAAYWADwAD8BQEWlQkuYcAAzMpFlRUBlR6VIAAAYmADwAD8BQGTARyVJ4SVJcBn5Y5jAQABg5UpwGflcwDAAP0yAYyVMcBn5Y4clTKElTHAZ+WOZAEAAZQAwAD9Kj4CPYqVPsBn5V4clU2BlUbAZ+U+IAIAAoKVTsBn5V4clVUuljkBAAGElV/AZ+WOAMAAzNEAAEmVaiEclXWDlW7AZ+VzSAEAARaVfS5hwADMygDAAP0oPgE9MJWPH5WZwAD7rAEAAS4AP0qVzgGCldXAZ+VeBsAAzN6CU5Xjle+WKwAAli8AAAABA5XzlisAAAABAQGV+AAAAIDuYAPAAPwFAABdA8AA/GcBXwMAAAFKlgIBH5YGwADM9wMBXwMAAAMugJYfwGfmaCsABsAAzN+CU5YwljyWdAAAlkMAAAABA5ZFlnQAAAABAQGWSwAAAJb/YQMBXwMAAGADwAD6PwAAXQPAAPxnAV8DAAABSpZfAR2WZZZDAQABgJZvwGfmvwDAAPyCBsAAzOCCU5Z5loWWvgAAlkQAAAABA5aJlr4AAAABAQGWjgAAAIDuYAPAAPwFAABdA8AA/GcBXwMAAAFKlpgBH5acwADM9wMBXwMAAAMuk4CWuMBn5xkABsAAzOGCU5bDls+XBwAAlkUAAAABA5bYlwcAAAABAQGW3gAAAJb/YQMBXwMAAGADwAD6PwAAXQPAAPxnAV8DAAABSpbyAR2W+JZFAQABgJcCwGfncADAAPyABsAAzOKCU5cMlxSYHAAAgK0AAAABA5camBwAAAABAAABlyEAAACFXmADwAD6PwFqlytgA8AA+j93XQPAAPypAV8DAAABPgROl0AAAACBdl0DwAD8qQFfAwAAAEmXTICXUMBn58s+AT2Jl2LAZ+fyNZduAAABAF0DwAD8qQFfAwAAATGXbl8DAAAANQAAAAEAWwEXl3KCl3DAZ+gaYRaXey5hwADMysAA/NaCAMBn6Bo+AT2Jl5bAZ+fyHpejwAD2AAEBXwMAAAEWl6suYcAAzMoARZe+AZfHl8kAAGJgA8AA/AUBkwEcl9CCl87AZ+iAYwEAARaX0i5hwADMygDAAP0yAYqX2sBn6IAcl9uCl9rAZ+iAZAEAAZQAwAD9Kj4BPRyX7YGX58Bn5/KAvwIAAoKX7sBn6IAcl/MuljkBAAGCl/3AZ+iAAMAAzNEAwAD8uUqYCwGBmBLAZ+fyBsAAzOOCU5ghmCiYtgAAlRkAAAABA5gtmLYAAAAAAAAAXQPAAP2cAV8DAAABPgNOmD2YRAAAgXZdA8AA/ZwBXwMAAAEemErAAMEXAAFfAwAAAABFmFgBmGGYYwAAYmADwAD8BQGTARyYaoGYaMBn6V1jAQABFphsLmHAAMzKAMAA/TIBiZh0wGfpXRyYdYGYdMBn6V1kAQABlADAAP0qPgE9HJiIgJiBwGfpNlYBAAEcmIwuljkBAAGBmJbAZ+ldAMAAzNEAwAD9qUqYpQGAmKzAZ+k2AABn1RQAZ9U7AGfVbgBn1a4AZ9agAGfW4gBn10YAZ9fAAGfYTgBn2VMAZ9pdAGfbZgBn3NcAZ95YAGfgKQBn4ugAZ+NCAGfjrQBn5QYAZ+ZIAGfmnwBn5vkAZ+dQAGfnqgBn6QYAZ+nbAAAAGQLAAMzmglOYu5jBolMDwAB2JAABAACDy2ADwAD9UQFbAV0BwADMyAFfAwAAAAADBMAAzOmCU5kCmQsJwABrsMAAyuoAXQPAAPxnAV8DAAAABMAAzOqCU5lAmUYJpGnAAMrqAGADwAD8BQAEwADM64JTmY2ZmQnAAHYlwADK6gBgA8AA/AUAAQXAAMz3glOZnpmemuMAAAADma2a4wAAAAMDA5mzAAAEwABrsF0DwAD8ZwFfAwAAAJnDAAAEpGlgA8AA/AUAmdAAAATAAHYlYAPAAPwFAABdA8AAzOYBXwMAAAE+Aj0eme/AAPtHAgACFpoALqRpwADK6sAAzOonagBJmhYhHJonFpoaLsAAdiXAAMrqwADM60gBAAErAMAA/Sg+Aj0emkPAAPtHAgACFppULsAAdiXAAMrqwADM6yeCjABJmnAcmnsWmnQupGnAAMrqwADM6oCXAQABFpp9LsAAdiXAAMrqwADM6wDAAP00PgE9MJqVH5qfwAD7TwQABBaasC6kacAAyurAAMzqkxaauy7AAHYlwADK6sAAzOsnagA/PwQIAcAAzOmAAMBn6uoIAcAAzOqBAMBn6v8IAcAAzOuCAMBn6w0JAZmewADM5QAAAAAHBsAAzO6CU5romvCbgAEAwAB2JsAAyuoAAAABA5r6m4AAAAAAAAAAYAPAAPwFAT4DTpsEmwsAAGFgA8AA/AUBFpsXFpsNLsAAa7DAAMrqwADM6WHAAPyKSZsjIhybNBabJy7AAHYlwADK6sAAzOtIAQABKwDAAP0oARybTBabPy7AAHYlwADK6sAAzOuAlwEAAYCbTsBn7E8AwAD9NEqbVgGAm13AZ+xPP0qbaQEWm3AuwAB2JcAAyurAAMzrBsAAzO+CU5uFm42b+wEAwABJn8AAyuoAAAABA5uZm/sAAAAAAAAAYAPAAPwFAT4DTpujm6oAAGFgA8AA/AUBFpu2FpusLsAAa7DAAMrqwADM6WHAAPyKSZvCHJvNFpvGLqRpwADK6sAAzOqAlwEAAYCbz8Bn7QwAwAD9NEqb1wGAm97AZ+0MP0qb6gEWm/EupGnAAMrqwADM6gbAAMzwglOcAJwInNoBAGEAAAABA5wPnNoAAAAAAAAAYAPAAPwFAT4ETpwZnCAAAGFgA8AA/AUBFpwsFpwiLsAAa7DAAMrqwADM6WHAAPyKSZw4HJxDFpw8LqRpwADK6sAAzOqBbQEAAYCcRsBn7Z8AwAD9NUqcTgGTP0mcXCIcnG0WnGAuwAB2JcAAyurAAMzrSAEAASsAwAD9KAEcnIUWnHguwAB2JcAAyurAAMzrgW0BAAGAnIjAZ+2fAMAA/TU+AUqcmAEcnKaAnJ/AZ+2fgY0BAAEWnKgupGnAAMrqwADM6gDAAP0rP0qcugEcnM4WnMEuwAB2JcAAyurAAMzrgY0BAAEWnNAupGnAAMrqwADM6gDAAP0rBsAAzPKCU5zfnOGduwAAljkAAAABA5zqnbsAAAABAQGc7wAAACdgA8AA/AUAAF8DAAABPgNOnQCdCgAAwAB2J2ADwAD8BQEcnRgWnQwuwABJn8AAyurAAMzvZAEAAYCdGsBn7q4AwAD9KkmdJSIcnS+AnSnAZ+6uYwEAAZMAwAD9MgEcnUCBnTbAZ+7EgW0BAAEWnUMuwAB2JsAAyurAAMzuAMAA/TU+AT0wnVYfnWDAAPtbAwADgJ1xwGfuri4nJwA/Sp2SARydoxadmS7AAGuwwADK6sAAzOmWOQEAAYGdrcBn7sQAwAD8hgbAAMzzglOdwJ3MnuEAAJYvAAAAAQOd0J7hAAAAAQEBndUAAACA7mADwAD8BQAAXQPAAPxnAV8DAAABPgQ9Hp3twAD7RwIAAoCd/sBn75kngO4ATp4XniAAAMAAdihgA8AA/AUBHJ4pFp4iLqRpwADK6sAAzOpkAQABgJ4rwGfvmQDAAP0qSZ42IiEcnkcWnjouwAB2JcAAyurAAMzrSAEAASsAwAD9KAAcnluBnlLAZ+/NgW0BAAEWnl4uwAB2JcAAyurAAMzrAMAA/TU+AUqedAEfnn/AAM3kAAFfAwAAAAA/Sp6dAR+eqMAAzPcDAV8DAAADFp67LsAAa7DAAMrqwADM6YGexsBn780WntAuwAB2JcAAyurAAMzrAAbAAMz0glOe5p7yoEMAAJZEAAAAAQOe9qBDAAAAAQEBnvsAAACA7mADwAD8BQAAXQPAAPxnAV8DAAABPgI9Hp8TwAD7RwIAAoCfJMBn8LYngO4ASZ85HJ9KFp89LsAAdiXAAMrqwADM60gBAAErAMAA/Sg+AUqfWwEfn2bAAMz3AwFfAwAAAxafeS7AAGuwwADK6sAAzOkWn4QupGnAAMrqwADM6hyfkxafjC6kacAAyurAAMzqZAEAAYCflcBn8LYAwAD9KgA+A06ftJ+7AADAAHOPYAPAAPwFARyfxBafvS6kacAAyurAAMzqZAEAAYCfxsBn8LYAwAD9Kkmf0xyf5Baf1y7AAHYlwADK6sAAzOtjAQABgZ/mwGfxYADAAP0ySp/uAS4/SqABAR+gDMAAzPcDAV8DAAADFqAfLsAAa7DAAMrqwADM6RagKi6kacAAyurAAMzqgaAywGfxYAAGwADM9YJToEigUKJRAACArQAAAAEDoFaiUQAAAAEAAAGgXQAAAIVeYAPAAPo/AWqgZ2ADwAD6P3ddA8AA/KkBXwMAAAE+CE6geKB+AABqYAPAAPwFARaggC6kacAAyurAAMzqTqCQoJQAAIKMYAPAAPwFARagoBagli7AAGuwwADK6sAAzOlhwAD8ikmgrCIhHKC9FqCwLsAAdiXAAMrqwADM60gBAAErAMAA/SgAHKDVFqDILsAAdiXAAMrqwADM62MBAAGCoNfAZ/JbAMAA/TI9iqDcwGfyWxag4i7AAHYlwADK6sAAzOs/TqD4oP8AAGFgA8AA/AUBHKEFgqEBwGfyW4GNAQABgaEHwGfyPgDAAP0rSaESHKEdg6EWwGfy4mMBAAGTAMAA/TI9i6EiwGfy4pM/TqE6oUEAAIF2XQPAAPypAV8DAAABI4ChS8Bn8hc1oVsAAAEAXQPAAPypAV8DAAABHqFbwAD3owEBXwMAAAGTADUAAAABAFsBF6FmhKFkwGfzSmGDoW/AZ/LiwAD81oQAwGfzSh6hfcAA9gABAV8DAAABg6GFwGfy4gABXQPAAPypAV8DAABFoZIBoZuhnQAAYmADwAD8BQGTARyhpIWhosBn87ZjAQABg6GmwGfy4gDAAP0yAY2hrsBn87Ycoa+Foa7AZ/O2ZAEAAZQAwAD9Kj4CPRyhwYShu8Bn8y2AvwIAAoWhwsBn87YcodEWoccuwABrsMAAyurAAMzpljkBAAEcoeGBodvAZ/I+ZAEAAYWh48Bn87YAwAD9KgDAAPyGAMAA/LlJoe0cogIWofsWofEuwABrsMAAyurAAMzpYcAA/IpjAQABgqIEwGfyWwDAAP0yPTCiCR+iE8AA+6wBAAEuAD9KokABhKJHwGfzLQAAZ+weAGfs2wBn7XUAZ+6OAGfveQBn8JYAZ/H2AGf0mwAAAAcCwADM+IJToyOjKaWIA8AAdikAAQAAg8tgA8AA/VEBWwFgAcAA/VEAAV0BwAD8ogFfAwAABATAAMz7glOjZqNvCcAAa7DAAMrqAF0DwAD8ZwFfAwAAAATAAMz8glOjfaOECZz7wADK6gBgA8AA/AUABMAAzP2CU6OMo5IYlxzAAMrqAGADwAD8BQAEwADM/oJTo5ijoFiIu8AAyuoAXwMAAAErAQXAAM0EglOjpaOlpBsAAAADo7GkGwAAAAEBAaO+AAAAg8xdA8AA/GcBXwMAAAAAXQPAAMz4AV8DAAABPwQIAMAAzPuAo9zAZ/V/CADAAMz8FqQBgKP4wGf1f2HAAPyKCADAAMz9kwkBo6XAAP1nAAAAAAIGwADNAIJTpCCkJqQ5AQBeAAAAAQOkLqQ5AAAAAAAAAF8DAAABSqQxARakMS6Iu8AAyurAAMz+BsAAzQKCU6Q+pGGlhgAAXQFqpD9gA8AA+gbAAL7cAAABA6RppYYAAAAAAAAAYAPAAPo/AT4GTqR2pH0AAGFgA8AA/AUBFqSJFqR/LsAAa7DAAMrqwADM+2HAAPyKSaSVIRykoRakmS6c+8AAyurAAMz8SAEAAYCkpMBn9kUAwAD9KD4BPTCktB+kvsAA+6wBAAEWpNouwABrsMAAyurAAMz7AD9JpPAcpPsWpPQulxzAAMrqwADM/YFtAQABgKT+wGf2RQDAAP01PgI9F6UOLoi7wADK6ivAAMz+SqUlASo/PRelPS6Iu8AAyuocpVIWpUguwABrsMAAyurAAMz7ljkBAAEWpVwulxzAAMrqwADM/QDAAPyGwADM/j0XpWkulxzAAMrqHKVvFqVpLpccwADK6sAAzP1kAQABlADAAP0qwADM/UqldwEpAABn9dcAZ/YOAGf3WAAAAAICwADNBYJTpbalvKkiA8AAdioAAgAAlk1gA8AA/VEBWwAAgnZgA8AA/VEBWwFdAcAA/GcBXwMBAAAAAgTAAM0IglOl+6YECcAAa7DAAMrqAF0DwAD8ZwFfAwAAAATAAM0JglOmJKYmCcAAdivAAMrqAF4DAAEBAV8DAAAAAVcDwADK7QJfAwAAXwMBAF8DAQAAAQXAAM0XglOnMKcwp1kAgLXAAMrqAAOnQKdZAAAAAgICp0YAAATAAGuwXQPAAPxnAV8DAAAAp1YAAATAAHYrXgMAAQEBXwMAAAABVwPAAMrtAl8DAABfAwEAXwMBAAAAXQPAAM0FAl8DAABfAwEAAT8DCAHAAM0IgADAZ/gbCAHAAM0JgQDAZ/gwCQGnMMAA/JEAAAAACAbAAM0LglOmK6YzpysEAQAAAAABA6ZBpysAAAIAAJZNYAPAAP1RAVsAAIJ2YAPAAP1RAVsCAgKmTgAAAIPMXQPAAPxnAV8DAgAAploAAACCamEDAV8DAgBfAwMAAABdA8AAzQUCXwMCAF8DAwABPgJJpnMlpoCApnfAZ/jIXQPAAMzDAVs+AUqmpAEfpq/AAM0aAgJfAwIAXwMDAAKAptPAZ/jIgabdwGf42wA/SqbyAR+m/cAAzRcCAl8DAgBfAwMAAoCnFMBn+MiBpx7AZ/jbAAbAAM0NglOnXqdup6oBAFwAAAABA6d3p6oAAAAAAAAAXQPAAPyiAV8DAQABSqd6AR+nfsAAzSYCAl8DAABfAwEAAhannRanky7AAGuwwADK6sAAzQhcwAD8iRanpy7AAHYrwADK6sAAzQkABsAAzQ6CU6ftp/WoDwEAYQAAAAEDp/yoDwAAAAAAAABgA8AA/AUBSqf/ARaoCRan/y7AAGuwwADK6sAAzQhhwAD8igbAAM0PglOoE6gcqDgBAIFVAAAAAQOoJKg4AAAAAAAAAGADwAD6PwFKqCcBFqgxFqgnLsAAa7DAAMrqwADNCIFVwAD8iwbAAM0QglOodqh8qJgBAIMZAAAAAQOogqiYAAAAAAAAAF8DAQABSqiFARyohS7AAHYrwADK6gEAARaokhaoiC7AAGuwwADK6sAAzQiDGcAA/I0AwADNCQbAAM0RglOonKiiqLwBAIHoAAAAAQOop6i8AAAAAAAAAF8DAQABSqiqARyoqi7AAHYrwADK6gEAARaotxaorS7AAGuwwADK6sAAzQiB6MAA/I4AwADNCQbAAM0SglOowKjGqOQBAIDDAAAAAQOozajkAAAAAAAAAF8DAQABSqjQARyo0C7AAHYrwADK6gEAARao3Rao0y7AAGuwwADK6sAAzQiAw8AA/I8AwADNCQbAAM0UglOo6KjqqSAAAJY5AAAAAQOo86kgAAAAAQEBqPgAAAAnYAPAAPwFAABfAwEAAUqpAgEcqQIuwAB2K8AAyuoBAAEcqQ8WqQUuwABrsMAAyurAAM0IljkBAAGAqRnAZ/t7AMAA/IYAwADNCQAAZ/iRAGf5YwBn+c4AZ/oRAGf6VgBn+q0AZ/sEAGf7WwBn+8oAAAAIAsAAzRiCU6klqSuqCAPAAHYsAAIAAJZNYAPAAP1RAVsAAIJ2YAPAAP1RAVsBXQHAAM0FAl8DAABfAwEAAAFdAcAAzMMBXwMBAAABBcAAzRqCU6maqZqqBgAAAAOpt6oGAAAAAgICqcQAAACDzF0DwAD8ZwFfAwAAAKnQAAAAgmphAwFfAwAAXwMBAAAAXQPAAM0YAl8DAABfAwEAAT8BCQCp8cAAzRcCAAKAqfPAZ/xZgan9wGf8bAAAAABn/K0AAAAAAsAAzRuCU6oLqhGrdgPAAHYtAAIAAJZNYAPAAP1RAVsAAIJ2YAPAAP1RAVsBXQHAAPyiAV8DAQAAAAMEwADNHoJTqkCqSFiIu8AAyuoAXwMBAAErBMAAzR+CU6peqmcJwABwbMAAyuoAXQPAAPyiAV8DAAAABMAAzSCCU6qHqokJwAB2K8AAyuoAXgMAAQEBXwMAAAABVwPAAMrtAl8DAABfAwEAXwMBAAABBcAAzSaCU6qOqo6qtQAAAAOqnKq1AAAAAgICqqIAAATAAHBsXQPAAPyiAV8DAAAAqrIAAATAAHYrXgMAAQEBXwMAAAABVwPAAMrtAl8DAABfAwEAXwMBAAAAXQPAAM0bAl8DAABfAwEAAT8DCAHAAM0fgADAZ/18CAHAAM0ggQDAZ/2RCQGqjsAA/KgAAAAAAgbAAM0iglOquqq/q1YAAF0AAAABA6rHq1YAAAAAAAAAYAPAAPo/AT4DSarQHKreFqrULsAAcGzAAMrqwADNH10AAAAAwAD8pD4CPReq8i6Iu8AAyuocqv0uwAB2K8AAyuoBAAEWqwoWqwAuwABwbMAAyurAAM0fXsAA/KYAwADNIMAAzR5KqxoBKT89F6sxLoi7wADK6ivAAM0eSqtGASoGwADNJIJTq1urYat0AQBeAAAAAQOraat0AAAAAAAAAF8DAQABSqtsARarbC6Iu8AAyurAAM0eAABn/fIAZ/6SAGf+yQAAAAICwADNJ4JTrA2sE60SA8AAdi4AAgAAlk1gA8AA/VEBWwAAgnZgA8AA/VEBWwFdAcAAzMgBXwMBAAAAAgTAAM0qglOsWqxhCbmlwADK6gBdA8AA/GcBXwMAAAAEwADNK4JTrIGsgwnAAHYrwADK6gBeAwABAQFfAwAAAAFXA8AAyu0CXwMAAF8DAQBfAwEAAAEFwADNMYJTrIisiKyxAAAAA6yarLEAAAACAgKsoAAABLmlXQPAAPxnAV8DAAAArK4AAATAAHYrXgMAAQEBXwMAAAABVwPAAMrtAl8DAABfAwEAXwMBAAAAXQPAAM0nAl8DAABfAwEAAT8DCAHAAM0qgADAZ/+FCAHAAM0rgQDAZ/+YCQGsiMAAzOUAAAAAAgbAAM0tglOstqy+rNYBAGEAAAABA6zFrNYAAAAAAAAAYAPAAPwFAUqsyAEWrNAWrMguuaXAAMrqwADNKmHAAPyKBsAAzS+CU6zarNytEAAAljkAAAABA6zlrRAAAAABAQGs6gAAACdgA8AA/AUAAF8DAQABSqz0ARys9C7AAHYrwADK6gEAARys/xas9y65pcAAyurAAM0qljkBAAGArQnAaABaAMAA/IYAwADNKwAAZ//5AGgAOgBoAKcAAAACAsAAzTKCU61ErUquvQPAAHYvAAEAAIPLYAPAAP1RAVsBXQHAAPxnAV8DAAAAAAIEwADNNYJTrYWtjgnAAGuwwADK6gBdA8AA/GcBXwMAAAAEwADNNoJTra2trwnAAHYrwADK6gBeAwABAQFfAwAAAAFXA8AAyu4BXwMAAGADwAD6PwABBcAAzTyCU620rbSt2gAAAAOtwa3aAAAAAgICrccAAATAAGuwXQPAAPxnAV8DAAAArdcAAATAAHYrXgMAAQEBXwMAAAABVwPAAMruAV8DAABgA8AA+j8AAF0DwADNMgFfAwAAAT8DCAHAAM01gADAaAFXCAHAAM02gQDAaAFsCQGttMAA/JEAAAAAAgbAAM04glOt363vricBAFwAAAABA634ricAAAAAAAAAXQPAAPyiAV8DAAABSq37AR+t/8AAzUcCAV8DAAACFq4aFq4QLsAAa7DAAMrqwADNNVzAAPyJFq4kLsAAdivAAMrqwADNNgAGwADNOoJTrnKufq67AACAqwAAAAEDroSuuwAAAQAAgnZgA8AA/VEBWwEBAa6HAAAAgaZhAwFfAwAAXwMBAAAAXQPAAPxnAV8DAQABSq6YAR+unMAAzRcCAl8DAABfAwEAAi6ArrnAaAJaAAAAaAHHAGgCLgBoApkAAAACAsAAzT2CU67ArsawEwPAAHYwAAEAAIPLYAPAAP1RAVsBXQHAAPyiAV8DAAAAAAIEwADNQIJTrwGvCgnAAHBswADK6gBdA8AA/KIBXwMAAAAEwADNQYJTrymvKwnAAHYrwADK6gBeAwABAQFfAwAAAAFXA8AAyu4BXwMAAGADwAD6PwABBcAAzUeCU68wrzCvVgAAAAOvPa9WAAAAAgICr0MAAATAAHBsXQPAAPyiAV8DAAAAr1MAAATAAHYrXgMAAQEBXwMAAAABVwPAAMruAV8DAABgA8AA+j8AAF0DwADNPQFfAwAAAT8DCAHAAM1AgADAaANJCAHAAM1BgQDAaANeCQGvMMAA/KgAAAAAAgbAAM1DglOvW69gr+oAAF0AAAABA69or+oAAAAAAAAAYAPAAPo/AT4CQ69xHK+CFq94LsAAcGzAAMrqwADNQF0AAAAAwAD8pD4BSa+WHK+aLsAAdivAAMrqAQABFq+nFq+dLsAAcGzAAMrqwADNQF7AAPymAMAAzUE+AUqvuwEpP0qv2gEqBsAAzUWCU6/vr/WwEQEAXgAAAAEDr/2wEQAAAAAAAABfAwAAAUqwAAEWsAoWsAAuwABwbMAAyurAAM1AXsAA/KYAAGgDuQBoBD8AaASAAAAAAgLAAM1IglOwU7BZsUIDwAB2MQACAACWTWADwAD9UQFbAACCdmADwAD9UQFbAV0BwAD8ZwFfAwEAAAACBMAAzUuCU7CYsKEJwABrsMAAyuoAXQPAAPxnAV8DAAAABMAAzUyCU7DBsMMJwAB2K8AAyuoAXgMAAQEBXwMAAAABVwPAAMrvAl8DAABfAwEAXQPAAPxnAV8DAQAAAQXAAM1QglOwyLDIsO8AAAADsNaw7wAAAAICArDcAAAEwABrsF0DwAD8ZwFfAwAAALDsAAAEwAB2K14DAAEBAV8DAAAAAVcDwADK7wJfAwAAXwMBAF0DwAD8ZwFfAwEAAABdA8AAzUgCXwMAAF8DAQABPwMIAcAAzUuAAMBoBUUIAcAAzUyBAMBoBVoJAbDIwAD8kQAAAAABBsAAzU6CU7D0sQSxQAEAXAAAAAEDsQ2xQAAAAAAAAABdA8AA/KIBXwMBAAFKsRABH7EUwADNXQICXwMAAF8DAQACFrEzFrEpLsAAa7DAAMrqwADNS1zAAPyJFrE9LsAAdivAAMrqwADNTAAAAGgFwgBoBi0AAAABAsAAzVGCU7FFsUu06QPAAHYyAAIAAJZNYAPAAP1RAVsAAIJ2YAPAAP1RAVsBYAHAAP1RAAFdAcAA/KIBXwMBAAQEwADNVIJTsY2xlgnAAHBswADK6gBdA8AA/KIBXwMAAAAEwADNVYJTsbaxuAnAAHYrwADK6gBeAwABAQFfAwAAAAFXA8AAyu8CXwMAAF8DAQBdA8AA/GcBXwMBAAAEwADNVoJTsnCymVjAAHYzwADK6gBdA8AA/KIBXwMBAAFqsopdA8AAzeUBYAPAAP0OwAF+tATAAM1XglOyn7KnWIi7wADK6gBfAwEAASsBBcAAzV2CU7Kssqyy0wAAAAOyurLTAAAAAgICssAAAATAAHBsXQPAAPyiAV8DAAAAstAAAATAAHYrXgMAAQEBXwMAAAABVwPAAMrvAl8DAABfAwEAXQPAAPxnAV8DAQAAAF0DwADNUQJfAwAAXwMBAAE/AwgBwADNVIAAwGgHQggBwADNVYEAwGgHVwkBsqzAAP1nAAAAAAIGwADNWYJTstiy3rLxAQBeAAAAAQOy5rLxAAAAAAAAAF8DAQABSrLpARay6S6Iu8AAyurAAM1XBsAAzVuCU7L2svu05wAAXQAAAAEDswO05wAAAAAAAABgA8AA+j8BPgRJswwcsyIWsxAuwAB2M8AAyurAAM1WSAEAASsAwAD9XkqzKwEqP0OzPSEcs1cWs0UuwAB2M8AAyurAAM1WXQAAAADAAPykPgI9F7NrLoi7wADK6ivAAM1XSbOCHLOQFrOGLsAAcGzAAMrqwADNVF0AAAAAwAD8pD4CPRe0IS7AAHYzwADK6ivAAM1WPRe0Qy7AAHYzwADK6ha0bRy0Vy7AAHYrwADK6gEAARa0ZBa0Wi7AAHBswADK6sAAzVRewAD8pgDAAM1VXMAA/InAAM1WPgFKtI4BKj0XtK4uiLvAAMrqFrTLFrS5LsAAdjPAAMrqwADNVl7AAPymwADNV0q02AEpAABoB78AaAf2AGgJIgAAAAICwADNXoJTtOy08rdLA8AAdjQAAQAAg8tgA8AA/VEBWwFdAcAA/GcBXwMAAAAAAgTAAM1hglO1LLU1CcAAa7DAAMrqAF0DwAD8ZwFfAwAAAATAAM1iglO1Q7VNCcAAdjXAAMrqAGADwAD8BQABBcAAzWmCU7a4tri25wCAtcAAyuoAA7bGtucAAAACAgK2zAAABMAAa7BdA8AA/GcBXwMAAAC23AAABMAAdjVgA8AA/AUAAF0DwADNXgFfAwAAAT8DCAHAAM1hgADAaAnACAHAAM1igQDAaAnVCQG2uMAA/JEAAAAAAgbAAM1kglO1UrVatrMEAQAAAAABA7VmtrMAAAEAAIPLYAPAAP1RAVsCAgK1cwAAAIPMXQPAAPxnAV8DAQAAtYEAAADAAHY2YAPAAPwFAABdA8AAzV4BXwMBAAE+BD0etaDAAPsxAgACgbWtwGgKVyfAAHY2AD0etdXAAPtHAgACgbXmwGgKVyfAAHY2AEm2AyW2EIC2B8BoCkRdA8AAzMMBWz4BSrY0AR+2P8AAzW4CAV8DAQACgLZewGgKRIG2aMBoClcAP0q2fgEftonAAM1pAgFfAwEAAoC2m8BoCkSBtqXAaApXAAbAAM1mglO27Lb8t0kBAFwAAAABA7cFt0kAAAAAAAAAXQPAAPyiAV8DAAABPgFKtwsBH7cWwADNeQIBXwMAAAIWtzAWtyYuwABrsMAAyurAAM1hXMAA/IkWtzouwAB2NcAAyurAAM1iAAAAaAoZAGgLAABoC2kAAAACAsAAzWqCU7dOt1S4tgPAAHY3AAEAAIPLYAPAAP1RAVsBXQHAAM1eAV8DAAAAAV0BwADMwwFfAwAAAAEFwADNboJTt7m3ubgeAAAAA7fUuB4AAAACAgK34QAAAIPMXQPAAPxnAV8DAAAAt+8AAADAAHY2YAPAAPwFAABdA8AAzWoBXwMAAAE/AQkAuAjAAM1pAgACgLgKwGgL0IG4FMBoC+MAAQbAAM1sglO4I7gruLQBAGEAAAABA7gyuLQAAAAAAAAAYAPAAPwFAT4DTrg8uEsAAMAAdjhgA8AA/AUBFrhXFrhNLsAAa7DAAMrqwADNYWHAAPyKSbhjHLh2gLhnwGgMR4CXAQABFrh4LsAAdjXAAMrqwADNYgDAAP00SriEARa4iy7AAHY1wADK6sAAzWI/SribAYC4osBoDEcAAGgMHQBoDLcAAAABAsAAzW+CU7i5uL+6WgPAAHY5AAEAAIPLYAPAAP1RAVsBXQHAAPyiAV8DAAAAAAIEwADNcoJTuPm5AgnAAHBswADK6gBdA8AA/KIBXwMAAAAEwADNc4JTuQq5FBiXG8AAyuoAYAPAAPwFAAEFwADNeYJTuRm5GbloAAAAA7kluWgAAAACAgK5KwAABMAAcGxdA8AA/KIBXwMAAAC5OwAABJcbYAPAAPwFAABdA8AAzW8BXwMAAAE+AUAcuV8WuVQulxvAAMrqwADNc4FtAQABkwDAAP01uVS5YwADCAHAAM1ygADAaA1KCAHAAM1zgQDAaA1fCQG5GcAA/KgAAAAAAgbAAM11glO5bblyuf4AAF0AAAABA7l6uf4AAAAAAAAAYAPAAPo/AT4EPRe5gy6XG8AAyuocuY0WuYMulxvAAMrqwADNc4GNAQABlADAAP0rwADNc0m5lRy5pBa5mS6XG8AAyurAAM1zgW0BAAGTAMAA/TU+AUq5sgEcucMWubkuwABwbMAAyurAAM1yXQAAAADAAPykPz0XudkulxvAAMrqHLnmlIHEAAAAAMAA/CjAAM1zSrnuASoGwADNd4JTugO6CbpYAQBeAAAAAQO6EbpYAAAAAAAAAF8DAAABPgJJuhccuiYWuhsulxvAAMrqwADNc2MBAAGTAMAA/TJKuisBKz9KujwBFrpNFrpDLsAAcGzAAMrqwADNcl7AAPymAABoDcQAaA58AGgO4wAAAAICwADNeoJTul26Y7tcA8AAdjoAAQAAg8tgA8AA/VEBWwFdAcAA/GcBXwMAAAAAAgTAAM19glO6orqrCcAAa7DAAMrqAF0DwAD8ZwFfAwAAAATAAM1+glO6yrrMCcAAdivAAMrqAF4DAAEBAV8DAAAAAVcDwADK7gFfAwAAYAPAAPo/AAEFwADNgoJTutG60br7AAAAA7riuvsAAAACAgK66AAABMAAa7BdA8AA/GcBXwMAAAC6+AAABMAAditeAwABAQFfAwAAAAFXA8AAyu4BXwMAAGADwAD6PwAAXQPAAM16AV8DAAABPwMIAcAAzX2AAMBoD5MIAcAAzX6BAMBoD6gJAbrRwAD8kQAAAAABBsAAzYCCU7sAuxC7WgEAXAAAAAEDuxm7WgAAAAAAAABdA8AA/KIBXwMAAAE+AUq7HwEfuyrAAM2OAgFfAwAAAha7SRa7Py7AAGuwwADK6sAAzX1cwAD8iRa7Uy7AAHYrwADK6sAAzX4AAABoEAMAaBBsAAAAAQLAAM2DglO7X7tlvS4DwAB2OwABAACDy2ADwAD9UQFbAV0BwAD8ogFfAwAAAAADBMAAzYaCU7uku60JwABwbMAAyuoAXQPAAPyiAV8DAAAABMAAzYeCU7vMu84JwAB2K8AAyuoAXgMAAQEBXwMAAAABVwPAAMruAV8DAABgA8AA+j8ABMAAzYiCU7vXu+oYwAB2PMAAyuoAYAPAAPo/ASoBBcAAzY6CU7vvu++8GQAAAAO8ALwZAAAAAgICvAYAAATAAHBsXQPAAPyiAV8DAAAAvBYAAATAAHYrXgMAAQEBXwMAAAABVwPAAMruAV8DAABgA8AA+j8AAF0DwADNgwFfAwAAAT8DCAHAAM2GgADAaBE1CAHAAM2HgQDAaBFKCQG778AA/KgAAAAAAgbAAM2KglO8HrwjvNUAAF0AAAABA7wrvNUAAAAAAAAAYAPAAPo/AT4DSbw0Frw4LsAAdjzAAMrqwADNiEq8RQEqP0m8VyIhHLxmFrxcLsAAcGzAAMrqwADNhl0AAAAAwAD8pAEhHLx1LsAAdivAAMrqAQABFryCFrx4LsAAcGzAAMrqwADNhl7AAPymAMAAzYc+Aj0XvJQuwAB2PMAAyuopwADNiEq8rgEqP0q8xgEpBsAAzYyCU7zavOC9LAEAXgAAAAEDvOi9LAAAAAAAAABfAwAAAT4CSbzuFrzyLsAAdjzAAMrqwADNiEq8/wErP0q9EAEWvSEWvRcuwABwbMAAyurAAM2GXsAA/KYAAGgRpQBoElUAaBKxAAAAAgLAAM2PglO9Mb03v5MDwAB2PQABAACDy2ADwAD9UQFbAV0BwAD8ZwFfAwAAAAACBMAAzZKCU71xvXoJwABrsMAAyuoAXQPAAPxnAV8DAAAABMAAzZOCU72IvZIJwAB2PsAAyuoAYAPAAPwFAAEFwADNnIJTvo2+jb68AIC1wADK6gADvpu+vAAAAAICAr6hAAAEwABrsF0DwAD8ZwFfAwAAAL6xAAAEwAB2PmADwAD8BQAAXQPAAM2PAV8DAAABPwMIAcAAzZKAAMBoE08IAcAAzZOBAMBoE2QJAb6NwAD8kQAAAAADBsAAzZWCU72XvZ++iAQBAAAAAAEDvau+iAAAAQAAg8tgA8AA/VEBWwICAr24AAAAg8xdA8AA/GcBXwMBAAC9xgAAAIDuYAPAAPwFAABdA8AAzY8BXwMBAAE+Akm90yW94IC918BoE9NdA8AAzMMBWz4BSr4EAR6+D8AAzZ8CAV8DAQACgL4uwGgT04G+OMBoE+YAP0q+SgEfvlXAAM2cAgFfAwEAAoC+Z8BoE9MevnHAAMr/AQABgb59wGgT5gAABsAAzZeCU77Bvs2/LwAAli8AAAABA77Rvy8AAAABAQG+1gAAAIDuYAPAAPwFAABdA8AA/GcBXwMAAAE+AUq+4wEfvu7AAM2cAgFfAwAAAha/AC7AAGuwwADK6sAAzZIcvxYWvwsuwAB2PsAAyurAAM2TZAEAAR6/GMAAyv8BAAGAvyTAaBSIAADAAP0qAAbAAM2ZglO/NL9Ev5EBAFwAAAABA79Nv5EAAAAAAAAAXQPAAPyiAV8DAAABPgFKv1MBH79ewADNsQIBXwMAAAIWv3gWv24uwABrsMAAyurAAM2SXMAA/IkWv4IuwAB2PsAAyurAAM2TAAAAaBOoAGgUaABoFPYAaBVfAAAAAwLAAM2dglO/lr+cwABCBAPAAHY/AAEAAIPLYAPAAP1RAVsBXQHAAM2PAV8DAAAAAV0BwADMwwFfAwAAAAEFwADNpoJTwABAnsAAQJ7AAED9AIC1wADK6gADwABAu8AAQP0AAAACAgLAAEDIAAAAg8xdA8AA/GcBXwMAAADAAEDWAAAAgO5gA8AA/AUAAF0DwADNnQFfAwAAAT8BCQDAAEDrwADNnAIAAoDAAEDtwGgV24HAAED3wGgV8AADBsAAzZ+CU8AAQAHAAEAJwABAmQQBAAAAAAEDwABAJMAAQJkAAAEAAIPLYAPAAP1RAVsCAgLAAEAxAAAAg8xdA8AA/GcBXwMBAADAAEA/AAAAgO5gA8AA/AUAAF0DwADNnQFfAwEAAT4BSsAAQEwBH8AAQFfAAM2mAgFfAwEAAoDAAEB4wGgWZR7AAECCwADK/wEAAYHAAECOwGgWegAABsAAzaGCU8AAQQLAAEEKwABBdwEAYQAAAAEDwABBEcAAQXcAAAAAAAAAYAPAAPwFAT4DTsAAQRvAAEEiAABhYAPAAPwFARzAAEE1FsAAQS4WwABBJC7AAGuwwADK6sAAzZJhwAD8ioGNAQABFsAAQTcuwAB2PsAAyurAAM2TAMAA/StJwABBRxzAAEFSgMAAQUvAaBcDgW0BAAGTAMAA/TVKwABBWAGAwABBX8BoFwM/SsAAQWsBkwbAAM2jglPAAEF8wABBiMAAQgIAAJYvAAAAAQPAAEGMwABCAgAAAAEBAcAAQZEAAACA7mADwAD8BQAAXQPAAPxnAV8DAAABPgFKwABBngEfwABBqcAAzaYCAV8DAAACFsAAQdMuwABrsMAAyurAAM2SHMAAQekWwABB3i7AAHY+wADK6sAAzZNkAQABHsAAQevAAMr/AQABgMAAQffAaBexAADAAP0qAAAAaBYwAGgWzwBoF4cAaBgvAAAAAwLAAM2nglPAAEKUwABCmsAAQ/kDwAB2QAABAACDy2ADwAD9UQFbAV0BwAD8ogFfAwAAAAACBMAAzaqCU8AAQtTAAELdCcAAcGzAAMrqAF0DwAD8ogFfAwAAAATAAM2rglPAAELlwABC7xjAAHY+wADK6gBgA8AA/AUAAQXAAM2xglPAAEL0wABC9MAAQ0MAAAADwABDAMAAQ0MAAAACAgLAAEMGAAAEwABwbF0DwAD8ogFfAwAAAMAAQxYAAATAAHY+YAPAAPwFAABdA8AAzacBXwMAAAE+AUAcwABDOhbAAEMvLsAAdj7AAMrqwADNq4FtAQABkwDAAP01wABDL8AAQz4AAwgBwADNqoAAwGgY5AgBwADNq4EAwGgY+wkBwABC9MAA/KgAAAAAAgbAAM2tglPAAENIwABDTcAAQ9AAAF0AAAABA8AAQ1XAAEPQAAAAAAAAAGADwAD6PwE+A0XAAENeAcAAQ2fAAENpAABiYAPAAPwFAZMBHMAAQ3CAwABDbsBoGaljAQABFsAAQ3IuwAB2PsAAyurAAM2rAMAA/TIBiMAAQ37AaBmpHMAAQ3+AwABDfsBoGalkAQABlADAAP0qPRzAAEONFsAAQ4MuwABwbMAAyurAAM2qXQAAAADAAPykPRfAAEOdLsAAdj7AAMrqk8AAzatKwABDsQEcwABDwhbAAEO4LsAAcGzAAMrqwADNql0AAAAAwAD8pAbAAM2vglPAAEPVwABD28AAQ/cBAF4AAAABA8AAQ+PAAEP3AAAAAAAAAF8DAAABSsAAQ+YBFsAAQ/AWwABD5i7AAHBswADK6sAAzapewAD8pgAAaBlwAGgaYwBoGrQAAAACAsAAzbKCU8AAQ/zAAEQCwABE+wPAAHZBAAEAAIPLYAPAAP1RAVsBXQHAAPxnAV8DAAAAAAIEwADNtYJTwABEQcAAREoJwABrsMAAyuoAXQPAAPxnAV8DAAAABMAAzbaCU8AARGnAAERrCcAAdivAAMrqAF4DAAEBAV8DAAAAAVcDwADK7gFfAwAAYAPAAPo/AAEFwADNuoJTwABEcMAARHDAAESaAAAAA8AARIHAAESaAAAAAgICwABEhwAABMAAa7BdA8AA/GcBXwMAAADAAESXAAAEwAB2K14DAAEBAV8DAAAAAVcDwADK7gFfAwAAYAPAAPo/AABdA8AAzbIBXwMAAAE/AwgBwADNtYAAwGgbfAgBwADNtoEAwGgbkwkBwABEcMAA/JEAAAAAAQbAAM24glPAAESfwABEr8AARPkBAFwAAAABA8AARLjAAET5AAAAAAAAAF0DwAD8ogFfAwAAAT4BSsAARL4BH8AARMnAAM3GAgFfAwAAAhbAAEToFsAARN4uwABrsMAAyurAAM21XMAA/IkWwABE8i7AAHYrwADK6sAAzbYAAABoG/IAaBxvAAAAAQLAAM27glPAAET+wABFBMAARrEDwAB2QgABAACDy2ADwAD9UQFbAV0BwAD8ogFfAwAAAAADBMAAzb6CU8AARUPAAEVMCcAAcGzAAMrqAF0DwAD8ogFfAwAAAATAAM2/glPAAEVrwABFbQnAAHYrwADK6gBeAwABAQFfAwAAAAFXA8AAyu4BXwMAAGADwAD6PwAEwADNwIJTwABFdsAARYkYwAB2Q8AAyuoAYAPAAPo/ASoBBcAAzcaCU8AARY7AAEWOwABFuAAAAAPAAEWfwABFuAAAAAICAsAARaUAAATAAHBsXQPAAPyiAV8DAAAAwABFtQAABMAAditeAwABAQFfAwAAAAFXA8AAyu4BXwMAAGADwAD6PwAAXQPAAM27AV8DAAABPwMIAcAAzb6AAMBoHVQIAcAAzb+BAMBoHWsJAcAARY7AAPyoAAAAAAIGwADNwoJTwABFvcAARcLAAEaIAABdAAAAAQPAAEXKwABGiAAAAAAAAABgA8AA+j8BPgJJwABF0yEWwABF2C7AAHZDwADK6sAAzcA+Aj0XwABF7S7AAHZDwADK6inAAM3AQ8AARgccwABGGBbAAEYOLsAAcGzAAMrqwADNvl0AAAAAwAD8pD4BScAARi4hHMAARjMuwAB2K8AAyuoBAAEWwABGQBbAAEY2LsAAcGzAAMrqwADNvl7AAPymAMAAzb9KwABGSgEpPz9KwABGaQEcwABGehbAAEZwLsAAcGzAAMrqwADNvl0AAAAAwAD8pAbAAM3EglPAAEaNwABGk8AARq8BAF4AAAABA8AARpvAAEavAAAAAAAAAF8DAAABSsAARp4BFsAARqgWwABGni7AAHBswADK6sAAzb5ewAD8pgAAaB3KAGgeuQBoHwoAAAACAsAAzceCU8AARtzAAEbiwABOJQPAAHZEAAEAAIPLYAPAAP1RAVsBXQHAAMzDAV8DAAAAAAABBcAAzeSCU8AARxrAAEcgwABHLwEAAAPAAEctwABHLwAAAAAAAABdA8AAzccBXwMAAAE/AQkBwABHIMAAzMcAAAAAGQbAAM3JglPAAEc0wABHRMAAR2UBAFwAAAABA8AAR03AAEdlAAAAAAAAAF0DwAD8ogFfAwAAAUrAAEdQAWrAAEdWXQPAAM3lAWADwAD9DsABfrQGwADN0IJTwABHasAAR2/AAEeQAACD+AAAAAEDwABHdsAAR5AAAAABAQHAAEd8AAAAiKdhAwFfAwAAXAAAXAE+AAbAAM3KglPAAEeVwABHnsAAR60BAIFVAAAAAQPAAEemwABHrQAAAAAAAABgA8AA+j8BSsAAR6kBKQbAAM3LglPAAEeywABHusAAR8UBAGEAAAABA8AAR8HAAEfFAAAAAAAAAGADwAD8BQFKwABHxAGTBsAAzcyCU8AAR8rAAEfQwABIBgEAgxkAAAABA8AAR9bAAEgGAAAAAAAAAF8DAAABPgE9MMAAR9wewABH98AAzicAAAAABsAAzc2CU8AASAvAAEgRwABIRgEAgegAAAABA8AASBbAAEhGAAAAAAAAAF8DAAABPgE9MMAASBwewABIN8AAzicAAAAABsAAzc6CU8AASEvAAEhRwABIiAEAgMMAAAABA8AASFjAAEiIAAAAAAAAAF8DAAABPgE9MMAASF4ewABIecAAzicAAAAABsAAzdGCU8AASI3AAEiPwABI3gAAljkAAAABA8AASJjAAEjeAAAAAQEBwABInQAAACdgA8AA/AUAAF8DAAABPgE9MMAASKofwABItMAA+08EAASAwABIxcBoIZGTkycnAAbAAM3SglPAAEjjwABI6MAASQkAAIMXAAAAAQPAAEjwwABJCQAAAAEBAcAASPgAAACWJmADwAD9UQAAYAPAAPo/AUrAAEkEASoGwADN04JTwABJDsAASRPAAEk2AACWNgAAAAEDwABJGMAASTYAAAABAQHAAEkeAAAAlv9hAwFfAwAAYAPAAPo/AABgA8AA+j8BSsAASTIBKQbAAM3UglPAAEk7wABJQMAASWIAAIHUAAAAAQPAAElDwABJYgAAAAEBAcAASUkAAACW/2EDAV8DAABgA8AA+j8AAGADwAD6PwFKwABJXQEqBsAAzdWCU8AASWfAAElpwABJ8QAAljoAAAABA8AASXPAAEnxAAAAAgEBwABJeQAAAJb/YQMBXwMAAGADwAD6PwABwABJjQAAIJY7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zv3AAM99YAPAAPwFAE6IAYgMAADAAEJtYAPAAPwFAR6IDsAAz2cBAAEmiCUBFoglgIgfwGivUMAAduPAAM79wADPfWADwAD8BQBOiEGISAAAwAB252ADwADPagGAiErAaK9QSYhXIhyIZYGIW8Bor21jAQABFohnLsAAduHAAM79wADPVADAAP0yAByIlByIgRyIdRaIcC6XGsAAzv3AAM9TSwEAAYGIdsBor20AwAD8uMAAduTAAM79AQABg4iMwGiv5wDAAM+EYwEAAZMAwAD9Mj4BPYuIo8Bor+cciLEWiKwulxrAAM79wADPU0sBAAGBiLLAaK9tAMAA/Lg/SYjMIhyI24KI0MBor6pjAQABFojdLsAAduHAAM79wADPVADAAP0yAByJCxyI+ByI6xaI5i6XGsAAzv3AAM9TSwEAAYKI7MBor6oAwAD8uMAAduTAAM79AQABg4kDwGiv5wDAAM+EYwEAAZMAwAD9Mj4BPYuJGsBor+cciSgWiSMulxrAAM79wADPU0sBAAGCiSnAaK+qAMAA/Lg/SYlEHolIwAD15gIAAoOJUsBor+eAiVrAaK9QAD4BQomZAD89HImuLsAAduXAAM79AgACg4m0wGiv54CJvMBor1AAwADPYQbAAM9hgmKJ0YnWirwAAMAAduXAAM79AAAAAQOJ24q8AAAAAgICieMAAACDGWADwADPagCJ8QAAAJqLYAPAAM9qAABcAT4FTooDigcAAJ/JYAPAAPwFASaKAwEWig+AignAaLGjwAB248AAzv3AAM99YAPAAPwFPReKJ4CKIcBosaPAAHbjwADO/RaKPYGKNsBosbHAAHbjwADO/cAAz33AAM99PReKVoGKT8BosbHAAHbjwADO/YKKZcBoscXAAM99PRyKcxaKbi6XGsAAzv3AAM9TgL8CAAIminMBFop6gIp0wGixo8AAduPAAM79wADPfWADwAD8BYCKisBosaMAwAD8uT0cipoWipUulxrAAM79wADPU4C/AgACJoqaARaKooGKm8BosbHAAHbjwADO/cAAz31gA8AA/AWBirLAaLGxAMAA/LkGwADPYoJiisGKx4sHAACaY8AAzv0AAAABA4rOiwcAAAABAQGK1gAAAMAAb+RgA8AAz2oAAGADwAC8vgFKiuABHIrlForgLpcawADO/cAAz1NLAQABHormwADP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0KfAANFtP07AAEQYwABEHgAAwAB4J10DwAD82gJgA8AA/l1gA8AA0vgBHsAARCTAAPzhAAJgA8AA/l1gA8AA0vgAAE7AAERPwABEVwAAhI5dA8AA/KkBWwEcwABEdibAAERgABbAAERaLoTuwADRgWADwADRXcAAeCjAANCnAgACFsAARI8uwAB4FMAA0KfAANFmFsAARLsmwABEpQAWwABEny6E7sAA0YFgA8AA0V3AAHf1wADQp8AA0SUAwADRmkbAAETMwABE6MAARNUAAACCZlsAgcAARN/AaYZUPgE9HMAARPWAwABE8MBphhiAvwIAAibAAET1ARbAAET9gsAARPbAaYbawAB37wBgA8AA/l0mwABE9QGCwABFC8BphtpgA8AA0vgAwAD8707AAEUiwABFLwAAhN1dA8AA/KkBWwEcwABFMS7AAHgpwADQpwIAAhbAAEVGLsAAeBTAANCnwADRZhbAAEVVLsAAd/XAANCnwADRJQDAANGbTsAARWrAAEV1AADAAHgqYAPAAP3rAR7AAEV3wADQrQEAARbAAEV6LsAAd+/AANF1AEbAAEWLwABFscAARZQAAACY21sAgsAARaPAaYc+PgI9HMAARcWEwABFucBph8fAAHgrwADQpwEAAYPAAEXbwGmHjgAAPRzAAEXzgMAARe7AaYYYgL8CAAImwABF8wEWwABGAITAAEX0wGmHx8AAd+8AYAPAAP5dJsAARfMBhMAARg7AaYfHYAPAANL4AMAA/O9GwABGJsAARk7AAEYvAAAAqPBgA8AA014AFsAARj8uom/AANGFPgE9HMAARluAwABGVsBphhiAvwIAAhbAAEZphMAARlzAaYhYwAB378AA0vqEwABGd8BpiFgAwAD870rAAEaQARfAAEaXLsAAeBrAANCnH8AARrPAAMJqAQJgA8AA/l1gA8AA0vgBgMAARuLAaYYYAMAA0W0GwADRfoJrwABHQcAAR0rAAEe9AQDAAHgswADQpwAAAAEDwABHZ8AAR70AAAAAAAAAYAPAAPo/AT4CScAAR20cwABHdxbAAEdxLoTuwADRgUgBAAEuAMAA01NKwABHgAEqP0rAAEeuASkGwADRhYJrwABH7cAASArAAEq4AQCibwAAAAEDwABIGMAASrgAAAAAAAAAXQPAAPypAWADwADTXgE+AknAAEgeHMAASDEWwABIIi6pX8AA0KfAANFuSAEAASsAwAD9Xj4HScAASEIiIRbAAEhHLsAAeBLAANCnwADRZAAWwABIaS7AAHgswADQp8AA0X4+AUrAAEiRARfAAEiYLqlfwADQp2rAAEipXQPAAPypAWADwADTXsABk6HAANFuPz0XwABI1S6pX8AA0KcewABI6sAA96MBAWADwADTXgGTAMAA0W5OwABJEsAASRkAAIPvXQPAAPypAVsBHsAASRvAANGgAQABFsAASTcuwAB39cAA0KfAANElAE7AAElWwABJXAAAqOZgA8AA00cBFsAASV4uwAB4LcAA0YhOwABJfQAAAMAAeC5bAEXAAEmLAcAASZTAAEmWAABiYAPAAPwFAZMBHMAASZ2DwABJm8Bpip1jAQABFsAASaaAwABJn8BpijNhwAD82ADAAP0yAYvAAEmuwGmKnRzAAEmwg8AASa7AaYqdZAEAAZUAwAD9Kj4CPYrAAEnAwGmKih/AAEnNwADR8gMAAxzAAEnugMAASejAaYozSwEAARzAAEnxg8AASe/AaYqdZAEAAZQAwAD9KgDAAPy4JsAASf0BHMAASf2AwABJ98BpijNLAQABg8AASf7AaYqdAMAA/LhgA8AA/euBwABKAsBpimgAPRzAAEohFsAAShIuqV/AANCnwADRblYBAAEmwABKJQGCwABKJcBpiopgA8AA014AwAD8uj0XwABKPC6pX8AA0KcfwABKW8AAwL4BAWADwADTXgEWwABKhC6pX8AA0KfAANFuAMAA0W4/SsAASp8BFsAASqYuqV/AANCnwADRbgbAANGGgmvAAErgwABK9cAATIgBAIUdAAAAAQPAAEsDwABMiAAAAAAAAABdA8AA/KkBYAPAANM6AT4CScAASwkcwABLHBbAAEsNLsAASorAANCnwADRb0gBAAErAMAA/V4+AUnAAEstIhbAAEsxLsAAeBPAANCnwADRZQEiIRbAAEtWLsAAeBLAANCnwADRZAAWwABLeC7AAHgswADQp8AA0X4+AT0XwABLoS7AAEqKwADQp2rAAEuyXQPAAPypAWADwADTOsABk6nAANFvPgE9F8AAS98uwABKisAA0KcfwABL9MAAwL4BAWADwADTOgEcwABMSB7AAEwiwADRoQEAARbAAEw4LsAAeA3AANCnwADRYACWOAABYAPAANM6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AGGYGMAAeE/AANCnAF0DwAD8qQFgA8AA04sBKwEFwADRwoJrwABd6cAAXenAAF6bAIC1wADQpwADwABeA8AAXpsAAAADAwPAAF4EAAAAwAB391sAwABeFAAABMAAeE1bAMAAXigAAADAAHgbWwAAYAPAANGlAT8CCAHAANGogQDAaZ8ACQDAAF5FwADRpAkACYDAAF5HwGme84LAAF5SwGmfDSsrKioqKioADwbAANGvgmvAAF6gwABeqcAAXs4BAMAAeCzAANCnAAAAAQPAAF7GwABezgAAAAAAAABgA8AA+j8BSsAAXskBKgbAANGwgmvAAF80wABfP8AAX9EBAMAAd+8AAAABA8AAX0rAAF/RAAAAAAAAAGADwAD+XQE+AknAAF9QHMAAX2AWwABfVC7AAHgPwADQp8AA0alIAQABKwDAAP5oPgE9F8AAX3EuwAB4D8AA0KcewABff8AA0K4BAAEewABfgsAA0LACAAIWwABfly6FOsAA0bIWwABfoy6aiMAA0bMAAMAA0ak/SsAAX7sBFsAAX8IuwAB4D8AA0KfAANGpBsAA0bGCa8AAX/LAAGADwABgmAEAtEYAAAABA8AAYA7AAGCYAAAAAAAAAGADwADTawE+AknAAGAUHMAAYCQWwABgGC7AAHhOwADQp8AA0apIAQABKwDAANN+PgE9F8AAYDUuwAB4TsAA0KccwABgQy7AAHhQwADQpwEAARbAAGBjLsAAeE3AANCnwADRqADAANG9wADRqj9KwABgggEWwABgiS7AAHhOwADQp8AA0aoGwADRsoJrwABgt8AAYMbAAGFyAQCFOgAAAAEDwABg0cAAYXIAAAAAAAAAYAPAANM6AT4CScAAYNccwABg5xbAAGDbLsAAU33AANCnwADRq0gBAAErAMAA/V4+AT0XwABg+C7AAFN9wADQpx7AAGEQwADQuAEAAR7AAGEcwADRvgEAARbAAGE8LsAAeE3AANCnwADRqAAAwADRqz9KwABhXAEWwABhYy7AAFN9wADQp8AA0asGwADRs4JrwABhnMAAYbbAAGK5AQCaiAAAAAEDwABhwcAAYrkAAAAAAAAAXQPAAPypAWADwADTiwE+AknAAGHHHMAAYdcWwABhyy7AAHhPwADQp8AA0axIAQABKwDAAP1ePgI9F8AAYeguwAB4T8AA0KccwABiNBzAAGH2LsAAeFHAANCnAQABFsAAYhUuwAB4TcAA0KfAANGoAMAA0b+WOAABYAPAANOLAADAAPy3wADRrD0XwABiUy7AAHhPwADQpx/AAGJlwADAvgEBYAPAANOLARbAAGKLLsAAeE/AANCnwADRrADAANGsP0rAAGKjARbAAGKqLsAAeE/AANCnwADRrAbAANG0gmvAAGK+wABix8AAYuQBAMAAeCAAAAABA8AAYt3AAGLkAAAAAAAAAGADwAD6PwFKwABi4AEpBsAA0bWCa8AAYujAAGL4wABjEwEAwAB4LQAAAAEDwABjDMAAYxMAAAAAAAAAYAPAANNHAUrAAGMPAS4GwADRtoJrwABjF8AAYxvAAGNIAQCibwAAAAEDwABjKcAAY0gAAAAAAAAAXQPAAPypAWADwADTXgFKwABjLAFqwABjLF0DwAD8qQFgA8AA017AAZOhBsAA0beCa8AAY0zAAGNQwABjdQEAhR0AAAABA8AAY17AAGN1AAAAAAAAAF0DwAD8qQFgA8AA0zoBSsAAY2EBasAAY2FdA8AA/KkBYAPAANM6wAGTqQbAANG4gmvAAGN5wABjfcAAY6EBAIbbAAAAAQPAAGOGwABjoQAAAAAAAABdA8AA/KkBYAPAANMLAUrAAGOJAWrAAGOJXQPAAPypAWADwADTC8ABkzIGwADRuYJrwABjpcAAY6nAAGO5AQCEWwAAAAEDwABjssAAY7kAAAAAAAAAYAPAANOUAUrAAGO1ASsGwADRu4JrwABjvsAAY8XAAGP+AAAjAAAAAQPAAGPNwABj/gAAAAAAAABgA8AA/esBSsAAY9MBJMAAY/4DJ8AAeFIewABj7cAA0K0BAAEWwABj8C7AAHfvwADRsAAng0IGwADRvYJrwABkA8AAZBDAAGRwAATAAHhQwADQpwFqAGADwADLO8ABlOcAAAEDwABkL8AAZHAAAAABAQHAAGQwAAAAwAB4VFsAAGADwADTawAGwADRvoJrwABkdcAAZIHAAGThAAXAAHhVwADQpwFqAGADwADLO8ABlPsAAAEDwABkoMAAZOEAAAABAQHAAGShAAAAwAB4VFsAAGADwAD+aQAGwADRv4JrwABk5sAAZPTAAGVSAATAAHhRwADQpwFqAGADwADLO8ABlQ8AAAEDwABlEsAAZVIAAAABAQHAAGUTAAAAwAB4VFsAAF0DwAD8qQFbAAAAaZ9YAGmflwBpoFMAaaEDAGmhtwBporsAaaL2AGmjMQBpo4YAaaPbAGmkMABppGkAaaTJAGmlGgBppWsAaaW+AAAADwLAANHDgmvAAGVXwABlZsAAaUMHwAB4WAAAAWABwADQ3AABYAHAANL4AwTAANHGgmvAAGW+wABlyAnAAHf1wADQpwBbAATAANHHgmvAAGXTwABl3hjAAHgPwADQpwBgA8AA/l0ABMAA0ciCa8AAZlTAAGZiGMAAeBXAANCnAGADwAD+XQErAQXAANHUgmvAAGXjwABl48AAZh8AgLXAANCnAAPAAGX8wABmHwAAAAICAsAAZgIAAATAAHf1WwDAAGYTAAAEwAB4D2ADwAD+XQAAYAPAANHDAT8DCAHAANHGgADAaaa0CAHAANHHgQDAaabBCQHAAGXjwADQ3gAAAAAHBsAA0cqCa8AAZiTAAGYvwABmSAEAwAB37wAAAAEDwABmOsAAZkgAAAAAAAAAYAPAAP5dAUrAAGY9ARbAAGY9LsAAeA/AANCnwADRxwbAANHLgmvAAGZmwABmccAAZwcBAMAAaX0AAAABA8AAZn/AAGcHAAAAAAAAAGADwAD+XQE+AknAAGaFHMAAZpgWwABmiS7AAHgVwADQp8AA0chIAQABKwDAAP5oPgE9F8AAZqkuwAB4FcAA0KcewABmusAA0K8CAAIWwABm0C6o5sAA0vwWwABm1y7AAHfvwADRygDAANHIP0rAAGbuARbAAGb1LsAAeBXAANCnwADRyAbAANHMgmvAAGcMwABnFcAAZ0ABAIZdAAAAAQPAAGcfwABnQAAAAAAAAABgA8AA+j8BSsAAZyIBHMAAZzEewABnIsAA0K0BAAEWwABnJS7AAHfvwADRygCB1gEAASeAtQDAAP39BsAA0c2Ca8AAZ0XAAGdYwABnhwEAhFsAAAABA8AAZ2HAAGeHAAAAAAAAAGADwADTlAE+AUrAAGdnAR7AAGduwADQsQEAARbAAGd4LsAAd/XAANCnwADRxgAGwADRzoJrwABnjMAAZ6XAAGiTAQCG2wAAAAEDwABnrsAAaJMAAAAAAAAAXQPAAPypAWADwADTCwE+AUrAAGgzAR/AAGg+wADAvgEBYAPAANMLARzAAGiCHsAAaGzAANCyAQABFsAAaHYuwAB39cAA0KfAANHGAICrAQFgA8AA0wsBasAAaIZhAwFgA8AA/VFgA8AA0wvAAZOxAMAA/HIABsAA0dGCa8AAaJjAAGimwABpFQMASAAAAAEDwABoqMAAaRUAAAABAQHAAGipAAAAg9ZbAABgA8AA+j8BPgFKwABotgEiHMAAaM4WwABowi6FhsAA/WVIAQABFsAAaNeAwABo0cBpqYiFhsAA/WUAwAD9XgAcwABo/hbAAGjzLsAAd/XAANCnwADRxkgBAAEWwABpB4DAAGkBwGmpiMAAd/XAANCnAADAAP1eBsAA0c+Ca8AAaRrAAGkiwABpQQEAg8EAAAABA8AAaSvAAGlBAAAAAAAAAGADwAD8BQFKwABpLgEWwABpORbAAGkuLsAAd+/AANHKg8HAAP5mAABppwQAaadQAGmoAQBpqGYAaai/AGmpXwBpqgoAaapbAAAABwLAANHVgmvAAGlGwABpTMAAcf0DwAB4WQAAAWABwADRwwACYAHAANNeYAHAANFXAgTAANHYgmvAAGpEwABqShjAAHgQwADQpwBgA8AA0vgABMAA0dmCa8AAa1XAAGtgGMAAeFrAANCnAGADwADTOgErAQXAANHygmvAAGm9wABpvcAAai0AgLXAANCnAAPAAGnXwABqLQAAAAMDA8AAadgAAADAAHf3WwDAAGnqAAAAwAB372ADwAD96wDAAGn7AAAEwAB4EGADwADS+AAAYAPAANHVAT8CCAHAANHYggDAaas7CQDAAGoRwADR1AIAAoDAAGoTwGmrHB7AAGoewADQrgEAAYHAAGohwGmrKQAAEgbAANHbgmvAAGpOwABqZMAAawYBAKjmAAAAAQPAAGpqwABrBgAAAAAAAABgA8AA0vgBPgJJwABqcBzAAGp7FsAAanQuwAB4EMAA0KfAANHYSAEAASsAwAD9Xj4BPRfAAGqMLsAAeBDAANCnFsAAatYmwABqvAAewABqlsAA0e4BAAEWwABqsC7AAHf1wADQp8AA0cYAYAPAANM6wAB4LcAA00HAANHYP0rAAGr1ARbAAGr8LsAAeBDAANCnwADR2AbAANHcgmvAAGsLwABrFMAAayUBAIQZAAAAAQPAAGsdwABrJQAAAAAAAABgA8AA+j8BSsAAayABKgbAANHdgmvAAGspwABrMsAAa0UBAIeBAAAAAQPAAGs9wABrRQAAAAAAAABgA8AA+j8BSsAAa0ABKgbAANHegmvAAGtkwABrc8AAbA0BAJqNAAAAAQPAAGt+wABsDQAAAAAAAABgA8AA0zoBPgJJwABrhBzAAGuUFsAAa4guwAB4WsAA0KfAANHZSAEAASsAwAD9Xj4BPRfAAGulLsAAeFrAANCnHsAAa7PAANC4AQABHsAAa7/AANHvAQABFsAAa98uwAB39cAA0KfAANHGAADAANHZP0rAAGv3ARbAAGv+LsAAeFrAANCnwADR2QbAANHfgmvAAGwSwABsG8AAbDQBAMAAeBwAAAABA8AAbCzAAGw0AAAAAAAAAGADwAD6PwFKwABsLwEqBsAA0eCCa8AAbDjAAGxBwABsnAEAwAB4GwAAAAEDwABsT8AAbJwAAAAAAAAAYAPAAP5pAT4BPTDAAGxVH8AAbF/AAPuXAQABJ8AAeFsABsAA0eKCa8AAbKHAAGyqwABsxgEAwAB4DcAA0KcAAAABA8AAbLnAAGzGAAAAAAAAAGADwAD+aQFKwABsvAEmwABsvAEWwABsvC7AAHf1wADQp8AA0cZgA8AA/mkGwADR44JrwABsy8AAbOjAAG0VAQCibwAAAAEDwABs9sAAbRUAAAAAAAAAXQPAAPypAWADwADTXgFKwABs+QFqwABs+V0DwAD8qQFgA8AA017AAZOhBsAA0eSCa8AAbRnAAG0uwABtUwEAhR0AAAABA8AAbTzAAG1TAAAAAAAAAF0DwAD8qQFgA8AA0zoBSsAAbT8BasAAbT9dA8AA/KkBYAPAANM6wAGTqQbAANHlgmvAAG1YwABtYcAAbX4BAMAAeCAAAAABA8AAbXfAAG1+AAAAAAAAAGADwAD6PwFKwABtegEpBsAA0eaCa8AAbYLAAG2RwABtrAEAwAB4LQAAAAEDwABtpcAAbawAAAAAAAAAYAPAANM6AUrAAG2oAS4GwADR6YJrwABtscAAbbjAAG3xAAAjAAAAAQPAAG3AwABt8QAAAAAAAABgA8AA/esBSsAAbcYBJMAAbfEDJ8AAeFwewABt4MAA0K0BAAEWwABt4y7AAHfvwADRygAng0IGwADR6oJrwABt9sAAbf/AAG5/AwBIAAAAAQPAAG4BwABufwAAAAEBAcAAbgIAAACD1lsAAGADwAD6PwE+AUrAAG4PASIiJcAAbhyAwABuFsBpsAVgA8AA014AHMAAbkgWwABuPS7AAHfvwADRykgBAAEWwABuURTAAG5LwGmwBQABYAPAANNewAB378AA0voAwAD+aAAcwABubRbAAG5nLqjmwADR20gBAAEWwABudhTAAG5wwGmwBQABYAPAANNeqObAANL8AMAA/V4GwADR54JrwABuhMAAbozAAG6rAQCDwQAAAAEDwABulcAAbqsAAAAAAAAAYAPAAPwFAUrAAG6YARbAAG6jFsAAbpguwAB378AA0cqDwcAA/mYGwADR64JrwABusMAAbrXAAG+1AACa5wAAAAEDwABuwMAAb7UAAAABAQHAAG7MAAAAg9ZgA8AA0zoAAGADwAD6PwE+A0nAAG7ZHMAAbuOAwABu3cBpsSNIAQABFsAAbvwewABu5sAA0LUAAAAAnm3AANLnAMAA/V5KwABvCQEpP0nAAG8aHMAAbySAwABvHsBpsSNIAQABFsAAbz0ewABvJ8AA0LUAAAAAwABFP8AA0ugAwAD9XkrAAG9HASo/SsAAb1kBHsAAb2DAANCzAgACFsAAb3YuwAB4DcAA0KfAANHiFsAAb6ImwABvjQCAwABvh8BpsSNgA8AA0VfAAHgNwADQp8AA0VoABsAA0eyCa8AAb7rAAG+/wABxKAAAwAB4MAAAAAEDwABvzcAAcSgAAAABAQHAAG/ZAAAAg9ZgA8AA0zoAAGADwAD6PwE+BEnAAG/mHMAAb/CAwABv6sBpsi5IAQABFsAAcAkewABv88AA0LUAAAAAnm3AANLnAMAA/V5KwABwFgEpP0nAAHAnHMAAcDGAwABwK8Bpsi5IAQABFsAAcEoewABwNMAA0LUAAAAAwABFP8AA0ugAwAD9XkrAAHBUASo/TsAAcGzAAHB/AAHAAHgxYAPAAP5pARbAAHCdJsAAcIgAgMAAcILAabIuYAPAANFXwAB4DcAA0KfAANFaSsAAcLEBIh7AAHC4wADQswIAAhbAAHDFLsAAeA3AANCnwADR4oHAAHDVwGmywwABHsAAcPTAANCzAgACgcAAcQHAabLDFsAAcRUuwAB4DcAA0KfAANHiAAbAANHugmvAAHEtwABxRsAAcZIABcAAeF3AANCnAWoAYAPAAMs7wAGVIwAAAQPAAHFfwABxkgAAAAEBAcAAcWAAAADAAHf3WwAAYAPAANL4AAbAANHvgmvAAHGXwABxo8AAcfsABcAAeF/AANCnAWoAYAPAAMs7wAGVNwAAAQPAAHHCwABx+wAAAAEBAcAAccMAAADAAHf3WwAAYAPAAP5pAAAAaauRAGmsUQBprIoAaazDAGmtdwBprbIAaa4AAGmuXABprrEAaa8GAGmvQQBpr3wAaa/cAGmwqABpsPkAabICAGmzVgBps6cAabP4AAAAEgLAANHzgmvAAHIAwAByBsAAfpwDwAB4YQAAAWABwADRwwACYAHAANNmYAHAANFXBwTAANH2gmvAAHJ4wAByhgnAAHgNwADQpwBgA8AA/mkABMAA0feCa8AAcpXAAHKfCcAAeBHAANCnAGADwAD6PwAEwADR+IJrwAByrsAAcsMJwAB4E8AA0KcAYAPAAPo/AATAANH5gmvAAHOwwABzthjAAHgQwADQpwBgA8AA0vgABMAA0fqCa8AAdKbAAHSvGMAAeGLAANCnAGADwADRpQErBMAA0fuCa8AAd3jAAHeGGKlfwADQpwBdA8AA/KkBYAPAANNeASsEwADR/IJrwAB5jMAAeZoYwABKisAA0KcAXQPAAPypAWADwADTOgErAQXAANIPgmvAAHLIwAByyMAAc3kAAAADwABy28AAc3kAAAAGBgbAAHLcAAAAwAB391sAwABy7AAABMAAeA1gA8AA/mkAwABzAwAAAMAAd+9gA8AA/esAwABzGgAABMAAeBFgA8AA+j8AwABzKwAABMAAeBNgA8AA+j8AwABzRwAABMAAeBBgA8AA0vgAAGADwADR8wE/BQgBwADR9oEAwGm1mwgBwADR94MAwGm1vwgBwADR+IQAwGm10QgBwADR+YUAwGm14wkAwABzXcAA0dQCAAKAwABzX8BptY4ewABzasAA0K4BAAGCwABzbcBpta0AAA4GwADR/oJrwABzfsAAc4fAAHOZAQCHgQAAAAEDwABzksAAc5kAAAAAAAAAYAPAAPo/AUrAAHOVASkGwADR/4JrwABzusAAc9DAAHSIAQCo5gAAAAEDwABz1sAAdIgAAAAAAAAAYAPAANL4AT4CScAAc9wcwABz5xbAAHPgLsAAeBDAANCnwADR+UgBAAErAMAA/V4+Ak7AAHP8wAB0AAAAgKxgA8AA/esBHsAAdBTAANGTAQABFsAAdCAuwAB39cAA0KfAANHGAD0XwAB0My7AAHgQwADQpxzAAHRbFsAAdFIewAB0PMAA0LUAAAAAhtnAANLlSwEAAR7AAHRgwAD+mgEAAYDAAHRmwGm28wAAwAD87sAA0fk/SsAAdHcBFsAAdH4uwAB4EMAA0KfAANH5BsAA0gCCa8AAdLPAAHTKwAB1cwEAwAB4YwAAAAEDwAB008AAdXMAAAAAAAAAYAPAANNXAT4CScAAdNkcwAB05xbAAHTdLsAAeGLAANCnwADR+kgBAAErAMAA0Y4+Aj0XwAB0+C7AAHhiwADQpybAAHT4AR7AAHUEwADSDAEAARbAAHUULsAAeA3AANCnwADR9gBgA8AA0aXAANH6PRfAAHU1FsAAdSsuwAB4YsAA0KfAANH6wAB4FMAA0KcWwAB1RS7AAHgNwADQp8AA0fbAANFmP0rAAHVfARbAAHVmLsAAeGLAANCnwADR+gbAANIBgmvAAHV4wAB1gcAAdasBAMAAeBwAAAABA8AAdZLAAHWrAAAAAAAAAGADwAD6PwFKwAB1lQEhFsAAdZYuwAB4E8AA0KfAANH4BsAA0gKCa8AAda/AAHW4wAB2aAEAwAB4GwAAAAEDwAB1xsAAdmgAAAAAAAAAYAPAAP5pAT4CScAAdcwhFsAAddEuwAB4HMAA0gE+AT0wwAB16x/AAHX1wAD7lwEAASfAAHgdAD9KwAB2TwEWwAB2Vi7AAHgNwADQp8AA0fYGwADSA4JrwAB2bcAAdnbAAHazAQDAAHggAAAAAQPAAHaMwAB2swAAAAAAAABgA8AA+j8BSsAAdo8BIiEWwAB2kC7AAHgRwADQp8AA0fcBFsAAdp4uwAB4E8AA0KfAANH4BsAA0gSCa8AAdrjAAHbKwAB3WgEAwAB4LQAAAAEDwAB23sAAd1oAAAAAAAAAYAPAANNmAT4BScAAduQWwAB26C7AAHggwADSAz4BSsAAdwcBLj4BSsAAdycBHsAAdy7AANINAQABFsAAd0EuwAB4DcAA0KfAANH2AAbAANIFgmvAAHeKwAB3p8AAeXYBAKJvAAAAAQPAAHe1wAB5dgAAAAAAAABdA8AA/KkBYAPAANNeAT4CScAAd7scwAB3zhbAAHe/LqlfwADQp8AA0ftIAQABKwDAAP1ePgU9F8AAd98uqV/AANCnHsAAd/TAAPejAQFgA8AA014BkwDAANH7TsAAeBvAAHgiAACD710DwAD8qQFbAR7AAHg2wADRoAEAARbAAHhSLsAAd/XAANCnwADRxgBOwAB4c8AAeHkAAKjmYAPAANNmARbAAHh7LsAAeC3AANIETsAAeJoAAADAAHguWwBFwAB4qAHAAHixwAB4swAAYmADwAD8BQGTARzAAHi6g8AAeLjAabsNYwEAARbAAHjDgMAAeLzAabqjYcAA/NgAwAD9MgGLwAB4y8Bpuw0cwAB4zYPAAHjLwGm7DWQBAAGVAMAA/So+Aj2KwAB43cBpuvofwAB46sAA0fIDAAMcwAB5C4DAAHkFwGm6o0sBAAEcwAB5DoPAAHkMwGm7DWQBAAGUAMAA/SoAwAD8uCbAAHkaARzAAHkagMAAeRTAabqjSwEAAYPAAHkbwGm7DQDAAPy4YAPAAP3rgcAAeR/AabrYAD0cwAB5PhbAAHkvLqlfwADQp8AA0ftWAQABJsAAeUIBgsAAeULAabr6YAPAANNeAMAA/Lo/SsAAeV0BFsAAeWQuqV/AANCnwADR+wbAANIGgmvAAHmewAB5s8AAexYBAIUdAAAAAQPAAHnBwAB7FgAAAAAAAABdA8AA/KkBYAPAANM6AT4CScAAecccwAB52hbAAHnLLsAASorAANCnwADR/EgBAAErAMAA/V4+AUnAAHnrFsAAee8uwAB4E8AA0KfAANH4PgE9F8AAehAuwABKisAA0KdqwAB6IV0DwAD8qQFgA8AA0zrAAZOpwADR/D4BPRfAAHpOLsAASorAANCnH8AAemPAAMC+AQFgA8AA0zoBHMAAetYewAB6o8AA0aEBAAEWwAB6uS7AAHgNwADQp8AA0fYAljgAAWADwADTOgAAwAD8twDAANH8P0rAAHr9ARbAAHsELsAASorAANCnwADR/AbAANIIgmvAAHsbwAB7IsAAe1YAACMAAAABA8AAeyrAAHtWAAAAAAAAAGADwAD96wFKwAB7MAEkwAB7VgMnwAB4ZB7AAHtFwADQrQEAARbAAHtILsAAd+/AANHKACeDQgbAANIJgmvAAHtbwAB7YMAAfGAAAJrnAAAAAQPAAHtrwAB8YAAAAAEBAcAAe3cAAACD1mADwADTOgAAYAPAAPo/AT4DScAAe4QcwAB7joDAAHuIwGm92UgBAAEWwAB7px7AAHuRwADQtQAAAACebcAA0ucAwAD9XkrAAHu0ASk/ScAAe8UcwAB7z4DAAHvJwGm92UgBAAEWwAB76B7AAHvSwADQtQAAAADAAEU/wADS6ADAAP1eSsAAe/IBKj9KwAB8BAEewAB8C8AA0LMCAAIWwAB8IS7AAHgNwADQp8AA0fYWwAB8TSbAAHw4AIDAAHwywGm92WADwADRV8AAeA3AANCnwADRWgAGwADSCoJrwAB8ZcAAfGrAAH3TAADAAHgwAAAAAQPAAHx4wAB90wAAAAEBAcAAfIQAAACD1mADwADTOgAAYAPAAPo/AT4EScAAfJEcwAB8m4DAAHyVwGm+5EgBAAEWwAB8tB7AAHyewADQtQAAAACebcAA0ucAwAD9XkrAAHzBASk/ScAAfNIcwAB83IDAAHzWwGm+5EgBAAEWwAB89R7AAHzfwADQtQAAAADAAEU/wADS6ADAAP1eSsAAfP8BKj9OwAB9F8AAfSoAAcAAeDFgA8AA/mkBFsAAfUgmwAB9MwCAwAB9LcBpvuRgA8AA0VfAAHgNwADQp8AA0VpKwAB9XAEiHsAAfWPAANCzAgACFsAAfXAuwAB4DcAA0KfAANH2gcAAfYDAab95AAEewAB9n8AA0LMCAAKBwAB9rMBpv3kWwAB9wC7AAHgNwADQp8AA0fYABsAA0gyCa8AAfdjAAH3ywAB+NgAFwAB4ZcAA0KcBagBgA8AAyzvAAZVLAAABA8AAfgHAAH42AAAAAQEBwAB+AgAAAMAAeBtbAABgA8AA01cABsAA0g2Ca8AAfjvAAH5QwAB+mgAFwAB4Z8AA0KcBagBgA8AAyzvAAZVfAAABA8AAfmLAAH6aAAAAAQEBwAB+YwAAAMAAeBtbAABgA8AA02YAAABptl0AabaWAGm3jQBpuHgAabjFAGm5QgBpuaMAabocAGm8NQBpvU8Aab2vAGm+uABpwAwAacBdAGnArgAAAA4CwADSEIJrwAB/RsAAf0zAAIhnA8AAeGkAAAFgAcAA0SIAAWABwADTGwQEwADSEoJrwAB/pcAAf68JwAB37wBgA8AA/l0ABMAA0hOCa8AAf73AAH/ACYCsAGADwAD+bAAEwADSFYJrwACBjsAAgZsYwAB4GsAA0KcAXQPAAPzaAmADwAD+XWADwADS+AErBMAA0haCa8AAhWjAAIWCGMAAeGrAANCnAFsBKwEFwADSLoJrwAB/xcAAf8XAAIBsAIC1wADQpwADwAB/2sAAgGwAAAADAwPAAH/bAAAAwAB391sAwAB/7QAAAMAAd+9gA8AA/esAwACAAAAAAMAASRtgA8AA/esAAGADwADSEAE/AwgAwADSEh7AAIAfwADQrgEAAYHAAIAiwGnB0QAIAMAA0hMewACARsAA/poBAAGCwACATMBpweMACQDAAIBgwADRMQEAAYDAAIBiwGnBxAARBsAA0hiCa8AAgLnAAIDEwACA3wEAwABpfQAAAAEDwACA0sAAgN8AAAAAAAAAYAPAAP5dAUrAAIDVARbAAIDVLsAAd+/AANISBsAA0hmCa8AAgOTAAID6wACBBwEAqOYAAAABA8AAgQDAAIEHAAAAAAAAAGADwADS+AFKwACBAwErBsAA0hqCa8AAgQzAAIEVwACBJwEAhl0AAAABA8AAgR/AAIEnAAAAAAAAAGADwAD6PwFKwACBIgEqBsAA0huCa8AAgSvAAIE0wACBRwEAh4EAAAABA8AAgT/AAIFHAAAAAAAAAGADwAD6PwFKwACBQgEqBsAA0h2Ca8AAgUzAAIFVwACBagEAwAB4FMAA0KcAAAABA8AAgWPAAIFqAAAAAAAAAGADwAD+aQFKwACBZgErBsAA0h6Ca8AAgZ/AAIHCwACDHgEArm8AAAABA8AAgc/AAIMeAAAAAAAAAF0DwAD82gJgA8AA/l1gA8AA0vgBPgVJwACB1SEcwACB5xbAAIHZLsAAeBrAANCnwADSFUgBAAErAMAA/V5KwACB8AEWwACB9y7AAHgawADQp8AA0hU/TsAAgg/AAIIVAADAAHgnXQPAAPzaAmADwAD+XWADwADS+AEewACCG8AA/OEAAmADwAD+XWADwADS+AAATsAAgkXAAIJNAACEjl0DwAD8qQFbARzAAIJPLsAAeCjAANCnAQABFsAAgl8uwAB39cAA0KfAANElAMAA0itGwACCcMAAgozAAIJ5AAAAgmZbAIHAAIKDwGnEPz4BPRzAAIKZgMAAgpTAacQDgL8CAAImwACCmQEWwACCoYLAAIKawGnEhcAAd+8AYAPAAP5dJsAAgpkBgsAAgq/AacSFYAPAANL4AMAA/O9KwACCwgEXwACCyS7AAHgawADQpx/AAILlwADCagECYAPAAP5dYAPAANL4AYDAAIMUwGnEAwDAANIVBsAA0h+Ca8AAgyPAAIM2wACDZQEAhFsAAAABA8AAgz/AAINlAAAAAAAAAGADwADTlAE+AUrAAINFAR7AAINMwADQsQEAARbAAINWLsAAd/XAANCnwADRJQAGwADSIIJrwACDasAAg4PAAIRxAQCG2wAAAAEDwACDjMAAhHEAAAAAAAAAXQPAAPypAWADwADTCwE+AUrAAIQRAR/AAIQcwADAvgEBYAPAANMLARzAAIRgHsAAhErAANCyAQABFsAAhFQuwAB39cAA0KfAANElAICrAQFgA8AA0wsBasAAhGRhAwFgA8AA/VFgA8AA0wvAAZOxAMAA/HIABsAA0iSCa8AAhHbAAISEwACE8wMASAAAAAEDwACEhsAAhPMAAAABAQHAAISHAAAAg9ZbAABgA8AA+j8BPgFKwACElAEiHMAAhKwWwACEoC6FhsAA/WVIAQABFsAAhLWAwACEr8BpxkSFhsAA/WUAwAD9XgAcwACE3BbAAITRLsAAd/XAANCnwADRJUgBAAEWwACE5YDAAITfwGnGRMAAd/XAANCnAADAAP1eBsAA0iGCa8AAhPjAAIUAwACFHwEAg8EAAAABA8AAhQnAAIUfAAAAAAAAAGADwAD8BQFKwACFDAEWwACFFxbAAIUMLsAAd+/AANISg8HAAP5mBsAA0iWCa8AAhSTAAIUrwACFXwAAIwAAAAEDwACFM8AAhV8AAAAAAAAAYAPAAP3rAUrAAIU5ASTAAIVfAyfAAHhrHsAAhU7AANCtAQABFsAAhVEuwAB378AA0hIAJ4NCBsAA0iKCa8AAhYbAAIWKwACGrgEAwAB4bAAAAAEDwACFnsAAhq4AAAAAAAAAXQPAAPypAWADwADTJAE+AknAAIWkHMAAhcMWwACFqC7AAHhqwADQp8AA0hZIAQABKwDAAP1ePgE9F8AAhdQuwAB4asAA0KcfwACF/8AAwL4BAWADwADTJAEcwACGXRzAAIY8LsAAeG3AANCnAQABFsAAhlEuwAB39cAA0KfAANElAMAA0ieWOAABYAPAANMkAADAAPy3AMAA0hY/SsAAhokBJsAAhokBFsAAhpAuwAB4asAA0KfAANIWXQPAAPypAWADwADTJAbAANIngmvAAIazwACGwcAAhxEABMAAeG3AANCnAWoAYAPAAMs7wAGVcwAAAQPAAIbVwACHEQAAAAEBAcAAhtYAAADAAHf3WwAAXQPAAPypAVsABsAA0iiCa8AAhxbAAIcWwACHcgAEwAB39sAA0KcBagBgA8AAyzvAAZWHAAABA8AAhx3AAIdyAAAABAQEwACHHgAAAMAAd/dbAMAAhykAAACnLlsAwACHNQAAAFtbAMAAh0AAAADAAFTlWwAAWwAGwADSKYJrwACHd8AAh3fAAIe/AATAAHf4wADQpwFqAGADwADLO8ABlZsAAAEDwACHhMAAh78AAAACAgLAAIeFAAAAwAB391sAwACHkAAAAMAAR9lbAABbAAbAANIqgmvAAIfEwACHxMAAiBkABMAAd/nAANCnAWoAYAPAAMs7wAGVrwAAAQPAAIfRwACIGQAAAAMDA8AAh9IAAADAAHf3WwDAAIfdAAAAwABH2lsAwACH6QAAAICWWwAAWwAGwADSK4JrwACIHsAAiCzAAIhlAATAAHgowADQpwFqAGADwADLO8ABlcMAAAEDwACIO8AAiGUAAAABAQHAAIg8AAAAwAB391sAAF0DwAD8qQFbAAAAacJPAGnClwBpwtAAacMJAGnDQgBpw4EAacUiAGnFewBpxhsAacbGAGnHFwBpx3cAachrAGnIvgBpySwAacmFAGnJ6QBpyjwAAAARAsAA0i+Ca8AAiGrAAIhwwACOtwPAAHhzAAABYAHAANDcAAFgAcAA0yQHBMAA0jGCa8AAiOLAAIjvCamcAGADwADTGwAEwADSM4JrwACI98AAiQwYwAB4dMAA0KcAWwAEwADSNIJrwACJLcAAiTgJhKMAXQPAAPypAWADwADTMwAEwADSNYJrwACJScAAiU8JgyQAYAPAAP5dAATAANI2gmvAAIlewACJZgmErgBgA8AA+j8ABMAA0jeCa8AAiXXAAIl/CYSvAGADwAD6PwAEwADSOIJrwACJnsAAiaYJhtsAXQPAAPypAWADwADTCwABBcAA0kOCa8AAiavAAImrwACLngCAtcAA0KcAA8AAicrAAIueAAAABwcHwACJ1wAABKmcYAPAANMbAMAAifEAAATAAHh0WwDAAIocAAAAwAB4dV0DwAD8qQFbAMAAijYAAADAAHh2WwDAAIpPAAAEhK5gA8AA+j8AwACKZAAABISvYAPAAPo/AMAAioQAAADAAHh3XQPAAPypAVsAAGADwADSLwE/CAgBwADSMYAAwGnLowgBwADSM4EAwGnLswgBwADSNoQAwGnL4QgBwADSN4UAwGnL8QgAwADSNR7AAIqowADQrgEA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SAEAASsAwAD9Xj4BPRfAAKPQLpIswADQpx7AAKPYwADQuAEAASbAAKPkAR7AAKPkwADSkQIAAhbAAKP5LsAAd/XAANCnwADRxhbAAKQFLsAAeBTAANCnwADSjABgA8AA/mkAwADSiD9KwACkIAEWwACkJy6SLMAA0KfAANKIBsAA0o+Ca8AApDXAAKQ8wACkiQAAIwAAAAEDwACkRMAApIkAAAAAAAAAYAPAAP3rAUrAAKRQASTAAKSJAyfAAHidHsAApHPAANLiAQABFsAApHsuwAB378AA0coAJ4NCBsAA0pGCa8AApI7AAKSVwACk5QAFwAB4nsAA0KcBagBgA8AAyzvAAZaTAAABA8AApKnAAKTlAAAAAgICwACkqgAAAMAAd/dbAMAApLUAAACas1sAAFsAAABp5pQAaebjAGnoMgBp6P4AaeleAGnptQAAAAUCwADSlYJrwACk6sAApPDAAKuhA8AAeKAAAAFgAcAA0oEAAWABwADTiwcEwADSmIJrwAClUMAApVkJwAByC8AA0KcAYAPAAPwFAATAANKdgmvAAKVowAClcgmhMwBgA8AA+j8ABMAA0p6Ca8AApYHAAKWICaPCAGADwAD6PwAEwADSmYJrwACll8AApaoJwAB4ocAA0KcAXQPAAPypAVsABMAA0pqCa8AAp6TAAKe6GMAAeKLAANCnAGADwAD9UQAEwADSm4JrwACnzcAAp9oYwABuusAA0KcAYAPAANMLASsEwADSnIJrwACqOcAAqj4YkizAANCnAGADwADTOgErAQXAANKrgmvAAKWvwAClr8AAp5gAgLXAANCnAAPAAKXGwACnmAAAAAkJCcAApc4AAADAAHf3WwDAAKXmAAAAwAB372ADwAD96wDAAKYKAAAAqOZgA8AA0vgAwACmHAAABMAAcgtgA8AA/AUAwACmMgAABKEzYAPAAPo/AMAApkkAAASjwmADwAD6PwDAAKZdAAAAhBtgA8AA+j8AwACmcQAABMAAeKJgA8AA/VEAwACmlAAABMAAeKFdA8AA/KkBWwAAYAPAANKVAT8GCAHAANKYgwDAaessCAHAANKdhADAaes+CAHAANKehQDAaetOCAHAANKahwDAaetuCAHAANKZFADAaeuACAAJAMAAprfAANKUBwAHgMAApsbAaer9gcAApt3AaesKgsAApvXAaesc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AAABA8AArh3AAK48AAAAAAAAAF0DwAD8qQFgA8AA014BSsAAriABasAAriBdA8AA/KkBYAPAANNewAGToQbAANK4gmvAAK5AwACuVcAArnoBAIUdAAAAAQPAAK5jwACuegAAAAAAAABdA8AA/KkBYAPAANM6AUrAAK5mAWrAAK5mXQPAAPypAWADwADTOsABk6kGwADSuYJrwACuf8AArojAAK6lAQDAAHggAAAAAQPAAK6ewACupQAAAAAAAABgA8AA+j8BSsAArqEBKQbAANK6gmvAAK6pwACuuMAArtMBAMAAeC0AAAABA8AArszAAK7TAAAAAAAAAGADwADTOgFKwACuzwEuBsAA0ruCa8AArtjAAK7jwACu/gEAwABpfQAAAAEDwACu8cAArv4AAAAAAAAAYAPAAP5dAUrAAK70ARbAAK70LsAAd+/AANKuBsAA0r6Ca8AArwPAAK8RwACvkQMASAAAAAEDwACvE8AAr5EAAAABAQHAAK8UAAAAg9ZbAABgA8AA+j8BPgJJwACvISElwACvK4DAAK8lwGn0hWADwADSrD4BSsAAr0sBKj9KwACvYwEcwACvehbAAK9vLsAAd+/AANKuSAEAARbAAK+DgMAAr33AafSFwAB37wAAwAD+aAbAANK8gmvAAK+WwACvnsAAr70BAIPBAAAAAQPAAK+nwACvvQAAAAAAAABgA8AA/AUBSsAAr6oBFsAAr7UWwACvqi7AAHfvwADSroPBwAD+ZgbAANK/gmvAAK/CwACvycAAr/oAACMAAAABA8AAr9HAAK/6AAAAAAAAAGADwAD96wFKwACv1wEkwACv+gMnwAB4qR7AAK/pwADQrQEAARbAAK/sLsAAd+/AANKuACeDQgbAANLAgmvAAK//wACwBMAAsGgAAJrnAAAAAQPAALAPwACwaAAAAAEBAcAAsBsAAACD1mADwADTOgAAYAPAAPo/AT4BSsAAsCgBIhzAALA6FsAAsC8uwAB378AA0q5IAQABasAAsD1gA8AA/l3AAZa2AMAA/mgBJcAAsE+AwACwScBp9c5gA8AA0qwGwADSwYJrwACwbcAAsHLAALDZAADAAHgwAAAAAQPAALCAwACw2QAAAAEBAcAAsIwAAACD1mADwADTOgAAYAPAAPo/AT4BSsAAsJkBIhzAALCrFsAAsKAuwAB378AA0q5IAQABasAAsK5gA8AA/l3AAZa2AMAA/mgBJcAAsMCAwACwusBp9ltgA8AA0qwAAGnwzwBp8QgAafFBAGnxegBp8bMAafIIAGnybQBp8vQAafNJAGnzngBp89kAafQUAGn0XABp9PMAafVEAGn1pABp9i8Aafa8AAAAEQLAANLFgmvAALDewACw5MAAuMMDwAB4qgAAAWABwAD9UQAAAwTAANLIgmvAALEFwACxNATAAHirwADQpwBgA8AA0t0BH8AAsSDAANDRAAAAAATAANLJgmvAALPJwACz/QTAAHiswADQpwBdA8AA++YBYAPAANFdAR/AALPnwAD7+gEBYAPAANFdASfAAHitAATAANLKgmvAALQcwAC0SwTAAHiuwADQpwBdA8AA++YBYAPAANM6AR/AALQ2wAD7+gEBYAPAANM6ASfAAHivAAEFwADS1gAAAAAEAAADAAAAAAAAAAAAYAPAANLFAT8BCQEAwAD9ZwAAAAAIBsAA0syCa8AAsTjAALFMwACxhwABwAB4sAAAAAEDwACxX8AAsYcAAAAAAAAAYAPAANLdAT4BSsAAsWgBGsAAsW/AANLIBsAA0s2Ca8AAsb3AALHTwACycgABwAB4sQAAAAEDwACx2sAAsnIAAAABAQHAALHiAAAAwAB392ADwAD9UQAAYAPAANMLAT4BSsAAsfMBIyXAALIEgMAAsfrAafh1YAPAAPv7H8AAsh7AANFWAQABFMAAsjTAafh1AAFgA8AA+/sAH8AAsk3AANFIAQABgMAAsmTAafh1AAFgA8AA0TIGwADSz4JrwACyd8AAsorAALLVAAXAAHiywADQpwFqAGADwADLO8ABlr8AAAEDwACyn8AAstUAAAABAQHAALKlAAAAg9FgA8AA/mkAAGADwADTRwAGwADS0IJrwACy2cAAsuvAALM0AAXAAHi0wADQpwFqAGADwADLO8ABltMAAAEDwACy/8AAszQAAAABAQHAALMFAAAAg9FgA8AA/mkAAGADwADTOgAGwADS0YJrwACzOMAAs0TAALOiAAXAAHi2wADQpwFqAGADwADLO8ABlucAAAEDwACzW8AAs6IAAAACAgLAALNhAAAAg9FgA8AA/mkAwACzZgAAAIUdWwAAYAPAAP5pAAbAANLTgmvAALRQwAC0Y8AAtaIAAcAAeLgAAAABA8AAtG/AALWiAAAAAQEBwAC0dQAAAIPRYAPAAP5pAABgA8AA00cBPgNOwAC0hMAAtJAAAMAAeLlgA8AA0V0BHMAAtKMawAC0ksAA0slLAQABgMAAtKTAafoaAMAA+/NJwAC0rhzAALS+gcAAtLLAafo1SAEAASsAwADRjj4DPYnAALTPwGn6NSbAALTPAR7AALTdwADSzwEAAYDAALTzwGn6GgBgA8AA0V09HMAAtRAawAC0/8AA0smAvwIAAoDAALURwGn6GoHAALUYwGn6NQDAAPv0ScAAtSshFsAAtTyBwAC1MMBp+jXAAHgRwADQp8AA0WM+AT0cwAC1ZRrAALVSwADSyoC/AgACgMAAtWbAafoagcAAtW3Aafo1AMAA+/Q/P0rAALWMAYHAALWTwGn6NQbAANLUgmvAALWnwAC1ucAAt4kAAcAAeLoAAAABA8AAtcTAALeJAAAAAgECwAC1ygAAAIPRYAPAAP5pAMAAtdsAAACFHV0DwAD8qQFgA8AA/mkBagBgA8AA/Q55AGADwADTOgE+BEnAALXxIRzAALYDgcAAtfXAaft6SAEAASsAwAD9Xj4BPYjAALYUwGn7ah7AALYawADS0gIAAoDAALYrwGn7aoHAALYwwGn7egA/TsAAtk7AALZZAADAAHi7YAPAANM6ARzAALZuGsAAtlvAANLKSwEAAYDAALZvwGn7agDAAPvzScAAtnkcwAC2iILAALZ9wGn770gBAAErAMAA/V4+Az2KwAC2mcBp++8ewAC2psAA0tABAAGAwAC2u8Bp+2oAPRzAALbaGsAAtsfAANLKgL8CAAKAwAC228Bp+2qCwAC24sBp++8AwAD79EnAALb0IiXAALcDgsAAtvjAafvvYAPAANFdACEWwAC3JxTAALccwGn77wIBYAPAANFdwAB4EcAA0KfAANFjPgE9HMAAt04awAC3PcAA0smAvwIAAoDAALdPwGn7ahTAALdWwGn77wIBYAPAANFdAMAA+/Q/P0rAALd0AYLAALd7wGn77wbAANLSgmvAALeOwAC3msAAuMEAAcAAeLzAANCnAAAAAQPAALeqwAC4wQAAAAICAsAAt7AAAACD0WADwAD+aQDAALfAAAAAhR1dA8AA/KkBYAPAAP5pAABgA8AA/mkBPgJJwAC31RbAALfngcAAt9nAaf1SgVXAAPyLPgE9MMAAt/gfwAC4AsAA+zkDAAOBwAC4FsBp/VInhR0nwAB4vQA/SsAAuHMBHsAAuHrAANLRAgACgMAAuJLAaf1CHMAAuKWBwAC4l8Bp/VKArQEAAAGFXirAAPx9AAAAafgEAGn4SQBp+OcAafk7AGn5jwBp+e4Aafs+AGn9EgBp/eoAAAAIAsAA0teCbID8gRyBtwPAAHi+AWqA/WADwAD6BsABfjsAAWABwAD9UQAAAAACBsAA0tqCbIExgTmBeQQBwAB21sAA0KcAAAABA4FZgXkAAAAAAAAAYAPAANLXAT4BPTCBYifAAGF5BsAA0tyCbIF+gYyBtQMESAFqAGADwADLO8ABlvsAAAEDgY6BtQAAAAEBAYGPAAAAg9ZbAABgA8AA+j8AAABp/kAAaf55AGn+tQAAAAICwADS3YJqjAKMEZMCB8AAeMABaowRYAPAAMstwAF+WwABYAHAAP1RAAAAAQXAANLqAAAAAAQAAAMAAAAAAAAAAABgA8AA0t0BPwEJAQDAAP1nAAAAAAgGwADS4IJtimCKZ4q3AAXAAHjBwADQpwFqAGADwADLO8ABlw8AAAEDinKKtwAAAAICAop6AAAAgL1gA8AA/esAipEAAACIkGADwADS1wAAWwAGwADS5YJqjY+Nq420AQKG2QAAAAEDjbSNtAAAAAAAAABdA8AA/NoCYAPAAP5sYAPAANMbAAbAANLhgm2GOIZPiEUAAMAAeMMBaoZPYAPAAMstwAF+WwAAAQOGWohFAAAAAQEBhmIAAACGXGADwAD+XQAAYAPAANMbAT4EToZ5hoQAALaLXQPAAPxnAWADwADTGwEchp8WhpgWho4uhtnAANLlKcAA/P2BpQEAATSGpQOGpYbLAAAAAQEBhqYAAACIkGADwADTGwAAYAPAAPo/AUqGrgEchr0WhrKBhq7AagApwAB378AA0vpIAQABgIbAwGn/0gDAAP5oAMAA/HNJhtIchugWhuGBhtbAaf/rYcAA/IpIAQABlADAAP0oPgFKhvYBFocIgYb9wGn/64DDwAD8jz9JhxochzAWhymBhx7Aaf/rYcAA/IqAlwEAAZQAwAD9ND4CTodBh0YAAINhXQPAAPypAWADwAD96wEch3Qch1OBh0jAaf/rgKsBAWADwAD96wE0h1cDh1eHcgAAAAEBAYdYAAAAiJBgA8AA0xsAAGADwAD96wFKh2ABHIdoFodkgodgwGoBAoCswADTHSMAAAAAwAD+lADAAPxygK0AAAAAwAD8fT0wh4Qeh47AAPvQAQABJAAFJ8AAeMQng0Ieh8zAANLiAQABgIfUwGn/0gAnkmqCh+XAagDGAD89MIf3HogBwAD70AEAASSIQAMnwAB4xR6IKcAA0uIBAAGAiDHAaf/SACeDQgAGwADS5oJqjwyPHo8lAQKw7QAAAAEDjyWPJQAAAAAAAABgA8AA0u4ABsAA0ueCao9dj2yPdwECnm0AAAABA493j3cAAAAAAAAAYAPAANM6AAbAANLogmqPrI+7j8MBAsAART8AAAABA4/Dj8MAAAAAAAAAYAPAANM6AAbAANLigm2ISohhiLUAAZkcAWqIYWADwADLLcABflsAAAEDiGiItQAAAAEBAYhwAAAAwABg5GADwAD+XQAAYAPAAP3rAT4BSoh+AR6IlcAAztUBAAEmiKoBgIiqwGoCUmADwADOxQAGwADS44JtiLqI0YpbAAHAAHjGAWqI0WADwADLLcABflsAAAEDiNqKWwAAAAIBAojiAAAAgL1gA8AA/esAiPcAAACEQ2ADwADTGwFqAGADwAD9DnkAYAPAAP5dAT4DSYkHIiIhHIkUgYkMwGoCyUgBAAErAMAA0yEAISWJJ4GJH8BqAslgA8AA0hABIiIciVkWiVKAiU3AagK7YcAA/e+AlwEAAZMAwAD9NAAciWociWaAiWLAagK7SwEAAZMAwAD9+EgBAAEngLUAwAD9+gAciX6BiXbAagLJSAEAASsAwADTIT4BPTCJkR+Jm8AA+zgBAAGBianAagLJAD9Jib0hHInJgYnBwGoCyUgBAAErAMAA0yE+AT2IidrAagK7JonaAR6J4cAA0uACAAKAie3AagK7JooUARaKFCaJ/ACBifTAagLJYAPAANIQwAB39cAA0KfAANElYAPAANLXAGADwAD96z9KiisBH4o2wADO2gEAAYCKUsBqArsAAABp/x0Aaf9uAGn/owBqAasAagHTAGoB+wBqAiUAagKMAGoEBwAAAAgCwADS64Jqmniah5qPB8AAeMcAAAFgAcAA/VEAAAABBcAA0u0AAAAABAAAAwAAAAAAAAAAAGADwADS6wE/AQkBAMAA/WcAAAAAAAAAagR6AAAAAALAANLugmqaxZrUoDMHwAB4yAAAAWABwAD9UQABYAHAANLrAAEFwADS9wAAAAAEAAADAAAAAAAAAAAAYAPAANLuAT8BCQEAwAD9ZwAAAAAFBsAA0vCCaptLm1abXwECo8gAAAABA5tfm18AAAAAAAAAYAPAAP3rAAbAANLxgmqbsZu6m8MBAsAAd+gAAAABA5vDm8MAAAAAAAAAYAPAAPo/AAbAANLygmqcBZwXnCIBAsAAd+cAAAABA5winCIAAAAAAAAAYAPAANMbAAbAANL0gmqdUJ1enWcDAkgAAAABA51gnWcAAAABAQGdYQAAAIPWWwAAYAPAAPo/AAbAANL1gmqgC6AhoDEAAsAAd+oAAAABA6AooDEAAAABAQGgLQAAAICsYAPAAP5sAABdA8AAuN4BYAPAANMbAAAAagTTAGoE+wBqBSUAagVPAGoFfwBqBb4AAAAFAsAA0viCaqCIoJe0DAfAAHjJAAABYAHAAP1RAAFgAcAA0usAAQXAANMCAAAAAAQAAAMAAAAAAAAAAABgA8AA0vgBPwEJAQDAAP1nAAAAAAcGwADS+oJqoc2h2KHiAQLAAHfvAAAAAQOh4qHiAAAAAAAAAGADwAD+XQAGwADS+4JqpU6lWaVmAQLAAGl9AAAAAQOlZqVmAAAAAAAAAGADwAD+XQAGwADS/IJqqK6oxKjJAQKo5gAAAAEDqMmoyQAAAAAAAABgA8AA0vgABsAA0v2CaqnLqdSp3QEChl0AAAABA6ndqd0AAAAAAAAAYAPAAPo/AAbAANL+gmqqb6p4qoIBAoeBAAAAAQOqgqqCAAAAAAAAAGADwAD6PwAGwADS/4JqsRqxLbE1AQKEWwAAAAEDsTWxNQAAAAAAAABgA8AA05QABsAA0wCCarPptAK0CgEChtsAAAABA7QKtAoAAAAAAAAAXQPAAPypAWADwADTCwAAAGoGKwBqBlUAagZ/AGoGpwBqBs8Aagb3AGoHHwBqB04AAAAHAsAA0wOCarXEtdPAAEhSB8AAeMoAAAFgAcAA/VEAAWABwADS6wABBcAA0woAAAAABAAAAwAAAAAAAAAAAGADwADTAwE/AQkBAMAA/WcAAAAABAbAANMFgmq6hrqVuvUAArtyAAAAAQO6m7r1AAAAAwIDuqMAAACnLmADwAD+XQC6tAAAAKpMXQPAAPypAVsAuuUAAACqTV0DwAD82gJgA8AA/l1bAWoAYAPAAP0OeQBgA8AA0wsABsAA0waCasAAQYHAAEGQwABBqgACwABNFAAAAAEDwABBmMAAQaoAAAABAQHAAEGgAAAAwABIE2ADwAD+XQAAYAPAANMLAAbAANMHgmrAAEWewABFrcAARdUAAsAAd/wAAAABA8AARbXAAEXVAAAAAgICwABFvQAAAMAASBNgA8AA/l0AwABFzwAAAICWYAPAAP1RAABgA8AA0wsABsAA0wiCasAASDHAAEgxwABIUAACrtQAAAABA8AASDnAAEhQAAAAAQEBwABIRQAAAKFDYAPAAPw9AABbAAAAagfFAGoIKgBqCHAAagjGAGoJAwAAAAQCwADTC4JqwABIpMAASLPAAE58B8AAeMsAAAFgAcAA/VEAAWABwADTAwABBcAA0xMAAAAABAAAAwAAAAAAAAAAAGADwADTCwE/AQkBAMAA/WcAAAAABAbAANMNgmrAAEnRwABJ4cAASeUBAoKQAAAAAQPAAEnlwABJ5QAAAAAAAABgA8AA00cABsAA0w6CasAAS73AAEvGwABL0gECwAB4AAAAAAEDwABL0sAAS9IAAAAAAAAAYAPAAPo/AAbAANMPgmrAAEzcwABM4MAATOkBAsAAd/cAAAABA8AATOnAAEzpAAAAAAAAAFsABsAA0xGCasAATmPAAE5xwABOegMCSAAAAAEDwABOc8AATnoAAAABAQHAAE50AAAAg9ZbAABgA8AA+j8AAABqCXIAagmkAGoJ2ABqCgcAagpDAAAABALAANMUgmrAAE8WwABPJcAAVroHwAB4zAAAAWABwAD9UQABYAHAANMLAAEFwADTGgAAAAAEAAADAAAAAAAAAAAAYAPAANMUAT8BCQEAwAD9ZwAAAAACBsAA0xaCasAAUvbAAFMHwABTDwECgmoAAAABA8AAUw/AAFMPAAAAAAAAAGADwADTawAGwADTGIJqwABWXcAAVmzAAFa4AAKvPwAAAAEDwABWccAAVrgAAAACAQLAAFZ3AAAAqkxdA8AA/KkBWwDAAFaoAAAAqk1dA8AA/NoCYAPAAP5dWwFqAGADwAD9DnkAYAPAANMLAAAAagqyAGoK5ABqC0kAAAACAsAA0xuCasAAV0zAAFdbwABa/QfAAHjNAAABYAHAAP1RAAJgAcAA0vhgAcAA0wMAAQXAANMjAAAAAAQAAAMAAAAAAAAAAABgA8AA0xsBPwEJAQDAAP1nAAAAAAQGwADTHYJqwABXysAAV9LAAFfVAQKArAAAAAEDwABX1cAAV9UAAAAAAAAAYAPAAP5sAAbAANMegmrAAFj9wABZIMAAWSwBAq5vAAAAAQPAAFkswABZLAAAAAAAAABdA8AA/NoCYAPAAP5dYAPAANL4AAbAANMhgmrAAFpewABabMAAWnUDAkgAAAABA8AAWm7AAFp1AAAAAQEBwABabwAAAIPWWwAAYAPAAPo/AAbAANMfgmrAAFrGwABa6MAAWvsBAsAAeGwAAAABA8AAWvvAAFr7AAAAAAAAAF0DwAD8qQFgA8AA0yQAAABqC7YAagvoAGoMJwBqDGMAagyeAAAABALAANMkgmrAAFsxwABbQMAAX+oHwAB4zgAAAWABwAD9UQABYAHAANLrAAEFwADTMgAAAAAEAAADAAAAAAAAAAAAYAPAANMkAT8BCQEAwAD9ZwAAAAAKBsAA0yaCasAAW5/AAFuowABbsAEChK4AAAABA8AAW7DAAFuwAAAAAAAAAGADwAD6PwAGwADTJ4JqwABb5sAAW+/AAFv3AQKErQAAAAEDwABb98AAW/cAAAAAAAAAYAPAAPo/AAbAANMogmrAAFxYwABcYcAAXGsBAoSvAAAAAQPAAFxrwABcawAAAAAAAABgA8AA+j8ABsAA0ymCasAAXNPAAFzlwABc8gECqZwAAAABA8AAXPLAAFzyAAAAAAAAAGADwADTGwAGwADTKoJqwABdccAAXYPAAF2QAQKErAAAAAEDwABdkMAAXZAAAAAAAAAAYAPAANMbAAbAANMrgmrAAF3hwABd7MAAXfIBAoMkAAAAAQPAAF3ywABd8gAAAAAAAABgA8AA/l0ABsAA0yyCasAAXk/AAF5qwABedQEChKMAAAABA8AAXnXAAF51AAAAAAAAAF0DwAD8qQFgA8AA0zMABsAA0y2CasAAXsDAAF7TwABe2wEChFsAAAABA8AAXtvAAF7bAAAAAAAAAGADwADTlAAGwADTLoJqwABe4MAAXvnAAF8BAQKG2wAAAAEDwABfAcAAXwEAAAAAAAAAXQPAAPypAWADwADTCwAGwADTMIJqwABfxcAAX9vAAF/oAAKuNwAAAAEDwABf5sAAX+gAAAAAAAAAXQPAALjeAWADwADTGwAAAGoNDQBqDT8Aag1xAGoNowBqDdUAag4HAGoOOQBqDnIAag6kAGoO3QBqDxYAAAAKAsAA0zOCasAAYDbAAGBFwABhQwfAAHjPAAABYAHAAP1RAAFgAcAA0usAAQXAANM5AAAAAAQAAAMAAAAAAAAAAABgA8AA0zMBPwEJAQDAAP1nAAAAAAMGwADTNYJqwABgncAAYK7AAGC5AQLAAHh9AAAAAQPAAGC5wABguQAAAAAAAABdA8AA/KkBYAPAAP5dAAbAANM2gmrAAGDuwABg98AAYP0BAoS2AAAAAQPAAGD9wABg/QAAAAAAAABgA8AA+j8ABsAA0zeCasAAYTLAAGE7wABhQQEChLsAAAABA8AAYUHAAGFBAAAAAAAAAGADwAD6PwAAAGoPnQBqD9gAahAKAGoQPAAAAAMCwADTOoJqwABhrMAAYbvAAGxDB8AAeK8AAAFgAcAA/VEAAWABwADS+AABBcAA00YAAAAABAAAAwAAAAAAAAAAAGADwADTOgE/AQkBAMAA/WcAAAAACAbAANM8gmrAAGKuwABit8AAYscBAsAAeBwAAAABA8AAYsfAAGLHAAAAAAAAAGADwAD6PwAGwADTPYJqwABjVsAAY1/AAGNsAQLAAHgbAAAAAQPAAGNswABjbAAAAAAAAABgA8AA/mkABsAA0z6CasAAZQXAAGUiwABlLwECom8AAAABA8AAZS/AAGUvAAAAAAAAAF0DwAD8qQFgA8AA014ABsAA0z+CasAAZ1PAAGdowABndQEChR0AAAABA8AAZ3XAAGd1AAAAAAAAAF0DwAD8qQFgA8AA0zoABsAA00CCasAAaN/AAGjowABo/QECwAB4IAAAAAEDwABo/cAAaP0AAAAAAAAAYAPAAPo/AAbAANNBgmrAAGprwABqesAAao0BAsAAeC0AAAABA8AAao3AAGqNAAAAAAAAAGADwADTOgAGwADTQ4JqwABrOsAAaz/AAGtcAAKa5wAAAAEDwABrSsAAa1wAAAABAQHAAGtWAAAAg9ZgA8AA0zoAAGADwAD6PwAGwADTRIJqwABsHMAAbCHAAGxBAALAAHgwAAAAAQPAAGwvwABsQQAAAAEBAcAAbDsAAACD1mADwADTOgAAYAPAAPo/AAAAahCnAGoQ2wBqEQ8AahFIAGoRgQBqEbUAahHpAGoSKwBqEm8AAAAIAsAA00eCasAAbIHAAGyQwAB9wwfAAHitAAABYAHAAP1RAAJgAcAA0zpgAcAA0wMAAQXAANNWAAAAAAQAAAMAAAAAAAAAAABgA8AA00cBPwEJAQDAAP1nAAAAAAsGwADTSYJqwABtRcAAbVXAAG1fAQKE7AAAAAEDwABtX8AAbV8AAAAAAAAAYAPAANNHAAbAANNKgmrAAG2wwABtxsAAbdUBAsAAeCEAAAABA8AAbdXAAG3VAAAAAAAAAF0DwAD8qQFgA8AA00cABsAA00uCasAAbgbAAG4PwABuGQEChBoAAAABA8AAbhnAAG4ZAAAAAAAAAGADwAD6PwAGwADTTIJqwABuScAAblLAAG5YAQKE4wAAAAEDwABuWMAAblgAAAAAAAAAYAPAAPo/AAbAANNNgmrAAHAmwABwScAAcFUBAq5vAAAAAQPAAHBVwABwVQAAAAAAAABdA8AA/NoCYAPAAP5dYAPAANL4AAbAANNOgmrAAHJGwAByZMAAcnMBAsAAeCYAAAABA8AAcnPAAHJzAAAAAAAAAF0DwAD82gJgA8AA/l1gA8AA02sABsAA00+CasAAc9fAAHP1wAB0AgECwAB4JQAAAAEDwAB0AsAAdAIAAAAAAAAAXQPAAPzaAmADwAD+XWADwADTawAGwADTUIJqwAB03sAAdO7AAHTzAQKE7gAAAAEDwAB088AAdPMAAAAAAAAAYAPAANNHAAbAANNSgmrAAHrWwAB65cAAe08AAsAAVMMAAAABA8AAevDAAHtPAAAAAwIDwAB6+AAAAKkDYAPAAP5dAMAAew4AAACqTF0DwAD8qQFbAMAAez8AAACqTV0DwAD82gJgA8AA/l1bAWoAYAPAAP0OeQBgA8AA0wsABsAA01OCasAAfMnAAHzXwAB84AMCSAAAAAEDwAB82cAAfOAAAAABAQHAAHzaAAAAg9ZbAABgA8AA+j8ABsAA01SCasAAfZ3AAH2iwAB9wQACmxQAAAABA8AAfa7AAH3BAAAAAQEBwAB9uwAAAIPWYAPAANNHAABgA8AA+j8AAABqEvQAahMmAGoTYQBqE5MAahPFAGoUBABqFEUAahSGAGoUuABqFS8AahVrAGoVrQAAAAsCwADTV4JqwAB+I8AAfjLAAH/wB8AAeNAAAAFgAcAA/VEAAWABwADTRwABBcAA010AAAAABAAAAwAAAAAAAAAAAGADwADTVwE/AQkBAMAA/WcAAAAAAwbAANNZgmrAAH6bwAB+qsAAfrQBAoU6AAAAAQPAAH60wAB+tAAAAAAAAABgA8AA0zoABsAA01qCasAAfwLAAH8cwAB/JgECmogAAAABA8AAfybAAH8mAAAAAAAAAF0DwAD8qQFgA8AA04sABsAA01uCasAAf9PAAH/kwAB/7gECtEYAAAABA8AAf+7AAH/uAAAAAAAAAGADwADTawAAAGoWOABqFmoAahajAGoW1QAAAAMCwADTXoJqwACARMAAgFPAAILBB8AAeNEAAAFgAcAA0zoAAAABBcAA02UAAAAABAAAAwAAAAAAAAAAAGADwADTXgE/AQkBAMAA00YAAAAAAwbAANNggmrAAIDSwACA4cAAgOsBApqNAAAAAQPAAIDrwACA6wAAAAAAAABgA8AA0zoABsAA02GCasAAgXzAAIGFwACBjQEChBkAAAABA8AAgY3AAIGNAAAAAAAAAGADwAD6PwAGwADTY4JqwACCqMAAgrbAAIK/AwJIAAAAAQPAAIK4wACCvwAAAAEBAcAAgrkAAACD1lsAAGADwAD6PwAAAGoXOgBqF2wAaheeAGoX2gAAAAMCwADTZoJqwACDEsAAgyHAAITWB8AAeNIAAAFgAcAA/VEAAWABwADTOgABBcAA02oAAAAABAAAAwAAAAAAAAAAAGADwADTZgE/AQkBAMAA/WcAAAAAAQbAANNogmrAAIS1wACEzMAAhNQBAsAAeGMAAAABA8AAhNTAAITUAAAAAAAAAGADwADTVwAAAGoYRQBqGHkAAAABAsAA02uCasAAhUPAAIVSwACPJAfAAHjTAAABYAHAAP1RAAFgAcAA0vgAAQXAANOAAAAAAAQAAAMAAAAAAAAAAABgA8AA02sBPwEJAQDAAP1nAAAAABEGwADTbYJqwACFwMAAhc/AAIXZAQKFOgAAAAEDwACF2cAAhdkAAAAAAAAAYAPAANM6AAbAANNugmrAAIYwwACGO8AAhkEBAoNEAAAAAQPAAIZBwACGQQAAAAAAAABgA8AA/esABsAA02+CasAAho7AAIaowACGsgECmogAAAABA8AAhrLAAIayAAAAAAAAAF0DwAD8qQFgA8AA04sABsAA03CCasAAh5PAAIecwACHpAEChBkAAAABA8AAh6TAAIekAAAAAAAAAGADwAD6PwAGwADTcYJqwACH1cAAh97AAIfoAQKEGgAAAAEDwACH6MAAh+gAAAAAAAAAYAPAAPo/AAbAANNygmrAAIkwwACJOcAAiUQBAoSNAAAAAQPAAIlEwACJRAAAAAAAAABgA8AA+j8ABsAA03OCasAAiivAAIo0wACKQwECob0AAAABA8AAikPAAIpDAAAAAAAAAGADwAD6PwAGwADTdIJqwACKd8AAioDAAIqKAQKdeQAAAAEDwACKisAAiooAAAAAAAAAYAPAAPo/AAbAANN1gmrAAIq7wACKxMAAiswBAoUzAAAAAQPAAIrMwACKzAAAAAAAAABgA8AA+j8ABsAA03aCasAAiv3AAIsGwACLDgEChTUAAAABA8AAiw7AAIsOAAAAAAAAAGADwAD6PwAGwADTd4JqwACLRMAAi03AAItaAQKHgAAAAAEDwACLWsAAi1oAAAAAAAAAYAPAAPo/AAbAANN4gmrAAIyQwACMm8AAjKoBAqkDAAAAAQPAAIyqwACMqgAAAAAAAABgA8AA/l0ABsAA03mCasAAjObAAIzvwACNAQECwAB38AAAAAEDwACNAcAAjQEAAAAAAAAAYAPAAPo/AAbAANN6gmrAAI1CwACNS8AAjWIBArNNAAAAAQPAAI1iwACNYgAAAAAAAABgA8AA+j8ABsAA03uCasAAjaTAAI2twACNxQECwAB38QAAAAEDwACNxcAAjcUAAAAAAAAAYAPAAPo/AAbAANN8gmrAAI4DwACODMAAjiABArRHAAAAAQPAAI4gwACOIAAAAAAAAABgA8AA+j8ABsAA036CasAAjwvAAI8ZwACPIgMCSAAAAAEDwACPG8AAjyIAAAABAQHAAI8cAAAAg9ZbAABgA8AA+j8AAABqGNwAahkOAGoZQABqGXkAahmrAGoZ3QBqGg8AahpBAGoacwBqGqUAahrXAGobCQBqGzsAahtvAGoboQBqG9UAahwHAGocQwAAABECwADTgYJqwACPdMAAj4PAAJL2B8AAeNQAAAFgAcAA/VEAAWABwADS+AABBcAA04oAAAAABAAAAwAAAAAAAAAAAGADwADTgQE/AQkBAMAA/WcAAAAABQbAANODgmrAAI/zwACQAsAAkAYBAoKQAAAAAQPAAJAGwACQBgAAAAAAAABgA8AA0zoABsAA04SCasAAkOHAAJDqwACQ8gEChBkAAAABA8AAkPLAAJDyAAAAAAAAAGADwAD6PwAGwADThYJqwACRYcAAkWrAAJFxAQKEGwAAAAEDwACRccAAkXEAAAAAAAAAYAPAAPo/AAbAANOGgmrAAJHiwACR68AAkfIBAoQdAAAAAQPAAJHywACR8gAAAAAAAABgA8AA+j8ABsAA04iCasAAkt3AAJLrwACS9AMCSAAAAAEDwACS7cAAkvQAAAABAQHAAJLuAAAAg9ZbAABgA8AA+j8AAABqHOYAah0YAGodSgBqHXwAah2uAGod6gAAAAUCwADTi4JqwACTRsAAk1XAAJbnB8AAeNUAAAFgAcAA/VEAAWABwADTgQABBcAA05MAAAAABAAAAwAAAAAAAAAAAGADwADTiwE/AQkBAMAA/WcAAAAABQbAANONgmrAAJO8wACTy8AAk88BAoKQAAAAAQPAAJPPwACTzwAAAAAAAABgA8AA0zoABsAA046CasAAlEPAAJRMwACUVgECoTMAAAABA8AAlFbAAJRWAAAAAAAAAGADwAD6PwAGwADTj4JqwACUxsAAlM/AAJTWAQKjwgAAAAEDwACU1sAAlNYAAAAAAAAAYAPAAPo/AAbAANOQgmrAAJVZwACVYsAAlXEBAsAAd/MAAAABA8AAlXHAAJVxAAAAAAAAAGADwAD6PwAGwADTkYJqwACWxsAAltnAAJblAQKDJQAAAAEDwACW5cAAluUAAAAAAAAAYAPAANMLAAAAah5dAGoejwBqHsEAah7zAGofJwBqH1kAAAAFAsAA05SCasAAlz3AAJdMwACY2ge3IAAAAWABwAD9UQAAAAEFwADTmgAAAAAEAAADAAAAAAAAAAAAYAPAANOUAT8BCQEAwAD9ZwAAAAADBsAA05aCasAAl+DAAJfowACX7AECgfoAAAABA8AAl+zAAJfsAAAAAAAAAGADwAD8BQAGwADTl4JqwACYdsAAmH7AAJiEAQKG6QAAAAEDwACYhMAAmIQAAAAAAAAAYAPAAPwFAAbAANOYgmrAAJjHwACYz8AAmNgBArciAAAAAQPAAJjYwACY2AAAAAAAAABgA8AA/mwAAABqH8QAah/2AGogKABqIFoAAAADAsAA05uCasAAmSLAAJkowACbdQPAAEdZAAABYAHAAP1RAAADBMAA052CasAAmYLAAJmGCYGwAGADwAD96wAEwADTnoJqwACaV8AAmmIJwAB41gBgA8AA/esABMAA05+CasAAmyXAAJsxCcAAeNcAYAPAAPo/AAEFwADToYJqwACbNsAAmzzAAJtzAQAAA8AAm0PAAJtzAAAAAwMDwACbSQAABIGwYAPAAP3rAMAAm1QAAATAAHjWYAPAAP3rAMAAm2YAAATAAHjXYAPAAPo/AABgA8AA05sBPwQIAcAA052AAMBqIQsIAcAA056BAMBqIRsIAcAA05+CAMBqIS0JAcAAmzzAAP1nAAAAAAAAAGohfAAAAAACwADTooJqwAChncAAofDAAMKWA8AAeNgBasAAoZ5gA8AA+fLAAZcjAAFgAcAA/VEAAAQEwADTpIJqwACpOsAAqUEJwAB42gBbAATAANOlgmrAALKKwACykQmHjwBbAATAANOmgmrAALhLwAC4VgnAAHjbAFsABMAA06eCasAAwXPAAMF7CcAAeNwAWwABBcAA06mCasAAwj3AAMJDwADClAEAAAPAAMJOwADClAAAAAQAAATAAMJcAAAEwAB42lsBagBgA8AA/Q55wADCagAABIePWwFqAGADwAD9DnnAAMJ4AAAEwAB421sBagBgA8AA/Q55wADCigAABMAAeNxbAWoAYAPAAP0OeWADwADTogE/BQgBwADTpIAAwGoiOQgBwADTpYEAwGoiTwgBwADTpoIAwGoiYwgBwADTp4MAwGoieQkBwADCQ8AA/WcAAAAAAAAAaiLXAAAAAAEEwADQqoJrgQCBDgTAAHjdwADQpwBgA8AA+j8BKgwGwADQrYJrgc2B1IIIAAHAAHjewADQpwAAAAEDgdaCCAAAAAEBAYHeAAAAwABg5GADwAD+XQAAYAPAAP3rAUqB6QEegfnAAM7SAQABJoIBAYCCAcBqIyVgA8AAzsUABsAA0K6Ca4ILghKCdQABwABqR8AA0KcAAAABA4IUgnUAAAABAQGCHAAAAIC9YAPAAP3rAABgA8AA/l0BPgJJgiYcgi+AgirAaiODSAEAASsAwAD9+kqCOAErP0qCRwEfglLAAM7aAQABgIJuwGojgwAGwADQr4JrgniCf4MoAAHAAHjfwADQpwAAAAEDgpSDKAAAAAICAoKnAAAAqOZgA8AA0vgAgrUAAADAAHfvYAPAAP5dAABgA8AA/l0BPgJJgsUcgs+AgsnAaiP0SAEAASsAwAD9XkqC2AGBgt/AaiQCP0qC7QEegvTAANCuAQABJIMlAx6C+sAA0K0BAAEWgwOAgv3AaiP0wABpfcAA0vsAJ4FqHoMVwADQrQEAAYGDGMBqJAIAAAbAANCwgmuDK4MyhxMAAcAAeODAANCnAAAAAQODRocTAAAAAgICg1cAAACFOmADwADTOgCDeQAAAJqIXQPAAPypAWADwADTiwAAYAPAAP3rAT4KToOWg5oAAJbpYAPAAP41AR+DoMAA/lQAAAAAPRyDtoKDssBqJNiCigEAASeD1wDAAP5JToPJg+MAAMAAeOFgA8AA+j8BKk6D84QIAADAAHjiYAPAAPo/ASpFhBQBhB2EHwAAYmADwAD8BQGTARyEJoWEJMBqJTRjAQABFoQzgYQowGokuGHAAPzYAMAA/TIBjYQ7wGolNByEPIWEO8BqJTRkAQABlADAAP0qPgZOhEqEUAAAmRlgA8AA04sBHIRcgYRSwGokuEsBAAGFhF3AaiU0AMAA/LhJhGUiIhaEb4aEacBqJYWhM8AA044AFoSDhoR9wGolhaPCwADTjwAhhISPwGolHj4CPRyEsYKErcBqJNiCigEAASeZtgDAAP5JPYyEw8BqJR4pP0mE6iIiFoT0hoTuwGolhaEzwADTjgAhFoUJhoUDwGolhaPCwADTjwAhg4UVwGolCz4CPRyFPIKFOMBqJNiCigEAASeZlgDAAP5JPYuFTsBqJQspP0mFehaFhIaFfsBqJYWjwsAA048+Aj0chZmChZXAaiTYgooBAAEehZ/AANCtAQABFoWohoWiwGolhcAAd+/AANL6AADAAP5JPRyFwIKFvMBqJNiCigEAASeDVQDAAP5JPz0chduChdfAaiTYgooBAAEeheHAANCtAQABFoXvFoXqhoXkwGolhYKQwADTjcAAaX3AANL7AADAAP5JSYYEHIYKhYYIwGolNGMBAAEchh8WhhiBhg3AaiS4YcAA/NiBjQEAAZQAwAD9KwDAAP0yPgE9HIYxgoYtwGok2IKKAQABJ4GLAMAA/kk/SYZKhIZOwGolHj4BPRyGboKGasBqJNiCigEAASeGxgDAAP5JP0mGgIOGhMBqJQs+AT0chqmChqXAaiTYgooBAAEnmZcAwAD+ST89HIa/goa7wGok2IKKAQABJ8AAQGgAwAD+ST0chtWChtHAaiTYgooBAAEehtvAANCtAQABFobpgIbewGokqsAAaX3AANL7AADAAP5JSob8ARyHB4KHA8BqJNgjAAAAAMAA/k4GwADQsYJrhxaHJYddAAW3LMAA0KcBagBgA8AAyzvAAZc3AAABA4cuh10AAAABAQGHLwAAAMAAd/dbAABgA8AA05QABsAA0LKCa4dgh26HpgAFwABn4sAA0KcBagBgA8AAyzvAAZdLAAABA4d3h6YAAAABAQGHeAAAAMAAd/dbAABdA8AA/KkBWwAGwADQs4Jrh6mHrofqAAXAAHjlwADQpwFqAGADwADLO8ABl18AAAEDh7qH6gAAAAICAofAAAAAgdVgA8AA/mkAh8gAAACCSmADwAD+aQAAYAPAAPo/AAbAANC0gmvAAH6fwAB+psAAf0MAAcAAeOfAANCnAAAAAQPAAH6vwAB/QwAAAAICAsAAfrcAAAChvGADwAD+XQDAAH7NAAAAhENgA8AA0xsAAGADwAD+XQE+Ak7AAH7ewAB+6AAAwAB3/WADwAD96wEewAB+98AA0uIBAAGAwAB+/8BqKPsASsAAfwoBHsAAfx7AANLjAgACJMAAfzcCgsAAfyvAaikmJ4C8gcAAfznAaikLAAbAANC1gm2DWoNug68AAcAAeLABaoNuYAPAAMstwAF+WwAAAQODgYOvAAAAAAAAAGADwADS3QE+AUqDiAEeg5jAANLMAAAAAAbAANC2gm2EV4RthK8AAcAAeLEBaoRtYAPAAMstwAF+WwAAAQOEdISvAAAAAQEBhHwAAADAAHf3YAPAAP1RAABgA8AA0wsBPgFKhIsBHoSbwADSzQEAAYCEo8BqKfYABsAA0LeCbYVKhV2FmwABwAB4uAFqhV1gA8AAyy3AAX5bAAABA4VphZsAAAABAQGFbwAAAIPRYAPAAP5pAABgA8AA00cBPgFKhXgBHoWIwADS0wEAAYCFlcBqKlUABsAA0LiCbYWehbCGFwABwAB4ugFqhbBgA8AAyy3AAX5bAAABA4W7hhcAAAACAQKFwQAAAIPRYAPAAP5pAIXSAAAAhR1dA8AA/KkBYAPAAP5pAWoAYAPAAP0OeQBgA8AA0zoBPgFKheYBHoX2wADS1AIAAoCGAsBqKrKBhgfAairAAASCaoJrgmyCbQBqKwUAaUrbAGlLrABpTzoAaVDTAGlRLABpVOUAaVsMAGle7ABpZnUAaW8OAGlxZwBpcewAaZ34AGmmAwBpqoAAabRJAGnA7wBpyokAadA2AGnRowBp5NYAaenSAGnwEwBp9wkAaf4TAGn+xgBqBDAAagSDAGoF2wBqB3MAagkcAGoKXABqC1oAagy3AGoPRwBqEFEAahKYAGoV4gBqFuoAahfvAGoYhgBqHJAAah4HAGofdgBqIG8AaiGFAGoi4AAAAC4AaiL/AGojXQBqI84AaiSEAGon6wBqKC4Aaih1AGooywBqKX8AainHAGoqJgBqKoMAaisFAAAADAACBMAA06rAAHjogm4AAWqA/GADwAD58sABl3MBgTABAMAAybEAAQEGwAB0+cAAdJ7AAHSbwAB0mMAAdJ/AAHSVBsAAyfXAAMnXwADJ/8AAygjAAMoXwADKJAAAAAAAAYJuAGosaQBqLGcAAAAAAGosaQAAAAAAAgTAANOrwAB46oJvAAAEge4AAMAAyuoAAQEQwAByScAAdXnAAHYxwAB2RcAAbt/AAHZdwAB1bMAAdirAAHZewAB2QcAAdmjAAHYkwAB2OsAAdi/AAHZKnU6DlgAAwAC9zAABAQHAAG62g78AAMAA0AoAAQEBwABo54HUAADAAMrqAAEBAcAAdloAAQDAAHjrAIC7AsAA08GCcIeIh5eN+gfAAHjsAAABYAHAAP1RAAAAAQXAANPVAAAAAAQAAAMAAAAAAAAAAABgA8AA08EBPwEJAQDAAP1nAAAAAA4GwADTw4Jwh6qHsoe4AQJhAAAAAQOHuIe4AAAAAAAAAGADwAD8BQAGwADTxIJwh7yHxIfWAQLAAG7GAAAAAQOH1ofWAAAAAAAAAGADwAD8BQAGwADTxYJwh9qH4ofvAQKpkQAAAAEDh++H7wAAAAAAAABgA8AA/AUABsAA08aCcIfziAOICQECgosAAAABA4gJiAkAAAAAAAAAYAPAANUHAAbAANPKgnCIRIhLiOsAAFgAAAABA4hPiOsAAAABAAGIWAAAAIGvYAPAAP3rAWqIZGADwAD964QSAGADwAD96wE+A06IfIiDAACCi2ADwAD+NQEfiInAAP5UAAAAAD0ciKSBiJ3Aai5Cn78CAAImiLIALl0DwAD8ZwFbgIi/wGouHgDAAP5LSojPARyI3YGI1sBqLkIjAAAAAMAA/k4GwADTx4JwiPCI+YkiAQCBVQAAAAEDiQGJIgAAAAAAAABgA8AA+j8BPgFKiQcBHIkaFokTLmHAANPDSAEAAZMAwAD9KAbAANPIgnCJJ4kwiUYBAIOyAAAAAQOJO4lGAAAAAAAAAGADwAD6PwFKiT4BIRaJPy6BVcAA08cGwADT04JwiXyJgInbAgBhAAAAAQOJhonbAAAAAQEBiYcAAACXV1sAAFwBPgE9MImYH4miwAD7lwEAASfAAHjtAAbAANPLgnCJ4InlijsAAIJCAAAAAQOJ6oo7AAAAAAAAAFwBPgE9MInzH4n9wAD7lwEAASfAAHZRAAbAANPMgnCKQIpFiqoAAIRZAAAAAQOKS4qqAAAAAQEBilMAAACWJmADwAD9UQAAYAPAAPo/AT4BPTCKYh+KbMAA+5cBAAEnwAB2UQAGwADTzYJwiq+KtIsiAACfzAAAAAEDir+LIgAAAAICAorEAAAAamADwAD8BQCKzwAAAIKMYAPAAPwFAABcAT4BPTCK2h+K5MAA+5cBAAEnwAB2UQAGwADTzoJwiyeLLIuuAACf0QAAAAEDiziLrgAAAAMDA4s9AAAAamADwAD8BQCLSAAAAIKMYAPAAPwFAItWAAAAg8xdA8AA/GcBWwAAXAE+AT0wi2Yfi3DAAPuXAQABJ8AAdlEABsAA08+CcIvhi+iMGQAAIwAAAAEDi/CMGQAAAAAAAABgA8AA/esBSov2AR6L/8AAwZwBAAEmjBEALl0DwAD8qQFbAAbAANPRgnCNYI1ljfgABMAAbsXAANOrAWoAYAPAAMs7wAGXhwAAAQONbo34AAAABgYGjXMAAADAAHjvYAPAAPwFAI2FAAAAwABua2ADwAD8BQCNowAAAJYuYAPAANPBAI2zAAAAwAB48GADwAD8BQCNyQAAAMAAePFgA8AA/AUAjdQAAADAAHjyYAPAAPwFAABgA8AA+j8AAABqLV4Aai2FAGotrwBqLdcAai3/AGounABqLuAAai8XAGovWABqL5EAai/dAGowMQBqMJUAajDYAGoxcAAAAA4CwADT1oJwjf2OA6oUR8AAePMAAAFgAcAA/VEAAV0BwAD8qQFgA8AA/AUAADMGwADT2IJwjiqOMo5EAQLAAG7GAAAAAQOORI5EAAAAAAAAAGADwAD8BQAGwADT2YJwjkiOUI5dAQKpkQAAAAEDjl2OXQAAAAAAAABgA8AA/AUABsAA09qCcI5hjnGOdwECgosAAAABA453jncAAAAAAAAAYAPAANUHAAbAANPhgnCOfI6IjrgAAJZGAAAAAQOOlI64AAABAACCdmADwAD9UQFbAAAAAF0DwAD8ZwFfAwAAAUqOmgEfjp7AAM4aAQFfAwAAAS4ABsAA0+KCcI69jsuPKwAAlj0AAAABA47VjysAAAABAQGO5AAAIIPWXQPAAPxnAWADwAD8BQAAXQPAAPxnAWADwAD8BQFKjvQBHo74wADN8gIBYAPAAPwFAi6AjyXAajLFAAbAANPjgnCPMI84j2AAAJY4AAAAAQOPP49gAAABAACW+WADwAD9UQFbAAAAAF0DwAD8qQFfAwAAAUqPRQEej0rAAPy0AQJgA8AA/AVfAwAAAS4ABsAA1AuCcI9kj22P1gIAgxkAAAABA49yj9YAAAABAQGPdwAAIICWYAPAAPwFAABcAT4CSY+EHI+UFo+NLmHAAPzYSAEAAZMAwAD9KD0wj5ofj6TAAPtbAgACky4APz0cj8cugL8CAAKTgI/NwGozeQDAAPy5BsAA1AyCcI/bj+SQWgIAgegAAAABA4/okFoAAAABAQGP7QAAIICWYAPAAPwFAABcAT4CSY/6HJAKFpADLmHAAPzYSAEAAZMAwAD9KD0wkBAfkBrAAPtbAgACky4APz0ckD0ugL8CAAIckEoWkEMuYcAA/NiBjQEAAZQAwAD9K4CQUcBqM+4AwAD8uQbAANPkgnCQX5BjkRwAAJ/WAAAAAQOQbZEcAAAAAgECkHMAAACW/2EDAWADwAD8BWADwAD6PwCQiwAAAGpgA8AA/AUBapCTYAPAAPwFCQBgA8AA/AUBPgNJkJ0ckKeBkKHAajSQYwEAAZMAwAD9Mj2JkKzAajSQkz9FkLsBkMSQxgAAYmADwAD8BQGBkMjAajSQARyQ0YKQz8BqNNZjAQABFpDTLmHAAPzYAMAA/TIBipDbwGo01hyQ3IKQ28BqNNZkAQABlADAAP0qPgFJkOgckPCAkOzAajR5IAEAARyQ9S5LAQABgpD2wGo01gDAAPy4AABKkPsBgpECwGo01j9KkQ8BHJEWlIHEAAAAAMAA/CgGwADT5YJwkSGRJZIEAACf1wAAAAEDkTOSBAAAAAIBApE5AAAAlv9hAwFgA8AA/AVgA8AA+j8AkVEAAABqYAPAAPwFAWoAYAPAAP0OeQBgA8AA/AUBPgNJkV8iHJFpgZFjwGo1okgBAAErAMAA/SgBHJF6gZF0wGo1ooFtAQABFpGCLmHAAPzYAMAA/TU9iZGKwGo1ohyRnhaRly5hwAD82IGNAQABlADAAP0rP0WRpwGRsJGyAABiYAPAAPwFAYGRtMBqNaIBHJG9gpG7wGo2HIFtAQABkwDAAP01AYqRw8BqNhwckcSCkcPAajYcgY0BAAGUAMAA/Ss+AUmR0ByR2ICR1MBqNYsgAQABHJHdLksBAAGCkd7AajYcAMAA/LgAAEqR4wGCkerAajYcP0qR9wEckf6UgcQAAAAAwAD8KAbAANPmgnCSCZIcku8DAGQAAAABA5Idku8AAAABAQGSKAAAIIPWXQPAAPypAWADwAD8BQAAXQPAAPypAWADwAD8BQE+Ak6SOZJFAACDWGADwAD8BQEcklMWkkwuYcAA/NhkAQABFpJbgJJVwGo2ymHAAPzYAMAA/SpKkmcBNZJzAAABAF0DwAD8qQFgA8AA/AUBMZJzYAPAAPwFADUAAAABAFsBF5J+gpJ8wGo3KWGBkofAajbxwAD81jUAAAABAFsBHJKbgpKZwGo3KYNeAwADkxaSrC5hwAD82C4AwAD8zjUAAAABAFsBHJLCgpLAwGo3KYNeAwADFpLQLmHAAPzYgZLYwGo28YCS5cBqNsoAwAD8zoIAwGo3KQbAANPngnCS9JL5k5gAAIMXAAAAAQOTAZOYAAAAAQEBkwkAAACWJmADwAD9UQAAYAPAAPo/AT4DTpMckyAAAJdsYAPAAPwFARaTJy5hwAD82EWTMwGTPJM+AABiYAPAAPwFAZMBHJNFgpNDwGo4GmMBAAGBk0fAajf+AMAA/TIBipNOwGo4GhyTTIKTTsBqOBpkAQABlADAAP0qPgFJk1kck2Uck2EuSwEAAYKTYsBqOBoAwAD8uEgBAAGAk2jAajflAMAA/ShKk3EBKT9Kk4gBKgbAANPognCTnZOilIsAAJ/FAAAAAQOTqZSLAAAAAQABk7IAAACfxmADwADQbQFqAGADwAD9DnkAXAE+Az0jHJPIgJPBwGo4t0gBAAErAMAA/V6Ik8HAaji3HpPQwADQbwAAAAArAWADwADQbU6T4pPkAABiYAPAAPwFARaT6y5hwAD82EOT9xyUAIGT/sBqOQSAlwEAAZQAwAD9ND4FTpQRlBUAAJ/HYAPAAPwFARyUHoCUF8BqOLefyAEAAYGUJsBqOQQAwADQcj2JlDDAajkEHJQygZQwwGo5BIGNAQABlADAAP0rTpRClEYAAJ/JYAPAAPwFARyUTC5LAQABgZRNwGo5BADAAPy4PRyUWy6AvwIAAoGUXMBqOQQclGUuSwEAAYKUZsBqOTYAwAD8uADAAPy5PRyUdi6AvwIAAoKUd8BqOTaDlH7Aajl+AMAA/LkGwADT6YJwlJCUnpTbAACBpQAAAAEDlKOU2wAAAAEBAZSpAAAAgaZhAwFgA8AA/AVgA8AA+j8AAF0DwAD8ZwFgA8AA/AUBSpS8AR+UwMAAzTwCAWADwAD8BQIugJTZwGo6CAAGwADT6oJwlOCU7pUhAACWRAAAAAEDlPKVIQAAAAEBAZT3AAAAg6NgA8AA/AUAAF0DwAD8ZwFgA8AA/AUBSpT9AR+VAcAAzPcDAWADwAD8BQMuk4CVH8BqOmsABsAA0+uCcJUmlTSVhQAAlkUAAAABA5U9lYUAAAABAQGVQwAAAJb/YQMBYAPAAPwFYAPAAPo/AABdA8AA/GcBYAPAAPwFAUqVXwEflWPAAM2CAgFgA8AA/AUCLoCVgMBqOsYABsAA0+yCcJWKlZiVzgAAli8AAAABA5Wclc4AAAABAQGVoQAAAIOjYAPAAPwFAABdA8AA/GcBYAPAAPwFAUqVpwEflavAAMz3AwFgA8AA/AUDLoCVxsBqOykrAAbAANPtgnCV05XhljIAAJZDAAAAAQOV6pYyAAAAAQEBlfAAAACW/2EDAWADwAD8BWADwAD6PwAAXQPAAPxnAWADwAD8BQFKlgwBH5YQwADNugIBYAPAAPwFAi6Ali3AajuEAAbAANPbgnCWN5ZJlngBAJiIAAAAAQOWUpZ4AAAAAAAAAF0DwAD8ZwFgA8AA/AUBSpZVAR+WWcAAzqgBAWADwAD8BQEuAAbAANPugnCWfZaLlrAAAJxqAAAAAQOWkJawAAAAAAAAAF0DwAD82gJgA8AA/AVgA8AA/AUBSpaWAR+WmsAAzp4BAWADwAD8BQEuAAbAANPvgnCWtZbDl1YAAJ/LAAAAAQOWy5dWAAAAAgECltAAAABqYAPAAPwFAJbcAAAAgoxgA8AA/AUBagBgA8AA/Q55AF0DwAD8ZwFgA8AA/AUBPgI9HpbzwAD7RgMAA4CXA8BqPHeBlwrAajyEFpcULmHAAPzYAEqXIQEflyzAAMz3AwFgA8AA/AUDLoCXR8BqPHeBl07AajyEAAbAANPcgnCXW5dtl5oBAFwAAAABA5d2l5oAAAAAAAAAXQPAAPyiAWADwAD8BQFKl3kBH5d9wADeYAEBYAPAAPwFAS4ABsAA0/CCcJefl6mYBAAAgK0AAAABA5evmAQAAAABAAABl7YAAACFXmADwAD6PwFql8BgA8AA+j93XQPAAPypAWADwAD8BQE+AUqXzQEel9jAAPyvAgFgA8AA/AUBLgGFXoCX98BqPVgGwADT8YJwmAmYEphCAACVGQAAAAEDmBeYQgAAAAAAAABdA8AA/ZwBYAPAAPwFAT4BSpggAR6YK8AAwRkBAWADwAD8BQEuAAbAANPygnCYR5hMmMQAAIP4AAAAAQOYU5jEAAAAAQEBmFkAAACBpmEDAWADwAD8BVwAAFwBPgJOmHOYdwAAl2xgA8AA/AUBFph+LmHAAPzYRZiKAZiTmJUAAGJgA8AA/AUBkwEcmJyCmJrAaj46YwEAAYGYnsBqPh4AwAD9MgGKmKPAaj46HJikgpijwGo+OmQBAAGUAMAA/So+AT0cmLGAmLDAaj4GIAEAARyYti5LAQABgpi3wGo+OgDAAPy4AAAGwADT84JwmMmYzZnOAACWQAAAAAEDmNOZzgAAAAEBAZjYAAAghx1hAwJgA8AA/AVgA8AA/AVgA8AA/AUAAGADwAD8BQE+BU6ZA5kHAACXbGADwAD8BQEWmQ4uYcAA/NhJmRocmSKBmR7Aaj7vSAEAAZMAwAD9KD0wmSgemUPAAM4nAAAAAD9OmViZXgAAgJZgA8AA/AUBHJlkLksBAAGTAMAA/LhFmW0BmXaZeAAAYmADwAD8BQGUARyZf4OZfcBqP1BjAQABgZmBwGo+7wDAAP0yAYuZiMBqP1AcmYaDmYjAaj9QZAEAAZQAwAD9Kj4BPYqZk8BqPy8cmaKAmZvAaj7HIAIAAoKZo8BqPy8cma4uSwEAAYOZr8BqP1AAwAD8uAAASpm+AYKZxcBqPy8GwADT9IJwmdOZ1ZqsAACDWQAAAAEDmdyarAAAAQAAgnZgA8AA/VEBWwICApnfAAAAljxfAwAAAJnvAAAAhx1hAwJfAwAAYAPAAPwFXwMAAAAAXwMAAAE+A06aH5ojAACXbGADwAD8BQEWmiouYcAA/NhFmjYBmj+aQQAAYmADwAD8BQGTARyaSIOaRsBqQExjAQABgppKwGpAMADAAP0yAYuaUcBqQEwcmk+DmlHAakBMZAEAAZQAwAD9Kj4BPYiaXMBqQAIcmnKBmmvAakAOIAIAAoCac8BqQAIcmoUuSwEAAYOahsBqQEwAwAD8uAAASpqVAYCanMBqQAIGwADT9YJwmrGavZr8AACAqwAAAAEDmsOa/AAAAQAAgnZgA8AA/VEBWwEBAZrGAAAAgaZhAwFgA8AA/AVfAwAAAABdA8AA/GcBXwMAAAFKmtkBHprdwADNCwICYAPAAPwFXwMAAAIugJr6wGpA/gAGwADT9oJwmwGbDZtfAACEjwAAAAEDmxabXwAAAQAAgnZgA8AA/VEBWwEBAZsjAAAAgaZhAwFgA8AA/AVdA8AA/GcBXwMAAAAAXQPAAPxnAV8DAAABSps8AR+bQMAAzVACAmADwAD8BV8DAAACLoCbXcBqQW0ABsAA0/eCcJtkm2mcAwAAljYAAAABA5tunAMAAAABAQGbdAAAAIGmYQMBYAPAAPwFYAPAAPo/AABgA8AA+j8BPgNOm46bkgAAl2xgA8AA/AUBFpuZLmHAAPzYRZulAZuum7AAAGJgA8AA/AUBkwEcm7eCm7XAakIVYwEAAYGbucBqQfkAwAD9MgGKm8DAakIVHJu+gpvAwGpCFWQBAAGUAMAA/So+AUmbyyEcm9GAm9DAakHXIAEAARyb1i5LAQABgpvXwGpCFQDAAPy4AABKm9wBKj9Km/QBKQbAANP4gnCcCJwNnKQAAIHUAAAAAQOcEJykAAAAAQEBnBYAAACBpmEDAWADwAD8BWADwAD6PwAAYAPAAPo/AT4DTpwwnDQAAJdsYAPAAPwFARacOy5hwAD82EWcRwGcUJxSAABiYAPAAPwFAZMBHJxZgpxXwGpC7mMBAAGBnFvAakLSAMAA/TIBipxiwGpC7hycYIKcYsBqQu5kAQABlADAAP0qPgFJnG0cnHKAnHHAakKwIAEAARycdy5LAQABgpx4wGpC7gDAAPy4AABKnH0BKT9KnJQBKgbAANP5gnCcqZytncQAAJY6AAAAAQOct53EAAAAAgEBnL0AAACW/2EDAWADwAD8BWADwAD6PwABnNUAACCWO2EDAGADwAD8BQFqAGADwAD9DnlgA8AA/AUBPgROnOqc7gAAl2xgA8AA/AUBFpz1LmHAAPzYRZ0BAZ0KnQwAAGJgA8AA/AUBkwEcnRODnRHAakPgYwEAAYKdFcBqQ8QAwAD9MgGLnRzAakPgHJ0ag50cwGpD4GQBAAGUAMAA/So+Ak6dK50zAACWJmADwAD8BQEcnTkuSwEAAYOdOsBqQ+AAwAD8uEmdRBydTICdSMBqQ4ggAQABhJ1NwGpEKQAASp1XAYSdXsBqRCk/SZ1xIRydfIGddcBqQ6BIAQABKwDAAP1eSp2FARydkoGdjMBqQ6AgAAAAAAA/PTCdmh6dtcAAzicAAAAABsAA0/qCcJ3Jnc2e+gAAlj8AAAABA53WnvoAAAACAQGd3AAAAJb/YQMBYAPAAPwFYAPAAPo/AAGd9AAAIJY7YQMAYAPAAPwFAWoAYAPAAP0OeWADwAD8BQE+BE6eCZ4NAACXbGADwAD8BQEWnhQuYcAA/NhFniABnimeKwAAYmADwAD8BQEcnjGCni3AakUKgY0BAAGUAMAA/SsBHJ44g542wGpFJoFtAQABkwDAAP01AYueQMBqRSYcnj6DnkDAakUmgY0BAAGUAMAA/Ss+Ak6eT55XAACWJmADwAD8BQEcnl0uSwEAAYOeXsBqRSYAwAD8uEmeaByecICebMBqRM4gAQABhJ5xwGpFfwAAPgFKnoUBhJ6MwGpFfz9JnqchHJ6ygZ6rwGpE5kgBAAErAMAA/V5KnrsBHJ7IgZ7CwGpE5iAAAAAAAD89MJ7QHp7rwADOJwAAAAAGwADT+4Jwnv+fA6EBAACWQgAAAAEDnw6hAQAAAAIBAZ8UAAAAlv9hAwFgA8AA/AVgA8AA+j8AAZ8sAAAgljthAwBgA8AA/AUBagBgA8AA/Q55YAPAAPwFAT4HTp9Bn0gAAIF2WwErTp9Zn2cAAMAAcbxgA8AA+j8BKk6feJ98AACXbGADwAD8BQEWn4MuYcAA/NhFn48Bn5ifmgAAYmADwAD8BQGTARyfoYWfn8BqRp1jAQABhJ+jwGpGgQDAAP0yAY2fqsBqRp0cn6iFn6rAakadZAEAAZQAwAD9Kj4CTp+5n8EAAJYmYAPAAPwFARyfxy5LAQABhZ/IwGpGnQDAAPy4SZ/SHJ/agJ/WwGpGJiABAAGGn9vAakbmAAA+A0mf74Of88BqRm4+AT0woA4eoCnAAM4oAAAAAD89iqBGwGpGYoagT8BqRuY9i6BgwGpGbik/SaCIg6CMwGpGbkqgmwEmoJsBgqCiwGpGYmADwAD8BT9JoK4hHKC5gaCywGpGPkgBAAErAMAA/V5KoMIBHKDPgaDJwGpGPiAAAAAAAD89MKDXHqDywADOJwAAAAAGwADT/IJwoQahCqE7AACWOQAAAAEDoROhOwAAAAEBAaEYAAAAJ2ADwAD8BQAAYAPAAPwFAT4BSqElARyhMC5LAQABgKExwGpH1gDAAPy4BsAA0/2CcKFAoUWhnQAAVgAAAAEDoUihnQAAAAEBAaFNAAAggJZgA8AA/AUAAFwBPgE9MKFaH6FkwAD7lwEAASfAAHZQAAbAANP+gnChoqGnogwAAIClAAAAAQOhraIMAAAAAQEBobwAACCAll0DwAD8ZwFgA8AA/AUAAFwBPgE9MKHJH6HTwAD7lwEAASfAAHZQAAbAANP/gnCiEaIWooEAAJ7VAAAAAQOiHKKBAAAAAgICoiEAAAAnYAPAAPwFAKIsAAAggJZgA8AA/AUAAFwBPgE9MKI5H6JDwAD7lwEAASfAAHj0AAbAANQAgnCihqKLowQAAJ/ZAAAAAQOilKMEAAAAAgICopkAAAAnYAPAAPwFAKKuAAAgKV0DwAD8ZwFgA8AA/AUAAFwBPgE9MKK8H6LGwAD7lwEAASfAAHj0AAbAANQBgnCjCaMOo2gAAICuAAAAAQOjEqNoAAAAAQABoxgAAACbIWEDAmADwAD8BWADwAD8BWADwAD8BQFqAGADwAD9DnkAXAE+AT0eozvAAM69AgFgA8AA/AUCLjUAAAABAGEDAmADwAD8BWADwAD8BWADwAD8BQGAo0bAaklnIxyjToEAwGpJpUgBAAErAABqo1xhAwJdA8AA+ksBW10DwAD6SwFbYAPAAPwFwAGD1YEAwGpJpQFhAwJgA8AA/AVgA8AA/AVgA8AA/AUABsAA1AKCcKNto3GkbAAAgLsAAAABA6N4pGwAAAACAQKjfQAAIJYmYAPAAPwFAKOLAAAAamADwAD8BQFqo5NgA8AA/AUJAGADwAD8BQE+A0mjnRyjp4GjocBqSkOBbQEAARajry5hwAD82ADAAP01PgFKo78BHKPGlIHEAAAAAMAA/ChJo9Uco9+Bo9nAakpDYwEAAZMAwAD9Mj4BPYmj7MBqSkOTP0WkAQGkCqQMAABiYAPAAPwFAYGkDsBqSkMBHKQXgqQVwGpKv2MBAAEWpB4uYcAA/NgAwAD9MgGKpCbAakq/HKQngqQmwGpKv2QBAAGUAMAA/So+AUmkMxykPxykOy5LAQABgqQ8wGpKvwDAAPy4SAEAAYCkQsBqSjUAwAD9KEqkSwGCpFLAakq/P0qkXwEcpGaUgcQAAAAAwAD8KAbAANQDgnCkcaR1pY0AAJZgAAAAAQOkgKWNAAAAAgECpIUAACCWJmADwAD8BQCkkwAAAGpgA8AA/AUBaqSbYAPAAP0OeQBgA8AA/AUBPgNJpKgiHKSygaSswGpLhUgBAAErAMAA/SgBHKTDgaS9wGpLhYFtAQABFqTLLmHAAPzYAMAA/TU+AT2JpNvAakuFHKTvFqToLmHAAPzYgY0BAAGUAMAA/StJpP8cpQmBpQPAakuFYwEAAZMAwAD9Mj4BSqUWARylHZSBxAAAAADAAPwoP0WlKwGlNKU2AABiYAPAAPwFAYGlOMBqS4UBHKVBgqU/wGpMLYFtAQABkwDAAP01AYqlR8BqTC0cpUiCpUfAakwtgY0BAAGUAMAA/Ss+AUmlVBylYBylXC5LAQABgqVdwGpMLQDAAPy4SAEAAYClY8BqS3cAwAD9KEqlbAGCpXPAakwtP0qlgAEcpYeUgcQAAAAAwAD8KAbAANQEgnClkqWWpfEAAIYXAAAAAQOloKXxAAAAAAAAAGADwAD8BQE+AT0wpakfpbPAAPuXAQABJ8AAdlEABsAA1AWCcKX2pfqmXAAAn9gAAAABA6YCplwAAAABAQGmBwAAACdgA8AA/AUAAGADwAD8BQE+AT0wphQfph7AAPuXAQABJ8AAdlEABsAA1AaCcKZhpmam2AAAlv4AAAABA6ZxptgAAAABAQGmdwAAAJb/YQMBYAPAAPwFYAPAAPo/AABcAT4BPTCmkB+mmsAA+5cBAAEnwAB2UQAGwADUB4Jwpt2m4qdUAACXAQAAAAEDpu2nVAAAAAEBAabzAAAAlv9hAwFgA8AA/AVgA8AA+j8AAFwBPgE9MKcMH6cWwAD7lwEAASfAAHZRAAbAANPdgnCnWadhp7sBAIMZAAAAAQOnZ6e7AAAAAAAAAGADwAD8BQE+AkmnbRyneBancS5hwAD82ICXAQABkwDAAP00Sqd9ARyniC5LAQABkwDAAPy4Pz0wp5Eep6zAAM4nAAAAAAbAANPegnCnwKfIqCoBAIHoAAAAAQOnzagqAAAAAAAAAGADwAD8BQE+Akmn0xyn3han1y5hwAD82ICXAQABkwDAAP00SqfjARyn7i5LAQABHKf2FqfvLmHAAPzYgY0BAAGUAMAA/SsAwAD8uD89MKgAHqgbwADOJwAAAAAGwADT34JwqC+oN6jOAQCAwwAAAAEDqD6ozgAAAAAAAABgA8AA/AUBPgNJqEQcqE8WqEguYcAA/NhIAQABlADAAP0oSqhVARyoYC5LAQABkwDAAPy4P0moaRyodBaobS5hwAD82EgBAAGTAMAA/Sg9MKh6HqiVwADOJwAAAAA/PTCoph6owcAAzigAAAAABsAA1AiCcKjTqNipUwAAn9sAAAABA6jeqVMAAAACAgKo4wAAACdgA8AA/AUAqPgAACCDzF0DwAD8ZwFgA8AA/AUAAFwBPgJOqQ6pEgABgoxgA8AA/AUBHKkkFqkdgakUwGpPhWHAAPyKZAEAAYCpJsBqT3gAwAD9Kj0cqTEug14DAAOAqTrAak94gqlBwGpPoIGpRsBqT4UAwAD8zgbAANQJgnCpWKldqhIAAJuxAAAAAQOpZqoSAAAAAwIDqWsAAABqYAPAAPwFAKl2AAAAgoxgA8AA/AUAqYAAACDAAEM9YAPAAPwFAWoAYAPAAP0OeQBcAT4CPR6pncAA+0YDAAOAqa3AalAVgam0wGpQIhapvi5hwAD82ABFqcsBqdSp1gAAYmADwAD8BQGAqdjAalAVARyp4YOp38BqUHVjAQABganjwGpQIgDAAP0yAYup6sBqUHUcqeiDqerAalB1ZAEAAZQAwAD9Kj4BPRyp+S6AvwIAAoOp+sBqUHWCqf/AalAwAMAA/LkAAGox3gBqMggAajIwAGoyWABqMqUAajMGAGozWQBqM84AajRZAGo1awBqNqsAajfFAGo4lwBqOegAajpLAGo6pgBqOwkAajtkAGo7xwBqPAwAajxXAGo88wBqPTcAaj2fAGo95gBqPqcAaj/WAGpA0gBqQUEAakG3AGpCkABqQ2gAakSuAGpGBgBqR7YAakgFAGpISwBqSJkAakjtAGpJRwBqShUAaktXAGpMvwBqTP0Aak1IAGpNmABqTegAak5OAGpOygBqT1gAak/1AGpQ4AAAADMCwADUDYJwqheqHbRvR8AAePUAAQAAwAB49l0DwAD8qQFgA8AA/AUBXQPAAPypAWADwAD8BQFgAcAA09YAAV0BwAD8qQFgA8AA/AUAAAMGwADUEIJwqn2qiaqgAALAAHj3wADTqwAAAAEDqpSqoAAAAAEBAaqZAAAAYWADwAD8BQAAXwMAAAAGwADUEYJwqqWqqrNvAACDXgAAAAEDqrKzbwAAAAQDBKq3AAAAamADwAD8BQCqwgAAAIKMYAPAAPwFAKrVAAAgli5dA8AA/GcBYAPAAPwFAKrgAAAAn85gA8AA/AUBaqrsYAPAAPwFCQBcAT4LSasLIiIcqxGTgJcBAAGAqxPAalJcAMAA/TQBHKsigKscwGpSXICXAQABgaskwGpSaQDAAP00ARyrL4GrK8BqUmmAlwEAARarMS5hwAD82ADAAP00PgI9HqtMwAD7RgMAA4CrXMBqUlyBq2PAalJpFqtoLmHAAPzYAEAqq5CrlQA/SauiHKuwg6umwGpSjGMBAAGTAMAA/TI+AT0wq70fq87AAPtPBAAEg6vUwGpSjJMrJ5/OAD9OrAesDQABgO5gA8AA/AUBHKwTgawPwGpSaYGNAQABgKwVwGpSXADAAP0rSawgHKw+HKwxFqwqgqwlwGpSd2HAAPyKgY0BAAGDrDPAalKMAMAA/StjAQABhKxAwGpTYADAAP0yPgE9MKxPHqxqwADOKQAAAAA/Sax/HKyJhKyDwGpTYEgBAAGTAMAA/ShKrI8AP0msnCWspYKsoMBqUndgA8AA08E+Ak6tLK08AAHAAHj4YAPAANPBASatQwCCrT7AalJ3YAPAANPBSa1cHK14Fq1lLsAAbsbAANPYSAEAARati4Wte8BqVAfAAG7GwADTxADAAP0oPgFJrakiHK20hK2uwGpTYGMBAAE3CgDAAP0yACEcrdUWrc6Frb7AalQHgovAANPGSAEAARat3S6Ci8AA09oAwADVEj4CPR6t+MAAyx0FAAUmrgIAgq39wGpSd10DwAD8qQFgA8AA/AWDrhDAalKMLoCuIcBqUlyErijAalNgAEquOgBJrlEcrmcWrmEWrlougovAANPattzAANOrwADVCsAAbsXAANOrBgAGHK6ZHK6EgK5+wGpSXIOIAQABFq6GLsAAbsbAANPYAMAA/SxkAQABFq6gLqmRwADT2QDAAP0qHK7BhK67wGpTYIOIAQABFq7DLsAAbsbAANPYAMAA/SwWrvoWrvOFruPAalQHgovAANPGttzAANOrwADVChyvLByvF4OvDcBqUoyDiAEAARavGS7AAG7GwADT2ADAAP0sZAEAARavPoWvLsBqVAepkcAA08UAwAD9Kh6vYcAAyyoBAAEuAB6vgsAAyyoBAAGCr4jAalJ3AADAANPRPgFKr5wAP0mvuxyv1havz4Wvv8BqVAeCi8AA08ZIAQABFq/eLoKLwADT2gDAANUSPgVOsLSwvwABwAB4+V0DwAD8qQFgA8AA/AUBJrDGAIKwwcBqUnddA8AA/KkBYAPAAPwFTrDisO0AAcAAePpfAwAAARyw7y7AAHj3wADTqwEAAYSw+8BqU2AAwADUEEWxCwGxFLEWAABiYAPAAPwFAZMBHLEdFLEbwGpWZQgAYwEAAYSxH8BqU2AAwAD9MgEVsSbAalZlCByxJxSxJsBqVmUIAGQBAAGUAMAA/So+AT0csUGHsTfAalY3gL8CAAIUsULAalZlCAAcsVGGsUfAalYGSwEAARyxXIOxUsBqUoxkAQABFLFewGpWZQgAAMAA/SoAwAD8uADAAPy5RbF0AbF9sX8AAGJgA8AA/AUBgLGBwGpSXAEcsYoUsYjAalcDCABjAQABgbGMwGpSaQDAAP0yARWxkcBqVwMIHLGSFLGRwGpXAwgAZAEAAZQAwAD9Kj4BPRyxpi6AvwIAAhSxp8BqVwMIAByxtoexrMBqVjdLAQABHLG5FLG3wGpXAwgAgY0BAAGAsbvAalJcAMAA/SsAwAD8uADAAPy5SrHVAD8/TrH1AAAAn89dA8AA/KkBWwBOsggAAACf0GADwAD8BQBJshglsiGCshzAalJ3XQPAAPypAWADwAD8BT4CPY2yN8BqV6UUskPAalJ3AgFdA8AA/KkBYAPAAPwFPY6yT8BqV7aDslzAalKMPgI9jbJ6wGpXpRyymxyyi4KyhsBqUneWLwEAAYOykMBqUowAwAD8gYCtAQAAAYVeKsAA/H09jrK6wGpXtpNJstQcsuscsuOGstjAale2ZAEAAYSy5cBqU2AAwAD9KoCXAQABFrL3hbLtwGpXpWHAAPzYAMAA/TQ+AT0wswcesyLAAM4pAAAAAD89HrM8wADLHQUABYWzQcBqV6WGs0zAale2LoCzXsBqUlyEs2XAalNgAAbAANQSgnCzdLOAtG0AAIFYAAAAAQOzh7RtAAAAAgECs4wAAABqYAPAAPwFALOYAAAAgoxgA8AA/AUBagBgA8AA/Q55AF8DAAABPgU9ibOkwGpY7B6ztcAA+0YDAAOAs8XAaljfgbPMwGpY7Baz1i5hwAD82ABOs+ez7gAAYWADwAD8BQEcs/SBs/DAaljsgY0BAAGAs/bAaljfAMAA/StOtA20FAAAgXZfAwAAARy0Fi7AAHj3wADTqwEAAYK0IsBqWTYAwADUED0ctDaDtC/Aallgg14EAASTgrRCwGpZNi6AtFDAaljfAMAA/M5KtFwBg7RjwGpZYAAAalIDAGpSPABqWL8Aalm4AAAAAwLAANQTgnC0crR4wABRfEfAAHj7AAABYAHAAP1RAAFdAcAA/KkBYAPAAPq3AAAzBsAA1BWCcLSltK20vwECwABuxgAAAAEDtL+0vwAAAAAAAABgA8AA/AUABsAA1BaCcLTDtMu02AECqZEAAAABA7TYtNgAAAAAAAAAYAPAAPwFAAbAANQXgnC03LTstPIBAoKLAAAAAQO08rTyAAAAAAAAAGADwADVBwAGwADUHoJwtPe1A7UzAACWRgAAAAEDtQ+1MwAAAQAAgnZgA8AA/VEBWwAAAABdA8AA/GcBXwMAAAFKtRUBH7UZwADOGgEBXwMAAAEuAAbAANQfgnC1OLVJta8AAJY9AAAAAQO1U7WvAAAAAQEBtWUAACCD1l0DwAD8ZwFgA8AA+rcAAF0DwAD8ZwFgA8AA+rcBSrV1AR61ecAAzfICAWADwAD6twIugLWpwGpa4wAGwADUIIJwtbS1vLXnAACWOAAAAAEDtcO15wAAAQAAlvlgA8AA/VEBWwAAAABdA8AA/KkBXwMAAAFKtckBHrXOwAD8tAECYAPAAPq3XwMAAAEuAAbAANRIgnC167X0tmACAIMZAAAAAQO1+bZgAAAAAQEBtgEAACCAlmADwAD6twAAXAE+Akm2Dhy2Hha2Fy5hwAD82EgBAAGTAMAA/Sg9MLYkH7YuwAD7WwIAApMuAD89HLZRLoC/AgACk4C2V8BqW5cAwAD8uQbAANRJgnC2ZbZutucCAIHoAAAAAQO2crbnAAAAAQEBtnoAACCAlmADwAD6twAAXAE+Akm2hxy2lxa2kC5hwAD82EgBAAGTAMAA/Sg9MLadH7anwAD7WwIAApMuAD89HLbKLoC/AgACHLbXFrbQLmHAAPzYgY0BAAGUAMAA/SuAtt7AalwMAMAA/LkGwADUIYJwtuy28LesAACf1gAAAAEDtvq3rAAAAAIBArcAAAAAlv9hAwFgA8AA+rdgA8AA+j8AtxsAAABqYAPAAPwFAWq3I2ADwAD8BQkAYAPAAPwFAT4DSbctHLc3gbcxwGpcrmMBAAGTAMAA/TI9ibc8wGpcrpM/RbdLAbdUt1YAAGJgA8AA/AUBgbdYwGpcrgEct2GCt1/Aalz0YwEAARa3Yy5hwAD82ADAAP0yAYq3a8BqXPQct2yCt2vAalz0ZAEAAZQAwAD9Kj4BSbd4HLeAgLd8wGpclyABAAEct4UuSwEAAYK3hsBqXPQAwAD8uAAASreLAYK3ksBqXPQ/SrefARy3ppSBxAAAAADAAPwoBsAA1CKCcLext7W4lwAAn9cAAAABA7fDuJcAAAACAQK3yQAAAJb/YQMBYAPAAPq3YAPAAPo/ALfkAAAAamADwAD8BQFqAGADwAD9DnkAYAPAAPwFAT4DSbfyIhy3/IG39sBqXcBIAQABKwDAAP0oARy4DYG4B8BqXcCBbQEAARa4FS5hwAD82ADAAP01PYm4HcBqXcAcuDEWuCouYcAA/NiBjQEAAZQAwAD9Kz9FuDoBuEO4RQAAYmADwAD8BQGBuEfAal3AARy4UIK4TsBqXjqBbQEAAZMAwAD9NQGKuFbAal46HLhXgrhWwGpeOoGNAQABlADAAP0rPgFJuGMcuGuAuGfAal2pIAEAARy4cC5LAQABgrhxwGpeOgDAAPy4AABKuHYBgrh9wGpeOj9KuIoBHLiRlIHEAAAAAMAA/CgGwADUI4JwuJy4srmLAwBkAAAAAQO4s7mLAAAAAQEBuMEAACCD1l0DwAD8qQFgA8AA+rcAAF0DwAD8qQFgA8AA+rcBPgJOuNK43gAAg1hgA8AA/AUBHLjsFrjlLmHAAPzYZAEAARa49IC47sBqXuhhwAD82ADAAP0qSrkAATW5DwAAAQBdA8AA/KkBYAPAAPq3ATG5D2ADwAD6twA1AAAAAQBbARe5GoK5GMBqX0dhgbkjwGpfD8AA/NY1AAAAAQBbARy5N4K5NcBqX0eDXgMAA5MWuUguYcAA/NguAMAA/M41AAAAAQBbARy5XoK5XMBqX0eDXgMAAxa5bC5hwAD82IG5dMBqXw+AuYHAal7oAMAA/M6CAMBqX0cGwADUJIJwuZC5lbo0AACDFwAAAAEDuZ26NAAAAAEBAbmlAAAAliZgA8AA/VEAAGADwAD6PwE+A065uLm8AACXbGADwAD8BQEWucMuYcAA/NhFuc8Budi52gAAYmADwAD8BQGTARy54YK538BqYDhjAQABgbnjwGpgHADAAP0yAYq56sBqYDgcueiCuerAamA4ZAEAAZQAwAD9Kj4BSbn1HLoBHLn9LksBAAGCuf7AamA4AMAA/LhIAQABgLoEwGpgAwDAAP0oSroNASk/SrokASoGwADUJYJwujm6PrsnAACfxQAAAAEDukW7JwAAAAEAAbpOAAAAn8ZgA8AA0G0BagBgA8AA/Q55AFwBPgM9Ixy6ZIC6XcBqYNVIAQABKwDAAP1eiLpdwGpg1R66bMAA0G8AAAAAKwFgA8AA0G1Oun66gAAAYmADwAD8BQEWuocuYcAA/NhDupMcupyBuprAamEigJcBAAGUAMAA/TQ+BU66rbqxAACfx2ADwAD8BQEcurqAurPAamDVn8gBAAGBusLAamEiAMAA0HI9ibrMwGphIhy6zoG6zMBqYSKBjQEAAZQAwAD9K0663rriAACfyWADwAD6twEcuuguSwEAAYG66cBqYSIAwAD8uD0cuvcugL8CAAKBuvjAamEiHLsBLksBAAGCuwLAamFUAMAA/LgAwAD8uT0cuxIugL8CAAKCuxPAamFUg7sawGphnADAAPy5BsAA1CaCcLssuz27hgAAgaUAAAABA7tCu4YAAAABAQG7SAAAAIGmYQMBYAPAAPq3YAPAAPo/AABdA8AA/GcBYAPAAPq3AUq7ZAEfu2jAAM08AgFgA8AA+rcCLoC7hMBqYiYABsAA1CeCcLuLu5y70gAAlkQAAAABA7ugu9IAAAABAQG7pQAAAIOjYAPAAPwFAABdA8AA/GcBYAPAAPq3AUq7qwEfu6/AAMz3AwFgA8AA+rcDLpOAu9DAamKJAAbAANQognC717vovD8AAJZFAAAAAQO78bw/AAAAAQEBu/cAAACW/2EDAWADwAD6t2ADwAD6PwAAXQPAAPxnAWADwAD6twFKvBYBH7wawADNggIBYAPAAPq3Ai6AvDrAamLkAAbAANQpgnC8RLxVvI4AAJYvAAAAAQO8WbyOAAAAAQEBvF4AAACDo2ADwAD8BQAAXQPAAPxnAWADwAD6twFKvGQBH7xowADM9wMBYAPAAPq3Ay6AvIbAamNHKwAGwADUKoJwvJO8pLz7AACWQwAAAAEDvK28+wAAAAEBAbyzAAAAlv9hAwFgA8AA+rdgA8AA+j8AAF0DwAD8ZwFgA8AA+rcBSrzSAR+81sAAzboCAWADwAD6twIugLz2wGpjogAGwADUGIJwvQC9Fb1HAQCYiAAAAAEDvR69RwAAAAAAAABdA8AA/GcBYAPAAPq3AUq9IQEfvSXAAM6oAQFgA8AA+rcBLgAGwADUK4JwvUy9Xb2FAACcagAAAAEDvWK9hQAAAAAAAABdA8AA/NoCYAPAAPwFYAPAAPq3AUq9aAEfvWzAAM6eAQFgA8AA+rcBLgAGwADULIJwvYq9m74xAACfywAAAAEDvaO+MQAAAAIBAr2oAAAAamADwAD8BQC9tAAAAIKMYAPAAPwFAWoAYAPAAP0OeQBdA8AA/GcBYAPAAPq3AT4CPR69y8AA+0YDAAOAvdvAamSVgb3iwGpkoha97C5hwAD82ABKvfkBH74EwADM9wMBYAPAAPq3Ay6AviLAamSVgb4pwGpkogAGwADUGYJwvja+S757AQBcAAAAAQO+VL57AAAAAAAAAF0DwAD8ogFgA8AA+rcBSr5XAR++W8AA3mABAWADwAD6twEuAAbAANQtgnC+gL6NvusAAICtAAAAAQO+k77rAAAAAQAAAb6aAAAAhV5gA8AA+j8Bar6kYAPAAPo/d10DwAD8qQFgA8AA+rcBPgFKvrEBHr68wAD8rwIBYAPAAPq3AS4BhV6Avt7AamV2BsAA1C6CcL7wvvy/LwAAlRkAAAABA78Bvy8AAAAAAAAAXQPAAP2cAWADwAD6twE+AUq/CgEevxXAAMEZAQFgA8AA+rcBLgAGwADUL4JwvzS/Ob+0AACD+AAAAAEDv0C/tAAAAAEBAb9GAAAAgaZhAwFgA8AA+rdcAABcAT4CTr9jv2cAAJdsYAPAAPwFARa/bi5hwAD82EW/egG/g7+FAABiYAPAAPwFAZMBHL+Mgr+KwGpmWGMBAAGBv47AamY8AMAA/TIBir+TwGpmWBy/lIK/k8BqZlhkAQABlADAAP0qPgE9HL+hgL+gwGpmJCABAAEcv6YuSwEAAYK/p8BqZlgAwAD8uAAABsAA1DCCcL+5v8DAAEDKAACWQAAAAAEDv8bAAEDKAAAAAQEBv84AACCHHWEDAmADwAD6t2ADwAD6t2ADwAD6twAAYAPAAPq3AT4FTr//wABAAwAAl2xgA8AA/AUBFsAAQAouYcAA/NhJwABAFhzAAEAegcAAQBrAamcRSAEAAZMAwAD9KD0wwABAJB7AAEA/wADOJwAAAAA/TsAAQFTAAEBaAACAlmADwAD6twEcwABAYC5LAQABkwDAAPy4RcAAQGkBwABAcsAAQHQAAGJgA8AA/AUBlAEcwABAe4PAAEB5wGpniGMBAAGBwABAfcBqZxEAwAD9MgGLwABAhMBqZ4gcwABAgoPAAECEwGpniGQBAAGUAMAA/So+AT2KwABAj8BqZ18cwABAnoDAAECXwGpm6SACAAKCwABAn8BqZ18cwABAqi5LAQABg8AAQKvAameIAMAA/LgAAErAAEC6AYLAAEDBwGpnXwbAANQxgnDAAEDPwABA0cAAQasAAINZAAAAAQPAAEDYwABBqwAAAQAAgnZgA8AA/VEBWwICAsAAQNsAAACWPF8DAAAAwABA6wAAAIcdYQMCXwMAAGADwAD6t18DAAAAAF8DAAABPgNOwABBHsAAQSIAAJdsYAPAAPwFARbAAEEpLmHAAPzYRcAAQTUBwABBPsAAQUAAAGJgA8AA/AUBkwEcwABBR4PAAEFFwGpoumMBAAGCwABBScBqaJYAwAD9MgGLwABBUMBqaLocwABBToPAAEFQwGpoumQBAAGUAMAA/So+AT2IwABBW8BqaGQcwABBcYHAAEFqwGpociACAAKAwABBcsBqaGQcwABBhC5LAQABg8AAQYXAami6AMAA/LgAAErAAEGUAYDAAEGbwGpoZAbAANQygnDAAEGwwABBvMAAQgcAAICrAAAAAQPAAEHCwABCBwAAAQAAgnZgA8AA/VEBWwEBAcAAQcUAAACBpmEDAWADwAD6t18DAAAAAF0DwAD8ZwFfAwAAAUrAAEHhAR7AAEHlwADNCwICYAPAAPq3XwMAAAIugMAAQgXAammWAAbAANQzgnDAAEIMwABCGMAAQnAAAISPAAAAAQPAAEIhwABCcAAAAQAAgnZgA8AA/VEBWwEBAcAAQi4AAACBpmEDAWADwAD6t10DwAD8ZwFfAwAAAABdA8AA/GcBXwMAAAFKwABCSgEfwABCTsAAzVACAmADwAD6t18DAAACLoDAAEJuwGpqFwAGwADUNIJwwABCdcAAQnrAAEMXAACWNgAAAAEDwABCf8AAQxcAAAABAQHAAEKFAAAAgaZhAwFgA8AA+rdgA8AA+j8AAGADwAD6PwE+A07AAEKiwABCpgAAl2xgA8AA/AUBFsAAQq0uYcAA/NhFwABCuQHAAELCwABCxAAAYmADwAD8BQGTARzAAELLgsAAQsnAamrbYwEAAYHAAELNwGpqtwDAAP0yAYrAAELUwGpq2xzAAELSgsAAQtTAamrbZAEAAZQAwAD9Kj4BScAAQt8hHMAAQuWAwABC5MBqapMgAQABHMAAQuouSwEAAYLAAELrwGpq2wDAAPy4AABKwABC8AEqP0rAAEMIASkGwADUNYJwwABDHMAAQyHAAEO7AACB1AAAAAEDwABDJMAAQ7sAAAABAQHAAEMqAAAAgaZhAwFgA8AA+rdgA8AA+j8AAGADwAD6PwE+A07AAENHwABDSwAAl2xgA8AA/AUBFsAAQ1IuYcAA/NhFwABDXgHAAENnwABDaQAAYmADwAD8BQGTARzAAENwgsAAQ27AamvmYwEAAYHAAENywGprwgDAAP0yAYrAAEN5wGpr5hzAAEN3gsAAQ3nAamvmZAEAAZQAwAD9Kj4BScAAQ4QcwABDiYDAAEOIwGprniABAAEcwABDji5LAQABgsAAQ4/AamvmAMAA/LgAAErAAEOUASk/SsAAQ6sBKgbAANQ2gnDAAEPAwABDx8AAROQAAJY6AAAAAQPAAEPRwABE5AAAAAIBAcAAQ9cAAACW/2EDAWADwAD6t2ADwAD6PwABwABD9QAAIJY7YQMAYAPAAPq3AWoAYAPAAP0OeWADwAD6twE+BE7AAEQKwABEDgAAl2xgA8AA/AUBFsAARBUuYcAA/NhFwABEIQHAAEQqwABELAAAYmADwAD8BQGTARzAAEQzg8AARDHAam0MYwEAAYLAAEQ1wGps6ADAAP0yAYvAAEQ8wGptDBzAAEQ6g8AARDzAam0MZAEAAZQAwAD9Kj4CTsAAREvAAERTAACWJmADwAD6twEcwABEWS5LAQABg8AARFrAam0MAMAA/LhJwABEZBzAAERsgMAARGjAamyoIAEAAYTAAERtwGptZQAASsAARHcBhMAARH7Aam1lP0nAAESRIRzAAEScgcAARJXAamzCSAEAASsAwAD9XkrAAESlARzAAESygcAARKzAamzCIAAAAAAAPz0wwABEuh7AAETVwADOJwAAAAAGwADUN4JwwABE6cAARPDAAEYjAACWPwAAAAEDwABE+cAARiMAAAACAQHAAET/AAAAlv9hAwFgA8AA+rdgA8AA+j8AAcAARR0AACCWO2EDAGADwAD6twFqAGADwAD9DnlgA8AA+rcBPgROwABFMsAARTYAAJdsYAPAAPwFARbAAEU9LmHAAPzYRcAARUkBwABFUsAARVQAAGJgA8AA/AUBHMAARVqCwABFVsBqbniBjQEAAZQAwAD9KwEcwABFYYPAAEVfwGpunIFtAQABkwDAAP01AYvAAEVpwGpunBzAAEVng8AARWnAam6cgY0BAAGUAMAA/Ss+Ak7AAEV4wABFgAAAliZgA8AA+rcBHMAARYYuSwEAAYPAAEWHwGpunADAAPy4ScAARZEcwABFmYDAAEWVwGpuOCABAAGEwABFmsBqbwcAAD4BSsAARa4BhMAARbXAam8HP0nAAEXQIRzAAEXbgcAARdTAam5SSAEAASsAwAD9XkrAAEXkARzAAEXxgcAARevAam5SIAAAAAAAPz0wwABF+R7AAEYUwADOJwAAAAAGwADUOIJwwABGKMAARi/AAEgzAACWQgAAAAEDwABGOsAASDMAAAACAQHAAEZAAAAAlv9hAwFgA8AA+rdgA8AA+j8AAcAARl4AACCWO2EDAGADwAD6twFqAGADwAD9DnlgA8AA+rcBPgdOwABGc8AARnoAAIF2WwErTsAARovAAEaZAADAAHG8YAPAAPo/ASpOwABGqsAARq4AAJdsYAPAAPwFARbAAEa1LmHAAPzYRcAARsEBwABGysAARswAAGJgA8AA/AUBkwEcwABG04XAAEbRwGpwZ2MBAAGEwABG1cBqcEMAwAD9MgGNwABG3MBqcGccwABG2oXAAEbcwGpwZ2QBAAGUAMAA/So+Ak7AAEbrwABG8wAAliZgA8AA+rcBHMAARvkuSwEAAYXAAEb6wGpwZwDAAPy4ScAARwQcwABHDIDAAEcIwGpv3CABAAGGwABHDcBqcMAAAD4DScAARyGDwABHJcBqcCw+AT0wwABHQB7AAEdbwADOKAAAAAA/PYrAAEd4wGpwHIbAAEeBwGpwwD2LwABHksBqcCwpP0nAAEe6g8AAR77AanAsSsAAR80BJsAAR80BgsAAR9TAanAcYAPAAPq3P0nAAEfgIRzAAEfrgcAAR+TAam/2SAEAASsAwAD9XkrAAEf0ARzAAEgBgcAAR/vAam/2IAAAAAAAPz0wwABICR7AAEgkwADOJwAAAAAGwADUOYJwwABIOMAASD/AAEhwAACWOQAAAAEDwABISMAASHAAAAABAQHAAEhNAAAAJ2ADwAD8BQAAYAPAAPq3AT4BSsAASFoBHMAASGUuSwEAAYDAAEhmwGpx8gDAAPy4BsAA1DqCcMAASHXAAEh6wABI1QAAVgAAAAEDwABIfcAASNUAAAABAQHAAEiFAAAggJZgA8AA+rcAAFwBPgE9MMAASJIfwABInMAA+5cBAAEnwAB2UAAGwADUO4JwwABI2sAASN/AAElHAACApQAAAAEDwABI5cAASUcAAAABAQHAAEj3AAAggJZdA8AA/GcBYAPAAPq3AABcAT4BPTDAAEkEH8AASQ7AAPuXAQABJ8AAdlAABsAA1DyCcMAASUzAAElRwABJvwAAntUAAAABA8AASVfAAEm/AAAAAgICwABJXAAAACdgA8AA/AUAwABJagAAIICWYAPAAPq3AABcAT4BPTDAAEl3H8AASYHAAPuXAQABJ8AAePQABsAA1D2CcMAAScTAAEnJwABKRQAAn9kAAAABA8AASdLAAEpFAAAAAgICwABJ1wAAACdgA8AA/AUAwABJ7wAAICldA8AA/GcBYAPAAPq3AABcAT4BPTDAAEn9H8AASgfAAPuXAQABJ8AAePQABsAA1D6CcMAASkrAAEpPwABKrwAAgK4AAAABA8AASlPAAEqvAAAAAQABwABKWQAAAJshYQMCYAPAAPq3YAPAAPq3YAPAAPwFAWoAYAPAAP0OeQBcAT4BPR7AAEqCwADOvQIBYAPAAPq3Ai41AAAAAQBhAwJgA8AA+rdgA8AA+rdgA8AA/AUBgMAASo3AanPZIxzAAEqVgQDAanQbSAEAASsAAGrAAEqjYQMCXQPAAPpLAVtdA8AA+ksBW2ADwAD8BcABg9WBAMBqdBsBYQMCYAPAAPq3YAPAAPq3YAPAAPwFAAbAANQ/gnDAAEq0wABKuMAAS7YAAIC7AAAAAQPAAEq/wABLtgAAAAIBAsAASscAACCWJmADwAD6twDAAErVAAAAamADwAD8BQFqwABK3WADwAD8BQkAYAPAAPwFAT4DScAASuccwABK8YHAAErrwGp0y4FtAQABFsAASvkuYcAA/NgAwAD9NT4BSsAASwkBHMAASxCUgcQAAAAAwAD8KEnAAEsfHMAASymBwABLI8BqdMtjAQABkwDAAP0yPgE9icAASzbAanTLkz9FwABLSwHAAEtUwABLVgAAYmADwAD8BQGBwABLWMBqdMsBHMAAS2GCwABLX8BqdWFjAQABFsAAS2guYcAA/NgAwAD9MgGKwABLcMBqdWEcwABLcYLAAEtwwGp1YWQBAAGUAMAA/So+AUnAAEt9HMAAS4kcwABLhS5LAQABgsAAS4bAanVhAMAA/LhIAQABgMAAS4zAanS7AMAA/ShKwABLlQGCwABLnMBqdWE/SsAAS6kBHMAAS7CUgcQAAAAAwAD8KAbAANRAgnDAAEu7wABLv8AATNoAAJZgAAAAAQPAAEvKwABM2gAAAAIBAsAAS9IAACCWJmADwAD6twDAAEvgAAAAamADwAD8BQFqwABL6GADwAD9DnkAYAPAAPwFAT4DScAAS/UiHMAAS/+BwABL+cBqdldIAQABKwDAAP0oARzAAEwQgcAATArAanZXgW0BAAEWwABMGC5hwAD82ADAAP01PgE9icAATCjAanZXHMAATDwWwABMNS5hwAD82IGNAQABlADAAP0rScAATEwcwABMVoHAAExQwGp2V2MBAAGTAMAA/TI+AUrAAExjARzAAExqlIHEAAAAAMAA/Cg/RcAATHgBwABMgcAATIMAAGJgA8AA/AUBgcAATIXAanZXARzAAEyOgsAATIzAanchgW0BAAGTAMAA/TUBisAATJTAanchHMAATJWCwABMlMBqdyGBjQEAAZQAwAD9Kz4BScAATKEcwABMrRzAAEypLksBAAGCwABMqsBqdyEAwAD8uEgBAAGAwABMsMBqdkcAwAD9KErAAEy5AYLAAEzAwGp3IT9KwABMzQEcwABM1JSBxAAAAADAAPwoBsAA1EGCcMAATN/AAEzmwABNQQAAhhcAAAABA8AATPDAAE1BAAAAAAAAAGADwAD6twE+AT0wwABM+R/AAE0DwAD7lwEAASfAAHZRAAbAANRCgnDAAE1GwABNTcAATa8AAJ/YAAAAAQPAAE1VwABNrwAAAAEBAcAATVoAAAAnYAPAAPwFAABgA8AA+rcBPgE9MMAATWcfwABNccAA+5cBAAEnwAB2UQAGwADUQ4JwwABNtMAATbnAAE4uAACW/gAAAAEDwABNxMAATi4AAAABAQHAAE3KAAAAlv9hAwFgA8AA+rdgA8AA+j8AAFwBPgE9MMAATeYfwABN8MAA+5cBAAEnwAB2UQAGwADURIJwwABOM8AATjjAAE6tAACXAQAAAAEDwABOQ8AATq0AAAABAQHAAE5JAAAAlv9hAwFgA8AA+rdgA8AA+j8AAFwBPgE9MMAATmUfwABOb8AA+5cBAAEnwAB2UQAGwADUGoJwwABOssAATr3AAE8XAQCDGQAAAAEDwABOw8AATxcAAAAAAAAAYAPAAPq3AT4CScAATskcwABO1BbAAE7NLmHAAPzYgJcBAAGTAMAA/TRKwABO2QEcwABO5C5LAQABkwDAAPy4Pz0wwABO7R7AAE8IwADOJwAAAAAGwADUG4JwwABPHMAATyfAAE+JAQCB6AAAAAEDwABPLMAAT4kAAAAAAAAAYAPAAPq3AT4CScAATzIcwABPPRbAAE82LmHAAPzYgJcBAAGTAMAA/TRKwABPQgEcwABPTS5LAQABHMAAT1UWwABPTi5hwAD82IGNAQABlADAAP0rAMAA/Lg/PTDAAE9fHsAAT3rAAM4nAAAAAAbAANQcgnDAAE+OwABPmcAAUDABAIDDAAAAAQPAAE+gwABQMAAAAAAAAABgA8AA+rcBPgNJwABPphzAAE+xFsAAT6ouYcAA/NhIAQABlADAAP0oSsAAT7cBHMAAT8IuSwEAAZMAwAD8uD9JwABPyxzAAE/WFsAAT88uYcAA/NhIAQABkwDAAP0oPTDAAE/cHsAAT/fAAM4nAAAAAD89MMAAUAgewABQI8AAzigAAAAABsAA1EWCcMAAUDXAAFA6wABQuAAAn9sAAAABA8AAUEDAAFC4AAAAAgICwABQRQAAACdgA8AA/AUAwABQXQAAIIPMXQPAAPxnAWADwAD6twAAXAE+Ak7AAFBzwABQdwABgoxgA8AA/AUBHMAAUIkWwABQgoHAAFB5wGp7O2HAAPyKZAEAAYDAAFCLwGp7LADAAP0qPRzAAFCWLoNeAwADgMAAUJ/AanssgsAAUKbAantYgcAAUKvAans7AMAA/M4GwADURoJwwABQvcAAUMLAAFF6AACbsQAAAAEDwABQy8AAUXoAAAADAgPAAFDQAAAAamADwAD8BQDAAFDbAAAAgoxgA8AA/AUAwABQ6AAAIMAAQz1gA8AA+rcBagBgA8AA/Q55AFwBPgI9HsAAUQXAAPtGAwADgMAAURXAanvrgcAAURzAanv6FsAAUSYuYcAA/NgARcAAUTMBwABRPMAAUT4AAGJgA8AA/AUBgMAAUUDAanvrARzAAFFJg8AAUUfAanxbYwEAAYHAAFFLwGp7+gDAAP0yAYvAAFFSwGp8WxzAAFFQg8AAUVLAanxbZAEAAZQAwAD9Kj4BPRzAAFFhLoC/AgACg8AAUWLAanxbgsAAUWfAanwKAMAA/LkAAGpZ/ABqWiYAalpOAGpadgBqWsMAalskAGpbdwBqW+wAalx3AGpdiQBqXskAal/jAGpgtQBqYgYAamJpAGpixABqYycAamOCAGpj5QBqZCoAamR1AGplEQBqZVUAamW9AGpmBABqZsUAamguAGppYABqaeEAamppAGprdABqbH4Aam4OAGpvsgBqccgAanIpAGpyfwBqct0AanNDAGpzrwBqdJEAanYdAGp31QBqeCEAanh8AGp43ABqeTwAanm6AGp6UgBqewIAanvBAGp83gAAADMCwADUSoJwwABRf8AAUYXAAFv4R8AAePwAAQAAwAB49l0DwAD8qQFgA8AA+rcBXQPAAPypAWADwAD6twFgAcAA1BMAAV0BwAD8qQFgA8AA+rcAAAMGwADUTYJwwABR8cAAUf3AAFIUAALAAHj3wADTqwAAAAEDwABSCMAAUhQAAAABAQHAAFINAAAAYWADwAD8BQAAXwMAAAAGwADUToJwwABSGcAAUh7AAFr4AACDXgAAAAEDwABSJsAAWvgAAAAEAwTAAFIrAAAAamADwAD8BQDAAFI2AAAAgoxgA8AA/AUAwABSTAAAIJYuXQPAAPxnAWADwAD6twDAAFJdAAAAn85gA8AA/AUBasAAUmlgA8AA/AUJAFwBPgtJwABSiCIiHMAAUo6TgJcBAAGAwABSkMBqfnYAwAD9NAEcwABSn4DAAFKZwGp+doCXAQABgcAAUqHAan6FAMAA/TQBHMAAUqyBwABSqMBqfoWAlwEAARbAAFKuLmHAAPzYAMAA/TQ+Aj0ewABSycAA+0YDAAOAwABS2cBqfnaBwABS4MBqfoUWwABS5S5hwAD82ABAKsAAUw3AAFMSAD9JwABTHxzAAFMtg8AAUyPAan6sYwEAAZMAwAD9Mj4BPTDAAFM6H8AAU0vAAPtPBAAEg8AAU1HAan6skysnn84AP07AAFOEwABTigABgO5gA8AA/AUBHMAAU5CBwABTjMBqfoWBjQEAAYDAAFOSwGp+dgDAAP0rScAAU50cwABTuxzAAFOuFsAAU6eCwABTosBqfpVhwAD8ioGNAQABg8AAU7DAan6sAMAA/StjAQABhMAAU73Aan+uAMAA/TI+AT0wwABTzB7AAFPnwADOKQAAAAA/ScAAU/wcwABUBoTAAFQAwGp/rkgBAAGTAMAA/ShKwABUDAA/ScAAVBklwABUIoLAAFQdwGp+lWADwADTwT4CTsAAVKzAAFS8AAHAAHj4YAPAANPBASbAAFTDAILAAFS+wGp+lWADwADTwUnAAFTcHMAAVPgWwABU5S7AAG7GwADUFUgBAAEWwABVC4XAAFT7wGqAf8AAbsbAANPEAMAA/Sg+AUnAAFUpIhzAAFU0hMAAVS7Aan+uYwEAATcKAMAA/TIAIRzAAFVVFsAAVU6FwABVPsBqgH+Ci8AA08ZIAQABFsAAVV0ugovAANQXAMAA1RI+Aj0ewABVeMAAyx0FAAUmwABVggCCwABVfcBqfpVdA8AA/KkBYAPAAPq3g8AAVZPAan6sLoDAAFWkwGp+doTAAFWrwGp/rgBKwABVvQBJwABV1BzAAFXqFsAAVeQWwABV3S6Ci8AA1Be23MAA06vAANUKwABuxcAA06sGAAYcwABWHBzAAFYHgMAAVgHAan52g4gBAAEWwABWCS7AAG7GwADUFQDAAP0sZAEAARbAAFYjLqmRwADUFgDAAP0qHMAAVkSEwABWPsBqf66DiAEAARbAAFZGLsAAbsbAANQVAMAA/SwWwABWfRbAAFZ2hcAAVmbAaoB/govAANPGttzAANOrwADVChzAAFavHMAAVpqDwABWkMBqfqyDiAEAARbAAFacLsAAbsbAANQVAMAA/SxkAQABFsAAVsGFwABWscBqgH+pkcAA08UAwAD9Kh7AAFbkwADLKgEAAS4AHsAAVwXAAMsqAQABgsAAVwvAan6VAADAANPRPgFKwABXHwA/ScAAVz4cwABXWRbAAFdShcAAV0LAaoB/govAANPGSAEAARbAAFdhLoKLwADUFwDAANUSPgVOwABYN8AAWEIAAcAAePldA8AA/KkBYAPAAPq3ASbAAFhJAILAAFhEwGp+lV0DwAD8qQFgA8AA+rdOwABYaMAAWHMAAcAAePpfAwAAARzAAFh1LsAAePfAANOrAQABhMAAWIHAan+uAMAA1E1FwABYkQHAAFiawABYnAAAYmADwAD8BQGTARzAAFijFMAAWKHAaoNZCABjAQABhMAAWKXAan+uAMAA/TIBFcAAWKzAaoNZCBzAAFitFMAAWKzAaoNZCABkAQABlADAAP0qPgE9HMAAWMeHwABYvcBqgyGAvwIAAhTAAFjIwGqDWQgAHMAAWNeGwABYzcBqguhLAQABHMAAWOKDwABY2MBqfqxkAQABFMAAWOTAaoNZCAAAwAD9KgDAAPy4AMAA/LlFwABY+gHAAFkDwABZBQAAYmADwAD8BQGAwABZB8BqfnYBHMAAWRAUwABZDsBqhBkIAGMBAAGBwABZEsBqfoUAwAD9MgEVwABZF8BqhBkIHMAAWRgUwABZF8BqhBkIAGQBAAGUAMAA/So+AT0cwABZLC6AvwIAAhTAAFktwGqEGQgAHMAAWTyHwABZMsBqgyFLAQABHMAAWT8UwABZPcBqhBkIAIGNAQABgMAAWUHAan52AMAA/SsAwAD8uADAAPy5SsAAWVsAPz9OwABZewAAAJ/PXQPAAPypAVsATsAAWY4AAACf0GADwAD8BQBJwABZniXAAFmngsAAWaLAan6VXQPAAPypAWADwAD6tz4CPY3AAFnAwGqE3RTAAFnMwGp+lQIBXQPAAPypAWADwAD6tz2OwABZ2MBqhPCDwABZ5cBqfqw+Aj2NwABaA8BqhN0cwABaJBzAAFoUgsAAWg/Aan6Vli8BAAGDwABaGcBqfqwAwAD8gYCtAQAAAYVeKsAA/H09jsAAWkPAaoTwk0nAAFpdHMAAWnQcwABabIbAAFphwGqE8GQBAAGEwABabsBqf64AwAD9KoCXAQABFsAAWoCFwABadsBqhN1hwAD82ADAAP00PgE9MMAAWpAewABaq8AAzikAAAAAPz0ewABaxcAAyx0FAAWFwABaysBqhN2GwABa1cBqhPAugMAAWufAan52hMAAWu7Aan+uAAbAANRPgnDAAFr9wABbCcAAW/YAAIFYAAAAAQPAAFsQwABb9gAAAAIBAsAAWxUAAABqYAPAAPwFAMAAWyEAAACCjGADwAD8BQFqAGADwAD9DnkAXwMAAAE+BT2JwABbLcBqhmoewABbPsAA+0YDAAOAwABbTsBqhluBwABbVcBqhmoWwABbXy5hwAD82ABOwABbcMAAW3cAAGFgA8AA/AUBHMAAW32BwABbecBqhmqBjQEAAYDAAFt/wGqGWwDAAP0rTsAAW5bAAFudAACBdl8DAAABHMAAW58uwAB498AA06sBAAGCwABbq8BqhsAAwADUTT0cwABbv4PAAFu4wGqG9INeBAAEk4LAAFvLwGqGwC6AwABb2cBqhlsAwAD8zkrAAFvlAYPAAFvswGqG9AAAan4HAGp+TABqhjEAaodgAAAAAwLAANRQgnDAAFv7wABcCsAAhFUHwAB4/QAAAWABwAD9UQABXQHAAPypAWADwADjoQABBcAA1IwAAAAABAAAAwAAAAAAAAAAAGADwADUUAE/AQkBAMAA/WcAAAAANgbAANRSgnDAAFw9wABcRcAAXFcBAsAAbsYAAAABA8AAXFfAAFxXAAAAAAAAAGADwAD8BQAGwADUU4JwwABcW8AAXGPAAFxwAQKpkQAAAAEDwABccMAAXHAAAAAAAAAAYAPAAPwFAAbAANRUgnDAAFx0wABchMAAXIoBAoKLAAAAAQPAAFyKwABcigAAAAAAAABgA8AA1QcABsAA1FyCcMAAXI/AAFydwABctAACwAB498AA06sAAAABA8AAXKjAAFy0AAAAAQEBwABcrQAAAGFgA8AA/AUAAGADwADjgwAGwADUXYJwwABcucAAXMXAAFz1AACWRgAAAAEDwABc0cAAXPUAAAEAAIJ2YAPAAP1RAVsAAAAAXQPAAPxnAV8DAAABSsAAXNcBH8AAXNvAAM4aAQFfAwAAAS4ABsAA1F6CcMAAXPrAAF0OwABdegAAlj0AAAABA8AAXRjAAF16AAAAAQEBwABdLQAAIIPWXQPAAPxnAWADwADjoQAAXQPAAPxnAWADwADjoQFKwABdPQEewABdQcAAzfICAWADwADjoQIugMAAXXTAaok2AAbAANRfgnDAAF1/wABdh8AAXbUAAJY4AAAAAQPAAF2OwABdtQAAAQAAlvlgA8AA/VEBWwAAAABdA8AA/KkBXwMAAAFKwABdlAEewABdmcAA/LQBAmADwADjoV8DAAABLgAGwADUiYJwwABducAAXcLAAF4xAgCDGQAAAAEDwABdx8AAXjEAAAABAQHAAF3SAAAggJZgA8AA46EAAFwBPgJJwABd3xzAAF3vFsAAXeguYcAA/NhIAQABkwDAAP0oPTDAAF31H8AAXf/AAPtbAgACky4APz0cwABeIi6AvwIAApOAwABeKMBqigoAwAD8uQbAANSKgnDAAF42wABeP8AAXrsCAIHoAAAAAQPAAF5DwABeuwAAAAEBAcAAXk4AACCAlmADwADjoQAAXAE+AknAAF5bHMAAXmsWwABeZC5hwAD82EgBAAGTAMAA/Sg9MMAAXnEfwABee8AA+1sCAAKTLgA/PRzAAF6eLoC/AgACHMAAXqsWwABepC5hwAD82IGNAQABlADAAP0rgMAAXrLAaoqZAMAA/LkGwADUYIJwwABewMAAXsTAAF+DAACf1gAAAAEDwABezsAAX4MAAAACAQLAAF7UAAAAlv9hAwFgA8AA46FgA8AA+j8AwABe8gAAAGpgA8AA/AUBasAAXvpgA8AA/AUJAGADwAD8BQE+A0nAAF8EHMAAXw6BwABfCMBqi1tjAQABkwDAAP0yPYnAAF8TwGqLW5M/RcAAXyIBwABfK8AAXy0AAGJgA8AA/AUBgcAAXy/AaotbARzAAF84gsAAXzbAaouvYwEAARbAAF86LmHAAPzYAMAA/TIBisAAX0LAaouvHMAAX0OCwABfQsBqi69kAQABlADAAP0qPgFJwABfTxzAAF9XgMAAX1PAaotCIAEAARzAAF9cLksBAAGCwABfXcBqi68AwAD8uAAASsAAX2IBgsAAX2nAaouvP0rAAF92ARzAAF99lIHEAAAAAMAA/CgGwADUYYJwwABfiMAAX4zAAGBxAACf1wAAAAEDwABfmsAAYHEAAAACAQLAAF+gAAAAlv9hAwFgA8AA46FgA8AA+j8AwABfvgAAAGpgA8AA/AUBagBgA8AA/Q55AGADwAD8BQE+A0nAAF/MIhzAAF/WgcAAX9DAaoyrSAEAASsAwAD9KAEcwABf54HAAF/hwGqMq4FtAQABFsAAX+8uYcAA/NgAwAD9NT2JwABf98BqjKscwABgCxbAAGAELmHAAPzYgY0BAAGUAMAA/Ss/RcAAYBQBwABgHcAAYB8AAGJgA8AA/AUBgcAAYCHAaoyrARzAAGAqgsAAYCjAao07gW0BAAGTAMAA/TUBisAAYDDAao07HMAAYDGCwABgMMBqjTuBjQEAAZQAwAD9Kz4BScAAYD0cwABgRYDAAGBBwGqMkiABAAEcwABgSi5LAQABgsAAYEvAao07AMAA/LgAAErAAGBQAYLAAGBXwGqNOz9KwABgZAEcwABga5SBxAAAAADAAPwoBsAA1GKCcMAAYHbAAGCPwABhbgMAZAAAAAEDwABgkMAAYW4AAAABAQHAAGChAAAgg9ZdA8AA/KkBYAPAAOOhAABdA8AA/KkBYAPAAOOhAT4CTsAAYLLAAGC+AACDWGADwAD8BQEcwABgzBbAAGDFLmHAAPzYZAEAARbAAGDUgMAAYM7Aao4VYcAA/NgAwAD9KkrAAGDgATXAAGDyAAABAF0DwAD8qQFgA8AA46EBMcAAYPJgA8AA46EANQAAAAEAWwEXwABg/YLAAGD7wGqOhGGBwABhBsBqjj7AAPzWNQAAAAEAWwEcwABhGoLAAGEYwGqOhINeAwADkxbAAGErLmHAAPzYLgDAAPzONQAAAAEAWwEcwABhQYLAAGE/wGqOhINeAwADFsAAYU8uYcAA/NiBwABhV8Bqjj6AwABhZMBqjhUAwAD8zoIAwGqOhAbAANRjgnDAAGFzwABheMAAYhcAAIMXAAAAAQPAAGGAwABiFwAAAAEBAcAAYYgAAACWJmADwAD9UQAAYAPAAPo/AT4DTsAAYZvAAGGfAACXbGADwAD8BQEWwABhpi5hwAD82EXAAGGyAcAAYbvAAGG9AABiYAPAAPwFAZMBHMAAYcSCwABhwsBqj6NjAQABgcAAYcbAao9/AMAA/TIBisAAYc3Aao+jHMAAYcuCwABhzcBqj6NkAQABlADAAP0qPgFJwABh2BzAAGHkHMAAYeAuSwEAAYLAAGHhwGqPowDAAPy4SAEAAYDAAGHnwGqPZADAAP1eSsAAYfABKT9KwABiBwEqBsAA1GSCcMAAYhzAAGIhwABjCgAAn8UAAAABA8AAYijAAGMKAAAAAQABwABiMQAAAJ/GYAPAANBtAWoAYAPAAP0OeQBcAT4DPSMcwABiR4DAAGJAwGqQaEgBAAErAMAA/V6IwABiQMBqkGgewABiT8AA0G8AAAAAKwFgA8AA0G1OwABiYcAAYmMAAGJgA8AA/AUBFsAAYmouYcAA/NhDwABidhzAAGJ/gcAAYn3AapC/gJcBAAGUAMAA/TQ+BU7AAGKQwABilAAAn8dgA8AA/AUBHMAAYp2AwABilsBqkGifyAEAAYHAAGKlwGqQvwDAANByPYnAAGKvwGqQvxzAAGKxgcAAYq/AapC/gY0BAAGUAMAA/StOwABiwcAAYsUAAJ/JYAPAAOOhARzAAGLLLksBAAGBwABizMBqkL8AwAD8uD0cwABi2i6AvwIAAoHAAGLbwGqQvxzAAGLkLksBAAGCwABi5cBqkP0AwAD8uADAAPy5PRzAAGL1LoC/AgACgsAAYvbAapD9g8AAYv3AapFVAMAA/LkGwADUZYJwwABjD8AAYxTAAGv9AACDXgAAAAEDwABjHMAAa/0AAAAEAwTAAGMhAAAAamADwAD8BQDAAGMsAAAAgoxgA8AA/AUAwABjRQAAIJYuXQPAAPxnAWADwADjoQDAAGNWAAAAn85gA8AA/AUBasAAY2JgA8AA/AUJAFwBPgtJwABjgSIiHMAAY4eTgJcBAAGAwABjicBqkf8AwAD9NAEcwABjmIDAAGOSwGqR/4CXAQABgcAAY5rAapIOAMAA/TQBHMAAY6WBwABjocBqkg6AlwEAARbAAGOnLmHAAPzYAMAA/TQ+Aj0ewABjwsAA+0YDAAOAwABj0sBqkf+BwABj2cBqkg4WwABj3i5hwAD82ABAKsAAZAbAAGQLAD9JwABkGBzAAGQmg8AAZBzAapI1YwEAAZMAwAD9Mj4BPTDAAGQzH8AAZETAAPtPBAAEg8AAZErAapI1kysnn84AP07AAGR9wABkgwABgO5gA8AA/AUBHMAAZImBwABkhcBqkg6BjQEAAYDAAGSLwGqR/wDAAP0rScAAZJYcwABktBzAAGSnFsAAZKCCwABkm8Bqkh5hwAD8ioGNAQABg8AAZKnAapI1AMAA/StjAQABhMAAZLbAapM3AMAA/TI+AT0wwABkxR7AAGTgwADOKQAAAAA/ScAAZPUcwABk/4TAAGT5wGqTN0gBAAGTAMAA/ShKwABlBQA/ScAAZRIlwABlG4LAAGUWwGqSHmADwADTwT4CTsAAZajAAGW4AAHAAHj4YAPAANPBASbAAGW/AILAAGW6wGqSHmADwADTwUnAAGXYHMAAZfQWwABl4S7AAG7GwADUUkgBAAEWwABmB4XAAGX3wGqUCMAAbsbAANPEAMAA/Sg+AUnAAGYlIhzAAGYwhMAAZirAapM3YwEAATcKAMAA/TIAIRzAAGZRFsAAZkqFwABmOsBqlAiCi8AA08ZIAQABFsAAZlkugovAANRUAMAA1RI+Aj0ewABmdMAAyx0FAAUmwABmfgCCwABmecBqkh5dA8AA/KkBYAPAAOOhg8AAZpLAapI1LoDAAGajwGqR/4TAAGaqwGqTNwBKwABmvABJwABm0xzAAGbpFsAAZuMWwABm3C6Ci8AA1FS23MAA06vAANUKwABuxcAA06sGAAYcwABnGxzAAGcGgMAAZwDAapH/g4gBAAEWwABnCC7AAG7GwADUUgDAAP0sZAEAARbAAGciLqmRwADUUwDAAP0qHMAAZ0OEwABnPcBqkzeDiAEAARbAAGdFLsAAbsbAANRSAMAA/SwWwABnfBbAAGd1hcAAZ2XAapQIgovAANPGttzAANOrwADVChzAAGeuHMAAZ5mDwABnj8BqkjWDiAEAARbAAGebLsAAbsbAANRSAMAA/SxkAQABFsAAZ8CFwABnsMBqlAipkcAA08UAwAD9Kh7AAGfjwADLKgEAAS4AHsAAaATAAMsqAQABgsAAaArAapIeAADAANPRPgFKwABoHgA/ScAAaD0cwABoWBbAAGhRhcAAaEHAapQIgovAANPGSAEAARbAAGhgLoKLwADUVADAANUSPgVOwABpNsAAaUEAAcAAePldA8AA/KkBYAPAAOOhASbAAGlIAILAAGlDwGqSHl0DwAD8qQFgA8AA46FOwABpasAAaXUAAcAAePpgA8AA44MBHMAAaXcuwAB498AA06sBAAGEwABpg8BqkzcAwADUXEXAAGmTAcAAaZzAAGmeAABiYAPAAPwFAZMBHMAAaaUUwABpo8BqluQIAGMBAAGEwABpp8BqkzcAwAD9MgEVwABprsBqluQIHMAAaa8UwABprsBqluQIAGQBAAGUAMAA/So+AT0cwABpyYfAAGm/wGqWqoC/AgACFMAAacrAapbkCAAcwABp2YbAAGnPwGqWcUsBAAEcwABp5IPAAGnawGqSNWQBAAEUwABp5sBqluQIAADAAP0qAMAA/LgAwAD8uUXAAGn8AcAAagXAAGoHAABiYAPAAPwFAYDAAGoJwGqR/wEcwABqEhTAAGoQwGqXpAgAYwEAAYHAAGoUwGqSDgDAAP0yARXAAGoZwGqXpAgcwABqGhTAAGoZwGqXpAgAZAEAAZQAwAD9Kj4BPRzAAGouLoC/AgACFMAAai/AapekCAAcwABqPofAAGo0wGqWqksBAAEcwABqQRTAAGo/wGqXpAgAgY0BAAGAwABqQ8Bqkf8AwAD9KwDAAPy4AMAA/LlKwABqXQA/P07AAGp9AAAAn89dA8AA/KkBWwBOwABqkAAAAJ/QYAPAAPwFAEnAAGqgJcAAaqmCwABqpMBqkh5dA8AA/KkBYAPAAOOhPgI9jcAAasXAaphoFMAAatHAapIeAgFdA8AA/KkBYAPAAOOhPY7AAGrdwGqYe4PAAGrqwGqSNT4CPY3AAGsIwGqYaBzAAGspHMAAaxmCwABrFMBqkh6WLwEAAYPAAGsewGqSNQDAAPyBgK0BAAABhV4qwAD8fT2OwABrSMBqmHuTScAAa2IcwABreRzAAGtxhsAAa2bAaph7ZAEAAYTAAGtzwGqTNwDAAP0qgJcBAAEWwABrhYXAAGt7wGqYaGHAAPzYAMAA/TQ+AT0wwABrlR7AAGuwwADOKQAAAAA/PR7AAGvKwADLHQUABYXAAGvPwGqYaIbAAGvawGqYey6AwABr7MBqkf+EwABr88BqkzcABsAA1GaCcMAAbALAAGwWwABsZQAAgaUAAAABA8AAbBvAAGxlAAAAAQEBwABsIQAAAIGmYQMBYAPAAOOhYAPAAPo/AABdA8AA/GcBYAPAAOOhAUrAAGxAAR/AAGxEwADNPAIBYAPAAOOhAi6AwABsY8BqmeYABsAA1GeCcMAAbGrAAGx+wABstwAAlkQAAAABA8AAbILAAGy3AAAAAQEBwABshwAAAIOjYAPAAPwFAABdA8AA/GcBYAPAAOOhAUrAAGyNAR/AAGyRwADM9wMBYAPAAOOhAy6TgMAAbLXAappbAAbAANRognDAAGy8wABs0MAAbS0AAJZFAAAAAQPAAGzZwABtLQAAAAEBAcAAbN8AAACW/2EDAWADwADjoWADwAD6PwAAXQPAAPxnAWADwADjoQFKwABtAQEfwABtBcAAzYICAWADwADjoQIugMAAbSjAaprIAAbAANRpgnDAAG0ywABtRsAAbYgAAJYvAAAAAQPAAG1KwABtiAAAAAEBAcAAbU8AAACDo2ADwAD8BQAAXQPAAPxnAWADwADjoQFKwABtWwEfwABtX8AAzPcDAWADwADjoQMugMAAbYDAaps9KwAGwADUaoJwwABtjcAAbaHAAG3+AACWQwAAAAEDwABtqsAAbf4AAAABAQHAAG2wAAAAlv9hAwFgA8AA46FgA8AA+j8AAF0DwAD8ZwFgA8AA46EBSsAAbdIBH8AAbdbAAM26AgFgA8AA46ECLoDAAG35wGqbqgAGwADUVYJwwABuA8AAbhvAAG5QAQCYiAAAAAEDwABuJMAAblAAAAAAAAAAXQPAAPxnAWADwADjoQFKwABuJwEfwABuK8AAzqgBAWADwADjoQEuAAbAANRrgnDAAG5VwABuacAAbpQAAJxqAAAAAQPAAG5uwABulAAAAAAAAABdA8AA/NoCYAPAAPwFYAPAAOOhAUrAAG50AR/AAG54wADOngEBYAPAAOOhAS4ABsAA1GyCcMAAbpnAAG6twABvRgAAn8sAAAABA8AAbrXAAG9GAAAAAgECwABuugAAAGpgA8AA/AUAwABuxgAAAIKMYAPAAPwFAWoAYAPAAP0OeQBdA8AA/GcBYAPAAOOhAT4CPR7AAG7dwAD7RgMAA4DAAG7twGqcy4HAAG70wGqc2hbAAG7+LmHAAPzYAErAAG8LAR/AAG8WwADM9wMBYAPAAOOhAy6AwABvN8BqnMuBwABvPsBqnNoABsAA1FaCcMAAb0vAAG9jwABvlgEAXAAAAAEDwABvbMAAb5YAAAAAAAAAXQPAAPyiAWADwADjoQFKwABvbwEfwABvc8AA3mABAWADwADjoQEuAAbAANRtgnDAAG+bwABvq8AAcAwAAICtAAAAAQPAAG+xwABwDAAAAAEAAAHAAG+4AAAAhV5gA8AA+j8BasAAb8JgA8AA+j93XQPAAPypAWADwADjoQE+AUrAAG/PAR7AAG/awAD8rwIBYAPAAOOhAS4BhV6AwABv/8BqndgGwADUboJwwABwEcAAcCDAAHBWAACVGQAAAAEDwABwJcAAcFYAAAAAAAAAXQPAAP2cAWADwADjoQE+AUrAAHAuAR7AAHA5wADBGQEBYAPAAOOhAS4ABsAA1G+CcMAAcFvAAHBgwABw3gAAg/gAAAABA8AAcGfAAHDeAAAAAQEBwABwbQAAAIGmYQMBYAPAAOOhXAAAXAE+Ak7AAHCNwABwkQAAl2xgA8AA/AUBFsAAcJguYcAA/NhFwABwpAHAAHCtwABwrwAAYmADwAD8BQGTARzAAHC2gsAAcLTAap7mYwEAAYHAAHC4wGqewgDAAP0yAYrAAHC9wGqe5hzAAHC+gsAAcL3Aap7mZAEAAZQAwAD9Kj4BPRzAAHDLgMAAcMrAap6oIAEAARzAAHDQLksBAAGCwABw0cBqnuYAwAD8uAAABsAA1HCCcMAAcOPAAHDtwAByAAAAlkAAAAABA8AAcPPAAHIAAAAAAQEBwABw/gAAIIcdYQMCYAPAAOOhYAPAAOOhYAPAAOOhAABgA8AA46EBPgVOwABxNcAAcTkAAJdsYAPAAPwFARbAAHFALmHAAPzYScAAcUwcwABxVIHAAHFQwGqfv0gBAAGTAMAA/Sg9MMAAcVoewABxdcAAzicAAAAAP07AAHGKwABxkAAAgJZgA8AA46EBHMAAcZYuSwEAAZMAwAD8uEXAAHGfAcAAcajAAHGqAABiYAPAAPwFAZQBHMAAcbGDwABxr8BqoDhjAQABgcAAcbPAap+/AMAA/TIBi8AAcbrAaqA4HMAAcbiDwABxusBqoDhkAQABlADAAP0qPgE9isAAccXAaqAPHMAAcdSAwABxzcBqn5UgAgACgsAAcdXAaqAPHMAAceAuSwEAAYPAAHHhwGqgOADAAPy4AABKwABx8AGCwABx98BqoA8GwADUcYJwwAByBcAAcgfAAHLkAACDWQAAAAEDwAByDsAAcuQAAAEAAIJ2YAPAAP1RAVsCAgLAAHIRAAAAljxfAwAAAMAAciEAAACHHWEDAl8DAABgA8AA46FfAwAAAABfAwAAAT4DTsAAclfAAHJbAACXbGADwAD8BQEWwAByYi5hwAD82EXAAHJuAcAAcnfAAHJ5AABiYAPAAPwFAZMBHMAAcoCDwAByfsBqoWpjAQABgsAAcoLAaqFGAMAA/TIBi8AAconAaqFqHMAAcoeDwAByicBqoWpkAQABlADAAP0qPgE9iMAAcpTAaqEUHMAAcqqBwAByo8BqoSIgAgACgMAAcqvAaqEUHMAAcr0uSwEAAYPAAHK+wGqhagDAAPy4AABKwAByzQGAwABy1MBqoRQGwADUcoJwwABy6cAAcvXAAHNGAACAqwAAAAEDwABy+8AAc0YAAAEAAIJ2YAPAAP1RAVsBAQHAAHL+AAAAgaZhAwFgA8AA46FfAwAAAABdA8AA/GcBXwMAAAFKwABzHQEewABzIcAAzQsCAmADwADjoV8DAAACLoDAAHNEwGqiRgAGwADUc4JwwABzS8AAc1fAAHO1AACEjwAAAAEDwABzYMAAc7UAAAEAAIJ2YAPAAP1RAVsBAQHAAHNtAAAAgaZhAwFgA8AA46FdA8AA/GcBXwMAAAAAXQPAAPxnAV8DAAABSsAAc4wBH8AAc5DAAM1QAgJgA8AA46FfAwAAAi6AwABzs8BqoscABsAA1HSCcMAAc7rAAHO/wAB0XwAAljYAAAABA8AAc8TAAHRfAAAAAQEBwABzygAAAIGmYQMBYAPAAOOhYAPAAPo/AABgA8AA+j8BPgNOwABz6sAAc+4AAJdsYAPAAPwFARbAAHP1LmHAAPzYRcAAdAEBwAB0CsAAdAwAAGJgA8AA/AUBkwEcwAB0E4LAAHQRwGqji2MBAAGBwAB0FcBqo2cAwAD9MgGKwAB0HMBqo4scwAB0GoLAAHQcwGqji2QBAAGUAMAA/So+AUnAAHQnIRzAAHQtgMAAdCzAaqNDIAEAARzAAHQyLksBAAGCwAB0M8Bqo4sAwAD8uAAASsAAdDgBKj9KwAB0UAEpBsAA1HWCcMAAdGTAAHRpwAB1BgAAgdQAAAABA8AAdGzAAHUGAAAAAQEBwAB0cgAAAIGmYQMBYAPAAOOhYAPAAPo/AABgA8AA+j8BPgNOwAB0ksAAdJYAAJdsYAPAAPwFARbAAHSdLmHAAPzYRcAAdKkBwAB0ssAAdLQAAGJgA8AA/AUBkwEcwAB0u4LAAHS5wGqklmMBAAGBwAB0vcBqpHIAwAD9MgGKwAB0xMBqpJYcwAB0woLAAHTEwGqklmQBAAGUAMAA/So+AUnAAHTPHMAAdNSAwAB008BqpE4gAQABHMAAdNkuSwEAAYLAAHTawGqklgDAAPy4AABKwAB03wEpP0rAAHT2ASoGwADUdoJwwAB1C8AAdRXAAHY4AACWOgAAAAEDwAB1H8AAdjgAAAACAQHAAHUlAAAAlv9hAwFgA8AA46FgA8AA+j8AAcAAdUkAACCWO2EDAGADwADjoQFqAGADwAD9DnlgA8AA46EBPgROwAB1XsAAdWIAAJdsYAPAAPwFARbAAHVpLmHAAPzYRcAAdXUBwAB1fsAAdYAAAGJgA8AA/AUBkwEcwAB1h4PAAHWFwGqlvGMBAAGCwAB1icBqpZgAwAD9MgGLwAB1kMBqpbwcwAB1joPAAHWQwGqlvGQBAAGUAMAA/So+Ak7AAHWfwAB1pwAAliZgA8AA46EBHMAAda0uSwEAAYPAAHWuwGqlvADAAPy4ScAAdbgcwAB1wIDAAHW8wGqlWCABAAGEwAB1wcBqphUAAErAAHXLAYTAAHXSwGqmFT9JwAB15SEcwAB18IHAAHXpwGqlckgBAAErAMAA/V5KwAB1+QEcwAB2BoHAAHYAwGqlciAAAAAAAD89MMAAdg4ewAB2KcAAzicAAAAABsAA1HeCcMAAdj3AAHZHwAB3gAAAlj8AAAABA8AAdlDAAHeAAAAAAgEBwAB2VgAAAJb/YQMBYAPAAOOhYAPAAPo/AAHAAHZ6AAAgljthAwBgA8AA46EBagBgA8AA/Q55YAPAAOOhAT4ETsAAdo/AAHaTAACXbGADwAD8BQEWwAB2mi5hwAD82EXAAHamAcAAdq/AAHaxAABiYAPAAPwFARzAAHa3gsAAdrPAaqcogY0BAAGUAMAA/SsBHMAAdr6DwAB2vMBqp0yBbQEAAZMAwAD9NQGLwAB2xsBqp0wcwAB2xIPAAHbGwGqnTIGNAQABlADAAP0rPgJOwAB21cAAdt0AAJYmYAPAAOOhARzAAHbjLksBAAGDwAB25MBqp0wAwAD8uEnAAHbuHMAAdvaAwAB28sBqpuggAQABhMAAdvfAaqe3AAA+AUrAAHcLAYTAAHcSwGqntz9JwAB3LSEcwAB3OIHAAHcxwGqnAkgBAAErAMAA/V5KwAB3QQEcwAB3ToHAAHdIwGqnAiAAAAAAAD89MMAAd1YewAB3ccAAzicAAAAABsAA1HiCcMAAd4XAAHePwAB5mQAAlkIAAAABA8AAd5rAAHmZAAAAAgEBwAB3oAAAAJb/YQMBYAPAAOOhYAPAAPo/AAHAAHfEAAAgljthAwBgA8AA46EBagBgA8AA/Q55YAPAAOOhAT4HTsAAd9nAAHfgAACBdlsBK07AAHfxwAB3/wAAwABxvGADwAD6PwEqTsAAeBDAAHgUAACXbGADwAD8BQEWwAB4Gy5hwAD82EXAAHgnAcAAeDDAAHgyAABiYAPAAPwFAZMBHMAAeDmFwAB4N8BqqRdjAQABhMAAeDvAaqjzAMAA/TIBjcAAeELAaqkXHMAAeECFwAB4QsBqqRdkAQABlADAAP0qPgJOwAB4UcAAeFkAAJYmYAPAAOOhARzAAHhfLksBAAGFwAB4YMBqqRcAwAD8uEnAAHhqHMAAeHKAwAB4bsBqqIwgAQABhsAAeHPAaqlwAAA+A0nAAHiHg8AAeIvAaqjcPgE9MMAAeKYewAB4wcAAzigAAAAAPz2KwAB43sBqqMyGwAB458BqqXA9i8AAePjAaqjcKT9JwAB5IIPAAHkkwGqo3ErAAHkzASbAAHkzAYLAAHk6wGqozGADwADjoT9JwAB5RiEcwAB5UYHAAHlKwGqopkgBAAErAMAA/V5KwAB5WgEcwAB5Z4HAAHlhwGqopiAAAAAAAD89MMAAeW8ewAB5isAAzicAAAAABsAA1HmCcMAAeZ7AAHmowAB52QAAljkAAAABA8AAebHAAHnZAAAAAQEBwAB5tgAAACdgA8AA/AUAAGADwADjoQE+AUrAAHnDARzAAHnOLksBAAGAwAB5z8BqqqIAwAD8uAbAANR6gnDAAHnewAB548AAekEAAFYAAAABA8AAeebAAHpBAAAAAQEBwAB58QAAIICWYAPAAOOhAABcAT4BPTDAAHn+H8AAegjAAPuXAQABJ8AAdlAABsAA1HuCcMAAekbAAHpLwAB6tgAAgKUAAAABA8AAelHAAHq2AAAAAQEBwAB6ZgAAIICWXQPAAPxnAWADwADjoQAAXAE+AT0wwAB6cx/AAHp9wAD7lwEAASfAAHZQAAbAANR8gnDAAHq7wAB6wMAAezEAAJ7VAAAAAQPAAHrGwAB7MQAAAAICAsAAessAAAAnYAPAAPwFAMAAetwAACCAlmADwADjoQAAXAE+AT0wwAB66R/AAHrzwAD7lwEAASfAAHj0AAbAANR9gnDAAHs2wAB7O8AAe7oAAJ/ZAAAAAQPAAHtEwAB7ugAAAAICAsAAe0kAAAAnYAPAAPwFAMAAe2QAACApXQPAAPxnAWADwADjoQAAXAE+AT0wwAB7ch/AAHt8wAD7lwEAASfAAHj0AAbAANR+gnDAAHu/wAB7xMAAfGUAAICuAAAAAQPAAHvIwAB8ZQAAAAEAAcAAe84AAACbIWEDAmADwADjoWADwADjoWADwAD8BQFqAGADwAD9DnkAXAE+AknAAHv4HMAAfASAwAB7/MBqrIlIAQABKwDAAP1ePgE9MMAAfBUnwAB4/j89HsAAfE7AAM69AgFgA8AA46ECLoDAAHxZwGqsiQAGwADUf4JwwAB8asAAfG7AAH1vAACAuwAAAAEDwAB8dcAAfW8AAAACAQLAAHyAAAAgliZgA8AA46EAwAB8jgAAAGpgA8AA/AUBasAAfJZgA8AA/AUJAGADwAD8BQE+A0nAAHygHMAAfKqBwAB8pMBqrTmBbQEAARbAAHyyLmHAAPzYAMAA/TU+AUrAAHzCARzAAHzJlIHEAAAAAMAA/ChJwAB82BzAAHzigcAAfNzAaq05YwEAAZMAwAD9Mj4BPYnAAHzvwGqtOZM/RcAAfQQBwAB9DcAAfQ8AAGJgA8AA/AUBgcAAfRHAaq05ARzAAH0agsAAfRjAaq3PYwEAARbAAH0hLmHAAPzYAMAA/TIBisAAfSnAaq3PHMAAfSqCwAB9KcBqrc9kAQABlADAAP0qPgFJwAB9NhzAAH1CHMAAfT4uSwEAAYLAAH0/wGqtzwDAAPy4SAEAAYDAAH1FwGqtKQDAAP1eSsAAfU4BgsAAfVXAaq3PP0rAAH1iARzAAH1plIHEAAAAAMAA/CgGwADUgIJwwAB9dMAAfXjAAH6WAACWYAAAAAEDwAB9g8AAfpYAAAACAQLAAH2OAAAgliZgA8AA46EAwAB9nAAAAGpgA8AA/AUBasAAfaRgA8AA/Q55AGADwAD8BQE+A0nAAH2xIhzAAH27gcAAfbXAaq7FSAEAASsAwAD9KAEcwAB9zIHAAH3GwGquxYFtAQABFsAAfdQuYcAA/NgAwAD9NT4BPYnAAH3kwGquxRzAAH34FsAAffEuYcAA/NiBjQEAAZQAwAD9K0nAAH4IHMAAfhKBwAB+DMBqrsVjAQABkwDAAP0yPgFKwAB+HwEcwAB+JpSBxAAAAADAAPwoP0XAAH40AcAAfj3AAH4/AABiYAPAAPwFAYHAAH5BwGquxQEcwAB+SoLAAH5IwGqvj4FtAQABkwDAAP01AYrAAH5QwGqvjxzAAH5RgsAAflDAaq+PgY0BAAGUAMAA/Ss+AUnAAH5dHMAAfmkcwAB+ZS5LAQABgsAAfmbAaq+PAMAA/LhIAQABgMAAfmzAaq61AMAA/V5KwAB+dQGCwAB+fMBqr48/SsAAfokBHMAAfpCUgcQAAAAAwAD8KAbAANSBgnDAAH6bwAB+pcAAfwAAAIYXAAAAAQPAAH6vwAB/AAAAAAAAAABgA8AA46EBPgE9MMAAfrgfwAB+wsAA+5cBAAEnwAB2UQAGwADUgoJwwAB/BcAAfw/AAH9xAACf2AAAAAEDwAB/F8AAf3EAAAABAQHAAH8cAAAAJ2ADwAD8BQAAYAPAAOOhAT4BPTDAAH8pH8AAfzPAAPuXAQABJ8AAdlEABsAA1IOCcMAAf3bAAH97wAB/8wAAlv4AAAABA8AAf4bAAH/zAAAAAQEBwAB/jAAAAJb/YQMBYAPAAOOhYAPAAPo/AABcAT4BPTDAAH+rH8AAf7XAAPuXAQABJ8AAdlEABsAA1ISCcMAAf/jAAH/9wACAdQAAlwEAAAABA8AAgAjAAIB1AAAAAQEBwACADgAAAJb/YQMBYAPAAOOhYAPAAPo/AABcAT4BPTDAAIAtH8AAgDfAAPuXAQABJ8AAdlEABsAA1FeCcMAAgHrAAICIwACA4gEAgxkAAAABA8AAgI7AAIDiAAAAAAAAAGADwADjoQE+AknAAICUHMAAgJ8WwACAmC5hwAD82ICXAQABkwDAAP00SsAAgKQBHMAAgK8uSwEAAZMAwAD8uD89MMAAgLgewACA08AAzicAAAAABsAA1FiCcMAAgOfAAID1wACBVwEAgegAAAABA8AAgPrAAIFXAAAAAAAAAGADwADjoQE+AknAAIEAHMAAgQsWwACBBC5hwAD82ICXAQABkwDAAP00SsAAgRABHMAAgRsuSwEAARzAAIEjFsAAgRwuYcAA/NiBjQEAAZQAwAD9KwDAAPy4Pz0wwACBLR7AAIFIwADOJwAAAAAGwADUWYJwwACBXMAAgWrAAIIBAQCAwwAAAAEDwACBccAAggEAAAAAAAAAYAPAAOOhAT4DScAAgXccwACBghbAAIF7LmHAAPzYSAEAAZQAwAD9KErAAIGIARzAAIGTLksBAAGTAMAA/Lg/ScAAgZwcwACBpxbAAIGgLmHAAPzYSAEAAZMAwAD9KD0wwACBrR7AAIHIwADOJwAAAAA/PTDAAIHZHsAAgfTAAM4oAAAAAAbAANSFgnDAAIIGwACCFMAAgwMAAIFYAAAAAQPAAIIbwACDAwAAAAIBAsAAgiAAAABqYAPAAPwFAMAAgiwAAACCjGADwAD8BQFqAGADwAD9DnkAYAPAAOODAT4FPYnAAII4wGqzqR7AAIJJwAD7RgMAA4DAAIJZwGqzmoHAAIJgwGqzqRbAAIJqLmHAAPzYAE7AAIJ7wACCggAAYWADwAD8BQEcwACCiIHAAIKEwGqzqYGNAQABgMAAgorAarOaAMAA/StOwACCo8AAgqoAAIF2YAPAAOODARzAAIKsLsAAePfAANOrAQABgsAAgrjAarQBAMAA1Fw9HMAAgsyDwACCxcBqtDWDXgQABJOCwACC2MBqtAEugMAAgubAarOaAMAA/M5KwACC8gGDwACC+cBqtDUGwADUhoJwwACDCMAAgw3AAIOOAACf2wAAAAEDwACDE8AAg44AAAACAgLAAIMYAAAAJ2ADwAD8BQDAAIMzAAAgg8xdA8AA/GcBYAPAAOOhAABcAT4CTsAAg0nAAINNAAGCjGADwAD8BQEcwACDXxbAAINYgcAAg0/AarTcYcAA/IpkAQABgMAAg2HAarTNAMAA/So9HMAAg2wug14DAAOAwACDdcBqtM2CwACDfMBqtPmBwACDgcBqtNwAwADUZQbAANSHgnDAAIOTwACDmMAAhFMAAJuxAAAAAQPAAIOhwACEUwAAAAMCA8AAg6YAAABqYAPAAPwFAMAAg7EAAACCjGADwAD8BQDAAIPBAAAgwABDPWADwADjoQFqAGADwAD9DnkAXAE+Aj0ewACD3sAA+0YDAAOAwACD7sBqtYyBwACD9cBqtZsWwACD/y5hwAD82ABFwACEDAHAAIQVwACEFwAAYmADwAD8BQGAwACEGcBqtYwBHMAAhCKDwACEIMBqtfxjAQABgcAAhCTAarWbAMAA/TIBi8AAhCvAarX8HMAAhCmDwACEK8BqtfxkAQABlADAAP0qPgE9HMAAhDougL8CAAKDwACEO8BqtfyCwACEQMBqtasAwAD8uQAAaofSAGqIBgBqiDgAaohqAGqIsQBqiQwAaol/AGqJ4ABqim8AaosYAGqMaABqjewAao86AGqQPgBqkdUAapm8AGqaMQBqmp4AapsTAGqbgABqm/UAapxIAGqcoQBqnVsAap2tAGqeKQBqnn4Aap9rAGqg3gBqohAAaqKRAGqjGQBqpCQAaqUuAGqmvgBqqGIAaqp4AGqq2QBqqy8AaquNAGqr8wBqrF8Aaqz/AGquiwBqsEMAarCPAGqw6gBqsUoAarGqAGqyKABqssAAarNwAGq0owBqtWIAarZ/AAAANgLAANSNgnDAAIRYwACEZ8AArAIHwAB4/wAAAWABwAD9UQABXQHAAPypAWADwADkyQABBcAA1MkAAAAABAAAAwAAAAAAAAAAAGADwADUjQE/AQkBAMAA/WcAAAAANgbAANSPgnDAAISWwACEnsAAhLABAsAAbsYAAAABA8AAhLDAAISwAAAAAAAAAGADwAD8BQAGwADUkIJwwACEtMAAhLzAAITJAQKpkQAAAAEDwACEycAAhMkAAAAAAAAAYAPAAPwFAAbAANSRgnDAAITNwACE3cAAhOMBAoKLAAAAAQPAAITjwACE4wAAAAAAAABgA8AA1QcABsAA1JmCcMAAhOjAAIT0wACFCwACwAB498AA06sAAAABA8AAhP/AAIULAAAAAQEBwACFBAAAAGFgA8AA/AUAAGADwADjjQAGwADUmoJwwACFEMAAhRzAAIVMAACWRgAAAAEDwACFKMAAhUwAAAEAAIJ2YAPAAP1RAVsAAAAAXQPAAPxnAV8DAAABSsAAhS4BH8AAhTLAAM4aAQFfAwAAAS4ABsAA1JuCcMAAhVHAAIVjwACFywAAlj0AAAABA8AAhW3AAIXLAAAAAQEBwACFgAAAIIPWXQPAAPxnAWADwADkyQAAXQPAAPxnAWADwADkyQFKwACFkAEewACFlMAAzfICAWADwADkyQIugMAAhcXAarkhAAbAANScgnDAAIXQwACF2MAAhgQAAJY4AAAAAQPAAIXfwACGBAAAAQAAlvlgA8AA/VEBWwAAAABdA8AA/KkBXwMAAAFKwACF5QEewACF6sAA/LQBAmADwADkyV8DAAABLgAGwADUxoJwwACGCMAAhhHAAIZ+AgCDGQAAAAEDwACGFsAAhn4AAAABAQHAAIYfAAAggJZgA8AA5MkAAFwBPgJJwACGLBzAAIY8FsAAhjUuYcAA/NhIAQABkwDAAP0oPTDAAIZCH8AAhkzAAPtbAgACky4APz0cwACGby6AvwIAApOAwACGdcBqufUAwAD8uQbAANTHgnDAAIaDwACGjMAAhwYCAIHoAAAAAQPAAIaQwACHBgAAAAEBAcAAhpkAACCAlmADwADkyQAAXAE+AknAAIamHMAAhrYWwACGry5hwAD82EgBAAGTAMAA/Sg9MMAAhrwfwACGxsAA+1sCAAKTLgA/PRzAAIbpLoC/AgACHMAAhvYWwACG7y5hwAD82IGNAQABlADAAP0rgMAAhv3AarqEAMAA/LkGwADUnYJwwACHC8AAhw/AAIfMAACf1gAAAAEDwACHGcAAh8wAAAACAQLAAIcfAAAAlv9hAwFgA8AA5MlgA8AA+j8AwACHOwAAAGpgA8AA/AUBasAAh0NgA8AA/AUJAGADwAD8BQE+A0nAAIdNHMAAh1eBwACHUcBqu0ZjAQABkwDAAP0yPYnAAIdcwGq7RpM/RcAAh2sBwACHdMAAh3YAAGJgA8AA/AUBgcAAh3jAartGARzAAIeBgsAAh3/AaruaYwEAARbAAIeDLmHAAPzYAMAA/TIBisAAh4vAaruaHMAAh4yCwACHi8Bqu5pkAQABlADAAP0qPgFJwACHmBzAAIeggMAAh5zAarstIAEAARzAAIelLksBAAGCwACHpsBqu5oAwAD8uAAASsAAh6sBgsAAh7LAaruaP0rAAIe/ARzAAIfGlIHEAAAAAMAA/CgGwADUnoJwwACH0cAAh9XAAIi4AACf1wAAAAEDwACH48AAiLgAAAACAQLAAIfpAAAAlv9hAwFgA8AA5MlgA8AA+j8AwACIBQAAAGpgA8AA/AUBagBgA8AA/Q55AGADwAD8BQE+A0nAAIgTIhzAAIgdgcAAiBfAaryWSAEAASsAwAD9KAEcwACILoHAAIgowGq8loFtAQABFsAAiDYuYcAA/NgAwAD9NT2JwACIPsBqvJYcwACIUhbAAIhLLmHAAPzYgY0BAAGUAMAA/Ss/RcAAiFsBwACIZMAAiGYAAGJgA8AA/AUBgcAAiGjAaryWARzAAIhxgsAAiG/Aar0mgW0BAAGTAMAA/TUBisAAiHfAar0mHMAAiHiCwACId8BqvSaBjQEAAZQAwAD9Kz4BScAAiIQcwACIjIDAAIiIwGq8fSABAAEcwACIkS5LAQABgsAAiJLAar0mAMAA/LgAAErAAIiXAYLAAIiewGq9Jj9KwACIqwEcwACIspSBxAAAAADAAPwoBsAA1J+CcMAAiL3AAIjUwACJrwMAZAAAAAEDwACI1cAAia8AAAABAQHAAIjkAAAgg9ZdA8AA/KkBYAPAAOTJAABdA8AA/KkBYAPAAOTJAT4CTsAAiPXAAIkBAACDWGADwAD8BQEcwACJDxbAAIkILmHAAPzYZAEAARbAAIkXgMAAiRHAar4AYcAA/NgAwAD9KkrAAIkjATXAAIkzAAABAF0DwAD8qQFgA8AA5MkBMcAAiTNgA8AA5MkANQAAAAEAWwEXwACJPoLAAIk8wGq+b2GBwACJR8BqvinAAPzWNQAAAAEAWwEcwACJW4LAAIlZwGq+b4NeAwADkxbAAIlsLmHAAPzYLgDAAPzONQAAAAEAWwEcwACJgoLAAImAwGq+b4NeAwADFsAAiZAuYcAA/NiBwACJmMBqvimAwACJpcBqvgAAwAD8zoIAwGq+bwbAANSggnDAAIm0wACJucAAilgAAIMXAAAAAQPAAInBwACKWAAAAAEBAcAAickAAACWJmADwAD9UQAAYAPAAPo/AT4DTsAAidzAAIngAACXbGADwAD8BQEWwACJ5y5hwAD82EXAAInzAcAAifzAAIn+AABiYAPAAPwFAZMBHMAAigWCwACKA8Bqv45jAQABgcAAigfAar9qAMAA/TIBisAAig7Aar+OHMAAigyCwACKDsBqv45kAQABlADAAP0qPgFJwACKGRzAAIolHMAAiiEuSwEAAYLAAIoiwGq/jgDAAPy4SAEAAYDAAIoowGq/TwDAAP1eSsAAijEBKT9KwACKSAEqBsAA1KGCcMAAil3AAIpiwACLSwAAn8UAAAABA8AAimnAAItLAAAAAQABwACKcgAAAJ/GYAPAANBtAWoAYAPAAP0OeQBcAT4DPSMcwACKiIDAAIqBwGrAU0gBAAErAMAA/V6IwACKgcBqwFMewACKkMAA0G8AAAAAKwFgA8AA0G1OwACKosAAiqQAAGJgA8AA/AUBFsAAiqsuYcAA/NhDwACKtxzAAIrAgcAAir7AasCqgJcBAAGUAMAA/TQ+BU7AAIrRwACK1QAAn8dgA8AA/AUBHMAAit6AwACK18BqwFOfyAEAAYHAAIrmwGrAqgDAANByPYnAAIrwwGrAqhzAAIrygcAAivDAasCqgY0BAAGUAMAA/StOwACLAsAAiwYAAJ/JYAPAAOTJARzAAIsMLksBAAGBwACLDcBqwKoAwAD8uD0cwACLGy6AvwIAAoHAAIscwGrAqhzAAIslLksBAAGCwACLJsBqwOgAwAD8uADAAPy5PRzAAIs2LoC/AgACgsAAizfAasDog8AAiz7AasFAAMAA/LkGwADUooJwwACLUMAAi1XAAJQ0AACDXgAAAAEDwACLXcAAlDQAAAAEAwTAAItiAAAAamADwAD8BQDAAIttAAAAgoxgA8AA/AUAwACLhAAAIJYuXQPAAPxnAWADwADkyQDAAIuVAAAAn85gA8AA/AUBasAAi6FgA8AA/AUJAFwBPgtJwACLwCIiHMAAi8aTgJcBAAGAwACLyMBqweoAwAD9NAEcwACL14DAAIvRwGrB6oCXAQABgcAAi9nAasH5AMAA/TQBHMAAi+SBwACL4MBqwfmAlwEAARbAAIvmLmHAAPzYAMAA/TQ+Aj0ewACMAcAA+0YDAAOAwACMEcBqweqBwACMGMBqwfkWwACMHS5hwAD82ABAKsAAjEXAAIxKAD9JwACMVxzAAIxlg8AAjFvAasIgYwEAAZMAwAD9Mj4BPTDAAIxyH8AAjIPAAPtPBAAEg8AAjInAasIgkysnn84AP07AAIy8wACMwgABgO5gA8AA/AUBHMAAjMiBwACMxMBqwfmBjQEAAYDAAIzKwGrB6gDAAP0rScAAjNUcwACM8xzAAIzmFsAAjN+CwACM2sBqwglhwAD8ioGNAQABg8AAjOjAasIgAMAA/StjAQABhMAAjPXAasMiAMAA/TI+AT0wwACNBB7AAI0fwADOKQAAAAA/ScAAjTQcwACNPoTAAI04wGrDIkgBAAGTAMAA/ShKwACNRAA/ScAAjVElwACNWoLAAI1VwGrCCWADwADTwT4CTsAAjeXAAI31AAHAAHj4YAPAANPBASbAAI38AILAAI33wGrCCWADwADTwUnAAI4VHMAAjjEWwACOHi7AAG7GwADUj0gBAAEWwACORIXAAI40wGrD88AAbsbAANPEAMAA/Sg+AUnAAI5iIhzAAI5thMAAjmfAasMiYwEAATcKAMAA/TIAIRzAAI6OFsAAjoeFwACOd8Bqw/OCi8AA08ZIAQABFsAAjpYugovAANSRAMAA1RI+Aj0ewACOscAAyx0FAAUmwACOuwCCwACOtsBqwgldA8AA/KkBYAPAAOTJg8AAjs3AasIgLoDAAI7ewGrB6oTAAI7lwGrDIgBKwACO9wBJwACPDhzAAI8kFsAAjx4WwACPFy6Ci8AA1JG23MAA06vAANUKwABuxcAA06sGAAYcwACPVhzAAI9BgMAAjzvAasHqg4gBAAEWwACPQy7AAG7GwADUjwDAAP0sZAEAARbAAI9dLqmRwADUkADAAP0qHMAAj36EwACPeMBqwyKDiAEAARbAAI+ALsAAbsbAANSPAMAA/SwWwACPtxbAAI+whcAAj6DAasPzgovAANPGttzAANOrwADVChzAAI/pHMAAj9SDwACPysBqwiCDiAEAARbAAI/WLsAAbsbAANSPAMAA/SxkAQABFsAAj/uFwACP68Bqw/OpkcAA08UAwAD9Kh7AAJAewADLKgEAAS4AHsAAkD/AAMsqAQABgsAAkEXAasIJAADAANPRPgFKwACQWQA/ScAAkHgcwACQkxbAAJCMhcAAkHzAasPzgovAANPGSAEAARbAAJCbLoKLwADUkQDAANUSPgVOwACRccAAkXwAAcAAePldA8AA/KkBYAPAAOTJASbAAJGDAILAAJF+wGrCCV0DwAD8qQFgA8AA5MlOwACRo8AAka4AAcAAePpgA8AA440BHMAAkbAuwAB498AA06sBAAGEwACRvMBqwyIAwADUmUXAAJHMAcAAkdXAAJHXAABiYAPAAPwFAZMBHMAAkd4UwACR3MBqxs8IAGMBAAGEwACR4MBqwyIAwAD9MgEVwACR58Bqxs8IHMAAkegUwACR58Bqxs8IAGQBAAGUAMAA/So+AT0cwACSAofAAJH4wGrGlYC/AgACFMAAkgPAasbPCAAcwACSEobAAJIIwGrGXEsBAAEcwACSHYPAAJITwGrCIGQBAAEUwACSH8Bqxs8IAADAAP0qAMAA/LgAwAD8uUXAAJI1AcAAkj7AAJJAAABiYAPAAPwFAYDAAJJCwGrB6gEcwACSSxTAAJJJwGrHjwgAYwEAAYHAAJJNwGrB+QDAAP0yARXAAJJSwGrHjwgcwACSUxTAAJJSwGrHjwgAZAEAAZQAwAD9Kj4BPRzAAJJnLoC/AgACFMAAkmjAasePCAAcwACSd4fAAJJtwGrGlUsBAAEcwACSehTAAJJ4wGrHjwgAgY0BAAGAwACSfMBqweoAwAD9KwDAAPy4AMAA/LlKwACSlgA/P07AAJK2AAAAn89dA8AA/KkBWwBOwACSyQAAAJ/QYAPAAPwFAEnAAJLZJcAAkuKCwACS3cBqwgldA8AA/KkBYAPAAOTJPgI9jcAAkvzAashTFMAAkwjAasIJAgFdA8AA/KkBYAPAAOTJPY7AAJMUwGrIZoPAAJMhwGrCID4CPY3AAJM/wGrIUxzAAJNgHMAAk1CCwACTS8BqwgmWLwEAAYPAAJNVwGrCIADAAPyBgK0BAAABhV4qwAD8fT2OwACTf8BqyGaTScAAk5kcwACTsBzAAJOohsAAk53AashmZAEAAYTAAJOqwGrDIgDAAP0qgJcBAAEWwACTvIXAAJOywGrIU2HAAPzYAMAA/TQ+AT0wwACTzB7AAJPnwADOKQAAAAA/PR7AAJQBwADLHQUABYXAAJQGwGrIU4bAAJQRwGrIZi6AwACUI8BqweqEwACUKsBqwyIABsAA1KOCcMAAlDnAAJRLwACUlgAAgaUAAAABA8AAlFDAAJSWAAAAAQEBwACUVgAAAIGmYQMBYAPAAOTJYAPAAPo/AABdA8AA/GcBYAPAAOTJAUrAAJRzAR/AAJR3wADNPAIBYAPAAOTJAi6AwACUlMBqydEABsAA1KSCcMAAlJvAAJStwACU5AAAlkQAAAABA8AAlLHAAJTkAAAAAQEBwACUtgAAAIOjYAPAAPwFAABdA8AA/GcBYAPAAOTJAUrAAJS8AR/AAJTAwADM9wMBYAPAAOTJAy6TgMAAlOLAaspGAAbAANSlgnDAAJTpwACU+8AAlVQAAJZFAAAAAQPAAJUEwACVVAAAAAEBAcAAlQoAAACW/2EDAWADwADkyWADwAD6PwAAXQPAAPxnAWADwADkyQFKwACVKgEfwACVLsAAzYICAWADwADkyQIugMAAlU/AasqzAAbAANSmgnDAAJVZwACVa8AAlaUAAJYvAAAAAQPAAJVvwACVpQAAAAEBAcAAlXQAAACDo2ADwAD8BQAAXQPAAPxnAWADwADkyQFKwACVegEfwACVfsAAzPcDAWADwADkyQMugMAAlZ3AassoKwAGwADUp4JwwACVqsAAlbzAAJYVAACWQwAAAAEDwACVxcAAlhUAAAABAQHAAJXLAAAAlv9hAwFgA8AA5MlgA8AA+j8AAF0DwAD8ZwFgA8AA5MkBSsAAlesBH8AAle/AAM26AgFgA8AA5MkCLoDAAJYQwGrLlQAGwADUkoJwwACWGsAAljDAAJZjAQCYiAAAAAEDwACWOcAAlmMAAAAAAAAAXQPAAPxnAWADwADkyQFKwACWPAEfwACWQMAAzqgBAWADwADkyQEuAAbAANSognDAAJZowACWesAAlqMAAJxqAAAAAQPAAJZ/wACWowAAAAAAAABdA8AA/NoCYAPAAPwFYAPAAOTJAUrAAJaFAR/AAJaJwADOngEBYAPAAOTJAS4ABsAA1KmCcMAAlqjAAJa6wACXUQAAn8sAAAABA8AAlsLAAJdRAAAAAgECwACWxwAAAGpgA8AA/AUAwACW0wAAAIKMYAPAAPwFAWoAYAPAAP0OeQBdA8AA/GcBYAPAAOTJAT4CPR7AAJbqwAD7RgMAA4DAAJb6wGrMtoHAAJcBwGrMxRbAAJcLLmHAAPzYAErAAJcYAR/AAJcjwADM9wMBYAPAAOTJAy6AwACXQsBqzLaBwACXScBqzMUABsAA1JOCcMAAl1bAAJdswACXnQEAXAAAAAEDwACXdcAAl50AAAAAAAAAXQPAAPyiAWADwADkyQFKwACXeAEfwACXfMAA3mABAWADwADkyQEuAAbAANSqgnDAAJeiwACXsMAAmA8AAICtAAAAAQPAAJe2wACYDwAAAAEAAAHAAJe9AAAAhV5gA8AA+j8BasAAl8dgA8AA+j93XQPAAPypAWADwADkyQE+AUrAAJfUAR7AAJffwAD8rwIBYAPAAOTJAS4BhV6AwACYAsBqzcMGwADUq4JwwACYFMAAmCHAAJhVAACVGQAAAAEDwACYJsAAmFUAAAAAAAAAXQPAAP2cAWADwADkyQE+AUrAAJgvAR7AAJg6wADBGQEBYAPAAOTJAS4ABsAA1KyCcMAAmFrAAJhfwACY2wAAg/gAAAABA8AAmGbAAJjbAAAAAQEBwACYbAAAAIGmYQMBYAPAAOTJXAAAXAE+Ak7AAJiKwACYjgAAl2xgA8AA/AUBFsAAmJUuYcAA/NhFwACYoQHAAJiqwACYrAAAYmADwAD8BQGTARzAAJizgsAAmLHAas7RYwEAAYHAAJi1wGrOrQDAAP0yAYrAAJi6wGrO0RzAAJi7gsAAmLrAas7RZAEAAZQAwAD9Kj4BPRzAAJjIgMAAmMfAas6TIAEAARzAAJjNLksBAAGCwACYzsBqztEAwAD8uAAABsAA1K2CcMAAmODAAJjowACZ9QAAlkAAAAABA8AAmO7AAJn1AAAAAQEBwACY9wAAIIcdYQMCYAPAAOTJYAPAAOTJYAPAAOTJAABgA8AA5MkBPgVOwACZKsAAmS4AAJdsYAPAAPwFARbAAJk1LmHAAPzYScAAmUEcwACZSYHAAJlFwGrPqkgBAAGTAMAA/Sg9MMAAmU8ewACZasAAzicAAAAAP07AAJl/wACZhQAAgJZgA8AA5MkBHMAAmYsuSwEAAZMAwAD8uEXAAJmUAcAAmZ3AAJmfAABiYAPAAPwFAZQBHMAAmaaDwACZpMBq0CNjAQABgcAAmajAas+qAMAA/TIBi8AAma/AatAjHMAAma2DwACZr8Bq0CNkAQABlADAAP0qPgE9isAAmbrAas/6HMAAmcmAwACZwsBqz4AgAgACgsAAmcrAas/6HMAAmdUuSwEAAYPAAJnWwGrQIwDAAPy4AABKwACZ5QGCwACZ7MBqz/oGwADUroJwwACZ+sAAmfzAAJrXAACDWQAAAAEDwACaA8AAmtcAAAEAAIJ2YAPAAP1RAVsCAgLAAJoGAAAAljxfAwAAAMAAmhYAAACHHWEDAl8DAABgA8AA5MlfAwAAAABfAwAAAT4DTsAAmkrAAJpOAACXbGADwAD8BQEWwACaVS5hwAD82EXAAJphAcAAmmrAAJpsAABiYAPAAPwFAZMBHMAAmnODwACaccBq0VVjAQABgsAAmnXAatExAMAA/TIBi8AAmnzAatFVHMAAmnqDwACafMBq0VVkAQABlADAAP0qPgE9iMAAmofAatD/HMAAmp2BwACalsBq0Q0gAgACgMAAmp7AatD/HMAAmrAuSwEAAYPAAJqxwGrRVQDAAPy4AABKwACawAGAwACax8Bq0P8GwADUr4JwwACa3MAAmujAAJs1AACAqwAAAAEDwACa7sAAmzUAAAEAAIJ2YAPAAP1RAVsBAQHAAJrxAAAAgaZhAwFgA8AA5MlfAwAAAABdA8AA/GcBXwMAAAFKwACbDgEewACbEsAAzQsCAmADwADkyV8DAAACLoDAAJszwGrSMQAGwADUsIJwwACbOsAAm0bAAJugAACEjwAAAAEDwACbT8AAm6AAAAEAAIJ2YAPAAP1RAVsBAQHAAJtcAAAAgaZhAwFgA8AA5MldA8AA/GcBXwMAAAAAXQPAAPxnAV8DAAABSsAAm3kBH8AAm33AAM1QAgJgA8AA5MlfAwAAAi6AwACbnsBq0rIABsAA1LGCcMAAm6XAAJuqwACcSAAAljYAAAABA8AAm6/AAJxIAAAAAQEBwACbtQAAAIGmYQMBYAPAAOTJYAPAAPo/AABgA8AA+j8BPgNOwACb08AAm9cAAJdsYAPAAPwFARbAAJveLmHAAPzYRcAAm+oBwACb88AAm/UAAGJgA8AA/AUBkwEcwACb/ILAAJv6wGrTdmMBAAGBwACb/sBq01IAwAD9MgGKwACcBcBq03YcwACcA4LAAJwFwGrTdmQBAAGUAMAA/So+AUnAAJwQIRzAAJwWgMAAnBXAatMuIAEAARzAAJwbLksBAAGCwACcHMBq03YAwAD8uAAASsAAnCEBKj9KwACcOQEpBsAA1LKCcMAAnE3AAJxSwACc7QAAgdQAAAABA8AAnFXAAJztAAAAAQEBwACcWwAAAIGmYQMBYAPAAOTJYAPAAPo/AABgA8AA+j8BPgNOwACcecAAnH0AAJdsYAPAAPwFARbAAJyELmHAAPzYRcAAnJABwACcmcAAnJsAAGJgA8AA/AUBkwEcwACcooLAAJygwGrUgWMBAAGBwACcpMBq1F0AwAD9MgGKwACcq8Bq1IEcwACcqYLAAJyrwGrUgWQBAAGUAMAA/So+AUnAAJy2HMAAnLuAwACcusBq1DkgAQABHMAAnMAuSwEAAYLAAJzBwGrUgQDAAPy4AABKwACcxgEpP0rAAJzdASoGwADUs4JwwACc8sAAnPrAAJ4ZAACWOgAAAAEDwACdBMAAnhkAAAACAQHAAJ0KAAAAlv9hAwFgA8AA5MlgA8AA+j8AAcAAnSoAACCWO2EDAGADwADkyQFqAGADwAD9DnlgA8AA5MkBPgROwACdP8AAnUMAAJdsYAPAAPwFARbAAJ1KLmHAAPzYRcAAnVYBwACdX8AAnWEAAGJgA8AA/AUBkwEcwACdaIPAAJ1mwGrVp2MBAAGCwACdasBq1YMAwAD9MgGLwACdccBq1accwACdb4PAAJ1xwGrVp2QBAAGUAMAA/So+Ak7AAJ2AwACdiAAAliZgA8AA5MkBHMAAnY4uSwEAAYPAAJ2PwGrVpwDAAPy4ScAAnZkcwACdoYDAAJ2dwGrVQyABAAGEwACdosBq1gAAAErAAJ2sAYTAAJ2zwGrWAD9JwACdxiEcwACd0YHAAJ3KwGrVXUgBAAErAMAA/V5KwACd2gEcwACd54HAAJ3hwGrVXSAAAAAAAD89MMAAne8ewACeCsAAzicAAAAABsAA1LSCcMAAnh7AAJ4mwACfWwAAlj8AAAABA8AAni/AAJ9bAAAAAgEBwACeNQAAAJb/YQMBYAPAAOTJYAPAAPo/AAHAAJ5VAAAgljthAwBgA8AA5MkBagBgA8AA/Q55YAPAAOTJAT4ETsAAnmrAAJ5uAACXbGADwAD8BQEWwACedS5hwAD82EXAAJ6BAcAAnorAAJ6MAABiYAPAAPwFARzAAJ6SgsAAno7AatcTgY0BAAGUAMAA/SsBHMAAnpmDwACel8Bq1zeBbQEAAZMAwAD9NQGLwACeocBq1zccwACen4PAAJ6hwGrXN4GNAQABlADAAP0rPgJOwACesMAAnrgAAJYmYAPAAOTJARzAAJ6+LksBAAGDwACev8Bq1zcAwAD8uEnAAJ7JHMAAntGAwACezcBq1tMgAQABhMAAntLAateiAAA+AUrAAJ7mAYTAAJ7twGrXoj9JwACfCCEcwACfE4HAAJ8MwGrW7UgBAAErAMAA/V5KwACfHAEcwACfKYHAAJ8jwGrW7SAAAAAAAD89MMAAnzEewACfTMAAzicAAAAABsAA1LWCcMAAn2DAAJ9owAChbgAAlkIAAAABA8AAn3PAAKFuAAAAAgEBwACfeQAAAJb/YQMBYAPAAOTJYAPAAPo/AAHAAJ+ZAAAgljthAwBgA8AA5MkBagBgA8AA/Q55YAPAAOTJAT4HTsAAn67AAJ+1AACBdlsBK07AAJ/GwACf1AAAwABxvGADwAD6PwEqTsAAn+XAAJ/pAACXbGADwAD8BQEWwACf8C5hwAD82EXAAJ/8AcAAoAXAAKAHAABiYAPAAPwFAZMBHMAAoA6FwACgDMBq2QJjAQABhMAAoBDAatjeAMAA/TIBjcAAoBfAatkCHMAAoBWFwACgF8Bq2QJkAQABlADAAP0qPgJOwACgJsAAoC4AAJYmYAPAAOTJARzAAKA0LksBAAGFwACgNcBq2QIAwAD8uEnAAKA/HMAAoEeAwACgQ8Bq2HcgAQABhsAAoEjAatlbAAA+A0nAAKBcg8AAoGDAatjHPgE9MMAAoHsewACglsAAzigAAAAAPz2KwACgs8Bq2LeGwACgvMBq2Vs9i8AAoM3AatjHKT9JwACg9YPAAKD5wGrYx0rAAKEIASbAAKEIAYLAAKEPwGrYt2ADwADkyT9JwAChGyEcwAChJoHAAKEfwGrYkUgBAAErAMAA/V5KwAChLwEcwAChPIHAAKE2wGrYkSAAAAAAAD89MMAAoUQewAChX8AAzicAAAAABsAA1LaCcMAAoXPAAKF7wAChrAAAljkAAAABA8AAoYTAAKGsAAAAAQEBwAChiQAAACdgA8AA/AUAAGADwADkyQE+AUrAAKGWARzAAKGhLksBAAGAwAChosBq2o0AwAD8uAbAANS3gnDAAKGxwAChtsAAohIAAFYAAAABA8AAobnAAKISAAAAAQEBwAChwgAAIICWYAPAAOTJAABcAT4BPTDAAKHPH8AAodnAAPuXAQABJ8AAdlAABsAA1LiCcMAAohfAAKIcwACihQAAgKUAAAABA8AAoiLAAKKFAAAAAQEBwACiNQAAIICWXQPAAPxnAWADwADkyQAAXAE+AT0wwACiQh/AAKJMwAD7lwEAASfAAHZQAAbAANS5gnDAAKKKwACij8AAov4AAJ7VAAAAAQPAAKKVwACi/gAAAAICAsAAopoAAAAnYAPAAPwFAMAAoqkAACCAlmADwADkyQAAXAE+AT0wwACith/AAKLAwAD7lwEAASfAAHj0AAbAANS6gnDAAKMDwACjCMAAo4UAAJ/ZAAAAAQPAAKMRwACjhQAAAAICAsAAoxYAAAAnYAPAAPwFAMAAoy8AACApXQPAAPxnAWADwADkyQAAXAE+AT0wwACjPR/AAKNHwAD7lwEAASfAAHj0AAbAANS7gnDAAKOKwACjj8AApCwAAICuAAAAAQPAAKOTwACkLAAAAAEAAcAAo5kAAACbIWEDAmADwADkyWADwADkyWADwAD8BQFqAGADwAD9DnkAXAE+AknAAKO/HMAAo8uAwACjw8Bq3HRIAQABKwDAAP1ePgE9MMAAo9wnwAB4/j89HsAApBXAAM69AgFgA8AA5MkCLoDAAKQgwGrcdAAGwADUvIJwwACkMcAApDXAAKU0AACAuwAAAAEDwACkPMAApTQAAAACAQLAAKRFAAAgliZgA8AA5MkAwACkUwAAAGpgA8AA/AUBasAApFtgA8AA/AUJAGADwAD8BQE+A0nAAKRlHMAApG+BwACkacBq3SSBbQEAARbAAKR3LmHAAPzYAMAA/TU+AUrAAKSHARzAAKSOlIHEAAAAAMAA/ChJwACknRzAAKSngcAApKHAat0kYwEAAZMAwAD9Mj4BPYnAAKS0wGrdJJM/RcAApMkBwACk0sAApNQAAGJgA8AA/AUBgcAApNbAat0kARzAAKTfgsAApN3Aat26YwEAARbAAKTmLmHAAPzYAMAA/TIBisAApO7Aat26HMAApO+CwACk7sBq3bpkAQABlADAAP0qPgFJwACk+xzAAKUHHMAApQMuSwEAAYLAAKUEwGrdugDAAPy4SAEAAYDAAKUKwGrdFADAAP1eSsAApRMBgsAApRrAat26P0rAAKUnARzAAKUulIHEAAAAAMAA/CgGwADUvYJwwAClOcAApT3AAKZZAACWYAAAAAEDwAClSMAAplkAAAACAQLAAKVRAAAgliZgA8AA5MkAwAClXwAAAGpgA8AA/AUBasAApWdgA8AA/Q55AGADwAD8BQE+A0nAAKV0IhzAAKV+gcAApXjAat6wSAEAASsAwAD9KAEcwAClj4HAAKWJwGresIFtAQABFsAApZcuYcAA/NgAwAD9NT4BPYnAAKWnwGresBzAAKW7FsAApbQuYcAA/NiBjQEAAZQAwAD9K0nAAKXLHMAApdWBwAClz8Bq3rBjAQABkwDAAP0yPgFKwACl4gEcwACl6ZSBxAAAAADAAPwoP0XAAKX3AcAApgDAAKYCAABiYAPAAPwFAYHAAKYEwGresAEcwACmDYLAAKYLwGrfeoFtAQABkwDAAP01AYrAAKYTwGrfehzAAKYUgsAAphPAat96gY0BAAGUAMAA/Ss+AUnAAKYgHMAApiwcwACmKC5LAQABgsAApinAat96AMAA/LhIAQABgMAApi/Aat6gAMAA/V5KwACmOAGCwACmP8Bq33o/SsAApkwBHMAAplOUgcQAAAAAwAD8KAbAANS+gnDAAKZewACmZsAApsEAAIYXAAAAAQPAAKZwwACmwQAAAAAAAABgA8AA5MkBPgE9MMAApnkfwACmg8AA+5cBAAEnwAB2UQAGwADUv4JwwACmxsAAps7AAKcwAACf2AAAAAEDwACm1sAApzAAAAABAQHAAKbbAAAAJ2ADwAD8BQAAYAPAAOTJAT4BPTDAAKboH8AApvLAAPuXAQABJ8AAdlEABsAA1MCCcMAApzXAAKc6wACnsAAAlv4AAAABA8AAp0XAAKewAAAAAQEBwACnSwAAAJb/YQMBYAPAAOTJYAPAAPo/AABcAT4BPTDAAKdoH8AAp3LAAPuXAQABJ8AAdlEABsAA1MGCcMAAp7XAAKe6wACoMAAAlwEAAAABA8AAp8XAAKgwAAAAAQEBwACnywAAAJb/YQMBYAPAAOTJYAPAAPo/AABcAT4BPTDAAKfoH8AAp/LAAPuXAQABJ8AAdlEABsAA1JSCcMAAqDXAAKhBwAComwEAgxkAAAABA8AAqEfAAKibAAAAAAAAAGADwADkyQE+AknAAKhNHMAAqFgWwACoUS5hwAD82ICXAQABkwDAAP00SsAAqF0BHMAAqGguSwEAAZMAwAD8uD89MMAAqHEewACojMAAzicAAAAABsAA1JWCcMAAqKDAAKiswACpDgEAgegAAAABA8AAqLHAAKkOAAAAAAAAAGADwADkyQE+AknAAKi3HMAAqMIWwACouy5hwAD82ICXAQABkwDAAP00SsAAqMcBHMAAqNIuSwEAARzAAKjaFsAAqNMuYcAA/NiBjQEAAZQAwAD9KwDAAPy4Pz0wwACo5B7AAKj/wADOJwAAAAAGwADUloJwwACpE8AAqR/AAKm2AQCAwwAAAAEDwACpJsAAqbYAAAAAAAAAYAPAAOTJAT4DScAAqSwcwACpNxbAAKkwLmHAAPzYSAEAAZQAwAD9KErAAKk9ARzAAKlILksBAAGTAMAA/Lg/ScAAqVEcwACpXBbAAKlVLmHAAPzYSAEAAZMAwAD9KD0wwACpYh7AAKl9wADOJwAAAAA/PTDAAKmOHsAAqanAAM4oAAAAAAbAANTCgnDAAKm7wACpx8AAqrQAAIFYAAAAAQPAAKnOwACqtAAAAAIBAsAAqdMAAABqYAPAAPwFAMAAqd8AAACCjGADwAD8BQFqAGADwAD9DnkAYAPAAOONAT4FPYnAAKnrwGrjlB7AAKn8wAD7RgMAA4DAAKoMwGrjhYHAAKoTwGrjlBbAAKodLmHAAPzYAE7AAKouwACqNQAAYWADwAD8BQEcwACqO4HAAKo3wGrjlIGNAQABgMAAqj3AauOFAMAA/StOwACqVMAAqlsAAIF2YAPAAOONARzAAKpdLsAAePfAANOrAQABgsAAqmnAauPsAMAA1Jk9HMAAqn2DwACqdsBq5CCDXgQABJOCwACqicBq4+wugMAAqpfAauOFAMAA/M5KwACqowGDwACqqsBq5CAGwADUw4JwwACqucAAqr7AAKs9AACf2wAAAAEDwACqxMAAqz0AAAACAgLAAKrJAAAAJ2ADwAD8BQDAAKriAAAgg8xdA8AA/GcBYAPAAOTJAABcAT4CTsAAqvjAAKr8AAGCjGADwAD8BQEcwACrDhbAAKsHgcAAqv7AauTHYcAA/IpkAQABgMAAqxDAauS4AMAA/So9HMAAqxsug14DAAOAwACrJMBq5LiCwACrK8Bq5OSBwACrMMBq5McAwADUogbAANTEgnDAAKtCwACrR8AArAAAAJuxAAAAAQPAAKtQwACsAAAAAAMCA8AAq1UAAABqYAPAAPwFAMAAq2AAAACCjGADwAD8BQDAAKtuAAAgwABDPWADwADkyQFqAGADwAD9DnkAXAE+Aj0ewACri8AA+0YDAAOAwACrm8Bq5XeBwACrosBq5YYWwACrrC5hwAD82ABFwACruQHAAKvCwACrxAAAYmADwAD8BQGAwACrxsBq5XcBHMAAq8+DwACrzcBq5edjAQABgcAAq9HAauWGAMAA/TIBi8AAq9jAauXnHMAAq9aDwACr2MBq5edkAQABlADAAP0qPgE9HMAAq+cugL8CAAKDwACr6MBq5eeCwACr7cBq5ZYAwAD8uQAAare9AGq38QBquCMAarhVAGq4nABquPcAarlqAGq5ywBquloAarsDAGq8UwBqvdcAar8lAGrAKQBqwcAAasmnAGrKHABqyokAasr+AGrLawBqy+AAaswzAGrMjABqzUYAas2YAGrOFABqzmkAas9WAGrQyQBq0fsAatJ8AGrTBABq1A8AatUZAGrWqQBq2E0AatpjAGraxABq2xoAatt4AGrb3gBq3EoAatzqAGredgBq4C4AauB6AGrg1QBq4TUAauGVAGriEwBq4qsAauNbAGrkjgBq5U0AauZqAAAANgLAANTKgnDAAKwFwACsFMAA1F8HwAB5AAAAAWABwAD9UQABXQHAAPypAWADwADl6gABBcAA1QYAAAAABAAAAwAAAAAAAAAAAGADwADUygE/AQkBAMAA/WcAAAAANgbAANTMgnDAAKxHwACsT8AArGEBAsAAbsYAAAABA8AArGHAAKxhAAAAAAAAAGADwAD8BQAGwADUzYJwwACsZcAArG3AAKx6AQKpkQAAAAEDwACsesAArHoAAAAAAAAAYAPAAPwFAAbAANTOgnDAAKx+wACsjsAArJQBAoKLAAAAAQPAAKyUwACslAAAAAAAAABgA8AA1QcABsAA1NaCcMAArJnAAKynwACsvgACwAB498AA06sAAAABA8AArLLAAKy+AAAAAQEBwACstwAAAGFgA8AA/AUAAGADwADjlwAGwADU14JwwACsw8AArM/AAKz/AACWRgAAAAEDwACs28AArP8AAAEAAIJ2YAPAAP1RAVsAAAAAXQPAAPxnAV8DAAABSsAArOEBH8AArOXAAM4aAQFfAwAAAS4ABsAA1NiCcMAArQTAAK0YwACthAAAlj0AAAABA8AArSLAAK2EAAAAAQEBwACtNwAAIIPWXQPAAPxnAWADwADl6gAAXQPAAPxnAWADwADl6gFKwACtRwEewACtS8AAzfICAWADwADl6gIugMAArX7AaukMAAbAANTZgnDAAK2JwACtkcAArb8AAJY4AAAAAQPAAK2YwACtvwAAAQAAlvlgA8AA/VEBWwAAAABdA8AA/KkBXwMAAAFKwACtngEewACto8AA/LQBAmADwADl6l8DAAABLgAGwADVA4JwwACtw8AArczAAK47AgCDGQAAAAEDwACt0cAArjsAAAABAQHAAK3cAAAggJZgA8AA5eoAAFwBPgJJwACt6RzAAK35FsAArfIuYcAA/NhIAQABkwDAAP0oPTDAAK3/H8AArgnAAPtbAgACky4APz0cwACuLC6AvwIAApOAwACuMsBq6eAAwAD8uQbAANUEgnDAAK5AwACuScAArsUCAIHoAAAAAQPAAK5NwACuxQAAAAEBAcAArlgAACCAlmADwADl6gAAXAE+AknAAK5lHMAArnUWwACubi5hwAD82EgBAAGTAMAA/Sg9MMAArnsfwACuhcAA+1sCAAKTLgA/PRzAAK6oLoC/AgACHMAArrUWwACuri5hwAD82IGNAQABlADAAP0rgMAArrzAaupvAMAA/LkGwADU2oJwwACuysAArs7AAK+NAACf1gAAAAEDwACu2MAAr40AAAACAQLAAK7eAAAAlv9hAwFgA8AA5epgA8AA+j8AwACu/AAAAGpgA8AA/AUBasAArwRgA8AA/AUJAGADwAD8BQE+A0nAAK8OHMAArxiBwACvEsBq6zFjAQABkwDAAP0yPYnAAK8dwGrrMZM/RcAArywBwACvNcAArzcAAGJgA8AA/AUBgcAArznAausxARzAAK9CgsAAr0DAauuFYwEAARbAAK9ELmHAAPzYAMAA/TIBisAAr0zAauuFHMAAr02CwACvTMBq64VkAQABlADAAP0qPgFJwACvWRzAAK9hgMAAr13AausYIAEAARzAAK9mLksBAAGCwACvZ8Bq64UAwAD8uAAASsAAr2wBgsAAr3PAauuFP0rAAK+AARzAAK+HlIHEAAAAAMAA/CgGwADU24JwwACvksAAr5bAALB7AACf1wAAAAEDwACvpMAAsHsAAAACAQLAAK+qAAAAlv9hAwFgA8AA5epgA8AA+j8AwACvyAAAAGpgA8AA/AUBagBgA8AA/Q55AGADwAD8BQE+A0nAAK/W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DUgBAAGTAMAA/ShKwAC1DwA/ScAAtRwlwAC1JYLAALUgwGrx9GADwADTwT4CTsAAtbLAALXCAAHAAHj4YAPAANPBASbAALXJAILAALXEwGrx9GADwADTwUnAALXiHMAAtf4WwAC16y7AAG7GwADUzEgBAAEWwAC2EYXAALYBwGrz3sAAbsbAANPEAMAA/Sg+AUnAALYvIhzAALY6hMAAtjTAavMNYwEAATcKAMAA/TIAIRzAALZbFsAAtlSFwAC2RMBq896Ci8AA08ZIAQABFsAAtmMugovAANTOAMAA1RI+Aj0ewAC2fsAAyx0FAAUmwAC2iACCwAC2g8Bq8fRdA8AA/KkBYAPAAOXqg8AAtpzAavILLoDAALatwGrx1YTAALa0wGrzDQBKwAC2xgBJwAC23RzAALbzFsAAtu0WwAC25i6Ci8AA1M623MAA06vAANUKwABuxcAA06sGAAYcwAC3JRzAALcQgMAAtwrAavHVg4gBAAEWwAC3Ei7AAG7GwADUzADAAP0sZAEAARbAALcsLqmRwADUzQDAAP0qHMAAt02EwAC3R8Bq8w2DiAEAARbAALdPLsAAbsbAANTMAMAA/SwWwAC3hhbAALd/hcAAt2/AavPegovAANPGttzAANOrwADVChzAALe4HMAAt6ODwAC3mcBq8guDiAEAARbAALelLsAAbsbAANTMAMAA/SxkAQABFsAAt8qFwAC3usBq896pkcAA08UAwAD9Kh7AALftwADLKgEAAS4AHsAAuA7AAMsqAQABgsAAuBTAavH0AADAANPRPgFKwAC4KAA/ScAAuEccwAC4YhbAALhbhcAAuEvAavPegovAANPGSAEAARbAALhqLoKLwADUzgDAANUSPgVOwAC5QMAAuUsAAcAAePldA8AA/KkBYAPAAOXqASbAALlSAILAALlNwGrx9F0DwAD8qQFgA8AA5epOwAC5dMAAuX8AAcAAePpgA8AA45cBHMAAuYEuwAB498AA06sBAAGEwAC5jcBq8w0AwADU1kXAALmdAcAAuabAALmoAABiYAPAAPwFAZMBHMAAua8UwAC5rcBq9roIAGMBAAGEwAC5scBq8w0AwAD9MgEVwAC5uMBq9roIHMAAubkUwAC5uMBq9roIAGQBAAGUAMAA/So+AT0cwAC504fAALnJwGr2gIC/AgACFMAAudTAava6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A/oAawUEAGsGlABrCDgAawpOAGsKrwBrCwUAawtjAGsLyQBrDDUAawzVAGsOYQBrEBkAaxBlAGsQwABrESAAaxGAAGsR/gBrEpYAaxNGAGsUeQBrFTgAaxZVAAAANgLAANUHgnDAANRiwADUgsAA7CoDwAB5AQFqwADUY2ADwAD6BsABfjsAAWABwAD9UQABYAHAAOLTAQTAANUKgnDAANS5wADUvgm23MAA06sAYAPAANUkAAEFwADVI4JwwADUw8AA1MPAANTaAAAAA8AA1M7AANTaAAAAAQEBwADU1AAABLbcYAPAANUkAABgA8AA1QcBPwIIAcAA1QqAAMBrF7MJAcAA1MPAAP1nAAAAABMGwADVDYJwwADU+8AA1QPAANUyBAHAAHkCwADTqwFqwADU4GADwAD6BsABfjsAAAEDwADVE8AA1TIAAAABAQHAANUUAAAAElsAAGADwADVBwFKwADVHQEfwADVIcAA1SMBAAEmwADVLQGAwADVLcBrGCdgA8AA1SQABsAA1Q+CcMAA1VTAANVcwADVgAEAwABuawAAAAEDwADVasAA1YAAAAAAAAAAYAPAAPwFAUrAANVtARbAANVzFsAA1W0uttzAANOrwADVCsAAbmvAANUoBsAA1RCCcMAA1YTAANWMwADVpgEAg8EAAAABA8AA1ZXAANWmAAAAAAAAAGADwAD8BQFKwADVmAEWwADVnhbAANWYLrbcwADTq8AA1QqDwcAA/WQGwADVEoJwwADVqsAA1bjAANYJAwBIAAAAAQPAANW6wADWCQAAAAEBAcAA1cIAAACD1mADwAD9UQAAYAPAAPo/AUrAANXSASIlwADV2YDAANXTwGsZNGADwADVBwAewADV7MAA9eYCAAIWwADV9i623MAA06vAANUKFsAA1gMUwADV/cBrGTQAAWADwADVB7bcwADTq8AA1QoABsAA1ROCcMAA1g7AANYXwADXAwAAwABubQAAAAEDwADWIcAA1wMAAAACAALAANYnAAAAqZFgA8AA/AUBasAA1jdgA8AA/AUJwADWPgAAAGFgA8AA/AUBagBgA8AA/Q55AGADwADjBAE+Az0jHMAA1lSBwADWTcBrGe1IAQABKwDAAP0oicAA1k3AaxntHMAA1msWwADWXS7AAG5rwADVD4GNAQABgMAA1m3AaxnRAMAA/SsrAWADwAD8BT0ewADWgMAA078DAAMWwADWlxbAANaRLrbcwADTq8AA1QrAAG5rwADVKIDAANamwGsZ0YHAANa1wGsZ7QBKwADWwgEewADWzcAA4rMDAAMWwADW4i623MAA06vAANUKgMAA1unAaxnRgcAA1vjAaxntAAbAANUUgnDAANcIwADXEcAA2DoAAMAAeQMAAAABA8AA1xvAANg6AAAAAgACwADXIQAAAKmRYAPAAPwFAWrAANcxYAPAAPwFCcAA1zgAAABhYAPAAPwFAWoAYAPAAP0OeQBgA8AA4x8BPgM9IxzAANdOgcAA10fAaxsaSAEAASsAwAD9KInAANdHwGsbGhzAANd3HMAA12YWwADXWC7AAG5rwADVD4GNAQABgMAA12jAaxr+AMAA/SuGhwEAAWrAANeDYAPAAPwFFQDAAP0vKwFgA8AA/AU9HsAA15jAANO/AwADFsAA17IuwABua8AA1Q+AwADXwcBrGv4cwADX14HAANfQwGsbGoOIAQABasAA1+JgA8AA/AUVAMAA/SwASsAA1/gBHsAA2APAAN6xAwADFsAA2BkuttzAANOrwADVCoDAANggwGsa/oHAANgvwGsbGgAGwADVFYJwwADYP8AA2EnAANl+AACYKgAAAAEDwADYVMAA2X4AAAACAALAANhaAAAAqZFgA8AA/AUBasAA2GpgA8AA/AUJwADYcQAAAGFgA8AA/AUBagBgA8AA/Q55AGADwADjKAE+Az0jHMAA2IeBwADYgMBrHGxIAQABKwDAAP0oicAA2IDAaxxsHMAA2LgcwADYpxbAANiZLsAAbmvAANUPgY0BAAGAwADYqcBrHFAAwAD9K4aHAQABasAA2MVgA8AA/AUVAMAA/S8rAWADwAD8BT0ewADY2sAA078DAAMWwADY9C7AAG5rwADVD4DAANkDwGscUBzAANkZgcAA2RLAaxxsg4gBAAFqwADZJWADwAD8BRUAwAD9LABKwADZOwEewADZRsAA3wADAAMWwADZXS623MAA06vAANUKgMAA2WTAaxxQgcAA2XPAaxxsAAbAANUWgnDAANmDwADZlMAA2uQAAMAAeQQAAAABA8AA2abAANrkAAAAAgACwADZrAAAAKmRYAPAAPwFAWrAANm8YAPAAPwFCcAA2cMAAABhYAPAAPwFAWoAYAPAAP0OeQBgA8AA4zIBPgM9IxzAANnZgcAA2dLAax3ASAEAASsAwAD9KInAANnSwGsdwBzAANoCHMAA2fEWwADZ4y7AAG5rwADVD4GNAQABgMAA2fPAax2kAMAA/SuGhwEAAWrAANoeYAPAAPwFFQDAAP0vKwFgA8AA/AU9HsAA2jPAANO/AwADFsAA2kQuwABua8AA1Q+AwADaU8BrHaQcwADacYHAANpqwGsdwIOIAQABasAA2oRgA8AA/AUVAMAA/SwASsAA2poBHsAA2qXAAN9PAwADFsAA2sMuttzAANOrwADVCoDAANrKwGsdpIHAANrZwGsdwAAGwADVF4JwwADa6cAA2vPAANxtAADAAHkFAAAAAQPAANr+wADcbQAAAAIAAsAA2wQAAACpkWADwAD8BQFqwADbFGADwAD8BQnAANsbAAAAYWADwAD8BQFqAGADwAD9DnkAYAPAAOM7AT4EPSMcwADbMYHAANsqwGsfFEgBAAErAMAA/SiJwADbKsBrHxQcwADbYhzAANtRFsAA20MuwABua8AA1Q+BjQEAAYDAANtTwGse+ADAAP0rhocBAAFqwADbb2ADwAD8BSEAwAD9LysBYAPAAPwFPR7AANuEwADTvwMAAxbAANueLsAAbmvAANUPgMAA263Aax74HMAA28OBwADbvMBrHxSDiAEAAWrAANvPYAPAAPwFIQDAAP0sAD0ewADb5cAA08ACAAKAwADb+8BrHvhqwADcFGADwAD8BSEASsAA3CoBHsAA3DXAAN+eAwADFsAA3EwuttzAANOrwADVCoDAANxTwGse+IHAANxiwGsfFAAGwADVGIJwwADccsAA3H3AAN38AADAAHkGAAAAAQPAANyJwADd/AAAAAIAAsAA3I8AAACpkWADwAD8BQFqwADcn2ADwAD8BQnAANymAAAAYWADwAD8BQFqAGADwAD9DnkAYAPAAONEAT4EPSMcwADcvIHAANy1wGsgi0gBAAErAMAA/SiJwADctcBrIIscwADc7RzAANzcFsAA3M4uwABua8AA1Q+BjQEAAYDAANzewGsgbwDAAP0rhocBAAFqwADc+2ADwAD8BSEAwAD9LysBYAPAAPwFPR7AAN0QwADTvwMAAxbAAN0qLsAAbmvAANUPgMAA3TnAayBvHMAA3U+BwADdSMBrIIuDiAEAAWrAAN1cYAPAAPwFIQDAAP0sAD0e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5sABE5oDAIC/AAAAAQPAARLpwAETmgAAAAICAsABEu4AAAAnYAPAAPwFAMABEvkAACCAlmADwAD8BQAAXAE+AknAARMGIhzAARMQgMABEwrAbB6gYwEAAZMAwAD9MgEcwAETHYDAARMXwGweoIFtAQABFsABEyAuYcAA1SoAwAD9NT4BPTDAARMwH8ABEzrAAPtbAwADgMABE0vAbB6gLicnAD89HMABE2wuwAB5W8AA06sCAAKAwAETfsBsHqAewAEThcAA07wBAAGBwAETj8BsHq8AAMAA1tcGwADW04JwwAETn8ABE6TAARVFAACDXgAAAAEDwAETrMABFUUAAAAEAwTAAROxAAAAamADwAD8BQDAARO8AAAAgoxgA8AA/AUAwAETygAAIIPMXQPAAPxnAVsAwAET2QAAAJ/OYAPAAPwFAWrAARPlYAPAAPwFCQBcAT4BScABE+8lwAET/ILAARPzwGwfp2ADwADLMD4EPYnAARQSwGwflx7AARQjwAD7RgMAA4DAARQzwGwfiIHAARQ6wGwflxbAARRELmHAANUqAE7AARRXwAEUXgAAYWADwAD8BQEcwAEUZIHAARRgwGwfl4GNAQABgMABFGbAbB+IAMAA/StOwAEUd8ABFIEAAMAAeUdgA8AA/AUBHMABFJYWwAEUiC6pkcAA09lkAQABHMABFJ6AwAEUmMBsH4iDiAEAAWrAARSrYAPAAPwFIQDAAP0sAMAA/So9HMABFMIuwAB5RsAA06sEAAQUwAEU0MBsH6cCAWADwADLMIXAARTawGwgXoTAARTlwGwgKoPAARTtwGwfuQDAANVHPgE9HcABFRKDXgQABIDAARUbwGwfiIHAARUiwGwflybAARUnAYLAARUnwGwfp10DwAD8ZwFgA8AA/AWDwAEVMcBsH7kAwADUEQbAANbagnDAARV/wAEVh8ABFcUBAMAAbsYAAAABA8ABFZrAARXFAAAAAAAAAGADwAD8BQE+AUrAARWgAWrAARWyYAPAAPwFIQbAANbVgnDAARXpwAEV9MABFjMAAMAAePfAANOrAAAAAQPAARX/wAEWMwAAAAEBAcABFgQAAABhYAPAAPwFAABgA8AA40QBPgFKwAEWEgEewAEWHcAA40gBAAGAwAEWKMBsIbUABsAA1taCcMABFjjAARY8wAEWmAAAwAB5WsAA06sA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NcBtIl4AwAD9MgGLwABEPMBtIoIcwABEOoPAAEQ8wG0igmQBAAGUAMAA/So+Ak7AAERLwABEUwAAliZgA8AA+rcBHMAARFkuSwEAAYPAAERawG0iggDAAPy4ScAARGQcwABEbIDAAERowG0iHiABAAGEwABEbcBtItsAAErAAER3AYTAAER+wG0i2z9JwABEkSEcwABEnIHAAESVwG0iOEgBAAErAMAA/V5KwABEpQEcwABEsoHAAESswG0iOCAAAAAAAD89MMAARLoewABE1cAAzicAAAAABsAA2IyCcMAAROnAAETwwABGIwAAlj8AAAABA8AARPnAAEYjAAAAAgEBwABE/wAAAJb/YQMBYAPAAPq3YAPAAPo/AAHAAEUdAAAgljthAwBgA8AA+rcBagBgA8AA/Q55YAPAAPq3AT4ETsAARTLAAEU2AACXbGADwAD8BQEWwABFPS5hwAD82EXAAEVJAcAARVLAAEVUAABiYAPAAPwFARzAAEVagsAARVbAbSPugY0BAAGUAMAA/SsBHMAARWGDwABFX8BtJBKBbQEAAZMAwAD9NQGLwABFacBtJBIcwABFZ4PAAEVpwG0kEoGNAQABlADAAP0rPgJOwABFeMAARYAAAJYmYAPAAPq3ARzAAEWGLksBAAGDwABFh8BtJBIAwAD8uEnAAEWRHMAARZmAwABFlcBtI64gAQABhMAARZrAbSR9AAA+AUrAAEWuAYTAAEW1wG0kfT9JwABF0CEcwABF24HAAEXUwG0jyEgBAAErAMAA/V5KwABF5AEcwABF8YHAAEXrwG0jyCAAAAAAAD89MMAARfkewABGFMAAzicAAAAABsAA2I2CcMAARijAAEYvwABIMwAAlkIAAAABA8AARjrAAEgzAAAAAgEBwABGQAAAAJb/YQMBYAPAAPq3YAPAAPo/AAHAAEZeAAAgljthAwBgA8AA+rcBagBgA8AA/Q55YAPAAPq3AT4HTsAARnPAAEZ6AACBdlsBK07AAEaLwABGmQAAwABxvGADwAD6PwEqTsAARqrAAEauAACXbGADwAD8BQEWwABGtS5hwAD82EXAAEbBAcAARsrAAEbMAABiYAPAAPwFAZMBHMAARtOFwABG0cBtJd1jAQABhMAARtXAbSW5AMAA/TIBjcAARtzAbSXdHMAARtqFwABG3MBtJd1kAQABlADA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SsAAsFoBgsAAsGHAbbJFP0rAALBuARzAALB1lIHEAAAAAMAA/CgGwADZY4JwwACwgMAAsJnAALF4AwBkAAAAAQPAALCawACxeAAAAAEBAcAAsKsAACCD1l0DwAD8qQFgA8AA5eoAAF0DwAD8qQFgA8AA5eoBPgJOwACwvMAAsMgAAINYYAPAAPwFARzAALDWFsAAsM8uYcAA/NhkAQABFsAAsN6AwACw2MBtsx9hwAD82ADAAP0qSsAAsOoBNcAAsPwAAAEAXQPAAPypAWADwADl6gExwACw/GADwADl6gA1AAAAAQBbARfAALEHgsAAsQXAbbOOYYHAALEQwG2zSMAA/NY1AAAAAQBbARzAALEkgsAAsSLAbbOOg14DAAOTFsAAsTUuYcAA/NguAMAA/M41AAAAAQBbARzAALFLgsAAsUnAbbOOg14DAAMWwACxWS5hwAD82IHAALFhwG2zSIDAALFuwG2zHwDAAPzOggDAbbOOBsAA2WSCcMAAsX3AALGCwACyIQAAgxcAAAABA8AAsYrAALIhAAAAAQEBwACxkgAAAJYmYAPAAP1RAABgA8AA+j8BPgNOwACxpcAAsakAAJdsYAPAAPwFARbAALGwLmHAAPzYRcAAsbwBwACxxcAAsccAAGJgA8AA/AUBkwEcwACxzoLAALHMwG20rWMBAAGBwACx0MBttIkAwAD9MgGKwACx18BttK0cwACx1YLAALHXwG20rWQBAAGUAMAA/So+AUnAALHiHMAAse4cwACx6i5LAQABgsAAsevAbbStAMAA/LhIAQABgMAAsfHAbbRuAMAA/V5KwACx+gEpP0rAALIRASoGwADZZYJwwACyJsAAsivAALMUAACfxQAAAAEDwACyMsAAsxQAAAABAAHAALI7AAAAn8ZgA8AA0G0BagBgA8AA/Q55AFwBPgM9IxzAALJRgMAAskrAbbVySAEAASsAwAD9XojAALJKwG21ch7AALJZwADQbwAAAAArAWADwADQbU7AALJrwACybQAAYmADwAD8BQEWwACydC5hwAD82EPAALKAHMAAsomBwACyh8BttcmAlwEAAZQAwAD9ND4FTsAAsprAALKeAACfx2ADwAD8BQEcwACyp4DAALKgwG21cp/IAQABgcAAsq/AbbXJAMAA0HI9icAAsrnAbbXJHMAAsruBwACyucBttcmBjQEAAZQAwAD9K07AALLLwACyzwAAn8lgA8AA5eoBHMAAstUuSwEAAYHAALLWwG21yQDAAPy4PRzAALLkLoC/AgACgcAAsuXAbbXJHMAAsu4uSwEAAYLAALLvwG22BwDAAPy4AMAA/Lk9HMAAsv8ugL8CAAKCwACzAMBttgeDwACzB8Bttl8AwAD8uQbAANlmgnDAALMZwACzHsAAvAcAAINeAAAAAQPAALMmwAC8BwAAAAQDBMAAsysAAABqYAPAAPwFAMAAszYAAACCjGADwAD8BQDAALNPAAAgli5dA8AA/GcBYAPAAOXqAMAAs2AAAACfzmADwAD8BQFqwACzbGADwAD8BQkAXAE+C0nAALOLIiIcwACzkZOAlwEAAYDAALOTwG23CQDAAP00ARzAALOigMAAs5zAbbcJgJcBAAGBwACzpMBttxgAwAD9NAEcwACzr4HAALOrwG23GICXAQABFsAAs7EuYcAA/NgAwAD9ND4CPR7AALPMwAD7RgMAA4DAALPcwG23CYHAALPjwG23GBbAALPoLmHAAPzYAEAqwAC0EMAAtBUAP0nAALQiHMAAtDCDwAC0JsBttz9jAQABkwDAAP0yPgE9MMAAtD0fwAC0TsAA+08EAASDwAC0VMBttz+TKyefzgA/TsAAtIfAALSNAAGA7mADwAD8BQEcwAC0k4HAALSPwG23GIGNAQABgMAAtJXAbbcJAMAA/StJwAC0oBzAALS+HMAAtLEWwAC0qoLAALSlwG23KGHAAPyKgY0BAAGDwAC0s8Bttz8AwAD9K2MBAAGEwAC0wMBtuEEAwAD9Mj4BPTDAALTPHsAAtOrAAM4pAAAAAD9JwAC0/xzAALUJhMAAtQPAbbhBSAEAAZMAwAD9KErAALUPAD9JwAC1HCXAALUlgsAAtSDAbbcoYAPAANPBPgJOwAC1ssAAtcIAAcAAePhgA8AA08EBJsAAtckAgsAAtcTAbbcoYAPAANPBScAAteIcwAC1/hbAALXrLsAAbsbAANTMSAEAARbAALYRhcAAtgHAbbkSwABuxsAA08QAwAD9KD4BScAAti8iHMAAtjqEwAC2NMBtuEFjAQABNwoAwAD9MgAhHMAAtlsWwAC2VIXAALZEwG25EoKLwADTxkgBAAEWwAC2Yy6Ci8AA1M4AwADVEj4CPR7AALZ+wADLHQUABSbAALaIAILAALaDwG23KF0DwAD8qQFgA8AA5eqDwAC2nMBttz8ugMAAtq3AbbcJhMAAtrTAbbhBAErAALbGAEnAALbdHMAAtvMWwAC27RbAALbmLoKLwADUzrbcwADTq8AA1QrAAG7FwADTqwYABhzAALclHMAAtxCAwAC3CsBttwmDiAEAARbAALcSLsAAbsbAANTMAMAA/SxkAQABFsAAtywuqZHAANTNAMAA/SocwAC3TYTAALdHwG24QYOIAQABFsAAt08uwABuxsAA1MwAwAD9LBbAALeGFsAAt3+FwAC3b8BtuRKCi8AA08a23MAA06vAANUKHMAAt7gcwAC3o4PAALeZwG23P4OIAQABFsAAt6UuwABuxsAA1MwAwAD9LGQBAAEWwAC3yoXAALe6wG25EqmRwADTxQDAAP0qHsAAt+3AAMsqAQABLgAewAC4DsAAyyoBAAGCwAC4FMBttygAAMAA09E+AUrAALgoAD9JwAC4RxzAALhiFsAAuFuFwAC4S8BtuRKCi8AA08ZIAQABFsAAuGougovAANTOAMAA1RI+BU7AALlAwAC5SwABwAB4+V0DwAD8qQFgA8AA5eoBJsAAuVIAgsAAuU3AbbcoXQPAAPypAWADwADl6k7AALl0wAC5fwABwAB4+mADwADjlwEcwAC5gS7AAHj3wADTqwEAAYTAALmNwG24QQDAANTWRcAAuZ0BwAC5psAAuagAAGJgA8AA/AUBkwEcwAC5rxTAALmtwG277ggAYwEAAYTAALmxwG24QQDAAP0yARXAALm4wG277ggcwAC5uRTAALm4wG277ggAZAEAAZQAwAD9Kj4BPRzAALnTh8AAucnAbbu0gL8CAAIUwAC51MBtu+4IABzAALnjhsAAudnAbbt7SwEAARzAALnug8AAueTAbbc/ZAEAARTAALnwwG277ggAAMAA/SoAwAD8uADAAPy5RcAAugYBwAC6D8AAuhEAAGJgA8AA/AUBgMAAuhPAbbcJARzAALocFMAAuhrAbbyuCABjAQABgcAAuh7AbbcYAMAA/TIBFcAAuiPAbbyuCBzAALokFMAAuiPAbbyuCABkAQABlADAAP0qPgE9HMAAujgugL8CAAIUwAC6OcBtvK4IABzAALpIh8AAuj7Abbu0SwEAARzAALpLFMAAuknAbbyuCACBjQEAAYDAALpNwG23CQDA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T/BjAQABgcAAQs3Ack/MAMAA/TIBisAAQtTAck/wHMAAQtKCwABC1MByT/BkAQABlADAAP0qPgFJwABC3yEcwABC5YDAAELkwHJPqCABAAEcwABC6i5LAQABgsAAQuvAck/wAMAA/LgAAErAAELwASo/SsAAQwgBKQbAAOFOgnDAAEMcwABDIcAAQ7sAAIHUAAAAAQPAAEMkwABDuwAAAAEBAcAAQyoAAACBpmEDAWADwAD6t2ADwAD6PwAAYAPAAPo/AT4DTsAAQ0fAAENLAACXbGADwAD8BQEWwABDUi5hwAD82EXAAENeAcAAQ2fAAENpAABiYAPAAPwFAZMBHMAAQ3CCwABDbsByUPtjAQABgcAAQ3LAclDXAMAA/TIBisAAQ3nAclD7HMAAQ3eCwABDecByUPtkAQABlADAAP0qPgFJwABDhBzAAEOJgMAAQ4jAclCzIAEAARzAAEOOLksBAAGCwABDj8ByUPsAwAD8uAAASsAAQ5QBKT9KwABDqwEqBsAA4U+CcMAAQ8DAAEPHwABE5AAAljoAAAABA8AAQ9HAAETkAAAAAgEBwABD1wAAAJb/YQMBYAPAAPq3YAPAAPo/AAHAAEP1AAAgljthAwBgA8AA+rcBagBgA8AA/Q55YAPAAPq3AT4ETsAARArAAEQOAACXbGADwAD8BQEWwABEFS5hwAD82EXAAEQhAcAARCrAAEQsAABiYAPAAPwFAZMBHMAARDODwABEMcByUiFjAQABgsAARDXAclH9AMAA/TIBi8AARDzAclIhHMAARDqDwABEPMByUiFkAQABlADAAP0qPgJOwABES8AARFMAAJYmYAPAAPq3ARzAAERZLksBAAGDwABEWsByUiEAwAD8uEnAAERkHMAARGyAwABEaMByUb0gAQABhMAARG3AclJ6AABKwABEdwGEwABEfsByUno/ScAARJEhHMAARJyBwABElcByUddIAQABKwDAAP1eSsAARKUBHMAARLKBwABErMByUdcgAAAAAAA/PTDAAES6HsAARNXAAM4nAAAAAAbAAOFQgnDAAETpwABE8MAARiMAAJY/AAAAAQPAAET5wABGIwAAAAIBAcAARP8AAACW/2EDAWADwAD6t2ADwAD6PwABwABFHQAAIJY7YQMAYAPAAPq3AWoAYAPAAP0OeWADwAD6twE+BE7AAEUywABF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RnPAAEZ6AACBdlsBK07AAEaLwABGmQAAwABxvGADwAD6PwEqTsAARqrAAEauAACXbGADwAD8BQEWwABGtS5hwAD82EXAAEbBAcAARsrAAEbMAABiYAPAAPwFAZMBHMAARtOFwABG0cByiJljAQABhMAARtXAcoh1AMAA/TIBjcAARtzAcoiZHMAARtqFwABG3MByiJlkAQABlADAAP0qPgJOwABG68AARvMAAJYmYAPAAPq3ARzAAEb5LksBAAGFwABG+sByiJkAwAD8uEnAAEcEHMAARwyAwABHCMByiA4gAQABhsAARw3AcojyAAA+A0nAAEchg8AARyXAcohePgE9MMAAR0AewABHW8AAzigAAAAAPz2KwABHeMByiE6GwABHgcByiPI9i8AAR5LAcoheKT9JwABHuoPAAEe+wHKIXkrAAEfNASbAAEfNAYLAAEfUwHKITmADwAD6tz9JwABH4CEcwABH64HAAEfkwHKIKEgBAAErAMAA/V5KwABH9AEcwABIAYHAAEf7wHKIKCAAAAAAAD89MMAASAkewABIJMAAzicAAAAABsAA4aGCcMAASDjAAEg/wABIcAAAljkAAAABA8AASEjAAEhwAAAAAQEBwABITQAAACdgA8AA/AUAAGADwAD6twE+AUrAAEhaARzAAEhlLksBAAGAwABIZsByiiQAwAD8uAbAAOGignDAAEh1wABIesAASNUAAFYAAAABA8AASH3AAEjVAAAAAQEBwABIhQAAIICWYAPAAPq3AABcAT4BPTDAAEiSH8AASJzAAPuXAQABJ8AAdlAABsAA4aOCcMAASNrAAEjfwABJRwAAgKUAAAABA8AASOXAAElHAAAAAQEBwABI9wAAIICWXQPAAPxnAWADwAD6twAAXAE+AT0wwABJBB/AAEkOwAD7lwEAASfAAHZQAAbAAOGkgnDAAElMwABJUcAASb8AAJ7VAAAAAQPAAElXwABJvwAAAAICAsAASVwAAAAnYAPAAPwFAMAASWoAACCAlmADwAD6twAAXAE+AT0wwABJdx/AAEmBwAD7lwEAASfAAHj0AAbAAOGlgnDAAEnEwABJycAASkUAAJ/ZAAAAAQPAAEnSwABKRQAAAAICAsAASdcAAAAnYAPAAPwFAMAASe8AACApXQPAAPxnAWADwAD6twAAXAE+AT0wwABJ/R/AAEoH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AONIgnDAARAGwAEQDsABEEcEBQADasABEA5gA8AAyy3AAX5basABEA5gA8AA+gbAAaOqasABEA5gA8AAyzvAAaPGAAABA8ABEBjAARBHAAAAAQEBwAEQHQAAAGFgA8AA/AUAAGADwADjRAAGwADjSYJwwAEQVcABEF3AARDkBAHAAHdgAWrAARBdYAPAAMstwAF+WwAAAQPAARBwwAEQ5AAAAAEBAcABEHsAAACIRV0DwAD8qQFgA8AA/AUAAGADwADjRAE+AUrAARCLATXAARCWAAABAGADwADjRAEewAEQlsAA40gBAAEWwAEQqoDAARChwHOJmmHAAPzYADUAAAABAFsBHMABELqBwAEQuMBzicKDXgMAA5MWwAEQz4DAARDGwHOJmmHAAPzYgMABENfAc4maAMAA/M6BAMBzicIGwADjSoJvwACbs8AAm7vAAJxEBAHAAElNAAAAAQPAAJvKwACcRAAAAAMBA8AAm9YAAACCi2ADwADi0wDAAJvpAAAAqZFgA8AA/AUBasAAm/lgA8AA/AUJwACcAAAAAGFgA8AA/AUBagBgA8AA/Q55AGADwADjRAE+AUrAAJwPARzAAJwdgMAAnBbAc4pgwAB5BgIAAoHAAJwqwHOKcILAAJw5wHOKjADAAOLaBsAA40yCb8AAn2zAAJ93wACflAACgVgAAAABA8AAn37AAJ+UAAAAAgECwACfgwAAAGpgA8AA/AUAwACfjwAAAIKMYAPAAPwFAWoAYAPAAP0OeQBgA8AA40QAAABziPIAc4lfAHOKNABziuAAc4s6AAAABALAAONNgm/AAKFhwAChcMAAqkoHwAB1VwFqwAChcGADwADLLcABflsAAWABwAD9UQACXQHAAPypAWADwAD8BWABwADi8AEEwADjT4JvwACqNcAAqkgGwAB6ZgBgA8AA/AUBasAAqkdgA8AA/AWBVwAEBsAA41GCcMABF2DAARdowAEXnwQFAANqwAEXaGADwADLLcABfltqwAEXaGADwAD6BsABo9xqwAEXaGADwADLO8ABo/gAAAEDwAEXccABF58AAAABAQHAARd2AAAAYWADwAD8BQAAYAPAAONNAAbAAONSgnDAARetwAEXtcABGDoEAcAAd2ABasABF7VgA8AAyy3AAX5bAAABA8ABF8fAARg6AAAAAQEBwAEX0gAAAIhFXQPAAPypAWADwAD8BQAAYAPAAONNAT4BSsABF+IBNcABF+0AAAEAYAPAAONNAR7AARftwADjUQEAARbAARgAgMABF/fAc4xsYcAA/NgANQAAAAEAWwEcwAEYEIHAARgOwHOMlINeAwADkxbAARglgMABGBzAc4xsYcAA/NiAwAEYLcBzjGwAwAD8zoEAwHOMlAbAAONTgm/AAKZDwACmS8AAptIEAcAASU0AAAABA8AAplnAAKbSAAAAAwEDwACmZQAAAIKLYAPAAOLTAMAApngAAACpkWADwAD8BQFqwACmiGADwAD8BQnAAKaPAAAAYWADwAD8BQFqAGADwAD9DnkAYAPAAONNAT4BSsAApp4BHMAApqyAwACmpcBzjTLAAHkHAgACgcAAprjAc41CgsAApsfAc41eAMAA4t0GwADjVYJvwACp+MAAqgLAAKofAAKBWAAAAAEDwACqCcAAqh8AAAACAQLAAKoOAAAAamADwAD8BQDAAKoaAAAAgoxgA8AA/AUBagBgA8AA/Q55AGADwADjTQAAAHOLxABzjDEAc40GAHONsgBzjgwAAAAEAsAA41aCb8AAq9bAAKvlwAC03wefPAFqwACr5WADwADLLcABflsAAWABwAD9UQACXQHAAPypAWADwAD8BWABwADi8AEEwADjWIJvwAC0ysAAtN0GwAB6ZgBgA8AA/AUBasAAtNxgA8AA/AWBVwAEBsAA41qCcMABHMXAARzNwAEdBgQFAANqwAEczWADwADLLcABfltqwAEczWADwAD6BsABpA5qwAEczWADwADLO8ABpCoAAAEDwAEc18ABHQYAAAABAQHAARzcAAAAYWADwAD8BQAAYAPAAONWAAbAAONbgnDAAR0UwAEdHMABHaMEAcAAd2ABasABHRxgA8AAyy3AAX5bAAABA8ABHS/AAR2jAAAAAQEBwAEdOgAAAIhFXQPAAPypAWADwAD8BQAAYAPAAONWAT4BSsABHUoBNcABHVUAAAEAYAPAAONWAR7AAR1VwADjWgEAARbAAR1pgMABHWDAc488YcAA/NgANQAAAAEAWwEcwAEdeYHAAR13wHOPZINeAwADkxbAAR2OgMABHYXAc488YcAA/NiAwAEdlsBzjzwAwAD8zoEAwHOPZAbAAONcgm/AALDTwACw28AAsWQEAcAASU0AAAABA8AAsOrAALFk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AOPzgm/AARCOwAEQmAbAAHrPAGADwAD8BQFqwAEQlWADwAD8BYI/BMAA4/SCb8ABEK3AARC4BsAAetAAYAPAAPwFAWrAARC0YAPAAPwFp/kEwADj9YJvwAEQzcABENgGwAB60QBgA8AA/AUBasABENRgA8AA/AXAALicBMAA4/aCb8ABEO3AARD4BsAAetIAYAPAAPwFAWrAARD0YAPAAPwFwAGl6wTAAOP3gm/AARENwAERGAbAAHrTAGADwAD8BQFqwAERFGADwAD8BcAAfT0EwADj+IJvwAERLcABETgGwAB61ABgA8AA/AUBasABETRgA8AA/AW4VgTAAOP5gm/AARFNwAERWAbAAHrVAGADwAD8BQFqwAERVGADwAD8BcAAspAEwADj+oJvwAERbcABEXgGwAB61gBgA8AA/AUBasABEXRgA8AA/AXAAaXvBMAA4/uCb8ABEY3AARGYBsAAetcAYAPAAPwFAWrAARGUYAPAAPwFwABhCQTAAOP8gm/AARGtwAERuAbAAHrYAGADwAD8BQFqwAERtGADwAD8BcAAmiEEwADj/YJvwAERzcABEdgGwAB62QBgA8AA/AUBasABEdRgA8AA/AXAAMB9BMAA4/6Cb8ABEe3AARH4BsAAetoAYAPAAPwFAWrAARH0YAPAAPwFwAGl8wTAAOP/gm/AARINwAESGAbAAHrbAGADwAD8BQFqwAESFGADwAD8BZMoBMAA5ACCb8ABEi3AARI4BsAAetwAYAPAAPwFAWrAARI0YAPAAPwFwACaUQTAAOQBgm/AARJNwAESWAbAAHrdAGADwAD8BQFqwAESVGADwAD8BcABpfcEwADkAoJvwAESbcABEngGwAB63gBgA8AA/AUBasABEnRgA8AA/AXAAaX7BMAA5AOCb8ABEo3AARKXBsAAet8AYAPAAPwFAWrAARKUYAPAAPwFg/sEwADkBIJvwAESrMABErcGwAB64ABgA8AA/AUBasABErNgA8AA/AWooQTAAOQFgm/AARLMwAES1wbAAHrhAGADwAD8BQFqwAES02ADwAD8BcAAtvwEwADkBoJvwAES7MABEvcGwAB64gBgA8AA/AUBasABEvNgA8AA/AXAAYpiBMAA5AeCb8ABEwzAARMXBsAAeuMAYAPAAPwFAWrAARMTYAPAAPwFwAB4RQTAAOQIgm/AARMs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AAAAgoxgA8AA/AUBagBgA8AA/Q55AGADwADjegE+BT2JlpvAdHD6HpaswAD7RgMAA4CWvMB0cO2BlsPAdHD6FpbILmHAAOZBAE6W2ZbnAADAAHuYYAPAAPwFARyW7YGW6cB0cPqBjQEAAYCW78B0cO0AwAD9K06W/JcDAACBdmADwADjegEclwUuwAB498AA06sBAAGClxHAdHFGAMAA5kk9HJcsg5clwHRxc4NeBAAEk4KXOMB0cUYWl0culxrAANOrwADmP4CXTsB0cO0AwAD8zkqXWgGDl2HAdHFzAAB0bmUAdG6RAHRu2QB0bxoAdG9zAHRvugB0b/0AdHBEAHRwkgB0cM0AdHHaAAAACgLAAOewgnGq/asDrD0DwAB7tAAAAWABwADnnwABYAHAAON6AQTAAOezgnGrt6u8CZcawADTqwBgA8AA43oAAQXAAOe4gnGrwKvAq/wAAAADq9ur/AAAAAEBAavoAAAAg1tgA8AA43oAAGADwADnsAE/AggAwADns4Cr+MB0cmUJAavAwADnoQAAAAABBsAA57aCcawBrA2sOwAAwAB498AA06sAAAABA6wYrDsAAAABAQGsHQAAAGFgA8AA/AUAAGADwADjegFKrCgBHqwowADjfgEAAYCsNMB0cr0AAAB0cpcAdHLoAAAAAQQEwADTroJwwAIRk8ACEa8FwAB7tcAA06sAYAPAAONWAR7AAhGiwADjWgEAAZUABMAA06+CcMACEbfAAhHmBcAAe7bAANOrAGADwADjaAEewAIRxsAA424BAAEWwAIR3xrAAhHWwADTroKLwADi7QAEwADTsIJwwAIR7sACEh4FwAB7t8AA06sAYAPAAONxAR7AAhH9wADjdwEAARbAAhIXGsACEg7AANOugovAAOLtAATAANOxgnDAAhImwAISVgXAAHu4wADTqwBgA8AA43oBHsACEjXAAOOAAQABFsACEk8awAISRsAA066Ci8AA4u0ADQbAANO0gnDAAg/BwAIP4cACEDYAAcAAe7nAANOrAWrAAg/CYAPAAPoGwAC+3AAAAQPAAg/swAIQNgAAAAEBAcACD/EAAACAlmADwAD8BQAAYAPAAPwFAT4BSsACD/wBHMACEBscwAIQFRzAAhALgMACEAXAdHQng3cBAAE3wAD/AADAAPwdg7wBAAE3CADAAPwigQYBAAEc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wAD87knAAEREHMAARE4UwABESMB1dPUMAEgBAAErAMAA/V4+Aj2KwABEX8B1dHUewABEZsAA6LkCAAKAwABEfsB1dCwnklQAQgAAP0nAAESbISXAAESlFMAARJ/AdXT1DABgA8AA/es+Aj2KwABEucB1dHUewABEwMAA6LoCAAKAwABE2MB1dCwnklQAQgAAP07AAET5wABE/QAAgKxbARzAAEUNFsAARQeAwABE/8B1dCyD78AA6YBLAQABJ4CsAMAA/O5JwABFGhzAAEUiFMAARR7AdXW2DQBIAQABKwDAAP1ePgI9isAARTPAdXR1HsAARTrAAOi5AgACgMAARVLAdXQsJ4CsAEIAAD9JwABFbSElwABFdRTAAEVxwHV1tg0AYAPAAP3rPgI9isAARYnAdXR1HsAARZDAAOi6AgACgMAARajAdXQsJ4CsAEIAAD9OwABFx8AARcwAAIH8WwEcwABF3BbAAEXWgMAARc7AdXQsg+/AAOmASwEAASeB/ADAAPzuTsAARe7AAEX7AADAAH1tXQPAAPypAWADwAD96wEewABGAcAA96MBAWADwAD96wGTAEnAAEYVIRzAAEYeFMAARhnAdXZ3DgBIAQABKwDAAP1ePgJJwABGLyElwABGOBTAAEYzwHV2dw4AXQPAAPypAVs+Aj2KwABGTMB1dHUewABGU8AA6LoCAAKAwABGa8B1dCwngfwAQgAAP0bAAEaLwABGocAARpQAAACFdlsAJsAARpsBFMAARpvAdXZ3DgBdA8AA/GcBWz4CScAARqshJcAARrMUwABGr8B1d00QAGADwAD96z4CPYrAAEbLwHV0dR7AAEbSwADougIAAoDAAEbqwHV0LCeB/ABCAAA/PRzAAEcbFMAARw7AdXarDwBWAQABJsAARx8BFMAARx/AdXdNEABgA8AA/esAwAD8uj9OwABHO8AARz8AAINTWwEcwABHTxbAAEdJgMAAR0HAdXQsg+/AAOmASwEAASciAMAA/O49HMAAR+AcwABHlR7AAEdpwADPxwMAAx7AAEd2wAD+mgEAASbAAEd8ARTAAEd8wHV1tg0AYAPAAP3rABTAAEeCwHV2qw8AFMAAR5DAdXfrEAAAga0BAVsBNMAAR5oDwABHmsAAR94AAAABAQHAAEebAAAAsO1gA8AAz6UAAGADwAD9DgE+AT0ewABH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qEbAAOxLAQABhMAAqFHAdx5lAADAALjxBsAA7CuCiMAAqGLAAKiMwACqNAABwAB/igAAAAEDwAComMAAqjQAAAADAwPAAKigAAAAllxbAMAAqKoAAACWXWADwAD8BQDAAKiwAAAAwAB/i1sAAF0DwAC43gFdA8AA9IEBYAPAAOwhAT4BSsAAqMUBHMAAqQsewACo2sAA67gDAAOAwACo58B3HsyBwACo7cB3HteCwACo88B3HucAga0BAV0DwAD0gQFgA8AA7CEBNMAAqRADwACpEMAAqi8AAAABAQHAAKkvAAAAwACAEF0DwAD0gQFgA8AA63QAAF0DwAD0gQFgA8AA7CEBPgJOwACpXMAAqWAAAZ+oXQPAALjeAWADwADsIQEcwACpfxbAAKltg8AAqWLAdx9lwAB8HcAA9IOBrQEBYAPAAOwhATTAAKmEA8AAqYTAAKnAAAAAAQEBwACpkwAAAMAAgBFgA8AA63QAAGADwADsIQFKwACppAEfwACpqMAA7EsBAAGEwACps8B3H+QAAMAAuPFKwACpyQEfwACp1MAA9IoCAWADwADsIQACwAB8HYTAAKoEwHcfkMAAbycWwACqHoPAAKoTwHcfZcAAcD7AAOouwAD0hQDAALjxBsAA7DyCiMAArcvAAK3TwACuhAQBwACAEsAA6i4AAAABA8AArejAAK6EAAAAAAAAAGADwADsIQE+BE7AAK31wACt/AAAnUZgA8AA63QBH8AArgLAAOwEAAAAAD0XwACuI4DAAK4cwHcgo8AAf20pwADroD0XwACuQ4DAAK48wHcgo8AAf24pwADroUrAAK5jAR/AAK5uwADsSwEAAYDAAK55wHcgowAGwADsPYKIwACuicAArpHAALA4BAHAAIATwADqLgAAAAEDwACupcAAsDgAAAABAQHAAK6qAAAAwACAFGADwAD8BQAAYAPAAOwhAT4GTsAArrjAAK6/AACdRmADwADrdAEfwACuxcAA7AQAAAAAPRfAAK7mgcAArt/AdyFcwAB/bynAAOuiScAArwAhHMAArweAwACvBMB3IT9IAQABKwDAAP0oPR7AAK8QwADqXwIAAoHAAK8gwHchXIDAAK8owHchPwA/TsAArzXAAK88AACBdmADwADsIQEfwACvQsAA7EsBAAGBwACvTcB3IVwAScAAr1ohHMAAr2GAwACvXsB3IT9IAQABKwDAAP0oPgJOwACvdsAAr4EAAMAAgBVgA8AA/AUBHsAAr4/AAPVWAQABFsAAr6iCwACvocB3IdTAAIADwADqLsAA7CQAPRfAAK+/gsAAr7jAdyHUwACADsAA6i4iGsAAr+rAAPHZABzAALAAg8AAr/XAdyIeSAEAAWrAALADYAPAAPwFCQDAAP0owADsKD9KwACwJwGCwACwLsB3IdQGwADsLIKIwACwPcAAsGDAALFBAACB+QAAAAEDwACwZsAAsUEAAAAEAQHAALBsAAAAwABvPGEDAWADwAD0cFwAA8AAsJoAAACB62ADwAD7+wFqAGADwAD9DnnAALCoAAAAg4lhAwBcAWoAYAPAAP0OecAAsLcAAADAAG8JYAPAAPo/AWoAYAPAAP0OeV0DwAC5xgFgA8AA9HABPgFKwACwzQEcwACw5xbAALDgFsAAsNQuwABvWcAA6i7AAOwlgfXAALoXgfkEAAGAwACw7sB3It0DgeuBwACxB8B3IvSDiYLAALEYwHcjDcAAbwmDwACxL8B3IyTAALmdBsAA7C2CiMAAsUbAALFKwACxagAAwAB/dgAAAAEDwACxU8AAsWoAAAAAAAAAYAPAAPwFAUrAALFZARbAALFhFsAAsVkuwACAA8AA6i7AAOwkwAB/dsAA66oGwADsLoKIwACxb8AAsXnAALNvAACedgAAAAEDwACxfcAAs28AAAABAAHAALGDAAAAl2xgA8AA/AUBagBgA8AA/Q55AGADwADjKAE+AUnAALGPFsAAsZMuwACADsAA6i7AAOwoPgVOwACxtsAAscAAAMAAf3ZgA8AA/AUBHMAAsccuwAB/dgAAAADAAOwtScAAsdocwACx6IHAALHewHckbUgBAAGTAMAA/ShKwACx7gErP07AALIFwACyCgAAEmADwADjKAEcwACyFBbAALIMLsAAgAPAAOouwADsJJ52AQABgMAAshnAdyQwAMAA68BJwACyJSIcwACyLoLAALIpwHckukgBAAErAMAA/V4BHMAAskUWwACyPoLAALI5wHckumHAAPzYYwEAAYHAALJHwHckbQDAAP0yPgE9HsAAstrAALgiAQABNMAAsuwDwACy7MAAsxwAAAAAAAAAXAFKwACy8gEcwACy/hbAALLyLsAAb1nAAOouwADsJVYBAAFqwACzEWADwAD0cMABsH8AwAC6KQA/SsAAsy0BgsAAszTAdyS6PgFKwACzTQEcwACzXBbAALNULsAAgAPAAOouwADsJJ52AQABgMAAs2HAdyQwAMAA68AGwADsL4KIwACzdMAAs3jAALPWAACCigAAAAEDwACzfcAAs9YAAAADAQPAALOIAAAAgotdA8AA/KkBYAPAAPwFAMAAs5UAAACDXGADwAD8BQFqAGADwAD9DnnAALOhAAAAgO5gA8AA/AUBagBgA8AA/Q55AGADwAD8BQFKwACzsgEcwACzuhbAALOyLsAAgAPAAOouwADsJIKKAwADgMAAs8DAdyYHgcAAs8jAdyYegsAAs9DAdyY3AMAA68IGwADsMIKIwACz28AAs+3AALQkAACCiAAAAAEDwACz8sAAtCQAAAAAAAAAXQPAALjeAWADwAD0iwFKwACz+AEcwAC0CBzAALQAFsAAs/guwACAA8AA6i7AAOwkgogAAAAAwADry4GtAQFgA8AA9IsBNMAAtBgDwAC0GMAAtCMAAAABAQHAALQZAAAAgLVbAABgA8AA7CEBSsAAtB8BLgDAALjxBsAA7DGCiMAAtCnAALQuwAC0cAAAwABwhgAAAAEDwAC0NsAAtHAAAAABAQHAALRHAAAAwAB/zWADwAD0LQAAXAFKwAC0VQEcwAC0XRbAALRVLsAAgAPAAOouwADsJMAAcIYBAAGAwAC0ZsB3J2kAwADrzAbAAOw/gojAALR1wAC0fcAAtJEBAJZdAAAAAQPAALSCwAC0kQAAAAAAAABgA8AA/AUBSsAAtIUBFsAAtI0WwAC0hS7AAIADwADqLsAA7CSWXcAA6/wGwADsQIKIwAC0lsAAtJ7AALS+AQCeRQAAAAEDwAC0qcAAtL4AAAAAAAAAYAPAAPwFAUrAALSsARbAALS0FsAAtKwuwACAA8AA6i7AAOwknkXAAOv9BsAA7EGCiMAAtMPAALTXwAC08QEAwAB1JQAAAAEDwAC038AAtPEAAAAAAAAAYAPAAPP3AUrAALTiARbAALTqFsAAtOIuwACAA8AA6i7AAOwkwAB1JcAA6/4GwADsQoKIwAC09sAAtQrAALUwAQCeRAAAAAEDwAC1GMAAtTAAAAAAAAAAYAPAAPP3AUrAALUbARbAALUjFsAAtRsuwACAA8AA6i7AAOwknkTAAOv/BsAA7EOCiMAAtTXAALU+wAC1ZQEAwACAFgAAAAEDwAC1UMAAtWUAAAAAAAAAYAPAAPo/AUrAALVTARbAALVTLsAAgAzAAOouwADsJgbAAOxGgojAALVpwAC1csAAtg8CAMAAgBYAAAABA8AAtYPAALYPAAAAAQEBwAC1iQAAAICWYAPAAPo/AABcAT4BScAAtZYhHMAAtaCAwAC1msB3KYBIAQABFsAAtaMuwACADMAA6i7AAOwmAMAA/V4+Aj0XwAC1vy7AAIAMwADqLoDAALXUwHcpgMAA7CZJwAC14SEWwAC18hbAALXmLsAAb1nAAOouwADsJcAAbyvAALoePRzAALX8LsAAgArAAOouAAAAAMAA7Dc/PwbAAOxEgojAALYUwAC2HcAAtkYBAMAAgA8AAAABA8AAtjDAALZGAAAAAAAAAGADwAD6PwFKwAC2MwEWwAC2My7AAIANwADqLsAA7CcGwADsR4KIwAC2SsAAtlPAALbzAgDAAIAPAAAAAQPAALZlwAC28wAAAAEBAcAAtmsAAACAlmADwAD6PwAAXAE+AUnAALZ4IRzAALaCgMAAtnzAdyqYSAEAARbAALaFLsAAgA3AAOouwADsJwDAAP1ePgI9F8AAtqIuwACADcAA6i6AwAC2uMB3KpjAAOwnScAAtsUhFsAAttYWwAC2yi7AAG9ZwADqLsAA7CXAAG8rwAC6Hj0cwAC24C7AAIAKwADqLgAAAADAAOw3Pz8GwADsMoKIwAC2+MAAtv3AALdVAADAAH/YAAAAAQPAALcGwAC3VQAAAAICAsAAtxQAAACDJmADwAD0OgDAALchAAAAwACAF2ADwAD6PwAAYAPAAPo/AUrAALczARzAALc7FsAAtzMuwACAA8AA6i7AAOwkwAB/2AIAAoDAALdFwHcrZIHAALdNwHcrdADAAOvWBsAA7DOCiMAAt1rAALdkwAC3rgAAwAB/2gAAAAEDwAC3cMAAt64AAAABAQHAALeBAAAAgyZgA8AA9FgAAGADwADjKAFKwAC3kgEcwAC3mhbAALeSLsAAgAPAAOouwADsJMAAf9oBAAGAwAC3p8B3K/UAwADr1wbAAOw0gojAALeywAC3t8AAt/sAAMAAf90AAAABA8AAt8PAALf7AAAAAQEBwAC31AAAAIMmYAPAAPRYAABcAUrAALffARzAALfnFsAAt98uwACAA8AA6i7AAOwkwAB/3QEAAYDAALf0wHcsawDAAOvYBsAA7DaCiMAAuADAALgAwAC4QgAAwAB3TsAA6i4AAAABA8AAuAbAALhCAAAAAAAAAFsBPgE9HMAAuBcWwAC4Dy7AAIADwADqLsAA7CTAAH+VAgAAAp52KoKKKsAA68oGwADsN4KIwAC4R8AAuEzAALiqAADAAIAKwADqLgAAAAEDwAC4U8AAuKoAAAAAAAAAXAE+AT0cwAC4ZBbAALhcLsAAgAPAAOouwADsJMAAf5UCAAACnnYWwAC4dy7AAIAMwADqLsAA7CaCihbAALiSLsAAgA3AAOouwADsJ8AA68oGwADsOIKIwAC4r8AAuLTAALkiAADAAIAJwADqLgAAAAEDwAC4x8AAuSIAAAAAAAAAXAE+AUnAALjQFsAAuOAWwAC41C7AAG9ZwADqLsAA7CXAAG8rwAC6Hj4BPRzAALjyLsAAd07AAOouAAAAAMAA7DY+AT0cwAC5Dy7AAIAKwADqLgAAAADAAOw3BsAA7DmCiMAAuSfAALkswAC5qwAAwACACMAA6i4AAAABA8AAuUbAALmrAAAAAAAAAFwBPgFJwAC5TxbAALlfFsAAuVMuwABvWcAA6i7AAOwlwABvLsAAuh8+AT0cwAC5dC7AAIAKwADqLgAAAADAAOw3PgE9HMAAuZoWwAC5ki7AAIADwADqLsAA7CSCiAAAAADAAOvLBsAA7EmCiMAAubDAALm5wAC55gIAwAB4EMAA6i4AAAABA8AAub/AALnmAAAAAQEBwAC5wAAAAKjmWwAAXAE+AT0XwAC51RbAALnNLsAAgAPAAOouwADsJKjmgMAAud3Ady7hwADrswAAdx2TAHceoAB3IGgAdyEPAHciswB3I60AdyQGAHcl3QB3JpoAdyc9AHcnsAB3KAUAdyhaAHcoswB3KQgAdylUAHcqIAB3KmwAdys4AHcryQB3LD8AdyywAHctDwB3LZAAdy4bAHcusQB3LxgAAAAaAsAA7EyCiMAAutbAALrcwAC+WwPAAIAYAAABXQHAALmNAWADwAD0oQABYAHAAPQkAQTAAOxPgojAALsjwAC7KgnAAIADwADqLgBbAAEFwADsW4KIwAC8GsAAvBrAALw1AAAAA8AAvCfAALw1AAAAAQEBwAC8LQAABMAAgANbAABgA8AA7EwBPwIIAcAA7E+AAMB3L/sJAcAAvBrAALnDAAAAAAYGwADsUYKIwAC7L8AAu0zAALwVAAGeewAAAAEDwAC7UMAAvBUAAAAFBQXAALtYAAAAwAB1JVsAwAC7ZQAAAJZdYAPAAPwFAMAAu28AAADAAH+cYAPAAPwFAMAAu30AAADAAH+dYAPAAPo/AMAAu4oAAADAAH+eYAPAAPo/AABdA8AAuN4BYAPAAOxMAT4BSsAAu5gBHMAAu+YewAC7sMAA7BEFAAWAwAC7tcB3MFeBwAC7vsB3MGSCwAC7xMB3MHSDwAC7zcB3MIaEwAC71cB3MJgAga0BAWADwADsTAE0wAC76wPAALvrwAC8EAAAAAEBAcAAu+wAAADAAHwdYAPAAOwJAABgA8AA7EwBSsAAu/cBH8AAu/vAAOxbAQABhcAAvAnAdzEfAADAALjxBsAA7FKCiMAAvDrAALxVwAC9bwAAgfkAAAABA8AAvFvAAL1vAAAABAEBwAC8YQAAAMAAbzxhAwFgA8AA9KFcAAPAALyHAAAAgetgA8AA+/sBagBgA8AA/Q55wAC8lQAAAIOJYQMAXAFqAGADwAD9DnnAALykAAAAwABvCWADwAD6PwFqAGADwAD9DnldA8AAucYBYAPAAPShAT4BSsAAvLoBJsAAvLoBHMAAvPwcwAC8yRbAALzBLsAAgAPAAOouwADsT4CrAQFgA8AA9KEBNMAAvNUDwAC81cAAvPoAAAABAQHAALzWAAAAwACAGVsAAGADwADsbAFKwAC85AEfwAC86MAA7KUBAAEmwAC88AGEwAC88MB3Mj1gA8AA9IsAAACB+QQAAYDAAL0MwHcxhAOB64HAAL0lwHcxm4OJgsAAvT7AdzG0wABvCYPAAL1dwHcxywBdA8AAucYBYAPAAPShBsAA7FWCiMAAvXTAAL18wAC9kAEAll0AAAABA8AAvYHAAL2QAAAAAAAAAGADwAD8BQFKwAC9hAEmwAC9hAEWwAC9jBbAAL2ELsAAgAPAAOouwADsT5ZdAGADwAD8BQbAAOxWgojAAL2VwAC9qcAAvcMBAMAAdSUAAAABA8AAvbHAAL3DAAAAAAAAAGADwADz9wFKwAC9tAEmwAC9tAEWwAC9vBbAAL20LsAAgAPAAOouwADsT8AAdSUAYAPAAPP3BsAA7FOCiMAAvcjAAL3dwAC+HQAAgogAAAABA8AAveLAAL4dAAAAAAAAAF0DwAC43gFgA8AA9CQBSsAAve4BJsAAve4BHMAAvf4cwAC99hbAAL3uLsAAgAPAAOouwADsT4KIAAAAAACBrQEBYAPAAPQkATTAAL4RA8AAvhHAAL4cAAAAAQEBwAC+EgAAAIC1WwAAYAPAAOxMAUrAAL4YAS4AAF0DwAC43gFgA8AA9CQGwADsWYKIwAC+IsAAvivAAL5ZAgDAAHgQwADqLgAAAAEDwAC+McAAvlkAAAABAQHAAL4yAAAAqOZbAABcAT4BPRfAAL5HFsAAvj8uwACAA8AA6i7AAOxPwAB4EMAA6i6AwAC+UMB3NFwAAAB3MC0AdzFaAHcyvAB3MxoAdzN8AHc0LAB3NJYAAAAGAsAA7FyCiMAAwRfAAMEdwADIgwPAAIAaAAABXQHAALnlAV0DwAD8qQFgA8AA/AUAAAYEwADsXoKIwADBbMAAwXgYgfgAXQPAALnGAVsBKwTAAOxfgojAAMGKwADBkAnAAHwdAGADwADsbAAEwADsYIKIwADBmMAAwZ4Yg1wAYAPAAPwFASsEwADsYYKIwADBrMAAwbIYgosAXQPAAPypAWADwAD8BQErBMAA7GKCiMAAwbvAAMHJGMAAdysAYAPAAPo/ASoEwADsY4KIwADB18AAweYYwACAGwBdA8AAuP4BWwErAQXAAOxrgojAAMHrwADB68AAwg0AAAADwADCAMAAwg0AAAABAQHAAMIGAAAEwAB8HWADwADsbAAAYAPAAOxcAT8CCAHAAOxfgADAdzXBCQHAAMHrwAC56gAAAAAFBsAA7GWCiMAAwhLAAMIhwADEpwAAnBgAAAABA8AAwirAAMSnAAAAAQEBwADCPQAAIIH1XQPAALmNAV0DwAD8qQFgA8AA/AUAAF0DwAC43gFgA8AA9KEBPgQ9HMAAwlIWwADCSy7AAHwdwADsX8AAgBzAAOouAAAAAMAA7JU9F8AAwnYuwACAGx7AAMKMwAC5AAABYAPAAPShAADAAOxjScAAwqUhHMAAwrUWwADCsBbAAMKpLsAAfB3AAOxfh+TAAOouwADsb0gBAAErAMAA/V4+AT0XwADCxi6B+BzAAMLcgMAAwtXAdzYigfkEAAE0wADC4wPAAMLjwADD2QAAAAEBAcAAwuQAAAASXQPAAPypAWADwAD8BQAAYAPAAP0OAT4FQCEWwADC/C7AAHcrwADsYsAAwvvAAMMCAEAcwADDGxbAAMMULoKLwADsYUgBAAErAMAA/V7AAMMUwADDIgA9F8AAwy0ugouBwADDNsB3NvvAAOxhPRfAAMNELoNck8AA7GBLPgE9HMAAw2gugooAAAAAwADsZwABwADDe1sBwADDggAAAYNNWwAAPgM9HMAAw5gWwADDkS7AAHwdwADsX8AAfxUAAAAAwADsjz0cwADDrS6kawAAAADAAOxpPRzAAMO/Lp+TAQABgsAAw8TAdzeZAMAA7GgDges0wADD5APAAMPkwADEPgAAAAIBAsAAw+UAAACBxVsAwADD7QAAAIZFWwFqAGADwAD9DnkAYAPAAP0OAT4CPRzAAMQLFsAAxAQuwAB8HcAA7F/AAH8VAAAAAMAA7I89HMAAxB4un5MCAAKBwADEI8B3OAmCwADEKsB3OBQAwADsaIOJNMAAxEgDwADESMAAxGQAAAAAAAAAYAPAAP0OAT4BPRzAAMRVLp+TAAAAAMAA7GjAAG8JKcAAuZ3AAOxeP0rAAMSGASbAAMSGARbAAMSdFsAAxI0uwACAG8AA7GOB3MAAuQNdA8AAuN4BYAPAAPShBsAA7GaCiMAAxKzAAMS7wADFCAAAgogAAAABA8AAxMDAAMUIAAAAAAAAAF0DwAC43gFgA8AA9KEBPgI9HMAAxNAWwADEyS7AAHwdwADsX8AAgB3AAOouAAAAAMAA7J9KwADE5QEewADE8MAAuOcBAWADwAD0oQEWwADE/S7AAHwdwADsXwAGwADsZ4KIwADFDcAAxRLAAMbYAACCigAAAAEDwADFF8AAxtgAAAAAAAAAXAE+BEnAAMUgHMAAxTEWwADFJC6B+MAA7F5IAQABKwDAAP1eSsAAxToAP0AhHMAAxVQWwADFTS6Ci8AA7GFIAQABKwDAAP1ewADFTcAAxVsAPRfAAMWELoNcHMAAxYsWwADFhC6DXMAA7GBkAQABHMAAxZUWwADFji7AAHwdwADsX8AAgB7AAOouAwADFsAAxZwugovAAOxhFsAAxaQug1zAAOxgHMAAxboWwADFsxbAAMWsLoKLwADsYWHAAPzYgY0BAAEWwADFvC6DXMAA7GAAwAD9KwDAAOycAMAA/SrAAOxgScAAxckcwADF1BbAAMXNLoNcwADsYGMBAAEWwADF3RbAAMXWLoKLwADsYWHAAPzYAMAA/TI+AknAAMXtIRbAAMXyLsAAdyvAAOxiPgI9F8AAxgQuwAB3KynAAOxiPRzAAMYoFsAAxhsugfjAAOxegfsAAAAAwAC5zD89HMAAxkYWwADGPy7AAHwdwADsX8AAgB/AAOouAAAAAMAA7J0+Aj0XwADGbi6CiyvAAOxhScAAxoMWwADGhy7AAHcrwADsYj4CPRfAAMaZLsAAdysqwADsYj0cwADGvhbAAMaxLoH4wADsXoIEAAAAAMAAuc0/BsAA7GiCiMAAxt3AAMbiwADH3QAAn5MAAAABA8AAxubAAMfdAAAAAgACwADG6AAAAIHFWwFqAGADwAD9DnnAAMbvAAAAhkVbAWoAYAPAAP0OeQBcAT4BScAAxwIhHMAAxxYWwADHBi7AAIAbwADsY0gBAAErAMAA/V4+AknAAMcnIRzAAMcxgMAAxyvAdzuVSAEAASsAwAD9Xj4BPRzAAMdUFsAAx0QuwACAG8AA7GOB2wIAAoDAAMdiwHc7lSbAAMdpAYHAAMdpwHc7qWADwAD9vwDAALkHPgE9HMAAx50WwADHjS7AAIAbwADsY8AAbx0BAAEWwADHpi7AAHwdwADsXwDAALkGPRfAAMe9LsAAgBsrwADsYz8GwADsaYKIwADH4sAAx+fAAMiBAACkawAAAAEDwADH68AAyIEAAAAAAAAAXAE+BUnAAMf0HMAAyAUWwADH+C6B+MAA7F5IAQABKwDAAP1eSsAAyA4APz0cwADIJxbAAMgaLoH4wADsXpxVAAAAAMAAucg9F8AAyDUugfgrwADsXj0XwADITi7AAHcrKsAA7GI9HMAAyGkWwADIYi7AAHwdwADsX8AAgCDAAOouAAAAAMAA7J4AAHc1+AB3OOYAdzlsAHc7awB3PIQAdz04AAAABQLAAOxsgojAAMiGwADIjMAA4QcDwACAIQAAAV0BwAC5jQFgA8AA4ygAAWABwAD0oQgEwADsb4KIwADIzsAAyNIYh+TAAOouAGADwAD0iwAEwADscIKIwADJCcAAyRgYu+PAAOouAGADwAD6PwEqBMAA7HGCiMAAyWbAAMlxGMAAb1nAAOouAF0DwAC6FQFgA8AA4ygBKwTAAOxygojAAMl6wADJkxjAAIAiwADqLgBgA8AA+j8BKgTAAOxzgojAAMmtwADJthjAAIAjwADqLgBgA8AA7FwBKwTAAOx0gojAAMnBwADJxhiXPMAA6i4AYAPAAPDcASsEwADsdYKIwADJzsAAydsYnFPAAOouAFsBKwTAAOx2gojAAMnjwADJ7xjAAIAkwADqLgBbASsBBcAA7KWCiMAAyfTAAMn0wADMIQAAAAPAAMn7wADMIQAAAAEBAcAAygEAAASH5GADwAD0iwAAYAPAAOxsAT4FPRfAAMoNLsAAb1nAAOouHsAAyh/AALohBQFgA8AA4ygABZmvKcAAbyUWwADKYi7AAIAIwADqLsAA7JfAAG8nFsAAypAuwACACMAA6i7AAOyXwABvTRbAAMq9LsAAgAnAAOouwADsmMAAbyYWwADK5C7AAIAJwADqLsAA7JjAAOxxPRfAAMr+LsAAgCPAAOouH8AAyw7AAOxrAQABLgDAAOxzPRfAAMsvLpc8wADqLh7AAMs7wADw4AEAARbAAMtCLsAAgCPAAOouwADscwDAAOx0PRfAAMuSFsAAy40uh+TAAOouwADsb8AAgBYqwAD0jT0XwADMAxbAAMv+LofkwADqLsAA7G/AAIAPKsAA9I4CCAHAAOxvgADAdz6oCQHAAMn0wAC5wwAAAAAlBsAA7HmCiMAAzCbAAMwuwADMfAQBwACAEsAA6i4AAAABA8AAzEDAAMx8AAAAAAAAAGADwADsbAE+AUrAAMxJAR/AAMxUwADspQEAAR7AAMxgwADsPAAAAAAABsAA7HqCiMAAzIHAAMyJwADM3wQBwACAE8AA6i4AAAABA8AAzJrAAMzfAAAAAQABwADMoAAAAMAAgBRgA8AA/AUBagBgA8AA/Q55AGADwADsbAE+AUrAAMyrAR/AAMy2wADspQEAAR7AAMzCwADsPQEAAYDAAMzXwHdAeAAABsAA7H2CiMAAzerAAM38wADOKQEAwAB+/sAA6i4AAAABA8AAzgrAAM4pAAAAAAAAAGADwADrdAFKwADODQEWwADOIibAAM4TABbAAM4OLofkwADqLsAA7G9gA8AA7CHAAIADwADqLsAA7CQGwADshYKIwADOLsAAzkzAAM8oAACB+QAAAAEDwADOUsAAzygAAAAEAQHAAM5YAAAAwABvPGEDAWADwADjKFwAA8AAzoEAAACB62ADwAD7+wFqAGADwAD9DnnAAM6PAAAAg4lhAwBcAWoAYAPAAP0OecAAzp4AAADAAG8JYAPAAPo/AWoAYAPAAP0OeV0DwAC5xgFgA8AA4ygBPgFKwADOtAEcwADOzhbAAM7HFsAAzrsuwABvWcAA6i7AAOxxgfXAALoXgfkEAAGAwADO1cB3QVsDgeuBwADO7sB3QXKDiYLAAM7/wHdBi8AAbwmDwADPFsB3QaLAALmdBsAA7H6CiMAAzy3AAM86wADPVAEAwABRhwAAAAEDwADPQ8AAz1QAAAAAAAAAYAPAAMeXAUrAAM9GARbAAM9MFsAAz0YulzzAAOouwADsdMAAUYfAAPDeBsAA7KGCiMAAz1nAAM9iwADPmwIAwABRhwAAAAEDwADPasAAz5sAAAABAQHAAM90AAAAgJZgA8AAx5cAAFwBPgE9F8AAz4cWwADPgS6XPMAA6i7AAOx0wABRh4DAAM+SwHdCrsAA8N4GwADshoKIwADPoMAAz6XAAM/KAACCigAAAAEDwADPqsAAz8oAAAABAQHAAM+yAAAAwABk8mADwAD9UQAAXAFKwADPugEcwADPwBbAAM+6Lpc8wADqLsAA7HSCigEAAYDAAM/GwHdDFADAAPDjBsAA7IeCiMAAz8/AAM/UwADQBAAAggIAAAABA8AAz9vAANAEAAAAAQABwADP5AAAAMAAZPJgA8AA/VEBasAAz+pgA8AA/euEEgBcAUrAAM/yARzAAM/4FsAAz/IulzzAAOouwADsdIICAQABgMAA0ADAd0OBAMAA8OUGwADsiIKIwADQCcAA0A7AANBKAACEEQAAAAEDwADQG8AA0EoAAAABAQHAANAgAAAAwABhc2ADwAD8BQAAXAFKwADQLQEcwADQMxbAANAtLpc8wADqLsAA7HSEEQEAAYDAANBBwHdD+wDAAPDmBsAA7ImCiMAA0E/AANBUwADQmgAAn78AAAABA8AA0FzAANCaAAAAAgECwADQZgAAAMAAQ05dA8AA/GcBWwDAANBwAAAAwACAJWADwAD96wFqwADQdmADwAD964QSAFwBSsAA0H4BHMAA0IQWwADQfi6XPMAA6i7AAOx0n78CAAKAwADQjcB3RGiBwADQlsB3RHwAwADw5AbAAOyKgojAANCfwADQpMAA0MwAAFYAAAABA8AA0KfAANDMAAAAAQEBwADQsgAAIIQ0XQPAAPypAWADwAD8BQAAXAFKwADQvAEcwADQwhbAANC8Lpc8wADqLsAA7HRWAQABgMAA0MbAd0T+AMAA8OIGwADsi4KIwADQ0cAA0NbAANFLAACcFgAAAAEDwADQ3sAA0UsAAAACAQLAANDmAAAAgcVgA8AA/VEAwADQ+QAAAIZFYAPAAP2/AWoAYAPAAP0OeQBcAT4BPTDAANEMH8AA0RbAAPuXAQABJ8AAgCYABsAA7IyCiMAA0VDAANFXwADRowAAnBgAAAABA8AA0WDAANGjAAAAAQEBwADRcwAAIIH1XQPAALmNAV0DwAD8qQFgA8AA/AUAAF0DwAC43gFbAT4BSsAA0YEBHMAA0Y4WwADRiC6XPMAA6i7AAOx0nBgBAAGAwADRmMB3Rd8AwADw6AbAAOyNgojAANGowADRr8AA0ccAAIRBAAAAAQPAANG0wADRxwAAAAAAAABdA8AAuN4BWwFKwADRugEcwADRwBbAANG6Lpc8wADqLsAA7HSEQQAAAADAAPDpBsAA7I6CiMAA0czAANHTwADR6wAAgogAAAABA8AA0djAANHrAAAAAAAAAF0DwAC43gFbAUrAANHeARzAANHkFsAA0d4ulzzAAOouwADsdIKIAAAAAMAA8OoGwADsf4KIwADR8MAA0fvAANINAQCfkwAAAAEDwADSAMAA0g0AAAAAAAAAXQPAALjeAVsBSsAA0gMBFsAA0gkWwADSAy6XPMAA6i7AAOx0n5PAAPDsBsAA7I+CiMAA0hLAANIXwADS4wAAwAB/FQAAAAEDwADSHsAA0uMAAAAAAAAAXAE+BUnAANJjHMAA0mwWwADSZy6H5MAA6i7AAOxvSAEAASsAwAD9XkrAANJ1AD89HMAA0osWwADSgS7AAIAjwADqLsAA7HOkawAAAADAAOxpPRzAANKXLsAAgCfAAOouAAAAAMAA7JY9F8AA0q4uwACAIsAA6i4pwADscj0cwADS2BbAANLMLsAAb1nAAOouwADscYKIAAAAAMAAuisGwADskIKIwADS6MAA0u3AANNuAADAAH/YAAAAAQPAANL2wADTbgAAAAICAsAA0wQAAACDJmADwAD0OgDAANMRAAAAwACAF2ADwAD6PwAAYAPAAPo/AT4CScAA0yAcwADTKRbAANMkLofkwADqLsAA7G9IAQABKwDAAP1eSsAA0zIBKj9KwADTRAEcwADTUBbAANNLLofkwADqLsAA7G/AAH/YAgACgMAA01rAd0g1gcAA02LAd0hFAMAA9JcGwADskYKIwADTc8AA033AANPvAADAAH/aAAAAAQPAANOJwADT7wAAAAEBAcAA05oAAACDJmADwAD0WAAAYAPAAOMoAT4CScAA06gcwADTsRbAANOsLofkwADqLsAA7G9IAQABKwDAAP1eSsAA07oBKz9KwADTywEcwADT1xbAANPSLofkwADqLsAA7G/AAH/aAQABgMAA0+TAd0jyAMAA9JgGwADskoKIwADT9MAA0/nAANRCAADAAH/dAAAAAQPAANQFwADUQgAAAAEBAcAA1BYAAACDJmADwAD0WAAAXAE+AT01AAAAAQBgA8AA9IsBFsAA1CQuh+TAAOouwADsbyMcwADUKoEAwHdJq0gBAAErAAArHMAA1CqBAMB3SavAAH/dAQABgMAA1DfAd0mUAMAA9JkBXAbAAOyAgojAANRHwADUT8AA1LABAJZdAAAAAQPAANRUwADUsAAAAAAAAABgA8AA/AUBPgNJwADUWhzAANRjFsAA1F4uh+TAAOouwADsb0gBAAErAMAA/V49MMAA1GxqwADUeGADwAD00sABrm8/P0rAANScARbAANSoFsAA1KMuh+TAAOouwADsb5ZdwAD0mwbAAOyBgojAANS1wADUycAA1TABAMAAdSUAAAABA8AA1NHAANUwAAAAAAAAAGADwADz9wE+A0nAANTXHMAA1OAWwADU2y6H5MAA6i7AAOxvSAEAASsAwAD9Xj0wwADU6WrAANT1YAPAAPTSwAGubz8/SsAA1RkBFsAA1SUWwADVIC6H5MAA6i7AAOxvwAB1JcAA9J0GwADsgoKIwADVNcAA1T3AANWqAQCeRQAAAAEDwADVSMAA1aoAAAAAAAAAYAPAAPwFAT4DScAA1U4cwADVVxbAANVSLofkwADqLsAA7G9IAQABKwDAAP1ePTDAANVgasAA1WxgA8AA9NLAAa5vPz9KwADVkAEWwADVnBbAANWXLofkwADqLsAA7G+eRcAA9JwGwADsg4KIwADVr8AA1cPAANY2AQCeRAAAAAEDwADV0cAA1jYAAAAAAAAAYAPAAPP3AT4DScAA1dccwADV4BbAANXbLofkwADqLsAA7G9IAQABKwDAAP1ePTDAANXpasAA1fVgA8AA9NLAAa5vPz9KwADWGQEWwADWJRbAANYgLofkwADqLsAA7G+eRMAA9J4GwADslIKIwADWO8AA1kLAANcwAADAAIAowADqLgAAAAEDwADWTMAA1zAAAAAAAAAAXQPAALjeAVsBPgM9F8AA1lUuwACAJMAA6i4ewADWaMAAuQAAAVsAAMAA7HY9HMAA1n8WwADWeS6XPMAA6i7AAOx0gogAAAAAwADw6krAANaMASbAANaMARzAANanFsAA1qAWwADWky7AAIAkwADqLsAA7HaB3ACBrQEAATTAANasA8AA1qzAANcrAAAAAQEBwADWrQAAAIC1WwAAXQPAAPypAVsBPgRAHMAA1tAWwADWyRbAANa/LsAAgCPAAOouwADsc4KLwADsYUgBAAErAMAA/V7AANa/wADW1wBOwADW5MAA1ugAAJ+oYAPAAPSLARbAANbqLofkwADqLsAA7G89F8AA1vYuh+TAAOouK8AA7G9KwADXCQExwADXEFsCgcAA1xHAd01QFsAA1xYunFPAAOouwADsdQAAXQPAALjeAVsGwADslYKIwADX4MAA1+XAANiuAADAAIAcwADqLgAAAAEDwADYAcAA2K4AAAAAAAAAXAE+AUnAANgKIhzAANgcFsAA2A4unFPAAOouwADsdUgBAAErAMAA/V4AIRzAANgsFsAA2Ccuh+TAAOouwADsb0gBAAErAMAA/V4+AT0XwADYPS6cU8AA6i4cwADYUhbAANhNLofkwADqLsAA7G+B+QQAARbAANhZLsAAcE3AAOouwADsmQOB6xbAANh1LsAAb6vAAOouwADsm4OJFsAA2IcuwABwTsAA6i7AAOyawABvCSnAALmdwADsdT8GwADsloKIwADYs8AA2LPAANkTAADAAIAnwADqLgAAAAEDwADYwsAA2RMAAAAAAAAAWwE+BE7AANjPwADY0wAAn8lgA8AA9IsBFsAA2NUuh+TAAOouwADsbz0XwADY3y6H5MAA6i4rwADsbz0XwADY8C6748AA6i4pwADscD0cwADZCIDAANkEwHdO2IKIAAAAAMAA9JUGwADsl4KIwADZGMAA2R3AANqVAADAAIAIwADqLgAAAAEDwADZN8AA2pUAAAAAAAAAXAE+AUnAANlAFsAA2VAWwADZRC7AAG9ZwADqLsAA7HHAAG8uwAC6Hz4CPRzAANllLsAAgBzAAOouAAAAAMAA7JVJwADZyyEcwADZ1BbAANnPLofkwADqLsAA7G9IAQABKwDAAP1ePgE9F8AA2ewWwADZ5y6H5MAA6i7AAOxvwACAFinAAPSNPz4CPRfAANohLsAAgCLAAOouKcAA7HJJwADaQSEcwADaShbAANpFLofkwADqLsAA7G9IAQABKwDAAP1ePgE9HMAA2mIWwADaXS6H5MAA6i7AAOxvwABwhgEAAWrAANp7YAPAAPQtwAGujQDAAPSWPwbAAOyYgojAANqawADan8AA2w0AAMAAgAnAAOouAAAAAQPAANqywADbDQAAAAAAAABcAT4BScAA2rshHMAA2sQWwADavy6H5MAA6i7AAOxvSAEAASsAwAD9Xj4BPRfAANraFsAA2tUuh+TAAOouwADsb8AAgBYhFsAA2vsWwADa7y7AAG9ZwADqLsAA7HHAAG8rwAC6HsAA9I0/BsAA7JmCiMAA2xLAANsXwADcqwAAwABwTcAA6i4AAAABA8AA2x7AANyrAAAAAQEBwADbHwAAAJu6WwAAXAE+AUFHwADbLIDAANs0wHdRKwMBwADbV2rAANtXYAPAAPRwwAGtLAA+BEnAANtlHMAA224WwADbaS6H5MAA6i7AAOxvSAEAASsAwAD9XkLAANt3AD9OwADbisAA25EAAIKLYAPAAOMoARzAANuYFsAA25Muh+TAAOouwADsb552AAAAAMAA9JNJwADbqCEcwADbs4HAANuswHdRjkgBAAErAMAA/V49HMAA28gWwADbvC7AAG9ZwADqLsAA7HFWAQABgcAA28zAd1GOAMAAuik/QsAA290AAcAA2/5qwADb/mADwAD0cMABsHMAPgI9HMAA3BcWwADcDS7AAIAjwADqLsAA7HOCigAAAADAAOxnQsAA3CgAAcAA3ElqwADcSWADwAD0cMABsH8APgM9F8AA3F0uwACAIsAA6i4pwADscj0cwADcixbAANx/LsAAb1nAAOouwADscYKIAAAAAMAAuitCwADcnAAGwADsmoKIwADcsMAA3LXAAN04AADAAHBOwADqLgAAAAEDwADcvMAA3TgAAAAAAAAAXAE+AknAANzFIRbAANzKLsAAgCLAAOouwADscj4CPRfAANzlLsAAgCLAAOouKcAA7HI9HMAA3REWwADdBS7AAG9ZwADqLsAA7HGCiAAAAADAALorPz0cwADdLhbAAN0kLsAAgCPAAOouwADsc5+TAAAA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wABMVxi748AA6i4AYAPAAPo/ASoEwADuIYKPwABMYMAATG0YsnDAAOouAGADwAD6PwEpAQXAAO4ngo/AAExywABMcsAATJcAAAADwABMfcAATJcAAAACAgLAAEyDAAAElzxgA8AAxxsAwABMjwAABJ/BYAPAAO4AAABgA8AA7hsBPwMIAcAA7h+AAMB30i0IAcAA7h6BAMB30j0JAcAATHLAAMclAAAAAAMGwADuI4KPwABMnMAATKHAAEzkAABWAAAAAQPAAEykwABM5AAAAAEBAcAATK8AACASXQPAAPypAWADwAD8BQAAXAE+AT0cwABMuy7AAG3NBAAEgMAATMTAd9KnkxbAAEzSgMAATM3Ad9KnYcAA/NgqAMAA7iQGwADuJIKPwABM6cAATO7AAE+CAADAAG3NAAAAAQPAAEz2wABPggAAAAQEBMAATQEAAAASXQPAAPypAWADwAD8BQDAAE0LAAAAamADwAD8BQDAAE0WAAAAgoxgA8AA/AUAwABNIAAAAMAAbc5gA8AA+j8AAFwBPgVJwABNLhbAAE0yLrvjwADqLsAA7iBKwABNOwA/ScAATUccwABNT4LAAE1LwHfTREgBAAErAMAA/Sg9MMAATVgfwABNYsAA+zoBAAEngowAPz0ewABNj8AA+0YDAAOBwABNn8B30zWCwABNpsB300QWwABNsIDAAE2rwHfTH2HAAPzYAEs+BT0XwABNyS6ycMAA6i4qwADuIU7AAE3vwABN/gAAwAB/uWADwADtnQEewABOCsAA6mMDAAOAwABOLcB30x+BwABOM8B30zWCwABOOsB300QAPRzAAE5OFsAATkYun8HAAOouwADuHsAARpQDAAMWwABOZYTAAE5WwHfUBIKLwADtnxbAAE58hMAATm3Ad9QEasAA7aAcwABOkYLAAE6NwHfTRIGNAQABHMAATpqBwABOlMB30zWBjQEAARbAAE6rhMAATpzAd9QEasAA7aAAwAD9KwDAAP0rAMAA7gVOwABOxAAAAG9dA8AA/KkBYAPAAPwFAEPAAE7PIRzAAE7+jcAATtfAd9TOHMAATuUWwABO3S6fwcAA6i7AAO4ewAB+vAEAAAGEQSrAAO4GSAEAASsAwAD9Xj4BPRzAAE8XFsAATxEulzzAAOouwADuH1YBAAGFwABPG8B31M4AwADHSwABwABPL1sB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A8AAyV2BiV0DwAC43gFgA8AA/esABsAA7uGClcAARd/AAEXmwABGEQACwABcQQAAAAEDwABF9sAARhEAAAABAAABwABGAQAAAMAAUYdgA8AAx5cBasAARgtgA8AAyV2BiWADwAD96wAGwADu4oKVwABG68AARwDAAEcmAALAAIFoAAAAAQPAAEcLwABHJgAAAAEAAAHAAEcWAAAAwABRh2ADwADHlwFqwABHIGADwADJXYGJXQPAALjeAV0DwAD8qQFgA8AA/esABsAA7uOClcAAR9vAAEfowABIEgACwACBaQAAAAEDwABH98AASBIAAAABAAABwABIAgAAAMAAUYdgA8AAx5cBasAASAxgA8AAyV2BiV0DwAD8qQFgA8AA/esABsAA7uSClcAASn/AAEqMwABK4wACwAB70gAAAAEDwABKmMAASuMAAAADAQHAAEqjAAAAhDRdA8AA/KkBYAPAAPwFAALAAEq6AAAAgb9gA8AA7qQBasAASslgA8AA7qSBbsAAStUAAACEQWADwAD6PwFqwABK3GADwAD6PwBdA8AAuN4BYAPAAO7EAAbAAO7lgpXAAE0WwABNG8AATXYAAq7BAAAAAQPAAE0rwABNdgAAAAMBAcAATTYAAACENF0DwAD8qQFgA8AA/AUAAsAATU0AAACBv2ADwADupAFqwABNXGADwADupIFuwABNaAAAAIRBYAPAAPo/AWrAAE1vYAPAAPo/AFwABsAA7uaClcAAT+vAAE/4wABQdQACwACBagAAAAEDwABQBcAAUHUAAAAEAQHAAFANAAAAiDZgA8AA/esAA8AAUCcAAACBv2ADwADupAFqwABQNmADwADupIFuwABQTAAAAMAAUYdgA8AAx5cBasAAUFZgA8AAyV2BicAAUGcAAACEQWADwAD6PwFqwABQbmADwAD6PwBdA8AAuN4BYAPAAO7EAAbAAO7ngpXAAFK2wABSu8AAUzwAAoRFAAAAAQPAAFLMwABTPAAAAAQBAcAAUtQAAACINmADwAD96wADwABS7gAAAIG/YAPAAO6kAWrAAFL9YAPAAO6kgW7AAFMTAAAAwABRh2ADwADHlwFqwABTHWADwADJXYGJwABTLgAAAIRBYAPAAPo/AWrAAFM1YAPAAPo/AFwABsAA7uqClcAAU2zAAFN3wABTewECTgAAAAEDwABTe8AA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AAAAAQPAAEw7wABMPQAAAAAAAABgA8AA/AUABsAA74SClsAATEHAAExBwABMSwAChwAAAAABA8AATEnAAExLAAAAAAAAAFsABsAA74WClsAATE/AAExPwABMXgACnnYAAAABA8AATFPAAExeAAAAAQEBwABMWAAAAIQ0YAPAAPwFAABbAAbAAO+GgpbAAExiwABMYsAATJAAAsAAfqEAAAABA8AATGrAAEyQAAAAAwMDwABMdQAAAIKLXQPAAPypAWADwAD8BQDAAEyBAAAAamADwAD8BQDAAEyMAAAAgoxgA8AA/AUAAFsABsAA74eClsAATJTAAEyUwABMqAAChu8AAAABA8AATJ3AAEyoAAAAAQEBwABMogAAAICWYAPAAPwFAABbAAbAAO+IgpbAAEyswABMrMAATNsAAsAAfqQAAAABA8AATLXAAEzbAAAAAwMDwABMwAAAAIKLXQPAAPypAWADwAD8BQDAAEzMAAAAamADwAD8BQDAAEzXAAAAgoxgA8AA/AUAAFsABsAA74mClsAATN/AAEzfwABM6QACgbEAAAABA8AATOfAAEzpAAAAAAAAAFsABsAA74qClsAATO3AAEztwABNBgACwAB+pwAAAAEDwABM+MAATQYAAAABAQHAAEz9AAAAgbFgA8AA/AUAAFsABsAA74uClsAATQrAAE0KwABNHgACwABLbAAAAAEDwABNEsAATR4AAAABAQHAAE0XAAAAYWADwAD8BQAAWwAGwADvjIKWwABNIsAATSLAAE0qAAJhAAAAAQPAAE0owABNKgAAAAAAAABbAAbAAO+NgpbAAE0uwABNLsAATTUAAoRBAAAAAQPAAE0zwABNNQAAAAAAAABbAAbAAO+OgpbAAE05wABNOcAATVsAAsAAfqwAAAABA8AATT3AAE1bAAAAAwMDwABNQgAAAMAAfqxgA8AA/AUAwABNTAAAAGpgA8AA/AUAwABNVwAAAIKMYAPAAPwFAABbAAAAeGvhAHhsOQB4bG0AeGyfAHhszAB4bQkAeG1uAHhtqwB4bhAAeG49AHhufAB4broAeG7mAHhvEwB4b3MAAAAOAsAA74+ClsAATWDAAE1mwACAGgPAAIHBAAABYAHAAP1RAAFgAcAA7usIBMAA75KClsAATaTAAE3FBMAAgcLAAOouAGADwAD6PwEqBMAA75eClsAA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ucYBYAPAAPRwARbAAFaULsAAg9fAAOouwADzOTUAAAABAFsBHMAAVrIUwABWsMB51pQMAMAAbzwBAAEWwABWuS7AAIPqwADqLsAA81kAwAC5yTUAAAABAFsBHMAAVtUUwABW08B51pQMAIHrAQABFsAAVt0uiIvAAOouwADzXQDAALnKNQAAAAEAWwEcwABW9RTAAFbzwHnWlAwAg4kBAAEWwABW/C7AAIPrwADqLsAA81wAwAC5yxQAwHnWlAwASz4DTsAAVyXAAFc2AADAAIBoYAPAAOMoAR7AAFdSwADz0QEAARTAAFdtwHnTGQoAAD0cwABXlhbAAFeILsAAg+XAAOouwADzSsAAf5gGAAYWwABXsRbAAFepLsAAdSXAAPNMllzAAPQDFsAAV8EuglPAAPNOFsAAV9QuwACAPMAA800iFsAAV+kuwACAMcAA808BFsAAWAUuwACAMsAA81AWwABYKS7AAIAywADzUBTAAFhNwHnXZAsAAMAA86A9HMAAWGYuwACD7cAA6i4AAAAAwADzXwEBwABYgFsBwABYhwAAAYNNWwABwABYigAAAYhHYAPAAP2/AD4BPRzAAFiVLoiLwADqLgIAAhTAAFiiwHnYPgsAFMAAWKXAedhKDAAAwADzXQoIAcAA80yAAMB50lkIAcAA802CAMB50n0IAcAA806DAMB50o8IAcAA8zWEAMB50p8IAcAA8zmFAMB50rEIAcAA8zqGAMB50soIAcAA80+HAMB50uMIAcAA81AUAMB50vUIAAgBwADzURQAwHnTBwkACQHAAE9awAC5wwAAAAAtBsAA81SCpMAARTzAAEVIwABFkQABwACD7sAA6i4AAAABA8AARVrAAEWRAAAAAQEBwABFXwAAAJ2YYAPAAPwFAABgA8AA+j8BSsAARXQBHMAARX+AwABFdMB52TeBbQEAAWrAAEWCYAPAAPwFIQDAAP01BsAA82yCpMAASsvAAErrwABPVQABwAB/mAAAAAEDwABK8sAAT1UAAAALAgLAAEsdAAAAllxbAMAASycAAADAAIPnYAPAAPwFAAnAAEtCAAAAwACAPGADwAD6PwFqAGADwAD9DnnAAEtjAAAAglNgA8AA88ABagBgA8AA/Q55wABLfAAAAMAAfB1gA8AA9IsBagBgA8AA/Q55wABLrQAAAIH4XQPAALnGAWADwAD0cAFqAGADwAD9DnnAAEvLAAAAwACDw10DwAD8qQFgA8AA/AUBagBgA8AA/Q55wABL5AAAAMAAgDFgA8AA+j8BasAAS/5gA8AA+j8AwABMEAAAAMAAgDJgA8AA+j8BasAATCpgA8AA+j8AwABMPAAAAMAAg79hAwFgA8AA8xNgA8AA+j8BagBgA8AA/Q55wABMfgAAAMAAg7hdA8AA/KkBYAPAAP3rAWoAYAPAAP0OeV0DwAC43gFgA8AA8yoBPgU9HsAATJnAAPNVBgAGgMAATKfAedmlgcAATK3AedmwgsAATLzAednDh8AATMfAedpUFMAATOnAedpyCAAUwABNA8B52pAJAABJwABNGiXAAE0jgMAATR7AedmlYAPAAPP3PYjAAE03wHnZpRbAAE1DgMAATT7AedmlllwAP07AAE1dwABNZQAAwAB1JWADwADz9wEWwABNboTAAE1nwHnZ98AAdSXAAPSdScAATXshHMAATYSAwABNf8B52aVIAQABKwDAAP1ePgE9FcAATZXAedtkCx7AAE2vwAD0DgIAAhTAAE3BwHnbZAsAJsAATcoBgMAATcrAedmlYAPAAP3rAD9KwABN2wEWwABPSxbAAE8vH8AATebAAPOFCwALFMAATgTAedtkCwCBwABOGcB52bCCwABONMB52cODwABOS8B52d6EwABOYMB52feFwABOdMB52hKGwABOjsB52jKHwABOqMB52lQUwABOzsB52nIIABTAAE70wHnakAkAFMAATxLAedq0CgAAwACD1sAA6i7AAPM2gdzAALkDBsAA822CpMAAWLbAAFjZwABZxQAAgfkAAAABA8AAWN/AAFnFAAAABAEBwABY5QAAAMAAbzxhAwFgA8AA9HBcAAPAAFkSAAAAgetgA8AA+/sBagBgA8AA/Q55wABZIAAAAIOJYQMAXAFqAGADwAD9DnnAAFkvAAAAwABvCWADwAD6PwFqAGADwAD9DnldA8AAucYBYAPAAPRwAT4CPRzAAFlFLsAAg+/AAOouAAAAAMAA82pKwABZXAEcwABZaxbAAFljLsAAcA/AAOouwADzOIH5BAABgMAAWXLAedysA4HrgcAAWYvAedzDg4mCwABZnMB53NzAAG8Jg8AAWbPAedzzwAC5nQbAAPNVgqTAAFnKwABZ1sAAXJwAAcAAg/DAAOouAAAA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wACASAAAAAEDwAClN8AApUoAAAABAQHAAKVBAAAAmcFgA8AA+/sAAFwABsAA86mCpMAApU7AAKVTwACllwACwACASgAAAAEDwACldMAApZcAAAABAQHAAKV+AAAAwACATGADwAD7+wAAXAAGwADzq4KkwACmdMAApnjAAKaCAALAAIBNwADqLgAAAAEDwACmgMAApoIAAAAAAAAAYAPAAPwFAAbAAPOugqTAAKaHwACmocAApqgBAsAAgDkAAAABA8AApqjAAKaoAAAAAAAAAF0DwAD8qQFgA8AA84YAAAB6KD0AeiiFAHopHgB6KU0Aeil8AHopsAB6Kd8AeipEAHoqcQB6KqUAeirrAHorKgB6K2sAeiujAHor3gAAAA4CwADzr4KkwACnBMAApwrAAKl9A8AAhBoAAAFgAcAA/VEAAWABwADtjwMEwADzsYKkwACnP8AAp0MJgpAAYAPAAP3rAATAAPOygqTAAKdUwACnWwkiAGADwAD96wAEwADzs4KkwACnbcAAp3QJg0cAYAPAAO2UAAIFwADzt4KkwACnecAAp5vAAKgAAQABasAAp3pgA8AA+gbAAX47A8AAp6fAAKgAAAAAAgACwACnsAAAACJgA8AA/esBasAAp7pgA8AA/euEEsAAp8YAAACDR2ADwADtlAFqAGADwAD9DnkAYAPAAPOvAT8BCgDAAKfdwADzuQMAAyfAAIQagMAAp+/AeizLgcAAp/jAeiznAAXAAPO5gqTAAKgFwACoC8AAqEABgLXAAOouAAPAAKgZwACoQAAAAAMDA8AAqB8AAASCkGADwAD96wDAAKgqAAAEImADwAD96wDAAKg4AAAEg0dgA8AA7ZQAAGADwADzrwE/BAgBwADzsYAAwHotWQgBwADzsoEAwHotaQgBwADzs4IAwHoteAkBwACoC8AA/WcAAAAAAQbAAPO1gqTAAKhFwACoTMAAqXsAACMAAAABA8AAqFTAAKl7AAAAAAAAAGADwAD96wE+BE7AAKhqwACobQAAg+RgA8AA/jUBH8AAqHPAAP5UAAAAAD0cwACoioDAAKiHwHot+YKKAQABFsAAqJAugpDAAPOxAMAA/klJwAComxbAAKinFsAAqJ8uIsAA87KDssAA/fI+Aj0cwACovoDAAKi7wHot+YKKAQABJMAAqNACJ4NVFsAAqMguIsAA87IA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AQABgMAARQXAexg7AMAA/SscwABFEIPAAEUKwHsZNUsBAAGFwABFEcB7GYwAwAD8uADAAPy5TsAARSXAAEUsAAGBdmADwAD2MAEfwABFMsAA9qkDAAMWwABFQC7AAIVpwAD1qMAA9kaCwABFTcB7GKuEwABFWcB7GVsAScAARWwWwABFcC7AAIVpwAD1qMAA9kY+AUXAAEW1AcAARb7AAEXAAABiYAPAAPwFAZMBHMAARceGwABFxcB7GqpjAQABgMAARcnAexg7AMAA/TIBjsAARczAexqqHMAARc2GwABFzMB7GqpkAQABlADAAP0qPgFJwABF2yEcwABF6RzAAEXlg8AARd/Aexk1SwEAAYbAAEXmwHsaqgDAAPy4SAEAAZMAwAD9KD4BSsAARfsBHMAARgmFwABGAsB7GkeBjQEAARrAAEYLwAD2TwDAAPaDPz9KwABGLAGFwABGM8B7GkcGwAD2XoKzwABG+sAARwXAAEikAAHAAIWbwAD1qAAAAAEDwABHE8AASKQAAAAEBATAAEcmAAAAwACFmGADwADjVgDAAEczAAAAwACFmWADwAD8BQDAAEc+AAAAg6NgA8AA/AUAwABHTAAAAMAAhYxgA8AA41YAAGADwAD8BQE+Bk7AAEdmwABHcQABwACFlmADwAD8BQEcwABHeYHAAEdzwHsbs4GNAQABgsAAR3vAexvFAMAA/StJwABHghzAAEeRhMAAR4bAexvygWsBAAGTAMAA/TM+AUrAAEefAZM/QBzAAEfOFsAAR8eDwABHusB7G9VhwAD82IFtAQABHMAAR9yEwABH0cB7G/JkAQABHMAAR+qEwABH38B7G/KDdwEAAZQAwAD8HQDAAP0qAMAA/TXAAEe6wABH7gBFwABH9QHAAEf+wABIAAAAYmADwAD8BQGCwABIAsB7G8UBHMAASAeFwABIBcB7HLJjAQABgcAASAnAexuzAMAA/TIBjcAASBDAexyyHMAASBGFwABIEMB7HLJkAQABlADAAP0qPgE9HMAASCmDwABIHcB7G9WAvwIAAhzAAEgshcAASCrAexyygY0BAAGCwABILsB7G8UAwAD9KxzAAEg6gMAASDPAexuhSwEAAYXAAEg7wHscsgDAAPy4AMAA/LlJwABISRbAAEhYhMAASE3AexvyverAAPw6PgE9HMAASHODwABIZ8B7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JwEcwADaM4HAANouwHue2YO7AQABHMAA2juBwADaNsB7ntmDvAEAATcGAMAA/CIAwAD8H0/AANpNwADaUQAAAYceYQMBYAPAAPwFYAPAAPwFAAPAANpXwADbCQAAAAEBAcAA2lwAAACDyGADwAD8BQAAYAPAAPwFAT4DPYrAANpqwHugCRzAANp8N9////+DdwEAARzAANqEgsAA2n/Ae6AJZAEAARzAANqbHMAA2pM3w////4N3AQABgsAA2pXAe6AJAMAA/B2DugEAAZYAwAD8IQDAAP0qAMAA/B09isAA2qnAe6AJHMAA2rWCwADasMB7oAmDuwEAARzAANq9gsAA2rjAe6AJg7wBAAE3CwDAAPwiAMAA/B9KwADaywEcwADa3Tff////g3cBAAEcwADa5YLAANrgwHugCWQBAAEcwADa/BzAANr0N7//g3cBAAGCwADa9sB7oAkAwAD8HYO6AQABNw8AwAD8IQDAAP0qAMAA/B1JwADbEBbAANsULsAAhYrAAPWowAD2mkrAANsdATeaMz9OwADbS8AA21AAAIPIYAPAAPwFASMWwADbUi7AAIVpwAD1qMAA9kY3wAFGgTfABo55AWADwAD8BUXAANuEAcAA243AANuPAABiYAPAAPwFAZMBHMAA25aDwADblMB7oX1jAQABFsAA25guwAB24cAA9ajAAPZIAMAA/TIBi8AA25/Ae6F9HMAA26CDwADbn8B7oX1kAQABlADAAP0qPgE9isAA26zAe6FAHMAA27qAwADbs8B7nqsgAgACgsAA27vAe6FAHMAA28gWwADbwS7AAIVqwAD1qMAA9kdLAQABg8AA28nAe6F9AMAA/LgAAErAANvYARzAANvlgcAA29/Ae5/hIAEAAYLAANvmwHuhQAAABsAA9oWCs8AA3NzAANzqwADdMQMASAAAAAEDwADc7MAA3TEAAAABAQHAANz0AAAAg9ZgA8AA/VEAAGADwAD6PwFKwADdBAEiJcAA3QqAwADdBMB7onpgA8AA9jAAHMAA3S0cwADdHC6CSwEAARTAAN0mwHuiegABYAPAAPYwAMAA9n1IAQABkwDAAP0oBsAA9pyCs8AA4OrAAODywADhkQEAwABLGQAAAAEDwADg/MAA4ZEAAAAAAAAAYAPAAPwFAT4DScAA4QIcwADhDBbAAOEGLsAAduHAAPWo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xziHwAEREsB7x/gmwAERGwEUwAERG8B7zxoQAGADwADjVgA+Aj0ewAERSMAA9mYFAAWDwAERUMB7xziHwAERWcB7x/gmwAERYgEUwAERYsB7zxoQAGADwADjVofAARFrwHvH+CbAARF0ARTAARF0wHvPGhAAYAPAAONWAD0VwAERjMB7z1cUKT89HsABEcTAAPZhBAAEJsABEckBFMABEcnAe88MDwBgA8AA41YUwAER0sB7zoUNAJQmwAER3wEUwAER38B7zwwPAGADwADjVgBJwAER+BzAARINHMABEggcwAESBBTAARH9wHvPGhAASwEAAZMAAIN3AQABlAAASAEAAZQAwAD9Xj4BScABEjMUwAESN8B7z1cUAD4BPR7AARJSwAD2ZQUABSbAARJaARTAARJawHvPGhAAYAPAAONWFMABEmPAe86FDQCDwAESbcB7xziHwAESdsB7x/gmwAESfwEUwAESf8B7zxoQAGADwADjVgBJwAESmiIhHMABErAcwAESphTAARKfwHvPGhAASwEAAYfAARKnwHvH+AAASAEAAZMAwAD9XgEcwAES+x7AARLIwAD2ZAQABCbAARLXARTAARLXwHvPGhAAYAPAAONWh8ABEuDAe8f4g8ABEunAe8c4h8ABEvLAe8f4AICXAQABkwDAAP00PgE9HsABEw/AAPZmBQAFJsABExcBFMABExfAe88aEABgA8AA41YUwAETIMB7zoUNAIPAARMqwHvHOIfAARMzwHvH+CbAARM8ARTAARM8wHvPGhAAYAPAAONWAD4CPR7AARNlwAD2ZgUABYPAARNtwHvHOIfAARN2wHvH+CbAARN/ARTAARN/wHvPGhAAYAPAAONWh8ABE4jAe8f4JsABE5EBFMABE5HAe88aEABgA8AA41YAPRXAAROnwHvPVxQpPz0ewAET2cAA9mEEAAQmwAET3gEUwAET3sB7zxoQAGADwADjVhTAARPnwHvOhQ0AlCbAARP0ARTAARP0wHvPGhAAYAPAAONWAEPAARQMHMABFCQcwAEUHxzAARQbFMABFBTAe83oCwBLAQABkwDAAPy4g3cBAAGUAMAA/B1IAQABkwDAAP0oPgM9HsABFDTAAPZhBAAEFMABFDnAe83oCwCHwAEUQsB7x/iUFMABFE7Ae83oCwAAScABFGAUwAEUZMB7zjgMAD4C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CIHAAEL0wH30fD9JwABC/xzAAEMIgcAAQwPAffR8gW0BAAE3CgDAAP01SsAAQw8BJMAAQyYDgsAAQxnAffSqJ8AAhhqBwABDIcB99Hw/SsAAQywBJMAAQ0QDgsAAQzbAffSqJ8AAiQOBwABDP8B99HwGwAD6iYLEwABDTcAAQ1vAAEQaAAHAAIkEwAD1qAAAAAEDwABDZcAARBoAAAABAQHAAENqAAAAg6NgA8AA/AUAAGADwAD96wE+BUAiHMAAQ3yAwABDesB99fFjAQABHMAAQ343pw+BxAAAAADAAPwoAMAA/TIBHMAAQ4mAwABDh8B99fGAlwEAATenDwDAAP00wABDesAAQ48ATsAAQ5rAAEOfAADAAIkCYAPAAPwFARzAAEOjgMAAQ6HAffXxl84AAAAAwAD8KU7AAEO1wABDugAAwABIfWADwAD96wEjHMAAQ76AwABDvMB99fFjAQABkwDAAP0yJ4GNJ2QBYAPAAP3rScAAQ9McwABD3IHAAEPXwH32XIFtAQABN8ABhqAAwAD9NUrAAEPnASTAAEP6AoLAAEPwwH32ioHAAEP1wH32XD9KwABEAAEkwABEFgOCwABECsB99oonhAiBwABEEcB99lwGwAD6ioLEwABEH8AARC3AAEScAAHAAIkFwAD1qAAAAAEDwABEOcAARJwAAAABAQHAAEQ+AAAAg6NgA8AA/AUAAGADwAD96wE+A0nAAERHHMAARE2AwABES8B991aBbQEAATdkAMAA/TVKwABEVQEkwABEYgGAwABEX8B991Y/ScAARGgcwABEboDAAERswH33VoFtAQABNwoAwAD9NUrAAER1ASTAAESDAieECIDAAESAwH33Vj9KwABEiQEkwABEmAInwACGGoDAAESVwH33VgbAAPqLgsTAAEShwABEr8AARPkAAcAAiQbAAPWoAAAAAQPAAES5wABE+QAAAAEBAcAARL4AAACDo2ADwAD8BQAAYAPAAP3rAT4CScAARMccwABEzYDAAETLwH34J4FtAQABNwoAwAD9NUrAAETUASTAAEThAYDAAETewH34Jz9KwABE5wEkwABE9QInhAiAwABE8sB9+CcGwAD6loLEwABGs8AARrrAAEiHAAAjAAAAAQPAAEbCwABIhwAAAAAAAABgA8AA/esBPglOwABG0sAARtQAALwzYAPAAP3rAR7AAEbWwAD6iAEAARbAAEbiLsAAiLXAAPqkAE7AAEb0wABG9gAARWADwAD96wEewABG+MAA+osBAAEWwABHAy7AAIi2wAD6pQBOwABHFsAARxgAAJacYAPAAP3rAR7AAEcawAD6iwEAARbAAEclLsAAiLfAAPqmAE7AAEc2wABHOAAAgPNgA8AA/esBHsAARzrAAPqLAQABFsAAR0UuwACIuMAA+qcATsAAR1fAAEdbAACcr2ADwAD96wEewABHXcAA+osBAAEWwABHaC7AAIi5wAD6qABOwABHfMAAR4AAAMAAiQdgA8AA/esBHsAAR4LAAPqLAQABFsAAR40umovAAPqpAE7AAEehwABHpAAAlolgA8AA/esBHsAAR6bAAPqKAQABFsAAR7MuwACIusAA+qoATsAAR8zAAEfPAADAAHO9YAPAAP3rASMcwABH3RbAAEfRLsAAiLvAAPqrSAEAAZMAwAD9KCcAHsAAR+nAAPqKAQABFsAAR/YuwACIu8AA+qsAAWADwAD960nAAEgIFsAASAwuwACAfsAA+nc+AUrAAEgbASTAAEhDD4DAAEgkwH34wieBjYHAAEgnwH348SeBjYLAAEgqwH35HyeA2YPAAEgtwH35TieC5oTAAEgwwH35fSeC5oXAAEg1wH35rCeBaobAAEg6wH3524fAAEg+wH36CifAAEeYPgFKwABIWAEkwABIfQ6AwABIYcB9+MIngY2BwABIZMB9+PEngY2CwABIZ8B9+R8ngNmDwABIasB9+U4nguaEwABIbcB9+X0nguaFwABIcsB9+awngWqGwABId8B9+duHwABIesB9+goGwAD6l4LEwABMQ8AATErAAE5fAADAAEzuAAAAAQPAAExZwABOXwAAAAAAAABgA8AA/esBPglOwABMacAATGsAALwzYAPAAP3rASMiHMAATHsWwABMdi7AAIi1wAD6pIFtAQABHMAATH43pw+BxAAAAADAAPwoAMAA/TUAHMAATIwWwABMhy7AAIi1wAD6pIFrAQABN6cPAMAA/TMewABMl8AA+ogBAAEWwABMoy7AAIi1wAD6pAAewABMq8AA+okBAAEWwABMti7AAIi1wAD6pAABYAPAAP3rTsAATMjAAEzKAABFYAPAAP3rAR7AAEzMwAD6iwEAARbAAEzXLsAAiLbAAPqlAE7AAEzqwABM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J4NChsAAReXAflKgJ4DZJ8AAiZUAwAD+TELAAEYaAEnAAEY2HMAARkCAwABGOsB+Tw9IAQABasAARlVgA8AA/AWBVwDAAP0oPgE9HMAARnEUwABGacB+UzoIAIICAQABJ8AAiZYAwAD+TD4BPRzAAEasFMAARqTAflM6CACCAgEAASTAAEbgAifAAImXHsAARsfAAPsPAQABFsAARtQuwABoFMAA9ajAAPt+AADAAP5MScAARu4cwABG94HAAEbywH5PXkgBAAFqwABHDGADwAD8BQkAwAD9KD4CTsAARyTAAEcmAABFYAPAAP3rASMUwABHKMB+U1wJACTAAEdEARbAAEc5LsAAaBTAAPWowAD7fiTAAEdTAYLAAEdIwH5PlgFgA8AA/es9HMAAR2MUwABHW8B+UzoIAIKKAQABJMAAR4gFJ8AAiZgUwABHesB+WJwKACeD14PAAEd9wH5QLSeDIQDAAP5JScAAR5YcwABHqITAAEeawH5QR0gBAAGTAMAA/Sg+AT0cwABHvhTAAEe2wH5TOggAgooBAAEkwABH4AInwACJmILAAEfVwH5PlgDAAP5JScAAR+4cwABH94HAAEfywH5PXkgBAAFqwABIDGADwAD8BSEAwAD9KD4BPRzAAEglFMAASB3AflM6CACCigEAASTAAEhRAyfAAImYgsAASDzAfk+Wg8AASEfAflAtAMAA/kk+AT0cwABIbxTAAEhnwH5TOggAgooBAAEkwABIngQnwACJmILAAEiGwH5PlifAAFQbg8AASJTAflAtAMAA/klJwABIrIXAAEiwwH5ScD4DTsAASNTAAEjlAADAAImZYAPAAP41AR/AAEjrwAD+VAAAAABFwABJAQHAAEkKwABJDAAAYmADwAD8BQGTARzAAEkTFMAASRHAflpQCwBjAQABFsAASSwWwABJFS7AAIlpwAD1qMAA+31hwAD82ADAAP0yARXAAEk0wH5aUAscwABJNRTAAEk0wH5aUAsAZAEAAZQAwAD9Kj4CScAASUMcwABJSRTAAElHwH5aUAsAgJcBAAGTAMAA/TQ+AT0cwABJaxTAAElawH5aKAoAgooBAAEngYsAwAD+ST89HMAASZsUwABJisB+WigKAIKKAQABHMAASbcWwABJoS7AAIlpwAD1qMAA+31LAQABFMAASbjAflpQCwAAwAD8uADA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ANMRIhzAANMagsAA0xXAf63ZSAEAASsAwAD9+gAiIhbAANMvgcAA0ybAf63Ag7LAAP3yASEcwADTQoPAANM9wH+t8kgBAAErAMAA/SgBFMAA003Af7AXCQA+AT2KwADTXsB/rdknAD9OwADTeMAA04UAAJyCYAPAAPo/ASEcwADTjYLAANOIwH+t2UgBAAErAMAA/fo9jMAA05vAf64LHsAA06LAAP75BgAGhMAA07XAf64Lkx7AANO+wAD15QEAAYTAANPSwH+uCwCFwADT2cB/riOAwADT58B/racUwADT78B/sLEKAABJwADUAiIiFsAA1A2AwADUBsB/raeBVcAA/fEAHMAA1B2CwADUGMB/rdlIAQABKwDAAP36ACEcwADULoTAANQpwH+uC4HWAQABJ1AAwAD9/T4CTsAA1EzAANRYAADAAIq8YAPAAPo/ASIWwADUYYDAANRawH+tp4OywAD98gEhHMAA1HSCwADUb8B/rdlIAQABKwDAAP36PYzAANSDwH+uCx7AANSKwAD/BgIAAoTAANShwH+uCxTAANSnwH+xhAsAAD4BPYzAANTIwH+uCx7AANTPwAD/BQEAAYTAANTiwH+uCwBJwADU8yIcwADU/ILAANT3wH+t2UgBAAErAMAA/foAHMAA1QyEwADVB8B/rguB1gEAASeZcgDAAP39PgE9isAA1SbAf63ZJwA/SsAA1TsBH8AA1UfAAP8eBwAHgMAA1VHAf62ngcAA1VnAf63AgsAA1WPAf63Zg8AA1WnAf63yhMAA1W/Af64LhsAA1XXAf65DFMAA1XzAf65/CAAABsAA/uCC6cAA1bLAANW6wADWaQQBgz4AAAABA8AA1cPAANZpAAAAAwIDwADVywAAAMAAimhgA8AA/esAwADV3QAAAMAAimlgA8AA/esAwADWBwAAAMAAfGZdA8AA/NoCYAPAAP3rYAPAAP3rAWoAYAPAAP0OeQBgA8AA/qcBPgFKwADWHwEmwADWHwEewADWJsAA/ukEAAQngz6AwADWO8B/styBwADWRsB/su6CwADWVcB/swAAYAPAAP6nBsAA/uGC6cAA1pPAANabwADXTAQBgz8AAAABA8AA1qXAANdMAAAAAwIDwADWrQAAAMAAimhgA8AA/esAwADWvwAAAMAAimlgA8AA/esAwADW6QAAAMAAfGZdA8AA/NoCYAPAAP3rYAPAAP3rAWoAYAPAAP0OeQBgA8AA/qcBPgFKwADXAQEmwADXAQEewADXCMAA/ukEAAQngz+AwADXHsB/s5mBwADXKcB/s6uCwADXOMB/s70AYAPAAP6nBsAA/smC6cAA11HAANdcwADX3AEAwACKaAAAAAEDwADXZsAA19wAAAAAAAAAYAPAAP3rAT4EScAA12whFsAA13EunILAAP7USsAA138BJwA/TsAA15LAANeVAACD5GADwAD+NQEfwADXl8AA/lQAAAAAPRzAANerLsAAir3AAPWoAQABgMAA17vAf7R+AMAA/wpKwADXxAEcwADXzoDAANfLwH+0fiMAAAAAwAD+TgbAAP7KgunAANfhwADX7MAA2AEBAJZbAAAAAQPAANf1wADYAQAAAAAAAABgA8AA/esBSsAA1/gBFsAA1/guwACKosAA9ajAAP6rBsAA/suC6cAA2AbAANgRwADYqAEAllwAAAABA8AA2BbAANioAAAAAAAAAGADwAD96wE+A0nAANgcHMAA2CYWwADYIC7AAH8twAD1qMAA/qxIAQABKwDAAP36SsAA2C8BJwA/ScAA2D4cwADYSBbAANhCLsAAfy3AAPWowAD+rIHWAQABJ5mWAMAA/f0+AUrAANhhARzAANhuFsAA2GguwAB/LcAA9ajAAP6sgL4CAAKUHMAA2IgWwADYgRbAANh7LsAAfy3AAPWowAD+rGHAAP3vgY0BAAGUAMAA/SsAwAD+AT9KwADYmAEWwADYny7AAH8twAD1qMAA/qwGwAD+zILpwADYrcAA2LXAANkEAQCWXQAAAAEDwADYusAA2QQAAAAAAAAAYAPAAPwFAT4CScAA2MAcwADYyhbAANjELsAAfDzAAPWowAD+rUgBAAErAMAA/ShKwADY0wEewADY2sAA/uYBAAEWwADY5y6BusAA/sIAP0rAANj0ARbAANj7LsAAfDzAAPWowAD+rQbAAP7mgunAANk7wADZRsAA2cAAAcAAir7AAPWoAAAAAQPAANlSwADZwAAAAAEBAcAA2VoAAACBumADwAD96wAAYAPAAPwFAT4DScAA2WgcwADZc4DAANlswH+24kgBAAEngz4AwAD9+krAANl+ATdQP0nAANmNHMAA2ZiAwADZkcB/tuJIAQABJ4M/AMAA/fpKwADZpAE3gbs/SsAA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BQEjHMABEdKAwAERzcB/4EmB1gIAAifAAIdcHMABEemGwAER48B/5I9kAQABlADAAP0qAMAA/f0cwAER94bAARHxwH/kj2QBAAGWAMAA/SocwAESA4bAARH9wH/kj2QBAAGUAMAA/SoBYAPAAPwFPY3AARIUwH/kdx7AARIdwAD+8wQABIDAARIuwH/gSYfAARI0wH/k8YLAARJBwH/gaCfAAIroAD89HsABEmjAAP6mAwADgMABEnnAf+BJgcABEn/Af+BZhsABEobAf+SPAErAARKYARzAARLLHMABEsIkwAESwgInmZYcwAESqIDAARKjwH/gSYC+AgACgcABErLAf+BZhsABErnAf+SPAMAA/gFkAQABhcABEsTAf+R3AMAA/gBkAQABJ5mXAMAA/gA/P0rAARLuAR7AARL1wAD+9QMAA4DAARMHwH/gSYHAARMNwH/gWYLAARMUwH/gaAAGwAD+8YLpwAETbcABE3jAARQhAAHAAIrpwAD1qAAAAAEDwAEThMABFCEAAAADAwPAAROMAAAAllxgA8AA/esAwAETlgAAAGpgA8AA/AUAwAEToQAAAIKMYAPAAPwFAABgA8AA/AUBPgNOwAETsMABE7YAACdgA8AA/AUBHMABE72AwAETuMB/5pWAuwIAAieVtIHAARPKwH/mpQDAAP3+PYvAARPWwH/mzyMiHMABE+WDwAET38B/5s+BbQEAAYHAARPowH/mpQDAAP01ABzAARP3g8ABE/HAf+bPYwEAAYLAARP5wH/mtADAAP0yg8ABFADAf+bPgsABFAjAf+a0AWADwAD8BUrAARQRAYPAARQYwH/mzwbAAP7ygunAARQmwAEUMsABFJ0AAcAAiurAAPWoAAAAAQPAARQ/wAEUnQAAAAEBAcABFEQAAACccGADwAD8BQAAYAPAAPo/AT4BSsABFFABIhzAARRcgMABFFfAf+erYwEAATd/AMAA/TIAIRzAARSVHMABFH4cwAEUcmrAARRmXQPAAPypAWADwAD8BcAB4SpLAQABHMABFHiAwAEUc8B/56uDvAEAAZcAwAD8IgDAAPy4g3cBAAEcwAEUg5SDugEAARzAARSMgMABFIfAf+erg3cBAAE3DwDAAPwdAMAA/CEAwAD8HUgBAAGTAMAA/SgGwAD+84LpwAEVu8ABFcnAAR7FAAHAAIrrwAD1qAAAAAEDwAEV2cABHsUAAAAEAwTAARXhAAAAllxgA8AA/esAwAEV6wAAAGpgA8AA/AUAwAEV9gAAAIKMYAPAAPwFAMABFgkAAACDJGADwAD96wFqwAEWEmADwAD964QSAGADwAD96wE+CU7AARYqAAAAgotgA8AA/jUAScABFjYhHMABFkGDwAEWOsB/6MtIAQABJwAAwAD9+j4BPYzAARZQwH/o8x/AARZZwAD+VAEAAYPAARZmwH/oywA/TsABFn3AARaKAADAAIrsYAPAAPwFAYHAARaMwH/orE7AARabwAEWoQAAJ2ADwAD8BQGBwAEWo8B/6KxOwAEXAMABFw0AALsxYAPAAPo/ASlDwAEXGhzAARcnhsABFyHAf+llYwEAAYLAARcpwH/ouwDAAP0yQT4CTsABFzrAARc/AACccGADwAD8BQEcwAEXRoDAARdBwH/onIQLAQABhsABF1HAf+llAMAA/flJwAEXXxzAARdoFMABF2PAf+m+CABIAQABasABF2tgA8AA/AXAAGEJAMAA/Sg+C07AAReGwAEXkgAAhFdgA8AA/esBHsABF5TAAP79AwADgMABF6XAf+ichsABF6vAf+llKQBJwAEXwSIcwAEX0RTAARfFwH/qIgkASAEAASsAwAD9+gCHwAEX3MB/6YE+Aj2OwAEX9sB/6WUcwAEX/IbAARf2wH/pZWQBAAGWAMAA/SpCwAEYDAA/PSMcwAEYL4TAARgowH/o80gBAAErAMAA/V6MwAEYKMB/6PMfwAEYM8AA/lQAAAAAKwFgA8AA/jVOwAEYUsABGFgAAMAAib1gA8AA/esBHMABGF+AwAEYWsB/6JyAvgIAAoXAARhpwH/pRobAARh3wH/pZQDAAP4BPRzAARiOhMABGIfAf+jzgooBAAEUwAEYlMB/6uMKAADAAP5JTsABGKjAARi1AADAAIV5YAPAAPwFAZZJwAEYwhzAARjSFMABGMbAf+oiCQBIAQABKwDAAP36PgE9FcABGOfAf+oiCRzAARj6gMABGPXAf+icgL4CAAKGwAEZBMB/6WUcwAEZEYbAARkLwH/pZWQBAAGWAMAA/SoAwAD+AUnAARkmHMABGTYUwAEZKsB/6iIJAEgBAAEnlbQAwAD9+j4BPR7AARlKwAD+6AMAA4DAARlQwH/onIbAARlWwH/pZSfAAIrtAD89HMABGZ6EwAEZl8B/6POCigEAARTAARmkwH/qIgkAAMAA/kk9jsABGbrAf+llHMABGcCGwAEZusB/6WVkAQABFMABGcPAf+tHCwAAwAD9Kj2NwAEZ2cB/6UaGwAEZ6MB/6WU9j8ABGffAf+mBKUnAARoZHsABGh3AAP7yAQABFMABGivAf+m+CAAAPgJJwAEaPCIih8ABGkDAf+mBABzAARpeasABGlBgA8AA/AXAAF9+gWsBAAEUwAEaYcB/6b4IAADAAP0zABzAARp3asABGmlgA8AA/AXAAJoDgW0BAAEUwAEaesB/6b4IAADAAP01PgM9IxzAARrghMABGtnAf+jzSAEAASsAwAD9XozAARrZwH/o8x/AARrkwAD+VAAAAAArAWADwAD+NUnAARr+HMABGw+FwAEbAsB/6UZjAQABhsABGxHAf+llAMAA/TI+Aj0cwAEbLYTAARsmwH/o84KKAQABHMABGziAwAEbM8B/6JyAvgIAAoXAARtCwH/pRobAARtQwH/pZQDAAP4BAMAA/kk9jcABG2XAf+lGhsABG3TAf+llPz2PwAEbkcB/6YEqPz2OwAEbucB/6WUcwAEbvobAARu5wH/pZWQBAAGUAMAA/So+CE7AARvdwAEb6gAAwACFeWADwAD8BQGUScABG/ciHMABHAscwAEcARTAARv8wH/pvggAg3cBAAE3wAD8AADAAPwdSAEAATfAANgAAMAA/SgAHMABHCQcwAEcH4bAARwZwH/pZWQBAAGUAMAA/SpjAQABgsABHCbAf+i7AMAA/TI+Ak7AARw7wAEcQAAAg+tgA8AA/AUBHMABHEeAwAEcQsB/6JyECwEAARzAARxYhsABHFLAf+llZAEAAZQAwAD9KgDAAP35ScABHGgcwAEcfBzAARxyFMABHG3Af+5mCgCDdwEAATfAAPwAAMAA/B1IAQABN8AA3AAAwAD9KD4CPRXAARyVwH/pvggcwAEcvRzAARykN8ABAACBBgEAARzAARy2HMABHK0UwAEcqMB/6b4IAIN3AQABN4P/AMAA/B2DugEAATcKAMAA/CEAwAD8HoEGAQABHMABHMUUwAEcwMB/7mYKAIN3AQABN4P/AMAA/B0AwAD8Hj0VwAEc28B/7eUJlT8/PSMcwAEdEoTAAR0LwH/o80gBAAErAMAA/V6MwAEdC8B/6PMfwAEdFsAA/lQAAAAAKwFgA8AA/jVOwAEdNcABHTsAAMAAib1gA8AA/esBHMABHUKAwAEdPcB/6JyAvgIAAoXAAR1MwH/pRobAAR1awH/pZQDAAP4BPRzAAR1xhMABHWrAf+jzgooBAAEUwAEdd8B/76IKAADAAP5JPRzAAR2OhMABHYfAf+jzgooBAAEewAEdlMAA/v4BAAEUwAEdoMB/6b4IAAAAwAD+ST2OwAEdsMB/6WUcwAEdtobAAR2wwH/pZWQBAAEUwAEducB/7eUJAADAAP0qPY3AAR3PwH/pRobAAR3ewH/pZUnAAR33HMABHgKEwAEd+8B/6PNIAQABKwDAAP1eSsABHgsBHMABHheAwAEeEsB/6JyAvgIAAoHAAR4hwH/orILAAR4owH/ouwDAAP4BP0nAAR4yHMABHkOFwAEeNsB/6UZjAQABgsABHkXAf+i7AMAA/TI+Ak7AAR5ZwAEeXwAAwACJvWADwAD96wEcwAEeZoDAAR5hwH/onIC+AgAChcABHnDAf+lGgsABHn7Af+i7AMAA/gE9HMABHpGEwAEeisB/6POCigEAARTAAR6XwH/w6wgAAMAA/kk/SsABHqkBHMABHreEwAEesMB/6PMjAAAAAMAA/k4GwAD+9ILpwAEeysABHtbAAR9DAAHAAIruwAD1qAAAAAEDwAEe5MABH0MAAAABAQHAAR7pAAAAnHBgA8AA/AUAAGADwAD6PwE+AUrAAR71ASIcwAEfAYDAAR78wH/xnGMBAAE3fwDAAP0yACEcwAEfOxzAAR8kHMABHxhqwAEfC10DwAD8qQFgA8AA/AXAAeI/SwEAARzAAR8egMABHxnAf/Gcg7wBAAGXAMAA/CIAwAD8uIN3AQABHMABHymUg7oBAAEcwAEfMoDAAR8twH/xnIN3AQABNw8AwAD8HQDAAPwhAMAA/B1IAQABkwDAAP0oBsAA/vWC6cABIFfAASBlwAEqQgABwACK78AA9agAAAABA8ABIHbAASpCAAAAAwMDwAEgfgAAAJZcYAPAAP3rAMABIIgAAABqYAPAAPwFAMABIJMAAACCjGADwAD8BQAAYAPAAP3rAT4ITsABIKsAAACCi2ADwAD+NQBOwAEgu8ABIMgAAMAAiuxgA8AA/AUBgcABIMrAf/KdTsABINnAASDfAAAnYAPAAPwFAYHAASDhwH/ynU7AASE+wAEhSwAAuzFgA8AA+j8BKUPAASFYHMABIWWFwAEhX8B/8vdjAQABgsABIWfAf/KsAMAA/TJBPgJOwAEheMABIX0AAJxwYAPAAPwFARzAASGEgMABIX/Af/KNhAsBAAGFwAEhj8B/8vcAwAD9+UnAASGdHMABIaaHwAEhocB/81BIAQABasABIalgA8AA/AXAAGEJAMAA/Sg+DE7AASIHwAEiEwAAhFdgA8AA/esBHsABIhXAAP79AwADgMABIibAf/KNhcABIizAf/L3KQBJwAEiQiIcwAEiUhTAASJGwH/zsggASAEAASsAwAD9+gCGwAEiXcB/8xM+Aj2NwAEid8B/8vccwAEifYXAASJ3wH/y92QBAAGWAMAA/SpCwAEijQA/PSMcwAEisIPAASKpwH/yx0gBAAErAMAA/V6LwAEiqcB/8scfwAEitMAA/lQAAAAAKwFgA8AA/jVOwAEi08ABItkAAMAAib1gA8AA/esBHMABIuCAwAEi28B/8o2AvgIAAoTAASLqwH/y2IXAASL4wH/y9wDAAP4BScABIwghhsABIw3Af/MTPRXAASMbwH/0cwkcwAEjKRTAASMjwH/0cwkAllkAAAAAwAD+ED89HMABI0eDwAEjQMB/8seCigEAARTAASNNwH/0cwkAAMAA/klOwAEjYcABI24AAMAAhXlgA8AA/AUBlknAASN7HMABI4sUwAEjf8B/87IIAEgBAAErAMAA/fo+AT0VwAEjoMB/87IIHMABI7OAwAEjrsB/8o2AvgIAAoXAASO9wH/y9xzAASPKhcABI8TAf/L3ZAEAAZYAwAD9KgDAAP4BScABI98cwAEj7xTAASPjwH/zsggASAEAASeVtADAAP36PgI9FcABJAPAf/OyCCfAAIroPRXAASQiwH/1DAqUPz0cwAEkTYPAASRGwH/yx4KKAQABFMABJFPAf/OyCAAAwAD+ST2NwAEkacB/8vccwAEkb4XAASRpwH/y92QBAAEUwAEkcsB/9QwKAADAAP0qPYzAASSIwH/y2IXAASSXwH/y9z2OwAEkpsB/8xMpScABJMgewAEkzMAA/vQBAAGHwAEk28B/81AAPgJJwAEk7CIihsABJPDAf/MTABzAASUOasABJQBgA8AA/AXAAF9+gWsBAAGHwAElEcB/81AAwAD9MwAcwAElJ2rAASUZYAPAAPwFwACaA4FtAQABh8ABJSrAf/NQAMAA/TU+Az0jHMABJZCDwAElicB/8sdIAQABKwDAAP1ei8ABJYnAf/LHH8ABJZTAAP5UAAAAACsBYAPAAP41ScABJa4cwAElv4TAASWywH/y2GMBAAGFwAElwcB/8vcAwAD9Mj4CPRzAASXdg8ABJdbAf/LHgooBAAEcwAEl6IDAASXjwH/yjYC+AgAChMABJfLAf/LYhcABJgDAf/L3AMAA/gEAwAD+ST2MwAEmFcB/8tiFwAEmJMB/8vc/PY7AASZBwH/zEyo/PY3AASZpwH/y9xzAASZuhcABJmnAf/L3ZAEAAZQAwAD9KknAASZ/HsABJoPAAP8CAQABh8ABJpfAf/NQAD4BPR7AASaowAD+6AMAA4DAASauwH/yjYXAASa0wH/y9yfAAHOKAD4JTsABJuzAASb5AADAAIV5YAPAAPwFAZRJwAEnBiIcwAEnGhzAAScQh8ABJwvAf/NQg3cBAAE3wAD8AADAAPwdSAEAATfAANgAAMAA/SgAHMABJzMcwAEnLoXAAScowH/y92QBAAGUAMAA/SpjAQABgsABJzXAf/KsAMAA/TI+Ak7AASdKwAEnTwAAg+tgA8AA/AUBHMABJ1aAwAEnUcB/8o2ECwEAARzAASdnhcABJ2HAf/L3ZAEAAZQAwAD9KgDAAP35ScABJ3ccwAEnixzAASeBFMABJ3zAf/hcCQCDdwEAATfAAPwAAMAA/B1IAQABN8AA3AAAwAD9KD4CPY/AASekwH/zUBzAASfMHMABJ7M3wAEAAIEGAQABHMABJ8UcwAEnvIfAASe3wH/zUIN3AQABN4P/AMAA/B2DugEAATcKAMAA/CEAwAD8HoEGAQABHMABJ9QUwAEnz8B/+FwJAIN3AQABN4P/AMAA/B0AwAD8Hj0VwAEn6sB/990IlT8/PSMcwAEoIYPAASgawH/yx0gBAAErAMAA/V6LwAEoGsB/8scfwAEoJcAA/lQAAAAAKwFgA8AA/jVOwAEoRMABKEoAAMAAib1gA8AA/esBHMABKFGAwAEoTMB/8o2AvgIAAoTAAShbwH/y2IXAAShpwH/y9wDAAP4BScABKHkhhsABKH7Af/MTPRXAASiMwH/5lQkcwAEomhTAASiUwH/5lQkAllkAAAAAwAD+ED89HMABKLiDwAEoscB/8seCigEAARTAASi+wH/5lQkAAMAA/kk9HMABKNWDwAEozsB/8seCigEAAR7AASjbwAD+/gEAAYfAASjnwH/zUAAAwAD+ST2NwAEo98B/8vccwAEo/YXAASj3wH/y92QBAAEUwAEpAMB/990IAADAAP0qPYzAASkWwH/y2IXAASklwH/y90nAASk+HMABKUmDwAEpQsB/8sdIAQABKwDAAP1eSsABKVIBHMABKV6AwAEpWcB/8o2AvgIAAoHAASlowH/ynYLAASlvwH/yrADAAP4BP0nAASl5HMABKYqEwAEpfcB/8thjAQABgsABKYzAf/KsAMAA/TI+A07AASmgwAEppgAAwACJvWADwAD96wEcwAEprYDAASmowH/yjYC+AgAChMABKbfAf/LYgsABKcXAf/KsAMAA/gFJwAEp0SGGwAEp1sB/8xM9j8ABKeTAf/sRHMABKfKHwAEp7MB/+xGWWQAAAADAAP4QPz0cwAEqDoPAASoHwH/yx4KKAQABh8ABKhTAf/sRAMAA/kk/SsABKiYBHMABKjSDwAEqLcB/8scjAAAAAMAA/k4GwAD+9oLpwAEq3cABKuvAAS3jAAHAAIrwwAD1qAAAAAEDwAEq9sABLeMAAAADAwPAASr+AAAAgbpgA8AA/esAwAErCgAAAGpgA8AA/AUAwAErFQAAAIKMYAPAAPwFAABgA8AA/esBPghJwAErIBzAASsqgcABKyTAf/wCSAEAAYLAASstwH/8EQDAAP0oSsABKzIBJwA/TsABK0vAAStZAAHAAIrxYAPAAPwFARzAAStigMABK1vAf/vyhAsBAAGBwAErbcB//AIAwAD9+UnAASt5IR7AASt+wAD/EQEAAYPAASuVwH/8WgA+AT0ewAErrcAA/ugDAAOAwAErs8B/+/KBwAEru8B//AInwACK8gA/TsABLAPAASwVAADAAIrzYAPAAPo/ASpFwAEsIgHAASwrwAEsLQAAYmADwAD8BQGBwAEsL8B//AIBHMABLDiFwAEsNsB//PFjAQABgsABLDrAf/wRAMAA/TIBjcABLD/Af/zxHMABLECFwAEsP8B//PFkAQABlADAAP0qPgNOwAEsVsABLF8AAZg1YAPAAPwFARzAASxogMABLGHAf/vyhAsBAAGFwAEsc8B//PEAwAD9+UnAASx9IR7AASyCwAD/AQEAAYbAASyVwH/9UgA+AT0ewAEsqsAA/ugDAAOAwAEssMB/+/KFwAEsuMB//PEnwACK9AA/ScABLOYiHMABLPhqwAEs6mADwAD8BcAAX36BawEAAYbAASz7wH/9UgDAAP0zABzAAS0QhsABLQfAf/1SgWsBAAFqwAEtE2ADwAD8BcAAmgMAwAD9Mz4BPYzAAS0swH/81Sk/PYjAAS1YwH/78hzAAS1ogMABLWHAf/vygL4CAAKBwAEtcsB//AKCwAEtecB//BEAwAD+AUnAAS2DhMABLYfAf/zVPYjAAS2awH/78hzAAS2qgMABLaPAf/vyllkAAAAAwAD+ED9KwAEtvQEewAEtxMAA/vcBAAGAwAEt2MB/+/IABsAA/veC6cABLl3AAS5rwAEvUQABwACK9cAA9agAAAABA8ABLn7AAS9RAAAAAQEBwAEuhgAAAIG6YAPAAP3rAABgA8AA/esBPgVJwAEulBzAAS6fgMABLpjAf/7eSAEAASeDPgDAAP36SsABLqoBJ4M+P0nAAS69HMABLsiAwAEuwcB//t5IAQABJ4G7AMAA/fpKwAEu0wEngbs/ScABLuYcwAEu8YDAAS7qwH/+3kgBAAEngz8AwAD9+krAAS79ASeDPz9JwAEvERzAAS8cgMABLxXAf/7eSAEAASeB2QDAAP36SsABLyoBJ4HZP0rAAS9AAYDAAS9HwH/+3gbAAP74gunAAS9WwAEvZMABMAgAAcAAivbAAPWoAAAAAQPAAS9xwAEwCAAAAAMDA8ABL3kAAACWW2ADwAD96wDAAS+HAAAAamADwAD8BQDAAS+SAAAAgoxgA8AA/AUAAGADwAD96wE+AknAAS+dHMABL6qAwAEvocB//9tIAQABKwDAAP36SsABL7MBJwA/SsABL8IBHsABL8nAAP7/BAAEgMABL9/Af//bgcABL+nAf//rgsABL/DAf//6asABL/VdA8AA/KkBYAPAAPwFwAHiFwAGwAD++YLpwAEwDcABMBvAATO6AAHAAIr3wAD1qAAAAAEDwAEwJMABM7oAAAAGBgbAATAsAAAATmADwAD96wDAATA2AAAAamADwAD8BQDAATBBAAAAgoxgA8AA/AUAwAEwXQAAAIMYXQPAAPxnAWADwAD96wDAATByAAAAgbpgA8AA/esAwAEwfwAAAJyCYAPAAPo/AABgA8AA/esBPglOwAEwmMABMJ8AAMAAgiJgA8AA+j8BHMABMKmEwAEwosCAAPNIAQABJ4G7AMAA/fpOwAEwvsABMNEAAMAAivhgA8AA+j8BIobAATDTwIABHgGFwAEw3cCAAQNJwAEw7yIcwAEw+IDAATDzwIAArkgBAAErAMAA/foAHMABMRCDwAExA8CAANxIAQABKwDAAP1eSsABMRkBI4bAATEgwIABHidQJwABYAPAAP3rP0nAATE3IiEcwAExQIDAATE7wIAArkgBAAErAMAA/foAIRzAATFYg8ABMUvAgADcSAEAASsAwAD9Xj4BPTDAATFpH8ABMW/AAPs4AQABJ8AAivkAP07AATG3AAAAgXZgA8AA/esAScABMcMhHMABMcyAwAExx8CAAK5IAQABKwDAAP36PgE9FcABMd3AgAIfCB7AATHmwAD+/wUABIDAATH8wIAAroHAATICwIAAvYLAATIJwIAAzGrAATIOXQPAAPypAWADwAD8BcAB4okBwACK+ik+AT0VwAEyW8CAAh8IHMABMr4cwAEyfIPAATJkwIAA3ICrAQFgA8AA/esBNMABMoADwAEygMABMrEAAAABAQHAATKBAAAAiEdgA8AA/esAAGADwAD96wFKwAEyhwEewAEyh8AA/w4EAARqwAEykl0DwAD8qQFgA8AA/AXAAeJhFMABMqLAgALcCQBqwAEypWADwADJXYGJKgAAwAD8clgBAAEnUADAAPx7ScABMtMWwAEy3hTAATLXwIACHwgAgVXAAP3xPgFJwAEy74bAATLzwIABHkrAATL7ASdQP0nAATMSIofAATMWwIABTgAhHMABMzQUwAEzLcCAAh8IAIHWAQABJ1AAwAD9/T4BPRXAATNNwIACHwgcwAEzWidQZAEAARTAATNcwIACHwgAAMAA/gA/PRXAATNuwIACHwgewAEzd8AA/voDAAMUwAEzhsCAAh8IAITAATOOwIAA84XAATOWwIABAwBKwAEzqQEUwAEzsMCAAh8IAAbAAP76gunAATTewAE07MABNesAAcAAivvAAPWoAAAAAQPAATT6wAE16wAAAAMDA8ABNQIAAABOYAPAAP3rAMABNQ8AAACBumADwAD96wDAATUcAAAAnIJgA8AA+j8AAGADwAD96wE+AknAATUwIiIWwAE1O4HAATU0wIAEVYFVwAD98QAhgsABNUfAgARlACEcwAE1XYDAATVYwIAERoHWAQABJ1AAwAD9/T4BSsABNXYBHsABNX3AAP8GAgACgMABNZTAgARGIhbAATWhgcABNZrAgARVg7LAAP3yAYLAATWvwIAEZQA/SsABNcgBHsABNc/AAP8FAQABgMABNeLAgARGAAbAAP77gunAATXwwAE1/sABOj8AAcAAivzAAPWoAAAAAQPAATYIwAE6PwAAAAQEBMABNhAAAACWXmADwAD96wDAATYbAAAAamADwAD8BQDAATYmAAAAgoxgA8AA/AUAwAE2YwAAAMAAfGZdA8AA/NoCYAPAAP3rWwAAYAPAAP3rAT4HScABNnohHMABNoSAwAE2fsCABUtIAQABKwDAAP36PgJJwAE2lSEcwAE2qYPAATaZwIAFekgBAAErAMAA/V4+AT0wwAE2vB/AATbCwAD7OAEAASfAAIr9AD9KwAE3CwEewAE3EsAA/v8FAASAwAE3KMCABUuBwAE3L8CABVuCwAE3NsCABWpqwAE3O10DwAD8qQFgA8AA/AXAAeKrAcAAivopP0nAATd5HMABN42DwAE3fcCABXpIAQABKwDAAP1eSsABN5YBKz9OwAE3rMABN7MAAIF2YAPAAP41AR/AATe1wAD+VAAAAABOwAE3zcABN9cAAIGvYAPAAP3rAScAT8ABN+LAATfnAAABwACK/mEDAmADwAD962ADwAD961wAA8ABN/XAATkIAAAAAgICwAE3/QAAAIPRYAPAAP3rAMABOAkAAACAlmADwAD96wAAXAE+BD0cwAE4H4TAATgYwIAGZ4KKAQABhcABOCXAgAaIAMAA/kk9jcABODfAgAaIJ4N3PRzAAThVhMABOE7AgAZngooBAAEewAE4X8AA/p0BAAGHwAE4dMCABs0AAMAA/klJwAE4gSIhHMABOIsUwAE4hcCABt0IAEgBAAErAMAA/foAFsABOJwUwAE4lsCABt0IAIOywAD98j4CPRzAATi5hMABOLLAgAZngooBAAEngLwAwAD+ST0cwAE41ITAATjNwIAGZ4KKAQABHsABON7AAP6dAQABFMABOPPAgAbdCAAAAMAA/kk/PRzAATkfg8ABOQ/AgAV6g/gBAAE0wAE5JwPAATknwAE6HAAAAAICAsABOSgAAACD0WADwAD96wDAATktAAAAgJZbAABgA8AA/Q4BPgFJwAE5PCIcwAE5RhTAATlAwIAIEAgASAEAASsAwAD9XgElwAE5VxTAATlRwIAIEAgAYAPAAP3rPgE9HMABOXqGwAE5bMCABqIgAgACh8ABOXvAgAgAJsABOYABFMABOYDAgAgQCABgA8AA/esAAD4CTsABOajAATmvAAApXQPAAPxnAVsBJsABOagBFMABObHAgAgQCABdA8AA/GcBW0bAATnAwAE53QAAAAEAWwAUwAE51cCACJYJAD4CTsABOcwAAACAlmADwAD96wEmwAE5wAEUwAE5zMCACMwKAGADwAD96z0cwAE594bAATnpwIAGoiACAAKHwAE5+MCACAAUwAE5/cCACOELAAAAAMAA/PlKwAE6IwEcwAE6MYTAAToqwIAGZyMAAAAAwAD+TgbAAP78gunAATpEwAE6UsABOxkAAcAAiv/AAPWoAAAAAQPAATpfwAE7GQAAAAMDA8ABOmcAAACWX2ADwAD96wDAATp1AAAAamADwAD8BQDAATqAAAAAgoxgA8AA/AUAAGADwAD96wE+AknAATqLHMABOpiAwAE6j8CACYNIAQABKwDAAP36SsABOqEBKz9KwAE6sgEewAE6ucAA/v8FAASAwAE6z8CACYOBwAE62cCACZOCwAE64MCACaJqwAE65V0DwAD8qQFgA8AA/AXAAeKrAcAAivopBsAA/v2C6cABPXPAAT2BwAFBwwABwACLAMAA9agAAAABA8ABPZHAAUHDAAAAAwMDwAE9mQAAAINEYAPAAP3rAMABPaUAAAAnYAPAAPwFAMABPbEAAADAAIsBYAPAAPo/AABgA8AA/esBPgtAHMABPeIcwAE90IDAAT3JwIAKWoQLAQABgcABPdvAgApqAMAA/flIAQABasABPeVgA8AA/AXAAGEJAMAA/SjAAT3JwAE97QBJwAE99BzAAT4CHMABPf6BwAE9+MCACmpkAQABlQDAAP0qgW0BAAEWwAE+DIDAAT4FwIAKWmHAAP3vAMAA/TU+AUrAAT4cASeVtD9OwAE+VsABPmEAAMAAbqZgA8AA/AUBHMABPmqAwAE+Y8CAClqECwEAARzAAT57gcABPnXAgApqZAEAAZQAwAD9KgDAAP35TsABPonAAT6VAADAAG6nYAPAAPwFARzAAT6egMABPpfAgApahAsBAAEcwAE+r4HAAT6pwIAKamQBAAGVAMAA/SoA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vKRgA8AA/evAAeRYBMAA/92C7by+vN4GwACMCQBgA8AA/esBarzRYAPAAP3rwAHkXQTAAP/egu28770GBsAAi78AYAPAAP3rAWq8/mADwAD968AB5GIEwAD/34LtvRe9JgbAAIwLAGADwAD96wFqvSJgA8AA/evAAeRnBMAA/+CC7b03vVAGwACMDQBgA8AA/esBar1HYAPAAP3rwAHkbATAAP/hgu29Yb2NBsAAjA8AYAPAAP3rAWq9emADwAD968AB5HEEwAD/4oLtvZ69twbAAIwRAGADwAD96wFqva5gA8AA/evAAeR2BMAA/+OC7b3IveYGwACMEwBgA8AA/esBar3aYAPAAP3rwAHkewTAAP/kgu29974KBsAAjBUAYAPAAP3rAWq+BGADwAD968AB5IAEwAD/5YLtvhu+LAbAAIwXAGADwAD96wFqvidgA8AA/evAAeSFBMAA/+aC7b49vlYGwACMGABgA8AA/esBar5NYAPAAP3rg20EwAD/54Ltvme+kQbAAIwZAGADwAD96wFqvn9gA8AA/evAAeSIBMAA/+iC7b7NvuIGwACMGwFqvpdgA8AA+fLAAeSSYAPAAP3rAWq+1mADwAD968AB47kEwAD/6YLtvyS/SAbAAIwdAWq+52ADwAD58sAB5KZgA8AA/esBar81YAPAAP3rwAHjvATAAP/qgu2/i7+xBsAAjB8Bar9NYAPAAPnywAHkumADwAD96wFqv51gA8AA/evAAePBBMAA/+uC7b/0wABAGgbAAIwhAWq/tmADwAD58sAB5M5gA8AA/esBasAAQAZgA8AA/evAAePGBMAA/+yC7cAAQFvAAEB9BsAAjCMBasAAQB9gA8AA+fLAAeTiYAPAAP3rAWrAAEBrYAPAAP3rwAHjywTAAP/tgu3AAEC1wABAxAbAAIwlAWrAAECCYAPAAPnywAHk9mADwAD96wFqwABAu2ADwAD968AB49AEwAD/7oLtwABA/sAAQREGwACMJwFqwABAyWADwAD58sAB5QpgA8AA/esBasAAQQZgA8AA/evAAePVBMAA/++C7cAAQVPAAEF2BsAAjCkBasAAQRZgA8AA+fLAAeUeYAPAAP3rAWrAAEFjYAPAAP3rwAHj2gTAAP/wgu3AAEG3wABB2QbAAIwrAWrAAEF7YAPAAPnywAHlMmADwAD96wFqwABBx2ADwAD968AB498EwAD/8YLtwABCGMAAQjUGwACMLQFqwABB3mADwAD58sAB5UZgA8AA/esBasAAQiVgA8AA/evAAePkBMAA//KC7cAAQnnAAEKhBsAAjC8BasAAQjpgA8AA+fLAAeVaYAPAAP3rAWrAAEKMYAPAAP3rwAHj6QTAAP/zgu3AAELlwABDDQbAAIwxAWrAAEKmYAPAAPnywAHlbmADwAD96wFqwABC+GADwAD968AB4+4EwAD/9ILtwABDT8AAQ3MGwACMMwFqwABDEmADwAD58sAB5YJgA8AA/esBasAAQ2BgA8AA/evAAePzBMAA//WC7cAAQ7fAAEPfBsAAjDUBasAAQ3hgA8AA+fLAAeWWYAPAAP3rAWrAAEPKYAPAAP3rwAHj+ATAAP/2gu3AAEQewABEPAbAAIw3AWrAAEPkYAPAAPnywAHlqmADwAD96wFqwABELGADwAD968AB4/0EwAD/94LtwABEfcAARJ8GwACMOQFqwABEQWADwAD58sAB5b5gA8AA/esBasAARI1gA8AA/evAAeQCBMAA//iC7cAARN/AAET/BsAAjDsBasAARKRgA8AA+fLAAeXSYAPAAP3rAWrAAETuYAPAAP3rwAHkBwTAAP/5gu3AAEU4wABFSQbAAIw9AWrAAEUEYAPAAPnywAHl5mADwAD96wFqwABFP2ADwAD968AB5AwEwAD/+oLtwABFgsAARZMGwACMPwFqwABFTmADwAD58sAB5fpgA8AA/esBasAARYlgA8AA/evAAeQRBMAA//uC7cAARc7AAEXjBsAAjEEBasAARZhgA8AA+fLAAeYOYAPAAP3rAWrAAEXXYAPAAP3rwAHkFgTAAP/8gu3AAEYfwABGNgbAAIxDAWrAAEXoYAPAAPnywAHmImADwAD96wFqwABGKWADwAD968AB5BsEwAD//YLtwABGb8AARoAGwACMRQFqwABGO2ADwAD58sAB5jZgA8AA/esBasAARnZgA8AA/evAAeQgBMAA//6C7cAARrnAAEbKBsAAjEcBasAARoVgA8AA+fLAAeZKYAPAAP3rAWrAAEbAYAPAAP3rwAEyAwTAAP//gu3AAEcGwABHHgbAAIxJAWrAAEbPYAPAAPnywAHmXmADwAD96wFqwABHEWADwAD968AB5CMEwAEAAILtwABHYsAAR4sGwACMSwFqwABHI2ADwAD58sAB5nJgA8AA/esBasAAR3ZgA8AA/evAAeQoBMABAAGC7cAAR8vAAEfsBsAAjE0BasAAR5BgA8AA+fLAAeaGYAPAAP3rAWrAAEfbYAPAAP3rwAHkLQTAAQACgu3AAEgowABIQAbAAIxPAWrAAEfxYAPAAPnywAHmmmADwAD96wFqwABIM2ADwAD968AB5DIEwAEAA4LtwABIhsAASLMGwACMUQFqwABIRWADwAD58sAB5q5gA8AA/esBasAASJxgA8AA/evAAeQ3BMABAASC7cAASPTAAEkWBsAAjFMBasAASLhgA8AA+fLAAebCYAPAAP3rAWrAAEkEYAPAAP3rwAHkPATAAQAFgu3AAElTwABJbAbAAIxVAWrAAEkbYAPAAPnywAHm1mADwAD96wFqwABJXmADwAD968ABIrYEwAEABoLtwABJrMAAScwGwACMVwFqwABJcWADwAD58sAB5upgA8AA/esBasAASbtgA8AA/evAAeRBBMABAAeC7cAASgfAAEocBsAAjFkBasAASdFgA8AA+fLAAeb+YAPAAP3rAWrAAEoQYAPAAP3rwAHkRgTAAQAIgu3AAEpiwABKjgbAAIxbAWrAAEohYAPAAPnywAHnEmADwAD96wFqwABKd2ADwAD968AB5EkEwAEACYLtwABK1cAASwMGwACMXQFqwABKk2ADwAD58sAB5yZgA8AA/esBasAASutgA8AA/evAAeROBMABAAqC7cAASz3AAEtQBsAAjF8BasAASwhgA8AA+fLAAec6YAPAAP3rAWrAAEtFYAPAAP3rwAHkUwTAAQALgu3AAEuMwABLowbAAIxhAWrAAEtVYAPAAPnywAHnTmADwAD96wFqwABLlmADwAD968AB5FgEwAEADILtwABL4sAATAAGwACMYwFqwABLqGADwAD58sAB52JgA8AA/esBasAAS/BgA8AA/evAAeRdBMABAA2C7cAATDvAAExQBsAAjGUBasAATAVgA8AA+fLAAed2YAPAAP3rAWrAAExEYAPAAP3rwAHkYgTAAQAOgu3AAEyHwABMlAbAAIxnAWrAAExVYAPAAPnywAHnimADwAD96wFqwABMjGADwAD968AB5GcEwAEAD4LtwABM0MAATOcGwACMaQFqwABMmWADwAD58sAB555gA8AA/esBasAATNpg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AMAAy9AAAABOYAPAAP3rAABdA8AAuN4BYAPAAQCzAAbAAQCjgu3AAMxuwADMiMAAzJcAAsAAjLgAAAABA8AAzI7AAMyXAAAAAQEBwADMkwAAAMAASRtgA8AA/mwAAF0DwAC43gFgA8ABALMABsABAKSC7cAAzYXAAM2fwADNyQACwABGpQAAAAEDwADNpcAAzckAAAADAwPAAM2tAAAAllxgA8AA/esAwADNtwAAAJZdYAPAAPwFAMAAzcQAAABOYAPAAP3rAABdA8AAuN4BYAPAAQCzAAbAAQClgu3AAM5lwADOf8AAzpEAAsAAjLkAAAABA8AAzojAAM6RAAAAAQEBwADOjQAAAMAASRtgA8AA/mwAAF0DwAC43gFgA8ABALMABsABAKaC7cAAz37AAM+YwADPwQACnU4AAAABA8AAz53AAM/BAAAAAwMDwADPpQAAAJZcYAPAAP3rAMAAz68AAACWXWADwAD8BQDAAM+8AAAATmADwAD96wAAXQPAALjeAWADwAEAswAGwAEAp4LtwADQXMAA0HbAANCHAALAAIy6AAAAAQPAANB+wADQhwAAAAEBAcAA0IMAAADAAEkbYAPAAP5sAABdA8AAuN4BYAPAAQCzAAbAAQCogu3AANFzwADRjcAA0bUAAoPqAAAAAQPAANGRwADRtQAAAAMDA8AA0ZkAAACWXGADwAD96wDAANGjAAAAll1gA8AA/AUAwADRsAAAAE5gA8AA/esAAF0DwAC43gFgA8ABALMABsABAKmC7cAA0k/AANJpwADSeQACwACMuwAAAAEDwADScMAA0nkAAAABAQHAANJ1AAAAwABJG2ADwAD+bAAAXQPAALjeAWADwAEAswAGwAEAr4LtwADW58AA1uvAANctAgLAAIy8AAAAAQPAANb3wADXLQAAAAEBAcAA1wUAAACBpmEDA2ADwAD+bGADwAD962ADwAD9610DwAC43gFgA8AA+j8AAFwABsABAKqC7cAA133AANeCwADXygACwACMvQAAAAEDwADXkMAA18oAAAADAwPAANeVAAAAwABJG2ADwAD+bADAANehAAAAwACMvmADwAD96wDAANe+AAAAwACMv2ADwAEA5AAAXAAGwAEAsILtwADbCcAA2w3AANspAgLAAIzAAAAAAQPAANsWwADbKQAAAAEBAcAA2x4AAACBpmED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AAEBAcAAVUIAAADAAGTyYAPAAP1RAABcAT4DTsAAVVTAAFVbAACD7GADwAD96wEkwABVYwGAwABVX8CCa+hJwABVaRbAAFV0gcAAVW3AgmwAgVXAAP3xSsAAVX0APz0cwABViS5WAQABHMAAVZcWwABVjS7AAIKwwAD/hcABAoyVSgEAAYHAAFWewIJsAADAAMdmAMABAnoGwAEClILuwABVr8AAVbTAAFdDAACfvwAAAAEDwABVvMAAV0MAAAACAQLAAFXGAAAAwABDTl0DwAD8ZwFbAMAAVdcAAACBr2ADwAD96wFqwABV42ADwAD964QSAFwBPgNOwABV98AAVgAAAFxdA8AA/KIBWwEWwABWCoDAAFYCwIJsplzAAPyJScAAVhghHMAAViaCwABWHcCCbN1dAAAAAMAA/KRKwABWMgA/ScAAVj4WwABWTIHAAFZCwIJsuoFVwAD98T4BRMAAVl0+AT0cwABWai6CigEAARbAAFZ5gsAAVnDAgmzdXsAA/KYAwAECkxzAAFabgsAAVpLAgmzdXQAAAADAAPykPgI9HMAAVrsugooBAAEWwABWyoLAAFbBwIJs3V7AAPymAMABApNDwABW2hzAAFbqgsAAVuHAgmzdXQAAAADAAPykPgI9HMAAVwAugooBAAGBwABXBsCCbLoAwAECkz0cwABXGi6CigEAARbAAFcpgsAAVyDAgmzdXsAA/KYAwAECkwbAAQKVgu7AAFdIwABXTcAAV5MAAIICAAAAAQPAAFdUwABXkwAAAAEAAcAAV10AAACDwGADwAD9UQFqwABXZmADwAD964QSAFwBPgI9HMAAV3EugooBAAGAwABXd8CCbjEAwAECkz0cwABXhC6CigEAASeArwDAAQKTBsABApaC7sAAV5jAAFedwABX6wAAhBEAAAABA8AAV6rAAFfrAAAAAQEBwABXrwAAAMAAYXNgA8AA/AUAAFwBPgE9HMAAV78ugooBAAEewABXycAA/hQBAAGAwABX3cCCbqsAAMABApMAAIJq4gCCay4Agmu+AIJsfACCbgcAgm6BAIJu6QAAAAYCwAECmYLuwABX8MAAV//AAF+XB8AAjdwAAQAAgnZgA8AA/VEBWwFgAcABAokAAAUEwAECnILuwABYosAAWLYYwACN3cAA/4UAYAPAAPo/ASoEwAECnYLuwABYwMAA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LGADwAD8BcAAmh4APgFKwABwPwEnrQgBwABwaGrAAHBoYAPAAPwFwACaIQA+AUrAAHCEASfAAI31AcAAcLhqwABwuGADwAD8BYMwAD4BSsAAcMQBJ8AAdb4BwABw52rAAHDnYAPAAPwFwAGKYgA+AUrAAHD4ASfAAI32AcAAcSBqwABxIGADwAD8BcABimYAPgFKwABxMgEnwACN9wHAAHFbasAAcVtgA8AA/AXAAYpqAD4BSsAAcYABJ8AAjfgBwABxvmrAAHG+YAPAAPwFwAGKbgA+AUrAAHHRASfAAI35AcAAcfxqwABx/GADwAD8BcABinIAPgFKwAByEgEnwACN+gHAAHJAasAAckBgA8AA/AXAAYp2AD4BSsAAclgBJ8AAjfsBwAByiGrAAHKIYAPAAPwFwAGKhgA+AUrAAHKhASfAAI38AcAActJqwABy0mADwAD8BcABiooAPgFKwABy7AEnwACN/QHAAHMeasAAcx5gA8AA/AXAAYqOAD4BSsAAcy0BJ8AAjf4BwABzU2rAAHNTYAPAAPwFwAGKkgA+AUrAAHNlASfAAI3/AcAAc49qwABzj2ADwAD8BcABipYAPgFKwABzpAEnwACOAAHAAHPRasAAc9FgA8AA/AXAAYqaAD4BSsAAc+MBJ8AAjgEBwAB0DWrAAHQNYAPAAPwFwAGKngA+AUrAAHQoASfAAI4CAcAAdFtqwAB0W2ADwAD8BcABiqYAPgFKwAB0bwEnwACOAwHAAHSbasAAdJtgA8AA/AXAAYqqAD4BSsAAdLEBJ8AAjgQBwAB03mrAAHTeYAPAAPwFwAGKrgA+AUrAAHT3ASfAAI4FAcAAdShqwAB1KGADwAD8BcABirIAPgFKwAB1OwEnwACOBgHAAHVlasAAdWVgA8AA/AXAAYq2AD4BSsAAdXcBJ8AAjgcBwAB1oWrAAHWhYAPAAPwFwAGKugA+AUrAAHW7ASfAAI4IAcAAde5qwAB17mADwAD8BcABir4APgFKwAB2BQEnwACOCQHAAHY0asAAdjRgA8AA/AXAAYrCAD4BSsAAdlkBJ8AAjgoBwAB2l2rAAHaXYAPAAPwFwAGKxgA+AUrAAHavASfAAI4LAcAAduBqwAB24GADwAD8BcABisoAPgFKwAB28gEnwACODAHAAHcbasAAdxtgA8AA/AXAAYrOAD4BSsAAdykB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C4TAASAEwIMpIoC7AQABJ8AAix8AwAD9/knAASAhHMABICmFwAEgJcCDKaWBbQEAAZMAwAD9NT4BPYzAASA5wIMpIhzAASBJhMABIELAgykigL4BAAEcwAEgV4XAASBTwIMppWQBAAGWAMAA/SoAwAD+AT89jcABIGvAgymlHMABIHiEwAEgccCDKSKAuwEAASdQAMAA/f5JwAEgjBzAASCUhcABIJDAgymlgW0BAAGTAMAA/TU+AT2MwAEgpMCDKSIcwAEgtITAASCtwIMpIoC+AgACk4XAASDBwIMppQDAAP4BP0nAASEGHMABIR4cwAEhEYTAASEKwIMpIoC7AQABJ5mWAMAA/f5IAQABkwDAAP0oPgJOwAEhMsABITYAAJ/HYAPAAPwFARzAASE/hMABITjAgykilmABAAEnguYAwAD9/0nAASFZHMABIXEcwAEhZITAASFdwIMpIoC7AQABJ5mXAMAA/f6AlwEAAYbAASFzwIMq0wDAAP00PYzAASF4wIMpIiTAASGPAoTAASGDwIMpIifAAI6UPz4BScABIagcwAEhwBzAASGzhMABIazAgykigLsBAAEnguYAwAD9/kgBAAEcwAEhw5SBxAAAAADAAPwoAMAA/Sg9jMABIcfAgykiJMABId4ChMABIdLAgykiJ8AAjpQ/SsABIe4BJMABIgQCJ8AAjpWEwAEh/cCDKSJJwAEiShzAASJagcABIk7AgyatSAEAASsAwAD9Xj2JwAEiY8CDJq0awAEiccABA20/TsABIpgAAADAAI6WYAPAAP3rAE7AASKuwAEitgAAwACOl2ADwAD96wEcwAEiw4HAASK4wIMmrUsBAAEnwACOmADAAPzuScABItUcwAEi4YXAASLZwIMsFkgBAAErAMAA/fo9jcABIurAgywWHMABIv+BwAEi9MCDJq1LAQABJ8AAjpkAwAD87j9JwAEjESEcwAEjOIzAASMWwIMsAxzAASMtgsABIyHAgybZIAEAAYXAASMuwIMsFgAASAEAASsAwAD9+j4BSsABI0kBhMABI1DAgywDP0nAASNlHMABI3QWwAEjbYDAASNpwIMmm4G6wAD+ckgBAAEngz4AwAD9+j4DTsABI47AASOUAADAAIt8YAPAAP3rARzAASOhgcABI5bAgyatSwEAASfAAI6aAMAA/O5JwAEjtxzAASPB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AEVcHMAARXQcwABFZoLAAEVgwIRtEJZZAAAAAMAA/hBIAQABJ8AAjBIAwAD9+j2JwABFgsCEbKopPwDAAPx3ScAARaAhgcAARaXAhGyqSsAARbABKj9OwABFycAARdEAAMAAjBJgA8AA/esBHMAAReMWwABF24DAAEXTwIRsC55GwAEAc4CWAQABasAARfVgA8AA/evAAeR2AMABAC5JwABGCSIcwABGFYLAAEYNwIRtg0gBAAErAMAA/foBIRzAAEY2HMAARiiCwABGIMCEbYOWWQAAAADAAP4QSAEAASfAAJAEAMAA/fo+AUrAAEZOASo/TsAARm3AAEZ1AACB42ADwAD96wEcwABGhxbAAEZ/gMAARnfAhGwLnkbAAQBzgJYBAAEnwACQEADAAQAuScAARqsiHMAARreDwABGr8CEbiBIAQABKwDAAP36ASEcwABGyoPAAEbCwIRuIEgBAAEnwACHUADAAP36PgFKwABG2wEqP07AAEb6wABG/gAAg9FgA8AA/esBHMAARxAWwABHCIDAAEcAwIRsC55GwAEAc4CWAQABJ8AAkAUAwAEALknAAEcwHMAARziEwABHNMCEbqJIAQABKwDAAP36PgFKwABHSQEqP0rAAEdhASkAAIRezgCEYFMAhGJdAIRoxQCEa9sAhG8LAAAABQLAAQZ5gu/AAEd1wABHe8AAUjkDwACQEQAAAWABwAD9UQAABwTAAQZ7gu/AAEegwABHtxjAAI+bAGADwAD6PwAEwAEGfILvwABHwMAAR9cYwACPmgBgA8AA+j8ABMABBn2C78AAR9/AAEfyGMAAj5wAYAPAAPwFAATAAQZ+gu/AAEf6wABIDRjAAI+dAGADwAD8BQAEwAEGf4LvwABIFsAASCAYwACPugBgA8AA+j8ABMABBoCC78AASDPAAEg6GIH3AGADwADuAAErBMABBoGC78AASEzAAEhTGIi9AGADwADuAAErAQXAAQaJgu/AAEhYwABIWMAASXIAAAADwABIc8AASXIAAAAFAAAFwABIgQAABMAAj5xgA8AA/AUBasAASKVgA8AA/AXAAIm7wABIxQAABMAAj51gA8AA/AUBasAASOlgA8AA/AXAAIm7wABJCQAABMAAj5tgA8AA+j8BasAASSJgA8AA+j8AwABJNAAABMAAj5pgA8AA+j8BasAASU1gA8AA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LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBFbnRyeXBvaW50IHRvIHJ1biB0aGUgY29tcGlsZXIuIFRoaXMgZW50cnlwb2ludCBpcyBjdXJyZW50bHkgb25seSB1c2VkIGJ5Ci8vLyBkYXJ0MmpzIGRldmVsb3BlcnMuIFRvIHJ1biB0aGUgY29tcGlsZXIgeW91IG5vdyBjYW46Ci8vLyAgICogY2FsbCBgcHViIGdldGAgaW4gdGhlIHBrZy9jb21waWxlciBmb2xkZXIuCi8vLyAgICogc2ltcGx5IGNhbGwgYGRhcnQgcGF0aC10by1wa2cvY29tcGlsZXIvYmluL2RhcnQyanMuZGFydCBmb28uZGFydGAKLy8gVE9ETyhzaWdtdW5kKTogbW92ZSBgbWFpbmAgaGVyZSwgYW5kIGNoYW5nZSBvdXIgc2RrIGJ1aWxkIHRvb2xzIHRvIGp1c3QgdXNlCi8vIHRoaXMgZW50cnlwb2ludCBpbnN0ZWFkLgpsaWJyYXJ5IGNvbXBpbGVyLmJpbi5kYXJ0MmpzOwoKZXhwb3J0ICdwYWNrYWdlOmNvbXBpbGVyL3NyYy9kYXJ0MmpzLmRhcnQnOwoPAE5OPAFOOTNKTxweASwBJnNka3Jvb3Q6L3BrZy9jb21waWxlci9iaW4vZGFydDJqcy5kYXJ0KnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2RhcnQyanMuZGFydMAAozMvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmNtZGxpbmU7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyB1dGY4LCBMaW5lU3BsaXR0ZXI7CmltcG9ydCAnZGFydDppbycgc2hvdyBleGl0LCBGaWxlLCBGaWxlTW9kZSwgUGxhdGZvcm0sIHN0ZGluLCBzdGRlcnI7CmltcG9ydCAnZGFydDppc29sYXRlJyBzaG93IElzb2xhdGU7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBhcyBmZTsKCmltcG9ydCAnLi4vY29tcGlsZXJfbmV3LmRhcnQnIGFzIGFwaTsKaW1wb3J0ICdjb21tYW5kbGluZV9vcHRpb25zLmRhcnQnOwppbXBvcnQgJ2ZpbGVuYW1lcy5kYXJ0JzsKaW1wb3J0ICdvcHRpb25zLmRhcnQnIHNob3cgQ29tcGlsZXJPcHRpb25zOwppbXBvcnQgJ3NvdXJjZV9maWxlX3Byb3ZpZGVyLmRhcnQnOwppbXBvcnQgJ3V0aWwvY29tbWFuZF9saW5lLmRhcnQnOwppbXBvcnQgJ3V0aWwvdXRpbC5kYXJ0JyBzaG93IHN0YWNrVHJhY2VGaWxlUHJlZml4OwoKY29uc3QgU3RyaW5nIF9kZWZhdWx0U3BlY2lmaWNhdGlvblVyaSA9ICcuLi8uLi8uLi8uLi9zZGsvbGliL2xpYnJhcmllcy5qc29uJzsKY29uc3QgU3RyaW5nIE9VVFBVVF9MQU5HVUFHRV9EQVJUID0gJ0RhcnQnOwoKLy8vIEEgc3RyaW5nIHRvIGlkZW50aWZ5IHRoZSByZXZpc2lvbiBvciBidWlsZC4KLy8vCi8vLyBUaGlzIElEIGlzIGRpc3BsYXllZCBpZiB0aGUgY29tcGlsZXIgY3Jhc2hlcyBhbmQgaW4gdmVyYm9zZSBtb2RlLCBhbmQgaXMKLy8vIGFuIGFpZCBpbiByZXByb2R1Y2luZyBidWcgcmVwb3J0cy4KLy8vCi8vLyBUaGUgYWN0dWFsIHN0cmluZyBpcyByZXdyaXR0ZW4gYnkgYSB3cmFwcGVyIHNjcmlwdCB3aGVuIGluY2x1ZGVkIGluIHRoZSBzZGsuClN0cmluZyBCVUlMRF9JRCA9IG51bGw7CgovLy8gVGhlIGRhdGEgcGFzc2VkIHRvIHRoZSBbSGFuZGxlT3B0aW9uXSBjYWxsYmFjayBpcyBlaXRoZXIgYSBzaW5nbGUKLy8vIHN0cmluZyBhcmd1bWVudCwgb3IgdGhlIGFyZ3VtZW50cyBpdGVyYXRvciBmb3IgbXVsdGlwbGUgYXJndW1lbnRzCi8vLyBoYW5kbGVycy4KdHlwZWRlZiB2b2lkIEhhbmRsZU9wdGlvbihOdWxsIGRhdGEpOwoKY2xhc3MgT3B0aW9uSGFuZGxlciB7CiAgZmluYWwgU3RyaW5nIHBhdHRlcm47CiAgZmluYWwgSGFuZGxlT3B0aW9uIF9oYW5kbGU7CiAgZmluYWwgYm9vbCBtdWx0aXBsZUFyZ3VtZW50czsKCiAgdm9pZCBoYW5kbGUoYXJndW1lbnQpIHsKICAgIChfaGFuZGxlIGFzIGR5bmFtaWMpKGFyZ3VtZW50KTsKICB9CgogIE9wdGlvbkhhbmRsZXIodGhpcy5wYXR0ZXJuLCB0aGlzLl9oYW5kbGUsIHt0aGlzLm11bHRpcGxlQXJndW1lbnRzOiBmYWxzZX0pOwp9CgovLy8gRXh0cmFjdCB0aGUgcGFyYW1ldGVyIG9mIGFuIG9wdGlvbi4KLy8vCi8vLyBGb3IgZXhhbXBsZSwgaW4gWyctLW91dD1maXNrLmpzJ10gYW5kIFsnLW9oZXN0LmpzJ10sIHRoZSBwYXJhbWV0ZXJzCi8vLyBhcmUgWydmaXNrLmpzJ10gYW5kIFsnaGVzdC5qcyddLCByZXNwZWN0aXZlbHkuClN0cmluZyBleHRyYWN0UGFyYW1ldGVyKFN0cmluZyBhcmd1bWVudCwge2Jvb2wgaXNPcHRpb25hbEFyZ3VtZW50OiBmYWxzZX0pIHsKICAvLyBtWzBdIGlzIHRoZSBlbnRpcmUgbWF0Y2ggKHdoaWNoIHdpbGwgYmUgZXF1YWwgdG8gYXJndW1lbnQpLiBtWzFdCiAgLy8gaXMgc29tZXRoaW5nIGxpa2UgIi1vIiBvciAiLS1vdXQ9IiwgYW5kIG1bMl0gaXMgdGhlIHBhcmFtZXRlci4KICBNYXRjaCBtID0gbmV3IFJlZ0V4cCgnXigtW2EtekEtWl18LS0uKz0pKC4qKScpLmZpcnN0TWF0Y2goYXJndW1lbnQpOwogIGlmIChtID09IG51bGwpIHsKICAgIGlmIChpc09wdGlvbmFsQXJndW1lbnQpIHJldHVybiBudWxsOwogICAgaGVscEFuZEZhaWwoJ1Vua25vd24gb3B0aW9uICIkYXJndW1lbnQiLicpOwogIH0KICByZXR1cm4gbVsyXTsKfQoKU3RyaW5nIGV4dHJhY3RQYXRoKFN0cmluZyBhcmd1bWVudCwge2Jvb2wgaXNEaXJlY3Rvcnk6IHRydWV9KSB7CiAgU3RyaW5nIHBhdGggPSBuYXRpdmVUb1VyaVBhdGgoZXh0cmFjdFBhcmFtZXRlcihhcmd1bWVudCkpOwogIHJldHVybiAhcGF0aC5lbmRzV2l0aCgiLyIpICYmIGlzRGlyZWN0b3J5ID8gIiRwYXRoLyIgOiBwYXRoOwp9Cgp2b2lkIHBhcnNlQ29tbWFuZExpbmUoTGlzdDxPcHRpb25IYW5kbGVyPiBoYW5kbGVycywgTGlzdDxTdHJpbmc+IGFyZ3YpIHsKICAvLyBUT0RPKGFoZSk6IFVzZSAuLi8uLi9hcmdzL2FyZ3MuZGFydCBmb3IgcGFyc2luZyBvcHRpb25zIGluc3RlYWQuCiAgdmFyIHBhdHRlcm5zID0gPFN0cmluZz5bXTsKICBmb3IgKE9wdGlvbkhhbmRsZXIgaGFuZGxlciBpbiBoYW5kbGVycykgewogICAgcGF0dGVybnMuYWRkKGhhbmRsZXIucGF0dGVybik7CiAgfQogIHZhciBwYXR0ZXJuID0gbmV3IFJlZ0V4cCgnXigke3BhdHRlcm5zLmpvaW4oIilcJHxeKCIpfSlcJCcpOwoKICBJdGVyYXRvcjxTdHJpbmc+IGFyZ3VtZW50cyA9IGFyZ3YuaXRlcmF0b3I7CiAgT1VURVI6CiAgd2hpbGUgKGFyZ3VtZW50cy5tb3ZlTmV4dCgpKSB7CiAgICBTdHJpbmcgYXJndW1lbnQgPSBhcmd1bWVudHMuY3VycmVudDsKICAgIE1hdGNoIG1hdGNoID0gcGF0dGVybi5maXJzdE1hdGNoKGFyZ3VtZW50KTsKICAgIGFzc2VydChtYXRjaC5ncm91cENvdW50ID09IGhhbmRsZXJzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGhhbmRsZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChtYXRjaFtpICsgMV0gIT0gbnVsbCkgewogICAgICAgIE9wdGlvbkhhbmRsZXIgaGFuZGxlciA9IGhhbmRsZXJzW2ldOwogICAgICAgIGlmIChoYW5kbGVyLm11bHRpcGxlQXJndW1lbnRzKSB7CiAgICAgICAgICBoYW5kbGVyLmhhbmRsZShhcmd1bWVudHMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoYW5kbGVyLmhhbmRsZShhcmd1bWVudCk7CiAgICAgICAgfQogICAgICAgIGNvbnRpbnVlIE9VVEVSOwogICAgICB9CiAgICB9CiAgICB0aHJvdyAnSW50ZXJuYWwgZXJyb3I6ICIkYXJndW1lbnQiIGRpZCBub3QgbWF0Y2gnOwogIH0KfQoKRm9ybWF0dGluZ0RpYWdub3N0aWNIYW5kbGVyIGRpYWdub3N0aWNIYW5kbGVyOwoKRnV0dXJlPGFwaS5Db21waWxhdGlvblJlc3VsdD4gY29tcGlsZShMaXN0PFN0cmluZz4gYXJndiwKICAgIHtmZS5Jbml0aWFsaXplZENvbXBpbGVyU3RhdGUga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlfSkgewogIFN0b3B3YXRjaCB3YWxsY2xvY2sgPSBuZXcgU3RvcHdhdGNoKCkuLnN0YXJ0KCk7CiAgc3RhY2tUcmFjZUZpbGVQcmVmaXggPSAnJGN1cnJlbnREaXJlY3RvcnknOwogIFVyaSBsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpID0KICAgICAgY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKCdsaWIvbGlicmFyaWVzLmpzb24nKTsKICBib29sIG91dHB1dFNwZWNpZmllZCA9IGZhbHNlOwogIFVyaSBvdXQ7CiAgVXJpIHNvdXJjZU1hcE91dDsKICBVcmkgcmVhZERhdGFVcmk7CiAgVXJpIHdyaXRlRGF0YVVyaTsKICBVcmkgcmVhZENvZGVnZW5Vcmk7CiAgVXJpIHdyaXRlQ29kZWdlblVyaTsKICBpbnQgY29kZWdlblNoYXJkOwogIGludCBjb2RlZ2VuU2hhcmRzOwogIExpc3Q8U3RyaW5nPiBiYXplbFBhdGhzOwogIFVyaSBwYWNrYWdlQ29uZmlnID0gbnVsbDsKICBVcmkgcGFja2FnZVJvb3QgPSBudWxsOwogIExpc3Q8U3RyaW5nPiBvcHRpb25zID0gbmV3IExpc3Q8U3RyaW5nPigpOwogIGJvb2wgd2FudEhlbHAgPSBmYWxzZTsKICBib29sIHdhbnRWZXJzaW9uID0gZmFsc2U7CiAgYm9vbCB0cnVzdFR5cGVBbm5vdGF0aW9ucyA9IGZhbHNlOwogIGJvb2wgY2hlY2tlZE1vZGUgPSBmYWxzZTsKICBib29sIHN0cm9uZ01vZGUgPSB0cnVlOwogIExpc3Q8U3RyaW5nPiBoaW50cyA9IDxTdHJpbmc+W107CiAgYm9vbCB2ZXJib3NlOwogIGJvb2wgdGhyb3dPbkVycm9yOwogIGludCB0aHJvd09uRXJyb3JDb3VudDsKICBib29sIHNob3dXYXJuaW5nczsKICBib29sIHNob3dIaW50czsKICBib29sIGVuYWJsZUNvbG9yczsKICBpbnQgb3B0aW1pemF0aW9uTGV2ZWwgPSBudWxsOwogIFVyaSBwbGF0Zm9ybUJpbmFyaWVzOwogIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQgPSBuZXcgTWFwPFN0cmluZywgU3RyaW5nPigpOwogIFJlYWRTdHJhdGVneSByZWFkU3RyYXRlZ3kgPSBSZWFkU3RyYXRlZ3kuZnJvbURhcnQ7CiAgV3JpdGVTdHJhdGVneSB3cml0ZVN0cmF0ZWd5ID0gV3JpdGVTdHJhdGVneS50b0pzOwoKICB2b2lkIHBhc3NUaHJvdWdoKFN0cmluZyBhcmd1bWVudCkgPT4gb3B0aW9ucy5hZGQoYXJndW1lbnQpOwogIHZvaWQgaWdub3JlT3B0aW9uKFN0cmluZyBhcmd1bWVudCkge30KCiAgaWYgKEJVSUxEX0lEICE9IG51bGwpIHsKICAgIHBhc3NUaHJvdWdoKCItLWJ1aWxkLWlkPSRCVUlMRF9JRCIpOwogIH0KCiAgdm9pZCBzZXRMaWJyYXJ5U3BlY2lmaWNhdGlvblVyaShTdHJpbmcgYXJndW1lbnQpIHsKICAgIGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmkgPQogICAgICAgIGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZShleHRyYWN0UGF0aChhcmd1bWVudCwgaXNEaXJlY3Rvcnk6IGZhbHNlKSk7CiAgfQoKICB2b2lkIHNldFBhY2thZ2VSb290KFN0cmluZyBhcmd1bWVudCkgewogICAgcGFja2FnZVJvb3QgPSBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUoZXh0cmFjdFBhdGgoYXJndW1lbnQpKTsKICB9CgogIHZvaWQgc2V0UGFja2FnZUNvbmZpZyhTdHJpbmcgYXJndW1lbnQpIHsKICAgIHBhY2thZ2VDb25maWcgPQogICAgICAgIGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZShleHRyYWN0UGF0aChhcmd1bWVudCwgaXNEaXJlY3Rvcnk6IGZhbHNlKSk7CiAgfQoKICB2b2lkIHNldE91dHB1dChJdGVyYXRvcjxTdHJpbmc+IGFyZ3VtZW50cykgewogICAgb3V0cHV0U3BlY2lmaWVkID0gdHJ1ZTsKICAgIFN0cmluZyBwYXRoOwogICAgaWYgKGFyZ3VtZW50cy5jdXJyZW50ID09ICctbycpIHsKICAgICAgaWYgKCFhcmd1bWVudHMubW92ZU5leHQoKSkgewogICAgICAgIGhlbHBBbmRGYWlsKCdFcnJvcjogTWlzc2luZyBmaWxlIGFmdGVyIC1vIG9wdGlvbi4nKTsKICAgICAgfQogICAgICBwYXRoID0gYXJndW1lbnRzLmN1cnJlbnQ7CiAgICB9IGVsc2UgewogICAgICBwYXRoID0gZXh0cmFjdFBhcmFtZXRlcihhcmd1bWVudHMuY3VycmVudCk7CiAgICB9CiAgICBvdXQgPSBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUobmF0aXZlVG9VcmlQYXRoKHBhdGgpKTsKICB9CgogIHZvaWQgc2V0T3B0aW1pemF0aW9uTGV2ZWwoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBpbnQgdmFsdWUgPSBpbnQudHJ5UGFyc2UoZXh0cmFjdFBhcmFtZXRlcihhcmd1bWVudCkpOwogICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPCAwIHx8IHZhbHVlID4gNCkgewogICAgICBoZWxwQW5kRmFpbCgiRXJyb3I6IFVuc3VwcG9ydGVkIG9wdGltaXphdGlvbiBsZXZlbCAnJGFyZ3VtZW50JywgIgogICAgICAgICAgInN1cHBvcnRlZCBsZXZlbHMgYXJlOiAwLCAxLCAyLCAzLCA0Iik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIG9wdGltaXphdGlvbkxldmVsID0gdmFsdWU7CiAgfQoKICB2b2lkIHNldE91dHB1dFR5cGUoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBpZiAoYXJndW1lbnQgPT0gJy0tb3V0cHV0LXR5cGU9ZGFydCcgfHwKICAgICAgICBhcmd1bWVudCA9PSAnLS1vdXRwdXQtdHlwZT1kYXJ0LW11bHRpJykgewogICAgICBoZWxwQW5kRmFpbCgKICAgICAgICAgICItLW91dHB1dC10eXBlPWRhcnQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gSXQgd2FzIGRlcHJlY2F0ZWQgIgogICAgICAgICAgInNpbmNlIERhcnQgMS4xMSBhbmQgcmVtb3ZlZCBpbiBEYXJ0IDEuMTkuIik7CiAgICB9CiAgfQoKICBzZXRTdHJpcChTdHJpbmcgYXJndW1lbnQpIHsKICAgIGhlbHBBbmRGYWlsKCJPcHRpb24gJy0tZm9yY2Utc3RyaXAnIGlzIG5vdCBpbiB1c2Ugbm93IHRoYXQiCiAgICAgICAgIi0tb3V0cHV0LXR5cGU9ZGFydCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiIpOwogIH0KCiAgdm9pZCBzZXRCYXplbFBhdGhzKFN0cmluZyBhcmd1bWVudCkgewogICAgU3RyaW5nIHBhdGhzID0gZXh0cmFjdFBhcmFtZXRlcihhcmd1bWVudCk7CiAgICBiYXplbFBhdGhzID0gPFN0cmluZz5bXS4uYWRkQWxsKHBhdGhzLnNwbGl0KCcsJykpOwogIH0KCiAgU3RyaW5nIGdldERlcHNPdXRwdXQoSXRlcmFibGU8VXJpPiBzb3VyY2VGaWxlcykgewogICAgdmFyIGZpbGVuYW1lcyA9IHNvdXJjZUZpbGVzLm1hcCgodXJpKSA9PiAnJHVyaScpLnRvTGlzdCgpOwogICAgZmlsZW5hbWVzLnNvcnQoKTsKICAgIHJldHVybiBmaWxlbmFtZXMuam9pbigiXG4iKTsKICB9CgogIHZvaWQgc2V0QWxsb3dOYXRpdmVFeHRlbnNpb25zKFN0cmluZyBhcmd1bWVudCkgewogICAgaGVscEFuZEZhaWwoIk9wdGlvbiAnJHtGbGFncy5hbGxvd05hdGl2ZUV4dGVuc2lvbnN9JyBpcyBub3Qgc3VwcG9ydGVkLiIpOwogIH0KCiAgdm9pZCBzZXRWZXJib3NlKF8pIHsKICAgIHZlcmJvc2UgPSB0cnVlOwogICAgcGFzc1Rocm91Z2goJy0tdmVyYm9zZScpOwogIH0KCiAgdm9pZCBzZXRUcnVzdFR5cGVBbm5vdGF0aW9ucyhTdHJpbmcgYXJndW1lbnQpIHsKICAgIHRydXN0VHlwZUFubm90YXRpb25zID0gdHJ1ZTsKICB9CgogIHZvaWQgc2V0Q2hlY2tlZE1vZGUoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBjaGVja2VkTW9kZSA9IHRydWU7CiAgICBwYXNzVGhyb3VnaChhcmd1bWVudCk7CiAgfQoKICB2b2lkIGFkZEluRW52aXJvbm1lbnQoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBpbnQgZXFJbmRleCA9IGFyZ3VtZW50LmluZGV4T2YoJz0nKTsKICAgIFN0cmluZyBuYW1lID0gYXJndW1lbnQuc3Vic3RyaW5nKDIsIGVxSW5kZXgpOwogICAgU3RyaW5nIHZhbHVlID0gYXJndW1lbnQuc3Vic3RyaW5nKGVxSW5kZXggKyAxKTsKICAgIGVudmlyb25tZW50W25hbWVdID0gdmFsdWU7CiAgfQoKICB2b2lkIHNldENhdGVnb3JpZXMoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBMaXN0PFN0cmluZz4gY2F0ZWdvcmllcyA9IGV4dHJhY3RQYXJhbWV0ZXIoYXJndW1lbnQpLnNwbGl0KCcsJyk7CiAgICBib29sIGlzU2VydmVyTW9kZSA9IGNhdGVnb3JpZXMubGVuZ3RoID09IDEgJiYgY2F0ZWdvcmllcy5zaW5nbGUgPT0gIlNlcnZlciI7CiAgICBpZiAoaXNTZXJ2ZXJNb2RlKSB7CiAgICAgIGhpbnRzLmFkZCgiVGhlIC0tY2F0ZWdvcmllcyBmbGFnIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgZGVsZXRlZCBpbiBhICIKICAgICAgICAgICJmdXR1cmUgcmVsZWFzZSwgcGxlYXNlIHVzZSAnJHtGbGFncy5zZXJ2ZXJNb2RlfScgaW5zdGVhZCBvZiAiCiAgICAgICAgICAiJy0tY2F0ZWdvcmllcz1TZXJ2ZXInLiIpOwogICAgICBwYXNzVGhyb3VnaChGbGFncy5zZXJ2ZXJNb2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIGhpbnRzLmFkZCgKICAgICAgICAgICJUaGUgLS1jYXRlZ29yaWVzIGZsYWcgaXMgZGVwcmVjYXRlZCwgc2VlIHRoZSB1c2FnZSBmb3IgZGV0YWlscy4iKTsKICAgIH0KICB9CgogIHZvaWQgc2V0UGxhdGZvcm1CaW5hcmllcyhTdHJpbmcgYXJndW1lbnQpIHsKICAgIHBsYXRmb3JtQmluYXJpZXMgPQogICAgICAgIGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZShleHRyYWN0UGF0aChhcmd1bWVudCwgaXNEaXJlY3Rvcnk6IHRydWUpKTsKICB9CgogIHZvaWQgc2V0UmVhZERhdGEoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBpZiAoYXJndW1lbnQgIT0gRmxhZ3MucmVhZERhdGEpIHsKICAgICAgcmVhZERhdGFVcmkgPSBuYXRpdmVUb1VyaShleHRyYWN0UGF0aChhcmd1bWVudCwgaXNEaXJlY3Rvcnk6IGZhbHNlKSk7CiAgICB9CiAgICBpZiAocmVhZFN0cmF0ZWd5ICE9IFJlYWRTdHJhdGVneS5mcm9tQ29kZWdlbikgewogICAgICByZWFkU3RyYXRlZ3kgPSBSZWFkU3RyYXRlZ3kuZnJvbURhdGE7CiAgICB9CiAgfQoKICB2b2lkIHNldERpbGxEZXBlbmRlbmNpZXMoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBTdHJpbmcgZGVwZW5kZW5jaWVzID0gZXh0cmFjdFBhcmFtZXRlcihhcmd1bWVudCk7CiAgICBTdHJpbmcgdXJpRGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzLnNwbGl0TWFwSm9pbignLCcsCiAgICAgICAgb25NYXRjaDogKF8pID0+ICcsJywgb25Ob25NYXRjaDogKHApID0+ICcke25hdGl2ZVRvVXJpKHApfScpOwogICAgb3B0aW9ucy5hZGQoJyR7RmxhZ3MuZGlsbERlcGVuZGVuY2llc309JHt1cmlEZXBlbmRlbmNpZXN9Jyk7CiAgfQoKICB2b2lkIHNldENmZU9ubHkoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBpZiAod3JpdGVTdHJhdGVneSA9PSBXcml0ZVN0cmF0ZWd5LnRvRGF0YSkgewogICAgICBmYWlsKCJDYW5ub3QgdXNlICR7RmxhZ3MuY2ZlT25seX0gIgogICAgICAgICAgImFuZCB3cml0ZSBzZXJpYWxpemVkIGRhdGEgc2ltdWx0YW5lb3VzbHkuIik7CiAgICB9CiAgICBpZiAod3JpdGVTdHJhdGVneSA9PSBXcml0ZVN0cmF0ZWd5LnRvQ29kZWdlbikgewogICAgICBmYWlsKCJDYW5ub3QgdXNlICR7RmxhZ3MuY2ZlT25seX0gIgogICAgICAgICAgImFuZCB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gc2ltdWx0YW5lb3VzbHkuIik7CiAgICB9CiAgICB3cml0ZVN0cmF0ZWd5ID0gV3JpdGVTdHJhdGVneS50b0tlcm5lbDsKICB9CgogIHZvaWQgc2V0UmVhZENvZGVnZW4oU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBpZiAoYXJndW1lbnQgIT0gRmxhZ3MucmVhZENvZGVnZW4pIHsKICAgICAgcmVhZENvZGVnZW5VcmkgPSBuYXRpdmVUb1VyaShleHRyYWN0UGF0aChhcmd1bWVudCwgaXNEaXJlY3Rvcnk6IGZhbHNlKSk7CiAgICB9CiAgICByZWFkU3RyYXRlZ3kgPSBSZWFkU3RyYXRlZ3kuZnJvbUNvZGVnZW47CiAgfQoKICB2b2lkIHNldFdyaXRlRGF0YShTdHJpbmcgYXJndW1lbnQpIHsKICAgIGlmICh3cml0ZVN0cmF0ZWd5ID09IFdyaXRlU3RyYXRlZ3kudG9LZXJuZWwpIHsKICAgICAgZmFpbCgiQ2Fubm90IHVzZSAke0ZsYWdzLmNmZU9ubHl9ICIKICAgICAgICAgICJhbmQgd3JpdGUgc2VyaWFsaXplZCBkYXRhIHNpbXVsdGFuZW91c2x5LiIpOwogICAgfQogICAgaWYgKHdyaXRlU3RyYXRlZ3kgPT0gV3JpdGVTdHJhdGVneS50b0NvZGVnZW4pIHsKICAgICAgZmFpbCgiQ2Fubm90IHdyaXRlIHNlcmlhbGl6ZWQgZGF0YSBhbmQgY29kZWdlbiBzaW11bHRhbmVvdXNseS4iKTsKICAgIH0KICAgIGlmIChhcmd1bWVudCAhPSBGbGFncy53cml0ZURhdGEpIHsKICAgICAgd3JpdGVEYXRhVXJpID0gbmF0aXZlVG9VcmkoZXh0cmFjdFBhdGgoYXJndW1lbnQsIGlzRGlyZWN0b3J5OiBmYWxzZSkpOwogICAgfQogICAgd3JpdGVTdHJhdGVneSA9IFdyaXRlU3RyYXRlZ3kudG9EYXRhOwogIH0KCiAgdm9pZCBzZXRXcml0ZUNvZGVnZW4oU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBpZiAod3JpdGVTdHJhdGVneSA9PSBXcml0ZVN0cmF0ZWd5LnRvS2VybmVsKSB7CiAgICAgIGZhaWwoIkNhbm5vdCB1c2UgJHtGbGFncy5jZmVPbmx5fSAiCiAgICAgICAgICAiYW5kIHdyaXRlIHNlcmlhbGl6ZWQgY29kZWdlbiBzaW11bHRhbmVvdXNseS4iKTsKICAgIH0KICAgIGlmICh3cml0ZVN0cmF0ZWd5ID09IFdyaXRlU3RyYXRlZ3kudG9EYXRhKSB7CiAgICAgIGZhaWwoIkNhbm5vdCB3cml0ZSBzZXJpYWxpemVkIGRhdGEgYW5kIGNvZGVnZW4gZGF0YSBzaW11bHRhbmVvdXNseS4iKTsKICAgIH0KICAgIGlmIChhcmd1bWVudCAhPSBGbGFncy53cml0ZUNvZGVnZW4pIHsKICAgICAgd3JpdGVDb2RlZ2VuVXJpID0gbmF0aXZlVG9VcmkoZXh0cmFjdFBhdGgoYXJndW1lbnQsIGlzRGlyZWN0b3J5OiBmYWxzZSkpOwogICAgfQogICAgd3JpdGVTdHJhdGVneSA9IFdyaXRlU3RyYXRlZ3kudG9Db2RlZ2VuOwogIH0KCiAgdm9pZCBzZXRDb2RlZ2VuU2hhcmQoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICBjb2RlZ2VuU2hhcmQgPSBpbnQucGFyc2UoZXh0cmFjdFBhcmFtZXRlcihhcmd1bWVudCkpOwogIH0KCiAgdm9pZCBzZXRDb2RlZ2VuU2hhcmRzKFN0cmluZyBhcmd1bWVudCkgewogICAgY29kZWdlblNoYXJkcyA9IGludC5wYXJzZShleHRyYWN0UGFyYW1ldGVyKGFyZ3VtZW50KSk7CiAgfQoKICB2b2lkIHNldER1bXBJbmZvKFN0cmluZyBhcmd1bWVudCkgewogICAgcGFzc1Rocm91Z2goRmxhZ3MuZHVtcEluZm8pOwogICAgaWYgKGFyZ3VtZW50ID09IEZsYWdzLmR1bXBJbmZvIHx8IGFyZ3VtZW50ID09ICIke0ZsYWdzLmR1bXBJbmZvfT1qc29uIikgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoYXJndW1lbnQgPT0gIiR7RmxhZ3MuZHVtcEluZm99PWJpbmFyeSIpIHsKICAgICAgcGFzc1Rocm91Z2goYXJndW1lbnQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBoZWxwQW5kRmFpbCgiRXJyb3I6IFVuc3VwcG9ydGVkIGR1bXAtaW5mbyBmb3JtYXQgJyRhcmd1bWVudCcsICIKICAgICAgICAic3VwcG9ydGVkIGZvcm1hdHMgYXJlOiBqc29uIG9yIGJpbmFyeSIpOwogIH0KCiAgdm9pZCBoYW5kbGVUaHJvd09uRXJyb3IoU3RyaW5nIGFyZ3VtZW50KSB7CiAgICB0aHJvd09uRXJyb3IgPSB0cnVlOwogICAgU3RyaW5nIHBhcmFtZXRlciA9IGV4dHJhY3RQYXJhbWV0ZXIoYXJndW1lbnQsIGlzT3B0aW9uYWxBcmd1bWVudDogdHJ1ZSk7CiAgICBpZiAocGFyYW1ldGVyICE9IG51bGwpIHsKICAgICAgdmFyIGNvdW50ID0gaW50LnBhcnNlKHBhcmFtZXRlcik7CiAgICAgIHRocm93T25FcnJvckNvdW50ID0gY291bnQ7CiAgICB9CiAgfQoKICB2b2lkIGhhbmRsZVNob3J0T3B0aW9ucyhTdHJpbmcgYXJndW1lbnQpIHsKICAgIHZhciBzaG9ydE9wdGlvbnMgPSBhcmd1bWVudC5zdWJzdHJpbmcoMSkuc3BsaXQoIiIpOwogICAgZm9yICh2YXIgc2hvcnRPcHRpb24gaW4gc2hvcnRPcHRpb25zKSB7CiAgICAgIHN3aXRjaCAoc2hvcnRPcHRpb24pIHsKICAgICAgICBjYXNlICd2JzoKICAgICAgICAgIHNldFZlcmJvc2UobnVsbCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdoJzoKICAgICAgICBjYXNlICc/JzoKICAgICAgICAgIHdhbnRIZWxwID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2MnOgogICAgICAgICAgc2V0Q2hlY2tlZE1vZGUoRmxhZ3MuZW5hYmxlQ2hlY2tlZE1vZGUpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnbSc6CiAgICAgICAgICBwYXNzVGhyb3VnaChGbGFncy5taW5pZnkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHRocm93ICdJbnRlcm5hbCBlcnJvcjogIiRzaG9ydE9wdGlvbiIgZGlkIG5vdCBtYXRjaCc7CiAgICAgIH0KICAgIH0KICB9CgogIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMgPSA8U3RyaW5nPltdOwogIExpc3Q8T3B0aW9uSGFuZGxlcj4gaGFuZGxlcnMgPSA8T3B0aW9uSGFuZGxlcj5bCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLVtjaHZtP10rJywgaGFuZGxlU2hvcnRPcHRpb25zKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCctLXRocm93LW9uLWVycm9yKD86PVswLTldKyk/JywgaGFuZGxlVGhyb3dPbkVycm9yKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnN1cHByZXNzV2FybmluZ3MsIChTdHJpbmcgYXJndW1lbnQpIHsKICAgICAgc2hvd1dhcm5pbmdzID0gZmFsc2U7CiAgICAgIHBhc3NUaHJvdWdoKGFyZ3VtZW50KTsKICAgIH0pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZmF0YWxXYXJuaW5ncywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3Muc3VwcHJlc3NIaW50cywgKFN0cmluZyBhcmd1bWVudCkgewogICAgICBzaG93SGludHMgPSBmYWxzZTsKICAgICAgcGFzc1Rocm91Z2goYXJndW1lbnQpOwogICAgfSksCiAgICAvLyBUT0RPKHNpZ211bmQpOiByZW1vdmUgZW50aXJlbHkgYWZ0ZXIgRGFydCAxLjIwCiAgICBuZXcgT3B0aW9uSGFuZGxlcigKICAgICAgICAnLS1vdXRwdXQtdHlwZT1kYXJ0fC0tb3V0cHV0LXR5cGU9ZGFydC1tdWx0aXwtLW91dHB1dC10eXBlPWpzJywKICAgICAgICBzZXRPdXRwdXRUeXBlKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCctLXVzZS1rZXJuZWwnLCBpZ25vcmVPcHRpb24pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MucGxhdGZvcm1CaW5hcmllcywgc2V0UGxhdGZvcm1CaW5hcmllcyksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5ub0ZyZXF1ZW5jeUJhc2VkTWluaWZpY2F0aW9uLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy52ZXJib3NlLCBzZXRWZXJib3NlKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnByb2dyZXNzLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy52ZXJzaW9uLCAoXykgPT4gd2FudFZlcnNpb24gPSB0cnVlKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCctLWxpYnJhcnktcm9vdD0uKycsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1saWJyYXJpZXMtc3BlYz0uKycsIHNldExpYnJhcnlTcGVjaWZpY2F0aW9uVXJpKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCcke0ZsYWdzLmRpbGxEZXBlbmRlbmNpZXN9PS4rJywgc2V0RGlsbERlcGVuZGVuY2llcyksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignJHtGbGFncy5yZWFkRGF0YX18JHtGbGFncy5yZWFkRGF0YX09LisnLCBzZXRSZWFkRGF0YSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignJHtGbGFncy53cml0ZURhdGF9fCR7RmxhZ3Mud3JpdGVEYXRhfT0uKycsIHNldFdyaXRlRGF0YSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcigKICAgICAgICAnJHtGbGFncy5yZWFkQ29kZWdlbn18JHtGbGFncy5yZWFkQ29kZWdlbn09LisnLCBzZXRSZWFkQ29kZWdlbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcigKICAgICAgICAnJHtGbGFncy53cml0ZUNvZGVnZW59fCR7RmxhZ3Mud3JpdGVDb2RlZ2VufT0uKycsIHNldFdyaXRlQ29kZWdlbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignJHtGbGFncy5jb2RlZ2VuU2hhcmR9PS4rJywgc2V0Q29kZWdlblNoYXJkKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCcke0ZsYWdzLmNvZGVnZW5TaGFyZHN9PS4rJywgc2V0Q29kZWdlblNoYXJkcyksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5jZmVPbmx5LCBzZXRDZmVPbmx5KSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmRlYnVnR2xvYmFsSW5mZXJlbmNlLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1vdXQ9Lit8LW8uKicsIHNldE91dHB1dCwgbXVsdGlwbGVBcmd1bWVudHM6IHRydWUpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy1PLionLCBzZXRPcHRpbWl6YXRpb25MZXZlbCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5hbGxvd01vY2tDb21waWxhdGlvbiwgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmZhc3RTdGFydHVwLCBpZ25vcmVPcHRpb24pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZ2VuZXJpY01ldGhvZFN5bnRheCwgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmluaXRpYWxpemluZ0Zvcm1hbEFjY2VzcywgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLm1pbmlmeSwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3Mubm9NaW5pZnksIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnByZXNlcnZlVXJpcywgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCctLWZvcmNlLXN0cmlwPS4qJywgc2V0U3RyaXApLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZGlzYWJsZURpYWdub3N0aWNDb2xvcnMsIChfKSB7CiAgICAgIGVuYWJsZUNvbG9ycyA9IGZhbHNlOwogICAgfSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5lbmFibGVEaWFnbm9zdGljQ29sb3JzLCAoXykgewogICAgICBlbmFibGVDb2xvcnMgPSB0cnVlOwogICAgfSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1lbmFibGVbXy1dY2hlY2tlZFtfLV1tb2RlfC0tY2hlY2tlZCcsCiAgICAgICAgKF8pID0+IHNldENoZWNrZWRNb2RlKEZsYWdzLmVuYWJsZUNoZWNrZWRNb2RlKSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5lbmFibGVBc3NlcnRzLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy50cnVzdFR5cGVBbm5vdGF0aW9ucywgc2V0VHJ1c3RUeXBlQW5ub3RhdGlvbnMpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudHJ1c3RQcmltaXRpdmVzLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy50cnVzdEpTSW50ZXJvcFR5cGVBbm5vdGF0aW9ucywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIocictLWhlbHB8L1w/fC9oJywgKF8pID0+IHdhbnRIZWxwID0gdHJ1ZSksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1wYWNrYWdlcz0uKycsIHNldFBhY2thZ2VDb25maWcpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tcGFja2FnZS1yb290PS4rfC1wLisnLCBzZXRQYWNrYWdlUm9vdCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5ub1NvdXJjZU1hcHMsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKE9wdGlvbi5yZXNvbHV0aW9uSW5wdXQsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihPcHRpb24uYmF6ZWxQYXRocywgc2V0QmF6ZWxQYXRocyksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5yZXNvbHZlT25seSwgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmRpc2FibGVOYXRpdmVMaXZlVHlwZUFuYWx5c2lzLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1jYXRlZ29yaWVzPS4qJywgc2V0Q2F0ZWdvcmllcyksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5zZXJ2ZXJNb2RlLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5kaXNhYmxlSW5saW5pbmcsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmRpc2FibGVQcm9ncmFtU3BsaXQsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmRpc2FibGVUeXBlSW5mZXJlbmNlLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy51c2VUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbiwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZGlzYWJsZVJ0aU9wdGltaXphdGlvbiwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudGVyc2UsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCctLWRlZmVycmVkLW1hcD0uKycsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLm5ld0RlZmVycmVkU3BsaXQsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnJlcG9ydEludmFsaWRJbmZlcnJlZERlZmVycmVkVHlwZXMsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCcke0ZsYWdzLmR1bXBJbmZvfXwke0ZsYWdzLmR1bXBJbmZvfT0uKycsIHNldER1bXBJbmZvKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCctLWRpc2FsbG93LXVuc2FmZS1ldmFsJywgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKE9wdGlvbi5zaG93UGFja2FnZVdhcm5pbmdzLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihPcHRpb24uZW5hYmxlTGFuZ3VhZ2VFeHBlcmltZW50cywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudXNlQ29udGVudFNlY3VyaXR5UG9saWN5LCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1lbmFibGUtZXhwZXJpbWVudGFsLW1pcnJvcnMnLCBpZ25vcmVPcHRpb24pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZW5hYmxlQXNzZXJ0TWVzc2FnZSwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tc3Ryb25nJywgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLnByZXZpZXdEYXJ0MiwgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLm9taXRJbXBsaWNpdENoZWNrcywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3Mub21pdEFzQ2FzdHMsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmxheFJ1bnRpbWVUeXBlVG9TdHJpbmcsIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmJlbmNobWFya2luZ1Byb2R1Y3Rpb24sIHBhc3NUaHJvdWdoKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmJlbmNobWFya2luZ0V4cGVyaW1lbnQsIHBhc3NUaHJvdWdoKSwKCiAgICAvLyBUT0RPKGZsb2l0c2NoKTogcmVtb3ZlIGNvbmRpdGlvbmFsIGRpcmVjdGl2ZXMgZmxhZy4KICAgIC8vIFdlIGRvbid0IHByb3ZpZGUgdGhlIGluZm8tbWVzc2FnZSB5ZXQsIHNpbmNlIHdlIGhhdmVuJ3QgcHVibGljbHkKICAgIC8vIGxhdW5jaGVkIHRoZSBmZWF0dXJlIHlldC4KICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmNvbmRpdGlvbmFsRGlyZWN0aXZlcywgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCctLWVuYWJsZS1hc3luYycsIGlnbm9yZU9wdGlvbiksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS1lbmFibGUtbnVsbC1hd2FyZS1vcGVyYXRvcnMnLCBpZ25vcmVPcHRpb24pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoJy0tZW5hYmxlLWVudW0nLCBpZ25vcmVPcHRpb24pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuYWxsb3dOYXRpdmVFeHRlbnNpb25zLCBzZXRBbGxvd05hdGl2ZUV4dGVuc2lvbnMpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZ2VuZXJhdGVDb2RlV2l0aENvbXBpbGVUaW1lRXJyb3JzLCBpZ25vcmVPcHRpb24pLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MudXNlTXVsdGlTb3VyY2VJbmZvLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy51c2VOZXdTb3VyY2VJbmZvLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy50ZXN0TW9kZSwgcGFzc1Rocm91Z2gpLAoKICAgIC8vIEV4cGVyaW1lbnRhbCBmZWF0dXJlcy4KICAgIC8vIFdlIGRvbid0IHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlc2UgeWV0LgogICAgLy8gVE9ETygyOTU3NCk6IHByb3ZpZGUgZG9jdW1lbnRhdGlvbiB3aGVuIHRoaXMgZmVhdHVyZSBpcyBzdXBwb3J0ZWQuCiAgICAvLyBUT0RPKDI5NTc0KTogcHJvdmlkZSBhIHdhcm5pbmcvaGludC9lcnJvciwgd2hlbiBwcm9maWxlLWJhc2VkIGRhdGEgaXMKICAgIC8vIHVzZWQgd2l0aG91dCBgLS1mYXN0LXN0YXJ0dXBgLgogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZXhwZXJpbWVudGFsVHJhY2tBbGxvY2F0aW9ucywgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoIiR7RmxhZ3MuZXhwZXJpbWVudGFsQWxsb2NhdGlvbnNQYXRofT0uKyIsIHBhc3NUaHJvdWdoKSwKCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5leHBlcmltZW50TG9jYWxOYW1lcywgaWdub3JlT3B0aW9uKSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKEZsYWdzLmV4cGVyaW1lbnRTdGFydHVwRnVuY3Rpb25zLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5leHBlcmltZW50VG9Cb29sZWFuLCBwYXNzVGhyb3VnaCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcihGbGFncy5leHBlcmltZW50Q2FsbEluc3RydW1lbnRhdGlvbiwgcGFzc1Rocm91Z2gpLAogICAgbmV3IE9wdGlvbkhhbmRsZXIoRmxhZ3MuZXhwZXJpbWVudE5ld1J0aSwgcGFzc1Rocm91Z2gpLAoKICAgIC8vIFRoZSBmb2xsb3dpbmcgdGhyZWUgb3B0aW9ucyBtdXN0IGNvbWUgbGFzdC4KICAgIG5ldyBPcHRpb25IYW5kbGVyKCctRC4rPS4qJywgYWRkSW5FbnZpcm9ubWVudCksCiAgICBuZXcgT3B0aW9uSGFuZGxlcignLS4qJywgKFN0cmluZyBhcmd1bWVudCkgewogICAgICBoZWxwQW5kRmFpbCgiVW5rbm93biBvcHRpb24gJyRhcmd1bWVudCcuIik7CiAgICB9KSwKICAgIG5ldyBPcHRpb25IYW5kbGVyKCcuKicsIChTdHJpbmcgYXJndW1lbnQpIHsKICAgICAgYXJndW1lbnRzLmFkZChuYXRpdmVUb1VyaVBhdGgoYXJndW1lbnQpKTsKICAgIH0pCiAgXTsKCiAgcGFyc2VDb21tYW5kTGluZShoYW5kbGVycywgYXJndik7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1lYXN1cmUgdGltZSBmb3IgcmVhZGluZyBmaWxlcy4KICBTb3VyY2VGaWxlUHJvdmlkZXIgaW5wdXRQcm92aWRlcjsKICBpZiAoYmF6ZWxQYXRocyAhPSBudWxsKSB7CiAgICBpbnB1dFByb3ZpZGVyID0gbmV3IEJhemVsSW5wdXRQcm92aWRlcihiYXplbFBhdGhzKTsKICB9IGVsc2UgewogICAgaW5wdXRQcm92aWRlciA9IG5ldyBDb21waWxlclNvdXJjZUZpbGVQcm92aWRlcigpOwogIH0KCiAgZGlhZ25vc3RpY0hhbmRsZXIgPSBuZXcgRm9ybWF0dGluZ0RpYWdub3N0aWNIYW5kbGVyKGlucHV0UHJvdmlkZXIpOwogIGlmICh2ZXJib3NlICE9IG51bGwpIHsKICAgIGRpYWdub3N0aWNIYW5kbGVyLnZlcmJvc2UgPSB2ZXJib3NlOwogIH0KICBpZiAodGhyb3dPbkVycm9yICE9IG51bGwpIHsKICAgIGRpYWdub3N0aWNIYW5kbGVyLnRocm93T25FcnJvciA9IHRocm93T25FcnJvcjsKICB9CiAgaWYgKHRocm93T25FcnJvckNvdW50ICE9IG51bGwpIHsKICAgIGRpYWdub3N0aWNIYW5kbGVyLnRocm93T25FcnJvckNvdW50ID0gdGhyb3dPbkVycm9yQ291bnQ7CiAgfQogIGlmIChzaG93V2FybmluZ3MgIT0gbnVsbCkgewogICAgZGlhZ25vc3RpY0hhbmRsZXIuc2hvd1dhcm5pbmdzID0gc2hvd1dhcm5pbmdzOwogIH0KICBpZiAoc2hvd0hpbnRzICE9IG51bGwpIHsKICAgIGRpYWdub3N0aWNIYW5kbGVyLnNob3dIaW50cyA9IHNob3dIaW50czsKICB9CiAgaWYgKGVuYWJsZUNvbG9ycyAhPSBudWxsKSB7CiAgICBkaWFnbm9zdGljSGFuZGxlci5lbmFibGVDb2xvcnMgPSBlbmFibGVDb2xvcnM7CiAgfQoKICBpZiAoY2hlY2tlZE1vZGUgJiYgc3Ryb25nTW9kZSkgewogICAgY2hlY2tlZE1vZGUgPSBmYWxzZTsKICAgIGhpbnRzLmFkZCgiT3B0aW9uICcke0ZsYWdzLmVuYWJsZUNoZWNrZWRNb2RlfScgaXMgbm90IG5lZWRlZCBpbiBEYXJ0IDIuMC4gIgogICAgICAgICJUbyBlbmFibGUgYXNzZXJ0aW9ucyB1c2UgJyR7RmxhZ3MuZW5hYmxlQXNzZXJ0c30nIGluc3RlYWQuIik7CiAgfQoKICBpZiAodHJ1c3RUeXBlQW5ub3RhdGlvbnMgJiYgc3Ryb25nTW9kZSkgewogICAgaGludHMuYWRkKCJPcHRpb24gJyR7RmxhZ3MudHJ1c3RUeXBlQW5ub3RhdGlvbnN9JyBpcyBub3QgYXZhaWxhYmxlICIKICAgICAgICAiaW4gRGFydCAyLjAuIFRyeSB1c2luZyAnJHtGbGFncy5vbWl0SW1wbGljaXRDaGVja3N9JyBpbnN0ZWFkLiIpOwogIH0KCiAgZm9yIChTdHJpbmcgaGludCBpbiBoaW50cykgewogICAgZGlhZ25vc3RpY0hhbmRsZXIuaW5mbyhoaW50LCBhcGkuRGlhZ25vc3RpYy5ISU5UKTsKICB9CgogIGlmICh3YW50SGVscCB8fCB3YW50VmVyc2lvbikgewogICAgaGVscEFuZEV4aXQod2FudEhlbHAsIHdhbnRWZXJzaW9uLCBkaWFnbm9zdGljSGFuZGxlci52ZXJib3NlKTsKICB9CgogIGlmIChhcmd1bWVudHMuaXNFbXB0eSkgewogICAgaGVscEFuZEZhaWwoJ05vIERhcnQgZmlsZSBzcGVjaWZpZWQuJyk7CiAgfQogIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgewogICAgdmFyIGV4dHJhID0gYXJndW1lbnRzLnN1Ymxpc3QoMSk7CiAgICBoZWxwQW5kRmFpbCgnRXh0cmEgYXJndW1lbnRzOiAke2V4dHJhLmpvaW4oIiAiKX0nKTsKICB9CgogIGlmICh0cnVzdFR5cGVBbm5vdGF0aW9ucyAmJiBjaGVja2VkTW9kZSkgewogICAgaGVscEFuZEZhaWwoIk9wdGlvbiAnJHtGbGFncy50cnVzdFR5cGVBbm5vdGF0aW9uc30nIG1heSBub3QgYmUgdXNlZCBpbiAiCiAgICAgICAgImNoZWNrZWQgbW9kZS4iKTsKICB9CgogIGlmIChwYWNrYWdlUm9vdCAhPSBudWxsICYmIHBhY2thZ2VDb25maWcgIT0gbnVsbCkgewogICAgaGVscEFuZEZhaWwoIkNhbm5vdCBzcGVjaWZ5IGJvdGggJy0tcGFja2FnZS1yb290JyBhbmQgJy0tcGFja2FnZXMuIik7CiAgfQoKICBTdHJpbmcgc2NyaXB0TmFtZSA9IGFyZ3VtZW50c1swXTsKCiAgc3dpdGNoICh3cml0ZVN0cmF0ZWd5KSB7CiAgICBjYXNlIFdyaXRlU3RyYXRlZ3kudG9KczoKICAgICAgb3V0ID8/PSBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUoJ291dC5qcycpOwogICAgICBicmVhazsKICAgIGNhc2UgV3JpdGVTdHJhdGVneS50b0tlcm5lbDoKICAgICAgb3V0ID8/PSBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUoJ291dC5kaWxsJyk7CiAgICAgIG9wdGlvbnMuYWRkKEZsYWdzLmNmZU9ubHkpOwogICAgICBpZiAocmVhZFN0cmF0ZWd5ID09IFJlYWRTdHJhdGVneS5mcm9tRGF0YSkgewogICAgICAgIGZhaWwoIkNhbm5vdCB1c2UgJHtGbGFncy5jZmVPbmx5fSAiCiAgICAgICAgICAgICJhbmQgcmVhZCBzZXJpYWxpemVkIGRhdGEgc2ltdWx0YW5lb3VzbHkuIik7CiAgICAgIH0gZWxzZSBpZiAocmVhZFN0cmF0ZWd5ID09IFJlYWRTdHJhdGVneS5mcm9tQ29kZWdlbikgewogICAgICAgIGZhaWwoIkNhbm5vdCB1c2UgJHtGbGFncy5jZmVPbmx5fSAiCiAgICAgICAgICAgICJhbmQgcmVhZCBzZXJpYWxpemVkIGNvZGVnZW4gc2ltdWx0YW5lb3VzbHkuIik7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIFdyaXRlU3RyYXRlZ3kudG9EYXRhOgogICAgICBvdXQgPz89IGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZSgnb3V0LmRpbGwnKTsKICAgICAgd3JpdGVEYXRhVXJpID8/PSBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUoJyRvdXQuZGF0YScpOwogICAgICBvcHRpb25zLmFkZCgnJHtGbGFncy53cml0ZURhdGF9PSR7d3JpdGVEYXRhVXJpfScpOwogICAgICBpZiAocmVhZFN0cmF0ZWd5ID09IFJlYWRTdHJhdGVneS5mcm9tRGF0YSkgewogICAgICAgIGZhaWwoIkNhbm5vdCByZWFkIGFuZCB3cml0ZSBzZXJpYWxpemVkIGRhdGEgc2ltdWx0YW5lb3VzbHkuIik7CiAgICAgIH0gZWxzZSBpZiAocmVhZFN0cmF0ZWd5ID09IFJlYWRTdHJhdGVneS5mcm9tQ29kZWdlbikgewogICAgICAgIGZhaWwoIkNhbm5vdCByZWFkIHNlcmlhbGl6ZWQgY29kZWdlbiBhbmQgIgogICAgICAgICAgICAid3JpdGUgc2VyaWFsaXplZCBkYXRhIHNpbXVsdGFuZW91c2x5LiIpOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSBXcml0ZVN0cmF0ZWd5LnRvQ29kZWdlbjoKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhlIG5lZWQgZm9yIGFuIFtvdXRdIHZhbHVlIGluIHRoaXMgY2FzZSBvcgogICAgICAvLyB1c2UgW291dF0gdG8gcGFzcyBbd3JpdGVDb2RlZ2VuVXJpXS4KICAgICAgb3V0ID8/PSBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUoJ291dCcpOwogICAgICB3cml0ZUNvZGVnZW5VcmkgPz89IGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZSgnJG91dC5jb2RlJyk7CiAgICAgIG9wdGlvbnMuYWRkKCcke0ZsYWdzLndyaXRlQ29kZWdlbn09JHt3cml0ZUNvZGVnZW5Vcml9Jyk7CiAgICAgIGlmIChyZWFkU3RyYXRlZ3kgPT0gUmVhZFN0cmF0ZWd5LmZyb21Db2RlZ2VuKSB7CiAgICAgICAgZmFpbCgiQ2Fubm90IHJlYWQgYW5kIHdyaXRlIHNlcmlhbGl6ZWQgY29kZWdlbiBzaW11bHRhbmVvdXNseS4iKTsKICAgICAgfQogICAgICBpZiAocmVhZFN0cmF0ZWd5ICE9IFJlYWRTdHJhdGVneS5mcm9tRGF0YSkgewogICAgICAgIGZhaWwoIkNhbiBvbmx5IHdyaXRlIHNlcmlhbGl6ZWQgY29kZWdlbiBmcm9tIHNlcmlhbGl6ZWQgZGF0YS4iKTsKICAgICAgfQogICAgICBpZiAoY29kZWdlblNoYXJkcyA9PSBudWxsKSB7CiAgICAgICAgZmFpbCgiQ2Fubm90IHdyaXRlIHNlcmlhbGl6ZWQgY29kZWdlbiB3aXRob3V0IHNldHRpbmcgIgogICAgICAgICAgICAiJHtGbGFncy5jb2RlZ2VuU2hhcmRzfS4iKTsKICAgICAgfSBlbHNlIGlmIChjb2RlZ2VuU2hhcmRzIDw9IDApIHsKICAgICAgICBmYWlsKCIke0ZsYWdzLmNvZGVnZW5TaGFyZHN9IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiIpOwogICAgICB9CiAgICAgIGlmIChjb2RlZ2VuU2hhcmQgPT0gbnVsbCkgewogICAgICAgIGZhaWwoIkNhbm5vdCB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gd2l0aG91dCBzZXR0aW5nICIKICAgICAgICAgICAgIiR7RmxhZ3MuY29kZWdlblNoYXJkfS4iKTsKICAgICAgfSBlbHNlIGlmIChjb2RlZ2VuU2hhcmQgPCAwIHx8IGNvZGVnZW5TaGFyZCA+PSBjb2RlZ2VuU2hhcmRzKSB7CiAgICAgICAgZmFpbCgiJHtGbGFncy5jb2RlZ2VuU2hhcmR9IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAiCiAgICAgICAgICAgICIke0ZsYWdzLmNvZGVnZW5TaGFyZHN9LiIpOwogICAgICB9CiAgICAgIG9wdGlvbnMuYWRkKCcke0ZsYWdzLmNvZGVnZW5TaGFyZH09JGNvZGVnZW5TaGFyZCcpOwogICAgICBvcHRpb25zLmFkZCgnJHtGbGFncy5jb2RlZ2VuU2hhcmRzfT0kY29kZWdlblNoYXJkcycpOwogICAgICBicmVhazsKICB9CiAgc3dpdGNoIChyZWFkU3RyYXRlZ3kpIHsKICAgIGNhc2UgUmVhZFN0cmF0ZWd5LmZyb21EYXJ0OgogICAgICBicmVhazsKICAgIGNhc2UgUmVhZFN0cmF0ZWd5LmZyb21EYXRhOgogICAgICByZWFkRGF0YVVyaSA/Pz0gY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKCckc2NyaXB0TmFtZS5kYXRhJyk7CiAgICAgIG9wdGlvbnMuYWRkKCcke0ZsYWdzLnJlYWREYXRhfT0ke3JlYWREYXRhVXJpfScpOwogICAgICBicmVhazsKICAgIGNhc2UgUmVhZFN0cmF0ZWd5LmZyb21Db2RlZ2VuOgogICAgICByZWFkRGF0YVVyaSA/Pz0gY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKCckc2NyaXB0TmFtZS5kYXRhJyk7CiAgICAgIG9wdGlvbnMuYWRkKCcke0ZsYWdzLnJlYWREYXRhfT0ke3JlYWREYXRhVXJpfScpOwogICAgICByZWFkQ29kZWdlblVyaSA/Pz0gY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKCckc2NyaXB0TmFtZS5jb2RlJyk7CiAgICAgIG9wdGlvbnMuYWRkKCcke0ZsYWdzLnJlYWRDb2RlZ2VufT0ke3JlYWRDb2RlZ2VuVXJpfScpOwogICAgICBpZiAoY29kZWdlblNoYXJkcyA9PSBudWxsKSB7CiAgICAgICAgZmFpbCgiQ2Fubm90IHdyaXRlIHNlcmlhbGl6ZWQgY29kZWdlbiB3aXRob3V0IHNldHRpbmcgIgogICAgICAgICAgICAiJHtGbGFncy5jb2RlZ2VuU2hhcmRzfS4iKTsKICAgICAgfSBlbHNlIGlmIChjb2RlZ2VuU2hhcmRzIDw9IDApIHsKICAgICAgICBmYWlsKCIke0ZsYWdzLmNvZGVnZW5TaGFyZHN9IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLiIpOwogICAgICB9CiAgICAgIG9wdGlvbnMuYWRkKCcke0ZsYWdzLmNvZGVnZW5TaGFyZHN9PSRjb2RlZ2VuU2hhcmRzJyk7CiAgfQogIG9wdGlvbnMuYWRkKCctLW91dD0kb3V0Jyk7CiAgaWYgKHdyaXRlU3RyYXRlZ3kgPT0gV3JpdGVTdHJhdGVneS50b0pzKSB7CiAgICBzb3VyY2VNYXBPdXQgPSBVcmkucGFyc2UoJyRvdXQubWFwJyk7CiAgICBvcHRpb25zLmFkZCgnLS1zb3VyY2UtbWFwPSR7c291cmNlTWFwT3V0fScpOwogIH0KCiAgUmFuZG9tQWNjZXNzRmlsZU91dHB1dFByb3ZpZGVyIG91dHB1dFByb3ZpZGVyID0KICAgICAgbmV3IFJhbmRvbUFjY2Vzc0ZpbGVPdXRwdXRQcm92aWRlcihvdXQsIHNvdXJjZU1hcE91dCwKICAgICAgICAgIG9uSW5mbzogZGlhZ25vc3RpY0hhbmRsZXIuaW5mbywgb25GYWlsdXJlOiBmYWlsKTsKCiAgYXBpLkNvbXBpbGF0aW9uUmVzdWx0IGNvbXBpbGF0aW9uRG9uZShhcGkuQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KSB7CiAgICBpZiAoIXJlc3VsdC5pc1N1Y2Nlc3MpIHsKICAgICAgZmFpbCgnQ29tcGlsYXRpb24gZmFpbGVkLicpOwogICAgfQogICAgd3JpdGVTdHJpbmcoCiAgICAgICAgVXJpLnBhcnNlKCckb3V0LmRlcHMnKSwgZ2V0RGVwc091dHB1dChpbnB1dFByb3ZpZGVyLmdldFNvdXJjZVVyaXMoKSkpOwoKICAgIFN0cmluZyBpbnB1dCA9IHVyaVBhdGhUb05hdGl2ZShzY3JpcHROYW1lKTsKICAgIGludCBpbnB1dFNpemU7CiAgICBTdHJpbmcgcHJvY2Vzc05hbWU7CiAgICBTdHJpbmcgaW5wdXROYW1lOwoKICAgIGludCBvdXRwdXRTaXplOwogICAgaW50IHByaW1hcnlPdXRwdXRTaXplOwogICAgU3RyaW5nIG91dHB1dE5hbWU7CgogICAgU3RyaW5nIHN1bW1hcnk7CiAgICBzd2l0Y2ggKHJlYWRTdHJhdGVneSkgewogICAgICBjYXNlIFJlYWRTdHJhdGVneS5mcm9tRGFydDoKICAgICAgICBpbnB1dE5hbWUgPSAnY2hhcmFjdGVycyBEYXJ0JzsKICAgICAgICBpbnB1dFNpemUgPSBpbnB1dFByb3ZpZGVyLmRhcnRDaGFyYWN0ZXJzUmVhZDsKICAgICAgICBzdW1tYXJ5ID0gJ0RhcnQgZmlsZSAkaW5wdXQgJzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBSZWFkU3RyYXRlZ3kuZnJvbURhdGE6CiAgICAgICAgaW5wdXROYW1lID0gJ2J5dGVzIGRhdGEnOwogICAgICAgIGlucHV0U2l6ZSA9IGlucHV0UHJvdmlkZXIuZGFydENoYXJhY3RlcnNSZWFkOwogICAgICAgIFN0cmluZyBkYXRhSW5wdXQgPQogICAgICAgICAgICBmZS5yZWxhdGl2aXplVXJpKGN1cnJlbnREaXJlY3RvcnksIHJlYWREYXRhVXJpLCBQbGF0Zm9ybS5pc1dpbmRvd3MpOwogICAgICAgIHN1bW1hcnkgPSAnRGF0YSBmaWxlcyAkaW5wdXQgYW5kICRkYXRhSW5wdXQgJzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBSZWFkU3RyYXRlZ3kuZnJvbUNvZGVnZW46CiAgICAgICAgaW5wdXROYW1lID0gJ2J5dGVzIGRhdGEnOwogICAgICAgIGlucHV0U2l6ZSA9IGlucHV0UHJvdmlkZXIuZGFydENoYXJhY3RlcnNSZWFkOwogICAgICAgIFN0cmluZyBkYXRhSW5wdXQgPQogICAgICAgICAgICBmZS5yZWxhdGl2aXplVXJpKGN1cnJlbnREaXJlY3RvcnksIHJlYWREYXRhVXJpLCBQbGF0Zm9ybS5pc1dpbmRvd3MpOwogICAgICAgIFN0cmluZyBjb2RlSW5wdXQgPSBmZS5yZWxhdGl2aXplVXJpKAogICAgICAgICAgICBjdXJyZW50RGlyZWN0b3J5LCByZWFkQ29kZWdlblVyaSwgUGxhdGZvcm0uaXNXaW5kb3dzKTsKICAgICAgICBzdW1tYXJ5ID0gJ0RhdGEgZmlsZXMgJGlucHV0LCAkZGF0YUlucHV0IGFuZCAnCiAgICAgICAgICAgICcke2NvZGVJbnB1dH1bMC0ke2NvZGVnZW5TaGFyZHMgLSAxfV0gJzsKICAgICAgICBicmVhazsKICAgIH0KCiAgICBzd2l0Y2ggKHdyaXRlU3RyYXRlZ3kpIHsKICAgICAgY2FzZSBXcml0ZVN0cmF0ZWd5LnRvSnM6CiAgICAgICAgcHJvY2Vzc05hbWUgPSAnQ29tcGlsZWQnOwogICAgICAgIG91dHB1dE5hbWUgPSAnY2hhcmFjdGVycyBKYXZhU2NyaXB0JzsKICAgICAgICBvdXRwdXRTaXplID0gb3V0cHV0UHJvdmlkZXIudG90YWxDaGFyYWN0ZXJzV3JpdHRlbkphdmFTY3JpcHQ7CiAgICAgICAgcHJpbWFyeU91dHB1dFNpemUgPSBvdXRwdXRQcm92aWRlci50b3RhbENoYXJhY3RlcnNXcml0dGVuUHJpbWFyeTsKICAgICAgICBTdHJpbmcgb3V0cHV0ID0KICAgICAgICAgICAgZmUucmVsYXRpdml6ZVVyaShjdXJyZW50RGlyZWN0b3J5LCBvdXQsIFBsYXRmb3JtLmlzV2luZG93cyk7CiAgICAgICAgc3VtbWFyeSArPSAnY29tcGlsZWQgdG8gSmF2YVNjcmlwdDogJHtvdXRwdXR9JzsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBXcml0ZVN0cmF0ZWd5LnRvS2VybmVsOgogICAgICAgIHByb2Nlc3NOYW1lID0gJ0NvbXBpbGVkJzsKICAgICAgICBvdXRwdXROYW1lID0gJ2tlcm5lbCBieXRlcyc7CiAgICAgICAgb3V0cHV0U2l6ZSA9IG91dHB1dFByb3ZpZGVyLnRvdGFsRGF0YVdyaXR0ZW47CiAgICAgICAgU3RyaW5nIG91dHB1dCA9CiAgICAgICAgICAgIGZlLnJlbGF0aXZpemVVcmkoY3VycmVudERpcmVjdG9yeSwgb3V0LCBQbGF0Zm9ybS5pc1dpbmRvd3MpOwogICAgICAgIHN1bW1hcnkgKz0gJ2NvbXBpbGVkIHRvIGRpbGw6ICR7b3V0cHV0fS4nOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFdyaXRlU3RyYXRlZ3kudG9EYXRhOgogICAgICAgIHByb2Nlc3NOYW1lID0gJ1NlcmlhbGl6ZWQnOwogICAgICAgIG91dHB1dE5hbWUgPSAnYnl0ZXMgZGF0YSc7CiAgICAgICAgb3V0cHV0U2l6ZSA9IG91dHB1dFByb3ZpZGVyLnRvdGFsRGF0YVdyaXR0ZW47CiAgICAgICAgU3RyaW5nIG91dHB1dCA9CiAgICAgICAgICAgIGZlLnJlbGF0aXZpemVVcmkoY3VycmVudERpcmVjdG9yeSwgb3V0LCBQbGF0Zm9ybS5pc1dpbmRvd3MpOwogICAgICAgIFN0cmluZyBkYXRhT3V0cHV0ID0gZmUucmVsYXRpdml6ZVVyaSgKICAgICAgICAgICAgY3VycmVudERpcmVjdG9yeSwgd3JpdGVEYXRhVXJpLCBQbGF0Zm9ybS5pc1dpbmRvd3MpOwogICAgICAgIHN1bW1hcnkgKz0gJ3NlcmlhbGl6ZWQgdG8gZGlsbCBhbmQgZGF0YTogJHtvdXRwdXR9IGFuZCAke2RhdGFPdXRwdXR9Lic7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgV3JpdGVTdHJhdGVneS50b0NvZGVnZW46CiAgICAgICAgcHJvY2Vzc05hbWUgPSAnU2VyaWFsaXplZCc7CiAgICAgICAgb3V0cHV0TmFtZSA9ICdieXRlcyBkYXRhJzsKICAgICAgICBvdXRwdXRTaXplID0gb3V0cHV0UHJvdmlkZXIudG90YWxEYXRhV3JpdHRlbjsKICAgICAgICBTdHJpbmcgY29kZU91dHB1dCA9IGZlLnJlbGF0aXZpemVVcmkoCiAgICAgICAgICAgIGN1cnJlbnREaXJlY3RvcnksIHdyaXRlQ29kZWdlblVyaSwgUGxhdGZvcm0uaXNXaW5kb3dzKTsKICAgICAgICBzdW1tYXJ5ICs9ICdzZXJpYWxpemVkIHRvIGNvZGVnZW4gZGF0YTogJwogICAgICAgICAgICAnJHtjb2RlT3V0cHV0fSR7Y29kZWdlblNoYXJkfS4nOwogICAgICAgIGJyZWFrOwogICAgfQoKICAgIHByaW50KCckcHJvY2Vzc05hbWUgJwogICAgICAgICcke19mb3JtYXRDaGFyYWN0ZXJDb3VudChpbnB1dFNpemUpfSAkaW5wdXROYW1lIHRvICcKICAgICAgICAnJHtfZm9ybWF0Q2hhcmFjdGVyQ291bnQob3V0cHV0U2l6ZSl9ICRvdXRwdXROYW1lIGluICcKICAgICAgICAnJHtfZm9ybWF0RHVyYXRpb25Bc1NlY29uZHMod2FsbGNsb2NrLmVsYXBzZWQpfSBzZWNvbmRzJyk7CiAgICBpZiAocHJpbWFyeU91dHB1dFNpemUgIT0gbnVsbCkgewogICAgICBkaWFnbm9zdGljSGFuZGxlci5pbmZvKAogICAgICAgICAgJyR7X2Zvcm1hdENoYXJhY3RlckNvdW50KHByaW1hcnlPdXRwdXRTaXplKX0gJG91dHB1dE5hbWUgJwogICAgICAgICAgJ2luICR7ZmUucmVsYXRpdml6ZVVyaShjdXJyZW50RGlyZWN0b3J5LCBvdXQsIFBsYXRmb3JtLmlzV2luZG93cyl9Jyk7CiAgICB9CiAgICBpZiAod3JpdGVTdHJhdGVneSA9PSBXcml0ZVN0cmF0ZWd5LnRvSnMpIHsKICAgICAgaWYgKG91dHB1dFNwZWNpZmllZCB8fCBkaWFnbm9zdGljSGFuZGxlci52ZXJib3NlKSB7CiAgICAgICAgcHJpbnQoc3VtbWFyeSk7CiAgICAgICAgaWYgKGRpYWdub3N0aWNIYW5kbGVyLnZlcmJvc2UpIHsKICAgICAgICAgIHZhciBmaWxlcyA9IG91dHB1dFByb3ZpZGVyLmFsbE91dHB1dEZpbGVzOwogICAgICAgICAgaW50IGpzQ291bnQgPSBmaWxlcy53aGVyZSgoZikgPT4gZi5lbmRzV2l0aCgnLmpzJykpLmxlbmd0aDsKICAgICAgICAgIHByaW50KCdFbWl0dGVkIGZpbGUgJGpzQ291bnQgSmF2YVNjcmlwdCBmaWxlcy4nKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHByaW50KHN1bW1hcnkpOwogICAgfQoKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBVcmkgc2NyaXB0ID0gY3VycmVudERpcmVjdG9yeS5yZXNvbHZlKHNjcmlwdE5hbWUpOwoKICBkaWFnbm9zdGljSGFuZGxlci5hdXRvUmVhZEZpbGVVcmkgPSB0cnVlOwogIENvbXBpbGVyT3B0aW9ucyBjb21waWxlck9wdGlvbnMgPSBDb21waWxlck9wdGlvbnMucGFyc2Uob3B0aW9ucywKICAgICAgbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaTogbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSwKICAgICAgcGxhdGZvcm1CaW5hcmllczogcGxhdGZvcm1CaW5hcmllcykKICAgIC4uZW50cnlQb2ludCA9IHNjcmlwdAogICAgLi5wYWNrYWdlUm9vdCA9IHBhY2thZ2VSb290CiAgICAuLnBhY2thZ2VDb25maWcgPSBwYWNrYWdlQ29uZmlnCiAgICAuLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQKICAgIC4ua2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlID0ga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlCiAgICAuLm9wdGltaXphdGlvbkxldmVsID0gb3B0aW1pemF0aW9uTGV2ZWw7CiAgcmV0dXJuIGNvbXBpbGVGdW5jKAogICAgICAgICAgY29tcGlsZXJPcHRpb25zLCBpbnB1dFByb3ZpZGVyLCBkaWFnbm9zdGljSGFuZGxlciwgb3V0cHV0UHJvdmlkZXIpCiAgICAgIC50aGVuKGNvbXBpbGF0aW9uRG9uZSk7Cn0KCi8vLyBSZXR1cm5zIHRoZSBub24tbmVnYXRpdmUgaW50ZWdlciBmb3JtYXR0ZWQgd2l0aCBhIHRob3VzYW5kcyBzZXBhcmF0b3IuClN0cmluZyBfZm9ybWF0Q2hhcmFjdGVyQ291bnQoaW50IHZhbHVlLCBbU3RyaW5nIHNlcGFyYXRvciA9ICcsJ10pIHsKICBTdHJpbmcgdGV4dCA9ICckdmFsdWUnOwogIC8vICdJbnNlcnQnIHNlcGFyYXRvcnMgcmlnaHQtdG8tbGVmdC4gSW5lZmZpY2llbnQsIGJ1dCB1c2VkIGp1c3QgYSBmZXcgdGltZXMuCiAgZm9yIChpbnQgcG9zaXRpb24gPSB0ZXh0Lmxlbmd0aCAtIDM7IHBvc2l0aW9uID4gMDsgcG9zaXRpb24gLT0gMykgewogICAgdGV4dCA9IHRleHQuc3Vic3RyaW5nKDAsIHBvc2l0aW9uKSArIHNlcGFyYXRvciArIHRleHQuc3Vic3RyaW5nKHBvc2l0aW9uKTsKICB9CiAgcmV0dXJuIHRleHQ7Cn0KCi8vLyBGb3JtYXRzIFtkdXJhdGlvbl0gaW4gc2Vjb25kcyBpbiBmaXhlZC1wb2ludCBmb3JtYXQsIHByZWZlcnJpbmcgdG8ga2VlcCB0aGUKLy8vIHJlc3VsdCBhdCB0byBiZWxvdyBbd2lkdGhdIGNoYXJhY3RlcnMuClN0cmluZyBfZm9ybWF0RHVyYXRpb25Bc1NlY29uZHMoRHVyYXRpb24gZHVyYXRpb24sIFtpbnQgd2lkdGggPSA0XSkgewogIG51bSBzZWNvbmRzID0gZHVyYXRpb24uaW5NaWxsaXNlY29uZHMgLyAxMDAwLjA7CiAgU3RyaW5nIHRleHQ7CiAgZm9yIChpbnQgZGlnaXRzID0gMzsgZGlnaXRzID49IDA7IGRpZ2l0cy0tKSB7CiAgICB0ZXh0ID0gc2Vjb25kcy50b1N0cmluZ0FzRml4ZWQoZGlnaXRzKTsKICAgIGlmICh0ZXh0Lmxlbmd0aCA8PSB3aWR0aCkgcmV0dXJuIHRleHQ7CiAgfQogIHJldHVybiB0ZXh0Owp9CgpjbGFzcyBBYm9ydExlZyB7CiAgZmluYWwgbWVzc2FnZTsKICBBYm9ydExlZyh0aGlzLm1lc3NhZ2UpOwogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ0Fib3J0ZWQgZHVlIHRvIC0tdGhyb3ctb24tZXJyb3I6ICRtZXNzYWdlJzsKfQoKdm9pZCB3cml0ZVN0cmluZyhVcmkgdXJpLCBTdHJpbmcgdGV4dCkgewogIGlmICghZW5hYmxlV3JpdGVTdHJpbmcpIHJldHVybjsKICBpZiAodXJpLnNjaGVtZSAhPSAnZmlsZScpIHsKICAgIGZhaWwoJ1VuaGFuZGxlZCBzY2hlbWUgJHt1cmkuc2NoZW1lfS4nKTsKICB9CiAgdmFyIGZpbGUgPSBuZXcgRmlsZSh1cmkudG9GaWxlUGF0aCgpKS5vcGVuU3luYyhtb2RlOiBGaWxlTW9kZS53cml0ZSk7CiAgZmlsZS53cml0ZVN0cmluZ1N5bmModGV4dCk7CiAgZmlsZS5jbG9zZVN5bmMoKTsKfQoKdm9pZCBmYWlsKFN0cmluZyBtZXNzYWdlKSB7CiAgaWYgKGRpYWdub3N0aWNIYW5kbGVyICE9IG51bGwpIHsKICAgIGRpYWdub3N0aWNIYW5kbGVyLnJlcG9ydChudWxsLCBudWxsLCAtMSwgLTEsIG1lc3NhZ2UsIGFwaS5EaWFnbm9zdGljLkVSUk9SKTsKICB9IGVsc2UgewogICAgcHJpbnQoJ0Vycm9yOiAkbWVzc2FnZScpOwogIH0KICBleGl0RnVuYygxKTsKfQoKRnV0dXJlPGFwaS5Db21waWxhdGlvblJlc3VsdD4gY29tcGlsZXJNYWluKExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICB7ZmUuSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlIGtlcm5lbEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZX0pIGFzeW5jIHsKICBpZiAoIWFyZ3VtZW50cy5hbnkoKGEpID0+IGEuc3RhcnRzV2l0aCgnLS1saWJyYXJpZXMtc3BlYz0nKSkpIHsKICAgIFVyaSBzY3JpcHQgPSBQbGF0Zm9ybS5zY3JpcHQ7CiAgICBpZiAoc2NyaXB0LmlzU2NoZW1lKCJwYWNrYWdlIikpIHsKICAgICAgc2NyaXB0ID0gYXdhaXQgSXNvbGF0ZS5yZXNvbHZlUGFja2FnZVVyaShzY3JpcHQpOwogICAgfQogICAgVXJpIGxpYnJhcmllc0pzb24gPSBzY3JpcHQucmVzb2x2ZShfZGVmYXVsdFNwZWNpZmljYXRpb25VcmkpOwogICAgYXJndW1lbnRzID0gPFN0cmluZz5bJy0tbGlicmFyaWVzLXNwZWM9JHtsaWJyYXJpZXNKc29uLnRvRmlsZVBhdGgoKX0nXQogICAgICAuLmFkZEFsbChhcmd1bWVudHMpOwogIH0KICByZXR1cm4gY29tcGlsZShhcmd1bWVudHMsCiAgICAgIGtlcm5lbEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZToga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlKTsKfQoKdm9pZCBoZWxwKCkgewogIC8vIFRoaXMgbWVzc2FnZSBzaG91bGQgYmUgbm8gbG9uZ2VyIHRoYW4gMjAgbGluZXMuIFRoZSBkZWZhdWx0CiAgLy8gdGVybWluYWwgc2l6ZSBub3JtYWxseSA4MHgyNC4gVHdvIGxpbmVzIGFyZSB1c2VkIGZvciB0aGUgcHJvbXB0cwogIC8vIGJlZm9yZSBhbmQgYWZ0ZXIgcnVubmluZyB0aGUgY29tcGlsZXIuIEFub3RoZXIgdHdvIGxpbmVzIG1heSBiZQogIC8vIHVzZWQgdG8gcHJpbnQgYW4gZXJyb3IgbWVzc2FnZS4KICBwcmludCgnJycKVXNhZ2U6IGRhcnQyanMgW29wdGlvbnNdIGRhcnRmaWxlCgpDb21waWxlcyBEYXJ0IHRvIEphdmFTY3JpcHQuCgpDb21tb24gb3B0aW9uczoKICAtbyA8ZmlsZT4gR2VuZXJhdGUgdGhlIG91dHB1dCBpbnRvIDxmaWxlPi4KICAtbSAgICAgICAgR2VuZXJhdGUgbWluaWZpZWQgb3V0cHV0LgogIC1oICAgICAgICBEaXNwbGF5IHRoaXMgbWVzc2FnZSAoYWRkIC12IGZvciBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb3B0aW9ucykuJycnKTsKfQoKdm9pZCB2ZXJib3NlSGVscCgpIHsKICBwcmludChyJycnClVzYWdlOiBkYXJ0MmpzIFtvcHRpb25zXSBkYXJ0ZmlsZQoKQ29tcGlsZXMgRGFydCB0byBKYXZhU2NyaXB0LgoKU3VwcG9ydGVkIG9wdGlvbnM6CiAgLWgsIC9oLCAvPywgLS1oZWxwCiAgICBEaXNwbGF5IHRoaXMgbWVzc2FnZSAoYWRkIC12IGZvciBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb3B0aW9ucykuCgogIC1vIDxmaWxlPiwgLS1vdXQ9PGZpbGU+CiAgICBHZW5lcmF0ZSB0aGUgb3V0cHV0IGludG8gPGZpbGU+LgoKICAtbSwgLS1taW5pZnkKICAgIEdlbmVyYXRlIG1pbmlmaWVkIG91dHB1dC4KCiAgLS1lbmFibGUtYXNzZXJ0cwogICAgRW5hYmxlIGFzc2VydGlvbnMuCgogIC12LCAtLXZlcmJvc2UKICAgIERpc3BsYXkgdmVyYm9zZSBpbmZvcm1hdGlvbi4KCiAgLUQ8bmFtZT49PHZhbHVlPgogICAgRGVmaW5lIGFuIGVudmlyb25tZW50IHZhcmlhYmxlLgoKICAtLXZlcnNpb24KICAgIERpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbi4KCiAgLS1wYWNrYWdlcz08cGF0aD4KICAgIFBhdGggdG8gdGhlIHBhY2thZ2UgcmVzb2x1dGlvbiBjb25maWd1cmF0aW9uIGZpbGUsIHdoaWNoIHN1cHBsaWVzIGEgbWFwcGluZwogICAgb2YgcGFja2FnZSBuYW1lcyB0byBwYXRocy4KCiAgLS1zdXBwcmVzcy13YXJuaW5ncwogICAgRG8gbm90IGRpc3BsYXkgYW55IHdhcm5pbmdzLgoKICAtLWZhdGFsLXdhcm5pbmdzCiAgICBUcmVhdCB3YXJuaW5ncyBhcyBjb21waWxhdGlvbiBlcnJvcnMuCgogIC0tc3VwcHJlc3MtaGludHMKICAgIERvIG5vdCBkaXNwbGF5IGFueSBoaW50cy4KCiAgLS1lbmFibGUtZGlhZ25vc3RpYy1jb2xvcnMKICAgIEFkZCBjb2xvcnMgdG8gZGlhZ25vc3RpYyBtZXNzYWdlcy4KCiAgLS10ZXJzZQogICAgRW1pdCBkaWFnbm9zdGljcyB3aXRob3V0IHN1Z2dlc3Rpb25zIGZvciBob3cgdG8gZ2V0IHJpZCBvZiB0aGUgZGlhZ25vc2VkCiAgICBwcm9ibGVtcy4KCiAgLS1zaG93LXBhY2thZ2Utd2FybmluZ3MKICAgIFNob3cgd2FybmluZ3MgYW5kIGhpbnRzIGdlbmVyYXRlZCBmcm9tIHBhY2thZ2VzLgoKICAtLWNzcAogICAgRGlzYWJsZSBkeW5hbWljIGdlbmVyYXRpb24gb2YgY29kZSBpbiB0aGUgZ2VuZXJhdGVkIG91dHB1dC4gVGhpcyBpcwogICAgbmVjZXNzYXJ5IHRvIHNhdGlzZnkgQ1NQIHJlc3RyaWN0aW9ucyAoc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUC8pLgoKICAtLW5vLXNvdXJjZS1tYXBzCiAgICBEbyBub3QgZ2VuZXJhdGUgYSBzb3VyY2UgbWFwIGZpbGUuCgogIC1PPDAsMSwyLDMsND4KICAgIENvbnRyb2xzIG9wdGltaXphdGlvbnMgdGhhdCBjYW4gaGVscCByZWR1Y2UgY29kZS1zaXplIGFuZCBpbXByb3ZlCiAgICBwZXJmb3JtYW5jZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUgZm9yIGRlcGxveW1lbnQuCgogICAgLU8wCiAgICAgICBEaXNhYmxlcyBhbGwgb3B0aW1pemF0aW9ucy4gRXF1aXZhbGVudCB0byBjYWxsaW5nIGRhcnQyanMgd2l0aCB0aGVzZQogICAgICAgZXh0cmEgZmxhZ3M6CiAgICAgICAgLS1kaXNhYmxlLWlubGluaW5nCiAgICAgICAgLS1kaXNhYmxlLXR5cGUtaW5mZXJlbmNlCiAgICAgICAgLS1kaXNhYmxlLXJ0aS1vcHRpbWl6YXRpb25zCgoKICAgICAgIFNvbWUgb3B0aW1pemF0aW9ucyBjYW5ub3QgYmUgZGlzc2FibGVkIGF0IHRoaXMgdGltZSwgYXMgd2UgYWRkIHRoZSBvcHRpb24KICAgICAgIHRvIGRpc2FibGUgdGhlbSwgdGhleSB3aWxsIGJlIGFkZGVkIGhlcmUgYXMgd2VsbC4KCiAgICAtTzEKICAgICAgIEVuYWJsZXMgZGVmYXVsdCBvcHRpbWl6YXRpb25zLiBFcXVpdmFsZW50IHRvIGNhbGxpbmcgZGFydDJqcyB3aXRoIG5vCiAgICAgICBleHRyYSBmbGFncy4KCiAgICAtTzIKICAgICAgIEVuYWJsZXMgb3B0aW1pemF0aW9ucyB0aGF0IHJlc3BlY3QgdGhlIGxhbmd1YWdlIHNlbWFudGljcyBhbmQgYXJlIHNhZmUKICAgICAgIGZvciBhbGwgcHJvZ3JhbXMuIEl0IGhvd2V2ZXIgY2hhbmdlcyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHR5cGVzLAogICAgICAgd2hpY2ggd2lsbCBubyBsb25nZXIgYmUgY29uc2lzdGVudCB3aXRoIHRoZSBEYXJ0IFZNIG9yIEREQy4KCiAgICAgICBFcXVpdmFsZW50IHRvIGNhbGxpbmcgZGFydDJqcyB3aXRoIHRoZXNlIGV4dHJhIGZsYWdzOgogICAgICAgIC0tbWluaWZ5CiAgICAgICAgLS1sYXgtcnVudGltZS10eXBlLXRvLXN0cmluZwoKICAgIC1PMwogICAgICAgRW5hYmxlcyBvcHRpbWl6YXRpb25zIHRoYXQgcmVzcGVjdCB0aGUgbGFuZ3VhZ2Ugc2VtYW50aWNzIG9ubHkgb24KICAgICAgIHByb2dyYW1zIHRoYXQgZG9uJ3QgZXZlciB0aHJvdyBhbnkgc3VidHlwZSBvZiBgRXJyb3JgLiAgVGhlc2UKICAgICAgIG9wdGltaXphdGlvbnMgaW1wcm92ZSB0aGUgZ2VuZXJhdGVkIGNvZGUsIGJ1dCB0aGV5IG1heSBjYXVzZSBwcm9ncmFtcyB0bwogICAgICAgYmVoYXZlIHVuZXhwZWN0ZWRseSBpZiB0aGlzIGFzc3VtcHRpb24gaXMgbm90IG1ldC4gIFRvIHVzZSB0aGlzCiAgICAgICBvcHRpb24sIHdlIHJlY29tbWVuZCB0aGF0IHlvdSBwcm9wZXJseSB0ZXN0IHlvdXIgYXBwbGljYXRpb24gZmlyc3QKICAgICAgIHdpdGhvdXQgaXQsIGFuZCBlbnN1cmUgdGhhdCBubyBzdWJ0eXBlIG9mIGBFcnJvcmAgKHN1Y2ggYXMgYFR5cGVFcnJvcmApCiAgICAgICBpcyBldmVyIHRocm93bi4KCiAgICAgICBFcXVpdmFsZW50IHRvIGNhbGxpbmcgZGFydDJqcyB3aXRoIHRoZXNlIGV4dHJhIGZsYWdzOgogICAgICAgICAtTzIKICAgICAgICAgLS1vbWl0LWltcGxpY2l0LWNoZWNrcwoKICAgIC1PNAogICAgICAgRW5hYmxlcyBtb3JlIGFnZ3Jlc3NpdmUgb3B0aW1pemF0aW9ucyB0aGFuIC1PMywgYnV0IHdpdGggdGhlIHNhbWUKICAgICAgIGFzc3VtcHRpb25zLiBUaGVzZSBvcHRpbWl6YXRpb25zIGFyZSBvbiBhIHNlcGFyYXRlIGdyb3VwIGJlY2F1c2UgdGhleQogICAgICAgYXJlIG1vcmUgc3VzY2VwdGlibGUgdG8gdmFyaWF0aW9ucyBpbiBpbnB1dCBkYXRhLiBUbyB1c2UgdGhpcyBvcHRpb24gd2UKICAgICAgIHJlY29tbWVuZCB0byBwYXkgc3BlY2lhbCBhdHRlbnRpb24gdG8gdGVzdCBlZGdlIGNhc2VzIGluIHVzZXIgaW5wdXQuCgogICAgICAgRXF1aXZhbGVudCB0byBjYWxsaW5nIGRhcnQyanMgd2l0aCB0aGVzZSBleHRyYSBmbGFnczoKICAgICAgICAgLU8zCiAgICAgICAgIC0tdHJ1c3QtcHJpbWl0aXZlcwoKICAgIFdoaWxlIHNvbWUgb2YgdGhlIGluZGl2aWR1YWwgb3B0aW1pemF0aW9ucyBhbmQgZmxhZ3MgbWF5IGNoYW5nZSB3aXRoIHRpbWUsCiAgICB3ZSBpbnRlbmQgdG8ga2VlcCB0aGUgLU8qIGZsYWdzIHN0YWJsZS4gTmV3IHNhZmUgb3B0aW1pemF0aW9ucyBtYXkgYmUgYWRkZWQKICAgIG9uIGFueSBsZXZlbCwgYW5kIG9wdGltaXphdGlvbnMgdGhhdCBvbmx5IHdvcmsgb24gc29tZSBwcm9ncmFtcyBtYXkgbW92ZSB1cAogICAgZnJvbSBvbmUgbGV2ZWwgdG8gdGhlIG5leHQgKGZvciBpbnN0YW5jZSwgb25jZSBhbHRlcm5hdGl2ZSBzYWZlCiAgICBvcHRpbWl6YXRpb25zIGFyZSBpbXBsZW1lbnRlZCwgYG9taXQtaW1wbGljaXQtY2hlY2tzYCBtYXkgYmUgcmVtb3ZlZCBvciBtYXkKICAgIG1vdmUgdG8gdGhlIE80IGxldmVsKS4KClRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbCBvcHRpb25zIGFyZSBpbmNsdWRlZCBpbiBzb21lIG9mIHRoZSAtTyBvcHRpbWl6YXRpb24KbGV2ZWxzIGFib3ZlLiBUaGV5IGhlbHAgcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSwgYnV0IHRoZXkgbWF5CmNhdXNlIHByb2dyYW1zIHRvIGJlaGF2ZSB1bmV4cGVjdGVkbHkgaWYgYXNzdW1wdGlvbnMgYXJlIG5vdCBtZXQuIE9ubHkgdHVybiBvbgp0aGVzZSBmbGFncyBpZiB5b3UgaGF2ZSBlbm91Z2ggdGVzdCBjb3ZlcmFnZSB0byBlbnN1cmUgdGhleSBhcmUgc2FmZSB0byB1c2U6CgogIC0tb21pdC1pbXBsaWNpdC1jaGVja3MKICAgIE9taXQgaW1wbGljaXQgcnVudGltZSBjaGVja3MsIHN1Y2ggYXMgcGFyYW1ldGVyIGNoZWNrcyBhbmQgaW1wbGljaXQKICAgIGRvd25jYXN0cy4gVGhlc2UgY2hlY2tzIGFyZSBpbmNsdWRlZCBieSBkZWZhdWx0IGluIERhcnQgMi4wLiBCeQogICAgdXNpbmcgdGhpcyBmbGFnIHRoZSBjaGVja3MgYXJlIHJlbW92ZWQsIGhvd2V2ZXIgdGhlIGNvbXBpbGVyIHdpbGwgYXNzdW1lCiAgICB0aGF0IGFsbCBzdWNoIGNoZWNrcyB3ZXJlIHZhbGlkIGFuZCBtYXkgdXNlIHRoaXMgaW5mb3JtYXRpb24gZm9yCiAgICBvcHRpbWl6YXRpb25zLiBVc2UgdGhpcyBvcHRpb24gb25seSBpZiB5b3UgaGF2ZSBlbm91Z2ggdGVzdGluZyB0byBlbnN1cmUKICAgIHRoYXQgeW91ciBwcm9ncmFtIHdvcmtzIHdpdGggdGhlIGNoZWNrcy4KCiAgLS10cnVzdC1wcmltaXRpdmVzCiAgICBBc3N1bWUgdGhhdCBvcGVyYXRpb25zIG9uIG51bWJlcnMsIHN0cmluZ3MsIGFuZCBsaXN0cyBoYXZlIHZhbGlkIGlucHV0cy4KICAgIFRoaXMgb3B0aW9uIGFsbG93cyB0aGUgY29tcGlsZXIgdG8gZHJvcCBydW50aW1lIGNoZWNrcyBmb3IgdGhvc2Ugb3BlcmF0aW9ucy4KICAgIE5vdGU6IGEgd2VsbC10eXBlZCBwcm9ncmFtIGlzIG5vdCBndWFyYW50ZWVkIHRvIGhhdmUgdmFsaWQgaW5wdXRzLiBGb3IKICAgIGV4YW1wbGUsIGFuIGludCBpbmRleCBhcmd1bWVudCBtYXkgYmUgbnVsbCBvciBvdXQgb2YgcmFuZ2UuCgogIC0tbGF4LXJ1bnRpbWUtdHlwZS10by1zdHJpbmcKICAgIE9taXRzIHJlaWZpZWQgY2xhc3MgdHlwZSBhcmd1bWVudHMgd2hlbiB0aGVzZSBhcmUgb25seSBuZWVkZWQgZm9yIGB0b1N0cmluZ2AKICAgIG9uIGBydW50aW1lVHlwZWAuIFRoaXMgaXMgdXNlZnVsIGlmIGBydW50aW1lVHlwZS50b1N0cmluZygpYCBpcyBvbmx5IHVzZWQKICAgIGZvciBkZWJ1Z2dpbmcuIE5vdGUgdGhhdCBzZW1hbnRpY3Mgb2Ygb3RoZXIgdXNlcyBvZiBgLnJ1bnRpbWVUeXBlYCwgZm9yCiAgICBpbnN0YW5jZSBgYS5ydW50aW1lVHlwZSA9PSBiLnJ1bnRpbWVUeXBlYCwgaXMgbm90IGFmZmVjdGVkIGJ5IHRoaXMgZmxhZy4KClRoZSBmb2xsb3dpbmcgb3B0aW9ucyBhcmUgb25seSB1c2VkIGZvciBjb21waWxlciBkZXZlbG9wbWVudCBhbmQgbWF5CmJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbjoKCiAgLS10aHJvdy1vbi1lcnJvcgogICAgVGhyb3cgYW4gZXhjZXB0aW9uIGlmIGEgY29tcGlsZS10aW1lIGVycm9yIGlzIGRldGVjdGVkLgoKICAtLWxpYnJhcmllcy1zcGVjPTxmaWxlPgogICAgQSAuanNvbiBmaWxlIGNvbnRhaW5pbmcgdGhlIGxpYnJhcmllcyBzcGVjaWZpY2F0aW9uIGZvciBkYXJ0MmpzLgoKICAtLWFsbG93LW1vY2stY29tcGlsYXRpb24KICAgIERvIG5vdCBnZW5lcmF0ZSBhIGNhbGwgdG8gbWFpbiBpZiBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZwogICAgbGlicmFyaWVzIGFyZSB1c2VkOiBkYXJ0OmRvbSwgZGFydDpodG1sIGRhcnQ6aW8uCgogIC0tZGlzYWJsZS1uYXRpdmUtbGl2ZS10eXBlLWFuYWx5c2lzCiAgICBEaXNhYmxlIHRoZSBvcHRpbWl6YXRpb24gdGhhdCByZW1vdmVzIHVudXNlZCBuYXRpdmUgdHlwZXMgZnJvbSBkYXJ0Omh0bWwKICAgIGFuZCByZWxhdGVkIGxpYnJhcmllcy4KCiAgLS1zZXJ2ZXItbW9kZQogICAgQ29tcGlsZSB3aXRoIHNlcnZlciBzdXBwb3J0LiBUaGUgY29tcGlsZXIgd2lsbCB1c2UgYSBsaWJyYXJ5IHNwZWNpZmljYXRpb24KICAgIHRoYXQgZGlzYWJsZXMgZGFydDpodG1sIGJ1dCBzdXBwb3J0cyBkYXJ0OmpzIGluIGNvbmRpdGlvbmFsIGltcG9ydHMuCgogIC0tY2F0ZWdvcmllcz08Y2F0ZWdvcmllcz4KICAgIChkZXByZWNhdGVkKQogICAgVXNlICctLXNlcnZlci1tb2RlJyBpbnN0ZWFkIG9mICctLWNhdGVnb3JpZXM9U2VydmVyJy4gQWxsIG90aGVyIGNhdGVnb3J5CiAgICB2YWx1ZXMgaGF2ZSBubyBlZmZlY3Qgb24gdGhlIGNvbXBpbGVyIGJlaGF2aW9yLgoKICAtLWRlZmVycmVkLW1hcD08ZmlsZT4KICAgIEdlbmVyYXRlcyBhIGpzb24gZmlsZSB3aXRoIGEgbWFwcGluZyBmcm9tIGVhY2ggZGVmZXJyZWQgaW1wb3J0IHRvIGEgbGlzdCBvZgogICAgdGhlIHBhcnQuanMgZmlsZXMgdGhhdCB3aWxsIGJlIGxvYWRlZC4KCiAgLS1kdW1wLWluZm9bPTxmb3JtYXQ+XQogICAgR2VuZXJhdGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBnZW5lcmF0ZWQgY29kZS4gJ2Zvcm1hdCcgY2FuIGJlIGVpdGhlcgogICAgJ2pzb24nIG9yICdiaW5hcnknLgogICAgWW91IGNhbiBpbnNwZWN0IHRoZSBnZW5lcmF0ZWQgZGF0YSB1c2luZyB0b29scyBmcm9tICdwYWNrYWdlOmRhcnQyanNfaW5mbycuCgogIC0tZ2VuZXJhdGUtY29kZS13aXRoLWNvbXBpbGUtdGltZS1lcnJvcnMKICAgIEdlbmVyYXRlcyBvdXRwdXQgZXZlbiBpZiB0aGUgcHJvZ3JhbSBjb250YWlucyBjb21waWxlLXRpbWUgZXJyb3JzLiBVc2UgdGhlCiAgICBleGl0IGNvZGUgdG8gZGV0ZXJtaW5lIGlmIGNvbXBpbGF0aW9uIGZhaWxlZC4KCiAgLS1uby1mcmVxdWVuY3ktYmFzZWQtbWluaWZpY2F0aW9uCiAgICBFeHBlcmltZW50YWwuICBEaXNhYmxlZCB0aGUgbmV3IGZyZXF1ZW5jeSBiYXNlZCBtaW5pZnlpbmcgbmFtZXIgYW5kIHVzZSB0aGUKICAgIG9sZCBuYW1lciBpbnN0ZWFkLgonJycKICAgICAgLnRyaW0oKSk7Cn0KCnZvaWQgaGVscEFuZEV4aXQoYm9vbCB3YW50SGVscCwgYm9vbCB3YW50VmVyc2lvbiwgYm9vbCB2ZXJib3NlKSB7CiAgaWYgKHdhbnRWZXJzaW9uKSB7CiAgICB2YXIgdmVyc2lvbiA9IChCVUlMRF9JRCA9PSBudWxsKSA/ICc8bm9uLVNESyBidWlsZD4nIDogQlVJTERfSUQ7CiAgICBwcmludCgnRGFydC10by1KYXZhU2NyaXB0IGNvbXBpbGVyIChkYXJ0MmpzKSB2ZXJzaW9uOiAkdmVyc2lvbicpOwogIH0KICBpZiAod2FudEhlbHApIHsKICAgIGlmICh2ZXJib3NlKSB7CiAgICAgIHZlcmJvc2VIZWxwKCk7CiAgICB9IGVsc2UgewogICAgICBoZWxwKCk7CiAgICB9CiAgfQogIGV4aXRGdW5jKDApOwp9Cgp2b2lkIGhlbHBBbmRGYWlsKFN0cmluZyBtZXNzYWdlKSB7CiAgaGVscCgpOwogIHByaW50KCcnKTsKICBmYWlsKG1lc3NhZ2UpOwp9Cgp2b2lkIG1haW4oTGlzdDxTdHJpbmc+IGFyZ3VtZW50cykgewogIC8vIFNpbmNlIHRoZSBzZGsvYmluL2RhcnQyanMgc2NyaXB0IGFkZHMgaXRzIG93biBhcmd1bWVudHMgaW4gZnJvbnQgb2YKICAvLyB1c2VyLXN1cHBsaWVkIGFyZ3VtZW50cyB3ZSBzZWFyY2ggZm9yICctLWJhdGNoJyBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LgogIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHMubGFzdCA9PSAiLS1iYXRjaCIpIHsKICAgIGJhdGNoTWFpbihhcmd1bWVudHMuc3VibGlzdCgwLCBhcmd1bWVudHMubGVuZ3RoIC0gMSkpOwogICAgcmV0dXJuOwogIH0KICBpbnRlcm5hbE1haW4oYXJndW1lbnRzKTsKfQoKdHlwZWRlZiB2b2lkIEV4aXRGdW5jKGludCBleGl0Q29kZSk7CnR5cGVkZWYgRnV0dXJlPGFwaS5Db21waWxhdGlvblJlc3VsdD4gQ29tcGlsZUZ1bmMoCiAgICBDb21waWxlck9wdGlvbnMgY29tcGlsZXJPcHRpb25zLAogICAgYXBpLkNvbXBpbGVySW5wdXQgY29tcGlsZXJJbnB1dCwKICAgIGFwaS5Db21waWxlckRpYWdub3N0aWNzIGNvbXBpbGVyRGlhZ25vc3RpY3MsCiAgICBhcGkuQ29tcGlsZXJPdXRwdXQgY29tcGlsZXJPdXRwdXQpOwoKRXhpdEZ1bmMgZXhpdEZ1bmMgPSBleGl0OwpDb21waWxlRnVuYyBjb21waWxlRnVuYyA9IGFwaS5jb21waWxlOwoKLy8vIElmIGB0cnVlYCBhICcuZGVwcycgZmlsZSB3aWxsIGJlIGdlbmVyYXRlZCBhZnRlciBjb21waWxhdGlvbi4KLy8vCi8vLyBTZXQgdGhpcyB0byBgZmFsc2VgIGluIGVuZC10by1lbmQgdGVzdHMgdG8gYXZvaWQgZ2VuZXJhdGluZyAnLmRlcHMnIGZpbGVzLgpib29sIGVuYWJsZVdyaXRlU3RyaW5nID0gdHJ1ZTsKCkZ1dHVyZTxhcGkuQ29tcGlsYXRpb25SZXN1bHQ+IGludGVybmFsTWFpbihMaXN0PFN0cmluZz4gYXJndW1lbnRzLAogICAge2ZlLkluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZSBrZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGV9KSB7CiAgRnV0dXJlPGFwaS5Db21waWxhdGlvblJlc3VsdD4gb25FcnJvcihleGNlcHRpb24sIHRyYWNlKSB7CiAgICAvLyBJZiB3ZSBhcmUgYWxyZWFkeSB0cnlpbmcgdG8gZXhpdCwganVzdCBjb250aW51ZSBleGl0aW5nLgogICAgaWYgKGV4Y2VwdGlvbiA9PSBfRVhJVF9TSUdOQUwpIHRocm93IGV4Y2VwdGlvbjsKCiAgICB0cnkgewogICAgICBwcmludCgnVGhlIGNvbXBpbGVyIGNyYXNoZWQ6ICRleGNlcHRpb24nKTsKICAgIH0gY2F0Y2ggKGlnbm9yZWQpIHsKICAgICAgcHJpbnQoJ1RoZSBjb21waWxlciBjcmFzaGVkOiBlcnJvciB3aGlsZSBwcmludGluZyBleGNlcHRpb24nKTsKICAgIH0KCiAgICB0cnkgewogICAgICBpZiAodHJhY2UgIT0gbnVsbCkgewogICAgICAgIHByaW50KHRyYWNlKTsKICAgICAgfQogICAgfSBmaW5hbGx5IHsKICAgICAgZXhpdEZ1bmMoMjUzKTsgLy8gMjUzIGlzIHJlY29nbml6ZWQgYXMgYSBjcmFzaCBieSBvdXIgdGVzdCBzY3JpcHRzLgogICAgfQogICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IoZXhjZXB0aW9uLCB0cmFjZSk7CiAgfQoKICB0cnkgewogICAgcmV0dXJuIGNvbXBpbGVyTWFpbihhcmd1bWVudHMsCiAgICAgICAgICAgIGtlcm5lbEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZToga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlKQogICAgICAgIC5jYXRjaEVycm9yKG9uRXJyb3IpOwogIH0gY2F0Y2ggKGV4Y2VwdGlvbiwgdHJhY2UpIHsKICAgIHJldHVybiBvbkVycm9yKGV4Y2VwdGlvbiwgdHJhY2UpOwogIH0KfQoKY2xhc3MgX0V4aXRTaWduYWwgewogIGNvbnN0IF9FeGl0U2lnbmFsKCk7Cn0KCmNvbnN0IF9FWElUX1NJR05BTCA9IGNvbnN0IF9FeGl0U2lnbmFsKCk7Cgp2b2lkIGJhdGNoTWFpbihMaXN0PFN0cmluZz4gYmF0Y2hBcmd1bWVudHMpIHsKICBpbnQgZXhpdENvZGU7CiAgZXhpdEZ1bmMgPSAoZXJyb3JDb2RlKSB7CiAgICAvLyBTaW5jZSB3ZSBvbmx5IHRocm93IGFub3RoZXIgcGFydCBvZiB0aGUgY29tcGlsZXIgbWlnaHQgaW50ZXJjZXB0IG91cgogICAgLy8gZXhjZXB0aW9uIGFuZCB0cnkgdG8gZXhpdCB3aXRoIGEgZGlmZmVyZW50IGNvZGUuCiAgICBpZiAoZXhpdENvZGUgPT0gMCkgewogICAgICBleGl0Q29kZSA9IGVycm9yQ29kZTsKICAgIH0KICAgIHRocm93IF9FWElUX1NJR05BTDsKICB9OwoKICB2YXIgc3RyZWFtID0gc3RkaW4udHJhbnNmb3JtKHV0ZjguZGVjb2RlcikudHJhbnNmb3JtKG5ldyBMaW5lU3BsaXR0ZXIoKSk7CiAgdmFyIHN1YnNjcmlwdGlvbjsKICBmZS5Jbml0aWFsaXplZENvbXBpbGVyU3RhdGUga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOwogIHN1YnNjcmlwdGlvbiA9IHN0cmVhbS5saXN0ZW4oKGxpbmUpIHsKICAgIG5ldyBGdXR1cmUuc3luYygoKSB7CiAgICAgIHN1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAgICBleGl0Q29kZSA9IDA7CiAgICAgIGlmIChsaW5lID09IG51bGwpIGV4aXQoMCk7CiAgICAgIExpc3Q8U3RyaW5nPiBhcmdzID0gPFN0cmluZz5bXTsKICAgICAgYXJncy5hZGRBbGwoYmF0Y2hBcmd1bWVudHMpOwogICAgICBhcmdzLmFkZEFsbChzcGxpdExpbmUobGluZSwgd2luZG93czogUGxhdGZvcm0uaXNXaW5kb3dzKSk7CiAgICAgIHJldHVybiBpbnRlcm5hbE1haW4oYXJncywKICAgICAgICAgIGtlcm5lbEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZToga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlKTsKICAgIH0pLmNhdGNoRXJyb3IoKGV4Y2VwdGlvbiwgdHJhY2UpIHsKICAgICAgaWYgKCFpZGVudGljYWwoZXhjZXB0aW9uLCBfRVhJVF9TSUdOQUwpKSB7CiAgICAgICAgZXhpdENvZGUgPSAyNTM7CiAgICAgIH0KICAgIH0pLnRoZW4oKGFwaS5Db21waWxhdGlvblJlc3VsdCByZXN1bHQpIHsKICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CiAgICAgICAga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlID0gcmVzdWx0Lmtlcm5lbEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZTsKICAgICAgfQogICAgfSkud2hlbkNvbXBsZXRlKCgpIHsKICAgICAgLy8gVGhlIHRlc3RpbmcgZnJhbWV3b3JrIHdhaXRzIGZvciBhIHN0YXR1cyBsaW5lIG9uIHN0ZG91dCBhbmQKICAgICAgLy8gc3RkZXJyIGJlZm9yZSBtb3ZpbmcgdG8gdGhlIG5leHQgdGVzdC4KICAgICAgaWYgKGV4aXRDb2RlID09IDApIHsKICAgICAgICBwcmludCgiPj4+IFRFU1QgT0siKTsKICAgICAgfSBlbHNlIGlmIChleGl0Q29kZSA9PSAyNTMpIHsKICAgICAgICBwcmludCgiPj4+IFRFU1QgQ1JBU0giKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwcmludCgiPj4+IFRFU1QgRkFJTCIpOwogICAgICB9CiAgICAgIHN0ZGVyci53cml0ZWxuKCI+Pj4gRU9GIFNUREVSUiIpOwogICAgICBzdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICB9KTsKICB9KTsKfQoKZW51bSBSZWFkU3RyYXRlZ3kgeyBmcm9tRGFydCwgZnJv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dyBDb21waWxlck9wdGlvbnM7CgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvZGlhZ25vc3RpY19tZXNzYWdlLmRhcnQnIHNob3cgRGlhZ25vc3RpY01lc3NhZ2VIYW5kbGVyOwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2V4cGVyaW1lbnRhbF9mbGFncy5kYXJ0JyBzaG93IEV4cGVyaW1lbnRhbEZsYWc7CgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCcgc2hvdyBGaWxlU3lzdGVtOwoKaW1wb3J0ICcuLi9iYXNlL3Byb2Nlc3NlZF9vcHRpb25zLmRhcnQnIHNob3cgUHJvY2Vzc2VkT3B0aW9uczsKCmltcG9ydCAnLi4vYmFzZS9saWJyYXJpZXNfc3BlY2lmaWNhdGlvbi5kYXJ0JyBzaG93IExpYnJhcmllc1NwZWNpZmljYXRpb247CgppbXBvcnQgJy4uL2Zhc3RhL2NvbXBpbGVyX2NvbnRleHQuZGFydCcgc2hvdyBDb21waWxlckNvbnRleHQ7CgppbXBvcnQgJy4uL2Zhc3RhL2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgbWVzc2FnZU1pc3NpbmdNYWluOwoKaW1wb3J0ICcuLi9mYXN0YS9zZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICcuLi9rZXJuZWxfZ2VuZXJhdG9yX2ltcGwuZGFydCcgc2hvdyBnZW5lcmF0ZUtlcm5lbEludGVybmFsOwoKaW1wb3J0ICcuLi9mYXN0YS9zY2FubmVyLmRhcnQnIHNob3cgRXJyb3JUb2tlbiwgU3RyaW5nVG9rZW4sIFRva2VuOwoKaW1wb3J0ICcuLi9mYXN0YS9rZXJuZWwvcmVkaXJlY3RpbmdfZmFjdG9yeV9ib2R5LmRhcnQnIGFzIHJlZGlyZWN0aW5nOwoKaW1wb3J0ICdjb21waWxlcl9zdGF0ZS5kYXJ0JyBzaG93IEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZTsKCmltcG9ydCAndXRpbC5kYXJ0JyBzaG93IGVxdWFsTGlzdHMsIGVxdWFsTWFwczsKCmV4cG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9jb21waWxlcl9vcHRpb25zLmRhcnQnCiAgICBzaG93IENvbXBpbGVyT3B0aW9ucywgcGFyc2VFeHBlcmltZW50YWxGbGFnczsKCmV4cG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9kaWFnbm9zdGljX21lc3NhZ2UuZGFydCcKICAgIHNob3cKICAgICAgICBEaWFnbm9zdGljTWVzc2FnZSwKICAgICAgICBnZXRNZXNzYWdlQ2hhck9mZnNldCwKICAgICAgICBnZXRNZXNzYWdlSGVhZGVyVGV4dCwKICAgICAgICBnZXRNZXNzYWdlTGVuZ3RoLAogICAgICAgIGdldE1lc3NhZ2VSZWxhdGVkSW5mb3JtYXRpb24sCiAgICAgICAgZ2V0TWVzc2FnZVVyaTsKCmV4cG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9leHBlcmltZW50YWxfZmxhZ3MuZGFydCcKICAgIHNob3cgZGVmYXVsdEV4cGVyaW1lbnRhbEZsYWdzLCBFeHBlcmltZW50YWxGbGFnOwoKZXhwb3J0ICcuLi9hcGlfcHJvdG90eXBlL2ZpbGVfc3lzdGVtLmRhcnQnCiAgICBzaG93IEZpbGVTeXN0ZW0sIEZpbGVTeXN0ZW1FbnRpdHksIEZpbGVTeXN0ZW1FeGNlcHRpb247CgpleHBvcnQgJy4uL2FwaV9wcm90b3R5cGUva2VybmVsX2dlbmVyYXRvci5kYXJ0JyBzaG93IGtlcm5lbEZvclByb2dyYW07CgpleHBvcnQgJy4uL2FwaV9wcm90b3R5cGUvc3RhbmRhcmRfZmlsZV9zeXN0ZW0uZGFydCcgc2hvdyBEYXRhRmlsZVN5c3RlbUVudGl0eTsKCmV4cG9ydCAnLi4vY29tcHV0ZV9wbGF0Zm9ybV9iaW5hcmllc19sb2NhdGlvbi5kYXJ0JwogICAgc2hvdyBjb21wdXRlUGxhdGZvcm1CaW5hcmllc0xvY2F0aW9uOwoKZXhwb3J0ICcuLi9mYXN0YS9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IExvY2F0ZWRNZXNzYWdlOwoKZXhwb3J0ICcuLi9mYXN0YS9vcGVyYXRvci5kYXJ0JyBzaG93IG9wZXJhdG9yRnJvbVN0cmluZzsKCmV4cG9ydCAnLi4vZmFzdGEvcGFyc2VyL2FzeW5jX21vZGlmaWVyLmRhcnQnIHNob3cgQXN5bmNNb2RpZmllcjsKCmV4cG9ydCAnLi4vZmFzdGEvc2Nhbm5lci5kYXJ0JyBzaG93IGlzVXNlckRlZmluYWJsZU9wZXJhdG9yLCBpc01pbnVzT3BlcmF0b3I7CgpleHBvcnQgJy4uL2Zhc3RhL3NjYW5uZXIvY2hhcmFjdGVycy5kYXJ0JwogICAgc2hvdwogICAgICAgICQkLAogICAgICAgICQwLAogICAgICAgICQ5LAogICAgICAgICRBLAogICAgICAgICRCQUNLU0xBU0gsCiAgICAgICAgJENSLAogICAgICAgICRERUwsCiAgICAgICAgJERRLAogICAgICAgICRIQVNILAogICAgICAgICRMRiwKICAgICAgICAkTFMsCiAgICAgICAgJFBTLAogICAgICAgICRUQUIsCiAgICAgICAgJFosCiAgICAgICAgJF8sCiAgICAgICAgJGEsCiAgICAgICAgJGcsCiAgICAgICAgJHMsCiAgICAgICAgJHo7CgpleHBvcnQgJy4uL2Zhc3RhL3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgpleHBvcnQgJy4uL2Zhc3RhL3V0aWwvbGluay5kYXJ0JyBzaG93IExpbmssIExpbmtCdWlsZGVyOwoKZXhwb3J0ICcuLi9mYXN0YS91dGlsL2xpbmtfaW1wbGVtZW50YXRpb24uZGFydCcgc2hvdyBMaW5rRW50cnk7CgpleHBvcnQgJy4uL2Zhc3RhL3V0aWwvcmVsYXRpdml6ZS5kYXJ0JyBzaG93IHJlbGF0aXZpemVVcmk7CgpleHBvcnQgJ2NvbXBpbGVyX3N0YXRlLmRhcnQnIHNob3cgSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOwoKdm9pZCBjbGVhclN0cmluZ1Rva2VuQ2Fub25pY2FsaXplcigpIHsKICAvLyBUT0RPKGFoZSk6IFdlIHNob3VsZCBiZSBhYmxlIHRvIHJlbW92ZSB0aGlzLiBGYXN0YSBzaG91bGQgdGFrZSBjYXJlIG9mCiAgLy8gY2xlYXJpbmcgdGhlIGNhY2hlIHdoZW4uCiAgU3RyaW5nVG9rZW4uY2Fub25pY2FsaXplci5jbGVhcigpOwp9CgpJbml0aWFsaXplZENvbXBpbGVyU3RhdGUgaW5pdGlhbGl6ZUNvbXBpbGVyKAogICAgSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlIG9sZFN0YXRlLAogICAgVGFyZ2V0IHRhcmdldCwKICAgIFVyaSBsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpLAogICAgTGlzdDxVcmk+IGxpbmtlZERlcGVuZGVuY2llcywKICAgIFVyaSBwYWNrYWdlc0ZpbGVVcmksCiAgICB7TGlzdDxVcmk+IGRlcGVuZGVuY2llcywKICAgIE1hcDxFeHBlcmltZW50YWxGbGFnLCBib29sPiBleHBlcmltZW50YWxGbGFncywKICAgIGJvb2wgdmVyaWZ5OiBmYWxzZX0pIHsKICBsaW5rZWREZXBlbmRlbmNpZXMuc29ydCgoYSwgYikgPT4gYS50b1N0cmluZygpLmNvbXBhcmVUbyhiLnRvU3RyaW5nKCkpKTsKCiAgaWYgKG9sZFN0YXRlICE9IG51bGwgJiYKICAgICAgb2xkU3RhdGUub3B0aW9ucy5wYWNrYWdlc0ZpbGVVcmkgPT0gcGFja2FnZXNGaWxlVXJpICYmCiAgICAgIG9sZFN0YXRlLm9wdGlvbnMubGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSA9PSBsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpICYmCiAgICAgIGVxdWFsTGlzdHMob2xkU3RhdGUub3B0aW9ucy5saW5rZWREZXBlbmRlbmNpZXMsIGxpbmtlZERlcGVuZGVuY2llcykgJiYKICAgICAgZXF1YWxNYXBzKG9sZFN0YXRlLm9wdGlvbnMuZXhwZXJpbWVudGFsRmxhZ3MsIGV4cGVyaW1lbnRhbEZsYWdzKSkgewogICAgcmV0dXJuIG9sZFN0YXRlOwogIH0KCiAgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMgPSBuZXcgQ29tcGlsZXJPcHRpb25zKCkKICAgIC4udGFyZ2V0ID0gdGFyZ2V0CiAgICAuLmxlZ2FjeU1vZGUgPSB0YXJnZXQubGVnYWN5TW9kZQogICAgLi5saW5rZWREZXBlbmRlbmNpZXMgPSBsaW5rZWREZXBlbmRlbmNpZXMKICAgIC4ubGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSA9IGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmkKICAgIC4ucGFja2FnZXNGaWxlVXJpID0gcGFja2FnZXNGaWxlVXJpCiAgICAuLmV4cGVyaW1lbnRhbEZsYWdzID0gZXhwZXJpbWVudGFsRmxhZ3MKICAgIC4udmVyaWZ5ID0gdmVyaWZ5OwoKICBQcm9jZXNzZWRPcHRpb25zIHByb2Nlc3NlZE9wdHMgPSBuZXcgUHJvY2Vzc2VkT3B0aW9ucyhvcHRpb25zOiBvcHRpb25zKTsKCiAgcmV0dXJuIG5ldyBJbml0aWFsaXplZENvbXBpbGVyU3RhdGUob3B0aW9ucywgcHJvY2Vzc2VkT3B0cyk7Cn0KCkZ1dHVyZTxDb21wb25lbnQ+IGNvbXBpbGUoCiAgICBJbml0aWFsaXplZENvbXBpbGVyU3RhdGUgc3RhdGUsCiAgICBib29sIHZlcmJvc2UsCiAgICBGaWxlU3lzdGVtIGZpbGVTeXN0ZW0sCiAgICBEaWFnbm9zdGljTWVzc2FnZUhhbmRsZXIgb25EaWFnbm9zdGljLAogICAgVXJpIGlucHV0KSBhc3luYyB7CiAgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMgPSBzdGF0ZS5vcHRpb25zOwogIG9wdGlvbnMKICAgIC4ub25EaWFnbm9zdGljID0gb25EaWFnbm9zdGljCiAgICAuLnZlcmJvc2UgPSB2ZXJib3NlCiAgICAuLmZpbGVTeXN0ZW0gPSBmaWxlU3lzdGVtOwoKICBQcm9jZXNzZWRPcHRpb25zIHByb2Nlc3NlZE9wdHMgPSBzdGF0ZS5wcm9jZXNzZWRPcHRzOwogIHByb2Nlc3NlZE9wdHMuaW5wdXRzLmNsZWFyKCk7CiAgcHJvY2Vzc2VkT3B0cy5pbnB1dHMuYWRkKGlucHV0KTsKICBwcm9jZXNzZWRPcHRzLmNsZWFyRmlsZVN5c3RlbUNhY2hlKCk7CgogIHZhciBjb21waWxlclJlc3VsdCA9IGF3YWl0IENvbXBpbGVyQ29udGV4dC5ydW5XaXRoT3B0aW9ucyhwcm9jZXNzZWRPcHRzLAogICAgICAoQ29tcGlsZXJDb250ZXh0IGNvbnRleHQpIGFzeW5jIHsKICAgIHZhciBjb21waWxlclJlc3VsdCA9IGF3YWl0IGdlbmVyYXRlS2VybmVsSW50ZXJuYWwoKTsKICAgIENvbXBvbmVudCBjb21wb25lbnQgPSBjb21waWxlclJlc3VsdD8uY29tcG9uZW50OwogICAgaWYgKGNvbXBvbmVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmIChjb21wb25lbnQubWFpbk1ldGhvZCA9PSBudWxsKSB7CiAgICAgIGNvbnRleHQub3B0aW9ucy5yZXBvcnQoCiAgICAgICAgICBtZXNzYWdlTWlzc2luZ01haW4ud2l0aExvY2F0aW9uKGlucHV0LCAtMSwgMCksIFNldmVyaXR5LmVycm9yKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gY29tcGlsZXJSZXN1bHQ7CiAgfSk7CgogIC8vIFJlbW92ZSB0aGVzZSBwYXJhbWV0ZXJzIGZyb20gW29wdGlvbnNdIC0gdGhleSBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBhbmQKICAvLyByZXRhaW4gc3RhdGUgZnJvbSB0aGUgcHJldmlvdXMgY29tcGlsZS4gKGh0dHA6Ly9kYXJ0YnVnLmNvbS8zMzcwOCkKICBvcHRpb25zLm9uRGlhZ25vc3RpYyA9IG51bGw7CiAgb3B0aW9ucy5maWxlU3lzdGVtID0gbnVsbDsKICByZXR1cm4gY29tcGlsZXJSZXN1bHQ/LmNvbXBvbmVudDsKfQoKT2JqZWN0IHRva2VuVG9TdHJpbmcoT2JqZWN0IHZhbHVlKSB7CiAgLy8gVE9ETyhhaGUpOiBUaGlzIG1ldGhvZCBpcyBtb3N0IGxpa2VseSB1bm5lY2Vzc2FyeS4gRGFydDJqcyBkb2Vzbid0IHNlZQogIC8vIHRva2VucyBhbnltb3JlLgogIGlmICh2YWx1ZSBpcyBFcnJvclRva2VuKSB7CiAgICAvLyBTaG91bGRuJ3QgaGFwcGVuLgogICAgcmV0dXJuIHZhbHVlLmFzc2VydGlvbk1lc3NhZ2UubWVzc2FnZTsKICB9IGVsc2UgaWYgKHZhbHVlIGlzIFRva2VuKSB7CiAgICByZXR1cm4gdmFsdWUubGV4ZW1lOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgovLy8gUmV0cmlldmUgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcmllcyB0aGF0IGFyZSBzdXBwb3J0ZWQgYnkgW3RhcmdldF0gYWNjb3JkaW5nCi8vLyB0byB0aGUgbGlicmFyaWVzIHNwZWNpZmljYXRpb24gW2pzb25dIGZpbGUuCi8vLwovLy8gRGFydDJqcyB1c2VzIHRoZXNlIG5hbWVzIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgbGlicmFyeSBlbnZpcm9ubWVudAovLy8gY29uc3RhbnRzLCBzdWNoIGFzIGBjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgiZGFydC5saWJyYXJ5LmlvIilgLgovLyBUT0RPKHNpZ211bmQpOiByZWZhY3RvciBkYXJ0MmpzIHNvIHRoYXQgd2UgY2FuIHJldHJpZXZlIHRoaXMgZGF0YSBsYXRlciBpbgovLyB0aGUgY29tcGlsYXRpb24gcGlwZWxpbmUuIEF0IHRoYXQgcG9pbnQgd2UgY2FuIGdldCBpdCBmcm9tIHRoZSBDRkUKLy8gcmVzdWx0cyBkaXJlY3RseSBhbmQgY29tcGxldGVseSBoaWRlIHRoZSBsaWJyYXJpZXMgc3BlY2lmaWNhdGlvbiBmaWxlIGZyb20KLy8gZGFydDJqcy4KLy8gVE9ETyhzaWdtdW5kKTogZGVsZXRlIGFmdGVyIGFsbCBjb25zdGFudCBldmFsdWF0aW9uIGlzIGRvbmUgaW4gdGhlIENGRSwgYXMKLy8gdGhpcyBkYXRhIHdpbGwgbm8gbG9uZ2VyIGJlIG5lZWRlZCBvbiB0aGUgZGFydDJqcyBzaWRlLgpJdGVyYWJsZTxTdHJpbmc+IGdldFN1cHBvcnRlZExpYnJhcnlOYW1lcygKICAgIFVyaSBsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpLCBTdHJpbmcganNvbiwgU3RyaW5nIHRhcmdldCkgewogIHJldHVybiBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uLnBhcnNlKGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmksIGpzb24pCiAgICAgIC5zcGVjaWZpY2F0aW9uRm9yKHRhcmdldCkKICAgICAgLmFsbExpYnJhcmllcwogICAgICAud2hlcmUoKGwpID0+IGwuaXNTdXBwb3J0ZWQpCiAgICAgIC5tYXAoKGwpID0+IGwubmFtZSk7Cn0KCi8vLyBEZXN1Z2FyIEFQSSB0byBkZXRlcm1pbmUgd2hldGhlciBbbWVtYmVyXSBpcyBhIHJlZGlyZWN0aW5nIGZhY3RvcnkKLy8vIGNvbnN0cnVjdG9yLgovLyBUT0RPKHNpZ211bmQpOiBEZWxldGUgdGhpcyBBUEkgb25jZSBgbWVtYmVyLmlzUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JgCi8vIGlzIGltcGxlbWVudGVkIGNvcnJlY3RseSBmb3IgcGF0Y2ggZmlsZXMgKElzc3VlICMzMzQ5NSkuCmJvb2wgaXNSZWRpcmVjdGluZ0ZhY3RvcnkoaXIuUHJvY2VkdXJlIG1lbWJlcikgewogIGlmIChtZW1iZXIua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLkZhY3RvcnkpIHsKICAgIHZhciBib2R5ID0gbWVtYmVyLmZ1bmN0aW9uLmJvZHk7CiAgICBpZiAoYm9keSBpcyByZWRpcmVjdGluZy5SZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KSByZXR1cm4gdHJ1ZTsKICAgIGlmIChib2R5IGlzIGlyLkV4cHJlc3Npb25TdGF0ZW1lbnQpIHsKICAgICAgaXIuRXhwcmVzc2lvbiBleHByZXNzaW9uID0gYm9keS5leHByZXNzaW9uOwogICAgICBpZiAoZXhwcmVzc2lvbiBpcyBpci5MZXQpIHsKICAgICAgICBpZiAoZXhwcmVzc2lvbi52YXJpYWJsZS5uYW1lID09IHJlZGlyZWN0aW5nLmxldE5hbWUpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4gZmFsc2U7Cn0KgOsATk48ASEBNAEoATkBRgFRAUkBPAE/AUsBPgE8AS8BRAFEAUcBPAEvATAyATIJGx4eGiYXATI1ASs8AUcBTwE0KgE4ATkBQQFOASoJDAwMDBQNDg0PDQ0NDgwMDAwMDAEvATkBQAE7ATwBJ0weJQIBLScTIyIZHTMbSwEaPVFNShUEATIWJS48KCwXAUsBPwIBGyQSGysXKwoiGB8BOCAjKAFLKDk1KCgeShMGGwYBTEgfHSQCASVMFR0ZKx8ZCxIEAgFQMARLSE5GTgxOOytBRyAUIxsCAUcRUDwxMSVBKjIiPxcKCAYEEAIBL3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0K3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvY29tcGlsZXJfbmV3LmRhcnSa4i8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTmV3IENvbXBpbGVyIEFQSS4gVGhpcyBBUEkgaXMgdW5kZXIgY29uc3RydWN0aW9uLCB1c2Ugb25seSBpbnRlcm5hbGx5IG9yCi8vLyBpbiB1bml0dGVzdHMuCgpsaWJyYXJ5IGNvbXBpbGVyX25ldzsKCmltcG9ydCAnZGFydDphc3luYyc7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBhcyBmZTsKCmltcG9ydCAnY29tcGlsZXIuZGFydCcgc2hvdyBEaWFnbm9zdGljOwppbXBvcnQgJ3NyYy9hcGlpbXBsLmRhcnQnOwppbXBvcnQgJ3NyYy9vcHRpb25zLmRhcnQnIHNob3cgQ29tcGlsZXJPcHRpb25zOwoKZXhwb3J0ICdjb21waWxlci5kYXJ0JyBzaG93IERpYWdub3N0aWM7CgovLyBVbmxlc3MgZXhwbGljaXRseSBhbGxvd2VkLCBwYXNzaW5nIGBudWxsYCBmb3IgYW55IGFyZ3VtZW50IHRvIHRoZQovLyBtZXRob2RzIG9mIGxpYnJhcnkgd2lsbCByZXN1bHQgaW4gYW4gRXJyb3IgYmVpbmcgdGhyb3duLgoKLy8vIElucHV0IGtpbmRzIHVzZWQgYnkgW0NvbXBpbGVySW5wdXQucmVhZEZyb21VcmldLgplbnVtIElucHV0S2luZCB7CiAgLy8vIERhdGEgaXMgcmVhZCBhcyBVVEY4IGVpdGhlciBhcyBhIFtTdHJpbmddIG9yIGEgemVyby10ZXJtaW5hdGVkCiAgLy8vIGBMaXN0PGludD5gLgogIFVURjgsCgogIC8vLyBEYXRhIGlzIHJlYWQgYXMgYnl0ZXMgaW4gYSBgTGlzdDxpbnQ+YC4KICBiaW5hcnksCn0KCi8vLyBJbnRlcmZhY2UgZm9yIGRhdGEgcmVhZCB0aHJvdWdoIFtDb21waWxlcklucHV0LnJlYWRGcm9tVXJpXS4KYWJzdHJhY3QgY2xhc3MgSW5wdXQ8VD4gewogIC8vLyBUaGUgVVJJIGZyb20gd2hpY2ggZGF0YSB3YXMgcmVhZC4KICBVcmkgZ2V0IHVyaTsKCiAgLy8vIFRoZSBmb3JtYXQgb2YgdGhlIHJlYWQgW2RhdGFdLgogIElucHV0S2luZCBnZXQgaW5wdXRLaW5kOwoKICAvLy8gVGhlIHJhdyBkYXRhIHJlYWQgZnJvbSBbdXJpXS4KICBUIGdldCBkYXRhOwp9CgovLy8gSW50ZXJmYWNlIGZvciBwcm92aWRpbmcgdGhlIGNvbXBpbGVyIHdpdGggaW5wdXQuIFRoYXQgaXMsIERhcnQgc291cmNlIGZpbGVzLAovLy8gcGFja2FnZSBjb25maWcgZmlsZXMsIGV0Yy4KYWJzdHJhY3QgY2xhc3MgQ29tcGlsZXJJbnB1dCB7CiAgLy8vIFJldHVybnMgYSBmdXR1cmUgdGhhdCBjb21wbGV0ZXMgdG8gdGhlIHNvdXJjZSBjb3JyZXNwb25kaW5nIHRvIFt1cmldLgogIC8vLyBJZiBhbiBleGNlcHRpb24gb2NjdXJzLCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIHRoaXMgZXhjZXB0aW9uLgogIC8vLwogIC8vLyBJZiBbaW5wdXRLaW5kXSBpcyBgSW5wdXRLaW5kLlVURjhgIHRoZSBzb3VyY2UgY2FuIGJlIHJlcHJlc2VudGVkIGVpdGhlciBhcwogIC8vLyBhIHplcm8tdGVybWluYXRlZCBgTGlzdDxpbnQ+YCBvZiBVVEYtOCBieXRlcyBvciBhcyBhIFtTdHJpbmddLiBJZgogIC8vLyBbaW5wdXRLaW5kXSBpcyBgSW5wdXRLaW5kLmJpbmFyeWAgdGhlIHNvdXJjZSBpcyBhIHJlYWQgYSBgTGlzdDxpbnQ+YC4KICAvLy8KICAvLy8gVGhlIGZvbGxvd2luZyB0ZXh0IGlzIG5vbi1ub3JtYXRpdmU6CiAgLy8vCiAgLy8vIEl0IGlzIHJlY29tbWVuZGVkIHRvIHJldHVybiBhIFVURi04IGVuY29kZWQgbGlzdCBvZiBieXRlcyBiZWNhdXNlIHRoZQogIC8vLyBzY2FubmVyIGlzIG1vcmUgZWZmaWNpZW50IGluIHRoaXMgY2FzZS4gSW4gZWl0aGVyIGNhc2UsIHRoZSBkYXRhIHN0cnVjdHVyZQogIC8vLyBpcyBleHBlY3RlZCB0byBob2xkIGEgemVybyBlbGVtZW50IGF0IHRoZSBsYXN0IHBvc2l0aW9uLiBJZiB0aGlzIGlzIG5vdAogIC8vLyB0aGUgY2FzZSwgdGhlIGVudGlyZSBkYXRhIHN0cnVjdHVyZSBpcyBjb3BpZWQgYmVmb3JlIHNjYW5uaW5nLgogIEZ1dHVyZTxJbnB1dD4gcmVhZEZyb21VcmkoVXJpIHVyaSwge0lucHV0S2luZCBpbnB1dEtpbmQ6IElucHV0S2luZC5VVEY4fSk7Cn0KCi8vLyBPdXRwdXQgdHlwZXMgdXNlZCBpbiBgQ29tcGlsZXJPdXRwdXQuY3JlYXRlT3V0cHV0U2lua2AuCmVudW0gT3V0cHV0VHlwZSB7CiAgLy8vIFRoZSBtYWluIEphdmFTY3JpcHQgb3V0cHV0LgogIGpzLAoKICAvLy8gQSBkZWZlcnJlZCBKYXZhU2NyaXB0IG91dHB1dCBwYXJ0LgogIGpzUGFydCwKCiAgLy8vIEEgc291cmNlIG1hcCBmb3IgYSBKYXZhU2NyaXB0IG91dHB1dC4KICBzb3VyY2VNYXAsCgogIC8vLyBEdW1wIGluZm8gb3V0cHV0LgogIGR1bXBJbmZvLAoKICAvLy8gRGVmZXJyZWQgbWFwIG91dHB1dC4KICBkZWZlcnJlZE1hcCwKCiAgLy8vIEltcGxlbWVudGF0aW9uIHNwZWNpZmljIG91dHB1dCB1c2VkIGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyLgogIGRlYnVnLAp9CgovLy8gU2luayBpbnRlcmZhY2UgdXNlZCBmb3IgZ2VuZXJhdGluZyBvdXRwdXQgZnJvbSB0aGUgY29tcGlsZXIuCmFic3RyYWN0IGNsYXNzIE91dHB1dFNpbmsgewogIC8vLyBBZGRzIFt0ZXh0XSB0byB0aGUgc2luay4KICB2b2lkIGFkZChTdHJpbmcgdGV4dCk7CgogIC8vLyBDbG9zZXMgdGhlIHNpbmsuCiAgdm9pZCBjbG9zZSgpOwp9CgovLy8gU2luayBpbnRlcmZhY2UgdXNlZCBmb3IgZ2VuZXJhdGluZyBiaW5hcnkgZGF0YSBmcm9tIHRoZSBjb21waWxlci4KYWJzdHJhY3QgY2xhc3MgQmluYXJ5T3V0cHV0U2luayB7CiAgLy8vIFdyaXRlcyBpbmRpY2VzIFtzdGFydF0gdG8gW2VuZF0gb2YgW2J1ZmZlcl0gdG8gdGhlIHNpbmsuCiAgdm9pZCB3cml0ZShMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pOwoKICAvLy8gQ2xvc2VzIHRoZSBzaW5rLgogIHZvaWQgY2xvc2UoKTsKfQoKLy8vIEludGVyZmFjZSBmb3IgcHJvZHVjaW5nIG91dHB1dCBmcm9tIHRoZSBjb21waWxlci4gVGhhdCBpcywgSmF2YVNjcmlwdCB0YXJnZXQKLy8vIGZpbGVzLCBzb3VyY2UgbWFwIGZpbGVzLCBkdW1wIGluZm8gZmlsZXMsIGV0Yy4KYWJzdHJhY3QgY2xhc3MgQ29tcGlsZXJPdXRwdXQgewogIC8vLyBSZXR1cm5zIGFuIFtPdXRwdXRTaW5rXSB0aGF0IHdpbGwgc2VydmUgYXMgY29tcGlsZXIgb3V0cHV0IGZvciB0aGUgZ2l2ZW4KICAvLy8gY29tcG9uZW50LgogIC8vLwogIC8vLyBDb21wb25lbnRzIGFyZSBpZGVudGlmaWVkIGJ5IFtuYW1lXSwgW2V4dGVuc2lvbl0sIGFuZCBbdHlwZV0uIEJ5CiAgLy8vIGNvbnZlbnRpb24sIHRoZSBlbXB0eSBzdHJpbmcgYCIiYCB3aWxsIHJlcHJlc2VudCB0aGUgbWFpbiBvdXRwdXQgb2YgdGhlCiAgLy8vIHByb3ZpZGVkIFt0eXBlXS4gW25hbWVdIGFuZCBbZXh0ZW5zaW9uXSBhcmUgb3RoZXJ3aXNlIHN1Z2dlc3RpdmUuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVwbGFjZSBbbmFtZV0gYW5kIFtleHRlbnNpb25dIHdpdGggc29tZXRoaW5nIGxpa2UKICAvLyBbaWRdIGFuZCBbdXJpXS4KICBPdXRwdXRTaW5rIGNyZWF0ZU91dHB1dFNpbmsoU3RyaW5nIG5hbWUsIFN0cmluZyBleHRlbnNpb24sIE91dHB1dFR5cGUgdHlwZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtCaW5hcnlPdXRwdXRTaW5rXSB0aGF0IHdpbGwgc2VydmUgYXMgY29tcGlsZXIgb3V0cHV0IGZvciB0aGUKICAvLy8gZ2l2ZW4gVVJJLgogIEJpbmFyeU91dHB1dFNpbmsgY3JlYXRlQmluYXJ5U2luayhVcmkgdXJpKTsKfQoKLy8vIEludGVyZmFjZSBmb3IgcmVjZWl2aW5nIGRpYWdub3N0aWMgbWVzc2FnZSBmcm9tIHRoZSBjb21waWxlci4gVGhhdCBpcywKLy8vIGVycm9ycywgd2FybmluZ3MsIGhpbnRzLCBldGMuCmFic3RyYWN0IGNsYXNzIENvbXBpbGVyRGlhZ25vc3RpY3MgewogIC8vLyBJbnZva2VkIGJ5IHRoZSBjb21waWxlciB0byByZXBvcnQgZGlhZ25vc3RpY3MuIElmIFt1cmldIGlzIGBudWxsYCwgc28gYXJlCiAgLy8vIFtiZWdpbl0gYW5kIFtlbmRdLiBObyBvdGhlciBhcmd1bWVudHMgbWF5IGJlIGBudWxsYC4gSWYgW3VyaV0gaXMgbm90CiAgLy8vIGBudWxsYCwgbmVpdGhlciBhcmUgW2JlZ2luXSBhbmQgW2VuZF0uIFt1cmldIGluZGljYXRlcyB0aGUgY29tcGlsYXRpb24KICAvLy8gdW5pdCBmcm9tIHdoZXJlIHRoZSBkaWFnbm9zdGljIG9yaWdpbmF0ZXMuIFtiZWdpbl0gYW5kIFtlbmRdIGFyZQogIC8vLyB6ZXJvLWJhc2VkIGNoYXJhY3RlciBvZmZzZXRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgY29tcGlsYXRpb24gdW5pdC4KICAvLy8gW21lc3NhZ2VdIGlzIHRoZSBkaWFnbm9zdGljIG1lc3NhZ2UsIGFuZCBba2luZF0gaW5kaWNhdGVzIGluZGljYXRlcyB3aGF0CiAgLy8vIGtpbmQgb2YgZGlhZ25vc3RpYyBpdCBpcy4KICAvLy8KICAvLy8gRXhwZXJpbWVudGFsOiBbY29kZV0gZ2l2ZXMgYWNjZXNzIHRvIGFuIGlkIGZvciB0aGUgbWVzc2FnZXMuIEN1cnJlbnRseSBpdAogIC8vLyBpcyB0aGUgW01lc3NhZ2VdIHVzZWQgdG8gY3JlYXRlIHRoZSBkaWFnbm9zdGljLCBpZiBhdmFpbGFibGUsIGZyb20gd2hpY2gKICAvLy8gdGhlIFtNZXNzYWdlS2luZF0gaXMgYWNjZXNzaWJsZS4KICB2b2lkIHJlcG9ydCgKICAgICAgdmFyIGNvZGUsIFVyaSB1cmksIGludCBiZWdpbiwgaW50IGVuZCwgU3RyaW5nIHRleHQsIERpYWdub3N0aWMga2luZCk7Cn0KCi8vLyBJbmZvcm1hdGlvbiByZXN1bHRpbmcgZnJvbSB0aGUgY29tcGlsYXRpb24uCmNsYXNzIENvbXBpbGF0aW9uUmVzdWx0IHsKICAvLy8gYHRydWVgIGlmIHRoZSBjb21waWxhdGlvbiBzdWNjZWVkZWQsIHRoYXQgaXMsIGNvbXBpbGF0aW9uIGRpZG4ndCBmYWlsIGR1ZQogIC8vLyB0byBjb21waWxlLXRpbWUgZXJyb3JzIGFuZC9vciBpbnRlcm5hbCBlcnJvcnMuCiAgZmluYWwgYm9vbCBpc1N1Y2Nlc3M7CgogIC8vLyBUaGUgY29tcGlsZXIgb2JqZWN0IHVzZWQgZm9yIHRoZSBjb21waWxhdGlvbi4KICAvLy8KICAvLy8gTm90ZTogVGhlIHR5cGUgb2YgW2NvbXBpbGVyXSBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYW5kIG1heSB2YXJ5LgogIC8vLyBVc2Ugb25seSBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nLgogIGZpbmFsIGNvbXBpbGVyOwoKICAvLy8gU2hhcmVkIHN0YXRlIGJldHdlZW4gY29tcGlsYXRpb25zLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgdG8gc3BlZWQgdXAgYmF0Y2ggbW9kZS4KICBmaW5hbCBmZS5Jbml0aWFsaXplZENvbXBpbGVyU3RhdGUga2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOwoKICBDb21waWxhdGlvblJlc3VsdCh0aGlzLmNvbXBpbGVyLAogICAgICB7dGhpcy5pc1N1Y2Nlc3M6IHRydWUsIHRoaXMua2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlOiBudWxsfSk7Cn0KCi8vLyBSZXR1cm5zIGEgZnV0dXJlIHRoYXQgY29tcGxldGVzIHRvIGEgW0NvbXBpbGF0aW9uUmVzdWx0XSB3aGVuIHRoZSBEYXJ0Ci8vLyBzb3VyY2VzIGluIFtvcHRpb25zXSBoYXZlIGJlZW4gY29tcGlsZWQuCi8vLwovLy8gVGhlIGdlbmVyYXRlZCBjb21waWxlciBvdXRwdXQgaXMgb2J0YWluZWQgYnkgcHJvdmlkaW5nIGEgW2NvbXBpbGVyT3V0cHV0XS4KLy8vCi8vLyBJZiB0aGUgY29tcGlsYXRpb24gZmFpbHMsIHRoZSBmdXR1cmUncyBgQ29tcGlsYXRpb25SZXN1bHQuaXNTdWNjZXNzYCBpcwovLy8gYGZhbHNlYCBhbmQgW0NvbXBpbGVyRGlhZ25vc3RpY3MucmVwb3J0XSBvbiBbY29tcGlsZXJEaWFnbm9zdGljc10KLy8vIGlzIGludm9rZWQgYXQgbGVhc3Qgb25jZSB3aXRoIGBraW5kID09IERpYWdub3N0aWMuRVJST1JgIG9yCi8vLyBga2luZCA9PSBEaWFnbm9zdGljLkNSQVNIYC4KRnV0dXJlPENvbXBpbGF0aW9uUmVzdWx0PiBjb21waWxlKAogICAgQ29tcGlsZXJPcHRpb25zIGNvbXBpbGVyT3B0aW9ucywKICAgIENvbXBpbGVySW5wdXQgY29tcGlsZXJJbnB1dCwKICAgIENvbXBpbGVyRGlhZ25vc3RpY3MgY29tcGlsZXJEaWFnbm9zdGljcywKICAgIENvbXBpbGVyT3V0cHV0IGNvbXBpbGVyT3V0cHV0KSB7CiAgaWYgKGNvbXBpbGVyT3B0aW9ucyA9PSBudWxsKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiY29tcGlsZXJPcHRpb25zIG11c3QgYmUgbm9uLW51bGwiKTsKICB9CiAgaWYgKGNvbXBpbGVySW5wdXQgPT0gbnVsbCkgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoImNvbXBpbGVySW5wdXQgbXVzdCBiZSBub24tbnVsbCIpOwogIH0KICBpZiAoY29tcGlsZXJEaWFnbm9zdGljcyA9PSBudWxsKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiY29tcGlsZXJEaWFnbm9zdGljcyBtdXN0IGJlIG5vbi1udWxsIik7CiAgfQogIGlmIChjb21waWxlck91dHB1dCA9PSBudWxsKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiY29tcGlsZXJPdXRwdXQgbXVzdCBiZSBub24tbnVsbCIpOwogIH0KCiAgQ29tcGlsZXJJbXBsIGNvbXBpbGVyID0gbmV3IENvbXBpbGVySW1wbCgKICAgICAgY29tcGlsZXJJbnB1dCwgY29tcGlsZXJPdXRwdXQsIGNvbXBpbGVyRGlhZ25vc3RpY3MsIGNvbXBpbGVyT3B0aW9ucyk7CiAgcmV0dXJuIGNvbXBpbGVyLnJ1bihjb21waWxlck9wdGlvbnMuZW50cnlQb2ludCkudGhlbigoYm9vbCBzdWNjZXNzKSB7CiAgICByZXR1cm4gbmV3IENvbXBpbGF0aW9uUmVzdWx0KGNvbXBpbGVyLAogICAgICAgIGlzU3VjY2Vzczogc3VjY2VzcywKICAgICAgICBrZXJuZWxJbml0aWFsaXplZENvbXBpbGVyU3RhdGU6CiAgICAgICAgICAgIGNvbXBpbGVyLmtlcm5lbExvYWRlci5pbml0aWFsaXplZENvbXBpbGVyU3RhdGUpOwogIH0pOwp9CoDFAE5OPAFNEgEWARUBQAEoGzABKAFFPAE1EUUTCAEuCgIBQRooDwElGwEkDgIBUR8fTEgGUUhMBisGTFFORU0CATwSIgYBKQoBLA0BGAwBGw8BRgkCAUEcHxkBFxACAUYiPzoBFxACAVEzIE8RBkdOSE0VTwFPES4CAUsiJVBLTUdPTyAGUE8nD0wCATAaUDUYATQGTSoSASkGK0QBI0oCAUstBE8ETEZAICMlIS0lIUEEHz8EJUUEIEAEASxMSCscKD0GAgEicGFja2FnZTpjb21waWxlci9jb21waWxlcl9uZXcuZGFydDZzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21tYW5kbGluZV9vcHRpb25zLmRhcnScWS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY21kbGluZS5vcHRpb25zOwoKLy8vIENvbW1hbmRsaW5lIGZsYWdzIHVzZWQgaW4gYGRhcnQyanMuZGFydGAgYW5kL29yIGBhcGlpbXBsLmRhcnRgLgpjbGFzcyBGbGFncyB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBhbGxvd01vY2tDb21waWxhdGlvbiA9ICctLWFsbG93LW1vY2stY29tcGlsYXRpb24nOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgYWxsb3dOYXRpdmVFeHRlbnNpb25zID0gJy0tYWxsb3ctbmF0aXZlLWV4dGVuc2lvbnMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZGlzYWJsZUlubGluaW5nID0gJy0tZGlzYWJsZS1pbmxpbmluZyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBkaXNhYmxlUHJvZ3JhbVNwbGl0ID0gJy0tZGlzYWJsZS1wcm9ncmFtLXNwbGl0JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGRpc2FibGVEaWFnbm9zdGljQ29sb3JzID0gJy0tZGlzYWJsZS1kaWFnbm9zdGljLWNvbG9ycyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBkaXNhYmxlTmF0aXZlTGl2ZVR5cGVBbmFseXNpcyA9CiAgICAgICctLWRpc2FibGUtbmF0aXZlLWxpdmUtdHlwZS1hbmFseXNpcyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB1c2VUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbiA9CiAgICAgICctLXVzZS10cml2aWFsLWFic3RyYWN0LXZhbHVlLWRvbWFpbic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBkaXNhYmxlVHlwZUluZmVyZW5jZSA9ICctLWRpc2FibGUtdHlwZS1pbmZlcmVuY2UnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZGlzYWJsZVJ0aU9wdGltaXphdGlvbiA9ICctLWRpc2FibGUtcnRpLW9wdGltaXphdGlvbic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBkdW1wSW5mbyA9ICctLWR1bXAtaW5mbyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBlbmFibGVBc3NlcnRNZXNzYWdlID0gJy0tYXNzZXJ0LW1lc3NhZ2UnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZW5hYmxlQ2hlY2tlZE1vZGUgPSAnLS1lbmFibGUtY2hlY2tlZC1tb2RlJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGVuYWJsZUFzc2VydHMgPSAnLS1lbmFibGUtYXNzZXJ0cyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBlbmFibGVEaWFnbm9zdGljQ29sb3JzID0gJy0tZW5hYmxlLWRpYWdub3N0aWMtY29sb3JzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGV4cGVyaW1lbnRhbFRyYWNrQWxsb2NhdGlvbnMgPQogICAgICAnLS1leHBlcmltZW50YWwtdHJhY2stYWxsb2NhdGlvbnMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZXhwZXJpbWVudGFsQWxsb2NhdGlvbnNQYXRoID0KICAgICAgJy0tZXhwZXJpbWVudGFsLWFsbG9jYXRpb25zLXBhdGgnOwoKICAvLyBUZW1wb3JhcnkgZXhwZXJpbWVudCBmb3IgY29kZSBnZW5lcmF0aW9uIG9mIGxvY2FscyBmb3IgZnJlcXVlbnRseSB1c2VkCiAgLy8gJ3RoaXMnIGFuZCBjb25zdGFudHMuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBleHBlcmltZW50TG9jYWxOYW1lcyA9ICctLWV4cGVyaW1lbnQtY29kZS0xJzsKCiAgLy8gRXhwZXJpbWVudGFsbHkgdHJ5IHRvIGZvcmNlIHBhcnQtZmlsZSBmdW5jdGlvbnMgdG8gYmUgc2VlbiBhcyBJSUZFcy4KICBzdGF0aWMgY29uc3QgU3RyaW5nIGV4cGVyaW1lbnRTdGFydHVwRnVuY3Rpb25zID0gJy0tZXhwZXJpbWVudC1jb2RlLTInOwoKICAvLyBFeHBlcmltZW50YWxseSByZWx5IG9uIEphdmFTY3JpcHQgVG9Cb29sZWFuIGNvbnZlcnNpb25zLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgZXhwZXJpbWVudFRvQm9vbGVhbiA9ICctLWV4cGVyaW1lbnQtY29kZS0zJzsKCiAgLy8gQWRkIGluc3RydW1lbnRhdGlvbiB0byBsb2cgZXZlcnkgbWV0aG9kIGNhbGwuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBleHBlcmltZW50Q2FsbEluc3RydW1lbnRhdGlvbiA9CiAgICAgICctLWV4cGVyaW1lbnQtY2FsbC1pbnN0cnVtZW50YXRpb24nOwoKICBzdGF0aWMgY29uc3QgU3RyaW5nIGV4cGVyaW1lbnROZXdSdGkgPSAnLS1leHBlcmltZW50LW5ldy1ydGknOwoKICBzdGF0aWMgY29uc3QgU3RyaW5nIGVuYWJsZUxhbmd1YWdlRXhwZXJpbWVudHMgPSAnLS1lbmFibGUtZXhwZXJpbWVudCc7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcgZmFzdFN0YXJ0dXAgPSAnLS1mYXN0LXN0YXJ0dXAnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZmF0YWxXYXJuaW5ncyA9ICctLWZhdGFsLXdhcm5pbmdzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGdlbmVyYXRlQ29kZVdpdGhDb21waWxlVGltZUVycm9ycyA9CiAgICAgICctLWdlbmVyYXRlLWNvZGUtd2l0aC1jb21waWxlLXRpbWUtZXJyb3JzJzsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBwcmV2aWV3RGFydDIgPSAnLS1wcmV2aWV3LWRhcnQtMic7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcgb21pdEltcGxpY2l0Q2hlY2tzID0gJy0tb21pdC1pbXBsaWNpdC1jaGVja3MnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgb21pdEFzQ2FzdHMgPSAnLS1vbWl0LWFzLWNhc3RzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGxheFJ1bnRpbWVUeXBlVG9TdHJpbmcgPSAnLS1sYXgtcnVudGltZS10eXBlLXRvLXN0cmluZyc7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcgcGxhdGZvcm1CaW5hcmllcyA9ICctLXBsYXRmb3JtLWJpbmFyaWVzPS4rJzsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBtaW5pZnkgPSAnLS1taW5pZnknOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbm9GcmVxdWVuY3lCYXNlZE1pbmlmaWNhdGlvbiA9CiAgICAgICctLW5vLWZyZXF1ZW5jeS1iYXNlZC1taW5pZmljYXRpb24nOwogIC8vIERpc2FibGVzIG1pbmlmaWNhdGlvbiBldmVuIGlmIGVuYWJsZWQgYnkgb3RoZXIgb3B0aW9ucywgZS5nLiAnLU8yJy4KICBzdGF0aWMgY29uc3QgU3RyaW5nIG5vTWluaWZ5ID0gJy0tbm8tbWluaWZ5JzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG5vU291cmNlTWFwcyA9ICctLW5vLXNvdXJjZS1tYXBzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHByZXNlcnZlVXJpcyA9ICctLXByZXNlcnZlLXVyaXMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgc2hvd1BhY2thZ2VXYXJuaW5ncyA9ICctLXNob3ctcGFja2FnZS13YXJuaW5ncyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzdXBwcmVzc0hpbnRzID0gJy0tc3VwcHJlc3MtaGludHMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgc3VwcHJlc3NXYXJuaW5ncyA9ICctLXN1cHByZXNzLXdhcm5pbmdzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRlcnNlID0gJy0tdGVyc2UnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGVzdE1vZGUgPSAnLS10ZXN0LW1vZGUnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdHJ1c3RQcmltaXRpdmVzID0gJy0tdHJ1c3QtcHJpbWl0aXZlcyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0cnVzdFR5cGVBbm5vdGF0aW9ucyA9ICctLXRydXN0LXR5cGUtYW5ub3RhdGlvbnMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnMgPQogICAgICAnLS1leHBlcmltZW50YWwtdHJ1c3QtanMtaW50ZXJvcC10eXBlLWFubm90YXRpb25zJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHVzZUNvbnRlbnRTZWN1cml0eVBvbGljeSA9ICctLWNzcCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB1c2VNdWx0aVNvdXJjZUluZm8gPSAnLS11c2UtbXVsdGktc291cmNlLWluZm8nOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdXNlTmV3U291cmNlSW5mbyA9ICctLXVzZS1uZXctc291cmNlLWluZm8nOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdmVyYm9zZSA9ICctLXZlcmJvc2UnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgcHJvZ3Jlc3MgPSAnLS1zaG93LWludGVybmFsLXByb2dyZXNzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHZlcnNpb24gPSAnLS12ZXJzaW9uJzsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBkaWxsRGVwZW5kZW5jaWVzID0gJy0tZGlsbC1kZXBlbmRlbmNpZXMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgcmVhZERhdGEgPSAnLS1yZWFkLWRhdGEnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgd3JpdGVEYXRhID0gJy0td3JpdGUtZGF0YSc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyByZWFkQ29kZWdlbiA9ICctLXJlYWQtY29kZWdlbic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB3cml0ZUNvZGVnZW4gPSAnLS13cml0ZS1jb2RlZ2VuJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGNvZGVnZW5TaGFyZCA9ICctLWNvZGVnZW4tc2hhcmQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgY29kZWdlblNoYXJkcyA9ICctLWNvZGVnZW4tc2hhcmRzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGNmZU9ubHkgPSAnLS1jZmUtb25seSc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBkZWJ1Z0dsb2JhbEluZmVyZW5jZSA9ICctLWRlYnVnLWdsb2JhbC1pbmZlcmVuY2UnOwoKICBzdGF0aWMgY29uc3QgU3RyaW5nIHNlcnZlck1vZGUgPSAnLS1zZXJ2ZXItbW9kZSc7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcgbmV3RGVmZXJyZWRTcGxpdCA9ICctLW5ldy1kZWZlcnJlZC1zcGxpdCc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyByZXBvcnRJbnZhbGlkSW5mZXJyZWREZWZlcnJlZFR5cGVzID0KICAgICAgJy0tcmVwb3J0LWludmFsaWQtZGVmZXJyZWQtdHlwZXMnOwoKICAvLy8gRmxhZyBmb3IgYSBjb21iaW5hdGlvbiBvZiBmbGFncyBmb3IgJ3Byb2R1Y3Rpb24nIG1vZGUuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBiZW5jaG1hcmtpbmdQcm9kdWN0aW9uID0gJy0tYmVuY2htYXJraW5nLXByb2R1Y3Rpb24nOwoKICAvLy8gRmxhZyBmb3IgYSBjb21iaW5hdGlvbiBvZiBmbGFncyBmb3IgYmVuY2htYXJraW5nICdleHBlcmltZW50JyBtb2RlLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgYmVuY2htYXJraW5nRXhwZXJpbWVudCA9ICctLWJlbmNobWFya2luZy14JzsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBjb25kaXRpb25hbERpcmVjdGl2ZXMgPSAnLS1jb25kaXRpb25hbC1kaXJlY3RpdmVzJzsKCiAgLy8gVGhlIHN5bnRheC1vbmx5IGxldmVsIG9mIHN1cHBvcnQgZm9yIGdlbmVyaWMgbWV0aG9kcyBpcyBpbmNsdWRlZCBpbiB0aGUKICAvLyAxLjUwIG1pbGVzdG9uZSBmb3IgRGFydC4gSXQgaXMgbm90IGV4cGVyaW1lbnRhbCwgYnV0IGFsc28gbm90IHBlcm1hbmVudDoKICAvLyBhIGZ1bGwgaW1wbGVtZW50YXRpb24gaXMgZXhwZWN0ZWQgaW4gdGhlIGZ1dHVyZS4gSGVuY2UsIHRoZQogIC8vICdHRU5FUklDX01FVEhPRFMnIGNvbW1lbnRzIHdoaWNoIHdlcmUgYWRkZWQgd2hlbiB0aGlzIGZlYXR1cmUgd2FzCiAgLy8gZXhwZXJpbWVudGFsIGhhdmUgYmVlbiBwcmVzZXJ2ZWQsIHN1Y2ggdGhhdCBpdCB3aWxsIGJlIGVhc3kgdG8gZmluZCB0aGUKICAvLyByZWxldmFudCBsb2NhdGlvbnMgdG8gdXBkYXRlIHdoZW4gZ2VuZXJpYyBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBmdWxseS4KICAvLwogIC8vIFRoZSBvcHRpb24gaXMgc3RpbGwgYWNjZXB0ZWQsIGJ1dCBpdCBoYXMgbm8gZWZmZWN0OiBUaGUgZmVhdHVyZSBpcyBlbmFibGVkCiAgLy8gYnkgZGVmYXVsdCBhbmQgaXQgY2Fubm90IGJlIGRpc2FibGVkLgogIC8vCiAgLy8gVGhlIGFwcHJvYWNoIHRha2VuIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyB0byBwYXJzZSBnZW5lcmljIG1ldGhvZHMsCiAgLy8gaW50cm9kdWNlIEFTVCBub2RlcyBmb3IgdGhlbSwgZ2VuZXJhdGUgY29ycmVzcG9uZGluZyB0eXBlcyAoc3VjaCB0aGF0CiAgLy8gZnJvbnQgZW5kIHRyZWF0bWVudCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIGNvZGUgdGhhdCBwcm9ncmFtbWVycyB3cm90ZSksCiAgLy8gYnV0IGNvbnNpZGVyaW5nIGFsbCBtZXRob2QgdHlwZSB2YXJpYWJsZXMgdG8gaGF2ZSBib3VuZCBgZHluYW1pY2Agbm8KICAvLyBtYXR0ZXIgd2hpY2ggYm91bmQgdGhleSBoYXZlIHN5bnRhY3RpY2FsbHkgKHN1Y2ggdGhhdCB0aGVpciB2YWx1ZSBhcyB0eXBlcwogIC8vIGlzIHVuY2hlY2tlZCksIGFuZCB0aGVuIHJlcGxhY2luZyBtZXRob2QgdHlwZSB2YXJpYWJsZXMgYnkgYSBgRHluYW1pY1R5cGVgCiAgLy8gKHN1Y2ggdGhhdCB0aGUgYmFja2VuZCBkb2VzIG5vdCBuZWVkIHRvIHRha2UgbWV0aG9kIHR5cGUgYXJndW1lbnRzIGludG8KICAvLyBhY2NvdW50KS4KICAvLwogIC8vIFRoZSBmZWF0dXJlIGhhcyBhbiBpbmZvcm1hbCBzcGVjaWZpY2F0aW9uIHdoaWNoIGlzIGF2YWlsYWJsZSBhdAogIC8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2Vlcm5zdGcvNDM1M2Q3YjRmNjY5NzQ1YmVkM2E1NDIzZTA0YTQ1M2MuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBnZW5lcmljTWV0aG9kU3ludGF4ID0gJy0tZ2VuZXJpYy1tZXRob2Qtc3ludGF4JzsKCiAgLy8gSW5pdGlhbGl6aW5nLWZvcm1hbCBhY2Nlc3MgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGFuZCBjYW5ub3QgYmUgZGlzYWJsZWQuCiAgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgdGhlIG9wdGlvbiBpcyBzdGlsbCBhY2NlcHRlZCwgYnV0IGl0IGlzIGlnbm9yZWQuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBpbml0aWFsaXppbmdGb3JtYWxBY2Nlc3MgPSAnLS1pbml0aWFsaXppbmctZm9ybWFsLWFjY2Vzcyc7CgogIC8vIEV4cGVyaW1lbnRhbCBmbGFncy4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHJlc29sdmVPbmx5ID0gJy0tcmVzb2x2ZS1vbmx5JzsKfQoKY2xhc3MgT3B0aW9uIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHNob3dQYWNrYWdlV2FybmluZ3MgPQogICAgICAnJHtGbGFncy5zaG93UGFja2FnZVdhcm5pbmdzfXwke0ZsYWdzLnNob3dQYWNrYWdlV2FybmluZ3N9PS4qJzsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBlbmFibGVMYW5ndWFnZUV4cGVyaW1lbnRzID0KICAgICAgJyR7RmxhZ3MuZW5hYmxlTGFuZ3VhZ2VFeHBlcmltZW50c318JwogICAgICAnJHtGbGFncy5lbmFibGVMYW5ndWFnZUV4cGVyaW1lbnRzfT0uKic7CgogIC8vIEV4cGVyaW1lbnRhbCBvcHRpb25zLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgcmVzb2x1dGlvbklucHV0ID0gJy0tcmVzb2x1dGlvbi1pbnB1dD0uKyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBiYXplbFBhdGhzID0gJy0tYmF6ZWwtcGF0aHM9LisnOwp9CoCYAE5OPAEhAUQOSUs+R082LTYtSU0wQEM6TTUqNCkBTBtEAUpKAT5DATM2KwFBAUkBNjo6MgE5AUU3TwFDASs1K0kwOThHOkApMD5JNjo6RkItPS0BQDAyNjg4Oi5JATQBQTspAT1MAUpDAUoBTU5BR01OBVArBUtLTkpQUE0PBUVHRwFOUVEBGTYCAQ8sRgEyLC8BG0E3AgEtcGFja2FnZTpjb21waWxlci9zcmMvY29tbWFuZGxpbmVfb3B0aW9ucy5kYXJ0LHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2ZpbGVuYW1lcy5kYXJ0hNIvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmaWxlbmFtZXM7CgppbXBvcnQgJ2RhcnQ6aW8nIHNob3cgUGxhdGZvcm07CgovLyBGb3IgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGNvbnZlcnQgV2luZG93cyBmaWxlIG5hbWVzIHRvIFVSSXM6Ci8vIGh0dHA6Ly9ibG9ncy5tc2RuLmNvbS9iL2llL2FyY2hpdmUvMjAwNi8xMi8wNi9maWxlLXVyaXMtaW4td2luZG93cy5hc3B4CgpTdHJpbmcgbmF0aXZlVG9VcmlQYXRoKFN0cmluZyBmaWxlbmFtZSkgewogIC8vIFRPRE8oYWhlKTogSXQgd291bGQgYmUgbmljZSB0byB1c2UgYSBEYXJ0IGxpYnJhcnkgaW5zdGVhZC4KICBpZiAoIVBsYXRmb3JtLmlzV2luZG93cykgcmV0dXJuIGZpbGVuYW1lOwogIGZpbGVuYW1lID0gZmlsZW5hbWUucmVwbGFjZUFsbCgnXFwnLCAnLycpOwogIGlmIChmaWxlbmFtZS5sZW5ndGggPiAyICYmIGZpbGVuYW1lWzFdID09ICc6JykgewogICAgZmlsZW5hbWUgPSAiLyRmaWxlbmFtZSI7CiAgfQogIHJldHVybiBmaWxlbmFtZTsKfQoKU3RyaW5nIHVyaVBhdGhUb05hdGl2ZShTdHJpbmcgcGF0aCkgewogIC8vIFRPRE8oYWhlKTogSXQgd291bGQgYmUgbmljZSB0byB1c2UgYSBEYXJ0IGxpYnJhcnkgaW5zdGVhZC4KICBpZiAoIVBsYXRmb3JtLmlzV2luZG93cykgcmV0dXJuIHBhdGg7CiAgaWYgKHBhdGgubGVuZ3RoID4gMyAmJiBwYXRoWzBdID09ICcvJyAmJiBwYXRoWzJdID09ICc6JykgewogICAgcmV0dXJuIHBhdGguc3Vic3RyaW5nKDEpLnJlcGxhY2VBbGwoJy8nLCAnXFwnKTsKICB9IGVsc2UgewogICAgcmV0dXJuIHBhdGgucmVwbGFjZUFsbCgnLycsICdcXCcpOwogIH0KfQoKZmluYWwgVXJpIGN1cnJlbnREaXJlY3RvcnkgPSBVcmkuYmFzZTsKClVyaSBuYXRpdmVUb1VyaShTdHJpbmcgZmlsZW5hbWUpID0+CiAgICBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmUobmF0aXZlVG9VcmlQYXRoKGZpbGVuYW1lKSk7CgpTdHJpbmcgYXBwZW5kU2xhc2goU3RyaW5nIHBhdGgpID0+IHBhdGguZW5kc1dpdGgoJy8nKSA/IHBhdGggOiAnJHBhdGgvJzsKJwBOTjwBEwEgAURLASpALC0zHQQTAgEmQCg9NAsnBAIBJwEkOQFJASNwYWNrYWdlOmNvbXBpbGVyL3NyYy9maWxlbmFtZXMuZGFydCpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9vcHRpb25zLmRhcnTAAFyxLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5zcmMub3B0aW9uczsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIGFzIGZlOwoKaW1wb3J0ICdjb21tYW5kbGluZV9vcHRpb25zLmRhcnQnIHNob3cgRmxhZ3M7CmltcG9ydCAndXRpbC91dGlsLmRhcnQnOwoKLy8vIE9wdGlvbnMgdXNlZCBmb3IgY29udHJvbGxpbmcgZGlhZ25vc3RpYyBtZXNzYWdlcy4KYWJzdHJhY3QgY2xhc3MgRGlhZ25vc3RpY09wdGlvbnMgewogIGNvbnN0IERpYWdub3N0aWNPcHRpb25zKCk7CgogIC8vLyBJZiBgdHJ1ZWAsIHdhcm5pbmdzIGNhdXNlIHRoZSBjb21waWxhdGlvbiB0byBmYWlsLgogIGJvb2wgZ2V0IGZhdGFsV2FybmluZ3M7CgogIC8vLyBFbWl0IHRlcnNlIGRpYWdub3N0aWNzIHdpdGhvdXQgaG93VG9GaXguCiAgYm9vbCBnZXQgdGVyc2VEaWFnbm9zdGljczsKCiAgLy8vIElmIGB0cnVlYCwgd2FybmluZ3MgYXJlIG5vdCByZXBvcnRlZC4KICBib29sIGdldCBzdXBwcmVzc1dhcm5pbmdzOwoKICAvLy8gSWYgYHRydWVgLCBoaW50cyBhcmUgbm90IHJlcG9ydGVkLgogIGJvb2wgZ2V0IHN1cHByZXNzSGludHM7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB3YXJuaW5ncyBhbmQgaGludHMgYXJlIHNob3duIGZvciBhbGwgcGFja2FnZXMuCiAgYm9vbCBnZXQgc2hvd0FsbFBhY2thZ2VXYXJuaW5nczsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHdhcm5pbmdzIGFuZCBoaW50cyBhcmUgaGlkZGVuIGZvciBhbGwgcGFja2FnZXMuCiAgYm9vbCBnZXQgaGlkZVBhY2thZ2VXYXJuaW5nczsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHdhcm5pbmdzIHNob3VsZCBiZSBzaG91bGQgZm9yIFt1cmldLgogIGJvb2wgc2hvd1BhY2thZ2VXYXJuaW5nc0ZvcihVcmkgdXJpKTsKfQoKLy8vIE9iamVjdCBmb3IgcGFzc2luZyBvcHRpb25zIHRvIHRoZSBjb21waWxlci4gU3VwZXJjbGFzc2VzIGFyZSB1c2VkIHRvIHNlbGVjdAovLy8gc3Vic2V0cyBvZiB0aGVzZSBvcHRpb25zLCBlbmFibGluZyBlYWNoIHBhcnQgb2YgdGhlIGNvbXBpbGVyIHRvIGRlcGVuZCBvbgovLy8gYXMgZmV3IGFzIHBvc3NpYmxlLgpjbGFzcyBDb21waWxlck9wdGlvbnMgaW1wbGVtZW50cyBEaWFnbm9zdGljT3B0aW9ucyB7CiAgLy8vIFRoZSBlbnRyeSBwb2ludCBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCBpcyBiZWluZyBjb21waWxlZC4KICBVcmkgZW50cnlQb2ludDsKCiAgLy8vIFBhY2thZ2Ugcm9vdCBsb2NhdGlvbi4KICAvLy8KICAvLy8gSWYgbm90IG51bGwgdGhlbiBbcGFja2FnZUNvbmZpZ10gc2hvdWxkIGJlIG51bGwuCiAgVXJpIHBhY2thZ2VSb290OwoKICAvLy8gTG9jYXRpb24gb2YgdGhlIHBhY2thZ2UgY29uZmlndXJhdGlvbiBmaWxlLgogIC8vLwogIC8vLyBJZiBub3QgbnVsbCB0aGVuIFtwYWNrYWdlUm9vdF0gc2hvdWxkIGJlIG51bGwuCiAgVXJpIHBhY2thZ2VDb25maWc7CgogIC8vLyBMaXN0IG9mIGtlcm5lbCBmaWxlcyB0byBsb2FkLgogIC8vLwogIC8vLyBXaGVuIGNvbXBpbGluZyBtb2R1bGFybHksIHRoaXMgY29udGFpbnMga2VybmVsIGZpbGVzIHRoYXQgYXJlIG5lZWRlZAogIC8vLyB0byBjb21waWxlIGEgc2luZ2xlIG1vZHVsZS4KICAvLy8KICAvLy8gV2hlbiBsaW5raW5nLCB0aGlzIGNvbnRhaW5zIGFsbCBrZXJuZWwgZmlsZXMgdGhhdCBmb3JtIHBhcnQgb2YgdGhlIGZpbmFsCiAgLy8vIHByb2dyYW0uCiAgLy8vCiAgLy8vIEF0IHRoaXMgdGltZSwgdGhpcyBsaXN0IHBvaW50cyB0byBmdWxsIGtlcm5lbCBmaWxlcy4gSW4gdGhlIGZ1dHVyZSwgd2UgbWF5CiAgLy8vIHVzZSBhIGxpc3Qgb2Ygb3V0bGluZSBmaWxlcyBmb3IgbW9kdWxhciBjb21waWxlcywgYW5kIG9ubHkgdXNlIGZ1bGwga2VybmVsCiAgLy8vIGZpbGVzIGZvciBsaW5raW5nLgogIExpc3Q8VXJpPiBkaWxsRGVwZW5kZW5jaWVzOwoKICAvLy8gTG9jYXRpb24gZnJvbSB3aGljaCBzZXJpYWxpemVkIGluZmVyZW5jZSBkYXRhIGlzIHJlYWQuCiAgLy8vCiAgLy8vIElmIHRoaXMgaXMgc2V0LCB0aGUgW2VudHJ5UG9pbnRdIGlzIGV4cGVjdGVkIHRvIGJlIGEgLmRpbGwgZmlsZSBhbmQgdGhlCiAgLy8vIGZyb250ZW5kIHdvcmsgaXMgc2tpcHBlZC4KICBVcmkgcmVhZERhdGFVcmk7CgogIC8vLyBMb2NhdGlvbiB0byB3aGljaCBpbmZlcmVuY2UgZGF0YSBpcyBzZXJpYWxpemVkLgogIC8vLwogIC8vLyBJZiB0aGlzIGlzIHNldCwgdGhlIGNvbXBpbGF0aW9uIHN0b3BzIGFmdGVyIHR5cGUgaW5mZXJlbmNlLgogIFVyaSB3cml0ZURhdGFVcmk7CgogIC8vLyBMb2NhdGlvbiBmcm9tIHdoaWNoIGNvZGVnZW4gZGF0YSBpcyByZWFkLgogIC8vLwogIC8vLyBJZiB0aGlzIGlzIHNldCwgdGhlIGNvbXBpbGF0aW9uIHN0YXJ0cyBhdCBjb2RlZ2VuIGVucXVldWVpbmcuCiAgVXJpIHJlYWRDb2RlZ2VuVXJpOwoKICAvLy8gTG9jYXRpb24gdG8gd2hpY2ggY29kZWdlbiBkYXRhIGlzIHNlcmlhbGl6ZWQuCiAgLy8vCiAgLy8vIElmIHRoaXMgaXMgc2V0LCB0aGUgY29tcGlsYXRpb24gc3RvcHMgYWZ0ZXIgY29kZSBnZW5lcmF0aW9uLgogIFVyaSB3cml0ZUNvZGVnZW5Vcmk7CgogIC8vLyBXaGV0aGVyIHRvIHJ1biBvbmx5IHRoZSBDRkUgYW5kIGVtaXQgdGhlIGdlbmVyYXRlZCBrZXJuZWwgZmlsZSBpbgogIC8vLyBbb3V0cHV0VXJpXS4KICBib29sIGNmZU9ubHkgPSBmYWxzZTsKCiAgLy8vIEZsYWcgb25seSBtZWFudCBmb3IgZGFydDJqcyBkZXZlbG9wZXJzIHRvIGl0ZXJhdGUgb24gZ2xvYmFsIGluZmVyZW5jZQogIC8vLyBjaGFuZ2VzLgogIC8vLwogIC8vLyBXaGVuIHdvcmtpbmcgb24gbGFyZ2UgYXBwcyB0aGlzIGZsYWcgYWxsb3dzIHRvIGxvYWQgc2VyaWFsaXplZCBkYXRhIGZvcgogIC8vLyB0aGUgYXBwICh2aWEgLS1yZWFkLWRhdGEpLCByZXVzZSBpdHMgY2xvc2VkIHdvcmxkLCBhbmQgcmVydW4gdGhlIGdsb2JhbAogIC8vLyBpbmZlcmVuY2UgcGhhc2UgKGV2ZW4gdGhvdWdoIHRoZSBzZXJpYWxpemVkIGRhdGEgYWxyZWFkeSBjb250YWlucyBhIGdsb2JhbAogIC8vLyBpbmZlcmVuY2UgcmVzdWx0KS4KICBib29sIGRlYnVnR2xvYmFsSW5mZXJlbmNlID0gZmFsc2U7CgogIC8vLyBSZXNvbHZlZCBjb25zdGFudCAiZW52aXJvbm1lbnQiIHZhbHVlcyBwYXNzZWQgdG8gdGhlIGNvbXBpbGVyIHZpYSB0aGUgYC1EYAogIC8vLyBmbGFncy4KICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50ID0gY29uc3QgPFN0cmluZywgU3RyaW5nPnt9OwoKICAvLy8gRmxhZ3MgZW5hYmxpbmcgbGFuZ3VhZ2UgZXhwZXJpbWVudHMuCiAgTWFwPGZlLkV4cGVyaW1lbnRhbEZsYWcsIGJvb2w+IGxhbmd1YWdlRXhwZXJpbWVudHMgPSB7fTsKCiAgLy8vIGB0cnVlYCBpZiBDRkUgcGVyZm9ybXMgY29uc3RhbnQgZXZhbHVhdGlvbi4KICBib29sIGdldCB1c2VDRkVDb25zdGFudHMgPT4KICAgICAgbGFuZ3VhZ2VFeHBlcmltZW50c1tmZS5FeHBlcmltZW50YWxGbGFnLmNvbnN0YW50VXBkYXRlMjAxOF07CgogIC8vLyBBIHBvc3NpYmx5IG51bGwgc3RhdGUgb2JqZWN0IGZvciBrZXJuZWwgY29tcGlsYXRpb24uCiAgZmUuSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlIGtlcm5lbEluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZTsKCiAgLy8vIFdoZXRoZXIgd2UgYWxsb3cgbW9ja2luZyBjb21waWxhdGlvbiBvZiBsaWJyYXJpZXMgc3VjaCBhcyBkYXJ0OmlvIGFuZAogIC8vLyBkYXJ0Omh0bWwgZm9yIHVuaXQgdGVzdGluZyBwdXJwb3Nlcy4KICBib29sIGFsbG93TW9ja0NvbXBpbGF0aW9uID0gZmFsc2U7CgogIC8vLyBTZXRzIGEgY29tYmluYXRpb24gb2YgZmxhZ3MgZm9yIGJlbmNobWFya2luZyAncHJvZHVjdGlvbicgbW9kZS4KICBib29sIGJlbmNobWFya2luZ1Byb2R1Y3Rpb24gPSBmYWxzZTsKCiAgLy8vIFNldHMgYSBjb21iaW5hdGlvbiBvZiBmbGFncyBmb3IgYmVuY2htYXJraW5nICdleHBlcmltZW50JyBtb2RlLgogIGJvb2wgYmVuY2htYXJraW5nRXhwZXJpbWVudCA9IGZhbHNlOwoKICAvLy8gSUQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc2RrIGJ1aWxkLgogIFN0cmluZyBidWlsZElkID0gX1VOREVURVJNSU5FRF9CVUlMRF9JRDsKCiAgLy8vIFdoZXRoZXIgdGhlcmUgaXMgYSBidWlsZC1pZCBhdmFpbGFibGUgc28gd2UgY2FuIHVzZSBpdCBvbiBlcnJvciBtZXNzYWdlcwogIC8vLyBhbmQgaW4gdGhlIGVtaXR0ZWQgb3V0cHV0IG9mIHRoZSBjb21waWxlci4KICBib29sIGdldCBoYXNCdWlsZElkID0+IGJ1aWxkSWQgIT0gX1VOREVURVJNSU5FRF9CVUlMRF9JRDsKCiAgLy8vIFdoZXRoZXIgdG8gY29tcGlsZSBmb3IgdGhlIHNlcnZlciBjYXRlZ29yeS4gVGhpcyBpcyB1c2VkIHRvIGNvbXBpbGUgdG8gSlMKICAvLy8gdGhhdCBpcyBpbnRlbmRlZCB0byBiZSBydW4gb24gc2VydmVyLXNpZGUgVk1zIGxpa2Ugbm9kZWpzLgogIGJvb2wgY29tcGlsZUZvclNlcnZlciA9IGZhbHNlOwoKICAvLy8gTG9jYXRpb24gd2hlcmUgdG8gZ2VuZXJhdGUgYSBtYXAgY29udGFpbmluZyBkZXRhaWxzIG9mIGhvdyBkZWZlcnJlZAogIC8vLyBsaWJyYXJpZXMgYXJlIHN1YmRpdmlkZWQuCiAgVXJpIGRlZmVycmVkTWFwVXJpOwoKICAvLy8gV2hldGhlciB0byBhcHBseSB0aGUgbmV3IGRlZmVycmVkIHNwbGl0IGZpeGVzLiBUaGUgZml4ZXMgaW1wcm92ZSBvbgogIC8vLyBwZXJmb3JtYW5jZSBhbmQgZml4IGEgc291bmRuZXNzIGlzc3VlIHdpdGggaW5mZXJyZWQgdHlwZXMuIFRoZSBsYXR0ZXIgd2lsbAogIC8vLyBtb3ZlIG1vcmUgY29kZSB0byB0aGUgbWFpbiBvdXRwdXQgdW5pdCwgYmVjYXVzZSBvZiB0aGF0IHdlIGFyZSBub3QKICAvLy8gZW5hYmxpbmcgdGhlIGZlYXR1cmUgYnkgZGVmYXVsdCByaWdodCBhd2F5LgogIC8vLwogIC8vLyBXaGVuIFtyZXBvcnRJbnZhbGlkSW5mZXJyZWREZWZlcnJlZFR5cGVzXSBzaG93cyBubyBlcnJvcnMsIHdlIGV4cGVjdCB0aGlzCiAgLy8vIGZsYWcgdG8gcHJvZHVjZSB0aGUgc2FtZSBvciBiZXR0ZXIgcmVzdWx0cyB0aGFuIHRoZSBjdXJyZW50IHVuc291bmQKICAvLy8gaW1wbGVtZW50YXRpb24uCiAgYm9vbCBuZXdEZWZlcnJlZFNwbGl0ID0gZmFsc2U7CgogIC8vLyBTaG93IGVycm9ycyB3aGVuIGEgZGVmZXJyZWQgdHlwZSBpcyBpbmZlcnJlZCBhcyBhIHJldHVybiB0eXBlIG9mIGEgY2xvc3VyZQogIC8vLyBvciBpbiBhIHR5cGUgcGFyYW1ldGVyLiBUaG9zZSBjYXNlcyBjYXVzZSB0aGUgY29tcGlsZXIgdG9kYXkgdG8gYmVoYXZlCiAgLy8vIHVuc291bmRseSBieSBwdXR0aW5nIHRoZSBjb2RlIGluIGEgZGVmZXJyZWQgb3V0cHV0IHVuaXQuIEluIHRoZSBmdXR1cmUKICAvLy8gd2hlbiBbbmV3RGVmZXJyZWRTcGxpdF0gaXMgb24gYnkgZGVmYXVsdCwgdGhvc2UgY2FzZXMgd2lsbCBiZSB0cmVhdGVkCiAgLy8vIHNvdW5kbHkgYW5kIHdpbGwgY2F1c2UgbW9yZSBjb2RlIHRvIGJlIG1vdmVkIHRvIHRoZSBtYWluIG91dHB1dCB1bml0LgogIC8vLwogIC8vLyBUaGlzIGZsYWcgaXMgcHJlc2VudGVkIHRvIGhlbHAgZGV2ZWxvcGVycyBmaW5kIGFuZCBmaXggdGhlIGFmZmVjdGVkIGNvZGUuCiAgYm9vbCByZXBvcnRJbnZhbGlkSW5mZXJyZWREZWZlcnJlZFR5cGVzID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIGRpc2FibGUgaW5saW5pbmcgZHVyaW5nIHRoZSBiYWNrZW5kIG9wdGltaXphdGlvbnMuCiAgLy8gVE9ETyhzaWdtdW5kKTogbmVnYXRlLCBzbyBhbGwgZmxhZ3MgYXJlIHBvc2l0aXZlCiAgYm9vbCBkaXNhYmxlSW5saW5pbmcgPSBmYWxzZTsKCiAgLy8vIERpc2FibGUgZGVmZXJyZWQgbG9hZGluZywgaW5zdGVhZCBnZW5lcmF0ZSBldmVyeXRoaW5nIGluIG9uZSBvdXRwdXQgdW5pdC4KICAvLy8gTm90ZTogdGhlIHJlc3VsdGluZyBwcm9ncmFtIHN0aWxsIGNvcnJlY3RseSBjaGVja3MgdGhhdCBsb2FkTGlicmFyeSAmCiAgLy8vIGNoZWNrTGlicmFyeSBjYWxscyBhcmUgY29ycmVjdC4KICBib29sIGRpc2FibGVQcm9ncmFtU3BsaXQgPSBmYWxzZTsKCiAgLy8vIERpYWdub3N0aWMgb3B0aW9uOiBJZiBgdHJ1ZWAsIHdhcm5pbmdzIGNhdXNlIHRoZSBjb21waWxhdGlvbiB0byBmYWlsLgogIEBvdmVycmlkZQogIGJvb2wgZmF0YWxXYXJuaW5ncyA9IGZhbHNlOwoKICAvLy8gRGlhZ25vc3RpYyBvcHRpb246IEVtaXQgdGVyc2UgZGlhZ25vc3RpY3Mgd2l0aG91dCBob3dUb0ZpeC4KICBAb3ZlcnJpZGUKICBib29sIHRlcnNlRGlhZ25vc3RpY3MgPSBmYWxzZTsKCiAgLy8vIERpYWdub3N0aWMgb3B0aW9uOiBJZiBgdHJ1ZWAsIHdhcm5pbmdzIGFyZSBub3QgcmVwb3J0ZWQuCiAgQG92ZXJyaWRlCiAgYm9vbCBzdXBwcmVzc1dhcm5pbmdzID0gZmFsc2U7CgogIC8vLyBEaWFnbm9zdGljIG9wdGlvbjogSWYgYHRydWVgLCBoaW50cyBhcmUgbm90IHJlcG9ydGVkLgogIEBvdmVycmlkZQogIGJvb2wgc3VwcHJlc3NIaW50cyA9IGZhbHNlOwoKICAvLy8gRGlhZ25vc3RpYyBvcHRpb246IExpc3Qgb2YgcGFja2FnZXMgZm9yIHdoaWNoIHdhcm5pbmdzIGFuZCBoaW50cyBhcmUKICAvLy8gcmVwb3J0ZWQuIElmIGBudWxsYCwgbm8gcGFja2FnZSB3YXJuaW5ncyBvciBoaW50cyBhcmUgcmVwb3J0ZWQuIElmCiAgLy8vIGVtcHR5LCBhbGwgd2FybmluZ3MgYW5kIGhpbnRzIGFyZSByZXBvcnRlZC4KICBMaXN0PFN0cmluZz4gc2hvd25QYWNrYWdlV2FybmluZ3M7IC8vICYmJiYmCgogIC8vLyBXaGV0aGVyIHRvIGRpc2FibGUgZ2xvYmFsIHR5cGUgaW5mZXJlbmNlLgogIGJvb2wgZGlzYWJsZVR5cGVJbmZlcmVuY2UgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gdXNlIHRoZSB0cml2aWFsIGFic3RyYWN0IHZhbHVlIGRvbWFpbi4KICBib29sIHVzZVRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIGRpc2FibGUgb3B0aW1pemF0aW9uIGZvciBuZWVkIHJ1bnRpbWUgdHlwZSBpbmZvcm1hdGlvbi4KICBib29sIGRpc2FibGVSdGlPcHRpbWl6YXRpb24gPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gZW1pdCBhIHN1bW1hcnkgb2YgdGhlIGluZm9ybWF0aW9uIHVzZWQgYnkgdGhlIGNvbXBpbGVyIGR1cmluZwogIC8vLyBvcHRpbWl6YXRpb24uIFRoaXMgaW5jbHVkZXMgcmVzb2x1dGlvbiBkZXRhaWxzLCBkZXBlbmRlbmNpZXMgYmV0d2VlbgogIC8vLyBlbGVtZW50cywgcmVzdWx0cyBvZiB0eXBlIGluZmVyZW5jZSwgYW5kIGRhdGEgYWJvdXQgZ2VuZXJhdGVkIGNvZGUuCiAgYm9vbCBkdW1wSW5mbyA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byB1c2UgdGhlIG5ldyBkdW1wLWluZm8gYmluYXJ5IGZvcm1hdC4gVGhpcyB3aWxsIGJlIHRoZSBkZWZhdWx0CiAgLy8vIGFmdGVyIGEgdHJhbnNpdGlvbmFsIHBlcmlvZC4KICBib29sIHVzZUR1bXBJbmZvQmluYXJ5Rm9ybWF0ID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHdlIGFsbG93IHBhc3NpbmcgYW4gZXh0cmEgYXJndW1lbnQgdG8gYGFzc2VydGAsIGNvbnRhaW5pbmcgYQogIC8vLyByZWFzb24gZm9yIHdoeSBhbiBhc3NlcnRpb24gZmFpbHMuIChleHBlcmltZW50YWwpCiAgLy8vCiAgLy8vIFRoaXMgaXMgb25seSBpbmNsdWRlZCBzbyB0aGF0IHRlc3RzIGNhbiBwYXNzIHRoZSAtLWFzc2VydC1tZXNzYWdlIGZsYWcKICAvLy8gd2l0aG91dCBjYXVzaW5nIGRhcnQyanMgdG8gY3Jhc2guIFRoZSBmbGFnIGhhcyBubyBlZmZlY3QuCiAgYm9vbCBlbmFibGVBc3NlcnRNZXNzYWdlID0gdHJ1ZTsKCiAgLy8vIFdoZXRoZXIgdG8gZW5hYmxlIG1pbmlmaWNhdGlvbgogIC8vIFRPRE8oc2lnbXVuZCk6IHJlbmFtZSB0byBtaW5pZnkKICBib29sIGVuYWJsZU1pbmlmaWNhdGlvbiA9IGZhbHNlOwoKICAvLy8gRmxhZyB0byB0dXJuIG9mZiBtaW5pZmljYXRpb24gZXZlbiBpZiBlbmFibGVkIGVsc2V3aGVyZSwgZS5nLiB2aWEKICAvLy8gLU8yLiBCb3RoIFtlbmFibGVNaW5pZmljYXRpb25dIGFuZCBbX2Rpc2FibGVNaW5pZmljYXRpb25dIGNhbiBiZSB0cnVlLCBpbgogIC8vLyB3aGljaCBjYXNlIFtfZGlzYWJsZU1pbmlmaWNhdGlvbl0gd2lucy4KICBib29sIF9kaXNhYmxlTWluaWZpY2F0aW9uID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIG1vZGVsIHdoaWNoIG5hdGl2ZSBjbGFzc2VzIGFyZSBsaXZlIGJhc2VkIG9uIGFubm90YXRpb25zIG9uIHRoZQogIC8vLyBjb3JlIGxpYnJhcmllcy4gSWYgZmFsc2UsIGFsbCBuYXRpdmUgY2xhc3NlcyB3aWxsIGJlIGluY2x1ZGVkIGJ5IGRlZmF1bHQuCiAgYm9vbCBlbmFibGVOYXRpdmVMaXZlVHlwZUFuYWx5c2lzID0gdHJ1ZTsKCiAgLy8vIFdoZXRoZXIgdG8gZ2VuZXJhdGUgY29kZSBjb250YWluaW5nIHVzZXIncyBgYXNzZXJ0YCBzdGF0ZW1lbnRzLgogIGJvb2wgZW5hYmxlVXNlckFzc2VydGlvbnMgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gZ2VuZXJhdGUgYSBzb3VyY2UtbWFwIGZpbGUgdG9nZXRoZXIgd2l0aCB0aGUgb3V0cHV0IHByb2dyYW0uCiAgYm9vbCBnZW5lcmF0ZVNvdXJjZU1hcCA9IHRydWU7CgogIC8vLyBVUkkgb2YgdGhlIG1haW4gb3V0cHV0IG9mIHRoZSBjb21waWxlci4KICBVcmkgb3V0cHV0VXJpOwoKICAvLy8gTG9jYXRpb24gb2YgdGhlIGxpYnJhcmllcyBzcGVjaWZpY2F0aW9uIGZpbGUuCiAgVXJpIGxpYnJhcmllc1NwZWNpZmljYXRpb25Vcmk7CgogIC8vLyBMb2NhdGlvbiBvZiB0aGUga2VybmVsIHBsYXRmb3JtIGAuZGlsbGAgZmlsZXMuCiAgVXJpIHBsYXRmb3JtQmluYXJpZXM7CgogIC8vLyBVUkkgd2hlcmUgdGhlIGNvbXBpbGVyIHNob3VsZCBnZW5lcmF0ZSB0aGUgb3V0cHV0IHNvdXJjZSBtYXAgZmlsZS4KICBVcmkgc291cmNlTWFwVXJpOwoKICAvLy8gVGhlIGNvbXBpbGVyIGlzIHJ1biBmcm9tIHRoZSBidWlsZCBib3QuCiAgYm9vbCB0ZXN0TW9kZSA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byB0cnVzdCBKUy1pbnRlcm9wIGFubm90YXRpb25zLiAoZXhwZXJpbWVudGFsKQogIGJvb2wgdHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnMgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gdHJ1c3QgcHJpbWl0aXZlIHR5cGVzIGR1cmluZyBpbmZlcmVuY2UgYW5kIG9wdGltaXphdGlvbnMuCiAgYm9vbCB0cnVzdFByaW1pdGl2ZXMgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gb21pdCBpbXBsaWNpdCBzdHJvbmcgbW9kZSBjaGVja3MuCiAgYm9vbCBvbWl0SW1wbGljaXRDaGVja3MgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gb21pdCBhcyBjYXN0cyBieSBkZWZhdWx0LgogIGJvb2wgb21pdEFzQ2FzdHMgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gb21pdCBjbGFzcyB0eXBlIGFyZ3VtZW50cyBvbmx5IG5lZWRlZCBmb3IgYHRvU3RyaW5nYCBvbgogIC8vLyBgT2JqZWN0LnJ1bnRpbWVUeXBlYC4KICBib29sIGxheFJ1bnRpbWVUeXBlVG9TdHJpbmcgPSBmYWxzZTsKCiAgLy8vIFdoYXQgc2hvdWxkIHRoZSBjb21waWxlciBkbyB3aXRoIHBhcmFtZXRlciB0eXBlIGFzc2VydGlvbnMuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBvcHRpb24gZGVyaXZlZCBmcm9tIG90aGVyIGZsYWdzLgogIENoZWNrUG9saWN5IGRlZmF1bHRQYXJhbWV0ZXJDaGVja1BvbGljeTsKCiAgLy8vIFdoYXQgc2hvdWxkIHRoZSBjb21waWxlciBkbyB3aXRoIGltcGxpY2l0IGRvd25jYXN0cy4KICAvLy8KICAvLy8gVGhpcyBpcyBhbiBpbnRlcm5hbCBjb25maWd1cmF0aW9uIG9wdGlvbiBkZXJpdmVkIGZyb20gb3RoZXIgZmxhZ3MuCiAgQ2hlY2tQb2xpY3kgZGVmYXVsdEltcGxpY2l0RG93bmNhc3RDaGVja1BvbGljeTsKCiAgLy8vIFdoYXQgdGhlIGNvbXBpbGVyIHNob3VsZCBkbyB3aXRoIGEgYm9vbGVhbiB2YWx1ZSBpbiBhIGNvbmRpdGlvbiBjb250ZXh0CiAgLy8vIHdoZW4gdGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb24gc2F5cyBpdCBpcyBhIHJ1bnRpbWUgZXJyb3IgZm9yIGl0IHRvIGJlCiAgLy8vIG51bGwuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBvcHRpb24gZGVyaXZlZCBmcm9tIG90aGVyIGZsYWdzLgogIENoZWNrUG9saWN5IGRlZmF1bHRDb25kaXRpb25DaGVja1BvbGljeTsKCiAgLy8vIFdoYXQgc2hvdWxkIHRoZSBjb21waWxlciBkbyB3aXRoIGV4cGxpY2l0IGNhc3RzLgogIC8vLwogIC8vLyBUaGlzIGlzIGFuIGludGVybmFsIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGRlcml2ZWQgZnJvbSBvdGhlciBmbGFncy4KICBDaGVja1BvbGljeSBkZWZhdWx0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3k7CgogIC8vLyBXaGV0aGVyIHRvIGdlbmVyYXRlIGNvZGUgY29tcGxpYW50IHdpdGggY29udGVudCBzZWN1cml0eSBwb2xpY3kgKENTUCkuCiAgYm9vbCB1c2VDb250ZW50U2VjdXJpdHlQb2xpY3kgPSBmYWxzZTsKCiAgLy8vIFdoZW4gb2JmdXNjYXRpbmcgZm9yIG1pbmlmaWNhdGlvbiwgd2hldGhlciB0byB1c2UgdGhlIGZyZXF1ZW5jeSBvZiBhIG5hbWUKICAvLy8gYXMgYW4gaGV1cmlzdGljIHRvIHBpY2sgc2hvcnRlciBuYW1lcy4KICBib29sIHVzZUZyZXF1ZW5jeU5hbWVyID0gdHJ1ZTsKCiAgLy8vIFdoZXRoZXIgdG8gZ2VuZXJhdGUgc291cmNlLWluZm9ybWF0aW9uIGZyb20gYm90aCB0aGUgb2xkIGFuZCB0aGUgbmV3CiAgLy8vIHNvdXJjZS1pbmZvcm1hdGlvbiBlbmdpbmVzLiAoZXhwZXJpbWVudGFsKQogIGJvb2wgdXNlTXVsdGlTb3VyY2VJbmZvID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIHVzZSB0aGUgbmV3IHNvdXJjZS1pbmZvcm1hdGlvbiBpbXBsZW1lbnRhdGlvbiBmb3Igc291cmNlLW1hcHMuCiAgLy8vIChleHBlcmltZW50YWwpCiAgYm9vbCB1c2VOZXdTb3VyY2VJbmZvID0gZmFsc2U7CgogIC8vLyBFbmFibGUgdmVyYm9zZSBwcmludGluZyBkdXJpbmcgY29tcGlsYXRpb24uIEluY2x1ZGVzIGEgdGltZS1icmVha2Rvd24KICAvLy8gYmV0d2VlbiBwaGFzZXMgYXQgdGhlIGVuZC4KICBib29sIHZlcmJvc2UgPSBmYWxzZTsKCiAgLy8vIE9uIHRvcCBvZiAtLXZlcmJvc2UsIGVuYWJsZSBtb3JlIHZlcmJvc2UgcHJpbnRpbmcsIGxpa2UgcHJvZ3Jlc3MgbWVzc2FnZXMKICAvLy8gZHVyaW5nIGVhY2ggcGhhc2Ugb2YgY29tcGlsYXRpb24uCiAgYm9vbCBzaG93SW50ZXJuYWxQcm9ncmVzcyA9IGZhbHNlOwoKICAvLy8gVHJhY2sgYWxsb2NhdGlvbnMgaW4gdGhlIEpTIG91dHB1dC4KICAvLy8KICAvLy8gVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZmVhdHVyZS4KICBib29sIGV4cGVyaW1lbnRhbFRyYWNrQWxsb2NhdGlvbnMgPSBmYWxzZTsKCiAgLy8vIEV4cGVyaW1lbnRhbCBwYXJ0IGZpbGUgZnVuY3Rpb24gZ2VuZXJhdGlvbi4KICBib29sIGV4cGVyaW1lbnRTdGFydHVwRnVuY3Rpb25zID0gZmFsc2U7CgogIC8vLyBFeHBlcmltZW50YWwgcmVsaWFuY2Ugb24gSmF2YVNjcmlwdCBUb0Jvb2xlYW4gY29udmVyc2lvbnMuCiAgYm9vbCBleHBlcmltZW50VG9Cb29sZWFuID0gZmFsc2U7CgogIC8vLyBFeHBlcmltZW50YWwgaW5zdHJ1bWVudGF0aW9uIHRvIGludmVzdGlnYXRlIGNvZGUgYmxvYXQuCiAgLy8vCiAgLy8vIElmIFt0cnVlXSwgdGhlIGNvbXBpbGVyIHdpbGwgZW1pdCBjb2RlIHRoYXQgbG9ncyB3aGVuZXZlciBhIG1ldGhvZCBpcwogIC8vLyBjYWxsZWQuCiAgYm9vbCBleHBlcmltZW50Q2FsbEluc3RydW1lbnRhdGlvbiA9IGZhbHNlOwoKICAvLy8gRXhwZXJpbWVudGFsIHVzZSBvZiB0aGUgbmV3IChRMiAyMDE5KSBSVEkgc3lzdGVtLgogIGJvb2wgZXhwZXJpbWVudE5ld1J0aSA9IGZhbHNlOwoKICAvLy8gVGhlIHBhdGggdG8gdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgcHJvZmlsZWQgYWxsb2NhdGlvbnMuCiAgLy8vCiAgLy8vIFRoZSBmaWxlIG11c3QgY29udGFpbiB0aGUgTWFwIHRoYXQgd2FzIHByb2R1Y2VkIGJ5IHVzaW5nCiAgLy8vIFtleHBlcmltZW50YWxUcmFja0FsbG9jYXRpb25zXSBlbmNvZGVkIGFzIGEgSlNPTiBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gZXhwZXJpbWVudGFsIGZlYXR1cmUuCiAgU3RyaW5nIGV4cGVyaW1lbnRhbEFsbG9jYXRpb25zUGF0aDsKCiAgLy8vIElmIHNwZWNpZmllZCwgYSBidW5kbGUgb2Ygb3B0aW1pemF0aW9ucyB0byBlbmFibGUgKG9yIGRpc2FibGUpLgogIGludCBvcHRpbWl6YXRpb25MZXZlbCA9IG51bGw7CgogIC8vLyBUaGUgc2hhcmQgdG8gc2VyaWFsaXplIHdoZW4gdXNpbmcgW3dyaXRlQ29kZWdlblVyaV0uCiAgaW50IGNvZGVnZW5TaGFyZDsKCiAgLy8vIFRoZSBudW1iZXIgb2Ygc2hhcmRzIHRvIHNlcmlhbGl6ZSB3aGVuIHVzaW5nIFt3cml0ZUNvZGVnZW5VcmldIG9yIHRvCiAgLy8vIGRlc2VyaWFsaXplIHdoZW4gdXNpbmcgW3JlYWRDb2RlZ2VuVXJpXS4KICBpbnQgY29kZWdlblNoYXJkczsKCiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC8vIE9wdGlvbnMgZm9yIGRlcHJlY2F0ZWQgZmVhdHVyZXMKICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgogIC8vLyBDcmVhdGUgYW4gb3B0aW9ucyBvYmplY3QgYnkgcGFyc2luZyBmbGFncyBmcm9tIFtvcHRpb25zXS4KICBzdGF0aWMgQ29tcGlsZXJPcHRpb25zIHBhcnNlKExpc3Q8U3RyaW5nPiBvcHRpb25zLAogICAgICB7VXJpIGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmksIFVyaSBwbGF0Zm9ybUJpbmFyaWVzfSkgewogICAgTWFwPGZlLkV4cGVyaW1lbnRhbEZsYWcsIGJvb2w+IGxhbmd1YWdlRXhwZXJpbWVudHMgPQogICAgICAgIF9leHRyYWN0RXhwZXJpbWVudHMob3B0aW9ucyk7CiAgICBpZiAoZXF1YWxNYXBzKGxhbmd1YWdlRXhwZXJpbWVudHMsIGZlLmRlZmF1bHRFeHBlcmltZW50YWxGbGFncykpIHsKICAgICAgcGxhdGZvcm1CaW5hcmllcyA/Pz0gZmUuY29tcHV0ZVBsYXRmb3JtQmluYXJpZXNMb2NhdGlvbigpOwogICAgfQogICAgcmV0dXJuIG5ldyBDb21waWxlck9wdGlvbnMoKQogICAgICAuLmxpYnJhcmllc1NwZWNpZmljYXRpb25VcmkgPSBsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpCiAgICAgIC4uYWxsb3dNb2NrQ29tcGlsYXRpb24gPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmFsbG93TW9ja0NvbXBpbGF0aW9uKQogICAgICAuLmJlbmNobWFya2luZ1Byb2R1Y3Rpb24gPQogICAgICAgICAgX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5iZW5jaG1hcmtpbmdQcm9kdWN0aW9uKQogICAgICAuLmJlbmNobWFya2luZ0V4cGVyaW1lbnQgPQogICAgICAgICAgX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5iZW5jaG1hcmtpbmdFeHBlcmltZW50KQogICAgICAuLmJ1aWxkSWQgPQogICAgICAgICAgX2V4dHJhY3RTdHJpbmdPcHRpb24ob3B0aW9ucywgJy0tYnVpbGQtaWQ9JywgX1VOREVURVJNSU5FRF9CVUlMRF9JRCkKICAgICAgLi5jb21waWxlRm9yU2VydmVyID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5zZXJ2ZXJNb2RlKQogICAgICAuLmRlZmVycmVkTWFwVXJpID0gX2V4dHJhY3RVcmlPcHRpb24ob3B0aW9ucywgJy0tZGVmZXJyZWQtbWFwPScpCiAgICAgIC4ubmV3RGVmZXJyZWRTcGxpdCA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MubmV3RGVmZXJyZWRTcGxpdCkKICAgICAgLi5yZXBvcnRJbnZhbGlkSW5mZXJyZWREZWZlcnJlZFR5cGVzID0KICAgICAgICAgIF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MucmVwb3J0SW52YWxpZEluZmVycmVkRGVmZXJyZWRUeXBlcykKICAgICAgLi5mYXRhbFdhcm5pbmdzID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5mYXRhbFdhcm5pbmdzKQogICAgICAuLnRlcnNlRGlhZ25vc3RpY3MgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLnRlcnNlKQogICAgICAuLnN1cHByZXNzV2FybmluZ3MgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLnN1cHByZXNzV2FybmluZ3MpCiAgICAgIC4uc3VwcHJlc3NIaW50cyA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3Muc3VwcHJlc3NIaW50cykKICAgICAgLi5zaG93blBhY2thZ2VXYXJuaW5ncyA9CiAgICAgICAgICBfZXh0cmFjdE9wdGlvbmFsQ3N2T3B0aW9uKG9wdGlvbnMsIEZsYWdzLnNob3dQYWNrYWdlV2FybmluZ3MpCiAgICAgIC4ubGFuZ3VhZ2VFeHBlcmltZW50cyA9IGxhbmd1YWdlRXhwZXJpbWVudHMKICAgICAgLi5kaXNhYmxlSW5saW5pbmcgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmRpc2FibGVJbmxpbmluZykKICAgICAgLi5kaXNhYmxlUHJvZ3JhbVNwbGl0ID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5kaXNhYmxlUHJvZ3JhbVNwbGl0KQogICAgICAuLmRpc2FibGVUeXBlSW5mZXJlbmNlID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5kaXNhYmxlVHlwZUluZmVyZW5jZSkKICAgICAgLi51c2VUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbiA9CiAgICAgICAgICBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLnVzZVRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAuLmRpc2FibGVSdGlPcHRpbWl6YXRpb24gPQogICAgICAgICAgX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5kaXNhYmxlUnRpT3B0aW1pemF0aW9uKQogICAgICAuLmR1bXBJbmZvID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5kdW1wSW5mbykKICAgICAgLi51c2VEdW1wSW5mb0JpbmFyeUZvcm1hdCA9CiAgICAgICAgICBfaGFzT3B0aW9uKG9wdGlvbnMsICIke0ZsYWdzLmR1bXBJbmZvfT1iaW5hcnkiKQogICAgICAuLmVuYWJsZU1pbmlmaWNhdGlvbiA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MubWluaWZ5KQogICAgICAuLl9kaXNhYmxlTWluaWZpY2F0aW9uID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5ub01pbmlmeSkKICAgICAgLi5lbmFibGVOYXRpdmVMaXZlVHlwZUFuYWx5c2lzID0KICAgICAgICAgICFfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmRpc2FibGVOYXRpdmVMaXZlVHlwZUFuYWx5c2lzKQogICAgICAuLmVuYWJsZVVzZXJBc3NlcnRpb25zID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5lbmFibGVDaGVja2VkTW9kZSkgfHwKICAgICAgICAgIF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuZW5hYmxlQXNzZXJ0cykKICAgICAgLi5leHBlcmltZW50YWxUcmFja0FsbG9jYXRpb25zID0KICAgICAgICAgIF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MuZXhwZXJpbWVudGFsVHJhY2tBbGxvY2F0aW9ucykKICAgICAgLi5leHBlcmltZW50YWxBbGxvY2F0aW9uc1BhdGggPSBfZXh0cmFjdFN0cmluZ09wdGlvbigKICAgICAgICAgIG9wdGlvbnMsICIke0ZsYWdzLmV4cGVyaW1lbnRhbEFsbG9jYXRpb25zUGF0aH09IiwgbnVsbCkKICAgICAgLi5leHBlcmltZW50U3RhcnR1cEZ1bmN0aW9ucyA9CiAgICAgICAgICBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmV4cGVyaW1lbnRTdGFydHVwRnVuY3Rpb25zKQogICAgICAuLmV4cGVyaW1lbnRUb0Jvb2xlYW4gPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmV4cGVyaW1lbnRUb0Jvb2xlYW4pCiAgICAgIC4uZXhwZXJpbWVudENhbGxJbnN0cnVtZW50YXRpb24gPQogICAgICAgICAgX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5leHBlcmltZW50Q2FsbEluc3RydW1lbnRhdGlvbikKICAgICAgLi5leHBlcmltZW50TmV3UnRpID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5leHBlcmltZW50TmV3UnRpKQogICAgICAuLmdlbmVyYXRlU291cmNlTWFwID0gIV9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3Mubm9Tb3VyY2VNYXBzKQogICAgICAuLm91dHB1dFVyaSA9IF9leHRyYWN0VXJpT3B0aW9uKG9wdGlvbnMsICctLW91dD0nKQogICAgICAuLnBsYXRmb3JtQmluYXJpZXMgPQogICAgICAgICAgcGxhdGZvcm1CaW5hcmllcyA/PyBfZXh0cmFjdFVyaU9wdGlvbihvcHRpb25zLCAnLS1wbGF0Zm9ybS1iaW5hcmllcz0nKQogICAgICAuLnNvdXJjZU1hcFVyaSA9IF9leHRyYWN0VXJpT3B0aW9uKG9wdGlvbnMsICctLXNvdXJjZS1tYXA9JykKICAgICAgLi5vbWl0SW1wbGljaXRDaGVja3MgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLm9taXRJbXBsaWNpdENoZWNrcykKICAgICAgLi5vbWl0QXNDYXN0cyA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3Mub21pdEFzQ2FzdHMpCiAgICAgIC4ubGF4UnVudGltZVR5cGVUb1N0cmluZyA9CiAgICAgICAgICBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmxheFJ1bnRpbWVUeXBlVG9TdHJpbmcpCiAgICAgIC4udGVzdE1vZGUgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLnRlc3RNb2RlKQogICAgICAuLnRydXN0SlNJbnRlcm9wVHlwZUFubm90YXRpb25zID0KICAgICAgICAgIF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MudHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnMpCiAgICAgIC4udHJ1c3RQcmltaXRpdmVzID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy50cnVzdFByaW1pdGl2ZXMpCiAgICAgIC4udXNlQ29udGVudFNlY3VyaXR5UG9saWN5ID0KICAgICAgICAgIF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MudXNlQ29udGVudFNlY3VyaXR5UG9saWN5KQogICAgICAuLnVzZUZyZXF1ZW5jeU5hbWVyID0KICAgICAgICAgICFfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLm5vRnJlcXVlbmN5QmFzZWRNaW5pZmljYXRpb24pCiAgICAgIC4udXNlTXVsdGlTb3VyY2VJbmZvID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy51c2VNdWx0aVNvdXJjZUluZm8pCiAgICAgIC4udXNlTmV3U291cmNlSW5mbyA9IF9oYXNPcHRpb24ob3B0aW9ucywgRmxhZ3MudXNlTmV3U291cmNlSW5mbykKICAgICAgLi52ZXJib3NlID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy52ZXJib3NlKQogICAgICAuLnNob3dJbnRlcm5hbFByb2dyZXNzID0gX2hhc09wdGlvbihvcHRpb25zLCBGbGFncy5wcm9ncmVzcykKICAgICAgLi5kaWxsRGVwZW5kZW5jaWVzID0KICAgICAgICAgIF9leHRyYWN0VXJpTGlzdE9wdGlvbihvcHRpb25zLCAnJHtGbGFncy5kaWxsRGVwZW5kZW5jaWVzfScpCiAgICAgIC4ucmVhZERhdGFVcmkgPSBfZXh0cmFjdFVyaU9wdGlvbihvcHRpb25zLCAnJHtGbGFncy5yZWFkRGF0YX09JykKICAgICAgLi53cml0ZURhdGFVcmkgPSBfZXh0cmFjdFVyaU9wdGlvbihvcHRpb25zLCAnJHtGbGFncy53cml0ZURhdGF9PScpCiAgICAgIC4ucmVhZENvZGVnZW5VcmkgPSBfZXh0cmFjdFVyaU9wdGlvbihvcHRpb25zLCAnJHtGbGFncy5yZWFkQ29kZWdlbn09JykKICAgICAgLi53cml0ZUNvZGVnZW5VcmkgPSBfZXh0cmFjdFVyaU9wdGlvbihvcHRpb25zLCAnJHtGbGFncy53cml0ZUNvZGVnZW59PScpCiAgICAgIC4uY29kZWdlblNoYXJkID0gX2V4dHJhY3RJbnRPcHRpb24ob3B0aW9ucywgJyR7RmxhZ3MuY29kZWdlblNoYXJkfT0nKQogICAgICAuLmNvZGVnZW5TaGFyZHMgPSBfZXh0cmFjdEludE9wdGlvbihvcHRpb25zLCAnJHtGbGFncy5jb2RlZ2VuU2hhcmRzfT0nKQogICAgICAuLmNmZU9ubHkgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmNmZU9ubHkpCiAgICAgIC4uZGVidWdHbG9iYWxJbmZlcmVuY2UgPSBfaGFzT3B0aW9uKG9wdGlvbnMsIEZsYWdzLmRlYnVnR2xvYmFsSW5mZXJlbmNlKTsKICB9CgogIHZvaWQgdmFsaWRhdGUoKSB7CiAgICAvLyBUT0RPKHNpZ211bmQpOiBzaG91bGQgZW50cnlwb2ludCBiZSBoZXJlPyBzaG91bGQgd2UgdmFsaWRhdGUgaXQgaXMgbm90CiAgICAvLyBudWxsPyBJbiB1bml0dGVzdHMgd2UgdXNlIHRoZSBzYW1lIGNvbXBpbGVyIHRvIGFuYWx5emUgb3IgYnVpbGQgbXVsdGlwbGUKICAgIC8vIGVudHJ5cG9pbnRzLgogICAgaWYgKGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmkgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiW2xpYnJhcmllc1NwZWNpZmljYXRpb25VcmldIGlzIG51bGwuIik7CiAgICB9CiAgICBpZiAobGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaS5wYXRoLmVuZHNXaXRoKCcvJykpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAiW2xpYnJhcmllc1NwZWNpZmljYXRpb25VcmldIHNob3VsZCBiZSBhIGZpbGU6ICRsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpIik7CiAgICB9CiAgICBpZiAocGFja2FnZVJvb3QgIT0gbnVsbCAmJiBwYWNrYWdlQ29uZmlnICE9IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIk9ubHkgb25lIG9mIFtwYWNrYWdlUm9vdF0gb3IgW3BhY2thZ2VDb25maWddICIKICAgICAgICAgICJtYXkgYmUgZ2l2ZW4uIik7CiAgICB9CiAgICBpZiAocGFja2FnZVJvb3QgIT0gbnVsbCAmJiAhcGFja2FnZVJvb3QucGF0aC5lbmRzV2l0aCgiLyIpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJbcGFja2FnZVJvb3RdIG11c3QgZW5kIHdpdGggYSAvIik7CiAgICB9CiAgICBpZiAocGxhdGZvcm1CaW5hcmllcyA9PSBudWxsICYmCiAgICAgICAgZXF1YWxNYXBzKGxhbmd1YWdlRXhwZXJpbWVudHMsIGZlLmRlZmF1bHRFeHBlcmltZW50YWxGbGFncykpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIk1pc3NpbmcgcmVxdWlyZWQgJHtGbGFncy5wbGF0Zm9ybUJpbmFyaWVzfSIpOwogICAgfQogIH0KCiAgdm9pZCBkZXJpdmVPcHRpb25zKCkgewogICAgaWYgKGJlbmNobWFya2luZ1Byb2R1Y3Rpb24pIHsKICAgICAgdHJ1c3RQcmltaXRpdmVzID0gdHJ1ZTsKICAgICAgb21pdEltcGxpY2l0Q2hlY2tzID0gdHJ1ZTsKICAgIH0KCiAgICBpZiAoYmVuY2htYXJraW5nRXhwZXJpbWVudCkgewogICAgICAvLyBUT0RPKHNyYSk6IFNldCBmbGFncyBpbXBsaWVkIGJ5ICctLWJlbmNobWFya2luZy14Jy4gSW5pdGlhbGx5IHRoaXMgd2lsbAogICAgICAvLyBiZSAtLWV4cGVyaW1lbnQtbmV3LXJ0aSwgYW5kIGxhdGVyIE5OQkQuCiAgICAgIGV4cGVyaW1lbnROZXdSdGkgPSB0cnVlOwogICAgfQoKICAgIGlmIChvcHRpbWl6YXRpb25MZXZlbCAhPSBudWxsKSB7CiAgICAgIGlmIChvcHRpbWl6YXRpb25MZXZlbCA9PSAwKSB7CiAgICAgICAgZGlzYWJsZUlubGluaW5nID0gdHJ1ZTsKICAgICAgICBkaXNhYmxlVHlwZUluZmVyZW5jZSA9IHRydWU7CiAgICAgICAgZGlzYWJsZVJ0aU9wdGltaXphdGlvbiA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKG9wdGltaXphdGlvbkxldmVsID49IDIpIHsKICAgICAgICBlbmFibGVNaW5pZmljYXRpb24gPSB0cnVlOwogICAgICAgIGxheFJ1bnRpbWVUeXBlVG9TdHJpbmcgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChvcHRpbWl6YXRpb25MZXZlbCA+PSAzKSB7CiAgICAgICAgb21pdEltcGxpY2l0Q2hlY2tzID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAob3B0aW1pemF0aW9uTGV2ZWwgPT0gNCkgewogICAgICAgIHRydXN0UHJpbWl0aXZlcyA9IHRydWU7CiAgICAgIH0KICAgIH0KCiAgICAvLyBTdHJvbmcgbW9kZSBhbHdheXMgdHJ1c3RzIHR5cGUgYW5ub3RhdGlvbnMgKGluZmVycmVkIG9yIGV4cGxpY2l0KSwgc28KICAgIC8vIGFzc2lnbm1lbnRzIGNoZWNrcyBzaG91bGQgYmUgdHJ1c3RlZC4KICAgIGlmIChvbWl0SW1wbGljaXRDaGVja3MpIHsKICAgICAgZGVmYXVsdFBhcmFtZXRlckNoZWNrUG9saWN5ID0gQ2hlY2tQb2xpY3kudHJ1c3RlZDsKICAgICAgZGVmYXVsdEltcGxpY2l0RG93bmNhc3RDaGVja1BvbGljeSA9IENoZWNrUG9saWN5LnRydXN0ZWQ7CiAgICAgIGRlZmF1bHRDb25kaXRpb25DaGVja1BvbGljeSA9IENoZWNrUG9saWN5LnRydXN0ZWQ7CiAgICB9IGVsc2UgewogICAgICBkZWZhdWx0UGFyYW1ldGVyQ2hlY2tQb2xpY3kgPSBDaGVja1BvbGljeS5jaGVja2VkOwogICAgICBkZWZhdWx0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5ID0gQ2hlY2tQb2xpY3kuY2hlY2tlZDsKICAgICAgZGVmYXVsdENvbmRpdGlvbkNoZWNrUG9saWN5ID0gQ2hlY2tQb2xpY3kuY2hlY2tlZDsKICAgIH0KICAgIGlmIChvbWl0QXNDYXN0cykgewogICAgICBkZWZhdWx0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3kgPSBDaGVja1BvbGljeS50cnVzdGVkOwogICAgfSBlbHNlIHsKICAgICAgZGVmYXVsdEV4cGxpY2l0Q2FzdENoZWNrUG9saWN5ID0gQ2hlY2tQb2xpY3kuY2hlY2tlZDsKICAgIH0KCiAgICBpZiAoX2Rpc2FibGVNaW5pZmljYXRpb24pIHsKICAgICAgZW5hYmxlTWluaWZpY2F0aW9uID0gZmFsc2U7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgd2FybmluZ3MgYW5kIGhpbnRzIGFyZSBzaG93biBmb3IgYWxsIHBhY2thZ2VzLgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IHNob3dBbGxQYWNrYWdlV2FybmluZ3MgewogICAgcmV0dXJuIHNob3duUGFja2FnZVdhcm5pbmdzICE9IG51bGwgJiYgc2hvd25QYWNrYWdlV2FybmluZ3MuaXNFbXB0eTsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB3YXJuaW5ncyBhbmQgaGludHMgYXJlIGhpZGRlbiBmb3IgYWxsIHBhY2thZ2VzLgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGhpZGVQYWNrYWdlV2FybmluZ3MgPT4gc2hvd25QYWNrYWdlV2FybmluZ3MgPT0gbnVsbDsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHdhcm5pbmdzIHNob3VsZCBiZSBzaG91bGQgZm9yIFt1cmldLgogIEBvdmVycmlkZQogIGJvb2wgc2hvd1BhY2thZ2VXYXJuaW5nc0ZvcihVcmkgdXJpKSB7CiAgICBpZiAoc2hvd0FsbFBhY2thZ2VXYXJuaW5ncykgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChzaG93blBhY2thZ2VXYXJuaW5ncyAhPSBudWxsKSB7CiAgICAgIHJldHVybiB1cmkuc2NoZW1lID09ICdwYWNrYWdlJyAmJgogICAgICAgICAgc2hvd25QYWNrYWdlV2FybmluZ3MuY29udGFpbnModXJpLnBhdGhTZWdtZW50cy5maXJzdCk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgovLy8gUG9saWN5IGZvciB3aGF0IHRvIGRvIHdpdGggYSB0eXBlIGFzc2VydGlvbiBjaGVjay4KLy8vCi8vLyBUaGlzIGVudW0tbGlrZSBjbGFzcyBpcyB1c2VkIHRvIGNvbmZpZ3VyZSBob3cgdGhlIGNvbXBpbGVyIHRyZWF0cyB0eXBlCi8vLyBhc3NlcnRpb25zIGR1cmluZyBnbG9iYWwgdHlwZSBpbmZlcmVuY2UgYW5kIGNvZGVnZW4uCmNsYXNzIENoZWNrUG9saWN5IHsKICAvLy8gV2hldGhlciB0aGUgdHlwZSBhc3NlcnRpb24gc2hvdWxkIGJlIHRydXN0ZWQuCiAgZmluYWwgYm9vbCBpc1RydXN0ZWQ7CgogIC8vLyBXaGV0aGVyIHRoZSB0eXBlIGFzc2VydGlvbiBzaG91bGQgYmUgZW1pdHRlZCBhbmQgY2hlY2tlZC4KICBmaW5hbCBib29sIGlzRW1pdHRlZDsKCiAgY29uc3QgQ2hlY2tQb2xpY3koe3RoaXMuaXNUcnVzdGVkOiBmYWxzZSwgdGhpcy5pc0VtaXR0ZWQ6IGZhbHNlfSk7CgogIHN0YXRpYyBjb25zdCB0cnVzdGVkID0gY29uc3QgQ2hlY2tQb2xpY3koaXNUcnVzdGVkOiB0cnVlKTsKICBzdGF0aWMgY29uc3QgY2hlY2tlZCA9IGNvbnN0IENoZWNrUG9saWN5KGlzRW1pdHRlZDogdHJ1ZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdDaGVja1BvbGljeShpc1RydXN0ZWQ9JGlzVHJ1c3RlZCwnCiAgICAgICdpc0VtaXR0ZWQ9JGlzRW1pdHRlZCknOwp9CgpTdHJpbmcgX2V4dHJhY3RTdHJpbmdPcHRpb24oCiAgICBMaXN0PFN0cmluZz4gb3B0aW9ucywgU3RyaW5nIHByZWZpeCwgU3RyaW5nIGRlZmF1bHRWYWx1ZSkgewogIGZvciAoU3RyaW5nIG9wdGlvbiBpbiBvcHRpb25zKSB7CiAgICBpZiAob3B0aW9uLnN0YXJ0c1dpdGgocHJlZml4KSkgewogICAgICByZXR1cm4gb3B0aW9uLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKTsKICAgIH0KICB9CiAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKfQoKVXJpIF9leHRyYWN0VXJpT3B0aW9uKExpc3Q8U3RyaW5nPiBvcHRpb25zLCBTdHJpbmcgcHJlZml4KSB7CiAgU3RyaW5nIG9wdGlvbiA9IF9leHRyYWN0U3RyaW5nT3B0aW9uKG9wdGlvbnMsIHByZWZpeCwgbnVsbCk7CiAgcmV0dXJuIChvcHRpb24gPT0gbnVsbCkgPyBudWxsIDogVXJpLnBhcnNlKG9wdGlvbik7Cn0KCmludCBfZXh0cmFjdEludE9wdGlvbihMaXN0PFN0cmluZz4gb3B0aW9ucywgU3RyaW5nIHByZWZpeCkgewogIFN0cmluZyBvcHRpb24gPSBfZXh0cmFjdFN0cmluZ09wdGlvbihvcHRpb25zLCBwcmVmaXgsIG51bGwpOwogIHJldHVybiAob3B0aW9uID09IG51bGwpID8gbnVsbCA6IGludC5wYXJzZShvcHRpb24pOwp9Cgpib29sIF9oYXNPcHRpb24oTGlzdDxTdHJpbmc+IG9wdGlvbnMsIFN0cmluZyBvcHRpb24pIHsKICByZXR1cm4gb3B0aW9ucy5pbmRleE9mKG9wdGlvbikgPj0gMDsKfQoKLy8vIEV4dHJhY3QgbGlzdCBvZiBjb21tYSBzZXBhcmF0ZWQgdmFsdWVzIHByb3ZpZGVkIGZvciBbZmxhZ10uIFJldHVybnMgYW4KLy8vIGVtcHR5IGxpc3QgaWYgW29wdGlvbl0gY29udGFpbiBbZmxhZ10gd2l0aG91dCBhcmd1bWVudHMuIFJldHVybnMgYG51bGxgIGlmCi8vLyBbb3B0aW9uXSBkb2Vzbid0IGNvbnRhaW4gW2ZsYWddIHdpdGggb3Igd2l0aG91dCBhcmd1bWVudHMuCkxpc3Q8U3RyaW5nPiBfZXh0cmFjdE9wdGlvbmFsQ3N2T3B0aW9uKExpc3Q8U3RyaW5nPiBvcHRpb25zLCBTdHJpbmcgZmxhZykgewogIFN0cmluZyBwcmVmaXggPSAnJGZsYWc9JzsKICBmb3IgKFN0cmluZyBvcHRpb24gaW4gb3B0aW9ucykgewogICAgaWYgKG9wdGlvbiA9PSBmbGFnKSB7CiAgICAgIHJldHVybiBjb25zdCA8U3RyaW5nPltdOwogICAgfQogICAgaWYgKG9wdGlvbi5zdGFydHNXaXRoKGZsYWcpKSB7CiAgICAgIHJldHVybiBvcHRpb24uc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpLnNwbGl0KCcsJyk7CiAgICB9CiAgfQogIHJldHVybiBudWxsOwp9CgovLy8gRXh0cmFjdCBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCBVcmlzIHByb3ZpZGVkIGZvciBbZmxhZ10uIFJldHVybnMgYW4KLy8vIGVtcHR5IGxpc3QgaWYgW29wdGlvbl0gY29udGFpbiBbZmxhZ10gd2l0aG91dCBhcmd1bWVudHMuIFJldHVybnMgYG51bGxgIGlmCi8vLyBbb3B0aW9uXSBkb2Vzbid0IGNvbnRhaW4gW2ZsYWddIHdpdGggb3Igd2l0aG91dCBhcmd1bWVudHMuCkxpc3Q8VXJpPiBfZXh0cmFjdFVyaUxpc3RPcHRpb24oTGlzdDxTdHJpbmc+IG9wdGlvbnMsIFN0cmluZyBmbGFnKSB7CiAgTGlzdDxTdHJpbmc+IHN0cmluZ1VyaXMgPSBfZXh0cmFjdE9wdGlvbmFsQ3N2T3B0aW9uKG9wdGlvbnMsIGZsYWcpOwogIGlmIChzdHJpbmdVcmlzID09IG51bGwpIHJldHVybiBudWxsOwogIHJldHVybiBzdHJpbmdVcmlzLm1hcChVcmkucGFyc2UpLnRvTGlzdCgpOwp9CgpNYXA8ZmUuRXhwZXJpbWVudGFsRmxhZywgYm9vbD4gX2V4dHJhY3RFeHBlcmltZW50cyhMaXN0PFN0cmluZz4gb3B0aW9ucykgewogIExpc3Q8U3RyaW5nPiBleHBlcmltZW50cyA9CiAgICAgIF9leHRyYWN0T3B0aW9uYWxDc3ZPcHRpb24ob3B0aW9ucywgRmxhZ3MuZW5hYmxlTGFuZ3VhZ2VFeHBlcmltZW50cyk7CiAgcmV0dXJuIGZlLnBhcnNlRXhwZXJpbWVudGFsRmxhZ3MoCiAgICAgIGV4cGVyaW1lbnRzLCAoU3RyaW5nIGVycm9yKSA9PiB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihlcnJvcikpOwp9Cgpjb25zdCBTdHJpbmcgX1VOREVURVJNSU5FRF9CVUlMRF9JRCA9ICJidWlsZCBudW1iZXIgY291bGQgbm90IGJlIGRldGVybWluZWQiOwqCawBOTjwBHQFAAS4ZATYjHQE5GgEvHQEsHQEpGgFHIwFIIAE9KAIBUE4YNUESAR0GNxMBMgY1FQEkBksiBk8PBlFRGR4BPQZOIBMBNgZCFAEwBkQWATQGQxcBSBMYAUwPBk5OURklAVENPgErOwEyHkMBOz4BTCslAUYnAUYnASkrAU8xPAFQQSEBSiAWAUpRSTIGUEoWIQFRTU1MTAZQMwFENiABUEwmJAFMDB4BQgwhAT8MIQE8DB4BS0kyLgEwJQE4LgFJJwFPS0oZAU8jKAFLOAZNQCMBJSUjAUhQLiUBUVAsAUYlAU4hAS4RATQhATUYAUkUAS4ZAT4uAUsgATMjASscAUkcJwFCBkkrATsGSTIBTk4MBkkrATcGSS4BTSkBUC0hAUsxIwFQFSEBTCEYAVAoJQEqBictATIrAUEkAT4GTA4uATghAUMGPzwGJyYBRiABOxQBSy8VATclNwFANT85JkdBBiE+TyE8ITwST0FHRy1IQTxHQR9IMkVNTyhDITw3Ijo/QydETzMnQjxCJUBNKENHRTkbUUNLPSE8NyhDRSM+HENLRzVDG0ZHSU1PTE41UAQBFE5QFC1HBjgfVwY4ThwGQkIGJEdNBgQBGSIeIQYBIlEyHwYBJSQgJScIJCMnCCQjCCQgCAYBTS0eOUA5DTlAOQYXPA08BgEgIgYEAUcMJEkEAUgMQAE9DCkiEwYoKEEGEgQCATcESzkUNBgBQBgBRQE9PQEMOx8CAR1AIyUuBgQXAgE9PzYCAT0/NgIBNycCAUtPP0wcIxofBiM5BgQPAgFJTz9FRictAgFLHUskRgIBTgEhcGFja2FnZTpjb21waWxlci9zcmMvb3B0aW9ucy5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NvdXJjZV9maWxlX3Byb3ZpZGVyLmRhcnTAAEhtLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgc291cmNlX2ZpbGVfcHJvdmlkZXI7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6aW8nOwppbXBvcnQgJ2RhcnQ6bWF0aCcgYXMgbWF0aDsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcgYXMgZmU7CgppbXBvcnQgJy4uL2NvbXBpbGVyLmRhcnQnIGFzIGFwaSBzaG93IERpYWdub3N0aWM7CmltcG9ydCAnLi4vY29tcGlsZXJfbmV3LmRhcnQnIGFzIGFwaTsKaW1wb3J0ICcuLi9jb21waWxlcl9uZXcuZGFydCc7CmltcG9ydCAnY29sb3JzLmRhcnQnIGFzIGNvbG9yczsKaW1wb3J0ICdkYXJ0MmpzLmRhcnQnIHNob3cgQWJvcnRMZWc7CmltcG9ydCAnZmlsZW5hbWVzLmRhcnQnOwppbXBvcnQgJ2lvL3NvdXJjZV9maWxlLmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgU291cmNlRmlsZVByb3ZpZGVyIGltcGxlbWVudHMgQ29tcGlsZXJJbnB1dCB7CiAgYm9vbCBpc1dpbmRvd3MgPSAoUGxhdGZvcm0ub3BlcmF0aW5nU3lzdGVtID09ICd3aW5kb3dzJyk7CiAgVXJpIGN3ZCA9IGN1cnJlbnREaXJlY3Rvcnk7CiAgTWFwPFVyaSwgYXBpLklucHV0PiB1dGY4U291cmNlRmlsZXMgPSA8VXJpLCBhcGkuSW5wdXQ+e307CiAgTWFwPFVyaSwgYXBpLklucHV0PiBiaW5hcnlTb3VyY2VGaWxlcyA9IDxVcmksIGFwaS5JbnB1dD57fTsKICBpbnQgZGFydENoYXJhY3RlcnNSZWFkID0gMDsKCiAgRnV0dXJlPGFwaS5JbnB1dDxMaXN0PGludD4+PiByZWFkQnl0ZXNGcm9tVXJpKAogICAgICBVcmkgcmVzb3VyY2VVcmksIGFwaS5JbnB1dEtpbmQgaW5wdXRLaW5kKSB7CiAgICBpZiAoIXJlc291cmNlVXJpLmlzQWJzb2x1dGUpIHsKICAgICAgcmVzb3VyY2VVcmkgPSBjd2QucmVzb2x2ZVVyaShyZXNvdXJjZVVyaSk7CiAgICB9CiAgICBhcGkuSW5wdXQ8TGlzdDxpbnQ+PiBpbnB1dDsKICAgIHN3aXRjaCAoaW5wdXRLaW5kKSB7CiAgICAgIGNhc2UgYXBpLklucHV0S2luZC5VVEY4OgogICAgICAgIGlucHV0ID0gdXRmOFNvdXJjZUZpbGVzW3Jlc291cmNlVXJpXTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBhcGkuSW5wdXRLaW5kLmJpbmFyeToKICAgICAgICBpbnB1dCA9IGJpbmFyeVNvdXJjZUZpbGVzW3Jlc291cmNlVXJpXTsKICAgICAgICBicmVhazsKICAgIH0KICAgIGlmIChpbnB1dCAhPSBudWxsKSByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShpbnB1dCk7CgogICAgaWYgKHJlc291cmNlVXJpLnNjaGVtZSA9PSAnZmlsZScpIHsKICAgICAgcmV0dXJuIF9yZWFkRnJvbUZpbGUocmVzb3VyY2VVcmksIGlucHV0S2luZCk7CiAgICB9IGVsc2UgaWYgKHJlc291cmNlVXJpLnNjaGVtZSA9PSAnaHR0cCcgfHwgcmVzb3VyY2VVcmkuc2NoZW1lID09ICdodHRwcycpIHsKICAgICAgcmV0dXJuIF9yZWFkRnJvbUh0dHAocmVzb3VyY2VVcmksIGlucHV0S2luZCk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiVW5rbm93biBzY2hlbWUgaW4gdXJpICckcmVzb3VyY2VVcmknIik7CiAgICB9CiAgfQoKICBhcGkuSW5wdXQgX3JlYWRGcm9tRmlsZVN5bmMoVXJpIHJlc291cmNlVXJpLCBhcGkuSW5wdXRLaW5kIGlucHV0S2luZCkgewogICAgYXNzZXJ0KHJlc291cmNlVXJpLnNjaGVtZSA9PSAnZmlsZScpOwogICAgTGlzdDxpbnQ+IHNvdXJjZTsKICAgIHRyeSB7CiAgICAgIHNvdXJjZSA9IHJlYWRBbGwocmVzb3VyY2VVcmkudG9GaWxlUGF0aCgpLAogICAgICAgICAgemVyb1Rlcm1pbmF0ZWQ6IGlucHV0S2luZCA9PSBhcGkuSW5wdXRLaW5kLlVURjgpOwogICAgfSBvbiBGaWxlU3lzdGVtRXhjZXB0aW9uIGNhdGNoIChleCkgewogICAgICBTdHJpbmcgbWVzc2FnZSA9IGV4Lm9zRXJyb3I/Lm1lc3NhZ2U7CiAgICAgIFN0cmluZyBkZXRhaWwgPSBtZXNzYWdlICE9IG51bGwgPyAnICgkbWVzc2FnZSknIDogJyc7CiAgICAgIHRocm93ICJFcnJvciByZWFkaW5nICcke3JlbGF0aXZpemVVcmkocmVzb3VyY2VVcmkpfScgJGRldGFpbCI7CiAgICB9CiAgICBkYXJ0Q2hhcmFjdGVyc1JlYWQgKz0gc291cmNlLmxlbmd0aDsKICAgIGFwaS5JbnB1dCBpbnB1dDsKICAgIHN3aXRjaCAoaW5wdXRLaW5kKSB7CiAgICAgIGNhc2UgYXBpLklucHV0S2luZC5VVEY4OgogICAgICAgIGlucHV0ID0gdXRmOFNvdXJjZUZpbGVzW3Jlc291cmNlVXJpXSA9IG5ldyBDYWNoaW5nVXRmOEJ5dGVzU291cmNlRmlsZSgKICAgICAgICAgICAgcmVzb3VyY2VVcmksIHJlbGF0aXZpemVVcmkocmVzb3VyY2VVcmkpLCBzb3VyY2UpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIGFwaS5JbnB1dEtpbmQuYmluYXJ5OgogICAgICAgIGlucHV0ID0KICAgICAgICAgICAgYmluYXJ5U291cmNlRmlsZXNbcmVzb3VyY2VVcmldID0gbmV3IEJpbmFyeShyZXNvdXJjZVVyaSwgc291cmNlKTsKICAgICAgICBicmVhazsKICAgIH0KICAgIHJldHVybiBpbnB1dDsKICB9CgogIC8vLyBSZWFkIFtyZXNvdXJjZVVyaV0gZGlyZWN0bHkgYXMgYSBVVEYtOCBmaWxlLiBJZiByZWFkaW5nIGZhaWxzLCBgbnVsbGAgaXMKICAvLy8gcmV0dXJuZWQuCiAgYXBpLklucHV0IGF1dG9SZWFkRnJvbUZpbGUoVXJpIHJlc291cmNlVXJpKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gX3JlYWRGcm9tRmlsZVN5bmMocmVzb3VyY2VVcmksIElucHV0S2luZC5VVEY4KTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgLy8gU2lsZW5jZSB0aGUgZXJyb3IuIFRoZSBbcmVzb3VyY2VVcmldIHdhcyBub3QgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyIGFuZAogICAgICAvLyB3YXMgb25seSBuZWVkZWQgdG8gZ2l2ZSBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMuCiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEZ1dHVyZTxhcGkuSW5wdXQ8TGlzdDxpbnQ+Pj4gX3JlYWRGcm9tRmlsZSgKICAgICAgVXJpIHJlc291cmNlVXJpLCBhcGkuSW5wdXRLaW5kIGlucHV0S2luZCkgewogICAgYXBpLklucHV0PExpc3Q8aW50Pj4gaW5wdXQ7CiAgICB0cnkgewogICAgICBpbnB1dCA9IF9yZWFkRnJvbUZpbGVTeW5jKHJlc291cmNlVXJpLCBpbnB1dEtpbmQpOwogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcihlKTsKICAgIH0KICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKGlucHV0KTsKICB9CgogIEZ1dHVyZTxhcGkuSW5wdXQ8TGlzdDxpbnQ+Pj4gX3JlYWRGcm9tSHR0cCgKICAgICAgVXJpIHJlc291cmNlVXJpLCBhcGkuSW5wdXRLaW5kIGlucHV0S2luZCkgewogICAgYXNzZXJ0KHJlc291cmNlVXJpLnNjaGVtZSA9PSAnaHR0cCcpOwogICAgSHR0cENsaWVudCBjbGllbnQgPSBuZXcgSHR0cENsaWVudCgpOwogICAgcmV0dXJuIGNsaWVudAogICAgICAgIC5nZXRVcmwocmVzb3VyY2VVcmkpCiAgICAgICAgLnRoZW4oKEh0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QpID0+IHJlcXVlc3QuY2xvc2UoKSkKICAgICAgICAudGhlbigoSHR0cENsaWVudFJlc3BvbnNlIHJlc3BvbnNlKSB7CiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9IEh0dHBTdGF0dXMub2spIHsKICAgICAgICBTdHJpbmcgbXNnID0gJ0ZhaWx1cmUgZ2V0dGluZyAkcmVzb3VyY2VVcmk6ICcKICAgICAgICAgICAgJyR7cmVzcG9uc2Uuc3RhdHVzQ29kZX0gJHtyZXNwb25zZS5yZWFzb25QaHJhc2V9JzsKICAgICAgICB0aHJvdyBtc2c7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlLnRvTGlzdCgpOwogICAgfSkudGhlbigoTGlzdDxMaXN0PGludD4+IHNwbGl0Q29udGVudCkgewogICAgICBpbnQgdG90YWxMZW5ndGggPSBzcGxpdENvbnRlbnQuZm9sZCgwLCAoaW50IG9sZCwgTGlzdCBsaXN0KSB7CiAgICAgICAgcmV0dXJuIG9sZCArIGxpc3QubGVuZ3RoOwogICAgICB9KTsKICAgICAgVWludDhMaXN0IHJlc3VsdCA9IG5ldyBVaW50OExpc3QodG90YWxMZW5ndGgpOwogICAgICBpbnQgb2Zmc2V0ID0gMDsKICAgICAgZm9yIChMaXN0PGludD4gY29udGVudFBhcnQgaW4gc3BsaXRDb250ZW50KSB7CiAgICAgICAgcmVzdWx0LnNldFJhbmdlKG9mZnNldCwgb2Zmc2V0ICsgY29udGVudFBhcnQubGVuZ3RoLCBjb250ZW50UGFydCk7CiAgICAgICAgb2Zmc2V0ICs9IGNvbnRlbnRQYXJ0Lmxlbmd0aDsKICAgICAgfQogICAgICBkYXJ0Q2hhcmFjdGVyc1JlYWQgKz0gdG90YWxMZW5ndGg7CiAgICAgIGFwaS5JbnB1dDxMaXN0PGludD4+IGlucHV0OwogICAgICBzd2l0Y2ggKGlucHV0S2luZCkgewogICAgICAgIGNhc2UgYXBpLklucHV0S2luZC5VVEY4OgogICAgICAgICAgaW5wdXQgPSB1dGY4U291cmNlRmlsZXNbcmVzb3VyY2VVcmldID0gbmV3IENhY2hpbmdVdGY4Qnl0ZXNTb3VyY2VGaWxlKAogICAgICAgICAgICAgIHJlc291cmNlVXJpLCByZXNvdXJjZVVyaS50b1N0cmluZygpLCByZXN1bHQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBhcGkuSW5wdXRLaW5kLmJpbmFyeToKICAgICAgICAgIGlucHV0ID0KICAgICAgICAgICAgICBiaW5hcnlTb3VyY2VGaWxlc1tyZXNvdXJjZVVyaV0gPSBuZXcgQmluYXJ5KHJlc291cmNlVXJpLCByZXN1bHQpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcmV0dXJuIGlucHV0OwogICAgfSk7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuIG5vIGxvbmdlciBuZWVkZWQgZm9yIHRoZSBvbGQgY29tcGlsZXIKICAvLyBBUEkuCiAgRnV0dXJlIC8qIDxMaXN0PGludD4gfCBTdHJpbmc+ICovIGNhbGwoVXJpIHJlc291cmNlVXJpKSB7CiAgICB0aHJvdyAidW5pbXBsZW1lbnRlZCI7CiAgfQoKICByZWxhdGl2aXplVXJpKFVyaSB1cmkpID0+IGZlLnJlbGF0aXZpemVVcmkoY3dkLCB1cmksIGlzV2luZG93cyk7CgogIFNvdXJjZUZpbGU8TGlzdDxpbnQ+PiBnZXRVdGY4U291cmNlRmlsZShVcmkgcmVzb3VyY2VVcmkpIHsKICAgIHJldHVybiB1dGY4U291cmNlRmlsZXNbcmVzb3VyY2VVcmldOwogIH0KCiAgSXRlcmFibGU8VXJpPiBnZXRTb3VyY2VVcmlzKCkgewogICAgU2V0PFVyaT4gdXJpcyA9IG5ldyBTZXQ8VXJpPigpOwogICAgdXJpcy5hZGRBbGwodXRmOFNvdXJjZUZpbGVzLmtleXMpOwogICAgdXJpcy5hZGRBbGwoYmluYXJ5U291cmNlRmlsZXMua2V5cyk7CiAgICByZXR1cm4gdXJpczsKICB9Cn0KCkxpc3Q8aW50PiByZWFkQWxsKFN0cmluZyBmaWxlbmFtZSwge2Jvb2wgemVyb1Rlcm1pbmF0ZWQ6IHRydWV9KSB7CiAgUmFuZG9tQWNjZXNzRmlsZSBmaWxlID0gKG5ldyBGaWxlKGZpbGVuYW1lKSkub3BlblN5bmMoKTsKICBpbnQgbGVuZ3RoID0gZmlsZS5sZW5ndGhTeW5jKCk7CiAgaW50IGJ1ZmZlckxlbmd0aCA9IGxlbmd0aDsKICBpZiAoemVyb1Rlcm1pbmF0ZWQpIHsKICAgIC8vICsxIHRvIGhhdmUgYSAwIHRlcm1pbmF0ZWQgbGlzdCwgc2VlIFtTY2FubmVyXS4KICAgIGJ1ZmZlckxlbmd0aCsrOwogIH0KICB2YXIgYnVmZmVyID0gbmV3IFVpbnQ4TGlzdChidWZmZXJMZW5ndGgpOwogIGZpbGUucmVhZEludG9TeW5jKGJ1ZmZlciwgMCwgbGVuZ3RoKTsKICBmaWxlLmNsb3NlU3luYygpOwogIHJldHVybiBidWZmZXI7Cn0KCmNsYXNzIENvbXBpbGVyU291cmNlRmlsZVByb3ZpZGVyIGV4dGVuZHMgU291cmNlRmlsZVByb3ZpZGVyIHsKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuIG5vIGxvbmdlciBuZWVkZWQgZm9yIHRoZSBvbGQgY29tcGlsZXIKICAvLyBBUEkuCiAgQG92ZXJyaWRlCiAgRnV0dXJlPExpc3Q8aW50Pj4gY2FsbChVcmkgcmVzb3VyY2VVcmkpID0+CiAgICAgIHJlYWRGcm9tVXJpKHJlc291cmNlVXJpKS50aGVuKChpbnB1dCkgPT4gaW5wdXQuZGF0YSk7CgogIEBvdmVycmlkZQogIEZ1dHVyZTxhcGkuSW5wdXQ8TGlzdDxpbnQ+Pj4gcmVhZEZyb21VcmkoVXJpIHVyaSwKICAgICAgICAgIHtJbnB1dEtpbmQgaW5wdXRLaW5kOiBJbnB1dEtpbmQuVVRGOH0pID0+CiAgICAgIHJlYWRCeXRlc0Zyb21VcmkodXJpLCBpbnB1dEtpbmQpOwp9CgpjbGFzcyBGb3JtYXR0aW5nRGlhZ25vc3RpY0hhbmRsZXIgaW1wbGVtZW50cyBDb21waWxlckRpYWdub3N0aWNzIHsKICBmaW5hbCBTb3VyY2VGaWxlUHJvdmlkZXIgcHJvdmlkZXI7CiAgYm9vbCBzaG93V2FybmluZ3MgPSB0cnVlOwogIGJvb2wgc2hvd0hpbnRzID0gdHJ1ZTsKICBib29sIHZlcmJvc2UgPSBmYWxzZTsKICBib29sIGlzQWJvcnRpbmcgPSBmYWxzZTsKICBib29sIGVuYWJsZUNvbG9ycyA9IGZhbHNlOwogIGJvb2wgdGhyb3dPbkVycm9yID0gZmFsc2U7CiAgYm9vbCBhdXRvUmVhZEZpbGVVcmkgPSBmYWxzZTsKICBpbnQgdGhyb3dPbkVycm9yQ291bnQgPSAwOwogIGFwaS5EaWFnbm9zdGljIGxhc3RLaW5kID0gbnVsbDsKICBpbnQgZmF0YWxDb3VudCA9IDA7CgogIGZpbmFsIGludCBGQVRBTCA9IGFwaS5EaWFnbm9zdGljLkNSQVNILm9yZGluYWwgfCBhcGkuRGlhZ25vc3RpYy5FUlJPUi5vcmRpbmFsOwogIGZpbmFsIGludCBJTkZPID0KICAgICAgYXBpLkRpYWdub3N0aWMuSU5GTy5vcmRpbmFsIHwgYXBpLkRpYWdub3N0aWMuVkVSQk9TRV9JTkZPLm9yZGluYWw7CgogIEZvcm1hdHRpbmdEaWFnbm9zdGljSGFuZGxlcihbU291cmNlRmlsZVByb3ZpZGVyIHByb3ZpZGVyXSkKICAgICAgOiB0aGlzLnByb3ZpZGVyID0KICAgICAgICAgICAgKHByb3ZpZGVyID09IG51bGwpID8gbmV3IENvbXBpbGVyU291cmNlRmlsZVByb3ZpZGVyKCkgOiBwcm92aWRlcjsKCiAgdm9pZCBpbmZvKHZhciBtZXNzYWdlLCBbYXBpLkRpYWdub3N0aWMga2luZCA9IGFwaS5EaWFnbm9zdGljLlZFUkJPU0VfSU5GT10pIHsKICAgIGlmICghdmVyYm9zZSAmJiBraW5kID09IGFwaS5EaWFnbm9zdGljLlZFUkJPU0VfSU5GTykgcmV0dXJuOwogICAgaWYgKGVuYWJsZUNvbG9ycykgewogICAgICBwcmludCgnJHtjb2xvcnMuZ3JlZW4oIkluZm86Iil9ICRtZXNzYWdlJyk7CiAgICB9IGVsc2UgewogICAgICBwcmludCgnSW5mbzogJG1lc3NhZ2UnKTsKICAgIH0KICB9CgogIC8vLyBBZGRzIFtraW5kXSBzcGVjaWZpYyBwcmVmaXggdG8gW21lc3NhZ2VdLgogIFN0cmluZyBwcmVmaXhNZXNzYWdlKFN0cmluZyBtZXNzYWdlLCBhcGkuRGlhZ25vc3RpYyBraW5kKSB7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBhcGkuRGlhZ25vc3RpYy5FUlJPUjoKICAgICAgICByZXR1cm4gJ0Vycm9yOiAkbWVzc2FnZSc7CiAgICAgIGNhc2UgYXBpLkRpYWdub3N0aWMuV0FSTklORzoKICAgICAgICByZXR1cm4gJ1dhcm5pbmc6ICRtZXNzYWdlJzsKICAgICAgY2FzZSBhcGkuRGlhZ25vc3RpYy5ISU5UOgogICAgICAgIHJldHVybiAnSGludDogJG1lc3NhZ2UnOwogICAgICBjYXNlIGFwaS5EaWFnbm9zdGljLkNSQVNIOgogICAgICAgIHJldHVybiAnSW50ZXJuYWwgRXJyb3I6ICRtZXNzYWdlJzsKICAgICAgY2FzZSBhcGkuRGlhZ25vc3RpYy5JTkZPOgogICAgICBjYXNlIGFwaS5EaWFnbm9zdGljLlZFUkJPU0VfSU5GTzoKICAgICAgICByZXR1cm4gJ0luZm86ICRtZXNzYWdlJzsKICAgIH0KICAgIHRocm93ICdVbmV4cGVjdGVkIGRpYWdub3N0aWMga2luZDogJGtpbmQgKCR7a2luZC5vcmRpbmFsfSknOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnQodmFyIGNvZGUsIFVyaSB1cmksIGludCBiZWdpbiwgaW50IGVuZCwgU3RyaW5nIG1lc3NhZ2UsCiAgICAgIGFwaS5EaWFnbm9zdGljIGtpbmQpIHsKICAgIGlmIChpc0Fib3J0aW5nKSByZXR1cm47CiAgICBpc0Fib3J0aW5nID0gKGtpbmQgPT0gYXBpLkRpYWdub3N0aWMuQ1JBU0gpOwoKICAgIGJvb2wgZmF0YWwgPSAoa2luZC5vcmRpbmFsICYgRkFUQUwpICE9IDA7CiAgICBib29sIGlzSW5mbyA9IChraW5kLm9yZGluYWwgJiBJTkZPKSAhPSAwOwogICAgaWYgKGlzSW5mbyAmJiB1cmkgPT0gbnVsbCAmJiBraW5kICE9IGFwaS5EaWFnbm9zdGljLklORk8pIHsKICAgICAgaW5mbyhtZXNzYWdlLCBraW5kKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIG1lc3NhZ2UgPSBwcmVmaXhNZXNzYWdlKG1lc3NhZ2UsIGtpbmQpOwoKICAgIC8vIFtsYXN0S2luZF0gcmVjb3JkcyB0aGUgcHJldmlvdXMgbm9uLUlORk8ga2luZCB3ZSBzYXcuCiAgICAvLyBUaGlzIGlzIHVzZWQgdG8gc3VwcHJlc3MgaW5mbyBhYm91dCBhIHdhcm5pbmcgd2hlbiB3YXJuaW5ncyBhcmUKICAgIC8vIHN1cHByZXNzZWQsIGFuZCBzaW1pbGFyIGZvciBoaW50cy4KICAgIGlmIChraW5kICE9IGFwaS5EaWFnbm9zdGljLklORk8pIHsKICAgICAgbGFzdEtpbmQgPSBraW5kOwogICAgfQogICAgdmFyIGNvbG9yOwogICAgaWYgKGtpbmQgPT0gYXBpLkRpYWdub3N0aWMuRVJST1IpIHsKICAgICAgY29sb3IgPSBjb2xvcnMucmVkOwogICAgfSBlbHNlIGlmIChraW5kID09IGFwaS5EaWFnbm9zdGljLldBUk5JTkcpIHsKICAgICAgaWYgKCFzaG93V2FybmluZ3MpIHJldHVybjsKICAgICAgY29sb3IgPSBjb2xvcnMubWFnZW50YTsKICAgIH0gZWxzZSBpZiAoa2luZCA9PSBhcGkuRGlhZ25vc3RpYy5ISU5UKSB7CiAgICAgIGlmICghc2hvd0hpbnRzKSByZXR1cm47CiAgICAgIGNvbG9yID0gY29sb3JzLmN5YW47CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gYXBpLkRpYWdub3N0aWMuQ1JBU0gpIHsKICAgICAgY29sb3IgPSBjb2xvcnMucmVkOwogICAgfSBlbHNlIGlmIChraW5kID09IGFwaS5EaWFnbm9zdGljLklORk8pIHsKICAgICAgaWYgKGxhc3RLaW5kID09IGFwaS5EaWFnbm9zdGljLldBUk5JTkcgJiYgIXNob3dXYXJuaW5ncykgcmV0dXJuOwogICAgICBpZiAobGFzdEtpbmQgPT0gYXBpLkRpYWdub3N0aWMuSElOVCAmJiAhc2hvd0hpbnRzKSByZXR1cm47CiAgICAgIGNvbG9yID0gY29sb3JzLmdyZWVuOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgJ1Vua25vd24ga2luZDogJGtpbmQgKCR7a2luZC5vcmRpbmFsfSknOwogICAgfQogICAgaWYgKCFlbmFibGVDb2xvcnMpIHsKICAgICAgY29sb3IgPSAoU3RyaW5nIHgpID0+IHg7CiAgICB9CiAgICBpZiAodXJpID09IG51bGwpIHsKICAgICAgcHJpbnQoJyR7Y29sb3IobWVzc2FnZSl9Jyk7CiAgICB9IGVsc2UgewogICAgICBhcGkuSW5wdXQgZmlsZSA9IHByb3ZpZGVyLmdldFV0ZjhTb3VyY2VGaWxlKHVyaSk7CiAgICAgIGlmIChmaWxlID09IG51bGwgJiYKICAgICAgICAgIGF1dG9SZWFkRmlsZVVyaSAmJgogICAgICAgICAgKHVyaS5zY2hlbWUgPT0gJ2ZpbGUnIHx8ICF1cmkuaXNBYnNvbHV0ZSkgJiYKICAgICAgICAgIHVyaS5wYXRoLmVuZHNXaXRoKCcuZGFydCcpKSB7CiAgICAgICAgaWYgKCF1cmkuaXNBYnNvbHV0ZSkgewogICAgICAgICAgdXJpID0gcHJvdmlkZXIuY3dkLnJlc29sdmVVcmkodXJpKTsKICAgICAgICB9CiAgICAgICAgLy8gV2hlbiByZWFkaW5nIGZyb20gLmRpbGwgZmlsZXMsIHRoZSBvcmlnaW5hbCBzb3VyY2UgZmlsZXMgaGF2ZW4ndCBiZWVuCiAgICAgICAgLy8gbG9hZGVkLiBMb2FkIHRoZSBmaWxlIGlmIHBvc3NpYmxlIHRvIHByb3ZpZGUgYSBiZXR0ZXIgZXJyb3IgbWVzc2FnZS4KICAgICAgICBmaWxlID0gcHJvdmlkZXIuYXV0b1JlYWRGcm9tRmlsZSh1cmkpOwogICAgICB9CiAgICAgIGlmIChmaWxlIGlzIFNvdXJjZUZpbGUpIHsKICAgICAgICBwcmludChmaWxlLmdldExvY2F0aW9uTWVzc2FnZShjb2xvcihtZXNzYWdlKSwgYmVnaW4sIGVuZCwKICAgICAgICAgICAgY29sb3JpemU6IGNvbG9yKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgU3RyaW5nIHBvc2l0aW9uID0gZW5kIC0gYmVnaW4gPiAwID8gJ0AkYmVnaW4rJHtlbmQgLSBiZWdpbn0nIDogJyc7CiAgICAgICAgcHJpbnQoJyR7cHJvdmlkZXIucmVsYXRpdml6ZVVyaSh1cmkpfSRwb3NpdGlvbjpcbicKICAgICAgICAgICAgJyR7Y29sb3IobWVzc2FnZSl9Jyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChmYXRhbCAmJiArK2ZhdGFsQ291bnQgPj0gdGhyb3dPbkVycm9yQ291bnQgJiYgdGhyb3dPbkVycm9yKSB7CiAgICAgIGlzQWJvcnRpbmcgPSB0cnVlOwogICAgICB0aHJvdyBuZXcgQWJvcnRMZWcobWVzc2FnZSk7CiAgICB9CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuIG5vIGxvbmdlciBuZWVkZWQgZm9yIHRoZSBvbGQgY29tcGlsZXIKICAvLyBBUEkuCiAgdm9pZCBjYWxsKFVyaSB1cmksIGludCBiZWdpbiwgaW50IGVuZCwgU3RyaW5nIG1lc3NhZ2UsIGFwaS5EaWFnbm9zdGljIGtpbmQpIHsKICAgIHJldHVybiByZXBvcnQobnVsbCwgdXJpLCBiZWdpbiwgZW5kLCBtZXNzYWdlLCBraW5kKTsKICB9Cn0KCnR5cGVkZWYgdm9pZCBNZXNzYWdlQ2FsbGJhY2soU3RyaW5nIG1lc3NhZ2UpOwoKY2xhc3MgUmFuZG9tQWNjZXNzRmlsZU91dHB1dFByb3ZpZGVyIGltcGxlbWVudHMgQ29tcGlsZXJPdXRwdXQgewogIGZpbmFsIFVyaSBvdXQ7CiAgZmluYWwgVXJpIHNvdXJjZU1hcE91dDsKICBmaW5hbCBNZXNzYWdlQ2FsbGJhY2sgb25JbmZvOwogIGZpbmFsIE1lc3NhZ2VDYWxsYmFjayBvbkZhaWx1cmU7CgogIGludCB0b3RhbENoYXJhY3RlcnNXcml0dGVuID0gMDsKICBpbnQgdG90YWxDaGFyYWN0ZXJzV3JpdHRlblByaW1hcnkgPSAwOwogIGludCB0b3RhbENoYXJhY3RlcnNXcml0dGVuSmF2YVNjcmlwdCA9IDA7CiAgaW50IHRvdGFsRGF0YVdyaXR0ZW4gPSAwOwoKICBMaXN0PFN0cmluZz4gYWxsT3V0cHV0RmlsZXMgPSA8U3RyaW5nPltdOwoKICBSYW5kb21BY2Nlc3NGaWxlT3V0cHV0UHJvdmlkZXIodGhpcy5vdXQsIHRoaXMuc291cmNlTWFwT3V0LAogICAgICB7dGhpcy5vbkluZm8sIHRoaXMub25GYWlsdXJlfSk7CgogIFVyaSBjcmVhdGVVcmkoU3RyaW5nIG5hbWUsIFN0cmluZyBleHRlbnNpb24sIE91dHB1dFR5cGUgdHlwZSkgewogICAgVXJpIHVyaTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVuaWZ5IGhhbmRsZSBvZiBbbmFtZV0gYW5kIFtleHRlbnNpb25dIHRvIHByZXBhcmUKICAgIC8vIGZvciB1c2luZyBhIHNpbmdsZSwgcG9zc2libHkgcmVsYXRpdmUsIFt1cmldIGFzIGlucHV0LgogICAgc3dpdGNoICh0eXBlKSB7CiAgICAgIGNhc2UgT3V0cHV0VHlwZS5qczoKICAgICAgICBpZiAobmFtZSA9PSAnJykgewogICAgICAgICAgdXJpID0gb3V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB1cmkgPSBvdXQucmVzb2x2ZSgnJG5hbWUuJGV4dGVuc2lvbicpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBPdXRwdXRUeXBlLnNvdXJjZU1hcDoKICAgICAgICBpZiAobmFtZSA9PSAnJykgewogICAgICAgICAgdXJpID0gc291cmNlTWFwT3V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB1cmkgPSBvdXQucmVzb2x2ZSgnJG5hbWUuJGV4dGVuc2lvbicpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBPdXRwdXRUeXBlLmpzUGFydDoKICAgICAgICB1cmkgPSBvdXQucmVzb2x2ZSgnJG5hbWUuJGV4dGVuc2lvbicpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE91dHB1dFR5cGUuZHVtcEluZm86CiAgICAgIGNhc2UgT3V0cHV0VHlwZS5kZWZlcnJlZE1hcDoKICAgICAgICBpZiAobmFtZSA9PSAnJykgewogICAgICAgICAgbmFtZSA9IG91dC5wYXRoU2VnbWVudHMubGFzdDsKICAgICAgICB9CiAgICAgICAgaWYgKGV4dGVuc2lvbiA9PSAnJykgewogICAgICAgICAgdXJpID0gb3V0LnJlc29sdmUobmFtZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHVyaSA9IG91dC5yZXNvbHZlKCckbmFtZS4kZXh0ZW5zaW9uJyk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE91dHB1dFR5cGUuZGVidWc6CiAgICAgICAgdXJpID0gb3V0LnJlc29sdmUoJyRuYW1lLiRleHRlbnNpb24nKTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBvbkZhaWx1cmUoJ1Vua25vd24gb3V0cHV0IHR5cGU6ICR0eXBlJyk7CiAgICB9CiAgICByZXR1cm4gdXJpOwogIH0KCiAgQG92ZXJyaWRlCiAgT3V0cHV0U2luayBjcmVhdGVPdXRwdXRTaW5rKFN0cmluZyBuYW1lLCBTdHJpbmcgZXh0ZW5zaW9uLCBPdXRwdXRUeXBlIHR5cGUpIHsKICAgIFVyaSB1cmkgPSBjcmVhdGVVcmkobmFtZSwgZXh0ZW5zaW9uLCB0eXBlKTsKICAgIGJvb2wgaXNQcmltYXJ5T3V0cHV0ID0gdXJpID09IG91dDsKCiAgICBpZiAodXJpLnNjaGVtZSAhPSAnZmlsZScpIHsKICAgICAgb25GYWlsdXJlKCdVbmhhbmRsZWQgc2NoZW1lICR7dXJpLnNjaGVtZX0gaW4gJHVyaS4nKTsKICAgIH0KCiAgICBSYW5kb21BY2Nlc3NGaWxlIG91dHB1dDsKICAgIHRyeSB7CiAgICAgIG91dHB1dCA9IG5ldyBGaWxlKHVyaS50b0ZpbGVQYXRoKCkpLm9wZW5TeW5jKG1vZGU6IEZpbGVNb2RlLndyaXRlKTsKICAgIH0gb24gRmlsZVN5c3RlbUV4Y2VwdGlvbiBjYXRjaCAoZSkgewogICAgICBvbkZhaWx1cmUoJyRlJyk7CiAgICB9CgogICAgYWxsT3V0cHV0RmlsZXMKICAgICAgICAuYWRkKGZlLnJlbGF0aXZpemVVcmkoY3VycmVudERpcmVjdG9yeSwgdXJpLCBQbGF0Zm9ybS5pc1dpbmRvd3MpKTsKCiAgICBpbnQgY2hhcmFjdGVyc1dyaXR0ZW4gPSAwOwoKICAgIHZvaWQgd3JpdGVTdHJpbmdTeW5jKFN0cmluZyBkYXRhKSB7CiAgICAgIC8vIFdyaXRlIHRoZSBkYXRhIGluIGNodW5rcyBvZiA4a2IsIG90aGVyd2lzZSB3ZSByaXNrIHJ1bm5pbmcgT09NLgogICAgICBpbnQgY2h1bmtTaXplID0gOCAqIDEwMjQ7CgogICAgICBpbnQgb2Zmc2V0ID0gMDsKICAgICAgd2hpbGUgKG9mZnNldCA8IGRhdGEubGVuZ3RoKSB7CiAgICAgICAgb3V0cHV0LndyaXRlU3RyaW5nU3luYygKICAgICAgICAgICAgZGF0YS5zdWJzdHJpbmcob2Zmc2V0LCBtYXRoLm1pbihvZmZzZXQgKyBjaHVua1NpemUsIGRhdGEubGVuZ3RoKSkpOwogICAgICAgIG9mZnNldCArPSBjaHVua1NpemU7CiAgICAgIH0KICAgICAgY2hhcmFjdGVyc1dyaXR0ZW4gKz0gZGF0YS5sZW5ndGg7CiAgICB9CgogICAgdm9pZCBvbkRvbmUoKSB7CiAgICAgIG91dHB1dC5jbG9zZVN5bmMoKTsKICAgICAgdG90YWxDaGFyYWN0ZXJzV3JpdHRlbiArPSBjaGFyYWN0ZXJzV3JpdHRlbjsKICAgICAgaWYgKGlzUHJpbWFyeU91dHB1dCkgewogICAgICAgIHRvdGFsQ2hhcmFjdGVyc1dyaXR0ZW5QcmltYXJ5ICs9IGNoYXJhY3RlcnNXcml0dGVuOwogICAgICB9CiAgICAgIGlmICh0eXBlID09IE91dHB1dFR5cGUuanMgfHwgdHlwZSA9PSBPdXRwdXRUeXBlLmpzUGFydCkgewogICAgICAgIHRvdGFsQ2hhcmFjdGVyc1dyaXR0ZW5KYXZhU2NyaXB0ICs9IGNoYXJhY3RlcnNXcml0dGVuOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5ldyBfT3V0cHV0U2lua1dyYXBwZXIod3JpdGVTdHJpbmdTeW5jLCBvbkRvbmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQmluYXJ5T3V0cHV0U2luayBjcmVhdGVCaW5hcnlTaW5rKFVyaSB1cmkpIHsKICAgIHVyaSA9IGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZVVyaSh1cmkpOwoKICAgIGFsbE91dHB1dEZpbGVzCiAgICAgICAgLmFkZChmZS5yZWxhdGl2aXplVXJpKGN1cnJlbnREaXJlY3RvcnksIHVyaSwgUGxhdGZvcm0uaXNXaW5kb3dzKSk7CgogICAgaWYgKHVyaS5zY2hlbWUgIT0gJ2ZpbGUnKSB7CiAgICAgIG9uRmFpbHVyZSgnVW5oYW5kbGVkIHNjaGVtZSAke3VyaS5zY2hlbWV9IGluICR1cmkuJyk7CiAgICB9CgogICAgUmFuZG9tQWNjZXNzRmlsZSBvdXRwdXQ7CiAgICB0cnkgewogICAgICBvdXRwdXQgPSBuZXcgRmlsZSh1cmkudG9GaWxlUGF0aCgpKS5vcGVuU3luYyhtb2RlOiBGaWxlTW9kZS53cml0ZSk7CiAgICB9IG9uIEZpbGVTeXN0ZW1FeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgb25GYWlsdXJlKCckZScpOwogICAgfQoKICAgIGludCBieXRlc1dyaXR0ZW4gPSAwOwoKICAgIHZvaWQgd3JpdGVCeXRlc1N5bmMoTGlzdDxpbnQ+IGRhdGEsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgICBvdXRwdXQud3JpdGVGcm9tU3luYyhkYXRhLCBzdGFydCwgZW5kKTsKICAgICAgYnl0ZXNXcml0dGVuICs9IChlbmQgPz8gZGF0YS5sZW5ndGgpIC0gc3RhcnQ7CiAgICB9CgogICAgdm9pZCBvbkRvbmUoKSB7CiAgICAgIG91dHB1dC5jbG9zZVN5bmMoKTsKICAgICAgdG90YWxEYXRhV3JpdHRlbiArPSBieXRlc1dyaXR0ZW47CiAgICB9CgogICAgcmV0dXJuIG5ldyBfQmluYXJ5T3V0cHV0U2lua1dyYXBwZXIod3JpdGVCeXRlc1N5bmMsIG9uRG9uZSk7CiAgfQp9CgpjbGFzcyBSYW5kb21BY2Nlc3NCaW5hcnlPdXRwdXRTaW5rIGltcGxlbWVudHMgYXBpLkJpbmFyeU91dHB1dFNpbmsgewogIGZpbmFsIFJhbmRvbUFjY2Vzc0ZpbGUgb3V0cHV0OwoKICBSYW5kb21BY2Nlc3NCaW5hcnlPdXRwdXRTaW5rKFVyaSB1cmkpCiAgICAgIDogb3V0cHV0ID0gbmV3IEZpbGUuZnJvbVVyaSh1cmkpLm9wZW5TeW5jKG1vZGU6IEZpbGVNb2RlLndyaXRlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZShMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIG91dHB1dC53cml0ZUZyb21TeW5jKGJ1ZmZlciwgc3RhcnQsIGVuZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgewogICAgb3V0cHV0LmNsb3NlU3luYygpOwogIH0KfQoKY2xhc3MgX091dHB1dFNpbmtXcmFwcGVyIGV4dGVuZHMgT3V0cHV0U2luayB7CiAgdm9pZCBGdW5jdGlvbihTdHJpbmcpIG9uQWRkOwogIHZvaWQgRnVuY3Rpb24oKSBvbkNsb3NlOwoKICBfT3V0cHV0U2lua1dyYXBwZXIodGhpcy5vbkFkZCwgdGhpcy5vbkNsb3NlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGQoU3RyaW5nIGRhdGEpID0+IG9uQWRkKGRhdGEpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgPT4gb25DbG9zZSgpOwp9CgpjbGFzcyBfQmluYXJ5T3V0cHV0U2lua1dyYXBwZXIgZXh0ZW5kcyBCaW5hcnlPdXRwdXRTaW5rIHsKICB2b2lkIEZ1bmN0aW9uKExpc3Q8aW50PiwgW2ludCwgaW50XSkgb25Xcml0ZTsKICB2b2lkIEZ1bmN0aW9uKCkgb25DbG9zZTsKCiAgX0JpbmFyeU91dHB1dFNpbmtXcmFwcGVyKHRoaXMub25Xcml0ZSwgdGhpcy5vbkNsb3NlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZShMaXN0PGludD4gZGF0YSwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSA9PgogICAgICBvbldyaXRlKGRhdGEsIHN0YXJ0LCBlbmQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgPT4gb25DbG9zZSgpOwp9CgovLy8gQWRhcHRlciB0byBpbnRlZ3JhdGUgZGFydDJqcyBpbiBiYXplbC4KLy8vCi8vLyBUbyBoYW5kbGUgYmF6ZWwncyBzcGVjaWFsIGxheW91dDoKLy8vCi8vLyAgKiBXZSBzcGVjaWZ5IGEgLnBhY2thZ2VzIGNvbmZpZ3VyYXRpb24gZmlsZSB0aGF0IGV4cGFuZHMgcGFja2FnZXMgdG8gdGhlaXIKLy8vICAgIGNvcnJlc3BvbmRpbmcgYmF6ZWwgbG9jYXRpb24uIFRoaXMgd2F5IHRoZXJlIGlzIG5vIG5lZWQgdG8gY3JlYXRlIGEgcHViCi8vLyAgICBjYWNoZSBwcmlvciB0byBpbnZva2luZyBkYXJ0MmpzLgovLy8KLy8vICAqIFdlIHByb3ZpZGUgYW4gaW1wbGljaXQgbWFwcGluZyB0aGF0IGNhbiBtYWtlIGFsbCB1cmxzIHJlbGF0aXZlIHRvIHRoZQovLy8gIGJhemVsIHJvb3QuCi8vLyAgICBUbyB0aGUgY29tcGlsZXIsIFVSSXMgbG9vayBsaWtlOgovLy8gICAgICBmaWxlOi8vL2JhemVsLXJvb3QvYS9iL2MuZGFydAovLy8KLy8vICAgIGV2ZW4gdGhvdWdoIGluIHRoZSBmaWxlIHN5c3RlbSB0aGUgZmlsZSBpcyBsb2NhdGVkIGF0OgovLy8gICAgICBmaWxlOi8vL3BhdGgvdG8vdGhlL2FjdHVhbC9iYXplbC9yb290L2EvYi9jLmRhcnQKLy8vCi8vLyAgICBUaGlzIG1hcHBpbmcgc2VydmVzIHR3byBwdXJwb3NlczoKLy8vICAgICAgLSBJdCBtYWtlcyBjb21waWxlciByZXN1bHRzIGluZGVwZW5kZW50IG9mIHRoZSBtYWNoaW5lIGxheW91dCwgd2hpY2gKLy8vICAgICAgICBlbmFibGVzIHVzIHRvIHNoYXJlIHJlc3VsdHMgYWNyb3NzIGJhemVsIHJ1bnMgYW5kIGFjcm9zcyBtYWNoaW5lcy4KLy8vCi8vLyAgICAgIC0gSXQgaGlkZXMgdGhlIGRpc3RpbmN0aW9uIGJldHdlZW4gZ2VuZXJhdGVkIGFuZCBzb3VyY2UgZmlsZXMuIFRoYXQgd2F5Ci8vLyAgICAgIHdlIGNhbiB1c2UgdGhlIHN0YW5kYXJkIHBhY2thZ2UtcmVzb2x1dGlvbiBtZWNoYW5pc20gYW5kIGlnbm9yZSB0aGUKLy8vICAgICAgaW50ZXJuYWxzIG9mIGhvdyBmaWxlcyBhcmUgb3JnYW5pemVkIHdpdGhpbiBiYXplbC4KLy8vCi8vLyBXaGVuIGludm9raW5nIHRoZSBjb21waWxlciwgYmF6ZWwgd2lsbCB1c2UgYHBhY2thZ2U6YCBhbmQKLy8vIGBmaWxlOi8vL2JhemVsLXJvb3QvYCBVUklzIHRvIHNwZWNpZnkgZW50cnlwb2ludHMuCi8vLwovLy8gVGhlIG1hcHBpbmcgaXMgc3BlY2lmaWVkIHVzaW5nIHNlYXJjaCBwYXRocyByZWxhdGl2ZSB0byB0aGUgY3VycmVudAovLy8gZGlyZWN0b3J5LiBXaGVuIHRoaXMgcHJvdmlkZXIgbG9va3MgdXAgYSBmaWxlLCB0aGUgYmF6ZWwtcm9vdCBmb2xkZXIgaXMKLy8vIHJlcGxhY2VkIGJ5IHRoZSBmaXJzdCBkaXJlY3RvcnkgaW4gdGhlIHNlYXJjaCBwYXRoIGNvbnRhaW5pbmcgdGhlIGZpbGUsIGlmCi8vLyBhbnkuIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgc2VhcmNoIHBhdGggIi4sYmF6ZWwtYmluLyIsIGFuZCBhIFVSTAovLy8gb2YgdGhlIGZvcm0gYGZpbGU6Ly8vYmF6ZWwtcm9vdC9hL2IuZGFydGAsIHRoaXMgcHJvdmlkZXIgd2lsbCBjaGVjayBpZiB0aGUKLy8vIGZpbGUgZXhpc3RzIHVuZGVyICIuL2EvYi5kYXJ0IiwgdGhlbiBjaGVjayB1bmRlciAiYmF6ZWwtYmluL2EvYi5kYXJ0Ii4gIElmCi8vLyBub25lIG9mIHRoZSBwYXRocyBtYXRjaGVzLCBpdCB3aWxsIGF0dGVtcHQgdG8gbG9hZCB0aGUgZmlsZSBmcm9tCi8vLyBgL2JhemVsLXJvb3QvYS9iLmRhcnRgIHdoaWNoIHdpbGwgbGlrZWx5IGZhaWwuCmNsYXNzIEJhemVsSW5wdXRQcm92aWRlciBleHRlbmRzIFNvdXJjZUZpbGVQcm92aWRlciB7CiAgZmluYWwgTGlzdDxVcmk+IGRpcnM7CgogIEJhemVsSW5wdXRQcm92aWRlcihMaXN0PFN0cmluZz4gc2VhcmNoUGF0aHMpCiAgICAgIDogZGlycyA9IHNlYXJjaFBhdGhzLm1hcChfcmVzb2x2ZSkudG9MaXN0KCk7CgogIHN0YXRpYyBVcmkgX3Jlc29sdmUoU3RyaW5nIHBhdGgpID0+IGN1cnJlbnREaXJlY3RvcnkucmVzb2x2ZShwYXRoKTsKCiAgQG92ZXJyaWRlCiAgRnV0dXJlPGFwaS5JbnB1dDxMaXN0PGludD4+PiByZWFkRnJvbVVyaShVcmkgdXJpLAogICAgICB7SW5wdXRLaW5kIGlucHV0S2luZDogSW5wdXRLaW5kLlVURjh9KSBhc3luYyB7CiAgICB2YXIgcmVzb2x2ZWRVcmkgPSB1cmk7CiAgICB2YXIgcGF0aCA9IHVyaS5wYXRoOwogICAgaWYgKHBhdGguc3RhcnRzV2l0aCgnL2JhemVsLXJvb3QnKSkgewogICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoJy9iYXplbC1yb290LycubGVuZ3RoKTsKICAgICAgZm9yICh2YXIgZGlyIGluIGRpcnMpIHsKICAgICAgICB2YXIgZmlsZSA9IGRpci5yZXNvbHZlKHBhdGgpOwogICAgICAgIGlmIChhd2FpdCBuZXcgRmlsZS5mcm9tVXJpKGZpbGUpLmV4aXN0cygpKSB7CiAgICAgICAgICByZXNvbHZlZFVyaSA9IGZpbGU7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFwaS5JbnB1dDxMaXN0PGludD4+IHJlc3VsdCA9CiAgICAgICAgYXdhaXQgcmVhZEJ5dGVzRnJvbVVyaShyZXNv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UEVfTUFQUElORyA9IGNvbnN0IHsKICAibiI6ICJcbiIsCiAgInIiOiAiXHIiLAogICJ0IjogIlx0IiwKICAiYiI6ICJcYiIsCiAgImYiOiAiXGYiLAogICJ2IjogIlx2IiwKICAiXFwiOiAiXFwiLAp9OwoKLy8vIFNwbGl0cyB0aGUgbGluZSBzaW1pbGFyIHRvIGhvdyBhIHNoZWxsIHdvdWxkIHNwbGl0IGFyZ3VtZW50cy4gSWYgW3dpbmRvd3NdCi8vLyBpcyBgdHJ1ZWAgZXNjYXBlcyB3aWxsIGJlIGhhbmRsZWQgbGlrZSBvbiB0aGUgV2luZG93cyBjb21tYW5kLWxpbmUuCi8vLwovLy8gRXhhbXBsZToKLy8vCi8vLyAgICAgc3BsaXRsaW5lKCIiIi0tYXJncyAiYWIiYyAnd2l0aCAiIFwnc3BhY2VzJyIiIikuZm9yRWFjaChwcmludCk7Ci8vLyAgICAgLy8gLS1hcmdzCi8vLyAgICAgLy8gYWJjCi8vLyAgICAgLy8gd2l0aCAiICdzcGFjZXMKTGlzdDxTdHJpbmc+IHNwbGl0TGluZShTdHJpbmcgbGluZSwge2Jvb2wgd2luZG93czogZmFsc2V9KSB7CiAgTGlzdDxTdHJpbmc+IHJlc3VsdCA9IDxTdHJpbmc+W107CiAgYm9vbCBpblF1b3RlcyA9IGZhbHNlOwogIFN0cmluZyBvcGVuaW5nUXVvdGU7CiAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICBmb3IgKGludCBpID0gMDsgaSA8IGxpbmUubGVuZ3RoOyBpKyspIHsKICAgIFN0cmluZyBjID0gbGluZVtpXTsKICAgIGlmIChpblF1b3RlcyAmJiBjID09IG9wZW5pbmdRdW90ZSkgewogICAgICBpblF1b3RlcyA9IGZhbHNlOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIGlmICghaW5RdW90ZXMgJiYgKGMgPT0gJyInIHx8IChjID09ICInIiAmJiAhd2luZG93cykpKSB7CiAgICAgIGluUXVvdGVzID0gdHJ1ZTsKICAgICAgb3BlbmluZ1F1b3RlID0gYzsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAoYyA9PSAnXFwnKSB7CiAgICAgIGlmIChpID09IGxpbmUubGVuZ3RoIC0gMSkgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oIlVuZmluaXNoZWQgZXNjYXBlOiAkbGluZSIpOwogICAgICB9CiAgICAgIGlmICh3aW5kb3dzKSB7CiAgICAgICAgU3RyaW5nIG5leHQgPSBsaW5lW2kgKyAxXTsKICAgICAgICBpZiAobmV4dCA9PSAnIicgfHwgbmV4dCA9PSByJ1wnKSB7CiAgICAgICAgICBidWZmZXIud3JpdGUobmV4dCk7CiAgICAgICAgICBpKys7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaSsrOwoKICAgICAgICBjID0gbGluZVtpXTsKICAgICAgICBTdHJpbmcgbWFwcGVkID0gRVNDQVBFX01BUFBJTkdbY107CiAgICAgICAgaWYgKG1hcHBlZCA9PSBudWxsKSBtYXBwZWQgPSBjOwogICAgICAgIGJ1ZmZlci53cml0ZShtYXBwZWQpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICB9CiAgICBpZiAoIWluUXVvdGVzICYmIGMgPT0gIiAiKSB7CiAgICAgIGlmIChidWZmZXIuaXNOb3RFbXB0eSkgcmVzdWx0LmFkZChidWZmZXIudG9TdHJpbmcoKSk7CiAgICAgIGJ1ZmZlci5jbGVhcigpOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIGJ1ZmZlci53cml0ZShjKTsKICB9CiAgaWYgKGluUXVvdGVzKSB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCJVbmNsb3NlZCBxdW90ZXM6ICRsaW5lIik7CiAgaWYgKGJ1ZmZlci5pc05vdEVtcHR5KSByZXN1bHQuYWRkKGJ1ZmZlci50b1N0cmluZygpKTsKICByZXR1cm4gcmVzdWx0Owp9Ck4ATk48ASMBQARJLQ0NDQ0NDQ4DAU9IBA0ESBIPGj0kGRcsKhgpGBAGPRcYEAYVIj8IFSMrHg8UCg8NARUrKB4SCAYhPBYQBhUERTgRAgErcGFja2FnZTpjb21waWxlci9zcmMvdXRpbC9jb21tYW5kX2xpbmUuZGFydCxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91dGlsL3V0aWwuZGFydKNRLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy51dGlsOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcKICAgIHNob3cgJEJBQ0tTTEFTSCwgJENSLCAkREVMLCAkRFEsICRMRiwgJExTLCAkUFMsICRUQUIsIExpbmssIExpbmtCdWlsZGVyOwoKZXhwb3J0ICdlbXB0eXNldC5kYXJ0JzsKZXhwb3J0ICdtYXBsZXQuZGFydCc7CmV4cG9ydCAnc2V0bGV0LmRhcnQnOwoKcGFydCAnaW5kZW50YXRpb24uZGFydCc7CgovLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgY3JlYXRpbmcgaGFzaCBjb2Rlcy4KY2xhc3MgSGFzaGluZyB7CiAgLy8vIElmIGFuIGludGVnZXIgaXMgbWFza2VkIGJ5IHRoaXMgY29uc3RhbnQsIHRoZSByZXN1bHQgaXMgZ3VhcmFudGVlZCB0byBiZQogIC8vLyBpbiBTbWkgcmFuZ2UuCiAgc3RhdGljIGNvbnN0IGludCBTTUlfTUFTSyA9IDB4M2ZmZmZmZmY7CgogIC8vLyBNaXggdGhlIGJpdHMgb2YgW3ZhbHVlXSBhbmQgbWVyZ2UgdGhlbSB3aXRoIFtleGlzdGluZ10uCiAgc3RhdGljIGludCBtaXhIYXNoQ29kZUJpdHMoaW50IGV4aXN0aW5nLCBpbnQgdmFsdWUpIHsKICAgIC8vIFNwcmVhZCB0aGUgYml0cyBvZiB2YWx1ZS4gVHJ5IHRvIHN0YXkgaW4gdGhlIDMwLWJpdCByYW5nZSB0bwogICAgLy8gYXZvaWQgb3ZlcmZsb3dpbmcgaW50byBhIG1vcmUgZXhwZW5zaXZlIGludGVnZXIgcmVwcmVzZW50YXRpb24uCiAgICBpbnQgaCA9IHZhbHVlICYgMHgxZmZmZmZmZjsKICAgIGggKz0gKChoICYgMHgzZmZmKSA8PCAxNSkgXiAweDFmZmZjZDdkOwogICAgaCBePSAoaCA+PiAxMCk7CiAgICBoICs9ICgoaCAmIDB4M2ZmZmZmZikgPDwgMyk7CiAgICBoIF49IChoID4+IDYpOwogICAgaCArPSAoKGggJiAweDdmZmZmZmYpIDw8IDIpICsgKChoICYgMHg3ZmZmKSA8PCAxNCk7CiAgICBoIF49IChoID4+IDE2KTsKICAgIC8vIENvbWJpbmUgdGhlIHR3byBoYXNoIHZhbHVlcy4KICAgIGludCBoaWdoID0gZXhpc3RpbmcgPj4gMTU7CiAgICBpbnQgbG93ID0gZXhpc3RpbmcgJiAweDdmZmY7CiAgICByZXR1cm4gKChoaWdoICogMTMpIF4gKGxvdyAqIDk5NykgXiBoKSAmIFNNSV9NQVNLOwogIH0KCiAgLy8vIE1peCB0aGUgYml0cyBvZiBgb2JqZWN0Lmhhc2hDb2RlYCB3aXRoIFtleGlzdGluZ10uCiAgc3RhdGljIGludCBvYmplY3RIYXNoKE9iamVjdCBvYmplY3QsIFtpbnQgZXhpc3RpbmcgPSAwXSkgewogICAgcmV0dXJuIG1peEhhc2hDb2RlQml0cyhleGlzdGluZywgb2JqZWN0Lmhhc2hDb2RlKTsKICB9CgogIC8vLyBNaXggdGhlIGJpdHMgb2YgYC5oYXNoQ29kZWAgYWxsIG5vbi1udWxsIG9iamVjdHMuCiAgc3RhdGljIGludCBvYmplY3RzSGFzaChPYmplY3Qgb2JqMSwKICAgICAgW09iamVjdCBvYmoyLCBPYmplY3Qgb2JqMywgT2JqZWN0IG9iajQsIE9iamVjdCBvYmo1XSkgewogICAgaW50IGhhc2ggPSAwOwogICAgaWYgKG9iajUgIT0gbnVsbCkgaGFzaCA9IG9iamVjdEhhc2gob2JqNSwgaGFzaCk7CiAgICBpZiAob2JqNCAhPSBudWxsKSBoYXNoID0gb2JqZWN0SGFzaChvYmo0LCBoYXNoKTsKICAgIGlmIChvYmozICE9IG51bGwpIGhhc2ggPSBvYmplY3RIYXNoKG9iajMsIGhhc2gpOwogICAgaWYgKG9iajIgIT0gbnVsbCkgaGFzaCA9IG9iamVjdEhhc2gob2JqMiwgaGFzaCk7CiAgICByZXR1cm4gb2JqZWN0SGFzaChvYmoxLCBoYXNoKTsKICB9CgogIC8vLyBNaXggdGhlIGJpdHMgb2YgdGhlIGVsZW1lbnQgaGFzaCBjb2RlcyBvZiBbbGlzdF0gd2l0aCBbZXhpc3RpbmddLgogIHN0YXRpYyBpbnQgbGlzdEhhc2goTGlzdCBsaXN0LCBbaW50IGV4aXN0aW5nID0gMF0pIHsKICAgIGludCBoID0gZXhpc3Rpbmc7CiAgICBpZiAobGlzdCAhPSBudWxsKSB7CiAgICAgIGludCBsZW5ndGggPSBsaXN0Lmxlbmd0aDsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGggPSBtaXhIYXNoQ29kZUJpdHMoaCwgbGlzdFtpXS5oYXNoQ29kZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBoOwogIH0KCiAgLy8vIE1peCB0aGUgYml0cyBvZiB0aGUgZWxlbWVudCBoYXNoIGNvZGVzIG9mIFtpdGVyYWJsZV0gd2l0aCBbZXhpc3RpbmddLgogIHN0YXRpYyBpbnQgc2V0SGFzaDxFPihJdGVyYWJsZTxFPiBpdGVyYWJsZSwgW2ludCBleGlzdGluZyA9IDBdKSB7CiAgICBpbnQgaCA9IGV4aXN0aW5nOwogICAgaWYgKGl0ZXJhYmxlICE9IG51bGwpIHsKICAgICAgZm9yIChFIGUgaW4gaXRlcmFibGUpIHsKICAgICAgICBoICs9IG9iamVjdHNIYXNoKGUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaCAmIFNNSV9NQVNLOwogIH0KCiAgLy8vIE1peCB0aGUgYml0cyBvZiB0aGUgaGFzaCBjb2RlcyBvZiB0aGUgdW5vcmRlcmVkIGtleS92YWx1ZSBmcm9tIFttYXBdIHdpdGgKICAvLy8gW2V4aXN0aW5nXS4KICBzdGF0aWMgaW50IHVub3JkZXJlZE1hcEhhc2goTWFwIG1hcCwgW2ludCBleGlzdGluZyA9IDBdKSB7CiAgICBpZiAobWFwLmxlbmd0aCA9PSAwKSByZXR1cm4gZXhpc3Rpbmc7CiAgICBMaXN0PGludD4gaGFzaENvZGVzID0gTGlzdChtYXAubGVuZ3RoKTsKICAgIGludCBpID0gMDsKICAgIGZvciAodmFyIGVudHJ5IGluIG1hcC5lbnRyaWVzKSB7CiAgICAgIGhhc2hDb2Rlc1tpKytdID0gb2JqZWN0SGFzaChlbnRyeS5rZXksIG9iamVjdEhhc2goZW50cnkudmFsdWUpKTsKICAgIH0KICAgIGhhc2hDb2Rlcy5zb3J0KCk7CiAgICBpbnQgaCA9IGV4aXN0aW5nOwogICAgZm9yIChpbnQgaGFzaENvZGUgaW4gaGFzaENvZGVzKSB7CiAgICAgIGggPSBtaXhIYXNoQ29kZUJpdHMoaCwgaGFzaENvZGUpOwogICAgfQogICAgcmV0dXJuIGg7CiAgfQoKICAvLy8gTWl4IHRoZSBiaXRzIG9mIHRoZSBrZXkvdmFsdWUgaGFzaCBjb2RlcyBmcm9tIFttYXBdIHdpdGggW2V4aXN0aW5nXS4KICBzdGF0aWMgaW50IG1hcEhhc2goTWFwIG1hcCwgW2ludCBleGlzdGluZyA9IDBdKSB7CiAgICBpbnQgaCA9IGV4aXN0aW5nOwogICAgZm9yICh2YXIga2V5IGluIG1hcC5rZXlzKSB7CiAgICAgIGggPSBtaXhIYXNoQ29kZUJpdHMoaCwga2V5Lmhhc2hDb2RlKTsKICAgICAgaCA9IG1peEhhc2hDb2RlQml0cyhoLCBtYXBba2V5XS5oYXNoQ29kZSk7CiAgICB9CiAgICByZXR1cm4gaDsKICB9Cn0KCmJvb2wgZXF1YWxFbGVtZW50czxFPihMaXN0PEU+IGEsIExpc3Q8RT4gYikgewogIGlmIChpZGVudGljYWwoYSwgYikpIHJldHVybiB0cnVlOwogIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGEubGVuZ3RoOyBpbmRleCsrKSB7CiAgICBpZiAoYVtpbmRleF0gIT0gYltpbmRleF0pIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICByZXR1cm4gdHJ1ZTsKfQoKYm9vbCBlcXVhbFNldHM8RT4oU2V0PEU+IGEsIFNldDxFPiBiKSB7CiAgaWYgKGlkZW50aWNhbChhLCBiKSkgcmV0dXJuIHRydWU7CiAgaWYgKGEgPT0gbnVsbCB8fCBiID09IG51bGwpIHJldHVybiBmYWxzZTsKICByZXR1cm4gYS5sZW5ndGggPT0gYi5sZW5ndGggJiYgYS5jb250YWluc0FsbChiKSAmJiBiLmNvbnRhaW5zQWxsKGEpOwp9Cgpib29sIGVxdWFsTWFwczxLLCBWPihNYXA8SywgVj4gYSwgTWFwPEssIFY+IGIpIHsKICBpZiAoaWRlbnRpY2FsKGEsIGIpKSByZXR1cm4gdHJ1ZTsKICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogIGZvciAoSyBrZXkgaW4gYS5rZXlzKSB7CiAgICBpZiAoYVtrZXldICE9IGJba2V5XSkgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKLy8vIEZpbGUgbmFtZSBwcmVmaXggdXNlZCB0byBzaG9ydGVuIHRoZSBmaWxlIG5hbWUgaW4gc3RhY2sgdHJhY2VzIHByaW50ZWQgYnkKLy8vIFt0cmFjZV0uClN0cmluZyBzdGFja1RyYWNlRmlsZVByZWZpeCA9IG51bGw7CgovLy8gV3JpdGVzIHRoZSBjaGFyYWN0ZXJzIG9mIFtzdHJpbmddIG9uIFtidWZmZXJdLiAgVGhlIGNoYXJhY3RlcnMKLy8vIGFyZSBlc2NhcGVkIGFzIHN1aXRhYmxlIGZvciBKYXZhU2NyaXB0IGFuZCBKU09OLiAgW2J1ZmZlcl0gaXMKLy8vIGFueXRoaW5nIHdoaWNoIHN1cHBvcnRzIFs6d3JpdGU6XSBhbmQgWzp3cml0ZUNoYXJDb2RlOl0sIGZvciBleGFtcGxlLAovLy8gW1N0cmluZ0J1ZmZlcl0uICBOb3RlIHRoYXQgSlMgc3VwcG9ydHMgXHhubiBhbmQgXHVubm5uIHdoZXJlYXMgSlNPTiBvbmx5Ci8vLyBzdXBwb3J0cyB0aGUgXHVubm5uIG5vdGF0aW9uLiAgVGhlcmVmb3JlIHdlIHVzZSB0aGUgXHVubm5uIG5vdGF0aW9uLgp2b2lkIHdyaXRlSnNvbkVzY2FwZWRDaGFyc09uKFN0cmluZyBzdHJpbmcsIGJ1ZmZlcikgewogIHZvaWQgYWRkQ29kZVVuaXRFc2NhcGVkKHZhciBidWZmZXIsIGludCBjb2RlKSB7CiAgICBhc3NlcnQoY29kZSA8IDB4MTAwMDApOwogICAgYnVmZmVyLndyaXRlKHInXHUnKTsKICAgIGlmIChjb2RlIDwgMHgxMDAwKSB7CiAgICAgIGJ1ZmZlci53cml0ZSgnMCcpOwogICAgICBpZiAoY29kZSA8IDB4MTAwKSB7CiAgICAgICAgYnVmZmVyLndyaXRlKCcwJyk7CiAgICAgICAgaWYgKGNvZGUgPCAweDEwKSB7CiAgICAgICAgICBidWZmZXIud3JpdGUoJzAnKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGJ1ZmZlci53cml0ZShjb2RlLnRvUmFkaXhTdHJpbmcoMTYpKTsKICB9CgogIHZvaWQgd3JpdGVFc2NhcGVkT24oU3RyaW5nIHN0cmluZywgdmFyIGJ1ZmZlcikgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKyspIHsKICAgICAgaW50IGNvZGUgPSBzdHJpbmcuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNvZGUgPT0gJERRKSB7CiAgICAgICAgYnVmZmVyLndyaXRlKHInXCInKTsKICAgICAgfSBlbHNlIGlmIChjb2RlID09ICRUQUIpIHsKICAgICAgICBidWZmZXIud3JpdGUocidcdCcpOwogICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gJExGKSB7CiAgICAgICAgYnVmZmVyLndyaXRlKHInXG4nKTsKICAgICAgfSBlbHNlIGlmIChjb2RlID09ICRDUikgewogICAgICAgIGJ1ZmZlci53cml0ZShyJ1xyJyk7CiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAkREVMKSB7CiAgICAgICAgYWRkQ29kZVVuaXRFc2NhcGVkKGJ1ZmZlciwgJERFTCk7CiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAkTFMpIHsKICAgICAgICAvLyBUaGlzIFVuaWNvZGUgbGluZSB0ZXJtaW5hdG9yIGFuZCAkUFMgYXJlIGludmFsaWQgaW4gSlMgc3RyaW5nCiAgICAgICAgLy8gbGl0ZXJhbHMuCiAgICAgICAgYWRkQ29kZVVuaXRFc2NhcGVkKGJ1ZmZlciwgJExTKTsgLy8gMHgyMDI4LgogICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gJFBTKSB7CiAgICAgICAgYWRkQ29kZVVuaXRFc2NhcGVkKGJ1ZmZlciwgJFBTKTsgLy8gMHgyMDI5LgogICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gJEJBQ0tTTEFTSCkgewogICAgICAgIGJ1ZmZlci53cml0ZShyJ1xcJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGNvZGUgPCAweDIwKSB7CiAgICAgICAgICBhZGRDb2RlVW5pdEVzY2FwZWQoYnVmZmVyLCBjb2RlKTsKICAgICAgICAgIC8vIFdlIGVtaXQgREVMIChBU0NJSSAweDdmKSBhcyBhbiBlc2NhcGUgYmVjYXVzZSBpdCB3b3VsZCBiZSBjb25mdXNpbmcKICAgICAgICAgIC8vIHRvIGhhdmUgaXQgdW5lc2NhcGVkIGluIGEgc3RyaW5nIGxpdGVyYWwuICBXZSBhbHNvIGVzY2FwZQogICAgICAgICAgLy8gZXZlcnl0aGluZyBhYm92ZSAweDdmIGJlY2F1c2UgdGhhdCBtZWFucyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5CiAgICAgICAgICAvLyBhYm91dCB3aGV0aGVyIHRoZSB3ZWIgc2VydmVyIHNlcnZlcyBpdCB1cCBhcyBMYXRpbjEgb3IgVVRGLTguCiAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHg3ZikgewogICAgICAgICAgYnVmZmVyLndyaXRlQ2hhckNvZGUoY29kZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFRoaXMgd2lsbCBvdXRwdXQgc3Vycm9nYXRlIHBhaXJzIGluIHRoZSBmb3JtIFx1ZHh4eFx1ZHl5eSwgcmF0aGVyCiAgICAgICAgICAvLyB0aGFuIHRoZSBtb3JlIGxvZ2ljYWwgXHV7enp6enp6fS4gIFRoaXMgc2hvdWxkIHdvcmsgaW4gSmF2YVNjcmlwdAogICAgICAgICAgLy8gKGVzcGVjaWFsbHkgb2xkIFVDUy0yIGJhc2VkIGltcGxlbWVudGF0aW9ucykgYW5kIGlzIHRoZSBvbmx5CiAgICAgICAgICAvLyBmb3JtYXQgdGhhdCBpcyBhbGxvd2VkIGluIEpTT04uCiAgICAgICAgICBhZGRDb2RlVW5pdEVzY2FwZWQoYnVmZmVyLCBjb2RlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7CiAgICBpbnQgY29kZSA9IHN0cmluZy5jb2RlVW5pdEF0KGkpOwogICAgaWYgKGNvZGUgPCAweDIwIHx8CiAgICAgICAgY29kZSA9PSAkREVMIHx8CiAgICAgICAgY29kZSA9PSAkRFEgfHwKICAgICAgICBjb2RlID09ICRMUyB8fAogICAgICAgIGNvZGUgPT0gJFBTIHx8CiAgICAgICAgY29kZSA9PSAkQkFDS1NMQVNIIHx8CiAgICAgICAgY29kZSA+PSAweDgwKSB7CiAgICAgIHdyaXRlRXNjYXBlZE9uKHN0cmluZywgYnVmZmVyKTsKICAgICAgcmV0dXJuOwogICAgfQogIH0KICBidWZmZXIud3JpdGUoc3RyaW5nKTsKfQoKaW50IGNvbXB1dGVIYXNoQ29kZShwYXJ0MSwgW3BhcnQyLCBwYXJ0MywgcGFydDQsIHBhcnQ1XSkgewogIHJldHVybiAocGFydDEuaGFzaENvZGUgXgogICAgICAgICAgcGFydDIuaGFzaENvZGUgXgogICAgICAgICAgcGFydDMuaGFzaENvZGUgXgogICAgICAgICAgcGFydDQuaGFzaENvZGUgXgogICAgICAgICAgcGFydDUuaGFzaENvZGUpICYKICAgICAgMHgzZmZmZmZmZjsKfQoKU3RyaW5nIG1vZGlmaWVyc1RvU3RyaW5nKAogICAge2Jvb2wgaXNTdGF0aWM6IGZhbHNlLAogICAgYm9vbCBpc0Fic3RyYWN0OiBmYWxzZSwKICAgIGJvb2wgaXNGaW5hbDogZmFsc2UsCiAgICBib29sIGlzVmFyOiBmYWxzZSwKICAgIGJvb2wgaXNDb25zdDogZmFsc2UsCiAgICBib29sIGlzRmFjdG9yeTogZmFsc2UsCiAgICBib29sIGlzRXh0ZXJuYWw6IGZhbHNlLAogICAgYm9vbCBpc0NvdmFyaWFudDogZmFsc2V9KSB7CiAgTGlua0J1aWxkZXI8U3RyaW5nPiBidWlsZGVyID0gbmV3IExpbmtCdWlsZGVyPFN0cmluZz4oKTsKICBpZiAoaXNTdGF0aWMpIGJ1aWxkZXIuYWRkTGFzdCgnc3RhdGljJyk7CiAgaWYgKGlzQWJzdHJhY3QpIGJ1aWxkZXIuYWRkTGFzdCgnYWJzdHJhY3QnKTsKICBpZiAoaXNGaW5hbCkgYnVpbGRlci5hZGRMYXN0KCdmaW5hbCcpOwogIGlmIChpc1ZhcikgYnVpbGRlci5hZGRMYXN0KCd2YXInKTsKICBpZiAoaXNDb25zdCkgYnVpbGRlci5hZGRMYXN0KCdjb25zdCcpOwogIGlmIChpc0ZhY3RvcnkpIGJ1aWxkZXIuYWRkTGFzdCgnZmFjdG9yeScpOwogIGlmIChpc0V4dGVybmFsKSBidWlsZGVyLmFkZExhc3QoJ2V4dGVybmFsJyk7CiAgaWYgKGlzQ292YXJpYW50KSBidWlsZGVyLmFkZExhc3QoJ2NvdmFyaWFudCcpOwogIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgYnVpbGRlci50b0xpbmsoY29uc3QgTGluazxTdHJpbmc+KCkpLnByaW50T24oYnVmZmVyLCAnLCAnKTsKICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7Cn0KCmNsYXNzIFBhaXI8QSwgQj4gewogIGZpbmFsIEEgYTsKICBmaW5hbCBCIGI7CgogIFBhaXIodGhpcy5hLCB0aGlzLmIpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IDEzICogYS5oYXNoQ29kZSArIDE3ICogYi5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgUGFpcikgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGEgPT0gb3RoZXIuYSAmJiBiID09IG90aGVyLmI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnKCRhLCRiKSc7Cn0KCmludCBsb25nZXN0Q29tbW9uUHJlZml4TGVuZ3RoKExpc3QgYSwgTGlzdCBiKSB7CiAgaW50IGluZGV4ID0gMDsKICBmb3IgKDsgaW5kZXggPCBhLmxlbmd0aCAmJiBpbmRleCA8IGIubGVuZ3RoOyBpbmRleCsrKSB7CiAgICBpZiAoYVtpbmRleF0gIT0gYltpbmRleF0pIHsKICAgICAgYnJlYWs7CiAgICB9CiAgfQogIHJldHVybiBpbmRleDsKfQoKLy8vIFJldHVybnMgW3N1Z2dlc3RlZE5hbWVdIGlmIGl0IGlzIG5vdCBpbiBbdXNlZE5hbWVzXS4gT3RoZXJ3aXNlIGNvbmNhdGVuYXRlcwovLy8gdGhlIHNtYWxsZXN0IG51bWJlciB0aGF0IG1ha2VzIGl0IG5vdCBhcHBlYXIgaW4gW3VzZWROYW1lc10uCi8vLwovLy8gQWRkcyB0aGUgcmVzdWx0IHRvIFt1c2VkTmFtZXNdLgpTdHJpbmcgbWFrZVVuaXF1ZShTdHJpbmcgc3VnZ2VzdGVkTmFtZSwgU2V0PFN0cmluZz4gdXNlZE5hbWVzLAogICAgW1N0cmluZyBzZXBhcmF0b3IgPSAnJ10pIHsKICBTdHJpbmcgcmVzdWx0ID0gc3VnZ2VzdGVkTmFtZTsKICBpZiAodXNlZE5hbWVzLmNvbnRhaW5zKHN1Z2dlc3RlZE5hbWUpKSB7CiAgICBpbnQgY291bnRlciA9IDA7CiAgICB3aGlsZSAodXNlZE5hbWVzLmNvbnRhaW5zKHJlc3VsdCkpIHsKICAgICAgY291bnRlcisrOwogICAgICByZXN1bHQgPSAiJHN1Z2dlc3RlZE5hbWUkc2VwYXJhdG9yJGNvdW50ZXIiOwogICAgfQogIH0KICB1c2VkTmFtZXMuYWRkKHJlc3VsdCk7CiAgcmV0dXJuIHJlc3VsdDsKfQqBKABOTjwBFgE5TQEYFhYBGQEuEE8UKgE+OERHICwUIRM4FCQfITcEATk9NwQBOCY+EjU1NTUjBAFINxYYICkyCAYOBAFMRBYcHh0IBhkEAVASPSosDyVHBhYWJigGDgQBSzQWICwxBg4EAgEuJCwqMyAUBgQPAgEoJCxHAgExJCwqGigEDwIBTg0kAUNCSk1JNjIcGRkZGhsbHQoIBioEATMuJxkdIR0gHSAdISogSRU0IDQnHQ8bLFFHTUsiJhFPT0otLAoIBgQBLCUXGBcXFx4YJg4GBBgCATsbGxsbHBICARobHBkXGRscIDsrLyklKS0vMSw+HAIBEw0NARgBDDkBDCAtJikEAQwiAgEwETogDQYEEAIBUEEEJD8fISsVKREzBgQZEQIBI3BhY2thZ2U6Y29tcGlsZXIvc3JjL3V0aWwvdXRpbC5kYXJ0M3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3V0aWwvaW5kZW50YXRpb24uZGFydI50Ly8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydDJqcy51dGlsOwoKLy8vIEluZGVudGF0aW9uIHV0aWxpdHkgY2xhc3MuIFNob3VsZCBiZSB1c2VkIGFzIGEgbWl4aW4gaW4gbW9zdCBjYXNlcy4KY2xhc3MgSW5kZW50YXRpb24gewogIC8vLyBUaGUgY3VycmVudCBpbmRlbnRhdGlvbiBzdHJpbmcuCiAgU3RyaW5nIGdldCBpbmRlbnRhdGlvbiB7CiAgICAvLyBMYXppbHkgYWRkIG5ldyBpbmRlbnRhdGlvbiBzdHJpbmdzIGFzIHJlcXVpcmVkLgogICAgZm9yIChpbnQgaSA9IF9pbmRlbnRMaXN0Lmxlbmd0aDsgaSA8PSBfaW5kZW50TGV2ZWw7IGkrKykgewogICAgICBfaW5kZW50TGlzdC5hZGQoX2luZGVudExpc3RbaSAtIDFdICsgaW5kZW50YXRpb25Vbml0KTsKICAgIH0KICAgIHJldHVybiBfaW5kZW50TGlzdFtfaW5kZW50TGV2ZWxdOwogIH0KCiAgLy8vIFRoZSBjdXJyZW50IGluZGVudGF0aW9uIGxldmVsLgogIGludCBfaW5kZW50TGV2ZWwgPSAwOwoKICAvLy8gQSBjYWNoZSBvZiBhbGwgaW5kZW50YXRpb24gc3RyaW5ncyB1c2VkIHNvIGZhci4KICAvLy8gQWx3YXlzIGF0IGxlYXN0IG9mIGxlbmd0aCAxLgogIExpc3Q8U3RyaW5nPiBfaW5kZW50TGlzdCA9IDxTdHJpbmc+WyIiXTsKCiAgLy8vIFRoZSBpbmRlbnRhdGlvbiB1bml0LCBkZWZhdWx0aW5nIHRvIHR3byBzcGFjZXMuIE1heSBiZSBvdmVyd3JpdHRlbi4KICBTdHJpbmcgX2luZGVudGF0aW9uVW5pdCA9ICIgICI7CiAgU3RyaW5nIGdldCBpbmRlbnRhdGlvblVuaXQgPT4gX2luZGVudGF0aW9uVW5pdDsKICBzZXQgaW5kZW50YXRpb25Vbml0KFN0cmluZyB2YWx1ZSkgewogICAgaWYgKHZhbHVlICE9IF9pbmRlbnRhdGlvblVuaXQpIHsKICAgICAgX2luZGVudGF0aW9uVW5pdCA9IHZhbHVlOwogICAgICBfaW5kZW50TGlzdCA9IDxTdHJpbmc+WyIiXTsKICAgIH0KICB9CgogIC8vLyBJbmNyZWFzZXMgdGhlIGN1cnJlbnQgbGV2ZWwgb2YgaW5kZW50YXRpb24uCiAgdm9pZCBpbmRlbnRNb3JlKCkgewogICAgX2luZGVudExldmVsKys7CiAgfQoKICAvLy8gRGVjcmVhc2VzIHRoZSBjdXJyZW50IGxldmVsIG9mIGluZGVudGF0aW9uLgogIHZvaWQgaW5kZW50TGVzcygpIHsKICAgIF9pbmRlbnRMZXZlbC0tOwogIH0KCiAgLy8vIENhbGxzIFtmXSB3aXRoIG9uZSBtb3JlIGluZGVudGF0aW9uIGxldmVsLCByZXN0b3JpbmcgaW5kZW50YXRpb24gY29udGV4dAogIC8vLyB1cG9uIHJldHVybiBvZiBbZl0gYW5kIHJldHVybmluZyBpdHMgcmVzdWx0LgogIGluZGVudEJsb2NrKEZ1bmN0aW9uIGYpIHsKICAgIGluZGVudE1vcmUoKTsKICAgIHZhciByZXN1bHQgPSBmKCk7CiAgICBpbmRlbnRMZXNzKCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgVGFnZ2luZzxOPiBpbXBsZW1lbnRzIEluZGVudGF0aW9uIHsKICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgTGluazxTdHJpbmc+IHRhZ1N0YWNrID0gY29uc3QgTGluazxTdHJpbmc+KCk7CgogIHZvaWQgcHVzaFRhZyhTdHJpbmcgdGFnKSB7CiAgICB0YWdTdGFjayA9IHRhZ1N0YWNrLnByZXBlbmQodGFnKTsKICAgIGluZGVudE1vcmUoKTsKICB9CgogIFN0cmluZyBwb3BUYWcoKSB7CiAgICBhc3NlcnQoIXRhZ1N0YWNrLmlzRW1wdHkpOwogICAgU3RyaW5nIHRhZyA9IHRhZ1N0YWNrLmhlYWQ7CiAgICB0YWdTdGFjayA9IHRhZ1N0YWNrLnRhaWw7CiAgICBpbmRlbnRMZXNzKCk7CiAgICByZXR1cm4gdGFnOwogIH0KCiAgLy8vIEFkZHMgZ2l2ZW4gc3RyaW5nIHRvIHJlc3VsdCBzdHJpbmcuCiAgdm9pZCBhZGQoU3RyaW5nIHN0cmluZykgewogICAgc2Iud3JpdGUoc3RyaW5nKTsKICB9CgogIC8vLyBBZGRzIGRlZmF1bHQgcGFyYW1ldGVycyBmb3IgW25vZGVdIGludG8gW3BhcmFtc10uCiAgdm9pZCBhZGREZWZhdWx0UGFyYW1ldGVycyhOIG5vZGUsIE1hcCBwYXJhbXMpIHt9CgogIC8vLyBBZGRzIGdpdmVuIG5vZGUgdHlwZSB0byByZXN1bHQgc3RyaW5nLgogIC8vLyBUaGUgbWV0aG9kICJvcGVucyIgdGhlIG5vZGUsIG1lYW5pbmcgdGhhdCBhbGwgb3V0cHV0IGFmdGVyIGNhbGxpbmcKICAvLy8gdGhpcyBtZXRob2QgYW5kIGJlZm9yZSBjYWxsaW5nIGNsb3NlTm9kZSgpIHdpbGwgcmVwcmVzZW50IGNvbnRlbnRzCiAgLy8vIG9mIGdpdmVuIG5vZGUuCiAgdm9pZCBvcGVuTm9kZShOIG5vZGUsIFN0cmluZyB0eXBlLCBbTWFwIHBhcmFtc10pIHsKICAgIGlmIChwYXJhbXMgPT0gbnVsbCkgcGFyYW1zID0gbmV3IE1hcCgpOwogICAgYWRkQ3VycmVudEluZGVudCgpOwogICAgc2Iud3JpdGUoIjwiKTsKICAgIGFkZERlZmF1bHRQYXJhbWV0ZXJzKG5vZGUsIHBhcmFtcyk7CiAgICBhZGRUeXBlV2l0aFBhcmFtcyh0eXBlLCBwYXJhbXMpOwogICAgc2Iud3JpdGUoIj5cbiIpOwogICAgcHVzaFRhZyh0eXBlKTsKICB9CgogIC8vLyBBZGRzIGdpdmVuIG5vZGUgdG8gcmVzdWx0IHN0cmluZy4KICB2b2lkIG9wZW5BbmRDbG9zZU5vZGUoTiBub2RlLCBTdHJpbmcgdHlwZSwgW01hcCBwYXJhbXNdKSB7CiAgICBpZiAocGFyYW1zID09IG51bGwpIHBhcmFtcyA9IHt9OwogICAgYWRkQ3VycmVudEluZGVudCgpOwogICAgc2Iud3JpdGUoIjwiKTsKICAgIGFkZERlZmF1bHRQYXJhbWV0ZXJzKG5vZGUsIHBhcmFtcyk7CiAgICBhZGRUeXBlV2l0aFBhcmFtcyh0eXBlLCBwYXJhbXMpOwogICAgc2Iud3JpdGUoIi8+XG4iKTsKICB9CgogIC8vLyBDbG9zZXMgY3VycmVudCBub2RlIHR5cGUuCiAgdm9pZCBjbG9zZU5vZGUoKSB7CiAgICBTdHJpbmcgdGFnID0gcG9wVGFnKCk7CiAgICBhZGRDdXJyZW50SW5kZW50KCk7CiAgICBzYi53cml0ZSgiPC8iKTsKICAgIGFkZFR5cGVXaXRoUGFyYW1zKHRhZyk7CiAgICBzYi53cml0ZSgiPlxuIik7CiAgfQoKICB2b2lkIGFkZFR5cGVXaXRoUGFyYW1zKFN0cmluZyB0eXBlLCBbTWFwIHBhcmFtc10pIHsKICAgIGlmIChwYXJhbXMgPT0gbnVsbCkgcGFyYW1zID0gbmV3IE1hcCgpOwogICAgc2Iud3JpdGUoIiR7dHlwZX0iKTsKICAgIHBhcmFtcy5mb3JFYWNoKChrLCB2KSB7CiAgICAgIFN0cmluZyB2YWx1ZTsKICAgICAgaWYgKHYgIT0gbnVsbCkgewogICAgICAgIFN0cmluZyBzdHIgPSB2YWx1ZVRvU3RyaW5nKHYpOwogICAgICAgIHZhbHVlID0gc3RyCiAgICAgICAgICAgIC5yZXBsYWNlQWxsKCI8IiwgIiZsdDsiKQogICAgICAgICAgICAucmVwbGFjZUFsbCgiPiIsICImZ3Q7IikKICAgICAgICAgICAgLnJlcGxhY2VBbGwoJyInLCAiJyIpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhbHVlID0gIltudWxsXSI7CiAgICAgIH0KICAgICAgc2Iud3JpdGUoJyAkaz0iJHZhbHVlIicpOwogICAgfSk7CiAgfQoKICB2b2lkIGFkZEN1cnJlbnRJbmRlbnQoKSB7CiAgICBzYi53cml0ZShpbmRlbnRhdGlvbik7CiAgfQoKICAvLy8gQ29udmVydHMgYSBwYXJhbWV0ZXIgdmFsdWUgaW50byBhIHN0cmluZy4KICBTdHJpbmcgdmFsdWVUb1N0cmluZyh2YXIgdmFsdWUpID0+IHZhbHVlOwp9CoCLAE5OPAEWAUgUJhs3Pz0GJgQBJRgBNiMrAUoiMiYlICIGBAEyFhQEATIWFAQBTzMcEhYSEwQCATMoMAEdJhIEARQfIB4SEAQBKhwWBAE4MwEtSUkVNSwYEyglFRMEASg9JRgTKCUWBAEgFRsYFBwVBAE2LBkcFBcnFCUlIw8aCCAIBAEcGwQBMCwCASpwYWNrYWdlOmNvbXBpbGVyL3NyYy91dGlsL2luZGVudGF0aW9uLmRhcnQjc2Rrcm9vdDovcGtnL2tlcm5lbC9saWIva2VybmVsLmRhcnSKQC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gQ29udmVudGlvbnMgZm9yIHBhdGhzOgovLy8KLy8vIC0gVXNlIHRoZSBbVXJpXSBjbGFzcyBmb3IgcGF0aHMgdGhhdCBtYXkgaGF2ZSB0aGUgYGZpbGVgLCBgZGFydGAgb3IKLy8vICAgYHBhY2thZ2VgIHNjaGVtZS4gIE5ldmVyIHVzZSBbVXJpXSBmb3IgcmVsYXRpdmUgcGF0aHMuCi8vLyAtIFVzZSBbU3RyaW5nXXMgZm9yIGFsbCBmaWxlbmFtZXMgYW5kIHBhdGhzIHRoYXQgaGF2ZSBubyBzY2hlbWUgcHJlZml4LgovLy8gLSBOZXZlciB0cmFuc2xhdGUgYSBgZGFydDpgIG9yIGBwYWNrYWdlOmAgVVJJIGludG8gYSBgZmlsZTpgIFVSSSwgaW5zdGVhZAovLy8gICB0cmFuc2xhdGUgaXQgdG8gYSBbU3RyaW5nXSBpZiB0aGUgZmlsZSBzeXN0ZW0gcGF0aCBpcyBuZWVkZWQuCi8vLyAtIE9ubHkgdXNlIFtGaWxlXSBmcm9tIGRhcnQ6aW8gYXQgdGhlIGxhc3QgbW9tZW50IHdoZW4gaXQgaXMgbmVlZGVkLgovLy8KbGlicmFyeSBrZXJuZWw7CgppbXBvcnQgJ2FzdC5kYXJ0JzsKaW1wb3J0ICdiaW5hcnkvYXN0X3RvX2JpbmFyeS5kYXJ0JzsKaW1wb3J0ICdiaW5hcnkvYXN0X2Zyb21fYmluYXJ5LmRhcnQnOwppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6aW8nOwppbXBvcnQgJ3RleHQvYXN0X3RvX3RleHQuZGFydCc7CgpleHBvcnQgJ2FzdC5kYXJ0JzsKCkNvbXBvbmVudCBsb2FkQ29tcG9uZW50RnJvbUJpbmFyeShTdHJpbmcgcGF0aCwgW0NvbXBvbmVudCBjb21wb25lbnRdKSB7CiAgTGlzdDxpbnQ+IGJ5dGVzID0gbmV3IEZpbGUocGF0aCkucmVhZEFzQnl0ZXNTeW5jKCk7CiAgcmV0dXJuIGxvYWRDb21wb25lbnRGcm9tQnl0ZXMoYnl0ZXMsIGNvbXBvbmVudCk7Cn0KCkNvbXBvbmVudCBsb2FkQ29tcG9uZW50RnJvbUJ5dGVzKExpc3Q8aW50PiBieXRlcywgW0NvbXBvbmVudCBjb21wb25lbnRdKSB7CiAgY29tcG9uZW50ID8/PSBuZXcgQ29tcG9uZW50KCk7CiAgbmV3IEJpbmFyeUJ1aWxkZXIoYnl0ZXMpLnJlYWRDb21wb25lbnQoY29tcG9uZW50KTsKICByZXR1cm4gY29tcG9uZW50Owp9CgpDb21wb25lbnQgbG9hZENvbXBvbmVudFNvdXJjZUZyb21CeXRlcyhMaXN0PGludD4gYnl0ZXMsIFtDb21wb25lbnQgY29tcG9uZW50XSkgewogIGNvbXBvbmVudCA/Pz0gbmV3IENvbXBvbmVudCgpOwogIG5ldyBCaW5hcnlCdWlsZGVyKGJ5dGVzKS5yZWFkQ29tcG9uZW50U291cmNlKGNvbXBvbmVudCk7CiAgcmV0dXJuIGNvbXBvbmVudDsKfQoKRnV0dXJlIHdyaXRlQ29tcG9uZW50VG9CaW5hcnkoQ29tcG9uZW50IGNvbXBvbmVudCwgU3RyaW5nIHBhdGgpIHsKICB2YXIgc2luazsKICBpZiAocGF0aCA9PSAnbnVsbCcgfHwgcGF0aCA9PSAnc3Rkb3V0JykgewogICAgc2luayA9IHN0ZG91dC5ub25CbG9ja2luZzsKICB9IGVsc2UgewogICAgc2luayA9IG5ldyBGaWxlKHBhdGgpLm9wZW5Xcml0ZSgpOwogIH0KCiAgdmFyIGZ1dHVyZTsKICB0cnkgewogICAgbmV3IEJpbmFyeVByaW50ZXIoc2luaykud3JpdGVDb21wb25lbnRGaWxlKGNvbXBvbmVudCk7CiAgfSBmaW5hbGx5IHsKICAgIGlmIChzaW5rID09IHN0ZG91dC5ub25CbG9ja2luZykgewogICAgICBmdXR1cmUgPSBzaW5rLmZsdXNoKCk7CiAgICB9IGVsc2UgewogICAgICBmdXR1cmUgPSBzaW5rLmNsb3NlKCk7CiAgICB9CiAgfQoKICByZXR1cm4gZnV0dXJlOwp9Cgp2b2lkIHdyaXRlTGlicmFyeVRvVGV4dChMaWJyYXJ5IGxpYnJhcnksIHtTdHJpbmcgcGF0aH0pIHsKICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIG5ldyBQcmludGVyKGJ1ZmZlcikud3JpdGVMaWJyYXJ5RmlsZShsaWJyYXJ5KTsKICBpZiAocGF0aCA9PSBudWxsKSB7CiAgICBwcmludChidWZmZXIpOwogIH0gZWxzZSB7CiAgICBuZXcgRmlsZShwYXRoKS53cml0ZUFzU3RyaW5nU3luYygnJGJ1ZmZlcicpOwogIH0KfQoKdm9pZCB3cml0ZUNvbXBvbmVudFRvVGV4dChDb21wb25lbnQgY29tcG9uZW50LAogICAge1N0cmluZyBwYXRoLAogICAgYm9vbCBzaG93RXh0ZXJuYWw6IGZhbHNlLAogICAgYm9vbCBzaG93T2Zmc2V0czogZmFsc2UsCiAgICBib29sIHNob3dNZXRhZGF0YTogZmFsc2V9KSB7CiAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICBuZXcgUHJpbnRlcihidWZmZXIsCiAgICAgICAgICBzaG93RXh0ZXJuYWw6IHNob3dFeHRlcm5hbCwKICAgICAgICAgIHNob3dPZmZzZXRzOiBzaG93T2Zmc2V0cywKICAgICAgICAgIHNob3dNZXRhZGF0YTogc2hvd01ldGFkYXRhKQogICAgICAud3JpdGVDb21wb25lbnRGaWxlKGNvbXBvbmVudCk7CiAgaWYgKHBhdGggPT0gbnVsbCkgewogICAgcHJpbnQoYnVmZmVyKTsKICB9IGVsc2UgewogICAgbmV3IEZpbGUocGF0aCkud3JpdGVBc1N0cmluZ1N5bmMoJyRidWZmZXInKTsKICB9Cn0KXABOTjwBGwRIPUxOREkEEAETJCYVEiABEwFINjMCAUshNRQCAVEhOxQCAUIMLB8LJwQBDgg7DiYdDR0GBAERAgE6LDEWEwsxBAIBLxIeHSEsFiYkJiYWEwsxBAIBGnBhY2thZ2U6a2VybmVsL2tlcm5lbC5kYXJ0IHNka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL2FzdC5kYXJ0wAMHXi8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8vICAgICAgICAgICAgICAgICAgICAgICAgICBXSEVOIENIQU5HSU5HIFRISVMgRklMRToKLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vLwovLy8gSWYgeW91IGFyZSBhZGRpbmcvcmVtb3ZpbmcvbW9kaWZ5aW5nIGZpZWxkcy9jbGFzc2VzIG9mIHRoZSBBU1QsIHlvdSBtdXN0Ci8vLyBhbHNvIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGZpbGVzOgovLy8KLy8vICAgLSBiaW5hcnkvYXN0X3RvX2JpbmFyeS5kYXJ0Ci8vLyAgIC0gYmluYXJ5L2FzdF9mcm9tX2JpbmFyeS5kYXJ0Ci8vLyAgIC0gdGV4dC9hc3RfdG9fdGV4dC5kYXJ0Ci8vLyAgIC0gY2xvbmUuZGFydAovLy8gICAtIGJpbmFyeS5tZAovLy8gICAtIHR5cGVfY2hlY2tlci5kYXJ0IChpZiByZWxldmFudCkKLy8vCi8vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBFUlJPUiBIQU5ETElORwovLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8vCi8vLyBBcyBhIHJ1bGUgb2YgdGh1bWIsIGVycm9ycyB0aGF0IGNhbiBiZSBkZXRlY3RlZCBzdGF0aWNhbGx5IGFyZSBoYW5kbGVkIGJ5Ci8vLyB0aGUgZnJvbnRlbmQsIHR5cGljYWxseSBieSB0cmFuc2xhdGluZyB0aGUgZXJyb25lb3VzIGNvZGUgaW50byBhICd0aHJvdycgb3IKLy8vIGEgY2FsbCB0byAnbm9TdWNoTWV0aG9kJy4KLy8vCi8vLyBGb3IgZXhhbXBsZSwgdGhlcmUgYXJlIG5vIGFyaXR5IG1pc21hdGNoZXMgaW4gc3RhdGljIGludm9jYXRpb25zLCBhbmQKLy8vIHRoZXJlIGFyZSBubyBkaXJlY3QgaW52b2NhdGlvbnMgb2YgYSBjb25zdHJ1Y3RvciBvbiBhIGFic3RyYWN0IGNsYXNzLgovLy8KLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQVRJQyB2cyBUT1AtTEVWRUwKLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vLwovLy8gVGhlIHRlcm0gYHN0YXRpY2AgaW5jbHVkZXMgYm90aCBzdGF0aWMgY2xhc3MgbWVtYmVycyBhbmQgdG9wLWxldmVsIG1lbWJlcnMuCi8vLwovLy8gIlN0YXRpYyBjbGFzcyBtZW1iZXIiIGlzIHRoZSBwcmVmZXJyZWQgdGVybSBmb3Igbm9uLXRvcCBsZXZlbCBzdGF0aWNzLgovLy8KLy8vIFN0YXRpYyBjbGFzcyBtZW1iZXJzIGFyZSBub3QgbGlmdGVkIHRvIHRoZSBsaWJyYXJ5IGxldmVsIGJlY2F1c2UgbWlycm9ycwovLy8gYW5kIHN0YWNrIHRyYWNlcyBjYW4gb2JzZXJ2ZSB0aGF0IHRoZXkgYXJlIGNsYXNzIG1lbWJlcnMuCi8vLwovLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPQ0VEVVJFUwovLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8vCi8vLyAiUHJvY2VkdXJlIiBpcyBhbiB1bWJyZWxsYSB0ZXJtIGZvciBtZXRob2QsIGdldHRlciwgc2V0dGVyLCBpbmRleC1nZXR0ZXIsCi8vLyBpbmRleC1zZXR0ZXIsIG9wZXJhdG9yIG92ZXJsb2FkZXIsIGFuZCBmYWN0b3J5IGNvbnN0cnVjdG9yLgovLy8KLy8vIEdlbmVyYXRpdmUgY29uc3RydWN0b3JzLCBmaWVsZCBpbml0aWFsaXplcnMsIGxvY2FsIGZ1bmN0aW9ucyBhcmUgTk9UCi8vLyBwcm9jZWR1cmVzLgovLy8KLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUkFOU0ZPUk1BVElPTlMKLy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vLwovLy8gQVNUIHRyYW5zZm9ybWF0aW9ucyBjYW4gYmUgcGVyZm9ybWVkIHVzaW5nIFtUcmVlTm9kZS5yZXBsYWNlV2l0aF0gb3IgdGhlCi8vLyBbVHJhbnNmb3JtZXJdIHZpc2l0b3IgY2xhc3MuCi8vLwovLy8gVXNlIFtUcmFuc2Zvcm1lcl0gZm9yIGJ1bGsgdHJhbnNmb3JtYXRpb25zIHRoYXQgYXJlIGxpa2VseSB0byB0cmFuc2Zvcm0gbG90cwovLy8gb2Ygbm9kZXMsIGFuZCBbVHJlZU5vZGUucmVwbGFjZVdpdGhdIGZvciBzcGFyc2UgdHJhbnNmb3JtYXRpb25zIHRoYXQgbXV0YXRlCi8vLyByZWxhdGl2ZWx5IGZldyBub2Rlcy4gIE9yIHVzZSB3aGljaGV2ZXIgaXMgbW9yZSBjb252ZW5pZW50LgovLy8KLy8vIFRoZSBBU1QgY2FuIGFsc28gYmUgbXV0YXRlZCBieSBkaXJlY3QgZmllbGQgbWFuaXB1bGF0aW9uLCBidXQgdGhlIHVzZXIgdGhlbgovLy8gaGFzIHRvIHVwZGF0ZSBwYXJlbnQgcG9pbnRlcnMgbWFudWFsbHkuCi8vLwpsaWJyYXJ5IGtlcm5lbC5hc3Q7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyB1dGY4OwoKaW1wb3J0ICd2aXNpdG9yLmRhcnQnOwpleHBvcnQgJ3Zpc2l0b3IuZGFydCc7CgppbXBvcnQgJ2Nhbm9uaWNhbF9uYW1lLmRhcnQnIHNob3cgQ2Fub25pY2FsTmFtZTsKZXhwb3J0ICdjYW5vbmljYWxfbmFtZS5kYXJ0JyBzaG93IENhbm9uaWNhbE5hbWU7CgppbXBvcnQgJ3RyYW5zZm9ybWF0aW9ucy9mbGFncy5kYXJ0JzsKaW1wb3J0ICd0ZXh0L2FzdF90b190ZXh0LmRhcnQnOwppbXBvcnQgJ3R5cGVfYWxnZWJyYS5kYXJ0JzsKaW1wb3J0ICd0eXBlX2Vudmlyb25tZW50LmRhcnQnOwppbXBvcnQgJ2NvcV9hbm5vdC5kYXJ0JzsKCi8vLyBBbnkgdHlwZSBvZiBub2RlIGluIHRoZSBJUi4KYWJzdHJhY3QgY2xhc3MgTm9kZSB7CiAgY29uc3QgTm9kZSgpOwoKICBhY2NlcHQoVmlzaXRvciB2KTsKICB2b2lkIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KTsKCiAgLy8vIFJldHVybnMgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBub2RlIGZvciB1c2UgaW4gZGVidWdnaW5nLgogIC8vLwogIC8vLyBbdG9TdHJpbmddIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBhbmQgc2hvcnQtcnVubmluZyB0ZXN0IHRvb2xzCiAgLy8vIGFzIGl0IGNhbiBjYXVzZSBzZXJpb3VzIG1lbW9yeSBsZWFrcy4KICAvLy8KICAvLy8gU3ludGhldGljIG5hbWVzIGFyZSBjYWNoZWQgZ2xvYmFsbHkgdG8gcmV0YWluIGNvbnNpc3RlbmN5IGFjcm9zcyBkaWZmZXJlbnQKICAvLy8gW3RvU3RyaW5nXSBjYWxscyAoaGVuY2UgdGhlIG1lbW9yeSBsZWFrKS4KICAvLy8KICAvLy8gTm9kZXMgdGhhdCBhcmUgbmFtZWQsIHN1Y2ggYXMgW0NsYXNzXSBhbmQgW01lbWJlcl0sIHJldHVybiB0aGVpcgogIC8vLyAocG9zc2libHkgc3ludGhlc2l6ZWQpIG5hbWUsIHdoZXJlYXMgb3RoZXIgQVNUIG5vZGVzIHJldHVybiB0aGUgY29tcGxldGUKICAvLy8gdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGVpciBzdWJ0cmVlLgogIFN0cmluZyB0b1N0cmluZygpID0+IGRlYnVnTm9kZVRvU3RyaW5nKHRoaXMpOwp9CgovLy8gQSBtdXRhYmxlIEFTVCBub2RlIHdpdGggYSBwYXJlbnQgcG9pbnRlci4KLy8vCi8vLyBUaGlzIGlzIGFueXRoaW5nIG90aGVyIHRoYW4gW05hbWVdIGFuZCBbRGFydFR5cGVdIG5vZGVzLgphYnN0cmFjdCBjbGFzcyBUcmVlTm9kZSBleHRlbmRzIE5vZGUgewogIHN0YXRpYyBpbnQgX2hhc2hDb3VudGVyID0gMDsKICBmaW5hbCBpbnQgaGFzaENvZGUgPSBfaGFzaENvdW50ZXIgPSAoX2hhc2hDb3VudGVyICsgMSkgJiAweDNmZmZmZmZmOwogIHN0YXRpYyBjb25zdCBpbnQgbm9PZmZzZXQgPSAtMTsKCiAgVHJlZU5vZGUgcGFyZW50OwoKICAvLy8gT2Zmc2V0IGluIHRoZSBzb3VyY2UgZmlsZSBpdCBjb21lcyBmcm9tLgogIC8vLwogIC8vLyBWYWxpZCB2YWx1ZXMgYXJlIGZyb20gMCBhbmQgdXAsIG9yIC0xIChbbm9PZmZzZXRdKSBpZiB0aGUgZmlsZSBvZmZzZXQgaXMKICAvLy8gbm90IGF2YWlsYWJsZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBpZiBub25lIGlzIHNwZWNpZmljYWxseSBzZXQpLgogIGludCBmaWxlT2Zmc2V0ID0gbm9PZmZzZXQ7CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KTsKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdik7CiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdik7CgogIC8vLyBSZXBsYWNlcyBbY2hpbGRdIHdpdGggW3JlcGxhY2VtZW50XS4KICAvLy8KICAvLy8gVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgQVNUIHJlbWFpbnMgYSB0cmVlLiAgSW4KICAvLy8gcGFydGljdWxhciwgW3JlcGxhY2VtZW50XSBzaG91bGQgYmUgYW4gb3JwaGFuIG9yIGJlIHBhcnQgb2YgYW4gb3JwaGFuZWQKICAvLy8gc3VidHJlZS4KICAvLy8KICAvLy8gSGFzIG5vIGVmZmVjdCBpZiBbY2hpbGRdIGlzIG5vdCBhY3R1YWxseSBhIGNoaWxkIG9mIHRoaXMgbm9kZS4KICAvLy8KICAvLy8gSWYgW3JlcGxhY2VtZW50XSBpcyBgbnVsbGAsIHRoaXMgd2lsbCBbcmVtb3ZlXSB0aGUgW2NoaWxkXSBub2RlLgogIHZvaWQgcmVwbGFjZUNoaWxkKFRyZWVOb2RlIGNoaWxkLCBUcmVlTm9kZSByZXBsYWNlbWVudCkgewogICAgdHJhbnNmb3JtQ2hpbGRyZW4obmV3IF9DaGlsZFJlcGxhY2VyKGNoaWxkLCByZXBsYWNlbWVudCkpOwogIH0KCiAgLy8vIEluc2VydHMgYW5vdGhlciBub2RlIGluIHBsYWNlIG9mIHRoaXMgb25lLgogIC8vLwogIC8vLyBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IHRoZSBBU1QgcmVtYWlucyBhIHRyZWUuICBJbgogIC8vLyBwYXJ0aWN1bGFyLCBbcmVwbGFjZW1lbnRdIHNob3VsZCBiZSBhbiBvcnBoYW4gb3IgYmUgcGFydCBvZiBhbiBvcnBoYW5lZAogIC8vLyBzdWJ0cmVlLgogIC8vLwogIC8vLyBJZiBbcmVwbGFjZW1lbnRdIGlzIGBudWxsYCwgdGhpcyB3aWxsIFtyZW1vdmVdIHRoZSBub2RlLgogIHZvaWQgcmVwbGFjZVdpdGgoVHJlZU5vZGUgcmVwbGFjZW1lbnQpIHsKICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQodGhpcywgcmVwbGFjZW1lbnQpOwogICAgcGFyZW50ID0gbnVsbDsKICB9CgogIC8vLyBSZW1vdmVzIHRoaXMgbm9kZSBmcm9tIHRoZSBbTGlzdF0gaXQgaXMgY3VycmVudGx5IHN0b3JlZCBpbiwgb3IgYXNzaWducwogIC8vLyBgbnVsbGAgdG8gdGhlIGZpZWxkIG9uIHRoZSBwYXJlbnQgY3VycmVudGx5IHBvaW50aW5nIHRvIHRoZSBub2RlLgogIC8vLwogIC8vLyBIYXMgbm8gZWZmZWN0IGlmIHRoZSBub2RlIGlzIG9ycGhhbmVkIG9yIGlmIHRoZSBwYXJlbnQgcG9pbnRlciBpcyBzdGFsZS4KICB2b2lkIHJlbW92ZSgpIHsKICAgIHBhcmVudD8ucmVwbGFjZUNoaWxkKHRoaXMsIG51bGwpOwogICAgcGFyZW50ID0gbnVsbDsKICB9CgogIENvbXBvbmVudCBnZXQgZW5jbG9zaW5nQ29tcG9uZW50ID0+IHBhcmVudD8uZW5jbG9zaW5nQ29tcG9uZW50OwoKICAvLy8gUmV0dXJucyB0aGUgYmVzdCBrbm93biBzb3VyY2UgbG9jYXRpb24gb2YgdGhlIGdpdmVuIEFTVCBub2RlLCBvciBgbnVsbGAgaWYKICAvLy8gdGhlIG5vZGUgaXMgb3JwaGFuZWQuCiAgLy8vCiAgLy8vIFRoaXMgZ2V0dGVyIGlzIGludGVuZGVkIGZvciBkaWFnbm9zdGljcyBhbmQgZGVidWdnaW5nLCBhbmQgc2hvdWxkIGJlCiAgLy8vIGF2b2lkZWQgaW4gcHJvZHVjdGlvbiBjb2RlLgogIExvY2F0aW9uIGdldCBsb2NhdGlvbiB7CiAgICBpZiAoZmlsZU9mZnNldCA9PSBub09mZnNldCkgcmV0dXJuIHBhcmVudD8ubG9jYXRpb247CiAgICByZXR1cm4gX2dldExvY2F0aW9uSW5FbmNsb3NpbmdGaWxlKGZpbGVPZmZzZXQpOwogIH0KCiAgTG9jYXRpb24gX2dldExvY2F0aW9uSW5FbmNsb3NpbmdGaWxlKGludCBvZmZzZXQpIHsKICAgIHJldHVybiBwYXJlbnQ/Ll9nZXRMb2NhdGlvbkluRW5jbG9zaW5nRmlsZShvZmZzZXQpOwogIH0KfQoKLy8vIEFuIEFTVCBub2RlIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWQgYnkgb3RoZXIgbm9kZXMuCi8vLwovLy8gVGhlcmUgaXMgYSBzaW5nbGUgW3JlZmVyZW5jZV0gYmVsb25naW5nIHRvIHRoaXMgbm9kZSwgcHJvdmlkaW5nIGEgbGV2ZWwgb2YKLy8vIGluZGlyZWN0aW9uIHRoYXQgaXMgbmVlZGVkIGR1cmluZyBzZXJpYWxpemF0aW9uLgpAY29xCmFic3RyYWN0IGNsYXNzIE5hbWVkTm9kZSBleHRlbmRzIFRyZWVOb2RlIHsKICBAY29xZGVmCiAgZmluYWwgUmVmZXJlbmNlIHJlZmVyZW5jZTsKCiAgTmFtZWROb2RlKFJlZmVyZW5jZSByZWZlcmVuY2UpCiAgICAgIDogdGhpcy5yZWZlcmVuY2UgPSByZWZlcmVuY2UgPz8gbmV3IFJlZmVyZW5jZSgpIHsKICAgIHRoaXMucmVmZXJlbmNlLm5vZGUgPSB0aGlzOwogIH0KCiAgQ2Fub25pY2FsTmFtZSBnZXQgY2Fub25pY2FsTmFtZSA9PiByZWZlcmVuY2U/LmNhbm9uaWNhbE5hbWU7Cn0KCmFic3RyYWN0IGNsYXNzIEZpbGVVcmlOb2RlIGV4dGVuZHMgVHJlZU5vZGUgewogIC8vLyBUaGUgVVJJIG9mIHRoZSBzb3VyY2UgZmlsZSB0aGlzIG5vZGUgd2FzIGxvYWRlZCBmcm9tLgogIFVyaSBnZXQgZmlsZVVyaTsKfQoKYWJzdHJhY3QgY2xhc3MgQW5ub3RhdGFibGUgewogIExpc3Q8RXhwcmVzc2lvbj4gZ2V0IGFubm90YXRpb25zOwogIHZvaWQgYWRkQW5ub3RhdGlvbihFeHByZXNzaW9uIG5vZGUpOwp9CgovLy8gSW5kaXJlY3Rpb24gYmV0d2VlbiBhIHJlZmVyZW5jZSBhbmQgaXRzIGRlZmluaXRpb24uCi8vLwovLy8gVGhlcmUgaXMgb25seSBvbmUgcmVmZXJlbmNlIG9iamVjdCBwZXIgW05hbWVkTm9kZV0uCkBjb3FyZWYKY2xhc3MgUmVmZXJlbmNlIHsKICBDYW5vbmljYWxOYW1lIGNhbm9uaWNhbE5hbWU7CgogIEBub2NvcQogIE5hbWVkTm9kZSBub2RlOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBpZiAoY2Fub25pY2FsTmFtZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiAnUmVmZXJlbmNlIHRvICRjYW5vbmljYWxOYW1lJzsKICAgIH0KICAgIGlmIChub2RlICE9IG51bGwpIHsKICAgICAgcmV0dXJuICdSZWZlcmVuY2UgdG8gJG5vZGUnOwogICAgfQogICAgcmV0dXJuICdVbmJvdW5kIHJlZmVyZW5jZSc7CiAgfQoKICBMaWJyYXJ5IGdldCBhc0xpYnJhcnkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICB0aHJvdyAnJHRoaXMgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIGxpYnJhcnkgd2FzIGV4cGVjdGVkJzsKICAgIH0KICAgIHJldHVybiBub2RlIGFzIExpYnJhcnk7CiAgfQoKICBDbGFzcyBnZXQgYXNDbGFzcyB7CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIHRocm93ICckdGhpcyBpcyBub3QgYm91bmQgdG8gYW4gQVNUIG5vZGUuIEEgY2xhc3Mgd2FzIGV4cGVjdGVkJzsKICAgIH0KICAgIHJldHVybiBub2RlIGFzIENsYXNzOwogIH0KCiAgTWVtYmVyIGdldCBhc01lbWJlciB7CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIHRocm93ICckdGhpcyBpcyBub3QgYm91bmQgdG8gYW4gQVNUIG5vZGUuIEEgbWVtYmVyIHdhcyBleHBlY3RlZCc7CiAgICB9CiAgICByZXR1cm4gbm9kZSBhcyBNZW1iZXI7CiAgfQoKICBGaWVsZCBnZXQgYXNGaWVsZCB7CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIHRocm93ICckdGhpcyBpcyBub3QgYm91bmQgdG8gYW4gQVNUIG5vZGUuIEEgZmllbGQgd2FzIGV4cGVjdGVkJzsKICAgIH0KICAgIHJldHVybiBub2RlIGFzIEZpZWxkOwogIH0KCiAgQ29uc3RydWN0b3IgZ2V0IGFzQ29uc3RydWN0b3IgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICB0aHJvdyAnJHRoaXMgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIGNvbnN0cnVjdG9yIHdhcyBleHBlY3RlZCc7CiAgICB9CiAgICByZXR1cm4gbm9kZSBhcyBDb25zdHJ1Y3RvcjsKICB9CgogIFByb2NlZHVyZSBnZXQgYXNQcm9jZWR1cmUgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICB0aHJvdyAnJHRoaXMgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIHByb2NlZHVyZSB3YXMgZXhwZWN0ZWQnOwogICAgfQogICAgcmV0dXJuIG5vZGUgYXMgUHJvY2VkdXJlOwogIH0KCiAgVHlwZWRlZiBnZXQgYXNUeXBlZGVmIHsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgdGhyb3cgJyR0aGlzIGlzIG5vdCBib3VuZCB0byBhbiBBU1Qgbm9kZS4gQSB0eXBlZGVmIHdhcyBleHBlY3RlZCc7CiAgICB9CiAgICByZXR1cm4gbm9kZSBhcyBUeXBlZGVmOwogIH0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICAgICAgICAgICAgICAgICAgICAgIExJQlJBUklFUyBhbmQgQ0xBU1NFUwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCkBjb3EKY2xhc3MgTGlicmFyeSBleHRlbmRzIE5hbWVkTm9kZQogICAgaW1wbGVtZW50cyBBbm5vdGF0YWJsZSwgQ29tcGFyYWJsZTxMaWJyYXJ5PiwgRmlsZVVyaU5vZGUgewogIC8vLyBBbiBpbXBvcnQgcGF0aCB0byB0aGlzIGxpYnJhcnkuCiAgLy8vCiAgLy8vIFRoZSBbVXJpXSBzaG91bGQgaGF2ZSB0aGUgYGRhcnRgLCBgcGFja2FnZWAsIGBhcHBgLCBvciBgZmlsZWAgc2NoZW1lLgogIC8vLwogIC8vLyBJZiB0aGUgVVJJIGhhcyB0aGUgYGFwcGAgc2NoZW1lLCBpdCBpcyByZWxhdGl2ZSB0byB0aGUgYXBwbGljYXRpb24gcm9vdC4KICBVcmkgaW1wb3J0VXJpOwoKICAvLy8gVGhlIFVSSSBvZiB0aGUgc291cmNlIGZpbGUgdGhpcyBsaWJyYXJ5IHdhcyBsb2FkZWQgZnJvbS4KICBVcmkgZmlsZVVyaTsKCiAgLy8gVE9ETyhqZW5zaik6IERvIHdlIGhhdmUgYSBiZXR0ZXIgb3B0aW9uIHRoYW4gdGhpcz8KICBzdGF0aWMgaW50IGRlZmF1bHRMYW5nYXVnZVZlcnNpb25NYWpvciA9IDI7CiAgc3RhdGljIGludCBkZWZhdWx0TGFuZ2F1Z2VWZXJzaW9uTWlub3IgPSA0OwoKICBpbnQgX2xhbmd1YWdlVmVyc2lvbk1ham9yOwogIGludCBfbGFuZ3VhZ2VWZXJzaW9uTWlub3I7CiAgaW50IGdldCBsYW5ndWFnZVZlcnNpb25NYWpvciA9PgogICAgICBfbGFuZ3VhZ2VWZXJzaW9uTWFqb3IgPz8gZGVmYXVsdExhbmdhdWdlVmVyc2lvbk1ham9yOwogIGludCBnZXQgbGFuZ3VhZ2VWZXJzaW9uTWlub3IgPT4KICAgICAgX2xhbmd1YWdlVmVyc2lvbk1pbm9yID8/IGRlZmF1bHRMYW5nYXVnZVZlcnNpb25NaW5vcjsKICB2b2lkIHNldExhbmd1YWdlVmVyc2lvbihpbnQgbGFuZ3VhZ2VWZXJzaW9uTWFqb3IsIGludCBsYW5ndWFnZVZlcnNpb25NaW5vcikgewogICAgaWYgKGxhbmd1YWdlVmVyc2lvbk1ham9yID09IG51bGwgfHwgbGFuZ3VhZ2VWZXJzaW9uTWlub3IgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiVHJ5aW5nIHRvIHNldCBsYW5nYXVnZSB2ZXJzaW9uICdudWxsJyIpOwogICAgfQogICAgX2xhbmd1YWdlVmVyc2lvbk1ham9yID0gbGFuZ3VhZ2VWZXJzaW9uTWFqb3I7CiAgICBfbGFuZ3VhZ2VWZXJzaW9uTWlub3IgPSBsYW5ndWFnZVZlcnNpb25NaW5vcjsKICB9CgogIHN0YXRpYyBjb25zdCBpbnQgRXh0ZXJuYWxGbGFnID0gMSA8PCAwOwogIHN0YXRpYyBjb25zdCBpbnQgU3ludGhldGljRmxhZyA9IDEgPDwgMTsKCiAgaW50IGZsYWdzID0gMDsKCiAgLy8vIElmIHRydWUsIHRoZSBsaWJyYXJ5IGlzIHBhcnQgb2YgYW5vdGhlciBidWlsZCB1bml0IGFuZCBpdHMgY29udGVudHMKICAvLy8gYXJlIG9ubHkgcGFydGlhbGx5IGxvYWRlZC4KICAvLy8KICAvLy8gQ2xhc3NlcyBvZiBhbiBleHRlcm5hbCBsaWJyYXJ5IGFyZSBsb2FkZWQgYXQgb25lIG9mIHRoZSBbQ2xhc3NMZXZlbF1zCiAgLy8vIG90aGVyIHRoYW4gW0NsYXNzTGV2ZWwuQm9keV0uICBNZW1iZXJzIGluIGFuIGV4dGVybmFsIGxpYnJhcnkgaGF2ZSBubwogIC8vLyBib2R5LCBidXQgaGF2ZSB0aGVpciB0eXBlZCBpbnRlcmZhY2UgcHJlc2VudC4KICAvLy8KICAvLy8gSWYgdGhlIGxpYnJhcnkgaXMgbm9uLWV4dGVybmFsLCB0aGVuIGl0cyBjbGFzc2VzIGFyZSBhdCBbQ2xhc3NMZXZlbC5Cb2R5XQogIC8vLyBhbmQgYWxsIG1lbWJlcnMgYXJlIGxvYWRlZC4KICBib29sIGdldCBpc0V4dGVybmFsID0+IChmbGFncyAmIEV4dGVybmFsRmxhZykgIT0gMDsKICB2b2lkIHNldCBpc0V4dGVybmFsKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBFeHRlcm5hbEZsYWcpIDogKGZsYWdzICYgfkV4dGVybmFsRmxhZyk7CiAgfQoKICAvLy8gSWYgdHJ1ZSwgdGhlIGxpYnJhcnkgaXMgc3ludGhldGljLCBmb3IgaW5zdGFuY2UgbGlicmFyeSB0aGF0IGRvZXNuJ3QKICAvLy8gcmVwcmVzZW50cyBhbiBhY3R1YWwgZmlsZSBhbmQgaXMgY3JlYXRlZCBhcyB0aGUgcmVzdWx0IG9mIGVycm9yIHJlY292ZXJ5LgogIGJvb2wgZ2V0IGlzU3ludGhldGljID0+IGZsYWdzICYgU3ludGhldGljRmxhZyAhPSAwOwogIHZvaWQgc2V0IGlzU3ludGhldGljKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBTeW50aGV0aWNGbGFnKSA6IChmbGFncyAmIH5TeW50aGV0aWNGbGFnKTsKICB9CgogIFN0cmluZyBuYW1lOwoKICAvLy8gUHJvYmxlbXMgaW4gdGhpcyBbTGlicmFyeV0gZW5jb2RlZCBhcyBqc29uIG9iamVjdHMuCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCB0aGlzIGZpZWxkIGNhbiBiZSBudWxsLCBhbmQgYnkgY29udmVudGlvbiBzaG91bGQgYmUgbnVsbCBpZiB0aGUKICAvLy8gbGlzdCBpcyBlbXB0eS4KICBMaXN0PFN0cmluZz4gcHJvYmxlbXNBc0pzb247CgogIEBub2NvcQogIGZpbmFsIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnM7CgogIGZpbmFsIExpc3Q8TGlicmFyeURlcGVuZGVuY3k+IGRlcGVuZGVuY2llczsKCiAgLy8vIFJlZmVyZW5jZXMgdG8gbm9kZXMgZXhwb3J0ZWQgYnkgYGV4cG9ydGAgZGVjbGFyYXRpb25zIHRoYXQ6CiAgLy8vIC0gYXJlbid0IGFtYmlndW91cywgb3IKICAvLy8gLSBhcmVuJ3QgaGlkZGVuIGJ5IGxvY2FsIGRlY2xhcmF0aW9ucy4KICBAbm9jb3EKICBmaW5hbCBMaXN0PFJlZmVyZW5jZT4gYWRkaXRpb25hbEV4cG9ydHMgPSA8UmVmZXJlbmNlPltdOwoKICBAaW5mb3JtYXRpdmUKICBmaW5hbCBMaXN0PExpYnJhcnlQYXJ0PiBwYXJ0czsKCiAgZmluYWwgTGlzdDxUeXBlZGVmPiB0eXBlZGVmczsKICBmaW5hbCBMaXN0PENsYXNzPiBjbGFzc2VzOwogIGZpbmFsIExpc3Q8UHJvY2VkdXJlPiBwcm9jZWR1cmVzOwogIGZpbmFsIExpc3Q8RmllbGQ+IGZpZWxkczsKCiAgTGlicmFyeSh0aGlzLmltcG9ydFVyaSwKICAgICAge3RoaXMubmFtZSwKICAgICAgYm9vbCBpc0V4dGVybmFsOiBmYWxzZSwKICAgICAgTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9ucywKICAgICAgTGlzdDxMaWJyYXJ5RGVwZW5kZW5jeT4gZGVwZW5kZW5jaWVzLAogICAgICBMaXN0PExpYnJhcnlQYXJ0PiBwYXJ0cywKICAgICAgTGlzdDxUeXBlZGVmPiB0eXBlZGVmcywKICAgICAgTGlzdDxDbGFzcz4gY2xhc3NlcywKICAgICAgTGlzdDxQcm9jZWR1cmU+IHByb2NlZHVyZXMsCiAgICAgIExpc3Q8RmllbGQ+IGZpZWxkcywKICAgICAgdGhpcy5maWxlVXJpLAogICAgICBSZWZlcmVuY2UgcmVmZXJlbmNlfSkKICAgICAgOiB0aGlzLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnMgPz8gPEV4cHJlc3Npb24+W10sCiAgICAgICAgdGhpcy5kZXBlbmRlbmNpZXMgPSBkZXBlbmRlbmNpZXMgPz8gPExpYnJhcnlEZXBlbmRlbmN5PltdLAogICAgICAgIHRoaXMucGFydHMgPSBwYXJ0cyA/PyA8TGlicmFyeVBhcnQ+W10sCiAgICAgICAgdGhpcy50eXBlZGVmcyA9IHR5cGVkZWZzID8/IDxUeXBlZGVmPltdLAogICAgICAgIHRoaXMuY2xhc3NlcyA9IGNsYXNzZXMgPz8gPENsYXNzPltdLAogICAgICAgIHRoaXMucHJvY2VkdXJlcyA9IHByb2NlZHVyZXMgPz8gPFByb2NlZHVyZT5bXSwKICAgICAgICB0aGlzLmZpZWxkcyA9IGZpZWxkcyA/PyA8RmllbGQ+W10sCiAgICAgICAgc3VwZXIocmVmZXJlbmNlKSB7CiAgICB0aGlzLmlzRXh0ZXJuYWwgPSBpc0V4dGVybmFsOwogICAgc2V0UGFyZW50cyh0aGlzLmRlcGVuZGVuY2llcywgdGhpcyk7CiAgICBzZXRQYXJlbnRzKHRoaXMucGFydHMsIHRoaXMpOwogICAgc2V0UGFyZW50cyh0aGlzLnR5cGVkZWZzLCB0aGlzKTsKICAgIHNldFBhcmVudHModGhpcy5jbGFzc2VzLCB0aGlzKTsKICAgIHNldFBhcmVudHModGhpcy5wcm9jZWR1cmVzLCB0aGlzKTsKICAgIHNldFBhcmVudHModGhpcy5maWVsZHMsIHRoaXMpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHRvcC1sZXZlbCBmaWVsZHMgYW5kIHByb2NlZHVyZXMgZGVmaW5lZCBpbiB0aGlzIGxpYnJhcnkuCiAgLy8vCiAgLy8vIFRoaXMgZ2V0dGVyIGlzIGZvciBjb252ZW5pZW5jZSwgbm90IGVmZmljaWVuY3kuICBDb25zaWRlciBtYW51YWxseQogIC8vLyBpdGVyYXRpbmcgdGhlIG1lbWJlcnMgdG8gc3BlZWQgdXAgY29kZSBpbiBwcm9kdWN0aW9uLgogIEl0ZXJhYmxlPE1lbWJlcj4gZ2V0IG1lbWJlcnMgPT4KICAgICAgPEl0ZXJhYmxlPE1lbWJlcj4+W2ZpZWxkcywgcHJvY2VkdXJlc10uZXhwYW5kKCh4KSA9PiB4KTsKCiAgdm9pZCBhZGRNZW1iZXIoTWVtYmVyIG1lbWJlcikgewogICAgbWVtYmVyLnBhcmVudCA9IHRoaXM7CiAgICBpZiAobWVtYmVyIGlzIFByb2NlZHVyZSkgewogICAgICBwcm9jZWR1cmVzLmFkZChtZW1iZXIpOwogICAgfSBlbHNlIGlmIChtZW1iZXIgaXMgRmllbGQpIHsKICAgICAgZmllbGRzLmFkZChtZW1iZXIpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IobWVtYmVyKTsKICAgIH0KICB9CgogIHZvaWQgYWRkQW5ub3RhdGlvbihFeHByZXNzaW9uIG5vZGUpIHsKICAgIG5vZGUucGFyZW50ID0gdGhpczsKICAgIGFubm90YXRpb25zLmFkZChub2RlKTsKICB9CgogIHZvaWQgYWRkQ2xhc3MoQ2xhc3MgY2xhc3NfKSB7CiAgICBjbGFzc18ucGFyZW50ID0gdGhpczsKICAgIGNsYXNzZXMuYWRkKGNsYXNzXyk7CiAgfQoKICB2b2lkIGFkZEZpZWxkKEZpZWxkIGZpZWxkKSB7CiAgICBmaWVsZC5wYXJlbnQgPSB0aGlzOwogICAgZmllbGRzLmFkZChmaWVsZCk7CiAgfQoKICB2b2lkIGFkZFByb2NlZHVyZShQcm9jZWR1cmUgcHJvY2VkdXJlKSB7CiAgICBwcm9jZWR1cmUucGFyZW50ID0gdGhpczsKICAgIHByb2NlZHVyZXMuYWRkKHByb2NlZHVyZSk7CiAgfQoKICB2b2lkIGFkZFR5cGVkZWYoVHlwZWRlZiB0eXBlZGVmXykgewogICAgdHlwZWRlZl8ucGFyZW50ID0gdGhpczsKICAgIHR5cGVkZWZzLmFkZCh0eXBlZGVmXyk7CiAgfQoKICB2b2lkIGNvbXB1dGVDYW5vbmljYWxOYW1lcygpIHsKICAgIGFzc2VydChjYW5vbmljYWxOYW1lICE9IG51bGwpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlZGVmcy5sZW5ndGg7ICsraSkgewogICAgICBUeXBlZGVmIHR5cGVkZWZfID0gdHlwZWRlZnNbaV07CiAgICAgIGNhbm9uaWNhbE5hbWUuZ2V0Q2hpbGRGcm9tVHlwZWRlZih0eXBlZGVmXykuYmluZFRvKHR5cGVkZWZfLnJlZmVyZW5jZSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkcy5sZW5ndGg7ICsraSkgewogICAgICBGaWVsZCBmaWVsZCA9IGZpZWxkc1tpXTsKICAgICAgY2Fub25pY2FsTmFtZS5nZXRDaGlsZEZyb21NZW1iZXIoZmllbGQpLmJpbmRUbyhmaWVsZC5yZWZlcmVuY2UpOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm9jZWR1cmVzLmxlbmd0aDsgKytpKSB7CiAgICAgIFByb2NlZHVyZSBtZW1iZXIgPSBwcm9jZWR1cmVzW2ldOwogICAgICBjYW5vbmljYWxOYW1lLmdldENoaWxkRnJvbU1lbWJlcihtZW1iZXIpLmJpbmRUbyhtZW1iZXIucmVmZXJlbmNlKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7ICsraSkgewogICAgICBDbGFzcyBjbGFzc18gPSBjbGFzc2VzW2ldOwogICAgICBjYW5vbmljYWxOYW1lLmdldENoaWxkKGNsYXNzXy5uYW1lKS5iaW5kVG8oY2xhc3NfLnJlZmVyZW5jZSk7CiAgICAgIGNsYXNzXy5jb21wdXRlQ2Fub25pY2FsTmFtZXMoKTsKICAgIH0KICB9CgogIHZvaWQgYWRkRGVwZW5kZW5jeShMaWJyYXJ5RGVwZW5kZW5jeSBub2RlKSB7CiAgICBkZXBlbmRlbmNpZXMuYWRkKG5vZGUuLnBhcmVudCA9IHRoaXMpOwogIH0KCiAgdm9pZCBhZGRQYXJ0KExpYnJhcnlQYXJ0IG5vZGUpIHsKICAgIHBhcnRzLmFkZChub2RlLi5wYXJlbnQgPSB0aGlzKTsKICB9CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KSA9PiB2LnZpc2l0TGlicmFyeSh0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChhbm5vdGF0aW9ucywgdik7CiAgICB2aXNpdExpc3QoZGVwZW5kZW5jaWVzLCB2KTsKICAgIHZpc2l0TGlzdChwYXJ0cywgdik7CiAgICB2aXNpdExpc3QodHlwZWRlZnMsIHYpOwogICAgdmlzaXRMaXN0KGNsYXNzZXMsIHYpOwogICAgdmlzaXRMaXN0KHByb2NlZHVyZXMsIHYpOwogICAgdmlzaXRMaXN0KGZpZWxkcywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QoZGVwZW5kZW5jaWVzLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QocGFydHMsIHYsIHRoaXMpOwogICAgdHJhbnNmb3JtTGlzdCh0eXBlZGVmcywgdiwgdGhpcyk7CiAgICB0cmFuc2Zvcm1MaXN0KGNsYXNzZXMsIHYsIHRoaXMpOwogICAgdHJhbnNmb3JtTGlzdChwcm9jZWR1cmVzLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QoZmllbGRzLCB2LCB0aGlzKTsKICB9CgogIHN0YXRpYyBpbnQgX2xpYnJhcnlJZENvdW50ZXIgPSAwOwogIGludCBfbGlicmFyeUlkID0gKytfbGlicmFyeUlkQ291bnRlcjsKCiAgaW50IGNvbXBhcmVUbyhMaWJyYXJ5IG90aGVyKSA9PiBfbGlicmFyeUlkIC0gb3RoZXIuX2xpYnJhcnlJZDsKCiAgLy8vIFJldHVybnMgYSBwb3NzaWJseSBzeW50aGVzaXplZCBuYW1lIGZvciB0aGlzIGxpYnJhcnksIGNvbnNpc3RlbnQgd2l0aAogIC8vLyB0aGUgbmFtZXMgYWNyb3NzIGFsbCBbdG9TdHJpbmddIGNhbGxzLgogIFN0cmluZyB0b1N0cmluZygpID0+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+W10sCiAgICAgICAgc3VwZXIocmVmZXJlbmNlKSB7CiAgICBzZXRQYXJlbnRzKHRoaXMudHlwZVBhcmFtZXRlcnMsIHRoaXMpOwogIH0KCiAgTGlicmFyeSBnZXQgZW5jbG9zaW5nTGlicmFyeSA9PiBwYXJlbnQ7CgogIFR5cGVkZWZUeXBlIGdldCB0aGlzVHlwZSB7CiAgICByZXR1cm4gbmV3IFR5cGVkZWZUeXBlKHRoaXMsIF9nZXRBc1R5cGVBcmd1bWVudHModHlwZVBhcmFtZXRlcnMpKTsKICB9CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KSB7CiAgICByZXR1cm4gdi52aXNpdFR5cGVkZWYodGhpcyk7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QodHlwZVBhcmFtZXRlcnMsIHYsIHRoaXMpOwogICAgaWYgKHR5cGUgIT0gbnVsbCkgewogICAgICB0eXBlID0gdi52aXNpdERhcnRUeXBlKHR5cGUpOwogICAgfQogIH0KCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChhbm5vdGF0aW9ucywgdik7CiAgICB2aXNpdExpc3QodHlwZVBhcmFtZXRlcnMsIHYpOwogICAgdHlwZT8uYWNjZXB0KHYpOwogIH0KCiAgdm9pZCBhZGRBbm5vdGF0aW9uKEV4cHJlc3Npb24gbm9kZSkgewogICAgaWYgKGFubm90YXRpb25zLmlzRW1wdHkpIHsKICAgICAgYW5ub3RhdGlvbnMgPSA8RXhwcmVzc2lvbj5bXTsKICAgIH0KICAgIGFubm90YXRpb25zLmFkZChub2RlKTsKICAgIG5vZGUucGFyZW50ID0gdGhpczsKICB9CgogIExvY2F0aW9uIF9nZXRMb2NhdGlvbkluRW5jbG9zaW5nRmlsZShpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4gX2dldExvY2F0aW9uSW5Db21wb25lbnQoZW5jbG9zaW5nQ29tcG9uZW50LCBmaWxlVXJpLCBvZmZzZXQpOwogIH0KfQoKLy8vIFRoZSBkZWdyZWUgdG8gd2hpY2ggdGhlIGNvbnRlbnRzIG9mIGEgY2xhc3MgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIG1lbW9yeS4KLy8vCi8vLyBFYWNoIGxldmVsIGltcGx5IHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIHByZXZpb3VzIG9uZXMuCmVudW0gQ2xhc3NMZXZlbCB7CiAgLy8vIFRlbXBvcmFyeSBsb2FkaW5nIGxldmVsIGZvciBpbnRlcm5hbCB1c2UgYnkgSVIgcHJvZHVjZXJzLiAgQ29uc3VtZXJzIG9mCiAgLy8vIGtlcm5lbCBjb2RlIHNob3VsZCBub3QgZXhwZWN0IHRvIHNlZSBjbGFzc2VzIGF0IHRoaXMgbGV2ZWwuCiAgVGVtcG9yYXJ5LAoKICAvLy8gVGhlIGNsYXNzIG1heSBiZSB1c2VkIGFzIGEgdHlwZSwgYW5kIGl0IG1heSBjb250YWluIG1lbWJlcnMgdGhhdCBhcmUKICAvLy8gcmVmZXJlbmNlZCBmcm9tIHRoaXMgYnVpbGQgdW5pdC4KICAvLy8KICAvLy8gVGhlIHR5cGUgcGFyYW1ldGVycyBhbmQgdGhlaXIgYm91bmRzIGFyZSBwcmVzZW50LgogIC8vLwogIC8vLyBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBhbGwgbWVtYmVycyBhcmUgcHJlc2VudC4KICAvLy8KICAvLy8gQWxsIHN1cGVydHlwZXMgb2YgdGhpcyBjbGFzcyBhcmUgYXQgW1R5cGVdIGxldmVsIG9yIGhpZ2hlci4KICBUeXBlLAoKICAvLy8gQWxsIGluc3RhbmNlIG1lbWJlcnMgb2YgdGhlIGNsYXNzIGFyZSBwcmVzZW50LgogIC8vLwogIC8vLyBBbGwgc3VwZXJ0eXBlcyBvZiB0aGlzIGNsYXNzIGFyZSBhdCBbSGllcmFyY2h5XSBsZXZlbCBvciBoaWdoZXIuCiAgLy8vCiAgLy8vIFRoaXMgbGV2ZWwgZXhpc3RzIHNvIHN1cGVydHlwZXMgb2YgYSBmdWxseSBsb2FkZWQgY2xhc3MgY29udGFpbiBhbGwgdGhlCiAgLy8vIG1lbWJlcnMgbmVlZGVkIHRvIGRldGVjdCBvdmVycmlkZSBjb25zdHJhaW50cy4KICBIaWVyYXJjaHksCgogIC8vLyBBbGwgaW5zdGFuY2UgbWVtYmVycyBvZiB0aGUgY2xhc3MgaGF2ZSB0aGVpciBib2R5IGxvYWRlZCwgYW5kIHRoZWlyCiAgLy8vIGFubm90YXRpb25zIGFyZSBwcmVzZW50LgogIC8vLwogIC8vLyBBbGwgc3VwZXJ0eXBlcyBvZiB0aGlzIGNsYXNzIGFyZSBhdCBbSGllcmFyY2h5XSBsZXZlbCBvciBoaWdoZXIuCiAgLy8vCiAgLy8vIElmIHRoaXMgY2xhc3MgaXMgYSBtaXhpbiBhcHBsaWNhdGlvbiwgdGhlbiBpdHMgbWl4aW4gaXMgbG9hZGVkIGF0IFtNaXhpbl0KICAvLy8gbGV2ZWwgb3IgaGlnaGVyLgogIC8vLwogIC8vLyBUaGlzIGxldmVsIGV4aXN0cyBzbyB0aGUgY29udGVudHMgb2YgYSBtaXhpbiBjYW4gYmUgY2xvbmVkIGludG8gYQogIC8vLyBtaXhpbiBhcHBsaWNhdGlvbi4KICBNaXhpbiwKCiAgLy8vIEFsbCBtZW1iZXJzIG9mIHRoZSBjbGFzcyBhcmUgZnVsbHkgbG9hZGVkIGFuZCBhcmUgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCiAgLy8vCiAgLy8vIEFubm90YXRpb25zIGFyZSBwcmVzZW50IG9uIGNsYXNzZXMgYW5kIG1lbWJlcnMuCiAgLy8vCiAgLy8vIEFsbCBzdXBlcnR5cGVzIG9mIHRoaXMgY2xhc3MgYXJlIGF0IFtIaWVyYXJjaHldIGxldmVsIG9yIGhpZ2hlciwKICAvLy8gbm90IG5lY2Vzc2FyaWx5IGF0IFtCb2R5XSBsZXZlbC4KICBCb2R5LAp9CgovLy8gRGVjbGFyYXRpb24gb2YgYSByZWd1bGFyIGNsYXNzIG9yIGEgbWl4aW4gYXBwbGljYXRpb24uCi8vLwovLy8gTWl4aW4gYXBwbGljYXRpb25zIG1heSBub3QgY29udGFpbiBmaWVsZHMgb3IgcHJvY2VkdXJlcywgYXMgdGhleSBpbXBsaWNpdGx5Ci8vLyB1c2UgdGhvc2UgZnJvbSBpdHMgbWl4ZWQtaW4gdHlwZS4gIEhvd2V2ZXIsIHRoZSBJUiBkb2VzIG5vdCBlbmZvcmNlIHRoaXMKLy8vIHJ1bGUgZGlyZWN0bHksIGFzIGRvaW5nIHNvIGNhbiBvYnN0cnVjdCB0cmFuc2Zvcm1hdGlvbnMuICBJdCBpcyBwb3NzaWJsZSB0bwovLy8gdHJhbnNmb3JtIGEgbWl4aW4gYXBwbGljYXRpb24gdG8gYmVjb21lIGEgcmVndWxhciBjbGFzcywgYW5kIHZpY2UgdmVyc2EuCkBjb3EKY2xhc3MgQ2xhc3MgZXh0ZW5kcyBOYW1lZE5vZGUgaW1wbGVtZW50cyBBbm5vdGF0YWJsZSwgRmlsZVVyaU5vZGUgewogIC8vLyBTdGFydCBvZmZzZXQgb2YgdGhlIGNsYXNzIGluIHRoZSBzb3VyY2UgZmlsZSBpdCBjb21lcyBmcm9tLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhpcyBpbmNsdWRlcyBhbm5vdGF0aW9ucyBpZiBhbnkuCiAgLy8vCiAgLy8vIFZhbGlkIHZhbHVlcyBhcmUgZnJvbSAwIGFuZCB1cCwgb3IgLTEgKFtUcmVlTm9kZS5ub09mZnNldF0pIGlmIHRoZSBmaWxlCiAgLy8vIHN0YXJ0IG9mZnNldCBpcyBub3QgYXZhaWxhYmxlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGlmIG5vbmUgaXMgc3BlY2lmaWNhbGx5CiAgLy8vIHNldCkuCiAgaW50IHN0YXJ0RmlsZU9mZnNldCA9IFRyZWVOb2RlLm5vT2Zmc2V0OwoKICAvLy8gRW5kIG9mZnNldCBpbiB0aGUgc291cmNlIGZpbGUgaXQgY29tZXMgZnJvbS4gVmFsaWQgdmFsdWVzIGFyZSBmcm9tIDAgYW5kCiAgLy8vIHVwLCBvciAtMSAoW1RyZWVOb2RlLm5vT2Zmc2V0XSkgaWYgdGhlIGZpbGUgZW5kIG9mZnNldCBpcyBub3QgYXZhaWxhYmxlCiAgLy8vICh0aGlzIGlzIHRoZSBkZWZhdWx0IGlmIG5vbmUgaXMgc3BlY2lmaWNhbGx5IHNldCkuCiAgaW50IGZpbGVFbmRPZmZzZXQgPSBUcmVlTm9kZS5ub09mZnNldDsKCiAgLy8vIFRoZSBkZWdyZWUgdG8gd2hpY2ggdGhlIGNvbnRlbnRzIG9mIHRoZSBjbGFzcyBoYXZlIGJlZW4gbG9hZGVkLgogIENsYXNzTGV2ZWwgbGV2ZWwgPSBDbGFzc0xldmVsLkJvZHk7CgogIC8vLyBMaXN0IG9mIG1ldGFkYXRhIGFubm90YXRpb25zIG9uIHRoZSBjbGFzcy4KICAvLy8KICAvLy8gVGhpcyBkZWZhdWx0cyB0byBhbiBpbW11dGFibGUgZW1wdHkgbGlzdC4gVXNlIFthZGRBbm5vdGF0aW9uXSB0byBhZGQKICAvLy8gYW5ub3RhdGlvbnMgaWYgbmVlZGVkLgogIEBub2NvcQogIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMgPSBjb25zdCA8RXhwcmVzc2lvbj5bXTsKCiAgLy8vIE5hbWUgb2YgdGhlIGNsYXNzLgogIC8vLwogIC8vLyBNdXN0IGJlIG5vbi1udWxsIGFuZCBtdXN0IGJlIHVuaXF1ZSB3aXRoaW4gdGhlIGxpYnJhcnkuCiAgLy8vCiAgLy8vIFRoZSBuYW1lIG1heSBjb250YWluIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHZhbGlkIGluIGEgRGFydCBpZGVudGlmaWVyLAogIC8vLyBpbiBwYXJ0aWN1bGFyLCB0aGUgc3ltYm9sICcmJyBpcyB1c2VkIGluIGNsYXNzIG5hbWVzIGdlbmVyYXRlZCBmb3IgbWl4aW4KICAvLy8gYXBwbGljYXRpb25zLgogIEBjb3EKICBTdHJpbmcgbmFtZTsKCiAgLy8gTXVzdCBtYXRjaCBzZXJpYWxpemVkIGJpdCBwb3NpdGlvbnMuCiAgc3RhdGljIGNvbnN0IGludCBMZXZlbE1hc2sgPSAweDM7IC8vIEJpdHMgMCBhbmQgMS4KICBzdGF0aWMgY29uc3QgaW50IEZsYWdBYnN0cmFjdCA9IDEgPDwgMjsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdFbnVtID0gMSA8PCAzOwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0Fub255bW91c01peGluID0gMSA8PCA0OwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0VsaW1pbmF0ZWRNaXhpbiA9IDEgPDwgNTsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdNaXhpbkRlY2xhcmF0aW9uID0gMSA8PCA2OwoKICBpbnQgZmxhZ3MgPSAwOwoKICBib29sIGdldCBpc0Fic3RyYWN0ID0+IGZsYWdzICYgRmxhZ0Fic3RyYWN0ICE9IDA7CgogIHZvaWQgc2V0IGlzQWJzdHJhY3QoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdBYnN0cmFjdCkgOiAoZmxhZ3MgJiB+RmxhZ0Fic3RyYWN0KTsKICB9CgogIC8vLyBXaGV0aGVyIHRoaXMgY2xhc3MgaXMgYW4gZW51bS4KICBib29sIGdldCBpc0VudW0gPT4gZmxhZ3MgJiBGbGFnRW51bSAhPSAwOwoKICB2b2lkIHNldCBpc0VudW0oYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdFbnVtKSA6IChmbGFncyAmIH5GbGFnRW51bSk7CiAgfQoKICAvLy8gV2hldGhlciB0aGlzIGNsYXNzIGlzIGEgc3ludGhldGljIGltcGxlbWVudGF0aW9uIGNyZWF0ZWQgZm9yIGVhY2gKICAvLy8gbWl4ZWQtaW4gY2xhc3MuIEZvciBleGFtcGxlIHRoZSBmb2xsb3dpbmcgY29kZToKICAvLy8gY2xhc3MgWiBleHRlbmRzIEEgd2l0aCBCLCBDLCBEIHt9CiAgLy8vIGNsYXNzIEEge30KICAvLy8gY2xhc3MgQiB7fQogIC8vLyBjbGFzcyBDIHt9CiAgLy8vIGNsYXNzIEQge30KICAvLy8gLi4uY3JlYXRlczoKICAvLy8gYWJzdHJhY3QgY2xhc3MgX1omQSZCIGV4dGVuZHMgQSBtaXhlZEluIEIge30KICAvLy8gYWJzdHJhY3QgY2xhc3MgX1omQSZCJkMgZXh0ZW5kcyBBJkIgbWl4ZWRJbiBDIHt9CiAgLy8vIGFic3RyYWN0IGNsYXNzIF9aJkEmQiZDJkQgZXh0ZW5kcyBBJkImQyBtaXhlZEluIEQge30KICAvLy8gY2xhc3MgWiBleHRlbmRzIF9aJkEmQiZDJkQge30KICAvLy8gQWxsIFgmWSBjbGFzc2VzIGFyZSBtYXJrZWQgYXMgc3ludGhldGljLgogIGJvb2wgZ2V0IGlzQW5vbnltb3VzTWl4aW4gPT4gZmxhZ3MgJiBGbGFnQW5vbnltb3VzTWl4aW4gIT0gMDsKCiAgdm9pZCBzZXQgaXNBbm9ueW1vdXNNaXhpbihib29sIHZhbHVlKSB7CiAgICBmbGFncyA9CiAgICAgICAgdmFsdWUgPyAoZmxhZ3MgfCBGbGFnQW5vbnltb3VzTWl4aW4pIDogKGZsYWdzICYgfkZsYWdBbm9ueW1vdXNNaXhpbik7CiAgfQoKICAvLy8gV2hldGhlciB0aGlzIGNsYXNzIHdhcyB0cmFuc2Zvcm1lZCBmcm9tIGEgbWl4aW4gYXBwbGljYXRpb24uCiAgLy8vIEluIHN1Y2ggY2FzZSwgaXRzIG1peGVkLWluIHR5cGUgd2FzIHB1bGxlZCBpbnRvIHRoZSBlbmQgb2YgaW1wbGVtZW50ZWQKICAvLy8gdHlwZXMgbGlzdC4KICBib29sIGdldCBpc0VsaW1pbmF0ZWRNaXhpbiA9PiBmbGFncyAmIEZsYWdFbGltaW5hdGVkTWl4aW4gIT0gMDsKCiAgdm9pZCBzZXQgaXNFbGltaW5hdGVkTWl4aW4oYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPQogICAgICAgIHZhbHVlID8gKGZsYWdzIHwgRmxhZ0VsaW1pbmF0ZWRNaXhpbikgOiAoZmxhZ3MgJiB+RmxhZ0VsaW1pbmF0ZWRNaXhpbik7CiAgfQoKICAvLy8gVHJ1ZSBpZiB0aGlzIGNsYXNzIHdhcyBhIG1peGluIGRlY2xhcmF0aW9uIGluIERhcnQuCiAgLy8vCiAgLy8vIE1peGlucyBhcmUgZGVjbGFyZWQgaW4gRGFydCB3aXRoIHRoZSBgbWl4aW5gIGtleXdvcmQuICBUaGV5IGFyZSBjb21waWxlZAogIC8vLyB0byBLZXJuZWwgY2xhc3Nlcy4KICBib29sIGdldCBpc01peGluRGVjbGFyYXRpb24gPT4gZmxhZ3MgJiBGbGFnTWl4aW5EZWNsYXJhdGlvbiAhPSAwOwoKICB2b2lkIHNldCBpc01peGluRGVjbGFyYXRpb24oYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZQogICAgICAgID8gKGZsYWdzIHwgRmxhZ01peGluRGVjbGFyYXRpb24pCiAgICAgICAgOiAoZmxhZ3MgJiB+RmxhZ01peGluRGVjbGFyYXRpb24pOwogIH0KCiAgTGlzdDxTdXBlcnR5cGU+IHN1cGVyY2xhc3NDb25zdHJhaW50cygpIHsKICAgIHZhciBjb25zdHJhaW50cyA9IDxTdXBlcnR5cGU+W107CgogICAgLy8gTm90IGEgbWl4aW4gZGVjbGFyYXRpb24uCiAgICBpZiAoIWlzTWl4aW5EZWNsYXJhdGlvbikgcmV0dXJuIGNvbnN0cmFpbnRzOwoKICAgIC8vIE90aGVyd2lzZSB3ZSBoYXZlIGEgbGVmdC1saW5lYXIgYmluYXJ5IHRyZWUgKHN1YnRyZWVzIGFyZSBzdXBlcnR5cGUgYW5kCiAgICAvLyBtaXhlZEluVHlwZSkgb2YgY29uc3RyYWludHMsIHdoZXJlIGFsbCB0aGUgaW50ZXJpb3Igbm9kZXMgYXJlIGFub255bW91cwogICAgLy8gbWl4aW4gYXBwbGljYXRpb25zLgogICAgU3VwZXJ0eXBlIGN1cnJlbnQgPSBzdXBlcnR5cGU7CiAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsICYmIGN1cnJlbnQuY2xhc3NOb2RlLmlzQW5vbnltb3VzTWl4aW4pIHsKICAgICAgQ2xhc3MgY3VycmVudENsYXNzID0gY3VycmVudC5jbGFzc05vZGU7CiAgICAgIGFzc2VydChjdXJyZW50Q2xhc3MuaW1wbGVtZW50ZWRUeXBlcy5sZW5ndGggPT0gMik7CiAgICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbVN1cGVydHlwZShjdXJyZW50KTsKICAgICAgY29uc3RyYWludHMuYWRkKAogICAgICAgICAgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVTdXBlcnR5cGUoY3VycmVudENsYXNzLmltcGxlbWVudGVkVHlwZXNbMV0pKTsKICAgICAgY3VycmVudCA9CiAgICAgICAgICBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVN1cGVydHlwZShjdXJyZW50Q2xhc3MuaW1wbGVtZW50ZWRUeXBlc1swXSk7CiAgICB9CiAgICByZXR1cm4gY29uc3RyYWludHMuLmFkZChjdXJyZW50KTsKICB9CgogIC8vLyBUaGUgVVJJIG9mIHRoZSBzb3VyY2UgZmlsZSB0aGlzIGNsYXNzIHdhcyBsb2FkZWQgZnJvbS4KICBVcmkgZmlsZVVyaTsKCiAgZmluYWwgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyczsKCiAgLy8vIFRoZSBpbW1lZGlhdGUgc3VwZXIgdHlwZSwgb3IgYG51bGxgIGlmIHRoaXMgaXMgdGhlIHJvb3QgY2xhc3MuCiAgU3VwZXJ0eXBlIHN1cGVydHlwZTsKCiAgLy8vIFRoZSBtaXhlZC1pbiB0eXBlIGlmIHRoaXMgaXMgYSBtaXhpbiBhcHBsaWNhdGlvbiwgb3RoZXJ3aXNlIGBudWxsYC4KICBTdXBlcnR5cGUgbWl4ZWRJblR5cGU7CgogIC8vLyBUaGUgdHlwZXMgZnJvbSB0aGUgYGltcGxlbWVudHNgIGNsYXVzZS4KICBmaW5hbCBMaXN0PFN1cGVydHlwZT4gaW1wbGVtZW50ZWRUeXBlczsKCiAgLy8vIEZpZWxkcyBkZWNsYXJlZCBpbiB0aGUgY2xhc3MuCiAgLy8vCiAgLy8vIEZvciBtaXhpbiBhcHBsaWNhdGlvbnMgdGhpcyBzaG91bGQgYmUgZW1wdHkuCiAgZmluYWwgTGlzdDxGaWVsZD4gZmllbGRzOwoKICAvLy8gQ29uc3RydWN0b3JzIGRlY2xhcmVkIGluIHRoZSBjbGFzcy4KICBmaW5hbCBMaXN0PENvbnN0cnVjdG9yPiBjb25zdHJ1Y3RvcnM7CgogIC8vLyBQcm9jZWR1cmVzIGRlY2xhcmVkIGluIHRoZSBjbGFzcy4KICAvLy8KICAvLy8gRm9yIG1peGluIGFwcGxpY2F0aW9ucyB0aGlzIHNob3VsZCBvbmx5IGNvbnRhaW4gZm9yd2FyZGluZyBzdHVicy4KICBmaW5hbCBMaXN0PFByb2NlZHVyZT4gcHJvY2VkdXJlczsKCiAgLy8vIFJlZGlyZWN0aW5nIGZhY3RvcnkgY29uc3RydWN0b3JzIGRlY2xhcmVkIGluIHRoZSBjbGFzcy4KICAvLy8KICAvLy8gRm9yIG1peGluIGFwcGxpY2F0aW9ucyB0aGlzIHNob3VsZCBiZSBlbXB0eS4KICBmaW5hbCBMaXN0PFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yPiByZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnM7CgogIENsYXNzKAogICAgICB7dGhpcy5uYW1lLAogICAgICBib29sIGlzQWJzdHJhY3Q6IGZhbHNlLAogICAgICBib29sIGlzQW5vbnltb3VzTWl4aW46IGZhbHNlLAogICAgICB0aGlzLnN1cGVydHlwZSwKICAgICAgdGhpcy5taXhlZEluVHlwZSwKICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycywKICAgICAgTGlzdDxTdXBlcnR5cGU+IGltcGxlbWVudGVkVHlwZXMsCiAgICAgIExpc3Q8Q29uc3RydWN0b3I+IGNvbnN0cnVjdG9ycywKICAgICAgTGlzdDxQcm9jZWR1cmU+IHByb2NlZHVyZXMsCiAgICAgIExpc3Q8RmllbGQ+IGZpZWxkcywKICAgICAgTGlzdDxSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcj4gcmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLAogICAgICB0aGlzLmZpbGVVcmksCiAgICAgIFJlZmVyZW5jZSByZWZlcmVuY2V9KQogICAgICA6IHRoaXMudHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVycyA/PyA8VHlwZVBhcmFtZXRlcj5bXSwKICAgICAgICB0aGlzLmltcGxlbWVudGVkVHlwZXMgPSBpbXBsZW1lbnRlZFR5cGVzID8/IDxTdXBlcnR5cGU+W10sCiAgICAgICAgdGhpcy5maWVsZHMgPSBmaWVsZHMgPz8gPEZpZWxkPltdLAogICAgICAgIHRoaXMuY29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzID8/IDxDb25zdHJ1Y3Rvcj5bXSwKICAgICAgICB0aGlzLnByb2NlZHVyZXMgPSBwcm9jZWR1cmVzID8/IDxQcm9jZWR1cmU+W10sCiAgICAgICAgdGhpcy5yZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMgPQogICAgICAgICAgICByZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMgPz8gPFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yPltdLAogICAgICAgIHN1cGVyKHJlZmVyZW5jZSkgewogICAgc2V0UGFyZW50cyh0aGlzLnR5cGVQYXJhbWV0ZXJzLCB0aGlzKTsKICAgIHNldFBhcmVudHModGhpcy5jb25zdHJ1Y3RvcnMsIHRoaXMpOwogICAgc2V0UGFyZW50cyh0aGlzLnByb2NlZHVyZXMsIHRoaXMpOwogICAgc2V0UGFyZW50cyh0aGlzLmZpZWxkcywgdGhpcyk7CiAgICBzZXRQYXJlbnRzKHRoaXMucmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLCB0aGlzKTsKICAgIHRoaXMuaXNBYnN0cmFjdCA9IGlzQWJzdHJhY3Q7CiAgICB0aGlzLmlzQW5vbnltb3VzTWl4aW4gPSBpc0Fub255bW91c01peGluOwogIH0KCiAgdm9pZCBjb21wdXRlQ2Fub25pY2FsTmFtZXMoKSB7CiAgICBhc3NlcnQoY2Fub25pY2FsTmFtZSAhPSBudWxsKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgKytpKSB7CiAgICAgIEZpZWxkIG1lbWJlciA9IGZpZWxkc1tpXTsKICAgICAgY2Fub25pY2FsTmFtZS5nZXRDaGlsZEZyb21NZW1iZXIobWVtYmVyKS5iaW5kVG8obWVtYmVyLnJlZmVyZW5jZSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2NlZHVyZXMubGVuZ3RoOyArK2kpIHsKICAgICAgUHJvY2VkdXJlIG1lbWJlciA9IHByb2NlZHVyZXNbaV07CiAgICAgIGNhbm9uaWNhbE5hbWUuZ2V0Q2hpbGRGcm9tTWVtYmVyKG1lbWJlcikuYmluZFRvKG1lbWJlci5yZWZlcmVuY2UpOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb25zdHJ1Y3RvcnMubGVuZ3RoOyArK2kpIHsKICAgICAgQ29uc3RydWN0b3IgbWVtYmVyID0gY29uc3RydWN0b3JzW2ldOwogICAgICBjYW5vbmljYWxOYW1lLmdldENoaWxkRnJvbU1lbWJlcihtZW1iZXIpLmJpbmRUbyhtZW1iZXIucmVmZXJlbmNlKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLmxlbmd0aDsgKytpKSB7CiAgICAgIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIG1lbWJlciA9IHJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yc1tpXTsKICAgICAgY2Fub25pY2FsTmFtZS5nZXRDaGlsZEZyb21NZW1iZXIobWVtYmVyKS5iaW5kVG8obWVtYmVyLnJlZmVyZW5jZSk7CiAgICB9CiAgfQoKICAvLy8gVGhlIGltbWVkaWF0ZSBzdXBlciBjbGFzcywgb3IgYG51bGxgIGlmIHRoaXMgaXMgdGhlIHJvb3QgY2xhc3MuCiAgQ2xhc3MgZ2V0IHN1cGVyY2xhc3MgPT4gc3VwZXJ0eXBlPy5jbGFzc05vZGU7CgogIC8vLyBUaGUgbWl4ZWQtaW4gY2xhc3MgaWYgdGhpcyBpcyBhIG1peGluIGFwcGxpY2F0aW9uLCBvdGhlcndpc2UgYG51bGxgLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhpcyBtYXkgaXRzZWxmIGJlIGEgbWl4aW4gYXBwbGljYXRpb24uICBVc2UgW21peGluXSB0byBnZXQgdGhlCiAgLy8vIGNsYXNzIHRoYXQgaGFzIHRoZSBmaWVsZHMgYW5kIHByb2NlZHVyZXMuCiAgQ2xhc3MgZ2V0IG1peGVkSW5DbGFzcyA9PiBtaXhlZEluVHlwZT8uY2xhc3NOb2RlOwoKICAvLy8gVGhlIGNsYXNzIHRoYXQgZGVjbGFyZXMgdGhlIGZpZWxkIGFuZCBwcm9jZWR1cmVzIG9mIHRoaXMgY2xhc3MuCiAgQ2xhc3MgZ2V0IG1peGluID0+IG1peGVkSW5DbGFzcz8ubWl4aW4gPz8gdGhpczsKCiAgYm9vbCBnZXQgaXNNaXhpbkFwcGxpY2F0aW9uID0+IG1peGVkSW5UeXBlICE9IG51bGw7CgogIFN0cmluZyBnZXQgZGVtYW5nbGVkTmFtZSB7CiAgICBpZiAoaXNBbm9ueW1vdXNNaXhpbikgcmV0dXJuIG5hbWVBc01peGluQXBwbGljYXRpb247CiAgICBhc3NlcnQoIW5hbWUuY29udGFpbnMoJyYnKSk7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIFN0cmluZyBnZXQgbmFtZUFzTWl4aW5BcHBsaWNhdGlvbiB7CiAgICBhc3NlcnQoaXNBbm9ueW1vdXNNaXhpbik7CiAgICByZXR1cm4gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICB9CgogIFN0cmluZyBnZXQgbmFtZUFzTWl4aW5BcHBsaWNhdGlvblN1YmNsYXNzIHsKICAgIGFzc2VydChpc0Fub255bW91c01peGluKTsKICAgIHJldHVybiBkZW1hbmdsZU1peGluQXBwbGljYXRpb25TdWJjbGFzc05hbWUobmFtZSk7CiAgfQoKICAvLy8gTWVtYmVycyBkZWNsYXJlZCBpbiB0aGlzIGNsYXNzLgogIC8vLwogIC8vLyBUaGlzIGdldHRlciBpcyBmb3IgY29udmVuaWVuY2UsIG5vdCBlZmZpY2llbmN5LiAgQ29uc2lkZXIgbWFudWFsbHkKICAvLy8gaXRlcmF0aW5nIHRoZSBtZW1iZXJzIHRvIHNwZWVkIHVwIGNvZGUgaW4gcHJvZHVjdGlvbi4KICBJdGVyYWJsZTxNZW1iZXI+IGdldCBtZW1iZXJzID0+IDxJdGVyYWJsZTxNZW1iZXI+PlsKICAgICAgICBmaWVsZHMsCiAgICAgICAgY29uc3RydWN0b3JzLAogICAgICAgIHByb2NlZHVyZXMsCiAgICAgICAgcmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzCiAgICAgIF0uZXhwYW5kKCh4KSA9PiB4KTsKCiAgLy8vIFRoZSBpbW1lZGlhdGVseSBleHRlbmRlZCwgbWl4ZWQtaW4sIGFuZCBpbXBsZW1lbnRlZCB0eXBlcy4KICAvLy8KICAvLy8gVGhpcyBnZXR0ZXIgaXMgZm9yIGNvbnZlbmllbmNlLCBub3QgZWZmaWNpZW5jeS4gIENvbnNpZGVyIG1hbnVhbGx5CiAgLy8vIGl0ZXJhdGluZyB0aGUgc3VwZXIgdHlwZXMgdG8gc3BlZWQgdXAgY29kZSBpbiBwcm9kdWN0aW9uLgogIEl0ZXJhYmxlPFN1cGVydHlwZT4gZ2V0IHN1cGVycyA9PiA8SXRlcmFibGU8U3VwZXJ0eXBlPj5bCiAgICAgICAgc3VwZXJ0eXBlID09IG51bGwgPyBjb25zdCBbXSA6IFtzdXBlcnR5cGVdLAogICAgICAgIG1peGVkSW5UeXBlID09IG51bGwgPyBjb25zdCBbXSA6IFttaXhlZEluVHlwZV0sCiAgICAgICAgaW1wbGVtZW50ZWRUeXBlcwogICAgICBdLmV4cGFuZCgoeCkgPT4geCk7CgogIC8vLyBUaGUgbGlicmFyeSBjb250YWluaW5nIHRoaXMgY2xhc3MuCiAgTGlicmFyeSBnZXQgZW5jbG9zaW5nTGlicmFyeSA9PiBwYXJlbnQ7CgogIC8vLyBBZGRzIGEgbWVtYmVyIHRvIHRoaXMgY2xhc3MuCiAgLy8vCiAgLy8vIFRocm93cyBhbiBlcnJvciBpZiBhdHRlbXB0aW5nIHRvIGFkZCBhIGZpZWxkIG9yIHByb2NlZHVyZSB0byBhIG1peGluCiAgLy8vIGFwcGxpY2F0aW9uLgogIHZvaWQgYWRkTWVtYmVyKE1lbWJlciBtZW1iZXIpIHsKICAgIG1lbWJlci5wYXJlbnQgPSB0aGlzOwogICAgaWYgKG1lbWJlciBpcyBDb25zdHJ1Y3RvcikgewogICAgICBjb25zdHJ1Y3RvcnMuYWRkKG1lbWJlcik7CiAgICB9IGVsc2UgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgcHJvY2VkdXJlcy5hZGQobWVtYmVyKTsKICAgIH0gZWxzZSBpZiAobWVtYmVyIGlzIEZpZWxkKSB7CiAgICAgIGZpZWxkcy5hZGQobWVtYmVyKTsKICAgIH0gZWxzZSBpZiAobWVtYmVyIGlzIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKSB7CiAgICAgIHJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycy5hZGQobWVtYmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKG1lbWJlcik7CiAgICB9CiAgfQoKICB2b2lkIGFkZEFubm90YXRpb24oRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpZiAoYW5ub3RhdGlvbnMuaXNFbXB0eSkgewogICAgICBhbm5vdGF0aW9ucyA9IDxFeHByZXNzaW9uPltdOwogICAgfQogICAgYW5ub3RhdGlvbnMuYWRkKG5vZGUpOwogICAgbm9kZS5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KFRyZWVWaXNpdG9yIHYpID0+IHYudmlzaXRDbGFzcyh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PiB2LnZpc2l0Q2xhc3NSZWZlcmVuY2UodGhpcyk7CgogIC8vLyBJZiB0cnVlLCB0aGUgY2xhc3MgaXMgcGFydCBvZiBhbiBleHRlcm5hbCBsaWJyYXJ5LCB0aGF0IGlzLCBpdCBpcyBkZWZpbmVkCiAgLy8vIGluIGFub3RoZXIgYnVpbGQgdW5pdC4gIE9ubHkgYSBzdWJzZXQgb2YgaXRzIG1lbWJlcnMgYXJlIHByZXNlbnQuCiAgLy8vCiAgLy8vIFRoZXNlIGNsYXNzZXMgc2hvdWxkIGJlIGxvYWRlZCBhdCBlaXRoZXIgW0NsYXNzTGV2ZWwuVHlwZV0gb3IKICAvLy8gW0NsYXNzTGV2ZWwuSGllcmFyY2h5XSBsZXZlbC4KICBib29sIGdldCBpc0luRXh0ZXJuYWxMaWJyYXJ5ID0+IGVuY2xvc2luZ0xpYnJhcnkuaXNFeHRlcm5hbDsKCiAgU3VwZXJ0eXBlIGdldCBhc1Jhd1N1cGVydHlwZSB7CiAgICByZXR1cm4gbmV3IFN1cGVydHlwZSh0aGlzLAogICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQodHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBjb25zdCBEeW5hbWljVHlwZSgpKSk7CiAgfQoKICBTdXBlcnR5cGUgZ2V0IGFzVGhpc1N1cGVydHlwZSB7CiAgICByZXR1cm4gbmV3IFN1cGVydHlwZSh0aGlzLCBfZ2V0QXNUeXBlQXJndW1lbnRzKHR5cGVQYXJhbWV0ZXJzKSk7CiAgfQoKICBAbm9jb3EKICBJbnRlcmZhY2VUeXBlIF9yYXdUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IHJhd1R5cGUgPT4gX3Jhd1R5cGUgPz89IG5ldyBJbnRlcmZhY2VUeXBlKHRoaXMpOwoKICBAbm9jb3EKICBJbnRlcmZhY2VUeXBlIF90aGlzVHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCB0aGlzVHlwZSB7CiAgICByZXR1cm4gX3RoaXNUeXBlID8/PQogICAgICAgIG5ldyBJbnRlcmZhY2VUeXBlKHRoaXMsIF9nZXRBc1R5cGVBcmd1bWVudHModHlwZVBhcmFtZXRlcnMpKTsKICB9CgogIEBub2NvcQogIEludGVyZmFjZVR5cGUgX2JvdHRvbVR5cGU7CiAgSW50ZXJmYWNlVHlwZSBnZXQgYm90dG9tVHlwZSB7CiAgICByZXR1cm4gX2JvdHRvbVR5cGUgPz89IG5ldyBJbnRlcmZhY2VUeXBlKHRoaXMsCiAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCh0eXBlUGFyYW1ldGVycy5sZW5ndGgsIGNvbnN0IEJvdHRvbVR5cGUoKSkpOwogIH0KCiAgLy8vIFJldHVybnMgYSBwb3NzaWJseSBzeW50aGVzaXplZCBuYW1lIGZvciB0aGlzIGNsYXNzLCBjb25zaXN0ZW50IHdpdGgKICAvLy8gdGhlIG5hbWVzIHVzZWQgYWNyb3NzIGFsbCBbdG9TdHJpbmddIGNhbGxzLgogIFN0cmluZyB0b1N0cmluZygpID0+IGRlYnVnUXVhbGlmaWVkQ2xhc3NOYW1lKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KGFubm90YXRpb25zLCB2KTsKICAgIHZpc2l0TGlzdCh0eXBlUGFyYW1ldGVycywgdik7CiAgICBzdXBlcnR5cGU/LmFjY2VwdCh2KTsKICAgIG1peGVkSW5UeXBlPy5hY2NlcHQodik7CiAgICB2aXNpdExpc3QoaW1wbGVtZW50ZWRUeXBlcywgdik7CiAgICB2aXNpdExpc3QoY29uc3RydWN0b3JzLCB2KTsKICAgIHZpc2l0TGlzdChwcm9jZWR1cmVzLCB2KTsKICAgIHZpc2l0TGlzdChmaWVsZHMsIHYpOwogICAgdmlzaXRMaXN0KHJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QodHlwZVBhcmFtZXRlcnMsIHYsIHRoaXMpOwogICAgaWYgKHN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgIHN1cGVydHlwZSA9IHYudmlzaXRTdXBlcnR5cGUoc3VwZXJ0eXBlKTsKICAgIH0KICAgIGlmIChtaXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgIG1peGVkSW5UeXBlID0gdi52aXNpdFN1cGVydHlwZShtaXhlZEluVHlwZSk7CiAgICB9CiAgICB0cmFuc2Zvcm1TdXBlcnR5cGVMaXN0KGltcGxlbWVudGVkVHlwZXMsIHYpOwogICAgdHJhbnNmb3JtTGlzdChjb25zdHJ1Y3RvcnMsIHYsIHRoaXMpOwogICAgdHJhbnNmb3JtTGlzdChwcm9jZWR1cmVzLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QoZmllbGRzLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QocmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLCB2LCB0aGlzKTsKICB9CgogIExvY2F0aW9uIF9nZXRMb2NhdGlvbkluRW5jbG9zaW5nRmlsZShpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4gX2dldExvY2F0aW9uSW5Db21wb25lbnQoZW5jbG9zaW5nQ29tcG9uZW50LCBmaWxlVXJpLCBvZmZzZXQpOwogIH0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1FTUJFUlMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpAY29xCmFic3RyYWN0IGNsYXNzIE1lbWJlciBleHRlbmRzIE5hbWVkTm9kZSBpbXBsZW1lbnRzIEFubm90YXRhYmxlLCBGaWxlVXJpTm9kZSB7CiAgLy8vIEVuZCBvZmZzZXQgaW4gdGhlIHNvdXJjZSBmaWxlIGl0IGNvbWVzIGZyb20uCiAgLy8vCiAgLy8vIFZhbGlkIHZhbHVlcyBhcmUgZnJvbSAwIGFuZCB1cCwgb3IgLTEgKFtUcmVlTm9kZS5ub09mZnNldF0pIGlmIHRoZSBmaWxlCiAgLy8vIGVuZCBvZmZzZXQgaXMgbm90IGF2YWlsYWJsZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBpZiBub25lIGlzIHNwZWNpZmljYWxseQogIC8vLyBzZXQpLgogIGludCBmaWxlRW5kT2Zmc2V0ID0gVHJlZU5vZGUubm9PZmZzZXQ7CgogIC8vLyBMaXN0IG9mIG1ldGFkYXRhIGFubm90YXRpb25zIG9uIHRoZSBtZW1iZXIuCiAgLy8vCiAgLy8vIFRoaXMgZGVmYXVsdHMgdG8gYW4gaW1tdXRhYmxlIGVtcHR5IGxpc3QuIFVzZSBbYWRkQW5ub3RhdGlvbl0gdG8gYWRkCiAgLy8vIGFubm90YXRpb25zIGlmIG5lZWRlZC4KICBAbm9jb3EKICBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zID0gY29uc3QgPEV4cHJlc3Npb24+W107CgogIE5hbWUgbmFtZTsKCiAgLy8vIFRoZSBVUkkgb2YgdGhlIHNvdXJjZSBmaWxlIHRoaXMgbWVtYmVyIHdhcyBsb2FkZWQgZnJvbS4KICBVcmkgZmlsZVVyaTsKCiAgLy8vIEZsYWdzIHN1bW1hcml6aW5nIHRoZSBraW5kcyBvZiBBU1Qgbm9kZXMgY29udGFpbmVkIGluIHRoaXMgbWVtYmVyLCBmb3IKICAvLy8gc3BlZWRpbmcgdXAgdHJhbnNmb3JtYXRpb25zIHRoYXQgb25seSBhZmZlY3QgY2VydGFpbiB0eXBlcyBvZiBub2Rlcy4KICAvLy8KICAvLy8gU2VlIFtUcmFuc2Zvcm1lckZsYWddIGZvciB0aGUgbWVhbmluZyBvZiBlYWNoIGJpdC4KICAvLy8KICAvLy8gVGhlc2Ugc2hvdWxkIG5vdCBiZSB1c2VkIGZvciBhbnkgcHVycG9zZSBvdGhlciB0aGFuIHNraXBwaW5nIGNlcnRhaW4KICAvLy8gbWVtYmVycyBpZiBpdCBjYW4gYmUgZGV0ZXJtaW5lZCB0aGF0IG5vIHdvcmsgaXMgbmVlZGVkIGluIHRoZXJlLgogIC8vLwogIC8vLyBJdCBpcyB2YWxpZCBmb3IgdGhlc2UgZmxhZ3MgdG8gYmUgZmFsc2UgcG9zaXRpdmVzIGluIHJhcmUgY2FzZXMsIHNvCiAgLy8vIHRyYW5zZm9ybWVycyBtdXN0IHRvbGVyYXRlIHRoZSBjYXNlIHdoZXJlIGEgZmxhZyBpcyBzcHVyaW91c2x5IHNldC4KICAvLy8KICAvLy8gVGhpcyB2YWx1ZSBpcyBub3Qgc2VyaWFsaXplZDsgaXQgaXMgcG9wdWxhdGVkIGJ5IHRoZSBmcm9udGVuZCBhbmQgdGhlCiAgLy8vIGRlc2VyaWFsaXplci4KICAvLwogIC8vIFRPRE8oYXNnZXJmKTogSXQgbWlnaHQgYmUgd29ydGh3aGlsZSB0byBwdXQgdGhpcyBvbiBjbGFzc2VzIGFzIHdlbGwuCiAgaW50IHRyYW5zZm9ybWVyRmxhZ3MgPSAwOwoKICBNZW1iZXIodGhpcy5uYW1lLCB0aGlzLmZpbGVVcmksIFJlZmVyZW5jZSByZWZlcmVuY2UpIDogc3VwZXIocmVmZXJlbmNlKTsKCiAgQ2xhc3MgZ2V0IGVuY2xvc2luZ0NsYXNzID0+IHBhcmVudCBpcyBDbGFzcyA/IHBhcmVudCA6IG51bGw7CiAgTGlicmFyeSBnZXQgZW5jbG9zaW5nTGlicmFyeSA9PiBwYXJlbnQgaXMgQ2xhc3MgPyBwYXJlbnQucGFyZW50IDogcGFyZW50OwoKICBhY2NlcHQoTWVtYmVyVmlzaXRvciB2KTsKICBhY2NlcHRSZWZlcmVuY2UoTWVtYmVyUmVmZXJlbmNlVmlzaXRvciB2KTsKCiAgLy8vIElmIHRydWUsIHRoZSBtZW1iZXIgaXMgcGFydCBvZiBhbiBleHRlcm5hbCBsaWJyYXJ5LCB0aGF0IGlzLCBpdCBpcyBkZWZpbmVkCiAgLy8vIGluIGFub3RoZXIgYnVpbGQgdW5pdC4gIFN1Y2ggbWVtYmVycyBoYXZlIG5vIGJvZHkgb3IgaW5pdGlhbGl6ZXIgcHJlc2VudAogIC8vLyBpbiB0aGUgSVIuCiAgYm9vbCBnZXQgaXNJbkV4dGVybmFsTGlicmFyeSA9PiBlbmNsb3NpbmdMaWJyYXJ5LmlzRXh0ZXJuYWw7CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpcyBhbiBhYnN0cmFjdCBwcm9jZWR1cmUuCiAgYm9vbCBnZXQgaXNBYnN0cmFjdCA9PiBmYWxzZTsKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbWVtYmVyIGhhcyB0aGUgJ2NvbnN0JyBtb2RpZmllci4KICBib29sIGdldCBpc0NvbnN0OwoKICAvLy8gVHJ1ZSBpZiB0aGlzIGlzIGEgZmllbGQgb3Igbm9uLXNldHRlciBwcm9jZWR1cmUuCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCBvcGVyYXRvcnMgYW5kIGZhY3RvcmllcyByZXR1cm4gYHRydWVgLCBldmVuIHRob3VnaCB0aGVyZSBhcmUKICAvLy8gbm9ybWFsbHkgbm8gY2FsbHMgdG8gdGhlaXIgZ2V0dGVyLgogIGJvb2wgZ2V0IGhhc0dldHRlcjsKCiAgLy8vIFRydWUgaWYgdGhpcyBpcyBhIHNldHRlciBvciBhIG11dGFibGUgZmllbGQuCiAgYm9vbCBnZXQgaGFzU2V0dGVyOwoKICAvLy8gVHJ1ZSBpZiB0aGlzIGlzIGEgbm9uLXN0YXRpYyBmaWVsZCBvciBwcm9jZWR1cmUuCiAgYm9vbCBnZXQgaXNJbnN0YW5jZU1lbWJlcjsKCiAgLy8vIFRydWUgaWYgdGhlIG1lbWJlciBoYXMgdGhlIGBleHRlcm5hbGAgbW9kaWZpZXIsIGltcGx5aW5nIHRoYXQgdGhlCiAgLy8vIGltcGxlbWVudGF0aW9uIGlzIHByb3ZpZGVkIGJ5IHRoZSBiYWNrZW5kLCBhbmQgaXMgbm90IG5lY2Vzc2FyaWx5IHdyaXR0ZW4KICAvLy8gaW4gRGFydC4KICAvLy8KICAvLy8gTWVtYmVycyBjYW4gaGF2ZSB0aGlzIG1vZGlmaWVyIGluZGVwZW5kZW50bHkgb2Ygd2hldGhlciB0aGUgZW5jbG9zaW5nCiAgLy8vIGxpYnJhcnkgaXMgZXh0ZXJuYWwuCiAgYm9vbCBnZXQgaXNFeHRlcm5hbDsKICB2b2lkIHNldCBpc0V4dGVybmFsKGJvb2wgdmFsdWUpOwoKICAvLy8gVGhlIGJvZHkgb2YgdGhlIHByb2NlZHVyZSBvciBjb25zdHJ1Y3Rvciwgb3IgYG51bGxgIGlmIHRoaXMgaXMgYSBmaWVsZC4KICBGdW5jdGlvbk5vZGUgZ2V0IGZ1bmN0aW9uID0+IG51bGw7CgogIC8vLyBSZXR1cm5zIGEgcG9zc2libHkgc3ludGhlc2l6ZWQgbmFtZSBmb3IgdGhpcyBtZW1iZXIsIGNvbnNpc3RlbnQgd2l0aAogIC8vLyB0aGUgbmFtZXMgdXNlZCBhY3Jvc3MgYWxsIFt0b1N0cmluZ10gY2FsbHMuCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gZGVidWdRdWFsaWZpZWRNZW1iZXJOYW1lKHRoaXMpOwoKICB2b2lkIGFkZEFubm90YXRpb24oRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpZiAoYW5ub3RhdGlvbnMuaXNFbXB0eSkgewogICAgICBhbm5vdGF0aW9ucyA9IDxFeHByZXNzaW9uPltdOwogICAgfQogICAgYW5ub3RhdGlvbnMuYWRkKG5vZGUpOwogICAgbm9kZS5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRGFydFR5cGUgZ2V0IGdldHRlclR5cGU7CiAgRGFydFR5cGUgZ2V0IHNldHRlclR5cGU7CgogIGJvb2wgZ2V0IGNvbnRhaW5zU3VwZXJDYWxscyB7CiAgICByZXR1cm4gdHJhbnNmb3JtZXJGbGFncyAmIFRyYW5zZm9ybWVyRmxhZy5zdXBlckNhbGxzICE9IDA7CiAgfQp9CgovLy8gQSBmaWVsZCBkZWNsYXJhdGlvbi4KLy8vCi8vLyBUaGUgaW1wbGllZCBnZXR0ZXIgYW5kIHNldHRlciBmb3IgdGhlIGZpZWxkIGFyZSBub3QgcmVwcmVzZW50ZWQgZXhwbGljaXRseSwKLy8vIGJ1dCBjYW4gYmUgbWFkZSBleHBsaWNpdCBpZiBuZWVkZWQuCmNsYXNzIEZpZWxkIGV4dGVuZHMgTWVtYmVyIHsKICBEYXJ0VHlwZSB0eXBlOyAvLyBOb3QgbnVsbC4gRGVmYXVsdHMgdG8gRHluYW1pY1R5cGUuCiAgaW50IGZsYWdzID0gMDsKICBFeHByZXNzaW9uIGluaXRpYWxpemVyOyAvLyBNYXkgYmUgbnVsbC4KCiAgRmllbGQoTmFtZSBuYW1lLAogICAgICB7dGhpcy50eXBlOiBjb25zdCBEeW5hbWljVHlwZSgpLAogICAgICB0aGlzLmluaXRpYWxpemVyLAogICAgICBib29sIGlzQ292YXJpYW50OiBmYWxzZSwKICAgICAgYm9vbCBpc0ZpbmFsOiBmYWxzZSwKICAgICAgYm9vbCBpc0NvbnN0OiBmYWxzZSwKICAgICAgYm9vbCBpc1N0YXRpYzogZmFsc2UsCiAgICAgIGJvb2wgaGFzSW1wbGljaXRHZXR0ZXIsCiAgICAgIGJvb2wgaGFzSW1wbGljaXRTZXR0ZXIsCiAgICAgIGludCB0cmFuc2Zvcm1lckZsYWdzOiAwLAogICAgICBVcmkgZmlsZVVyaSwKICAgICAgUmVmZXJlbmNlIHJlZmVyZW5jZX0pCiAgICAgIDogc3VwZXIobmFtZSwgZmlsZVVyaSwgcmVmZXJlbmNlKSB7CiAgICBhc3NlcnQodHlwZSAhPSBudWxsKTsKICAgIGluaXRpYWxpemVyPy5wYXJlbnQgPSB0aGlzOwogICAgdGhpcy5pc0NvdmFyaWFudCA9IGlzQ292YXJpYW50OwogICAgdGhpcy5pc0ZpbmFsID0gaXNGaW5hbDsKICAgIHRoaXMuaXNDb25zdCA9IGlzQ29uc3Q7CiAgICB0aGlzLmlzU3RhdGljID0gaXNTdGF0aWM7CiAgICB0aGlzLmhhc0ltcGxpY2l0R2V0dGVyID0gaGFzSW1wbGljaXRHZXR0ZXIgPz8gIWlzU3RhdGljOwogICAgdGhpcy5oYXNJbXBsaWNpdFNldHRlciA9IGhhc0ltcGxpY2l0U2V0dGVyID8/ICghaXNTdGF0aWMgJiYgIWlzRmluYWwpOwogICAgdGhpcy50cmFuc2Zvcm1lckZsYWdzID0gdHJhbnNmb3JtZXJGbGFnczsKICB9CgogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0ZpbmFsID0gMSA8PCAwOyAvLyBNdXN0IG1hdGNoIHNlcmlhbGl6ZWQgYml0IHBvc2l0aW9ucy4KICBzdGF0aWMgY29uc3QgaW50IEZsYWdDb25zdCA9IDEgPDwgMTsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdTdGF0aWMgPSAxIDw8IDI7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnSGFzSW1wbGljaXRHZXR0ZXIgPSAxIDw8IDM7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnSGFzSW1wbGljaXRTZXR0ZXIgPSAxIDw8IDQ7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnQ292YXJpYW50ID0gMSA8PCA1OwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gMSA8PCA2OwoKICAvLy8gV2hldGhlciB0aGUgZmllbGQgaXMgZGVjbGFyZWQgd2l0aCB0aGUgYGNvdmFyaWFudGAga2V5d29yZC4KICBib29sIGdldCBpc0NvdmFyaWFudCA9PiBmbGFncyAmIEZsYWdDb3ZhcmlhbnQgIT0gMDsKCiAgYm9vbCBnZXQgaXNGaW5hbCA9PiBmbGFncyAmIEZsYWdGaW5hbCAhPSAwOwogIGJvb2wgZ2V0IGlzQ29uc3QgPT4gZmxhZ3MgJiBGbGFnQ29uc3QgIT0gMDsKICBib29sIGdldCBpc1N0YXRpYyA9PiBmbGFncyAmIEZsYWdTdGF0aWMgIT0gMDsKCiAgLy8vIElmIHRydWUsIGEgZ2V0dGVyIHNob3VsZCBiZSBnZW5lcmF0ZWQgZm9yIHRoaXMgZmllbGQuCiAgLy8vCiAgLy8vIElmIGZhbHNlLCB0aGVyZSBtYXkgb3IgbWF5IG5vdCBleGlzdCBhbiBleHBsaWNpdCBnZXR0ZXIgaW4gdGhlIHNhbWUgY2xhc3MKICAvLy8gd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBmaWVsZC4KICAvLy8KICAvLy8gQnkgZGVmYXVsdCwgYWxsIG5vbi1zdGF0aWMgZmllbGRzIGhhdmUgaW1wbGljaXQgZ2V0dGVycy4KICBib29sIGdldCBoYXNJbXBsaWNpdEdldHRlciA9PiBmbGFncyAmIEZsYWdIYXNJbXBsaWNpdEdldHRlciAhPSAwOwoKICAvLy8gSWYgdHJ1ZSwgYSBzZXR0ZXIgc2hvdWxkIGJlIGdlbmVyYXRlZCBmb3IgdGhpcyBmaWVsZC4KICAvLy8KICAvLy8gSWYgZmFsc2UsIHRoZXJlIG1heSBvciBtYXkgbm90IGV4aXN0IGFuIGV4cGxpY2l0IHNldHRlciBpbiB0aGUgc2FtZSBjbGFzcwogIC8vLyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGZpZWxkLgogIC8vLwogIC8vLyBGaW5hbCBmaWVsZHMgbmV2ZXIgaGF2ZSBpbXBsaWNpdCBzZXR0ZXJzLCBidXQgYSBmaWVsZCB3aXRob3V0IGFuIGltcGxpY2l0CiAgLy8vIHNldHRlciBpcyBub3QgbmVjZXNzYXJpbHkgZmluYWwsIGFzIGl0IG1heSBiZSBtdXRhdGVkIGJ5IGRpcmVjdCBmaWVsZAogIC8vLyBhY2Nlc3MuCiAgLy8vCiAgLy8vIEJ5IGRlZmF1bHQsIGFsbCBub24tc3RhdGljLCBub24tZmluYWwgZmllbGRzIGhhdmUgaW1wbGljaXQgc2V0dGVycy4KICBib29sIGdldCBoYXNJbXBsaWNpdFNldHRlciA9PiBmbGFncyAmIEZsYWdIYXNJbXBsaWNpdFNldHRlciAhPSAwOwoKICAvLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGltcGxpY2l0IHNldHRlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBmaWVsZCBuZWVkcyB0bwogIC8vLyBjb250YWluIGEgcnVudGltZSB0eXBlIGNoZWNrIHRvIGRlYWwgd2l0aCBnZW5lcmljIGNvdmFyaWFuY2UuCiAgLy8vCiAgLy8vIFdoZW4gYHRydWVgLCBydW50aW1lIGNoZWNrcyBtYXkgbmVlZCB0byBiZSBwZXJmb3JtZWQ7IHNlZQogIC8vLyBbRGlzcGF0Y2hDYXRlZ29yeV0gZm9yIGRldGFpbHMuCiAgYm9vbCBnZXQgaXNHZW5lcmljQ292YXJpYW50SW1wbCA9PiBmbGFncyAmIEZsYWdHZW5lcmljQ292YXJpYW50SW1wbCAhPSAwOwoKICB2b2lkIHNldCBpc0NvdmFyaWFudChib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ0NvdmFyaWFudCkgOiAoZmxhZ3MgJiB+RmxhZ0NvdmFyaWFudCk7CiAgfQoKICB2b2lkIHNldCBpc0ZpbmFsKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnRmluYWwpIDogKGZsYWdzICYgfkZsYWdGaW5hbCk7CiAgfQoKICB2b2lkIHNldCBpc0NvbnN0KGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnQ29uc3QpIDogKGZsYWdzICYgfkZsYWdDb25zdCk7CiAgfQoKICB2b2lkIHNldCBpc1N0YXRpYyhib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlID8gKGZsYWdzIHwgRmxhZ1N0YXRpYykgOiAoZmxhZ3MgJiB+RmxhZ1N0YXRpYyk7CiAgfQoKICB2b2lkIHNldCBoYXNJbXBsaWNpdEdldHRlcihib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlCiAgICAgICAgPyAoZmxhZ3MgfCBGbGFnSGFzSW1wbGljaXRHZXR0ZXIpCiAgICAgICAgOiAoZmxhZ3MgJiB+RmxhZ0hhc0ltcGxpY2l0R2V0dGVyKTsKICB9CgogIHZvaWQgc2V0IGhhc0ltcGxpY2l0U2V0dGVyKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUKICAgICAgICA/IChmbGFncyB8IEZsYWdIYXNJbXBsaWNpdFNldHRlcikKICAgICAgICA6IChmbGFncyAmIH5GbGFnSGFzSW1wbGljaXRTZXR0ZXIpOwogIH0KCiAgdm9pZCBzZXQgaXNHZW5lcmljQ292YXJpYW50SW1wbChib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlCiAgICAgICAgPyAoZmxhZ3MgfCBGbGFnR2VuZXJpY0NvdmFyaWFudEltcGwpCiAgICAgICAgOiAoZmxhZ3MgJiB+RmxhZ0dlbmVyaWNDb3ZhcmlhbnRJbXBsKTsKICB9CgogIC8vLyBUcnVlIGlmIHRoZSBmaWVsZCBpcyBuZWl0aGVyIGZpbmFsIG5vciBjb25zdC4KICBib29sIGdldCBpc011dGFibGUgPT4gZmxhZ3MgJiAoRmxhZ0ZpbmFsIHwgRmxhZ0NvbnN0KSA9PSAwOwogIGJvb2wgZ2V0IGlzSW5zdGFuY2VNZW1iZXIgPT4gIWlzU3RhdGljOwogIGJvb2wgZ2V0IGhhc0dldHRlciA9PiB0cnVlOwogIGJvb2wgZ2V0IGhhc1NldHRlciA9PiBpc011dGFibGU7CgogIGJvb2wgZ2V0IGlzRXh0ZXJuYWwgPT4gZmFsc2U7CiAgdm9pZCBzZXQgaXNFeHRlcm5hbChib29sIHZhbHVlKSB7CiAgICBpZiAodmFsdWUpIHRocm93ICdGaWVsZHMgY2Fubm90IGJlIGV4dGVybmFsJzsKICB9CgogIGFjY2VwdChNZW1iZXJWaXNpdG9yIHYpID0+IHYudmlzaXRGaWVsZCh0aGlzKTsKCiAgYWNjZXB0UmVmZXJlbmNlKE1lbWJlclJlZmVyZW5jZVZpc2l0b3IgdikgPT4gdi52aXNpdEZpZWxkUmVmZXJlbmNlKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KGFubm90YXRpb25zLCB2KTsKICAgIHR5cGU/LmFjY2VwdCh2KTsKICAgIG5hbWU/LmFjY2VwdCh2KTsKICAgIGluaXRpYWxpemVyPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0eXBlID0gdi52aXNpdERhcnRUeXBlKHR5cGUpOwogICAgdHJhbnNmb3JtTGlzdChhbm5vdGF0aW9ucywgdiwgdGhpcyk7CiAgICBpZiAoaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICBpbml0aWFsaXplciA9IGluaXRpYWxpemVyLmFjY2VwdCh2KTsKICAgICAgaW5pdGlhbGl6ZXI/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBnZXQgZ2V0dGVyVHlwZSA9PiB0eXBlOwogIERhcnRUeXBlIGdldCBzZXR0ZXJUeXBlID0+IGlzTXV0YWJsZSA/IHR5cGUgOiBjb25zdCBCb3R0b21UeXBlKCk7CgogIExvY2F0aW9uIF9nZXRMb2NhdGlvbkluRW5jbG9zaW5nRmlsZShpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4gX2dldExvY2F0aW9uSW5Db21wb25lbnQoZW5jbG9zaW5nQ29tcG9uZW50LCBmaWxlVXJpLCBvZmZzZXQpOwogIH0KfQoKLy8vIEEgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3RvciwgcG9zc2libHkgcmVkaXJlY3RpbmcuCi8vLwovLy8gTm90ZSB0aGF0IGZhY3RvcnkgY29uc3RydWN0b3JzIGFyZSB0cmVhdGVkIGFzIFtQcm9jZWR1cmVdcy4KLy8vCi8vLyBDb25zdHJ1Y3RvcnMgZG8gbm90IHRha2UgdHlwZSBwYXJhbWV0ZXJzLiAgVHlwZSBhcmd1bWVudHMgZnJvbSBhIGNvbnN0cnVjdG9yCi8vLyBpbnZvY2F0aW9uIHNob3VsZCBiZSBtYXRjaGVkIHdpdGggdGhlIHR5cGUgcGFyYW1ldGVycyBkZWNsYXJlZCBpbiB0aGUgY2xhc3MuCi8vLwovLy8gRm9yIHVubmFtZWQgY29uc3RydWN0b3JzLCB0aGUgbmFtZSBpcyBhbiBlbXB0eSBzdHJpbmcgKGluIGEgW05hbWVdKS4KY2xhc3MgQ29uc3RydWN0b3IgZXh0ZW5kcyBNZW1iZXIgewogIC8vLyBTdGFydCBvZmZzZXQgb2YgdGhlIGNvbnN0cnVjdG9yIGluIHRoZSBzb3VyY2UgZmlsZSBpdCBjb21lcyBmcm9tLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhpcyBpbmNsdWRlcyBhbm5vdGF0aW9ucyBpZiBhbnkuCiAgLy8vCiAgLy8vIFZhbGlkIHZhbHVlcyBhcmUgZnJvbSAwIGFuZCB1cCwgb3IgLTEgKFtUcmVlTm9kZS5ub09mZnNldF0pIGlmIHRoZSBmaWxlCiAgLy8vIHN0YXJ0IG9mZnNldCBpcyBub3QgYXZhaWxhYmxlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGlmIG5vbmUgaXMgc3BlY2lmaWNhbGx5CiAgLy8vIHNldCkuCiAgaW50IHN0YXJ0RmlsZU9mZnNldCA9IFRyZWVOb2RlLm5vT2Zmc2V0OwoKICBpbnQgZmxhZ3MgPSAwOwogIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbjsKICBMaXN0PEluaXRpYWxpemVyPiBpbml0aWFsaXplcnM7CgogIENvbnN0cnVjdG9yKHRoaXMuZnVuY3Rpb24sCiAgICAgIHtOYW1lIG5hbWUsCiAgICAgIGJvb2wgaXNDb25zdDogZmFsc2UsCiAgICAgIGJvb2wgaXNFeHRlcm5hbDogZmFsc2UsCiAgICAgIGJvb2wgaXNTeW50aGV0aWM6IGZhbHNlLAogICAgICBMaXN0PEluaXRpYWxpemVyPiBpbml0aWFsaXplcnMsCiAgICAgIGludCB0cmFuc2Zvcm1lckZsYWdzOiAwLAogICAgICBVcmkgZmlsZVVyaSwKICAgICAgUmVmZXJlbmNlIHJlZmVyZW5jZX0pCiAgICAgIDogdGhpcy5pbml0aWFsaXplcnMgPSBpbml0aWFsaXplcnMgPz8gPEluaXRpYWxpemVyPltdLAogICAgICAgIHN1cGVyKG5hbWUsIGZpbGVVcmksIHJlZmVyZW5jZSkgewogICAgZnVuY3Rpb24/LnBhcmVudCA9IHRoaXM7CiAgICBzZXRQYXJlbnRzKHRoaXMuaW5pdGlhbGl6ZXJzLCB0aGlzKTsKICAgIHRoaXMuaXNDb25zdCA9IGlzQ29uc3Q7CiAgICB0aGlzLmlzRXh0ZXJuYWwgPSBpc0V4dGVybmFsOwogICAgdGhpcy5pc1N5bnRoZXRpYyA9IGlzU3ludGhldGljOwogICAgdGhpcy50cmFuc2Zvcm1lckZsYWdzID0gdHJhbnNmb3JtZXJGbGFnczsKICB9CgogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0NvbnN0ID0gMSA8PCAwOyAvLyBNdXN0IG1hdGNoIHNlcmlhbGl6ZWQgYml0IHBvc2l0aW9ucy4KICBzdGF0aWMgY29uc3QgaW50IEZsYWdFeHRlcm5hbCA9IDEgPDwgMTsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdTeW50aGV0aWMgPSAxIDw8IDI7CgogIGJvb2wgZ2V0IGlzQ29uc3QgPT4gZmxhZ3MgJiBGbGFnQ29uc3QgIT0gMDsKICBib29sIGdldCBpc0V4dGVybmFsID0+IGZsYWdzICYgRmxhZ0V4dGVybmFsICE9IDA7CgogIC8vLyBUcnVlIGlmIHRoaXMgaXMgYSBzeW50aGV0aWMgY29uc3RydWN0b3IgaW5zZXJ0ZWQgaW4gYSBjbGFzcyB0aGF0CiAgLy8vIGRvZXMgbm90IG90aGVyd2lzZSBkZWNsYXJlIGFueSBjb25zdHJ1Y3RvcnMuCiAgYm9vbCBnZXQgaXNTeW50aGV0aWMgPT4gZmxhZ3MgJiBGbGFnU3ludGhldGljICE9IDA7CgogIHZvaWQgc2V0IGlzQ29uc3QoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdDb25zdCkgOiAoZmxhZ3MgJiB+RmxhZ0NvbnN0KTsKICB9CgogIHZvaWQgc2V0IGlzRXh0ZXJuYWwoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdFeHRlcm5hbCkgOiAoZmxhZ3MgJiB+RmxhZ0V4dGVybmFsKTsKICB9CgogIHZvaWQgc2V0IGlzU3ludGhldGljKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnU3ludGhldGljKSA6IChmbGFncyAmIH5GbGFnU3ludGhldGljKTsKICB9CgogIGJvb2wgZ2V0IGlzSW5zdGFuY2VNZW1iZXIgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaGFzR2V0dGVyID0+IGZhbHNlOwogIGJvb2wgZ2V0IGhhc1NldHRlciA9PiBmYWxzZTsKCiAgYWNjZXB0KE1lbWJlclZpc2l0b3IgdikgPT4gdi52aXNpdENvbnN0cnVjdG9yKHRoaXMpOwoKICBhY2NlcHRSZWZlcmVuY2UoTWVtYmVyUmVmZXJlbmNlVmlzaXRvciB2KSA9PgogICAgICB2LnZpc2l0Q29uc3RydWN0b3JSZWZlcmVuY2UodGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2aXNpdExpc3QoYW5ub3RhdGlvbnMsIHYpOwogICAgbmFtZT8uYWNjZXB0KHYpOwogICAgdmlzaXRMaXN0KGluaXRpYWxpemVycywgdik7CiAgICBmdW5jdGlvbj8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHJhbnNmb3JtTGlzdChhbm5vdGF0aW9ucywgdiwgdGhpcyk7CiAgICB0cmFuc2Zvcm1MaXN0KGluaXRpYWxpemVycywgdiwgdGhpcyk7CiAgICBpZiAoZnVuY3Rpb24gIT0gbnVsbCkgewogICAgICBmdW5jdGlvbiA9IGZ1bmN0aW9uLmFjY2VwdCh2KTsKICAgICAgZnVuY3Rpb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBnZXQgZ2V0dGVyVHlwZSA9PiBjb25zdCBCb3R0b21UeXBlKCk7CiAgRGFydFR5cGUgZ2V0IHNldHRlclR5cGUgPT4gY29uc3QgQm90dG9tVHlwZSgpOwoKICBMb2NhdGlvbiBfZ2V0TG9jYXRpb25JbkVuY2xvc2luZ0ZpbGUoaW50IG9mZnNldCkgewogICAgcmV0dXJuIF9nZXRMb2NhdGlvbkluQ29tcG9uZW50KGVuY2xvc2luZ0NvbXBvbmVudCwgZmlsZVVyaSwgb2Zmc2V0KTsKICB9Cn0KCi8vLyBSZXNpZHVlIG9mIGEgcmVkaXJlY3RpbmcgZmFjdG9yeSBjb25zdHJ1Y3RvciBmb3IgdGhlIGxpbmtpbmcgcGhhc2UuCi8vLwovLy8gSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlLCBgYmFyYCBpcyBhIHJlZGlyZWN0aW5nIGZhY3RvcnkgY29uc3RydWN0b3IuCi8vLwovLy8gICAgIGNsYXNzIEEgewovLy8gICAgICAgQS5mb28oKTsKLy8vICAgICAgIGZhY3RvcnkgQS5iYXIoKSA9IEEuZm9vOwovLy8gICAgIH0KLy8vCi8vLyBBbiBpbnZvY2F0aW9uIG9mIGBuZXcgQS5iYXIoKWAgaGFzIHRoZSBzYW1lIGVmZmVjdCBhcyBhbiBpbnZvY2F0aW9uIG9mCi8vLyBgbmV3IEEuZm9vKClgLiAgSW4gS2VybmVsLCB0aGUgaW52b2NhdGlvbnMgb2YgYGJhcmAgYXJlIHJlcGxhY2VkIHdpdGgKLy8vIGludm9jYXRpb25zIG9mIGBmb29gLCBhbmQgYWZ0ZXIgaXQgaXMgZG9uZSwgdGhlIHJlZGlyZWN0aW5nIGNvbnN0cnVjdG9yIGNhbgovLy8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBjbGFzcy4gIEhvd2V2ZXIsIGl0IGlzIG5lZWRlZCBkdXJpbmcgdGhlIGxpbmtpbmcgcGhhc2UsCi8vLyBiZWNhdXNlIG90aGVyIG1vZHVsZXMgY2FuIHJlZmVyIHRvIHRoYXQgY29uc3RydWN0b3IuCi8vLwovLy8gW1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yXXMgY29udGFpbiB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZvcgovLy8gbGlua2luZyBhbmQgYXJlIHRyZWF0ZWQgYXMgbm9uLXJ1bm5hYmxlIG1lbWJlcnMgb2YgY2xhc3NlcyB0aGF0IG1lcmVseSBzZXJ2ZQovLy8gYXMgY29udGFpbmVycyBmb3IgdGhhdCBpbmZvcm1hdGlvbi4KLy8vCi8vLyBSZWRpcmVjdGluZyBmYWN0b3J5IGNvbnN0cnVjdG9ycyBjYW4gYmUgdW5uYW1lZC4gIEluIHRoaXMgY2FzZSwgdGhlIG5hbWUgaXMKLy8vIGFuIGVtcHR5IHN0cmluZyAoaW4gYSBbTmFtZV0pLgpjbGFzcyBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciBleHRlbmRzIE1lbWJlciB7CiAgaW50IGZsYWdzID0gMDsKCiAgLy8vIFtSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcl1zIG1heSByZWRpcmVjdCB0byBjb25zdHJ1Y3RvcnMgb3IgZmFjdG9yaWVzCiAgLy8vIG9mIGluc3RhbnRpYXRlZCBnZW5lcmljIHR5cGVzLCB0aGF0IGlzLCBnZW5lcmljIHR5cGVzIHdpdGggc3VwcGxpZWQgdHlwZQogIC8vLyBhcmd1bWVudHMuICBUaGUgc3VwcGxpZWQgdHlwZSBhcmd1bWVudHMgYXJlIHN0b3JlZCBpbiB0aGlzIGZpZWxkLgogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIC8vLyBSZWZlcmVuY2UgdG8gdGhlIGNvbnN0cnVjdG9yIG9yIHRoZSBmYWN0b3J5IHRoYXQgdGhpcwogIC8vLyBbUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JdIHJlZGlyZWN0cyB0by4KICBSZWZlcmVuY2UgdGFyZ2V0UmVmZXJlbmNlOwoKICAvLy8gW3R5cGVQYXJhbWV0ZXJzXSBhcmUgZHVwbGljYXRlcyBvZiB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIHRoZSBlbmNsb3NpbmcKICAvLy8gY2xhc3MuICBCZWNhdXNlIFtSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcl1zIGFyZW4ndCBpbnN0YW5jZSBtZW1iZXJzLAogIC8vLyByZWZlcmVuY2VzIHRvIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIGVuY2xvc2luZyBjbGFzcyBpbiB0aGUKICAvLy8gcmVkaXJlY3Rpb24gdGFyZ2V0IGRlc2NyaXB0aW9uIGFyZSBlbmNvZGVkIHdpdGggcmVmZXJlbmNlcyB0byB0aGUgZWxlbWVudHMKICAvLy8gb2YgW3R5cGVQYXJhbWV0ZXJzXS4KICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzOwoKICAvLy8gUG9zaXRpb25hbCBwYXJhbWV0ZXJzIG9mIFtSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcl1zIHNob3VsZCBiZQogIC8vLyBjb21wYXRpYmxlIHdpdGggdGhhdCBvZiB0aGUgdGFyZ2V0IGNvbnN0cnVjdG9yLgogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CgogIC8vLyBOYW1lZCBwYXJhbWV0ZXJzIG9mIFtSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcl1zIHNob3VsZCBiZSBjb21wYXRpYmxlCiAgLy8vIHdpdGggdGhhdCBvZiB0aGUgdGFyZ2V0IGNvbnN0cnVjdG9yLgogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWRQYXJhbWV0ZXJzOwoKICBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcih0aGlzLnRhcmdldFJlZmVyZW5jZSwKICAgICAge05hbWUgbmFtZSwKICAgICAgYm9vbCBpc0NvbnN0OiBmYWxzZSwKICAgICAgYm9vbCBpc0V4dGVybmFsOiBmYWxzZSwKICAgICAgaW50IHRyYW5zZm9ybWVyRmxhZ3M6IDAsCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWRQYXJhbWV0ZXJzLAogICAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgVXJpIGZpbGVVcmksCiAgICAgIFJlZmVyZW5jZSByZWZlcmVuY2V9KQogICAgICA6IHRoaXMudHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVudHMgPz8gPERhcnRUeXBlPltdLAogICAgICAgIHRoaXMudHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVycyA/PyA8VHlwZVBhcmFtZXRlcj5bXSwKICAgICAgICB0aGlzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzID0KICAgICAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnMgPz8gPFZhcmlhYmxlRGVjbGFyYXRpb24+W10sCiAgICAgICAgdGhpcy5uYW1lZFBhcmFtZXRlcnMgPSBuYW1lZFBhcmFtZXRlcnMgPz8gPFZhcmlhYmxlRGVjbGFyYXRpb24+W10sCiAgICAgICAgdGhpcy5yZXF1aXJlZFBhcmFtZXRlckNvdW50ID0KICAgICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA/PyBwb3NpdGlvbmFsUGFyYW1ldGVycz8ubGVuZ3RoID8/IDAsCiAgICAgICAgc3VwZXIobmFtZSwgZmlsZVVyaSwgcmVmZXJlbmNlKSB7CiAgICBzZXRQYXJlbnRzKHRoaXMudHlwZVBhcmFtZXRlcnMsIHRoaXMpOwogICAgc2V0UGFyZW50cyh0aGlzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLCB0aGlzKTsKICAgIHNldFBhcmVudHModGhpcy5uYW1lZFBhcmFtZXRlcnMsIHRoaXMpOwogICAgdGhpcy5pc0NvbnN0ID0gaXNDb25zdDsKICAgIHRoaXMuaXNFeHRlcm5hbCA9IGlzRXh0ZXJuYWw7CiAgICB0aGlzLnRyYW5zZm9ybWVyRmxhZ3MgPSB0cmFuc2Zvcm1lckZsYWdzOwogIH0KCiAgc3RhdGljIGNvbnN0IGludCBGbGFnQ29uc3QgPSAxIDw8IDA7IC8vIE11c3QgbWF0Y2ggc2VyaWFsaXplZCBiaXQgcG9zaXRpb25zLgogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0V4dGVybmFsID0gMSA8PCAxOwoKICBib29sIGdldCBpc0NvbnN0ID0+IGZsYWdzICYgRmxhZ0NvbnN0ICE9IDA7CiAgYm9vbCBnZXQgaXNFeHRlcm5hbCA9PiBmbGFncyAmIEZsYWdFeHRlcm5hbCAhPSAwOwoKICB2b2lkIHNldCBpc0NvbnN0KGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnQ29uc3QpIDogKGZsYWdzICYgfkZsYWdDb25zdCk7CiAgfQoKICB2b2lkIHNldCBpc0V4dGVybmFsKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnRXh0ZXJuYWwpIDogKGZsYWdzICYgfkZsYWdFeHRlcm5hbCk7CiAgfQoKICBib29sIGdldCBpc0luc3RhbmNlTWVtYmVyID0+IGZhbHNlOwogIGJvb2wgZ2V0IGhhc0dldHRlciA9PiBmYWxzZTsKICBib29sIGdldCBoYXNTZXR0ZXIgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzVW5yZXNvbHZlZCA9PiB0YXJnZXRSZWZlcmVuY2UgPT0gbnVsbDsKCiAgTWVtYmVyIGdldCB0YXJnZXQgPT4gdGFyZ2V0UmVmZXJlbmNlPy5hc01lbWJlcjsKCiAgdm9pZCBzZXQgdGFyZ2V0KE1lbWJlciBtZW1iZXIpIHsKICAgIGFzc2VydChtZW1iZXIgaXMgQ29uc3RydWN0b3IgfHwKICAgICAgICAobWVtYmVyIGlzIFByb2NlZHVyZSAmJiBtZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLkZhY3RvcnkpKTsKICAgIHRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZShtZW1iZXIpOwogIH0KCiAgYWNjZXB0KE1lbWJlclZpc2l0b3IgdikgPT4gdi52aXNpdFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKHRoaXMpOwoKICBhY2NlcHRSZWZlcmVuY2UoTWVtYmVyUmVmZXJlbmNlVmlzaXRvciB2KSA9PgogICAgICB2LnZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JSZWZlcmVuY2UodGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2aXNpdExpc3QoYW5ub3RhdGlvbnMsIHYpOwogICAgdGFyZ2V0Py5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICB2aXNpdExpc3QodHlwZUFyZ3VtZW50cywgdik7CiAgICBuYW1lPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybVR5cGVMaXN0KHR5cGVBcmd1bWVudHMsIHYpOwogIH0KCiAgRGFydFR5cGUgZ2V0IGdldHRlclR5cGUgPT4gY29uc3QgQm90dG9tVHlwZSgpOwogIERhcnRUeXBlIGdldCBzZXR0ZXJUeXBlID0+IGNvbnN0IEJvdHRvbVR5cGUoKTsKCiAgTG9jYXRpb24gX2dldExvY2F0aW9uSW5FbmNsb3NpbmdGaWxlKGludCBvZmZzZXQpIHsKICAgIHJldHVybiBfZ2V0TG9jYXRpb25JbkNvbXBvbmVudChlbmNsb3NpbmdDb21wb25lbnQsIGZpbGVVcmksIG9mZnNldCk7CiAgfQp9CgovLy8gQSBtZXRob2QsIGdldHRlciwgc2V0dGVyLCBpbmRleC1nZXR0ZXIsIGluZGV4LXNldHRlciwgb3BlcmF0b3Igb3ZlcmxvYWRlciwKLy8vIG9yIGZhY3RvcnkuCi8vLwovLy8gUHJvY2VkdXJlcyBjYW4gaGF2ZSB0aGUgc3RhdGljLCBhYnN0cmFjdCwgYW5kL29yIGV4dGVybmFsIG1vZGlmaWVyLCBhbHRob3VnaAovLy8gb25seSB0aGUgc3RhdGljIGFuZCBleHRlcm5hbCBtb2RpZmllcnMgbWF5IGJlIHVzZWQgdG9nZXRoZXIuCi8vLwovLy8gRm9yIG5vbi1zdGF0aWMgcHJvY2VkdXJlcyB0aGUgbmFtZSBpcyByZXF1aXJlZCBmb3IgZHluYW1pYyBkaXNwYXRjaC4KLy8vIEZvciBleHRlcm5hbCBwcm9jZWR1cmVzIHRoZSBuYW1lIGlzIHJlcXVpcmVkIGZvciBpZGVudGlmeWluZyB0aGUgZXh0ZXJuYWwKLy8vIGltcGxlbWVudGF0aW9uLgovLy8KLy8vIEZvciBtZXRob2RzLCBnZXR0ZXJzLCBhbmQgc2V0dGVycyB0aGUgbmFtZSBpcyBqdXN0IGFzIGl0IHdhcyBkZWNsYXJlZC4KLy8vIEZvciBzZXR0ZXJzIHRoaXMgZG9lcyBub3QgaW5jbHVkZSBhIHRyYWlsaW5nIGA9YC4KLy8vIEZvciBpbmRleC1nZXR0ZXJzL3NldHRlcnMsIHRoaXMgaXMgYFtdYCBhbmQgYFtdPWAuCi8vLyBGb3Igb3BlcmF0b3JzLCB0aGlzIGlzIHRoZSB0b2tlbiBmb3IgdGhlIG9wZXJhdG9yLCBlLmcuIGArYCBvciBgPT1gLAovLy8gZXhjZXB0IGZvciB0aGUgdW5hcnkgbWludXMgb3BlcmF0b3IsIHdob3NlIG5hbWUgaXMgYHVuYXJ5LWAuCkBjb3EKY2xhc3MgUHJvY2VkdXJlIGV4dGVuZHMgTWVtYmVyIHsKICAvLy8gU3RhcnQgb2Zmc2V0IG9mIHRoZSBmdW5jdGlvbiBpbiB0aGUgc291cmNlIGZpbGUgaXQgY29tZXMgZnJvbS4KICAvLy8KICAvLy8gTm90ZSB0aGF0IHRoaXMgaW5jbHVkZXMgYW5ub3RhdGlvbnMgaWYgYW55LgogIC8vLwogIC8vLyBWYWxpZCB2YWx1ZXMgYXJlIGZyb20gMCBhbmQgdXAsIG9yIC0xIChbVHJlZU5vZGUubm9PZmZzZXRdKSBpZiB0aGUgZmlsZQogIC8vLyBzdGFydCBvZmZzZXQgaXMgbm90IGF2YWlsYWJsZSAodGhpcyBpcyB0aGUgZGVmYXVsdCBpZiBub25lIGlzIHNwZWNpZmljYWxseQogIC8vLyBzZXQpLgogIGludCBzdGFydEZpbGVPZmZzZXQgPSBUcmVlTm9kZS5ub09mZnNldDsKCiAgUHJvY2VkdXJlS2luZCBraW5kOwogIGludCBmbGFncyA9IDA7CiAgLy8gZnVuY3Rpb24gaXMgbnVsbCBpZiBhbmQgb25seSBpZiBhYnN0cmFjdCwgZXh0ZXJuYWwuCiAgRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uOwoKICAvLyBUaGUgZnVuY3Rpb24gbm9kZSdzIGJvZHkgbWlnaHQgYmUgbGF6aWx5IGxvYWRlZCwgbWVhbmluZyB0aGF0IHRoaXMgdmFsdWUKICAvLyBtaWdodCBub3QgYmUgc2V0IGNvcnJlY3RseSB5ZXQuIE1ha2Ugc3VyZSB0aGUgYm9keSBpcyBsb2FkZWQgYmVmb3JlCiAgLy8gcmV0dXJuaW5nIGFueXRoaW5nLgogIGludCBnZXQgdHJhbnNmb3JtZXJGbGFncyB7CiAgICBmdW5jdGlvbj8uYm9keTsKICAgIHJldHVybiBzdXBlci50cmFuc2Zvcm1lckZsYWdzOwogIH0KCiAgLy8gVGhlIGZ1bmN0aW9uIG5vZGUncyBib2R5IG1pZ2h0IGJlIGxhemlseSBsb2FkZWQsIG1lYW5pbmcgdGhhdCB0aGlzIHZhbHVlCiAgLy8gbWlnaHQgZ2V0IG92ZXJ3cml0dGVuIGxhdGVyICh3aGVuIHRoZSBib2R5IGlzIHJlYWQpLiBUbyBhdm9pZCB0aGF0IHJlYWQgdGhlCiAgLy8gYm9keSBub3cgYW5kIG9ubHkgc2V0IHRoZSB2YWx1ZSBhZnRlcndhcmRzLgogIHZvaWQgc2V0IHRyYW5zZm9ybWVyRmxhZ3MoaW50IG5ld1ZhbHVlKSB7CiAgICBmdW5jdGlvbj8uYm9keTsKICAgIHN1cGVyLnRyYW5zZm9ybWVyRmxhZ3MgPSBuZXdWYWx1ZTsKICB9CgogIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgdGhlIHRyYW5zZm9ybWVyIGZsYWdzIHdpdGhvdXQgbG9hZGluZyB0aGUgYm9keS4KICAvLyBVc2VkIHdoZW4gcmVhZGluZyB0aGUgYmluYXJ5LiBGb3Igb3RoZXIgY2FzZXMgb25lIHNob3VsZCBwcm9iYWJseSB1c2UKICAvLyBgdHJhbnNmb3JtZXJGbGFncyA9IHZhbHVlO2AuCiAgdm9pZCBzZXRUcmFuc2Zvcm1lckZsYWdzV2l0aG91dExhenlMb2FkaW5nKGludCBuZXdWYWx1ZSkgewogICAgc3VwZXIudHJhbnNmb3JtZXJGbGFncyA9IG5ld1ZhbHVlOwogIH0KCiAgUmVmZXJlbmNlIGZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRSZWZlcmVuY2U7CiAgUmVmZXJlbmNlIGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlOwoKICBQcm9jZWR1cmUoTmFtZSBuYW1lLCBQcm9jZWR1cmVLaW5kIGtpbmQsIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiwKICAgICAge2Jvb2wgaXNBYnN0cmFjdDogZmFsc2UsCiAgICAgIGJvb2wgaXNTdGF0aWM6IGZhbHNlLAogICAgICBib29sIGlzRXh0ZXJuYWw6IGZhbHNlLAogICAgICBib29sIGlzQ29uc3Q6IGZhbHNlLAogICAgICBib29sIGlzRm9yd2FyZGluZ1N0dWI6IGZhbHNlLAogICAgICBib29sIGlzRm9yd2FyZGluZ1NlbWlTdHViOiBmYWxzZSwKICAgICAgaW50IHRyYW5zZm9ybWVyRmxhZ3M6IDAsCiAgICAgIFVyaSBmaWxlVXJpLAogICAgICBSZWZlcmVuY2UgcmVmZXJlbmNlLAogICAgICBNZW1iZXIgZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldCwKICAgICAgTWVtYmVyIGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0fSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKG5hbWUsIGtpbmQsIGZ1bmN0aW9uLAogICAgICAgICAgICBpc0Fic3RyYWN0OiBpc0Fic3RyYWN0LAogICAgICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsCiAgICAgICAgICAgIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsCiAgICAgICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QsCiAgICAgICAgICAgIGlzRm9yd2FyZGluZ1N0dWI6IGlzRm9yd2FyZGluZ1N0dWIsCiAgICAgICAgICAgIGlzRm9yd2FyZGluZ1NlbWlTdHViOiBpc0ZvcndhcmRpbmdTZW1pU3R1YiwKICAgICAgICAgICAgdHJhbnNmb3JtZXJGbGFnczogdHJhbnNmb3JtZXJGbGFncywKICAgICAgICAgICAgZmlsZVVyaTogZmlsZVVyaSwKICAgICAgICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2UsCiAgICAgICAgICAgIGZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRSZWZlcmVuY2U6CiAgICAgICAgICAgICAgICBnZXRNZW1iZXJSZWZlcmVuY2UoZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldCksCiAgICAgICAgICAgIGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlOgogICAgICAgICAgICAgICAgZ2V0TWVtYmVyUmVmZXJlbmNlKGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0KSk7CgogIFByb2NlZHVyZS5ieVJlZmVyZW5jZShOYW1lIG5hbWUsIHRoaXMua2luZCwgdGhpcy5mdW5jdGlvbiwKICAgICAge2Jvb2wgaXNBYnN0cmFjdDogZmFsc2UsCiAgICAgIGJvb2wgaXNTdGF0aWM6IGZhbHNlLAogICAgICBib29sIGlzRXh0ZXJuYWw6IGZhbHNlLAogICAgICBib29sIGlzQ29uc3Q6IGZhbHNlLAogICAgICBib29sIGlzRm9yd2FyZGluZ1N0dWI6IGZhbHNlLAogICAgICBib29sIGlzRm9yd2FyZGluZ1NlbWlTdHViOiBmYWxzZSwKICAgICAgaW50IHRyYW5zZm9ybWVyRmxhZ3M6IDAsCiAgICAgIFVyaSBmaWxlVXJpLAogICAgICBSZWZlcmVuY2UgcmVmZXJlbmNlLAogICAgICB0aGlzLmZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRSZWZlcmVuY2UsCiAgICAgIHRoaXMuZm9yd2FyZGluZ1N0dWJJbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2V9KQogICAgICA6IHN1cGVyKG5hbWUsIGZpbGVVcmksIHJlZmVyZW5jZSkgewogICAgZnVuY3Rpb24/LnBhcmVudCA9IHRoaXM7CiAgICB0aGlzLmlzQWJzdHJhY3QgPSBpc0Fic3RyYWN0OwogICAgdGhpcy5pc1N0YXRpYyA9IGlzU3RhdGljOwogICAgdGhpcy5pc0V4dGVybmFsID0gaXNFeHRlcm5hbDsKICAgIHRoaXMuaXNDb25zdCA9IGlzQ29uc3Q7CiAgICB0aGlzLmlzRm9yd2FyZGluZ1N0dWIgPSBpc0ZvcndhcmRpbmdTdHViOwogICAgdGhpcy5pc0ZvcndhcmRpbmdTZW1pU3R1YiA9IGlzRm9yd2FyZGluZ1NlbWlTdHViOwogICAgdGhpcy50cmFuc2Zvcm1lckZsYWdzID0gdHJhbnNmb3JtZXJGbGFnczsKICB9CgogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ1N0YXRpYyA9IDEgPDwgMDsgLy8gTXVzdCBtYXRjaCBzZXJpYWxpemVkIGJpdCBwb3NpdGlvbnMuCiAgc3RhdGljIGNvbnN0IGludCBGbGFnQWJzdHJhY3QgPSAxIDw8IDE7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnRXh0ZXJuYWwgPSAxIDw8IDI7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnQ29uc3QgPSAxIDw8IDM7IC8vIE9ubHkgZm9yIGV4dGVybmFsIGNvbnN0IGZhY3Rvcmllcy4KICBzdGF0aWMgY29uc3QgaW50IEZsYWdGb3J3YXJkaW5nU3R1YiA9IDEgPDwgNDsKICBzdGF0aWMgY29uc3QgaW50IEZsYWdGb3J3YXJkaW5nU2VtaVN0dWIgPSAxIDw8IDU7CiAgLy8gVE9ETygyOTg0MSk6IFJlbW92ZSB0aGlzIGZsYWcgYWZ0ZXIgdGhlIGlzc3VlIGlzIHJlc29sdmVkLgogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yID0gMSA8PCA2OwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ05vU3VjaE1ldGhvZEZvcndhcmRlciA9IDEgPDwgNzsKCiAgYm9vbCBnZXQgaXNTdGF0aWMgPT4gZmxhZ3MgJiBGbGFnU3RhdGljICE9IDA7CiAgYm9vbCBnZXQgaXNBYnN0cmFjdCA9PiBmbGFncyAmIEZsYWdBYnN0cmFjdCAhPSAwOwogIGJvb2wgZ2V0IGlzRXh0ZXJuYWwgPT4gZmxhZ3MgJiBGbGFnRXh0ZXJuYWwgIT0gMDsKCiAgLy8vIFRydWUgaWYgdGhpcyBoYXMgdGhlIGBjb25zdGAgbW9kaWZpZXIuICBUaGlzIGlzIG9ubHkgcG9zc2libGUgZm9yIGV4dGVybmFsCiAgLy8vIGNvbnN0YW50IGZhY3Rvcmllcywgc3VjaCBhcyBgU3RyaW5nLmZyb21FbnZpcm9ubWVudGAuCiAgYm9vbCBnZXQgaXNDb25zdCA9PiBmbGFncyAmIEZsYWdDb25zdCAhPSAwOwoKICAvLy8gSWYgc2V0LCB0aGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgdGhpcyBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uIGV4aXN0cwogIC8vLyBzb2xlbHkgZm9yIHRoZSBwdXJwb3NlIG9mIHR5cGUgY2hlY2tpbmcgYXJndW1lbnRzIGFuZCBmb3J3YXJkaW5nIHRvCiAgLy8vIFtmb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0XS4KICAvLy8KICAvLy8gTm90ZSB0aGF0IGp1c3QgYmVjYXVzZSB0aGlzIGJpdCBpcyBzZXQgZG9lc24ndCBtZWFuIHRoYXQgdGhlIGZ1bmN0aW9uIHdhcwogIC8vLyBub3QgZGVjbGFyZWQgaW4gdGhlIHNvdXJjZTsgaXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgaXMgYSBmb3J3YXJkaW5nCiAgLy8vIHNlbWktc3R1YiAoc2VlIGlzRm9yd2FyZGluZ1NlbWlTdHViKS4gIFRvIGRldGVybWluZSB3aGV0aGVyIHRoaXMgZnVuY3Rpb24KICAvLy8gd2FzIHByZXNlbnQgaW4gdGhlIHNvdXJjZSwgY29uc3VsdCBbaXNTeW50aGV0aWNGb3J3YXJkZXJdLgogIGJvb2wgZ2V0IGlzRm9yd2FyZGluZ1N0dWIgPT4gZmxhZ3MgJiBGbGFnRm9yd2FyZGluZ1N0dWIgIT0gMDsKCiAgLy8vIElmIHNldCwgdGhpcyBmbGFnIGluZGljYXRlcyB0aGF0IGFsdGhvdWdoIHRoaXMgZnVuY3Rpb24gaXMgYSBmb3J3YXJkaW5nCiAgLy8vIHN0dWIsIGl0IHdhcyBwcmVzZW50IGluIHRoZSBvcmlnaW5hbCBzb3VyY2UgYXMgYW4gYWJzdHJhY3QgbWV0aG9kLgogIGJvb2wgZ2V0IGlzRm9yd2FyZGluZ1NlbWlTdHViID0+IGZsYWdzICYgRmxhZ0ZvcndhcmRpbmdTZW1pU3R1YiAhPSAwOwoKICAvLyBJbmRpY2F0ZXMgaWYgdGhpcyBbUHJvY2VkdXJlXSByZXByZXNlbnRzIGEgcmVkaXJlY3RpbmcgZmFjdG9yeSBjb25zdHJ1Y3RvcgogIC8vIGFuZCBkb2Vzbid0IGhhdmUgYSBydW5uYWJsZSBib2R5LgogIGJvb2wgZ2V0IGlzUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IgewogICAgcmV0dXJuIGZsYWdzICYgRmxhZ1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yICE9IDA7CiAgfQoKICAvLy8gSWYgc2V0LCB0aGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgdGhpcyBmdW5jdGlvbiB3YXMgbm90IHByZXNlbnQgaW4gdGhlCiAgLy8vIHNvdXJjZSwgYW5kIGl0IGV4aXN0cyBzb2xlbHkgZm9yIHRoZSBwdXJwb3NlIG9mIHR5cGUgY2hlY2tpbmcgYXJndW1lbnRzCiAgLy8vIGFuZCBmb3J3YXJkaW5nIHRvIFtmb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0XS4KICBib29sIGdldCBpc1N5bnRoZXRpY0ZvcndhcmRlciA9PiBpc0ZvcndhcmRpbmdTdHViICYmICFpc0ZvcndhcmRpbmdTZW1pU3R1YjsKCiAgYm9vbCBnZXQgaXNOb1N1Y2hNZXRob2RGb3J3YXJkZXIgPT4gZmxhZ3MgJiBGbGFnTm9TdWNoTWV0aG9kRm9yd2FyZGVyICE9IDA7CgogIHZvaWQgc2V0IGlzU3RhdGljKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnU3RhdGljKSA6IChmbGFncyAmIH5GbGFnU3RhdGljKTsKICB9CgogIHZvaWQgc2V0IGlzQWJzdHJhY3QoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdBYnN0cmFjdCkgOiAoZmxhZ3MgJiB+RmxhZ0Fic3RyYWN0KTsKICB9CgogIHZvaWQgc2V0IGlzRXh0ZXJuYWwoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdFeHRlcm5hbCkgOiAoZmxhZ3MgJiB+RmxhZ0V4dGVybmFsKTsKICB9CgogIHZvaWQgc2V0IGlzQ29uc3QoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdDb25zdCkgOiAoZmxhZ3MgJiB+RmxhZ0NvbnN0KTsKICB9CgogIHZvaWQgc2V0IGlzRm9yd2FyZGluZ1N0dWIoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPQogICAgICAgIHZhbHVlID8gKGZsYWdzIHwgRmxhZ0ZvcndhcmRpbmdTdHViKSA6IChmbGFncyAmIH5GbGFnRm9yd2FyZGluZ1N0dWIpOwogIH0KCiAgdm9pZCBzZXQgaXNGb3J3YXJkaW5nU2VtaVN0dWIoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZQogICAgICAgID8gKGZsYWdzIHwgRmxhZ0ZvcndhcmRpbmdTZW1pU3R1YikKICAgICAgICA6IChmbGFncyAmIH5GbGFnRm9yd2FyZGluZ1NlbWlTdHViKTsKICB9CgogIHZvaWQgc2V0IGlzUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZQogICAgICAgID8gKGZsYWdzIHwgRmxhZ1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKQogICAgICAgIDogKGZsYWdzICYgfkZsYWdSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcik7CiAgfQoKICB2b2lkIHNldCBpc05vU3VjaE1ldGhvZEZvcndhcmRlcihib29sIHZhbHVlKSB7CiAgICBmbGFncyA9IHZhbHVlCiAgICAgICAgPyAoZmxhZ3MgfCBGbGFnTm9TdWNoTWV0aG9kRm9yd2FyZGVyKQogICAgICAgIDogKGZsYWdzICYgfkZsYWdOb1N1Y2hNZXRob2RGb3J3YXJkZXIpOwogIH0KCiAgYm9vbCBnZXQgaXNJbnN0YW5jZU1lbWJlciA9PiAhaXNTdGF0aWM7CiAgYm9vbCBnZXQgaXNHZXR0ZXIgPT4ga2luZCA9PSBQcm9jZWR1cmVLaW5kLkdldHRlcjsKICBib29sIGdldCBpc1NldHRlciA9PiBraW5kID09IFByb2NlZHVyZUtpbmQuU2V0dGVyOwogIGJvb2wgZ2V0IGlzQWNjZXNzb3IgPT4gaXNHZXR0ZXIgfHwgaXNTZXR0ZXI7CiAgYm9vbCBnZXQgaGFzR2V0dGVyID0+IGtpbmQgIT0gUHJvY2VkdXJlS2luZC5TZXR0ZXI7CiAgYm9vbCBnZXQgaGFzU2V0dGVyID0+IGtpbmQgPT0gUHJvY2VkdXJlS2luZC5TZXR0ZXI7CiAgYm9vbCBnZXQgaXNGYWN0b3J5ID0+IGtpbmQgPT0gUHJvY2VkdXJlS2luZC5GYWN0b3J5OwoKICBNZW1iZXIgZ2V0IGZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXQgPT4KICAgICAgZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldFJlZmVyZW5jZT8uYXNNZW1iZXI7CgogIHZvaWQgc2V0IGZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXQoTWVtYmVyIHRhcmdldCkgewogICAgZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpOwogIH0KCiAgTWVtYmVyIGdldCBmb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldCA9PgogICAgICBmb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldFJlZmVyZW5jZT8uYXNNZW1iZXI7CgogIHZvaWQgc2V0IGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0KE1lbWJlciB0YXJnZXQpIHsKICAgIGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCk7CiAgfQoKICBhY2NlcHQoTWVtYmVyVmlzaXRvciB2KSA9PiB2LnZpc2l0UHJvY2VkdXJlKHRoaXMpOwoKICBhY2NlcHRSZWZlcmVuY2UoTWVtYmVyUmVmZXJlbmNlVmlzaXRvciB2KSA9PiB2LnZpc2l0UHJvY2VkdXJlUmVmZXJlbmNlKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KGFubm90YXRpb25zLCB2KTsKICAgIG5hbWU/LmFjY2VwdCh2KTsKICAgIGZ1bmN0aW9uPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIGlmIChmdW5jdGlvbiAhPSBudWxsKSB7CiAgICAgIGZ1bmN0aW9uID0gZnVuY3Rpb24uYWNjZXB0KHYpOwogICAgICBmdW5jdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9CgogIERhcnRUeXBlIGdldCBnZXR0ZXJUeXBlIHsKICAgIHJldHVybiBpc0dldHRlciA/IGZ1bmN0aW9uLnJldHVyblR5cGUgOiBmdW5jdGlvbi5mdW5jdGlvblR5cGU7CiAgfQoKICBEYXJ0VHlwZSBnZXQgc2V0dGVyVHlwZSB7CiAgICByZXR1cm4gaXNTZXR0ZXIKICAgICAgICA/IGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzWzBdLnR5cGUKICAgICAgICA6IGNvbnN0IEJvdHRvbVR5cGUoKTsKICB9CgogIExvY2F0aW9uIF9nZXRMb2NhdGlvbkluRW5jbG9zaW5nRmlsZShpbnQgb2Zmc2V0KSB7CiAgICByZXR1cm4gX2dldExvY2F0aW9uSW5Db21wb25lbnQoZW5jbG9zaW5nQ29tcG9uZW50LCBmaWxlVXJpLCBvZmZzZXQpOwogIH0KfQoKZW51bSBQcm9jZWR1cmVLaW5kIHsKICBNZXRob2QsCiAgR2V0dGVyLAogIFNldHRlciwKICBPcGVyYXRvciwKICBGYWN0b3J5LAp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gICAgICAgICAgICAgICAgICAgICBDT05TVFJVQ1RPUiBJTklUSUFMSVpFUlMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLy8gUGFydCBvZiBhbiBpbml0aWFsaXplciBsaXN0IGluIGEgY29uc3RydWN0b3IuCmFic3RyYWN0IGNsYXNzIEluaXRpYWxpemVyIGV4dGVuZHMgVHJlZU5vZGUgewogIC8vLyBUcnVlIGlmIHRoaXMgaXMgYSBzeW50aGV0aWMgY29uc3RydWN0b3IgaW5pdGlhbGl6ZXIuCiAgQGluZm9ybWF0aXZlCiAgYm9vbCBpc1N5bnRoZXRpYyA9IGZhbHNlOwoKICBhY2NlcHQoSW5pdGlhbGl6ZXJWaXNpdG9yIHYpOwp9CgovLy8gQW4gaW5pdGlhbGl6ZXIgd2l0aCBhIGNvbXBpbGUtdGltZSBlcnJvci4KLy8vCi8vLyBTaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uIGF0IHJ1bnRpbWUuCi8vCi8vIERFU0lHTiBUT0RPOiBUaGUgZnJvbnRlbmQgc2hvdWxkIHVzZSB0aGlzIGluIGEgbG90IG1vcmUgY2FzZXMgdG8gY2F0Y2gKLy8gaW52YWxpZCBjYXNlcy4KY2xhc3MgSW52YWxpZEluaXRpYWxpemVyIGV4dGVuZHMgSW5pdGlhbGl6ZXIgewogIGFjY2VwdChJbml0aWFsaXplclZpc2l0b3IgdikgPT4gdi52aXNpdEludmFsaWRJbml0aWFsaXplcih0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikge30KfQoKLy8vIEEgZmllbGQgYXNzaWdubWVudCBgZmllbGQgPSB2YWx1ZWAgb2NjdXJyaW5nIGluIHRoZSBpbml0aWFsaXplciBsaXN0IG9mCi8vLyBhIGNvbnN0cnVjdG9yLgovLy8KLy8vIFRoaXMgbm9kZSBoYXMgbm90aGluZyB0byBkbyB3aXRoIGRlY2xhcmF0aW9uLXNpdGUgZmllbGQgaW5pdGlhbGl6ZXJzOyB0aG9zZQovLy8gYXJlIFtFeHByZXNzaW9uXXMgc3RvcmVkIGluIFtGaWVsZC5pbml0aWFsaXplcl0uCi8vCi8vIFRPRE86IFRoZSBmcm9udGVuZCBzaG91bGQgY2hlY2sgdGhhdCBhbGwgZmluYWwgZmllbGRzIGFyZSBpbml0aWFsaXplZAovLyAgZXhhY3RseSBvbmNlLCBhbmQgdGhhdCBubyBmaWVsZHMgYXJlIGFzc2lnbmVkIHR3aWNlIGluIHRoZSBpbml0aWFsaXplciBsaXN0LgpjbGFzcyBGaWVsZEluaXRpYWxpemVyIGV4dGVuZHMgSW5pdGlhbGl6ZXIgewogIC8vLyBSZWZlcmVuY2UgdG8gdGhlIGZpZWxkIGJlaW5nIGluaXRpYWxpemVkLiAgTm90IG51bGwuCiAgUmVmZXJlbmNlIGZpZWxkUmVmZXJlbmNlOwogIEV4cHJlc3Npb24gdmFsdWU7CgogIEZpZWxkSW5pdGlhbGl6ZXIoRmllbGQgZmllbGQsIEV4cHJlc3Npb24gdmFsdWUpCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShmaWVsZD8ucmVmZXJlbmNlLCB2YWx1ZSk7CgogIEZpZWxkSW5pdGlhbGl6ZXIuYnlSZWZlcmVuY2UodGhpcy5maWVsZFJlZmVyZW5jZSwgdGhpcy52YWx1ZSkgewogICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBGaWVsZCBnZXQgZmllbGQgPT4gZmllbGRSZWZlcmVuY2U/Lm5vZGU7CgogIHZvaWQgc2V0IGZpZWxkKEZpZWxkIGZpZWxkKSB7CiAgICBmaWVsZFJlZmVyZW5jZSA9IGZpZWxkPy5yZWZlcmVuY2U7CiAgfQoKICBhY2NlcHQoSW5pdGlhbGl6ZXJWaXNpdG9yIHYpID0+IHYudmlzaXRGaWVsZEluaXRpYWxpemVyKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgZmllbGQ/LmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIHZhbHVlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB2YWx1ZSA9IHZhbHVlLmFjY2VwdCh2KTsKICAgICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gQSBzdXBlciBjYWxsIGBzdXBlcih4LHkpYCBvY2N1cnJpbmcgaW4gdGhlIGluaXRpYWxpemVyIGxpc3Qgb2YgYQovLy8gY29uc3RydWN0b3IuCi8vLwovLy8gVGhlcmUgYXJlIG5vIHR5cGUgYXJndW1lbnRzIG9uIHRoaXMgY2FsbC4KLy8KLy8gVE9ETzogVGhlIGZyb250ZW5kIHNob3VsZCBjaGVjayB0aGF0IHRoZXJlIGlzIG5vIG1vcmUgdGhhbiBvbmUgc3VwZXIgY2FsbC4KLy8KLy8gREVTSUdOIFRPRE86IENvbnNpZGVyIGlmIHRoZSBmcm9udGVuZCBzaG91bGQgaW5zZXJ0IHR5cGUgYXJndW1lbnRzIGRlcml2ZWQKLy8gZnJvbSB0aGUgZXh0ZW5kcyBjbGF1c2UuCmNsYXNzIFN1cGVySW5pdGlhbGl6ZXIgZXh0ZW5kcyBJbml0aWFsaXplciB7CiAgLy8vIFJlZmVyZW5jZSB0byB0aGUgY29uc3RydWN0b3IgYmVpbmcgaW52b2tlZCBpbiB0aGUgc3VwZXIgY2xhc3MuIE5vdCBudWxsLgogIFJlZmVyZW5jZSB0YXJnZXRSZWZlcmVuY2U7CiAgQXJndW1lbnRzIGFyZ3VtZW50czsKCiAgU3VwZXJJbml0aWFsaXplcihDb25zdHJ1Y3RvciB0YXJnZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KSwgYXJndW1lbnRzKTsKCiAgU3VwZXJJbml0aWFsaXplci5ieVJlZmVyZW5jZSh0aGlzLnRhcmdldFJlZmVyZW5jZSwgdGhpcy5hcmd1bWVudHMpIHsKICAgIGFyZ3VtZW50cz8ucGFyZW50ID0gdGhpczsKICB9CgogIENvbnN0cnVjdG9yIGdldCB0YXJnZXQgPT4gdGFyZ2V0UmVmZXJlbmNlPy5hc0NvbnN0cnVjdG9yOwoKICB2b2lkIHNldCB0YXJnZXQoQ29uc3RydWN0b3IgdGFyZ2V0KSB7CiAgICB0YXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KTsKICB9CgogIGFjY2VwdChJbml0aWFsaXplclZpc2l0b3IgdikgPT4gdi52aXNpdFN1cGVySW5pdGlhbGl6ZXIodGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0YXJnZXQ/LmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIGFyZ3VtZW50cz8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGFyZ3VtZW50cyA9IGFyZ3VtZW50cy5hY2NlcHQodik7CiAgICAgIGFyZ3VtZW50cz8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBBIHJlZGlyZWN0aW5nIGNhbGwgYHRoaXMoeCx5KWAgb2NjdXJyaW5nIGluIHRoZSBpbml0aWFsaXplciBsaXN0IG9mCi8vLyBhIGNvbnN0cnVjdG9yLgovLwovLyBUT0RPOiBUaGUgZnJvbnRlbmQgc2hvdWxkIGNoZWNrIHRoYXQgdGhpcyBpcyB0aGUgb25seSBpbml0aWFsaXplciBhbmQgaWYgdGhlCi8vIGNvbnN0cnVjdG9yIGhhcyBhIGJvZHkgb3IgaWYgdGhlcmUgaXMgYSBjeWNsZSBpbiB0aGUgaW5pdGlhbGl6ZXIgY2FsbHMuCmNsYXNzIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgZXh0ZW5kcyBJbml0aWFsaXplciB7CiAgLy8vIFJlZmVyZW5jZSB0byB0aGUgY29uc3RydWN0b3IgYmVpbmcgaW52b2tlZCBpbiB0aGUgc2FtZSBjbGFzcy4gTm90IG51bGwuCiAgUmVmZXJlbmNlIHRhcmdldFJlZmVyZW5jZTsKICBBcmd1bWVudHMgYXJndW1lbnRzOwoKICBSZWRpcmVjdGluZ0luaXRpYWxpemVyKENvbnN0cnVjdG9yIHRhcmdldCwgQXJndW1lbnRzIGFyZ3VtZW50cykKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpLCBhcmd1bWVudHMpOwoKICBSZWRpcmVjdGluZ0luaXRpYWxpemVyLmJ5UmVmZXJlbmNlKHRoaXMudGFyZ2V0UmVmZXJlbmNlLCB0aGlzLmFyZ3VtZW50cykgewogICAgYXJndW1lbnRzPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgQ29uc3RydWN0b3IgZ2V0IHRhcmdldCA9PiB0YXJnZXRSZWZlcmVuY2U/LmFzQ29uc3RydWN0b3I7CgogIHZvaWQgc2V0IHRhcmdldChDb25zdHJ1Y3RvciB0YXJnZXQpIHsKICAgIHRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpOwogIH0KCiAgYWNjZXB0KEluaXRpYWxpemVyVmlzaXRvciB2KSA9PiB2LnZpc2l0UmVkaXJlY3RpbmdJbml0aWFsaXplcih0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHRhcmdldD8uYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgYXJndW1lbnRzPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXJndW1lbnRzID0gYXJndW1lbnRzLmFjY2VwdCh2KTsKICAgICAgYXJndW1lbnRzPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEJpbmRpbmcgb2YgYSB0ZW1wb3JhcnkgdmFyaWFibGUgaW4gdGhlIGluaXRpYWxpemVyIGxpc3Qgb2YgYSBjb25zdHJ1Y3Rvci4KLy8vCi8vLyBUaGUgdmFyaWFibGUgaXMgaW4gc2NvcGUgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIGluaXRpYWxpemVyIGxpc3QsIGJ1dCBpcwovLy8gbm90IGluIHNjb3BlIGluIHRoZSBjb25zdHJ1Y3RvciBib2R5LgpjbGFzcyBMb2NhbEluaXRpYWxpemVyIGV4dGVuZHMgSW5pdGlhbGl6ZXIgewogIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGU7CgogIExvY2FsSW5pdGlhbGl6ZXIodGhpcy52YXJpYWJsZSkgewogICAgdmFyaWFibGU/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoSW5pdGlhbGl6ZXJWaXNpdG9yIHYpID0+IHYudmlzaXRMb2NhbEluaXRpYWxpemVyKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmFyaWFibGU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmICh2YXJpYWJsZSAhPSBudWxsKSB7CiAgICAgIHZhcmlhYmxlID0gdmFyaWFibGUuYWNjZXB0KHYpOwogICAgICB2YXJpYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCmNsYXNzIEFzc2VydEluaXRpYWxpemVyIGV4dGVuZHMgSW5pdGlhbGl6ZXIgewogIEFzc2VydFN0YXRlbWVudCBzdGF0ZW1lbnQ7CgogIEFzc2VydEluaXRpYWxpemVyKHRoaXMuc3RhdGVtZW50KSB7CiAgICBzdGF0ZW1lbnQucGFyZW50ID0gdGhpczsKICB9CgogIGFjY2VwdChJbml0aWFsaXplclZpc2l0b3IgdikgPT4gdi52aXNpdEFzc2VydEluaXRpYWxpemVyKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgc3RhdGVtZW50LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudC5hY2NlcHQodik7CiAgICBzdGF0ZW1lbnQucGFyZW50ID0gdGhpczsKICB9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBGVU5DVElPTlMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLy8gQSBmdW5jdGlvbiBkZWNsYXJlcyBwYXJhbWV0ZXJzIGFuZCBoYXMgYSBib2R5LgovLy8KLy8vIFRoaXMgbWF5IG9jY3VyIGluIGEgcHJvY2VkdXJlLCBjb25zdHJ1Y3RvciwgZnVuY3Rpb24gZXhwcmVzc2lvbiwgb3IgbG9jYWwKLy8vIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgpAY29xCmNsYXNzIEZ1bmN0aW9uTm9kZSBleHRlbmRzIFRyZWVOb2RlIHsKICAvLy8gRW5kIG9mZnNldCBpbiB0aGUgc291cmNlIGZpbGUgaXQgY29tZXMgZnJvbS4gVmFsaWQgdmFsdWVzIGFyZSBmcm9tIDAgYW5kCiAgLy8vIHVwLCBvciAtMSAoW1RyZWVOb2RlLm5vT2Zmc2V0XSkgaWYgdGhlIGZpbGUgZW5kIG9mZnNldCBpcyBub3QgYXZhaWxhYmxlCiAgLy8vICh0aGlzIGlzIHRoZSBkZWZhdWx0IGlmIG5vbmUgaXMgc3BlY2lmaWNhbGx5IHNldCkuCiAgaW50IGZpbGVFbmRPZmZzZXQgPSBUcmVlTm9kZS5ub09mZnNldDsKCiAgLy8vIEtlcm5lbCBhc3luYyBtYXJrZXIgZm9yIHRoZSBmdW5jdGlvbi4KICAvLy8KICAvLy8gU2VlIGFsc28gW2RhcnRBc3luY01hcmtlcl0uCiAgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXI7CgogIC8vLyBEYXJ0IGFzeW5jIG1hcmtlciBmb3IgdGhlIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBTZWUgYWxzbyBbYXN5bmNNYXJrZXJdLgogIC8vLwogIC8vLyBBIEtlcm5lbCBmdW5jdGlvbiBjYW4gcmVwcmVzZW50IGEgRGFydCBmdW5jdGlvbiB3aXRoIGEgZGlmZmVyZW50IGFzeW5jCiAgLy8vIG1hcmtlci4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIHdoZW4gYXN5bmMvYXdhaXQgaXMgdHJhbnNsYXRlZCBhd2F5LAogIC8vLyBhIERhcnQgYXN5bmMgZnVuY3Rpb24gbWlnaHQgYmUgcmVwcmVzZW50ZWQgYnkgYSBLZXJuZWwgc3luYyBmdW5jdGlvbi4KICBBc3luY01hcmtlciBkYXJ0QXN5bmNNYXJrZXI7CgogIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnM7CiAgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CiAgQGNvcXNpbmdsZWRlZgogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgQG5vY29xCiAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBuYW1lZFBhcmFtZXRlcnM7CiAgRGFydFR5cGUgcmV0dXJuVHlwZTsgLy8gTm90IG51bGwuCiAgU3RhdGVtZW50IF9ib2R5OwoKICB2b2lkIEZ1bmN0aW9uKCkgbGF6eUJ1aWxkZXI7CgogIHZvaWQgX2J1aWxkTGF6eSgpIHsKICAgIGlmIChsYXp5QnVpbGRlciAhPSBudWxsKSB7CiAgICAgIHZhciBsYXp5QnVpbGRlckxvY2FsID0gbGF6eUJ1aWxkZXI7CiAgICAgIGxhenlCdWlsZGVyID0gbnVsbDsKICAgICAgbGF6eUJ1aWxkZXJMb2NhbCgpOwogICAgfQogIH0KCiAgU3RhdGVtZW50IGdldCBib2R5IHsKICAgIF9idWlsZExhenkoKTsKICAgIHJldHVybiBfYm9keTsKICB9CgogIHZvaWQgc2V0IGJvZHkoU3RhdGVtZW50IGJvZHkpIHsKICAgIF9idWlsZExhenkoKTsKICAgIF9ib2R5ID0gYm9keTsKICB9CgogIEZ1bmN0aW9uTm9kZSh0aGlzLl9ib2R5LAogICAgICB7TGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycywKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBwb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBuYW1lZFBhcmFtZXRlcnMsCiAgICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICB0aGlzLnJldHVyblR5cGU6IGNvbnN0IER5bmFtaWNUeXBlKCksCiAgICAgIHRoaXMuYXN5bmNNYXJrZXI6IEFzeW5jTWFya2VyLlN5bmMsCiAgICAgIHRoaXMuZGFydEFzeW5jTWFya2VyfSkKICAgICAgOiB0aGlzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzID0KICAgICAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnMgPz8gPFZhcmlhYmxlRGVjbGFyYXRpb24+W10sCiAgICAgICAgdGhpcy5yZXF1aXJlZFBhcmFtZXRlckNvdW50ID0KICAgICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA/PyBwb3NpdGlvbmFsUGFyYW1ldGVycz8ubGVuZ3RoID8/IDAsCiAgICAgICAgdGhpcy5uYW1lZFBhcmFtZXRlcnMgPSBuYW1lZFBhcmFtZXRlcnMgPz8gPFZhcmlhYmxlRGVjbGFyYXRpb24+W10sCiAgICAgICAgdGhpcy50eXBlUGFyYW1ldGVycyA9IHR5cGVQYXJhbWV0ZXJzID8/IDxUeXBlUGFyYW1ldGVyPltdIHsKICAgIGFzc2VydChyZXR1cm5UeXBlICE9IG51bGwpOwogICAgc2V0UGFyZW50cyh0aGlzLnR5cGVQYXJhbWV0ZXJzLCB0aGlzKTsKICAgIHNldFBhcmVudHModGhpcy5wb3NpdGlvbmFsUGFyYW1ldGVycywgdGhpcyk7CiAgICBzZXRQYXJlbnRzKHRoaXMubmFtZWRQYXJhbWV0ZXJzLCB0aGlzKTsKICAgIF9ib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgZGFydEFzeW5jTWFya2VyID8/PSBhc3luY01hcmtlcjsKICB9CgogIHN0YXRpYyBEYXJ0VHlwZSBfZ2V0VHlwZU9mVmFyaWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSA9PiBub2RlLnR5cGU7CgogIHN0YXRpYyBOYW1lZFR5cGUgX2dldE5hbWVkVHlwZU9mVmFyaWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IE5hbWVkVHlwZShub2RlLm5hbWUsIG5vZGUudHlwZSk7CiAgfQoKICBGdW5jdGlvblR5cGUgZ2V0IGZ1bmN0aW9uVHlwZSB7CiAgICBUcmVlTm9kZSBwYXJlbnQgPSB0aGlzLnBhcmVudDsKICAgIExpc3Q8TmFtZWRUeXBlPiBuYW1lZCA9CiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLm1hcChfZ2V0TmFtZWRUeXBlT2ZWYXJpYWJsZSkudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICBuYW1lZC5zb3J0KCk7CiAgICAvLyBXZSBuZWVkIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGxpc3Qgb2YgdHlwZSBwYXJhbWV0ZXJzLCBvdGhlcndpc2UKICAgIC8vIHRyYW5zZm9ybWF0aW9ucyBsaWtlIGVyYXN1cmUgZG9uJ3Qgd29yay4KICAgIHZhciB0eXBlUGFyYW1ldGVyc0NvcHkgPSBuZXcgTGlzdDxUeXBlUGFyYW1ldGVyPi5mcm9tKHBhcmVudCBpcyBDb25zdHJ1Y3RvcgogICAgICAgID8gcGFyZW50LmVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzCiAgICAgICAgOiB0eXBlUGFyYW1ldGVycyk7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZSgKICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVycy5tYXAoX2dldFR5cGVPZlZhcmlhYmxlKS50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKSwKICAgICAgICByZXR1cm5UeXBlLAogICAgICAgIG5hbWVkUGFyYW1ldGVyczogbmFtZWQsCiAgICAgICAgdHlwZVBhcmFtZXRlcnM6IHR5cGVQYXJhbWV0ZXJzQ29weSwKICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiByZXF1aXJlZFBhcmFtZXRlckNvdW50KTsKICB9CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KSA9PiB2LnZpc2l0RnVuY3Rpb25Ob2RlKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KHR5cGVQYXJhbWV0ZXJzLCB2KTsKICAgIHZpc2l0TGlzdChwb3NpdGlvbmFsUGFyYW1ldGVycywgdik7CiAgICB2aXNpdExpc3QobmFtZWRQYXJhbWV0ZXJzLCB2KTsKICAgIHJldHVyblR5cGU/LmFjY2VwdCh2KTsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHRyYW5zZm9ybUxpc3QodHlwZVBhcmFtZXRlcnMsIHYsIHRoaXMpOwogICAgdHJhbnNmb3JtTGlzdChwb3NpdGlvbmFsUGFyYW1ldGVycywgdiwgdGhpcyk7CiAgICB0cmFuc2Zvcm1MaXN0KG5hbWVkUGFyYW1ldGVycywgdiwgdGhpcyk7CiAgICByZXR1cm5UeXBlID0gdi52aXNpdERhcnRUeXBlKHJldHVyblR5cGUpOwogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgplbnVtIEFzeW5jTWFya2VyIHsKICAvLyBEbyBub3QgY2hhbmdlIHRoZSBvcmRlciBvZiB0aGVzZSwgdGhlIGZyb250ZW5kcyBkZXBlbmQgb24gaXQuCiAgU3luYywKICBTeW5jU3RhciwKICBBc3luYywKICBBc3luY1N0YXIsCgogIC8vIGBTeW5jWWllbGRpbmdgIGlzIGEgbWFya2VyIHRoYXQgdGVsbHMgRGFydCBWTSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgYW4KICAvLyBhcnRpZmljaWFsIGNsb3N1cmUgaW50cm9kdWNlZCBieSBhbiBhc3luYyB0cmFuc2Zvcm1lciB3aGljaCBkZXN1Z2FyZWQgYWxsCiAgLy8gYXN5bmMgc3ludGF4IGludG8gYSBjb21iaW5hdGlvbiBvZiBuYXRpdmUgeWllbGRzIGFuZCBoZWxwZXIgbWV0aG9kIGNhbGxzLgogIC8vCiAgLy8gTmF0aXZlIHlpZWxkcyAoZm9ybWF0dGVkIGFzIGBbeWllbGRdYCkgYXJlIHNlbWFudGljYWxseSBjbG9zZSB0bwogIC8vIGB5aWVsZCB4YCBzdGF0ZW1lbnQ6IHRoZXkgZGVub3RlIGEgeWllbGQvcmVzdW1lIHBvaW50IHdpdGhpbiBhIGZ1bmN0aW9uCiAgLy8gYnV0IGFyZSBjb21wbGV0ZWx5IGRlY291cGxlZCBmcm9tIHRoZSBub3Rpb24gb2YgaXRlcmF0b3JzLiBXaGVuCiAgLy8gZXhlY3V0aW9uIG9mIHRoZSBjbG9zdXJlIHJlYWNoZXMgYFt5aWVsZF0geGAgaXQgc3RvcHMgYW5kIHJldHVybiB0aGUKICAvLyB2YWx1ZSBvZiBgeGAgdG8gdGhlIGNhbGxlci4gSWYgY2xvc3VyZSBpcyBjYWxsZWQgYWdhaW4gaXQgY29udGludWVzCiAgLy8gdG8gdGhlIG5leHQgc3RhdGVtZW50IGFmdGVyIHRoaXMgeWllbGQgYXMgaWYgaXQgd2FzIHN1c3BlbmRlZCBhbmQgcmVzdW1lZC4KICAvLwogIC8vIENvbnNpZGVyIHRoaXMgZXhhbXBsZToKICAvLwogIC8vICAgZygpIHsKICAvLyAgICAgdmFyIDphd2FpdF9qdW1wX3ZhciA9IDA7CiAgLy8gICAgIHZhciA6YXdhaXRfY3R4X3ZhcjsKICAvLwogIC8vICAgICBmKHgpIHlpZWxkaW5nIHsKICAvLyAgICAgICBbeWllbGRdICcke3h9OjAnOwogIC8vICAgICAgIFt5aWVsZF0gJyR7eH06MSc7CiAgLy8gICAgICAgW3lpZWxkXSAnJHt4fToyJzsKICAvLyAgICAgfQogIC8vCiAgLy8gICAgIHJldHVybiBmOwogIC8vICAgfQogIC8vCiAgLy8gICBwcmludChmKCdhJykpOyAgLyogcHJpbnRzICdhOjAnLCA6YXdhaXRfanVtcF92YXIgPSAxICAqLwogIC8vICAgcHJpbnQoZignYicpKTsgIC8qIHByaW50cyAnYjoxJywgOmF3YWl0X2p1bXBfdmFyID0gMiAgKi8KICAvLyAgIHByaW50KGYoJ2MnKSk7ICAvKiBwcmludHMgJ2M6MicsIDphd2FpdF9qdW1wX3ZhciA9IDMgICovCiAgLy8KICAvLyBOb3RlOiBjdXJyZW50bHkgRGFydCBWTSBpbXBsaWNpdGx5IHJlbGllcyBvbiBhc3luYyB0cmFuc2Zvcm1lciB0bwogIC8vIGluamVjdCBjZXJ0YWluIGFydGlmaWNpYWwgdmFyaWFibGVzIGludG8gZyAobGlrZSBgOmF3YWl0X2p1bXBfdmFyYCkuCiAgLy8gQXMgc3VjaCBTeW5jWWllbGRpbmcgYW5kIG5hdGl2ZSB5aWVsZCBhcmUgbm90IGludGVuZGVkIHRvIGJlIHVzZWQgb24gdGhlaXIKICAvLyBvd24sIGJ1dCBhcmUgcmF0aGVyIGFuIGltcGxlbWVudGF0aW9uIGFydGlmYWN0IG9mIHRoZSBhc3luYyB0cmFuc2Zvcm1lcgogIC8vIGl0c2VsZi4KICBTeW5jWWllbGRpbmcsCn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhQUkVTU0lPTlMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpAY29xCmFic3RyYWN0IGNsYXNzIEV4cHJlc3Npb24gZXh0ZW5kcyBUcmVlTm9kZSB7CiAgLy8vIFJldHVybnMgdGhlIHN0YXRpYyB0eXBlIG9mIHRoZSBleHByZXNzaW9uLgogIC8vLwogIC8vLyBTaG91bGRuJ3QgYmUgdXNlZCBvbiBjb2RlIGNvbXBpbGVkIGluIGxlZ2FjeSBtb2RlLCBhcyB0aGlzIG1ldGhvZCBhc3N1bWVzCiAgLy8vIHRoZSBJUiBpcyBzdHJvbmdseSB0eXBlZC4KICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcyk7CgogIC8vLyBSZXR1cm5zIHRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbiBhcyBhbiBpbnN0YW50aWF0aW9uIG9mCiAgLy8vIFtzdXBlcmNsYXNzXS4KICAvLy8KICAvLy8gU2hvdWxkbid0IGJlIHVzZWQgb24gY29kZSBjb21waWxlZCBpbiBsZWdhY3kgbW9kZSwgYXMgdGhpcyBtZXRob2QgYXNzdW1lcwogIC8vLyB0aGUgSVIgaXMgc3Ryb25nbHkgdHlwZWQuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGZ1cnRoZXJtb3JlIGFzc3VtZXMgdGhhdCB0aGUgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbiBhY3R1YWxseQogIC8vLyBpcyBhIHN1YnR5cGUgb2YgKHNvbWUgaW5zdGFudGlhdGlvbiBvZikgdGhlIGdpdmVuIFtzdXBlcmNsYXNzXS4KICAvLy8gSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIGVpdGhlciBhbiBleGNlcHRpb24gaXMgdGhyb3duIG9yIHRoZSByYXcgdHlwZSBvZgogIC8vLyBbc3VwZXJjbGFzc10gaXMgcmV0dXJuZWQuCiAgSW50ZXJmYWNlVHlwZSBnZXRTdGF0aWNUeXBlQXNJbnN0YW5jZU9mKAogICAgICBDbGFzcyBzdXBlcmNsYXNzLCBUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIC8vIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhlIHByb2dyYW0gaXMgY29ycmVjdGx5IHR5cGVkLCBzbyBpZiB0aGUgc3VwZXJjbGFzcwogICAgLy8gaXMgbm90IGdlbmVyaWMsIHdlIGNhbiBqdXN0IHJldHVybiBpdHMgcmF3IHR5cGUgd2l0aG91dCBjb21wdXRpbmcgdGhlCiAgICAvLyB0eXBlIG9mIHRoaXMgZXhwcmVzc2lvbi4gIEl0IGFsc28gZW5zdXJlcyB0aGF0IGFsbCB0eXBlcyBhcmUgY29uc2lkZXJlZAogICAgLy8gc3VidHlwZXMgb2YgT2JqZWN0IChub3QganVzdCBpbnRlcmZhY2UgdHlwZXMpLCBhbmQgZnVuY3Rpb24gdHlwZXMgYXJlCiAgICAvLyBjb25zaWRlcmVkIHN1YnR5cGVzIG9mIEZ1bmN0aW9uLgogICAgaWYgKHN1cGVyY2xhc3MudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICByZXR1cm4gc3VwZXJjbGFzcy5yYXdUeXBlOwogICAgfQogICAgdmFyIHR5cGUgPSBnZXRTdGF0aWNUeXBlKHR5cGVzKTsKICAgIHdoaWxlICh0eXBlIGlzIFR5cGVQYXJhbWV0ZXJUeXBlKSB7CiAgICAgIHR5cGUgPSAodHlwZSBhcyBUeXBlUGFyYW1ldGVyVHlwZSkucGFyYW1ldGVyLmJvdW5kOwogICAgfQogICAgaWYgKHR5cGUgPT0gdHlwZXMubnVsbFR5cGUpIHsKICAgICAgcmV0dXJuIHN1cGVyY2xhc3MuYm90dG9tVHlwZTsKICAgIH0KICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgdmFyIHVwY2FzdFR5cGUgPSB0eXBlcy5nZXRUeXBlQXNJbnN0YW5jZU9mKHR5cGUsIHN1cGVyY2xhc3MpOwogICAgICBpZiAodXBjYXN0VHlwZSAhPSBudWxsKSByZXR1cm4gdXBjYXN0VHlwZTsKICAgIH0gZWxzZSBpZiAodHlwZSBpcyBCb3R0b21UeXBlKSB7CiAgICAgIHJldHVybiBzdXBlcmNsYXNzLmJvdHRvbVR5cGU7CiAgICB9CiAgICB0eXBlcy50eXBlRXJyb3IodGhpcywgJyR0eXBlIGlzIG5vdCBhIHN1YnR5cGUgb2YgJHN1cGVyY2xhc3MnKTsKICAgIHJldHVybiBzdXBlcmNsYXNzLnJhd1R5cGU7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3Igdik7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKTsKfQoKLy8vIEFuIGV4cHJlc3Npb24gY29udGFpbmluZyBjb21waWxlLXRpbWUgZXJyb3JzLgovLy8KLy8vIFNob3VsZCB0aHJvdyBhIHJ1bnRpbWUgZXJyb3Igd2hlbiBldmFsdWF0ZWQuCmNsYXNzIEludmFsaWRFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgU3RyaW5nIG1lc3NhZ2U7CgogIEludmFsaWRFeHByZXNzaW9uKHRoaXMubWVzc2FnZSk7CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiBjb25zdCBCb3R0b21UeXBlKCk7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0SW52YWxpZEV4cHJlc3Npb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0SW52YWxpZEV4cHJlc3Npb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikge30KfQoKLy8vIFJlYWQgYSBsb2NhbCB2YXJpYWJsZSwgYSBsb2NhbCBmdW5jdGlvbiwgb3IgYSBmdW5jdGlvbiBwYXJhbWV0ZXIuCkBjb3EKY2xhc3MgVmFyaWFibGVHZXQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlOwogIEBub2NvcQogIERhcnRUeXBlIHByb21vdGVkVHlwZTsgLy8gTnVsbCBpZiBub3QgcHJvbW90ZWQuCgogIFZhcmlhYmxlR2V0KHRoaXMudmFyaWFibGUsIFt0aGlzLnByb21vdGVkVHlwZV0pOwoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgcmV0dXJuIHByb21vdGVkVHlwZSA/PyB2YXJpYWJsZS50eXBlOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRWYXJpYWJsZUdldCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRWYXJpYWJsZUdldCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgcHJvbW90ZWRUeXBlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAocHJvbW90ZWRUeXBlICE9IG51bGwpIHsKICAgICAgcHJvbW90ZWRUeXBlID0gdi52aXNpdERhcnRUeXBlKHByb21vdGVkVHlwZSk7CiAgICB9CiAgfQp9CgovLy8gQXNzaWduIGEgbG9jYWwgdmFyaWFibGUgb3IgZnVuY3Rpb24gcGFyYW1ldGVyLgovLy8KLy8vIEV2YWx1YXRlcyB0byB0aGUgdmFsdWUgb2YgW3ZhbHVlXS4KY2xhc3MgVmFyaWFibGVTZXQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlOwogIEV4cHJlc3Npb24gdmFsdWU7CgogIFZhcmlhYmxlU2V0KHRoaXMudmFyaWFibGUsIHRoaXMudmFsdWUpIHsKICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHZhbHVlLmdldFN0YXRpY1R5cGUodHlwZXMpOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFZhcmlhYmxlU2V0KHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFZhcmlhYmxlU2V0KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2YWx1ZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgdmFsdWUgPSB2YWx1ZS5hY2NlcHQodik7CiAgICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEV4cHJlc3Npb24gb2YgZm9ybSBgeC5maWVsZGAuCi8vLwovLy8gVGhpcyBtYXkgaW52b2tlIGEgZ2V0dGVyLCByZWFkIGEgZmllbGQsIG9yIHRlYXIgb2ZmIGEgbWV0aG9kLgpAY29xCmNsYXNzIFByb3BlcnR5R2V0IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRXhwcmVzc2lvbiByZWNlaXZlcjsKICBAY29xCiAgTmFtZSBuYW1lOwoKICBAbm9jb3EKICBSZWZlcmVuY2UgaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlOwoKICBQcm9wZXJ0eUdldChFeHByZXNzaW9uIHJlY2VpdmVyLCBOYW1lIG5hbWUsIFtNZW1iZXIgaW50ZXJmYWNlVGFyZ2V0XSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKHJlY2VpdmVyLCBuYW1lLCBnZXRNZW1iZXJSZWZlcmVuY2UoaW50ZXJmYWNlVGFyZ2V0KSk7CgogIFByb3BlcnR5R2V0LmJ5UmVmZXJlbmNlKAogICAgICB0aGlzLnJlY2VpdmVyLCB0aGlzLm5hbWUsIHRoaXMuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKSB7CiAgICByZWNlaXZlcj8ucGFyZW50ID0gdGhpczsKICB9CgogIE1lbWJlciBnZXQgaW50ZXJmYWNlVGFyZ2V0ID0+IGludGVyZmFjZVRhcmdldFJlZmVyZW5jZT8uYXNNZW1iZXI7CgogIHZvaWQgc2V0IGludGVyZmFjZVRhcmdldChNZW1iZXIgbWVtYmVyKSB7CiAgICBpbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UobWVtYmVyKTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICB2YXIgaW50ZXJmYWNlVGFyZ2V0ID0gdGhpcy5pbnRlcmZhY2VUYXJnZXQ7CiAgICBpZiAoaW50ZXJmYWNlVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgQ2xhc3Mgc3VwZXJjbGFzcyA9IGludGVyZmFjZVRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgICAgdmFyIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLmdldFN0YXRpY1R5cGVBc0luc3RhbmNlT2Yoc3VwZXJjbGFzcywgdHlwZXMpOwogICAgICByZXR1cm4gU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKHJlY2VpdmVyVHlwZSkKICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZShpbnRlcmZhY2VUYXJnZXQuZ2V0dGVyVHlwZSk7CiAgICB9CiAgICAvLyBUcmVhdCB0aGUgcHJvcGVydGllcyBvZiBPYmplY3Qgc3BlY2lhbGx5LgogICAgU3RyaW5nIG5hbWVTdHJpbmcgPSBuYW1lLm5hbWU7CiAgICBpZiAobmFtZVN0cmluZyA9PSAnaGFzaENvZGUnKSB7CiAgICAgIHJldHVybiB0eXBlcy5pbnRUeXBlOwogICAgfSBlbHNlIGlmIChuYW1lU3RyaW5nID09ICdydW50aW1lVHlwZScpIHsKICAgICAgcmV0dXJuIHR5cGVzLnR5cGVUeXBlOwogICAgfQogICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFByb3BlcnR5R2V0KHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFByb3BlcnR5R2V0KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICByZWNlaXZlcj8uYWNjZXB0KHYpOwogICAgbmFtZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHJlY2VpdmVyICE9IG51bGwpIHsKICAgICAgcmVjZWl2ZXIgPSByZWNlaXZlci5hY2NlcHQodik7CiAgICAgIHJlY2VpdmVyPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEV4cHJlc3Npb24gb2YgZm9ybSBgeC5maWVsZCA9IHZhbHVlYC4KLy8vCi8vLyBUaGlzIG1heSBpbnZva2UgYSBzZXR0ZXIgb3IgYXNzaWduIGEgZmllbGQuCi8vLwovLy8gRXZhbHVhdGVzIHRvIHRoZSB2YWx1ZSBvZiBbdmFsdWVdLgpjbGFzcyBQcm9wZXJ0eVNldCBleHRlbmRzIEV4cHJlc3Npb24gewogIEV4cHJlc3Npb24gcmVjZWl2ZXI7CiAgTmFtZSBuYW1lOwogIEV4cHJlc3Npb24gdmFsdWU7CgogIFJlZmVyZW5jZSBpbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2U7CgogIFByb3BlcnR5U2V0KEV4cHJlc3Npb24gcmVjZWl2ZXIsIE5hbWUgbmFtZSwgRXhwcmVzc2lvbiB2YWx1ZSwKICAgICAgW01lbWJlciBpbnRlcmZhY2VUYXJnZXRdKQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlY2VpdmVyLCBuYW1lLCB2YWx1ZSwgZ2V0TWVtYmVyUmVmZXJlbmNlKGludGVyZmFjZVRhcmdldCkpOwoKICBQcm9wZXJ0eVNldC5ieVJlZmVyZW5jZSgKICAgICAgdGhpcy5yZWNlaXZlciwgdGhpcy5uYW1lLCB0aGlzLnZhbHVlLCB0aGlzLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSkgewogICAgcmVjZWl2ZXI/LnBhcmVudCA9IHRoaXM7CiAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICB9CgogIE1lbWJlciBnZXQgaW50ZXJmYWNlVGFyZ2V0ID0+IGludGVyZmFjZVRhcmdldFJlZmVyZW5jZT8uYXNNZW1iZXI7CgogIHZvaWQgc2V0IGludGVyZmFjZVRhcmdldChNZW1iZXIgbWVtYmVyKSB7CiAgICBpbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UobWVtYmVyKTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB2YWx1ZS5nZXRTdGF0aWNUeXBlKHR5cGVzKTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRQcm9wZXJ0eVNldCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRQcm9wZXJ0eVNldCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgcmVjZWl2ZXI/LmFjY2VwdCh2KTsKICAgIG5hbWU/LmFjY2VwdCh2KTsKICAgIHZhbHVlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAocmVjZWl2ZXIgIT0gbnVsbCkgewogICAgICByZWNlaXZlciA9IHJlY2VpdmVyLmFjY2VwdCh2KTsKICAgICAgcmVjZWl2ZXI/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB2YWx1ZSA9IHZhbHVlLmFjY2VwdCh2KTsKICAgICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gRGlyZWN0bHkgcmVhZCBhIGZpZWxkLCBjYWxsIGEgZ2V0dGVyLCBvciB0ZWFyIG9mZiBhIG1ldGhvZC4KY2xhc3MgRGlyZWN0UHJvcGVydHlHZXQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBFeHByZXNzaW9uIHJlY2VpdmVyOwogIFJlZmVyZW5jZSB0YXJnZXRSZWZlcmVuY2U7CgogIERpcmVjdFByb3BlcnR5R2V0KEV4cHJlc3Npb24gcmVjZWl2ZXIsIE1lbWJlciB0YXJnZXQpCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShyZWNlaXZlciwgZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCkpOwoKICBEaXJlY3RQcm9wZXJ0eUdldC5ieVJlZmVyZW5jZSh0aGlzLnJlY2VpdmVyLCB0aGlzLnRhcmdldFJlZmVyZW5jZSkgewogICAgcmVjZWl2ZXI/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBNZW1iZXIgZ2V0IHRhcmdldCA9PiB0YXJnZXRSZWZlcmVuY2U/LmFzTWVtYmVyOwoKICB2b2lkIHNldCB0YXJnZXQoTWVtYmVyIHRhcmdldCkgewogICAgdGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCk7CiAgfQoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgcmVjZWl2ZXI/LmFjY2VwdCh2KTsKICAgIHRhcmdldD8uYWNjZXB0UmVmZXJlbmNlKHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHJlY2VpdmVyICE9IG51bGwpIHsKICAgICAgcmVjZWl2ZXIgPSByZWNlaXZlci5hY2NlcHQodik7CiAgICAgIHJlY2VpdmVyPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXREaXJlY3RQcm9wZXJ0eUdldCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXREaXJlY3RQcm9wZXJ0eUdldCh0aGlzLCBhcmcpOwoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgQ2xhc3Mgc3VwZXJjbGFzcyA9IHRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgIHZhciByZWNlaXZlclR5cGUgPSByZWNlaXZlci5nZXRTdGF0aWNUeXBlQXNJbnN0YW5jZU9mKHN1cGVyY2xhc3MsIHR5cGVzKTsKICAgIHJldHVybiBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUocmVjZWl2ZXJUeXBlKQogICAgICAgIC5zdWJzdGl0dXRlVHlwZSh0YXJnZXQuZ2V0dGVyVHlwZSk7CiAgfQp9CgovLy8gRGlyZWN0bHkgYXNzaWduIGEgZmllbGQsIG9yIGNhbGwgYSBzZXR0ZXIuCi8vLwovLy8gRXZhbHVhdGVzIHRvIHRoZSB2YWx1ZSBvZiBbdmFsdWVdLgpjbGFzcyBEaXJlY3RQcm9wZXJ0eVNldCBleHRlbmRzIEV4cHJlc3Npb24gewogIEV4cHJlc3Npb24gcmVjZWl2ZXI7CiAgUmVmZXJlbmNlIHRhcmdldFJlZmVyZW5jZTsKICBFeHByZXNzaW9uIHZhbHVlOwoKICBEaXJlY3RQcm9wZXJ0eVNldChFeHByZXNzaW9uIHJlY2VpdmVyLCBNZW1iZXIgdGFyZ2V0LCBFeHByZXNzaW9uIHZhbHVlKQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UocmVjZWl2ZXIsIGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpLCB2YWx1ZSk7CgogIERpcmVjdFByb3BlcnR5U2V0LmJ5UmVmZXJlbmNlKAogICAgICB0aGlzLnJlY2VpdmVyLCB0aGlzLnRhcmdldFJlZmVyZW5jZSwgdGhpcy52YWx1ZSkgewogICAgcmVjZWl2ZXI/LnBhcmVudCA9IHRoaXM7CiAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICB9CgogIE1lbWJlciBnZXQgdGFyZ2V0ID0+IHRhcmdldFJlZmVyZW5jZT8uYXNNZW1iZXI7CgogIHZvaWQgc2V0IHRhcmdldChNZW1iZXIgdGFyZ2V0KSB7CiAgICB0YXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KTsKICB9CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICByZWNlaXZlcj8uYWNjZXB0KHYpOwogICAgdGFyZ2V0Py5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICB2YWx1ZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHJlY2VpdmVyICE9IG51bGwpIHsKICAgICAgcmVjZWl2ZXIgPSByZWNlaXZlci5hY2NlcHQodik7CiAgICAgIHJlY2VpdmVyPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgdmFsdWUgPSB2YWx1ZS5hY2NlcHQodik7CiAgICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXREaXJlY3RQcm9wZXJ0eVNldCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXREaXJlY3RQcm9wZXJ0eVNldCh0aGlzLCBhcmcpOwoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdmFsdWUuZ2V0U3RhdGljVHlwZSh0eXBlcyk7Cn0KCi8vLyBEaXJlY3RseSBjYWxsIGFuIGluc3RhbmNlIG1ldGhvZCwgYnlwYXNzaW5nIG9yZGluYXJ5IGRpc3BhdGNoLgpjbGFzcyBEaXJlY3RNZXRob2RJbnZvY2F0aW9uIGV4dGVuZHMgSW52b2NhdGlvbkV4cHJlc3Npb24gewogIEV4cHJlc3Npb24gcmVjZWl2ZXI7CiAgUmVmZXJlbmNlIHRhcmdldFJlZmVyZW5jZTsKICBBcmd1bWVudHMgYXJndW1lbnRzOwoKICBEaXJlY3RNZXRob2RJbnZvY2F0aW9uKAogICAgICBFeHByZXNzaW9uIHJlY2VpdmVyLCBQcm9jZWR1cmUgdGFyZ2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UocmVjZWl2ZXIsIGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpLCBhcmd1bWVudHMpOwoKICBEaXJlY3RNZXRob2RJbnZvY2F0aW9uLmJ5UmVmZXJlbmNlKAogICAgICB0aGlzLnJlY2VpdmVyLCB0aGlzLnRhcmdldFJlZmVyZW5jZSwgdGhpcy5hcmd1bWVudHMpIHsKICAgIHJlY2VpdmVyPy5wYXJlbnQgPSB0aGlzOwogICAgYXJndW1lbnRzPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgUHJvY2VkdXJlIGdldCB0YXJnZXQgPT4gdGFyZ2V0UmVmZXJlbmNlPy5hc1Byb2NlZHVyZTsKCiAgdm9pZCBzZXQgdGFyZ2V0KFByb2NlZHVyZSB0YXJnZXQpIHsKICAgIHRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpOwogIH0KCiAgTmFtZSBnZXQgbmFtZSA9PiB0YXJnZXQ/Lm5hbWU7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICByZWNlaXZlcj8uYWNjZXB0KHYpOwogICAgdGFyZ2V0Py5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICBhcmd1bWVudHM/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChyZWNlaXZlciAhPSBudWxsKSB7CiAgICAgIHJlY2VpdmVyID0gcmVjZWl2ZXIuYWNjZXB0KHYpOwogICAgICByZWNlaXZlcj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhcmd1bWVudHMgPSBhcmd1bWVudHMuYWNjZXB0KHYpOwogICAgICBhcmd1bWVudHM/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdERpcmVjdE1ldGhvZEludm9jYXRpb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PgogICAgICB2LnZpc2l0RGlyZWN0TWV0aG9kSW52b2NhdGlvbih0aGlzLCBhcmcpOwoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgaWYgKHR5cGVzLmlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvcih0YXJnZXQpKSB7CiAgICAgIHJldHVybiB0eXBlcy5nZXRUeXBlT2ZPdmVybG9hZGVkQXJpdGhtZXRpYyhyZWNlaXZlci5nZXRTdGF0aWNUeXBlKHR5cGVzKSwKICAgICAgICAgIGFyZ3VtZW50cy5wb3NpdGlvbmFsWzBdLmdldFN0YXRpY1R5cGUodHlwZXMpKTsKICAgIH0KICAgIENsYXNzIHN1cGVyY2xhc3MgPSB0YXJnZXQuZW5jbG9zaW5nQ2xhc3M7CiAgICB2YXIgcmVjZWl2ZXJUeXBlID0gcmVjZWl2ZXIuZ2V0U3RhdGljVHlwZUFzSW5zdGFuY2VPZihzdXBlcmNsYXNzLCB0eXBlcyk7CiAgICB2YXIgcmV0dXJuVHlwZSA9IFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZShyZWNlaXZlclR5cGUpCiAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHRhcmdldC5mdW5jdGlvbi5yZXR1cm5UeXBlKTsKICAgIHJldHVybiBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKAogICAgICAgICAgICB0YXJnZXQuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMsIGFyZ3VtZW50cy50eXBlcykKICAgICAgICAuc3Vic3RpdHV0ZVR5cGUocmV0dXJuVHlwZSk7CiAgfQp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGBzdXBlci5maWVsZGAuCi8vLwovLy8gVGhpcyBtYXkgaW52b2tlIGEgZ2V0dGVyLCByZWFkIGEgZmllbGQsIG9yIHRlYXIgb2ZmIGEgbWV0aG9kLgpjbGFzcyBTdXBlclByb3BlcnR5R2V0IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgTmFtZSBuYW1lOwoKICBSZWZlcmVuY2UgaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlOwoKICBTdXBlclByb3BlcnR5R2V0KE5hbWUgbmFtZSwgW01lbWJlciBpbnRlcmZhY2VUYXJnZXRdKQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UobmFtZSwgZ2V0TWVtYmVyUmVmZXJlbmNlKGludGVyZmFjZVRhcmdldCkpOwoKICBTdXBlclByb3BlcnR5R2V0LmJ5UmVmZXJlbmNlKHRoaXMubmFtZSwgdGhpcy5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwoKICBNZW1iZXIgZ2V0IGludGVyZmFjZVRhcmdldCA9PiBpbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2U/LmFzTWVtYmVyOwoKICB2b2lkIHNldCBpbnRlcmZhY2VUYXJnZXQoTWVtYmVyIG1lbWJlcikgewogICAgaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKG1lbWJlcik7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgQ2xhc3MgZGVjbGFyaW5nQ2xhc3MgPSBpbnRlcmZhY2VUYXJnZXQuZW5jbG9zaW5nQ2xhc3M7CiAgICBpZiAoZGVjbGFyaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICByZXR1cm4gaW50ZXJmYWNlVGFyZ2V0LmdldHRlclR5cGU7CiAgICB9CiAgICB2YXIgcmVjZWl2ZXIgPSB0eXBlcy5nZXRUeXBlQXNJbnN0YW5jZU9mKHR5cGVzLnRoaXNUeXBlLCBkZWNsYXJpbmdDbGFzcyk7CiAgICByZXR1cm4gU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKHJlY2VpdmVyKQogICAgICAgIC5zdWJzdGl0dXRlVHlwZShpbnRlcmZhY2VUYXJnZXQuZ2V0dGVyVHlwZSk7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFN1cGVyUHJvcGVydHlHZXQodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0U3VwZXJQcm9wZXJ0eUdldCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgbmFtZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikge30KfQoKLy8vIEV4cHJlc3Npb24gb2YgZm9ybSBgc3VwZXIuZmllbGQgPSB2YWx1ZWAuCi8vLwovLy8gVGhpcyBtYXkgaW52b2tlIGEgc2V0dGVyIG9yIGFzc2lnbiBhIGZpZWxkLgovLy8KLy8vIEV2YWx1YXRlcyB0byB0aGUgdmFsdWUgb2YgW3ZhbHVlXS4KY2xhc3MgU3VwZXJQcm9wZXJ0eVNldCBleHRlbmRzIEV4cHJlc3Npb24gewogIE5hbWUgbmFtZTsKICBFeHByZXNzaW9uIHZhbHVlOwoKICBSZWZlcmVuY2UgaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlOwoKICBTdXBlclByb3BlcnR5U2V0KE5hbWUgbmFtZSwgRXhwcmVzc2lvbiB2YWx1ZSwgTWVtYmVyIGludGVyZmFjZVRhcmdldCkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKG5hbWUsIHZhbHVlLCBnZXRNZW1iZXJSZWZlcmVuY2UoaW50ZXJmYWNlVGFyZ2V0KSk7CgogIFN1cGVyUHJvcGVydHlTZXQuYnlSZWZlcmVuY2UoCiAgICAgIHRoaXMubmFtZSwgdGhpcy52YWx1ZSwgdGhpcy5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpIHsKICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgTWVtYmVyIGdldCBpbnRlcmZhY2VUYXJnZXQgPT4gaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlPy5hc01lbWJlcjsKCiAgdm9pZCBzZXQgaW50ZXJmYWNlVGFyZ2V0KE1lbWJlciBtZW1iZXIpIHsKICAgIGludGVyZmFjZVRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZShtZW1iZXIpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHZhbHVlLmdldFN0YXRpY1R5cGUodHlwZXMpOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFN1cGVyUHJvcGVydHlTZXQodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0U3VwZXJQcm9wZXJ0eVNldCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgbmFtZT8uYWNjZXB0KHYpOwogICAgdmFsdWU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHZhbHVlID0gdmFsdWUuYWNjZXB0KHYpOwogICAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBSZWFkIGEgc3RhdGljIGZpZWxkLCBjYWxsIGEgc3RhdGljIGdldHRlciwgb3IgdGVhciBvZmYgYSBzdGF0aWMgbWV0aG9kLgpjbGFzcyBTdGF0aWNHZXQgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICAvLy8gQSBzdGF0aWMgZmllbGQsIGdldHRlciwgb3IgbWV0aG9kIChmb3IgdGVhci1vZmYpLgogIFJlZmVyZW5jZSB0YXJnZXRSZWZlcmVuY2U7CgogIFN0YXRpY0dldChNZW1iZXIgdGFyZ2V0KSA6IHRoaXMuYnlSZWZlcmVuY2UoZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCkpOwoKICBTdGF0aWNHZXQuYnlSZWZlcmVuY2UodGhpcy50YXJnZXRSZWZlcmVuY2UpOwoKICBNZW1iZXIgZ2V0IHRhcmdldCA9PiB0YXJnZXRSZWZlcmVuY2U/LmFzTWVtYmVyOwoKICB2b2lkIHNldCB0YXJnZXQoTWVtYmVyIHRhcmdldCkgewogICAgdGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCk7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdGFyZ2V0LmdldHRlclR5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0U3RhdGljR2V0KHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFN0YXRpY0dldCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdGFyZ2V0Py5hY2NlcHRSZWZlcmVuY2Uodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7fQp9CgovLy8gQXNzaWduIGEgc3RhdGljIGZpZWxkIG9yIGNhbGwgYSBzdGF0aWMgc2V0dGVyLgovLy8KLy8vIEV2YWx1YXRlcyB0byB0aGUgdmFsdWUgb2YgW3ZhbHVlXS4KY2xhc3MgU3RhdGljU2V0IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgLy8vIEEgbXV0YWJsZSBzdGF0aWMgZmllbGQgb3IgYSBzdGF0aWMgc2V0dGVyLgogIFJlZmVyZW5jZSB0YXJnZXRSZWZlcmVuY2U7CiAgRXhwcmVzc2lvbiB2YWx1ZTsKCiAgU3RhdGljU2V0KE1lbWJlciB0YXJnZXQsIEV4cHJlc3Npb24gdmFsdWUpCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KSwgdmFsdWUpOwoKICBTdGF0aWNTZXQuYnlSZWZlcmVuY2UodGhpcy50YXJnZXRSZWZlcmVuY2UsIHRoaXMudmFsdWUpIHsKICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgTWVtYmVyIGdldCB0YXJnZXQgPT4gdGFyZ2V0UmVmZXJlbmNlPy5hc01lbWJlcjsKCiAgdm9pZCBzZXQgdGFyZ2V0KE1lbWJlciB0YXJnZXQpIHsKICAgIHRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHZhbHVlLmdldFN0YXRpY1R5cGUodHlwZXMpOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFN0YXRpY1NldCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRTdGF0aWNTZXQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHRhcmdldD8uYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgdmFsdWU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHZhbHVlID0gdmFsdWUuYWNjZXB0KHYpOwogICAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBUaGUgYXJndW1lbnRzIHRvIGEgZnVuY3Rpb24gY2FsbCwgZGl2aWRlZCBpbnRvIHR5cGUgYXJndW1lbnRzLAovLy8gcG9zaXRpb25hbCBhcmd1bWVudHMsIGFuZCBuYW1lZCBhcmd1bWVudHMuCkBjb3EKY2xhc3MgQXJndW1lbnRzIGV4dGVuZHMgVHJlZU5vZGUgewogIEBub2NvcQogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVzOwogIEBjb3FzaW5nbGUKICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IHBvc2l0aW9uYWw7CiAgTGlzdDxOYW1lZEV4cHJlc3Npb24+IG5hbWVkOwoKICBBcmd1bWVudHModGhpcy5wb3NpdGlvbmFsLAogICAgICB7TGlzdDxEYXJ0VHlwZT4gdHlwZXMsIExpc3Q8TmFtZWRFeHByZXNzaW9uPiBuYW1lZH0pCiAgICAgIDogdGhpcy50eXBlcyA9IHR5cGVzID8/IDxEYXJ0VHlwZT5bXSwKICAgICAgICB0aGlzLm5hbWVkID0gbmFtZWQgPz8gPE5hbWVkRXhwcmVzc2lvbj5bXSB7CiAgICBzZXRQYXJlbnRzKHRoaXMucG9zaXRpb25hbCwgdGhpcyk7CiAgICBzZXRQYXJlbnRzKHRoaXMubmFtZWQsIHRoaXMpOwogIH0KCiAgQXJndW1lbnRzLmVtcHR5KCkKICAgICAgOiB0eXBlcyA9IDxEYXJ0VHlwZT5bXSwKICAgICAgICBwb3NpdGlvbmFsID0gPEV4cHJlc3Npb24+W10sCiAgICAgICAgbmFtZWQgPSA8TmFtZWRFeHByZXNzaW9uPltdOwoKICBmYWN0b3J5IEFyZ3VtZW50cy5mb3J3YXJkZWQoRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uKSB7CiAgICByZXR1cm4gbmV3IEFyZ3VtZW50cygKICAgICAgICBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5tYXAoKHApID0+IG5ldyBWYXJpYWJsZUdldChwKSkudG9MaXN0KCksCiAgICAgICAgbmFtZWQ6IGZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycwogICAgICAgICAgICAubWFwKChwKSA9PiBuZXcgTmFtZWRFeHByZXNzaW9uKHAubmFtZSwgbmV3IFZhcmlhYmxlR2V0KHApKSkKICAgICAgICAgICAgLnRvTGlzdCgpLAogICAgICAgIHR5cGVzOiBmdW5jdGlvbi50eXBlUGFyYW1ldGVycwogICAgICAgICAgICAubWFwKChwKSA9PiBuZXcgVHlwZVBhcmFtZXRlclR5cGUocCkpCiAgICAgICAgICAgIC50b0xpc3QoKSk7CiAgfQoKICBhY2NlcHQoVHJlZVZpc2l0b3IgdikgPT4gdi52aXNpdEFyZ3VtZW50cyh0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdCh0eXBlcywgdik7CiAgICB2aXNpdExpc3QocG9zaXRpb25hbCwgdik7CiAgICB2aXNpdExpc3QobmFtZWQsIHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHJhbnNmb3JtVHlwZUxpc3QodHlwZXMsIHYpOwogICAgdHJhbnNmb3JtTGlzdChwb3NpdGlvbmFsLCB2LCB0aGlzKTsKICAgIHRyYW5zZm9ybUxpc3QobmFtZWQsIHYsIHRoaXMpOwogIH0KfQoKLy8vIEEgbmFtZWQgYXJndW1lbnQsIGBuYW1lOiB2YWx1ZWAuCmNsYXNzIE5hbWVkRXhwcmVzc2lvbiBleHRlbmRzIFRyZWVOb2RlIHsKICBTdHJpbmcgbmFtZTsKICBFeHByZXNzaW9uIHZhbHVlOwoKICBOYW1lZEV4cHJlc3Npb24odGhpcy5uYW1lLCB0aGlzLnZhbHVlKSB7CiAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICB9CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KSA9PiB2LnZpc2l0TmFtZWRFeHByZXNzaW9uKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmFsdWU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHZhbHVlID0gdmFsdWUuYWNjZXB0KHYpOwogICAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBDb21tb24gc3VwZXIgY2xhc3MgZm9yIFtEaXJlY3RNZXRob2RJbnZvY2F0aW9uXSwgW01ldGhvZEludm9jYXRpb25dLAovLy8gW1N1cGVyTWV0aG9kSW52b2NhdGlvbl0sIFtTdGF0aWNJbnZvY2F0aW9uXSwgYW5kIFtDb25zdHJ1Y3Rvckludm9jYXRpb25dLgpAY29xCmFic3RyYWN0IGNsYXNzIEludm9jYXRpb25FeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgQXJndW1lbnRzIGdldCBhcmd1bWVudHM7CiAgc2V0IGFyZ3VtZW50cyhBcmd1bWVudHMgdmFsdWUpOwoKICAvLy8gTmFtZSBvZiB0aGUgaW52b2tlZCBtZXRob2QuCiAgLy8vCiAgLy8vIE1heSBiZSBgbnVsbGAgaWYgdGhlIHRhcmdldCBpcyBhIHN5bnRoZXRpYyBzdGF0aWMgbWVtYmVyIHdpdGhvdXQgYSBuYW1lLgogIE5hbWUgZ2V0IG5hbWU7Cn0KCi8vLyBFeHByZXNzaW9uIG9mIGZvcm0gYHguZm9vKHkpYC4KQGNvcQpjbGFzcyBNZXRob2RJbnZvY2F0aW9uIGV4dGVuZHMgSW52b2NhdGlvbkV4cHJlc3Npb24gewogIEV4cHJlc3Npb24gcmVjZWl2ZXI7CiAgTmFtZSBuYW1lOwogIEFyZ3VtZW50cyBhcmd1bWVudHM7CgogIFJlZmVyZW5jZSBpbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2U7CgogIE1ldGhvZEludm9jYXRpb24oRXhwcmVzc2lvbiByZWNlaXZlciwgTmFtZSBuYW1lLCBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBbTWVtYmVyIGludGVyZmFjZVRhcmdldF0pCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZSgKICAgICAgICAgICAgcmVjZWl2ZXIsIG5hbWUsIGFyZ3VtZW50cywgZ2V0TWVtYmVyUmVmZXJlbmNlKGludGVyZmFjZVRhcmdldCkpOwoKICBNZXRob2RJbnZvY2F0aW9uLmJ5UmVmZXJlbmNlKAogICAgICB0aGlzLnJlY2VpdmVyLCB0aGlzLm5hbWUsIHRoaXMuYXJndW1lbnRzLCB0aGlzLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSkgewogICAgcmVjZWl2ZXI/LnBhcmVudCA9IHRoaXM7CiAgICBhcmd1bWVudHM/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBNZW1iZXIgZ2V0IGludGVyZmFjZVRhcmdldCA9PiBpbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2U/LmFzTWVtYmVyOwoKICB2b2lkIHNldCBpbnRlcmZhY2VUYXJnZXQoTWVtYmVyIHRhcmdldCkgewogICAgaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlID0gZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCk7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgdmFyIGludGVyZmFjZVRhcmdldCA9IHRoaXMuaW50ZXJmYWNlVGFyZ2V0OwogICAgaWYgKGludGVyZmFjZVRhcmdldCAhPSBudWxsKSB7CiAgICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgaXMgUHJvY2VkdXJlICYmCiAgICAgICAgICB0eXBlcy5pc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3IoaW50ZXJmYWNlVGFyZ2V0KSkgewogICAgICAgIHJldHVybiB0eXBlcy5nZXRUeXBlT2ZPdmVybG9hZGVkQXJpdGhtZXRpYygKICAgICAgICAgICAgcmVjZWl2ZXIuZ2V0U3RhdGljVHlwZSh0eXBlcyksCiAgICAgICAgICAgIGFyZ3VtZW50cy5wb3NpdGlvbmFsWzBdLmdldFN0YXRpY1R5cGUodHlwZXMpKTsKICAgICAgfQogICAgICBDbGFzcyBzdXBlcmNsYXNzID0gaW50ZXJmYWNlVGFyZ2V0LmVuY2xvc2luZ0NsYXNzOwogICAgICB2YXIgcmVjZWl2ZXJUeXBlID0gcmVjZWl2ZXIuZ2V0U3RhdGljVHlwZUFzSW5zdGFuY2VPZihzdXBlcmNsYXNzLCB0eXBlcyk7CiAgICAgIHZhciBnZXR0ZXJUeXBlID0gU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKHJlY2VpdmVyVHlwZSkKICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZShpbnRlcmZhY2VUYXJnZXQuZ2V0dGVyVHlwZSk7CiAgICAgIGlmIChnZXR0ZXJUeXBlIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICAgIHJldHVybiBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKAogICAgICAgICAgICAgICAgZ2V0dGVyVHlwZS50eXBlUGFyYW1ldGVycywgYXJndW1lbnRzLnR5cGVzKQogICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUoZ2V0dGVyVHlwZS5yZXR1cm5UeXBlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgfQogICAgfQogICAgaWYgKG5hbWUubmFtZSA9PSAnY2FsbCcpIHsKICAgICAgdmFyIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLmdldFN0YXRpY1R5cGUodHlwZXMpOwogICAgICBpZiAocmVjZWl2ZXJUeXBlIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICAgIGlmIChyZWNlaXZlclR5cGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoICE9IGFyZ3VtZW50cy50eXBlcy5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiBjb25zdCBCb3R0b21UeXBlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKAogICAgICAgICAgICAgICAgcmVjZWl2ZXJUeXBlLnR5cGVQYXJhbWV0ZXJzLCBhcmd1bWVudHMudHlwZXMpCiAgICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZShyZWNlaXZlclR5cGUucmV0dXJuVHlwZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChuYW1lLm5hbWUgPT0gJz09JykgewogICAgICAvLyBXZSB1c2UgdGhpcyBzcGVjaWFsIGNhc2UgdG8gc2ltcGxpZnkgZ2VuZXJhdGlvbiBvZiAnPT0nIGNoZWNrcy4KICAgICAgcmV0dXJuIHR5cGVzLmJvb2xUeXBlOwogICAgfQogICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdE1ldGhvZEludm9jYXRpb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0TWV0aG9kSW52b2NhdGlvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgcmVjZWl2ZXI/LmFjY2VwdCh2KTsKICAgIG5hbWU/LmFjY2VwdCh2KTsKICAgIGFyZ3VtZW50cz8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHJlY2VpdmVyICE9IG51bGwpIHsKICAgICAgcmVjZWl2ZXIgPSByZWNlaXZlci5hY2NlcHQodik7CiAgICAgIHJlY2VpdmVyPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGFyZ3VtZW50cyA9IGFyZ3VtZW50cy5hY2NlcHQodik7CiAgICAgIGFyZ3VtZW50cz8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBFeHByZXNzaW9uIG9mIGZvcm0gYHN1cGVyLmZvbyh4KWAuCi8vLwovLy8gVGhlIHByb3ZpZGVkIGFyZ3VtZW50cyBtaWdodCBub3QgbWF0Y2ggdGhlIHBhcmFtZXRlcnMgb2YgdGhlIHRhcmdldC4KY2xhc3MgU3VwZXJNZXRob2RJbnZvY2F0aW9uIGV4dGVuZHMgSW52b2NhdGlvbkV4cHJlc3Npb24gewogIE5hbWUgbmFtZTsKICBBcmd1bWVudHMgYXJndW1lbnRzOwoKICBSZWZlcmVuY2UgaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlOwoKICBTdXBlck1ldGhvZEludm9jYXRpb24oTmFtZSBuYW1lLCBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBbUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldF0pCiAgICAgIDogdGhpcy5ieVJlZmVyZW5jZShuYW1lLCBhcmd1bWVudHMsIGdldE1lbWJlclJlZmVyZW5jZShpbnRlcmZhY2VUYXJnZXQpKTsKCiAgU3VwZXJNZXRob2RJbnZvY2F0aW9uLmJ5UmVmZXJlbmNlKAogICAgICB0aGlzLm5hbWUsIHRoaXMuYXJndW1lbnRzLCB0aGlzLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSkgewogICAgYXJndW1lbnRzPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgUHJvY2VkdXJlIGdldCBpbnRlcmZhY2VUYXJnZXQgPT4gaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlPy5hc1Byb2NlZHVyZTsKCiAgdm9pZCBzZXQgaW50ZXJmYWNlVGFyZ2V0KFByb2NlZHVyZSB0YXJnZXQpIHsKICAgIGludGVyZmFjZVRhcmdldFJlZmVyZW5jZSA9IGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICBDbGFzcyBzdXBlcmNsYXNzID0gaW50ZXJmYWNlVGFyZ2V0LmVuY2xvc2luZ0NsYXNzOwogICAgdmFyIHJlY2VpdmVyVHlwZSA9IHR5cGVzLmdldFR5cGVBc0luc3RhbmNlT2YodHlwZXMudGhpc1R5cGUsIHN1cGVyY2xhc3MpOwogICAgdmFyIHJldHVyblR5cGUgPSBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUocmVjZWl2ZXJUeXBlKQogICAgICAgIC5zdWJzdGl0dXRlVHlwZShpbnRlcmZhY2VUYXJnZXQuZnVuY3Rpb24ucmV0dXJuVHlwZSk7CiAgICByZXR1cm4gU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgICAgaW50ZXJmYWNlVGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLCBhcmd1bWVudHMudHlwZXMpCiAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHJldHVyblR5cGUpOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRTdXBlck1ldGhvZEludm9jYXRpb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBuYW1lPy5hY2NlcHQodik7CiAgICBhcmd1bWVudHM/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhcmd1bWVudHMgPSBhcmd1bWVudHMuYWNjZXB0KHYpOwogICAgICBhcmd1bWVudHM/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGBmb28oeClgLCBvciBgY29uc3QgZm9vKHgpYCBpZiB0aGUgdGFyZ2V0IGlzIGFuCi8vLyBleHRlcm5hbCBjb25zdGFudCBmYWN0b3J5LgovLy8KLy8vIFRoZSBwcm92aWRlZCBhcmd1bWVudHMgbWlnaHQgbm90IG1hdGNoIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSB0YXJnZXQuCmNsYXNzIFN0YXRpY0ludm9jYXRpb24gZXh0ZW5kcyBJbnZvY2F0aW9uRXhwcmVzc2lvbiB7CiAgUmVmZXJlbmNlIHRhcmdldFJlZmVyZW5jZTsKICBBcmd1bWVudHMgYXJndW1lbnRzOwoKICAvLy8gVHJ1ZSBpZiB0aGlzIGlzIGEgY29uc3RhbnQgY2FsbCB0byBhbiBleHRlcm5hbCBjb25zdGFudCBmYWN0b3J5LgogIGJvb2wgaXNDb25zdDsKCiAgTmFtZSBnZXQgbmFtZSA9PiB0YXJnZXQ/Lm5hbWU7CgogIFN0YXRpY0ludm9jYXRpb24oUHJvY2VkdXJlIHRhcmdldCwgQXJndW1lbnRzIGFyZ3VtZW50cywge2Jvb2wgaXNDb25zdDogZmFsc2V9KQogICAgICA6IHRoaXMuYnlSZWZlcmVuY2UoZ2V0TWVtYmVyUmVmZXJlbmNlKHRhcmdldCksIGFyZ3VtZW50cywKICAgICAgICAgICAgaXNDb25zdDogaXNDb25zdCk7CgogIFN0YXRpY0ludm9jYXRpb24uYnlSZWZlcmVuY2UodGhpcy50YXJnZXRSZWZlcmVuY2UsIHRoaXMuYXJndW1lbnRzLAogICAgICB7dGhpcy5pc0NvbnN0OiBmYWxzZX0pIHsKICAgIGFyZ3VtZW50cz8ucGFyZW50ID0gdGhpczsKICB9CgogIFByb2NlZHVyZSBnZXQgdGFyZ2V0ID0+IHRhcmdldFJlZmVyZW5jZT8uYXNQcm9jZWR1cmU7CgogIHZvaWQgc2V0IHRhcmdldChQcm9jZWR1cmUgdGFyZ2V0KSB7CiAgICB0YXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICByZXR1cm4gU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgICAgdGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLCBhcmd1bWVudHMudHlwZXMpCiAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHRhcmdldC5mdW5jdGlvbi5yZXR1cm5UeXBlKTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0U3RhdGljSW52b2NhdGlvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRTdGF0aWNJbnZvY2F0aW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0YXJnZXQ/LmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIGFyZ3VtZW50cz8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGFyZ3VtZW50cyA9IGFyZ3VtZW50cy5hY2NlcHQodik7CiAgICAgIGFyZ3VtZW50cz8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBFeHByZXNzaW9uIG9mIGZvcm0gYG5ldyBGb28oeClgIG9yIGBjb25zdCBGb28oeClgLgovLy8KLy8vIFRoZSBwcm92aWRlZCBhcmd1bWVudHMgbWlnaHQgbm90IG1hdGNoIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSB0YXJnZXQuCi8vCi8vIERFU0lHTiBUT0RPOiBTaG91bGQgd2UgcGFzcyB0eXBlIGFyZ3VtZW50cyBpbiBhIHNlcGFyYXRlIGZpZWxkCi8vIGBjbGFzc1R5cGVBcmd1bWVudHNgPyBUaGV5IGFyZSBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0eXBlIGFyZ3VtZW50cyB0bwovLyBnZW5lcmljIGZ1bmN0aW9ucy4KQGNvcQpjbGFzcyBDb25zdHJ1Y3Rvckludm9jYXRpb24gZXh0ZW5kcyBJbnZvY2F0aW9uRXhwcmVzc2lvbiB7CiAgUmVmZXJlbmNlIHRhcmdldFJlZmVyZW5jZTsKICBAbm9jb3EKICBBcmd1bWVudHMgYXJndW1lbnRzOwogIGJvb2wgaXNDb25zdDsKCiAgTmFtZSBnZXQgbmFtZSA9PiB0YXJnZXQ/Lm5hbWU7CgogIENvbnN0cnVjdG9ySW52b2NhdGlvbihDb25zdHJ1Y3RvciB0YXJnZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIHtib29sIGlzQ29uc3Q6IGZhbHNlfSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKGdldE1lbWJlclJlZmVyZW5jZSh0YXJnZXQpLCBhcmd1bWVudHMsCiAgICAgICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QpOwoKICBDb25zdHJ1Y3Rvckludm9jYXRpb24uYnlSZWZlcmVuY2UodGhpcy50YXJnZXRSZWZlcmVuY2UsIHRoaXMuYXJndW1lbnRzLAogICAgICB7dGhpcy5pc0NvbnN0OiBmYWxzZX0pIHsKICAgIGFyZ3VtZW50cz8ucGFyZW50ID0gdGhpczsKICB9CgogIENvbnN0cnVjdG9yIGdldCB0YXJnZXQgPT4gdGFyZ2V0UmVmZXJlbmNlPy5hc0NvbnN0cnVjdG9yOwoKICB2b2lkIHNldCB0YXJnZXQoQ29uc3RydWN0b3IgdGFyZ2V0KSB7CiAgICB0YXJnZXRSZWZlcmVuY2UgPSBnZXRNZW1iZXJSZWZlcmVuY2UodGFyZ2V0KTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICByZXR1cm4gYXJndW1lbnRzLnR5cGVzLmlzRW1wdHkKICAgICAgICA/IHRhcmdldC5lbmNsb3NpbmdDbGFzcy5yYXdUeXBlCiAgICAgICAgOiBuZXcgSW50ZXJmYWNlVHlwZSh0YXJnZXQuZW5jbG9zaW5nQ2xhc3MsIGFyZ3VtZW50cy50eXBlcyk7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHRhcmdldD8uYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgYXJndW1lbnRzPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXJndW1lbnRzID0gYXJndW1lbnRzLmFjY2VwdCh2KTsKICAgICAgYXJndW1lbnRzPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KCiAgSW50ZXJmYWNlVHlwZSBnZXQgY29uc3RydWN0ZWRUeXBlIHsKICAgIHJldHVybiBhcmd1bWVudHMudHlwZXMuaXNFbXB0eQogICAgICAgID8gdGFyZ2V0LmVuY2xvc2luZ0NsYXNzLnJhd1R5cGUKICAgICAgICA6IG5ldyBJbnRlcmZhY2VUeXBlKHRhcmdldC5lbmNsb3NpbmdDbGFzcywgYXJndW1lbnRzLnR5cGVzKTsKICB9Cn0KCi8vLyBBbiBleHBsaWNpdCB0eXBlIGluc3RhbnRpYXRpb24gb2YgYSBnZW5lcmljIGZ1bmN0aW9uLgpjbGFzcyBJbnN0YW50aWF0aW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRXhwcmVzc2lvbiBleHByZXNzaW9uOwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIEluc3RhbnRpYXRpb24odGhpcy5leHByZXNzaW9uLCB0aGlzLnR5cGVBcmd1bWVudHMpIHsKICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgRnVuY3Rpb25UeXBlIHR5cGUgPSBleHByZXNzaW9uLmdldFN0YXRpY1R5cGUodHlwZXMpOwogICAgcmV0dXJuIFN1YnN0aXR1dGlvbi5mcm9tUGFpcnModHlwZS50eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cykKICAgICAgICAuc3Vic3RpdHV0ZVR5cGUodHlwZS53aXRob3V0VHlwZVBhcmFtZXRlcnMpOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRJbnN0YW50aWF0aW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEluc3RhbnRpYXRpb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGV4cHJlc3Npb24/LmFjY2VwdCh2KTsKICAgIHZpc2l0TGlzdCh0eXBlQXJndW1lbnRzLCB2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChleHByZXNzaW9uICE9IG51bGwpIHsKICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uYWNjZXB0KHYpOwogICAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgdHJhbnNmb3JtVHlwZUxpc3QodHlwZUFyZ3VtZW50cywgdik7CiAgfQp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGAheGAuCi8vLwovLy8gVGhlIGBpcyFgIGFuZCBgIT1gIG9wZXJhdG9ycyBhcmUgZGVzdWdhcmVkIGludG8gW05vdF0gbm9kZXMgd2l0aCBgaXNgIGFuZAovLy8gYD09YCBleHByZXNzaW9ucyBpbnNpZGUsIHJlc3BlY3RpdmVseS4KY2xhc3MgTm90IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRXhwcmVzc2lvbiBvcGVyYW5kOwoKICBOb3QodGhpcy5vcGVyYW5kKSB7CiAgICBvcGVyYW5kPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLmJvb2xUeXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdE5vdCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXROb3QodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIG9wZXJhbmQ/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChvcGVyYW5kICE9IG51bGwpIHsKICAgICAgb3BlcmFuZCA9IG9wZXJhbmQuYWNjZXB0KHYpOwogICAgICBvcGVyYW5kPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEV4cHJlc3Npb24gb2YgZm9ybSBgeCAmJiB5YCBvciBgeCB8fCB5YApjbGFzcyBMb2dpY2FsRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIEV4cHJlc3Npb24gbGVmdDsKICBTdHJpbmcgb3BlcmF0b3I7IC8vICYmIG9yIHx8IG9yID8/CiAgRXhwcmVzc2lvbiByaWdodDsKCiAgTG9naWNhbEV4cHJlc3Npb24odGhpcy5sZWZ0LCB0aGlzLm9wZXJhdG9yLCB0aGlzLnJpZ2h0KSB7CiAgICBsZWZ0Py5wYXJlbnQgPSB0aGlzOwogICAgcmlnaHQ/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMuYm9vbFR5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0TG9naWNhbEV4cHJlc3Npb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0TG9naWNhbEV4cHJlc3Npb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGxlZnQ/LmFjY2VwdCh2KTsKICAgIHJpZ2h0Py5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAobGVmdCAhPSBudWxsKSB7CiAgICAgIGxlZnQgPSBsZWZ0LmFjY2VwdCh2KTsKICAgICAgbGVmdD8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChyaWdodCAhPSBudWxsKSB7CiAgICAgIHJpZ2h0ID0gcmlnaHQuYWNjZXB0KHYpOwogICAgICByaWdodD8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBFeHByZXNzaW9uIG9mIGZvcm0gYHggPyB5IDogemAuCmNsYXNzIENvbmRpdGlvbmFsRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIEV4cHJlc3Npb24gY29uZGl0aW9uOwogIEV4cHJlc3Npb24gdGhlbjsKICBFeHByZXNzaW9uIG90aGVyd2lzZTsKCiAgLy8vIFRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbi4gU2hvdWxkIG5vdCBiZSBgbnVsbGAuCiAgRGFydFR5cGUgc3RhdGljVHlwZTsKCiAgQ29uZGl0aW9uYWxFeHByZXNzaW9uKAogICAgICB0aGlzLmNvbmRpdGlvbiwgdGhpcy50aGVuLCB0aGlzLm90aGVyd2lzZSwgdGhpcy5zdGF0aWNUeXBlKSB7CiAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICB0aGVuPy5wYXJlbnQgPSB0aGlzOwogICAgb3RoZXJ3aXNlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHN0YXRpY1R5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdENvbmRpdGlvbmFsRXhwcmVzc2lvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgY29uZGl0aW9uPy5hY2NlcHQodik7CiAgICB0aGVuPy5hY2NlcHQodik7CiAgICBvdGhlcndpc2U/LmFjY2VwdCh2KTsKICAgIHN0YXRpY1R5cGU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChjb25kaXRpb24gIT0gbnVsbCkgewogICAgICBjb25kaXRpb24gPSBjb25kaXRpb24uYWNjZXB0KHYpOwogICAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAodGhlbiAhPSBudWxsKSB7CiAgICAgIHRoZW4gPSB0aGVuLmFjY2VwdCh2KTsKICAgICAgdGhlbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChvdGhlcndpc2UgIT0gbnVsbCkgewogICAgICBvdGhlcndpc2UgPSBvdGhlcndpc2UuYWNjZXB0KHYpOwogICAgICBvdGhlcndpc2U/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAoc3RhdGljVHlwZSAhPSBudWxsKSB7CiAgICAgIHN0YXRpY1R5cGUgPSB2LnZpc2l0RGFydFR5cGUoc3RhdGljVHlwZSk7CiAgICB9CiAgfQp9CgovLy8gQ29udmVydCBleHByZXNzaW9ucyB0byBzdHJpbmdzIGFuZCBjb25jYXRlbmF0ZSB0aGVtLiAgU2VtYW50aWNhbGx5LCBjYWxscwovLy8gYHRvU3RyaW5nYCBvbiBldmVyeSBhcmd1bWVudCwgY2hlY2tzIHRoYXQgYSBzdHJpbmcgaXMgcmV0dXJuZWQsIGFuZCByZXR1cm5zCi8vLyB0aGUgY29uY2F0ZW5hdGlvbiBvZiBhbGwgdGhlIHN0cmluZ3MuCi8vLwovLy8gSWYgW2V4cHJlc3Npb25zXSBpcyBlbXB0eSB0aGVuIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZC4KLy8vCi8vLyBUaGVzZSBhcmlzZSBmcm9tIHN0cmluZyBpbnRlcnBvbGF0aW9ucyBhbmQgYWRqYWNlbnQgc3RyaW5nIGxpdGVyYWxzLgpjbGFzcyBTdHJpbmdDb25jYXRlbmF0aW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9uczsKCiAgU3RyaW5nQ29uY2F0ZW5hdGlvbih0aGlzLmV4cHJlc3Npb25zKSB7CiAgICBzZXRQYXJlbnRzKGV4cHJlc3Npb25zLCB0aGlzKTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlcy5zdHJpbmdUeXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KGV4cHJlc3Npb25zLCB2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHRyYW5zZm9ybUxpc3QoZXhwcmVzc2lvbnMsIHYsIHRoaXMpOwogIH0KfQoKLy8vIENvbmNhdGVuYXRlIGxpc3RzIGludG8gYSBzaW5nbGUgbGlzdC4KLy8vCi8vLyBJZiBbbGlzdHNdIGlzIGVtcHR5IHRoZW4gYW4gZW1wdHkgbGlzdCBpcyByZXR1cm5lZC4KLy8vCi8vLyBUaGVzZSBhcmlzZSBmcm9tIHNwcmVhZCBhbmQgY29udHJvbC1mbG93IGVsZW1lbnRzIGluIGNvbnN0IGxpc3QgbGl0ZXJhbHMuCi8vLyBUaGV5IGFyZSBvbmx5IHByZXNlbnQgYmVmb3JlIGNvbnN0YW50IGV2YWx1YXRpb24sIG9yIHdpdGhpbiB1bmV2YWx1YXRlZAovLy8gY29uc3RhbnRzIGluIGNvbnN0YW50IGV4cHJlc3Npb25zLgpjbGFzcyBMaXN0Q29uY2F0ZW5hdGlvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIERhcnRUeXBlIHR5cGVBcmd1bWVudDsKICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IGxpc3RzOwoKICBMaXN0Q29uY2F0ZW5hdGlvbih0aGlzLmxpc3RzLCB7dGhpcy50eXBlQXJndW1lbnQ6IGNvbnN0IER5bmFtaWNUeXBlKCl9KSB7CiAgICBzZXRQYXJlbnRzKGxpc3RzLCB0aGlzKTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMubGl0ZXJhbExpc3RUeXBlKHR5cGVBcmd1bWVudCk7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdExpc3RDb25jYXRlbmF0aW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdExpc3RDb25jYXRlbmF0aW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB0eXBlQXJndW1lbnQ/LmFjY2VwdCh2KTsKICAgIHZpc2l0TGlzdChsaXN0cywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0eXBlQXJndW1lbnQgPSB2LnZpc2l0RGFydFR5cGUodHlwZUFyZ3VtZW50KTsKICAgIHRyYW5zZm9ybUxpc3QobGlzdHMsIHYsIHRoaXMpOwogIH0KfQoKLy8vIENvbmNhdGVuYXRlIHNldHMgaW50byBhIHNpbmdsZSBzZXQuCi8vLwovLy8gSWYgW3NldHNdIGlzIGVtcHR5IHRoZW4gYW4gZW1wdHkgc2V0IGlzIHJldHVybmVkLgovLy8KLy8vIFRoZXNlIGFyaXNlIGZyb20gc3ByZWFkIGFuZCBjb250cm9sLWZsb3cgZWxlbWVudHMgaW4gY29uc3Qgc2V0IGxpdGVyYWxzLgovLy8gVGhleSBhcmUgb25seSBwcmVzZW50IGJlZm9yZSBjb25zdGFudCBldmFsdWF0aW9uLCBvciB3aXRoaW4gdW5ldmFsdWF0ZWQKLy8vIGNvbnN0YW50cyBpbiBjb25zdGFudCBleHByZXNzaW9ucy4KLy8vCi8vLyBEdXBsaWNhdGVkIHZhbHVlcyBpbiBvciBhY3Jvc3MgdGhlIHNldHMgd2lsbCByZXN1bHQgaW4gYSBjb21waWxlLXRpbWUgZXJyb3IKLy8vIGR1cmluZyBjb25zdGFudCBldmFsdWF0aW9uLgpjbGFzcyBTZXRDb25jYXRlbmF0aW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRGFydFR5cGUgdHlwZUFyZ3VtZW50OwogIGZpbmFsIExpc3Q8RXhwcmVzc2lvbj4gc2V0czsKCiAgU2V0Q29uY2F0ZW5hdGlvbih0aGlzLnNldHMsIHt0aGlzLnR5cGVBcmd1bWVudDogY29uc3QgRHluYW1pY1R5cGUoKX0pIHsKICAgIHNldFBhcmVudHMoc2V0cywgdGhpcyk7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmxpdGVyYWxTZXRUeXBlKHR5cGVBcmd1bWVudCk7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFNldENvbmNhdGVuYXRpb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0U2V0Q29uY2F0ZW5hdGlvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdHlwZUFyZ3VtZW50Py5hY2NlcHQodik7CiAgICB2aXNpdExpc3Qoc2V0cywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0eXBlQXJndW1lbnQgPSB2LnZpc2l0RGFydFR5cGUodHlwZUFyZ3VtZW50KTsKICAgIHRyYW5zZm9ybUxpc3Qoc2V0cywgdiwgdGhpcyk7CiAgfQp9CgovLy8gQ29uY2F0ZW5hdGUgbWFwcyBpbnRvIGEgc2luZ2xlIG1hcC4KLy8vCi8vLyBJZiBbbWFwc10gaXMgZW1wdHkgdGhlbiBhbiBlbXB0eSBtYXAgaXMgcmV0dXJuZWQuCi8vLwovLy8gVGhlc2UgYXJpc2UgZnJvbSBzcHJlYWQgYW5kIGNvbnRyb2wtZmxvdyBlbGVtZW50cyBpbiBjb25zdCBtYXAgbGl0ZXJhbHMuCi8vLyBUaGV5IGFyZSBvbmx5IHByZXNlbnQgYmVmb3JlIGNvbnN0YW50IGV2YWx1YXRpb24sIG9yIHdpdGhpbiB1bmV2YWx1YXRlZAovLy8gY29uc3RhbnRzIGluIGNvbnN0YW50IGV4cHJlc3Npb25zLgovLy8KLy8vIER1cGxpY2F0ZWQga2V5cyBpbiBvciBhY3Jvc3MgdGhlIG1hcHMgd2lsbCByZXN1bHQgaW4gYSBjb21waWxlLXRpbWUgZXJyb3IKLy8vIGR1cmluZyBjb25zdGFudCBldmFsdWF0aW9uLgpjbGFzcyBNYXBDb25jYXRlbmF0aW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRGFydFR5cGUga2V5VHlwZTsKICBEYXJ0VHlwZSB2YWx1ZVR5cGU7CiAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiBtYXBzOwoKICBNYXBDb25jYXRlbmF0aW9uKHRoaXMubWFwcywKICAgICAge3RoaXMua2V5VHlwZTogY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgdGhpcy52YWx1ZVR5cGU6IGNvbnN0IER5bmFtaWNUeXBlKCl9KSB7CiAgICBzZXRQYXJlbnRzKG1hcHMsIHRoaXMpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5saXRlcmFsTWFwVHlwZShrZXlUeXBlLCB2YWx1ZVR5cGUpOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRNYXBDb25jYXRlbmF0aW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdE1hcENvbmNhdGVuYXRpb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGtleVR5cGU/LmFjY2VwdCh2KTsKICAgIHZhbHVlVHlwZT8uYWNjZXB0KHYpOwogICAgdmlzaXRMaXN0KG1hcHMsIHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAga2V5VHlwZSA9IHYudmlzaXREYXJ0VHlwZShrZXlUeXBlKTsKICAgIHZhbHVlVHlwZSA9IHYudmlzaXREYXJ0VHlwZSh2YWx1ZVR5cGUpOwogICAgdHJhbnNmb3JtTGlzdChtYXBzLCB2LCB0aGlzKTsKICB9Cn0KCi8vLyBDcmVhdGUgYW4gaW5zdGFuY2UgZGlyZWN0bHkgZnJvbSB0aGUgZmllbGQgdmFsdWVzLgovLy8KLy8vIFRoaXMgZXhwcmVzc2lvbiBhcmlzZXMgZnJvbSBjb25zdCBjb25zdHJ1Y3RvciBjYWxscyB3aGVuIG9uZSBvciBtb3JlIGZpZWxkCi8vLyBpbml0aWFsaXppbmcgZXhwcmVzc2lvbnMsIGZpZWxkIGluaXRpYWxpemVycywgYXNzZXJ0IGluaXRpYWxpemVycyBvciB1bnVzZWQKLy8vIGFyZ3VtZW50cyBjb250YWluIHVuZXZhbHVhdGVkIGV4cHJlc3Npb25zLiBUaGV5IG9ubHkgZXZlciBvY2N1ciB3aXRoaW4KLy8vIHVuZXZhbHVhdGVkIGNvbnN0YW50cyBpbiBjb25zdGFudCBleHByZXNzaW9ucy4KY2xhc3MgSW5zdGFuY2VDcmVhdGlvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIGZpbmFsIFJlZmVyZW5jZSBjbGFzc1JlZmVyZW5jZTsKICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwogIGZpbmFsIE1hcDxSZWZlcmVuY2UsIEV4cHJlc3Npb24+IGZpZWxkVmFsdWVzOwogIGZpbmFsIExpc3Q8QXNzZXJ0U3RhdGVtZW50PiBhc3NlcnRzOwogIGZpbmFsIExpc3Q8RXhwcmVzc2lvbj4gdW51c2VkQXJndW1lbnRzOwoKICBJbnN0YW5jZUNyZWF0aW9uKHRoaXMuY2xhc3NSZWZlcmVuY2UsIHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5maWVsZFZhbHVlcywKICAgICAgdGhpcy5hc3NlcnRzLCB0aGlzLnVudXNlZEFyZ3VtZW50cyk7CgogIENsYXNzIGdldCBjbGFzc05vZGUgPT4gY2xhc3NSZWZlcmVuY2UuYXNDbGFzczsKCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlQXJndW1lbnRzLmlzRW1wdHkKICAgICAgICA/IGNsYXNzTm9kZS5yYXdUeXBlCiAgICAgICAgOiBuZXcgSW50ZXJmYWNlVHlwZShjbGFzc05vZGUsIHR5cGVBcmd1bWVudHMpOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRJbnN0YW5jZUNyZWF0aW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEluc3RhbmNlQ3JlYXRpb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGNsYXNzUmVmZXJlbmNlLmFzQ2xhc3MuYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgdmlzaXRMaXN0KHR5cGVBcmd1bWVudHMsIHYpOwogICAgZm9yIChmaW5hbCBSZWZlcmVuY2UgcmVmZXJlbmNlIGluIGZpZWxkVmFsdWVzLmtleXMpIHsKICAgICAgcmVmZXJlbmNlLmFzRmllbGQuYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgfQogICAgZm9yIChmaW5hbCBFeHByZXNzaW9uIHZhbHVlIGluIGZpZWxkVmFsdWVzLnZhbHVlcykgewogICAgICB2YWx1ZS5hY2NlcHQodik7CiAgICB9CiAgICB2aXNpdExpc3QoYXNzZXJ0cywgdik7CiAgICB2aXNpdExpc3QodW51c2VkQXJndW1lbnRzLCB2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGZpZWxkVmFsdWVzLmZvckVhY2goKFJlZmVyZW5jZSBmaWVsZFJlZiwgRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICBFeHByZXNzaW9uIHRyYW5zZm9ybWVkID0gdmFsdWUuYWNjZXB0KHYpOwogICAgICBpZiAodHJhbnNmb3JtZWQgIT0gbnVsbCAmJiAhaWRlbnRpY2FsKHZhbHVlLCB0cmFuc2Zvcm1lZCkpIHsKICAgICAgICBmaWVsZFZhbHVlc1tmaWVsZFJlZl0gPSB0cmFuc2Zvcm1lZDsKICAgICAgICB0cmFuc2Zvcm1lZC5wYXJlbnQgPSB0aGlzOwogICAgICB9CiAgICB9KTsKICAgIHRyYW5zZm9ybUxpc3QoYXNzZXJ0cywgdiwgdGhpcyk7CiAgICB0cmFuc2Zvcm1MaXN0KHVudXNlZEFyZ3VtZW50cywgdiwgdGhpcyk7CiAgfQp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGB4IGlzIFRgLgpjbGFzcyBJc0V4cHJlc3Npb24gZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBFeHByZXNzaW9uIG9wZXJhbmQ7CiAgRGFydFR5cGUgdHlwZTsKCiAgSXNFeHByZXNzaW9uKHRoaXMub3BlcmFuZCwgdGhpcy50eXBlKSB7CiAgICBvcGVyYW5kPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLmJvb2xUeXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdElzRXhwcmVzc2lvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRJc0V4cHJlc3Npb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIG9wZXJhbmQ/LmFjY2VwdCh2KTsKICAgIHR5cGU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChvcGVyYW5kICE9IG51bGwpIHsKICAgICAgb3BlcmFuZCA9IG9wZXJhbmQuYWNjZXB0KHYpOwogICAgICBvcGVyYW5kPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgdHlwZSA9IHYudmlzaXREYXJ0VHlwZSh0eXBlKTsKICB9Cn0KCi8vLyBFeHByZXNzaW9uIG9mIGZvcm0gYHggYXMgVGAuCmNsYXNzIEFzRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIGludCBmbGFncyA9IDA7CiAgRXhwcmVzc2lvbiBvcGVyYW5kOwogIERhcnRUeXBlIHR5cGU7CgogIEFzRXhwcmVzc2lvbih0aGlzLm9wZXJhbmQsIHRoaXMudHlwZSkgewogICAgb3BlcmFuZD8ucGFyZW50ID0gdGhpczsKICB9CgogIC8vIE11c3QgbWF0Y2ggc2VyaWFsaXplZCBiaXQgcG9zaXRpb25zLgogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ1R5cGVFcnJvciA9IDEgPDwgMDsKCiAgLy8vIEluZGljYXRlcyB0aGUgdHlwZSBvZiBlcnJvciB0aGF0IHNob3VsZCBiZSB0aHJvd24gaWYgdGhlIGNoZWNrIGZhaWxzLgogIC8vLwogIC8vLyBgdHJ1ZWAgbWVhbnMgdGhhdCBhIFR5cGVFcnJvciBzaG91bGQgYmUgdGhyb3duLiAgYGZhbHNlYCBtZWFucyB0aGF0IGEKICAvLy8gQ2FzdEVycm9yIHNob3VsZCBiZSB0aHJvd24uCiAgYm9vbCBnZXQgaXNUeXBlRXJyb3IgPT4gZmxhZ3MgJiBGbGFnVHlwZUVycm9yICE9IDA7CgogIHZvaWQgc2V0IGlzVHlwZUVycm9yKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnVHlwZUVycm9yKSA6IChmbGFncyAmIH5GbGFnVHlwZUVycm9yKTsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdEFzRXhwcmVzc2lvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRBc0V4cHJlc3Npb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIG9wZXJhbmQ/LmFjY2VwdCh2KTsKICAgIHR5cGU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChvcGVyYW5kICE9IG51bGwpIHsKICAgICAgb3BlcmFuZCA9IG9wZXJhbmQuYWNjZXB0KHYpOwogICAgICBvcGVyYW5kPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgdHlwZSA9IHYudmlzaXREYXJ0VHlwZSh0eXBlKTsKICB9Cn0KCi8vLyBBbiBpbnRlZ2VyLCBkb3VibGUsIGJvb2xlYW4sIHN0cmluZywgb3IgbnVsbCBjb25zdGFudC4KYWJzdHJhY3QgY2xhc3MgQmFzaWNMaXRlcmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgT2JqZWN0IGdldCB2YWx1ZTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikge30KfQoKY2xhc3MgU3RyaW5nTGl0ZXJhbCBleHRlbmRzIEJhc2ljTGl0ZXJhbCB7CiAgU3RyaW5nIHZhbHVlOwoKICBTdHJpbmdMaXRlcmFsKHRoaXMudmFsdWUpOwoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMuc3RyaW5nVHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRTdHJpbmdMaXRlcmFsKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFN0cmluZ0xpdGVyYWwodGhpcywgYXJnKTsKfQoKY2xhc3MgSW50TGl0ZXJhbCBleHRlbmRzIEJhc2ljTGl0ZXJhbCB7CiAgLy8vIE5vdGUgdGhhdCB0aGlzIHZhbHVlIGhvbGRzIGEgdWludDY0IHZhbHVlLgogIC8vLyBFLmcuICIweDgwMDAwMDAwMDAwMDAwMDAiIHdpbGwgYmUgc2F2ZWQgYXMgIi05MjIzMzcyMDM2ODU0Nzc1ODA4IiBkZXNwaXRlCiAgLy8vIHRlY2huaWNhbGx5IChvbiBzb21lIHBsYXRmb3JtcywgcGFydGljdWxhcmx5IEphdmFzY3JpcHQpIGJlaW5nIHBvc2l0aXZlLgogIC8vLyBJZiB0aGUgbnVtYmVyIGlzIG1lYW50IHRvIGJlIG5lZ2F0aXZlIGl0IHdpbGwgYmUgd3JhcHBlZCBpbiBhICJ1bmFyeS0iLgogIGludCB2YWx1ZTsKCiAgSW50TGl0ZXJhbCh0aGlzLnZhbHVlKTsKCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLmludFR5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0SW50TGl0ZXJhbCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRJbnRMaXRlcmFsKHRoaXMsIGFyZyk7Cn0KCmNsYXNzIERvdWJsZUxpdGVyYWwgZXh0ZW5kcyBCYXNpY0xpdGVyYWwgewogIGRvdWJsZSB2YWx1ZTsKCiAgRG91YmxlTGl0ZXJhbCh0aGlzLnZhbHVlKTsKCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLmRvdWJsZVR5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0RG91YmxlTGl0ZXJhbCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXREb3VibGVMaXRlcmFsKHRoaXMsIGFyZyk7Cn0KCmNsYXNzIEJvb2xMaXRlcmFsIGV4dGVuZHMgQmFzaWNMaXRlcmFsIHsKICBib29sIHZhbHVlOwoKICBCb29sTGl0ZXJhbCh0aGlzLnZhbHVlKTsKCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLmJvb2xUeXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdEJvb2xMaXRlcmFsKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEJvb2xMaXRlcmFsKHRoaXMsIGFyZyk7Cn0KCmNsYXNzIE51bGxMaXRlcmFsIGV4dGVuZHMgQmFzaWNMaXRlcmFsIHsKICBPYmplY3QgZ2V0IHZhbHVlID0+IG51bGw7CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlcy5udWxsVHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXROdWxsTGl0ZXJhbCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXROdWxsTGl0ZXJhbCh0aGlzLCBhcmcpOwp9CgpjbGFzcyBTeW1ib2xMaXRlcmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgU3RyaW5nIHZhbHVlOyAvLyBFdmVyeXRoaW5nIHN0cmljdGx5IGFmdGVyIHRoZSAnIycuCgogIFN5bWJvbExpdGVyYWwodGhpcy52YWx1ZSk7CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlcy5zeW1ib2xUeXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFN5bWJvbExpdGVyYWwodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0U3ltYm9sTGl0ZXJhbCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7fQp9CgpjbGFzcyBUeXBlTGl0ZXJhbCBleHRlbmRzIEV4cHJlc3Npb24gewogIERhcnRUeXBlIHR5cGU7CgogIFR5cGVMaXRlcmFsKHRoaXMudHlwZSk7CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlcy50eXBlVHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRUeXBlTGl0ZXJhbCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRUeXBlTGl0ZXJhbCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdHlwZT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHlwZSA9IHYudmlzaXREYXJ0VHlwZSh0eXBlKTsKICB9Cn0KCmNsYXNzIFRoaXNFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLnRoaXNUeXBlOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFRoaXNFeHByZXNzaW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFRoaXNFeHByZXNzaW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHt9Cn0KCmNsYXNzIFJldGhyb3cgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gY29uc3QgQm90dG9tVHlwZSgpOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFJldGhyb3codGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0UmV0aHJvdyh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7fQp9CgpjbGFzcyBUaHJvdyBleHRlbmRzIEV4cHJlc3Npb24gewogIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgVGhyb3codGhpcy5leHByZXNzaW9uKSB7CiAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IGNvbnN0IEJvdHRvbVR5cGUoKTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRUaHJvdyh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRUaHJvdyh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgZXhwcmVzc2lvbj8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5hY2NlcHQodik7CiAgICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgpjbGFzcyBMaXN0TGl0ZXJhbCBleHRlbmRzIEV4cHJlc3Npb24gewogIGJvb2wgaXNDb25zdDsKICBEYXJ0VHlwZSB0eXBlQXJndW1lbnQ7IC8vIE5vdCBudWxsLCBkZWZhdWx0cyB0byBEeW5hbWljVHlwZS4KICBmaW5hbCBMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zOwoKICBMaXN0TGl0ZXJhbCh0aGlzLmV4cHJlc3Npb25zLAogICAgICB7dGhpcy50eXBlQXJndW1lbnQ6IGNvbnN0IER5bmFtaWNUeXBlKCksIHRoaXMuaXNDb25zdDogZmFsc2V9KSB7CiAgICBhc3NlcnQodHlwZUFyZ3VtZW50ICE9IG51bGwpOwogICAgc2V0UGFyZW50cyhleHByZXNzaW9ucywgdGhpcyk7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmxpdGVyYWxMaXN0VHlwZSh0eXBlQXJndW1lbnQpOwogIH0KCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRMaXN0TGl0ZXJhbCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRMaXN0TGl0ZXJhbCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdHlwZUFyZ3VtZW50Py5hY2NlcHQodik7CiAgICB2aXNpdExpc3QoZXhwcmVzc2lvbnMsIHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHlwZUFyZ3VtZW50ID0gdi52aXNpdERhcnRUeXBlKHR5cGVBcmd1bWVudCk7CiAgICB0cmFuc2Zvcm1MaXN0KGV4cHJlc3Npb25zLCB2LCB0aGlzKTsKICB9Cn0KCmNsYXNzIFNldExpdGVyYWwgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBib29sIGlzQ29uc3Q7CiAgRGFydFR5cGUgdHlwZUFyZ3VtZW50OyAvLyBOb3QgbnVsbCwgZGVmYXVsdHMgdG8gRHluYW1pY1R5cGUuCiAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9uczsKCiAgU2V0TGl0ZXJhbCh0aGlzLmV4cHJlc3Npb25zLAogICAgICB7dGhpcy50eXBlQXJndW1lbnQ6IGNvbnN0IER5bmFtaWNUeXBlKCksIHRoaXMuaXNDb25zdDogZmFsc2V9KSB7CiAgICBhc3NlcnQodHlwZUFyZ3VtZW50ICE9IG51bGwpOwogICAgc2V0UGFyZW50cyhleHByZXNzaW9ucywgdGhpcyk7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmxpdGVyYWxTZXRUeXBlKHR5cGVBcmd1bWVudCk7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdFNldExpdGVyYWwodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0U2V0TGl0ZXJhbCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdHlwZUFyZ3VtZW50Py5hY2NlcHQodik7CiAgICB2aXNpdExpc3QoZXhwcmVzc2lvbnMsIHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgdHlwZUFyZ3VtZW50ID0gdi52aXNpdERhcnRUeXBlKHR5cGVBcmd1bWVudCk7CiAgICB0cmFuc2Zvcm1MaXN0KGV4cHJlc3Npb25zLCB2LCB0aGlzKTsKICB9Cn0KCmNsYXNzIE1hcExpdGVyYWwgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICBib29sIGlzQ29uc3Q7CiAgRGFydFR5cGUga2V5VHlwZTsgLy8gTm90IG51bGwsIGRlZmF1bHRzIHRvIER5bmFtaWNUeXBlLgogIERhcnRUeXBlIHZhbHVlVHlwZTsgLy8gTm90IG51bGwsIGRlZmF1bHRzIHRvIER5bmFtaWNUeXBlLgogIGZpbmFsIExpc3Q8TWFwRW50cnk+IGVudHJpZXM7CgogIE1hcExpdGVyYWwodGhpcy5lbnRyaWVzLAogICAgICB7dGhpcy5rZXlUeXBlOiBjb25zdCBEeW5hbWljVHlwZSgpLAogICAgICB0aGlzLnZhbHVlVHlwZTogY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgdGhpcy5pc0NvbnN0OiBmYWxzZX0pIHsKICAgIGFzc2VydChrZXlUeXBlICE9IG51bGwpOwogICAgYXNzZXJ0KHZhbHVlVHlwZSAhPSBudWxsKTsKICAgIHNldFBhcmVudHMoZW50cmllcywgdGhpcyk7CiAgfQoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmxpdGVyYWxNYXBUeXBlKGtleVR5cGUsIHZhbHVlVHlwZSk7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdE1hcExpdGVyYWwodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0TWFwTGl0ZXJhbCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAga2V5VHlwZT8uYWNjZXB0KHYpOwogICAgdmFsdWVUeXBlPy5hY2NlcHQodik7CiAgICB2aXNpdExpc3QoZW50cmllcywgdik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBrZXlUeXBlID0gdi52aXNpdERhcnRUeXBlKGtleVR5cGUpOwogICAgdmFsdWVUeXBlID0gdi52aXNpdERhcnRUeXBlKHZhbHVlVHlwZSk7CiAgICB0cmFuc2Zvcm1MaXN0KGVudHJpZXMsIHYsIHRoaXMpOwogIH0KfQoKY2xhc3MgTWFwRW50cnkgZXh0ZW5kcyBUcmVlTm9kZSB7CiAgRXhwcmVzc2lvbiBrZXk7CiAgRXhwcmVzc2lvbiB2YWx1ZTsKCiAgTWFwRW50cnkodGhpcy5rZXksIHRoaXMudmFsdWUpIHsKICAgIGtleT8ucGFyZW50ID0gdGhpczsKICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KFRyZWVWaXNpdG9yIHYpID0+IHYudmlzaXRNYXBFbnRyeSh0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGtleT8uYWNjZXB0KHYpOwogICAgdmFsdWU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChrZXkgIT0gbnVsbCkgewogICAgICBrZXkgPSBrZXkuYWNjZXB0KHYpOwogICAgICBrZXk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB2YWx1ZSA9IHZhbHVlLmFjY2VwdCh2KTsKICAgICAgdmFsdWU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gRXhwcmVzc2lvbiBvZiBmb3JtIGBhd2FpdCB4YC4KY2xhc3MgQXdhaXRFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRXhwcmVzc2lvbiBvcGVyYW5kOwoKICBBd2FpdEV4cHJlc3Npb24odGhpcy5vcGVyYW5kKSB7CiAgICBvcGVyYW5kPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy51bmZ1dHVyZVR5cGUob3BlcmFuZC5nZXRTdGF0aWNUeXBlKHR5cGVzKSk7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdEF3YWl0RXhwcmVzc2lvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRBd2FpdEV4cHJlc3Npb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIG9wZXJhbmQ/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChvcGVyYW5kICE9IG51bGwpIHsKICAgICAgb3BlcmFuZCA9IG9wZXJhbmQuYWNjZXB0KHYpOwogICAgICBvcGVyYW5kPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIENvbW1vbiBzdXBlci1pbnRlcmZhY2UgZm9yIFtGdW5jdGlvbkV4cHJlc3Npb25dIGFuZCBbRnVuY3Rpb25EZWNsYXJhdGlvbl0uCmFic3RyYWN0IGNsYXNzIExvY2FsRnVuY3Rpb24gaW1wbGVtZW50cyBUcmVlTm9kZSB7CiAgRnVuY3Rpb25Ob2RlIGdldCBmdW5jdGlvbjsKfQoKLy8vIEV4cHJlc3Npb24gb2YgZm9ybSBgKHgseSkgPT4gLi4uYCBvciBgKHgseSkgeyAuLi4gfWAKLy8vCi8vLyBUaGUgYXJyb3ctYm9keSBmb3JtIGA9PiBlYCBpcyBkZXN1Z2FyZWQgaW50byBgcmV0dXJuIGU7YC4KY2xhc3MgRnVuY3Rpb25FeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiBpbXBsZW1lbnRzIExvY2FsRnVuY3Rpb24gewogIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbjsKCiAgRnVuY3Rpb25FeHByZXNzaW9uKHRoaXMuZnVuY3Rpb24pIHsKICAgIGZ1bmN0aW9uPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IGZ1bmN0aW9uLmZ1bmN0aW9uVHlwZTsKCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yIHYpID0+IHYudmlzaXRGdW5jdGlvbkV4cHJlc3Npb24odGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBmdW5jdGlvbj8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGZ1bmN0aW9uICE9IG51bGwpIHsKICAgICAgZnVuY3Rpb24gPSBmdW5jdGlvbi5hY2NlcHQodik7CiAgICAgIGZ1bmN0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKY2xhc3MgQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgQ29uc3RhbnQgY29uc3RhbnQ7CiAgRGFydFR5cGUgdHlwZTsKCiAgQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMuY29uc3RhbnQsIFt0aGlzLnR5cGUgPSBjb25zdCBEeW5hbWljVHlwZSgpXSkgewogICAgYXNzZXJ0KGNvbnN0YW50ICE9IG51bGwpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGU7CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdENvbnN0YW50RXhwcmVzc2lvbih0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgY29uc3RhbnQ/LmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIHR5cGU/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGNvbnN0YW50ID0gdi52aXNpdENvbnN0YW50KGNvbnN0YW50KTsKICAgIHR5cGUgPSB2LnZpc2l0RGFydFR5cGUodHlwZSk7CiAgfQp9CgovLy8gU3ludGhldGljIGV4cHJlc3Npb24gb2YgZm9ybSBgbGV0IHYgPSB4IGluIHlgCmNsYXNzIExldCBleHRlbmRzIEV4cHJlc3Npb24gewogIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGU7IC8vIE11c3QgaGF2ZSBhbiBpbml0aWFsaXplci4KICBFeHByZXNzaW9uIGJvZHk7CgogIExldCh0aGlzLnZhcmlhYmxlLCB0aGlzLmJvZHkpIHsKICAgIHZhcmlhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgYm9keT8ucGFyZW50ID0gdGhpczsKICB9CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiBib2R5LmdldFN0YXRpY1R5cGUodHlwZXMpOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdExldCh0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRMZXQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZhcmlhYmxlPy5hY2NlcHQodik7CiAgICBib2R5Py5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAodmFyaWFibGUgIT0gbnVsbCkgewogICAgICB2YXJpYWJsZSA9IHZhcmlhYmxlLmFjY2VwdCh2KTsKICAgICAgdmFyaWFibGU/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAoYm9keSAhPSBudWxsKSB7CiAgICAgIGJvZHkgPSBib2R5LmFjY2VwdCh2KTsKICAgICAgYm9keT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCmNsYXNzIEJsb2NrRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewogIEJsb2NrIGJvZHk7CiAgRXhwcmVzc2lvbiB2YWx1ZTsKCiAgQmxvY2tFeHByZXNzaW9uKHRoaXMuYm9keSwgdGhpcy52YWx1ZSkgewogICAgYm9keT8ucGFyZW50ID0gdGhpczsKICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRGFydFR5cGUgZ2V0U3RhdGljVHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHZhbHVlLmdldFN0YXRpY1R5cGUodHlwZXMpOwoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdEJsb2NrRXhwcmVzc2lvbih0aGlzKTsKICBhY2NlcHQxKEV4cHJlc3Npb25WaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRCbG9ja0V4cHJlc3Npb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICAgIHZhbHVlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoYm9keSAhPSBudWxsKSB7CiAgICAgIGJvZHkgPSBib2R5LmFjY2VwdCh2KTsKICAgICAgYm9keT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHZhbHVlID0gdmFsdWUuYWNjZXB0KHYpOwogICAgICB2YWx1ZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBBdHRlbXB0IHRvIGxvYWQgdGhlIGxpYnJhcnkgcmVmZXJyZWQgdG8gYnkgYSBkZWZlcnJlZCBpbXBvcnQuCi8vLwovLy8gVGhpcyBpbnN0cnVjdGlvbiBpcyBjb25jZXJuZWQgd2l0aDoKLy8vIC0ga2VlcGluZyB0cmFjayB3aGV0aGVyIHRoZSBkZWZlcnJlZCBpbXBvcnQgaXMgbWFya2VkIGFzICdsb2FkZWQnCi8vLyAtIGtlZXBpbmcgdHJhY2sgb2Ygd2hldGhlciB0aGUgbGlicmFyeSBjb2RlIGhhcyBhbHJlYWR5IGJlZW4gZG93bmxvYWRlZAovLy8gLSBhY3R1YWxseSBkb3dubG9hZGluZyBhbmQgbGlua2luZyB0aGUgbGlicmFyeQovLy8KLy8vIFNob3VsZCByZXR1cm4gYSBmdXR1cmUuICBUaGUgdmFsdWUgaW4gdGhpcyBmdXR1cmUgd2lsbCBiZSB0aGUgc2FtZSB2YWx1ZQovLy8gc2VlbiBieSBjYWxsZXJzIG9mIGBsb2FkTGlicmFyeWAgZnVuY3Rpb25zLgovLy8KLy8vIE9uIGJhY2tlbmRzIHRoYXQgbGluayB0aGUgZW50aXJlIHByb2dyYW0gZWFnZXJseSwgdGhpcyBpbnN0cnVjdGlvbiBuZWVkcwovLy8gdG8gbWFyayB0aGUgZGVmZXJyZWQgaW1wb3J0IGFzICdsb2FkZWQnIGFuZCByZXR1cm4gYSBmdXR1cmUuCmNsYXNzIExvYWRMaWJyYXJ5IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgLy8vIFJlZmVyZW5jZSB0byBhIGRlZmVycmVkIGltcG9ydCBpbiB0aGUgZW5jbG9zaW5nIGxpYnJhcnkuCiAgTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0OwoKICBMb2FkTGlicmFyeSh0aGlzLmltcG9ydCk7CgogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuZnV0dXJlVHlwZShjb25zdCBEeW5hbWljVHlwZSgpKTsKICB9CgogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvciB2KSA9PiB2LnZpc2l0TG9hZExpYnJhcnkodGhpcyk7CiAgYWNjZXB0MShFeHByZXNzaW9uVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0TG9hZExpYnJhcnkodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikge30KfQoKLy8vIENoZWNrcyB0aGF0IHRoZSBnaXZlbiBkZWZlcnJlZCBpbXBvcnQgaGFzIGJlZW4gbWFya2VkIGFzICdsb2FkZWQnLgpjbGFzcyBDaGVja0xpYnJhcnlJc0xvYWRlZCBleHRlbmRzIEV4cHJlc3Npb24gewogIC8vLyBSZWZlcmVuY2UgdG8gYSBkZWZlcnJlZCBpbXBvcnQgaW4gdGhlIGVuY2xvc2luZyBsaWJyYXJ5LgogIExpYnJhcnlEZXBlbmRlbmN5IGltcG9ydDsKCiAgQ2hlY2tMaWJyYXJ5SXNMb2FkZWQodGhpcy5pbXBvcnQpOwoKICBEYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLm9iamVjdFR5cGU7CiAgfQoKICBhY2NlcHQoRXhwcmVzc2lvblZpc2l0b3IgdikgPT4gdi52aXNpdENoZWNrTGlicmFyeUlzTG9hZGVkKHRoaXMpOwogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdENoZWNrTGlicmFyeUlzTG9hZGVkKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHt9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQVRFTUVOVFMKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpAY29xCmFic3RyYWN0IGNsYXNzIFN0YXRlbWVudCBleHRlbmRzIFRyZWVOb2RlIHsKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZyk7Cn0KCkBjb3EKY2xhc3MgRXhwcmVzc2lvblN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgRXhwcmVzc2lvbiBleHByZXNzaW9uOwoKICBFeHByZXNzaW9uU3RhdGVtZW50KHRoaXMuZXhwcmVzc2lvbikgewogICAgZXhwcmVzc2lvbj8ucGFyZW50ID0gdGhpczsKICB9CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KHRoaXMpOwogIGFjY2VwdDEoU3RhdGVtZW50VmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0RXhwcmVzc2lvblN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgZXhwcmVzc2lvbj8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5hY2NlcHQodik7CiAgICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgpAY29xCmNsYXNzIEJsb2NrIGV4dGVuZHMgU3RhdGVtZW50IHsKICBmaW5hbCBMaXN0PFN0YXRlbWVudD4gc3RhdGVtZW50czsKCiAgQmxvY2sodGhpcy5zdGF0ZW1lbnRzKSB7CiAgICAvLyBFbnN1cmUgc3RhdGVtZW50cyBpcyBtdXRhYmxlLgogICAgYXNzZXJ0KChzdGF0ZW1lbnRzCiAgICAgICAgICAuLmFkZChudWxsKQogICAgICAgICAgLi5yZW1vdmVMYXN0KCkpICE9CiAgICAgICAgbnVsbCk7CiAgICBzZXRQYXJlbnRzKHN0YXRlbWVudHMsIHRoaXMpOwogIH0KCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdEJsb2NrKHRoaXMpOwogIGFjY2VwdDEoU3RhdGVtZW50VmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0QmxvY2sodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChzdGF0ZW1lbnRzLCB2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHRyYW5zZm9ybUxpc3Qoc3RhdGVtZW50cywgdiwgdGhpcyk7CiAgfQoKICB2b2lkIGFkZFN0YXRlbWVudChTdGF0ZW1lbnQgbm9kZSkgewogICAgc3RhdGVtZW50cy5hZGQobm9kZSk7CiAgICBub2RlLnBhcmVudCA9IHRoaXM7CiAgfQp9CgovLy8gQSBibG9jayB0aGF0IGlzIG9ubHkgZXhlY3V0ZWQgd2hlbiBhc3NlcnRzIGFyZSBlbmFibGVkLgovLy8KLy8vIFNvbWV0aW1lcyBhcmJpdHJhcnkgc3RhdGVtZW50cyBtdXN0IGJlIGd1YXJkZWQgYnkgd2hldGhlciBhc3NlcnRzIGFyZQovLy8gZW5hYmxlZC4gIEZvciBleGFtcGxlLCB3aGVuIGEgc3ViZXhwcmVzc2lvbiBvZiBhbiBhc3NlcnQgaW4gYXN5bmMgY29kZSBpcwovLy8gbGluZWFyaXplZCBhbmQgbmFtZWQsIGl0IGNhbiBwcm9kdWNlIHN1Y2ggYSBibG9jayBvZiBzdGF0ZW1lbnRzLgpjbGFzcyBBc3NlcnRCbG9jayBleHRlbmRzIFN0YXRlbWVudCB7CiAgZmluYWwgTGlzdDxTdGF0ZW1lbnQ+IHN0YXRlbWVudHM7CgogIEFzc2VydEJsb2NrKHRoaXMuc3RhdGVtZW50cykgewogICAgLy8gRW5zdXJlIHN0YXRlbWVudHMgaXMgbXV0YWJsZS4KICAgIGFzc2VydCgoc3RhdGVtZW50cwogICAgICAgICAgLi5hZGQobnVsbCkKICAgICAgICAgIC4ucmVtb3ZlTGFzdCgpKSAhPQogICAgICAgIG51bGwpOwogICAgc2V0UGFyZW50cyhzdGF0ZW1lbnRzLCB0aGlzKTsKICB9CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRBc3NlcnRCbG9jayh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEFzc2VydEJsb2NrKHRoaXMsIGFyZyk7CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHRyYW5zZm9ybUxpc3Qoc3RhdGVtZW50cywgdiwgdGhpcyk7CiAgfQoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KHN0YXRlbWVudHMsIHYpOwogIH0KCiAgdm9pZCBhZGRTdGF0ZW1lbnQoU3RhdGVtZW50IG5vZGUpIHsKICAgIHN0YXRlbWVudHMuYWRkKG5vZGUpOwogICAgbm9kZS5wYXJlbnQgPSB0aGlzOwogIH0KfQoKY2xhc3MgRW1wdHlTdGF0ZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRFbXB0eVN0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEVtcHR5U3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHt9Cn0KCmNsYXNzIEFzc2VydFN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgRXhwcmVzc2lvbiBjb25kaXRpb247CiAgRXhwcmVzc2lvbiBtZXNzYWdlOyAvLyBNYXkgYmUgbnVsbC4KICBpbnQgY29uZGl0aW9uU3RhcnRPZmZzZXQ7CiAgaW50IGNvbmRpdGlvbkVuZE9mZnNldDsKCiAgQXNzZXJ0U3RhdGVtZW50KHRoaXMuY29uZGl0aW9uLAogICAgICB7dGhpcy5tZXNzYWdlLCB0aGlzLmNvbmRpdGlvblN0YXJ0T2Zmc2V0LCB0aGlzLmNvbmRpdGlvbkVuZE9mZnNldH0pIHsKICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIG1lc3NhZ2U/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0QXNzZXJ0U3RhdGVtZW50KHRoaXMpOwogIGFjY2VwdDEoU3RhdGVtZW50VmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0QXNzZXJ0U3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBjb25kaXRpb24/LmFjY2VwdCh2KTsKICAgIG1lc3NhZ2U/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChjb25kaXRpb24gIT0gbnVsbCkgewogICAgICBjb25kaXRpb24gPSBjb25kaXRpb24uYWNjZXB0KHYpOwogICAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAobWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLmFjY2VwdCh2KTsKICAgICAgbWVzc2FnZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBBIHRhcmdldCBvZiBhIFtCcmVha10gc3RhdGVtZW50LgovLy8KLy8vIFRoZSBsYWJlbCBpdHNlbGYgaGFzIG5vIG5hbWU7IGJyZWFrcyByZWZlcmVuY2UgdGhlIHN0YXRlbWVudCBkaXJlY3RseS4KLy8vCi8vLyBUaGUgZnJvbnRlbmQgZG9lcyBub3QgZ2VuZXJhdGUgbGFiZWxlZCBzdGF0ZW1lbnRzIHdpdGhvdXQgdXNlcy4KY2xhc3MgTGFiZWxlZFN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgU3RhdGVtZW50IGJvZHk7CgogIExhYmVsZWRTdGF0ZW1lbnQodGhpcy5ib2R5KSB7CiAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdExhYmVsZWRTdGF0ZW1lbnQodGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRMYWJlbGVkU3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBib2R5Py5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoYm9keSAhPSBudWxsKSB7CiAgICAgIGJvZHkgPSBib2R5LmFjY2VwdCh2KTsKICAgICAgYm9keT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBCcmVha3Mgb3V0IG9mIGFuIGVuY2xvc2luZyBbTGFiZWxlZFN0YXRlbWVudF0uCi8vLwovLy8gQm90aCBgYnJlYWtgIGFuZCBsb29wIGBjb250aW51ZWAgc3RhdGVtZW50cyBhcmUgdHJhbnNsYXRlZCBpbnRvIHRoaXMgbm9kZS4KLy8vCi8vLyBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBsb29wIHdpdGggYSBgY29udGludWVgIHdpbGwgYmUgZGVzdWdhcmVkOgovLy8KLy8vICAgICB3aGlsZSh4KSB7Ci8vLyAgICAgICBpZiAoeSkgY29udGludWU7Ci8vLyAgICAgICBCT0RZJwovLy8gICAgIH0KLy8vCi8vLyAgICAgPT0+Ci8vLwovLy8gICAgIHdoaWxlKHgpIHsKLy8vICAgICAgIEw6IHsKLy8vICAgICAgICAgaWYgKHkpIGJyZWFrIEw7Ci8vLyAgICAgICAgIEJPRFknCi8vLyAgICAgICB9Ci8vLyAgICAgfQovLwpjbGFzcyBCcmVha1N0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgTGFiZWxlZFN0YXRlbWVudCB0YXJnZXQ7CgogIEJyZWFrU3RhdGVtZW50KHRoaXMudGFyZ2V0KTsKCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdEJyZWFrU3RhdGVtZW50KHRoaXMpOwogIGFjY2VwdDEoU3RhdGVtZW50VmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0QnJlYWtTdGF0ZW1lbnQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikge30KfQoKY2xhc3MgV2hpbGVTdGF0ZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIEV4cHJlc3Npb24gY29uZGl0aW9uOwogIFN0YXRlbWVudCBib2R5OwoKICBXaGlsZVN0YXRlbWVudCh0aGlzLmNvbmRpdGlvbiwgdGhpcy5ib2R5KSB7CiAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdFdoaWxlU3RhdGVtZW50KHRoaXMpOwogIGFjY2VwdDEoU3RhdGVtZW50VmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0V2hpbGVTdGF0ZW1lbnQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGNvbmRpdGlvbj8uYWNjZXB0KHYpOwogICAgYm9keT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5hY2NlcHQodik7CiAgICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKY2xhc3MgRG9TdGF0ZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIFN0YXRlbWVudCBib2R5OwogIEV4cHJlc3Npb24gY29uZGl0aW9uOwoKICBEb1N0YXRlbWVudCh0aGlzLmJvZHksIHRoaXMuY29uZGl0aW9uKSB7CiAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdERvU3RhdGVtZW50KHRoaXMpOwogIGFjY2VwdDEoU3RhdGVtZW50VmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0RG9TdGF0ZW1lbnQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICAgIGNvbmRpdGlvbj8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uLmFjY2VwdCh2KTsKICAgICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKY2xhc3MgRm9yU3RhdGVtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBmaW5hbCBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlczsgLy8gTWF5IGJlIGVtcHR5LCBidXQgbm90IG51bGwuCiAgRXhwcmVzc2lvbiBjb25kaXRpb247IC8vIE1heSBiZSBudWxsLgogIGZpbmFsIExpc3Q8RXhwcmVzc2lvbj4gdXBkYXRlczsgLy8gTWF5IGJlIGVtcHR5LCBidXQgbm90IG51bGwuCiAgU3RhdGVtZW50IGJvZHk7CgogIEZvclN0YXRlbWVudCh0aGlzLnZhcmlhYmxlcywgdGhpcy5jb25kaXRpb24sIHRoaXMudXBkYXRlcywgdGhpcy5ib2R5KSB7CiAgICBzZXRQYXJlbnRzKHZhcmlhYmxlcywgdGhpcyk7CiAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICBzZXRQYXJlbnRzKHVwZGF0ZXMsIHRoaXMpOwogICAgYm9keT8ucGFyZW50ID0gdGhpczsKICB9CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRGb3JTdGF0ZW1lbnQodGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRGb3JTdGF0ZW1lbnQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdCh2YXJpYWJsZXMsIHYpOwogICAgY29uZGl0aW9uPy5hY2NlcHQodik7CiAgICB2aXNpdExpc3QodXBkYXRlcywgdik7CiAgICBib2R5Py5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KHZhcmlhYmxlcywgdiwgdGhpcyk7CiAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uLmFjY2VwdCh2KTsKICAgICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgdHJhbnNmb3JtTGlzdCh1cGRhdGVzLCB2LCB0aGlzKTsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKY2xhc3MgRm9ySW5TdGF0ZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIC8vLyBPZmZzZXQgaW4gdGhlIHNvdXJjZSBmaWxlIGl0IGNvbWVzIGZyb20uCiAgLy8vCiAgLy8vIFZhbGlkIHZhbHVlcyBhcmUgZnJvbSAwIGFuZCB1cCwgb3IgLTEgKFtUcmVlTm9kZS5ub09mZnNldF0pIGlmIHRoZSBmaWxlCiAgLy8vIG9mZnNldCBpcyBub3QgYXZhaWxhYmxlICh0aGlzIGlzIHRoZSBkZWZhdWx0IGlmIG5vbmUgaXMgc3BlY2lmaWNhbGx5IHNldCkuCiAgaW50IGJvZHlPZmZzZXQgPSBUcmVlTm9kZS5ub09mZnNldDsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZTsgLy8gSGFzIG5vIGluaXRpYWxpemVyLgogIEV4cHJlc3Npb24gaXRlcmFibGU7CiAgU3RhdGVtZW50IGJvZHk7CiAgYm9vbCBpc0FzeW5jOyAvLyBUcnVlIGlmIHRoaXMgaXMgYW4gJ2F3YWl0IGZvcicgbG9vcC4KCiAgRm9ySW5TdGF0ZW1lbnQodGhpcy52YXJpYWJsZSwgdGhpcy5pdGVyYWJsZSwgdGhpcy5ib2R5LAogICAgICB7dGhpcy5pc0FzeW5jOiBmYWxzZX0pIHsKICAgIHZhcmlhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgaXRlcmFibGU/LnBhcmVudCA9IHRoaXM7CiAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdEZvckluU3RhdGVtZW50KHRoaXMpOwogIGFjY2VwdDEoU3RhdGVtZW50VmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0Rm9ySW5TdGF0ZW1lbnQodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZhcmlhYmxlPy5hY2NlcHQodik7CiAgICBpdGVyYWJsZT8uYWNjZXB0KHYpOwogICAgYm9keT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHZhcmlhYmxlICE9IG51bGwpIHsKICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZS5hY2NlcHQodik7CiAgICAgIHZhcmlhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKGl0ZXJhYmxlICE9IG51bGwpIHsKICAgICAgaXRlcmFibGUgPSBpdGVyYWJsZS5hY2NlcHQodik7CiAgICAgIGl0ZXJhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gU3RhdGVtZW50IG9mIGZvcm0gYHN3aXRjaCAoZSkgeyBjYXNlIHg6IC4uLiB9YC4KLy8vCi8vLyBBZGphY2VudCBjYXNlIGNsYXVzZXMgaGF2ZSBiZWVuIG1lcmdlZCBpbnRvIGEgc2luZ2xlIFtTd2l0Y2hDYXNlXS4gQSBydW50aW1lCi8vLyBleGNlcHRpb24gbXVzdCBiZSB0aHJvd24gaWYgb25lIFtTd2l0Y2hDYXNlXSBmYWxscyB0aHJvdWdoIHRvIGFub3RoZXIgY2FzZS4KY2xhc3MgU3dpdGNoU3RhdGVtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBFeHByZXNzaW9uIGV4cHJlc3Npb247CiAgZmluYWwgTGlzdDxTd2l0Y2hDYXNlPiBjYXNlczsKCiAgU3dpdGNoU3RhdGVtZW50KHRoaXMuZXhwcmVzc2lvbiwgdGhpcy5jYXNlcykgewogICAgZXhwcmVzc2lvbj8ucGFyZW50ID0gdGhpczsKICAgIHNldFBhcmVudHMoY2FzZXMsIHRoaXMpOwogIH0KCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdFN3aXRjaFN0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFN3aXRjaFN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgZXhwcmVzc2lvbj8uYWNjZXB0KHYpOwogICAgdmlzaXRMaXN0KGNhc2VzLCB2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChleHByZXNzaW9uICE9IG51bGwpIHsKICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uYWNjZXB0KHYpOwogICAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgdHJhbnNmb3JtTGlzdChjYXNlcywgdiwgdGhpcyk7CiAgfQp9CgovLy8gQSBncm91cCBvZiBgY2FzZWAgY2xhdXNlcyBhbmQvb3IgYSBgZGVmYXVsdGAgY2xhdXNlLgovLy8KLy8vIFRoaXMgaXMgYSBwb3RlbnRpYWwgdGFyZ2V0IG9mIFtDb250aW51ZVN3aXRjaFN0YXRlbWVudF0uCmNsYXNzIFN3aXRjaENhc2UgZXh0ZW5kcyBUcmVlTm9kZSB7CiAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9uczsKICBmaW5hbCBMaXN0PGludD4gZXhwcmVzc2lvbk9mZnNldHM7CiAgU3RhdGVtZW50IGJvZHk7CiAgYm9vbCBpc0RlZmF1bHQ7CgogIFN3aXRjaENhc2UodGhpcy5leHByZXNzaW9ucywgdGhpcy5leHByZXNzaW9uT2Zmc2V0cywgdGhpcy5ib2R5LAogICAgICB7dGhpcy5pc0RlZmF1bHQ6IGZhbHNlfSkgewogICAgc2V0UGFyZW50cyhleHByZXNzaW9ucywgdGhpcyk7CiAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogIH0KCiAgU3dpdGNoQ2FzZS5kZWZhdWx0Q2FzZSh0aGlzLmJvZHkpCiAgICAgIDogaXNEZWZhdWx0ID0gdHJ1ZSwKICAgICAgICBleHByZXNzaW9ucyA9IDxFeHByZXNzaW9uPltdLAogICAgICAgIGV4cHJlc3Npb25PZmZzZXRzID0gPGludD5bXSB7CiAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogIH0KCiAgU3dpdGNoQ2FzZS5lbXB0eSgpCiAgICAgIDogZXhwcmVzc2lvbnMgPSA8RXhwcmVzc2lvbj5bXSwKICAgICAgICBleHByZXNzaW9uT2Zmc2V0cyA9IDxpbnQ+W10sCiAgICAgICAgYm9keSA9IG51bGwsCiAgICAgICAgaXNEZWZhdWx0ID0gZmFsc2U7CgogIGFjY2VwdChUcmVlVmlzaXRvciB2KSA9PiB2LnZpc2l0U3dpdGNoQ2FzZSh0aGlzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdChleHByZXNzaW9ucywgdik7CiAgICBib2R5Py5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGV4cHJlc3Npb25zLCB2LCB0aGlzKTsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEp1bXAgdG8gYSBjYXNlIGluIGFuIGVuY2xvc2luZyBzd2l0Y2guCmNsYXNzIENvbnRpbnVlU3dpdGNoU3RhdGVtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBTd2l0Y2hDYXNlIHRhcmdldDsKCiAgQ29udGludWVTd2l0Y2hTdGF0ZW1lbnQodGhpcy50YXJnZXQpOwoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0Q29udGludWVTd2l0Y2hTdGF0ZW1lbnQodGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+CiAgICAgIHYudmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7fQp9CgpjbGFzcyBJZlN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgRXhwcmVzc2lvbiBjb25kaXRpb247CiAgU3RhdGVtZW50IHRoZW47CiAgU3RhdGVtZW50IG90aGVyd2lzZTsKCiAgSWZTdGF0ZW1lbnQodGhpcy5jb25kaXRpb24sIHRoaXMudGhlbiwgdGhpcy5vdGhlcndpc2UpIHsKICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIHRoZW4/LnBhcmVudCA9IHRoaXM7CiAgICBvdGhlcndpc2U/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0SWZTdGF0ZW1lbnQodGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRJZlN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgY29uZGl0aW9uPy5hY2NlcHQodik7CiAgICB0aGVuPy5hY2NlcHQodik7CiAgICBvdGhlcndpc2U/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmIChjb25kaXRpb24gIT0gbnVsbCkgewogICAgICBjb25kaXRpb24gPSBjb25kaXRpb24uYWNjZXB0KHYpOwogICAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAodGhlbiAhPSBudWxsKSB7CiAgICAgIHRoZW4gPSB0aGVuLmFjY2VwdCh2KTsKICAgICAgdGhlbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChvdGhlcndpc2UgIT0gbnVsbCkgewogICAgICBvdGhlcndpc2UgPSBvdGhlcndpc2UuYWNjZXB0KHYpOwogICAgICBvdGhlcndpc2U/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgpAY29xCmNsYXNzIFJldHVyblN0YXRlbWVudCBleHRlbmRzIFN0YXRlbWVudCB7CiAgRXhwcmVzc2lvbiBleHByZXNzaW9uOyAvLyBNYXkgYmUgbnVsbC4KCiAgUmV0dXJuU3RhdGVtZW50KFt0aGlzLmV4cHJlc3Npb25dKSB7CiAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdFJldHVyblN0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFJldHVyblN0YXRlbWVudCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgZXhwcmVzc2lvbj8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi5hY2NlcHQodik7CiAgICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgpjbGFzcyBUcnlDYXRjaCBleHRlbmRzIFN0YXRlbWVudCB7CiAgU3RhdGVtZW50IGJvZHk7CiAgTGlzdDxDYXRjaD4gY2F0Y2hlczsKICBib29sIGlzU3ludGhldGljOwoKICBUcnlDYXRjaCh0aGlzLmJvZHksIHRoaXMuY2F0Y2hlcywge3RoaXMuaXNTeW50aGV0aWM6IGZhbHNlfSkgewogICAgYm9keT8ucGFyZW50ID0gdGhpczsKICAgIHNldFBhcmVudHMoY2F0Y2hlcywgdGhpcyk7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0VHJ5Q2F0Y2godGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRUcnlDYXRjaCh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgYm9keT8uYWNjZXB0KHYpOwogICAgdmlzaXRMaXN0KGNhdGNoZXMsIHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICB0cmFuc2Zvcm1MaXN0KGNhdGNoZXMsIHYsIHRoaXMpOwogIH0KfQoKY2xhc3MgQ2F0Y2ggZXh0ZW5kcyBUcmVlTm9kZSB7CiAgRGFydFR5cGUgZ3VhcmQ7IC8vIE5vdCBudWxsLCBkZWZhdWx0cyB0byBkeW5hbWljLgogIFZhcmlhYmxlRGVjbGFyYXRpb24gZXhjZXB0aW9uOyAvLyBNYXkgYmUgbnVsbC4KICBWYXJpYWJsZURlY2xhcmF0aW9uIHN0YWNrVHJhY2U7IC8vIE1heSBiZSBudWxsLgogIFN0YXRlbWVudCBib2R5OwoKICBDYXRjaCh0aGlzLmV4Y2VwdGlvbiwgdGhpcy5ib2R5LAogICAgICB7dGhpcy5ndWFyZDogY29uc3QgRHluYW1pY1R5cGUoKSwgdGhpcy5zdGFja1RyYWNlfSkgewogICAgYXNzZXJ0KGd1YXJkICE9IG51bGwpOwogICAgZXhjZXB0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgc3RhY2tUcmFjZT8ucGFyZW50ID0gdGhpczsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoVHJlZVZpc2l0b3IgdikgPT4gdi52aXNpdENhdGNoKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgZ3VhcmQ/LmFjY2VwdCh2KTsKICAgIGV4Y2VwdGlvbj8uYWNjZXB0KHYpOwogICAgc3RhY2tUcmFjZT8uYWNjZXB0KHYpOwogICAgYm9keT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgZ3VhcmQgPSB2LnZpc2l0RGFydFR5cGUoZ3VhcmQpOwogICAgaWYgKGV4Y2VwdGlvbiAhPSBudWxsKSB7CiAgICAgIGV4Y2VwdGlvbiA9IGV4Y2VwdGlvbi5hY2NlcHQodik7CiAgICAgIGV4Y2VwdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChzdGFja1RyYWNlICE9IG51bGwpIHsKICAgICAgc3RhY2tUcmFjZSA9IHN0YWNrVHJhY2UuYWNjZXB0KHYpOwogICAgICBzdGFja1RyYWNlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgpjbGFzcyBUcnlGaW5hbGx5IGV4dGVuZHMgU3RhdGVtZW50IHsKICBTdGF0ZW1lbnQgYm9keTsKICBTdGF0ZW1lbnQgZmluYWxpemVyOwoKICBUcnlGaW5hbGx5KHRoaXMuYm9keSwgdGhpcy5maW5hbGl6ZXIpIHsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICBmaW5hbGl6ZXI/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0VHJ5RmluYWxseSh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFRyeUZpbmFsbHkodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICAgIGZpbmFsaXplcj8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAoZmluYWxpemVyICE9IG51bGwpIHsKICAgICAgZmluYWxpemVyID0gZmluYWxpemVyLmFjY2VwdCh2KTsKICAgICAgZmluYWxpemVyPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIFN0YXRlbWVudCBvZiBmb3JtIGB5aWVsZCB4YCBvciBgeWllbGQqIHhgLgovLy8KLy8vIEZvciBuYXRpdmUgeWllbGQgc2VtYW50aWNzIHNlZSBgQXN5bmNNYXJrZXIuU3luY1lpZWxkaW5nYC4KY2xhc3MgWWllbGRTdGF0ZW1lbnQgZXh0ZW5kcyBTdGF0ZW1lbnQgewogIEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKICBpbnQgZmxhZ3MgPSAwOwoKICBZaWVsZFN0YXRlbWVudCh0aGlzLmV4cHJlc3Npb24sCiAgICAgIHtib29sIGlzWWllbGRTdGFyOiBmYWxzZSwgYm9vbCBpc05hdGl2ZTogZmFsc2V9KSB7CiAgICBleHByZXNzaW9uPy5wYXJlbnQgPSB0aGlzOwogICAgdGhpcy5pc1lpZWxkU3RhciA9IGlzWWllbGRTdGFyOwogICAgdGhpcy5pc05hdGl2ZSA9IGlzTmF0aXZlOwogIH0KCiAgc3RhdGljIGNvbnN0IGludCBGbGFnWWllbGRTdGFyID0gMSA8PCAwOwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ05hdGl2ZSA9IDEgPDwgMTsKCiAgYm9vbCBnZXQgaXNZaWVsZFN0YXIgPT4gZmxhZ3MgJiBGbGFnWWllbGRTdGFyICE9IDA7CiAgYm9vbCBnZXQgaXNOYXRpdmUgPT4gZmxhZ3MgJiBGbGFnTmF0aXZlICE9IDA7CgogIHZvaWQgc2V0IGlzWWllbGRTdGFyKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnWWllbGRTdGFyKSA6IChmbGFncyAmIH5GbGFnWWllbGRTdGFyKTsKICB9CgogIHZvaWQgc2V0IGlzTmF0aXZlKGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnTmF0aXZlKSA6IChmbGFncyAmIH5GbGFnTmF0aXZlKTsKICB9CgogIGFjY2VwdChTdGF0ZW1lbnRWaXNpdG9yIHYpID0+IHYudmlzaXRZaWVsZFN0YXRlbWVudCh0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdFlpZWxkU3RhdGVtZW50KHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBleHByZXNzaW9uPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoZXhwcmVzc2lvbiAhPSBudWxsKSB7CiAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLmFjY2VwdCh2KTsKICAgICAgZXhwcmVzc2lvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBEZWNsYXJhdGlvbiBvZiBhIGxvY2FsIHZhcmlhYmxlLgovLy8KLy8vIFRoaXMgbWF5IG9jY3VyIGFzIGEgc3RhdGVtZW50LCBidXQgaXMgYWxzbyB1c2VkIGluIHNldmVyYWwgbm9uLXN0YXRlbWVudAovLy8gY29udGV4dHMsIHN1Y2ggYXMgaW4gW0ZvclN0YXRlbWVudF0sIFtDYXRjaF0sIGFuZCBbRnVuY3Rpb25Ob2RlXS4KLy8vCi8vLyBXaGVuIHRoaXMgb2NjdXJzIGFzIGEgc3RhdGVtZW50LCBpdCBtdXN0IGJlIGEgZGlyZWN0IGNoaWxkIG9mIGEgW0Jsb2NrXS4KLy8KLy8gREVTSUdOIFRPRE86IFNob3VsZCB3ZSByZW1vdmUgdGhlICdmaW5hbCcgbW9kaWZpZXIgZnJvbSB2YXJpYWJsZXM/CkBjb3FyZWYKY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbiBleHRlbmRzIFN0YXRlbWVudCB7CiAgLy8vIE9mZnNldCBvZiB0aGUgZXF1YWxzIHNpZ24gaW4gdGhlIHNvdXJjZSBmaWxlIGl0IGNvbWVzIGZyb20uCiAgLy8vCiAgLy8vIFZhbGlkIHZhbHVlcyBhcmUgZnJvbSAwIGFuZCB1cCwgb3IgLTEgKFtUcmVlTm9kZS5ub09mZnNldF0pCiAgLy8vIGlmIHRoZSBlcXVhbHMgc2lnbiBvZmZzZXQgaXMgbm90IGF2YWlsYWJsZSAoZS5nLiBpZiBub3QgaW5pdGlhbGl6ZWQpCiAgLy8vICh0aGlzIGlzIHRoZSBkZWZhdWx0IGlmIG5vbmUgaXMgc3BlY2lmaWNhbGx5IHNldCkuCiAgaW50IGZpbGVFcXVhbHNPZmZzZXQgPSBUcmVlTm9kZS5ub09mZnNldDsKCiAgLy8vIExpc3Qgb2YgbWV0YWRhdGEgYW5ub3RhdGlvbnMgb24gdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBUaGlzIGRlZmF1bHRzIHRvIGFuIGltbXV0YWJsZSBlbXB0eSBsaXN0LiBVc2UgW2FkZEFubm90YXRpb25dIHRvIGFkZAogIC8vLyBhbm5vdGF0aW9ucyBpZiBuZWVkZWQuCiAgTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9ucyA9IGNvbnN0IDxFeHByZXNzaW9uPltdOwoKICAvLy8gRm9yIG5hbWVkIHBhcmFtZXRlcnMsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIHBhcmFtZXRlci4gTm8gdHdvIG5hbWVkCiAgLy8vIHBhcmFtZXRlcnMgKGluIHRoZSBzYW1lIHBhcmFtZXRlciBsaXN0KSBjYW4gaGF2ZSB0aGUgc2FtZSBuYW1lLgogIC8vLwogIC8vLyBJbiBhbGwgb3RoZXIgY2FzZXMsIHRoZSBuYW1lIGlzIGNvc21ldGljLCBtYXkgYmUgZW1wdHkgb3IgbnVsbCwKICAvLy8gYW5kIGlzIG5vdCBuZWNlc3NhcmlseSB1bmlxdWUuCiAgU3RyaW5nIG5hbWU7CiAgaW50IGZsYWdzID0gMDsKICBEYXJ0VHlwZSB0eXBlOyAvLyBOb3QgbnVsbCwgZGVmYXVsdHMgdG8gZHluYW1pYy4KCiAgLy8vIE9mZnNldCBvZiB0aGUgZGVjbGFyYXRpb24sIHNldCBhbmQgdXNlZCB3aGVuIHdyaXRpbmcgdGhlIGJpbmFyeS4KICBpbnQgYmluYXJ5T2Zmc2V0Tm9UYWcgPSAtMTsKCiAgLy8vIEZvciBsb2NhbHMsIHRoaXMgaXMgdGhlIGluaXRpYWwgdmFsdWUuCiAgLy8vIEZvciBwYXJhbWV0ZXJzLCB0aGlzIGlzIHRoZSBkZWZhdWx0IHZhbHVlLgogIC8vLwogIC8vLyBTaG91bGQgYmUgbnVsbCBpbiBvdGhlciBjYXNlcy4KICBAY29xb3B0CiAgRXhwcmVzc2lvbiBpbml0aWFsaXplcjsgLy8gTWF5IGJlIG51bGwuCgogIFZhcmlhYmxlRGVjbGFyYXRpb24odGhpcy5uYW1lLAogICAgICB7dGhpcy5pbml0aWFsaXplciwKICAgICAgdGhpcy50eXBlOiBjb25zdCBEeW5hbWljVHlwZSgpLAogICAgICBpbnQgZmxhZ3M6IC0xLAogICAgICBib29sIGlzRmluYWw6IGZhbHNlLAogICAgICBib29sIGlzQ29uc3Q6IGZhbHNlLAogICAgICBib29sIGlzRmllbGRGb3JtYWw6IGZhbHNlLAogICAgICBib29sIGlzQ292YXJpYW50OiBmYWxzZX0pIHsKICAgIGFzc2VydCh0eXBlICE9IG51bGwpOwogICAgaW5pdGlhbGl6ZXI/LnBhcmVudCA9IHRoaXM7CiAgICBpZiAoZmxhZ3MgIT0gLTEpIHsKICAgICAgdGhpcy5mbGFncyA9IGZsYWdzOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5pc0ZpbmFsID0gaXNGaW5hbDsKICAgICAgdGhpcy5pc0NvbnN0ID0gaXNDb25zdDsKICAgICAgdGhpcy5pc0ZpZWxkRm9ybWFsID0gaXNGaWVsZEZvcm1hbDsKICAgICAgdGhpcy5pc0NvdmFyaWFudCA9IGlzQ292YXJpYW50OwogICAgfQogIH0KCiAgLy8vIENyZWF0ZXMgYSBzeW50aGV0aWMgdmFyaWFibGUgd2l0aCB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBhcyBpbml0aWFsaXplci4KICBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKHRoaXMuaW5pdGlhbGl6ZXIsCiAgICAgIHtib29sIGlzRmluYWw6IHRydWUsCiAgICAgIGJvb2wgaXNDb25zdDogZmFsc2UsCiAgICAgIGJvb2wgaXNGaWVsZEZvcm1hbDogZmFsc2UsCiAgICAgIHRoaXMudHlwZTogY29uc3QgRHluYW1pY1R5cGUoKX0pIHsKICAgIGFzc2VydCh0eXBlICE9IG51bGwpOwogICAgaW5pdGlhbGl6ZXI/LnBhcmVudCA9IHRoaXM7CiAgICB0aGlzLmlzRmluYWwgPSBpc0ZpbmFsOwogICAgdGhpcy5pc0NvbnN0ID0gaXNDb25zdDsKICAgIHRoaXMuaXNGaWVsZEZvcm1hbCA9IGlzRmllbGRGb3JtYWw7CiAgfQoKICBzdGF0aWMgY29uc3QgaW50IEZsYWdGaW5hbCA9IDEgPDwgMDsgLy8gTXVzdCBtYXRjaCBzZXJpYWxpemVkIGJpdCBwb3NpdGlvbnMuCiAgc3RhdGljIGNvbnN0IGludCBGbGFnQ29uc3QgPSAxIDw8IDE7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnRmllbGRGb3JtYWwgPSAxIDw8IDI7CiAgc3RhdGljIGNvbnN0IGludCBGbGFnQ292YXJpYW50ID0gMSA8PCAzOwogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0luU2NvcGUgPSAxIDw8IDQ7IC8vIFRlbXBvcmFyeSBmbGFnIHVzZWQgYnkgdmVyaWZpZXIuCiAgc3RhdGljIGNvbnN0IGludCBGbGFnR2VuZXJpY0NvdmFyaWFudEltcGwgPSAxIDw8IDU7CgogIGJvb2wgZ2V0IGlzRmluYWwgPT4gZmxhZ3MgJiBGbGFnRmluYWwgIT0gMDsKICBib29sIGdldCBpc0NvbnN0ID0+IGZsYWdzICYgRmxhZ0NvbnN0ICE9IDA7CgogIC8vLyBXaGV0aGVyIHRoZSBwYXJhbWV0ZXIgaXMgZGVjbGFyZWQgd2l0aCB0aGUgYGNvdmFyaWFudGAga2V5d29yZC4KICBib29sIGdldCBpc0NvdmFyaWFudCA9PiBmbGFncyAmIEZsYWdDb3ZhcmlhbnQgIT0gMDsKCiAgLy8vIFdoZXRoZXIgdGhlIHZhcmlhYmxlIGlzIGRlY2xhcmVkIGFzIGEgZmllbGQgZm9ybWFsIHBhcmFtZXRlciBvZgogIC8vLyBhIGNvbnN0cnVjdG9yLgogIEBpbmZvcm1hdGl2ZQogIGJvb2wgZ2V0IGlzRmllbGRGb3JtYWwgPT4gZmxhZ3MgJiBGbGFnRmllbGRGb3JtYWwgIT0gMDsKCiAgLy8vIElmIHRoaXMgW1ZhcmlhYmxlRGVjbGFyYXRpb25dIGlzIGEgcGFyYW1ldGVyIG9mIGEgbWV0aG9kLCBpbmRpY2F0ZXMKICAvLy8gd2hldGhlciB0aGUgbWV0aG9kIGltcGxlbWVudGF0aW9uIG5lZWRzIHRvIGNvbnRhaW4gYSBydW50aW1lIHR5cGUgY2hlY2sgdG8KICAvLy8gZGVhbCB3aXRoIGdlbmVyaWMgY292YXJpYW5jZS4KICAvLy8KICAvLy8gV2hlbiBgdHJ1ZWAsIHJ1bnRpbWUgY2hlY2tzIG1heSBuZWVkIHRvIGJlIHBlcmZvcm1lZDsgc2VlCiAgLy8vIFtEaXNwYXRjaENhdGVnb3J5XSBmb3IgZGV0YWlscy4KICBib29sIGdldCBpc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0+IGZsYWdzICYgRmxhZ0dlbmVyaWNDb3ZhcmlhbnRJbXBsICE9IDA7CgogIHZvaWQgc2V0IGlzRmluYWwoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdGaW5hbCkgOiAoZmxhZ3MgJiB+RmxhZ0ZpbmFsKTsKICB9CgogIHZvaWQgc2V0IGlzQ29uc3QoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdDb25zdCkgOiAoZmxhZ3MgJiB+RmxhZ0NvbnN0KTsKICB9CgogIHZvaWQgc2V0IGlzQ292YXJpYW50KGJvb2wgdmFsdWUpIHsKICAgIGZsYWdzID0gdmFsdWUgPyAoZmxhZ3MgfCBGbGFnQ292YXJpYW50KSA6IChmbGFncyAmIH5GbGFnQ292YXJpYW50KTsKICB9CgogIEBpbmZvcm1hdGl2ZQogIHZvaWQgc2V0IGlzRmllbGRGb3JtYWwoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZSA/IChmbGFncyB8IEZsYWdGaWVsZEZvcm1hbCkgOiAoZmxhZ3MgJiB+RmxhZ0ZpZWxkRm9ybWFsKTsKICB9CgogIHZvaWQgc2V0IGlzR2VuZXJpY0NvdmFyaWFudEltcGwoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZQogICAgICAgID8gKGZsYWdzIHwgRmxhZ0dlbmVyaWNDb3ZhcmlhbnRJbXBsKQogICAgICAgIDogKGZsYWdzICYgfkZsYWdHZW5lcmljQ292YXJpYW50SW1wbCk7CiAgfQoKICB2b2lkIGFkZEFubm90YXRpb24oRXhwcmVzc2lvbiBhbm5vdGF0aW9uKSB7CiAgICBpZiAoYW5ub3RhdGlvbnMuaXNFbXB0eSkgewogICAgICBhbm5vdGF0aW9ucyA9IDxFeHByZXNzaW9uPltdOwogICAgfQogICAgYW5ub3RhdGlvbnMuYWRkKGFubm90YXRpb24uLnBhcmVudCA9IHRoaXMpOwogIH0KCiAgYWNjZXB0KFN0YXRlbWVudFZpc2l0b3IgdikgPT4gdi52aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24odGhpcyk7CiAgYWNjZXB0MShTdGF0ZW1lbnRWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKHRoaXMsIGFyZyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICB2aXNpdExpc3QoYW5ub3RhdGlvbnMsIHYpOwogICAgdHlwZT8uYWNjZXB0KHYpOwogICAgaW5pdGlhbGl6ZXI/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHRyYW5zZm9ybUxpc3QoYW5ub3RhdGlvbnMsIHYsIHRoaXMpOwogICAgdHlwZSA9IHYudmlzaXREYXJ0VHlwZSh0eXBlKTsKICAgIGlmIChpbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgIGluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXIuYWNjZXB0KHYpOwogICAgICBpbml0aWFsaXplcj8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIGEgcG9zc2libHkgc3ludGhlc2l6ZWQgbmFtZSBmb3IgdGhpcyB2YXJpYWJsZSwgY29uc2lzdGVudCB3aXRoCiAgLy8vIHRoZSBuYW1lcyB1c2VkIGFjcm9zcyBhbGwgW3RvU3RyaW5nXSBjYWxscy4KICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBkZWJ1Z1ZhcmlhYmxlRGVjbGFyYXRpb25OYW1lKHRoaXMpOwp9CgovLy8gRGVjbGFyYXRpb24gYSBsb2NhbCBmdW5jdGlvbi4KLy8vCi8vLyBUaGUgYm9keSBvZiB0aGUgZnVuY3Rpb24gbWF5IHVzZSBbdmFyaWFibGVdIGFzIGl0cyBzZWxmLXJlZmVyZW5jZS4KY2xhc3MgRnVuY3Rpb25EZWNsYXJhdGlvbiBleHRlbmRzIFN0YXRlbWVudCBpbXBsZW1lbnRzIExvY2FsRnVuY3Rpb24gewogIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGU7IC8vIElzIGZpbmFsIGFuZCBoYXMgbm8gaW5pdGlhbGl6ZXIuCiAgRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uOwoKICBGdW5jdGlvbkRlY2xhcmF0aW9uKHRoaXMudmFyaWFibGUsIHRoaXMuZnVuY3Rpb24pIHsKICAgIHZhcmlhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgZnVuY3Rpb24/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBhY2NlcHQoU3RhdGVtZW50VmlzaXRvciB2KSA9PiB2LnZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbih0aGlzKTsKICBhY2NlcHQxKFN0YXRlbWVudFZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24odGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZhcmlhYmxlPy5hY2NlcHQodik7CiAgICBmdW5jdGlvbj8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHZhcmlhYmxlICE9IG51bGwpIHsKICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZS5hY2NlcHQodik7CiAgICAgIHZhcmlhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKGZ1bmN0aW9uICE9IG51bGwpIHsKICAgICAgZnVuY3Rpb24gPSBmdW5jdGlvbi5hY2NlcHQodik7CiAgICAgIGZ1bmN0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1FUwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vLyBBIHB1YmxpYyBuYW1lLCBvciBhIHByaXZhdGUgbmFtZSBxdWFsaWZpZWQgYnkgYSBsaWJyYXJ5LgovLy8KLy8vIE5hbWVzIGFyZSBvbmx5IHVzZWQgZm9yIGV4cHJlc3Npb25zIHdpdGggZHluYW1pYyBkaXNwYXRjaCwgYXMgYWxsCi8vLyBzdGF0aWNhbGx5IHJlc29sdmVkIHJlZmVyZW5jZXMgYXJlIHJlcHJlc2VudGVkIGluIG5hbWVsZXNzIGZvcm0uCi8vLwovLy8gW05hbWVdcyBhcmUgaW1tdXRhYmxlIGFuZCBjb21wYXJlIGJhc2VkIG9uIHN0cnVjdHVyYWwgZXF1YWxpdHksIGFuZCB0aGV5Ci8vLyBhcmUgbm90IEFTVCBub2Rlcy4KLy8vCi8vLyBUaGUgW3RvU3RyaW5nXSBtZXRob2QgcmV0dXJucyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyB0aGF0IGluY2x1ZGVzIHRoZQovLy8gbGlicmFyeSBuYW1lIGZvciBwcml2YXRlIG5hbWVzOyB1bmlxdWVuZXNzIGlzIG5vdCBndWFyYW50ZWVkLgpAY29xCmFic3RyYWN0IGNsYXNzIE5hbWUgaW1wbGVtZW50cyBOb2RlIHsKICBmaW5hbCBpbnQgaGFzaENvZGU7CiAgQGNvcQogIGZpbmFsIFN0cmluZyBuYW1lOwogIEBub2NvcQogIFJlZmVyZW5jZSBnZXQgbGlicmFyeU5hbWU7CiAgQG5vY29xCiAgTGlicmFyeSBnZXQgbGlicmFyeTsKICBib29sIGdldCBpc1ByaXZhdGU7CgogIE5hbWUuX2ludGVybmFsKHRoaXMuaGFzaENvZGUsIHRoaXMubmFtZSk7CgogIGZhY3RvcnkgTmFtZShTdHJpbmcgbmFtZSwgW0xpYnJhcnkgbGlicmFyeV0pID0+CiAgICAgIG5ldyBOYW1lLmJ5UmVmZXJlbmNlKG5hbWUsIGxpYnJhcnk/LnJlZmVyZW5jZSk7CgogIGZhY3RvcnkgTmFtZS5ieVJlZmVyZW5jZShTdHJpbmcgbmFtZSwgUmVmZXJlbmNlIGxpYnJhcnlOYW1lKSB7CiAgICAvLy8gVXNlIHNlcGFyYXRlIHN1YmNsYXNzZXMgZm9yIHRoZSBwdWJsaWMgYW5kIHByaXZhdGUgY2FzZSB0byBzYXZlIG1lbW9yeQogICAgLy8vIGZvciBwdWJsaWMgbmFtZXMuCiAgICBpZiAobmFtZS5zdGFydHNXaXRoKCdfJykpIHsKICAgICAgYXNzZXJ0KGxpYnJhcnlOYW1lICE9IG51bGwpOwogICAgICByZXR1cm4gbmV3IF9Qcml2YXRlTmFtZShuYW1lLCBsaWJyYXJ5TmFtZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IF9QdWJsaWNOYW1lKG5hbWUpOwogICAgfQogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIE5hbWUgJiYgbmFtZSA9PSBvdGhlci5uYW1lICYmIGxpYnJhcnkgPT0gb3RoZXIubGlicmFyeTsKICB9CgogIGFjY2VwdChWaXNpdG9yIHYpID0+IHYudmlzaXROYW1lKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgLy8gREVTSUdOIFRPRE86IFNob3VsZCB3ZSB2aXNpdCB0aGUgbGlicmFyeSBhcyBhIGxpYnJhcnkgcmVmZXJlbmNlPwogIH0KfQoKY2xhc3MgX1ByaXZhdGVOYW1lIGV4dGVuZHMgTmFtZSB7CiAgZmluYWwgUmVmZXJlbmNlIGxpYnJhcnlOYW1lOwogIGJvb2wgZ2V0IGlzUHJpdmF0ZSA9PiB0cnVlOwoKICBfUHJpdmF0ZU5hbWUoU3RyaW5nIG5hbWUsIFJlZmVyZW5jZSBsaWJyYXJ5TmFtZSkKICAgICAgOiB0aGlzLmxpYnJhcnlOYW1lID0gbGlicmFyeU5hbWUsCiAgICAgICAgc3VwZXIuX2ludGVybmFsKF9jb21wdXRlSGFzaENvZGUobmFtZSwgbGlicmFyeU5hbWUpLCBuYW1lKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gbGlicmFyeSAhPSBudWxsID8gJyRsaWJyYXJ5OjokbmFtZScgOiBuYW1lOwoKICBMaWJyYXJ5IGdldCBsaWJyYXJ5ID0+IGxpYnJhcnlOYW1lLmFzTGlicmFyeTsKCiAgc3RhdGljIGludCBfY29tcHV0ZUhhc2hDb2RlKFN0cmluZyBuYW1lLCBSZWZlcmVuY2UgbGlicmFyeU5hbWUpIHsKICAgIC8vIFRPRE8oZG1pdHJ5YXMpOiBGYWN0b3IgaW4gW2xpYnJhcnlOYW1lXSBpbiBhIG5vbi1kZXRlcm1pbmlzdGljIHdheSBpbnRvCiAgICAvLyB0aGUgcmVzdWx0LiAgTm90ZSwgdGhlIHByZXZpb3VzIGNvZGUgaGVyZSB3YXMgdGhlIGZvbGxvd2luZzoKICAgIC8vICAgICByZXR1cm4gMTMxICogbmFtZS5oYXNoQ29kZSArIDE3ICogbGlicmFyeU5hbWUuYXNMaWJyYXJ5Ll9saWJyYXJ5SWQ7CiAgICByZXR1cm4gbmFtZS5oYXNoQ29kZTsKICB9Cn0KCmNsYXNzIF9QdWJsaWNOYW1lIGV4dGVuZHMgTmFtZSB7CiAgUmVmZXJlbmNlIGdldCBsaWJyYXJ5TmFtZSA9PiBudWxsOwogIExpYnJhcnkgZ2V0IGxpYnJhcnkgPT4gbnVsbDsKICBib29sIGdldCBpc1ByaXZhdGUgPT4gZmFsc2U7CgogIF9QdWJsaWNOYW1lKFN0cmluZyBuYW1lKSA6IHN1cGVyLl9pbnRlcm5hbChuYW1lLmhhc2hDb2RlLCBuYW1lKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gbmFtZTsKfQoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUWVBFUwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vLyBSZXByZXNlbnRzIG51bGxhYmlsaXR5IG9mIGEgdHlwZS4KZW51bSBOdWxsYWJpbGl0eSB7CiAgLy8vIE51bGxhYmxlIHR5cGVzIGFyZSBtYXJrZWQgd2l0aCB0aGUgJz8nIG1vZGlmaWVyLgogIC8vLwogIC8vLyBOdWxsLCBkeW5hbWljLCBhbmQgdm9pZCBhcmUgbnVsbGFibGUgYnkgZGVmYXVsdC4KICBudWxsYWJsZSwKCiAgLy8vIE5vbi1udWxsYWJsZSB0eXBlcyBhcmUgdHlwZXMgdGhhdCBhcmVuJ3QgbWFya2VkIHdpdGggdGhlICc/JyBtb2RpZmllci4KICAvLy8KICAvLy8gTm90ZSB0aGF0IE51bGwsIGR5bmFtaWMsIGFuZCB2b2lkIHRoYXQgYXJlIG51bGxhYmxlIGJ5IGRlZmF1bHQuICBOb3RlIGFsc28KICAvLy8gdGhhdCBzb21lIHR5cGVzIGRlbm90ZWQgYnkgYSB0eXBlIHBhcmFtZXRlciB3aXRob3V0IHRoZSAnPycgbW9kaWZpZXIgY2FuCiAgLy8vIGJlIHNvbWV0aGluZyBlbHNlIHJhdGhlciB0aGFuIG5vbi1udWxsYWJsZS4KICBub25OdWxsYWJsZSwKCiAgLy8vIE5vbi1sZWdhY3kgdHlwZXMgdGhhdCBhcmUgbmVpdGhlciBudWxsYWJsZSwgbm9yIG5vbi1udWxsYWJsZS4KICAvLy8KICAvLy8gQW4gZXhhbXBsZSBvZiBzdWNoIHR5cGUgaXMgdHlwZSBUIGluIHRoZSBleGFtcGxlIGJlbG93LiAgTm90ZSB0aGF0IGJvdGgKICAvLy8gaW50IGFuZCBpbnQ/IGNhbiBiZSBwYXNzZWQgaW4gZm9yIFQsIHNvIGFuIGF0dGVtcHQgdG8gYXNzaWduIG51bGwgdG8geCBpcwogIC8vLyBhIGNvbXBpbGUtdGltZSBlcnJvciBhcyB3ZWxsIGFzIGFzc2lnbmluZyB4IHRvIHkuCiAgLy8vCiAgLy8vICAgY2xhc3MgQTxUIGV4dGVuZHMgT2JqZWN0Pz4gewogIC8vLyAgICAgZm9vKFQgeCkgewogIC8vLyAgICAgICB4ID0gbnVsbDsgICAgICAvLyBDb21waWxlLXRpbWUgZXJyb3IuCiAgLy8vICAgICAgIE9iamVjdCB5ID0geDsgIC8vIENvbXBpbGUtdGltZSBlcnJvci4KICAvLy8gICAgIH0KICAvLy8gICB9CiAgbmVpdGhlciwKCiAgLy8vIFR5cGVzIGluIG9wdC1vdXQgbGlicmFyaWVzIGFyZSAnbGVnYWN5JyB0eXBlcy4KICAvLy8KICAvLy8gVGhleSBhcmUgYm90aCBzdWJ0eXBlcyBhbmQgc3VwZXJ0eXBlcyBvZiB0aGUgbnVsbGFibGUgYW5kIG5vbi1udWxsYWJsZQogIC8vLyB2ZXJzaW9ucyBvZiB0aGUgdHlwZS4KICBsZWdhY3kKfQoKLy8vIEEgc3ludGF4LWluZGVwZW5kZW50IG5vdGlvbiBvZiBhIHR5cGUuCi8vLwovLy8gW0RhcnRUeXBlXXMgYXJlIG5vdCBBU1Qgbm9kZXMgYW5kIG1heSBiZSBzaGFyZWQgYmV0d2VlbiBkaWZmZXJlbnQgcGFyZW50cy4KLy8vCi8vLyBbRGFydFR5cGVdIG9iamVjdHMgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgdW5tb2RpZmlhYmxlIG9iamVjdHMsIGFsdGhvdWdoCi8vLyBpbW11dGFiaWxpdHkgaXMgbm90IGVuZm9yY2VkIGZvciBMaXN0IGZpZWxkcywgYW5kIFtUeXBlUGFyYW1ldGVyXXMgYXJlCi8vLyBjeWNsaWMgc3RydWN0dXJlcyB0aGF0IGFyZSBjb25zdHJ1Y3RlZCBieSBtdXRhdGlvbi4KLy8vCi8vLyBUaGUgYD09YCBvcGVyYXRvciBvbiBbRGFydFR5cGVdcyBjb21wYXJlIGJhc2VkIG9uIHR5cGUgZXF1YWxpdHksIG5vdAovLy8gb2JqZWN0IGlkZW50aXR5LgpAY29xCmFic3RyYWN0IGNsYXNzIERhcnRUeXBlIGV4dGVuZHMgTm9kZSB7CiAgY29uc3QgRGFydFR5cGUoKTsKCiAgYWNjZXB0KERhcnRUeXBlVmlzaXRvciB2KTsKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjEgdiwgYXJnKTsKCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpOwoKICBOdWxsYWJpbGl0eSBnZXQgbnVsbGFiaWxpdHk7CgogIC8vLyBJZiB0aGlzIGlzIGEgdHlwZWRlZiB0eXBlLCByZXBlYXRlZGx5IHVuZm9sZHMgaXRzIHR5cGUgZGVmaW5pdGlvbiB1bnRpbAogIC8vLyB0aGUgcm9vdCB0ZXJtIGlzIG5vdCBhIHR5cGVkZWYgdHlwZSwgb3RoZXJ3aXNlIHJldHVybnMgdGhlIHR5cGUgaXRzZWxmLgogIC8vLwogIC8vLyBXaWxsIG5ldmVyIHJldHVybiBhIHR5cGVkZWYgdHlwZS4KICBEYXJ0VHlwZSBnZXQgdW5hbGlhcyA9PiB0aGlzOwoKICAvLy8gSWYgdGhpcyBpcyBhIHR5cGVkZWYgdHlwZSwgdW5mb2xkcyBpdHMgdHlwZSBkZWZpbml0aW9uIG9uY2UsIG90aGVyd2lzZQogIC8vLyByZXR1cm5zIHRoZSB0eXBlIGl0c2VsZi4KICBEYXJ0VHlwZSBnZXQgdW5hbGlhc09uY2UgPT4gdGhpczsKfQoKLy8vIFRoZSB0eXBlIGFyaXNpbmcgZnJvbSBpbnZhbGlkIHR5cGUgYW5ub3RhdGlvbnMuCi8vLwovLy8gQ2FuIHVzdWFsbHkgYmUgdHJlYXRlZCBhcyAnZHluYW1pYycsIGJ1dCBzaG91bGQgb2NjYXNpb25hbGx5IGJlIGhhbmRsZWQKLy8vIGRpZmZlcmVudGx5LCBlLmcuIGB4IGlzIEVSUk9SYCBzaG91bGQgZXZhbHVhdGUgdG8gZmFsc2UuCmNsYXNzIEludmFsaWRUeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGZpbmFsIGludCBoYXNoQ29kZSA9IDEyMzQ1OwoKICBjb25zdCBJbnZhbGlkVHlwZSgpOwoKICBhY2NlcHQoRGFydFR5cGVWaXNpdG9yIHYpID0+IHYudmlzaXRJbnZhbGlkVHlwZSh0aGlzKTsKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0SW52YWxpZFR5cGUodGhpcywgYXJnKTsKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+IG90aGVyIGlzIEludmFsaWRUeXBlOwoKICBOdWxsYWJpbGl0eSBnZXQgbnVsbGFiaWxpdHkgPT4gdGhyb3cgIkludmFsaWRUeXBlIGRvZXNuJ3QgaGF2ZSBudWxsYWJpbGlpdHkiOwp9CgpjbGFzcyBEeW5hbWljVHlwZSBleHRlbmRzIERhcnRUeXBlIHsKICBmaW5hbCBpbnQgaGFzaENvZGUgPSA1NDMyMTsKCiAgY29uc3QgRHluYW1pY1R5cGUoKTsKCiAgYWNjZXB0KERhcnRUeXBlVmlzaXRvciB2KSA9PiB2LnZpc2l0RHluYW1pY1R5cGUodGhpcyk7CiAgYWNjZXB0MShEYXJ0VHlwZVZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdER5bmFtaWNUeXBlKHRoaXMsIGFyZyk7CiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSA9PiBvdGhlciBpcyBEeW5hbWljVHlwZTsKCiAgTnVsbGFiaWxpdHkgZ2V0IG51bGxhYmlsaXR5ID0+IE51bGxhYmlsaXR5Lm51bGxhYmxlOwp9CgpjbGFzcyBWb2lkVHlwZSBleHRlbmRzIERhcnRUeXBlIHsKICBmaW5hbCBpbnQgaGFzaENvZGUgPSAxMjMxMjE7CgogIGNvbnN0IFZvaWRUeXBlKCk7CgogIGFjY2VwdChEYXJ0VHlwZVZpc2l0b3IgdikgPT4gdi52aXNpdFZvaWRUeXBlKHRoaXMpOwogIGFjY2VwdDEoRGFydFR5cGVWaXNpdG9yMSB2LCBhcmcpID0+IHYudmlzaXRWb2lkVHlwZSh0aGlzLCBhcmcpOwogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4gb3RoZXIgaXMgVm9pZFR5cGU7CgogIE51bGxhYmlsaXR5IGdldCBudWxsYWJpbGl0eSA9PiBOdWxsYWJpbGl0eS5udWxsYWJsZTsKfQoKY2xhc3MgQm90dG9tVHlwZSBleHRlbmRzIERhcnRUeXBlIHsKICBmaW5hbCBpbnQgaGFzaENvZGUgPSA1MTQyMTM7CgogIGNvbnN0IEJvdHRvbVR5cGUoKTsKCiAgYWNjZXB0KERhcnRUeXBlVmlzaXRvciB2KSA9PiB2LnZpc2l0Qm90dG9tVHlwZSh0aGlzKTsKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0Qm90dG9tVHlwZSh0aGlzLCBhcmcpOwogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4gb3RoZXIgaXMgQm90dG9tVHlwZTsKCiAgTnVsbGFiaWxpdHkgZ2V0IG51bGxhYmlsaXR5ID0+IE51bGxhYmlsaXR5Lm5vbk51bGxhYmxlOwp9CgpAY29xCmNsYXNzIEludGVyZmFjZVR5cGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgUmVmZXJlbmNlIGNsYXNzTmFtZTsKCiAgZmluYWwgTnVsbGFiaWxpdHkgbnVsbGFiaWxpdHk7CgogIEBub2NvcQogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIC8vLyBUaGUgW3R5cGVBcmd1bWVudHNdIGxpc3QgbXVzdCBub3QgYmUgbW9kaWZpZWQgYWZ0ZXIgdGhpcyBjYWxsLiBJZiB0aGUKICAvLy8gbGlzdCBpcyBvbWl0dGVkLCAnZHluYW1pYycgdHlwZSBhcmd1bWVudHMgYXJlIGZpbGxlZCBpbi4KICBJbnRlcmZhY2VUeXBlKENsYXNzIGNsYXNzTm9kZSwKICAgICAgW0xpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIE51bGxhYmlsaXR5IG51bGxhYmlsaXR5ID0gTnVsbGFiaWxpdHkubGVnYWN5XSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKGdldENsYXNzUmVmZXJlbmNlKGNsYXNzTm9kZSksCiAgICAgICAgICAgIHR5cGVBcmd1bWVudHMgPz8gX2RlZmF1bHRUeXBlQXJndW1lbnRzKGNsYXNzTm9kZSksIG51bGxhYmlsaXR5KTsKCiAgSW50ZXJmYWNlVHlwZS5ieVJlZmVyZW5jZSh0aGlzLmNsYXNzTmFtZSwgdGhpcy50eXBlQXJndW1lbnRzLAogICAgICBbdGhpcy5udWxsYWJpbGl0eSA9IE51bGxhYmlsaXR5LmxlZ2FjeV0pOwoKICBDbGFzcyBnZXQgY2xhc3NOb2RlID0+IGNsYXNzTmFtZS5hc0NsYXNzOwoKICBzdGF0aWMgTGlzdDxEYXJ0VHlwZT4gX2RlZmF1bHRUeXBlQXJndW1lbnRzKENsYXNzIGNsYXNzTm9kZSkgewogICAgaWYgKGNsYXNzTm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGggPT0gMCkgewogICAgICAvLyBBdm9pZCBhbGxvY2F0aW5nIGEgbGlzdCBpbiB0aGlzIHZlcnkgY29tbW9uIGNhc2UuCiAgICAgIHJldHVybiBjb25zdCA8RGFydFR5cGU+W107CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCgKICAgICAgICAgIGNsYXNzTm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGgsIGNvbnN0IER5bmFtaWNUeXBlKCkpOwogICAgfQogIH0KCiAgYWNjZXB0KERhcnRUeXBlVmlzaXRvciB2KSA9PiB2LnZpc2l0SW50ZXJmYWNlVHlwZSh0aGlzKTsKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0SW50ZXJmYWNlVHlwZSh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgY2xhc3NOb2RlLmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIHZpc2l0TGlzdCh0eXBlQXJndW1lbnRzLCB2KTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBpZiAoY2xhc3NOYW1lICE9IG90aGVyLmNsYXNzTmFtZSkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAodHlwZUFyZ3VtZW50cy5sZW5ndGggIT0gb3RoZXIudHlwZUFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgaWYgKHR5cGVBcmd1bWVudHNbaV0gIT0gb3RoZXIudHlwZUFyZ3VtZW50c1tpXSkgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBpbnQgaGFzaCA9IDB4M2ZmZmZmZmYgJiBjbGFzc05hbWUuaGFzaENvZGU7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgaGFzaCA9IDB4M2ZmZmZmZmYgJiAoaGFzaCAqIDMxICsgKGhhc2ggXiB0eXBlQXJndW1lbnRzW2ldLmhhc2hDb2RlKSk7CiAgICB9CiAgICByZXR1cm4gaGFzaDsKICB9Cn0KCi8vLyBBIHBvc3NpYmx5IGdlbmVyaWMgZnVuY3Rpb24gdHlwZS4KQGNvcQpjbGFzcyBGdW5jdGlvblR5cGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgZmluYWwgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyczsKICBmaW5hbCBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDsKICBAY29xc2luZ2xlCiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gcG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgZmluYWwgTGlzdDxOYW1lZFR5cGU+IG5hbWVkUGFyYW1ldGVyczsgLy8gTXVzdCBiZSBzb3J0ZWQuCiAgZmluYWwgTnVsbGFiaWxpdHkgbnVsbGFiaWxpdHk7CgogIC8vLyBUaGUgW1R5cGVkZWZdIHRoaXMgZnVuY3Rpb24gdHlwZSBpcyBjcmVhdGVkIGZvci4KICBmaW5hbCBUeXBlZGVmVHlwZSB0eXBlZGVmVHlwZTsKCiAgZmluYWwgRGFydFR5cGUgcmV0dXJuVHlwZTsKICBpbnQgX2hhc2hDb2RlOwoKICBGdW5jdGlvblR5cGUoTGlzdDxEYXJ0VHlwZT4gcG9zaXRpb25hbFBhcmFtZXRlcnMsIHRoaXMucmV0dXJuVHlwZSwKICAgICAge3RoaXMubmFtZWRQYXJhbWV0ZXJzOiBjb25zdCA8TmFtZWRUeXBlPltdLAogICAgICB0aGlzLnR5cGVQYXJhbWV0ZXJzOiBjb25zdCA8VHlwZVBhcmFtZXRlcj5bXSwKICAgICAgdGhpcy5udWxsYWJpbGl0eTogTnVsbGFiaWxpdHkubGVnYWN5LAogICAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgdGhpcy50eXBlZGVmVHlwZX0pCiAgICAgIDogdGhpcy5wb3NpdGlvbmFsUGFyYW1ldGVycyA9IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgIHRoaXMucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA9CiAgICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPz8gcG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOwoKICBAbm9jb3EKICBSZWZlcmVuY2UgZ2V0IHR5cGVkZWZSZWZlcmVuY2UgPT4gdHlwZWRlZlR5cGU/LnR5cGVkZWZSZWZlcmVuY2U7CgogIFR5cGVkZWYgZ2V0IHR5cGVkZWYgPT4gdHlwZWRlZlJlZmVyZW5jZT8uYXNUeXBlZGVmOwoKICBhY2NlcHQoRGFydFR5cGVWaXNpdG9yIHYpID0+IHYudmlzaXRGdW5jdGlvblR5cGUodGhpcyk7CiAgYWNjZXB0MShEYXJ0VHlwZVZpc2l0b3IxIHYsIGFyZykgPT4gdi52aXNpdEZ1bmN0aW9uVHlwZSh0aGlzLCBhcmcpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KHR5cGVQYXJhbWV0ZXJzLCB2KTsKICAgIHZpc2l0TGlzdChwb3NpdGlvbmFsUGFyYW1ldGVycywgdik7CiAgICB2aXNpdExpc3QobmFtZWRQYXJhbWV0ZXJzLCB2KTsKICAgIHR5cGVkZWZUeXBlPy5hY2NlcHQodik7CiAgICByZXR1cm5UeXBlLmFjY2VwdCh2KTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgIGlmICh0eXBlUGFyYW1ldGVycy5sZW5ndGggIT0gb3RoZXIudHlwZVBhcmFtZXRlcnMubGVuZ3RoIHx8CiAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50ICE9IG90aGVyLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgfHwKICAgICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCAhPSBvdGhlci5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggfHwKICAgICAgICAgIG5hbWVkUGFyYW1ldGVycy5sZW5ndGggIT0gb3RoZXIubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAodHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIGlmIChwb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSAhPSBvdGhlci5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBpZiAobmFtZWRQYXJhbWV0ZXJzW2ldICE9IG90aGVyLm5hbWVkUGFyYW1ldGVyc1tpXSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXR1cm5UeXBlID09IG90aGVyLnJldHVyblR5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gU3RydWN0dXJhbCBlcXVhbGl0eSBkb2VzIG5vdCB0ZWxsIHVzIGlmIHR3byBnZW5lcmljIGZ1bmN0aW9uIHR5cGVzCiAgICAgICAgLy8gYXJlIHRoZSBzYW1lIHR5cGUuICBJZiB0aGV5IGFyZSB1bmlmaWFibGUgd2l0aG91dCBzdWJzdGl0dXRpbmcgYW55CiAgICAgICAgLy8gdHlwZSB2YXJpYWJsZXMsIHRoZXkgYXJlIGVxdWFsLgogICAgICAgIHJldHVybiB1bmlmeVR5cGVzKHRoaXMsIG90aGVyLCBuZXcgU2V0PFR5cGVQYXJhbWV0ZXI+KCkpICE9IG51bGw7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIGEgdmFyaWFudCBvZiB0aGlzIGZ1bmN0aW9uIHR5cGUgdGhhdCBkb2VzIG5vdCBkZWNsYXJlIGFueSB0eXBlCiAgLy8vIHBhcmFtZXRlcnMuCiAgLy8vCiAgLy8vIEFueSB1c2VzIG9mIGl0cyB0eXBlIHBhcmFtZXRlcnMgYmVjb21lIGZyZWUgdmFyaWFibGVzIGluIHRoZSByZXR1cm5lZAogIC8vLyB0eXBlLgogIEZ1bmN0aW9uVHlwZSBnZXQgd2l0aG91dFR5cGVQYXJhbWV0ZXJzIHsKICAgIGlmICh0eXBlUGFyYW1ldGVycy5pc0VtcHR5KSByZXR1cm4gdGhpczsKICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKHBvc2l0aW9uYWxQYXJhbWV0ZXJzLCByZXR1cm5UeXBlLAogICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgdHlwZWRlZlR5cGU6IHR5cGVkZWZUeXBlKTsKICB9CgogIC8vLyBMb29rcyB1cCB0aGUgdHlwZSBvZiB0aGUgbmFtZWQgcGFyYW1ldGVyIHdpdGggdGhlIGdpdmVuIG5hbWUuCiAgLy8vCiAgLy8vIFJldHVybnMgYG51bGxgIGlmIHRoZXJlIGlzIG5vIG5hbWVkIHBhcmFtZXRlciB3aXRoIHRoZSBnaXZlbiBuYW1lLgogIERhcnRUeXBlIGdldE5hbWVkUGFyYW1ldGVyKFN0cmluZyBuYW1lKSB7CiAgICBpbnQgbG93ZXIgPSAwOwogICAgaW50IHVwcGVyID0gbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCAtIDE7CiAgICB3aGlsZSAobG93ZXIgPD0gdXBwZXIpIHsKICAgICAgaW50IHBpdm90ID0gKGxvd2VyICsgdXBwZXIpIH4vIDI7CiAgICAgIHZhciBuYW1lZFBhcmFtZXRlciA9IG5hbWVkUGFyYW1ldGVyc1twaXZvdF07CiAgICAgIGludCBjb21wYXJpc29uID0gbmFtZS5jb21wYXJlVG8obmFtZWRQYXJhbWV0ZXIubmFtZSk7CiAgICAgIGlmIChjb21wYXJpc29uID09IDApIHsKICAgICAgICByZXR1cm4gbmFtZWRQYXJhbWV0ZXIudHlwZTsKICAgICAgfSBlbHNlIGlmIChjb21wYXJpc29uIDwgMCkgewogICAgICAgIHVwcGVyID0gcGl2b3QgLSAxOwogICAgICB9IGVsc2UgewogICAgICAgIGxvd2VyID0gcGl2b3QgKyAxOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGludCBnZXQgaGFzaENvZGUgPT4gX2hhc2hDb2RlID8/PSBfY29tcHV0ZUhhc2hDb2RlKCk7CgogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgewogICAgaW50IGhhc2ggPSAxMjM3OwogICAgaGFzaCA9IDB4M2ZmZmZmZmYgJiAoaGFzaCAqIDMxICsgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgIFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyID0gdHlwZVBhcmFtZXRlcnNbaV07CiAgICAgIF90ZW1wb3JhcnlIYXNoQ29kZVRhYmxlW3BhcmFtZXRlcl0gPSBfdGVtcG9yYXJ5SGFzaENvZGVUYWJsZS5sZW5ndGg7CiAgICAgIGhhc2ggPSAweDNmZmZmZmZmICYgKGhhc2ggKiAzMSArIHBhcmFtZXRlci5ib3VuZC5oYXNoQ29kZSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgIGhhc2ggPSAweDNmZmZmZmZmICYgKGhhc2ggKiAzMSArIHBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldLmhhc2hDb2RlKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgIGhhc2ggPSAweDNmZmZmZmZmICYgKGhhc2ggKiAzMSArIG5hbWVkUGFyYW1ldGVyc1tpXS5oYXNoQ29kZSk7CiAgICB9CiAgICBoYXNoID0gMHgzZmZmZmZmZiAmIChoYXNoICogMzEgKyByZXR1cm5UeXBlLmhhc2hDb2RlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgLy8gUmVtb3ZlIHRoZSB0eXBlIHBhcmFtZXRlcnMgZnJvbSB0aGUgc2NvcGUgYWdhaW4uCiAgICAgIF90ZW1wb3JhcnlIYXNoQ29kZVRhYmxlLnJlbW92ZSh0eXBlUGFyYW1ldGVyc1tpXSk7CiAgICB9CiAgICByZXR1cm4gaGFzaDsKICB9Cn0KCi8vLyBBIHVzZSBvZiBhIFtUeXBlZGVmXSBhcyBhIHR5cGUuCi8vLwovLy8gVGhlIHVuZGVybHlpbmcgdHlwZSBjYW4gYmUgZXh0cmFjdGVkIHVzaW5nIFt1bmFsaWFzXS4KY2xhc3MgVHlwZWRlZlR5cGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgZmluYWwgTnVsbGFiaWxpdHkgbnVsbGFiaWxpdHk7CiAgZmluYWwgUmVmZXJlbmNlIHR5cGVkZWZSZWZlcmVuY2U7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKCiAgVHlwZWRlZlR5cGUoVHlwZWRlZiB0eXBlZGVmTm9kZSwKICAgICAgW0xpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIE51bGxhYmlsaXR5IG51bGxhYmlsaXR5ID0gTnVsbGFiaWxpdHkubGVnYWN5XSkKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKHR5cGVkZWZOb2RlLnJlZmVyZW5jZSwKICAgICAgICAgICAgdHlwZUFyZ3VtZW50cyA/PyBjb25zdCA8RGFydFR5cGU+W10sIG51bGxhYmlsaXR5KTsKCiAgVHlwZWRlZlR5cGUuYnlSZWZlcmVuY2UodGhpcy50eXBlZGVmUmVmZXJlbmNlLCB0aGlzLnR5cGVBcmd1bWVudHMsCiAgICAgIFt0aGlzLm51bGxhYmlsaXR5ID0gTnVsbGFiaWxpdHkubGVnYWN5XSk7CgogIFR5cGVkZWYgZ2V0IHR5cGVkZWZOb2RlID0+IHR5cGVkZWZSZWZlcmVuY2UuYXNUeXBlZGVmOwoKICBhY2NlcHQoRGFydFR5cGVWaXNpdG9yIHYpID0+IHYudmlzaXRUeXBlZGVmVHlwZSh0aGlzKTsKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0VHlwZWRlZlR5cGUodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHZpc2l0TGlzdCh0eXBlQXJndW1lbnRzLCB2KTsKICAgIHYudmlzaXRUeXBlZGVmUmVmZXJlbmNlKHR5cGVkZWZOb2RlKTsKICB9CgogIERhcnRUeXBlIGdldCB1bmFsaWFzT25jZSB7CiAgICByZXR1cm4gU3Vic3RpdHV0aW9uLmZyb21UeXBlZGVmVHlwZSh0aGlzKS5zdWJzdGl0dXRlVHlwZSh0eXBlZGVmTm9kZS50eXBlKTsKICB9CgogIERhcnRUeXBlIGdldCB1bmFsaWFzIHsKICAgIHJldHVybiB1bmFsaWFzT25jZS51bmFsaWFzOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyBUeXBlZGVmVHlwZSkgewogICAgICBpZiAodHlwZWRlZlJlZmVyZW5jZSAhPSBvdGhlci50eXBlZGVmUmVmZXJlbmNlIHx8CiAgICAgICAgICB0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSBvdGhlci50eXBlQXJndW1lbnRzLmxlbmd0aCkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICBpZiAodHlwZUFyZ3VtZW50c1tpXSAhPSBvdGhlci50eXBlQXJndW1lbnRzW2ldKSByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIGludCBoYXNoID0gMHgzZmZmZmZmZiAmIHR5cGVkZWZOb2RlLmhhc2hDb2RlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIGhhc2ggPSAweDNmZmZmZmZmICYgKGhhc2ggKiAzMSArIChoYXNoIF4gdHlwZUFyZ3VtZW50c1tpXS5oYXNoQ29kZSkpOwogICAgfQogICAgcmV0dXJuIGhhc2g7CiAgfQp9CgovLy8gQSBuYW1lZCBwYXJhbWV0ZXIgaW4gW0Z1bmN0aW9uVHlwZV0uCmNsYXNzIE5hbWVkVHlwZSBleHRlbmRzIE5vZGUgaW1wbGVtZW50cyBDb21wYXJhYmxlPE5hbWVkVHlwZT4gewogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIERhcnRUeXBlIHR5cGU7CgogIE5hbWVkVHlwZSh0aGlzLm5hbWUsIHRoaXMudHlwZSk7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgTmFtZWRUeXBlICYmIG5hbWUgPT0gb3RoZXIubmFtZSAmJiB0eXBlID09IG90aGVyLnR5cGU7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBuYW1lLmhhc2hDb2RlICogMzEgKyB0eXBlLmhhc2hDb2RlICogMzc7CiAgfQoKICBpbnQgY29tcGFyZVRvKE5hbWVkVHlwZSBvdGhlcikgPT4gbmFtZS5jb21wYXJlVG8ob3RoZXIubmFtZSk7CgogIGFjY2VwdChWaXNpdG9yIHYpID0+IHYudmlzaXROYW1lZFR5cGUodGhpcyk7CgogIHZvaWQgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHR5cGUuYWNjZXB0KHYpOwogIH0KfQoKLy8vIFN0b3JlcyB0aGUgaGFzaCBjb2RlIG9mIGZ1bmN0aW9uIHR5cGUgcGFyYW1ldGVycyB3aGlsZSBjb21wdXRpbmcgdGhlIGhhc2gKLy8vIGNvZGUgb2YgYSBbRnVuY3Rpb25UeXBlXSBvYmplY3QuCi8vLwovLy8gVGhpcyBlbnN1cmVzIHRoYXQgZGlzdGluY3QgW0Z1bmN0aW9uVHlwZV0gb2JqZWN0cyBnZXQgdGhlIHNhbWUgaGFzaCBjb2RlCi8vLyBpZiB0aGV5IHJlcHJlc2VudCB0aGUgc2FtZSB0eXBlLCBldmVuIHRob3VnaCB0aGVpciB0eXBlIHBhcmFtZXRlcnMgYXJlCi8vLyByZXByZXNlbnRlZCBieSBkaWZmZXJlbnQgb2JqZWN0cy4KZmluYWwgTWFwPFR5cGVQYXJhbWV0ZXIsIGludD4gX3RlbXBvcmFyeUhhc2hDb2RlVGFibGUgPSA8VHlwZVBhcmFtZXRlciwgaW50Pnt9OwoKLy8vIFJlZmVyZW5jZSB0byBhIHR5cGUgdmFyaWFibGUuCi8vLwovLy8gQSB0eXBlIHZhcmlhYmxlIGhhcyBhbiBvcHRpb25hbCBib3VuZCBiZWNhdXNlIHR5cGUgcHJvbW90aW9uIGNhbiBjaGFuZ2UgdGhlCi8vLyBib3VuZC4gIEEgYm91bmQgb2YgYG51bGxgIGluZGljYXRlcyB0aGF0IHRoZSBib3VuZCBoYXMgbm90IGJlZW4gcHJvbW90ZWQgYW5kCi8vLyBpcyB0aGUgc2FtZSBhcyB0aGUgW1R5cGVQYXJhbWV0ZXJdJ3MgYm91bmQuICBUaGlzIGFsbG93cyBvbmUgdG8gZGV0ZWN0Ci8vLyB3aGV0aGVyIHRoZSBib3VuZCBoYXMgYmVlbiBwcm9tb3RlZC4KY2xhc3MgVHlwZVBhcmFtZXRlclR5cGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgLy8vIERlY2xhcmVkIGJ5IHRoZSBwcm9ncmFtbWVyIG9uIHRoZSB0eXBlLgogIGZpbmFsIE51bGxhYmlsaXR5IGRlY2xhcmVkTnVsbGFiaWxpdHk7CgogIC8vLyBBY3R1YWwgbnVsbGFiaWxpdHkgb2YgdGhlIHR5cGUsIGNhbGN1bGF0ZWQgZnJvbSBpdHMgcGFydHMuCiAgLy8vCiAgLy8vIFtudWxsYWJpbGl0eV0gaXMgY2FsY3VsYXRlZCBmcm9tIFtkZWNsYXJlZE51bGxhYmlsaXR5XSBhbmQgdGhlCiAgLy8vIG51bGxhYmlsaXRpZXMgb2YgW3Byb21vdGVkQm91bmRdIGFuZCB0aGUgYm91bmQgb2YgW3BhcmFtZXRlcl0uCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBpbiB0aGUgZm9sbG93aW5nIHByb2dyYW0gW2RlY2xhcmVkTnVsbGFiaWxpdHldIGJvdGggYHhgIGFuZAogIC8vLyBgeWAgaXMgW051bGxhYmlsaXR5Lm51bGxhYmxlXSwgYmVjYXVzZSBpdCdzIGNvcGllZCBmcm9tIHRoYXQgb2YgYGJhcmAuCiAgLy8vIEhvd2V2ZXIsIGRlc3BpdGUgW251bGxhYmlsaXR5XSBvZiBgeGAgaXMgW051bGxhYmlsaXR5Lm51bGxhYmxlXSwKICAvLy8gW251bGxhYmlsaXR5XSBvZiBgeWAgaXMgW051bGxhYmlsaXR5Lm5vbk51bGxhYmxlXSBiZWNhdXNlIG9mIGl0cwogIC8vLyBbcHJvbW90ZWRCb3VuZF0uCiAgLy8vCiAgLy8vICAgICBjbGFzcyBBPFQgZXh0ZW5kcyBPYmplY3Q/PiB7CiAgLy8vICAgICAgIGZvbyhUPyBiYXIpIHsKICAvLy8gICAgICAgICB2YXIgeCA9IGJhcjsKICAvLy8gICAgICAgICBpZiAoYmFyIGlzIGludCkgewogIC8vLyAgICAgICAgICAgdmFyIHkgPSBiYXI7CiAgLy8vICAgICAgICAgfQogIC8vLyAgICAgICB9CiAgLy8vICAgICB9CiAgZmluYWwgTnVsbGFiaWxpdHkgbnVsbGFiaWxpdHk7CgogIFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyOwoKICAvLy8gQW4gb3B0aW9uYWwgcHJvbW90ZWQgYm91bmQgb24gdGhlIHR5cGUgcGFyYW1ldGVyLgogIC8vLwogIC8vLyAnbnVsbCcgaW5kaWNhdGVzIHRoYXQgdGhlIHR5cGUgcGFyYW1ldGVyJ3MgYm91bmQgaGFzIG5vdCBiZWVuIHByb21vdGVkIGFuZAogIC8vLyBpcyB0aGVyZWZvcmUgdGhlIHNhbWUgYXMgdGhlIGJvdW5kIG9mIFtwYXJhbWV0ZXJdLgogIERhcnRUeXBlIHByb21vdGVkQm91bmQ7CgogIFR5cGVQYXJhbWV0ZXJUeXBlKHRoaXMucGFyYW1ldGVyLAogICAgICBbdGhpcy5wcm9tb3RlZEJvdW5kLCB0aGlzLmRlY2xhcmVkTnVsbGFiaWxpdHkgPSBOdWxsYWJpbGl0eS5sZWdhY3ldKQogICAgICA6IHRoaXMubnVsbGFiaWxpdHkgPQogICAgICAgICAgICBnZXROdWxsYWJpbGl0eShwYXJhbWV0ZXIsIHByb21vdGVkQm91bmQsIGRlY2xhcmVkTnVsbGFiaWxpdHkpOwoKICBhY2NlcHQoRGFydFR5cGVWaXNpdG9yIHYpID0+IHYudmlzaXRUeXBlUGFyYW1ldGVyVHlwZSh0aGlzKTsKICBhY2NlcHQxKERhcnRUeXBlVmlzaXRvcjEgdiwgYXJnKSA9PiB2LnZpc2l0VHlwZVBhcmFtZXRlclR5cGUodGhpcywgYXJnKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgVHlwZVBhcmFtZXRlclR5cGUgJiYgcGFyYW1ldGVyID09IG90aGVyLnBhcmFtZXRlcjsKICB9CgogIGludCBnZXQgaGFzaENvZGUgPT4gX3RlbXBvcmFyeUhhc2hDb2RlVGFibGVbcGFyYW1ldGVyXSA/PyBwYXJhbWV0ZXIuaGFzaENvZGU7CgogIC8vLyBSZXR1cm5zIHRoZSBib3VuZCBvZiB0aGUgdHlwZSBwYXJhbWV0ZXIsIGFjY291bnRpbmcgZm9yIHByb21vdGlvbnMuCiAgRGFydFR5cGUgZ2V0IGJvdW5kID0+IHByb21vdGVkQm91bmQgPz8gcGFyYW1ldGVyLmJvdW5kOwoKICAvLy8gR2V0IG51bGxhYmlsaXR5IG9mIFtUeXBlUGFyYW1ldGVyVHlwZV0gZnJvbSBhcmd1bWVudHMgdG8gaXRzIGNvbnN0cnVjdG9yLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBzdXBwb3NlZCB0byBiZSB1c2VkIG9ubHkgaW4gdGhlIGNvbnN0cnVjdG9yIG9mCiAgLy8vIFtUeXBlUGFyYW1ldGVyVHlwZV0gdG8gY29tcHV0ZSB0aGUgdmFsdWUgb2YKICAvLy8gW1R5cGVQYXJhbWV0ZXJUeXBlLm51bGxhYmlsaXR5XSBmcm9tIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KICBzdGF0aWMgTnVsbGFiaWxpdHkgZ2V0TnVsbGFiaWxpdHkoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsCiAgICAgIERhcnRUeXBlIHByb21vdGVkQm91bmQsIE51bGxhYmlsaXR5IGRlY2xhcmVkTnVsbGFiaWxpdHkpIHsKICAgIC8vIElmIHByb21vdGVkQm91bmQgaXMgbnVsbCwgZ2V0TnVsbGFiaWxpdHkgcmV0dXJucyB0aGUgbnVsbGFiaWxpdHkgb2YKICAgIC8vIGVpdGhlciBUIG9yIFQ/IHdoZXJlIFQgaXMgcGFyYW1ldGVyIGFuZCB0aGUgcHJlc2VuY2Ugb2YgJz8nIGlzIGRldGVybWluZWQKICAgIC8vIGJ5IG51bGxhYmlsaXR5LgoKICAgIC8vIElmIHByb21vdGVkQm91bmQgaXNuJ3QgbnVsbCwgZ2V0TnVsbGFiaWxpdHkgcmV0dXJucyB0aGUgbnVsbGFiaWxpdHkgb2YgYW4KICAgIC8vIGluc3Rlc2VjdGlvbiBvZiB0aGUgbGVmdC1oYW5kIHNpZGUgKHJlZmVycmVkIHRvIGFzIExIUyBiZWxvdykgYW5kIHRoZQogICAgLy8gcmlnaHQtaGFuZCBzaWRlIChyZWZlcnJlZCB0byBhcyBSSFMgYmVsb3cpLiAgTEhTIGlzIHBhcmFtZXRlciBmb2xsb3dlZCBieQogICAgLy8gbnVsbGFiaWxpdHksIGFuZCBSSFMgaXMgcHJvbW90ZWRCb3VuZC4gIFRoYXQgaXMsIGdldE51bGxhYmlsaXR5IHJldHVybnMKICAgIC8vIHRoZSBudWxsYWJpbGl0eSBvZiBlaXRoZXIgVCAmIFAgb3IgVD8gJiBQIHdoZXJlIFQgaXMgcGFyYW1ldGVyLCBQIGlzCiAgICAvLyBwcm9tb3RlZEJvdW5kLCBhbmQgdGhlIHByZXNlbmNlIG9mICc/JyBpcyBkZXRlcm1pbmVkIGJ5IG51bGxhYmlsaXR5LgogICAgLy8gTm90ZSB0aGF0IFJIUyBpcyBhbHdheXMgYSBzdWJ0eXBlIG9mIHRoZSBib3VuZCBvZiB0aGUgdHlwZSBwYXJhbWV0ZXIuCgogICAgTnVsbGFiaWxpdHkgbGhzTnVsbGFiaWxpdHk7CgogICAgLy8gSWYgdGhlIG51bGxhYmlsaXR5IGlzIGV4cGxpY2l0bHkgbnVsbGFibGUsIHRoYXQgaXMsIGlmIHRoZSB0eXBlIHBhcmFtZXRlcgogICAgLy8gdHlwZSBpcyBmb2xsb3dlZCBieSAnPycgaW4gdGhlIGNvZGUsIHRoZSBudWxsYWJpbGl0eSBvZiB0aGUgdHlwZSBpcwogICAgLy8gJ251bGxhYmxlLicKICAgIGlmIChkZWNsYXJlZE51bGxhYmlsaXR5ID09IE51bGxhYmlsaXR5Lm51bGxhYmxlKSB7CiAgICAgIGxoc051bGxhYmlsaXR5ID0gTnVsbGFiaWxpdHkubnVsbGFibGU7CiAgICB9IGVsc2UgewogICAgICAvLyBJZiB0aGUgYm91bmQgaXMgbnVsbGFibGUsIGJvdGggbnVsbGFibGUgYW5kIG5vbi1udWxsYWJsZSB0eXBlcyBjYW4gYmUKICAgICAgLy8gcGFzc2VkIGluIGZvciB0aGUgdHlwZSBwYXJhbWV0ZXIsIG1ha2luZyB0aGUgY29ycmVzcG9uZGluZyB0eXBlCiAgICAgIC8vIHBhcmFtZXRlciB0eXBlcyAnbmVpdGhlci4nICBPdGhlcndpc2UsIHRoZSBudWxsYWJpbGl0eSBtYXRjaGVzIHRoYXQgb2YKICAgICAgLy8gdGhlIGJvdW5kLgogICAgICBEYXJ0VHlwZSBib3VuZCA9IHBhcmFtZXRlci5ib3VuZCA/PyBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICBOdWxsYWJpbGl0eSBib3VuZE51bGxhYmlsaXR5ID0KICAgICAgICAgIGJvdW5kIGlzIEludmFsaWRUeXBlID8gTnVsbGFiaWxpdHkubmVpdGhlciA6IGJvdW5kLm51bGxhYmlsaXR5OwogICAgICBsaHNOdWxsYWJpbGl0eSA9IGJvdW5kTnVsbGFiaWxpdHkgPT0gTnVsbGFiaWxpdHkubnVsbGFibGUKICAgICAgICAgID8gTnVsbGFiaWxpdHkubmVpdGhlcgogICAgICAgICAgOiBib3VuZE51bGxhYmlsaXR5OwogICAgfQogICAgaWYgKHByb21vdGVkQm91bmQgPT0gbnVsbCkgewogICAgICByZXR1cm4gbGhzTnVsbGFiaWxpdHk7CiAgICB9CgogICAgLy8gSW4gcHJhY3RpY2UgYSB0eXBlIHBhcmFtZXRlciBvZiBsZWdhY3kgdHlwZSBjYW4gb25seSBiZSB1c2VkIGluIHR5cGUKICAgIC8vIGFubm90YXRpb25zIHdpdGhpbiB0aGUgY29ycmVzcG9uZGluZyBjbGFzcyBkZWNsYXJhdGlvbi4gIElmIGl0J3MgbGVnYWN5LAogICAgLy8gdGhlbiB0aGUgZW50aXJlIGxpYnJhcnkgY29udGFpbmluZyB0aGUgY2xhc3MgaXMgb3B0LW91dCwgYW5kIGFueSBSSFMgaXMKICAgIC8vIGRlZW1lZCB0byBiZSBsZWdhY3kgdG9vLiAgU28sIGl0J3MgbmVjZXNzYXJ5IHRvIG9ubHkgY2hlY2sgTEhTIGZvciBiZWluZwogICAgLy8gbGVnYWN5LgogICAgaWYgKGxoc051bGxhYmlsaXR5ID09IE51bGxhYmlsaXR5LmxlZ2FjeSkgewogICAgICByZXR1cm4gTnVsbGFiaWxpdHkubGVnYWN5OwogICAgfQoKICAgIC8vIEludGVyc2VjdGlvbiBpcyBub24tbnVsbGFibGUgaWYgYW5kIG9ubHkgaWYgUkhTIGlzIG5vbi1udWxsYWJsZS4KICAgIC8vCiAgICAvLyBUaGUgcHJvb2YgaXMgYXMgZm9sbG93cy4gIEludGVyc2VjdGlvbiBpcyBub24tbnVsbGFibGUgaWYgYXQgbGVhc3Qgb25lIG9mCiAgICAvLyBMSFMgb3IgUkhTIGlzIG5vbi1udWxsYWJsZS4gIFRoZSBjYXNlIG9mIG5vbi1udWxsYWJsZSBSSFMgaXMgdHJpdmlhbC4gIEluCiAgICAvLyB0aGUgY2FzZSBvZiBub24tbnVsbGFibGUgTEhTLCBpdHMgYm91bmQgc2hvdWxkIGJlIG5vbi1udWxsYWJsZS4gIFJIUyBpcwogICAgLy8ga25vd24gdG8gYWx3YXlzIGJlIGEgc3VidHlwZSBvZiB0aGUgYm91bmQgb2YgTEhTOyB0aGVyZWZvcmUsIFJIUyBpcwogICAgLy8gbm9uLW51bGxhYmxlLgogICAgLy8KICAgIC8vIE5vdGUgdGhhdCBpdCBhbHNvIGZvbGxvd3MgZnJvbSB0aGUgYWJvdmUgdGhhdCBub24tbnVsbGFibGUgUkhTIGltcGxpZXMKICAgIC8vIG5vbi1udWxsYWJsZSBMSFMsIHNvIHRoZSBjaGVjayBiZWxvdyBjb3ZlcnMgdGhlIGNhc2UgbGhzTnVsbGFiaWxpdHkgPT0KICAgIC8vIE51bGxhYmlsaXR5Lm5vbk51bGxhYmxlLgogICAgaWYgKHByb21vdGVkQm91bmQubnVsbGFiaWxpdHkgPT0gTnVsbGFiaWxpdHkubm9uTnVsbGFibGUpIHsKICAgICAgcmV0dXJuIE51bGxhYmlsaXR5Lm5vbk51bGxhYmxlOwogICAgfQoKICAgIC8vIElmIHRoZSBudWxsYWJpbGl0eSBvZiBMSFMgaXMgJ25laXRoZXIsJyB0aGUgbnVsbGFiaWxpdHkgb2YgdGhlCiAgICAvLyBpbnRlcnNlY3Rpb24gaXMgYWxzbyAnbmVpdGhlcicgaWYgUkhTIGlzICduZWl0aGVyJyBvciBudWxsYWJsZS4KICAgIC8vCiAgICAvLyBDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6CiAgICAvLwogICAgLy8gICAgIGNsYXNzIEE8WCBleHRlbmRzIE9iamVjdD8sIFkgZXh0ZW5kcyBYPiB7CiAgICAvLyAgICAgICBmb28oWCB4KSB7CiAgICAvLyAgICAgICAgIGlmICh4IGlzIFkpIHsKICAgIC8vICAgICAgICAgICB4ID0gbnVsbDsgICAgIC8vIENvbXBpbGUtdGltZSBlcnJvci4gIENvbnNpZGVyIFggPSBZID0gaW50LgogICAgLy8gICAgICAgICAgIE9iamVjdCBhID0geDsgLy8gQ29tcGlsZS10aW1lIGVycm9yLiAgQ29uc2lkZXIgWCA9IFkgPSBpbnQ/LgogICAgLy8gICAgICAgICB9CiAgICAvLyAgICAgICAgIGlmICh4IGlzIGludD8pIHsKICAgIC8vICAgICAgICAgICB4ID0gbnVsbDsgICAgIC8vIENvbXBpbGUtdGltZSBlcnJvci4gIENvbnNpZGVyIFggPSBpbnQuCiAgICAvLyAgICAgICAgICAgT2JqZWN0IGIgPSB4OyAvLyBDb21waWxlLXRpbWUgZXJyb3IuICBDb25zaWRlciBYID0gaW50Py4KICAgIC8vICAgICAgICAgfQogICAgLy8gICAgICAgfQogICAgLy8gICAgIH0KICAgIC8vCiAgICAvLyBOb3RlIHRoYXQgUkhTIGNhbid0IGJlICdsZWdhY3knIG9yIG5vbi1udWxsYWJsZSBhdCB0aGlzIHBvaW50IGR1ZSB0byB0aGUKICAgIC8vIGNoZWNrcyBhYm92ZS4KICAgIGlmIChsaHNOdWxsYWJpbGl0eSA9PSBOdWxsYWJpbGl0eS5uZWl0aGVyKSB7CiAgICAgIHJldHVybiBOdWxsYWJpbGl0eS5uZWl0aGVyOwogICAgfQoKICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIG9ubHkgcG9zc2liaWxpdHkgZm9yIExIUyBpcyB0byBiZSBudWxsYWJsZSwgYW5kIGZvciBSSFMKICAgIC8vIGlzIHRvIGJlIGVpdGhlciBudWxsYWJsZSBvciBsZWdhY3kuICBCb3RoIGNvbWJpbmF0aW9ucyBmb3IgTEhTIGFuZCBSSFMKICAgIC8vIHNob3VsZCB5aWVsZCB0aGUgbnVsbGFiaWxpdHkgb2YgUkhTIGFzIHRoZSBudWxsYWJpbGl0eSBmb3IgdGhlCiAgICAvLyBpbnRlcnNlY3Rpb24uICBDb25zaWRlciB0aGUgZm9sbG93aW5nIGNvZGUgZm9yIGNsYXJpZmljYXRpb246CiAgICAvLwogICAgLy8gICBjbGFzcyBBPFggZXh0ZW5kcyBPYmplY3Q/LCBZIGV4dGVuZHMgWD4gewogICAgLy8gICAgIGZvbyhYPyB4KSB7CiAgICAvLyAgICAgICBpZiAoeCBpcyBZKSB7CiAgICAvLyAgICAgICAgIHggPSBudWxsOyAgICAgLy8gQ29tcGlsZS10aW1lIGVycm9yLiAgQ29uc2lkZXIgWCA9IFkgPSBpbnQuCiAgICAvLyAgICAgICAgIE9iamVjdCBhID0geDsgLy8gQ29tcGlsZS10aW1lIGVycm9yLiAgQ29uc2lkZXIgWCA9IFkgPSBpbnQ/LgogICAgLy8gICAgICAgfQogICAgLy8gICAgICAgaWYgKHggaXMgaW50PykgewogICAgLy8gICAgICAgICB4ID0gbnVsbDsgICAgIC8vIE9rLiAgQm90aCBYPyBhbmQgaW50PyBhcmUgbnVsbGFibGUuCiAgICAvLyAgICAgICB9CiAgICAvLyAgICAgfQogICAgLy8gICB9CiAgICByZXR1cm4gcHJvbW90ZWRCb3VuZC5udWxsYWJpbGl0eTsKICB9Cn0KCi8vLyBEZWNsYXJhdGlvbiBvZiBhIHR5cGUgdmFyaWFibGUuCi8vLwovLy8gVHlwZSBwYXJhbWV0ZXJzIGRlY2xhcmVkIGluIGEgW0NsYXNzXSBvciBbRnVuY3Rpb25Ob2RlXSBhcmUgcGFydCBvZiB0aGUgQVNULAovLy8gaGF2ZSBhIHBhcmVudCBwb2ludGVyIHRvIGl0cyBkZWNsYXJpbmcgY2xhc3Mgb3IgZnVuY3Rpb24sIGFuZCB3aWxsIGJlIHNlZW4KLy8vIGJ5IHRyZWUgdmlzaXRvcnMuCi8vLwovLy8gVHlwZSBwYXJhbWV0ZXJzIGRlY2xhcmVkIGJ5IGEgW0Z1bmN0aW9uVHlwZV0gYXJlIG9ycGhhbnMgYW5kIGhhdmUgYSBgbnVsbGAKLy8vIHBhcmVudCBwb2ludGVyLiAgW1R5cGVQYXJhbWV0ZXJdIG9iamVjdHMgc2hvdWxkIG5vdCBiZSBzaGFyZWQgYmV0d2VlbgovLy8gZGlmZmVyZW50IFtGdW5jdGlvblR5cGVdIG9iamVjdHMuCmNsYXNzIFR5cGVQYXJhbWV0ZXIgZXh0ZW5kcyBUcmVlTm9kZSB7CiAgaW50IGZsYWdzID0gMDsKCiAgLy8vIExpc3Qgb2YgbWV0YWRhdGEgYW5ub3RhdGlvbnMgb24gdGhlIHR5cGUgcGFyYW1ldGVyLgogIC8vLwogIC8vLyBUaGlzIGRlZmF1bHRzIHRvIGFuIGltbXV0YWJsZSBlbXB0eSBsaXN0LiBVc2UgW2FkZEFubm90YXRpb25dIHRvIGFkZAogIC8vLyBhbm5vdGF0aW9ucyBpZiBuZWVkZWQuCiAgTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9ucyA9IGNvbnN0IDxFeHByZXNzaW9uPltdOwoKICBTdHJpbmcgbmFtZTsgLy8gQ29zbWV0aWMgbmFtZS4KCiAgLy8vIFRoZSBib3VuZCBvbiB0aGUgdHlwZSB2YXJpYWJsZS4KICAvLy8KICAvLy8gU2hvdWxkIG5vdCBiZSBudWxsIGV4Y2VwdCB0ZW1wb3JhcmlseSBkdXJpbmcgSVIgY29uc3RydWN0aW9uLiAgU2hvdWxkCiAgLy8vIGJlIHNldCB0byB0aGUgcm9vdCBjbGFzcyBmb3IgdHlwZSBwYXJhbWV0ZXJzIHdpdGhvdXQgYW4gZXhwbGljaXQgYm91bmQuCiAgRGFydFR5cGUgYm91bmQ7CgogIC8vLyBUaGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgdHlwZSB2YXJpYWJsZS4gSXQgaXMgdXNlZCB0byBwcm92aWRlIHRoZQogIC8vLyBjb3JyZXNwb25kaW5nIG1pc3NpbmcgdHlwZSBhcmd1bWVudCBpbiB0eXBlIGFubm90YXRpb25zIGFuZCBhcyB0aGUKICAvLy8gZmFsbC1iYWNrIHR5cGUgdmFsdWUgaW4gdHlwZSBpbmZlcmVuY2UgYXQgY29tcGlsZSB0aW1lLiBBdCBydW4gdGltZSwKICAvLy8gW2RlZmF1bHRUeXBlXSBpcyB1c2VkIGJ5IHRoZSBiYWNrZW5kcyBpbiBwbGFjZSBvZiB0aGUgbWlzc2luZyB0eXBlCiAgLy8vIGFyZ3VtZW50IG9mIGEgZHluYW1pYyBpbnZvY2F0aW9uIG9mIGEgZ2VuZXJpYyBmdW5jdGlvbi4KICBEYXJ0VHlwZSBkZWZhdWx0VHlwZTsKCiAgVHlwZVBhcmFtZXRlcihbdGhpcy5uYW1lLCB0aGlzLmJvdW5kLCB0aGlzLmRlZmF1bHRUeXBlXSk7CgogIC8vIE11c3QgbWF0Y2ggc2VyaWFsaXplZCBiaXQgcG9zaXRpb25zLgogIHN0YXRpYyBjb25zdCBpbnQgRmxhZ0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gMSA8PCAwOwoKICAvLy8gSWYgdGhpcyBbVHlwZVBhcmFtZXRlcl0gaXMgYSB0eXBlIHBhcmFtZXRlciBvZiBhIGdlbmVyaWMgbWV0aG9kLCBpbmRpY2F0ZXMKICAvLy8gd2hldGhlciB0aGUgbWV0aG9kIGltcGxlbWVudGF0aW9uIG5lZWRzIHRvIGNvbnRhaW4gYSBydW50aW1lIHR5cGUgY2hlY2sgdG8KICAvLy8gZGVhbCB3aXRoIGdlbmVyaWMgY292YXJpYW5jZS4KICAvLy8KICAvLy8gV2hlbiBgdHJ1ZWAsIHJ1bnRpbWUgY2hlY2tzIG1heSBuZWVkIHRvIGJlIHBlcmZvcm1lZDsgc2VlCiAgLy8vIFtEaXNwYXRjaENhdGVnb3J5XSBmb3IgZGV0YWlscy4KICBib29sIGdldCBpc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0+IGZsYWdzICYgRmxhZ0dlbmVyaWNDb3ZhcmlhbnRJbXBsICE9IDA7CgogIHZvaWQgc2V0IGlzR2VuZXJpY0NvdmFyaWFudEltcGwoYm9vbCB2YWx1ZSkgewogICAgZmxhZ3MgPSB2YWx1ZQogICAgICAgID8gKGZsYWdzIHwgRmxhZ0dlbmVyaWNDb3ZhcmlhbnRJbXBsKQogICAgICAgIDogKGZsYWdzICYgfkZsYWdHZW5lcmljQ292YXJpYW50SW1wbCk7CiAgfQoKICB2b2lkIGFkZEFubm90YXRpb24oRXhwcmVzc2lvbiBhbm5vdGF0aW9uKSB7CiAgICBpZiAoYW5ub3RhdGlvbnMuaXNFbXB0eSkgewogICAgICBhbm5vdGF0aW9ucyA9IDxFeHByZXNzaW9uPltdOwogICAgfQogICAgYW5ub3RhdGlvbnMuYWRkKGFubm90YXRpb24uLnBhcmVudCA9IHRoaXMpOwogIH0KCiAgYWNjZXB0KFRyZWVWaXNpdG9yIHYpID0+IHYudmlzaXRUeXBlUGFyYW1ldGVyKHRoaXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdmlzaXRMaXN0KGFubm90YXRpb25zLCB2KTsKICAgIGJvdW5kLmFjY2VwdCh2KTsKICAgIGRlZmF1bHRUeXBlPy5hY2NlcHQodik7CiAgfQoKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KGFubm90YXRpb25zLCB2LCB0aGlzKTsKICAgIGJvdW5kID0gdi52aXNpdERhcnRUeXBlKGJvdW5kKTsKICAgIGlmIChkZWZhdWx0VHlwZSAhPSBudWxsKSB7CiAgICAgIGRlZmF1bHRUeXBlID0gdi52aXNpdERhcnRUeXBlKGRlZmF1bHRUeXBlKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIGEgcG9zc2libHkgc3ludGhlc2l6ZWQgbmFtZSBmb3IgdGhpcyB0eXBlIHBhcmFtZXRlciwgY29uc2lzdGVudAogIC8vLyB3aXRoIHRoZSBuYW1lcyB1c2VkIGFjcm9zcyBhbGwgW3RvU3RyaW5nXSBjYWxscy4KICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBkZWJ1Z1F1YWxpZmllZFR5cGVQYXJhbWV0ZXJOYW1lKHRoaXMpOwoKICBib29sIGdldCBpc0Z1bmN0aW9uVHlwZVR5cGVQYXJhbWV0ZXIgPT4gcGFyZW50ID09IG51bGw7Cn0KCmNsYXNzIFN1cGVydHlwZSBleHRlbmRzIE5vZGUgewogIFJlZmVyZW5jZSBjbGFzc05hbWU7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKCiAgU3VwZXJ0eXBlKENsYXNzIGNsYXNzTm9kZSwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykKICAgICAgOiB0aGlzLmJ5UmVmZXJlbmNlKGdldENsYXNzUmVmZXJlbmNlKGNsYXNzTm9kZSksIHR5cGVBcmd1bWVudHMpOwoKICBTdXBlcnR5cGUuYnlSZWZlcmVuY2UodGhpcy5jbGFzc05hbWUsIHRoaXMudHlwZUFyZ3VtZW50cyk7CgogIENsYXNzIGdldCBjbGFzc05vZGUgPT4gY2xhc3NOYW1lLmFzQ2xhc3M7CgogIGFjY2VwdChWaXNpdG9yIHYpID0+IHYudmlzaXRTdXBlcnR5cGUodGhpcyk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7CiAgICBjbGFzc05vZGUuYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgdmlzaXRMaXN0KHR5cGVBcmd1bWVudHMsIHYpOwogIH0KCiAgSW50ZXJmYWNlVHlwZSBnZXQgYXNJbnRlcmZhY2VUeXBlIHsKICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShjbGFzc05vZGUsIHR5cGVBcmd1bWVudHMpOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyBTdXBlcnR5cGUpIHsKICAgICAgaWYgKGNsYXNzTmFtZSAhPSBvdGhlci5jbGFzc05hbWUpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKHR5cGVBcmd1bWVudHMubGVuZ3RoICE9IG90aGVyLnR5cGVBcmd1bWVudHMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZUFyZ3VtZW50cy5sZW5ndGg7ICsraSkgewogICAgICAgIGlmICh0eXBlQXJndW1lbnRzW2ldICE9IG90aGVyLnR5cGVBcmd1bWVudHNbaV0pIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIGludCBnZXQgaGFzaENvZGUgewogICAgaW50IGhhc2ggPSAweDNmZmZmZmZmICYgY2xhc3NOYW1lLmhhc2hDb2RlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIGhhc2ggPSAweDNmZmZmZmZmICYgKGhhc2ggKiAzMSArIChoYXNoIF4gdHlwZUFyZ3VtZW50c1tpXS5oYXNoQ29kZSkpOwogICAgfQogICAgcmV0dXJuIGhhc2g7CiAgfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlNUQU5UUwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCmFic3RyYWN0IGNsYXNzIENvbnN0YW50IGV4dGVuZHMgTm9kZSB7CiAgLy8vIENhbGxzIHRoZSBgdmlzaXQqQ29uc3RhbnRSZWZlcmVuY2UoKWAgbWV0aG9kIG9uIHZpc2l0b3IgW3ZdIGZvciBhbGwKICAvLy8gY29uc3RhbnRzIHJlZmVyZW5jZWQgaW4gdGhpcyBjb25zdGFudC4KICAvLy8KICAvLy8gKE5vdGUgdGhhdCBhIGNvbnN0YW50IGNhbiBiZSBzZWVuIGFzIGEgREFHIChkaXJlY3RlZCBhY3ljbGljIGdyYXBoKSBhbmQKICAvLy8gIG5vdCBhIHRyZWUhKQogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KTsKCiAgLy8vIENhbGxzIHRoZSBgdmlzaXQqQ29uc3RhbnQoKWAgbWV0aG9kIG9uIHRoZSB2aXNpdG9yIFt2XS4KICBhY2NlcHQoQ29uc3RhbnRWaXNpdG9yIHYpOwoKICAvLy8gQ2FsbHMgdGhlIGB2aXNpdCpDb25zdGFudFJlZmVyZW5jZSgpYCBtZXRob2Qgb24gdGhlIHZpc2l0b3IgW3ZdLgogIGFjY2VwdFJlZmVyZW5jZShWaXNpdG9yIHYpOwoKICAvLy8gVGhlIEtlcm5lbCBBU1Qgd2lsbCByZWZlcmVuY2UgW0NvbnN0YW50XXMgdmlhIFtDb25zdGFudEV4cHJlc3Npb25dcy4gIFRoZQogIC8vLyBjb25zdGFudHMgYXJlIG5vdCByZXF1aXJlZCB0byBiZSBjYW5vbmljYWxpemVkLCBidXQgdGhleSBoYXZlIHRvIGJlIGRlZXBseQogIC8vLyBjb21wYXJhYmxlIHZpYSBoYXNoQ29kZS89PSEKICBpbnQgZ2V0IGhhc2hDb2RlOwogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKTsKCiAgLy8vIEdldHMgdGhlIHR5cGUgb2YgdGhpcyBjb25zdGFudC4KICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcyk7CgogIEV4cHJlc3Npb24gYXNFeHByZXNzaW9uKCkgewogICAgcmV0dXJuIG5ldyBDb25zdGFudEV4cHJlc3Npb24odGhpcyk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBQcmltaXRpdmVDb25zdGFudDxUPiBleHRlbmRzIENvbnN0YW50IHsKICBmaW5hbCBUIHZhbHVlOwoKICBQcmltaXRpdmVDb25zdGFudCh0aGlzLnZhbHVlKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR2YWx1ZSc7CgogIGludCBnZXQgaGFzaENvZGUgPT4gdmFsdWUuaGFzaENvZGU7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSA9PgogICAgICBvdGhlciBpcyBQcmltaXRpdmVDb25zdGFudDxUPiAmJiBvdGhlci52YWx1ZSA9PSB2YWx1ZTsKfQoKY2xhc3MgTnVsbENvbnN0YW50IGV4dGVuZHMgUHJpbWl0aXZlQ29uc3RhbnQ8TnVsbD4gewogIE51bGxDb25zdGFudCgpIDogc3VwZXIobnVsbCk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIGFjY2VwdChDb25zdGFudFZpc2l0b3IgdikgPT4gdi52aXNpdE51bGxDb25zdGFudCh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PiB2LnZpc2l0TnVsbENvbnN0YW50UmVmZXJlbmNlKHRoaXMpOwoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMubnVsbFR5cGU7Cn0KCmNsYXNzIEJvb2xDb25zdGFudCBleHRlbmRzIFByaW1pdGl2ZUNvbnN0YW50PGJvb2w+IHsKICBCb29sQ29uc3RhbnQoYm9vbCB2YWx1ZSkgOiBzdXBlcih2YWx1ZSk7CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvciB2KSB7fQogIGFjY2VwdChDb25zdGFudFZpc2l0b3IgdikgPT4gdi52aXNpdEJvb2xDb25zdGFudCh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PiB2LnZpc2l0Qm9vbENvbnN0YW50UmVmZXJlbmNlKHRoaXMpOwoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMuYm9vbFR5cGU7Cn0KCmNsYXNzIEludENvbnN0YW50IGV4dGVuZHMgUHJpbWl0aXZlQ29uc3RhbnQ8aW50PiB7CiAgSW50Q29uc3RhbnQoaW50IHZhbHVlKSA6IHN1cGVyKHZhbHVlKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CiAgYWNjZXB0KENvbnN0YW50VmlzaXRvciB2KSA9PiB2LnZpc2l0SW50Q29uc3RhbnQodGhpcyk7CiAgYWNjZXB0UmVmZXJlbmNlKFZpc2l0b3IgdikgPT4gdi52aXNpdEludENvbnN0YW50UmVmZXJlbmNlKHRoaXMpOwoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMuaW50VHlwZTsKfQoKY2xhc3MgRG91YmxlQ29uc3RhbnQgZXh0ZW5kcyBQcmltaXRpdmVDb25zdGFudDxkb3VibGU+IHsKICBEb3VibGVDb25zdGFudChkb3VibGUgdmFsdWUpIDogc3VwZXIodmFsdWUpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3Igdikge30KICBhY2NlcHQoQ29uc3RhbnRWaXNpdG9yIHYpID0+IHYudmlzaXREb3VibGVDb25zdGFudCh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PiB2LnZpc2l0RG91YmxlQ29uc3RhbnRSZWZlcmVuY2UodGhpcyk7CgogIGludCBnZXQgaGFzaENvZGUgPT4gdmFsdWUuaXNOYU4gPyAxOTkgOiBzdXBlci5oYXNoQ29kZTsKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4KICAgICAgb3RoZXIgaXMgRG91YmxlQ29uc3RhbnQgJiYgaWRlbnRpY2FsKHZhbHVlLCBvdGhlci52YWx1ZSk7CgogIERhcnRUeXBlIGdldFR5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlcy5kb3VibGVUeXBlOwp9CgpjbGFzcyBTdHJpbmdDb25zdGFudCBleHRlbmRzIFByaW1pdGl2ZUNvbnN0YW50PFN0cmluZz4gewogIFN0cmluZ0NvbnN0YW50KFN0cmluZyB2YWx1ZSkgOiBzdXBlcih2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogIH0KCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CiAgYWNjZXB0KENvbnN0YW50VmlzaXRvciB2KSA9PiB2LnZpc2l0U3RyaW5nQ29uc3RhbnQodGhpcyk7CiAgYWNjZXB0UmVmZXJlbmNlKFZpc2l0b3IgdikgPT4gdi52aXNpdFN0cmluZ0NvbnN0YW50UmVmZXJlbmNlKHRoaXMpOwoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMuc3RyaW5nVHlwZTsKfQoKY2xhc3MgU3ltYm9sQ29uc3RhbnQgZXh0ZW5kcyBDb25zdGFudCB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgUmVmZXJlbmNlIGxpYnJhcnlSZWZlcmVuY2U7CgogIFN5bWJvbENvbnN0YW50KHRoaXMubmFtZSwgdGhpcy5saWJyYXJ5UmVmZXJlbmNlKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHt9CgogIGFjY2VwdChDb25zdGFudFZpc2l0b3IgdikgPT4gdi52aXNpdFN5bWJvbENvbnN0YW50KHRoaXMpOwogIGFjY2VwdFJlZmVyZW5jZShWaXNpdG9yIHYpID0+IHYudmlzaXRTeW1ib2xDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuIGxpYnJhcnlSZWZlcmVuY2UgIT0gbnVsbAogICAgICAgID8gJyMke2xpYnJhcnlSZWZlcmVuY2UuYXNMaWJyYXJ5LmltcG9ydFVyaX06OiRuYW1lJwogICAgICAgIDogJyMkbmFtZSc7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF9IYXNoLmhhc2gyKG5hbWUsIGxpYnJhcnlSZWZlcmVuY2UpOwoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4KICAgICAgaWRlbnRpY2FsKHRoaXMsIG90aGVyKSB8fAogICAgICAob3RoZXIgaXMgU3ltYm9sQ29uc3RhbnQgJiYKICAgICAgICAgIG90aGVyLm5hbWUgPT0gbmFtZSAmJgogICAgICAgICAgb3RoZXIubGlicmFyeVJlZmVyZW5jZSA9PSBsaWJyYXJ5UmVmZXJlbmNlKTsKCiAgRGFydFR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+IHR5cGVzLnN5bWJvbFR5cGU7Cn0KCmNsYXNzIE1hcENvbnN0YW50IGV4dGVuZHMgQ29uc3RhbnQgewogIGZpbmFsIERhcnRUeXBlIGtleVR5cGU7CiAgZmluYWwgRGFydFR5cGUgdmFsdWVUeXBlOwogIGZpbmFsIExpc3Q8Q29uc3RhbnRNYXBFbnRyeT4gZW50cmllczsKCiAgTWFwQ29uc3RhbnQodGhpcy5rZXlUeXBlLCB0aGlzLnZhbHVlVHlwZSwgdGhpcy5lbnRyaWVzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIGtleVR5cGUuYWNjZXB0KHYpOwogICAgdmFsdWVUeXBlLmFjY2VwdCh2KTsKICAgIGZvciAoZmluYWwgQ29uc3RhbnRNYXBFbnRyeSBlbnRyeSBpbiBlbnRyaWVzKSB7CiAgICAgIGVudHJ5LmtleS5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICAgIGVudHJ5LnZhbHVlLmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIH0KICB9CgogIGFjY2VwdChDb25zdGFudFZpc2l0b3IgdikgPT4gdi52aXNpdE1hcENvbnN0YW50KHRoaXMpOwogIGFjY2VwdFJlZmVyZW5jZShWaXNpdG9yIHYpID0+IHYudmlzaXRNYXBDb25zdGFudFJlZmVyZW5jZSh0aGlzKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7dGhpcy5ydW50aW1lVHlwZX08JGtleVR5cGUsICR2YWx1ZVR5cGU+KCRlbnRyaWVzKSc7CgogIGludCBfY2FjaGVkSGFzaENvZGU7CiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gX2NhY2hlZEhhc2hDb2RlID8/PSBfSGFzaC5jb21iaW5lMkZpbmlzaCgKICAgICAgICBrZXlUeXBlLmhhc2hDb2RlLCB2YWx1ZVR5cGUuaGFzaENvZGUsIF9IYXNoLmNvbWJpbmVMaXN0SGFzaChlbnRyaWVzKSk7CiAgfQoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4KICAgICAgaWRlbnRpY2FsKHRoaXMsIG90aGVyKSB8fAogICAgICAob3RoZXIgaXMgTWFwQ29uc3RhbnQgJiYKICAgICAgICAgIG90aGVyLmtleVR5cGUgPT0ga2V5VHlwZSAmJgogICAgICAgICAgb3RoZXIudmFsdWVUeXBlID09IHZhbHVlVHlwZSAmJgogICAgICAgICAgbGlzdEVxdWFscyhvdGhlci5lbnRyaWVzLCBlbnRyaWVzKSk7CgogIERhcnRUeXBlIGdldFR5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PgogICAgICB0eXBlcy5saXRlcmFsTWFwVHlwZShrZXlUeXBlLCB2YWx1ZVR5cGUpOwp9CgpjbGFzcyBDb25zdGFudE1hcEVudHJ5IHsKICBmaW5hbCBDb25zdGFudCBrZXk7CiAgZmluYWwgQ29uc3RhbnQgdmFsdWU7CiAgQ29uc3RhbnRNYXBFbnRyeSh0aGlzLmtleSwgdGhpcy52YWx1ZSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICcka2V5OiAkdmFsdWUnOwoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IF9IYXNoLmhhc2gyKGtleSwgdmFsdWUpOwoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4KICAgICAgb3RoZXIgaXMgQ29uc3RhbnRNYXBFbnRyeSAmJiBvdGhlci5rZXkgPT0ga2V5ICYmIG90aGVyLnZhbHVlID09IHZhbHVlOwp9CgpjbGFzcyBMaXN0Q29uc3RhbnQgZXh0ZW5kcyBDb25zdGFudCB7CiAgZmluYWwgRGFydFR5cGUgdHlwZUFyZ3VtZW50OwogIGZpbmFsIExpc3Q8Q29uc3RhbnQ+IGVudHJpZXM7CgogIExpc3RDb25zdGFudCh0aGlzLnR5cGVBcmd1bWVudCwgdGhpcy5lbnRyaWVzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHR5cGVBcmd1bWVudC5hY2NlcHQodik7CiAgICBmb3IgKGZpbmFsIENvbnN0YW50IGNvbnN0YW50IGluIGVudHJpZXMpIHsKICAgICAgY29uc3RhbnQuYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgfQogIH0KCiAgYWNjZXB0KENvbnN0YW50VmlzaXRvciB2KSA9PiB2LnZpc2l0TGlzdENvbnN0YW50KHRoaXMpOwogIGFjY2VwdFJlZmVyZW5jZShWaXNpdG9yIHYpID0+IHYudmlzaXRMaXN0Q29uc3RhbnRSZWZlcmVuY2UodGhpcyk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICcke3RoaXMucnVudGltZVR5cGV9PCR0eXBlQXJndW1lbnQ+KCRlbnRyaWVzKSc7CgogIGludCBfY2FjaGVkSGFzaENvZGU7CiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gX2NhY2hlZEhhc2hDb2RlID8/PSBfSGFzaC5jb21iaW5lRmluaXNoKAogICAgICAgIHR5cGVBcmd1bWVudC5oYXNoQ29kZSwgX0hhc2guY29tYmluZUxpc3RIYXNoKGVudHJpZXMpKTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSA9PgogICAgICBpZGVudGljYWwodGhpcywgb3RoZXIpIHx8CiAgICAgIChvdGhlciBpcyBMaXN0Q29uc3RhbnQgJiYKICAgICAgICAgIG90aGVyLnR5cGVBcmd1bWVudCA9PSB0eXBlQXJndW1lbnQgJiYKICAgICAgICAgIGxpc3RFcXVhbHMob3RoZXIuZW50cmllcywgZW50cmllcykpOwoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4KICAgICAgdHlwZXMubGl0ZXJhbExpc3RUeXBlKHR5cGVBcmd1bWVudCk7Cn0KCmNsYXNzIFNldENvbnN0YW50IGV4dGVuZHMgQ29uc3RhbnQgewogIGZpbmFsIERhcnRUeXBlIHR5cGVBcmd1bWVudDsKICBmaW5hbCBMaXN0PENvbnN0YW50PiBlbnRyaWVzOwoKICBTZXRDb25zdGFudCh0aGlzLnR5cGVBcmd1bWVudCwgdGhpcy5lbnRyaWVzKTsKCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yIHYpIHsKICAgIHR5cGVBcmd1bWVudC5hY2NlcHQodik7CiAgICBmb3IgKGZpbmFsIENvbnN0YW50IGNvbnN0YW50IGluIGVudHJpZXMpIHsKICAgICAgY29uc3RhbnQuYWNjZXB0UmVmZXJlbmNlKHYpOwogICAgfQogIH0KCiAgYWNjZXB0KENvbnN0YW50VmlzaXRvciB2KSA9PiB2LnZpc2l0U2V0Q29uc3RhbnQodGhpcyk7CiAgYWNjZXB0UmVmZXJlbmNlKFZpc2l0b3IgdikgPT4gdi52aXNpdFNldENvbnN0YW50UmVmZXJlbmNlKHRoaXMpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHt0aGlzLnJ1bnRpbWVUeXBlfTwkdHlwZUFyZ3VtZW50PigkZW50cmllcyknOwoKICBpbnQgX2NhY2hlZEhhc2hDb2RlOwogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIF9jYWNoZWRIYXNoQ29kZSA/Pz0gX0hhc2guY29tYmluZUZpbmlzaCgKICAgICAgICB0eXBlQXJndW1lbnQuaGFzaENvZGUsIF9IYXNoLmNvbWJpbmVMaXN0SGFzaChlbnRyaWVzKSk7CiAgfQoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4KICAgICAgaWRlbnRpY2FsKHRoaXMsIG90aGVyKSB8fAogICAgICAob3RoZXIgaXMgU2V0Q29uc3RhbnQgJiYKICAgICAgICAgIG90aGVyLnR5cGVBcmd1bWVudCA9PSB0eXBlQXJndW1lbnQgJiYKICAgICAgICAgIGxpc3RFcXVhbHMob3RoZXIuZW50cmllcywgZW50cmllcykpOwoKICBEYXJ0VHlwZSBnZXRUeXBlKFR5cGVFbnZpcm9ubWVudCB0eXBlcykgPT4gdHlwZXMubGl0ZXJhbFNldFR5cGUodHlwZUFyZ3VtZW50KTsKfQoKY2xhc3MgSW5zdGFuY2VDb25zdGFudCBleHRlbmRzIENvbnN0YW50IHsKICBmaW5hbCBSZWZlcmVuY2UgY2xhc3NSZWZlcmVuY2U7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKICBmaW5hbCBNYXA8UmVmZXJlbmNlLCBDb25zdGFudD4gZmllbGRWYWx1ZXM7CgogIEluc3RhbmNlQ29uc3RhbnQodGhpcy5jbGFzc1JlZmVyZW5jZSwgdGhpcy50eXBlQXJndW1lbnRzLCB0aGlzLmZpZWxkVmFsdWVzKTsKCiAgQ2xhc3MgZ2V0IGNsYXNzTm9kZSA9PiBjbGFzc1JlZmVyZW5jZS5hc0NsYXNzOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgY2xhc3NSZWZlcmVuY2UuYXNDbGFzcy5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICB2aXNpdExpc3QodHlwZUFyZ3VtZW50cywgdik7CiAgICBmb3IgKGZpbmFsIFJlZmVyZW5jZSByZWZlcmVuY2UgaW4gZmllbGRWYWx1ZXMua2V5cykgewogICAgICByZWZlcmVuY2UuYXNGaWVsZC5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICB9CiAgICBmb3IgKGZpbmFsIENvbnN0YW50IGNvbnN0YW50IGluIGZpZWxkVmFsdWVzLnZhbHVlcykgewogICAgICBjb25zdGFudC5hY2NlcHRSZWZlcmVuY2Uodik7CiAgICB9CiAgfQoKICBhY2NlcHQoQ29uc3RhbnRWaXNpdG9yIHYpID0+IHYudmlzaXRJbnN0YW5jZUNvbnN0YW50KHRoaXMpOwogIGFjY2VwdFJlZmVyZW5jZShWaXNpdG9yIHYpID0+IHYudmlzaXRJbnN0YW5jZUNvbnN0YW50UmVmZXJlbmNlKHRoaXMpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBmaW5hbCBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCcke2NsYXNzUmVmZXJlbmNlLmFzQ2xhc3N9Jyk7CiAgICBpZiAoIWNsYXNzUmVmZXJlbmNlLmFzQ2xhc3MudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICBzYi53cml0ZSgnPCcpOwogICAgICBzYi53cml0ZSh0eXBlQXJndW1lbnRzLm1hcCgodHlwZSkgPT4gdHlwZS50b1N0cmluZygpKS5qb2luKCcsICcpKTsKICAgICAgc2Iud3JpdGUoJz4nKTsKICAgIH0KICAgIHNiLndyaXRlKCcgeycpOwogICAgZmllbGRWYWx1ZXMuZm9yRWFjaCgoUmVmZXJlbmNlIGZpZWxkUmVmLCBDb25zdGFudCBjb25zdGFudCkgewogICAgICBzYi53cml0ZSgnJHtmaWVsZFJlZi5hc0ZpZWxkLm5hbWV9OiAkY29uc3RhbnQsICcpOwogICAgfSk7CiAgICBzYi53cml0ZSgnfScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBpbnQgX2NhY2hlZEhhc2hDb2RlOwogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIF9jYWNoZWRIYXNoQ29kZSA/Pz0gX0hhc2guY29tYmluZTJGaW5pc2goCiAgICAgICAgY2xhc3NSZWZlcmVuY2UuaGFzaENvZGUsCiAgICAgICAgbGlzdEhhc2hDb2RlKHR5cGVBcmd1bWVudHMpLAogICAgICAgIF9IYXNoLmNvbWJpbmVNYXBIYXNoVW5vcmRlcmVkKGZpZWxkVmFsdWVzKSk7CiAgfQoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgcmV0dXJuIGlkZW50aWNhbCh0aGlzLCBvdGhlcikgfHwKICAgICAgICAob3RoZXIgaXMgSW5zdGFuY2VDb25zdGFudCAmJgogICAgICAgICAgICBvdGhlci5jbGFzc1JlZmVyZW5jZSA9PSBjbGFzc1JlZmVyZW5jZSAmJgogICAgICAgICAgICBsaXN0RXF1YWxzKG90aGVyLnR5cGVBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpICYmCiAgICAgICAgICAgIG1hcEVxdWFscyhvdGhlci5maWVsZFZhbHVlcywgZmllbGRWYWx1ZXMpKTsKICB9CgogIERhcnRUeXBlIGdldFR5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PgogICAgICBuZXcgSW50ZXJmYWNlVHlwZShjbGFzc05vZGUsIHR5cGVBcmd1bWVudHMpOwp9CgpjbGFzcyBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IGV4dGVuZHMgQ29uc3RhbnQgewogIGZpbmFsIFRlYXJPZmZDb25zdGFudCB0ZWFyT2ZmQ29uc3RhbnQ7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZXM7CgogIFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQodGhpcy50ZWFyT2ZmQ29uc3RhbnQsIHRoaXMudHlwZXMpOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgdGVhck9mZkNvbnN0YW50LmFjY2VwdFJlZmVyZW5jZSh2KTsKICAgIHZpc2l0TGlzdCh0eXBlcywgdik7CiAgfQoKICBhY2NlcHQoQ29uc3RhbnRWaXNpdG9yIHYpID0+IHYudmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KHRoaXMpOwogIGFjY2VwdFJlZmVyZW5jZShWaXNpdG9yIHYpID0+CiAgICAgIHYudmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50UmVmZXJlbmNlKHRoaXMpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJyR7cnVudGltZVR5cGV9KCR7dGVhck9mZkNvbnN0YW50LnByb2NlZHVyZX08JHt0eXBlcy5qb2luKCcsICcpfT4pJzsKICB9CgogIGludCBnZXQgaGFzaENvZGUgPT4gX0hhc2guY29tYmluZUZpbmlzaCgKICAgICAgdGVhck9mZkNvbnN0YW50Lmhhc2hDb2RlLCBfSGFzaC5jb21iaW5lTGlzdEhhc2godHlwZXMpKTsKCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50ICYmCiAgICAgICAgb3RoZXIudGVhck9mZkNvbnN0YW50ID09IHRlYXJPZmZDb25zdGFudCAmJgogICAgICAgIGxpc3RFcXVhbHMob3RoZXIudHlwZXMsIHR5cGVzKTsKICB9CgogIERhcnRUeXBlIGdldFR5cGUoVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCkgewogICAgZmluYWwgRnVuY3Rpb25UeXBlIHR5cGUgPSB0ZWFyT2ZmQ29uc3RhbnQuZ2V0VHlwZSh0eXBlRW52aXJvbm1lbnQpOwogICAgZmluYWwgbWFwcGluZyA9IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgIGZvciAoZmluYWwgcGFyYW1ldGVyIGluIHR5cGUudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgbWFwcGluZ1twYXJhbWV0ZXJdID0gdHlwZXNbbWFwcGluZy5sZW5ndGhdOwogICAgfQogICAgcmV0dXJuIHN1YnN0aXR1dGUodHlwZS53aXRob3V0VHlwZVBhcmFtZXRlcnMsIG1hcHBpbmcpOwogIH0KfQoKY2xhc3MgVGVhck9mZkNvbnN0YW50IGV4dGVuZHMgQ29uc3RhbnQgewogIGZpbmFsIFJlZmVyZW5jZSBwcm9jZWR1cmVSZWZlcmVuY2U7CgogIFRlYXJPZmZDb25zdGFudChQcm9jZWR1cmUgcHJvY2VkdXJlKQogICAgICA6IHByb2NlZHVyZVJlZmVyZW5jZSA9IHByb2NlZHVyZS5yZWZlcmVuY2UgewogICAgYXNzZXJ0KHByb2NlZHVyZS5pc1N0YXRpYyk7CiAgfQoKICBUZWFyT2ZmQ29uc3RhbnQuYnlSZWZlcmVuY2UodGhpcy5wcm9jZWR1cmVSZWZlcmVuY2UpOwoKICBQcm9jZWR1cmUgZ2V0IHByb2NlZHVyZSA9PiBwcm9jZWR1cmVSZWZlcmVuY2U/LmFzUHJvY2VkdXJlOwoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3IgdikgewogICAgcHJvY2VkdXJlUmVmZXJlbmNlLmFzUHJvY2VkdXJlLmFjY2VwdFJlZmVyZW5jZSh2KTsKICB9CgogIGFjY2VwdChDb25zdGFudFZpc2l0b3IgdikgPT4gdi52aXNpdFRlYXJPZmZDb25zdGFudCh0aGlzKTsKICBhY2NlcHRSZWZlcmVuY2UoVmlzaXRvciB2KSA9PiB2LnZpc2l0VGVhck9mZkNvbnN0YW50UmVmZXJlbmNlKHRoaXMpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJyR7cnVudGltZVR5cGV9KCR7cHJvY2VkdXJlfSknOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSA9PiBwcm9jZWR1cmUuaGFzaENvZGU7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgVGVhck9mZkNvbnN0YW50ICYmIG90aGVyLnByb2NlZHVyZSA9PSBwcm9jZWR1cmU7CiAgfQoKICBGdW5jdGlvblR5cGUgZ2V0VHlwZShUeXBlRW52aXJvbm1lbnQgdHlwZXMpID0+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/LnJlZmVyZW5jZTsKfQoKLy8vIFJldHVybnMgdGhlIGNhbm9uaWNhbCBuYW1lIG9mIFttZW1iZXJdLCBvciB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZQovLy8gbWVtYmVyIGhhcyBub3QgYmVlbiBhc3NpZ25lZCBhIGNhbm9uaWNhbCBuYW1lIHlldC4KLy8vCi8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGUgbWVtYmVyIGlzIGBudWxsYC4KQ2Fub25pY2FsTmFtZSBnZXRDYW5vbmljYWxOYW1lT2ZNZW1iZXIoTWVtYmVyIG1lbWJlcikgewogIGlmIChtZW1iZXIgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgaWYgKG1lbWJlci5jYW5vbmljYWxOYW1lID09IG51bGwpIHsKICAgIHRocm93ICckbWVtYmVyIGhhcyBubyBjYW5vbmljYWwgbmFtZSc7CiAgfQogIHJldHVybiBtZW1iZXIuY2Fub25pY2FsTmFtZTsKfQoKLy8vIFJldHVybnMgdGhlIGNhbm9uaWNhbCBuYW1lIG9mIFtjbGFzc19dLCBvciB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZQovLy8gY2xhc3MgaGFzIG5vdCBiZWVuIGFzc2lnbmVkIGEgY2Fub25pY2FsIG5hbWUgeWV0LgovLy8KLy8vIFJldHVybnMgYG51bGxgIGlmIHRoZSBjbGFzcyBpcyBgbnVsbGAuCkNhbm9uaWNhbE5hbWUgZ2V0Q2Fub25pY2FsTmFtZU9mQ2xhc3MoQ2xhc3MgY2xhc3NfKSB7CiAgaWYgKGNsYXNzXyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICBpZiAoY2xhc3NfLmNhbm9uaWNhbE5hbWUgPT0gbnVsbCkgewogICAgdGhyb3cgJyRjbGFzc18gaGFzIG5vIGNhbm9uaWNhbCBuYW1lJzsKICB9CiAgcmV0dXJuIGNsYXNzXy5jYW5vbmljYWxOYW1lOwp9CgovLy8gUmV0dXJucyB0aGUgY2Fub25pY2FsIG5hbWUgb2YgW2xpYnJhcnldLCBvciB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZQovLy8gbGlicmFyeSBoYXMgbm90IGJlZW4gYXNzaWduZWQgYSBjYW5vbmljYWwgbmFtZSB5ZXQuCi8vLwovLy8gUmV0dXJucyBgbnVsbGAgaWYgdGhlIGxpYnJhcnkgaXMgYG51bGxgLgpDYW5vbmljYWxOYW1lIGdldENhbm9uaWNhbE5hbWVPZkxpYnJhcnkoTGlicmFyeSBsaWJyYXJ5KSB7CiAgaWYgKGxpYnJhcnkgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgaWYgKGxpYnJhcnkuY2Fub25pY2FsTmFtZSA9PSBudWxsKSB7CiAgICB0aHJvdyAnJGxpYnJhcnkgaGFzIG5vIGNhbm9uaWNhbCBuYW1lJzsKICB9CiAgcmV0dXJuIGxpYnJhcnkuY2Fub25pY2FsTmFtZTsKfQoKLy8vIE11cm11ci1pbnNwaXJlZCBoYXNoaW5nLCB3aXRoIGEgZmFsbC1iYWNrIHRvIEplbmtpbnMtaW5zcGlyZWQgaGFzaGluZyB3aGVuCi8vLyBjb21waWxlZCB0byBKYXZhU2NyaXB0LgovLy8KLy8vIEEgaGFzaCBmdW5jdGlvbiBzaG91bGQgYmUgY29uc3RydWN0ZWQgb2Ygc2V2ZXJhbCBbY29tYmluZV0gY2FsbHMgZm9sbG93ZWQgYnkKLy8vIGEgW2ZpbmlzaF0gY2FsbC4KY2xhc3MgX0hhc2ggewogIHN0YXRpYyBjb25zdCBpbnQgTSA9IDB4OWRkZmVhMDhlYjM4MjAwMCArIDB4ZDY5OwogIHN0YXRpYyBjb25zdCBib29sIGludElzNjRCaXQgPSAoMSA8PCA2MykgIT0gMDsKCiAgLy8vIFByaW1pdGl2ZSBoYXNoIGNvbWJpbmluZyBzdGVwLgogIHN0YXRpYyBpbnQgY29tYmluZShpbnQgdmFsdWUsIGludCBoYXNoKSB7CiAgICBpZiAoaW50SXM2NEJpdCkgewogICAgICB2YWx1ZSAqPSBNOwogICAgICB2YWx1ZSBePSBfc2hydSh2YWx1ZSwgNDcpOwogICAgICB2YWx1ZSAqPSBNOwogICAgICBoYXNoIF49IHZhbHVlOwogICAgICBoYXNoICo9IE07CiAgICB9IGVsc2UgewogICAgICAvLyBGYWxsIGJhY2sgdG8gSmVua2lucy1pbnNwaXJlZCBoYXNoaW5nIG9uIEphdmFTY3JpcHQgcGxhdGZvcm1zLgogICAgICBoYXNoID0gMHgxZmZmZmZmZiAmIChoYXNoICsgdmFsdWUpOwogICAgICBoYXNoID0gMHgxZmZmZmZmZiAmIChoYXNoICsgKCgweDAwMDdmZmZmICYgaGFzaCkgPDwgMTApKTsKICAgICAgaGFzaCA9IGhhc2ggXiAoaGFzaCA+PiA2KTsKICAgIH0KICAgIHJldHVybiBoYXNoOwogIH0KCiAgLy8vIFByaW1pdGl2ZSBoYXNoIGZpbmFsaXphdGlvbiBzdGVwLgogIHN0YXRpYyBpbnQgZmluaXNoKGludCBoYXNoKSB7CiAgICBpZiAoaW50SXM2NEJpdCkgewogICAgICBoYXNoIF49IF9zaHJ1KGhhc2gsIDQ0KTsKICAgICAgaGFzaCAqPSBNOwogICAgICBoYXNoIF49IF9zaHJ1KGhhc2gsIDQxKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEZhbGwgYmFjayB0byBKZW5raW5zLWluc3BpcmVkIGhhc2hpbmcgb24gSmF2YVNjcmlwdCBwbGF0Zm9ybXMuCiAgICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDNmZmZmZmYgJiBoYXNoKSA8PCAzKSk7CiAgICAgIGhhc2ggPSBoYXNoIF4gKGhhc2ggPj4gMTEpOwogICAgICBoYXNoID0gMHgxZmZmZmZmZiAmIChoYXNoICsgKCgweDAwMDAzZmZmICYgaGFzaCkgPDwgMTUpKTsKICAgIH0KICAgIHJldHVybiBoYXNoOwogIH0KCiAgc3RhdGljIGludCBjb21iaW5lRmluaXNoKGludCB2YWx1ZSwgaW50IGhhc2gpIHsKICAgIHJldHVybiBmaW5pc2goY29tYmluZSh2YWx1ZSwgaGFzaCkpOwogIH0KCiAgc3RhdGljIGludCBjb21iaW5lMihpbnQgdmFsdWUxLCBpbnQgdmFsdWUyLCBpbnQgaGFzaCkgewogICAgcmV0dXJuIGNvbWJpbmUodmFsdWUyLCBjb21iaW5lKHZhbHVlMSwgaGFzaCkpOwogIH0KCiAgc3RhdGljIGludCBjb21iaW5lMkZpbmlzaChpbnQgdmFsdWUxLCBpbnQgdmFsdWUyLCBpbnQgaGFzaCkgewogICAgcmV0dXJuIGZpbmlzaChjb21iaW5lMih2YWx1ZTEsIHZhbHVlMiwgaGFzaCkpOwogIH0KCiAgc3RhdGljIGludCBoYXNoMihPYmplY3Qgb2JqZWN0MSwgT2JqZWN0IG9iamVjdDIpIHsKICAgIHJldHVybiBjb21iaW5lMkZpbmlzaChvYmplY3QyLmhhc2hDb2RlLCBvYmplY3QyLmhhc2hDb2RlLCAwKTsKICB9CgogIHN0YXRpYyBpbnQgY29tYmluZUxpc3RIYXNoKExpc3QgbGlzdCwgW2ludCBoYXNoID0gMV0pIHsKICAgIGZvciAodmFyIGl0ZW0gaW4gbGlzdCkgewogICAgICBoYXNoID0gX0hhc2guY29tYmluZShpdGVtLmhhc2hDb2RlLCBoYXNoKTsKICAgIH0KICAgIHJldHVybiBoYXNoOwogIH0KCiAgc3RhdGljIGludCBjb21iaW5lTGlzdChMaXN0PGludD4gaGFzaGVzLCBpbnQgaGFzaCkgewogICAgZm9yICh2YXIgaXRlbSBpbiBoYXNoZXMpIHsKICAgICAgaGFzaCA9IGNvbWJpbmUoaXRlbSwgaGFzaCk7CiAgICB9CiAgICByZXR1cm4gaGFzaDsKICB9CgogIHN0YXRpYyBpbnQgY29tYmluZU1hcEhhc2hVbm9yZGVyZWQoTWFwIG1hcCwgW2ludCBoYXNoID0gMl0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCB8fCBtYXAuaXNFbXB0eSkgcmV0dXJuIGhhc2g7CiAgICBMaXN0PGludD4gZW50cnlIYXNoZXMgPSBMaXN0KG1hcC5sZW5ndGgpOwogICAgaW50IGkgPSAwOwogICAgZm9yICh2YXIgZW50cnkgaW4gbWFwLmVudHJpZXMpIHsKICAgICAgZW50cnlIYXNoZXNbaSsrXSA9IGNvbWJpbmUoZW50cnkua2V5Lmhhc2hDb2RlLCBlbnRyeS52YWx1ZS5oYXNoQ29kZSk7CiAgICB9CiAgICBlbnRyeUhhc2hlcy5zb3J0KCk7CiAgICByZXR1cm4gY29tYmluZUxpc3QoZW50cnlIYXNoZXMsIGhhc2gpOwogIH0KCiAgLy8gVE9ETyhzcmEpOiBSZXBsYWNlIHdpdGggJz4+PicuCiAgc3RhdGljIGludCBfc2hydShpbnQgdiwgaW50IG4pIHsKICAgIGFzc2VydChuID49IDEpOwogICAgYXNzZXJ0KGludElzNjRCaXQpOwogICAgcmV0dXJuICgodiA+PiAxKSAmICgweDdmZmZGRkZGZmZmZkYwMDAgKyAweEZGRikpID4+IChuIC0gMSk7CiAgfQp9CgppbnQgbGlzdEhhc2hDb2RlKExpc3QgbGlzdCkgewogIHJldHVybiBfSGFzaC5maW5pc2goX0hhc2guY29tYmluZUxpc3RIYXNoKGxpc3QpKTsKfQoKaW50IG1hcEhhc2hDb2RlKE1hcCBtYXApIHsKICByZXR1cm4gbWFwSGFzaENvZGVVbm9yZGVyZWQobWFwKTsKfQoKaW50IG1hcEhhc2hDb2RlT3JkZXJlZChNYXAgbWFwLCBbaW50IGhhc2ggPSAyXSkgewogIGZvciAoZmluYWwgT2JqZWN0IHggaW4gbWFwLmtleXMpIGhhc2ggPSBfSGFzaC5jb21iaW5lKHguaGFzaENvZGUsIGhhc2gpOwogIGZvciAoZmluYWwgT2JqZWN0IHggaW4gbWFwLnZhbHVlcykgaGFzaCA9IF9IYXNoLmNvbWJpbmUoeC5oYXNoQ29kZSwgaGFzaCk7CiAgcmV0dXJuIF9IYXNoLmZpbmlzaChoYXNoKTsKfQoKaW50IG1hcEhhc2hDb2RlVW5vcmRlcmVkKE1hcCBtYXApIHsKICByZXR1cm4gX0hhc2guZmluaXNoKF9IYXNoLmNvbWJpbmVNYXBIYXNoVW5vcmRlcmVkKG1hcCkpOwp9Cgpib29sIGxpc3RFcXVhbHMoTGlzdCBhLCBMaXN0IGIpIHsKICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTsKICBmb3IgKGludCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKICAgIGlmIChhW2ldICE9IGJbaV0pIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgbWFwRXF1YWxzKE1hcCBhLCBNYXAgYikgewogIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogIGZvciAoZmluYWwgT2JqZWN0IGtleSBpbiBhLmtleXMpIHsKICAgIGlmICghYi5jb250YWluc0tleShrZXkpIHx8IGFba2V5XSAhPSBiW2tleV0pIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCi8vLyBSZXR1cm5zIHRoZSBjYW5vbmljYWwgbmFtZSBvZiBbdHlwZWRlZl9dLCBvciB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZQovLy8gdHlwZWRlZiBoYXMgbm90IGJlZW4gYXNzaWduZWQgYSBjYW5vbmljYWwgbmFtZSB5ZXQuCi8vLwovLy8gUmV0dXJucyBgbnVsbGAgaWYgdGhlIHR5cGVkZWYgaXMgYG51bGxgLgpDYW5vbmljYWxOYW1lIGdldENhbm9uaWNhbE5hbWVPZlR5cGVkZWYoVHlwZWRlZiB0eXBlZGVmXykgewogIGlmICh0eXBlZGVmXyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICBpZiAodHlwZWRlZl8uY2Fub25pY2FsTmFtZSA9PSBudWxsKSB7CiAgICB0aHJvdyAnJHR5cGVkZWZfIGhhcyBubyBjYW5vbmljYWwgbmFtZSc7CiAgfQogIHJldHVybiB0eXBlZGVmXy5jYW5vbmljYWxOYW1lOwp9CgovLy8gQW5ub3RhdGlvbiBkZXNjcmliaW5nIGluZm9ybWF0aW9uIHdoaWNoIGlzIG5vdCBwYXJ0IG9mIERhcnQgc2VtYW50aWNzOyBpbgovLy8gb3RoZXIgd29yZHMsIGlmIHRoaXMgaW5mb3JtYXRpb24gKG9yIGFueSBpbmZvcm1hdGlvbiBpdCByZWZlcnMgdG8pIGNoYW5nZXMsCi8vLyBzdGF0aWMgYW5hbHlzaXMgYW5kIHJ1bnRpbWUgYmVoYXZpb3Igb2YgdGhlIGxpYnJhcnkgYXJlIHVuYWZmZWN0ZWQuCmNvbnN0IGluZm9ybWF0aXZlID0gbnVsbDsKCkxvY2F0aW9uIF9nZXRMb2NhdGlvbkluQ29tcG9uZW50KENvbXBvbmVudCBjb21wb25lbnQsIFVyaSBmaWxlVXJpLCBpbnQgb2Zmc2V0KSB7CiAgaWYgKGNvbXBvbmVudCAhPSBudWxsKSB7CiAgICByZXR1cm4gY29tcG9uZW50LmdldExvY2F0aW9uKGZpbGVVcmksIG9mZnNldCk7CiAgfSBlbHNlIHsKICAgIHJldHVybiBuZXcgTG9jYXRpb24oZmlsZVVyaSwgVHJlZU5vZGUubm9PZmZzZXQsIFRyZWVOb2RlLm5vT2Zmc2V0KTsKICB9Cn0KCi8vLyBDb252ZXJ0IHRoZSBzeW50aGV0aWMgbmFtZSBvZiBhbiBpbXBsaWNpdCBtaXhpbiBhcHBsaWNhdGlvbiBjbGFzcwovLy8gaW50byBhIG5hbWUgc3VpdGFibGUgZm9yIHVzZXItZmFjZWQgc3RyaW5ncy4KLy8vCi8vLyBGb3IgZXhhbXBsZSwgd2hlbiBjb21waWxpbmcgImNsYXNzIEEgZXh0ZW5kcyBTIHdpdGggTTEsIE0yIiwgdGhlCi8vLyB0d28gc3ludGhldGljIGNsYXNzZXMgd2lsbCBiZSBuYW1lZCAiX0EmUyZNMSIgYW5kICJfQSZTJk0xJk0yIi4KLy8vIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gIlMgd2l0aCBNMSIgYW5kICJTIHdpdGggTTEsIE0yIiwgcmVzcGVjdGl2ZWx5LgpTdHJpbmcgZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShTdHJpbmcgbmFtZSkgewogIExpc3Q8U3RyaW5nPiBuYW1lUGFydHMgPSBuYW1lLnNwbGl0KCcmJyk7CiAgaWYgKG5hbWVQYXJ0cy5sZW5ndGggPCAyIHx8IG5hbWUgPT0gIiYiKSByZXR1cm4gbmFtZTsKICBTdHJpbmcgZGVtYW5nbGVkTmFtZSA9IG5hbWVQYXJ0c1sxXTsKICBmb3IgKGludCBpID0gMjsgaSA8IG5hbWVQYXJ0cy5sZW5ndGg7IGkrKykgewogICAgZGVtYW5nbGVkTmFtZSArPSAoaSA9PSAyID8gIiB3aXRoICIgOiAiLCAiKSArIG5hbWVQYXJ0c1tpXTsKICB9CiAgcmV0dXJuIGRlbWFuZ2xlZE5hbWU7Cn0KCi8vLyBFeHRyYWN0IGZyb20gdGhlIHN5bnRoZXRpYyBuYW1lIG9mIGFuIGltcGxpY2l0IG1peGluIGFwcGxp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cnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpsaWJyYXJ5IGtlcm5lbC50YXJnZXQudGFyZ2V0czsKCmltcG9ydCAnLi4vYXN0LmRhcnQnOwppbXBvcnQgJy4uL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JzsKaW1wb3J0ICcuLi9jb3JlX3R5cGVzLmRhcnQnOwoKZmluYWwgTGlzdDxTdHJpbmc+IHRhcmdldE5hbWVzID0gdGFyZ2V0cy5rZXlzLnRvTGlzdCgpOwoKY2xhc3MgVGFyZ2V0RmxhZ3MgewogIGZpbmFsIGJvb2wgbGVnYWN5TW9kZTsKICBmaW5hbCBib29sIHRyYWNrV2lkZ2V0Q3JlYXRpb247CgogIFRhcmdldEZsYWdzKHt0aGlzLmxlZ2FjeU1vZGUgPSBmYWxzZSwgdGhpcy50cmFja1dpZGdldENyZWF0aW9uID0gZmFsc2V9KTsKfQoKdHlwZWRlZiBUYXJnZXQgX1RhcmdldEJ1aWxkZXIoVGFyZ2V0RmxhZ3MgZmxhZ3MpOwoKZmluYWwgTWFwPFN0cmluZywgX1RhcmdldEJ1aWxkZXI+IHRhcmdldHMgPSA8U3RyaW5nLCBfVGFyZ2V0QnVpbGRlcj57CiAgJ25vbmUnOiAoVGFyZ2V0RmxhZ3MgZmxhZ3MpID0+IG5ldyBOb25lVGFyZ2V0KGZsYWdzKSwKfTsKClRhcmdldCBnZXRUYXJnZXQoU3RyaW5nIG5hbWUsIFRhcmdldEZsYWdzIGZsYWdzKSB7CiAgdmFyIGJ1aWxkZXIgPSB0YXJnZXRzW25hbWVdOwogIGlmIChidWlsZGVyID09IG51bGwpIHJldHVybiBudWxsOwogIHJldHVybiBidWlsZGVyKGZsYWdzKTsKfQoKYWJzdHJhY3QgY2xhc3MgRGlhZ25vc3RpY1JlcG9ydGVyPE0sIEM+IHsKICB2b2lkIHJlcG9ydChNIG1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LCBpbnQgbGVuZ3RoLCBVcmkgZmlsZVVyaSwKICAgICAge0xpc3Q8Qz4gY29udGV4dH0pOwp9CgovLy8gVGhlIGRpZmZlcmVudCBraW5kcyBvZiBudW1iZXIgc2VtYW50aWNzIHN1cHBvcnRlZCBieSB0aGUgY29uc3RhbnQgZXZhbHVhdG9yLgplbnVtIE51bWJlclNlbWFudGljcyB7CiAgLy8vIERhcnQgVk0gbnVtYmVyIHNlbWFudGljcy4KICB2bSwKCiAgLy8vIEphdmFTY3JpcHQgKERhcnQyanMgYW5kIEREQykgbnVtYmVyIHNlbWFudGljcy4KICBqcywKfQoKLy8gQmFja2VuZCBzcGVjaWZpYyBjb25zdGFudCBldmFsdWF0aW9uIGJlaGF2aW9yCmNsYXNzIENvbnN0YW50c0JhY2tlbmQgewogIGNvbnN0IENvbnN0YW50c0JhY2tlbmQoKTsKCiAgLy8vIExvd2VyaW5nIG9mIGEgbGlzdCBjb25zdGFudCB0byBhIGJhY2tlbmQtc3BlY2lmaWMgcmVwcmVzZW50YXRpb24uCiAgQ29uc3RhbnQgbG93ZXJMaXN0Q29uc3RhbnQoTGlzdENvbnN0YW50IGNvbnN0YW50KSA9PiBjb25zdGFudDsKCiAgLy8vIExvd2VyaW5nIG9mIGEgc2V0IGNvbnN0YW50IHRvIGEgYmFja2VuZC1zcGVjaWZpYyByZXByZXNlbnRhdGlvbi4KICBDb25zdGFudCBsb3dlclNldENvbnN0YW50KFNldENvbnN0YW50IGNvbnN0YW50KSA9PiBjb25zdGFudDsKCiAgLy8vIExvd2VyaW5nIG9mIGEgbWFwIGNvbnN0YW50IHRvIGEgYmFja2VuZC1zcGVjaWZpYyByZXByZXNlbnRhdGlvbi4KICBDb25zdGFudCBsb3dlck1hcENvbnN0YW50KE1hcENvbnN0YW50IGNvbnN0YW50KSA9PiBjb25zdGFudDsKCiAgLy8vIE51bWJlciBzZW1hbnRpY3MgdG8gdXNlIGZvciB0aGlzIGJhY2tlbmQuCiAgTnVtYmVyU2VtYW50aWNzIGdldCBudW1iZXJTZW1hbnRpY3MgPT4gTnVtYmVyU2VtYW50aWNzLnZtOwoKICAvLy8gSW5saW5lIGNvbnRyb2wgb2YgY29uc3RhbnQgdmFyaWFibGVzLiBUaGUgZ2l2ZW4gY29uc3RhbnQgZXhwcmVzc2lvbgogIC8vLyBpcyB0aGUgaW5pdGlhbGl6ZXIgb2YgYSBbRmllbGRdIG9yIFtWYXJpYWJsZURlY2xhcmF0aW9uXSBub2RlLgogIC8vLyBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIGB0cnVlYCwgdGhlIHZhcmlhYmxlIHdpbGwgYmUgaW5saW5lZCBhdCBhbGwKICAvLy8gcG9pbnRzIG9mIHJlZmVyZW5jZSBhbmQgdGhlIHZhcmlhYmxlIGl0c2VsZiByZW1vdmVkICh1bmxlc3Mgb3ZlcnJpZGRlbgogIC8vLyBieSB0aGUgYGtlZXBGaWVsZHNgIG9yIGBrZWVwVmFyaWFibGVzYCBmbGFnIHRvIHRoZSBjb25zdGFudCB0cmFuc2Zvcm1lcikuCiAgLy8vIFRoaXMgbWV0aG9kIG11c3QgYmUgZGV0ZXJtaW5pc3RpYywgaS5lLiBpdCBtdXN0IGFsd2F5cyByZXR1cm4gdGhlIHNhbWUKICAvLy8gdmFsdWUgZm9yIHRoZSBzYW1lIGNvbnN0YW50IHZhbHVlIGFuZCBwbGFjZSBpbiB0aGUgQVNULgogIGJvb2wgc2hvdWxkSW5saW5lQ29uc3RhbnQoQ29uc3RhbnRFeHByZXNzaW9uIGluaXRpYWxpemVyKSA9PiB0cnVlOwoKICAvLy8gV2hldGhlciB0aGlzIHRhcmdldCBzdXBwb3J0cyB1bmV2YWx1YXRlZCBjb25zdGFudHMuCiAgLy8vCiAgLy8vIElmIG5vdCwgdGhlbiB0cnlpbmcgdG8gcGVyZm9ybSBjb25zdGFudCBldmFsdWF0aW9uIHdpdGhvdXQgYW4gZW52aXJvbm1lbnQKICAvLy8gcmFpc2VzIGFuIGV4Y2VwdGlvbi4KICAvLy8KICAvLy8gVGhpcyBkZWZhdWx0cyB0byBgZmFsc2VgIHNpbmNlIGl0IHJlcXVpcmVzIGFkZGl0aW9uYWwgd29yayBmb3IgYSBiYWNrZW5kCiAgLy8vIHRvIHN1cHBvcnQgdW5ldmFsdWF0ZWQgY29uc3RhbnRzLgogIGJvb2wgZ2V0IHN1cHBvcnRzVW5ldmFsdWF0ZWRDb25zdGFudHMgPT4gZmFsc2U7Cn0KCi8vLyBBIHRhcmdldCBwcm92aWRlcyBiYWNrZW5kLXNwZWNpZmljIG9wdGlvbnMgZm9yIGdlbmVyYXRpbmcga2VybmVsIElSLgphYnN0cmFjdCBjbGFzcyBUYXJnZXQgewogIFN0cmluZyBnZXQgbmFtZTsKCiAgLy8vIEEgbGlzdCBvZiBVUklzIG9mIHJlcXVpcmVkIGxpYnJhcmllcywgbm90IGluY2x1ZGluZyBkYXJ0OmNvcmUuCiAgLy8vCiAgLy8vIExpYnJhcmllcyB3aWxsIGJlIGxvYWRlZCBpbiBvcmRlci4KICBMaXN0PFN0cmluZz4gZ2V0IGV4dHJhUmVxdWlyZWRMaWJyYXJpZXMgPT4gPFN0cmluZz5bXTsKCiAgLy8vIEFkZGl0aW9uYWwgZGVjbGFyZWQgdmFyaWFibGVzIGltcGxpZWQgYnkgdGhpcyB0YXJnZXQuCiAgLy8vCiAgLy8vIFRoZXNlIGNhbiBhbHNvIGJlIHBhc3NlZCBvbiB0aGUgY29tbWFuZC1saW5lIG9mIGZvcm0gYC1EPG5hbWU+PTx2YWx1ZT5gLAogIC8vLyBhbmQgdGhvc2UgcHJvdmlkZWQgb24gdGhlIGNvbW1hbmQtbGluZSB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aG9zZSBkZWZpbmVkCiAgLy8vIGJ5IHRoZSB0YXJnZXQuCiAgTWFwPFN0cmluZywgU3RyaW5nPiBnZXQgZXh0cmFEZWNsYXJlZFZhcmlhYmxlcyA9PiBjb25zdCA8U3RyaW5nLCBTdHJpbmc+e307CgogIC8vLyBDbGFzc2VzIGZyb20gdGhlIFNESyB3aG9zZSBpbnRlcmZhY2UgaXMgcmVxdWlyZWQgZm9yIHRoZSBtb2R1bGFyCiAgLy8vIHRyYW5zZm9ybWF0aW9ucy4KICBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IGdldCByZXF1aXJlZFNka0NsYXNzZXMgPT4gQ29yZVR5cGVzLnJlcXVpcmVkQ2xhc3NlczsKCiAgYm9vbCBnZXQgbGVnYWN5TW9kZTsKCiAgLy8vIEEgZGVyaXZlZCBjbGFzcyBtYXkgY2hhbmdlIHRoaXMgdG8gYHRydWVgIHRvIGVuYWJsZSBmb3J3YXJkZXJzIHRvCiAgLy8vIHVzZXItZGVmaW5lZCBgbm9TdWNoTWV0aG9kYCB0aGF0IGFyZSBnZW5lcmF0ZWQgZm9yIGVhY2ggYWJzdHJhY3QgbWVtYmVyCiAgLy8vIGlmIHN1Y2ggYG5vU3VjaE1ldGhvZGAgaXMgcHJlc2VudC4KICAvLy8KICAvLy8gVGhlIGZvcndhcmRlcnMgYXJlIGFic3RyYWN0IFtQcm9jZWR1cmVdcyB3aXRoIFtpc05vU3VjaE1ldGhvZEZvcndhcmRlcl0KICAvLy8gYml0IHNldC4gIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYmVoYXZpb3Igb2Ygc3VjaCBmb3J3YXJkZXJzIGlzIHVwCiAgLy8vIGZvciB0aGUgdGFyZ2V0IGJhY2tlbmQuCiAgYm9vbCBnZXQgZW5hYmxlTm9TdWNoTWV0aG9kRm9yd2FyZGVycyA9PiBmYWxzZTsKCiAgLy8vIEEgZGVyaXZlZCBjbGFzcyBtYXkgY2hhbmdlIHRoaXMgdG8gYHRydWVgIHRvIGVuYWJsZSBGbHV0dGVyIHNwZWNpZmljCiAgLy8vICJzdXBlci1taXhpbnMiIHNlbWFudGljcy4KICAvLy8KICAvLy8gVGhpcyBzZW1hbnRpY3MgcmVsYXhlcyBhIG51bWJlciBvZiBjb25zdHJhaW50IHByZXZpb3VzbHkgaW1wb3NlZCBvbgogIC8vLyBtaXhpbnMuIEltcG9ydGFudGx5IGl0IGltcG9zZXMgdGhlIGZvbGxvd2luZyBjaGFuZ2U6CiAgLy8vCiAgLy8vICAgICBBbiBhYnN0cmFjdCBjbGFzcyBtYXkgY29udGFpbiBhIG1lbWJlciB3aXRoIGEgc3VwZXItaW52b2NhdGlvbiB0aGF0CiAgLy8vICAgICBjb3JyZXNwb25kcyB0byBhIG1lbWJlciBvZiB0aGUgc3VwZXJjbGFzcyBpbnRlcmZhY2UsIGJ1dCB3aGVyZSB0aGUKICAvLy8gICAgIGFjdHVhbCBzdXBlcmNsYXNzIGRvZXMgbm90IGRlY2xhcmUgb3IgaW5oZXJpdCBhIG1hdGNoaW5nIG1ldGhvZC4KICAvLy8gICAgIFNpbmNlIG5vIGFtb3VudCBvZiBvdmVycmlkaW5nIGNhbiBjaGFuZ2UgdGhpcyBwcm9wZXJ0eSwgc3VjaCBhIGNsYXNzCiAgLy8vICAgICBjYW5ub3QgYmUgZXh0ZW5kZWQgdG8gYSBjbGFzcyB0aGF0IGlzIG5vdCBhYnN0cmFjdCwgaXQgY2FuIG9ubHkgYmUKICAvLy8gICAgIHVzZWQgdG8gZGVyaXZlIGEgbWl4aW4gZnJvbS4KICAvLy8KICAvLy8gU2VlIGRhcnRidWcuY29tLzMxNTQyIGZvciBkZXRhaWxzIG9mIHRoZSBzZW1hbnRpY3MuCiAgYm9vbCBnZXQgZW5hYmxlU3VwZXJNaXhpbnMgPT4gZmFsc2U7CgogIC8vLyBQZXJmb3JtIHRhcmdldC1zcGVjaWZpYyB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIG91dGxpbmVzIHN0b3JlZCBpbgogIC8vLyBbQ29tcG9uZW50XSB3aGVuIGdlbmVyYXRpbmcgc3VtbWFyaWVzLgogIC8vLwogIC8vLyBUaGlzIHRyYW5zZm9ybWF0aW9uIGlzIHVzZWQgdG8gYWRkIG1ldGFkYXRhIG9uIG91dGxpbmVzIGFuZCB0byBmaWx0ZXIKICAvLy8gdW5uZWNlc3NhcnkgaW5mb3JtYXRpb24gYmVmb3JlIGdlbmVyYXRpbmcgcHJvZ3JhbSBzdW1tYXJpZXMuIFRoaXMKICAvLy8gdHJhbnNmb3JtYXRpb24gaXMgbm90IGFwcGxpZWQgd2hlbiBjb21waWxpbmcgZnVsbCBrZXJuZWwgcHJvZ3JhbXMgdG8KICAvLy8gcHJldmVudCBhZmZlY3RpbmcgdGhlIGludGVybmFsIGludmFyaWFudHMgb2YgdGhlIGNvbXBpbGVyIGFuZCBhY2NpZGVudGFsbHkKICAvLy8gc2xvd2luZyBkb3duIGNvbXBpbGF0aW9uLgogIHZvaWQgcGVyZm9ybU91dGxpbmVUcmFuc2Zvcm1hdGlvbnMoQ29tcG9uZW50IGNvbXBvbmVudCkge30KCiAgLy8vIFBlcmZvcm0gdGFyZ2V0LXNwZWNpZmljIHRyYW5zZm9ybWF0aW9ucyBvbiB0aGUgZ2l2ZW4gbGlicmFyaWVzIHRoYXQgbXVzdAogIC8vLyBydW4gYmVmb3JlIGNvbnN0YW50IGV2YWx1YXRpb24uCiAgdm9pZCBwZXJmb3JtUHJlQ29uc3RhbnRFdmFsdWF0aW9uVHJhbnNmb3JtYXRpb25zKAogICAgICBDb21wb25lbnQgY29tcG9uZW50LAogICAgICBDb3JlVHlwZXMgY29yZVR5cGVzLAogICAgICBMaXN0PExpYnJhcnk+IGxpYnJhcmllcywKICAgICAgRGlhZ25vc3RpY1JlcG9ydGVyIGRpYWdub3N0aWNSZXBvcnRlciwKICAgICAge3ZvaWQgbG9nZ2VyKFN0cmluZyBtc2cpfSkge30KCiAgLy8vIFBlcmZvcm0gdGFyZ2V0LXNwZWNpZmljIG1vZHVsYXIgdHJhbnNmb3JtYXRpb25zIG9uIHRoZSBnaXZlbiBsaWJyYXJpZXMuCiAgdm9pZCBwZXJmb3JtTW9kdWxhclRyYW5zZm9ybWF0aW9uc09uTGlicmFyaWVzKAogICAgICBDb21wb25lbnQgY29tcG9uZW50LAogICAgICBDb3JlVHlwZXMgY29yZVR5cGVzLAogICAgICBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHksCiAgICAgIExpc3Q8TGlicmFyeT4gbGlicmFyaWVzLAogICAgICAvLyBUT0RPKGFza2VzYyk6IENvbnNpZGVyIGhvdyB0byBnZW5lcmFsbHkgcGFzcyBjb21waWxlciBvcHRpb25zIHRvCiAgICAgIC8vIHRyYW5zZm9ybWF0aW9ucy4KICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudERlZmluZXMsCiAgICAgIERpYWdub3N0aWNSZXBvcnRlciBkaWFnbm9zdGljUmVwb3J0ZXIsCiAgICAgIHt2b2lkIGxvZ2dlcihTdHJpbmcgbXNnKX0pOwoKICAvLy8gUGVyZm9ybSB0YXJnZXQtc3BlY2lmaWMgbW9kdWxhciB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGdpdmVuIHByb2dyYW0uCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCB3aGVuIGFuIGluZGl2aWR1YWwgZXhwcmVzc2lvbiBpcyBjb21waWxlZCwgZS5nLiBmb3IgZGVidWdnaW5nCiAgLy8vIHB1cnBvc2VzLiBJdCBpcyBpbGxlZ2FsIHRvIG1vZGlmeSBhbnkgb2YgdGhlIGVuY2xvc2luZyBub2RlcyBvZiB0aGUKICAvLy8gcHJvY2VkdXJlLgogIHZvaWQgcGVyZm9ybVRyYW5zZm9ybWF0aW9uc09uUHJvY2VkdXJlKAogICAgICBDb3JlVHlwZXMgY29yZVR5cGVzLCBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHksIFByb2NlZHVyZSBwcm9jZWR1cmUsCiAgICAgIHt2b2lkIGxvZ2dlcihTdHJpbmcgbXNnKX0pIHt9CgogIC8vLyBXaGV0aGVyIGEgcGxhdGZvcm0gbGlicmFyeSBtYXkgZGVmaW5lIGEgcmVzdHJpY3RlZCB0eXBlLCBzdWNoIGFzIGBib29sYCwKICAvLy8gYGludGAsIGBkb3VibGVgLCBgbnVtYCwgYW5kIGBTdHJpbmdgLgogIC8vLwogIC8vLyBCeSBkZWZhdWx0IG9ubHkgYGRhcnQ6Y29yZWAgbWF5IGRlZmluZSByZXN0cmljdGVkIHR5cGVzLCBidXQgc29tZSB0YXJnZXQKICAvLy8gaW1wbGVtZW50YXRpb25zIG92ZXJyaWRlIHRoaXMuCiAgYm9vbCBtYXlEZWZpbmVSZXN0cmljdGVkVHlwZShVcmkgdXJpKSA9PgogICAgICB1cmkuc2NoZW1lID09ICdkYXJ0JyAmJiB1cmkucGF0aCA9PSAnY29yZSc7CgogIC8vLyBXaGV0aGVyIGEgbGlicmFyeSBpcyBhbGxvd2VkIHRvIGltcG9ydCBhIHBsYXRmb3JtIHByaXZhdGUgbGlicmFyeS4KICAvLy8KICAvLy8gQnkgZGVmYXVsdCBvbmx5IGBkYXJ0OipgIGxpYnJhcmllcyBhcmUgYWxsb3dlZC4gTWF5IGJlIG92ZXJyaWRkZW4gZm9yCiAgLy8vIHRlc3RpbmcgcHVycG9zZXMuCiAgYm9vbCBhbGxvd1BsYXRmb3JtUHJpdmF0ZUxpYnJhcnlBY2Nlc3MoVXJpIGltcG9ydGVyLCBVcmkgaW1wb3J0ZWQpID0+CiAgICAgIGltcG9ydGVkLnNjaGVtZSAhPSAiZGFydCIgfHwKICAgICAgIWltcG9ydGVkLnBhdGguc3RhcnRzV2l0aCgiXyIpIHx8CiAgICAgIGltcG9ydGVyLnNjaGVtZSA9PSAiZGFydCIgfHwKICAgICAgKGltcG9ydGVyLnNjaGVtZSA9PSAicGFja2FnZSIgJiYKICAgICAgICAgIGltcG9ydGVyLnBhdGguc3RhcnRzV2l0aCgiZGFydF9pbnRlcm5hbC8iKSk7CgogIC8vLyBXaGV0aGVyIHRoZSBgbmF0aXZlYCBsYW5ndWFnZSBleHRlbnNpb24gaXMgc3VwcG9ydGVkIHdpdGhpbiBbbGlicmFyeV0uCiAgLy8vCiAgLy8vIFRoZSBgbmF0aXZlYCBsYW5ndWFnZSBleHRlbnNpb24gaXMgbm90IHBhcnQgb2YgdGhlIGxhbmd1YWdlIHNwZWNpZmljYXRpb24sCiAgLy8vIGl0IG1lYW5zIHNvbWV0aGluZyBlbHNlIHRvIGVhY2ggdGFyZ2V0LCBhbmQgaXQgaXMgZW5hYmxlZCB1bmRlciBkaWZmZXJlbnQKICAvLy8gY2lyY3Vtc3RhbmNlcyBmb3IgZWFjaCB0YXJnZXQgaW1wbGVtZW50YXRpb24uIEZvciBleGFtcGxlLCB0aGUgVk0gdGFyZ2V0CiAgLy8vIGVuYWJsZXMgaXQgZXZlcnl3aGVyZSBiZWNhdXNlIG9mIGV4aXN0aW5nIHN1cHBvcnQgZm9yICJkYXJ0LWV4dDoiIG5hdGl2ZQogIC8vLyBleHRlbnNpb25zLCBidXQgdGFyZ2V0cyBsaWtlIGRhcnQyanMgb25seSBlbmFibGUgaXQgb24gdGhlIGNvcmUgbGlicmFyaWVzLgogIGJvb2wgZW5hYmxlTmF0aXZlKFVyaSB1cmkpID0+IGZhbHNlOwoKICAvLy8gVGhlcmUgYXJlIHR3byB2YXJpYW50cyBvZiB0aGUgYG5hdGl2ZWAgbGFuZ3VhZ2UgZXh0ZW5zaW9uLiBUaGUgVk0gZXhwZWN0cwogIC8vLyB0aGUgbmF0aXZlIHRva2VuIHRvIGJlIGZvbGxvd2VkIGJ5IHN0cmluZywgd2hlcmVhcyBkYXJ0MmpzIGFuZCBEREMgZG8gbm90LgogIC8vIFRPRE8oc2lnbXVuZCwgYWhlKTogaWRlYWxseSB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBgbmF0aXZlYCBzeW50YXgsIGlmIG5vdCwKICAvLyB3ZSBzaG91bGQgYXQgbGVhc3QgdW5pZnkgdGhlIFZNIGFuZCBub24tVk0gdmFyaWFudHMuCiAgYm9vbCBnZXQgbmF0aXZlRXh0ZW5zaW9uRXhwZWN0c1N0cmluZyA9PiBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgaW50ZWdlciBsaXRlcmFscyB0aGF0IGNhbm5vdCBiZSByZXByZXNlbnRlZCBleGFjdGx5IG9uIHRoZSB3ZWIKICAvLy8gKGkuZS4gaW4gSmF2YXNjcmlwdCkgc2hvdWxkIGNhdXNlIGFuIGVycm9yIHRvIGJlIGlzc3VlZC4KICAvLy8gQW4gZXhhbXBsZSBvZiBzdWNoIGEgbnVtYmVyIGlzIGAyXjUzICsgMWAgd2hlcmUgaW4gSmF2YXNjcmlwdCAtIGJlY2F1c2UKICAvLy8gaW50ZWdlcnMgYXJlIHJlcHJlc2VudGVkIGFzIGRvdWJsZXMKICAvLy8gYE1hdGgucG93KDIsIDUzKSA9IE1hdGgucG93KDIsIDUzKSArIDFgLgogIGJvb2wgZ2V0IGVycm9yT25VbmV4YWN0V2ViSW50TGl0ZXJhbHMgPT4gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHNldCBsaXRlcmFscyBhcmUgbmF0aXZlbHkgc3VwcG9ydGVkIGJ5IHRoaXMgdGFyZ2V0LiBJZiBzZXQKICAvLy8gbGl0ZXJhbHMgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHRhcmdldCwgdGhleSB3aWxsIGJlIGRlc3VnYXJlZCBpbnRvCiAgLy8vIGV4cGxpY2l0IGBTZXRgIGNyZWF0aW9uIChmb3Igbm9uLWNvbnN0IHNldCBsaXRlcmFscykgb3Igd3JhcHBlZCBtYXAKICAvLy8gbGl0ZXJhbHMgKGZvciBjb25zdCBzZXQgbGl0ZXJhbHMpLgogIGJvb2wgZ2V0IHN1cHBvcnRzU2V0TGl0ZXJhbHMgPT4gdHJ1ZTsKCiAgLy8vIEJ1aWxkcyBhbiBleHByZXNzaW9uIHRoYXQgaW5zdGFudGlhdGVzIGFuIFtJbnZvY2F0aW9uXSB0aGF0IGNhbiBiZSBwYXNzZWQKICAvLy8gdG8gW25vU3VjaE1ldGhvZF0uCiAgRXhwcmVzc2lvbiBpbnN0YW50aWF0ZUludm9jYXRpb24oQ29yZVR5cGVzIGNvcmVUeXBlcywgRXhwcmVzc2lvbiByZWNlaXZlciwKICAgICAgU3RyaW5nIG5hbWUsIEFyZ3VtZW50cyBhcmd1bWVudHMsIGludCBvZmZzZXQsIGJvb2wgaXNTdXBlcik7CgogIEV4cHJlc3Npb24gaW5zdGFudGlhdGVOb1N1Y2hNZXRob2RFcnJvcihDb3JlVHlwZXMgY29yZVR5cGVzLAogICAgICBFeHByZXNzaW9uIHJlY2VpdmVyLCBTdHJpbmcgbmFtZSwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCwKICAgICAge2Jvb2wgaXNNZXRob2Q6IGZhbHNlLAogICAgICBib29sIGlzR2V0dGVyOiBmYWxzZSwKICAgICAgYm9vbCBpc1NldHRlcjogZmFsc2UsCiAgICAgIGJvb2wgaXNGaWVsZDogZmFsc2UsCiAgICAgIGJvb2wgaXNMb2NhbFZhcmlhYmxlOiBmYWxzZSwKICAgICAgYm9vbCBpc0R5bmFtaWM6IGZhbHNlLAogICAgICBib29sIGlzU3VwZXI6IGZhbHNlLAogICAgICBib29sIGlzU3RhdGljOiBmYWxzZSwKICAgICAgYm9vbCBpc0NvbnN0cnVjdG9yOiBmYWxzZSwKICAgICAgYm9vbCBpc1RvcExldmVsOiBmYWxzZX0pOwoKICAvLy8gQ29uZmlndXJlIHRoZSBnaXZlbiBbQ29tcG9uZW50XSBpbiBhIHRhcmdldCBzcGVjaWZpYyB3YXkuCiAgLy8vIFJldHVybnMgdGhlIGNvbmZpZ3VyZWQgY29tcG9uZW50LgogIENvbXBvbmVudCBjb25maWd1cmVDb21wb25lbnQoQ29tcG9uZW50IGNvbXBvbmVudCkgPT4gY29tcG9uZW50OwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnVGFyZ2V0KCRuYW1lKSc7CgogIENsYXNzIGNvbmNyZXRlTGlzdExpdGVyYWxDbGFzcyhDb3JlVHlwZXMgY29yZVR5cGVzKSA9PiBudWxsOwogIENsYXNzIGNvbmNyZXRlQ29uc3RMaXN0TGl0ZXJhbENsYXNzKENvcmVUeXBlcyBjb3JlVHlwZXMpID0+IG51bGw7CgogIENsYXNzIGNvbmNyZXRlTWFwTGl0ZXJhbENsYXNzKENvcmVUeXBlcyBjb3JlVHlwZXMpID0+IG51bGw7CiAgQ2xhc3MgY29uY3JldGVDb25zdE1hcExpdGVyYWxDbGFzcyhDb3JlVHlwZXMgY29yZVR5cGVzKSA9PiBudWxsOwoKICBDbGFzcyBjb25jcmV0ZUludExpdGVyYWxDbGFzcyhDb3JlVHlwZXMgY29yZVR5cGVzLCBpbnQgdmFsdWUpID0+IG51bGw7CiAgQ2xhc3MgY29uY3JldGVTdHJpbmdMaXRlcmFsQ2xhc3MoQ29yZVR5cGVzIGNvcmVUeXBlcywgU3RyaW5nIHZhbHVlKSA9PiBudWxsOwoKICBDb25zdGFudHNCYWNrZW5kIGNvbnN0YW50c0JhY2tlbmQoQ29yZVR5cGVzIGNvcmVUeXBlcyk7Cn0KCmNsYXNzIE5vbmVDb25zdGFudHNCYWNrZW5kIGV4dGVuZHMgQ29uc3RhbnRzQmFja2VuZCB7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBzdXBwb3J0c1VuZXZhbHVhdGVkQ29uc3RhbnRzOwoKICBjb25zdCBOb25lQ29uc3RhbnRzQmFja2VuZCh7dGhpcy5zdXBwb3J0c1VuZXZhbHVhdGVkQ29uc3RhbnRzfSk7Cn0KCmNsYXNzIE5vbmVUYXJnZXQgZXh0ZW5kcyBUYXJnZXQgewogIGZpbmFsIFRhcmdldEZsYWdzIGZsYWdzOwoKICBOb25lVGFyZ2V0KHRoaXMuZmxhZ3MpOwoKICBib29sIGdldCBsZWdhY3lNb2RlID0+IGZsYWdzLmxlZ2FjeU1vZGU7CiAgU3RyaW5nIGdldCBuYW1lID0+ICdub25lJzsKICBMaXN0PFN0cmluZz4gZ2V0IGV4dHJhUmVxdWlyZWRMaWJyYXJpZXMgPT4gPFN0cmluZz5bXTsKICB2b2lkIHBlcmZvcm1Nb2R1bGFyVHJhbnNmb3JtYXRpb25zT25MaWJyYXJpZXMoCiAgICAgIENvbXBvbmVudCBjb21wb25lbnQsCiAgICAgIENvcmVUeXBlcyBjb3JlVHlwZXMsCiAgICAgIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSwKICAgICAgTGlzdDxMaWJyYXJ5PiBsaWJyYXJpZXMsCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnREZWZpbmVzLAogICAgICBEaWFnbm9zdGljUmVwb3J0ZXIgZGlhZ25vc3RpY1JlcG9ydGVyLAogICAgICB7dm9pZCBsb2dnZXIoU3RyaW5nIG1zZyl9KSB7fQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGluc3RhbnRpYXRlSW52b2NhdGlvbihDb3JlVHlwZXMgY29yZVR5cGVzLCBFeHByZXNzaW9uIHJlY2VpdmVyLAogICAgICBTdHJpbmcgbmFtZSwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCwgYm9vbCBpc1N1cGVyKSB7CiAgICByZXR1cm4gbmV3IEludmFsaWRFeHByZXNzaW9uKG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBpbnN0YW50aWF0ZU5vU3VjaE1ldGhvZEVycm9yKENvcmVUeXBlcyBjb3JlVHlwZXMsCiAgICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsIFN0cmluZyBuYW1lLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCBpc01ldGhvZDogZmFsc2UsCiAgICAgIGJvb2wgaXNHZXR0ZXI6IGZhbHNlLAogICAgICBib29sIGlzU2V0dGVyOiBmYWxzZSwKICAgICAgYm9vbCBpc0ZpZWxkOiBmYWxzZSwKICAgICAgYm9vbCBpc0xvY2FsVmFyaWFibGU6IGZhbHNlLAogICAgICBib29sIGlzRHluYW1pYzogZmFsc2UsCiAgICAgIGJvb2wgaXNTdXBlcjogZmFsc2UsCiAgICAgIGJvb2wgaXNTdGF0aWM6IGZhbHNlLAogICAgICBib29sIGlzQ29uc3RydWN0b3I6IGZhbHNlLAogICAgICBib29sIGlzVG9wTGV2ZWw6IGZhbHNlfSkgewogICAgcmV0dXJuIG5ldyBJbnZhbGlkRXhwcmVzc2lvbihudWxsKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50c0JhY2tlbmQgY29uc3RhbnRzQmFja2VuZChDb3JlVHlwZXMgY29yZVR5cGVzKSA9PgogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgdGhpcyB2YXJ5IHdpdGggdGhlIHVzZSBjYXNlPwogICAgICBjb25zdCBOb25lQ29uc3RhbnRzQmFja2VuZChzdXBwb3J0c1VuZXZhbHVhdGVkQ29uc3RhbnRzOiB0cnVlKTsKfQqBLgBOTjwfARYiHQE4ARQZIgFMAgEyAUY4AwEzHyQZAgEqQhoCAVEXIAYBNQYCATEZHAFIQQFHPwFHPwEwPQFKRUlNUE0+RQE6BlAbBk8oMgIBSRgTAUUGKTkBPAZPUBVOAUcXUQEXAUhOKQZOTB4yAUsgBko7Bk5NS09NJwY6JwFILQZMSEtRID0BTyY0GxsfLSQBTjEbGyAfShouLSIBTAZRShEqSiQBTywGTyUrMgFJBkwYSCMoIyc3AU0GUVBPT1EnAVBRTzoyAU0/TiovMgFJTEopKAFQGU1DAT9JHRwcGyMdGxwhIAFAKEIBKAE/RAE+QwFJTwE6AgE2DCsBQwIBIhsBGgErHTkxGxsgHy4tJAEMTUQoBAEMP0kdHBwbIx0bHCEhKAQBDDxCRgIBInBhY2thZ2U6a2VybmVsL3RhcmdldC90YXJnZXRzLmRhcnRCc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2FwaV9wcm90b3R5cGUvY29tcGlsZXJfb3B0aW9ucy5kYXJ0p7AvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmcm9udF9lbmQuY29tcGlsZXJfb3B0aW9uczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdGFyZ2V0L3RhcmdldHMuZGFydCcgc2hvdyBUYXJnZXQ7CgppbXBvcnQgJ2RpYWdub3N0aWNfbWVzc2FnZS5kYXJ0JyBzaG93IERpYWdub3N0aWNNZXNzYWdlSGFuZGxlcjsKCmltcG9ydCAnZXhwZXJpbWVudGFsX2ZsYWdzLmRhcnQnCiAgICBzaG93IGRlZmF1bHRFeHBlcmltZW50YWxGbGFncywgRXhwZXJpbWVudGFsRmxhZywgcGFyc2VFeHBlcmltZW50YWxGbGFnOwoKaW1wb3J0ICdmaWxlX3N5c3RlbS5kYXJ0JyBzaG93IEZpbGVTeXN0ZW07CgppbXBvcnQgJ3N0YW5kYXJkX2ZpbGVfc3lzdGVtLmRhcnQnIHNob3cgU3RhbmRhcmRGaWxlU3lzdGVtOwoKZXhwb3J0ICdkaWFnbm9zdGljX21lc3NhZ2UuZGFydCcgc2hvdyBEaWFnbm9zdGljTWVzc2FnZTsKCi8vLyBGcm9udC1lbmQgb3B0aW9ucyByZWxldmFudCB0byBjb21waWxlciBiYWNrIGVuZHMuCi8vLwovLy8gTm90IGludGVuZGVkIHRvIGJlIGltcGxlbWVudGVkIG9yIGV4dGVuZGVkIGJ5IGNsaWVudHMuCmNsYXNzIENvbXBpbGVyT3B0aW9ucyB7CiAgLy8vIFRoZSBVUkkgb2YgdGhlIHJvb3Qgb2YgdGhlIERhcnQgU0RLICh0eXBpY2FsbHkgYSAiZmlsZToiIFVSSSkuCiAgLy8vCiAgLy8vIElmIGBudWxsYCwgdGhlIFNESyB3aWxsIGJlIHNlYXJjaGVkIGZvciB1c2luZwogIC8vLyBbUGxhdGZvcm0ucmVzb2x2ZWRFeGVjdXRhYmxlXSBhcyBhIHN0YXJ0aW5nIHBvaW50LgogIFVyaSBzZGtSb290OwoKICAvLy8gVXJpIHRvIGEgcGxhdGZvcm0gbGlicmFyaWVzIHNwZWNpZmljYXRpb24gZmlsZS4KICAvLy8KICAvLy8gQSBsaWJyYXJpZXMgc3BlY2lmaWNhdGlvbiBmaWxlIGlzIGEgSlNPTiBmaWxlIHRoYXQgZGVzY3JpYmVzIGhvdyB0byBtYXAKICAvLy8gYGRhcnQ6KmAgbGlicmFyaWVzIHRvIFVSSXMgaW4gdGhlIHVuZGVybHlpbmcgW2ZpbGVTeXN0ZW1dLiAgU2VlCiAgLy8vIGBwYWNrYWdlOmZyb250X2VuZC9zcmMvYmFzZS9saWJyYXJpZXNfc3BlY2lmaWNhdGlvbi5kYXJ0YCBmb3IgZGV0YWlscyBvbgogIC8vLyB0aGUgZm9ybWF0LgogIC8vLwogIC8vLyBJZiBhIHZhbHVlIGlzIG5vdCBzcGVjaWZpZWQgYW5kIGBjb21waWxlU2RrID0gdHJ1ZWAsIHRoZSBjb21waWxlciB3aWxsCiAgLy8vIGluZmVyIGF0IGEgZGVmYXVsdCBsb2NhdGlvbiB1bmRlciBbc2RrUm9vdF0sIHR5cGljYWxseSB1bmRlcgogIC8vLyBgbGliL2xpYnJhcmllcy5qc29uYC4KICBVcmkgbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaTsKCiAgRGlhZ25vc3RpY01lc3NhZ2VIYW5kbGVyIG9uRGlhZ25vc3RpYzsKCiAgLy8vIFVSSSBvZiB0aGUgIi5wYWNrYWdlcyIgZmlsZSAodHlwaWNhbGx5IGEgImZpbGU6IiBVUkkpLgogIC8vLwogIC8vLyBJZiBgbnVsbGAsIHRoZSAiLnBhY2thZ2VzIiBmaWxlIHdpbGwgYmUgZm91bmQgdmlhIHRoZSBzdGFuZGFyZAogIC8vLyBwYWNrYWdlX2NvbmZpZyBzZWFyY2ggYWxnb3JpdGhtLgogIC8vLwogIC8vLyBJZiB0aGUgVVJJJ3MgcGF0aCBjb21wb25lbnQgaXMgZW1wdHkgKGUuZy4gYG5ldyBVcmkoKWApLCBubyBwYWNrYWdlcyBmaWxlCiAgLy8vIHdpbGwgYmUgdXNlZC4KICBVcmkgcGFja2FnZXNGaWxlVXJpOwoKICAvLy8gVVJJcyBvZiBpbnB1dCBzdW1tYXJ5IGZpbGVzIChleGNsdWRpbmcgdGhlIFNESyBzdW1tYXJ5OyB0eXBpY2FsbHkgdGhlc2UKICAvLy8gd2lsbCBiZSAiZmlsZToiIFVSSXMpLgogIC8vLwogIC8vLyBUaGVzZSBmaWxlcyBzaG91bGQgYmUgc3VtbWFyeSBmaWxlcyBnZW5lcmF0ZWQgYnkgdGhpcyBwYWNrYWdlIChhbmQgbm90IHRoZQogIC8vLyBzaW1pbGFybHkgbmFtZWQgc3VtbWFyeSBmaWxlcyBmcm9tIGBwYWNrYWdlOmFuYWx5emVyYC4pCiAgLy8vCiAgLy8vIFN1bW1hcmllcyBtYXkgYmUgcHJvdmlkZWQgaW4gYW55IG9yZGVyLCBidXQgdGhleSBzaG91bGQgYmUgYWN5Y2xpYyBhbmQKICAvLy8gY2xvc2VkOiBhbnkgbGlicmFyaWVzIHRoYXQgdGhleSByZWZlcmVuY2Ugc2hvdWxkIGJlIGRlZmluZWQgaW4gZWl0aGVyIG9uZQogIC8vLyBvZiBbaW5wdXRTdW1tYXJpZXNdIG9yIFtzZGtTdW1tYXJ5XS4KICBMaXN0PFVyaT4gaW5wdXRTdW1tYXJpZXMgPSBbXTsKCiAgLy8vIFVSSXMgb2Ygb3RoZXIga2VybmVsIGNvbXBvbmVudHMgdG8gbGluay4KICAvLy8KICAvLy8gQ29tbW9ubHkgdXNlZCB0byBsaW5rIHRoZSBjb2RlIGZvciB0aGUgU0RLIGxpYnJhcmllcyB0aGF0IHdhcyBjb21waWxlZAogIC8vLyBzZXBhcmF0ZWx5LiBGb3IgZXhhbXBsZSwgZGFydDJqcyBuZWVkcyB0byBsaW5rIHRoZSBTREsgc28gaXQgY2FuCiAgLy8vIG9wdGltaXplIGFuZCB0cmVlLXNoYWtlIHRoZSBjb2RlIGZvciB0aGUgYXBwbGljYXRpb24sIHdoZXJlYXMgdGhlIFZNCiAgLy8vIGFsd2F5cyBlbWJlZHMgdGhlIFNESyBpbnRlcm5hbGx5IGFuZCBkb2Vzbid0IG5lZWQgaXQgYXMgcGFydCBvZiB0aGUKICAvLy8gcHJvZ3JhbS4KICAvLy8KICAvLy8gVGhlIGNvbXBvbmVudHMgcHJvdmlkZWQgaGVyZSBzaG91bGQgYmUgY2xvc2VkIGFuZCBhY3ljbGljOiBhbnkgbGlicmFyaWVzCiAgLy8vIHRoYXQgdGhleSByZWZlcmVuY2Ugc2hvdWxkIGJlIGRlZmluZWQgaW4gYSBjb21wb25lbnQgaW4KICAvLy8gW2xpbmtlZERlcGVuZGVuY2llc10gb3IgYW55IG9mIHRoZSBbaW5wdXRTdW1tYXJpZXNdIG9yIFtzZGtTdW1tYXJ5XS4KICBMaXN0PFVyaT4gbGlua2VkRGVwZW5kZW5jaWVzID0gW107CgogIC8vLyBVUkkgb2YgdGhlIFNESyBzdW1tYXJ5IGZpbGUgKHR5cGljYWxseSBhICJmaWxlOiIgVVJJKS4KICAvLy8KICAvLy8gVGhpcyBzaG91bGQgc2hvdWxkIGJlIGEgc3VtbWFyeSBwcmV2aW9zbHkgZ2VuZXJhdGVkIGJ5IHRoaXMgcGFja2FnZSAoYW5kCiAgLy8vIG5vdCB0aGUgc2ltaWxhcmx5IG5hbWVkIHN1bW1hcnkgZmlsZXMgZnJvbSBgcGFja2FnZTphbmFseXplcmAuKQogIC8vLwogIC8vLyBJZiBgbnVsbGAgYW5kIFtjb21waWxlU2RrXSBpcyBmYWxzZSwgdGhlIFNESyBzdW1tYXJ5IHdpbGwgYmUgc2VhcmNoZWQgZm9yCiAgLy8vIGF0IGEgZGVmYXVsdCBsb2NhdGlvbiB3aXRoaW4gW3Nka1Jvb3RdLgogIFVyaSBzZGtTdW1tYXJ5OwoKICAvLy8gVGhlIGRlY2xhcmVkIHZhcmlhYmxlcyBmb3IgdXNlIGJ5IGNvbmZpZ3VyYWJsZSBpbXBvcnRzIGFuZCBjb25zdGFudAogIC8vLyBldmFsdWF0aW9uLgogIE1hcDxTdHJpbmcsIFN0cmluZz4gZGVjbGFyZWRWYXJpYWJsZXM7CgogIC8vLyBUaGUgW0ZpbGVTeXN0ZW1dIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBmcm9udCBlbmQgdG8gYWNjZXNzIGZpbGVzLgogIC8vLwogIC8vLyBBbGwgZmlsZSBzeXN0ZW0gYWNjZXNzIHBlcmZvcm1lZCBieSB0aGUgZnJvbnQgZW5kIGdvZXMgdGhyb3VnaCB0aGlzCiAgLy8vIG1lY2hhbmlzbSwgd2l0aCBvbmUgZXhjZXB0aW9uOiBpZiBubyB2YWx1ZSBpcyBzcGVjaWZpZWQgZm9yCiAgLy8vIFtwYWNrYWdlc0ZpbGVVcmldLCB0aGUgcGFja2FnZXMgZmlsZSBpcyBsb2NhdGVkIHVzaW5nIHRoZSBhY3R1YWwgcGh5c2ljYWwKICAvLy8gZmlsZSBzeXN0ZW0uICBUT0RPKHBhdWxiZXJyeSk6IGZpeCB0aGlzLgogIEZpbGVTeXN0ZW0gZmlsZVN5c3RlbSA9IFN0YW5kYXJkRmlsZVN5c3RlbS5pbnN0YW5jZTsKCiAgLy8vIFdoZXRoZXIgdG8gZ2VuZXJhdGUgY29kZSBmb3IgdGhlIFNESy4KICAvLy8KICAvLy8gQnkgZGVmYXVsdCB0aGUgZnJvbnQgZW5kIHJlc29sdmVzIGNvbXBvbmVudHMgdXNpbmcgYSBwcmVidWlsdCBTREsgc3VtbWFyeS4KICAvLy8gV2hlbiB0aGlzIG9wdGlvbiBpcyBgdHJ1ZWAsIFtzZGtTdW1tYXJ5XSBtdXN0IGJlIG51bGwuCiAgYm9vbCBjb21waWxlU2RrID0gZmFsc2U7CgogIEBkZXByZWNhdGVkCiAgYm9vbCBjaGFzZURlcGVuZGVuY2llczsKCiAgLy8vIFRydWUgaWYgZW5hYmxpbmcgbGVnYWN5IG1vZGUgKERhcnQgMSBjb21wYXRpYmlsaXR5KS4KICBib29sIGxlZ2FjeU1vZGUgPSBmYWxzZTsKCiAgLy8vIFBhdGNoIGZpbGVzIHRvIGFwcGx5IG9uIHRoZSBjb3JlIGxpYnJhcmllcyBmb3IgYSBzcGVjaWZpYyB0YXJnZXQgcGxhdGZvcm0uCiAgLy8vCiAgLy8vIEtleXMgaW4gdGhlIG1hcCBhcmUgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgd2l0aCBubyBgZGFydDpgIHByZWZpeCwgZm9yCiAgLy8vIGV4YW1wbGU6CiAgLy8vCiAgLy8vICAgICAgeydjb3JlJzogWwogIC8vLyAgICAgICAgICdmaWxlOi8vL2xvY2F0aW9uL29mL2NvcmUvcGF0Y2hfZmlsZTEuZGFydCcsCiAgLy8vICAgICAgICAgJ2ZpbGU6Ly8vbG9jYXRpb24vb2YvY29yZS9wYXRjaF9maWxlMi5kYXJ0JywKICAvLy8gICAgICAgICBdfQogIC8vLwogIC8vLyBUaGUgdmFsdWVzIGNhbiBiZSBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmUgVVJJcy4gQWJzb2x1dGUgVVJJcyBhcmUgcmVhZAogIC8vLyBkaXJlY3RseSwgd2hpbGUgcmVsYXRpdmUgVVJJcyBhcmUgcmVzb2x2ZWQgZnJvbSB0aGUgW3Nka1Jvb3RdLgogIC8vIFRPRE8oc2lnbXVuZCk6IHByb3ZpZGUgYWxzbyBhIGZsYWcgdG8gbG9hZCB0aGlzIGRhdGEgZnJvbSBhIGZpbGUgKGxpa2UKICAvLyBsaWJyYXJpZXMuanNvbikKICBNYXA8U3RyaW5nLCBMaXN0PFVyaT4+IHRhcmdldFBhdGNoZXMgPSA8U3RyaW5nLCBMaXN0PFVyaT4+e307CgogIC8vLyBFbmFibGUgb3IgZGlzYWJsZSBleHBlcmltZW50YWwgZmVhdHVyZXMuIEZlYXR1cmVzIG1hcHBpbmcgdG8gYHRydWVgIGFyZQogIC8vLyBleHBsaWNpdGx5IGVuYWJsZWQuIEZlYXR1cmVzIG1hcHBpbmcgdG8gYGZhbHNlYCBhcmUgZXhwbGljaXRseSBkaXNhYmxlZC4KICAvLy8gRmVhdHVyZXMgbm90IG1lbnRpb25lZCBpbiB0aGUgbWFwIHdpbGwgaGF2ZSB0aGVpciBkZWZhdWx0IHZhbHVlLgogIE1hcDxFeHBlcmltZW50YWxGbGFnLCBib29sPiBleHBlcmltZW50YWxGbGFncyA9IDxFeHBlcmltZW50YWxGbGFnLCBib29sPnt9OwoKICAvLy8gRW52aXJvbm1lbnQgbWFwIHVzZWQgd2hlbiBldmFsdWF0aW5nIGBib29sLmZyb21FbnZpcm9ubWVudGAsCiAgLy8vIGBpbnQuZnJvbUVudmlyb25tZW50YCBhbmQgYFN0cmluZy5mcm9tRW52aXJvbm1lbnRgIGR1cmluZyBjb25zdGFudAogIC8vLyBldmFsdWF0aW9uLiBJZiB0aGUgbWFwIGlzIGBudWxsYCwgYWxsIGVudmlyb25tZW50IGNvbnN0YW50cyB3aWxsIGJlIGxlZnQKICAvLy8gdW5ldmFsdWF0ZWQgYW5kIGNhbiBiZSBldmFsdWF0ZWQgYnkgYSBjb25zdGFudCBldmFsdWF0b3IgbGF0ZXIuCiAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudERlZmluZXMgPSBudWxsOwoKICAvLy8gUmVwb3J0IGFuIGVycm9yIGlmIGEgY29uc3RhbnQgY291bGQgbm90IGJlIGV2YWx1YXRlZCAoZWl0aGVyIGJlY2F1c2UgaXQKICAvLy8gaXMgYW4gZW52aXJvbm1lbnQgY29uc3RhbnQgYW5kIG5vIGVudmlyb25tZW50IHdhcyBzcGVjaWZpZWQsIG9yIGJlY2F1c2UKICAvLy8gaXQgcmVmZXJzIHRvIGEgY29uc3RydWN0b3Igb3IgdmFyaWFibGUgaW5pdGlhbGl6ZXIgdGhhdCBpcyBub3QgYXZhaWxhYmxlKS4KICBib29sIGVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50ID0gZmFsc2U7CgogIC8vLyBUaGUgdGFyZ2V0IHBsYXRmb3JtIHRoYXQgd2lsbCBjb25zdW1lIHRoZSBjb21waWxlZCBjb2RlLgogIC8vLwogIC8vLyBVc2VkIHRvIHByb3ZpZGUgcGxhdGZvcm0tc3BlY2lmaWMgZGV0YWlscyB0byB0aGUgY29tcGlsZXIgbGlrZToKICAvLy8gICAqIHRoZSBzZXQgb2YgbGlicmFyaWVzIGFyZSBwYXJ0IG9mIGEgcGxhdGZvcm0ncyBTREsgKGUuZy4gZGFydDpodG1sIGZvcgogIC8vLyAgICAgZGFydDJqcywgZGFydDp1aSBmb3IgZmx1dHRlcikuCiAgLy8vCiAgLy8vICAgKiB3aGF0IGtlcm5lbCB0cmFuc2Zvcm1hdGlvbnMgc2hvdWxkIGJlIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudAogIC8vLyAgICAgKGFzeW5jL2F3YWl0LCBtaXhpbiBpbmxpbmluZywgZXRjKS4KICAvLy8KICAvLy8gICAqIGhvdyB0byBkZWFsIHdpdGggbm9uLXN0YW5kYXJkIGZlYXR1cmVzIGxpa2UgYG5hdGl2ZWAgZXh0ZW5zaW9ucy4KICAvLy8KICAvLy8gSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdGFyZ2V0IGlzIHRoZSBWTS4KICBUYXJnZXQgdGFyZ2V0OwoKICAvLy8gRGVwcmVjYXRlZC4gSGFzIG5vIGFmZmVjdCBvbiBmcm9udC1lbmQuCiAgLy8gVE9ETyhkYXJ0YnVnLmNvbS8zNzUxNCkgUmVtb3ZlIHRoaXMgZmllbGQgb25jZSBEREsgcmVtb3ZlcyBpdHMgdXNlcyBvZiBpdC4KICBib29sIGVuYWJsZUFzc2VydHMgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gc2hvdyB2ZXJib3NlIG1lc3NhZ2VzIChtYWlubHkgZm9yIGRlYnVnZ2luZyBhbmQgcGVyZm9ybWFuY2UKICAvLy8gdHJhY2tpbmcpLgogIC8vLwogIC8vLyBNZXNzYWdlcyBhcmUgcHJpbnRlZCBvbiBzdGRvdXQuCiAgLy8gVE9ETyhzaWdtdW5kKTogaW1wcm92ZSB0aGUgZGlhZ25vdGljcyBBUEkgdG8gcHJvdmlkZSBtZWNoYW5pc20gdG8gaW50ZXJjZXB0CiAgLy8gdmVyYm9zZSBkYXRhIChJc3N1ZSAjMzAwNTYpCiAgYm9vbCB2ZXJib3NlID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIHJ1biBleHRyYSB2ZXJpZmljYXRpb24gc3RlcHMgdG8gdmFsaWRhdGUgdGhhdCBjb21waWxlZAogIC8vLyBjb21wb25lbnRzIGFyZSB3ZWxsIGZvcm1lZC4KICAvLy8KICAvLy8gRXJyb3JzIGFyZSByZXBvcnRlZCB2aWEgdGhlIFtvbkRpYWdub3N0aWNdIGNhbGxiYWNrLgogIGJvb2wgdmVyaWZ5ID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIGR1bXAgZ2VuZXJhdGVkIGNvbXBvbmVudHMgaW4gYSB0ZXh0IGZvcm1hdCAoYWxzbyBtYWlubHkgZm9yCiAgLy8vIGRlYnVnZ2luZykuCiAgLy8vCiAgLy8vIER1bXBlZCBkYXRhIGlzIHByaW50ZWQgaW4gc3Rkb3V0LgogIGJvb2wgZGVidWdEdW1wID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIG9taXQgdGhlIHBsYXRmb3JtIHdoZW4gc2VyaWFsaXppbmcgdGhlIHJlc3VsdCBmcm9tIGEgYGZhc3RhCiAgLy8vIGNvbXBpbGVgIHJ1bi4KICBib29sIG9taXRQbGF0Zm9ybSA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byBzZXQgdGhlIGV4aXQgY29kZSB0byBub24temVybyBpZiBhbnkgcHJvYmxlbSAoaW5jbHVkaW5nCiAgLy8vIHdhcm5pbmcsIGV0Yy4pIGlzIGVuY291bnRlcmVkIGR1cmluZyBjb21waWxhdGlvbi4KICBib29sIHNldEV4aXRDb2RlT25Qcm9ibGVtID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIHRvIGVtYmVkIHRoZSBpbnB1dCBzb3VyY2VzIGluIGdlbmVyYXRlZCBrZXJuZWwgY29tcG9uZW50cy4KICAvLy8KICAvLy8gVGhlIGtlcm5lbCBgQ29tcG9uZW50YCBBUEkgaW5jbHVkZXMgYSBgdXJpVG9Tb3VyY2VgIG1hcCBmaWVsZCB0aGF0IGlzIHVzZWQKICAvLy8gdG8gZW1iZWQgdGhlIGVudGlyZSBjb250ZW50cyBvZiB0aGUgc291cmNlIGZpbGVzLiBUaGlzIHBhcnQgb2YgdGhlIGtlcm5lbAogIC8vLyBBUEkgaXMgaW4gZmx1eCBhbmQgaXQgaXMgbm90IG5lY2Vzc2FyeSBmb3Igc29tZSB0b29scy4gVG9kYXkgaXQgaXMgdXNlZAogIC8vLyBmb3IgdHJhbnNsYXRpbmcgZXJyb3IgbG9jYXRpb25zIGFuZCBzdGFjayB0cmFjZXMgaW4gdGhlIFZNLgogIC8vIFRPRE8oc2lnbXVuZCk6IGNoYW5nZSB0aGUgZGVmYXVsdC4KICBib29sIGVtYmVkU291cmNlVGV4dCA9IHRydWU7CgogIC8vLyBXaGV0aGVyIHRoZSBjb21waWxlciBzaG91bGQgdGhyb3cgYXMgc29vbiBhcyBpdCBlbmNvdW50ZXJzIGEKICAvLy8gY29tcGlsYXRpb24gZXJyb3IuCiAgLy8vCiAgLy8vIFR5cGljYWxseSB1c2VkIGJ5IGRldmVsb3BlcnMgdG8gZGVidWcgaW50ZXJuYWxzIG9mIHRoZSBjb21waWxlci4KICBib29sIHRocm93T25FcnJvcnNGb3JEZWJ1Z2dpbmcgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdGhlIGNvbXBpbGVyIHNob3VsZCB0aHJvdyBhcyBzb29uIGFzIGl0IGVuY291bnRlcnMgYQogIC8vLyBjb21waWxhdGlvbiB3YXJuaW5nLgogIC8vLwogIC8vLyBUeXBpY2FsbHkgdXNlZCBieSBkZXZlbG9wZXJzIHRvIGRlYnVnIGludGVybmFscyBvZiB0aGUgY29tcGlsZXIuCiAgYm9vbCB0aHJvd09uV2FybmluZ3NGb3JEZWJ1Z2dpbmcgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdG8gZ2VuZXJhdGUgYnl0ZWNvZGUuCiAgYm9vbCBieXRlY29kZSA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0byB3cml0ZSBhIGZpbGUgKGUuZy4gYSBkaWxsIGZpbGUpIHdoZW4gcmVwb3J0aW5nIGEgY3Jhc2guCiAgYm9vbCB3cml0ZUZpbGVPbkNyYXNoUmVwb3J0ID0gdHJ1ZTsKfQoKLy8vIFBhcnNlIGV4cGVyaW1lbnRhbCBmbGFncyBmcm9tIGEgbGlzdCBvZiBzdHJpbmdzLCBlYWNoIG9mIHdoaWNoIGlzIGVpdGhlciBhCi8vLyBmbGFnIG5hbWUgb3IgYSBmbGFnIG5hbWUgcHJlZml4ZWQgYnkgJ25vLScuIFJldHVybiBhIG1hcCBvZiBmbGFncyB0byB0aGVpcgovLy8gdmFsdWVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBbZXhwZXJpbWVudGFsRmxhZ3NdLiBUaGUgcmV0dXJuZWQgbWFwIGlzCi8vLyBub3JtYWxpemVkIHRvIGNvbnRhaW4gZGVmYXVsdCB2YWx1ZXMgZm9yIHVubWVudGlvbmVkIGZsYWdzLgovLy8KLy8vIElmIGFuIHVua25vd24gZmxhZyBpcyBtZW50aW9uZWQsIG9yIGEgZmxhZyBpcyBtZW50aW9uZWQgbW9yZSB0aGFuIG9uY2UsCi8vLyB0aGUgc3VwcGxpZWQgZXJyb3IgaGFuZGxlciBpcyBjYWxsZWQgd2l0aCBhbiBlcnJvciBtZXNzYWdlLgpNYXA8RXhwZXJpbWVudGFsRmxhZywgYm9vbD4gcGFyc2VFeHBlcmltZW50YWxGbGFncygKICAgIEl0ZXJhYmxlPFN0cmluZz4gZXhwZXJpbWVudHMsIHZvaWQgb25FcnJvcihTdHJpbmcgbWVzc2FnZSkpIHsKICBNYXA8RXhwZXJpbWVudGFsRmxhZywgYm9vbD4gZmxhZ3MgPSA8RXhwZXJpbWVudGFsRmxhZywgYm9vbD57fTsKICBpZiAoZXhwZXJpbWVudHMgIT0gbnVsbCkgewogICAgZm9yIChTdHJpbmcgZXhwZXJpbWVudCBpbiBleHBlcmltZW50cykgewogICAgICBib29sIHZhbHVlID0gdHJ1ZTsKICAgICAgaWYgKGV4cGVyaW1lbnQuc3RhcnRzV2l0aCgibm8tIikpIHsKICAgICAgICB2YWx1ZSA9IGZhbHNlOwogICAgICAgIGV4cGVyaW1lbnQgPSBleHBlcmltZW50LnN1YnN0cmluZygzKTsKICAgICAgfQogICAgICBFeHBlcmltZW50YWxGbGFnIGZsYWcgPSBwYXJzZUV4cGVyaW1lbnRhbEZsYWcoZXhwZXJpbWVudCk7CiAgICAgIGlmIChmbGFnID09IG51bGwpIHsKICAgICAgICBvbkVycm9yKCJVbmtub3duIGV4cGVyaW1lbnQ6ICIgKyBleHBlcmltZW50KTsKICAgICAgfSBlbHNlIGlmIChmbGFnID09IEV4cGVyaW1lbnRhbEZsYWcuZXhwaXJlZEZsYWcpIHsKICAgICAgICBwcmludCgiRXhwZXJpbWVudCBmbGFnIG5vIGxvbmdlciByZXF1aXJlZDogIiArIGV4cGVyaW1lbnQpOwogICAgICB9IGVsc2UgaWYgKGZsYWdzLmNvbnRhaW5zS2V5KGZsYWcpKSB7CiAgICAgICAgaWYgKGZsYWdzW2ZsYWddICE9IHZhbHVlKSB7CiAgICAgICAgICBvbkVycm9yKAogICAgICAgICAgICAgICJFeHBlcmltZW50IHNwZWNpZmllZCB3aXRoIGNvbmZsaWN0aW5nIHZhbHVlczogIiArIGV4cGVyaW1lbnQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBmbGFnc1tmbGFnXSA9IHZhbHVlOwogICAgICB9CiAgICB9CiAgfQogIGZvciAoRXhwZXJpbWVudGFsRmxhZyBmbGFnIGluIEV4cGVyaW1lbnRhbEZsYWcudmFsdWVzKSB7CiAgICBpZiAoZmxhZyA9PSBFeHBlcmltZW50YWxGbGFnLmV4cGlyZWRGbGFnKSBjb250aW51ZTsKICAgIGFzc2VydChkZWZhdWx0RXhwZXJpbWVudGFsRmxhZ3MuY29udGFpbnNLZXkoZmxhZyksCiAgICAgICAgIk5vIGRlZmF1bHQgdmFsdWUgZm9yICRmbGFnLiIpOwogICAgZmxhZ3NbZmxhZ10gPz89IGRlZmF1bHRFeHBlcmltZW50YWxGbGFnc1tmbGFnXTsKICB9CiAgcmV0dXJuIGZsYWdzOwp9CoEBAE5OPAEkATkBQAEhTAErATwBOQE2BDsYRQY0OQ8BNgZORk8SBk1DHCEBKQE9BkUnBlAUFwFOHQZRPgZNUCshAS8GTUdLSg8GTz5LJQE9Bk9GBlAuEgFKEikBTgZKQlAvNwEsBlE9GwEOGgE7GwFRBk4PBhY7OxEGUUVMFUABTk9HTgFDSU9GMQFOTlErAT8GRlApBkkuBksGNhEBLlAeAU0RBiZRIRgBSCIGOxcBTRIGKBoBTRQdAUk4JQFJBlFQTkIoHwFDGQZHKgFDGwZHLAEkGQFJJgIBT09KQARMQDRCQh0tGSoXLghBGjY5RCwkE04KDx0IBgQ7ODcoNAQQAgE5cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvY29tcGlsZXJfb3B0aW9ucy5kYXJ0RHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9hcGlfcHJvdG90eXBlL2RpYWdub3N0aWNfbWVzc2FnZS5kYXJ0itwvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmcm9udF9lbmQuZGlhZ25vc3RpY19tZXNzYWdlOwoKaW1wb3J0ICcuLi9mYXN0YS9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdyBDb2RlLCBEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uLCBGb3JtYXR0ZWRNZXNzYWdlOwoKaW1wb3J0ICcuLi9mYXN0YS9zZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKLy8vIFRoZSB0eXBlIG9mIGEgZGlhZ25vc3RpYyBtZXNzYWdlIGNhbGxiYWNrLiBGb3IgZXhhbXBsZToKLy8vCi8vLyAgICB2b2lkIGhhbmRsZXIoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSkgewovLy8gICAgICBpZiAoZW5hYmxlVGVybWluYWxDb2xvcnMpIHsgLy8gU2VlIFt0ZXJtaW5hbF9jb2xvcl9zdXBwb3J0LmRhcnRdLgovLy8gICAgICAgIG1lc3NhZ2UuYW5zaUZvcm1hdHRlZC5mb3JFYWNoKHN0ZGVyci53cml0ZWxuKTsKLy8vICAgICAgfSBlbHNlIHsKLy8vICAgICAgICBtZXNzYWdlLnBsYWluVGV4dEZvcm1hdHRlZC5mb3JFYWNoKHN0ZGVyci53cml0ZWxuKTsKLy8vICAgICAgfQovLy8gICAgfQp0eXBlZGVmIERpYWdub3N0aWNNZXNzYWdlSGFuZGxlciA9IHZvaWQgRnVuY3Rpb24oRGlhZ25vc3RpY01lc3NhZ2UpOwoKLy8vIFJlcHJlc2VudHMgYSBkaWFnbm9zdGljIG1lc3NhZ2UgdGhhdCBjYW4gYmUgcmVwb3J0ZWQgZnJvbSBhIHRvb2wsIGZvcgovLy8gZXhhbXBsZSwgYSBjb21waWxlci4KLy8vCi8vLyBUaGUgd29yZCAqZGlhZ25vc3RpYyogaXMgdXNlZCBsb29zZWx5IGhlcmUsIGFzIGEgdG9vbCBtYXkgYWxzbyB1c2UgdGhpcyBmb3IKLy8vIHJlcG9ydGluZyBhbnkga2luZCBvZiBtZXNzYWdlLCBpbmNsdWRpbmcgbm9uLWRpYWdub3N0aWMgbWVzc2FnZXMgc3VjaCBhcwovLy8gbGljZW5zaW5nLCBpbmZvcm1hbCwgb3IgbG9nZ2luZyBpbmZvcm1hdGlvbi4gVGhpcyBhbGxvd3MgYSB3ZWxsLWJlaGF2ZWQKLy8vIHRvb2wgdG8gbmV2ZXIgZGlyZWN0bHkgd3JpdGUgdG8gc3Rkb3V0IG9yIHN0ZGVyci4KYWJzdHJhY3QgY2xhc3MgRGlhZ25vc3RpY01lc3NhZ2UgewogIERpYWdub3N0aWNNZXNzYWdlLl8oKTsgLy8gUHJldmVudCBzdWJjbGFzc2luZy4KCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgYW5zaUZvcm1hdHRlZDsKCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgcGxhaW5UZXh0Rm9ybWF0dGVkOwoKICBTZXZlcml0eSBnZXQgc2V2ZXJpdHk7Cn0KCi8vLyBUaGlzIG1ldGhvZCBpcyBzdWJqZWN0IHRvIGNoYW5nZS4KVXJpIGdldE1lc3NhZ2VVcmkoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSkgewogIHJldHVybiBtZXNzYWdlIGlzIEZvcm1hdHRlZE1lc3NhZ2UKICAgICAgPyBtZXNzYWdlLnVyaQogICAgICA6IG1lc3NhZ2UgaXMgRGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbiA/IG1lc3NhZ2UudXJpIDogbnVsbDsKfQoKLy8vIFRoaXMgbWV0aG9kIGlzIHN1YmplY3QgdG8gY2hhbmdlLgppbnQgZ2V0TWVzc2FnZUNoYXJPZmZzZXQoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSkgewogIHJldHVybiBtZXNzYWdlIGlzIEZvcm1hdHRlZE1lc3NhZ2UgPyBtZXNzYWdlLmNoYXJPZmZzZXQgOiBudWxsOwp9CgovLy8gVGhpcyBtZXRob2QgaXMgc3ViamVjdCB0byBjaGFuZ2UuCmludCBnZXRNZXNzYWdlTGVuZ3RoKERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UpIHsKICByZXR1cm4gbWVzc2FnZSBpcyBGb3JtYXR0ZWRNZXNzYWdlID8gbWVzc2FnZS5sZW5ndGggOiBudWxsOwp9CgovLy8gVGhpcyBtZXRob2QgaXMgc3ViamVjdCB0byBjaGFuZ2UuCkNvZGUgZ2V0TWVzc2FnZUNvZGVPYmplY3QoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSkgewogIHJldHVybiBtZXNzYWdlIGlzIEZvcm1hdHRlZE1lc3NhZ2UgPyBtZXNzYWdlLmNvZGUgOiBudWxsOwp9CgovLy8gVGhpcyBtZXRob2QgaXMgc3ViamVjdCB0byBjaGFuZ2UuClN0cmluZyBnZXRNZXNzYWdlSGVhZGVyVGV4dChEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlKSB7CiAgcmV0dXJuIG1lc3NhZ2UgaXMgRm9ybWF0dGVkTWVzc2FnZSA/IG1lc3NhZ2UubWVzc2FnZSA6IG51bGw7Cn0KCi8vLyBUaGlzIG1ldGhvZCBpcyBzdWJqZWN0IHRvIGNoYW5nZS4KaW50IGdldE1lc3NhZ2VDb2RlKERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UpIHsKICByZXR1cm4gbWVzc2FnZSBpcyBGb3JtYXR0ZWRNZXNzYWdlID8gbWVzc2FnZS5jb2RlLmluZGV4IDogLTE7Cn0KCi8vLyBUaGlzIG1ldGhvZCBpcyBzdWJqZWN0IHRvIGNoYW5nZS4KTWFwPFN0cmluZywgZHluYW1pYz4gZ2V0TWVzc2FnZUFyZ3VtZW50cyhEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlKSB7CiAgcmV0dXJuIG1lc3NhZ2UgaXMgRm9ybWF0dGVkTWVzc2FnZSA/IG1lc3NhZ2UuYXJndW1lbnRzIDogbnVsbDsKfQoKLy8vIFRoaXMgbWV0aG9kIGlzIHN1YmplY3QgdG8gY2hhbmdlLgpJdGVyYWJsZTxEaWFnbm9zdGljTWVzc2FnZT4gZ2V0TWVzc2FnZVJlbGF0ZWRJbmZvcm1hdGlvbigKICAgIERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UpIHsKICByZXR1cm4gbWVzc2FnZSBpcyBGb3JtYXR0ZWRNZXNzYWdlID8gbWVzc2FnZS5yZWxhdGVkSW5mb3JtYXRpb24gOiBudWxsOwp9ClMATk48ASYBIzwBLwE8BDFLOhI/CwlFAUoZBFBNTDYjMQEmASsBGQIBJi8lFEMCASY2QgIBJjI+AgEmNzwCASY5PwIBJjBAAgEmRkECASY6IUoCATtwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9kaWFnbm9zdGljX21lc3NhZ2UuZGFydERzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Byb3RvdHlwZS9leHBlcmltZW50YWxfZmxhZ3MuZGFydIazLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIE5PVEU6IFRISVMgRklMRSBJUyBHRU5FUkFURUQuIERPIE5PVCBFRElULgovLwovLyBJbnN0ZWFkIG1vZGlmeSAndG9vbHMvZXhwZXJpbWVudGFsX2ZlYXR1cmVzLnlhbWwnIGFuZCBydW4KLy8gJ3BrZy9mcm9udF9lbmQvdG9vbC9mYXN0YSBnZW5lcmF0ZS1leHBlcmltZW50YWwtZmxhZ3MnIHRvIHVwZGF0ZS4KCmVudW0gRXhwZXJpbWVudGFsRmxhZyB7CiAgY29uc3RhbnRVcGRhdGUyMDE4LAogIGNvbnRyb2xGbG93Q29sbGVjdGlvbnMsCiAgZXh0ZW5zaW9uTWV0aG9kcywKICBub25OdWxsYWJsZSwKICBzcHJlYWRDb2xsZWN0aW9ucywKICB0cmlwbGVTaGlmdCwKCiAgLy8gQSBwbGFjZWhvbGRlciByZXByZXNlbnRpbmcgYW4gImV4cGlyZWQiIGZsYWcgd2hpY2ggaGFzIGJlZW4gcmVtb3ZlZAogIC8vIGZyb20gdGhlIGNvZGViYXNlIGJ1dCBzdGlsbCBuZWVkcyB0byBiZSBncmFjZWZ1bGx5IGlnbm9yZWQKICAvLyB3aGVuIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgogIGV4cGlyZWRGbGFnLAp9CgpFeHBlcmltZW50YWxGbGFnIHBhcnNlRXhwZXJpbWVudGFsRmxhZyhTdHJpbmcgZmxhZykgewogIHN3aXRjaCAoZmxhZykgewogICAgY2FzZSAiY29uc3RhbnQtdXBkYXRlLTIwMTgiOgogICAgICByZXR1cm4gRXhwZXJpbWVudGFsRmxhZy5jb25zdGFudFVwZGF0ZTIwMTg7CiAgICBjYXNlICJjb250cm9sLWZsb3ctY29sbGVjdGlvbnMiOgogICAgICByZXR1cm4gRXhwZXJpbWVudGFsRmxhZy5jb250cm9sRmxvd0NvbGxlY3Rpb25zOwogICAgY2FzZSAiZXh0ZW5zaW9uLW1ldGhvZHMiOgogICAgICByZXR1cm4gRXhwZXJpbWVudGFsRmxhZy5leHRlbnNpb25NZXRob2RzOwogICAgY2FzZSAibm9uLW51bGxhYmxlIjoKICAgICAgcmV0dXJuIEV4cGVyaW1lbnRhbEZsYWcubm9uTnVsbGFibGU7CiAgICBjYXNlICJzcHJlYWQtY29sbGVjdGlvbnMiOgogICAgICByZXR1cm4gRXhwZXJpbWVudGFsRmxhZy5zcHJlYWRDb2xsZWN0aW9uczsKICAgIGNhc2UgInRyaXBsZS1zaGlmdCI6CiAgICAgIHJldHVybiBFeHBlcmltZW50YWxGbGFnLnRyaXBsZVNoaWZ0OwoKICAgIC8vIEV4cGlyZWQgZmxhZ3MKICAgIGNhc2UgInNldC1saXRlcmFscyI6CiAgICAgIHJldHVybiBFeHBlcmltZW50YWxGbGFnLmV4cGlyZWRGbGFnOwogIH0KICByZXR1cm4gbnVsbDsKfQoKY29uc3QgTWFwPEV4cGVyaW1lbnRhbEZsYWcsIGJvb2w+IGRlZmF1bHRFeHBlcmltZW50YWxGbGFncyA9IHsKICBFeHBlcmltZW50YWxGbGFnLmNvbnN0YW50VXBkYXRlMjAxODogdHJ1ZSwKICBFeHBlcmltZW50YWxGbGFnLmNvbnRyb2xGbG93Q29sbGVjdGlvbnM6IHRydWUsCiAgRXhwZXJpbWVudGFsRmxhZy5leHRlbnNpb25NZXRob2RzOiBmYWxzZSwKICBFeHBlcmltZW50YWxGbGFnLm5vbk51bGxhYmxlOiBmYWxzZSwKICBFeHBlcmltZW50YWxGbGFnLnNwcmVhZENvbGxlY3Rpb25zOiB0cnVlLAogIEV4cGVyaW1lbnRhbEZsYWcudHJpcGxlU2hpZnQ6IGZhbHNlLAp9Owo3AE5OPAEuAz1FARgWGhQPFQ8BSUApDwIBNhIhMiU2HjAZKx8xGSsBFRkrBA8CAT8tMSwnLCcDATtwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9leHBlcmltZW50YWxfZmxhZ3MuZGFydD1zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Byb3RvdHlwZS9maWxlX3N5c3RlbS5kYXJ0imMvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmcm9udF9lbmQuZmlsZV9zeXN0ZW07CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwoKLy8vIEFic3RyYWN0IGludGVyZmFjZSB0byBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLgovLy8KLy8vIEFsbCBmcm9udCBlbmQgaW50ZXJhY3Rpb24gd2l0aCB0aGUgZmlsZSBzeXN0ZW0gZ29lcyB0aHJvdWdoIHRoaXMgaW50ZXJmYWNlOwovLy8gdGhpcyBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgY2xpZW50cyB0byB1c2UgdGhlIGZyb250IGVuZCBpbiBhIHdheSB0aGF0Ci8vLyBkb2Vzbid0IHJlcXVpcmUgZmlsZSBzeXN0ZW0gYWNjZXNzIChlLmcuIHRvIHJ1biB1bml0IHRlc3RzLCBvciB0byBydW4KLy8vIGluc2lkZSBhIGJyb3dzZXIpLgovLy8KLy8vIE5vdCBpbnRlbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBvciBleHRlbmRlZCBieSBjbGllbnRzLgphYnN0cmFjdCBjbGFzcyBGaWxlU3lzdGVtIHsKICAvLy8gUmV0dXJucyBhIFtGaWxlU3lzdGVtRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBbdXJpXS4KICAvLy8KICAvLy8gVXNlcyBvZiBgLi5gIGFuZCBgLmAgaW4gdGhlIFVSSSBhcmUgbm9ybWFsaXplZCBiZWZvcmUgcmV0dXJuaW5nLgogIC8vLwogIC8vLyBJZiB0aGUgVVJJIHNjaGVtZSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZmlsZSBzeXN0ZW0sIGFuIFtFcnJvcl0gd2lsbCBiZQogIC8vLyB0aHJvd24uCiAgLy8vCiAgLy8vIERvZXMgbm90IGNoZWNrIHdoZXRoZXIgYSBmaWxlIG9yIGZvbGRlciBleGlzdHMgYXQgdGhlIGdpdmVuIGxvY2F0aW9uLgogIEZpbGVTeXN0ZW1FbnRpdHkgZW50aXR5Rm9yVXJpKFVyaSB1cmkpOwp9CgovLy8gQWJzdHJhY3QgcmVwcmVzZW50YXRpb24gb2YgYSBmaWxlIHN5c3RlbSBlbnRpdHkgdGhhdCBtYXkgb3IgbWF5IG5vdCBleGlzdC4KLy8vCi8vLyBJbnN0YW5jZXMgb2YgdGhpcyBjbGFzcyBoYXZlIHN1aXRhYmxlIGltcGxlbWVudGF0aW9ucyBvZiBlcXVhbGl0eSB0ZXN0cyBhbmQKLy8vIGhhc2hDb2RlLgovLy8KLy8vIE5vdCBpbnRlbmRlZCB0byBiZSBpbXBsZW1lbnRlZCBvciBleHRlbmRlZCBieSBjbGllbnRzLgphYnN0cmFjdCBjbGFzcyBGaWxlU3lzdGVtRW50aXR5IHsKICAvLy8gVGhlIGFic29sdXRlIG5vcm1hbGl6ZWQgVVJJIHJlcHJlc2VudGVkIGJ5IHRoaXMgZmlsZSBzeXN0ZW0gZW50aXR5LgogIC8vLwogIC8vLyBOb3RlOiB0aGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUgVVJJIHRoYXQgd2FzIHBhc3NlZCB0bwogIC8vLyBbRmlsZVN5c3RlbS5lbnRpdHlGb3JVcmldLCBzaW5jZSB0aGUgVVJJIG1pZ2h0IGhhdmUgYmVlbiBub3JtYWxpemVkLgogIFVyaSBnZXQgdXJpOwoKICAvLy8gV2hldGhlciB0aGlzIGZpbGUgc3lzdGVtIGVudGl0eSBleGlzdHMuCiAgRnV0dXJlPGJvb2w+IGV4aXN0cygpOwoKICAvLy8gQXR0ZW1wdHMgdG8gYWNjZXNzIHRoaXMgZmlsZSBzeXN0ZW0gZW50aXR5IGFzIGEgZmlsZSBhbmQgcmVhZCBpdHMgY29udGVudHMKICAvLy8gYXMgcmF3IGJ5dGVzLgogIC8vLwogIC8vLyBJZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgYXR0ZW1wdGluZyB0byByZWFkIHRoZSBmaWxlIChlLmcuIGJlY2F1c2Ugbm8gc3VjaAogIC8vLyBmaWxlIGV4aXN0cywgb3IgdGhlIGVudGl0eSBpcyBhIGRpcmVjdG9yeSksIHRoZSBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGgKICAvLy8gW0ZpbGVTeXN0ZW1FeGNlcHRpb25dLgogIEZ1dHVyZTxMaXN0PGludD4+IHJlYWRBc0J5dGVzKCk7CgogIC8vLyBBdHRlbXB0cyB0byBhY2Nlc3MgdGhpcyBmaWxlIHN5c3RlbSBlbnRpdHkgYXMgYSBmaWxlIGFuZCByZWFkIGl0cyBjb250ZW50cwogIC8vLyBhcyBhIHN0cmluZy4KICAvLy8KICAvLy8gVGhlIGZpbGUgaXMgYXNzdW1lZCB0byBiZSBVVEYtOCBlbmNvZGVkLgogIC8vLwogIC8vLyBJZiBhbiBlcnJvciBvY2N1cnMgd2hpbGUgYXR0ZW1wdGluZyB0byByZWFkIHRoZSBmaWxlIChlLmcuIGJlY2F1c2Ugbm8gc3VjaAogIC8vLyBmaWxlIGV4aXN0cywgdGhlIGVudGl0eSBpcyBhIGRpcmVjdG9yeSwgb3IgdGhlIGZpbGUgaXMgbm90IHZhbGlkIFVURi04KSwKICAvLy8gdGhlIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0uCiAgRnV0dXJlPFN0cmluZz4gcmVhZEFzU3RyaW5nKCk7Cn0KCi8qKgogKiBCYXNlIGNsYXNzIGZvciBhbGwgZmlsZSBzeXN0ZW0gZXhjZXB0aW9ucy4KICovCmNsYXNzIEZpbGVTeXN0ZW1FeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb24gewogIGZpbmFsIFVyaSB1cmk7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIEZpbGVTeXN0ZW1FeGNlcHRpb24odGhpcy51cmksIHRoaXMubWVzc2FnZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdGaWxlU3lzdGVtRXhjZXB0aW9uKHVyaT0kdXJpOyBtZXNzYWdlPSRtZXNzYWdlKSc7Cn0KTQBOTjwBHwEVATIEUEpKFwQ7HEUGRwZRDgZMKgIBTwRQDgQ7IkoGS0sPAS4ZAVEUBlFPHSMBURMGLwZRTzohAgEELgQxERgBLwEMSgIBNHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL2ZpbGVfc3lzdGVtLmRhcnQ6c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Jhc2UvcHJvY2Vzc2VkX29wdGlvbnMuZGFydMAAYCAvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmlvJyBzaG93IGV4aXRDb2RlOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEZ1dHVyZTsKCmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJyBzaG93IFVpbnQ4TGlzdDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYmluYXJ5L2FzdF9mcm9tX2JpbmFyeS5kYXJ0JyBzaG93IEJpbmFyeUJ1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2tlcm5lbC5kYXJ0JyBzaG93IENhbm9uaWNhbE5hbWUsIENvbXBvbmVudCwgTG9jYXRpb247CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3RhcmdldC90YXJnZXRzLmRhcnQnCiAgICBzaG93IE5vbmVUYXJnZXQsIFRhcmdldCwgVGFyZ2V0RmxhZ3M7CgppbXBvcnQgJ3BhY2thZ2U6cGFja2FnZV9jb25maWcvcGFja2FnZXMuZGFydCcgc2hvdyBQYWNrYWdlczsKCmltcG9ydCAncGFja2FnZTpwYWNrYWdlX2NvbmZpZy9wYWNrYWdlc19maWxlLmRhcnQnIGFzIHBhY2thZ2VfY29uZmlnOwoKaW1wb3J0ICdwYWNrYWdlOnBhY2thZ2VfY29uZmlnL3NyYy9wYWNrYWdlc19pbXBsLmRhcnQnIHNob3cgTWFwUGFja2FnZXM7CgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvY29tcGlsZXJfb3B0aW9ucy5kYXJ0JwogICAgc2hvdyBDb21waWxlck9wdGlvbnMsIERpYWdub3N0aWNNZXNzYWdlOwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2V4cGVyaW1lbnRhbF9mbGFncy5kYXJ0JwogICAgc2hvdyBkZWZhdWx0RXhwZXJpbWVudGFsRmxhZ3MsIEV4cGVyaW1lbnRhbEZsYWc7CgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCcKICAgIHNob3cgRmlsZVN5c3RlbSwgRmlsZVN5c3RlbUVudGl0eSwgRmlsZVN5c3RlbUV4Y2VwdGlvbjsKCmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS90ZXJtaW5hbF9jb2xvcl9zdXBwb3J0LmRhcnQnCiAgICBzaG93IHByaW50RGlhZ25vc3RpY01lc3NhZ2U7CgppbXBvcnQgJy4uL2Zhc3RhL2NvbW1hbmRfbGluZV9yZXBvcnRpbmcuZGFydCcgYXMgY29tbWFuZF9saW5lX3JlcG9ydGluZzsKCmltcG9ydCAnLi4vZmFzdGEvY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmltcG9ydCAnLi4vZmFzdGEvZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBGb3JtYXR0ZWRNZXNzYWdlLAogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgbWVzc2FnZUNhbnRJbmZlclBhY2thZ2VzRnJvbU1hbnlJbnB1dHMsCiAgICAgICAgbWVzc2FnZUNhbnRJbmZlclBhY2thZ2VzRnJvbVBhY2thZ2VVcmksCiAgICAgICAgbWVzc2FnZUludGVybmFsUHJvYmxlbVByb3ZpZGVkQm90aENvbXBpbGVTZGtBbmRTZGtTdW1tYXJ5LAogICAgICAgIG1lc3NhZ2VNaXNzaW5nSW5wdXQsCiAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgdGVtcGxhdGVDYW5ub3RSZWFkU2RrU3BlY2lmaWNhdGlvbiwKICAgICAgICB0ZW1wbGF0ZUNhbnRSZWFkRmlsZSwKICAgICAgICB0ZW1wbGF0ZUlucHV0RmlsZU5vdEZvdW5kLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5zdXBwb3J0ZWQsCiAgICAgICAgdGVtcGxhdGVQYWNrYWdlc0ZpbGVGb3JtYXQsCiAgICAgICAgdGVtcGxhdGVTZGtSb290Tm90Rm91bmQsCiAgICAgICAgdGVtcGxhdGVTZGtTcGVjaWZpY2F0aW9uTm90Rm91bmQsCiAgICAgICAgdGVtcGxhdGVTZGtTdW1tYXJ5Tm90Rm91bmQ7CgppbXBvcnQgJy4uL2Zhc3RhL21lc3NhZ2VzLmRhcnQnIHNob3cgZ2V0TG9jYXRpb247CgppbXBvcnQgJy4uL2Zhc3RhL3Byb2JsZW1zLmRhcnQnIHNob3cgRGVidWdBYm9ydCwgdW5pbXBsZW1lbnRlZDsKCmltcG9ydCAnLi4vZmFzdGEvc2V2ZXJpdHkuZGFydCcgc2hvdyBTZXZlcml0eTsKCmltcG9ydCAnLi4vZmFzdGEvdGlja2VyLmRhcnQnIHNob3cgVGlja2VyOwoKaW1wb3J0ICcuLi9mYXN0YS91cmlfdHJhbnNsYXRvci5kYXJ0JyBzaG93IFVyaVRyYW5zbGF0b3I7CgppbXBvcnQgJ2xpYnJhcmllc19zcGVjaWZpY2F0aW9uLmRhcnQnCiAgICBzaG93CiAgICAgICAgTGlicmFyaWVzU3BlY2lmaWNhdGlvbiwKICAgICAgICBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uRXhjZXB0aW9uLAogICAgICAgIFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb247CgovLy8gQWxsIG9wdGlvbnMgbmVlZGVkIGZvciB0aGUgZnJvbnQgZW5kIGltcGxlbWVudGF0aW9uLgovLy8KLy8vIFRoaXMgaW5jbHVkZXM6IGFsbCBvZiBbQ29tcGlsZXJPcHRpb25zXSBpbiBhIGZvcm0gdXNlZnVsIHRvIHRoZQovLy8gaW1wbGVtZW50YXRpb24sIGRlZmF1bHQgdmFsdWVzIGZvciBvcHRpb25zIHRoYXQgd2VyZSBub3QgcHJvdmlkZWQsCi8vLyBhbmQgaW5mb3JtYXRpb24gZGVyaXZlZCBmcm9tIGhvdyB0aGUgY29tcGlsZXIgd2FzIGludm9rZWQgKGxpa2UgdGhlCi8vLyBlbnRyeS1wb2ludHMgZ2l2ZW4gdG8gdGhlIGNvbXBpbGVyIGFuZCB3aGV0aGVyIGEgbW9kdWxhciBvciB3aG9sZS1wcm9ncmFtCi8vLyBBUEkgd2FzIHVzZWQpLgovLy8KLy8vIFRoZSBpbnRlbnQgaXMgdGhhdCB0aGUgZnJvbnQgZW5kIHNob3VsZCBpbW1lZGlhdGVseSB3cmFwIGFueSBpbmNvbWluZwovLy8gW0NvbXBpbGVyT3B0aW9uc10gb2JqZWN0IGluIHRoaXMgY2xhc3MgYmVmb3JlIGRvaW5nIGZ1cnRoZXIgcHJvY2Vzc2luZywgYW5kCi8vLyBzaG91bGQgdGhlcmVhZnRlciBhY2Nlc3MgYWxsIG9wdGlvbnMgdmlhIHRoZSB3cmFwcGVyLiAgVGhpcyBlbnN1cmVzIHRoYXQKLy8vIG9wdGlvbnMgYXJlIGludGVycHJldGVkIGluIGEgY29uc2lzdGVudCB3YXkgYW5kIHRoYXQgZGF0YSBkZXJpdmVkIGZyb20KLy8vIG9wdGlvbnMgaXMgbm90IHVubmVjZXNzYXJpbHkgcmVjb21wdXRlZC4KY2xhc3MgUHJvY2Vzc2VkT3B0aW9ucyB7CiAgLy8vIFRoZSByYXcgW0NvbXBpbGVyT3B0aW9uc10gd2hpY2ggdGhpcyBjbGFzcyB3cmFwcy4KICBmaW5hbCBDb21waWxlck9wdGlvbnMgX3JhdzsKCiAgLy8vIFRoZSBwYWNrYWdlIG1hcCBkZXJpdmVkIGZyb20gdGhlIG9wdGlvbnMsIG9yIGBudWxsYCBpZiB0aGUgcGFja2FnZSBtYXAgaGFzCiAgLy8vIG5vdCBiZWVuIGNvbXB1dGVkIHlldC4KICBQYWNrYWdlcyBfcGFja2FnZXM7CgogIC8vLyBUaGUgdXJpIGZvciAucGFja2FnZXMgZGVyaXZlZCBmcm9tIHRoZSBvcHRpb25zLCBvciBgbnVsbGAgaWYgdGhlIHBhY2thZ2UKICAvLy8gbWFwIGhhcyBub3QgYmVlbiBjb21wdXRlZCB5ZXQgb3IgdGhlcmUgaXMgbm8gLnBhY2thZ2VzIGluIGVmZmVjdC4KICBVcmkgX3BhY2thZ2VzVXJpOwogIFVyaSBnZXQgcGFja2FnZXNVcmkgPT4gX3BhY2thZ2VzVXJpOwoKICAvLy8gVGhlIG9iamVjdCB0aGF0IGtub3dzIGhvdyB0byByZXNvbHZlICJwYWNrYWdlOiIgYW5kICJkYXJ0OiIgVVJJcywKICAvLy8gb3IgYG51bGxgIGlmIGl0IGhhcyBub3QgYmVlbiBjb21wdXRlZCB5ZXQuCiAgVXJpVHJhbnNsYXRvciBfdXJpVHJhbnNsYXRvcjsKCiAgLy8vIFRoZSBTREsgc3VtbWFyeSwgb3IgYG51bGxgIGlmIGl0IGhhcyBub3QgYmVlbiByZWFkIHlldC4KICAvLy8KICAvLy8gQSBzdW1tYXJ5LCBhbHNvIHJlZmVycmVkIHRvIGFzICJvdXRsaW5lIiBpbnRlcm5hbGx5LCBpcyBhIFtDb21wb25lbnRdCiAgLy8vIHdoZXJlIGFsbCBtZXRob2QgYm9kaWVzIGFyZSBsZWZ0IG91dC4gSW4gZXNzZW5jZSwgaXQgY29udGFpbnMganVzdCBBUEkKICAvLy8gc2lnbmF0dXJlcyBhbmQgY29uc3RhbnRzLiBUaGUgc3VtbWFyeSBzaG91bGQgaW5jbHVkZSBpbmZlcnJlZCB0b3AtbGV2ZWwKICAvLy8gdHlwZXMgdW5sZXNzIGxlZ2FjeSBtb2RlIGlzIGVuYWJsZWQuCiAgQ29tcG9uZW50IF9zZGtTdW1tYXJ5Q29tcG9uZW50OwoKICAvLy8gVGhlIHN1bW1hcnkgZm9yIGVhY2ggdXJpIGluIGBvcHRpb25zLmlucHV0U3VtbWFyaWVzYC4KICAvLy8KICAvLy8gQSBzdW1tYXJ5LCBhbHNvIHJlZmVycmVkIHRvIGFzICJvdXRsaW5lIiBpbnRlcm5hbGx5LCBpcyBhIFtDb21wb25lbnRdCiAgLy8vIHdoZXJlIGFsbCBtZXRob2QgYm9kaWVzIGFyZSBsZWZ0IG91dC4gSW4gZXNzZW5jZSwgaXQgY29udGFpbnMganVzdCBBUEkKICAvLy8gc2lnbmF0dXJlcyBhbmQgY29uc3RhbnRzLiBUaGUgc3VtbWFyaWVzIHNob3VsZCBpbmNsdWRlIGluZmVycmVkIHRvcC1sZXZlbAogIC8vLyB0eXBlcyB1bmxlc3MgbGVnYWN5IG1vZGUgaXMgZW5hYmxlZC4KICBMaXN0PENvbXBvbmVudD4gX2lucHV0U3VtbWFyaWVzQ29tcG9uZW50czsKCiAgLy8vIE90aGVyIGNvbXBvbmVudHMgdGhhdCBhcmUgbWVhbnQgdG8gYmUgbGlua2VkIGFuZCBjb21waWxlZCB3aXRoIHRoZSBpbnB1dAogIC8vLyBzb3VyY2VzLgogIExpc3Q8Q29tcG9uZW50PiBfbGlua2VkRGVwZW5kZW5jaWVzOwoKICAvLy8gVGhlIGxvY2F0aW9uIG9mIHRoZSBTREssIG9yIGBudWxsYCBpZiB0aGUgbG9jYXRpb24gaGFzbid0IGJlZW4gZGV0ZXJtaW5lZAogIC8vLyB5ZXQuCiAgVXJpIF9zZGtSb290OwogIFVyaSBnZXQgc2RrUm9vdCB7CiAgICBfZW5zdXJlU2RrRGVmYXVsdHMoKTsKICAgIHJldHVybiBfc2RrUm9vdDsKICB9CgogIFVyaSBfc2RrU3VtbWFyeTsKICBVcmkgZ2V0IHNka1N1bW1hcnkgewogICAgX2Vuc3VyZVNka0RlZmF1bHRzKCk7CiAgICByZXR1cm4gX3Nka1N1bW1hcnk7CiAgfQoKICBMaXN0PGludD4gX3Nka1N1bW1hcnlCeXRlczsKCiAgLy8vIEdldCB0aGUgYnl0ZXMgb2YgdGhlIFNESyBvdXRsaW5lLCBpZiBhbnkuCiAgRnV0dXJlPExpc3Q8aW50Pj4gbG9hZFNka1N1bW1hcnlCeXRlcygpIGFzeW5jIHsKICAgIGlmIChfc2RrU3VtbWFyeUJ5dGVzID09IG51bGwpIHsKICAgICAgaWYgKHNka1N1bW1hcnkgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBlbnRyeSA9IGZpbGVTeXN0ZW0uZW50aXR5Rm9yVXJpKHNka1N1bW1hcnkpOwogICAgICBfc2RrU3VtbWFyeUJ5dGVzID0gYXdhaXQgX3JlYWRBc0J5dGVzKGVudHJ5KTsKICAgIH0KICAgIHJldHVybiBfc2RrU3VtbWFyeUJ5dGVzOwogIH0KCiAgVXJpIF9saWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpOwogIFVyaSBnZXQgbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSB7CiAgICBfZW5zdXJlU2RrRGVmYXVsdHMoKTsKICAgIHJldHVybiBfbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaTsKICB9CgogIFRpY2tlciB0aWNrZXI7CgogIFVyaSBnZXQgcGFja2FnZXNVcmlSYXcgPT4gX3Jhdy5wYWNrYWdlc0ZpbGVVcmk7CgogIGJvb2wgZ2V0IHZlcmJvc2UgPT4gX3Jhdy52ZXJib3NlOwoKICBib29sIGdldCB2ZXJpZnkgPT4gX3Jhdy52ZXJpZnk7CgogIGJvb2wgZ2V0IGRlYnVnRHVtcCA9PiBfcmF3LmRlYnVnRHVtcDsKCiAgYm9vbCBnZXQgb21pdFBsYXRmb3JtID0+IF9yYXcub21pdFBsYXRmb3JtOwoKICBib29sIGdldCBzZXRFeGl0Q29kZU9uUHJvYmxlbSA9PiBfcmF3LnNldEV4aXRDb2RlT25Qcm9ibGVtOwoKICBib29sIGdldCBlbWJlZFNvdXJjZVRleHQgPT4gX3Jhdy5lbWJlZFNvdXJjZVRleHQ7CgogIGJvb2wgZ2V0IHRocm93T25FcnJvcnNGb3JEZWJ1Z2dpbmcgPT4gX3Jhdy50aHJvd09uRXJyb3JzRm9yRGVidWdnaW5nOwoKICBib29sIGdldCB0aHJvd09uV2FybmluZ3NGb3JEZWJ1Z2dpbmcgPT4gX3Jhdy50aHJvd09uV2FybmluZ3NGb3JEZWJ1Z2dpbmc7CgogIC8vLyBUaGUgZW50cnktcG9pbnRzIHByb3ZpZGVkIHRvIHRoZSBjb21waWxlci4KICBmaW5hbCBMaXN0PFVyaT4gaW5wdXRzOwoKICAvLy8gVGhlIFVyaSB3aGVyZSBvdXRwdXQgaXMgZ2VuZXJhdGVkLCBtYXkgYmUgbnVsbC4KICBmaW5hbCBVcmkgb3V0cHV0OwoKICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50RGVmaW5lczsKCiAgYm9vbCBnZXQgZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQgPT4gX3Jhdy5lcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudDsKCiAgLy8vIEluaXRpYWxpemVzIGEgW1Byb2Nlc3NlZE9wdGlvbnNdIG9iamVjdCB3cmFwcGluZyB0aGUgZ2l2ZW4gW3Jhd09wdGlvbnNdLgogIFByb2Nlc3NlZE9wdGlvbnMoe0NvbXBpbGVyT3B0aW9ucyBvcHRpb25zLCBMaXN0PFVyaT4gaW5wdXRzLCB0aGlzLm91dHB1dH0pCiAgICAgIDogdGhpcy5fcmF3ID0gb3B0aW9ucyA/PyBuZXcgQ29tcGlsZXJPcHRpb25zKCksCiAgICAgICAgdGhpcy5pbnB1dHMgPSBpbnB1dHMgPz8gPFVyaT5bXSwKICAgICAgICAvLyBUT0RPKGFza2VzYyk6IENvcHkgdGhlIG1hcCB3aGVuIGtlcm5lbF9zZXJ2aWNlIHN1cHBvcnRzIHRoYXQuCiAgICAgICAgdGhpcy5lbnZpcm9ubWVudERlZmluZXMgPSBvcHRpb25zPy5lbnZpcm9ubWVudERlZmluZXMsCiAgICAgICAgLy8gVE9ETyhzaWdtdW5kLCBhaGUpOiBjcmVhdGUgdGlja2VyIGV2ZW4gZWFybGllciBvciBwYXNzIGluIGEgc3RvcHdhdGNoCiAgICAgICAgLy8gY29sbGVjdGluZyB0aW1lIHNpbmNlIHRoZSBzdGFydCBvZiB0aGUgVk0uCiAgICAgICAgdGhpcy50aWNrZXIgPSBuZXcgVGlja2VyKGlzVmVyYm9zZTogb3B0aW9ucz8udmVyYm9zZSA/PyBmYWxzZSk7CgogIEZvcm1hdHRlZE1lc3NhZ2UgZm9ybWF0KAogICAgICBMb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCBTZXZlcml0eSBzZXZlcml0eSwgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCkgewogICAgaW50IG9mZnNldCA9IG1lc3NhZ2UuY2hhck9mZnNldDsKICAgIFVyaSB1cmkgPSBtZXNzYWdlLnVyaTsKICAgIExvY2F0aW9uIGxvY2F0aW9uID0gb2Zmc2V0ID09IC0xID8gbnVsbCA6IGdldExvY2F0aW9uKHVyaSwgb2Zmc2V0KTsKICAgIFN0cmluZyBmb3JtYXR0ZWQgPQogICAgICAgIGNvbW1hbmRfbGluZV9yZXBvcnRpbmcuZm9ybWF0KG1lc3NhZ2UsIHNldmVyaXR5LCBsb2NhdGlvbjogbG9jYXRpb24pOwogICAgTGlzdDxGb3JtYXR0ZWRNZXNzYWdlPiBmb3JtYXR0ZWRDb250ZXh0OwogICAgaWYgKGNvbnRleHQgIT0gbnVsbCAmJiBjb250ZXh0LmlzTm90RW1wdHkpIHsKICAgICAgZm9ybWF0dGVkQ29udGV4dCA9IG5ldyBMaXN0PEZvcm1hdHRlZE1lc3NhZ2U+KGNvbnRleHQubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb250ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgZm9ybWF0dGVkQ29udGV4dFtpXSA9IGZvcm1hdChjb250ZXh0W2ldLCBTZXZlcml0eS5jb250ZXh0LCBudWxsKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG1lc3NhZ2Uud2l0aEZvcm1hdHRpbmcoZm9ybWF0dGVkLCBsb2NhdGlvbj8ubGluZSA/PyAtMSwKICAgICAgICBsb2NhdGlvbj8uY29sdW1uID8/IC0xLCBzZXZlcml0eSwgZm9ybWF0dGVkQ29udGV4dCk7CiAgfQoKICB2b2lkIHJlcG9ydChMb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCBTZXZlcml0eSBzZXZlcml0eSwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICBpZiAoY29tbWFuZF9saW5lX3JlcG9ydGluZy5pc0hpZGRlbihzZXZlcml0eSkpIHJldHVybjsKICAgIGlmIChjb21tYW5kX2xpbmVfcmVwb3J0aW5nLmlzQ29tcGlsZVRpbWVFcnJvcihzZXZlcml0eSkpIHsKICAgICAgQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQubG9nRXJyb3IobWVzc2FnZSwgc2V2ZXJpdHkpOwogICAgfQogICAgaWYgKENvbXBpbGVyQ29udGV4dC5jdXJyZW50Lm9wdGlvbnMuc2V0RXhpdENvZGVPblByb2JsZW0pIHsKICAgICAgZXhpdENvZGUgPSAxOwogICAgfQogICAgcmVwb3J0RGlhZ25vc3RpY01lc3NhZ2UoZm9ybWF0KG1lc3NhZ2UsIHNldmVyaXR5LCBjb250ZXh0KSk7CiAgICBpZiAoY29tbWFuZF9saW5lX3JlcG9ydGluZy5zaG91bGRUaHJvd09uKHNldmVyaXR5KSkgewogICAgICB0aHJvdyBuZXcgRGVidWdBYm9ydCgKICAgICAgICAgIG1lc3NhZ2UudXJpLCBtZXNzYWdlLmNoYXJPZmZzZXQsIHNldmVyaXR5LCBTdGFja1RyYWNlLmN1cnJlbnQpOwogICAgfQogIH0KCiAgdm9pZCByZXBvcnREaWFnbm9zdGljTWVzc2FnZShEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlKSB7CiAgICAoX3Jhdy5vbkRpYWdub3N0aWMgPz8gX2RlZmF1bHREaWFnbm9zdGljTWVzc2FnZUhhbmRsZXIpKG1lc3NhZ2UpOwogIH0KCiAgdm9pZCBfZGVmYXVsdERpYWdub3N0aWNNZXNzYWdlSGFuZGxlcihEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlKSB7CiAgICBwcmludERpYWdub3N0aWNNZXNzYWdlKG1lc3NhZ2UsIHByaW50KTsKICB9CgogIC8vIFRPRE8oYXNrZXNjKTogUmVtb3ZlIHRoaXMgYW5kIGRpcmVjdCBjYWxsZXJzIGRpcmVjdGx5IHRvIHJlcG9ydC4KICB2b2lkIHJlcG9ydFdpdGhvdXRMb2NhdGlvbihNZXNzYWdlIG1lc3NhZ2UsIFNldmVyaXR5IHNldmVyaXR5KSB7CiAgICByZXBvcnQobWVzc2FnZS53aXRob3V0TG9jYXRpb24oKSwgc2V2ZXJpdHkpOwogIH0KCiAgLy8vIFJ1bnMgdmFyaW91cyB2YWxpZGF0aW9ucyBjaGVja3Mgb24gdGhlIGlucHV0IG9wdGlvbnMuIEZvciBpbnN0YW5jZSwKICAvLy8gaWYgYW4gb3B0aW9uIGlzIGEgcGF0aCB0byBhIGZpbGUsIGl0IGNoZWNrcyB0aGF0IHRoZSBmaWxlIGV4aXN0cy4KICBGdXR1cmU8Ym9vbD4gdmFsaWRhdGVPcHRpb25zKHtib29sIGVycm9yT25NaXNzaW5nSW5wdXQ6IHRydWV9KSBhc3luYyB7CiAgICBpZiAodmVyYm9zZSkgcHJpbnQoZGVidWdTdHJpbmcoKSk7CgogICAgaWYgKGVycm9yT25NaXNzaW5nSW5wdXQgJiYgaW5wdXRzLmlzRW1wdHkpIHsKICAgICAgcmVwb3J0V2l0aG91dExvY2F0aW9uKG1lc3NhZ2VNaXNzaW5nSW5wdXQsIFNldmVyaXR5LmVycm9yKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChfcmF3LnNka1Jvb3QgIT0gbnVsbCAmJgogICAgICAgICFhd2FpdCBmaWxlU3lzdGVtLmVudGl0eUZvclVyaShzZGtSb290KS5leGlzdHMoKSkgewogICAgICByZXBvcnRXaXRob3V0TG9jYXRpb24oCiAgICAgICAgICB0ZW1wbGF0ZVNka1Jvb3ROb3RGb3VuZC53aXRoQXJndW1lbnRzKHNka1Jvb3QpLCBTZXZlcml0eS5lcnJvcik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB2YXIgc3VtbWFyeSA9IHNka1N1bW1hcnk7CiAgICBpZiAoc3VtbWFyeSAhPSBudWxsICYmICFhd2FpdCBmaWxlU3lzdGVtLmVudGl0eUZvclVyaShzdW1tYXJ5KS5leGlzdHMoKSkgewogICAgICByZXBvcnRXaXRob3V0TG9jYXRpb24oCiAgICAgICAgICB0ZW1wbGF0ZVNka1N1bW1hcnlOb3RGb3VuZC53aXRoQXJndW1lbnRzKHN1bW1hcnkpLCBTZXZlcml0eS5lcnJvcik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoY29tcGlsZVNkayAmJiBzdW1tYXJ5ICE9IG51bGwpIHsKICAgICAgcmVwb3J0V2l0aG91dExvY2F0aW9uKAogICAgICAgICAgbWVzc2FnZUludGVybmFsUHJvYmxlbVByb3ZpZGVkQm90aENvbXBpbGVTZGtBbmRTZGtTdW1tYXJ5LAogICAgICAgICAgU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGZvciAoVXJpIHNvdXJjZSBpbiBfcmF3LmxpbmtlZERlcGVuZGVuY2llcykgewogICAgICAvLyBUT0RPKGFoZSk6IFJlbW92ZSB0aGlzIGNoZWNrLCB0aGUgY29tcGlsZXIgaXRzZWxmIHNob3VsZCBoYW5kbGUgYW5kCiAgICAgIC8vIHJlY292ZXIgZnJvbSB0aGlzLgogICAgICBpZiAoIWF3YWl0IGZpbGVTeXN0ZW0uZW50aXR5Rm9yVXJpKHNvdXJjZSkuZXhpc3RzKCkpIHsKICAgICAgICByZXBvcnRXaXRob3V0TG9jYXRpb24oCiAgICAgICAgICAgIHRlbXBsYXRlSW5wdXRGaWxlTm90Rm91bmQud2l0aEFyZ3VtZW50cyhzb3VyY2UpLCBTZXZlcml0eS5lcnJvcik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vLyBEZXRlcm1pbmUgd2hldGhlciB0byBnZW5lcmF0ZSBjb2RlIGZvciB0aGUgU0RLIHdoZW4gY29tcGlsaW5nIGEKICAvLy8gd2hvbGUtcHJvZ3JhbS4KICBib29sIGdldCBjb21waWxlU2RrID0+IF9yYXcuY29tcGlsZVNkazsKCiAgRmlsZVN5c3RlbSBfZmlsZVN5c3RlbTsKCiAgLy8vIEdldCB0aGUgW0ZpbGVTeXN0ZW1dIHdoaWNoIHNob3VsZCBiZSB1c2VkIGJ5IHRoZSBmcm9udCBlbmQgdG8gYWNjZXNzCiAgLy8vIGZpbGVzLgogIEZpbGVTeXN0ZW0gZ2V0IGZpbGVTeXN0ZW0gPT4gX2ZpbGVTeXN0ZW0gPz89IF9jcmVhdGVGaWxlU3lzdGVtKCk7CgogIC8vLyBDbGVhciB0aGUgZmlsZSBzeXN0ZW0gc28gYW55IENvbXBpbGVyT3B0aW9ucyBmaWxlU3lzdGVtIGNoYW5nZSB3aWxsIGhhdmUKICAvLy8gZWZmZWN0LgogIHZvaWQgY2xlYXJGaWxlU3lzdGVtQ2FjaGUoKSA9PiBfZmlsZVN5c3RlbSA9IG51bGw7CgogIGJvb2wgZ2V0IGxlZ2FjeU1vZGUgPT4gX3Jhdy5sZWdhY3lNb2RlOwoKICAvLy8gV2hldGhlciB0byBnZW5lcmF0ZSBieXRlY29kZS4KICBib29sIGdldCBieXRlY29kZSA9PiBfcmF3LmJ5dGVjb2RlOwoKICAvLy8gV2hldGhlciB0byB3cml0ZSBhIGZpbGUgKGUuZy4gYSBkaWxsIGZpbGUpIHdoZW4gcmVwb3J0aW5nIGEgY3Jhc2guCiAgYm9vbCBnZXQgd3JpdGVGaWxlT25DcmFzaFJlcG9ydCA9PiBfcmF3LndyaXRlRmlsZU9uQ3Jhc2hSZXBvcnQ7CgogIFRhcmdldCBfdGFyZ2V0OwogIFRhcmdldCBnZXQgdGFyZ2V0ID0+IF90YXJnZXQgPz89CiAgICAgIF9yYXcudGFyZ2V0ID8/IG5ldyBOb25lVGFyZ2V0KG5ldyBUYXJnZXRGbGFncyhsZWdhY3lNb2RlOiBsZWdhY3lNb2RlKSk7CgogIGJvb2wgaXNFeHBlcmltZW50RW5hYmxlZChFeHBlcmltZW50YWxGbGFnIGZsYWcpIHsKICAgIGFzc2VydChkZWZhdWx0RXhwZXJpbWVudGFsRmxhZ3MuY29udGFpbnNLZXkoZmxhZyksCiAgICAgICAgIk5vIGRlZmF1bHQgdmFsdWUgZm9yICRmbGFnLiIpOwogICAgLy8gVE9ETyhhc2tlc2MpOiBEZXRlcm1pbmUgZGVmYXVsdCBmbGFnIHZhbHVlIGZyb20gc3BlY2lmaWNhdGlvbiBmaWxlLgogICAgcmV0dXJuIF9yYXcuZXhwZXJpbWVudGFsRmxhZ3NbZmxhZ10gPz8gZGVmYXVsdEV4cGVyaW1lbnRhbEZsYWdzW2ZsYWddOwogIH0KCiAgLy8vIEdldCBhbiBvdXRsaW5lIGNvbXBvbmVudCB0aGF0IHN1bW1hcml6ZXMgdGhlIFNESywgaWYgYW55LgogIC8vIFRPRE8oc2lnbXVuZCk6IG1vdmUsIHRoaXMgZG9lc24ndCBmZWVsIGxpa2UgYW4gIm9wdGlvbiIuCiAgRnV0dXJlPENvbXBvbmVudD4gbG9hZFNka1N1bW1hcnkoQ2Fub25pY2FsTmFtZSBuYW1lUm9vdCkgYXN5bmMgewogICAgaWYgKF9zZGtTdW1tYXJ5Q29tcG9uZW50ID09IG51bGwpIHsKICAgICAgaWYgKHNka1N1bW1hcnkgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIHZhciBieXRlcyA9IGF3YWl0IGxvYWRTZGtTdW1tYXJ5Qnl0ZXMoKTsKICAgICAgaWYgKGJ5dGVzICE9IG51bGwgJiYgYnl0ZXMuaXNOb3RFbXB0eSkgewogICAgICAgIF9zZGtTdW1tYXJ5Q29tcG9uZW50ID0gbG9hZENvbXBvbmVudChieXRlcywgbmFtZVJvb3QpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX3Nka1N1bW1hcnlDb21wb25lbnQ7CiAgfQoKICB2b2lkIHNldCBzZGtTdW1tYXJ5Q29tcG9uZW50KENvbXBvbmVudCBwbGF0Zm9ybSkgewogICAgaWYgKF9zZGtTdW1tYXJ5Q29tcG9uZW50ICE9IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoInNka1N1bW1hcnkgYWxyZWFkeSBsb2FkZWQuIik7CiAgICB9CiAgICBfc2RrU3VtbWFyeUNvbXBvbmVudCA9IHBsYXRmb3JtOwogIH0KCiAgLy8vIEdldCB0aGUgc3VtbWFyeSBwcm9ncmFtcyBmb3IgZWFjaCBvZiB0aGUgdW5kZXJseWluZyBgaW5wdXRTdW1tYXJpZXNgCiAgLy8vIHByb3ZpZGVkIHZpYSBbQ29tcGlsZXJPcHRpb25zXS4KICAvLyBUT0RPKHNpZ211bmQpOiBtb3ZlLCB0aGlzIGRvZXNuJ3QgZmVlbCBsaWtlIGFuICJvcHRpb24iLgogIEZ1dHVyZTxMaXN0PENvbXBvbmVudD4+IGxvYWRJbnB1dFN1bW1hcmllcyhDYW5vbmljYWxOYW1lIG5hbWVSb290KSBhc3luYyB7CiAgICBpZiAoX2lucHV0U3VtbWFyaWVzQ29tcG9uZW50cyA9PSBudWxsKSB7CiAgICAgIHZhciB1cmlzID0gX3Jhdy5pbnB1dFN1bW1hcmllczsKICAgICAgaWYgKHVyaXMgPT0gbnVsbCB8fCB1cmlzLmlzRW1wdHkpIHJldHVybiBjb25zdCA8Q29tcG9uZW50PltdOwogICAgICAvLyBUT0RPKHNpZ211bmQpOiB0aHJvdHRsZSAjIG9mIGNvbmN1cnJlbnQgb3ByZWF0aW9ucy4KICAgICAgdmFyIGFsbEJ5dGVzID0gYXdhaXQgRnV0dXJlLndhaXQoCiAgICAgICAgICB1cmlzLm1hcCgodXJpKSA9PiBfcmVhZEFzQnl0ZXMoZmlsZVN5c3RlbS5lbnRpdHlGb3JVcmkodXJpKSkpKTsKICAgICAgX2lucHV0U3VtbWFyaWVzQ29tcG9uZW50cyA9CiAgICAgICAgICBhbGxCeXRlcy5tYXAoKGJ5dGVzKSA9PiBsb2FkQ29tcG9uZW50KGJ5dGVzLCBuYW1lUm9vdCkpLnRvTGlzdCgpOwogICAgfQogICAgcmV0dXJuIF9pbnB1dFN1bW1hcmllc0NvbXBvbmVudHM7CiAgfQoKICB2b2lkIHNldCBpbnB1dFN1bW1hcmllc0NvbXBvbmVudHMoTGlzdDxDb21wb25lbnQ+IGNvbXBvbmVudHMpIHsKICAgIGlmIChfaW5wdXRTdW1tYXJpZXNDb21wb25lbnRzICE9IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoImlucHV0U3VtbWFyaWVzQ29tcG9uZW50cyBhbHJlYWR5IGxvYWRlZC4iKTsKICAgIH0KICAgIF9pbnB1dFN1bW1hcmllc0NvbXBvbmVudHMgPSBjb21wb25lbnRzOwogIH0KCiAgLy8vIExvYWQgZWFjaCBvZiB0aGUgW0NvbXBpbGVyT3B0aW9ucy5saW5rZWREZXBlbmRlbmNpZXNdIGNvbXBvbmVudHMuCiAgLy8gVE9ETyhzaWdtdW5kKTogbW92ZSwgdGhpcyBkb2Vzbid0IGZlZWwgbGlrZSBhbiAib3B0aW9uIi4KICBGdXR1cmU8TGlzdDxDb21wb25lbnQ+PiBsb2FkTGlua0RlcGVuZGVuY2llcyhDYW5vbmljYWxOYW1lIG5hbWVSb290KSBhc3luYyB7CiAgICBpZiAoX2xpbmtlZERlcGVuZGVuY2llcyA9PSBudWxsKSB7CiAgICAgIHZhciB1cmlzID0gX3Jhdy5saW5rZWREZXBlbmRlbmNpZXM7CiAgICAgIGlmICh1cmlzID09IG51bGwgfHwgdXJpcy5pc0VtcHR5KSByZXR1cm4gY29uc3QgPENvbXBvbmVudD5bXTsKICAgICAgLy8gVE9ETyhzaWdtdW5kKTogdGhyb3R0bGUgIyBvZiBjb25jdXJyZW50IG9wcmVhdGlvbnMuCiAgICAgIHZhciBhbGxCeXRlcyA9IGF3YWl0IEZ1dHVyZS53YWl0KAogICAgICAgICAgdXJpcy5tYXAoKHVyaSkgPT4gX3JlYWRBc0J5dGVzKGZpbGVTeXN0ZW0uZW50aXR5Rm9yVXJpKHVyaSkpKSk7CiAgICAgIF9saW5rZWREZXBlbmRlbmNpZXMgPQogICAgICAgICAgYWxsQnl0ZXMubWFwKChieXRlcykgPT4gbG9hZENvbXBvbmVudChieXRlcywgbmFtZVJvb3QpKS50b0xpc3QoKTsKICAgIH0KICAgIHJldHVybiBfbGlua2VkRGVwZW5kZW5jaWVzOwogIH0KCiAgLy8vIEhlbHBlciB0byBsb2FkIGEgLmRpbGwgZmlsZSBmcm9tIFt1cmldIHVzaW5nIHRoZSBleGlzdGluZyBbbmFtZVJvb3RdLgogIENvbXBvbmVudCBsb2FkQ29tcG9uZW50KExpc3Q8aW50PiBieXRlcywgQ2Fub25pY2FsTmFtZSBuYW1lUm9vdCwKICAgICAge2Jvb2wgYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2Rlc30pIHsKICAgIENvbXBvbmVudCBjb21wb25lbnQgPQogICAgICAgIHRhcmdldC5jb25maWd1cmVDb21wb25lbnQobmV3IENvbXBvbmVudChuYW1lUm9vdDogbmFtZVJvb3QpKTsKICAgIC8vIFRPRE8oYWhlKTogUGFzcyBmaWxlIG5hbWUgdG8gQmluYXJ5QnVpbGRlci4KICAgIC8vIFRPRE8oYWhlKTogQ29udHJvbCBsYXp5IGxvYWRpbmcgdmlhIGFuIG9wdGlvbi4KICAgIG5ldyBCaW5hcnlCdWlsZGVyKGJ5dGVzLAogICAgICAgICAgICBmaWxlbmFtZTogbnVsbCwKICAgICAgICAgICAgZGlzYWJsZUxhenlSZWFkaW5nOiBmYWxzZSwKICAgICAgICAgICAgYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlczogYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlcykKICAgICAgICAucmVhZENvbXBvbmVudChjb21wb25lbnQpOwogICAgcmV0dXJuIGNvbXBvbmVudDsKICB9CgogIC8vLyBHZXQgdGhlIFtVcmlUcmFuc2xhdG9yXSB3aGljaCByZXNvbHZlcyAicGFja2FnZToiIGFuZCAiZGFydDoiIFVSSXMuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIG1ldGhvZCBzaW5jZSBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIG1heSBiZQogIC8vLyByZXF1aXJlZCB0byBsb2NhdGUvcmVhZCB0aGUgcGFja2FnZXMgZmlsZSBhcyB3ZWxsIGFzIFNESyBtZXRhZGF0YS4KICBGdXR1cmU8VXJpVHJhbnNsYXRvcj4gZ2V0VXJpVHJhbnNsYXRvcih7Ym9vbCBieXBhc3NDYWNoZTogZmFsc2V9KSBhc3luYyB7CiAgICBpZiAoYnlwYXNzQ2FjaGUpIHsKICAgICAgX3VyaVRyYW5zbGF0b3IgPSBudWxsOwogICAgICBfcGFja2FnZXMgPSBudWxsOwogICAgfQogICAgaWYgKF91cmlUcmFuc2xhdG9yID09IG51bGwpIHsKICAgICAgdGlja2VyLmxvZ01zKCJTdGFydGVkIGJ1aWxkaW5nIFVyaVRyYW5zbGF0b3IiKTsKICAgICAgdmFyIGxpYnJhcmllcyA9IGF3YWl0IF9jb21wdXRlTGlicmFyeVNwZWNpZmljYXRpb24oKTsKICAgICAgdGlja2VyLmxvZ01zKCJSZWFkIGxpYnJhcmllcyBmaWxlIik7CiAgICAgIFBhY2thZ2VzIHBhY2thZ2VzID0gYXdhaXQgX2dldFBhY2thZ2VzKCk7CiAgICAgIHRpY2tlci5sb2dNcygiUmVhZCBwYWNrYWdlcyBmaWxlIik7CiAgICAgIF91cmlUcmFuc2xhdG9yID0gbmV3IFVyaVRyYW5zbGF0b3IobGlicmFyaWVzLCBwYWNrYWdlcyk7CiAgICB9CiAgICByZXR1cm4gX3VyaVRyYW5zbGF0b3I7CiAgfQoKICBGdXR1cmU8VGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbj4gX2NvbXB1dGVMaWJyYXJ5U3BlY2lmaWNhdGlvbigpIGFzeW5jIHsKICAgIHZhciBuYW1lID0gdGFyZ2V0Lm5hbWU7CiAgICAvLyBUT0RPKHNpZ211bmQpOiBFZWshIFdlIHNob3VsZCBnZXQgdG8gdGhlIHBvaW50IHdoZXJlIHRoZXJlIGlzIG5vCiAgICAvLyBmYXN0YS1zcGVjaWZpYyB0YXJnZXRzIGFuZCB0aGUgdGFyZ2V0IG5hbWVzIGFyZSBtZWFuaW5nZnVsLgogICAgaWYgKG5hbWUuZW5kc1dpdGgoJ19mYXN0YScpKSBuYW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sZW5ndGggLSA2KTsKCiAgICBpZiAobGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSA9PSBudWxsIHx8CiAgICAgICAgIWF3YWl0IGZpbGVTeXN0ZW0uZW50aXR5Rm9yVXJpKGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmkpLmV4aXN0cygpKSB7CiAgICAgIGlmIChjb21waWxlU2RrKSB7CiAgICAgICAgcmVwb3J0V2l0aG91dExvY2F0aW9uKAogICAgICAgICAgICB0ZW1wbGF0ZVNka1NwZWNpZmljYXRpb25Ob3RGb3VuZAogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSksCiAgICAgICAgICAgIFNldmVyaXR5LmVycm9yKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb24obmFtZSk7CiAgICB9CgogICAgdmFyIGpzb24gPQogICAgICAgIGF3YWl0IGZpbGVTeXN0ZW0uZW50aXR5Rm9yVXJpKGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmkpLnJlYWRBc1N0cmluZygpOwogICAgdHJ5IHsKICAgICAgdmFyIHNwZWMgPQogICAgICAgICAgYXdhaXQgTGlicmFyaWVzU3BlY2lmaWNhdGlvbi5wYXJzZShsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpLCBqc29uKTsKICAgICAgcmV0dXJuIHNwZWMuc3BlY2lmaWNhdGlvbkZvcihuYW1lKTsKICAgIH0gb24gTGlicmFyaWVzU3BlY2lmaWNhdGlvbkV4Y2VwdGlvbiBjYXRjaCAoZSkgewogICAgICByZXBvcnRXaXRob3V0TG9jYXRpb24oCiAgICAgICAgICB0ZW1wbGF0ZUNhbm5vdFJlYWRTZGtTcGVjaWZpY2F0aW9uLndpdGhBcmd1bWVudHMoJyR7ZS5lcnJvcn0nKSwKICAgICAgICAgIFNldmVyaXR5LmVycm9yKTsKICAgICAgcmV0dXJuIG5ldyBUYXJnZXRMaWJyYXJpZXNTcGVjaWZpY2F0aW9uKG5hbWUpOwogICAgfQogIH0KCiAgLy8vIEdldCB0aGUgcGFja2FnZSBtYXAgd2hpY2ggbWFwcyBwYWNrYWdlIG5hbWVzIHRvIFVSSXMuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYW4gYXN5bmNocm9ub3VzIGdldHRlciBzaW5jZSBmaWxlIHN5c3RlbSBvcGVyYXRpb25zIG1heSBiZQogIC8vLyByZXF1aXJlZCB0byBsb2NhdGUvcmVhZCB0aGUgcGFja2FnZXMgZmlsZS4KICBGdXR1cmU8UGFja2FnZXM+IF9nZXRQYWNrYWdlcygpIGFzeW5jIHsKICAgIGlmIChfcGFja2FnZXMgIT0gbnVsbCkgcmV0dXJuIF9wYWNrYWdlczsKICAgIF9wYWNrYWdlc1VyaSA9IG51bGw7CiAgICBpZiAoX3Jhdy5wYWNrYWdlc0ZpbGVVcmkgIT0gbnVsbCkgewogICAgICByZXR1cm4gX3BhY2thZ2VzID0gYXdhaXQgY3JlYXRlUGFja2FnZXNGcm9tRmlsZShfcmF3LnBhY2thZ2VzRmlsZVVyaSk7CiAgICB9CgogICAgaWYgKGlucHV0cy5sZW5ndGggPiAxKSB7CiAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IGNvbnNpZGVyIG5vdCByZXBvcnRpbmcgYW4gZXJyb3IgaWYgd2Ugd291bGQgaW5mZXIKICAgICAgLy8gdGhlIHNhbWUgLnBhY2thZ2VzIGZpbGUgZnJvbSBhbGwgb2YgdGhlIGlucHV0cy4KICAgICAgcmVwb3J0V2l0aG91dExvY2F0aW9uKAogICAgICAgICAgbWVzc2FnZUNhbnRJbmZlclBhY2thZ2VzRnJvbU1hbnlJbnB1dHMsIFNldmVyaXR5LmVycm9yKTsKICAgICAgcmV0dXJuIF9wYWNrYWdlcyA9IFBhY2thZ2VzLm5vUGFja2FnZXM7CiAgICB9CgogICAgdmFyIGlucHV0ID0gaW5wdXRzLmZpcnN0OwoKICAgIC8vIFdoZW4gY29tcGlsaW5nIHRoZSBTREsgdGhlIGlucHV0IGZpbGVzIGFyZSBub3JtYWx5IGBkYXJ0OmAgVVJJcy4KICAgIGlmIChpbnB1dC5zY2hlbWUgPT0gJ2RhcnQnKSByZXR1cm4gX3BhY2thZ2VzID0gUGFja2FnZXMubm9QYWNrYWdlczsKCiAgICBpZiAoaW5wdXQuc2NoZW1lID09ICdwYWNrYWdlcycpIHsKICAgICAgcmVwb3J0KAogICAgICAgICAgbWVzc2FnZUNhbnRJbmZlclBhY2thZ2VzRnJvbVBhY2thZ2VVcmkud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgIGlucHV0LCAtMSwgbm9MZW5ndGgpLAogICAgICAgICAgU2V2ZXJpdHkuZXJyb3IpOwogICAgICByZXR1cm4gX3BhY2thZ2VzID0gUGFja2FnZXMubm9QYWNrYWdlczsKICAgIH0KCiAgICByZXR1cm4gX3BhY2thZ2VzID0gYXdhaXQgX2ZpbmRQYWNrYWdlcyhpbnB1dHMuZmlyc3QpOwogIH0KCiAgLy8vIENyZWF0ZSBhIFtQYWNrYWdlc10gZ2l2ZW4gdGhlIFVyaSB0byBhIGAucGFja2FnZXNgIGZpbGUuCiAgRnV0dXJlPFBhY2thZ2VzPiBjcmVhdGVQYWNrYWdlc0Zyb21GaWxlKFVyaSBmaWxlKSBhc3luYyB7CiAgICBMaXN0PGludD4gY29udGVudHM7CiAgICB0cnkgewogICAgICAvLyBUT0RPKGFoZSk6IFdlIG5lZWQgdG8gY29tcHV0ZSBsaW5lIGVuZGluZ3MgZm9yIHRoaXMgZmlsZS4KICAgICAgY29udGVudHMgPSBhd2FpdCBmaWxlU3lzdGVtLmVudGl0eUZvclVyaShmaWxlKS5yZWFkQXNCeXRlcygpOwogICAgfSBvbiBGaWxlU3lzdGVtRXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICAgIHJlcG9ydFdpdGhvdXRMb2NhdGlvbigKICAgICAgICAgIHRlbXBsYXRlQ2FudFJlYWRGaWxlLndpdGhBcmd1bWVudHMoZmlsZSwgZS5tZXNzYWdlKSwgU2V2ZXJpdHkuZXJyb3IpOwogICAgfQogICAgaWYgKGNvbnRlbnRzICE9IG51bGwpIHsKICAgICAgX3BhY2thZ2VzVXJpID0gZmlsZTsKICAgICAgdHJ5IHsKICAgICAgICBNYXA8U3RyaW5nLCBVcmk+IG1hcCA9IHBhY2thZ2VfY29uZmlnLnBhcnNlKGNvbnRlbnRzLCBmaWxlKTsKICAgICAgICByZXR1cm4gbmV3IE1hcFBhY2thZ2VzKG1hcCk7CiAgICAgIH0gb24gRm9ybWF0RXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICAgICAgcmVwb3J0KAogICAgICAgICAgICB0ZW1wbGF0ZVBhY2thZ2VzRmlsZUZvcm1hdAogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZS5tZXNzYWdlKQogICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihmaWxlLCBlLm9mZnNldCwgbm9MZW5ndGgpLAogICAgICAgICAgICBTZXZlcml0eS5lcnJvcik7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICByZXBvcnRXaXRob3V0TG9jYXRpb24oCiAgICAgICAgICAgIHRlbXBsYXRlQ2FudFJlYWRGaWxlLndpdGhBcmd1bWVudHMoZmlsZSwgIiRlIiksIFNldmVyaXR5LmVycm9yKTsKICAgICAgfQogICAgfQogICAgX3BhY2thZ2VzVXJpID0gbnVsbDsKICAgIHJldHVybiBQYWNrYWdlcy5ub1BhY2thZ2VzOwogIH0KCiAgLy8vIEZpbmRzIGEgcGFja2FnZSByZXNvbHV0aW9uIHN0cmF0ZWd5IHVzaW5nIGEgW0ZpbGVTeXN0ZW1dLgogIC8vLwogIC8vLyBUaGUgW3NjcmlwdFVyaV0gcG9pbnRzIHRvIGEgRGFydCBzY3JpcHQgd2l0aCBhIHZhbGlkIHNjaGVtZSBhY2NlcHRlZCBieQogIC8vLyB0aGUgW0ZpbGVTeXN0ZW1dLgogIC8vLwogIC8vLyBUaGlzIGZ1bmN0aW9uIGZpcnN0IHRyaWVzIHRvIGxvY2F0ZSBhIGAucGFja2FnZXNgIGZpbGUgaW4gdGhlIGBzY3JpcHRVcmlgCiAgLy8vIGRpcmVjdG9yeS4gSWYgdGhhdCBpcyBub3QgZm91bmQsIGl0IHN0YXJ0cyBjaGVja2luZyBwYXJlbnQgZGlyZWN0b3JpZXMgZm9yCiAgLy8vIGEgYC5wYWNrYWdlc2AgZmlsZSwgYW5kIHN0b3BzIGlmIGl0IGZpbmRzIGl0LiBPdGhlcndpc2UgaXQgZ2l2ZXMgdXAgYW5kCiAgLy8vIHJldHVybnMgW1BhY2thZ2VzLm5vUGFja2FnZXNdLgogIC8vLwogIC8vLyBOb3RlOiB0aGlzIGlzIGEgZm9yayBmcm9tIGBwYWNrYWdlOnBhY2thZ2VfY29uZmlnL2Rpc2NvdmVyeS5kYXJ0YCB0byBhZGFwdAogIC8vLyBpdCB0byB1c2UgW0ZpbGVTeXN0ZW1dLiBUaGUgbG9naWMgaGVyZSBpcyBhIG1peCBvZiB0aGUgbG9naWMgaW4gdGhlCiAgLy8vIGBmaW5kUGFja2FnZXNGcm9tRmlsZWAgYW5kIGBmaW5kUGFja2FnZXNGcm9tTm9uRmlsZWA6CiAgLy8vCiAgLy8vICAgICogTGlrZSBgZmluZFBhY2thZ2VzRnJvbUZpbGVgIHJlc29sdXRpb24gc2VhcmNoZXMgZm9yIHBhcmVudAogIC8vLyAgICBkaXJlY3RvcmllcwogIC8vLwogIC8vLyAgICAqIFVubGlrZSBwYWNrYWdlOnBhY2thZ2VfY29uZmlnLCBpdCBkb2VzIG5vdCBsb29rIGZvciBhIGBwYWNrYWdlcy9gCiAgLy8vICAgIGRpcmVjdG9yeSwgYXMgdGhhdCB3b24ndCBiZSBzdXBwb3J0ZWQgaW4gRGFydCAyLgogIEZ1dHVyZTxQYWNrYWdlcz4gX2ZpbmRQYWNrYWdlcyhVcmkgc2NyaXB0VXJpKSBhc3luYyB7CiAgICB2YXIgZGlyID0gc2NyaXB0VXJpLnJlc29sdmUoJy4nKTsKICAgIGlmICghZGlyLmlzQWJzb2x1dGUpIHsKICAgICAgcmVwb3J0V2l0aG91dExvY2F0aW9uKAogICAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbnN1cHBvcnRlZAogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKCJFeHBlY3RlZCBpbnB1dCBVcmkgdG8gYmUgYWJzb2x1dGU6ICRzY3JpcHRVcmkuIiksCiAgICAgICAgICBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwogICAgICByZXR1cm4gUGFja2FnZXMubm9QYWNrYWdlczsKICAgIH0KCiAgICBGdXR1cmU8VXJpPiBjaGVja0luRGlyKFVyaSBkaXIpIGFzeW5jIHsKICAgICAgVXJpIGNhbmRpZGF0ZSA9IGRpci5yZXNvbHZlKCcucGFja2FnZXMnKTsKICAgICAgaWYgKGF3YWl0IGZpbGVTeXN0ZW0uZW50aXR5Rm9yVXJpKGNhbmRpZGF0ZSkuZXhpc3RzKCkpIHJldHVybiBjYW5kaWRhdGU7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8vIENoZWNrIGZvciAkY3dkLy5wYWNrYWdlcwogICAgdmFyIGNhbmRpZGF0ZSA9IGF3YWl0IGNoZWNrSW5EaXIoZGlyKTsKICAgIGlmIChjYW5kaWRhdGUgIT0gbnVsbCkgcmV0dXJuIGNyZWF0ZVBhY2thZ2VzRnJvbUZpbGUoY2FuZGlkYXRlKTsKCiAgICAvLyBDaGVjayBmb3IgY3dkKC8uLikrLy5wYWNrYWdlcwogICAgdmFyIHBhcmVudERpciA9IGRpci5yZXNvbHZlKCcuLicpOwogICAgd2hpbGUgKHBhcmVudERpci5wYXRoICE9IGRpci5wYXRoKSB7CiAgICAgIGNhbmRpZGF0ZSA9IGF3YWl0IGNoZWNrSW5EaXIocGFyZW50RGlyKTsKICAgICAgaWYgKGNhbmRpZGF0ZSAhPSBudWxsKSBicmVhazsKICAgICAgZGlyID0gcGFyZW50RGlyOwogICAgICBwYXJlbnREaXIgPSBkaXIucmVzb2x2ZSgnLi4nKTsKICAgIH0KCiAgICBpZiAoY2FuZGlkYXRlICE9IG51bGwpIHJldHVybiBjcmVhdGVQYWNrYWdlc0Zyb21GaWxlKGNhbmRpZGF0ZSk7CiAgICByZXR1cm4gUGFja2FnZXMubm9QYWNrYWdlczsKICB9CgogIGJvb2wgX2NvbXB1dGVkU2RrRGVmYXVsdHMgPSBmYWxzZTsKCiAgLy8vIEVuc3VyZSBbX3Nka1Jvb3RdLCBbX3Nka1N1bW1hcnldIGFuZCBbX2xpYnJhcnlTcGVjVXJpXSBhcmUgaW5pdGlhbGl6ZWQuCiAgLy8vCiAgLy8vIElmIHRoZXkgYXJlIG5vdCBzZXQgZXhwbGljaXRseSwgdGhleSBhcmUgaW5mZXJlZCBiYXNlZCBvbiB0aGUgZGVmYXVsdAogIC8vLyBiZWhhdmlvciBkZXNjcmliZWQgaW4gW0NvbXBpbGVyT3B0aW9uc10uCiAgdm9pZCBfZW5zdXJlU2RrRGVmYXVsdHMoKSB7CiAgICBpZiAoX2NvbXB1dGVkU2RrRGVmYXVsdHMpIHJldHVybjsKICAgIF9jb21wdXRlZFNka0RlZmF1bHRzID0gdHJ1ZTsKICAgIHZhciByb290ID0gX3Jhdy5zZGtSb290OwogICAgaWYgKHJvb3QgIT0gbnVsbCkgewogICAgICAvLyBOb3JtYWxpemUgdG8gYWx3YXlzIGVuZCBpbiAnLycKICAgICAgaWYgKCFyb290LnBhdGguZW5kc1dpdGgoJy8nKSkgewogICAgICAgIHJvb3QgPSByb290LnJlcGxhY2UocGF0aDogcm9vdC5wYXRoICsgJy8nKTsKICAgICAgfQogICAgICBfc2RrUm9vdCA9IHJvb3Q7CiAgICB9IGVsc2UgaWYgKGNvbXBpbGVTZGspIHsKICAgICAgLy8gVE9ETyhwYXVsYmVycnkpOiBpbXBsZW1lbnQgdGhlIGFsZ29yaXRobSBmb3IgZmluZGluZyB0aGUgU0RLCiAgICAgIC8vIGF1dG9tYWdpY2FsbHkuCiAgICAgIHVuaW1wbGVtZW50ZWQoJ2luZmVyIHRoZSBkZWZhdWx0IHNkayBsb2NhdGlvbicsIC0xLCBudWxsKTsKICAgIH0KCiAgICBpZiAoX3Jhdy5zZGtTdW1tYXJ5ICE9IG51bGwpIHsKICAgICAgX3Nka1N1bW1hcnkgPSBfcmF3LnNka1N1bW1hcnk7CiAgICB9IGVsc2UgaWYgKCFjb21waWxlU2RrKSB7CiAgICAgIC8vIEluZmVyIGJhc2VkIG9uIHRoZSBzZGtSb290LCBidXQgb25seSB3aGVuIGBjb21waWxlU2RrYCBpcyBmYWxzZSwKICAgICAgLy8gb3RoZXJ3aXNlIHRoZSBkZWZhdWx0IGludGVudCB3YXMgdG8gY29tcGlsZSB0aGUgc2RrIGZyb20gc291cmNlcyBhbmQKICAgICAgLy8gbm90IHRvIGxvYWQgYW4gc2RrIHN1bW1hcnkgZmlsZS4KICAgICAgX3Nka1N1bW1hcnkgPSByb290Py5yZXNvbHZlKCJ2bV9wbGF0Zm9ybV9zdHJvbmcuZGlsbCIpOwogICAgfQoKICAgIGlmIChfcmF3LmxpYnJhcmllc1NwZWNpZmljYXRpb25VcmkgIT0gbnVsbCkgewogICAgICBfbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSA9IF9yYXcubGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaTsKICAgIH0gZWxzZSBpZiAoY29tcGlsZVNkaykgewogICAgICBfbGlicmFyaWVzU3BlY2lmaWNhdGlvblVyaSA9IHNka1Jvb3QucmVzb2x2ZSgnbGliL2xpYnJhcmllcy5qc29uJyk7CiAgICB9CiAgfQoKICAvLy8gQ3JlYXRlIGEgW0ZpbGVTeXN0ZW1dIHNwZWNpZmljIHRvIHRoZSBjdXJyZW50IG9wdGlvbnMuCiAgRmlsZVN5c3RlbSBfY3JlYXRlRmlsZVN5c3RlbSgpIHsKICAgIHJldHVybiBfcmF3LmZpbGVTeXN0ZW07CiAgfQoKICBTdHJpbmcgZGVidWdTdHJpbmcoKSB7CiAgICB2YXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICB3cml0ZUxpc3QoU3RyaW5nIG5hbWUsIExpc3QgZWxlbWVudHMpIHsKICAgICAgaWYgKGVsZW1lbnRzLmlzRW1wdHkpIHsKICAgICAgICBzYi53cml0ZWxuKCckbmFtZTogPGVtcHR5PicpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBzYi53cml0ZWxuKCckbmFtZTonKTsKICAgICAgZWxlbWVudHMuZm9yRWFjaCgocykgewogICAgICAgIHNiLndyaXRlbG4oJyAgLSAkcycpOwogICAgICB9KTsKICAgIH0KCiAgICBzYi53cml0ZWxuKCdJbnB1dHM6ICR7aW5wdXRzfScpOwogICAgc2Iud3JpdGVsbignT3V0cHV0OiAke291dHB1dH0nKTsKCiAgICBzYi53cml0ZWxuKCdXYXMgZGlhZ25vc3RpYyBtZXNzYWdlIGhhbmRsZXIgcHJvdmlkZWQ6ICcKICAgICAgICAnJHtfcmF3Lm9uRGlhZ25vc3RpYyA9PSBudWxsID8gIm5vIiA6ICJ5ZXMifScpOwoKICAgIHNiLndyaXRlbG4oJ0ZpbGVTeXN0ZW06ICR7X2ZpbGVTeXN0ZW0ucnVudGltZVR5cGV9ICcKICAgICAgICAnKHByb3ZpZGVkOiAke19yYXcuZmlsZVN5c3RlbS5ydW50aW1lVHlwZX0pJyk7CgogICAgd3JpdGVMaXN0KCdJbnB1dCBTdW1tYXJpZXMnLCBfcmF3LmlucHV0U3VtbWFyaWVzKTsKICAgIHdyaXRlTGlzdCgnTGlua2VkIERlcGVuZGVuY2llcycsIF9yYXcubGlua2VkRGVwZW5kZW5jaWVzKTsKCiAgICBzYi53cml0ZWxuKCdQYWNrYWdlcyB1cmk6ICR7X3Jhdy5wYWNrYWdlc0ZpbGVVcml9Jyk7CiAgICBzYi53cml0ZWxuKCdQYWNrYWdlczogJHtfcGFja2FnZXN9Jyk7CgogICAgc2Iud3JpdGVsbignQ29tcGlsZSBTREs6ICR7Y29tcGlsZVNka30nKTsKICAgIHNiLndyaXRlbG4oJ1NESyByb290OiAke19zZGtSb290fSAocHJvdmlkZWQ6ICR7X3Jhdy5zZGtSb290fSknKTsKICAgIHNiLndyaXRlbG4oJ1NESyBzcGVjaWZpY2F0aW9uOiAke19saWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpfSAnCiAgICAgICAgJyhwcm92aWRlZDogJHtfcmF3LmxpYnJhcmllc1NwZWNpZmljYXRpb25Vcml9KScpOwogICAgc2Iud3JpdGVsbignU0RLIHN1bW1hcnk6ICR7X3Nka1N1bW1hcnl9IChwcm92aWRlZDogJHtfcmF3LnNka1N1bW1hcnl9KScpOwoKICAgIHNiLndyaXRlbG4oJ0xlZ2FjeSBtb2RlOiAke2xlZ2FjeU1vZGV9Jyk7CiAgICBzYi53cml0ZWxuKCdUYXJnZXQ6ICR7X3RhcmdldD8ubmFtZX0gKHByb3ZpZGVkOiAke19yYXcudGFyZ2V0Py5uYW1lfSknKTsKCiAgICBzYi53cml0ZWxuKCd0aHJvd09uRXJyb3JzRm9yRGVidWdnaW5nOiAke3Rocm93T25FcnJvcnNGb3JEZWJ1Z2dpbmd9Jyk7CiAgICBzYi53cml0ZWxuKCd0aHJvd09uV2FybmluZ3NGb3JEZWJ1Z2dpbmc6ICR7dGhyb3dPbldhcm5pbmdzRm9yRGVidWdnaW5nfScpOwogICAgc2Iud3JpdGVsbignZXhpdCBvbiBwcm9ibGVtOiAke3NldEV4aXRDb2RlT25Qcm9ibGVtfScpOwogICAgc2Iud3JpdGVsbignRW1iZWQgc291cmNlczogJHtlbWJlZFNvdXJjZVRleHR9Jyk7CiAgICBzYi53cml0ZWxuKCdkZWJ1Z0R1bXA6ICR7ZGVidWdEdW1wfScpOwogICAgc2Iud3JpdGVsbigndmVyYm9zZTogJHt2ZXJib3NlfScpOwogICAgc2Iud3JpdGVsbigndmVyaWZ5OiAke3ZlcmlmeX0nKTsKICAgIHJldHVybiAnJHNiJzsKICB9CgogIEZ1dHVyZTxMaXN0PGludD4+IF9yZWFkQXNCeXRlcyhGaWxlU3lzdGVtRW50aXR5IGZpbGUpIGFzeW5jIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiBhd2FpdCBmaWxlLnJlYWRBc0J5dGVzKCk7CiAgICB9IG9uIEZpbGVTeXN0ZW1FeGNlcHRpb24gY2F0Y2ggKGVycm9yKSB7CiAgICAgIHJlcG9ydCgKICAgICAgICAgIHRlbXBsYXRlQ2FudFJlYWRGaWxlCiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZXJyb3IudXJpLCBlcnJvci5tZXNzYWdlKQogICAgICAgICAgICAgIC53aXRob3V0TG9jYXRpb24oKSwKICAgICAgICAgIFNldmVyaXR5LmVycm9yKTsKICAgICAgcmV0dXJuIG5ldyBVaW50OExpc3QoMCk7CiAgICB9CiAgfQp9CgovLy8gQSBbRmlsZVN5c3RlbV0gdGhhdCBvbmx5IGFsbG93cyBhY2Nlc3MgdG8gZmlsZXMgdGhhdCBoYXZlIGJlZW4gZXhwbGljaXRseQovLy8gd2hpdGVsaXN0ZWQuCmNsYXNzIEhlcm1ldGljRmlsZVN5c3RlbSBpbXBsZW1lbnRzIEZpbGVTeXN0ZW0gewogIGZpbmFsIFNldDxVcmk+IGluY2x1ZGVkRmlsZXM7CiAgZmluYWwgRmlsZVN5c3RlbSBfcmVhbEZpbGVTeXN0ZW07CgogIEhlcm1ldGljRmlsZVN5c3RlbSh0aGlzLmluY2x1ZGVkRmlsZXMsIHRoaXMuX3JlYWxGaWxlU3lzdGVtKTsKCiAgRmlsZVN5c3RlbUVudGl0eSBlbnRpdHlGb3JVcmkoVXJpIHVyaSkgewogICAgaWYgKGluY2x1ZGVkRmlsZXMuY29udGFpbnModXJpKSkgcmV0dXJuIF9yZWFsRmlsZVN5c3RlbS5lbnRpdHlGb3JVcmkodXJpKTsKICAgIHRocm93IG5ldyBIZXJtZXRpY0FjY2Vzc0V4Y2VwdGlvbih1cmkpOwogIH0KfQoKY2xhc3MgSGVybWV0aWNBY2Nlc3NFeGNlcHRpb24gZXh0ZW5kcyBGaWxlU3lzdGVtRXhjZXB0aW9uIHsKICBIZXJtZXRpY0FjY2Vzc0V4Y2VwdGlvbihVcmkgdXJpKQogICAgICA6IHN1cGVyKAogICAgICAgICAgICB1cmksCiAgICAgICAgICAgICdJbnZhbGlkIGFjY2VzcyB0byAkdXJpOiAnCiAgICAgICAgICAgICd0aGUgZmlsZSBpcyBhY2Nlc3NlZCBpbiBhIG1vZHVsYXIgaGVybWV0aWMgYnVpbGQsICcKICAgICAgICAgICAgJ2J1dCBpdCB3YXMgbm90IGV4cGxpY2l0bHkgbGlzdGVkIGFzIGFuIGlucHV0LicpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBtZXNzYWdlOwp9CoKzAE5OPAEgASEBKQFIAU0BLCoBPQFGAUkBMC0BMjUBKzwBNiEBSQE+ASMJGhgRMDBDHRIsHiMsJCEqJAEyAUABLwErAToBJgkgKSYBOQRER0hOEwRKUE1LLRk4HgFRHRYBT0gUJwFIMSABPgZMTU4rIgE8BkxNUCstAU8PJwFQCxAUGhUEARMXGhgEAR4BMDIkKzc0Bh0EASImGicEAREBMgEkASIBKAEuAT4BNAFIAUwBMRoBNhQBMAFKAU9NNilJP1E2SAEbUSUbSBdOLTFFMUoIBkM9BAE5KDs/OwZAFAZBOhxKBgQBPEYEAUUsBAFGQzEEAUpISScBMUIUBgEgPB1LFAYBHk8dThQGASkdRSUUBgEyTRw9H04WCAYRBAFGFSoBGgFLDUQBTw41ASoBJCYBSUIBEiNOATQ3KEtLBAFAPkMoKy8vPwgGIQQBNSg6BiUEAUsmPk0tJkQ9KEoiTAYmBAFCLUgGLAQBSD5PJypEPShKHEwGIAQBTEMqGkYzNh0cJ0IjFgQBSgZJSUwXHRgGIjY8KzAqPwYbBAFOHEhDTAEtThgfLTsdCDUGAQ9RChFPKjUdShs1BgQBPAZJMSotGShNBgEdSjkdQy4GAR4BSEgBJg4/JBsuBgE6BAE/PBgKQ0QpHVAGHBsMRSUnECcqOR0UH00IBhkgBAFABk4YBlBRTiUGUUo8BkYVBk06OCYbHS1QJSIGASwwTxMGASArRQElJykvJBclBgFFIAQBJQFOBkwvHiYhHRgoJjQIFx1GGEEGASMlHkpOKj4GATJDHUoGBAE9IxwEARkhLB4mEAgcHR4KBgElJQE7OAE5NwE3PwE5KgEuRUM6TgEuTQFLTzw1KyclEgQBQAonLQ4fNyIbHwYEAgFOETEgJAFAAStPLAQCATwjDxEnQT4BDCACATFwYWNrYWdlOmZyb250X2VuZC9zcmMvYmFzZS9wcm9jZXNzZWRfb3B0aW9ucy5kYXJ0QHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9iYXNlL2xpYnJhcmllc19zcGVjaWZpY2F0aW9uLmRhcnSnny8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTGlicmFyeSBzcGVjaWZpY2F0aW9uIGluLW1lbW9yeSByZXByZXNlbnRhdGlvbi4KLy8vCi8vLyBNYW55IGRhcnQgdG9vbHMgYXJlIGNvbmZpZ3VyYWJsZSB0byBzdXBwb3J0IGRpZmZlcmVudCB0YXJnZXQgcGxhdGZvcm1zLiAgRm9yCi8vLyBhIGdpdmVuIHRhcmdldCwgdGhleSBuZWVkIHRvIGtub3cgd2hhdCBsaWJyYXJpZXMgYXJlIGF2YWlsYWJsZSBhbmQgd2hlcmUgYXJlCi8vLyB0aGUgc291cmNlcyBhbmQgdGFyZ2V0LXNwZWNpZmljIHBhdGNoZXMuCi8vLwovLy8gSGVyZSB3ZSBkZWZpbmUgQVBJcyB0byByZXByZXNlbnQgdGhpcyBzcGVjaWZpY2F0aW9uIGFuZCBpbXBsZW1lbnQKLy8vIHNlcmlhbGl6YXRpb24gdG8gKGFuZCBkZXNlcmlhbGl6YXRpb24gZnJvbSkgYSBKU09OIGZpbGUuCi8vLwovLy8gSGVyZSBpcyBhbiBleGFtcGxlIHNwZWNpZmljYXRpb24gSlNPTiBmaWxlOgovLy8KLy8vICAgICB7Ci8vLyAgICAgICAidm0iOiB7Ci8vLyAgICAgICAgICJsaWJyYXJpZXMiOiB7Ci8vLyAgICAgICAgICAgICAiY29yZSI6IHsKLy8vICAgICAgICAgICAgICAgICJ1cmkiOiAiYXN5bmMvY29yZS5kYXJ0IiwKLy8vICAgICAgICAgICAgICAgICJwYXRjaGVzIjogWwovLy8gICAgICAgICAgICAgICAgICAgICJwYXRoL3RvL2NvcmVfcGF0Y2guZGFydCIsCi8vLyAgICAgICAgICAgICAgICAgICAgInBhdGgvdG8vbGlzdF9wYXRjaC5kYXJ0IgovLy8gICAgICAgICAgICAgICAgXQovLy8gICAgICAgICAgICAgfQovLy8gICAgICAgICAgICAgImFzeW5jIjogewovLy8gICAgICAgICAgICAgICAgInVyaSI6ICJhc3luYy9hc3luYy5kYXJ0IiwKLy8vICAgICAgICAgICAgICAgICJwYXRjaGVzIjogInBhdGgvdG8vYXN5bmNfcGF0Y2guZGFydCIKLy8vICAgICAgICAgICAgIH0KLy8vICAgICAgICAgICAgICJjb252ZXJ0IjogewovLy8gICAgICAgICAgICAgICAgInVyaSI6ICJjb252ZXJ0L2NvbnZlcnQuZGFydCIsCi8vLyAgICAgICAgICAgICB9Ci8vLyAgICAgICAgICAgICAibWlycm9ycyI6IHsKLy8vICAgICAgICAgICAgICAgICJ1cmkiOiAibWlycm9ycy9taXJyb3JzLmRhcnQiLAovLy8gICAgICAgICAgICAgICAgInN1cHBvcnRlZCI6IGZhbHNlCi8vLyAgICAgICAgICAgICB9Ci8vLyAgICAgICAgIH0KLy8vICAgICAgIH0KLy8vICAgICB9Ci8vLwovLy8gVGhlIGZvcm1hdCBjb250YWluczoKLy8vICAgLSBhIHRvcCBsZXZlbCBlbnRyeSBmb3IgZWFjaCB0YXJnZXQuIEtleXMgYXJlIHRhcmdldCBuYW1lcyAoZS5nLiAidm0iCi8vLyAgICAgYWJvdmUpLCBhbmQgdmFsdWVzIGNvbnRhaW4gdGhlIGVudGlyZSBzcGVjaWZpY2F0aW9uIG9mIGEgdGFyZ2V0LgovLy8KLy8vICAgLSBlYWNoIHRhcmdldCBzcGVjaWZpY2F0aW9uIGlzIGEgbWFwLiBUb2RheSwgb25seSBvbmUga2V5IGlzIHN1cHBvcnRlZCBvbgovLy8gICAgIHRoaXMgbWFwOiAibGlicmFyaWVzIi4KLy8vCi8vLyAgIC0gVGhlICJsaWJyYXJpZXMiIGVudHJ5IGNvbnRhaW5zIGRldGFpbHMgZm9yIGhvdyBlYWNoIHBsYXRmb3JtIGxpYnJhcnkgaXMKLy8vICAgICBpbXBsZW1lbnRlZC4gVGhlIGVudHJ5IGlzIGEgbWFwLCB3aGVyZSBrZXlzIGFyZSB0aGUgbmFtZSBvZiB0aGUgcGxhdGZvcm0KLy8vICAgICBsaWJyYXJ5IGFuZCB2YWx1ZXMgY29udGFpbiBkZXRhaWxzIGZvciB3aGVyZSB0byBmaW5kIHRoZSBpbXBsZW1lbnRhdGlvbgovLy8gICAgIGZvIHRoYXQgbGlicmFyeS4KLy8vCi8vLyAgIC0gVGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgaXMgYSBzaW5nbGUgdG9rZW4gKGUuZy4gImNvcmUiKSB0aGF0IG1hdGNoZXMgdGhlCi8vLyAgICAgVXJpIHBhdGggdXNlZCBhZnRlciBgZGFydDpgIChlLmcuICJkYXJ0OmNvcmUiKS4KLy8vCi8vLyAgIC0gVGhlICJ1cmkiIGVudHJ5IG9uIHRoZSBsaWJyYXJ5IGluZm9ybWF0aW9uIGlzIG1hbmRhdG9yeS4gVGhlIHZhbHVlIGlzIGEKLy8vICAgICBzdHJpbmcgVVJJIHJlZmVyZW5jZS4gVGhlICJwYXRjaGVzIiBlbnRyeSBpcyBvcHRpb25hbCBhbmQgbWF5IGhhdmUgYXMgYQovLy8gICAgIHZhbHVlIGEgc3RyaW5nIFVSSSByZWZlcmVuY2Ugb3IgYSBsaXN0IG9mIFVSSSByZWZlcmVuY2VzLgovLy8KLy8vICAgICBBbGwgVVJJIHJlZmVyZW5jZXMgY2FuIGVpdGhlciBiZSBhIGZpbGUgVVJJIG9yIGEgcmVsYXRpdmUgVVJJIHBhdGgsCi8vLyAgICAgd2hpY2ggd2lsbCBiZSByZXNvbHZlZCByZWxhdGl2ZSB0byB0aGUgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkKLy8vICAgICBzcGVjaWZpY2F0aW9uIGZpbGUuCi8vLwovLy8gICAtIFRoZSAic3VwcG9ydGVkIiBlbnRyeSBvbiB0aGUgbGlicmFyeSBpbmZvcm1hdGlvbiBpcyBvcHRpb25hbC4gVGhlIHZhbHVlCi8vLyAgICAgaXMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbGlicmFyeSBpcyBzdXBwb3J0ZWQgaW4gdGhlCi8vLyAgICAgdW5kZXJseWluZyB0YXJnZXQuICBIb3dldmVyLCBzaW5jZSB0aGUgbGlicmFyaWVzIGFyZSBhc3N1bWVkIHRvIGJlCi8vLyAgICAgc3VwcG9ydGVkIGJ5IGRlZmF1bHQsIHdlIG9ubHkgZXhwZWN0IHVzZXJzIHRvIHVzZSBgZmFsc2VgLgovLy8KLy8vICAgICBUaGUgcHVycG9zZSBvZiB0aGlzIHZhbHVlIGlzIHRvIGNvbmZpZ3VyZSBjb25kaXRpb25hbCBpbXBvcnRzIGFuZAovLy8gICAgIGVudmlyb25tZW50IGNvbnN0YW50cy4gQnkgZGVmYXVsdCBldmVyeSBwbGF0Zm9ybSBsaWJyYXJ5IHRoYXQgaXMKLy8vICAgICBhdmFpbGFibGUgaW4gdGhlICJsaWJyYXJpZXMiIHNlY3Rpb24gaW1wbGljaXRseSBkZWZpbmVzIGFuIGVudmlyb25tZW50Ci8vLyAgICAgdmFyaWFibGUgYGRhcnQubGlicmFyeS5uYW1lYCBhcyBgInRydWUiYCwgdG8gaW5kaWNhdGUgdGhhdCB0aGUgbGlicmFyeQovLy8gICAgIGlzIHN1cHBvcnRlZC4gIFNvbWUgYmFja2VuZHMgYWxsb3cgaW1wb3J0cyB0byBhbiB1bnN1cHBvcnRlZCBwbGF0Zm9ybQovLy8gICAgIGxpYnJhcnkgKHR1cm5pbmcgYSBzdGF0aWMgZXJyb3IgaW50byBhIHJ1bnRpbWUgZXJyb3Igd2hlbiB0aGUgbGlicmFyeSBpcwovLy8gICAgIGV2ZW50dWFsbHkgYWNjZXNzZWQpLiBUaGVzZSBiYWNrZW5kcyBjYW4gdXNlIGBzdXBwb3J0ZWQ6IGZhbHNlYCB0bwovLy8gICAgIHJlcG9ydCB0aGF0IHN1Y2ggbGlicmFyeSBpcyBzdGlsbCBub3Qgc3VwcG9ydGVkIGluIGNvbmRpdGlvbmFsIGltcG9ydHMKLy8vICAgICBhbmQgY29uc3QgYGZyb21FbnZpcm9ubWVudGAgZXhwcmVzc2lvbnMuCi8vLwovLy8KLy8vIE5vdGU6IHdlIGN1cnJlbnRseSBoYXZlIHNldmVyYWwgZGlmZmVyZW50IGZpbGVzIHRoYXQgbmVlZCB0byBiZSB1cGRhdGVkCi8vLyB3aGVuIGNoYW5naW5nIGxpYnJhcmllcywgc291cmNlcywgYW5kIHBhdGNoIGZpbGVzOgovLy8gICAgKiAucGxhdGZvcm0gZmlsZXMgKGZvciBkYXJ0MmpzKQovLy8gICAgKiAuZ3lwaSBmaWxlcyAoZm9yIHZtKQovLy8gICAgKiBzZGtfbGlicmFyeV9tZXRhZGF0YS9saWIvbGlicmFyaWVzLmRhcnQgKGZvciBhbmFseXplciwgZGRjKQovLy8KLy8vIHdlIGFyZSBpbiB0aGUgcHJvY2VzcyBvZiB1bmlmeWluZyB0aGVtIGFsbCB1bmRlciB0aGlzIGZvcm1hdCAoc2VlCi8vLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMjg4MzYpLCBidXQgZm9yIG5vdyB3ZSBuZWVkIHRvIHBheQovLy8gY2xvc2UgYXR0ZW50aW9uIHRvIGNoYW5nZSB0aGVtIGNvbnNpc3RlbnRseS4KCi8vIFRPRE8oc2lnbXVuZCk6IG1vdmUgdGhpcyBmaWxlIHRvIGEgc2hhcmVkIHBhY2thZ2UuCmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IGpzb25EZWNvZGUsIGpzb25FbmNvZGU7CgppbXBvcnQgJy4uL2Zhc3RhL3V0aWwvcmVsYXRpdml6ZS5kYXJ0JyBzaG93IHJlbGF0aXZpemVVcmk7CmltcG9ydCAnLi4vZmFzdGEvcmVzb2x2ZV9pbnB1dF91cmkuZGFydCcgc2hvdyBpc1dpbmRvd3M7CgovLy8gQ29udGVudHMgZnJvbSBhIHNpbmdsZSBsaWJyYXJ5IHNwZWNpZmljYXRpb24gZmlsZS4KLy8vCi8vLyBDb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgbGlicmFyaWVzIG9uIGFsbCB0YXJnZXQgcGxhdGZvcm1zIGRlZmluZWQgaW4KLy8vIHRoYXQgZmlsZS4KY2xhc3MgTGlicmFyaWVzU3BlY2lmaWNhdGlvbiB7CiAgZmluYWwgTWFwPFN0cmluZywgVGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbj4gX3RhcmdldHM7CgogIGNvbnN0IExpYnJhcmllc1NwZWNpZmljYXRpb24oCiAgICAgIFt0aGlzLl90YXJnZXRzID0gY29uc3QgPFN0cmluZywgVGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbj57fV0pOwoKICAvLy8gVGhlIGxpYnJhcnkgc3BlY2lmaWNhdGlvbiBmb3IgYSBnaXZlbiBbdGFyZ2V0XSwgb3IgdGhyb3dzIGlmIG5vbmUgaXMKICAvLy8gYXZhaWxhYmxlLgogIFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb24gc3BlY2lmaWNhdGlvbkZvcihTdHJpbmcgdGFyZ2V0KSB7CiAgICB2YXIgdGFyZ2V0U3BlYyA9IF90YXJnZXRzW3RhcmdldF07CiAgICBpZiAodGFyZ2V0U3BlYyA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uRXhjZXB0aW9uKAogICAgICAgICAgJ05vIGxpYnJhcnkgc3BlY2lmaWNhdGlvbiBmb3IgdGFyZ2V0ICIkdGFyZ2V0IicpOwogICAgfQogICAgcmV0dXJuIHRhcmdldFNwZWM7CiAgfQoKICAvLy8gUGFyc2UgdGhlIGdpdmVuIFtqc29uXSBhcyBhIGxpYnJhcnkgc3BlY2lmaWNhdGlvbiwgcmVzb2x2aW5nIGFueSByZWxhdGl2ZQogIC8vLyBwYXRocyBmcm9tIFtiYXNlVXJpXS4KICAvLy8KICAvLy8gTWF5IHRocm93IGFuIGV4Y2VwdGlvbiBpZiBbanNvbl0gaXMgbm90IHByb3Blcmx5IGZvcm1hdHRlZCBvciBjb250YWlucwogIC8vLyBpbnZhbGlkIHZhbHVlcy4KICBzdGF0aWMgTGlicmFyaWVzU3BlY2lmaWNhdGlvbiBwYXJzZShVcmkgYmFzZVVyaSwgU3RyaW5nIGpzb24pIHsKICAgIGlmIChqc29uID09IG51bGwpIHJldHVybiBjb25zdCBMaWJyYXJpZXNTcGVjaWZpY2F0aW9uKCk7CiAgICB2YXIganNvbkRhdGE7CiAgICB0cnkgewogICAgICB2YXIgZGF0YSA9IGpzb25EZWNvZGUoanNvbik7CiAgICAgIGlmIChkYXRhIGlzISBNYXApIHsKICAgICAgICByZXR1cm4gX3JlcG9ydEVycm9yKCd0b3AtbGV2ZWwgc3BlY2lmaWNhdGlvbiBpcyBub3QgYSBtYXAnKTsKICAgICAgfQogICAgICBqc29uRGF0YSA9IGRhdGEgYXMgTWFwOwogICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgdGhyb3cgbmV3IExpYnJhcmllc1NwZWNpZmljYXRpb25FeGNlcHRpb24oZSk7CiAgICB9CiAgICB2YXIgdGFyZ2V0cyA9IDxTdHJpbmcsIFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb24+e307CiAgICBqc29uRGF0YS5mb3JFYWNoKChTdHJpbmcgdGFyZ2V0TmFtZSwgdGFyZ2V0RGF0YSkgewogICAgICBpZiAodGFyZ2V0TmFtZS5zdGFydHNXaXRoKCJjb21tZW50OiIpKSByZXR1cm4gbnVsbDsKICAgICAgTWFwPFN0cmluZywgTGlicmFyeUluZm8+IGxpYnJhcmllcyA9IDxTdHJpbmcsIExpYnJhcnlJbmZvPnt9OwogICAgICBpZiAodGFyZ2V0RGF0YSBpcyEgTWFwKSB7CiAgICAgICAgcmV0dXJuIF9yZXBvcnRFcnJvcigKICAgICAgICAgICAgInRhcmdldCBzcGVjaWZpY2F0aW9uIGZvciAnJHRhcmdldE5hbWUnIGlzIG5vdCBhIG1hcCIpOwogICAgICB9CiAgICAgIGlmICghdGFyZ2V0RGF0YS5jb250YWluc0tleSgibGlicmFyaWVzIikpIHsKICAgICAgICByZXR1cm4gX3JlcG9ydEVycm9yKCJ0YXJnZXQgc3BlY2lmaWNhdGlvbiAiCiAgICAgICAgICAgICJmb3IgJyR0YXJnZXROYW1lJyBkb2Vzbid0IGhhdmUgYSBsaWJyYXJpZXMgZW50cnkiKTsKICAgICAgfQogICAgICB2YXIgbGlicmFyaWVzRGF0YSA9IHRhcmdldERhdGFbImxpYnJhcmllcyJdOwogICAgICBpZiAobGlicmFyaWVzRGF0YSBpcyEgTWFwKSB7CiAgICAgICAgcmV0dXJuIF9yZXBvcnRFcnJvcigibGlicmFyaWVzIGVudHJ5IGZvciAnJHRhcmdldE5hbWUnIGlzIG5vdCBhIG1hcCIpOwogICAgICB9CiAgICAgIGxpYnJhcmllc0RhdGEuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIGRhdGEpIHsKICAgICAgICBpZiAoZGF0YSBpcyEgTWFwKSB7CiAgICAgICAgICByZXR1cm4gX3JlcG9ydEVycm9yKAogICAgICAgICAgICAgICJsaWJyYXJ5IGRhdGEgZm9yICckbmFtZScgaW4gdGFyZ2V0ICckdGFyZ2V0TmFtZScgaXMgbm90IGEgbWFwIik7CiAgICAgICAgfQogICAgICAgIFVyaSBjaGVja0FuZFJlc29sdmUodXJpU3RyaW5nKSB7CiAgICAgICAgICBpZiAodXJpU3RyaW5nIGlzISBTdHJpbmcpIHsKICAgICAgICAgICAgcmV0dXJuIF9yZXBvcnRFcnJvcigidXJpIHZhbHVlICckdXJpU3RyaW5nJyBpcyBub3QgYSBzdHJpbmciCiAgICAgICAgICAgICAgICAiKGZyb20gbGlicmFyeSAnJG5hbWUnIGluIHRhcmdldCAnJHRhcmdldE5hbWUnKSIpOwogICAgICAgICAgfQogICAgICAgICAgdmFyIHVyaSA9IFVyaS5wYXJzZSh1cmlTdHJpbmcpOwogICAgICAgICAgaWYgKHVyaS5zY2hlbWUgIT0gJycgJiYgdXJpLnNjaGVtZSAhPSAnZmlsZScpIHsKICAgICAgICAgICAgcmV0dXJuIF9yZXBvcnRFcnJvcigidXJpIHNjaGVtZSBpbiAnJHVyaVN0cmluZycgaXMgbm90IHN1cHBvcnRlZC4iKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBiYXNlVXJpLnJlc29sdmVVcmkodXJpKTsKICAgICAgICB9CgogICAgICAgIHZhciB1cmkgPSBjaGVja0FuZFJlc29sdmUoZGF0YVsndXJpJ10pOwogICAgICAgIExpc3Q8VXJpPiBwYXRjaGVzOwogICAgICAgIGlmIChkYXRhWydwYXRjaGVzJ10gaXMgTGlzdCkgewogICAgICAgICAgcGF0Y2hlcyA9CiAgICAgICAgICAgICAgZGF0YVsncGF0Y2hlcyddLm1hcDxVcmk+KChzKSA9PiBiYXNlVXJpLnJlc29sdmUocykpLnRvTGlzdCgpOwogICAgICAgIH0gZWxzZSBpZiAoZGF0YVsncGF0Y2hlcyddIGlzIFN0cmluZykgewogICAgICAgICAgcGF0Y2hlcyA9IFtjaGVja0FuZFJlc29sdmUoZGF0YVsncGF0Y2hlcyddKV07CiAgICAgICAgfSBlbHNlIGlmIChkYXRhWydwYXRjaGVzJ10gPT0gbnVsbCkgewogICAgICAgICAgcGF0Y2hlcyA9IGNvbnN0IFtdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gX3JlcG9ydEVycm9yKAogICAgICAgICAgICAgICJwYXRjaGVzIGVudHJ5IGZvciAnJG5hbWUnIGlzIG5vdCBhIGxpc3Qgb3IgYSBzdHJpbmciKTsKICAgICAgICB9CgogICAgICAgIHZhciBzdXBwb3J0ZWQgPSBkYXRhWydzdXBwb3J0ZWQnXSA/PyB0cnVlOwogICAgICAgIGlmIChzdXBwb3J0ZWQgaXMhIGJvb2wpIHsKICAgICAgICAgIHJldHVybiBfcmVwb3J0RXJyb3IoIlwic3VwcG9ydGVkXCIgZW50cnk6IGV4cGVjdGVkIGEgJ2Jvb2wnIGJ1dCAiCiAgICAgICAgICAgICAgImdvdCBhICcke3N1cHBvcnRlZC5ydW50aW1lVHlwZX0nICgnJHN1cHBvcnRlZCcpIik7CiAgICAgICAgfQogICAgICAgIGxpYnJhcmllc1tuYW1lXSA9CiAgICAgICAgICAgIG5ldyBMaWJyYXJ5SW5mbyhuYW1lLCB1cmksIHBhdGNoZXMsIGlzU3VwcG9ydGVkOiBzdXBwb3J0ZWQpOwogICAgICB9KTsKICAgICAgdGFyZ2V0c1t0YXJnZXROYW1lXSA9CiAgICAgICAgICBuZXcgVGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbih0YXJnZXROYW1lLCBsaWJyYXJpZXMpOwogICAgfSk7CiAgICByZXR1cm4gbmV3IExpYnJhcmllc1NwZWNpZmljYXRpb24odGFyZ2V0cyk7CiAgfQoKICBzdGF0aWMgX3JlcG9ydEVycm9yKFN0cmluZyBlcnJvcikgPT4KICAgICAgdGhyb3cgbmV3IExpYnJhcmllc1NwZWNpZmljYXRpb25FeGNlcHRpb24oZXJyb3IpOwoKICAvLy8gU2VyaWFsaXplIHRoaXMgc3BlY2lmaWNhdGlvbiB0byBqc29uLgogIC8vLwogIC8vLyBJZiBwb3NzaWJsZSBzZXJpYWxpemVzIHBhdGhzIHJlbGF0aXZlIHRvIFtvdXRwdXRVcmldLgogIFN0cmluZyB0b0pzb25TdHJpbmcoVXJpIG91dHB1dFVyaSkgPT4ganNvbkVuY29kZSh0b0pzb25NYXAob3V0cHV0VXJpKSk7CgogIE1hcCB0b0pzb25NYXAoVXJpIG91dHB1dFVyaSkgewogICAgdmFyIHJlc3VsdCA9IHt9OwogICAgdmFyIGRpciA9IG91dHB1dFVyaS5yZXNvbHZlKCcuJyk7CiAgICBTdHJpbmcgcGF0aEZvcihVcmkgdXJpKSA9PiByZWxhdGl2aXplVXJpKGRpciwgdXJpLCBpc1dpbmRvd3MpOwogICAgX3RhcmdldHMuZm9yRWFjaCgodGFyZ2V0TmFtZSwgdGFyZ2V0KSB7CiAgICAgIHZhciBsaWJyYXJpZXMgPSB7fTsKICAgICAgdGFyZ2V0Ll9saWJyYXJpZXMuZm9yRWFjaCgobmFtZSwgbGliKSB7CiAgICAgICAgbGlicmFyaWVzW25hbWVdID0gewogICAgICAgICAgJ3VyaSc6IHBhdGhGb3IobGliLnVyaSksCiAgICAgICAgICAncGF0Y2hlcyc6IGxpYi5wYXRjaGVzLm1hcChwYXRoRm9yKS50b0xpc3QoKSwKICAgICAgICB9OwogICAgICAgIGlmICghbGliLmlzU3VwcG9ydGVkKSB7CiAgICAgICAgICBsaWJyYXJpZXNbbmFtZV1bJ3N1cHBvcnRlZCddID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmVzdWx0W3RhcmdldE5hbWVdID0geydsaWJyYXJpZXMnOiBsaWJyYXJpZXN9OwogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKLy8vIFNwZWNpZmllcyBpbmZvcm1hdGlvbiBhYm91dCBhbGwgbGlicmFyaWVzIHN1cHBvcnRlZCBieSBhIGdpdmVuIHRhcmdldC4KY2xhc3MgVGFyZ2V0TGlicmFyaWVzU3BlY2lmaWNhdGlvbiB7CiAgLy8vIE5hbWUgb2YgdGhlIHRhcmdldCBwbGF0Zm9ybS4KICBmaW5hbCBTdHJpbmcgdGFyZ2V0TmFtZTsKCiAgZmluYWwgTWFwPFN0cmluZywgTGlicmFyeUluZm8+IF9saWJyYXJpZXM7CgogIGNvbnN0IFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb24odGhpcy50YXJnZXROYW1lLAogICAgICBbdGhpcy5fbGlicmFyaWVzID0gY29uc3QgPFN0cmluZywgTGlicmFyeUluZm8+e31dKTsKCiAgLy8vIERldGFpbHMgYWJvdXQgYSBsaWJyYXJ5IHdob3NlIGltcG9ydCBpcyBgZGFydDokbmFtZWAuCiAgTGlicmFyeUluZm8gbGlicmFyeUluZm9Gb3IoU3RyaW5nIG5hbWUpID0+IF9saWJyYXJpZXNbbmFtZV07CgogIEl0ZXJhYmxlPExpYnJhcnlJbmZvPiBnZXQgYWxsTGlicmFyaWVzID0+IF9saWJyYXJpZXMudmFsdWVzOwp9CgovLy8gSW5mb3JtYXRpb24gYWJvdXQgYSBgZGFydDpgIGxpYnJhcnkgaW4gYSBzcGVjaWZpYyB0YXJnZXQgcGxhdGZvcm0uCmNsYXNzIExpYnJhcnlJbmZvIHsKICAvLy8gVGhlIG5hbWUgb2YgdGhlIGxpYnJhcnksIHdoaWNoIGlzIHRoZSBwYXRoIGRldmVsb3BlcnMgdXNlIHRvIGltcG9ydCB0aGlzCiAgLy8vIGxpYnJhcnkgKGFzIGBkYXJ0OiRuYW1lYCkuCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIC8vLyBUaGUgZmlsZSBkZWZpbmluZyB0aGUgbWFpbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGlicmFyeS4KICBmaW5hbCBVcmkgdXJpOwoKICAvLy8gUGF0Y2ggZmlsZXMgdXNlZCBmb3IgdGhpcyBsaWJyYXJ5IGluIHRoZSB0YXJnZXQgcGxhdGZvcm0sIGlmIGFueS4KICBmaW5hbCBMaXN0PFVyaT4gcGF0Y2hlczsKCiAgLy8vIFdoZXRoZXIgdGhlIGxpYnJhcnkgaXMgc3VwcG9ydGVkIGFuZCB0aHVzIGBkYXJ0LmxpYnJhcnkubmFtZWAgaXMgInRydWUiCiAgLy8vIGZvciBjb25kaXRpb25hbCBpbXBvcnRzIGFuZCBmcm9tRW52aXJvbm1lbnQgY29uc3RhbnRzLgogIGZpbmFsIGJvb2wgaXNTdXBwb3J0ZWQ7CgogIGNvbnN0IExpYnJhcnlJbmZvKHRoaXMubmFtZSwgdGhpcy51cmksIHRoaXMucGF0Y2hlcywKICAgICAge3RoaXMuaXNTdXBwb3J0ZWQ6IHRydWV9KTsKfQoKY2xhc3MgTGlicmFyaWVzU3BlY2lmaWNhdGlvbkV4Y2VwdGlvbiB7CiAgT2JqZWN0IGVycm9yOwogIExpYnJhcmllc1NwZWNpZmljYXRpb25FeGNlcHRpb24odGhpcy5lcnJvcik7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICckZXJyb3InOwp9CoELAE5OPAE0BFFRLQRGPQQwBAoSGxotIDIxFRIbLjkSHTISHTImEg4MCgQZTEkEUB8EUFFQGQRROARQUEIETEccBFBIS0MESklPT05RS08xBARMNyceRQRGTzEBNjMBOzkBNwRQDx88ASBJAUsRQSceMTwGFwQBUBwGTRZCPRIKIxpFCB4lNAY8NzpEIB1ECDI0QQgzI08IMhwfUAopJklDDCo6UQwqCgEwGycUTDA4Lh4RH0YKATMiTEIKGkkKHEMIMAQBJzgBLAY8SgEhFSZDLBouHCM4CyAwCgo1CBMEAgFLJSMbAS0BNjoBPD8BPwIBRxRPIRUBQBEBSBsBTj0aATchAgEoEC8BIQIBN3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9iYXNlL2xpYnJhcmllc19zcGVjaWZpY2F0aW9uLmRhcnQ6c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2NvbXBpbGVyX2NvbnRleHQuZGFydJQnLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuY29tcGlsZXJfY29udGV4dDsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmUsIFpvbmUsIHJ1blpvbmVkOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBTb3VyY2U7CgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCcgc2hvdyBGaWxlU3lzdGVtOwoKaW1wb3J0ICcuLi9iYXNlL3Byb2Nlc3NlZF9vcHRpb25zLmRhcnQnIHNob3cgUHJvY2Vzc2VkT3B0aW9uczsKCmltcG9ydCAnc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFN0cmluZ1Rva2VuOwoKaW1wb3J0ICdjb21tYW5kX2xpbmVfcmVwb3J0aW5nLmRhcnQnIGFzIGNvbW1hbmRfbGluZV9yZXBvcnRpbmc7CgppbXBvcnQgJ2NvbG9ycy5kYXJ0JyBzaG93IGNvbXB1dGVFbmFibGVDb2xvcnM7CgppbXBvcnQgJ2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93IExvY2F0ZWRNZXNzYWdlLCBNZXNzYWdlLCBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtTWlzc2luZ0NvbnRleHQ7CgppbXBvcnQgJ3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgpmaW5hbCBPYmplY3QgY29tcGlsZXJDb250ZXh0S2V5ID0gbmV3IE9iamVjdCgpOwoKLy8vIFNoYXJlZCBjb250ZXh0IHVzZWQgdGhyb3VnaG91dCB0aGUgY29tcGlsZXIuCi8vLwovLy8gVGhlIGNvbXBpbGVyIHdvcmtzIHdpdGggYSBzaW5nbGUgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcy4gVG8gYXZvaWQKLy8vIHBhc3NpbmcgaXQgYXJvdW5kIGFzIGFuIGFyZ3VtZW50IGV2ZXJ5d2hlcmUsIGl0IGlzIHN0b3JlZCBhcyBhIHpvbmUtdmFsdWUuCi8vLwovLy8gRm9yIGNvbnZlbmllbmNlIHRoZSBzdGF0aWMgZ2V0dGVyIFtDb21waWxlckNvbnRleHQuY3VycmVudF0gcmV0cmlldmVzIHRoZQovLy8gY29udGV4dCBzdG9yZWQgaW4gdGhlIGN1cnJlbnQgem9uZS4KY2xhc3MgQ29tcGlsZXJDb250ZXh0IHsKICAvLyBUT0RPKHNpZ211bmQpOiBNb3ZlIGhlcmUgYW55IG1ldGhvZCBpbiBQcm9jZXNzZWRPcHRpb25zIHRoYXQgZG9lc24ndCBzZWVtCiAgLy8gYXBwcm9wcmlhdGUgYXMgYW4gIm9wdGlvbiIsIG9yIGNvbnNpZGVyIG1lcmdpbmcgUHJvY2Vzc2VkT3B0aW9ucyBlbnRpcmVseQogIC8vIHdpdGhpbiB0aGlzIGNsYXNzLCBhbmQgZGVwZW5kIG9ubHkgb24gdGhlIHJhdyBvcHRpb25zIGhlcmUuCiAgZmluYWwgUHJvY2Vzc2VkT3B0aW9ucyBvcHRpb25zOwoKICAvLy8gU291cmNlcyBzZWVuIGJ5IHRoZSBjb21waWxlci4KICAvLy8KICAvLy8gVGhpcyBpcyBwb3B1bGF0ZWQgYXMgdGhlIGNvbXBpbGVyIHJlYWRzIGZpbGVzLCBhbmQgaXQgaXMgdXNlZCBmb3IgZXJyb3IKICAvLy8gcmVwb3J0aW5nIGFuZCB0byBnZW5lcmF0ZSBzb3VyY2UgbG9jYXRpb24gaW5mb3JtYXRpb24gaW4gdGhlIGNvbXBpbGVkCiAgLy8vIHByb2dyYW1zLgogIGZpbmFsIE1hcDxVcmksIFNvdXJjZT4gdXJpVG9Tb3VyY2UgPSA8VXJpLCBTb3VyY2U+e307CgogIC8vIFRPRE8oYWhlKTogUmVtb3ZlIHRoaXMuCiAgZmluYWwgTGlzdDxPYmplY3Q+IGVycm9ycyA9IDxPYmplY3Q+W107CgogIGZpbmFsIExpc3Q8VXJpPiBkZXBlbmRlbmNpZXMgPSA8VXJpPltdOwoKICBGaWxlU3lzdGVtIGdldCBmaWxlU3lzdGVtID0+IG9wdGlvbnMuZmlsZVN5c3RlbTsKCiAgYm9vbCBlbmFibGVDb2xvcnNDYWNoZWQgPSBudWxsOwoKICBVcmkgY2FjaGVkU2RrUm9vdCA9IG51bGw7CgogIENvbXBpbGVyQ29udGV4dCh0aGlzLm9wdGlvbnMpOwoKICB2b2lkIGRpc2FibGVDb2xvcnMoKSB7CiAgICBlbmFibGVDb2xvcnNDYWNoZWQgPSBmYWxzZTsKICB9CgogIC8vLyBSZXBvcnQgW21lc3NhZ2VdLCBmb3IgZXhhbXBsZSwgYnkgcHJpbnRpbmcgaXQuCiAgdm9pZCByZXBvcnQoTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwgU2V2ZXJpdHkgc2V2ZXJpdHksCiAgICAgIHtMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgb3B0aW9ucy5yZXBvcnQobWVzc2FnZSwgc2V2ZXJpdHksIGNvbnRleHQ6IGNvbnRleHQpOwogIH0KCiAgLy8vIFJlcG9ydCBbbWVzc2FnZV0sIGZvciBleGFtcGxlLCBieSBwcmludGluZyBpdC4KICAvLyBUT0RPKGFza2VzYyk6IFJlbW92ZSB0aGlzIGFuZCBkaXJlY3QgY2FsbGVycyBkaXJlY3RseSB0byByZXBvcnQuCiAgdm9pZCByZXBvcnRXaXRob3V0TG9jYXRpb24oTWVzc2FnZSBtZXNzYWdlLCBTZXZlcml0eSBzZXZlcml0eSkgewogICAgb3B0aW9ucy5yZXBvcnRXaXRob3V0TG9jYXRpb24obWVzc2FnZSwgc2V2ZXJpdHkpOwogIH0KCiAgLy8vIEZvcm1hdCBbbWVzc2FnZV0gYXMgYSB0ZXh0IHN0cmluZyB0aGF0IGNhbiBiZSBpbmNsdWRlZCBpbiBnZW5lcmF0ZWQgY29kZS4KICBTdHJpbmcgZm9ybWF0KExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UsIFNldmVyaXR5IHNldmVyaXR5KSB7CiAgICByZXR1cm4gY29tbWFuZF9saW5lX3JlcG9ydGluZy5mb3JtYXQobWVzc2FnZSwgc2V2ZXJpdHkpOwogIH0KCiAgLy8vIEZvcm1hdCBbbWVzc2FnZV0gYXMgYSB0ZXh0IHN0cmluZyB0aGF0IGNhbiBiZSBpbmNsdWRlZCBpbiBnZW5lcmF0ZWQgY29kZS4KICAvLyBUT0RPKGFza2VzYyk6IFJlbW92ZSB0aGlzIGFuZCBkaXJlY3QgY2FsbGVycyBkaXJlY3RseSB0byBmb3JtYXQuCiAgU3RyaW5nIGZvcm1hdFdpdGhvdXRMb2NhdGlvbihNZXNzYWdlIG1lc3NhZ2UsIFNldmVyaXR5IHNldmVyaXR5KSB7CiAgICByZXR1cm4gY29tbWFuZF9saW5lX3JlcG9ydGluZy5mb3JtYXQobWVzc2FnZS53aXRob3V0TG9jYXRpb24oKSwgc2V2ZXJpdHkpOwogIH0KCiAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcy4KICB2b2lkIGxvZ0Vycm9yKE9iamVjdCBtZXNzYWdlLCBTZXZlcml0eSBzZXZlcml0eSkgewogICAgZXJyb3JzLmFkZChtZXNzYWdlKTsKICAgIGVycm9ycy5hZGQoc2V2ZXJpdHkpOwogIH0KCiAgc3RhdGljIHZvaWQgcmVjb3JkRGVwZW5kZW5jeShVcmkgdXJpKSB7CiAgICBpZiAodXJpLnNjaGVtZSAhPSAiZmlsZSIpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkV4cGVjdGVkIGEgZmlsZS1VUkksIGJ1dCBnb3Q6ICckdXJpJy4iKTsKICAgIH0KICAgIENvbXBpbGVyQ29udGV4dCBjb250ZXh0ID0gWm9uZS5jdXJyZW50W2NvbXBpbGVyQ29udGV4dEtleV07CiAgICBpZiAoY29udGV4dCAhPSBudWxsKSB7CiAgICAgIGNvbnRleHQuZGVwZW5kZW5jaWVzLmFkZCh1cmkpOwogICAgfQogIH0KCiAgc3RhdGljIENvbXBpbGVyQ29udGV4dCBnZXQgY3VycmVudCB7CiAgICBDb21waWxlckNvbnRleHQgY29udGV4dCA9IFpvbmUuY3VycmVudFtjb21waWxlckNvbnRleHRLZXldOwogICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgewogICAgICAvLyBOb3RlOiB3ZSB0aHJvdyBkaXJlY3RseSBhbmQgZG9uJ3QgdXNlIGludGVybmFsUHJvYmxlbSwgYmVjYXVzZQogICAgICAvLyBpbnRlcm5hbFByb2JsZW0gZGVwZW5kcyBvbiBoYXZpbmcgYSBjb21waWxlciBjb250ZXh0IGF2YWlsYWJsZS4KICAgICAgdmFyIG1lc3NhZ2UgPSBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtTWlzc2luZ0NvbnRleHQubWVzc2FnZTsKICAgICAgdmFyIHRpcCA9IG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1NaXNzaW5nQ29udGV4dC50aXA7CiAgICAgIHRocm93ICJJbnRlcm5hbCBwcm9ibGVtOiAkbWVzc2FnZVxuVGlwOiAkdGlwIjsKICAgIH0KICAgIHJldHVybiBjb250ZXh0OwogIH0KCiAgc3RhdGljIGJvb2wgZ2V0IGlzQWN0aXZlID0+IFpvbmUuY3VycmVudFtjb21waWxlckNvbnRleHRLZXldICE9IG51bGw7CgogIC8vLyBQZXJmb3JtIFthY3Rpb25dIGluIGEgW1pvbmVdIHdoZXJlIFt0aGlzXSB3aWxsIGJlIGF2YWlsYWJsZSBhcwogIC8vLyBgQ29tcGlsZXJDb250ZXh0LmN1cnJlbnRgLgogIEZ1dHVyZTxUPiBydW5JbkNvbnRleHQ8VD4oRnV0dXJlPFQ+IGFjdGlvbihDb21waWxlckNvbnRleHQgYykpIHsKICAgIHJldHVybiBydW5ab25lZCgKICAgICAgICAoKSA9PiBuZXcgRnV0dXJlPFQ+LnN5bmMoKCkgPT4gYWN0aW9uKHRoaXMpKS53aGVuQ29tcGxldGUoY2xlYXIpLAogICAgICAgIHpvbmVWYWx1ZXM6IHtjb21waWxlckNvbnRleHRLZXk6IHRoaXN9KTsKICB9CgogIC8vLyBQZXJmb3JtIFthY3Rpb25dIGluIGEgW1pvbmVdIHdoZXJlIFtvcHRpb25zXSB3aWxsIGJlIGF2YWlsYWJsZSBhcwogIC8vLyBgQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9uc2AuCiAgc3RhdGljIEZ1dHVyZTxUPiBydW5XaXRoT3B0aW9uczxUPigKICAgICAgUHJvY2Vzc2VkT3B0aW9ucyBvcHRpb25zLCBGdXR1cmU8VD4gYWN0aW9uKENvbXBpbGVyQ29udGV4dCBjKSwKICAgICAge2Jvb2wgZXJyb3JPbk1pc3NpbmdJbnB1dDogdHJ1ZX0pIHsKICAgIHJldHVybiBuZXcgQ29tcGlsZXJDb250ZXh0KG9wdGlvbnMpCiAgICAgICAgLnJ1bkluQ29udGV4dDxUPigoQ29tcGlsZXJDb250ZXh0IGMpIGFzeW5jIHsKICAgICAgYXdhaXQgb3B0aW9ucy52YWxpZGF0ZU9wdGlvbnMoZXJyb3JPbk1pc3NpbmdJbnB1dDogZXJyb3JPbk1pc3NpbmdJbnB1dCk7CiAgICAgIHJldHVybiBhY3Rpb24oYyk7CiAgICB9KTsKICB9CgogIHN0YXRpYyBGdXR1cmU8VD4gcnVuV2l0aERlZmF1bHRPcHRpb25zPFQ+KAogICAgICBGdXR1cmU8VD4gYWN0aW9uKENvbXBpbGVyQ29udGV4dCBjKSkgewogICAgcmV0dXJuIG5ldyBDb21waWxlckNvbnRleHQobmV3IFByb2Nlc3NlZE9wdGlvbnMoKSkucnVuSW5Db250ZXh0PFQ+KGFjdGlvbik7CiAgfQoKICBzdGF0aWMgYm9vbCBnZXQgZW5hYmxlQ29sb3JzIHsKICAgIHJldHVybiBjdXJyZW50LmVuYWJsZUNvbG9yc0NhY2hlZCA/Pz0gY29tcHV0ZUVuYWJsZUNvbG9ycyhjdXJyZW50KTsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBTdHJpbmdUb2tlbi5jYW5vbmljYWxpemVyLmNsZWFyKCk7CiAgICBlcnJvcnMuY2xlYXIoKTsKICAgIGRlcGVuZGVuY2llcy5jbGVhcigpOwogIH0KfQqAmgBOTjwBIAExAS4BPAE/AS4BQAEvARpIASYBMAExBEZPBE4oGE9PQSIBJAZOTBA4AR0qASoBMwEiARwBIQEZIAQBNTkoOQQBNUZDNgQBUD09BAFQRkVPBAEdNRkaBAEqIEgGQBslBgQBJ0AbSElCOjUGFAQBSAFFIUMVSjEEAUgpJkUqKDVPGAgEAS0tUAQBIUgEAREnFBoEAgExcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2NvbXBpbGVyX2NvbnRleHQuZGFydDVzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvZmFzdGFfY29kZXMuZGFydJubLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuY29kZXM7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyBKc29uRW5jb2RlciwganNvbjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93IENvbnN0YW50LCBEYXJ0VHlwZSwgZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZTsKCmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9kaWFnbm9zdGljX21lc3NhZ2UuZGFydCcgc2hvdyBEaWFnbm9zdGljTWVzc2FnZTsKCmltcG9ydCAnLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICdrZXJuZWwvdHlwZV9sYWJlbGVyLmRhcnQnOwoKaW1wb3J0ICdzZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICdyZXNvbHZlX2lucHV0X3VyaS5kYXJ0JyBzaG93IGlzV2luZG93czsKCmltcG9ydCAndXRpbC9yZWxhdGl2aXplLmRhcnQnIGFzIHV0aWwgc2hvdyByZWxhdGl2aXplVXJpOwoKcGFydCAnZmFzdGFfY29kZXNfZ2VuZXJhdGVkLmRhcnQnOwoKY29uc3QgaW50IG5vTGVuZ3RoID0gMTsKCmNsYXNzIENvZGU8VD4gewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8gVGhlIHVuaXF1ZSBwb3NpdGl2ZSBpbnRlZ2VyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvZGUsCiAgLy8vIG9yIGAtMWAgaWYgbm9uZS4gVGhpcyBpbmRleCBpcyB1c2VkIHdoZW4gdHJhbnNsYXRpbmcKICAvLy8gdGhpcyBlcnJvciB0byBpdHMgY29ycmVzcG9uZGluZyBBbmFseXplciBlcnJvci4KICBmaW5hbCBpbnQgaW5kZXg7CgogIGZpbmFsIFRlbXBsYXRlPFQ+IHRlbXBsYXRlOwoKICBmaW5hbCBMaXN0PFN0cmluZz4gYW5hbHl6ZXJDb2RlczsKCiAgZmluYWwgU2V2ZXJpdHkgc2V2ZXJpdHk7CgogIGNvbnN0IENvZGUodGhpcy5uYW1lLCB0aGlzLnRlbXBsYXRlLAogICAgICB7aW50IGluZGV4LCB0aGlzLmFuYWx5emVyQ29kZXMsIHRoaXMuc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yfSkKICAgICAgOiB0aGlzLmluZGV4ID0gaW5kZXggPz8gLTE7CgogIFN0cmluZyB0b1N0cmluZygpID0+IG5hbWU7Cn0KCmNsYXNzIE1lc3NhZ2UgewogIGZpbmFsIENvZGU8ZHluYW1pYz4gY29kZTsKCiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIGZpbmFsIFN0cmluZyB0aXA7CgogIGZpbmFsIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGFyZ3VtZW50czsKCiAgY29uc3QgTWVzc2FnZSh0aGlzLmNvZGUsIHt0aGlzLm1lc3NhZ2UsIHRoaXMudGlwLCB0aGlzLmFyZ3VtZW50c30pOwoKICBMb2NhdGVkTWVzc2FnZSB3aXRoTG9jYXRpb24oVXJpIHVyaSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgTG9jYXRlZE1lc3NhZ2UodXJpLCBjaGFyT2Zmc2V0LCBsZW5ndGgsIHRoaXMpOwogIH0KCiAgTG9jYXRlZE1lc3NhZ2Ugd2l0aG91dExvY2F0aW9uKCkgewogICAgcmV0dXJuIG5ldyBMb2NhdGVkTWVzc2FnZShudWxsLCAtMSwgbm9MZW5ndGgsIHRoaXMpOwogIH0KfQoKY2xhc3MgTWVzc2FnZUNvZGUgZXh0ZW5kcyBDb2RlPE51bGw+IGltcGxlbWVudHMgTWVzc2FnZSB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIGZpbmFsIFN0cmluZyB0aXA7CgogIGNvbnN0IE1lc3NhZ2VDb2RlKFN0cmluZyBuYW1lLAogICAgICB7aW50IGluZGV4LAogICAgICBMaXN0PFN0cmluZz4gYW5hbHl6ZXJDb2RlcywKICAgICAgU2V2ZXJpdHkgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yLAogICAgICB0aGlzLm1lc3NhZ2UsCiAgICAgIHRoaXMudGlwfSkKICAgICAgOiBzdXBlcihuYW1lLCBudWxsLAogICAgICAgICAgICBpbmRleDogaW5kZXgsIGFuYWx5emVyQ29kZXM6IGFuYWx5emVyQ29kZXMsIHNldmVyaXR5OiBzZXZlcml0eSk7CgogIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGdldCBhcmd1bWVudHMgPT4gY29uc3QgPFN0cmluZywgZHluYW1pYz57fTsKCiAgQ29kZTxkeW5hbWljPiBnZXQgY29kZSA9PiB0aGlzOwoKICBAb3ZlcnJpZGUKICBMb2NhdGVkTWVzc2FnZSB3aXRoTG9jYXRpb24oVXJpIHVyaSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgpIHsKICAgIHJldHVybiBuZXcgTG9jYXRlZE1lc3NhZ2UodXJpLCBjaGFyT2Zmc2V0LCBsZW5ndGgsIHRoaXMpOwogIH0KCiAgTG9jYXRlZE1lc3NhZ2Ugd2l0aG91dExvY2F0aW9uKCkgewogICAgcmV0dXJuIG5ldyBMb2NhdGVkTWVzc2FnZShudWxsLCAtMSwgbm9MZW5ndGgsIHRoaXMpOwogIH0KfQoKY2xhc3MgVGVtcGxhdGU8VD4gewogIGZpbmFsIFN0cmluZyBtZXNzYWdlVGVtcGxhdGU7CgogIGZpbmFsIFN0cmluZyB0aXBUZW1wbGF0ZTsKCiAgZmluYWwgVCB3aXRoQXJndW1lbnRzOwoKICBjb25zdCBUZW1wbGF0ZSh7dGhpcy5tZXNzYWdlVGVtcGxhdGUsIHRoaXMudGlwVGVtcGxhdGUsIHRoaXMud2l0aEFyZ3VtZW50c30pOwp9CgpjbGFzcyBMb2NhdGVkTWVzc2FnZSBpbXBsZW1lbnRzIENvbXBhcmFibGU8TG9jYXRlZE1lc3NhZ2U+IHsKICBmaW5hbCBVcmkgdXJpOwoKICBmaW5hbCBpbnQgY2hhck9mZnNldDsKCiAgZmluYWwgaW50IGxlbmd0aDsKCiAgZmluYWwgTWVzc2FnZSBtZXNzYWdlT2JqZWN0OwoKICBjb25zdCBMb2NhdGVkTWVzc2FnZSgKICAgICAgdGhpcy51cmksIHRoaXMuY2hhck9mZnNldCwgdGhpcy5sZW5ndGgsIHRoaXMubWVzc2FnZU9iamVjdCk7CgogIENvZGU8ZHluYW1pYz4gZ2V0IGNvZGUgPT4gbWVzc2FnZU9iamVjdC5jb2RlOwoKICBTdHJpbmcgZ2V0IG1lc3NhZ2UgPT4gbWVzc2FnZU9iamVjdC5tZXNzYWdlOwoKICBTdHJpbmcgZ2V0IHRpcCA9PiBtZXNzYWdlT2JqZWN0LnRpcDsKCiAgTWFwPFN0cmluZywgZHluYW1pYz4gZ2V0IGFyZ3VtZW50cyA9PiBtZXNzYWdlT2JqZWN0LmFyZ3VtZW50czsKCiAgaW50IGNvbXBhcmVUbyhMb2NhdGVkTWVzc2FnZSBvdGhlcikgewogICAgaW50IHJlc3VsdCA9ICIke3VyaX0iLmNvbXBhcmVUbygiJHtvdGhlci51cml9Iik7CiAgICBpZiAocmVzdWx0ICE9IDApIHJldHVybiByZXN1bHQ7CiAgICByZXN1bHQgPSBjaGFyT2Zmc2V0LmNvbXBhcmVUbyhvdGhlci5jaGFyT2Zmc2V0KTsKICAgIGlmIChyZXN1bHQgIT0gMCkgcmV0dXJuIHJlc3VsdDsKICAgIHJldHVybiBtZXNzYWdlLmNvbXBhcmVUbyhtZXNzYWdlKTsKICB9CgogIEZvcm1hdHRlZE1lc3NhZ2Ugd2l0aEZvcm1hdHRpbmcoU3RyaW5nIGZvcm1hdHRlZCwgaW50IGxpbmUsIGludCBjb2x1bW4sCiAgICAgIFNldmVyaXR5IHNldmVyaXR5LCBMaXN0PEZvcm1hdHRlZE1lc3NhZ2U+IHJlbGF0ZWRJbmZvcm1hdGlvbikgewogICAgcmV0dXJuIG5ldyBGb3JtYXR0ZWRNZXNzYWdlKAogICAgICAgIHRoaXMsIGZvcm1hdHRlZCwgbGluZSwgY29sdW1uLCBzZXZlcml0eSwgcmVsYXRlZEluZm9ybWF0aW9uKTsKICB9Cn0KCmNsYXNzIEZvcm1hdHRlZE1lc3NhZ2UgaW1wbGVtZW50cyBEaWFnbm9zdGljTWVzc2FnZSB7CiAgZmluYWwgTG9jYXRlZE1lc3NhZ2UgbG9jYXRlZE1lc3NhZ2U7CgogIGZpbmFsIFN0cmluZyBmb3JtYXR0ZWQ7CgogIGZpbmFsIGludCBsaW5lOwoKICBmaW5hbCBpbnQgY29sdW1uOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTZXZlcml0eSBzZXZlcml0eTsKCiAgZmluYWwgTGlzdDxGb3JtYXR0ZWRNZXNzYWdlPiByZWxhdGVkSW5mb3JtYXRpb247CgogIGNvbnN0IEZvcm1hdHRlZE1lc3NhZ2UodGhpcy5sb2NhdGVkTWVzc2FnZSwgdGhpcy5mb3JtYXR0ZWQsIHRoaXMubGluZSwKICAgICAgdGhpcy5jb2x1bW4sIHRoaXMuc2V2ZXJpdHksIHRoaXMucmVsYXRlZEluZm9ybWF0aW9uKTsKCiAgQ29kZTxkeW5hbWljPiBnZXQgY29kZSA9PiBsb2NhdGVkTWVzc2FnZS5jb2RlOwoKICBTdHJpbmcgZ2V0IG1lc3NhZ2UgPT4gbG9jYXRlZE1lc3NhZ2UubWVzc2FnZTsKCiAgU3RyaW5nIGdldCB0aXAgPT4gbG9jYXRlZE1lc3NhZ2UudGlwOwoKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXQgYXJndW1lbnRzID0+IGxvY2F0ZWRNZXNzYWdlLmFyZ3VtZW50czsKCiAgVXJpIGdldCB1cmkgPT4gbG9jYXRlZE1lc3NhZ2UudXJpOwoKICBpbnQgZ2V0IGNoYXJPZmZzZXQgPT4gbG9jYXRlZE1lc3NhZ2UuY2hhck9mZnNldDsKCiAgaW50IGdldCBsZW5ndGggPT4gbG9jYXRlZE1lc3NhZ2UubGVuZ3RoOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxTdHJpbmc+IGdldCBhbnNpRm9ybWF0dGVkIHN5bmMqIHsKICAgIHlpZWxkIGZvcm1hdHRlZDsKICAgIGlmIChyZWxhdGVkSW5mb3JtYXRpb24gIT0gbnVsbCkgewogICAgICBmb3IgKEZvcm1hdHRlZE1lc3NhZ2UgbSBpbiByZWxhdGVkSW5mb3JtYXRpb24pIHsKICAgICAgICB5aWVsZCBtLmZvcm1hdHRlZDsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgcGxhaW5UZXh0Rm9ybWF0dGVkIHsKICAgIC8vIFRPRE8oYWhlKTogSW1wbGVtZW50IHRoaXMgY29ycmVjdGx5LgogICAgcmV0dXJuIGFuc2lGb3JtYXR0ZWQ7CiAgfQoKICBNYXA8U3RyaW5nLCBPYmplY3Q+IHRvSnNvbigpIHsKICAgIC8vIFRoaXMgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIHBhY2thZ2U6a2VybmVsL3Byb2JsZW1zLm1kCiAgICByZXR1cm4gPFN0cmluZywgT2JqZWN0PnsKICAgICAgImFuc2lGb3JtYXR0ZWQiOiBhbnNpRm9ybWF0dGVkLnRvTGlzdCgpLAogICAgICAicGxhaW5UZXh0Rm9ybWF0dGVkIjogcGxhaW5UZXh0Rm9ybWF0dGVkLnRvTGlzdCgpLAogICAgICAic2V2ZXJpdHkiOiBzZXZlcml0eS5pbmRleCwKICAgICAgInVyaSI6IHVyaS50b1N0cmluZygpLAogICAgfTsKICB9CgogIFN0cmluZyB0b0pzb25TdHJpbmcoKSB7CiAgICBKc29uRW5jb2RlciBlbmNvZGVyID0gbmV3IEpzb25FbmNvZGVyLndpdGhJbmRlbnQoIiAgIik7CiAgICByZXR1cm4gZW5jb2Rlci5jb252ZXJ0KHRoaXMpOwogIH0KfQoKY2xhc3MgRGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbiBpbXBsZW1lbnRzIERpYWdub3N0aWNNZXNzYWdlIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBJdGVyYWJsZTxTdHJpbmc+IGFuc2lGb3JtYXR0ZWQ7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPFN0cmluZz4gcGxhaW5UZXh0Rm9ybWF0dGVkOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTZXZlcml0eSBzZXZlcml0eTsKCiAgZmluYWwgVXJpIHVyaTsKCiAgRGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbigKICAgICAgdGhpcy5hbnNpRm9ybWF0dGVkLCB0aGlzLnBsYWluVGV4dEZvcm1hdHRlZCwgdGhpcy5zZXZlcml0eSwgdGhpcy51cmkpOwoKICBmYWN0b3J5IERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24uZnJvbUpzb24oU3RyaW5nIGpzb25TdHJpbmcpIHsKICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZGVjb2RlZCA9IGpzb24uZGVjb2RlKGpzb25TdHJpbmcpOwogICAgTGlzdDxTdHJpbmc+IGFuc2lGb3JtYXR0ZWQgPQogICAgICAgIG5ldyBMaXN0PFN0cmluZz4uZnJvbShkZWNvZGVkWyJhbnNpRm9ybWF0dGVkIl0pOwogICAgTGlzdDxTdHJpbmc+IHBsYWluVGV4dEZvcm1hdHRlZCA9CiAgICAgICAgbmV3IExpc3Q8U3RyaW5nPi5mcm9tKGRlY29kZWRbInBsYWluVGV4dEZvcm1hdHRlZCJdKTsKICAgIFNldmVyaXR5IHNldmVyaXR5ID0gU2V2ZXJpdHkudmFsdWVzW2RlY29kZWRbInNldmVyaXR5Il1dOwogICAgVXJpIHVyaSA9IFVyaS5wYXJzZShkZWNvZGVkWyJ1cmkiXSk7CgogICAgcmV0dXJuIG5ldyBEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uKAogICAgICAgIGFuc2lGb3JtYXR0ZWQsIHBsYWluVGV4dEZvcm1hdHRlZCwgc2V2ZXJpdHksIHVyaSk7CiAgfQoKICBNYXA8U3RyaW5nLCBPYmplY3Q+IHRvSnNvbigpIHsKICAgIC8vIFRoaXMgc2hvdWxkIGJlIGtlcHQgaW4gc3luYyB3aXRoIHBhY2thZ2U6a2VybmVsL3Byb2JsZW1zLm1kCiAgICByZXR1cm4gPFN0cmluZywgT2JqZWN0PnsKICAgICAgImFuc2lGb3JtYXR0ZWQiOiBhbnNpRm9ybWF0dGVkLnRvTGlzdCgpLAogICAgICAicGxhaW5UZXh0Rm9ybWF0dGVkIjogcGxhaW5UZXh0Rm9ybWF0dGVkLnRvTGlzdCgpLAogICAgICAic2V2ZXJpdHkiOiBzZXZlcml0eS5pbmRleCwKICAgICAgInVyaSI6IHVyaS50b1N0cmluZygpLAogICAgfTsKICB9CgogIFN0cmluZyB0b0pzb25TdHJpbmcoKSB7CiAgICBKc29uRW5jb2RlciBlbmNvZGVyID0gbmV3IEpzb25FbmNvZGVyLndpdGhJbmRlbnQoIiAgIik7CiAgICByZXR1cm4gZW5jb2Rlci5jb252ZXJ0KHRoaXMpOwogIH0KfQoKU3RyaW5nIHJlbGF0aXZpemVVcmkoVXJpIHVyaSkgewogIC8vIFdlIGhhdmUgdGhpcyBtZXRob2QgaGVyZSBmb3IgdHdvIHJlYXNvbnM6CiAgLy8KICAvLyAxLiBJdCBhbGxvd3MgdXMgdG8gaW1wbGVtZW50ICN1cmkgbWVzc2FnZSBhcmd1bWVudCB3aXRob3V0IHVzaW5nIGl0CiAgLy8gKG90aGVyd2lzZSwgd2UgbWlnaHQgZ2V0IGFuIGBVTlVTRURfSU1QT1JUYCB3YXJuaW5nKS4KICAvLwogIC8vIDIuIFdlIGNhbiBjaGFuZ2UgYGJhc2VgIGFyZ3VtZW50IGhlcmUgaWYgbmVlZGVkLgogIHJldHVybiB1cmkgPT0gbnVsbCA/IG51bGwgOiB1dGlsLnJlbGF0aXZpemVVcmkoVXJpLmJhc2UsIHVyaSwgaXNXaW5kb3dzKTsKfQoKdHlwZWRlZiBTdW1tYXJ5VGVtcGxhdGUgPSBNZXNzYWdlIEZ1bmN0aW9uKGludCwgaW50LCBudW0sIG51bSwgbnVtKTsKClN0cmluZyBpdGVtaXplTmFtZXMoTGlzdDxTdHJpbmc+IG5hbWVzKSB7CiAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aCAtIDE7IGkrKykgewogICAgYnVmZmVyLndyaXRlKCIgLSAiKTsKICAgIGJ1ZmZlci53cml0ZWxuKG5hbWVzW2ldKTsKICB9CiAgYnVmZmVyLndyaXRlKCIgLSAiKTsKICBidWZmZXIud3JpdGUobmFtZXMubGFzdCk7CiAgcmV0dXJuICIkYnVmZmVyIjsKfQqBEABOTjwBFQEuASE7AUoBKwEjASYBMAE6ASMBGAEQFQE9OzYTAR4BJAEbASdGIgEdAgEQHAEYARQBKAFGAUU+BAElOQQCAToYARQBIRIiKRQRGk0BQwEiAQxFPgQBJTkEAgEUIAEcARkBUAIBPREBGAEUAR8BGEMBMAEvAScBQQEoNSQ1JCcEAUpGIUYEAgE2JwEaARIBFAEMGwEzAUk8ATEBMAEoAUIBJQEzASsBDC0VJjcbCAYEAQwsLBoEASFDHS85Ih0HBAEaPCIEAgE/DCgBDC0BDBsBEQEdTQFCOyE5Jj4+KQEqOwQBIUMdLzkiHQcEARo8IgQCASAvBUk7BTZMAgFFASosLxkeBBccFAIBLHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9mYXN0YV9jb2Rlcy5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9mYXN0YV9jb2Rlc19nZW5lcmF0ZWQuZGFydMAGw/4vLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gTk9URTogVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gRE8gTk9UIEVESVQuCi8vCi8vIEluc3RlYWQgbW9kaWZ5ICdwa2cvZnJvbnRfZW5kL21lc3NhZ2VzLnlhbWwnIGFuZCBydW4KLy8gJ3BrZy9mcm9udF9lbmQvdG9vbC9mYXN0YSBnZW5lcmF0ZS1tZXNzYWdlcycgdG8gdXBkYXRlLgoKcGFydCBvZiBmYXN0YS5jb2RlczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiVGhlIGNsYXNzICcjbmFtZScgaXMgYWJzdHJhY3QgYW5kIGNhbid0IGJlIGluc3RhbnRpYXRlZC4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uIiwgdGVtcGxhdGVBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTkVXX1dJVEhfQUJTVFJBQ1RfQ0xBU1MiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uLAogICAgICBtZXNzYWdlOiAiIiJUaGUgY2xhc3MgJyR7bmFtZX0nIGlzIGFic3RyYWN0IGFuZCBjYW4ndCBiZSBpbnN0YW50aWF0ZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQWJzdHJhY3RDbGFzc01lbWJlciA9IG1lc3NhZ2VBYnN0cmFjdENsYXNzTWVtYmVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUFic3RyYWN0Q2xhc3NNZW1iZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJBYnN0cmFjdENsYXNzTWVtYmVyIiwKICAgIGluZGV4OiA1MSwKICAgIG1lc3NhZ2U6IHIiIiJNZW1iZXJzIG9mIGNsYXNzZXMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2Fic3RyYWN0Jy4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGUgJ2Fic3RyYWN0JyBrZXl3b3JkLiBZb3UgY2FuIGFkZCB0aGUgJ2Fic3RyYWN0JyBrZXl3b3JkIGJlZm9yZSB0aGUgY2xhc3MgZGVjbGFyYXRpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUFic3RyYWN0Tm90U3luYyA9IG1lc3NhZ2VBYnN0cmFjdE5vdFN5bmM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQWJzdHJhY3ROb3RTeW5jID0gY29uc3QgTWVzc2FnZUNvZGUoIkFic3RyYWN0Tm90U3luYyIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9OX1NZTkNfQUJTVFJBQ1RfTUVUSE9EIl0sCiAgICBtZXNzYWdlOiByIiIiQWJzdHJhY3QgbWV0aG9kcyBjYW4ndCB1c2UgJ2FzeW5jJywgJ2FzeW5jKicsIG9yICdzeW5jKicuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlQWJzdHJhY3RSZWRpcmVjdGVkQ2xhc3NJbnN0YW50aWF0aW9uID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJGYWN0b3J5IHJlZGlyZWN0cyB0byBjbGFzcyAnI25hbWUnLCB3aGljaCBpcyBhYnN0cmFjdCBhbmQgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQWJzdHJhY3RSZWRpcmVjdGVkQ2xhc3NJbnN0YW50aWF0aW9uKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlQWJzdHJhY3RSZWRpcmVjdGVkQ2xhc3NJbnN0YW50aWF0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJBYnN0cmFjdFJlZGlyZWN0ZWRDbGFzc0luc3RhbnRpYXRpb24iLAogICAgICAgIHRlbXBsYXRlQWJzdHJhY3RSZWRpcmVjdGVkQ2xhc3NJbnN0YW50aWF0aW9uLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJGQUNUT1JZX1JFRElSRUNUU19UT19BQlNUUkFDVF9DTEFTUyJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0Fic3RyYWN0UmVkaXJlY3RlZENsYXNzSW5zdGFudGlhdGlvbihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUFic3RyYWN0UmVkaXJlY3RlZENsYXNzSW5zdGFudGlhdGlvbiwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkZhY3RvcnkgcmVkaXJlY3RzIHRvIGNsYXNzICcke25hbWV9Jywgd2hpY2ggaXMgYWJzdHJhY3QgYW5kIGNhbid0IGJlIGluc3RhbnRpYXRlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVBY2Nlc3NFcnJvciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQWNjZXNzIGVycm9yOiAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0FjY2Vzc0Vycm9yKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVBY2Nlc3NFcnJvciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiQWNjZXNzRXJyb3IiLAogIHRlbXBsYXRlQWNjZXNzRXJyb3IsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQWNjZXNzRXJyb3IoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVBY2Nlc3NFcnJvciwKICAgICAgbWVzc2FnZTogIiIiQWNjZXNzIGVycm9yOiAnJHtuYW1lfScuIiIiLCBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICB0ZW1wbGF0ZUFtYmlndW91c1N1cGVydHlwZXMgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIicjbmFtZScgY2FuJ3QgaW1wbGVtZW50IGJvdGggJyN0eXBlJyBhbmQgJyN0eXBlMiciIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNBbWJpZ3VvdXNTdXBlcnR5cGVzKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlQW1iaWd1b3VzU3VwZXJ0eXBlcyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiQW1iaWd1b3VzU3VwZXJ0eXBlcyIsIHRlbXBsYXRlQW1iaWd1b3VzU3VwZXJ0eXBlcywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQU1CSUdVT1VTX1NVUEVSVFlQRVMiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQW1iaWd1b3VzU3VwZXJ0eXBlcygKICAgIFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVBbWJpZ3VvdXNTdXBlcnR5cGVzLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgY2FuJ3QgaW1wbGVtZW50IGJvdGggJyR7dHlwZX0nIGFuZCAnJHt0eXBlMn0nIiIiICsKICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUFub255bW91c0JyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uID0KICAgIG1lc3NhZ2VBbm9ueW1vdXNCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VBbm9ueW1vdXNCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbiA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiQW5vbnltb3VzQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb24iLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJMQUJFTF9JTl9PVVRFUl9TQ09QRSJdLAogICAgICAgIG1lc3NhZ2U6IHIiIiJDYW4ndCBicmVhayB0byBhIHRhcmdldCBpbiBhIGRpZmZlcmVudCBmdW5jdGlvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQW5vbnltb3VzQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb24gPQogICAgbWVzc2FnZUFub255bW91c0NvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUFub255bW91c0NvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJBbm9ueW1vdXNDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbiIsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkxBQkVMX0lOX09VVEVSX1NDT1BFIl0sCiAgICAgICAgbWVzc2FnZTogciIiIkNhbid0IGNvbnRpbnVlIGF0IGEgdGFyZ2V0IGluIGEgZGlmZmVyZW50IGZ1bmN0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVBcmd1bWVudFR5cGVOb3RBc3NpZ25hYmxlID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwKICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBhcmd1bWVudCB0eXBlICcjdHlwZScgY2FuJ3QgYmUgYXNzaWduZWQgdG8gdGhlIHBhcmFtZXRlciB0eXBlICcjdHlwZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgY2hhbmdpbmcgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlciwgb3IgY2FzdGluZyB0aGUgYXJndW1lbnQgdG8gJyN0eXBlMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNBcmd1bWVudFR5cGVOb3RBc3NpZ25hYmxlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVBcmd1bWVudFR5cGVOb3RBc3NpZ25hYmxlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgIkFyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGUiLCB0ZW1wbGF0ZUFyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkFSR1VNRU5UX1RZUEVfTk9UX0FTU0lHTkFCTEUiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQXJndW1lbnRUeXBlTm90QXNzaWduYWJsZSgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQXJndW1lbnRUeXBlTm90QXNzaWduYWJsZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBhcmd1bWVudCB0eXBlICcke3R5cGV9JyBjYW4ndCBiZSBhc3NpZ25lZCB0byB0aGUgcGFyYW1ldGVyIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiVHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHRoZSBwYXJhbWV0ZXIsIG9yIGNhc3RpbmcgdGhlIGFyZ3VtZW50IHRvICcke3R5cGUyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIGludAogICAgICAgICAgICBjb2RlUG9pbnQpPiB0ZW1wbGF0ZUFzY2lpQ29udHJvbENoYXJhY3RlciA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvZGVQb2ludCk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgY29udHJvbCBjaGFyYWN0ZXIgI3VuaWNvZGUgY2FuIG9ubHkgYmUgdXNlZCBpbiBzdHJpbmdzIGFuZCBjb21tZW50cy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0FzY2lpQ29udHJvbENoYXJhY3Rlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvZGVQb2ludCk+IGNvZGVBc2NpaUNvbnRyb2xDaGFyYWN0ZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb2RlUG9pbnQpPigKICAgICAgICAiQXNjaWlDb250cm9sQ2hhcmFjdGVyIiwgdGVtcGxhdGVBc2NpaUNvbnRyb2xDaGFyYWN0ZXIsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklMTEVHQUxfQ0hBUkFDVEVSIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0FzY2lpQ29udHJvbENoYXJhY3RlcihpbnQgY29kZVBvaW50KSB7CiAgU3RyaW5nIHVuaWNvZGUgPQogICAgICAiVSske2NvZGVQb2ludC50b1JhZGl4U3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLnBhZExlZnQoNCwgJzAnKX0iOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQXNjaWlDb250cm9sQ2hhcmFjdGVyLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGNvbnRyb2wgY2hhcmFjdGVyICR7dW5pY29kZX0gY2FuIG9ubHkgYmUgdXNlZCBpbiBzdHJpbmdzIGFuZCBjb21tZW50cy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydjb2RlUG9pbnQnOiBjb2RlUG9pbnR9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQXNzZXJ0QXNFeHByZXNzaW9uID0gbWVzc2FnZUFzc2VydEFzRXhwcmVzc2lvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VBc3NlcnRBc0V4cHJlc3Npb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJBc3NlcnRBc0V4cHJlc3Npb24iLAogICAgbWVzc2FnZTogciIiImBhc3NlcnRgIGNhbid0IGJlIHVzZWQgYXMgYW4gZXhwcmVzc2lvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQXNzZXJ0RXh0cmFuZW91c0FyZ3VtZW50ID0gbWVzc2FnZUFzc2VydEV4dHJhbmVvdXNBcmd1bWVudDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VBc3NlcnRFeHRyYW5lb3VzQXJndW1lbnQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJBc3NlcnRFeHRyYW5lb3VzQXJndW1lbnQiLAogICAgbWVzc2FnZTogciIiImBhc3NlcnRgIGNhbid0IGhhdmUgbW9yZSB0aGFuIHR3byBhcmd1bWVudHMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUF3YWl0QXNJZGVudGlmaWVyID0gbWVzc2FnZUF3YWl0QXNJZGVudGlmaWVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUF3YWl0QXNJZGVudGlmaWVyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQXdhaXRBc0lkZW50aWZpZXIiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkFTWU5DX0tFWVdPUkRfVVNFRF9BU19JREVOVElGSUVSIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiInYXdhaXQnIGNhbid0IGJlIHVzZWQgYXMgYW4gaWRlbnRpZmllciBpbiAnYXN5bmMnLCAnYXN5bmMqJywgb3IgJ3N5bmMqJyBtZXRob2RzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVBd2FpdEZvck5vdEFzeW5jID0gbWVzc2FnZUF3YWl0Rm9yTm90QXN5bmM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQXdhaXRGb3JOb3RBc3luYyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkF3YWl0Rm9yTm90QXN5bmMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkFTWU5DX0ZPUl9JTl9XUk9OR19DT05URVhUIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUaGUgYXN5bmNocm9ub3VzIGZvci1pbiBjYW4gb25seSBiZSB1c2VkIGluIGZ1bmN0aW9ucyBtYXJrZWQgd2l0aCAnYXN5bmMnIG9yICdhc3luYyonLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IG1hcmtpbmcgdGhlIGZ1bmN0aW9uIGJvZHkgd2l0aCBlaXRoZXIgJ2FzeW5jJyBvciAnYXN5bmMqJywgb3IgcmVtb3ZpbmcgdGhlICdhd2FpdCcgYmVmb3JlIHRoZSBmb3IgbG9vcC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQXdhaXROb3RBc3luYyA9IG1lc3NhZ2VBd2FpdE5vdEFzeW5jOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUF3YWl0Tm90QXN5bmMgPSBjb25zdCBNZXNzYWdlQ29kZSgiQXdhaXROb3RBc3luYyIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQVdBSVRfSU5fV1JPTkdfQ09OVEVYVCJdLAogICAgbWVzc2FnZTogciIiIidhd2FpdCcgY2FuIG9ubHkgYmUgdXNlZCBpbiAnYXN5bmMnIG9yICdhc3luYyonIG1ldGhvZHMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICB0ZW1wbGF0ZUJhZFR5cGVWYXJpYWJsZUluU3VwZXJ0eXBlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkZvdW5kIHVuc3VwcG9ydGVkIHVzZXMgb2YgJyNuYW1lJyBpbiBzdXBlcnR5cGUgJyNuYW1lMicuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQmFkVHlwZVZhcmlhYmxlSW5TdXBlcnR5cGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZUJhZFR5cGVWYXJpYWJsZUluU3VwZXJ0eXBlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgIkJhZFR5cGVWYXJpYWJsZUluU3VwZXJ0eXBlIiwKICB0ZW1wbGF0ZUJhZFR5cGVWYXJpYWJsZUluU3VwZXJ0eXBlLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0JhZFR5cGVWYXJpYWJsZUluU3VwZXJ0eXBlKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQmFkVHlwZVZhcmlhYmxlSW5TdXBlcnR5cGUsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJGb3VuZCB1bnN1cHBvcnRlZCB1c2VzIG9mICcke25hbWV9JyBpbiBzdXBlcnR5cGUgJyR7bmFtZTJ9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ25hbWUyJzogbmFtZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMik+IHRlbXBsYXRlQm91bmRJc3N1ZVZpYUN5Y2xlTm9uU2ltcGxpY2l0eSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsCiAgICAgICAgICAgIFN0cmluZyBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJHZW5lcmljIHR5cGUgJyNuYW1lJyBjYW4ndCBiZSB1c2VkIHdpdGhvdXQgdHlwZSBhcmd1bWVudHMgaW4gdGhlIGJvdW5kcyBvZiBpdHMgb3duIHR5cGUgdmFyaWFibGVzLiBJdCBpcyByZWZlcmVuY2VkIGluZGlyZWN0bHkgdGhyb3VnaCAnI25hbWUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IHByb3ZpZGluZyB0eXBlIGFyZ3VtZW50cyB0byAnI25hbWUyJyBoZXJlIG9yIHRvIHNvbWUgb3RoZXIgcmF3IHR5cGVzIGluIHRoZSBib3VuZHMgYWxvbmcgdGhlIHJlZmVyZW5jZSBjaGFpbi4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0JvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZUJvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgICAgICAiQm91bmRJc3N1ZVZpYUN5Y2xlTm9uU2ltcGxpY2l0eSIsCiAgICAgICAgdGVtcGxhdGVCb3VuZElzc3VlVmlhQ3ljbGVOb25TaW1wbGljaXR5LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT1RfSU5TVEFOVElBVEVEX0JPVU5EIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0JvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHkoCiAgICBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUJvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHksCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJHZW5lcmljIHR5cGUgJyR7bmFtZX0nIGNhbid0IGJlIHVzZWQgd2l0aG91dCB0eXBlIGFyZ3VtZW50cyBpbiB0aGUgYm91bmRzIG9mIGl0cyBvd24gdHlwZSB2YXJpYWJsZXMuIEl0IGlzIHJlZmVyZW5jZWQgaW5kaXJlY3RseSB0aHJvdWdoICcke25hbWUyfScuIiIiLAogICAgICB0aXA6ICIiIlRyeSBwcm92aWRpbmcgdHlwZSBhcmd1bWVudHMgdG8gJyR7bmFtZTJ9JyBoZXJlIG9yIHRvIHNvbWUgb3RoZXIgcmF3IHR5cGVzIGluIHRoZSBib3VuZHMgYWxvbmcgdGhlIHJlZmVyZW5jZSBjaGFpbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ25hbWUyJzogbmFtZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHkgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkdlbmVyaWMgdHlwZSAnI25hbWUnIGNhbid0IGJlIHVzZWQgd2l0aG91dCB0eXBlIGFyZ3VtZW50cyBpbiB0aGUgYm91bmRzIG9mIGl0cyBvd24gdHlwZSB2YXJpYWJsZXMuIiIiLAogICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgcHJvdmlkaW5nIHR5cGUgYXJndW1lbnRzIHRvICcjbmFtZScgaGVyZS4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0JvdW5kSXNzdWVWaWFMb29wTm9uU2ltcGxpY2l0eSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQm91bmRJc3N1ZVZpYUxvb3BOb25TaW1wbGljaXR5ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KCJCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHkiLAogICAgICAgIHRlbXBsYXRlQm91bmRJc3N1ZVZpYUxvb3BOb25TaW1wbGljaXR5LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT1RfSU5TVEFOVElBVEVEX0JPVU5EIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0JvdW5kSXNzdWVWaWFMb29wTm9uU2ltcGxpY2l0eShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUJvdW5kSXNzdWVWaWFMb29wTm9uU2ltcGxpY2l0eSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkdlbmVyaWMgdHlwZSAnJHtuYW1lfScgY2FuJ3QgYmUgdXNlZCB3aXRob3V0IHR5cGUgYXJndW1lbnRzIGluIHRoZSBib3VuZHMgb2YgaXRzIG93biB0eXBlIHZhcmlhYmxlcy4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHByb3ZpZGluZyB0eXBlIGFyZ3VtZW50cyB0byAnJHtuYW1lfScgaGVyZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlQm91bmRJc3N1ZVZpYVJhd1R5cGVXaXRoTm9uU2ltcGxlQm91bmRzID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJHZW5lcmljIHR5cGUgJyNuYW1lJyBjYW4ndCBiZSB1c2VkIHdpdGhvdXQgdHlwZSBhcmd1bWVudHMgaW4gYSB0eXBlIHZhcmlhYmxlIGJvdW5kLiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSBwcm92aWRpbmcgdHlwZSBhcmd1bWVudHMgdG8gJyNuYW1lJyBoZXJlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0JvdW5kSXNzdWVWaWFSYXdUeXBlV2l0aE5vblNpbXBsZUJvdW5kcyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgY29kZUJvdW5kSXNzdWVWaWFSYXdUeXBlV2l0aE5vblNpbXBsZUJvdW5kcyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQm91bmRJc3N1ZVZpYVJhd1R5cGVXaXRoTm9uU2ltcGxlQm91bmRzIiwKICAgICAgICB0ZW1wbGF0ZUJvdW5kSXNzdWVWaWFSYXdUeXBlV2l0aE5vblNpbXBsZUJvdW5kcywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0lOU1RBTlRJQVRFRF9CT1VORCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNCb3VuZElzc3VlVmlhUmF3VHlwZVdpdGhOb25TaW1wbGVCb3VuZHMoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVCb3VuZElzc3VlVmlhUmF3VHlwZVdpdGhOb25TaW1wbGVCb3VuZHMsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJHZW5lcmljIHR5cGUgJyR7bmFtZX0nIGNhbid0IGJlIHVzZWQgd2l0aG91dCB0eXBlIGFyZ3VtZW50cyBpbiBhIHR5cGUgdmFyaWFibGUgYm91bmQuIiIiLAogICAgICB0aXA6ICIiIlRyeSBwcm92aWRpbmcgdHlwZSBhcmd1bWVudHMgdG8gJyR7bmFtZX0nIGhlcmUuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQnJlYWtPdXRzaWRlT2ZMb29wID0gbWVzc2FnZUJyZWFrT3V0c2lkZU9mTG9vcDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VCcmVha091dHNpZGVPZkxvb3AgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJCcmVha091dHNpZGVPZkxvb3AiLAogICAgaW5kZXg6IDUyLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQSBicmVhayBzdGF0ZW1lbnQgY2FuJ3QgYmUgdXNlZCBvdXRzaWRlIG9mIGEgbG9vcCBvciBzd2l0Y2ggc3RhdGVtZW50LiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUgYnJlYWsgc3RhdGVtZW50LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb24gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNhbid0IGJyZWFrIHRvICcjbmFtZScgaW4gYSBkaWZmZXJlbnQgZnVuY3Rpb24uIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUJyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbiIsIHRlbXBsYXRlQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkxBQkVMX0lOX09VVEVSX1NDT1BFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0JyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb24sCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IGJyZWFrIHRvICcke25hbWV9JyBpbiBhIGRpZmZlcmVudCBmdW5jdGlvbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gdGVtcGxhdGVCdWlsdEluSWRlbnRpZmllckFzVHlwZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiVGhlIGJ1aWx0LWluIGlkZW50aWZpZXIgJyNsZXhlbWUnIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlLiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIG1hdGNoIGFuIGV4aXN0aW5nIHR5cGUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQnVpbHRJbklkZW50aWZpZXJBc1R5cGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gY29kZUJ1aWx0SW5JZGVudGlmaWVyQXNUeXBlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgICJCdWlsdEluSWRlbnRpZmllckFzVHlwZSIsIHRlbXBsYXRlQnVpbHRJbklkZW50aWZpZXJBc1R5cGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkJVSUxUX0lOX0lERU5USUZJRVJfQVNfVFlQRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNCdWlsdEluSWRlbnRpZmllckFzVHlwZShUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVCdWlsdEluSWRlbnRpZmllckFzVHlwZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBidWlsdC1pbiBpZGVudGlmaWVyICcke2xleGVtZX0nIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgY29ycmVjdGluZyB0aGUgbmFtZSB0byBtYXRjaCBhbiBleGlzdGluZyB0eXBlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+CiAgICB0ZW1wbGF0ZUJ1aWx0SW5JZGVudGlmaWVySW5EZWNsYXJhdGlvbiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ2FuJ3QgdXNlICcjbGV4ZW1lJyBhcyBhIG5hbWUgaGVyZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNCdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gY29kZUJ1aWx0SW5JZGVudGlmaWVySW5EZWNsYXJhdGlvbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigiQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uIiwKICAgICAgICB0ZW1wbGF0ZUJ1aWx0SW5JZGVudGlmaWVySW5EZWNsYXJhdGlvbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQlVJTFRfSU5fSURFTlRJRklFUl9JTl9ERUNMQVJBVElPTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNCdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb24oVG9rZW4gdG9rZW4pIHsKICBTdHJpbmcgbGV4ZW1lID0gdG9rZW4ubGV4ZW1lOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uLAogICAgICBtZXNzYWdlOiAiIiJDYW4ndCB1c2UgJyR7bGV4ZW1lfScgYXMgYSBuYW1lIGhlcmUuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVCeXRlY29kZUxpbWl0RXhjZWVkZWRUb29NYW55QXJndW1lbnRzID0KICAgIG1lc3NhZ2VCeXRlY29kZUxpbWl0RXhjZWVkZWRUb29NYW55QXJndW1lbnRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUJ5dGVjb2RlTGltaXRFeGNlZWRlZFRvb01hbnlBcmd1bWVudHMgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkJ5dGVjb2RlTGltaXRFeGNlZWRlZFRvb01hbnlBcmd1bWVudHMiLAogICAgICAgIG1lc3NhZ2U6IHIiIiJEYXJ0IGJ5dGVjb2RlIGxpbWl0IGV4Y2VlZGVkOiB0b28gbWFueSBhcmd1bWVudHMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNhbmRpZGF0ZUZvdW5kID0gbWVzc2FnZUNhbmRpZGF0ZUZvdW5kOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNhbmRpZGF0ZUZvdW5kID0gY29uc3QgTWVzc2FnZUNvZGUoIkNhbmRpZGF0ZUZvdW5kIiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIkZvdW5kIHRoaXMgY2FuZGlkYXRlLCBidXQgdGhlIGFyZ3VtZW50cyBkb24ndCBtYXRjaC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUNhbmRpZGF0ZUZvdW5kSXNEZWZhdWx0Q29uc3RydWN0b3IgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIlRoZSBjbGFzcyAnI25hbWUnIGhhcyBhIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgbm8gYXJndW1lbnRzLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NhbmRpZGF0ZUZvdW5kSXNEZWZhdWx0Q29uc3RydWN0b3IpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVDYW5kaWRhdGVGb3VuZElzRGVmYXVsdENvbnN0cnVjdG9yID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDYW5kaWRhdGVGb3VuZElzRGVmYXVsdENvbnN0cnVjdG9yIiwKICAgICAgICB0ZW1wbGF0ZUNhbmRpZGF0ZUZvdW5kSXNEZWZhdWx0Q29uc3RydWN0b3IsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NhbmRpZGF0ZUZvdW5kSXNEZWZhdWx0Q29uc3RydWN0b3IoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDYW5kaWRhdGVGb3VuZElzRGVmYXVsdENvbnN0cnVjdG9yLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGNsYXNzICcke25hbWV9JyBoYXMgYSBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIG5vIGFyZ3VtZW50cy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDYW5ub3RBc3NpZ25Ub1BhcmVudGhlc2l6ZWRFeHByZXNzaW9uID0KICAgIG1lc3NhZ2VDYW5ub3RBc3NpZ25Ub1BhcmVudGhlc2l6ZWRFeHByZXNzaW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNhbm5vdEFzc2lnblRvUGFyZW50aGVzaXplZEV4cHJlc3Npb24gPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkNhbm5vdEFzc2lnblRvUGFyZW50aGVzaXplZEV4cHJlc3Npb24iLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJBU1NJR05NRU5UX1RPX1BBUkVOVEhFU0laRURfRVhQUkVTU0lPTiJdLAogICAgICAgIG1lc3NhZ2U6IHIiIiJDYW4ndCBhc3NpZ24gdG8gYSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNhbm5vdEFzc2lnblRvU3VwZXIgPSBtZXNzYWdlQ2Fubm90QXNzaWduVG9TdXBlcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDYW5ub3RBc3NpZ25Ub1N1cGVyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ2Fubm90QXNzaWduVG9TdXBlciIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0FOX0xWQUxVRSJdLAogICAgbWVzc2FnZTogciIiIkNhbid0IGFzc2lnbiB0byBzdXBlci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4KICAgIHRlbXBsYXRlQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb24gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiVW5hYmxlIHRvIHJlYWQgdGhlICdsaWJyYXJpZXMuanNvbicgc3BlY2lmaWNhdGlvbiBmaWxlOgogICNzdHJpbmcuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiBjb2RlQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAiQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb24iLAogIHRlbXBsYXRlQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb24sCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb24oU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDYW5ub3RSZWFkU2RrU3BlY2lmaWNhdGlvbiwKICAgICAgbWVzc2FnZTogIiIiVW5hYmxlIHRvIHJlYWQgdGhlICdsaWJyYXJpZXMuanNvbicgc3BlY2lmaWNhdGlvbiBmaWxlOgogICR7c3RyaW5nfS4iIiIsIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2FudERpc2FtYmlndWF0ZUFtYmlndW91c0luZm9ybWF0aW9uID0KICAgIG1lc3NhZ2VDYW50RGlzYW1iaWd1YXRlQW1iaWd1b3VzSW5mb3JtYXRpb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ2FudERpc2FtYmlndWF0ZUFtYmlndW91c0luZm9ybWF0aW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ2FudERpc2FtYmlndWF0ZUFtYmlndW91c0luZm9ybWF0aW9uIiwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkJvdGggSXRlcmFibGUgYW5kIE1hcCBzcHJlYWQgZWxlbWVudHMgZW5jb3VudGVyZWQgaW4gYW1iaWd1b3VzIGxpdGVyYWwuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNhbnREaXNhbWJpZ3VhdGVOb3RFbm91Z2hJbmZvcm1hdGlvbiA9CiAgICBtZXNzYWdlQ2FudERpc2FtYmlndWF0ZU5vdEVub3VnaEluZm9ybWF0aW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNhbnREaXNhbWJpZ3VhdGVOb3RFbm91Z2hJbmZvcm1hdGlvbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNhbnREaXNhbWJpZ3VhdGVOb3RFbm91Z2hJbmZvcm1hdGlvbiIsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJOb3QgZW5vdWdoIHR5cGUgaW5mb3JtYXRpb24gdG8gZGlzYW1iaWd1YXRlIGJldHdlZW4gbGl0ZXJhbCBzZXQgYW5kIGxpdGVyYWwgbWFwLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IHByb3ZpZGluZyB0eXBlIGFyZ3VtZW50cyBmb3IgdGhlIGxpdGVyYWwgZXhwbGljaXRseSB0byBkaXNhbWJpZ3VhdGUgaXQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNhbnRJbmZlclBhY2thZ2VzRnJvbU1hbnlJbnB1dHMgPQogICAgbWVzc2FnZUNhbnRJbmZlclBhY2thZ2VzRnJvbU1hbnlJbnB1dHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ2FudEluZmVyUGFja2FnZXNGcm9tTWFueUlucHV0cyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNhbnRJbmZlclBhY2thZ2VzRnJvbU1hbnlJbnB1dHMiLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQ2FuJ3QgaW5mZXIgYSAucGFja2FnZXMgZmlsZSB3aGVuIGNvbXBpbGluZyBtdWx0aXBsZSBpbnB1dHMuIiIiLAogICAgdGlwOiByIiIiVHJ5IHNwZWNpZnlpbmcgdGhlIGZpbGUgZXhwbGljaXRseSB3aXRoIHRoZSAtLXBhY2thZ2VzIG9wdGlvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2FudEluZmVyUGFja2FnZXNGcm9tUGFja2FnZVVyaSA9CiAgICBtZXNzYWdlQ2FudEluZmVyUGFja2FnZXNGcm9tUGFja2FnZVVyaTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDYW50SW5mZXJQYWNrYWdlc0Zyb21QYWNrYWdlVXJpID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ2FudEluZmVyUGFja2FnZXNGcm9tUGFja2FnZVVyaSIsCiAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgaW5mZXIgYSAucGFja2FnZXMgZmlsZSBmcm9tIGFuIGlucHV0ICdwYWNrYWdlOionIFVSSS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgc3BlY2lmeWluZyB0aGUgZmlsZSBleHBsaWNpdGx5IHdpdGggdGhlIC0tcGFja2FnZXMgb3B0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlQ2FudEluZmVyUmV0dXJuVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJDYW4ndCBpbmZlciBhIHJldHVybiB0eXBlIGZvciAnI25hbWUnIGFzIHNvbWUgb2YgdGhlIGluaGVyaXRlZCBtZW1iZXJzIGhhdmUgZGlmZmVyZW50IHR5cGVzLiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSBhZGRpbmcgYW4gZXhwbGljaXQgdHlwZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czoKICAgICAgICAgICAgX3dpdGhBcmd1bWVudHNDYW50SW5mZXJSZXR1cm5UeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVDYW50SW5mZXJSZXR1cm5UeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkNhbnRJbmZlclJldHVyblR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlcyIsCiAgICAgICAgdGVtcGxhdGVDYW50SW5mZXJSZXR1cm5UeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfTUVUSE9EX09WRVJSSURFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NhbnRJbmZlclJldHVyblR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlcygKICAgIFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ2FudEluZmVyUmV0dXJuVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQ2FuJ3QgaW5mZXIgYSByZXR1cm4gdHlwZSBmb3IgJyR7bmFtZX0nIGFzIHNvbWUgb2YgdGhlIGluaGVyaXRlZCBtZW1iZXJzIGhhdmUgZGlmZmVyZW50IHR5cGVzLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgYWRkaW5nIGFuIGV4cGxpY2l0IHR5cGUuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBzdHJpbmcpPiB0ZW1wbGF0ZUNhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkNhbid0IGluZmVyIHRoZSB0eXBlIG9mICcjc3RyaW5nJzogY2lyY3VsYXJpdHkgZm91bmQgZHVyaW5nIHR5cGUgaW5mZXJlbmNlLiIiIiwKICAgIHRpcFRlbXBsYXRlOiByIiIiU3BlY2lmeSB0aGUgdHlwZSBleHBsaWNpdGx5LiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiBjb2RlQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHkiLCB0ZW1wbGF0ZUNhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJSRUNVUlNJVkVfQ09NUElMRV9USU1FX0NPTlNUQU5UIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5KFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHksCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCBpbmZlciB0aGUgdHlwZSBvZiAnJHtzdHJpbmd9JzogY2lyY3VsYXJpdHkgZm91bmQgZHVyaW5nIHR5cGUgaW5mZXJlbmNlLiIiIiwKICAgICAgdGlwOiAiIiJTcGVjaWZ5IHRoZSB0eXBlIGV4cGxpY2l0bHkuIiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkNhbid0IGluZmVyIGEgdHlwZSBmb3IgJyNuYW1lJyBhcyBzb21lIG9mIHRoZSBpbmhlcml0ZWQgbWVtYmVycyBoYXZlIGRpZmZlcmVudCB0eXBlcy4iIiIsCiAgICAgICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgYWRkaW5nIGFuIGV4cGxpY2l0IHR5cGUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ2FudEluZmVyVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlQ2FudEluZmVyVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMiLAogICAgICAgIHRlbXBsYXRlQ2FudEluZmVyVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX01FVEhPRF9PVkVSUklERSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCBpbmZlciBhIHR5cGUgZm9yICcke25hbWV9JyBhcyBzb21lIG9mIHRoZSBpbmhlcml0ZWQgbWVtYmVycyBoYXZlIGRpZmZlcmVudCB0eXBlcy4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IGFkZGluZyBhbiBleHBsaWNpdCB0eXBlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFN0cmluZyBzdHJpbmcpPiB0ZW1wbGF0ZUNhbnRSZWFkRmlsZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiRXJyb3Igd2hlbiByZWFkaW5nICcjdXJpJzogI3N0cmluZyIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NhbnRSZWFkRmlsZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFN0cmluZyBzdHJpbmcpPiBjb2RlQ2FudFJlYWRGaWxlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJDYW50UmVhZEZpbGUiLCB0ZW1wbGF0ZUNhbnRSZWFkRmlsZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVVJJX0RPRVNfTk9UX0VYSVNUIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NhbnRSZWFkRmlsZShVcmkgdXJpXywgU3RyaW5nIHN0cmluZykgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDYW50UmVhZEZpbGUsCiAgICAgIG1lc3NhZ2U6ICIiIkVycm9yIHdoZW4gcmVhZGluZyAnJHt1cml9JzogJHtzdHJpbmd9IiIiLAogICAgICBhcmd1bWVudHM6IHsndXJpJzogdXJpXywgJ3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4KICAgIHRlbXBsYXRlQ2FudFVzZUNvbnRyb2xGbG93T3JTcHJlYWRBc0NvbnN0YW50ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiInI2xleGVtZScgaXMgbm90IHN1cHBvcnRlZCBpbiBjb25zdGFudCBleHByZXNzaW9ucy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4KICAgIGNvZGVDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgIkNhbnRVc2VDb250cm9sRmxvd09yU3ByZWFkQXNDb25zdGFudCIsCiAgICAgICAgdGVtcGxhdGVDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PVF9DT05TVEFOVF9FWFBSRVNTSU9OIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NhbnRVc2VDb250cm9sRmxvd09yU3ByZWFkQXNDb25zdGFudChUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnQsCiAgICAgIG1lc3NhZ2U6ICIiIicke2xleGVtZX0nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gY29uc3RhbnQgZXhwcmVzc2lvbnMuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgVG9rZW4KICAgICAgICAgICAgdG9rZW4pPiB0ZW1wbGF0ZUNhbnRVc2VEZWZlcnJlZFByZWZpeEFzQ29uc3RhbnQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIicjbGV4ZW1lJyBjYW4ndCBiZSB1c2VkIGluIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBiZWNhdXNlIGl0J3MgbWFya2VkIGFzICdkZWZlcnJlZCcgd2hpY2ggbWVhbnMgaXQgaXNuJ3QgYXZhaWxhYmxlIHVudGlsIGxvYWRlZC4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IG1vdmluZyB0aGUgY29uc3RhbnQgZnJvbSB0aGUgZGVmZXJyZWQgbGlicmFyeSwgb3IgcmVtb3ZpbmcgJ2RlZmVycmVkJyBmcm9tIHRoZSBpbXBvcnQuCiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ2FudFVzZURlZmVycmVkUHJlZml4QXNDb25zdGFudCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlQ2FudFVzZURlZmVycmVkUHJlZml4QXNDb25zdGFudCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigiQ2FudFVzZURlZmVycmVkUHJlZml4QXNDb25zdGFudCIsCiAgICAgICAgdGVtcGxhdGVDYW50VXNlRGVmZXJyZWRQcmVmaXhBc0NvbnN0YW50LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9ERUZFUlJFRF9DTEFTUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDYW50VXNlRGVmZXJyZWRQcmVmaXhBc0NvbnN0YW50KFRva2VuIHRva2VuKSB7CiAgU3RyaW5nIGxleGVtZSA9IHRva2VuLmxleGVtZTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNhbnRVc2VEZWZlcnJlZFByZWZpeEFzQ29uc3RhbnQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiInJHtsZXhlbWV9JyBjYW4ndCBiZSB1c2VkIGluIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBiZWNhdXNlIGl0J3MgbWFya2VkIGFzICdkZWZlcnJlZCcgd2hpY2ggbWVhbnMgaXQgaXNuJ3QgYXZhaWxhYmxlIHVudGlsIGxvYWRlZC4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IG1vdmluZyB0aGUgY29uc3RhbnQgZnJvbSB0aGUgZGVmZXJyZWQgbGlicmFyeSwgb3IgcmVtb3ZpbmcgJ2RlZmVycmVkJyBmcm9tIHRoZSBpbXBvcnQuCiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2FudFVzZVByZWZpeEFzRXhwcmVzc2lvbiA9CiAgICBtZXNzYWdlQ2FudFVzZVByZWZpeEFzRXhwcmVzc2lvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDYW50VXNlUHJlZml4QXNFeHByZXNzaW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ2FudFVzZVByZWZpeEFzRXhwcmVzc2lvbiIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUFJFRklYX0lERU5USUZJRVJfTk9UX0ZPTExPV0VEX0JZX0RPVCJdLAogICAgbWVzc2FnZTogciIiIkEgcHJlZml4IGNhbid0IGJlIHVzZWQgYXMgYW4gZXhwcmVzc2lvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2FudFVzZVByZWZpeFdpdGhOdWxsQXdhcmUgPQogICAgbWVzc2FnZUNhbnRVc2VQcmVmaXhXaXRoTnVsbEF3YXJlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNhbnRVc2VQcmVmaXhXaXRoTnVsbEF3YXJlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ2FudFVzZVByZWZpeFdpdGhOdWxsQXdhcmUiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlBSRUZJWF9JREVOVElGSUVSX05PVF9GT0xMT1dFRF9CWV9ET1QiXSwKICAgIG1lc3NhZ2U6IHIiIiJBIHByZWZpeCBjYW4ndCBiZSB1c2VkIHdpdGggbnVsbC1hd2FyZSBvcGVyYXRvcnMuIiIiLAogICAgdGlwOiByIiIiSXQgc2hvdWxkIGJlIHNhZmUgdG8gcmVtb3ZlIHRoZSAnPycgYXMgYSBwcmVmaXggaXMgbmV2ZXIgbnVsbC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2F0Y2hTeW50YXggPSBtZXNzYWdlQ2F0Y2hTeW50YXg7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ2F0Y2hTeW50YXggPSBjb25zdCBNZXNzYWdlQ29kZSgiQ2F0Y2hTeW50YXgiLAogICAgaW5kZXg6IDg0LAogICAgbWVzc2FnZToKICAgICAgICByIiIiJ2NhdGNoJyBtdXN0IGJlIGZvbGxvd2VkIGJ5ICcoaWRlbnRpZmllciknIG9yICcoaWRlbnRpZmllciwgaWRlbnRpZmllciknLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiTm8gdHlwZXMgYXJlIG5lZWRlZCwgdGhlIGZpcnN0IGlzIGdpdmVuIGJ5ICdvbicsIHRoZSBzZWNvbmQgaXMgYWx3YXlzICdTdGFja1RyYWNlJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2F0Y2hTeW50YXhFeHRyYVBhcmFtZXRlcnMgPQogICAgbWVzc2FnZUNhdGNoU3ludGF4RXh0cmFQYXJhbWV0ZXJzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNhdGNoU3ludGF4RXh0cmFQYXJhbWV0ZXJzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ2F0Y2hTeW50YXhFeHRyYVBhcmFtZXRlcnMiLAogICAgaW5kZXg6IDgzLAogICAgbWVzc2FnZToKICAgICAgICByIiIiJ2NhdGNoJyBtdXN0IGJlIGZvbGxvd2VkIGJ5ICcoaWRlbnRpZmllciknIG9yICcoaWRlbnRpZmllciwgaWRlbnRpZmllciknLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiTm8gdHlwZXMgYXJlIG5lZWRlZCwgdGhlIGZpcnN0IGlzIGdpdmVuIGJ5ICdvbicsIHRoZSBzZWNvbmQgaXMgYWx3YXlzICdTdGFja1RyYWNlJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ2xhc3NJbkNsYXNzID0gbWVzc2FnZUNsYXNzSW5DbGFzczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDbGFzc0luQ2xhc3MgPSBjb25zdCBNZXNzYWdlQ29kZSgiQ2xhc3NJbkNsYXNzIiwKICAgIGluZGV4OiA1MywKICAgIG1lc3NhZ2U6IHIiIiJDbGFzc2VzIGNhbid0IGJlIGRlY2xhcmVkIGluc2lkZSBvdGhlciBjbGFzc2VzLiIiIiwKICAgIHRpcDogciIiIlRyeSBtb3ZpbmcgdGhlIGNsYXNzIHRvIHRoZSB0b3AtbGV2ZWwuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbG9uSW5QbGFjZU9mSW4gPSBtZXNzYWdlQ29sb25JblBsYWNlT2ZJbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb2xvbkluUGxhY2VPZkluID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29sb25JblBsYWNlT2ZJbiIsCiAgICBpbmRleDogNTQsCiAgICBtZXNzYWdlOiByIiIiRm9yLWluIGxvb3BzIHVzZSAnaW4nIHJhdGhlciB0aGFuIGEgY29sb24uIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlcGxhY2luZyB0aGUgY29sb24gd2l0aCB0aGUga2V5d29yZCAnaW4nLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVDb21iaW5lZE1lbWJlclNpZ25hdHVyZUZhaWxlZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJDbGFzcyAnI25hbWUnIGluaGVyaXRzIG11bHRpcGxlIG1lbWJlcnMgbmFtZWQgJyNuYW1lMicgd2l0aCBpbmNvbXBhdGlibGUgc2lnbmF0dXJlcy4iIiIsCiAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSBhZGRpbmcgYSBkZWNsYXJhdGlvbiBvZiAnI25hbWUyJyB0byAnI25hbWUnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29tYmluZWRNZW1iZXJTaWduYXR1cmVGYWlsZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZUNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlRmFpbGVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIkNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlRmFpbGVkIiwgdGVtcGxhdGVDb21iaW5lZE1lbWJlclNpZ25hdHVyZUZhaWxlZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5DT05TSVNURU5UX0lOSEVSSVRBTkNFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbWJpbmVkTWVtYmVyU2lnbmF0dXJlRmFpbGVkKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29tYmluZWRNZW1iZXJTaWduYXR1cmVGYWlsZWQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDbGFzcyAnJHtuYW1lfScgaW5oZXJpdHMgbXVsdGlwbGUgbWVtYmVycyBuYW1lZCAnJHtuYW1lMn0nIHdpdGggaW5jb21wYXRpYmxlIHNpZ25hdHVyZXMuIiIiLAogICAgICB0aXA6ICIiIlRyeSBhZGRpbmcgYSBkZWNsYXJhdGlvbiBvZiAnJHtuYW1lMn0nIHRvICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ25hbWUyJzogbmFtZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIHN0cmluZzIpPiB0ZW1wbGF0ZUNvbmZsaWN0aW5nTW9kaWZpZXJzID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJNZW1iZXJzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlIGJvdGggJyNzdHJpbmcnIGFuZCAnI3N0cmluZzInLiIiIiwKICAgIHRpcFRlbXBsYXRlOiByIiIiVHJ5IHJlbW92aW5nIG9uZSBvZiB0aGUga2V5d29yZHMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25mbGljdGluZ01vZGlmaWVycyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPgogICAgY29kZUNvbmZsaWN0aW5nTW9kaWZpZXJzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgICAgICJDb25mbGljdGluZ01vZGlmaWVycyIsIHRlbXBsYXRlQ29uZmxpY3RpbmdNb2RpZmllcnMsCiAgICAgICAgaW5kZXg6IDU5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25mbGljdGluZ01vZGlmaWVycyhTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMikgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgaWYgKHN0cmluZzIuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25mbGljdGluZ01vZGlmaWVycywKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIk1lbWJlcnMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgYm90aCAnJHtzdHJpbmd9JyBhbmQgJyR7c3RyaW5nMn0nLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgcmVtb3Zpbmcgb25lIG9mIHRoZSBrZXl3b3Jkcy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICdzdHJpbmcyJzogc3RyaW5nMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVDb25mbGljdHNXaXRoQ29uc3RydWN0b3IgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNvbmZsaWN0cyB3aXRoIGNvbnN0cnVjdG9yICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aENvbnN0cnVjdG9yKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVDb25mbGljdHNXaXRoQ29uc3RydWN0b3IgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkNvbmZsaWN0c1dpdGhDb25zdHJ1Y3RvciIsIHRlbXBsYXRlQ29uZmxpY3RzV2l0aENvbnN0cnVjdG9yLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05GTElDVFNfV0lUSF9DT05TVFJVQ1RPUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoQ29uc3RydWN0b3IoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25mbGljdHNXaXRoQ29uc3RydWN0b3IsCiAgICAgIG1lc3NhZ2U6ICIiIkNvbmZsaWN0cyB3aXRoIGNvbnN0cnVjdG9yICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVDb25mbGljdHNXaXRoRmFjdG9yeSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ29uZmxpY3RzIHdpdGggZmFjdG9yeSAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhGYWN0b3J5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVDb25mbGljdHNXaXRoRmFjdG9yeSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiQ29uZmxpY3RzV2l0aEZhY3RvcnkiLAogIHRlbXBsYXRlQ29uZmxpY3RzV2l0aEZhY3RvcnksCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aEZhY3RvcnkoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25mbGljdHNXaXRoRmFjdG9yeSwKICAgICAgbWVzc2FnZTogIiIiQ29uZmxpY3RzIHdpdGggZmFjdG9yeSAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ29uZmxpY3RzIHdpdGggbWVtYmVyICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aE1lbWJlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQ29uZmxpY3RzV2l0aE1lbWJlciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ29uZmxpY3RzV2l0aE1lbWJlciIsIHRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09ORkxJQ1RTX1dJVEhfTUVNQkVSIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhNZW1iZXIoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25mbGljdHNXaXRoTWVtYmVyLAogICAgICBtZXNzYWdlOiAiIiJDb25mbGljdHMgd2l0aCBtZW1iZXIgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVDb25mbGljdHNXaXRoTWVtYmVyV2FybmluZyA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ29uZmxpY3RzIHdpdGggbWVtYmVyICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUNvbmZsaWN0c1dpdGhNZW1iZXJXYXJuaW5nID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDb25mbGljdHNXaXRoTWVtYmVyV2FybmluZyIsIHRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmcsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTkZMSUNUU19XSVRIX01FTUJFUiJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhNZW1iZXJXYXJuaW5nKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmcsCiAgICAgIG1lc3NhZ2U6ICIiIkNvbmZsaWN0cyB3aXRoIG1lbWJlciAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ29uZmxpY3RzIHdpdGggc2V0dGVyICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aFNldHRlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQ29uZmxpY3RzV2l0aFNldHRlciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ29uZmxpY3RzV2l0aFNldHRlciIsIHRlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09ORkxJQ1RTX1dJVEhfTUVNQkVSIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhTZXR0ZXIoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25mbGljdHNXaXRoU2V0dGVyLAogICAgICBtZXNzYWdlOiAiIiJDb25mbGljdHMgd2l0aCBzZXR0ZXIgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVDb25mbGljdHNXaXRoU2V0dGVyV2FybmluZyA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ29uZmxpY3RzIHdpdGggc2V0dGVyICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUNvbmZsaWN0c1dpdGhTZXR0ZXJXYXJuaW5nID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDb25mbGljdHNXaXRoU2V0dGVyV2FybmluZyIsIHRlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmcsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTkZMSUNUU19XSVRIX01FTUJFUiJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbmZsaWN0c1dpdGhTZXR0ZXJXYXJuaW5nKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmcsCiAgICAgIG1lc3NhZ2U6ICIiIkNvbmZsaWN0cyB3aXRoIHNldHRlciAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGUgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNvbmZsaWN0cyB3aXRoIHR5cGUgdmFyaWFibGUgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoVHlwZVZhcmlhYmxlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVDb25mbGljdHNXaXRoVHlwZVZhcmlhYmxlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDb25mbGljdHNXaXRoVHlwZVZhcmlhYmxlIiwgdGVtcGxhdGVDb25mbGljdHNXaXRoVHlwZVZhcmlhYmxlLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05GTElDVElOR19UWVBFX1ZBUklBQkxFX0FORF9NRU1CRVIiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGUsCiAgICAgIG1lc3NhZ2U6ICIiIkNvbmZsaWN0cyB3aXRoIHR5cGUgdmFyaWFibGUgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDYXVzZSA9CiAgICBtZXNzYWdlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNhdXNlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDYXVzZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDYXVzZSIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwKICAgIG1lc3NhZ2U6IHIiIiJUaGlzIGlzIHRoZSB0eXBlIHZhcmlhYmxlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdEFuZEZpbmFsID0gbWVzc2FnZUNvbnN0QW5kRmluYWw7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RBbmRGaW5hbCA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJDb25zdEFuZEZpbmFsIiwKICAgIGluZGV4OiA1OCwKICAgIG1lc3NhZ2U6IHIiIiJNZW1iZXJzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlIGJvdGggJ2NvbnN0JyBhbmQgJ2ZpbmFsJy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgZWl0aGVyIHRoZSAnY29uc3QnIG9yICdmaW5hbCcga2V5d29yZC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RDbGFzcyA9IG1lc3NhZ2VDb25zdENsYXNzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0Q2xhc3MgPSBjb25zdCBNZXNzYWdlQ29kZSgiQ29uc3RDbGFzcyIsCiAgICBpbmRleDogNjAsCiAgICBtZXNzYWdlOiByIiIiQ2xhc3NlcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnY29uc3QnLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IHJlbW92aW5nIHRoZSAnY29uc3QnIGtleXdvcmQuIElmIHlvdSdyZSB0cnlpbmcgdG8gaW5kaWNhdGUgdGhhdCBpbnN0YW5jZXMgb2YgdGhlIGNsYXNzIGNhbiBiZSBjb25zdGFudHMsIHBsYWNlIHRoZSAnY29uc3QnIGtleXdvcmQgb24gIHRoZSBjbGFzcycgY29uc3RydWN0b3IocykuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkID0KICAgIG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yTm9uRmluYWxGaWVsZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yTm9uRmluYWxGaWVsZCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9DT05TVFJVQ1RPUl9XSVRIX05PTl9GSU5BTF9GSUVMRCJdLAogICAgbWVzc2FnZTogciIiIkNvbnN0cnVjdG9yIGlzIG1hcmtlZCAnY29uc3QnIHNvIGFsbCBmaWVsZHMgbXVzdCBiZSBmaW5hbC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGRDYXVzZSA9CiAgICBtZXNzYWdlQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGRDYXVzZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yTm9uRmluYWxGaWVsZENhdXNlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGRDYXVzZSIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwKICAgIG1lc3NhZ2U6IHIiIiJGaWVsZCBpc24ndCBmaW5hbCwgYnV0IGNvbnN0cnVjdG9yIGlzICdjb25zdCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0Q29uc3RydWN0b3JSZWRpcmVjdGlvblRvTm9uQ29uc3QgPQogICAgbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JSZWRpcmVjdGlvblRvTm9uQ29uc3Q7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RDb25zdHJ1Y3RvclJlZGlyZWN0aW9uVG9Ob25Db25zdCA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiQ29uc3RDb25zdHJ1Y3RvclJlZGlyZWN0aW9uVG9Ob25Db25zdCIsCiAgICAgICAgbWVzc2FnZToKICAgICAgICAgICAgciIiIkEgY29uc3RhbnQgY29uc3RydWN0b3IgY2FuJ3QgY2FsbCBhIG5vbi1jb25zdGFudCBjb25zdHJ1Y3Rvci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RDb25zdHJ1Y3RvcldpdGhCb2R5ID0gbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JXaXRoQm9keTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yV2l0aEJvZHkgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdENvbnN0cnVjdG9yV2l0aEJvZHkiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX0NPTlNUUlVDVE9SX1dJVEhfQk9EWSJdLAogICAgbWVzc2FnZTogciIiIkEgY29uc3QgY29uc3RydWN0b3IgY2FuJ3QgaGF2ZSBhIGJvZHkuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIGVpdGhlciB0aGUgJ2NvbnN0JyBrZXl3b3JkIG9yIHRoZSBib2R5LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdENvbnN0cnVjdG9yV2l0aE5vbkNvbnN0U3VwZXIgPQogICAgbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JXaXRoTm9uQ29uc3RTdXBlcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yV2l0aE5vbkNvbnN0U3VwZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdENvbnN0cnVjdG9yV2l0aE5vbkNvbnN0U3VwZXIiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX0NPTlNUUlVDVE9SX1dJVEhfTk9OX0NPTlNUX1NVUEVSIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJDb25zdGFudCBjb25zdHJ1Y3RvciBjYW4ndCBjYWxsIG5vbi1jb25zdGFudCBzdXBlciBjb25zdHJ1Y3RvcnMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0RXZhbENpcmN1bGFyaXR5ID0gbWVzc2FnZUNvbnN0RXZhbENpcmN1bGFyaXR5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0RXZhbENpcmN1bGFyaXR5ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RFdmFsQ2lyY3VsYXJpdHkiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFQ1VSU0lWRV9DT01QSUxFX1RJTUVfQ09OU1RBTlQiXSwKICAgIG1lc3NhZ2U6IHIiIiJDb25zdGFudCBleHByZXNzaW9uIGRlcGVuZHMgb24gaXRzZWxmLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdEV2YWxDb250ZXh0ID0gbWVzc2FnZUNvbnN0RXZhbENvbnRleHQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RFdmFsQ29udGV4dCA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiQ29uc3RFdmFsQ29udGV4dCIsIG1lc3NhZ2U6IHIiIiJXaGlsZSBhbmFseXppbmc6IiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlQ29uc3RFdmFsRGVmZXJyZWRMaWJyYXJ5ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiInI25hbWUnIGNhbid0IGJlIHVzZWQgaW4gYSBjb25zdGFudCBleHByZXNzaW9uIGJlY2F1c2UgaXQncyBtYXJrZWQgYXMgJ2RlZmVycmVkJyB3aGljaCBtZWFucyBpdCBpc24ndCBhdmFpbGFibGUgdW50aWwgbG9hZGVkLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgbW92aW5nIHRoZSBjb25zdGFudCBmcm9tIHRoZSBkZWZlcnJlZCBsaWJyYXJ5LCBvciByZW1vdmluZyAnZGVmZXJyZWQnIGZyb20gdGhlIGltcG9ydC4KIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxEZWZlcnJlZExpYnJhcnkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUNvbnN0RXZhbERlZmVycmVkTGlicmFyeSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ29uc3RFdmFsRGVmZXJyZWRMaWJyYXJ5IiwgdGVtcGxhdGVDb25zdEV2YWxEZWZlcnJlZExpYnJhcnksCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bCiAgICAgICJOT05fQ09OU1RBTlRfREVGQVVMVF9WQUxVRV9GUk9NX0RFRkVSUkVEX0xJQlJBUlkiCiAgICBdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxEZWZlcnJlZExpYnJhcnkoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEV2YWxEZWZlcnJlZExpYnJhcnksCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiInJHtuYW1lfScgY2FuJ3QgYmUgdXNlZCBpbiBhIGNvbnN0YW50IGV4cHJlc3Npb24gYmVjYXVzZSBpdCdzIG1hcmtlZCBhcyAnZGVmZXJyZWQnIHdoaWNoIG1lYW5zIGl0IGlzbid0IGF2YWlsYWJsZSB1bnRpbCBsb2FkZWQuIiIiLAogICAgICB0aXA6ICIiIlRyeSBtb3ZpbmcgdGhlIGNvbnN0YW50IGZyb20gdGhlIGRlZmVycmVkIGxpYnJhcnksIG9yIHJlbW92aW5nICdkZWZlcnJlZCcgZnJvbSB0aGUgaW1wb3J0LgoiIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgQ29uc3RhbnQKICAgICAgICAgICAgX2NvbnN0YW50KT4gdGVtcGxhdGVDb25zdEV2YWxEdXBsaWNhdGVFbGVtZW50ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIGVsZW1lbnQgJyNjb25zdGFudCcgY29uZmxpY3RzIHdpdGggYW5vdGhlciBleGlzdGluZyBlbGVtZW50IGluIHRoZSBzZXQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxEdXBsaWNhdGVFbGVtZW50KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPiBjb2RlQ29uc3RFdmFsRHVwbGljYXRlRWxlbWVudCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oQ29uc3RhbnQgX2NvbnN0YW50KT4oCiAgICAgICAgIkNvbnN0RXZhbER1cGxpY2F0ZUVsZW1lbnQiLCB0ZW1wbGF0ZUNvbnN0RXZhbER1cGxpY2F0ZUVsZW1lbnQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVRVUFMX0VMRU1FTlRTX0lOX0NPTlNUX1NFVCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxEdXBsaWNhdGVFbGVtZW50KENvbnN0YW50IF9jb25zdGFudCkgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gY29uc3RhbnRQYXJ0cyA9IGxhYmVsZXIubGFiZWxDb25zdGFudChfY29uc3RhbnQpOwogIFN0cmluZyBjb25zdGFudCA9IGNvbnN0YW50UGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsRHVwbGljYXRlRWxlbWVudCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBlbGVtZW50ICcke2NvbnN0YW50fScgY29uZmxpY3RzIHdpdGggYW5vdGhlciBleGlzdGluZyBlbGVtZW50IGluIHRoZSBzZXQuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnY29uc3RhbnQnOiBfY29uc3RhbnR9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIENvbnN0YW50CiAgICAgICAgICAgIF9jb25zdGFudCk+IHRlbXBsYXRlQ29uc3RFdmFsRHVwbGljYXRlS2V5ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIGtleSAnI2NvbnN0YW50JyBjb25mbGljdHMgd2l0aCBhbm90aGVyIGV4aXN0aW5nIGtleSBpbiB0aGUgbWFwLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RFdmFsRHVwbGljYXRlS2V5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPiBjb2RlQ29uc3RFdmFsRHVwbGljYXRlS2V5ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICAiQ29uc3RFdmFsRHVwbGljYXRlS2V5IiwgdGVtcGxhdGVDb25zdEV2YWxEdXBsaWNhdGVLZXksCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVRVUFMX0tFWVNfSU5fQ09OU1RfTUFQIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbER1cGxpY2F0ZUtleShDb25zdGFudCBfY29uc3RhbnQpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IGNvbnN0YW50UGFydHMgPSBsYWJlbGVyLmxhYmVsQ29uc3RhbnQoX2NvbnN0YW50KTsKICBTdHJpbmcgY29uc3RhbnQgPSBjb25zdGFudFBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbER1cGxpY2F0ZUtleSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBrZXkgJyR7Y29uc3RhbnR9JyBjb25mbGljdHMgd2l0aCBhbm90aGVyIGV4aXN0aW5nIGtleSBpbiB0aGUgbWFwLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J2NvbnN0YW50JzogX2NvbnN0YW50fSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBDb25zdGFudAogICAgICAgICAgICBfY29uc3RhbnQpPiB0ZW1wbGF0ZUNvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWwgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgZWxlbWVudCAnI2NvbnN0YW50JyBkb2VzIG5vdCBoYXZlIGEgcHJpbWl0aXZlIG9wZXJhdG9yICc9PScuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxFbGVtZW50SW1wbGVtZW50c0VxdWFsKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPgogICAgY29kZUNvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWwgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+KAogICAgICAgICJDb25zdEV2YWxFbGVtZW50SW1wbGVtZW50c0VxdWFsIiwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWwsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX1NFVF9FTEVNRU5UX1RZUEVfSU1QTEVNRU5UU19FUVVBTFMiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RFdmFsRWxlbWVudEltcGxlbWVudHNFcXVhbChDb25zdGFudCBfY29uc3RhbnQpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IGNvbnN0YW50UGFydHMgPSBsYWJlbGVyLmxhYmVsQ29uc3RhbnQoX2NvbnN0YW50KTsKICBTdHJpbmcgY29uc3RhbnQgPSBjb25zdGFudFBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWwsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgZWxlbWVudCAnJHtjb25zdGFudH0nIGRvZXMgbm90IGhhdmUgYSBwcmltaXRpdmUgb3BlcmF0b3IgJz09Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeydjb25zdGFudCc6IF9jb25zdGFudH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdEV2YWxGYWlsZWRBc3NlcnRpb24gPSBtZXNzYWdlQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbiIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09OU1RfRVZBTF9USFJPV1NfRVhDRVBUSU9OIl0sCiAgICBtZXNzYWdlOiByIiIiVGhpcyBhc3NlcnRpb24gZmFpbGVkLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPgogICAgdGVtcGxhdGVDb25zdEV2YWxGYWlsZWRBc3NlcnRpb25XaXRoTWVzc2FnZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUaGlzIGFzc2VydGlvbiBmYWlsZWQgd2l0aCBtZXNzYWdlOiAjc3RyaW5nIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uV2l0aE1lc3NhZ2UpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPgogICAgY29kZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbldpdGhNZXNzYWdlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgIkNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbldpdGhNZXNzYWdlIiwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbldpdGhNZXNzYWdlLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9FVkFMX1RIUk9XU19FWENFUFRJT04iXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uV2l0aE1lc3NhZ2UoU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEV2YWxGYWlsZWRBc3NlcnRpb25XaXRoTWVzc2FnZSwKICAgICAgbWVzc2FnZTogIiIiVGhpcyBhc3NlcnRpb24gZmFpbGVkIHdpdGggbWVzc2FnZTogJHtzdHJpbmd9IiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZSk+IHRlbXBsYXRlQ29uc3RFdmFsRnJlZVR5cGVQYXJhbWV0ZXIgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSB0eXBlICcjdHlwZScgaXMgbm90IGEgY29uc3RhbnQgYmVjYXVzZSBpdCBkZXBlbmRzIG9uIGEgdHlwZSBwYXJhbWV0ZXIsIG9ubHkgaW5zdGFudGlhdGVkIHR5cGVzIGFyZSBhbGxvd2VkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RFdmFsRnJlZVR5cGVQYXJhbWV0ZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4gY29kZUNvbnN0RXZhbEZyZWVUeXBlUGFyYW1ldGVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+KAogICJDb25zdEV2YWxGcmVlVHlwZVBhcmFtZXRlciIsCiAgdGVtcGxhdGVDb25zdEV2YWxGcmVlVHlwZVBhcmFtZXRlciwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxGcmVlVHlwZVBhcmFtZXRlcihEYXJ0VHlwZSBfdHlwZSkgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbEZyZWVUeXBlUGFyYW1ldGVyLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBhIGNvbnN0YW50IGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBhIHR5cGUgcGFyYW1ldGVyLCBvbmx5IGluc3RhbnRpYXRlZCB0eXBlcyBhcmUgYWxsb3dlZC4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgQ29uc3RhbnQgX2NvbnN0YW50LAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMik+IHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBDb25zdGFudCBfY29uc3RhbnQsIERhcnRUeXBlIF90eXBlLAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQmluYXJ5IG9wZXJhdG9yICcjc3RyaW5nJyBvbiAnI2NvbnN0YW50JyByZXF1aXJlcyBvcGVyYW5kIG9mIHR5cGUgJyN0eXBlJywgYnV0IHdhcyBvZiB0eXBlICcjdHlwZTInLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCwgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUgX3R5cGUyKT4gY29kZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZSA9IGNvbnN0IENvZGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICJDb25zdEV2YWxJbnZhbGlkQmluYXJ5T3BlcmFuZFR5cGUiLAogIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZSgKICAgIFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiBjb25zdGFudFBhcnRzID0gbGFiZWxlci5sYWJlbENvbnN0YW50KF9jb25zdGFudCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIGNvbnN0YW50ID0gY29uc3RhbnRQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQmluYXJ5IG9wZXJhdG9yICcke3N0cmluZ30nIG9uICcke2NvbnN0YW50fScgcmVxdWlyZXMgb3BlcmFuZCBvZiB0eXBlICcke3R5cGV9JywgYnV0IHdhcyBvZiB0eXBlICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsKICAgICAgICAnc3RyaW5nJzogc3RyaW5nLAogICAgICAgICdjb25zdGFudCc6IF9jb25zdGFudCwKICAgICAgICAndHlwZSc6IF90eXBlLAogICAgICAgICd0eXBlMic6IF90eXBlMgogICAgICB9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIENvbnN0YW50IF9jb25zdGFudCwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZSk+IHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZEVxdWFsc09wZXJhbmRUeXBlID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQsIERhcnRUeXBlIF90eXBlKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkJpbmFyeSBvcGVyYXRvciAnPT0nIHJlcXVpcmVzIHJlY2VpdmVyIGNvbnN0YW50ICcjY29uc3RhbnQnIG9mIHR5cGUgJ051bGwnLCAnYm9vbCcsICdpbnQnLCAnZG91YmxlJywgb3IgJ1N0cmluZycsIGJ1dCB3YXMgb2YgdHlwZSAnI3R5cGUnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZEVxdWFsc09wZXJhbmRUeXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQsIERhcnRUeXBlIF90eXBlKT4KICAgIGNvZGVDb25zdEV2YWxJbnZhbGlkRXF1YWxzT3BlcmFuZFR5cGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCwgRGFydFR5cGUgX3R5cGUpPigKICAiQ29uc3RFdmFsSW52YWxpZEVxdWFsc09wZXJhbmRUeXBlIiwKICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRFcXVhbHNPcGVyYW5kVHlwZSwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkRXF1YWxzT3BlcmFuZFR5cGUoCiAgICBDb25zdGFudCBfY29uc3RhbnQsIERhcnRUeXBlIF90eXBlKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiBjb25zdGFudFBhcnRzID0gbGFiZWxlci5sYWJlbENvbnN0YW50KF9jb25zdGFudCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBTdHJpbmcgY29uc3RhbnQgPSBjb25zdGFudFBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEV2YWxJbnZhbGlkRXF1YWxzT3BlcmFuZFR5cGUsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJCaW5hcnkgb3BlcmF0b3IgJz09JyByZXF1aXJlcyByZWNlaXZlciBjb25zdGFudCAnJHtjb25zdGFudH0nIG9mIHR5cGUgJ051bGwnLCAnYm9vbCcsICdpbnQnLCAnZG91YmxlJywgb3IgJ1N0cmluZycsIGJ1dCB3YXMgb2YgdHlwZSAnJHt0eXBlfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnY29uc3RhbnQnOiBfY29uc3RhbnQsICd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgQ29uc3RhbnQKICAgICAgICAgICAgX2NvbnN0YW50KT4gdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvbiA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgQ29uc3RhbnQgX2NvbnN0YW50KT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBtZXRob2QgJyNzdHJpbmcnIGNhbid0IGJlIGludm9rZWQgb24gJyNjb25zdGFudCcgd2l0aGluIGEgY29uc3QgY29udGV4dC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRNZXRob2RJbnZvY2F0aW9uKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBDb25zdGFudCBfY29uc3RhbnQpPgogICAgY29kZUNvbnN0RXZhbEludmFsaWRNZXRob2RJbnZvY2F0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICAiQ29uc3RFdmFsSW52YWxpZE1ldGhvZEludm9jYXRpb24iLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZE1ldGhvZEludm9jYXRpb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlVOREVGSU5FRF9PUEVSQVRPUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvbigKICAgIFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCkgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiBjb25zdGFudFBhcnRzID0gbGFiZWxlci5sYWJlbENvbnN0YW50KF9jb25zdGFudCk7CiAgU3RyaW5nIGNvbnN0YW50ID0gY29uc3RhbnRQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvbiwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBtZXRob2QgJyR7c3RyaW5nfScgY2FuJ3QgYmUgaW52b2tlZCBvbiAnJHtjb25zdGFudH0nIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nLCAnY29uc3RhbnQnOiBfY29uc3RhbnR9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgQ29uc3RhbnQKICAgICAgICAgICAgX2NvbnN0YW50KT4gdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkUHJvcGVydHlHZXQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgcHJvcGVydHkgJyNzdHJpbmcnIGNhbid0IGJlIGFjY2Vzc2VkIG9uICcjY29uc3RhbnQnIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkUHJvcGVydHlHZXQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIENvbnN0YW50IF9jb25zdGFudCk+CiAgICBjb2RlQ29uc3RFdmFsSW52YWxpZFByb3BlcnR5R2V0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICAiQ29uc3RFdmFsSW52YWxpZFByb3BlcnR5R2V0IiwgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkUHJvcGVydHlHZXQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX0VWQUxfVEhST1dTX0VYQ0VQVElPTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkUHJvcGVydHlHZXQoCiAgICBTdHJpbmcgc3RyaW5nLCBDb25zdGFudCBfY29uc3RhbnQpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gY29uc3RhbnRQYXJ0cyA9IGxhYmVsZXIubGFiZWxDb25zdGFudChfY29uc3RhbnQpOwogIFN0cmluZyBjb25zdGFudCA9IGNvbnN0YW50UGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsSW52YWxpZFByb3BlcnR5R2V0LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIHByb3BlcnR5ICcke3N0cmluZ30nIGNhbid0IGJlIGFjY2Vzc2VkIG9uICcke2NvbnN0YW50fScgd2l0aGluIGEgY29uc3QgY29udGV4dC4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICdjb25zdGFudCc6IF9jb25zdGFudH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgaW52b2NhdGlvbiBvZiAnI25hbWUnIGlzIG5vdCBhbGxvd2VkIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkU3RhdGljSW52b2NhdGlvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQ29uc3RFdmFsSW52YWxpZFN0YXRpY0ludm9jYXRpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uIiwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9JTklUSUFMSVpFRF9XSVRIX05PTl9DT05TVEFOVF9WQUxVRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkU3RhdGljSW52b2NhdGlvbihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGludm9jYXRpb24gb2YgJyR7bmFtZX0nIGlzIG5vdCBhbGxvd2VkIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPgogICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkU3RyaW5nSW50ZXJwb2xhdGlvbk9wZXJhbmQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUaGUgJyNjb25zdGFudCcgY2FuJ3QgYmUgdXNlZCBhcyBwYXJ0IG9mIGEgc3RyaW5nIGludGVycG9sYXRpb24gd2l0aGluIGEgY29uc3QgY29udGV4dCwgb25seSB2YWx1ZXMgb2YgdHlwZSAnbnVsbCcsICdib29sJywgJ2ludCcsICdkb3VibGUnLCBvciAnU3RyaW5nJyBjYW4gYmUgdXNlZC4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czoKICAgICAgICAgICAgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkU3RyaW5nSW50ZXJwb2xhdGlvbk9wZXJhbmQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+CiAgICBjb2RlQ29uc3RFdmFsSW52YWxpZFN0cmluZ0ludGVycG9sYXRpb25PcGVyYW5kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICAiQ29uc3RFdmFsSW52YWxpZFN0cmluZ0ludGVycG9sYXRpb25PcGVyYW5kIiwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdHJpbmdJbnRlcnBvbGF0aW9uT3BlcmFuZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09OU1RfRVZBTF9UWVBFX0JPT0xfTlVNX1NUUklORyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkU3RyaW5nSW50ZXJwb2xhdGlvbk9wZXJhbmQoCiAgICBDb25zdGFudCBfY29uc3RhbnQpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IGNvbnN0YW50UGFydHMgPSBsYWJlbGVyLmxhYmVsQ29uc3RhbnQoX2NvbnN0YW50KTsKICBTdHJpbmcgY29uc3RhbnQgPSBjb25zdGFudFBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbEludmFsaWRTdHJpbmdJbnRlcnBvbGF0aW9uT3BlcmFuZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSAnJHtjb25zdGFudH0nIGNhbid0IGJlIHVzZWQgYXMgcGFydCBvZiBhIHN0cmluZyBpbnRlcnBvbGF0aW9uIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQsIG9ubHkgdmFsdWVzIG9mIHR5cGUgJ251bGwnLCAnYm9vbCcsICdpbnQnLCAnZG91YmxlJywgb3IgJ1N0cmluZycgY2FuIGJlIHVzZWQuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnY29uc3RhbnQnOiBfY29uc3RhbnR9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIENvbnN0YW50CiAgICAgICAgICAgIF9jb25zdGFudCk+IHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN5bWJvbE5hbWUgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgc3ltYm9sIG5hbWUgbXVzdCBiZSBhIHZhbGlkIHB1YmxpYyBEYXJ0IG1lbWJlciBuYW1lLCBwdWJsaWMgY29uc3RydWN0b3IgbmFtZSwgb3IgbGlicmFyeSBuYW1lLCBvcHRpb25hbGx5IHF1YWxpZmllZCwgYnV0IHdhcyAnI2NvbnN0YW50Jy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRTeW1ib2xOYW1lKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPgogICAgY29kZUNvbnN0RXZhbEludmFsaWRTeW1ib2xOYW1lID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICAiQ29uc3RFdmFsSW52YWxpZFN5bWJvbE5hbWUiLCB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTeW1ib2xOYW1lLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9FVkFMX1RIUk9XU19FWENFUFRJT04iXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZFN5bWJvbE5hbWUoQ29uc3RhbnQgX2NvbnN0YW50KSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiBjb25zdGFudFBhcnRzID0gbGFiZWxlci5sYWJlbENvbnN0YW50KF9jb25zdGFudCk7CiAgU3RyaW5nIGNvbnN0YW50ID0gY29uc3RhbnRQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEV2YWxJbnZhbGlkU3ltYm9sTmFtZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBzeW1ib2wgbmFtZSBtdXN0IGJlIGEgdmFsaWQgcHVibGljIERhcnQgbWVtYmVyIG5hbWUsIHB1YmxpYyBjb25zdHJ1Y3RvciBuYW1lLCBvciBsaWJyYXJ5IG5hbWUsIG9wdGlvbmFsbHkgcXVhbGlmaWVkLCBidXQgd2FzICcke2NvbnN0YW50fScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnY29uc3RhbnQnOiBfY29uc3RhbnR9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIENvbnN0YW50IF9jb25zdGFudCwKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZTIpPiB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRUeXBlID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiRXhwZWN0ZWQgY29uc3RhbnQgJyNjb25zdGFudCcgdG8gYmUgb2YgdHlwZSAnI3R5cGUnLCBidXQgd2FzIG9mIHR5cGUgJyN0eXBlMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkVHlwZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oQ29uc3RhbnQgX2NvbnN0YW50LCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVDb25zdEV2YWxJbnZhbGlkVHlwZSA9IGNvbnN0IENvZGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAiQ29uc3RFdmFsSW52YWxpZFR5cGUiLAogIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFR5cGUsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZFR5cGUoCiAgICBDb25zdGFudCBfY29uc3RhbnQsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IGNvbnN0YW50UGFydHMgPSBsYWJlbGVyLmxhYmVsQ29uc3RhbnQoX2NvbnN0YW50KTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgY29uc3RhbnQgPSBjb25zdGFudFBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEV2YWxJbnZhbGlkVHlwZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkV4cGVjdGVkIGNvbnN0YW50ICcke2NvbnN0YW50fScgdG8gYmUgb2YgdHlwZSAnJHt0eXBlfScsIGJ1dCB3YXMgb2YgdHlwZSAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J2NvbnN0YW50JzogX2NvbnN0YW50LCAndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPgogICAgdGVtcGxhdGVDb25zdEV2YWxLZXlJbXBsZW1lbnRzRXF1YWwgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUaGUga2V5ICcjY29uc3RhbnQnIGRvZXMgbm90IGhhdmUgYSBwcmltaXRpdmUgb3BlcmF0b3IgJz09Jy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxLZXlJbXBsZW1lbnRzRXF1YWwpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKENvbnN0YW50IF9jb25zdGFudCk+CiAgICBjb2RlQ29uc3RFdmFsS2V5SW1wbGVtZW50c0VxdWFsID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihDb25zdGFudCBfY29uc3RhbnQpPigKICAgICAgICAiQ29uc3RFdmFsS2V5SW1wbGVtZW50c0VxdWFsIiwgdGVtcGxhdGVDb25zdEV2YWxLZXlJbXBsZW1lbnRzRXF1YWwsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bCiAgICAgICJDT05TVF9NQVBfS0VZX0VYUFJFU1NJT05fVFlQRV9JTVBMRU1FTlRTX0VRVUFMUyIKICAgIF0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEtleUltcGxlbWVudHNFcXVhbChDb25zdGFudCBfY29uc3RhbnQpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IGNvbnN0YW50UGFydHMgPSBsYWJlbGVyLmxhYmVsQ29uc3RhbnQoX2NvbnN0YW50KTsKICBTdHJpbmcgY29uc3RhbnQgPSBjb25zdGFudFBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbEtleUltcGxlbWVudHNFcXVhbCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBrZXkgJyR7Y29uc3RhbnR9JyBkb2VzIG5vdCBoYXZlIGEgcHJpbWl0aXZlIG9wZXJhdG9yICc9PScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnY29uc3RhbnQnOiBfY29uc3RhbnR9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgU3RyaW5nIHN0cmluZzIsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIHN0cmluZzMpPiB0ZW1wbGF0ZUNvbnN0RXZhbE5lZ2F0aXZlU2hpZnQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyLCBTdHJpbmcgc3RyaW5nMyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJCaW5hcnkgb3BlcmF0b3IgJyNzdHJpbmcnIG9uICcjc3RyaW5nMicgcmVxdWlyZXMgbm9uLW5lZ2F0aXZlIG9wZXJhbmQsIGJ1dCB3YXMgJyNzdHJpbmczJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbE5lZ2F0aXZlU2hpZnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyLCBTdHJpbmcgc3RyaW5nMyk+CiAgICBjb2RlQ29uc3RFdmFsTmVnYXRpdmVTaGlmdCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczKT4oCiAgIkNvbnN0RXZhbE5lZ2F0aXZlU2hpZnQiLAogIHRlbXBsYXRlQ29uc3RFdmFsTmVnYXRpdmVTaGlmdCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdEV2YWxOZWdhdGl2ZVNoaWZ0KAogICAgU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMi5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbE5lZ2F0aXZlU2hpZnQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJCaW5hcnkgb3BlcmF0b3IgJyR7c3RyaW5nfScgb24gJyR7c3RyaW5nMn0nIHJlcXVpcmVzIG5vbi1uZWdhdGl2ZSBvcGVyYW5kLCBidXQgd2FzICcke3N0cmluZzN9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICdzdHJpbmcyJzogc3RyaW5nMiwgJ3N0cmluZzMnOiBzdHJpbmczfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgc3RyaW5nKT4gdGVtcGxhdGVDb25zdEV2YWxOb25Db25zdGFudExpdGVyYWwgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQ2FuJ3QgaGF2ZSBhIG5vbi1jb25zdGFudCAjc3RyaW5nIGxpdGVyYWwgd2l0aGluIGEgY29uc3QgY29udGV4dC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IGNvZGVDb25zdEV2YWxOb25Db25zdGFudExpdGVyYWwgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiQ29uc3RFdmFsTm9uQ29uc3RhbnRMaXRlcmFsIiwgdGVtcGxhdGVDb25zdEV2YWxOb25Db25zdGFudExpdGVyYWwsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PTl9DT05TVEFOVF9ERUZBVUxUX1ZBTFVFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbChTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNhbid0IGhhdmUgYSBub24tY29uc3RhbnQgJHtzdHJpbmd9IGxpdGVyYWwgd2l0aGluIGEgY29uc3QgY29udGV4dC4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBzdHJpbmcpPiB0ZW1wbGF0ZUNvbnN0RXZhbE5vbkNvbnN0YW50VmFyaWFibGVHZXQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIHZhcmlhYmxlICcjc3RyaW5nJyBpcyBub3QgYSBjb25zdGFudCwgb25seSBjb25zdGFudCBleHByZXNzaW9ucyBhcmUgYWxsb3dlZC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbE5vbkNvbnN0YW50VmFyaWFibGVHZXQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPgogICAgY29kZUNvbnN0RXZhbE5vbkNvbnN0YW50VmFyaWFibGVHZXQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiQ29uc3RFdmFsTm9uQ29uc3RhbnRWYXJpYWJsZUdldCIsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxOb25Db25zdGFudFZhcmlhYmxlR2V0LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT05fQ09OU1RBTlRfVkFMVUVfSU5fSU5JVElBTElaRVIiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RFdmFsTm9uQ29uc3RhbnRWYXJpYWJsZUdldChTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUNvbnN0RXZhbE5vbkNvbnN0YW50VmFyaWFibGVHZXQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgdmFyaWFibGUgJyR7c3RyaW5nfScgaXMgbm90IGEgY29uc3RhbnQsIG9ubHkgY29uc3RhbnQgZXhwcmVzc2lvbnMgYXJlIGFsbG93ZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0RXZhbE5vdExpc3RPclNldEluU3ByZWFkID0KICAgIG1lc3NhZ2VDb25zdEV2YWxOb3RMaXN0T3JTZXRJblNwcmVhZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdEV2YWxOb3RMaXN0T3JTZXRJblNwcmVhZCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0RXZhbE5vdExpc3RPclNldEluU3ByZWFkIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9TUFJFQURfRVhQRUNURURfTElTVF9PUl9TRVQiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIk9ubHkgbGlzdHMgYW5kIHNldHMgY2FuIGJlIHVzZWQgaW4gc3ByZWFkcyBpbiBjb25zdGFudCBsaXN0cyBhbmQgc2V0cy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RFdmFsTm90TWFwSW5TcHJlYWQgPSBtZXNzYWdlQ29uc3RFdmFsTm90TWFwSW5TcHJlYWQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RFdmFsTm90TWFwSW5TcHJlYWQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdEV2YWxOb3RNYXBJblNwcmVhZCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09OU1RfU1BSRUFEX0VYUEVDVEVEX01BUCJdLAogICAgbWVzc2FnZTogciIiIk9ubHkgbWFwcyBjYW4gYmUgdXNlZCBpbiBzcHJlYWRzIGluIGNvbnN0YW50IG1hcHMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0RXZhbE51bGxWYWx1ZSA9IG1lc3NhZ2VDb25zdEV2YWxOdWxsVmFsdWU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RFdmFsTnVsbFZhbHVlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RFdmFsTnVsbFZhbHVlIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVF9FVkFMX1RIUk9XU19FWENFUFRJT04iXSwKICAgIG1lc3NhZ2U6IHIiIiJOdWxsIHZhbHVlIGR1cmluZyBjb25zdGFudCBldmFsdWF0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdEV2YWxVbmV2YWx1YXRlZCA9IG1lc3NhZ2VDb25zdEV2YWxVbmV2YWx1YXRlZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdEV2YWxVbmV2YWx1YXRlZCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0RXZhbFVuZXZhbHVhdGVkIiwKICAgIG1lc3NhZ2U6IHIiIiJDb3VsZCBub3QgZXZhbHVhdGUgY29uc3RhbnQgZXhwcmVzc2lvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIHN0cmluZzIpPiB0ZW1wbGF0ZUNvbnN0RXZhbFplcm9EaXZpc29yID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJCaW5hcnkgb3BlcmF0b3IgJyNzdHJpbmcnIG9uICcjc3RyaW5nMicgcmVxdWlyZXMgbm9uLXplcm8gZGl2aXNvciwgYnV0IGRpdmlzb3Igd2FzICcwJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbFplcm9EaXZpc29yKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+CiAgICBjb2RlQ29uc3RFdmFsWmVyb0Rpdmlzb3IgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4oCiAgICAgICAgIkNvbnN0RXZhbFplcm9EaXZpc29yIiwgdGVtcGxhdGVDb25zdEV2YWxaZXJvRGl2aXNvciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09OU1RfRVZBTF9USFJPV1NfSURCWkUiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ29uc3RFdmFsWmVyb0Rpdmlzb3IoU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmcyLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RFdmFsWmVyb0Rpdmlzb3IsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJCaW5hcnkgb3BlcmF0b3IgJyR7c3RyaW5nfScgb24gJyR7c3RyaW5nMn0nIHJlcXVpcmVzIG5vbi16ZXJvIGRpdmlzb3IsIGJ1dCBkaXZpc29yIHdhcyAnMCcuIiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nLCAnc3RyaW5nMic6IHN0cmluZzJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RGYWN0b3J5ID0gbWVzc2FnZUNvbnN0RmFjdG9yeTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdEZhY3RvcnkgPSBjb25zdCBNZXNzYWdlQ29kZSgiQ29uc3RGYWN0b3J5IiwKICAgIGluZGV4OiA2MiwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIk9ubHkgcmVkaXJlY3RpbmcgZmFjdG9yeSBjb25zdHJ1Y3RvcnMgY2FuIGJlIGRlY2xhcmVkIHRvIGJlICdjb25zdCcuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgcmVtb3ZpbmcgdGhlICdjb25zdCcga2V5d29yZCwgb3IgcmVwbGFjaW5nIHRoZSBib2R5IHdpdGggJz0nIGZvbGxvd2VkIGJ5IGEgdmFsaWQgdGFyZ2V0LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdEZhY3RvcnlSZWRpcmVjdGlvblRvTm9uQ29uc3QgPQogICAgbWVzc2FnZUNvbnN0RmFjdG9yeVJlZGlyZWN0aW9uVG9Ob25Db25zdDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdEZhY3RvcnlSZWRpcmVjdGlvblRvTm9uQ29uc3QgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdEZhY3RvcnlSZWRpcmVjdGlvblRvTm9uQ29uc3QiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFRElSRUNUX1RPX05PTl9DT05TVF9DT05TVFJVQ1RPUiJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQ29uc3RhbnQgZmFjdG9yeSBjb25zdHJ1Y3RvciBjYW4ndCBkZWxlZ2F0ZSB0byBhIG5vbi1jb25zdGFudCBjb25zdHJ1Y3Rvci4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZWRpcmVjdGluZyB0byBhIGRpZmZlcmVudCBjb25zdHJ1Y3RvciBvciBtYXJraW5nIHRoZSB0YXJnZXQgY29uc3RydWN0b3IgJ2NvbnN0Jy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVDb25zdEZpZWxkV2l0aG91dEluaXRpYWxpemVyID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVGhlIGNvbnN0IHZhcmlhYmxlICcjbmFtZScgbXVzdCBiZSBpbml0aWFsaXplZC4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGFkZGluZyBhbiBpbml0aWFsaXplciAoJz0gPGV4cHJlc3Npb24+JykgdG8gdGhlIGRlY2xhcmF0aW9uLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29uc3RGaWVsZFdpdGhvdXRJbml0aWFsaXplcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQ29uc3RGaWVsZFdpdGhvdXRJbml0aWFsaXplciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ29uc3RGaWVsZFdpdGhvdXRJbml0aWFsaXplciIsIHRlbXBsYXRlQ29uc3RGaWVsZFdpdGhvdXRJbml0aWFsaXplciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09OU1RfTk9UX0lOSVRJQUxJWkVEIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0RmllbGRXaXRob3V0SW5pdGlhbGl6ZXIoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdEZpZWxkV2l0aG91dEluaXRpYWxpemVyLAogICAgICBtZXNzYWdlOiAiIiJUaGUgY29uc3QgdmFyaWFibGUgJyR7bmFtZX0nIG11c3QgYmUgaW5pdGlhbGl6ZWQuIiIiLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgYWRkaW5nIGFuIGluaXRpYWxpemVyICgnPSA8ZXhwcmVzc2lvbj4nKSB0byB0aGUgZGVjbGFyYXRpb24uIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RJbnN0YW5jZUZpZWxkID0gbWVzc2FnZUNvbnN0SW5zdGFuY2VGaWVsZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdEluc3RhbmNlRmllbGQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdEluc3RhbmNlRmllbGQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTlNUX0lOU1RBTkNFX0ZJRUxEIl0sCiAgICBtZXNzYWdlOiByIiIiT25seSBzdGF0aWMgZmllbGRzIGNhbiBiZSBkZWNsYXJlZCBhcyBjb25zdC4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSB1c2luZyAnZmluYWwnIGluc3RlYWQgb2YgJ2NvbnN0Jywgb3IgYWRkaW5nIHRoZSBrZXl3b3JkICdzdGF0aWMnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdE1ldGhvZCA9IG1lc3NhZ2VDb25zdE1ldGhvZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdE1ldGhvZCA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJDb25zdE1ldGhvZCIsCiAgICBpbmRleDogNjMsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJHZXR0ZXJzLCBzZXR0ZXJzIGFuZCBtZXRob2RzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlICdjb25zdCcuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIHRoZSAnY29uc3QnIGtleXdvcmQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0cnVjdG9yQ3ljbGljID0gbWVzc2FnZUNvbnN0cnVjdG9yQ3ljbGljOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0cnVjdG9yQ3ljbGljID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RydWN0b3JDeWNsaWMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFQ1VSU0lWRV9DT05TVFJVQ1RPUl9SRURJUkVDVCJdLAogICAgbWVzc2FnZTogciIiIlJlZGlyZWN0aW5nIGNvbnN0cnVjdGVycyBjYW4ndCBiZSBjeWNsaWMuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgdG8gaGF2ZSBhbGwgY29uc3RydWN0b3JzIGV2ZW50dWFsbHkgcmVkaXJlY3QgdG8gYSBub24tcmVkaXJlY3RpbmcgY29uc3RydWN0b3IuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUNvbnN0cnVjdG9yTm90Rm91bmQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNvdWxkbid0IGZpbmQgY29uc3RydWN0b3IgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdHJ1Y3Rvck5vdEZvdW5kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVDb25zdHJ1Y3Rvck5vdEZvdW5kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDb25zdHJ1Y3Rvck5vdEZvdW5kIiwgdGVtcGxhdGVDb25zdHJ1Y3Rvck5vdEZvdW5kLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05TVFJVQ1RPUl9OT1RfRk9VTkQiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDb25zdHJ1Y3Rvck5vdEZvdW5kKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29uc3RydWN0b3JOb3RGb3VuZCwKICAgICAgbWVzc2FnZTogIiIiQ291bGRuJ3QgZmluZCBjb25zdHJ1Y3RvciAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RydWN0b3JOb3RTeW5jID0gbWVzc2FnZUNvbnN0cnVjdG9yTm90U3luYzsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb25zdHJ1Y3Rvck5vdFN5bmMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdHJ1Y3Rvck5vdFN5bmMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PTl9TWU5DX0NPTlNUUlVDVE9SIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJDb25zdHJ1Y3RvciBib2RpZXMgY2FuJ3QgdXNlICdhc3luYycsICdhc3luYyonLCBvciAnc3luYyonLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdHJ1Y3RvcldpdGhSZXR1cm5UeXBlID0KICAgIG1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhSZXR1cm5UeXBlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFJldHVyblR5cGUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb25zdHJ1Y3RvcldpdGhSZXR1cm5UeXBlIiwKICAgIGluZGV4OiA1NSwKICAgIG1lc3NhZ2U6IHIiIiJDb25zdHJ1Y3RvcnMgY2FuJ3QgaGF2ZSBhIHJldHVybiB0eXBlLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUgcmV0dXJuIHR5cGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnN0cnVjdG9yV2l0aFR5cGVBcmd1bWVudHMgPQogICAgbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFR5cGVBcmd1bWVudHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29uc3RydWN0b3JXaXRoVHlwZUFyZ3VtZW50cyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0cnVjdG9yV2l0aFR5cGVBcmd1bWVudHMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIldST05HX05VTUJFUl9PRl9UWVBFX0FSR1VNRU5UU19DT05TVFJVQ1RPUiJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQSBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uIGNhbid0IGhhdmUgdHlwZSBhcmd1bWVudHMgb24gdGhlIGNvbnN0cnVjdG9yIG5hbWUuIiIiLAogICAgdGlwOiByIiIiVHJ5IHRvIHBsYWNlIHRoZSB0eXBlIGFyZ3VtZW50cyBvbiB0aGUgY2xhc3MgbmFtZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ29uc3RydWN0b3JXaXRoVHlwZVBhcmFtZXRlcnMgPQogICAgbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFR5cGVQYXJhbWV0ZXJzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFR5cGVQYXJhbWV0ZXJzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29uc3RydWN0b3JXaXRoVHlwZVBhcmFtZXRlcnMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfUEFSQU1FVEVSX09OX0NPTlNUUlVDVE9SIl0sCiAgICBtZXNzYWdlOiByIiIiQ29uc3RydWN0b3JzIGNhbid0IGhhdmUgdHlwZSBwYXJhbWV0ZXJzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWUgPSBtZXNzYWdlQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9DT05TVFJVQ1RPUl9OQU1FIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUaGUgbmFtZSBvZiBhIGNvbnN0cnVjdG9yIG11c3QgbWF0Y2ggdGhlIG5hbWUgb2YgdGhlIGVuY2xvc2luZyBjbGFzcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZUNvbnRleHQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlRoZSBuYW1lIG9mIHRoZSBlbmNsb3NpbmcgY2xhc3MgaXMgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWVDb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWVDb250ZXh0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KCJDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWVDb250ZXh0IiwKICAgICAgICB0ZW1wbGF0ZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZUNvbnRleHQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnN0cnVjdG9yV2l0aFdyb25nTmFtZUNvbnRleHQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVDb25zdHJ1Y3RvcldpdGhXcm9uZ05hbWVDb250ZXh0LAogICAgICBtZXNzYWdlOiAiIiJUaGUgbmFtZSBvZiB0aGUgZW5jbG9zaW5nIGNsYXNzIGlzICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb250aW51ZUxhYmVsTm90VGFyZ2V0ID0gbWVzc2FnZUNvbnRpbnVlTGFiZWxOb3RUYXJnZXQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29udGludWVMYWJlbE5vdFRhcmdldCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkNvbnRpbnVlTGFiZWxOb3RUYXJnZXQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkxBQkVMX1VOREVGSU5FRCJdLAogICAgbWVzc2FnZTogciIiIlRhcmdldCBvZiBjb250aW51ZSBtdXN0IGJlIGEgbGFiZWwuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUNvbnRpbnVlT3V0c2lkZU9mTG9vcCA9IG1lc3NhZ2VDb250aW51ZU91dHNpZGVPZkxvb3A7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29udGludWVPdXRzaWRlT2ZMb29wID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiQ29udGludWVPdXRzaWRlT2ZMb29wIiwKICAgIGluZGV4OiAyLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQSBjb250aW51ZSBzdGF0ZW1lbnQgY2FuJ3QgYmUgdXNlZCBvdXRzaWRlIG9mIGEgbG9vcCBvciBzd2l0Y2ggc3RhdGVtZW50LiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUgY29udGludWUgc3RhdGVtZW50LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb24gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkNhbid0IGNvbnRpbnVlIGF0ICcjbmFtZScgaW4gYSBkaWZmZXJlbnQgZnVuY3Rpb24uIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUNvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbiIsIHRlbXBsYXRlQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkxBQkVMX0lOX09VVEVSX1NDT1BFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb24sCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IGNvbnRpbnVlIGF0ICcke25hbWV9JyBpbiBhIGRpZmZlcmVudCBmdW5jdGlvbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb250aW51ZVdpdGhvdXRMYWJlbEluQ2FzZSA9CiAgICBtZXNzYWdlQ29udGludWVXaXRob3V0TGFiZWxJbkNhc2U7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlQ29udGludWVXaXRob3V0TGFiZWxJbkNhc2UgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb250aW51ZVdpdGhvdXRMYWJlbEluQ2FzZSIsCiAgICBpbmRleDogNjQsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJBIGNvbnRpbnVlIHN0YXRlbWVudCBpbiBhIHN3aXRjaCBzdGF0ZW1lbnQgbXVzdCBoYXZlIGEgbGFiZWwgYXMgYSB0YXJnZXQuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgYWRkaW5nIGEgbGFiZWwgYXNzb2NpYXRlZCB3aXRoIG9uZSBvZiB0aGUgY2FzZSBjbGF1c2VzIHRvIHRoZSBjb250aW51ZSBzdGF0ZW1lbnQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPgogICAgdGVtcGxhdGVDb3VsZE5vdFBhcnNlVXJpID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDb3VsZG4ndCBwYXJzZSBVUkkgJyNzdHJpbmcnOgogICNzdHJpbmcyLiIiIiwgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDb3VsZE5vdFBhcnNlVXJpKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+CiAgICBjb2RlQ291bGROb3RQYXJzZVVyaSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPigKICAiQ291bGROb3RQYXJzZVVyaSIsCiAgdGVtcGxhdGVDb3VsZE5vdFBhcnNlVXJpLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0NvdWxkTm90UGFyc2VVcmkoU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmcyLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ291bGROb3RQYXJzZVVyaSwKICAgICAgbWVzc2FnZTogIiIiQ291bGRuJ3QgcGFyc2UgVVJJICcke3N0cmluZ30nOgogICR7c3RyaW5nMn0uIiIiLCBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nLCAnc3RyaW5nMic6IHN0cmluZzJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlQ292YXJpYW50QW5kU3RhdGljID0gbWVzc2FnZUNvdmFyaWFudEFuZFN0YXRpYzsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VDb3ZhcmlhbnRBbmRTdGF0aWMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJDb3ZhcmlhbnRBbmRTdGF0aWMiLAogICAgaW5kZXg6IDY2LAogICAgbWVzc2FnZToKICAgICAgICByIiIiTWVtYmVycyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSBib3RoICdjb3ZhcmlhbnQnIGFuZCAnc3RhdGljJy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgZWl0aGVyIHRoZSAnY292YXJpYW50JyBvciAnc3RhdGljJyBrZXl3b3JkLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVDb3ZhcmlhbnRNZW1iZXIgPSBtZXNzYWdlQ292YXJpYW50TWVtYmVyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUNvdmFyaWFudE1lbWJlciA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJDb3ZhcmlhbnRNZW1iZXIiLAogICAgaW5kZXg6IDY3LAogICAgbWVzc2FnZToKICAgICAgICByIiIiR2V0dGVycywgc2V0dGVycyBhbmQgbWV0aG9kcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnY292YXJpYW50Jy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlICdjb3ZhcmlhbnQnIGtleXdvcmQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgc3RyaW5nKT4gdGVtcGxhdGVDeWNsZUluVHlwZVZhcmlhYmxlcyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlR5cGUgJyNuYW1lJyBpcyBhIGJvdW5kIG9mIGl0c2VsZiB2aWEgJyNzdHJpbmcnLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgYnJlYWtpbmcgdGhlIGN5Y2xlIGJ5IHJlbW92aW5nIGF0IGxlYXN0IG9uIG9mIHRoZSAnZXh0ZW5kcycgY2xhdXNlcyBpbiB0aGUgY3ljbGUuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNDeWNsZUluVHlwZVZhcmlhYmxlcyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpPgogICAgY29kZUN5Y2xlSW5UeXBlVmFyaWFibGVzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJDeWNsZUluVHlwZVZhcmlhYmxlcyIsIHRlbXBsYXRlQ3ljbGVJblR5cGVWYXJpYWJsZXMsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfUEFSQU1FVEVSX1NVUEVSVFlQRV9PRl9JVFNfQk9VTkQiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ3ljbGVJblR5cGVWYXJpYWJsZXMoU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUN5Y2xlSW5UeXBlVmFyaWFibGVzLAogICAgICBtZXNzYWdlOiAiIiJUeXBlICcke25hbWV9JyBpcyBhIGJvdW5kIG9mIGl0c2VsZiB2aWEgJyR7c3RyaW5nfScuIiIiLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgYnJlYWtpbmcgdGhlIGN5Y2xlIGJ5IHJlbW92aW5nIGF0IGxlYXN0IG9uIG9mIHRoZSAnZXh0ZW5kcycgY2xhdXNlcyBpbiB0aGUgY3ljbGUuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICdzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlQ3ljbGljQ2xhc3NIaWVyYXJjaHkgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIicjbmFtZScgaXMgYSBzdXBlcnR5cGUgb2YgaXRzZWxmLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0N5Y2xpY0NsYXNzSGllcmFyY2h5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVDeWNsaWNDbGFzc0hpZXJhcmNoeSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ3ljbGljQ2xhc3NIaWVyYXJjaHkiLCB0ZW1wbGF0ZUN5Y2xpY0NsYXNzSGllcmFyY2h5LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJSRUNVUlNJVkVfSU5URVJGQUNFX0lOSEVSSVRBTkNFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0N5Y2xpY0NsYXNzSGllcmFyY2h5KFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ3ljbGljQ2xhc3NIaWVyYXJjaHksCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpcyBhIHN1cGVydHlwZSBvZiBpdHNlbGYuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUN5Y2xpY1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycyA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ3ljbGljIGRlZmluaXRpb24gb2YgZmFjdG9yeSAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0N5Y2xpY1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgY29kZUN5Y2xpY1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ3ljbGljUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzIiwKICAgICAgICB0ZW1wbGF0ZUN5Y2xpY1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUkVDVVJTSVZFX0ZBQ1RPUllfUkVESVJFQ1QiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzQ3ljbGljUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ3ljbGljUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLAogICAgICBtZXNzYWdlOiAiIiJDeWNsaWMgZGVmaW5pdGlvbiBvZiBmYWN0b3J5ICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVDeWNsaWNUeXBlZGVmID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUaGUgdHlwZWRlZiAnI25hbWUnIGhhcyBhIHJlZmVyZW5jZSB0byBpdHNlbGYuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzQ3ljbGljVHlwZWRlZik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlQ3ljbGljVHlwZWRlZiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiQ3ljbGljVHlwZWRlZiIsIHRlbXBsYXRlQ3ljbGljVHlwZWRlZiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVFlQRV9BTElBU19DQU5OT1RfUkVGRVJFTkNFX0lUU0VMRiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNDeWNsaWNUeXBlZGVmKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlQ3ljbGljVHlwZWRlZiwKICAgICAgbWVzc2FnZTogIiIiVGhlIHR5cGVkZWYgJyR7bmFtZX0nIGhhcyBhIHJlZmVyZW5jZSB0byBpdHNlbGYuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyID0KICAgIG1lc3NhZ2VEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXIiLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJERUNMQVJFRF9NRU1CRVJfQ09ORkxJQ1RTX1dJVEhfSU5IRVJJVEVEIl0sCiAgICAgICAgbWVzc2FnZToKICAgICAgICAgICAgciIiIkNhbid0IGRlY2xhcmUgYSBtZW1iZXIgdGhhdCBjb25mbGljdHMgd2l0aCBhbiBpbmhlcml0ZWQgb25lLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXJDYXVzZSA9CiAgICBtZXNzYWdlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyQ2F1c2U7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyQ2F1c2UgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkRlY2xhcmVkTWVtYmVyQ29uZmxpY3RzV2l0aEluaGVyaXRlZE1lbWJlckNhdXNlIiwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwKICAgICAgICBtZXNzYWdlOiByIiIiVGhpcyBpcyB0aGUgaW5oZXJpdGVkIG1lbWJlci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZURlZmF1bHRWYWx1ZUluUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkNhbid0IGhhdmUgYSBkZWZhdWx0IHZhbHVlIGhlcmUgYmVjYXVzZSBhbnkgZGVmYXVsdCB2YWx1ZXMgb2YgJyNuYW1lJyB3b3VsZCBiZSB1c2VkIGluc3RlYWQuIiIiLAogICAgICAgIHRpcFRlbXBsYXRlOiByIiIiVHJ5IHJlbW92aW5nIHRoZSBkZWZhdWx0IHZhbHVlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOgogICAgICAgICAgICBfd2l0aEFyZ3VtZW50c0RlZmF1bHRWYWx1ZUluUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVEZWZhdWx0VmFsdWVJblJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJEZWZhdWx0VmFsdWVJblJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIiwKICAgICAgICB0ZW1wbGF0ZURlZmF1bHRWYWx1ZUluUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bCiAgICAgICJERUZBVUxUX1ZBTFVFX0lOX1JFRElSRUNUSU5HX0ZBQ1RPUllfQ09OU1RSVUNUT1IiCiAgICBdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEZWZhdWx0VmFsdWVJblJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRGVmYXVsdFZhbHVlSW5SZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNhbid0IGhhdmUgYSBkZWZhdWx0IHZhbHVlIGhlcmUgYmVjYXVzZSBhbnkgZGVmYXVsdCB2YWx1ZXMgb2YgJyR7bmFtZX0nIHdvdWxkIGJlIHVzZWQgaW5zdGVhZC4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHJlbW92aW5nIHRoZSBkZWZhdWx0IHZhbHVlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZURlZmVycmVkQWZ0ZXJQcmVmaXggPSBtZXNzYWdlRGVmZXJyZWRBZnRlclByZWZpeDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VEZWZlcnJlZEFmdGVyUHJlZml4ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRGVmZXJyZWRBZnRlclByZWZpeCIsCiAgICBpbmRleDogNjgsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUaGUgZGVmZXJyZWQga2V5d29yZCBzaG91bGQgY29tZSBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIHByZWZpeCAoJ2FzJyBjbGF1c2UpLiIiIiwKICAgIHRpcDogciIiIlRyeSBtb3ZpbmcgdGhlIGRlZmVycmVkIGtleXdvcmQgYmVmb3JlIHRoZSBwcmVmaXguIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJDYW4ndCB1c2UgdGhlIG5hbWUgJyNuYW1lJyBmb3IgYSBkZWZlcnJlZCBsaWJyYXJ5LCBhcyB0aGUgbmFtZSBpcyB1c2VkIGVsc2V3aGVyZS4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0RlZmVycmVkUHJlZml4RHVwbGljYXRlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWQiLCB0ZW1wbGF0ZURlZmVycmVkUHJlZml4RHVwbGljYXRlZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiU0hBUkVEX0RFRkVSUkVEX1BSRUZJWCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCB1c2UgdGhlIG5hbWUgJyR7bmFtZX0nIGZvciBhIGRlZmVycmVkIGxpYnJhcnksIGFzIHRoZSBuYW1lIGlzIHVzZWQgZWxzZXdoZXJlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWRDYXVzZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNuYW1lJyBpcyB1c2VkIGhlcmUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkQ2F1c2UpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZURlZmVycmVkUHJlZml4RHVwbGljYXRlZENhdXNlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWRDYXVzZSIsIHRlbXBsYXRlRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkQ2F1c2UsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0RlZmVycmVkUHJlZml4RHVwbGljYXRlZENhdXNlKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkQ2F1c2UsCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpcyB1c2VkIGhlcmUuIiIiLCBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVEZWZlcnJlZFR5cGVBbm5vdGF0aW9uID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIHR5cGUgJyN0eXBlJyBpcyBkZWZlcnJlZCBsb2FkZWQgdmlhIHByZWZpeCAnI25hbWUnIGFuZCBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZSBhbm5vdGF0aW9uLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgcmVtb3ZpbmcgJ2RlZmVycmVkJyBmcm9tIHRoZSBpbXBvcnQgb2YgJyNuYW1lJyBvciB1c2UgYSBzdXBlcnR5cGUgb2YgJyN0eXBlJyB0aGF0IGlzbid0IGRlZmVycmVkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRGVmZXJyZWRUeXBlQW5ub3RhdGlvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIFN0cmluZyBuYW1lKT4KICAgIGNvZGVEZWZlcnJlZFR5cGVBbm5vdGF0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgU3RyaW5nIG5hbWUpPigKICAgICAgICAiRGVmZXJyZWRUeXBlQW5ub3RhdGlvbiIsIHRlbXBsYXRlRGVmZXJyZWRUeXBlQW5ub3RhdGlvbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVFlQRV9BTk5PVEFUSU9OX0RFRkVSUkVEX0NMQVNTIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRGVmZXJyZWRUeXBlQW5ub3RhdGlvbihEYXJ0VHlwZSBfdHlwZSwgU3RyaW5nIG5hbWUpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRGVmZXJyZWRUeXBlQW5ub3RhdGlvbiwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSB0eXBlICcke3R5cGV9JyBpcyBkZWZlcnJlZCBsb2FkZWQgdmlhIHByZWZpeCAnJHtuYW1lfScgYW5kIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlIGFubm90YXRpb24uIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSByZW1vdmluZyAnZGVmZXJyZWQnIGZyb20gdGhlIGltcG9ydCBvZiAnJHtuYW1lfScgb3IgdXNlIGEgc3VwZXJ0eXBlIG9mICcke3R5cGV9JyB0aGF0IGlzbid0IGRlZmVycmVkLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgIGludCBjb3VudCwgaW50IGNvdW50MiwgbnVtIF9udW0xLCBudW0gX251bTIsIG51bSBfbnVtMyk+CiAgICB0ZW1wbGF0ZURpbGxPdXRsaW5lU3VtbWFyeSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgY291bnQyLCBudW0gX251bTEsIG51bSBfbnVtMiwgbnVtIF9udW0zKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiSW5kZXhlZCAjY291bnQgbGlicmFyaWVzICgjY291bnQyIGJ5dGVzKSBpbiAjbnVtMSUuM21zLCB0aGF0IGlzLAojbnVtMiUxMi4zIGJ5dGVzL21zLCBhbmQKI251bTMlMTIuMyBtcy9saWJyYXJpZXMuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRGlsbE91dGxpbmVTdW1tYXJ5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCwgaW50IGNvdW50MiwgbnVtIF9udW0xLCBudW0gX251bTIsCiAgICAgICAgbnVtIF9udW0zKT4gY29kZURpbGxPdXRsaW5lU3VtbWFyeSA9IGNvbnN0IENvZGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCwgaW50IGNvdW50MiwgbnVtIF9udW0xLCBudW0gX251bTIsIG51bSBfbnVtMyk+KAogICJEaWxsT3V0bGluZVN1bW1hcnkiLAogIHRlbXBsYXRlRGlsbE91dGxpbmVTdW1tYXJ5LAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0RpbGxPdXRsaW5lU3VtbWFyeSgKICAgIGludCBjb3VudCwgaW50IGNvdW50MiwgbnVtIF9udW0xLCBudW0gX251bTIsIG51bSBfbnVtMykgewogIGlmIChjb3VudCA9PSBudWxsKSB0aHJvdyAnTm8gY291bnQgcHJvdmlkZWQnOwogIGlmIChjb3VudDIgPT0gbnVsbCkgdGhyb3cgJ05vIGNvdW50IHByb3ZpZGVkJzsKICBpZiAoX251bTEgPT0gbnVsbCkgdGhyb3cgJ05vIG51bWJlciBwcm92aWRlZCc7CiAgU3RyaW5nIG51bTEgPSBfbnVtMS50b1N0cmluZ0FzRml4ZWQoMyk7CiAgaWYgKF9udW0yID09IG51bGwpIHRocm93ICdObyBudW1iZXIgcHJvdmlkZWQnOwogIFN0cmluZyBudW0yID0gX251bTIudG9TdHJpbmdBc0ZpeGVkKDMpLnBhZExlZnQoMTIpOwogIGlmIChfbnVtMyA9PSBudWxsKSB0aHJvdyAnTm8gbnVtYmVyIHByb3ZpZGVkJzsKICBTdHJpbmcgbnVtMyA9IF9udW0zLnRvU3RyaW5nQXNGaXhlZCgzKS5wYWRMZWZ0KDEyKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZURpbGxPdXRsaW5lU3VtbWFyeSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkluZGV4ZWQgJHtjb3VudH0gbGlicmFyaWVzICgke2NvdW50Mn0gYnl0ZXMpIGluICR7bnVtMX1tcywgdGhhdCBpcywKJHtudW0yfSBieXRlcy9tcywgYW5kCiR7bnVtM30gbXMvbGlicmFyaWVzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgJ2NvdW50JzogY291bnQsCiAgICAgICAgJ2NvdW50Mic6IGNvdW50MiwKICAgICAgICAnbnVtMSc6IF9udW0xLAogICAgICAgICdudW0yJzogX251bTIsCiAgICAgICAgJ251bTMnOiBfbnVtMwogICAgICB9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVEaXJlY3RDeWNsZUluVHlwZVZhcmlhYmxlcyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlR5cGUgJyNuYW1lJyBjYW4ndCB1c2UgaXRzZWxmIGFzIGEgYm91bmQuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBicmVha2luZyB0aGUgY3ljbGUgYnkgcmVtb3ZpbmcgYXQgbGVhc3Qgb24gb2YgdGhlICdleHRlbmRzJyBjbGF1c2VzIGluIHRoZSBjeWNsZS4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0RpcmVjdEN5Y2xlSW5UeXBlVmFyaWFibGVzKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVEaXJlY3RDeWNsZUluVHlwZVZhcmlhYmxlcyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRGlyZWN0Q3ljbGVJblR5cGVWYXJpYWJsZXMiLCB0ZW1wbGF0ZURpcmVjdEN5Y2xlSW5UeXBlVmFyaWFibGVzLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUWVBFX1BBUkFNRVRFUl9TVVBFUlRZUEVfT0ZfSVRTX0JPVU5EIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0RpcmVjdEN5Y2xlSW5UeXBlVmFyaWFibGVzKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRGlyZWN0Q3ljbGVJblR5cGVWYXJpYWJsZXMsCiAgICAgIG1lc3NhZ2U6ICIiIlR5cGUgJyR7bmFtZX0nIGNhbid0IHVzZSBpdHNlbGYgYXMgYSBib3VuZC4iIiIsCiAgICAgIHRpcDoKICAgICAgICAgICIiIlRyeSBicmVha2luZyB0aGUgY3ljbGUgYnkgcmVtb3ZpbmcgYXQgbGVhc3Qgb24gb2YgdGhlICdleHRlbmRzJyBjbGF1c2VzIGluIHRoZSBjeWNsZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVEaXJlY3RpdmVBZnRlckRlY2xhcmF0aW9uID0KICAgIG1lc3NhZ2VEaXJlY3RpdmVBZnRlckRlY2xhcmF0aW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZURpcmVjdGl2ZUFmdGVyRGVjbGFyYXRpb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJEaXJlY3RpdmVBZnRlckRlY2xhcmF0aW9uIiwKICAgIGluZGV4OiA2OSwKICAgIG1lc3NhZ2U6IHIiIiJEaXJlY3RpdmVzIG11c3QgYXBwZWFyIGJlZm9yZSBhbnkgZGVjbGFyYXRpb25zLiIiIiwKICAgIHRpcDogciIiIlRyeSBtb3ZpbmcgdGhlIGRpcmVjdGl2ZSBiZWZvcmUgYW55IGRlY2xhcmF0aW9ucy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRHVwbGljYXRlRGVmZXJyZWQgPSBtZXNzYWdlRHVwbGljYXRlRGVmZXJyZWQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRHVwbGljYXRlRGVmZXJyZWQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJEdXBsaWNhdGVEZWZlcnJlZCIsCiAgICBpbmRleDogNzEsCiAgICBtZXNzYWdlOiByIiIiQW4gaW1wb3J0IGRpcmVjdGl2ZSBjYW4gb25seSBoYXZlIG9uZSAnZGVmZXJyZWQnIGtleXdvcmQuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIGFsbCBidXQgb25lICdkZWZlcnJlZCcga2V5d29yZC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUR1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIlRoZSBsYWJlbCAnI25hbWUnIHdhcyBhbHJlYWR5IHVzZWQgaW4gdGhpcyBzd2l0Y2ggc3RhdGVtZW50LiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSBjaG9vc2luZyBhIGRpZmZlcmVudCBuYW1lIGZvciB0aGlzIGxhYmVsLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUR1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oIkR1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnQiLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlTGFiZWxJblN3aXRjaFN0YXRlbWVudCwKICAgICAgICBpbmRleDogNzIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVMYWJlbEluU3dpdGNoU3RhdGVtZW50LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGxhYmVsICcke25hbWV9JyB3YXMgYWxyZWFkeSB1c2VkIGluIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IGNob29zaW5nIGEgZGlmZmVyZW50IG5hbWUgZm9yIHRoaXMgbGFiZWwuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRHVwbGljYXRlUHJlZml4ID0gbWVzc2FnZUR1cGxpY2F0ZVByZWZpeDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VEdXBsaWNhdGVQcmVmaXggPSBjb25zdCBNZXNzYWdlQ29kZSgiRHVwbGljYXRlUHJlZml4IiwKICAgIGluZGV4OiA3MywKICAgIG1lc3NhZ2U6IHIiIiJBbiBpbXBvcnQgZGlyZWN0aXZlIGNhbiBvbmx5IGhhdmUgb25lIHByZWZpeCAoJ2FzJyBjbGF1c2UpLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSBwcmVmaXguIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNuYW1lJyBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZERlY2xhcmF0aW9uKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVEdXBsaWNhdGVkRGVjbGFyYXRpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkR1cGxpY2F0ZWREZWNsYXJhdGlvbiIsIHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJEVVBMSUNBVEVfREVGSU5JVElPTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRGVjbGFyYXRpb24oU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkRGVjbGFyYXRpb24sCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbkNhdXNlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJQcmV2aW91cyBkZWNsYXJhdGlvbiBvZiAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWREZWNsYXJhdGlvbkNhdXNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRHVwbGljYXRlZERlY2xhcmF0aW9uQ2F1c2UiLCB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbkNhdXNlLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWREZWNsYXJhdGlvbkNhdXNlLAogICAgICBtZXNzYWdlOiAiIiJQcmV2aW91cyBkZWNsYXJhdGlvbiBvZiAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25TeW50aGV0aWNDYXVzZSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiUHJldmlvdXMgZGVjbGFyYXRpb24gb2YgJyNuYW1lJyBpcyBpbXBsaWVkIGJ5IHRoaXMgZGVmaW5pdGlvbi4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlRHVwbGljYXRlZERlY2xhcmF0aW9uU3ludGhldGljQ2F1c2UgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkR1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlIiwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRGVjbGFyYXRpb25TeW50aGV0aWNDYXVzZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiUHJldmlvdXMgZGVjbGFyYXRpb24gb2YgJyR7bmFtZX0nIGlzIGltcGxpZWQgYnkgdGhpcyBkZWZpbml0aW9uLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiQ2FuJ3QgdXNlICcjbmFtZScgYmVjYXVzZSBpdCBpcyBkZWNsYXJlZCBtb3JlIHRoYW4gb25jZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2UpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiRHVwbGljYXRlZERlY2xhcmF0aW9uVXNlIiwKICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZSwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2UoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2UsCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IHVzZSAnJHtuYW1lfScgYmVjYXVzZSBpdCBpcyBkZWNsYXJlZCBtb3JlIHRoYW4gb25jZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4KICAgIHRlbXBsYXRlRHVwbGljYXRlZEV4cG9ydCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiJyNuYW1lJyBpcyBleHBvcnRlZCBmcm9tIGJvdGggJyN1cmknIGFuZCAnI3VyaTInLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRFeHBvcnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4KICAgIGNvZGVEdXBsaWNhdGVkRXhwb3J0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+KAogICAgICAgICJEdXBsaWNhdGVkRXhwb3J0IiwgdGVtcGxhdGVEdXBsaWNhdGVkRXhwb3J0LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJBTUJJR1VPVVNfRVhQT1JUIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRFeHBvcnQoU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgU3RyaW5nIHVyaTIgPSByZWxhdGl2aXplVXJpKHVyaTJfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWRFeHBvcnQsCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpcyBleHBvcnRlZCBmcm9tIGJvdGggJyR7dXJpfScgYW5kICcke3VyaTJ9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3VyaSc6IHVyaV8sICd1cmkyJzogdXJpMl99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRFeHBvcnRJblR5cGUgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIicjbmFtZScgaXMgZXhwb3J0ZWQgZnJvbSBib3RoICcjdXJpJyBhbmQgJyN1cmkyJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRXhwb3J0SW5UeXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICBjb2RlRHVwbGljYXRlZEV4cG9ydEluVHlwZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPigKICAgICAgICAiRHVwbGljYXRlZEV4cG9ydEluVHlwZSIsIHRlbXBsYXRlRHVwbGljYXRlZEV4cG9ydEluVHlwZSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRXhwb3J0SW5UeXBlKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIFN0cmluZyB1cmkyID0gcmVsYXRpdml6ZVVyaSh1cmkyXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkRXhwb3J0SW5UeXBlLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgZXhwb3J0ZWQgZnJvbSBib3RoICcke3VyaX0nIGFuZCAnJHt1cmkyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd1cmknOiB1cmlfLCAndXJpMic6IHVyaTJffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPgogICAgdGVtcGxhdGVEdXBsaWNhdGVkSW1wb3J0ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiInI25hbWUnIGlzIGltcG9ydGVkIGZyb20gYm90aCAnI3VyaScgYW5kICcjdXJpMicuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZEltcG9ydCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPgogICAgY29kZUR1cGxpY2F0ZWRJbXBvcnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4oCiAgICAgICAgIkR1cGxpY2F0ZWRJbXBvcnQiLCB0ZW1wbGF0ZUR1cGxpY2F0ZWRJbXBvcnQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5Lmlnbm9yZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRJbXBvcnQoU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgU3RyaW5nIHVyaTIgPSByZWxhdGl2aXplVXJpKHVyaTJfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWRJbXBvcnQsCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpcyBpbXBvcnRlZCBmcm9tIGJvdGggJyR7dXJpfScgYW5kICcke3VyaTJ9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3VyaSc6IHVyaV8sICd1cmkyJzogdXJpMl99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRJbXBvcnRJblR5cGUgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIicjbmFtZScgaXMgaW1wb3J0ZWQgZnJvbSBib3RoICcjdXJpJyBhbmQgJyN1cmkyJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkSW1wb3J0SW5UeXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICBjb2RlRHVwbGljYXRlZEltcG9ydEluVHlwZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPigKICAgICAgICAiRHVwbGljYXRlZEltcG9ydEluVHlwZSIsIHRlbXBsYXRlRHVwbGljYXRlZEltcG9ydEluVHlwZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQU1CSUdVT1VTX0lNUE9SVCJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRJbXBvcnRJblR5cGUoU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgU3RyaW5nIHVyaTIgPSByZWxhdGl2aXplVXJpKHVyaTJfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWRJbXBvcnRJblR5cGUsCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpcyBpbXBvcnRlZCBmcm9tIGJvdGggJyR7dXJpfScgYW5kICcke3VyaTJ9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3VyaSc6IHVyaV8sICd1cmkyJzogdXJpMl99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlFeHBvcnQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkEgbGlicmFyeSB3aXRoIG5hbWUgJyNuYW1lJyBpcyBleHBvcnRlZCBtb3JlIHRoYW4gb25jZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTGlicmFyeUV4cG9ydCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRHVwbGljYXRlZExpYnJhcnlFeHBvcnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0IiwgdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUV4cG9ydCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRVhQT1JUX0RVUExJQ0FURURfTElCUkFSWV9OQU1FRCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTGlicmFyeUV4cG9ydChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0LAogICAgICBtZXNzYWdlOiAiIiJBIGxpYnJhcnkgd2l0aCBuYW1lICcke25hbWV9JyBpcyBleHBvcnRlZCBtb3JlIHRoYW4gb25jZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlFeHBvcnRDb250ZXh0ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiInI25hbWUnIGlzIGFsc28gZXhwb3J0ZWQgaGVyZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTGlicmFyeUV4cG9ydENvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0Q29udGV4dCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigiRHVwbGljYXRlZExpYnJhcnlFeHBvcnRDb250ZXh0IiwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0Q29udGV4dCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRHVwbGljYXRlZExpYnJhcnlFeHBvcnRDb250ZXh0KFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRHVwbGljYXRlZExpYnJhcnlFeHBvcnRDb250ZXh0LAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgYWxzbyBleHBvcnRlZCBoZXJlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJBIGxpYnJhcnkgd2l0aCBuYW1lICcjbmFtZScgaXMgaW1wb3J0ZWQgbW9yZSB0aGFuIG9uY2UuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZExpYnJhcnlJbXBvcnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJEdXBsaWNhdGVkTGlicmFyeUltcG9ydCIsIHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlJbXBvcnQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklNUE9SVF9EVVBMSUNBVEVEX0xJQlJBUllfTkFNRUQiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkud2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRHVwbGljYXRlZExpYnJhcnlJbXBvcnQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydCwKICAgICAgbWVzc2FnZTogIiIiQSBsaWJyYXJ5IHdpdGggbmFtZSAnJHtuYW1lfScgaXMgaW1wb3J0ZWQgbW9yZSB0aGFuIG9uY2UuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0Q29udGV4dCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNuYW1lJyBpcyBhbHNvIGltcG9ydGVkIGhlcmUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRHVwbGljYXRlZExpYnJhcnlJbXBvcnRDb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydENvbnRleHQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oIkR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0Q29udGV4dCIsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydENvbnRleHQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0Q29udGV4dChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0Q29udGV4dCwKICAgICAgbWVzc2FnZTogIiIiJyR7bmFtZX0nIGlzIGFsc28gaW1wb3J0ZWQgaGVyZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gdGVtcGxhdGVEdXBsaWNhdGVkTW9kaWZpZXIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlRoZSBtb2RpZmllciAnI2xleGVtZScgd2FzIGFscmVhZHkgc3BlY2lmaWVkLiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSBvY2N1cmVuY2Ugb2YgdGhlIG1vZGlmaWVyLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRNb2RpZmllcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlRHVwbGljYXRlZE1vZGlmaWVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgICJEdXBsaWNhdGVkTW9kaWZpZXIiLCB0ZW1wbGF0ZUR1cGxpY2F0ZWRNb2RpZmllciwKICAgICAgICBpbmRleDogNzApOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRNb2RpZmllcihUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVEdXBsaWNhdGVkTW9kaWZpZXIsCiAgICAgIG1lc3NhZ2U6ICIiIlRoZSBtb2RpZmllciAnJHtsZXhlbWV9JyB3YXMgYWxyZWFkeSBzcGVjaWZpZWQuIiIiLAogICAgICB0aXA6ICIiIlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSBvY2N1cmVuY2Ugb2YgdGhlIG1vZGlmaWVyLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+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+IGNvZGVFeHBvcnRBZnRlclBhcnQgPSBtZXNzYWdlRXhwb3J0QWZ0ZXJQYXJ0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4cG9ydEFmdGVyUGFydCA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJFeHBvcnRBZnRlclBhcnQiLAogICAgaW5kZXg6IDc1LAogICAgbWVzc2FnZTogciIiIkV4cG9ydCBkaXJlY3RpdmVzIG11c3QgcHJlY2VkZSBwYXJ0IGRpcmVjdGl2ZXMuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgZXhwb3J0IGRpcmVjdGl2ZXMgYmVmb3JlIHRoZSBwYXJ0IGRpcmVjdGl2ZXMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPgogICAgdGVtcGxhdGVFeHBvcnRIaWRlc0V4cG9ydCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiRXhwb3J0IG9mICcjbmFtZScgKGZyb20gJyN1cmknKSBoaWRlcyBleHBvcnQgZnJvbSAnI3VyaTInLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0V4cG9ydEhpZGVzRXhwb3J0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICBjb2RlRXhwb3J0SGlkZXNFeHBvcnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4oCiAgICAgICAgIkV4cG9ydEhpZGVzRXhwb3J0IiwgdGVtcGxhdGVFeHBvcnRIaWRlc0V4cG9ydCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaWdub3JlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRXhwb3J0SGlkZXNFeHBvcnQoU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgU3RyaW5nIHVyaTIgPSByZWxhdGl2aXplVXJpKHVyaTJfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUV4cG9ydEhpZGVzRXhwb3J0LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiRXhwb3J0IG9mICcke25hbWV9JyAoZnJvbSAnJHt1cml9JykgaGlkZXMgZXhwb3J0IGZyb20gJyR7dXJpMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndXJpJzogdXJpXywgJ3VyaTInOiB1cmkyX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHByZXNzaW9uTm90TWV0YWRhdGEgPSBtZXNzYWdlRXhwcmVzc2lvbk5vdE1ldGFkYXRhOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4cHJlc3Npb25Ob3RNZXRhZGF0YSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkV4cHJlc3Npb25Ob3RNZXRhZGF0YSIsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUaGlzIGNhbid0IGJlIHVzZWQgYXMgbWV0YWRhdGE7IG1ldGFkYXRhIHNob3VsZCBiZSBhIHJlZmVyZW5jZSB0byBhIGNvbXBpbGUtdGltZSBjb25zdGFudCB2YXJpYWJsZSwgb3IgYSBjYWxsIHRvIGEgY29uc3RhbnQgY29uc3RydWN0b3IuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUV4dGVuZGluZ0VudW0gPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIicjbmFtZScgaXMgYW4gZW51bSBhbmQgY2FuJ3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRXh0ZW5kaW5nRW51bSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRXh0ZW5kaW5nRW51bSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRXh0ZW5kaW5nRW51bSIsIHRlbXBsYXRlRXh0ZW5kaW5nRW51bSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRVhURU5EU19FTlVNIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0V4dGVuZGluZ0VudW0oU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVFeHRlbmRpbmdFbnVtLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgYW4gZW51bSBhbmQgY2FuJ3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlRXh0ZW5kaW5nUmVzdHJpY3RlZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiJyNuYW1lJyBpcyByZXN0cmljdGVkIGFuZCBjYW4ndCBiZSBleHRlbmRlZCBvciBpbXBsZW1lbnRlZC4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNFeHRlbmRpbmdSZXN0cmljdGVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVFeHRlbmRpbmdSZXN0cmljdGVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJFeHRlbmRpbmdSZXN0cmljdGVkIiwgdGVtcGxhdGVFeHRlbmRpbmdSZXN0cmljdGVkLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFRFTkRTX0RJU0FMTE9XRURfQ0xBU1MiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRXh0ZW5kaW5nUmVzdHJpY3RlZChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUV4dGVuZGluZ1Jlc3RyaWN0ZWQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiInJHtuYW1lfScgaXMgcmVzdHJpY3RlZCBhbmQgY2FuJ3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXh0ZXJuYWxDbGFzcyA9IG1lc3NhZ2VFeHRlcm5hbENsYXNzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4dGVybmFsQ2xhc3MgPSBjb25zdCBNZXNzYWdlQ29kZSgiRXh0ZXJuYWxDbGFzcyIsCiAgICBpbmRleDogMywKICAgIG1lc3NhZ2U6IHIiIiJDbGFzc2VzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlICdleHRlcm5hbCcuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIHRoZSBrZXl3b3JkICdleHRlcm5hbCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUV4dGVybmFsQ29uc3RydWN0b3JXaXRoQm9keSA9CiAgICBtZXNzYWdlRXh0ZXJuYWxDb25zdHJ1Y3RvcldpdGhCb2R5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4dGVybmFsQ29uc3RydWN0b3JXaXRoQm9keSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkV4dGVybmFsQ29uc3RydWN0b3JXaXRoQm9keSIsCiAgICBpbmRleDogODcsCiAgICBtZXNzYWdlOiByIiIiRXh0ZXJuYWwgY29uc3RydWN0b3JzIGNhbid0IGhhdmUgYSBib2R5LiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IHJlbW92aW5nIHRoZSBib2R5IG9mIHRoZSBjb25zdHJ1Y3Rvciwgb3IgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ2V4dGVybmFsJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXh0ZXJuYWxDb25zdHJ1Y3RvcldpdGhGaWVsZEluaXRpYWxpemVycyA9CiAgICBtZXNzYWdlRXh0ZXJuYWxDb25zdHJ1Y3RvcldpdGhGaWVsZEluaXRpYWxpemVyczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFeHRlcm5hbENvbnN0cnVjdG9yV2l0aEZpZWxkSW5pdGlhbGl6ZXJzID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJFeHRlcm5hbENvbnN0cnVjdG9yV2l0aEZpZWxkSW5pdGlhbGl6ZXJzIiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRVhURVJOQUxfQ09OU1RSVUNUT1JfV0lUSF9GSUVMRF9JTklUSUFMSVpFUlMiXSwKICAgICAgICBtZXNzYWdlOiByIiIiQW4gZXh0ZXJuYWwgY29uc3RydWN0b3IgY2FuJ3QgaW5pdGlhbGl6ZSBmaWVsZHMuIiIiLAogICAgICAgIHRpcDoKICAgICAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGUgZmllbGQgaW5pdGlhbGl6ZXJzLCBvciByZW1vdmluZyB0aGUga2V5d29yZCAnZXh0ZXJuYWwnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVFeHRlcm5hbEVudW0gPSBtZXNzYWdlRXh0ZXJuYWxFbnVtOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4dGVybmFsRW51bSA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJFeHRlcm5hbEVudW0iLAogICAgaW5kZXg6IDUsCiAgICBtZXNzYWdlOiByIiIiRW51bXMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2V4dGVybmFsJy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ2V4dGVybmFsJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXh0ZXJuYWxGYWN0b3J5UmVkaXJlY3Rpb24gPQogICAgbWVzc2FnZUV4dGVybmFsRmFjdG9yeVJlZGlyZWN0aW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4dGVybmFsRmFjdG9yeVJlZGlyZWN0aW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRXh0ZXJuYWxGYWN0b3J5UmVkaXJlY3Rpb24iLAogICAgaW5kZXg6IDg1LAogICAgbWVzc2FnZTogciIiIkEgcmVkaXJlY3RpbmcgZmFjdG9yeSBjYW4ndCBiZSBleHRlcm5hbC4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlICdleHRlcm5hbCcgbW9kaWZpZXIuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUV4dGVybmFsRmFjdG9yeVdpdGhCb2R5ID0gbWVzc2FnZUV4dGVybmFsRmFjdG9yeVdpdGhCb2R5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4dGVybmFsRmFjdG9yeVdpdGhCb2R5ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRXh0ZXJuYWxGYWN0b3J5V2l0aEJvZHkiLAogICAgaW5kZXg6IDg2LAogICAgbWVzc2FnZTogciIiIkV4dGVybmFsIGZhY3RvcmllcyBjYW4ndCBoYXZlIGEgYm9keS4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGUgYm9keSBvZiB0aGUgZmFjdG9yeSwgb3IgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ2V4dGVybmFsJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXh0ZXJuYWxGaWVsZCA9IG1lc3NhZ2VFeHRlcm5hbEZpZWxkOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUV4dGVybmFsRmllbGQgPSBjb25zdCBNZXNzYWdlQ29kZSgiRXh0ZXJuYWxGaWVsZCIsCiAgICBpbmRleDogNTAsCiAgICBtZXNzYWdlOiByIiIiRmllbGRzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlICdleHRlcm5hbCcuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIHRoZSBrZXl3b3JkICdleHRlcm5hbCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUV4dGVybmFsTWV0aG9kV2l0aEJvZHkgPSBtZXNzYWdlRXh0ZXJuYWxNZXRob2RXaXRoQm9keTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFeHRlcm5hbE1ldGhvZFdpdGhCb2R5ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRXh0ZXJuYWxNZXRob2RXaXRoQm9keSIsCiAgICBpbmRleDogNDksCiAgICBtZXNzYWdlOiByIiIiQW4gZXh0ZXJuYWwgb3IgbmF0aXZlIG1ldGhvZCBjYW4ndCBoYXZlIGEgYm9keS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRXh0ZXJuYWxUeXBlZGVmID0gbWVzc2FnZUV4dGVybmFsVHlwZWRlZjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VFeHRlcm5hbFR5cGVkZWYgPSBjb25zdCBNZXNzYWdlQ29kZSgiRXh0ZXJuYWxUeXBlZGVmIiwKICAgIGluZGV4OiA3NiwKICAgIG1lc3NhZ2U6IHIiIiJUeXBlZGVmcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnZXh0ZXJuYWwnLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUga2V5d29yZCAnZXh0ZXJuYWwnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gdGVtcGxhdGVFeHRyYW5lb3VzTW9kaWZpZXIgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNhbid0IGhhdmUgbW9kaWZpZXIgJyNsZXhlbWUnIGhlcmUuIiIiLAogICAgICAgIHRpcFRlbXBsYXRlOiByIiIiVHJ5IHJlbW92aW5nICcjbGV4ZW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNFeHRyYW5lb3VzTW9kaWZpZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gY29kZUV4dHJhbmVvdXNNb2RpZmllciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICAiRXh0cmFuZW91c01vZGlmaWVyIiwgdGVtcGxhdGVFeHRyYW5lb3VzTW9kaWZpZXIsCiAgICAgICAgaW5kZXg6IDc3KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNFeHRyYW5lb3VzTW9kaWZpZXIoVG9rZW4gdG9rZW4pIHsKICBTdHJpbmcgbGV4ZW1lID0gdG9rZW4ubGV4ZW1lOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRXh0cmFuZW91c01vZGlmaWVyLAogICAgICBtZXNzYWdlOiAiIiJDYW4ndCBoYXZlIG1vZGlmaWVyICcke2xleGVtZX0nIGhlcmUuIiIiLAogICAgICB0aXA6ICIiIlRyeSByZW1vdmluZyAnJHtsZXhlbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0b2tlbic6IHRva2VufSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUZhY3RvcnlOb3RTeW5jID0gbWVzc2FnZUZhY3RvcnlOb3RTeW5jOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUZhY3RvcnlOb3RTeW5jID0gY29uc3QgTWVzc2FnZUNvZGUoIkZhY3RvcnlOb3RTeW5jIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT05fU1lOQ19GQUNUT1JZIl0sCiAgICBtZXNzYWdlOiByIiIiRmFjdG9yeSBib2RpZXMgY2FuJ3QgdXNlICdhc3luYycsICdhc3luYyonLCBvciAnc3luYyonLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVGYWN0b3J5VG9wTGV2ZWxEZWNsYXJhdGlvbiA9CiAgICBtZXNzYWdlRmFjdG9yeVRvcExldmVsRGVjbGFyYXRpb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRmFjdG9yeVRvcExldmVsRGVjbGFyYXRpb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJGYWN0b3J5VG9wTGV2ZWxEZWNsYXJhdGlvbiIsCiAgICBpbmRleDogNzgsCiAgICBtZXNzYWdlOiByIiIiVG9wLWxldmVsIGRlY2xhcmF0aW9ucyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnZmFjdG9yeScuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIHRoZSBrZXl3b3JkICdmYWN0b3J5Jy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlRmFzdGFDTElBcmd1bWVudFJlcXVpcmVkID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJFeHBlY3RlZCB2YWx1ZSBhZnRlciAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0Zhc3RhQ0xJQXJndW1lbnRSZXF1aXJlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRmFzdGFDTElBcmd1bWVudFJlcXVpcmVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICJGYXN0YUNMSUFyZ3VtZW50UmVxdWlyZWQiLAogIHRlbXBsYXRlRmFzdGFDTElBcmd1bWVudFJlcXVpcmVkLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0Zhc3RhQ0xJQXJndW1lbnRSZXF1aXJlZChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZhc3RhQ0xJQXJndW1lbnRSZXF1aXJlZCwKICAgICAgbWVzc2FnZTogIiIiRXhwZWN0ZWQgdmFsdWUgYWZ0ZXIgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUZhc3RhVXNhZ2VMb25nID0gbWVzc2FnZUZhc3RhVXNhZ2VMb25nOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUZhc3RhVXNhZ2VMb25nID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJGYXN0YVVzYWdlTG9uZyIsIG1lc3NhZ2U6IHIiIiJTdXBwb3J0ZWQgb3B0aW9uczoKCiAgLW8gPGZpbGU+LCAtLW91dHB1dD08ZmlsZT4KICAgIEdlbmVyYXRlIHRoZSBvdXRwdXQgaW50byA8ZmlsZT4uCgogIC1oLCAvaCwgLz8sIC0taGVscAogICAgRGlzcGxheSB0aGlzIG1lc3NhZ2UgKGFkZCAtdiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWxsIG9wdGlvbnMpLgoKICAtdiwgLS12ZXJib3NlCiAgICBEaXNwbGF5IHZlcmJvc2UgaW5mb3JtYXRpb24uCgogIC1EbmFtZQogIC1EbmFtZT12YWx1ZQogICAgRGVmaW5lIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIGluIHRoZSBjb21waWxlLXRpbWUgZW52aXJvbm1lbnQuCgogIC0tbm8tZGVmaW5lcwogICAgSWdub3JlIGFsbCAtRCBvcHRpb25zIGFuZCBsZWF2ZSBlbnZpcm9ubWVudCBjb25zdGFudHMgdW5ldmFsdWF0ZWQuCgogIC0tCiAgICBTdG9wIG9wdGlvbiBwYXJzaW5nLCB0aGUgcmVzdCBvZiB0aGUgY29tbWFuZCBsaW5lIGlzIGFzc3VtZWQgdG8gYmUKICAgIGZpbGUgbmFtZXMgb3IgYXJndW1lbnRzIHRvIHRoZSBEYXJ0IHByb2dyYW0uCgogIC0tcGFja2FnZXM9PGZpbGU+CiAgICBVc2UgcGFja2FnZSByZXNvbHV0aW9uIGNvbmZpZ3VyYXRpb24gPGZpbGU+LCB3aGljaCBzaG91bGQgY29udGFpbiBhIG1hcHBpbmcKICAgIG9mIHBhY2thZ2UgbmFtZXMgdG8gcGF0aHMuCgogIC0tcGxhdGZvcm09PGZpbGU+CiAgICBSZWFkIHRoZSBTREsgcGxhdGZvcm0gZnJvbSA8ZmlsZT4sIHdoaWNoIHNob3VsZCBiZSBpbiBEaWxsL0tlcm5lbCBJUiBmb3JtYXQKICAgIGFuZCBjb250YWluIHRoZSBEYXJ0IFNESy4KCiAgLS10YXJnZXQ9ZGFydDJqc3xkYXJ0MmpzX3NlcnZlcnxkYXJ0X3J1bm5lcnxmbHV0dGVyfGZsdXR0ZXJfcnVubmVyfG5vbmV8dm0KICAgIFNwZWNpZnkgdGhlIHRhcmdldCBjb25maWd1cmF0aW9uLgoKICAtLWVuYWJsZS1hc3NlcnRzCiAgICBDaGVjayBhc3NlcnRzIGluIGluaXRpYWxpemVycyBkdXJpbmcgY29uc3RhbnQgZXZhbHVhdGlvbi4KCiAgLS12ZXJpZnkKICAgIENoZWNrIHRoYXQgdGhlIGdlbmVyYXRlZCBvdXRwdXQgaXMgZnJlZSBvZiB2YXJpb3VzIHByb2JsZW1zLiBUaGlzIGlzIG1vc3RseQogICAgdXNlZnVsIGZvciBkZXZlbG9wZXJzIG9mIHRoaXMgY29tcGlsZXIgb3IgS2VybmVsIHRyYW5zZm9ybWF0aW9ucy4KCiAgLS1kdW1wLWlyCiAgICBQcmludCBjb21waWxlZCBsaWJyYXJpZXMgaW4gS2VybmVsIHNvdXJjZSBub3RhdGlvbi4KCiAgLS1vbWl0LXBsYXRmb3JtCiAgICBFeGNsdWRlIHRoZSBwbGF0Zm9ybSBmcm9tIHRoZSBzZXJpYWxpemVkIGRpbGwgZmlsZS4KCiAgLS1ieXRlY29kZQogICAgR2VuZXJhdGUgYnl0ZWNvZGUuIFN1cHBvcnRlZCBvbmx5IGZvciBTREsgcGxhdGZvcm0gY29tcGlsYXRpb24uCgogIC0tZXhjbHVkZS1zb3VyY2UKICAgIERvIG5vdCBpbmNsdWRlIHNvdXJjZSBjb2RlIGluIHRoZSBkaWxsIGZpbGUuCgogIC0tY29tcGlsZS1zZGs9PHNkaz4KICAgIENvbXBpbGUgdGhlIFNESyBmcm9tIHNjcmF0Y2ggaW5zdGVhZCBvZiByZWFkaW5nIGl0IGZyb20gYSAuZGlsbCBmaWxlCiAgICAoc2VlIC0tcGxhdGZvcm0pLgoKICAtLXNkaz08c2RrPgogICAgTG9jYXRpb24gb2YgdGhlIFNESyBzb3VyY2VzIGZvciB1c2Ugd2hlbiBjb21waWxpbmcgYWRkaXRpb25hbCBwbGF0Zm9ybQogICAgbGlicmFyaWVzLgoKICAtLXN1cGVybWl4aW4KICAgIElnbm9yZWQgZm9yIG5vdy4KCiAgLS1zaW5nbGUtcm9vdC1zY2hlbWU9U3RyaW5nCiAgLS1zaW5nbGUtcm9vdC1iYXNlPTxkaXI+CiAgICBTcGVjaWZ5IGEgY3VzdG9tIFVSSSBzY2hlbWUgYW5kIGEgbG9jYXRpb24gb24gZGlzayB3aGVyZSBzdWNoIFVSSXMgYXJlCiAgICBtYXBwZWQgdG8uCgogICAgV2hlbiBzcGVjaWZpZWQsIHRoZSBjb21waWxlciBjYW4gYmUgaW52b2tlZCB3aXRoIGlucHV0cyB1c2luZyB0aGUgY3VzdG9tCiAgICBVUkkgc2NoZW1lLiBUaGUgY29tcGlsZXIgY2FuIGlnbm9yZSB0aGUgZXhhY3QgbG9jYXRpb24gb2YgZmlsZXMgb24gZGlzawogICAgYW5kIGFzIGEgcmVzdWx0IHRvIHByb2R1Y2Ugb3V0cHV0IHRoYXQgaXMgaW5kZXBlbmRlbmRlbnQgb2YgdGhlIGFic29sdXRlCiAgICBsb2NhdGlvbiBvZiBmaWxlcyBvbiBkaXNrLiBUaGlzIGlzIG1vc3RseSB1c2VmdWwgZm9yIGludGVncmF0aW5nIHdpdGgKICAgIGJ1aWxkIHN5c3RlbXMuCgogIC0tZmF0YWw9ZXJyb3JzCiAgLS1mYXRhbD13YXJuaW5ncwogICAgTWFrZXMgbWVzc2FnZXMgb2YgdGhlIGdpdmVuIGtpbmRzIGZhdGFsLCB0aGF0IGlzLCBpbW1lZGlhdGVseSBzdG9wIHRoZQogICAgY29tcGlsZXIgd2l0aCBhIG5vbi16ZXJvIGV4aXQtY29kZS4gSW4gLS12ZXJib3NlIG1vZGUsIGFsc28gZGlzcGxheSBhbgogICAgaW50ZXJuYWwgc3RhY2sgdHJhY2UgZnJvbSB0aGUgY29tcGlsZXIuIE11bHRpcGxlIGtpbmRzIGNhbiBiZSBzZXBhcmF0ZWQgYnkKICAgIGNvbW1hcywgZm9yIGV4YW1wbGUsIC0tZmF0YWw9ZXJyb3JzLHdhcm5pbmdzLgoKICAtLWVuYWJsZS1leHBlcmltZW50PTxmbGFnPgogICAgRW5hYmxlIG9yIGRpc2FibGUgYW4gZXhwZXJpbWVudGFsIGZsYWcsIHVzZWQgdG8gZ3VhcmQgZmVhdHVyZXMgY3VycmVudGx5CiAgICBpbiBkZXZlbG9wbWVudC4gUHJlZml4IGFuIGV4cGVyaW1lbnQgbmFtZSB3aXRoICduby0nIHRvIGRpc2FibGUgaXQuCiAgICBNdWx0aXBsZSBleHBlcmltZW50cyBjYW4gYmUgc2VwYXJhdGVkIGJ5IGNvbW1hcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRmFzdGFVc2FnZVNob3J0ID0gbWVzc2FnZUZhc3RhVXNhZ2VTaG9ydDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VGYXN0YVVzYWdlU2hvcnQgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkZhc3RhVXNhZ2VTaG9ydCIsIG1lc3NhZ2U6IHIiIiJGcmVxdWVudGx5IHVzZWQgb3B0aW9uczoKCiAgLW8gPGZpbGU+IEdlbmVyYXRlIHRoZSBvdXRwdXQgaW50byA8ZmlsZT4uCiAgLWggICAgICAgIERpc3BsYXkgdGhpcyBtZXNzYWdlIChhZGQgLXYgZm9yIGluZm9ybWF0aW9uIGFib3V0IGFsbCBvcHRpb25zKS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIHRlbXBsYXRlRmZpRGFydFR5cGVNaXNtYXRjaCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJFeHBlY3RlZCAnI3R5cGUnIHRvIGJlIGEgc3VidHlwZSBvZiAnI3R5cGUyJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGZmlEYXJ0VHlwZU1pc21hdGNoKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVGZmlEYXJ0VHlwZU1pc21hdGNoID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgIkZmaURhcnRUeXBlTWlzbWF0Y2giLAogIHRlbXBsYXRlRmZpRGFydFR5cGVNaXNtYXRjaCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGZmlEYXJ0VHlwZU1pc21hdGNoKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRmZpRGFydFR5cGVNaXNtYXRjaCwKICAgICAgbWVzc2FnZTogIiIiRXhwZWN0ZWQgJyR7dHlwZX0nIHRvIGJlIGEgc3VidHlwZSBvZiAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUZmaUV4dGVuZHNPckltcGxlbWVudHNTZWFsZWRDbGFzcyA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiQ2xhc3MgJyNuYW1lJyBjYW5ub3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmZpRXh0ZW5kc09ySW1wbGVtZW50c1NlYWxlZENsYXNzKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlRmZpRXh0ZW5kc09ySW1wbGVtZW50c1NlYWxlZENsYXNzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICJGZmlFeHRlbmRzT3JJbXBsZW1lbnRzU2VhbGVkQ2xhc3MiLAogIHRlbXBsYXRlRmZpRXh0ZW5kc09ySW1wbGVtZW50c1NlYWxlZENsYXNzLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZmaUV4dGVuZHNPckltcGxlbWVudHNTZWFsZWRDbGFzcyhTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZmaUV4dGVuZHNPckltcGxlbWVudHNTZWFsZWRDbGFzcywKICAgICAgbWVzc2FnZTogIiIiQ2xhc3MgJyR7bmFtZX0nIGNhbm5vdCBiZSBleHRlbmRlZCBvciBpbXBsZW1lbnRlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUZmaUZpZWxkQW5ub3RhdGlvbiA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiRmllbGQgJyNuYW1lJyByZXF1aXJlcyBleGFjdGx5IG9uZSBhbm5vdGF0aW9uIHRvIGRlY2xhcmUgaXRzIEMrKyB0eXBlLCB3aGljaCBjYW5ub3QgYmUgVm9pZC4gZGFydDpmZmkgU3RydWN0cyBjYW5ub3QgaGF2ZSByZWd1bGFyIERhcnQgZmllbGRzLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmZpRmllbGRBbm5vdGF0aW9uKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVGZmlGaWVsZEFubm90YXRpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgIkZmaUZpZWxkQW5ub3RhdGlvbiIsCiAgdGVtcGxhdGVGZmlGaWVsZEFubm90YXRpb24sCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRmZpRmllbGRBbm5vdGF0aW9uKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRmZpRmllbGRBbm5vdGF0aW9uLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiRmllbGQgJyR7bmFtZX0nIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFubm90YXRpb24gdG8gZGVjbGFyZSBpdHMgQysrIHR5cGUsIHdoaWNoIGNhbm5vdCBiZSBWb2lkLiBkYXJ0OmZmaSBTdHJ1Y3RzIGNhbm5vdCBoYXZlIHJlZ3VsYXIgRGFydCBmaWVsZHMuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVGZmlGaWVsZEluaXRpYWxpemVyID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJGaWVsZCAnI25hbWUnIGlzIGEgZGFydDpmZmkgUG9pbnRlciB0byBhIHN0cnVjdCBmaWVsZCBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgY29uc3RydWN0b3IgZXhlY3V0aW9uLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmZpRmllbGRJbml0aWFsaXplcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRmZpRmllbGRJbml0aWFsaXplciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiRmZpRmllbGRJbml0aWFsaXplciIsCiAgdGVtcGxhdGVGZmlGaWVsZEluaXRpYWxpemVyLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZmaUZpZWxkSW5pdGlhbGl6ZXIoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGZmlGaWVsZEluaXRpYWxpemVyLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiRmllbGQgJyR7bmFtZX0nIGlzIGEgZGFydDpmZmkgUG9pbnRlciB0byBhIHN0cnVjdCBmaWVsZCBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgY29uc3RydWN0b3IgZXhlY3V0aW9uLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlRmZpRmllbGROb0Fubm90YXRpb24gPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkZpZWxkICcjbmFtZScgcmVxdWlyZXMgbm8gYW5ub3RhdGlvbiB0byBkZWNsYXJlIGl0cyBDKysgdHlwZSwgaXQgaXMgYSBQb2ludGVyIHdoaWNoIGlzIHJlcHJlc2VudGVkIGJ5IHRoZSBzYW1lIHR5cGUgaW4gRGFydCBhbmQgQysrLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmZpRmllbGROb0Fubm90YXRpb24pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUZmaUZpZWxkTm9Bbm5vdGF0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICJGZmlGaWVsZE5vQW5ub3RhdGlvbiIsCiAgdGVtcGxhdGVGZmlGaWVsZE5vQW5ub3RhdGlvbiwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGZmlGaWVsZE5vQW5ub3RhdGlvbihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZmaUZpZWxkTm9Bbm5vdGF0aW9uLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiRmllbGQgJyR7bmFtZX0nIHJlcXVpcmVzIG5vIGFubm90YXRpb24gdG8gZGVjbGFyZSBpdHMgQysrIHR5cGUsIGl0IGlzIGEgUG9pbnRlciB3aGljaCBpcyByZXByZXNlbnRlZCBieSB0aGUgc2FtZSB0eXBlIGluIERhcnQgYW5kIEMrKy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUZmaU5vdFN0YXRpYyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiI25hbWUgZXhwZWN0cyBhIHN0YXRpYyBmdW5jdGlvbiBhcyBwYXJhbWV0ZXIuIGRhcnQ6ZmZpIG9ubHkgc3VwcG9ydHMgY2FsbGluZyBzdGF0aWMgRGFydCBmdW5jdGlvbnMgZnJvbSBjLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmZpTm90U3RhdGljKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVGZmlOb3RTdGF0aWMgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgIkZmaU5vdFN0YXRpYyIsCiAgdGVtcGxhdGVGZmlOb3RTdGF0aWMsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRmZpTm90U3RhdGljKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRmZpTm90U3RhdGljLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiJHtuYW1lfSBleHBlY3RzIGEgc3RhdGljIGZ1bmN0aW9uIGFzIHBhcmFtZXRlci4gZGFydDpmZmkgb25seSBzdXBwb3J0cyBjYWxsaW5nIHN0YXRpYyBEYXJ0IGZ1bmN0aW9ucyBmcm9tIGMuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlRmZpU3RydWN0R2VuZXJpYyA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiU3RydWN0ICcjbmFtZScgc2hvdWxkIG5vdCBiZSBnZW5lcmljLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ZmaVN0cnVjdEdlbmVyaWMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUZmaVN0cnVjdEdlbmVyaWMgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgIkZmaVN0cnVjdEdlbmVyaWMiLAogIHRlbXBsYXRlRmZpU3RydWN0R2VuZXJpYywKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGZmlTdHJ1Y3RHZW5lcmljKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRmZpU3RydWN0R2VuZXJpYywKICAgICAgbWVzc2FnZTogIiIiU3RydWN0ICcke25hbWV9JyBzaG91bGQgbm90IGJlIGdlbmVyaWMuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4gdGVtcGxhdGVGZmlUeXBlSW52YWxpZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiRXhwZWN0ZWQgdHlwZSAnI3R5cGUnIHRvIGJlIGEgdmFsaWQgYW5kIGluc3RhbnRpYXRlZCBzdWJ0eXBlIG9mICdOYXRpdmVUeXBlJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ZmaVR5cGVJbnZhbGlkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+IGNvZGVGZmlUeXBlSW52YWxpZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPigKICAiRmZpVHlwZUludmFsaWQiLAogIHRlbXBsYXRlRmZpVHlwZUludmFsaWQsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRmZpVHlwZUludmFsaWQoRGFydFR5cGUgX3R5cGUpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGZmlUeXBlSW52YWxpZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkV4cGVjdGVkIHR5cGUgJyR7dHlwZX0nIHRvIGJlIGEgdmFsaWQgYW5kIGluc3RhbnRpYXRlZCBzdWJ0eXBlIG9mICdOYXRpdmVUeXBlJy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlIF90eXBlMiwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZTMpPiB0ZW1wbGF0ZUZmaVR5cGVNaXNtYXRjaCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgRGFydFR5cGUgX3R5cGUzKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkV4cGVjdGVkIHR5cGUgJyN0eXBlJyB0byBiZSAnI3R5cGUyJywgd2hpY2ggaXMgdGhlIERhcnQgdHlwZSBjb3JyZXNwb25kaW5nIHRvICcjdHlwZTMnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmZpVHlwZU1pc21hdGNoKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBEYXJ0VHlwZSBfdHlwZTMpPgogICAgY29kZUZmaVR5cGVNaXNtYXRjaCA9IGNvbnN0IENvZGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBEYXJ0VHlwZSBfdHlwZTMpPigKICAiRmZpVHlwZU1pc21hdGNoIiwKICB0ZW1wbGF0ZUZmaVR5cGVNaXNtYXRjaCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGZmlUeXBlTWlzbWF0Y2goCiAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBEYXJ0VHlwZSBfdHlwZTMpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgTGlzdDxPYmplY3Q+IHR5cGUzUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTMpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTMgPSB0eXBlM1BhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZmaVR5cGVNaXNtYXRjaCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkV4cGVjdGVkIHR5cGUgJyR7dHlwZX0nIHRvIGJlICcke3R5cGUyfScsIHdoaWNoIGlzIHRoZSBEYXJ0IHR5cGUgY29ycmVzcG9uZGluZyB0byAnJHt0eXBlM30nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyLCAndHlwZTMnOiBfdHlwZTN9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlKT4gdGVtcGxhdGVGZmlUeXBlVW5zaXplZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIk1ldGhvZCAnI25hbWUnIGNhbm5vdCBiZSBjYWxsZWQgb24gc29tZXRoaW5nIG9mIHR5cGUgJyN0eXBlJyBhcyB0aGlzIHR5cGUgaXMgdW5zaXplZC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ZmaVR5cGVVbnNpemVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUpPiBjb2RlRmZpVHlwZVVuc2l6ZWQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSk+KAogICJGZmlUeXBlVW5zaXplZCIsCiAgdGVtcGxhdGVGZmlUeXBlVW5zaXplZCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGZmlUeXBlVW5zaXplZChTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRmZpVHlwZVVuc2l6ZWQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJNZXRob2QgJyR7bmFtZX0nIGNhbm5vdCBiZSBjYWxsZWQgb24gc29tZXRoaW5nIG9mIHR5cGUgJyR7dHlwZX0nIGFzIHRoaXMgdHlwZSBpcyB1bnNpemVkLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndHlwZSc6IF90eXBlfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVGZmlXcm9uZ1N0cnVjdEluaGVyaXRhbmNlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJTdHJ1Y3QgJyNuYW1lJyBtdXN0IGluaGVyaXQgZnJvbSAnU3RydWN0PCNuYW1lPicuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzRmZpV3JvbmdTdHJ1Y3RJbmhlcml0YW5jZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlRmZpV3JvbmdTdHJ1Y3RJbmhlcml0YW5jZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiRmZpV3JvbmdTdHJ1Y3RJbmhlcml0YW5jZSIsCiAgdGVtcGxhdGVGZmlXcm9uZ1N0cnVjdEluaGVyaXRhbmNlLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZmaVdyb25nU3RydWN0SW5oZXJpdGFuY2UoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGZmlXcm9uZ1N0cnVjdEluaGVyaXRhbmNlLAogICAgICBtZXNzYWdlOiAiIiJTdHJ1Y3QgJyR7bmFtZX0nIG11c3QgaW5oZXJpdCBmcm9tICdTdHJ1Y3Q8JHtuYW1lfT4nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUZpZWxkSW5pdGlhbGl6ZWRPdXRzaWRlRGVjbGFyaW5nQ2xhc3MgPQogICAgbWVzc2FnZUZpZWxkSW5pdGlhbGl6ZWRPdXRzaWRlRGVjbGFyaW5nQ2xhc3M7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRmllbGRJbml0aWFsaXplZE91dHNpZGVEZWNsYXJpbmdDbGFzcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkZpZWxkSW5pdGlhbGl6ZWRPdXRzaWRlRGVjbGFyaW5nQ2xhc3MiLAogICAgaW5kZXg6IDg4LAogICAgbWVzc2FnZTogciIiIkEgZmllbGQgY2FuIG9ubHkgYmUgaW5pdGlhbGl6ZWQgaW4gaXQncyBkZWNsYXJpbmcgY2xhc3MiIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSBwYXNzaW5nIGEgdmFsdWUgaW50byB0aGUgc3VwZXJjbGFzcyBjb25zdHJ1Y3Rvciwgb3IgbW92aW5nIHRoZSBpbml0aWFsaXphdGlvbiBpbnRvIHRoZSBjb25zdHJ1Y3RvciBib2R5LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVGaWVsZEluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yID0KICAgIG1lc3NhZ2VGaWVsZEluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUZpZWxkSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3IgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJGaWVsZEluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yIiwKICAgIGluZGV4OiA3OSwKICAgIG1lc3NhZ2U6IHIiIiJGaWVsZCBmb3JtYWwgcGFyYW1ldGVycyBjYW4gb25seSBiZSB1c2VkIGluIGEgY29uc3RydWN0b3IuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nICd0aGlzLicuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUZpbmFsQW5kQ292YXJpYW50ID0gbWVzc2FnZUZpbmFsQW5kQ292YXJpYW50OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUZpbmFsQW5kQ292YXJpYW50ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRmluYWxBbmRDb3ZhcmlhbnQiLAogICAgaW5kZXg6IDgwLAogICAgbWVzc2FnZToKICAgICAgICByIiIiTWVtYmVycyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSBib3RoICdmaW5hbCcgYW5kICdjb3ZhcmlhbnQnLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyBlaXRoZXIgdGhlICdmaW5hbCcgb3IgJ2NvdmFyaWFudCcga2V5d29yZC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRmluYWxBbmRWYXIgPSBtZXNzYWdlRmluYWxBbmRWYXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRmluYWxBbmRWYXIgPSBjb25zdCBNZXNzYWdlQ29kZSgiRmluYWxBbmRWYXIiLAogICAgaW5kZXg6IDgxLAogICAgbWVzc2FnZTogciIiIk1lbWJlcnMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgYm90aCAnZmluYWwnIGFuZCAndmFyJy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ3ZhcicuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlRmluYWxGaWVsZE5vdEluaXRpYWxpemVkID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiRmluYWwgZmllbGQgJyNuYW1lJyBpcyBub3QgaW5pdGlhbGl6ZWQuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSB0byBpbml0aWFsaXplIHRoZSBmaWVsZCBpbiB0aGUgZGVjbGFyYXRpb24gb3IgaW4gZXZlcnkgY29uc3RydWN0b3IuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUZpbmFsRmllbGROb3RJbml0aWFsaXplZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRmluYWxGaWVsZE5vdEluaXRpYWxpemVkIiwgdGVtcGxhdGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkZJTkFMX05PVF9JTklUSUFMSVpFRCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWQsCiAgICAgIG1lc3NhZ2U6ICIiIkZpbmFsIGZpZWxkICcke25hbWV9JyBpcyBub3QgaW5pdGlhbGl6ZWQuIiIiLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgdG8gaW5pdGlhbGl6ZSB0aGUgZmllbGQgaW4gdGhlIGRlY2xhcmF0aW9uIG9yIGluIGV2ZXJ5IGNvbnN0cnVjdG9yLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlRmluYWxGaWVsZE5vdEluaXRpYWxpemVkQnlDb25zdHJ1Y3RvciA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiRmluYWwgZmllbGQgJyNuYW1lJyBpcyBub3QgaW5pdGlhbGl6ZWQgYnkgdGhpcyBjb25zdHJ1Y3Rvci4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IHRvIGluaXRpYWxpemUgdGhlIGZpZWxkIHVzaW5nIGFuIGluaXRpYWxpemluZyBmb3JtYWwgb3IgYSBmaWVsZCBpbml0aWFsaXplci4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ZpbmFsRmllbGROb3RJbml0aWFsaXplZEJ5Q29uc3RydWN0b3IpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yIiwKICAgICAgICB0ZW1wbGF0ZUZpbmFsRmllbGROb3RJbml0aWFsaXplZEJ5Q29uc3RydWN0b3IsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkZJTkFMX05PVF9JTklUSUFMSVpFRF9DT05TVFJVQ1RPUl8xIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZpbmFsRmllbGROb3RJbml0aWFsaXplZEJ5Q29uc3RydWN0b3IoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiRmluYWwgZmllbGQgJyR7bmFtZX0nIGlzIG5vdCBpbml0aWFsaXplZCBieSB0aGlzIGNvbnN0cnVjdG9yLiIiIiwKICAgICAgdGlwOgogICAgICAgICAgIiIiVHJ5IHRvIGluaXRpYWxpemUgdGhlIGZpZWxkIHVzaW5nIGFuIGluaXRpYWxpemluZyBmb3JtYWwgb3IgYSBmaWVsZCBpbml0aWFsaXplci4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZUZpbmFsRmllbGRXaXRob3V0SW5pdGlhbGl6ZXIgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUaGUgZmluYWwgdmFyaWFibGUgJyNuYW1lJyBtdXN0IGJlIGluaXRpYWxpemVkLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgYWRkaW5nIGFuIGluaXRpYWxpemVyICgnPSA8ZXhwcmVzc2lvbj4nKSB0byB0aGUgZGVjbGFyYXRpb24uIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNGaW5hbEZpZWxkV2l0aG91dEluaXRpYWxpemVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVGaW5hbEZpZWxkV2l0aG91dEluaXRpYWxpemVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJGaW5hbEZpZWxkV2l0aG91dEluaXRpYWxpemVyIiwgdGVtcGxhdGVGaW5hbEZpZWxkV2l0aG91dEluaXRpYWxpemVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJGSU5BTF9OT1RfSU5JVElBTElaRUQiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzRmluYWxGaWVsZFdpdGhvdXRJbml0aWFsaXplcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZpbmFsRmllbGRXaXRob3V0SW5pdGlhbGl6ZXIsCiAgICAgIG1lc3NhZ2U6ICIiIlRoZSBmaW5hbCB2YXJpYWJsZSAnJHtuYW1lfScgbXVzdCBiZSBpbml0aWFsaXplZC4iIiIsCiAgICAgIHRpcDoKICAgICAgICAgICIiIlRyeSBhZGRpbmcgYW4gaW5pdGlhbGl6ZXIgKCc9IDxleHByZXNzaW9uPicpIHRvIHRoZSBkZWNsYXJhdGlvbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiInI25hbWUnIGlzIGEgZmluYWwgaW5zdGFuY2UgdmFyaWFibGUgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgY29kZUZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkIiwKICAgICAgICB0ZW1wbGF0ZUZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRklOQUxfSU5JVElBTElaRURfTVVMVElQTEVfVElNRVMiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiInJHtuYW1lfScgaXMgYSBmaW5hbCBpbnN0YW5jZSB2YXJpYWJsZSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZENhdXNlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiInI25hbWUnIHdhcyBpbml0aWFsaXplZCBoZXJlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOgogICAgICAgICAgICBfd2l0aEFyZ3VtZW50c0ZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZENhdXNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkQ2F1c2UgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZENhdXNlIiwKICAgICAgICB0ZW1wbGF0ZUZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZENhdXNlLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWRDYXVzZSgKICAgIFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkQ2F1c2UsCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyB3YXMgaW5pdGlhbGl6ZWQgaGVyZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVGb3JJbkxvb3BFbGVtZW50VHlwZU5vdEFzc2lnbmFibGUgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQSB2YWx1ZSBvZiB0eXBlICcjdHlwZScgY2FuJ3QgYmUgYXNzaWduZWQgdG8gYSB2YXJpYWJsZSBvZiB0eXBlICcjdHlwZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOiByIiIiVHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHRoZSB2YXJpYWJsZS4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ZvckluTG9vcEVsZW1lbnRUeXBlTm90QXNzaWduYWJsZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlRm9ySW5Mb29wRWxlbWVudFR5cGVOb3RBc3NpZ25hYmxlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgIkZvckluTG9vcEVsZW1lbnRUeXBlTm90QXNzaWduYWJsZSIsCiAgICAgICAgdGVtcGxhdGVGb3JJbkxvb3BFbGVtZW50VHlwZU5vdEFzc2lnbmFibGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkZPUl9JTl9PRl9JTlZBTElEX0VMRU1FTlRfVFlQRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNGb3JJbkxvb3BFbGVtZW50VHlwZU5vdEFzc2lnbmFibGUoCiAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUZvckluTG9vcEVsZW1lbnRUeXBlTm90QXNzaWduYWJsZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkEgdmFsdWUgb2YgdHlwZSAnJHt0eXBlfScgY2FuJ3QgYmUgYXNzaWduZWQgdG8gYSB2YXJpYWJsZSBvZiB0eXBlICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSBjaGFuZ2luZyB0aGUgdHlwZSBvZiB0aGUgdmFyaWFibGUuIiIiLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlRm9ySW5Mb29wRXhhY3RseU9uZVZhcmlhYmxlID0KICAgIG1lc3NhZ2VGb3JJbkxvb3BFeGFjdGx5T25lVmFyaWFibGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRm9ySW5Mb29wRXhhY3RseU9uZVZhcmlhYmxlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiRm9ySW5Mb29wRXhhY3RseU9uZVZhcmlhYmxlIiwKICAgIG1lc3NhZ2U6IHIiIiJBIGZvci1pbiBsb29wIGNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSBsb29wIHZhcmlhYmxlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVGb3JJbkxvb3BOb3RBc3NpZ25hYmxlID0gbWVzc2FnZUZvckluTG9vcE5vdEFzc2lnbmFibGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRm9ySW5Mb29wTm90QXNzaWduYWJsZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkZvckluTG9vcE5vdEFzc2lnbmFibGUiLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQ2FuJ3QgYXNzaWduIHRvIHRoaXMsIHNvIGl0IGNhbid0IGJlIHVzZWQgaW4gYSBmb3ItaW4gbG9vcC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMik+IHRlbXBsYXRlRm9ySW5Mb29wVHlwZU5vdEl0ZXJhYmxlID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSB0eXBlICcjdHlwZScgdXNlZCBpbiB0aGUgJ2ZvcicgbG9vcCBtdXN0IGltcGxlbWVudCAnI3R5cGUyJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ZvckluTG9vcFR5cGVOb3RJdGVyYWJsZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlRm9ySW5Mb29wVHlwZU5vdEl0ZXJhYmxlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgIkZvckluTG9vcFR5cGVOb3RJdGVyYWJsZSIsIHRlbXBsYXRlRm9ySW5Mb29wVHlwZU5vdEl0ZXJhYmxlLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJGT1JfSU5fT0ZfSU5WQUxJRF9UWVBFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ZvckluTG9vcFR5cGVOb3RJdGVyYWJsZSgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlRm9ySW5Mb29wVHlwZU5vdEl0ZXJhYmxlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIHR5cGUgJyR7dHlwZX0nIHVzZWQgaW4gdGhlICdmb3InIGxvb3AgbXVzdCBpbXBsZW1lbnQgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVGb3JJbkxvb3BXaXRoQ29uc3RWYXJpYWJsZSA9CiAgICBtZXNzYWdlRm9ySW5Mb29wV2l0aENvbnN0VmFyaWFibGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlRm9ySW5Mb29wV2l0aENvbnN0VmFyaWFibGUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJGb3JJbkxvb3BXaXRoQ29uc3RWYXJpYWJsZSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRk9SX0lOX1dJVEhfQ09OU1RfVkFSSUFCTEUiXSwKICAgIG1lc3NhZ2U6IHIiIiJBIGZvci1pbiBsb29wLXZhcmlhYmxlIGNhbid0IGJlICdjb25zdCcuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIHRoZSAnY29uc3QnIG1vZGlmaWVyLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVGdW5jdGlvblR5cGVEZWZhdWx0VmFsdWUgPSBtZXNzYWdlRnVuY3Rpb25UeXBlRGVmYXVsdFZhbHVlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUZ1bmN0aW9uVHlwZURlZmF1bHRWYWx1ZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkZ1bmN0aW9uVHlwZURlZmF1bHRWYWx1ZSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiREVGQVVMVF9WQUxVRV9JTl9GVU5DVElPTl9UWVBFIl0sCiAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgaW4gYSBmdW5jdGlvbiB0eXBlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVGdW5jdGlvblR5cGVkUGFyYW1ldGVyVmFyID0KICAgIG1lc3NhZ2VGdW5jdGlvblR5cGVkUGFyYW1ldGVyVmFyOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUZ1bmN0aW9uVHlwZWRQYXJhbWV0ZXJWYXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJGdW5jdGlvblR5cGVkUGFyYW1ldGVyVmFyIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJGVU5DVElPTl9UWVBFRF9QQVJBTUVURVJfVkFSIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJGdW5jdGlvbi10eXBlZCBwYXJhbWV0ZXJzIGNhbid0IHNwZWNpZnkgJ2NvbnN0JywgJ2ZpbmFsJyBvciAndmFyJyBpbiBwbGFjZSBvZiBhIHJldHVybiB0eXBlLiIiIiwKICAgIHRpcDogciIiIlRyeSByZXBsYWNpbmcgdGhlIGtleXdvcmQgd2l0aCBhIHJldHVybiB0eXBlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVHZW5lcmF0b3JSZXR1cm5zVmFsdWUgPSBtZXNzYWdlR2VuZXJhdG9yUmV0dXJuc1ZhbHVlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUdlbmVyYXRvclJldHVybnNWYWx1ZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkdlbmVyYXRvclJldHVybnNWYWx1ZSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUkVUVVJOX0lOX0dFTkVSQVRPUiJdLAogICAgbWVzc2FnZTogciIiIidzeW5jKicgYW5kICdhc3luYyonIGNhbid0IHJldHVybiBhIHZhbHVlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVHZW5lcmljRnVuY3Rpb25UeXBlSW5Cb3VuZCA9CiAgICBtZXNzYWdlR2VuZXJpY0Z1bmN0aW9uVHlwZUluQm91bmQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlR2VuZXJpY0Z1bmN0aW9uVHlwZUluQm91bmQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJHZW5lcmljRnVuY3Rpb25UeXBlSW5Cb3VuZCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiR0VORVJJQ19GVU5DVElPTl9UWVBFX0NBTk5PVF9CRV9CT1VORCJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiVHlwZSB2YXJpYWJsZXMgY2FuJ3QgaGF2ZSBnZW5lcmljIGZ1bmN0aW9uIHR5cGVzIGluIHRoZWlyIGJvdW5kcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+CiAgICB0ZW1wbGF0ZUdlbmVyaWNGdW5jdGlvblR5cGVJbmZlcnJlZEFzQWN0dWFsVHlwZUFyZ3VtZW50ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJVbmV4cGVjdGVkIGdlbmVyaWMgZnVuY3Rpb24gdHlwZSAnI3R5cGUnIGluZmVycmVkIGFzIGEgdHlwZSBhcmd1bWVudC4iIiIsCiAgICAgICAgdGlwVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJUcnkgcHJvdmlkaW5nIGEgbm9uLWdlbmVyaWMgZnVuY3Rpb24gdHlwZSBleHBsaWNpdGx5LiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOgogICAgICAgICAgICBfd2l0aEFyZ3VtZW50c0dlbmVyaWNGdW5jdGlvblR5cGVJbmZlcnJlZEFzQWN0dWFsVHlwZUFyZ3VtZW50KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+CiAgICBjb2RlR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4oCiAgICAgICAgIkdlbmVyaWNGdW5jdGlvblR5cGVJbmZlcnJlZEFzQWN0dWFsVHlwZUFyZ3VtZW50IiwKICAgICAgICB0ZW1wbGF0ZUdlbmVyaWNGdW5jdGlvblR5cGVJbmZlcnJlZEFzQWN0dWFsVHlwZUFyZ3VtZW50LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJHRU5FUklDX0ZVTkNUSU9OX0NBTk5PVF9CRV9UWVBFX0FSR1VNRU5UIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0dlbmVyaWNGdW5jdGlvblR5cGVJbmZlcnJlZEFzQWN0dWFsVHlwZUFyZ3VtZW50KAogICAgRGFydFR5cGUgX3R5cGUpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVHZW5lcmljRnVuY3Rpb25UeXBlSW5mZXJyZWRBc0FjdHVhbFR5cGVBcmd1bWVudCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlVuZXhwZWN0ZWQgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlICcke3R5cGV9JyBpbmZlcnJlZCBhcyBhIHR5cGUgYXJndW1lbnQuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSBwcm92aWRpbmcgYSBub24tZ2VuZXJpYyBmdW5jdGlvbiB0eXBlIGV4cGxpY2l0bHkuIiIiLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUdlbmVyaWNGdW5jdGlvblR5cGVVc2VkQXNBY3R1YWxUeXBlQXJndW1lbnQgPQogICAgbWVzc2FnZUdlbmVyaWNGdW5jdGlvblR5cGVVc2VkQXNBY3R1YWxUeXBlQXJndW1lbnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlR2VuZXJpY0Z1bmN0aW9uVHlwZVVzZWRBc0FjdHVhbFR5cGVBcmd1bWVudCA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiR2VuZXJpY0Z1bmN0aW9uVHlwZVVzZWRBc0FjdHVhbFR5cGVBcmd1bWVudCIsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkdFTkVSSUNfRlVOQ1RJT05fQ0FOTk9UX0JFX1RZUEVfQVJHVU1FTlQiXSwKICAgICAgICBtZXNzYWdlOgogICAgICAgICAgICByIiIiVW5leHBlY3RlZCBnZW5lcmljIGZ1bmN0aW9uIHR5cGUgZm91bmQgaW4gYSB0eXBlIGFyZ3VtZW50LiIiIiwKICAgICAgICB0aXA6IHIiIiJUcnkgdXNpbmcgYSBub24tZ2VuZXJpYyBmdW5jdGlvbiB0eXBlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVHZXR0ZXJOb3RGb3VuZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiR2V0dGVyIG5vdCBmb3VuZDogJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNHZXR0ZXJOb3RGb3VuZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlR2V0dGVyTm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkdldHRlck5vdEZvdW5kIiwgdGVtcGxhdGVHZXR0ZXJOb3RGb3VuZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX0dFVFRFUiJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0dldHRlck5vdEZvdW5kKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlR2V0dGVyTm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIkdldHRlciBub3QgZm91bmQ6ICcke25hbWV9Jy4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVHZXR0ZXJXaXRoRm9ybWFscyA9IG1lc3NhZ2VHZXR0ZXJXaXRoRm9ybWFsczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VHZXR0ZXJXaXRoRm9ybWFscyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkdldHRlcldpdGhGb3JtYWxzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJHRVRURVJfV0lUSF9QQVJBTUVURVJTIl0sCiAgICBtZXNzYWdlOiByIiIiQSBnZXR0ZXIgY2FuJ3QgaGF2ZSBmb3JtYWwgcGFyYW1ldGVycy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgJyguLi4pJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSWxsZWdhbEFzc2lnbm1lbnRUb05vbkFzc2lnbmFibGUgPQogICAgbWVzc2FnZUlsbGVnYWxBc3NpZ25tZW50VG9Ob25Bc3NpZ25hYmxlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUlsbGVnYWxBc3NpZ25tZW50VG9Ob25Bc3NpZ25hYmxlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSWxsZWdhbEFzc2lnbm1lbnRUb05vbkFzc2lnbmFibGUiLAogICAgaW5kZXg6IDQ1LAogICAgbWVzc2FnZTogciIiIklsbGVnYWwgYXNzaWdubWVudCB0byBub24tYXNzaWduYWJsZSBleHByZXNzaW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbGxlZ2FsQXN5bmNHZW5lcmF0b3JSZXR1cm5UeXBlID0KICAgIG1lc3NhZ2VJbGxlZ2FsQXN5bmNHZW5lcmF0b3JSZXR1cm5UeXBlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUlsbGVnYWxBc3luY0dlbmVyYXRvclJldHVyblR5cGUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbGxlZ2FsQXN5bmNHZW5lcmF0b3JSZXR1cm5UeXBlIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTExFR0FMX0FTWU5DX0dFTkVSQVRPUl9SRVRVUk5fVFlQRSJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiRnVuY3Rpb25zIG1hcmtlZCAnYXN5bmMqJyBtdXN0IGhhdmUgYSByZXR1cm4gdHlwZSBhc3NpZ25hYmxlIHRvICdTdHJlYW0nLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbGxlZ2FsQXN5bmNHZW5lcmF0b3JWb2lkUmV0dXJuVHlwZSA9CiAgICBtZXNzYWdlSWxsZWdhbEFzeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSWxsZWdhbEFzeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGUgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIklsbGVnYWxBc3luY0dlbmVyYXRvclZvaWRSZXR1cm5UeXBlIiwKICAgICAgICBtZXNzYWdlOgogICAgICAgICAgICByIiIiRnVuY3Rpb25zIG1hcmtlZCAnYXN5bmMqJyBjYW4ndCBoYXZlIHJldHVybiB0eXBlICd2b2lkJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSWxsZWdhbEFzeW5jUmV0dXJuVHlwZSA9IG1lc3NhZ2VJbGxlZ2FsQXN5bmNSZXR1cm5UeXBlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUlsbGVnYWxBc3luY1JldHVyblR5cGUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbGxlZ2FsQXN5bmNSZXR1cm5UeXBlIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTExFR0FMX0FTWU5DX1JFVFVSTl9UWVBFIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJGdW5jdGlvbnMgbWFya2VkICdhc3luYycgbXVzdCBoYXZlIGEgcmV0dXJuIHR5cGUgYXNzaWduYWJsZSB0byAnRnV0dXJlJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlSWxsZWdhbE1peGluID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUaGUgdHlwZSAnI25hbWUnIGNhbid0IGJlIG1peGVkIGluLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0lsbGVnYWxNaXhpbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlSWxsZWdhbE1peGluID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJJbGxlZ2FsTWl4aW4iLCB0ZW1wbGF0ZUlsbGVnYWxNaXhpbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSUxMRUdBTF9NSVhJTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbGxlZ2FsTWl4aW4oU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbGxlZ2FsTWl4aW4sCiAgICAgIG1lc3NhZ2U6ICIiIlRoZSB0eXBlICcke25hbWV9JyBjYW4ndCBiZSBtaXhlZCBpbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnMgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkNhbid0IHVzZSAnI25hbWUnIGFzIGEgbWl4aW4gYmVjYXVzZSBpdCBoYXMgY29uc3RydWN0b3JzLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0lsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9ycyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnMiLCB0ZW1wbGF0ZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNSVhJTl9ERUNMQVJFU19DT05TVFJVQ1RPUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9ycyhTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQ2FuJ3QgdXNlICcke25hbWV9JyBhcyBhIG1peGluIGJlY2F1c2UgaXQgaGFzIGNvbnN0cnVjdG9ycy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiVGhpcyBjb25zdHJ1Y3RvciBwcmV2ZW50cyB1c2luZyAnI25hbWUnIGFzIGEgbWl4aW4uIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgY29kZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzQ2F1c2UgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIklsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzQ2F1c2UiLAogICAgICAgIHRlbXBsYXRlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzQ2F1c2UsCiAgICAgIG1lc3NhZ2U6ICIiIlRoaXMgY29uc3RydWN0b3IgcHJldmVudHMgdXNpbmcgJyR7bmFtZX0nIGFzIGEgbWl4aW4uIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+IHRlbXBsYXRlSWxsZWdhbFJlY3Vyc2l2ZVR5cGUgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIklsbGVnYWwgcmVjdXJzaXZlIHR5cGUgJyN0eXBlJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbGxlZ2FsUmVjdXJzaXZlVHlwZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPiBjb2RlSWxsZWdhbFJlY3Vyc2l2ZVR5cGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4oCiAgIklsbGVnYWxSZWN1cnNpdmVUeXBlIiwKICB0ZW1wbGF0ZUlsbGVnYWxSZWN1cnNpdmVUeXBlLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0lsbGVnYWxSZWN1cnNpdmVUeXBlKERhcnRUeXBlIF90eXBlKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSWxsZWdhbFJlY3Vyc2l2ZVR5cGUsCiAgICAgIG1lc3NhZ2U6ICIiIklsbGVnYWwgcmVjdXJzaXZlIHR5cGUgJyR7dHlwZX0nLiIiIiArIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSWxsZWdhbFN5bmNHZW5lcmF0b3JSZXR1cm5UeXBlID0KICAgIG1lc3NhZ2VJbGxlZ2FsU3luY0dlbmVyYXRvclJldHVyblR5cGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSWxsZWdhbFN5bmNHZW5lcmF0b3JSZXR1cm5UeXBlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSWxsZWdhbFN5bmNHZW5lcmF0b3JSZXR1cm5UeXBlIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTExFR0FMX1NZTkNfR0VORVJBVE9SX1JFVFVSTl9UWVBFIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJGdW5jdGlvbnMgbWFya2VkICdzeW5jKicgbXVzdCBoYXZlIGEgcmV0dXJuIHR5cGUgYXNzaWduYWJsZSB0byAnSXRlcmFibGUnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbGxlZ2FsU3luY0dlbmVyYXRvclZvaWRSZXR1cm5UeXBlID0KICAgIG1lc3NhZ2VJbGxlZ2FsU3luY0dlbmVyYXRvclZvaWRSZXR1cm5UeXBlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUlsbGVnYWxTeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbGxlZ2FsU3luY0dlbmVyYXRvclZvaWRSZXR1cm5UeXBlIiwKICAgIG1lc3NhZ2U6IHIiIiJGdW5jdGlvbnMgbWFya2VkICdzeW5jKicgY2FuJ3QgaGF2ZSByZXR1cm4gdHlwZSAndm9pZCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUltcGxlbWVudHNCZWZvcmVFeHRlbmRzID0gbWVzc2FnZUltcGxlbWVudHNCZWZvcmVFeHRlbmRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUltcGxlbWVudHNCZWZvcmVFeHRlbmRzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW1wbGVtZW50c0JlZm9yZUV4dGVuZHMiLAogICAgaW5kZXg6IDQ0LAogICAgbWVzc2FnZTogciIiIlRoZSBleHRlbmRzIGNsYXVzZSBtdXN0IGJlIGJlZm9yZSB0aGUgaW1wbGVtZW50cyBjbGF1c2UuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgZXh0ZW5kcyBjbGF1c2UgYmVmb3JlIHRoZSBpbXBsZW1lbnRzIGNsYXVzZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW1wbGVtZW50c0JlZm9yZU9uID0gbWVzc2FnZUltcGxlbWVudHNCZWZvcmVPbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbXBsZW1lbnRzQmVmb3JlT24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbXBsZW1lbnRzQmVmb3JlT24iLAogICAgaW5kZXg6IDQzLAogICAgbWVzc2FnZTogciIiIlRoZSBvbiBjbGF1c2UgbXVzdCBiZSBiZWZvcmUgdGhlIGltcGxlbWVudHMgY2xhdXNlLiIiIiwKICAgIHRpcDogciIiIlRyeSBtb3ZpbmcgdGhlIG9uIGNsYXVzZSBiZWZvcmUgdGhlIGltcGxlbWVudHMgY2xhdXNlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbXBsZW1lbnRzQmVmb3JlV2l0aCA9IG1lc3NhZ2VJbXBsZW1lbnRzQmVmb3JlV2l0aDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbXBsZW1lbnRzQmVmb3JlV2l0aCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkltcGxlbWVudHNCZWZvcmVXaXRoIiwKICAgIGluZGV4OiA0MiwKICAgIG1lc3NhZ2U6IHIiIiJUaGUgd2l0aCBjbGF1c2UgbXVzdCBiZSBiZWZvcmUgdGhlIGltcGxlbWVudHMgY2xhdXNlLiIiIiwKICAgIHRpcDogciIiIlRyeSBtb3ZpbmcgdGhlIHdpdGggY2xhdXNlIGJlZm9yZSB0aGUgaW1wbGVtZW50cyBjbGF1c2UuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUltcGxlbWVudHNGdXR1cmVPciA9IG1lc3NhZ2VJbXBsZW1lbnRzRnV0dXJlT3I7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW1wbGVtZW50c0Z1dHVyZU9yID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW1wbGVtZW50c0Z1dHVyZU9yIiwKICAgIG1lc3NhZ2U6IHIiIiInRnV0dXJlT3InIGNhbid0IGJlIHVzZWQgaW4gYW4gJ2ltcGxlbWVudHMnIGNsYXVzZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgaW50IGNvdW50KT4KICAgIHRlbXBsYXRlSW1wbGVtZW50c1JlcGVhdGVkID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIGludCBjb3VudCk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIicjbmFtZScgY2FuIG9ubHkgYmUgaW1wbGVtZW50ZWQgb25jZS4iIiIsCiAgICAgICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgcmVtb3ZpbmcgI2NvdW50IG9mIHRoZSBvY2N1cnJlbmNlcy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbXBsZW1lbnRzUmVwZWF0ZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBpbnQgY291bnQpPiBjb2RlSW1wbGVtZW50c1JlcGVhdGVkID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgaW50IGNvdW50KT4oCiAgICAgICAgIkltcGxlbWVudHNSZXBlYXRlZCIsIHRlbXBsYXRlSW1wbGVtZW50c1JlcGVhdGVkLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTVBMRU1FTlRTX1JFUEVBVEVEIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ltcGxlbWVudHNSZXBlYXRlZChTdHJpbmcgbmFtZSwgaW50IGNvdW50KSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChjb3VudCA9PSBudWxsKSB0aHJvdyAnTm8gY291bnQgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW1wbGVtZW50c1JlcGVhdGVkLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgY2FuIG9ubHkgYmUgaW1wbGVtZW50ZWQgb25jZS4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHJlbW92aW5nICR7Y291bnR9IG9mIHRoZSBvY2N1cnJlbmNlcy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ2NvdW50JzogY291bnR9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVJbXBsZW1lbnRzU3VwZXJDbGFzcyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiJyNuYW1lJyBjYW4ndCBiZSB1c2VkIGluIGJvdGggJ2V4dGVuZHMnIGFuZCAnaW1wbGVtZW50cycgY2xhdXNlcy4iIiIsCiAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSByZW1vdmluZyBvbmUgb2YgdGhlIG9jY3VycmVuY2VzLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW1wbGVtZW50c1N1cGVyQ2xhc3MpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUltcGxlbWVudHNTdXBlckNsYXNzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJJbXBsZW1lbnRzU3VwZXJDbGFzcyIsIHRlbXBsYXRlSW1wbGVtZW50c1N1cGVyQ2xhc3MsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklNUExFTUVOVFNfU1VQRVJfQ0xBU1MiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW1wbGVtZW50c1N1cGVyQ2xhc3MoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbXBsZW1lbnRzU3VwZXJDbGFzcywKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIicke25hbWV9JyBjYW4ndCBiZSB1c2VkIGluIGJvdGggJ2V4dGVuZHMnIGFuZCAnaW1wbGVtZW50cycgY2xhdXNlcy4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IHJlbW92aW5nIG9uZSBvZiB0aGUgb2NjdXJyZW5jZXMuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlKT4gdGVtcGxhdGVJbXBsaWNpdENhbGxPZk5vbk1ldGhvZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQ2Fubm90IGludm9rZSBhbiBpbnN0YW5jZSBvZiAnI3R5cGUnIGJlY2F1c2UgaXQgZGVjbGFyZXMgJ2NhbGwnIHRvIGJlIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgbWV0aG9kLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgY2hhbmdpbmcgJ2NhbGwnIHRvIGEgbWV0aG9kIG9yIGV4cGxpY2l0bHkgaW52b2tlICdjYWxsJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ltcGxpY2l0Q2FsbE9mTm9uTWV0aG9kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+IGNvZGVJbXBsaWNpdENhbGxPZk5vbk1ldGhvZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPigKICAgICAgICAiSW1wbGljaXRDYWxsT2ZOb25NZXRob2QiLCB0ZW1wbGF0ZUltcGxpY2l0Q2FsbE9mTm9uTWV0aG9kLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTVBMSUNJVF9DQUxMX09GX05PTl9NRVRIT0QiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW1wbGljaXRDYWxsT2ZOb25NZXRob2QoRGFydFR5cGUgX3R5cGUpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbXBsaWNpdENhbGxPZk5vbk1ldGhvZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNhbm5vdCBpbnZva2UgYW4gaW5zdGFuY2Ugb2YgJyR7dHlwZX0nIGJlY2F1c2UgaXQgZGVjbGFyZXMgJ2NhbGwnIHRvIGJlIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgbWV0aG9kLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJUcnkgY2hhbmdpbmcgJ2NhbGwnIHRvIGEgbWV0aG9kIG9yIGV4cGxpY2l0bHkgaW52b2tlICdjYWxsJy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMik+IHRlbXBsYXRlSW1wbGljaXRNaXhpbk92ZXJyaWRlQ29udGV4dCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJPdmVycmlkZSB3YXMgaW50cm9kdWNlZCB3aGVuIHRoZSBtaXhpbiAnI25hbWUnIHdhcyBhcHBsaWVkIHRvICcjbmFtZTInLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW1wbGljaXRNaXhpbk92ZXJyaWRlQ29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlSW1wbGljaXRNaXhpbk92ZXJyaWRlQ29udGV4dCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0IiwgdGVtcGxhdGVJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0LAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0KFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW1wbGljaXRNaXhpbk92ZXJyaWRlQ29udGV4dCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIk92ZXJyaWRlIHdhcyBpbnRyb2R1Y2VkIHdoZW4gdGhlIG1peGluICcke25hbWV9JyB3YXMgYXBwbGllZCB0byAnJHtuYW1lMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnbmFtZTInOiBuYW1lMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbXBvcnRBZnRlclBhcnQgPSBtZXNzYWdlSW1wb3J0QWZ0ZXJQYXJ0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUltcG9ydEFmdGVyUGFydCA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJJbXBvcnRBZnRlclBhcnQiLAogICAgaW5kZXg6IDEwLAogICAgbWVzc2FnZTogciIiIkltcG9ydCBkaXJlY3RpdmVzIG11c3QgcHJlY2VkZSBwYXJ0IGRpcmVjdGl2ZXMuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgaW1wb3J0IGRpcmVjdGl2ZXMgYmVmb3JlIHRoZSBwYXJ0IGRpcmVjdGl2ZXMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPgogICAgdGVtcGxhdGVJbXBvcnRIaWRlc0ltcG9ydCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiSW1wb3J0IG9mICcjbmFtZScgKGZyb20gJyN1cmknKSBoaWRlcyBpbXBvcnQgZnJvbSAnI3VyaTInLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ltcG9ydEhpZGVzSW1wb3J0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8sIFVyaSB1cmkyXyk+CiAgICBjb2RlSW1wb3J0SGlkZXNJbXBvcnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4oCiAgICAgICAgIkltcG9ydEhpZGVzSW1wb3J0IiwgdGVtcGxhdGVJbXBvcnRIaWRlc0ltcG9ydCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaWdub3JlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW1wb3J0SGlkZXNJbXBvcnQoU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgU3RyaW5nIHVyaTIgPSByZWxhdGl2aXplVXJpKHVyaTJfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUltcG9ydEhpZGVzSW1wb3J0LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiSW1wb3J0IG9mICcke25hbWV9JyAoZnJvbSAnJHt1cml9JykgaGlkZXMgaW1wb3J0IGZyb20gJyR7dXJpMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndXJpJzogdXJpXywgJ3VyaTInOiB1cmkyX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbmNvbXBhdGlibGVSZWRpcmVjdGVlRnVuY3Rpb25UeXBlID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0eXBlICcjdHlwZScgaXNuJ3QgYSBzdWJ0eXBlIG9mICcjdHlwZTInLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5jb21wYXRpYmxlUmVkaXJlY3RlZUZ1bmN0aW9uVHlwZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlSW5jb21wYXRpYmxlUmVkaXJlY3RlZUZ1bmN0aW9uVHlwZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJJbmNvbXBhdGlibGVSZWRpcmVjdGVlRnVuY3Rpb25UeXBlIiwKICAgICAgICB0ZW1wbGF0ZUluY29tcGF0aWJsZVJlZGlyZWN0ZWVGdW5jdGlvblR5cGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFRElSRUNUX1RPX0lOVkFMSURfVFlQRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbmNvbXBhdGlibGVSZWRpcmVjdGVlRnVuY3Rpb25UeXBlKAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbmNvbXBhdGlibGVSZWRpcmVjdGVlRnVuY3Rpb25UeXBlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHR5cGUgJyR7dHlwZX0nIGlzbid0IGEgc3VidHlwZSBvZiAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZSBfdHlwZTIsCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlR5cGUgYXJndW1lbnQgJyN0eXBlJyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcjdHlwZTInIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcjbmFtZScgb24gJyNuYW1lMicuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBjaGFuZ2luZyB0eXBlIGFyZ3VtZW50cyBzbyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgYm91bmRzLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50ID0gY29uc3QgQ29kZTwKICAgICAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgICAgICAiSW5jb3JyZWN0VHlwZUFyZ3VtZW50IiwgdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfQVJHVU1FTlRfTk9UX01BVENISU5HX0JPVU5EUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnQoCiAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVHlwZSBhcmd1bWVudCAnJHt0eXBlfScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnJHt0eXBlMn0nIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcke25hbWV9JyBvbiAnJHtuYW1lMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJUcnkgY2hhbmdpbmcgdHlwZSBhcmd1bWVudHMgc28gdGhhdCB0aGV5IGNvbmZvcm0gdG8gdGhlIGJvdW5kcy4iIiIsCiAgICAgIGFyZ3VtZW50czogewogICAgICAgICd0eXBlJzogX3R5cGUsCiAgICAgICAgJ3R5cGUyJzogX3R5cGUyLAogICAgICAgICduYW1lJzogbmFtZSwKICAgICAgICAnbmFtZTInOiBuYW1lMgogICAgICB9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlIF90eXBlMiwKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZTIpPiB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudEluUmV0dXJuVHlwZSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVHlwZSBhcmd1bWVudCAnI3R5cGUnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyN0eXBlMicgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBvbiAnI25hbWUyJyBpbiB0aGUgcmV0dXJuIHR5cGUuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBjaGFuZ2luZyB0eXBlIGFyZ3VtZW50cyBzbyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgYm91bmRzLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5SZXR1cm5UeXBlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5SZXR1cm5UeXBlID0gY29uc3QgQ29kZTwKICAgICAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgICAgICAiSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5SZXR1cm5UeXBlIiwKICAgICAgICB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudEluUmV0dXJuVHlwZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVFlQRV9BUkdVTUVOVF9OT1RfTUFUQ0hJTkdfQk9VTkRTIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudEluUmV0dXJuVHlwZSgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblJldHVyblR5cGUsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUeXBlIGFyZ3VtZW50ICcke3R5cGV9JyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcke3R5cGUyfScgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyR7bmFtZX0nIG9uICcke25hbWUyfScgaW4gdGhlIHJldHVybiB0eXBlLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJUcnkgY2hhbmdpbmcgdHlwZSBhcmd1bWVudHMgc28gdGhhdCB0aGV5IGNvbmZvcm0gdG8gdGhlIGJvdW5kcy4iIiIsCiAgICAgIGFyZ3VtZW50czogewogICAgICAgICd0eXBlJzogX3R5cGUsCiAgICAgICAgJ3R5cGUyJzogX3R5cGUyLAogICAgICAgICduYW1lJzogbmFtZSwKICAgICAgICAnbmFtZTInOiBuYW1lMgogICAgICB9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlIF90eXBlMiwKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcgbmFtZTIsCiAgICAgICAgU3RyaW5nIG5hbWUzLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lNCk+IHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGUgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLAogICAgICAgICAgICBTdHJpbmcgbmFtZTIsIFN0cmluZyBuYW1lMywgU3RyaW5nIG5hbWU0KT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlR5cGUgYXJndW1lbnQgJyN0eXBlJyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcjdHlwZTInIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcjbmFtZScgb24gJyNuYW1lMicgaW4gdGhlIHN1cGVydHlwZSAnI25hbWUzJyBvZiBjbGFzcyAnI25hbWU0Jy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGNoYW5naW5nIHR5cGUgYXJndW1lbnRzIHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgIFN0cmluZyBuYW1lMiwgU3RyaW5nIG5hbWUzLCBTdHJpbmcgbmFtZTQpPgogICAgY29kZUluY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlID0gY29uc3QgQ29kZTwKICAgICAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgICAgIFN0cmluZyBuYW1lMiwgU3RyaW5nIG5hbWUzLCBTdHJpbmcgbmFtZTQpPigKICAgICAgICAiSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGUiLAogICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfQVJHVU1FTlRfTk9UX01BVENISU5HX0JPVU5EUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZShEYXJ0VHlwZSBfdHlwZSwKICAgIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMiwgU3RyaW5nIG5hbWUzLCBTdHJpbmcgbmFtZTQpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICBpZiAobmFtZTMuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUzID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMyk7CiAgaWYgKG5hbWU0LmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lNCA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTQpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVHlwZSBhcmd1bWVudCAnJHt0eXBlfScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnJHt0eXBlMn0nIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcke25hbWV9JyBvbiAnJHtuYW1lMn0nIGluIHRoZSBzdXBlcnR5cGUgJyR7bmFtZTN9JyBvZiBjbGFzcyAnJHtuYW1lNH0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOgogICAgICAgICAgIiIiVHJ5IGNoYW5naW5nIHR5cGUgYXJndW1lbnRzIHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuIiIiLAogICAgICBhcmd1bWVudHM6IHsKICAgICAgICAndHlwZSc6IF90eXBlLAogICAgICAgICd0eXBlMic6IF90eXBlMiwKICAgICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICAgJ25hbWUyJzogbmFtZTIsCiAgICAgICAgJ25hbWUzJzogbmFtZTMsCiAgICAgICAgJ25hbWU0JzogbmFtZTQKICAgICAgfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZSBfdHlwZTIsCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nIG5hbWUyLAogICAgICAgIFN0cmluZyBuYW1lMywKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZTQpPiB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlSW5mZXJyZWQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUyLAogICAgICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgU3RyaW5nIG5hbWUyLAogICAgICAgICAgICBTdHJpbmcgbmFtZTMsCiAgICAgICAgICAgIFN0cmluZwogICAgICAgICAgICAgICAgbmFtZTQpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiSW5mZXJyZWQgdHlwZSBhcmd1bWVudCAnI3R5cGUnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyN0eXBlMicgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBvbiAnI25hbWUyJyBpbiB0aGUgc3VwZXJ0eXBlICcjbmFtZTMnIG9mIGNsYXNzICcjbmFtZTQnLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgc3BlY2lmeWluZyB0eXBlIGFyZ3VtZW50cyBleHBsaWNpdGx5IHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZUluZmVycmVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgU3RyaW5nIG5hbWUyLCBTdHJpbmcgbmFtZTMsIFN0cmluZyBuYW1lNCk+CiAgICBjb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVJbmZlcnJlZCA9IGNvbnN0IENvZGU8CiAgICAgICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZTIsIFN0cmluZyBuYW1lMywgU3RyaW5nIG5hbWU0KT4oCiAgICAgICAgIkluY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlSW5mZXJyZWQiLAogICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVJbmZlcnJlZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVFlQRV9BUkdVTUVOVF9OT1RfTUFUQ0hJTkdfQk9VTkRTIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlSW5mZXJyZWQoRGFydFR5cGUgX3R5cGUsCiAgICBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIFN0cmluZyBuYW1lMywgU3RyaW5nIG5hbWU0KSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgaWYgKG5hbWUzLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMyA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTMpOwogIGlmIChuYW1lNC5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTQgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWU0KTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZUluZmVycmVkLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiSW5mZXJyZWQgdHlwZSBhcmd1bWVudCAnJHt0eXBlfScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnJHt0eXBlMn0nIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcke25hbWV9JyBvbiAnJHtuYW1lMn0nIGluIHRoZSBzdXBlcnR5cGUgJyR7bmFtZTN9JyBvZiBjbGFzcyAnJHtuYW1lNH0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOgogICAgICAgICAgIiIiVHJ5IHNwZWNpZnlpbmcgdHlwZSBhcmd1bWVudHMgZXhwbGljaXRseSBzbyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgYm91bmRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgJ3R5cGUnOiBfdHlwZSwKICAgICAgICAndHlwZTInOiBfdHlwZTIsCiAgICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAgICduYW1lMic6IG5hbWUyLAogICAgICAgICduYW1lMyc6IG5hbWUzLAogICAgICAgICduYW1lNCc6IG5hbWU0CiAgICAgIH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUgX3R5cGUyLAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMik+IHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5mZXJyZWQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkluZmVycmVkIHR5cGUgYXJndW1lbnQgJyN0eXBlJyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcjdHlwZTInIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcjbmFtZScgb24gJyNuYW1lMicuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBzcGVjaWZ5aW5nIHR5cGUgYXJndW1lbnRzIGV4cGxpY2l0bHkgc28gdGhhdCB0aGV5IGNvbmZvcm0gdG8gdGhlIGJvdW5kcy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudEluZmVycmVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5mZXJyZWQgPSBjb25zdCBDb2RlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJJbmNvcnJlY3RUeXBlQXJndW1lbnRJbmZlcnJlZCIsIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5mZXJyZWQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfQVJHVU1FTlRfTk9UX01BVENISU5HX0JPVU5EUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRJbmZlcnJlZCgKICAgIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJbmZlcnJlZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkluZmVycmVkIHR5cGUgYXJndW1lbnQgJyR7dHlwZX0nIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyR7dHlwZTJ9JyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnJHtuYW1lfScgb24gJyR7bmFtZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiVHJ5IHNwZWNpZnlpbmcgdHlwZSBhcmd1bWVudHMgZXhwbGljaXRseSBzbyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgYm91bmRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgJ3R5cGUnOiBfdHlwZSwKICAgICAgICAndHlwZTInOiBfdHlwZTIsCiAgICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAgICduYW1lMic6IG5hbWUyCiAgICAgIH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUgX3R5cGUyLAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIERhcnRUeXBlIF90eXBlMywKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZTIpPiB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTIsCiAgICAgICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTMsCiAgICAgICAgICAgIFN0cmluZwogICAgICAgICAgICAgICAgbmFtZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVHlwZSBhcmd1bWVudCAnI3R5cGUnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyN0eXBlMicgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBvbiAnI3R5cGUzLiNuYW1lMicuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBjaGFuZ2luZyB0eXBlIGFyZ3VtZW50cyBzbyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgYm91bmRzLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUzLCBTdHJpbmcgbmFtZTIpPiBjb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkID0KICAgIGNvbnN0IENvZGU8CiAgICAgICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsCiAgICAgICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTMsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWQiLAogICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUWVBFX0FSR1VNRU5UX05PVF9NQVRDSElOR19CT1VORFMiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkKERhcnRUeXBlIF90eXBlLAogICAgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUzLCBTdHJpbmcgbmFtZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIExpc3Q8T2JqZWN0PiB0eXBlM1BhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUzKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMyA9IHR5cGUzUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVHlwZSBhcmd1bWVudCAnJHt0eXBlfScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnJHt0eXBlMn0nIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcke25hbWV9JyBvbiAnJHt0eXBlM30uJHtuYW1lMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJUcnkgY2hhbmdpbmcgdHlwZSBhcmd1bWVudHMgc28gdGhhdCB0aGV5IGNvbmZvcm0gdG8gdGhlIGJvdW5kcy4iIiIsCiAgICAgIGFyZ3VtZW50czogewogICAgICAgICd0eXBlJzogX3R5cGUsCiAgICAgICAgJ3R5cGUyJzogX3R5cGUyLAogICAgICAgICduYW1lJzogbmFtZSwKICAgICAgICAndHlwZTMnOiBfdHlwZTMsCiAgICAgICAgJ25hbWUyJzogbmFtZTIKICAgICAgfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZSBfdHlwZTIsCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgRGFydFR5cGUgX3R5cGUzLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMik+IHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkSW5mZXJyZWQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTMsIFN0cmluZyBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJJbmZlcnJlZCB0eXBlIGFyZ3VtZW50ICcjdHlwZScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnI3R5cGUyJyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIG9uICcjdHlwZTMuI25hbWUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IHNwZWNpZnlpbmcgdHlwZSBhcmd1bWVudHMgZXhwbGljaXRseSBzbyB0aGF0IHRoZXkgY29uZm9ybSB0byB0aGUgYm91bmRzLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkSW5mZXJyZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTMsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkSW5mZXJyZWQgPSBjb25zdCBDb2RlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lLAogICAgICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUzLCBTdHJpbmcgbmFtZTIpPigKICAgICAgICAiSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkSW5mZXJyZWQiLAogICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkSW5mZXJyZWQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfQVJHVU1FTlRfTk9UX01BVENISU5HX0JPVU5EUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmZlcnJlZChEYXJ0VHlwZSBfdHlwZSwKICAgIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlMywgU3RyaW5nIG5hbWUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBMaXN0PE9iamVjdD4gdHlwZTNQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMyk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTMgPSB0eXBlM1BhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZEluZmVycmVkLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiSW5mZXJyZWQgdHlwZSBhcmd1bWVudCAnJHt0eXBlfScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnJHt0eXBlMn0nIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcke25hbWV9JyBvbiAnJHt0eXBlM30uJHtuYW1lMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJUcnkgc3BlY2lmeWluZyB0eXBlIGFyZ3VtZW50cyBleHBsaWNpdGx5IHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuIiIiLAogICAgICBhcmd1bWVudHM6IHsKICAgICAgICAndHlwZSc6IF90eXBlLAogICAgICAgICd0eXBlMic6IF90eXBlMiwKICAgICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICAgJ3R5cGUzJzogX3R5cGUzLAogICAgICAgICduYW1lMic6IG5hbWUyCiAgICAgIH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRWYXJpYWJsZSA9CiAgICBtZXNzYWdlSW5jb3JyZWN0VHlwZUFyZ3VtZW50VmFyaWFibGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW5jb3JyZWN0VHlwZUFyZ3VtZW50VmFyaWFibGUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbmNvcnJlY3RUeXBlQXJndW1lbnRWYXJpYWJsZSIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwKICAgIG1lc3NhZ2U6IHIiIiJUaGlzIGlzIHRoZSB0eXBlIHZhcmlhYmxlIHdob3NlIGJvdW5kIGlzbid0IGNvbmZvcm1lZCB0by4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IHRlbXBsYXRlSW5mZXJyZWRQYWNrYWdlVXJpID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJJbnRlcnByZXRpbmcgdGhpcyBhcyBwYWNrYWdlIFVSSSwgJyN1cmknLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0luZmVycmVkUGFja2FnZVVyaSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiBjb2RlSW5mZXJyZWRQYWNrYWdlVXJpID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgICAgICJJbmZlcnJlZFBhY2thZ2VVcmkiLCB0ZW1wbGF0ZUluZmVycmVkUGFja2FnZVVyaSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkud2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW5mZXJyZWRQYWNrYWdlVXJpKFVyaSB1cmlfKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbmZlcnJlZFBhY2thZ2VVcmksCiAgICAgIG1lc3NhZ2U6ICIiIkludGVycHJldGluZyB0aGlzIGFzIHBhY2thZ2UgVVJJLCAnJHt1cml9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdCA9IG1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3Q7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0IiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05GTElDVFNfV0lUSF9JTkhFUklURURfTUVNQkVSIl0sCiAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgaW5oZXJpdCBtZW1iZXJzIHRoYXQgY29uZmxpY3Qgd2l0aCBlYWNoIG90aGVyLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTEgPQogICAgbWVzc2FnZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTEgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTEiLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQsCiAgICBtZXNzYWdlOiByIiIiVGhpcyBpcyBvbmUgaW5oZXJpdGVkIG1lbWJlci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Q2F1c2UyID0KICAgIG1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Q2F1c2UyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Q2F1c2UyIiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIlRoaXMgaXMgdGhlIG90aGVyIGluaGVyaXRlZCBtZW1iZXIuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgc3RyaW5nLAogICAgICAgIFVyaQogICAgICAgICAgICB1cmlfKT4gdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBVcmkgdXJpXyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUcmllZCB0byBpbml0aWFsaXplIGZyb20gYSBwcmV2aW91cyBjb21waWxhdGlvbiAoI3N0cmluZyksIGJ1dCB0aGUgZmlsZSB3YXMgbm90IHNlbGYtY29udGFpbmVkLiBUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LgpJZiB5b3UgYXJlIGNvbWZvcnRhYmxlIHdpdGggaXQsIGl0IHdvdWxkIGltcHJvdmUgdGhlIGNoYW5jZXMgb2YgZml4aW5nIGFueSBidWcgaWYgeW91IGluY2x1ZGVkIHRoZSBmaWxlICN1cmkgaW4geW91ciBlcnJvciByZXBvcnQsIGJ1dCBiZSBhd2FyZSB0aGF0IHRoaXMgZmlsZSBpbmNsdWRlcyB5b3VyIHNvdXJjZSBjb2RlLgpFaXRoZXIgd2F5LCB5b3Ugc2hvdWxkIHByb2JhYmx5IGRlbGV0ZSB0aGUgZmlsZSBzbyBpdCBkb2Vzbid0IHVzZSB1bm5lY2Vzc2FyeSBkaXNrIHNwYWNlLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgVXJpIHVyaV8pPgogICAgY29kZUluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFVyaSB1cmlfKT4oCiAgICAgICAgIkluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWQiLAogICAgICAgIHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkud2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZCgKICAgIFN0cmluZyBzdHJpbmcsIFVyaSB1cmlfKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUcmllZCB0byBpbml0aWFsaXplIGZyb20gYSBwcmV2aW91cyBjb21waWxhdGlvbiAoJHtzdHJpbmd9KSwgYnV0IHRoZSBmaWxlIHdhcyBub3Qgc2VsZi1jb250YWluZWQuIFRoaXMgbWlnaHQgYmUgYSBidWcuCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpdCBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0byByZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuCklmIHlvdSBhcmUgY29tZm9ydGFibGUgd2l0aCBpdCwgaXQgd291bGQgaW1wcm92ZSB0aGUgY2hhbmNlcyBvZiBmaXhpbmcgYW55IGJ1ZyBpZiB5b3UgaW5jbHVkZWQgdGhlIGZpbGUgJHt1cml9IGluIHlvdXIgZXJyb3IgcmVwb3J0LCBidXQgYmUgYXdhcmUgdGhhdCB0aGlzIGZpbGUgaW5jbHVkZXMgeW91ciBzb3VyY2UgY29kZS4KRWl0aGVyIHdheSwgeW91IHNob3VsZCBwcm9iYWJseSBkZWxldGUgdGhlIGZpbGUgc28gaXQgZG9lc24ndCB1c2UgdW5uZWNlc3NhcnkgZGlzayBzcGFjZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+CiAgICB0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWROb0R1bXAgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiVHJpZWQgdG8gaW5pdGlhbGl6ZSBmcm9tIGEgcHJldmlvdXMgY29tcGlsYXRpb24gKCNzdHJpbmcpLCBidXQgdGhlIGZpbGUgd2FzIG5vdCBzZWxmLWNvbnRhaW5lZC4gVGhpcyBtaWdodCBiZSBhIGJ1Zy4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0IGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvIHJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkTm9EdW1wKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4KICAgIGNvZGVJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkTm9EdW1wID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgIkluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWROb0R1bXAiLAogICAgICAgIHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZE5vRHVtcCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkud2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZE5vRHVtcChTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWROb0R1bXAsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUcmllZCB0byBpbml0aWFsaXplIGZyb20gYSBwcmV2aW91cyBjb21waWxhdGlvbiAoJHtzdHJpbmd9KSwgYnV0IHRoZSBmaWxlIHdhcyBub3Qgc2VsZi1jb250YWluZWQuIFRoaXMgbWlnaHQgYmUgYSBidWcuCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpdCBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0byByZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuIiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgc3RyaW5nLAogICAgICAgIFN0cmluZyBzdHJpbmcyLAogICAgICAgIFN0cmluZyBzdHJpbmczLAogICAgICAgIFVyaQogICAgICAgICAgICB1cmlfKT4gdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgIFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyLCBTdHJpbmcgc3RyaW5nMywgVXJpIHVyaV8pPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVHJpZWQgdG8gaW5pdGlhbGl6ZSBmcm9tIGEgcHJldmlvdXMgY29tcGlsYXRpb24gKCNzdHJpbmcpLCBidXQgY291bGRuJ3QuCkVycm9yIG1lc3NhZ2Ugd2FzICcjc3RyaW5nMicuClN0YWNrdHJhY2UgaW5jbHVkZWQgJyNzdHJpbmczJy4KVGhpcyBtaWdodCBiZSBhIGJ1Zy4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0IGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvIHJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy4KSWYgeW91IGFyZSBjb21mb3J0YWJsZSB3aXRoIGl0LCBpdCB3b3VsZCBpbXByb3ZlIHRoZSBjaGFuY2VzIG9mIGZpeGluZyBhbnkgYnVnIGlmIHlvdSBpbmNsdWRlZCB0aGUgZmlsZSAjdXJpIGluIHlvdXIgZXJyb3IgcmVwb3J0LCBidXQgYmUgYXdhcmUgdGhhdCB0aGlzIGZpbGUgaW5jbHVkZXMgeW91ciBzb3VyY2UgY29kZS4KRWl0aGVyIHdheSwgeW91IHNob3VsZCBwcm9iYWJseSBkZWxldGUgdGhlIGZpbGUgc28gaXQgZG9lc24ndCB1c2UgdW5uZWNlc3NhcnkgZGlzayBzcGFjZS4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0luaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczLCBVcmkgdXJpXyk+CiAgICBjb2RlSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW0gPSBjb25zdCBDb2RlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICAgICAgU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczLCBVcmkgdXJpXyk+KAogICAgICAgICJJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbSIsCiAgICAgICAgdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkud2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW0oCiAgICBTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMiwgU3RyaW5nIHN0cmluZzMsIFVyaSB1cmlfKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMi5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVHJpZWQgdG8gaW5pdGlhbGl6ZSBmcm9tIGEgcHJldmlvdXMgY29tcGlsYXRpb24gKCR7c3RyaW5nfSksIGJ1dCBjb3VsZG4ndC4KRXJyb3IgbWVzc2FnZSB3YXMgJyR7c3RyaW5nMn0nLgpTdGFja3RyYWNlIGluY2x1ZGVkICcke3N0cmluZzN9Jy4KVGhpcyBtaWdodCBiZSBhIGJ1Zy4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0IGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvIHJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy4KSWYgeW91IGFyZSBjb21mb3J0YWJsZSB3aXRoIGl0LCBpdCB3b3VsZCBpbXByb3ZlIHRoZSBjaGFuY2VzIG9mIGZpeGluZyBhbnkgYnVnIGlmIHlvdSBpbmNsdWRlZCB0aGUgZmlsZSAke3VyaX0gaW4geW91ciBlcnJvciByZXBvcnQsIGJ1dCBiZSBhd2FyZSB0aGF0IHRoaXMgZmlsZSBpbmNsdWRlcyB5b3VyIHNvdXJjZSBjb2RlLgpFaXRoZXIgd2F5LCB5b3Ugc2hvdWxkIHByb2JhYmx5IGRlbGV0ZSB0aGUgZmlsZSBzbyBpdCBkb2Vzbid0IHVzZSB1bm5lY2Vzc2FyeSBkaXNrIHNwYWNlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgJ3N0cmluZyc6IHN0cmluZywKICAgICAgICAnc3RyaW5nMic6IHN0cmluZzIsCiAgICAgICAgJ3N0cmluZzMnOiBzdHJpbmczLAogICAgICAgICd1cmknOiB1cmlfCiAgICAgIH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyLCBTdHJpbmcgc3RyaW5nMyk+CiAgICB0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtTm9EdW1wID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiVHJpZWQgdG8gaW5pdGlhbGl6ZSBmcm9tIGEgcHJldmlvdXMgY29tcGlsYXRpb24gKCNzdHJpbmcpLCBidXQgY291bGRuJ3QuCkVycm9yIG1lc3NhZ2Ugd2FzICcjc3RyaW5nMicuClN0YWNrdHJhY2UgaW5jbHVkZWQgJyNzdHJpbmczJy4KVGhpcyBtaWdodCBiZSBhIGJ1Zy4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0IGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvIHJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbU5vRHVtcCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczKT4KICAgIGNvZGVJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbU5vRHVtcCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIsIFN0cmluZyBzdHJpbmczKT4oCiAgICAgICAgIkluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtTm9EdW1wIiwKICAgICAgICB0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtTm9EdW1wLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS53YXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbU5vRHVtcCgKICAgIFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyLCBTdHJpbmcgc3RyaW5nMykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgaWYgKHN0cmluZzIuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgaWYgKHN0cmluZzMuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbU5vRHVtcCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRyaWVkIHRvIGluaXRpYWxpemUgZnJvbSBhIHByZXZpb3VzIGNvbXBpbGF0aW9uICgke3N0cmluZ30pLCBidXQgY291bGRuJ3QuCkVycm9yIG1lc3NhZ2Ugd2FzICcke3N0cmluZzJ9Jy4KU3RhY2t0cmFjZSBpbmNsdWRlZCAnJHtzdHJpbmczfScuClRoaXMgbWlnaHQgYmUgYSBidWcuCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpdCBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0byByZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuIiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nLCAnc3RyaW5nMic6IHN0cmluZzIsICdzdHJpbmczJzogc3RyaW5nM30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbml0aWFsaXplZFZhcmlhYmxlSW5Gb3JFYWNoID0KICAgIG1lc3NhZ2VJbml0aWFsaXplZFZhcmlhYmxlSW5Gb3JFYWNoOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUluaXRpYWxpemVkVmFyaWFibGVJbkZvckVhY2ggPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbml0aWFsaXplZFZhcmlhYmxlSW5Gb3JFYWNoIiwKICAgIGluZGV4OiA4MiwKICAgIG1lc3NhZ2U6IHIiIiJUaGUgbG9vcCB2YXJpYWJsZSBpbiBhIGZvci1lYWNoIGxvb3AgY2FuJ3QgYmUgaW5pdGlhbGl6ZWQuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgcmVtb3ZpbmcgdGhlIGluaXRpYWxpemVyLCBvciB1c2luZyBhIGRpZmZlcmVudCBraW5kIG9mIGxvb3AuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiInI25hbWUnIGlzbid0IGFuIGluc3RhbmNlIGZpZWxkIG9mIHRoaXMgY2xhc3MuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZXJGb3JTdGF0aWNGaWVsZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlSW5pdGlhbGl6ZXJGb3JTdGF0aWNGaWVsZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiSW5pdGlhbGl6ZXJGb3JTdGF0aWNGaWVsZCIsIHRlbXBsYXRlSW5pdGlhbGl6ZXJGb3JTdGF0aWNGaWVsZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5JVElBTElaRVJfRk9SX1NUQVRJQ19GSUVMRCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5pdGlhbGl6ZXJGb3JTdGF0aWNGaWVsZCwKICAgICAgbWVzc2FnZTogIiIiJyR7bmFtZX0nIGlzbid0IGFuIGluc3RhbmNlIGZpZWxkIG9mIHRoaXMgY2xhc3MuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVJbml0aWFsaXplck91dHNpZGVDb25zdHJ1Y3RvciA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiT25seSBjb25zdHJ1Y3RvcnMgY2FuIGhhdmUgaW5pdGlhbGl6ZXJzLCBhbmQgJyNuYW1lJyBpcyBub3QgYSBjb25zdHJ1Y3Rvci4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0luaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVJbml0aWFsaXplck91dHNpZGVDb25zdHJ1Y3RvciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3IiLCB0ZW1wbGF0ZUluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTklUSUFMSVpFUl9PVVRTSURFX0NPTlNUUlVDVE9SIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0luaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3IsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJPbmx5IGNvbnN0cnVjdG9ycyBjYW4gaGF2ZSBpbml0aWFsaXplcnMsIGFuZCAnJHtuYW1lfScgaXMgbm90IGEgY29uc3RydWN0b3IuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMik+IHRlbXBsYXRlSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgdHlwZSBvZiBwYXJhbWV0ZXIgJyNuYW1lJywgJyN0eXBlJyBpcyBub3QgYSBzdWJ0eXBlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkJ3MgdHlwZSwgJyN0eXBlMicuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBjaGFuZ2luZyB0aGUgdHlwZSBvZiBwYXJhbWV0ZXIgJyNuYW1lJyB0byBhIHN1YnR5cGUgb2YgJyN0eXBlMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2ggPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgIkluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaCIsCiAgICAgICAgdGVtcGxhdGVJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2gsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfUEFSQU1FVEVSX0RFQ0xBUkFUSU9OIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoKAogICAgU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSB0eXBlIG9mIHBhcmFtZXRlciAnJHtuYW1lfScsICcke3R5cGV9JyBpcyBub3QgYSBzdWJ0eXBlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkJ3MgdHlwZSwgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiVHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHBhcmFtZXRlciAnJHtuYW1lfScgdG8gYSBzdWJ0eXBlIG9mICcke3R5cGUyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2hGaWVsZCA9CiAgICBtZXNzYWdlSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoRmllbGQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoRmllbGQgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaEZpZWxkIiwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwKICAgICAgICBtZXNzYWdlOiByIiIiVGhlIGZpZWxkIHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHBhcmFtZXRlci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IHRlbXBsYXRlSW5wdXRGaWxlTm90Rm91bmQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIklucHV0IGZpbGUgbm90IGZvdW5kOiAjdXJpLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0lucHV0RmlsZU5vdEZvdW5kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IGNvZGVJbnB1dEZpbGVOb3RGb3VuZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPigKICAiSW5wdXRGaWxlTm90Rm91bmQiLAogIHRlbXBsYXRlSW5wdXRGaWxlTm90Rm91bmQsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW5wdXRGaWxlTm90Rm91bmQoVXJpIHVyaV8pIHsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUlucHV0RmlsZU5vdEZvdW5kLAogICAgICBtZXNzYWdlOiAiIiJJbnB1dCBmaWxlIG5vdCBmb3VuZDogJHt1cml9LiIiIiwgYXJndW1lbnRzOiB7J3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBzdHJpbmcpPiB0ZW1wbGF0ZUludGVnZXJMaXRlcmFsSXNPdXRPZlJhbmdlID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBpbnRlZ2VyIGxpdGVyYWwgI3N0cmluZyBjYW4ndCBiZSByZXByZXNlbnRlZCBpbiA2NCBiaXRzLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgdXNpbmcgdGhlIEJpZ0ludCBjbGFzcyBpZiB5b3UgbmVlZCBhbiBpbnRlZ2VyIGxhcmdlciB0aGFuIDksMjIzLDM3MiwwMzYsODU0LDc3NSw4MDcgb3IgbGVzcyB0aGFuIC05LDIyMywzNzIsMDM2LDg1NCw3NzUsODA4LiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZWdlckxpdGVyYWxJc091dE9mUmFuZ2UpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiBjb2RlSW50ZWdlckxpdGVyYWxJc091dE9mUmFuZ2UgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiSW50ZWdlckxpdGVyYWxJc091dE9mUmFuZ2UiLCB0ZW1wbGF0ZUludGVnZXJMaXRlcmFsSXNPdXRPZlJhbmdlLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlRFR0VSX0xJVEVSQUxfT1VUX09GX1JBTkdFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVnZXJMaXRlcmFsSXNPdXRPZlJhbmdlKFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW50ZWdlckxpdGVyYWxJc091dE9mUmFuZ2UsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgaW50ZWdlciBsaXRlcmFsICR7c3RyaW5nfSBjYW4ndCBiZSByZXByZXNlbnRlZCBpbiA2NCBiaXRzLiIiIiwKICAgICAgdGlwOgogICAgICAgICAgIiIiVHJ5IHVzaW5nIHRoZSBCaWdJbnQgY2xhc3MgaWYgeW91IG5lZWQgYW4gaW50ZWdlciBsYXJnZXIgdGhhbiA5LDIyMywzNzIsMDM2LDg1NCw3NzUsODA3IG9yIGxlc3MgdGhhbiAtOSwyMjMsMzcyLDAzNiw4NTQsNzc1LDgwOC4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVJbnRlcmZhY2VDaGVja0NvbnRleHQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkJvdGggbWVtYmVycyBhcmUgaW5oZXJpdGVkIGJ5IHRoZSBub24tYWJzdHJhY3QgY2xhc3MgJyNuYW1lJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVyZmFjZUNoZWNrQ29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlSW50ZXJmYWNlQ2hlY2tDb250ZXh0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJJbnRlcmZhY2VDaGVja0NvbnRleHQiLCB0ZW1wbGF0ZUludGVyZmFjZUNoZWNrQ29udGV4dCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZXJmYWNlQ2hlY2tDb250ZXh0KFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW50ZXJmYWNlQ2hlY2tDb250ZXh0LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQm90aCBtZW1iZXJzIGFyZSBpbmhlcml0ZWQgYnkgdGhlIG5vbi1hYnN0cmFjdCBjbGFzcyAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW50ZXJuYWxQcm9ibGVtQWxyZWFkeUluaXRpYWxpemVkID0KICAgIG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1BbHJlYWR5SW5pdGlhbGl6ZWQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtQWxyZWFkeUluaXRpYWxpemVkID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW50ZXJuYWxQcm9ibGVtQWxyZWFkeUluaXRpYWxpemVkIiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0sCiAgICBtZXNzYWdlOiByIiIiQXR0ZW1wdCB0byBzZXQgaW5pdGlhbGl6ZXIgb24gZmllbGQgd2l0aG91dCBpbml0aWFsaXplci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW50ZXJuYWxQcm9ibGVtQm9keU9uQWJzdHJhY3RNZXRob2QgPQogICAgbWVzc2FnZUludGVybmFsUHJvYmxlbUJvZHlPbkFic3RyYWN0TWV0aG9kOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludGVybmFsUHJvYmxlbUJvZHlPbkFic3RyYWN0TWV0aG9kID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJJbnRlcm5hbFByb2JsZW1Cb2R5T25BYnN0cmFjdE1ldGhvZCIsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSwKICAgICAgICBtZXNzYWdlOiByIiIiQXR0ZW1wdGluZyB0byBzZXQgYm9keSBvbiBhYnN0cmFjdCBtZXRob2QuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4KICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtQ29uc3RydWN0b3JOb3RGb3VuZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIk5vIGNvbnN0cnVjdG9yIG5hbWVkICcjbmFtZScgaW4gJyN1cmknLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbUNvbnN0cnVjdG9yTm90Rm91bmQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+CiAgICBjb2RlSW50ZXJuYWxQcm9ibGVtQ29uc3RydWN0b3JOb3RGb3VuZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4oCiAgICAgICAgIkludGVybmFsUHJvYmxlbUNvbnN0cnVjdG9yTm90Rm91bmQiLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtQ29uc3RydWN0b3JOb3RGb3VuZCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1Db25zdHJ1Y3Rvck5vdEZvdW5kKAogICAgU3RyaW5nIG5hbWUsIFVyaSB1cmlfKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW50ZXJuYWxQcm9ibGVtQ29uc3RydWN0b3JOb3RGb3VuZCwKICAgICAgbWVzc2FnZTogIiIiTm8gY29uc3RydWN0b3IgbmFtZWQgJyR7bmFtZX0nIGluICcke3VyaX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndXJpJzogdXJpX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Db250ZXh0U2V2ZXJpdHkgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiTm9uLWNvbnRleHQgbWVzc2FnZSBoYXMgY29udGV4dCBzZXZlcml0eTogI3N0cmluZyIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IGNvZGVJbnRlcm5hbFByb2JsZW1Db250ZXh0U2V2ZXJpdHkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiSW50ZXJuYWxQcm9ibGVtQ29udGV4dFNldmVyaXR5IiwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1Db250ZXh0U2V2ZXJpdHkoU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1Db250ZXh0U2V2ZXJpdHksCiAgICAgIG1lc3NhZ2U6ICIiIk5vbi1jb250ZXh0IG1lc3NhZ2UgaGFzIGNvbnRleHQgc2V2ZXJpdHk6ICR7c3RyaW5nfSIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgc3RyaW5nKT4KICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtRGVidWdBYm9ydCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ29tcGlsYXRpb24gYWJvcnRlZCBkdWUgdG8gZmF0YWwgJyNuYW1lJyBhdDoKI3N0cmluZyIiIiwgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1EZWJ1Z0Fib3J0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIHN0cmluZyk+CiAgICBjb2RlSW50ZXJuYWxQcm9ibGVtRGVidWdBYm9ydCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiSW50ZXJuYWxQcm9ibGVtRGVidWdBYm9ydCIsIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtRGVidWdBYm9ydCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1EZWJ1Z0Fib3J0KFN0cmluZyBuYW1lLCBTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1EZWJ1Z0Fib3J0LAogICAgICBtZXNzYWdlOiAiIiJDb21waWxhdGlvbiBhYm9ydGVkIGR1ZSB0byBmYXRhbCAnJHtuYW1lfScgYXQ6CiR7c3RyaW5nfSIiIiwgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUludGVybmFsUHJvYmxlbUV4dGVuZGluZ1VubW9kaWZpYWJsZVNjb3BlID0KICAgIG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1FeHRlbmRpbmdVbm1vZGlmaWFibGVTY29wZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1FeHRlbmRpbmdVbm1vZGlmaWFibGVTY29wZSA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiSW50ZXJuYWxQcm9ibGVtRXh0ZW5kaW5nVW5tb2RpZmlhYmxlU2NvcGUiLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0sCiAgICAgICAgbWVzc2FnZTogciIiIkNhbid0IGV4dGVuZCBhbiB1bm1vZGlmaWFibGUgc2NvcGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUludGVybmFsUHJvYmxlbUxhYmVsVXNhZ2VJblZhcmlhYmxlc0RlY2xhcmF0aW9uID0KICAgIG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1MYWJlbFVzYWdlSW5WYXJpYWJsZXNEZWNsYXJhdGlvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1MYWJlbFVzYWdlSW5WYXJpYWJsZXNEZWNsYXJhdGlvbiA9CiAgICBjb25zdCBNZXNzYWdlQ29kZSgiSW50ZXJuYWxQcm9ibGVtTGFiZWxVc2FnZUluVmFyaWFibGVzRGVjbGFyYXRpb24iLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0sCiAgICAgICAgbWVzc2FnZToKICAgICAgICAgICAgciIiIlVuZXhwZWN0ZWQgdXNhZ2Ugb2YgbGFiZWwgaW5zaWRlIGRlY2xhcmF0aW9uIG9mIHZhcmlhYmxlcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW50ZXJuYWxQcm9ibGVtTWlzc2luZ0NvbnRleHQgPQogICAgbWVzc2FnZUludGVybmFsUHJvYmxlbU1pc3NpbmdDb250ZXh0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludGVybmFsUHJvYmxlbU1pc3NpbmdDb250ZXh0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW50ZXJuYWxQcm9ibGVtTWlzc2luZ0NvbnRleHQiLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSwKICAgIG1lc3NhZ2U6IHIiIiJDb21waWxlciBjYW5ub3QgcnVuIHdpdGhvdXQgYSBjb21waWxlciBjb250ZXh0LiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiQXJlIGNhbGxzIHRvIHRoZSBjb21waWxlciB3cmFwcGVkIGluIENvbXBpbGVyQ29udGV4dC5ydW5JbkNvbnRleHQ/IiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Ob0luZmVycmVkVHlwZVN0b3JlZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVGhlcmUncyBubyBpbmZlcnJlZCB0eXBlIGZvciAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbU5vSW5mZXJyZWRUeXBlU3RvcmVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlSW50ZXJuYWxQcm9ibGVtTm9JbmZlcnJlZFR5cGVTdG9yZWQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkludGVybmFsUHJvYmxlbU5vSW5mZXJyZWRUeXBlU3RvcmVkIiwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vSW5mZXJyZWRUeXBlU3RvcmVkLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbU5vSW5mZXJyZWRUeXBlU3RvcmVkKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW50ZXJuYWxQcm9ibGVtTm9JbmZlcnJlZFR5cGVTdG9yZWQsCiAgICAgIG1lc3NhZ2U6ICIiIlRoZXJlJ3Mgbm8gaW5mZXJyZWQgdHlwZSBmb3IgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vdEZvdW5kID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDb3VsZG4ndCBmaW5kICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtTm90Rm91bmQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZUludGVybmFsUHJvYmxlbU5vdEZvdW5kID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZCIsIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmQsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtTm90Rm91bmQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZCwKICAgICAgbWVzc2FnZTogIiIiQ291bGRuJ3QgZmluZCAnJHtuYW1lfScuIiIiLCBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4KICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDb3VsZG4ndCBmaW5kICcjbmFtZScgaW4gJyNuYW1lMicuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZEluIiwgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZEluLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbU5vdEZvdW5kSW4oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZEluLAogICAgICBtZXNzYWdlOiAiIiJDb3VsZG4ndCBmaW5kICcke25hbWV9JyBpbiAnJHtuYW1lMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnbmFtZTInOiBuYW1lMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnRlcm5hbFByb2JsZW1QcmV2aW91c1Rva2VuTm90Rm91bmQgPQogICAgbWVzc2FnZUludGVybmFsUHJvYmxlbVByZXZpb3VzVG9rZW5Ob3RGb3VuZDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1QcmV2aW91c1Rva2VuTm90Rm91bmQgPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIkludGVybmFsUHJvYmxlbVByZXZpb3VzVG9rZW5Ob3RGb3VuZCIsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSwKICAgICAgICBtZXNzYWdlOiByIiIiQ291bGRuJ3QgZmluZCBwcmV2aW91cyB0b2tlbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVByaXZhdGVDb25zdHJ1Y3RvckFjY2VzcyA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ2FuJ3QgYWNjZXNzIHByaXZhdGUgY29uc3RydWN0b3IgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1Qcml2YXRlQ29uc3RydWN0b3JBY2Nlc3MpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1Qcml2YXRlQ29uc3RydWN0b3JBY2Nlc3MgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkludGVybmFsUHJvYmxlbVByaXZhdGVDb25zdHJ1Y3RvckFjY2VzcyIsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Qcml2YXRlQ29uc3RydWN0b3JBY2Nlc3MsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtUHJpdmF0ZUNvbnN0cnVjdG9yQWNjZXNzKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW50ZXJuYWxQcm9ibGVtUHJpdmF0ZUNvbnN0cnVjdG9yQWNjZXNzLAogICAgICBtZXNzYWdlOiAiIiJDYW4ndCBhY2Nlc3MgcHJpdmF0ZSBjb25zdHJ1Y3RvciAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW50ZXJuYWxQcm9ibGVtUHJvdmlkZWRCb3RoQ29tcGlsZVNka0FuZFNka1N1bW1hcnkgPQogICAgbWVzc2FnZUludGVybmFsUHJvYmxlbVByb3ZpZGVkQm90aENvbXBpbGVTZGtBbmRTZGtTdW1tYXJ5OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludGVybmFsUHJvYmxlbVByb3ZpZGVkQm90aENvbXBpbGVTZGtBbmRTZGtTdW1tYXJ5ID0KICAgIGNvbnN0IE1lc3NhZ2VDb2RlKCJJbnRlcm5hbFByb2JsZW1Qcm92aWRlZEJvdGhDb21waWxlU2RrQW5kU2RrU3VtbWFyeSIsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSwKICAgICAgICBtZXNzYWdlOgogICAgICAgICAgICByIiIiVGhlIGNvbXBpbGVTZGsgYW5kIHNka1N1bW1hcnkgb3B0aW9ucyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdGFja05vdEVtcHR5ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiIjbmFtZS5zdGFjayBpc24ndCBlbXB0eToKICAjc3RyaW5nIiIiLCB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgc3RyaW5nKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1TdGFja05vdEVtcHR5ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJJbnRlcm5hbFByb2JsZW1TdGFja05vdEVtcHR5IiwgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdGFja05vdEVtcHR5LAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHkoU3RyaW5nIG5hbWUsIFN0cmluZyBzdHJpbmcpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHksCiAgICAgIG1lc3NhZ2U6ICIiIiR7bmFtZX0uc3RhY2sgaXNuJ3QgZW1wdHk6CiAgJHtzdHJpbmd9IiIiLCBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICdzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdG9yaW5nTXVsdGlwbGVJbmZlcnJlZFR5cGVzID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiVGhlcmUncyBhbHJlYWR5IGFuIGluZmVycmVkIHR5cGUsICcjdHlwZScsIGZvciAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOgogICAgICAgICAgICBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVN0b3JpbmdNdWx0aXBsZUluZmVycmVkVHlwZXMpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBTdHJpbmcgbmFtZSk+CiAgICBjb2RlSW50ZXJuYWxQcm9ibGVtU3RvcmluZ011bHRpcGxlSW5mZXJyZWRUeXBlcyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIFN0cmluZyBuYW1lKT4oCiAgICAgICAgIkludGVybmFsUHJvYmxlbVN0b3JpbmdNdWx0aXBsZUluZmVycmVkVHlwZXMiLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtU3RvcmluZ011bHRpcGxlSW5mZXJyZWRUeXBlcywKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1TdG9yaW5nTXVsdGlwbGVJbmZlcnJlZFR5cGVzKAogICAgRGFydFR5cGUgX3R5cGUsIFN0cmluZyBuYW1lKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbVN0b3JpbmdNdWx0aXBsZUluZmVycmVkVHlwZXMsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGVyZSdzIGFscmVhZHkgYW4gaW5mZXJyZWQgdHlwZSwgJyR7dHlwZX0nLCBmb3IgJyR7bmFtZX0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmV4cGVjdGVkID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJFeHBlY3RlZCAnI3N0cmluZycsIGJ1dCBnb3QgJyNzdHJpbmcyJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1VbmV4cGVjdGVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+CiAgICBjb2RlSW50ZXJuYWxQcm9ibGVtVW5leHBlY3RlZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPigKICAgICAgICAiSW50ZXJuYWxQcm9ibGVtVW5leHBlY3RlZCIsIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5leHBlY3RlZCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1VbmV4cGVjdGVkKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKSB7CiAgaWYgKHN0cmluZy5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICBpZiAoc3RyaW5nMi5pc0VtcHR5KSB0aHJvdyAnTm8gc3RyaW5nIHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVybmFsUHJvYmxlbVVuZXhwZWN0ZWQsCiAgICAgIG1lc3NhZ2U6ICIiIkV4cGVjdGVkICcke3N0cmluZ30nLCBidXQgZ290ICcke3N0cmluZzJ9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICdzdHJpbmcyJzogc3RyaW5nMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4KICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5oYW5kbGVkID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJVbmhhbmRsZWQgI3N0cmluZyBpbiAjc3RyaW5nMi4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1VbmhhbmRsZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4KICAgIGNvZGVJbnRlcm5hbFByb2JsZW1VbmhhbmRsZWQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4oCiAgICAgICAgIkludGVybmFsUHJvYmxlbVVuaGFuZGxlZCIsIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5oYW5kbGVkLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVuaGFuZGxlZChTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMikgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgaWYgKHN0cmluZzIuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1VbmhhbmRsZWQsCiAgICAgIG1lc3NhZ2U6ICIiIlVuaGFuZGxlZCAke3N0cmluZ30gaW4gJHtzdHJpbmcyfS4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICdzdHJpbmcyJzogc3RyaW5nMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmltcGxlbWVudGVkID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlVuaW1wbGVtZW50ZWQgI3N0cmluZy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1VbmltcGxlbWVudGVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gY29kZUludGVybmFsUHJvYmxlbVVuaW1wbGVtZW50ZWQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiSW50ZXJuYWxQcm9ibGVtVW5pbXBsZW1lbnRlZCIsIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5pbXBsZW1lbnRlZCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1VbmltcGxlbWVudGVkKFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW50ZXJuYWxQcm9ibGVtVW5pbXBsZW1lbnRlZCwKICAgICAgbWVzc2FnZTogIiIiVW5pbXBsZW1lbnRlZCAke3N0cmluZ30uIiIiLCBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbnN1cHBvcnRlZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVuc3VwcG9ydGVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVJbnRlcm5hbFByb2JsZW1VbnN1cHBvcnRlZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiSW50ZXJuYWxQcm9ibGVtVW5zdXBwb3J0ZWQiLCB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuc3VwcG9ydGVkLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVuc3VwcG9ydGVkKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW50ZXJuYWxQcm9ibGVtVW5zdXBwb3J0ZWQsCiAgICAgIG1lc3NhZ2U6ICIiIlVuc3VwcG9ydGVkIG9wZXJhdGlvbjogJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VcmlNaXNzaW5nU2NoZW1lID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUaGUgVVJJICcjdXJpJyBoYXMgbm8gc2NoZW1lLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVVyaU1pc3NpbmdTY2hlbWUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gY29kZUludGVybmFsUHJvYmxlbVVyaU1pc3NpbmdTY2hlbWUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oIkludGVybmFsUHJvYmxlbVVyaU1pc3NpbmdTY2hlbWUiLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVXJpTWlzc2luZ1NjaGVtZSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1VcmlNaXNzaW5nU2NoZW1lKFVyaSB1cmlfKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1VcmlNaXNzaW5nU2NoZW1lLAogICAgICBtZXNzYWdlOiAiIiJUaGUgVVJJICcke3VyaX0nIGhhcyBubyBzY2hlbWUuIiIiLCBhcmd1bWVudHM6IHsndXJpJzogdXJpX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPgogICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1WZXJpZmljYXRpb25FcnJvciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJWZXJpZmljYXRpb24gb2YgdGhlIGdlbmVyYXRlZCBwcm9ncmFtIGZhaWxlZDoKI3N0cmluZyIiIiwgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1WZXJpZmljYXRpb25FcnJvcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+CiAgICBjb2RlSW50ZXJuYWxQcm9ibGVtVmVyaWZpY2F0aW9uRXJyb3IgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICAiSW50ZXJuYWxQcm9ibGVtVmVyaWZpY2F0aW9uRXJyb3IiLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVmVyaWZpY2F0aW9uRXJyb3IsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmludGVybmFsUHJvYmxlbSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtVmVyaWZpY2F0aW9uRXJyb3IoU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnRlcm5hbFByb2JsZW1WZXJpZmljYXRpb25FcnJvciwKICAgICAgbWVzc2FnZTogIiIiVmVyaWZpY2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgcHJvZ3JhbSBmYWlsZWQ6CiR7c3RyaW5nfSIiIiwgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnRlcnBvbGF0aW9uSW5VcmkgPSBtZXNzYWdlSW50ZXJwb2xhdGlvbkluVXJpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludGVycG9sYXRpb25JblVyaSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkludGVycG9sYXRpb25JblVyaSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9MSVRFUkFMX0lOX0NPTkZJR1VSQVRJT04iXSwKICAgIG1lc3NhZ2U6IHIiIiJDYW4ndCB1c2Ugc3RyaW5nIGludGVycG9sYXRpb24gaW4gYSBVUkkuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZTIpPiB0ZW1wbGF0ZUludGVyc2VjdGlvblR5cGVBc1R5cGVBcmd1bWVudCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQ2FuJ3QgaW5mZXIgYSB0eXBlIGZvciAnI25hbWUnLCBpdCBjYW4gYmUgZWl0aGVyICcjdHlwZScgb3IgJyN0eXBlMicuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBhZGRpbmcgYSB0eXBlIGFyZ3VtZW50IHNlbGVjdGluZyBvbmUgb2YgdGhlIG9wdGlvbnMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnRlcnNlY3Rpb25UeXBlQXNUeXBlQXJndW1lbnQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbnRlcnNlY3Rpb25UeXBlQXNUeXBlQXJndW1lbnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgIkludGVyc2VjdGlvblR5cGVBc1R5cGVBcmd1bWVudCIsCiAgdGVtcGxhdGVJbnRlcnNlY3Rpb25UeXBlQXNUeXBlQXJndW1lbnQsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW50ZXJzZWN0aW9uVHlwZUFzVHlwZUFyZ3VtZW50KAogICAgU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludGVyc2VjdGlvblR5cGVBc1R5cGVBcmd1bWVudCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNhbid0IGluZmVyIGEgdHlwZSBmb3IgJyR7bmFtZX0nLCBpdCBjYW4gYmUgZWl0aGVyICcke3R5cGV9JyBvciAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJUcnkgYWRkaW5nIGEgdHlwZSBhcmd1bWVudCBzZWxlY3Rpbmcgb25lIG9mIHRoZSBvcHRpb25zLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMik+IHRlbXBsYXRlSW52YWxpZEFzc2lnbm1lbnQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQSB2YWx1ZSBvZiB0eXBlICcjdHlwZScgY2FuJ3QgYmUgYXNzaWduZWQgdG8gYSB2YXJpYWJsZSBvZiB0eXBlICcjdHlwZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgY2hhbmdpbmcgdGhlIHR5cGUgb2YgdGhlIGxlZnQgaGFuZCBzaWRlLCBvciBjYXN0aW5nIHRoZSByaWdodCBoYW5kIHNpZGUgdG8gJyN0eXBlMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkQXNzaWdubWVudCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlSW52YWxpZEFzc2lnbm1lbnQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiSW52YWxpZEFzc2lnbm1lbnQiLCB0ZW1wbGF0ZUludmFsaWRBc3NpZ25tZW50LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX0FTU0lHTk1FTlQiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW52YWxpZEFzc2lnbm1lbnQoRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkQXNzaWdubWVudCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkEgdmFsdWUgb2YgdHlwZSAnJHt0eXBlfScgY2FuJ3QgYmUgYXNzaWduZWQgdG8gYSB2YXJpYWJsZSBvZiB0eXBlICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIlRyeSBjaGFuZ2luZyB0aGUgdHlwZSBvZiB0aGUgbGVmdCBoYW5kIHNpZGUsIG9yIGNhc3RpbmcgdGhlIHJpZ2h0IGhhbmQgc2lkZSB0byAnJHt0eXBlMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUludmFsaWRBd2FpdEZvciA9IG1lc3NhZ2VJbnZhbGlkQXdhaXRGb3I7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW52YWxpZEF3YWl0Rm9yID0gY29uc3QgTWVzc2FnZUNvZGUoIkludmFsaWRBd2FpdEZvciIsCiAgICBpbmRleDogOSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIlRoZSBrZXl3b3JkICdhd2FpdCcgaXNuJ3QgYWxsb3dlZCBmb3IgYSBub3JtYWwgJ2Zvcicgc3RhdGVtZW50LiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUga2V5d29yZCwgb3IgdXNlIGEgZm9yLWVhY2ggc3RhdGVtZW50LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVJbnZhbGlkQnJlYWtUYXJnZXQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNhbid0IGJyZWFrIHRvICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW52YWxpZEJyZWFrVGFyZ2V0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVJbnZhbGlkQnJlYWtUYXJnZXQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgIkludmFsaWRCcmVha1RhcmdldCIsCiAgdGVtcGxhdGVJbnZhbGlkQnJlYWtUYXJnZXQsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW52YWxpZEJyZWFrVGFyZ2V0KFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW52YWxpZEJyZWFrVGFyZ2V0LAogICAgICBtZXNzYWdlOiAiIiJDYW4ndCBicmVhayB0byAnJHtuYW1lfScuIiIiLCBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMik+IHRlbXBsYXRlSW52YWxpZENhc3RGdW5jdGlvbkV4cHIgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24gdHlwZSAnI3R5cGUnIGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyN0eXBlMicuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24gZXhwcmVzc2lvbiBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW52YWxpZENhc3RGdW5jdGlvbkV4cHIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPgogICAgY29kZUludmFsaWRDYXN0RnVuY3Rpb25FeHByID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgIkludmFsaWRDYXN0RnVuY3Rpb25FeHByIiwgdGVtcGxhdGVJbnZhbGlkQ2FzdEZ1bmN0aW9uRXhwciwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9DQVNUX0ZVTkNUSU9OX0VYUFIiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW52YWxpZENhc3RGdW5jdGlvbkV4cHIoRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkQ2FzdEZ1bmN0aW9uRXhwciwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBmdW5jdGlvbiBleHByZXNzaW9uIHR5cGUgJyR7dHlwZX0nIGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiBleHByZXNzaW9uIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMik+IHRlbXBsYXRlSW52YWxpZENhc3RMaXRlcmFsTGlzdCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgbGlzdCBsaXRlcmFsIHR5cGUgJyN0eXBlJyBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIGxpc3QgbGl0ZXJhbCBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW52YWxpZENhc3RMaXRlcmFsTGlzdCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlSW52YWxpZENhc3RMaXRlcmFsTGlzdCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJJbnZhbGlkQ2FzdExpdGVyYWxMaXN0IiwgdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxMaXN0LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX0NBU1RfTElURVJBTF9MSVNUIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0TGl0ZXJhbExpc3QoRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkQ2FzdExpdGVyYWxMaXN0LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGxpc3QgbGl0ZXJhbCB0eXBlICcke3R5cGV9JyBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgbGlzdCBsaXRlcmFsIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMik+IHRlbXBsYXRlSW52YWxpZENhc3RMaXRlcmFsTWFwID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBtYXAgbGl0ZXJhbCB0eXBlICcjdHlwZScgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBtYXAgbGl0ZXJhbCBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW52YWxpZENhc3RMaXRlcmFsTWFwKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbnZhbGlkQ2FzdExpdGVyYWxNYXAgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiSW52YWxpZENhc3RMaXRlcmFsTWFwIiwgdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxNYXAsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQ0FTVF9MSVRFUkFMX01BUCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExpdGVyYWxNYXAoRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkQ2FzdExpdGVyYWxNYXAsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgbWFwIGxpdGVyYWwgdHlwZSAnJHt0eXBlfScgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIG1hcCBsaXRlcmFsIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMik+IHRlbXBsYXRlSW52YWxpZENhc3RMaXRlcmFsU2V0ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBzZXQgbGl0ZXJhbCB0eXBlICcjdHlwZScgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBzZXQgbGl0ZXJhbCBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW52YWxpZENhc3RMaXRlcmFsU2V0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbnZhbGlkQ2FzdExpdGVyYWxTZXQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiSW52YWxpZENhc3RMaXRlcmFsU2V0IiwgdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxTZXQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQ0FTVF9MSVRFUkFMX1NFVCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExpdGVyYWxTZXQoRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkQ2FzdExpdGVyYWxTZXQsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgc2V0IGxpdGVyYWwgdHlwZSAnJHt0eXBlfScgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIHNldCBsaXRlcmFsIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMik+IHRlbXBsYXRlSW52YWxpZENhc3RMb2NhbEZ1bmN0aW9uID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBsb2NhbCBmdW5jdGlvbiBoYXMgdHlwZSAnI3R5cGUnIHRoYXQgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW52YWxpZENhc3RMb2NhbEZ1bmN0aW9uKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVJbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiSW52YWxpZENhc3RMb2NhbEZ1bmN0aW9uIiwgdGVtcGxhdGVJbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQ0FTVF9GVU5DVElPTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb24oCiAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludmFsaWRDYXN0TG9jYWxGdW5jdGlvbiwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBsb2NhbCBmdW5jdGlvbiBoYXMgdHlwZSAnJHt0eXBlfScgdGhhdCBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24gb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUyKT4gdGVtcGxhdGVJbnZhbGlkQ2FzdE5ld0V4cHIgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIGNvbnN0cnVjdG9yIHJldHVybnMgdHlwZSAnI3R5cGUnIHRoYXQgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBvYmplY3QgYmVpbmcgY29uc3RydWN0ZWQgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0TmV3RXhwcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlSW52YWxpZENhc3ROZXdFeHByID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgIkludmFsaWRDYXN0TmV3RXhwciIsIHRlbXBsYXRlSW52YWxpZENhc3ROZXdFeHByLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX0NBU1RfTkVXX0VYUFIiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW52YWxpZENhc3ROZXdFeHByKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW52YWxpZENhc3ROZXdFeHByLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGNvbnN0cnVjdG9yIHJldHVybnMgdHlwZSAnJHt0eXBlfScgdGhhdCBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IGJlaW5nIGNvbnN0cnVjdGVkIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMik+IHRlbXBsYXRlSW52YWxpZENhc3RTdGF0aWNNZXRob2QgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIHN0YXRpYyBtZXRob2QgaGFzIHR5cGUgJyN0eXBlJyB0aGF0IGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyN0eXBlMicuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgbWV0aG9kIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdFN0YXRpY01ldGhvZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlSW52YWxpZENhc3RTdGF0aWNNZXRob2QgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiSW52YWxpZENhc3RTdGF0aWNNZXRob2QiLCB0ZW1wbGF0ZUludmFsaWRDYXN0U3RhdGljTWV0aG9kLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX0NBU1RfTUVUSE9EIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0U3RhdGljTWV0aG9kKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIFN0cmluZyB0eXBlMiA9IHR5cGUyUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW52YWxpZENhc3RTdGF0aWNNZXRob2QsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgc3RhdGljIG1ldGhvZCBoYXMgdHlwZSAnJHt0eXBlfScgdGhhdCBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6ICIiIkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgbWV0aG9kIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMik+IHRlbXBsYXRlSW52YWxpZENhc3RUb3BMZXZlbEZ1bmN0aW9uID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSB0b3AgbGV2ZWwgZnVuY3Rpb24gaGFzIHR5cGUgJyN0eXBlJyB0aGF0IGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyN0eXBlMicuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24gb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0VG9wTGV2ZWxGdW5jdGlvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlSW52YWxpZENhc3RUb3BMZXZlbEZ1bmN0aW9uID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgIkludmFsaWRDYXN0VG9wTGV2ZWxGdW5jdGlvbiIsIHRlbXBsYXRlSW52YWxpZENhc3RUb3BMZXZlbEZ1bmN0aW9uLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX0NBU1RfRlVOQ1RJT04iXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW52YWxpZENhc3RUb3BMZXZlbEZ1bmN0aW9uKAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVJbnZhbGlkQ2FzdFRvcExldmVsRnVuY3Rpb24sCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgdG9wIGxldmVsIGZ1bmN0aW9uIGhhcyB0eXBlICcke3R5cGV9JyB0aGF0IGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUludmFsaWRDYXRjaEFyZ3VtZW50cyA9IG1lc3NhZ2VJbnZhbGlkQ2F0Y2hBcmd1bWVudHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW52YWxpZENhdGNoQXJndW1lbnRzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW52YWxpZENhdGNoQXJndW1lbnRzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX0NBVENIX0FSR1VNRU5UUyJdLAogICAgbWVzc2FnZTogciIiIkludmFsaWQgY2F0Y2ggYXJndW1lbnRzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnZhbGlkQ29kZVBvaW50ID0gbWVzc2FnZUludmFsaWRDb2RlUG9pbnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW52YWxpZENvZGVQb2ludCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkludmFsaWRDb2RlUG9pbnQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfQ09ERV9QT0lOVCJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiVGhlIGVzY2FwZSBzZXF1ZW5jZSBzdGFydGluZyB3aXRoICdcdScgaXNuJ3QgYSB2YWxpZCBjb2RlIHBvaW50LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVJbnZhbGlkQ29udGludWVUYXJnZXQgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNhbid0IGNvbnRpbnVlIGF0ICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzSW52YWxpZENvbnRpbnVlVGFyZ2V0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVJbnZhbGlkQ29udGludWVUYXJnZXQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgIkludmFsaWRDb250aW51ZVRhcmdldCIsCiAgdGVtcGxhdGVJbnZhbGlkQ29udGludWVUYXJnZXQsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW52YWxpZENvbnRpbnVlVGFyZ2V0KFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW52YWxpZENvbnRpbnVlVGFyZ2V0LAogICAgICBtZXNzYWdlOiAiIiJDYW4ndCBjb250aW51ZSBhdCAnJHtuYW1lfScuIiIiLCBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW52YWxpZEhleEVzY2FwZSA9IG1lc3NhZ2VJbnZhbGlkSGV4RXNjYXBlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludmFsaWRIZXhFc2NhcGUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbnZhbGlkSGV4RXNjYXBlIiwKICAgIGluZGV4OiA0MCwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkFuIGVzY2FwZSBzZXF1ZW5jZSBzdGFydGluZyB3aXRoICdceCcgbXVzdCBiZSBmb2xsb3dlZCBieSAyIGhleGFkZWNpbWFsIGRpZ2l0cy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW52YWxpZEluaXRpYWxpemVyID0gbWVzc2FnZUludmFsaWRJbml0aWFsaXplcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnZhbGlkSW5pdGlhbGl6ZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJJbnZhbGlkSW5pdGlhbGl6ZXIiLAogICAgbWVzc2FnZTogciIiIk5vdCBhIHZhbGlkIGluaXRpYWxpemVyLiIiIiwKICAgIHRpcDogciIiIlRvIGluaXRpYWxpemUgYSBmaWVsZCwgdXNlIHRoZSBzeW50YXggJ25hbWUgPSB2YWx1ZScuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUludmFsaWRJbmxpbmVGdW5jdGlvblR5cGUgPQogICAgbWVzc2FnZUludmFsaWRJbmxpbmVGdW5jdGlvblR5cGU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW52YWxpZElubGluZUZ1bmN0aW9uVHlwZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkludmFsaWRJbmxpbmVGdW5jdGlvblR5cGUiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfSU5MSU5FX0ZVTkNUSU9OX1RZUEUiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIklubGluZSBmdW5jdGlvbiB0eXBlcyBjYW5ub3QgYmUgdXNlZCBmb3IgcGFyYW1ldGVycyBpbiBhIGdlbmVyaWMgZnVuY3Rpb24gdHlwZS4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSBjaGFuZ2luZyB0aGUgaW5saW5lIGZ1bmN0aW9uIHR5cGUgKGFzIGluICdpbnQgZigpJykgdG8gYSBwcmVmaXhlZCBmdW5jdGlvbiB0eXBlIHVzaW5nIHRoZSBgRnVuY3Rpb25gIGtleXdvcmQgKGFzIGluICdpbnQgRnVuY3Rpb24oKSBmJykuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiB0ZW1wbGF0ZUludmFsaWRPcGVyYXRvciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiVGhlIHN0cmluZyAnI2xleGVtZScgaXNuJ3QgYSB1c2VyLWRlZmluYWJsZSBvcGVyYXRvci4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNJbnZhbGlkT3BlcmF0b3IpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gY29kZUludmFsaWRPcGVyYXRvciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICAiSW52YWxpZE9wZXJhdG9yIiwgdGVtcGxhdGVJbnZhbGlkT3BlcmF0b3IsCiAgICAgICAgaW5kZXg6IDM5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZhbGlkT3BlcmF0b3IoVG9rZW4gdG9rZW4pIHsKICBTdHJpbmcgbGV4ZW1lID0gdG9rZW4ubGV4ZW1lOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW52YWxpZE9wZXJhdG9yLAogICAgICBtZXNzYWdlOiAiIiJUaGUgc3RyaW5nICcke2xleGVtZX0nIGlzbid0IGEgdXNlci1kZWZpbmFibGUgb3BlcmF0b3IuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBTdHJpbmcgc3RyaW5nKT4KICAgIHRlbXBsYXRlSW52YWxpZFBhY2thZ2VVcmkgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgU3RyaW5nIHN0cmluZyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkludmFsaWQgcGFja2FnZSBVUkkgJyN1cmknOgogICNzdHJpbmcuIiIiLCB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludmFsaWRQYWNrYWdlVXJpKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgU3RyaW5nIHN0cmluZyk+IGNvZGVJbnZhbGlkUGFja2FnZVVyaSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFN0cmluZyBzdHJpbmcpPigKICAiSW52YWxpZFBhY2thZ2VVcmkiLAogIHRlbXBsYXRlSW52YWxpZFBhY2thZ2VVcmksCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzSW52YWxpZFBhY2thZ2VVcmkoVXJpIHVyaV8sIFN0cmluZyBzdHJpbmcpIHsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlSW52YWxpZFBhY2thZ2VVcmksCiAgICAgIG1lc3NhZ2U6ICIiIkludmFsaWQgcGFja2FnZSBVUkkgJyR7dXJpfSc6CiAgJHtzdHJpbmd9LiIiIiwgYXJndW1lbnRzOiB7J3VyaSc6IHVyaV8sICdzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW52YWxpZFN1cGVySW5Jbml0aWFsaXplciA9CiAgICBtZXNzYWdlSW52YWxpZFN1cGVySW5Jbml0aWFsaXplcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnZhbGlkU3VwZXJJbkluaXRpYWxpemVyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW52YWxpZFN1cGVySW5Jbml0aWFsaXplciIsCiAgICBpbmRleDogNDcsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJDYW4gb25seSB1c2UgJ3N1cGVyJyBpbiBhbiBpbml0aWFsaXplciBmb3IgY2FsbGluZyB0aGUgc3VwZXJjbGFzcyBjb25zdHJ1Y3RvciAoZS5nLiAnc3VwZXIoKScgb3IgJ3N1cGVyLm5hbWVkQ29uc3RydWN0b3IoKScpIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUludmFsaWRTeW5jTW9kaWZpZXIgPSBtZXNzYWdlSW52YWxpZFN5bmNNb2RpZmllcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnZhbGlkU3luY01vZGlmaWVyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW52YWxpZFN5bmNNb2RpZmllciIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTUlTU0lOR19TVEFSX0FGVEVSX1NZTkMiXSwKICAgIG1lc3NhZ2U6IHIiIiJJbnZhbGlkIG1vZGlmaWVyICdzeW5jJy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVwbGFjaW5nICdzeW5jJyB3aXRoICdzeW5jKicuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUludmFsaWRUaGlzSW5Jbml0aWFsaXplciA9IG1lc3NhZ2VJbnZhbGlkVGhpc0luSW5pdGlhbGl6ZXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW52YWxpZFRoaXNJbkluaXRpYWxpemVyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW52YWxpZFRoaXNJbkluaXRpYWxpemVyIiwKICAgIGluZGV4OiA2NSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkNhbiBvbmx5IHVzZSAndGhpcycgaW4gYW4gaW5pdGlhbGl6ZXIgZm9yIGZpZWxkIGluaXRpYWxpemF0aW9uIChlLmcuICd0aGlzLnggPSBzb21ldGhpbmcnKSBhbmQgY29uc3RydWN0b3IgcmVkaXJlY3Rpb24gKGUuZy4gJ3RoaXMoKScgb3IgJ3RoaXMubmFtZWRDb25zdHJ1Y3RvcigpKSIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVJbnZhbGlkVW5pY29kZUVzY2FwZSA9IG1lc3NhZ2VJbnZhbGlkVW5pY29kZUVzY2FwZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VJbnZhbGlkVW5pY29kZUVzY2FwZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkludmFsaWRVbmljb2RlRXNjYXBlIiwKICAgIGluZGV4OiAzOCwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkFuIGVzY2FwZSBzZXF1ZW5jZSBzdGFydGluZyB3aXRoICdcdScgbXVzdCBiZSBmb2xsb3dlZCBieSA0IGhleGFkZWNpbWFsIGRpZ2l0cyBvciBmcm9tIDEgdG8gNiBkaWdpdHMgYmV0d2VlbiAneycgYW5kICd9Jy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlSW52YWxpZFVzZU9mTnVsbEF3YXJlQWNjZXNzID0KICAgIG1lc3NhZ2VJbnZhbGlkVXNlT2ZOdWxsQXdhcmVBY2Nlc3M7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlSW52YWxpZFVzZU9mTnVsbEF3YXJlQWNjZXNzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiSW52YWxpZFVzZU9mTnVsbEF3YXJlQWNjZXNzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX1VTRV9PRl9OVUxMX0FXQVJFX0FDQ0VTUyJdLAogICAgbWVzc2FnZTogciIiIkNhbm5vdCB1c2UgJz8uJyBoZXJlLiIiIiwKICAgIHRpcDogciIiIlRyeSB1c2luZyAnLicuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUludmFsaWRWb2lkID0gbWVzc2FnZUludmFsaWRWb2lkOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZUludmFsaWRWb2lkID0gY29uc3QgTWVzc2FnZUNvZGUoIkludmFsaWRWb2lkIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFBFQ1RFRF9UWVBFX05BTUUiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIlR5cGUgJ3ZvaWQnIGNhbid0IGJlIHVzZWQgaGVyZSBiZWNhdXNlIGl0IGlzbid0IGEgcmV0dXJuIHR5cGUuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgcmVtb3ZpbmcgJ3ZvaWQnIGtleXdvcmQgb3IgcmVwbGFjZSBpdCB3aXRoICd2YXInLCAnZmluYWwnLCBvciBhIHR5cGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZUludm9rZU5vbkZ1bmN0aW9uID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiInI25hbWUnIGlzbid0IGEgZnVuY3Rpb24gb3IgbWV0aG9kIGFuZCBjYW4ndCBiZSBpbnZva2VkLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0ludm9rZU5vbkZ1bmN0aW9uKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVJbnZva2VOb25GdW5jdGlvbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiSW52b2tlTm9uRnVuY3Rpb24iLCB0ZW1wbGF0ZUludm9rZU5vbkZ1bmN0aW9uLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZPQ0FUSU9OX09GX05PTl9GVU5DVElPTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNJbnZva2VOb25GdW5jdGlvbihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUludm9rZU5vbkZ1bmN0aW9uLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXNuJ3QgYSBmdW5jdGlvbiBvciBtZXRob2QgYW5kIGNhbid0IGJlIGludm9rZWQuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gdGVtcGxhdGVMYWJlbE5vdEZvdW5kID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ2FuJ3QgZmluZCBsYWJlbCAnI25hbWUnLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgZGVmaW5pbmcgdGhlIGxhYmVsLCBvciBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIG1hdGNoIGFuIGV4aXN0aW5nIGxhYmVsLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTGFiZWxOb3RGb3VuZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlTGFiZWxOb3RGb3VuZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiTGFiZWxOb3RGb3VuZCIsIHRlbXBsYXRlTGFiZWxOb3RGb3VuZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTEFCRUxfVU5ERUZJTkVEIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0xhYmVsTm90Rm91bmQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVMYWJlbE5vdEZvdW5kLAogICAgICBtZXNzYWdlOiAiIiJDYW4ndCBmaW5kIGxhYmVsICcke25hbWV9Jy4iIiIsCiAgICAgIHRpcDoKICAgICAgICAgICIiIlRyeSBkZWZpbmluZyB0aGUgbGFiZWwsIG9yIGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gbWF0Y2ggYW4gZXhpc3RpbmcgbGFiZWwuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTGlicmFyeURpcmVjdGl2ZU5vdEZpcnN0ID0gbWVzc2FnZUxpYnJhcnlEaXJlY3RpdmVOb3RGaXJzdDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VMaWJyYXJ5RGlyZWN0aXZlTm90Rmlyc3QgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJMaWJyYXJ5RGlyZWN0aXZlTm90Rmlyc3QiLAogICAgaW5kZXg6IDM3LAogICAgbWVzc2FnZToKICAgICAgICByIiIiVGhlIGxpYnJhcnkgZGlyZWN0aXZlIG11c3QgYXBwZWFyIGJlZm9yZSBhbGwgb3RoZXIgZGlyZWN0aXZlcy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgbW92aW5nIHRoZSBsaWJyYXJ5IGRpcmVjdGl2ZSBiZWZvcmUgYW55IG90aGVyIGRpcmVjdGl2ZXMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZUxpc3RMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHMgPQogICAgbWVzc2FnZUxpc3RMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTGlzdExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50cyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIkxpc3RMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYUEVDVEVEX09ORV9MSVNUX1RZUEVfQVJHVU1FTlRTIl0sCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nLAogICAgbWVzc2FnZTogciIiIkxpc3QgbGl0ZXJhbCByZXF1aXJlcyBleGFjdGx5IG9uZSB0eXBlIGFyZ3VtZW50LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiB0ZW1wbGF0ZUxvYWRMaWJyYXJ5SGlkZXNNZW1iZXIgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBsaWJyYXJ5ICcjdXJpJyBkZWZpbmVzIGEgdG9wLWxldmVsIG1lbWJlciBuYW1lZCAnbG9hZExpYnJhcnknLiBUaGlzIG1lbWJlciBpcyBoaWRkZW4gYnkgdGhlIHNwZWNpYWwgbWVtYmVyICdsb2FkTGlicmFyeScgdGhhdCB0aGUgbGFuZ3VhZ2UgYWRkcyB0byBzdXBwb3J0IGRlZmVycmVkIGxvYWRpbmcuIiIiLAogICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgdG8gcmVuYW1lIG9yIGhpZGUgdGhlIG1lbWJlci4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c0xvYWRMaWJyYXJ5SGlkZXNNZW1iZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gY29kZUxvYWRMaWJyYXJ5SGlkZXNNZW1iZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICAgICAgIkxvYWRMaWJyYXJ5SGlkZXNNZW1iZXIiLCB0ZW1wbGF0ZUxvYWRMaWJyYXJ5SGlkZXNNZW1iZXIsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5Lmlnbm9yZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c0xvYWRMaWJyYXJ5SGlkZXNNZW1iZXIoVXJpIHVyaV8pIHsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZUxvYWRMaWJyYXJ5SGlkZXNNZW1iZXIsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgbGlicmFyeSAnJHt1cml9JyBkZWZpbmVzIGEgdG9wLWxldmVsIG1lbWJlciBuYW1lZCAnbG9hZExpYnJhcnknLiBUaGlzIG1lbWJlciBpcyBoaWRkZW4gYnkgdGhlIHNwZWNpYWwgbWVtYmVyICdsb2FkTGlicmFyeScgdGhhdCB0aGUgbGFuZ3VhZ2UgYWRkcyB0byBzdXBwb3J0IGRlZmVycmVkIGxvYWRpbmcuIiIiLAogICAgICB0aXA6ICIiIlRyeSB0byByZW5hbWUgb3IgaGlkZSB0aGUgbWVtYmVyLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTG9hZExpYnJhcnlUYWtlc05vQXJndW1lbnRzID0KICAgIG1lc3NhZ2VMb2FkTGlicmFyeVRha2VzTm9Bcmd1bWVudHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTG9hZExpYnJhcnlUYWtlc05vQXJndW1lbnRzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTG9hZExpYnJhcnlUYWtlc05vQXJndW1lbnRzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJMT0FEX0xJQlJBUllfVEFLRVNfTk9fQVJHVU1FTlRTIl0sCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nLAogICAgbWVzc2FnZTogciIiIidsb2FkTGlicmFyeScgdGFrZXMgbm8gYXJndW1lbnRzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+CiAgICB0ZW1wbGF0ZUxvY2FsRGVmaW5pdGlvbkhpZGVzRXhwb3J0ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiTG9jYWwgZGVmaW5pdGlvbiBvZiAnI25hbWUnIGhpZGVzIGV4cG9ydCBmcm9tICcjdXJpJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNMb2NhbERlZmluaXRpb25IaWRlc0V4cG9ydCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4KICAgIGNvZGVMb2NhbERlZmluaXRpb25IaWRlc0V4cG9ydCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4oCiAgICAgICAgIkxvY2FsRGVmaW5pdGlvbkhpZGVzRXhwb3J0IiwgdGVtcGxhdGVMb2NhbERlZmluaXRpb25IaWRlc0V4cG9ydCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaWdub3JlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTG9jYWxEZWZpbml0aW9uSGlkZXNFeHBvcnQoU3RyaW5nIG5hbWUsIFVyaSB1cmlfKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTG9jYWxEZWZpbml0aW9uSGlkZXNFeHBvcnQsCiAgICAgIG1lc3NhZ2U6ICIiIkxvY2FsIGRlZmluaXRpb24gb2YgJyR7bmFtZX0nIGhpZGVzIGV4cG9ydCBmcm9tICcke3VyaX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndXJpJzogdXJpX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+CiAgICB0ZW1wbGF0ZUxvY2FsRGVmaW5pdGlvbkhpZGVzSW1wb3J0ID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiTG9jYWwgZGVmaW5pdGlvbiBvZiAnI25hbWUnIGhpZGVzIGltcG9ydCBmcm9tICcjdXJpJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNMb2NhbERlZmluaXRpb25IaWRlc0ltcG9ydCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4KICAgIGNvZGVMb2NhbERlZmluaXRpb25IaWRlc0ltcG9ydCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4oCiAgICAgICAgIkxvY2FsRGVmaW5pdGlvbkhpZGVzSW1wb3J0IiwgdGVtcGxhdGVMb2NhbERlZmluaXRpb25IaWRlc0ltcG9ydCwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuaWdub3JlZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTG9jYWxEZWZpbml0aW9uSGlkZXNJbXBvcnQoU3RyaW5nIG5hbWUsIFVyaSB1cmlfKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTG9jYWxEZWZpbml0aW9uSGlkZXNJbXBvcnQsCiAgICAgIG1lc3NhZ2U6ICIiIkxvY2FsIGRlZmluaXRpb24gb2YgJyR7bmFtZX0nIGhpZGVzIGltcG9ydCBmcm9tICcke3VyaX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndXJpJzogdXJpX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNYXBMaXRlcmFsVHlwZUFyZ3VtZW50TWlzbWF0Y2ggPQogICAgbWVzc2FnZU1hcExpdGVyYWxUeXBlQXJndW1lbnRNaXNtYXRjaDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNYXBMaXRlcmFsVHlwZUFyZ3VtZW50TWlzbWF0Y2ggPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJNYXBMaXRlcmFsVHlwZUFyZ3VtZW50TWlzbWF0Y2giLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYUEVDVEVEX1RXT19NQVBfVFlQRV9BUkdVTUVOVFMiXSwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcsCiAgICBtZXNzYWdlOiByIiIiQSBtYXAgbGl0ZXJhbCByZXF1aXJlcyBleGFjdGx5IHR3byB0eXBlIGFyZ3VtZW50cy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTWVtYmVyV2l0aFNhbWVOYW1lQXNDbGFzcyA9CiAgICBtZXNzYWdlTWVtYmVyV2l0aFNhbWVOYW1lQXNDbGFzczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNZW1iZXJXaXRoU2FtZU5hbWVBc0NsYXNzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTWVtYmVyV2l0aFNhbWVOYW1lQXNDbGFzcyIsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJBIGNsYXNzIG1lbWJlciBjYW4ndCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGVuY2xvc2luZyBjbGFzcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTWV0YWRhdGFUeXBlQXJndW1lbnRzID0gbWVzc2FnZU1ldGFkYXRhVHlwZUFyZ3VtZW50czsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNZXRhZGF0YVR5cGVBcmd1bWVudHMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJNZXRhZGF0YVR5cGVBcmd1bWVudHMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkFOTk9UQVRJT05fV0lUSF9UWVBFX0FSR1VNRU5UUyJdLAogICAgbWVzc2FnZTogciIiIkFuIGFubm90YXRpb24gKG1ldGFkYXRhKSBjYW4ndCB1c2UgdHlwZSBhcmd1bWVudHMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZU1ldGhvZE5vdEZvdW5kID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJNZXRob2Qgbm90IGZvdW5kOiAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c01ldGhvZE5vdEZvdW5kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVNZXRob2ROb3RGb3VuZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiTWV0aG9kTm90Rm91bmQiLCB0ZW1wbGF0ZU1ldGhvZE5vdEZvdW5kLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkRFRklORURfTUVUSE9EIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTWV0aG9kTm90Rm91bmQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVNZXRob2ROb3RGb3VuZCwKICAgICAgbWVzc2FnZTogIiIiTWV0aG9kIG5vdCBmb3VuZDogJyR7bmFtZX0nLiIiIiwgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1pc3NpbmdBcmd1bWVudExpc3QgPSBtZXNzYWdlTWlzc2luZ0FyZ3VtZW50TGlzdDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNaXNzaW5nQXJndW1lbnRMaXN0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTWlzc2luZ0FyZ3VtZW50TGlzdCIsCiAgICBtZXNzYWdlOiByIiIiQ29uc3RydWN0b3IgaW52b2NhdGlvbnMgbXVzdCBoYXZlIGFuIGFyZ3VtZW50IGxpc3QuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1pc3NpbmdBc3NpZ25hYmxlU2VsZWN0b3IgPQogICAgbWVzc2FnZU1pc3NpbmdBc3NpZ25hYmxlU2VsZWN0b3I7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ0Fzc2lnbmFibGVTZWxlY3RvciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk1pc3NpbmdBc3NpZ25hYmxlU2VsZWN0b3IiLAogICAgaW5kZXg6IDM1LAogICAgbWVzc2FnZTogciIiIk1pc3Npbmcgc2VsZWN0b3Igc3VjaCBhcyAnLjxpZGVudGlmaWVyPicgb3IgJ1swXScuIiIiLAogICAgdGlwOiByIiIiVHJ5IGFkZGluZyBhIHNlbGVjdG9yLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNaXNzaW5nQXNzaWdubWVudEluSW5pdGlhbGl6ZXIgPQogICAgbWVzc2FnZU1pc3NpbmdBc3NpZ25tZW50SW5Jbml0aWFsaXplcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNaXNzaW5nQXNzaWdubWVudEluSW5pdGlhbGl6ZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJNaXNzaW5nQXNzaWdubWVudEluSW5pdGlhbGl6ZXIiLAogICAgaW5kZXg6IDM0LAogICAgbWVzc2FnZTogciIiIkV4cGVjdGVkIGFuIGFzc2lnbm1lbnQgYWZ0ZXIgdGhlIGZpZWxkIG5hbWUuIiIiLAogICAgdGlwOiByIiIiVG8gaW5pdGlhbGl6ZSBhIGZpZWxkLCB1c2UgdGhlIHN5bnRheCAnbmFtZSA9IHZhbHVlJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTWlzc2luZ0NvbnN0RmluYWxWYXJPclR5cGUgPQogICAgbWVzc2FnZU1pc3NpbmdDb25zdEZpbmFsVmFyT3JUeXBlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU1pc3NpbmdDb25zdEZpbmFsVmFyT3JUeXBlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTWlzc2luZ0NvbnN0RmluYWxWYXJPclR5cGUiLAogICAgaW5kZXg6IDMzLAogICAgbWVzc2FnZToKICAgICAgICByIiIiVmFyaWFibGVzIG11c3QgYmUgZGVjbGFyZWQgdXNpbmcgdGhlIGtleXdvcmRzICdjb25zdCcsICdmaW5hbCcsICd2YXInIG9yIGEgdHlwZSBuYW1lLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IGFkZGluZyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBvZiB0aGUgdmFyaWFibGUgb3IgdGhlIGtleXdvcmQgJ3ZhcicuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50KT4KICAgIHRlbXBsYXRlTWlzc2luZ0V4cGxpY2l0VHlwZUFyZ3VtZW50cyA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIk5vIHR5cGUgYXJndW1lbnRzIHByb3ZpZGVkLCAjY291bnQgcG9zc2libGUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTWlzc2luZ0V4cGxpY2l0VHlwZUFyZ3VtZW50cyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50KT4gY29kZU1pc3NpbmdFeHBsaWNpdFR5cGVBcmd1bWVudHMgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCk+KAogICAgICAgICJNaXNzaW5nRXhwbGljaXRUeXBlQXJndW1lbnRzIiwgdGVtcGxhdGVNaXNzaW5nRXhwbGljaXRUeXBlQXJndW1lbnRzLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5pZ25vcmVkKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNNaXNzaW5nRXhwbGljaXRUeXBlQXJndW1lbnRzKGludCBjb3VudCkgewogIGlmIChjb3VudCA9PSBudWxsKSB0aHJvdyAnTm8gY291bnQgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTWlzc2luZ0V4cGxpY2l0VHlwZUFyZ3VtZW50cywKICAgICAgbWVzc2FnZTogIiIiTm8gdHlwZSBhcmd1bWVudHMgcHJvdmlkZWQsICR7Y291bnR9IHBvc3NpYmxlLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J2NvdW50JzogY291bnR9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTWlzc2luZ0V4cG9uZW50ID0gbWVzc2FnZU1pc3NpbmdFeHBvbmVudDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNaXNzaW5nRXhwb25lbnQgPSBjb25zdCBNZXNzYWdlQ29kZSgiTWlzc2luZ0V4cG9uZW50IiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNSVNTSU5HX0RJR0lUIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJOdW1iZXJzIGluIGV4cG9uZW50aWFsIG5vdGF0aW9uIHNob3VsZCBhbHdheXMgY29udGFpbiBhbiBleHBvbmVudCAoYW4gaW50ZWdlciBudW1iZXIgd2l0aCBhbiBvcHRpb25hbCBzaWduKS4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIk1ha2Ugc3VyZSB0aGVyZSBpcyBhbiBleHBvbmVudCwgYW5kIHJlbW92ZSBhbnkgd2hpdGVzcGFjZSBiZWZvcmUgaXQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1pc3NpbmdFeHByZXNzaW9uSW5UaHJvdyA9IG1lc3NhZ2VNaXNzaW5nRXhwcmVzc2lvbkluVGhyb3c7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ0V4cHJlc3Npb25JblRocm93ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTWlzc2luZ0V4cHJlc3Npb25JblRocm93IiwKICAgIGluZGV4OiAzMiwKICAgIG1lc3NhZ2U6IHIiIiJNaXNzaW5nIGV4cHJlc3Npb24gYWZ0ZXIgJ3Rocm93Jy4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIkFkZCBhbiBleHByZXNzaW9uIGFmdGVyICd0aHJvdycgb3IgdXNlICdyZXRocm93JyB0byB0aHJvdyBhIGNhdWdodCBleGNlcHRpb24iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTWlzc2luZ0Z1bmN0aW9uUGFyYW1ldGVycyA9CiAgICBtZXNzYWdlTWlzc2luZ0Z1bmN0aW9uUGFyYW1ldGVyczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNaXNzaW5nRnVuY3Rpb25QYXJhbWV0ZXJzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTWlzc2luZ0Z1bmN0aW9uUGFyYW1ldGVycyIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTUlTU0lOR19GVU5DVElPTl9QQVJBTUVURVJTIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJBIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIG5lZWRzIGFuIGV4cGxpY2l0IGxpc3Qgb2YgcGFyYW1ldGVycy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgYWRkaW5nIGEgcGFyYW1ldGVyIGxpc3QgdG8gdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2UgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIicjbmFtZScgaXMgZGVmaW5lZCBoZXJlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c01pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVNaXNzaW5nSW1wbGVtZW50YXRpb25DYXVzZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2UiLCB0ZW1wbGF0ZU1pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNNaXNzaW5nSW1wbGVtZW50YXRpb25DYXVzZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU1pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgZGVmaW5lZCBoZXJlLiIiIiwgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBMaXN0PFN0cmluZz4KICAgICAgICAgICAgX25hbWVzKT4gdGVtcGxhdGVNaXNzaW5nSW1wbGVtZW50YXRpb25Ob3RBYnN0cmFjdCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIExpc3Q8U3RyaW5nPiBfbmFtZXMpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIG5vbi1hYnN0cmFjdCBjbGFzcyAnI25hbWUnIGlzIG1pc3NpbmcgaW1wbGVtZW50YXRpb25zIGZvciB0aGVzZSBtZW1iZXJzOgojbmFtZXMiIiIsCiAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSB0byBlaXRoZXIKIC0gcHJvdmlkZSBhbiBpbXBsZW1lbnRhdGlvbiwKIC0gaW5oZXJpdCBhbiBpbXBsZW1lbnRhdGlvbiBmcm9tIGEgc3VwZXJjbGFzcyBvciBtaXhpbiwKIC0gbWFyayB0aGUgY2xhc3MgYXMgYWJzdHJhY3QsIG9yCiAtIHByb3ZpZGUgYSAnbm9TdWNoTWV0aG9kJyBpbXBsZW1lbnRhdGlvbi4KIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNNaXNzaW5nSW1wbGVtZW50YXRpb25Ob3RBYnN0cmFjdCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIExpc3Q8U3RyaW5nPiBfbmFtZXMpPgogICAgY29kZU1pc3NpbmdJbXBsZW1lbnRhdGlvbk5vdEFic3RyYWN0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgTGlzdDxTdHJpbmc+IF9uYW1lcyk+KAogICAgICAgICJNaXNzaW5nSW1wbGVtZW50YXRpb25Ob3RBYnN0cmFjdCIsCiAgICAgICAgdGVtcGxhdGVNaXNzaW5nSW1wbGVtZW50YXRpb25Ob3RBYnN0cmFjdCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ09OQ1JFVEVfQ0xBU1NfV0lUSF9BQlNUUkFDVF9NRU1CRVIiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTWlzc2luZ0ltcGxlbWVudGF0aW9uTm90QWJzdHJhY3QoCiAgICBTdHJpbmcgbmFtZSwgTGlzdDxTdHJpbmc+IF9uYW1lcykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAoX25hbWVzLmlzRW1wdHkpIHRocm93ICdObyBuYW1lcyBwcm92aWRlZCc7CiAgU3RyaW5nIG5hbWVzID0gaXRlbWl6ZU5hbWVzKF9uYW1lcyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVNaXNzaW5nSW1wbGVtZW50YXRpb25Ob3RBYnN0cmFjdCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBub24tYWJzdHJhY3QgY2xhc3MgJyR7bmFtZX0nIGlzIG1pc3NpbmcgaW1wbGVtZW50YXRpb25zIGZvciB0aGVzZSBtZW1iZXJzOgoke25hbWVzfSIiIiwKICAgICAgdGlwOiAiIiJUcnkgdG8gZWl0aGVyCiAtIHByb3ZpZGUgYW4gaW1wbGVtZW50YXRpb24sCiAtIGluaGVyaXQgYW4gaW1wbGVtZW50YXRpb24gZnJvbSBhIHN1cGVyY2xhc3Mgb3IgbWl4aW4sCiAtIG1hcmsgdGhlIGNsYXNzIGFzIGFic3RyYWN0LCBvcgogLSBwcm92aWRlIGEgJ25vU3VjaE1ldGhvZCcgaW1wbGVtZW50YXRpb24uCiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAnbmFtZXMnOiBfbmFtZXN9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTWlzc2luZ0lucHV0ID0gbWVzc2FnZU1pc3NpbmdJbnB1dDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNaXNzaW5nSW5wdXQgPSBjb25zdCBNZXNzYWdlQ29kZSgiTWlzc2luZ0lucHV0IiwKICAgIG1lc3NhZ2U6IHIiIiJObyBpbnB1dCBmaWxlIHByb3ZpZGVkIHRvIHRoZSBjb21waWxlci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTWlzc2luZ01haW4gPSBtZXNzYWdlTWlzc2luZ01haW47CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ01haW4gPSBjb25zdCBNZXNzYWdlQ29kZSgiTWlzc2luZ01haW4iLAogICAgbWVzc2FnZTogciIiIk5vICdtYWluJyBtZXRob2QgZm91bmQuIiIiLAogICAgdGlwOiByIiIiVHJ5IGFkZGluZyBhIG1ldGhvZCBuYW1lZCAnbWFpbicgdG8geW91ciBwcm9ncmFtLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNaXNzaW5nTWV0aG9kUGFyYW1ldGVycyA9IG1lc3NhZ2VNaXNzaW5nTWV0aG9kUGFyYW1ldGVyczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNaXNzaW5nTWV0aG9kUGFyYW1ldGVycyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk1pc3NpbmdNZXRob2RQYXJhbWV0ZXJzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNSVNTSU5HX01FVEhPRF9QQVJBTUVURVJTIl0sCiAgICBtZXNzYWdlOiByIiIiQSBtZXRob2QgZGVjbGFyYXRpb24gbmVlZHMgYW4gZXhwbGljaXQgbGlzdCBvZiBwYXJhbWV0ZXJzLiIiIiwKICAgIHRpcDogciIiIlRyeSBhZGRpbmcgYSBwYXJhbWV0ZXIgbGlzdCB0byB0aGUgbWV0aG9kIGRlY2xhcmF0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNaXNzaW5nT3BlcmF0b3JLZXl3b3JkID0gbWVzc2FnZU1pc3NpbmdPcGVyYXRvcktleXdvcmQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTWlzc2luZ09wZXJhdG9yS2V5d29yZCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk1pc3NpbmdPcGVyYXRvcktleXdvcmQiLAogICAgaW5kZXg6IDMxLAogICAgbWVzc2FnZToKICAgICAgICByIiIiT3BlcmF0b3IgZGVjbGFyYXRpb25zIG11c3QgYmUgcHJlY2VkZWQgYnkgdGhlIGtleXdvcmQgJ29wZXJhdG9yJy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgYWRkaW5nIHRoZSBrZXl3b3JkICdvcGVyYXRvcicuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IHRlbXBsYXRlTWlzc2luZ1BhcnRPZiA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQ2FuJ3QgdXNlICcjdXJpJyBhcyBhIHBhcnQsIGJlY2F1c2UgaXQgaGFzIG5vICdwYXJ0IG9mJyBkZWNsYXJhdGlvbi4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c01pc3NpbmdQYXJ0T2YpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gY29kZU1pc3NpbmdQYXJ0T2YgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICAgICAgIk1pc3NpbmdQYXJ0T2YiLCB0ZW1wbGF0ZU1pc3NpbmdQYXJ0T2YsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlBBUlRfT0ZfTk9OX1BBUlQiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTWlzc2luZ1BhcnRPZihVcmkgdXJpXykgewogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTWlzc2luZ1BhcnRPZiwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNhbid0IHVzZSAnJHt1cml9JyBhcyBhIHBhcnQsIGJlY2F1c2UgaXQgaGFzIG5vICdwYXJ0IG9mJyBkZWNsYXJhdGlvbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU1pc3NpbmdQcmVmaXhJbkRlZmVycmVkSW1wb3J0ID0KICAgIG1lc3NhZ2VNaXNzaW5nUHJlZml4SW5EZWZlcnJlZEltcG9ydDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNaXNzaW5nUHJlZml4SW5EZWZlcnJlZEltcG9ydCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk1pc3NpbmdQcmVmaXhJbkRlZmVycmVkSW1wb3J0IiwKICAgIGluZGV4OiAzMCwKICAgIG1lc3NhZ2U6IHIiIiJEZWZlcnJlZCBpbXBvcnRzIHNob3VsZCBoYXZlIGEgcHJlZml4LiIiIiwKICAgIHRpcDogciIiIlRyeSBhZGRpbmcgYSBwcmVmaXggdG8gdGhlIGltcG9ydC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTWlzc2luZ1R5cGVkZWZQYXJhbWV0ZXJzID0gbWVzc2FnZU1pc3NpbmdUeXBlZGVmUGFyYW1ldGVyczsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNaXNzaW5nVHlwZWRlZlBhcmFtZXRlcnMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJNaXNzaW5nVHlwZWRlZlBhcmFtZXRlcnMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JU1NJTkdfVFlQRURFRl9QQVJBTUVURVJTIl0sCiAgICBtZXNzYWdlOiByIiIiQSB0eXBlZGVmIG5lZWRzIGFuIGV4cGxpY2l0IGxpc3Qgb2YgcGFyYW1ldGVycy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgYWRkaW5nIGEgcGFyYW1ldGVyIGxpc3QgdG8gdGhlIHR5cGVkZWYuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgRGFydFR5cGUgX3R5cGUzKT4KICAgIHRlbXBsYXRlTWl4aW5BcHBsaWNhdGlvbkluY29tcGF0aWJsZVN1cGVydHlwZSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIERhcnRUeXBlIF90eXBlMyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIicjdHlwZScgZG9lc24ndCBpbXBsZW1lbnQgJyN0eXBlMicgc28gaXQgY2FuJ3QgYmUgdXNlZCB3aXRoICcjdHlwZTMnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c01peGluQXBwbGljYXRpb25JbmNvbXBhdGlibGVTdXBlcnR5cGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIsIERhcnRUeXBlIF90eXBlMyk+CiAgICBjb2RlTWl4aW5BcHBsaWNhdGlvbkluY29tcGF0aWJsZVN1cGVydHlwZSA9IGNvbnN0IENvZGU8CiAgICAgICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgRGFydFR5cGUgX3R5cGUzKT4oCiAgICAgICAgIk1peGluQXBwbGljYXRpb25JbmNvbXBhdGlibGVTdXBlcnR5cGUiLAogICAgICAgIHRlbXBsYXRlTWl4aW5BcHBsaWNhdGlvbkluY29tcGF0aWJsZVN1cGVydHlwZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTUlYSU5fQVBQTElDQVRJT05fTk9UX0lNUExFTUVOVEVEX0lOVEVSRkFDRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNNaXhpbkFwcGxpY2F0aW9uSW5jb21wYXRpYmxlU3VwZXJ0eXBlKAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgRGFydFR5cGUgX3R5cGUzKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIExpc3Q8T2JqZWN0PiB0eXBlM1BhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUzKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUzID0gdHlwZTNQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVNaXhpbkFwcGxpY2F0aW9uSW5jb21wYXRpYmxlU3VwZXJ0eXBlLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiJyR7dHlwZX0nIGRvZXNuJ3QgaW1wbGVtZW50ICcke3R5cGUyfScgc28gaXQgY2FuJ3QgYmUgdXNlZCB3aXRoICcke3R5cGUzfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTIsICd0eXBlMyc6IF90eXBlM30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nIG5hbWUyLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlKT4gdGVtcGxhdGVNaXhpbkluZmVyZW5jZU5vTWF0Y2hpbmdDbGFzcyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMiwgRGFydFR5cGUgX3R5cGUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVHlwZSBwYXJhbWV0ZXJzIGNvdWxkIG5vdCBiZSBpbmZlcnJlZCBmb3IgdGhlIG1peGluICcjbmFtZScgYmVjYXVzZSAnI25hbWUyJyBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG1peGluJ3Mgc3VwZXJ0eXBlIGNvbnN0cmFpbnQgJyN0eXBlJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c01peGluSW5mZXJlbmNlTm9NYXRjaGluZ0NsYXNzKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyLCBEYXJ0VHlwZSBfdHlwZSk+CiAgICBjb2RlTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3MgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIERhcnRUeXBlIF90eXBlKT4oCiAgICAgICAgIk1peGluSW5mZXJlbmNlTm9NYXRjaGluZ0NsYXNzIiwgdGVtcGxhdGVNaXhpbkluZmVyZW5jZU5vTWF0Y2hpbmdDbGFzcywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTUlYSU5fSU5GRVJFTkNFX05PX1BPU1NJQkxFX1NVQlNUSVRVVElPTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNNaXhpbkluZmVyZW5jZU5vTWF0Y2hpbmdDbGFzcygKICAgIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIERhcnRUeXBlIF90eXBlKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVNaXhpbkluZmVyZW5jZU5vTWF0Y2hpbmdDbGFzcywKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlR5cGUgcGFyYW1ldGVycyBjb3VsZCBub3QgYmUgaW5mZXJyZWQgZm9yIHRoZSBtaXhpbiAnJHtuYW1lfScgYmVjYXVzZSAnJHtuYW1lMn0nIGRvZXMgbm90IGltcGxlbWVudCB0aGUgbWl4aW4ncyBzdXBlcnR5cGUgY29uc3RyYWludCAnJHt0eXBlfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICduYW1lMic6IG5hbWUyLCAndHlwZSc6IF90eXBlfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgc3RyaW5nLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBzdHJpbmcyKT4gdGVtcGxhdGVNb2RpZmllck91dE9mT3JkZXIgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBtb2RpZmllciAnI3N0cmluZycgc2hvdWxkIGJlIGJlZm9yZSB0aGUgbW9kaWZpZXIgJyNzdHJpbmcyJy4iIiIsCiAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSByZS1vcmRlcmluZyB0aGUgbW9kaWZpZXJzLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTW9kaWZpZXJPdXRPZk9yZGVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+CiAgICBjb2RlTW9kaWZpZXJPdXRPZk9yZGVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgICAgICJNb2RpZmllck91dE9mT3JkZXIiLCB0ZW1wbGF0ZU1vZGlmaWVyT3V0T2ZPcmRlciwKICAgICAgICBpbmRleDogNTYpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c01vZGlmaWVyT3V0T2ZPcmRlcihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMikgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgaWYgKHN0cmluZzIuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVNb2RpZmllck91dE9mT3JkZXIsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgbW9kaWZpZXIgJyR7c3RyaW5nfScgc2hvdWxkIGJlIGJlZm9yZSB0aGUgbW9kaWZpZXIgJyR7c3RyaW5nMn0nLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgcmUtb3JkZXJpbmcgdGhlIG1vZGlmaWVycy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmcsICdzdHJpbmcyJzogc3RyaW5nMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNb3JlVGhhbk9uZVN1cGVyT3JUaGlzSW5pdGlhbGl6ZXIgPQogICAgbWVzc2FnZU1vcmVUaGFuT25lU3VwZXJPclRoaXNJbml0aWFsaXplcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VNb3JlVGhhbk9uZVN1cGVyT3JUaGlzSW5pdGlhbGl6ZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJNb3JlVGhhbk9uZVN1cGVyT3JUaGlzSW5pdGlhbGl6ZXIiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlNVUEVSX0lOX1JFRElSRUNUSU5HX0NPTlNUUlVDVE9SIl0sCiAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgaGF2ZSBtb3JlIHRoYW4gb25lICdzdXBlcicgb3IgJ3RoaXMnIGluaXRpYWxpemVyLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVNdWx0aXBsZUV4dGVuZHMgPSBtZXNzYWdlTXVsdGlwbGVFeHRlbmRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU11bHRpcGxlRXh0ZW5kcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJNdWx0aXBsZUV4dGVuZHMiLAogICAgaW5kZXg6IDI4LAogICAgbWVzc2FnZTogciIiIkVhY2ggY2xhc3MgZGVmaW5pdGlvbiBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBleHRlbmRzIGNsYXVzZS4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSBjaG9vc2luZyBvbmUgc3VwZXJjbGFzcyBhbmQgZGVmaW5lIHlvdXIgY2xhc3MgdG8gaW1wbGVtZW50IChvciBtaXggaW4pIHRoZSBvdGhlcnMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU11bHRpcGxlSW1wbGVtZW50cyA9IG1lc3NhZ2VNdWx0aXBsZUltcGxlbWVudHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTXVsdGlwbGVJbXBsZW1lbnRzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTXVsdGlwbGVJbXBsZW1lbnRzIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJNVUxUSVBMRV9JTVBMRU1FTlRTX0NMQVVTRVMiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkVhY2ggY2xhc3MgZGVmaW5pdGlvbiBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBpbXBsZW1lbnRzIGNsYXVzZS4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSBjb21iaW5pbmcgYWxsIG9mIHRoZSBpbXBsZW1lbnRzIGNsYXVzZXMgaW50byBhIHNpbmdsZSBjbGF1c2UuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU11bHRpcGxlTGlicmFyeURpcmVjdGl2ZXMgPQogICAgbWVzc2FnZU11bHRpcGxlTGlicmFyeURpcmVjdGl2ZXM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTXVsdGlwbGVMaWJyYXJ5RGlyZWN0aXZlcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk11bHRpcGxlTGlicmFyeURpcmVjdGl2ZXMiLAogICAgaW5kZXg6IDI3LAogICAgbWVzc2FnZTogciIiIk9ubHkgb25lIGxpYnJhcnkgZGlyZWN0aXZlIG1heSBiZSBkZWNsYXJlZCBpbiBhIGZpbGUuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIGFsbCBidXQgb25lIG9mIHRoZSBsaWJyYXJ5IGRpcmVjdGl2ZXMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU11bHRpcGxlT25DbGF1c2VzID0gbWVzc2FnZU11bHRpcGxlT25DbGF1c2VzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU11bHRpcGxlT25DbGF1c2VzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTXVsdGlwbGVPbkNsYXVzZXMiLAogICAgaW5kZXg6IDI2LAogICAgbWVzc2FnZTogciIiIkVhY2ggbWl4aW4gZGVmaW5pdGlvbiBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBvbiBjbGF1c2UuIiIiLAogICAgdGlwOiByIiIiVHJ5IGNvbWJpbmluZyBhbGwgb2YgdGhlIG9uIGNsYXVzZXMgaW50byBhIHNpbmdsZSBjbGF1c2UuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU11bHRpcGxlV2l0aCA9IG1lc3NhZ2VNdWx0aXBsZVdpdGg7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTXVsdGlwbGVXaXRoID0gY29uc3QgTWVzc2FnZUNvZGUoIk11bHRpcGxlV2l0aCIsCiAgICBpbmRleDogMjQsCiAgICBtZXNzYWdlOiByIiIiRWFjaCBjbGFzcyBkZWZpbml0aW9uIGNhbiBoYXZlIGF0IG1vc3Qgb25lIHdpdGggY2xhdXNlLiIiIiwKICAgIHRpcDogciIiIlRyeSBjb21iaW5pbmcgYWxsIG9mIHRoZSB3aXRoIGNsYXVzZXMgaW50byBhIHNpbmdsZSBjbGF1c2UuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU5hbWVkRnVuY3Rpb25FeHByZXNzaW9uID0gbWVzc2FnZU5hbWVkRnVuY3Rpb25FeHByZXNzaW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU5hbWVkRnVuY3Rpb25FeHByZXNzaW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTmFtZWRGdW5jdGlvbkV4cHJlc3Npb24iLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5BTUVEX0ZVTkNUSU9OX0VYUFJFU1NJT04iXSwKICAgIG1lc3NhZ2U6IHIiIiJBIGZ1bmN0aW9uIGV4cHJlc3Npb24gY2FuJ3QgaGF2ZSBhIG5hbWUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlTmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiT3ZlcnJpZGUgd2FzIGludHJvZHVjZWQgaW4gdGhlIG1peGluIGFwcGxpY2F0aW9uIGNsYXNzICcjbmFtZScuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNOYW1lZE1peGluT3ZlcnJpZGVDb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVOYW1lZE1peGluT3ZlcnJpZGVDb250ZXh0ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJOYW1lZE1peGluT3ZlcnJpZGVDb250ZXh0IiwgdGVtcGxhdGVOYW1lZE1peGluT3ZlcnJpZGVDb250ZXh0LAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNOYW1lZE1peGluT3ZlcnJpZGVDb250ZXh0KFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIk92ZXJyaWRlIHdhcyBpbnRyb2R1Y2VkIGluIHRoZSBtaXhpbiBhcHBsaWNhdGlvbiBjbGFzcyAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTmF0aXZlQ2xhdXNlU2hvdWxkQmVBbm5vdGF0aW9uID0KICAgIG1lc3NhZ2VOYXRpdmVDbGF1c2VTaG91bGRCZUFubm90YXRpb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTmF0aXZlQ2xhdXNlU2hvdWxkQmVBbm5vdGF0aW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTmF0aXZlQ2xhdXNlU2hvdWxkQmVBbm5vdGF0aW9uIiwKICAgIGluZGV4OiAyMywKICAgIG1lc3NhZ2U6IHIiIiJOYXRpdmUgY2xhdXNlIGluIHRoaXMgZm9ybSBpcyBkZXByZWNhdGVkLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IHJlbW92aW5nIHRoaXMgbmF0aXZlIGNsYXVzZSBhbmQgYWRkaW5nIEBuYXRpdmUoKSBvciBAbmF0aXZlKCduYXRpdmUtbmFtZScpIGJlZm9yZSB0aGUgZGVjbGFyYXRpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IHRlbXBsYXRlTm9Gb3JtYWxzID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQSBmdW5jdGlvbiBzaG91bGQgaGF2ZSBmb3JtYWwgcGFyYW1ldGVycy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGFkZGluZyAnKCknIGFmdGVyICcjbGV4ZW1lJywgb3IgYWRkICdnZXQnIGJlZm9yZSAnI2xleGVtZScgdG8gZGVjbGFyZSBhIGdldHRlci4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c05vRm9ybWFscyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiBjb2RlTm9Gb3JtYWxzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KCJOb0Zvcm1hbHMiLCB0ZW1wbGF0ZU5vRm9ybWFscywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTUlTU0lOR19GVU5DVElPTl9QQVJBTUVURVJTIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c05vRm9ybWFscyhUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVOb0Zvcm1hbHMsCiAgICAgIG1lc3NhZ2U6ICIiIkEgZnVuY3Rpb24gc2hvdWxkIGhhdmUgZm9ybWFsIHBhcmFtZXRlcnMuIiIiLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgYWRkaW5nICcoKScgYWZ0ZXIgJyR7bGV4ZW1lfScsIG9yIGFkZCAnZ2V0JyBiZWZvcmUgJyR7bGV4ZW1lfScgdG8gZGVjbGFyZSBhIGdldHRlci4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0b2tlbic6IHRva2VufSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZU5vU3VjaE5hbWVkUGFyYW1ldGVyID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJObyBuYW1lZCBwYXJhbWV0ZXIgd2l0aCB0aGUgbmFtZSAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c05vU3VjaE5hbWVkUGFyYW1ldGVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVOb1N1Y2hOYW1lZFBhcmFtZXRlciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiTm9TdWNoTmFtZWRQYXJhbWV0ZXIiLCB0ZW1wbGF0ZU5vU3VjaE5hbWVkUGFyYW1ldGVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkRFRklORURfTkFNRURfUEFSQU1FVEVSIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTm9TdWNoTmFtZWRQYXJhbWV0ZXIoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVOb1N1Y2hOYW1lZFBhcmFtZXRlciwKICAgICAgbWVzc2FnZTogIiIiTm8gbmFtZWQgcGFyYW1ldGVyIHdpdGggdGhlIG5hbWUgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU5vVW5uYW1lZENvbnN0cnVjdG9ySW5PYmplY3QgPQogICAgbWVzc2FnZU5vVW5uYW1lZENvbnN0cnVjdG9ySW5PYmplY3Q7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTm9Vbm5hbWVkQ29uc3RydWN0b3JJbk9iamVjdCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk5vVW5uYW1lZENvbnN0cnVjdG9ySW5PYmplY3QiLAogICAgbWVzc2FnZTogciIiIidPYmplY3QnIGhhcyBubyB1bm5hbWVkIGNvbnN0cnVjdG9yLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIGNoYXJhY3RlciwKICAgICAgICBpbnQKICAgICAgICAgICAgY29kZVBvaW50KT4gdGVtcGxhdGVOb25Bc2NpaUlkZW50aWZpZXIgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBjaGFyYWN0ZXIsIGludCBjb2RlUG9pbnQpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIG5vbi1BU0NJSSBjaGFyYWN0ZXIgJyNjaGFyYWN0ZXInICgjdW5pY29kZSkgY2FuJ3QgYmUgdXNlZCBpbiBpZGVudGlmaWVycywgb25seSBpbiBzdHJpbmdzIGFuZCBjb21tZW50cy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IHVzaW5nIGFuIFVTLUFTQ0lJIGxldHRlciwgYSBkaWdpdCwgJ18nIChhbiB1bmRlcnNjb3JlKSwgb3IgJyQnIChhIGRvbGxhciBzaWduKS4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c05vbkFzY2lpSWRlbnRpZmllcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIGNoYXJhY3RlciwgaW50IGNvZGVQb2ludCk+CiAgICBjb2RlTm9uQXNjaWlJZGVudGlmaWVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgY2hhcmFjdGVyLCBpbnQgY29kZVBvaW50KT4oCiAgICAgICAgIk5vbkFzY2lpSWRlbnRpZmllciIsIHRlbXBsYXRlTm9uQXNjaWlJZGVudGlmaWVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTExFR0FMX0NIQVJBQ1RFUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNOb25Bc2NpaUlkZW50aWZpZXIoU3RyaW5nIGNoYXJhY3RlciwgaW50IGNvZGVQb2ludCkgewogIGlmIChjaGFyYWN0ZXIucnVuZXMubGVuZ3RoICE9IDEpIHRocm93ICJOb3QgYSBjaGFyYWN0ZXIgJyR7Y2hhcmFjdGVyfSciOwogIFN0cmluZyB1bmljb2RlID0KICAgICAgIlUrJHtjb2RlUG9pbnQudG9SYWRpeFN0cmluZygxNikudG9VcHBlckNhc2UoKS5wYWRMZWZ0KDQsICcwJyl9IjsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU5vbkFzY2lpSWRlbnRpZmllciwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBub24tQVNDSUkgY2hhcmFjdGVyICcke2NoYXJhY3Rlcn0nICgke3VuaWNvZGV9KSBjYW4ndCBiZSB1c2VkIGluIGlkZW50aWZpZXJzLCBvbmx5IGluIHN0cmluZ3MgYW5kIGNvbW1lbnRzLiIiIiwKICAgICAgdGlwOiAiIiJUcnkgdXNpbmcgYW4gVVMtQVNDSUkgbGV0dGVyLCBhIGRpZ2l0LCAnXycgKGFuIHVuZGVyc2NvcmUpLCBvciAnXCQnIChhIGRvbGxhciBzaWduKS4iIiIsCiAgICAgIGFyZ3VtZW50czogeydjaGFyYWN0ZXInOiBjaGFyYWN0ZXIsICdjb2RlUG9pbnQnOiBjb2RlUG9pbnR9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIGludAogICAgICAgICAgICBjb2RlUG9pbnQpPiB0ZW1wbGF0ZU5vbkFzY2lpV2hpdGVzcGFjZSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvZGVQb2ludCk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgbm9uLUFTQ0lJIHNwYWNlIGNoYXJhY3RlciAjdW5pY29kZSBjYW4gb25seSBiZSB1c2VkIGluIHN0cmluZ3MgYW5kIGNvbW1lbnRzLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTm9uQXNjaWlXaGl0ZXNwYWNlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihpbnQgY29kZVBvaW50KT4gY29kZU5vbkFzY2lpV2hpdGVzcGFjZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvZGVQb2ludCk+KAogICAgICAgICJOb25Bc2NpaVdoaXRlc3BhY2UiLCB0ZW1wbGF0ZU5vbkFzY2lpV2hpdGVzcGFjZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSUxMRUdBTF9DSEFSQUNURVIiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTm9uQXNjaWlXaGl0ZXNwYWNlKGludCBjb2RlUG9pbnQpIHsKICBTdHJpbmcgdW5pY29kZSA9CiAgICAgICJVKyR7Y29kZVBvaW50LnRvUmFkaXhTdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkucGFkTGVmdCg0LCAnMCcpfSI7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVOb25Bc2NpaVdoaXRlc3BhY2UsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgbm9uLUFTQ0lJIHNwYWNlIGNoYXJhY3RlciAke3VuaWNvZGV9IGNhbiBvbmx5IGJlIHVzZWQgaW4gc3RyaW5ncyBhbmQgY29tbWVudHMuIiIiLAogICAgICBhcmd1bWVudHM6IHsnY29kZVBvaW50JzogY29kZVBvaW50fSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU5vbkNvbnN0Q29uc3RydWN0b3IgPSBtZXNzYWdlTm9uQ29uc3RDb25zdHJ1Y3RvcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VOb25Db25zdENvbnN0cnVjdG9yID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTm9uQ29uc3RDb25zdHJ1Y3RvciIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0NPTlNUQU5UX0VYUFJFU1NJT04iXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkNhbm5vdCBpbnZva2UgYSBub24tJ2NvbnN0JyBjb25zdHJ1Y3RvciB3aGVyZSBhIGNvbnN0IGV4cHJlc3Npb24gaXMgZXhwZWN0ZWQuIiIiLAogICAgdGlwOiByIiIiVHJ5IHVzaW5nIGEgY29uc3RydWN0b3Igb3IgZmFjdG9yeSB0aGF0IGlzICdjb25zdCcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU5vbkNvbnN0RmFjdG9yeSA9IG1lc3NhZ2VOb25Db25zdEZhY3Rvcnk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlTm9uQ29uc3RGYWN0b3J5ID0gY29uc3QgTWVzc2FnZUNvZGUoIk5vbkNvbnN0RmFjdG9yeSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0NPTlNUQU5UX0VYUFJFU1NJT04iXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkNhbm5vdCBpbnZva2UgYSBub24tJ2NvbnN0JyBmYWN0b3J5IHdoZXJlIGEgY29uc3QgZXhwcmVzc2lvbiBpcyBleHBlY3RlZC4iIiIsCiAgICB0aXA6IHIiIiJUcnkgdXNpbmcgYSBjb25zdHJ1Y3RvciBvciBmYWN0b3J5IHRoYXQgaXMgJ2NvbnN0Jy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTm9uSW5zdGFuY2VUeXBlVmFyaWFibGVVc2UgPQogICAgbWVzc2FnZU5vbkluc3RhbmNlVHlwZVZhcmlhYmxlVXNlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU5vbkluc3RhbmNlVHlwZVZhcmlhYmxlVXNlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiTm9uSW5zdGFuY2VUeXBlVmFyaWFibGVVc2UiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfUEFSQU1FVEVSX1JFRkVSRU5DRURfQllfU1RBVElDIl0sCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nLAogICAgbWVzc2FnZTogciIiIkNhbiBvbmx5IHVzZSB0eXBlIHZhcmlhYmxlcyBpbiBpbnN0YW5jZSBtZXRob2RzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVOb25OdWxsQXdhcmVTcHJlYWRJc051bGwgPSBtZXNzYWdlTm9uTnVsbEF3YXJlU3ByZWFkSXNOdWxsOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU5vbk51bGxBd2FyZVNwcmVhZElzTnVsbCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk5vbk51bGxBd2FyZVNwcmVhZElzTnVsbCIsCiAgICBtZXNzYWdlOiByIiIiQ2FuJ3Qgc3ByZWFkIGEgdmFsdWUgd2l0aCBzdGF0aWMgdHlwZSBOdWxsLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVOb25QYXJ0T2ZEaXJlY3RpdmVJblBhcnQgPSBtZXNzYWdlTm9uUGFydE9mRGlyZWN0aXZlSW5QYXJ0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU5vblBhcnRPZkRpcmVjdGl2ZUluUGFydCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk5vblBhcnRPZkRpcmVjdGl2ZUluUGFydCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9OX1BBUlRfT0ZfRElSRUNUSVZFX0lOX1BBUlQiXSwKICAgIG1lc3NhZ2U6IHIiIiJUaGUgcGFydC1vZiBkaXJlY3RpdmUgbXVzdCBiZSB0aGUgb25seSBkaXJlY3RpdmUgaW4gYSBwYXJ0LiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IHJlbW92aW5nIHRoZSBvdGhlciBkaXJlY3RpdmVzLCBvciBtb3ZpbmcgdGhlbSB0byB0aGUgbGlicmFyeSBmb3Igd2hpY2ggdGhpcyBpcyBhIHBhcnQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVOb25TaW1wbGVCb3VuZFZpYVJlZmVyZW5jZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiQm91bmQgb2YgdGhpcyB2YXJpYWJsZSByZWZlcmVuY2VzIHJhdyB0eXBlICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTm9uU2ltcGxlQm91bmRWaWFSZWZlcmVuY2UpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZU5vblNpbXBsZUJvdW5kVmlhUmVmZXJlbmNlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJOb25TaW1wbGVCb3VuZFZpYVJlZmVyZW5jZSIsIHRlbXBsYXRlTm9uU2ltcGxlQm91bmRWaWFSZWZlcmVuY2UsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c05vblNpbXBsZUJvdW5kVmlhUmVmZXJlbmNlKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTm9uU2ltcGxlQm91bmRWaWFSZWZlcmVuY2UsCiAgICAgIG1lc3NhZ2U6ICIiIkJvdW5kIG9mIHRoaXMgdmFyaWFibGUgcmVmZXJlbmNlcyByYXcgdHlwZSAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVOb25TaW1wbGVCb3VuZFZpYVZhcmlhYmxlID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJCb3VuZCBvZiB0aGlzIHZhcmlhYmxlIHJlZmVyZW5jZXMgdmFyaWFibGUgJyNuYW1lJyBmcm9tIHRoZSBzYW1lIGRlY2xhcmF0aW9uLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTm9uU2ltcGxlQm91bmRWaWFWYXJpYWJsZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlTm9uU2ltcGxlQm91bmRWaWFWYXJpYWJsZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiTm9uU2ltcGxlQm91bmRWaWFWYXJpYWJsZSIsIHRlbXBsYXRlTm9uU2ltcGxlQm91bmRWaWFWYXJpYWJsZSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTm9uU2ltcGxlQm91bmRWaWFWYXJpYWJsZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU5vblNpbXBsZUJvdW5kVmlhVmFyaWFibGUsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJCb3VuZCBvZiB0aGlzIHZhcmlhYmxlIHJlZmVyZW5jZXMgdmFyaWFibGUgJyR7bmFtZX0nIGZyb20gdGhlIHNhbWUgZGVjbGFyYXRpb24uIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTm90QUNvbnN0YW50RXhwcmVzc2lvbiA9IG1lc3NhZ2VOb3RBQ29uc3RhbnRFeHByZXNzaW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU5vdEFDb25zdGFudEV4cHJlc3Npb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJOb3RBQ29uc3RhbnRFeHByZXNzaW9uIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT1RfQ09OU1RBTlRfRVhQUkVTU0lPTiJdLAogICAgbWVzc2FnZTogciIiIk5vdCBhIGNvbnN0YW50IGV4cHJlc3Npb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZTIpPiB0ZW1wbGF0ZU5vdEFQcmVmaXhJblR5cGVBbm5vdGF0aW9uID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIicjbmFtZS4jbmFtZTInIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlIGJlY2F1c2UgJyNuYW1lJyBkb2Vzbid0IHJlZmVyIHRvIGFuIGltcG9ydCBwcmVmaXguIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNOb3RBUHJlZml4SW5UeXBlQW5ub3RhdGlvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlTm90QVByZWZpeEluVHlwZUFubm90YXRpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgICAgICAiTm90QVByZWZpeEluVHlwZUFubm90YXRpb24iLCB0ZW1wbGF0ZU5vdEFQcmVmaXhJblR5cGVBbm5vdGF0aW9uLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT1RfQV9UWVBFIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTm90QVByZWZpeEluVHlwZUFubm90YXRpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVOb3RBUHJlZml4SW5UeXBlQW5ub3RhdGlvbiwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIicke25hbWV9LiR7bmFtZTJ9JyBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZSBiZWNhdXNlICcke25hbWV9JyBkb2Vzbid0IHJlZmVyIHRvIGFuIGltcG9ydCBwcmVmaXguIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICduYW1lMic6IG5hbWUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZU5vdEFUeXBlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiInI25hbWUnIGlzbid0IGEgdHlwZS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNOb3RBVHlwZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlTm90QVR5cGUgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oIk5vdEFUeXBlIiwgdGVtcGxhdGVOb3RBVHlwZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0FfVFlQRSJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c05vdEFUeXBlKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTm90QVR5cGUsCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpc24ndCBhIHR5cGUuIiIiLCBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlTm90QVR5cGVDb250ZXh0ID0gbWVzc2FnZU5vdEFUeXBlQ29udGV4dDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VOb3RBVHlwZUNvbnRleHQgPSBjb25zdCBNZXNzYWdlQ29kZSgiTm90QVR5cGVDb250ZXh0IiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LCBtZXNzYWdlOiByIiIiVGhpcyBpc24ndCBhIHR5cGUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU5vdEFuTHZhbHVlID0gbWVzc2FnZU5vdEFuTHZhbHVlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU5vdEFuTHZhbHVlID0gY29uc3QgTWVzc2FnZUNvZGUoIk5vdEFuTHZhbHVlIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT1RfQU5fTFZBTFVFIl0sCiAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgYXNzaWduIHRvIHRoaXMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiB0ZW1wbGF0ZU5vdEJpbmFyeU9wZXJhdG9yID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiInI2xleGVtZScgaXNuJ3QgYSBiaW5hcnkgb3BlcmF0b3IuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTm90QmluYXJ5T3BlcmF0b3IpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gY29kZU5vdEJpbmFyeU9wZXJhdG9yID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICJOb3RCaW5hcnlPcGVyYXRvciIsCiAgdGVtcGxhdGVOb3RCaW5hcnlPcGVyYXRvciwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNOb3RCaW5hcnlPcGVyYXRvcihUb2tlbiB0b2tlbikgewogIFN0cmluZyBsZXhlbWUgPSB0b2tlbi5sZXhlbWU7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVOb3RCaW5hcnlPcGVyYXRvciwKICAgICAgbWVzc2FnZTogIiIiJyR7bGV4ZW1lfScgaXNuJ3QgYSBiaW5hcnkgb3BlcmF0b3IuIiIiLAogICAgICBhcmd1bWVudHM6IHsndG9rZW4nOiB0b2tlbn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiB0ZW1wbGF0ZU5vdENvbnN0YW50RXhwcmVzc2lvbiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiIjc3RyaW5nIGlzIG5vdCBhIGNvbnN0YW50IGV4cHJlc3Npb24uIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzTm90Q29uc3RhbnRFeHByZXNzaW9uKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gY29kZU5vdENvbnN0YW50RXhwcmVzc2lvbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+KAogICAgICAgICJOb3RDb25zdGFudEV4cHJlc3Npb24iLCB0ZW1wbGF0ZU5vdENvbnN0YW50RXhwcmVzc2lvbiwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiTk9UX0NPTlNUQU5UX0VYUFJFU1NJT04iXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzTm90Q29uc3RhbnRFeHByZXNzaW9uKFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlTm90Q29uc3RhbnRFeHByZXNzaW9uLAogICAgICBtZXNzYWdlOiAiIiIke3N0cmluZ30gaXMgbm90IGEgY29uc3RhbnQgZXhwcmVzc2lvbi4iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlT2JqZWN0RXh0ZW5kcyA9IG1lc3NhZ2VPYmplY3RFeHRlbmRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZU9iamVjdEV4dGVuZHMgPSBjb25zdCBNZXNzYWdlQ29kZSgiT2JqZWN0RXh0ZW5kcyIsCiAgICBtZXNzYWdlOiByIiIiVGhlIGNsYXNzICdPYmplY3QnIGNhbid0IGhhdmUgYSBzdXBlcmNsYXNzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVPYmplY3RJbXBsZW1lbnRzID0gbWVzc2FnZU9iamVjdEltcGxlbWVudHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlT2JqZWN0SW1wbGVtZW50cyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIk9iamVjdEltcGxlbWVudHMiLAogICAgbWVzc2FnZTogciIiIlRoZSBjbGFzcyAnT2JqZWN0JyBjYW4ndCBpbXBsZW1lbnQgYW55dGhpbmcuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZU9iamVjdE1peGVzSW4gPSBtZXNzYWdlT2JqZWN0TWl4ZXNJbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VPYmplY3RNaXhlc0luID0gY29uc3QgTWVzc2FnZUNvZGUoIk9iamVjdE1peGVzSW4iLAogICAgbWVzc2FnZTogciIiIlRoZSBjbGFzcyAnT2JqZWN0JyBjYW4ndCB1c2UgbWl4aW5zLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVPbmx5VHJ5ID0gbWVzc2FnZU9ubHlUcnk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlT25seVRyeSA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJPbmx5VHJ5IiwKICAgIGluZGV4OiAyMCwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkEgdHJ5IGJsb2NrIG11c3QgYmUgZm9sbG93ZWQgYnkgYW4gJ29uJywgJ2NhdGNoJywgb3IgJ2ZpbmFsbHknIGNsYXVzZS4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSBhZGRpbmcgZWl0aGVyIGEgY2F0Y2ggb3IgZmluYWxseSBjbGF1c2UsIG9yIHJlbW92ZSB0aGUgdHJ5IHN0YXRlbWVudC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lKT4gdGVtcGxhdGVPcGVyYXRvck1pbnVzUGFyYW1ldGVyTWlzbWF0Y2ggPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJPcGVyYXRvciAnI25hbWUnIHNob3VsZCBoYXZlIHplcm8gb3Igb25lIHBhcmFtZXRlci4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiV2l0aCB6ZXJvIHBhcmFtZXRlcnMsIGl0IGhhcyB0aGUgc3ludGFjdGljIGZvcm0gJy1hJywgZm9ybWFsbHkga25vd24gYXMgJ3VuYXJ5LScuIFdpdGggb25lIHBhcmFtZXRlciwgaXQgaGFzIHRoZSBzeW50YWN0aWMgZm9ybSAnYSAtIGInLCBmb3JtYWxseSBrbm93biBhcyAnLScuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPcGVyYXRvck1pbnVzUGFyYW1ldGVyTWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZU9wZXJhdG9yTWludXNQYXJhbWV0ZXJNaXNtYXRjaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigiT3BlcmF0b3JNaW51c1BhcmFtZXRlck1pc21hdGNoIiwKICAgICAgICB0ZW1wbGF0ZU9wZXJhdG9yTWludXNQYXJhbWV0ZXJNaXNtYXRjaCwgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bCiAgIldST05HX05VTUJFUl9PRl9QQVJBTUVURVJTX0ZPUl9PUEVSQVRPUl9NSU5VUyIKXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzT3BlcmF0b3JNaW51c1BhcmFtZXRlck1pc21hdGNoKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlT3BlcmF0b3JNaW51c1BhcmFtZXRlck1pc21hdGNoLAogICAgICBtZXNzYWdlOiAiIiJPcGVyYXRvciAnJHtuYW1lfScgc2hvdWxkIGhhdmUgemVybyBvciBvbmUgcGFyYW1ldGVyLiIiIiwKICAgICAgdGlwOgogICAgICAgICAgIiIiV2l0aCB6ZXJvIHBhcmFtZXRlcnMsIGl0IGhhcyB0aGUgc3ludGFjdGljIGZvcm0gJy1hJywgZm9ybWFsbHkga25vd24gYXMgJ3VuYXJ5LScuIFdpdGggb25lIHBhcmFtZXRlciwgaXQgaGFzIHRoZSBzeW50YWN0aWMgZm9ybSAnYSAtIGInLCBmb3JtYWxseSBrbm93biBhcyAnLScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICB0ZW1wbGF0ZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gwID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJPcGVyYXRvciAnI25hbWUnIHNob3VsZG4ndCBoYXZlIGFueSBwYXJhbWV0ZXJzLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c09wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gwKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAiT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDAiLAogIHRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDAsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDAoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMCwKICAgICAgbWVzc2FnZTogIiIiT3BlcmF0b3IgJyR7bmFtZX0nIHNob3VsZG4ndCBoYXZlIGFueSBwYXJhbWV0ZXJzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiT3BlcmF0b3IgJyNuYW1lJyBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBwYXJhbWV0ZXIuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDEpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gxID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMSIsIHRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDEsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIldST05HX05VTUJFUl9PRl9QQVJBTUVURVJTX0ZPUl9PUEVSQVRPUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gxLAogICAgICBtZXNzYWdlOiAiIiJPcGVyYXRvciAnJHtuYW1lfScgc2hvdWxkIGhhdmUgZXhhY3RseSBvbmUgcGFyYW1ldGVyLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiT3BlcmF0b3IgJyNuYW1lJyBzaG91bGQgaGF2ZSBleGFjdGx5IHR3byBwYXJhbWV0ZXJzLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c09wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDIiLCB0ZW1wbGF0ZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJXUk9OR19OVU1CRVJfT0ZfUEFSQU1FVEVSU19GT1JfT1BFUkFUT1IiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDIoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMiwKICAgICAgbWVzc2FnZTogIiIiT3BlcmF0b3IgJyR7bmFtZX0nIHNob3VsZCBoYXZlIGV4YWN0bHkgdHdvIHBhcmFtZXRlcnMuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlT3BlcmF0b3JXaXRoT3B0aW9uYWxGb3JtYWxzID0KICAgIG1lc3NhZ2VPcGVyYXRvcldpdGhPcHRpb25hbEZvcm1hbHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlT3BlcmF0b3JXaXRoT3B0aW9uYWxGb3JtYWxzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiT3BlcmF0b3JXaXRoT3B0aW9uYWxGb3JtYWxzIiwKICAgIG1lc3NhZ2U6IHIiIiJBbiBvcGVyYXRvciBjYW4ndCBoYXZlIG9wdGlvbmFsIHBhcmFtZXRlcnMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZU92ZXJyaWRkZW5NZXRob2RDYXVzZSA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVGhpcyBpcyB0aGUgb3ZlcnJpZGRlbiBtZXRob2QgKCcjbmFtZScpLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c092ZXJyaWRkZW5NZXRob2RDYXVzZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlT3ZlcnJpZGRlbk1ldGhvZENhdXNlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJPdmVycmlkZGVuTWV0aG9kQ2F1c2UiLCB0ZW1wbGF0ZU92ZXJyaWRkZW5NZXRob2RDYXVzZSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzT3ZlcnJpZGRlbk1ldGhvZENhdXNlKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlT3ZlcnJpZGRlbk1ldGhvZENhdXNlLAogICAgICBtZXNzYWdlOiAiIiJUaGlzIGlzIHRoZSBvdmVycmlkZGVuIG1ldGhvZCAoJyR7bmFtZX0nKS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVPdmVycmlkZUZld2VyTmFtZWRBcmd1bWVudHMgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIG1ldGhvZCAnI25hbWUnIGhhcyBmZXdlciBuYW1lZCBhcmd1bWVudHMgdGhhbiB0aG9zZSBvZiBvdmVycmlkZGVuIG1ldGhvZCAnI25hbWUyJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c092ZXJyaWRlRmV3ZXJOYW1lZEFyZ3VtZW50cyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlT3ZlcnJpZGVGZXdlck5hbWVkQXJndW1lbnRzID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIk92ZXJyaWRlRmV3ZXJOYW1lZEFyZ3VtZW50cyIsIHRlbXBsYXRlT3ZlcnJpZGVGZXdlck5hbWVkQXJndW1lbnRzLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX09WRVJSSURFX05BTUVEIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzT3ZlcnJpZGVGZXdlck5hbWVkQXJndW1lbnRzKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlT3ZlcnJpZGVGZXdlck5hbWVkQXJndW1lbnRzLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIG1ldGhvZCAnJHtuYW1lfScgaGFzIGZld2VyIG5hbWVkIGFyZ3VtZW50cyB0aGFuIHRob3NlIG9mIG92ZXJyaWRkZW4gbWV0aG9kICcke25hbWUyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICduYW1lMic6IG5hbWUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZTIpPiB0ZW1wbGF0ZU92ZXJyaWRlRmV3ZXJQb3NpdGlvbmFsQXJndW1lbnRzID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBtZXRob2QgJyNuYW1lJyBoYXMgZmV3ZXIgcG9zaXRpb25hbCBhcmd1bWVudHMgdGhhbiB0aG9zZSBvZiBvdmVycmlkZGVuIG1ldGhvZCAnI25hbWUyJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c092ZXJyaWRlRmV3ZXJQb3NpdGlvbmFsQXJndW1lbnRzKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4KICAgIGNvZGVPdmVycmlkZUZld2VyUG9zaXRpb25hbEFyZ3VtZW50cyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJPdmVycmlkZUZld2VyUG9zaXRpb25hbEFyZ3VtZW50cyIsCiAgICAgICAgdGVtcGxhdGVPdmVycmlkZUZld2VyUG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9PVkVSUklERV9QT1NJVElPTkFMIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzT3ZlcnJpZGVGZXdlclBvc2l0aW9uYWxBcmd1bWVudHMoCiAgICBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU92ZXJyaWRlRmV3ZXJQb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIG1ldGhvZCAnJHtuYW1lfScgaGFzIGZld2VyIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYW4gdGhvc2Ugb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJyR7bmFtZTJ9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ25hbWUyJzogbmFtZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZyBuYW1lMiwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZTMpPiB0ZW1wbGF0ZU92ZXJyaWRlTWlzbWF0Y2hOYW1lZFBhcmFtZXRlciA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMiwgU3RyaW5nIG5hbWUzKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBtZXRob2QgJyNuYW1lJyBkb2Vzbid0IGhhdmUgdGhlIG5hbWVkIHBhcmFtZXRlciAnI25hbWUyJyBvZiBvdmVycmlkZGVuIG1ldGhvZCAnI25hbWUzJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c092ZXJyaWRlTWlzbWF0Y2hOYW1lZFBhcmFtZXRlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMiwgU3RyaW5nIG5hbWUzKT4KICAgIGNvZGVPdmVycmlkZU1pc21hdGNoTmFtZWRQYXJhbWV0ZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIsIFN0cmluZyBuYW1lMyk+KAogICAgICAgICJPdmVycmlkZU1pc21hdGNoTmFtZWRQYXJhbWV0ZXIiLAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVNaXNtYXRjaE5hbWVkUGFyYW1ldGVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX09WRVJSSURFX05BTUVEIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzT3ZlcnJpZGVNaXNtYXRjaE5hbWVkUGFyYW1ldGVyKAogICAgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMiwgU3RyaW5nIG5hbWUzKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICBpZiAobmFtZTMuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUzID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVPdmVycmlkZU1pc21hdGNoTmFtZWRQYXJhbWV0ZXIsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgbWV0aG9kICcke25hbWV9JyBkb2Vzbid0IGhhdmUgdGhlIG5hbWVkIHBhcmFtZXRlciAnJHtuYW1lMn0nIG9mIG92ZXJyaWRkZW4gbWV0aG9kICcke25hbWUzfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICduYW1lMic6IG5hbWUyLCAnbmFtZTMnOiBuYW1lM30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVPdmVycmlkZU1vcmVSZXF1aXJlZEFyZ3VtZW50cyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgbWV0aG9kICcjbmFtZScgaGFzIG1vcmUgcmVxdWlyZWQgYXJndW1lbnRzIHRoYW4gdGhvc2Ugb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJyNuYW1lMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPdmVycmlkZU1vcmVSZXF1aXJlZEFyZ3VtZW50cyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHMgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgICAgICAiT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHMiLCB0ZW1wbGF0ZU92ZXJyaWRlTW9yZVJlcXVpcmVkQXJndW1lbnRzLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX09WRVJSSURFX1JFUVVJUkVEIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHMoU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMikgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBpZiAobmFtZTIuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUyID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lMik7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVPdmVycmlkZU1vcmVSZXF1aXJlZEFyZ3VtZW50cywKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBtZXRob2QgJyR7bmFtZX0nIGhhcyBtb3JlIHJlcXVpcmVkIGFyZ3VtZW50cyB0aGFuIHRob3NlIG9mIG92ZXJyaWRkZW4gbWV0aG9kICcke25hbWUyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICduYW1lMic6IG5hbWUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcgbmFtZTIsCiAgICAgICAgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgRGFydFR5cGUgX3R5cGUyLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMyk+IHRlbXBsYXRlT3ZlcnJpZGVUeXBlTWlzbWF0Y2hQYXJhbWV0ZXIgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICAgICAgU3RyaW5nIG5hbWUyLAogICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICAgICAgRGFydFR5cGUgX3R5cGUyLAogICAgICAgICAgICBTdHJpbmcKICAgICAgICAgICAgICAgIG5hbWUzKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBwYXJhbWV0ZXIgJyNuYW1lJyBvZiB0aGUgbWV0aG9kICcjbmFtZTInIGhhcyB0eXBlICcjdHlwZScsIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIHR5cGUsICcjdHlwZTInLCBpbiB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsICcjbmFtZTMnLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJDaGFuZ2UgdG8gYSBzdXBlcnR5cGUgb2YgJyN0eXBlMicsIG9yLCBmb3IgYSBjb3ZhcmlhbnQgcGFyYW1ldGVyLCBhIHN1YnR5cGUuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPdmVycmlkZVR5cGVNaXNtYXRjaFBhcmFtZXRlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMiwgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgICAgIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUzKT4gY29kZU92ZXJyaWRlVHlwZU1pc21hdGNoUGFyYW1ldGVyID0KICAgIGNvbnN0IENvZGU8CiAgICAgICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMiwgRGFydFR5cGUgX3R5cGUsCiAgICAgICAgICAgICAgICBEYXJ0VHlwZSBfdHlwZTIsIFN0cmluZyBuYW1lMyk+KAogICAgICAgICJPdmVycmlkZVR5cGVNaXNtYXRjaFBhcmFtZXRlciIsIHRlbXBsYXRlT3ZlcnJpZGVUeXBlTWlzbWF0Y2hQYXJhbWV0ZXIsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfTUVUSE9EX09WRVJSSURFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c092ZXJyaWRlVHlwZU1pc21hdGNoUGFyYW1ldGVyKAogICAgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMiwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUzKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBMaXN0PE9iamVjdD4gdHlwZTJQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlMik7CiAgaWYgKG5hbWUzLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMyA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTMpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU92ZXJyaWRlVHlwZU1pc21hdGNoUGFyYW1ldGVyLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIHBhcmFtZXRlciAnJHtuYW1lfScgb2YgdGhlIG1ldGhvZCAnJHtuYW1lMn0nIGhhcyB0eXBlICcke3R5cGV9Jywgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgdHlwZSwgJyR7dHlwZTJ9JywgaW4gdGhlIG92ZXJyaWRkZW4gbWV0aG9kLCAnJHtuYW1lM30nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOiAiIiJDaGFuZ2UgdG8gYSBzdXBlcnR5cGUgb2YgJyR7dHlwZTJ9Jywgb3IsIGZvciBhIGNvdmFyaWFudCBwYXJhbWV0ZXIsIGEgc3VidHlwZS4iIiIsCiAgICAgIGFyZ3VtZW50czogewogICAgICAgICduYW1lJzogbmFtZSwKICAgICAgICAnbmFtZTInOiBuYW1lMiwKICAgICAgICAndHlwZSc6IF90eXBlLAogICAgICAgICd0eXBlMic6IF90eXBlMiwKICAgICAgICAnbmFtZTMnOiBuYW1lMwogICAgICB9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlIF90eXBlMiwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZTIpPiB0ZW1wbGF0ZU92ZXJyaWRlVHlwZU1pc21hdGNoUmV0dXJuVHlwZSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgIFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIHJldHVybiB0eXBlIG9mIHRoZSBtZXRob2QgJyNuYW1lJyBpcyAnI3R5cGUnLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUsICcjdHlwZTInLCBvZiB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsICcjbmFtZTInLiIiIiwKICAgIHRpcFRlbXBsYXRlOiByIiIiQ2hhbmdlIHRvIGEgc3VidHlwZSBvZiAnI3R5cGUyJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c092ZXJyaWRlVHlwZU1pc21hdGNoUmV0dXJuVHlwZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgIFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZTIpPgogICAgY29kZU92ZXJyaWRlVHlwZU1pc21hdGNoUmV0dXJuVHlwZSA9IGNvbnN0IENvZGU8CiAgICAgICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgICAgICAgICBTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMiwgU3RyaW5nIG5hbWUyKT4oCiAgICAgICAgIk92ZXJyaWRlVHlwZU1pc21hdGNoUmV0dXJuVHlwZSIsCiAgICAgICAgdGVtcGxhdGVPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfTUVUSE9EX09WRVJSSURFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c092ZXJyaWRlVHlwZU1pc21hdGNoUmV0dXJuVHlwZSgKICAgIFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyLCBTdHJpbmcgbmFtZTIpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGUsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIG1ldGhvZCAnJHtuYW1lfScgaXMgJyR7dHlwZX0nLCB3aGljaCBkb2VzIG5vdCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUsICcke3R5cGUyfScsIG9mIHRoZSBvdmVycmlkZGVuIG1ldGhvZCwgJyR7bmFtZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiQ2hhbmdlIHRvIGEgc3VidHlwZSBvZiAnJHt0eXBlMn0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7CiAgICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAgICd0eXBlJzogX3R5cGUsCiAgICAgICAgJ3R5cGUyJzogX3R5cGUyLAogICAgICAgICduYW1lMic6IG5hbWUyCiAgICAgIH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUyKT4gdGVtcGxhdGVPdmVycmlkZVR5cGVWYXJpYWJsZXNNaXNtYXRjaCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJEZWNsYXJlZCB0eXBlIHZhcmlhYmxlcyBvZiAnI25hbWUnIGRvZXNuJ3QgbWF0Y2ggdGhvc2Ugb24gb3ZlcnJpZGRlbiBtZXRob2QgJyNuYW1lMicuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNPdmVycmlkZVR5cGVWYXJpYWJsZXNNaXNtYXRjaCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2ggPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgICAgICAiT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2giLCB0ZW1wbGF0ZU92ZXJyaWRlVHlwZVZhcmlhYmxlc01pc21hdGNoLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX01FVEhPRF9PVkVSUklERV9UWVBFX1BBUkFNRVRFUlMiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNPdmVycmlkZVR5cGVWYXJpYWJsZXNNaXNtYXRjaChTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZU92ZXJyaWRlVHlwZVZhcmlhYmxlc01pc21hdGNoLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiRGVjbGFyZWQgdHlwZSB2YXJpYWJsZXMgb2YgJyR7bmFtZX0nIGRvZXNuJ3QgbWF0Y2ggdGhvc2Ugb24gb3ZlcnJpZGRlbiBtZXRob2QgJyR7bmFtZTJ9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ25hbWUyJzogbmFtZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPiB0ZW1wbGF0ZVBhY2thZ2VOb3RGb3VuZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkNvdWxkIG5vdCByZXNvbHZlIHRoZSBwYWNrYWdlICcjbmFtZScgaW4gJyN1cmknLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1BhY2thZ2VOb3RGb3VuZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4gY29kZVBhY2thZ2VOb3RGb3VuZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4oCiAgIlBhY2thZ2VOb3RGb3VuZCIsCiAgdGVtcGxhdGVQYWNrYWdlTm90Rm91bmQsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzUGFja2FnZU5vdEZvdW5kKFN0cmluZyBuYW1lLCBVcmkgdXJpXykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVBhY2thZ2VOb3RGb3VuZCwKICAgICAgbWVzc2FnZTogIiIiQ291bGQgbm90IHJlc29sdmUgdGhlIHBhY2thZ2UgJyR7bmFtZX0nIGluICcke3VyaX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndXJpJzogdXJpX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiB0ZW1wbGF0ZVBhY2thZ2VzRmlsZUZvcm1hdCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJQcm9ibGVtIGluIHBhY2thZ2VzIGNvbmZpZ3VyYXRpb24gZmlsZTogI3N0cmluZyIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1BhY2thZ2VzRmlsZUZvcm1hdCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZyk+IGNvZGVQYWNrYWdlc0ZpbGVGb3JtYXQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAiUGFja2FnZXNGaWxlRm9ybWF0IiwKICB0ZW1wbGF0ZVBhY2thZ2VzRmlsZUZvcm1hdCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNQYWNrYWdlc0ZpbGVGb3JtYXQoU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVQYWNrYWdlc0ZpbGVGb3JtYXQsCiAgICAgIG1lc3NhZ2U6ICIiIlByb2JsZW0gaW4gcGFja2FnZXMgY29uZmlndXJhdGlvbiBmaWxlOiAke3N0cmluZ30iIiIsCiAgICAgIGFyZ3VtZW50czogeydzdHJpbmcnOiBzdHJpbmd9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGFydEV4cG9ydCA9IG1lc3NhZ2VQYXJ0RXhwb3J0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhcnRFeHBvcnQgPSBjb25zdCBNZXNzYWdlQ29kZSgiUGFydEV4cG9ydCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRVhQT1JUX09GX05PTl9MSUJSQVJZIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJDYW4ndCBleHBvcnQgdGhpcyBmaWxlIGJlY2F1c2UgaXQgY29udGFpbnMgYSAncGFydCBvZicgZGVjbGFyYXRpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVBhcnRFeHBvcnRDb250ZXh0ID0gbWVzc2FnZVBhcnRFeHBvcnRDb250ZXh0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhcnRFeHBvcnRDb250ZXh0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUGFydEV4cG9ydENvbnRleHQiLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQsCiAgICBtZXNzYWdlOiByIiIiVGhpcyBpcyB0aGUgZmlsZSB0aGF0IGNhbid0IGJlIGV4cG9ydGVkLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQYXJ0SW5QYXJ0ID0gbWVzc2FnZVBhcnRJblBhcnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUGFydEluUGFydCA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJQYXJ0SW5QYXJ0IiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT05fUEFSVF9PRl9ESVJFQ1RJVkVfSU5fUEFSVCJdLAogICAgbWVzc2FnZTogciIiIkEgZmlsZSB0aGF0J3MgYSBwYXJ0IG9mIGEgbGlicmFyeSBjYW4ndCBoYXZlIHBhcnRzIGl0c2VsZi4iIiIsCiAgICB0aXA6IHIiIiJUcnkgbW92aW5nIHRoZSAncGFydCcgZGVjbGFyYXRpb24gdG8gdGhlIGNvbnRhaW5pbmcgbGlicmFyeS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGFydEluUGFydExpYnJhcnlDb250ZXh0ID0gbWVzc2FnZVBhcnRJblBhcnRMaWJyYXJ5Q29udGV4dDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQYXJ0SW5QYXJ0TGlicmFyeUNvbnRleHQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJQYXJ0SW5QYXJ0TGlicmFyeUNvbnRleHQiLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQsCiAgICBtZXNzYWdlOiByIiIiVGhpcyBpcyB0aGUgY29udGFpbmluZyBsaWJyYXJ5LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiB0ZW1wbGF0ZVBhcnRPZkluTGlicmFyeSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQ2FuJ3QgaW1wb3J0ICcjdXJpJywgYmVjYXVzZSBpdCBoYXMgYSAncGFydCBvZicgZGVjbGFyYXRpb24uIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGUgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uLCBvciB1c2luZyAnI3VyaScgYXMgYSBwYXJ0LiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzUGFydE9mSW5MaWJyYXJ5KTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IGNvZGVQYXJ0T2ZJbkxpYnJhcnkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICAgICAgIlBhcnRPZkluTGlicmFyeSIsIHRlbXBsYXRlUGFydE9mSW5MaWJyYXJ5LAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTVBPUlRfT0ZfTk9OX0xJQlJBUlkiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzUGFydE9mSW5MaWJyYXJ5KFVyaSB1cmlfKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVQYXJ0T2ZJbkxpYnJhcnksCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJDYW4ndCBpbXBvcnQgJyR7dXJpfScsIGJlY2F1c2UgaXQgaGFzIGEgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uLiIiIiwKICAgICAgdGlwOgogICAgICAgICAgIiIiVHJ5IHJlbW92aW5nIHRoZSAncGFydCBvZicgZGVjbGFyYXRpb24sIG9yIHVzaW5nICcke3VyaX0nIGFzIGEgcGFydC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBVcmkgdXJpXywKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZTIpPiB0ZW1wbGF0ZVBhcnRPZkxpYnJhcnlOYW1lTWlzbWF0Y2ggPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlVzaW5nICcjdXJpJyBhcyBwYXJ0IG9mICcjbmFtZScgYnV0IGl0cyAncGFydCBvZicgZGVjbGFyYXRpb24gc2F5cyAnI25hbWUyJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1BhcnRPZkxpYnJhcnlOYW1lTWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKT4KICAgIGNvZGVQYXJ0T2ZMaWJyYXJ5TmFtZU1pc21hdGNoID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+KAogICAgICAgICJQYXJ0T2ZMaWJyYXJ5TmFtZU1pc21hdGNoIiwgdGVtcGxhdGVQYXJ0T2ZMaWJyYXJ5TmFtZU1pc21hdGNoLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJQQVJUX09GX0RJRkZFUkVOVF9MSUJSQVJZIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzUGFydE9mTGlicmFyeU5hbWVNaXNtYXRjaCgKICAgIFVyaSB1cmlfLCBTdHJpbmcgbmFtZSwgU3RyaW5nIG5hbWUyKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIGlmIChuYW1lMi5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZTIgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUyKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVBhcnRPZkxpYnJhcnlOYW1lTWlzbWF0Y2gsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJVc2luZyAnJHt1cml9JyBhcyBwYXJ0IG9mICcke25hbWV9JyBidXQgaXRzICdwYXJ0IG9mJyBkZWNsYXJhdGlvbiBzYXlzICcke25hbWUyfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsndXJpJzogdXJpXywgJ25hbWUnOiBuYW1lLCAnbmFtZTInOiBuYW1lMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQYXJ0T2ZTZWxmID0gbWVzc2FnZVBhcnRPZlNlbGY7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUGFydE9mU2VsZiA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJQYXJ0T2ZTZWxmIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJQQVJUX09GX05PTl9QQVJUIl0sCiAgICBtZXNzYWdlOiByIiIiQSBmaWxlIGNhbid0IGJlIGEgcGFydCBvZiBpdHNlbGYuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVBhcnRPZlR3aWNlID0gbWVzc2FnZVBhcnRPZlR3aWNlOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhcnRPZlR3aWNlID0gY29uc3QgTWVzc2FnZUNvZGUoIlBhcnRPZlR3aWNlIiwKICAgIGluZGV4OiAyNSwKICAgIG1lc3NhZ2U6IHIiIiJPbmx5IG9uZSBwYXJ0LW9mIGRpcmVjdGl2ZSBtYXkgYmUgZGVjbGFyZWQgaW4gYSBmaWxlLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSBvZiB0aGUgcGFydC1vZiBkaXJlY3RpdmVzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQYXJ0T2ZUd29MaWJyYXJpZXMgPSBtZXNzYWdlUGFydE9mVHdvTGlicmFyaWVzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhcnRPZlR3b0xpYnJhcmllcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlBhcnRPZlR3b0xpYnJhcmllcyIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUEFSVF9PRl9ESUZGRVJFTlRfTElCUkFSWSJdLAogICAgbWVzc2FnZTogciIiIkEgZmlsZSBjYW4ndCBiZSBwYXJ0IG9mIG1vcmUgdGhhbiBvbmUgbGlicmFyeS4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSBtb3ZpbmcgdGhlIHNoYXJlZCBkZWNsYXJhdGlvbnMgaW50byB0aGUgbGlicmFyaWVzLCBvciBpbnRvIGEgbmV3IGxpYnJhcnkuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVBhcnRPZlR3b0xpYnJhcmllc0NvbnRleHQgPQogICAgbWVzc2FnZVBhcnRPZlR3b0xpYnJhcmllc0NvbnRleHQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUGFydE9mVHdvTGlicmFyaWVzQ29udGV4dCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlBhcnRPZlR3b0xpYnJhcmllc0NvbnRleHQiLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQsCiAgICBtZXNzYWdlOiByIiIiVXNlZCBhcyBhIHBhcnQgaW4gdGhpcyBsaWJyYXJ5LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgVXJpIHVyaV8sCiAgICAgICAgVXJpIHVyaTJfLAogICAgICAgIFVyaQogICAgICAgICAgICB1cmkzXyk+IHRlbXBsYXRlUGFydE9mVXJpTWlzbWF0Y2ggPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfLCBVcmkgdXJpMl8sIFVyaSB1cmkzXyk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJVc2luZyAnI3VyaScgYXMgcGFydCBvZiAnI3VyaTInIGJ1dCBpdHMgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uIHNheXMgJyN1cmkzJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1BhcnRPZlVyaU1pc21hdGNoKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgVXJpIHVyaTJfLCBVcmkgdXJpM18pPgogICAgY29kZVBhcnRPZlVyaU1pc21hdGNoID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXywgVXJpIHVyaTJfLCBVcmkgdXJpM18pPigKICAgICAgICAiUGFydE9mVXJpTWlzbWF0Y2giLCB0ZW1wbGF0ZVBhcnRPZlVyaU1pc21hdGNoLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJQQVJUX09GX0RJRkZFUkVOVF9MSUJSQVJZIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzUGFydE9mVXJpTWlzbWF0Y2goVXJpIHVyaV8sIFVyaSB1cmkyXywgVXJpIHVyaTNfKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgU3RyaW5nIHVyaTIgPSByZWxhdGl2aXplVXJpKHVyaTJfKTsKICBTdHJpbmcgdXJpMyA9IHJlbGF0aXZpemVVcmkodXJpM18pOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlUGFydE9mVXJpTWlzbWF0Y2gsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJVc2luZyAnJHt1cml9JyBhcyBwYXJ0IG9mICcke3VyaTJ9JyBidXQgaXRzICdwYXJ0IG9mJyBkZWNsYXJhdGlvbiBzYXlzICcke3VyaTN9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd1cmknOiB1cmlfLCAndXJpMic6IHVyaTJfLCAndXJpMyc6IHVyaTNffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBVcmkgdXJpXywKICAgICAgICBVcmkgdXJpMl8sCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZVBhcnRPZlVzZVVyaSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFVyaSB1cmkyXywgU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVXNpbmcgJyN1cmknIGFzIHBhcnQgb2YgJyN1cmkyJyBidXQgaXRzICdwYXJ0IG9mJyBkZWNsYXJhdGlvbiBzYXlzICcjbmFtZScuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBjaGFuZ2luZyB0aGUgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uIHRvIHVzZSBhIHJlbGF0aXZlIGZpbGUgbmFtZS4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1BhcnRPZlVzZVVyaSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFVyaSB1cmkyXywgU3RyaW5nIG5hbWUpPgogICAgY29kZVBhcnRPZlVzZVVyaSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8sIFVyaSB1cmkyXywgU3RyaW5nIG5hbWUpPigKICAgICAgICAiUGFydE9mVXNlVXJpIiwgdGVtcGxhdGVQYXJ0T2ZVc2VVcmksCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlBBUlRfT0ZfVU5OQU1FRF9MSUJSQVJZIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzUGFydE9mVXNlVXJpKFVyaSB1cmlfLCBVcmkgdXJpMl8sIFN0cmluZyBuYW1lKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgU3RyaW5nIHVyaTIgPSByZWxhdGl2aXplVXJpKHVyaTJfKTsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVQYXJ0T2ZVc2VVcmksCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJVc2luZyAnJHt1cml9JyBhcyBwYXJ0IG9mICcke3VyaTJ9JyBidXQgaXRzICdwYXJ0IG9mJyBkZWNsYXJhdGlvbiBzYXlzICcke25hbWV9Jy4iIiIsCiAgICAgIHRpcDogIiIiVHJ5IGNoYW5naW5nIHRoZSAncGFydCBvZicgZGVjbGFyYXRpb24gdG8gdXNlIGEgcmVsYXRpdmUgZmlsZSBuYW1lLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3VyaSc6IHVyaV8sICd1cmkyJzogdXJpMl8sICduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQYXJ0T3JwaGFuID0gbWVzc2FnZVBhcnRPcnBoYW47CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUGFydE9ycGhhbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJQYXJ0T3JwaGFuIiwKICAgIG1lc3NhZ2U6IHIiIiJUaGlzIHBhcnQgZG9lc24ndCBoYXZlIGEgY29udGFpbmluZyBsaWJyYXJ5LiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gdGVtcGxhdGVQYXJ0VHdpY2UgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNhbid0IHVzZSAnI3VyaScgYXMgYSBwYXJ0IG1vcmUgdGhhbiBvbmNlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1BhcnRUd2ljZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiBjb2RlUGFydFR3aWNlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+KCJQYXJ0VHdpY2UiLCB0ZW1wbGF0ZVBhcnRUd2ljZSwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRFVQTElDQVRFX1BBUlQiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzUGFydFR3aWNlKFVyaSB1cmlfKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVQYXJ0VHdpY2UsCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IHVzZSAnJHt1cml9JyBhcyBhIHBhcnQgbW9yZSB0aGFuIG9uY2UuIiIiLAogICAgICBhcmd1bWVudHM6IHsndXJpJzogdXJpX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQYXRjaENsYXNzT3JpZ2luID0gbWVzc2FnZVBhdGNoQ2xhc3NPcmlnaW47CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUGF0Y2hDbGFzc09yaWdpbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlBhdGNoQ2xhc3NPcmlnaW4iLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQsCiAgICBtZXNzYWdlOiByIiIiVGhpcyBpcyB0aGUgb3JpZ2luIGNsYXNzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQYXRjaENsYXNzVHlwZVZhcmlhYmxlc01pc21hdGNoID0KICAgIG1lc3NhZ2VQYXRjaENsYXNzVHlwZVZhcmlhYmxlc01pc21hdGNoOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhdGNoQ2xhc3NUeXBlVmFyaWFibGVzTWlzbWF0Y2ggPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJQYXRjaENsYXNzVHlwZVZhcmlhYmxlc01pc21hdGNoIiwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIkEgcGF0Y2ggY2xhc3MgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiB0eXBlIHZhcmlhYmxlcyBhcyBpdHMgb3JpZ2luIGNsYXNzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQYXRjaERlY2xhcmF0aW9uTWlzbWF0Y2ggPSBtZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk1pc21hdGNoOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhdGNoRGVjbGFyYXRpb25NaXNtYXRjaCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlBhdGNoRGVjbGFyYXRpb25NaXNtYXRjaCIsCiAgICBtZXNzYWdlOiByIiIiVGhpcyBwYXRjaCBkb2Vzbid0IG1hdGNoIG9yaWdpbiBkZWNsYXJhdGlvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUGF0Y2hEZWNsYXJhdGlvbk9yaWdpbiA9IG1lc3NhZ2VQYXRjaERlY2xhcmF0aW9uT3JpZ2luOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBhdGNoRGVjbGFyYXRpb25PcmlnaW4gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJQYXRjaERlY2xhcmF0aW9uT3JpZ2luIiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIlRoaXMgaXMgdGhlIG9yaWdpbiBkZWNsYXJhdGlvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPgogICAgdGVtcGxhdGVQYXRjaEluamVjdGlvbkZhaWxlZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkNhbid0IGluamVjdCAnI25hbWUnIGludG8gJyN1cmknLiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSBhZGRpbmcgJ0BwYXRjaCcuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzUGF0Y2hJbmplY3Rpb25GYWlsZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXyk+IGNvZGVQYXRjaEluamVjdGlvbkZhaWxlZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4oCiAgIlBhdGNoSW5qZWN0aW9uRmFpbGVkIiwKICB0ZW1wbGF0ZVBhdGNoSW5qZWN0aW9uRmFpbGVkLAopOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1BhdGNoSW5qZWN0aW9uRmFpbGVkKFN0cmluZyBuYW1lLCBVcmkgdXJpXykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVBhdGNoSW5qZWN0aW9uRmFpbGVkLAogICAgICBtZXNzYWdlOiAiIiJDYW4ndCBpbmplY3QgJyR7bmFtZX0nIGludG8gJyR7dXJpfScuIiIiLAogICAgICB0aXA6ICIiIlRyeSBhZGRpbmcgJ0BwYXRjaCcuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd1cmknOiB1cmlffSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVBhdGNoTm9uRXh0ZXJuYWwgPSBtZXNzYWdlUGF0Y2hOb25FeHRlcm5hbDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQYXRjaE5vbkV4dGVybmFsID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUGF0Y2hOb25FeHRlcm5hbCIsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJDYW4ndCBhcHBseSB0aGlzIHBhdGNoIGFzIGl0cyBvcmlnaW4gZGVjbGFyYXRpb24gaXNuJ3QgZXh0ZXJuYWwuIiIiLAogICAgdGlwOiByIiIiVHJ5IGFkZGluZyAnZXh0ZXJuYWwnIHRvIHRoZSBvcmlnaW4gZGVjbGFyYXRpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVBsYXRmb3JtUHJpdmF0ZUxpYnJhcnlBY2Nlc3MgPQogICAgbWVzc2FnZVBsYXRmb3JtUHJpdmF0ZUxpYnJhcnlBY2Nlc3M7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUGxhdGZvcm1Qcml2YXRlTGlicmFyeUFjY2VzcyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlBsYXRmb3JtUHJpdmF0ZUxpYnJhcnlBY2Nlc3MiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklNUE9SVF9JTlRFUk5BTF9MSUJSQVJZIl0sCiAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgYWNjZXNzIHBsYXRmb3JtIHByaXZhdGUgbGlicmFyeS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUG9zaXRpb25hbEFmdGVyTmFtZWRBcmd1bWVudCA9CiAgICBtZXNzYWdlUG9zaXRpb25hbEFmdGVyTmFtZWRBcmd1bWVudDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQb3NpdGlvbmFsQWZ0ZXJOYW1lZEFyZ3VtZW50ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUG9zaXRpb25hbEFmdGVyTmFtZWRBcmd1bWVudCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUE9TSVRJT05BTF9BRlRFUl9OQU1FRF9BUkdVTUVOVCJdLAogICAgbWVzc2FnZTogciIiIlBsYWNlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBuYW1lZCBhcmd1bWVudHMuIiIiLAogICAgdGlwOgogICAgICAgIHIiIiJUcnkgbW92aW5nIHRoZSBwb3NpdGlvbmFsIGFyZ3VtZW50IGJlZm9yZSB0aGUgbmFtZWQgYXJndW1lbnRzLCBvciBhZGQgYSBuYW1lIHRvIHRoZSBhcmd1bWVudC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUG9zaXRpb25hbFBhcmFtZXRlcldpdGhFcXVhbHMgPQogICAgbWVzc2FnZVBvc2l0aW9uYWxQYXJhbWV0ZXJXaXRoRXF1YWxzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVBvc2l0aW9uYWxQYXJhbWV0ZXJXaXRoRXF1YWxzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUG9zaXRpb25hbFBhcmFtZXRlcldpdGhFcXVhbHMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIldST05HX1NFUEFSQVRPUl9GT1JfUE9TSVRJT05BTF9QQVJBTUVURVIiXSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIlBvc2l0aW9uYWwgb3B0aW9uYWwgcGFyYW1ldGVycyBjYW4ndCB1c2UgJzonIHRvIHNwZWNpZnkgYSBkZWZhdWx0IHZhbHVlLiIiIiwKICAgIHRpcDogciIiIlRyeSByZXBsYWNpbmcgJzonIHdpdGggJz0nLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVQcmVmaXhBZnRlckNvbWJpbmF0b3IgPSBtZXNzYWdlUHJlZml4QWZ0ZXJDb21iaW5hdG9yOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVByZWZpeEFmdGVyQ29tYmluYXRvciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlByZWZpeEFmdGVyQ29tYmluYXRvciIsCiAgICBpbmRleDogNiwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIlRoZSBwcmVmaXggKCdhcycgY2xhdXNlKSBzaG91bGQgY29tZSBiZWZvcmUgYW55IHNob3cvaGlkZSBjb21iaW5hdG9ycy4iIiIsCiAgICB0aXA6IHIiIiJUcnkgbW92aW5nIHRoZSBwcmVmaXggYmVmb3JlIHRoZSBjb21iaW5hdG9ycy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUHJpdmF0ZU5hbWVkUGFyYW1ldGVyID0gbWVzc2FnZVByaXZhdGVOYW1lZFBhcmFtZXRlcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VQcml2YXRlTmFtZWRQYXJhbWV0ZXIgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJQcml2YXRlTmFtZWRQYXJhbWV0ZXIiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlBSSVZBVEVfT1BUSU9OQUxfUEFSQU1FVEVSIl0sCiAgICBtZXNzYWdlOiByIiIiQW4gb3B0aW9uYWwgbmFtZWQgcGFyYW1ldGVyIGNhbid0IHN0YXJ0IHdpdGggJ18nLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVSZWRpcmVjdGluZ0NvbnN0cnVjdG9yV2l0aEJvZHkgPQogICAgbWVzc2FnZVJlZGlyZWN0aW5nQ29uc3RydWN0b3JXaXRoQm9keTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VSZWRpcmVjdGluZ0NvbnN0cnVjdG9yV2l0aEJvZHkgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJSZWRpcmVjdGluZ0NvbnN0cnVjdG9yV2l0aEJvZHkiLAogICAgaW5kZXg6IDIyLAogICAgbWVzc2FnZTogciIiIlJlZGlyZWN0aW5nIGNvbnN0cnVjdG9ycyBjYW4ndCBoYXZlIGEgYm9keS4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGUgYm9keSwgb3Igbm90IG1ha2luZyB0aGlzIGEgcmVkaXJlY3RpbmcgY29uc3RydWN0b3IuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICB0ZW1wbGF0ZVJlZGlyZWN0aW5nRmFjdG9yeUluY29tcGF0aWJsZVR5cGVBcmd1bWVudCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUaGUgdHlwZSAnI3R5cGUnIGRvZXNuJ3QgZXh0ZW5kICcjdHlwZTInLiIiIiwKICAgICAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSB1c2luZyBhIGRpZmZlcmVudCB0eXBlIGFzIGFyZ3VtZW50LiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOgogICAgICAgICAgICBfd2l0aEFyZ3VtZW50c1JlZGlyZWN0aW5nRmFjdG9yeUluY29tcGF0aWJsZVR5cGVBcmd1bWVudCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlUmVkaXJlY3RpbmdGYWN0b3J5SW5jb21wYXRpYmxlVHlwZUFyZ3VtZW50ID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgIlJlZGlyZWN0aW5nRmFjdG9yeUluY29tcGF0aWJsZVR5cGVBcmd1bWVudCIsCiAgICAgICAgdGVtcGxhdGVSZWRpcmVjdGluZ0ZhY3RvcnlJbmNvbXBhdGlibGVUeXBlQXJndW1lbnQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfQVJHVU1FTlRfTk9UX01BVENISU5HX0JPVU5EUyJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNSZWRpcmVjdGluZ0ZhY3RvcnlJbmNvbXBhdGlibGVUeXBlQXJndW1lbnQoCiAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVJlZGlyZWN0aW5nRmFjdG9yeUluY29tcGF0aWJsZVR5cGVBcmd1bWVudCwKICAgICAgbWVzc2FnZTogIiIiVGhlIHR5cGUgJyR7dHlwZX0nIGRvZXNuJ3QgZXh0ZW5kICcke3R5cGUyfScuIiIiICsKICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDogIiIiVHJ5IHVzaW5nIGEgZGlmZmVyZW50IHR5cGUgYXMgYXJndW1lbnQuIiIiLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUmVkaXJlY3Rpb25Jbk5vbkZhY3RvcnkgPSBtZXNzYWdlUmVkaXJlY3Rpb25Jbk5vbkZhY3Rvcnk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUmVkaXJlY3Rpb25Jbk5vbkZhY3RvcnkgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJSZWRpcmVjdGlvbkluTm9uRmFjdG9yeSIsCiAgICBpbmRleDogMjEsCiAgICBtZXNzYWdlOiByIiIiT25seSBmYWN0b3J5IGNvbnN0cnVjdG9yIGNhbiBzcGVjaWZ5ICc9JyByZWRpcmVjdGlvbi4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSBtYWtpbmcgdGhpcyBhIGZhY3RvcnkgY29uc3RydWN0b3IsIG9yIHJlbW92ZSB0aGUgcmVkaXJlY3Rpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVSZWRpcmVjdGlvblRhcmdldE5vdEZvdW5kID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJSZWRpcmVjdGlvbiBjb25zdHJ1Y3RvciB0YXJnZXQgbm90IGZvdW5kOiAnI25hbWUnIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzUmVkaXJlY3Rpb25UYXJnZXROb3RGb3VuZCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlUmVkaXJlY3Rpb25UYXJnZXROb3RGb3VuZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiUmVkaXJlY3Rpb25UYXJnZXROb3RGb3VuZCIsIHRlbXBsYXRlUmVkaXJlY3Rpb25UYXJnZXROb3RGb3VuZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUkVESVJFQ1RfVE9fTUlTU0lOR19DT05TVFJVQ1RPUiJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1JlZGlyZWN0aW9uVGFyZ2V0Tm90Rm91bmQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVSZWRpcmVjdGlvblRhcmdldE5vdEZvdW5kLAogICAgICBtZXNzYWdlOiAiIiJSZWRpcmVjdGlvbiBjb25zdHJ1Y3RvciB0YXJnZXQgbm90IGZvdW5kOiAnJHtuYW1lfSciIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVSZXF1aXJlZFBhcmFtZXRlcldpdGhEZWZhdWx0ID0KICAgIG1lc3NhZ2VSZXF1aXJlZFBhcmFtZXRlcldpdGhEZWZhdWx0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVJlcXVpcmVkUGFyYW1ldGVyV2l0aERlZmF1bHQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJSZXF1aXJlZFBhcmFtZXRlcldpdGhEZWZhdWx0IiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOQU1FRF9QQVJBTUVURVJfT1VUU0lERV9HUk9VUCJdLAogICAgbWVzc2FnZTogciIiIk5vbi1vcHRpb25hbCBwYXJhbWV0ZXJzIGNhbid0IGhhdmUgYSBkZWZhdWx0IHZhbHVlLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IHJlbW92aW5nIHRoZSBkZWZhdWx0IHZhbHVlIG9yIG1ha2luZyB0aGUgcGFyYW1ldGVyIG9wdGlvbmFsLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVSZXRocm93Tm90Q2F0Y2ggPSBtZXNzYWdlUmV0aHJvd05vdENhdGNoOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVJldGhyb3dOb3RDYXRjaCA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJSZXRocm93Tm90Q2F0Y2giLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlJFVEhST1dfT1VUU0lERV9DQVRDSCJdLAogICAgbWVzc2FnZTogciIiIidyZXRocm93JyBjYW4gb25seSBiZSB1c2VkIGluIGNhdGNoIGNsYXVzZXMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVJldHVybkZyb21Wb2lkRnVuY3Rpb24gPSBtZXNzYWdlUmV0dXJuRnJvbVZvaWRGdW5jdGlvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VSZXR1cm5Gcm9tVm9pZEZ1bmN0aW9uID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiUmV0dXJuRnJvbVZvaWRGdW5jdGlvbiIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUkVUVVJOX09GX0lOVkFMSURfVFlQRSJdLAogICAgbWVzc2FnZTogciIiIkNhbid0IHJldHVybiBhIHZhbHVlIGZyb20gYSB2b2lkIGZ1bmN0aW9uLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVSZXR1cm5UeXBlRnVuY3Rpb25FeHByZXNzaW9uID0KICAgIG1lc3NhZ2VSZXR1cm5UeXBlRnVuY3Rpb25FeHByZXNzaW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVJldHVyblR5cGVGdW5jdGlvbkV4cHJlc3Npb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJSZXR1cm5UeXBlRnVuY3Rpb25FeHByZXNzaW9uIiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcsCiAgICBtZXNzYWdlOiByIiIiQSBmdW5jdGlvbiBleHByZXNzaW9uIGNhbid0IGhhdmUgYSByZXR1cm4gdHlwZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlUmV0dXJuV2l0aG91dEV4cHJlc3Npb24gPSBtZXNzYWdlUmV0dXJuV2l0aG91dEV4cHJlc3Npb247CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlUmV0dXJuV2l0aG91dEV4cHJlc3Npb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJSZXR1cm5XaXRob3V0RXhwcmVzc2lvbiIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiUkVUVVJOX1dJVEhPVVRfVkFMVUUiXSwKICAgIHNldmVyaXR5OiBTZXZlcml0eS53YXJuaW5nLAogICAgbWVzc2FnZTogciIiIk11c3QgZXhwbGljaXRseSByZXR1cm4gYSB2YWx1ZSBmcm9tIGEgbm9uLXZvaWQgZnVuY3Rpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiB0ZW1wbGF0ZVNka1Jvb3ROb3RGb3VuZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiU0RLIHJvb3QgZGlyZWN0b3J5IG5vdCBmb3VuZDogI3VyaS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTZGtSb290Tm90Rm91bmQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gY29kZVNka1Jvb3ROb3RGb3VuZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPigKICAiU2RrUm9vdE5vdEZvdW5kIiwKICB0ZW1wbGF0ZVNka1Jvb3ROb3RGb3VuZCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTZGtSb290Tm90Rm91bmQoVXJpIHVyaV8pIHsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVNka1Jvb3ROb3RGb3VuZCwKICAgICAgbWVzc2FnZTogIiIiU0RLIHJvb3QgZGlyZWN0b3J5IG5vdCBmb3VuZDogJHt1cml9LiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFVyaQogICAgICAgICAgICB1cmlfKT4gdGVtcGxhdGVTZGtTcGVjaWZpY2F0aW9uTm90Rm91bmQgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJTREsgbGlicmFyaWVzIHNwZWNpZmljYXRpb24gbm90IGZvdW5kOiAjdXJpLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJOb3JtYWxseSwgdGhlIHNwZWNpZmljYXRpb24gaXMgYSBmaWxlIG5hbWVkICdsaWJyYXJpZXMuanNvbicgaW4gdGhlIERhcnQgU0RLIGluc3RhbGwgbG9jYXRpb24uIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTZGtTcGVjaWZpY2F0aW9uTm90Rm91bmQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4gY29kZVNka1NwZWNpZmljYXRpb25Ob3RGb3VuZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPigKICAiU2RrU3BlY2lmaWNhdGlvbk5vdEZvdW5kIiwKICB0ZW1wbGF0ZVNka1NwZWNpZmljYXRpb25Ob3RGb3VuZCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTZGtTcGVjaWZpY2F0aW9uTm90Rm91bmQoVXJpIHVyaV8pIHsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVNka1NwZWNpZmljYXRpb25Ob3RGb3VuZCwKICAgICAgbWVzc2FnZTogIiIiU0RLIGxpYnJhcmllcyBzcGVjaWZpY2F0aW9uIG5vdCBmb3VuZDogJHt1cml9LiIiIiwKICAgICAgdGlwOgogICAgICAgICAgIiIiTm9ybWFsbHksIHRoZSBzcGVjaWZpY2F0aW9uIGlzIGEgZmlsZSBuYW1lZCAnbGlicmFyaWVzLmpzb24nIGluIHRoZSBEYXJ0IFNESyBpbnN0YWxsIGxvY2F0aW9uLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IHRlbXBsYXRlU2RrU3VtbWFyeU5vdEZvdW5kID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJTREsgc3VtbWFyeSBub3QgZm91bmQ6ICN1cmkuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU2RrU3VtbWFyeU5vdEZvdW5kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IGNvZGVTZGtTdW1tYXJ5Tm90Rm91bmQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFVyaSB1cmlfKT4oCiAgIlNka1N1bW1hcnlOb3RGb3VuZCIsCiAgdGVtcGxhdGVTZGtTdW1tYXJ5Tm90Rm91bmQsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU2RrU3VtbWFyeU5vdEZvdW5kKFVyaSB1cmlfKSB7CiAgU3RyaW5nIHVyaSA9IHJlbGF0aXZpemVVcmkodXJpXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTZGtTdW1tYXJ5Tm90Rm91bmQsCiAgICAgIG1lc3NhZ2U6ICIiIlNESyBzdW1tYXJ5IG5vdCBmb3VuZDogJHt1cml9LiIiIiwgYXJndW1lbnRzOiB7J3VyaSc6IHVyaV99KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU2V0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzID0KICAgIG1lc3NhZ2VTZXRMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU2V0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiU2V0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzIiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcsCiAgICBtZXNzYWdlOiByIiIiQSBzZXQgbGl0ZXJhbCByZXF1aXJlcyBleGFjdGx5IG9uZSB0eXBlIGFyZ3VtZW50LiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVTZXRPck1hcExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50cyA9CiAgICBtZXNzYWdlU2V0T3JNYXBMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHM7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU2V0T3JNYXBMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJTZXRPck1hcExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50cyIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQSBzZXQgb3IgbWFwIGxpdGVyYWwgcmVxdWlyZXMgZXhhY3RseSBvbmUgb3IgdHdvIHR5cGUgYXJndW1lbnRzLCByZXNwZWN0aXZlbHkuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZVNldHRlck5vdEZvdW5kID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJTZXR0ZXIgbm90IGZvdW5kOiAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1NldHRlck5vdEZvdW5kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVTZXR0ZXJOb3RGb3VuZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiU2V0dGVyTm90Rm91bmQiLCB0ZW1wbGF0ZVNldHRlck5vdEZvdW5kLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkRFRklORURfU0VUVEVSIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU2V0dGVyTm90Rm91bmQoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTZXR0ZXJOb3RGb3VuZCwKICAgICAgbWVzc2FnZTogIiIiU2V0dGVyIG5vdCBmb3VuZDogJyR7bmFtZX0nLiIiIiwgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVNldHRlck5vdFN5bmMgPSBtZXNzYWdlU2V0dGVyTm90U3luYzsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTZXR0ZXJOb3RTeW5jID0gY29uc3QgTWVzc2FnZUNvZGUoIlNldHRlck5vdFN5bmMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfTU9ESUZJRVJfT05fU0VUVEVSIl0sCiAgICBtZXNzYWdlOiByIiIiU2V0dGVycyBjYW4ndCB1c2UgJ2FzeW5jJywgJ2FzeW5jKicsIG9yICdzeW5jKicuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVNldHRlcldpdGhXcm9uZ051bWJlck9mRm9ybWFscyA9CiAgICBtZXNzYWdlU2V0dGVyV2l0aFdyb25nTnVtYmVyT2ZGb3JtYWxzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVNldHRlcldpdGhXcm9uZ051bWJlck9mRm9ybWFscyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlNldHRlcldpdGhXcm9uZ051bWJlck9mRm9ybWFscyIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiV1JPTkdfTlVNQkVSX09GX1BBUkFNRVRFUlNfRk9SX1NFVFRFUiJdLAogICAgbWVzc2FnZTogciIiIkEgc2V0dGVyIHNob3VsZCBoYXZlIGV4YWN0bHkgb25lIGZvcm1hbCBwYXJhbWV0ZXIuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBpbnQgY291bnQsCiAgICAgICAgaW50IGNvdW50MiwKICAgICAgICBudW0gX251bTEsCiAgICAgICAgbnVtIF9udW0yLAogICAgICAgIG51bQogICAgICAgICAgICBfbnVtMyk+IHRlbXBsYXRlU291cmNlQm9keVN1bW1hcnkgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgICAgICBpbnQgY291bnQsIGludCBjb3VudDIsIG51bSBfbnVtMSwgbnVtIF9udW0yLCBudW0gX251bTMpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQnVpbHQgYm9kaWVzIGZvciAjY291bnQgY29tcGlsYXRpb24gdW5pdHMgKCNjb3VudDIgYnl0ZXMpIGluICNudW0xJS4zbXMsIHRoYXQgaXMsCiNudW0yJTEyLjMgYnl0ZXMvbXMsIGFuZAojbnVtMyUxMi4zIG1zL2NvbXBpbGF0aW9uIHVuaXQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTb3VyY2VCb2R5U3VtbWFyeSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPAogICAgTWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQsIGludCBjb3VudDIsIG51bSBfbnVtMSwgbnVtIF9udW0yLAogICAgICAgIG51bSBfbnVtMyk+IGNvZGVTb3VyY2VCb2R5U3VtbWFyeSA9IGNvbnN0IENvZGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCwgaW50IGNvdW50MiwgbnVtIF9udW0xLCBudW0gX251bTIsIG51bSBfbnVtMyk+KAogICJTb3VyY2VCb2R5U3VtbWFyeSIsCiAgdGVtcGxhdGVTb3VyY2VCb2R5U3VtbWFyeSwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTb3VyY2VCb2R5U3VtbWFyeSgKICAgIGludCBjb3VudCwgaW50IGNvdW50MiwgbnVtIF9udW0xLCBudW0gX251bTIsIG51bSBfbnVtMykgewogIGlmIChjb3VudCA9PSBudWxsKSB0aHJvdyAnTm8gY291bnQgcHJvdmlkZWQnOwogIGlmIChjb3VudDIgPT0gbnVsbCkgdGhyb3cgJ05vIGNvdW50IHByb3ZpZGVkJzsKICBpZiAoX251bTEgPT0gbnVsbCkgdGhyb3cgJ05vIG51bWJlciBwcm92aWRlZCc7CiAgU3RyaW5nIG51bTEgPSBfbnVtMS50b1N0cmluZ0FzRml4ZWQoMyk7CiAgaWYgKF9udW0yID09IG51bGwpIHRocm93ICdObyBudW1iZXIgcHJvdmlkZWQnOwogIFN0cmluZyBudW0yID0gX251bTIudG9TdHJpbmdBc0ZpeGVkKDMpLnBhZExlZnQoMTIpOwogIGlmIChfbnVtMyA9PSBudWxsKSB0aHJvdyAnTm8gbnVtYmVyIHByb3ZpZGVkJzsKICBTdHJpbmcgbnVtMyA9IF9udW0zLnRvU3RyaW5nQXNGaXhlZCgzKS5wYWRMZWZ0KDEyKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVNvdXJjZUJvZHlTdW1tYXJ5LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQnVpbHQgYm9kaWVzIGZvciAke2NvdW50fSBjb21waWxhdGlvbiB1bml0cyAoJHtjb3VudDJ9IGJ5dGVzKSBpbiAke251bTF9bXMsIHRoYXQgaXMsCiR7bnVtMn0gYnl0ZXMvbXMsIGFuZAoke251bTN9IG1zL2NvbXBpbGF0aW9uIHVuaXQuIiIiLAogICAgICBhcmd1bWVudHM6IHsKICAgICAgICAnY291bnQnOiBjb3VudCwKICAgICAgICAnY291bnQyJzogY291bnQyLAogICAgICAgICdudW0xJzogX251bTEsCiAgICAgICAgJ251bTInOiBfbnVtMiwKICAgICAgICAnbnVtMyc6IF9udW0zCiAgICAgIH0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgaW50IGNvdW50LAogICAgICAgIGludCBjb3VudDIsCiAgICAgICAgbnVtIF9udW0xLAogICAgICAgIG51bSBfbnVtMiwKICAgICAgICBudW0KICAgICAgICAgICAgX251bTMpPiB0ZW1wbGF0ZVNvdXJjZU91dGxpbmVTdW1tYXJ5ID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgY291bnQyLCBudW0gX251bTEsIG51bSBfbnVtMiwgbnVtIF9udW0zKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkJ1aWx0IG91dGxpbmVzIGZvciAjY291bnQgY29tcGlsYXRpb24gdW5pdHMgKCNjb3VudDIgYnl0ZXMpIGluICNudW0xJS4zbXMsIHRoYXQgaXMsCiNudW0yJTEyLjMgYnl0ZXMvbXMsIGFuZAojbnVtMyUxMi4zIG1zL2NvbXBpbGF0aW9uIHVuaXQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTb3VyY2VPdXRsaW5lU3VtbWFyeSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPAogICAgTWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQsIGludCBjb3VudDIsIG51bSBfbnVtMSwgbnVtIF9udW0yLAogICAgICAgIG51bSBfbnVtMyk+IGNvZGVTb3VyY2VPdXRsaW5lU3VtbWFyeSA9IGNvbnN0IENvZGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCwgaW50IGNvdW50MiwgbnVtIF9udW0xLCBudW0gX251bTIsIG51bSBfbnVtMyk+KAogICJTb3VyY2VPdXRsaW5lU3VtbWFyeSIsCiAgdGVtcGxhdGVTb3VyY2VPdXRsaW5lU3VtbWFyeSwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTb3VyY2VPdXRsaW5lU3VtbWFyeSgKICAgIGludCBjb3VudCwgaW50IGNvdW50MiwgbnVtIF9udW0xLCBudW0gX251bTIsIG51bSBfbnVtMykgewogIGlmIChjb3VudCA9PSBudWxsKSB0aHJvdyAnTm8gY291bnQgcHJvdmlkZWQnOwogIGlmIChjb3VudDIgPT0gbnVsbCkgdGhyb3cgJ05vIGNvdW50IHByb3ZpZGVkJzsKICBpZiAoX251bTEgPT0gbnVsbCkgdGhyb3cgJ05vIG51bWJlciBwcm92aWRlZCc7CiAgU3RyaW5nIG51bTEgPSBfbnVtMS50b1N0cmluZ0FzRml4ZWQoMyk7CiAgaWYgKF9udW0yID09IG51bGwpIHRocm93ICdObyBudW1iZXIgcHJvdmlkZWQnOwogIFN0cmluZyBudW0yID0gX251bTIudG9TdHJpbmdBc0ZpeGVkKDMpLnBhZExlZnQoMTIpOwogIGlmIChfbnVtMyA9PSBudWxsKSB0aHJvdyAnTm8gbnVtYmVyIHByb3ZpZGVkJzsKICBTdHJpbmcgbnVtMyA9IF9udW0zLnRvU3RyaW5nQXNGaXhlZCgzKS5wYWRMZWZ0KDEyKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVNvdXJjZU91dGxpbmVTdW1tYXJ5LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQnVpbHQgb3V0bGluZXMgZm9yICR7Y291bnR9IGNvbXBpbGF0aW9uIHVuaXRzICgke2NvdW50Mn0gYnl0ZXMpIGluICR7bnVtMX1tcywgdGhhdCBpcywKJHtudW0yfSBieXRlcy9tcywgYW5kCiR7bnVtM30gbXMvY29tcGlsYXRpb24gdW5pdC4iIiIsCiAgICAgIGFyZ3VtZW50czogewogICAgICAgICdjb3VudCc6IGNvdW50LAogICAgICAgICdjb3VudDInOiBjb3VudDIsCiAgICAgICAgJ251bTEnOiBfbnVtMSwKICAgICAgICAnbnVtMic6IF9udW0yLAogICAgICAgICdudW0zJzogX251bTMKICAgICAgfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVNwcmVhZEVsZW1lbnQgPSBtZXNzYWdlU3ByZWFkRWxlbWVudDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTcHJlYWRFbGVtZW50ID0gY29uc3QgTWVzc2FnZUNvZGUoIlNwcmVhZEVsZW1lbnQiLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQsIG1lc3NhZ2U6IHIiIiJJdGVyYWJsZSBzcHJlYWQuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZTIpPiB0ZW1wbGF0ZVNwcmVhZEVsZW1lbnRUeXBlTWlzbWF0Y2ggPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiQ2FuJ3QgYXNzaWduIHNwcmVhZCBlbGVtZW50cyBvZiB0eXBlICcjdHlwZScgdG8gY29sbGVjdGlvbiBlbGVtZW50cyBvZiB0eXBlICcjdHlwZTInLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlU3ByZWFkRWxlbWVudFR5cGVNaXNtYXRjaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJTcHJlYWRFbGVtZW50VHlwZU1pc21hdGNoIiwgdGVtcGxhdGVTcHJlYWRFbGVtZW50VHlwZU1pc21hdGNoLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJMSVNUX0VMRU1FTlRfVFlQRV9OT1RfQVNTSUdOQUJMRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTcHJlYWRFbGVtZW50VHlwZU1pc21hdGNoKAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTcHJlYWRFbGVtZW50VHlwZU1pc21hdGNoLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQ2FuJ3QgYXNzaWduIHNwcmVhZCBlbGVtZW50cyBvZiB0eXBlICcke3R5cGV9JyB0byBjb2xsZWN0aW9uIGVsZW1lbnRzIG9mIHR5cGUgJyR7dHlwZTJ9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIGFyZ3VtZW50czogeyd0eXBlJzogX3R5cGUsICd0eXBlMic6IF90eXBlMn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVTcHJlYWRNYXBFbGVtZW50ID0gbWVzc2FnZVNwcmVhZE1hcEVsZW1lbnQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3ByZWFkTWFwRWxlbWVudCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlNwcmVhZE1hcEVsZW1lbnQiLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmNvbnRleHQsCiAgICBtZXNzYWdlOiByIiIiTWFwIHNwcmVhZC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIERhcnRUeXBlIF90eXBlLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlMik+IHRlbXBsYXRlU3ByZWFkTWFwRW50cnlFbGVtZW50S2V5VHlwZU1pc21hdGNoID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIkNhbid0IGFzc2lnbiBzcHJlYWQgZW50cnkga2V5cyBvZiB0eXBlICcjdHlwZScgdG8gbWFwIGVudHJ5IGtleXMgb2YgdHlwZSAnI3R5cGUyJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1NwcmVhZE1hcEVudHJ5RWxlbWVudEtleVR5cGVNaXNtYXRjaCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlU3ByZWFkTWFwRW50cnlFbGVtZW50S2V5VHlwZU1pc21hdGNoID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgIlNwcmVhZE1hcEVudHJ5RWxlbWVudEtleVR5cGVNaXNtYXRjaCIsCiAgICAgICAgdGVtcGxhdGVTcHJlYWRNYXBFbnRyeUVsZW1lbnRLZXlUeXBlTWlzbWF0Y2gsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1BUF9LRVlfVFlQRV9OT1RfQVNTSUdOQUJMRSJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTcHJlYWRNYXBFbnRyeUVsZW1lbnRLZXlUeXBlTWlzbWF0Y2goCiAgICBEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKSB7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgTGlzdDxPYmplY3Q+IHR5cGUyUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZTIpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICBTdHJpbmcgdHlwZTIgPSB0eXBlMlBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVNwcmVhZE1hcEVudHJ5RWxlbWVudEtleVR5cGVNaXNtYXRjaCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNhbid0IGFzc2lnbiBzcHJlYWQgZW50cnkga2V5cyBvZiB0eXBlICcke3R5cGV9JyB0byBtYXAgZW50cnkga2V5cyBvZiB0eXBlICcke3R5cGUyfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIHRlbXBsYXRlU3ByZWFkTWFwRW50cnlFbGVtZW50VmFsdWVUeXBlTWlzbWF0Y2ggPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiQ2FuJ3QgYXNzaWduIHNwcmVhZCBlbnRyeSB2YWx1ZXMgb2YgdHlwZSAnI3R5cGUnIHRvIG1hcCBlbnRyeSB2YWx1ZXMgb2YgdHlwZSAnI3R5cGUyJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTcHJlYWRNYXBFbnRyeUVsZW1lbnRWYWx1ZVR5cGVNaXNtYXRjaCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+CiAgICBjb2RlU3ByZWFkTWFwRW50cnlFbGVtZW50VmFsdWVUeXBlTWlzbWF0Y2ggPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlLCBEYXJ0VHlwZSBfdHlwZTIpPigKICAgICAgICAiU3ByZWFkTWFwRW50cnlFbGVtZW50VmFsdWVUeXBlTWlzbWF0Y2giLAogICAgICAgIHRlbXBsYXRlU3ByZWFkTWFwRW50cnlFbGVtZW50VmFsdWVUeXBlTWlzbWF0Y2gsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1BUF9WQUxVRV9UWVBFX05PVF9BU1NJR05BQkxFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1NwcmVhZE1hcEVudHJ5RWxlbWVudFZhbHVlVHlwZU1pc21hdGNoKAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTcHJlYWRNYXBFbnRyeUVsZW1lbnRWYWx1ZVR5cGVNaXNtYXRjaCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIkNhbid0IGFzc2lnbiBzcHJlYWQgZW50cnkgdmFsdWVzIG9mIHR5cGUgJyR7dHlwZX0nIHRvIG1hcCBlbnRyeSB2YWx1ZXMgb2YgdHlwZSAnJHt0eXBlMn0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZSwgJ3R5cGUyJzogX3R5cGUyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZSk+IHRlbXBsYXRlU3ByZWFkTWFwRW50cnlUeXBlTWlzbWF0Y2ggPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlVuZXhwZWN0ZWQgdHlwZSAnI3R5cGUnIG9mIGEgbWFwIHNwcmVhZCBlbnRyeS4gIEV4cGVjdGVkICdkeW5hbWljJyBvciBhIE1hcC4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1NwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSk+IGNvZGVTcHJlYWRNYXBFbnRyeVR5cGVNaXNtYXRjaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPigKICAiU3ByZWFkTWFwRW50cnlUeXBlTWlzbWF0Y2giLAogIHRlbXBsYXRlU3ByZWFkTWFwRW50cnlUeXBlTWlzbWF0Y2gsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU3ByZWFkTWFwRW50cnlUeXBlTWlzbWF0Y2goRGFydFR5cGUgX3R5cGUpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTcHJlYWRNYXBFbnRyeVR5cGVNaXNtYXRjaCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlVuZXhwZWN0ZWQgdHlwZSAnJHt0eXBlfScgb2YgYSBtYXAgc3ByZWFkIGVudHJ5LiAgRXhwZWN0ZWQgJ2R5bmFtaWMnIG9yIGEgTWFwLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUpPiB0ZW1wbGF0ZVNwcmVhZFR5cGVNaXNtYXRjaCA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVW5leHBlY3RlZCB0eXBlICcjdHlwZScgb2YgYSBzcHJlYWQuICBFeHBlY3RlZCAnZHluYW1pYycgb3IgYW4gSXRlcmFibGUuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTcHJlYWRUeXBlTWlzbWF0Y2gpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKERhcnRUeXBlIF90eXBlKT4gY29kZVNwcmVhZFR5cGVNaXNtYXRjaCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUpPigKICAiU3ByZWFkVHlwZU1pc21hdGNoIiwKICB0ZW1wbGF0ZVNwcmVhZFR5cGVNaXNtYXRjaCwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNTcHJlYWRUeXBlTWlzbWF0Y2goRGFydFR5cGUgX3R5cGUpIHsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTcHJlYWRUeXBlTWlzbWF0Y2gsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJVbmV4cGVjdGVkIHR5cGUgJyR7dHlwZX0nIG9mIGEgc3ByZWFkLiAgRXhwZWN0ZWQgJ2R5bmFtaWMnIG9yIGFuIEl0ZXJhYmxlLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgYXJndW1lbnRzOiB7J3R5cGUnOiBfdHlwZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVTdGFja092ZXJmbG93ID0gbWVzc2FnZVN0YWNrT3ZlcmZsb3c7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3RhY2tPdmVyZmxvdyA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJTdGFja092ZXJmbG93IiwKICAgIGluZGV4OiAxOSwKICAgIG1lc3NhZ2U6IHIiIiJUaGUgZmlsZSBoYXMgdG9vIG1hbnkgbmVzdGVkIGV4cHJlc3Npb25zIG9yIHN0YXRlbWVudHMuIiIiLAogICAgdGlwOiByIiIiVHJ5IHNpbXBsaWZ5aW5nIHRoZSBjb2RlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVTdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0ID0KICAgIG1lc3NhZ2VTdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVN0YXRpY0FuZEluc3RhbmNlQ29uZmxpY3QgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJTdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0IiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJDT05GTElDVElOR19TVEFUSUNfQU5EX0lOU1RBTkNFIl0sCiAgICBtZXNzYWdlOiByIiIiVGhpcyBzdGF0aWMgbWVtYmVyIGNvbmZsaWN0cyB3aXRoIGFuIGluc3RhbmNlIG1lbWJlci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdENhdXNlID0KICAgIG1lc3NhZ2VTdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0Q2F1c2U7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdENhdXNlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdENhdXNlIiwKICAgIHNldmVyaXR5OiBTZXZlcml0eS5jb250ZXh0LAogICAgbWVzc2FnZTogciIiIlRoaXMgaXMgdGhlIGluc3RhbmNlIG1lbWJlci4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3RhdGljQ29uc3RydWN0b3IgPSBtZXNzYWdlU3RhdGljQ29uc3RydWN0b3I7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3RhdGljQ29uc3RydWN0b3IgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJTdGF0aWNDb25zdHJ1Y3RvciIsCiAgICBpbmRleDogNCwKICAgIG1lc3NhZ2U6IHIiIiJDb25zdHJ1Y3RvcnMgY2FuJ3QgYmUgc3RhdGljLiIiIiwKICAgIHRpcDogciIiIlRyeSByZW1vdmluZyB0aGUga2V5d29yZCAnc3RhdGljJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3RhdGljT3BlcmF0b3IgPSBtZXNzYWdlU3RhdGljT3BlcmF0b3I7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3RhdGljT3BlcmF0b3IgPSBjb25zdCBNZXNzYWdlQ29kZSgiU3RhdGljT3BlcmF0b3IiLAogICAgaW5kZXg6IDE3LAogICAgbWVzc2FnZTogciIiIk9wZXJhdG9ycyBjYW4ndCBiZSBzdGF0aWMuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIHRoZSBrZXl3b3JkICdzdGF0aWMnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVTdXBlckFzRXhwcmVzc2lvbiA9IG1lc3NhZ2VTdXBlckFzRXhwcmVzc2lvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTdXBlckFzRXhwcmVzc2lvbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlN1cGVyQXNFeHByZXNzaW9uIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJTVVBFUl9BU19FWFBSRVNTSU9OIl0sCiAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgdXNlICdzdXBlcicgYXMgYW4gZXhwcmVzc2lvbi4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRvIGRlbGVnYXRlIGEgY29uc3RydWN0b3IgdG8gYSBzdXBlciBjb25zdHJ1Y3RvciwgcHV0IHRoZSBzdXBlciBjYWxsIGFzIGFuIGluaXRpYWxpemVyLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVTdXBlckFzSWRlbnRpZmllciA9IG1lc3NhZ2VTdXBlckFzSWRlbnRpZmllcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTdXBlckFzSWRlbnRpZmllciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlN1cGVyQXNJZGVudGlmaWVyIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJTVVBFUl9BU19FWFBSRVNTSU9OIl0sCiAgICBtZXNzYWdlOiByIiIiRXhwZWN0ZWQgaWRlbnRpZmllciwgYnV0IGdvdCAnc3VwZXInLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVTdXBlckluaXRpYWxpemVyTm90TGFzdCA9IG1lc3NhZ2VTdXBlckluaXRpYWxpemVyTm90TGFzdDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTdXBlckluaXRpYWxpemVyTm90TGFzdCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlN1cGVySW5pdGlhbGl6ZXJOb3RMYXN0IiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJJTlZBTElEX1NVUEVSX0lOVk9DQVRJT04iXSwKICAgIG1lc3NhZ2U6IHIiIiJDYW4ndCBoYXZlIGluaXRpYWxpemVycyBhZnRlciAnc3VwZXInLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVTdXBlck51bGxBd2FyZSA9IG1lc3NhZ2VTdXBlck51bGxBd2FyZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTdXBlck51bGxBd2FyZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJTdXBlck51bGxBd2FyZSIsCiAgICBpbmRleDogMTgsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUaGUgb3BlcmF0b3IgJz8uJyBjYW5ub3QgYmUgdXNlZCB3aXRoICdzdXBlcicgYmVjYXVzZSAnc3VwZXInIGNhbm5vdCBiZSBudWxsLiIiIiwKICAgIHRpcDogciIiIlRyeSByZXBsYWNpbmcgJz8uJyB3aXRoICcuJyIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlU3VwZXJjbGFzc0hhc05vQ29uc3RydWN0b3IgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlN1cGVyY2xhc3MgaGFzIG5vIGNvbnN0cnVjdG9yIG5hbWVkICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU3VwZXJjbGFzc0hhc05vQ29uc3RydWN0b3IpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZVN1cGVyY2xhc3NIYXNOb0NvbnN0cnVjdG9yID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJTdXBlcmNsYXNzSGFzTm9Db25zdHJ1Y3RvciIsIHRlbXBsYXRlU3VwZXJjbGFzc0hhc05vQ29uc3RydWN0b3IsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bCiAgICAgICAgICAiVU5ERUZJTkVEX0NPTlNUUlVDVE9SX0lOX0lOSVRJQUxJWkVSIiwKICAgICAgICAgICJVTkRFRklORURfQ09OU1RSVUNUT1JfSU5fSU5JVElBTElaRVJfREVGQVVMVCIKICAgICAgICBdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb0NvbnN0cnVjdG9yKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3VwZXJjbGFzc0hhc05vQ29uc3RydWN0b3IsCiAgICAgIG1lc3NhZ2U6ICIiIlN1cGVyY2xhc3MgaGFzIG5vIGNvbnN0cnVjdG9yIG5hbWVkICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIG5hbWUpPiB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3RvciA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIHN1cGVyY2xhc3MsICcjbmFtZScsIGhhcyBubyB1bm5hbWVkIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgbm8gYXJndW1lbnRzLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU3VwZXJjbGFzc0hhc05vRGVmYXVsdENvbnN0cnVjdG9yKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+CiAgICBjb2RlU3VwZXJjbGFzc0hhc05vRGVmYXVsdENvbnN0cnVjdG9yID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJTdXBlcmNsYXNzSGFzTm9EZWZhdWx0Q29uc3RydWN0b3IiLAogICAgICAgIHRlbXBsYXRlU3VwZXJjbGFzc0hhc05vRGVmYXVsdENvbnN0cnVjdG9yLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT19ERUZBVUxUX1NVUEVSX0NPTlNUUlVDVE9SX0lNUExJQ0lUIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3RvcihTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVN1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3RvciwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBzdXBlcmNsYXNzLCAnJHtuYW1lfScsIGhhcyBubyB1bm5hbWVkIGNvbnN0cnVjdG9yIHRoYXQgdGFrZXMgbm8gYXJndW1lbnRzLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0dldHRlciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiU3VwZXJjbGFzcyBoYXMgbm8gZ2V0dGVyIG5hbWVkICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU3VwZXJjbGFzc0hhc05vR2V0dGVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVTdXBlcmNsYXNzSGFzTm9HZXR0ZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIlN1cGVyY2xhc3NIYXNOb0dldHRlciIsIHRlbXBsYXRlU3VwZXJjbGFzc0hhc05vR2V0dGVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkRFRklORURfU1VQRVJfR0VUVEVSIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU3VwZXJjbGFzc0hhc05vR2V0dGVyKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3VwZXJjbGFzc0hhc05vR2V0dGVyLAogICAgICBtZXNzYWdlOiAiIiJTdXBlcmNsYXNzIGhhcyBubyBnZXR0ZXIgbmFtZWQgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb01ldGhvZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiU3VwZXJjbGFzcyBoYXMgbm8gbWV0aG9kIG5hbWVkICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU3VwZXJjbGFzc0hhc05vTWV0aG9kKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVTdXBlcmNsYXNzSGFzTm9NZXRob2QgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIlN1cGVyY2xhc3NIYXNOb01ldGhvZCIsIHRlbXBsYXRlU3VwZXJjbGFzc0hhc05vTWV0aG9kLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkRFRklORURfU1VQRVJfTUVUSE9EIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU3VwZXJjbGFzc0hhc05vTWV0aG9kKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3VwZXJjbGFzc0hhc05vTWV0aG9kLAogICAgICBtZXNzYWdlOiAiIiJTdXBlcmNsYXNzIGhhcyBubyBtZXRob2QgbmFtZWQgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb1NldHRlciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiU3VwZXJjbGFzcyBoYXMgbm8gc2V0dGVyIG5hbWVkICcjbmFtZScuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU3VwZXJjbGFzc0hhc05vU2V0dGVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVTdXBlcmNsYXNzSGFzTm9TZXR0ZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIlN1cGVyY2xhc3NIYXNOb1NldHRlciIsIHRlbXBsYXRlU3VwZXJjbGFzc0hhc05vU2V0dGVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkRFRklORURfU1VQRVJfU0VUVEVSIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU3VwZXJjbGFzc0hhc05vU2V0dGVyKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3VwZXJjbGFzc0hhc05vU2V0dGVyLAogICAgICBtZXNzYWdlOiAiIiJTdXBlcmNsYXNzIGhhcyBubyBzZXR0ZXIgbmFtZWQgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcKICAgICAgICAgICAgbmFtZSk+IHRlbXBsYXRlU3VwZXJjbGFzc01ldGhvZEFyZ3VtZW50TWlzbWF0Y2ggPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlN1cGVyY2xhc3MgZG9lc24ndCBoYXZlIGEgbWV0aG9kIG5hbWVkICcjbmFtZScgd2l0aCBtYXRjaGluZyBhcmd1bWVudHMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNTdXBlcmNsYXNzTWV0aG9kQXJndW1lbnRNaXNtYXRjaCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlU3VwZXJjbGFzc01ldGhvZEFyZ3VtZW50TWlzbWF0Y2ggPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIlN1cGVyY2xhc3NNZXRob2RBcmd1bWVudE1pc21hdGNoIiwKICAgICAgICB0ZW1wbGF0ZVN1cGVyY2xhc3NNZXRob2RBcmd1bWVudE1pc21hdGNoLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NNZXRob2RBcmd1bWVudE1pc21hdGNoKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3VwZXJjbGFzc01ldGhvZEFyZ3VtZW50TWlzbWF0Y2gsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJTdXBlcmNsYXNzIGRvZXNuJ3QgaGF2ZSBhIG1ldGhvZCBuYW1lZCAnJHtuYW1lfScgd2l0aCBtYXRjaGluZyBhcmd1bWVudHMuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3VwZXJ0eXBlSXNGdW5jdGlvbiA9IG1lc3NhZ2VTdXBlcnR5cGVJc0Z1bmN0aW9uOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVN1cGVydHlwZUlzRnVuY3Rpb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJTdXBlcnR5cGVJc0Z1bmN0aW9uIiwKICAgIG1lc3NhZ2U6IHIiIiJDYW4ndCB1c2UgYSBmdW5jdGlvbiB0eXBlIGFzIHN1cGVydHlwZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlU3VwZXJ0eXBlSXNJbGxlZ2FsID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUaGUgdHlwZSAnI25hbWUnIGNhbid0IGJlIHVzZWQgYXMgc3VwZXJ0eXBlLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1N1cGVydHlwZUlzSWxsZWdhbCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlU3VwZXJ0eXBlSXNJbGxlZ2FsID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJTdXBlcnR5cGVJc0lsbGVnYWwiLCB0ZW1wbGF0ZVN1cGVydHlwZUlzSWxsZWdhbCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRVhURU5EU19OT05fQ0xBU1MiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzU3VwZXJ0eXBlSXNJbGxlZ2FsKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3VwZXJ0eXBlSXNJbGxlZ2FsLAogICAgICBtZXNzYWdlOiAiIiJUaGUgdHlwZSAnJHtuYW1lfScgY2FuJ3QgYmUgdXNlZCBhcyBzdXBlcnR5cGUuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlU3VwZXJ0eXBlSXNUeXBlVmFyaWFibGUgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIlRoZSB0eXBlIHZhcmlhYmxlICcjbmFtZScgY2FuJ3QgYmUgdXNlZCBhcyBzdXBlcnR5cGUuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzU3VwZXJ0eXBlSXNUeXBlVmFyaWFibGUpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZVN1cGVydHlwZUlzVHlwZVZhcmlhYmxlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJTdXBlcnR5cGVJc1R5cGVWYXJpYWJsZSIsIHRlbXBsYXRlU3VwZXJ0eXBlSXNUeXBlVmFyaWFibGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYVEVORFNfTk9OX0NMQVNTIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1N1cGVydHlwZUlzVHlwZVZhcmlhYmxlKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlU3VwZXJ0eXBlSXNUeXBlVmFyaWFibGUsCiAgICAgIG1lc3NhZ2U6ICIiIlRoZSB0eXBlIHZhcmlhYmxlICcke25hbWV9JyBjYW4ndCBiZSB1c2VkIGFzIHN1cGVydHlwZS4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVTd2l0Y2hDYXNlRmFsbFRocm91Z2ggPSBtZXNzYWdlU3dpdGNoQ2FzZUZhbGxUaHJvdWdoOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVN3aXRjaENhc2VGYWxsVGhyb3VnaCA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlN3aXRjaENhc2VGYWxsVGhyb3VnaCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiQ0FTRV9CTE9DS19OT1RfVEVSTUlOQVRFRCJdLAogICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZywKICAgIG1lc3NhZ2U6IHIiIiJTd2l0Y2ggY2FzZSBtYXkgZmFsbCB0aHJvdWdoIHRvIHRoZSBuZXh0IGNhc2UuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBEYXJ0VHlwZSBfdHlwZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZTIpPiB0ZW1wbGF0ZVN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlR5cGUgJyN0eXBlJyBvZiB0aGUgc3dpdGNoIGV4cHJlc3Npb24gaXNuJ3QgYXNzaWduYWJsZSB0byB0aGUgdHlwZSAnI3R5cGUyJyBvZiB0aGlzIGNhc2UgZXhwcmVzc2lvbi4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1N3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSBfdHlwZSwgRGFydFR5cGUgX3R5cGUyKT4KICAgIGNvZGVTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMik+KAogICAgICAgICJTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZSIsIHRlbXBsYXRlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGUsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlNXSVRDSF9FWFBSRVNTSU9OX05PVF9BU1NJR05BQkxFIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1N3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlKAogICAgRGFydFR5cGUgX3R5cGUsIERhcnRUeXBlIF90eXBlMikgewogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIExpc3Q8T2JqZWN0PiB0eXBlMlBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUyKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgU3RyaW5nIHR5cGUyID0gdHlwZTJQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZSwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlR5cGUgJyR7dHlwZX0nIG9mIHRoZSBzd2l0Y2ggZXhwcmVzc2lvbiBpc24ndCBhc3NpZ25hYmxlIHRvIHRoZSB0eXBlICcke3R5cGUyfScgb2YgdGhpcyBjYXNlIGV4cHJlc3Npb24uIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICBhcmd1bWVudHM6IHsndHlwZSc6IF90eXBlLCAndHlwZTInOiBfdHlwZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGVDYXVzZSA9CiAgICBtZXNzYWdlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGVDYXVzZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZUNhdXNlID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGVDYXVzZSIsCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCwKICAgIG1lc3NhZ2U6IHIiIiJUaGUgc3dpdGNoIGV4cHJlc3Npb24gaXMgaGVyZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3dpdGNoSGFzQ2FzZUFmdGVyRGVmYXVsdCA9CiAgICBtZXNzYWdlU3dpdGNoSGFzQ2FzZUFmdGVyRGVmYXVsdDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTd2l0Y2hIYXNDYXNlQWZ0ZXJEZWZhdWx0ID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiU3dpdGNoSGFzQ2FzZUFmdGVyRGVmYXVsdCIsCiAgICBpbmRleDogMTYsCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJUaGUgZGVmYXVsdCBjYXNlIHNob3VsZCBiZSB0aGUgbGFzdCBjYXNlIGluIGEgc3dpdGNoIHN0YXRlbWVudC4iIiIsCiAgICB0aXA6IHIiIiJUcnkgbW92aW5nIHRoZSBkZWZhdWx0IGNhc2UgYWZ0ZXIgdGhlIG90aGVyIGNhc2UgY2xhdXNlcy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3dpdGNoSGFzTXVsdGlwbGVEZWZhdWx0cyA9CiAgICBtZXNzYWdlU3dpdGNoSGFzTXVsdGlwbGVEZWZhdWx0czsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VTd2l0Y2hIYXNNdWx0aXBsZURlZmF1bHRzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiU3dpdGNoSGFzTXVsdGlwbGVEZWZhdWx0cyIsCiAgICBpbmRleDogMTUsCiAgICBtZXNzYWdlOiByIiIiVGhlICdkZWZhdWx0JyBjYXNlIGNhbiBvbmx5IGJlIGRlY2xhcmVkIG9uY2UuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nIGFsbCBidXQgb25lIGRlZmF1bHQgY2FzZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlU3ludGhldGljVG9rZW4gPSBtZXNzYWdlU3ludGhldGljVG9rZW47CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlU3ludGhldGljVG9rZW4gPSBjb25zdCBNZXNzYWdlQ29kZSgiU3ludGhldGljVG9rZW4iLAogICAgbWVzc2FnZTogciIiIlRoaXMgY291bGRuJ3QgYmUgcGFyc2VkLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgICAgICByIiIiQ2FuJ3QgYWNjZXNzICd0aGlzJyBpbiBhIGZpZWxkIGluaXRpYWxpemVyIHRvIHJlYWQgJyNuYW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNUaGlzQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IGNvZGVUaGlzQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJUaGlzQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyIiwgdGVtcGxhdGVUaGlzQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUSElTX0FDQ0VTU19GUk9NX0ZJRUxEX0lOSVRJQUxJWkVSIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1RoaXNBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXIoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVUaGlzQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiQ2FuJ3QgYWNjZXNzICd0aGlzJyBpbiBhIGZpZWxkIGluaXRpYWxpemVyIHRvIHJlYWQgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVRoaXNBc0lkZW50aWZpZXIgPSBtZXNzYWdlVGhpc0FzSWRlbnRpZmllcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VUaGlzQXNJZGVudGlmaWVyID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiVGhpc0FzSWRlbnRpZmllciIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiSU5WQUxJRF9SRUZFUkVOQ0VfVE9fVEhJUyJdLAogICAgbWVzc2FnZTogciIiIkV4cGVjdGVkIGlkZW50aWZpZXIsIGJ1dCBnb3QgJ3RoaXMnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVUaGlzSW5pdGlhbGl6ZXJOb3RBbG9uZSA9IG1lc3NhZ2VUaGlzSW5pdGlhbGl6ZXJOb3RBbG9uZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VUaGlzSW5pdGlhbGl6ZXJOb3RBbG9uZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlRoaXNJbml0aWFsaXplck5vdEFsb25lIiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJGSUVMRF9JTklUSUFMSVpFUl9SRURJUkVDVElOR19DT05TVFJVQ1RPUiJdLAogICAgbWVzc2FnZTogciIiIkNhbid0IGhhdmUgb3RoZXIgaW5pdGlhbGl6ZXJzIHRvZ2V0aGVyIHdpdGggJ3RoaXMnLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPgogICAgdGVtcGxhdGVUaGlzT3JTdXBlckFjY2Vzc0luRmllbGRJbml0aWFsaXplciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJDYW4ndCBhY2Nlc3MgJyNzdHJpbmcnIGluIGEgZmllbGQgaW5pdGlhbGl6ZXIuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVGhpc09yU3VwZXJBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPgogICAgY29kZVRoaXNPclN1cGVyQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4oCiAgICAgICAgIlRoaXNPclN1cGVyQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyIiwKICAgICAgICB0ZW1wbGF0ZVRoaXNPclN1cGVyQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJUSElTX0FDQ0VTU19GUk9NX0lOSVRJQUxJWkVSIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1RoaXNPclN1cGVyQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyKFN0cmluZyBzdHJpbmcpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVGhpc09yU3VwZXJBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXIsCiAgICAgIG1lc3NhZ2U6ICIiIkNhbid0IGFjY2VzcyAnJHtzdHJpbmd9JyBpbiBhIGZpZWxkIGluaXRpYWxpemVyLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZ30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgaW50IGNvdW50LAogICAgICAgIGludAogICAgICAgICAgICBjb3VudDIpPiB0ZW1wbGF0ZVRvb0Zld0FyZ3VtZW50cyA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50LCBpbnQgY291bnQyKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRvbyBmZXcgcG9zaXRpb25hbCBhcmd1bWVudHM6ICNjb3VudCByZXF1aXJlZCwgI2NvdW50MiBnaXZlbi4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1Rvb0Zld0FyZ3VtZW50cyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50LCBpbnQgY291bnQyKT4gY29kZVRvb0Zld0FyZ3VtZW50cyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50LCBpbnQgY291bnQyKT4oCiAgICAgICAgIlRvb0Zld0FyZ3VtZW50cyIsIHRlbXBsYXRlVG9vRmV3QXJndW1lbnRzLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJOT1RfRU5PVUdIX1JFUVVJUkVEX0FSR1VNRU5UUyJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1Rvb0Zld0FyZ3VtZW50cyhpbnQgY291bnQsIGludCBjb3VudDIpIHsKICBpZiAoY291bnQgPT0gbnVsbCkgdGhyb3cgJ05vIGNvdW50IHByb3ZpZGVkJzsKICBpZiAoY291bnQyID09IG51bGwpIHRocm93ICdObyBjb3VudCBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVUb29GZXdBcmd1bWVudHMsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUb28gZmV3IHBvc2l0aW9uYWwgYXJndW1lbnRzOiAke2NvdW50fSByZXF1aXJlZCwgJHtjb3VudDJ9IGdpdmVuLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J2NvdW50JzogY291bnQsICdjb3VudDInOiBjb3VudDJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIGludCBjb3VudCwKICAgICAgICBpbnQKICAgICAgICAgICAgY291bnQyKT4gdGVtcGxhdGVUb29NYW55QXJndW1lbnRzID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQsIGludCBjb3VudDIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVG9vIG1hbnkgcG9zaXRpb25hbCBhcmd1bWVudHM6ICNjb3VudCBhbGxvd2VkLCBidXQgI2NvdW50MiBmb3VuZC4iIiIsCiAgICB0aXBUZW1wbGF0ZTogciIiIlRyeSByZW1vdmluZyB0aGUgZXh0cmEgcG9zaXRpb25hbCBhcmd1bWVudHMuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNUb29NYW55QXJndW1lbnRzKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQsIGludCBjb3VudDIpPiBjb2RlVG9vTWFueUFyZ3VtZW50cyA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50LCBpbnQgY291bnQyKT4oCiAgICAgICAgIlRvb01hbnlBcmd1bWVudHMiLCB0ZW1wbGF0ZVRvb01hbnlBcmd1bWVudHMsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkVYVFJBX1BPU0lUSU9OQUxfQVJHVU1FTlRTIl0sCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVG9vTWFueUFyZ3VtZW50cyhpbnQgY291bnQsIGludCBjb3VudDIpIHsKICBpZiAoY291bnQgPT0gbnVsbCkgdGhyb3cgJ05vIGNvdW50IHByb3ZpZGVkJzsKICBpZiAoY291bnQyID09IG51bGwpIHRocm93ICdObyBjb3VudCBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVUb29NYW55QXJndW1lbnRzLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVG9vIG1hbnkgcG9zaXRpb25hbCBhcmd1bWVudHM6ICR7Y291bnR9IGFsbG93ZWQsIGJ1dCAke2NvdW50Mn0gZm91bmQuIiIiLAogICAgICB0aXA6ICIiIlRyeSByZW1vdmluZyB0aGUgZXh0cmEgcG9zaXRpb25hbCBhcmd1bWVudHMuIiIiLAogICAgICBhcmd1bWVudHM6IHsnY291bnQnOiBjb3VudCwgJ2NvdW50Mic6IGNvdW50Mn0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVUb3BMZXZlbE9wZXJhdG9yID0gbWVzc2FnZVRvcExldmVsT3BlcmF0b3I7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVG9wTGV2ZWxPcGVyYXRvciA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlRvcExldmVsT3BlcmF0b3IiLAogICAgaW5kZXg6IDE0LAogICAgbWVzc2FnZTogciIiIk9wZXJhdG9ycyBtdXN0IGJlIGRlY2xhcmVkIHdpdGhpbiBhIGNsYXNzLiIiIiwKICAgIHRpcDoKICAgICAgICByIiIiVHJ5IHJlbW92aW5nIHRoZSBvcGVyYXRvciwgbW92aW5nIGl0IHRvIGEgY2xhc3MsIG9yIGNvbnZlcnRpbmcgaXQgdG8gYmUgYSBmdW5jdGlvbi4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVHlwZUFmdGVyVmFyID0gbWVzc2FnZVR5cGVBZnRlclZhcjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VUeXBlQWZ0ZXJWYXIgPSBjb25zdCBNZXNzYWdlQ29kZSgiVHlwZUFmdGVyVmFyIiwKICAgIGluZGV4OiA4OSwKICAgIG1lc3NhZ2U6CiAgICAgICAgciIiIlZhcmlhYmxlcyBjYW4ndCBiZSBkZWNsYXJlZCB1c2luZyBib3RoICd2YXInIGFuZCBhIHR5cGUgbmFtZS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgJ3Zhci4nIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50KT4gdGVtcGxhdGVUeXBlQXJndW1lbnRNaXNtYXRjaCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKGludCBjb3VudCk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIkV4cGVjdGVkICNjb3VudCB0eXBlIGFyZ3VtZW50cy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNUeXBlQXJndW1lbnRNaXNtYXRjaCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oaW50IGNvdW50KT4gY29kZVR5cGVBcmd1bWVudE1pc21hdGNoID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihpbnQgY291bnQpPigKICAgICAgICAiVHlwZUFyZ3VtZW50TWlzbWF0Y2giLCB0ZW1wbGF0ZVR5cGVBcmd1bWVudE1pc21hdGNoLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJXUk9OR19OVU1CRVJfT0ZfVFlQRV9BUkdVTUVOVFMiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNUeXBlQXJndW1lbnRNaXNtYXRjaChpbnQgY291bnQpIHsKICBpZiAoY291bnQgPT0gbnVsbCkgdGhyb3cgJ05vIGNvdW50IHByb3ZpZGVkJzsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVR5cGVBcmd1bWVudE1pc21hdGNoLAogICAgICBtZXNzYWdlOiAiIiJFeHBlY3RlZCAke2NvdW50fSB0eXBlIGFyZ3VtZW50cy4iIiIsCiAgICAgIGFyZ3VtZW50czogeydjb3VudCc6IGNvdW50fSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGUgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICAgICAgciIiIkNhbid0IHVzZSB0eXBlIGFyZ3VtZW50cyB3aXRoIHR5cGUgdmFyaWFibGUgJyNuYW1lJy4iIiIsCiAgICAgICAgdGlwVGVtcGxhdGU6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIHR5cGUgYXJndW1lbnRzLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1R5cGVBcmd1bWVudHNPblR5cGVWYXJpYWJsZSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiBjb2RlVHlwZUFyZ3VtZW50c09uVHlwZVZhcmlhYmxlID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+KAogICAgICAgICJUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGUiLCB0ZW1wbGF0ZVR5cGVBcmd1bWVudHNPblR5cGVWYXJpYWJsZSwKICAgICAgICBpbmRleDogMTMsIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1R5cGVBcmd1bWVudHNPblR5cGVWYXJpYWJsZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVR5cGVBcmd1bWVudHNPblR5cGVWYXJpYWJsZSwKICAgICAgbWVzc2FnZTogIiIiQ2FuJ3QgdXNlIHR5cGUgYXJndW1lbnRzIHdpdGggdHlwZSB2YXJpYWJsZSAnJHtuYW1lfScuIiIiLAogICAgICB0aXA6ICIiIlRyeSByZW1vdmluZyB0aGUgdHlwZSBhcmd1bWVudHMuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVHlwZUJlZm9yZUZhY3RvcnkgPSBtZXNzYWdlVHlwZUJlZm9yZUZhY3Rvcnk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVHlwZUJlZm9yZUZhY3RvcnkgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJUeXBlQmVmb3JlRmFjdG9yeSIsCiAgICBpbmRleDogNTcsCiAgICBtZXNzYWdlOiByIiIiRmFjdG9yeSBjb25zdHJ1Y3RvcnMgY2Fubm90IGhhdmUgYSByZXR1cm4gdHlwZS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgcmVtb3ZpbmcgdGhlIHR5cGUgYXBwZWFyaW5nIGJlZm9yZSAnZmFjdG9yeScuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZVR5cGVOb3RGb3VuZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiVHlwZSAnI25hbWUnIG5vdCBmb3VuZC4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNUeXBlTm90Rm91bmQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZVR5cGVOb3RGb3VuZCA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICAiVHlwZU5vdEZvdW5kIiwgdGVtcGxhdGVUeXBlTm90Rm91bmQsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlVOREVGSU5FRF9DTEFTUyJdLAogICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1R5cGVOb3RGb3VuZChTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVR5cGVOb3RGb3VuZCwKICAgICAgbWVzc2FnZTogIiIiVHlwZSAnJHtuYW1lfScgbm90IGZvdW5kLiIiIiwgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4gdGVtcGxhdGVUeXBlT3JpZ2luID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNuYW1lJyBpcyBmcm9tICcjdXJpJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNUeXBlT3JpZ2luKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgVXJpIHVyaV8pPiBjb2RlVHlwZU9yaWdpbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfKT4oCiAgIlR5cGVPcmlnaW4iLAogIHRlbXBsYXRlVHlwZU9yaWdpbiwKKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNUeXBlT3JpZ2luKFN0cmluZyBuYW1lLCBVcmkgdXJpXykgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVR5cGVPcmlnaW4sCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpcyBmcm9tICcke3VyaX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndXJpJzogdXJpX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4KICAgIHRlbXBsYXRlVHlwZU9yaWdpbldpdGhGaWxlVXJpID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFVyaSB1cmlfLCBVcmkgdXJpMl8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiInI25hbWUnIGlzIGZyb20gJyN1cmknICgnI3VyaTInKS4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNUeXBlT3JpZ2luV2l0aEZpbGVVcmkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4KICAgIGNvZGVUeXBlT3JpZ2luV2l0aEZpbGVVcmkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKT4oCiAgIlR5cGVPcmlnaW5XaXRoRmlsZVVyaSIsCiAgdGVtcGxhdGVUeXBlT3JpZ2luV2l0aEZpbGVVcmksCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVHlwZU9yaWdpbldpdGhGaWxlVXJpKFN0cmluZyBuYW1lLCBVcmkgdXJpXywgVXJpIHVyaTJfKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFN0cmluZyB1cmkgPSByZWxhdGl2aXplVXJpKHVyaV8pOwogIFN0cmluZyB1cmkyID0gcmVsYXRpdml6ZVVyaSh1cmkyXyk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVUeXBlT3JpZ2luV2l0aEZpbGVVcmksCiAgICAgIG1lc3NhZ2U6ICIiIicke25hbWV9JyBpcyBmcm9tICcke3VyaX0nICgnJHt1cmkyfScpLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndXJpJzogdXJpXywgJ3VyaTInOiB1cmkyX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZSA9CiAgICBtZXNzYWdlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWUgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZSIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiRFVQTElDQVRFX0RFRklOSVRJT04iXSwKICAgIG1lc3NhZ2U6IHIiIiJBIHR5cGUgdmFyaWFibGUgY2FuJ3QgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIGFub3RoZXIuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPgogICAgdGVtcGxhdGVUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJUaGUgb3RoZXIgdHlwZSB2YXJpYWJsZSBuYW1lZCAnI25hbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1R5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lQ2F1c2UpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZVR5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lQ2F1c2UgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oIlR5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lQ2F1c2UiLAogICAgICAgIHRlbXBsYXRlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWVDYXVzZSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuY29udGV4dCk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWVDYXVzZShTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVR5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lQ2F1c2UsCiAgICAgIG1lc3NhZ2U6ICIiIlRoZSBvdGhlciB0eXBlIHZhcmlhYmxlIG5hbWVkICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVUeXBlVmFyaWFibGVJbkNvbnN0YW50Q29udGV4dCA9CiAgICBtZXNzYWdlVHlwZVZhcmlhYmxlSW5Db25zdGFudENvbnRleHQ7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVHlwZVZhcmlhYmxlSW5Db25zdGFudENvbnRleHQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJUeXBlVmFyaWFibGVJbkNvbnN0YW50Q29udGV4dCIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVFlQRV9QQVJBTUVURVJfSU5fQ09OU1RfRVhQUkVTU0lPTiJdLAogICAgbWVzc2FnZTogciIiIlR5cGUgdmFyaWFibGVzIGNhbid0IGJlIHVzZWQgYXMgY29uc3RhbnRzLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVUeXBlVmFyaWFibGVJblN0YXRpY0NvbnRleHQgPQogICAgbWVzc2FnZVR5cGVWYXJpYWJsZUluU3RhdGljQ29udGV4dDsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VUeXBlVmFyaWFibGVJblN0YXRpY0NvbnRleHQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJUeXBlVmFyaWFibGVJblN0YXRpY0NvbnRleHQiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlRZUEVfUEFSQU1FVEVSX1JFRkVSRU5DRURfQllfU1RBVElDIl0sCiAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nLAogICAgbWVzc2FnZTogciIiIlR5cGUgdmFyaWFibGVzIGNhbid0IGJlIHVzZWQgaW4gc3RhdGljIG1lbWJlcnMuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVR5cGVWYXJpYWJsZVNhbWVOYW1lQXNFbmNsb3NpbmcgPQogICAgbWVzc2FnZVR5cGVWYXJpYWJsZVNhbWVOYW1lQXNFbmNsb3Npbmc7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVHlwZVZhcmlhYmxlU2FtZU5hbWVBc0VuY2xvc2luZyA9IGNvbnN0IE1lc3NhZ2VDb2RlKAogICAgIlR5cGVWYXJpYWJsZVNhbWVOYW1lQXNFbmNsb3NpbmciLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIkNPTkZMSUNUSU5HX1RZUEVfVkFSSUFCTEVfQU5EX0NMQVNTIl0sCiAgICBtZXNzYWdlOgogICAgICAgIHIiIiJBIHR5cGUgdmFyaWFibGUgY2FuJ3QgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIGl0cyBlbmNsb3NpbmcgZGVjbGFyYXRpb24uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVR5cGVkZWZJbkNsYXNzID0gbWVzc2FnZVR5cGVkZWZJbkNsYXNzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVR5cGVkZWZJbkNsYXNzID0gY29uc3QgTWVzc2FnZUNvZGUoIlR5cGVkZWZJbkNsYXNzIiwKICAgIGluZGV4OiA3LAogICAgbWVzc2FnZTogciIiIlR5cGVkZWZzIGNhbid0IGJlIGRlY2xhcmVkIGluc2lkZSBjbGFzc2VzLiIiIiwKICAgIHRpcDogciIiIlRyeSBtb3ZpbmcgdGhlIHR5cGVkZWYgdG8gdGhlIHRvcC1sZXZlbC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVHlwZWRlZk5vdEZ1bmN0aW9uID0gbWVzc2FnZVR5cGVkZWZOb3RGdW5jdGlvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VUeXBlZGVmTm90RnVuY3Rpb24gPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJUeXBlZGVmTm90RnVuY3Rpb24iLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIklOVkFMSURfR0VORVJJQ19GVU5DVElPTl9UWVBFIl0sCiAgICBtZXNzYWdlOiByIiIiQ2FuJ3QgY3JlYXRlIHR5cGVkZWYgZnJvbSBub24tZnVuY3Rpb24gdHlwZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIERhcnRUeXBlCiAgICAgICAgICAgIF90eXBlKT4gdGVtcGxhdGVVbmRlZmluZWRHZXR0ZXIgPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSk+KAogICAgbWVzc2FnZVRlbXBsYXRlOgogICAgICAgIHIiIiJUaGUgZ2V0dGVyICcjbmFtZScgaXNuJ3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcjdHlwZScuIiIiLAogICAgdGlwVGVtcGxhdGU6CiAgICAgICAgciIiIlRyeSBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGdldHRlciwgb3IgZGVmaW5pbmcgYSBnZXR0ZXIgb3IgZmllbGQgbmFtZWQgJyNuYW1lJy4iIiIsCiAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1VuZGVmaW5lZEdldHRlcik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlKT4gY29kZVVuZGVmaW5lZEdldHRlciA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlKT4oCiAgICAgICAgIlVuZGVmaW5lZEdldHRlciIsIHRlbXBsYXRlVW5kZWZpbmVkR2V0dGVyLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTkRFRklORURfR0VUVEVSIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1VuZGVmaW5lZEdldHRlcihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgVHlwZUxhYmVsZXIgbGFiZWxlciA9IG5ldyBUeXBlTGFiZWxlcigpOwogIExpc3Q8T2JqZWN0PiB0eXBlUGFydHMgPSBsYWJlbGVyLmxhYmVsVHlwZShfdHlwZSk7CiAgU3RyaW5nIHR5cGUgPSB0eXBlUGFydHMuam9pbigpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVW5kZWZpbmVkR2V0dGVyLAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGdldHRlciAnJHtuYW1lfScgaXNuJ3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcke3R5cGV9Jy4iIiIgKwogICAgICAgICAgICAgIGxhYmVsZXIub3JpZ2luTWVzc2FnZXMsCiAgICAgIHRpcDoKICAgICAgICAgICIiIlRyeSBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGdldHRlciwgb3IgZGVmaW5pbmcgYSBnZXR0ZXIgb3IgZmllbGQgbmFtZWQgJyR7bmFtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J25hbWUnOiBuYW1lLCAndHlwZSc6IF90eXBlfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPAogICAgTWVzc2FnZSBGdW5jdGlvbigKICAgICAgICBTdHJpbmcgbmFtZSwKICAgICAgICBEYXJ0VHlwZQogICAgICAgICAgICBfdHlwZSk+IHRlbXBsYXRlVW5kZWZpbmVkTWV0aG9kID0gY29uc3QgVGVtcGxhdGU8CiAgICAgICAgTWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIG1ldGhvZCAnI25hbWUnIGlzbid0IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnI3R5cGUnLiIiIiwKICAgIHRpcFRlbXBsYXRlOgogICAgICAgIHIiIiJUcnkgY29ycmVjdGluZyB0aGUgbmFtZSB0byB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBtZXRob2QsIG9yIGRlZmluaW5nIGEgbWV0aG9kIG5hbWVkICcjbmFtZScuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNVbmRlZmluZWRNZXRob2QpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSk+IGNvZGVVbmRlZmluZWRNZXRob2QgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSk+KAogICAgICAgICJVbmRlZmluZWRNZXRob2QiLCB0ZW1wbGF0ZVVuZGVmaW5lZE1ldGhvZCwKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5ERUZJTkVEX01FVEhPRCJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNVbmRlZmluZWRNZXRob2QoU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlKSB7CiAgaWYgKG5hbWUuaXNFbXB0eSkgdGhyb3cgJ05vIG5hbWUgcHJvdmlkZWQnOwogIG5hbWUgPSBkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lKG5hbWUpOwogIFR5cGVMYWJlbGVyIGxhYmVsZXIgPSBuZXcgVHlwZUxhYmVsZXIoKTsKICBMaXN0PE9iamVjdD4gdHlwZVBhcnRzID0gbGFiZWxlci5sYWJlbFR5cGUoX3R5cGUpOwogIFN0cmluZyB0eXBlID0gdHlwZVBhcnRzLmpvaW4oKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVVuZGVmaW5lZE1ldGhvZCwKICAgICAgbWVzc2FnZToKICAgICAgICAgICIiIlRoZSBtZXRob2QgJyR7bmFtZX0nIGlzbid0IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnJHt0eXBlfScuIiIiICsKICAgICAgICAgICAgICBsYWJlbGVyLm9yaWdpbk1lc3NhZ2VzLAogICAgICB0aXA6CiAgICAgICAgICAiIiJUcnkgY29ycmVjdGluZyB0aGUgbmFtZSB0byB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBtZXRob2QsIG9yIGRlZmluaW5nIGEgbWV0aG9kIG5hbWVkICcke25hbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ3R5cGUnOiBfdHlwZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTwKICAgIE1lc3NhZ2UgRnVuY3Rpb24oCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgRGFydFR5cGUKICAgICAgICAgICAgX3R5cGUpPiB0ZW1wbGF0ZVVuZGVmaW5lZFNldHRlciA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIERhcnRUeXBlIF90eXBlKT4oCiAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgciIiIlRoZSBzZXR0ZXIgJyNuYW1lJyBpc24ndCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyN0eXBlJy4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gdGhlIG5hbWUgb2YgYW4gZXhpc3Rpbmcgc2V0dGVyLCBvciBkZWZpbmluZyBhIHNldHRlciBvciBmaWVsZCBuYW1lZCAnI25hbWUnLiIiIiwKICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVW5kZWZpbmVkU2V0dGVyKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUpPiBjb2RlVW5kZWZpbmVkU2V0dGVyID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSwgRGFydFR5cGUgX3R5cGUpPigKICAgICAgICAiVW5kZWZpbmVkU2V0dGVyIiwgdGVtcGxhdGVVbmRlZmluZWRTZXR0ZXIsCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlVOREVGSU5FRF9TRVRURVIiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVW5kZWZpbmVkU2V0dGVyKFN0cmluZyBuYW1lLCBEYXJ0VHlwZSBfdHlwZSkgewogIGlmIChuYW1lLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lID0gZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uTmFtZShuYW1lKTsKICBUeXBlTGFiZWxlciBsYWJlbGVyID0gbmV3IFR5cGVMYWJlbGVyKCk7CiAgTGlzdDxPYmplY3Q+IHR5cGVQYXJ0cyA9IGxhYmVsZXIubGFiZWxUeXBlKF90eXBlKTsKICBTdHJpbmcgdHlwZSA9IHR5cGVQYXJ0cy5qb2luKCk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVVbmRlZmluZWRTZXR0ZXIsCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiJUaGUgc2V0dGVyICcke25hbWV9JyBpc24ndCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyR7dHlwZX0nLiIiIiArCiAgICAgICAgICAgICAgbGFiZWxlci5vcmlnaW5NZXNzYWdlcywKICAgICAgdGlwOgogICAgICAgICAgIiIiVHJ5IGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gdGhlIG5hbWUgb2YgYW4gZXhpc3Rpbmcgc2V0dGVyLCBvciBkZWZpbmluZyBhIHNldHRlciBvciBmaWVsZCBuYW1lZCAnJHtuYW1lfScuIiIiLAogICAgICBhcmd1bWVudHM6IHsnbmFtZSc6IG5hbWUsICd0eXBlJzogX3R5cGV9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVW5leHBlY3RlZERvbGxhckluU3RyaW5nID0gbWVzc2FnZVVuZXhwZWN0ZWREb2xsYXJJblN0cmluZzsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VVbmV4cGVjdGVkRG9sbGFySW5TdHJpbmcgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJVbmV4cGVjdGVkRG9sbGFySW5TdHJpbmciLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlVORVhQRUNURURfRE9MTEFSX0lOX1NUUklORyJdLAogICAgbWVzc2FnZToKICAgICAgICByIiIiQSAnJCcgaGFzIHNwZWNpYWwgbWVhbmluZyBpbnNpZGUgYSBzdHJpbmcsIGFuZCBtdXN0IGJlIGZvbGxvd2VkIGJ5IGFuIGlkZW50aWZpZXIgb3IgYW4gZXhwcmVzc2lvbiBpbiBjdXJseSBicmFjZXMgKHt9KS4iIiIsCiAgICB0aXA6IHIiIiJUcnkgYWRkaW5nIGEgYmFja3NsYXNoIChcKSB0byBlc2NhcGUgdGhlICckJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IHRlbXBsYXRlVW5leHBlY3RlZFRva2VuID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJVbmV4cGVjdGVkIHRva2VuICcjbGV4ZW1lJy4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNVbmV4cGVjdGVkVG9rZW4pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFRva2VuIHRva2VuKT4gY29kZVVuZXhwZWN0ZWRUb2tlbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPigKICAgICAgICAiVW5leHBlY3RlZFRva2VuIiwgdGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIlVORVhQRUNURURfVE9LRU4iXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVW5leHBlY3RlZFRva2VuKFRva2VuIHRva2VuKSB7CiAgU3RyaW5nIGxleGVtZSA9IHRva2VuLmxleGVtZTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVVuZXhwZWN0ZWRUb2tlbiwKICAgICAgbWVzc2FnZTogIiIiVW5leHBlY3RlZCB0b2tlbiAnJHtsZXhlbWV9Jy4iIiIsCiAgICAgIGFyZ3VtZW50czogeyd0b2tlbic6IHRva2VufSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgVG9rZW4gdG9rZW4pPgogICAgdGVtcGxhdGVVbm1hdGNoZWRUb2tlbiA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFRva2VuIHRva2VuKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiQ2FuJ3QgZmluZCAnI3N0cmluZycgdG8gbWF0Y2ggJyNsZXhlbWUnLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1VubWF0Y2hlZFRva2VuKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBUb2tlbiB0b2tlbik+IGNvZGVVbm1hdGNoZWRUb2tlbiA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgVG9rZW4gdG9rZW4pPigKICAgICAgICAiVW5tYXRjaGVkVG9rZW4iLCB0ZW1wbGF0ZVVubWF0Y2hlZFRva2VuLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJFWFBFQ1RFRF9UT0tFTiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNVbm1hdGNoZWRUb2tlbihTdHJpbmcgc3RyaW5nLCBUb2tlbiB0b2tlbikgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgU3RyaW5nIGxleGVtZSA9IHRva2VuLmxleGVtZTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVVubWF0Y2hlZFRva2VuLAogICAgICBtZXNzYWdlOiAiIiJDYW4ndCBmaW5kICcke3N0cmluZ30nIHRvIG1hdGNoICcke2xleGVtZX0nLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZywgJ3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBuYW1lLAogICAgICAgIFN0cmluZwogICAgICAgICAgICBuYW1lMik+IHRlbXBsYXRlVW5yZXNvbHZlZFByZWZpeEluVHlwZUFubm90YXRpb24gPSBjb25zdCBUZW1wbGF0ZTwKICAgICAgICBNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiJyNuYW1lLiNuYW1lMicgY2FuJ3QgYmUgdXNlZCBhcyBhIHR5cGUgYmVjYXVzZSAnI25hbWUnIGlzbid0IGRlZmluZWQuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNVbnJlc29sdmVkUHJlZml4SW5UeXBlQW5ub3RhdGlvbik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUsIFN0cmluZyBuYW1lMik+CiAgICBjb2RlVW5yZXNvbHZlZFByZWZpeEluVHlwZUFubm90YXRpb24gPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpPigKICAgICAgICAiVW5yZXNvbHZlZFByZWZpeEluVHlwZUFubm90YXRpb24iLAogICAgICAgIHRlbXBsYXRlVW5yZXNvbHZlZFByZWZpeEluVHlwZUFubm90YXRpb24sCiAgICAgICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk5PVF9BX1RZUEUiXSwKICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNVbnJlc29sdmVkUHJlZml4SW5UeXBlQW5ub3RhdGlvbigKICAgIFN0cmluZyBuYW1lLCBTdHJpbmcgbmFtZTIpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgaWYgKG5hbWUyLmlzRW1wdHkpIHRocm93ICdObyBuYW1lIHByb3ZpZGVkJzsKICBuYW1lMiA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZTIpOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlVW5yZXNvbHZlZFByZWZpeEluVHlwZUFubm90YXRpb24sCiAgICAgIG1lc3NhZ2U6CiAgICAgICAgICAiIiInJHtuYW1lfS4ke25hbWUyfScgY2FuJ3QgYmUgdXNlZCBhcyBhIHR5cGUgYmVjYXVzZSAnJHtuYW1lfScgaXNuJ3QgZGVmaW5lZC4iIiIsCiAgICAgIGFyZ3VtZW50czogeyduYW1lJzogbmFtZSwgJ25hbWUyJzogbmFtZTJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nKT4gdGVtcGxhdGVVbnNwZWNpZmllZCA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiIjc3RyaW5nIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVW5zcGVjaWZpZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPiBjb2RlVW5zcGVjaWZpZWQgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcpPigKICAiVW5zcGVjaWZpZWQiLAogIHRlbXBsYXRlVW5zcGVjaWZpZWQsCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVW5zcGVjaWZpZWQoU3RyaW5nIHN0cmluZykgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVVbnNwZWNpZmllZCwKICAgICAgbWVzc2FnZTogIiIiJHtzdHJpbmd9IiIiLCBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVG9rZW4gdG9rZW4pPiB0ZW1wbGF0ZVVuc3VwcG9ydGVkT3BlcmF0b3IgPQogICAgY29uc3QgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogciIiIlRoZSAnI2xleGVtZScgb3BlcmF0b3IgaXMgbm90IHN1cHBvcnRlZC4iIiIsCiAgICAgICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNVbnN1cHBvcnRlZE9wZXJhdG9yKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IGNvZGVVbnN1cHBvcnRlZE9wZXJhdG9yID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+KAogICAgICAgICJVbnN1cHBvcnRlZE9wZXJhdG9yIiwgdGVtcGxhdGVVbnN1cHBvcnRlZE9wZXJhdG9yLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTlNVUFBPUlRFRF9PUEVSQVRPUiJdKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCk1lc3NhZ2UgX3dpdGhBcmd1bWVudHNVbnN1cHBvcnRlZE9wZXJhdG9yKFRva2VuIHRva2VuKSB7CiAgU3RyaW5nIGxleGVtZSA9IHRva2VuLmxleGVtZTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVVuc3VwcG9ydGVkT3BlcmF0b3IsCiAgICAgIG1lc3NhZ2U6ICIiIlRoZSAnJHtsZXhlbWV9JyBvcGVyYXRvciBpcyBub3Qgc3VwcG9ydGVkLiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3Rva2VuJzogdG9rZW59KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVW5zdXBwb3J0ZWRQcmVmaXhQbHVzID0gbWVzc2FnZVVuc3VwcG9ydGVkUHJlZml4UGx1czsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VVbnN1cHBvcnRlZFByZWZpeFBsdXMgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJVbnN1cHBvcnRlZFByZWZpeFBsdXMiLAogICAgYW5hbHl6ZXJDb2RlczogPFN0cmluZz5bIk1JU1NJTkdfSURFTlRJRklFUiJdLAogICAgbWVzc2FnZTogciIiIicrJyBpcyBub3QgYSBwcmVmaXggb3BlcmF0b3IuIiIiLAogICAgdGlwOiByIiIiVHJ5IHJlbW92aW5nICcrJy4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVW50ZXJtaW5hdGVkQ29tbWVudCA9IG1lc3NhZ2VVbnRlcm1pbmF0ZWRDb21tZW50OwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVVudGVybWluYXRlZENvbW1lbnQgPSBjb25zdCBNZXNzYWdlQ29kZSgKICAgICJVbnRlcm1pbmF0ZWRDb21tZW50IiwKICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVTlRFUk1JTkFURURfTVVMVElfTElORV9DT01NRU5UIl0sCiAgICBtZXNzYWdlOiByIiIiQ29tbWVudCBzdGFydGluZyB3aXRoICcvKicgbXVzdCBlbmQgd2l0aCAnKi8nLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4KICAgIHRlbXBsYXRlVW50ZXJtaW5hdGVkU3RyaW5nID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6CiAgICAgICAgICAgIHIiIiJTdHJpbmcgc3RhcnRpbmcgd2l0aCAjc3RyaW5nIG11c3QgZW5kIHdpdGggI3N0cmluZzIuIiIiLAogICAgICAgIHdpdGhBcmd1bWVudHM6IF93aXRoQXJndW1lbnRzVW50ZXJtaW5hdGVkU3RyaW5nKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+CiAgICBjb2RlVW50ZXJtaW5hdGVkU3RyaW5nID0KICAgIGNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMik+KAogICAgICAgICJVbnRlcm1pbmF0ZWRTdHJpbmciLCB0ZW1wbGF0ZVVudGVybWluYXRlZFN0cmluZywKICAgICAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVU5URVJNSU5BVEVEX1NUUklOR19MSVRFUkFMIl0pOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1VudGVybWluYXRlZFN0cmluZyhTdHJpbmcgc3RyaW5nLCBTdHJpbmcgc3RyaW5nMikgewogIGlmIChzdHJpbmcuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgaWYgKHN0cmluZzIuaXNFbXB0eSkgdGhyb3cgJ05vIHN0cmluZyBwcm92aWRlZCc7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVVbnRlcm1pbmF0ZWRTdHJpbmcsCiAgICAgIG1lc3NhZ2U6ICIiIlN0cmluZyBzdGFydGluZyB3aXRoICR7c3RyaW5nfSBtdXN0IGVuZCB3aXRoICR7c3RyaW5nMn0uIiIiLAogICAgICBhcmd1bWVudHM6IHsnc3RyaW5nJzogc3RyaW5nLCAnc3RyaW5nMic6IHN0cmluZzJ9KTsKfQoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlVW50ZXJtaW5hdGVkVG9rZW4gPSBtZXNzYWdlVW50ZXJtaW5hdGVkVG9rZW47CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVW50ZXJtaW5hdGVkVG9rZW4gPQogICAgY29uc3QgTWVzc2FnZUNvZGUoIlVudGVybWluYXRlZFRva2VuIiwgbWVzc2FnZTogciIiIkluY29tcGxldGUgdG9rZW4uIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPiB0ZW1wbGF0ZVVudHJhbnNsYXRhYmxlVXJpID0KICAgIGNvbnN0IFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPigKICAgICAgICBtZXNzYWdlVGVtcGxhdGU6IHIiIiJOb3QgZm91bmQ6ICcjdXJpJyIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1VudHJhbnNsYXRhYmxlVXJpKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TWVzc2FnZSBGdW5jdGlvbihVcmkgdXJpXyk+IGNvZGVVbnRyYW5zbGF0YWJsZVVyaSA9CiAgICBjb25zdCBDb2RlPE1lc3NhZ2UgRnVuY3Rpb24oVXJpIHVyaV8pPigKICAgICAgICAiVW50cmFuc2xhdGFibGVVcmkiLCB0ZW1wbGF0ZVVudHJhbnNsYXRhYmxlVXJpLAogICAgICAgIGFuYWx5emVyQ29kZXM6IDxTdHJpbmc+WyJVUklfRE9FU19OT1RfRVhJU1QiXSk7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzVW50cmFuc2xhdGFibGVVcmkoVXJpIHVyaV8pIHsKICBTdHJpbmcgdXJpID0gcmVsYXRpdml6ZVVyaSh1cmlfKTsKICByZXR1cm4gbmV3IE1lc3NhZ2UoY29kZVVudHJhbnNsYXRhYmxlVXJpLAogICAgICBtZXNzYWdlOiAiIiJOb3QgZm91bmQ6ICcke3VyaX0nIiIiLCBhcmd1bWVudHM6IHsndXJpJzogdXJpX30pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4KICAgIHRlbXBsYXRlVXNlT2ZEZXByZWNhdGVkSWRlbnRpZmllciA9CiAgICBjb25zdCBUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgbWVzc2FnZVRlbXBsYXRlOiByIiIiJyNuYW1lJyBpcyBkZXByZWNhdGVkLiIiIiwKICAgICAgICB3aXRoQXJndW1lbnRzOiBfd2l0aEFyZ3VtZW50c1VzZU9mRGVwcmVjYXRlZElkZW50aWZpZXIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4gY29kZVVzZU9mRGVwcmVjYXRlZElkZW50aWZpZXIgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBuYW1lKT4oCiAgICAgICAgIlVzZU9mRGVwcmVjYXRlZElkZW50aWZpZXIiLCB0ZW1wbGF0ZVVzZU9mRGVwcmVjYXRlZElkZW50aWZpZXIsCiAgICAgICAgc2V2ZXJpdHk6IFNldmVyaXR5Lmlnbm9yZWQpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KTWVzc2FnZSBfd2l0aEFyZ3VtZW50c1VzZU9mRGVwcmVjYXRlZElkZW50aWZpZXIoU3RyaW5nIG5hbWUpIHsKICBpZiAobmFtZS5pc0VtcHR5KSB0aHJvdyAnTm8gbmFtZSBwcm92aWRlZCc7CiAgbmFtZSA9IGRlbWFuZ2xlTWl4aW5BcHBsaWNhdGlvbk5hbWUobmFtZSk7CiAgcmV0dXJuIG5ldyBNZXNzYWdlKGNvZGVVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyLAogICAgICBtZXNzYWdlOiAiIiInJHtuYW1lfScgaXMgZGVwcmVjYXRlZC4iIiIsIGFyZ3VtZW50czogeyduYW1lJzogbmFtZX0pOwp9CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVWYXJBc1R5cGVOYW1lID0gbWVzc2FnZVZhckFzVHlwZU5hbWU7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlVmFyQXNUeXBlTmFtZSA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJWYXJBc1R5cGVOYW1lIiwKICAgIGluZGV4OiA2MSwgbWVzc2FnZTogciIiIlRoZSBrZXl3b3JkICd2YXInIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlIG5hbWUuIiIiKTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVZhclJldHVyblR5cGUgPSBtZXNzYWdlVmFyUmV0dXJuVHlwZTsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VWYXJSZXR1cm5UeXBlID0gY29uc3QgTWVzc2FnZUNvZGUoIlZhclJldHVyblR5cGUiLAogICAgaW5kZXg6IDEyLAogICAgbWVzc2FnZTogciIiIlRoZSByZXR1cm4gdHlwZSBjYW4ndCBiZSAndmFyJy4iIiIsCiAgICB0aXA6CiAgICAgICAgciIiIlRyeSByZW1vdmluZyB0aGUga2V5d29yZCAndmFyJywgb3IgcmVwbGFjaW5nIGl0IHdpdGggdGhlIG5hbWUgb2YgdGhlIHJldHVybiB0eXBlLiIiIik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBDb2RlPE51bGw+IGNvZGVWb2lkRXhwcmVzc2lvbiA9IG1lc3NhZ2VWb2lkRXhwcmVzc2lvbjsKCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IE1lc3NhZ2VDb2RlIG1lc3NhZ2VWb2lkRXhwcmVzc2lvbiA9IGNvbnN0IE1lc3NhZ2VDb2RlKCJWb2lkRXhwcmVzc2lvbiIsCiAgICBhbmFseXplckNvZGVzOiA8U3RyaW5nPlsiVVNFX09GX1ZPSURfUkVTVUxUIl0sCiAgICBtZXNzYWdlOiByIiIiVGhpcyBleHByZXNzaW9uIGhhcyB0eXBlICd2b2lkJyBhbmQgY2FuJ3QgYmUgdXNlZC4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgVGVtcGxhdGU8CiAgICBNZXNzYWdlIEZ1bmN0aW9uKAogICAgICAgIFN0cmluZyBzdHJpbmcsCiAgICAgICAgU3RyaW5nCiAgICAgICAgICAgIHN0cmluZzIpPiB0ZW1wbGF0ZVdlYkxpdGVyYWxDYW5ub3RCZVJlcHJlc2VudGVkRXhhY3RseSA9IGNvbnN0IFRlbXBsYXRlPAogICAgICAgIE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpPigKICAgIG1lc3NhZ2VUZW1wbGF0ZToKICAgICAgICByIiIiVGhlIGludGVnZXIgbGl0ZXJhbCAjc3RyaW5nIGNhbid0IGJlIHJlcHJlc2VudGVkIGV4YWN0bHkgaW4gSmF2YVNjcmlwdC4iIiIsCiAgICB0aXBUZW1wbGF0ZToKICAgICAgICByIiIiVHJ5IGNoYW5naW5nIHRoZSBsaXRlcmFsIHRvIHNvbWV0aGluZyB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBpbiBKYXZhc2NyaXB0LiBJbiBKYXZhc2NyaXB0ICNzdHJpbmcyIGlzIHRoZSBuZWFyZXN0IHZhbHVlIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGV4YWN0bHkuIiIiLAogICAgd2l0aEFyZ3VtZW50czogX3dpdGhBcmd1bWVudHNXZWJMaXRlcmFsQ2Fubm90QmVSZXByZXNlbnRlZEV4YWN0bHkpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4KICAgIGNvZGVXZWJMaXRlcmFsQ2Fubm90QmVSZXByZXNlbnRlZEV4YWN0bHkgPQogICAgY29uc3QgQ29kZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZyBzdHJpbmcsIFN0cmluZyBzdHJpbmcyKT4oCiAgIldlYkxpdGVyYWxDYW5ub3RCZVJlcHJlc2VudGVkRXhhY3RseSIsCiAgdGVtcGxhdGVXZWJMaXRlcmFsQ2Fubm90QmVSZXByZXNlbnRlZEV4YWN0bHksCik7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpNZXNzYWdlIF93aXRoQXJndW1lbnRzV2ViTGl0ZXJhbENhbm5vdEJlUmVwcmVzZW50ZWRFeGFjdGx5KAogICAgU3RyaW5nIHN0cmluZywgU3RyaW5nIHN0cmluZzIpIHsKICBpZiAoc3RyaW5nLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIGlmIChzdHJpbmcyLmlzRW1wdHkpIHRocm93ICdObyBzdHJpbmcgcHJvdmlkZWQnOwogIHJldHVybiBuZXcgTWVzc2FnZShjb2RlV2ViTGl0ZXJhbENhbm5vdEJlUmVwcmVzZW50ZWRFeGFjdGx5LAogICAgICBtZXNzYWdlOgogICAgICAgICAgIiIiVGhlIGludGVnZXIgbGl0ZXJhbCAke3N0cmluZ30gY2FuJ3QgYmUgcmVwcmVzZW50ZWQgZXhhY3RseSBpbiBKYXZhU2NyaXB0LiIiIiwKICAgICAgdGlwOiAiIiJUcnkgY2hhbmdpbmcgdGhlIGxpdGVyYWwgdG8gc29tZXRoaW5nIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGluIEphdmFzY3JpcHQuIEluIEphdmFzY3JpcHQgJHtzdHJpbmcyfSBpcyB0aGUgbmVhcmVzdCB2YWx1ZSB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBleGFjdGx5LiIiIiwKICAgICAgYXJndW1lbnRzOiB7J3N0cmluZyc6IHN0cmluZywgJ3N0cmluZzInOiBzdHJpbmcyfSk7Cn0KCi8vIERPIE5PVCBFRElULiBUSElTIEZJTEUgSVMgR0VORVJBVEVELiBTRUUgVE9QIE9GIEZJTEUuCmNvbnN0IENvZGU8TnVsbD4gY29kZVdpdGhCZWZvcmVFeHRlbmRzID0gbWVzc2FnZVdpdGhCZWZvcmVFeHRlbmRzOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgTWVzc2FnZUNvZGUgbWVzc2FnZVdpdGhCZWZvcmVFeHRlbmRzID0gY29uc3QgTWVzc2FnZUNvZGUoCiAgICAiV2l0aEJlZm9yZUV4dGVuZHMiLAogICAgaW5kZXg6IDExLAogICAgbWVzc2FnZTogciIiIlRoZSBleHRlbmRzIGNsYXVzZSBtdXN0IGJlIGJlZm9yZSB0aGUgd2l0aCBjbGF1c2UuIiIiLAogICAgdGlwOiByIiIiVHJ5IG1vdmluZyB0aGUgZXh0ZW5kcyBjbGF1c2UgYmVmb3JlIHRoZSB3aXRoIGNsYXVzZS4iIiIpOwoKLy8gRE8gTk9UIEVESVQuIFRISVMgRklMRSBJUyBHRU5FUkFURUQuIFNFRSBUT1AgT0YgRklMRS4KY29uc3QgQ29kZTxOdWxsPiBjb2RlWWllbGRBc0lkZW50aWZpZXIgPSBtZXNzYWdlWWllbGRBc0lkZW50aWZpZXI7CgovLyBETyBOT1QgRURJVC4gVEhJUyBGSUxFIElTIEdFTkVSQVRFRC4gU0VFIFRPUCBPRiBGSUxFLgpjb25zdCBNZXNzYWdlQ29kZSBtZXNzYWdlWWllbGRBc0lkZW50aWZp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ZXJpdHkuZGFydIUtLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc2V2ZXJpdHk7CgplbnVtIFNldmVyaXR5IHsKICBjb250ZXh0LAogIGVycm9yLAogIGVycm9yTGVnYWN5V2FybmluZywKICBpZ25vcmVkLAogIGludGVybmFsUHJvYmxlbSwKICB3YXJuaW5nLAp9Cgpjb25zdCBNYXA8U3RyaW5nLCBTdHJpbmc+IHNldmVyaXR5RW51bU5hbWVzID0gY29uc3QgPFN0cmluZywgU3RyaW5nPnsKICAnQ09OVEVYVCc6ICdjb250ZXh0JywKICAnRVJST1InOiAnZXJyb3InLAogICdFUlJPUl9MRUdBQ1lfV0FSTklORyc6ICdlcnJvckxlZ2FjeVdhcm5pbmcnLAogICdJR05PUkVEJzogJ2lnbm9yZWQnLAogICdJTlRFUk5BTF9QUk9CTEVNJzogJ2ludGVybmFsUHJvYmxlbScsCiAgJ1dBUk5JTkcnOiAnd2FybmluZycsCn07Cgpjb25zdCBNYXA8U3RyaW5nLCBTZXZlcml0eT4gc2V2ZXJpdHlFbnVtVmFsdWVzID0gY29uc3QgPFN0cmluZywgU2V2ZXJpdHk+ewogICdDT05URVhUJzogU2V2ZXJpdHkuY29udGV4dCwKICAnRVJST1InOiBTZXZlcml0eS5lcnJvciwKICAnRVJST1JfTEVHQUNZX1dBUk5JTkcnOiBTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmcsCiAgJ0lHTk9SRUQnOiBTZXZlcml0eS5pZ25vcmVkLAogICdJTlRFUk5BTF9QUk9CTEVNJzogU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtLAogICdXQVJOSU5HJzogU2V2ZXJpdHkud2FybmluZywKfTsKCmNvbnN0IE1hcDxTZXZlcml0eSwgU3RyaW5nPiBzZXZlcml0eVByZWZpeGVzID0gY29uc3QgPFNldmVyaXR5LCBTdHJpbmc+ewogIFNldmVyaXR5LmVycm9yOiAiRXJyb3IiLAogIFNldmVyaXR5LmludGVybmFsUHJvYmxlbTogIkludGVybmFsIHByb2JsZW0iLAogIFNldmVyaXR5Lndhcm5pbmc6ICJXYXJuaW5nIiwKICBTZXZlcml0eS5jb250ZXh0OiAiQ29udGV4dCIsCn07Cgpjb25zdCBNYXA8U2V2ZXJpdHksIFN0cmluZz4gc2V2ZXJpdHlUZXh0cyA9IGNvbnN0IDxTZXZlcml0eSwgU3RyaW5nPnsKICBTZXZlcml0eS5lcnJvcjogImVycm9yIiwKICBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW06ICJpbnRlcm5hbCBwcm9ibGVtIiwKICBTZXZlcml0eS53YXJuaW5nOiAid2FybmluZyIsCiAgU2V2ZXJpdHkuY29udGV4dDogImNvbnRleHQiLAp9OwowAE5OPAEYARALCRYLEwsCAUYYFDAYKRgDAUsfGzcfMB8DAUkbMB8fAwFGGzAfHwMBKXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zZXZlcml0eS5kYXJ0OXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9rZXJuZWxfZ2VuZXJhdG9yX2ltcGwuZGFydJv9Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBEZWZpbmVzIHRoZSBmcm9udC1lbmQgQVBJIGZvciBjb252ZXJ0aW5nIHNvdXJjZSBjb2RlIHRvIERhcnQgS2VybmVsIG9iamVjdHMuCmxpYnJhcnkgZnJvbnRfZW5kLmtlcm5lbF9nZW5lcmF0b3JfaW1wbDsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2tlcm5lbC5kYXJ0JyBzaG93IENvbXBvbmVudCwgQ2Fub25pY2FsTmFtZTsKCmltcG9ydCAnYmFzZS9wcm9jZXNzZWRfb3B0aW9ucy5kYXJ0JyBzaG93IFByb2Nlc3NlZE9wdGlvbnM7CgppbXBvcnQgJ2Zhc3RhL2NvbXBpbGVyX2NvbnRleHQuZGFydCcgc2hvdyBDb21waWxlckNvbnRleHQ7CgppbXBvcnQgJ2Zhc3RhL2NyYXNoLmRhcnQnIHNob3cgd2l0aENyYXNoUmVwb3J0aW5nOwoKaW1wb3J0ICdmYXN0YS9kaWxsL2RpbGxfdGFyZ2V0LmRhcnQnIHNob3cgRGlsbFRhcmdldDsKCmltcG9ydCAnZmFzdGEva2VybmVsL2tlcm5lbF90YXJnZXQuZGFydCcgc2hvdyBLZXJuZWxUYXJnZXQ7CgppbXBvcnQgJ2Zhc3RhL2tlcm5lbC91dGlscy5kYXJ0JyBzaG93IHByaW50Q29tcG9uZW50VGV4dCwgc2VyaWFsaXplQ29tcG9uZW50OwoKaW1wb3J0ICdmYXN0YS9rZXJuZWwvdmVyaWZpZXIuZGFydCcgc2hvdyB2ZXJpZnlDb21wb25lbnQ7CgppbXBvcnQgJ2Zhc3RhL2xvYWRlci5kYXJ0JyBzaG93IExvYWRlcjsKCmltcG9ydCAnZmFzdGEvc2V2ZXJpdHkuZGFydCcgc2hvdyBTZXZlcml0eTsKCmltcG9ydCAnZmFzdGEvdXJpX3RyYW5zbGF0b3IuZGFydCcgc2hvdyBVcmlUcmFuc2xhdG9yOwoKLy8vIEltcGxlbWVudGF0aW9uIGZvciB0aGUKLy8vIGBwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9rZXJuZWxfZ2VuZXJhdG9yLmRhcnRgIGFuZAovLy8gYHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL3N1bW1hcnlfZ2VuZXJhdG9yLmRhcnRgIEFQSXMuCkZ1dHVyZTxDb21waWxlclJlc3VsdD4gZ2VuZXJhdGVLZXJuZWwoUHJvY2Vzc2VkT3B0aW9ucyBvcHRpb25zLAogICAge2Jvb2wgYnVpbGRTdW1tYXJ5OiBmYWxzZSwKICAgIGJvb2wgYnVpbGRDb21wb25lbnQ6IHRydWUsCiAgICBib29sIHRydW5jYXRlU3VtbWFyeTogZmFsc2UsCiAgICBib29sIGluY2x1ZGVPZmZzZXRzOiB0cnVlfSkgYXN5bmMgewogIHJldHVybiBhd2FpdCBDb21waWxlckNvbnRleHQucnVuV2l0aE9wdGlvbnMob3B0aW9ucywgKF8pIGFzeW5jIHsKICAgIHJldHVybiBhd2FpdCBnZW5lcmF0ZUtlcm5lbEludGVybmFsKAogICAgICAgIGJ1aWxkU3VtbWFyeTogYnVpbGRTdW1tYXJ5LAogICAgICAgIGJ1aWxkQ29tcG9uZW50OiBidWlsZENvbXBvbmVudCwKICAgICAgICB0cnVuY2F0ZVN1bW1hcnk6IHRydW5jYXRlU3VtbWFyeSwKICAgICAgICBpbmNsdWRlT2Zmc2V0czogaW5jbHVkZU9mZnNldHMpOwogIH0pOwp9CgpGdXR1cmU8Q29tcGlsZXJSZXN1bHQ+IGdlbmVyYXRlS2VybmVsSW50ZXJuYWwoCiAgICB7Ym9vbCBidWlsZFN1bW1hcnk6IGZhbHNlLAogICAgYm9vbCBidWlsZENvbXBvbmVudDogdHJ1ZSwKICAgIGJvb2wgdHJ1bmNhdGVTdW1tYXJ5OiBmYWxzZSwKICAgIGJvb2wgaW5jbHVkZU9mZnNldHM6IHRydWUsCiAgICBib29sIHJldGFpbkRhdGFGb3JUZXN0aW5nOiBmYWxzZX0pIGFzeW5jIHsKICB2YXIgb3B0aW9ucyA9IENvbXBpbGVyQ29udGV4dC5jdXJyZW50Lm9wdGlvbnM7CiAgdmFyIGZzID0gb3B0aW9ucy5maWxlU3lzdGVtOwoKICBMb2FkZXIgc291cmNlTG9hZGVyOwogIHJldHVybiB3aXRoQ3Jhc2hSZXBvcnRpbmc8Q29tcGlsZXJSZXN1bHQ+KCgpIGFzeW5jIHsKICAgIFVyaVRyYW5zbGF0b3IgdXJpVHJhbnNsYXRvciA9IGF3YWl0IG9wdGlvbnMuZ2V0VXJpVHJhbnNsYXRvcigpOwoKICAgIHZhciBkaWxsVGFyZ2V0ID0KICAgICAgICBuZXcgRGlsbFRhcmdldChvcHRpb25zLnRpY2tlciwgdXJpVHJhbnNsYXRvciwgb3B0aW9ucy50YXJnZXQpOwoKICAgIFNldDxVcmk+IGV4dGVybmFsTGlicyhDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICAgIHJldHVybiBjb21wb25lbnQubGlicmFyaWVzCiAgICAgICAgICAud2hlcmUoKGxpYikgPT4gbGliLmlzRXh0ZXJuYWwpCiAgICAgICAgICAubWFwKChsaWIpID0+IGxpYi5pbXBvcnRVcmkpCiAgICAgICAgICAudG9TZXQoKTsKICAgIH0KCiAgICB2YXIgc2RrU3VtbWFyeSA9IGF3YWl0IG9wdGlvbnMubG9hZFNka1N1bW1hcnkobnVsbCk7CiAgICAvLyBCeSB1c2luZyB0aGUgbmFtZVJvb3Qgb2YgdGhlIHRoZSBzdW1tYXJ5LCB3ZSBlbmFibGUgc2hhcmluZyB0aGUKICAgIC8vIHNka1N1bW1hcnkgYmV0d2VlbiBtdWx0aXBsZSBpbnZvY2F0aW9ucy4KICAgIENhbm9uaWNhbE5hbWUgbmFtZVJvb3QgPSBzZGtTdW1tYXJ5Py5yb290ID8/IG5ldyBDYW5vbmljYWxOYW1lLnJvb3QoKTsKICAgIGlmIChzZGtTdW1tYXJ5ICE9IG51bGwpIHsKICAgICAgdmFyIGV4Y2x1ZGVkID0gZXh0ZXJuYWxMaWJzKHNka1N1bW1hcnkpOwogICAgICBkaWxsVGFyZ2V0LmxvYWRlci5hcHBlbmRMaWJyYXJpZXMoc2RrU3VtbWFyeSwKICAgICAgICAgIGZpbHRlcjogKHVyaSkgPT4gIWV4Y2x1ZGVkLmNvbnRhaW5zKHVyaSkpOwogICAgfQoKICAgIC8vIFRPRE8oc2lnbXVuZCk6IHByb3ZpZGUgYmV0dGVyIGVycm9yIHJlcG9ydGluZyBpZiBpbnB1dCBzdW1tYXJpZXMgb3IKICAgIC8vIGxpbmtlZCBkZXBlbmRlbmNpZXMgd2VyZSBsaXN0ZWQgb3V0IG9mIG9yZGVyIChvciBwcm92aWRlIG1lY2hhbmlzbSB0bwogICAgLy8gc29ydCB0aGVtKS4KICAgIGZvciAodmFyIGlucHV0U3VtbWFyeSBpbiBhd2FpdCBvcHRpb25zLmxvYWRJbnB1dFN1bW1hcmllcyhuYW1lUm9vdCkpIHsKICAgICAgdmFyIGV4Y2x1ZGVkID0gZXh0ZXJuYWxMaWJzKGlucHV0U3VtbWFyeSk7CiAgICAgIGRpbGxUYXJnZXQubG9hZGVyLmFwcGVuZExpYnJhcmllcyhpbnB1dFN1bW1hcnksCiAgICAgICAgICBmaWx0ZXI6ICh1cmkpID0+ICFleGNsdWRlZC5jb250YWlucyh1cmkpKTsKICAgIH0KCiAgICAvLyBBbGwgc3VtbWFyaWVzIGFyZSBjb25zaWRlcmVkIGV4dGVybmFsIGFuZCBzaG91bGRuJ3QgaW5jbHVkZSBzb3VyY2UtaW5mby4KICAgIGRpbGxUYXJnZXQubG9hZGVyLmxpYnJhcmllcy5mb3JFYWNoKChsaWIpIHsKICAgICAgLy8gVE9ETyhhaGUpOiBEb24ndCBkbyB0aGlzLCBhbmQgcmVtb3ZlIFtleHRlcm5hbF9zdGF0ZV9zbmFwc2hvdC5kYXJ0XS4KICAgICAgbGliLmlzRXh0ZXJuYWwgPSB0cnVlOwogICAgfSk7CgogICAgLy8gTGlua2VkIGRlcGVuZGVuY2llcyBhcmUgbWVhbnQgdG8gYmUgcGFydCBvZiB0aGUgY29tcG9uZW50IHNvIHRoZXkgYXJlIG5vdAogICAgLy8gbWFya2VkIGV4dGVybmFsLgogICAgZm9yICh2YXIgZGVwZW5kZW5jeSBpbiBhd2FpdCBvcHRpb25zLmxvYWRMaW5rRGVwZW5kZW5jaWVzKG5hbWVSb290KSkgewogICAgICB2YXIgZXhjbHVkZWQgPSBleHRlcm5hbExpYnMoZGVwZW5kZW5jeSk7CiAgICAgIGRpbGxUYXJnZXQubG9hZGVyLmFwcGVuZExpYnJhcmllcyhkZXBlbmRlbmN5LAogICAgICAgICAgZmlsdGVyOiAodXJpKSA9PiAhZXhjbHVkZWQuY29udGFpbnModXJpKSk7CiAgICB9CgogICAgYXdhaXQgZGlsbFRhcmdldC5idWlsZE91dGxpbmVzKCk7CgogICAgdmFyIGtlcm5lbFRhcmdldCA9IG5ldyBLZXJuZWxUYXJnZXQoZnMsIGZhbHNlLCBkaWxsVGFyZ2V0LCB1cmlUcmFuc2xhdG9yKTsKICAgIHNvdXJjZUxvYWRlciA9IGtlcm5lbFRhcmdldC5sb2FkZXI7CiAgICBrZXJuZWxUYXJnZXQuc2V0RW50cnlQb2ludHMob3B0aW9ucy5pbnB1dHMpOwogICAgQ29tcG9uZW50IHN1bW1hcnlDb21wb25lbnQgPQogICAgICAgIGF3YWl0IGtlcm5lbFRhcmdldC5idWlsZE91dGxpbmVzKG5hbWVSb290OiBuYW1lUm9vdCk7CiAgICBMaXN0PGludD4gc3VtbWFyeSA9IG51bGw7CiAgICBpZiAoYnVpbGRTdW1tYXJ5KSB7CiAgICAgIGlmIChvcHRpb25zLnZlcmlmeSkgewogICAgICAgIGZvciAodmFyIGVycm9yIGluIHZlcmlmeUNvbXBvbmVudChzdW1tYXJ5Q29tcG9uZW50KSkgewogICAgICAgICAgb3B0aW9ucy5yZXBvcnQoZXJyb3IsIFNldmVyaXR5LmVycm9yKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG9wdGlvbnMuZGVidWdEdW1wKSB7CiAgICAgICAgcHJpbnRDb21wb25lbnRUZXh0KHN1bW1hcnlDb21wb25lbnQsCiAgICAgICAgICAgIGxpYnJhcnlGaWx0ZXI6IGtlcm5lbFRhcmdldC5pc1NvdXJjZUxpYnJhcnkpOwogICAgICB9CgogICAgICAvLyBDcmVhdGUgdGhlIHJlcXVlc3RlZCBjb21wb25lbnQgKCJ0cnVuY2F0aW5nIiBvciBub3QpLgogICAgICAvLwogICAgICAvLyBOb3RlOiB3ZSBkb24ndCBwYXNzIHRoZSBsaWJyYXJ5IGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3RvciB0bwogICAgICAvLyBwcmVzZXJ2ZSB0aGUgdGhlIGxpYnJhcmllcyBwYXJlbnQgcG9pbnRlciAoaXQgc2hvdWxkIGNvbnRpbnVlIHRvIHBvaW50CiAgICAgIC8vIHRvIHRoZSBjb21wb25lbnQgd2l0aGluIEtlcm5lbFRhcmdldCkuCiAgICAgIHZhciB0cmltbWVkU3VtbWFyeUNvbXBvbmVudCA9CiAgICAgICAgICBuZXcgQ29tcG9uZW50KG5hbWVSb290OiBzdW1tYXJ5Q29tcG9uZW50LnJvb3QpCiAgICAgICAgICAgIC4ubGlicmFyaWVzLmFkZEFsbCh0cnVuY2F0ZVN1bW1hcnkKICAgICAgICAgICAgICAgID8ga2VybmVsVGFyZ2V0LmxvYWRlci5saWJyYXJpZXMKICAgICAgICAgICAgICAgIDogc3VtbWFyeUNvbXBvbmVudC5saWJyYXJpZXMpOwogICAgICB0cmltbWVkU3VtbWFyeUNvbXBvbmVudC5tZXRhZGF0YS5hZGRBbGwoc3VtbWFyeUNvbXBvbmVudC5tZXRhZGF0YSk7CiAgICAgIHRyaW1tZWRTdW1tYXJ5Q29tcG9uZW50LnVyaVRvU291cmNlLmFkZEFsbChzdW1tYXJ5Q29tcG9uZW50LnVyaVRvU291cmNlKTsKCiAgICAgIC8vIEFzIGRvY3VtZW50ZWQsIHdlIG9ubHkgcnVuIG91dGxpbmUgdHJhbnNmb3JtYXRpb25zIHdoZW4gd2UgYXJlIGJ1aWxkaW5nCiAgICAgIC8vIHN1bW1hcmllcyB3aXRob3V0IGJ1aWxkaW5nIGEgZnVsbCBjb21wb25lbnQgKGF0IHRoaXMgdGltZSwgdGhhdCdzCiAgICAgIC8vIHRoZSBvbmx5IG5lZWQgd2UgaGF2ZSBmb3IgdGhlc2UgdHJhbnNmb3JtYXRpb25zKS4KICAgICAgaWYgKCFidWlsZENvbXBvbmVudCkgewogICAgICAgIG9wdGlvbnMudGFyZ2V0LnBlcmZvcm1PdXRsaW5lVHJhbnNmb3JtYXRpb25zKHRyaW1tZWRTdW1tYXJ5Q29tcG9uZW50KTsKICAgICAgICBvcHRpb25zLnRpY2tlci5sb2dNcygiVHJhbnNmb3JtZWQgb3V0bGluZSIpOwogICAgICB9CiAgICAgIC8vIERvbid0IGluY2x1ZGUgc291cmNlIChidXQgZG8gYWRkIGl0IGFib3ZlIHRvIGluY2x1ZGUgaW1wb3J0VXJpcykuCiAgICAgIHN1bW1hcnkgPSBzZXJpYWxpemVDb21wb25lbnQodHJpbW1lZFN1bW1hcnlDb21wb25lbnQsCiAgICAgICAgICBpbmNsdWRlU291cmNlczogZmFsc2UsIGluY2x1ZGVPZmZzZXRzOiBpbmNsdWRlT2Zmc2V0cyk7CiAgICAgIG9wdGlvbnMudGlja2VyLmxvZ01zKCJHZW5lcmF0ZWQgb3V0bGluZSIpOwogICAgfQoKICAgIENvbXBvbmVudCBjb21wb25lbnQ7CiAgICBpZiAoYnVpbGRDb21wb25lbnQpIHsKICAgICAgY29tcG9uZW50ID0gYXdhaXQga2VybmVsVGFyZ2V0LmJ1aWxkQ29tcG9uZW50KHZlcmlmeTogb3B0aW9ucy52ZXJpZnkpOwogICAgICBpZiAob3B0aW9ucy5kZWJ1Z0R1bXApIHsKICAgICAgICBwcmludENvbXBvbmVudFRleHQoY29tcG9uZW50LAogICAgICAgICAgICBsaWJyYXJ5RmlsdGVyOiBrZXJuZWxUYXJnZXQuaXNTb3VyY2VMaWJyYXJ5KTsKICAgICAgfQogICAgICBvcHRpb25zLnRpY2tlci5sb2dNcygiR2VuZXJhdGVkIGNvbXBvbmVudCIpOwogICAgfQoKICAgIHJldHVybiBuZXcgQ29tcGlsZXJSZXN1bHQoCiAgICAgICAgc3VtbWFyeTogc3VtbWFyeSwKICAgICAgICBjb21wb25lbnQ6IGNvbXBvbmVudCwKICAgICAgICBkZXBzOiBuZXcgTGlzdDxVcmk+LmZyb20oQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQuZGVwZW5kZW5jaWVzKSwKICAgICAgICBrZXJuZWxUYXJnZXRGb3JUZXN0aW5nOiByZXRhaW5EYXRhRm9yVGVzdGluZyA/IGtlcm5lbFRhcmdldCA6IG51bGwpOwogIH0sICgpID0+IHNvdXJjZUxvYWRlcj8uY3VycmVudFVyaUZvckNyYXNoUmVwb3J0aW5nID8/IG9wdGlvbnMuaW5wdXRzLmZpcnN0KTsKfQoKLy8vIFJlc3VsdCBvYmplY3Qgb2YgW2dlbmVyYXRlS2VybmVsXS4KY2xhc3MgQ29tcGlsZXJSZXN1bHQgewogIC8vLyBUaGUgZ2VuZXJhdGVkIHN1bW1hcnkgYnl0ZXMsIGlmIGl0IHdhcyByZXF1ZXN0ZWQuCiAgZmluYWwgTGlzdDxpbnQ+IHN1bW1hcnk7CgogIC8vLyBUaGUgZ2VuZXJhdGVkIGNvbXBvbmVudCwgaWYgaXQgd2FzIHJlcXVlc3RlZC4KICBmaW5hbCBDb21wb25lbnQgY29tcG9uZW50OwoKICAvLy8gRGVwZW5kZW5jaWVzIHRyYXZlcnNlZCBieSB0aGUgY29tcGlsZXIuIFVzZWQgb25seSBmb3IgZ2VuZXJhdGluZwogIC8vLyBkZXBlbmRlbmN5IC5HTiBmaWxlcyBpbiB0aGUgZGFydC1zZGsgYnVpbGQgc3lzdGVtLgogIC8vLyBOb3RlIHRoaXMgbWlnaHQgYmUgcmVtb3ZlZCB3aGVuIHdlIHN3aXRjaCB0byBjb21wdXRlIGRlcGVuY2VuY2llcyB3aXRob3V0CiAgLy8vIHVzaW5nIHRoZSBjb21waWxlciBpdHNlbGYuCiAgZmluYWwgTGlzdDxVcmk+IGRlcHM7CgogIC8vLyBUaGUgW0tlcm5lbFRhcmdldF0gdXNlZCB0byBnZW5lcmF0ZWQgdGhlIGNvbXBvbmVudC4KICAvLy8KICAvLy8gVGhpcyBpcyBvbmx5IHByb3ZpZGVkIGZvciB1c2UgaW4gdGVzdGluZy4KICBmaW5hbCBLZXJuZWxUYXJnZXQga2VybmVsVGFyZ2V0Rm9yVGVzdGluZzsKCiAgQ29tcGlsZXJSZXN1bHQoCiAgICAgIHt0aGlzLnN1bW1hcnksIHRoaXMuY29tcG9uZW50LCB0aGlzLmRlcHMsIHRoaXMua2VybmVsVGFyZ2V0Rm9yVGVzdGluZ30pOwp9CoC/AE5OPAFRKQEhAUMBPAE7ATMBNgE8AU4BOgEoASwBNwEbREdAHx8hKEMpJCgqKQYCAS8fHyEfLzEfARc3RAEVRwExISonFAYBOUcwSx4vNDUGAUtNE0sxNjUGAVAwTh0IAVEYSy80NQYBJgFPKDEhPh4YHD8xCggfLToIAT8JSFAwJDkvMC9KUAFRSzsdTzUISzxCMQYBGRpNHyY6CDMGAR8aHkhNTwIBJxc4GwE0HQFHOVAhGAE6BjAtARJPAgEwcGFja2FnZTpmcm9udF9lbmQvc3JjL2tlcm5lbF9nZW5lcmF0b3JfaW1wbC5kYXJ0MXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zY2FubmVyLmRhcnSMzy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UubWQgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc2Nhbm5lcjsKCmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlclJ1bmUsIHV0Zjg7CgppbXBvcnQgJy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnc2Nhbm5lci9hYnN0cmFjdF9zY2FubmVyLmRhcnQnCiAgICBzaG93IExhbmd1YWdlVmVyc2lvbkNoYW5nZWQsIFNjYW5uZXJDb25maWd1cmF0aW9uOwoKaW1wb3J0ICdzY2FubmVyL3N0cmluZ19zY2FubmVyLmRhcnQnIHNob3cgU3RyaW5nU2Nhbm5lcjsKCmltcG9ydCAnc2Nhbm5lci91dGY4X2J5dGVzX3NjYW5uZXIuZGFydCcgc2hvdyBVdGY4Qnl0ZXNTY2FubmVyOwoKaW1wb3J0ICdzY2FubmVyL3JlY292ZXIuZGFydCcgc2hvdyBzY2FubmVyUmVjb3Zlcnk7CgpleHBvcnQgJ3NjYW5uZXIvYWJzdHJhY3Rfc2Nhbm5lci5kYXJ0JwogICAgc2hvdyBMYW5ndWFnZVZlcnNpb25DaGFuZ2VkLCBTY2FubmVyQ29uZmlndXJhdGlvbjsKCmV4cG9ydCAnc2Nhbm5lci90b2tlbi5kYXJ0JwogICAgc2hvdwogICAgICAgIExhbmd1YWdlVmVyc2lvblRva2VuLAogICAgICAgIFN0cmluZ1Rva2VuLAogICAgICAgIGlzQmluYXJ5T3BlcmF0b3IsCiAgICAgICAgaXNNaW51c09wZXJhdG9yLAogICAgICAgIGlzVGVybmFyeU9wZXJhdG9yLAogICAgICAgIGlzVW5hcnlPcGVyYXRvciwKICAgICAgICBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjsKCmV4cG9ydCAnc2Nhbm5lci9lcnJvcl90b2tlbi5kYXJ0JwogICAgc2hvdyBFcnJvclRva2VuLCBidWlsZFVuZXhwZWN0ZWRDaGFyYWN0ZXJUb2tlbjsKCmV4cG9ydCAnc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IExhbmd1YWdlVmVyc2lvblRva2VuOwoKZXhwb3J0ICdzY2FubmVyL3Rva2VuX2NvbnN0YW50cy5kYXJ0JyBzaG93IEVPRl9UT0tFTjsKCmV4cG9ydCAnc2Nhbm5lci91dGY4X2J5dGVzX3NjYW5uZXIuZGFydCcgc2hvdyBVdGY4Qnl0ZXNTY2FubmVyOwoKZXhwb3J0ICdzY2FubmVyL3N0cmluZ19zY2FubmVyLmRhcnQnIHNob3cgU3RyaW5nU2Nhbm5lcjsKCmV4cG9ydCAnLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IEtleXdvcmQsIFRva2VuOwoKY29uc3QgaW50IHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlciA9IHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlclJ1bmU7Cgp0eXBlZGVmIFRva2VuIFJlY292ZXIoTGlzdDxpbnQ+IGJ5dGVzLCBUb2tlbiB0b2tlbnMsIExpc3Q8aW50PiBsaW5lU3RhcnRzKTsKCmFic3RyYWN0IGNsYXNzIFNjYW5uZXIgewogIC8vLyBSZXR1cm5zIHRydWUgaWYgYW4gZXJyb3Igb2NjdXJlZCBkdXJpbmcgW3Rva2VuaXplXS4KICBib29sIGdldCBoYXNFcnJvcnM7CgogIExpc3Q8aW50PiBnZXQgbGluZVN0YXJ0czsKCiAgLy8vIENvbmZpZ3VyZSB3aGljaCB0b2tlbnMgYXJlIHByb2R1Y2VkLgogIHNldCBjb25maWd1cmF0aW9uKFNjYW5uZXJDb25maWd1cmF0aW9uIGNvbmZpZyk7CgogIFRva2VuIHRva2VuaXplKCk7Cn0KCmNsYXNzIFNjYW5uZXJSZXN1bHQgewogIGZpbmFsIFRva2VuIHRva2VuczsKICBmaW5hbCBMaXN0PGludD4gbGluZVN0YXJ0czsKICBmaW5hbCBib29sIGhhc0Vycm9yczsKCiAgU2Nhbm5lclJlc3VsdCh0aGlzLnRva2VucywgdGhpcy5saW5lU3RhcnRzLCB0aGlzLmhhc0Vycm9ycyk7Cn0KCi8vLyBTY2FuL3Rva2VuaXplIHRoZSBnaXZlbiBVVEY4IFtieXRlc10uClNjYW5uZXJSZXN1bHQgc2NhbihMaXN0PGludD4gYnl0ZXMsCiAgICB7U2Nhbm5lckNvbmZpZ3VyYXRpb24gY29uZmlndXJhdGlvbiwKICAgIGJvb2wgaW5jbHVkZUNvbW1lbnRzOiBmYWxzZSwKICAgIExhbmd1YWdlVmVyc2lvbkNoYW5nZWQgbGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZH0pIHsKICBpZiAoYnl0ZXMubGFzdCAhPSAwKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiW2J5dGVzXTogdGhlIGxhc3QgYnl0ZSBtdXN0IGJlIG51bGwuIik7CiAgfQogIFNjYW5uZXIgc2Nhbm5lciA9IG5ldyBVdGY4Qnl0ZXNTY2FubmVyKGJ5dGVzLAogICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uLAogICAgICBpbmNsdWRlQ29tbWVudHM6IGluY2x1ZGVDb21tZW50cywKICAgICAgbGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZDogbGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCk7CiAgcmV0dXJuIF90b2tlbml6ZUFuZFJlY292ZXIoc2Nhbm5lciwgYnl0ZXM6IGJ5dGVzKTsKfQoKLy8vIFNjYW4vdG9rZW5pemUgdGhlIGdpdmVuIFtzb3VyY2VdLgpTY2FubmVyUmVzdWx0IHNjYW5TdHJpbmcoU3RyaW5nIHNvdXJjZSwKICAgIHtTY2FubmVyQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uLAogICAgYm9vbCBpbmNsdWRlQ29tbWVudHM6IGZhbHNlLAogICAgTGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkfSkgewogIGFzc2VydChzb3VyY2UgIT0gbnVsbCwgJ3NvdXJjZSBtdXN0IG5vdCBiZSBudWxsJyk7CiAgU3RyaW5nU2Nhbm5lciBzY2FubmVyID0gbmV3IFN0cmluZ1NjYW5uZXIoc291cmNlLAogICAgICBjb25maWd1cmF0aW9uOiBjb25maWd1cmF0aW9uLAogICAgICBpbmNsdWRlQ29tbWVudHM6IGluY2x1ZGVDb21tZW50cywKICAgICAgbGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZDogbGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCk7CiAgcmV0dXJuIF90b2tlbml6ZUFuZFJlY292ZXIoc2Nhbm5lciwgc291cmNlOiBzb3VyY2UpOwp9CgpTY2FubmVyUmVzdWx0IF90b2tlbml6ZUFuZFJlY292ZXIoU2Nhbm5lciBzY2FubmVyLAogICAge0xpc3Q8aW50PiBieXRlcywgU3RyaW5nIHNvdXJjZX0pIHsKICBUb2tlbiB0b2tlbnMgPSBzY2FubmVyLnRva2VuaXplKCk7CiAgaWYgKHNjYW5uZXIuaGFzRXJyb3JzKSB7CiAgICBpZiAoYnl0ZXMgPT0gbnVsbCkgYnl0ZXMgPSB1dGY4LmVuY29kZShzb3VyY2UpOwogICAgdG9rZW5zID0gc2Nhbm5lclJlY292ZXJ5KGJ5dGVzLCB0b2tlbnMsIHNjYW5uZXIubGluZVN0YXJ0cyk7CiAgfQogIHJldHVybiBuZXcgU2Nhbm5lclJlc3VsdCh0b2tlbnMsIHNjYW5uZXIubGluZVN0YXJ0cywgc2Nhbm5lci5oYXNFcnJvcnMpOwp9CmwATU4/ARcBQgErASc3ATkBQAE0ASc3ARwJHhUaGRsZIQEiNAE3ATYBQAE5ATQBSQFMARk6FgEcASsyARQCARYWHhgBPwIBKiQpITYZRQQwJCg3NQIBJigpITY1NCQoNzcCATMoJRs0QQRLAgEocGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIuZGFydElzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL3JlZGlyZWN0aW5nX2ZhY3RvcnlfYm9keS5kYXJ0mIQvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5yZWRpcmVjdGluZ19mYWN0b3J5X2JvZHk7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIERhcnRUeXBlLAogICAgICAgIER5bmFtaWNUeXBlLAogICAgICAgIEV4cHJlc3Npb24sCiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudCwKICAgICAgICBGdW5jdGlvbk5vZGUsCiAgICAgICAgSW52YWxpZEV4cHJlc3Npb24sCiAgICAgICAgTGV0LAogICAgICAgIE1lbWJlciwKICAgICAgICBOdWxsTGl0ZXJhbCwKICAgICAgICBQcm9jZWR1cmUsCiAgICAgICAgU3RhdGljR2V0LAogICAgICAgIFN0cmluZ0xpdGVyYWwsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIHNob3cgU3Vic3RpdHV0aW9uOwoKaW1wb3J0ICdib2R5X2J1aWxkZXIuZGFydCcgc2hvdyBFbnN1cmVMb2FkZWQ7Cgpjb25zdCBTdHJpbmcgbGV0TmFtZSA9ICIjcmVkaXJlY3RpbmdfZmFjdG9yeSI7CgpjbGFzcyBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5IGV4dGVuZHMgRXhwcmVzc2lvblN0YXRlbWVudCB7CiAgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keS5pbnRlcm5hbChFeHByZXNzaW9uIHZhbHVlLAogICAgICBbTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50c10pCiAgICAgIDogc3VwZXIobmV3IExldChuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihsZXROYW1lLCBpbml0aWFsaXplcjogdmFsdWUpLAogICAgICAgICAgICBlbmNvZGVUeXBlQXJndW1lbnRzKHR5cGVBcmd1bWVudHMpKSk7CgogIFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoTWVtYmVyIHRhcmdldCwgW0xpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHNdKQogICAgICA6IHRoaXMuaW50ZXJuYWwobmV3IFN0YXRpY0dldCh0YXJnZXQpLCB0eXBlQXJndW1lbnRzKTsKCiAgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keS51bnJlc29sdmVkKFN0cmluZyBuYW1lKQogICAgICA6IHRoaXMuaW50ZXJuYWwobmV3IFN0cmluZ0xpdGVyYWwobmFtZSkpOwoKICBNZW1iZXIgZ2V0IHRhcmdldCB7CiAgICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShleHByZXNzaW9uKTsKICAgIHJldHVybiB2YWx1ZSBpcyBTdGF0aWNHZXQgPyB2YWx1ZS50YXJnZXQgOiBudWxsOwogIH0KCiAgU3RyaW5nIGdldCB1bnJlc29sdmVkTmFtZSB7CiAgICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShleHByZXNzaW9uKTsKICAgIHJldHVybiB2YWx1ZSBpcyBTdHJpbmdMaXRlcmFsID8gdmFsdWUudmFsdWUgOiBudWxsOwogIH0KCiAgYm9vbCBnZXQgaXNVbnJlc29sdmVkID0+IHVucmVzb2x2ZWROYW1lICE9IG51bGw7CgogIExpc3Q8RGFydFR5cGU+IGdldCB0eXBlQXJndW1lbnRzIHsKICAgIGlmIChleHByZXNzaW9uIGlzIExldCkgewogICAgICBMZXQgYm9keUV4cHJlc3Npb24gPSBleHByZXNzaW9uOwogICAgICBpZiAoYm9keUV4cHJlc3Npb24udmFyaWFibGUubmFtZSA9PSBsZXROYW1lKSB7CiAgICAgICAgcmV0dXJuIGRlY29kZVR5cGVBcmd1bWVudHMoYm9keUV4cHJlc3Npb24uYm9keSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgc3RhdGljIGdldFZhbHVlKEV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgaWYgKGV4cHJlc3Npb24gaXMgTGV0KSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBleHByZXNzaW9uLnZhcmlhYmxlOwogICAgICBpZiAodmFyaWFibGUubmFtZSA9PSBsZXROYW1lKSB7CiAgICAgICAgcmV0dXJuIHZhcmlhYmxlLmluaXRpYWxpemVyOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHN0YXRpYyB2b2lkIHJlc3RvcmVGcm9tRGlsbChQcm9jZWR1cmUgZmFjdG9yeSkgewogICAgLy8gVGhpcyBpcyBhIGhhY2sgLyB3b3JrIGFyb3VuZCBmb3Igc3RvcmluZyByZWRpcmVjdGluZyBjb25zdHJ1Y3RvcnMgaW4KICAgIC8vIGRpbGwgZmlsZXMuIFNlZSBgQ2xhc3NCdWlsZGVyLmFkZFJlZGlyZWN0aW5nQ29uc3RydWN0b3JgIGluCiAgICAvLyBba2VybmVsX2NsYXNzX2J1aWxkZXIuZGFydF0oa2VybmVsX2NsYXNzX2J1aWxkZXIuZGFydCkuCiAgICBGdW5jdGlvbk5vZGUgZnVuY3Rpb24gPSBmYWN0b3J5LmZ1bmN0aW9uOwogICAgRXhwcmVzc2lvblN0YXRlbWVudCBzdGF0ZW1lbnQgPSBmdW5jdGlvbi5ib2R5OwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKICAgIGlmIChzdGF0ZW1lbnQuZXhwcmVzc2lvbiBpcyBMZXQpIHsKICAgICAgTGV0IGV4cHJlc3Npb24gPSBzdGF0ZW1lbnQuZXhwcmVzc2lvbjsKICAgICAgdHlwZUFyZ3VtZW50cyA9IGRlY29kZVR5cGVBcmd1bWVudHMoZXhwcmVzc2lvbi5ib2R5KTsKICAgIH0KICAgIGZ1bmN0aW9uLmJvZHkgPSBuZXcgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keS5pbnRlcm5hbCgKICAgICAgICBnZXRWYWx1ZShzdGF0ZW1lbnQuZXhwcmVzc2lvbiksIHR5cGVBcmd1bWVudHMpCiAgICAgIC4ucGFyZW50ID0gZnVuY3Rpb247CiAgfQoKICBzdGF0aWMgRXhwcmVzc2lvbiBlbmNvZGVUeXBlQXJndW1lbnRzKExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIFN0cmluZyB2YXJOYW1lUHJlZml4ID0gIiN0eXBlQXJnIjsKICAgIEV4cHJlc3Npb24gcmVzdWx0ID0gbmV3IEludmFsaWRFeHByZXNzaW9uKG51bGwpOwogICAgaWYgKHR5cGVBcmd1bWVudHMgPT0gbnVsbCkgewogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZm9yIChpbnQgaSA9IHR5cGVBcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgcmVzdWx0ID0gbmV3IExldCgKICAgICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKCIkdmFyTmFtZVByZWZpeCRpIiwKICAgICAgICAgICAgICB0eXBlOiB0eXBlQXJndW1lbnRzW2ldLCBpbml0aWFsaXplcjogbmV3IE51bGxMaXRlcmFsKCkpLAogICAgICAgICAgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgTGlzdDxEYXJ0VHlwZT4gZGVjb2RlVHlwZUFyZ3VtZW50cyhFeHByZXNzaW9uIGVuY29kZWQpIHsKICAgIGlmIChlbmNvZGVkIGlzIEludmFsaWRFeHByZXNzaW9uKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgTGlzdDxEYXJ0VHlwZT4gcmVzdWx0ID0gPERhcnRUeXBlPltdOwogICAgd2hpbGUgKGVuY29kZWQgaXMgTGV0KSB7CiAgICAgIExldCBoZWFkID0gZW5jb2RlZDsKICAgICAgcmVzdWx0LmFkZChoZWFkLnZhcmlhYmxlLnR5cGUpOwogICAgICBlbmNvZGVkID0gaGVhZC5ib2R5OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCmJvb2wgaXNSZWRpcmVjdGluZ0ZhY3RvcnkoTWVtYmVyIG1lbWJlciwge0Vuc3VyZUxvYWRlZCBoZWxwZXJ9KSB7CiAgYXNzZXJ0KGhlbHBlciA9PSBudWxsIHx8IGhlbHBlci5pc0xvYWRlZChtZW1iZXIpKTsKICByZXR1cm4gbWVtYmVyIGlzIFByb2NlZHVyZSAmJiBtZW1iZXIuZnVuY3Rpb24uYm9keSBpcyBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5Owp9CgpSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5IGdldFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoTWVtYmVyIG1lbWJlcikgewogIHJldHVybiBpc1JlZGlyZWN0aW5nRmFjdG9yeShtZW1iZXIpID8gbWVtYmVyLmZ1bmN0aW9uLmJvZHkgOiBudWxsOwp9CgpjbGFzcyBSZWRpcmVjdGlvblRhcmdldCB7CiAgZmluYWwgTWVtYmVyIHRhcmdldDsKICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwoKICBSZWRpcmVjdGlvblRhcmdldCh0aGlzLnRhcmdldCwgdGhpcy50eXBlQXJndW1lbnRzKTsKfQoKUmVkaXJlY3Rpb25UYXJnZXQgZ2V0UmVkaXJlY3Rpb25UYXJnZXQoUHJvY2VkdXJlIG1lbWJlciwgRW5zdXJlTG9hZGVkIGhlbHBlciwKICAgIHtib29sIGxlZ2FjeU1vZGV9KSB7CiAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IDxEYXJ0VHlwZT5bXS4ubGVuZ3RoID0KICAgICAgbWVtYmVyLmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsKICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgIHR5cGVBcmd1bWVudHNbaV0gPSBuZXcgVHlwZVBhcmFtZXRlclR5cGUobWVtYmVyLmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzW2ldKTsKICB9CgogIC8vIFdlIHVzZSB0aGUgW3RvcnRvaXNlIGFuZCBoYXJlIGFsZ29yaXRobV0KICAvLyAoaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3ljbGVfZGV0ZWN0aW9uI1RvcnRvaXNlX2FuZF9oYXJlKSB0bwogIC8vIGhhbmRsZSBjeWNsZXMuCiAgTWVtYmVyIHRvcnRvaXNlID0gbWVtYmVyOwogIFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkgdG9ydG9pc2VCb2R5ID0gZ2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keSh0b3J0b2lzZSk7CiAgTWVtYmVyIGhhcmUgPSB0b3J0b2lzZUJvZHk/LnRhcmdldDsKICBoZWxwZXIuZW5zdXJlTG9hZGVkKGhhcmUpOwogIFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkgaGFyZUJvZHkgPSBnZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KGhhcmUpOwogIHdoaWxlICh0b3J0b2lzZSAhPSBoYXJlKSB7CiAgICBpZiAodG9ydG9pc2VCb2R5Py5pc1VucmVzb2x2ZWQgPz8gdHJ1ZSkgewogICAgICByZXR1cm4gbmV3IFJlZGlyZWN0aW9uVGFyZ2V0KHRvcnRvaXNlLCB0eXBlQXJndW1lbnRzKTsKICAgIH0KICAgIE1lbWJlciBuZXh0VG9ydG9pc2UgPSB0b3J0b2lzZUJvZHkudGFyZ2V0OwogICAgaGVscGVyLmVuc3VyZUxvYWRlZChuZXh0VG9ydG9pc2UpOwogICAgTGlzdDxEYXJ0VHlwZT4gbmV4dFR5cGVBcmd1bWVudHMgPSB0b3J0b2lzZUJvZHkudHlwZUFyZ3VtZW50czsKICAgIGlmICghbGVnYWN5TW9kZSAmJiBuZXh0VHlwZUFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIG5leHRUeXBlQXJndW1lbnRzID0gPERhcnRUeXBlPltdOwogICAgfQoKICAgIGlmICghbGVnYWN5TW9kZSB8fCBuZXh0VHlwZUFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIFN1YnN0aXR1dGlvbiBzdWIgPSBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKAogICAgICAgICAgdG9ydG9pc2UuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpOwogICAgICB0eXBlQXJndW1lbnRzID0gPERhcnRUeXBlPltdLi5sZW5ndGggPSBuZXh0VHlwZUFyZ3VtZW50cy5sZW5ndGg7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZUFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIHR5cGVBcmd1bWVudHNbaV0gPSBzdWIuc3Vic3RpdHV0ZVR5cGUobmV4dFR5cGVBcmd1bWVudHNbaV0pOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBJbiBEYXJ0IDEsIHdlIG5lZWQgdG8gdGhyb3cgYXdheSB0aGUgZXh0cmEgdHlwZSBhcmd1bWVudHMgYW5kIHVzZQogICAgICAvLyBgZHluYW1pY2AgaW4gcGxhY2Ugb2YgdGhlIG1pc3Npbmcgb25lcy4KICAgICAgaW50IHR5cGVBcmd1bWVudENvdW50ID0gdHlwZUFyZ3VtZW50cy5sZW5ndGg7CiAgICAgIGludCBuZXh0VHlwZUFyZ3VtZW50Q291bnQgPQogICAgICAgICAgbmV4dFRvcnRvaXNlLmVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsKICAgICAgdHlwZUFyZ3VtZW50cy5sZW5ndGggPSBuZXh0VHlwZUFyZ3VtZW50Q291bnQ7CiAgICAgIGZvciAoaW50IGkgPSB0eXBlQXJndW1lbnRDb3VudDsgaSA8IG5leHRUeXBlQXJndW1lbnRDb3VudDsgaSsrKSB7CiAgICAgICAgdHlwZUFyZ3VtZW50c1tpXSA9IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgIH0KICAgIH0KCiAgICB0b3J0b2lzZSA9IG5leHRUb3J0b2lzZTsKICAgIHRvcnRvaXNlQm9keSA9IGdldFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkodG9ydG9pc2UpOwogICAgaGVscGVyLmVuc3VyZUxvYWRlZChoYXJlQm9keT8udGFyZ2V0KTsKICAgIGhhcmUgPSBnZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KGhhcmVCb2R5Py50YXJnZXQpPy50YXJnZXQ7CiAgICBoZWxwZXIuZW5zdXJlTG9hZGVkKGhhcmUpOwogICAgaGFyZUJvZHkgPSBnZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KGhhcmUpOwogIH0KICByZXR1cm4gbnVsbDsKfQqAvwBOTjwBKAEhCRIVFB0WGw0QFRMTFxsdAT0BLgEvATs0JkwyAUg9ATEwARYmNQQBHiY4BAEzASUdJzU5CAYRBAErHTomJQgGEQQBM0xDPy4zIictPAY5NxsEAUgnNSEVBjoYNkcTBhMEAUIoEwYqHRomGwYTBAIBQjVQAgFCRQIBGhcmATYCAU4ZOC0zUQQBLkoUHE0mHUUdLj0GLydDNCgGATQxPEc3RQgNSzE0Ij00SDAIBgEdOCtAHzAEDwIBQHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvcmVkaXJlY3RpbmdfZmFjdG9yeV9ib2R5LmRhcnQ/c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2FwaV91bnN0YWJsZS9jb21waWxlcl9zdGF0ZS5kYXJ0hh4vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2NvbXBpbGVyX29wdGlvbnMuZGFydCcgc2hvdyBDb21waWxlck9wdGlvbnM7CgppbXBvcnQgJy4uL2Jhc2UvcHJvY2Vzc2VkX29wdGlvbnMuZGFydCcgc2hvdyBQcm9jZXNzZWRPcHRpb25zOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvaW5jcmVtZW50YWxfY29tcGlsZXIuZGFydCcKICAgIHNob3cgSW5jcmVtZW50YWxDb21waWxlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwva2VybmVsLmRhcnQnIHNob3cgQ29tcG9uZW50OwoKY2xhc3MgSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlIHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgb3B0aW9uczsKICBmaW5hbCBQcm9jZXNzZWRPcHRpb25zIHByb2Nlc3NlZE9wdHM7CiAgZmluYWwgTWFwPFVyaSwgV29ya2VySW5wdXRDb21wb25lbnQ+IHdvcmtlcklucHV0Q2FjaGU7CiAgZmluYWwgSW5jcmVtZW50YWxDb21waWxlciBpbmNyZW1lbnRhbENvbXBpbGVyOwoKICBJbml0aWFsaXplZENvbXBpbGVyU3RhdGUodGhpcy5vcHRpb25zLCB0aGlzLnByb2Nlc3NlZE9wdHMsCiAgICAgIHt0aGlzLndvcmtlcklucHV0Q2FjaGUsIHRoaXMuaW5jcmVtZW50YWxDb21waWxlcn0pOwp9CgovLy8gQSBjYWNoZWQgW0NvbXBvbmVudF0gZm9yIGEgc3VtbWFyeSBpbnB1dCBmaWxlLgovLy8KLy8vIFRyYWNrcyB0aGUgb3JpZ2luYWxseSBtYXJrZWQgImV4dGVybmFsIiBsaWJzIHNvIHRoYXQgdGhleSBjYW4gYmUgcmVzdG9yZWQsCi8vLyBzaW5jZSB0aGUga2VybmVsIGdlbmVyYXRvciBtdXRhdGVzIHRoZSBzdGF0ZS4KY2xhc3MgV29ya2VySW5wdXRDb21wb25lbnQgewogIGZpbmFsIExpc3Q8aW50PiBkaWdlc3Q7CiAgZmluYWwgQ29tcG9uZW50IGNvbXBvbmVudDsKICBmaW5hbCBTZXQ8VXJpPiBleHRlcm5hbExpYnM7CiAgV29ya2VySW5wdXRDb21wb25lbnQodGhpcy5kaWdlc3QsIHRoaXMuY29tcG9uZW50KQogICAgICA6IGV4dGVybmFsTGlicyA9IGNvbXBvbmVudC5saWJyYXJpZXMKICAgICAgICAgICAgLndoZXJlKChsaWIpID0+IGxpYi5pc0V4dGVybmFsKQogICAgICAgICAgICAubWFwKChsaWIpID0+IGxpYi5pbXBvcnRVcmkpCiAgICAgICAgICAgIC50b1NldCgpOwp9Cgpib29sIGRpZ2VzdHNFcXVhbChMaXN0PGludD4gYSwgTGlzdDxpbnQ+IGIpIHsKICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogIGZvciAoaW50IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykgewogICAgaWYgKGFbaV0gIT0gYltpXSkgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gdHJ1ZTsKfQowAE5OPAFGAT8BPx4BNAEhISg5MQE9OgIBMwRPMh0aHR80KywpFgIBLiwqJyQEDwIBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvY29tcGlsZXJfc3RhdGUuZGFydDVzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Vuc3RhYmxlL3V0aWwuZGFydIL4Ly8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmJvb2wgZXF1YWxMaXN0czxUPihMaXN0PFQ+IGEsIExpc3Q8VD4gYikgewogIGlmIChpZGVudGljYWwoYSwgYikpIHJldHVybiB0cnVlOwogIGlmIChhID09IG51bGwgfHwgYiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgaWYgKGEubGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgKytpKSB7CiAgICBpZiAoYVtpXSAhPSBiW2ldKSByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9Cgpib29sIGVxdWFsTWFwczxLLCBWPihNYXA8SywgVj4gYSwgTWFwPEssIFY+IGIpIHsKICBpZiAoaWRlbnRpY2FsKGEsIGIpKSByZXR1cm4gdHJ1ZTsKICBpZiAoYSA9PSBudWxsIHx8IGIgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogIGZvciAoSyBrZXkgaW4gYS5rZXlzKSB7CiAgICBpZiAoIWIuY29udGFpbnNLZXkoa2V5KSB8fCBhW2tleV0gIT0gYltrZXldKSByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9ChkATk48ASskLConJAQPAgExJCwqGj8EDwIBLHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvdXRpbC5kYXJ0QnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9hcGlfcHJvdG90eXBlL2tlcm5lbF9nZW5lcmF0b3IuZGFydI9KLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBEZWZpbmVzIHRoZSBmcm9udC1lbmQgQVBJIGZvciBjb252ZXJ0aW5nIHNvdXJjZSBjb2RlIHRvIERhcnQgS2VybmVsIG9iamVjdHMuCmxpYnJhcnkgZnJvbnRfZW5kLmtlcm5lbF9nZW5lcmF0b3I7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9rZXJuZWwuZGFydCcgc2hvdyBDb21wb25lbnQ7CgppbXBvcnQgJy4uL2Jhc2UvcHJvY2Vzc2VkX29wdGlvbnMuZGFydCcgc2hvdyBQcm9jZXNzZWRPcHRpb25zOwoKaW1wb3J0ICcuLi9mYXN0YS9jb21waWxlcl9jb250ZXh0LmRhcnQnIHNob3cgQ29tcGlsZXJDb250ZXh0OwoKaW1wb3J0ICcuLi9mYXN0YS9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IG1lc3NhZ2VNaXNzaW5nTWFpbiwgbm9MZW5ndGg7CgppbXBvcnQgJy4uL2Zhc3RhL3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgppbXBvcnQgJy4uL2tlcm5lbF9nZW5lcmF0b3JfaW1wbC5kYXJ0JwogICAgc2hvdyBDb21waWxlclJlc3VsdCwgZ2VuZXJhdGVLZXJuZWwsIGdlbmVyYXRlS2VybmVsSW50ZXJuYWw7CgppbXBvcnQgJ2NvbXBpbGVyX29wdGlvbnMuZGFydCcgc2hvdyBDb21waWxlck9wdGlvbnM7CgovLy8gR2VuZXJhdGVzIGEga2VybmVsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwcm9ncmFtIHdob3NlIG1haW4gbGlicmFyeSBpcyBpbgovLy8gdGhlIGdpdmVuIFtzb3VyY2VdLgovLy8KLy8vIEludGVuZGVkIGZvciB3aG9sZS1wcm9ncmFtIChub24tbW9kdWxhcikgY29tcGlsYXRpb24uCi8vLwovLy8gR2l2ZW4gdGhlIFVyaSBvZiBhIGZpbGUgY29udGFpbmluZyBhIHByb2dyYW0ncyBgbWFpbmAgbWV0aG9kLCB0aGlzIGZ1bmN0aW9uCi8vLyBmb2xsb3dzIGBpbXBvcnRgLCBgZXhwb3J0YCwgYW5kIGBwYXJ0YCBkZWNsYXJhdGlvbnMgdG8gZGlzY292ZXIgdGhlIHdob2xlCi8vLyBwcm9ncmFtLCBhbmQgY29udmVydHMgdGhlIHJlc3VsdCB0byBEYXJ0IEtlcm5lbCBmb3JtYXQuCi8vLwovLy8gSWYgYGNvbXBpbGVTZGtgIGluIFtvcHRpb25zXSBpcyB0cnVlLCB0aGUgZ2VuZXJhdGVkIGNvbXBvbmVudCB3aWxsIGluY2x1ZGUKLy8vIGNvZGUgZm9yIHRoZSBTREsuCi8vLwovLy8gSWYgc3VtbWFyaWVzIGFyZSBwcm92aWRlZCBpbiBbb3B0aW9uc10sIHRoZSBjb21waWxlciB3aWxsIHVzZSB0aGVtIGluc3RlYWQKLy8vIG9mIGNvbXBpbGluZyB0aGUgbGlicmFyaWVzIGNvbnRhaW5lZCBpbiB0aG9zZSBzdW1tYXJpZXMuIFRoaXMgaXMgdXNlZnVsLCBmb3IKLy8vIGV4YW1wbGUsIHdoZW4gY29tcGlsaW5nIGZvciBwbGF0Zm9ybXMgdGhhdCBhbHJlYWR5IGVtYmVkIHRob3NlIHNvdXJjZXMgKGxpa2UKLy8vIHRoZSBzZGsgaW4gdGhlIHN0YW5kYWxvbmUgVk0pLgovLy8KLy8vIFRoZSBpbnB1dCBbc291cmNlXSBpcyBleHBlY3RlZCB0byBiZSBhIHNjcmlwdCB3aXRoIGEgbWFpbiBtZXRob2QsIG90aGVyd2lzZQovLy8gYW4gZXJyb3IgaXMgcmVwb3J0ZWQuCi8vIFRPRE8oc2lnbXVuZCk6IHJlbmFtZSB0byBrZXJuZWxGb3JTY3JpcHQ/CkZ1dHVyZTxDb21wb25lbnQ+IGtlcm5lbEZvclByb2dyYW0oVXJpIHNvdXJjZSwgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMpIGFzeW5jIHsKICByZXR1cm4gKGF3YWl0IGtlcm5lbEZvclByb2dyYW1JbnRlcm5hbChzb3VyY2UsIG9wdGlvbnMpKT8uY29tcG9uZW50Owp9CgpGdXR1cmU8Q29tcGlsZXJSZXN1bHQ+IGtlcm5lbEZvclByb2dyYW1JbnRlcm5hbCgKICAgIFVyaSBzb3VyY2UsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAge2Jvb2wgcmV0YWluRGF0YUZvclRlc3Rpbmc6IGZhbHNlfSkgYXN5bmMgewogIHZhciBwT3B0aW9ucyA9IG5ldyBQcm9jZXNzZWRPcHRpb25zKG9wdGlvbnM6IG9wdGlvbnMsIGlucHV0czogW3NvdXJjZV0pOwogIHJldHVybiBhd2FpdCBDb21waWxlckNvbnRleHQucnVuV2l0aE9wdGlvbnMocE9wdGlvbnMsIChjb250ZXh0KSBhc3luYyB7CiAgICBDb21waWxlclJlc3VsdCByZXN1bHQgPSBhd2FpdCBnZW5lcmF0ZUtlcm5lbEludGVybmFsKAogICAgICAgIHJldGFpbkRhdGFGb3JUZXN0aW5nOiByZXRhaW5EYXRhRm9yVGVzdGluZyk7CiAgICB2YXIgY29tcG9uZW50ID0gcmVzdWx0Py5jb21wb25lbnQ7CiAgICBpZiAoY29tcG9uZW50ID09IG51bGwpIHJldHVybiBudWxsOwoKICAgIGlmIChjb21wb25lbnQubWFpbk1ldGhvZCA9PSBudWxsKSB7CiAgICAgIGNvbnRleHQub3B0aW9ucy5yZXBvcnQoCiAgICAgICAgICBtZXNzYWdlTWlzc2luZ01haW4ud2l0aExvY2F0aW9uKHNvdXJjZSwgLTEsIG5vTGVuZ3RoKSwKICAgICAgICAgIFNldmVyaXR5LmVycm9yKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0pOwp9CgovLy8gR2VuZXJhdGVzIGEga2VybmVsIHJlcHJlc2VudGF0aW9uIGZvciBhIGJ1aWxkIHVuaXQgY29udGFpbmluZyBbc291cmNlc10uCi8vLwovLy8gQSBidWlsZCB1bml0IGlzIGEgY29sbGVjdGlvbiBvZiBsaWJyYXJpZXMgdGhhdCBhcmUgY29tcGlsZWQgdG9nZXRoZXIuCi8vLyBMaWJyYXJpZXMgaW4gdGhlIGJ1aWxkIHVuaXQgbWF5IGRlcGVuZCBvbiBlYWNoIG90aGVyIGFuZCBtYXkgaGF2ZQovLy8gZGVwZW5kZW5jaWVzIHRvIGxpYnJhcmllcyBpbiBvdGhlciBidWlsZCB1bml0cy4gVW5saW5rZSBsaWJyYXJ5Ci8vLyBkZXBlbmRlbmNpZXMsIGJ1aWxkIHVuaXQgZGVwZW5kZW5jaWVzIG11c3QgYmUgYWN5Y2xpYy4KLy8vCi8vLyBUaGlzIEFQSSBpcyBpbnRlbmRlZCBmb3IgbW9kdWxhciBjb21waWxhdGlvbi4gRGVwZW5kZW5jaWVzIHRvIG90aGVyIGJ1aWxkCi8vLyB1bml0cyBhcmUgc3BlY2lmaWVkIHVzaW5nIFtDb21waWxlck9wdGlvbnMuaW5wdXRTdW1tYXJpZXNdLiAgQW55IGRlcGVuZGVuY3kKLy8vIG9mIFtzb3VyY2VzXSB0aGF0IGlzIG5vdCBsaXN0ZWQgaW4gW0NvbXBpbGVyT3B0aW9ucy5pbnB1dFN1bW1hcmllc10gYW5kCi8vLyBbQ29tcGlsZXJPcHRpb25zLnNka1N1bW1hcnldIGlzIHRyZWF0ZWQgYXMgYW4gYWRkaXRpb25hbCBzb3VyY2UgZmlsZSBmb3IgdGhlCi8vLyBidWlsZCB1bml0LgovLy8KLy8vIEFueSBgcGFydGAgZGVjbGFyYXRpb25zIGZvdW5kIGluIFtzb3VyY2VzXSBtdXN0IHJlZmVyIHRvIHBhcnQgZmlsZXMgd2hpY2gKLy8vIGFyZSBhbHNvIGxpc3RlZCBpbiB0aGUgYnVpbGQgdW5pdCBzb3VyY2VzLCBvdGhlcndpc2UgYW4gZXJyb3IgcmVzdWx0cy4gIChJdAovLy8gaXMgbm90IHBlcm1pdHRlZCB0byByZWZlciB0byBhIHBhcnQgZmlsZSBkZWNsYXJlZCBpbiBhbm90aGVyIGJ1aWxkIHVuaXQpLgovLy8KLy8vIFRoZSByZXR1cm4gdmFsdWUgaXMgYSBbQ29tcG9uZW50XSBvYmplY3Qgd2l0aCBubyBtYWluIG1ldGhvZCBzZXQuIFRoZQovLy8gW0NvbXBvbmVudF0gaW5jbHVkZXMgZXh0ZXJuYWwgbGlicmFyaWVzIGZvciB0aG9zZSBsaWJyYXJpZXMgbG9hZGVkIHRocm91Z2gKLy8vIHN1bW1hcmllcy4KRnV0dXJlPENvbXBvbmVudD4ga2VybmVsRm9yQ29tcG9uZW50KAogICAgTGlzdDxVcmk+IHNvdXJjZXMsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zKSBhc3luYyB7CiAgcmV0dXJuIChhd2FpdCBnZW5lcmF0ZUtlcm5lbCgKICAgICAgICAgIG5ldyBQcm9jZXNzZWRPcHRpb25zKG9wdGlvbnM6IG9wdGlvbnMsIGlucHV0czogc291cmNlcykpKQogICAgICA/LmNvbXBvbmVudDsKfQpgAE5OPAFRJAEhATQBPwE+AUYBLwEnQQE1AU4YBDoEUE48BE8WBE9RUSMEUBotUEcCATEpMEtKOjUnKAEoHkEbEwYTBgIBTQRKRkQ7BE5QTFEQBE5QTgRKTw8mOCBEEwIBOXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL2tlcm5lbF9nZW5lcmF0b3IuZGFydEZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Byb3RvdHlwZS9zdGFuZGFyZF9maWxlX3N5c3RlbS5kYXJ0jRcvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmcm9udF9lbmQuc3RhbmRhcmRfZmlsZV9zeXN0ZW07CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6aW8nIGFzIGlvOwoKaW1wb3J0ICdmaWxlX3N5c3RlbS5kYXJ0JzsKCmltcG9ydCAnLi4vZmFzdGEvY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCi8vLyBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBbRmlsZVN5c3RlbV0gaGFuZGxpbmcgc3RhbmRhcmQgVVJJIHNjaGVtZXMuCi8vLwovLy8gZmlsZTogVVJJcyBhcmUgaGFuZGxlZCB1c2luZyBmaWxlIEkvTy4KLy8vIGRhdGE6IFVSSXMgcmV0dXJuIHRoZWlyIGRhdGEgY29udGVudHMuCi8vLwovLy8gTm90IGludGVuZGVkIHRvIGJlIGltcGxlbWVudGVkIG9yIGV4dGVuZGVkIGJ5IGNsaWVudHMuCmNsYXNzIFN0YW5kYXJkRmlsZVN5c3RlbSBpbXBsZW1lbnRzIEZpbGVTeXN0ZW0gewogIHN0YXRpYyBmaW5hbCBTdGFuZGFyZEZpbGVTeXN0ZW0gaW5zdGFuY2UgPSBuZXcgU3RhbmRhcmRGaWxlU3lzdGVtLl8oKTsKCiAgU3RhbmRhcmRGaWxlU3lzdGVtLl8oKTsKCiAgQG92ZXJyaWRlCiAgRmlsZVN5c3RlbUVudGl0eSBlbnRpdHlGb3JVcmkoVXJpIHVyaSkgewogICAgaWYgKHVyaS5zY2hlbWUgPT0gJ2ZpbGUnIHx8IHVyaS5zY2hlbWUgPT0gJycpIHsKICAgICAgLy8gVE9ETyhhc2tlc2MpOiBFbXB0eSBzY2hlbWVzIHNob3VsZCBoYXZlIGJlZW4gaGFuZGxlZCBlbHNld2hlcmUuCiAgICAgIHJldHVybiBuZXcgX0lvRmlsZVN5c3RlbUVudGl0eShVcmkuYmFzZS5yZXNvbHZlVXJpKHVyaSkpOwogICAgfSBlbHNlIGlmICh1cmkuc2NoZW1lID09ICdkYXRhJykgewogICAgICByZXR1cm4gbmV3IERhdGFGaWxlU3lzdGVtRW50aXR5KFVyaS5iYXNlLnJlc29sdmVVcmkodXJpKSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigKICAgICAgICAgIHVyaSwgJ1N0YW5kYXJkRmlsZVN5c3RlbSBvbmx5IHN1cHBvcnRzIGZpbGU6KiBhbmQgZGF0YToqIFVSSXMnKTsKICAgIH0KICB9Cn0KCi8vLyBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBvZiBbRmlsZVN5c3RlbUVudGl0eV0gZm9yIGZpbGU6IFVSSXMuCmNsYXNzIF9Jb0ZpbGVTeXN0ZW1FbnRpdHkgaW1wbGVtZW50cyBGaWxlU3lzdGVtRW50aXR5IHsKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgdXJpOwoKICBfSW9GaWxlU3lzdGVtRW50aXR5KHRoaXMudXJpKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB1cmkuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSA9PgogICAgICBvdGhlciBpcyBfSW9GaWxlU3lzdGVtRW50aXR5ICYmIG90aGVyLnVyaSA9PSB1cmk7CgogIEBvdmVycmlkZQogIEZ1dHVyZTxib29sPiBleGlzdHMoKSBhc3luYyB7CiAgICBpZiAoYXdhaXQgaW8uRmlsZVN5c3RlbUVudGl0eS5pc0RpcmVjdG9yeSh1cmkudG9GaWxlUGF0aCgpKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgaW8uRmlsZS5mcm9tVXJpKHVyaSkuZXhpc3RzKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8TGlzdDxpbnQ+PiByZWFkQXNCeXRlcygpIGFzeW5jIHsKICAgIHRyeSB7CiAgICAgIENvbXBpbGVyQ29udGV4dC5yZWNvcmREZXBlbmRlbmN5KHVyaSk7CiAgICAgIHJldHVybiBuZXcgaW8uRmlsZS5mcm9tVXJpKHVyaSkucmVhZEFzQnl0ZXNTeW5jKCk7CiAgICB9IG9uIGlvLkZpbGVTeXN0ZW1FeGNlcHRpb24gY2F0Y2ggKGV4Y2VwdGlvbikgewogICAgICB0aHJvdyBfdG9GaWxlU3lzdGVtRXhjZXB0aW9uKGV4Y2VwdGlvbik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8U3RyaW5nPiByZWFkQXNTdHJpbmcoKSBhc3luYyB7CiAgICB0cnkgewogICAgICBDb21waWxlckNvbnRleHQucmVjb3JkRGVwZW5kZW5jeSh1cmkpOwogICAgICByZXR1cm4gYXdhaXQgbmV3IGlvLkZpbGUuZnJvbVVyaSh1cmkpLnJlYWRBc1N0cmluZygpOwogICAgfSBvbiBpby5GaWxlU3lzdGVtRXhjZXB0aW9uIGNhdGNoIChleGNlcHRpb24pIHsKICAgICAgdGhyb3cgX3RvRmlsZVN5c3RlbUV4Y2VwdGlvbihleGNlcHRpb24pOwogICAgfQogIH0KCiAgLyoqCiAgICogUmV0dXJuIHRoZSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gZm9yIHRoZSBnaXZlbiBJL08gZXhjZXB0aW9uLgogICAqLwogIEZpbGVTeXN0ZW1FeGNlcHRpb24gX3RvRmlsZVN5c3RlbUV4Y2VwdGlvbihpby5GaWxlU3lzdGVtRXhjZXB0aW9uIGV4Y2VwdGlvbikgewogICAgU3RyaW5nIG1lc3NhZ2UgPSBleGNlcHRpb24ubWVzc2FnZTsKICAgIFN0cmluZyBvc01lc3NhZ2UgPSBleGNlcHRpb24ub3NFcnJvcj8ubWVzc2FnZTsKICAgIGlmIChvc01lc3NhZ2UgIT0gbnVsbCAmJiBvc01lc3NhZ2UuaXNOb3RFbXB0eSkgewogICAgICBtZXNzYWdlID0gb3NNZXNzYWdlOwogICAgfQogICAgcmV0dXJuIG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKHVyaSwgbWVzc2FnZSk7CiAgfQp9CgovLy8gQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgW0ZpbGVTeXN0ZW1FbnRpdHldIGZvciBkYXRhOiBVUklzLgpjbGFzcyBEYXRhRmlsZVN5c3RlbUVudGl0eSBpbXBsZW1lbnRzIEZpbGVTeXN0ZW1FbnRpdHkgewogIEBvdmVycmlkZQogIGZpbmFsIFVyaSB1cmk7CgogIERhdGFGaWxlU3lzdGVtRW50aXR5KHRoaXMudXJpKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB1cmkuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSA9PgogICAgICBvdGhlciBpcyBEYXRhRmlsZVN5c3RlbUVudGl0eSAmJiBvdGhlci51cmkgPT0gdXJpOwoKICBAb3ZlcnJpZGUKICBGdXR1cmU8Ym9vbD4gZXhpc3RzKCkgYXN5bmMgewogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8TGlzdDxpbnQ+PiByZWFkQXNCeXRlcygpIGFzeW5jIHsKICAgIHJldHVybiB1cmkuZGF0YS5jb250ZW50QXNCeXRlcygpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnV0dXJlPFN0cmluZz4gcmVhZEFzU3RyaW5nKCkgYXN5bmMgewogICAgcmV0dXJuIHVyaS5kYXRhLmNvbnRlbnRBc1N0cmluZygpOwogIH0KfQp9AE5OPAEoARUYARsBPgFLBCsrBDsxSQEaAQwrNElAJ0ENJUsGBAIBQjgMEQEhAQwkAQwkOAEMIEMTDTAGBAEMKgotOTQvBgQBDCgKLTw0LwYEAQZDBlEoMzUbBjIEAgFCOQwRASIBDCQBDCQ5AQwgEQQBDComBAEMKCcEAgE9cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvc3RhbmRhcmRfZmlsZV9zeXN0ZW0uZGFydEZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvY29tcHV0ZV9wbGF0Zm9ybV9iaW5hcmllc19sb2NhdGlvbi5kYXJ0jNIvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICJkYXJ0OmlvIiBzaG93IEZpbGUsIFBsYXRmb3JtOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBTb3VyY2U7CgppbXBvcnQgJ2Jhc2UvcHJvY2Vzc2VkX29wdGlvbnMuZGFydCcgc2hvdyBQcm9jZXNzZWRPcHRpb25zOwoKaW1wb3J0ICdmYXN0YS9jb21waWxlcl9jb250ZXh0LmRhcnQnIHNob3cgQ29tcGlsZXJDb250ZXh0OwoKLy8vIENvbXB1dGVzIHRoZSBsb2NhdGlvbiBvZiBwbGF0Zm9ybSBiaW5hcmllcywgdGhhdCBpcywgY29tcGlsZWQgYC5kaWxsYCBmaWxlcwovLy8gb2YgdGhlIHBsYXRmb3JtIGxpYnJhcmllcyB0aGF0IGFyZSB1c2VkIHRvIGF2b2lkIHJlY29tcGlsaW5nIHRob3NlCi8vLyBsaWJyYXJpZXMuClVyaSBjb21wdXRlUGxhdGZvcm1CaW5hcmllc0xvY2F0aW9uKHtib29sIGZvcmNlQnVpbGREaXI6IGZhbHNlfSkgewogIC8vIFRoZSBkaXJlY3Rvcnkgb2YgdGhlIERhcnQgVk0gZXhlY3V0YWJsZS4KICBVcmkgdm1EaXJlY3RvcnkgPSBVcmkuYmFzZQogICAgICAucmVzb2x2ZVVyaShuZXcgVXJpLmZpbGUoUGxhdGZvcm0ucmVzb2x2ZWRFeGVjdXRhYmxlKSkKICAgICAgLnJlc29sdmUoIi4iKTsKICBpZiAodm1EaXJlY3RvcnkucGF0aC5lbmRzV2l0aCgiL2Jpbi8iKSkgewogICAgLy8gTG9va3MgbGlrZSB0aGUgVk0gaXMgaW4gYSBgL2Jpbi9gIGRpcmVjdG9yeSwgc28gdGhpcyBpcyBydW5uaW5nIGZyb20gYQogICAgLy8gYnVpbHQgU0RLLgogICAgcmV0dXJuIHZtRGlyZWN0b3J5LnJlc29sdmUoZm9yY2VCdWlsZERpciA/ICIuLi8uLi8iIDogIi4uL2xpYi9faW50ZXJuYWwvIik7CiAgfSBlbHNlIHsKICAgIC8vIFdlIGFzc3VtZSB0aGlzIGlzIHJ1bm5pbmcgZnJvbSBhIGJ1aWxkIGRpcmVjdG9yeSAoZm9yIGV4YW1wbGUsCiAgICAvLyBgb3V0L1JlbGVhc2VYNjRgIG9yIGB4Y29kZWJ1aWxkL1JlbGVhc2VYNjRgKS4KICAgIHJldHVybiB2bURpcmVjdG9yeTsKICB9Cn0KCi8vLyBUcmFuc2xhdGVzIGFuIFNESyBVUkkgKCJvcmctZGFydGxhbmctc2RrOi8vLy4uLiIpIHRvIGEgZmlsZSBVUkkuClVyaSB0cmFuc2xhdGVTZGsoVXJpIHVyaSkgewogIGlmIChDb21waWxlckNvbnRleHQuaXNBY3RpdmUpIHsKICAgIGlmICh1cmkuc2NoZW1lID09ICJvcmctZGFydGxhbmctc2RrIikgewogICAgICBTdHJpbmcgcGF0aCA9IHVyaS5wYXRoOwogICAgICBpZiAocGF0aC5zdGFydHNXaXRoKCIvc2RrLyIpKSB7CiAgICAgICAgQ29tcGlsZXJDb250ZXh0IGNvbnRleHQgPSBDb21waWxlckNvbnRleHQuY3VycmVudDsKICAgICAgICBVcmkgc2RrUm9vdCA9IGNvbnRleHQuY2FjaGVkU2RrUm9vdDsKICAgICAgICBpZiAoc2RrUm9vdCA9PSBudWxsKSB7CiAgICAgICAgICBQcm9jZXNzZWRPcHRpb25zIG9wdGlvbnMgPSBjb250ZXh0Lm9wdGlvbnM7CiAgICAgICAgICBzZGtSb290ID0gb3B0aW9ucy5zZGtSb290OwogICAgICAgICAgaWYgKHNka1Jvb3QgPT0gbnVsbCkgewogICAgICAgICAgICBzZGtSb290ID0gb3B0aW9ucy5saWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpPy5yZXNvbHZlKCIuLi8iKTsKICAgICAgICAgICAgaWYgKHNka1Jvb3QgIT0gbnVsbCkgewogICAgICAgICAgICAgIGlmICghaXNFeGlzdGluZ0ZpbGUoc2RrUm9vdC5yZXNvbHZlKCJsaWIvbGlicmFyaWVzLmpzb24iKSkpIHsKICAgICAgICAgICAgICAgIHNka1Jvb3QgPSBudWxsOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKHNka1Jvb3QgPT0gbnVsbCkgewogICAgICAgICAgICBzZGtSb290ID0gKG9wdGlvbnMuc2RrU3VtbWFyeSA/PyBjb21wdXRlUGxhdGZvcm1CaW5hcmllc0xvY2F0aW9uKCkpCiAgICAgICAgICAgICAgICAucmVzb2x2ZSgiLi4vLi4vIik7CiAgICAgICAgICAgIGlmIChzZGtSb290ICE9IG51bGwpIHsKICAgICAgICAgICAgICBpZiAoIWlzRXhpc3RpbmdGaWxlKHNka1Jvb3QucmVzb2x2ZSgibGliL2xpYnJhcmllcy5qc29uIikpKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNFeGlzdGluZ0ZpbGUoc2RrUm9vdC5yZXNvbHZlKCJzZGsvbGliL2xpYnJhcmllcy5qc29uIikpKSB7CiAgICAgICAgICAgICAgICAgIHNka1Jvb3QgPSBzZGtSb290LnJlc29sdmUoInNkay8iKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHNka1Jvb3QgPSBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgc2RrUm9vdCA/Pz0gVXJpLnBhcnNlKCJvcmctZGFydGxhbmctc2RrOi8vL3Nkay8iKTsKICAgICAgICAgIGNvbnRleHQuY2FjaGVkU2RrUm9vdCA9IHNka1Jvb3Q7CiAgICAgICAgfQogICAgICAgIFVyaSBjYW5kaWRhdGUgPSBzZGtSb290LnJlc29sdmUocGF0aC5zdWJzdHJpbmcoNSkpOwogICAgICAgIGlmIChpc0V4aXN0aW5nRmlsZShjYW5kaWRhdGUpKSB7CiAgICAgICAgICBNYXA8VXJpLCBTb3VyY2U+IHVyaVRvU291cmNlID0gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQudXJpVG9Tb3VyY2U7CiAgICAgICAgICBTb3VyY2Ugc291cmNlID0gdXJpVG9Tb3VyY2VbdXJpXTsKICAgICAgICAgIGlmIChzb3VyY2Uuc291cmNlLmlzRW1wdHkpIHsKICAgICAgICAgICAgdXJpVG9Tb3VyY2VbdXJpXSA9IG5ldyBTb3VyY2UoCiAgICAgICAgICAgICAgICBzb3VyY2UubGluZVN0YXJ0cywKICAgICAgICAgICAgICAgIG5ldyBGaWxlLmZyb21VcmkoY2FuZGlkYXRlKS5yZWFkQXNCeXRlc1N5bmMoKSwKICAgICAgICAgICAgICAgIHNvdXJjZS5pbXBvcnRVcmksCiAgICAgICAgICAgICAgICBzb3VyY2UuZmlsZVVyaSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBjYW5kaWRhdGU7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIHVyaTsKfQoKYm9vbCBpc0V4aXN0aW5nRmlsZShVcmkgdXJpKSB7CiAgaWYgKHVyaS5zY2hlbWUgPT0gImZpbGUiKSB7CiAgICByZXR1cm4gbmV3IEZpbGUuZnJvbVVyaSh1cmkpLmV4aXN0c1N5bmMoKTsKICB9IGVsc2UgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQpeAE5OPAEmAS4BPAE7AVBHD0MuHT0VLE4SUAtGNRgEAgFFHCIsHiY7LR82JSFJI0wgEA4MIVAkI0xRNRkiEhAODD0rCjwpTiwnKyM/IiEMChoIBgQOAgEfHi8LEgQCAT1wYWNrYWdlOmZyb250X2VuZC9zcmMvY29tcHV0ZV9wbGF0Zm9ybV9iaW5hcmllc19sb2NhdGlvbi5kYXJ0MnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9vcGVyYXRvci5kYXJ0jucvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5vcGVyYXRvcnM7CgovLy8gVGhlIHVzZXItZGVmaW5hYmxlIG9wZXJhdG9ycyBpbiBEYXJ0LgovLy8KLy8vIFRoZSBuYW1lcyBoYXZlIGJlZW4gY2hvc2VuIHRvIHJlcHJlc2VudCB0aGVpciBub3JtYWwgc2VtYW50aWMgbWVhbmluZy4KZW51bSBPcGVyYXRvciB7CiAgYWRkLAogIGJpdHdpc2VBbmQsCiAgYml0d2lzZU5vdCwKICBiaXR3aXNlT3IsCiAgYml0d2lzZVhvciwKICBkaXZpZGUsCiAgZXF1YWxzLAogIGdyZWF0ZXJUaGFuLAogIGdyZWF0ZXJUaGFuRXF1YWxzLAogIGluZGV4R2V0LAogIGluZGV4U2V0LAogIGxlZnRTaGlmdCwKICBsZXNzVGhhbiwKICBsZXNzVGhhbkVxdWFscywKICBtb2R1bG8sCiAgbXVsdGlwbHksCiAgcmlnaHRTaGlmdCwKICB0cmlwbGVTaGlmdCwKICBzdWJ0cmFjdCwKICB0cnVuY2F0aW5nRGl2aWRlLAogIHVuYXJ5TWludXMsCn0KCk9wZXJhdG9yIG9wZXJhdG9yRnJvbVN0cmluZyhTdHJpbmcgc3RyaW5nKSB7CiAgaWYgKGlkZW50aWNhbCgiKyIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5hZGQ7CiAgaWYgKGlkZW50aWNhbCgiJiIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5iaXR3aXNlQW5kOwogIGlmIChpZGVudGljYWwoIn4iLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IuYml0d2lzZU5vdDsKICBpZiAoaWRlbnRpY2FsKCJ8Iiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLmJpdHdpc2VPcjsKICBpZiAoaWRlbnRpY2FsKCJeIiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLmJpdHdpc2VYb3I7CiAgaWYgKGlkZW50aWNhbCgiLyIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5kaXZpZGU7CiAgaWYgKGlkZW50aWNhbCgiPT0iLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IuZXF1YWxzOwogIGlmIChpZGVudGljYWwoIj4iLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IuZ3JlYXRlclRoYW47CiAgaWYgKGlkZW50aWNhbCgiPj0iLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbHM7CiAgaWYgKGlkZW50aWNhbCgiW10iLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IuaW5kZXhHZXQ7CiAgaWYgKGlkZW50aWNhbCgiW109Iiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLmluZGV4U2V0OwogIGlmIChpZGVudGljYWwoIjw8Iiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLmxlZnRTaGlmdDsKICBpZiAoaWRlbnRpY2FsKCI8Iiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLmxlc3NUaGFuOwogIGlmIChpZGVudGljYWwoIjw9Iiwgc3RyaW5nKSkgcmV0dXJuIE9wZXJhdG9yLmxlc3NUaGFuRXF1YWxzOwogIGlmIChpZGVudGljYWwoIiUiLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IubW9kdWxvOwogIGlmIChpZGVudGljYWwoIioiLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IubXVsdGlwbHk7CiAgaWYgKGlkZW50aWNhbCgiPj4iLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IucmlnaHRTaGlmdDsKICBpZiAoaWRlbnRpY2FsKCI+Pj4iLCBzdHJpbmcpKSByZXR1cm4gT3BlcmF0b3IudHJpcGxlU2hpZnQ7CiAgaWYgKGlkZW50aWNhbCgiLSIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci5zdWJ0cmFjdDsKICBpZiAoaWRlbnRpY2FsKCJ+LyIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci50cnVuY2F0aW5nRGl2aWRlOwogIGlmIChpZGVudGljYWwoInVuYXJ5LSIsIHN0cmluZykpIHJldHVybiBPcGVyYXRvci51bmFyeU1pbnVzOwogIHJldHVybiBudWxsOwp9CgpTdHJpbmcgb3BlcmF0b3JUb1N0cmluZyhPcGVyYXRvciBvcGVyYXRvcikgewogIHN3aXRjaCAob3BlcmF0b3IpIHsKICAgIGNhc2UgT3BlcmF0b3IuYWRkOgogICAgICByZXR1cm4gIisiOwogICAgY2FzZSBPcGVyYXRvci5iaXR3aXNlQW5kOgogICAgICByZXR1cm4gIiYiOwogICAgY2FzZSBPcGVyYXRvci5iaXR3aXNlTm90OgogICAgICByZXR1cm4gIn4iOwogICAgY2FzZSBPcGVyYXRvci5iaXR3aXNlT3I6CiAgICAgIHJldHVybiAifCI7CiAgICBjYXNlIE9wZXJhdG9yLmJpdHdpc2VYb3I6CiAgICAgIHJldHVybiAiXiI7CiAgICBjYXNlIE9wZXJhdG9yLmRpdmlkZToKICAgICAgcmV0dXJuICIvIjsKICAgIGNhc2UgT3BlcmF0b3IuZXF1YWxzOgogICAgICByZXR1cm4gIj09IjsKICAgIGNhc2UgT3BlcmF0b3IuZ3JlYXRlclRoYW46CiAgICAgIHJldHVybiAiPiI7CiAgICBjYXNlIE9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWxzOgogICAgICByZXR1cm4gIj49IjsKICAgIGNhc2UgT3BlcmF0b3IuaW5kZXhHZXQ6CiAgICAgIHJldHVybiAiW10iOwogICAgY2FzZSBPcGVyYXRvci5pbmRleFNldDoKICAgICAgcmV0dXJuICJbXT0iOwogICAgY2FzZSBPcGVyYXRvci5sZWZ0U2hpZnQ6CiAgICAgIHJldHVybiAiPDwiOwogICAgY2FzZSBPcGVyYXRvci5sZXNzVGhhbjoKICAgICAgcmV0dXJuICI8IjsKICAgIGNhc2UgT3BlcmF0b3IubGVzc1RoYW5FcXVhbHM6CiAgICAgIHJldHVybiAiPD0iOwogICAgY2FzZSBPcGVyYXRvci5tb2R1bG86CiAgICAgIHJldHVybiAiJSI7CiAgICBjYXNlIE9wZXJhdG9yLm11bHRpcGx5OgogICAgICByZXR1cm4gIioiOwogICAgY2FzZSBPcGVyYXRvci5yaWdodFNoaWZ0OgogICAgICByZXR1cm4gIj4+IjsKICAgIGNhc2UgT3BlcmF0b3IudHJpcGxlU2hpZnQ6CiAgICAgIHJldHVybiAiPj4+IjsKICAgIGNhc2UgT3BlcmF0b3Iuc3VidHJhY3Q6CiAgICAgIHJldHVybiAiLSI7CiAgICBjYXNlIE9wZXJhdG9yLnRydW5jYXRpbmdEaXZpZGU6CiAgICAgIHJldHVybiAifi8iOwogICAgY2FzZSBPcGVyYXRvci51bmFyeU1pbnVzOgogICAgICByZXR1cm4gInVuYXJ5LSI7CiAgfQogIHJldHVybiBudWxsOwp9CgppbnQgb3BlcmF0b3JSZXF1aXJlZEFyZ3VtZW50Q291bnQoT3BlcmF0b3Igb3BlcmF0b3IpIHsKICBzd2l0Y2ggKG9wZXJhdG9yKSB7CiAgICBjYXNlIE9wZXJhdG9yLmJpdHdpc2VOb3Q6CiAgICBjYXNlIE9wZXJhdG9yLnVuYXJ5TWludXM6CiAgICAgIHJldHVybiAwOwoKICAgIGNhc2UgT3BlcmF0b3IuYWRkOgogICAgY2FzZSBPcGVyYXRvci5iaXR3aXNlQW5kOgogICAgY2FzZSBPcGVyYXRvci5iaXR3aXNlT3I6CiAgICBjYXNlIE9wZXJhdG9yLmJpdHdpc2VYb3I6CiAgICBjYXNlIE9wZXJhdG9yLmRpdmlkZToKICAgIGNhc2UgT3BlcmF0b3IuZXF1YWxzOgogICAgY2FzZSBPcGVyYXRvci5ncmVhdGVyVGhhbjoKICAgIGNhc2UgT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbHM6CiAgICBjYXNlIE9wZXJhdG9yLmluZGV4R2V0OgogICAgY2FzZSBPcGVyYXRvci5sZWZ0U2hpZnQ6CiAgICBjYXNlIE9wZXJhdG9yLmxlc3NUaGFuOgogICAgY2FzZSBPcGVyYXRvci5sZXNzVGhhbkVxdWFsczoKICAgIGNhc2UgT3BlcmF0b3IubW9kdWxvOgogICAgY2FzZSBPcGVyYXRvci5tdWx0aXBseToKICAgIGNhc2UgT3BlcmF0b3IucmlnaHRTaGlmdDoKICAgIGNhc2UgT3BlcmF0b3IudHJpcGxlU2hpZnQ6CiAgICBjYXNlIE9wZXJhdG9yLnN1YnRyYWN0OgogICAgY2FzZSBPcGVyYXRvci50cnVuY2F0aW5nRGl2aWRlOgogICAgICByZXR1cm4gMTsKCiAgICBjYXNlIE9wZXJhdG9yLmluZGV4U2V0OgogICAgICByZXR1cm4gMjsKICB9CiAgcmV0dXJuIC0xOwp9CoCLAE5OPAEZASoESxAHDg4NDgoKDxUMDA0MEgoMDg8MFA4CAS0zOjo5OjY3O0I5Ojo4PzY4Oz04QT8PAgEtFhcSHhIeEh0SHhIaEhoTHxIlExwTHBQdExwSIhMaEhwSHhMfFBwSJBMeFwQPAgE3Fh4eEAEXHh0eGhofJRwdHCIaHB4fHCQQARwQBA0CASlwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvb3BlcmF0b3IuZGFydD9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL2FzeW5jX21vZGlmaWVyLmRhcnSBQC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnBhcnNlci5hc3luY19tb2RpZmllcjsKCmVudW0gQXN5bmNNb2RpZmllciB7CiAgU3luYywKICBTeW5jU3RhciwKICBBc3luYywKICBBc3luY1N0YXIsCn0KDgBOTjwBJQEVCAwJDQIBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvYXN5bmNfbW9kaWZpZXIuZGFydDxzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc2Nhbm5lci9jaGFyYWN0ZXJzLmRhcnSNbi8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnNjYW5uZXIuY2hhcmFjdGVyczsKCmNvbnN0IGludCAkRU9GID0gMDsKY29uc3QgaW50ICRTVFggPSAyOwpjb25zdCBpbnQgJEJTID0gODsKY29uc3QgaW50ICRUQUIgPSA5Owpjb25zdCBpbnQgJExGID0gMTA7CmNvbnN0IGludCAkVlRBQiA9IDExOwpjb25zdCBpbnQgJEZGID0gMTI7CmNvbnN0IGludCAkQ1IgPSAxMzsKY29uc3QgaW50ICRTUEFDRSA9IDMyOwpjb25zdCBpbnQgJEJBTkcgPSAzMzsKY29uc3QgaW50ICREUSA9IDM0Owpjb25zdCBpbnQgJEhBU0ggPSAzNTsKY29uc3QgaW50ICQkID0gMzY7CmNvbnN0IGludCAkUEVSQ0VOVCA9IDM3Owpjb25zdCBpbnQgJEFNUEVSU0FORCA9IDM4Owpjb25zdCBpbnQgJFNRID0gMzk7CmNvbnN0IGludCAkT1BFTl9QQVJFTiA9IDQwOwpjb25zdCBpbnQgJENMT1NFX1BBUkVOID0gNDE7CmNvbnN0IGludCAkU1RBUiA9IDQyOwpjb25zdCBpbnQgJFBMVVMgPSA0MzsKY29uc3QgaW50ICRDT01NQSA9IDQ0Owpjb25zdCBpbnQgJE1JTlVTID0gNDU7CmNvbnN0IGludCAkUEVSSU9EID0gNDY7CmNvbnN0IGludCAkU0xBU0ggPSA0NzsKY29uc3QgaW50ICQwID0gNDg7CmNvbnN0IGludCAkMSA9IDQ5Owpjb25zdCBpbnQgJDIgPSA1MDsKY29uc3QgaW50ICQzID0gNTE7CmNvbnN0IGludCAkNCA9IDUyOwpjb25zdCBpbnQgJDUgPSA1MzsKY29uc3QgaW50ICQ2ID0gNTQ7CmNvbnN0IGludCAkNyA9IDU1Owpjb25zdCBpbnQgJDggPSA1NjsKY29uc3QgaW50ICQ5ID0gNTc7CmNvbnN0IGludCAkQ09MT04gPSA1ODsKY29uc3QgaW50ICRTRU1JQ09MT04gPSA1OTsKY29uc3QgaW50ICRMVCA9IDYwOwpjb25zdCBpbnQgJEVRID0gNjE7CmNvbnN0IGludCAkR1QgPSA2MjsKY29uc3QgaW50ICRRVUVTVElPTiA9IDYzOwpjb25zdCBpbnQgJEFUID0gNjQ7CmNvbnN0IGludCAkQSA9IDY1Owpjb25zdCBpbnQgJEIgPSA2NjsKY29uc3QgaW50ICRDID0gNjc7CmNvbnN0IGludCAkRCA9IDY4Owpjb25zdCBpbnQgJEUgPSA2OTsKY29uc3QgaW50ICRGID0gNzA7CmNvbnN0IGludCAkRyA9IDcxOwpjb25zdCBpbnQgJEggPSA3MjsKY29uc3QgaW50ICRJID0gNzM7CmNvbnN0IGludCAkSiA9IDc0Owpjb25zdCBpbnQgJEsgPSA3NTsKY29uc3QgaW50ICRMID0gNzY7CmNvbnN0IGludCAkTSA9IDc3Owpjb25zdCBpbnQgJE4gPSA3ODsKY29uc3QgaW50ICRPID0gNzk7CmNvbnN0IGludCAkUCA9IDgwOwpjb25zdCBpbnQgJFEgPSA4MTsKY29uc3QgaW50ICRSID0gODI7CmNvbnN0IGludCAkUyA9IDgzOwpjb25zdCBpbnQgJFQgPSA4NDsKY29uc3QgaW50ICRVID0gODU7CmNvbnN0IGludCAkViA9IDg2Owpjb25zdCBpbnQgJFcgPSA4NzsKY29uc3QgaW50ICRYID0gODg7CmNvbnN0IGludCAkWSA9IDg5Owpjb25zdCBpbnQgJFogPSA5MDsKY29uc3QgaW50ICRPUEVOX1NRVUFSRV9CUkFDS0VUID0gOTE7CmNvbnN0IGludCAkQkFDS1NMQVNIID0gOTI7CmNvbnN0IGludCAkQ0xPU0VfU1FVQVJFX0JSQUNLRVQgPSA5MzsKY29uc3QgaW50ICRDQVJFVCA9IDk0Owpjb25zdCBpbnQgJF8gPSA5NTsKY29uc3QgaW50ICRCQUNLUElORyA9IDk2Owpjb25zdCBpbnQgJGEgPSA5NzsKY29uc3QgaW50ICRiID0gOTg7CmNvbnN0IGludCAkYyA9IDk5Owpjb25zdCBpbnQgJGQgPSAxMDA7CmNvbnN0IGludCAkZSA9IDEwMTsKY29uc3QgaW50ICRmID0gMTAyOwpjb25zdCBpbnQgJGcgPSAxMDM7CmNvbnN0IGludCAkaCA9IDEwNDsKY29uc3QgaW50ICRpID0gMTA1Owpjb25zdCBpbnQgJGogPSAxMDY7CmNvbnN0IGludCAkayA9IDEwNzsKY29uc3QgaW50ICRsID0gMTA4Owpjb25zdCBpbnQgJG0gPSAxMDk7CmNvbnN0IGludCAkbiA9IDExMDsKY29uc3QgaW50ICRvID0gMTExOwpjb25zdCBpbnQgJHAgPSAxMTI7CmNvbnN0IGludCAkcSA9IDExMzsKY29uc3QgaW50ICRyID0gMTE0Owpjb25zdCBpbnQgJHMgPSAxMTU7CmNvbnN0IGludCAkdCA9IDExNjsKY29uc3QgaW50ICR1ID0gMTE3Owpjb25zdCBpbnQgJHYgPSAxMTg7CmNvbnN0IGludCAkdyA9IDExOTsKY29uc3QgaW50ICR4ID0gMTIwOwpjb25zdCBpbnQgJHkgPSAxMjE7CmNvbnN0IGludCAkeiA9IDEyMjsKY29uc3QgaW50ICRPUEVOX0NVUkxZX0JSQUNLRVQgPSAxMjM7CmNvbnN0IGludCAkQkFSID0gMTI0Owpjb25zdCBpbnQgJENMT1NFX0NVUkxZX0JSQUNLRVQgPSAxMjU7CmNvbnN0IGludCAkVElMREUgPSAxMjY7CmNvbnN0IGludCAkREVMID0gMTI3Owpjb25zdCBpbnQgJE5CU1AgPSAxNjA7CmNvbnN0IGludCAkTFMgPSAweDIwMjg7CmNvbnN0IGludCAkUFMgPSAweDIwMjk7Cgpjb25zdCBpbnQgJEZJUlNUX1NVUlJPR0FURSA9IDB4ZDgwMDsKY29uc3QgaW50ICRMQVNUX1NVUlJPR0FURSA9IDB4ZGZmZjsKY29uc3QgaW50ICRMQVNUX0NPREVfUE9JTlQgPSAweDEwZmZmZjsKCmJvb2wgaXNEaWdpdChpbnQgY2hhcmFjdGVyQ29kZSkgewogIHJldHVybiAkMCA8PSBjaGFyYWN0ZXJDb2RlICYmIGNoYXJhY3RlckNvZGUgPD0gJDk7Cn0KCmJvb2wgaXNIZXhEaWdpdChpbnQgY2hhcmFjdGVyQ29kZSkgewogIGlmIChjaGFyYWN0ZXJDb2RlIDw9ICQ5KSByZXR1cm4gJDAgPD0gY2hhcmFjdGVyQ29kZTsKICBjaGFyYWN0ZXJDb2RlIHw9ICRhIF4gJEE7CiAgcmV0dXJuICgkYSA8PSBjaGFyYWN0ZXJDb2RlICYmIGNoYXJhY3RlckNvZGUgPD0gJGYpOwp9CgppbnQgaGV4RGlnaXRWYWx1ZShpbnQgaGV4RGlnaXQpIHsKICBhc3NlcnQoaXNIZXhEaWdpdChoZXhEaWdpdCkpOwogIC8vIGhleERpZ2l0IGlzIG9uZSBvZiAnMCcuLic5JywgJ0EnLi4nRicgYW5kICdhJy4uJ2YnLgogIGlmIChoZXhEaWdpdCA8PSAkOSkgcmV0dXJuIGhleERpZ2l0IC0gJDA7CiAgcmV0dXJuIChoZXhEaWdpdCB8ICgkYSBeICRBKSkgLSAoJGEgLSAxMCk7Cn0KCmJvb2wgaXNVbmljb2RlU2NhbGFyVmFsdWUoaW50IHZhbHVlKSB7CiAgcmV0dXJuIHZhbHVlIDwgJEZJUlNUX1NVUlJPR0FURSB8fAogICAgICAodmFsdWUgPiAkTEFTVF9TVVJST0dBVEUgJiYgdmFsdWUgPD0gJExBU1RfQ09ERV9QT0lOVCk7Cn0KCmJvb2wgaXNVdGYxNkxlYWRTdXJyb2dhdGUoaW50IHZhbHVlKSB7CiAgcmV0dXJuIHZhbHVlID49IDB4ZDgwMCAmJiB2YWx1ZSA8PSAweGRiZmY7Cn0KCmJvb2wgaXNVdGYxNlRyYWlsU3Vycm9nYXRlKGludCB2YWx1ZSkgewogIHJldHVybiB2YWx1ZSA+PSAweGRjMDAgJiYgdmFsdWUgPD0gMHhkZmZmOwp9CoCVAE5OPAEiARQUExQUFhQUFxYUFhMZGxQcHRYWFxcYFxMTExMTExMTExMXGxQUFBoUExMTExMTExMTExMTExMTExMTExMTExMTExMlGyYXExoTExMUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCUWJhgWFxgYASUkJwEiNQIBJTccNwIBIiA5LC0CASclPgIBJy0CASgtAgEzcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIvY2hhcmFjdGVycy5kYXJ0M3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS91dGlsL2xpbmsuZGFydJTjLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudXRpbC5saW5rOwoKaW1wb3J0ICdsaW5rX2ltcGxlbWVudGF0aW9uLmRhcnQnCiAgICBzaG93IExpbmtCdWlsZGVySW1wbGVtZW50YXRpb24sIExpbmtFbnRyeSwgTGlua0l0ZXJhdG9yLCBNYXBwZWRMaW5rSXRlcmFibGU7CgpjbGFzcyBMaW5rPFQ+IGltcGxlbWVudHMgSXRlcmFibGU8VD4gewogIFQgZ2V0IGhlYWQgPT4gdGhyb3cgbmV3IFN0YXRlRXJyb3IoIm5vIGVsZW1lbnRzIik7CiAgTGluazxUPiBnZXQgdGFpbCA9PiBudWxsOwoKICBjb25zdCBMaW5rKCk7CgogIExpbms8VD4gcHJlcGVuZChUIGVsZW1lbnQpIHsKICAgIHJldHVybiBuZXcgTGlua0VudHJ5PFQ+KGVsZW1lbnQsIHRoaXMpOwogIH0KCiAgSXRlcmF0b3I8VD4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBMaW5rSXRlcmF0b3I8VD4odGhpcyk7CgogIHZvaWQgcHJpbnRPbihTdHJpbmdCdWZmZXIgYnVmZmVyLCBbc2VwYXJhdGVkQnldKSB7fQoKICBMaXN0PFQ+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pIHsKICAgIExpc3Q8VD4gcmVzdWx0OwogICAgaWYgKCFncm93YWJsZSkgewogICAgICByZXN1bHQgPSBuZXcgTGlzdDxUPihzbG93TGVuZ3RoKCkpOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0ID0gbmV3IExpc3Q8VD4oKTsKICAgICAgcmVzdWx0Lmxlbmd0aCA9IHNsb3dMZW5ndGgoKTsKICAgIH0KICAgIGludCBpID0gMDsKICAgIGZvciAoTGluazxUPiBsaW5rID0gdGhpczsgIWxpbmsuaXNFbXB0eTsgbGluayA9IGxpbmsudGFpbCkgewogICAgICByZXN1bHRbaSsrXSA9IGxpbmsuaGVhZDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gTGF6aWx5IG1hcHMgb3ZlciB0aGlzIGxpbmtlZCBsaXN0LCByZXR1cm5pbmcgYW4gW0l0ZXJhYmxlXS4KICBJdGVyYWJsZTxLPiBtYXA8Sz4oSyBmbihUIGl0ZW0pKSB7CiAgICByZXR1cm4gbmV3IE1hcHBlZExpbmtJdGVyYWJsZTxULCBLPih0aGlzLCBmbik7CiAgfQoKICAvLy8gSW52b2tlcyBgZm5gIGZvciBldmVyeSBpdGVtIGluIHRoZSBsaW5rZWQgbGlzdCBhbmQgcmV0dXJucyB0aGUgcmVzdWx0cwogIC8vLyBpbiBhIFtMaXN0XS4KICBMaXN0PEU+IG1hcFRvTGlzdDxFPihFIGZuKFQgaXRlbSksIHtib29sIGdyb3dhYmxlOiB0cnVlfSkgewogICAgTGlzdDxFPiByZXN1bHQ7CiAgICBpZiAoIWdyb3dhYmxlKSB7CiAgICAgIHJlc3VsdCA9IG5ldyBMaXN0PEU+KHNsb3dMZW5ndGgoKSk7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBuZXcgTGlzdDxFPigpOwogICAgICByZXN1bHQubGVuZ3RoID0gc2xvd0xlbmd0aCgpOwogICAgfQogICAgaW50IGkgPSAwOwogICAgZm9yIChMaW5rPFQ+IGxpbmsgPSB0aGlzOyAhbGluay5pc0VtcHR5OyBsaW5rID0gbGluay50YWlsKSB7CiAgICAgIHJlc3VsdFtpKytdID0gZm4obGluay5oZWFkKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+IHRydWU7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBmYWxzZTsKCiAgTGluazxUPiByZXZlcnNlKExpbms8VD4gdGFpbCkgPT4gdGhpczsKCiAgTGluazxUPiByZXZlcnNlUHJlcGVuZEFsbChMaW5rPFQ+IGZyb20pIHsKICAgIGlmIChmcm9tLmlzRW1wdHkpIHJldHVybiB0aGlzOwogICAgcmV0dXJuIHRoaXMucHJlcGVuZChmcm9tLmhlYWQpLnJldmVyc2VQcmVwZW5kQWxsKGZyb20udGFpbCk7CiAgfQoKICBMaW5rPFQ+IHNraXAoaW50IG4pIHsKICAgIGlmIChuID09IDApIHJldHVybiB0aGlzOwogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4ICRuIG91dCBvZiByYW5nZScpOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihUIGVsZW1lbnQpKSB7fQoKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIExpbms8VD4pIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBvdGhlci5pc0VtcHR5OwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignTGluay5oYXNoQ29kZScpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiW10iOwoKICBnZXQgbGVuZ3RoIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdnZXQ6bGVuZ3RoJyk7CiAgfQoKICBpbnQgc2xvd0xlbmd0aCgpID0+IDA7CgogIC8vIFRPRE8oYWhlKTogUmVtb3ZlIHRoaXMgbWV0aG9kPwogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGZvciAoTGluazxUPiBsaW5rID0gdGhpczsgIWxpbmsuaXNFbXB0eTsgbGluayA9IGxpbmsudGFpbCkgewogICAgICBpZiAobGluay5oZWFkID09IGVsZW1lbnQpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcyBtZXRob2Q/CiAgVCBnZXQgc2luZ2xlIHsKICAgIGlmIChpc0VtcHR5KSB0aHJvdyBuZXcgU3RhdGVFcnJvcignTm8gZWxlbWVudHMnKTsKICAgIGlmICghdGFpbC5pc0VtcHR5KSB0aHJvdyBuZXcgU3RhdGVFcnJvcignTW9yZSB0aGFuIG9uZSBlbGVtZW50Jyk7CiAgICByZXR1cm4gaGVhZDsKICB9CgogIC8vIFRPRE8oYWhlKTogUmVtb3ZlIHRoaXMgbWV0aG9kPwogIFQgZ2V0IGZpcnN0IHsKICAgIGlmIChpc0VtcHR5KSB0aHJvdyBuZXcgU3RhdGVFcnJvcignTm8gZWxlbWVudHMnKTsKICAgIHJldHVybiBoZWFkOwogIH0KCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiBmIHJldHVybnMgdHJ1ZSBmb3IgYWxsIGVsZW1lbnRzIG9mIHRoaXMgbGlzdC4KICAvLy8KICAvLy8gUmV0dXJucyB0cnVlIGZvciB0aGUgZW1wdHkgbGlzdC4KICBib29sIGV2ZXJ5KGJvb2wgZihUIGUpKSB7CiAgICBmb3IgKExpbms8VD4gbGluayA9IHRoaXM7ICFsaW5rLmlzRW1wdHk7IGxpbmsgPSBsaW5rLnRhaWwpIHsKICAgICAgaWYgKCFmKGxpbmsuaGVhZCkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgLy8KICAvLyBVbnN1cHBvcnRlZCBJdGVyYWJsZTxUPiBtZXRob2RzLgogIC8vCiAgYm9vbCBhbnkoYm9vbCBmKFQgZSkpID0+IF91bnN1cHBvcnRlZCgnYW55Jyk7CiAgSXRlcmFibGU8VD4gY2FzdDxUPigpID0+IF91bnN1cHBvcnRlZCgnY2FzdCcpOwogIFQgZWxlbWVudEF0KGludCBpKSA9PiBfdW5zdXBwb3J0ZWQoJ2VsZW1lbnRBdCcpOwogIEl0ZXJhYmxlPEs+IGV4cGFuZDxLPihJdGVyYWJsZTxLPiBmKFQgZSkpID0+IF91bnN1cHBvcnRlZCgnZXhwYW5kJyk7CiAgVCBmaXJzdFdoZXJlKGJvb2wgZihUIGUpLCB7VCBvckVsc2UoKX0pID0+IF91bnN1cHBvcnRlZCgnZmlyc3RXaGVyZScpOwogIEsgZm9sZDxLPihLIGluaXRpYWxWYWx1ZSwgSyBjb21iaW5lKEsgdmFsdWUsIFQgZWxlbWVudCkpIHsKICAgIHJldHVybiBfdW5zdXBwb3J0ZWQoJ2ZvbGQnKTsKICB9CgogIEl0ZXJhYmxlPFQ+IGZvbGxvd2VkQnkoSXRlcmFibGU8VD4gb3RoZXIpID0+IF91bnN1cHBvcnRlZCgnZm9sbG93ZWRCeScpOwogIFQgZ2V0IGxhc3QgPT4gX3Vuc3VwcG9ydGVkKCdnZXQ6bGFzdCcpOwogIFQgbGFzdFdoZXJlKGJvb2wgZihUIGUpLCB7VCBvckVsc2UoKX0pID0+IF91bnN1cHBvcnRlZCgnbGFzdFdoZXJlJyk7CiAgU3RyaW5nIGpvaW4oW3NlcGFyYXRvciA9ICcnXSkgPT4gX3Vuc3VwcG9ydGVkKCdqb2luJyk7CiAgVCByZWR1Y2UoVCBjb21iaW5lKFQgYSwgVCBiKSkgPT4gX3Vuc3VwcG9ydGVkKCdyZWR1Y2UnKTsKICBJdGVyYWJsZTxUPiByZXR5cGU8VD4oKSA9PiBfdW5zdXBwb3J0ZWQoJ3JldHlwZScpOwogIFQgc2luZ2xlV2hlcmUoYm9vbCBmKFQgZSksIHtUIG9yRWxzZSgpfSkgPT4gX3Vuc3VwcG9ydGVkKCdzaW5nbGVXaGVyZScpOwogIEl0ZXJhYmxlPFQ+IHNraXBXaGlsZShib29sIGYoVCBlKSkgPT4gX3Vuc3VwcG9ydGVkKCdza2lwV2hpbGUnKTsKICBJdGVyYWJsZTxUPiB0YWtlKGludCBuKSA9PiBfdW5zdXBwb3J0ZWQoJ3Rha2UnKTsKICBJdGVyYWJsZTxUPiB0YWtlV2hpbGUoYm9vbCBmKFQgZSkpID0+IF91bnN1cHBvcnRlZCgndGFrZVdoaWxlJyk7CiAgU2V0PFQ+IHRvU2V0KCkgPT4gX3Vuc3VwcG9ydGVkKCd0b1NldCcpOwogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IF91bnN1cHBvcnRlZCgnd2hlcmVUeXBlJyk7CiAgSXRlcmFibGU8VD4gd2hlcmUoYm9vbCBmKFQgZSkpID0+IF91bnN1cHBvcnRlZCgnd2hlcmUnKTsKCiAgX3Vuc3VwcG9ydGVkKFN0cmluZyBtZXRob2QpID0+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKG1ldGhvZCk7Cn0KCi8vLyBCdWlsZGVyIG9iamVjdCBmb3IgY3JlYXRpbmcgbGlua2VkIGxpc3RzIHVzaW5nIFtMaW5rXSBvciBmaXhlZC1sZW5ndGggW0xpc3RdCi8vLyBvYmplY3RzLgphYnN0cmFjdCBjbGFzcyBMaW5rQnVpbGRlcjxUPiB7CiAgZmFjdG9yeSBMaW5rQnVpbGRlcigpID0gTGlua0J1aWxkZXJJbXBsZW1lbnRhdGlvbjxUPjsKCiAgLy8vIFByZXBlbmRzIGFsbCBlbGVtZW50cyBhZGRlZCB0byB0aGUgYnVpbGRlciB0byBbdGFpbF0uIFRoZSByZXN1bHRpbmcgbGlzdAogIC8vLyBpcyByZXR1cm5lZCBhbmQgdGhlIGJ1aWxkZXIgaXMgY2xlYXJlZC4KICBMaW5rPFQ+IHRvTGluayhMaW5rPFQ+IHRhaWwpOwoKICAvLy8gQ3JlYXRlcyBhIG5ldyBmaXhlZCBsZW5ndGggY29udGFpbmluZyBhbGwgYWRkZWQgZWxlbWVudHMuIFRoZQogIC8vLyByZXN1bHRpbmcgbGlzdCBpcyByZXR1cm5lZCBhbmQgdGhlIGJ1aWxkZXIgaXMgY2xlYXJlZC4KICBMaXN0PFQ+IHRvTGlzdCgpOwoKICAvLy8gQWRkcyB0aGUgZWxlbWVudCBbdF0gdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBiZWluZyBidWlsdC4KICBMaW5rPFQ+IGFkZExhc3QoVCB0KTsKCiAgLy8vIFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIGxpc3QgYmVpbmcgYnVpbHQuCiAgVCBnZXQgZmlyc3Q7CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIGxpc3QgYmVpbmcgYnVpbHQuCiAgZmluYWwgaW50IGxlbmd0aDsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBsaXN0IGJlaW5nIGJ1aWx0IGlzIGVtcHR5LgogIGZpbmFsIGJvb2wgaXNFbXB0eTsKCiAgLy8vIFJlbW92ZXMgYWxsIGFkZGVkIGVsZW1lbnRzIGFuZCByZXNldHMgdGhlIGJ1aWxkZXIuCiAgdm9pZCBjbGVhcigpOwp9CoC2AE5OPAEZASJRASc1HAEQAR8sBAE5ATYBKhQVKg0eJAYPQR8GEwQBQiUzBAFNEz4UFSoNHiQGD0EjBhMEARwgASkBLCNBBAEYHTMEASUBHCkaBAFDAR0BDy4EARkBJCJBLQYSBAEkETZGEQQBJBA2EQQBRAYnHEEnBhEEAQUmBTAxM0dJPSEEAUsqRzk7NUtDM0MrOzsBRQIBUQ0gOAFPLiABRD0UAT8YATkPAT4UATcWATkQAgEqcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3V0aWwvbGluay5kYXJ0QnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS91dGlsL2xpbmtfaW1wbGVtZW50YXRpb24uZGFydJJZLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudXRpbC5saW5rX2ltcGxlbWVudGF0aW9uOwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgSXRlcmFibGVCYXNlOwoKaW1wb3J0ICdsaW5rLmRhcnQnIHNob3cgTGluaywgTGlua0J1aWxkZXI7CgpjbGFzcyBMaW5rSXRlcmF0b3I8VD4gaW1wbGVtZW50cyBJdGVyYXRvcjxUPiB7CiAgVCBfY3VycmVudDsKICBMaW5rPFQ+IF9saW5rOwoKICBMaW5rSXRlcmF0b3IodGhpcy5fbGluayk7CgogIFQgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX2xpbmsuaXNFbXB0eSkgewogICAgICBfY3VycmVudCA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIF9jdXJyZW50ID0gX2xpbmsuaGVhZDsKICAgIF9saW5rID0gX2xpbmsudGFpbDsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKdHlwZWRlZiBUIFRyYW5zZm9ybWF0aW9uPFMsIFQ+KFMgaW5wdXQpOwoKY2xhc3MgTWFwcGVkTGlua0l0ZXJhdG9yPFMsIFQ+IGV4dGVuZHMgSXRlcmF0b3I8VD4gewogIFRyYW5zZm9ybWF0aW9uPFMsIFQ+IF90cmFuc2Zvcm1hdGlvbjsKICBMaW5rPFM+IF9saW5rOwogIFQgX2N1cnJlbnQ7CgogIE1hcHBlZExpbmtJdGVyYXRvcih0aGlzLl9saW5rLCB0aGlzLl90cmFuc2Zvcm1hdGlvbik7CgogIFQgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX2xpbmsuaXNFbXB0eSkgewogICAgICBfY3VycmVudCA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIF9jdXJyZW50ID0gX3RyYW5zZm9ybWF0aW9uKF9saW5rLmhlYWQpOwogICAgX2xpbmsgPSBfbGluay50YWlsOwogICAgcmV0dXJuIHRydWU7CiAgfQp9CgpjbGFzcyBNYXBwZWRMaW5rSXRlcmFibGU8UywgVD4gZXh0ZW5kcyBJdGVyYWJsZUJhc2U8VD4gewogIFRyYW5zZm9ybWF0aW9uPFMsIFQ+IF90cmFuc2Zvcm1hdGlvbjsKICBMaW5rPFM+IF9saW5rOwoKICBNYXBwZWRMaW5rSXRlcmFibGUodGhpcy5fbGluaywgdGhpcy5fdHJhbnNmb3JtYXRpb24pOwoKICBJdGVyYXRvcjxUPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBNYXBwZWRMaW5rSXRlcmF0b3I8UywgVD4oX2xpbmssIF90cmFuc2Zvcm1hdGlvbik7CiAgfQp9CgpjbGFzcyBMaW5rRW50cnk8VD4gZXh0ZW5kcyBMaW5rPFQ+IHsKICBmaW5hbCBUIGhlYWQ7CiAgTGluazxUPiB0YWlsOwoKICBMaW5rRW50cnkodGhpcy5oZWFkLCBbTGluazxUPiB0YWlsXSkgOiB0YWlsID0gdGFpbCA/PyBjb25zdCBMaW5rPE51bGw+KCk7CgogIExpbms8VD4gcHJlcGVuZChUIGVsZW1lbnQpIHsKICAgIC8vIFRPRE8oYWhlKTogVXNlIG5ldyBMaW5rPFQ+LCBidXQgdGhpcyBjb3N0IDglIHBlcmZvcm1hbmNlIG9uIFZNLgogICAgcmV0dXJuIG5ldyBMaW5rRW50cnk8VD4oZWxlbWVudCwgdGhpcyk7CiAgfQoKICB2b2lkIHByaW50T24oU3RyaW5nQnVmZmVyIGJ1ZmZlciwgW3NlcGFyYXRlZEJ5XSkgewogICAgYnVmZmVyLndyaXRlKGhlYWQpOwogICAgaWYgKHNlcGFyYXRlZEJ5ID09IG51bGwpIHNlcGFyYXRlZEJ5ID0gJyc7CiAgICBmb3IgKExpbms8VD4gbGluayA9IHRhaWw7IGxpbmsuaXNOb3RFbXB0eTsgbGluayA9IGxpbmsudGFpbCkgewogICAgICBidWZmZXIud3JpdGUoc2VwYXJhdGVkQnkpOwogICAgICBidWZmZXIud3JpdGUobGluay5oZWFkKTsKICAgIH0KICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBidWZmZXIud3JpdGUoJ1sgJyk7CiAgICBwcmludE9uKGJ1ZmZlciwgJywgJyk7CiAgICBidWZmZXIud3JpdGUoJyBdJyk7CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBMaW5rPFQ+IHJldmVyc2UoTGluazxUPiB0YWlsKSB7CiAgICBMaW5rPFQ+IHJlc3VsdCA9IHRhaWw7CiAgICBmb3IgKExpbms8VD4gbGluayA9IHRoaXM7IGxpbmsuaXNOb3RFbXB0eTsgbGluayA9IGxpbmsudGFpbCkgewogICAgICByZXN1bHQgPSByZXN1bHQucHJlcGVuZChsaW5rLmhlYWQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIExpbms8VD4gcmV2ZXJzZVByZXBlbmRBbGwoTGluazxUPiBmcm9tKSB7CiAgICBMaW5rPFQ+IHJlc3VsdDsKICAgIGZvciAocmVzdWx0ID0gdGhpczsgZnJvbS5pc05vdEVtcHR5OyBmcm9tID0gZnJvbS50YWlsKSB7CiAgICAgIHJlc3VsdCA9IHJlc3VsdC5wcmVwZW5kKGZyb20uaGVhZCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTGluazxUPiBza2lwKGludCBuKSB7CiAgICBMaW5rPFQ+IGxpbmsgPSB0aGlzOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgaWYgKGxpbmsuaXNFbXB0eSkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCAkbiBvdXQgb2YgcmFuZ2UnKTsKICAgICAgfQogICAgICBsaW5rID0gbGluay50YWlsOwogICAgfQogICAgcmV0dXJuIGxpbms7CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gdHJ1ZTsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihUIGVsZW1lbnQpKSB7CiAgICBmb3IgKExpbms8VD4gbGluayA9IHRoaXM7IGxpbmsuaXNOb3RFbXB0eTsgbGluayA9IGxpbmsudGFpbCkgewogICAgICBmKGxpbmsuaGVhZCk7CiAgICB9CiAgfQoKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIExpbms8VD4pIHJldHVybiBmYWxzZTsKICAgIExpbms8VD4gbXlFbGVtZW50cyA9IHRoaXM7CiAgICB3aGlsZSAobXlFbGVtZW50cy5pc05vdEVtcHR5ICYmIG90aGVyLmlzTm90RW1wdHkpIHsKICAgICAgaWYgKG15RWxlbWVudHMuaGVhZCAhPSBvdGhlci5oZWFkKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIG15RWxlbWVudHMgPSBteUVsZW1lbnRzLnRhaWw7CiAgICAgIG90aGVyID0gb3RoZXIudGFpbDsKICAgIH0KICAgIHJldHVybiBteUVsZW1lbnRzLmlzRW1wdHkgJiYgb3RoZXIuaXNFbXB0eTsKICB9CgogIGludCBnZXQgaGFzaENvZGUgPT4gdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0xpbmtFbnRyeS5oYXNoQ29kZScpOwoKICBpbnQgc2xvd0xlbmd0aCgpIHsKICAgIGludCBsZW5ndGggPSAwOwogICAgZm9yIChMaW5rPFQ+IGN1cnJlbnQgPSB0aGlzOyBjdXJyZW50LmlzTm90RW1wdHk7IGN1cnJlbnQgPSBjdXJyZW50LnRhaWwpIHsKICAgICAgKytsZW5ndGg7CiAgICB9CiAgICByZXR1cm4gbGVuZ3RoOwogIH0KfQoKY2xhc3MgTGlua0J1aWxkZXJJbXBsZW1lbnRhdGlvbjxUPiBpbXBsZW1lbnRzIExpbmtCdWlsZGVyPFQ+IHsKICBMaW5rRW50cnk8VD4gaGVhZCA9IG51bGw7CiAgTGlua0VudHJ5PFQ+IGxhc3RMaW5rID0gbnVsbDsKICBpbnQgbGVuZ3RoID0gMDsKCiAgTGlua0J1aWxkZXJJbXBsZW1lbnRhdGlvbigpOwoKICBAb3ZlcnJpZGUKICBMaW5rPFQ+IHRvTGluayhMaW5rPFQ+IHRhaWwpIHsKICAgIGlmIChoZWFkID09IG51bGwpIHJldHVybiB0YWlsOwogICAgbGFzdExpbmsudGFpbCA9IHRhaWw7CiAgICBMaW5rPFQ+IGxpbmsgPSBoZWFkOwogICAgbGFzdExpbmsgPSBudWxsOwogICAgaGVhZCA9IG51bGw7CiAgICBsZW5ndGggPSAwOwogICAgcmV0dXJuIGxpbms7CiAgfQoKICBMaXN0PFQ+IHRvTGlzdCgpIHsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuIG5ldyBMaXN0PFQ+KDApOwogICAgTGlzdDxUPiBsaXN0ID0gbmV3IExpc3Q8VD4obGVuZ3RoKTsKICAgIGludCBpbmRleCA9IDA7CiAgICBMaW5rPFQ+IGxpbmsgPSBoZWFkOwogICAgd2hpbGUgKGxpbmsuaXNOb3RFbXB0eSkgewogICAgICBsaXN0W2luZGV4XSA9IGxpbmsuaGVhZDsKICAgICAgbGluayA9IGxpbmsudGFpbDsKICAgICAgaW5kZXgrKzsKICAgIH0KICAgIGxhc3RMaW5rID0gbnVsbDsKICAgIGhlYWQgPSBudWxsOwogICAgbGVuZ3RoID0gMDsKICAgIHJldHVybiBsaXN0OwogIH0KCiAgTGluazxUPiBhZGRMYXN0KFQgdCkgewogICAgbGVuZ3RoKys7CiAgICBMaW5rRW50cnk8VD4gZW50cnkgPSBuZXcgTGlua0VudHJ5PFQ+KHQsIG51bGwpOwogICAgaWYgKGhlYWQgPT0gbnVsbCkgewogICAgICBoZWFkID0gZW50cnk7CiAgICB9IGVsc2UgewogICAgICBsYXN0TGluay50YWlsID0gZW50cnk7CiAgICB9CiAgICBsYXN0TGluayA9IGVudHJ5OwogICAgcmV0dXJuIGVudHJ5OwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBsZW5ndGggPT0gMDsKCiAgVCBnZXQgZmlyc3QgewogICAgaWYgKGhlYWQgIT0gbnVsbCkgewogICAgICByZXR1cm4gaGVhZC5oZWFkOwogICAgfQogICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIm5vIGVsZW1lbnRzIik7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgaGVhZCA9IG51bGw7CiAgICBsYXN0TGluayA9IG51bGw7CiAgICBsZW5ndGggPSAwOwogIH0KfQqA1gBOTjwBKAEsASsBLw4RARwBHQEUGRcUBhsYEQQCASkBNSgRDgE4AR0BFBkXFAYsGBEEAgE5KBEBOAEdQQQCASUQEAFMAR9HLAQBNRgvQyEfBgQBFi4YGxgeBAEMIhtDKgYTBAEsFD0qBhMEARgZIho3CBgGEQQBHR8BJEMUBgQBHCkfOCsWCCQaBjAEAUgBFRRPEAYTBAIBPxwgEgEfAQwhIxoZFREQEQQBFSwoExkeHxgPBhUREBEEARkONBgUDR0GFhIEASMBEBgYBikEARERFRAEAgE5cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3V0aWwvbGlua19pbXBsZW1lbnRhdGlvbi5kYXJ0OXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS91dGlsL3JlbGF0aXZpemUuZGFydIiBLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudXRpbC5yZWxhdGl2aXplOwoKaW1wb3J0ICdkYXJ0Om1hdGgnOwoKU3RyaW5nIHJlbGF0aXZpemVVcmkoVXJpIGJhc2UsIFVyaSB1cmksIGJvb2wgaXNXaW5kb3dzKSB7CiAgYm9vbCBlcXVhbHNOQ1MoU3RyaW5nIGEsIFN0cmluZyBiKSB7CiAgICByZXR1cm4gYS50b0xvd2VyQ2FzZSgpID09IGIudG9Mb3dlckNhc2UoKTsKICB9CgogIGlmICghZXF1YWxzTkNTKGJhc2Uuc2NoZW1lLCB1cmkuc2NoZW1lKSB8fAogICAgICBlcXVhbHNOQ1MoYmFzZS5zY2hlbWUsICdkYXJ0JykgfHwKICAgICAgZXF1YWxzTkNTKGJhc2Uuc2NoZW1lLCAncGFja2FnZScpKSB7CiAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7CiAgfQoKICBpZiAoIWVxdWFsc05DUyhiYXNlLnNjaGVtZSwgJ2ZpbGUnKSkgewogICAgaXNXaW5kb3dzID0gZmFsc2U7CiAgfQoKICBTdHJpbmcgbm9ybWFsaXplKFN0cmluZyBwYXRoKSB7CiAgICBpZiAoaXNXaW5kb3dzKSB7CiAgICAgIHJldHVybiBwYXRoLnRvTG93ZXJDYXNlKCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gcGF0aDsKICAgIH0KICB9CgogIGlmIChiYXNlLnVzZXJJbmZvID09IHVyaS51c2VySW5mbyAmJgogICAgICBlcXVhbHNOQ1MoYmFzZS5ob3N0LCB1cmkuaG9zdCkgJiYKICAgICAgYmFzZS5wb3J0ID09IHVyaS5wb3J0ICYmCiAgICAgIHVyaS5xdWVyeSA9PSAiIiAmJgogICAgICB1cmkuZnJhZ21lbnQgPT0gIiIpIHsKICAgIGlmIChub3JtYWxpemUodXJpLnBhdGgpLnN0YXJ0c1dpdGgobm9ybWFsaXplKGJhc2UucGF0aCkpKSB7CiAgICAgIHJldHVybiB1cmkucGF0aC5zdWJzdHJpbmcoYmFzZS5wYXRoLmxhc3RJbmRleE9mKCcvJykgKyAxKTsKICAgIH0KCiAgICBpZiAoIWJhc2UucGF0aC5zdGFydHNXaXRoKCcvJykgfHwgIXVyaS5wYXRoLnN0YXJ0c1dpdGgoJy8nKSkgewogICAgICByZXR1cm4gdXJpLnRvU3RyaW5nKCk7CiAgICB9CgogICAgTGlzdDxTdHJpbmc+IHVyaVBhcnRzID0gdXJpLnBhdGguc3BsaXQoJy8nKTsKICAgIExpc3Q8U3RyaW5nPiBiYXNlUGFydHMgPSBiYXNlLnBhdGguc3BsaXQoJy8nKTsKICAgIGludCBjb21tb24gPSAwOwogICAgaW50IGxlbmd0aCA9IG1pbih1cmlQYXJ0cy5sZW5ndGgsIGJhc2VQYXJ0cy5sZW5ndGgpOwogICAgd2hpbGUgKGNvbW1vbiA8IGxlbmd0aCAmJgogICAgICAgIG5vcm1hbGl6ZSh1cmlQYXJ0c1tjb21tb25dKSA9PSBub3JtYWxpemUoYmFzZVBhcnRzW2NvbW1vbl0pKSB7CiAgICAgIGNvbW1vbisrOwogICAgfQogICAgaWYgKGNvbW1vbiA9PSAxIHx8IChpc1dpbmRvd3MgJiYgY29tbW9uID09IDIpKSB7CiAgICAgIC8vIFRoZSBmaXJzdCBwYXJ0IHdpbGwgYWx3YXlzIGJlIGFuIGVtcHR5IHN0cmluZyBiZWNhdXNlIHRoZQogICAgICAvLyBwYXRocyBhcmUgYWJzb2x1dGUuIE9uIFdpbmRvd3MsIHdlIG11c3QgYWxzbyBjb25zaWRlciBkcml2ZQogICAgICAvLyBsZXR0ZXJzIG9yIGhvc3RuYW1lcy4KICAgICAgaWYgKGJhc2VQYXJ0cy5sZW5ndGggPiBjb21tb24gKyAxKSB7CiAgICAgICAgLy8gQXZvaWQgdXNpbmcgJy4uJyB0byBnbyB0byB0aGUgcm9vdCwgdW5sZXNzIHdlIGFyZSBhbHJlYWR5IHRoZXJlLgogICAgICAgIHJldHVybiB1cmkucGF0aDsKICAgICAgfQogICAgfQogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgZm9yIChpbnQgaSA9IGNvbW1vbiArIDE7IGkgPCBiYXNlUGFydHMubGVuZ3RoOyBpKyspIHsKICAgICAgc2Iud3JpdGUoJy4uLycpOwogICAgfQogICAgZm9yIChpbnQgaSA9IGNvbW1vbjsgaSA8IHVyaVBhcnRzLmxlbmd0aCAtIDE7IGkrKykgewogICAgICBzYi53cml0ZSgnJHt1cmlQYXJ0c1tpXX0vJyk7CiAgICB9CiAgICBzYi53cml0ZSgnJHt1cmlQYXJ0cy5sYXN0fScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQogIHJldHVybiB1cmkudG9TdHJpbmcoKTsKfQpLAE5OPAEfARQBOicvBAEtKCsbBAEpFwQBIhUhDRMGBAEnKB8ZHEBBBgFDHQYBMTMUOR5HEAY1Q0UfK0wZCAYqOhcGOSMGIhoEGQIBMHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS91dGlsL3JlbGF0aXZpemUuZGFydCdzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL2NvbXBpbGVyLmRhcnSbEy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGNvbXBpbGVyOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJzsKCmltcG9ydCAnY29tcGlsZXJfbmV3LmRhcnQnIGFzIG5ld19hcGk7CmltcG9ydCAnc3JjL29sZF90b19uZXdfYXBpLmRhcnQnOwppbXBvcnQgJ3NyYy9vcHRpb25zLmRhcnQnIHNob3cgQ29tcGlsZXJPcHRpb25zOwoKLy8gVW5sZXNzIGV4cGxpY2l0bHkgYWxsb3dlZCwgcGFzc2luZyBbOm51bGw6XSBmb3IgYW55IGFyZ3VtZW50IHRvIHRoZQovLyBtZXRob2RzIG9mIGxpYnJhcnkgd2lsbCByZXN1bHQgaW4gYW4gRXJyb3IgYmVpbmcgdGhyb3duLgoKLy8vIFJldHVybnMgYSBmdXR1cmUgdGhhdCBjb21wbGV0ZXMgdG8gdGhlIHNvdXJjZSBjb3JyZXNwb25kaW5nIHRvIFt1cmldLgovLy8gSWYgYW4gZXhjZXB0aW9uIG9jY3VycywgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCB0aGlzIGV4Y2VwdGlvbi4KLy8vCi8vLyBUaGUgc291cmNlIGNhbiBiZSByZXByZXNlbnRlZCBlaXRoZXIgYXMgYSBbOkxpc3Q8aW50PjpdIG9mIFVURi04IGJ5dGVzIG9yIGFzCi8vLyBhIFtTdHJpbmddLgovLy8KLy8vIFRoZSBmb2xsb3dpbmcgdGV4dCBpcyBub24tbm9ybWF0aXZlOgovLy8KLy8vIEl0IGlzIHJlY29tbWVuZGVkIHRvIHJldHVybiBhIFVURi04IGVuY29kZWQgbGlzdCBvZiBieXRlcyBiZWNhdXNlIHRoZQovLy8gc2Nhbm5lciBpcyBtb3JlIGVmZmljaWVudCBpbiB0aGlzIGNhc2UuIEluIGVpdGhlciBjYXNlLCB0aGUgZGF0YSBzdHJ1Y3R1cmUKLy8vIGlzIGV4cGVjdGVkIHRvIGhvbGQgYSB6ZXJvIGVsZW1lbnQgYXQgdGhlIGxhc3QgcG9zaXRpb24uIElmIHRoaXMgaXMgbm90IHRoZQovLy8gY2FzZSwgdGhlIGVudGlyZSBkYXRhIHN0cnVjdHVyZSBpcyBjb3BpZWQgYmVmb3JlIHNjYW5uaW5nLgp0eXBlZGVmIEZ1dHVyZSAvKiA8U3RyaW5nIHwgTGlzdDxpbnQ+PiAqLyBDb21waWxlcklucHV0UHJvdmlkZXIoVXJpIHVyaSk7CgovLy8gRGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBbQ29tcGlsZXJJbnB1dFByb3ZpZGVyXSBpbnN0ZWFkLgp0eXBlZGVmIEZ1dHVyZTxTdHJpbmc+IFJlYWRTdHJpbmdGcm9tVXJpKFVyaSB1cmkpOwoKLy8vIFJldHVybnMgYW4gW0V2ZW50U2lua10gdGhhdCB3aWxsIHNlcnZlIGFzIGNvbXBpbGVyIG91dHB1dCBmb3IgdGhlIGdpdmVuCi8vLyBjb21wb25lbnQuCi8vLwovLy8gQ29tcG9uZW50cyBhcmUgaWRlbnRpZmllZCBieSBbbmFtZV0gYW5kIFtleHRlbnNpb25dLiBCeSBjb252ZW50aW9uLAovLy8gdGhlIGVtcHR5IHN0cmluZyBbOiIiOl0gd2lsbCByZXByZXNlbnQgdGhlIG1haW4gc2NyaXB0Ci8vLyAoY29ycmVzcG9uZGluZyB0byB0aGUgc2NyaXB0IHBhcmFtZXRlciBvZiBbY29tcGlsZV0pIGV2ZW4gaWYgdGhlCi8vLyBtYWluIHNjcmlwdCBpcyBhIGxpYnJhcnkuIEZvciBsaWJyYXJpZXMgdGhhdCBhcmUgY29tcGlsZWQKLy8vIHNlcGFyYXRlbHksIHRoZSBsaWJyYXJ5IG5hbWUgaXMgdXNlZC4KLy8vCi8vLyBBdCBsZWFzdCB0aGUgZm9sbG93aW5nIGV4dGVuc2lvbnMgY2FuIGJlIGV4cGVjdGVkOgovLy8KLy8vICogImpzIiBmb3IgSmF2YVNjcmlwdCBvdXRwdXQuCi8vLyAqICJqcy5tYXAiIGZvciBzb3VyY2UgbWFwcy4KLy8vICogImRhcnQiIGZvciBEYXJ0IG91dHB1dC4KLy8vICogImRhcnQubWFwIiBmb3Igc291cmNlIG1hcHMuCi8vLwovLy8gQXMgbW9yZSBmZWF0dXJlcyBhcmUgYWRkZWQgdG8gdGhlIGNvbXBpbGVyLCBuZXcgbmFtZXMgYW5kCi8vLyBleHRlbnNpb25zIG1heSBiZSBpbnRyb2R1Y2VkLgp0eXBlZGVmIEV2ZW50U2luazxTdHJpbmc+IENvbXBpbGVyT3V0cHV0UHJvdmlkZXIoU3RyaW5nIG5hbWUsIFN0cmluZyBleHRlbnNpb24pOwoKLy8vIEludm9rZWQgYnkgdGhlIGNvbXBpbGVyIHRvIHJlcG9ydCBkaWFnbm9zdGljcy4gSWYgW3VyaV0gaXMKLy8vIFs6bnVsbDpdLCBzbyBhcmUgW2JlZ2luXSBhbmQgW2VuZF0uIE5vIG90aGVyIGFyZ3VtZW50cyBtYXkgYmUKLy8vIFs6bnVsbDpdLiBJZiBbdXJpXSBpcyBub3QgWzpudWxsOl0sIG5laXRoZXIgYXJlIFtiZWdpbl0gYW5kCi8vLyBbZW5kXS4gW3VyaV0gaW5kaWNhdGVzIHRoZSBjb21waWxhdGlvbiB1bml0IGZyb20gd2hlcmUgdGhlCi8vLyBkaWFnbm9zdGljIG9yaWdpbmF0ZXMuIFtiZWdpbl0gYW5kIFtlbmRdIGFyZSB6ZXJvLWJhc2VkIGNoYXJhY3RlcgovLy8gb2Zmc2V0cyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGNvbXBpbGF0aW9uIHVuaXQuIFttZXNzYWdlXSBpcyB0aGUKLy8vIGRpYWdub3N0aWMgbWVzc2FnZSwgYW5kIFtraW5kXSBpbmRpY2F0ZXMgaW5kaWNhdGVzIHdoYXQga2luZCBvZgovLy8gZGlhZ25vc3RpYyBpdCBpcy4KdHlwZWRlZiB2b2lkIERpYWdub3N0aWNIYW5kbGVyKAogICAgVXJpIHVyaSwgaW50IGJlZ2luLCBpbnQgZW5kLCBTdHJpbmcgbWVzc2FnZSwgRGlhZ25vc3RpYyBraW5kKTsKCi8vLyBJbmZvcm1hdGlvbiByZXN1bHRpbmcgZnJvbSB0aGUgY29tcGlsYXRpb24uCmNsYXNzIENvbXBpbGF0aW9uUmVzdWx0IHsKICAvLy8gYHRydWVgIGlmIHRoZSBjb21waWxhdGlvbiBzdWNjZWVkZWQsIHRoYXQgaXMsIGNvbXBpbGF0aW9uIGRpZG4ndCBmYWlsIGR1ZQogIC8vLyB0byBjb21waWxlLXRpbWUgZXJyb3JzIGFuZC9vciBpbnRlcm5hbCBlcnJvcnMuCiAgZmluYWwgYm9vbCBpc1N1Y2Nlc3M7CgogIC8vLyBUaGUgY29tcGlsZXIgb2JqZWN0IHVzZWQgZm9yIHRoZSBjb21waWxhdGlvbi4KICAvLy8KICAvLy8gTm90ZTogVGhlIHR5cGUgb2YgW2NvbXBpbGVyXSBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQgYW5kIG1heSB2YXJ5LgogIC8vLyBVc2Ugb25seSBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nLgogIGZpbmFsIGNvbXBpbGVyOwoKICBDb21waWxhdGlvblJlc3VsdCh0aGlzLmNvbXBpbGVyLCB7dGhpcy5pc1N1Y2Nlc3M6IHRydWV9KTsKfQoKLy8vIFJldHVybnMgYSBmdXR1cmUgdGhhdCBjb21wbGV0ZXMgdG8gYSBub24tbnVsbCBTdHJpbmcgd2hlbiBbc2NyaXB0XQovLy8gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNvbXBpbGVkLgovLy8KLy8vIFRoZSBjb21waWxlciBvdXRwdXQgaXMgb2J0YWluZWQgYnkgcHJvdmlkaW5nIGFuIFtvdXRwdXRQcm92aWRlcl0uCi8vLwovLy8gSWYgdGhlIGNvbXBpbGF0aW9uIGZhaWxzLCB0aGUgZnV0dXJlJ3MgdmFsdWUgd2lsbCBiZSBbOm51bGw6XSBhbmQKLy8vIFtoYW5kbGVyXSB3aWxsIGhhdmUgYmVlbiBpbnZva2VkIGF0IGxlYXN0IG9uY2Ugd2l0aCBbOmtpbmQgPT0KLy8vIERpYWdub3N0aWMuRVJST1I6XSBvciBbOmtpbmQgPT0gRGlhZ25vc3RpYy5DUkFTSDpdLgovLy8KLy8vIERlcHJlY2F0ZWQ6IGlmIG5vIFtvdXRwdXRQcm92aWRlcl0gaXMgZ2l2ZW4sIHRoZSBmdXR1cmUgY29tcGxldGVzCi8vLyB0byB0aGUgY29tcGlsZWQgc2NyaXB0LiBUaGlzIGJlaGF2aW9yIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlCi8vLyBhcyB0aGUgY29tcGlsZXIgbWF5IGNyZWF0ZSBtdWx0aXBsZSBmaWxlcyB0byBzdXBwb3J0IGxhenkgbG9hZGluZwovLy8gb2YgbGlicmFyaWVzLgpGdXR1cmU8Q29tcGlsYXRpb25SZXN1bHQ+IGNvbXBpbGUoCiAgICBVcmkgc2NyaXB0LAogICAgVXJpIGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmksCiAgICBVcmkgcGFja2FnZVJvb3QsCiAgICBDb21waWxlcklucHV0UHJvdmlkZXIgaW5wdXRQcm92aWRlciwKICAgIERpYWdub3N0aWNIYW5kbGVyIGhhbmRsZXIsCiAgICBbTGlzdDxTdHJpbmc+IG9wdGlvbnMgPSBjb25zdCBbXSwKICAgIENvbXBpbGVyT3V0cHV0UHJvdmlkZXIgb3V0cHV0UHJvdmlkZXIsCiAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50ID0gY29uc3Qge30sCiAgICBVcmkgcGFja2FnZUNvbmZpZ10pIHsKICBDb21waWxlck9wdGlvbnMgY29tcGlsZXJPcHRpb25zID0gQ29tcGlsZXJPcHRpb25zLnBhcnNlKG9wdGlvbnMsCiAgICAgIGxpYnJhcmllc1NwZWNpZmljYXRpb25Vcmk6IGxpYnJhcmllc1NwZWNpZmljYXRpb25VcmkpCiAgICAuLmVudHJ5UG9pbnQgPSBzY3JpcHQKICAgIC4ucGFja2FnZVJvb3QgPSBwYWNrYWdlUm9vdAogICAgLi5wYWNrYWdlQ29uZmlnID0gcGFja2FnZUNvbmZpZwogICAgLi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50OwoKICBuZXdfYXBpLkNvbXBpbGVySW5wdXQgY29tcGlsZXJJbnB1dCA9IG5ldyBMZWdhY3lDb21waWxlcklucHV0KGlucHV0UHJvdmlkZXIpOwogIG5ld19hcGkuQ29tcGlsZXJEaWFnbm9zdGljcyBjb21waWxlckRpYWdub3N0aWNzID0KICAgICAgbmV3IExlZ2FjeUNvbXBpbGVyRGlhZ25vc3RpY3MoaGFuZGxlcik7CiAgbmV3X2FwaS5Db21waWxlck91dHB1dCBjb21waWxlck91dHB1dCA9CiAgICAgIG5ldyBMZWdhY3lDb21waWxlck91dHB1dChvdXRwdXRQcm92aWRlcik7CgogIHJldHVybiBuZXdfYXBpCiAgICAgIC5jb21waWxlKAogICAgICAgICAgY29tcGlsZXJPcHRpb25zLCBjb21waWxlcklucHV0LCBjb21waWxlckRpYWdub3N0aWNzLCBjb21waWxlck91dHB1dCkKICAgICAgLnRoZW4oKG5ld19hcGkuQ29tcGlsYXRpb25SZXN1bHQgcmVzdWx0KSB7CiAgICByZXR1cm4gbmV3IENvbXBpbGF0aW9uUmVzdWx0KHJlc3VsdC5jb21waWxlciwgaXNTdWNjZXNzOiByZXN1bHQuaXNTdWNjZXNzKTsKICB9KTsKfQoKLy8vIEtpbmQgb2YgZGlhZ25vc3RpY3MgdGhhdCB0aGUgY29tcGlsZXIgY2FuIHJlcG9ydC4KY2xhc3MgRGlhZ25vc3RpYyB7CiAgLy8vIEFuIGVycm9yIGFzIGlkZW50aWZpZWQgYnkgdGhlICJEYXJ0IFByb2dyYW1taW5nIExhbmd1YWdlCiAgLy8vIFNwZWNpZmljYXRpb24iIFtodHRwOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL3NwZWMvXS4KICAvLy8KICAvLy8gTm90ZTogdGhlIGNvbXBpbGVyIG1heSBzdGlsbCBwcm9kdWNlIGFuIGV4ZWN1dGFibGUgcmVzdWx0IGFmdGVyCiAgLy8vIHJlcG9ydGluZyBhIGNvbXBpbGF0aW9uIGVycm9yLiBUaGUgc3BlY2lmaWNhdGlvbiBzYXlzOgogIC8vLwogIC8vLyAiQSBjb21waWxlLXRpbWUgZXJyb3IgbXVzdCBiZSByZXBvcnRlZCBieSBhIERhcnQgY29tcGlsZXIgYmVmb3JlCiAgLy8vIHRoZSBlcnJvbmVvdXMgY29kZSBpcyBleGVjdXRlZC4iIGFuZCAiSWYgYSBjb21waWxlLXRpbWUgZXJyb3IKICAvLy8gb2NjdXJzIHdpdGhpbiB0aGUgY29kZSBvZiBhIHJ1bm5pbmcgaXNvbGF0ZSBBLCBBIGlzIGltbWVkaWF0ZWx5CiAgLy8vIHN1c3BlbmRlZC4iCiAgLy8vCiAgLy8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgY29tcGlsZXIgY2FuIGdlbmVyYXRlIGNvZGUgdGhhdCB3aGVuIGV4ZWN1dGVkCiAgLy8vIHRlcm1pbmF0ZXMgZXhlY3V0aW9uLgogIHN0YXRpYyBjb25zdCBEaWFnbm9zdGljIEVSUk9SID0gY29uc3QgRGlhZ25vc3RpYygxLCAnZXJyb3InKTsKCiAgLy8vIEEgd2FybmluZyBhcyBpZGVudGlmaWVkIGJ5IHRoZSAiRGFydCBQcm9ncmFtbWluZyBMYW5ndWFnZQogIC8vLyBTcGVjaWZpY2F0aW9uIiBbaHR0cDovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy9zcGVjL10uCiAgc3RhdGljIGNvbnN0IERpYWdub3N0aWMgV0FSTklORyA9IGNvbnN0IERpYWdub3N0aWMoMiwgJ3dhcm5pbmcnKTsKCiAgLy8vIEFueSBvdGhlciB3YXJuaW5nIHRoYXQgaXMgbm90IGNvdmVyZWQgYnkgW1dBUk5JTkddLgogIHN0YXRpYyBjb25zdCBEaWFnbm9zdGljIEhJTlQgPSBjb25zdCBEaWFnbm9zdGljKDQsICdoaW50Jyk7CgogIC8vLyBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcmVjZWRpbmcgbm9uLWluZm8gZGlhZ25vc3RpYyBmcm9tIHRoZQogIC8vLyBjb21waWxlci4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIGEgZHVwbGljYXRlZCBkZWZpbml0aW9uLiBUaGUgY29tcGlsZXIgZmlyc3QgZW1pdHMgYQogIC8vLyBtZXNzYWdlIGFib3V0IHRoZSBkdXBsaWNhdGVkIGRlZmluaXRpb24sIHRoZW4gZW1pdHMgYW4gaW5mbyBtZXNzYWdlIGFib3V0CiAgLy8vIHRoZSBsb2NhdGlvbiBvZiB0aGUgZXhpc3RpbmcgZGVmaW5pdGlvbi4KICBzdGF0aWMgY29uc3QgRGlhZ25vc3RpYyBJTkZPID0gY29uc3QgRGlhZ25vc3RpYyg4LCAnaW5mbycpOwoKICAvLy8gSW5mb3JtYXRpb25hbCBtZXNzYWdlcyB0aGF0IHNob3VsZG4ndCBiZSBwcmludGVkIHVubGVzcwogIC8vLyBleHBsaWNpdGx5IHJlcXVlc3RlZCBieSB0aGUgdXNlciBvZiBhIGNvbXBpbGVyLgogIHN0YXRpYyBjb25zdCBEaWFnbm9zdGljIFZFUkJPU0VfSU5GTyA9IGNvbnN0IERpYWdub3N0aWMoMTYsICd2ZXJib3NlIGluZm8nKTsKCiAgLy8vIEFuIGludGVybmFsIGVycm9yIGluIHRoZSBjb21waWxlci4KICBzdGF0aWMgY29uc3QgRGlhZ25vc3RpYyBDUkFTSCA9IGNvbnN0IERpYWdub3N0aWMoMzIsICdjcmFzaCcpOwoKICAvLy8gQW4gW2ludF0gcmVwcmVzZW50YXRpb24gb2YgdGhpcyBraW5kLiBUaGUgb3JkaW5hbHMgYXJlIGRlc2lnbmVkCiAgLy8vIHRvIGJlIHVzZWQgYXMgYml0c2V0cy4KICBmaW5hbCBpbnQgb3JkaW5hbDsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoaXMga2luZC4KICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgLy8vIFRoaXMgY29uc3RydWN0b3IgaXMgbm90IHByaXZhdGUgdG8gc3VwcG9ydCB1c2VyLWRlZmluZWQKICAvLy8gZGlhZ25vc3RpYyBraW5kcy4KICBjb25zdCBEaWFnbm9zdGljKHRoaXMub3JkaW5hbCwgdGhpcy5uYW1lKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gbmFtZTsKfQqAsQBOTjwBEgEVASciMAFHPAFKRgRREAQpBEpPUD9KATwzAUwPBEg7RT4qBDcEIiAeIgQ+IlEBP0JAP0ZJRBYgQwEwGlA1GAE0Bk0qEgE8AgFHJARGBEZCOARGSEYSIxAjFSkfJiswGkM8GiAkIQFQNC4qMAEREE8xUAYCATYTPzsGRj0GR0RGEgZIHEABQDtEATo+AU4QBlBQLz4BPjZPASlBAUYdFQEdFQE+GC0BDB0CAR5wYWNrYWdlOmNvbXBpbGVyL2NvbXBpbGVyLmRhcnQqc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvYXBpaW1wbC5kYXJ0ot8vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBsZWdfYXBpaW1wbDsKCmltcG9ydCAnZGFydDphc3luYyc7CmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IHV0Zjg7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JwogICAgc2hvdyBnZXRTdXBwb3J0ZWRMaWJyYXJ5TmFtZXM7CgppbXBvcnQgJy4uL2NvbXBpbGVyX25ldy5kYXJ0JyBhcyBhcGk7CmltcG9ydCAnY29tbW9uL3Rhc2tzLmRhcnQnIHNob3cgR2VuZXJpY1Rhc2ssIE1lYXN1cmVyOwppbXBvcnQgJ2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICdjb21waWxlci5kYXJ0JzsKaW1wb3J0ICdkaWFnbm9zdGljcy9tZXNzYWdlcy5kYXJ0JyBzaG93IE1lc3NhZ2U7CmltcG9ydCAnZW52aXJvbm1lbnQuZGFydCc7CmltcG9ydCAnaW8vc291cmNlX2ZpbGUuZGFydCc7CmltcG9ydCAnb3B0aW9ucy5kYXJ0JyBzaG93IENvbXBpbGVyT3B0aW9uczsKCi8vLyBJbXBsZW1lbnRzIHRoZSBbQ29tcGlsZXJdIHVzaW5nIGEgW2FwaS5Db21waWxlcklucHV0XSBmb3Igc3VwcGx5aW5nIHRoZQovLy8gc291cmNlcy4KY2xhc3MgQ29tcGlsZXJJbXBsIGV4dGVuZHMgQ29tcGlsZXIgewogIEBvdmVycmlkZQogIGZpbmFsIE1lYXN1cmVyIG1lYXN1cmVyOwogIEBvdmVycmlkZQogIGFwaS5Db21waWxlcklucHV0IHByb3ZpZGVyOwogIGFwaS5Db21waWxlckRpYWdub3N0aWNzIGhhbmRsZXI7CgogIEdlbmVyaWNUYXNrIHVzZXJIYW5kbGVyVGFzazsKICBHZW5lcmljVGFzayB1c2VyUHJvdmlkZXJUYXNrOwoKICBDb21waWxlckltcGwodGhpcy5wcm92aWRlciwgYXBpLkNvbXBpbGVyT3V0cHV0IG91dHB1dFByb3ZpZGVyLCB0aGlzLmhhbmRsZXIsCiAgICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAgICB7TWFrZVJlcG9ydGVyRnVuY3Rpb24gbWFrZVJlcG9ydGVyfSkKICAgICAgLy8gTk9URTogYWxsb2NhdGluZyBtZWFzdXJlciBpcyBkb25lIHVwZnJvbnQgdG8gZW5zdXJlIHRoZSB3YWxsY2xvY2sgaXMKICAgICAgLy8gc3RhcnRlZCBiZWZvcmUgb3RoZXIgY29tcHV0YXRpb25zLgogICAgICA6IG1lYXN1cmVyID0gbmV3IE1lYXN1cmVyKGVuYWJsZVRhc2tNZWFzdXJlbWVudHM6IG9wdGlvbnMudmVyYm9zZSksCiAgICAgICAgc3VwZXIoCiAgICAgICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsCiAgICAgICAgICAgIG91dHB1dFByb3ZpZGVyOiBvdXRwdXRQcm92aWRlciwKICAgICAgICAgICAgZW52aXJvbm1lbnQ6IG5ldyBfRW52aXJvbm1lbnQob3B0aW9ucy5lbnZpcm9ubWVudCksCiAgICAgICAgICAgIG1ha2VSZXBvcnRlcjogbWFrZVJlcG9ydGVyKSB7CiAgICB0YXNrcy5hZGRBbGwoWwogICAgICB1c2VySGFuZGxlclRhc2sgPSBuZXcgR2VuZXJpY1Rhc2soJ0RpYWdub3N0aWMgaGFuZGxlcicsIG1lYXN1cmVyKSwKICAgICAgdXNlclByb3ZpZGVyVGFzayA9IG5ldyBHZW5lcmljVGFzaygnSW5wdXQgcHJvdmlkZXInLCBtZWFzdXJlciksCiAgICBdKTsKICB9CgogIHZvaWQgbG9nKG1lc3NhZ2UpIHsKICAgIGNhbGxVc2VySGFuZGxlcigKICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsLCBtZXNzYWdlLCBhcGkuRGlhZ25vc3RpYy5WRVJCT1NFX0lORk8pOwogIH0KCiAgRnV0dXJlIHNldHVwU2RrKCkgewogICAgdmFyIGZ1dHVyZSA9IG5ldyBGdXR1cmUudmFsdWUobnVsbCk7CiAgICBfRW52aXJvbm1lbnQgZW52ID0gZW52aXJvbm1lbnQ7CiAgICBpZiAoZW52LnN1cHBvcnRlZExpYnJhcmllcyA9PSBudWxsKSB7CiAgICAgIGZ1dHVyZSA9IGZ1dHVyZS50aGVuKChfKSB7CiAgICAgICAgVXJpIHNwZWNpZmljYXRpb25VcmkgPSBvcHRpb25zLmxpYnJhcmllc1NwZWNpZmljYXRpb25Vcmk7CiAgICAgICAgcmV0dXJuIHByb3ZpZGVyLnJlYWRGcm9tVXJpKHNwZWNpZmljYXRpb25VcmkpLnRoZW4oKGFwaS5JbnB1dCBzcGVjKSB7CiAgICAgICAgICBTdHJpbmcganNvbiA9IG51bGw7CiAgICAgICAgICAvLyBUT0RPKHNpZ211bmQpOiBzaW1wbGlmeSB0aGlzLCB3ZSBoYXZlIHNvbWUgQVBJIGluY29uc2lzdGVuY2llcyB3aGVuCiAgICAgICAgICAvLyBvdXIgaW50ZXJuYWwgaW5wdXQgYWRkcyBhIHRlcm1pbmF0aW5nIHplcm8uCiAgICAgICAgICBpZiAoc3BlYyBpcyBTb3VyY2VGaWxlKSB7CiAgICAgICAgICAgIGpzb24gPSBzcGVjLnNsb3dUZXh0KCk7CiAgICAgICAgICB9IGVsc2UgaWYgKHNwZWMgaXMgQmluYXJ5KSB7CiAgICAgICAgICAgIGpzb24gPSB1dGY4LmRlY29kZShzcGVjLmRhdGEpOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IHdvdWxkIGJlIG5pY2UgdG8gZnJvbnQtbG9hZCBzb21lIG9mIHRoZSBDRkUgb3B0aW9uCiAgICAgICAgICAvLyBwcm9jZXNzaW5nIGFuZCBwYXJzZSB0aGlzIC5qc29uIGZpbGUgb25seSBvbmNlLgogICAgICAgICAgZW52LnN1cHBvcnRlZExpYnJhcmllcyA9IGdldFN1cHBvcnRlZExpYnJhcnlOYW1lcyhzcGVjaWZpY2F0aW9uVXJpLAogICAgICAgICAgICAgICAgICBqc29uLCBvcHRpb25zLmNvbXBpbGVGb3JTZXJ2ZXIgPyAiZGFydDJqc19zZXJ2ZXIiIDogImRhcnQyanMiKQogICAgICAgICAgICAgIC50b1NldCgpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0KICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoaXMgZG9lcyBub3QgYXBwbHkgYW55bW9yZS4KICAgIC8vIFRoZSBpbmNyZW1lbnRhbCBjb21waWxlciBzZXRzIHVwIHRoZSBzZGsgYmVmb3JlIHJ1bi4KICAgIC8vIFRoZXJlZm9yZSB0aGlzIHdpbGwgYmUgY2FsbGVkIGEgc2Vjb25kIHRpbWUuCiAgICByZXR1cm4gZnV0dXJlOwogIH0KCiAgQG92ZXJyaWRlCiAgRnV0dXJlPGJvb2w+IHJ1bihVcmkgdXJpKSB7CiAgICBEdXJhdGlvbiBzZXR1cER1cmF0aW9uID0gbWVhc3VyZXIuZWxhcHNlZFdhbGxDbG9jazsKICAgIHJldHVybiBzZWxmVGFzay5tZWFzdXJlU3VidGFzaygiaW1wbC5ydW4iLCAoKSB7CiAgICAgIHJldHVybiBzZXR1cFNkaygpLnRoZW4oKF8pIHsKICAgICAgICByZXR1cm4gc3VwZXIucnVuKHVyaSk7CiAgICAgIH0pLnRoZW4oKGJvb2wgc3VjY2VzcykgewogICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHsKICAgICAgICAgIFN0cmluZ0J1ZmZlciB0aW1pbmdzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICAgICAgY29tcHV0ZVRpbWluZ3Moc2V0dXBEdXJhdGlvbiwgdGltaW5ncyk7CiAgICAgICAgICBsb2coIiR0aW1pbmdzIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzdWNjZXNzOwogICAgICB9KTsKICAgIH0pOwogIH0KCiAgU3RyaW5nIF9mb3JtYXRNcyhpbnQgbXMpIHsKICAgIHJldHVybiAobXMgLyAxMDAwKS50b1N0cmluZ0FzRml4ZWQoMykgKyAncyc7CiAgfQoKICB2b2lkIGNvbXB1dGVUaW1pbmdzKER1cmF0aW9uIHNldHVwRHVyYXRpb24sIFN0cmluZ0J1ZmZlciB0aW1pbmdzKSB7CiAgICB0aW1pbmdzLndyaXRlbG4oIlRpbWluZ3M6Iik7CiAgICBEdXJhdGlvbiB0b3RhbER1cmF0aW9uID0gbWVhc3VyZXIuZWxhcHNlZFdhbGxDbG9jazsKICAgIER1cmF0aW9uIGFzeW5jRHVyYXRpb24gPSBtZWFzdXJlci5lbGFwc2VkQXN5bmNXYWxsQ2xvY2s7CiAgICBEdXJhdGlvbiBjdW11bGF0ZWREdXJhdGlvbiA9IER1cmF0aW9uLnplcm87CiAgICBMaXN0PF9UaW1pbmdEYXRhPiB0aW1pbmdEYXRhID0gW107CiAgICBmb3IgKGZpbmFsIHRhc2sgaW4gdGFza3MpIHsKICAgICAgU3RyaW5nIHJ1bm5pbmcgPSB0YXNrLmlzUnVubmluZyA/ICIqIiA6ICIgIjsKICAgICAgRHVyYXRpb24gZHVyYXRpb24gPSB0YXNrLmR1cmF0aW9uOwogICAgICBpZiAoZHVyYXRpb24gIT0gRHVyYXRpb24uemVybykgewogICAgICAgIGN1bXVsYXRlZER1cmF0aW9uICs9IGR1cmF0aW9uOwogICAgICAgIGludCBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5pbk1pbGxpc2Vjb25kczsKICAgICAgICB0aW1pbmdEYXRhLmFkZChfVGltaW5nRGF0YSgnICAgJHJ1bm5pbmcke3Rhc2submFtZX06JywgbWlsbGlzZWNvbmRzLAogICAgICAgICAgICBtaWxsaXNlY29uZHMgKiAxMDAgLyB0b3RhbER1cmF0aW9uLmluTWlsbGlzZWNvbmRzKSk7CiAgICAgICAgZm9yIChTdHJpbmcgc3VidGFzayBpbiB0YXNrLnN1YnRhc2tzKSB7CiAgICAgICAgICBpbnQgc3VidGltZSA9IHRhc2suZ2V0U3VidGFza1RpbWUoc3VidGFzayk7CiAgICAgICAgICBTdHJpbmcgcnVubmluZyA9IHRhc2suZ2V0U3VidGFza0lzUnVubmluZyhzdWJ0YXNrKSA/ICIqIiA6ICIgIjsKICAgICAgICAgIHRpbWluZ0RhdGEuYWRkKF9UaW1pbmdEYXRhKCcgICAkcnVubmluZyR7dGFzay5uYW1lfSA+ICRzdWJ0YXNrOicsCiAgICAgICAgICAgICAgc3VidGltZSwgc3VidGltZSAqIDEwMCAvIHRvdGFsRHVyYXRpb24uaW5NaWxsaXNlY29uZHMpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGludCBsb25nZXN0RGVzY3JpcHRpb24gPSB0aW1pbmdEYXRhCiAgICAgICAgLm1hcCgoZCkgPT4gZC5kZXNjcmlwdGlvbi5sZW5ndGgpCiAgICAgICAgLmZvbGQoMCwgKGEsIGIpID0+IGEgPCBiID8gYiA6IGEpOwogICAgZm9yICh2YXIgZGF0YSBpbiB0aW1pbmdEYXRhKSB7CiAgICAgIHZhciBtcyA9IF9mb3JtYXRNcyhkYXRhLm1pbGxpc2Vjb25kcyk7CiAgICAgIHZhciBwYWRkaW5nID0KICAgICAgICAgICIgIiAqIChsb25nZXN0RGVzY3JpcHRpb24gKyAxMCAtIGRhdGEuZGVzY3JpcHRpb24ubGVuZ3RoIC0gbXMubGVuZ3RoKTsKICAgICAgdmFyIHBlcmNlbnRQYWRkaW5nID0gZGF0YS5wZXJjZW50IDwgMTAgPyAiICIgOiAiIjsKICAgICAgdGltaW5ncy53cml0ZWxuKCcke2RhdGEuZGVzY3JpcHRpb259JHBhZGRpbmcgJG1zICcKICAgICAgICAgICckcGVyY2VudFBhZGRpbmcoJHtkYXRhLnBlcmNlbnQudG9TdHJpbmdBc0ZpeGVkKDEpfSUpJyk7CiAgICB9CiAgICBEdXJhdGlvbiB1bmFjY291bnRlZER1cmF0aW9uID0KICAgICAgICB0b3RhbER1cmF0aW9uIC0gY3VtdWxhdGVkRHVyYXRpb24gLSBzZXR1cER1cmF0aW9uIC0gYXN5bmNEdXJhdGlvbjsKICAgIGRvdWJsZSBwZXJjZW50ID0KICAgICAgICB1bmFjY291bnRlZER1cmF0aW9uLmluTWlsbGlzZWNvbmRzICogMTAwIC8gdG90YWxEdXJhdGlvbi5pbk1pbGxpc2Vjb25kczsKICAgIHRpbWluZ3Mud3JpdGUoCiAgICAgICAgJyAgICBUb3RhbCBjb21waWxlLXRpbWUgJHtfZm9ybWF0TXModG90YWxEdXJhdGlvbi5pbk1pbGxpc2Vjb25kcyl9OycKICAgICAgICAnIHNldHVwICR7X2Zvcm1hdE1zKHNldHVwRHVyYXRpb24uaW5NaWxsaXNlY29uZHMpfTsnCiAgICAgICAgJyBhc3luYyAke19mb3JtYXRNcyhhc3luY0R1cmF0aW9uLmluTWlsbGlzZWNvbmRzKX07JwogICAgICAgICcgdW5hY2NvdW50ZWQgJHtfZm9ybWF0TXModW5hY2NvdW50ZWREdXJhdGlvbi5pbk1pbGxpc2Vjb25kcyl9JwogICAgICAgICcgKCR7cGVyY2VudC50b1N0cmluZ0FzRml4ZWQoMil9JSknKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVwb3J0RGlhZ25vc3RpYyhEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlLAogICAgICBMaXN0PERpYWdub3N0aWNNZXNzYWdlPiBpbmZvcywgYXBpLkRpYWdub3N0aWMga2luZCkgewogICAgX3JlcG9ydERpYWdub3N0aWNNZXNzYWdlKG1lc3NhZ2UsIGtpbmQpOwogICAgZm9yIChEaWFnbm9zdGljTWVzc2FnZSBpbmZvIGluIGluZm9zKSB7CiAgICAgIF9yZXBvcnREaWFnbm9zdGljTWVzc2FnZShpbmZvLCBhcGkuRGlhZ25vc3RpYy5JTkZPKTsKICAgIH0KICB9CgogIHZvaWQgX3JlcG9ydERpYWdub3N0aWNNZXNzYWdlKAogICAgICBEaWFnbm9zdGljTWVzc2FnZSBkaWFnbm9zdGljTWVzc2FnZSwgYXBpLkRpYWdub3N0aWMga2luZCkgewogICAgLy8gWzpzcGFuLnVyaTpdIG1pZ2h0IGJlIFs6bnVsbDpdIGluIGNhc2Ugb2YgYSBbU2NyaXB0XSB3aXRoIG5vIFt1cmldLiBGb3IKICAgIC8vIGluc3RhbmNlIGluIHRoZSBbVHlwZXNdIGNvbnN0cnVjdG9yIGluIHR5cGVjaGVja2VyLmRhcnQuCiAgICBTb3VyY2VTcGFuIHNwYW4gPSBkaWFnbm9zdGljTWVzc2FnZS5zb3VyY2VTcGFuOwogICAgTWVzc2FnZSBtZXNzYWdlID0gZGlhZ25vc3RpY01lc3NhZ2UubWVzc2FnZTsKICAgIGlmIChzcGFuID09IG51bGwgfHwgc3Bhbi51cmkgPT0gbnVsbCkgewogICAgICBjYWxsVXNlckhhbmRsZXIobWVzc2FnZSwgbnVsbCwgbnVsbCwgbnVsbCwgJyRtZXNzYWdlJywga2luZCk7CiAgICB9IGVsc2UgewogICAgICBjYWxsVXNlckhhbmRsZXIoCiAgICAgICAgICBtZXNzYWdlLCBzcGFuLnVyaSwgc3Bhbi5iZWdpbiwgc3Bhbi5lbmQsICckbWVzc2FnZScsIGtpbmQpOwogICAgfQogIH0KCiAgdm9pZCBjYWxsVXNlckhhbmRsZXIoTWVzc2FnZSBtZXNzYWdlLCBVcmkgdXJpLCBpbnQgYmVnaW4sIGludCBlbmQsCiAgICAgIFN0cmluZyB0ZXh0LCBhcGkuRGlhZ25vc3RpYyBraW5kKSB7CiAgICB0cnkgewogICAgICB1c2VySGFuZGxlclRhc2subWVhc3VyZSgoKSB7CiAgICAgICAgaGFuZGxlci5yZXBvcnQobWVzc2FnZSwgdXJpLCBiZWdpbiwgZW5kLCB0ZXh0LCBraW5kKTsKICAgICAgfSk7CiAgICB9IGNhdGNoIChleCwgcykgewogICAgICByZXBvcnRDcmFzaEluVXNlckNvZGUoJ1VuY2F1Z2h0IGV4Y2VwdGlvbiBpbiBkaWFnbm9zdGljIGhhbmRsZXInLCBleCwgcyk7CiAgICAgIHJldGhyb3c7CiAgICB9CiAgfQoKICBGdXR1cmU8YXBpLklucHV0PiBjYWxsVXNlclByb3ZpZGVyKFVyaSB1cmksIGFwaS5JbnB1dEtpbmQgaW5wdXRLaW5kKSB7CiAgICB0cnkgewogICAgICByZXR1cm4gdXNlclByb3ZpZGVyVGFzawogICAgICAgICAgLm1lYXN1cmVJbygoKSA9PiBwcm92aWRlci5yZWFkRnJvbVVyaSh1cmksIGlucHV0S2luZDogaW5wdXRLaW5kKSk7CiAgICB9IGNhdGNoIChleCwgcykgewogICAgICByZXBvcnRDcmFzaEluVXNlckNvZGUoJ1VuY2F1Z2h0IGV4Y2VwdGlvbiBpbiBpbnB1dCBwcm92aWRlcicsIGV4LCBzKTsKICAgICAgcmV0aHJvdzsKICAgIH0KICB9Cn0KCmNsYXNzIF9FbnZpcm9ubWVudCBpbXBsZW1lbnRzIEVudmlyb25tZW50IHsKICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGRlZmluaXRpb25zOwogIE1hcDxTdHJpbmcsIFN0cmluZz4gX2NvbXBsZXRlTWFwOwogIFNldDxTdHJpbmc+IHN1cHBvcnRlZExpYnJhcmllczsKCiAgX0Vudmlyb25tZW50KHRoaXMuZGVmaW5pdGlvbnMpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmFsdWVPZihTdHJpbmcgbmFtZSkgewogICAgaWYgKF9jb21wbGV0ZU1hcCAhPSBudWxsKSByZXR1cm4gX2NvbXBsZXRlTWFwW25hbWVdOwogICAgdmFyIHJlc3VsdCA9IGRlZmluaXRpb25zW25hbWVdOwogICAgaWYgKHJlc3VsdCAhPSBudWxsIHx8IGRlZmluaXRpb25zLmNvbnRhaW5zS2V5KG5hbWUpKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKCFuYW1lLnN0YXJ0c1dpdGgoX2RhcnRMaWJyYXJ5RW52aXJvbm1lbnRQcmVmaXgpKSByZXR1cm4gbnVsbDsKCiAgICBTdHJpbmcgbGlicmFyeU5hbWUgPSBuYW1lLnN1YnN0cmluZyhfZGFydExpYnJhcnlFbnZpcm9ubWVudFByZWZpeC5sZW5ndGgpOwoKICAgIC8vIFByaXZhdGUgbGlicmFyaWVzIGFyZSBub3QgZXhwb3NlZCB0byB0aGUgdXNlcnMuCiAgICBpZiAobGlicmFyeU5hbWUuc3RhcnRzV2l0aCgiXyIpKSByZXR1cm4gbnVsbDsKICAgIGlmIChzdXBwb3J0ZWRMaWJyYXJpZXMuY29udGFpbnMobGlicmFyeU5hbWUpKSByZXR1cm4gInRydWUiOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8U3RyaW5nLCBTdHJpbmc+IHRvTWFwKCkgewogICAgaWYgKF9jb21wbGV0ZU1hcCA9PSBudWxsKSB7CiAgICAgIF9jb21wbGV0ZU1hcCA9IG5ldyBNYXA8U3RyaW5nLCBTdHJpbmc+LmZyb20oZGVmaW5pdGlvbnMpOwogICAgICBmb3IgKFN0cmluZyBsaWJyYXJ5TmFtZSBpbiBzdXBwb3J0ZWRMaWJyYXJpZXMpIHsKICAgICAgICBpZiAoIWxpYnJhcnlOYW1lLnN0YXJ0c1dpdGgoIl8iKSkgewogICAgICAgICAgU3RyaW5nIGtleSA9ICcke19kYXJ0TGlicmFyeUVudmlyb25tZW50UHJlZml4fSR7bGlicmFyeU5hbWV9JzsKICAgICAgICAgIGlmICghZGVmaW5pdGlvbnMuY29udGFpbnNLZXkoa2V5KSkgewogICAgICAgICAgICBfY29tcGxldGVNYXBba2V5XSA9ICJ0cnVlIjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfY29tcGxldGVNYXA7CiAgfQp9CgovLy8gRm9yIGV2ZXJ5ICdkYXJ0OicgbGlicmFyeSwgYSBjb3JyZXNwb25kaW5nIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHNldAovLy8gdG8gInRydWUiLiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGUncyBuYW1lIGlzIHRoZSBjb25jYXRlbmF0aW9uIG9mCi8vLyB0aGlzIHByZWZpeCBhbmQgdGhlIG5hbWUgKHdpdGhvdXQgdGhlICdkYXJ0OicuCi8vLwovLy8gRm9yIGV4YW1wbGUgJ2RhcnQ6aHRtbCcgaGFzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAnZGFydC5saWJyYXJ5Lmh0bWwnIHNldAovLy8gdG8gInRydWUiLgpjb25zdCBTdHJpbmcgX2RhcnRMaWJyYXJ5RW52aXJvbm1lbnRQcmVmaXggPSAnZGFydC5saWJyYXJ5Lic7CgpjbGFzcyBfVGltaW5nRGF0YSB7CiAgZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uOwogIGZpbmFsIGludCBtaWxsaXNlY29uZHM7CiAgZmluYWwgZG91YmxlIHBlcmNlbnQ7CgogIF9UaW1pbmdEYXRhKHRoaXMuZGVzY3JpcHRpb24sIHRoaXMubWlsbGlzZWNvbmRzLCB0aGlzLnBlcmNlbnQpOwp9CoD9AE5OPAEVARUhATkjASY3FhgxGx4sAUwNJgwbDB4jAR8gAU8fK04sSg8eLEAqE0lGCAQBFhVHBAEWKSQqIUJOHlE5JCQnKwwBTz1OURgMCgY5PDQTBAEMHjg0Ix8fHzUyGwoYCggEAR0xBAFGITg9MCcgMyknJzRNQTA2SkxHCggGKCorIy0UUTk5QwYjSxVRE009PUguBAEMMzwtLDsGBAEhQk9ANDEsRA0XRgYEAUUqCiM+ChZQDwYEAUkKHk0WTA8GBAIBLCkkIgEiAQwgOSRIRgFPATcyQREEAQwgIEA3LEkvKAwKCAYZBAIBS0czBFEPPgEUHBoYAUICASFwYWNrYWdlOmNvbXBpbGVyL3NyYy9hcGlpbXBsLmRhcnQpc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvY29sb3JzLmRhcnSE7i8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY29sb3JzOwoKLy8gU2VlIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQU5TSV9lc2NhcGVfY29kZSNDU0lfY29kZXMKY29uc3QgU3RyaW5nIFJFU0VUID0gJ1x1MDAxYlswbSc7CgovLyBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9BTlNJX2VzY2FwZV9jb2RlI0NvbG9ycwpjb25zdCBTdHJpbmcgQkxBQ0tfQ09MT1IgPSAnXHUwMDFiWzMwbSc7CmNvbnN0IFN0cmluZyBSRURfQ09MT1IgPSAnXHUwMDFiWzMxbSc7CmNvbnN0IFN0cmluZyBHUkVFTl9DT0xPUiA9ICdcdTAwMWJbMzJtJzsKY29uc3QgU3RyaW5nIFlFTExPV19DT0xPUiA9ICdcdTAwMWJbMzNtJzsKY29uc3QgU3RyaW5nIEJMVUVfQ09MT1IgPSAnXHUwMDFiWzM0bSc7CmNvbnN0IFN0cmluZyBNQUdFTlRBX0NPTE9SID0gJ1x1MDAxYlszNW0nOwpjb25zdCBTdHJpbmcgQ1lBTl9DT0xPUiA9ICdcdTAwMWJbMzZtJzsKY29uc3QgU3RyaW5nIFdISVRFX0NPTE9SID0gJ1x1MDAxYlszN20nOwoKU3RyaW5nIHdyYXAoU3RyaW5nIHN0cmluZywgU3RyaW5nIGNvbG9yKSA9PiAiJHtjb2xvcn0kc3RyaW5nJHtSRVNFVH0iOwoKU3RyaW5nIGJsYWNrKFN0cmluZyBzdHJpbmcpID0+IHdyYXAoc3RyaW5nLCBCTEFDS19DT0xPUik7ClN0cmluZyByZWQoU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIFJFRF9DT0xPUik7ClN0cmluZyBncmVlbihTdHJpbmcgc3RyaW5nKSA9PiB3cmFwKHN0cmluZywgR1JFRU5fQ09MT1IpOwpTdHJpbmcgeWVsbG93KFN0cmluZyBzdHJpbmcpID0+IHdyYXAoc3RyaW5nLCBZRUxMT1dfQ09MT1IpOwpTdHJpbmcgYmx1ZShTdHJpbmcgc3RyaW5nKSA9PiB3cmFwKHN0cmluZywgQkxVRV9DT0xPUik7ClN0cmluZyBtYWdlbnRhKFN0cmluZyBzdHJpbmcpID0+IHdyYXAoc3RyaW5nLCBNQUdFTlRBX0NPTE9SKTsKU3RyaW5nIGN5YW4oU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIENZQU5fQ09MT1IpOwpTdHJpbmcgd2hpdGUoU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIFdISVRFX0NPTE9SKTsKHwBOTjwBGAE/IgE8KScpKigrKCkBRwE6Njo8OD44OgEgcGFja2FnZTpjb21waWxlci9zcmMvY29sb3JzLmRhcnQxc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW8vc291cmNlX2ZpbGUuZGFydKLHLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5pby5zb3VyY2VfZmlsZTsKCmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IHV0Zjg7CmltcG9ydCAnZGFydDptYXRoJzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnIHNob3cgVWludDhMaXN0OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMga2VybmVsIHNob3cgTG9jYXRpb24sIFNvdXJjZTsKCmltcG9ydCAnbG9jYXRpb25fcHJvdmlkZXIuZGFydCcgc2hvdyBMb2NhdGlvblByb3ZpZGVyOwppbXBvcnQgJy4uLy4uL2NvbXBpbGVyX25ldy5kYXJ0JzsKCi8vLyBSZXByZXNlbnRzIGEgZmlsZSBvZiBzb3VyY2UgY29kZS4gVGhlIGNvbnRlbnQgY2FuIGJlIGVpdGhlciBhIFtTdHJpbmddIG9yCi8vLyBhIFVURi04IGVuY29kZWQgW0xpc3Q8aW50Pl0gb2YgYnl0ZXMuCmFic3RyYWN0IGNsYXNzIFNvdXJjZUZpbGU8VD4gaW1wbGVtZW50cyBJbnB1dDxUPiwgTG9jYXRpb25Qcm92aWRlciB7CiAgLy8vIFRoZSBhYnNvbHV0ZSBVUkkgb2YgdGhlIHNvdXJjZSBmaWxlLgogIEBvdmVycmlkZQogIFVyaSBnZXQgdXJpOwoKICBAb3ZlcnJpZGUKICBJbnB1dEtpbmQgZ2V0IGlucHV0S2luZCA9PiBJbnB1dEtpbmQuVVRGODsKCiAga2VybmVsLlNvdXJjZSBjYWNoZWRLZXJuZWxTb3VyY2U7CgogIGtlcm5lbC5Tb3VyY2UgZ2V0IGtlcm5lbFNvdXJjZSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IFNvdXJjZSBvYmplY3QsCiAgICAvLyB3ZSBzaG91bGQgdXNlIHRoZSBvbmUgcHJvdmlkZWQgYnkgdGhlIGZyb250LWVuZC4KICAgIHJldHVybiBjYWNoZWRLZXJuZWxTb3VyY2UgPz89IG5ldyBrZXJuZWwuU291cmNlKAogICAgICAgIGxpbmVTdGFydHMsCiAgICAgICAgc2xvd1V0ZjhaZXJvVGVybWluYXRlZEJ5dGVzKCksCiAgICAgICAgdXJpIC8qIFRPRE8oamVuc2opOiBXaGF0IGlzIHRoZSBpbXBvcnQgVVJJPyAqLywKICAgICAgICB1cmkpCiAgICAgIC4uY2FjaGVkVGV4dCA9IHNsb3dUZXh0KCk7CiAgfQoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIGZpbGUuCiAgLy8vCiAgLy8vIFRoaXMgaXMgW3VyaV0sIG1heWJlIHJlbGF0aXZpemVkIHRvIGEgbW9yZSBodW1hbi1yZWFkYWJsZSBmb3JtLgogIFN0cmluZyBnZXQgZmlsZW5hbWUgPT4gdXJpLnRvU3RyaW5nKCk7CgogIC8vLyBUaGUgdGV4dCBjb250ZW50IG9mIHRoZSBmaWxlIHJlcHJlc2VudGVkIGFzIGEgU3RyaW5nCiAgU3RyaW5nIHNsb3dUZXh0KCk7CgogIC8vLyBUaGUgY29udGVudCBvZiB0aGUgZmlsZSByZXByZXNlbnRlZCBhcyBhIFVURi04IGVuY29kZWQgW0xpc3Q8aW50Pl0sCiAgLy8vIHRlcm1pbmF0ZWQgd2l0aCBhIHRyYWlsaW5nIDAgYnl0ZS4KICBMaXN0PGludD4gc2xvd1V0ZjhaZXJvVGVybWluYXRlZEJ5dGVzKCk7CgogIC8vLyBUaGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBzb3VyY2UgZmlsZSwgaS5lLiwKICAvLy8gZXF1aXZhbGVudCB0byBbOnNsb3dUZXh0KCkubGVuZ3RoOl0sIGJ1dCBmYXN0ZXIuCiAgaW50IGdldCBsZW5ndGg7CgogIC8vLyBTZXRzIHRoZSBzdHJpbmcgbGVuZ3RoIG9mIHRoaXMgc291cmNlIGZpbGUuIEZvciBzb3VyY2UgZmlsZXMgYmFzZWQgb24KICAvLy8gVVRGLTggYnl0ZSBhcnJheXMsIHRoZSBzdHJpbmcgbGVuZ3RoIGlzIGNvbXB1dGVkIGFuZCBhc3NpZ25lZCBieSB0aGUKICAvLy8gc2Nhbm5lci4KICBzZXQgbGVuZ3RoKGludCB2KTsKCiAgLy8vIEEgbWFwIGZyb20gbGluZSBudW1iZXJzIHRvIG9mZnNldHMgaW4gdGhlIHN0cmluZyB0ZXh0IHJlcHJlc2VudGF0aW9uIG9mCiAgLy8vIHRoaXMgc291cmNlIGZpbGUuCiAgTGlzdDxpbnQ+IGdldCBsaW5lU3RhcnRzIHsKICAgIGlmIChsaW5lU3RhcnRzQ2FjaGUgPT0gbnVsbCkgewogICAgICAvLyBXaGVuIHJlcG9ydGluZyBlcnJvcnMgZHVyaW5nIHNjYW5uaW5nLCB0aGUgbGluZSBudW1iZXJzIGFyZSBub3QgeWV0CiAgICAgIC8vIGF2YWlsYWJsZSBhbmQgbmVlZCB0byBiZSBjb21wdXRlZCB1c2luZyB0aGlzIHNsb3cgcGF0aC4KICAgICAgbGluZVN0YXJ0c0NhY2hlID0gbGluZVN0YXJ0c0Zyb21TdHJpbmcoc2xvd1RleHQoKSk7CiAgICB9CiAgICByZXR1cm4gbGluZVN0YXJ0c0NhY2hlOwogIH0KCiAgLy8vIFNldHMgdGhlIGxpbmUgbnVtYmVycyBtYXAgZm9yIHRoaXMgc291cmNlIGZpbGUuIFRoaXMgbWFwIGlzIGNvbXB1dGVkIGFuZAogIC8vLyBhc3NpZ25lZCBieSB0aGUgc2Nhbm5lciwgYXZvaWRpbmcgYSBzZXBhcmF0ZSB0cmF2ZXJzYWwgb2YgdGhlIHNvdXJjZSBmaWxlLgogIC8vLwogIC8vLyBUaGUgbWFwIGNvbnRhaW5zIG9uZSBhZGRpdGlvbmFsIGVudHJ5IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIGFzIGlmIHRoZQogIC8vLyBzb3VyY2UgZmlsZSBoYWQgb25lIG1vcmUgZW1wdHkgbGluZSBhdCB0aGUgZW5kLiBUaGlzIHNpbXBsaWZpZXMgdGhlIGJpbmFyeQogIC8vLyBzZWFyY2ggaW4gW2dldExvY2F0aW9uXS4KICBzZXQgbGluZVN0YXJ0cyhMaXN0PGludD4gdikgPT4gbGluZVN0YXJ0c0NhY2hlID0gdjsKCiAgTGlzdDxpbnQ+IGxpbmVTdGFydHNDYWNoZTsKCiAgTGlzdDxpbnQ+IGxpbmVTdGFydHNGcm9tU3RyaW5nKFN0cmluZyB0ZXh0KSB7CiAgICB2YXIgc3RhcnRzID0gWzBdOwogICAgdmFyIGluZGV4ID0gMDsKICAgIHdoaWxlIChpbmRleCA8IHRleHQubGVuZ3RoKSB7CiAgICAgIGluZGV4ID0gdGV4dC5pbmRleE9mKCdcbicsIGluZGV4KSArIDE7CiAgICAgIGlmIChpbmRleCA8PSAwKSBicmVhazsKICAgICAgc3RhcnRzLmFkZChpbmRleCk7CiAgICB9CiAgICBzdGFydHMuYWRkKHRleHQubGVuZ3RoICsgMSk7IC8vIE9uZSBhZGRpdGlvbmFsIGxpbmUgc3RhcnQgYXQgdGhlIGVuZC4KICAgIHJldHVybiBzdGFydHM7CiAgfQoKICBAb3ZlcnJpZGUKICBrZXJuZWwuTG9jYXRpb24gZ2V0TG9jYXRpb24oaW50IG9mZnNldCkgewogICAgcmV0dXJuIGtlcm5lbFNvdXJjZS5nZXRMb2NhdGlvbihudWxsLCBvZmZzZXQpOwogIH0KCiAgU3RyaW5nIHNsb3dTdWJzdHJpbmcoaW50IHN0YXJ0LCBpbnQgZW5kKTsKCiAgLy8vIENyZWF0ZSBhIHByZXR0eSBzdHJpbmcgcmVwcmVzZW50YXRpb24gZm9yIFttZXNzYWdlXSBmcm9tIGEgY2hhcmFjdGVyCiAgLy8vIHJhbmdlIGBbc3RhcnQsIGVuZF1gIGluIHRoaXMgZmlsZS4KICAvLy8KICAvLy8gSWYgW2luY2x1ZGVTb3VyY2VMaW5lXSBpcyBgdHJ1ZWAgdGhlIGZpcnN0IHNvdXJjZSBsaW5lIGNvZGUgbGluZSB0aGF0CiAgLy8vIGNvbnRhaW5zIHRoZSByYW5nZSB3aWxsIGJlIGluY2x1ZGVkIGFzIHdlbGwgYXMgbWFya2VyIGNoYXJhY3RlcnMgKCdeJykKICAvLy8gdW5kZXJsaW5pbmcgdGhlIHJhbmdlLgogIC8vLwogIC8vLyBVc2UgW2NvbG9yaXplXSB0byB3cmFwIHNvdXJjZSBjb2RlIHRleHQgYW5kIG1hcmtlciBjaGFyYWN0ZXJzIGluIGNvbG9yCiAgLy8vIGVzY2FwZSBjb2Rlcy4KICBTdHJpbmcgZ2V0TG9jYXRpb25NZXNzYWdlKFN0cmluZyBtZXNzYWdlLCBpbnQgc3RhcnQsIGludCBlbmQsCiAgICAgIHtib29sIGluY2x1ZGVTb3VyY2VMaW5lOiB0cnVlLCBTdHJpbmcgY29sb3JpemUoU3RyaW5nIHRleHQpfSkgewogICAgaWYgKGNvbG9yaXplID09IG51bGwpIHsKICAgICAgY29sb3JpemUgPSAodGV4dCkgPT4gdGV4dDsKICAgIH0KCiAgICBrZXJuZWwuTG9jYXRpb24gc3RhcnRMb2NhdGlvbiA9IGtlcm5lbFNvdXJjZS5nZXRMb2NhdGlvbihudWxsLCBzdGFydCk7CiAgICBrZXJuZWwuTG9jYXRpb24gZW5kTG9jYXRpb24gPSBrZXJuZWxTb3VyY2UuZ2V0TG9jYXRpb24obnVsbCwgZW5kKTsKICAgIGludCBsaW5lU3RhcnQgPSBzdGFydExvY2F0aW9uLmxpbmUgLSAxOwogICAgaW50IGNvbHVtblN0YXJ0ID0gc3RhcnRMb2NhdGlvbi5jb2x1bW4gLSAxOwogICAgaW50IGxpbmVFbmQgPSBlbmRMb2NhdGlvbi5saW5lIC0gMTsKICAgIGludCBjb2x1bW5FbmQgPSBlbmRMb2NhdGlvbi5jb2x1bW4gLSAxOwoKICAgIFN0cmluZ0J1ZmZlciBidWYgPSBuZXcgU3RyaW5nQnVmZmVyKCcke2ZpbGVuYW1lfTonKTsKICAgIGlmIChzdGFydCAhPSBlbmQgfHwgc3RhcnQgIT0gMCkgewogICAgICAvLyBMaW5lL2NvbHVtbiBpbmZvIGlzIHJlbGV2YW50LgogICAgICBidWYud3JpdGUoJyR7bGluZVN0YXJ0ICsgMX06JHtjb2x1bW5TdGFydCArIDF9OicpOwogICAgfQogICAgYnVmLndyaXRlKCdcbiRtZXNzYWdlXG4nKTsKCiAgICBpZiAoc3RhcnQgIT0gZW5kICYmIGluY2x1ZGVTb3VyY2VMaW5lKSB7CiAgICAgIGlmIChsaW5lU3RhcnQgPT0gbGluZUVuZCkgewogICAgICAgIFN0cmluZyB0ZXh0TGluZSA9IGtlcm5lbFNvdXJjZS5nZXRUZXh0TGluZShzdGFydExvY2F0aW9uLmxpbmUpOwoKICAgICAgICBpbnQgdG9Db2x1bW4gPSBtaW4oY29sdW1uU3RhcnQgKyAoZW5kIC0gc3RhcnQpLCB0ZXh0TGluZS5sZW5ndGgpOwogICAgICAgIGJ1Zi53cml0ZSh0ZXh0TGluZS5zdWJzdHJpbmcoMCwgY29sdW1uU3RhcnQpKTsKICAgICAgICBidWYud3JpdGUoY29sb3JpemUodGV4dExpbmUuc3Vic3RyaW5nKGNvbHVtblN0YXJ0LCB0b0NvbHVtbikpKTsKICAgICAgICBidWYud3JpdGVsbih0ZXh0TGluZS5zdWJzdHJpbmcodG9Db2x1bW4pKTsKCiAgICAgICAgaW50IGkgPSAwOwogICAgICAgIGZvciAoOyBpIDwgY29sdW1uU3RhcnQ7IGkrKykgewogICAgICAgICAgYnVmLndyaXRlKCcgJyk7CiAgICAgICAgfQoKICAgICAgICBmb3IgKDsgaSA8IHRvQ29sdW1uOyBpKyspIHsKICAgICAgICAgIGJ1Zi53cml0ZShjb2xvcml6ZSgnXicpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9yIChpbnQgbGluZSA9IGxpbmVTdGFydDsgbGluZSA8PSBsaW5lRW5kOyBsaW5lKyspIHsKICAgICAgICAgIFN0cmluZyB0ZXh0TGluZSA9IGtlcm5lbFNvdXJjZS5nZXRUZXh0TGluZShsaW5lICsgMSk7CiAgICAgICAgICBpZiAobGluZSA9PSBsaW5lU3RhcnQpIHsKICAgICAgICAgICAgaWYgKGNvbHVtblN0YXJ0ID4gdGV4dExpbmUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgY29sdW1uU3RhcnQgPSB0ZXh0TGluZS5sZW5ndGg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnVmLndyaXRlKHRleHRMaW5lLnN1YnN0cmluZygwLCBjb2x1bW5TdGFydCkpOwogICAgICAgICAgICBidWYud3JpdGVsbihjb2xvcml6ZSh0ZXh0TGluZS5zdWJzdHJpbmcoY29sdW1uU3RhcnQpKSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGxpbmUgPT0gbGluZUVuZCkgewogICAgICAgICAgICBpZiAoY29sdW1uRW5kID4gdGV4dExpbmUubGVuZ3RoKSB7CiAgICAgICAgICAgICAgY29sdW1uRW5kID0gdGV4dExpbmUubGVuZ3RoOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJ1Zi53cml0ZShjb2xvcml6ZSh0ZXh0TGluZS5zdWJzdHJpbmcoMCwgY29sdW1uRW5kKSkpOwogICAgICAgICAgICBidWYud3JpdGVsbih0ZXh0TGluZS5zdWJzdHJpbmcoY29sdW1uRW5kKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBidWYud3JpdGVsbihjb2xvcml6ZSh0ZXh0TGluZSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiBidWYudG9TdHJpbmcoKTsKICB9CgogIGludCBnZXQgbGluZXMgPT4gbGluZVN0YXJ0cy5sZW5ndGggLSAxOwp9CgpMaXN0PGludD4gX3plcm9UZXJtaW5hdGVJZk5lY2Vzc2FyeShMaXN0PGludD4gYnl0ZXMpIHsKICBpZiAoYnl0ZXMubGVuZ3RoID4gMCAmJiBieXRlcy5sYXN0ID09IDApIHJldHVybiBieXRlczsKICBMaXN0PGludD4gcmVzdWx0ID0gbmV3IFVpbnQ4TGlzdChieXRlcy5sZW5ndGggKyAxKTsKICByZXN1bHQuc2V0UmFuZ2UoMCwgYnl0ZXMubGVuZ3RoLCBieXRlcyk7CiAgcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXSA9IDA7CiAgcmV0dXJuIHJlc3VsdDsKfQoKY2xhc3MgVXRmOEJ5dGVzU291cmNlRmlsZSBleHRlbmRzIFNvdXJjZUZpbGU8TGlzdDxpbnQ+PiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgVXJpIHVyaTsKCiAgLy8vIFRoZSBVVEYtOCBlbmNvZGVkIGNvbnRlbnQgb2YgdGhlIHNvdXJjZSBmaWxlLgogIGZpbmFsIExpc3Q8aW50PiB6ZXJvVGVybWluYXRlZENvbnRlbnQ7CgogIC8vLyBDcmVhdGVzIGEgVXRmOEJ5dGVzU291cmNlRmlsZS4KICAvLy8KICAvLy8gSWYgcG9zc2libGUsIHRoZSBnaXZlbiBbY29udGVudF0gc2hvdWxkIGJlIHplcm8tdGVybWluYXRlZC4gSWYgaXQgaXNuJ3QsCiAgLy8vIHRoZSBjb25zdHJ1Y3RvciBjbG9uZXMgdGhlIGNvbnRlbnQgYW5kIGFkZHMgYSB0cmFpbGluZyAwLgogIFV0ZjhCeXRlc1NvdXJjZUZpbGUodGhpcy51cmksIExpc3Q8aW50PiBjb250ZW50KQogICAgICA6IHRoaXMuemVyb1Rlcm1pbmF0ZWRDb250ZW50ID0gX3plcm9UZXJtaW5hdGVJZk5lY2Vzc2FyeShjb250ZW50KTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxpbnQ+IGdldCBkYXRhID0+IHplcm9UZXJtaW5hdGVkQ29udGVudDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHNsb3dUZXh0KCkgewogICAgLy8gRG9uJ3QgY29udmVydCB0aGUgdHJhaWxpbmcgemVybyBieXRlLgogICAgcmV0dXJuIHV0ZjguZGVjb2RlcgogICAgICAgIC5jb252ZXJ0KHplcm9UZXJtaW5hdGVkQ29udGVudCwgMCwgemVyb1Rlcm1pbmF0ZWRDb250ZW50Lmxlbmd0aCAtIDEpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxpbnQ+IHNsb3dVdGY4WmVyb1Rlcm1pbmF0ZWRCeXRlcygpID0+IHplcm9UZXJtaW5hdGVkQ29udGVudDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHNsb3dTdWJzdHJpbmcoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICAvLyBUT0RPKGxyeSk6IHRvIG1ha2UgdGhpcyBmYXN0ZXIsIHRoZSBzY2FubmVyIGNvdWxkIHJlY29yZCB0aGUgVVRGLTggc2xhY2sKICAgIC8vIGZvciBhbGwgcG9zaXRpb25zIG9mIHRoZSBzb3VyY2UgdGV4dC4gV2UgY291bGQgdXNlIFs6Y29udGVudC5zdWJsaXN0Ol0uCiAgICByZXR1cm4gc2xvd1RleHQoKS5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCB7CiAgICBpZiAobGVuZ3RoQ2FjaGUgPT0gLTEpIHsKICAgICAgLy8gRHVyaW5nIHNjYW5uaW5nIHRoZSBsZW5ndGggaXMgbm90IHlldCBhc3NpZ25lZCwgc28gd2UgdXNlIGEgc2xvdyBwYXRoLgogICAgICBsZW5ndGhDYWNoZSA9IHNsb3dUZXh0KCkubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIGxlbmd0aENhY2hlOwogIH0KCiAgQG92ZXJyaWRlCiAgc2V0IGxlbmd0aChpbnQgdikgPT4gbGVuZ3RoQ2FjaGUgPSB2OwogIGludCBsZW5ndGhDYWNoZSA9IC0xOwp9CgpjbGFzcyBDYWNoaW5nVXRmOEJ5dGVzU291cmNlRmlsZSBleHRlbmRzIFV0ZjhCeXRlc1NvdXJjZUZpbGUgewogIFN0cmluZyBjYWNoZWRUZXh0OwogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBmaWxlbmFtZTsKCiAgQ2FjaGluZ1V0ZjhCeXRlc1NvdXJjZUZpbGUoVXJpIHVyaSwgdGhpcy5maWxlbmFtZSwgTGlzdDxpbnQ+IGNvbnRlbnQpCiAgICAgIDogc3VwZXIodXJpLCBjb250ZW50KTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHNsb3dUZXh0KCkgewogICAgaWYgKGNhY2hlZFRleHQgPT0gbnVsbCkgewogICAgICBjYWNoZWRUZXh0ID0gc3VwZXIuc2xvd1RleHQoKTsKICAgIH0KICAgIHJldHVybiBjYWNoZWRUZXh0OwogIH0KfQoKY2xhc3MgU3RyaW5nU291cmNlRmlsZSBleHRlbmRzIFNvdXJjZUZpbGU8TGlzdDxpbnQ+PiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgVXJpIHVyaTsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgZmlsZW5hbWU7CiAgZmluYWwgU3RyaW5nIHRleHQ7CgogIFN0cmluZ1NvdXJjZUZpbGUodGhpcy51cmksIHRoaXMuZmlsZW5hbWUsIHRoaXMudGV4dCk7CgogIFN0cmluZ1NvdXJjZUZpbGUuZnJvbVVyaShVcmkgdXJpLCBTdHJpbmcgdGV4dCkKICAgICAgOiB0aGlzKHVyaSwgdXJpLnRvU3RyaW5nKCksIHRleHQpOwoKICBTdHJpbmdTb3VyY2VGaWxlLmZyb21OYW1lKFN0cmluZyBmaWxlbmFtZSwgU3RyaW5nIHRleHQpCiAgICAgIDogdGhpcyhuZXcgVXJpKHBhdGg6IGZpbGVuYW1lKSwgZmlsZW5hbWUsIHRleHQpOwoKICBAb3ZlcnJpZGUKICBMaXN0PGludD4gZ2V0IGRhdGEgPT4gdXRmOC5lbmNvZGUodGV4dCk7CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IHRleHQubGVuZ3RoOwogIEBvdmVycmlkZQogIHNldCBsZW5ndGgoaW50IHYpIHt9CgogIEBvdmVycmlkZQogIFN0cmluZyBzbG93VGV4dCgpID0+IHRleHQ7CgogIEBvdmVycmlkZQogIExpc3Q8aW50PiBzbG93VXRmOFplcm9UZXJtaW5hdGVkQnl0ZXMoKSB7CiAgICByZXR1cm4gX3plcm9UZXJtaW5hdGVJZk5lY2Vzc2FyeSh1dGY4LmVuY29kZSh0ZXh0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgc2xvd1N1YnN0cmluZyhpbnQgc3RhcnQsIGludCBlbmQpID0+IHRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOwp9CgovLy8gQmluYXJ5IGlucHV0IGRhdGEuCmNsYXNzIEJpbmFyeSBpbXBsZW1lbnRzIElucHV0PExpc3Q8aW50Pj4gewogIEBvdmVycmlkZQogIGZpbmFsIFVyaSB1cmk7CiAgQG92ZXJyaWRlCiAgZmluYWwgTGlzdDxpbnQ+IGRhdGE7CgogIEJpbmFyeSh0aGlzLnVyaSwgdGhpcy5kYXRhKTsKCiAgQG92ZXJyaWRlCiAgSW5wdXRLaW5kIGdldCBpbnB1dEtpbmQgPT4gSW5wdXRLaW5kLmJpbmFyeTsKfQqBJwBOTjwBIAEhFCkBQgE3IgFOKkUrDA8BDC0BJAEjRTg1FCc4DSEEARwGRikBOxUBSikrAUk3EgFMSw8VAU4YHSNNQToGHAQBT1EGTlEfNgEdATAWEyItHRkGShMEAQwsMwQBLAFLKQZMTR0GTRRARhwhBgFLRywwKCwBOSYnOQYfAS0iSAFKN0gzARMnGgoBJCQKDz5AIzEtDjtEKC8rDkM4Ey0MCggGARsEASoCATc5NishEQIBOgwRATQpASUGT0AzSQEMLwEMFi0YTgQBDEQBDC1QTy0EAQwTHVAnBhgEAQwoGAIBPxUMGQFIHQEMFh4lBhcEAgE3DBEMGRUBOAExKQE6NwEMKwEMIQwXAQwdAQwsOQQBDEoCARcrDBEMGAEfAQwvAgEocGFja2FnZTpjb21waWxlci9zcmMvaW8vc291cmNlX2ZpbGUuZGFydDBzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91dGlsL2VtcHR5c2V0LmRhcnSGxy8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMudXRpbC5lbXB0eXNldDsKCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJyBzaG93IEl0ZXJhYmxlQmFzZTsKCmNsYXNzIEltbXV0YWJsZUVtcHR5U2V0PEU+IGV4dGVuZHMgSXRlcmFibGVCYXNlPEU+IGltcGxlbWVudHMgU2V0PEU+IHsKICBjb25zdCBJbW11dGFibGVFbXB0eVNldCgpOwoKICBAb3ZlcnJpZGUKICBTZXQ8Uj4gY2FzdDxSPigpID0+IG5ldyBJbW11dGFibGVFbXB0eVNldDxSPigpOwogIEBvdmVycmlkZQogIGdldCBpdGVyYXRvciA9PiBjb25zdCBfRW1wdHlTZXRJdGVyYXRvcigpOwogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IDA7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiB0cnVlOwoKICBnZXQgX2ltbXV0YWJsZUVycm9yID0+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJFbXB0eVNldCBpcyBpbW11dGFibGUiKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBhZGQoRSBlbGVtZW50KSA9PiBfaW1tdXRhYmxlRXJyb3I7CiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZWxlbWVudHMpID0+IF9pbW11dGFibGVFcnJvcjsKCiAgQG92ZXJyaWRlCiAgRSBsb29rdXAoT2JqZWN0IGVsZW1lbnQpID0+IG51bGw7CiAgQG92ZXJyaWRlCiAgYm9vbCByZW1vdmUoT2JqZWN0IGVsZW1lbnQpID0+IGZhbHNlOwogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkge30KICBAb3ZlcnJpZGUKICB2b2lkIHJldGFpbkFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7fQogIEBvdmVycmlkZQogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEUgZWxlbWVudCkpIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCBjbGVhcigpIHt9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcikgPT4gb3RoZXIuaXNFbXB0eTsKCiAgQG92ZXJyaWRlCiAgU2V0PEU+IHVuaW9uKFNldDxFPiBvdGhlcikgPT4gbmV3IFNldC5mcm9tKG90aGVyKTsKICBAb3ZlcnJpZGUKICBTZXQ8RT4gaW50ZXJzZWN0aW9uKFNldDxPYmplY3Q+IG90aGVyKSA9PiB0aGlzOwogIEBvdmVycmlkZQogIFNldDxFPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSA9PiB0aGlzOwogIEBvdmVycmlkZQogIFNldDxFPiB0b1NldCgpID0+IG5ldyBTZXQ8RT4oKTsKfQoKY2xhc3MgX0VtcHR5U2V0SXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcjxOdWxsPiB7CiAgY29uc3QgX0VtcHR5U2V0SXRlcmF0b3IoKTsKCiAgQG92ZXJyaWRlCiAgTnVsbCBnZXQgY3VycmVudCA9PiBudWxsOwogIEBvdmVycmlkZQogIGJvb2wgbW92ZU5leHQoKSA9PiBmYWxzZTsKfQpFAE5OPAEfASwBRx0BDDIMLQwXDBwBTgEMKgw4AQwkDCgMLwwsDC8MLAwqDBIBDCoMPQEMNQwyDDAMIgIBNB0BDBwMHAIBJ3BhY2thZ2U6Y29tcGlsZXIvc3JjL3V0aWwvZW1wdHlzZXQuZGFydC5zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91dGlsL21hcGxldC5kYXJ0nh0vLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLnV0aWwubWFwbGV0OwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgTWFwQmFzZSwgSXRlcmFibGVCYXNlOwoKY2xhc3MgTWFwbGV0PEssIFY+IGV4dGVuZHMgTWFwQmFzZTxLLCBWPiB7CiAgc3RhdGljIGNvbnN0IF9NYXBsZXRNYXJrZXIgX01BUktFUiA9IGNvbnN0IF9NYXBsZXRNYXJrZXIoKTsKICBzdGF0aWMgY29uc3QgaW50IENBUEFDSVRZID0gODsKCi8vIFRoZSBtYXBsZXQgY2FuIGJlIGluIG9uZSBvZiBmb3VyIHN0YXRlczoKICAvLwogIC8vICAgKiBFbXB0eSAgICAgICAgICAoZXh0cmE6IG51bGwsICAga2V5OiBtYXJrZXIsIHZhbHVlOiBudWxsKQogIC8vICAgKiBTaW5nbGUgZWxlbWVudCAoZXh0cmE6IG51bGwsICAga2V5OiBrZXksICAgIHZhbHVlOiB2YWx1ZSkKICAvLyAgICogTGlzdC1iYWNrZWQgICAgKGV4dHJhOiBsZW5ndGgsIGtleTogbGlzdCwgICB2YWx1ZTogbnVsbCkKICAvLyAgICogTWFwLWJhY2tlZCAgICAgKGV4dHJhOiBtYXJrZXIsIGtleTogbWFwLCAgICB2YWx1ZTogbnVsbCkKICAvLwogIC8vIFdoZW4gdGhlIG1hcGxldCBpcyBsaXN0LWJhY2tlZCwgdGhlIGxpc3QgaGFzIHR3byBzZWN0aW9uczogT25lCiAgLy8gZm9yIGtleXMgYW5kIG9uZSBmb3IgdmFsdWVzLiBUaGUgZmlyc3QgW0NBUEFDSVRZXSBlbnRyaWVzIGFyZQogIC8vIHRoZSBrZXlzIGFuZCB0aGV5IG1heSBjb250YWluIG1hcmtlcnMgZm9yIGRlbGV0ZWQgZWxlbWVudHMuIEFmdGVyCiAgLy8gdGhlIGtleXMgdGhlcmUgYXJlIFtDQVBBQ0lUWV0gZW50cmllcyBmb3IgdGhlIHZhbHVlcy4KCiAgZHluYW1pYyBfa2V5ID0gX01BUktFUjsKICB2YXIgX3ZhbHVlOwogIHZhciBfZXh0cmE7CgogIE1hcGxldCgpOwoKICBNYXBsZXQuZnJvbShNYXBsZXQ8SywgVj4gb3RoZXIpIHsKICAgIG90aGVyLmZvckVhY2goKEsga2V5LCBWIHZhbHVlKSB7CiAgICAgIHRoaXNba2V5XSA9IHZhbHVlOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5IHsKICAgIGlmIChfZXh0cmEgPT0gbnVsbCkgewogICAgICByZXR1cm4gX01BUktFUiA9PSBfa2V5OwogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICByZXR1cm4gX2tleS5pc0VtcHR5OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9leHRyYSA9PSAwOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggewogICAgaWYgKF9leHRyYSA9PSBudWxsKSB7CiAgICAgIHJldHVybiAoX01BUktFUiA9PSBfa2V5KSA/IDAgOiAxOwogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICByZXR1cm4gX2tleS5sZW5ndGg7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2V4dHJhOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9rZXkgPT0ga2V5OwogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICByZXR1cm4gX2tleS5jb250YWluc0tleShrZXkpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgcmVtYWluaW5nID0gX2V4dHJhLCBpID0gMDsgcmVtYWluaW5nID4gMCAmJiBpIDwgQ0FQQUNJVFk7IGkrKykgewogICAgICAgIHZhciBjYW5kaWRhdGUgPSBfa2V5W2ldOwogICAgICAgIGlmIChfTUFSS0VSID09IGNhbmRpZGF0ZSkgY29udGludWU7CiAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBrZXkpIHJldHVybiB0cnVlOwogICAgICAgIHJlbWFpbmluZy0tOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgaWYgKF9leHRyYSA9PSBudWxsKSB7CiAgICAgIHJldHVybiAoX2tleSA9PSBrZXkpID8gX3ZhbHVlIDogbnVsbDsKICAgIH0gZWxzZSBpZiAoX01BUktFUiA9PSBfZXh0cmEpIHsKICAgICAgcmV0dXJuIF9rZXlba2V5XTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IHJlbWFpbmluZyA9IF9leHRyYSwgaSA9IDA7IHJlbWFpbmluZyA+IDAgJiYgaSA8IENBUEFDSVRZOyBpKyspIHsKICAgICAgICB2YXIgY2FuZGlkYXRlID0gX2tleVtpXTsKICAgICAgICBpZiAoX01BUktFUiA9PSBjYW5kaWRhdGUpIGNvbnRpbnVlOwogICAgICAgIGlmIChjYW5kaWRhdGUgPT0ga2V5KSByZXR1cm4gX2tleVtpICsgQ0FQQUNJVFldOwogICAgICAgIHJlbWFpbmluZy0tOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIGlmIChfZXh0cmEgPT0gbnVsbCkgewogICAgICBpZiAoX01BUktFUiA9PSBfa2V5KSB7CiAgICAgICAgX2tleSA9IGtleTsKICAgICAgICBfdmFsdWUgPSB2YWx1ZTsKICAgICAgfSBlbHNlIGlmIChfa2V5ID09IGtleSkgewogICAgICAgIF92YWx1ZSA9IHZhbHVlOwogICAgICB9IGVsc2UgewogICAgICAgIExpc3QgbGlzdCA9IG5ldyBMaXN0KENBUEFDSVRZICogMik7CiAgICAgICAgbGlzdFswXSA9IF9rZXk7CiAgICAgICAgbGlzdFsxXSA9IGtleTsKICAgICAgICBsaXN0W0NBUEFDSVRZXSA9IF92YWx1ZTsKICAgICAgICBsaXN0W0NBUEFDSVRZICsgMV0gPSB2YWx1ZTsKICAgICAgICBfa2V5ID0gbGlzdDsKICAgICAgICBfdmFsdWUgPSBudWxsOwogICAgICAgIF9leHRyYSA9IDI7IC8vIFR3byBlbGVtZW50cy4KICAgICAgfQogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICBfa2V5W2tleV0gPSB2YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIGludCByZW1haW5pbmcgPSBfZXh0cmE7CiAgICAgIGludCBpbmRleCA9IDA7CiAgICAgIGludCBjb3B5VG8sIGNvcHlGcm9tOwogICAgICB3aGlsZSAocmVtYWluaW5nID4gMCAmJiBpbmRleCA8IENBUEFDSVRZKSB7CiAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IF9rZXlbaW5kZXhdOwogICAgICAgIGlmIChfTUFSS0VSID09IGNhbmRpZGF0ZSkgewogICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiB0aGUgbGFzdCByYW5nZSBvZiBlbXB0eSBzbG90cyBpbiB0aGUKICAgICAgICAgIC8vIGxpc3QuIFdoZW4gd2UncmUgZG9uZSB3ZSdsbCBtb3ZlIGFsbCB0aGUgZWxlbWVudHMKICAgICAgICAgIC8vIGFmdGVyIHRob3NlIGVtcHR5IHNsb3RzIGRvd24sIHNvIHRoYXQgYWRkaW5nIGFuIGVsZW1lbnQKICAgICAgICAgIC8vIGFmdGVyIHRoYXQgd2lsbCBwcmVzZXJ2ZSB0aGUgaW5zZXJ0aW9uIG9yZGVyLgogICAgICAgICAgaWYgKGNvcHlGcm9tID09IGluZGV4KSB7CiAgICAgICAgICAgIGNvcHlGcm9tKys7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb3B5VG8gPSBpbmRleDsKICAgICAgICAgICAgY29weUZyb20gPSBpbmRleCArIDE7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChjYW5kaWRhdGUgPT0ga2V5KSB7CiAgICAgICAgICBfa2V5W0NBUEFDSVRZICsgaW5kZXhdID0gdmFsdWU7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFNraXBwZWQgYW4gZWxlbWVudCB0aGF0IGRpZG4ndCBtYXRjaC4KICAgICAgICAgIHJlbWFpbmluZy0tOwogICAgICAgIH0KICAgICAgICBpbmRleCsrOwogICAgICB9CiAgICAgIGlmIChpbmRleCA8IENBUEFDSVRZKSB7CiAgICAgICAgX2tleVtpbmRleF0gPSBrZXk7CiAgICAgICAgX2tleVtDQVBBQ0lUWSArIGluZGV4XSA9IHZhbHVlOwogICAgICAgIF9leHRyYSsrOwogICAgICB9IGVsc2UgaWYgKF9leHRyYSA8IENBUEFDSVRZKSB7CiAgICAgICAgLy8gTW92ZSB0aGUgbGFzdCBlbGVtZW50cyBkb3duIGludG8gdGhlIGxhc3QgZW1wdHkgc2xvdHMKICAgICAgICAvLyBzbyB0aGF0IHdlIGhhdmUgZW1wdHkgc2xvdHMgYWZ0ZXIgdGhlIGxhc3QgZWxlbWVudC4KICAgICAgICB3aGlsZSAoY29weUZyb20gPCBDQVBBQ0lUWSkgewogICAgICAgICAgX2tleVtjb3B5VG9dID0gX2tleVtjb3B5RnJvbV07CiAgICAgICAgICBfa2V5W0NBUEFDSVRZICsgY29weVRvXSA9IF9rZXlbQ0FQQUNJVFkgKyBjb3B5RnJvbV07CiAgICAgICAgICBjb3B5VG8rKzsKICAgICAgICAgIGNvcHlGcm9tKys7CiAgICAgICAgfQogICAgICAgIC8vIEluc2VydCB0aGUgbmV3IGVsZW1lbnQgYXMgdGhlIGxhc3QgZWxlbWVudC4KICAgICAgICBfa2V5W2NvcHlUb10gPSBrZXk7CiAgICAgICAgX2tleVtDQVBBQ0lUWSArIGNvcHlUb10gPSB2YWx1ZTsKICAgICAgICBjb3B5VG8rKzsKICAgICAgICAvLyBBZGQgb25lIHRvIHRoZSBsZW5ndGggZW5jb2RlZCBpbiB0aGUgZXh0cmEgZmllbGQuCiAgICAgICAgX2V4dHJhKys7CiAgICAgICAgLy8gQ2xlYXIgYWxsIGVsZW1lbnRzIGFmdGVyIHRoZSBuZXcgbGFzdCBlbGVtZW50cyB0bwogICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBrZWVwIGV4dHJhIHN0dWZmIGFsaXZlLgogICAgICAgIHdoaWxlIChjb3B5VG8gPCBDQVBBQ0lUWSkgewogICAgICAgICAgX2tleVtjb3B5VG9dID0gX2tleVtDQVBBQ0lUWSArIGNvcHlUb10gPSBudWxsOwogICAgICAgICAgY29weVRvKys7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHZhciBtYXAgPSBuZXcgTWFwPEssIFY+KCk7CiAgICAgICAgZm9yRWFjaCgoZWFjaEtleSwgZWFjaFZhbHVlKSA9PiBtYXBbZWFjaEtleV0gPSBlYWNoVmFsdWUpOwogICAgICAgIG1hcFtrZXldID0gdmFsdWU7CiAgICAgICAgX2tleSA9IG1hcDsKICAgICAgICBfZXh0cmEgPSBfTUFSS0VSOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgaWYgKF9rZXkgIT0ga2V5KSByZXR1cm4gbnVsbDsKICAgICAgX2tleSA9IF9NQVJLRVI7CiAgICAgIFYgcmVzdWx0ID0gX3ZhbHVlOwogICAgICBfdmFsdWUgPSBudWxsOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICByZXR1cm4gX2tleS5yZW1vdmUoa2V5KTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IHJlbWFpbmluZyA9IF9leHRyYSwgaSA9IDA7IHJlbWFpbmluZyA+IDAgJiYgaSA8IENBUEFDSVRZOyBpKyspIHsKICAgICAgICB2YXIgY2FuZGlkYXRlID0gX2tleVtpXTsKICAgICAgICBpZiAoX01BUktFUiA9PSBjYW5kaWRhdGUpIGNvbnRpbnVlOwogICAgICAgIGlmIChjYW5kaWRhdGUgPT0ga2V5KSB7CiAgICAgICAgICBpbnQgdmFsdWVJbmRleCA9IENBUEFDSVRZICsgaTsKICAgICAgICAgIHZhciByZXN1bHQgPSBfa2V5W3ZhbHVlSW5kZXhdOwogICAgICAgICAgX2tleVtpXSA9IF9NQVJLRVI7CiAgICAgICAgICBfa2V5W3ZhbHVlSW5kZXhdID0gbnVsbDsKICAgICAgICAgIF9leHRyYS0tOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgICAgcmVtYWluaW5nLS07CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oSyBrZXksIFYgdmFsdWUpKSB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgaWYgKF9NQVJLRVIgIT0gX2tleSkgYWN0aW9uKF9rZXksIF92YWx1ZSk7CiAgICB9IGVsc2UgaWYgKF9NQVJLRVIgPT0gX2V4dHJhKSB7CiAgICAgIF9rZXkuZm9yRWFjaChhY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgcmVtYWluaW5nID0gX2V4dHJhLCBpID0gMDsgcmVtYWluaW5nID4gMCAmJiBpIDwgQ0FQQUNJVFk7IGkrKykgewogICAgICAgIHZhciBjYW5kaWRhdGUgPSBfa2V5W2ldOwogICAgICAgIGlmIChfTUFSS0VSID09IGNhbmRpZGF0ZSkgY29udGludWU7CiAgICAgICAgYWN0aW9uKGNhbmRpZGF0ZSwgX2tleVtDQVBBQ0lUWSArIGldKTsKICAgICAgICByZW1haW5pbmctLTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbGVhcigpIHsKICAgIF9rZXkgPSBfTUFSS0VSOwogICAgX3ZhbHVlID0gX2V4dHJhID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEs+IGdldCBrZXlzID0+IG5ldyBfTWFwbGV0S2V5SXRlcmFibGU8Sz4odGhpcyk7Cn0KCmNsYXNzIF9NYXBsZXRNYXJrZXIgewogIGNvbnN0IF9NYXBsZXRNYXJrZXIoKTsKfQoKY2xhc3MgX01hcGxldEtleUl0ZXJhYmxlPEs+IGV4dGVuZHMgSXRlcmFibGVCYXNlPEs+IHsKICBmaW5hbCBNYXBsZXQ8SywgZHluYW1pYz4gbWFwbGV0OwoKICBfTWFwbGV0S2V5SXRlcmFibGUodGhpcy5tYXBsZXQpOwoKICBAb3ZlcnJpZGUKICBJdGVyYXRvcjxLPiBnZXQgaXRlcmF0b3IgewogICAgaWYgKG1hcGxldC5fZXh0cmEgPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IF9NYXBsZXRTaW5nbGVJdGVyYXRvcjxLPihtYXBsZXQuX2tleSk7CiAgICB9IGVsc2UgaWYgKE1hcGxldC5fTUFSS0VSID09IG1hcGxldC5fZXh0cmEpIHsKICAgICAgcmV0dXJuIG1hcGxldC5fa2V5LmtleXMuaXRlcmF0b3I7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IF9NYXBsZXRMaXN0SXRlcmF0b3I8Sz4obWFwbGV0Ll9rZXksIG1hcGxldC5fZXh0cmEpOwogICAgfQogIH0KfQoKY2xhc3MgX01hcGxldFNpbmdsZUl0ZXJhdG9yPEs+IGltcGxlbWVudHMgSXRlcmF0b3I8Sz4gewogIHZhciBfZWxlbWVudDsKICBLIF9jdXJyZW50OwoKICBfTWFwbGV0U2luZ2xlSXRlcmF0b3IodGhpcy5fZWxlbWVudCk7CgogIEBvdmVycmlkZQogIEsgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7CgogIEBvdmVycmlkZQogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoTWFwbGV0Ll9NQVJLRVIgPT0gX2VsZW1lbnQpIHsKICAgICAgX2N1cnJlbnQgPSBudWxsOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBfY3VycmVudCA9IF9lbGVtZW50OwogICAgX2VsZW1lbnQgPSBNYXBsZXQuX01BUktFUjsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKY2xhc3MgX01hcGxldExpc3RJdGVyYXRvcjxLPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEs+IHsKICBmaW5hbCBMaXN0IF9saXN0OwogIGludCBfcmVtYWluaW5nOwogIGludCBfaW5kZXggPSAwOwogIEsgX2N1cnJlbnQ7CgogIF9NYXBsZXRMaXN0SXRlcmF0b3IodGhpcy5fbGlzdCwgdGhpcy5fcmVtYWluaW5nKTsKCiAgQG92ZXJyaWRlCiAgSyBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIHdoaWxlIChfcmVtYWluaW5nID4gMCkgewogICAgICB2YXIgY2FuZGlkYXRlID0gX2xpc3RbX2luZGV4KytdOwogICAgICBpZiAoTWFwbGV0Ll9NQVJLRVIgIT0gY2FuZGlkYXRlKSB7CiAgICAgICAgX2N1cnJlbnQgPSBjYW5kaWRhdGU7CiAgICAgICAgX3JlbWFpbmluZy0tOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICBfY3VycmVudCA9IG51bGw7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CoEoAE5OPAEdATUBKz4hASwFQkNCQgVEQ0c7ARoODgEMASQlGQgEAQwVGh4kGw0aBgQBDBMaKCQaDRUGBAEMIRoaJCQNUCEsKxUIFAYEAQweGiwkGA1QISw5FQgTBgQBDCYaHRQYIBgPLBgXISQVFyUIJBkNHhUcMiUkQD9FOyMYExwiDCcqEhEzFwoRCB4bKBImQT8mKT8UFgo3HCkSPRI9NiQ5FAoPI0MaFBoIBgQBDBkaJBYZFRUkHw1QISwgKSkdIxQZChUIEwYEAQwuGjEkHA1QISwvFQgGBAEMERQcBAEMOwIBFhkCATYjASMBDB0hODIoDUUGBAIBOBAOASgBDB0BDBQmFxQGGR8RBAIBNhQSEg4BNAEMHQEMFB0nKR4WFQgGFRIEAgElcGFja2FnZTpjb21waWxlci9zcmMvdXRpbC9tYXBsZXQuZGFydC5zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91dGlsL3NldGxldC5kYXJ0ojgvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLnV0aWwuc2V0bGV0OwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgU2V0QmFzZTsKCmNsYXNzIFNldGxldDxFPiBleHRlbmRzIFNldEJhc2U8RT4gewogIHN0YXRpYyBjb25zdCBfU2V0bGV0TWFya2VyIF9NQVJLRVIgPSBjb25zdCBfU2V0bGV0TWFya2VyKCk7CiAgc3RhdGljIGNvbnN0IGludCBDQVBBQ0lUWSA9IDg7CgogIC8vIFRoZSBzZXRsZXQgY2FuIGJlIGluIG9uZSBvZiBmb3VyIHN0YXRlczoKICAvLwogIC8vICAgKiBFbXB0eSAgICAgICAgICAoZXh0cmE6IG51bGwsICAgY29udGVudHM6IG1hcmtlcikKICAvLyAgICogU2luZ2xlIGVsZW1lbnQgKGV4dHJhOiBudWxsLCAgIGNvbnRlbnRzOiBlbGVtZW50KQogIC8vICAgKiBMaXN0LWJhY2tlZCAgICAoZXh0cmE6IGxlbmd0aCwgY29udGVudHM6IGxpc3QpCiAgLy8gICAqIFNldC1iYWNrZWQgICAgIChleHRyYTogbWFya2VyLCBjb250ZW50czogc2V0KQogIC8vCiAgLy8gV2hlbiB0aGUgc2V0bGV0IGlzIGxpc3QtYmFja2VkLCB0aGUgbGlzdCBpbiB0aGUgY29udGVudHMgZmllbGQKICAvLyBtYXkgaGF2ZSBlbXB0eSBzbG90cyBmaWxsZWQgd2l0aCB0aGUgbWFya2VyIHZhbHVlLgogIGR5bmFtaWMgX2NvbnRlbnRzID0gX01BUktFUjsKICB2YXIgX2V4dHJhOwoKICBTZXRsZXQoKTsKICBTZXRsZXQuZnJvbShJdGVyYWJsZTxFPiBlbGVtZW50cykgewogICAgYWRkQWxsKGVsZW1lbnRzKTsKICB9CgogIHN0YXRpYyBTZXQ8Uj4gX25ld1NldDxSPigpID0+IG5ldyBTZXRsZXQ8Uj4oKTsKCiAgQG92ZXJyaWRlCiAgU2V0PFI+IGNhc3Q8Uj4oKSA9PiBTZXQuY2FzdEZyb208RSwgUj4odGhpcywgbmV3U2V0OiBfbmV3U2V0KTsKICBAb3ZlcnJpZGUKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgewogICAgaWYgKF9leHRyYSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgX1NldGxldFNpbmdsZUl0ZXJhdG9yPEU+KF9jb250ZW50cyk7CiAgICB9IGVsc2UgaWYgKF9NQVJLRVIgPT0gX2V4dHJhKSB7CiAgICAgIHJldHVybiBfY29udGVudHMuaXRlcmF0b3I7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IF9TZXRsZXRMaXN0SXRlcmF0b3I8RT4oX2NvbnRlbnRzLCBfZXh0cmEpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggewogICAgaWYgKF9leHRyYSA9PSBudWxsKSB7CiAgICAgIHJldHVybiAoX01BUktFUiA9PSBfY29udGVudHMpID8gMCA6IDE7CiAgICB9IGVsc2UgaWYgKF9NQVJLRVIgPT0gX2V4dHJhKSB7CiAgICAgIHJldHVybiBfY29udGVudHMubGVuZ3RoOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9leHRyYTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW1wdHkgewogICAgaWYgKF9leHRyYSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfTUFSS0VSID09IF9jb250ZW50czsKICAgIH0gZWxzZSBpZiAoX01BUktFUiA9PSBfZXh0cmEpIHsKICAgICAgcmV0dXJuIF9jb250ZW50cy5pc0VtcHR5OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9leHRyYSA9PSAwOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgewogICAgaWYgKF9leHRyYSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfY29udGVudHMgPT0gZWxlbWVudDsKICAgIH0gZWxzZSBpZiAoX01BUktFUiA9PSBfZXh0cmEpIHsKICAgICAgcmV0dXJuIF9jb250ZW50cy5jb250YWlucyhlbGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IHJlbWFpbmluZyA9IF9leHRyYSwgaSA9IDA7IHJlbWFpbmluZyA+IDAgJiYgaSA8IENBUEFDSVRZOyBpKyspIHsKICAgICAgICB2YXIgY2FuZGlkYXRlID0gX2NvbnRlbnRzW2ldOwogICAgICAgIGlmIChfTUFSS0VSID09IGNhbmRpZGF0ZSkgY29udGludWU7CiAgICAgICAgaWYgKGNhbmRpZGF0ZSA9PSBlbGVtZW50KSByZXR1cm4gdHJ1ZTsKICAgICAgICByZW1haW5pbmctLTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGFkZChFIGVsZW1lbnQpIHsKICAgIGlmIChfZXh0cmEgPT0gbnVsbCkgewogICAgICBpZiAoX01BUktFUiA9PSBfY29udGVudHMpIHsKICAgICAgICBfY29udGVudHMgPSBlbGVtZW50OwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9IGVsc2UgaWYgKF9jb250ZW50cyA9PSBlbGVtZW50KSB7CiAgICAgICAgLy8gRG8gbm90aGluZy4KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgTGlzdCBsaXN0ID0gbmV3IExpc3QoQ0FQQUNJVFkpOwogICAgICAgIGxpc3RbMF0gPSBfY29udGVudHM7CiAgICAgICAgbGlzdFsxXSA9IGVsZW1lbnQ7CiAgICAgICAgX2NvbnRlbnRzID0gbGlzdDsKICAgICAgICBfZXh0cmEgPSAyOyAvLyBUd28gZWxlbWVudHMuCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoX01BUktFUiA9PSBfZXh0cmEpIHsKICAgICAgcmV0dXJuIF9jb250ZW50cy5hZGQoZWxlbWVudCk7CiAgICB9IGVsc2UgewogICAgICBpbnQgcmVtYWluaW5nID0gX2V4dHJhOwogICAgICBpbnQgaW5kZXggPSAwOwogICAgICBpbnQgY29weVRvLCBjb3B5RnJvbTsKICAgICAgd2hpbGUgKHJlbWFpbmluZyA+IDAgJiYgaW5kZXggPCBDQVBBQ0lUWSkgewogICAgICAgIHZhciBjYW5kaWRhdGUgPSBfY29udGVudHNbaW5kZXgrK107CiAgICAgICAgaWYgKF9NQVJLRVIgPT0gY2FuZGlkYXRlKSB7CiAgICAgICAgICAvLyBLZWVwIHRyYWNrIG9mIHRoZSBsYXN0IHJhbmdlIG9mIGVtcHR5IHNsb3RzIGluIHRoZQogICAgICAgICAgLy8gbGlzdC4gV2hlbiB3ZSdyZSBkb25lIHdlJ2xsIG1vdmUgYWxsIHRoZSBlbGVtZW50cwogICAgICAgICAgLy8gYWZ0ZXIgdGhvc2UgZW1wdHkgc2xvdHMgZG93biwgc28gdGhhdCBhZGRpbmcgYW4gZWxlbWVudAogICAgICAgICAgLy8gYWZ0ZXIgdGhhdCB3aWxsIHByZXNlcnZlIHRoZSBpbnNlcnRpb24gb3JkZXIuCiAgICAgICAgICBpZiAoY29weUZyb20gPT0gaW5kZXggLSAxKSB7CiAgICAgICAgICAgIGNvcHlGcm9tKys7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb3B5VG8gPSBpbmRleCAtIDE7CiAgICAgICAgICAgIGNvcHlGcm9tID0gaW5kZXg7CiAgICAgICAgICB9CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9IGVsc2UgaWYgKGNhbmRpZGF0ZSA9PSBlbGVtZW50KSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHJlbWFpbmluZy0tOwogICAgICB9CiAgICAgIGlmIChpbmRleCA8IENBUEFDSVRZKSB7CiAgICAgICAgX2NvbnRlbnRzW2luZGV4XSA9IGVsZW1lbnQ7CiAgICAgICAgX2V4dHJhKys7CiAgICAgIH0gZWxzZSBpZiAoX2V4dHJhIDwgQ0FQQUNJVFkpIHsKICAgICAgICAvLyBNb3ZlIHRoZSBsYXN0IGVsZW1lbnRzIGRvd24gaW50byB0aGUgbGFzdCBlbXB0eSBzbG90cwogICAgICAgIC8vIHNvIHRoYXQgd2UgaGF2ZSBlbXB0eSBzbG90cyBhZnRlciB0aGUgbGFzdCBlbGVtZW50LgogICAgICAgIHdoaWxlIChjb3B5RnJvbSA8IENBUEFDSVRZKSB7CiAgICAgICAgICBfY29udGVudHNbY29weVRvKytdID0gX2NvbnRlbnRzW2NvcHlGcm9tKytdOwogICAgICAgIH0KICAgICAgICAvLyBJbnNlcnQgdGhlIG5ldyBlbGVtZW50IGFzIHRoZSBsYXN0IGVsZW1lbnQuCiAgICAgICAgX2NvbnRlbnRzW2NvcHlUbysrXSA9IGVsZW1lbnQ7CiAgICAgICAgX2V4dHJhKys7CiAgICAgICAgLy8gQ2xlYXIgYWxsIGVsZW1lbnRzIGFmdGVyIHRoZSBuZXcgbGFzdCBlbGVtZW50cyB0bwogICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBkb24ndCBrZWVwIGV4dHJhIHN0dWZmIGFsaXZlLgogICAgICAgIHdoaWxlIChjb3B5VG8gPCBDQVBBQ0lUWSkgX2NvbnRlbnRzW2NvcHlUbysrXSA9IG51bGw7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2NvbnRlbnRzID0gbmV3IFNldDxFPigpCiAgICAgICAgICAuLmFkZEFsbCgoX2NvbnRlbnRzIGFzIExpc3QpLmNhc3Q8RT4oKSkKICAgICAgICAgIC4uYWRkKGVsZW1lbnQpOwogICAgICAgIF9leHRyYSA9IF9NQVJLRVI7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cykgewogICAgZWxlbWVudHMuZm9yRWFjaCgoZWFjaCkgPT4gYWRkKGVhY2gpKTsKICB9CgogIEBvdmVycmlkZQogIEUgbG9va3VwKE9iamVjdCBlbGVtZW50KSB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9jb250ZW50cyA9PSBlbGVtZW50ID8gX2NvbnRlbnRzIDogbnVsbDsKICAgIH0gZWxzZSBpZiAoX01BUktFUiA9PSBfZXh0cmEpIHsKICAgICAgcmV0dXJuIF9jb250ZW50cy5sb29rdXAoZWxlbWVudCk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCByZW1haW5pbmcgPSBfZXh0cmEsIGkgPSAwOyByZW1haW5pbmcgPiAwICYmIGkgPCBDQVBBQ0lUWTsgaSsrKSB7CiAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IF9jb250ZW50c1tpXTsKICAgICAgICBpZiAoX01BUktFUiA9PSBjYW5kaWRhdGUpIGNvbnRpbnVlOwogICAgICAgIGlmIChjYW5kaWRhdGUgPT0gZWxlbWVudCkgcmV0dXJuIGNhbmRpZGF0ZTsKICAgICAgICByZW1haW5pbmctLTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgcmVtb3ZlKE9iamVjdCBlbGVtZW50KSB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgaWYgKF9jb250ZW50cyA9PSBlbGVtZW50KSB7CiAgICAgICAgX2NvbnRlbnRzID0gX01BUktFUjsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoX01BUktFUiA9PSBfZXh0cmEpIHsKICAgICAgcmV0dXJuIF9jb250ZW50cy5yZW1vdmUoZWxlbWVudCk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCByZW1haW5pbmcgPSBfZXh0cmEsIGkgPSAwOyByZW1haW5pbmcgPiAwICYmIGkgPCBDQVBBQ0lUWTsgaSsrKSB7CiAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IF9jb250ZW50c1tpXTsKICAgICAgICBpZiAoX01BUktFUiA9PSBjYW5kaWRhdGUpIGNvbnRpbnVlOwogICAgICAgIGlmIChjYW5kaWRhdGUgPT0gZWxlbWVudCkgewogICAgICAgICAgX2NvbnRlbnRzW2ldID0gX01BUktFUjsKICAgICAgICAgIF9leHRyYS0tOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJlbWFpbmluZy0tOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gb3RoZXIpIHsKICAgIG90aGVyLmZvckVhY2gocmVtb3ZlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIGlmIChfZXh0cmEgPT0gbnVsbCkgewogICAgICBpZiAodGVzdChfY29udGVudHMpKSB7CiAgICAgICAgX2NvbnRlbnRzID0gX01BUktFUjsKICAgICAgfQogICAgfSBlbHNlIGlmIChfTUFSS0VSID09IF9leHRyYSkgewogICAgICBfY29udGVudHMucmVtb3ZlV2hlcmUodGVzdCk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCByZW1haW5pbmcgPSBfZXh0cmEsIGkgPSAwOyByZW1haW5pbmcgPiAwICYmIGkgPCBDQVBBQ0lUWTsgaSsrKSB7CiAgICAgICAgdmFyIGNhbmRpZGF0ZSA9IF9jb250ZW50c1tpXTsKICAgICAgICBpZiAoX01BUktFUiA9PSBjYW5kaWRhdGUpIGNvbnRpbnVlOwogICAgICAgIGlmICh0ZXN0KGNhbmRpZGF0ZSkpIHsKICAgICAgICAgIF9jb250ZW50c1tpXSA9IF9NQVJLRVI7CiAgICAgICAgICBfZXh0cmEtLTsKICAgICAgICB9CiAgICAgICAgcmVtYWluaW5nLS07CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIHJlbW92ZVdoZXJlKChFIGVsZW1lbnQpID0+ICF0ZXN0KGVsZW1lbnQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIFNldCBzZXQgPSBlbGVtZW50cyBpcyBTZXQgPyBlbGVtZW50cyA6IGVsZW1lbnRzLnRvU2V0KCk7CiAgICByZW1vdmVXaGVyZSgoRSBlbGVtZW50KSA9PiAhc2V0LmNvbnRhaW5zKGVsZW1lbnQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihFIGVsZW1lbnQpKSB7CiAgICBpZiAoX2V4dHJhID09IG51bGwpIHsKICAgICAgaWYgKF9NQVJLRVIgIT0gX2NvbnRlbnRzKSBhY3Rpb24oX2NvbnRlbnRzKTsKICAgIH0gZWxzZSBpZiAoX01BUktFUiA9PSBfZXh0cmEpIHsKICAgICAgX2NvbnRlbnRzLmZvckVhY2goYWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IHJlbWFpbmluZyA9IF9leHRyYSwgaSA9IDA7IHJlbWFpbmluZyA+IDAgJiYgaSA8IENBUEFDSVRZOyBpKyspIHsKICAgICAgICB2YXIgZWxlbWVudCA9IF9jb250ZW50c1tpXTsKICAgICAgICBpZiAoX01BUktFUiA9PSBlbGVtZW50KSBjb250aW51ZTsKICAgICAgICBhY3Rpb24oZWxlbWVudCk7CiAgICAgICAgcmVtYWluaW5nLS07CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcikgewogICAgZm9yIChFIGUgaW4gb3RoZXIpIHsKICAgICAgaWYgKCF0aGlzLmNvbnRhaW5zKGUpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGNsZWFyKCkgewogICAgX2NvbnRlbnRzID0gX01BUktFUjsKICAgIF9leHRyYSA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBTZXQ8RT4gdW5pb24oU2V0PEU+IG90aGVyKSA9PiBuZXcgU2V0PEU+LmZyb20odGhpcykuLmFkZEFsbChvdGhlcik7CgogIEBvdmVycmlkZQogIFNldGxldDxFPiBpbnRlcnNlY3Rpb24oU2V0PE9iamVjdD4gb3RoZXIpID0+CiAgICAgIG5ldyBTZXRsZXQ8RT4uZnJvbSh0aGlzLndoZXJlKChlKSA9PiBvdGhlci5jb250YWlucyhlKSkpOwoKICBAb3ZlcnJpZGUKICBTZXRsZXQ8RT4gZGlmZmVyZW5jZShTZXQ8T2JqZWN0PiBvdGhlcikgPT4KICAgICAgbmV3IFNldGxldDxFPi5mcm9tKHRoaXMud2hlcmUoKGUpID0+ICFvdGhlci5jb250YWlucyhlKSkpOwoKICBAb3ZlcnJpZGUKICBTZXRsZXQ8RT4gdG9TZXQoKSB7CiAgICBTZXRsZXQ8RT4gcmVzdWx0ID0gbmV3IFNldGxldDxFPigpOwogICAgaWYgKF9leHRyYSA9PSBudWxsKSB7CiAgICAgIHJlc3VsdC5fY29udGVudHMgPSBfY29udGVudHM7CiAgICB9IGVsc2UgaWYgKF9leHRyYSA9PSBfTUFSS0VSKSB7CiAgICAgIHJlc3VsdC5fZXh0cmEgPSBfTUFSS0VSOwogICAgICByZXN1bHQuX2NvbnRlbnRzID0gX2NvbnRlbnRzLnRvU2V0KCk7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQuX2V4dHJhID0gX2V4dHJhOwogICAgICByZXN1bHQuX2NvbnRlbnRzID0gX2NvbnRlbnRzLnRvTGlzdCgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCmNsYXNzIF9TZXRsZXRNYXJrZXIgewogIGNvbnN0IF9TZXRsZXRNYXJrZXIoKTsKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICItIjsKfQoKY2xhc3MgX1NldGxldFNpbmdsZUl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIHZhciBfZWxlbWVudDsKICBFIF9jdXJyZW50OwogIF9TZXRsZXRTaW5nbGVJdGVyYXRvcih0aGlzLl9lbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChTZXRsZXQuX01BUktFUiA9PSBfZWxlbWVudCkgewogICAgICBfY3VycmVudCA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIF9jdXJyZW50ID0gX2VsZW1lbnQ7CiAgICBfZWxlbWVudCA9IFNldGxldC5fTUFSS0VSOwogICAgcmV0dXJuIHRydWU7CiAgfQp9CgpjbGFzcyBfU2V0bGV0TGlzdEl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIExpc3QgX2xpc3Q7CiAgaW50IF9yZW1haW5pbmc7CiAgaW50IF9pbmRleCA9IDA7CiAgRSBfY3VycmVudDsKICBfU2V0bGV0TGlzdEl0ZXJhdG9yKHRoaXMuX2xpc3QsIHRoaXMuX3JlbWFpbmluZyk7CgogIEBvdmVycmlkZQogIEUgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7CgogIEBvdmVycmlkZQogIGJvb2wgbW92ZU5leHQoKSB7CiAgICB3aGlsZSAoX3JlbWFpbmluZyA+IDApIHsKICAgICAgdmFyIGNhbmRpZGF0ZSA9IF9saXN0W19pbmRleCsrXTsKICAgICAgaWYgKFNldGxldC5fTUFSS0VSICE9IGNhbmRpZGF0ZSkgewogICAgICAgIF9jdXJyZW50ID0gY2FuZGlkYXRlOwogICAgICAgIF9yZW1haW5pbmctLTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgX2N1cnJlbnQgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KfQqBWABOTjwBHQEnASU+IQEuBTo7ODcFRDgfDgEMJhYEATEBDEEMHRo2JCENPAYEAQwTGi0kHw0VBgQBDBUaIyQgDRoGBAEMIhojJCoNUCYsLxUIFAYEAQwYGiIdFSkXFg8oHRsaJRUIJCUNHhUcMiwkQD9FOycYEyAeDBQrGAoVCB4kEiZBPyY3CjcnEj02Pg8hMhoaCBMGBAEMJisEAQwdGjYkKA1QJiw0FQgTBgQBDCAaIh0VDxYIJCgNUCYsJCIUFwoVCBQGBAEMKxsEAQwrGh0dCCQjDVAmLB8iFAoVCAYEAQwrMAQBDC49OAQBDCkaMyQhDVAkKhkVCAYEAQwtGSsGEQQBDAwZEwQBDEYBDC9AAQwtQQEMFigaJCQfLA0eLQYTBAIBFhkMFQIBOBAOKAEMHQEMFCYXFAYZHxEEAgE2FBISDjQBDB0BDBQdJykeFhUIBhUSBAIBJXBhY2thZ2U6Y29tcGlsZXIvc3JjL3V0aWwvc2V0bGV0LmRhcnQxc2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvYmluYXJ5L2FzdF90b19iaW5hcnkuZGFydMABOL4vLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpsaWJyYXJ5IGtlcm5lbC5hc3RfdG9fYmluYXJ5OwoKaW1wb3J0ICdkYXJ0OmNvcmUnIGhpZGUgTWFwRW50cnk7CmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IHV0Zjg7CgppbXBvcnQgJy4uL2FzdC5kYXJ0JzsKaW1wb3J0ICd0YWcuZGFydCc7CmltcG9ydCAnZGFydDppbycgc2hvdyBCeXRlc0J1aWxkZXI7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCi8vLyBXcml0ZXMgdG8gYSBiaW5hcnkgZmlsZS4KLy8vCi8vLyBBIFtCaW5hcnlQcmludGVyXSBjYW4gYmUgdXNlZCB0byB3cml0ZSBvbmUgZmlsZSBhbmQgbXVzdCB0aGVuIGJlCi8vLyBkaXNjYXJkZWQuCmNsYXNzIEJpbmFyeVByaW50ZXIgaW1wbGVtZW50cyBWaXNpdG9yPHZvaWQ+LCBCaW5hcnlTaW5rIHsKICBWYXJpYWJsZUluZGV4ZXIgX3ZhcmlhYmxlSW5kZXhlcjsKICBMYWJlbEluZGV4ZXIgX2xhYmVsSW5kZXhlcjsKICBTd2l0Y2hDYXNlSW5kZXhlciBfc3dpdGNoQ2FzZUluZGV4ZXI7CiAgZmluYWwgVHlwZVBhcmFtZXRlckluZGV4ZXIgX3R5cGVQYXJhbWV0ZXJJbmRleGVyID0gbmV3IFR5cGVQYXJhbWV0ZXJJbmRleGVyKCk7CiAgZmluYWwgU3RyaW5nSW5kZXhlciBzdHJpbmdJbmRleGVyOwogIENvbnN0YW50SW5kZXhlciBfY29uc3RhbnRJbmRleGVyOwogIGZpbmFsIFVyaUluZGV4ZXIgX3NvdXJjZVVyaUluZGV4ZXIgPSBuZXcgVXJpSW5kZXhlcigpOwogIGJvb2wgX2N1cnJlbnRseUluTm9uaW1wbGVtZW50YXRpb24gPSBmYWxzZTsKICBmaW5hbCBMaXN0PGJvb2w+IF9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbiA9IG5ldyBMaXN0PGJvb2w+KCk7CiAgZmluYWwgTGlzdDxib29sPiBfc291cmNlc0Zyb21SZWFsSW1wbGVtZW50YXRpb25JbkxpYnJhcnkgPSBuZXcgTGlzdDxib29sPigpOwogIE1hcDxMaWJyYXJ5RGVwZW5kZW5jeSwgaW50PiBfbGlicmFyeURlcGVuZGVuY3lJbmRleCA9CiAgICAgIDxMaWJyYXJ5RGVwZW5kZW5jeSwgaW50Pnt9OwoKICBMaXN0PF9NZXRhZGF0YVN1YnNlY3Rpb24+IF9tZXRhZGF0YVN1YnNlY3Rpb25zOwoKICBmaW5hbCBCdWZmZXJlZFNpbmsgX21haW5TaW5rOwogIGZpbmFsIEJ1ZmZlcmVkU2luayBfbWV0YWRhdGFTaW5rOwogIGZpbmFsIEJ5dGVzU2luayBfY29uc3RhbnRzQnl0ZXNTaW5rOwogIEJ1ZmZlcmVkU2luayBfY29uc3RhbnRzU2luazsKICBCdWZmZXJlZFNpbmsgX3Npbms7CiAgYm9vbCBpbmNsdWRlU291cmNlczsKICBib29sIGluY2x1ZGVPZmZzZXRzOwoKICBMaXN0PGludD4gbGlicmFyeU9mZnNldHM7CiAgTGlzdDxpbnQ+IGNsYXNzT2Zmc2V0czsKICBMaXN0PGludD4gcHJvY2VkdXJlT2Zmc2V0czsKICBpbnQgX2JpbmFyeU9mZnNldEZvclNvdXJjZVRhYmxlID0gLTE7CiAgaW50IF9iaW5hcnlPZmZzZXRGb3JMaW5rVGFibGUgPSAtMTsKICBpbnQgX2JpbmFyeU9mZnNldEZvck1ldGFkYXRhUGF5bG9hZHMgPSAtMTsKICBpbnQgX2JpbmFyeU9mZnNldEZvck1ldGFkYXRhTWFwcGluZ3MgPSAtMTsKICBpbnQgX2JpbmFyeU9mZnNldEZvclN0cmluZ1RhYmxlID0gLTE7CiAgaW50IF9iaW5hcnlPZmZzZXRGb3JDb25zdGFudFRhYmxlID0gLTE7CgogIExpc3Q8Q2Fub25pY2FsTmFtZT4gX2Nhbm9uaWNhbE5hbWVMaXN0OwogIFNldDxDYW5vbmljYWxOYW1lPiBfa25vd25DYW5vbmljYWxOYW1lTm9uUm9vdFRvcHMgPSBuZXcgU2V0PENhbm9uaWNhbE5hbWU+KCk7CiAgU2V0PENhbm9uaWNhbE5hbWU+IF9yZWluZGV4ZWRDYW5vbmljYWxOYW1lcyA9IG5ldyBTZXQ8Q2Fub25pY2FsTmFtZT4oKTsKCiAgLy8vIENyZWF0ZSBhIHByaW50ZXIgdGhhdCB3cml0ZXMgdG8gdGhlIGdpdmVuIFtzaW5rXS4KICAvLy8KICAvLy8gVGhlIEJpbmFyeVByaW50ZXIgd2lsbCB1c2UgaXRzIG93biBidWZmZXIsIHNvIHRoZSBbc2lua10gZG9lcyBub3QgbmVlZAogIC8vLyBvbmUuCiAgQmluYXJ5UHJpbnRlcihTaW5rPExpc3Q8aW50Pj4gc2luaywKICAgICAge1N0cmluZ0luZGV4ZXIgc3RyaW5nSW5kZXhlciwKICAgICAgdGhpcy5pbmNsdWRlU291cmNlcyA9IHRydWUsCiAgICAgIHRoaXMuaW5jbHVkZU9mZnNldHMgPSB0cnVlfSkKICAgICAgOiBfbWFpblNpbmsgPSBuZXcgQnVmZmVyZWRTaW5rKHNpbmspLAogICAgICAgIF9tZXRhZGF0YVNpbmsgPSBuZXcgQnVmZmVyZWRTaW5rKG5ldyBCeXRlc1NpbmsoKSksCiAgICAgICAgX2NvbnN0YW50c0J5dGVzU2luayA9IG5ldyBCeXRlc1NpbmsoKSwKICAgICAgICBzdHJpbmdJbmRleGVyID0gc3RyaW5nSW5kZXhlciA/PyBuZXcgU3RyaW5nSW5kZXhlcigpIHsKICAgIF9jb25zdGFudHNTaW5rID0gbmV3IEJ1ZmZlcmVkU2luayhfY29uc3RhbnRzQnl0ZXNTaW5rKTsKICAgIF9jb25zdGFudEluZGV4ZXIgPSBuZXcgQ29uc3RhbnRJbmRleGVyKHRoaXMuc3RyaW5nSW5kZXhlciwgdGhpcyk7CiAgICBfc2luayA9IF9tYWluU2luazsKICB9CgogIHZvaWQgX2ZsdXNoKCkgewogICAgX3NpbmsuZmx1c2hBbmREZXN0cm95KCk7CiAgfQoKICB2b2lkIHdyaXRlQnl0ZShpbnQgYnl0ZSkgewogICAgX3NpbmsuYWRkQnl0ZShieXRlKTsKICB9CgogIHZvaWQgd3JpdGVCeXRlcyhMaXN0PGludD4gYnl0ZXMpIHsKICAgIF9zaW5rLmFkZEJ5dGVzKGJ5dGVzKTsKICB9CgogIHZvaWQgd3JpdGVVSW50MzAoaW50IHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgPj0gMCAmJiB2YWx1ZSA+PiAzMCA9PSAwKTsKICAgIGlmICh2YWx1ZSA8IDB4ODApIHsKICAgICAgX3NpbmsuYWRkQnl0ZSh2YWx1ZSk7CiAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMHg0MDAwKSB7CiAgICAgIF9zaW5rLmFkZEJ5dGUyKCh2YWx1ZSA+PiA4KSB8IDB4ODAsIHZhbHVlICYgMHhGRik7CiAgICB9IGVsc2UgewogICAgICBfc2luay5hZGRCeXRlNCgodmFsdWUgPj4gMjQpIHwgMHhDMCwgKHZhbHVlID4+IDE2KSAmIDB4RkYsCiAgICAgICAgICAodmFsdWUgPj4gOCkgJiAweEZGLCB2YWx1ZSAmIDB4RkYpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZVVJbnQzMihpbnQgdmFsdWUpIHsKICAgIF9zaW5rLmFkZEJ5dGU0KCh2YWx1ZSA+PiAyNCkgJiAweEZGLCAodmFsdWUgPj4gMTYpICYgMHhGRiwKICAgICAgICAodmFsdWUgPj4gOCkgJiAweEZGLCB2YWx1ZSAmIDB4RkYpOwogIH0KCiAgdm9pZCB3cml0ZUJ5dGVMaXN0KExpc3Q8aW50PiB1dGY4Qnl0ZXMpIHsKICAgIHdyaXRlVUludDMwKHV0ZjhCeXRlcy5sZW5ndGgpOwogICAgd3JpdGVCeXRlcyh1dGY4Qnl0ZXMpOwogIH0KCiAgaW50IGdldEJ1ZmZlck9mZnNldCgpIHsKICAgIHJldHVybiBfc2luay5vZmZzZXQ7CiAgfQoKICB2b2lkIHdyaXRlU3RyaW5nVGFibGUoU3RyaW5nSW5kZXhlciBpbmRleGVyKSB7CiAgICBfYmluYXJ5T2Zmc2V0Rm9yU3RyaW5nVGFibGUgPSBnZXRCdWZmZXJPZmZzZXQoKTsKCiAgICAvLyBDb250YWluZXJzIGZvciB0aGUgdXRmOCBlbmNvZGVkIHN0cmluZ3MuCiAgICBmaW5hbCBMaXN0PFVpbnQ4TGlzdD4gZGF0YSA9IG5ldyBMaXN0PFVpbnQ4TGlzdD4oKTsKICAgIGludCB0b3RhbExlbmd0aCA9IDA7CiAgICBjb25zdCBpbnQgbWluTGVuZ3RoID0gMSA8PCAxNjsKICAgIFVpbnQ4TGlzdCBidWZmZXI7CiAgICBpbnQgaW5kZXggPSAwOwoKICAgIC8vIFdyaXRlIHRoZSBlbmQgb2Zmc2V0cy4KICAgIHdyaXRlVUludDMwKGluZGV4ZXIuaW5kZXgubGVuZ3RoKTsKICAgIGZvciAoU3RyaW5nIGtleSBpbiBpbmRleGVyLmluZGV4LmtleXMpIHsKICAgICAgaWYgKGtleS5pc05vdEVtcHR5KSB7CiAgICAgICAgaW50IHJlcXVpcmVkTWluTGVuZ3RoID0ga2V5Lmxlbmd0aDsKICAgICAgICBpbnQgYWxsb2NhdGVNaW5MZW5ndGggPSByZXF1aXJlZE1pbkxlbmd0aCAqIDM7CiAgICAgICAgaW50IG5ld0luZGV4OwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICBpZiAoYnVmZmVyID09IG51bGwgfHwgaW5kZXggKyByZXF1aXJlZE1pbkxlbmd0aCA+PSBidWZmZXIubGVuZ3RoKSB7CiAgICAgICAgICAgIGludCBuZXdMZW5ndGggPSBtaW5MZW5ndGg7CiAgICAgICAgICAgIGlmIChhbGxvY2F0ZU1pbkxlbmd0aCA+IG5ld0xlbmd0aCkgbmV3TGVuZ3RoID0gYWxsb2NhdGVNaW5MZW5ndGg7CiAgICAgICAgICAgIGlmIChidWZmZXIgIT0gbnVsbCAmJiBpbmRleCA+IDApIHsKICAgICAgICAgICAgICBkYXRhLmFkZChuZXcgVWludDhMaXN0LnZpZXcoYnVmZmVyLmJ1ZmZlciwgMCwgaW5kZXgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbmRleCA9IDA7CiAgICAgICAgICAgIGJ1ZmZlciA9IG5ldyBVaW50OExpc3QobmV3TGVuZ3RoKTsKICAgICAgICAgIH0KICAgICAgICAgIG5ld0luZGV4ID0gTm90UXVpdGVTdHJpbmcud3JpdGVVdGY4KGJ1ZmZlciwgaW5kZXgsIGtleSk7CiAgICAgICAgICBpZiAobmV3SW5kZXggIT0gLTEpIGJyZWFrOwogICAgICAgICAgcmVxdWlyZWRNaW5MZW5ndGggPSBhbGxvY2F0ZU1pbkxlbmd0aDsKICAgICAgICB9CiAgICAgICAgaWYgKG5ld0luZGV4IDwgMCkgewogICAgICAgICAgLy8gVXRmOCBlbmNvZGluZyBmYWlsZWQuCiAgICAgICAgICBpZiAoYnVmZmVyICE9IG51bGwgJiYgaW5kZXggPiAwKSB7CiAgICAgICAgICAgIGRhdGEuYWRkKG5ldyBVaW50OExpc3QudmlldyhidWZmZXIuYnVmZmVyLCAwLCBpbmRleCkpOwogICAgICAgICAgICBidWZmZXIgPSBudWxsOwogICAgICAgICAgICBpbmRleCA9IDA7CiAgICAgICAgICB9CiAgICAgICAgICBMaXN0PGludD4gY29udmVydGVkID0gdXRmOC5lbmNvZGVyLmNvbnZlcnQoa2V5KTsKICAgICAgICAgIGRhdGEuYWRkKGNvbnZlcnRlZCk7CiAgICAgICAgICB0b3RhbExlbmd0aCArPSBjb252ZXJ0ZWQubGVuZ3RoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0b3RhbExlbmd0aCArPSBuZXdJbmRleCAtIGluZGV4OwogICAgICAgICAgaW5kZXggPSBuZXdJbmRleDsKICAgICAgICB9CiAgICAgIH0KICAgICAgd3JpdGVVSW50MzAodG90YWxMZW5ndGgpOwogICAgfQogICAgaWYgKGJ1ZmZlciAhPSBudWxsICYmIGluZGV4ID4gMCkgewogICAgICBkYXRhLmFkZChVaW50OExpc3QudmlldyhidWZmZXIuYnVmZmVyLCAwLCBpbmRleCkpOwogICAgfQoKICAgIC8vIFdyaXRlIHRoZSBVVEYtOCBlbmNvZGVkIHN0cmluZ3MuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyArK2kpIHsKICAgICAgd3JpdGVCeXRlcyhkYXRhW2ldKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVTdHJpbmdSZWZlcmVuY2UoU3RyaW5nIHN0cmluZykgewogICAgd3JpdGVVSW50MzAoc3RyaW5nSW5kZXhlci5wdXQoc3RyaW5nKSk7CiAgfQoKICB2b2lkIHdyaXRlU3RyaW5nUmVmZXJlbmNlTGlzdChMaXN0PFN0cmluZz4gc3RyaW5ncykgewogICAgd3JpdGVMaXN0KHN0cmluZ3MsIHdyaXRlU3RyaW5nUmVmZXJlbmNlKTsKICB9CgogIHZvaWQgd3JpdGVDb25zdGFudFJlZmVyZW5jZShDb25zdGFudCBjb25zdGFudCkgewogICAgd3JpdGVVSW50MzAoX2NvbnN0YW50SW5kZXhlci5wdXQoY29uc3RhbnQpKTsKICB9CgogIHZvaWQgd3JpdGVDb25zdGFudFRhYmxlKENvbnN0YW50SW5kZXhlciBpbmRleGVyKSB7CiAgICBfYmluYXJ5T2Zmc2V0Rm9yQ29uc3RhbnRUYWJsZSA9IGdldEJ1ZmZlck9mZnNldCgpOwoKICAgIHdyaXRlVUludDMwKGluZGV4ZXIuZW50cmllcy5sZW5ndGgpOwogICAgYXNzZXJ0KGlkZW50aWNhbChfc2luaywgX21haW5TaW5rKSk7CiAgICBfY29uc3RhbnRzU2luay5mbHVzaEFuZERlc3Ryb3koKTsKICAgIHdyaXRlQnl0ZXMoX2NvbnN0YW50c0J5dGVzU2luay5idWlsZGVyLnRha2VCeXRlcygpKTsKICB9CgogIGludCB3cml0ZUNvbnN0YW50VGFibGVFbnRyeShDb25zdGFudCBjb25zdGFudCkgewogICAgQnVmZmVyZWRTaW5rIG9sZFNpbmsgPSBfc2luazsKICAgIF9zaW5rID0gX2NvbnN0YW50c1Npbms7CiAgICBpbnQgaW5pdGlhbE9mZnNldCA9IF9zaW5rLm9mZnNldDsKICAgIGlmIChjb25zdGFudCBpcyBOdWxsQ29uc3RhbnQpIHsKICAgICAgd3JpdGVCeXRlKENvbnN0YW50VGFnLk51bGxDb25zdGFudCk7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50IGlzIEJvb2xDb25zdGFudCkgewogICAgICB3cml0ZUJ5dGUoQ29uc3RhbnRUYWcuQm9vbENvbnN0YW50KTsKICAgICAgd3JpdGVCeXRlKGNvbnN0YW50LnZhbHVlID8gMSA6IDApOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBJbnRDb25zdGFudCkgewogICAgICB3cml0ZUJ5dGUoQ29uc3RhbnRUYWcuSW50Q29uc3RhbnQpOwogICAgICB3cml0ZUludGVnZXIoY29uc3RhbnQudmFsdWUpOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBEb3VibGVDb25zdGFudCkgewogICAgICB3cml0ZUJ5dGUoQ29uc3RhbnRUYWcuRG91YmxlQ29uc3RhbnQpOwogICAgICB3cml0ZURvdWJsZShjb25zdGFudC52YWx1ZSk7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50IGlzIFN0cmluZ0NvbnN0YW50KSB7CiAgICAgIHdyaXRlQnl0ZShDb25zdGFudFRhZy5TdHJpbmdDb25zdGFudCk7CiAgICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKGNvbnN0YW50LnZhbHVlKTsKICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgU3ltYm9sQ29uc3RhbnQpIHsKICAgICAgd3JpdGVCeXRlKENvbnN0YW50VGFnLlN5bWJvbENvbnN0YW50KTsKICAgICAgd3JpdGVOdWxsQWxsb3dlZFJlZmVyZW5jZShjb25zdGFudC5saWJyYXJ5UmVmZXJlbmNlKTsKICAgICAgd3JpdGVTdHJpbmdSZWZlcmVuY2UoY29uc3RhbnQubmFtZSk7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50IGlzIE1hcENvbnN0YW50KSB7CiAgICAgIHdyaXRlQnl0ZShDb25zdGFudFRhZy5NYXBDb25zdGFudCk7CiAgICAgIHdyaXRlRGFydFR5cGUoY29uc3RhbnQua2V5VHlwZSk7CiAgICAgIHdyaXRlRGFydFR5cGUoY29uc3RhbnQudmFsdWVUeXBlKTsKICAgICAgd3JpdGVVSW50MzAoY29uc3RhbnQuZW50cmllcy5sZW5ndGgpOwogICAgICBmb3IgKGZpbmFsIENvbnN0YW50TWFwRW50cnkgZW50cnkgaW4gY29uc3RhbnQuZW50cmllcykgewogICAgICAgIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2UoZW50cnkua2V5KTsKICAgICAgICB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKGVudHJ5LnZhbHVlKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBMaXN0Q29uc3RhbnQpIHsKICAgICAgd3JpdGVCeXRlKENvbnN0YW50VGFnLkxpc3RDb25zdGFudCk7CiAgICAgIHdyaXRlRGFydFR5cGUoY29uc3RhbnQudHlwZUFyZ3VtZW50KTsKICAgICAgd3JpdGVVSW50MzAoY29uc3RhbnQuZW50cmllcy5sZW5ndGgpOwogICAgICBjb25zdGFudC5lbnRyaWVzLmZvckVhY2god3JpdGVDb25zdGFudFJlZmVyZW5jZSk7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50IGlzIFNldENvbnN0YW50KSB7CiAgICAgIHdyaXRlQnl0ZShDb25zdGFudFRhZy5TZXRDb25zdGFudCk7CiAgICAgIHdyaXRlRGFydFR5cGUoY29uc3RhbnQudHlwZUFyZ3VtZW50KTsKICAgICAgd3JpdGVVSW50MzAoY29uc3RhbnQuZW50cmllcy5sZW5ndGgpOwogICAgICBjb25zdGFudC5lbnRyaWVzLmZvckVhY2god3JpdGVDb25zdGFudFJlZmVyZW5jZSk7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50IGlzIEluc3RhbmNlQ29uc3RhbnQpIHsKICAgICAgd3JpdGVCeXRlKENvbnN0YW50VGFnLkluc3RhbmNlQ29uc3RhbnQpOwogICAgICB3cml0ZUNsYXNzUmVmZXJlbmNlKGNvbnN0YW50LmNsYXNzTm9kZSk7CiAgICAgIHdyaXRlVUludDMwKGNvbnN0YW50LnR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgICAgY29uc3RhbnQudHlwZUFyZ3VtZW50cy5mb3JFYWNoKHdyaXRlRGFydFR5cGUpOwogICAgICB3cml0ZVVJbnQzMChjb25zdGFudC5maWVsZFZhbHVlcy5sZW5ndGgpOwogICAgICBjb25zdGFudC5maWVsZFZhbHVlcy5mb3JFYWNoKChSZWZlcmVuY2UgZmllbGRSZWYsIENvbnN0YW50IHZhbHVlKSB7CiAgICAgICAgd3JpdGVOb25OdWxsQ2Fub25pY2FsTmFtZVJlZmVyZW5jZShmaWVsZFJlZi5jYW5vbmljYWxOYW1lKTsKICAgICAgICB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKHZhbHVlKTsKICAgICAgfSk7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50IGlzIFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQpIHsKICAgICAgd3JpdGVCeXRlKENvbnN0YW50VGFnLlBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQpOwogICAgICB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKGNvbnN0YW50LnRlYXJPZmZDb25zdGFudCk7CiAgICAgIGZpbmFsIGludCBsZW5ndGggPSBjb25zdGFudC50eXBlcy5sZW5ndGg7CiAgICAgIHdyaXRlVUludDMwKGxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICB3cml0ZURhcnRUeXBlKGNvbnN0YW50LnR5cGVzW2ldKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBUZWFyT2ZmQ29uc3RhbnQpIHsKICAgICAgd3JpdGVCeXRlKENvbnN0YW50VGFnLlRlYXJPZmZDb25zdGFudCk7CiAgICAgIHdyaXRlTm9uTnVsbENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoY29uc3RhbnQucHJvY2VkdXJlLmNhbm9uaWNhbE5hbWUpOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBUeXBlTGl0ZXJhbENvbnN0YW50KSB7CiAgICAgIHdyaXRlQnl0ZShDb25zdGFudFRhZy5UeXBlTGl0ZXJhbENvbnN0YW50KTsKICAgICAgd3JpdGVEYXJ0VHlwZShjb25zdGFudC50eXBlKTsKICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgVW5ldmFsdWF0ZWRDb25zdGFudCkgewogICAgICB3cml0ZUJ5dGUoQ29uc3RhbnRUYWcuVW5ldmFsdWF0ZWRDb25zdGFudCk7CiAgICAgIHdyaXRlTm9kZShjb25zdGFudC5leHByZXNzaW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdVbnN1cHBvcnRlZCBjb25zdGFudCAkY29uc3RhbnQnKTsKICAgIH0KICAgIF9zaW5rID0gb2xkU2luazsKICAgIHJldHVybiBfY29uc3RhbnRzU2luay5vZmZzZXQgLSBpbml0aWFsT2Zmc2V0OwogIH0KCiAgdm9pZCB3cml0ZURhcnRUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIHR5cGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgLy8gUmV0dXJucyB0aGUgbmV3IGFjdGl2ZSBmaWxlIHVyaS4KICB2b2lkIHdyaXRlVXJpUmVmZXJlbmNlKFVyaSB1cmkpIHsKICAgIGZpbmFsIGludCBpbmRleCA9IF9zb3VyY2VVcmlJbmRleGVyLnB1dCh1cmkpOwogICAgd3JpdGVVSW50MzAoaW5kZXgpOwogICAgaWYgKCFfY3VycmVudGx5SW5Ob25pbXBsZW1lbnRhdGlvbikgewogICAgICBpZiAoX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uSW5MaWJyYXJ5Lmxlbmd0aCA8PSBpbmRleCkgewogICAgICAgIF9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbkluTGlicmFyeS5sZW5ndGggPSBpbmRleCArIDE7CiAgICAgIH0KICAgICAgX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uSW5MaWJyYXJ5W2luZGV4XSA9IHRydWU7CiAgICAgIGlmIChfc291cmNlc0Zyb21SZWFsSW1wbGVtZW50YXRpb24ubGVuZ3RoIDw9IGluZGV4KSB7CiAgICAgICAgX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uLmxlbmd0aCA9IGluZGV4ICsgMTsKICAgICAgfQogICAgICBfc291cmNlc0Zyb21SZWFsSW1wbGVtZW50YXRpb25baW5kZXhdID0gdHJ1ZTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVMaXN0PFQ+KExpc3Q8VD4gaXRlbXMsIHZvaWQgd3JpdGVJdGVtKFQgeCkpIHsKICAgIHdyaXRlVUludDMwKGl0ZW1zLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgKytpKSB7CiAgICAgIHdyaXRlSXRlbShpdGVtc1tpXSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlTm9kZUxpc3QoTGlzdDxOb2RlPiBub2RlcykgewogICAgZmluYWwgbGVuID0gbm9kZXMubGVuZ3RoOwogICAgd3JpdGVVSW50MzAobGVuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZmluYWwgbm9kZSA9IG5vZGVzW2ldOwogICAgICB3cml0ZU5vZGUobm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlUHJvY2VkdXJlTm9kZUxpc3QoTGlzdDxQcm9jZWR1cmU+IG5vZGVzKSB7CiAgICBmaW5hbCBsZW4gPSBub2Rlcy5sZW5ndGg7CiAgICB3cml0ZVVJbnQzMChsZW4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBmaW5hbCBub2RlID0gbm9kZXNbaV07CiAgICAgIHdyaXRlUHJvY2VkdXJlTm9kZShub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVGaWVsZE5vZGVMaXN0KExpc3Q8RmllbGQ+IG5vZGVzKSB7CiAgICBmaW5hbCBsZW4gPSBub2Rlcy5sZW5ndGg7CiAgICB3cml0ZVVJbnQzMChsZW4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBmaW5hbCBub2RlID0gbm9kZXNbaV07CiAgICAgIHdyaXRlRmllbGROb2RlKG5vZGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUNsYXNzTm9kZUxpc3QoTGlzdDxDbGFzcz4gbm9kZXMpIHsKICAgIGZpbmFsIGxlbiA9IG5vZGVzLmxlbmd0aDsKICAgIHdyaXRlVUludDMwKGxlbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGZpbmFsIG5vZGUgPSBub2Rlc1tpXTsKICAgICAgd3JpdGVDbGFzc05vZGUobm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlQ29uc3RydWN0b3JOb2RlTGlzdChMaXN0PENvbnN0cnVjdG9yPiBub2RlcykgewogICAgZmluYWwgbGVuID0gbm9kZXMubGVuZ3RoOwogICAgd3JpdGVVSW50MzAobGVuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZmluYWwgbm9kZSA9IG5vZGVzW2ldOwogICAgICB3cml0ZUNvbnN0cnVjdG9yTm9kZShub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvck5vZGVMaXN0KAogICAgICBMaXN0PFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yPiBub2RlcykgewogICAgZmluYWwgbGVuID0gbm9kZXMubGVuZ3RoOwogICAgd3JpdGVVSW50MzAobGVuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZmluYWwgbm9kZSA9IG5vZGVzW2ldOwogICAgICB3cml0ZVJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yTm9kZShub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVTd2l0Y2hDYXNlTm9kZUxpc3QoTGlzdDxTd2l0Y2hDYXNlPiBub2RlcykgewogICAgZmluYWwgbGVuID0gbm9kZXMubGVuZ3RoOwogICAgd3JpdGVVSW50MzAobGVuKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgZmluYWwgbm9kZSA9IG5vZGVzW2ldOwogICAgICB3cml0ZVN3aXRjaENhc2VOb2RlKG5vZGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUNhdGNoTm9kZUxpc3QoTGlzdDxDYXRjaD4gbm9kZXMpIHsKICAgIGZpbmFsIGxlbiA9IG5vZGVzLmxlbmd0aDsKICAgIHdyaXRlVUludDMwKGxlbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGZpbmFsIG5vZGUgPSBub2Rlc1tpXTsKICAgICAgd3JpdGVDYXRjaE5vZGUobm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlVHlwZWRlZk5vZGVMaXN0KExpc3Q8VHlwZWRlZj4gbm9kZXMpIHsKICAgIGZpbmFsIGxlbiA9IG5vZGVzLmxlbmd0aDsKICAgIHdyaXRlVUludDMwKGxlbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGZpbmFsIG5vZGUgPSBub2Rlc1tpXTsKICAgICAgd3JpdGVUeXBlZGVmTm9kZShub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVOb2RlKE5vZGUgbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2b2lkIHdyaXRlRnVuY3Rpb25Ob2RlKEZ1bmN0aW9uTm9kZSBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgd3JpdGVBcmd1bWVudHNOb2RlKEFyZ3VtZW50cyBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgd3JpdGVMaWJyYXJ5Tm9kZShMaWJyYXJ5IG5vZGUpIHsKICAgIGlmIChfbWV0YWRhdGFTdWJzZWN0aW9ucyAhPSBudWxsKSB7CiAgICAgIF93cml0ZU5vZGVNZXRhZGF0YShub2RlKTsKICAgIH0KICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgdm9pZCB3cml0ZVByb2NlZHVyZU5vZGUoUHJvY2VkdXJlIG5vZGUpIHsKICAgIGlmIChfbWV0YWRhdGFTdWJzZWN0aW9ucyAhPSBudWxsKSB7CiAgICAgIF93cml0ZU5vZGVNZXRhZGF0YShub2RlKTsKICAgIH0KICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgdm9pZCB3cml0ZUZpZWxkTm9kZShGaWVsZCBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgd3JpdGVDbGFzc05vZGUoQ2xhc3Mgbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2b2lkIHdyaXRlQ29uc3RydWN0b3JOb2RlKENvbnN0cnVjdG9yIG5vZGUpIHsKICAgIGlmIChfbWV0YWRhdGFTdWJzZWN0aW9ucyAhPSBudWxsKSB7CiAgICAgIF93cml0ZU5vZGVNZXRhZGF0YShub2RlKTsKICAgIH0KICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgdm9pZCB3cml0ZVJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yTm9kZSgKICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3Igbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2b2lkIHdyaXRlU3dpdGNoQ2FzZU5vZGUoU3dpdGNoQ2FzZSBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgd3JpdGVDYXRjaE5vZGUoQ2F0Y2ggbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICB2b2lkIHdyaXRlVHlwZWRlZk5vZGUoVHlwZWRlZiBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZvaWQgd3JpdGVPcHRpb25hbE5vZGUoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuTm90aGluZyk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUJ5dGUoVGFnLlNvbWV0aGluZyk7CiAgICAgIHdyaXRlTm9kZShub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVPcHRpb25hbEZ1bmN0aW9uTm9kZShGdW5jdGlvbk5vZGUgbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICB3cml0ZUJ5dGUoVGFnLk5vdGhpbmcpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVCeXRlKFRhZy5Tb21ldGhpbmcpOwogICAgICB3cml0ZUZ1bmN0aW9uTm9kZShub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVMaW5rVGFibGUoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgX2JpbmFyeU9mZnNldEZvckxpbmtUYWJsZSA9IGdldEJ1ZmZlck9mZnNldCgpOwogICAgd3JpdGVMaXN0KF9jYW5vbmljYWxOYW1lTGlzdCwgd3JpdGVDYW5vbmljYWxOYW1lRW50cnkpOwogIH0KCiAgdm9pZCBpbmRleExpbmtUYWJsZShDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBfY2Fub25pY2FsTmFtZUxpc3QgPSA8Q2Fub25pY2FsTmFtZT5bXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcG9uZW50LmxpYnJhcmllcy5sZW5ndGg7ICsraSkgewogICAgICBMaWJyYXJ5IGxpYnJhcnkgPSBjb21wb25lbnQubGlicmFyaWVzW2ldOwogICAgICBpZiAoIXNob3VsZFdyaXRlTGlicmFyeUNhbm9uaWNhbE5hbWVzKGxpYnJhcnkpKSBjb250aW51ZTsKICAgICAgX2luZGV4TGlua1RhYmxlSW50ZXJuYWwobGlicmFyeS5jYW5vbmljYWxOYW1lKTsKICAgICAgX2tub3duQ2Fub25pY2FsTmFtZU5vblJvb3RUb3BzLmFkZChsaWJyYXJ5LmNhbm9uaWNhbE5hbWUpOwogICAgfQogIH0KCiAgdm9pZCBfaW5kZXhMaW5rVGFibGVJbnRlcm5hbChDYW5vbmljYWxOYW1lIG5vZGUpIHsKICAgIG5vZGUuaW5kZXggPSBfY2Fub25pY2FsTmFtZUxpc3QubGVuZ3RoOwogICAgX2Nhbm9uaWNhbE5hbWVMaXN0LmFkZChub2RlKTsKICAgIEl0ZXJhYmxlPENhbm9uaWNhbE5hbWU+IGNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbk9yTnVsbDsKICAgIGlmIChjaGlsZHJlbiAhPSBudWxsKSB7CiAgICAgIGZvciAoQ2Fub25pY2FsTmFtZSBjaGlsZCBpbiBjaGlsZHJlbikgewogICAgICAgIF9pbmRleExpbmtUYWJsZUludGVybmFsKGNoaWxkKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIENvbXB1dGUgY2Fub25pY2FsIG5hbWVzIGZvciB0aGUgd2hvbGUgY29tcG9uZW50IG9yIHBhcnRzIG9mIGl0LgogIHZvaWQgY29tcHV0ZUNhbm9uaWNhbE5hbWVzKENvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIGNvbXBvbmVudC5jb21wdXRlQ2Fub25pY2FsTmFtZXMoKTsKICB9CgogIC8vLyBSZXR1cm4gYHRydWVgIGlmIGFsbCBjYW5vbmljYWwgbmFtZXMgb2YgdGhlIFtsaWJyYXJ5XSBzaG91bGQgYmUgd3JpdHRlbgogIC8vLyBpbnRvIHRoZSBsaW5rIHRhYmxlLiAgSWYgc29tZSBsaWJyYXJpZXMgb2YgdGhlIGNvbXBvbmVudCBhcmUgc2tpcHBlZCwKICAvLy8gdGhlbiBhbGwgdGhlIGFkZGl0aW9uYWwgbmFtZXMgcmVmZXJlbmNlZCBieSB0aGUgbGlicmFyaWVzIHRoYXQgYXJlIHdyaXR0ZW4KICAvLy8gYnkgW3dyaXRlTGlicmFyaWVzXSBhcmUgYXV0b21hdGljYWxseSBhZGRlZC4KICBib29sIHNob3VsZFdyaXRlTGlicmFyeUNhbm9uaWNhbE5hbWVzKExpYnJhcnkgbGlicmFyeSkgPT4gdHJ1ZTsKCiAgdm9pZCB3cml0ZUNhbm9uaWNhbE5hbWVFbnRyeShDYW5vbmljYWxOYW1lIG5vZGUpIHsKICAgIENhbm9uaWNhbE5hbWUgcGFyZW50ID0gbm9kZS5wYXJlbnQ7CiAgICBpZiAocGFyZW50LmlzUm9vdCkgewogICAgICB3cml0ZVVJbnQzMCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlVUludDMwKHBhcmVudC5pbmRleCArIDEpOwogICAgfQogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2Uobm9kZS5uYW1lKTsKICB9CgogIHZvaWQgd3JpdGVDb21wb25lbnRGaWxlKENvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIGNvbXB1dGVDYW5vbmljYWxOYW1lcyhjb21wb25lbnQpOwogICAgZmluYWwgY29tcG9uZW50T2Zmc2V0ID0gZ2V0QnVmZmVyT2Zmc2V0KCk7CiAgICB3cml0ZVVJbnQzMihUYWcuQ29tcG9uZW50RmlsZSk7CiAgICB3cml0ZVVJbnQzMihUYWcuQmluYXJ5Rm9ybWF0VmVyc2lvbik7CiAgICB3cml0ZUxpc3RPZlN0cmluZ3MoY29tcG9uZW50LnByb2JsZW1zQXNKc29uKTsKICAgIGluZGV4TGlua1RhYmxlKGNvbXBvbmVudCk7CiAgICBfY29sbGVjdE1ldGFkYXRhKGNvbXBvbmVudCk7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGFJbXBsKGNvbXBvbmVudCwgY29tcG9uZW50T2Zmc2V0KTsKICAgIH0KICAgIGxpYnJhcnlPZmZzZXRzID0gPGludD5bXTsKICAgIENhbm9uaWNhbE5hbWUgbWFpbiA9IGdldENhbm9uaWNhbE5hbWVPZk1lbWJlcihjb21wb25lbnQubWFpbk1ldGhvZCk7CiAgICBpZiAobWFpbiAhPSBudWxsKSB7CiAgICAgIGNoZWNrQ2Fub25pY2FsTmFtZShtYWluKTsKICAgIH0KICAgIHdyaXRlTGlicmFyaWVzKGNvbXBvbmVudCk7CiAgICB3cml0ZVVyaVRvU291cmNlKGNvbXBvbmVudC51cmlUb1NvdXJjZSk7CiAgICB3cml0ZUxpbmtUYWJsZShjb21wb25lbnQpOwogICAgX3dyaXRlTWV0YWRhdGFTZWN0aW9uKGNvbXBvbmVudCk7CiAgICB3cml0ZVN0cmluZ1RhYmxlKHN0cmluZ0luZGV4ZXIpOwogICAgd3JpdGVDb25zdGFudFRhYmxlKF9jb25zdGFudEluZGV4ZXIpOwogICAgd3JpdGVDb21wb25lbnRJbmRleChjb21wb25lbnQsIGNvbXBvbmVudC5saWJyYXJpZXMpOwoKICAgIF9mbHVzaCgpOwogIH0KCiAgdm9pZCB3cml0ZUxpc3RPZlN0cmluZ3MoTGlzdDxTdHJpbmc+IHN0cmluZ3MpIHsKICAgIHdyaXRlVUludDMwKHN0cmluZ3M/Lmxlbmd0aCA/PyAwKTsKICAgIGlmIChzdHJpbmdzICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdHJpbmdzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgU3RyaW5nIHMgPSBzdHJpbmdzW2ldOwogICAgICAgIC8vIFRoaXMgaXMgc2xvdywgYnV0IHdlIGV4cGVjdCB0aGVyZSB0byBpbiBnZW5lcmFsIGJlIG5vIHByb2JsZW1zLiBJZiB0aGlzCiAgICAgICAgLy8gdHVybnMgb3V0IHRvIGJlIHdyb25nIHdlIGNhbiBvcHRpbWl6ZSBpdCBhcyB3ZSBkbyBVUkxzIGZvciBpbnN0YW5jZS4KICAgICAgICB3cml0ZUJ5dGVMaXN0KHV0ZjguZW5jb2Rlci5jb252ZXJ0KHMpKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIENvbGxlY3Qgbm9uLWVtcHR5IG1ldGFkYXRhIHJlcG9zaXRvcmllcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbXBvbmVudC4KICB2b2lkIF9jb2xsZWN0TWV0YWRhdGEoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgY29tcG9uZW50Lm1ldGFkYXRhLmZvckVhY2goKHRhZywgcmVwb3NpdG9yeSkgewogICAgICBpZiAocmVwb3NpdG9yeS5tYXBwaW5nLmlzRW1wdHkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIF9tZXRhZGF0YVN1YnNlY3Rpb25zID8/PSA8X01ldGFkYXRhU3Vic2VjdGlvbj5bXTsKICAgICAgX21ldGFkYXRhU3Vic2VjdGlvbnMuYWRkKG5ldyBfTWV0YWRhdGFTdWJzZWN0aW9uKHJlcG9zaXRvcnkpKTsKICAgIH0pOwogIH0KCiAgLy8vIFdyaXRlcyBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIFtOb2RlXS4KICB2b2lkIF93cml0ZU5vZGVNZXRhZGF0YShOb2RlIG5vZGUpIHsKICAgIF93cml0ZU5vZGVNZXRhZGF0YUltcGwobm9kZSwgZ2V0QnVmZmVyT2Zmc2V0KCkpOwogIH0KCiAgdm9pZCBfd3JpdGVOb2RlTWV0YWRhdGFJbXBsKE5vZGUgbm9kZSwgaW50IG5vZGVPZmZzZXQpIHsKICAgIGZvciAoX01ldGFkYXRhU3Vic2VjdGlvbiBzdWJzZWN0aW9uIGluIF9tZXRhZGF0YVN1YnNlY3Rpb25zKSB7CiAgICAgIGZpbmFsIHJlcG9zaXRvcnkgPSBzdWJzZWN0aW9uLnJlcG9zaXRvcnk7CiAgICAgIGZpbmFsIHZhbHVlID0gcmVwb3NpdG9yeS5tYXBwaW5nW25vZGVdOwogICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICBpZiAoIU1ldGFkYXRhUmVwb3NpdG9yeS5pc1N1cHBvcnRlZChub2RlKSkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgICAiTm9kZXMgb2YgdHlwZSAke25vZGUucnVudGltZVR5cGV9IGNhbid0IGhhdmUgbWV0YWRhdGEuIik7CiAgICAgIH0KCiAgICAgIGlmICghaWRlbnRpY2FsKF9zaW5rLCBfbWFpblNpbmspKSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgICJOb2RlIHdyaXR0ZW4gaW50byBtZXRhZGF0YSBjYW4ndCBoYXZlIG1ldGFkYXRhICIKICAgICAgICAgICAgIihtZXRhZGF0YTogJHtyZXBvc2l0b3J5LnRhZ30sIG5vZGU6ICR7bm9kZS5ydW50aW1lVHlwZX0gJG5vZGUpIik7CiAgICAgIH0KCiAgICAgIF9zaW5rID0gX21ldGFkYXRhU2luazsKICAgICAgc3Vic2VjdGlvbi5tZXRhZGF0YU1hcHBpbmcuYWRkKG5vZGVPZmZzZXQpOwogICAgICBzdWJzZWN0aW9uLm1ldGFkYXRhTWFwcGluZy5hZGQoZ2V0QnVmZmVyT2Zmc2V0KCkpOwogICAgICByZXBvc2l0b3J5LndyaXRlVG9CaW5hcnkodmFsdWUsIG5vZGUsIHRoaXMpOwogICAgICBfc2luayA9IF9tYWluU2luazsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW50ZXJTY29wZSgKICAgICAge0xpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMsCiAgICAgIGJvb2wgbWVtYmVyU2NvcGU6IGZhbHNlLAogICAgICBib29sIHZhcmlhYmxlU2NvcGU6IGZhbHNlfSkgewogICAgaWYgKHR5cGVQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgX3R5cGVQYXJhbWV0ZXJJbmRleGVyLmVudGVyKHR5cGVQYXJhbWV0ZXJzKTsKICAgIH0KICAgIGlmIChtZW1iZXJTY29wZSkgewogICAgICBfdmFyaWFibGVJbmRleGVyID0gbnVsbDsKICAgIH0KICAgIGlmICh2YXJpYWJsZVNjb3BlKSB7CiAgICAgIF92YXJpYWJsZUluZGV4ZXIgPz89IG5ldyBWYXJpYWJsZUluZGV4ZXIoKTsKICAgICAgX3ZhcmlhYmxlSW5kZXhlci5wdXNoU2NvcGUoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgbGVhdmVTY29wZSgKICAgICAge0xpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMsCiAgICAgIGJvb2wgbWVtYmVyU2NvcGU6IGZhbHNlLAogICAgICBib29sIHZhcmlhYmxlU2NvcGU6IGZhbHNlfSkgewogICAgaWYgKHZhcmlhYmxlU2NvcGUpIHsKICAgICAgX3ZhcmlhYmxlSW5kZXhlci5wb3BTY29wZSgpOwogICAgfQogICAgaWYgKG1lbWJlclNjb3BlKSB7CiAgICAgIF92YXJpYWJsZUluZGV4ZXIgPSBudWxsOwogICAgfQogICAgaWYgKHR5cGVQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgX3R5cGVQYXJhbWV0ZXJJbmRleGVyLmV4aXQodHlwZVBhcmFtZXRlcnMpOwogICAgfQogIH0KCiAgdm9pZCBfd3JpdGVNZXRhZGF0YVNlY3Rpb24oQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgLy8gTWFrZSBzdXJlIG1ldGFkYXRhIHBheWxvYWRzIHNlY3Rpb24gaXMgOC1ieXRlIGFsaWduZWQsCiAgICAvLyBzbyBjZXJ0YWluIGtpbmRzIG9mIG1ldGFkYXRhIGNhbiBjb250YWluIGFsaWduZWQgZGF0YS4KICAgIGNvbnN0IGludCBtZXRhZGF0YVBheWxvYWRzQWxpZ25tZW50ID0gODsKICAgIGludCBwYWRkaW5nID0gKChnZXRCdWZmZXJPZmZzZXQoKSArIG1ldGFkYXRhUGF5bG9hZHNBbGlnbm1lbnQgLSAxKSAmCiAgICAgICAgICAgIC1tZXRhZGF0YVBheWxvYWRzQWxpZ25tZW50KSAtCiAgICAgICAgZ2V0QnVmZmVyT2Zmc2V0KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhZGRpbmc7ICsraSkgewogICAgICB3cml0ZUJ5dGUoMCk7CiAgICB9CgogICAgX2JpbmFyeU9mZnNldEZvck1ldGFkYXRhUGF5bG9hZHMgPSBnZXRCdWZmZXJPZmZzZXQoKTsKCiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgPT0gbnVsbCkgewogICAgICBfYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFNYXBwaW5ncyA9IGdldEJ1ZmZlck9mZnNldCgpOwogICAgICB3cml0ZVVJbnQzMigwKTsgLy8gRW1wdHkgc2VjdGlvbi4KICAgICAgcmV0dXJuOwogICAgfQoKICAgIGFzc2VydChpZGVudGljYWwoX3NpbmssIF9tYWluU2luaykpOwogICAgX21ldGFkYXRhU2luay5mbHVzaEFuZERlc3Ryb3koKTsKICAgIHdyaXRlQnl0ZXMoKF9tZXRhZGF0YVNpbmsuX3NpbmsgYXMgQnl0ZXNTaW5rKS5idWlsZGVyLnRha2VCeXRlcygpKTsKCiAgICAvLyBSTGlzdDxNZXRhZGF0YU1hcHBpbmc+IG1ldGFkYXRhTWFwcGluZ3MKICAgIF9iaW5hcnlPZmZzZXRGb3JNZXRhZGF0YU1hcHBpbmdzID0gZ2V0QnVmZmVyT2Zmc2V0KCk7CiAgICBmb3IgKF9NZXRhZGF0YVN1YnNlY3Rpb24gc3Vic2VjdGlvbiBpbiBfbWV0YWRhdGFTdWJzZWN0aW9ucykgewogICAgICAvLyBVSW50MzIgdGFnCiAgICAgIHdyaXRlVUludDMyKHN0cmluZ0luZGV4ZXIucHV0KHN1YnNlY3Rpb24ucmVwb3NpdG9yeS50YWcpKTsKCiAgICAgIC8vIFJMaXN0PFBhaXI8VUludDMyLCBVSW50MzI+PiBub2RlT2Zmc2V0VG9NZXRhZGF0YU9mZnNldAogICAgICBmaW5hbCBtYXBwaW5nTGVuZ3RoID0gc3Vic2VjdGlvbi5tZXRhZGF0YU1hcHBpbmcubGVuZ3RoOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1hcHBpbmdMZW5ndGg7IGkgKz0gMikgewogICAgICAgIHdyaXRlVUludDMyKHN1YnNlY3Rpb24ubWV0YWRhdGFNYXBwaW5nW2ldKTsgLy8gbm9kZSBvZmZzZXQKICAgICAgICB3cml0ZVVJbnQzMihzdWJzZWN0aW9uLm1ldGFkYXRhTWFwcGluZ1tpICsgMV0pOyAvLyBtZXRhZGF0YSBvZmZzZXQKICAgICAgfQogICAgICB3cml0ZVVJbnQzMihtYXBwaW5nTGVuZ3RoIH4vIDIpOwogICAgfQogICAgd3JpdGVVSW50MzIoX21ldGFkYXRhU3Vic2VjdGlvbnMubGVuZ3RoKTsKICB9CgogIC8vLyBXcml0ZSBhbGwgb2Ygc29tZSBvZiB0aGUgbGlicmFyaWVzIG9mIHRoZSBbY29tcG9uZW50XS4KICB2b2lkIHdyaXRlTGlicmFyaWVzKENvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcG9uZW50LmxpYnJhcmllcy5sZW5ndGg7ICsraSkgewogICAgICB3cml0ZUxpYnJhcnlOb2RlKGNvbXBvbmVudC5saWJyYXJpZXNbaV0pOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUNvbXBvbmVudEluZGV4KENvbXBvbmVudCBjb21wb25lbnQsIExpc3Q8TGlicmFyeT4gbGlicmFyaWVzKSB7CiAgICAvLyBJdCBpcyBhbGxvd2VkIHRvIGNvbmNhdGVuYXRlIHNldmVyYWwga2VybmVsIGJpbmFyaWVzIHRvIGNyZWF0ZSBhCiAgICAvLyBtdWx0aS1jb21wb25lbnQga2VybmVsIGZpbGUuIEluIG9yZGVyIHRvIG1haW50YWluIGFsaWdubWVudCBvZgogICAgLy8gbWV0YWRhdGEgc2VjdGlvbnMgd2l0aGluIGtlcm5lbCBiaW5hcmllcyBhZnRlciBjb25jYXRlbmF0aW9uLAogICAgLy8gc2l6ZSBvZiBlYWNoIGtlcm5lbCBiaW5hcnkgc2hvdWxkIGJlIGFsaWduZWQuCiAgICAvLyBDb21wb25lbnQgaW5kZXggaXMgbG9jYXRlZCBhdCB0aGUgZW5kIG9mIGEga2VybmVsIGJpbmFyeSwgc28gcGFkZGluZwogICAgLy8gaXMgYWRkZWQgYmVmb3JlIGNvbXBvbmVudCBpbmRleC4KICAgIGNvbnN0IGludCBrZXJuZWxGaWxlQWxpZ25tZW50ID0gODsKCiAgICAvLyBLZWVwIHRoaXMgaW4gc3luYyB3aXRoIG51bWJlciBvZiB3cml0ZVVJbnQzMiBiZWxvdy4KICAgIGludCBudW1Db21wb25lbnRJbmRleEVudHJpZXMgPSA3ICsgbGlicmFyeU9mZnNldHMubGVuZ3RoICsgMzsKCiAgICBpbnQgdW5hbGlnbmVkU2l6ZSA9IGdldEJ1ZmZlck9mZnNldCgpICsgbnVtQ29tcG9uZW50SW5kZXhFbnRyaWVzICogNDsKICAgIGludCBwYWRkaW5nID0KICAgICAgICAoKHVuYWxpZ25lZFNpemUgKyBrZXJuZWxGaWxlQWxpZ25tZW50IC0gMSkgJiAta2VybmVsRmlsZUFsaWdubWVudCkgLQogICAgICAgICAgICB1bmFsaWduZWRTaXplOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYWRkaW5nOyArK2kpIHsKICAgICAgd3JpdGVCeXRlKDApOwogICAgfQoKICAgIC8vIEZpeGVkLXNpemUgaW50cyBhdCB0aGUgZW5kIHVzZWQgYXMgYW4gaW5kZXguCiAgICBhc3NlcnQoX2JpbmFyeU9mZnNldEZvclNvdXJjZVRhYmxlID49IDApOwogICAgd3JpdGVVSW50MzIoX2JpbmFyeU9mZnNldEZvclNvdXJjZVRhYmxlKTsKICAgIGFzc2VydChfYmluYXJ5T2Zmc2V0Rm9yTGlua1RhYmxlID49IDApOwogICAgd3JpdGVVSW50MzIoX2JpbmFyeU9mZnNldEZvckxpbmtUYWJsZSk7CiAgICBhc3NlcnQoX2JpbmFyeU9mZnNldEZvck1ldGFkYXRhUGF5bG9hZHMgPj0gMCk7CiAgICB3cml0ZVVJbnQzMihfYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFQYXlsb2Fkcyk7CiAgICBhc3NlcnQoX2JpbmFyeU9mZnNldEZvck1ldGFkYXRhTWFwcGluZ3MgPj0gMCk7CiAgICB3cml0ZVVJbnQzMihfYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFNYXBwaW5ncyk7CiAgICBhc3NlcnQoX2JpbmFyeU9mZnNldEZvclN0cmluZ1RhYmxlID49IDApOwogICAgd3JpdGVVSW50MzIoX2JpbmFyeU9mZnNldEZvclN0cmluZ1RhYmxlKTsKICAgIGFzc2VydChfYmluYXJ5T2Zmc2V0Rm9yQ29uc3RhbnRUYWJsZSA+PSAwKTsKICAgIHdyaXRlVUludDMyKF9iaW5hcnlPZmZzZXRGb3JDb25zdGFudFRhYmxlKTsKCiAgICBDYW5vbmljYWxOYW1lIG1haW4gPSBnZXRDYW5vbmljYWxOYW1lT2ZNZW1iZXIoY29tcG9uZW50Lm1haW5NZXRob2QpOwogICAgaWYgKG1haW4gPT0gbnVsbCkgewogICAgICB3cml0ZVVJbnQzMigwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlVUludDMyKG1haW4uaW5kZXggKyAxKTsKICAgIH0KCiAgICBhc3NlcnQobGlicmFyeU9mZnNldHMubGVuZ3RoID09IGxpYnJhcmllcy5sZW5ndGgpOwogICAgZm9yIChpbnQgb2Zmc2V0IGluIGxpYnJhcnlPZmZzZXRzKSB7CiAgICAgIHdyaXRlVUludDMyKG9mZnNldCk7CiAgICB9CiAgICB3cml0ZVVJbnQzMihfYmluYXJ5T2Zmc2V0Rm9yU291cmNlVGFibGUpOyAvLyBlbmQgb2YgbGFzdCBsaWJyYXJ5LgogICAgd3JpdGVVSW50MzIobGlicmFyaWVzLmxlbmd0aCk7CgogICAgd3JpdGVVSW50MzIoZ2V0QnVmZmVyT2Zmc2V0KCkgKyA0KTsgLy8gdG90YWwgc2l6ZS4KICB9CgogIHZvaWQgd3JpdGVVcmlUb1NvdXJjZShNYXA8VXJpLCBTb3VyY2U+IHVyaVRvU291cmNlKSB7CiAgICBfYmluYXJ5T2Zmc2V0Rm9yU291cmNlVGFibGUgPSBnZXRCdWZmZXJPZmZzZXQoKTsKCiAgICBpbnQgbGVuZ3RoID0gX3NvdXJjZVVyaUluZGV4ZXIuaW5kZXgubGVuZ3RoOwogICAgd3JpdGVVSW50MzIobGVuZ3RoKTsKICAgIExpc3Q8aW50PiBpbmRleCA9IG5ldyBMaXN0PGludD4obGVuZ3RoKTsKCiAgICAvLyBXcml0ZSBkYXRhLgogICAgaW50IGkgPSAwOwogICAgVWludDhMaXN0IGJ1ZmZlciA9IG5ldyBVaW50OExpc3QoMSA8PCAxNik7CiAgICBmb3IgKFVyaSB1cmkgaW4gX3NvdXJjZVVyaUluZGV4ZXIuaW5kZXgua2V5cykgewogICAgICBpbmRleFtpXSA9IGdldEJ1ZmZlck9mZnNldCgpOwogICAgICBTb3VyY2Ugc291cmNlID0gdXJpVG9Tb3VyY2VbdXJpXTsKICAgICAgaWYgKHNvdXJjZSA9PSBudWxsIHx8CiAgICAgICAgICAhKGluY2x1ZGVTb3VyY2VzICYmCiAgICAgICAgICAgICAgX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uLmxlbmd0aCA+IGkgJiYKICAgICAgICAgICAgICBfc291cmNlc0Zyb21SZWFsSW1wbGVtZW50YXRpb25baV0gPT0gdHJ1ZSkpIHsKICAgICAgICBzb3VyY2UgPSBuZXcgU291cmNlKAogICAgICAgICAgICA8aW50PltdLCBjb25zdCA8aW50PltdLCBzb3VyY2U/LmltcG9ydFVyaSwgc291cmNlPy5maWxlVXJpKTsKICAgICAgfQoKICAgICAgU3RyaW5nIHVyaUFzU3RyaW5nID0gdXJpID09IG51bGwgPyAiIiA6ICIkdXJpIjsKICAgICAgb3V0cHV0U3RyaW5nVmlhQnVmZmVyKHVyaUFzU3RyaW5nLCBidWZmZXIpOwoKICAgICAgd3JpdGVCeXRlTGlzdChzb3VyY2Uuc291cmNlKTsKCiAgICAgIExpc3Q8aW50PiBsaW5lU3RhcnRzID0gc291cmNlLmxpbmVTdGFydHM7CiAgICAgIHdyaXRlVUludDMwKGxpbmVTdGFydHMubGVuZ3RoKTsKICAgICAgaW50IHByZXZpb3VzTGluZVN0YXJ0ID0gMDsKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBsaW5lU3RhcnRzLmxlbmd0aDsgKytqKSB7CiAgICAgICAgaW50IGxpbmVTdGFydCA9IGxpbmVTdGFydHNbal07CiAgICAgICAgd3JpdGVVSW50MzAobGluZVN0YXJ0IC0gcHJldmlvdXNMaW5lU3RhcnQpOwogICAgICAgIHByZXZpb3VzTGluZVN0YXJ0ID0gbGluZVN0YXJ0OwogICAgICB9CgogICAgICBTdHJpbmcgaW1wb3J0VXJpQXNTdHJpbmcgPQogICAgICAgICAgc291cmNlLmltcG9ydFVyaSA9PSBudWxsID8gIiIgOiAiJHtzb3VyY2UuaW1wb3J0VXJpfSI7CiAgICAgIG91dHB1dFN0cmluZ1ZpYUJ1ZmZlcihpbXBvcnRVcmlBc1N0cmluZywgYnVmZmVyKTsKCiAgICAgIGkrKzsKICAgIH0KCiAgICAvLyBXcml0ZSBpbmRleCBmb3IgcmFuZG9tIGFjY2Vzcy4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5kZXgubGVuZ3RoOyArK2kpIHsKICAgICAgd3JpdGVVSW50MzIoaW5kZXhbaV0pOwogICAgfQogIH0KCiAgdm9pZCBvdXRwdXRTdHJpbmdWaWFCdWZmZXIoU3RyaW5nIHVyaUFzU3RyaW5nLCBVaW50OExpc3QgYnVmZmVyKSB7CiAgICBpZiAodXJpQXNTdHJpbmcubGVuZ3RoICogMyA8IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgaW50IGxlbmd0aCA9IE5vdFF1aXRlU3RyaW5nLndyaXRlVXRmOChidWZmZXIsIDAsIHVyaUFzU3RyaW5nKTsKICAgICAgaWYgKGxlbmd0aCA8IDApIHsKICAgICAgICAvLyBVdGY4IGVuY29kaW5nIGZhaWxlZC4KICAgICAgICB3cml0ZUJ5dGVMaXN0KHV0ZjguZW5jb2Rlci5jb252ZXJ0KHVyaUFzU3RyaW5nKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd3JpdGVVSW50MzAobGVuZ3RoKTsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKSB7CiAgICAgICAgICB3cml0ZUJ5dGUoYnVmZmVyW2pdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIFVuY29tbW9uIGNhc2Ugd2l0aCB2ZXJ5IGxvbmcgdXJsLgogICAgICB3cml0ZUJ5dGVMaXN0KHV0ZjguZW5jb2Rlci5jb252ZXJ0KHVyaUFzU3RyaW5nKSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlTGlicmFyeURlcGVuZGVuY3lSZWZlcmVuY2UoTGlicmFyeURlcGVuZGVuY3kgbm9kZSkgewogICAgaW50IGluZGV4ID0gX2xpYnJhcnlEZXBlbmRlbmN5SW5kZXhbbm9kZV07CiAgICBpZiAoaW5kZXggPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigKICAgICAgICAgICdSZWZlcmVuY2UgdG8gbGlicmFyeSBkZXBlbmRlbmN5ICRub2RlIG91dCBvZiBzY29wZScpOwogICAgfQogICAgd3JpdGVVSW50MzAoaW5kZXgpOwogIH0KCiAgdm9pZCB3cml0ZU51bGxBbGxvd2VkUmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKICAgIGlmIChyZWZlcmVuY2UgPT0gbnVsbCkgewogICAgICB3cml0ZVVJbnQzMCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIENhbm9uaWNhbE5hbWUgbmFtZSA9IHJlZmVyZW5jZS5jYW5vbmljYWxOYW1lOwogICAgICBpZiAobmFtZSA9PSBudWxsKSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ01pc3NpbmcgY2Fub25pY2FsIG5hbWUgZm9yICRyZWZlcmVuY2UnKTsKICAgICAgfQogICAgICBjaGVja0Nhbm9uaWNhbE5hbWUobmFtZSk7CiAgICAgIHdyaXRlVUludDMwKG5hbWUuaW5kZXggKyAxKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVOb25OdWxsUmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKICAgIGlmIChyZWZlcmVuY2UgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignR290IG51bGwgcmVmZXJlbmNlJyk7CiAgICB9IGVsc2UgewogICAgICBDYW5vbmljYWxOYW1lIG5hbWUgPSByZWZlcmVuY2UuY2Fub25pY2FsTmFtZTsKICAgICAgaWYgKG5hbWUgPT0gbnVsbCkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdNaXNzaW5nIGNhbm9uaWNhbCBuYW1lIGZvciAkcmVmZXJlbmNlJyk7CiAgICAgIH0KICAgICAgY2hlY2tDYW5vbmljYWxOYW1lKG5hbWUpOwogICAgICB3cml0ZVVJbnQzMChuYW1lLmluZGV4ICsgMSk7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrQ2Fub25pY2FsTmFtZShDYW5vbmljYWxOYW1lIG5vZGUpIHsKICAgIGlmIChfa25vd25DYW5vbmljYWxOYW1lTm9uUm9vdFRvcHMuY29udGFpbnMobm9kZS5ub25Sb290VG9wKSkgcmV0dXJuOwogICAgaWYgKG5vZGUgPT0gbnVsbCB8fCBub2RlLmlzUm9vdCkgcmV0dXJuOwogICAgaWYgKF9yZWluZGV4ZWRDYW5vbmljYWxOYW1lcy5jb250YWlucyhub2RlKSkgcmV0dXJuOwoKICAgIGNoZWNrQ2Fub25pY2FsTmFtZShub2RlLnBhcmVudCk7CiAgICBub2RlLmluZGV4ID0gX2Nhbm9uaWNhbE5hbWVMaXN0Lmxlbmd0aDsKICAgIF9jYW5vbmljYWxOYW1lTGlzdC5hZGQobm9kZSk7CiAgICBfcmVpbmRleGVkQ2Fub25pY2FsTmFtZXMuYWRkKG5vZGUpOwogIH0KCiAgdm9pZCB3cml0ZU51bGxBbGxvd2VkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZShDYW5vbmljYWxOYW1lIG5hbWUpIHsKICAgIGlmIChuYW1lID09IG51bGwpIHsKICAgICAgd3JpdGVVSW50MzAoMCk7CiAgICB9IGVsc2UgewogICAgICBjaGVja0Nhbm9uaWNhbE5hbWUobmFtZSk7CiAgICAgIHdyaXRlVUludDMwKG5hbWUuaW5kZXggKyAxKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVOb25OdWxsQ2Fub25pY2FsTmFtZVJlZmVyZW5jZShDYW5vbmljYWxOYW1lIG5hbWUpIHsKICAgIGlmIChuYW1lID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAnRXhwZWN0ZWQgYSBjYW5vbmljYWwgbmFtZSB0byBiZSB2YWxpZCBidXQgd2FzIGBudWxsYC4nKTsKICAgIH0gZWxzZSB7CiAgICAgIGNoZWNrQ2Fub25pY2FsTmFtZShuYW1lKTsKICAgICAgd3JpdGVVSW50MzAobmFtZS5pbmRleCArIDEpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUxpYnJhcnlSZWZlcmVuY2UoTGlicmFyeSBub2RlLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKG5vZGUuY2Fub25pY2FsTmFtZSA9PSBudWxsICYmICFhbGxvd051bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAnRXhwZWN0ZWQgYSBsaWJyYXJ5IHJlZmVyZW5jZSB0byBiZSB2YWxpZCBidXQgd2FzIGBudWxsYC4nKTsKICAgIH0KICAgIHdyaXRlTnVsbEFsbG93ZWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKG5vZGUuY2Fub25pY2FsTmFtZSk7CiAgfQoKICB3cml0ZU9mZnNldChpbnQgb2Zmc2V0KSB7CiAgICAvLyBUT0RPKGplbnNqKTogRGVsdGEtZW5jb2RpbmcuCiAgICAvLyBGaWxlIG9mZnNldCByYW5nZXMgZnJvbSAtMSBhbmQgdXAsCiAgICAvLyBidXQgaXMgaGVyZSBzYXZlZCBhcyB1bnNpZ25lZCAodGh1cyB0aGUgKzEpCiAgICBpZiAoIWluY2x1ZGVPZmZzZXRzKSB7CiAgICAgIHdyaXRlVUludDMwKDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVVSW50MzAob2Zmc2V0ICsgMSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlQ2xhc3NSZWZlcmVuY2UoQ2xhc3MgY2xhc3NfKSB7CiAgICBpZiAoY2xhc3NfID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAnRXhwZWN0ZWQgYSBjbGFzcyByZWZlcmVuY2UgdG8gYmUgdmFsaWQgYnV0IHdhcyBgbnVsbGAuJyk7CiAgICB9CiAgICB3cml0ZU5vbk51bGxDYW5vbmljYWxOYW1lUmVmZXJlbmNlKGdldENhbm9uaWNhbE5hbWVPZkNsYXNzKGNsYXNzXykpOwogIH0KCiAgdm9pZCB3cml0ZU5hbWUoTmFtZSBub2RlKSB7CiAgICBpZiAoX21ldGFkYXRhU3Vic2VjdGlvbnMgIT0gbnVsbCkgewogICAgICBfd3JpdGVOb2RlTWV0YWRhdGEobm9kZSk7CiAgICB9CiAgICB3cml0ZVN0cmluZ1JlZmVyZW5jZShub2RlLm5hbWUpOwogICAgLy8gVE9ETzogQ29uc2lkZXIgYSBtb3JlIGNvbXByZXNzZWQgZm9ybWF0IGZvciBwcml2YXRlIG5hbWVzIHdpdGhpbiB0aGUKICAgIC8vIGVuY2xvc2luZyBsaWJyYXJ5LgogICAgaWYgKG5vZGUuaXNQcml2YXRlKSB7CiAgICAgIHdyaXRlTGlicmFyeVJlZmVyZW5jZShub2RlLmxpYnJhcnkpOwogICAgfQogIH0KCiAgYm9vbCBpbnNpZGVFeHRlcm5hbExpYnJhcnkgPSBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpYnJhcnkoTGlicmFyeSBub2RlKSB7CiAgICBpbnNpZGVFeHRlcm5hbExpYnJhcnkgPSBub2RlLmlzRXh0ZXJuYWw7CiAgICBsaWJyYXJ5T2Zmc2V0cy5hZGQoZ2V0QnVmZmVyT2Zmc2V0KCkpOwogICAgd3JpdGVCeXRlKG5vZGUuZmxhZ3MpOwoKICAgIHdyaXRlVUludDMwKG5vZGUubGFuZ3VhZ2VWZXJzaW9uTWFqb3IpOwogICAgd3JpdGVVSW50MzAobm9kZS5sYW5ndWFnZVZlcnNpb25NaW5vcik7CgogICAgd3JpdGVOb25OdWxsQ2Fub25pY2FsTmFtZVJlZmVyZW5jZShnZXRDYW5vbmljYWxOYW1lT2ZMaWJyYXJ5KG5vZGUpKTsKICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKG5vZGUubmFtZSA/PyAnJyk7CiAgICB3cml0ZVVyaVJlZmVyZW5jZShub2RlLmZpbGVVcmkpOwogICAgd3JpdGVMaXN0T2ZTdHJpbmdzKG5vZGUucHJvYmxlbXNBc0pzb24pOwogICAgZW50ZXJTY29wZShtZW1iZXJTY29wZTogdHJ1ZSk7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgd3JpdGVMaWJyYXJ5RGVwZW5kZW5jaWVzKG5vZGUpOwogICAgd3JpdGVBZGRpdGlvbmFsRXhwb3J0cyhub2RlLmFkZGl0aW9uYWxFeHBvcnRzKTsKICAgIHdyaXRlTGlicmFyeVBhcnRzKG5vZGUpOwogICAgbGVhdmVTY29wZShtZW1iZXJTY29wZTogdHJ1ZSk7CgogICAgd3JpdGVUeXBlZGVmTm9kZUxpc3Qobm9kZS50eXBlZGVmcyk7CiAgICBjbGFzc09mZnNldHMgPSBuZXcgTGlzdDxpbnQ+KCk7CiAgICB3cml0ZUNsYXNzTm9kZUxpc3Qobm9kZS5jbGFzc2VzKTsKICAgIGNsYXNzT2Zmc2V0cy5hZGQoZ2V0QnVmZmVyT2Zmc2V0KCkpOwogICAgd3JpdGVGaWVsZE5vZGVMaXN0KG5vZGUuZmllbGRzKTsKICAgIHByb2NlZHVyZU9mZnNldHMgPSBuZXcgTGlzdDxpbnQ+KCk7CiAgICB3cml0ZVByb2NlZHVyZU5vZGVMaXN0KG5vZGUucHJvY2VkdXJlcyk7CiAgICBwcm9jZWR1cmVPZmZzZXRzLmFkZChnZXRCdWZmZXJPZmZzZXQoKSk7CgogICAgLy8gRHVtcCBhbGwgc291cmNlLXJlZmVyZW5jZXMgdXNlZCBpbiB0aGlzIGxpYnJhcnk7IHVzZWQgYnkgdGhlIFZNLgogICAgaW50IHNvdXJjZVJlZmVyZW5jZXNPZmZzZXQgPSBnZXRCdWZmZXJPZmZzZXQoKTsKICAgIGludCBzb3VyY2VSZWZlcmVuY2VzQ291bnQgPSAwOwogICAgLy8gTm90ZTogV2Ugc3RhcnQgYXQgMSBiZWNhdXNlIDAgaXMgdGhlIG51bGwtZW50cnkgYW5kIHdlIGRvbid0IHdhbnQgdG8KICAgIC8vIGluY2x1ZGUgdGhhdC4KICAgIGZvciAoaW50IGkgPSAxOyBpIDwgX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uSW5MaWJyYXJ5Lmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChfc291cmNlc0Zyb21SZWFsSW1wbGVtZW50YXRpb25JbkxpYnJhcnlbaV0gPT0gdHJ1ZSkgewogICAgICAgIHNvdXJjZVJlZmVyZW5jZXNDb3VudCsrOwogICAgICB9CiAgICB9CiAgICB3cml0ZVVJbnQzMChzb3VyY2VSZWZlcmVuY2VzQ291bnQpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBfc291cmNlc0Zyb21SZWFsSW1wbGVtZW50YXRpb25JbkxpYnJhcnkubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKF9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbkluTGlicmFyeVtpXSA9PSB0cnVlKSB7CiAgICAgICAgd3JpdGVVSW50MzAoaSk7CiAgICAgICAgX3NvdXJjZXNGcm9tUmVhbEltcGxlbWVudGF0aW9uSW5MaWJyYXJ5W2ldID0gZmFsc2U7CiAgICAgIH0KICAgIH0KCiAgICAvLyBGaXhlZC1zaXplIGludHMgYXQgdGhlIGVuZCB1c2VkIGFzIGFuIGluZGV4LgogICAgd3JpdGVVSW50MzIoc291cmNlUmVmZXJlbmNlc09mZnNldCk7CiAgICBhc3NlcnQoY2xhc3NPZmZzZXRzLmxlbmd0aCA+IDApOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc09mZnNldHMubGVuZ3RoOyArK2kpIHsKICAgICAgaW50IG9mZnNldCA9IGNsYXNzT2Zmc2V0c1tpXTsKICAgICAgd3JpdGVVSW50MzIob2Zmc2V0KTsKICAgIH0KICAgIHdyaXRlVUludDMyKGNsYXNzT2Zmc2V0cy5sZW5ndGggLSAxKTsKCiAgICBhc3NlcnQocHJvY2VkdXJlT2Zmc2V0cy5sZW5ndGggPiAwKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvY2VkdXJlT2Zmc2V0cy5sZW5ndGg7ICsraSkgewogICAgICBpbnQgb2Zmc2V0ID0gcHJvY2VkdXJlT2Zmc2V0c1tpXTsKICAgICAgd3JpdGVVSW50MzIob2Zmc2V0KTsKICAgIH0KICAgIHdyaXRlVUludDMyKHByb2NlZHVyZU9mZnNldHMubGVuZ3RoIC0gMSk7CiAgfQoKICB2b2lkIHdyaXRlTGlicmFyeURlcGVuZGVuY2llcyhMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIF9saWJyYXJ5RGVwZW5kZW5jeUluZGV4ID0gbGlicmFyeS5kZXBlbmRlbmNpZXMuaXNFbXB0eQogICAgICAgID8gY29uc3QgPExpYnJhcnlEZXBlbmRlbmN5LCBpbnQ+e30KICAgICAgICA6IDxMaWJyYXJ5RGVwZW5kZW5jeSwgaW50Pnt9OwogICAgd3JpdGVVSW50MzAobGlicmFyeS5kZXBlbmRlbmNpZXMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlicmFyeS5kZXBlbmRlbmNpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0Tm9kZSA9IGxpYnJhcnkuZGVwZW5kZW5jaWVzW2ldOwogICAgICBfbGlicmFyeURlcGVuZGVuY3lJbmRleFtpbXBvcnROb2RlXSA9IGk7CiAgICAgIHdyaXRlTGlicmFyeURlcGVuZGVuY3koaW1wb3J0Tm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlQWRkaXRpb25hbEV4cG9ydHMoTGlzdDxSZWZlcmVuY2U+IGFkZGl0aW9uYWxFeHBvcnRzKSB7CiAgICB3cml0ZVVJbnQzMChhZGRpdGlvbmFsRXhwb3J0cy5sZW5ndGgpOwogICAgZm9yIChSZWZlcmVuY2UgcmVmIGluIGFkZGl0aW9uYWxFeHBvcnRzKSB7CiAgICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShyZWYpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUxpYnJhcnlEZXBlbmRlbmN5KExpYnJhcnlEZXBlbmRlbmN5IG5vZGUpIHsKICAgIGlmIChfbWV0YWRhdGFTdWJzZWN0aW9ucyAhPSBudWxsKSB7CiAgICAgIF93cml0ZU5vZGVNZXRhZGF0YShub2RlKTsKICAgIH0KICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZUJ5dGUobm9kZS5mbGFncyk7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgd3JpdGVMaWJyYXJ5UmVmZXJlbmNlKG5vZGUudGFyZ2V0TGlicmFyeSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKG5vZGUubmFtZSA/PyAnJyk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUuY29tYmluYXRvcnMpOwogIH0KCiAgdm9pZCB2aXNpdENvbWJpbmF0b3IoQ29tYmluYXRvciBub2RlKSB7CiAgICB3cml0ZUJ5dGUobm9kZS5pc1Nob3cgPyAxIDogMCk7CiAgICB3cml0ZVN0cmluZ1JlZmVyZW5jZUxpc3Qobm9kZS5uYW1lcyk7CiAgfQoKICB2b2lkIHdyaXRlTGlicmFyeVBhcnRzKExpYnJhcnkgbGlicmFyeSkgewogICAgd3JpdGVVSW50MzAobGlicmFyeS5wYXJ0cy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaWJyYXJ5LnBhcnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIExpYnJhcnlQYXJ0IHBhcnROb2RlID0gbGlicmFyeS5wYXJ0c1tpXTsKICAgICAgd3JpdGVMaWJyYXJ5UGFydChwYXJ0Tm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlTGlicmFyeVBhcnQoTGlicmFyeVBhcnQgbm9kZSkgewogICAgaWYgKF9tZXRhZGF0YVN1YnNlY3Rpb25zICE9IG51bGwpIHsKICAgICAgX3dyaXRlTm9kZU1ldGFkYXRhKG5vZGUpOwogICAgfQogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKG5vZGUucGFydFVyaSk7CiAgfQoKICB2b2lkIHZpc2l0VHlwZWRlZihUeXBlZGVmIG5vZGUpIHsKICAgIGVudGVyU2NvcGUobWVtYmVyU2NvcGU6IHRydWUpOwogICAgd3JpdGVOb25OdWxsQ2Fub25pY2FsTmFtZVJlZmVyZW5jZShnZXRDYW5vbmljYWxOYW1lT2ZUeXBlZGVmKG5vZGUpKTsKICAgIHdyaXRlVXJpUmVmZXJlbmNlKG5vZGUuZmlsZVVyaSk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2Uobm9kZS5uYW1lKTsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CgogICAgZW50ZXJTY29wZSh0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVycywgdmFyaWFibGVTY29wZTogdHJ1ZSk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgd3JpdGVOb2RlKG5vZGUudHlwZSk7CgogICAgZW50ZXJTY29wZSh0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVyc09mRnVuY3Rpb25UeXBlKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS50eXBlUGFyYW1ldGVyc09mRnVuY3Rpb25UeXBlKTsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycyk7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KG5vZGUubmFtZWRQYXJhbWV0ZXJzKTsKCiAgICBsZWF2ZVNjb3BlKHR5cGVQYXJhbWV0ZXJzOiBub2RlLnR5cGVQYXJhbWV0ZXJzT2ZGdW5jdGlvblR5cGUpOwogICAgbGVhdmVTY29wZSh0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVycywgdmFyaWFibGVTY29wZTogdHJ1ZSk7CiAgICBsZWF2ZVNjb3BlKG1lbWJlclNjb3BlOiB0cnVlKTsKICB9CgogIHZvaWQgd3JpdGVBbm5vdGF0aW9uKEV4cHJlc3Npb24gYW5ub3RhdGlvbikgewogICAgd3JpdGVOb2RlKGFubm90YXRpb24pOwogIH0KCiAgdm9pZCB3cml0ZUFubm90YXRpb25MaXN0KExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMpIHsKICAgIGZpbmFsIGxlbiA9IGFubm90YXRpb25zLmxlbmd0aDsKICAgIHdyaXRlVUludDMwKGxlbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGZpbmFsIGFubm90YXRpb24gPSBhbm5vdGF0aW9uc1tpXTsKICAgICAgd3JpdGVBbm5vdGF0aW9uKGFubm90YXRpb24pOwogICAgfQogIH0KCiAgaW50IF9lbmNvZGVDbGFzc0ZsYWdzKGludCBmbGFncywgQ2xhc3NMZXZlbCBsZXZlbCkgewogICAgYXNzZXJ0KChmbGFncyAmIENsYXNzLkxldmVsTWFzaykgPT0gMCk7CiAgICBmaW5hbCBsZXZlbEluZGV4ID0gbGV2ZWwuaW5kZXggLSAxOwogICAgYXNzZXJ0KChsZXZlbEluZGV4ICYgQ2xhc3MuTGV2ZWxNYXNrKSA9PSBsZXZlbEluZGV4KTsKICAgIHJldHVybiBmbGFncyB8IGxldmVsSW5kZXg7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q2xhc3MoQ2xhc3Mgbm9kZSkgewogICAgY2xhc3NPZmZzZXRzLmFkZChnZXRCdWZmZXJPZmZzZXQoKSk7CgogICAgaWYgKG5vZGUuaXNBbm9ueW1vdXNNaXhpbikgX2N1cnJlbnRseUluTm9uaW1wbGVtZW50YXRpb24gPSB0cnVlOwoKICAgIGludCBmbGFncyA9IF9lbmNvZGVDbGFzc0ZsYWdzKG5vZGUuZmxhZ3MsIG5vZGUubGV2ZWwpOwogICAgaWYgKG5vZGUuY2Fub25pY2FsTmFtZSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdNaXNzaW5nIGNhbm9uaWNhbCBuYW1lIGZvciAkbm9kZScpOwogICAgfQogICAgd3JpdGVCeXRlKFRhZy5DbGFzcyk7CiAgICB3cml0ZU5vbk51bGxDYW5vbmljYWxOYW1lUmVmZXJlbmNlKGdldENhbm9uaWNhbE5hbWVPZkNsYXNzKG5vZGUpKTsKICAgIHdyaXRlVXJpUmVmZXJlbmNlKG5vZGUuZmlsZVVyaSk7CiAgICB3cml0ZU9mZnNldChub2RlLnN0YXJ0RmlsZU9mZnNldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlRW5kT2Zmc2V0KTsKCiAgICB3cml0ZUJ5dGUoZmxhZ3MpOwogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2Uobm9kZS5uYW1lID8/ICcnKTsKCiAgICBlbnRlclNjb3BlKG1lbWJlclNjb3BlOiB0cnVlKTsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICBsZWF2ZVNjb3BlKG1lbWJlclNjb3BlOiB0cnVlKTsKICAgIGVudGVyU2NvcGUodHlwZVBhcmFtZXRlcnM6IG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIHdyaXRlT3B0aW9uYWxOb2RlKG5vZGUuc3VwZXJ0eXBlKTsKICAgIHdyaXRlT3B0aW9uYWxOb2RlKG5vZGUubWl4ZWRJblR5cGUpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLmltcGxlbWVudGVkVHlwZXMpOwogICAgd3JpdGVGaWVsZE5vZGVMaXN0KG5vZGUuZmllbGRzKTsKICAgIHdyaXRlQ29uc3RydWN0b3JOb2RlTGlzdChub2RlLmNvbnN0cnVjdG9ycyk7CiAgICBwcm9jZWR1cmVPZmZzZXRzID0gPGludD5bXTsKICAgIHdyaXRlUHJvY2VkdXJlTm9kZUxpc3Qobm9kZS5wcm9jZWR1cmVzKTsKICAgIHByb2NlZHVyZU9mZnNldHMuYWRkKGdldEJ1ZmZlck9mZnNldCgpKTsKICAgIHdyaXRlUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JOb2RlTGlzdCgKICAgICAgICBub2RlLnJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycyk7CiAgICBsZWF2ZVNjb3BlKHR5cGVQYXJhbWV0ZXJzOiBub2RlLnR5cGVQYXJhbWV0ZXJzKTsKCiAgICBhc3NlcnQocHJvY2VkdXJlT2Zmc2V0cy5sZW5ndGggPiAwKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvY2VkdXJlT2Zmc2V0cy5sZW5ndGg7ICsraSkgewogICAgICBpbnQgb2Zmc2V0ID0gcHJvY2VkdXJlT2Zmc2V0c1tpXTsKICAgICAgd3JpdGVVSW50MzIob2Zmc2V0KTsKICAgIH0KICAgIHdyaXRlVUludDMyKHByb2NlZHVyZU9mZnNldHMubGVuZ3RoIC0gMSk7CiAgICBfY3VycmVudGx5SW5Ob25pbXBsZW1lbnRhdGlvbiA9IGZhbHNlOwogIH0KCiAgc3RhdGljIGZpbmFsIE5hbWUgX2VtcHR5TmFtZSA9IG5ldyBOYW1lKCcnKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0cnVjdG9yKENvbnN0cnVjdG9yIG5vZGUpIHsKICAgIGlmIChub2RlLmNhbm9uaWNhbE5hbWUgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignTWlzc2luZyBjYW5vbmljYWwgbmFtZSBmb3IgJG5vZGUnKTsKICAgIH0KICAgIGVudGVyU2NvcGUobWVtYmVyU2NvcGU6IHRydWUpOwogICAgd3JpdGVCeXRlKFRhZy5Db25zdHJ1Y3Rvcik7CiAgICB3cml0ZU5vbk51bGxDYW5vbmljYWxOYW1lUmVmZXJlbmNlKGdldENhbm9uaWNhbE5hbWVPZk1lbWJlcihub2RlKSk7CiAgICB3cml0ZVVyaVJlZmVyZW5jZShub2RlLmZpbGVVcmkpOwogICAgd3JpdGVPZmZzZXQobm9kZS5zdGFydEZpbGVPZmZzZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZUVuZE9mZnNldCk7CgogICAgd3JpdGVCeXRlKG5vZGUuZmxhZ3MpOwogICAgd3JpdGVOYW1lKG5vZGUubmFtZSA/PyBfZW1wdHlOYW1lKTsKCiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgYXNzZXJ0KG5vZGUuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMuaXNFbXB0eSk7CiAgICB3cml0ZUZ1bmN0aW9uTm9kZShub2RlLmZ1bmN0aW9uKTsKICAgIC8vIFBhcmFtZXRlcnMgYXJlIGluIHNjb3BlIGluIHRoZSBpbml0aWFsaXplcnMuCiAgICBfdmFyaWFibGVJbmRleGVyID8/PSBuZXcgVmFyaWFibGVJbmRleGVyKCk7CiAgICBfdmFyaWFibGVJbmRleGVyLnJlc3RvcmVTY29wZShub2RlLmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCArCiAgICAgICAgbm9kZS5mdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMubGVuZ3RoKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5pbml0aWFsaXplcnMpOwoKICAgIGxlYXZlU2NvcGUobWVtYmVyU2NvcGU6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByb2NlZHVyZShQcm9jZWR1cmUgbm9kZSkgewogICAgcHJvY2VkdXJlT2Zmc2V0cy5hZGQoZ2V0QnVmZmVyT2Zmc2V0KCkpOwoKICAgIGlmIChub2RlLmNhbm9uaWNhbE5hbWUgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignTWlzc2luZyBjYW5vbmljYWwgbmFtZSBmb3IgJG5vZGUnKTsKICAgIH0KCiAgICBmaW5hbCBib29sIGN1cnJlbnRseUluTm9uaW1wbGVtZW50YXRpb25TYXZlZCA9CiAgICAgICAgX2N1cnJlbnRseUluTm9uaW1wbGVtZW50YXRpb247CiAgICBpZiAobm9kZS5pc05vU3VjaE1ldGhvZEZvcndhcmRlciB8fCBub2RlLmlzU3ludGhldGljRm9yd2FyZGVyKSB7CiAgICAgIF9jdXJyZW50bHlJbk5vbmltcGxlbWVudGF0aW9uID0gdHJ1ZTsKICAgIH0KCiAgICBlbnRlclNjb3BlKG1lbWJlclNjb3BlOiB0cnVlKTsKICAgIHdyaXRlQnl0ZShUYWcuUHJvY2VkdXJlKTsKICAgIHdyaXRlTm9uTnVsbENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoZ2V0Q2Fub25pY2FsTmFtZU9mTWVtYmVyKG5vZGUpKTsKICAgIHdyaXRlVXJpUmVmZXJlbmNlKG5vZGUuZmlsZVVyaSk7CiAgICB3cml0ZU9mZnNldChub2RlLnN0YXJ0RmlsZU9mZnNldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlRW5kT2Zmc2V0KTsKICAgIHdyaXRlQnl0ZShub2RlLmtpbmQuaW5kZXgpOwogICAgd3JpdGVCeXRlKG5vZGUuZmxhZ3MpOwogICAgd3JpdGVOYW1lKG5vZGUubmFtZSA/PyBfZW1wdHlOYW1lKTsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZU51bGxBbGxvd2VkUmVmZXJlbmNlKG5vZGUuZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZU51bGxBbGxvd2VkUmVmZXJlbmNlKG5vZGUuZm9yd2FyZGluZ1N0dWJJbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVPcHRpb25hbEZ1bmN0aW9uTm9kZShub2RlLmZ1bmN0aW9uKTsKICAgIGxlYXZlU2NvcGUobWVtYmVyU2NvcGU6IHRydWUpOwoKICAgIF9jdXJyZW50bHlJbk5vbmltcGxlbWVudGF0aW9uID0gY3VycmVudGx5SW5Ob25pbXBsZW1lbnRhdGlvblNhdmVkOwogICAgYXNzZXJ0KChub2RlLmZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXQgIT0gbnVsbCkgfHwKICAgICAgICAhKG5vZGUuaXNGb3J3YXJkaW5nU3R1YiAmJiBub2RlLmZ1bmN0aW9uLmJvZHkgIT0gbnVsbCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZpZWxkKEZpZWxkIG5vZGUpIHsKICAgIGlmIChub2RlLmNhbm9uaWNhbE5hbWUgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignTWlzc2luZyBjYW5vbmljYWwgbmFtZSBmb3IgJG5vZGUnKTsKICAgIH0KICAgIGVudGVyU2NvcGUobWVtYmVyU2NvcGU6IHRydWUpOwogICAgd3JpdGVCeXRlKFRhZy5GaWVsZCk7CiAgICB3cml0ZU5vbk51bGxDYW5vbmljYWxOYW1lUmVmZXJlbmNlKGdldENhbm9uaWNhbE5hbWVPZk1lbWJlcihub2RlKSk7CiAgICB3cml0ZVVyaVJlZmVyZW5jZShub2RlLmZpbGVVcmkpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZUVuZE9mZnNldCk7CiAgICB3cml0ZUJ5dGUobm9kZS5mbGFncyk7CiAgICB3cml0ZU5hbWUobm9kZS5uYW1lKTsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZU5vZGUobm9kZS50eXBlKTsKICAgIHdyaXRlT3B0aW9uYWxOb2RlKG5vZGUuaW5pdGlhbGl6ZXIpOwogICAgbGVhdmVTY29wZShtZW1iZXJTY29wZTogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IoUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3Igbm9kZSkgewogICAgaWYgKG5vZGUuY2Fub25pY2FsTmFtZSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdNaXNzaW5nIGNhbm9uaWNhbCBuYW1lIGZvciAkbm9kZScpOwogICAgfQogICAgd3JpdGVCeXRlKFRhZy5SZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcik7CiAgICBlbnRlclNjb3BlKAogICAgICAgIHR5cGVQYXJhbWV0ZXJzOiBub2RlLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgIG1lbWJlclNjb3BlOiB0cnVlLAogICAgICAgIHZhcmlhYmxlU2NvcGU6IHRydWUpOwogICAgd3JpdGVOb25OdWxsQ2Fub25pY2FsTmFtZVJlZmVyZW5jZShnZXRDYW5vbmljYWxOYW1lT2ZNZW1iZXIobm9kZSkpOwogICAgd3JpdGVVcmlSZWZlcmVuY2Uobm9kZS5maWxlVXJpKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVFbmRPZmZzZXQpOwogICAgd3JpdGVCeXRlKG5vZGUuZmxhZ3MpOwogICAgd3JpdGVOYW1lKG5vZGUubmFtZSk7CgogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUudHlwZUFyZ3VtZW50cyk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgd3JpdGVVSW50MzAobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggKyBub2RlLm5hbWVkUGFyYW1ldGVycy5sZW5ndGgpOwogICAgd3JpdGVVSW50MzAobm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KTsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycyk7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KG5vZGUubmFtZWRQYXJhbWV0ZXJzKTsKCiAgICBsZWF2ZVNjb3BlKAogICAgICAgIHR5cGVQYXJhbWV0ZXJzOiBub2RlLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgIG1lbWJlclNjb3BlOiB0cnVlLAogICAgICAgIHZhcmlhYmxlU2NvcGU6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludmFsaWRJbml0aWFsaXplcihJbnZhbGlkSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5JbnZhbGlkSW5pdGlhbGl6ZXIpOwogICAgd3JpdGVCeXRlKG5vZGUuaXNTeW50aGV0aWMgPyAxIDogMCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RmllbGRJbml0aWFsaXplcihGaWVsZEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuRmllbGRJbml0aWFsaXplcik7CiAgICB3cml0ZUJ5dGUobm9kZS5pc1N5bnRoZXRpYyA/IDEgOiAwKTsKICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShub2RlLmZpZWxkUmVmZXJlbmNlKTsKICAgIHdyaXRlTm9kZShub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdXBlckluaXRpYWxpemVyKFN1cGVySW5pdGlhbGl6ZXIgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5TdXBlckluaXRpYWxpemVyKTsKICAgIHdyaXRlQnl0ZShub2RlLmlzU3ludGhldGljID8gMSA6IDApOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZUFyZ3VtZW50c05vZGUobm9kZS5hcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoUmVkaXJlY3RpbmdJbml0aWFsaXplciBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIpOwogICAgd3JpdGVCeXRlKG5vZGUuaXNTeW50aGV0aWMgPyAxIDogMCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlQXJndW1lbnRzTm9kZShub2RlLmFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TG9jYWxJbml0aWFsaXplcihMb2NhbEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuTG9jYWxJbml0aWFsaXplcik7CiAgICB3cml0ZUJ5dGUobm9kZS5pc1N5bnRoZXRpYyA/IDEgOiAwKTsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLnZhcmlhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBc3NlcnRJbml0aWFsaXplcihBc3NlcnRJbml0aWFsaXplciBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkFzc2VydEluaXRpYWxpemVyKTsKICAgIHdyaXRlQnl0ZShub2RlLmlzU3ludGhldGljID8gMSA6IDApOwogICAgd3JpdGVOb2RlKG5vZGUuc3RhdGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvbk5vZGUoRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuRnVuY3Rpb25Ob2RlKTsKICAgIGVudGVyU2NvcGUodHlwZVBhcmFtZXRlcnM6IG5vZGUudHlwZVBhcmFtZXRlcnMsIHZhcmlhYmxlU2NvcGU6IHRydWUpOwogICAgTGFiZWxJbmRleGVyIG9sZExhYmVscyA9IF9sYWJlbEluZGV4ZXI7CiAgICBfbGFiZWxJbmRleGVyID0gbnVsbDsKICAgIFN3aXRjaENhc2VJbmRleGVyIG9sZENhc2VzID0gX3N3aXRjaENhc2VJbmRleGVyOwogICAgX3N3aXRjaENhc2VJbmRleGVyID0gbnVsbDsKICAgIC8vIE5vdGU6IEZ1bmN0aW9uTm9kZSBoYXMgbm8gdGFnLgogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZUVuZE9mZnNldCk7CiAgICB3cml0ZUJ5dGUobm9kZS5hc3luY01hcmtlci5pbmRleCk7CiAgICB3cml0ZUJ5dGUobm9kZS5kYXJ0QXN5bmNNYXJrZXIuaW5kZXgpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIHdyaXRlVUludDMwKG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoICsgbm9kZS5uYW1lZFBhcmFtZXRlcnMubGVuZ3RoKTsKICAgIHdyaXRlVUludDMwKG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpOwogICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChub2RlLm5hbWVkUGFyYW1ldGVycyk7CiAgICB3cml0ZU5vZGUobm9kZS5yZXR1cm5UeXBlKTsKICAgIHdyaXRlT3B0aW9uYWxOb2RlKG5vZGUuYm9keSk7CiAgICBfbGFiZWxJbmRleGVyID0gb2xkTGFiZWxzOwogICAgX3N3aXRjaENhc2VJbmRleGVyID0gb2xkQ2FzZXM7CiAgICBsZWF2ZVNjb3BlKHR5cGVQYXJhbWV0ZXJzOiBub2RlLnR5cGVQYXJhbWV0ZXJzLCB2YXJpYWJsZVNjb3BlOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnZhbGlkRXhwcmVzc2lvbihJbnZhbGlkRXhwcmVzc2lvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkludmFsaWRFeHByZXNzaW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZVN0cmluZ1JlZmVyZW5jZShub2RlLm1lc3NhZ2UgPz8gJycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlR2V0KFZhcmlhYmxlR2V0IG5vZGUpIHsKICAgIF92YXJpYWJsZUluZGV4ZXIgPz89IG5ldyBWYXJpYWJsZUluZGV4ZXIoKTsKICAgIGludCBpbmRleCA9IF92YXJpYWJsZUluZGV4ZXJbbm9kZS52YXJpYWJsZV07CiAgICBhc3NlcnQoaW5kZXggIT0gbnVsbCk7CiAgICBpZiAoaW5kZXggJiBUYWcuU3BlY2lhbGl6ZWRQYXlsb2FkTWFzayA9PSBpbmRleCAmJgogICAgICAgIG5vZGUucHJvbW90ZWRUeXBlID09IG51bGwpIHsKICAgICAgd3JpdGVCeXRlKFRhZy5TcGVjaWFsaXplZFZhcmlhYmxlR2V0ICsgaW5kZXgpOwogICAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgICB3cml0ZVVJbnQzMChub2RlLnZhcmlhYmxlLmJpbmFyeU9mZnNldE5vVGFnKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuVmFyaWFibGVHZXQpOwogICAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgICB3cml0ZVVJbnQzMChub2RlLnZhcmlhYmxlLmJpbmFyeU9mZnNldE5vVGFnKTsKICAgICAgd3JpdGVVSW50MzAoaW5kZXgpOwogICAgICB3cml0ZU9wdGlvbmFsTm9kZShub2RlLnByb21vdGVkVHlwZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVTZXQoVmFyaWFibGVTZXQgbm9kZSkgewogICAgX3ZhcmlhYmxlSW5kZXhlciA/Pz0gbmV3IFZhcmlhYmxlSW5kZXhlcigpOwogICAgaW50IGluZGV4ID0gX3ZhcmlhYmxlSW5kZXhlcltub2RlLnZhcmlhYmxlXTsKICAgIGFzc2VydChpbmRleCAhPSBudWxsKTsKICAgIGlmIChpbmRleCAmIFRhZy5TcGVjaWFsaXplZFBheWxvYWRNYXNrID09IGluZGV4KSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuU3BlY2lhbGl6ZWRWYXJpYWJsZVNldCArIGluZGV4KTsKICAgICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgICAgd3JpdGVVSW50MzAobm9kZS52YXJpYWJsZS5iaW5hcnlPZmZzZXROb1RhZyk7CiAgICAgIHdyaXRlTm9kZShub2RlLnZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuVmFyaWFibGVTZXQpOwogICAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgICB3cml0ZVVJbnQzMChub2RlLnZhcmlhYmxlLmJpbmFyeU9mZnNldE5vVGFnKTsKICAgICAgd3JpdGVVSW50MzAoaW5kZXgpOwogICAgICB3cml0ZU5vZGUobm9kZS52YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJvcGVydHlHZXQoUHJvcGVydHlHZXQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Qcm9wZXJ0eUdldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUucmVjZWl2ZXIpOwogICAgd3JpdGVOYW1lKG5vZGUubmFtZSk7CiAgICB3cml0ZU51bGxBbGxvd2VkUmVmZXJlbmNlKG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQcm9wZXJ0eVNldChQcm9wZXJ0eVNldCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlByb3BlcnR5U2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS5yZWNlaXZlcik7CiAgICB3cml0ZU5hbWUobm9kZS5uYW1lKTsKICAgIHdyaXRlTm9kZShub2RlLnZhbHVlKTsKICAgIHdyaXRlTnVsbEFsbG93ZWRSZWZlcmVuY2Uobm9kZS5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN1cGVyUHJvcGVydHlHZXQoU3VwZXJQcm9wZXJ0eUdldCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlN1cGVyUHJvcGVydHlHZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTmFtZShub2RlLm5hbWUpOwogICAgd3JpdGVOdWxsQWxsb3dlZFJlZmVyZW5jZShub2RlLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3VwZXJQcm9wZXJ0eVNldChTdXBlclByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuU3VwZXJQcm9wZXJ0eVNldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOYW1lKG5vZGUubmFtZSk7CiAgICB3cml0ZU5vZGUobm9kZS52YWx1ZSk7CiAgICB3cml0ZU51bGxBbGxvd2VkUmVmZXJlbmNlKG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREaXJlY3RQcm9wZXJ0eUdldChEaXJlY3RQcm9wZXJ0eUdldCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkRpcmVjdFByb3BlcnR5R2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS5yZWNlaXZlcik7CiAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERpcmVjdFByb3BlcnR5U2V0KERpcmVjdFByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuRGlyZWN0UHJvcGVydHlTZXQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLnJlY2VpdmVyKTsKICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZU5vZGUobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RhdGljR2V0KFN0YXRpY0dldCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlN0YXRpY0dldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdGF0aWNTZXQoU3RhdGljU2V0IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuU3RhdGljU2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVOb2RlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE1ldGhvZEludm9jYXRpb24oTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLk1ldGhvZEludm9jYXRpb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLnJlY2VpdmVyKTsKICAgIHdyaXRlTmFtZShub2RlLm5hbWUpOwogICAgd3JpdGVBcmd1bWVudHNOb2RlKG5vZGUuYXJndW1lbnRzKTsKICAgIHdyaXRlTnVsbEFsbG93ZWRSZWZlcmVuY2Uobm9kZS5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihTdXBlck1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5TdXBlck1ldGhvZEludm9jYXRpb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTmFtZShub2RlLm5hbWUpOwogICAgd3JpdGVBcmd1bWVudHNOb2RlKG5vZGUuYXJndW1lbnRzKTsKICAgIHdyaXRlTnVsbEFsbG93ZWRSZWZlcmVuY2Uobm9kZS5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERpcmVjdE1ldGhvZEludm9jYXRpb24oRGlyZWN0TWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkRpcmVjdE1ldGhvZEludm9jYXRpb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLnJlY2VpdmVyKTsKICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZUFyZ3VtZW50c05vZGUobm9kZS5hcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0YXRpY0ludm9jYXRpb24oU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUobm9kZS5pc0NvbnN0ID8gVGFnLkNvbnN0U3RhdGljSW52b2NhdGlvbiA6IFRhZy5TdGF0aWNJbnZvY2F0aW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVBcmd1bWVudHNOb2RlKG5vZGUuYXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShub2RlLmlzQ29uc3QKICAgICAgICA/IFRhZy5Db25zdENvbnN0cnVjdG9ySW52b2NhdGlvbgogICAgICAgIDogVGFnLkNvbnN0cnVjdG9ySW52b2NhdGlvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb25OdWxsUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlQXJndW1lbnRzTm9kZShub2RlLmFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXJndW1lbnRzKEFyZ3VtZW50cyBub2RlKSB7CiAgICB3cml0ZVVJbnQzMChub2RlLnBvc2l0aW9uYWwubGVuZ3RoICsgbm9kZS5uYW1lZC5sZW5ndGgpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnR5cGVzKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5wb3NpdGlvbmFsKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5uYW1lZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TmFtZWRFeHByZXNzaW9uKE5hbWVkRXhwcmVzc2lvbiBub2RlKSB7CiAgICB3cml0ZVN0cmluZ1JlZmVyZW5jZShub2RlLm5hbWUpOwogICAgd3JpdGVOb2RlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5vdChOb3Qgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Ob3QpOwogICAgd3JpdGVOb2RlKG5vZGUub3BlcmFuZCk7CiAgfQoKICBpbnQgbG9naWNhbE9wZXJhdG9ySW5kZXgoU3RyaW5nIG9wZXJhdG9yKSB7CiAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7CiAgICAgIGNhc2UgJyYmJzoKICAgICAgICByZXR1cm4gMDsKICAgICAgY2FzZSAnfHwnOgogICAgICAgIHJldHVybiAxOwogICAgfQogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ05vdCBhIGxvZ2ljYWwgb3BlcmF0b3I6ICRvcGVyYXRvcicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKExvZ2ljYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuTG9naWNhbEV4cHJlc3Npb24pOwogICAgd3JpdGVOb2RlKG5vZGUubGVmdCk7CiAgICB3cml0ZUJ5dGUobG9naWNhbE9wZXJhdG9ySW5kZXgobm9kZS5vcGVyYXRvcikpOwogICAgd3JpdGVOb2RlKG5vZGUucmlnaHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbmRpdGlvbmFsRXhwcmVzc2lvbihDb25kaXRpb25hbEV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Db25kaXRpb25hbEV4cHJlc3Npb24pOwogICAgd3JpdGVOb2RlKG5vZGUuY29uZGl0aW9uKTsKICAgIHdyaXRlTm9kZShub2RlLnRoZW4pOwogICAgd3JpdGVOb2RlKG5vZGUub3RoZXJ3aXNlKTsKICAgIHdyaXRlT3B0aW9uYWxOb2RlKG5vZGUuc3RhdGljVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihTdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuU3RyaW5nQ29uY2F0ZW5hdGlvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLmV4cHJlc3Npb25zKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXN0Q29uY2F0ZW5hdGlvbihMaXN0Q29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkxpc3RDb25jYXRlbmF0aW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS50eXBlQXJndW1lbnQpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLmxpc3RzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTZXRDb25jYXRlbmF0aW9uKFNldENvbmNhdGVuYXRpb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5TZXRDb25jYXRlbmF0aW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS50eXBlQXJndW1lbnQpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnNldHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE1hcENvbmNhdGVuYXRpb24oTWFwQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLk1hcENvbmNhdGVuYXRpb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLmtleVR5cGUpOwogICAgd3JpdGVOb2RlKG5vZGUudmFsdWVUeXBlKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5tYXBzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnN0YW5jZUNyZWF0aW9uKEluc3RhbmNlQ3JlYXRpb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5JbnN0YW5jZUNyZWF0aW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2Uobm9kZS5jbGFzc1JlZmVyZW5jZSk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUudHlwZUFyZ3VtZW50cyk7CiAgICB3cml0ZVVJbnQzMChub2RlLmZpZWxkVmFsdWVzLmxlbmd0aCk7CiAgICBub2RlLmZpZWxkVmFsdWVzLmZvckVhY2goKFJlZmVyZW5jZSBmaWVsZFJlZiwgRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2UoZmllbGRSZWYpOwogICAgICB3cml0ZU5vZGUodmFsdWUpOwogICAgfSk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUuYXNzZXJ0cyk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUudW51c2VkQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJc0V4cHJlc3Npb24oSXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuSXNFeHByZXNzaW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS5vcGVyYW5kKTsKICAgIHdyaXRlTm9kZShub2RlLnR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFzRXhwcmVzc2lvbihBc0V4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Bc0V4cHJlc3Npb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlQnl0ZShub2RlLmZsYWdzKTsKICAgIHdyaXRlTm9kZShub2RlLm9wZXJhbmQpOwogICAgd3JpdGVOb2RlKG5vZGUudHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nTGl0ZXJhbChTdHJpbmdMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuU3RyaW5nTGl0ZXJhbCk7CiAgICB3cml0ZVN0cmluZ1JlZmVyZW5jZShub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRMaXRlcmFsKEludExpdGVyYWwgbm9kZSkgewogICAgd3JpdGVJbnRlZ2VyKG5vZGUudmFsdWUpOwogIH0KCiAgd3JpdGVJbnRlZ2VyKGludCB2YWx1ZSkgewogICAgaW50IGJpYXNlZFZhbHVlID0gdmFsdWUgKyBUYWcuU3BlY2lhbGl6ZWRJbnRMaXRlcmFsQmlhczsKICAgIGlmIChiaWFzZWRWYWx1ZSA+PSAwICYmCiAgICAgICAgYmlhc2VkVmFsdWUgJiBUYWcuU3BlY2lhbGl6ZWRQYXlsb2FkTWFzayA9PSBiaWFzZWRWYWx1ZSkgewogICAgICB3cml0ZUJ5dGUoVGFnLlNwZWNpYWxpemVkSW50TGl0ZXJhbCArIGJpYXNlZFZhbHVlKTsKICAgIH0gZWxzZSBpZiAodmFsdWUuYWJzKCkgPj4gMzAgPT0gMCkgewogICAgICBpZiAodmFsdWUgPCAwKSB7CiAgICAgICAgd3JpdGVCeXRlKFRhZy5OZWdhdGl2ZUludExpdGVyYWwpOwogICAgICAgIHdyaXRlVUludDMwKC12YWx1ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd3JpdGVCeXRlKFRhZy5Qb3NpdGl2ZUludExpdGVyYWwpOwogICAgICAgIHdyaXRlVUludDMwKHZhbHVlKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETzogUGljayBhIGJldHRlciBmb3JtYXQgZm9yIGJpZyBpbnQgbGl0ZXJhbHMuCiAgICAgIHdyaXRlQnl0ZShUYWcuQmlnSW50TGl0ZXJhbCk7CiAgICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKCckdmFsdWUnKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREb3VibGVMaXRlcmFsKERvdWJsZUxpdGVyYWwgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Eb3VibGVMaXRlcmFsKTsKICAgIHdyaXRlRG91YmxlKG5vZGUudmFsdWUpOwogIH0KCiAgd3JpdGVEb3VibGUoZG91YmxlIHZhbHVlKSB7CiAgICBfc2luay5hZGREb3VibGUodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvb2xMaXRlcmFsKEJvb2xMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShub2RlLnZhbHVlID8gVGFnLlRydWVMaXRlcmFsIDogVGFnLkZhbHNlTGl0ZXJhbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TnVsbExpdGVyYWwoTnVsbExpdGVyYWwgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5OdWxsTGl0ZXJhbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3ltYm9sTGl0ZXJhbChTeW1ib2xMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuU3ltYm9sTGl0ZXJhbCk7CiAgICB3cml0ZVN0cmluZ1JlZmVyZW5jZShub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlTGl0ZXJhbChUeXBlTGl0ZXJhbCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlR5cGVMaXRlcmFsKTsKICAgIHdyaXRlTm9kZShub2RlLnR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRoaXNFeHByZXNzaW9uKFRoaXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuVGhpc0V4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFJldGhyb3coUmV0aHJvdyBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlJldGhyb3cpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUaHJvdyhUaHJvdyBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlRocm93KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS5leHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXN0TGl0ZXJhbChMaXN0TGl0ZXJhbCBub2RlKSB7CiAgICB3cml0ZUJ5dGUobm9kZS5pc0NvbnN0ID8gVGFnLkNvbnN0TGlzdExpdGVyYWwgOiBUYWcuTGlzdExpdGVyYWwpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLnR5cGVBcmd1bWVudCk7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUuZXhwcmVzc2lvbnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFNldExpdGVyYWwoU2V0TGl0ZXJhbCBub2RlKSB7CiAgICB3cml0ZUJ5dGUobm9kZS5pc0NvbnN0ID8gVGFnLkNvbnN0U2V0TGl0ZXJhbCA6IFRhZy5TZXRMaXRlcmFsKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS50eXBlQXJndW1lbnQpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLmV4cHJlc3Npb25zKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNYXBMaXRlcmFsKE1hcExpdGVyYWwgbm9kZSkgewogICAgd3JpdGVCeXRlKG5vZGUuaXNDb25zdCA/IFRhZy5Db25zdE1hcExpdGVyYWwgOiBUYWcuTWFwTGl0ZXJhbCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUua2V5VHlwZSk7CiAgICB3cml0ZU5vZGUobm9kZS52YWx1ZVR5cGUpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLmVudHJpZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE1hcEVudHJ5KE1hcEVudHJ5IG5vZGUpIHsKICAgIC8vIE5vdGU6IHRoZXJlIGlzIG5vIHRhZyBvbiBNYXBFbnRyeQogICAgd3JpdGVOb2RlKG5vZGUua2V5KTsKICAgIHdyaXRlTm9kZShub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBd2FpdEV4cHJlc3Npb24oQXdhaXRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuQXdhaXRFeHByZXNzaW9uKTsKICAgIHdyaXRlTm9kZShub2RlLm9wZXJhbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihGdW5jdGlvbkV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5GdW5jdGlvbkV4cHJlc3Npb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlRnVuY3Rpb25Ob2RlKG5vZGUuZnVuY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExldChMZXQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5MZXQpOwogICAgX3ZhcmlhYmxlSW5kZXhlciA/Pz0gbmV3IFZhcmlhYmxlSW5kZXhlcigpOwogICAgX3ZhcmlhYmxlSW5kZXhlci5wdXNoU2NvcGUoKTsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLnZhcmlhYmxlKTsKICAgIHdyaXRlTm9kZShub2RlLmJvZHkpOwogICAgX3ZhcmlhYmxlSW5kZXhlci5wb3BTY29wZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJsb2NrRXhwcmVzc2lvbihCbG9ja0V4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5CbG9ja0V4cHJlc3Npb24pOwogICAgX3ZhcmlhYmxlSW5kZXhlciA/Pz0gbmV3IFZhcmlhYmxlSW5kZXhlcigpOwogICAgX3ZhcmlhYmxlSW5kZXhlci5wdXNoU2NvcGUoKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5ib2R5LnN0YXRlbWVudHMpOwogICAgd3JpdGVOb2RlKG5vZGUudmFsdWUpOwogICAgX3ZhcmlhYmxlSW5kZXhlci5wb3BTY29wZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluc3RhbnRpYXRpb24oSW5zdGFudGlhdGlvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkluc3RhbnRpYXRpb24pOwogICAgd3JpdGVOb2RlKG5vZGUuZXhwcmVzc2lvbik7CiAgICB3cml0ZU5vZGVMaXN0KG5vZGUudHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TG9hZExpYnJhcnkoTG9hZExpYnJhcnkgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Mb2FkTGlicmFyeSk7CiAgICB3cml0ZUxpYnJhcnlEZXBlbmRlbmN5UmVmZXJlbmNlKG5vZGUuaW1wb3J0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDaGVja0xpYnJhcnlJc0xvYWRlZChDaGVja0xpYnJhcnlJc0xvYWRlZCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkNoZWNrTGlicmFyeUlzTG9hZGVkKTsKICAgIHdyaXRlTGlicmFyeURlcGVuZGVuY3lSZWZlcmVuY2Uobm9kZS5pbXBvcnQpOwogIH0KCiAgd3JpdGVTdGF0ZW1lbnRPckVtcHR5KFN0YXRlbWVudCBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuRW1wdHlTdGF0ZW1lbnQpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVOb2RlKG5vZGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoRXhwcmVzc2lvblN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkV4cHJlc3Npb25TdGF0ZW1lbnQpOwogICAgd3JpdGVOb2RlKG5vZGUuZXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmxvY2soQmxvY2sgbm9kZSkgewogICAgX3ZhcmlhYmxlSW5kZXhlciA/Pz0gbmV3IFZhcmlhYmxlSW5kZXhlcigpOwogICAgX3ZhcmlhYmxlSW5kZXhlci5wdXNoU2NvcGUoKTsKICAgIHdyaXRlQnl0ZShUYWcuQmxvY2spOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnN0YXRlbWVudHMpOwogICAgX3ZhcmlhYmxlSW5kZXhlci5wb3BTY29wZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFzc2VydEJsb2NrKEFzc2VydEJsb2NrIG5vZGUpIHsKICAgIF92YXJpYWJsZUluZGV4ZXIgPz89IG5ldyBWYXJpYWJsZUluZGV4ZXIoKTsKICAgIF92YXJpYWJsZUluZGV4ZXIucHVzaFNjb3BlKCk7CiAgICB3cml0ZUJ5dGUoVGFnLkFzc2VydEJsb2NrKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS5zdGF0ZW1lbnRzKTsKICAgIF92YXJpYWJsZUluZGV4ZXIucG9wU2NvcGUoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRFbXB0eVN0YXRlbWVudChFbXB0eVN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkVtcHR5U3RhdGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBc3NlcnRTdGF0ZW1lbnQoQXNzZXJ0U3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuQXNzZXJ0U3RhdGVtZW50KTsKICAgIHdyaXRlTm9kZShub2RlLmNvbmRpdGlvbik7CiAgICB3cml0ZU9mZnNldChub2RlLmNvbmRpdGlvblN0YXJ0T2Zmc2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuY29uZGl0aW9uRW5kT2Zmc2V0KTsKICAgIHdyaXRlT3B0aW9uYWxOb2RlKG5vZGUubWVzc2FnZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIGlmIChfbGFiZWxJbmRleGVyID09IG51bGwpIHsKICAgICAgX2xhYmVsSW5kZXhlciA9IG5ldyBMYWJlbEluZGV4ZXIoKTsKICAgIH0KICAgIF9sYWJlbEluZGV4ZXIuZW50ZXIobm9kZSk7CiAgICB3cml0ZUJ5dGUoVGFnLkxhYmVsZWRTdGF0ZW1lbnQpOwogICAgd3JpdGVOb2RlKG5vZGUuYm9keSk7CiAgICBfbGFiZWxJbmRleGVyLmV4aXQoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuQ29uc3RhbnRFeHByZXNzaW9uKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZURhcnRUeXBlKG5vZGUudHlwZSk7CiAgICB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKG5vZGUuY29uc3RhbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJyZWFrU3RhdGVtZW50KEJyZWFrU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuQnJlYWtTdGF0ZW1lbnQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlVUludDMwKF9sYWJlbEluZGV4ZXJbbm9kZS50YXJnZXRdKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRXaGlsZVN0YXRlbWVudChXaGlsZVN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLldoaWxlU3RhdGVtZW50KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS5jb25kaXRpb24pOwogICAgd3JpdGVOb2RlKG5vZGUuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RG9TdGF0ZW1lbnQoRG9TdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5Eb1N0YXRlbWVudCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVOb2RlKG5vZGUuYm9keSk7CiAgICB3cml0ZU5vZGUobm9kZS5jb25kaXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZvclN0YXRlbWVudChGb3JTdGF0ZW1lbnQgbm9kZSkgewogICAgX3ZhcmlhYmxlSW5kZXhlciA/Pz0gbmV3IFZhcmlhYmxlSW5kZXhlcigpOwogICAgX3ZhcmlhYmxlSW5kZXhlci5wdXNoU2NvcGUoKTsKICAgIHdyaXRlQnl0ZShUYWcuRm9yU3RhdGVtZW50KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KG5vZGUudmFyaWFibGVzKTsKICAgIHdyaXRlT3B0aW9uYWxOb2RlKG5vZGUuY29uZGl0aW9uKTsKICAgIHdyaXRlTm9kZUxpc3Qobm9kZS51cGRhdGVzKTsKICAgIHdyaXRlTm9kZShub2RlLmJvZHkpOwogICAgX3ZhcmlhYmxlSW5kZXhlci5wb3BTY29wZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZvckluU3RhdGVtZW50KEZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIF92YXJpYWJsZUluZGV4ZXIgPz89IG5ldyBWYXJpYWJsZUluZGV4ZXIoKTsKICAgIF92YXJpYWJsZUluZGV4ZXIucHVzaFNjb3BlKCk7CiAgICB3cml0ZUJ5dGUobm9kZS5pc0FzeW5jID8gVGFnLkFzeW5jRm9ySW5TdGF0ZW1lbnQgOiBUYWcuRm9ySW5TdGF0ZW1lbnQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuYm9keU9mZnNldCk7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24obm9kZS52YXJpYWJsZSk7CiAgICB3cml0ZU5vZGUobm9kZS5pdGVyYWJsZSk7CiAgICB3cml0ZU5vZGUobm9kZS5ib2R5KTsKICAgIF92YXJpYWJsZUluZGV4ZXIucG9wU2NvcGUoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIGlmIChfc3dpdGNoQ2FzZUluZGV4ZXIgPT0gbnVsbCkgewogICAgICBfc3dpdGNoQ2FzZUluZGV4ZXIgPSBuZXcgU3dpdGNoQ2FzZUluZGV4ZXIoKTsKICAgIH0KICAgIF9zd2l0Y2hDYXNlSW5kZXhlci5lbnRlcihub2RlKTsKICAgIHdyaXRlQnl0ZShUYWcuU3dpdGNoU3RhdGVtZW50KTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS5leHByZXNzaW9uKTsKICAgIHdyaXRlU3dpdGNoQ2FzZU5vZGVMaXN0KG5vZGUuY2FzZXMpOwogICAgX3N3aXRjaENhc2VJbmRleGVyLmV4aXQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3dpdGNoQ2FzZShTd2l0Y2hDYXNlIG5vZGUpIHsKICAgIC8vIE5vdGU6IHRoZXJlIGlzIG5vIHRhZyBvbiBTd2l0Y2hDYXNlLgogICAgaW50IGxlbmd0aCA9IG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoOwogICAgd3JpdGVVSW50MzAobGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgd3JpdGVPZmZzZXQobm9kZS5leHByZXNzaW9uT2Zmc2V0c1tpXSk7CiAgICAgIHdyaXRlTm9kZShub2RlLmV4cHJlc3Npb25zW2ldKTsKICAgIH0KICAgIHdyaXRlQnl0ZShub2RlLmlzRGVmYXVsdCA/IDEgOiAwKTsKICAgIHdyaXRlTm9kZShub2RlLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KENvbnRpbnVlU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuQ29udGludWVTd2l0Y2hTdGF0ZW1lbnQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlVUludDMwKF9zd2l0Y2hDYXNlSW5kZXhlcltub2RlLnRhcmdldF0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdElmU3RhdGVtZW50KElmU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuSWZTdGF0ZW1lbnQpOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlTm9kZShub2RlLmNvbmRpdGlvbik7CiAgICB3cml0ZU5vZGUobm9kZS50aGVuKTsKICAgIHdyaXRlU3RhdGVtZW50T3JFbXB0eShub2RlLm90aGVyd2lzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UmV0dXJuU3RhdGVtZW50KFJldHVyblN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlJldHVyblN0YXRlbWVudCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVPcHRpb25hbE5vZGUobm9kZS5leHByZXNzaW9uKTsKICB9CgogIGludCBfZW5jb2RlVHJ5Q2F0Y2hGbGFncyhib29sIG5lZWRzU3RhY2tUcmFjZSwgYm9vbCBpc1N5bnRoZXRpYykgewogICAgcmV0dXJuIChuZWVkc1N0YWNrVHJhY2UgPyAxIDogMCkgfCAoaXNTeW50aGV0aWMgPyAyIDogMCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHJ5Q2F0Y2goVHJ5Q2F0Y2ggbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5UcnlDYXRjaCk7CiAgICB3cml0ZU5vZGUobm9kZS5ib2R5KTsKICAgIGJvb2wgbmVlZHNTdGFja1RyYWNlID0gbm9kZS5jYXRjaGVzLmFueSgoQ2F0Y2ggYykgPT4gYy5zdGFja1RyYWNlICE9IG51bGwpOwogICAgd3JpdGVCeXRlKF9lbmNvZGVUcnlDYXRjaEZsYWdzKG5lZWRzU3RhY2tUcmFjZSwgbm9kZS5pc1N5bnRoZXRpYykpOwogICAgd3JpdGVDYXRjaE5vZGVMaXN0KG5vZGUuY2F0Y2hlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q2F0Y2goQ2F0Y2ggbm9kZSkgewogICAgLy8gTm90ZTogdGhlcmUgaXMgbm8gdGFnIG9uIENhdGNoLgogICAgX3ZhcmlhYmxlSW5kZXhlciA/Pz0gbmV3IFZhcmlhYmxlSW5kZXhlcigpOwogICAgX3ZhcmlhYmxlSW5kZXhlci5wdXNoU2NvcGUoKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU5vZGUobm9kZS5ndWFyZCk7CiAgICB3cml0ZU9wdGlvbmFsVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLmV4Y2VwdGlvbik7CiAgICB3cml0ZU9wdGlvbmFsVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLnN0YWNrVHJhY2UpOwogICAgd3JpdGVOb2RlKG5vZGUuYm9keSk7CiAgICBfdmFyaWFibGVJbmRleGVyLnBvcFNjb3BlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHJ5RmluYWxseShUcnlGaW5hbGx5IG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuVHJ5RmluYWxseSk7CiAgICB3cml0ZU5vZGUobm9kZS5ib2R5KTsKICAgIHdyaXRlTm9kZShub2RlLmZpbmFsaXplcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0WWllbGRTdGF0ZW1lbnQoWWllbGRTdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVCeXRlKFRhZy5ZaWVsZFN0YXRlbWVudCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgd3JpdGVCeXRlKG5vZGUuZmxhZ3MpOwogICAgd3JpdGVOb2RlKG5vZGUuZXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuVmFyaWFibGVEZWNsYXJhdGlvbik7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24obm9kZSk7CiAgfQoKICB2b2lkIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIGlmIChfbWV0YWRhdGFTdWJzZWN0aW9ucyAhPSBudWxsKSB7CiAgICAgIF93cml0ZU5vZGVNZXRhZGF0YShub2RlKTsKICAgIH0KICAgIG5vZGUuYmluYXJ5T2Zmc2V0Tm9UYWcgPSBnZXRCdWZmZXJPZmZzZXQoKTsKICAgIHdyaXRlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCk7CiAgICB3cml0ZU9mZnNldChub2RlLmZpbGVFcXVhbHNPZmZzZXQpOwogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIHdyaXRlQnl0ZShub2RlLmZsYWdzKTsKICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKG5vZGUubmFtZSA/PyAnJyk7CiAgICB3cml0ZU5vZGUobm9kZS50eXBlKTsKICAgIHdyaXRlT3B0aW9uYWxOb2RlKG5vZGUuaW5pdGlhbGl6ZXIpOwogICAgLy8gRGVjbGFyZSB0aGUgdmFyaWFibGUgYWZ0ZXIgaXRzIGluaXRpYWxpemVyLiBJdCBpcyBub3QgaW4gc2NvcGUgaW4gaXRzCiAgICAvLyBvd24gaW5pdGlhbGl6ZXIuCiAgICBfdmFyaWFibGVJbmRleGVyID8/PSBuZXcgVmFyaWFibGVJbmRleGVyKCk7CiAgICBfdmFyaWFibGVJbmRleGVyLmRlY2xhcmUobm9kZSk7CiAgfQoKICB2b2lkIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBub2RlcykgewogICAgd3JpdGVMaXN0KG5vZGVzLCB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24pOwogIH0KCiAgdm9pZCB3cml0ZU9wdGlvbmFsVmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgd3JpdGVCeXRlKFRhZy5Ob3RoaW5nKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuU29tZXRoaW5nKTsKICAgICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkZ1bmN0aW9uRGVjbGFyYXRpb24pOwogICAgd3JpdGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLnZhcmlhYmxlKTsKICAgIHdyaXRlRnVuY3Rpb25Ob2RlKG5vZGUuZnVuY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvdHRvbVR5cGUoQm90dG9tVHlwZSBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLkJvdHRvbVR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludmFsaWRUeXBlKEludmFsaWRUeXBlIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuSW52YWxpZFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdER5bmFtaWNUeXBlKER5bmFtaWNUeXBlIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuRHluYW1pY1R5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuVm9pZFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSBub2RlKSB7CiAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmlzRW1wdHkpIHsKICAgICAgd3JpdGVCeXRlKFRhZy5TaW1wbGVJbnRlcmZhY2VUeXBlKTsKICAgICAgd3JpdGVCeXRlKG5vZGUubnVsbGFiaWxpdHkuaW5kZXgpOwogICAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2Uobm9kZS5jbGFzc05hbWUpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVCeXRlKFRhZy5JbnRlcmZhY2VUeXBlKTsKICAgICAgd3JpdGVCeXRlKG5vZGUubnVsbGFiaWxpdHkuaW5kZXgpOwogICAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2Uobm9kZS5jbGFzc05hbWUpOwogICAgICB3cml0ZU5vZGVMaXN0KG5vZGUudHlwZUFyZ3VtZW50cyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3VwZXJ0eXBlKFN1cGVydHlwZSBub2RlKSB7CiAgICAvLyBXcml0aW5nIG51bGxhYmlsaXR5IGJlbG93IGlzIG9ubHkgbmVjZXNzYXJ5IGJlY2F1c2UKICAgIC8vIEJpbmFyeUJ1aWxkZXIucmVhZFN1cGVydHlwZSByZWFkcyB0aGUgc3VwZXJ0eXBlIGFzIGFuIEludGVyZmFjZVR5cGUgYW5kCiAgICAvLyBicmVha3MgaXQgaW50byBjb21wb25lbnRzIGFmdGVyd2FyZHMsIGFuZCByZWFkaW5nIGFuIEludGVyZmFjZVR5cGUKICAgIC8vIHJlcXVpcmVzIHRoZSBudWxsYWJpbGl0eSBieXRlLgogICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSB7CiAgICAgIHdyaXRlQnl0ZShUYWcuU2ltcGxlSW50ZXJmYWNlVHlwZSk7CiAgICAgIHdyaXRlQnl0ZShOdWxsYWJpbGl0eS5ub25OdWxsYWJsZS5pbmRleCk7CiAgICAgIHdyaXRlTm9uTnVsbFJlZmVyZW5jZShub2RlLmNsYXNzTmFtZSk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUJ5dGUoVGFnLkludGVyZmFjZVR5cGUpOwogICAgICB3cml0ZUJ5dGUoTnVsbGFiaWxpdHkubm9uTnVsbGFibGUuaW5kZXgpOwogICAgICB3cml0ZU5vbk51bGxSZWZlcmVuY2Uobm9kZS5jbGFzc05hbWUpOwogICAgICB3cml0ZU5vZGVMaXN0KG5vZGUudHlwZUFyZ3VtZW50cyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBub2RlKSB7CiAgICBpZiAobm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50ID09IG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoICYmCiAgICAgICAgbm9kZS50eXBlUGFyYW1ldGVycy5pc0VtcHR5ICYmCiAgICAgICAgbm9kZS5uYW1lZFBhcmFtZXRlcnMuaXNFbXB0eSAmJgogICAgICAgIG5vZGUudHlwZWRlZlR5cGUgPT0gbnVsbCkgewogICAgICB3cml0ZUJ5dGUoVGFnLlNpbXBsZUZ1bmN0aW9uVHlwZSk7CiAgICAgIHdyaXRlQnl0ZShub2RlLm51bGxhYmlsaXR5LmluZGV4KTsKICAgICAgd3JpdGVOb2RlTGlzdChub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKTsKICAgICAgd3JpdGVOb2RlKG5vZGUucmV0dXJuVHlwZSk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUJ5dGUoVGFnLkZ1bmN0aW9uVHlwZSk7CiAgICAgIHdyaXRlQnl0ZShub2RlLm51bGxhYmlsaXR5LmluZGV4KTsKICAgICAgZW50ZXJTY29wZSh0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVycyk7CiAgICAgIHdyaXRlTm9kZUxpc3Qobm9kZS50eXBlUGFyYW1ldGVycyk7CiAgICAgIHdyaXRlVUludDMwKG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICAgIHdyaXRlVUludDMwKAogICAgICAgICAgbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggKyBub2RlLm5hbWVkUGFyYW1ldGVycy5sZW5ndGgpOwogICAgICB3cml0ZU5vZGVMaXN0KG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpOwogICAgICB3cml0ZU5vZGVMaXN0KG5vZGUubmFtZWRQYXJhbWV0ZXJzKTsKICAgICAgd3JpdGVPcHRpb25hbE5vZGUobm9kZS50eXBlZGVmVHlwZSk7CiAgICAgIHdyaXRlTm9kZShub2RlLnJldHVyblR5cGUpOwogICAgICBsZWF2ZVNjb3BlKHR5cGVQYXJhbWV0ZXJzOiBub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROYW1lZFR5cGUoTmFtZWRUeXBlIG5vZGUpIHsKICAgIHdyaXRlU3RyaW5nUmVmZXJlbmNlKG5vZGUubmFtZSk7CiAgICB3cml0ZU5vZGUobm9kZS50eXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlUGFyYW1ldGVyVHlwZShUeXBlUGFyYW1ldGVyVHlwZSBub2RlKSB7CiAgICB3cml0ZUJ5dGUoVGFnLlR5cGVQYXJhbWV0ZXJUeXBlKTsKICAgIHdyaXRlQnl0ZShub2RlLmRlY2xhcmVkTnVsbGFiaWxpdHkuaW5kZXgpOwogICAgd3JpdGVVSW50MzAoX3R5cGVQYXJhbWV0ZXJJbmRleGVyW25vZGUucGFyYW1ldGVyXSk7CiAgICB3cml0ZU9wdGlvbmFsTm9kZShub2RlLnByb21vdGVkQm91bmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIG5vZGUpIHsKICAgIHdyaXRlQnl0ZShUYWcuVHlwZWRlZlR5cGUpOwogICAgd3JpdGVCeXRlKG5vZGUubnVsbGFiaWxpdHkuaW5kZXgpOwogICAgd3JpdGVOdWxsQWxsb3dlZFJlZmVyZW5jZShub2RlLnR5cGVkZWZSZWZlcmVuY2UpOwogICAgd3JpdGVOb2RlTGlzdChub2RlLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVQYXJhbWV0ZXIoVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgICB3cml0ZUJ5dGUobm9kZS5mbGFncyk7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgd3JpdGVTdHJpbmdSZWZlcmVuY2Uobm9kZS5uYW1lID8/ICcnKTsKICAgIHdyaXRlTm9kZShub2RlLmJvdW5kKTsKICAgIHdyaXRlT3B0aW9uYWxOb2RlKG5vZGUuZGVmYXVsdFR5cGUpOwogIH0KCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIC8vIFRoZXNlIGFyZSBub2RlcyB0aGF0IGFyZSBuZXZlciBzZXJpYWxpemVkIGRpcmVjdGx5LiAgUmVhY2hpbmcgb25lCiAgLy8gZHVyaW5nIHNlcmlhbGl6YXRpb24gaXMgYW4gZXJyb3IuCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0Tm9kZShOb2RlIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgTm9kZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGVmYXVsdENvbnN0YW50KENvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgQ29uc3RhbnRzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHRCYXNpY0xpdGVyYWwoQmFzaWNMaXRlcmFsIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgQmFzaWNMaXRlcmFscycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0Q29uc3RhbnRSZWZlcmVuY2UoQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHREYXJ0VHlwZShEYXJ0VHlwZSBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIERhcnRUeXBlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0RXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgRXhwcmVzc2lvbnMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGVmYXVsdEluaXRpYWxpemVyKEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgSW5pdGlhbGl6ZXJzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHRNZW1iZXIoTWVtYmVyIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgTWVtYmVycycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0TWVtYmVyUmVmZXJlbmNlKE1lbWJlciBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIE1lbWJlciByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHRTdGF0ZW1lbnQoU3RhdGVtZW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgU3RhdGVtZW50cycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0VHJlZU5vZGUoVHJlZU5vZGUgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBUcmVlTm9kZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCb29sQ29uc3RhbnQoQm9vbENvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIEJvb2xDb25zdGFudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCb29sQ29uc3RhbnRSZWZlcmVuY2UoQm9vbENvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIEJvb2xDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q2xhc3NSZWZlcmVuY2UoQ2xhc3Mgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgQ2xhc3MgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0cnVjdG9yUmVmZXJlbmNlKENvbnN0cnVjdG9yIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIENvbnN0cnVjdG9yIHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREb3VibGVDb25zdGFudChEb3VibGVDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBEb3VibGVDb25zdGFudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREb3VibGVDb25zdGFudFJlZmVyZW5jZShEb3VibGVDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBEb3VibGVDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RmllbGRSZWZlcmVuY2UoRmllbGQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgRmllbGQgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluc3RhbmNlQ29uc3RhbnQoSW5zdGFuY2VDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBJbnN0YW5jZUNvbnN0YW50cycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluc3RhbmNlQ29uc3RhbnRSZWZlcmVuY2UoSW5zdGFuY2VDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBJbnN0YW5jZUNvbnN0YW50IHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRDb25zdGFudChJbnRDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBJbnRDb25zdGFudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRDb25zdGFudFJlZmVyZW5jZShJbnRDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBJbnRDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGlicmFyeURlcGVuZGVuY3koTGlicmFyeURlcGVuZGVuY3kgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgTGlicmFyeURlcGVuZGVuY3lzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGlicmFyeVBhcnQoTGlicmFyeVBhcnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgTGlicmFyeVBhcnRzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGlzdENvbnN0YW50KExpc3RDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBMaXN0Q29uc3RhbnRzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGlzdENvbnN0YW50UmVmZXJlbmNlKExpc3RDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBMaXN0Q29uc3RhbnQgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFNldENvbnN0YW50KFNldENvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIFNldENvbnN0YW50cycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFNldENvbnN0YW50UmVmZXJlbmNlKFNldENvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIFNldENvbnN0YW50IHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNYXBDb25zdGFudChNYXBDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBNYXBDb25zdGFudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNYXBDb25zdGFudFJlZmVyZW5jZShNYXBDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBNYXBDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TmFtZShOYW1lIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIE5hbWVzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TnVsbENvbnN0YW50KE51bGxDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBOdWxsQ29uc3RhbnRzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TnVsbENvbnN0YW50UmVmZXJlbmNlKE51bGxDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBOdWxsQ29uc3RhbnQgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByb2NlZHVyZVJlZmVyZW5jZShQcm9jZWR1cmUgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgUHJvY2VkdXJlIHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb21wb25lbnQoQ29tcG9uZW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIENvbXBvbmVudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvclJlZmVyZW5jZSgKICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3Igbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgJ3NlcmlhbGl6YXRpb24gb2YgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0NvbnN0YW50KFN0cmluZ0NvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIFN0cmluZ0NvbnN0YW50cycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0NvbnN0YW50UmVmZXJlbmNlKFN0cmluZ0NvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIFN0cmluZ0NvbnN0YW50IHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTeW1ib2xDb25zdGFudChTeW1ib2xDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBTeW1ib2xDb25zdGFudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTeW1ib2xDb25zdGFudFJlZmVyZW5jZShTeW1ib2xDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBTeW1ib2xDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudChQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICdzZXJpYWxpemF0aW9uIG9mIFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnRzICcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnRSZWZlcmVuY2UoCiAgICAgIFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgJ3NlcmlhbGl6YXRpb24gb2YgUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VGVhck9mZkNvbnN0YW50KFRlYXJPZmZDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBUZWFyT2ZmQ29uc3RhbnRzICcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRlYXJPZmZDb25zdGFudFJlZmVyZW5jZShUZWFyT2ZmQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgVGVhck9mZkNvbnN0YW50IHJlZmVyZW5jZXMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlTGl0ZXJhbENvbnN0YW50KFR5cGVMaXRlcmFsQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ3NlcmlhbGl6YXRpb24gb2YgVHlwZUxpdGVyYWxDb25zdGFudHMnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlTGl0ZXJhbENvbnN0YW50UmVmZXJlbmNlKFR5cGVMaXRlcmFsQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgJ3NlcmlhbGl6YXRpb24gb2YgVHlwZUxpdGVyYWxDb25zdGFudCByZWZlcmVuY2VzJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZWRlZlJlZmVyZW5jZShUeXBlZGVmIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdzZXJpYWxpemF0aW9uIG9mIFR5cGVkZWYgcmVmZXJlbmNlcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignc2VyaWFsaXphdGlvbiBvZiBVbmV2YWx1YXRlZENvbnN0YW50cycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnRSZWZlcmVuY2UoVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAnc2VyaWFsaXphdGlvbiBvZiBVbmV2YWx1YXRlZENvbnN0YW50IHJlZmVyZW5jZXMnKTsKICB9Cn0KCnR5cGVkZWYgYm9vbCBMaWJyYXJ5RmlsdGVyKExpYnJhcnkgXyk7CgpjbGFzcyBWYXJpYWJsZUluZGV4ZXIgewogIE1hcDxWYXJpYWJsZURlY2xhcmF0aW9uLCBpbnQ+IGluZGV4OwogIExpc3Q8aW50PiBzY29wZXM7CiAgaW50IHN0YWNrSGVpZ2h0ID0gMDsKCiAgdm9pZCBkZWNsYXJlKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgaW5kZXggPz89IDxWYXJpYWJsZURlY2xhcmF0aW9uLCBpbnQ+e307CiAgICBpbmRleFtub2RlXSA9IHN0YWNrSGVpZ2h0Kys7CiAgfQoKICB2b2lkIHB1c2hTY29wZSgpIHsKICAgIHNjb3BlcyA/Pz0gbmV3IExpc3Q8aW50PigpOwogICAgc2NvcGVzLmFkZChzdGFja0hlaWdodCk7CiAgfQoKICB2b2lkIHBvcFNjb3BlKCkgewogICAgc3RhY2tIZWlnaHQgPSBzY29wZXMucmVtb3ZlTGFzdCgpOwogIH0KCiAgdm9pZCByZXN0b3JlU2NvcGUoaW50IG51bWJlck9mVmFyaWFibGVzKSB7CiAgICBzdGFja0hlaWdodCArPSBudW1iZXJPZlZhcmlhYmxlczsKICB9CgogIGludCBvcGVyYXRvciBbXShWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBpbmRleCA9PSBudWxsID8gbnVsbCA6IGluZGV4W25vZGVdOwogIH0KfQoKY2xhc3MgTGFiZWxJbmRleGVyIHsKICBmaW5hbCBNYXA8TGFiZWxlZFN0YXRlbWVudCwgaW50PiBpbmRleCA9IDxMYWJlbGVkU3RhdGVtZW50LCBpbnQ+e307CiAgaW50IHN0YWNrSGVpZ2h0ID0gMDsKCiAgdm9pZCBlbnRlcihMYWJlbGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIGluZGV4W25vZGVdID0gc3RhY2tIZWlnaHQrKzsKICB9CgogIHZvaWQgZXhpdCgpIHsKICAgIC0tc3RhY2tIZWlnaHQ7CiAgfQoKICBpbnQgb3BlcmF0b3IgW10oTGFiZWxlZFN0YXRlbWVudCBub2RlKSA9PiBpbmRleFtub2RlXTsKfQoKY2xhc3MgU3dpdGNoQ2FzZUluZGV4ZXIgewogIGZpbmFsIE1hcDxTd2l0Y2hDYXNlLCBpbnQ+IGluZGV4ID0gPFN3aXRjaENhc2UsIGludD57fTsKICBpbnQgc3RhY2tIZWlnaHQgPSAwOwoKICB2b2lkIGVudGVyKFN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICBmb3IgKFN3aXRjaENhc2UgY2FzZU5vZGUgaW4gbm9kZS5jYXNlcykgewogICAgICBpbmRleFtjYXNlTm9kZV0gPSBzdGFja0hlaWdodCsrOwogICAgfQogIH0KCiAgdm9pZCBleGl0KFN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICBzdGFja0hlaWdodCAtPSBub2RlLmNhc2VzLmxlbmd0aDsKICB9CgogIGludCBvcGVyYXRvciBbXShTd2l0Y2hDYXNlIG5vZGUpID0+IGluZGV4W25vZGVdOwp9CgpjbGFzcyBDb25zdGFudEluZGV4ZXIgZXh0ZW5kcyBSZWN1cnNpdmVWaXNpdG9yIHsKICBmaW5hbCBTdHJpbmdJbmRleGVyIHN0cmluZ0luZGV4ZXI7CgogIGZpbmFsIExpc3Q8Q29uc3RhbnQ+IGVudHJpZXMgPSA8Q29uc3RhbnQ+W107CiAgZmluYWwgTWFwPENvbnN0YW50LCBpbnQ+IG9mZnNldHMgPSA8Q29uc3RhbnQsIGludD57fTsKICBpbnQgbmV4dE9mZnNldCA9IDA7CgogIGZpbmFsIEJpbmFyeVByaW50ZXIgX3ByaW50ZXI7CgogIENvbnN0YW50SW5kZXhlcih0aGlzLnN0cmluZ0luZGV4ZXIsIHRoaXMuX3ByaW50ZXIpOwoKICBpbnQgcHV0KENvbnN0YW50IGNvbnN0YW50KSB7CiAgICBmaW5hbCBpbnQgb2xkT2Zmc2V0ID0gb2Zmc2V0c1tjb25zdGFudF07CiAgICBpZiAob2xkT2Zmc2V0ICE9IG51bGwpIHJldHVybiBvbGRPZmZzZXQ7CgogICAgLy8gVHJhdmVyc2UgREFHIGluIHBvc3Qtb3JkZXIgdG8gZW5zdXJlIGNoaWxkcmVuIGhhdmUgdGhlaXIgb2Zmc2V0cyBhc3NpZ25lZAogICAgLy8gYmVmb3JlIHRoZSBwYXJlbnQuCiAgICBjb25zdGFudC52aXNpdENoaWxkcmVuKHRoaXMpOwoKICAgIGlmIChjb25zdGFudCBpcyBTdHJpbmdDb25zdGFudCkgewogICAgICBzdHJpbmdJbmRleGVyLnB1dChjb25zdGFudC52YWx1ZSk7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50IGlzIFN5bWJvbENvbnN0YW50KSB7CiAgICAgIHN0cmluZ0luZGV4ZXIucHV0KGNvbnN0YW50Lm5hbWUpOwogICAgfSBlbHNlIGlmIChjb25zdGFudCBpcyBEb3VibGVDb25zdGFudCkgewogICAgICBzdHJpbmdJbmRleGVyLnB1dCgnJHtjb25zdGFudC52YWx1ZX0nKTsKICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgSW50Q29uc3RhbnQpIHsKICAgICAgZmluYWwgaW50IHZhbHVlID0gY29uc3RhbnQudmFsdWU7CiAgICAgIGlmICgodmFsdWUuYWJzKCkgPj4gMzApICE9IDApIHsKICAgICAgICBzdHJpbmdJbmRleGVyLnB1dCgnJHZhbHVlJyk7CiAgICAgIH0KICAgIH0KCiAgICBmaW5hbCBpbnQgbmV3T2Zmc2V0ID0gbmV4dE9mZnNldDsKICAgIGVudHJpZXMuYWRkKGNvbnN0YW50KTsKICAgIG5leHRPZmZzZXQgKz0gX3ByaW50ZXIud3JpdGVDb25zdGFudFRhYmxlRW50cnkoY29uc3RhbnQpOwogICAgcmV0dXJuIG9mZnNldHNbY29uc3RhbnRdID0gbmV3T2Zmc2V0OwogIH0KCiAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKENvbnN0YW50IG5vZGUpIHsKICAgIHB1dChub2RlKTsKICB9CgogIGludCBvcGVyYXRvciBbXShDb25zdGFudCBub2RlKSA9PiBvZmZzZXRzW25vZGVdOwp9CgpjbGFzcyBUeXBlUGFyYW1ldGVySW5kZXhlciB7CiAgZmluYWwgTWFwPFR5cGVQYXJhbWV0ZXIsIGludD4gaW5kZXggPSA8VHlwZVBhcmFtZXRlciwgaW50Pnt9OwogIGludCBzdGFja0hlaWdodCA9IDA7CgogIHZvaWQgZW50ZXIoTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycykgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICBUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciA9IHR5cGVQYXJhbWV0ZXJzW2ldOwogICAgICBpbmRleFtwYXJhbWV0ZXJdID0gc3RhY2tIZWlnaHQ7CiAgICAgICsrc3RhY2tIZWlnaHQ7CiAgICB9CiAgfQoKICB2b2lkIGV4aXQoTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycykgewogICAgc3RhY2tIZWlnaHQgLT0gdHlwZVBhcmFtZXRlcnMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICBpbmRleC5yZW1vdmUodHlwZVBhcmFtZXRlcnNbaV0pOwogICAgfQogIH0KCiAgaW50IG9wZXJhdG9yIFtdKFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyKSA9PgogICAgICBpbmRleFtwYXJhbWV0ZXJdID8/CiAgICAgICh0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignVHlwZSBwYXJhbWV0ZXIgJHBhcmFtZXRlciBpcyBub3QgaW5kZXhlZCcpKTsKfQoKY2xhc3MgU3RyaW5nSW5kZXhlciB7CiAgLy8gTm90ZSB0aGF0IHRoZSBpdGVyYXRpb24gb3JkZXIgaXMgaW1wb3J0YW50LgogIGZpbmFsIE1hcDxTdHJpbmcsIGludD4gaW5kZXggPSBuZXcgTWFwPFN0cmluZywgaW50PigpOwoKICBTdHJpbmdJbmRleGVyKCkgewogICAgcHV0KCcnKTsKICB9CgogIGludCBwdXQoU3RyaW5nIHN0cmluZykgewogICAgaW50IHJlc3VsdCA9IGluZGV4W3N0cmluZ107CiAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKICAgICAgcmVzdWx0ID0gaW5kZXgubGVuZ3RoOwogICAgICBpbmRleFtzdHJpbmddID0gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGludCBvcGVyYXRvciBbXShTdHJpbmcgc3RyaW5nKSA9PiBpbmRleFtzdHJpbmddOwp9CgpjbGFzcyBVcmlJbmRleGVyIHsKICAvLyBOb3RlIHRoYXQgdGhlIGl0ZXJhdGlvbiBvcmRlciBpcyBpbXBvcnRhbnQuCiAgZmluYWwgTWFwPFVyaSwgaW50PiBpbmRleCA9IG5ldyBNYXA8VXJpLCBpbnQ+KCk7CgogIFVyaUluZGV4ZXIoKSB7CiAgICBwdXQobnVsbCk7CiAgfQoKICBpbnQgcHV0KFVyaSB1cmkpIHsKICAgIGludCByZXN1bHQgPSBpbmRleFt1cmldOwogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIHJlc3VsdCA9IGluZGV4Lmxlbmd0aDsKICAgICAgaW5kZXhbdXJpXSA9IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgovLy8gUHV0cyBhIGJ1ZmZlciBpbiBmcm9udCBvZiBhIFtTaW5rPExpc3Q8aW50Pj5dLgpjbGFzcyBCdWZmZXJlZFNpbmsgewogIHN0YXRpYyBjb25zdCBpbnQgU0laRSA9IDEwMDAwMDsKICBzdGF0aWMgY29uc3QgaW50IFNBRkVfU0laRSA9IFNJWkUgLSA1OwogIHN0YXRpYyBjb25zdCBpbnQgU01BTEwgPSAxMDAwMDsKICBmaW5hbCBTaW5rPExpc3Q8aW50Pj4gX3Npbms7CiAgVWludDhMaXN0IF9idWZmZXIgPSBuZXcgVWludDhMaXN0KFNJWkUpOwogIGludCBsZW5ndGggPSAwOwogIGludCBmbHVzaGVkTGVuZ3RoID0gMDsKCiAgRmxvYXQ2NExpc3QgX2RvdWJsZUJ1ZmZlciA9IG5ldyBGbG9hdDY0TGlzdCgxKTsKICBVaW50OExpc3QgX2RvdWJsZUJ1ZmZlclVpbnQ4OwoKICBpbnQgZ2V0IG9mZnNldCA9PiBsZW5ndGggKyBmbHVzaGVkTGVuZ3RoOwoKICBCdWZmZXJlZFNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgYWRkRG91YmxlKGRvdWJsZSBkKSB7CiAgICBfZG91YmxlQnVmZmVyVWludDggPz89IF9kb3VibGVCdWZmZXIuYnVmZmVyLmFzVWludDhMaXN0KCk7CiAgICBfZG91YmxlQnVmZmVyWzBdID0gZDsKICAgIGFkZEJ5dGU0KF9kb3VibGVCdWZmZXJVaW50OFswXSwgX2RvdWJsZUJ1ZmZlclVpbnQ4WzFdLAogICAgICAgIF9kb3VibGVCdWZmZXJVaW50OFsyXSwgX2RvdWJsZUJ1ZmZlclVpbnQ4WzNdKTsKICAgIGFkZEJ5dGU0KF9kb3VibGVCdWZmZXJVaW50OFs0XSwgX2RvdWJsZUJ1ZmZlclVpbnQ4WzVdLAogICAgICAgIF9kb3VibGVCdWZmZXJVaW50OFs2XSwgX2RvdWJsZUJ1ZmZlclVpbnQ4WzddKTsKICB9CgogIHZvaWQgYWRkQnl0ZShpbnQgYnl0ZSkgewogICAgX2J1ZmZlcltsZW5ndGgrK10gPSBieXRlOwogICAgaWYgKGxlbmd0aCA9PSBTSVpFKSB7CiAgICAgIF9zaW5rLmFkZChfYnVmZmVyKTsKICAgICAgX2J1ZmZlciA9IG5ldyBVaW50OExpc3QoU0laRSk7CiAgICAgIGxlbmd0aCA9IDA7CiAgICAgIGZsdXNoZWRMZW5ndGggKz0gU0laRTsKICAgIH0KICB9CgogIHZvaWQgYWRkQnl0ZTIoaW50IGJ5dGUxLCBpbnQgYnl0ZTIpIHsKICAgIGlmIChsZW5ndGggPCBTQUZFX1NJWkUpIHsKICAgICAgX2J1ZmZlcltsZW5ndGgrK10gPSBieXRlMTsKICAgICAgX2J1ZmZlcltsZW5ndGgrK10gPSBieXRlMjsKICAgIH0gZWxzZSB7CiAgICAgIGFkZEJ5dGUoYnl0ZTEpOwogICAgICBhZGRCeXRlKGJ5dGUyKTsKICAgIH0KICB9CgogIHZvaWQgYWRkQnl0ZTQoaW50IGJ5dGUxLCBpbnQgYnl0ZTIsIGludCBieXRlMywgaW50IGJ5dGU0KSB7CiAgICBpZiAobGVuZ3RoIDwgU0FGRV9TSVpFKSB7CiAgICAgIF9idWZmZXJbbGVuZ3RoKytdID0gYnl0ZTE7CiAgICAgIF9idWZmZXJbbGVuZ3RoKytdID0gYnl0ZTI7CiAgICAgIF9idWZmZXJbbGVuZ3RoKytdID0gYnl0ZTM7CiAgICAgIF9idWZmZXJbbGVuZ3RoKytdID0gYnl0ZTQ7CiAgICB9IGVsc2UgewogICAgICBhZGRCeXRlKGJ5dGUxKTsKICAgICAgYWRkQnl0ZShieXRlMik7CiAgICAgIGFkZEJ5dGUoYnl0ZTMpOwogICAgICBhZGRCeXRlKGJ5dGU0KTsKICAgIH0KICB9CgogIHZvaWQgYWRkQnl0ZXMoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICAvLyBBdm9pZCBjb3B5aW5nIGEgbGFyZ2UgYnVmZmVyIGludG8gdGhlIGFub3RoZXIgbGFyZ2UgYnVmZmVyLiBBbHNvLCBpZgogICAgLy8gdGhlIGJ5dGVzIGJ1ZmZlciBpcyB0b28gbGFyZ2UgdG8gZml0IGluIG91ciBvd24gYnVmZmVyLCBqdXN0IGVtaXQgYm90aC4KICAgIGlmIChsZW5ndGggKyBieXRlcy5sZW5ndGggPCBTSVpFICYmCiAgICAgICAgKGJ5dGVzLmxlbmd0aCA8IFNNQUxMIHx8IGxlbmd0aCA8IFNNQUxMKSkgewogICAgICBfYnVmZmVyLnNldFJhbmdlKGxlbmd0aCwgbGVuZ3RoICsgYnl0ZXMubGVuZ3RoLCBieXRlcyk7CiAgICAgIGxlbmd0aCArPSBieXRlcy5sZW5ndGg7CiAgICB9IGVsc2UgaWYgKGJ5dGVzLmxlbmd0aCA8IFNNQUxMKSB7CiAgICAgIC8vIEZsdXNoIGFzIG11Y2ggYXMgd2UgY2FuIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4KICAgICAgX2J1ZmZlci5zZXRSYW5nZShsZW5ndGgsIFNJWkUsIGJ5dGVzKTsKICAgICAgX3NpbmsuYWRkKF9idWZmZXIpOwogICAgICAvLyBDb3B5IG92ZXIgdGhlIHJlbWFpbmRlciBpbnRvIGEgbmV3IGJ1ZmZlci4gSXQgaXMgZ3VhcmFudGVlZCB0byBmaXQKICAgICAgLy8gYmVjYXVzZSB0aGUgaW5wdXQgYnl0ZSBhcnJheSBpcyBzbWFsbC4KICAgICAgaW50IGFscmVhZHlFbWl0dGVkID0gU0laRSAtIGxlbmd0aDsKICAgICAgaW50IHJlbWFpbmRlciA9IGJ5dGVzLmxlbmd0aCAtIGFscmVhZHlFbWl0dGVkOwogICAgICBfYnVmZmVyID0gbmV3IFVpbnQ4TGlzdChTSVpFKTsKICAgICAgX2J1ZmZlci5zZXRSYW5nZSgwLCByZW1haW5kZXIsIGJ5dGVzLCBhbHJlYWR5RW1pdHRlZCk7CiAgICAgIGxlbmd0aCA9IHJlbWFpbmRlcjsKICAgICAgZmx1c2hlZExlbmd0aCArPSBTSVpFOwogICAgfSBlbHNlIHsKICAgICAgZmx1c2goKTsKICAgICAgX3NpbmsuYWRkKGJ5dGVzKTsKICAgICAgZmx1c2hlZExlbmd0aCArPSBieXRlcy5sZW5ndGg7CiAgICB9CiAgfQoKICB2b2lkIGZsdXNoKCkgewogICAgX3NpbmsuYWRkKF9idWZmZXIuc3VibGlzdCgwLCBsZW5ndGgpKTsKICAgIF9idWZmZXIgPSBuZXcgVWludDhMaXN0KFNJWkUpOwogICAgZmx1c2hlZExlbmd0aCArPSBsZW5ndGg7CiAgICBsZW5ndGggPSAwOwogIH0KCiAgdm9pZCBmbHVzaEFuZERlc3Ryb3koKSB7CiAgICBfc2luay5hZGQoX2J1ZmZlci5zdWJsaXN0KDAsIGxlbmd0aCkpOwogIH0KfQoKLy8vIE5vbi1lbXB0eSBtZXRhZGF0YSBzdWJzZWN0aW9uLgpjbGFzcyBfTWV0YWRhdGFTdWJzZWN0aW9uIHsKICBmaW5hbCBNZXRhZGF0YVJlcG9zaXRvcnk8T2JqZWN0PiByZXBvc2l0b3J5OwoKICAvLy8gTGlzdCBvZiAobm9kZU9mZnNldCwgbWV0YWRhdGFPZmZzZXQpIHBhaXJzLgogIC8vLyBHcmFkdWFsbHkgZmlsbGVkIGJ5IHRoZSB3cml0ZXIgYXMgd3JpdGluZyBwcm9ncmVzc2VzLCB3aGljaCBieQogIC8vLyBjb25zdHJ1Y3Rpb24gZ3VhcmFudGVlcyB0aGF0IHBhaXJzIGFyZSBzb3J0ZWQgYnkgZmlyc3QgY29tcG9uZW50CiAgLy8vIChub2RlT2Zmc2V0KSBpbiBhc2NlbmRpbmcgb3JkZXIuCiAgZmluYWwgTGlzdDxpbnQ+IG1ldGFkYXRhTWFwcGluZyA9IDxpbnQ+W107CgogIF9NZXRhZGF0YVN1YnNlY3Rpb24odGhpcy5yZXBvc2l0b3J5KTsKfQoKLy8vIEEgW1NpbmtdIHRoYXQgZGlyZWN0bHkgd3JpdGVzIGRhdGEgaW50byBhIGJ5dGUgYnVpbGRlci4KLy8gVE9ETyhkYXJ0YnVnLmNvbS8yODMxNik6IFJlbW92ZSB0aGlzIHdyYXBwZXIgY2xhc3MuCmNsYXNzIEJ5dGVzU2luayBpbXBsZW1lbnRzIFNpbms8TGlzdDxpbnQ+PiB7CiAgZmluYWwgQnl0ZXNCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgQnl0ZXNCdWlsZGVyKCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkKExpc3Q8aW50PiBkYXRhKSB7CiAgICBidWlsZGVyLmFkZChkYXRhKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xvc2UoKSB7CiAgICAvLyBOb3RoaW5nIHRvIGRvLgogIH0KfQoKY2xhc3MgTm90UXVpdGVTdHJpbmcgewogIC8qKgogICAqIFdyaXRlIFtzb3VyY2VdIHN0cmluZyBpbnRvIFt0YXJnZXRdIHN0YXJ0aW5nIGF0IGluZGV4IFtpbmRleF0uCiAgICoKICAgKiBPcHRpb25hbGx5IG9ubHkgd3JpdGUgcGFydCBvZiB0aGUgaW5wdXQgW3NvdXJjZV0gc3RhcnRpbmcgYXQgW3N0YXJ0XSBhbmQKICAgKiBlbmRpbmcgYXQgW2VuZF0uCiAgICoKICAgKiBUaGUgb3V0cHV0IHNwYWNlIG5lZWRlZCBpcyBhdCBtb3N0IFtzb3VyY2UubGVuZ3RoXSAqIDMuCiAgICoKICAgKiBSZXR1cm5zCiAgICogICogTm9uLW5lZ2F0aXZlIG9uIHN1Y2Nlc3MgKHRoZSBuZXcgaW5kZXggaW4gW3RhcmdldF0pLgogICAqICAqIC0xIHdoZW4gW3RhcmdldF0gZG9lc24ndCBoYXZlIGVub3VnaCBzcGFjZS4gTm90ZSB0aGF0IFt0YXJnZXRdIGNhbiBiZQogICAqICAgIHBvbHV0ZWQgc3RhcnRpbmcgYXQgW2luZGV4XS4KICAgKiAgKiAtMiBvbiBpbnB1dCBlcnJvciwgaS5lLiBhbiB1bnBhaXJlZCBsZWFkIG9yIHRhaWwgc3Vycm9nYXRlLgogICAqLwogIHN0YXRpYyBpbnQgd3JpdGVVdGY4KExpc3Q8aW50PiB0YXJnZXQsIGludCBpbmRleCwgU3RyaW5nIHNvdXJjZSwKICAgICAgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRJbmRleChpbmRleCwgdGFyZ2V0LCBudWxsLCB0YXJnZXQubGVuZ3RoKTsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHNvdXJjZS5sZW5ndGgpOwogICAgaWYgKHN0YXJ0ID09IGVuZCkgcmV0dXJuIGluZGV4OwogICAgaW50IGkgPSBzdGFydDsKICAgIGludCBsZW5ndGggPSB0YXJnZXQubGVuZ3RoOwogICAgZG8gewogICAgICBpbnQgY29kZVVuaXQgPSBzb3VyY2UuY29kZVVuaXRBdChpKyspOwogICAgICB3aGlsZSAoY29kZVVuaXQgPCAxMjgpIHsKICAgICAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSByZXR1cm4gLTE7CiAgICAgICAgdGFyZ2V0W2luZGV4KytdID0gY29kZVVuaXQ7CiAgICAgICAgaWYgKGkgPj0gZW5kKSByZXR1cm4gaW5kZXg7CiAgICAgICAgY29kZVVuaXQgPSBzb3VyY2UuY29kZVVuaXRBdChpKyspOwogICAgICB9CiAgICAgIGlmIChjb2RlVW5pdCA8IDB4ODAwKSB7CiAgICAgICAgaW5kZXggKz0gMjsKICAgICAgICBpZiAoaW5kZXggPiBsZW5ndGgpIHJldHVybiAtMTsKICAgICAgICB0YXJnZXRbaW5kZXggLSAyXSA9IDB4QzAgfCAoY29kZVVuaXQgPj4gNik7CiAgICAgICAgdGFyZ2V0W2luZGV4IC0gMV0gPSAweDgwIHwgKGNvZGVVbml0ICYgMHgzZik7CiAgICAgIH0gZWxzZSBpZiAoY29kZVVuaXQgJiAweEY4MDAgIT0gMHhEODAwKSB7CiAgICAgICAgLy8gTm90IGEgc3Vycm9nYXRlLgogICAgICAgIGluZGV4ICs9IDM7CiAgICAgICAgaWYgKGluZGV4ID4gbGVuZ3RoKSByZXR1cm4gLTE7CiAgICAgICAgdGFyZ2V0W2luZGV4IC0gM10gPSAweEUwIHwgKGNvZGVVbml0ID4+IDEyKTsKICAgICAgICB0YXJnZXRbaW5kZXggLSAyXSA9IDB4ODAgfCAoKGNvZGVVbml0ID4+IDYpICYgMHgzZik7CiAgICAgICAgdGFyZ2V0W2luZGV4IC0gMV0gPSAweDgwIHwgKGNvZGVVbml0ICYgMHgzZik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGNvZGVVbml0ID49IDB4REMwMCkgcmV0dXJuIC0yOyAvLyBVbnBhaXJlZCB0YWlsIHN1cnJvZ2F0ZS4KICAgICAgICBpZiAoaSA+PSBlbmQpIHJldHVybiAtMjsgLy8gVW5wYWlyZWQgbGVhZCBzdXJyb2dhdGUuCiAgICAgICAgaW50IG5leHRDaGFyID0gc291cmNlLmNvZGVV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cEVudHJ5OwppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCmltcG9ydCAnLi4vYXN0LmRhcnQnOwppbXBvcnQgJy4uL3RyYW5zZm9ybWF0aW9ucy9mbGFncy5kYXJ0JzsKaW1wb3J0ICd0YWcuZGFydCc7CgpjbGFzcyBQYXJzZUVycm9yIHsKICBTdHJpbmcgZmlsZW5hbWU7CiAgaW50IGJ5dGVJbmRleDsKICBTdHJpbmcgbWVzc2FnZTsKICBTdHJpbmcgcGF0aDsKCiAgUGFyc2VFcnJvcih0aGlzLm1lc3NhZ2UsIHt0aGlzLmZpbGVuYW1lLCB0aGlzLmJ5dGVJbmRleCwgdGhpcy5wYXRofSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICckZmlsZW5hbWU6JGJ5dGVJbmRleDogJG1lc3NhZ2UgYXQgJHBhdGgnOwp9CgpjbGFzcyBJbnZhbGlkS2VybmVsVmVyc2lvbkVycm9yIHsKICBmaW5hbCBpbnQgdmVyc2lvbjsKCiAgSW52YWxpZEtlcm5lbFZlcnNpb25FcnJvcih0aGlzLnZlcnNpb24pOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ1VuZXhwZWN0ZWQgS2VybmVsIHZlcnNpb24gJHt2ZXJzaW9ufSAnCiAgICAgICAgJyhleHBlY3RlZCAke1RhZy5CaW5hcnlGb3JtYXRWZXJzaW9ufSkuJzsKICB9Cn0KCmNsYXNzIENhbm9uaWNhbE5hbWVFcnJvciB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIENhbm9uaWNhbE5hbWVFcnJvcih0aGlzLm1lc3NhZ2UpOwp9CgpjbGFzcyBDYW5vbmljYWxOYW1lU2RrRXJyb3IgZXh0ZW5kcyBDYW5vbmljYWxOYW1lRXJyb3IgewogIENhbm9uaWNhbE5hbWVTZGtFcnJvcihTdHJpbmcgbWVzc2FnZSkgOiBzdXBlcihtZXNzYWdlKTsKfQoKY2xhc3MgX0NvbXBvbmVudEluZGV4IHsKICBzdGF0aWMgY29uc3QgbnVtYmVyT2ZGaXhlZEZpZWxkcyA9IDk7CgogIGludCBiaW5hcnlPZmZzZXRGb3JTb3VyY2VUYWJsZTsKICBpbnQgYmluYXJ5T2Zmc2V0Rm9yQ2Fub25pY2FsTmFtZXM7CiAgaW50IGJpbmFyeU9mZnNldEZvck1ldGFkYXRhUGF5bG9hZHM7CiAgaW50IGJpbmFyeU9mZnNldEZvck1ldGFkYXRhTWFwcGluZ3M7CiAgaW50IGJpbmFyeU9mZnNldEZvclN0cmluZ1RhYmxlOwogIGludCBiaW5hcnlPZmZzZXRGb3JDb25zdGFudFRhYmxlOwogIGludCBtYWluTWV0aG9kUmVmZXJlbmNlOwogIExpc3Q8aW50PiBsaWJyYXJ5T2Zmc2V0czsKICBpbnQgbGlicmFyeUNvdW50OwogIGludCBjb21wb25lbnRGaWxlU2l6ZUluQnl0ZXM7Cn0KCmNsYXNzIEJpbmFyeUJ1aWxkZXIgewogIGZpbmFsIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVTdGFjayA9IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdOwogIGZpbmFsIExpc3Q8TGFiZWxlZFN0YXRlbWVudD4gbGFiZWxTdGFjayA9IDxMYWJlbGVkU3RhdGVtZW50PltdOwogIGludCBsYWJlbFN0YWNrQmFzZSA9IDA7CiAgZmluYWwgTGlzdDxTd2l0Y2hDYXNlPiBzd2l0Y2hDYXNlU3RhY2sgPSA8U3dpdGNoQ2FzZT5bXTsKICBmaW5hbCBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJTdGFjayA9IDxUeXBlUGFyYW1ldGVyPltdOwogIGZpbmFsIFN0cmluZyBmaWxlbmFtZTsKICBmaW5hbCBMaXN0PGludD4gX2J5dGVzOwogIGludCBfYnl0ZU9mZnNldCA9IDA7CiAgZmluYWwgTGlzdDxTdHJpbmc+IF9zdHJpbmdUYWJsZSA9IDxTdHJpbmc+W107CiAgZmluYWwgTGlzdDxVcmk+IF9zb3VyY2VVcmlUYWJsZSA9IDxVcmk+W107CiAgTWFwPGludCwgQ29uc3RhbnQ+IF9jb25zdGFudFRhYmxlID0gPGludCwgQ29uc3RhbnQ+e307CiAgTGlzdDxDYW5vbmljYWxOYW1lPiBfbGlua1RhYmxlOwogIGludCBfdHJhbnNmb3JtZXJGbGFncyA9IDA7CiAgTGlicmFyeSBfY3VycmVudExpYnJhcnk7CiAgaW50IF9jb21wb25lbnRTdGFydE9mZnNldCA9IDA7CgogIC8vIElmIHNvbWV0aGluZyBnb2VzIHdyb25nLCB0aGlzIGxpc3Qgc2hvdWxkIGluZGljYXRlIHdoYXQgbGlicmFyeSwKICAvLyBjbGFzcywgYW5kIG1lbWJlciB3YXMgYmVpbmcgYnVpbHQuCiAgTGlzdDxTdHJpbmc+IGRlYnVnUGF0aCA9IDxTdHJpbmc+W107CgogIGJvb2wgX2lzUmVhZGluZ0xpYnJhcnlJbXBsZW1lbnRhdGlvbiA9IGZhbHNlOwogIGZpbmFsIGJvb2wgYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlczsKCiAgLy8vIElmIGJpbmFyeSBjb250YWlucyBtZXRhZGF0YSBzZWN0aW9uIHdpdGggcGF5bG9hZHMgcmVmZXJlbmNpbmcgb3RoZXIgbm9kZXMKICAvLy8gc3VjaCBLZXJuZWwgYmluYXJ5IGNhbid0IGJlIHJlYWQgbGF6aWx5IGJlY2F1c2UgbWV0YWRhdGEgY3Jvc3MgcmVmZXJlbmNlcwogIC8vLyB3aWxsIG5vdCBiZSByZXNvbHZlZCBjb3JyZWN0bHkuCiAgYm9vbCBfZGlzYWJsZUxhenlSZWFkaW5nID0gZmFsc2U7CgogIEJpbmFyeUJ1aWxkZXIodGhpcy5fYnl0ZXMsCiAgICAgIHt0aGlzLmZpbGVuYW1lLAogICAgICBib29sIGRpc2FibGVMYXp5UmVhZGluZyA9IGZhbHNlLAogICAgICBib29sIGFsd2F5c0NyZWF0ZU5ld05hbWVkTm9kZXN9KQogICAgICA6IF9kaXNhYmxlTGF6eVJlYWRpbmcgPSBkaXNhYmxlTGF6eVJlYWRpbmcsCiAgICAgICAgdGhpcy5hbHdheXNDcmVhdGVOZXdOYW1lZE5vZGVzID0gYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlcyA/PyBmYWxzZTsKCiAgZmFpbChTdHJpbmcgbWVzc2FnZSkgewogICAgdGhyb3cgUGFyc2VFcnJvcihtZXNzYWdlLAogICAgICAgIGJ5dGVJbmRleDogX2J5dGVPZmZzZXQsIGZpbGVuYW1lOiBmaWxlbmFtZSwgcGF0aDogZGVidWdQYXRoLmpvaW4oJzo6JykpOwogIH0KCiAgaW50IGdldCBieXRlT2Zmc2V0ID0+IF9ieXRlT2Zmc2V0OwoKICBpbnQgcmVhZEJ5dGUoKSA9PiBfYnl0ZXNbX2J5dGVPZmZzZXQrK107CgogIGludCByZWFkVUludCgpIHsKICAgIHZhciBieXRlID0gcmVhZEJ5dGUoKTsKICAgIGlmIChieXRlICYgMHg4MCA9PSAwKSB7CiAgICAgIC8vIDB4eHh4eHh4CiAgICAgIHJldHVybiBieXRlOwogICAgfSBlbHNlIGlmIChieXRlICYgMHg0MCA9PSAwKSB7CiAgICAgIC8vIDEweHh4eHh4CiAgICAgIHJldHVybiAoKGJ5dGUgJiAweDNGKSA8PCA4KSB8IHJlYWRCeXRlKCk7CiAgICB9IGVsc2UgewogICAgICAvLyAxMXh4eHh4eAogICAgICByZXR1cm4gKChieXRlICYgMHgzRikgPDwgMjQpIHwKICAgICAgICAgIChyZWFkQnl0ZSgpIDw8IDE2KSB8CiAgICAgICAgICAocmVhZEJ5dGUoKSA8PCA4KSB8CiAgICAgICAgICByZWFkQnl0ZSgpOwogICAgfQogIH0KCiAgaW50IHJlYWRVaW50MzIoKSB7CiAgICByZXR1cm4gKHJlYWRCeXRlKCkgPDwgMjQpIHwKICAgICAgICAocmVhZEJ5dGUoKSA8PCAxNikgfAogICAgICAgIChyZWFkQnl0ZSgpIDw8IDgpIHwKICAgICAgICByZWFkQnl0ZSgpOwogIH0KCiAgZmluYWwgRmxvYXQ2NExpc3QgX2RvdWJsZUJ1ZmZlciA9IG5ldyBGbG9hdDY0TGlzdCgxKTsKICBVaW50OExpc3QgX2RvdWJsZUJ1ZmZlclVpbnQ4OwoKICBkb3VibGUgcmVhZERvdWJsZSgpIHsKICAgIF9kb3VibGVCdWZmZXJVaW50OCA/Pz0gX2RvdWJsZUJ1ZmZlci5idWZmZXIuYXNVaW50OExpc3QoKTsKICAgIF9kb3VibGVCdWZmZXJVaW50OFswXSA9IHJlYWRCeXRlKCk7CiAgICBfZG91YmxlQnVmZmVyVWludDhbMV0gPSByZWFkQnl0ZSgpOwogICAgX2RvdWJsZUJ1ZmZlclVpbnQ4WzJdID0gcmVhZEJ5dGUoKTsKICAgIF9kb3VibGVCdWZmZXJVaW50OFszXSA9IHJlYWRCeXRlKCk7CiAgICBfZG91YmxlQnVmZmVyVWludDhbNF0gPSByZWFkQnl0ZSgpOwogICAgX2RvdWJsZUJ1ZmZlclVpbnQ4WzVdID0gcmVhZEJ5dGUoKTsKICAgIF9kb3VibGVCdWZmZXJVaW50OFs2XSA9IHJlYWRCeXRlKCk7CiAgICBfZG91YmxlQnVmZmVyVWludDhbN10gPSByZWFkQnl0ZSgpOwogICAgcmV0dXJuIF9kb3VibGVCdWZmZXJbMF07CiAgfQoKICBMaXN0PGludD4gcmVhZEJ5dGVzKGludCBsZW5ndGgpIHsKICAgIExpc3Q8aW50PiBieXRlcyA9IG5ldyBVaW50OExpc3QobGVuZ3RoKTsKICAgIGJ5dGVzLnNldFJhbmdlKDAsIGJ5dGVzLmxlbmd0aCwgX2J5dGVzLCBfYnl0ZU9mZnNldCk7CiAgICBfYnl0ZU9mZnNldCArPSBieXRlcy5sZW5ndGg7CiAgICByZXR1cm4gYnl0ZXM7CiAgfQoKICBMaXN0PGludD4gcmVhZEJ5dGVMaXN0KCkgewogICAgcmV0dXJuIHJlYWRCeXRlcyhyZWFkVUludCgpKTsKICB9CgogIFN0cmluZyByZWFkU3RyaW5nRW50cnkoaW50IG51bUJ5dGVzKSB7CiAgICAvLyBVdGY4RGVjb2RlciB3aWxsIHNraXAgbGVhZGluZyBCT00gY2hhcmFjdGVycywgYnV0IHdlIG11c3QgcHJlc2VydmUgdGhlbS4KICAgIC8vIENvbGxlY3QgbGVhZGluZyBCT01zIGJlZm9yZSBwYXNzaW5nIHRoZSBieXRlcyBvbnRvIFV0ZjhEZWNvZGVyLgogICAgaW50IG51bUJ5dGVPcmRlck1hcmtzID0gMDsKICAgIHdoaWxlIChfYnl0ZU9mZnNldCArIDIgPCBfYnl0ZXMubGVuZ3RoICYmCiAgICAgICAgX2J5dGVzW19ieXRlT2Zmc2V0XSA9PSAweGVmICYmCiAgICAgICAgX2J5dGVzW19ieXRlT2Zmc2V0ICsgMV0gPT0gMHhiYiAmJgogICAgICAgIF9ieXRlc1tfYnl0ZU9mZnNldCArIDJdID09IDB4YmYpIHsKICAgICAgKytudW1CeXRlT3JkZXJNYXJrczsKICAgICAgX2J5dGVPZmZzZXQgKz0gMzsKICAgICAgbnVtQnl0ZXMgLT0gMzsKICAgIH0KICAgIFN0cmluZyBzdHJpbmcgPSBjb25zdCBVdGY4RGVjb2RlcigpCiAgICAgICAgLmNvbnZlcnQoX2J5dGVzLCBfYnl0ZU9mZnNldCwgX2J5dGVPZmZzZXQgKyBudW1CeXRlcyk7CiAgICBfYnl0ZU9mZnNldCArPSBudW1CeXRlczsKICAgIGlmIChudW1CeXRlT3JkZXJNYXJrcyA+IDApIHsKICAgICAgcmV0dXJuICdcdWZlZmYnICogbnVtQnl0ZU9yZGVyTWFya3MgKyBzdHJpbmc7CiAgICB9CiAgICByZXR1cm4gc3RyaW5nOwogIH0KCiAgLy8vIFJlYWQgbWV0YWRhdGFNYXBwaW5ncyBzZWN0aW9uIGZyb20gdGhlIGJpbmFyeS4KICB2b2lkIF9yZWFkTWV0YWRhdGFNYXBwaW5ncygKICAgICAgQ29tcG9uZW50IGNvbXBvbmVudCwgaW50IGJpbmFyeU9mZnNldEZvck1ldGFkYXRhUGF5bG9hZHMpIHsKICAgIC8vIERlZmF1bHQgcmVhZGVyIGlnbm9yZXMgbWV0YWRhdGEgc2VjdGlvbiBlbnRpcmVseS4KICB9CgogIC8vLyBSZWFkcyBtZXRhZGF0YSBmb3IgdGhlIGdpdmVuIFtub2RlXS4KICBOb2RlIF9hc3NvY2lhdGVNZXRhZGF0YShOb2RlIG5vZGUsIGludCBub2RlT2Zmc2V0KSB7CiAgICAvLyBEZWZhdWx0IHJlYWRlciBpZ25vcmVzIG1ldGFkYXRhIHNlY3Rpb24gZW50aXJlbHkuCiAgICByZXR1cm4gbm9kZTsKICB9CgogIHZvaWQgcmVhZFN0cmluZ1RhYmxlKExpc3Q8U3RyaW5nPiB0YWJsZSkgewogICAgLy8gUmVhZCB0aGUgdGFibGUgb2YgZW5kIG9mZnNldHMuCiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIExpc3Q8aW50PiBlbmRPZmZzZXRzID0gbmV3IExpc3Q8aW50PihsZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICBlbmRPZmZzZXRzW2ldID0gcmVhZFVJbnQoKTsKICAgIH0KICAgIC8vIFJlYWQgdGhlIFVURi04IGVuY29kZWQgc3RyaW5ncy4KICAgIHRhYmxlLmxlbmd0aCA9IGxlbmd0aDsKICAgIGludCBzdGFydE9mZnNldCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHRhYmxlW2ldID0gcmVhZFN0cmluZ0VudHJ5KGVuZE9mZnNldHNbaV0gLSBzdGFydE9mZnNldCk7CiAgICAgIHN0YXJ0T2Zmc2V0ID0gZW5kT2Zmc2V0c1tpXTsKICAgIH0KICB9CgogIHZvaWQgcmVhZENvbnN0YW50VGFibGUoKSB7CiAgICBmaW5hbCBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIGZpbmFsIGludCBzdGFydE9mZnNldCA9IGJ5dGVPZmZzZXQ7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIF9jb25zdGFudFRhYmxlW2J5dGVPZmZzZXQgLSBzdGFydE9mZnNldF0gPSByZWFkQ29uc3RhbnRUYWJsZUVudHJ5KCk7CiAgICB9CiAgfQoKICBDb25zdGFudCByZWFkQ29uc3RhbnRUYWJsZUVudHJ5KCkgewogICAgZmluYWwgaW50IGNvbnN0YW50VGFnID0gcmVhZEJ5dGUoKTsKICAgIHN3aXRjaCAoY29uc3RhbnRUYWcpIHsKICAgICAgY2FzZSBDb25zdGFudFRhZy5OdWxsQ29uc3RhbnQ6CiAgICAgICAgcmV0dXJuIG5ldyBOdWxsQ29uc3RhbnQoKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5Cb29sQ29uc3RhbnQ6CiAgICAgICAgcmV0dXJuIG5ldyBCb29sQ29uc3RhbnQocmVhZEJ5dGUoKSA9PSAxKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5JbnRDb25zdGFudDoKICAgICAgICByZXR1cm4gbmV3IEludENvbnN0YW50KChyZWFkRXhwcmVzc2lvbigpIGFzIEludExpdGVyYWwpLnZhbHVlKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5Eb3VibGVDb25zdGFudDoKICAgICAgICByZXR1cm4gbmV3IERvdWJsZUNvbnN0YW50KHJlYWREb3VibGUoKSk7CiAgICAgIGNhc2UgQ29uc3RhbnRUYWcuU3RyaW5nQ29uc3RhbnQ6CiAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdDb25zdGFudChyZWFkU3RyaW5nUmVmZXJlbmNlKCkpOwogICAgICBjYXNlIENvbnN0YW50VGFnLlN5bWJvbENvbnN0YW50OgogICAgICAgIFJlZmVyZW5jZSBsaWJyYXJ5UmVmZXJlbmNlID0gcmVhZExpYnJhcnlSZWZlcmVuY2UoYWxsb3dOdWxsOiB0cnVlKTsKICAgICAgICByZXR1cm4gbmV3IFN5bWJvbENvbnN0YW50KHJlYWRTdHJpbmdSZWZlcmVuY2UoKSwgbGlicmFyeVJlZmVyZW5jZSk7CiAgICAgIGNhc2UgQ29uc3RhbnRUYWcuTWFwQ29uc3RhbnQ6CiAgICAgICAgZmluYWwgRGFydFR5cGUga2V5VHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIGZpbmFsIERhcnRUeXBlIHZhbHVlVHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIGZpbmFsIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgICAgIGZpbmFsIExpc3Q8Q29uc3RhbnRNYXBFbnRyeT4gZW50cmllcyA9CiAgICAgICAgICAgIG5ldyBMaXN0PENvbnN0YW50TWFwRW50cnk+LmZpbGxlZChsZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBmaW5hbCBDb25zdGFudCBrZXkgPSByZWFkQ29uc3RhbnRSZWZlcmVuY2UoKTsKICAgICAgICAgIGZpbmFsIENvbnN0YW50IHZhbHVlID0gcmVhZENvbnN0YW50UmVmZXJlbmNlKCk7CiAgICAgICAgICBlbnRyaWVzW2ldID0gbmV3IENvbnN0YW50TWFwRW50cnkoa2V5LCB2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgTWFwQ29uc3RhbnQoa2V5VHlwZSwgdmFsdWVUeXBlLCBlbnRyaWVzKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5MaXN0Q29uc3RhbnQ6CiAgICAgICAgZmluYWwgRGFydFR5cGUgdHlwZUFyZ3VtZW50ID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgZmluYWwgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICAgICAgZmluYWwgTGlzdDxDb25zdGFudD4gZW50cmllcyA9CiAgICAgICAgICAgIG5ldyBMaXN0PENvbnN0YW50Pi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgZW50cmllc1tpXSA9IHJlYWRDb25zdGFudFJlZmVyZW5jZSgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IExpc3RDb25zdGFudCh0eXBlQXJndW1lbnQsIGVudHJpZXMpOwogICAgICBjYXNlIENvbnN0YW50VGFnLlNldENvbnN0YW50OgogICAgICAgIGZpbmFsIERhcnRUeXBlIHR5cGVBcmd1bWVudCA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIGZpbmFsIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgICAgIGZpbmFsIExpc3Q8Q29uc3RhbnQ+IGVudHJpZXMgPQogICAgICAgICAgICBuZXcgTGlzdDxDb25zdGFudD4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGVudHJpZXNbaV0gPSByZWFkQ29uc3RhbnRSZWZlcmVuY2UoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBTZXRDb25zdGFudCh0eXBlQXJndW1lbnQsIGVudHJpZXMpOwogICAgICBjYXNlIENvbnN0YW50VGFnLkluc3RhbmNlQ29uc3RhbnQ6CiAgICAgICAgZmluYWwgUmVmZXJlbmNlIGNsYXNzUmVmZXJlbmNlID0gcmVhZENsYXNzUmVmZXJlbmNlKCk7CiAgICAgICAgZmluYWwgaW50IHR5cGVBcmd1bWVudENvdW50ID0gcmVhZFVJbnQoKTsKICAgICAgICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0KICAgICAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCh0eXBlQXJndW1lbnRDb3VudCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZUFyZ3VtZW50Q291bnQ7IGkrKykgewogICAgICAgICAgdHlwZUFyZ3VtZW50c1tpXSA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIH0KICAgICAgICBmaW5hbCBpbnQgZmllbGRWYWx1ZUNvdW50ID0gcmVhZFVJbnQoKTsKICAgICAgICBmaW5hbCBNYXA8UmVmZXJlbmNlLCBDb25zdGFudD4gZmllbGRWYWx1ZXMgPSA8UmVmZXJlbmNlLCBDb25zdGFudD57fTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZpZWxkVmFsdWVDb3VudDsgaSsrKSB7CiAgICAgICAgICBmaW5hbCBSZWZlcmVuY2UgZmllbGRSZWYgPQogICAgICAgICAgICAgIHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKCkuZ2V0UmVmZXJlbmNlKCk7CiAgICAgICAgICBmaW5hbCBDb25zdGFudCBjb25zdGFudCA9IHJlYWRDb25zdGFudFJlZmVyZW5jZSgpOwogICAgICAgICAgZmllbGRWYWx1ZXNbZmllbGRSZWZdID0gY29uc3RhbnQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgSW5zdGFuY2VDb25zdGFudChjbGFzc1JlZmVyZW5jZSwgdHlwZUFyZ3VtZW50cywgZmllbGRWYWx1ZXMpOwogICAgICBjYXNlIENvbnN0YW50VGFnLlBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQ6CiAgICAgICAgZmluYWwgdGVhck9mZkNvbnN0YW50ID0gcmVhZENvbnN0YW50UmVmZXJlbmNlKCkgYXMgVGVhck9mZkNvbnN0YW50OwogICAgICAgIGZpbmFsIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgICAgIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVzID0gbmV3IExpc3Q8RGFydFR5cGU+KGxlbmd0aCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgdHlwZXNbaV0gPSByZWFkRGFydFR5cGUoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KHRlYXJPZmZDb25zdGFudCwgdHlwZXMpOwogICAgICBjYXNlIENvbnN0YW50VGFnLlRlYXJPZmZDb25zdGFudDoKICAgICAgICBmaW5hbCBSZWZlcmVuY2UgcmVmZXJlbmNlID0gcmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoKS5nZXRSZWZlcmVuY2UoKTsKICAgICAgICByZXR1cm4gbmV3IFRlYXJPZmZDb25zdGFudC5ieVJlZmVyZW5jZShyZWZlcmVuY2UpOwogICAgICBjYXNlIENvbnN0YW50VGFnLlR5cGVMaXRlcmFsQ29uc3RhbnQ6CiAgICAgICAgZmluYWwgRGFydFR5cGUgdHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIHJldHVybiBuZXcgVHlwZUxpdGVyYWxDb25zdGFudCh0eXBlKTsKICAgICAgY2FzZSBDb25zdGFudFRhZy5VbmV2YWx1YXRlZENvbnN0YW50OgogICAgICAgIGZpbmFsIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHJlYWRFeHByZXNzaW9uKCk7CiAgICAgICAgcmV0dXJuIG5ldyBVbmV2YWx1YXRlZENvbnN0YW50KGV4cHJlc3Npb24pOwogICAgfQoKICAgIHRocm93IGZhaWwoJ3VuZXhwZWN0ZWQgY29uc3RhbnQgdGFnOiAkY29uc3RhbnRUYWcnKTsKICB9CgogIENvbnN0YW50IHJlYWRDb25zdGFudFJlZmVyZW5jZSgpIHsKICAgIGZpbmFsIGludCBvZmZzZXQgPSByZWFkVUludCgpOwogICAgQ29uc3RhbnQgY29uc3RhbnQgPSBfY29uc3RhbnRUYWJsZVtvZmZzZXRdOwogICAgYXNzZXJ0KGNvbnN0YW50ICE9IG51bGwpOwogICAgcmV0dXJuIGNvbnN0YW50OwogIH0KCiAgVXJpIHJlYWRVcmlSZWZlcmVuY2UoKSB7CiAgICByZXR1cm4gX3NvdXJjZVVyaVRhYmxlW3JlYWRVSW50KCldOwogIH0KCiAgU3RyaW5nIHJlYWRTdHJpbmdSZWZlcmVuY2UoKSB7CiAgICByZXR1cm4gX3N0cmluZ1RhYmxlW3JlYWRVSW50KCldOwogIH0KCiAgTGlzdDxTdHJpbmc+IHJlYWRTdHJpbmdSZWZlcmVuY2VMaXN0KCkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBMaXN0PFN0cmluZz4gcmVzdWx0ID0gbmV3IExpc3Q8U3RyaW5nPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWRTdHJpbmdSZWZlcmVuY2UoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJpbmcgcmVhZFN0cmluZ09yTnVsbElmRW1wdHkoKSB7CiAgICB2YXIgc3RyaW5nID0gcmVhZFN0cmluZ1JlZmVyZW5jZSgpOwogICAgcmV0dXJuIHN0cmluZy5pc0VtcHR5ID8gbnVsbCA6IHN0cmluZzsKICB9CgogIGJvb2wgcmVhZEFuZENoZWNrT3B0aW9uVGFnKCkgewogICAgaW50IHRhZyA9IHJlYWRCeXRlKCk7CiAgICBpZiAodGFnID09IFRhZy5Ob3RoaW5nKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gZWxzZSBpZiAodGFnID09IFRhZy5Tb21ldGhpbmcpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBmYWlsKCd1bmV4cGVjdGVkIG9wdGlvbiB0YWc6ICR0YWcnKTsKICAgIH0KICB9CgogIExpc3Q8RXhwcmVzc2lvbj4gcmVhZEFubm90YXRpb25MaXN0KFRyZWVOb2RlIHBhcmVudCkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBpZiAobGVuZ3RoID09IDApIHJldHVybiBjb25zdCA8RXhwcmVzc2lvbj5bXTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gbGlzdCA9CiAgICAgICAgbmV3IExpc3Q8RXhwcmVzc2lvbj4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICBsaXN0W2ldID0gcmVhZEV4cHJlc3Npb24oKS4ucGFyZW50ID0gcGFyZW50OwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICB2b2lkIF9maWxsVHJlZU5vZGVMaXN0KAogICAgICBMaXN0PFRyZWVOb2RlPiBsaXN0LCBUcmVlTm9kZSBidWlsZE9iamVjdChpbnQgaW5kZXgpLCBUcmVlTm9kZSBwYXJlbnQpIHsKICAgIHZhciBsZW5ndGggPSByZWFkVUludCgpOwogICAgbGlzdC5sZW5ndGggPSBsZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIFRyZWVOb2RlIG9iamVjdCA9IGJ1aWxkT2JqZWN0KGkpOwogICAgICBsaXN0W2ldID0gb2JqZWN0Li5wYXJlbnQgPSBwYXJlbnQ7CiAgICB9CiAgfQoKICB2b2lkIF9maWxsTm9uVHJlZU5vZGVMaXN0KExpc3Q8Tm9kZT4gbGlzdCwgTm9kZSBidWlsZE9iamVjdCgpKSB7CiAgICB2YXIgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIGxpc3QubGVuZ3RoID0gbGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICBOb2RlIG9iamVjdCA9IGJ1aWxkT2JqZWN0KCk7CiAgICAgIGxpc3RbaV0gPSBvYmplY3Q7CiAgICB9CiAgfQoKICB2b2lkIF9za2lwTm9kZUxpc3QoTm9kZSBza2lwT2JqZWN0KCkpIHsKICAgIHZhciBsZW5ndGggPSByZWFkVUludCgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICBza2lwT2JqZWN0KCk7CiAgICB9CiAgfQoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIG5hbWVkIG5vZGVzLCByZXVzaW5nIGFueSBleGlzdGluZyBvYmplY3RzIGFscmVhZHkgaW4gdGhlCiAgLy8vIGxpbmtpbmcgdHJlZS4gVGhlIG5vZGVzIGFyZSBtZXJnZWQgaW50byBbbGlzdF0sIGFuZCBpZiByZWFkaW5nIHRoZSBsaWJyYXJ5CiAgLy8vIGltcGxlbWVudGF0aW9uLCB0aGUgb3JkZXIgaXMgY29ycmVjdGVkLgogIC8vLwogIC8vLyBbcmVhZE9iamVjdF0gc2hvdWxkIHJlYWQgdGhlIG9iamVjdCBkZWZpbml0aW9uIGFuZCBpdHMgY2Fub25pY2FsIG5hbWUuCiAgLy8vIElmIGFuIGV4aXN0aW5nIG9iamVjdCBpcyBib3VuZCB0byB0aGUgY2Fub25pY2FsIG5hbWUsIHRoZSBleGlzdGluZyBvYmplY3QKICAvLy8gbXVzdCBiZSByZXVzZWQgYW5kIHJldHVybmVkLgogIHZvaWQgX21lcmdlTmFtZWROb2RlTGlzdCgKICAgICAgTGlzdDxOYW1lZE5vZGU+IGxpc3QsIE5hbWVkTm9kZSByZWFkT2JqZWN0KGludCBpbmRleCksIFRyZWVOb2RlIHBhcmVudCkgewogICAgaWYgKF9pc1JlYWRpbmdMaWJyYXJ5SW1wbGVtZW50YXRpb24pIHsKICAgICAgLy8gV2hlbiByZWFkaW5nIHRoZSBsaWJyYXJ5IGltcGxlbWVudGF0aW9uLCBvdmVyd3JpdGUgdGhlIHdob2xlIGxpc3QKICAgICAgLy8gd2l0aCB0aGUgbmV3IG9uZS4KICAgICAgX2ZpbGxUcmVlTm9kZUxpc3QobGlzdCwgcmVhZE9iamVjdCwgcGFyZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFdoZW4gcmVhZGluZyBhbiBleHRlcm5hbCBsaWJyYXJ5LCB0aGUgcmVzdWx0cyBzaG91bGQgZWl0aGVyIGJlOgogICAgICAvLyAtIG1lcmdlZCB3aXRoIHRoZSBleGlzdGluZyBleHRlcm5hbCBsaWJyYXJ5IGRlZmluaXRpb24gKGlmIGFueSkKICAgICAgLy8gLSBpZ25vcmVkIGlmIHRoZSBsaWJyYXJ5IGltcGxlbWVudGF0aW9uIGlzIGFscmVhZHkgaW4gbWVtb3J5CiAgICAgIGludCBudW1iZXJPZk5vZGVzID0gcmVhZFVJbnQoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZk5vZGVzOyArK2kpIHsKICAgICAgICB2YXIgdmFsdWUgPSByZWFkT2JqZWN0KGkpOwogICAgICAgIC8vIFdlIHVzZSB0aGUgcGFyZW50IHBvaW50ZXIgb2YgYSBub2RlIHRvIGRldGVybWluZSBpZiBpdCBhbHJlYWR5IGlzIGluCiAgICAgICAgLy8gdGhlIEFTVCBhbmQgaGVuY2Ugc2hvdWxkIG5vdCBiZSBhZGRlZCBhZ2Fpbi4KICAgICAgICBpZiAodmFsdWUucGFyZW50ID09IG51bGwpIHsKICAgICAgICAgIGxpc3QuYWRkKHZhbHVlLi5wYXJlbnQgPSBwYXJlbnQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgdm9pZCByZWFkTGlua1RhYmxlKENhbm9uaWNhbE5hbWUgbGlua1Jvb3QpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgX2xpbmtUYWJsZSA9IG5ldyBMaXN0PENhbm9uaWNhbE5hbWU+KGxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIGludCBiaWFzZWRQYXJlbnRJbmRleCA9IHJlYWRVSW50KCk7CiAgICAgIFN0cmluZyBuYW1lID0gcmVhZFN0cmluZ1JlZmVyZW5jZSgpOwogICAgICB2YXIgcGFyZW50ID0KICAgICAgICAgIGJpYXNlZFBhcmVudEluZGV4ID09IDAgPyBsaW5rUm9vdCA6IF9saW5rVGFibGVbYmlhc2VkUGFyZW50SW5kZXggLSAxXTsKICAgICAgX2xpbmtUYWJsZVtpXSA9IHBhcmVudC5nZXRDaGlsZChuYW1lKTsKICAgIH0KICB9CgogIExpc3Q8aW50PiBfaW5kZXhDb21wb25lbnRzKCkgewogICAgaW50IHNhdmVkQnl0ZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgX2J5dGVPZmZzZXQgPSBfYnl0ZXMubGVuZ3RoIC0gNDsKICAgIExpc3Q8aW50PiBpbmRleCA9IDxpbnQ+W107CiAgICB3aGlsZSAoX2J5dGVPZmZzZXQgPiAwKSB7CiAgICAgIGludCBzaXplID0gcmVhZFVpbnQzMigpOwogICAgICBpbnQgc3RhcnQgPSBfYnl0ZU9mZnNldCAtIHNpemU7CiAgICAgIGlmIChzdGFydCA8IDApIHsKICAgICAgICB0aHJvdyBmYWlsKCJpbmRpY2F0ZWQgc2l6ZSBkb2VzIG5vdCBtYXRjaCBmaWxlIHNpemUiKTsKICAgICAgfQogICAgICBpbmRleC5hZGQoc2l6ZSk7CiAgICAgIF9ieXRlT2Zmc2V0ID0gc3RhcnQgLSA0OwogICAgfQogICAgX2J5dGVPZmZzZXQgPSBzYXZlZEJ5dGVPZmZzZXQ7CiAgICByZXR1cm4gbmV3IExpc3QuZnJvbShpbmRleC5yZXZlcnNlZCk7CiAgfQoKICAvLy8gRGVzZXJpYWxpemVzIGEga2VybmVsIGNvbXBvbmVudCBhbmQgc3RvcmVzIGl0IGluIFtjb21wb25lbnRdLgogIC8vLwogIC8vLyBXaGVuIGxpbmtpbmcgd2l0aCBhIG5vbi1lbXB0eSBjb21wb25lbnQsIGNhbm9uaWNhbCBuYW1lcyBtdXN0IGhhdmUgYmVlbgogIC8vLyBjb21wdXRlZCBhaGVhZCBvZiB0aW1lLgogIC8vLwogIC8vLyBUaGUgaW5wdXQgYnl0ZXMgbWF5IGNvbnRhaW4gbXVsdGlwbGUgZmlsZXMgY29uY2F0ZW5hdGVkLgogIHZvaWQgcmVhZENvbXBvbmVudChDb21wb25lbnQgY29tcG9uZW50LCB7Ym9vbCBjaGVja0Nhbm9uaWNhbE5hbWVzOiBmYWxzZX0pIHsKICAgIC8vIENoZWNrIHRoYXQgd2UgaGF2ZSBhIC5kaWxsIGZpbGUgYW5kIGl0IGhhcyB0aGUgY29ycmVjdCB2ZXJzaW9uIGJlZm9yZSB3ZQogICAgLy8gc3RhcnQgZGVjb2RpbmcgaXQuICBPdGhlcndpc2Ugd2Ugd2lsbCBmYWlsIGZvciBjcnlwdGljIHJlYXNvbnMuCiAgICBpbnQgb2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBpbnQgbWFnaWMgPSByZWFkVWludDMyKCk7CiAgICBpZiAobWFnaWMgIT0gVGFnLkNvbXBvbmVudEZpbGUpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcignTm90IGEgLmRpbGwgZmlsZSAod3JvbmcgbWFnaWMgbnVtYmVyKS4nKTsKICAgIH0KICAgIGludCB2ZXJzaW9uID0gcmVhZFVpbnQzMigpOwogICAgaWYgKHZlcnNpb24gIT0gVGFnLkJpbmFyeUZvcm1hdFZlcnNpb24pIHsKICAgICAgdGhyb3cgSW52YWxpZEtlcm5lbFZlcnNpb25FcnJvcih2ZXJzaW9uKTsKICAgIH0KICAgIF9ieXRlT2Zmc2V0ID0gb2Zmc2V0OwogICAgTGlzdDxpbnQ+IGNvbXBvbmVudEZpbGVTaXplcyA9IF9pbmRleENvbXBvbmVudHMoKTsKICAgIGlmIChjb21wb25lbnRGaWxlU2l6ZXMubGVuZ3RoID4gMSkgewogICAgICBfZGlzYWJsZUxhenlSZWFkaW5nID0gdHJ1ZTsKICAgIH0KICAgIGludCBjb21wb25lbnRGaWxlSW5kZXggPSAwOwogICAgd2hpbGUgKF9ieXRlT2Zmc2V0IDwgX2J5dGVzLmxlbmd0aCkgewogICAgICBfcmVhZE9uZUNvbXBvbmVudChjb21wb25lbnQsIGNvbXBvbmVudEZpbGVTaXplc1tjb21wb25lbnRGaWxlSW5kZXhdKTsKICAgICAgKytjb21wb25lbnRGaWxlSW5kZXg7CiAgICB9CgogICAgaWYgKGNoZWNrQ2Fub25pY2FsTmFtZXMpIHsKICAgICAgX2NoZWNrQ2Fub25pY2FsTmFtZUNoaWxkcmVuKGNvbXBvbmVudC5yb290KTsKICAgIH0KICB9CgogIC8vLyBEZXNlcmlhbGl6ZXMgdGhlIHNvdXJjZSBhbmQgc3RvcmVzIGl0IGluIFtjb21wb25lbnRdLgogIC8vLwogIC8vLyBUaGUgaW5wdXQgYnl0ZXMgbWF5IGNvbnRhaW4gbXVsdGlwbGUgZmlsZXMgY29uY2F0ZW5hdGVkLgogIHZvaWQgcmVhZENvbXBvbmVudFNvdXJjZShDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBMaXN0PGludD4gY29tcG9uZW50RmlsZVNpemVzID0gX2luZGV4Q29tcG9uZW50cygpOwogICAgaWYgKGNvbXBvbmVudEZpbGVTaXplcy5sZW5ndGggPiAxKSB7CiAgICAgIF9kaXNhYmxlTGF6eVJlYWRpbmcgPSB0cnVlOwogICAgfQogICAgaW50IGNvbXBvbmVudEZpbGVJbmRleCA9IDA7CiAgICB3aGlsZSAoX2J5dGVPZmZzZXQgPCBfYnl0ZXMubGVuZ3RoKSB7CiAgICAgIF9yZWFkT25lQ29tcG9uZW50U291cmNlKAogICAgICAgICAgY29tcG9uZW50LCBjb21wb25lbnRGaWxlU2l6ZXNbY29tcG9uZW50RmlsZUluZGV4XSk7CiAgICAgICsrY29tcG9uZW50RmlsZUluZGV4OwogICAgfQogIH0KCiAgLy8vIFJlYWRzIGEgc2luZ2xlIGNvbXBvbmVudCBmaWxlIGZyb20gdGhlIGlucHV0IGFuZCBsb2FkcyBpdCBpbnRvIFtjb21wb25lbnRdLAogIC8vLyBvdmVyd3JpdGluZyBhbmQgcmV1c2luZyBhbnkgZXhpc3RpbmcgZGF0YSBpbiB0aGUgY29tcG9uZW50LgogIC8vLwogIC8vLyBXaGVuIGxpbmtpbmcgd2l0aCBhIG5vbi1lbXB0eSBjb21wb25lbnQsIGNhbm9uaWNhbCBuYW1lcyBtdXN0IGhhdmUgYmVlbgogIC8vLyBjb21wdXRlZCBhaGVhZCBvZiB0aW1lLgogIC8vLwogIC8vLyBUaGlzIHNob3VsZCAqb25seSogYmUgdXNlZCB3aGVuIHRoZXJlIGlzIGEgcmVhc29uIHRvIG5vdCBhbGxvdwogIC8vLyBjb25jYXRlbmF0ZWQgZmlsZXMuCiAgdm9pZCByZWFkU2luZ2xlRmlsZUNvbXBvbmVudChDb21wb25lbnQgY29tcG9uZW50LAogICAgICB7Ym9vbCBjaGVja0Nhbm9uaWNhbE5hbWVzOiBmYWxzZX0pIHsKICAgIExpc3Q8aW50PiBjb21wb25lbnRGaWxlU2l6ZXMgPSBfaW5kZXhDb21wb25lbnRzKCk7CiAgICBpZiAoY29tcG9uZW50RmlsZVNpemVzLmlzRW1wdHkpIHRocm93IGZhaWwoImludmFsaWQgY29tcG9uZW50IGRhdGEiKTsKICAgIF9yZWFkT25lQ29tcG9uZW50KGNvbXBvbmVudCwgY29tcG9uZW50RmlsZVNpemVzWzBdKTsKICAgIGlmIChfYnl0ZU9mZnNldCA8IF9ieXRlcy5sZW5ndGgpIHsKICAgICAgaWYgKF9ieXRlT2Zmc2V0ICsgMyA8IF9ieXRlcy5sZW5ndGgpIHsKICAgICAgICBpbnQgbWFnaWMgPSByZWFkVWludDMyKCk7CiAgICAgICAgaWYgKG1hZ2ljID09IFRhZy5Db21wb25lbnRGaWxlKSB7CiAgICAgICAgICB0aHJvdyAnQ29uY2F0ZW5hdGVkIGNvbXBvbmVudCBmaWxlIGdpdmVuIHdoZW4gYSBzaW5nbGUgY29tcG9uZW50ICcKICAgICAgICAgICAgICAnd2FzIGV4cGVjdGVkLic7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRocm93ICdVbnJlY29nbml6ZWQgYnl0ZXMgZm9sbG93aW5nIGNvbXBvbmVudCBkYXRhJzsKICAgIH0KCiAgICBpZiAoY2hlY2tDYW5vbmljYWxOYW1lcykgewogICAgICBfY2hlY2tDYW5vbmljYWxOYW1lQ2hpbGRyZW4oY29tcG9uZW50LnJvb3QpOwogICAgfQogIH0KCiAgdm9pZCBfY2hlY2tDYW5vbmljYWxOYW1lQ2hpbGRyZW4oQ2Fub25pY2FsTmFtZSBwYXJlbnQpIHsKICAgIEl0ZXJhYmxlPENhbm9uaWNhbE5hbWU+IHBhcmVudENoaWxkcmVuID0gcGFyZW50LmNoaWxkcmVuT3JOdWxsOwogICAgaWYgKHBhcmVudENoaWxkcmVuICE9IG51bGwpIHsKICAgICAgZm9yIChDYW5vbmljYWxOYW1lIGNoaWxkIGluIHBhcmVudENoaWxkcmVuKSB7CiAgICAgICAgaWYgKGNoaWxkLm5hbWUgIT0gJ0BtZXRob2RzJyAmJgogICAgICAgICAgICBjaGlsZC5uYW1lICE9ICdAdHlwZWRlZnMnICYmCiAgICAgICAgICAgIGNoaWxkLm5hbWUgIT0gJ0BmaWVsZHMnICYmCiAgICAgICAgICAgIGNoaWxkLm5hbWUgIT0gJ0BnZXR0ZXJzJyAmJgogICAgICAgICAgICBjaGlsZC5uYW1lICE9ICdAc2V0dGVycycgJiYKICAgICAgICAgICAgY2hpbGQubmFtZSAhPSAnQGZhY3RvcmllcycgJiYKICAgICAgICAgICAgY2hpbGQubmFtZSAhPSAnQGNvbnN0cnVjdG9ycycpIHsKICAgICAgICAgIGJvb2wgY2hlY2tSZWZlcmVuY2VOb2RlID0gdHJ1ZTsKICAgICAgICAgIGlmIChjaGlsZC5yZWZlcmVuY2UgPT0gbnVsbCkgewogICAgICAgICAgICAvLyBPSyBmb3IgImlmIHByaXZhdGU6IFVSSSBvZiBsaWJyYXJ5IiBwYXJ0IG9mICJRdWFsaWZpZWQgbmFtZSIuLi4KICAgICAgICAgICAgSXRlcmFibGU8Q2Fub25pY2FsTmFtZT4gY2hpbGRyZW4gPSBjaGlsZC5jaGlsZHJlbk9yTnVsbDsKICAgICAgICAgICAgaWYgKHBhcmVudC5wYXJlbnQgIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgY2hpbGRyZW4gIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgY2hpbGRyZW4uaXNOb3RFbXB0eSAmJgogICAgICAgICAgICAgICAgY2hpbGRyZW4uZmlyc3QubmFtZS5zdGFydHNXaXRoKCJfIikpIHsKICAgICAgICAgICAgICAvLyBPSyB0aGVuLgogICAgICAgICAgICAgIGNoZWNrUmVmZXJlbmNlTm9kZSA9IGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRocm93IGJ1aWxkQ2Fub25pY2FsTmFtZUVycm9yKAogICAgICAgICAgICAgICAgICAiTnVsbCByZWZlcmVuY2UgKCR7Y2hpbGQubmFtZX0pICgkY2hpbGQpLiIsIGNoaWxkKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGNoZWNrUmVmZXJlbmNlTm9kZSkgewogICAgICAgICAgICBpZiAoY2hpbGQucmVmZXJlbmNlLmNhbm9uaWNhbE5hbWUgIT0gY2hpbGQpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgQ2Fub25pY2FsTmFtZUVycm9yKAogICAgICAgICAgICAgICAgICAiQ2Fub25pY2FsIG5hbWUgYW5kIHJlZmVyZW5jZSBkb2Vzbid0IGFncmVlLiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjaGlsZC5yZWZlcmVuY2Uubm9kZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgdGhyb3cgYnVpbGRDYW5vbmljYWxOYW1lRXJyb3IoCiAgICAgICAgICAgICAgICAgICJSZWZlcmVuY2UgaXMgbnVsbCAoJHtjaGlsZC5uYW1lfSkgKCRjaGlsZCkuIiwgY2hpbGQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9jaGVja0Nhbm9uaWNhbE5hbWVDaGlsZHJlbihjaGlsZCk7CiAgICAgIH0KICAgIH0KICB9CgogIENhbm9uaWNhbE5hbWVFcnJvciBidWlsZENhbm9uaWNhbE5hbWVFcnJvcigKICAgICAgU3RyaW5nIG1lc3NhZ2UsIENhbm9uaWNhbE5hbWUgcHJvYmxlbU5vZGUpIHsKICAgIC8vIFNwZWNpYWwtY2FzZSBtaXNzaW5nIHNkayBlbnRyaWVzIGFzIHRoYXQgaXMgcHJvYmFibHkgYSBjaGFuZ2UgdG8gdGhlCiAgICAvLyBwbGF0Zm9ybSAtIHRoYXQncyBzb21ldGhpbmcgd2UgbWlnaHQgd2FudCB0byByZWFjdCBkaWZmZXJlbnRseSB0by4KICAgIFN0cmluZyBsaWJyYXJ5VXJpID0gcHJvYmxlbU5vZGU/Lm5vblJvb3RUb3A/Lm5hbWUgPz8gIiI7CiAgICBpZiAobGlicmFyeVVyaS5zdGFydHNXaXRoKCJkYXJ0OiIpKSB7CiAgICAgIHJldHVybiBuZXcgQ2Fub25pY2FsTmFtZVNka0Vycm9yKG1lc3NhZ2UpOwogICAgfQogICAgcmV0dXJuIG5ldyBDYW5vbmljYWxOYW1lRXJyb3IobWVzc2FnZSk7CiAgfQoKICBfQ29tcG9uZW50SW5kZXggX3JlYWRDb21wb25lbnRJbmRleChpbnQgY29tcG9uZW50RmlsZVNpemUpIHsKICAgIGludCBzYXZlZEJ5dGVJbmRleCA9IF9ieXRlT2Zmc2V0OwoKICAgIF9Db21wb25lbnRJbmRleCByZXN1bHQgPSBuZXcgX0NvbXBvbmVudEluZGV4KCk7CgogICAgLy8gVGhlcmUgYXJlIHR3byBmaWVsZHM6IGZpbGUgc2l6ZSBhbmQgbGlicmFyeSBjb3VudC4KICAgIF9ieXRlT2Zmc2V0ID0gX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ICsgY29tcG9uZW50RmlsZVNpemUgLSAoMikgKiA0OwogICAgcmVzdWx0LmxpYnJhcnlDb3VudCA9IHJlYWRVaW50MzIoKTsKICAgIC8vIExpYnJhcnkgb2Zmc2V0cyBhcmUgdXNlZCBmb3Igc3RhcnQgYW5kIGVuZCBvZmZzZXRzLCBzbyB0aGVyZSBpcyBvbmUgZXh0cmEKICAgIC8vIGVsZW1lbnQgdGhhdCB0aGlzIHRoZSBlbmQgb2Zmc2V0IG9mIHRoZSBsYXN0IGxpYnJhcnkKICAgIHJlc3VsdC5saWJyYXJ5T2Zmc2V0cyA9IG5ldyBMaXN0PGludD4ocmVzdWx0LmxpYnJhcnlDb3VudCArIDEpOwogICAgcmVzdWx0LmNvbXBvbmVudEZpbGVTaXplSW5CeXRlcyA9IHJlYWRVaW50MzIoKTsKICAgIGlmIChyZXN1bHQuY29tcG9uZW50RmlsZVNpemVJbkJ5dGVzICE9IGNvbXBvbmVudEZpbGVTaXplKSB7CiAgICAgIHRocm93ICdNYWxmb3JtZWQgYmluYXJ5OiBUaGlzIGNvbXBvbmVudCBmaWxlXCdzIGNvbXBvbmVudCBpbmRleCBpbmRpY2F0ZXMgdGhhdCcKICAgICAgICAgICcgdGhlIGZpbGVzaXplIHNob3VsZCBiZSAkY29tcG9uZW50RmlsZVNpemUgYnV0IG90aGVyIGNvbXBvbmVudCBpbmRleGVzJwogICAgICAgICAgJyBoYXMgaW5kaWNhdGVkIHRoYXQgdGhlIHNpemUgc2hvdWxkIGJlICcKICAgICAgICAgICcke3Jlc3VsdC5jb21wb25lbnRGaWxlU2l6ZUluQnl0ZXN9Lic7CiAgICB9CgogICAgLy8gU2tpcCB0byB0aGUgc3RhcnQgb2YgdGhlIGluZGV4LgogICAgX2J5dGVPZmZzZXQgLT0KICAgICAgICAoKHJlc3VsdC5saWJyYXJ5Q291bnQgKyAxKSArIF9Db21wb25lbnRJbmRleC5udW1iZXJPZkZpeGVkRmllbGRzKSAqIDQ7CgogICAgLy8gTm93IHJlYWQgdGhlIGNvbXBvbmVudCBpbmRleC4KICAgIHJlc3VsdC5iaW5hcnlPZmZzZXRGb3JTb3VyY2VUYWJsZSA9IF9jb21wb25lbnRTdGFydE9mZnNldCArIHJlYWRVaW50MzIoKTsKICAgIHJlc3VsdC5iaW5hcnlPZmZzZXRGb3JDYW5vbmljYWxOYW1lcyA9IF9jb21wb25lbnRTdGFydE9mZnNldCArIHJlYWRVaW50MzIoKTsKICAgIHJlc3VsdC5iaW5hcnlPZmZzZXRGb3JNZXRhZGF0YVBheWxvYWRzID0KICAgICAgICBfY29tcG9uZW50U3RhcnRPZmZzZXQgKyByZWFkVWludDMyKCk7CiAgICByZXN1bHQuYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFNYXBwaW5ncyA9CiAgICAgICAgX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ICsgcmVhZFVpbnQzMigpOwogICAgcmVzdWx0LmJpbmFyeU9mZnNldEZvclN0cmluZ1RhYmxlID0gX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ICsgcmVhZFVpbnQzMigpOwogICAgcmVzdWx0LmJpbmFyeU9mZnNldEZvckNvbnN0YW50VGFibGUgPSBfY29tcG9uZW50U3RhcnRPZmZzZXQgKyByZWFkVWludDMyKCk7CiAgICByZXN1bHQubWFpbk1ldGhvZFJlZmVyZW5jZSA9IHJlYWRVaW50MzIoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0LmxpYnJhcnlDb3VudCArIDE7ICsraSkgewogICAgICByZXN1bHQubGlicmFyeU9mZnNldHNbaV0gPSBfY29tcG9uZW50U3RhcnRPZmZzZXQgKyByZWFkVWludDMyKCk7CiAgICB9CgogICAgX2J5dGVPZmZzZXQgPSBzYXZlZEJ5dGVJbmRleDsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBfcmVhZE9uZUNvbXBvbmVudFNvdXJjZShDb21wb25lbnQgY29tcG9uZW50LCBpbnQgY29tcG9uZW50RmlsZVNpemUpIHsKICAgIF9jb21wb25lbnRTdGFydE9mZnNldCA9IF9ieXRlT2Zmc2V0OwoKICAgIGZpbmFsIGludCBtYWdpYyA9IHJlYWRVaW50MzIoKTsKICAgIGlmIChtYWdpYyAhPSBUYWcuQ29tcG9uZW50RmlsZSkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCdOb3QgYSAuZGlsbCBmaWxlICh3cm9uZyBtYWdpYyBudW1iZXIpLicpOwogICAgfQoKICAgIGZpbmFsIGludCBmb3JtYXRWZXJzaW9uID0gcmVhZFVpbnQzMigpOwogICAgaWYgKGZvcm1hdFZlcnNpb24gIT0gVGFnLkJpbmFyeUZvcm1hdFZlcnNpb24pIHsKICAgICAgdGhyb3cgSW52YWxpZEtlcm5lbFZlcnNpb25FcnJvcihmb3JtYXRWZXJzaW9uKTsKICAgIH0KCiAgICAvLyBSZWFkIGNvbXBvbmVudCBpbmRleCBmcm9tIHRoZSBlbmQgb2YgdGhpcyBDb21wb25lbnRGaWxlcyBzZXJpYWxpemVkIGRhdGEuCiAgICBfQ29tcG9uZW50SW5kZXggaW5kZXggPSBfcmVhZENvbXBvbmVudEluZGV4KGNvbXBvbmVudEZpbGVTaXplKTsKCiAgICBfYnl0ZU9mZnNldCA9IGluZGV4LmJpbmFyeU9mZnNldEZvclNvdXJjZVRhYmxlOwogICAgTWFwPFVyaSwgU291cmNlPiB1cmlUb1NvdXJjZSA9IHJlYWRVcmlUb1NvdXJjZSgpOwogICAgY29tcG9uZW50LnVyaVRvU291cmNlLmFkZEFsbCh1cmlUb1NvdXJjZSk7CgogICAgX2J5dGVPZmZzZXQgPSBfY29tcG9uZW50U3RhcnRPZmZzZXQgKyBjb21wb25lbnRGaWxlU2l6ZTsKICB9CgogIHZvaWQgX3JlYWRPbmVDb21wb25lbnQoQ29tcG9uZW50IGNvbXBvbmVudCwgaW50IGNvbXBvbmVudEZpbGVTaXplKSB7CiAgICBfY29tcG9uZW50U3RhcnRPZmZzZXQgPSBfYnl0ZU9mZnNldDsKCiAgICBmaW5hbCBpbnQgbWFnaWMgPSByZWFkVWludDMyKCk7CiAgICBpZiAobWFnaWMgIT0gVGFnLkNvbXBvbmVudEZpbGUpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcignTm90IGEgLmRpbGwgZmlsZSAod3JvbmcgbWFnaWMgbnVtYmVyKS4nKTsKICAgIH0KCiAgICBmaW5hbCBpbnQgZm9ybWF0VmVyc2lvbiA9IHJlYWRVaW50MzIoKTsKICAgIGlmIChmb3JtYXRWZXJzaW9uICE9IFRhZy5CaW5hcnlGb3JtYXRWZXJzaW9uKSB7CiAgICAgIHRocm93IEludmFsaWRLZXJuZWxWZXJzaW9uRXJyb3IoZm9ybWF0VmVyc2lvbik7CiAgICB9CgogICAgTGlzdDxTdHJpbmc+IHByb2JsZW1zQXNKc29uID0gcmVhZExpc3RPZlN0cmluZ3MoKTsKICAgIGlmIChwcm9ibGVtc0FzSnNvbiAhPSBudWxsKSB7CiAgICAgIGNvbXBvbmVudC5wcm9ibGVtc0FzSnNvbiA/Pz0gPFN0cmluZz5bXTsKICAgICAgY29tcG9uZW50LnByb2JsZW1zQXNKc29uLmFkZEFsbChwcm9ibGVtc0FzSnNvbik7CiAgICB9CgogICAgLy8gUmVhZCBjb21wb25lbnQgaW5kZXggZnJvbSB0aGUgZW5kIG9mIHRoaXMgQ29tcG9uZW50RmlsZXMgc2VyaWFsaXplZCBkYXRhLgogICAgX0NvbXBvbmVudEluZGV4IGluZGV4ID0gX3JlYWRDb21wb25lbnRJbmRleChjb21wb25lbnRGaWxlU2l6ZSk7CgogICAgX2J5dGVPZmZzZXQgPSBpbmRleC5iaW5hcnlPZmZzZXRGb3JTdHJpbmdUYWJsZTsKICAgIHJlYWRTdHJpbmdUYWJsZShfc3RyaW5nVGFibGUpOwoKICAgIF9ieXRlT2Zmc2V0ID0gaW5kZXguYmluYXJ5T2Zmc2V0Rm9yQ2Fub25pY2FsTmFtZXM7CiAgICByZWFkTGlua1RhYmxlKGNvbXBvbmVudC5yb290KTsKCiAgICAvLyBUT0RPKGFsZXhtYXJrb3YpOiByZXZlcnNlIG1ldGFkYXRhIG1hcHBpbmdzIGFuZCByZWFkIGZvcndhcmRzCiAgICBfYnl0ZU9mZnNldCA9IGluZGV4LmJpbmFyeU9mZnNldEZvclN0cmluZ1RhYmxlOyAvLyBSZWFkIGJhY2t3YXJkcy4KICAgIF9yZWFkTWV0YWRhdGFNYXBwaW5ncyhjb21wb25lbnQsIGluZGV4LmJpbmFyeU9mZnNldEZvck1ldGFkYXRhUGF5bG9hZHMpOwoKICAgIF9hc3NvY2lhdGVNZXRhZGF0YShjb21wb25lbnQsIF9jb21wb25lbnRTdGFydE9mZnNldCk7CgogICAgX2J5dGVPZmZzZXQgPSBpbmRleC5iaW5hcnlPZmZzZXRGb3JTb3VyY2VUYWJsZTsKICAgIE1hcDxVcmksIFNvdXJjZT4gdXJpVG9Tb3VyY2UgPSByZWFkVXJpVG9Tb3VyY2UoKTsKICAgIGNvbXBvbmVudC51cmlUb1NvdXJjZS5hZGRBbGwodXJpVG9Tb3VyY2UpOwoKICAgIF9ieXRlT2Zmc2V0ID0gaW5kZXguYmluYXJ5T2Zmc2V0Rm9yQ29uc3RhbnRUYWJsZTsKICAgIHJlYWRDb25zdGFudFRhYmxlKCk7CgogICAgaW50IG51bWJlck9mTGlicmFyaWVzID0gaW5kZXgubGlicmFyeUNvdW50OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1iZXJPZkxpYnJhcmllczsgKytpKSB7CiAgICAgIF9ieXRlT2Zmc2V0ID0gaW5kZXgubGlicmFyeU9mZnNldHNbaV07CiAgICAgIHJlYWRMaWJyYXJ5KGNvbXBvbmVudCwgaW5kZXgubGlicmFyeU9mZnNldHNbaSArIDFdKTsKICAgIH0KCiAgICB2YXIgbWFpbk1ldGhvZCA9CiAgICAgICAgZ2V0TWVtYmVyUmVmZXJlbmNlRnJvbUludChpbmRleC5tYWluTWV0aG9kUmVmZXJlbmNlLCBhbGxvd051bGw6IHRydWUpOwogICAgY29tcG9uZW50Lm1haW5NZXRob2ROYW1lID8/PSBtYWluTWV0aG9kOwoKICAgIF9ieXRlT2Zmc2V0ID0gX2NvbXBvbmVudFN0YXJ0T2Zmc2V0ICsgY29tcG9uZW50RmlsZVNpemU7CiAgfQoKICAvLy8gUmVhZCBhIGxpc3Qgb2Ygc3RyaW5ncy4gSWYgdGhlIGxpc3QgaXMgZW1wdHksIFtudWxsXSBpcyByZXR1cm5lZC4KICBMaXN0PFN0cmluZz4gcmVhZExpc3RPZlN0cmluZ3MoKSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PFN0cmluZz4gc3RyaW5ncyA9CiAgICAgICAgbmV3IExpc3Q8U3RyaW5nPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIFN0cmluZyBzID0gY29uc3QgVXRmOERlY29kZXIoKS5jb252ZXJ0KHJlYWRCeXRlTGlzdCgpKTsKICAgICAgc3RyaW5nc1tpXSA9IHM7CiAgICB9CiAgICByZXR1cm4gc3RyaW5nczsKICB9CgogIE1hcDxVcmksIFNvdXJjZT4gcmVhZFVyaVRvU291cmNlKCkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVaW50MzIoKTsKCiAgICAvLyBSZWFkIGRhdGEuCiAgICBfc291cmNlVXJpVGFibGUubGVuZ3RoID0gbGVuZ3RoOwogICAgTWFwPFVyaSwgU291cmNlPiB1cmlUb1NvdXJjZSA9IDxVcmksIFNvdXJjZT57fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgTGlzdDxpbnQ+IHVyaUJ5dGVzID0gcmVhZEJ5dGVMaXN0KCk7CiAgICAgIFVyaSB1cmkgPSB1cmlCeXRlcy5pc0VtcHR5CiAgICAgICAgICA/IG51bGwKICAgICAgICAgIDogVXJpLnBhcnNlKGNvbnN0IFV0ZjhEZWNvZGVyKCkuY29udmVydCh1cmlCeXRlcykpOwogICAgICBfc291cmNlVXJpVGFibGVbaV0gPSB1cmk7CiAgICAgIExpc3Q8aW50PiBzb3VyY2VDb2RlID0gcmVhZEJ5dGVMaXN0KCk7CiAgICAgIGludCBsaW5lQ291bnQgPSByZWFkVUludCgpOwogICAgICBMaXN0PGludD4gbGluZVN0YXJ0cyA9IG5ldyBMaXN0PGludD4obGluZUNvdW50KTsKICAgICAgaW50IHByZXZpb3VzTGluZVN0YXJ0ID0gMDsKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBsaW5lQ291bnQ7ICsraikgewogICAgICAgIGludCBsaW5lU3RhcnQgPSByZWFkVUludCgpICsgcHJldmlvdXNMaW5lU3RhcnQ7CiAgICAgICAgbGluZVN0YXJ0c1tqXSA9IGxpbmVTdGFydDsKICAgICAgICBwcmV2aW91c0xpbmVTdGFydCA9IGxpbmVTdGFydDsKICAgICAgfQogICAgICBMaXN0PGludD4gaW1wb3J0VXJpQnl0ZXMgPSByZWFkQnl0ZUxpc3QoKTsKICAgICAgVXJpIGltcG9ydFVyaSA9IGltcG9ydFVyaUJ5dGVzLmlzRW1wdHkKICAgICAgICAgID8gbnVsbAogICAgICAgICAgOiBVcmkucGFyc2UoY29uc3QgVXRmOERlY29kZXIoKS5jb252ZXJ0KGltcG9ydFVyaUJ5dGVzKSk7CiAgICAgIHVyaVRvU291cmNlW3VyaV0gPSBuZXcgU291cmNlKGxpbmVTdGFydHMsIHNvdXJjZUNvZGUsIGltcG9ydFVyaSwgdXJpKTsKICAgIH0KCiAgICAvLyBSZWFkIGluZGV4LgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICByZWFkVWludDMyKCk7CiAgICB9CiAgICByZXR1cm4gdXJpVG9Tb3VyY2U7CiAgfQoKICBDYW5vbmljYWxOYW1lIHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKCkgewogICAgdmFyIGluZGV4ID0gcmVhZFVJbnQoKTsKICAgIGlmIChpbmRleCA9PSAwKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfbGlua1RhYmxlW2luZGV4IC0gMV07CiAgfQoKICBDYW5vbmljYWxOYW1lIGdldENhbm9uaWNhbE5hbWVSZWZlcmVuY2VGcm9tSW50KGludCBpbmRleCkgewogICAgaWYgKGluZGV4ID09IDApIHJldHVybiBudWxsOwogICAgcmV0dXJuIF9saW5rVGFibGVbaW5kZXggLSAxXTsKICB9CgogIFJlZmVyZW5jZSByZWFkTGlicmFyeVJlZmVyZW5jZSh7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgQ2Fub25pY2FsTmFtZSBjYW5vbmljYWxOYW1lID0gcmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoKTsKICAgIGlmIChjYW5vbmljYWxOYW1lICE9IG51bGwpIHJldHVybiBjYW5vbmljYWxOYW1lLmdldFJlZmVyZW5jZSgpOwogICAgaWYgKGFsbG93TnVsbCkgcmV0dXJuIG51bGw7CiAgICB0aHJvdyAnRXhwZWN0ZWQgYSBsaWJyYXJ5IHJlZmVyZW5jZSB0byBiZSB2YWxpZCBidXQgd2FzIGBudWxsYC4nOwogIH0KCiAgTGlicmFyeURlcGVuZGVuY3kgcmVhZExpYnJhcnlEZXBlbmRlbmN5UmVmZXJlbmNlKCkgewogICAgaW50IGluZGV4ID0gcmVhZFVJbnQoKTsKICAgIHJldHVybiBfY3VycmVudExpYnJhcnkuZGVwZW5kZW5jaWVzW2luZGV4XTsKICB9CgogIFJlZmVyZW5jZSByZWFkQ2xhc3NSZWZlcmVuY2Uoe2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIHZhciBuYW1lID0gcmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoKTsKICAgIGlmIChuYW1lID09IG51bGwgJiYgIWFsbG93TnVsbCkgewogICAgICB0aHJvdyAnRXhwZWN0ZWQgYSBjbGFzcyByZWZlcmVuY2UgdG8gYmUgdmFsaWQgYnV0IHdhcyBgbnVsbGAuJzsKICAgIH0KICAgIHJldHVybiBuYW1lPy5nZXRSZWZlcmVuY2UoKTsKICB9CgogIFJlZmVyZW5jZSByZWFkTWVtYmVyUmVmZXJlbmNlKHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICB2YXIgbmFtZSA9IHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKCk7CiAgICBpZiAobmFtZSA9PSBudWxsICYmICFhbGxvd051bGwpIHsKICAgICAgdGhyb3cgJ0V4cGVjdGVkIGEgbWVtYmVyIHJlZmVyZW5jZSB0byBiZSB2YWxpZCBidXQgd2FzIGBudWxsYC4nOwogICAgfQogICAgcmV0dXJuIG5hbWU/LmdldFJlZmVyZW5jZSgpOwogIH0KCiAgUmVmZXJlbmNlIGdldE1lbWJlclJlZmVyZW5jZUZyb21JbnQoaW50IGluZGV4LCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgdmFyIG5hbWUgPSBnZXRDYW5vbmljYWxOYW1lUmVmZXJlbmNlRnJvbUludChpbmRleCk7CiAgICBpZiAobmFtZSA9PSBudWxsICYmICFhbGxvd051bGwpIHsKICAgICAgdGhyb3cgJ0V4cGVjdGVkIGEgbWVtYmVyIHJlZmVyZW5jZSB0byBiZSB2YWxpZCBidXQgd2FzIGBudWxsYC4nOwogICAgfQogICAgcmV0dXJuIG5hbWU/LmdldFJlZmVyZW5jZSgpOwogIH0KCiAgUmVmZXJlbmNlIHJlYWRUeXBlZGVmUmVmZXJlbmNlKCkgewogICAgcmV0dXJuIHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKCk/LmdldFJlZmVyZW5jZSgpOwogIH0KCiAgTmFtZSByZWFkTmFtZSgpIHsKICAgIFN0cmluZyB0ZXh0ID0gcmVhZFN0cmluZ1JlZmVyZW5jZSgpOwogICAgaWYgKHRleHQuaXNOb3RFbXB0eSAmJiB0ZXh0WzBdID09ICdfJykgewogICAgICByZXR1cm4gbmV3IE5hbWUuYnlSZWZlcmVuY2UodGV4dCwgcmVhZExpYnJhcnlSZWZlcmVuY2UoKSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IE5hbWUodGV4dCk7CiAgICB9CiAgfQoKICBMaWJyYXJ5IHJlYWRMaWJyYXJ5KENvbXBvbmVudCBjb21wb25lbnQsIGludCBlbmRPZmZzZXQpIHsKICAgIC8vIFJlYWQgaW5kZXguCiAgICBpbnQgc2F2ZWRCeXRlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CgogICAgLy8gVGhlcmUgaXMgYSBmaWVsZCBmb3IgdGhlIHByb2NlZHVyZSBjb3VudC4KICAgIF9ieXRlT2Zmc2V0ID0gZW5kT2Zmc2V0IC0gKDEpICogNDsKICAgIGludCBwcm9jZWR1cmVDb3VudCA9IHJlYWRVaW50MzIoKTsKICAgIExpc3Q8aW50PiBwcm9jZWR1cmVPZmZzZXRzID0gbmV3IExpc3Q8aW50Pihwcm9jZWR1cmVDb3VudCArIDEpOwoKICAgIC8vIFRoZXJlIGlzIGEgZmllbGQgZm9yIHRoZSBwcm9jZWR1cmUgY291bnQsIHRoYXQgbnVtYmVyICsgMSAoZm9yIHRoZSBlbmQpCiAgICAvLyBvZmZzZXRzLCBhbmQgdGhlbiB0aGUgY2xhc3MgY291bnQgKGkuZS4gcHJvY2VkdXJlIGNvdW50ICsgMyBmaWVsZHMpLgogICAgX2J5dGVPZmZzZXQgPSBlbmRPZmZzZXQgLSAocHJvY2VkdXJlQ291bnQgKyAzKSAqIDQ7CiAgICBpbnQgY2xhc3NDb3VudCA9IHJlYWRVaW50MzIoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvY2VkdXJlQ291bnQgKyAxOyBpKyspIHsKICAgICAgcHJvY2VkdXJlT2Zmc2V0c1tpXSA9IF9jb21wb25lbnRTdGFydE9mZnNldCArIHJlYWRVaW50MzIoKTsKICAgIH0KICAgIExpc3Q8aW50PiBjbGFzc09mZnNldHMgPSBuZXcgTGlzdDxpbnQ+KGNsYXNzQ291bnQgKyAxKTsKCiAgICAvLyBUaGVyZSBpcyBhIGZpZWxkIGZvciB0aGUgcHJvY2VkdXJlIGNvdW50LCB0aGF0IG51bWJlciArIDEgKGZvciB0aGUgZW5kKQogICAgLy8gb2Zmc2V0cywgdGhlbiB0aGUgY2xhc3MgY291bnQgYW5kIHRoYXQgbnVtYmVyICsgMSAoZm9yIHRoZSBlbmQpIG9mZnNldHMuCiAgICAvLyAoaS5lLiBwcm9jZWR1cmUgY291bnQgKyBjbGFzcyBjb3VudCArIDQgZmllbGRzKS4KICAgIF9ieXRlT2Zmc2V0ID0gZW5kT2Zmc2V0IC0gKHByb2NlZHVyZUNvdW50ICsgY2xhc3NDb3VudCArIDQpICogNDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3NDb3VudCArIDE7IGkrKykgewogICAgICBjbGFzc09mZnNldHNbaV0gPSBfY29tcG9uZW50U3RhcnRPZmZzZXQgKyByZWFkVWludDMyKCk7CiAgICB9CiAgICBfYnl0ZU9mZnNldCA9IHNhdmVkQnl0ZU9mZnNldDsKCiAgICBpbnQgZmxhZ3MgPSByZWFkQnl0ZSgpOwogICAgYm9vbCBpc0V4dGVybmFsID0gKGZsYWdzICYgTGlicmFyeS5FeHRlcm5hbEZsYWcpICE9IDA7CiAgICBfaXNSZWFkaW5nTGlicmFyeUltcGxlbWVudGF0aW9uID0gIWlzRXh0ZXJuYWw7CgogICAgaW50IGxhbmd1YWdlVmVyc2lvbk1ham9yID0gcmVhZFVJbnQoKTsKICAgIGludCBsYW5ndWFnZVZlcnNpb25NaW5vciA9IHJlYWRVSW50KCk7CgogICAgdmFyIGNhbm9uaWNhbE5hbWUgPSByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpOwogICAgUmVmZXJlbmNlIHJlZmVyZW5jZSA9IGNhbm9uaWNhbE5hbWUuZ2V0UmVmZXJlbmNlKCk7CiAgICBMaWJyYXJ5IGxpYnJhcnkgPSByZWZlcmVuY2Uubm9kZTsKICAgIGlmIChhbHdheXNDcmVhdGVOZXdOYW1lZE5vZGVzKSB7CiAgICAgIGxpYnJhcnkgPSBudWxsOwogICAgfQogICAgYm9vbCBzaG91bGRXcml0ZURhdGEgPSBsaWJyYXJ5ID09IG51bGwgfHwgX2lzUmVhZGluZ0xpYnJhcnlJbXBsZW1lbnRhdGlvbjsKICAgIGlmIChsaWJyYXJ5ID09IG51bGwpIHsKICAgICAgbGlicmFyeSA9CiAgICAgICAgICBuZXcgTGlicmFyeShVcmkucGFyc2UoY2Fub25pY2FsTmFtZS5uYW1lKSwgcmVmZXJlbmNlOiByZWZlcmVuY2UpOwogICAgICBjb21wb25lbnQubGlicmFyaWVzLmFkZChsaWJyYXJ5Li5wYXJlbnQgPSBjb21wb25lbnQpOwogICAgfQogICAgX2N1cnJlbnRMaWJyYXJ5ID0gbGlicmFyeTsKICAgIFN0cmluZyBuYW1lID0gcmVhZFN0cmluZ09yTnVsbElmRW1wdHkoKTsKCiAgICAvLyBUT0RPKGplbnNqKTogV2UgY3VycmVudGx5IHNhdmUgKGFsbW9zdCB0aGUgc2FtZSkgdXJpIHR3aWNlLgogICAgVXJpIGZpbGVVcmkgPSByZWFkVXJpUmVmZXJlbmNlKCk7CgogICAgTGlzdDxTdHJpbmc+IHByb2JsZW1zQXNKc29uID0gcmVhZExpc3RPZlN0cmluZ3MoKTsKCiAgICBpZiAoc2hvdWxkV3JpdGVEYXRhKSB7CiAgICAgIGxpYnJhcnkuZmxhZ3MgPSBmbGFnczsKICAgICAgbGlicmFyeS5zZXRMYW5ndWFnZVZlcnNpb24obGFuZ3VhZ2VWZXJzaW9uTWFqb3IsIGxhbmd1YWdlVmVyc2lvbk1pbm9yKTsKICAgICAgbGlicmFyeS5uYW1lID0gbmFtZTsKICAgICAgbGlicmFyeS5maWxlVXJpID0gZmlsZVVyaTsKICAgICAgbGlicmFyeS5wcm9ibGVtc0FzSnNvbiA9IHByb2JsZW1zQXNKc29uOwogICAgfQoKICAgIGFzc2VydCgoKSB7CiAgICAgIGRlYnVnUGF0aC5hZGQobGlicmFyeS5uYW1lID8/IGxpYnJhcnkuaW1wb3J0VXJpPy50b1N0cmluZygpID8/ICdsaWJyYXJ5Jyk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSgpKTsKCiAgICBpZiAoc2hvdWxkV3JpdGVEYXRhKSB7CiAgICAgIF9maWxsVHJlZU5vZGVMaXN0KAogICAgICAgICAgbGlicmFyeS5hbm5vdGF0aW9ucywgKGluZGV4KSA9PiByZWFkRXhwcmVzc2lvbigpLCBsaWJyYXJ5KTsKICAgIH0gZWxzZSB7CiAgICAgIF9za2lwTm9kZUxpc3QocmVhZEV4cHJlc3Npb24pOwogICAgfQogICAgX3JlYWRMaWJyYXJ5RGVwZW5kZW5jaWVzKGxpYnJhcnkpOwogICAgX3JlYWRBZGRpdGlvbmFsRXhwb3J0cyhsaWJyYXJ5KTsKICAgIF9yZWFkTGlicmFyeVBhcnRzKGxpYnJhcnkpOwogICAgX21lcmdlTmFtZWROb2RlTGlzdChsaWJyYXJ5LnR5cGVkZWZzLCAoaW5kZXgpID0+IHJlYWRUeXBlZGVmKCksIGxpYnJhcnkpOwoKICAgIF9tZXJnZU5hbWVkTm9kZUxpc3QobGlicmFyeS5jbGFzc2VzLCAoaW5kZXgpIHsKICAgICAgX2J5dGVPZmZzZXQgPSBjbGFzc09mZnNldHNbaW5kZXhdOwogICAgICByZXR1cm4gcmVhZENsYXNzKGNsYXNzT2Zmc2V0c1tpbmRleCArIDFdKTsKICAgIH0sIGxpYnJhcnkpOwogICAgX2J5dGVPZmZzZXQgPSBjbGFzc09mZnNldHMubGFzdDsKICAgIF9tZXJnZU5hbWVkTm9kZUxpc3QobGlicmFyeS5maWVsZHMsIChpbmRleCkgPT4gcmVhZEZpZWxkKCksIGxpYnJhcnkpOwogICAgX21lcmdlTmFtZWROb2RlTGlzdChsaWJyYXJ5LnByb2NlZHVyZXMsIChpbmRleCkgewogICAgICBfYnl0ZU9mZnNldCA9IHByb2NlZHVyZU9mZnNldHNbaW5kZXhdOwogICAgICByZXR1cm4gcmVhZFByb2NlZHVyZShwcm9jZWR1cmVPZmZzZXRzW2luZGV4ICsgMV0pOwogICAgfSwgbGlicmFyeSk7CiAgICBfYnl0ZU9mZnNldCA9IHByb2NlZHVyZU9mZnNldHMubGFzdDsKCiAgICBhc3NlcnQoKChfKSA9PiB0cnVlKShkZWJ1Z1BhdGgucmVtb3ZlTGFzdCgpKSk7CiAgICBfY3VycmVudExpYnJhcnkgPSBudWxsOwogICAgcmV0dXJuIGxpYnJhcnk7CiAgfQoKICB2b2lkIF9yZWFkTGlicmFyeURlcGVuZGVuY2llcyhMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgbGlicmFyeS5kZXBlbmRlbmNpZXMubGVuZ3RoID0gbGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICBsaWJyYXJ5LmRlcGVuZGVuY2llc1tpXSA9IHJlYWRMaWJyYXJ5RGVwZW5kZW5jeShsaWJyYXJ5KTsKICAgIH0KICB9CgogIExpYnJhcnlEZXBlbmRlbmN5IHJlYWRMaWJyYXJ5RGVwZW5kZW5jeShMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIHZhciBmaWxlT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgdmFyIGZsYWdzID0gcmVhZEJ5dGUoKTsKICAgIHZhciBhbm5vdGF0aW9ucyA9IHJlYWRFeHByZXNzaW9uTGlzdCgpOwogICAgdmFyIHRhcmdldExpYnJhcnkgPSByZWFkTGlicmFyeVJlZmVyZW5jZShhbGxvd051bGw6IHRydWUpOwogICAgdmFyIHByZWZpeE5hbWUgPSByZWFkU3RyaW5nT3JOdWxsSWZFbXB0eSgpOwogICAgdmFyIG5hbWVzID0gcmVhZENvbWJpbmF0b3JMaXN0KCk7CiAgICByZXR1cm4gbmV3IExpYnJhcnlEZXBlbmRlbmN5LmJ5UmVmZXJlbmNlKAogICAgICAgIGZsYWdzLCBhbm5vdGF0aW9ucywgdGFyZ2V0TGlicmFyeSwgcHJlZml4TmFtZSwgbmFtZXMpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQKICAgICAgLi5wYXJlbnQgPSBsaWJyYXJ5OwogIH0KCiAgdm9pZCBfcmVhZEFkZGl0aW9uYWxFeHBvcnRzKExpYnJhcnkgbGlicmFyeSkgewogICAgaW50IG51bUV4cG9ydGVkUmVmZXJlbmNlID0gcmVhZFVJbnQoKTsKICAgIGlmIChudW1FeHBvcnRlZFJlZmVyZW5jZSAhPSAwKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtRXhwb3J0ZWRSZWZlcmVuY2U7IGkrKykgewogICAgICAgIENhbm9uaWNhbE5hbWUgZXhwb3J0ZWROYW1lID0gcmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoKTsKICAgICAgICBSZWZlcmVuY2UgcmVmZXJlbmNlID0gZXhwb3J0ZWROYW1lLmdldFJlZmVyZW5jZSgpOwogICAgICAgIGxpYnJhcnkuYWRkaXRpb25hbEV4cG9ydHMuYWRkKHJlZmVyZW5jZSk7CiAgICAgIH0KICAgIH0KICB9CgogIENvbWJpbmF0b3IgcmVhZENvbWJpbmF0b3IoKSB7CiAgICB2YXIgaXNTaG93ID0gcmVhZEJ5dGUoKSA9PSAxOwogICAgdmFyIG5hbWVzID0gcmVhZFN0cmluZ1JlZmVyZW5jZUxpc3QoKTsKICAgIHJldHVybiBuZXcgQ29tYmluYXRvcihpc1Nob3csIG5hbWVzKTsKICB9CgogIExpc3Q8Q29tYmluYXRvcj4gcmVhZENvbWJpbmF0b3JMaXN0KCkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBMaXN0PENvbWJpbmF0b3I+IHJlc3VsdCA9CiAgICAgICAgbmV3IExpc3Q8Q29tYmluYXRvcj4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICByZXN1bHRbaV0gPSByZWFkQ29tYmluYXRvcigpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX3JlYWRMaWJyYXJ5UGFydHMoTGlicmFyeSBsaWJyYXJ5KSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIGxpYnJhcnkucGFydHMubGVuZ3RoID0gbGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICBsaWJyYXJ5LnBhcnRzW2ldID0gcmVhZExpYnJhcnlQYXJ0KGxpYnJhcnkpOwogICAgfQogIH0KCiAgTGlicmFyeVBhcnQgcmVhZExpYnJhcnlQYXJ0KExpYnJhcnkgbGlicmFyeSkgewogICAgTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9ucyA9IHJlYWRFeHByZXNzaW9uTGlzdCgpOwogICAgU3RyaW5nIHBhcnRVcmkgPSByZWFkU3RyaW5nUmVmZXJlbmNlKCk7CiAgICByZXR1cm4gbmV3IExpYnJhcnlQYXJ0KGFubm90YXRpb25zLCBwYXJ0VXJpKS4ucGFyZW50ID0gbGlicmFyeTsKICB9CgogIFR5cGVkZWYgcmVhZFR5cGVkZWYoKSB7CiAgICB2YXIgY2Fub25pY2FsTmFtZSA9IHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKCk7CiAgICB2YXIgcmVmZXJlbmNlID0gY2Fub25pY2FsTmFtZS5nZXRSZWZlcmVuY2UoKTsKICAgIFR5cGVkZWYgbm9kZSA9IHJlZmVyZW5jZS5ub2RlOwogICAgaWYgKGFsd2F5c0NyZWF0ZU5ld05hbWVkTm9kZXMpIHsKICAgICAgbm9kZSA9IG51bGw7CiAgICB9CiAgICBib29sIHNob3VsZFdyaXRlRGF0YSA9IG5vZGUgPT0gbnVsbCB8fCBfaXNSZWFkaW5nTGlicmFyeUltcGxlbWVudGF0aW9uOwogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICBub2RlID0gbmV3IFR5cGVkZWYobnVsbCwgbnVsbCwgcmVmZXJlbmNlOiByZWZlcmVuY2UpOwogICAgfQogICAgVXJpIGZpbGVVcmkgPSByZWFkVXJpUmVmZXJlbmNlKCk7CiAgICBpbnQgZmlsZU9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIFN0cmluZyBuYW1lID0gcmVhZFN0cmluZ1JlZmVyZW5jZSgpOwogICAgbm9kZS5hbm5vdGF0aW9ucyA9IHJlYWRBbm5vdGF0aW9uTGlzdChub2RlKTsKICAgIHJlYWRBbmRQdXNoVHlwZVBhcmFtZXRlckxpc3Qobm9kZS50eXBlUGFyYW1ldGVycywgbm9kZSk7CiAgICB2YXIgdHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgcmVhZEFuZFB1c2hUeXBlUGFyYW1ldGVyTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzT2ZGdW5jdGlvblR5cGUsIG5vZGUpOwogICAgbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5hZGRBbGwocmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpKTsKICAgIG5vZGUubmFtZWRQYXJhbWV0ZXJzLmFkZEFsbChyZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCkpOwogICAgdHlwZVBhcmFtZXRlclN0YWNrLmxlbmd0aCA9IDA7CiAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IDA7CiAgICBpZiAoc2hvdWxkV3JpdGVEYXRhKSB7CiAgICAgIG5vZGUuZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgIG5vZGUubmFtZSA9IG5hbWU7CiAgICAgIG5vZGUuZmlsZVVyaSA9IGZpbGVVcmk7CiAgICAgIG5vZGUudHlwZSA9IHR5cGU7CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIENsYXNzIHJlYWRDbGFzcyhpbnQgZW5kT2Zmc2V0KSB7CiAgICBpbnQgdGFnID0gcmVhZEJ5dGUoKTsKICAgIGFzc2VydCh0YWcgPT0gVGFnLkNsYXNzKTsKCiAgICAvLyBSZWFkIGluZGV4LgogICAgaW50IHNhdmVkQnl0ZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgLy8gVGhlcmUgaXMgYSBmaWVsZCBmb3IgdGhlIHByb2NlZHVyZSBjb3VudC4KICAgIF9ieXRlT2Zmc2V0ID0gZW5kT2Zmc2V0IC0gKDEpICogNDsKICAgIGludCBwcm9jZWR1cmVDb3VudCA9IHJlYWRVaW50MzIoKTsKICAgIExpc3Q8aW50PiBwcm9jZWR1cmVPZmZzZXRzID0gbmV3IExpc3Q8aW50Pihwcm9jZWR1cmVDb3VudCArIDEpOwogICAgLy8gVGhlcmUgaXMgYSBmaWVsZCBmb3IgdGhlIHByb2NlZHVyZSBjb3VudCwgdGhhdCBudW1iZXIgKyAxIChmb3IgdGhlIGVuZCkKICAgIC8vIG9mZnNldHMgKGkuZS4gcHJvY2VkdXJlIGNvdW50ICsgMiBmaWVsZHMpLgogICAgX2J5dGVPZmZzZXQgPSBlbmRPZmZzZXQgLSAocHJvY2VkdXJlQ291bnQgKyAyKSAqIDQ7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb2NlZHVyZUNvdW50ICsgMTsgaSsrKSB7CiAgICAgIHByb2NlZHVyZU9mZnNldHNbaV0gPSBfY29tcG9uZW50U3RhcnRPZmZzZXQgKyByZWFkVWludDMyKCk7CiAgICB9CiAgICBfYnl0ZU9mZnNldCA9IHNhdmVkQnl0ZU9mZnNldDsKCiAgICB2YXIgY2Fub25pY2FsTmFtZSA9IHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKCk7CiAgICB2YXIgcmVmZXJlbmNlID0gY2Fub25pY2FsTmFtZS5nZXRSZWZlcmVuY2UoKTsKICAgIENsYXNzIG5vZGUgPSByZWZlcmVuY2Uubm9kZTsKICAgIGlmIChhbHdheXNDcmVhdGVOZXdOYW1lZE5vZGVzKSB7CiAgICAgIG5vZGUgPSBudWxsOwogICAgfQogICAgYm9vbCBzaG91bGRXcml0ZURhdGEgPSBub2RlID09IG51bGwgfHwgX2lzUmVhZGluZ0xpYnJhcnlJbXBsZW1lbnRhdGlvbjsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgbm9kZSA9IG5ldyBDbGFzcyhyZWZlcmVuY2U6IHJlZmVyZW5jZSkuLmxldmVsID0gQ2xhc3NMZXZlbC5UZW1wb3Jhcnk7CiAgICB9CgogICAgdmFyIGZpbGVVcmkgPSByZWFkVXJpUmVmZXJlbmNlKCk7CiAgICBub2RlLnN0YXJ0RmlsZU9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIG5vZGUuZmlsZU9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIG5vZGUuZmlsZUVuZE9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIGludCBmbGFncyA9IHJlYWRCeXRlKCk7CiAgICBub2RlLmZsYWdzID0gZmxhZ3MgJiB+Q2xhc3MuTGV2ZWxNYXNrOwogICAgaW50IGxldmVsSW5kZXggPSBmbGFncyAmIENsYXNzLkxldmVsTWFzazsKICAgIHZhciBsZXZlbCA9IENsYXNzTGV2ZWwudmFsdWVzW2xldmVsSW5kZXggKyAxXTsKICAgIGlmIChsZXZlbC5pbmRleCA+PSBub2RlLmxldmVsLmluZGV4KSB7CiAgICAgIG5vZGUubGV2ZWwgPSBsZXZlbDsKICAgIH0KICAgIHZhciBuYW1lID0gcmVhZFN0cmluZ09yTnVsbElmRW1wdHkoKTsKICAgIHZhciBhbm5vdGF0aW9ucyA9IHJlYWRBbm5vdGF0aW9uTGlzdChub2RlKTsKICAgIGFzc2VydCgoKSB7CiAgICAgIGRlYnVnUGF0aC5hZGQobm9kZS5uYW1lID8/ICdub3JtYWwtY2xhc3MnKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9KCkpOwogICAgcmVhZEFuZFB1c2hUeXBlUGFyYW1ldGVyTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzLCBub2RlKTsKICAgIHZhciBzdXBlcnR5cGUgPSByZWFkU3VwZXJ0eXBlT3B0aW9uKCk7CiAgICB2YXIgbWl4ZWRJblR5cGUgPSByZWFkU3VwZXJ0eXBlT3B0aW9uKCk7CiAgICBpZiAoc2hvdWxkV3JpdGVEYXRhKSB7CiAgICAgIF9maWxsTm9uVHJlZU5vZGVMaXN0KG5vZGUuaW1wbGVtZW50ZWRUeXBlcywgcmVhZFN1cGVydHlwZSk7CiAgICB9IGVsc2UgewogICAgICBfc2tpcE5vZGVMaXN0KHJlYWRTdXBlcnR5cGUpOwogICAgfQogICAgX21lcmdlTmFtZWROb2RlTGlzdChub2RlLmZpZWxkcywgKGluZGV4KSA9PiByZWFkRmllbGQoKSwgbm9kZSk7CiAgICBfbWVyZ2VOYW1lZE5vZGVMaXN0KG5vZGUuY29uc3RydWN0b3JzLCAoaW5kZXgpID0+IHJlYWRDb25zdHJ1Y3RvcigpLCBub2RlKTsKCiAgICBfbWVyZ2VOYW1lZE5vZGVMaXN0KG5vZGUucHJvY2VkdXJlcywgKGluZGV4KSB7CiAgICAgIF9ieXRlT2Zmc2V0ID0gcHJvY2VkdXJlT2Zmc2V0c1tpbmRleF07CiAgICAgIHJldHVybiByZWFkUHJvY2VkdXJlKHByb2NlZHVyZU9mZnNldHNbaW5kZXggKyAxXSk7CiAgICB9LCBub2RlKTsKICAgIF9ieXRlT2Zmc2V0ID0gcHJvY2VkdXJlT2Zmc2V0cy5sYXN0OwogICAgX21lcmdlTmFtZWROb2RlTGlzdChub2RlLnJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycywKICAgICAgICAoaW5kZXgpID0+IHJlYWRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcigpLCBub2RlKTsKICAgIHR5cGVQYXJhbWV0ZXJTdGFjay5sZW5ndGggPSAwOwogICAgYXNzZXJ0KGRlYnVnUGF0aC5yZW1vdmVMYXN0KCkgIT0gbnVsbCk7CiAgICBpZiAoc2hvdWxkV3JpdGVEYXRhKSB7CiAgICAgIG5vZGUubmFtZSA9IG5hbWU7CiAgICAgIG5vZGUuZmlsZVVyaSA9IGZpbGVVcmk7CiAgICAgIG5vZGUuYW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uczsKICAgICAgbm9kZS5zdXBlcnR5cGUgPSBzdXBlcnR5cGU7CiAgICAgIG5vZGUubWl4ZWRJblR5cGUgPSBtaXhlZEluVHlwZTsKICAgIH0KCiAgICBfYnl0ZU9mZnNldCA9IGVuZE9mZnNldDsKCiAgICByZXR1cm4gbm9kZTsKICB9CgogIGludCBnZXRBbmRSZXNldFRyYW5zZm9ybWVyRmxhZ3MoKSB7CiAgICBpbnQgZmxhZ3MgPSBfdHJhbnNmb3JtZXJGbGFnczsKICAgIF90cmFuc2Zvcm1lckZsYWdzID0gMDsKICAgIHJldHVybiBmbGFnczsKICB9CgogIC8vLyBBZGRzIHRoZSBnaXZlbiBmbGFnIHRvIHRoZSBjdXJyZW50IFtNZW1iZXIudHJhbnNmb3JtZXJGbGFnc10uCiAgdm9pZCBhZGRUcmFuc2Zvcm1lckZsYWcoaW50IGZsYWdzKSB7CiAgICBfdHJhbnNmb3JtZXJGbGFncyB8PSBmbGFnczsKICB9CgogIEZpZWxkIHJlYWRGaWVsZCgpIHsKICAgIGludCB0YWcgPSByZWFkQnl0ZSgpOwogICAgYXNzZXJ0KHRhZyA9PSBUYWcuRmllbGQpOwogICAgdmFyIGNhbm9uaWNhbE5hbWUgPSByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpOwogICAgdmFyIHJlZmVyZW5jZSA9IGNhbm9uaWNhbE5hbWUuZ2V0UmVmZXJlbmNlKCk7CiAgICBGaWVsZCBub2RlID0gcmVmZXJlbmNlLm5vZGU7CiAgICBpZiAoYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlcykgewogICAgICBub2RlID0gbnVsbDsKICAgIH0KICAgIGJvb2wgc2hvdWxkV3JpdGVEYXRhID0gbm9kZSA9PSBudWxsIHx8IF9pc1JlYWRpbmdMaWJyYXJ5SW1wbGVtZW50YXRpb247CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIG5vZGUgPSBuZXcgRmllbGQobnVsbCwgcmVmZXJlbmNlOiByZWZlcmVuY2UpOwogICAgfQogICAgdmFyIGZpbGVVcmkgPSByZWFkVXJpUmVmZXJlbmNlKCk7CiAgICBpbnQgZmlsZU9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIGludCBmaWxlRW5kT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgaW50IGZsYWdzID0gcmVhZEJ5dGUoKTsKICAgIHZhciBuYW1lID0gcmVhZE5hbWUoKTsKICAgIHZhciBhbm5vdGF0aW9ucyA9IHJlYWRBbm5vdGF0aW9uTGlzdChub2RlKTsKICAgIGFzc2VydCgoKSB7CiAgICAgIGRlYnVnUGF0aC5hZGQobm9kZS5uYW1lPy5uYW1lID8/ICdmaWVsZCcpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0oKSk7CiAgICB2YXIgdHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgdmFyIGluaXRpYWxpemVyID0gcmVhZEV4cHJlc3Npb25PcHRpb24oKTsKICAgIGludCB0cmFuc2Zvcm1lckZsYWdzID0gZ2V0QW5kUmVzZXRUcmFuc2Zvcm1lckZsYWdzKCk7CiAgICBhc3NlcnQoKChfKSA9PiB0cnVlKShkZWJ1Z1BhdGgucmVtb3ZlTGFzdCgpKSk7CiAgICBpZiAoc2hvdWxkV3JpdGVEYXRhKSB7CiAgICAgIG5vZGUuZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgIG5vZGUuZmlsZUVuZE9mZnNldCA9IGZpbGVFbmRPZmZzZXQ7CiAgICAgIG5vZGUuZmxhZ3MgPSBmbGFnczsKICAgICAgbm9kZS5uYW1lID0gbmFtZTsKICAgICAgbm9kZS5maWxlVXJpID0gZmlsZVVyaTsKICAgICAgbm9kZS5hbm5vdGF0aW9ucyA9IGFubm90YXRpb25zOwogICAgICBub2RlLnR5cGUgPSB0eXBlOwogICAgICBub2RlLmluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXI7CiAgICAgIG5vZGUuaW5pdGlhbGl6ZXI/LnBhcmVudCA9IG5vZGU7CiAgICAgIG5vZGUudHJhbnNmb3JtZXJGbGFncyA9IHRyYW5zZm9ybWVyRmxhZ3M7CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIENvbnN0cnVjdG9yIHJlYWRDb25zdHJ1Y3RvcigpIHsKICAgIGludCB0YWcgPSByZWFkQnl0ZSgpOwogICAgYXNzZXJ0KHRhZyA9PSBUYWcuQ29uc3RydWN0b3IpOwogICAgdmFyIGNhbm9uaWNhbE5hbWUgPSByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpOwogICAgdmFyIHJlZmVyZW5jZSA9IGNhbm9uaWNhbE5hbWUuZ2V0UmVmZXJlbmNlKCk7CiAgICBDb25zdHJ1Y3RvciBub2RlID0gcmVmZXJlbmNlLm5vZGU7CiAgICBpZiAoYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2RlcykgewogICAgICBub2RlID0gbnVsbDsKICAgIH0KICAgIGJvb2wgc2hvdWxkV3JpdGVEYXRhID0gbm9kZSA9PSBudWxsIHx8IF9pc1JlYWRpbmdMaWJyYXJ5SW1wbGVtZW50YXRpb247CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIG5vZGUgPSBuZXcgQ29uc3RydWN0b3IobnVsbCwgcmVmZXJlbmNlOiByZWZlcmVuY2UpOwogICAgfQogICAgdmFyIGZpbGVVcmkgPSByZWFkVXJpUmVmZXJlbmNlKCk7CiAgICB2YXIgc3RhcnRGaWxlT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgdmFyIGZpbGVPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICB2YXIgZmlsZUVuZE9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIHZhciBmbGFncyA9IHJlYWRCeXRlKCk7CiAgICB2YXIgbmFtZSA9IHJlYWROYW1lKCk7CiAgICB2YXIgYW5ub3RhdGlvbnMgPSByZWFkQW5ub3RhdGlvbkxpc3Qobm9kZSk7CiAgICBhc3NlcnQoKCkgewogICAgICBkZWJ1Z1BhdGguYWRkKG5vZGUubmFtZT8ubmFtZSA/PyAnY29uc3RydWN0b3InKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9KCkpOwogICAgdmFyIGZ1bmN0aW9uID0gcmVhZEZ1bmN0aW9uTm9kZSgpOwogICAgcHVzaFZhcmlhYmxlRGVjbGFyYXRpb25zKGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKTsKICAgIHB1c2hWYXJpYWJsZURlY2xhcmF0aW9ucyhmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMpOwogICAgaWYgKHNob3VsZFdyaXRlRGF0YSkgewogICAgICBfZmlsbFRyZWVOb2RlTGlzdChub2RlLmluaXRpYWxpemVycywgKGluZGV4KSA9PiByZWFkSW5pdGlhbGl6ZXIoKSwgbm9kZSk7CiAgICB9IGVsc2UgewogICAgICBfc2tpcE5vZGVMaXN0KHJlYWRJbml0aWFsaXplcik7CiAgICB9CiAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IDA7CiAgICB2YXIgdHJhbnNmb3JtZXJGbGFncyA9IGdldEFuZFJlc2V0VHJhbnNmb3JtZXJGbGFncygpOwogICAgYXNzZXJ0KCgoXykgPT4gdHJ1ZSkoZGVidWdQYXRoLnJlbW92ZUxhc3QoKSkpOwogICAgaWYgKHNob3VsZFdyaXRlRGF0YSkgewogICAgICBub2RlLnN0YXJ0RmlsZU9mZnNldCA9IHN0YXJ0RmlsZU9mZnNldDsKICAgICAgbm9kZS5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgICAgbm9kZS5maWxlRW5kT2Zmc2V0ID0gZmlsZUVuZE9mZnNldDsKICAgICAgbm9kZS5mbGFncyA9IGZsYWdzOwogICAgICBub2RlLm5hbWUgPSBuYW1lOwogICAgICBub2RlLmZpbGVVcmkgPSBmaWxlVXJpOwogICAgICBub2RlLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7CiAgICAgIG5vZGUuZnVuY3Rpb24gPSBmdW5jdGlvbi4ucGFyZW50ID0gbm9kZTsKICAgICAgbm9kZS50cmFuc2Zvcm1lckZsYWdzID0gdHJhbnNmb3JtZXJGbGFnczsKICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgUHJvY2VkdXJlIHJlYWRQcm9jZWR1cmUoaW50IGVuZE9mZnNldCkgewogICAgaW50IHRhZyA9IHJlYWRCeXRlKCk7CiAgICBhc3NlcnQodGFnID09IFRhZy5Qcm9jZWR1cmUpOwogICAgdmFyIGNhbm9uaWNhbE5hbWUgPSByZWFkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZSgpOwogICAgdmFyIHJlZmVyZW5jZSA9IGNhbm9uaWNhbE5hbWUuZ2V0UmVmZXJlbmNlKCk7CiAgICBQcm9jZWR1cmUgbm9kZSA9IHJlZmVyZW5jZS5ub2RlOwogICAgaWYgKGFsd2F5c0NyZWF0ZU5ld05hbWVkTm9kZXMpIHsKICAgICAgbm9kZSA9IG51bGw7CiAgICB9CiAgICBib29sIHNob3VsZFdyaXRlRGF0YSA9IG5vZGUgPT0gbnVsbCB8fCBfaXNSZWFkaW5nTGlicmFyeUltcGxlbWVudGF0aW9uOwogICAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgICBub2RlID0gbmV3IFByb2NlZHVyZShudWxsLCBudWxsLCBudWxsLCByZWZlcmVuY2U6IHJlZmVyZW5jZSk7CiAgICB9CiAgICB2YXIgZmlsZVVyaSA9IHJlYWRVcmlSZWZlcmVuY2UoKTsKICAgIHZhciBzdGFydEZpbGVPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICB2YXIgZmlsZU9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIHZhciBmaWxlRW5kT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgaW50IGtpbmRJbmRleCA9IHJlYWRCeXRlKCk7CiAgICB2YXIga2luZCA9IFByb2NlZHVyZUtpbmQudmFsdWVzW2tpbmRJbmRleF07CiAgICB2YXIgZmxhZ3MgPSByZWFkQnl0ZSgpOwogICAgdmFyIG5hbWUgPSByZWFkTmFtZSgpOwogICAgdmFyIGFubm90YXRpb25zID0gcmVhZEFubm90YXRpb25MaXN0KG5vZGUpOwogICAgYXNzZXJ0KCgpIHsKICAgICAgZGVidWdQYXRoLmFkZChub2RlLm5hbWU/Lm5hbWUgPz8gJ3Byb2NlZHVyZScpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0oKSk7CiAgICBpbnQgZnVuY3Rpb25Ob2RlU2l6ZSA9IGVuZE9mZnNldCAtIF9ieXRlT2Zmc2V0OwogICAgLy8gUmVhZCBzbWFsbCBmYWN0b3JpZXMgdXAgZnJvbnQuIFBvc3Rwb25lIGV2ZXJ5dGhpbmcgZWxzZS4KICAgIGJvb2wgcmVhZEZ1bmN0aW9uTm9kZU5vdyA9CiAgICAgICAgKGtpbmQgPT0gUHJvY2VkdXJlS2luZC5GYWN0b3J5ICYmIGZ1bmN0aW9uTm9kZVNpemUgPD0gNTApIHx8CiAgICAgICAgICAgIF9kaXNhYmxlTGF6eVJlYWRpbmc7CiAgICB2YXIgZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldFJlZmVyZW5jZSA9CiAgICAgICAgcmVhZE1lbWJlclJlZmVyZW5jZShhbGxvd051bGw6IHRydWUpOwogICAgdmFyIGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlID0KICAgICAgICByZWFkTWVtYmVyUmVmZXJlbmNlKGFsbG93TnVsbDogdHJ1ZSk7CiAgICB2YXIgZnVuY3Rpb24gPSByZWFkRnVuY3Rpb25Ob2RlT3B0aW9uKCFyZWFkRnVuY3Rpb25Ob2RlTm93LCBlbmRPZmZzZXQpOwogICAgdmFyIHRyYW5zZm9ybWVyRmxhZ3MgPSBnZXRBbmRSZXNldFRyYW5zZm9ybWVyRmxhZ3MoKTsKICAgIGFzc2VydCgoKF8pID0+IHRydWUpKGRlYnVnUGF0aC5yZW1vdmVMYXN0KCkpKTsKICAgIGlmIChzaG91bGRXcml0ZURhdGEpIHsKICAgICAgbm9kZS5zdGFydEZpbGVPZmZzZXQgPSBzdGFydEZpbGVPZmZzZXQ7CiAgICAgIG5vZGUuZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgIG5vZGUuZmlsZUVuZE9mZnNldCA9IGZpbGVFbmRPZmZzZXQ7CiAgICAgIG5vZGUua2luZCA9IGtpbmQ7CiAgICAgIG5vZGUuZmxhZ3MgPSBmbGFnczsKICAgICAgbm9kZS5uYW1lID0gbmFtZTsKICAgICAgbm9kZS5maWxlVXJpID0gZmlsZVVyaTsKICAgICAgbm9kZS5hbm5vdGF0aW9ucyA9IGFubm90YXRpb25zOwogICAgICBub2RlLmZ1bmN0aW9uID0gZnVuY3Rpb247CiAgICAgIGZ1bmN0aW9uPy5wYXJlbnQgPSBub2RlOwogICAgICBub2RlLnNldFRyYW5zZm9ybWVyRmxhZ3NXaXRob3V0TGF6eUxvYWRpbmcodHJhbnNmb3JtZXJGbGFncyk7CiAgICAgIG5vZGUuZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldFJlZmVyZW5jZSA9CiAgICAgICAgICBmb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0UmVmZXJlbmNlOwogICAgICBub2RlLmZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlID0KICAgICAgICAgIGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlOwoKICAgICAgYXNzZXJ0KChub2RlLmZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRSZWZlcmVuY2UgIT0gbnVsbCkgfHwKICAgICAgICAgICEobm9kZS5pc0ZvcndhcmRpbmdTdHViICYmIG5vZGUuZnVuY3Rpb24uYm9keSAhPSBudWxsKSk7CiAgICB9CiAgICBfYnl0ZU9mZnNldCA9IGVuZE9mZnNldDsKICAgIHJldHVybiBub2RlOwogIH0KCiAgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IgcmVhZFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKCkgewogICAgaW50IHRhZyA9IHJlYWRCeXRlKCk7CiAgICBhc3NlcnQodGFnID09IFRhZy5SZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcik7CiAgICB2YXIgY2Fub25pY2FsTmFtZSA9IHJlYWRDYW5vbmljYWxOYW1lUmVmZXJlbmNlKCk7CiAgICB2YXIgcmVmZXJlbmNlID0gY2Fub25pY2FsTmFtZS5nZXRSZWZlcmVuY2UoKTsKICAgIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIG5vZGUgPSByZWZlcmVuY2Uubm9kZTsKICAgIGlmIChhbHdheXNDcmVhdGVOZXdOYW1lZE5vZGVzKSB7CiAgICAgIG5vZGUgPSBudWxsOwogICAgfQogICAgYm9vbCBzaG91bGRXcml0ZURhdGEgPSBub2RlID09IG51bGwgfHwgX2lzUmVhZGluZ0xpYnJhcnlJbXBsZW1lbnRhdGlvbjsKICAgIGlmIChub2RlID09IG51bGwpIHsKICAgICAgbm9kZSA9IG5ldyBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcihudWxsLCByZWZlcmVuY2U6IHJlZmVyZW5jZSk7CiAgICB9CiAgICB2YXIgZmlsZVVyaSA9IHJlYWRVcmlSZWZlcmVuY2UoKTsKICAgIHZhciBmaWxlT2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgdmFyIGZpbGVFbmRPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICB2YXIgZmxhZ3MgPSByZWFkQnl0ZSgpOwogICAgdmFyIG5hbWUgPSByZWFkTmFtZSgpOwogICAgdmFyIGFubm90YXRpb25zID0gcmVhZEFubm90YXRpb25MaXN0KG5vZGUpOwogICAgYXNzZXJ0KCgpIHsKICAgICAgZGVidWdQYXRoLmFkZChub2RlLm5hbWU/Lm5hbWUgPz8gJ3JlZGlyZWN0aW5nLWZhY3RvcnktY29uc3RydWN0b3InKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9KCkpOwogICAgdmFyIHRhcmdldFJlZmVyZW5jZSA9IHJlYWRNZW1iZXJSZWZlcmVuY2UoKTsKICAgIHZhciB0eXBlQXJndW1lbnRzID0gcmVhZERhcnRUeXBlTGlzdCgpOwogICAgaW50IHR5cGVQYXJhbWV0ZXJTdGFja0hlaWdodCA9IHR5cGVQYXJhbWV0ZXJTdGFjay5sZW5ndGg7CiAgICB2YXIgdHlwZVBhcmFtZXRlcnMgPSByZWFkQW5kUHVzaFR5cGVQYXJhbWV0ZXJMaXN0KCk7CiAgICByZWFkVUludCgpOyAvLyBUb3RhbCBwYXJhbWV0ZXIgY291bnQuCiAgICB2YXIgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA9IHJlYWRVSW50KCk7CiAgICBpbnQgdmFyaWFibGVTdGFja0hlaWdodCA9IHZhcmlhYmxlU3RhY2subGVuZ3RoOwogICAgdmFyIHBvc2l0aW9uYWwgPSByZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7CiAgICB2YXIgbmFtZWQgPSByZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7CiAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IHZhcmlhYmxlU3RhY2tIZWlnaHQ7CiAgICB0eXBlUGFyYW1ldGVyU3RhY2subGVuZ3RoID0gdHlwZVBhcmFtZXRlclN0YWNrSGVpZ2h0OwogICAgZGVidWdQYXRoLnJlbW92ZUxhc3QoKTsKICAgIGlmIChzaG91bGRXcml0ZURhdGEpIHsKICAgICAgbm9kZS5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgICAgbm9kZS5maWxlRW5kT2Zmc2V0ID0gZmlsZUVuZE9mZnNldDsKICAgICAgbm9kZS5mbGFncyA9IGZsYWdzOwogICAgICBub2RlLm5hbWUgPSBuYW1lOwogICAgICBub2RlLmZpbGVVcmkgPSBmaWxlVXJpOwogICAgICBub2RlLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7CiAgICAgIG5vZGUudGFyZ2V0UmVmZXJlbmNlID0gdGFyZ2V0UmVmZXJlbmNlOwogICAgICBub2RlLnR5cGVBcmd1bWVudHMuYWRkQWxsKHR5cGVBcmd1bWVudHMpOwogICAgICBub2RlLnR5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFtZXRlcnM7CiAgICAgIG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA9IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CiAgICAgIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMgPSBwb3NpdGlvbmFsOwogICAgICBub2RlLm5hbWVkUGFyYW1ldGVycyA9IG5hbWVkOwogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBJbml0aWFsaXplciByZWFkSW5pdGlhbGl6ZXIoKSB7CiAgICBpbnQgdGFnID0gcmVhZEJ5dGUoKTsKICAgIGJvb2wgaXNTeW50aGV0aWMgPSByZWFkQnl0ZSgpID09IDE7CiAgICBzd2l0Y2ggKHRhZykgewogICAgICBjYXNlIFRhZy5JbnZhbGlkSW5pdGlhbGl6ZXI6CiAgICAgICAgcmV0dXJuIG5ldyBJbnZhbGlkSW5pdGlhbGl6ZXIoKTsKICAgICAgY2FzZSBUYWcuRmllbGRJbml0aWFsaXplcjoKICAgICAgICB2YXIgcmVmZXJlbmNlID0gcmVhZE1lbWJlclJlZmVyZW5jZSgpOwogICAgICAgIHZhciB2YWx1ZSA9IHJlYWRFeHByZXNzaW9uKCk7CiAgICAgICAgcmV0dXJuIG5ldyBGaWVsZEluaXRpYWxpemVyLmJ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgdmFsdWUpCiAgICAgICAgICAuLmlzU3ludGhldGljID0gaXNTeW50aGV0aWM7CiAgICAgIGNhc2UgVGFnLlN1cGVySW5pdGlhbGl6ZXI6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICB2YXIgcmVmZXJlbmNlID0gcmVhZE1lbWJlclJlZmVyZW5jZSgpOwogICAgICAgIHZhciBhcmd1bWVudHMgPSByZWFkQXJndW1lbnRzKCk7CiAgICAgICAgcmV0dXJuIG5ldyBTdXBlckluaXRpYWxpemVyLmJ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgYXJndW1lbnRzKQogICAgICAgICAgLi5pc1N5bnRoZXRpYyA9IGlzU3ludGhldGljCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlJlZGlyZWN0aW5nSW5pdGlhbGl6ZXI6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIuYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlYWRNZW1iZXJSZWZlcmVuY2UoKSwgcmVhZEFyZ3VtZW50cygpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Mb2NhbEluaXRpYWxpemVyOgogICAgICAgIHJldHVybiBuZXcgTG9jYWxJbml0aWFsaXplcihyZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb24oKSk7CiAgICAgIGNhc2UgVGFnLkFzc2VydEluaXRpYWxpemVyOgogICAgICAgIHJldHVybiBuZXcgQXNzZXJ0SW5pdGlhbGl6ZXIocmVhZFN0YXRlbWVudCgpKTsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBmYWlsKCd1bmV4cGVjdGVkIGluaXRpYWxpemVyIHRhZzogJHRhZycpOwogICAgfQogIH0KCiAgRnVuY3Rpb25Ob2RlIHJlYWRGdW5jdGlvbk5vZGVPcHRpb24oYm9vbCBsYXp5TG9hZEJvZHksIGludCBvdXRlckVuZE9mZnNldCkgewogICAgcmV0dXJuIHJlYWRBbmRDaGVja09wdGlvblRhZygpCiAgICAgICAgPyByZWFkRnVuY3Rpb25Ob2RlKAogICAgICAgICAgICBsYXp5TG9hZEJvZHk6IGxhenlMb2FkQm9keSwgb3V0ZXJFbmRPZmZzZXQ6IG91dGVyRW5kT2Zmc2V0KQogICAgICAgIDogbnVsbDsKICB9CgogIEZ1bmN0aW9uTm9kZSByZWFkRnVuY3Rpb25Ob2RlKAogICAgICB7Ym9vbCBsYXp5TG9hZEJvZHk6IGZhbHNlLCBpbnQgb3V0ZXJFbmRPZmZzZXQ6IC0xfSkgewogICAgaW50IHRhZyA9IHJlYWRCeXRlKCk7CiAgICBhc3NlcnQodGFnID09IFRhZy5GdW5jdGlvbk5vZGUpOwogICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIGludCBlbmRPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICBBc3luY01hcmtlciBhc3luY01hcmtlciA9IEFzeW5jTWFya2VyLnZhbHVlc1tyZWFkQnl0ZSgpXTsKICAgIEFzeW5jTWFya2VyIGRhcnRBc3luY01hcmtlciA9IEFzeW5jTWFya2VyLnZhbHVlc1tyZWFkQnl0ZSgpXTsKICAgIGludCB0eXBlUGFyYW1ldGVyU3RhY2tIZWlnaHQgPSB0eXBlUGFyYW1ldGVyU3RhY2subGVuZ3RoOwogICAgdmFyIHR5cGVQYXJhbWV0ZXJzID0gcmVhZEFuZFB1c2hUeXBlUGFyYW1ldGVyTGlzdCgpOwogICAgcmVhZFVJbnQoKTsgLy8gdG90YWwgcGFyYW1ldGVyIGNvdW50LgogICAgdmFyIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPSByZWFkVUludCgpOwogICAgaW50IHZhcmlhYmxlU3RhY2tIZWlnaHQgPSB2YXJpYWJsZVN0YWNrLmxlbmd0aDsKICAgIHZhciBwb3NpdGlvbmFsID0gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpOwogICAgdmFyIG5hbWVkID0gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpOwogICAgdmFyIHJldHVyblR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgIGludCBvbGRMYWJlbFN0YWNrQmFzZSA9IGxhYmVsU3RhY2tCYXNlOwoKICAgIGlmIChsYXp5TG9hZEJvZHkgJiYgb3V0ZXJFbmRPZmZzZXQgPiAwKSB7CiAgICAgIGxhenlMb2FkQm9keSA9IG91dGVyRW5kT2Zmc2V0IC0gX2J5dGVPZmZzZXQgPgogICAgICAgICAgMjsgLy8gZS5nLiBvdXRsaW5lIGhhcyBUYWcuU29tZXRoaW5nIGFuZCBUYWcuRW1wdHlTdGF0ZW1lbnQKICAgIH0KCiAgICB2YXIgYm9keTsKICAgIGlmICghbGF6eUxvYWRCb2R5KSB7CiAgICAgIGxhYmVsU3RhY2tCYXNlID0gbGFiZWxTdGFjay5sZW5ndGg7CiAgICAgIGJvZHkgPSByZWFkU3RhdGVtZW50T3B0aW9uKCk7CiAgICB9CgogICAgRnVuY3Rpb25Ob2RlIHJlc3VsdCA9IG5ldyBGdW5jdGlvbk5vZGUoYm9keSwKICAgICAgICB0eXBlUGFyYW1ldGVyczogdHlwZVBhcmFtZXRlcnMsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyczogcG9zaXRpb25hbCwKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IG5hbWVkLAogICAgICAgIHJldHVyblR5cGU6IHJldHVyblR5cGUsCiAgICAgICAgYXN5bmNNYXJrZXI6IGFzeW5jTWFya2VyLAogICAgICAgIGRhcnRBc3luY01hcmtlcjogZGFydEFzeW5jTWFya2VyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQKICAgICAgLi5maWxlRW5kT2Zmc2V0ID0gZW5kT2Zmc2V0OwoKICAgIGlmIChsYXp5TG9hZEJvZHkpIHsKICAgICAgX3NldExhenlMb2FkRnVuY3Rpb24ocmVzdWx0LCBvbGRMYWJlbFN0YWNrQmFzZSwgdmFyaWFibGVTdGFja0hlaWdodCwKICAgICAgICAgIHR5cGVQYXJhbWV0ZXJTdGFja0hlaWdodCk7CiAgICB9CgogICAgbGFiZWxTdGFja0Jhc2UgPSBvbGRMYWJlbFN0YWNrQmFzZTsKICAgIHZhcmlhYmxlU3RhY2subGVuZ3RoID0gdmFyaWFibGVTdGFja0hlaWdodDsKICAgIHR5cGVQYXJhbWV0ZXJTdGFjay5sZW5ndGggPSB0eXBlUGFyYW1ldGVyU3RhY2tIZWlnaHQ7CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX3NldExhenlMb2FkRnVuY3Rpb24oRnVuY3Rpb25Ob2RlIHJlc3VsdCwgaW50IG9sZExhYmVsU3RhY2tCYXNlLAogICAgICBpbnQgdmFyaWFibGVTdGFja0hlaWdodCwgaW50IHR5cGVQYXJhbWV0ZXJTdGFja0hlaWdodCkgewogICAgZmluYWwgaW50IHNhdmVkQnl0ZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgaW50IGNvbXBvbmVudFN0YXJ0T2Zmc2V0ID0gX2NvbXBvbmVudFN0YXJ0T2Zmc2V0OwogICAgZmluYWwgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9IHR5cGVQYXJhbWV0ZXJTdGFjay50b0xpc3QoKTsKICAgIGZpbmFsIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzID0gdmFyaWFibGVTdGFjay50b0xpc3QoKTsKICAgIGZpbmFsIExpYnJhcnkgY3VycmVudExpYnJhcnkgPSBfY3VycmVudExpYnJhcnk7CiAgICByZXN1bHQubGF6eUJ1aWxkZXIgPSAoKSB7CiAgICAgIF9ieXRlT2Zmc2V0ID0gc2F2ZWRCeXRlT2Zmc2V0OwogICAgICBfY3VycmVudExpYnJhcnkgPSBjdXJyZW50TGlicmFyeTsKICAgICAgdHlwZVBhcmFtZXRlclN0YWNrLmNsZWFyKCk7CiAgICAgIHR5cGVQYXJhbWV0ZXJTdGFjay5hZGRBbGwodHlwZVBhcmFtZXRlcnMpOwogICAgICB2YXJpYWJsZVN0YWNrLmNsZWFyKCk7CiAgICAgIHZhcmlhYmxlU3RhY2suYWRkQWxsKHZhcmlhYmxlcyk7CiAgICAgIF9jb21wb25lbnRTdGFydE9mZnNldCA9IGNvbXBvbmVudFN0YXJ0T2Zmc2V0OwoKICAgICAgcmVzdWx0LmJvZHkgPSByZWFkU3RhdGVtZW50T3B0aW9uKCk7CiAgICAgIHJlc3VsdC5ib2R5Py5wYXJlbnQgPSByZXN1bHQ7CiAgICAgIGxhYmVsU3RhY2tCYXNlID0gb2xkTGFiZWxTdGFja0Jhc2U7CiAgICAgIHZhcmlhYmxlU3RhY2subGVuZ3RoID0gdmFyaWFibGVTdGFja0hlaWdodDsKICAgICAgdHlwZVBhcmFtZXRlclN0YWNrLmxlbmd0aCA9IHR5cGVQYXJhbWV0ZXJTdGFja0hlaWdodDsKICAgICAgaWYgKHJlc3VsdC5wYXJlbnQgaXMgUHJvY2VkdXJlKSB7CiAgICAgICAgUHJvY2VkdXJlIHBhcmVudCA9IHJlc3VsdC5wYXJlbnQ7CiAgICAgICAgcGFyZW50LnRyYW5zZm9ybWVyRmxhZ3MgfD0gZ2V0QW5kUmVzZXRUcmFuc2Zvcm1lckZsYWdzKCk7CiAgICAgIH0KICAgIH07CiAgfQoKICB2b2lkIHB1c2hWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpIHsKICAgIHZhcmlhYmxlU3RhY2suYWRkKHZhcmlhYmxlKTsKICB9CgogIHZvaWQgcHVzaFZhcmlhYmxlRGVjbGFyYXRpb25zKExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzKSB7CiAgICB2YXJpYWJsZVN0YWNrLmFkZEFsbCh2YXJpYWJsZXMpOwogIH0KCiAgVmFyaWFibGVEZWNsYXJhdGlvbiByZWFkVmFyaWFibGVSZWZlcmVuY2UoKSB7CiAgICBpbnQgaW5kZXggPSByZWFkVUludCgpOwogICAgaWYgKGluZGV4ID49IHZhcmlhYmxlU3RhY2subGVuZ3RoKSB7CiAgICAgIHRocm93IGZhaWwoJ3VuZXhwZWN0ZWQgdmFyaWFibGUgaW5kZXg6ICRpbmRleCcpOwogICAgfQogICAgcmV0dXJuIHZhcmlhYmxlU3RhY2tbaW5kZXhdOwogIH0KCiAgU3RyaW5nIGxvZ2ljYWxPcGVyYXRvclRvU3RyaW5nKGludCBpbmRleCkgewogICAgc3dpdGNoIChpbmRleCkgewogICAgICBjYXNlIDA6CiAgICAgICAgcmV0dXJuICcmJic7CiAgICAgIGNhc2UgMToKICAgICAgICByZXR1cm4gJ3x8JzsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBmYWlsKCd1bmV4cGVjdGVkIGxvZ2ljYWwgb3BlcmF0b3IgaW5kZXg6ICRpbmRleCcpOwogICAgfQogIH0KCiAgTGlzdDxFeHByZXNzaW9uPiByZWFkRXhwcmVzc2lvbkxpc3QoKSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxFeHByZXNzaW9uPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWRFeHByZXNzaW9uKCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRXhwcmVzc2lvbiByZWFkRXhwcmVzc2lvbk9wdGlvbigpIHsKICAgIHJldHVybiByZWFkQW5kQ2hlY2tPcHRpb25UYWcoKSA/IHJlYWRFeHByZXNzaW9uKCkgOiBudWxsOwogIH0KCiAgRXhwcmVzc2lvbiByZWFkRXhwcmVzc2lvbigpIHsKICAgIGludCB0YWdCeXRlID0gcmVhZEJ5dGUoKTsKICAgIGludCB0YWcgPSB0YWdCeXRlICYgVGFnLlNwZWNpYWxpemVkVGFnSGlnaEJpdCA9PSAwCiAgICAgICAgPyB0YWdCeXRlCiAgICAgICAgOiAodGFnQnl0ZSAmIFRhZy5TcGVjaWFsaXplZFRhZ01hc2spOwogICAgc3dpdGNoICh0YWcpIHsKICAgICAgY2FzZSBUYWcuTG9hZExpYnJhcnk6CiAgICAgICAgcmV0dXJuIG5ldyBMb2FkTGlicmFyeShyZWFkTGlicmFyeURlcGVuZGVuY3lSZWZlcmVuY2UoKSk7CiAgICAgIGNhc2UgVGFnLkNoZWNrTGlicmFyeUlzTG9hZGVkOgogICAgICAgIHJldHVybiBuZXcgQ2hlY2tMaWJyYXJ5SXNMb2FkZWQocmVhZExpYnJhcnlEZXBlbmRlbmN5UmVmZXJlbmNlKCkpOwogICAgICBjYXNlIFRhZy5JbnZhbGlkRXhwcmVzc2lvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgSW52YWxpZEV4cHJlc3Npb24ocmVhZFN0cmluZ09yTnVsbElmRW1wdHkoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuVmFyaWFibGVHZXQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZWFkVUludCgpOyAvLyBvZmZzZXQgb2YgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGluIHRoZSBiaW5hcnkuCiAgICAgICAgcmV0dXJuIG5ldyBWYXJpYWJsZUdldChyZWFkVmFyaWFibGVSZWZlcmVuY2UoKSwgcmVhZERhcnRUeXBlT3B0aW9uKCkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlNwZWNpYWxpemVkVmFyaWFibGVHZXQ6CiAgICAgICAgaW50IGluZGV4ID0gdGFnQnl0ZSAmIFRhZy5TcGVjaWFsaXplZFBheWxvYWRNYXNrOwogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmVhZFVJbnQoKTsgLy8gb2Zmc2V0IG9mIHRoZSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBpbiB0aGUgYmluYXJ5LgogICAgICAgIHJldHVybiBuZXcgVmFyaWFibGVHZXQodmFyaWFibGVTdGFja1tpbmRleF0pLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5WYXJpYWJsZVNldDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJlYWRVSW50KCk7IC8vIG9mZnNldCBvZiB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb24gaW4gdGhlIGJpbmFyeS4KICAgICAgICByZXR1cm4gbmV3IFZhcmlhYmxlU2V0KHJlYWRWYXJpYWJsZVJlZmVyZW5jZSgpLCByZWFkRXhwcmVzc2lvbigpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5TcGVjaWFsaXplZFZhcmlhYmxlU2V0OgogICAgICAgIGludCBpbmRleCA9IHRhZ0J5dGUgJiBUYWcuU3BlY2lhbGl6ZWRQYXlsb2FkTWFzazsKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJlYWRVSW50KCk7IC8vIG9mZnNldCBvZiB0aGUgdmFyaWFibGUgZGVjbGFyYXRpb24gaW4gdGhlIGJpbmFyeS4KICAgICAgICByZXR1cm4gbmV3IFZhcmlhYmxlU2V0KHZhcmlhYmxlU3RhY2tbaW5kZXhdLCByZWFkRXhwcmVzc2lvbigpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Qcm9wZXJ0eUdldDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgUHJvcGVydHlHZXQuYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlYWRFeHByZXNzaW9uKCksIHJlYWROYW1lKCksIHJlYWRNZW1iZXJSZWZlcmVuY2UoYWxsb3dOdWxsOiB0cnVlKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuUHJvcGVydHlTZXQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IFByb3BlcnR5U2V0LmJ5UmVmZXJlbmNlKHJlYWRFeHByZXNzaW9uKCksIHJlYWROYW1lKCksCiAgICAgICAgICAgIHJlYWRFeHByZXNzaW9uKCksIHJlYWRNZW1iZXJSZWZlcmVuY2UoYWxsb3dOdWxsOiB0cnVlKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuU3VwZXJQcm9wZXJ0eUdldDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIGFkZFRyYW5zZm9ybWVyRmxhZyhUcmFuc2Zvcm1lckZsYWcuc3VwZXJDYWxscyk7CiAgICAgICAgcmV0dXJuIG5ldyBTdXBlclByb3BlcnR5R2V0LmJ5UmVmZXJlbmNlKAogICAgICAgICAgICByZWFkTmFtZSgpLCByZWFkTWVtYmVyUmVmZXJlbmNlKGFsbG93TnVsbDogdHJ1ZSkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlN1cGVyUHJvcGVydHlTZXQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICBhZGRUcmFuc2Zvcm1lckZsYWcoVHJhbnNmb3JtZXJGbGFnLnN1cGVyQ2FsbHMpOwogICAgICAgIHJldHVybiBuZXcgU3VwZXJQcm9wZXJ0eVNldC5ieVJlZmVyZW5jZSgKICAgICAgICAgICAgcmVhZE5hbWUoKSwgcmVhZEV4cHJlc3Npb24oKSwgcmVhZE1lbWJlclJlZmVyZW5jZShhbGxvd051bGw6IHRydWUpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5EaXJlY3RQcm9wZXJ0eUdldDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgRGlyZWN0UHJvcGVydHlHZXQuYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlYWRFeHByZXNzaW9uKCksIHJlYWRNZW1iZXJSZWZlcmVuY2UoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuRGlyZWN0UHJvcGVydHlTZXQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IERpcmVjdFByb3BlcnR5U2V0LmJ5UmVmZXJlbmNlKAogICAgICAgICAgICByZWFkRXhwcmVzc2lvbigpLCByZWFkTWVtYmVyUmVmZXJlbmNlKCksIHJlYWRFeHByZXNzaW9uKCkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlN0YXRpY0dldDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgU3RhdGljR2V0LmJ5UmVmZXJlbmNlKHJlYWRNZW1iZXJSZWZlcmVuY2UoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuU3RhdGljU2V0OgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBTdGF0aWNTZXQuYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlYWRNZW1iZXJSZWZlcmVuY2UoKSwgcmVhZEV4cHJlc3Npb24oKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuTWV0aG9kSW52b2NhdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgTWV0aG9kSW52b2NhdGlvbi5ieVJlZmVyZW5jZShyZWFkRXhwcmVzc2lvbigpLCByZWFkTmFtZSgpLAogICAgICAgICAgICByZWFkQXJndW1lbnRzKCksIHJlYWRNZW1iZXJSZWZlcmVuY2UoYWxsb3dOdWxsOiB0cnVlKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuU3VwZXJNZXRob2RJbnZvY2F0aW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgYWRkVHJhbnNmb3JtZXJGbGFnKFRyYW5zZm9ybWVyRmxhZy5zdXBlckNhbGxzKTsKICAgICAgICByZXR1cm4gbmV3IFN1cGVyTWV0aG9kSW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgICAgICAgcmVhZE5hbWUoKSwgcmVhZEFyZ3VtZW50cygpLCByZWFkTWVtYmVyUmVmZXJlbmNlKGFsbG93TnVsbDogdHJ1ZSkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkRpcmVjdE1ldGhvZEludm9jYXRpb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IERpcmVjdE1ldGhvZEludm9jYXRpb24uYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlYWRFeHByZXNzaW9uKCksIHJlYWRNZW1iZXJSZWZlcmVuY2UoKSwgcmVhZEFyZ3VtZW50cygpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5TdGF0aWNJbnZvY2F0aW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBTdGF0aWNJbnZvY2F0aW9uLmJ5UmVmZXJlbmNlKAogICAgICAgICAgICByZWFkTWVtYmVyUmVmZXJlbmNlKCksIHJlYWRBcmd1bWVudHMoKSwKICAgICAgICAgICAgaXNDb25zdDogZmFsc2UpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkNvbnN0U3RhdGljSW52b2NhdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgU3RhdGljSW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgICAgICAgcmVhZE1lbWJlclJlZmVyZW5jZSgpLCByZWFkQXJndW1lbnRzKCksCiAgICAgICAgICAgIGlzQ29uc3Q6IHRydWUpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkNvbnN0cnVjdG9ySW52b2NhdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3JJbnZvY2F0aW9uLmJ5UmVmZXJlbmNlKAogICAgICAgICAgICByZWFkTWVtYmVyUmVmZXJlbmNlKCksIHJlYWRBcmd1bWVudHMoKSwKICAgICAgICAgICAgaXNDb25zdDogZmFsc2UpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkNvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvckludm9jYXRpb24uYnlSZWZlcmVuY2UoCiAgICAgICAgICAgIHJlYWRNZW1iZXJSZWZlcmVuY2UoKSwgcmVhZEFyZ3VtZW50cygpLAogICAgICAgICAgICBpc0NvbnN0OiB0cnVlKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Ob3Q6CiAgICAgICAgcmV0dXJuIG5ldyBOb3QocmVhZEV4cHJlc3Npb24oKSk7CiAgICAgIGNhc2UgVGFnLkxvZ2ljYWxFeHByZXNzaW9uOgogICAgICAgIHJldHVybiBuZXcgTG9naWNhbEV4cHJlc3Npb24ocmVhZEV4cHJlc3Npb24oKSwKICAgICAgICAgICAgbG9naWNhbE9wZXJhdG9yVG9TdHJpbmcocmVhZEJ5dGUoKSksIHJlYWRFeHByZXNzaW9uKCkpOwogICAgICBjYXNlIFRhZy5Db25kaXRpb25hbEV4cHJlc3Npb246CiAgICAgICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbEV4cHJlc3Npb24ocmVhZEV4cHJlc3Npb24oKSwgcmVhZEV4cHJlc3Npb24oKSwKICAgICAgICAgICAgcmVhZEV4cHJlc3Npb24oKSwgcmVhZERhcnRUeXBlT3B0aW9uKCkpOwogICAgICBjYXNlIFRhZy5TdHJpbmdDb25jYXRlbmF0aW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdDb25jYXRlbmF0aW9uKHJlYWRFeHByZXNzaW9uTGlzdCgpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5MaXN0Q29uY2F0ZW5hdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHZhciB0eXBlQXJndW1lbnQgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IExpc3RDb25jYXRlbmF0aW9uKHJlYWRFeHByZXNzaW9uTGlzdCgpLAogICAgICAgICAgICB0eXBlQXJndW1lbnQ6IHR5cGVBcmd1bWVudCkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuU2V0Q29uY2F0ZW5hdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHZhciB0eXBlQXJndW1lbnQgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IFNldENvbmNhdGVuYXRpb24ocmVhZEV4cHJlc3Npb25MaXN0KCksCiAgICAgICAgICAgIHR5cGVBcmd1bWVudDogdHlwZUFyZ3VtZW50KQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5NYXBDb25jYXRlbmF0aW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgdmFyIGtleVR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICB2YXIgdmFsdWVUeXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBNYXBDb25jYXRlbmF0aW9uKHJlYWRFeHByZXNzaW9uTGlzdCgpLAogICAgICAgICAgICBrZXlUeXBlOiBrZXlUeXBlLCB2YWx1ZVR5cGU6IHZhbHVlVHlwZSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuSW5zdGFuY2VDcmVhdGlvbjoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIFJlZmVyZW5jZSBjbGFzc1JlZmVyZW5jZSA9IHJlYWRDbGFzc1JlZmVyZW5jZSgpOwogICAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSByZWFkRGFydFR5cGVMaXN0KCk7CiAgICAgICAgaW50IGZpZWxkVmFsdWVDb3VudCA9IHJlYWRVSW50KCk7CiAgICAgICAgTWFwPFJlZmVyZW5jZSwgRXhwcmVzc2lvbj4gZmllbGRWYWx1ZXMgPSA8UmVmZXJlbmNlLCBFeHByZXNzaW9uPnt9OwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRWYWx1ZUNvdW50OyBpKyspIHsKICAgICAgICAgIGZpbmFsIFJlZmVyZW5jZSBmaWVsZFJlZiA9CiAgICAgICAgICAgICAgcmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2UoKS5nZXRSZWZlcmVuY2UoKTsKICAgICAgICAgIGZpbmFsIEV4cHJlc3Npb24gdmFsdWUgPSByZWFkRXhwcmVzc2lvbigpOwogICAgICAgICAgZmllbGRWYWx1ZXNbZmllbGRSZWZdID0gdmFsdWU7CiAgICAgICAgfQogICAgICAgIGludCBhc3NlcnRDb3VudCA9IHJlYWRVSW50KCk7CiAgICAgICAgTGlzdDxBc3NlcnRTdGF0ZW1lbnQ+IGFzc2VydHMgPSBuZXcgTGlzdDxBc3NlcnRTdGF0ZW1lbnQ+KGFzc2VydENvdW50KTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGFzc2VydENvdW50OyBpKyspIHsKICAgICAgICAgIGFzc2VydHNbaV0gPSByZWFkU3RhdGVtZW50KCk7CiAgICAgICAgfQogICAgICAgIExpc3Q8RXhwcmVzc2lvbj4gdW51c2VkQXJndW1lbnRzID0gcmVhZEV4cHJlc3Npb25MaXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBJbnN0YW5jZUNyZWF0aW9uKGNsYXNzUmVmZXJlbmNlLCB0eXBlQXJndW1lbnRzLCBmaWVsZFZhbHVlcywKICAgICAgICAgICAgYXNzZXJ0cywgdW51c2VkQXJndW1lbnRzKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Jc0V4cHJlc3Npb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IElzRXhwcmVzc2lvbihyZWFkRXhwcmVzc2lvbigpLCByZWFkRGFydFR5cGUoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuQXNFeHByZXNzaW9uOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgaW50IGZsYWdzID0gcmVhZEJ5dGUoKTsKICAgICAgICByZXR1cm4gbmV3IEFzRXhwcmVzc2lvbihyZWFkRXhwcmVzc2lvbigpLCByZWFkRGFydFR5cGUoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldAogICAgICAgICAgLi5mbGFncyA9IGZsYWdzOwogICAgICBjYXNlIFRhZy5TdHJpbmdMaXRlcmFsOgogICAgICAgIHJldHVybiBuZXcgU3RyaW5nTGl0ZXJhbChyZWFkU3RyaW5nUmVmZXJlbmNlKCkpOwogICAgICBjYXNlIFRhZy5TcGVjaWFsaXplZEludExpdGVyYWw6CiAgICAgICAgaW50IGJpYXNlZFZhbHVlID0gdGFnQnl0ZSAmIFRhZy5TcGVjaWFsaXplZFBheWxvYWRNYXNrOwogICAgICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbChiaWFzZWRWYWx1ZSAtIFRhZy5TcGVjaWFsaXplZEludExpdGVyYWxCaWFzKTsKICAgICAgY2FzZSBUYWcuUG9zaXRpdmVJbnRMaXRlcmFsOgogICAgICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbChyZWFkVUludCgpKTsKICAgICAgY2FzZSBUYWcuTmVnYXRpdmVJbnRMaXRlcmFsOgogICAgICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbCgtcmVhZFVJbnQoKSk7CiAgICAgIGNhc2UgVGFnLkJpZ0ludExpdGVyYWw6CiAgICAgICAgcmV0dXJuIG5ldyBJbnRMaXRlcmFsKGludC5wYXJzZShyZWFkU3RyaW5nUmVmZXJlbmNlKCkpKTsKICAgICAgY2FzZSBUYWcuRG91YmxlTGl0ZXJhbDoKICAgICAgICByZXR1cm4gbmV3IERvdWJsZUxpdGVyYWwocmVhZERvdWJsZSgpKTsKICAgICAgY2FzZSBUYWcuVHJ1ZUxpdGVyYWw6CiAgICAgICAgcmV0dXJuIG5ldyBCb29sTGl0ZXJhbCh0cnVlKTsKICAgICAgY2FzZSBUYWcuRmFsc2VMaXRlcmFsOgogICAgICAgIHJldHVybiBuZXcgQm9vbExpdGVyYWwoZmFsc2UpOwogICAgICBjYXNlIFRhZy5OdWxsTGl0ZXJhbDoKICAgICAgICByZXR1cm4gbmV3IE51bGxMaXRlcmFsKCk7CiAgICAgIGNhc2UgVGFnLlN5bWJvbExpdGVyYWw6CiAgICAgICAgcmV0dXJuIG5ldyBTeW1ib2xMaXRlcmFsKHJlYWRTdHJpbmdSZWZlcmVuY2UoKSk7CiAgICAgIGNhc2UgVGFnLlR5cGVMaXRlcmFsOgogICAgICAgIHJldHVybiBuZXcgVHlwZUxpdGVyYWwocmVhZERhcnRUeXBlKCkpOwogICAgICBjYXNlIFRhZy5UaGlzRXhwcmVzc2lvbjoKICAgICAgICByZXR1cm4gbmV3IFRoaXNFeHByZXNzaW9uKCk7CiAgICAgIGNhc2UgVGFnLlJldGhyb3c6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IFJldGhyb3coKS4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuVGhyb3c6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IFRocm93KHJlYWRFeHByZXNzaW9uKCkpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5MaXN0TGl0ZXJhbDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHZhciB0eXBlQXJndW1lbnQgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IExpc3RMaXRlcmFsKHJlYWRFeHByZXNzaW9uTGlzdCgpLAogICAgICAgICAgICB0eXBlQXJndW1lbnQ6IHR5cGVBcmd1bWVudCwgaXNDb25zdDogZmFsc2UpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkNvbnN0TGlzdExpdGVyYWw6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICB2YXIgdHlwZUFyZ3VtZW50ID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBMaXN0TGl0ZXJhbChyZWFkRXhwcmVzc2lvbkxpc3QoKSwKICAgICAgICAgICAgdHlwZUFyZ3VtZW50OiB0eXBlQXJndW1lbnQsIGlzQ29uc3Q6IHRydWUpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlNldExpdGVyYWw6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICB2YXIgdHlwZUFyZ3VtZW50ID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBTZXRMaXRlcmFsKHJlYWRFeHByZXNzaW9uTGlzdCgpLAogICAgICAgICAgICB0eXBlQXJndW1lbnQ6IHR5cGVBcmd1bWVudCwgaXNDb25zdDogZmFsc2UpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkNvbnN0U2V0TGl0ZXJhbDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHZhciB0eXBlQXJndW1lbnQgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IFNldExpdGVyYWwocmVhZEV4cHJlc3Npb25MaXN0KCksCiAgICAgICAgICAgIHR5cGVBcmd1bWVudDogdHlwZUFyZ3VtZW50LCBpc0NvbnN0OiB0cnVlKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5NYXBMaXRlcmFsOgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgdmFyIGtleVR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICB2YXIgdmFsdWVUeXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBNYXBMaXRlcmFsKHJlYWRNYXBFbnRyeUxpc3QoKSwKICAgICAgICAgICAga2V5VHlwZToga2V5VHlwZSwgdmFsdWVUeXBlOiB2YWx1ZVR5cGUsIGlzQ29uc3Q6IGZhbHNlKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Db25zdE1hcExpdGVyYWw6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICB2YXIga2V5VHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIHZhciB2YWx1ZVR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IE1hcExpdGVyYWwocmVhZE1hcEVudHJ5TGlzdCgpLAogICAgICAgICAgICBrZXlUeXBlOiBrZXlUeXBlLCB2YWx1ZVR5cGU6IHZhbHVlVHlwZSwgaXNDb25zdDogdHJ1ZSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuQXdhaXRFeHByZXNzaW9uOgogICAgICAgIHJldHVybiBuZXcgQXdhaXRFeHByZXNzaW9uKHJlYWRFeHByZXNzaW9uKCkpOwogICAgICBjYXNlIFRhZy5GdW5jdGlvbkV4cHJlc3Npb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uRXhwcmVzc2lvbihyZWFkRnVuY3Rpb25Ob2RlKCkpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5MZXQ6CiAgICAgICAgdmFyIHZhcmlhYmxlID0gcmVhZFZhcmlhYmxlRGVjbGFyYXRpb24oKTsKICAgICAgICBpbnQgc3RhY2tIZWlnaHQgPSB2YXJpYWJsZVN0YWNrLmxlbmd0aDsKICAgICAgICBwdXNoVmFyaWFibGVEZWNsYXJhdGlvbih2YXJpYWJsZSk7CiAgICAgICAgdmFyIGJvZHkgPSByZWFkRXhwcmVzc2lvbigpOwogICAgICAgIHZhcmlhYmxlU3RhY2subGVuZ3RoID0gc3RhY2tIZWlnaHQ7CiAgICAgICAgcmV0dXJuIG5ldyBMZXQodmFyaWFibGUsIGJvZHkpOwogICAgICBjYXNlIFRhZy5CbG9ja0V4cHJlc3Npb246CiAgICAgICAgaW50IHN0YWNrSGVpZ2h0ID0gdmFyaWFibGVTdGFjay5sZW5ndGg7CiAgICAgICAgdmFyIHN0YXRlbWVudHMgPSByZWFkU3RhdGVtZW50TGlzdCgpOwogICAgICAgIHZhciB2YWx1ZSA9IHJlYWRFeHByZXNzaW9uKCk7CiAgICAgICAgdmFyaWFibGVTdGFjay5sZW5ndGggPSBzdGFja0hlaWdodDsKICAgICAgICByZXR1cm4gbmV3IEJsb2NrRXhwcmVzc2lvbihuZXcgQmxvY2soc3RhdGVtZW50cyksIHZhbHVlKTsKICAgICAgY2FzZSBUYWcuSW5zdGFudGlhdGlvbjoKICAgICAgICB2YXIgZXhwcmVzc2lvbiA9IHJlYWRFeHByZXNzaW9uKCk7CiAgICAgICAgdmFyIHR5cGVBcmd1bWVudHMgPSByZWFkRGFydFR5cGVMaXN0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBJbnN0YW50aWF0aW9uKGV4cHJlc3Npb24sIHR5cGVBcmd1bWVudHMpOwogICAgICBjYXNlIFRhZy5Db25zdGFudEV4cHJlc3Npb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICBEYXJ0VHlwZSB0eXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgQ29uc3RhbnQgY29uc3RhbnQgPSByZWFkQ29uc3RhbnRSZWZlcmVuY2UoKTsKICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50RXhwcmVzc2lvbihjb25zdGFudCwgdHlwZSkuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgZmFpbCgndW5leHBlY3RlZCBleHByZXNzaW9uIHRhZzogJHRhZycpOwogICAgfQogIH0KCiAgTGlzdDxNYXBFbnRyeT4gcmVhZE1hcEVudHJ5TGlzdCgpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgTGlzdDxNYXBFbnRyeT4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxNYXBFbnRyeT4uZmlsbGVkKGxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICByZXN1bHRbaV0gPSByZWFkTWFwRW50cnkoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBNYXBFbnRyeSByZWFkTWFwRW50cnkoKSB7CiAgICByZXR1cm4gbmV3IE1hcEVudHJ5KHJlYWRFeHByZXNzaW9uKCksIHJlYWRFeHByZXNzaW9uKCkpOwogIH0KCiAgTGlzdDxTdGF0ZW1lbnQ+IHJlYWRTdGF0ZW1lbnRMaXN0KCkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBMaXN0PFN0YXRlbWVudD4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxTdGF0ZW1lbnQ+LmZpbGxlZChsZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgcmVzdWx0W2ldID0gcmVhZFN0YXRlbWVudCgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0YXRlbWVudCByZWFkU3RhdGVtZW50T3JOdWxsSWZFbXB0eSgpIHsKICAgIHZhciBub2RlID0gcmVhZFN0YXRlbWVudCgpOwogICAgaWYgKG5vZGUgaXMgRW1wdHlTdGF0ZW1lbnQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbm9kZTsKICAgIH0KICB9CgogIFN0YXRlbWVudCByZWFkU3RhdGVtZW50T3B0aW9uKCkgewogICAgcmV0dXJuIHJlYWRBbmRDaGVja09wdGlvblRhZygpID8gcmVhZFN0YXRlbWVudCgpIDogbnVsbDsKICB9CgogIFN0YXRlbWVudCByZWFkU3RhdGVtZW50KCkgewogICAgaW50IHRhZyA9IHJlYWRCeXRlKCk7CiAgICBzd2l0Y2ggKHRhZykgewogICAgICBjYXNlIFRhZy5FeHByZXNzaW9uU3RhdGVtZW50OgogICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvblN0YXRlbWVudChyZWFkRXhwcmVzc2lvbigpKTsKICAgICAgY2FzZSBUYWcuQmxvY2s6CiAgICAgICAgcmV0dXJuIHJlYWRCbG9jaygpOwogICAgICBjYXNlIFRhZy5Bc3NlcnRCbG9jazoKICAgICAgICByZXR1cm4gcmVhZEFzc2VydEJsb2NrKCk7CiAgICAgIGNhc2UgVGFnLkVtcHR5U3RhdGVtZW50OgogICAgICAgIHJldHVybiBuZXcgRW1wdHlTdGF0ZW1lbnQoKTsKICAgICAgY2FzZSBUYWcuQXNzZXJ0U3RhdGVtZW50OgogICAgICAgIHJldHVybiBuZXcgQXNzZXJ0U3RhdGVtZW50KHJlYWRFeHByZXNzaW9uKCksCiAgICAgICAgICAgIGNvbmRpdGlvblN0YXJ0T2Zmc2V0OiByZWFkT2Zmc2V0KCksCiAgICAgICAgICAgIGNvbmRpdGlvbkVuZE9mZnNldDogcmVhZE9mZnNldCgpLAogICAgICAgICAgICBtZXNzYWdlOiByZWFkRXhwcmVzc2lvbk9wdGlvbigpKTsKICAgICAgY2FzZSBUYWcuTGFiZWxlZFN0YXRlbWVudDoKICAgICAgICB2YXIgbGFiZWwgPSBuZXcgTGFiZWxlZFN0YXRlbWVudChudWxsKTsKICAgICAgICBsYWJlbFN0YWNrLmFkZChsYWJlbCk7CiAgICAgICAgbGFiZWwuYm9keSA9IHJlYWRTdGF0ZW1lbnQoKS4ucGFyZW50ID0gbGFiZWw7CiAgICAgICAgbGFiZWxTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgcmV0dXJuIGxhYmVsOwogICAgICBjYXNlIFRhZy5CcmVha1N0YXRlbWVudDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIGludCBpbmRleCA9IHJlYWRVSW50KCk7CiAgICAgICAgcmV0dXJuIG5ldyBCcmVha1N0YXRlbWVudChsYWJlbFN0YWNrW2xhYmVsU3RhY2tCYXNlICsgaW5kZXhdKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5XaGlsZVN0YXRlbWVudDoKICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgV2hpbGVTdGF0ZW1lbnQocmVhZEV4cHJlc3Npb24oKSwgcmVhZFN0YXRlbWVudCgpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Eb1N0YXRlbWVudDoKICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHJldHVybiBuZXcgRG9TdGF0ZW1lbnQocmVhZFN0YXRlbWVudCgpLCByZWFkRXhwcmVzc2lvbigpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5Gb3JTdGF0ZW1lbnQ6CiAgICAgICAgaW50IHZhcmlhYmxlU3RhY2tIZWlnaHQgPSB2YXJpYWJsZVN0YWNrLmxlbmd0aDsKICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHZhciB2YXJpYWJsZXMgPSByZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7CiAgICAgICAgdmFyIGNvbmRpdGlvbiA9IHJlYWRFeHByZXNzaW9uT3B0aW9uKCk7CiAgICAgICAgdmFyIHVwZGF0ZXMgPSByZWFkRXhwcmVzc2lvbkxpc3QoKTsKICAgICAgICB2YXIgYm9keSA9IHJlYWRTdGF0ZW1lbnQoKTsKICAgICAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IHZhcmlhYmxlU3RhY2tIZWlnaHQ7CiAgICAgICAgcmV0dXJuIG5ldyBGb3JTdGF0ZW1lbnQodmFyaWFibGVzLCBjb25kaXRpb24sIHVwZGF0ZXMsIGJvZHkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkZvckluU3RhdGVtZW50OgogICAgICBjYXNlIFRhZy5Bc3luY0ZvckluU3RhdGVtZW50OgogICAgICAgIGJvb2wgaXNBc3luYyA9IHRhZyA9PSBUYWcuQXN5bmNGb3JJblN0YXRlbWVudDsKICAgICAgICBpbnQgdmFyaWFibGVTdGFja0hlaWdodCA9IHZhcmlhYmxlU3RhY2subGVuZ3RoOwogICAgICAgIHZhciBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgdmFyIGJvZHlPZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgdmFyIHZhcmlhYmxlID0gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uKCk7CiAgICAgICAgdmFyIGl0ZXJhYmxlID0gcmVhZEV4cHJlc3Npb24oKTsKICAgICAgICB2YXIgYm9keSA9IHJlYWRTdGF0ZW1lbnQoKTsKICAgICAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IHZhcmlhYmxlU3RhY2tIZWlnaHQ7CiAgICAgICAgcmV0dXJuIG5ldyBGb3JJblN0YXRlbWVudCh2YXJpYWJsZSwgaXRlcmFibGUsIGJvZHksIGlzQXN5bmM6IGlzQXN5bmMpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQKICAgICAgICAgIC4uYm9keU9mZnNldCA9IGJvZHlPZmZzZXQ7CiAgICAgIGNhc2UgVGFnLlN3aXRjaFN0YXRlbWVudDoKICAgICAgICB2YXIgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIHZhciBleHByZXNzaW9uID0gcmVhZEV4cHJlc3Npb24oKTsKICAgICAgICBpbnQgY291bnQgPSByZWFkVUludCgpOwogICAgICAgIExpc3Q8U3dpdGNoQ2FzZT4gY2FzZXMgPQogICAgICAgICAgICBuZXcgTGlzdDxTd2l0Y2hDYXNlPi5maWxsZWQoY291bnQsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgIGNhc2VzW2ldID0gbmV3IFN3aXRjaENhc2UuZW1wdHkoKTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoQ2FzZVN0YWNrLmFkZEFsbChjYXNlcyk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYXNlcy5sZW5ndGg7ICsraSkgewogICAgICAgICAgcmVhZFN3aXRjaENhc2VJbnRvKGNhc2VzW2ldKTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoQ2FzZVN0YWNrLmxlbmd0aCAtPSBjb3VudDsKICAgICAgICByZXR1cm4gbmV3IFN3aXRjaFN0YXRlbWVudChleHByZXNzaW9uLCBjYXNlcykuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLkNvbnRpbnVlU3dpdGNoU3RhdGVtZW50OgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgaW50IGluZGV4ID0gcmVhZFVJbnQoKTsKICAgICAgICByZXR1cm4gbmV3IENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KHN3aXRjaENhc2VTdGFja1tpbmRleF0pCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGNhc2UgVGFnLklmU3RhdGVtZW50OgogICAgICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICAgICAgcmV0dXJuIG5ldyBJZlN0YXRlbWVudCgKICAgICAgICAgICAgcmVhZEV4cHJlc3Npb24oKSwgcmVhZFN0YXRlbWVudCgpLCByZWFkU3RhdGVtZW50T3JOdWxsSWZFbXB0eSgpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjYXNlIFRhZy5SZXR1cm5TdGF0ZW1lbnQ6CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICByZXR1cm4gbmV3IFJldHVyblN0YXRlbWVudChyZWFkRXhwcmVzc2lvbk9wdGlvbigpKS4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuVHJ5Q2F0Y2g6CiAgICAgICAgU3RhdGVtZW50IGJvZHkgPSByZWFkU3RhdGVtZW50KCk7CiAgICAgICAgaW50IGZsYWdzID0gcmVhZEJ5dGUoKTsKICAgICAgICByZXR1cm4gbmV3IFRyeUNhdGNoKGJvZHksIHJlYWRDYXRjaExpc3QoKSwgaXNTeW50aGV0aWM6IGZsYWdzICYgMiA9PSAyKTsKICAgICAgY2FzZSBUYWcuVHJ5RmluYWxseToKICAgICAgICByZXR1cm4gbmV3IFRyeUZpbmFsbHkocmVhZFN0YXRlbWVudCgpLCByZWFkU3RhdGVtZW50KCkpOwogICAgICBjYXNlIFRhZy5ZaWVsZFN0YXRlbWVudDoKICAgICAgICBpbnQgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgICAgIGludCBmbGFncyA9IHJlYWRCeXRlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBZaWVsZFN0YXRlbWVudChyZWFkRXhwcmVzc2lvbigpLAogICAgICAgICAgICBpc1lpZWxkU3RhcjogZmxhZ3MgJiBZaWVsZFN0YXRlbWVudC5GbGFnWWllbGRTdGFyICE9IDAsCiAgICAgICAgICAgIGlzTmF0aXZlOiBmbGFncyAmIFlpZWxkU3RhdGVtZW50LkZsYWdOYXRpdmUgIT0gMCkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgY2FzZSBUYWcuVmFyaWFibGVEZWNsYXJhdGlvbjoKICAgICAgICB2YXIgdmFyaWFibGUgPSByZWFkVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgICAgIHZhcmlhYmxlU3RhY2suYWRkKHZhcmlhYmxlKTsgLy8gV2lsbCBiZSBwb3BwZWQgYnkgdGhlIGVuY2xvc2luZyBzY29wZS4KICAgICAgICByZXR1cm4gdmFyaWFibGU7CiAgICAgIGNhc2UgVGFnLkZ1bmN0aW9uRGVjbGFyYXRpb246CiAgICAgICAgaW50IG9mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgICAgICB2YXIgdmFyaWFibGUgPSByZWFkVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgICAgIHZhcmlhYmxlU3RhY2suYWRkKHZhcmlhYmxlKTsgLy8gV2lsbCBiZSBwb3BwZWQgYnkgdGhlIGVuY2xvc2luZyBzY29wZS4KICAgICAgICB2YXIgZnVuY3Rpb24gPSByZWFkRnVuY3Rpb25Ob2RlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbkRlY2xhcmF0aW9uKHZhcmlhYmxlLCBmdW5jdGlvbikuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgZmFpbCgndW5leHBlY3RlZCBzdGF0ZW1lbnQgdGFnOiAkdGFnJyk7CiAgICB9CiAgfQoKICB2b2lkIHJlYWRTd2l0Y2hDYXNlSW50byhTd2l0Y2hDYXNlIGNhc2VOb2RlKSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIGNhc2VOb2RlLmV4cHJlc3Npb25zLmxlbmd0aCA9IGxlbmd0aDsKICAgIGNhc2VOb2RlLmV4cHJlc3Npb25PZmZzZXRzLmxlbmd0aCA9IGxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgY2FzZU5vZGUuZXhwcmVzc2lvbk9mZnNldHNbaV0gPSByZWFkT2Zmc2V0KCk7CiAgICAgIGNhc2VOb2RlLmV4cHJlc3Npb25zW2ldID0gcmVhZEV4cHJlc3Npb24oKS4ucGFyZW50ID0gY2FzZU5vZGU7CiAgICB9CiAgICBjYXNlTm9kZS5pc0RlZmF1bHQgPSByZWFkQnl0ZSgpID09IDE7CiAgICBjYXNlTm9kZS5ib2R5ID0gcmVhZFN0YXRlbWVudCgpLi5wYXJlbnQgPSBjYXNlTm9kZTsKICB9CgogIExpc3Q8Q2F0Y2g+IHJlYWRDYXRjaExpc3QoKSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIExpc3Q8Q2F0Y2g+IHJlc3VsdCA9IG5ldyBMaXN0PENhdGNoPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWRDYXRjaCgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIENhdGNoIHJlYWRDYXRjaCgpIHsKICAgIGludCB2YXJpYWJsZVN0YWNrSGVpZ2h0ID0gdmFyaWFibGVTdGFjay5sZW5ndGg7CiAgICB2YXIgb2Zmc2V0ID0gcmVhZE9mZnNldCgpOwogICAgdmFyIGd1YXJkID0gcmVhZERhcnRUeXBlKCk7CiAgICB2YXIgZXhjZXB0aW9uID0gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uT3B0aW9uKCk7CiAgICB2YXIgc3RhY2tUcmFjZSA9IHJlYWRBbmRQdXNoVmFyaWFibGVEZWNsYXJhdGlvbk9wdGlvbigpOwogICAgdmFyIGJvZHkgPSByZWFkU3RhdGVtZW50KCk7CiAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IHZhcmlhYmxlU3RhY2tIZWlnaHQ7CiAgICByZXR1cm4gbmV3IENhdGNoKGV4Y2VwdGlvbiwgYm9keSwgZ3VhcmQ6IGd1YXJkLCBzdGFja1RyYWNlOiBzdGFja1RyYWNlKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgfQoKICBCbG9jayByZWFkQmxvY2soKSB7CiAgICBpbnQgc3RhY2tIZWlnaHQgPSB2YXJpYWJsZVN0YWNrLmxlbmd0aDsKICAgIHZhciBib2R5ID0gcmVhZFN0YXRlbWVudExpc3QoKTsKICAgIHZhcmlhYmxlU3RhY2subGVuZ3RoID0gc3RhY2tIZWlnaHQ7CiAgICByZXR1cm4gbmV3IEJsb2NrKGJvZHkpOwogIH0KCiAgQXNzZXJ0QmxvY2sgcmVhZEFzc2VydEJsb2NrKCkgewogICAgaW50IHN0YWNrSGVpZ2h0ID0gdmFyaWFibGVTdGFjay5sZW5ndGg7CiAgICB2YXIgYm9keSA9IHJlYWRTdGF0ZW1lbnRMaXN0KCk7CiAgICB2YXJpYWJsZVN0YWNrLmxlbmd0aCA9IHN0YWNrSGVpZ2h0OwogICAgcmV0dXJuIG5ldyBBc3NlcnRCbG9jayhib2R5KTsKICB9CgogIFN1cGVydHlwZSByZWFkU3VwZXJ0eXBlKCkgewogICAgSW50ZXJmYWNlVHlwZSB0eXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICByZXR1cm4gbmV3IFN1cGVydHlwZS5ieVJlZmVyZW5jZSh0eXBlLmNsYXNzTmFtZSwgdHlwZS50eXBlQXJndW1lbnRzKTsKICB9CgogIFN1cGVydHlwZSByZWFkU3VwZXJ0eXBlT3B0aW9uKCkgewogICAgcmV0dXJuIHJlYWRBbmRDaGVja09wdGlvblRhZygpID8gcmVhZFN1cGVydHlwZSgpIDogbnVsbDsKICB9CgogIExpc3Q8U3VwZXJ0eXBlPiByZWFkU3VwZXJ0eXBlTGlzdCgpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgTGlzdDxTdXBlcnR5cGU+IHJlc3VsdCA9CiAgICAgICAgbmV3IExpc3Q8U3VwZXJ0eXBlPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWRTdXBlcnR5cGUoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBMaXN0PERhcnRUeXBlPiByZWFkRGFydFR5cGVMaXN0KCkgewogICAgaW50IGxlbmd0aCA9IHJlYWRVSW50KCk7CiAgICBMaXN0PERhcnRUeXBlPiByZXN1bHQgPQogICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWREYXJ0VHlwZSgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIExpc3Q8TmFtZWRUeXBlPiByZWFkTmFtZWRUeXBlTGlzdCgpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgTGlzdDxOYW1lZFR5cGU+IHJlc3VsdCA9CiAgICAgICAgbmV3IExpc3Q8TmFtZWRUeXBlPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWROYW1lZFR5cGUoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBOYW1lZFR5cGUgcmVhZE5hbWVkVHlwZSgpIHsKICAgIHJldHVybiBuZXcgTmFtZWRUeXBlKHJlYWRTdHJpbmdSZWZlcmVuY2UoKSwgcmVhZERhcnRUeXBlKCkpOwogIH0KCiAgRGFydFR5cGUgcmVhZERhcnRUeXBlT3B0aW9uKCkgewogICAgcmV0dXJuIHJlYWRBbmRDaGVja09wdGlvblRhZygpID8gcmVhZERhcnRUeXBlKCkgOiBudWxsOwogIH0KCiAgRGFydFR5cGUgcmVhZERhcnRUeXBlKCkgewogICAgaW50IHRhZyA9IHJlYWRCeXRlKCk7CiAgICBzd2l0Y2ggKHRhZykgewogICAgICBjYXNlIFRhZy5UeXBlZGVmVHlwZToKICAgICAgICBpbnQgbnVsbGFiaWxpdHlJbmRleCA9IHJlYWRCeXRlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBUeXBlZGVmVHlwZS5ieVJlZmVyZW5jZShyZWFkVHlwZWRlZlJlZmVyZW5jZSgpLAogICAgICAgICAgICByZWFkRGFydFR5cGVMaXN0KCksIE51bGxhYmlsaXR5LnZhbHVlc1tudWxsYWJpbGl0eUluZGV4XSk7CiAgICAgIGNhc2UgVGFnLkJvdHRvbVR5cGU6CiAgICAgICAgcmV0dXJuIGNvbnN0IEJvdHRvbVR5cGUoKTsKICAgICAgY2FzZSBUYWcuSW52YWxpZFR5cGU6CiAgICAgICAgcmV0dXJuIGNvbnN0IEludmFsaWRUeXBlKCk7CiAgICAgIGNhc2UgVGFnLkR5bmFtaWNUeXBlOgogICAgICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICBjYXNlIFRhZy5Wb2lkVHlwZToKICAgICAgICByZXR1cm4gY29uc3QgVm9pZFR5cGUoKTsKICAgICAgY2FzZSBUYWcuSW50ZXJmYWNlVHlwZToKICAgICAgICBpbnQgbnVsbGFiaWxpdHlJbmRleCA9IHJlYWRCeXRlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlLmJ5UmVmZXJlbmNlKHJlYWRDbGFzc1JlZmVyZW5jZSgpLAogICAgICAgICAgICByZWFkRGFydFR5cGVMaXN0KCksIE51bGxhYmlsaXR5LnZhbHVlc1tudWxsYWJpbGl0eUluZGV4XSk7CiAgICAgIGNhc2UgVGFnLlNpbXBsZUludGVyZmFjZVR5cGU6CiAgICAgICAgaW50IG51bGxhYmlsaXR5SW5kZXggPSByZWFkQnl0ZSgpOwogICAgICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZS5ieVJlZmVyZW5jZShyZWFkQ2xhc3NSZWZlcmVuY2UoKSwKICAgICAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLCBOdWxsYWJpbGl0eS52YWx1ZXNbbnVsbGFiaWxpdHlJbmRleF0pOwogICAgICBjYXNlIFRhZy5GdW5jdGlvblR5cGU6CiAgICAgICAgaW50IHR5cGVQYXJhbWV0ZXJTdGFja0hlaWdodCA9IHR5cGVQYXJhbWV0ZXJTdGFjay5sZW5ndGg7CiAgICAgICAgaW50IG51bGxhYmlsaXR5SW5kZXggPSByZWFkQnl0ZSgpOwogICAgICAgIHZhciB0eXBlUGFyYW1ldGVycyA9IHJlYWRBbmRQdXNoVHlwZVBhcmFtZXRlckxpc3QoKTsKICAgICAgICB2YXIgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA9IHJlYWRVSW50KCk7CiAgICAgICAgdmFyIHRvdGFsUGFyYW1ldGVyQ291bnQgPSByZWFkVUludCgpOwogICAgICAgIHZhciBwb3NpdGlvbmFsID0gcmVhZERhcnRUeXBlTGlzdCgpOwogICAgICAgIHZhciBuYW1lZCA9IHJlYWROYW1lZFR5cGVMaXN0KCk7CiAgICAgICAgdmFyIHR5cGVkZWZUeXBlID0gcmVhZERhcnRUeXBlT3B0aW9uKCk7CiAgICAgICAgYXNzZXJ0KHBvc2l0aW9uYWwubGVuZ3RoICsgbmFtZWQubGVuZ3RoID09IHRvdGFsUGFyYW1ldGVyQ291bnQpOwogICAgICAgIHZhciByZXR1cm5UeXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgdHlwZVBhcmFtZXRlclN0YWNrLmxlbmd0aCA9IHR5cGVQYXJhbWV0ZXJTdGFja0hlaWdodDsKICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZShwb3NpdGlvbmFsLCByZXR1cm5UeXBlLAogICAgICAgICAgICB0eXBlUGFyYW1ldGVyczogdHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgICAgIG5hbWVkUGFyYW1ldGVyczogbmFtZWQsCiAgICAgICAgICAgIHR5cGVkZWZUeXBlOiB0eXBlZGVmVHlwZSwKICAgICAgICAgICAgbnVsbGFiaWxpdHk6IE51bGxhYmlsaXR5LnZhbHVlc1tudWxsYWJpbGl0eUluZGV4XSk7CiAgICAgIGNhc2UgVGFnLlNpbXBsZUZ1bmN0aW9uVHlwZToKICAgICAgICBpbnQgbnVsbGFiaWxpdHlJbmRleCA9IHJlYWRCeXRlKCk7CiAgICAgICAgdmFyIHBvc2l0aW9uYWwgPSByZWFkRGFydFR5cGVMaXN0KCk7CiAgICAgICAgdmFyIHJldHVyblR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZShwb3NpdGlvbmFsLCByZXR1cm5UeXBlLAogICAgICAgICAgICBudWxsYWJpbGl0eTogTnVsbGFiaWxpdHkudmFsdWVzW251bGxhYmlsaXR5SW5kZXhdKTsKICAgICAgY2FzZSBUYWcuVHlwZVBhcmFtZXRlclR5cGU6CiAgICAgICAgaW50IGRlY2xhcmVkTnVsbGFiaWxpdHlJbmRleCA9IHJlYWRCeXRlKCk7CiAgICAgICAgaW50IGluZGV4ID0gcmVhZFVJbnQoKTsKICAgICAgICB2YXIgYm91bmQgPSByZWFkRGFydFR5cGVPcHRpb24oKTsKICAgICAgICByZXR1cm4gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKHR5cGVQYXJhbWV0ZXJTdGFja1tpbmRleF0sIGJvdW5kLAogICAgICAgICAgICBOdWxsYWJpbGl0eS52YWx1ZXNbZGVjbGFyZWROdWxsYWJpbGl0eUluZGV4XSk7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgZmFpbCgndW5leHBlY3RlZCBkYXJ0IHR5cGUgdGFnOiAkdGFnJyk7CiAgICB9CiAgfQoKICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHJlYWRBbmRQdXNoVHlwZVBhcmFtZXRlckxpc3QoCiAgICAgIFtMaXN0PFR5cGVQYXJhbWV0ZXI+IGxpc3QsIFRyZWVOb2RlIHBhcmVudF0pIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gbGlzdCA/PyA8VHlwZVBhcmFtZXRlcj5bXTsKICAgIGlmIChsaXN0ID09IG51bGwpIHsKICAgICAgbGlzdCA9IG5ldyBMaXN0PFR5cGVQYXJhbWV0ZXI+LmZpbGxlZChsZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgIGxpc3RbaV0gPSBuZXcgVHlwZVBhcmFtZXRlcihudWxsLCBudWxsKS4ucGFyZW50ID0gcGFyZW50OwogICAgICB9CiAgICB9IGVsc2UgaWYgKGxpc3QubGVuZ3RoICE9IGxlbmd0aCkgewogICAgICBsaXN0Lmxlbmd0aCA9IGxlbmd0aDsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgIGxpc3RbaV0gPSBuZXcgVHlwZVBhcmFtZXRlcihudWxsLCBudWxsKS4ucGFyZW50ID0gcGFyZW50OwogICAgICB9CiAgICB9CiAgICB0eXBlUGFyYW1ldGVyU3RhY2suYWRkQWxsKGxpc3QpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7CiAgICAgIHJlYWRUeXBlUGFyYW1ldGVyKGxpc3RbaV0pOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICB2b2lkIHJlYWRUeXBlUGFyYW1ldGVyKFR5cGVQYXJhbWV0ZXIgbm9kZSkgewogICAgbm9kZS5mbGFncyA9IHJlYWRCeXRlKCk7CiAgICBub2RlLmFubm90YXRpb25zID0gcmVhZEFubm90YXRpb25MaXN0KG5vZGUpOwogICAgbm9kZS5uYW1lID0gcmVhZFN0cmluZ09yTnVsbElmRW1wdHkoKTsKICAgIG5vZGUuYm91bmQgPSByZWFkRGFydFR5cGUoKTsKICAgIG5vZGUuZGVmYXVsdFR5cGUgPSByZWFkRGFydFR5cGVPcHRpb24oKTsKICB9CgogIEFyZ3VtZW50cyByZWFkQXJndW1lbnRzKCkgewogICAgdmFyIG51bUFyZ3VtZW50cyA9IHJlYWRVSW50KCk7CiAgICB2YXIgdHlwZUFyZ3VtZW50cyA9IHJlYWREYXJ0VHlwZUxpc3QoKTsKICAgIHZhciBwb3NpdGlvbmFsID0gcmVhZEV4cHJlc3Npb25MaXN0KCk7CiAgICB2YXIgbmFtZWQgPSByZWFkTmFtZWRFeHByZXNzaW9uTGlzdCgpOwogICAgYXNzZXJ0KG51bUFyZ3VtZW50cyA9PSBwb3NpdGlvbmFsLmxlbmd0aCArIG5hbWVkLmxlbmd0aCk7CiAgICByZXR1cm4gbmV3IEFyZ3VtZW50cyhwb3NpdGlvbmFsLCB0eXBlczogdHlwZUFyZ3VtZW50cywgbmFtZWQ6IG5hbWVkKTsKICB9CgogIExpc3Q8TmFtZWRFeHByZXNzaW9uPiByZWFkTmFtZWRFeHByZXNzaW9uTGlzdCgpIHsKICAgIGludCBsZW5ndGggPSByZWFkVUludCgpOwogICAgTGlzdDxOYW1lZEV4cHJlc3Npb24+IHJlc3VsdCA9CiAgICAgICAgbmV3IExpc3Q8TmFtZWRFeHByZXNzaW9uPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWROYW1lZEV4cHJlc3Npb24oKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBOYW1lZEV4cHJlc3Npb24gcmVhZE5hbWVkRXhwcmVzc2lvbigpIHsKICAgIHJldHVybiBuZXcgTmFtZWRFeHByZXNzaW9uKHJlYWRTdHJpbmdSZWZlcmVuY2UoKSwgcmVhZEV4cHJlc3Npb24oKSk7CiAgfQoKICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHJlYWRBbmRQdXNoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoKSB7CiAgICBpbnQgbGVuZ3RoID0gcmVhZFVJbnQoKTsKICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPi5maWxsZWQobGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IHJlYWRBbmRQdXNoVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uT3B0aW9uKCkgewogICAgcmV0dXJuIHJlYWRBbmRDaGVja09wdGlvblRhZygpID8gcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9uKCkgOiBudWxsOwogIH0KCiAgVmFyaWFibGVEZWNsYXJhdGlvbiByZWFkQW5kUHVzaFZhcmlhYmxlRGVjbGFyYXRpb24oKSB7CiAgICB2YXIgdmFyaWFibGUgPSByZWFkVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgdmFyaWFibGVTdGFjay5hZGQodmFyaWFibGUpOwogICAgcmV0dXJuIHZhcmlhYmxlOwogIH0KCiAgVmFyaWFibGVEZWNsYXJhdGlvbiByZWFkVmFyaWFibGVEZWNsYXJhdGlvbigpIHsKICAgIGludCBvZmZzZXQgPSByZWFkT2Zmc2V0KCk7CiAgICBpbnQgZmlsZUVxdWFsc09mZnNldCA9IHJlYWRPZmZzZXQoKTsKICAgIC8vIFRoZSBbVmFyaWFibGVEZWNsYXJhdGlvbl0gaW5zdGFuY2UgaXMgbm90IGNyZWF0ZWQgYXQgdGhpcyBwb2ludCB5ZXQsCiAgICAvLyBzbyBgbnVsbGAgaXMgdGVtcG9yYXJpbHkgc2V0IGFzIHRoZSBwYXJlbnQgb2YgdGhlIGFubm90YXRpb24gbm9kZXMuCiAgICB2YXIgYW5ub3RhdGlvbnMgPSByZWFkQW5ub3RhdGlvbkxpc3QobnVsbCk7CiAgICBpbnQgZmxhZ3MgPSByZWFkQnl0ZSgpOwogICAgdmFyIG5vZGUgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbihyZWFkU3RyaW5nT3JOdWxsSWZFbXB0eSgpLAogICAgICAgIHR5cGU6IHJlYWREYXJ0VHlwZSgpLCBpbml0aWFsaXplcjogcmVhZEV4cHJlc3Npb25PcHRpb24oKSwgZmxhZ3M6IGZsYWdzKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQKICAgICAgLi5maWxlRXF1YWxzT2Zmc2V0ID0gZmlsZUVxdWFsc09mZnNldDsKICAgIGlmIChhbm5vdGF0aW9ucy5pc05vdEVtcHR5KSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYW5ub3RhdGlvbnMubGVuZ3RoOyArK2kpIHsKICAgICAgICB2YXIgYW5ub3RhdGlvbiA9IGFubm90YXRpb25zW2ldOwogICAgICAgIGFubm90YXRpb24ucGFyZW50ID0gbm9kZTsKICAgICAgfQogICAgICBub2RlLmFubm90YXRpb25zID0gYW5ub3RhdGlvbnM7CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIGludCByZWFkT2Zmc2V0KCkgewogICAgLy8gT2Zmc2V0IGlzIHNhdmVkIGFzIHVuc2lnbmVkLAogICAgLy8gYnV0IGFjdHVhbGx5IHJhbmdlcyBmcm9tIC0xIGFuZCB1cCAodGh1cyB0aGUgLTEpCiAgICByZXR1cm4gcmVhZFVJbnQoKSAtIDE7CiAgfQp9CgpjbGFzcyBCaW5hcnlCdWlsZGVyV2l0aE1ldGFkYXRhIGV4dGVuZHMgQmluYXJ5QnVpbGRlciBpbXBsZW1lbnRzIEJpbmFyeVNvdXJjZSB7CiAgLy8vIExpc3Qgb2YgbWV0YWRhdGEgc3Vic2VjdGlvbnMgdGhhdCBoYXZlIGNvcnJlc3BvbmRpbmcgW01ldGFkYXRhUmVwb3NpdG9yeV0KICAvLy8gYW5kIGFyZSBhd2FpdGluZyB0byBiZSBwYXJzZWQgYW5kIGF0dGFjaGVkIHRvIG5vZGVzLgogIExpc3Q8X01ldGFkYXRhU3Vic2VjdGlvbj4gX3N1YnNlY3Rpb25zOwoKICBCaW5hcnlCdWlsZGVyV2l0aE1ldGFkYXRhKGJ5dGVzLCBbZmlsZW5hbWVdKQogICAgICA6IHN1cGVyKGJ5dGVzLCBmaWxlbmFtZTogZmlsZW5hbWUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIF9yZWFkTWV0YWRhdGFNYXBwaW5ncygKICAgICAgQ29tcG9uZW50IGNvbXBvbmVudCwgaW50IGJpbmFyeU9mZnNldEZvck1ldGFkYXRhUGF5bG9hZHMpIHsKICAgIC8vIEF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmdW5jdGlvbiBfYnl0ZU9mZnNldCBwb2ludHMgcmlnaHQgcGFzdAogICAgLy8gbWV0YWRhdGFNYXBwaW5ncyB0byBzdHJpbmcgdGFibGUuCgogICAgLy8gUmVhZCB0aGUgbGVuZ3RoIG9mIG1ldGFkYXRhTWFwcGluZ3MuCiAgICBfYnl0ZU9mZnNldCAtPSA0OwogICAgZmluYWwgc3ViU2VjdGlvbkNvdW50ID0gcmVhZFVpbnQzMigpOwoKICAgIGludCBlbmRPZmZzZXQgPSBfYnl0ZU9mZnNldCAtIDQ7IC8vIEVuZCBvZmZzZXQgb2YgdGhlIGN1cnJlbnQgc3Vic2VjdGlvbi4KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ViU2VjdGlvbkNvdW50OyBpKyspIHsKICAgICAgLy8gUkxpc3Q8UGFpcjxVSW50MzIsIFVJbnQzMj4+IG5vZGVPZmZzZXRUb01ldGFkYXRhT2Zmc2V0CiAgICAgIF9ieXRlT2Zmc2V0ID0gZW5kT2Zmc2V0IC0gNDsKICAgICAgZmluYWwgbWFwcGluZ0xlbmd0aCA9IHJlYWRVaW50MzIoKTsKICAgICAgZmluYWwgbWFwcGluZ1N0YXJ0ID0gKGVuZE9mZnNldCAtIDQpIC0gNCAqIDIgKiBtYXBwaW5nTGVuZ3RoOwogICAgICBfYnl0ZU9mZnNldCA9IG1hcHBpbmdTdGFydCAtIDQ7CgogICAgICAvLyBVSW50MzIgdGFnIChmaXhlZCBzaXplIFN0cmluZ1JlZmVyZW5jZSkKICAgICAgZmluYWwgdGFnID0gX3N0cmluZ1RhYmxlW3JlYWRVaW50MzIoKV07CgogICAgICBmaW5hbCByZXBvc2l0b3J5ID0gY29tcG9uZW50Lm1ldGFkYXRhW3RhZ107CiAgICAgIGlmIChyZXBvc2l0b3J5ICE9IG51bGwpIHsKICAgICAgICAvLyBSZWFkIG5vZGVPZmZzZXRUb01ldGFkYXRhT2Zmc2V0IG1hcHBpbmcuCiAgICAgICAgZmluYWwgbWFwcGluZyA9IDxpbnQsIGludD57fTsKICAgICAgICBfYnl0ZU9mZnNldCA9IG1hcHBpbmdTdGFydDsKICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG1hcHBpbmdMZW5ndGg7IGorKykgewogICAgICAgICAgZmluYWwgbm9kZU9mZnNldCA9IHJlYWRVaW50MzIoKTsKICAgICAgICAgIGZpbmFsIG1ldGFkYXRhT2Zmc2V0ID0gYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFQYXlsb2FkcyArIHJlYWRVaW50MzIoKTsKICAgICAgICAgIG1hcHBpbmdbbm9kZU9mZnNldF0gPSBtZXRhZGF0YU9mZnNldDsKICAgICAgICB9CgogICAgICAgIF9zdWJzZWN0aW9ucyA/Pz0gPF9NZXRhZGF0YVN1YnNlY3Rpb24+W107CiAgICAgICAgX3N1YnNlY3Rpb25zLmFkZChuZXcgX01ldGFkYXRhU3Vic2VjdGlvbihyZXBvc2l0b3J5LCBtYXBwaW5nKSk7CiAgICAgIH0KCiAgICAgIC8vIFN0YXJ0IG9mIHRoZSBzdWJzZWN0aW9uIGFuZCB0aGUgZW5kIG9mIHRoZSBwcmV2aW91cyBvbmUuCiAgICAgIGVuZE9mZnNldCA9IG1hcHBpbmdTdGFydCAtIDQ7CiAgICB9CiAgfQoKICBPYmplY3QgX3JlYWRNZXRhZGF0YShOb2RlIG5vZGUsIE1ldGFkYXRhUmVwb3NpdG9yeSByZXBvc2l0b3J5LCBpbnQgb2Zmc2V0KSB7CiAgICBmaW5hbCBpbnQgc2F2ZWRPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIF9ieXRlT2Zmc2V0ID0gb2Zmc2V0OwoKICAgIGZpbmFsIG1ldGFkYXRhID0gcmVwb3NpdG9yeS5yZWFkRnJvbUJpbmFyeShub2RlLCB0aGlzKTsKCiAgICBfYnl0ZU9mZnNldCA9IHNhdmVkT2Zmc2V0OwogICAgcmV0dXJuIG1ldGFkYXRhOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbnRlclNjb3BlKHtMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzfSkgewogICAgaWYgKHR5cGVQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgdHlwZVBhcmFtZXRlclN0YWNrLmFkZEFsbCh0eXBlUGFyYW1ldGVycyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGxlYXZlU2NvcGUoe0xpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnN9KSB7CiAgICBpZiAodHlwZVBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICB0eXBlUGFyYW1ldGVyU3RhY2subGVuZ3RoIC09IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIE5vZGUgX2Fzc29jaWF0ZU1ldGFkYXRhKE5vZGUgbm9kZSwgaW50IG5vZGVPZmZzZXQpIHsKICAgIGlmIChfc3Vic2VjdGlvbnMgPT0gbnVsbCkgewogICAgICByZXR1cm4gbm9kZTsKICAgIH0KCiAgICBmb3IgKHZhciBzdWJzZWN0aW9uIGluIF9zdWJzZWN0aW9ucykgewogICAgICAvLyBGaXJzdCBjaGVjayBpZiB0aGVyZSBpcyBhbnkgbWV0YWRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbm9kZS4KICAgICAgZmluYWwgbWV0YWRhdGFPZmZzZXQgPSBzdWJzZWN0aW9uLm1hcHBpbmdbbm9kZU9mZnNldF07CiAgICAgIGlmIChtZXRhZGF0YU9mZnNldCAhPSBudWxsKSB7CiAgICAgICAgc3Vic2VjdGlvbi5yZXBvc2l0b3J5Lm1hcHBpbmdbbm9kZV0gPQogICAgICAgICAgICBfcmVhZE1ldGFkYXRhKG5vZGUsIHN1YnNlY3Rpb24ucmVwb3NpdG9yeSwgbWV0YWRhdGFPZmZzZXQpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSByZWFkRGFydFR5cGUoKSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkRGFydFR5cGUoKTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIExpYnJhcnkgcmVhZExpYnJhcnkoQ29tcG9uZW50IGNvbXBvbmVudCwgaW50IGVuZE9mZnNldCkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZExpYnJhcnkoY29tcG9uZW50LCBlbmRPZmZzZXQpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZWRlZiByZWFkVHlwZWRlZigpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWRUeXBlZGVmKCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzcyByZWFkQ2xhc3MoaW50IGVuZE9mZnNldCkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZENsYXNzKGVuZE9mZnNldCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBGaWVsZCByZWFkRmllbGQoKSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkRmllbGQoKTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yIHJlYWRDb25zdHJ1Y3RvcigpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWRDb25zdHJ1Y3RvcigpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgUHJvY2VkdXJlIHJlYWRQcm9jZWR1cmUoaW50IGVuZE9mZnNldCkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZFByb2NlZHVyZShlbmRPZmZzZXQpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IgcmVhZFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKCkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yKCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplciByZWFkSW5pdGlhbGl6ZXIoKSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkSW5pdGlhbGl6ZXIoKTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uTm9kZSByZWFkRnVuY3Rpb25Ob2RlKAogICAgICB7Ym9vbCBsYXp5TG9hZEJvZHk6IGZhbHNlLCBpbnQgb3V0ZXJFbmRPZmZzZXQ6IC0xfSkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZEZ1bmN0aW9uTm9kZSgKICAgICAgICBsYXp5TG9hZEJvZHk6IGxhenlMb2FkQm9keSwgb3V0ZXJFbmRPZmZzZXQ6IG91dGVyRW5kT2Zmc2V0KTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gcmVhZEV4cHJlc3Npb24oKSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkRXhwcmVzc2lvbigpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQXJndW1lbnRzIHJlYWRBcmd1bWVudHMoKSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkQXJndW1lbnRzKCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYW1lZEV4cHJlc3Npb24gcmVhZE5hbWVkRXhwcmVzc2lvbigpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWROYW1lZEV4cHJlc3Npb24oKTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVhZFZhcmlhYmxlRGVjbGFyYXRpb24oKSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YShyZXN1bHQsIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RhdGVtZW50IHJlYWRTdGF0ZW1lbnQoKSB7CiAgICBmaW5hbCBub2RlT2Zmc2V0ID0gX2J5dGVPZmZzZXQ7CiAgICBmaW5hbCByZXN1bHQgPSBzdXBlci5yZWFkU3RhdGVtZW50KCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb21iaW5hdG9yIHJlYWRDb21iaW5hdG9yKCkgewogICAgZmluYWwgbm9kZU9mZnNldCA9IF9ieXRlT2Zmc2V0OwogICAgZmluYWwgcmVzdWx0ID0gc3VwZXIucmVhZENvbWJpbmF0b3IoKTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIExpYnJhcnlEZXBlbmRlbmN5IHJlYWRMaWJyYXJ5RGVwZW5kZW5jeShMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWRMaWJyYXJ5RGVwZW5kZW5jeShsaWJyYXJ5KTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIExpYnJhcnlQYXJ0IHJlYWRMaWJyYXJ5UGFydChMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWRMaWJyYXJ5UGFydChsaWJyYXJ5KTsKICAgIHJldHVybiBfYXNzb2NpYXRlTWV0YWRhdGEocmVzdWx0LCBub2RlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVhZFN3aXRjaENhc2VJbnRvKFN3aXRjaENhc2UgY2FzZU5vZGUpIHsKICAgIF9hc3NvY2lhdGVNZXRhZGF0YShjYXNlTm9kZSwgX2J5dGVPZmZzZXQpOwogICAgc3VwZXIucmVhZFN3aXRjaENhc2VJbnRvKGNhc2VOb2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVhZFR5cGVQYXJhbWV0ZXIoVHlwZVBhcmFtZXRlciBwYXJhbSkgewogICAgX2Fzc29jaWF0ZU1ldGFkYXRhKHBhcmFtLCBfYnl0ZU9mZnNldCk7CiAgICBzdXBlci5yZWFkVHlwZVBhcmFtZXRlcihwYXJhbSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdXBlcnR5cGUgcmVhZFN1cGVydHlwZSgpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIEludGVyZmFjZVR5cGUgdHlwZSA9IHN1cGVyLnJlYWREYXJ0VHlwZSgpOwogICAgcmV0dXJuIF9hc3NvY2lhdGVNZXRhZGF0YSgKICAgICAgICBuZXcgU3VwZXJ0eXBlLmJ5UmVmZXJlbmNlKHR5cGUuY2xhc3NOYW1lLCB0eXBlLnR5cGVBcmd1bWVudHMpLAogICAgICAgIG5vZGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgTmFtZSByZWFkTmFtZSgpIHsKICAgIGZpbmFsIG5vZGVPZmZzZXQgPSBfYnl0ZU9mZnNldDsKICAgIGZpbmFsIHJlc3VsdCA9IHN1cGVyLnJlYWROYW1lKCk7CiAgICByZXR1cm4gX2Fzc29jaWF0ZU1ldGFkYXRhKHJlc3VsdCwgbm9kZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGN1cnJlbnRPZmZzZXQgPT4gX2J5dGVPZmZzZXQ7CgogIEBvdmVycmlkZQogIExpc3Q8aW50PiBnZXQgYnl0ZXMgPT4gX2J5dGVzOwp9CgovLy8gRGVzZXJpYWxpemVkIE1ldGFkYXRhTWFwcGluZyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBtZXRhZGF0YSByZXBvc2l0b3J5LgpjbGFzcyBfTWV0YWRhdGFTdWJzZWN0aW9uIHsKICAvLy8gW01ldGFkYXRhUmVwb3NpdG9yeV0gdGhhdCBjYW4gcmVhZCB0aGlzIHN1YnNlY3Rpb24uCiAgZmluYWwgTWV0YWRhdGFSZXBvc2l0b3J5IHJlcG9zaXRvcnk7CgogIC8vLyBEZXNlcmlhbGl6ZWQgbWFwcGluZyBmcm9tIG5vZGUgb2Zmc2V0cyB0byBtZXRhZGF0YSBvZmZzZXRzLgogIGZpbmFsIE1hcDxpbnQsIGludD4gbWFwcGluZzsKCiAgX01ldGFkYXRhU3Vic2VjdGlvbih0aGlzLnJlcG9zaXRvcnksIHRoaXMubWFwcGluZyk7Cn0KiVAATk48IAEiFxoBFigTARMTERIPAUgBQgIBIhUBKwEWMzIEAgEbGAEkAgE5OgIBGCgBIiUnJyIkGxwUIAIBFktCGjtEGRoXMC05Ih0bIQFGKCcBMCgBUFAmJAEdFicnMk0BGR5RBAElASsBExscEhMjEjANEiUfHhYGBAEVIB0cFAQBOCABGD8oKCgoKCgoKB0EASQtOiESBAEdIgQBKVBHHy4nKysbGBUGKD8dITQGEwQBNR5COQQBKzc5EQQBLSYdMiciBicbGSc/IwYEAR0jKCdLBgQBJigbJSMlMiRIJzEnOidMTCQxMycvTSs4OjkKPSU2JydFKzAKOCQ2JydFKzAKNyk/Mi1QNi0KME40JTs9LApRNUwnQSslCkkoUTssLi4sODQGATkEASUjMB4VBAEbKAQBISUEASsdUScpBhMEASUoKwQBIRoeFCcTDTEGBAE5HTIcQyczBhEEARpPHRonKCkGBAFDHRonIxgGBAEqHScUBgQBT1EuBk1QIxxQK0sbMw1JSUYmMCNQOCQsCggGBAEvHTInKisTUS0GBAEhJyUfHh8mFz8IFx8GIyoEAUQGTh4GP09QRx4eJkUGIC4wBho3KSIGICpMHAYBHzMGBAE8Bj8yNykiBiAqHz4cBgQBUkIGTh4GRRo0KzdKOSctIipNHwoIOwYBHzMGBAE7RCI0KCknKCgqLSopT0UpJCc3GioVLUYODCQ6LEIOMC1JDgwKLAgGBAEuM0xKPSoxBiwEAT8mATQBOkcoUTxENEBWUzQxBgEnE08BJU5RLS4tLk5QLzhHBgEiARMEAU0pASQmRQYBLDQ2BgFRRAE0Ni8BPQQBRykBJCZFBgEsNDYGATciLzcGAVFEATQjATcjAUVHTQE6ATQ2LwE2GQEwMi07BgEVTy0BPQQBSCUdIhs/Jz4WBhQEAScfARIlNCcrIRE+IC0iNyEsOCMnCDEtEURNBgETJxQGGAQBLxwhIgQBPiEiBAE8QEQgRgQBNxwwBAE6LSZGBiEEATstJkcGIQQBTDgmRwYhBAElOQQBFCktQQ0dBgQBPBMnATEnJ0QBT0w4IzNCBjwBT1A4RS8+BiMBHDszASsrATY4JiUWBk8bEEw8Bh8tAUMmATcBGx1OGyEvBgEQURMKARsZRg0lBiclIE4BMykxESVKNi05ESkBMxwUBAEzHSonQAYEAT0jHCw/MCYuPiAaBAExKyU3QzsyCAYEASAiKyoEASodHkMnJAYTBAEsHSMnMwYEATE5LEQEARo2MiMlEwZMGDwGJiMpMT0fS0xHIx4bJBgeGAYRBAEjGh4BEycxJydETzI4M0IGIwE2MiElEwZMGEwGASYpJCccKy4zKxoGKjAQMhMKPSstG0INJAZEUAEzLTkOKT0/IywbGB4mIiYGAR0BEQQBJiMbEgQBRCcgBAEWGh42MiElEwZMGDQGJiMmHBswEDETCh8uOjMbJCoaGB4mGCYnMAYRBAEiGiQ2MiclEwZMGDoGJigjJhwbMBA3EwonPTgbUA0mBh46MxsuJCoaGB4mLzAGEQQBKxoiNjIlJRMGTBhEBiYoIyYgMBwbMBA1Ewo0QB9FIS0uMS5MOjMbLiQqGBoYHiYgH0QwLjQyAUJDBh0RBAFGGjY2MjklEwZMGEwGJiMmHBswEEsTCjEsPjkqLTQ7NjA6HBskKhoYHiYuMCw8LiQGEQQBIhooEyMpIS8mQichIy8pRiYhJyM3NCEhRyI3DzgGBAFPIxxIEAQBITwaJR8iPkI+OSotNDs2JSwBLjRGBgEOGSokBgExKDgqICAiKhwjARhLJQYBKDA6ARMEAUg/LTxMSDQeJSgiMR0nNAErJCoyPCgqQggHBAE/IQQBRyUEATAcKTcGIQQBLhUOFQ4VD0EGBAEqHR5DJyQGEwQBJj4EASAeNxIuExxCJUsiI0AhHCNJTiEnOiNJSxwjSUohJzojSUchHCMsUCEcI0lEISEjODE+ISEjODFQISIjMjUhIiMyRyEaI0AhGiMqNSEhI05DISYjODZPIScjN0YhISMxNBwhJiMxNBshJiM2NBwhKyM2NBshFCoiN0QmTTUkIz0hIiMrOyghISMrOighISMmKDo0ISEjOTsqTDQlOzUpCiZQMCgKQVAmIR0jQiEdIyBCIBseOSZATCMrIyweQR4wHCYdJxwiHjkcMB8lGCMzFiNBHCMrNTghISMrNTchGyMrNDghICMrNDchGyMmKDJEISAjJigyQyEgNiMjUBQyMCslLCggMC4mLEIeKzA9IyMoNUwPNwYEASYdHEEnIgYTBAEcPQQBKB0dQicjBhMEASsgIhMNEwYEASQ9BAEeGhMkOhYcHCIfJSA1MC4uITAfNiEWHyMgRiEfI0UhHCNCIR04Iz4wLCQ0RSEfJDc4Iyc5KSQ0TiAlICMrICFGKi0KJzEoCilMKCMgQyEcIyBNISAjURkqIFEbQR8jIDREPiEkMk8ZJCMyTytRDzYGBAExHSowJzRFBio4BAEgHU8nHwYTBAEWNB8gPD0gMEwdBAEWLCQoHAQBIiwkKCIEAR4pSgQBJD0EASgdHUInIwYTBAEmHRxBJyIGEwQBKB0dQicjBhMEAR5BBAEiPAQBHBoTHCtDRxsjHCQcJBkhHitDRyQrQ0cdQis9MS4tKTBJKT44LDwkJkAjKy0pOEAiMyAqRzsPNgYEATQ1HTcYSylCCCgcKUIIBiUsIgYRBAEvHTErIS0EAR4jLCsrPkoEATQdI0gnKQYTBAEqSQQBQx0nTCc0BhMEAT9OBAE5LiEVBAEyHylMSzAcQlEcLSI1KSIIJgYRBAEVJDgbBAIBUFA7KgEvKgEMHkJHKQEsFioBTjBAIypEJgExLgEyIDQmJDIrUTAKATJICAFCJAYEAU8pGgE8AR8VBAEMOiIxBgQBDDoiOgYEAQw3IBMGAStJPSQuSAgGAREEAQwcJCkzBAEMPCQ8MwQBDBokKDMEAQwjJC8zBAEMFiQmMwQBDCIkLDMEAQwrJDMzBAEMRiQ+MwQBDCIkLDMEAQwhPCQrRTMEAQwgJCszBAEMHiQqMwQBDCokMDMEAQwyJDQzBAEMHiQqMwQBDCAkKzMEAQw9JDkzBAEMMSQzMwQBDDEvKAQBDDAsJAQBDB4kLx9HFQQBDBQkJTMEAQwoAQwhAgFRHDonAUIfATYCASpwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X2Zyb21fYmluYXJ5LmRhcnQtc2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvdGV4dC9hc3RfdG9fdGV4dC5kYXJ0wAD1qS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLmFzdF90b190ZXh0OwoKaW1wb3J0ICdkYXJ0OmNvcmUnIGhpZGUgTWFwRW50cnk7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyBqc29uOwoKaW1wb3J0ICcuLi9hc3QuZGFydCc7CmltcG9ydCAnLi4vaW1wb3J0X3RhYmxlLmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgTmFtZXI8VD4gewogIGludCBpbmRleCA9IDA7CiAgZmluYWwgTWFwPFQsIFN0cmluZz4gbWFwID0gPFQsIFN0cmluZz57fTsKCiAgU3RyaW5nIGdldE5hbWUoVCBrZXkpID0+IG1hcC5wdXRJZkFic2VudChrZXksICgpID0+ICckcHJlZml4JHsrK2luZGV4fScpOwoKICBTdHJpbmcgZ2V0IHByZWZpeDsKfQoKY2xhc3MgTm9ybWFsTmFtZXI8VD4gZXh0ZW5kcyBOYW1lcjxUPiB7CiAgZmluYWwgU3RyaW5nIHByZWZpeDsKICBOb3JtYWxOYW1lcih0aGlzLnByZWZpeCk7Cn0KCmNsYXNzIENvbnN0YW50TmFtZXIgZXh0ZW5kcyBSZWN1cnNpdmVWaXNpdG9yPE51bGw+IHdpdGggTmFtZXI8Q29uc3RhbnQ+IHsKICBmaW5hbCBTdHJpbmcgcHJlZml4OwogIENvbnN0YW50TmFtZXIodGhpcy5wcmVmaXgpOwoKICBTdHJpbmcgZ2V0TmFtZShDb25zdGFudCBjb25zdGFudCkgewogICAgaWYgKCFtYXAuY29udGFpbnNLZXkoY29uc3RhbnQpKSB7CiAgICAgIC8vIE5hbWUgZXZlcnl0aGluZyBpbiBwb3N0LW9yZGVyIHZpc2l0IG9mIERBRy4KICAgICAgY29uc3RhbnQudmlzaXRDaGlsZHJlbih0aGlzKTsKICAgIH0KICAgIHJldHVybiBzdXBlci5nZXROYW1lKGNvbnN0YW50KTsKICB9CgogIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShDb25zdGFudCBjb25zdGFudCkgewogICAgZ2V0TmFtZShjb25zdGFudCk7CiAgfQp9CgpjbGFzcyBEaXNhbWJpZ3VhdG9yPFQsIFU+IHsKICBmaW5hbCBNYXA8VCwgU3RyaW5nPiBuYW1lc1QgPSA8VCwgU3RyaW5nPnt9OwogIGZpbmFsIE1hcDxVLCBTdHJpbmc+IG5hbWVzVSA9IDxVLCBTdHJpbmc+e307CiAgZmluYWwgU2V0PFN0cmluZz4gdXNlZE5hbWVzID0gbmV3IFNldDxTdHJpbmc+KCk7CgogIFN0cmluZyBkaXNhbWJpZ3VhdGUoVCBrZXkxLCBVIGtleTIsIFN0cmluZyBwcm9wb3NlTmFtZSgpKSB7CiAgICBnZXROZXdOYW1lKCkgewogICAgICB2YXIgcHJvcG9zZWROYW1lID0gcHJvcG9zZU5hbWUoKTsKICAgICAgaWYgKHVzZWROYW1lcy5hZGQocHJvcG9zZWROYW1lKSkgcmV0dXJuIHByb3Bvc2VkTmFtZTsKICAgICAgaW50IGkgPSAyOwogICAgICB3aGlsZSAoIXVzZWROYW1lcy5hZGQoJyRwcm9wb3NlZE5hbWUkaScpKSB7CiAgICAgICAgKytpOwogICAgICB9CiAgICAgIHJldHVybiAnJHByb3Bvc2VkTmFtZSRpJzsKICAgIH0KCiAgICBpZiAoa2V5MSAhPSBudWxsKSB7CiAgICAgIFN0cmluZyByZXN1bHQgPSBuYW1lc1Rba2V5MV07CiAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKICAgICAgcmV0dXJuIG5hbWVzVFtrZXkxXSA9IGdldE5ld05hbWUoKTsKICAgIH0KICAgIGlmIChrZXkyICE9IG51bGwpIHsKICAgICAgU3RyaW5nIHJlc3VsdCA9IG5hbWVzVVtrZXkyXTsKICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSByZXR1cm4gcmVzdWx0OwogICAgICByZXR1cm4gbmFtZXNVW2tleTJdID0gZ2V0TmV3TmFtZSgpOwogICAgfQogICAgdGhyb3cgIkNhbm5vdCBkaXNhbWJpZ3VhdGUiOwogIH0KfQoKTmFtZVN5c3RlbSBnbG9iYWxEZWJ1Z2dpbmdOYW1lcyA9IG5ldyBOYW1lU3lzdGVtKCk7CgpTdHJpbmcgZGVidWdMaWJyYXJ5TmFtZShMaWJyYXJ5IG5vZGUpIHsKICByZXR1cm4gbm9kZSA9PSBudWxsCiAgICAgID8gJ251bGwnCiAgICAgIDogbm9kZS5uYW1lID8/IGdsb2JhbERlYnVnZ2luZ05hbWVzLm5hbWVMaWJyYXJ5KG5vZGUpOwp9CgpTdHJpbmcgZGVidWdDbGFzc05hbWUoQ2xhc3Mgbm9kZSkgewogIHJldHVybiBub2RlID09IG51bGwKICAgICAgPyAnbnVsbCcKICAgICAgOiBub2RlLm5hbWUgPz8gZ2xvYmFsRGVidWdnaW5nTmFtZXMubmFtZUNsYXNzKG5vZGUpOwp9CgpTdHJpbmcgZGVidWdRdWFsaWZpZWRDbGFzc05hbWUoQ2xhc3Mgbm9kZSkgewogIHJldHVybiBkZWJ1Z0xpYnJhcnlOYW1lKG5vZGUuZW5jbG9zaW5nTGlicmFyeSkgKyAnOjonICsgZGVidWdDbGFzc05hbWUobm9kZSk7Cn0KClN0cmluZyBkZWJ1Z01lbWJlck5hbWUoTWVtYmVyIG5vZGUpIHsKICByZXR1cm4gbm9kZS5uYW1lPy5uYW1lID8/IGdsb2JhbERlYnVnZ2luZ05hbWVzLm5hbWVNZW1iZXIobm9kZSk7Cn0KClN0cmluZyBkZWJ1Z1F1YWxpZmllZE1lbWJlck5hbWUoTWVtYmVyIG5vZGUpIHsKICBpZiAobm9kZS5lbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICByZXR1cm4gZGVidWdRdWFsaWZpZWRDbGFzc05hbWUobm9kZS5lbmNsb3NpbmdDbGFzcykgKwogICAgICAgICc6OicgKwogICAgICAgIGRlYnVnTWVtYmVyTmFtZShub2RlKTsKICB9IGVsc2UgewogICAgcmV0dXJuIGRlYnVnTGlicmFyeU5hbWUobm9kZS5lbmNsb3NpbmdMaWJyYXJ5KSArCiAgICAgICAgJzo6JyArCiAgICAgICAgZGVidWdNZW1iZXJOYW1lKG5vZGUpOwogIH0KfQoKU3RyaW5nIGRlYnVnVHlwZVBhcmFtZXRlck5hbWUoVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgcmV0dXJuIG5vZGUubmFtZSA/PyBnbG9iYWxEZWJ1Z2dpbmdOYW1lcy5uYW1lVHlwZVBhcmFtZXRlcihub2RlKTsKfQoKU3RyaW5nIGRlYnVnUXVhbGlmaWVkVHlwZVBhcmFtZXRlck5hbWUoVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgaWYgKG5vZGUucGFyZW50IGlzIENsYXNzKSB7CiAgICByZXR1cm4gZGVidWdRdWFsaWZpZWRDbGFzc05hbWUobm9kZS5wYXJlbnQpICsKICAgICAgICAnOjonICsKICAgICAgICBkZWJ1Z1R5cGVQYXJhbWV0ZXJOYW1lKG5vZGUpOwogIH0KICBpZiAobm9kZS5wYXJlbnQgaXMgTWVtYmVyKSB7CiAgICByZXR1cm4gZGVidWdRdWFsaWZpZWRNZW1iZXJOYW1lKG5vZGUucGFyZW50KSArCiAgICAgICAgJzo6JyArCiAgICAgICAgZGVidWdUeXBlUGFyYW1ldGVyTmFtZShub2RlKTsKICB9CiAgcmV0dXJuIGRlYnVnVHlwZVBhcmFtZXRlck5hbWUobm9kZSk7Cn0KClN0cmluZyBkZWJ1Z1ZhcmlhYmxlRGVjbGFyYXRpb25OYW1lKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogIHJldHVybiBub2RlLm5hbWUgPz8gZ2xvYmFsRGVidWdnaW5nTmFtZXMubmFtZVZhcmlhYmxlKG5vZGUpOwp9CgpTdHJpbmcgZGVidWdOb2RlVG9TdHJpbmcoTm9kZSBub2RlKSB7CiAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICBuZXcgUHJpbnRlcihidWZmZXIsIHN5bnRoZXRpY05hbWVzOiBnbG9iYWxEZWJ1Z2dpbmdOYW1lcykud3JpdGVOb2RlKG5vZGUpOwogIHJldHVybiAnJGJ1ZmZlcic7Cn0KClN0cmluZyBjb21wb25lbnRUb1N0cmluZyhDb21wb25lbnQgbm9kZSkgewogIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgbmV3IFByaW50ZXIoYnVmZmVyLCBzeW50aGV0aWNOYW1lczogbmV3IE5hbWVTeXN0ZW0oKSkKICAgICAgLndyaXRlQ29tcG9uZW50RmlsZShub2RlKTsKICByZXR1cm4gJyRidWZmZXInOwp9CgpjbGFzcyBOYW1lU3lzdGVtIHsKICBmaW5hbCBOYW1lcjxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXMgPQogICAgICBuZXcgTm9ybWFsTmFtZXI8VmFyaWFibGVEZWNsYXJhdGlvbj4oJyN0Jyk7CiAgZmluYWwgTmFtZXI8TWVtYmVyPiBtZW1iZXJzID0gbmV3IE5vcm1hbE5hbWVyPE1lbWJlcj4oJyNtJyk7CiAgZmluYWwgTmFtZXI8Q2xhc3M+IGNsYXNzZXMgPSBuZXcgTm9ybWFsTmFtZXI8Q2xhc3M+KCcjY2xhc3MnKTsKICBmaW5hbCBOYW1lcjxMaWJyYXJ5PiBsaWJyYXJpZXMgPSBuZXcgTm9ybWFsTmFtZXI8TGlicmFyeT4oJyNsaWInKTsKICBmaW5hbCBOYW1lcjxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9CiAgICAgIG5ldyBOb3JtYWxOYW1lcjxUeXBlUGFyYW1ldGVyPignI1QnKTsKICBmaW5hbCBOYW1lcjxUcmVlTm9kZT4gbGFiZWxzID0gbmV3IE5vcm1hbE5hbWVyPFRyZWVOb2RlPignI0wnKTsKICBmaW5hbCBOYW1lcjxDb25zdGFudD4gY29uc3RhbnRzID0gbmV3IENvbnN0YW50TmFtZXIoJyNDJyk7CiAgZmluYWwgRGlzYW1iaWd1YXRvcjxSZWZlcmVuY2UsIENhbm9uaWNhbE5hbWU+IHByZWZpeGVzID0KICAgICAgbmV3IERpc2FtYmlndWF0b3I8UmVmZXJlbmNlLCBDYW5vbmljYWxOYW1lPigpOwoKICBuYW1lVmFyaWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSA9PiB2YXJpYWJsZXMuZ2V0TmFtZShub2RlKTsKICBuYW1lTWVtYmVyKE1lbWJlciBub2RlKSA9PiBtZW1iZXJzLmdldE5hbWUobm9kZSk7CiAgbmFtZUNsYXNzKENsYXNzIG5vZGUpID0+IGNsYXNzZXMuZ2V0TmFtZShub2RlKTsKICBuYW1lTGlicmFyeShMaWJyYXJ5IG5vZGUpID0+IGxpYnJhcmllcy5nZXROYW1lKG5vZGUpOwogIG5hbWVUeXBlUGFyYW1ldGVyKFR5cGVQYXJhbWV0ZXIgbm9kZSkgPT4gdHlwZVBhcmFtZXRlcnMuZ2V0TmFtZShub2RlKTsKICBuYW1lU3dpdGNoQ2FzZShTd2l0Y2hDYXNlIG5vZGUpID0+IGxhYmVscy5nZXROYW1lKG5vZGUpOwogIG5hbWVMYWJlbGVkU3RhdGVtZW50KExhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgPT4gbGFiZWxzLmdldE5hbWUobm9kZSk7CiAgbmFtZUNvbnN0YW50KENvbnN0YW50IG5vZGUpID0+IGNvbnN0YW50cy5nZXROYW1lKG5vZGUpOwoKICBmaW5hbCBSZWdFeHAgcGF0aFNlcGFyYXRvciA9IG5ldyBSZWdFeHAoJ1tcXC9dJyk7CgogIG5hbWVMaWJyYXJ5UHJlZml4KExpYnJhcnkgbm9kZSwge1N0cmluZyBwcm9wb3NlZE5hbWV9KSB7CiAgICByZXR1cm4gcHJlZml4ZXMuZGlzYW1iaWd1YXRlKG5vZGUucmVmZXJlbmNlLCBub2RlLnJlZmVyZW5jZS5jYW5vbmljYWxOYW1lLAogICAgICAgICgpIHsKICAgICAgaWYgKHByb3Bvc2VkTmFtZSAhPSBudWxsKSByZXR1cm4gcHJvcG9zZWROYW1lOwogICAgICBpZiAobm9kZS5uYW1lICE9IG51bGwpIHJldHVybiBhYmJyZXZpYXRlTmFtZShub2RlLm5hbWUpOwogICAgICBpZiAobm9kZS5pbXBvcnRVcmkgIT0gbnVsbCkgewogICAgICAgIHZhciBwYXRoID0gbm9kZS5pbXBvcnRVcmkuaGFzRW1wdHlQYXRoCiAgICAgICAgICAgID8gJyR7bm9kZS5pbXBvcnRVcml9JwogICAgICAgICAgICA6IG5vZGUuaW1wb3J0VXJpLnBhdGhTZWdtZW50cy5sYXN0OwogICAgICAgIGlmIChwYXRoLmVuZHNXaXRoKCcuZGFydCcpKSB7CiAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sZW5ndGggLSAnLmRhcnQnLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhYmJyZXZpYXRlTmFtZShwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gJ0wnOwogICAgfSk7CiAgfQoKICBuYW1lQ2Fub25pY2FsTmFtZUFzTGlicmFyeVByZWZpeChSZWZlcmVuY2Ugbm9kZSwgQ2Fub25pY2FsTmFtZSBuYW1lLAogICAgICB7U3RyaW5nIHByb3Bvc2VkTmFtZX0pIHsKICAgIHJldHVybiBwcmVmaXhlcy5kaXNhbWJpZ3VhdGUobm9kZSwgbmFtZSwgKCkgewogICAgICBpZiAocHJvcG9zZWROYW1lICE9IG51bGwpIHJldHVybiBwcm9wb3NlZE5hbWU7CiAgICAgIENhbm9uaWNhbE5hbWUgY2Fub25pY2FsTmFtZSA9IG5hbWUgPz8gbm9kZS5jYW5vbmljYWxOYW1lOwogICAgICBpZiAoY2Fub25pY2FsTmFtZT8ubmFtZSAhPSBudWxsKSB7CiAgICAgICAgdmFyIHBhdGggPSBjYW5vbmljYWxOYW1lLm5hbWU7CiAgICAgICAgaW50IHNsYXNoID0gcGF0aC5sYXN0SW5kZXhPZihwYXRoU2VwYXJhdG9yKTsKICAgICAgICBpZiAoc2xhc2ggPj0gMCkgewogICAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKHNsYXNoICsgMSk7CiAgICAgICAgfQogICAgICAgIGlmIChwYXRoLmVuZHNXaXRoKCcuZGFydCcpKSB7CiAgICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sZW5ndGggLSAnLmRhcnQnLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhYmJyZXZpYXRlTmFtZShwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gJ0wnOwogICAgfSk7CiAgfQoKICBmaW5hbCBSZWdFeHAgcHVuY3R1YXRpb24gPSBuZXcgUmVnRXhwKCdbLjpdJyk7CgogIFN0cmluZyBhYmJyZXZpYXRlTmFtZShTdHJpbmcgbmFtZSkgewogICAgaW50IGRvdCA9IG5hbWUubGFzdEluZGV4T2YocHVuY3R1YXRpb24pOwogICAgaWYgKGRvdCAhPSAtMSkgewogICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoZG90ICsgMSk7CiAgICB9CiAgICBpZiAobmFtZS5sZW5ndGggPiA0KSB7CiAgICAgIHJldHVybiBuYW1lLnN1YnN0cmluZygwLCAzKTsKICAgIH0KICAgIHJldHVybiBuYW1lOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgQW5ub3RhdG9yIHsKICBTdHJpbmcgYW5ub3RhdGVWYXJpYWJsZShQcmludGVyIHByaW50ZXIsIFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSk7CiAgU3RyaW5nIGFubm90YXRlUmV0dXJuKFByaW50ZXIgcHJpbnRlciwgRnVuY3Rpb25Ob2RlIG5vZGUpOwogIFN0cmluZyBhbm5vdGF0ZUZpZWxkKFByaW50ZXIgcHJpbnRlciwgRmllbGQgbm9kZSk7Cn0KCi8vLyBBIHF1aWNrIGFuZCBkaXJ0eSBhbWJpZ3VvdXMgdGV4dCBwcmludGVyLgpjbGFzcyBQcmludGVyIGV4dGVuZHMgVmlzaXRvcjxOdWxsPiB7CiAgZmluYWwgTmFtZVN5c3RlbSBzeW50aGV0aWNOYW1lczsKICBmaW5hbCBTdHJpbmdTaW5rIHNpbms7CiAgZmluYWwgQW5ub3RhdG9yIGFubm90YXRvcjsKICBmaW5hbCBNYXA8U3RyaW5nLCBNZXRhZGF0YVJlcG9zaXRvcnk8T2JqZWN0Pj4gbWV0YWRhdGE7CiAgSW1wb3J0VGFibGUgaW1wb3J0VGFibGU7CiAgaW50IGluZGVudGF0aW9uID0gMDsKICBpbnQgY29sdW1uID0gMDsKICBib29sIHNob3dFeHRlcm5hbDsKICBib29sIHNob3dPZmZzZXRzOwogIGJvb2wgc2hvd01ldGFkYXRhOwoKICBzdGF0aWMgaW50IFNQQUNFID0gMDsKICBzdGF0aWMgaW50IFdPUkQgPSAxOwogIHN0YXRpYyBpbnQgU1lNQk9MID0gMjsKICBpbnQgc3RhdGUgPSBTUEFDRTsKCiAgUHJpbnRlcih0aGlzLnNpbmssCiAgICAgIHtOYW1lU3lzdGVtIHN5bnRoZXRpY05hbWVzLAogICAgICB0aGlzLnNob3dFeHRlcm5hbCwKICAgICAgdGhpcy5zaG93T2Zmc2V0czogZmFsc2UsCiAgICAgIHRoaXMuc2hvd01ldGFkYXRhOiBmYWxzZSwKICAgICAgdGhpcy5pbXBvcnRUYWJsZSwKICAgICAgdGhpcy5hbm5vdGF0b3IsCiAgICAgIHRoaXMubWV0YWRhdGF9KQogICAgICA6IHRoaXMuc3ludGhldGljTmFtZXMgPSBzeW50aGV0aWNOYW1lcyA/PyBuZXcgTmFtZVN5c3RlbSgpOwoKICBQcmludGVyIGNyZWF0ZUlubmVyKEltcG9ydFRhYmxlIGltcG9ydFRhYmxlLAogICAgICBNYXA8U3RyaW5nLCBNZXRhZGF0YVJlcG9zaXRvcnk8T2JqZWN0Pj4gbWV0YWRhdGEpIHsKICAgIHJldHVybiBuZXcgUHJpbnRlcihzaW5rLAogICAgICAgIGltcG9ydFRhYmxlOiBpbXBvcnRUYWJsZSwKICAgICAgICBtZXRhZGF0YTogbWV0YWRhdGEsCiAgICAgICAgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzLAogICAgICAgIGFubm90YXRvcjogYW5ub3RhdG9yLAogICAgICAgIHNob3dFeHRlcm5hbDogc2hvd0V4dGVybmFsLAogICAgICAgIHNob3dPZmZzZXRzOiBzaG93T2Zmc2V0cywKICAgICAgICBzaG93TWV0YWRhdGE6IHNob3dNZXRhZGF0YSk7CiAgfQoKICBib29sIHNob3VsZEhpZ2hsaWdodChOb2RlIG5vZGUpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgc3RhcnRIaWdobGlnaHQoTm9kZSBub2RlKSB7fQogIHZvaWQgZW5kSGlnaGxpZ2h0KE5vZGUgbm9kZSkge30KCiAgU3RyaW5nIGdldExpYnJhcnlOYW1lKExpYnJhcnkgbm9kZSkgewogICAgcmV0dXJuIG5vZGUubmFtZSA/PyBzeW50aGV0aWNOYW1lcy5uYW1lTGlicmFyeShub2RlKTsKICB9CgogIFN0cmluZyBnZXRMaWJyYXJ5UmVmZXJlbmNlKExpYnJhcnkgbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuICc8Tm8gTGlicmFyeT4nOwogICAgaWYgKGltcG9ydFRhYmxlICE9IG51bGwgJiYgaW1wb3J0VGFibGUuZ2V0SW1wb3J0SW5kZXgobm9kZSkgIT0gLTEpIHsKICAgICAgcmV0dXJuIHN5bnRoZXRpY05hbWVzLm5hbWVMaWJyYXJ5UHJlZml4KG5vZGUpOwogICAgfQogICAgcmV0dXJuIGdldExpYnJhcnlOYW1lKG5vZGUpOwogIH0KCiAgU3RyaW5nIGdldENsYXNzTmFtZShDbGFzcyBub2RlKSB7CiAgICByZXR1cm4gbm9kZS5uYW1lID8/IHN5bnRoZXRpY05hbWVzLm5hbWVDbGFzcyhub2RlKTsKICB9CgogIFN0cmluZyBnZXRDbGFzc1JlZmVyZW5jZShDbGFzcyBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gJzxObyBDbGFzcz4nOwogICAgU3RyaW5nIG5hbWUgPSBnZXRDbGFzc05hbWUobm9kZSk7CiAgICBTdHJpbmcgbGlicmFyeSA9IGdldExpYnJhcnlSZWZlcmVuY2Uobm9kZS5lbmNsb3NpbmdMaWJyYXJ5KTsKICAgIHJldHVybiAnJGxpYnJhcnk6OiRuYW1lJzsKICB9CgogIFN0cmluZyBnZXRUeXBlZGVmUmVmZXJlbmNlKFR5cGVkZWYgbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuICc8Tm8gVHlwZWRlZj4nOwogICAgU3RyaW5nIGxpYnJhcnkgPSBnZXRMaWJyYXJ5UmVmZXJlbmNlKG5vZGUuZW5jbG9zaW5nTGlicmFyeSk7CiAgICByZXR1cm4gJyRsaWJyYXJ5Ojoke25vZGUubmFtZX0nOwogIH0KCiAgc3RhdGljIGZpbmFsIFN0cmluZyBlbXB0eU5hbWVTdHJpbmcgPSAn4oCiJzsKICBzdGF0aWMgZmluYWwgTmFtZSBlbXB0eU5hbWUgPSBuZXcgTmFtZShlbXB0eU5hbWVTdHJpbmcpOwoKICBOYW1lIGdldE1lbWJlck5hbWUoTWVtYmVyIG5vZGUpIHsKICAgIGlmIChub2RlLm5hbWU/Lm5hbWUgPT0gJycpIHJldHVybiBlbXB0eU5hbWU7CiAgICBpZiAobm9kZS5uYW1lICE9IG51bGwpIHJldHVybiBub2RlLm5hbWU7CiAgICByZXR1cm4gbmV3IE5hbWUoc3ludGhldGljTmFtZXMubmFtZU1lbWJlcihub2RlKSk7CiAgfQoKICBTdHJpbmcgZ2V0TWVtYmVyUmVmZXJlbmNlKE1lbWJlciBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gJzxObyBNZW1iZXI+JzsKICAgIFN0cmluZyBuYW1lID0gZ2V0TWVtYmVyTmFtZShub2RlKS5uYW1lOwogICAgaWYgKG5vZGUucGFyZW50IGlzIENsYXNzKSB7CiAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBnZXRDbGFzc1JlZmVyZW5jZShub2RlLnBhcmVudCk7CiAgICAgIHJldHVybiAnJGNsYXNzTmFtZTo6JG5hbWUnOwogICAgfSBlbHNlIHsKICAgICAgU3RyaW5nIGxpYnJhcnkgPSBnZXRMaWJyYXJ5UmVmZXJlbmNlKG5vZGUuZW5jbG9zaW5nTGlicmFyeSk7CiAgICAgIHJldHVybiAnJGxpYnJhcnk6OiRuYW1lJzsKICAgIH0KICB9CgogIFN0cmluZyBnZXRWYXJpYWJsZU5hbWUoVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gbm9kZS5uYW1lID8/IHN5bnRoZXRpY05hbWVzLm5hbWVWYXJpYWJsZShub2RlKTsKICB9CgogIFN0cmluZyBnZXRWYXJpYWJsZVJlZmVyZW5jZShWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiAnPE5vIFZhcmlhYmxlRGVjbGFyYXRpb24+JzsKICAgIHJldHVybiBnZXRWYXJpYWJsZU5hbWUobm9kZSk7CiAgfQoKICBTdHJpbmcgZ2V0VHlwZVBhcmFtZXRlck5hbWUoVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgICByZXR1cm4gbm9kZS5uYW1lID8/IHN5bnRoZXRpY05hbWVzLm5hbWVUeXBlUGFyYW1ldGVyKG5vZGUpOwogIH0KCiAgU3RyaW5nIGdldFR5cGVQYXJhbWV0ZXJSZWZlcmVuY2UoVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSByZXR1cm4gJzxObyBUeXBlUGFyYW1ldGVyPic7CiAgICBTdHJpbmcgbmFtZSA9IGdldFR5cGVQYXJhbWV0ZXJOYW1lKG5vZGUpOwogICAgaWYgKG5vZGUucGFyZW50IGlzIEZ1bmN0aW9uTm9kZSAmJiBub2RlLnBhcmVudC5wYXJlbnQgaXMgTWVtYmVyKSB7CiAgICAgIFN0cmluZyBtZW1iZXIgPSBnZXRNZW1iZXJSZWZlcmVuY2Uobm9kZS5wYXJlbnQucGFyZW50KTsKICAgICAgcmV0dXJuICckbWVtYmVyOjokbmFtZSc7CiAgICB9IGVsc2UgaWYgKG5vZGUucGFyZW50IGlzIENsYXNzKSB7CiAgICAgIFN0cmluZyBjbGFzc05hbWUgPSBnZXRDbGFzc1JlZmVyZW5jZShub2RlLnBhcmVudCk7CiAgICAgIHJldHVybiAnJGNsYXNzTmFtZTo6JG5hbWUnOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5hbWU7IC8vIEJvdW5kIGluc2lkZSBhIGZ1bmN0aW9uIHR5cGUuCiAgICB9CiAgfQoKICB2b2lkIHdyaXRlQ29tcG9uZW50UHJvYmxlbXMoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgd3JpdGVQcm9ibGVtc0FzSnNvbigiUHJvYmxlbXMgaW4gY29tcG9uZW50IiwgY29tcG9uZW50LnByb2JsZW1zQXNKc29uKTsKICB9CgogIHZvaWQgd3JpdGVQcm9ibGVtc0FzSnNvbihTdHJpbmcgaGVhZGVyLCBMaXN0PFN0cmluZz4gcHJvYmxlbXNBc0pzb24pIHsKICAgIGlmIChwcm9ibGVtc0FzSnNvbj8uaXNFbXB0eSA9PSBmYWxzZSkgewogICAgICBlbmRMaW5lKCIvLyIpOwogICAgICB3cml0ZSgiLy8gIik7CiAgICAgIHdyaXRlKGhlYWRlcik7CiAgICAgIGVuZExpbmUoIjoiKTsKICAgICAgZW5kTGluZSgiLy8iKTsKICAgICAgZm9yIChTdHJpbmcgcyBpbiBwcm9ibGVtc0FzSnNvbikgewogICAgICAgIE1hcDxTdHJpbmcsIE9iamVjdD4gZGVjb2RlZCA9IGpzb24uZGVjb2RlKHMpOwogICAgICAgIExpc3Q8T2JqZWN0PiBwbGFpblRleHRGb3JtYXR0ZWQgPSBkZWNvZGVkWyJwbGFpblRleHRGb3JtYXR0ZWQiXTsKICAgICAgICBMaXN0PFN0cmluZz4gbGluZXMgPSBwbGFpblRleHRGb3JtYXR0ZWQuam9pbigiXG4iKS5zcGxpdCgiXG4iKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpbmVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB3cml0ZSgiLy8iKTsKICAgICAgICAgIFN0cmluZyB0cmltbWVkID0gbGluZXNbaV0udHJpbVJpZ2h0KCk7CiAgICAgICAgICBpZiAodHJpbW1lZC5pc05vdEVtcHR5KSB3cml0ZSgiICIpOwogICAgICAgICAgZW5kTGluZSh0cmltbWVkKTsKICAgICAgICB9CiAgICAgICAgaWYgKGxpbmVzLmlzTm90RW1wdHkpIGVuZExpbmUoIi8vIik7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgd3JpdGVMaWJyYXJ5RmlsZShMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3QobGlicmFyeS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZVdvcmQoJ2xpYnJhcnknKTsKICAgIGlmIChsaWJyYXJ5Lm5hbWUgIT0gbnVsbCkgewogICAgICB3cml0ZVdvcmQobGlicmFyeS5uYW1lKTsKICAgIH0KICAgIGVuZExpbmUoJzsnKTsKCiAgICBMaWJyYXJ5SW1wb3J0VGFibGUgaW1wb3J0cyA9IG5ldyBMaWJyYXJ5SW1wb3J0VGFibGUobGlicmFyeSk7CiAgICBQcmludGVyIGlubmVyID0gY3JlYXRlSW5uZXIoaW1wb3J0cywgbGlicmFyeS5lbmNsb3NpbmdDb21wb25lbnQ/Lm1ldGFkYXRhKTsKICAgIGlubmVyLndyaXRlU3RhbmRhcmRMaWJyYXJ5Q29udGVudChsaWJyYXJ5LAogICAgICAgIG91dGVyUHJpbnRlcjogdGhpcywgaW1wb3J0c1RvUHJpbnQ6IGltcG9ydHMpOwogIH0KCiAgdm9pZCBwcmludExpYnJhcnlJbXBvcnRUYWJsZShMaWJyYXJ5SW1wb3J0VGFibGUgaW1wb3J0cykgewogICAgZm9yICh2YXIgbGlicmFyeSBpbiBpbXBvcnRzLmltcG9ydGVkTGlicmFyaWVzKSB7CiAgICAgIHZhciBpbXBvcnRQYXRoID0gaW1wb3J0cy5nZXRJbXBvcnRQYXRoKGxpYnJhcnkpOwogICAgICBpZiAoaW1wb3J0UGF0aCA9PSAiIikgewogICAgICAgIHZhciBwcmVmaXggPQogICAgICAgICAgICBzeW50aGV0aWNOYW1lcy5uYW1lTGlicmFyeVByZWZpeChsaWJyYXJ5LCBwcm9wb3NlZE5hbWU6ICdzZWxmJyk7CiAgICAgICAgZW5kTGluZSgnaW1wb3J0IHNlbGYgYXMgJHByZWZpeDsnKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgcHJlZml4ID0gc3ludGhldGljTmFtZXMubmFtZUxpYnJhcnlQcmVmaXgobGlicmFyeSk7CiAgICAgICAgZW5kTGluZSgnaW1wb3J0ICIkaW1wb3J0UGF0aCIgYXMgJHByZWZpeDsnKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCB3cml0ZVN0YW5kYXJkTGlicmFyeUNvbnRlbnQoTGlicmFyeSBsaWJyYXJ5LAogICAgICB7UHJpbnRlciBvdXRlclByaW50ZXIsIExpYnJhcnlJbXBvcnRUYWJsZSBpbXBvcnRzVG9QcmludH0pIHsKICAgIG91dGVyUHJpbnRlciA/Pz0gdGhpczsKICAgIG91dGVyUHJpbnRlci53cml0ZVByb2JsZW1zQXNKc29uKAogICAgICAgICJQcm9ibGVtcyBpbiBsaWJyYXJ5IiwgbGlicmFyeS5wcm9ibGVtc0FzSnNvbik7CgogICAgaWYgKGltcG9ydHNUb1ByaW50ICE9IG51bGwpIHsKICAgICAgb3V0ZXJQcmludGVyLnByaW50TGlicmFyeUltcG9ydFRhYmxlKGltcG9ydHNUb1ByaW50KTsKICAgIH0KCiAgICB3cml0ZUFkZGl0aW9uYWxFeHBvcnRzKGxpYnJhcnkuYWRkaXRpb25hbEV4cG9ydHMpOwogICAgZW5kTGluZSgpOwogICAgbGlicmFyeS5kZXBlbmRlbmNpZXMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgaWYgKGxpYnJhcnkuZGVwZW5kZW5jaWVzLmlzTm90RW1wdHkpIGVuZExpbmUoKTsKICAgIGxpYnJhcnkucGFydHMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgbGlicmFyeS50eXBlZGVmcy5mb3JFYWNoKHdyaXRlTm9kZSk7CiAgICBsaWJyYXJ5LmNsYXNzZXMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgbGlicmFyeS5maWVsZHMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgbGlicmFyeS5wcm9jZWR1cmVzLmZvckVhY2god3JpdGVOb2RlKTsKICB9CgogIHZvaWQgd3JpdGVBZGRpdGlvbmFsRXhwb3J0cyhMaXN0PFJlZmVyZW5jZT4gYWRkaXRpb25hbEV4cG9ydHMpIHsKICAgIGlmIChhZGRpdGlvbmFsRXhwb3J0cy5pc0VtcHR5KSByZXR1cm47CiAgICB3cml0ZSgnYWRkaXRpb25hbEV4cG9ydHMgPSAoJyk7CiAgICBib29sIGlzRmlyc3QgPSB0cnVlOwogICAgZm9yIChSZWZlcmVuY2UgcmVmZXJlbmNlIGluIGFkZGl0aW9uYWxFeHBvcnRzKSB7CiAgICAgIGlmIChpc0ZpcnN0KSB7CiAgICAgICAgaXNGaXJzdCA9IGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIHdyaXRlKCcsICcpOwogICAgICB9CiAgICAgIHZhciBub2RlID0gcmVmZXJlbmNlLm5vZGU7CiAgICAgIGlmIChub2RlIGlzIENsYXNzKSB7CiAgICAgICAgTGlicmFyeSBub2RlTGlicmFyeSA9IG5vZGUuZW5jbG9zaW5nTGlicmFyeTsKICAgICAgICBTdHJpbmcgcHJlZml4ID0gc3ludGhldGljTmFtZXMubmFtZUxpYnJhcnlQcmVmaXgobm9kZUxpYnJhcnkpOwogICAgICAgIHdyaXRlKHByZWZpeCArICc6OicgKyBub2RlLm5hbWUpOwogICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgRmllbGQpIHsKICAgICAgICBMaWJyYXJ5IG5vZGVMaWJyYXJ5ID0gbm9kZS5lbmNsb3NpbmdMaWJyYXJ5OwogICAgICAgIFN0cmluZyBwcmVmaXggPSBzeW50aGV0aWNOYW1lcy5uYW1lTGlicmFyeVByZWZpeChub2RlTGlicmFyeSk7CiAgICAgICAgd3JpdGUocHJlZml4ICsgJzo6JyArIG5vZGUubmFtZS5uYW1lKTsKICAgICAgfSBlbHNlIGlmIChub2RlIGlzIFByb2NlZHVyZSkgewogICAgICAgIExpYnJhcnkgbm9kZUxpYnJhcnkgPSBub2RlLmVuY2xvc2luZ0xpYnJhcnk7CiAgICAgICAgU3RyaW5nIHByZWZpeCA9IHN5bnRoZXRpY05hbWVzLm5hbWVMaWJyYXJ5UHJlZml4KG5vZGVMaWJyYXJ5KTsKICAgICAgICB3cml0ZShwcmVmaXggKyAnOjonICsgbm9kZS5uYW1lLm5hbWUpOwogICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgVHlwZWRlZikgewogICAgICAgIExpYnJhcnkgbm9kZUxpYnJhcnkgPSBub2RlLmVuY2xvc2luZ0xpYnJhcnk7CiAgICAgICAgU3RyaW5nIHByZWZpeCA9IHN5bnRoZXRpY05hbWVzLm5hbWVMaWJyYXJ5UHJlZml4KG5vZGVMaWJyYXJ5KTsKICAgICAgICB3cml0ZShwcmVmaXggKyAnOjonICsgbm9kZS5uYW1lKTsKICAgICAgfSBlbHNlIGlmIChyZWZlcmVuY2UuY2Fub25pY2FsTmFtZSAhPSBudWxsKSB7CiAgICAgICAgd3JpdGUocmVmZXJlbmNlLmNhbm9uaWNhbE5hbWUudG9TdHJpbmcoKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcignJHtub2RlLnJ1bnRpbWVUeXBlfScpOwogICAgICB9CiAgICAgIGVuZExpbmUoJyknKTsKICAgIH0KCiAgICBlbmRMaW5lKCk7CiAgfQoKICB2b2lkIHdyaXRlQ29tcG9uZW50RmlsZShDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBJbXBvcnRUYWJsZSBpbXBvcnRzID0gbmV3IENvbXBvbmVudEltcG9ydFRhYmxlKGNvbXBvbmVudCk7CiAgICB2YXIgaW5uZXIgPSBjcmVhdGVJbm5lcihpbXBvcnRzLCBjb21wb25lbnQubWV0YWRhdGEpOwogICAgd3JpdGVXb3JkKCdtYWluJyk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgaW5uZXIud3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKGNvbXBvbmVudC5tYWluTWV0aG9kTmFtZSk7CiAgICBlbmRMaW5lKCc7Jyk7CiAgICBpZiAoc2hvd01ldGFkYXRhKSB7CiAgICAgIGlubmVyLndyaXRlTWV0YWRhdGEoY29tcG9uZW50KTsKICAgIH0KICAgIHdyaXRlQ29tcG9uZW50UHJvYmxlbXMoY29tcG9uZW50KTsKICAgIGZvciAodmFyIGxpYnJhcnkgaW4gY29tcG9uZW50LmxpYnJhcmllcykgewogICAgICBpZiAobGlicmFyeS5pc0V4dGVybmFsKSB7CiAgICAgICAgaWYgKCFzaG93RXh0ZXJuYWwpIHsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB3cml0ZVdvcmQoJ2V4dGVybmFsJyk7CiAgICAgIH0KICAgICAgaWYgKHNob3dNZXRhZGF0YSkgewogICAgICAgIGlubmVyLndyaXRlTWV0YWRhdGEobGlicmFyeSk7CiAgICAgIH0KICAgICAgd3JpdGVBbm5vdGF0aW9uTGlzdChsaWJyYXJ5LmFubm90YXRpb25zKTsKICAgICAgd3JpdGVXb3JkKCdsaWJyYXJ5Jyk7CiAgICAgIGlmIChsaWJyYXJ5Lm5hbWUgIT0gbnVsbCkgewogICAgICAgIHdyaXRlV29yZChsaWJyYXJ5Lm5hbWUpOwogICAgICB9CiAgICAgIGlmIChsaWJyYXJ5LmltcG9ydFVyaSAhPSBudWxsKSB7CiAgICAgICAgd3JpdGVTcGFjZWQoJ2Zyb20nKTsKICAgICAgICB3cml0ZVdvcmQoJyIke2xpYnJhcnkuaW1wb3J0VXJpfSInKTsKICAgICAgfQogICAgICB2YXIgcHJlZml4ID0gc3ludGhldGljTmFtZXMubmFtZUxpYnJhcnlQcmVmaXgobGlicmFyeSk7CiAgICAgIHdyaXRlU3BhY2VkKCdhcycpOwogICAgICB3cml0ZVdvcmQocHJlZml4KTsKICAgICAgZW5kTGluZSgnIHsnKTsKICAgICAgKytpbm5lci5pbmRlbnRhdGlvbjsKCiAgICAgIGlubmVyLndyaXRlU3RhbmRhcmRMaWJyYXJ5Q29udGVudChsaWJyYXJ5KTsKICAgICAgLS1pbm5lci5pbmRlbnRhdGlvbjsKICAgICAgZW5kTGluZSgnfScpOwogICAgfQogICAgd3JpdGVDb25zdGFudFRhYmxlKGNvbXBvbmVudCk7CiAgfQoKICB2b2lkIHdyaXRlQ29uc3RhbnRUYWJsZShDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBpZiAoc3ludGhldGljTmFtZXMuY29uc3RhbnRzLm1hcC5pc0VtcHR5KSByZXR1cm47CiAgICBJbXBvcnRUYWJsZSBpbXBvcnRzID0gbmV3IENvbXBvbmVudEltcG9ydFRhYmxlKGNvbXBvbmVudCk7CiAgICB2YXIgaW5uZXIgPSBjcmVhdGVJbm5lcihpbXBvcnRzLCBjb21wb25lbnQubWV0YWRhdGEpOwogICAgd3JpdGVXb3JkKCdjb25zdGFudHMgJyk7CiAgICBlbmRMaW5lKCcgeycpOwogICAgKytpbm5lci5pbmRlbnRhdGlvbjsKICAgIGZvciAoZmluYWwgQ29uc3RhbnQgY29uc3RhbnQKICAgICAgICBpbiBzeW50aGV0aWNOYW1lcy5jb25zdGFudHMubWFwLmtleXMudG9MaXN0KCkpIHsKICAgICAgaW5uZXIud3JpdGVOb2RlKGNvbnN0YW50KTsKICAgIH0KICAgIC0taW5uZXIuaW5kZW50YXRpb247CiAgICBlbmRMaW5lKCd9Jyk7CiAgfQoKICBpbnQgZ2V0UHJlY2VkZW5jZShUcmVlTm9kZSBub2RlKSB7CiAgICByZXR1cm4gUHJlY2VkZW5jZS5vZihub2RlKTsKICB9CgogIHZvaWQgd3JpdGUoU3RyaW5nIHN0cmluZykgewogICAgc2luay53cml0ZShzdHJpbmcpOwogICAgY29sdW1uICs9IHN0cmluZy5sZW5ndGg7CiAgfQoKICB2b2lkIHdyaXRlU3BhY2UoW1N0cmluZyBzdHJpbmcgPSAnICddKSB7CiAgICB3cml0ZShzdHJpbmcpOwogICAgc3RhdGUgPSBTUEFDRTsKICB9CgogIHZvaWQgZW5zdXJlU3BhY2UoKSB7CiAgICBpZiAoc3RhdGUgIT0gU1BBQ0UpIHdyaXRlU3BhY2UoKTsKICB9CgogIHZvaWQgd3JpdGVTeW1ib2woU3RyaW5nIHN0cmluZykgewogICAgd3JpdGUoc3RyaW5nKTsKICAgIHN0YXRlID0gU1lNQk9MOwogIH0KCiAgdm9pZCB3cml0ZVNwYWNlZChTdHJpbmcgc3RyaW5nKSB7CiAgICBlbnN1cmVTcGFjZSgpOwogICAgd3JpdGUoc3RyaW5nKTsKICAgIHdyaXRlU3BhY2UoKTsKICB9CgogIHZvaWQgd3JpdGVDb21tYShbU3RyaW5nIHN0cmluZyA9ICcsJ10pIHsKICAgIHdyaXRlKHN0cmluZyk7CiAgICB3cml0ZVNwYWNlKCk7CiAgfQoKICB2b2lkIHdyaXRlV29yZChTdHJpbmcgc3RyaW5nKSB7CiAgICBpZiAoc3RyaW5nLmlzRW1wdHkpIHJldHVybjsKICAgIGVuc3VyZVdvcmRCb3VuZGFyeSgpOwogICAgd3JpdGUoc3RyaW5nKTsKICAgIHN0YXRlID0gV09SRDsKICB9CgogIHZvaWQgZW5zdXJlV29yZEJvdW5kYXJ5KCkgewogICAgaWYgKHN0YXRlID09IFdPUkQpIHsKICAgICAgd3JpdGVTcGFjZSgpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZUluZGVudGF0aW9uKCkgewogICAgd3JpdGVTcGFjZSgnICAnICogaW5kZW50YXRpb24pOwogIH0KCiAgdm9pZCB3cml0ZU5vZGUoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlU3ltYm9sKCI8TnVsbD4iKTsKICAgIH0gZWxzZSB7CiAgICAgIGZpbmFsIGhpZ2hsaWdodCA9IHNob3VsZEhpZ2hsaWdodChub2RlKTsKICAgICAgaWYgKGhpZ2hsaWdodCkgewogICAgICAgIHN0YXJ0SGlnaGxpZ2h0KG5vZGUpOwogICAgICB9CgogICAgICBpZiAoc2hvd09mZnNldHMgJiYgbm9kZSBpcyBUcmVlTm9kZSkgewogICAgICAgIHdyaXRlV29yZCgiWyR7bm9kZS5maWxlT2Zmc2V0fV0iKTsKICAgICAgfQogICAgICBpZiAoc2hvd01ldGFkYXRhICYmIG5vZGUgaXMgVHJlZU5vZGUpIHsKICAgICAgICB3cml0ZU1ldGFkYXRhKG5vZGUpOwogICAgICB9CgogICAgICBub2RlLmFjY2VwdCh0aGlzKTsKCiAgICAgIGlmIChoaWdobGlnaHQpIHsKICAgICAgICBlbmRIaWdobGlnaHQobm9kZSk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgd3JpdGVPcHRpb25hbE5vZGUoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSAhPSBudWxsKSB7CiAgICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZU1ldGFkYXRhKFRyZWVOb2RlIG5vZGUpIHsKICAgIGlmIChtZXRhZGF0YSAhPSBudWxsKSB7CiAgICAgIGZvciAodmFyIG1kIGluIG1ldGFkYXRhLnZhbHVlcykgewogICAgICAgIGZpbmFsIG5vZGVNZXRhZGF0YSA9IG1kLm1hcHBpbmdbbm9kZV07CiAgICAgICAgaWYgKG5vZGVNZXRhZGF0YSAhPSBudWxsKSB7CiAgICAgICAgICB3cml0ZVdvcmQoIltAJHttZC50YWd9PSR7bm9kZU1ldGFkYXRhfV0iKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgd3JpdGVBbm5vdGF0ZWRUeXBlKERhcnRUeXBlIHR5cGUsIFN0cmluZyBhbm5vdGF0aW9uKSB7CiAgICB3cml0ZVR5cGUodHlwZSk7CiAgICBpZiAoYW5ub3RhdGlvbiAhPSBudWxsKSB7CiAgICAgIHdyaXRlKCcvJyk7CiAgICAgIHdyaXRlKGFubm90YXRpb24pOwogICAgICBzdGF0ZSA9IFdPUkQ7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlKCc8Tm8gRGFydFR5cGU+Jyk7CiAgICB9IGVsc2UgewogICAgICB0eXBlLmFjY2VwdCh0aGlzKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVPcHRpb25hbFR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUgIT0gbnVsbCkgewogICAgICB0eXBlLmFjY2VwdCh0aGlzKTsKICAgIH0KICB9CgogIHZpc2l0U3VwZXJ0eXBlKFN1cGVydHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSB7CiAgICAgIHdyaXRlKCc8Tm8gU3VwZXJ0eXBlPicpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVDbGFzc1JlZmVyZW5jZUZyb21SZWZlcmVuY2UodHlwZS5jbGFzc05hbWUpOwogICAgICBpZiAodHlwZS50eXBlQXJndW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgICB3cml0ZVN5bWJvbCgnPCcpOwogICAgICAgIHdyaXRlTGlzdCh0eXBlLnR5cGVBcmd1bWVudHMsIHdyaXRlVHlwZSk7CiAgICAgICAgd3JpdGVTeW1ib2woJz4nKTsKICAgICAgfQogICAgfQogIH0KCiAgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSB0eXBlKSB7CiAgICB3cml0ZVR5cGVkZWZSZWZlcmVuY2UodHlwZS50eXBlZGVmTm9kZSk7CiAgICBpZiAodHlwZS50eXBlQXJndW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgd3JpdGVTeW1ib2woJzwnKTsKICAgICAgd3JpdGVMaXN0KHR5cGUudHlwZUFyZ3VtZW50cywgd3JpdGVUeXBlKTsKICAgICAgd3JpdGVTeW1ib2woJz4nKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVNb2RpZmllcihib29sIGlzVGhlcmUsIFN0cmluZyBuYW1lKSB7CiAgICBpZiAoaXNUaGVyZSkgewogICAgICB3cml0ZVdvcmQobmFtZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlTmFtZShOYW1lIG5hbWUpIHsKICAgIGlmIChuYW1lPy5uYW1lID09ICcnKSB7CiAgICAgIHdyaXRlV29yZChlbXB0eU5hbWVTdHJpbmcpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVXb3JkKG5hbWU/Lm5hbWUgPz8gJzxhbm9uPicpOyAvLyBUT0RPOiB3cml0ZSBsaWJyYXJ5IG5hbWUKICAgIH0KICB9CgogIHZvaWQgZW5kTGluZShbU3RyaW5nIHN0cmluZ10pIHsKICAgIGlmIChzdHJpbmcgIT0gbnVsbCkgewogICAgICB3cml0ZShzdHJpbmcpOwogICAgfQogICAgd3JpdGUoJ1xuJyk7CiAgICBzdGF0ZSA9IFNQQUNFOwogICAgY29sdW1uID0gMDsKICB9CgogIHZvaWQgd3JpdGVGdW5jdGlvbihGdW5jdGlvbk5vZGUgZnVuY3Rpb24sCiAgICAgIHtuYW1lLCBMaXN0PEluaXRpYWxpemVyPiBpbml0aWFsaXplcnMsIGJvb2wgdGVybWluYXRlTGluZTogdHJ1ZX0pIHsKICAgIGlmIChuYW1lIGlzIFN0cmluZykgewogICAgICB3cml0ZVdvcmQobmFtZSk7CiAgICB9IGVsc2UgaWYgKG5hbWUgaXMgTmFtZSkgewogICAgICB3cml0ZU5hbWUobmFtZSk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQobmFtZSA9PSBudWxsKTsKICAgIH0KICAgIHdyaXRlVHlwZVBhcmFtZXRlckxpc3QoZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMpOwogICAgd3JpdGVQYXJhbWV0ZXJMaXN0KGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLCBmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgZnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICB3cml0ZVJldHVyblR5cGUoCiAgICAgICAgZnVuY3Rpb24ucmV0dXJuVHlwZSwgYW5ub3RhdG9yPy5hbm5vdGF0ZVJldHVybih0aGlzLCBmdW5jdGlvbikpOwogICAgaWYgKGluaXRpYWxpemVycyAhPSBudWxsICYmIGluaXRpYWxpemVycy5pc05vdEVtcHR5KSB7CiAgICAgIGVuZExpbmUoKTsKICAgICAgKytpbmRlbnRhdGlvbjsKICAgICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgICB3cml0ZUNvbW1hKCc6Jyk7CiAgICAgIHdyaXRlTGlzdChpbml0aWFsaXplcnMsIHdyaXRlTm9kZSk7CiAgICAgIC0taW5kZW50YXRpb247CiAgICB9CiAgICBpZiAoZnVuY3Rpb24uYXN5bmNNYXJrZXIgIT0gQXN5bmNNYXJrZXIuU3luYykgewogICAgICB3cml0ZVNwYWNlZChnZXRBc3luY01hcmtlcktleXdvcmQoZnVuY3Rpb24uYXN5bmNNYXJrZXIpKTsKICAgIH0KICAgIGlmIChmdW5jdGlvbi5kYXJ0QXN5bmNNYXJrZXIgIT0gQXN5bmNNYXJrZXIuU3luYyAmJgogICAgICAgIGZ1bmN0aW9uLmRhcnRBc3luY01hcmtlciAhPSBmdW5jdGlvbi5hc3luY01hcmtlcikgewogICAgICB3cml0ZVNwYWNlZCgiLyogb3JpZ2luYWxseSIpOwogICAgICB3cml0ZVNwYWNlZChnZXRBc3luY01hcmtlcktleXdvcmQoZnVuY3Rpb24uZGFydEFzeW5jTWFya2VyKSk7CiAgICAgIHdyaXRlU3BhY2VkKCIqLyIpOwogICAgfQogICAgaWYgKGZ1bmN0aW9uLmJvZHkgIT0gbnVsbCkgewogICAgICB3cml0ZUZ1bmN0aW9uQm9keShmdW5jdGlvbi5ib2R5LCB0ZXJtaW5hdGVMaW5lOiB0ZXJtaW5hdGVMaW5lKTsKICAgIH0gZWxzZSBpZiAodGVybWluYXRlTGluZSkgewogICAgICBlbmRMaW5lKCc7Jyk7CiAgICB9CiAgfQoKICBTdHJpbmcgZ2V0QXN5bmNNYXJrZXJLZXl3b3JkKEFzeW5jTWFya2VyIG1hcmtlcikgewogICAgc3dpdGNoIChtYXJrZXIpIHsKICAgICAgY2FzZSBBc3luY01hcmtlci5TeW5jOgogICAgICAgIHJldHVybiAnc3luYyc7CiAgICAgIGNhc2UgQXN5bmNNYXJrZXIuU3luY1N0YXI6CiAgICAgICAgcmV0dXJuICdzeW5jKic7CiAgICAgIGNhc2UgQXN5bmNNYXJrZXIuQXN5bmM6CiAgICAgICAgcmV0dXJuICdhc3luYyc7CiAgICAgIGNhc2UgQXN5bmNNYXJrZXIuQXN5bmNTdGFyOgogICAgICAgIHJldHVybiAnYXN5bmMqJzsKICAgICAgY2FzZSBBc3luY01hcmtlci5TeW5jWWllbGRpbmc6CiAgICAgICAgcmV0dXJuICd5aWVsZGluZyc7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuICc8SW52YWxpZCBhc3luYyBtYXJrZXI6ICRtYXJrZXI+JzsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVGdW5jdGlvbkJvZHkoU3RhdGVtZW50IGJvZHksIHtib29sIHRlcm1pbmF0ZUxpbmU6IHRydWV9KSB7CiAgICBpZiAoYm9keSBpcyBCbG9jayAmJiBib2R5LnN0YXRlbWVudHMuaXNFbXB0eSkgewogICAgICBlbnN1cmVTcGFjZSgpOwogICAgICB3cml0ZVN5bWJvbCgne30nKTsKICAgICAgc3RhdGUgPSBXT1JEOwogICAgICBpZiAodGVybWluYXRlTGluZSkgewogICAgICAgIGVuZExpbmUoKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChib2R5IGlzIEJsb2NrKSB7CiAgICAgIGVuc3VyZVNwYWNlKCk7CiAgICAgIGVuZExpbmUoJ3snKTsKICAgICAgKytpbmRlbnRhdGlvbjsKICAgICAgYm9keS5zdGF0ZW1lbnRzLmZvckVhY2god3JpdGVOb2RlKTsKICAgICAgLS1pbmRlbnRhdGlvbjsKICAgICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgICB3cml0ZVN5bWJvbCgnfScpOwogICAgICBzdGF0ZSA9IFdPUkQ7CiAgICAgIGlmICh0ZXJtaW5hdGVMaW5lKSB7CiAgICAgICAgZW5kTGluZSgpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGJvZHkgaXMgUmV0dXJuU3RhdGVtZW50ICYmICF0ZXJtaW5hdGVMaW5lKSB7CiAgICAgIHdyaXRlU3BhY2VkKCc9PicpOwogICAgICB3cml0ZUV4cHJlc3Npb24oYm9keS5leHByZXNzaW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlQm9keShib2R5KTsKICAgIH0KICB9CgogIHdyaXRlRnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBub2RlLAogICAgICB7TGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB0eXBlZGVmUG9zaXRpb25hbCwKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB0eXBlZGVmTmFtZWR9KSB7CiAgICBpZiAoc3RhdGUgPT0gV09SRCkgewogICAgICBlbnN1cmVTcGFjZSgpOwogICAgfQogICAgd3JpdGVUeXBlUGFyYW1ldGVyTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICBMaXN0PERhcnRUeXBlPiBwb3NpdGlvbmFsID0gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVyczsKCiAgICBib29sIHBhcmFtZXRlcnNBbm5vdGF0ZWQgPSBmYWxzZTsKICAgIGlmICh0eXBlZGVmUG9zaXRpb25hbCAhPSBudWxsKSB7CiAgICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBmb3JtYWwgaW4gdHlwZWRlZlBvc2l0aW9uYWwpIHsKICAgICAgICBwYXJhbWV0ZXJzQW5ub3RhdGVkID0KICAgICAgICAgICAgcGFyYW1ldGVyc0Fubm90YXRlZCB8fCBmb3JtYWwuYW5ub3RhdGlvbnMubGVuZ3RoID4gMDsKICAgICAgfQogICAgfQogICAgaWYgKHR5cGVkZWZOYW1lZCAhPSBudWxsKSB7CiAgICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBmb3JtYWwgaW4gdHlwZWRlZk5hbWVkKSB7CiAgICAgICAgcGFyYW1ldGVyc0Fubm90YXRlZCA9CiAgICAgICAgICAgIHBhcmFtZXRlcnNBbm5vdGF0ZWQgfHwgZm9ybWFsLmFubm90YXRpb25zLmxlbmd0aCA+IDA7CiAgICAgIH0KICAgIH0KCiAgICBpZiAocGFyYW1ldGVyc0Fubm90YXRlZCAmJiB0eXBlZGVmUG9zaXRpb25hbCAhPSBudWxsKSB7CiAgICAgIHdyaXRlTGlzdCh0eXBlZGVmUG9zaXRpb25hbC50YWtlKG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCksCiAgICAgICAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVMaXN0KHBvc2l0aW9uYWwudGFrZShub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpLCB3cml0ZVR5cGUpOwogICAgfQoKICAgIGlmIChub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPCBwb3NpdGlvbmFsLmxlbmd0aCkgewogICAgICBpZiAobm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50ID4gMCkgewogICAgICAgIHdyaXRlQ29tbWEoKTsKICAgICAgfQogICAgICB3cml0ZVN5bWJvbCgnWycpOwogICAgICBpZiAocGFyYW1ldGVyc0Fubm90YXRlZCAmJiB0eXBlZGVmUG9zaXRpb25hbCAhPSBudWxsKSB7CiAgICAgICAgd3JpdGVMaXN0KHR5cGVkZWZQb3NpdGlvbmFsLnNraXAobm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSwKICAgICAgICAgICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB3cml0ZUxpc3QocG9zaXRpb25hbC5za2lwKG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCksIHdyaXRlVHlwZSk7CiAgICAgIH0KICAgICAgd3JpdGVTeW1ib2woJ10nKTsKICAgIH0KICAgIGlmIChub2RlLm5hbWVkUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIGlmIChub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgICB3cml0ZUNvbW1hKCk7CiAgICAgIH0KICAgICAgd3JpdGVTeW1ib2woJ3snKTsKICAgICAgaWYgKHBhcmFtZXRlcnNBbm5vdGF0ZWQgJiYgdHlwZWRlZk5hbWVkICE9IG51bGwpIHsKICAgICAgICB3cml0ZUxpc3QodHlwZWRlZk5hbWVkLCB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIHdyaXRlTGlzdChub2RlLm5hbWVkUGFyYW1ldGVycywgdmlzaXROYW1lZFR5cGUpOwogICAgICB9CiAgICAgIHdyaXRlU3ltYm9sKCd9Jyk7CiAgICB9CiAgICB3cml0ZVN5bWJvbCgnKScpOwogICAgZW5zdXJlU3BhY2UoKTsKICAgIHdyaXRlKCfihpInKTsKICAgIHdyaXRlTnVsbGFiaWxpdHkobm9kZS5udWxsYWJpbGl0eSk7CiAgICB3cml0ZVNwYWNlKCk7CiAgICB3cml0ZVR5cGUobm9kZS5yZXR1cm5UeXBlKTsKICB9CgogIHZvaWQgd3JpdGVCb2R5KFN0YXRlbWVudCBib2R5KSB7CiAgICBpZiAoYm9keSBpcyBCbG9jaykgewogICAgICBlbmRMaW5lKCcgeycpOwogICAgICArK2luZGVudGF0aW9uOwogICAgICBib2R5LnN0YXRlbWVudHMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgICAtLWluZGVudGF0aW9uOwogICAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICAgIGVuZExpbmUoJ30nKTsKICAgIH0gZWxzZSB7CiAgICAgIGVuZExpbmUoKTsKICAgICAgKytpbmRlbnRhdGlvbjsKICAgICAgd3JpdGVOb2RlKGJvZHkpOwogICAgICAtLWluZGVudGF0aW9uOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZVJldHVyblR5cGUoRGFydFR5cGUgdHlwZSwgU3RyaW5nIGFubm90YXRpb24pIHsKICAgIGlmICh0eXBlID09IG51bGwpIHJldHVybjsKICAgIHdyaXRlU3BhY2VkKCfihpInKTsKICAgIHdyaXRlQW5ub3RhdGVkVHlwZSh0eXBlLCBhbm5vdGF0aW9uKTsKICB9CgogIHZvaWQgd3JpdGVUeXBlUGFyYW1ldGVyTGlzdChMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzKSB7CiAgICBpZiAodHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgcmV0dXJuOwogICAgd3JpdGVTeW1ib2woJzwnKTsKICAgIHdyaXRlTGlzdCh0eXBlUGFyYW1ldGVycywgd3JpdGVOb2RlKTsKICAgIHdyaXRlU3ltYm9sKCc+Jyk7CiAgICBzdGF0ZSA9IFdPUkQ7IC8vIEVuc3VyZSBzcGFjZSBpZiBub3QgZm9sbG93ZWQgYnkgYW5vdGhlciBzeW1ib2wuCiAgfQoKICB2b2lkIHdyaXRlUGFyYW1ldGVyTGlzdChMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHBvc2l0aW9uYWwsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWQsIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICB3cml0ZVN5bWJvbCgnKCcpOwogICAgd3JpdGVMaXN0KAogICAgICAgIHBvc2l0aW9uYWwudGFrZShyZXF1aXJlZFBhcmFtZXRlckNvdW50KSwgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKTsKICAgIGlmIChyZXF1aXJlZFBhcmFtZXRlckNvdW50IDwgcG9zaXRpb25hbC5sZW5ndGgpIHsKICAgICAgaWYgKHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPiAwKSB7CiAgICAgICAgd3JpdGVDb21tYSgpOwogICAgICB9CiAgICAgIHdyaXRlU3ltYm9sKCdbJyk7CiAgICAgIHdyaXRlTGlzdCgKICAgICAgICAgIHBvc2l0aW9uYWwuc2tpcChyZXF1aXJlZFBhcmFtZXRlckNvdW50KSwgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKTsKICAgICAgd3JpdGVTeW1ib2woJ10nKTsKICAgIH0KICAgIGlmIChuYW1lZC5pc05vdEVtcHR5KSB7CiAgICAgIGlmIChwb3NpdGlvbmFsLmlzTm90RW1wdHkpIHsKICAgICAgICB3cml0ZUNvbW1hKCk7CiAgICAgIH0KICAgICAgd3JpdGVTeW1ib2woJ3snKTsKICAgICAgd3JpdGVMaXN0KG5hbWVkLCB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24pOwogICAgICB3cml0ZVN5bWJvbCgnfScpOwogICAgfQogICAgd3JpdGVTeW1ib2woJyknKTsKICB9CgogIHZvaWQgd3JpdGVMaXN0PFQ+KEl0ZXJhYmxlPFQ+IG5vZGVzLCB2b2lkIGNhbGxiYWNrKFQgeCksCiAgICAgIHtTdHJpbmcgc2VwYXJhdG9yOiAnLCd9KSB7CiAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgIGZvciAodmFyIG5vZGUgaW4gbm9kZXMpIHsKICAgICAgaWYgKGZpcnN0KSB7CiAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB3cml0ZUNvbW1hKHNlcGFyYXRvcik7CiAgICAgIH0KICAgICAgY2FsbGJhY2sobm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlQ2xhc3NSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKICAgIHdyaXRlV29yZChnZXRDbGFzc1JlZmVyZW5jZUZyb21SZWZlcmVuY2UocmVmZXJlbmNlKSk7CiAgfQoKICBTdHJpbmcgZ2V0Q2xhc3NSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKICAgIGlmIChyZWZlcmVuY2UgPT0gbnVsbCkgcmV0dXJuICc8Tm8gQ2xhc3M+JzsKICAgIGlmIChyZWZlcmVuY2Uubm9kZSAhPSBudWxsKSByZXR1cm4gZ2V0Q2xhc3NSZWZlcmVuY2UocmVmZXJlbmNlLmFzQ2xhc3MpOwogICAgaWYgKHJlZmVyZW5jZS5jYW5vbmljYWxOYW1lICE9IG51bGwpCiAgICAgIHJldHVybiBnZXRDYW5vbmljYWxOYW1lU3RyaW5nKHJlZmVyZW5jZS5jYW5vbmljYWxOYW1lKTsKICAgIHRocm93ICJOZWl0aGVyIG5vZGUgbm9yIGNhbm9uaWNhbCBuYW1lIGZvdW5kIjsKICB9CgogIHZvaWQgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKFJlZmVyZW5jZSByZWZlcmVuY2UpIHsKICAgIHdyaXRlV29yZChnZXRNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKHJlZmVyZW5jZSkpOwogIH0KCiAgU3RyaW5nIGdldE1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2UoUmVmZXJlbmNlIHJlZmVyZW5jZSkgewogICAgaWYgKHJlZmVyZW5jZSA9PSBudWxsKSByZXR1cm4gJzxObyBNZW1iZXI+JzsKICAgIGlmIChyZWZlcmVuY2Uubm9kZSAhPSBudWxsKSByZXR1cm4gZ2V0TWVtYmVyUmVmZXJlbmNlKHJlZmVyZW5jZS5hc01lbWJlcik7CiAgICBpZiAocmVmZXJlbmNlLmNhbm9uaWNhbE5hbWUgIT0gbnVsbCkKICAgICAgcmV0dXJuIGdldENhbm9uaWNhbE5hbWVTdHJpbmcocmVmZXJlbmNlLmNhbm9uaWNhbE5hbWUpOwogICAgdGhyb3cgIk5laXRoZXIgbm9kZSBub3IgY2Fub25pY2FsIG5hbWUgZm91bmQiOwogIH0KCiAgU3RyaW5nIGdldENhbm9uaWNhbE5hbWVTdHJpbmcoQ2Fub25pY2FsTmFtZSBuYW1lKSB7CiAgICBpZiAobmFtZS5pc1Jvb3QpIHRocm93ICd1bmV4cGVjdGVkIHJvb3QnOwogICAgaWYgKG5hbWUubmFtZS5zdGFydHNXaXRoKCdAJykpIHRocm93ICd1bmV4cGVjdGVkIEAnOwoKICAgIGxpYnJhcnlTdHJpbmcoQ2Fub25pY2FsTmFtZSBsaWIpIHsKICAgICAgaWYgKGxpYi5yZWZlcmVuY2U/Lm5vZGUgIT0gbnVsbCkKICAgICAgICByZXR1cm4gZ2V0TGlicmFyeVJlZmVyZW5jZShsaWIucmVmZXJlbmNlLmFzTGlicmFyeSk7CiAgICAgIHJldHVybiBzeW50aGV0aWNOYW1lcy5uYW1lQ2Fub25pY2FsTmFtZUFzTGlicmFyeVByZWZpeCgKICAgICAgICAgIGxpYi5yZWZlcmVuY2UsIGxpYik7CiAgICB9CgogICAgY2xhc3NTdHJpbmcoQ2Fub25pY2FsTmFtZSBjbHMpID0+CiAgICAgICAgbGlicmFyeVN0cmluZyhjbHMucGFyZW50KSArICc6OicgKyBjbHMubmFtZTsKCiAgICBpZiAobmFtZS5wYXJlbnQuaXNSb290KSByZXR1cm4gbGlicmFyeVN0cmluZyhuYW1lKTsKICAgIGlmIChuYW1lLnBhcmVudC5wYXJlbnQuaXNSb290KSByZXR1cm4gY2xhc3NTdHJpbmcobmFtZSk7CgogICAgQ2Fub25pY2FsTmFtZSBhdE5vZGUgPSBuYW1lLnBhcmVudDsKICAgIHdoaWxlICghYXROb2RlLm5hbWUuc3RhcnRzV2l0aCgnQCcpKSBhdE5vZGUgPSBhdE5vZGUucGFyZW50OwoKICAgIFN0cmluZyBwYXJlbnQgPSAiIjsKICAgIGlmIChhdE5vZGUucGFyZW50LnBhcmVudC5pc1Jvb3QpIHsKICAgICAgcGFyZW50ID0gbGlicmFyeVN0cmluZyhhdE5vZGUucGFyZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcmVudCA9IGNsYXNzU3RyaW5nKGF0Tm9kZS5wYXJlbnQpOwogICAgfQoKICAgIGlmIChuYW1lLm5hbWUgPT0gJycpIHJldHVybiAiJHBhcmVudDo6JGVtcHR5TmFtZVN0cmluZyI7CiAgICByZXR1cm4gIiRwYXJlbnQ6OiR7bmFtZS5uYW1lfSI7CiAgfQoKICB2b2lkIHdyaXRlVHlwZWRlZlJlZmVyZW5jZShUeXBlZGVmIHR5cGVkZWZOb2RlKSB7CiAgICB3cml0ZVdvcmQoZ2V0VHlwZWRlZlJlZmVyZW5jZSh0eXBlZGVmTm9kZSkpOwogIH0KCiAgdm9pZCB3cml0ZVZhcmlhYmxlUmVmZXJlbmNlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpIHsKICAgIGZpbmFsIGhpZ2hsaWdodCA9IHNob3VsZEhpZ2hsaWdodCh2YXJpYWJsZSk7CiAgICBpZiAoaGlnaGxpZ2h0KSB7CiAgICAgIHN0YXJ0SGlnaGxpZ2h0KHZhcmlhYmxlKTsKICAgIH0KICAgIHdyaXRlV29yZChnZXRWYXJpYWJsZVJlZmVyZW5jZSh2YXJpYWJsZSkpOwogICAgaWYgKGhpZ2hsaWdodCkgewogICAgICBlbmRIaWdobGlnaHQodmFyaWFibGUpOwogICAgfQogIH0KCiAgdm9pZCB3cml0ZVR5cGVQYXJhbWV0ZXJSZWZlcmVuY2UoVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgICB3cml0ZVdvcmQoZ2V0VHlwZVBhcmFtZXRlclJlZmVyZW5jZShub2RlKSk7CiAgfQoKICB2b2lkIHdyaXRlRXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUsIFtpbnQgbWluaW11bVByZWNlZGVuY2VdKSB7CiAgICBmaW5hbCBoaWdobGlnaHQgPSBzaG91bGRIaWdobGlnaHQobm9kZSk7CiAgICBpZiAoaGlnaGxpZ2h0KSB7CiAgICAgIHN0YXJ0SGlnaGxpZ2h0KG5vZGUpOwogICAgfQogICAgaWYgKHNob3dPZmZzZXRzKSB3cml0ZVdvcmQoIlske25vZGUuZmlsZU9mZnNldH1dIik7CiAgICBib29sIG5lZWRzUGFyZW50ZXNlcyA9IGZhbHNlOwogICAgaWYgKG1pbmltdW1QcmVjZWRlbmNlICE9IG51bGwgJiYgZ2V0UHJlY2VkZW5jZShub2RlKSA8IG1pbmltdW1QcmVjZWRlbmNlKSB7CiAgICAgIG5lZWRzUGFyZW50ZXNlcyA9IHRydWU7CiAgICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICB9CiAgICB3cml0ZU5vZGUobm9kZSk7CiAgICBpZiAobmVlZHNQYXJlbnRlc2VzKSB7CiAgICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgICB9CiAgICBpZiAoaGlnaGxpZ2h0KSB7CiAgICAgIGVuZEhpZ2hsaWdodChub2RlKTsKICAgIH0KICB9CgogIHZvaWQgd3JpdGVBbm5vdGF0aW9uKEV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVTeW1ib2woJ0AnKTsKICAgIGlmIChub2RlIGlzIENvbnN0cnVjdG9ySW52b2NhdGlvbikgewogICAgICB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgICB2aXNpdEFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUV4cHJlc3Npb24obm9kZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlQW5ub3RhdGlvbkxpc3QoTGlzdDxFeHByZXNzaW9uPiBub2Rlcywge2Jvb2wgc2VwYXJhdGVMaW5lczogdHJ1ZX0pIHsKICAgIGZvciAoRXhwcmVzc2lvbiBub2RlIGluIG5vZGVzKSB7CiAgICAgIGlmIChzZXBhcmF0ZUxpbmVzKSB7CiAgICAgICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgICB9CiAgICAgIHdyaXRlQW5ub3RhdGlvbihub2RlKTsKICAgICAgaWYgKHNlcGFyYXRlTGluZXMpIHsKICAgICAgICBlbmRMaW5lKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd3JpdGVTcGFjZSgpOwogICAgICB9CiAgICB9CiAgfQoKICB2aXNpdExpYnJhcnkoTGlicmFyeSBub2RlKSB7fQoKICB2aXNpdEZpZWxkKEZpZWxkIG5vZGUpIHsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNTdGF0aWMsICdzdGF0aWMnKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0NvdmFyaWFudCwgJ2NvdmFyaWFudCcpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzR2VuZXJpY0NvdmFyaWFudEltcGwsICdnZW5lcmljLWNvdmFyaWFudC1pbXBsJyk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNGaW5hbCwgJ2ZpbmFsJyk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNDb25zdCwgJ2NvbnN0Jyk7CiAgICAvLyBPbmx5IHNob3cgaW1wbGljaXQgZ2V0dGVyL3NldHRlciBtb2RpZmllcnMgaW4gY2FzZXMgd2hlcmUgdGhleSBhcmUKICAgIC8vIG91dCBvZiB0aGUgb3JkaW5hcnkuCiAgICBpZiAobm9kZS5pc1N0YXRpYykgewogICAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaGFzSW1wbGljaXRHZXR0ZXIsICdbZ2V0dGVyXScpOwogICAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaGFzSW1wbGljaXRTZXR0ZXIsICdbc2V0dGVyXScpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVNb2RpZmllcighbm9kZS5oYXNJbXBsaWNpdEdldHRlciwgJ1tuby1nZXR0ZXJdJyk7CiAgICAgIGlmIChub2RlLmlzRmluYWwpIHsKICAgICAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaGFzSW1wbGljaXRTZXR0ZXIsICdbc2V0dGVyXScpOwogICAgICB9IGVsc2UgewogICAgICAgIHdyaXRlTW9kaWZpZXIoIW5vZGUuaGFzSW1wbGljaXRTZXR0ZXIsICdbbm8tc2V0dGVyXScpOwogICAgICB9CiAgICB9CiAgICB3cml0ZVdvcmQoJ2ZpZWxkJyk7CiAgICB3cml0ZVNwYWNlKCk7CiAgICB3cml0ZUFubm90YXRlZFR5cGUobm9kZS50eXBlLCBhbm5vdGF0b3I/LmFubm90YXRlRmllbGQodGhpcywgbm9kZSkpOwogICAgd3JpdGVOYW1lKGdldE1lbWJlck5hbWUobm9kZSkpOwogICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5pbml0aWFsaXplcik7CiAgICB9CiAgICBpZiAoKG5vZGUuZW5jbG9zaW5nQ2xhc3MgPT0gbnVsbCAmJgogICAgICAgICAgICBub2RlLmVuY2xvc2luZ0xpYnJhcnkuZmlsZVVyaSAhPSBub2RlLmZpbGVVcmkpIHx8CiAgICAgICAgKG5vZGUuZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCAmJgogICAgICAgICAgICBub2RlLmVuY2xvc2luZ0NsYXNzLmZpbGVVcmkgIT0gbm9kZS5maWxlVXJpKSkgewogICAgICB3cml0ZVdvcmQoIi8qIGZyb20gJHtub2RlLmZpbGVVcml9ICovIik7CiAgICB9CiAgICBlbmRMaW5lKCc7Jyk7CiAgfQoKICB2aXNpdFByb2NlZHVyZShQcm9jZWR1cmUgbm9kZSkgewogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0V4dGVybmFsLCAnZXh0ZXJuYWwnKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc1N0YXRpYywgJ3N0YXRpYycpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzQWJzdHJhY3QsICdhYnN0cmFjdCcpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzRm9yd2FyZGluZ1N0dWIsICdmb3J3YXJkaW5nLXN0dWInKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0ZvcndhcmRpbmdTZW1pU3R1YiwgJ2ZvcndhcmRpbmctc2VtaS1zdHViJyk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNOb1N1Y2hNZXRob2RGb3J3YXJkZXIsICduby1zdWNoLW1ldGhvZC1mb3J3YXJkZXInKTsKICAgIHdyaXRlV29yZChwcm9jZWR1cmVLaW5kVG9TdHJpbmcobm9kZS5raW5kKSk7CiAgICBpZiAoKG5vZGUuZW5jbG9zaW5nQ2xhc3MgPT0gbnVsbCAmJgogICAgICAgICAgICBub2RlLmVuY2xvc2luZ0xpYnJhcnkuZmlsZVVyaSAhPSBub2RlLmZpbGVVcmkpIHx8CiAgICAgICAgKG5vZGUuZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCAmJgogICAgICAgICAgICBub2RlLmVuY2xvc2luZ0NsYXNzLmZpbGVVcmkgIT0gbm9kZS5maWxlVXJpKSkgewogICAgICB3cml0ZVdvcmQoIi8qIGZyb20gJHtub2RlLmZpbGVVcml9ICovIik7CiAgICB9CiAgICB3cml0ZUZ1bmN0aW9uKG5vZGUuZnVuY3Rpb24sIG5hbWU6IGdldE1lbWJlck5hbWUobm9kZSkpOwogIH0KCiAgdmlzaXRDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvciBub2RlKSB7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzRXh0ZXJuYWwsICdleHRlcm5hbCcpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzQ29uc3QsICdjb25zdCcpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzU3ludGhldGljLCAnc3ludGhldGljJyk7CiAgICB3cml0ZVdvcmQoJ2NvbnN0cnVjdG9yJyk7CiAgICB3cml0ZUZ1bmN0aW9uKG5vZGUuZnVuY3Rpb24sCiAgICAgICAgbmFtZTogbm9kZS5uYW1lLCBpbml0aWFsaXplcnM6IG5vZGUuaW5pdGlhbGl6ZXJzKTsKICB9CgogIHZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IoUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3Igbm9kZSkgewogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zKTsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0V4dGVybmFsLCAnZXh0ZXJuYWwnKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0NvbnN0LCAnY29uc3QnKTsKICAgIHdyaXRlV29yZCgncmVkaXJlY3RpbmdfZmFjdG9yeScpOwoKICAgIGlmIChub2RlLm5hbWUgIT0gbnVsbCkgewogICAgICB3cml0ZU5hbWUobm9kZS5uYW1lKTsKICAgIH0KICAgIHdyaXRlVHlwZVBhcmFtZXRlckxpc3Qobm9kZS50eXBlUGFyYW1ldGVycyk7CiAgICB3cml0ZVBhcmFtZXRlckxpc3Qobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycywgbm9kZS5uYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICAgIHdyaXRlTGlzdChub2RlLnR5cGVBcmd1bWVudHMsIHdyaXRlVHlwZSk7CiAgICAgIHdyaXRlU3ltYm9sKCc+Jyk7CiAgICB9CiAgICBlbmRMaW5lKCc7Jyk7CiAgfQoKICB2aXNpdENsYXNzKENsYXNzIG5vZGUpIHsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNBYnN0cmFjdCwgJ2Fic3RyYWN0Jyk7CiAgICB3cml0ZVdvcmQoJ2NsYXNzJyk7CiAgICB3cml0ZVdvcmQoZ2V0Q2xhc3NOYW1lKG5vZGUpKTsKICAgIHdyaXRlVHlwZVBhcmFtZXRlckxpc3Qobm9kZS50eXBlUGFyYW1ldGVycyk7CiAgICBpZiAobm9kZS5pc01peGluQXBwbGljYXRpb24pIHsKICAgICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgICAgdmlzaXRTdXBlcnR5cGUobm9kZS5zdXBlcnR5cGUpOwogICAgICB3cml0ZVNwYWNlZCgnd2l0aCcpOwogICAgICB2aXNpdFN1cGVydHlwZShub2RlLm1peGVkSW5UeXBlKTsKICAgIH0gZWxzZSBpZiAobm9kZS5zdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICB3cml0ZVNwYWNlZCgnZXh0ZW5kcycpOwogICAgICB2aXNpdFN1cGVydHlwZShub2RlLnN1cGVydHlwZSk7CiAgICB9CiAgICBpZiAobm9kZS5pbXBsZW1lbnRlZFR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgd3JpdGVTcGFjZWQoJ2ltcGxlbWVudHMnKTsKICAgICAgd3JpdGVMaXN0KG5vZGUuaW1wbGVtZW50ZWRUeXBlcywgdmlzaXRTdXBlcnR5cGUpOwogICAgfQogICAgdmFyIGVuZExpbmVTdHJpbmcgPSAnIHsnOwogICAgaWYgKG5vZGUuZW5jbG9zaW5nTGlicmFyeS5maWxlVXJpICE9IG5vZGUuZmlsZVVyaSkgewogICAgICBlbmRMaW5lU3RyaW5nICs9ICcgLy8gZnJvbSAke25vZGUuZmlsZVVyaX0nOwogICAgfQogICAgZW5kTGluZShlbmRMaW5lU3RyaW5nKTsKICAgICsraW5kZW50YXRpb247CiAgICBub2RlLmZpZWxkcy5mb3JFYWNoKHdyaXRlTm9kZSk7CiAgICBub2RlLmNvbnN0cnVjdG9ycy5mb3JFYWNoKHdyaXRlTm9kZSk7CiAgICBub2RlLnByb2NlZHVyZXMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgbm9kZS5yZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnMuZm9yRWFjaCh3cml0ZU5vZGUpOwogICAgLS1pbmRlbnRhdGlvbjsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIGVuZExpbmUoJ30nKTsKICB9CgogIHZpc2l0VHlwZWRlZihUeXBlZGVmIG5vZGUpIHsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ3R5cGVkZWYnKTsKICAgIHdyaXRlV29yZChub2RlLm5hbWUpOwogICAgd3JpdGVUeXBlUGFyYW1ldGVyTGlzdChub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICBpZiAobm9kZS50eXBlIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICB3cml0ZUZ1bmN0aW9uVHlwZShub2RlLnR5cGUsCiAgICAgICAgICB0eXBlZGVmUG9zaXRpb25hbDogbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgICAgIHR5cGVkZWZOYW1lZDogbm9kZS5uYW1lZFBhcmFtZXRlcnMpOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVOb2RlKG5vZGUudHlwZSk7CiAgICB9CiAgICBlbmRMaW5lKCc7Jyk7CiAgfQoKICB2aXNpdEludmFsaWRFeHByZXNzaW9uKEludmFsaWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlV29yZCgnaW52YWxpZC1leHByZXNzaW9uJyk7CiAgICBpZiAobm9kZS5tZXNzYWdlICE9IG51bGwpIHsKICAgICAgd3JpdGVXb3JkKCciJHtlc2NhcGVTdHJpbmcobm9kZS5tZXNzYWdlKX0iJyk7CiAgICB9CiAgfQoKICB2aXNpdE1ldGhvZEludm9jYXRpb24oTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5yZWNlaXZlciwgUHJlY2VkZW5jZS5QUklNQVJZKTsKICAgIHdyaXRlU3ltYm9sKCcuJyk7CiAgICB3cml0ZUludGVyZmFjZVRhcmdldChub2RlLm5hbWUsIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlTm9kZShub2RlLmFyZ3VtZW50cyk7CiAgfQoKICB2aXNpdERpcmVjdE1ldGhvZEludm9jYXRpb24oRGlyZWN0TWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5yZWNlaXZlciwgUHJlY2VkZW5jZS5QUklNQVJZKTsKICAgIHdyaXRlU3ltYm9sKCcuez0nKTsKICAgIHdyaXRlTWVtYmVyUmVmZXJlbmNlRnJvbVJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZVN5bWJvbCgnfScpOwogICAgd3JpdGVOb2RlKG5vZGUuYXJndW1lbnRzKTsKICB9CgogIHZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uKFN1cGVyTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICB3cml0ZVdvcmQoJ3N1cGVyJyk7CiAgICB3cml0ZVN5bWJvbCgnLicpOwogICAgd3JpdGVJbnRlcmZhY2VUYXJnZXQobm9kZS5uYW1lLCBub2RlLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZU5vZGUobm9kZS5hcmd1bWVudHMpOwogIH0KCiAgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKFN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgd3JpdGVNb2RpZmllcihub2RlLmlzQ29uc3QsICdjb25zdCcpOwogICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlTm9kZShub2RlLmFyZ3VtZW50cyk7CiAgfQoKICB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihDb25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgd3JpdGVXb3JkKG5vZGUuaXNDb25zdCA/ICdjb25zdCcgOiAnbmV3Jyk7CiAgICB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVOb2RlKG5vZGUuYXJndW1lbnRzKTsKICB9CgogIHZpc2l0Tm90KE5vdCBub2RlKSB7CiAgICB3cml0ZVN5bWJvbCgnIScpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUub3BlcmFuZCwgUHJlY2VkZW5jZS5QUkVGSVgpOwogIH0KCiAgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbihMb2dpY2FsRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpbnQgcHJlY2VkZW5jZSA9IFByZWNlZGVuY2UuYmluYXJ5UHJlY2VkZW5jZVtub2RlLm9wZXJhdG9yXTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmxlZnQsIHByZWNlZGVuY2UpOwogICAgd3JpdGVTcGFjZWQobm9kZS5vcGVyYXRvcik7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5yaWdodCwgcHJlY2VkZW5jZSArIDEpOwogIH0KCiAgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmNvbmRpdGlvbiwgUHJlY2VkZW5jZS5MT0dJQ0FMX09SKTsKICAgIGVuc3VyZVNwYWNlKCk7CiAgICB3cml0ZSgnPycpOwogICAgd3JpdGVTdGF0aWNUeXBlKG5vZGUuc3RhdGljVHlwZSk7CiAgICB3cml0ZVNwYWNlKCk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS50aGVuKTsKICAgIHdyaXRlU3BhY2VkKCc6Jyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5vdGhlcndpc2UpOwogIH0KCiAgU3RyaW5nIGdldEVzY2FwZWRDaGFyYWN0ZXIoaW50IGNvZGVVbml0KSB7CiAgICBzd2l0Y2ggKGNvZGVVbml0KSB7CiAgICAgIGNhc2UgOToKICAgICAgICByZXR1cm4gcidcdCc7CiAgICAgIGNhc2UgMTA6CiAgICAgICAgcmV0dXJuIHInXG4nOwogICAgICBjYXNlIDExOgogICAgICAgIHJldHVybiByJ1x2JzsKICAgICAgY2FzZSAxMjoKICAgICAgICByZXR1cm4gcidcZic7CiAgICAgIGNhc2UgMTM6CiAgICAgICAgcmV0dXJuIHInXHInOwogICAgICBjYXNlIDM0OgogICAgICAgIHJldHVybiByJ1wiJzsKICAgICAgY2FzZSAzNjoKICAgICAgICByZXR1cm4gcidcJCc7CiAgICAgIGNhc2UgOTI6CiAgICAgICAgcmV0dXJuIHInXFwnOwogICAgICBkZWZhdWx0OgogICAgICAgIGlmIChjb2RlVW5pdCA8IDMyIHx8IGNvZGVVbml0ID4gMTI2KSB7CiAgICAgICAgICByZXR1cm4gcidcdScgKyAnJGNvZGVVbml0Jy5wYWRMZWZ0KDQsICcwJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KICB9CgogIFN0cmluZyBlc2NhcGVTdHJpbmcoU3RyaW5nIHN0cmluZykgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlcjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgKytpKSB7CiAgICAgIFN0cmluZyBjaGFyYWN0ZXIgPSBnZXRFc2NhcGVkQ2hhcmFjdGVyKHN0cmluZy5jb2RlVW5pdEF0KGkpKTsKICAgICAgaWYgKGNoYXJhY3RlciAhPSBudWxsKSB7CiAgICAgICAgYnVmZmVyID8/PSBuZXcgU3RyaW5nQnVmZmVyKHN0cmluZy5zdWJzdHJpbmcoMCwgaSkpOwogICAgICAgIGJ1ZmZlci53cml0ZShjaGFyYWN0ZXIpOwogICAgICB9IGVsc2UgewogICAgICAgIGJ1ZmZlcj8ud3JpdGUoc3RyaW5nW2ldKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJ1ZmZlciA9PSBudWxsID8gc3RyaW5nIDogYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICBpZiAoc3RhdGUgPT0gV09SRCkgewogICAgICB3cml0ZVNwYWNlKCk7CiAgICB9CiAgICB3cml0ZSgnIicpOwogICAgZm9yICh2YXIgcGFydCBpbiBub2RlLmV4cHJlc3Npb25zKSB7CiAgICAgIGlmIChwYXJ0IGlzIFN0cmluZ0xpdGVyYWwpIHsKICAgICAgICB3cml0ZVN5bWJvbChlc2NhcGVTdHJpbmcocGFydC52YWx1ZSkpOwogICAgICB9IGVsc2UgewogICAgICAgIHdyaXRlU3ltYm9sKHInJHsnKTsKICAgICAgICB3cml0ZUV4cHJlc3Npb24ocGFydCk7CiAgICAgICAgd3JpdGVTeW1ib2woJ30nKTsKICAgICAgfQogICAgfQogICAgd3JpdGUoJyInKTsKICAgIHN0YXRlID0gV09SRDsKICB9CgogIHZpc2l0TGlzdENvbmNhdGVuYXRpb24oTGlzdENvbmNhdGVuYXRpb24gbm9kZSkgewogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBmb3IgKEV4cHJlc3Npb24gcGFydCBpbiBub2RlLmxpc3RzKSB7CiAgICAgIGlmICghZmlyc3QpIHdyaXRlU3BhY2VkKCcrJyk7CiAgICAgIHdyaXRlRXhwcmVzc2lvbihwYXJ0KTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0KICB9CgogIHZpc2l0U2V0Q29uY2F0ZW5hdGlvbihTZXRDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgZm9yIChFeHByZXNzaW9uIHBhcnQgaW4gbm9kZS5zZXRzKSB7CiAgICAgIGlmICghZmlyc3QpIHdyaXRlU3BhY2VkKCcrJyk7CiAgICAgIHdyaXRlRXhwcmVzc2lvbihwYXJ0KTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0KICB9CgogIHZpc2l0TWFwQ29uY2F0ZW5hdGlvbihNYXBDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgZm9yIChFeHByZXNzaW9uIHBhcnQgaW4gbm9kZS5tYXBzKSB7CiAgICAgIGlmICghZmlyc3QpIHdyaXRlU3BhY2VkKCcrJyk7CiAgICAgIHdyaXRlRXhwcmVzc2lvbihwYXJ0KTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0KICB9CgogIHZpc2l0SW5zdGFuY2VDcmVhdGlvbihJbnN0YW5jZUNyZWF0aW9uIG5vZGUpIHsKICAgIHdyaXRlQ2xhc3NSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUuY2xhc3NSZWZlcmVuY2UpOwogICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICAgIHdyaXRlTGlzdChub2RlLnR5cGVBcmd1bWVudHMsIHdyaXRlVHlwZSk7CiAgICAgIHdyaXRlU3ltYm9sKCc+Jyk7CiAgICB9CiAgICB3cml0ZVN5bWJvbCgneycpOwogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBub2RlLmZpZWxkVmFsdWVzLmZvckVhY2goKFJlZmVyZW5jZSBmaWVsZFJlZiwgRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgd3JpdGVDb21tYSgpOwogICAgICB9CiAgICAgIHdyaXRlV29yZCgnJHtmaWVsZFJlZi5hc0ZpZWxkLm5hbWUubmFtZX0nKTsKICAgICAgd3JpdGVTeW1ib2woJzonKTsKICAgICAgd3JpdGVFeHByZXNzaW9uKHZhbHVlKTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0pOwogICAgZm9yIChBc3NlcnRTdGF0ZW1lbnQgYXNzZXJ0XyBpbiBub2RlLmFzc2VydHMpIHsKICAgICAgaWYgKCFmaXJzdCkgewogICAgICAgIHdyaXRlQ29tbWEoKTsKICAgICAgfQogICAgICB3cml0ZSgnYXNzZXJ0KCcpOwogICAgICB3cml0ZUV4cHJlc3Npb24oYXNzZXJ0Xy5jb25kaXRpb24pOwogICAgICBpZiAoYXNzZXJ0Xy5tZXNzYWdlICE9IG51bGwpIHsKICAgICAgICB3cml0ZUNvbW1hKCk7CiAgICAgICAgd3JpdGVFeHByZXNzaW9uKGFzc2VydF8ubWVzc2FnZSk7CiAgICAgIH0KICAgICAgd3JpdGUoJyknKTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0KICAgIGZvciAoRXhwcmVzc2lvbiB1bnVzZWRBcmd1bWVudCBpbiBub2RlLnVudXNlZEFyZ3VtZW50cykgewogICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgd3JpdGVDb21tYSgpOwogICAgICB9CiAgICAgIHdyaXRlRXhwcmVzc2lvbih1bnVzZWRBcmd1bWVudCk7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICB9CiAgICB3cml0ZVN5bWJvbCgnfScpOwogIH0KCiAgdmlzaXRJc0V4cHJlc3Npb24oSXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLm9wZXJhbmQsIFByZWNlZGVuY2UuQklUV0lTRV9PUik7CiAgICB3cml0ZVNwYWNlZCgnaXMnKTsKICAgIHdyaXRlVHlwZShub2RlLnR5cGUpOwogIH0KCiAgdmlzaXRBc0V4cHJlc3Npb24oQXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLm9wZXJhbmQsIFByZWNlZGVuY2UuQklUV0lTRV9PUik7CiAgICB3cml0ZVNwYWNlZChub2RlLmlzVHlwZUVycm9yID8gJ2Fze1R5cGVFcnJvcn0nIDogJ2FzJyk7CiAgICB3cml0ZVR5cGUobm9kZS50eXBlKTsKICB9CgogIHZpc2l0U3ltYm9sTGl0ZXJhbChTeW1ib2xMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlU3ltYm9sKCcjJyk7CiAgICB3cml0ZVdvcmQobm9kZS52YWx1ZSk7CiAgfQoKICB2aXNpdFR5cGVMaXRlcmFsKFR5cGVMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlVHlwZShub2RlLnR5cGUpOwogIH0KCiAgdmlzaXRUaGlzRXhwcmVzc2lvbihUaGlzRXhwcmVzc2lvbiBub2RlKSB7CiAgICB3cml0ZVdvcmQoJ3RoaXMnKTsKICB9CgogIHZpc2l0UmV0aHJvdyhSZXRocm93IG5vZGUpIHsKICAgIHdyaXRlV29yZCgncmV0aHJvdycpOwogIH0KCiAgdmlzaXRUaHJvdyhUaHJvdyBub2RlKSB7CiAgICB3cml0ZVdvcmQoJ3Rocm93Jyk7CiAgICB3cml0ZVNwYWNlKCk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKTsKICB9CgogIHZpc2l0TGlzdExpdGVyYWwoTGlzdExpdGVyYWwgbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICB3cml0ZVdvcmQoJ2NvbnN0Jyk7CiAgICAgIHdyaXRlU3BhY2UoKTsKICAgIH0KICAgIGlmIChub2RlLnR5cGVBcmd1bWVudCAhPSBudWxsKSB7CiAgICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICAgIHdyaXRlVHlwZShub2RlLnR5cGVBcmd1bWVudCk7CiAgICAgIHdyaXRlU3ltYm9sKCc+Jyk7CiAgICB9CiAgICB3cml0ZVN5bWJvbCgnWycpOwogICAgd3JpdGVMaXN0KG5vZGUuZXhwcmVzc2lvbnMsIHdyaXRlTm9kZSk7CiAgICB3cml0ZVN5bWJvbCgnXScpOwogIH0KCiAgdmlzaXRTZXRMaXRlcmFsKFNldExpdGVyYWwgbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICB3cml0ZVdvcmQoJ2NvbnN0Jyk7CiAgICAgIHdyaXRlU3BhY2UoKTsKICAgIH0KICAgIGlmIChub2RlLnR5cGVBcmd1bWVudCAhPSBudWxsKSB7CiAgICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICAgIHdyaXRlVHlwZShub2RlLnR5cGVBcmd1bWVudCk7CiAgICAgIHdyaXRlU3ltYm9sKCc+Jyk7CiAgICB9CiAgICB3cml0ZVN5bWJvbCgneycpOwogICAgd3JpdGVMaXN0KG5vZGUuZXhwcmVzc2lvbnMsIHdyaXRlTm9kZSk7CiAgICB3cml0ZVN5bWJvbCgnfScpOwogIH0KCiAgdmlzaXRNYXBMaXRlcmFsKE1hcExpdGVyYWwgbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICB3cml0ZVdvcmQoJ2NvbnN0Jyk7CiAgICAgIHdyaXRlU3BhY2UoKTsKICAgIH0KICAgIGlmIChub2RlLmtleVR5cGUgIT0gbnVsbCkgewogICAgICB3cml0ZVN5bWJvbCgnPCcpOwogICAgICB3cml0ZUxpc3QoW25vZGUua2V5VHlwZSwgbm9kZS52YWx1ZVR5cGVdLCB3cml0ZVR5cGUpOwogICAgICB3cml0ZVN5bWJvbCgnPicpOwogICAgfQogICAgd3JpdGVTeW1ib2woJ3snKTsKICAgIHdyaXRlTGlzdChub2RlLmVudHJpZXMsIHdyaXRlTm9kZSk7CiAgICB3cml0ZVN5bWJvbCgnfScpOwogIH0KCiAgdmlzaXRNYXBFbnRyeShNYXBFbnRyeSBub2RlKSB7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5rZXkpOwogICAgd3JpdGVDb21tYSgnOicpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUudmFsdWUpOwogIH0KCiAgdmlzaXRBd2FpdEV4cHJlc3Npb24oQXdhaXRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlV29yZCgnYXdhaXQnKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLm9wZXJhbmQpOwogIH0KCiAgdmlzaXRGdW5jdGlvbkV4cHJlc3Npb24oRnVuY3Rpb25FeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlRnVuY3Rpb24obm9kZS5mdW5jdGlvbiwgdGVybWluYXRlTGluZTogZmFsc2UpOwogIH0KCiAgdmlzaXRTdHJpbmdMaXRlcmFsKFN0cmluZ0xpdGVyYWwgbm9kZSkgewogICAgd3JpdGVXb3JkKCciJHtlc2NhcGVTdHJpbmcobm9kZS52YWx1ZSl9IicpOwogIH0KCiAgdmlzaXRJbnRMaXRlcmFsKEludExpdGVyYWwgbm9kZSkgewogICAgd3JpdGVXb3JkKCcke25vZGUudmFsdWV9Jyk7CiAgfQoKICB2aXNpdERvdWJsZUxpdGVyYWwoRG91YmxlTGl0ZXJhbCBub2RlKSB7CiAgICB3cml0ZVdvcmQoJyR7bm9kZS52YWx1ZX0nKTsKICB9CgogIHZpc2l0Qm9vbExpdGVyYWwoQm9vbExpdGVyYWwgbm9kZSkgewogICAgd3JpdGVXb3JkKCcke25vZGUudmFsdWV9Jyk7CiAgfQoKICB2aXNpdE51bGxMaXRlcmFsKE51bGxMaXRlcmFsIG5vZGUpIHsKICAgIHdyaXRlV29yZCgnbnVsbCcpOwogIH0KCiAgdmlzaXRMZXQoTGV0IG5vZGUpIHsKICAgIHdyaXRlV29yZCgnbGV0Jyk7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24obm9kZS52YXJpYWJsZSk7CiAgICB3cml0ZVNwYWNlZCgnaW4nKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmJvZHkpOwogIH0KCiAgdmlzaXRCbG9ja0V4cHJlc3Npb24oQmxvY2tFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlU3BhY2VkKCdibG9jaycpOwogICAgd3JpdGVCbG9ja0JvZHkobm9kZS5ib2R5LnN0YXRlbWVudHMsIGFzRXhwcmVzc2lvbjogdHJ1ZSk7CiAgICB3cml0ZVN5bWJvbCgnID0+Jyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS52YWx1ZSk7CiAgfQoKICB2aXNpdEluc3RhbnRpYXRpb24oSW5zdGFudGlhdGlvbiBub2RlKSB7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKTsKICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICB3cml0ZUxpc3Qobm9kZS50eXBlQXJndW1lbnRzLCB3cml0ZVR5cGUpOwogICAgd3JpdGVTeW1ib2woJz4nKTsKICB9CgogIHZpc2l0TG9hZExpYnJhcnkoTG9hZExpYnJhcnkgbm9kZSkgewogICAgd3JpdGVXb3JkKCdMb2FkTGlicmFyeScpOwogICAgd3JpdGVTeW1ib2woJygnKTsKICAgIHdyaXRlV29yZChub2RlLmltcG9ydC5uYW1lKTsKICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgICBzdGF0ZSA9IFdPUkQ7CiAgfQoKICB2aXNpdENoZWNrTGlicmFyeUlzTG9hZGVkKENoZWNrTGlicmFyeUlzTG9hZGVkIG5vZGUpIHsKICAgIHdyaXRlV29yZCgnQ2hlY2tMaWJyYXJ5SXNMb2FkZWQnKTsKICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICB3cml0ZVdvcmQobm9kZS5pbXBvcnQubmFtZSk7CiAgICB3cml0ZVN5bWJvbCgnKScpOwogICAgc3RhdGUgPSBXT1JEOwogIH0KCiAgdmlzaXRMaWJyYXJ5UGFydChMaWJyYXJ5UGFydCBub2RlKSB7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMpOwogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVXb3JkKCdwYXJ0Jyk7CiAgICB3cml0ZVdvcmQobm9kZS5wYXJ0VXJpKTsKICAgIGVuZExpbmUoIjsiKTsKICB9CgogIHZpc2l0TGlicmFyeURlcGVuZGVuY3koTGlicmFyeURlcGVuZGVuY3kgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVXb3JkKG5vZGUuaXNJbXBvcnQgPyAnaW1wb3J0JyA6ICdleHBvcnQnKTsKICAgIHZhciB1cmlTdHJpbmc7CiAgICBpZiAobm9kZS5pbXBvcnRlZExpYnJhcnlSZWZlcmVuY2U/Lm5vZGUgIT0gbnVsbCkgewogICAgICB1cmlTdHJpbmcgPSAnJHtub2RlLnRhcmdldExpYnJhcnkuaW1wb3J0VXJpfSc7CiAgICB9IGVsc2UgewogICAgICB1cmlTdHJpbmcgPSAnJHtub2RlLmltcG9ydGVkTGlicmFyeVJlZmVyZW5jZT8uY2Fub25pY2FsTmFtZT8ubmFtZX0nOwogICAgfQogICAgd3JpdGVXb3JkKCciJHVyaVN0cmluZyInKTsKICAgIGlmIChub2RlLmlzRGVmZXJyZWQpIHsKICAgICAgd3JpdGVXb3JkKCdkZWZlcnJlZCcpOwogICAgfQogICAgaWYgKG5vZGUubmFtZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlV29yZCgnYXMnKTsKICAgICAgd3JpdGVXb3JkKG5vZGUubmFtZSk7CiAgICB9CiAgICBlbmRMaW5lKCc7Jyk7CiAgfQoKICBkZWZhdWx0RXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUpIHsKICAgIHdyaXRlV29yZCgnJHtub2RlLnJ1bnRpbWVUeXBlfScpOwogIH0KCiAgdmlzaXRWYXJpYWJsZUdldChWYXJpYWJsZUdldCBub2RlKSB7CiAgICB3cml0ZVZhcmlhYmxlUmVmZXJlbmNlKG5vZGUudmFyaWFibGUpOwogICAgaWYgKG5vZGUucHJvbW90ZWRUeXBlICE9IG51bGwpIHsKICAgICAgd3JpdGVTeW1ib2woJ3snKTsKICAgICAgd3JpdGVOb2RlKG5vZGUucHJvbW90ZWRUeXBlKTsKICAgICAgd3JpdGVTeW1ib2woJ30nKTsKICAgICAgc3RhdGUgPSBXT1JEOwogICAgfQogIH0KCiAgdmlzaXRWYXJpYWJsZVNldChWYXJpYWJsZVNldCBub2RlKSB7CiAgICB3cml0ZVZhcmlhYmxlUmVmZXJlbmNlKG5vZGUudmFyaWFibGUpOwogICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnZhbHVlKTsKICB9CgogIHZvaWQgd3JpdGVJbnRlcmZhY2VUYXJnZXQoTmFtZSBuYW1lLCBSZWZlcmVuY2UgdGFyZ2V0KSB7CiAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHsKICAgICAgd3JpdGVTeW1ib2woJ3snKTsKICAgICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKHRhcmdldCk7CiAgICAgIHdyaXRlU3ltYm9sKCd9Jyk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZU5hbWUobmFtZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlU3RhdGljVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlU3ltYm9sKCd7Jyk7CiAgICAgIHdyaXRlVHlwZSh0eXBlKTsKICAgICAgd3JpdGVTeW1ib2woJ30nKTsKICAgIH0KICB9CgogIHZpc2l0UHJvcGVydHlHZXQoUHJvcGVydHlHZXQgbm9kZSkgewogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUucmVjZWl2ZXIsIFByZWNlZGVuY2UuUFJJTUFSWSk7CiAgICB3cml0ZVN5bWJvbCgnLicpOwogICAgd3JpdGVJbnRlcmZhY2VUYXJnZXQobm9kZS5uYW1lLCBub2RlLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICB2aXNpdFByb3BlcnR5U2V0KFByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBQcmVjZWRlbmNlLlBSSU1BUlkpOwogICAgd3JpdGVTeW1ib2woJy4nKTsKICAgIHdyaXRlSW50ZXJmYWNlVGFyZ2V0KG5vZGUubmFtZSwgbm9kZS5pbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2UpOwogICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnZhbHVlKTsKICB9CgogIHZpc2l0U3VwZXJQcm9wZXJ0eUdldChTdXBlclByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHdyaXRlV29yZCgnc3VwZXInKTsKICAgIHdyaXRlU3ltYm9sKCcuJyk7CiAgICB3cml0ZUludGVyZmFjZVRhcmdldChub2RlLm5hbWUsIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIHZpc2l0U3VwZXJQcm9wZXJ0eVNldChTdXBlclByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHdyaXRlV29yZCgnc3VwZXInKTsKICAgIHdyaXRlU3ltYm9sKCcuJyk7CiAgICB3cml0ZUludGVyZmFjZVRhcmdldChub2RlLm5hbWUsIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS52YWx1ZSk7CiAgfQoKICB2aXNpdERpcmVjdFByb3BlcnR5R2V0KERpcmVjdFByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBQcmVjZWRlbmNlLlBSSU1BUlkpOwogICAgd3JpdGVTeW1ib2woJy57PScpOwogICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlU3ltYm9sKCd9Jyk7CiAgfQoKICB2aXNpdERpcmVjdFByb3BlcnR5U2V0KERpcmVjdFByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLnJlY2VpdmVyLCBQcmVjZWRlbmNlLlBSSU1BUlkpOwogICAgd3JpdGVTeW1ib2woJy57PScpOwogICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlU3ltYm9sKCd9Jyk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUudmFsdWUpOwogIH0KCiAgdmlzaXRTdGF0aWNHZXQoU3RhdGljR2V0IG5vZGUpIHsKICAgIHdyaXRlTWVtYmVyUmVmZXJlbmNlRnJvbVJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICB2aXNpdFN0YXRpY1NldChTdGF0aWNTZXQgbm9kZSkgewogICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS52YWx1ZSk7CiAgfQoKICB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoRXhwcmVzc2lvblN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKTsKICAgIGVuZExpbmUoJzsnKTsKICB9CgogIHZvaWQgd3JpdGVCbG9ja0JvZHkoTGlzdDxTdGF0ZW1lbnQ+IHN0YXRlbWVudHMsIHtib29sIGFzRXhwcmVzc2lvbiA9IGZhbHNlfSkgewogICAgaWYgKHN0YXRlbWVudHMuaXNFbXB0eSkgewogICAgICBhc0V4cHJlc3Npb24gPyB3cml0ZVN5bWJvbCgne30nKSA6IGVuZExpbmUoJ3t9Jyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGVuZExpbmUoJ3snKTsKICAgICsraW5kZW50YXRpb247CiAgICBzdGF0ZW1lbnRzLmZvckVhY2god3JpdGVOb2RlKTsKICAgIC0taW5kZW50YXRpb247CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICBhc0V4cHJlc3Npb24gPyB3cml0ZVN5bWJvbCgnfScpIDogZW5kTGluZSgnfScpOwogIH0KCiAgdmlzaXRCbG9jayhCbG9jayBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZUJsb2NrQm9keShub2RlLnN0YXRlbWVudHMpOwogIH0KCiAgdmlzaXRBc3NlcnRCbG9jayhBc3NlcnRCbG9jayBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVNwYWNlZCgnYXNzZXJ0Jyk7CiAgICB3cml0ZUJsb2NrQm9keShub2RlLnN0YXRlbWVudHMpOwogIH0KCiAgdmlzaXRFbXB0eVN0YXRlbWVudChFbXB0eVN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICBlbmRMaW5lKCc7Jyk7CiAgfQoKICB2aXNpdEFzc2VydFN0YXRlbWVudChBc3NlcnRTdGF0ZW1lbnQgbm9kZSwge2Jvb2wgYXNFeHByZXNzaW9uID0gZmFsc2V9KSB7CiAgICBpZiAoIWFzRXhwcmVzc2lvbikgewogICAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB9CiAgICB3cml0ZVdvcmQoJ2Fzc2VydCcpOwogICAgd3JpdGVTeW1ib2woJygnKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmNvbmRpdGlvbik7CiAgICBpZiAobm9kZS5tZXNzYWdlICE9IG51bGwpIHsKICAgICAgd3JpdGVDb21tYSgpOwogICAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5tZXNzYWdlKTsKICAgIH0KICAgIGlmICghYXNFeHByZXNzaW9uKSB7CiAgICAgIGVuZExpbmUoJyk7Jyk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZVN5bWJvbCgnKScpOwogICAgfQogIH0KCiAgdmlzaXRMYWJlbGVkU3RhdGVtZW50KExhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVXb3JkKHN5bnRoZXRpY05hbWVzLm5hbWVMYWJlbGVkU3RhdGVtZW50KG5vZGUpKTsKICAgIGVuZExpbmUoJzonKTsKICAgIHdyaXRlTm9kZShub2RlLmJvZHkpOwogIH0KCiAgdmlzaXRCcmVha1N0YXRlbWVudChCcmVha1N0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ2JyZWFrJyk7CiAgICB3cml0ZVdvcmQoc3ludGhldGljTmFtZXMubmFtZUxhYmVsZWRTdGF0ZW1lbnQobm9kZS50YXJnZXQpKTsKICAgIGVuZExpbmUoJzsnKTsKICB9CgogIHZpc2l0V2hpbGVTdGF0ZW1lbnQoV2hpbGVTdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVTcGFjZWQoJ3doaWxlJyk7CiAgICB3cml0ZVN5bWJvbCgnKCcpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUuY29uZGl0aW9uKTsKICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgICB3cml0ZUJvZHkobm9kZS5ib2R5KTsKICB9CgogIHZpc2l0RG9TdGF0ZW1lbnQoRG9TdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVXb3JkKCdkbycpOwogICAgd3JpdGVCb2R5KG5vZGUuYm9keSk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVNwYWNlZCgnd2hpbGUnKTsKICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5jb25kaXRpb24pOwogICAgZW5kTGluZSgnKScpOwogIH0KCiAgdmlzaXRGb3JTdGF0ZW1lbnQoRm9yU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlU3BhY2VkKCdmb3InKTsKICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICB3cml0ZUxpc3Qobm9kZS52YXJpYWJsZXMsIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbik7CiAgICB3cml0ZUNvbW1hKCc7Jyk7CiAgICBpZiAobm9kZS5jb25kaXRpb24gIT0gbnVsbCkgewogICAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5jb25kaXRpb24pOwogICAgfQogICAgd3JpdGVDb21tYSgnOycpOwogICAgd3JpdGVMaXN0KG5vZGUudXBkYXRlcywgd3JpdGVFeHByZXNzaW9uKTsKICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgICB3cml0ZUJvZHkobm9kZS5ib2R5KTsKICB9CgogIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgaWYgKG5vZGUuaXNBc3luYykgewogICAgICB3cml0ZVNwYWNlZCgnYXdhaXQnKTsKICAgIH0KICAgIHdyaXRlU3BhY2VkKCdmb3InKTsKICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICB3cml0ZVZhcmlhYmxlRGVjbGFyYXRpb24obm9kZS52YXJpYWJsZSwgdXNlVmFyS2V5d29yZDogdHJ1ZSk7CiAgICB3cml0ZVNwYWNlZCgnaW4nKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLml0ZXJhYmxlKTsKICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgICB3cml0ZUJvZHkobm9kZS5ib2R5KTsKICB9CgogIHZpc2l0U3dpdGNoU3RhdGVtZW50KFN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ3N3aXRjaCcpOwogICAgd3JpdGVTeW1ib2woJygnKTsKICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24pOwogICAgZW5kTGluZSgnKSB7Jyk7CiAgICArK2luZGVudGF0aW9uOwogICAgbm9kZS5jYXNlcy5mb3JFYWNoKHdyaXRlTm9kZSk7CiAgICAtLWluZGVudGF0aW9uOwogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgZW5kTGluZSgnfScpOwogIH0KCiAgdmlzaXRTd2l0Y2hDYXNlKFN3aXRjaENhc2Ugbm9kZSkgewogICAgU3RyaW5nIGxhYmVsID0gc3ludGhldGljTmFtZXMubmFtZVN3aXRjaENhc2Uobm9kZSk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQobGFiZWwpOwogICAgZW5kTGluZSgnOicpOwogICAgZm9yICh2YXIgZXhwcmVzc2lvbiBpbiBub2RlLmV4cHJlc3Npb25zKSB7CiAgICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgICAgd3JpdGVXb3JkKCdjYXNlJyk7CiAgICAgIHdyaXRlRXhwcmVzc2lvbihleHByZXNzaW9uKTsKICAgICAgZW5kTGluZSgnOicpOwogICAgfQogICAgaWYgKG5vZGUuaXNEZWZhdWx0KSB7CiAgICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgICAgd3JpdGVXb3JkKCdkZWZhdWx0Jyk7CiAgICAgIGVuZExpbmUoJzonKTsKICAgIH0KICAgICsraW5kZW50YXRpb247CiAgICB3cml0ZU5vZGUobm9kZS5ib2R5KTsKICAgIC0taW5kZW50YXRpb247CiAgfQoKICB2aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KENvbnRpbnVlU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlV29yZCgnY29udGludWUnKTsKICAgIHdyaXRlV29yZChzeW50aGV0aWNOYW1lcy5uYW1lU3dpdGNoQ2FzZShub2RlLnRhcmdldCkpOwogICAgZW5kTGluZSgnOycpOwogIH0KCiAgdmlzaXRJZlN0YXRlbWVudChJZlN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ2lmJyk7CiAgICB3cml0ZVN5bWJvbCgnKCcpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUuY29uZGl0aW9uKTsKICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgICB3cml0ZUJvZHkobm9kZS50aGVuKTsKICAgIGlmIChub2RlLm90aGVyd2lzZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgICAgd3JpdGVXb3JkKCdlbHNlJyk7CiAgICAgIHdyaXRlQm9keShub2RlLm90aGVyd2lzZSk7CiAgICB9CiAgfQoKICB2aXNpdFJldHVyblN0YXRlbWVudChSZXR1cm5TdGF0ZW1lbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVXb3JkKCdyZXR1cm4nKTsKICAgIGlmIChub2RlLmV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICB3cml0ZVNwYWNlKCk7CiAgICAgIHdyaXRlRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24pOwogICAgfQogICAgZW5kTGluZSgnOycpOwogIH0KCiAgdmlzaXRUcnlDYXRjaChUcnlDYXRjaCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ3RyeScpOwogICAgd3JpdGVCb2R5KG5vZGUuYm9keSk7CiAgICBub2RlLmNhdGNoZXMuZm9yRWFjaCh3cml0ZU5vZGUpOwogIH0KCiAgdmlzaXRDYXRjaChDYXRjaCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICBpZiAobm9kZS5ndWFyZCAhPSBudWxsKSB7CiAgICAgIHdyaXRlV29yZCgnb24nKTsKICAgICAgd3JpdGVUeXBlKG5vZGUuZ3VhcmQpOwogICAgICB3cml0ZVNwYWNlKCk7CiAgICB9CiAgICB3cml0ZVdvcmQoJ2NhdGNoJyk7CiAgICB3cml0ZVN5bWJvbCgnKCcpOwogICAgaWYgKG5vZGUuZXhjZXB0aW9uICE9IG51bGwpIHsKICAgICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUuZXhjZXB0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlV29yZCgnbm8tZXhjZXB0aW9uLXZhcicpOwogICAgfQogICAgaWYgKG5vZGUuc3RhY2tUcmFjZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlQ29tbWEoKTsKICAgICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUuc3RhY2tUcmFjZSk7CiAgICB9CiAgICB3cml0ZVN5bWJvbCgnKScpOwogICAgd3JpdGVCb2R5KG5vZGUuYm9keSk7CiAgfQoKICB2aXNpdFRyeUZpbmFsbHkoVHJ5RmluYWxseSBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ3RyeScpOwogICAgd3JpdGVCb2R5KG5vZGUuYm9keSk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ2ZpbmFsbHknKTsKICAgIHdyaXRlQm9keShub2RlLmZpbmFsaXplcik7CiAgfQoKICB2aXNpdFlpZWxkU3RhdGVtZW50KFlpZWxkU3RhdGVtZW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIGlmIChub2RlLmlzWWllbGRTdGFyKSB7CiAgICAgIHdyaXRlV29yZCgneWllbGQqJyk7CiAgICB9IGVsc2UgaWYgKG5vZGUuaXNOYXRpdmUpIHsKICAgICAgd3JpdGVXb3JkKCdbeWllbGRdJyk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZVdvcmQoJ3lpZWxkJyk7CiAgICB9CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKTsKICAgIGVuZExpbmUoJzsnKTsKICB9CgogIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLCB1c2VWYXJLZXl3b3JkOiB0cnVlKTsKICAgIGVuZExpbmUoJzsnKTsKICB9CgogIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHdyaXRlQW5ub3RhdGlvbkxpc3Qobm9kZS52YXJpYWJsZS5hbm5vdGF0aW9ucyk7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZVdvcmQoJ2Z1bmN0aW9uJyk7CiAgICBpZiAobm9kZS5mdW5jdGlvbiAhPSBudWxsKSB7CiAgICAgIHdyaXRlRnVuY3Rpb24obm9kZS5mdW5jdGlvbiwgbmFtZTogZ2V0VmFyaWFibGVOYW1lKG5vZGUudmFyaWFibGUpKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlV29yZChnZXRWYXJpYWJsZU5hbWUobm9kZS52YXJpYWJsZSkpOwogICAgICBlbmRMaW5lKCcuLi47Jyk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUsCiAgICAgIHtib29sIHVzZVZhcktleXdvcmQ6IGZhbHNlfSkgewogICAgaWYgKHNob3dPZmZzZXRzKSB3cml0ZVdvcmQoIlske25vZGUuZmlsZU9mZnNldH1dIik7CiAgICBpZiAoc2hvd01ldGFkYXRhKSB3cml0ZU1ldGFkYXRhKG5vZGUpOwogICAgd3JpdGVBbm5vdGF0aW9uTGlzdChub2RlLmFubm90YXRpb25zLCBzZXBhcmF0ZUxpbmVzOiBmYWxzZSk7CiAgICB3cml0ZU1vZGlmaWVyKG5vZGUuaXNDb3ZhcmlhbnQsICdjb3ZhcmlhbnQnKTsKICAgIHdyaXRlTW9kaWZpZXIobm9kZS5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsLCAnZ2VuZXJpYy1jb3ZhcmlhbnQtaW1wbCcpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzRmluYWwsICdmaW5hbCcpOwogICAgd3JpdGVNb2RpZmllcihub2RlLmlzQ29uc3QsICdjb25zdCcpOwogICAgaWYgKG5vZGUudHlwZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlQW5ub3RhdGVkVHlwZShub2RlLnR5cGUsIGFubm90YXRvcj8uYW5ub3RhdGVWYXJpYWJsZSh0aGlzLCBub2RlKSk7CiAgICB9CiAgICBpZiAodXNlVmFyS2V5d29yZCAmJiAhbm9kZS5pc0ZpbmFsICYmICFub2RlLmlzQ29uc3QgJiYgbm9kZS50eXBlID09IG51bGwpIHsKICAgICAgd3JpdGVXb3JkKCd2YXInKTsKICAgIH0KICAgIHdyaXRlV29yZChnZXRWYXJpYWJsZU5hbWUobm9kZSkpOwogICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgICB3cml0ZUV4cHJlc3Npb24obm9kZS5pbml0aWFsaXplcik7CiAgICB9CiAgfQoKICB2aXNpdEFyZ3VtZW50cyhBcmd1bWVudHMgbm9kZSkgewogICAgaWYgKG5vZGUudHlwZXMuaXNOb3RFbXB0eSkgewogICAgICB3cml0ZVN5bWJvbCgnPCcpOwogICAgICB3cml0ZUxpc3Qobm9kZS50eXBlcywgd3JpdGVUeXBlKTsKICAgICAgd3JpdGVTeW1ib2woJz4nKTsKICAgIH0KICAgIHdyaXRlU3ltYm9sKCcoJyk7CiAgICB2YXIgYWxsQXJncyA9CiAgICAgICAgPExpc3Q8VHJlZU5vZGU+Pltub2RlLnBvc2l0aW9uYWwsIG5vZGUubmFtZWRdLmV4cGFuZCgoeCkgPT4geCk7CiAgICB3cml0ZUxpc3QoYWxsQXJncywgd3JpdGVOb2RlKTsKICAgIHdyaXRlU3ltYm9sKCcpJyk7CiAgfQoKICB2aXNpdE5hbWVkRXhwcmVzc2lvbihOYW1lZEV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVXb3JkKG5vZGUubmFtZSk7CiAgICB3cml0ZUNvbW1hKCc6Jyk7CiAgICB3cml0ZUV4cHJlc3Npb24obm9kZS52YWx1ZSk7CiAgfQoKICBkZWZhdWx0U3RhdGVtZW50KFN0YXRlbWVudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICBlbmRMaW5lKCcke25vZGUucnVudGltZVR5cGV9Jyk7CiAgfQoKICB2aXNpdEludmFsaWRJbml0aWFsaXplcihJbnZhbGlkSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgd3JpdGVXb3JkKCdpbnZhbGlkLWluaXRpYWxpemVyJyk7CiAgfQoKICB2aXNpdEZpZWxkSW5pdGlhbGl6ZXIoRmllbGRJbml0aWFsaXplciBub2RlKSB7CiAgICB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS5maWVsZFJlZmVyZW5jZSk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUudmFsdWUpOwogIH0KCiAgdmlzaXRTdXBlckluaXRpYWxpemVyKFN1cGVySW5pdGlhbGl6ZXIgbm9kZSkgewogICAgd3JpdGVXb3JkKCdzdXBlcicpOwogICAgd3JpdGVNZW1iZXJSZWZlcmVuY2VGcm9tUmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICAgIHdyaXRlTm9kZShub2RlLmFyZ3VtZW50cyk7CiAgfQoKICB2aXNpdFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoUmVkaXJlY3RpbmdJbml0aWFsaXplciBub2RlKSB7CiAgICB3cml0ZVdvcmQoJ3RoaXMnKTsKICAgIHdyaXRlTWVtYmVyUmVmZXJlbmNlRnJvbVJlZmVyZW5jZShub2RlLnRhcmdldFJlZmVyZW5jZSk7CiAgICB3cml0ZU5vZGUobm9kZS5hcmd1bWVudHMpOwogIH0KCiAgdmlzaXRMb2NhbEluaXRpYWxpemVyKExvY2FsSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgd3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUudmFyaWFibGUpOwogIH0KCiAgdmlzaXRBc3NlcnRJbml0aWFsaXplcihBc3NlcnRJbml0aWFsaXplciBub2RlKSB7CiAgICB2aXNpdEFzc2VydFN0YXRlbWVudChub2RlLnN0YXRlbWVudCwgYXNFeHByZXNzaW9uOiB0cnVlKTsKICB9CgogIGRlZmF1bHRJbml0aWFsaXplcihJbml0aWFsaXplciBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICBlbmRMaW5lKCc6ICR7bm9kZS5ydW50aW1lVHlwZX0nKTsKICB9CgogIHdyaXRlTnVsbGFiaWxpdHkoTnVsbGFiaWxpdHkgbnVsbGFiaWxpdHkpIHsKICAgIHN3aXRjaCAobnVsbGFiaWxpdHkpIHsKICAgICAgY2FzZSBOdWxsYWJpbGl0eS5sZWdhY3k6CiAgICAgICAgd3JpdGVTeW1ib2woJyonKTsKICAgICAgICBzdGF0ZSA9IFdPUkQ7IC8vIERpc2FsbG93IGEgd29yZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJyonLgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE51bGxhYmlsaXR5Lm51bGxhYmxlOgogICAgICAgIHdyaXRlU3ltYm9sKCc/Jyk7IC8vIERpc2FsbG93IGEgd29yZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJz8nLgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE51bGxhYmlsaXR5Lm5laXRoZXI6CiAgICAgIGNhc2UgTnVsbGFiaWxpdHkubm9uTnVsbGFibGU6CiAgICAgICAgLy8gRG8gbm90aGluZy4KICAgICAgICBicmVhazsKICAgIH0KICB9CgogIHZpc2l0SW52YWxpZFR5cGUoSW52YWxpZFR5cGUgbm9kZSkgewogICAgd3JpdGVXb3JkKCdpbnZhbGlkLXR5cGUnKTsKICB9CgogIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgbm9kZSkgewogICAgd3JpdGVXb3JkKCdkeW5hbWljJyk7CiAgfQoKICB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIG5vZGUpIHsKICAgIHdyaXRlV29yZCgndm9pZCcpOwogIH0KCiAgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgd3JpdGVDbGFzc1JlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS5jbGFzc05hbWUpOwogICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICAgIHdyaXRlTGlzdChub2RlLnR5cGVBcmd1bWVudHMsIHdyaXRlVHlwZSk7CiAgICAgIHdyaXRlU3ltYm9sKCc+Jyk7CiAgICAgIHN0YXRlID0gV09SRDsgLy8gRGlzYWxsb3cgYSB3b3JkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnPicuCiAgICB9CiAgICB3cml0ZU51bGxhYmlsaXR5KG5vZGUubnVsbGFiaWxpdHkpOwogIH0KCiAgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIHdyaXRlRnVuY3Rpb25UeXBlKG5vZGUpOwogIH0KCiAgdmlzaXROYW1lZFR5cGUoTmFtZWRUeXBlIG5vZGUpIHsKICAgIHdyaXRlV29yZChub2RlLm5hbWUpOwogICAgd3JpdGVTeW1ib2woJzonKTsKICAgIHdyaXRlU3BhY2UoKTsKICAgIHdyaXRlVHlwZShub2RlLnR5cGUpOwogIH0KCiAgdmlzaXRUeXBlUGFyYW1ldGVyVHlwZShUeXBlUGFyYW1ldGVyVHlwZSBub2RlKSB7CiAgICB3cml0ZVR5cGVQYXJhbWV0ZXJSZWZlcmVuY2Uobm9kZS5wYXJhbWV0ZXIpOwogICAgd3JpdGVOdWxsYWJpbGl0eShub2RlLm51bGxhYmlsaXR5KTsKICAgIGlmIChub2RlLnByb21vdGVkQm91bmQgIT0gbnVsbCkgewogICAgICB3cml0ZVNwYWNlKCk7CiAgICAgIHdyaXRlV29yZCgnZXh0ZW5kcycpOwogICAgICB3cml0ZVNwYWNlKCk7CiAgICAgIHdyaXRlVHlwZShub2RlLnByb21vdGVkQm91bmQpOwogICAgfQogIH0KCiAgdmlzaXRUeXBlUGFyYW1ldGVyKFR5cGVQYXJhbWV0ZXIgbm9kZSkgewogICAgd3JpdGVNb2RpZmllcihub2RlLmlzR2VuZXJpY0NvdmFyaWFudEltcGwsICdnZW5lcmljLWNvdmFyaWFudC1pbXBsJyk7CiAgICB3cml0ZUFubm90YXRpb25MaXN0KG5vZGUuYW5ub3RhdGlvbnMsIHNlcGFyYXRlTGluZXM6IGZhbHNlKTsKICAgIHdyaXRlV29yZChnZXRUeXBlUGFyYW1ldGVyTmFtZShub2RlKSk7CiAgICB3cml0ZVNwYWNlZCgnZXh0ZW5kcycpOwogICAgd3JpdGVUeXBlKG5vZGUuYm91bmQpOwogICAgaWYgKG5vZGUuZGVmYXVsdFR5cGUgIT0gbnVsbCkgewogICAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgICB3cml0ZVR5cGUobm9kZS5kZWZhdWx0VHlwZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2UoQ29uc3RhbnQgbm9kZSkgewogICAgd3JpdGVXb3JkKHN5bnRoZXRpY05hbWVzLm5hbWVDb25zdGFudChub2RlKSk7CiAgfQoKICB2aXNpdENvbnN0YW50RXhwcmVzc2lvbihDb25zdGFudEV4cHJlc3Npb24gbm9kZSkgewogICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShub2RlLmNvbnN0YW50KTsKICB9CgogIGRlZmF1bHRDb25zdGFudChDb25zdGFudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgIGVuZExpbmUoJyRub2RlJyk7CiAgfQoKICB2aXNpdExpc3RDb25zdGFudChMaXN0Q29uc3RhbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICB3cml0ZVN5bWJvbCgnPCcpOwogICAgd3JpdGVUeXBlKG5vZGUudHlwZUFyZ3VtZW50KTsKICAgIHdyaXRlU3ltYm9sKCc+WycpOwogICAgd3JpdGVMaXN0KG5vZGUuZW50cmllcywgd3JpdGVDb25zdGFudFJlZmVyZW5jZSk7CiAgICBlbmRMaW5lKCddJyk7CiAgfQoKICB2aXNpdFNldENvbnN0YW50KFNldENvbnN0YW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgd3JpdGVTeW1ib2woJzwnKTsKICAgIHdyaXRlVHlwZShub2RlLnR5cGVBcmd1bWVudCk7CiAgICB3cml0ZVN5bWJvbCgnPnsnKTsKICAgIHdyaXRlTGlzdChub2RlLmVudHJpZXMsIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2UpOwogICAgZW5kTGluZSgnfScpOwogIH0KCiAgdmlzaXRNYXBDb25zdGFudChNYXBDb25zdGFudCBub2RlKSB7CiAgICB3cml0ZUluZGVudGF0aW9uKCk7CiAgICB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogICAgd3JpdGVTcGFjZWQoJz0nKTsKICAgIHdyaXRlU3ltYm9sKCc8Jyk7CiAgICB3cml0ZUxpc3QoW25vZGUua2V5VHlwZSwgbm9kZS52YWx1ZVR5cGVdLCB3cml0ZVR5cGUpOwogICAgd3JpdGVTeW1ib2woJz57Jyk7CiAgICB3cml0ZUxpc3Qobm9kZS5lbnRyaWVzLCAoZW50cnkpIHsKICAgICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShlbnRyeS5rZXkpOwogICAgICB3cml0ZVN5bWJvbCgnOicpOwogICAgICB3cml0ZUNvbnN0YW50UmVmZXJlbmNlKGVudHJ5LnZhbHVlKTsKICAgIH0pOwogICAgZW5kTGluZSgnKScpOwogIH0KCiAgdmlzaXRJbnN0YW5jZUNvbnN0YW50KEluc3RhbmNlQ29uc3RhbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICB3cml0ZUNsYXNzUmVmZXJlbmNlRnJvbVJlZmVyZW5jZShub2RlLmNsYXNzUmVmZXJlbmNlKTsKICAgIGlmICghbm9kZS5jbGFzc05vZGUudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICB3cml0ZVN5bWJvbCgnPCcpOwogICAgICB3cml0ZUxpc3Qobm9kZS50eXBlQXJndW1lbnRzLCB3cml0ZVR5cGUpOwogICAgICB3cml0ZVN5bWJvbCgnPicpOwogICAgfQogICAgd3JpdGVTeW1ib2woJyB7Jyk7CiAgICB3cml0ZUxpc3Qobm9kZS5maWVsZFZhbHVlcy5lbnRyaWVzLCAoZW50cnkpIHsKICAgICAgd3JpdGVXb3JkKCcke2VudHJ5LmtleS5hc0ZpZWxkLm5hbWUubmFtZX0nKTsKICAgICAgd3JpdGVTeW1ib2woJzonKTsKICAgICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShlbnRyeS52YWx1ZSk7CiAgICB9KTsKICAgIGVuZExpbmUoJ30nKTsKICB9CgogIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudChQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgd3JpdGVXb3JkKCdwYXJ0aWFsLWluc3RhbnRpYXRpb24nKTsKICAgIHdyaXRlU3BhY2UoKTsKICAgIHdyaXRlTWVtYmVyUmVmZXJlbmNlRnJvbVJlZmVyZW5jZShub2RlLnRlYXJPZmZDb25zdGFudC5wcm9jZWR1cmVSZWZlcmVuY2UpOwogICAgd3JpdGVTcGFjZSgpOwogICAgd3JpdGVTeW1ib2woJzwnKTsKICAgIHdyaXRlTGlzdChub2RlLnR5cGVzLCB3cml0ZVR5cGUpOwogICAgd3JpdGVTeW1ib2woJz4nKTsKICAgIGVuZExpbmUoKTsKICB9CgogIHZpc2l0U3RyaW5nQ29uc3RhbnQoU3RyaW5nQ29uc3RhbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICBlbmRMaW5lKCciJHtlc2NhcGVTdHJpbmcobm9kZS52YWx1ZSl9IicpOwogIH0KCiAgdmlzaXRUZWFyT2ZmQ29uc3RhbnQoVGVhck9mZkNvbnN0YW50IG5vZGUpIHsKICAgIHdyaXRlSW5kZW50YXRpb24oKTsKICAgIHdyaXRlQ29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgICB3cml0ZVNwYWNlZCgnPScpOwogICAgd3JpdGVXb3JkKCd0ZWFyb2ZmJyk7CiAgICB3cml0ZVNwYWNlKCk7CiAgICB3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2Uobm9kZS5wcm9jZWR1cmVSZWZlcmVuY2UpOwogICAgZW5kTGluZSgpOwogIH0KCiAgdmlzaXRVbmV2YWx1YXRlZENvbnN0YW50KFVuZXZhbHVhdGVkQ29uc3RhbnQgbm9kZSkgewogICAgd3JpdGVJbmRlbnRhdGlvbigpOwogICAgd3JpdGVDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICAgIHdyaXRlU3BhY2VkKCc9Jyk7CiAgICB3cml0ZVN5bWJvbCgnZXZhbCcpOwogICAgd3JpdGVTcGFjZSgpOwogICAgd3JpdGVFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbik7CiAgICBlbmRMaW5lKCk7CiAgfQoKICBkZWZhdWx0Tm9kZShOb2RlIG5vZGUpIHsKICAgIHdyaXRlKCc8JHtub2RlLnJ1bnRpbWVUeXBlfT4nKTsKICB9Cn0KCmNsYXNzIFByZWNlZGVuY2UgZXh0ZW5kcyBFeHByZXNzaW9uVmlzaXRvcjxpbnQ+IHsKICBzdGF0aWMgZmluYWwgUHJlY2VkZW5jZSBpbnN0YW5jZSA9IG5ldyBQcmVjZWRlbmNlKCk7CgogIHN0YXRpYyBpbnQgb2YoRXhwcmVzc2lvbiBub2RlKSA9PiBub2RlLmFjY2VwdChpbnN0YW5jZSk7CgogIHN0YXRpYyBjb25zdCBpbnQgRVhQUkVTU0lPTiA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBDT05ESVRJT05BTCA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBMT0dJQ0FMX05VTExfQVdBUkUgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgTE9HSUNBTF9PUiA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBMT0dJQ0FMX0FORCA9IDU7CiAgc3RhdGljIGNvbnN0IGludCBFUVVBTElUWSA9IDY7CiAgc3RhdGljIGNvbnN0IGludCBSRUxBVElPTkFMID0gNzsKICBzdGF0aWMgY29uc3QgaW50IEJJVFdJU0VfT1IgPSA4OwogIHN0YXRpYyBjb25zdCBpbnQgQklUV0lTRV9YT1IgPSA5OwogIHN0YXRpYyBjb25zdCBpbnQgQklUV0lTRV9BTkQgPSAxMDsKICBzdGF0aWMgY29uc3QgaW50IFNISUZUID0gMTE7CiAgc3RhdGljIGNvbnN0IGludCBBRERJVElWRSA9IDEyOwogIHN0YXRpYyBjb25zdCBpbnQgTVVMVElQTElDQVRJVkUgPSAxMzsKICBzdGF0aWMgY29uc3QgaW50IFBSRUZJWCA9IDE0OwogIHN0YXRpYyBjb25zdCBpbnQgUE9TVEZJWCA9IDE1OwogIHN0YXRpYyBjb25zdCBpbnQgVFlQRV9MSVRFUkFMID0gMTk7CiAgc3RhdGljIGNvbnN0IGludCBQUklNQVJZID0gMjA7CiAgc3RhdGljIGNvbnN0IGludCBDQUxMRUUgPSAyMTsKCiAgc3RhdGljIGNvbnN0IE1hcDxTdHJpbmcsIGludD4gYmluYXJ5UHJlY2VkZW5jZSA9IGNvbnN0IHsKICAgICcmJic6IExPR0lDQUxfQU5ELAogICAgJ3x8JzogTE9HSUNBTF9PUiwKICAgICc/Pyc6IExPR0lDQUxfTlVMTF9BV0FSRSwKICAgICc9PSc6IEVRVUFMSVRZLAogICAgJyE9JzogRVFVQUxJVFksCiAgICAnPic6IFJFTEFUSU9OQUwsCiAgICAnPj0nOiBSRUxBVElPTkFMLAogICAgJzwnOiBSRUxBVElPTkFMLAogICAgJzw9JzogUkVMQVRJT05BTCwKICAgICd8JzogQklUV0lTRV9PUiwKICAgICdeJzogQklUV0lTRV9YT1IsCiAgICAnJic6IEJJVFdJU0VfQU5ELAogICAgJz4+JzogU0hJRlQsCiAgICAnPDwnOiBTSElGVCwKICAgICcrJzogQURESVRJVkUsCiAgICAnLSc6IEFERElUSVZFLAogICAgJyonOiBNVUxUSVBMSUNBVElWRSwKICAgICclJzogTVVMVElQTElDQVRJVkUsCiAgICAnLyc6IE1VTFRJUExJQ0FUSVZFLAogICAgJ34vJzogTVVMVElQTElDQVRJVkUsCiAgICBudWxsOiBFWFBSRVNTSU9OLAogIH07CgogIHN0YXRpYyBib29sIGlzQXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihpbnQgcHJlY2VkZW5jZSkgewogICAgcmV0dXJuIHByZWNlZGVuY2UgIT0gRVFVQUxJVFkgJiYgcHJlY2VkZW5jZSAhPSBSRUxBVElPTkFMOwogIH0KCiAgaW50IGRlZmF1bHRFeHByZXNzaW9uKEV4cHJlc3Npb24gbm9kZSkgPT4gRVhQUkVTU0lPTjsKICBpbnQgdmlzaXRJbnZhbGlkRXhwcmVzc2lvbihJbnZhbGlkRXhwcmVzc2lvbiBub2RlKSA9PiBDQUxMRUU7CiAgaW50IHZpc2l0TWV0aG9kSW52b2NhdGlvbihNZXRob2RJbnZvY2F0aW9uIG5vZGUpID0+IENBTExFRTsKICBpbnQgdmlzaXRTdXBlck1ldGhvZEludm9jYXRpb24oU3VwZXJNZXRob2RJbnZvY2F0aW9uIG5vZGUpID0+IENBTExFRTsKICBpbnQgdmlzaXREaXJlY3RNZXRob2RJbnZvY2F0aW9uKERpcmVjdE1ldGhvZEludm9jYXRpb24gbm9kZSkgPT4gQ0FMTEVFOwogIGludCB2aXNpdFN0YXRpY0ludm9jYXRpb24oU3RhdGljSW52b2NhdGlvbiBub2RlKSA9PiBDQUxMRUU7CiAgaW50IHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKENvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKSA9PiBDQUxMRUU7CiAgaW50IHZpc2l0Tm90KE5vdCBub2RlKSA9PiBQUkVGSVg7CiAgaW50IHZpc2l0TG9naWNhbEV4cHJlc3Npb24oTG9naWNhbEV4cHJlc3Npb24gbm9kZSkgPT4KICAgICAgYmluYXJ5UHJlY2VkZW5jZVtub2RlLm9wZXJhdG9yXTsKICBpbnQgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUpID0+IENPTkRJVElPTkFMOwogIGludCB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSA9PiBQUklNQVJZOwogIGludCB2aXNpdElzRXhwcmVzc2lvbihJc0V4cHJlc3Npb24gbm9kZSkgPT4gUkVMQVRJT05BTDsKICBpbnQgdmlzaXRBc0V4cHJlc3Npb24oQXNFeHByZXNzaW9uIG5vZGUpID0+IFJFTEFUSU9OQUw7CiAgaW50IHZpc2l0U3ltYm9sTGl0ZXJhbChTeW1ib2xMaXRlcmFsIG5vZGUpID0+IFBSSU1BUlk7CiAgaW50IHZpc2l0VHlwZUxpdGVyYWwoVHlwZUxpdGVyYWwgbm9kZSkgPT4gUFJJTUFSWTsKICBpbnQgdmlzaXRUaGlzRXhwcmVzc2lvbihUaGlzRXhwcmVzc2lvbiBub2RlKSA9PiBDQUxMRUU7CiAgaW50IHZpc2l0UmV0aHJvdyhSZXRocm93IG5vZGUpID0+IFBSSU1BUlk7CiAgaW50IHZpc2l0VGhyb3coVGhyb3cgbm9kZSkgPT4gRVhQUkVTU0lPTjsKICBpbnQgdmlzaXRMaXN0TGl0ZXJhbChMaXN0TGl0ZXJhbCBub2RlKSA9PiBQUklNQVJZOwogIGludCB2aXNpdFNldExpdGVyYWwoU2V0TGl0ZXJhbCBub2RlKSA9PiBQUklNQVJZOwogIGludCB2aXNpdE1hcExpdGVyYWwoTWFwTGl0ZXJhbCBub2RlKSA9PiBQUklNQVJZOwogIGludCB2aXNpdEF3YWl0RXhwcmVzc2lvbihBd2FpdEV4cHJlc3Npb24gbm9kZSkgPT4gUFJFRklYOwogIGludCB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihGdW5jdGlvbkV4cHJlc3Npb24gbm9kZSkgPT4gRVhQUkVTU0lPTjsKICBpbnQgdmlzaXRTdHJpbmdMaXRlcmFsKFN0cmluZ0xpdGVyYWwgbm9kZSkgPT4gQ0FMTEVFOwogIGludCB2aXNpdEludExpdGVyYWwoSW50TGl0ZXJhbCBub2RlKSA9PiBDQUxMRUU7CiAgaW50IHZpc2l0RG91YmxlTGl0ZXJhbChEb3VibGVMaXRlcmFsIG5vZGUpID0+IENBTExFRTsKICBpbnQgdmlzaXRCb29sTGl0ZXJhbChCb29sTGl0ZXJhbCBub2RlKSA9PiBDQUxMRUU7CiAgaW50IHZpc2l0TnVsbExpdGVyYWwoTnVsbExpdGVyYWwgbm9kZSkgPT4gQ0FMTEVFOwogIGludCB2aXNpdFZhcmlhYmxlR2V0KFZhcmlhYmxlR2V0IG5vZGUpID0+IFBSSU1BUlk7CiAgaW50IHZpc2l0VmFyaWFibGVTZXQoVmFyaWFibGVTZXQgbm9kZSkgPT4gRVhQUkVTU0lPTjsKICBpbnQgdmlzaXRQcm9wZXJ0eUdldChQcm9wZXJ0eUdldCBub2RlKSA9PiBQUklNQVJZOwogIGludCB2aXNpdFByb3BlcnR5U2V0KFByb3BlcnR5U2V0IG5vZGUpID0+IEVYUFJFU1NJT047CiAgaW50IHZpc2l0U3VwZXJQcm9wZXJ0eUdldChTdXBlclByb3BlcnR5R2V0IG5vZGUpID0+IFBSSU1BUlk7CiAgaW50IHZpc2l0U3VwZXJQcm9wZXJ0eVNldChTdXBlclByb3BlcnR5U2V0IG5vZGUpID0+IEVYUFJFU1NJT047CiAgaW50IHZpc2l0RGlyZWN0UHJvcGVydHlHZXQoRGlyZWN0UHJvcGVydHlHZXQgbm9kZSkgPT4gUFJJTUFSWTsKICBpbnQgdmlzaXREaXJlY3RQcm9wZXJ0eVNldChEaXJlY3RQcm9wZXJ0eVNldCBub2RlKSA9PiBFWFBSRVNTSU9OOwogIGludCB2aXNpdFN0YXRpY0dldChTdGF0aWNHZXQgbm9kZSkgPT4gUFJJTUFSWTsKICBpbnQgdmlzaXRTdGF0aWNTZXQoU3RhdGljU2V0IG5vZGUpID0+IEVYUFJFU1NJT047CiAgaW50IHZpc2l0TGV0KExldCBub2RlKSA9PiBFWFBSRVNTSU9OOwp9CgpTdHJpbmcgcHJvY2VkdXJlS2luZFRvU3RyaW5nKFByb2NlZHVyZUtpbmQga2luZCkgewogIHN3aXRjaCAoa2luZCkgewogICAgY2FzZSBQcm9jZWR1cmVLaW5kLk1ldGhvZDoKICAgICAgcmV0dXJuICdtZXRob2QnOwogICAgY2FzZSBQcm9jZWR1cmVLaW5kLkdldHRlcjoKICAgICAgcmV0dXJuICdnZXQnOwogICAgY2FzZSBQcm9jZWR1cmVLaW5kLlNldHRlcjoKICAgICAgcmV0dXJuICdzZXQnOwogICAgY2FzZSBQcm9jZWR1cmVLaW5kLk9wZXJhdG9yOgogICAgICByZXR1cm4gJ29wZXJhdG9yJzsKICAgIGNhc2UgUHJvY2VkdXJlS2luZC5GYWN0b3J5OgogICAgICByZXR1cm4gJ2ZhY3RvcnknOwogIH0KICB0aHJvdyAnaWxsZWdhbCBQcm9jZWR1cmVLaW5kOiAka2luZCc7Cn0KCmNsYXNzIEV4cHJlc3Npb25QcmludGVyIHsKICBmaW5hbCBQcmludGVyIHdyaXRlZXI7CiAgZmluYWwgaW50IG1pbmltdW1QcmVjZWRlbmNlOwoKICBFeHByZXNzaW9uUHJpbnRlcih0aGlzLndyaXRlZXIsIHRoaXMubWluaW11bVByZWNlZGVuY2UpOwp9CojTAE5OPBwBIgEhARYfARoRLAFMARUCASgXHAIBShceASYmNSQGJAQBMBcEAgEcLy8zAT4TKDwRMg0IIAYBGCQpKgYYJCkqBiEEAgE0ASgWDz0CASQWDzsCAS1QAgEmQwIBLyU6Dx8LNQ8fBAIBNEQCAT0eMg8mBB8zDyYEJwIBQD8CASYsTRQCASssOCEUAgETLzI/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KTsKCiAgUiB2aXNpdEludmFsaWRFeHByZXNzaW9uKEludmFsaWRFeHByZXNzaW9uIG5vZGUpID0+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+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICBSIHZpc2l0Q29uc3RydWN0b3IoQ29uc3RydWN0b3Igbm9kZSkgPT4gZGVmYXVsdE1lbWJlcihub2RlKTsKICBSIHZpc2l0UHJvY2VkdXJlKFByb2NlZHVyZSBub2RlKSA9PiBkZWZhdWx0TWVtYmVyKG5vZGUpOwogIFIgdmlzaXRGaWVsZChGaWVsZCBub2RlKSA9PiBkZWZhdWx0TWVtYmVyKG5vZGUpOwogIFIgdmlzaXRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcihSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvciBub2RlKSB7CiAgICByZXR1cm4gZGVmYXVsdE1lbWJlcihub2RlKTsKICB9CgogIC8vIENsYXNzZXMKICBSIHZpc2l0Q2xhc3MoQ2xhc3Mgbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwoKICAvLyBJbml0aWFsaXplcnMKICBSIGRlZmF1bHRJbml0aWFsaXplcihJbml0aWFsaXplciBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiB2aXNpdEludmFsaWRJbml0aWFsaXplcihJbnZhbGlkSW5pdGlhbGl6ZXIgbm9kZSkgPT4KICAgICAgZGVmYXVsdEluaXRpYWxpemVyKG5vZGUpOwogIFIgdmlzaXRGaWVsZEluaXRpYWxpemVyKEZpZWxkSW5pdGlhbGl6ZXIgbm9kZSkgPT4gZGVmYXVsdEluaXRpYWxpemVyKG5vZGUpOwogIFIgdmlzaXRTdXBlckluaXRpYWxpemVyKFN1cGVySW5pdGlhbGl6ZXIgbm9kZSkgPT4gZGVmYXVsdEluaXRpYWxpemVyKG5vZGUpOwogIFIgdmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVyKFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgbm9kZSkgPT4KICAgICAgZGVmYXVsdEluaXRpYWxpemVyKG5vZGUpOwogIFIgdmlzaXRMb2NhbEluaXRpYWxpemVyKExvY2FsSW5pdGlhbGl6ZXIgbm9kZSkgPT4gZGVmYXVsdEluaXRpYWxpemVyKG5vZGUpOwogIFIgdmlzaXRBc3NlcnRJbml0aWFsaXplcihBc3NlcnRJbml0aWFsaXplciBub2RlKSA9PiBkZWZhdWx0SW5pdGlhbGl6ZXIobm9kZSk7CgogIC8vIE90aGVyIHRyZWUgbm9kZXMKICBSIHZpc2l0TGlicmFyeShMaWJyYXJ5IG5vZGUpID0+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICBSIHZpc2l0TGlicmFyeURlcGVuZGVuY3koTGlicmFyeURlcGVuZGVuY3kgbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRDb21iaW5hdG9yKENvbWJpbmF0b3Igbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRMaWJyYXJ5UGFydChMaWJyYXJ5UGFydCBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiB2aXNpdFR5cGVkZWYoVHlwZWRlZiBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiB2aXNpdFR5cGVQYXJhbWV0ZXIoVHlwZVBhcmFtZXRlciBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiB2aXNpdEZ1bmN0aW9uTm9kZShGdW5jdGlvbk5vZGUgbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRBcmd1bWVudHMoQXJndW1lbnRzIG5vZGUpID0+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICBSIHZpc2l0TmFtZWRFeHByZXNzaW9uKE5hbWVkRXhwcmVzc2lvbiBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiB2aXNpdFN3aXRjaENhc2UoU3dpdGNoQ2FzZSBub2RlKSA9PiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgUiB2aXNpdENhdGNoKENhdGNoIG5vZGUpID0+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICBSIHZpc2l0TWFwRW50cnkoTWFwRW50cnkgbm9kZSkgPT4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIFIgdmlzaXRDb21wb25lbnQoQ29tcG9uZW50IG5vZGUpID0+IGRlZmF1bHRUcmVlTm9kZShub2RlKTsKfQoKY2xhc3MgRGFydFR5cGVWaXNpdG9yPFI+IHsKICBjb25zdCBEYXJ0VHlwZVZpc2l0b3IoKTsKCiAgUiBkZWZhdWx0RGFydFR5cGUoRGFydFR5cGUgbm9kZSkgPT4gbnVsbDsKCiAgUiB2aXNpdEludmFsaWRUeXBlKEludmFsaWRUeXBlIG5vZGUpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlKTsKICBSIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwogIFIgdmlzaXRWb2lkVHlwZShWb2lkVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdEJvdHRvbVR5cGUoQm90dG9tVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwogIFIgdmlzaXRUeXBlUGFyYW1ldGVyVHlwZShUeXBlUGFyYW1ldGVyVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIG5vZGUpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlKTsKfQoKY2xhc3MgRGFydFR5cGVWaXNpdG9yMTxSLCBUPiB7CiAgUiBkZWZhdWx0RGFydFR5cGUoRGFydFR5cGUgbm9kZSwgVCBhcmcpID0+IG51bGw7CgogIFIgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlLCBUIGFyZykgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUsIGFyZyk7CiAgUiB2aXNpdER5bmFtaWNUeXBlKER5bmFtaWNUeXBlIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSwgYXJnKTsKICBSIHZpc2l0Vm9pZFR5cGUoVm9pZFR5cGUgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlLCBhcmcpOwogIFIgdmlzaXRCb3R0b21UeXBlKEJvdHRvbVR5cGUgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlLCBhcmcpOwogIFIgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlLCBhcmcpOwogIFIgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSwgYXJnKTsKICBSIHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoVHlwZVBhcmFtZXRlclR5cGUgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHREYXJ0VHlwZShub2RlLCBhcmcpOwogIFIgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlLCBUIGFyZykgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUsIGFyZyk7Cn0KCi8vLyBWaXNpdG9yIGZvciBbQ29uc3RhbnRdIG5vZGVzLgovLy8KLy8vIE5vdGU6IENvbnN0YW50IG5vZGVzIGFyZSBfbm90XyB0cmVlcyBidXQgZGlyZWN0ZWQgYWN5Y2xpYyBncmFwaHMuIFRoaXMKLy8vIG1lYW5zIHRoYXQgdmlzaXRpbmcgYSBjb25zdGFudCBub2RlIHdpdGhvdXQgdHJhY2tpbmcgd2hpY2ggc3Vibm9kZXMgdGhhdAovLy8gaGF2ZSBhbHJlYWR5IGJlZW4gdmlzaXRlZCBtaWdodCBsZWFkIHRvIGV4cG9uZW50aWFsIHJ1bm5pbmcgdGltZXMuCi8vLwovLy8gVXNlIFtDb21wdXRlT25jZUNvbnN0YW50VmlzaXRvcl0gb3IgW1Zpc2l0T25jZUNvbnN0YW50VmlzaXRvcl0gdG8gdmlzaXQKLy8vIGEgY29uc3RhbnQgbm9kZSB3aGlsZSBlbnN1cmluZyBlYWNoIHN1Ym5vZGUgaXMgb25seSB2aXNpdGVkIG9uY2UuCmNsYXNzIENvbnN0YW50VmlzaXRvcjxSPiB7CiAgY29uc3QgQ29uc3RhbnRWaXNpdG9yKCk7CgogIFIgZGVmYXVsdENvbnN0YW50KENvbnN0YW50IG5vZGUpID0+IG51bGw7CgogIFIgdmlzaXROdWxsQ29uc3RhbnQoTnVsbENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0Qm9vbENvbnN0YW50KEJvb2xDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdEludENvbnN0YW50KEludENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0RG91YmxlQ29uc3RhbnQoRG91YmxlQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRTdHJpbmdDb25zdGFudChTdHJpbmdDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFN5bWJvbENvbnN0YW50KFN5bWJvbENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0TWFwQ29uc3RhbnQoTWFwQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRMaXN0Q29uc3RhbnQoTGlzdENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0U2V0Q29uc3RhbnQoU2V0Q29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRJbnN0YW5jZUNvbnN0YW50KEluc3RhbmNlQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRUZWFyT2ZmQ29uc3RhbnQoVGVhck9mZkNvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0VHlwZUxpdGVyYWxDb25zdGFudChUeXBlTGl0ZXJhbENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudChVbmV2YWx1YXRlZENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKfQoKYWJzdHJhY3QgY2xhc3MgX0NvbnN0YW50Q2FsbGJhY2s8Uj4gewogIFIgZGVmYXVsdENvbnN0YW50KENvbnN0YW50IG5vZGUpOwoKICBSIHZpc2l0TnVsbENvbnN0YW50KE51bGxDb25zdGFudCBub2RlKTsKICBSIHZpc2l0Qm9vbENvbnN0YW50KEJvb2xDb25zdGFudCBub2RlKTsKICBSIHZpc2l0SW50Q29uc3RhbnQoSW50Q29uc3RhbnQgbm9kZSk7CiAgUiB2aXNpdERvdWJsZUNvbnN0YW50KERvdWJsZUNvbnN0YW50IG5vZGUpOwogIFIgdmlzaXRTdHJpbmdDb25zdGFudChTdHJpbmdDb25zdGFudCBub2RlKTsKICBSIHZpc2l0U3ltYm9sQ29uc3RhbnQoU3ltYm9sQ29uc3RhbnQgbm9kZSk7CiAgUiB2aXNpdE1hcENvbnN0YW50KE1hcENvbnN0YW50IG5vZGUpOwogIFIgdmlzaXRMaXN0Q29uc3RhbnQoTGlzdENvbnN0YW50IG5vZGUpOwogIFIgdmlzaXRTZXRDb25zdGFudChTZXRDb25zdGFudCBub2RlKTsKICBSIHZpc2l0SW5zdGFuY2VDb25zdGFudChJbnN0YW5jZUNvbnN0YW50IG5vZGUpOwogIFIgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgbm9kZSk7CiAgUiB2aXNpdFRlYXJPZmZDb25zdGFudChUZWFyT2ZmQ29uc3RhbnQgbm9kZSk7CiAgUiB2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQoVHlwZUxpdGVyYWxDb25zdGFudCBub2RlKTsKICBSIHZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudChVbmV2YWx1YXRlZENvbnN0YW50IG5vZGUpOwp9CgpjbGFzcyBfQ29uc3RhbnRDYWxsYmFja1Zpc2l0b3I8Uj4gaW1wbGVtZW50cyBDb25zdGFudFZpc2l0b3I8Uj4gewogIGZpbmFsIF9Db25zdGFudENhbGxiYWNrIF9jYWxsYmFjazsKCiAgX0NvbnN0YW50Q2FsbGJhY2tWaXNpdG9yKHRoaXMuX2NhbGxiYWNrKTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSA9PgogICAgICBfY2FsbGJhY2sudmlzaXRVbmV2YWx1YXRlZENvbnN0YW50KG5vZGUpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0VHlwZUxpdGVyYWxDb25zdGFudChUeXBlTGl0ZXJhbENvbnN0YW50IG5vZGUpID0+CiAgICAgIF9jYWxsYmFjay52aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQobm9kZSk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRUZWFyT2ZmQ29uc3RhbnQoVGVhck9mZkNvbnN0YW50IG5vZGUpID0+CiAgICAgIF9jYWxsYmFjay52aXNpdFRlYXJPZmZDb25zdGFudChub2RlKTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQoUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBub2RlKSA9PgogICAgICBfY2FsbGJhY2sudmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KG5vZGUpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0SW5zdGFuY2VDb25zdGFudChJbnN0YW5jZUNvbnN0YW50IG5vZGUpID0+CiAgICAgIF9jYWxsYmFjay52aXNpdEluc3RhbmNlQ29uc3RhbnQobm9kZSk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRTZXRDb25zdGFudChTZXRDb25zdGFudCBub2RlKSA9PiBfY2FsbGJhY2sudmlzaXRTZXRDb25zdGFudChub2RlKTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdExpc3RDb25zdGFudChMaXN0Q29uc3RhbnQgbm9kZSkgPT4gX2NhbGxiYWNrLnZpc2l0TGlzdENvbnN0YW50KG5vZGUpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0TWFwQ29uc3RhbnQoTWFwQ29uc3RhbnQgbm9kZSkgPT4gX2NhbGxiYWNrLnZpc2l0TWFwQ29uc3RhbnQobm9kZSk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRTeW1ib2xDb25zdGFudChTeW1ib2xDb25zdGFudCBub2RlKSA9PgogICAgICBfY2FsbGJhY2sudmlzaXRTeW1ib2xDb25zdGFudChub2RlKTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdFN0cmluZ0NvbnN0YW50KFN0cmluZ0NvbnN0YW50IG5vZGUpID0+CiAgICAgIF9jYWxsYmFjay52aXNpdFN0cmluZ0NvbnN0YW50KG5vZGUpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0RG91YmxlQ29uc3RhbnQoRG91YmxlQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgX2NhbGxiYWNrLnZpc2l0RG91YmxlQ29uc3RhbnQobm9kZSk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRJbnRDb25zdGFudChJbnRDb25zdGFudCBub2RlKSA9PiBfY2FsbGJhY2sudmlzaXRJbnRDb25zdGFudChub2RlKTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdEJvb2xDb25zdGFudChCb29sQ29uc3RhbnQgbm9kZSkgPT4gX2NhbGxiYWNrLnZpc2l0Qm9vbENvbnN0YW50KG5vZGUpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0TnVsbENvbnN0YW50KE51bGxDb25zdGFudCBub2RlKSA9PiBfY2FsbGJhY2sudmlzaXROdWxsQ29uc3RhbnQobm9kZSk7CgogIEBvdmVycmlkZQogIFIgZGVmYXVsdENvbnN0YW50KENvbnN0YW50IG5vZGUpID0+IF9jYWxsYmFjay5kZWZhdWx0Q29uc3RhbnQobm9kZSk7Cn0KCi8vLyBWaXNpdG9yLWxpa2UgY2xhc3MgdXNlZCBmb3IgdmlzaXRpbmcgYSBbQ29uc3RhbnRdIG5vZGUgd2hpbGUgY29tcHV0aW5nIGEKLy8vIHZhbHVlIGZvciBlYWNoIHN1Ym5vZGUuIFRoZSB2aXNpdG9yIGNhY2hlcyB0aGUgY29tcHV0ZWQgdmFsdWVzIGVuc3VyaW5nIHRoYXQKLy8vIGVhY2ggc3Vibm9kZSBpcyBvbmx5IHZpc2l0ZWQgb25jZS4KY2xhc3MgQ29tcHV0ZU9uY2VDb25zdGFudFZpc2l0b3I8Uj4gaW1wbGVtZW50cyBfQ29uc3RhbnRDYWxsYmFjazxSPiB7CiAgX0NvbnN0YW50Q2FsbGJhY2tWaXNpdG9yIF92aXNpdG9yOwogIE1hcDxDb25zdGFudCwgUj4gY2FjaGUgPSBuZXcgTGlua2VkSGFzaE1hcC5pZGVudGl0eSgpOwoKICBDb21wdXRlT25jZUNvbnN0YW50VmlzaXRvcigpIHsKICAgIF92aXNpdG9yID0gbmV3IF9Db25zdGFudENhbGxiYWNrVmlzaXRvcjxSPih0aGlzKTsKICB9CgogIC8vLyBWaXNpdHMgW25vZGVdIGlmIG5vdCBhbHJlYWR5IHZpc2l0ZWQgdG8gY29tcHV0ZSBhIHZhbHVlIGZvciBbbm9kZV0uCiAgLy8vCiAgLy8vIElmIHRoZSB2YWx1ZSBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkIHRoZSBjYWNoZWQgdmFsdWUgaXMgcmV0dXJuZWQgaW1tZWRpYXRlbHkuCiAgLy8vCiAgLy8vIENhbGwgdGhpcyBtZXRob2QgdG8gY29tcHV0ZSB2YWx1ZXMgZm9yIHN1Ym5vZGVzIHJlY3Vyc2l2ZWx5LCB3aGlsZSBvbmx5CiAgLy8vIHZpc2l0aW5nIGVhY2ggc3Vibm9kZSBvbmNlLgogIFIgdmlzaXRDb25zdGFudChDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gY2FjaGVbbm9kZV0gPz89IG5vZGUuYWNjZXB0KF92aXNpdG9yKTsKICB9CgogIFIgZGVmYXVsdENvbnN0YW50KENvbnN0YW50IG5vZGUpID0+IG51bGw7CgogIFIgdmlzaXROdWxsQ29uc3RhbnQoTnVsbENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0Qm9vbENvbnN0YW50KEJvb2xDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdEludENvbnN0YW50KEludENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0RG91YmxlQ29uc3RhbnQoRG91YmxlQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRTdHJpbmdDb25zdGFudChTdHJpbmdDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFN5bWJvbENvbnN0YW50KFN5bWJvbENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0TWFwQ29uc3RhbnQoTWFwQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRMaXN0Q29uc3RhbnQoTGlzdENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0U2V0Q29uc3RhbnQoU2V0Q29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRJbnN0YW5jZUNvbnN0YW50KEluc3RhbmNlQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRUZWFyT2ZmQ29uc3RhbnQoVGVhck9mZkNvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0VHlwZUxpdGVyYWxDb25zdGFudChUeXBlTGl0ZXJhbENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudChVbmV2YWx1YXRlZENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKfQoKLy8vIFZpc2l0b3ItbGlrZSBjbGFzcyB1c2VkIGZvciB2aXNpdGluZyBlYWNoIHN1Ym5vZGUgb2YgYSBbQ29uc3RhbnRdIG5vZGUgb25jZS4KLy8vCi8vLyBUaGUgdmlzaXRvciByZWNvcmRzIHRoZSB2aXNpdGVkIG5vZGUgdG8gZW5zdXJlIHRoYXQgZWFjaCBzdWJub2RlIGlzIG9ubHkKLy8vIHZpc2l0ZWQgb25jZS4KY2xhc3MgVmlzaXRPbmNlQ29uc3RhbnRWaXNpdG9yIGltcGxlbWVudHMgX0NvbnN0YW50Q2FsbGJhY2s8dm9pZD4gewogIF9Db25zdGFudENhbGxiYWNrVmlzaXRvcjx2b2lkPiBfdmlzaXRvcjsKICBTZXQ8Q29uc3RhbnQ+IGNhY2hlID0gbmV3IExpbmtlZEhhc2hTZXQuaWRlbnRpdHkoKTsKCiAgVmlzaXRPbmNlQ29uc3RhbnRWaXNpdG9yKCkgewogICAgX3Zpc2l0b3IgPSBuZXcgX0NvbnN0YW50Q2FsbGJhY2tWaXNpdG9yPHZvaWQ+KHRoaXMpOwogIH0KCiAgLy8vIFZpc2l0cyBbbm9kZV0gaWYgbm90IGFscmVhZHkgdmlzaXRlZC4KICAvLy8KICAvLy8gQ2FsbCB0aGlzIG1ldGhvZCB0byB2aXNpdCBzdWJub2RlcyByZWN1cnNpdmVseSwgd2hpbGUgb25seSB2aXNpdGluZyBlYWNoCiAgLy8vIHN1Ym5vZGUgb25jZS4KICB2b2lkIHZpc2l0Q29uc3RhbnQoQ29uc3RhbnQgbm9kZSkgewogICAgaWYgKGNhY2hlLmFkZChub2RlKSkgewogICAgICBub2RlLmFjY2VwdChfdmlzaXRvcik7CiAgICB9CiAgfQoKICB2b2lkIGRlZmF1bHRDb25zdGFudChDb25zdGFudCBub2RlKSA9PiBudWxsOwoKICB2b2lkIHZpc2l0TnVsbENvbnN0YW50KE51bGxDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdEJvb2xDb25zdGFudChCb29sQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIHZvaWQgdmlzaXRJbnRDb25zdGFudChJbnRDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdERvdWJsZUNvbnN0YW50KERvdWJsZUNvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICB2b2lkIHZpc2l0U3RyaW5nQ29uc3RhbnQoU3RyaW5nQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIHZvaWQgdmlzaXRTeW1ib2xDb25zdGFudChTeW1ib2xDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdE1hcENvbnN0YW50KE1hcENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICB2b2lkIHZpc2l0TGlzdENvbnN0YW50KExpc3RDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdFNldENvbnN0YW50KFNldENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICB2b2lkIHZpc2l0SW5zdGFuY2VDb25zdGFudChJbnN0YW5jZUNvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICB2b2lkIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudChQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudChub2RlKTsKICB2b2lkIHZpc2l0VGVhck9mZkNvbnN0YW50KFRlYXJPZmZDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQoVHlwZUxpdGVyYWxDb25zdGFudCBub2RlKSA9PgogICAgICBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgdm9pZCB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSA9PgogICAgICBkZWZhdWx0Q29uc3RhbnQobm9kZSk7Cn0KCmNsYXNzIE1lbWJlclJlZmVyZW5jZVZpc2l0b3I8Uj4gewogIGNvbnN0IE1lbWJlclJlZmVyZW5jZVZpc2l0b3IoKTsKCiAgUiBkZWZhdWx0TWVtYmVyUmVmZXJlbmNlKE1lbWJlciBub2RlKSA9PiBudWxsOwoKICBSIHZpc2l0RmllbGRSZWZlcmVuY2UoRmllbGQgbm9kZSkgPT4gZGVmYXVsdE1lbWJlclJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0Q29uc3RydWN0b3JSZWZlcmVuY2UoQ29uc3RydWN0b3Igbm9kZSkgPT4gZGVmYXVsdE1lbWJlclJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0UHJvY2VkdXJlUmVmZXJlbmNlKFByb2NlZHVyZSBub2RlKSA9PiBkZWZhdWx0TWVtYmVyUmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvclJlZmVyZW5jZSgKICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3Igbm9kZSkgewogICAgcmV0dXJuIGRlZmF1bHRNZW1iZXJSZWZlcmVuY2Uobm9kZSk7CiAgfQp9CgpjbGFzcyBWaXNpdG9yPFI+IGV4dGVuZHMgVHJlZVZpc2l0b3I8Uj4KICAgIGltcGxlbWVudHMKICAgICAgICBEYXJ0VHlwZVZpc2l0b3I8Uj4sCiAgICAgICAgQ29uc3RhbnRWaXNpdG9yPFI+LAogICAgICAgIE1lbWJlclJlZmVyZW5jZVZpc2l0b3I8Uj4gewogIGNvbnN0IFZpc2l0b3IoKTsKCiAgLy8vIFRoZSBjYXRjaC1hbGwgY2FzZSwgZXhjZXB0IGZvciByZWZlcmVuY2VzLgogIFIgZGVmYXVsdE5vZGUoTm9kZSBub2RlKSA9PiBudWxsOwogIFIgZGVmYXVsdFRyZWVOb2RlKFRyZWVOb2RlIG5vZGUpID0+IGRlZmF1bHROb2RlKG5vZGUpOwoKICAvLyBEYXJ0VHlwZXMKICBSIGRlZmF1bHREYXJ0VHlwZShEYXJ0VHlwZSBub2RlKSA9PiBkZWZhdWx0Tm9kZShub2RlKTsKICBSIHZpc2l0SW52YWxpZFR5cGUoSW52YWxpZFR5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwogIFIgdmlzaXREeW5hbWljVHlwZShEeW5hbWljVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIG5vZGUpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlKTsKICBSIHZpc2l0Qm90dG9tVHlwZShCb3R0b21UeXBlIG5vZGUpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlKTsKICBSIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIG5vZGUpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlKTsKICBSIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBub2RlKSA9PiBkZWZhdWx0RGFydFR5cGUobm9kZSk7CiAgUiB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpID0+IGRlZmF1bHREYXJ0VHlwZShub2RlKTsKICBSIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwoKICAvLyBDb25zdGFudHMKICBSIGRlZmF1bHRDb25zdGFudChDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Tm9kZShub2RlKTsKICBSIHZpc2l0TnVsbENvbnN0YW50KE51bGxDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdEJvb2xDb25zdGFudChCb29sQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRJbnRDb25zdGFudChJbnRDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdERvdWJsZUNvbnN0YW50KERvdWJsZUNvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0U3RyaW5nQ29uc3RhbnQoU3RyaW5nQ29uc3RhbnQgbm9kZSkgPT4gZGVmYXVsdENvbnN0YW50KG5vZGUpOwogIFIgdmlzaXRTeW1ib2xDb25zdGFudChTeW1ib2xDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdE1hcENvbnN0YW50KE1hcENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0TGlzdENvbnN0YW50KExpc3RDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFNldENvbnN0YW50KFNldENvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0SW5zdGFuY2VDb25zdGFudChJbnN0YW5jZUNvbnN0YW50IG5vZGUpID0+IGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudChQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudChub2RlKTsKICBSIHZpc2l0VGVhck9mZkNvbnN0YW50KFRlYXJPZmZDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQoVHlwZUxpdGVyYWxDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CiAgUiB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSA9PiBkZWZhdWx0Q29uc3RhbnQobm9kZSk7CgogIC8vIENsYXNzIHJlZmVyZW5jZXMKICBSIHZpc2l0Q2xhc3NSZWZlcmVuY2UoQ2xhc3Mgbm9kZSkgPT4gbnVsbDsKICBSIHZpc2l0VHlwZWRlZlJlZmVyZW5jZShUeXBlZGVmIG5vZGUpID0+IG51bGw7CgogIC8vIENvbnN0YW50IHJlZmVyZW5jZXMKICBSIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShDb25zdGFudCBub2RlKSA9PiBudWxsOwogIFIgdmlzaXROdWxsQ29uc3RhbnRSZWZlcmVuY2UoTnVsbENvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0Qm9vbENvbnN0YW50UmVmZXJlbmNlKEJvb2xDb25zdGFudCBub2RlKSA9PgogICAgICBkZWZhdWx0Q29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgUiB2aXNpdEludENvbnN0YW50UmVmZXJlbmNlKEludENvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0RG91YmxlQ29uc3RhbnRSZWZlcmVuY2UoRG91YmxlQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRTdHJpbmdDb25zdGFudFJlZmVyZW5jZShTdHJpbmdDb25zdGFudCBub2RlKSA9PgogICAgICBkZWZhdWx0Q29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgUiB2aXNpdFN5bWJvbENvbnN0YW50UmVmZXJlbmNlKFN5bWJvbENvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0TWFwQ29uc3RhbnRSZWZlcmVuY2UoTWFwQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRMaXN0Q29uc3RhbnRSZWZlcmVuY2UoTGlzdENvbnN0YW50IG5vZGUpID0+CiAgICAgIGRlZmF1bHRDb25zdGFudFJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0U2V0Q29uc3RhbnRSZWZlcmVuY2UoU2V0Q29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRJbnN0YW5jZUNvbnN0YW50UmVmZXJlbmNlKEluc3RhbmNlQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50UmVmZXJlbmNlKAogICAgICAgICAgUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudCBub2RlKSA9PgogICAgICBkZWZhdWx0Q29uc3RhbnRSZWZlcmVuY2Uobm9kZSk7CiAgUiB2aXNpdFRlYXJPZmZDb25zdGFudFJlZmVyZW5jZShUZWFyT2ZmQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRUeXBlTGl0ZXJhbENvbnN0YW50UmVmZXJlbmNlKFR5cGVMaXRlcmFsQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRVbmV2YWx1YXRlZENvbnN0YW50UmVmZXJlbmNlKFVuZXZhbHVhdGVkQ29uc3RhbnQgbm9kZSkgPT4KICAgICAgZGVmYXVsdENvbnN0YW50UmVmZXJlbmNlKG5vZGUpOwoKICAvLyBNZW1iZXIgcmVmZXJlbmNlcwogIFIgZGVmYXVsdE1lbWJlclJlZmVyZW5jZShNZW1iZXIgbm9kZSkgPT4gbnVsbDsKICBSIHZpc2l0RmllbGRSZWZlcmVuY2UoRmllbGQgbm9kZSkgPT4gZGVmYXVsdE1lbWJlclJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0Q29uc3RydWN0b3JSZWZlcmVuY2UoQ29uc3RydWN0b3Igbm9kZSkgPT4gZGVmYXVsdE1lbWJlclJlZmVyZW5jZShub2RlKTsKICBSIHZpc2l0UHJvY2VkdXJlUmVmZXJlbmNlKFByb2NlZHVyZSBub2RlKSA9PiBkZWZhdWx0TWVtYmVyUmVmZXJlbmNlKG5vZGUpOwogIFIgdmlzaXRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvclJlZmVyZW5jZSgKICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3Igbm9kZSkgewogICAgcmV0dXJuIGRlZmF1bHRNZW1iZXJSZWZlcmVuY2Uobm9kZSk7CiAgfQoKICBSIHZpc2l0TmFtZShOYW1lIG5vZGUpID0+IGRlZmF1bHROb2RlKG5vZGUpOwogIFIgdmlzaXRTdXBlcnR5cGUoU3VwZXJ0eXBlIG5vZGUpID0+IGRlZmF1bHROb2RlKG5vZGUpOwogIFIgdmlzaXROYW1lZFR5cGUoTmFtZWRUeXBlIG5vZGUpID0+IGRlZmF1bHROb2RlKG5vZGUpOwp9CgpjbGFzcyBSZWN1cnNpdmVWaXNpdG9yPFI+IGV4dGVuZHMgVmlzaXRvcjxSPiB7CiAgY29uc3QgUmVjdXJzaXZlVmlzaXRvcigpOwoKICBSIGRlZmF1bHROb2RlKE5vZGUgbm9kZSkgewogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogICAgcmV0dXJuIG51bGw7CiAgfQp9CgovLy8gVmlzaXRvciB0aGF0IHJlY3Vyc2l2ZWx5IHJld3JpdGVzIGVhY2ggbm9kZSBpbiB0cmVlLgovLy8KLy8vIFZpc2l0IG1ldGhvZHMgc2hvdWxkIHJldHVybiBhIG5ldyBub2RlLCBvciB0aGUgdmlzaXRlZCBub2RlIChwb3NzaWJseQovLy8gbXV0YXRlZCksIG9yIGFueSBub2RlIGZyb20gdGhlIHZpc2l0ZWQgbm9kZSdzIHN1YnRyZWUuCi8vLwovLy8gRWFjaCBzdWJjbGFzcyBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgQVNUIHJlbWFpbnMgYSB0cmVlLgovLy8KLy8vIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHRyYW5zZm9ybWVyIHJlcGxhY2VzIGV2ZXJ5IG9jY3VycmVuY2Ugb2YKLy8vIGAhKHggJiYgeSlgIHdpdGggYCgheCB8fCAheSlgOgovLy8KLy8vICAgICBjbGFzcyBOZWdhdGlvblNpbmtlciBleHRlbmRzIFRyYW5zZm9ybWVyIHsKLy8vICAgICAgIEBvdmVycmlkZQovLy8gICAgICAgTm9kZSB2aXNpdE5vdChOb3Qgbm9kZSkgewovLy8gICAgICAgICB2YXIgb3BlcmFuZCA9IG5vZGUub3BlcmFuZC5hY2NlcHQodGhpcyk7IC8vIFJlbWVtYmVyIHRvIHZpc2l0LgovLy8gICAgICAgICBpZiAob3BlcmFuZCBpcyBMb2dpY2FsRXhwcmVzc2lvbiAmJiBvcGVyYW5kLm9wZXJhdG9yID09ICcmJicpIHsKLy8vICAgICAgICAgICByZXR1cm4gbmV3IExvZ2ljYWxFeHByZXNzaW9uKAovLy8gICAgICAgICAgICAgbmV3IE5vdChvcGVyYW5kLmxlZnQpLAovLy8gICAgICAgICAgICAgJ3x8JywKLy8vICAgICAgICAgICAgIG5ldyBOb3Qob3BlcmFuZC5yaWdodCkpOwovLy8gICAgICAgICB9Ci8vLyAgICAgICAgIHJldHVybiBub2RlOwovLy8gICAgICAgfQovLy8gICAgIH0KLy8vCmNsYXNzIFRyYW5zZm9ybWVyIGV4dGVuZHMgVHJlZVZpc2l0b3I8VHJlZU5vZGU+IHsKICBjb25zdCBUcmFuc2Zvcm1lcigpOwoKICAvLy8gUmVwbGFjZXMgYSB1c2Ugb2YgYSB0eXBlLgogIC8vLwogIC8vLyBCeSBkZWZhdWx0LCByZWN1cnNpb24gc3RvcHMgYXQgdGhpcyBwb2ludC4KICBEYXJ0VHlwZSB2aXNpdERhcnRUeXBlKERhcnRUeXBlIG5vZGUpID0+IG5vZGU7CgogIENvbnN0YW50IHZpc2l0Q29uc3RhbnQoQ29uc3RhbnQgbm9kZSkgPT4gbm9kZTsKCiAgU3VwZXJ0eXBlIHZpc2l0U3VwZXJ0eXBlKFN1cGVydHlwZSBub2RlKSA9PiBub2RlOwoKICBUcmVlTm9kZSBkZWZhdWx0VHJlZU5vZGUoVHJlZU5vZGUgbm9kZSkgewogICAgbm9kZS50cmFuc2Zvcm1DaGlsZHJlbih0aGlzKTsKICAgIHJldHVybiBub2RlOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgRXhwcmVzc2lvblZpc2l0b3IxPFIsIFQ+IHsKICBjb25zdCBFeHByZXNzaW9uVmlzaXRvcjEoKTsKCiAgUiBkZWZhdWx0RXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUsIFQgYXJnKSA9PiBudWxsOwogIFIgZGVmYXVsdEJhc2ljTGl0ZXJhbChCYXNpY0xpdGVyYWwgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdEludmFsaWRFeHByZXNzaW9uKEludmFsaWRFeHByZXNzaW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRWYXJpYWJsZUdldChWYXJpYWJsZUdldCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0VmFyaWFibGVTZXQoVmFyaWFibGVTZXQgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFByb3BlcnR5R2V0KFByb3BlcnR5R2V0IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRQcm9wZXJ0eVNldChQcm9wZXJ0eVNldCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0RGlyZWN0UHJvcGVydHlHZXQoRGlyZWN0UHJvcGVydHlHZXQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdERpcmVjdFByb3BlcnR5U2V0KERpcmVjdFByb3BlcnR5U2V0IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRTdXBlclByb3BlcnR5R2V0KFN1cGVyUHJvcGVydHlHZXQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFN1cGVyUHJvcGVydHlTZXQoU3VwZXJQcm9wZXJ0eVNldCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0U3RhdGljR2V0KFN0YXRpY0dldCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0U3RhdGljU2V0KFN0YXRpY1NldCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0TWV0aG9kSW52b2NhdGlvbihNZXRob2RJbnZvY2F0aW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXREaXJlY3RNZXRob2RJbnZvY2F0aW9uKERpcmVjdE1ldGhvZEludm9jYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihTdXBlck1ldGhvZEludm9jYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFN0YXRpY0ludm9jYXRpb24oU3RhdGljSW52b2NhdGlvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKENvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0Tm90KE5vdCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0TG9naWNhbEV4cHJlc3Npb24oTG9naWNhbEV4cHJlc3Npb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdENvbmRpdGlvbmFsRXhwcmVzc2lvbihDb25kaXRpb25hbEV4cHJlc3Npb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0TGlzdENvbmNhdGVuYXRpb24oTGlzdENvbmNhdGVuYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFNldENvbmNhdGVuYXRpb24oU2V0Q29uY2F0ZW5hdGlvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0TWFwQ29uY2F0ZW5hdGlvbihNYXBDb25jYXRlbmF0aW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRJbnN0YW5jZUNyZWF0aW9uKEluc3RhbmNlQ3JlYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdElzRXhwcmVzc2lvbihJc0V4cHJlc3Npb24gbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdEFzRXhwcmVzc2lvbihBc0V4cHJlc3Npb24gbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFN5bWJvbExpdGVyYWwoU3ltYm9sTGl0ZXJhbCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0VHlwZUxpdGVyYWwoVHlwZUxpdGVyYWwgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFRoaXNFeHByZXNzaW9uKFRoaXNFeHByZXNzaW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUsIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0UmV0aHJvdyhSZXRocm93IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRUaHJvdyhUaHJvdyBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0TGlzdExpdGVyYWwoTGlzdExpdGVyYWwgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdFNldExpdGVyYWwoU2V0TGl0ZXJhbCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKICBSIHZpc2l0TWFwTGl0ZXJhbChNYXBMaXRlcmFsIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRBd2FpdEV4cHJlc3Npb24oQXdhaXRFeHByZXNzaW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRGdW5jdGlvbkV4cHJlc3Npb24oRnVuY3Rpb25FeHByZXNzaW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRJbnRMaXRlcmFsKEludExpdGVyYWwgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRCYXNpY0xpdGVyYWwobm9kZSwgYXJnKTsKICBSIHZpc2l0U3RyaW5nTGl0ZXJhbChTdHJpbmdMaXRlcmFsIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0QmFzaWNMaXRlcmFsKG5vZGUsIGFyZyk7CiAgUiB2aXNpdERvdWJsZUxpdGVyYWwoRG91YmxlTGl0ZXJhbCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEJhc2ljTGl0ZXJhbChub2RlLCBhcmcpOwogIFIgdmlzaXRCb29sTGl0ZXJhbChCb29sTGl0ZXJhbCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEJhc2ljTGl0ZXJhbChub2RlLCBhcmcpOwogIFIgdmlzaXROdWxsTGl0ZXJhbChOdWxsTGl0ZXJhbCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdEJhc2ljTGl0ZXJhbChub2RlLCBhcmcpOwogIFIgdmlzaXRMZXQoTGV0IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRCbG9ja0V4cHJlc3Npb24oQmxvY2tFeHByZXNzaW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRJbnN0YW50aWF0aW9uKEluc3RhbnRpYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUsIGFyZyk7CiAgUiB2aXNpdExvYWRMaWJyYXJ5KExvYWRMaWJyYXJ5IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCBhcmcpOwogIFIgdmlzaXRDaGVja0xpYnJhcnlJc0xvYWRlZChDaGVja0xpYnJhcnlJc0xvYWRlZCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdEV4cHJlc3Npb24obm9kZSwgYXJnKTsKfQoKYWJzdHJhY3QgY2xhc3MgU3RhdGVtZW50VmlzaXRvcjE8UiwgVD4gewogIGNvbnN0IFN0YXRlbWVudFZpc2l0b3IxKCk7CgogIFIgZGVmYXVsdFN0YXRlbWVudChTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+IG51bGw7CgogIFIgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KEV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0QmxvY2soQmxvY2sgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0QXNzZXJ0QmxvY2soQXNzZXJ0QmxvY2sgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0RW1wdHlTdGF0ZW1lbnQoRW1wdHlTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0QXNzZXJ0U3RhdGVtZW50KEFzc2VydFN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRMYWJlbGVkU3RhdGVtZW50KExhYmVsZWRTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0QnJlYWtTdGF0ZW1lbnQoQnJlYWtTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0V2hpbGVTdGF0ZW1lbnQoV2hpbGVTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0RG9TdGF0ZW1lbnQoRG9TdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0Rm9yU3RhdGVtZW50KEZvclN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRGb3JJblN0YXRlbWVudChGb3JJblN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoU3dpdGNoU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KENvbnRpbnVlU3dpdGNoU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdElmU3RhdGVtZW50KElmU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFJldHVyblN0YXRlbWVudChSZXR1cm5TdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0VHJ5Q2F0Y2goVHJ5Q2F0Y2ggbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0VHJ5RmluYWxseShUcnlGaW5hbGx5IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFlpZWxkU3RhdGVtZW50KFlpZWxkU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKfQoKYWJzdHJhY3QgY2xhc3MgQm9keVZpc2l0b3IxPFIsIFQ+IGV4dGVuZHMgRXhwcmVzc2lvblZpc2l0b3IxPFIsIFQ+CiAgICBpbXBsZW1lbnRzIFN0YXRlbWVudFZpc2l0b3IxPFIsIFQ+IHsKICBjb25zdCBCb2R5VmlzaXRvcjEoKTsKCiAgUiBkZWZhdWx0U3RhdGVtZW50KFN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4gbnVsbDsKICBSIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEJsb2NrKEJsb2NrIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEFzc2VydEJsb2NrKEFzc2VydEJsb2NrIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEVtcHR5U3RhdGVtZW50KEVtcHR5U3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEFzc2VydFN0YXRlbWVudChBc3NlcnRTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0TGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEJyZWFrU3RhdGVtZW50KEJyZWFrU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFdoaWxlU3RhdGVtZW50KFdoaWxlU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdERvU3RhdGVtZW50KERvU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdEZvclN0YXRlbWVudChGb3JTdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+IGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoRm9ySW5TdGF0ZW1lbnQgbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0U3dpdGNoU3RhdGVtZW50KFN3aXRjaFN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChDb250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRJZlN0YXRlbWVudChJZlN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRSZXR1cm5TdGF0ZW1lbnQoUmV0dXJuU3RhdGVtZW50IG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFRyeUNhdGNoKFRyeUNhdGNoIG5vZGUsIFQgYXJnKSA9PiBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7CiAgUiB2aXNpdFRyeUZpbmFsbHkoVHJ5RmluYWxseSBub2RlLCBUIGFyZykgPT4gZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRZaWVsZFN0YXRlbWVudChZaWVsZFN0YXRlbWVudCBub2RlLCBUIGFyZykgPT4KICAgICAgZGVmYXVsdFN0YXRlbWVudChub2RlLCBhcmcpOwogIFIgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSwgVCBhcmcpID0+CiAgICAgIGRlZmF1bHRTdGF0ZW1lbnQobm9kZSwgYXJnKTsKICBSIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUsIFQgYXJnKSA9PgogICAgICBkZWZhdWx0U3RhdGVtZW50KG5vZGUsIGFyZyk7Cn0KgyIATk48HAEiGgETASYdATBHAU9DQ0NDT09NTT8/TUAfPh9NPh8zTz4fOh9PTU1NRUVHQ0k7N0NBQUtRUUlDSUVFM0tHQzwfAgElHAEuAToeNkJISkxISEJESEpCHkJKPEBIOh46HgIBIhkBKAE/OzNNIAQCASceATIBOCBOTkAgTlACARUPHh0aIBcBLAERQUdPQ0NDQ09PTU0/P01AHz4fTT4fM08+HzofT01NTUVFR0NJOzdDQUFLUVFJQ0lFRTNLR0M8HwEQPzoeNkJISkxISEJESEpCHkJKPEBIOh46HgENOT87M00gBAENNQESQzggTk5AIE5QARY5TT9BOUVDPUk/NTs9AgEbGwEsAUFBOz9FQ01BAgEfMwFNTUdLUU89Ik0CASIES01HBExGGxsBLAFDQ0FHR0dBQ0FLTB1JUVECASYkASoqKC4uLigqKDJKMDg4AgFCJQEsAQw6MAEMOjABDDIsAQxMOQEMNC0BDEwBDE8BDEwBDDArAQwwKwEMMCsBDEwBDE8BDE8BDEcCAU1RJ0YlOQEhNgQBSgZXBk4iIzIEASwBQ0NBR0dHQUNBS0wdSVFRAgFRBE0SRCs2AR85BAEsBk8UJhsdBgQBLwFGRkRKSkpERkROTx1MPR09HQIBIiIBMQFFUU0xLCkEAgEoDxwcJBMBMSQ5AQ85QUE7P0VDTUEBDzlDQ0FHR0dBQ0FLTB1JUVEBFi0xARk1NSY1JjMmOSY5JjkmMyY1JjMmPSYwMCY7JkMmQyYBFzFFUU0xLCkEAS85OQIBLxwBHR4RBAIBOQRKOwRLBEgjBDMUJEtMLCcWKQ4ZDAoEMhcBIAYxMQExATQBLCIRBAIBKh4BNzUkPSRPT09PPSQ9JDskOyRLSzskRyRFJDskRSQ/PSRFJEEkPSQ7JDskOyRRUTUkTzckPSRHQ09NTTkkPyRPNSY1JlFRPzkkNSRPQyQCASkdATUBQSNCTjcjOSM7IzcjNyNOUDcjOSNJI045I0hMNyNBI0EjAgFDKRgBNUEjQk43IzkjOyM3IzcjTlA3IzkjSSNOOSNITDcjQSNBIwIBG3BhY2thZ2U6a2VybmVsL3Zpc2l0b3IuZGFydCtzZGtyb290Oi9wa2cva2VybmVsL2xpYi9jYW5vbmljYWxfbmFtZS5kYXJ0mPovLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpsaWJyYXJ5IGtlcm5lbC5jYW5vbmljYWxfbmFtZTsKCmltcG9ydCAnYXN0LmRhcnQnOwoKLy8vIEEgc3RyaW5nIHNlcXVlbmNlIHRoYXQgaWRlbnRpZmllcyBhIGxpYnJhcnksIGNsYXNzLCBvciBtZW1iZXIuCi8vLwovLy8gQ2Fub25pY2FsIG5hbWVzIGFyZSBvcmdhbml6ZWQgaW4gYSBwcmVmaXggdHJlZS4gIEVhY2ggbm9kZSBrbm93cyBpdHMKLy8vIHBhcmVudCwgY2hpbGRyZW4sIGFuZCB0aGUgQVNUIG5vZGUgaXQgaXMgY3VycmVudGx5IGJvdW5kIHRvLgovLy8KLy8vIFRoZSBmb2xsb3dpbmcgc2NoZW1hIHNwZWNpZmllcyBob3cgdGhlIGNhbm9uaWNhbCBuYW1lIG9mIGEgZ2l2ZW4gb2JqZWN0Ci8vLyBpcyBkZWZpbmVkOgovLy8KLy8vICAgICAgTGlicmFyeToKLy8vICAgICAgICAgVVJJIG9mIGxpYnJhcnkKLy8vCi8vLyAgICAgIENsYXNzOgovLy8gICAgICAgICBDYW5vbmljYWwgbmFtZSBvZiBlbmNsb3NpbmcgbGlicmFyeQovLy8gICAgICAgICBOYW1lIG9mIGNsYXNzCi8vLwovLy8gICAgICBDb25zdHJ1Y3RvcjoKLy8vICAgICAgICAgQ2Fub25pY2FsIG5hbWUgb2YgZW5jbG9zaW5nIGNsYXNzIG9yIGxpYnJhcnkKLy8vICAgICAgICAgIkBjb25zdHJ1Y3RvcnMiCi8vLyAgICAgICAgIFF1YWxpZmllZCBuYW1lCi8vLwovLy8gICAgICBGaWVsZDoKLy8vICAgICAgICAgQ2Fub25pY2FsIG5hbWUgb2YgZW5jbG9zaW5nIGNsYXNzIG9yIGxpYnJhcnkKLy8vICAgICAgICAgIkBmaWVsZHMiCi8vLyAgICAgICAgIFF1YWxpZmllZCBuYW1lCi8vLwovLy8gICAgICBUeXBlZGVmOgovLy8gICAgICAgICBDYW5vbmljYWwgbmFtZSBvZiBlbmNsb3NpbmcgY2xhc3MKLy8vICAgICAgICAgIkB0eXBlZGVmcyIKLy8vICAgICAgICAgTmFtZSB0ZXh0Ci8vLwovLy8gICAgICBQcm9jZWR1cmUgdGhhdCBpcyBub3QgYW4gYWNjZXNzb3Igb3IgZmFjdG9yeToKLy8vICAgICAgICAgQ2Fub25pY2FsIG5hbWUgb2YgZW5jbG9zaW5nIGNsYXNzIG9yIGxpYnJhcnkKLy8vICAgICAgICAgIkBtZXRob2RzIgovLy8gICAgICAgICBRdWFsaWZpZWQgbmFtZQovLy8KLy8vICAgICAgUHJvY2VkdXJlIHRoYXQgaXMgYSBnZXR0ZXI6Ci8vLyAgICAgICAgIENhbm9uaWNhbCBuYW1lIG9mIGVuY2xvc2luZyBjbGFzcyBvciBsaWJyYXJ5Ci8vLyAgICAgICAgICJAZ2V0dGVycyIKLy8vICAgICAgICAgUXVhbGlmaWVkIG5hbWUKLy8vCi8vLyAgICAgIFByb2NlZHVyZSB0aGF0IGlzIGEgc2V0dGVyOgovLy8gICAgICAgICBDYW5vbmljYWwgbmFtZSBvZiBlbmNsb3NpbmcgY2xhc3Mgb3IgbGlicmFyeQovLy8gICAgICAgICAiQHNldHRlcnMiCi8vLyAgICAgICAgIFF1YWxpZmllZCBuYW1lCi8vLwovLy8gICAgICBQcm9jZWR1cmUgdGhhdCBpcyBhIGZhY3Rvcnk6Ci8vLyAgICAgICAgIENhbm9uaWNhbCBuYW1lIG9mIGVuY2xvc2luZyBjbGFzcwovLy8gICAgICAgICAiQGZhY3RvcmllcyIKLy8vICAgICAgICAgUXVhbGlmaWVkIG5hbWUKLy8vCi8vLyAgICAgIFF1YWxpZmllZCBuYW1lOgovLy8gICAgICAgICBpZiBwcml2YXRlOiBVUkkgb2YgbGlicmFyeQovLy8gICAgICAgICBOYW1lIHRleHQKLy8vCi8vLyBUaGUgInF1YWxpZmllZCBuYW1lIiBhbGxvd3MgYSBtZW1iZXIgdG8gaGF2ZSBhIG5hbWUgdGhhdCBpcyBwcml2YXRlIHRvCi8vLyBhIGxpYnJhcnkgb3RoZXIgdGhhbiB0aGUgb25lIGNvbnRhaW5pbmcgdGhhdCBtZW1iZXIuCmNsYXNzIENhbm9uaWNhbE5hbWUgewogIENhbm9uaWNhbE5hbWUgX3BhcmVudDsKCiAgQ2Fub25pY2FsTmFtZSBnZXQgcGFyZW50ID0+IF9wYXJlbnQ7CgogIGZpbmFsIFN0cmluZyBuYW1lOwogIENhbm9uaWNhbE5hbWUgX25vblJvb3RUb3A7CgogIE1hcDxTdHJpbmcsIENhbm9uaWNhbE5hbWU+IF9jaGlsZHJlbjsKCiAgLy8vIFRoZSBsaWJyYXJ5LCBjbGFzcywgb3IgbWVtYmVyIGJvdW5kIHRvIHRoaXMgbmFtZS4KICBSZWZlcmVuY2UgcmVmZXJlbmNlOwoKICAvLy8gVGVtcG9yYXJ5IGluZGV4IHVzZWQgZHVyaW5nIHNlcmlhbGl6YXRpb24uCiAgaW50IGluZGV4ID0gLTE7CgogIENhbm9uaWNhbE5hbWUuXyh0aGlzLl9wYXJlbnQsIHRoaXMubmFtZSkgewogICAgYXNzZXJ0KG5hbWUgIT0gbnVsbCk7CiAgICBhc3NlcnQocGFyZW50ICE9IG51bGwpOwogICAgX25vblJvb3RUb3AgPSBfcGFyZW50LmlzUm9vdCA/IHRoaXMgOiBfcGFyZW50Ll9ub25Sb290VG9wOwogIH0KCiAgQ2Fub25pY2FsTmFtZS5yb290KCkKICAgICAgOiBfcGFyZW50ID0gbnVsbCwKICAgICAgICBfbm9uUm9vdFRvcCA9IG51bGwsCiAgICAgICAgbmFtZSA9ICcnOwoKICBib29sIGdldCBpc1Jvb3QgPT4gX3BhcmVudCA9PSBudWxsOwogIENhbm9uaWNhbE5hbWUgZ2V0IG5vblJvb3RUb3AgPT4gX25vblJvb3RUb3A7CgogIEl0ZXJhYmxlPENhbm9uaWNhbE5hbWU+IGdldCBjaGlsZHJlbiA9PgogICAgICBfY2hpbGRyZW4/LnZhbHVlcyA/PyBjb25zdCA8Q2Fub25pY2FsTmFtZT5bXTsKCiAgSXRlcmFibGU8Q2Fub25pY2FsTmFtZT4gZ2V0IGNoaWxkcmVuT3JOdWxsID0+IF9jaGlsZHJlbj8udmFsdWVzOwoKICBib29sIGhhc0NoaWxkKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gX2NoaWxkcmVuICE9IG51bGwgJiYgX2NoaWxkcmVuLmNvbnRhaW5zS2V5KG5hbWUpOwogIH0KCiAgQ2Fub25pY2FsTmFtZSBnZXRDaGlsZChTdHJpbmcgbmFtZSkgewogICAgdmFyIG1hcCA9IF9jaGlsZHJlbiA/Pz0gPFN0cmluZywgQ2Fub25pY2FsTmFtZT57fTsKICAgIHJldHVybiBtYXBbbmFtZV0gPz89IG5ldyBDYW5vbmljYWxOYW1lLl8odGhpcywgbmFtZSk7CiAgfQoKICBDYW5vbmljYWxOYW1lIGdldENoaWxkRnJvbVVyaShVcmkgdXJpKSB7CiAgICAvLyBOb3RlIHRoYXQgdGhlIFVyaSBjbGFzcyBjYWNoZXMgaXRzIHN0cmluZyByZXByZXNlbnRhdGlvbiwgYW5kIGFsbCBsaWJyYXJ5CiAgICAvLyBVUklzIHdpbGwgYmUgc3RyaW5naWZpZWQgZm9yIHNlcmlhbGl6YXRpb24gYW55d2F5LCBzbyB0aGVyZSBpcyBubwogICAgLy8gc2lnbmlmaWNhbnQgY29zdCBmb3IgY29udmVydGluZyB0aGUgVXJpIHRvIGEgc3RyaW5nIGhlcmUuCiAgICByZXR1cm4gZ2V0Q2hpbGQoJyR1cmknKTsKICB9CgogIENhbm9uaWNhbE5hbWUgZ2V0Q2hpbGRGcm9tUXVhbGlmaWVkTmFtZShOYW1lIG5hbWUpIHsKICAgIHJldHVybiBuYW1lLmlzUHJpdmF0ZQogICAgICAgID8gZ2V0Q2hpbGRGcm9tVXJpKG5hbWUubGlicmFyeS5pbXBvcnRVcmkpLmdldENoaWxkKG5hbWUubmFtZSkKICAgICAgICA6IGdldENoaWxkKG5hbWUubmFtZSk7CiAgfQoKICBDYW5vbmljYWxOYW1lIGdldENoaWxkRnJvbU1lbWJlcihNZW1iZXIgbWVtYmVyKSB7CiAgICByZXR1cm4gZ2V0Q2hpbGQoZ2V0TWVtYmVyUXVhbGlmaWVyKG1lbWJlcikpCiAgICAgICAgLmdldENoaWxkRnJvbVF1YWxpZmllZE5hbWUobWVtYmVyLm5hbWUpOwogIH0KCiAgQ2Fub25pY2FsTmFtZSBnZXRDaGlsZEZyb21GaWVsZFdpdGhOYW1lKE5hbWUgbmFtZSkgewogICAgcmV0dXJuIGdldENoaWxkKCdAZmllbGRzJykuZ2V0Q2hpbGRGcm9tUXVhbGlmaWVkTmFtZShuYW1lKTsKICB9CgogIENhbm9uaWNhbE5hbWUgZ2V0Q2hpbGRGcm9tVHlwZWRlZihUeXBlZGVmIHR5cGVkZWZfKSB7CiAgICByZXR1cm4gZ2V0Q2hpbGQoJ0B0eXBlZGVmcycpLmdldENoaWxkKHR5cGVkZWZfLm5hbWUpOwogIH0KCiAgLy8vIFRha2Ugb3duZXJzaGlwIG9mIGEgY2hpbGQgY2Fub25pY2FsIG5hbWUgYW5kIGl0cyBzdWJ0cmVlLgogIC8vLwogIC8vLyBUaGUgY2hpbGQgbmFtZSBpcyByZW1vdmVkIGFzIGEgY2hpbGQgb2YgaXRzIGN1cnJlbnQgcGFyZW50IGFuZCB0aGlzIG5hbWUKICAvLy8gYmVjb21lcyB0aGUgbmV3IHBhcmVudC4gIE5vdGUgdGhhdCB0aGlzIG1vdmVzIHRoZSBlbnRpcmUgc3VidHJlZSByb290ZWQgYXQKICAvLy8gdGhlIGNoaWxkLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCB0byBtb3ZlIHN1YnRyZWVzIHdpdGhpbiBhIGNhbm9uaWNhbCBuYW1lIHRyZWUgb3IKICAvLy8gZWxzZSBtb3ZlIHRoZW0gYmV0d2VlbiB0cmVlcy4gIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIG1ldGhvZCBpZiB0aGUgY2hpbGQKICAvLy8gbmFtZSBpcyBhbHJlYWR5IGEgY2hpbGQgb2YgdGhpcyBuYW1lLgogIC8vLwogIC8vLyBUaGUgcHJlY29uZGl0aW9uIGlzIHRoYXQgdGhpcyBuYW1lIGNhbm5vdCBoYXZlIGEgKGRpZmZlcmVudCkgY2hpbGQgd2l0aAogIC8vLyB0aGUgc2FtZSBuYW1lLgogIHZvaWQgYWRvcHRDaGlsZChDYW5vbmljYWxOYW1lIGNoaWxkKSB7CiAgICBpZiAoY2hpbGQuX3BhcmVudCA9PSB0aGlzKSByZXR1cm47CiAgICBpZiAoX2NoaWxkcmVuICE9IG51bGwgJiYgX2NoaWxkcmVuLmNvbnRhaW5zS2V5KGNoaWxkLm5hbWUpKSB7CiAgICAgIHRocm93ICdDYW5ub3QgYWRkIGEgY2hpbGQgdG8gJHRoaXMgYmVjYXVzZSB0aGlzIG5hbWUgYWxyZWFkeSBoYXMgYSAnCiAgICAgICAgICAnY2hpbGQgbmFtZWQgJHtjaGlsZC5uYW1lfSc7CiAgICB9CiAgICBjaGlsZC5fcGFyZW50LnJlbW92ZUNoaWxkKGNoaWxkLm5hbWUpOwogICAgY2hpbGQuX3BhcmVudCA9IHRoaXM7CiAgICBpZiAoX2NoaWxkcmVuID09IG51bGwpIF9jaGlsZHJlbiA9IDxTdHJpbmcsIENhbm9uaWNhbE5hbWU+e307CiAgICBfY2hpbGRyZW5bY2hpbGQubmFtZV0gPSBjaGlsZDsKICB9CgogIHZvaWQgcmVtb3ZlQ2hpbGQoU3RyaW5nIG5hbWUpIHsKICAgIF9jaGlsZHJlbj8ucmVtb3ZlKG5hbWUpOwogIH0KCiAgdm9pZCBiaW5kVG8oUmVmZXJlbmNlIHRhcmdldCkgewogICAgaWYgKHJlZmVyZW5jZSA9PSB0YXJnZXQpIHJldHVybjsKICAgIGlmIChyZWZlcmVuY2UgIT0gbnVsbCkgewogICAgICB0aHJvdyAnJHRoaXMgaXMgYWxyZWFkeSBib3VuZCc7CiAgICB9CiAgICBpZiAodGFyZ2V0LmNhbm9uaWNhbE5hbWUgIT0gbnVsbCkgewogICAgICB0aHJvdyAnQ2Fubm90IGJpbmQgJHRoaXMgdG8gJHt0YXJnZXQubm9kZX0sIHRhcmdldCBpcyBhbHJlYWR5IGJvdW5kIHRvICcKICAgICAgICAgICcke3RhcmdldC5jYW5vbmljYWxOYW1lfSc7CiAgICB9CiAgICB0YXJnZXQuY2Fub25pY2FsTmFtZSA9IHRoaXM7CiAgICB0aGlzLnJlZmVyZW5jZSA9IHRhcmdldDsKICB9CgogIHZvaWQgdW5iaW5kKCkgewogICAgaWYgKHJlZmVyZW5jZSA9PSBudWxsKSByZXR1cm47CiAgICBhc3NlcnQocmVmZXJlbmNlLmNhbm9uaWNhbE5hbWUgPT0gdGhpcyk7CiAgICByZWZlcmVuY2UuY2Fub25pY2FsTmFtZSA9IG51bGw7CiAgICByZWZlcmVuY2UgPSBudWxsOwogIH0KCiAgdm9pZCB1bmJpbmRBbGwoKSB7CiAgICB1bmJpbmQoKTsKICAgIEl0ZXJhYmxlPENhbm9uaWNhbE5hbWU+IGNoaWxkcmVuXyA9IGNoaWxkcmVuT3JOdWxsOwogICAgaWYgKGNoaWxkcmVuXyAhPSBudWxsKSB7CiAgICAgIGZvciAoQ2Fub25pY2FsTmFtZSBjaGlsZCBpbiBjaGlsZHJlbl8pIHsKICAgICAgICBjaGlsZC51bmJpbmRBbGwoKTsKICAgICAgfQogICAgfQogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX3BhcmVudCA9PSBudWxsID8gJ3Jvb3QnIDogJyRwYXJlbnQ6OiRuYW1lJzsKCiAgUmVmZXJlbmNlIGdldFJlZmVyZW5jZSgpIHsKICAgIHJldHVybiByZWZlcmVuY2UgPz89IChuZXcgUmVmZXJlbmNlKCkuLmNhbm9uaWNhbE5hbWUgPSB0aGlzKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgZ2V0TWVtYmVyUXVhbGlmaWVyKE1lbWJlciBtZW1iZXIpIHsKICAgIGlmIChtZW1iZXIgaXMgUHJvY2VkdXJlKSB7CiAgICAgIGlmIChtZW1iZXIuaXNHZXR0ZXIpIHJldHVybiAnQGdldHRlcnMnOwogICAgICBpZiAobWVtYmVyLmlzU2V0dGVyKSByZXR1cm4gJ0BzZXR0ZXJzJzsKICAgICAgaWYgKG1lbWJlci5pc0ZhY3RvcnkpIHJldHVybiAnQGZhY3Rvcmllcyc7CiAgICAgIHJldHVybiAnQG1ldGhvZHMnOwogICAgfQogICAgaWYgKG1lbWJlciBpcyBGaWVsZCkgewogICAgICByZXR1cm4gJ0BmaWVsZHMnOwogICAgfQogICAgaWYgKG1lbWJlciBpcyBDb25zdHJ1Y3RvcikgewogICAgICByZXR1cm4gJ0Bjb25zdHJ1Y3RvcnMnOwogICAgfQogICAgaWYgKG1lbWJlciBpcyBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcikgewogICAgICByZXR1cm4gJ0BmYWN0b3JpZXMnOwogICAgfQogICAgdGhyb3cgJ1VuZXhwZWN0ZWQgbWVtYmVyOiAkbWVtYmVyJzsKICB9Cn0KgNoATk48HwETAUMESUEETBAEEhsEEDAaBBY5HBsEEDkWGwQSLhgWBDc5FxsEJTkXGwQlORcbBCYuGRsEGScWBEs5FhkBJwEVHQEoATgXATESAS0aHD8EARcYHBMBJi8BKjQBQwEfPQQBKDc6BAErUUlBHQQBNxpGHwQBNDAxBAE3QAQBODoEAUAGT1ERBk9RLAZOFSknQksnBisaQiMEASIdBAEiJR0mBihPJQYhHQQBEiMtJBYEARUOOB0vGwgGBAFEAR1CBAE0Hy4uMRkGGxgGIR4GMxsGKAQCASJwYWNrYWdlOmtlcm5lbC9jYW5vbmljYWxfbmFtZS5kYXJ0MnNka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL3RyYW5zZm9ybWF0aW9ucy9mbGFncy5kYXJ0gvVsaWJyYXJ5IGtlcm5lbC50cmFuc2Zvcm1hdGlvbnMuZmxhZ3M7CgppbXBvcnQgJy4uL2FzdC5kYXJ0JzsKCi8vLyBGbGFncyBzdW1tYXJpemluZyB0aGUga2luZHMgb2YgQVNUIG5vZGVzIGNvbnRhaW5lZCBpbiBhIGdpdmVuIG1lbWJlciBvcgovLy8gY2xhc3MsIGZvciBzcGVlZGluZyB1cCB0cmFuc2Zvcm1hdGlvbnMgdGhhdCBvbmx5IGFmZmVjdCBjZXJ0YWluIHR5cGVzIG9mCi8vLyBub2Rlcy4KLy8vCi8vLyBUaGVzZSBhcmUgc2V0IGJ5IHRoZSBmcm9udGVuZCBhbmQgdGhlIGRlc2VyaWFsaXplci4KY2xhc3MgVHJhbnNmb3JtZXJGbGFnIHsKICAvLy8gVGhlIGNsYXNzIG9yIG1lbWJlciBjb250YWlucyAnc3VwZXInIGNhbGxzLCB0aGF0IGlzLCBvbmUgb2YgdGhlIEFTVCBub2RlcwogIC8vLyBbU3VwZXJQcm9wZXJ0eUdldF0sIFtTdXBlclByb3BlcnR5U2V0XSwgW1N1cGVyTWV0aG9kSW52b2NhdGlvbl0uCiAgc3RhdGljIGNvbnN0IGludCBzdXBlckNhbGxzID0gMSA8PCAwOwoKICAvLy8gVGVtcG9yYXJ5IGZsYWcgdXNlZCBieSB0aGUgdmVyaWZpZXIgdG8gaW5kaWNhdGUgdGhhdCB0aGUgZ2l2ZW4gbWVtYmVyCiAgLy8vIGhhcyBiZWVuIHNlZW4uCiAgc3RhdGljIGNvbnN0IGludCBzZWVuQnlWZXJpZmllciA9IDEgPDwgMTsKCiAgLy8gVE9ETyhhc2dlcmYpOiAgV2UgY291bGQgYWxzbyBhZGQgYSBmbGFnIGZvciAnYXN5bmMnIGFuZCB3aWxsIHByb2JhYmx5IGhhdmUKICAvLyBvbmUgZm9yIGNsb3N1cmVzIGFzIHdlbGwuCn0KFwAmARYBTE0LBDgYUEcoAUwVLAFQHwIBKXBhY2thZ2U6a2VybmVsL3RyYW5zZm9ybWF0aW9ucy9mbGFncy5kYXJ0KXNka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL3R5cGVfYWxnZWJyYS5kYXJ0wABtQS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLnR5cGVfYWxnZWJyYTsKCmltcG9ydCAnYXN0LmRhcnQnOwoKLy8vIFJldHVybnMgYSB0eXBlIHdoZXJlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGUgZ2l2ZW4gdHlwZSBwYXJhbWV0ZXJzIGhhdmUgYmVlbgovLy8gcmVwbGFjZWQgd2l0aCB0aGUgY29ycmVzcG9uZGluZyB0eXBlcy4KLy8vCi8vLyBUaGlzIHdpbGwgY29weSBvbmx5IHRoZSBzdWJ0ZXJtcyBvZiBbdHlwZV0gdGhhdCBjb250YWluIHN1YnN0aXR1dGVkCi8vLyB2YXJpYWJsZXM7IGFsbCBvdGhlciBbRGFydFR5cGVdIG9iamVjdHMgd2lsbCBiZSByZXVzZWQuCi8vLwovLy8gSW4gcGFydGljdWxhciwgaWYgbm8gdmFyaWFibGVzIHdlcmUgc3Vic3RpdHV0ZWQsIHRoaXMgaXMgZ3VhcmFudGVlZCB0bwovLy8gcmV0dXJuIHRoZSBbdHlwZV0gaW5zdGFuY2UgKG5vdCBhIGNvcHkpLCBzbyB0aGUgY2FsbGVyIG1heSB1c2UgW2lkZW50aWNhbF0KLy8vIHRvIGVmZmljaWVudGx5IGNoZWNrIGlmIGEgZGlzdGluY3QgdHlwZSB3YXMgY3JlYXRlZC4KRGFydFR5cGUgc3Vic3RpdHV0ZShEYXJ0VHlwZSB0eXBlLCBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHN1YnN0aXR1dGlvbikgewogIGlmIChzdWJzdGl0dXRpb24uaXNFbXB0eSkgcmV0dXJuIHR5cGU7CiAgcmV0dXJuIFN1YnN0aXR1dGlvbi5mcm9tTWFwKHN1YnN0aXR1dGlvbikuc3Vic3RpdHV0ZVR5cGUodHlwZSk7Cn0KCi8vLyBSZXR1cm5zIGEgbWFwcGluZyBmcm9tIHRoZSB0eXBlIHBhcmFtZXRlcnMgZGVjbGFyZWQgb24gdGhlIGNsYXNzIG9mIFt0eXBlXQovLy8gdG8gdGhlIGFjdHVhbCB0eXBlIGFyZ3VtZW50cyBwcm92aWRlZCBpbiBbdHlwZV0uCi8vLwovLy8gVGhpcyBjYW4gYmUgcGFzc2VkIGFzIGFyZ3VtZW50IHRvIFtzdWJzdGl0dXRlXS4KTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBnZXRTdWJzdGl0dXRpb25NYXAoU3VwZXJ0eXBlIHR5cGUpIHsKICByZXR1cm4gdHlwZS50eXBlQXJndW1lbnRzLmlzRW1wdHkKICAgICAgPyBjb25zdCA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e30KICAgICAgOiBuZXcgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPi5mcm9tSXRlcmFibGVzKAogICAgICAgICAgdHlwZS5jbGFzc05vZGUudHlwZVBhcmFtZXRlcnMsIHR5cGUudHlwZUFyZ3VtZW50cyk7Cn0KCk1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gZ2V0VXBwZXJCb3VuZFN1YnN0aXR1dGlvbk1hcChDbGFzcyBob3N0KSB7CiAgaWYgKGhvc3QudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgcmV0dXJuIGNvbnN0IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICB2YXIgcmVzdWx0ID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogIGZvciAodmFyIHBhcmFtZXRlciBpbiBob3N0LnR5cGVQYXJhbWV0ZXJzKSB7CiAgICByZXN1bHRbcGFyYW1ldGVyXSA9IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgfQogIGZvciAodmFyIHBhcmFtZXRlciBpbiBob3N0LnR5cGVQYXJhbWV0ZXJzKSB7CiAgICByZXN1bHRbcGFyYW1ldGVyXSA9IHN1YnN0aXR1dGUocGFyYW1ldGVyLmJvdW5kLCByZXN1bHQpOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CgovLy8gTGlrZSBbc3Vic3RpdHV0ZV0sIGV4Y2VwdCB3aGVuIGEgdHlwZSBpbiB0aGUgW3N1YnN0aXR1dGlvbl0gbWFwIHJlZmVyZW5jZXMKLy8vIGFub3RoZXIgc3Vic3RpdHV0ZWQgdHlwZSB2YXJpYWJsZSwgdGhlIG1hcHBpbmcgZm9yIHRoYXQgdHlwZSBpcyByZWN1cnNpdmVseQovLy8gaW5zZXJ0ZWQuCi8vLwovLy8gRm9yIGV4YW1wbGUgYFNldDxHPmAgc3Vic3RpdHV0ZWQgd2l0aCBge1QgLT4gU3RyaW5nLCBHIC0+IExpc3Q8VD59YCByZXN1bHRzCi8vLyBpbiBgU2V0PExpc3Q8U3RyaW5nPj5gLgovLy8KLy8vIFJldHVybnMgYG51bGxgIGlmIHRoZSBzdWJzdGl0dXRpb24gbWFwIGNvbnRhaW5zIGEgY3ljbGUgcmVhY2hhYmxlIGZyb20gYQovLy8gdHlwZSB2YXJpYWJsZSBpbiBbdHlwZV0gKHRoZSByZXN1bHRpbmcgdHlwZSB3b3VsZCBiZSBpbmZpbml0ZSkuCi8vLwovLy8gVGhlIFtzdWJzdGl0dXRpb25dIG1hcCB3aWxsIGJlIG11dGF0ZWQgc28gdGhhdCB0aGUgcmlnaHQtaGFuZCBzaWRlcyBtYXkKLy8vIGJlIHJlbWFwcGVkIHRvIHRoZSBkZWVwbHkgc3Vic3RpdHV0ZWQgdHlwZSwgYnV0IG9ubHkgZm9yIHRoZSBrZXlzIHRoYXQgYXJlCi8vLyByZWFjaGFibGUgZnJvbSBbdHlwZV0uCi8vLwovLy8gQXMgd2l0aCBbc3Vic3RpdHV0ZV0sIHRoaXMgaXMgZ3VhcmFudGVlZCB0byByZXR1cm4gdGhlIHNhbWUgaW5zdGFuY2UgaWYgbm8KLy8vIHN1YnN0aXR1dGlvbiB3YXMgcGVyZm9ybWVkLgpEYXJ0VHlwZSBzdWJzdGl0dXRlRGVlcCgKICAgIERhcnRUeXBlIHR5cGUsIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uKSB7CiAgaWYgKHN1YnN0aXR1dGlvbi5pc0VtcHR5KSByZXR1cm4gdHlwZTsKICB2YXIgc3Vic3RpdHV0b3IgPSBuZXcgX0RlZXBUeXBlU3Vic3RpdHV0b3Ioc3Vic3RpdHV0aW9uKTsKICB2YXIgcmVzdWx0ID0gc3Vic3RpdHV0b3IudmlzaXQodHlwZSk7CiAgcmV0dXJuIHN1YnN0aXR1dG9yLmlzSW5maW5pdGUgPyBudWxsIDogcmVzdWx0Owp9CgovLy8gUmV0dXJucyB0cnVlIGlmIFt0eXBlXSBjb250YWlucyBhIHJlZmVyZW5jZSB0byBhbnkgb2YgdGhlIGdpdmVuIFt2YXJpYWJsZXNdLgovLy8KLy8vIEl0IGlzIGFuIGVycm9yIHRvIGNhbGwgdGhpcyB3aXRoIGEgW3R5cGVdIHRoYXQgY29udGFpbnMgYSBbRnVuY3Rpb25UeXBlXQovLy8gdGhhdCBkZWNsYXJlcyBvbmUgb2YgdGhlIHBhcmFtZXRlcnMgaW4gW3ZhcmlhYmxlc10uCmJvb2wgY29udGFpbnNUeXBlVmFyaWFibGUoRGFydFR5cGUgdHlwZSwgU2V0PFR5cGVQYXJhbWV0ZXI+IHZhcmlhYmxlcykgewogIGlmICh2YXJpYWJsZXMuaXNFbXB0eSkgcmV0dXJuIGZhbHNlOwogIHJldHVybiBuZXcgX09jY3VycmVuY2VWaXNpdG9yKHZhcmlhYmxlcykudmlzaXQodHlwZSk7Cn0KCi8vLyBHaXZlbiBhIHNldCBvZiB0eXBlIHZhcmlhYmxlcywgZmluZHMgYSBzdWJzdGl0dXRpb24gb2YgdGhvc2UgdmFyaWFibGVzIHN1Y2gKLy8vIHRoYXQgdGhlIHR3byBnaXZlbiB0eXBlcyBiZWNvbWVzIGVxdWFsLCBvciByZXR1cm5zIGBudWxsYCBpZiBubyBzdWNoCi8vLyBzdWJzdGl0dXRpb24gZXhpc3RzLgovLy8KLy8vIEZvciBleGFtcGxlLCB1bmlmeWluZyBgTGlzdDxUPmAgd2l0aCBgTGlzdDxTdHJpbmc+YCwgd2hlcmUgYFRgIGlzIGEKLy8vIHF1YW50aWZpZWQgdmFyaWFibGUsIHlpZWxkcyB0aGUgc3Vic3RpdHV0aW9uIGBUID0gU3RyaW5nYC4KLy8vCi8vLyBJZiBzdWNjZXNzZnVsLCB0aGlzIGVxdWF0aW9uIGhvbGRzOgovLy8KLy8vICAgICBzdWJzdGl0dXRlKHR5cGUxLCBzdWJzdGl0dXRpb24pID09IHN1YnN0aXR1dGUodHlwZTIsIHN1YnN0aXR1dGlvbikKLy8vCi8vLyBUaGUgdW5pZmljYXRpb24gY2FuIGZhaWwgZm9yIHR3byByZWFzb25zOgovLy8gLSBpbmNvbXBhdGlibGUgdHlwZXMsIGUuZy4gYExpc3Q8VD5gIGNhbm5vdCBiZSB1bmlmaWVkIHdpdGggYFNldDxUPmAuCi8vLyAtIGluZmluaXRlIHR5cGVzOiBlLmcuIGBUYCBjYW5ub3QgYmUgdW5pZmllZCB3aXRoIGBMaXN0PFQ+YCBiZWNhdXNlIGl0Ci8vLyAgIHdvdWxkIGNyZWF0ZSB0aGUgaW5maW5pdGUgdHlwZSBgTGlzdDxMaXN0PExpc3Q8Li4uPj4+YC4KTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiB1bmlmeVR5cGVzKAogICAgRGFydFR5cGUgdHlwZTEsIERhcnRUeXBlIHR5cGUyLCBTZXQ8VHlwZVBhcmFtZXRlcj4gcXVhbnRpZmllZFZhcmlhYmxlcykgewogIHZhciB1bmlmaWVyID0gbmV3IF9UeXBlVW5pZmljYXRpb24odHlwZTEsIHR5cGUyLCBxdWFudGlmaWVkVmFyaWFibGVzKTsKICByZXR1cm4gdW5pZmllci5zdWNjZXNzID8gdW5pZmllci5zdWJzdGl0dXRpb24gOiBudWxsOwp9CgovLy8gR2VuZXJhdGVzIGEgZnJlc2ggY29weSBvZiB0aGUgZ2l2ZW4gdHlwZSBwYXJhbWV0ZXJzLCB3aXRoIHRoZWlyIGJvdW5kcwovLy8gc3Vic3RpdHV0ZWQgdG8gcmVmZXJlbmNlIHRoZSBuZXcgcGFyYW1ldGVycy4KLy8vCi8vLyBUaGUgcmV0dXJuZWQgb2JqZWN0IGNvbnRhaW5zIHRoZSBmcmVzaCB0eXBlIHBhcmFtZXRlciBsaXN0IGFzIHdlbGwgYXMgYQovLy8gbWFwcGluZyB0byBiZSB1c2VkIGZvciByZXBsYWNpbmcgb3RoZXIgdHlwZXMgdG8gdXNlIHRoZSBuZXcgdHlwZSBwYXJhbWV0ZXJzLgpGcmVzaFR5cGVQYXJhbWV0ZXJzIGdldEZyZXNoVHlwZVBhcmFtZXRlcnMoTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycykgewogIHZhciBmcmVzaFBhcmFtZXRlcnMgPSBuZXcgTGlzdDxUeXBlUGFyYW1ldGVyPi5nZW5lcmF0ZSgKICAgICAgdHlwZVBhcmFtZXRlcnMubGVuZ3RoLCAoaSkgPT4gbmV3IFR5cGVQYXJhbWV0ZXIodHlwZVBhcmFtZXRlcnNbaV0ubmFtZSksCiAgICAgIGdyb3dhYmxlOiB0cnVlKTsKICB2YXIgbWFwID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgIG1hcFt0eXBlUGFyYW1ldGVyc1tpXV0gPSBuZXcgVHlwZVBhcmFtZXRlclR5cGUoZnJlc2hQYXJhbWV0ZXJzW2ldKTsKICB9CiAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgZnJlc2hQYXJhbWV0ZXJzW2ldLmJvdW5kID0gc3Vic3RpdHV0ZSh0eXBlUGFyYW1ldGVyc1tpXS5ib3VuZCwgbWFwKTsKICAgIGZyZXNoUGFyYW1ldGVyc1tpXS5kZWZhdWx0VHlwZSA9IHR5cGVQYXJhbWV0ZXJzW2ldLmRlZmF1bHRUeXBlICE9IG51bGwKICAgICAgICA/IHN1YnN0aXR1dGUodHlwZVBhcmFtZXRlcnNbaV0uZGVmYXVsdFR5cGUsIG1hcCkKICAgICAgICA6IG51bGw7CiAgfQogIHJldHVybiBuZXcgRnJlc2hUeXBlUGFyYW1ldGVycyhmcmVzaFBhcmFtZXRlcnMsIFN1YnN0aXR1dGlvbi5mcm9tTWFwKG1hcCkpOwp9CgpjbGFzcyBGcmVzaFR5cGVQYXJhbWV0ZXJzIHsKICBmaW5hbCBMaXN0PFR5cGVQYXJhbWV0ZXI+IGZyZXNoVHlwZVBhcmFtZXRlcnM7CiAgZmluYWwgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbjsKCiAgRnJlc2hUeXBlUGFyYW1ldGVycyh0aGlzLmZyZXNoVHlwZVBhcmFtZXRlcnMsIHRoaXMuc3Vic3RpdHV0aW9uKTsKCiAgRnVuY3Rpb25UeXBlIGFwcGx5VG9GdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIHR5cGUpID0+IG5ldyBGdW5jdGlvblR5cGUoCiAgICAgIHR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnMubWFwKHN1YnN0aXR1dGUpLnRvTGlzdCgpLAogICAgICBzdWJzdGl0dXRlKHR5cGUucmV0dXJuVHlwZSksCiAgICAgIG5hbWVkUGFyYW1ldGVyczogdHlwZS5uYW1lZFBhcmFtZXRlcnMubWFwKHN1YnN0aXR1dGVOYW1lZCkudG9MaXN0KCksCiAgICAgIHR5cGVQYXJhbWV0ZXJzOiBmcmVzaFR5cGVQYXJhbWV0ZXJzLAogICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiB0eXBlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgIHR5cGVkZWZUeXBlOgogICAgICAgICAgdHlwZS50eXBlZGVmVHlwZSA9PSBudWxsID8gbnVsbCA6IHN1YnN0aXR1dGUodHlwZS50eXBlZGVmVHlwZSkpOwoKICBEYXJ0VHlwZSBzdWJzdGl0dXRlKERhcnRUeXBlIHR5cGUpID0+IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZSh0eXBlKTsKCiAgTmFtZWRUeXBlIHN1YnN0aXR1dGVOYW1lZChOYW1lZFR5cGUgdHlwZSkgPT4KICAgICAgbmV3IE5hbWVkVHlwZSh0eXBlLm5hbWUsIHN1YnN0aXR1dGUodHlwZS50eXBlKSk7CgogIFN1cGVydHlwZSBzdWJzdGl0dXRlU3VwZXIoU3VwZXJ0eXBlIHR5cGUpIHsKICAgIHJldHVybiBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVN1cGVydHlwZSh0eXBlKTsKICB9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElNUExFTUVOVEFUSU9OCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKYWJzdHJhY3QgY2xhc3MgU3Vic3RpdHV0aW9uIHsKICBjb25zdCBTdWJzdGl0dXRpb24oKTsKCiAgc3RhdGljIGNvbnN0IFN1YnN0aXR1dGlvbiBlbXB0eSA9IF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlOwoKICAvLy8gU3Vic3RpdHV0ZXMgZWFjaCBwYXJhbWV0ZXIgdG8gdGhlIHR5cGUgaXQgbWFwcyB0byBpbiBbbWFwXS4KICBzdGF0aWMgU3Vic3RpdHV0aW9uIGZyb21NYXAoTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBtYXApIHsKICAgIGlmIChtYXAuaXNFbXB0eSkgcmV0dXJuIF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlOwogICAgcmV0dXJuIG5ldyBfTWFwU3Vic3RpdHV0aW9uKG1hcCwgbWFwKTsKICB9CgogIHN0YXRpYyBTdWJzdGl0dXRpb24gZmlsdGVyZWQoU3Vic3RpdHV0aW9uIHN1YiwgVHlwZVBhcmFtZXRlckZpbHRlciBmaWx0ZXIpIHsKICAgIHJldHVybiBuZXcgX0ZpbHRlcmVkU3Vic3RpdHV0aW9uKHN1YiwgZmlsdGVyKTsKICB9CgogIC8vLyBTdWJzdGl0dXRlcyBhbGwgb2NjdXJyZW5jZXMgb2YgdGhlIGdpdmVuIHR5cGUgcGFyYW1ldGVycyB3aXRoIHRoZQogIC8vLyBjb3JyZXNwb25kaW5nIHVwcGVyIG9yIGxvd2VyIGJvdW5kLCBkZXBlbmRpbmcgb24gdGhlIHZhcmlhbmNlIG9mIHRoZQogIC8vLyBjb250ZXh0IHdoZXJlIGl0IG9jY3Vycy4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUgdGhlIHR5cGUgYChUKSA9PiBUYCB3aXRoIHRoZSBib3VuZHMgYGJvdHRvbSA8OiBUIDw6IG51bWAKICAvLy8gYmVjb21lcyBgKGJvdHRvbSkgPT4gbnVtYCAoaW4gdGhpcyBleGFtcGxlLCBgbnVtYCBpcyB0aGUgdXBwZXIgYm91bmQsCiAgLy8vIGFuZCBgYm90dG9tYCBpcyB0aGUgbG93ZXIgYm91bmQpLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgd2F5IHRvIG9idGFpbiBhbiB1cHBlciBib3VuZCBmb3IgYSB0eXBlIHdoaWxlIGVsaW1pbmF0aW5nIGFsbAogIC8vLyByZWZlcmVuY2VzIHRvIGNlcnRhaW4gdHlwZSB2YXJpYWJsZXMuCiAgc3RhdGljIFN1YnN0aXR1dGlvbiBmcm9tVXBwZXJBbmRMb3dlckJvdW5kcygKICAgICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiB1cHBlciwgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBsb3dlcikgewogICAgaWYgKHVwcGVyLmlzRW1wdHkgJiYgbG93ZXIuaXNFbXB0eSkgcmV0dXJuIF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlOwogICAgcmV0dXJuIG5ldyBfTWFwU3Vic3RpdHV0aW9uKHVwcGVyLCBsb3dlcik7CiAgfQoKICAvLy8gU3Vic3RpdHV0ZXMgdGhlIHR5cGUgcGFyYW1ldGVycyBvbiB0aGUgY2xhc3Mgb2YgW3N1cGVydHlwZV0gd2l0aCB0aGUKICAvLy8gdHlwZSBhcmd1bWVudHMgcHJvdmlkZWQgaW4gW3N1cGVydHlwZV0uCiAgc3RhdGljIFN1YnN0aXR1dGlvbiBmcm9tU3VwZXJ0eXBlKFN1cGVydHlwZSBzdXBlcnR5cGUpIHsKICAgIGlmIChzdXBlcnR5cGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSByZXR1cm4gX051bGxTdWJzdGl0dXRpb24uaW5zdGFuY2U7CiAgICByZXR1cm4gZnJvbU1hcChuZXcgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPi5mcm9tSXRlcmFibGVzKAogICAgICAgIHN1cGVydHlwZS5jbGFzc05vZGUudHlwZVBhcmFtZXRlcnMsIHN1cGVydHlwZS50eXBlQXJndW1lbnRzKSk7CiAgfQoKICAvLy8gU3Vic3RpdHV0ZXMgdGhlIHR5cGUgcGFyYW1ldGVycyBvbiB0aGUgY2xhc3Mgb2YgW3R5cGVdIHdpdGggdGhlCiAgLy8vIHR5cGUgYXJndW1lbnRzIHByb3ZpZGVkIGluIFt0eXBlXS4KICBzdGF0aWMgU3Vic3RpdHV0aW9uIGZyb21JbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSByZXR1cm4gX051bGxTdWJzdGl0dXRpb24uaW5zdGFuY2U7CiAgICByZXR1cm4gZnJvbU1hcChuZXcgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPi5mcm9tSXRlcmFibGVzKAogICAgICAgIHR5cGUuY2xhc3NOb2RlLnR5cGVQYXJhbWV0ZXJzLCB0eXBlLnR5cGVBcmd1bWVudHMpKTsKICB9CgogIC8vLyBTdWJzdGl0dXRlcyB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9uIHRoZSB0eXBlZGVmIG9mIFt0eXBlXSB3aXRoIHRoZQogIC8vLyB0eXBlIGFyZ3VtZW50cyBwcm92aWRlZCBpbiBbdHlwZV0uCiAgc3RhdGljIFN1YnN0aXR1dGlvbiBmcm9tVHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSByZXR1cm4gX051bGxTdWJzdGl0dXRpb24uaW5zdGFuY2U7CiAgICByZXR1cm4gZnJvbU1hcChuZXcgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPi5mcm9tSXRlcmFibGVzKAogICAgICAgIHR5cGUudHlwZWRlZk5vZGUudHlwZVBhcmFtZXRlcnMsIHR5cGUudHlwZUFyZ3VtZW50cykpOwogIH0KCiAgLy8vIFN1YnN0aXR1dGVzIHRoZSBOdGggcGFyYW1ldGVyIGluIFtwYXJhbWV0ZXJzXSB3aXRoIHRoZSBOdGggdHlwZSBpbgogIC8vLyBbdHlwZXNdLgogIHN0YXRpYyBTdWJzdGl0dXRpb24gZnJvbVBhaXJzKAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHBhcmFtZXRlcnMsIExpc3Q8RGFydFR5cGU+IHR5cGVzKSB7CiAgICAvLyBUT0RPKGFzZ2VyZik6IEludmVzdGlnYXRlIGlmIGl0IGlzIG1vcmUgZWZmaWNpZW50IHRvIGltcGxlbWVudAogICAgLy8gc3Vic3RpdHV0aW9uIGJhc2VkIG9uIHBhcmFsbGVsIHBhaXJ3aXNlIGxpc3RzIGluc3RlYWQgb2YgTWFwcy4KICAgIGFzc2VydChwYXJhbWV0ZXJzLmxlbmd0aCA9PSB0eXBlcy5sZW5ndGgpOwogICAgaWYgKHBhcmFtZXRlcnMuaXNFbXB0eSkgcmV0dXJuIF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlOwogICAgcmV0dXJuIGZyb21NYXAoCiAgICAgICAgbmV3IE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4uZnJvbUl0ZXJhYmxlcyhwYXJhbWV0ZXJzLCB0eXBlcykpOwogIH0KCiAgLy8vIFN1YnN0aXR1dGVzIHRoZSB0eXBlIHBhcmFtZXRlcnMgb24gdGhlIGNsYXNzIHdpdGggYm90dG9tIG9yIGR5bmFtaWMsCiAgLy8vIGRlcGVuZGluZyBvbiB0aGUgY292YXJpYW5jZSBvZiBpdHMgdXNlLgogIHN0YXRpYyBTdWJzdGl0dXRpb24gYm90dG9tRm9yQ2xhc3MoQ2xhc3MgY2xhc3NfKSB7CiAgICBpZiAoY2xhc3NfLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHJldHVybiBfTnVsbFN1YnN0aXR1dGlvbi5pbnN0YW5jZTsKICAgIHJldHVybiBuZXcgX0NsYXNzQm90dG9tU3Vic3RpdHV0aW9uKGNsYXNzXyk7CiAgfQoKICAvLy8gU3Vic3RpdHV0ZXMgY292YXJpYW50IHVzZXMgb2YgW2NsYXNzX10ncyB0eXBlIHBhcmFtZXRlcnMgd2l0aCB0aGUgdXBwZXIKICAvLy8gYm91bmQgb2YgdGhhdCB0eXBlIHBhcmFtZXRlci4gIFJlY3Vyc2l2ZSByZWZlcmVuY2VzIGluIHRoZSBib3VuZCBoYXZlCiAgLy8vIGJlZW4gcmVwbGFjZWQgYnkgZHluYW1pYy4KICBzdGF0aWMgU3Vic3RpdHV0aW9uIHVwcGVyQm91bmRGb3JDbGFzcyhDbGFzcyBjbGFzc18pIHsKICAgIGlmIChjbGFzc18udHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgcmV0dXJuIF9OdWxsU3Vic3RpdHV0aW9uLmluc3RhbmNlOwogICAgdmFyIHVwcGVyID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgZm9yICh2YXIgcGFyYW1ldGVyIGluIGNsYXNzXy50eXBlUGFyYW1ldGVycykgewogICAgICB1cHBlcltwYXJhbWV0ZXJdID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIH0KICAgIGZvciAodmFyIHBhcmFtZXRlciBpbiBjbGFzc18udHlwZVBhcmFtZXRlcnMpIHsKICAgICAgdXBwZXJbcGFyYW1ldGVyXSA9IHN1YnN0aXR1dGUocGFyYW1ldGVyLmJvdW5kLCB1cHBlcik7CiAgICB9CiAgICByZXR1cm4gZnJvbVVwcGVyQW5kTG93ZXJCb3VuZHModXBwZXIsIHt9KTsKICB9CgogIC8vLyBTdWJzdGl0dXRlcyBib3RoIHZhcmlhYmxlcyBmcm9tIFtmaXJzdF0gYW5kIFtzZWNvbmRdLCBmYXZvcmluZyB0aG9zZSBmcm9tCiAgLy8vIFtmaXJzdF0gaWYgdGhleSBvdmVybGFwLgogIC8vLwogIC8vLyBOZWl0aGVyIHN1YnN0aXR1dGlvbiBpcyBhcHBsaWVkIHRvIHRoZSByZXN1bHRzIG9mIHRoZSBvdGhlciwgc28gdGhpcyBkb2VzCiAgLy8vICpub3QqIGNvcnJlc3BvbmQgdG8gYSBzZXF1ZW5jZSBvZiB0d28gc3Vic2l0dXRpb25zLiBGb3IgZXhhbXBsZSwgY29tYmluaW5nCiAgLy8vIGB7VCAtPiBMaXN0PEc+fWAgd2l0aCBge0cgLT4gU3RyaW5nfWAgZG9lcyBub3QgY29ycmVzcG9uZCB0bwogIC8vLyBge1QgLT4gTGlzdDxTdHJpbmc+fWAgYmVjYXVzZSB0aGUgcmVzdWx0IGZyb20gc3Vic3RpdHV0aW5nIGBUYCBpcyBub3QKICAvLy8gc2VhcmNoZWQgZm9yIG9jY3VyZW5jZXMgb2YgYEdgLgogIHN0YXRpYyBTdWJzdGl0dXRpb24gY29tYmluZShTdWJzdGl0dXRpb24gZmlyc3QsIFN1YnN0aXR1dGlvbiBzZWNvbmQpIHsKICAgIGlmIChmaXJzdCA9PSBfTnVsbFN1YnN0aXR1dGlvbi5pbnN0YW5jZSkgcmV0dXJuIHNlY29uZDsKICAgIGlmIChzZWNvbmQgPT0gX051bGxTdWJzdGl0dXRpb24uaW5zdGFuY2UpIHJldHVybiBmaXJzdDsKICAgIHJldHVybiBuZXcgX0NvbWJpbmVkU3Vic3RpdHV0aW9uKGZpcnN0LCBzZWNvbmQpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3Vic3RpdHV0ZShUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciwgYm9vbCB1cHBlckJvdW5kKTsKCiAgRGFydFR5cGUgc3Vic3RpdHV0ZVR5cGUoRGFydFR5cGUgbm9kZSwge2Jvb2wgY29udHJhdmFyaWFudDogZmFsc2V9KSB7CiAgICByZXR1cm4gbmV3IF9Ub3BTdWJzdGl0dXRvcih0aGlzLCBjb250cmF2YXJpYW50KS52aXNpdChub2RlKTsKICB9CgogIFN1cGVydHlwZSBzdWJzdGl0dXRlU3VwZXJ0eXBlKFN1cGVydHlwZSBub2RlKSB7CiAgICByZXR1cm4gbmV3IF9Ub3BTdWJzdGl0dXRvcih0aGlzLCBmYWxzZSkudmlzaXRTdXBlcnR5cGUobm9kZSk7CiAgfQp9CgpjbGFzcyBfTnVsbFN1YnN0aXR1dGlvbiBleHRlbmRzIFN1YnN0aXR1dGlvbiB7CiAgc3RhdGljIGNvbnN0IF9OdWxsU3Vic3RpdHV0aW9uIGluc3RhbmNlID0gY29uc3QgX051bGxTdWJzdGl0dXRpb24oKTsKCiAgY29uc3QgX051bGxTdWJzdGl0dXRpb24oKTsKCiAgRGFydFR5cGUgZ2V0U3Vic3RpdHV0ZShUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciwgYm9vbCB1cHBlckJvdW5kKSB7CiAgICByZXR1cm4gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKHBhcmFtZXRlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBzdWJzdGl0dXRlVHlwZShEYXJ0VHlwZSBub2RlLCB7Ym9vbCBjb250cmF2YXJpYW50OiBmYWxzZX0pID0+IG5vZGU7CgogIEBvdmVycmlkZQogIFN1cGVydHlwZSBzdWJzdGl0dXRlU3VwZXJ0eXBlKFN1cGVydHlwZSBub2RlKSA9PiBub2RlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiU3Vic3RpdHV0aW9uLmVtcHR5IjsKfQoKY2xhc3MgX01hcFN1YnN0aXR1dGlvbiBleHRlbmRzIFN1YnN0aXR1dGlvbiB7CiAgZmluYWwgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiB1cHBlcjsKICBmaW5hbCBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IGxvd2VyOwoKICBfTWFwU3Vic3RpdHV0aW9uKHRoaXMudXBwZXIsIHRoaXMubG93ZXIpOwoKICBEYXJ0VHlwZSBnZXRTdWJzdGl0dXRlKFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyLCBib29sIHVwcGVyQm91bmQpIHsKICAgIHJldHVybiB1cHBlckJvdW5kID8gdXBwZXJbcGFyYW1ldGVyXSA6IGxvd2VyW3BhcmFtZXRlcl07CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiX01hcFN1YnN0aXR1dGlvbigkdXBwZXIsICRsb3dlcikiOwp9CgpjbGFzcyBfVG9wU3Vic3RpdHV0b3IgZXh0ZW5kcyBfVHlwZVN1YnN0aXR1dG9yIHsKICBmaW5hbCBTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uOwoKICBfVG9wU3Vic3RpdHV0b3IodGhpcy5zdWJzdGl0dXRpb24sIGJvb2wgY29udHJhdmFyaWFudCkgOiBzdXBlcihudWxsKSB7CiAgICBpZiAoY29udHJhdmFyaWFudCkgewogICAgICBpbnZlcnRWYXJpYW5jZSgpOwogICAgfQogIH0KCiAgRGFydFR5cGUgbG9va3VwKFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyLCBib29sIHVwcGVyQm91bmQpIHsKICAgIHJldHVybiBzdWJzdGl0dXRpb24uZ2V0U3Vic3RpdHV0ZShwYXJhbWV0ZXIsIHVwcGVyQm91bmQpOwogIH0KCiAgVHlwZVBhcmFtZXRlciBmcmVzaFR5cGVQYXJhbWV0ZXIoVHlwZVBhcmFtZXRlciBub2RlKSB7CiAgICB0aHJvdyAnQ3JlYXRlIGEgZnJlc2ggZW52aXJvbm1lbnQgZmlyc3QnOwogIH0KfQoKY2xhc3MgX0NsYXNzQm90dG9tU3Vic3RpdHV0aW9uIGV4dGVuZHMgU3Vic3RpdHV0aW9uIHsKICBmaW5hbCBDbGFzcyBjbGFzc187CgogIF9DbGFzc0JvdHRvbVN1YnN0aXR1dGlvbih0aGlzLmNsYXNzXyk7CgogIERhcnRUeXBlIGdldFN1YnN0aXR1dGUoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIGJvb2wgdXBwZXJCb3VuZCkgewogICAgaWYgKHBhcmFtZXRlci5wYXJlbnQgPT0gY2xhc3NfKSB7CiAgICAgIHJldHVybiB1cHBlckJvdW5kID8gY29uc3QgQm90dG9tVHlwZSgpIDogY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KfQoKY2xhc3MgX0NvbWJpbmVkU3Vic3RpdHV0aW9uIGV4dGVuZHMgU3Vic3RpdHV0aW9uIHsKICBmaW5hbCBTdWJzdGl0dXRpb24gZmlyc3QsIHNlY29uZDsKCiAgX0NvbWJpbmVkU3Vic3RpdHV0aW9uKHRoaXMuZmlyc3QsIHRoaXMuc2Vjb25kKTsKCiAgRGFydFR5cGUgZ2V0U3Vic3RpdHV0ZShUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciwgYm9vbCB1cHBlckJvdW5kKSB7CiAgICByZXR1cm4gZmlyc3QuZ2V0U3Vic3RpdHV0ZShwYXJhbWV0ZXIsIHVwcGVyQm91bmQpID8/CiAgICAgICAgc2Vjb25kLmdldFN1YnN0aXR1dGUocGFyYW1ldGVyLCB1cHBlckJvdW5kKTsKICB9Cn0KCnR5cGVkZWYgYm9vbCBUeXBlUGFyYW1ldGVyRmlsdGVyKFR5cGVQYXJhbWV0ZXIgUCk7CgpjbGFzcyBfRmlsdGVyZWRTdWJzdGl0dXRpb24gZXh0ZW5kcyBTdWJzdGl0dXRpb24gewogIGZpbmFsIFN1YnN0aXR1dGlvbiBiYXNlOwogIGZpbmFsIFR5cGVQYXJhbWV0ZXJGaWx0ZXIgZmlsdGVyRm47CgogIF9GaWx0ZXJlZFN1YnN0aXR1dGlvbih0aGlzLmJhc2UsIHRoaXMuZmlsdGVyRm4pOwoKICBEYXJ0VHlwZSBnZXRTdWJzdGl0dXRlKFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyLCBib29sIHVwcGVyQm91bmQpIHsKICAgIHJldHVybiBmaWx0ZXJGbihwYXJhbWV0ZXIpCiAgICAgICAgPyBiYXNlLmdldFN1YnN0aXR1dGUocGFyYW1ldGVyLCB1cHBlckJvdW5kKQogICAgICAgIDogX051bGxTdWJzdGl0dXRpb24uaW5zdGFuY2UuZ2V0U3Vic3RpdHV0ZShwYXJhbWV0ZXIsIHVwcGVyQm91bmQpOwogIH0KfQoKY2xhc3MgX0lubmVyVHlwZVN1YnN0aXR1dG9yIGV4dGVuZHMgX1R5cGVTdWJzdGl0dXRvciB7CiAgZmluYWwgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBzdWJzdGl0dXRpb24gPSA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CgogIF9Jbm5lclR5cGVTdWJzdGl0dXRvcihfVHlwZVN1YnN0aXR1dG9yIG91dGVyKSA6IHN1cGVyKG91dGVyKTsKCiAgRGFydFR5cGUgbG9va3VwKFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyLCBib29sIHVwcGVyQm91bmQpIHsKICAgIHJldHVybiBzdWJzdGl0dXRpb25bcGFyYW1ldGVyXTsKICB9CgogIFR5cGVQYXJhbWV0ZXIgZnJlc2hUeXBlUGFyYW1ldGVyKFR5cGVQYXJhbWV0ZXIgbm9kZSkgewogICAgdmFyIGZyZXNoID0gbmV3IFR5cGVQYXJhbWV0ZXIobm9kZS5uYW1lKTsKICAgIHN1YnN0aXR1dGlvbltub2RlXSA9IG5ldyBUeXBlUGFyYW1ldGVyVHlwZShmcmVzaCk7CiAgICBmcmVzaC5ib3VuZCA9IHZpc2l0KG5vZGUuYm91bmQpOwogICAgaWYgKG5vZGUuZGVmYXVsdFR5cGUgIT0gbnVsbCkgewogICAgICBmcmVzaC5kZWZhdWx0VHlwZSA9IHZpc2l0KG5vZGUuZGVmYXVsdFR5cGUpOwogICAgfQogICAgcmV0dXJuIGZyZXNoOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX1R5cGVTdWJzdGl0dXRvciBleHRlbmRzIERhcnRUeXBlVmlzaXRvcjxEYXJ0VHlwZT4gewogIGZpbmFsIF9UeXBlU3Vic3RpdHV0b3Igb3V0ZXI7CiAgYm9vbCBjb3ZhcmlhbnRDb250ZXh0ID0gdHJ1ZTsKCiAgX1R5cGVTdWJzdGl0dXRvcih0aGlzLm91dGVyKSB7CiAgICBjb3ZhcmlhbnRDb250ZXh0ID0gb3V0ZXIgPT0gbnVsbCA/IHRydWUgOiBvdXRlci5jb3ZhcmlhbnRDb250ZXh0OwogIH0KCiAgRGFydFR5cGUgbG9va3VwKFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyLCBib29sIHVwcGVyQm91bmQpOwoKICAvLy8gVGhlIG51bWJlciBvZiB0aW1lcyBhIHZhcmlhYmxlIGZyb20gdGhpcyBlbnZpcm9ubWVudCBoYXMgYmVlbiB1c2VkIGluCiAgLy8vIGEgc3Vic3RpdHV0aW9uLgogIC8vLwogIC8vLyBUaGVyZSBpcyBhIHN0cmljdCByZXF1aXJlbWVudCB0aGF0IHdlIG11c3QgcmV0dXJuIHRoZSBzYW1lIGluc3RhbmNlIGZvcgogIC8vLyB0eXBlcyB0aGF0IHdlcmUgbm90IGFsdGVyZWQgYnkgdGhlIHN1YnN0aXR1dGlvbi4gIFRoaXMgY291bnRlciBsZXRzIHVzCiAgLy8vIGNoZWNrIHF1aWNrbHkgaWYgYW55dGhpbmcgaGFwcGVuZWQgaW4gYSBzdWJzdGl0dXRpb24uCiAgaW50IHVzZUNvdW50ZXIgPSAwOwoKICBfSW5uZXJUeXBlU3Vic3RpdHV0b3IgbmV3SW5uZXJFbnZpcm9ubWVudCgpIHsKICAgIHJldHVybiBuZXcgX0lubmVyVHlwZVN1YnN0aXR1dG9yKHRoaXMpOwogIH0KCiAgdm9pZCBpbnZlcnRWYXJpYW5jZSgpIHsKICAgIGNvdmFyaWFudENvbnRleHQgPSAhY292YXJpYW50Q29udGV4dDsKICB9CgogIFN1cGVydHlwZSB2aXNpdFN1cGVydHlwZShTdXBlcnR5cGUgbm9kZSkgewogICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSByZXR1cm4gbm9kZTsKICAgIGludCBiZWZvcmUgPSB1c2VDb3VudGVyOwogICAgdmFyIHR5cGVBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHMubWFwKHZpc2l0KS50b0xpc3QoKTsKICAgIGlmICh1c2VDb3VudGVyID09IGJlZm9yZSkgcmV0dXJuIG5vZGU7CiAgICByZXR1cm4gbmV3IFN1cGVydHlwZShub2RlLmNsYXNzTm9kZSwgdHlwZUFyZ3VtZW50cyk7CiAgfQoKICBOYW1lZFR5cGUgdmlzaXROYW1lZFR5cGUoTmFtZWRUeXBlIG5vZGUpIHsKICAgIGludCBiZWZvcmUgPSB1c2VDb3VudGVyOwogICAgdmFyIHR5cGUgPSB2aXNpdChub2RlLnR5cGUpOwogICAgaWYgKHVzZUNvdW50ZXIgPT0gYmVmb3JlKSByZXR1cm4gbm9kZTsKICAgIHJldHVybiBuZXcgTmFtZWRUeXBlKG5vZGUubmFtZSwgdHlwZSk7CiAgfQoKICBEYXJ0VHlwZSB2aXNpdChEYXJ0VHlwZSBub2RlKSA9PiBub2RlLmFjY2VwdCh0aGlzKTsKCiAgRGFydFR5cGUgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKSA9PiBub2RlOwogIERhcnRUeXBlIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgbm9kZSkgPT4gbm9kZTsKICBEYXJ0VHlwZSB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIG5vZGUpID0+IG5vZGU7CiAgRGFydFR5cGUgdmlzaXRCb3R0b21UeXBlKEJvdHRvbVR5cGUgbm9kZSkgPT4gbm9kZTsKCiAgRGFydFR5cGUgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5pc0VtcHR5KSByZXR1cm4gbm9kZTsKICAgIGludCBiZWZvcmUgPSB1c2VDb3VudGVyOwogICAgdmFyIHR5cGVBcmd1bWVudHMgPSBub2RlLnR5cGVBcmd1bWVudHMubWFwKHZpc2l0KS50b0xpc3QoKTsKICAgIGlmICh1c2VDb3VudGVyID09IGJlZm9yZSkgcmV0dXJuIG5vZGU7CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUobm9kZS5jbGFzc05vZGUsIHR5cGVBcmd1bWVudHMpOwogIH0KCiAgRGFydFR5cGUgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7CiAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmlzRW1wdHkpIHJldHVybiBub2RlOwogICAgaW50IGJlZm9yZSA9IHVzZUNvdW50ZXI7CiAgICB2YXIgdHlwZUFyZ3VtZW50cyA9IG5vZGUudHlwZUFyZ3VtZW50cy5tYXAodmlzaXQpLnRvTGlzdCgpOwogICAgaWYgKHVzZUNvdW50ZXIgPT0gYmVmb3JlKSByZXR1cm4gbm9kZTsKICAgIHJldHVybiBuZXcgVHlwZWRlZlR5cGUobm9kZS50eXBlZGVmTm9kZSwgdHlwZUFyZ3VtZW50cyk7CiAgfQoKICBMaXN0PFR5cGVQYXJhbWV0ZXI+IGZyZXNoVHlwZVBhcmFtZXRlcnMoTGlzdDxUeXBlUGFyYW1ldGVyPiBwYXJhbWV0ZXJzKSB7CiAgICBpZiAocGFyYW1ldGVycy5pc0VtcHR5KSByZXR1cm4gY29uc3QgPFR5cGVQYXJhbWV0ZXI+W107CiAgICByZXR1cm4gcGFyYW1ldGVycy5tYXAoZnJlc2hUeXBlUGFyYW1ldGVyKS50b0xpc3QoKTsKICB9CgogIFR5cGVQYXJhbWV0ZXIgZnJlc2hUeXBlUGFyYW1ldGVyKFR5cGVQYXJhbWV0ZXIgbm9kZSk7CgogIERhcnRUeXBlIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBub2RlKSB7CiAgICAvLyBUaGlzIGlzIGEgYml0IHRyaWNreSBiZWNhdXNlIHdlIGhhdmUgdG8gZ2VuZXJhdGUgZnJlc2ggdHlwZSBwYXJhbWV0ZXJzCiAgICAvLyBpbiBvcmRlciB0byBjaGFuZ2UgdGhlIGJvdW5kcy4gIEF0IHRoZSBzYW1lIHRpbWUsIGlmIHRoZSBmdW5jdGlvbiB0eXBlCiAgICAvLyB3YXMgdW5hbHRlcmVkLCB3ZSBoYXZlIHRvIHJldHVybiB0aGUgW25vZGVdIG9iamVjdCAobm90IGEgY29weSEpLgogICAgLy8gU3Vic3RpdHV0aW5nIGEgdHlwZSBmb3IgYSBmcmVzaCB0eXBlIHZhcmlhYmxlIHNob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aAogICAgLy8gYSAicmVhbCIgc3Vic3RpdHV0aW9uLgogICAgLy8KICAgIC8vIENyZWF0ZSBhbiBpbm5lciBlbnZpcm9ubWVudCB0byBnZW5lcmF0ZSBmcmVzaCB0eXBlIHBhcmFtZXRlcnMuICBUaGUgdXNlCiAgICAvLyBjb3VudGVyIG9uIHRoZSBpbm5lciBlbnZpcm9ubWVudCB0ZWxscyBpZiB0aGUgZnJlc2ggdHlwZSBwYXJhbWV0ZXJzIGhhdmUKICAgIC8vIGFueSB1c2VzLCBidXQgZG9lcyBub3QgdGVsbCBpZiB0aGUgcmVzdWx0aW5nIGZ1bmN0aW9uIHR5cGUgaXMgZGlzdGluY3QuCiAgICAvLyBPdXIgb3duIHVzZSBjb3VudGVyIHdpbGwgZ2V0IGluY3JlbWVudGVkIGlmIHNvbWV0aGluZyBmcm9tIG91cgogICAgLy8gZW52aXJvbm1lbnQgaGFzIGJlZW4gdXNlZCBpbnNpZGUgdGhlIGZ1bmN0aW9uLgogICAgdmFyIGlubmVyID0gbm9kZS50eXBlUGFyYW1ldGVycy5pc0VtcHR5ID8gdGhpcyA6IG5ld0lubmVyRW52aXJvbm1lbnQoKTsKICAgIGludCBiZWZvcmUgPSB0aGlzLnVzZUNvdW50ZXI7CiAgICAvLyBJbnZlcnQgdGhlIHZhcmlhbmNlIHdoZW4gdHJhbnNsYXRpbmcgcGFyYW1ldGVycy4KICAgIGlubmVyLmludmVydFZhcmlhbmNlKCk7CiAgICB2YXIgdHlwZVBhcmFtZXRlcnMgPSBpbm5lci5mcmVzaFR5cGVQYXJhbWV0ZXJzKG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgdmFyIHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5pc0VtcHR5CiAgICAgICAgPyBjb25zdCA8RGFydFR5cGU+W10KICAgICAgICA6IG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMubWFwKGlubmVyLnZpc2l0KS50b0xpc3QoKTsKICAgIHZhciBuYW1lZFBhcmFtZXRlcnMgPSBub2RlLm5hbWVkUGFyYW1ldGVycy5pc0VtcHR5CiAgICAgICAgPyBjb25zdCA8TmFtZWRUeXBlPltdCiAgICAgICAgOiBub2RlLm5hbWVkUGFyYW1ldGVycy5tYXAoaW5uZXIudmlzaXROYW1lZFR5cGUpLnRvTGlzdCgpOwogICAgaW5uZXIuaW52ZXJ0VmFyaWFuY2UoKTsKICAgIHZhciByZXR1cm5UeXBlID0gaW5uZXIudmlzaXQobm9kZS5yZXR1cm5UeXBlKTsKICAgIERhcnRUeXBlIHR5cGVkZWZUeXBlID0KICAgICAgICBub2RlLnR5cGVkZWZUeXBlID09IG51bGwgPyBudWxsIDogaW5uZXIudmlzaXQobm9kZS50eXBlZGVmVHlwZSk7CiAgICBpZiAodGhpcy51c2VDb3VudGVyID09IGJlZm9yZSkgcmV0dXJuIG5vZGU7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZShwb3NpdGlvbmFsUGFyYW1ldGVycywgcmV0dXJuVHlwZSwKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IG5hbWVkUGFyYW1ldGVycywKICAgICAgICB0eXBlUGFyYW1ldGVyczogdHlwZVBhcmFtZXRlcnMsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgIHR5cGVkZWZUeXBlOiB0eXBlZGVmVHlwZSk7CiAgfQoKICB2b2lkIGJ1bXBDb3VudGVyc1VudGlsKF9UeXBlU3Vic3RpdHV0b3IgdGFyZ2V0KSB7CiAgICB2YXIgbm9kZSA9IHRoaXM7CiAgICB3aGlsZSAobm9kZSAhPSB0YXJnZXQpIHsKICAgICAgKytub2RlLnVzZUNvdW50ZXI7CiAgICAgIG5vZGUgPSBub2RlLm91dGVyOwogICAgfQogICAgKyt0YXJnZXQudXNlQ291bnRlcjsKICB9CgogIERhcnRUeXBlIGdldFN1YnN0aXR1dGUoVHlwZVBhcmFtZXRlciB2YXJpYWJsZSkgewogICAgdmFyIGVudmlyb25tZW50ID0gdGhpczsKICAgIHdoaWxlIChlbnZpcm9ubWVudCAhPSBudWxsKSB7CiAgICAgIHZhciByZXBsYWNlbWVudCA9IGVudmlyb25tZW50Lmxvb2t1cCh2YXJpYWJsZSwgY292YXJpYW50Q29udGV4dCk7CiAgICAgIGlmIChyZXBsYWNlbWVudCAhPSBudWxsKSB7CiAgICAgICAgYnVtcENvdW50ZXJzVW50aWwoZW52aXJvbm1lbnQpOwogICAgICAgIHJldHVybiByZXBsYWNlbWVudDsKICAgICAgfQogICAgICBlbnZpcm9ubWVudCA9IGVudmlyb25tZW50Lm91dGVyOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBEYXJ0VHlwZSB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIHJldHVybiBnZXRTdWJzdGl0dXRlKG5vZGUucGFyYW1ldGVyKSA/PyBub2RlOwogIH0KfQoKY2xhc3MgX0RlZXBUeXBlU3Vic3RpdHV0b3IgZXh0ZW5kcyBfSW5uZXJUeXBlU3Vic3RpdHV0b3IgewogIGludCBkZXB0aCA9IDA7CiAgYm9vbCBpc0luZmluaXRlID0gZmFsc2U7CgogIF9EZWVwVHlwZVN1YnN0aXR1dG9yKE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uLAogICAgICBbX0RlZXBUeXBlU3Vic3RpdHV0b3Igb3V0ZXJdKQogICAgICA6IHN1cGVyKG91dGVyKSB7CiAgICB0aGlzLnN1YnN0aXR1dGlvbi5hZGRBbGwoc3Vic3RpdHV0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIF9EZWVwVHlwZVN1YnN0aXR1dG9yIG5ld0lubmVyRW52aXJvbm1lbnQoKSB7CiAgICByZXR1cm4gbmV3IF9EZWVwVHlwZVN1YnN0aXR1dG9yKDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fSwgdGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIERhcnRUeXBlIHJlcGxhY2VtZW50ID0gZ2V0U3Vic3RpdHV0ZShub2RlLnBhcmFtZXRlcik7CiAgICBpZiAocmVwbGFjZW1lbnQgPT0gbnVsbCkgcmV0dXJuIG5vZGU7CiAgICBpZiAoaXNJbmZpbml0ZSkgcmV0dXJuIHJlcGxhY2VtZW50OwogICAgKytkZXB0aDsKICAgIGlmIChkZXB0aCA+IHN1YnN0aXR1dGlvbi5sZW5ndGgpIHsKICAgICAgaXNJbmZpbml0ZSA9IHRydWU7CiAgICAgIC0tZGVwdGg7CiAgICAgIHJldHVybiByZXBsYWNlbWVudDsKICAgIH0gZWxzZSB7CiAgICAgIHJlcGxhY2VtZW50ID0gdmlzaXQocmVwbGFjZW1lbnQpOwogICAgICAvLyBVcGRhdGUgdHlwZSB0byB0aGUgZnVsbHkgZmxlc2hlZC1vdXQgdHlwZS4KICAgICAgc3Vic3RpdHV0aW9uW25vZGUucGFyYW1ldGVyXSA9IHJlcGxhY2VtZW50OwogICAgICAtLWRlcHRoOwogICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CiAgICB9CiAgfQp9CgpjbGFzcyBfVHlwZVVuaWZpY2F0aW9uIHsKICAvLyBBY3ljbGljIGludmFyaWFudDogVGhlcmUgYXJlIG5vIGN5Y2xlcyBpbiB0aGUgbWFwLCB0aGF0IGlzLCBhbGwgdHlwZXMgY2FuCiAgLy8gICBiZSByZXNvbHZlZCB0byBmaW5pdGUgdHlwZXMgYnkgc3Vic3RpdHV0aW5nIGFsbCBjb250YWluZWQgdHlwZSB2YXJpYWJsZXMuCiAgLy8KICAvLyBUaGUgYWN5Y2xpYyBpbnZhcmlhbnQgaG9sZHMgZXZlcnl3aGVyZSBleGNlcHQgZHVyaW5nIGN5Y2xlIGRldGVjdGlvbi4KICAvLwogIC8vIEl0IGlzIG5vdCBjaGVja2VkIHRoYXQgdGhlIHN1YnN0aXR1dGlvbiBzYXRpc2ZpZXMgdGhlIGJvdW5kIG9uIHRoZSB0eXBlCiAgLy8gcGFyYW1ldGVyLgogIGZpbmFsIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwoKICAvLy8gVmFyaWFibGVzIHRoYXQgbWF5IGJlIGFzc2lnbmVkIGZyZWVseSBpbiBvcmRlciB0byBvYnRhaW4gdW5pZmljYXRpb24uCiAgLy8vCiAgLy8vIFRoZXNlIGFyZSBzb21ldGltZXMgcmVmZXJyZWQgdG8gYXMgZXhpc3RlbnRpYWxseSBxdWFudGlmaWVkIHZhcmlhYmxlcy4KICBmaW5hbCBTZXQ8VHlwZVBhcmFtZXRlcj4gcXVhbnRpZmllZFZhcmlhYmxlczsKCiAgLy8vIFZhcmlhYmxlcyB0aGF0IGFyZSBib3VuZCBieSBhIGZ1bmN0aW9uIHR5cGUgaW5zaWRlIG9uZSBvZiB0aGUgdHlwZXMuCiAgLy8vIFRoZXNlIG1heSBub3Qgb2NjdXIgaW4gYSBzdWJzdGl0dXRpb24sIGJlY2F1c2UgdGhlc2UgdmFyaWFibGVzIGFyZSBub3QgaW4KICAvLy8gc2NvcGUgYXQgdGhlIGV4aXN0ZW50aWFsbHkgcXVhbnRpZmllZCB2YXJpYWJsZXMuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBzdXBwb3NlIHdlIGFyZSB0cnlpbmcgdG8gc2F0aXNmeSB0aGUgZXF1YXRpb246CiAgLy8vCiAgLy8vICAgICDiiINTLiA8RT4oRSwgUykgPT4gRSAgPSAgPEU+KEUsIEUpID0+IEUKICAvLy8KICAvLy8gVGhhdCBpcywgd2UgbXVzdCBjaG9vc2UgYFNgIHN1Y2ggdGhhdCB0aGUgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlCiAgLy8vIGA8RT4oRSwgUykgPT4gRWAgYmVjb21lcyBgPEU+KEUsIEUpID0+IEVgLiAgQ2hvb3NpbmcgYFMgPSBFYCBpcyBub3QgYQogIC8vLyB2YWxpZCBzb2x1dGlvbiwgYmVjYXVzZSBgRWAgaXMgbm90IGluIHNjb3BlIHdoZXJlIGBTYCBpcyBxdWFudGlmaWVkLgogIC8vLyBUaGUgdHdvIGZ1bmN0aW9uIHR5cGVzIGNhbm5vdCBiZSB1bmlmaWVkLgogIGZpbmFsIFNldDxUeXBlUGFyYW1ldGVyPiBfdW5pdmVyc2FsbHlRdWFudGlmaWVkVmFyaWFibGVzID0KICAgICAgbmV3IFNldDxUeXBlUGFyYW1ldGVyPigpOwoKICBib29sIHN1Y2Nlc3MgPSB0cnVlOwoKICBfVHlwZVVuaWZpY2F0aW9uKERhcnRUeXBlIHR5cGUxLCBEYXJ0VHlwZSB0eXBlMiwgdGhpcy5xdWFudGlmaWVkVmFyaWFibGVzKSB7CiAgICBfdW5pZnkodHlwZTEsIHR5cGUyKTsKICAgIGlmIChzdWNjZXNzICYmIHN1YnN0aXR1dGlvbi5sZW5ndGggPj0gMikgewogICAgICBmb3IgKHZhciBrZXkgaW4gc3Vic3RpdHV0aW9uLmtleXMpIHsKICAgICAgICBzdWJzdGl0dXRpb25ba2V5XSA9IHN1YnN0aXR1dGVEZWVwKHN1YnN0aXR1dGlvbltrZXldLCBzdWJzdGl0dXRpb24pOwogICAgICB9CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBfc3Vic3RpdHV0ZUhlYWQoVHlwZVBhcmFtZXRlclR5cGUgdHlwZSkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gc3Vic3RpdHV0aW9uLmxlbmd0aDsgKytpKSB7CiAgICAgIERhcnRUeXBlIG5leHRUeXBlID0gc3Vic3RpdHV0aW9uW3R5cGUucGFyYW1ldGVyXTsKICAgICAgaWYgKG5leHRUeXBlID09IG51bGwpIHJldHVybiB0eXBlOwogICAgICBpZiAobmV4dFR5cGUgaXMgVHlwZVBhcmFtZXRlclR5cGUpIHsKICAgICAgICB0eXBlID0gbmV4dFR5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5leHRUeXBlOwogICAgICB9CiAgICB9CiAgICAvLyBUaGUgY3ljbGUgc2hvdWxkIGhhdmUgYmVlbiBmb3VuZCBieSBfdHJ5U3Vic3RpdHV0aW9uIHdoZW4gdGhlIGN5Y2xlCiAgICAvLyB3YXMgY3JlYXRlZC4KICAgIHRocm93ICdVbmV4cGVjdGVkIGN5Y2xlIGZvdW5kIGR1cmluZyB1bmlmaWNhdGlvbic7CiAgfQoKICBib29sIF91bmlmeShEYXJ0VHlwZSB0eXBlMSwgRGFydFR5cGUgdHlwZTIpIHsKICAgIGlmICghc3VjY2VzcykgcmV0dXJuIGZhbHNlOwogICAgdHlwZTEgPSB0eXBlMSBpcyBUeXBlUGFyYW1ldGVyVHlwZSA/IF9zdWJzdGl0dXRlSGVhZCh0eXBlMSkgOiB0eXBlMTsKICAgIHR5cGUyID0gdHlwZTIgaXMgVHlwZVBhcmFtZXRlclR5cGUgPyBfc3Vic3RpdHV0ZUhlYWQodHlwZTIpIDogdHlwZTI7CiAgICBpZiAodHlwZTEgaXMgRHluYW1pY1R5cGUgJiYgdHlwZTIgaXMgRHluYW1pY1R5cGUpIHJldHVybiB0cnVlOwogICAgaWYgKHR5cGUxIGlzIFZvaWRUeXBlICYmIHR5cGUyIGlzIFZvaWRUeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmICh0eXBlMSBpcyBJbnZhbGlkVHlwZSAmJiB0eXBlMiBpcyBJbnZhbGlkVHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAodHlwZTEgaXMgQm90dG9tVHlwZSAmJiB0eXBlMiBpcyBCb3R0b21UeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmICh0eXBlMSBpcyBJbnRlcmZhY2VUeXBlICYmIHR5cGUyIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgaWYgKHR5cGUxLmNsYXNzTm9kZSAhPSB0eXBlMi5jbGFzc05vZGUpIHJldHVybiBfZmFpbCgpOwogICAgICBhc3NlcnQodHlwZTEudHlwZUFyZ3VtZW50cy5sZW5ndGggPT0gdHlwZTIudHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUxLnR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICBpZiAoIV91bmlmeSh0eXBlMS50eXBlQXJndW1lbnRzW2ldLCB0eXBlMi50eXBlQXJndW1lbnRzW2ldKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmICh0eXBlMSBpcyBGdW5jdGlvblR5cGUgJiYgdHlwZTIgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgIGlmICh0eXBlMS50eXBlUGFyYW1ldGVycy5sZW5ndGggIT0gdHlwZTIudHlwZVBhcmFtZXRlcnMubGVuZ3RoIHx8CiAgICAgICAgICB0eXBlMS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggIT0KICAgICAgICAgICAgICB0eXBlMi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggfHwKICAgICAgICAgIHR5cGUxLm5hbWVkUGFyYW1ldGVycy5sZW5ndGggIT0gdHlwZTIubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCB8fAogICAgICAgICAgdHlwZTEucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCAhPSB0eXBlMi5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgICAgcmV0dXJuIF9mYWlsKCk7CiAgICAgIH0KICAgICAgLy8gV2hlbiB1bmlmeWluZyB0d28gZ2VuZXJpYyBmdW5jdGlvbnMsIHRyYW5zZm9ybSB0aGUgZXF1YXRpb24gbGlrZSB0aGlzOgogICAgICAvLwogICAgICAvLyAgICDiiINTLiA8RT4oZm4xKSA9IDxUPihmbjIpCiAgICAgIC8vICAgICAgPT0+CiAgICAgIC8vICAgIOKIg1MuIOKIgEcuIGZuMVtHL0VdID0gZm4yW0cvVF0KICAgICAgLy8KICAgICAgLy8gVGhhdCBpcywgYXNzdW1lIHNvbWUgZml4ZWQgaWRlbnRpY2FsIGNob2ljZSBvZiB0eXBlIHBhcmFtZXRlcnMgZm9yIGJvdGgKICAgICAgLy8gZnVuY3Rpb25zIGFuZCB0cnkgdG8gdW5pZnkgdGhlIGluc3RhbnRpYXRlZCBmdW5jdGlvbiB0eXBlcy4KICAgICAgYXNzZXJ0KCF0eXBlMS50eXBlUGFyYW1ldGVycy5hbnkocXVhbnRpZmllZFZhcmlhYmxlcy5jb250YWlucykpOwogICAgICBhc3NlcnQoIXR5cGUyLnR5cGVQYXJhbWV0ZXJzLmFueShxdWFudGlmaWVkVmFyaWFibGVzLmNvbnRhaW5zKSk7CiAgICAgIHZhciBsZWZ0SW5zdGFuY2UgPSA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICAgIHZhciByaWdodEluc3RhbmNlID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUxLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIGluc3RhbnRpYXRvciA9IG5ldyBUeXBlUGFyYW1ldGVyKHR5cGUxLnR5cGVQYXJhbWV0ZXJzW2ldLm5hbWUpOwogICAgICAgIHZhciBpbnN0YW50aWF0b3JUeXBlID0gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKGluc3RhbnRpYXRvcik7CiAgICAgICAgbGVmdEluc3RhbmNlW3R5cGUxLnR5cGVQYXJhbWV0ZXJzW2ldXSA9IGluc3RhbnRpYXRvclR5cGU7CiAgICAgICAgcmlnaHRJbnN0YW5jZVt0eXBlMi50eXBlUGFyYW1ldGVyc1tpXV0gPSBpbnN0YW50aWF0b3JUeXBlOwogICAgICAgIF91bml2ZXJzYWxseVF1YW50aWZpZWRWYXJpYWJsZXMuYWRkKGluc3RhbnRpYXRvcik7CiAgICAgIH0KICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlMS50eXBlUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICAgIHZhciBsZWZ0ID0gc3Vic3RpdHV0ZSh0eXBlMS50eXBlUGFyYW1ldGVyc1tpXS5ib3VuZCwgbGVmdEluc3RhbmNlKTsKICAgICAgICB2YXIgcmlnaHQgPSBzdWJzdGl0dXRlKHR5cGUyLnR5cGVQYXJhbWV0ZXJzW2ldLmJvdW5kLCByaWdodEluc3RhbmNlKTsKICAgICAgICBpZiAoIV91bmlmeShsZWZ0LCByaWdodCkpIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUxLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgdmFyIGxlZnQgPSBzdWJzdGl0dXRlKHR5cGUxLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldLCBsZWZ0SW5zdGFuY2UpOwogICAgICAgIHZhciByaWdodCA9IHN1YnN0aXR1dGUodHlwZTIucG9zaXRpb25hbFBhcmFtZXRlcnNbaV0sIHJpZ2h0SW5zdGFuY2UpOwogICAgICAgIGlmICghX3VuaWZ5KGxlZnQsIHJpZ2h0KSkgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZTEubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgaWYgKHR5cGUxLm5hbWVkUGFyYW1ldGVyc1tpXS5uYW1lICE9IHR5cGUyLm5hbWVkUGFyYW1ldGVyc1tpXS5uYW1lKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHZhciBsZWZ0ID0gc3Vic3RpdHV0ZSh0eXBlMS5uYW1lZFBhcmFtZXRlcnNbaV0udHlwZSwgbGVmdEluc3RhbmNlKTsKICAgICAgICB2YXIgcmlnaHQgPSBzdWJzdGl0dXRlKHR5cGUyLm5hbWVkUGFyYW1ldGVyc1tpXS50eXBlLCByaWdodEluc3RhbmNlKTsKICAgICAgICBpZiAoIV91bmlmeShsZWZ0LCByaWdodCkpIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB2YXIgbGVmdFJldHVybiA9IHN1YnN0aXR1dGUodHlwZTEucmV0dXJuVHlwZSwgbGVmdEluc3RhbmNlKTsKICAgICAgdmFyIHJpZ2h0UmV0dXJuID0gc3Vic3RpdHV0ZSh0eXBlMi5yZXR1cm5UeXBlLCByaWdodEluc3RhbmNlKTsKICAgICAgaWYgKCFfdW5pZnkobGVmdFJldHVybiwgcmlnaHRSZXR1cm4pKSByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHR5cGUxIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgdHlwZTIgaXMgVHlwZVBhcmFtZXRlclR5cGUgJiYKICAgICAgICB0eXBlMS5wYXJhbWV0ZXIgPT0gdHlwZTIucGFyYW1ldGVyKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHR5cGUxIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgcXVhbnRpZmllZFZhcmlhYmxlcy5jb250YWlucyh0eXBlMS5wYXJhbWV0ZXIpKSB7CiAgICAgIHJldHVybiBfdHJ5U3Vic3RpdHV0aW9uKHR5cGUxLnBhcmFtZXRlciwgdHlwZTIpOwogICAgfQogICAgaWYgKHR5cGUyIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgcXVhbnRpZmllZFZhcmlhYmxlcy5jb250YWlucyh0eXBlMi5wYXJhbWV0ZXIpKSB7CiAgICAgIHJldHVybiBfdHJ5U3Vic3RpdHV0aW9uKHR5cGUyLnBhcmFtZXRlciwgdHlwZTEpOwogICAgfQogICAgcmV0dXJuIF9mYWlsKCk7CiAgfQoKICBib29sIF90cnlTdWJzdGl0dXRpb24oVHlwZVBhcmFtZXRlciB2YXJpYWJsZSwgRGFydFR5cGUgdHlwZSkgewogICAgaWYgKGNvbnRhaW5zVHlwZVZhcmlhYmxlKHR5cGUsIF91bml2ZXJzYWxseVF1YW50aWZpZWRWYXJpYWJsZXMpKSB7CiAgICAgIHJldHVybiBfZmFpbCgpOwogICAgfQogICAgLy8gU2V0IHRoZSBwbGFpbiBzdWJzdGl0dXRpb24gZmlyc3QgYW5kIHRoZW4gZ2VuZXJhdGUgdGhlIGRlZXAKICAgIC8vIHN1YnN0aXR1dGlvbiB0byBkZXRlY3QgY3ljbGVzLgogICAgc3Vic3RpdHV0aW9uW3ZhcmlhYmxlXSA9IHR5cGU7CiAgICBEYXJ0VHlwZSBkZWVwU3Vic3RpdHV0ZSA9IHN1YnN0aXR1dGVEZWVwKHR5cGUsIHN1YnN0aXR1dGlvbik7CiAgICBpZiAoZGVlcFN1YnN0aXR1dGUgPT0gbnVsbCkgcmV0dXJuIF9mYWlsKCk7CiAgICBzdWJzdGl0dXRpb25bdmFyaWFibGVdID0gZGVlcFN1YnN0aXR1dGU7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGJvb2wgX2ZhaWwoKSB7CiAgICByZXR1cm4gc3VjY2VzcyA9IGZhbHNlOwogIH0KfQoKY2xhc3MgX09jY3VycmVuY2VWaXNpdG9yIGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPGJvb2w+IHsKICBmaW5hbCBTZXQ8VHlwZVBhcmFtZXRlcj4gdmFyaWFibGVzOwoKICBfT2NjdXJyZW5jZVZpc2l0b3IodGhpcy52YXJpYWJsZXMpOwoKICBib29sIHZpc2l0KERhcnRUeXBlIG5vZGUpID0+IG5vZGUuYWNjZXB0KHRoaXMpOwoKICBib29sIHZpc2l0TmFtZWRUeXBlKE5hbWVkVHlwZSBub2RlKSB7CiAgICByZXR1cm4gdmlzaXQobm9kZS50eXBlKTsKICB9CgogIGJvb2wgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKSA9PiBmYWxzZTsKICBib29sIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgbm9kZSkgPT4gZmFsc2U7CiAgYm9vbCB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIG5vZGUpID0+IGZhbHNlOwoKICBib29sIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIG5vZGUpIHsKICAgIHJldHVybiBub2RlLnR5cGVBcmd1bWVudHMuYW55KHZpc2l0KTsKICB9CgogIGJvb2wgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7CiAgICByZXR1cm4gbm9kZS50eXBlQXJndW1lbnRzLmFueSh2aXNpdCk7CiAgfQoKICBib29sIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSBub2RlKSB7CiAgICByZXR1cm4gbm9kZS50eXBlUGFyYW1ldGVycy5hbnkoaGFuZGxlVHlwZVBhcmFtZXRlcikgfHwKICAgICAgICBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmFueSh2aXNpdCkgfHwKICAgICAgICBub2RlLm5hbWVkUGFyYW1ldGVycy5hbnkodmlzaXROYW1lZFR5cGUpIHx8CiAgICAgICAgdmlzaXQobm9kZS5yZXR1cm5UeXBlKTsKICB9CgogIGJvb2wgdmlzaXRUeXBlUGFyYW1ldGVyVHlwZShUeXBlUGFyYW1ldGVyVHlwZSBub2RlKSB7CiAgICByZXR1cm4gdmFyaWFibGVzID09IG51bGwgfHwgdmFyaWFibGVzLmNvbnRhaW5zKG5vZGUucGFyYW1ldGVyKTsKICB9CgogIGJvb2wgaGFuZGxlVHlwZVBhcmFtZXRlcihUeXBlUGFyYW1ldGVyIG5vZGUpIHsKICAgIGFzc2VydCghdmFyaWFibGVzLmNvbnRhaW5zKG5vZGUpKTsKICAgIGlmIChub2RlLmJvdW5kLmFjY2VwdCh0aGlzKSkgcmV0dXJuIHRydWU7CiAgICBpZiAobm9kZS5kZWZhdWx0VHlwZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gbm9kZS5kZWZhdWx0VHlwZS5hY2NlcHQodGhpcyk7CiAgfQp9CoLmAE5OPB0BEwFQKwRIPARLTzlQKUICAU81BDRCJCo4PgIBSE0sLy0ELz0EEQIBT1AOBFAcBE1EBExPGwRPIBlAKTwoMQIBUQRNOEknOAIBUEkZBEg/BCgESwQuSks+KU5JOAIBSzEETFFROk8XKTRIBDRJSzkQBE4CARwxIwFEAUs6I0srOxNLAUsBLzcBLjMEAgFML0wBHhgBQAFCQjgrBAFPMwQBSEsfBktMKAZOLC9QSy8EAUsuO0xDRwQBRik+R0M9BAFIKTpHQz8EAUkPIT5GRi8/FEwEAUsuNUoxBAFOTCA5Si0zLgYzPQYvBAFQHwZQUUNMJkk8PDUEAUQBSEEEATJCBAIBL0cBHQFFLQQBDE8BDDkBDC0CAS4sLAEsAUU9BAEMOwIBMSMBSRkYBgQBPj4EATkuBAIBNhYBKQFFJkQGEQQCATMkATIBRTk1BAIBMwEzGyYBMwFFHzRLBAIBN1EBQAE+JAQBOS43JSQzBhIEAgFEICABIUYEAT0BTBYGTk08FgEwLAQBGioEAS0xHUArOQQBLR0hKysEATYBNzcxNQE0MR1AKz0EATAxHUArPQQBTDw4BAE4ATJOTklRHgdPUE9GNkwiOBxJQR0/Nx5DHDMbSTA+Kig9IwQBNBUdGRkGGQQBMxwiSCEoHAgnBhEEATwyBAIBOxEbAUIkFywEAQwvSAQBDDw6KigNJxkPGg0oNDIPGgYEAgEZT1EFSwVNEFEBTAZNMAFLUDcGQgYwBkZMSzA9IAEXAU8aLytNCAYEATU1OCkrGQ8ZCAZLFDcEATAgSUlDPUNBPD5IPUcYCggTBjpILzNKShgIUAkkEigJUUVHRzY3PkxEQkM7CD5MTjAIRExOMAg/ThgKTE4wCENFOhMGJiYuEwYmOTcGJjk3BhQEAUFHFgZDJiNCMC0RBAERHAQCATkmASYBMgEoHQQBNDQuATAqBAEsKgQBLjswNCAEAThEBAExJy4wKgQCASBwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydC1zZGtyb290Oi9wa2cva2VybmVsL2xpYi90eXBlX2Vudmlyb25tZW50LmRhcnSw0S8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLnR5cGVfZW52aXJvbm1lbnQ7CgppbXBvcnQgJ2FzdC5kYXJ0JzsKaW1wb3J0ICdjbGFzc19oaWVyYXJjaHkuZGFydCc7CmltcG9ydCAnY29yZV90eXBlcy5kYXJ0JzsKaW1wb3J0ICd0eXBlX2FsZ2VicmEuZGFydCc7CgppbXBvcnQgJ3NyYy9oaWVyYXJjaHlfYmFzZWRfdHlwZV9lbnZpcm9ubWVudC5kYXJ0JwogICAgc2hvdyBIaWVyYXJjaHlCYXNlZFR5cGVFbnZpcm9ubWVudDsKCnR5cGVkZWYgdm9pZCBFcnJvckhhbmRsZXIoVHJlZU5vZGUgbm9kZSwgU3RyaW5nIG1lc3NhZ2UpOwoKYWJzdHJhY3QgY2xhc3MgVHlwZUVudmlyb25tZW50IGV4dGVuZHMgU3VidHlwZVRlc3RlciB7CiAgZmluYWwgQ29yZVR5cGVzIGNvcmVUeXBlczsKCiAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZTsKCiAgRGFydFR5cGUgcmV0dXJuVHlwZTsKICBEYXJ0VHlwZSB5aWVsZFR5cGU7CiAgQXN5bmNNYXJrZXIgY3VycmVudEFzeW5jTWFya2VyID0gQXN5bmNNYXJrZXIuU3luYzsKCiAgLy8vIEFuIGVycm9yIGhhbmRsZXIgZm9yIHVzZSBpbiBkZWJ1Z2dpbmcsIG9yIGBudWxsYCBpZiB0eXBlIGVycm9ycyBzaG91bGQgbm90CiAgLy8vIGJlIHRvbGVyYXRlZC4gIFNlZSBbdHlwZUVycm9yXS4KICBFcnJvckhhbmRsZXIgZXJyb3JIYW5kbGVyOwoKICBUeXBlRW52aXJvbm1lbnQuZnJvbVN1YmNsYXNzKHRoaXMuY29yZVR5cGVzKTsKCiAgZmFjdG9yeSBUeXBlRW52aXJvbm1lbnQoQ29yZVR5cGVzIGNvcmVUeXBlcywgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5KSB7CiAgICByZXR1cm4gbmV3IEhpZXJhcmNoeUJhc2VkVHlwZUVudmlyb25tZW50KGNvcmVUeXBlcywgaGllcmFyY2h5KTsKICB9CgogIEludGVyZmFjZVR5cGUgZ2V0IG9iamVjdFR5cGUgPT4gY29yZVR5cGVzLm9iamVjdENsYXNzLnJhd1R5cGU7CiAgSW50ZXJmYWNlVHlwZSBnZXQgbnVsbFR5cGUgPT4gY29yZVR5cGVzLm51bGxDbGFzcy5yYXdUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IGJvb2xUeXBlID0+IGNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCBpbnRUeXBlID0+IGNvcmVUeXBlcy5pbnRDbGFzcy5yYXdUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IG51bVR5cGUgPT4gY29yZVR5cGVzLm51bUNsYXNzLnJhd1R5cGU7CiAgSW50ZXJmYWNlVHlwZSBnZXQgZG91YmxlVHlwZSA9PiBjb3JlVHlwZXMuZG91YmxlQ2xhc3MucmF3VHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCBzdHJpbmdUeXBlID0+IGNvcmVUeXBlcy5zdHJpbmdDbGFzcy5yYXdUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IHN5bWJvbFR5cGUgPT4gY29yZVR5cGVzLnN5bWJvbENsYXNzLnJhd1R5cGU7CiAgSW50ZXJmYWNlVHlwZSBnZXQgdHlwZVR5cGUgPT4gY29yZVR5cGVzLnR5cGVDbGFzcy5yYXdUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IHJhd0Z1bmN0aW9uVHlwZSA9PiBjb3JlVHlwZXMuZnVuY3Rpb25DbGFzcy5yYXdUeXBlOwoKICBDbGFzcyBnZXQgaW50Q2xhc3MgPT4gY29yZVR5cGVzLmludENsYXNzOwogIENsYXNzIGdldCBudW1DbGFzcyA9PiBjb3JlVHlwZXMubnVtQ2xhc3M7CiAgQ2xhc3MgZ2V0IGZ1dHVyZU9yQ2xhc3MgPT4gY29yZVR5cGVzLmZ1dHVyZU9yQ2xhc3M7CgogIEludGVyZmFjZVR5cGUgbGl0ZXJhbExpc3RUeXBlKERhcnRUeXBlIGVsZW1lbnRUeXBlKSB7CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoY29yZVR5cGVzLmxpc3RDbGFzcywgPERhcnRUeXBlPltlbGVtZW50VHlwZV0pOwogIH0KCiAgSW50ZXJmYWNlVHlwZSBsaXRlcmFsU2V0VHlwZShEYXJ0VHlwZSBlbGVtZW50VHlwZSkgewogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGNvcmVUeXBlcy5zZXRDbGFzcywgPERhcnRUeXBlPltlbGVtZW50VHlwZV0pOwogIH0KCiAgSW50ZXJmYWNlVHlwZSBsaXRlcmFsTWFwVHlwZShEYXJ0VHlwZSBrZXksIERhcnRUeXBlIHZhbHVlKSB7CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoY29yZVR5cGVzLm1hcENsYXNzLCA8RGFydFR5cGU+W2tleSwgdmFsdWVdKTsKICB9CgogIEludGVyZmFjZVR5cGUgaXRlcmFibGVUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShjb3JlVHlwZXMuaXRlcmFibGVDbGFzcywgPERhcnRUeXBlPlt0eXBlXSk7CiAgfQoKICBJbnRlcmZhY2VUeXBlIHN0cmVhbVR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGNvcmVUeXBlcy5zdHJlYW1DbGFzcywgPERhcnRUeXBlPlt0eXBlXSk7CiAgfQoKICBJbnRlcmZhY2VUeXBlIGZ1dHVyZVR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGNvcmVUeXBlcy5mdXR1cmVDbGFzcywgPERhcnRUeXBlPlt0eXBlXSk7CiAgfQoKICAvLy8gUmVtb3ZlcyBhIGxldmVsIG9mIGBGdXR1cmU8PmAgdHlwZXMgd3JhcHBpbmcgYSB0eXBlLgogIC8vLwogIC8vLyBUaGlzIGltcGxlbWVudHMgdGhlIGZ1bmN0aW9uIGBmbGF0dGVuYCBmcm9tIHRoZSBzcGVjLCB3aGljaCB1bndyYXBzIGEKICAvLy8gbGF5ZXIgb2YgRnV0dXJlIG9yIEZ1dHVyZU9yIGZyb20gYSB0eXBlLgogIERhcnRUeXBlIHVuZnV0dXJlVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIGlmICh0eXBlLmNsYXNzTm9kZSA9PSBjb3JlVHlwZXMuZnV0dXJlT3JDbGFzcyB8fAogICAgICAgICAgdHlwZS5jbGFzc05vZGUgPT0gY29yZVR5cGVzLmZ1dHVyZUNsYXNzKSB7CiAgICAgICAgcmV0dXJuIHR5cGUudHlwZUFyZ3VtZW50c1swXTsKICAgICAgfQogICAgICAvLyBJdCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvciB0byBpbXBsZW1lbnQsIGV4dGVuZCwgb3IgbWl4aW4gRnV0dXJlT3Igc28KICAgICAgLy8gd2UgYXJlbid0IGNvbmNlcm5lZCB3aXRoIGl0LiAgSWYgYSBjbGFzcyBpbXBsZW1lbnRzIG11bHRpcGxlCiAgICAgIC8vIGluc3RhbnRpYXRpb25zIG9mIEZ1dHVyZSwgZ2V0VHlwZUFzSW5zdGFuY2VPZiBpcyByZXNwb25zaWJsZSBmb3IKICAgICAgLy8gcGlja2luZyB0aGUgbGVhc3Qgb25lIGluIHRoZSBzZW5zZSByZXF1aXJlZCBieSB0aGUgc3BlYy4KICAgICAgSW50ZXJmYWNlVHlwZSBmdXR1cmUgPSBnZXRUeXBlQXNJbnN0YW5jZU9mKHR5cGUsIGNvcmVUeXBlcy5mdXR1cmVDbGFzcyk7CiAgICAgIGlmIChmdXR1cmUgIT0gbnVsbCkgewogICAgICAgIHJldHVybiBmdXR1cmUudHlwZUFyZ3VtZW50c1swXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHR5cGU7CiAgfQoKICAvLy8gQ2FsbGVkIGlmIHRoZSBjb21wdXRhdGlvbiBvZiBhIHN0YXRpYyB0eXBlIGZhaWxlZCBkdWUgdG8gYSB0eXBlIGVycm9yLgogIC8vLwogIC8vLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gaW4gcHJvZHVjdGlvbi4gIFRoZSBmcm9udGVuZCBzaG91bGQgcmVwb3J0IHR5cGUKICAvLy8gZXJyb3JzLCBhbmQgZWl0aGVyIHJlY292ZXIgZnJvbSB0aGUgZXJyb3IgZHVyaW5nIHRyYW5zbGF0aW9uIG9yIGFib3J0CiAgLy8vIGNvbXBpbGF0aW9uIGlmIHVuYWJsZSB0byByZWNvdmVyLgogIC8vLwogIC8vLyBCeSBkZWZhdWx0LCB0aGlzIHRocm93cyBhbiBleGNlcHRpb24sIHNpbmNlIHByb2dyYW1zIGluIGtlcm5lbCBhcmUgYXNzdW1lZAogIC8vLyB0byBiZSBjb3JyZWN0bHkgdHlwZWQuCiAgLy8vCiAgLy8vIEFuIFtlcnJvckhhbmRsZXJdIG1heSBiZSBwcm92aWRlZCBpbiBvcmRlciB0byBvdmVycmlkZSB0aGUgZGVmYXVsdAogIC8vLyBiZWhhdmlvciBhbmQgdG9sZXJhdGUgdGhlIHByZXNlbmNlIG9mIHR5cGUgZXJyb3JzLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvcgogIC8vLyBkZWJ1Z2dpbmcgSVIgcHJvZHVjZXJzIHdoaWNoIGFyZSByZXF1aXJlZCB0byBwcm9kdWNlIGEgc3Ryb25nbHkgdHlwZWQgSVIuCiAgdm9pZCB0eXBlRXJyb3IoVHJlZU5vZGUgbm9kZSwgU3RyaW5nIG1lc3NhZ2UpIHsKICAgIGlmIChlcnJvckhhbmRsZXIgIT0gbnVsbCkgewogICAgICBlcnJvckhhbmRsZXIobm9kZSwgbWVzc2FnZSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyAnJG1lc3NhZ2UgaW4gJG5vZGUnOwogICAgfQogIH0KCiAgLy8vIFRydWUgaWYgW21lbWJlcl0gaXMgYSBiaW5hcnkgb3BlcmF0b3IgdGhhdCByZXR1cm5zIGFuIGBpbnRgIGlmIGJvdGgKICAvLy8gb3BlcmFuZHMgYXJlIGBpbnRgLCBhbmQgb3RoZXJ3aXNlIHJldHVybnMgYGRvdWJsZWAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjYXNlIG9mIHR5cGUtYmFzZWQgb3ZlcmxvYWRpbmcsIHdoaWNoIGluIERhcnQgaXMgb25seSBzdXBwb3J0ZWQKICAvLy8gYnkgZ2l2aW5nIHNwZWNpYWwgdHJlYXRtZW50IHRvIGNlcnRhaW4gYXJpdGhtZXRpYyBvcGVyYXRvcnMuCiAgYm9vbCBpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3IoUHJvY2VkdXJlIG1lbWJlcikgewogICAgQ2xhc3MgY2xhc3NfID0gbWVtYmVyLmVuY2xvc2luZ0NsYXNzOwogICAgaWYgKGNsYXNzXyA9PSBjb3JlVHlwZXMuaW50Q2xhc3MgfHwgY2xhc3NfID09IGNvcmVUeXBlcy5udW1DbGFzcykgewogICAgICBTdHJpbmcgbmFtZSA9IG1lbWJlci5uYW1lLm5hbWU7CiAgICAgIHJldHVybiBuYW1lID09ICcrJyB8fAogICAgICAgICAgbmFtZSA9PSAnLScgfHwKICAgICAgICAgIG5hbWUgPT0gJyonIHx8CiAgICAgICAgICBuYW1lID09ICdyZW1haW5kZXInIHx8CiAgICAgICAgICBuYW1lID09ICclJzsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBzdGF0aWMgcmV0dXJuIHR5cGUgb2YgYW4gb3ZlcmxvYWRlZCBhcml0aG1ldGljIG9wZXJhdG9yCiAgLy8vIChzZWUgW2lzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvcl0pIGdpdmVuIHRoZSBzdGF0aWMgdHlwZSBvZiB0aGUKICAvLy8gb3BlcmFuZHMuCiAgLy8vCiAgLy8vIElmIGJvdGggdHlwZXMgYXJlIGBpbnRgLCB0aGUgcmV0dXJuZWQgdHlwZSBpcyBgaW50YC4KICAvLy8gSWYgZWl0aGVyIHR5cGUgaXMgYGRvdWJsZWAsIHRoZSByZXR1cm5lZCB0eXBlIGlzIGBkb3VibGVgLgogIC8vLyBJZiBib3RoIHR5cGVzIHJlZmVyIHRvIHRoZSBzYW1lIHR5cGUgdmFyaWFibGUgKHR5cGljYWxseSB3aXRoIGBudW1gIGFzCiAgLy8vIHRoZSB1cHBlciBib3VuZCksIHRoZW4gdGhhdCB0eXBlIHZhcmlhYmxlIGlzIHJldHVybmVkLgogIC8vLyBPdGhlcndpc2UgYG51bWAgaXMgcmV0dXJuZWQuCiAgRGFydFR5cGUgZ2V0VHlwZU9mT3ZlcmxvYWRlZEFyaXRobWV0aWMoRGFydFR5cGUgdHlwZTEsIERhcnRUeXBlIHR5cGUyKSB7CiAgICBpZiAodHlwZTEgPT0gdHlwZTIpIHJldHVybiB0eXBlMTsKICAgIGlmICh0eXBlMSA9PSBkb3VibGVUeXBlIHx8IHR5cGUyID09IGRvdWJsZVR5cGUpIHJldHVybiBkb3VibGVUeXBlOwogICAgcmV0dXJuIG51bVR5cGU7CiAgfQp9CgovLy8gVGhlIHBhcnQgb2YgW1R5cGVFbnZpcm9ubWVudF0gdGhhdCBkZWFscyB3aXRoIHN1YnR5cGUgdGVzdHMuCi8vLwovLy8gVGhpcyBsaXZlcyBpbiBhIHNlcGFyYXRlIGNsYXNzIHNvIGl0IGNhbiBiZSB0ZXN0ZWQgaW5kZXBlbmRlbnRseSBvZiB0aGUgU0RLLgphYnN0cmFjdCBjbGFzcyBTdWJ0eXBlVGVzdGVyIHsKICBJbnRlcmZhY2VUeXBlIGdldCBvYmplY3RUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IG51bGxUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IHJhd0Z1bmN0aW9uVHlwZTsKICBDbGFzcyBnZXQgZnV0dXJlT3JDbGFzczsKICBJbnRlcmZhY2VUeXBlIGZ1dHVyZVR5cGUoRGFydFR5cGUgdHlwZSk7CgogIHN0YXRpYyBMaXN0PE9iamVjdD4gdHlwZUNoZWNrczsKCiAgSW50ZXJmYWNlVHlwZSBnZXRUeXBlQXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3Mgc3VwZXJjbGFzcyk7CgogIC8vLyBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0eXBlIGlzIGF0IHRoZSB0b3Agb2YgdGhlIHR5cGUgaGllcmFyY2h5LiAgTWF5IGJlCiAgLy8vIG92ZXJyaWRkZW4gaW4gc3ViY2xhc3Nlcy4KICBib29sIGlzVG9wKERhcnRUeXBlIHR5cGUpID0+CiAgICAgIHR5cGUgaXMgRHluYW1pY1R5cGUgfHwgdHlwZSBpcyBWb2lkVHlwZSB8fCB0eXBlID09IG9iamVjdFR5cGU7CgogIC8vLyBDYW4gYmUgdXNlIHRvIGNvbGxlY3QgdHlwZSBjaGVja3MuIFRvIHVzZToKICAvLy8gMS4gUmVuYW1lIGBpc1N1YnR5cGVPZmAgdG8gYF9pc1N1YnR5cGVPZmAuCiAgLy8vIDIuIFJlbmFtZSBgX2NvbGxlY3RfaXNTdWJ0eXBlT2ZgIHRvIGBpc1N1YnR5cGVPZmAuCiAgLy8vIDMuIENvbW1lbnQgb3V0IHRoZSBjYWxsIHRvIGBfaXNTdWJ0eXBlT2ZgIGJlbG93LgogIC8vIGlnbm9yZTp1bnVzZWRfZWxlbWVudAogIGJvb2wgX2NvbGxlY3RfaXNTdWJ0eXBlT2YoRGFydFR5cGUgc3VidHlwZSwgRGFydFR5cGUgc3VwZXJ0eXBlKSB7CiAgICBib29sIHJlc3VsdCA9IHRydWU7CiAgICAvLyByZXN1bHQgPSBfaXNTdWJ0eXBlT2Yoc3VidHlwZSwgc3VwZXJ0eXBlKTsKICAgIHR5cGVDaGVja3MgPz89IDxPYmplY3Q+W107CiAgICB0eXBlQ2hlY2tzLmFkZChbc3VidHlwZSwgc3VwZXJ0eXBlLCByZXN1bHRdKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUmV0dXJucyB0cnVlIGlmIFtzdWJ0eXBlXSBpcyBhIHN1YnR5cGUgb2YgW3N1cGVydHlwZV0uCiAgYm9vbCBpc1N1YnR5cGVPZihEYXJ0VHlwZSBzdWJ0eXBlLCBEYXJ0VHlwZSBzdXBlcnR5cGUpIHsKICAgIHN1YnR5cGUgPSBzdWJ0eXBlLnVuYWxpYXM7CiAgICBzdXBlcnR5cGUgPSBzdXBlcnR5cGUudW5hbGlhczsKICAgIGlmIChpZGVudGljYWwoc3VidHlwZSwgc3VwZXJ0eXBlKSkgcmV0dXJuIHRydWU7CiAgICBpZiAoc3VidHlwZSBpcyBCb3R0b21UeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChzdWJ0eXBlID09IG51bGxUeXBlKSB7CiAgICAgIC8vIFNlZSBydWxlIDQgb2YgdGhlIHN1YnR5cGUgcnVsZXMgZnJvbSB0aGUgRGFydCBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLgogICAgICByZXR1cm4gc3VwZXJ0eXBlIGlzISBCb3R0b21UeXBlOwogICAgfQogICAgaWYgKGlzVG9wKHN1cGVydHlwZSkpIHJldHVybiB0cnVlOwoKICAgIC8vIEhhbmRsZSBGdXR1cmVPcjxUPiB1bmlvbiB0eXBlLgogICAgaWYgKHN1YnR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIGlkZW50aWNhbChzdWJ0eXBlLmNsYXNzTm9kZSwgZnV0dXJlT3JDbGFzcykpIHsKICAgICAgdmFyIHN1YnR5cGVBcmcgPSBzdWJ0eXBlLnR5cGVBcmd1bWVudHNbMF07CiAgICAgIGlmIChzdXBlcnR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgICAgaWRlbnRpY2FsKHN1cGVydHlwZS5jbGFzc05vZGUsIGZ1dHVyZU9yQ2xhc3MpKSB7CiAgICAgICAgdmFyIHN1cGVydHlwZUFyZyA9IHN1cGVydHlwZS50eXBlQXJndW1lbnRzWzBdOwogICAgICAgIC8vIEZ1dHVyZU9yPEE+IDw6IEZ1dHVyZU9yPEI+IGlmZiBBIDw6IEIKICAgICAgICByZXR1cm4gaXNTdWJ0eXBlT2Yoc3VidHlwZUFyZywgc3VwZXJ0eXBlQXJnKTsKICAgICAgfQoKICAgICAgLy8gZ2l2ZW4gdDEgaXMgRnV0dXJlPEE+IHwgQSwgdGhlbjoKICAgICAgLy8gKEZ1dHVyZTxBPiB8IEEpIDw6IHQyIGlmZiBGdXR1cmU8QT4gPDogdDIgYW5kIEEgPDogdDIuCiAgICAgIHZhciBzdWJ0eXBlRnV0dXJlID0gZnV0dXJlVHlwZShzdWJ0eXBlQXJnKTsKICAgICAgcmV0dXJuIGlzU3VidHlwZU9mKHN1YnR5cGVGdXR1cmUsIHN1cGVydHlwZSkgJiYKICAgICAgICAgIGlzU3VidHlwZU9mKHN1YnR5cGVBcmcsIHN1cGVydHlwZSk7CiAgICB9CgogICAgaWYgKHN1cGVydHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmCiAgICAgICAgaWRlbnRpY2FsKHN1cGVydHlwZS5jbGFzc05vZGUsIGZ1dHVyZU9yQ2xhc3MpKSB7CiAgICAgIC8vIGdpdmVuIHQyIGlzIEZ1dHVyZTxBPiB8IEEsIHRoZW46CiAgICAgIC8vIHQxIDw6IChGdXR1cmU8QT4gfCBBKSBpZmYgdDEgPDogRnV0dXJlPEE+IG9yIHQxIDw6IEEKICAgICAgdmFyIHN1cGVydHlwZUFyZyA9IHN1cGVydHlwZS50eXBlQXJndW1lbnRzWzBdOwogICAgICB2YXIgc3VwZXJ0eXBlRnV0dXJlID0gZnV0dXJlVHlwZShzdXBlcnR5cGVBcmcpOwogICAgICByZXR1cm4gaXNTdWJ0eXBlT2Yoc3VidHlwZSwgc3VwZXJ0eXBlRnV0dXJlKSB8fAogICAgICAgICAgaXNTdWJ0eXBlT2Yoc3VidHlwZSwgc3VwZXJ0eXBlQXJnKTsKICAgIH0KCiAgICBpZiAoc3VidHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmIHN1cGVydHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIHZhciB1cGNhc3RUeXBlID0gZ2V0VHlwZUFzSW5zdGFuY2VPZihzdWJ0eXBlLCBzdXBlcnR5cGUuY2xhc3NOb2RlKTsKICAgICAgaWYgKHVwY2FzdFR5cGUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHVwY2FzdFR5cGUudHlwZUFyZ3VtZW50cy5sZW5ndGg7ICsraSkgewogICAgICAgIC8vIFRlcm1pbmF0aW9uOiB0aGUgJ3N1cGVydHlwZScgcGFyYW1ldGVyIGRlY3JlYXNlcyBpbiBzaXplLgogICAgICAgIGlmICghaXNTdWJ0eXBlT2YoCiAgICAgICAgICAgIHVwY2FzdFR5cGUudHlwZUFyZ3VtZW50c1tpXSwgc3VwZXJ0eXBlLnR5cGVBcmd1bWVudHNbaV0pKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHN1YnR5cGUgaXMgVHlwZVBhcmFtZXRlclR5cGUpIHsKICAgICAgaWYgKHN1cGVydHlwZSBpcyBUeXBlUGFyYW1ldGVyVHlwZSAmJgogICAgICAgICAgc3VidHlwZS5wYXJhbWV0ZXIgPT0gc3VwZXJ0eXBlLnBhcmFtZXRlcikgewogICAgICAgIGlmIChzdXBlcnR5cGUucHJvbW90ZWRCb3VuZCAhPSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gaXNTdWJ0eXBlT2Yoc3VidHlwZS5ib3VuZCwgc3VwZXJ0eXBlLmJvdW5kKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gUHJvbW90ZWQgYm91bmQgc2hvdWxkIGFsd2F5cyBiZSBhIHN1YnR5cGUgb2YgdGhlIGRlY2xhcmVkIGJvdW5kLgogICAgICAgICAgYXNzZXJ0KHN1YnR5cGUucHJvbW90ZWRCb3VuZCA9PSBudWxsIHx8CiAgICAgICAgICAgICAgaXNTdWJ0eXBlT2Yoc3VidHlwZS5ib3VuZCwgc3VwZXJ0eXBlLmJvdW5kKSk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gVGVybWluYXRpb246IGlmIHRoZXJlIGFyZSBubyBjeWNsaWNhbGx5IGJvdW5kIHR5cGUgcGFyYW1ldGVycywgdGhpcwogICAgICAvLyByZWN1cnNpdmUgY2FsbCBjYW4gb25seSBvY2N1ciBhIGZpbml0ZSBudW1iZXIgb2YgdGltZXMsIGJlZm9yZSByZWFjaGluZwogICAgICAvLyBhIHNocmlua2luZyByZWN1cnNpdmUgY2FsbCAob3IgdGVybWluYXRpbmcpLgogICAgICByZXR1cm4gaXNTdWJ0eXBlT2Yoc3VidHlwZS5ib3VuZCwgc3VwZXJ0eXBlKTsKICAgIH0KICAgIGlmIChzdWJ0eXBlIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICBpZiAoc3VwZXJ0eXBlID09IHJhd0Z1bmN0aW9uVHlwZSkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChzdXBlcnR5cGUgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgcmV0dXJuIF9pc0Z1bmN0aW9uU3VidHlwZU9mKHN1YnR5cGUsIHN1cGVydHlwZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgX2lzRnVuY3Rpb25TdWJ0eXBlT2YoRnVuY3Rpb25UeXBlIHN1YnR5cGUsIEZ1bmN0aW9uVHlwZSBzdXBlcnR5cGUpIHsKICAgIGlmIChzdWJ0eXBlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPiBzdXBlcnR5cGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoc3VidHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggPAogICAgICAgIHN1cGVydHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKHN1YnR5cGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoICE9IHN1cGVydHlwZS50eXBlUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKHN1YnR5cGUudHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICB2YXIgc3Vic3RpdHV0aW9uID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1YnR5cGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgICB2YXIgc3ViUGFyYW1ldGVyID0gc3VidHlwZS50eXBlUGFyYW1ldGVyc1tpXTsKICAgICAgICB2YXIgc3VwZXJQYXJhbWV0ZXIgPSBzdXBlcnR5cGUudHlwZVBhcmFtZXRlcnNbaV07CiAgICAgICAgc3Vic3RpdHV0aW9uW3N1YlBhcmFtZXRlcl0gPSBuZXcgVHlwZVBhcmFtZXRlclR5cGUoc3VwZXJQYXJhbWV0ZXIpOwogICAgICB9CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3VidHlwZS50eXBlUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICAgIHZhciBzdWJQYXJhbWV0ZXIgPSBzdWJ0eXBlLnR5cGVQYXJhbWV0ZXJzW2ldOwogICAgICAgIHZhciBzdXBlclBhcmFtZXRlciA9IHN1cGVydHlwZS50eXBlUGFyYW1ldGVyc1tpXTsKICAgICAgICB2YXIgc3ViQm91bmQgPSBzdWJzdGl0dXRlKHN1YlBhcmFtZXRlci5ib3VuZCwgc3Vic3RpdHV0aW9uKTsKICAgICAgICAvLyBUZXJtaW5hdGlvbjogaWYgdGhlcmUgYXJlIG5vIGN5Y2xpY2FsbHkgYm91bmQgdHlwZSBwYXJhbWV0ZXJzLCB0aGlzCiAgICAgICAgLy8gcmVjdXJzaXZlIGNhbGwgY2FuIG9ubHkgb2NjdXIgYSBmaW5pdGUgbnVtYmVyIG9mIHRpbWVzIGJlZm9yZQogICAgICAgIC8vIHJlYWNoaW5nIGEgc2hyaW5raW5nIHJlY3Vyc2l2ZSBjYWxsIChvciB0ZXJtaW5hdGluZykuCiAgICAgICAgLy8gVE9ETyhkbWl0cnlhcyk6IFJlcGxhY2UgaXQgd2l0aCBvbmUgcmVjdXJzaXZlIGRlc2NlbnQgaW5zdGVhZCBvZiB0d28uCiAgICAgICAgaWYgKCFpc1N1YnR5cGVPZihzdXBlclBhcmFtZXRlci5ib3VuZCwgc3ViQm91bmQpIHx8CiAgICAgICAgICAgICFpc1N1YnR5cGVPZihzdWJCb3VuZCwgc3VwZXJQYXJhbWV0ZXIuYm91bmQpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN1YnR5cGUgPSBzdWJzdGl0dXRlKHN1YnR5cGUud2l0aG91dFR5cGVQYXJhbWV0ZXJzLCBzdWJzdGl0dXRpb24pOwogICAgfQogICAgaWYgKCFpc1N1YnR5cGVPZihzdWJ0eXBlLnJldHVyblR5cGUsIHN1cGVydHlwZS5yZXR1cm5UeXBlKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1cGVydHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICB2YXIgc3VwZXJ0eXBlUGFyYW1ldGVyID0gc3VwZXJ0eXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICB2YXIgc3VidHlwZVBhcmFtZXRlciA9IHN1YnR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICAgIC8vIFRlcm1pbmF0aW9uOiBCb3RoIHR5cGVzIHNocmluayBpbiBzaXplLgogICAgICBpZiAoIWlzU3VidHlwZU9mKHN1cGVydHlwZVBhcmFtZXRlciwgc3VidHlwZVBhcmFtZXRlcikpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGludCBzdWJ0eXBlTmFtZUluZGV4ID0gMDsKICAgIGZvciAoTmFtZWRUeXBlIHN1cGVydHlwZVBhcmFtZXRlciBpbiBzdXBlcnR5cGUubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIHdoaWxlIChzdWJ0eXBlTmFtZUluZGV4IDwgc3VidHlwZS5uYW1lZFBhcmFtZXRlcnMubGVuZ3RoICYmCiAgICAgICAgICBzdWJ0eXBlLm5hbWVkUGFyYW1ldGVyc1tzdWJ0eXBlTmFtZUluZGV4XS5uYW1lICE9CiAgICAgICAgICAgICAgc3VwZXJ0eXBlUGFyYW1ldGVyLm5hbWUpIHsKICAgICAgICArK3N1YnR5cGVOYW1lSW5kZXg7CiAgICAgIH0KICAgICAgaWYgKHN1YnR5cGVOYW1lSW5kZXggPT0gc3VidHlwZS5uYW1lZFBhcmFtZXRlcnMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICAgIE5hbWVkVHlwZSBzdWJ0eXBlUGFyYW1ldGVyID0gc3VidHlwZS5uYW1lZFBhcmFtZXRlcnNbc3VidHlwZU5hbWVJbmRleF07CiAgICAgIC8vIFRlcm1pbmF0aW9uOiBCb3RoIHR5cGVzIHNocmluayBpbiBzaXplLgogICAgICBpZiAoIWlzU3VidHlwZU9mKHN1cGVydHlwZVBhcmFtZXRlci50eXBlLCBzdWJ0eXBlUGFyYW1ldGVyLnR5cGUpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KgUIATk48IQETHxocATMoAToBNx0BGgEXFjUBUSYdATABS0QEAUE9PTs7QUFBPUgBLCw2AThMBAE3SwQBP0oEAS5JBAEsRwQBLEcEATsGTC8pITc1JghPRkpCTxwoCAYRBAFNBk9MKAZRHQZJUVAyICMNIQYEAUo6BlBDOipIJhwZGSEXBhIEAUpKEAY7QU09I0smRxQEAgFBBFEfIB4lGysBIgFLAVAgH0UBMTE5NxtEGDIfMhMEAT07HyM0LB9PJwYnASYkNzEoOzcxNggBKkAyNi4GASY5Kj41NjYuBgFCSixCRRpIGAoIEwYoLDYvPhFOMjwXCghNUTY0BiM1JzkIBhIEAUxNFAYuMRQGTBQGLTZANjpMCEA2OkVPSUFRPDwYCghJBkIUBkZCPjFAFggGHkZCPCkcCExOMUoWCAYRBAIBJHBhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCZzZGtyb290Oi9wa2cva2VybmVsL2xpYi9jb3FfYW5ub3QuZGFydIO3Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLy8KLy8gUGxlYXNlIHNlZSB0aGUgY29tbWVudHMgaW4gYHBrZy9rZXJuZWwvbGliL3RyYW5zZm9ybWF0aW9ucy9jb3EuZGFydGAgZm9yIG1vcmUKLy8gaW5mby4KCmxpYnJhcnkga2VybmVsLmNvcV9hbm5vdDsKCmNvbnN0IGNvcSA9IDE7IC8vIGZpZWxkIG9yIGNsYXNzCmNvbnN0IGNvcXJlZiA9IDI7IC8vIGNsYXNzIG9ubHkKY29uc3Qgbm9jb3EgPSAzOyAvLyBmaWVsZCBvbmx5CmNvbnN0IGNvcW9wdCA9IDQ7IC8vIGZpZWxkIG9ubHkKY29uc3QgY29xc2luZ2xlID0gNTsgLy8gdHJlYXQgTGlzdDxBPiBhcyBqdXN0IEEKY29uc3QgY29xZGVmID0gNjsKY29uc3QgY29xc2luZ2xlZGVmID0gNzsKCi8vIGxpYnJhcnkgb25seQpjbGFzcyBDb3FMaWIgewogIGZpbmFsIFN0cmluZyBkZXN0UGF0aFJlbGF0aXZlOwogIGNvbnN0IENvcUxpYih0aGlzLmRlc3RQYXRoUmVsYXRpdmUpOwp9CgovLyBUT0RPKDMwNjA5KTogU2luY2UgZmFzdGEgY3VycmVudGx5IHRocm93cyBhd2F5IGFubm90YXRpb25zIG9uIEVudW1zLCB3ZSB1c2UgYQovLyBsaXN0IHRvIGlkZW50aWZ5IHdoaWNoIGVudW1zIHRvIGNvbnZlcnQuCi8vCi8vIFdlJ2xsIHVuY29tbWVudCB0aGVzZSBlbnVtcyBvbmNlIHRoZSBDb3EgZm9ybWFsaXphdGlvbiBpcyBzdWZmaWNpZW50bHkgY29tcGxldGUuCnZhciBjb3FFbnVtcyA9IFsvKiJrZXJuZWwuYXN0OjpQcm9jZWR1cmVLaW5kIiwgImtlcm5lbC5hc3Q6OkFzeW5jTWFya2VyIiovXTsKHgBOTjwDUQkBGgEhIB8gMBIYARAPIScCAVEsA1RNAR1wYWNrYWdlOmtlcm5lbC9jb3FfYW5ub3QuZGFydCxzZGtyb290Oi9wa2cva2VybmVsL2xpYi9jbGFzc19oaWVyYXJjaHkuZGFydMAA0povLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpsaWJyYXJ5IGtlcm5lbC5jbGFzc19oaWVyYXJjaHk7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CmltcG9ydCAnZGFydDptYXRoJzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKaW1wb3J0ICdhc3QuZGFydCc7CmltcG9ydCAnc3JjL2hlYXAuZGFydCc7CmltcG9ydCAndHlwZV9hbGdlYnJhLmRhcnQnOwoKdHlwZWRlZiBIYW5kbGVBbWJpZ3VvdXNTdXBlcnR5cGVzID0gdm9pZCBGdW5jdGlvbihDbGFzcywgU3VwZXJ0eXBlLCBTdXBlcnR5cGUpOwoKYWJzdHJhY3QgY2xhc3MgTWl4aW5JbmZlcnJlciB7CiAgdm9pZCBpbmZlcihDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHksIENsYXNzIGNsYXNzTm9kZSk7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIGFuc3dlcmluZyB2YXJpb3VzIHN1YmNsYXNzaW5nIHF1ZXJpZXMuCmFic3RyYWN0IGNsYXNzIENsYXNzSGllcmFyY2h5IHsKICBmYWN0b3J5IENsYXNzSGllcmFyY2h5KENvbXBvbmVudCBjb21wb25lbnQsCiAgICAgIHtIYW5kbGVBbWJpZ3VvdXNTdXBlcnR5cGVzIG9uQW1iaWd1b3VzU3VwZXJ0eXBlcywKICAgICAgTWl4aW5JbmZlcnJlciBtaXhpbkluZmVycmVyfSkgewogICAgb25BbWJpZ3VvdXNTdXBlcnR5cGVzID8/PSAoQ2xhc3MgY2xzLCBTdXBlcnR5cGUgYSwgU3VwZXJ0eXBlIGIpIHsKICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zMjA5MQogICAgICB0aHJvdyAiJGNscyBjYW4ndCBpbXBsZW1lbnQgYm90aCAkYSBhbmQgJGIiOwogICAgfTsKICAgIHJldHVybiBuZXcgQ2xvc2VkV29ybGRDbGFzc0hpZXJhcmNoeS5faW50ZXJuYWwoCiAgICAgICAgb25BbWJpZ3VvdXNTdXBlcnR5cGVzLCBtaXhpbkluZmVycmVyKQogICAgICAuLl9pbml0aWFsaXplKGNvbXBvbmVudC5saWJyYXJpZXMpOwogIH0KCiAgdm9pZCBzZXQgb25BbWJpZ3VvdXNTdXBlcnR5cGVzKAogICAgICBIYW5kbGVBbWJpZ3VvdXNTdXBlcnR5cGVzIG9uQW1iaWd1b3VzU3VwZXJ0eXBlcyk7CgogIHZvaWQgc2V0IG1peGluSW5mZXJyZXIoTWl4aW5JbmZlcnJlciBtaXhpbkluZmVycmVyKTsKCiAgLy8vIEdpdmVuIHRoZSBbdW5vcmRlcmVkXSBjbGFzc2VzLCByZXR1cm4gdGhlbSBpbiBzdWNoIG9yZGVyIHRoYXQgY2xhc3NlcwogIC8vLyBvY2N1ciBhZnRlciB0aGVpciBzdXBlcmNsYXNzZXMuICBJZiBzb21lIHN1cGVyY2xhc3NlcyBhcmUgbm90IGluCiAgLy8vIFt1bm9yZGVyZWRdLCB0aGV5IGFyZSBub3QgaW5jbHVkZWQuCiAgSXRlcmFibGU8Q2xhc3M+IGdldE9yZGVyZWRDbGFzc2VzKEl0ZXJhYmxlPENsYXNzPiB1bm9yZGVyZWQpOwoKICAvLyBSZXR1cm5zIHRoZSBpbnN0YW50aXRpb24gb2YgZWFjaCBnZW5lcmljIHN1cGVydHlwZSBpbXBsZW1lbnRlZCBieSB0aGlzCiAgLy8gY2xhc3MgKGUuZy4gZ2V0Q2xhc3NBc0luc3RhbmNlT2YgYXBwbGllZCB0byBhbGwgc3VwZXJjbGFzc2VzIGFuZAogIC8vIGludGVyZmFjZXMpLgogIExpc3Q8U3VwZXJ0eXBlPiBnZW5lcmljU3VwZXJ0eXBlc09mKENsYXNzIGNsYXNzXyk7CgogIC8vLyBSZXR1cm5zIHRoZSBsZWFzdCB1cHBlciBib3VuZCBvZiB0d28gaW50ZXJmYWNlIHR5cGVzLCBhcyBkZWZpbmVkIGJ5IERhcnQKICAvLy8gMS4wLgogIC8vLwogIC8vLyBHaXZlbiB0d28gaW50ZXJmYWNlcyBJIGFuZCBKLCBsZXQgU19JIGJlIHRoZSBzZXQgb2Ygc3VwZXJpbnRlcmZhY2VzIG9mIEksCiAgLy8vIGxldCBTX0ogYmUgdGhlIHNldCBvZiBzdXBlcmludGVyZmFjZXMgb2YgSiwgYW5kIGxldAogIC8vLyBTID0gKEkgdW5pb24gU19JKSBpbnRlcnNlY3QgKEogdW5pb24gU19KKS4gIEZ1cnRoZXJtb3JlLCB3ZSBkZWZpbmUKICAvLy8gU19uID0ge1QgfCBUIGluIFMgYW5kIGRlcHRoKFQpID0gbn0gZm9yIGFueSBmaW5pdGUgbiB3aGVyZSBkZXB0aChUKSBpcwogIC8vLyB0aGUgbnVtYmVyIG9mIHN0ZXBzIGluIHRoZSBsb25nZXN0IGluaGVyaXRhbmNlIHBhdGggZnJvbSBUIHRvIE9iamVjdC4gIExldAogIC8vLyBxIGJlIHRoZSBsYXJnZXN0IG51bWJlciBzdWNoIHRoYXQgU19xIGhhcyBjYXJkaW5hbGl0eSBvbmUuICBUaGUgbGVhc3QKICAvLy8gdXBwZXIgYm91bmQgb2YgSSBhbmQgSiBpcyB0aGUgc29sZSBlbGVtZW50IG9mIFNfcS4KICAvLy8KICAvLy8gVGhpcyBpcyBjYWxsZWQgdGhlICJsZWdhY3kiIGxlYXN0IHVwcGVyIGJvdW5kIHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20gdGhlCiAgLy8vIERhcnQgMiBsZWFzdCB1cHBlciBib3VuZCwgd2hpY2ggaGFzIHNwZWNpYWwgYmVoYXZpb3JzIGluIHRoZSBjYXNlIHdoZXJlCiAgLy8vIG9uZSB0eXBlIGlzIGEgc3VidHlwZSBvZiB0aGUgb3RoZXIsIG9yIHdoZXJlIGJvdGggdHlwZXMgYXJlIGJhc2VkIG9uIHRoZQogIC8vLyBzYW1lIGNsYXNzLgogIEludGVyZmFjZVR5cGUgZ2V0TGVnYWN5TGVhc3RVcHBlckJvdW5kKAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUxLCBJbnRlcmZhY2VUeXBlIHR5cGUyKTsKCiAgLy8vIFJldHVybnMgdGhlIGluc3RhbnRpYXRpb24gb2YgW3N1cGVyY2xhc3NdIHRoYXQgaXMgaW1wbGVtZW50ZWQgYnkgW2NsYXNzX10sCiAgLy8vIG9yIGBudWxsYCBpZiBbY2xhc3NfXSBkb2VzIG5vdCBpbXBsZW1lbnQgW3N1cGVyY2xhc3NdIGF0IGFsbC4KICBTdXBlcnR5cGUgZ2V0Q2xhc3NBc0luc3RhbmNlT2YoQ2xhc3MgY2xhc3NfLCBDbGFzcyBzdXBlcmNsYXNzKTsKCiAgLy8vIFJldHVybnMgdGhlIGluc3RhbnRpYXRpb24gb2YgW3N1cGVyY2xhc3NdIHRoYXQgaXMgaW1wbGVtZW50ZWQgYnkgW3R5cGVdLAogIC8vLyBvciBgbnVsbGAgaWYgW3R5cGVdIGRvZXMgbm90IGltcGxlbWVudCBbc3VwZXJjbGFzc10gYXQgYWxsLgogIEludGVyZmFjZVR5cGUgZ2V0VHlwZUFzSW5zdGFuY2VPZihJbnRlcmZhY2VUeXBlIHR5cGUsIENsYXNzIHN1cGVyY2xhc3MpOwoKICAvLy8gUmV0dXJucyB0aGUgaW5zdGFudGlhdGlvbiBvZiBbc3VwZXJjbGFzc10gdGhhdCBpcyBpbXBsZW1lbnRlZCBieSBbdHlwZV0sCiAgLy8vIG9yIGBudWxsYCBpZiBbdHlwZV0gZG9lcyBub3QgaW1wbGVtZW50IFtzdXBlcmNsYXNzXS4gIFtzdXBlcmNsYXNzXSBtdXN0CiAgLy8vIGJlIGEgZ2VuZXJpYyBjbGFzcy4KICBTdXBlcnR5cGUgYXNJbnN0YW50aWF0aW9uT2YoU3VwZXJ0eXBlIHR5cGUsIENsYXNzIHN1cGVyY2xhc3MpOwoKICAvLy8gUmV0dXJucyB0aGUgaW5zdGFuY2UgbWVtYmVyIHRoYXQgd291bGQgcmVzcG9uZCB0byBhIGR5bmFtaWMgZGlzcGF0Y2ggb2YKICAvLy8gW25hbWVdIHRvIGFuIGluc3RhbmNlIG9mIFtjbGFzc19dLCBvciBgbnVsbGAgaWYgbm8gc3VjaCBtZW1iZXIgZXhpc3RzLgogIC8vLwogIC8vLyBJZiBbc2V0dGVyXSBpcyBgZmFsc2VgLCB0aGUgbmFtZSBpcyBkaXNwYXRjaGVkIGFzIGEgZ2V0dGVyIG9yIGNhbGwsCiAgLy8vIGFuZCB3aWxsIHJldHVybiBhIGZpZWxkLCBnZXR0ZXIsIG1ldGhvZCwgb3Igb3BlcmF0b3IgKG9yIG51bGwpLgogIC8vLwogIC8vLyBJZiBbc2V0dGVyXSBpcyBgdHJ1ZWAsIHRoZSBuYW1lIGlzIGRpc3BhdGNoZWQgYXMgYSBzZXR0ZXIsIHJvdWdobHkKICAvLy8gY29ycmVzcG9uZGluZyB0byBgbmFtZT1gIGluIHRoZSBEYXJ0IHNwZWNpZmljYXRpb24sIGJ1dCBub3RlIHRoYXQgdGhlCiAgLy8vIHJldHVybmVkIG1lbWJlciB3aWxsIG5vdCBoYXZlIGEgbmFtZSBlbmRpbmcgd2l0aCBgPWAuICBJbiB0aGlzIGNhc2UsCiAgLy8vIGEgbm9uLWZpbmFsIGZpZWxkIG9yIHNldHRlciAob3IgbnVsbCkgd2lsbCBiZSByZXR1cm5lZC4KICAvLy8KICAvLy8gSWYgdGhlIGNsYXNzIGlzIGFic3RyYWN0LCBhYnN0cmFjdCBtZW1iZXJzIGFyZSBpZ25vcmVkIGFuZCB0aGUgZGlzcGF0Y2gKICAvLy8gaXMgcmVzb2x2ZWQgaWYgdGhlIGNsYXNzIHdhcyBub3QgYWJzdHJhY3QuCiAgTWVtYmVyIGdldERpc3BhdGNoVGFyZ2V0KENsYXNzIGNsYXNzXywgTmFtZSBuYW1lLCB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSk7CgogIC8vLyBSZXR1cm5zIHRoZSBsaXN0IG9mIHBvdGVudGlhbCB0YXJnZXRzIG9mIGR5bmFtaWMgZGlzcGF0Y2ggdG8gYW4gaW5zdGFuY2UKICAvLy8gb2YgW2NsYXNzX10uCiAgLy8vCiAgLy8vIElmIFtzZXR0ZXJzXSBpcyBgZmFsc2VgLCBvbmx5IHBvdGVudGlhbCB0YXJnZXRzIG9mIGEgZ2V0dGVyIG9yIGNhbGwKICAvLy8gZGlzcGF0Y2ggYXJlIHJldHVybmVkLiAgSWYgW3NldHRlcnNdIGlzIGB0cnVlYCwgb25seSBwb3RlbnRpYWwgdGFyZ2V0cwogIC8vLyBvZiBhIHNldHRlciBkaXNwYXRjaCBhcmUgcmV0dXJuZWQuCiAgLy8vCiAgLy8vIFNlZSBbZ2V0RGlzcGF0Y2hUYXJnZXRdIGZvciBtb3JlIGRldGFpbHMuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCBsaXN0IHNob3VsZCBub3QgYmUgbW9kaWZpZWQuCiAgTGlzdDxNZW1iZXI+IGdldERpc3BhdGNoVGFyZ2V0cyhDbGFzcyBjbGFzc18sIHtib29sIHNldHRlcnM6IGZhbHNlfSk7CgogIC8vLyBSZXR1cm5zIHRoZSBwb3NzaWJseSBhYnN0cmFjdCBpbnRlcmZhY2UgbWVtYmVyIG9mIFtjbGFzc19dIHdpdGggdGhlIGdpdmVuCiAgLy8vIFtuYW1lXS4KICAvLy8KICAvLy8gSWYgW3NldHRlcl0gaXMgYGZhbHNlYCwgb25seSBmaWVsZHMsIG1ldGhvZHMsIGFuZCBnZXR0ZXJzIHdpdGggdGhhdCBuYW1lCiAgLy8vIHdpbGwgYmUgZm91bmQuICBJZiBbc2V0dGVyXSBpcyBgdHJ1ZWAsIG9ubHkgbm9uLWZpbmFsIGZpZWxkcyBhbmQgc2V0dGVycwogIC8vLyB3aWxsIGJlIGZvdW5kLgogIC8vLwogIC8vLyBJZiBtdWx0aXBsZSBtZW1iZXJzIHdpdGggdGhhdCBuYW1lIGFyZSBpbmhlcml0ZWQgYW5kIG5vdCBvdmVycmlkZGVuLCB0aGUKICAvLy8gbWVtYmVyIGZyb20gdGhlIGZpcnN0IGRlY2xhcmVkIHN1cGVydHlwZSBpcyByZXR1cm5lZC4KICBNZW1iZXIgZ2V0SW50ZXJmYWNlTWVtYmVyKENsYXNzIGNsYXNzXywgTmFtZSBuYW1lLCB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSk7CgogIC8vLyBSZXR1cm5zIHRoZSBsaXN0IG9mIG1lbWJlcnMgZGVub3RpbmcgdGhlIGludGVyZmFjZSBmb3IgW2NsYXNzX10sIHdoaWNoCiAgLy8vIG1heSBpbmNsdWRlIGFic3RyYWN0IG1lbWJlcnMuCiAgLy8vCiAgLy8vIFRoZSBsaXN0IG1heSBjb250YWluIG11bHRpcGxlIG1lbWJlcnMgd2l0aCBhIGdpdmVuIG5hbWUuICBUaGlzIGhhcHBlbnMKICAvLy8gd2hlbiBtZW1iZXJzIGFyZSBpbmhlcml0ZWQgdGhyb3VnaCBkaWZmZXJlbnQgc3VwZXJ0eXBlcyBhbmQgbm90IG92ZXJyaWRkZW4KICAvLy8gaW4gdGhlIGNsYXNzLgogIC8vLwogIC8vLyBBbHNvIHNlZSBbZ2V0SW50ZXJmYWNlTWVtYmVyXS4KICBMaXN0PE1lbWJlcj4gZ2V0SW50ZXJmYWNlTWVtYmVycyhDbGFzcyBjbGFzc18sIHtib29sIHNldHRlcnM6IGZhbHNlfSk7CgogIC8vLyBSZXR1cm5zIHRoZSBsaXN0IG9mIG1lbWJlcnMgZGVjbGFyZWQgaW4gW2NsYXNzX10sIGluY2x1ZGluZyBhYnN0cmFjdAogIC8vLyBtZW1iZXJzLgogIC8vLwogIC8vLyBNZW1iZXJzIGFyZSBzb3J0ZWQgYnkgbmFtZSBzbyB0aGF0IHRoZXkgbWF5IGJlIGVmZmljaWVudGx5IGNvbXBhcmVkIGFjcm9zcwogIC8vLyBjbGFzc2VzLgogIExpc3Q8TWVtYmVyPiBnZXREZWNsYXJlZE1lbWJlcnMoQ2xhc3MgY2xhc3NfLCB7Ym9vbCBzZXR0ZXJzOiBmYWxzZX0pOwoKICAvLy8gVHJ1ZSBpZiBbc3ViY2xhc3NdIGluaGVyaXRzIGZyb20gW3N1cGVyY2xhc3NdIHRob3VnaCB6ZXJvIG9yIG1vcmUKICAvLy8gYGV4dGVuZHNgIHJlbGF0aW9uc2hpcHMuCiAgYm9vbCBpc1N1YmNsYXNzT2YoQ2xhc3Mgc3ViY2xhc3MsIENsYXNzIHN1cGVyY2xhc3MpOwoKICAvLy8gVHJ1ZSBpZiBbc3VidHlwZV0gaW5oZXJpdHMgZnJvbSBbc3VwZXJjbGFzc10gdGhvdWdoIHplcm8gb3IgbW9yZQogIC8vLyBgZXh0ZW5kc2AsIGB3aXRoYCwgYW5kIGBpbXBsZW1lbnRzYCByZWxhdGlvbnNoaXBzLgogIGJvb2wgaXNTdWJ0eXBlT2YoQ2xhc3Mgc3VidHlwZSwgQ2xhc3Mgc3VwZXJjbGFzcyk7CgogIC8vLyBUcnVlIGlmIHRoZSBnaXZlbiBjbGFzcyBpcyB1c2VkIGFzIHRoZSByaWdodC1oYW5kIG9wZXJhbmQgdG8gYQogIC8vLyBtaXhpbiBhcHBsaWNhdGlvbiAoaS5lLiBbQ2xhc3MubWl4ZWRJblR5cGVdKS4KICBib29sIGlzVXNlZEFzTWl4aW4oQ2xhc3MgY2xhc3NfKTsKCiAgLy8vIEludm9rZXMgW2NhbGxiYWNrXSBmb3IgZXZlcnkgbWVtYmVyIGRlY2xhcmVkIGluIG9yIGluaGVyaXRlZCBieSBbY2xhc3NfXQogIC8vLyB0aGF0IG92ZXJyaWRlcyBvciBpbXBsZW1lbnRzIGEgbWVtYmVyIGluIGEgc3VwZXJ0eXBlIG9mIFtjbGFzc19dCiAgLy8vIChvciBpbiByYXJlIGNhc2VzLCBvdmVycmlkZXMgYSBtZW1iZXIgZGVjbGFyZWQgaW4gW2NsYXNzX10pLgogIC8vLwogIC8vLyBXZSB1c2UgdGhlIHRlcm0gImluaGVyaXRhYmxlIiBmb3IgbWVtYmVycyB0aGF0IGFyZSBjYW5kaWRhdGVzIGZvcgogIC8vLyBpbmhlcml0YW5jZSBidXQgbWF5IGhhdmUgYmVlbiBvdmVycmlkZGVuLiAgVGhlICJkZWNsYXJlZCIgbWVtYmVycyBvZiBhCiAgLy8vIG1peGluIGFwcGxpY2F0aW9uIGFyZSB0aG9zZSBkZWNsYXJlZCBpbiB0aGUgbWl4ZWQtaW4gdHlwZS4gVGhlIGNhbGxiYWNrIGlzCiAgLy8vIGludm9rZWQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczoKICAvLy8KICAvLy8gMS4gQSBtZW1iZXIgZGVjbGFyZWQgaW4gdGhlIGNsYXNzIG92ZXJyaWRlcyBhIG1lbWJlciBpbmhlcml0YWJsZSB0aHJvdWdoCiAgLy8vIG9uZSBvZiB0aGUgc3VwZXJ0eXBlcyBvZiB0aGUgY2xhc3MuCiAgLy8vCiAgLy8vIDIuIEEgbm9uLWFic3RyYWN0IG1lbWJlciBpcyBpbmhlcml0ZWQgZnJvbSBhIHN1cGVyY2xhc3MsIGFuZCBpbiB0aGUKICAvLy8gY29udGV4dCBvZiB0aGlzIGNsYXNzLCBpdCBvdmVycmlkZXMgYW4gYWJzdHJhY3QgbWVtYmVyIGluaGVyaXRhYmxlIHRocm91Z2gKICAvLy8gb25lIG9mIGl0cyBzdXBlcmludGVyZmFjZXMuCiAgLy8vCiAgLy8vIDMuIEEgbm9uLWFic3RyYWN0IG1lbWJlciBpcyBpbmhlcml0ZWQgZnJvbSBhIHN1cGVyY2xhc3MsIGFuZCBpdCBvdmVycmlkZXMKICAvLy8gYW4gYWJzdHJhY3QgbWVtYmVyIGRlY2xhcmVkIGluIHRoaXMgY2xhc3MuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIHdpbGwgbm90IHJlcG9ydCB0aGF0IGEgbWVtYmVyIG92ZXJyaWRlcyBpdHNlbGYuIEEgZ2l2ZW4gcGFpcgogIC8vLyBtYXkgYmUgcmVwb3J0ZWQgbXVsdGlwbGUgdGltZXMgd2hlbiB0aGVyZSBhcmUgbXVsdGlwbGUgaW5oZXJpdGFuY2UgcGF0aHMKICAvLy8gdG8gdGhlIG92ZXJyaWRkZW4gbWVtYmVyLgogIC8vLwogIC8vLyBJdCBpcyBwb3NzaWJsZSBmb3IgdHdvIG1ldGhvZHMgdG8gb3ZlcnJpZGUgb25lIGFub3RoZXIgaW4gYm90aCBkaXJlY3Rpb25zLgogIC8vLwogIC8vLyBCeSBkZWZhdWx0IGdldHRlcnMgYW5kIHNldHRlcnMgYXJlIG92ZXJyaWRkZW4gc2VwYXJhdGVseS4gIFRoZSBbaXNTZXR0ZXJdCiAgLy8vIGNhbGxiYWNrIHBhcmFtZXRlciBkZXRlcm1pbmVzIHdoaWNoIHR5cGUgb2YgYWNjZXNzIGlzIGJlaW5nIG92ZXJyaWRkZW4uCiAgdm9pZCBmb3JFYWNoT3ZlcnJpZGVQYWlyKENsYXNzIGNsYXNzXywKICAgICAgY2FsbGJhY2soTWVtYmVyIGRlY2xhcmVkTWVtYmVyLCBNZW1iZXIgaW50ZXJmYWNlTWVtYmVyLCBib29sIGlzU2V0dGVyKSk7CgogIC8vLyBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGJ5IHRoZSBjbGllbnQgYWZ0ZXIgYSBjaGFuZ2U6IHJlbW92YWwsIGFkZGl0aW9uLAogIC8vLyBvciBtb2RpZmljYXRpb24gb2YgY2xhc3NlcyAodmlhIGxpYnJhcmllcykuCiAgLy8vCiAgLy8vIEZvciBtb2RpZmllZCBjbGFzc2VzIHNwZWNpZnkgYSBjbGFzcyBhcyBib3RoIHJlbW92ZWQgYW5kIGFkZGVkOiBTb21lIG9mCiAgLy8vIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoaXMgaGllcmFyY2h5IG1pZ2h0IGhhdmUgY2FjaGVkLCBpcyBub3QgdmFsaWQKICAvLy8gYW55bW9yZS4KICAvLy8KICAvLy8gTm90ZSwgdGhhdCBpdCBpcyB0aGUgY2xpZW50cyByZXNwb25zaWJpbGl0eSB0byBtYXJrIGFsbCBzdWJjbGFzc2VzIGFzCiAgLy8vIGNoYW5nZWQgdG9vLgogIENsYXNzSGllcmFyY2h5IGFwcGx5VHJlZUNoYW5nZXMoSXRlcmFibGU8TGlicmFyeT4gcmVtb3ZlZExpYnJhcmllcywKICAgICAgSXRlcmFibGU8TGlicmFyeT4gZW5zdXJlS25vd25MaWJyYXJpZXMsCiAgICAgIHtDb21wb25lbnQgcmVpc3N1ZUFtYmlndW91c1N1cGVydHlwZXNGb3J9KTsKCiAgLy8vIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgYnkgdGhlIGNsaWVudCBhZnRlciBhIG1lbWJlciBjaGFuZ2Ugb24gY2xhc3NlczoKICAvLy8gU29tZSBvZiB0aGUgaW5mb3JtYXRpb24gdGhhdCB0aGlzIGhpZXJhcmNoeSBtaWdodCBoYXZlIGNhY2hlZCwKICAvLy8gaXMgbm90IHZhbGlkIGFueW1vcmUuCiAgLy8vIE5vdGUsIHRoYXQgaXQgaXMgdGhlIGNsaWVudHMgcmVzcG9uc2liaWxpdHkgdG8gbWFyayBhbGwgc3ViY2xhc3NlcyBhcwogIC8vLyBjaGFuZ2VkIHRvbywgb3IgLSBpZiBbZmluZERlc2NlbmRhbnRzXSBpcyB0cnVlLCB0aGUgQ2xhc3NIaWVyYXJjaHkgd2lsbAogIC8vLyBzcGVuZCB0aGUgdGltZSB0byBmaW5kIHRoZW0gZm9yIHRoZSBjYWxsZXIuCiAgQ2xhc3NIaWVyYXJjaHkgYXBwbHlNZW1iZXJDaGFuZ2VzKEl0ZXJhYmxlPENsYXNzPiBjbGFzc2VzLAogICAgICB7Ym9vbCBmaW5kRGVzY2VuZGFudHM6IGZhbHNlfSk7CgogIC8vLyBNZXJnZXMgdHdvIHNvcnRlZCBsaXN0cy4KICAvLy8KICAvLy8gSWYgYSBnaXZlbiBtZW1iZXIgb2NjdXJzIGluIGJvdGggbGlzdHMsIHRoZSBtZXJnZSB3aWxsIGF0dGVtcHQgdG8gZXhjbHVkZQogIC8vLyB0aGUgZHVwbGljYXRlIG1lbWJlciwgYnV0IGlzIG5vdCBzdHJpY3RseSBndWFyYW50ZWVkIHRvIGRvIHNvLgogIC8vLwogIC8vLyBUaGUgc29ydCBoYXMgdGhlIGZvbGxvd2luZyBzdGFiaWxpdHkgcHJvcGVydGllczoKICAvLy8KICAvLy8gLSBJZiBib3RoIHggYW5kIHkgY2FtZSBmcm9tIHRoZSBzYW1lIGlucHV0IGxpc3QsIGFuZCB4IHByZWNlZGVkIHkgaW4gdGhlCiAgLy8vICAgaW5wdXQgbGlzdCwgeCB3aWxsIHByZWNlZGUgeSBpbiB0aGUgb3V0cHV0IGxpc3QuICBUaGlzIGhvbGRzIGV2ZW4gaWYgeAogIC8vLyAgIGFuZCB5IGhhdmUgbWF0Y2hpbmcgbmFtZXMuCiAgLy8vCiAgLy8vIC0gSWYgbSBpcyBhIGNvbnRpZ3VvdXMgc3Vic2VxdWVuY2Ugb2YgdGhlIG91dHB1dCBsaXN0IGNvbnRhaW5pbmcgYXQgbGVhc3QKICAvLy8gICBvbmUgZWxlbWVudCBmcm9tIGVhY2ggaW5wdXQgbGlzdCwgYW5kIGFsbCBlbGVtZW50cyBvZiBtIGhhdmUgbWF0Y2hpbmcKICAvLy8gICBuYW1lcywgdGhlbiB0aGUgZWxlbWVudHMgb2YgbSBmcm9tIFtmaXJzdF0gd2lsbCBwcmVjZWRlIHRoZSBlbGVtZW50cyBvZgogIC8vLyAgIG0gZnJvbSBbc2Vjb25kXS4KICBzdGF0aWMgTGlzdDxNZW1iZXI+IG1lcmdlU29ydGVkTGlzdHMoCiAgICAgIExpc3Q8TWVtYmVyPiBmaXJzdCwgTGlzdDxNZW1iZXI+IHNlY29uZCkgewogICAgaWYgKGZpcnN0LmlzRW1wdHkpIHJldHVybiBzZWNvbmQ7CiAgICBpZiAoc2Vjb25kLmlzRW1wdHkpIHJldHVybiBmaXJzdDsKICAgIExpc3Q8TWVtYmVyPiByZXN1bHQgPSA8TWVtYmVyPltdLi5sZW5ndGggPSBmaXJzdC5sZW5ndGggKyBzZWNvbmQubGVuZ3RoOwogICAgaW50IHN0b3JlSW5kZXggPSAwOwogICAgaW50IGkgPSAwLCBqID0gMDsKICAgIHdoaWxlIChpIDwgZmlyc3QubGVuZ3RoICYmIGogPCBzZWNvbmQubGVuZ3RoKSB7CiAgICAgIE1lbWJlciBmaXJzdE1lbWJlciA9IGZpcnN0W2ldOwogICAgICBNZW1iZXIgc2Vjb25kTWVtYmVyID0gc2Vjb25kW2pdOwogICAgICBpbnQgY29tcGFyZSA9IENsYXNzSGllcmFyY2h5LmNvbXBhcmVNZW1iZXJzKGZpcnN0TWVtYmVyLCBzZWNvbmRNZW1iZXIpOwogICAgICBpZiAoY29tcGFyZSA8PSAwKSB7CiAgICAgICAgcmVzdWx0W3N0b3JlSW5kZXgrK10gPSBmaXJzdE1lbWJlcjsKICAgICAgICArK2k7CiAgICAgICAgLy8gSWYgdGhlIHNhbWUgbWVtYmVyIG9jY3VycyBpbiBib3RoIGxpc3RzLCBza2lwIHRoZSBkdXBsaWNhdGUuCiAgICAgICAgaWYgKGlkZW50aWNhbChmaXJzdE1lbWJlciwgc2Vjb25kTWVtYmVyKSkgewogICAgICAgICAgKytqOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHRbc3RvcmVJbmRleCsrXSA9IHNlY29uZE1lbWJlcjsKICAgICAgICArK2o7CiAgICAgIH0KICAgIH0KICAgIHdoaWxlIChpIDwgZmlyc3QubGVuZ3RoKSB7CiAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gZmlyc3RbaSsrXTsKICAgIH0KICAgIHdoaWxlIChqIDwgc2Vjb25kLmxlbmd0aCkgewogICAgICByZXN1bHRbc3RvcmVJbmRleCsrXSA9IHNlY29uZFtqKytdOwogICAgfQogICAgcmVzdWx0Lmxlbmd0aCA9IHN0b3JlSW5kZXg7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIENvbXBhcmVzIG1lbWJlcnMgYnkgbmFtZSwgdXNpbmcgdGhlIHNhbWUgc29ydCBvcmRlciBhcwogIC8vLyBbZ2V0RGVjbGFyZWRNZW1iZXJzXSBhbmQgW2dldEludGVyZmFjZU1lbWJlcnNdLgogIHN0YXRpYyBpbnQgY29tcGFyZU1lbWJlcnMoTWVtYmVyIGZpcnN0LCBNZW1iZXIgc2Vjb25kKSB7CiAgICByZXR1cm4gY29tcGFyZU5hbWVzKGZpcnN0Lm5hbWUsIHNlY29uZC5uYW1lKTsKICB9CgogIC8vLyBDb21wYXJlcyBuYW1lcywgdXNpbmcgdGhlIHNhbWUgc29ydCBvcmRlciBhcyBbZ2V0RGVjbGFyZWRNZW1iZXJzXSBhbmQKICAvLy8gW2dldEludGVyZmFjZU1lbWJlcnNdLgogIC8vLwogIC8vLyBUaGlzIGlzIGFuIGFyYml0cmFyeSBhcy1mYXN0LWFzLXBvc3NpYmxlIHNvcnRpbmcgY3JpdGVyaW9uLgogIHN0YXRpYyBpbnQgY29tcGFyZU5hbWVzKE5hbWUgZmlyc3ROYW1lLCBOYW1lIHNlY29uZE5hbWUpIHsKICAgIGludCBmaXJzdEhhc2ggPSBmaXJzdE5hbWUuaGFzaENvZGU7CiAgICBpbnQgc2Vjb25kSGFzaCA9IHNlY29uZE5hbWUuaGFzaENvZGU7CiAgICBpZiAoZmlyc3RIYXNoICE9IHNlY29uZEhhc2gpIHJldHVybiBmaXJzdEhhc2ggLSBzZWNvbmRIYXNoOwogICAgU3RyaW5nIGZpcnN0U3RyaW5nID0gZmlyc3ROYW1lLm5hbWU7CiAgICBTdHJpbmcgc2Vjb25kU3RyaW5nID0gc2Vjb25kTmFtZS5uYW1lOwogICAgaW50IGZpcnN0TGVuZ3RoID0gZmlyc3RTdHJpbmcubGVuZ3RoOwogICAgaW50IHNlY29uZExlbmd0aCA9IHNlY29uZFN0cmluZy5sZW5ndGg7CiAgICBpZiAoZmlyc3RMZW5ndGggIT0gc2Vjb25kTGVuZ3RoKSB7CiAgICAgIHJldHVybiBmaXJzdExlbmd0aCAtIHNlY29uZExlbmd0aDsKICAgIH0KICAgIExpYnJhcnkgZmlyc3RMaWJyYXJ5ID0gZmlyc3ROYW1lLmxpYnJhcnk7CiAgICBMaWJyYXJ5IHNlY29uZExpYnJhcnkgPSBzZWNvbmROYW1lLmxpYnJhcnk7CiAgICBpZiAoZmlyc3RMaWJyYXJ5ICE9IHNlY29uZExpYnJhcnkpIHsKICAgICAgaWYgKGZpcnN0TGlicmFyeSA9PSBudWxsKSByZXR1cm4gLTE7CiAgICAgIGlmIChzZWNvbmRMaWJyYXJ5ID09IG51bGwpIHJldHVybiAxOwogICAgICByZXR1cm4gZmlyc3RMaWJyYXJ5LmNvbXBhcmVUbyhzZWNvbmRMaWJyYXJ5KTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmlyc3RMZW5ndGg7ICsraSkgewogICAgICBpbnQgZmlyc3RVbml0ID0gZmlyc3RTdHJpbmcuY29kZVVuaXRBdChpKTsKICAgICAgaW50IHNlY29uZFVuaXQgPSBzZWNvbmRTdHJpbmcuY29kZVVuaXRBdChpKTsKICAgICAgaW50IGRlbHRhID0gZmlyc3RVbml0IC0gc2Vjb25kVW5pdDsKICAgICAgaWYgKGRlbHRhICE9IDApIHJldHVybiBkZWx0YTsKICAgIH0KICAgIHJldHVybiAwOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG1lbWJlciB3aXRoIHRoZSBnaXZlbiBuYW1lLCBvciBgbnVsbGAgaWYgbm8gbWVtYmVyIGhhcyB0aGUKICAvLy8gbmFtZS4gIEluIGNhc2UgdGhlIGxpc3QgY29udGFpbnMgbXVsdGlwbGUgbWVtYmVycyB3aXRoIHRoZSBnaXZlbiBuYW1lLAogIC8vLyB0aGUgb25lIHRoYXQgb2NjdXJzIGZpcnN0IGluIHRoZSBsaXN0IGlzIHJldHVybmVkLgogIC8vLwogIC8vLyBUaGUgbGlzdCBpcyBhc3N1bWVkIHRvIGJlIHNvcnRlZCBhY2NvcmRpbmcgdG8gW2NvbXBhcmVNZW1iZXJzXS4KICBzdGF0aWMgTWVtYmVyIGZpbmRNZW1iZXJCeU5hbWUoTGlzdDxNZW1iZXI+IG1lbWJlcnMsIE5hbWUgbmFtZSkgewogICAgaW50IGxvdyA9IDAsIGhpZ2ggPSBtZW1iZXJzLmxlbmd0aCAtIDE7CiAgICB3aGlsZSAobG93IDw9IGhpZ2gpIHsKICAgICAgaW50IG1pZCA9IGxvdyArICgoaGlnaCAtIGxvdykgPj4gMSk7CiAgICAgIE1lbWJlciBwaXZvdCA9IG1lbWJlcnNbbWlkXTsKICAgICAgaW50IGNvbXBhcmlzb24gPSBjb21wYXJlTmFtZXMobmFtZSwgcGl2b3QubmFtZSk7CiAgICAgIGlmIChjb21wYXJpc29uIDwgMCkgewogICAgICAgIGhpZ2ggPSBtaWQgLSAxOwogICAgICB9IGVsc2UgaWYgKGNvbXBhcmlzb24gPiAwKSB7CiAgICAgICAgbG93ID0gbWlkICsgMTsKICAgICAgfSBlbHNlIGlmIChoaWdoICE9IG1pZCkgewogICAgICAgIC8vIEVuc3VyZSB3ZSBmaW5kIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBnaXZlbiBuYW1lLgogICAgICAgIGhpZ2ggPSBtaWQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHBpdm90OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIENsYXNzSGllcmFyY2h5U3VidHlwZXMgewogIC8vLyBSZXR1cm5zIHRoZSBzdWJ0eXBlcyBvZiBbY2xhc3NfXSBhcyBhbiBpbnRlcnZhbCBsaXN0LgogIENsYXNzU2V0IGdldFN1YnR5cGVzT2YoQ2xhc3MgY2xhc3NfKTsKCiAgLy8vIFJldHVybnMgdGhlIHNpbmdsZSBjb25jcmV0ZSB0YXJnZXQgZm9yIGludm9jYXRpb24gb2YgdGhlIGdpdmVuIGludGVyZmFjZQogIC8vLyB0YXJnZXQsIG9yIGBudWxsYCBpZiBpdCBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgb3IgdGhlcmUgYXJlIG11bHRpcGxlCiAgLy8vIHBvc3NpYmxlIHRhcmdldHMuCiAgTWVtYmVyIGdldFNpbmdsZVRhcmdldEZvckludGVyZmFjZUludm9jYXRpb24oTWVtYmVyIGludGVyZmFjZVRhcmdldCwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pOwp9CgpjbGFzcyBfQ2xhc3NJbmZvU3VidHlwZSB7CiAgZmluYWwgX0NsYXNzSW5mbyBjbGFzc0luZm87CiAgaW50IHRvcERvd25JbmRleCA9IC0xOwoKICAvLy8gVG9wLWRvd24gaW5kaWNlcyBvZiBhbGwgc3ViY2xhc3NlcyBvZiB0aGlzIGNsYXNzLCByZXByZXNlbnRlZCBhcwogIC8vLyBpbnRlcmxlYXZlZCBiZWdpbi9lbmQgaW50ZXJ2YWwgZW5kIHBvaW50cy4KICBVaW50MzJMaXN0IHN1YnR5cGVJbnRlcnZhbExpc3Q7CgogIF9DbGFzc0luZm9TdWJ0eXBlKHRoaXMuY2xhc3NJbmZvKTsKfQoKY2xhc3MgX0Nsb3NlZFdvcmxkQ2xhc3NIaWVyYXJjaHlTdWJ0eXBlcyBpbXBsZW1lbnRzIENsYXNzSGllcmFyY2h5U3VidHlwZXMgewogIGZpbmFsIENsb3NlZFdvcmxkQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5OwogIGZpbmFsIExpc3Q8Q2xhc3M+IF9jbGFzc2VzQnlUb3BEb3duSW5kZXg7CiAgZmluYWwgTWFwPENsYXNzLCBfQ2xhc3NJbmZvU3VidHlwZT4gX2luZm9NYXAgPSA8Q2xhc3MsIF9DbGFzc0luZm9TdWJ0eXBlPnt9OwogIGJvb2wgaW52YWxpZGF0ZWQgPSBmYWxzZTsKCiAgX0Nsb3NlZFdvcmxkQ2xhc3NIaWVyYXJjaHlTdWJ0eXBlcyh0aGlzLmhpZXJhcmNoeSkKICAgICAgOiBfY2xhc3Nlc0J5VG9wRG93bkluZGV4ID0gbmV3IExpc3Q8Q2xhc3M+KGhpZXJhcmNoeS5faW5mb01hcC5sZW5ndGgpIHsKICAgIGhpZXJhcmNoeS5hbGxCZXRzT2ZmID0gdHJ1ZTsKICAgIGlmIChoaWVyYXJjaHkuX2luZm9NYXAuaXNOb3RFbXB0eSkgewogICAgICBmb3IgKENsYXNzIGNsYXNzXyBpbiBoaWVyYXJjaHkuX2luZm9NYXAua2V5cykgewogICAgICAgIF9pbmZvTWFwW2NsYXNzX10gPSBuZXcgX0NsYXNzSW5mb1N1YnR5cGUoaGllcmFyY2h5Ll9pbmZvTWFwW2NsYXNzX10pOwogICAgICB9CgogICAgICBfdG9wRG93blNvcnRWaXNpdChfaW5mb01hcFtoaWVyYXJjaHkuX2luZm9NYXAua2V5cy5maXJzdF0pOwogICAgfQogIH0KCiAgLy8vIERvd253YXJkcyB0cmF2ZXJzYWwgb2YgdGhlIGNsYXNzIGhpZXJhcmNoeSB0aGF0IG9yZGVycyBjbGFzc2VzIHNvIGxvY2FsCiAgLy8vIGhpZXJhcmNoaWVzIGhhdmUgY29udGlndW91cyBpbmRpY2VzLgogIGludCBfdG9wRG93blNvcnRJbmRleCA9IDA7CiAgdm9pZCBfdG9wRG93blNvcnRWaXNpdChfQ2xhc3NJbmZvU3VidHlwZSBzdWJJbmZvKSB7CiAgICBpZiAoc3ViSW5mby50b3BEb3duSW5kZXggIT0gLTEpIHJldHVybjsKICAgIGludCBpbmRleCA9IF90b3BEb3duU29ydEluZGV4Kys7CiAgICBzdWJJbmZvLnRvcERvd25JbmRleCA9IGluZGV4OwogICAgX2NsYXNzZXNCeVRvcERvd25JbmRleFtpbmRleF0gPSBzdWJJbmZvLmNsYXNzSW5mby5jbGFzc05vZGU7CiAgICB2YXIgc3VidHlwZVNldEJ1aWxkZXIgPSBuZXcgX0ludGVydmFsTGlzdEJ1aWxkZXIoKS4uYWRkU2luZ2xldG9uKGluZGV4KTsKICAgIGZvciAoX0NsYXNzSW5mbyBzdWJ0eXBlIGluIHN1YkluZm8uY2xhc3NJbmZvLmRpcmVjdEV4dGVuZGVycykgewogICAgICBfQ2xhc3NJbmZvU3VidHlwZSBzdWJ0eXBlSW5mbyA9IF9pbmZvTWFwW3N1YnR5cGUuY2xhc3NOb2RlXTsKICAgICAgX3RvcERvd25Tb3J0VmlzaXQoc3VidHlwZUluZm8pOwogICAgICBzdWJ0eXBlU2V0QnVpbGRlci5hZGRJbnRlcnZhbExpc3Qoc3VidHlwZUluZm8uc3VidHlwZUludGVydmFsTGlzdCk7CiAgICB9CiAgICBmb3IgKF9DbGFzc0luZm8gc3VidHlwZSBpbiBzdWJJbmZvLmNsYXNzSW5mby5kaXJlY3RNaXhlcnMpIHsKICAgICAgX0NsYXNzSW5mb1N1YnR5cGUgc3VidHlwZUluZm8gPSBfaW5mb01hcFtzdWJ0eXBlLmNsYXNzTm9kZV07CiAgICAgIF90b3BEb3duU29ydFZpc2l0KHN1YnR5cGVJbmZvKTsKICAgICAgc3VidHlwZVNldEJ1aWxkZXIuYWRkSW50ZXJ2YWxMaXN0KHN1YnR5cGVJbmZvLnN1YnR5cGVJbnRlcnZhbExpc3QpOwogICAgfQogICAgZm9yIChfQ2xhc3NJbmZvIHN1YnR5cGUgaW4gc3ViSW5mby5jbGFzc0luZm8uZGlyZWN0SW1wbGVtZW50ZXJzKSB7CiAgICAgIF9DbGFzc0luZm9TdWJ0eXBlIHN1YnR5cGVJbmZvID0gX2luZm9NYXBbc3VidHlwZS5jbGFzc05vZGVdOwogICAgICBfdG9wRG93blNvcnRWaXNpdChzdWJ0eXBlSW5mbyk7CiAgICAgIHN1YnR5cGVTZXRCdWlsZGVyLmFkZEludGVydmFsTGlzdChzdWJ0eXBlSW5mby5zdWJ0eXBlSW50ZXJ2YWxMaXN0KTsKICAgIH0KICAgIHN1YkluZm8uc3VidHlwZUludGVydmFsTGlzdCA9IHN1YnR5cGVTZXRCdWlsZGVyLmJ1aWxkSW50ZXJ2YWxMaXN0KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXIgZ2V0U2luZ2xlVGFyZ2V0Rm9ySW50ZXJmYWNlSW52b2NhdGlvbihNZW1iZXIgaW50ZXJmYWNlVGFyZ2V0LAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgaWYgKGludmFsaWRhdGVkKSB0aHJvdyAiVGhpcyBkYXRhc3RydWN0dXJlIGhhcyBiZWVuIGludmFsaWRhdGVkIjsKICAgIE5hbWUgbmFtZSA9IGludGVyZmFjZVRhcmdldC5uYW1lOwogICAgTWVtYmVyIHRhcmdldCA9IG51bGw7CiAgICBDbGFzc1NldCBzdWJ0eXBlcyA9IGdldFN1YnR5cGVzT2YoaW50ZXJmYWNlVGFyZ2V0LmVuY2xvc2luZ0NsYXNzKTsKICAgIGZvciAoQ2xhc3MgYyBpbiBzdWJ0eXBlcykgewogICAgICBpZiAoIWMuaXNBYnN0cmFjdCkgewogICAgICAgIE1lbWJlciBjYW5kaWRhdGUgPSBoaWVyYXJjaHkuZ2V0RGlzcGF0Y2hUYXJnZXQoYywgbmFtZSwgc2V0dGVyOiBzZXR0ZXIpOwogICAgICAgIGlmICgoY2FuZGlkYXRlICE9IG51bGwpICYmICFjYW5kaWRhdGUuaXNBYnN0cmFjdCkgewogICAgICAgICAgaWYgKHRhcmdldCA9PSBudWxsKSB7CiAgICAgICAgICAgIHRhcmdldCA9IGNhbmRpZGF0ZTsKICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ICE9IGNhbmRpZGF0ZSkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0YXJnZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc1NldCBnZXRTdWJ0eXBlc09mKENsYXNzIGNsYXNzXykgewogICAgaWYgKGludmFsaWRhdGVkKSB0aHJvdyAiVGhpcyBkYXRhc3RydWN0dXJlIGhhcyBiZWVuIGludmFsaWRhdGVkIjsKICAgIFNldDxDbGFzcz4gcmVzdWx0ID0gbmV3IFNldDxDbGFzcz4oKTsKICAgIFVpbnQzMkxpc3QgbGlzdCA9IF9pbmZvTWFwW2NsYXNzX10uc3VidHlwZUludGVydmFsTGlzdDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMikgewogICAgICBpbnQgZnJvbSA9IGxpc3RbaV07CiAgICAgIGludCB0byA9IGxpc3RbaSArIDFdOwogICAgICBmb3IgKGludCBqID0gZnJvbTsgaiA8IHRvOyBqKyspIHsKICAgICAgICByZXN1bHQuYWRkKF9jbGFzc2VzQnlUb3BEb3duSW5kZXhbal0pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IENsYXNzU2V0KHJlc3VsdCk7CiAgfQp9CgovLy8gSW1wbGVtZW50YXRpb24gb2YgW0NsYXNzSGllcmFyY2h5XSBmb3IgY2xvc2VkIHdvcmxkLgpjbGFzcyBDbG9zZWRXb3JsZENsYXNzSGllcmFyY2h5IGltcGxlbWVudHMgQ2xhc3NIaWVyYXJjaHkgewogIEhhbmRsZUFtYmlndW91c1N1cGVydHlwZXMgX29uQW1iaWd1b3VzU3VwZXJ0eXBlczsKICBIYW5kbGVBbWJpZ3VvdXNTdXBlcnR5cGVzIF9vbkFtYmlndW91c1N1cGVydHlwZXNOb3RXcmFwcGVkOwogIE1peGluSW5mZXJyZXIgbWl4aW5JbmZlcnJlcjsKCiAgdm9pZCBzZXQgb25BbWJpZ3VvdXNTdXBlcnR5cGVzKAogICAgICBIYW5kbGVBbWJpZ3VvdXNTdXBlcnR5cGVzIG9uQW1iaWd1b3VzU3VwZXJ0eXBlcykgewogICAgX29uQW1iaWd1b3VzU3VwZXJ0eXBlc05vdFdyYXBwZWQgPSBvbkFtYmlndW91c1N1cGVydHlwZXM7CiAgICBfb25BbWJpZ3VvdXNTdXBlcnR5cGVzID0gKENsYXNzIGNsYXNzXywgU3VwZXJ0eXBlIGEsIFN1cGVydHlwZSBiKSB7CiAgICAgIG9uQW1iaWd1b3VzU3VwZXJ0eXBlcyhjbGFzc18sIGEsIGIpOwogICAgICBMaXN0PFN1cGVydHlwZT4gcmVjb3JkZWQgPSBfcmVjb3JkZWRBbWJpZ3VvdXNTdXBlcnR5cGVzW2NsYXNzX107CiAgICAgIGlmIChyZWNvcmRlZCA9PSBudWxsKSB7CiAgICAgICAgcmVjb3JkZWQgPSBuZXcgTGlzdDxTdXBlcnR5cGU+KCk7CiAgICAgICAgX3JlY29yZGVkQW1iaWd1b3VzU3VwZXJ0eXBlc1tjbGFzc19dID0gcmVjb3JkZWQ7CiAgICAgIH0KICAgICAgcmVjb3JkZWQuYWRkKGEpOwogICAgICByZWNvcmRlZC5hZGQoYik7CiAgICB9OwogIH0KCiAgLy8vIFRoZSBpbnNlcnQgb3JkZXIgaXMgaW1wb3J0YW50LgogIGZpbmFsIE1hcDxDbGFzcywgX0NsYXNzSW5mbz4gX2luZm9NYXAgPQogICAgICBuZXcgTGlua2VkSGFzaE1hcDxDbGFzcywgX0NsYXNzSW5mbz4oKTsKCiAgX0NsYXNzSW5mbyBpbmZvRm9yKENsYXNzIGMpIHsKICAgIF9DbGFzc0luZm8gaW5mbyA9IF9pbmZvTWFwW2NdOwogICAgaW5mbz8udXNlZCA9IHRydWU7CiAgICByZXR1cm4gaW5mbzsKICB9CgogIExpc3Q8Q2xhc3M+IGdldFVzZWRDbGFzc2VzKCkgewogICAgTGlzdDxDbGFzcz4gcmVzdWx0ID0gbmV3IExpc3Q8Q2xhc3M+KCk7CiAgICBmb3IgKF9DbGFzc0luZm8gY2xhc3NJbmZvIGluIF9pbmZvTWFwLnZhbHVlcykgewogICAgICBpZiAoY2xhc3NJbmZvLnVzZWQpIHsKICAgICAgICByZXN1bHQuYWRkKGNsYXNzSW5mby5jbGFzc05vZGUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCByZXNldFVzZWQoKSB7CiAgICBmb3IgKF9DbGFzc0luZm8gY2xhc3NJbmZvIGluIF9pbmZvTWFwLnZhbHVlcykgewogICAgICBjbGFzc0luZm8udXNlZCA9IGZhbHNlOwogICAgfQogICAgYWxsQmV0c09mZiA9IGZhbHNlOwogIH0KCiAgZmluYWwgU2V0PExpYnJhcnk+IGtub3duTGlicmFyaWVzID0gbmV3IFNldDxMaWJyYXJ5PigpOwogIGJvb2wgYWxsQmV0c09mZiA9IGZhbHNlOwoKICAvLy8gUmVjb3JkZWQgZXJyb3JzIGZvciBjbGFzc2VzIHdlIGhhdmUgYWxyZWFkeSBjYWxjdWxhdGVkIHRoZSBjbGFzcyBoaWVyYXJjaHkKICAvLy8gZm9yLCBidXQgd2lsbCBoYXZlIHRvIGJlIHJlaXNzdWVkIHdoZW4gcmUtdXNpbmcgdGhlIGNhbGN1bGF0aW9uLgogIGZpbmFsIE1hcDxDbGFzcywgTGlzdDxTdXBlcnR5cGU+PiBfcmVjb3JkZWRBbWJpZ3VvdXNTdXBlcnR5cGVzID0KICAgICAgbmV3IExpbmtlZEhhc2hNYXA8Q2xhc3MsIExpc3Q8U3VwZXJ0eXBlPj4oKTsKCiAgSXRlcmFibGU8Q2xhc3M+IGdldCBjbGFzc2VzIHsKICAgIGFsbEJldHNPZmYgPSB0cnVlOwogICAgcmV0dXJuIF9pbmZvTWFwLmtleXM7CiAgfQoKICBpbnQgZ2V0IG51bWJlck9mQ2xhc3NlcyB7CiAgICBhbGxCZXRzT2ZmID0gdHJ1ZTsKICAgIHJldHVybiBfaW5mb01hcC5sZW5ndGg7CiAgfQoKICBfQ2xvc2VkV29ybGRDbGFzc0hpZXJhcmNoeVN1YnR5cGVzIF9jYWNoZWRDbGFzc0hpZXJhcmNoeVN1YnR5cGVzOwoKICBDbG9zZWRXb3JsZENsYXNzSGllcmFyY2h5Ll9pbnRlcm5hbCgKICAgICAgSGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlcyBvbkFtYmlndW91c1N1cGVydHlwZXMsIHRoaXMubWl4aW5JbmZlcnJlcikgewogICAgdGhpcy5vbkFtYmlndW91c1N1cGVydHlwZXMgPSBvbkFtYmlndW91c1N1cGVydHlwZXM7CiAgfQoKICBDbGFzc0hpZXJhcmNoeVN1YnR5cGVzIGNvbXB1dGVTdWJ0eXBlc0luZm9ybWF0aW9uKCkgewogICAgX2NhY2hlZENsYXNzSGllcmFyY2h5U3VidHlwZXMgPz89CiAgICAgICAgbmV3IF9DbG9zZWRXb3JsZENsYXNzSGllcmFyY2h5U3VidHlwZXModGhpcyk7CiAgICByZXR1cm4gX2NhY2hlZENsYXNzSGllcmFyY2h5U3VidHlwZXM7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDbGFzcz4gZ2V0T3JkZXJlZENsYXNzZXMoSXRlcmFibGU8Q2xhc3M+IHVub3JkZXJlZCkgewogICAgdmFyIHVub3JkZXJlZFNldCA9IHVub3JkZXJlZC50b1NldCgpOwogICAgZm9yIChDbGFzcyBjIGluIHVub3JkZXJlZCkgX2luZm9NYXBbY10/LnVzZWQgPSB0cnVlOwogICAgcmV0dXJuIF9pbmZvTWFwLmtleXMud2hlcmUodW5vcmRlcmVkU2V0LmNvbnRhaW5zKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNTdWJjbGFzc09mKENsYXNzIHN1YmNsYXNzLCBDbGFzcyBzdXBlcmNsYXNzKSB7CiAgICBpZiAoaWRlbnRpY2FsKHN1YmNsYXNzLCBzdXBlcmNsYXNzKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gaW5mb0ZvcihzdWJjbGFzcykuaXNTdWJjbGFzc09mKGluZm9Gb3Ioc3VwZXJjbGFzcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1N1YnR5cGVPZihDbGFzcyBzdWJ0eXBlLCBDbGFzcyBzdXBlcmNsYXNzKSB7CiAgICBpZiAoaWRlbnRpY2FsKHN1YnR5cGUsIHN1cGVyY2xhc3MpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBpbmZvRm9yKHN1YnR5cGUpLmlzU3VidHlwZU9mKGluZm9Gb3Ioc3VwZXJjbGFzcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1VzZWRBc01peGluKENsYXNzIGNsYXNzXykgewogICAgcmV0dXJuIGluZm9Gb3IoY2xhc3NfKS5kaXJlY3RNaXhlcnMuaXNOb3RFbXB0eTsKICB9CgogIExpc3Q8X0NsYXNzSW5mbz4gX2dldFJhbmtlZFN1cGVyY2xhc3NJbmZvcyhfQ2xhc3NJbmZvIGluZm8pIHsKICAgIGlmIChpbmZvLmxlYXN0VXBwZXJCb3VuZEluZm9zICE9IG51bGwpIHJldHVybiBpbmZvLmxlYXN0VXBwZXJCb3VuZEluZm9zOwogICAgdmFyIGhlYXAgPSBuZXcgX0x1YkhlYXAoKS4uYWRkKGluZm8pOwogICAgdmFyIGNoYWluID0gPF9DbGFzc0luZm8+W107CiAgICBpbmZvLmxlYXN0VXBwZXJCb3VuZEluZm9zID0gY2hhaW47CiAgICBfQ2xhc3NJbmZvIGxhc3RJbmZvID0gbnVsbDsKICAgIHdoaWxlIChoZWFwLmlzTm90RW1wdHkpIHsKICAgICAgdmFyIG5leHRJbmZvID0gaGVhcC5yZW1vdmUoKTsKICAgICAgaWYgKGlkZW50aWNhbChuZXh0SW5mbywgbGFzdEluZm8pKSBjb250aW51ZTsKICAgICAgY2hhaW4uYWRkKG5leHRJbmZvKTsKICAgICAgbGFzdEluZm8gPSBuZXh0SW5mbzsKICAgICAgdmFyIGNsYXNzTm9kZSA9IG5leHRJbmZvLmNsYXNzTm9kZTsKICAgICAgdm9pZCBhZGRUb0hlYXAoU3VwZXJ0eXBlIHN1cGVydHlwZSkgewogICAgICAgIGhlYXAuYWRkKGluZm9Gb3Ioc3VwZXJ0eXBlLmNsYXNzTm9kZSkpOwogICAgICB9CgogICAgICBpZiAoY2xhc3NOb2RlLnN1cGVydHlwZSAhPSBudWxsKSBhZGRUb0hlYXAoY2xhc3NOb2RlLnN1cGVydHlwZSk7CiAgICAgIGlmIChjbGFzc05vZGUubWl4ZWRJblR5cGUgIT0gbnVsbCkgYWRkVG9IZWFwKGNsYXNzTm9kZS5taXhlZEluVHlwZSk7CiAgICAgIGNsYXNzTm9kZS5pbXBsZW1lbnRlZFR5cGVzLmZvckVhY2goYWRkVG9IZWFwKTsKICAgIH0KICAgIHJldHVybiBjaGFpbjsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0TGVnYWN5TGVhc3RVcHBlckJvdW5kKAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUxLCBJbnRlcmZhY2VUeXBlIHR5cGUyKSB7CiAgICAvLyBUaGUgYWxnb3JpdGhtIGlzOiBmaXJzdCB3ZSBjb21wdXRlIGEgbGlzdCBvZiBzdXBlcmNsYXNzZXMgZm9yIGJvdGggdHlwZXMsCiAgICAvLyBvcmRlcmVkIGZyb20gZ3JlYXRlc3QgdG8gbGVhc3QgZGVwdGgsIGFuZCBvcmRlcmVkIGJ5IHRvcG9sb2dpY2FsIHNvcnQKICAgIC8vIGluZGV4IHdpdGhpbiBlYWNoIGRlcHRoLiAgRHVlIHRvIHRoZSBzb3J0IG9yZGVyLCB3ZSBjYW4gZmluZCB0aGUKICAgIC8vIGludGVyc2VjdGlvbiBvZiB0aGVzZSBsaXN0cyBieSBhIHNpbXBsZSB3YWxrLgogICAgLy8KICAgIC8vIFRoZW4sIGZvciBlYWNoIGNsYXNzIGluIHRoZSBpbnRlcnNlY3Rpb24sIGRldGVybWluZSB0aGUgZXhhY3QgdHlwZSB0aGF0CiAgICAvLyBpcyBpbXBsZW1lbnRlZCBieSB0eXBlMSBhbmQgdHlwZTIuICBJZiB0aGUgdHlwZXMgbWF0Y2gsIHRoYXQgdHlwZSBpcyBhCiAgICAvLyBjYW5kaWRhdGUgKGl0J3MgYSBtZW1iZXIgb2YgU19uKS4gIEFzIHNvb24gYXMgd2UgZmluZCBhIGNhbmRpZGF0ZSB3aGljaAogICAgLy8gaXMgdW5pcXVlIGZvciBpdHMgZGVwdGgsIHdlIHJldHVybiBpdC4KICAgIC8vCiAgICAvLyBBcyBhbiBvcHRpbWl6YXRpb24sIGlmIHRoZSBjbGFzcyBmb3IgSSBpcyBhIHN1YnR5cGUgb2YgdGhlIGNsYXNzIGZvciBKLAogICAgLy8gdGhlbiB3ZSBrbm93IHRoYXQgdGhlIGxpc3Qgb2Ygc3VwZXJjbGFzc2VzIG9mIEogaXMgYSBzdWJzZXQgb2YgdGhlIGxpc3QKICAgIC8vIG9mIHN1cGVyY2xhc3NlcyBmb3IgSTsgdGhlcmVmb3JlIGl0IGlzIHN1ZmZpY2llbnQgdG8gY29tcHV0ZSBqdXN0IHRoZQogICAgLy8gbGlzdCBvZiBzdXBlcmNsYXNzZXMgZm9yIEouICBUbyBhdm9pZCBjb21wbGljYXRpbmcgdGhlIGNvZGUgYmVsb3cgKHdoaWNoCiAgICAvLyBpbnRlcnNlY3RzIHRoZSB0d28gbGlzdHMpLCB3ZSBzZXQgYm90aCBsaXN0cyBlcXVhbCB0byB0aGUgbGlzdCBvZgogICAgLy8gc3VwZXJjbGFzc2VzIGZvciBKLiAgQW5kIHZpY2UgdmVyc2Egd2l0aCB0aGUgcm9sZSBvZiBJIGFuZCBKIHN3YXBwZWQuCgogICAgLy8gQ29tcHV0ZSB0aGUgbGlzdCBvZiBzdXBlcmNsYXNzZXMgZm9yIGJvdGggdHlwZXMsIHdpdGggdGhlIGFib3ZlCiAgICAvLyBvcHRpbWl6YXRpb24uCiAgICBfQ2xhc3NJbmZvIGluZm8xID0gaW5mb0Zvcih0eXBlMS5jbGFzc05vZGUpOwogICAgX0NsYXNzSW5mbyBpbmZvMiA9IGluZm9Gb3IodHlwZTIuY2xhc3NOb2RlKTsKICAgIExpc3Q8X0NsYXNzSW5mbz4gY2xhc3NlczE7CiAgICBMaXN0PF9DbGFzc0luZm8+IGNsYXNzZXMyOwogICAgaWYgKGlkZW50aWNhbChpbmZvMSwgaW5mbzIpIHx8IGluZm8xLmlzU3VidHlwZU9mKGluZm8yKSkgewogICAgICBjbGFzc2VzMSA9IGNsYXNzZXMyID0gX2dldFJhbmtlZFN1cGVyY2xhc3NJbmZvcyhpbmZvMik7CiAgICB9IGVsc2UgaWYgKGluZm8yLmlzU3VidHlwZU9mKGluZm8xKSkgewogICAgICBjbGFzc2VzMSA9IGNsYXNzZXMyID0gX2dldFJhbmtlZFN1cGVyY2xhc3NJbmZvcyhpbmZvMSk7CiAgICB9IGVsc2UgewogICAgICBjbGFzc2VzMSA9IF9nZXRSYW5rZWRTdXBlcmNsYXNzSW5mb3MoaW5mbzEpOwogICAgICBjbGFzc2VzMiA9IF9nZXRSYW5rZWRTdXBlcmNsYXNzSW5mb3MoaW5mbzIpOwogICAgfQoKICAgIC8vIFdhbGsgdGhlIGxpc3RzIGZpbmRpbmcgdGhlaXIgaW50ZXJzZWN0aW9uLCBsb29raW5nIGZvciBhIGRlcHRoIHRoYXQgaGFzIGEKICAgIC8vIHNpbmdsZSBjYW5kaWRhdGUuCiAgICBpbnQgaTEgPSAwOwogICAgaW50IGkyID0gMDsKICAgIEludGVyZmFjZVR5cGUgY2FuZGlkYXRlID0gbnVsbDsKICAgIGludCBjdXJyZW50RGVwdGggPSAtMTsKICAgIGludCBudW1DYW5kaWRhdGVzQXRUaGlzRGVwdGggPSAwOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgX0NsYXNzSW5mbyBuZXh0ID0gY2xhc3NlczFbaTFdOwogICAgICBfQ2xhc3NJbmZvIG5leHQyID0gY2xhc3NlczJbaTJdOwogICAgICBpZiAoIWlkZW50aWNhbChuZXh0LCBuZXh0MikpIHsKICAgICAgICBpZiAoX0x1YkhlYXAuc29ydHNCZWZvcmVTdGF0aWMobmV4dCwgbmV4dDIpKSB7CiAgICAgICAgICArK2kxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICArK2kyOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICArK2kyOwogICAgICArK2kxOwogICAgICBpZiAobmV4dC5kZXB0aCAhPSBjdXJyZW50RGVwdGgpIHsKICAgICAgICBpZiAobnVtQ2FuZGlkYXRlc0F0VGhpc0RlcHRoID09IDEpIHJldHVybiBjYW5kaWRhdGU7CiAgICAgICAgY3VycmVudERlcHRoID0gbmV4dC5kZXB0aDsKICAgICAgICBudW1DYW5kaWRhdGVzQXRUaGlzRGVwdGggPSAwOwogICAgICAgIGNhbmRpZGF0ZSA9IG51bGw7CiAgICAgIH0gZWxzZSBpZiAobnVtQ2FuZGlkYXRlc0F0VGhpc0RlcHRoID4gMSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICAvLyBGb3IgZWFjaCBjbGFzcyBpbiB0aGUgaW50ZXJzZWN0aW9uLCBmaW5kIHRoZSBleGFjdCB0eXBlIHRoYXQgaXMKICAgICAgLy8gaW1wbGVtZW50ZWQgYnkgdHlwZTEgYW5kIHR5cGUyLiAgSWYgdGhleSBtYXRjaCwgaXQncyBhIGNhbmRpZGF0ZS4KICAgICAgLy8KICAgICAgLy8gVHdvIGFkZGl0aW9uYWwgb3B0aW1pemF0aW9uczoKICAgICAgLy8KICAgICAgLy8gLSBJZiB0aGlzIGNsYXNzIGxhY2tzIHR5cGUgcGFyYW1ldGVycywgd2Uga25vdyB0aGVyZSBpcyBhIG1hdGNoIHdpdGhvdXQKICAgICAgLy8gICBuZWVkaW5nIHRvIHN1YnN0aXR1dGUuCiAgICAgIC8vCiAgICAgIC8vIC0gSWYgdGhlIGRlcHRoIGlzIDAsIHdlIGhhdmUgcmVhY2hlZCBPYmplY3QsIHNvIHdlIGNhbiByZXR1cm4gaXQKICAgICAgLy8gICBpbW1lZGlhdGVseS4gIFNpbmNlIGFsbCBpbnRlcmZhY2UgdHlwZXMgYXJlIHN1YnR5cGVzIG9mIE9iamVjdCwgdGhpcwogICAgICAvLyAgIGVuc3VyZXMgdGhlIGxvb3AgdGVybWluYXRlcy4KICAgICAgaWYgKG5leHQuY2xhc3NOb2RlLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgICBjYW5kaWRhdGUgPSBuZXh0LmNsYXNzTm9kZS5yYXdUeXBlOwogICAgICAgIGlmIChjdXJyZW50RGVwdGggPT0gMCkgcmV0dXJuIGNhbmRpZGF0ZTsKICAgICAgICArK251bUNhbmRpZGF0ZXNBdFRoaXNEZXB0aDsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgc3VwZXJUeXBlMSA9IGlkZW50aWNhbChpbmZvMSwgbmV4dCkKICAgICAgICAgICAgPyB0eXBlMQogICAgICAgICAgICA6IFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZSh0eXBlMSkuc3Vic3RpdHV0ZVR5cGUoCiAgICAgICAgICAgICAgICBpbmZvMS5nZW5lcmljU3VwZXJUeXBlc1tuZXh0LmNsYXNzTm9kZV0uZmlyc3QuYXNJbnRlcmZhY2VUeXBlKTsKICAgICAgICB2YXIgc3VwZXJUeXBlMiA9IGlkZW50aWNhbChpbmZvMiwgbmV4dCkKICAgICAgICAgICAgPyB0eXBlMgogICAgICAgICAgICA6IFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZSh0eXBlMikuc3Vic3RpdHV0ZVR5cGUoCiAgICAgICAgICAgICAgICBpbmZvMi5nZW5lcmljU3VwZXJUeXBlc1tuZXh0LmNsYXNzTm9kZV0uZmlyc3QuYXNJbnRlcmZhY2VUeXBlKTsKICAgICAgICBpZiAoc3VwZXJUeXBlMSA9PSBzdXBlclR5cGUyKSB7CiAgICAgICAgICBjYW5kaWRhdGUgPSBzdXBlclR5cGUxOwogICAgICAgICAgKytudW1DYW5kaWRhdGVzQXRUaGlzRGVwdGg7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBTdXBlcnR5cGUgZ2V0Q2xhc3NBc0luc3RhbmNlT2YoQ2xhc3MgY2xhc3NfLCBDbGFzcyBzdXBlcmNsYXNzKSB7CiAgICBpZiAoaWRlbnRpY2FsKGNsYXNzXywgc3VwZXJjbGFzcykpIHJldHVybiBjbGFzc18uYXNUaGlzU3VwZXJ0eXBlOwogICAgX0NsYXNzSW5mbyBpbmZvID0gaW5mb0ZvcihjbGFzc18pOwogICAgaWYgKGluZm8gPT0gbnVsbCkgewogICAgICB0aHJvdyAiJHtjbGFzc18uZmlsZVVyaX06IE5vIGNsYXNzIGluZm8gZm9yICR7Y2xhc3NfLm5hbWV9IjsKICAgIH0KICAgIF9DbGFzc0luZm8gc3VwZXJJbmZvID0gaW5mb0ZvcihzdXBlcmNsYXNzKTsKICAgIGlmIChzdXBlckluZm8gPT0gbnVsbCkgewogICAgICB0aHJvdyAiJHtzdXBlcmNsYXNzLmZpbGVVcml9OiBObyBjbGFzcyBpbmZvIGZvciAke3N1cGVyY2xhc3MubmFtZX0iOwogICAgfQogICAgaWYgKCFpbmZvLmlzU3VidHlwZU9mKHN1cGVySW5mbykpIHJldHVybiBudWxsOwogICAgaWYgKHN1cGVyY2xhc3MudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgcmV0dXJuIHN1cGVyY2xhc3MuYXNSYXdTdXBlcnR5cGU7CiAgICByZXR1cm4gaW5mby5nZW5lcmljU3VwZXJUeXBlc1tzdXBlcmNsYXNzXT8uZmlyc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldFR5cGVBc0luc3RhbmNlT2YoSW50ZXJmYWNlVHlwZSB0eXBlLCBDbGFzcyBzdXBlcmNsYXNzKSB7CiAgICBTdXBlcnR5cGUgY2FzdGVkVHlwZSA9IGdldENsYXNzQXNJbnN0YW5jZU9mKHR5cGUuY2xhc3NOb2RlLCBzdXBlcmNsYXNzKTsKICAgIGlmIChjYXN0ZWRUeXBlID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZSh0eXBlKQogICAgICAgIC5zdWJzdGl0dXRlVHlwZShjYXN0ZWRUeXBlLmFzSW50ZXJmYWNlVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXIgZ2V0RGlzcGF0Y2hUYXJnZXQoQ2xhc3MgY2xhc3NfLCBOYW1lIG5hbWUsIHtib29sIHNldHRlcjogZmFsc2V9KSB7CiAgICBfQ2xhc3NJbmZvIGluZm8gPSBpbmZvRm9yKGNsYXNzXyk7CiAgICBMaXN0PE1lbWJlcj4gbGlzdCA9CiAgICAgICAgc2V0dGVyID8gaW5mby5pbXBsZW1lbnRlZFNldHRlcnMgOiBpbmZvLmltcGxlbWVudGVkR2V0dGVyc0FuZENhbGxzOwogICAgcmV0dXJuIENsYXNzSGllcmFyY2h5LmZpbmRNZW1iZXJCeU5hbWUobGlzdCwgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PE1lbWJlcj4gZ2V0RGlzcGF0Y2hUYXJnZXRzKENsYXNzIGNsYXNzXywge2Jvb2wgc2V0dGVyczogZmFsc2V9KSB7CiAgICBfQ2xhc3NJbmZvIGluZm8gPSBpbmZvRm9yKGNsYXNzXyk7CiAgICByZXR1cm4gc2V0dGVycyA/IGluZm8uaW1wbGVtZW50ZWRTZXR0ZXJzIDogaW5mby5pbXBsZW1lbnRlZEdldHRlcnNBbmRDYWxsczsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlciBnZXRJbnRlcmZhY2VNZW1iZXIoQ2xhc3MgY2xhc3NfLCBOYW1lIG5hbWUsIHtib29sIHNldHRlcjogZmFsc2V9KSB7CiAgICBMaXN0PE1lbWJlcj4gbGlzdCA9IGdldEludGVyZmFjZU1lbWJlcnMoY2xhc3NfLCBzZXR0ZXJzOiBzZXR0ZXIpOwogICAgcmV0dXJuIENsYXNzSGllcmFyY2h5LmZpbmRNZW1iZXJCeU5hbWUobGlzdCwgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PE1lbWJlcj4gZ2V0SW50ZXJmYWNlTWVtYmVycyhDbGFzcyBjbGFzc18sIHtib29sIHNldHRlcnM6IGZhbHNlfSkgewogICAgcmV0dXJuIF9idWlsZEludGVyZmFjZU1lbWJlcnMoY2xhc3NfLCBpbmZvRm9yKGNsYXNzXyksIHNldHRlcnM6IHNldHRlcnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxNZW1iZXI+IGdldERlY2xhcmVkTWVtYmVycyhDbGFzcyBjbGFzc18sIHtib29sIHNldHRlcnM6IGZhbHNlfSkgewogICAgdmFyIGluZm8gPSBpbmZvRm9yKGNsYXNzXyk7CiAgICByZXR1cm4gc2V0dGVycyA/IGluZm8uZGVjbGFyZWRTZXR0ZXJzIDogaW5mby5kZWNsYXJlZEdldHRlcnNBbmRDYWxsczsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaE92ZXJyaWRlUGFpcihDbGFzcyBjbGFzc18sCiAgICAgIGNhbGxiYWNrKE1lbWJlciBkZWNsYXJlZE1lbWJlciwgTWVtYmVyIGludGVyZmFjZU1lbWJlciwgYm9vbCBpc1NldHRlciksCiAgICAgIHtib29sIGNyb3NzR2V0dGVyc1NldHRlcnM6IGZhbHNlfSkgewogICAgX0NsYXNzSW5mbyBpbmZvID0gaW5mb0ZvcihjbGFzc18pOwogICAgZm9yICh2YXIgc3VwZXJ0eXBlIGluIGNsYXNzXy5zdXBlcnMpIHsKICAgICAgdmFyIHN1cGVyY2xhc3MgPSBzdXBlcnR5cGUuY2xhc3NOb2RlOwogICAgICB2YXIgc3VwZXJHZXR0ZXJzID0gZ2V0SW50ZXJmYWNlTWVtYmVycyhzdXBlcmNsYXNzKTsKICAgICAgdmFyIHN1cGVyU2V0dGVycyA9IGdldEludGVyZmFjZU1lbWJlcnMoc3VwZXJjbGFzcywgc2V0dGVyczogdHJ1ZSk7CiAgICAgIF9yZXBvcnRPdmVycmlkZXMoaW5mby5kZWNsYXJlZEdldHRlcnNBbmRDYWxscywgc3VwZXJHZXR0ZXJzLCBjYWxsYmFjayk7CiAgICAgIF9yZXBvcnRPdmVycmlkZXMoaW5mby5kZWNsYXJlZFNldHRlcnMsIHN1cGVyU2V0dGVycywgY2FsbGJhY2ssCiAgICAgICAgICBpc1NldHRlcjogdHJ1ZSk7CiAgICB9CiAgfQoKICBzdGF0aWMgdm9pZCBfcmVwb3J0T3ZlcnJpZGVzKAogICAgICBMaXN0PE1lbWJlcj4gZGVjbGFyZWRMaXN0LAogICAgICBMaXN0PE1lbWJlcj4gaW5oZXJpdGVkTGlzdCwKICAgICAgY2FsbGJhY2soTWVtYmVyIGRlY2xhcmVkTWVtYmVyLCBNZW1iZXIgaW50ZXJmYWNlTWVtYmVyLCBib29sIGlzU2V0dGVyKSwKICAgICAge2Jvb2wgaXNTZXR0ZXI6IGZhbHNlfSkgewogICAgaW50IGkgPSAwLCBqID0gMDsKICAgIHdoaWxlIChpIDwgZGVjbGFyZWRMaXN0Lmxlbmd0aCAmJiBqIDwgaW5oZXJpdGVkTGlzdC5sZW5ndGgpIHsKICAgICAgTWVtYmVyIGRlY2xhcmVkID0gZGVjbGFyZWRMaXN0W2ldOwogICAgICBNZW1iZXIgaW5oZXJpdGVkID0gaW5oZXJpdGVkTGlzdFtqXTsKICAgICAgaW50IGNvbXBhcmlzb24gPSBDbGFzc0hpZXJhcmNoeS5jb21wYXJlTWVtYmVycyhkZWNsYXJlZCwgaW5oZXJpdGVkKTsKICAgICAgaWYgKGNvbXBhcmlzb24gPCAwKSB7CiAgICAgICAgKytpOwogICAgICB9IGVsc2UgaWYgKGNvbXBhcmlzb24gPiAwKSB7CiAgICAgICAgKytqOwogICAgICB9IGVsc2UgewogICAgICAgIGlmICghaWRlbnRpY2FsKGRlY2xhcmVkLCBpbmhlcml0ZWQpKSB7CiAgICAgICAgICBjYWxsYmFjayhkZWNsYXJlZCwgaW5oZXJpdGVkLCBpc1NldHRlcik7CiAgICAgICAgfQogICAgICAgIC8vIEEgZ2l2ZW4gZGVjbGFyZWQgbWVtYmVyIG1heSBvdmVycmlkZSBtdWx0aXBsZSBpbnRlcmZhY2UgbWVtYmVycywKICAgICAgICAvLyBzbyBvbmx5IG1vdmUgcGFzdCB0aGUgaW50ZXJmYWNlIG1lbWJlci4KICAgICAgICArK2o7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIExpc3Q8U3VwZXJ0eXBlPiBnZW5lcmljU3VwZXJ0eXBlc09mKENsYXNzIGNsYXNzXykgewogICAgZmluYWwgc3VwZXJ0eXBlcyA9IGluZm9Gb3IoY2xhc3NfKS5nZW5lcmljU3VwZXJUeXBlczsKICAgIGlmIChzdXBlcnR5cGVzID09IG51bGwpIHJldHVybiBjb25zdCA8U3VwZXJ0eXBlPltdOwogICAgLy8gTXVsdGlwbGUgc3VwZXJ0eXBlcyBjYW4gYXJpc2UgZnJvbSBhbWJpZ3VvdXMgc3VwZXJ0eXBlcy4gVGhlIGZpcnN0CiAgICAvLyBzdXBlcnR5cGUgaXMgdGhlIHJlYWwgb25lOyB0aGUgb3RoZXJzIGFyZSBwdXJlbHkgaW5mb3JtYXRpb25hbC4KICAgIHJldHVybiBzdXBlcnR5cGVzLnZhbHVlcy5tYXAoKHYpID0+IHYuZmlyc3QpLnRvTGlzdCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NIaWVyYXJjaHkgYXBwbHlUcmVlQ2hhbmdlcyhJdGVyYWJsZTxMaWJyYXJ5PiByZW1vdmVkTGlicmFyaWVzLAogICAgICBJdGVyYWJsZTxMaWJyYXJ5PiBlbnN1cmVLbm93bkxpYnJhcmllcywKICAgICAge0NvbXBvbmVudCByZWlzc3VlQW1iaWd1b3VzU3VwZXJ0eXBlc0Zvcn0pIHsKICAgIC8vIFJlbW92ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgcmVtb3ZlZCBjbGFzc2VzLgogICAgZm9yIChMaWJyYXJ5IGxpYiBpbiByZW1vdmVkTGlicmFyaWVzKSB7CiAgICAgIGlmICgha25vd25MaWJyYXJpZXMuY29udGFpbnMobGliKSkgY29udGludWU7CiAgICAgIGZvciAoQ2xhc3MgY2xhc3NfIGluIGxpYi5jbGFzc2VzKSB7CiAgICAgICAgX0NsYXNzSW5mbyBpbmZvID0gX2luZm9NYXBbY2xhc3NfXTsKICAgICAgICBpZiAoY2xhc3NfLnN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgICAgICBfaW5mb01hcFtjbGFzc18uc3VwZXJ0eXBlLmNsYXNzTm9kZV0/LmRpcmVjdEV4dGVuZGVycz8ucmVtb3ZlKGluZm8pOwogICAgICAgIH0KICAgICAgICBpZiAoY2xhc3NfLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgICAgIF9pbmZvTWFwW2NsYXNzXy5taXhlZEluVHlwZS5jbGFzc05vZGVdPy5kaXJlY3RNaXhlcnM/LnJlbW92ZShpbmZvKTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgc3VwZXJ0eXBlIGluIGNsYXNzXy5pbXBsZW1lbnRlZFR5cGVzKSB7CiAgICAgICAgICBfaW5mb01hcFtzdXBlcnR5cGUuY2xhc3NOb2RlXT8uZGlyZWN0SW1wbGVtZW50ZXJzPy5yZW1vdmUoaW5mbyk7CiAgICAgICAgfQoKICAgICAgICBfaW5mb01hcC5yZW1vdmUoY2xhc3NfKTsKICAgICAgICBfcmVjb3JkZWRBbWJpZ3VvdXNTdXBlcnR5cGVzLnJlbW92ZShjbGFzc18pOwogICAgICB9CiAgICAgIGtub3duTGlicmFyaWVzLnJlbW92ZShsaWIpOwogICAgfQoKICAgIC8vIElmIHdlIGhhdmUgYSBjYWNoZWQgY29tcHV0YXRpb24gb2Ygc3VidHlwZXMsIGludmFsaWRhdGUgaXQgYW5kIHN0b3AKICAgIC8vIGNhY2hpbmcgaXQuCiAgICBpZiAoX2NhY2hlZENsYXNzSGllcmFyY2h5U3VidHlwZXMgIT0gbnVsbCkgewogICAgICBfY2FjaGVkQ2xhc3NIaWVyYXJjaHlTdWJ0eXBlcy5pbnZhbGlkYXRlZCA9IHRydWU7CiAgICB9CgogICAgaWYgKF9yZWNvcmRlZEFtYmlndW91c1N1cGVydHlwZXMuaXNOb3RFbXB0eSAmJgogICAgICAgIHJlaXNzdWVBbWJpZ3VvdXNTdXBlcnR5cGVzRm9yICE9IG51bGwpIHsKICAgICAgU2V0PExpYnJhcnk+IGxpYnMgPQogICAgICAgICAgbmV3IFNldDxMaWJyYXJ5Pi5mcm9tKHJlaXNzdWVBbWJpZ3VvdXNTdXBlcnR5cGVzRm9yLmxpYnJhcmllcyk7CiAgICAgIGZvciAoQ2xhc3MgY2xhc3NfIGluIF9yZWNvcmRlZEFtYmlndW91c1N1cGVydHlwZXMua2V5cykgewogICAgICAgIGlmICghbGlicy5jb250YWlucyhjbGFzc18uZW5jbG9zaW5nTGlicmFyeSkpIGNvbnRpbnVlOwogICAgICAgIExpc3Q8U3VwZXJ0eXBlPiByZWNvcmRlZCA9IF9yZWNvcmRlZEFtYmlndW91c1N1cGVydHlwZXNbY2xhc3NfXTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlY29yZGVkLmxlbmd0aDsgaSArPSAyKSB7CiAgICAgICAgICBfb25BbWJpZ3VvdXNTdXBlcnR5cGVzTm90V3JhcHBlZCgKICAgICAgICAgICAgICBjbGFzc18sIHJlY29yZGVkW2ldLCByZWNvcmRlZFtpICsgMV0pOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIEFkZCB0aGUgbmV3IGNsYXNzZXMuCiAgICBMaXN0PENsYXNzPiBhZGRlZENsYXNzZXNTb3J0ZWQgPSBuZXcgTGlzdDxDbGFzcz4oKTsKICAgIGludCBleHBlY3RlZFN0YXJ0SW5kZXggPSBfdG9wU29ydEluZGV4OwogICAgZm9yIChMaWJyYXJ5IGxpYiBpbiBlbnN1cmVLbm93bkxpYnJhcmllcykgewogICAgICBpZiAoa25vd25MaWJyYXJpZXMuY29udGFpbnMobGliKSkgY29udGludWU7CiAgICAgIGZvciAoQ2xhc3MgY2xhc3NfIGluIGxpYi5jbGFzc2VzKSB7CiAgICAgICAgX3RvcG9sb2dpY2FsU29ydFZpc2l0KGNsYXNzXywgbmV3IFNldDxDbGFzcz4oKSwKICAgICAgICAgICAgb3JkZXJlZExpc3Q6IGFkZGVkQ2xhc3Nlc1NvcnRlZCk7CiAgICAgIH0KICAgICAga25vd25MaWJyYXJpZXMuYWRkKGxpYik7CiAgICB9CiAgICBfaW5pdGlhbGl6ZVRvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzKAogICAgICAgIGFkZGVkQ2xhc3Nlc1NvcnRlZCwgZXhwZWN0ZWRTdGFydEluZGV4KTsKCiAgICByZXR1cm4gdGhpczsKICB9CgogIEBvdmVycmlkZQogIENsYXNzSGllcmFyY2h5IGFwcGx5TWVtYmVyQ2hhbmdlcyhJdGVyYWJsZTxDbGFzcz4gY2xhc3NlcywKICAgICAge2Jvb2wgZmluZERlc2NlbmRhbnRzOiBmYWxzZX0pIHsKICAgIGlmIChjbGFzc2VzLmlzRW1wdHkpIHJldHVybiB0aGlzOwoKICAgIExpc3Q8X0NsYXNzSW5mbz4gaW5mb3MgPSBuZXcgTGlzdDxfQ2xhc3NJbmZvPigpOwogICAgaWYgKGZpbmREZXNjZW5kYW50cykgewogICAgICBTZXQ8X0NsYXNzSW5mbz4gcHJvY2Vzc2VkQ2xhc3NlcyA9IG5ldyBTZXQ8X0NsYXNzSW5mbz4oKTsKICAgICAgTGlzdDxfQ2xhc3NJbmZvPiB3b3JrbGlzdCA9IDxfQ2xhc3NJbmZvPltdOwogICAgICBmb3IgKENsYXNzIGNsYXNzXyBpbiBjbGFzc2VzKSB7CiAgICAgICAgX0NsYXNzSW5mbyBpbmZvID0gaW5mb0ZvcihjbGFzc18pOwogICAgICAgIHdvcmtsaXN0LmFkZChpbmZvKTsKICAgICAgfQoKICAgICAgd2hpbGUgKHdvcmtsaXN0LmlzTm90RW1wdHkpIHsKICAgICAgICBfQ2xhc3NJbmZvIGluZm8gPSB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgICAgaWYgKHByb2Nlc3NlZENsYXNzZXMuYWRkKGluZm8pKSB7CiAgICAgICAgICB3b3JrbGlzdC5hZGRBbGwoaW5mby5kaXJlY3RFeHRlbmRlcnMpOwogICAgICAgICAgd29ya2xpc3QuYWRkQWxsKGluZm8uZGlyZWN0SW1wbGVtZW50ZXJzKTsKICAgICAgICAgIHdvcmtsaXN0LmFkZEFsbChpbmZvLmRpcmVjdE1peGVycyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGluZm9zLmFkZEFsbChwcm9jZXNzZWRDbGFzc2VzKTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoQ2xhc3MgY2xhc3NfIGluIGNsYXNzZXMpIHsKICAgICAgICBfQ2xhc3NJbmZvIGluZm8gPSBpbmZvRm9yKGNsYXNzXyk7CiAgICAgICAgaW5mb3MuYWRkKGluZm8pOwogICAgICB9CiAgICB9CgogICAgaW5mb3Muc29ydCgoX0NsYXNzSW5mbyBhLCBfQ2xhc3NJbmZvIGIpIHsKICAgICAgcmV0dXJuIGEudG9wb2xvZ2ljYWxJbmRleCAtIGIudG9wb2xvZ2ljYWxJbmRleDsKICAgIH0pOwoKICAgIGZvciAoX0NsYXNzSW5mbyBpbmZvIGluIGluZm9zKSB7CiAgICAgIENsYXNzIGNsYXNzXyA9IGluZm8uY2xhc3NOb2RlOwogICAgICBfYnVpbGREZWNsYXJlZE1lbWJlcnMoY2xhc3NfLCBpbmZvKTsKICAgICAgX2J1aWxkSW1wbGVtZW50ZWRNZW1iZXJzKGNsYXNzXywgaW5mbyk7CiAgICAgIGluZm8uaW50ZXJmYWNlU2V0dGVycyA9IG51bGw7CiAgICAgIGluZm8uaW50ZXJmYWNlR2V0dGVyc0FuZENhbGxzID0gbnVsbDsKICAgICAgX2J1aWxkSW50ZXJmYWNlTWVtYmVycyhjbGFzc18sIGluZm8sIHNldHRlcnM6IHRydWUpOwogICAgICBfYnVpbGRJbnRlcmZhY2VNZW1iZXJzKGNsYXNzXywgaW5mbywgc2V0dGVyczogZmFsc2UpOwogICAgfQoKICAgIGFzc2VydChzYW5pdHlDaGVja0Fsc29Lbm93c1BhcmVudEFuZExpYnJhcnkoKSk7CgogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBib29sIHNhbml0eUNoZWNrQWxzb0tub3dzUGFyZW50QW5kTGlicmFyeSgpIHsKICAgIGZvciAoQ2xhc3MgYyBpbiBfaW5mb01hcC5rZXlzKSB7CiAgICAgIGlmICgha25vd25MaWJyYXJpZXMuY29udGFpbnMoYy5lbmNsb3NpbmdMaWJyYXJ5KSkgewogICAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJEaWRuJ3Qga25vdyBsaWJyYXJ5IG9mICRjIChmcm9tICR7Yy5maWxlVXJpfSkiKTsKICAgICAgfQogICAgICBpZiAoYy5zdXBlcnR5cGUgIT0gbnVsbCAmJiBfaW5mb01hcFtjLnN1cGVydHlwZS5jbGFzc05vZGVdID09IG51bGwpIHsKICAgICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiRGlkbid0IGtub3cgcGFyZW50IG9mICRjIChmcm9tICR7Yy5maWxlVXJpfSkiKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdXBlcnR5cGUgYXNJbnN0YW50aWF0aW9uT2YoU3VwZXJ0eXBlIHR5cGUsIENsYXNzIHN1cGVyY2xhc3MpIHsKICAgIC8vIFRoaXMgaXMgc2ltaWxhciB0byBnZXRUeXBlQXNJbnN0YW5jZU9mLCBleGNlcHQgdGhhdCBpdCBhc3N1bWVzIHRoYXQKICAgIC8vIHN1cGVyY2xhc3MgaXMgYSBnZW5lcmljIGNsYXNzLiAgSXQgdGh1cyBkb2VzIG5vdCByZWx5IG9uIGJlaW5nIGFibGUKICAgIC8vIHRvIGFuc3dlciBpc1N1YnR5cGVPZiBxdWVyaWVzIGFuZCBzbyBjYW4gYmUgdXNlZCBiZWZvcmUgd2UgaGF2ZSBidWlsdAogICAgLy8gdGhlIGludGVydmFscyBuZWVkZWQgZm9yIHRob3NlIHF1ZXJpZXMuCiAgICBhc3NlcnQoc3VwZXJjbGFzcy50eXBlUGFyYW1ldGVycy5pc05vdEVtcHR5KTsKICAgIGlmICh0eXBlLmNsYXNzTm9kZSA9PSBzdXBlcmNsYXNzKSB7CiAgICAgIHJldHVybiBzdXBlcmNsYXNzLmFzVGhpc1N1cGVydHlwZTsKICAgIH0KICAgIHZhciBtYXAgPSBpbmZvRm9yKHR5cGUuY2xhc3NOb2RlKT8uZ2VuZXJpY1N1cGVyVHlwZXM7CiAgICByZXR1cm4gbWFwID09IG51bGwgPyBudWxsIDogbWFwW3N1cGVyY2xhc3NdPy5maXJzdDsKICB9CgogIHZvaWQgX2luaXRpYWxpemUoTGlzdDxMaWJyYXJ5PiBsaWJyYXJpZXMpIHsKICAgIC8vIEJ1aWxkIHRoZSBjbGFzcyBvcmRlcmluZyBiYXNlZCBvbiBhIHRvcG9sb2dpY2FsIHNvcnQuCiAgICBmb3IgKHZhciBsaWJyYXJ5IGluIGxpYnJhcmllcykgewogICAgICBmb3IgKHZhciBjbGFzc05vZGUgaW4gbGlicmFyeS5jbGFzc2VzKSB7CiAgICAgICAgX3RvcG9sb2dpY2FsU29ydFZpc2l0KGNsYXNzTm9kZSwgbmV3IFNldDxDbGFzcz4oKSk7CiAgICAgIH0KICAgICAga25vd25MaWJyYXJpZXMuYWRkKGxpYnJhcnkpOwogICAgfQoKICAgIF9pbml0aWFsaXplVG9wb2xvZ2ljYWxseVNvcnRlZENsYXNzZXMoX2luZm9NYXAua2V5cywgMCk7CiAgfQoKICAvLy8gLSBCdWlsZCBpbmRleCBvZiBkaXJlY3QgY2hpbGRyZW4uCiAgLy8vIC0gQnVpbGQgbGlzdCBvZiBzdXBlciBjbGFzc2VzIGFuZCBzdXBlciB0eXBlcy4KICAvLy8gLSBJbmZlciBhbmQgcmVjb3JkIHN1cGVydHlwZXMgZm9yIHRoZSBjbGFzc2VzLgogIC8vLyAtIFJlY29yZCBpbnRlcmZhY2UgbWVtYmVycy4KICAvLy8gLSBQZXJmb3JtIHNvbWUgc2FuaXR5IGNoZWNraW5nLgogIC8vLyBEbyB0aGlzIGFmdGVyIHRoZSB0b3BvbG9naWNhbCBzb3J0IHNvIHRoYXQgc3VwZXIgdHlwZXMgYWx3YXlzIG9jY3VyCiAgLy8vIGJlZm9yZSBzdWJ0eXBlcy4KICB2b2lkIF9pbml0aWFsaXplVG9wb2xvZ2ljYWxseVNvcnRlZENsYXNzZXMoCiAgICAgIEl0ZXJhYmxlPENsYXNzPiBjbGFzc2VzLCBpbnQgZXhwZWN0ZWRTdGFydGluZ1RvcG9sb2dpY2FsSW5kZXgpIHsKICAgIGludCBpID0gZXhwZWN0ZWRTdGFydGluZ1RvcG9sb2dpY2FsSW5kZXg7CiAgICBmb3IgKENsYXNzIGNsYXNzXyBpbiBjbGFzc2VzKSB7CiAgICAgIF9DbGFzc0luZm8gaW5mbyA9IF9pbmZvTWFwW2NsYXNzX107CiAgICAgIGlmIChjbGFzc18uc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgICBfaW5mb01hcFtjbGFzc18uc3VwZXJ0eXBlLmNsYXNzTm9kZV0uZGlyZWN0RXh0ZW5kZXJzLmFkZChpbmZvKTsKICAgICAgfQogICAgICBpZiAoY2xhc3NfLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgICBfaW5mb01hcFtjbGFzc18ubWl4ZWRJblR5cGUuY2xhc3NOb2RlXS5kaXJlY3RNaXhlcnMuYWRkKGluZm8pOwogICAgICB9CiAgICAgIGZvciAodmFyIHN1cGVydHlwZSBpbiBjbGFzc18uaW1wbGVtZW50ZWRUeXBlcykgewogICAgICAgIF9pbmZvTWFwW3N1cGVydHlwZS5jbGFzc05vZGVdLmRpcmVjdEltcGxlbWVudGVycy5hZGQoaW5mbyk7CiAgICAgIH0KICAgICAgX2NvbGxlY3RTdXBlcnNGb3JDbGFzcyhjbGFzc18pOwoKICAgICAgaWYgKGNsYXNzXy5zdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICAgIF9yZWNvcmRTdXBlclR5cGVzKGluZm8sIGNsYXNzXy5zdXBlcnR5cGUpOwogICAgICB9CiAgICAgIGlmIChjbGFzc18ubWl4ZWRJblR5cGUgIT0gbnVsbCkgewogICAgICAgIG1peGluSW5mZXJyZXI/LmluZmVyKHRoaXMsIGNsYXNzXyk7CiAgICAgICAgX3JlY29yZFN1cGVyVHlwZXMoaW5mbywgY2xhc3NfLm1peGVkSW5UeXBlKTsKICAgICAgfQogICAgICBmb3IgKFN1cGVydHlwZSBzdXBlcnR5cGUgaW4gY2xhc3NfLmltcGxlbWVudGVkVHlwZXMpIHsKICAgICAgICBfcmVjb3JkU3VwZXJUeXBlcyhpbmZvLCBzdXBlcnR5cGUpOwogICAgICB9CgogICAgICBfYnVpbGRJbnRlcmZhY2VNZW1iZXJzKGNsYXNzXywgaW5mbywgc2V0dGVyczogdHJ1ZSk7CiAgICAgIF9idWlsZEludGVyZmFjZU1lbWJlcnMoY2xhc3NfLCBpbmZvLCBzZXR0ZXJzOiBmYWxzZSk7CgogICAgICBpZiAoaW5mbyA9PSBudWxsKSB7CiAgICAgICAgdGhyb3cgIk5vIGluZm8gZm9yICR7Y2xhc3NfLm5hbWV9IGZyb20gJHtjbGFzc18uZmlsZVVyaX0uIjsKICAgICAgfQogICAgICBpZiAoaW5mby50b3BvbG9naWNhbEluZGV4ICE9IGkpIHsKICAgICAgICB0aHJvdyAiVW5leHBlY3RlZCB0b3BvbG9naWNhbEluZGV4ICgke2luZm8udG9wb2xvZ2ljYWxJbmRleH0gIT0gJGkpICIKICAgICAgICAgICAgImZvciAke2NsYXNzXy5uYW1lfSBmcm9tICR7Y2xhc3NfLmZpbGVVcml9LiI7CiAgICAgIH0KICAgICAgaSsrOwogICAgfQogIH0KCiAgLy8vIFVwd2FyZHMgdHJhdmVyc2FsIG9mIHRoZSBjbGFzcyBoaWVyYXJjaHkgdGhhdCBvcmRlcnMgY2xhc3NlcyBzbyBzdXBlcgogIC8vLyB0eXBlcyBiZWZvcmUgdGhlaXIgc3VidHlwZXMuCiAgLy8vCiAgLy8vIFJldHVybnMgdGhlIGRlcHRoIG9mIHRoZSB2aXNpdGVkIGNsYXNzICh0aGUgbnVtYmVyIG9mIHN0ZXBzIGluIHRoZSBsb25nZXN0CiAgLy8vIGluaGVyaXRhbmNlIHBhdGggdG8gdGhlIHJvb3QgY2xhc3MpLgogIGludCBfdG9wU29ydEluZGV4ID0gMDsKICBpbnQgX3RvcG9sb2dpY2FsU29ydFZpc2l0KENsYXNzIGNsYXNzTm9kZSwgU2V0PENsYXNzPiBiZWluZ1Zpc2l0ZWQsCiAgICAgIHtMaXN0PENsYXNzPiBvcmRlcmVkTGlzdH0pIHsKICAgIHZhciBpbmZvID0gX2luZm9NYXBbY2xhc3NOb2RlXTsKICAgIGlmIChpbmZvICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGluZm8uZGVwdGg7CiAgICB9CgogICAgaWYgKCFiZWluZ1Zpc2l0ZWQuYWRkKGNsYXNzTm9kZSkpIHsKICAgICAgdGhyb3cgJ0N5Y2xpYyBpbmhlcml0YW5jZSBpbnZvbHZpbmcgJHtjbGFzc05vZGUubmFtZX0nOwogICAgfQoKICAgIGluZm8gPSBuZXcgX0NsYXNzSW5mbyhjbGFzc05vZGUpOwoKICAgIGludCBzdXBlckRlcHRoID0gLTE7CiAgICBpZiAoY2xhc3NOb2RlLnN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgIHN1cGVyRGVwdGggPSBtYXgoCiAgICAgICAgICBzdXBlckRlcHRoLAogICAgICAgICAgX3RvcG9sb2dpY2FsU29ydFZpc2l0KGNsYXNzTm9kZS5zdXBlcnR5cGUuY2xhc3NOb2RlLCBiZWluZ1Zpc2l0ZWQsCiAgICAgICAgICAgICAgb3JkZXJlZExpc3Q6IG9yZGVyZWRMaXN0KSk7CiAgICB9CiAgICBpZiAoY2xhc3NOb2RlLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgc3VwZXJEZXB0aCA9IG1heCgKICAgICAgICAgIHN1cGVyRGVwdGgsCiAgICAgICAgICBfdG9wb2xvZ2ljYWxTb3J0VmlzaXQoY2xhc3NOb2RlLm1peGVkSW5UeXBlLmNsYXNzTm9kZSwgYmVpbmdWaXNpdGVkLAogICAgICAgICAgICAgIG9yZGVyZWRMaXN0OiBvcmRlcmVkTGlzdCkpOwogICAgfQogICAgZm9yICh2YXIgc3VwZXJ0eXBlIGluIGNsYXNzTm9kZS5pbXBsZW1lbnRlZFR5cGVzKSB7CiAgICAgIHN1cGVyRGVwdGggPSBtYXgoCiAgICAgICAgICBzdXBlckRlcHRoLAogICAgICAgICAgX3RvcG9sb2dpY2FsU29ydFZpc2l0KHN1cGVydHlwZS5jbGFzc05vZGUsIGJlaW5nVmlzaXRlZCwKICAgICAgICAgICAgICBvcmRlcmVkTGlzdDogb3JkZXJlZExpc3QpKTsKICAgIH0KICAgIF9idWlsZERlY2xhcmVkTWVtYmVycyhjbGFzc05vZGUsIGluZm8pOwogICAgX2J1aWxkSW1wbGVtZW50ZWRNZW1iZXJzKGNsYXNzTm9kZSwgaW5mbyk7CiAgICBpbmZvLnRvcG9sb2dpY2FsSW5kZXggPSBfdG9wU29ydEluZGV4Kys7CgogICAgX2luZm9NYXBbY2xhc3NOb2RlXSA9IGluZm87CiAgICBvcmRlcmVkTGlzdD8uYWRkKGNsYXNzTm9kZSk7CiAgICBiZWluZ1Zpc2l0ZWQucmVtb3ZlKGNsYXNzTm9kZSk7CiAgICByZXR1cm4gaW5mby5kZXB0aCA9IHN1cGVyRGVwdGggKyAxOwogIH0KCiAgdm9pZCBfYnVpbGREZWNsYXJlZE1lbWJlcnMoQ2xhc3MgY2xhc3NOb2RlLCBfQ2xhc3NJbmZvIGluZm8pIHsKICAgIGlmIChjbGFzc05vZGUubWl4ZWRJblR5cGUgIT0gbnVsbCkgewogICAgICBfQ2xhc3NJbmZvIG1peGVkSW5mbyA9IF9pbmZvTWFwW2NsYXNzTm9kZS5taXhlZEluVHlwZS5jbGFzc05vZGVdOwoKICAgICAgTGlzdDxNZW1iZXI+IGRlY2xhcmVkR2V0dGVyc0FuZENhbGxzID0gPE1lbWJlcj5bXTsKICAgICAgZm9yIChNZW1iZXIgbWl4aW5NZW1iZXIgaW4gbWl4ZWRJbmZvLmRlY2xhcmVkR2V0dGVyc0FuZENhbGxzKSB7CiAgICAgICAgaWYgKG1peGluTWVtYmVyIGlzISBQcm9jZWR1cmUgfHwKICAgICAgICAgICAgKG1peGluTWVtYmVyIGlzIFByb2NlZHVyZSAmJgogICAgICAgICAgICAgICAgIW1peGluTWVtYmVyLmlzTm9TdWNoTWV0aG9kRm9yd2FyZGVyKSkgewogICAgICAgICAgZGVjbGFyZWRHZXR0ZXJzQW5kQ2FsbHMuYWRkKG1peGluTWVtYmVyKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIExpc3Q8TWVtYmVyPiBkZWNsYXJlZFNldHRlcnMgPSA8TWVtYmVyPltdOwogICAgICBmb3IgKE1lbWJlciBtaXhpbk1lbWJlciBpbiBtaXhlZEluZm8uZGVjbGFyZWRTZXR0ZXJzKSB7CiAgICAgICAgaWYgKG1peGluTWVtYmVyIGlzISBQcm9jZWR1cmUgfHwKICAgICAgICAgICAgKG1peGluTWVtYmVyIGlzIFByb2NlZHVyZSAmJgogICAgICAgICAgICAgICAgIW1peGluTWVtYmVyLmlzTm9TdWNoTWV0aG9kRm9yd2FyZGVyKSkgewogICAgICAgICAgZGVjbGFyZWRTZXR0ZXJzLmFkZChtaXhpbk1lbWJlcik7CiAgICAgICAgfQogICAgICB9CgogICAgICBpbmZvLmRlY2xhcmVkR2V0dGVyc0FuZENhbGxzID0gZGVjbGFyZWRHZXR0ZXJzQW5kQ2FsbHM7CiAgICAgIGluZm8uZGVjbGFyZWRTZXR0ZXJzID0gZGVjbGFyZWRTZXR0ZXJzOwogICAgfSBlbHNlIHsKICAgICAgdmFyIG1lbWJlcnMgPSBpbmZvLmRlY2xhcmVkR2V0dGVyc0FuZENhbGxzID0gPE1lbWJlcj5bXTsKICAgICAgdmFyIHNldHRlcnMgPSBpbmZvLmRlY2xhcmVkU2V0dGVycyA9IDxNZW1iZXI+W107CiAgICAgIGZvciAoUHJvY2VkdXJlIHByb2NlZHVyZSBpbiBjbGFzc05vZGUucHJvY2VkdXJlcykgewogICAgICAgIGlmIChwcm9jZWR1cmUuaXNTdGF0aWMpIGNvbnRpbnVlOwogICAgICAgIGlmIChwcm9jZWR1cmUua2luZCA9PSBQcm9jZWR1cmVLaW5kLlNldHRlcikgewogICAgICAgICAgc2V0dGVycy5hZGQocHJvY2VkdXJlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWVtYmVycy5hZGQocHJvY2VkdXJlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yIChGaWVsZCBmaWVsZCBpbiBjbGFzc05vZGUuZmllbGRzKSB7CiAgICAgICAgaWYgKGZpZWxkLmlzU3RhdGljKSBjb250aW51ZTsKICAgICAgICBpZiAoZmllbGQuaGFzSW1wbGljaXRHZXR0ZXIpIHsKICAgICAgICAgIG1lbWJlcnMuYWRkKGZpZWxkKTsKICAgICAgICB9CiAgICAgICAgaWYgKGZpZWxkLmhhc0ltcGxpY2l0U2V0dGVyKSB7CiAgICAgICAgICBzZXR0ZXJzLmFkZChmaWVsZCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG1lbWJlcnMuc29ydChDbGFzc0hpZXJhcmNoeS5jb21wYXJlTWVtYmVycyk7CiAgICAgIHNldHRlcnMuc29ydChDbGFzc0hpZXJhcmNoeS5jb21wYXJlTWVtYmVycyk7CiAgICB9CiAgfQoKICB2b2lkIF9idWlsZEltcGxlbWVudGVkTWVtYmVycyhDbGFzcyBjbGFzc05vZGUsIF9DbGFzc0luZm8gaW5mbykgewogICAgTGlzdDxNZW1iZXI+IGluaGVyaXRlZE1lbWJlcnM7CiAgICBMaXN0PE1lbWJlcj4gaW5oZXJpdGVkU2V0dGVyczsKICAgIGlmIChjbGFzc05vZGUuc3VwZXJ0eXBlID09IG51bGwpIHsKICAgICAgaW5oZXJpdGVkTWVtYmVycyA9IGluaGVyaXRlZFNldHRlcnMgPSBjb25zdCA8TWVtYmVyPltdOwogICAgfSBlbHNlIHsKICAgICAgX0NsYXNzSW5mbyBzdXBlckluZm8gPSBfaW5mb01hcFtjbGFzc05vZGUuc3VwZXJ0eXBlLmNsYXNzTm9kZV07CiAgICAgIGluaGVyaXRlZE1lbWJlcnMgPSBzdXBlckluZm8uaW1wbGVtZW50ZWRHZXR0ZXJzQW5kQ2FsbHM7CiAgICAgIGluaGVyaXRlZFNldHRlcnMgPSBzdXBlckluZm8uaW1wbGVtZW50ZWRTZXR0ZXJzOwogICAgfQogICAgaW5mby5pbXBsZW1lbnRlZEdldHRlcnNBbmRDYWxscyA9IF9pbmhlcml0TWVtYmVycygKICAgICAgICBpbmZvLmRlY2xhcmVkR2V0dGVyc0FuZENhbGxzLCBpbmhlcml0ZWRNZW1iZXJzLAogICAgICAgIHNraXBBYnN0cmFjdE1lbWJlcnM6IHRydWUpOwogICAgaW5mby5pbXBsZW1lbnRlZFNldHRlcnMgPSBfaW5oZXJpdE1lbWJlcnMoCiAgICAgICAgaW5mby5kZWNsYXJlZFNldHRlcnMsIGluaGVyaXRlZFNldHRlcnMsCiAgICAgICAgc2tpcEFic3RyYWN0TWVtYmVyczogdHJ1ZSk7CiAgfQoKICBMaXN0PE1lbWJlcj4gX2J1aWxkSW50ZXJmYWNlTWVtYmVycyhDbGFzcyBjbGFzc05vZGUsIF9DbGFzc0luZm8gaW5mbywKICAgICAge2Jvb2wgc2V0dGVyc30pIHsKICAgIGlmIChpbmZvID09IG51bGwpIHsKICAgICAgdGhyb3cgIiR7Y2xhc3NOb2RlLmZpbGVVcml9OiBObyBjbGFzcyBpbmZvIGZvciAke2NsYXNzTm9kZS5uYW1lfSI7CiAgICB9CiAgICBMaXN0PE1lbWJlcj4gbWVtYmVycyA9CiAgICAgICAgc2V0dGVycyA/IGluZm8uaW50ZXJmYWNlU2V0dGVycyA6IGluZm8uaW50ZXJmYWNlR2V0dGVyc0FuZENhbGxzOwogICAgaWYgKG1lbWJlcnMgIT0gbnVsbCkgcmV0dXJuIG1lbWJlcnM7CiAgICBMaXN0PE1lbWJlcj4gYWxsSW5oZXJpdGVkTWVtYmVycyA9IDxNZW1iZXI+W107CiAgICBMaXN0PE1lbWJlcj4gZGVjbGFyZWQgPQogICAgICAgIHNldHRlcnMgPyBpbmZvLmRlY2xhcmVkU2V0dGVycyA6IGluZm8uZGVjbGFyZWRHZXR0ZXJzQW5kQ2FsbHM7CiAgICB2b2lkIGluaGVyaXRGcm9tKFN1cGVydHlwZSB0eXBlKSB7CiAgICAgIGlmICh0eXBlID09IG51bGwpIHJldHVybjsKICAgICAgTGlzdDxNZW1iZXI+IGluaGVyaXRlZCA9IF9idWlsZEludGVyZmFjZU1lbWJlcnMoCiAgICAgICAgICB0eXBlLmNsYXNzTm9kZSwgX2luZm9NYXBbdHlwZS5jbGFzc05vZGVdLAogICAgICAgICAgc2V0dGVyczogc2V0dGVycyk7CiAgICAgIGluaGVyaXRlZCA9IF9nZXRVbnNoYWRvd2VkSW5oZXJpdGVkTWVtYmVycyhkZWNsYXJlZCwgaW5oZXJpdGVkKTsKICAgICAgYWxsSW5oZXJpdGVkTWVtYmVycyA9CiAgICAgICAgICBDbGFzc0hpZXJhcmNoeS5tZXJnZVNvcnRlZExpc3RzKGFsbEluaGVyaXRlZE1lbWJlcnMsIGluaGVyaXRlZCk7CiAgICB9CgogICAgaW5oZXJpdEZyb20oY2xhc3NOb2RlLnN1cGVydHlwZSk7CiAgICBpbmhlcml0RnJvbShjbGFzc05vZGUubWl4ZWRJblR5cGUpOwogICAgY2xhc3NOb2RlLmltcGxlbWVudGVkVHlwZXMuZm9yRWFjaChpbmhlcml0RnJvbSk7CiAgICBtZW1iZXJzID0gX2luaGVyaXRNZW1iZXJzKGRlY2xhcmVkLCBhbGxJbmhlcml0ZWRNZW1iZXJzKTsKICAgIGlmIChzZXR0ZXJzKSB7CiAgICAgIGluZm8uaW50ZXJmYWNlU2V0dGVycyA9IG1lbWJlcnM7CiAgICB9IGVsc2UgewogICAgICBpbmZvLmludGVyZmFjZUdldHRlcnNBbmRDYWxscyA9IG1lbWJlcnM7CiAgICB9CiAgICByZXR1cm4gbWVtYmVyczsKICB9CgogIC8vLyBDb21wdXRlcyB0aGUgbGlzdCBvZiBpbXBsZW1lbnRlZCBtZW1iZXJzLCBiYXNlZCBvbiB0aGUgZGVjbGFyZWQgaW5zdGFuY2UKICAvLy8gbWVtYmVycyBhbmQgaW5oZXJpdGVkIGluc3RhbmNlIG1lbWJlcnMuCiAgLy8vCiAgLy8vIEJvdGggbGlzdHMgbXVzdCBiZSBzb3J0ZWQgYnkgbmFtZSBiZWZvcmVoYW5kLgogIHN0YXRpYyBMaXN0PE1lbWJlcj4gX2luaGVyaXRNZW1iZXJzKAogICAgICBMaXN0PE1lbWJlcj4gZGVjbGFyZWQsIExpc3Q8TWVtYmVyPiBpbmhlcml0ZWQsCiAgICAgIHtib29sIHNraXBBYnN0cmFjdE1lbWJlcnM6IGZhbHNlfSkgewogICAgTGlzdDxNZW1iZXI+IHJlc3VsdCA9IDxNZW1iZXI+W10uLmxlbmd0aCA9CiAgICAgICAgZGVjbGFyZWQubGVuZ3RoICsgaW5oZXJpdGVkLmxlbmd0aDsKICAgIC8vIFNpbmNlIGJvdGggbGlzdHMgYXJlIHNvcnRlZCwgd2UgY2FuIGZ1c2UgdGhlbSBsaWtlIGluIG1lcmdlIHNvcnQuCiAgICBpbnQgc3RvcmVJbmRleCA9IDA7CiAgICBpbnQgaSA9IDAsIGogPSAwOwogICAgd2hpbGUgKGkgPCBkZWNsYXJlZC5sZW5ndGggJiYgaiA8IGluaGVyaXRlZC5sZW5ndGgpIHsKICAgICAgTWVtYmVyIGRlY2xhcmVkTWVtYmVyID0gZGVjbGFyZWRbaV07CiAgICAgIE1lbWJlciBpbmhlcml0ZWRNZW1iZXIgPSBpbmhlcml0ZWRbal07CiAgICAgIGlmIChza2lwQWJzdHJhY3RNZW1iZXJzICYmIGRlY2xhcmVkTWVtYmVyLmlzQWJzdHJhY3QpIHsKICAgICAgICArK2k7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKHNraXBBYnN0cmFjdE1lbWJlcnMgJiYgaW5oZXJpdGVkTWVtYmVyLmlzQWJzdHJhY3QpIHsKICAgICAgICArK2o7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaW50IGNvbXBhcmlzb24gPQogICAgICAgICAgQ2xhc3NIaWVyYXJjaHkuY29tcGFyZU1lbWJlcnMoZGVjbGFyZWRNZW1iZXIsIGluaGVyaXRlZE1lbWJlcik7CiAgICAgIGlmIChjb21wYXJpc29uIDwgMCkgewogICAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gZGVjbGFyZWRNZW1iZXI7CiAgICAgICAgKytpOwogICAgICB9IGVsc2UgaWYgKGNvbXBhcmlzb24gPiAwKSB7CiAgICAgICAgcmVzdWx0W3N0b3JlSW5kZXgrK10gPSBpbmhlcml0ZWRNZW1iZXI7CiAgICAgICAgKytqOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gZGVjbGFyZWRNZW1iZXI7CiAgICAgICAgKytpOwogICAgICAgICsrajsgLy8gTW92ZSBwYXN0IG92ZXJyaWRkZW4gbWVtYmVyLgogICAgICB9CiAgICB9CiAgICAvLyBPbmUgb2YgdGhlIHR3byBsaXN0cyBpcyBub3cgZXhoYXVzdGVkLCBjb3B5IG92ZXIgdGhlIHJlbWFpbnMuCiAgICB3aGlsZSAoaSA8IGRlY2xhcmVkLmxlbmd0aCkgewogICAgICBNZW1iZXIgZGVjbGFyZWRNZW1iZXIgPSBkZWNsYXJlZFtpKytdOwogICAgICBpZiAoc2tpcEFic3RyYWN0TWVtYmVycyAmJiBkZWNsYXJlZE1lbWJlci5pc0Fic3RyYWN0KSBjb250aW51ZTsKICAgICAgcmVzdWx0W3N0b3JlSW5kZXgrK10gPSBkZWNsYXJlZE1lbWJlcjsKICAgIH0KICAgIHdoaWxlIChqIDwgaW5oZXJpdGVkLmxlbmd0aCkgewogICAgICBNZW1iZXIgaW5oZXJpdGVkTWVtYmVyID0gaW5oZXJpdGVkW2orK107CiAgICAgIGlmIChza2lwQWJzdHJhY3RNZW1iZXJzICYmIGluaGVyaXRlZE1lbWJlci5pc0Fic3RyYWN0KSBjb250aW51ZTsKICAgICAgcmVzdWx0W3N0b3JlSW5kZXgrK10gPSBpbmhlcml0ZWRNZW1iZXI7CiAgICB9CiAgICByZXN1bHQubGVuZ3RoID0gc3RvcmVJbmRleDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgc3Vic2V0IG9mIG1lbWJlcnMgaW4gW2luaGVyaXRlZF0gZm9yIHdoaWNoIGEgbWVtYmVyIHdpdGggdGhlCiAgLy8vIHNhbWUgbmFtZSBkb2VzIG5vdCBvY2N1ciBpbiBbZGVjbGFyZWRdLgogIC8vLwogIC8vLyBUaGUgaW5wdXQgbGlzdHMgbXVzdCBiZSBzb3J0ZWQsIGFuZCB0aGUgcmV0dXJuZWQgbGlzdCBpcyBzb3J0ZWQuCiAgc3RhdGljIExpc3Q8TWVtYmVyPiBfZ2V0VW5zaGFkb3dlZEluaGVyaXRlZE1lbWJlcnMoCiAgICAgIExpc3Q8TWVtYmVyPiBkZWNsYXJlZCwgTGlzdDxNZW1iZXI+IGluaGVyaXRlZCkgewogICAgTGlzdDxNZW1iZXI+IHJlc3VsdCA9IDxNZW1iZXI+W10uLmxlbmd0aCA9IGluaGVyaXRlZC5sZW5ndGg7CiAgICBpbnQgc3RvcmVJbmRleCA9IDA7CiAgICBpbnQgaSA9IDAsIGogPSAwOwogICAgd2hpbGUgKGkgPCBkZWNsYXJlZC5sZW5ndGggJiYgaiA8IGluaGVyaXRlZC5sZW5ndGgpIHsKICAgICAgTWVtYmVyIGRlY2xhcmVkTWVtYmVyID0gZGVjbGFyZWRbaV07CiAgICAgIE1lbWJlciBpbmhlcml0ZWRNZW1iZXIgPSBpbmhlcml0ZWRbal07CiAgICAgIGludCBjb21wYXJpc29uID0KICAgICAgICAgIENsYXNzSGllcmFyY2h5LmNvbXBhcmVNZW1iZXJzKGRlY2xhcmVkTWVtYmVyLCBpbmhlcml0ZWRNZW1iZXIpOwogICAgICBpZiAoY29tcGFyaXNvbiA8IDApIHsKICAgICAgICArK2k7CiAgICAgIH0gZWxzZSBpZiAoY29tcGFyaXNvbiA+IDApIHsKICAgICAgICByZXN1bHRbc3RvcmVJbmRleCsrXSA9IGluaGVyaXRlZE1lbWJlcjsKICAgICAgICArK2o7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gTW92ZSBwYXN0IHRoZSBzaGFkb3dlZCBtZW1iZXIsIGJ1dCByZXRhaW4gdGhlIGRlY2xhcmVkIG1lbWJlciwgYXMKICAgICAgICAvLyBpdCBtYXkgc2hhZG93IG11bHRpcGxlIG1lbWJlcnMuCiAgICAgICAgKytqOwogICAgICB9CiAgICB9CiAgICAvLyBJZiB0aGUgbGlzdCBvZiBkZWNsYXJlZCBtZW1iZXJzIGlzIGV4aGF1c3RlZCwgY29weSBvdmVyIHRoZSByZW1haW5zIG9mCiAgICAvLyB0aGUgaW5oZXJpdGVkIG1lbWJlcnMuCiAgICB3aGlsZSAoaiA8IGluaGVyaXRlZC5sZW5ndGgpIHsKICAgICAgcmVzdWx0W3N0b3JlSW5kZXgrK10gPSBpbmhlcml0ZWRbaisrXTsKICAgIH0KICAgIHJlc3VsdC5sZW5ndGggPSBzdG9yZUluZGV4OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX3JlY29yZFN1cGVyVHlwZXMoX0NsYXNzSW5mbyBzdWJJbmZvLCBTdXBlcnR5cGUgc3VwZXJ0eXBlKSB7CiAgICBfQ2xhc3NJbmZvIHN1cGVySW5mbyA9IF9pbmZvTWFwW3N1cGVydHlwZS5jbGFzc05vZGVdOwogICAgaWYgKHN1cGVydHlwZS50eXBlQXJndW1lbnRzLmlzRW1wdHkpIHsKICAgICAgaWYgKHN1cGVySW5mby5nZW5lcmljU3VwZXJUeXBlcyA9PSBudWxsKSByZXR1cm47CiAgICAgIC8vIENvcHkgb3ZlciB0aGUgc3VwZXIgdHlwZSBlbnRyaWVzLgogICAgICBzdWJJbmZvLmdlbmVyaWNTdXBlclR5cGVzID8/PSA8Q2xhc3MsIExpc3Q8U3VwZXJ0eXBlPj57fTsKICAgICAgc3VwZXJJbmZvLmdlbmVyaWNTdXBlclR5cGVzPy5mb3JFYWNoKChDbGFzcyBrZXksIExpc3Q8U3VwZXJ0eXBlPiB0eXBlcykgewogICAgICAgIGZvciAoU3VwZXJ0eXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAgICAgIHN1YkluZm8ucmVjb3JkR2VuZXJpY1N1cGVyVHlwZShrZXksIHR5cGUsIF9vbkFtYmlndW91c1N1cGVydHlwZXMpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICAvLyBDb3B5IG92ZXIgYWxsIHRyYW5zaXRpdmUgZ2VuZXJpYyBzdXBlciB0eXBlcywgYW5kIHN1YnN0aXR1dGUgdGhlCiAgICAgIC8vIGZyZWUgdmFyaWFibGVzIHdpdGggdGhvc2UgcHJvdmlkZWQgaW4gW3N1cGVydHlwZV0uCiAgICAgIENsYXNzIHN1cGVyY2xhc3MgPSBzdXBlcnR5cGUuY2xhc3NOb2RlOwogICAgICB2YXIgc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgIHN1cGVyY2xhc3MudHlwZVBhcmFtZXRlcnMsIHN1cGVydHlwZS50eXBlQXJndW1lbnRzKTsKICAgICAgc3ViSW5mby5nZW5lcmljU3VwZXJUeXBlcyA/Pz0gPENsYXNzLCBMaXN0PFN1cGVydHlwZT4+e307CiAgICAgIHN1cGVySW5mby5nZW5lcmljU3VwZXJUeXBlcz8uZm9yRWFjaCgoQ2xhc3Mga2V5LCBMaXN0PFN1cGVydHlwZT4gdHlwZXMpIHsKICAgICAgICBmb3IgKFN1cGVydHlwZSB0eXBlIGluIHR5cGVzKSB7CiAgICAgICAgICBzdWJJbmZvLnJlY29yZEdlbmVyaWNTdXBlclR5cGUoa2V5LAogICAgICAgICAgICAgIHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlU3VwZXJ0eXBlKHR5cGUpLCBfb25BbWJpZ3VvdXNTdXBlcnR5cGVzKTsKICAgICAgICB9CiAgICAgIH0pOwoKICAgICAgc3ViSW5mby5yZWNvcmRHZW5lcmljU3VwZXJUeXBlKAogICAgICAgICAgc3VwZXJjbGFzcywgc3VwZXJ0eXBlLCBfb25BbWJpZ3VvdXNTdXBlcnR5cGVzKTsKICAgIH0KICB9CgogIC8vLyBCdWlsZCBsaXN0cyBvZiBzdXBlciB0eXBlcyBhbmQgc3VwZXIgY2xhc3Nlcy4KICAvLy8gTm90ZSB0aGF0IHRoZSBzdXBlciBjbGFzcyBhbmQgc3VwZXIgdHlwZXMgb2YgdGhlIGNsYXNzIG11c3QgYWxyZWFkeSBoYXZlCiAgLy8vIGhhZCB0aGVpciBzdXBlcnMgY29sbGVjdGVkLgogIHZvaWQgX2NvbGxlY3RTdXBlcnNGb3JDbGFzcyhDbGFzcyBjbGFzc18pIHsKICAgIF9DbGFzc0luZm8gaW5mbyA9IF9pbmZvTWFwW2NsYXNzX107CgogICAgdmFyIHN1cGVyY2xhc3NTZXRCdWlsZGVyID0gbmV3IF9JbnRlcnZhbExpc3RCdWlsZGVyKCkKICAgICAgLi5hZGRTaW5nbGV0b24oaW5mby50b3BvbG9naWNhbEluZGV4KTsKICAgIHZhciBzdXBlcnR5cGVTZXRCdWlsZGVyID0gbmV3IF9JbnRlcnZhbExpc3RCdWlsZGVyKCkKICAgICAgLi5hZGRTaW5nbGV0b24oaW5mby50b3BvbG9naWNhbEluZGV4KTsKCiAgICBpZiAoY2xhc3NfLnN1cGVydHlwZSAhPSBudWxsKSB7CiAgICAgIF9DbGFzc0luZm8gc3VwZXJ0eXBlSW5mbyA9IF9pbmZvTWFwW2NsYXNzXy5zdXBlcnR5cGUuY2xhc3NOb2RlXTsKICAgICAgc3VwZXJjbGFzc1NldEJ1aWxkZXIKICAgICAgICAgIC5hZGRJbnRlcnZhbExpc3Qoc3VwZXJ0eXBlSW5mby5zdXBlcmNsYXNzSW50ZXJ2YWxMaXN0KTsKICAgICAgc3VwZXJ0eXBlU2V0QnVpbGRlci5hZGRJbnRlcnZhbExpc3Qoc3VwZXJ0eXBlSW5mby5zdXBlcnR5cGVJbnRlcnZhbExpc3QpOwogICAgfQoKICAgIGlmIChjbGFzc18ubWl4ZWRJblR5cGUgIT0gbnVsbCkgewogICAgICBfQ2xhc3NJbmZvIG1peGVkSW5UeXBlSW5mbyA9IF9pbmZvTWFwW2NsYXNzXy5taXhlZEluVHlwZS5jbGFzc05vZGVdOwogICAgICBzdXBlcnR5cGVTZXRCdWlsZGVyCiAgICAgICAgICAuYWRkSW50ZXJ2YWxMaXN0KG1peGVkSW5UeXBlSW5mby5zdXBlcnR5cGVJbnRlcnZhbExpc3QpOwogICAgfQoKICAgIGZvciAoU3VwZXJ0eXBlIHN1cGVydHlwZSBpbiBjbGFzc18uaW1wbGVtZW50ZWRUeXBlcykgewogICAgICBfQ2xhc3NJbmZvIHN1cGVydHlwZUluZm8gPSBfaW5mb01hcFtzdXBlcnR5cGUuY2xhc3NOb2RlXTsKICAgICAgc3VwZXJ0eXBlU2V0QnVpbGRlci5hZGRJbnRlcnZhbExpc3Qoc3VwZXJ0eXBlSW5mby5zdXBlcnR5cGVJbnRlcnZhbExpc3QpOwogICAgfQoKICAgIGluZm8uc3VwZXJjbGFzc0ludGVydmFsTGlzdCA9IHN1cGVyY2xhc3NTZXRCdWlsZGVyLmJ1aWxkSW50ZXJ2YWxMaXN0KCk7CiAgICBpbmZvLnN1cGVydHlwZUludGVydmFsTGlzdCA9IHN1cGVydHlwZVNldEJ1aWxkZXIuYnVpbGRJbnRlcnZhbExpc3QoKTsKICB9CgogIC8vLyBDcmVhdGVzIGEgaGlzdG9ncmFtIHN1Y2ggdGhhdCBpbmRleCBgTmAgY29udGFpbnMgdGhlIG51bWJlciBvZiBjbGFzc2VzCiAgLy8vIHRoYXQgaGF2ZSBgTmAgaW50ZXJ2YWxzIGluIGl0cyBzdXBlcnR5cGUgc2V0LgogIC8vLwogIC8vLyBUaGUgbW9yZSBudW1iZXJzIGFyZSBjb25kZW5zZWQgbmVhciB0aGUgYmVnaW5uaW5nLCB0aGUgbW9yZSBlZmZpY2llbnQgdGhlCiAgLy8vIGludGVybmFsIGRhdGEgc3RydWN0dXJlIGlzLgogIExpc3Q8aW50PiBnZXRFeHBlbnNlSGlzdG9ncmFtKCkgewogICAgdmFyIHJlc3VsdCA9IDxpbnQ+W107CiAgICBmb3IgKENsYXNzIGNsYXNzXyBpbiBfaW5mb01hcC5rZXlzKSB7CiAgICAgIHZhciBpbmZvID0gX2luZm9NYXBbY2xhc3NfXTsKICAgICAgaW50IGludGVydmFscyA9IGluZm8uc3VwZXJ0eXBlSW50ZXJ2YWxMaXN0Lmxlbmd0aCB+LyAyOwogICAgICBpZiAoaW50ZXJ2YWxzID49IHJlc3VsdC5sZW5ndGgpIHsKICAgICAgICBpbnQgb2xkTGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDsKICAgICAgICByZXN1bHQubGVuZ3RoID0gaW50ZXJ2YWxzICsgMTsKICAgICAgICByZXN1bHQuZmlsbFJhbmdlKG9sZExlbmd0aCwgcmVzdWx0Lmxlbmd0aCwgMCk7CiAgICAgIH0KICAgICAgcmVzdWx0W2ludGVydmFsc10gKz0gMTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgYXZlcmFnZSBudW1iZXIgb2YgaW50ZXJ2YWxzIHBlciBzdXBlcnR5cGUgcmVsYXRpb24gKGxlc3MKICAvLy8gaXMgYmV0dGVyLCAxLjAgaXMgYmFkKS4KICAvLy8KICAvLy8gVGhpcyBpcyBhbiBlc3RpbWF0ZSBvZiB0aGUgbWVtb3J5IHVzZSBjb21wYXJlZCB0byBhIGRhdGEgc3RydWN0dXJlIHRoYXQKICAvLy8gZW51bWVyYXRlcyBhbGwgc3VwZXJjbGFzcy9zdXBlcnR5cGUgcGFpcnMuCiAgZG91YmxlIGdldENvbXByZXNzaW9uUmF0aW8oKSB7CiAgICBpbnQgaW50ZXJ2YWxzID0gMDsKICAgIGludCBzaXplcyA9IDA7CiAgICBmb3IgKENsYXNzIGNsYXNzXyBpbiBfaW5mb01hcC5rZXlzKSB7CiAgICAgIHZhciBpbmZvID0gX2luZm9NYXBbY2xhc3NfXTsKICAgICAgaW50ZXJ2YWxzICs9IChpbmZvLnN1cGVyY2xhc3NJbnRlcnZhbExpc3QubGVuZ3RoICsKICAgICAgICAgICAgICBpbmZvLnN1cGVydHlwZUludGVydmFsTGlzdC5sZW5ndGgpIH4vCiAgICAgICAgICAyOwogICAgICBzaXplcyArPSBfaW50ZXJ2YWxMaXN0U2l6ZShpbmZvLnN1cGVyY2xhc3NJbnRlcnZhbExpc3QpICsKICAgICAgICAgIF9pbnRlcnZhbExpc3RTaXplKGluZm8uc3VwZXJ0eXBlSW50ZXJ2YWxMaXN0KTsKICAgIH0KCiAgICByZXR1cm4gc2l6ZXMgPT0gMCA/IDEuMCA6IGludGVydmFscyAvIHNpemVzOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIGhhc2ggdGFibGVzIHN0b3JpbmcgaGllcmFyY2h5IGRhdGEuCiAgaW50IGdldFN1cGVyVHlwZUhhc2hUYWJsZVNpemUoKSB7CiAgICBpbnQgc3VtID0gMDsKICAgIGZvciAoQ2xhc3MgY2xhc3NfIGluIF9pbmZvTWFwLmtleXMpIHsKICAgICAgc3VtICs9IF9pbmZvTWFwW2NsYXNzX10uZ2VuZXJpY1N1cGVyVHlwZXM/Lmxlbmd0aCA/PyAwOwogICAgfQogICAgcmV0dXJuIHN1bTsKICB9Cn0KCmNsYXNzIF9JbnRlcnZhbExpc3RCdWlsZGVyIHsKICBmaW5hbCBMaXN0PGludD4gZXZlbnRzID0gPGludD5bXTsKCiAgdm9pZCBhZGRJbnRlcnZhbChpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIC8vIEFkZCBhbiBldmVudCBwb2ludCBmb3IgZWFjaCBpbnRlcnZhbCBlbmQgcG9pbnQsIHVzaW5nIHRoZSBsb3cgYml0IHRvCiAgICAvLyBkaXN0aW5ndWlzaCBvcGVuaW5nIGZyb20gY2xvc2luZyBlbmQgcG9pbnRzLiBDbG9zaW5nIGVuZCBwb2ludHMgc2hvdWxkCiAgICAvLyBoYXZlIHRoZSBoaWdoIGJpdCB0byBlbnN1cmUgdGhleSBvY2N1ciBhZnRlciBhbiBvcGVuaW5nIGVuZCBwb2ludC4KICAgIGV2ZW50cy5hZGQoc3RhcnQgPDwgMSk7CiAgICBldmVudHMuYWRkKChlbmQgPDwgMSkgKyAxKTsKICB9CgogIHZvaWQgYWRkU2luZ2xldG9uKGludCB4KSB7CiAgICBhZGRJbnRlcnZhbCh4LCB4ICsgMSk7CiAgfQoKICB2b2lkIGFkZEludGVydmFsTGlzdChVaW50MzJMaXN0IGludGVydmFscykgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcnZhbHMubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgYWRkSW50ZXJ2YWwoaW50ZXJ2YWxzW2ldLCBpbnRlcnZhbHNbaSArIDFdKTsKICAgIH0KICB9CgogIFVpbnQzMkxpc3QgYnVpbGRJbnRlcnZhbExpc3QoKSB7CiAgICAvLyBTb3J0IHRoZSBldmVudCBwb2ludHMgYW5kIHN3ZWVwIGxlZnQgdG8gcmlnaHQgd2hpbGUgdHJhY2tpbmcgaG93IG1hbnkKICAgIC8vIGludGVydmFscyB3ZSBhcmUgY3VycmVudGx5IGluc2lkZS4gIFJlY29yZCBhbiBpbnRlcnZhbCBlbmQgcG9pbnQgd2hlbiB0aGUKICAgIC8vIG51bWJlciBvZiBpbnRlcnZhbHMgZHJvcCB0byB6ZXJvIG9yIGluY3JlYXNlIGZyb20gemVybyB0byBvbmUuCiAgICAvLyBFdmVudCBwb2ludHMgYXJlIGVuY29kZWQgc28gdGhhdCBhbiBvcGVuaW5nIGVuZCBwb2ludCBvY2N1ciBiZWZvcmUgYQogICAgLy8gY2xvc2luZyBlbmQgcG9pbnQgYXQgdGhlIHNhbWUgdmFsdWUuCiAgICBldmVudHMuc29ydCgpOwogICAgaW50IGluc2lkZUNvdW50ID0gMDsgLy8gVGhlIG51bWJlciBvZiBpbnRlcnZhbHMgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUuCiAgICBpbnQgc3RvcmVJbmRleCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGV2ZW50cy5sZW5ndGg7ICsraSkgewogICAgICBpbnQgZXZlbnQgPSBldmVudHNbaV07CiAgICAgIGlmIChldmVudCAmIDEgPT0gMCkgewogICAgICAgIC8vIFN0YXJ0IHBvaW50CiAgICAgICAgKytpbnNpZGVDb3VudDsKICAgICAgICBpZiAoaW5zaWRlQ291bnQgPT0gMSkgewogICAgICAgICAgLy8gU3RvcmUgdGhlIHJlc3VsdHMgdGVtcG9yYXJpbHkgYmFjayBpbiB0aGUgZXZlbnQgYXJyYXkuCiAgICAgICAgICBldmVudHNbc3RvcmVJbmRleCsrXSA9IGV2ZW50ID4+IDE7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIEVuZCBwb2ludAogICAgICAgIC0taW5zaWRlQ291bnQ7CiAgICAgICAgaWYgKGluc2lkZUNvdW50ID09IDApIHsKICAgICAgICAgIGV2ZW50c1tzdG9yZUluZGV4KytdID0gZXZlbnQgPj4gMTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIC8vIENvcHkgdGhlIHJlc3VsdHMgb3ZlciB0byBhIHR5cGVkIGFycmF5IG9mIHRoZSBjb3JyZWN0IGxlbmd0aC4KICAgIHZhciByZXN1bHQgPSBuZXcgVWludDMyTGlzdChzdG9yZUluZGV4KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RvcmVJbmRleDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IGV2ZW50c1tpXTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQp9Cgpib29sIF9pbnRlcnZhbExpc3RDb250YWlucyhVaW50MzJMaXN0IGludGVydmFsTGlzdCwgaW50IHgpIHsKICBpbnQgbG93ID0gMCwgaGlnaCA9IGludGVydmFsTGlzdC5sZW5ndGggLSAxOwogIGlmIChoaWdoID09IC0xIHx8IHggPCBpbnRlcnZhbExpc3RbMF0gfHwgaW50ZXJ2YWxMaXN0W2hpZ2hdIDw9IHgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgLy8gRmluZCB0aGUgbG93ZXIgYm91bmQgb2YgeCBpbiB0aGUgbGlzdC4KICAvLyBJZiB0aGUgbG93ZXIgYm91bmQgaXMgYXQgYW4gZXZlbiBpbmRleCwgdGhlIGxvd2VyIGJvdW5kIGlzIGFuIG9wZW5pbmcgcG9pbnQKICAvLyBvZiBhbiBpbnRlcnZhbCB0aGF0IGNvbnRhaW5zIHgsIG90aGVyd2lzZSBpdCBpcyBhIGNsb3NpbmcgcG9pbnQgb2YgYW4KICAvLyBpbnRlcnZhbCBiZWxvdyB4IGFuZCB0aGVyZSBpcyBubyBpbnRlcnZhbCBjb250YWluaW5nIHguCiAgd2hpbGUgKGxvdyA8IGhpZ2gpIHsKICAgIGludCBtaWQgPSBoaWdoIC0gKChoaWdoIC0gbG93KSA+PiAxKTsgLy8gR2V0IG1pZGRsZSwgcm91bmRpbmcgdXAuCiAgICBpbnQgcGl2b3QgPSBpbnRlcnZhbExpc3RbbWlkXTsKICAgIGlmIChwaXZvdCA8PSB4KSB7CiAgICAgIGxvdyA9IG1pZDsKICAgIH0gZWxzZSB7CiAgICAgIGhpZ2ggPSBtaWQgLSAxOwogICAgfQogIH0KICByZXR1cm4gbG93ID09IGhpZ2ggJiYgKGxvdyAmIDEpID09IDA7Cn0KCmludCBfaW50ZXJ2YWxMaXN0U2l6ZShVaW50MzJMaXN0IGludGVydmFsTGlzdCkgewogIGludCBzaXplID0gMDsKICBmb3IgKGludCBpID0gMDsgaSA8IGludGVydmFsTGlzdC5sZW5ndGg7IGkgKz0gMikgewogICAgc2l6ZSArPSBpbnRlcnZhbExpc3RbaSArIDFdIC0gaW50ZXJ2YWxMaXN0W2ldOwogIH0KICByZXR1cm4gc2l6ZTsKfQoKY2xhc3MgX0NsYXNzSW5mbyB7CiAgYm9vbCB1c2VkID0gZmFsc2U7CiAgZmluYWwgQ2xhc3MgY2xhc3NOb2RlOwogIGludCB0b3BvbG9naWNhbEluZGV4ID0gMDsKICBpbnQgZGVwdGggPSAwOwoKICAvLyBTdXBlciB0eXBlcyBtdXN0IGFsd2F5cyBvY2N1ciBiZWZvcmUgc3VidHlwZXMgaW4gdGhlc2UgbGlzdHMuCiAgLy8gRm9yIGV4YW1wbGU6CiAgLy8KICAvLyAgIGNsYXNzIEEgZXh0ZW5kcyBPYmplY3QKICAvLyAgIGNsYXNzIEIgZXh0ZW5kcyBPYmplY3QgaW1wbGVtZW50cyBBCiAgLy8KICAvLyBIZXJlIGBBYCBtdXN0IG9jY3VyIGJlZm9yZSBgQmAgaW4gdGhlIGxpc3Qgb2YgZGlyZWN0IGV4dGVuZGVycyBvZiBPYmplY3QsCiAgLy8gYmVjYXVzZSBgQmAgaXMgYSBzdWJ0eXBlIG9mIGBBYC4KICBmaW5hbCBTZXQ8X0NsYXNzSW5mbz4gZGlyZWN0RXh0ZW5kZXJzID0gbmV3IExpbmtlZEhhc2hTZXQ8X0NsYXNzSW5mbz4oKTsKICBmaW5hbCBTZXQ8X0NsYXNzSW5mbz4gZGlyZWN0TWl4ZXJzID0gbmV3IExpbmtlZEhhc2hTZXQ8X0NsYXNzSW5mbz4oKTsKICBmaW5hbCBTZXQ8X0NsYXNzSW5mbz4gZGlyZWN0SW1wbGVtZW50ZXJzID0gbmV3IExpbmtlZEhhc2hTZXQ8X0NsYXNzSW5mbz4oKTsKCiAgVWludDMyTGlzdCBzdXBlcmNsYXNzSW50ZXJ2YWxMaXN0OwogIFVpbnQzMkxpc3Qgc3VwZXJ0eXBlSW50ZXJ2YWxMaXN0OwoKICBMaXN0PF9DbGFzc0luZm8+IGxlYXN0VXBwZXJCb3VuZEluZm9zOwoKICAvLy8gTWFwcyBnZW5lcmljIHN1cGVydHlwZSBjbGFzc2VzIHRvIHRoZSBpbnN0YW50aWF0aW9uIGltcGxlbWVudGVkIGJ5IHRoaXMKICAvLy8gY2xhc3MuCiAgLy8vCiAgLy8vIEUuZy4gYExpc3RgIG1hcHMgdG8gYExpc3Q8U3RyaW5nPmAgZm9yIGEgY2xhc3MgdGhhdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5CiAgLy8vIGltcGxlbWVudHMgYExpc3Q8U3RyaW5nPmAuCiAgTWFwPENsYXNzLCBMaXN0PFN1cGVydHlwZT4+IGdlbmVyaWNTdXBlclR5cGVzOwoKICAvLy8gSW5zdGFuY2UgZmllbGRzLCBnZXR0ZXJzLCBtZXRob2RzLCBhbmQgb3BlcmF0b3JzIGRlY2xhcmVkIGluIHRoaXMgY2xhc3MKICAvLy8gb3IgaXRzIG1peGVkLWluIGNsYXNzLCBzb3J0ZWQgYWNjb3JkaW5nIHRvIFtfY29tcGFyZU1lbWJlcnNdLgogIExpc3Q8TWVtYmVyPiBkZWNsYXJlZEdldHRlcnNBbmRDYWxsczsKCiAgLy8vIE5vbi1maW5hbCBpbnN0YW5jZSBmaWVsZHMgYW5kIHNldHRlcnMgZGVjbGFyZWQgaW4gdGhpcyBjbGFzcyBvciBpdHMKICAvLy8gbWl4ZWQtaW4gY2xhc3MsIHNvcnRlZCBhY2NvcmRpbmcgdG8gW19jb21wYXJlTWVtYmVyc10uCiAgTGlzdDxNZW1iZXI+IGRlY2xhcmVkU2V0dGVyczsKCiAgLy8vIEluc3RhbmNlIGZpZWxkcywgZ2V0dGVycywgbWV0aG9kcywgYW5kIG9wZXJhdG9ycyBpbXBsZW1lbnRlZCBieSB0aGlzIGNsYXNzCiAgLy8vIChkZWNsYXJlZCBvciBpbmhlcml0ZWQpLgogIExpc3Q8TWVtYmVyPiBpbXBsZW1lbnRlZEdldHRlcnNBbmRDYWxsczsKCiAgLy8vIE5vbi1maW5hbCBpbnN0YW5jZSBmaWVsZHMgYW5kIHNldHRlcnMgaW1wbGVtZW50ZWQgYnkgdGhpcyBjbGFzcwogIC8vLyAoZGVjbGFyZWQgb3IgaW5oZXJpdGVkKS4KICBMaXN0PE1lbWJlcj4gaW1wbGVtZW50ZWRTZXR0ZXJzOwoKICBMaXN0PE1lbWJlcj4gaW50ZXJmYWNlR2V0dGVyc0FuZENhbGxzOwogIExpc3Q8TWVtYmVyPiBpbnRlcmZhY2VTZXR0ZXJzOwoKICBfQ2xhc3NJbmZvKHRoaXMuY2xhc3NOb2RlKTsKCiAgYm9vbCBpc1N1YmNsYXNzT2YoX0NsYXNzSW5mbyBvdGhlcikgewogICAgcmV0dXJuIF9pbnRlcnZhbExpc3RDb250YWlucygKICAgICAgICBzdXBlcmNsYXNzSW50ZXJ2YWxMaXN0LCBvdGhlci50b3BvbG9naWNhbEluZGV4KTsKICB9CgogIGJvb2wgaXNTdWJ0eXBlT2YoX0NsYXNzSW5mbyBvdGhlcikgewogICAgcmV0dXJuIF9pbnRlcnZhbExpc3RDb250YWlucyhzdXBlcnR5cGVJbnRlcnZhbExpc3QsIG90aGVyLnRvcG9sb2dpY2FsSW5kZXgpOwogIH0KCiAgdm9pZCByZWNvcmRHZW5lcmljU3VwZXJUeXBlKENsYXNzIGNscywgU3VwZXJ0eXBlIHR5cGUsCiAgICAgIEhhbmRsZUFtYmlndW91c1N1cGVydHlwZXMgb25BbWJpZ3VvdXNTdXBlcnR5cGVzKSB7CiAgICBMaXN0PFN1cGVydHlwZT4gZXhpc3RpbmcgPSBnZW5lcmljU3VwZXJUeXBlc1tjbHNdOwogICAgaWYgKGV4aXN0aW5nID09IG51bGwpIHsKICAgICAgZ2VuZXJpY1N1cGVyVHlwZXNbY2xzXSA9IDxTdXBlcnR5cGU+W3R5cGVdOwogICAgfSBlbHNlIGlmICh0eXBlICE9IGV4aXN0aW5nLmZpcnN0KSB7CiAgICAgIGV4aXN0aW5nLmFkZCh0eXBlKTsKICAgICAgb25BbWJpZ3VvdXNTdXBlcnR5cGVzKGNsYXNzTm9kZSwgZXhpc3RpbmcuZmlyc3QsIHR5cGUpOwogICAgfQogIH0KfQoKLy8vIEFuIGltbXV0YWJsZSBzZXQgb2YgY2xhc3Nlcy4KY2xhc3MgQ2xhc3NTZXQgZXh0ZW5kcyBJdGVyYWJsZUJhc2U8Q2xhc3M+IHsKICBmaW5hbCBTZXQ8Q2xhc3M+IF9jbGFzc2VzOwogIENsYXNzU2V0KHRoaXMuX2NsYXNzZXMpOwoKICBib29sIGNvbnRhaW5zKE9iamVjdCBjbGFzc18pIHsKICAgIHJldHVybiBfY2xhc3Nlcy5jb250YWlucyhjbGFzc18pOwogIH0KCiAgQ2xhc3NTZXQgdW5pb24oQ2xhc3NTZXQgb3RoZXIpIHsKICAgIFNldDxDbGFzcz4gcmVzdWx0ID0gbmV3IFNldDxDbGFzcz4uZnJvbShfY2xhc3Nlcyk7CiAgICByZXN1bHQuYWRkQWxsKG90aGVyLl9jbGFzc2VzKTsKICAgIHJldHVybiBuZXcgQ2xhc3NTZXQocmVzdWx0KTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhdG9yPENsYXNzPiBnZXQgaXRlcmF0b3IgPT4gX2NsYXNzZXMuaXRlcmF0b3I7Cn0KCi8vLyBIZWFwIGZvciB1c2UgaW4gY29tcHV0aW5nIGxlYXN0IHVwcGVyIGJvdW5kcy4KLy8vCi8vLyBUaGUgaGVhcCBpcyBzb3J0ZWQgc3VjaCB0aGF0IGNsYXNzZXMgdGhhdCBhcmUgZGVlcGVzdCBpbiB0aGUgaGllcmFyY2h5Ci8vLyBhcmUgcmVtb3ZlZCBmaXJzdDsgaW4gdGhlIGNhc2Ugb2Yg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USExAU5EKAFKPSABUR8rAUYfIwEpIQEeASgiOQQBJ1EEATk5NxwyKRo+BgQCASEtHRsBISYEASM3IyEEAQw1AgEyBEtQHSoMSwE+KCk0BAIBI3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0J3Nka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL2NvcmVfdHlwZXMuZGFydKtwLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KbGlicmFyeSBrZXJuZWwuY29yZV90eXBlczsKCmltcG9ydCAnYXN0LmRhcnQnOwppbXBvcnQgJ2xpYnJhcnlfaW5kZXguZGFydCc7CgovLy8gUHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBjbGFzc2VzIGFuZCBsaWJyYXJpZXMgaW4gdGhlIGNvcmUgbGlicmFyaWVzLgpjbGFzcyBDb3JlVHlwZXMgewogIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IHJlcXVpcmVkQ2xhc3NlcyA9IHsKICAgICdkYXJ0OmNvcmUnOiBbCiAgICAgICdPYmplY3QnLAogICAgICAnTnVsbCcsCiAgICAgICdib29sJywKICAgICAgJ2ludCcsCiAgICAgICdudW0nLAogICAgICAnZG91YmxlJywKICAgICAgJ1N0cmluZycsCiAgICAgICdMaXN0JywKICAgICAgJ01hcCcsCiAgICAgICdJdGVyYWJsZScsCiAgICAgICdJdGVyYXRvcicsCiAgICAgICdTeW1ib2wnLAogICAgICAnVHlwZScsCiAgICAgICdGdW5jdGlvbicsCiAgICAgICdJbnZvY2F0aW9uJywKICAgICAgJ0ZhbGxUaHJvdWdoRXJyb3InLAogICAgXSwKICAgICdkYXJ0Ol9pbnRlcm5hbCc6IFsKICAgICAgJ1N5bWJvbCcsCiAgICBdLAogICAgJ2RhcnQ6YXN5bmMnOiBbCiAgICAgICdGdXR1cmUnLAogICAgICAnU3RyZWFtJywKICAgIF0KICB9OwoKICBmaW5hbCBMaWJyYXJ5SW5kZXggaW5kZXg7CgogIExpYnJhcnkgX2NvcmVMaWJyYXJ5OwogIENsYXNzIF9vYmplY3RDbGFzczsKICBDbGFzcyBfbnVsbENsYXNzOwogIENsYXNzIF9ib29sQ2xhc3M7CiAgQ2xhc3MgX2ludENsYXNzOwogIENsYXNzIF9udW1DbGFzczsKICBDbGFzcyBfZG91YmxlQ2xhc3M7CiAgQ2xhc3MgX3N0cmluZ0NsYXNzOwogIENsYXNzIF9saXN0Q2xhc3M7CiAgQ2xhc3MgX3NldENsYXNzOwogIENsYXNzIF9tYXBDbGFzczsKICBDbGFzcyBfaXRlcmFibGVDbGFzczsKICBDbGFzcyBfaXRlcmF0b3JDbGFzczsKICBDbGFzcyBfc3ltYm9sQ2xhc3M7CiAgQ2xhc3MgX3R5cGVDbGFzczsKICBDbGFzcyBfZnVuY3Rpb25DbGFzczsKICBDbGFzcyBfaW52b2NhdGlvbkNsYXNzOwogIENsYXNzIF9pbnZvY2F0aW9uTWlycm9yQ2xhc3M7CiAgQ29uc3RydWN0b3IgX2ludm9jYXRpb25NaXJyb3JXaXRoVHlwZUNvbnN0cnVjdG9yOwogIENvbnN0cnVjdG9yIF9ub1N1Y2hNZXRob2RFcnJvckRlZmF1bHRDb25zdHJ1Y3RvcjsKICBQcm9jZWR1cmUgX2xpc3RGcm9tQ29uc3RydWN0b3I7CiAgUHJvY2VkdXJlIF9saXN0VW5tb2RpZmlhYmxlQ29uc3RydWN0b3I7CiAgUHJvY2VkdXJlIF9pZGVudGljYWxQcm9jZWR1cmU7CiAgQ29uc3RydWN0b3IgX2ZhbGxUaHJvdWdoRXJyb3JVcmxBbmRMaW5lQ29uc3RydWN0b3I7CiAgUHJvY2VkdXJlIF9vYmplY3RFcXVhbHM7CiAgUHJvY2VkdXJlIF9tYXBVbm1vZGlmaWFibGU7CgogIENsYXNzIF9pbnRlcm5hbFN5bWJvbENsYXNzOwoKICBMaWJyYXJ5IF9hc3luY0xpYnJhcnk7CiAgQ2xhc3MgX2Z1dHVyZUNsYXNzOwogIENsYXNzIF9zdGFja1RyYWNlQ2xhc3M7CiAgQ2xhc3MgX3N0cmVhbUNsYXNzOwogIENsYXNzIF9hc3luY0F3YWl0Q29tcGxldGVyQ2xhc3M7CiAgQ2xhc3MgX2Z1dHVyZU9yQ2xhc3M7CiAgQ29uc3RydWN0b3IgX2FzeW5jQXdhaXRDb21wbGV0ZXJDb25zdHJ1Y3RvcjsKICBQcm9jZWR1cmUgX2NvbXBsZXRlT25Bc3luY1JldHVyblByb2NlZHVyZTsKICBQcm9jZWR1cmUgX2NvbXBsZXRlckNvbXBsZXRlRXJyb3I7CiAgQ29uc3RydWN0b3IgX3N5bmNJdGVyYWJsZURlZmF1bHRDb25zdHJ1Y3RvcjsKICBDb25zdHJ1Y3RvciBfc3RyZWFtSXRlcmF0b3JEZWZhdWx0Q29uc3RydWN0b3I7CiAgQ29uc3RydWN0b3IgX2FzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJEZWZhdWx0Q29uc3RydWN0b3I7CiAgUHJvY2VkdXJlIF9hc3luY1N0YXJMaXN0ZW5IZWxwZXJQcm9jZWR1cmU7CiAgUHJvY2VkdXJlIF9hc3luY1N0YXJNb3ZlTmV4dEhlbHBlclByb2NlZHVyZTsKICBQcm9jZWR1cmUgX2FzeW5jU3RhY2tUcmFjZUhlbHBlclByb2NlZHVyZTsKICBQcm9jZWR1cmUgX2FzeW5jVGhlbldyYXBwZXJIZWxwZXJQcm9jZWR1cmU7CiAgUHJvY2VkdXJlIF9hc3luY0Vycm9yV3JhcHBlckhlbHBlclByb2NlZHVyZTsKICBQcm9jZWR1cmUgX2F3YWl0SGVscGVyUHJvY2VkdXJlOwogIFByb2NlZHVyZSBfYm9vbEZyb21FbnZpcm9ubWVudDsKCiAgLy8vIFRoZSBgZGFydDptaXJyb3JzYCBsaWJyYXJ5LCBvciBgbnVsbGAgaWYgdGhlIGNvbXBvbmVudCBkb2VzIG5vdCB1c2UgaXQuCiAgTGlicmFyeSBfbWlycm9yc0xpYnJhcnk7CgogIENsYXNzIF9wcmFnbWFDbGFzczsKICBGaWVsZCBfcHJhZ21hTmFtZTsKICBGaWVsZCBfcHJhZ21hT3B0aW9uczsKICBDb25zdHJ1Y3RvciBfcHJhZ21hQ29uc3RydWN0b3I7CgogIENvcmVUeXBlcyhDb21wb25lbnQgY29tcG9uZW50KQogICAgICA6IGluZGV4ID0gbmV3IExpYnJhcnlJbmRleC5jb3JlTGlicmFyaWVzKGNvbXBvbmVudCk7CgogIFByb2NlZHVyZSBnZXQgYXN5bmNFcnJvcldyYXBwZXJIZWxwZXJQcm9jZWR1cmUgewogICAgcmV0dXJuIF9hc3luY0Vycm9yV3JhcHBlckhlbHBlclByb2NlZHVyZSA/Pz0KICAgICAgICBpbmRleC5nZXRUb3BMZXZlbE1lbWJlcignZGFydDphc3luYycsICdfYXN5bmNFcnJvcldyYXBwZXJIZWxwZXInKTsKICB9CgogIExpYnJhcnkgZ2V0IGFzeW5jTGlicmFyeSB7CiAgICByZXR1cm4gX2FzeW5jTGlicmFyeSA/Pz0gaW5kZXguZ2V0TGlicmFyeSgnZGFydDphc3luYycpOwogIH0KCiAgTWVtYmVyIGdldCBhc3luY1N0YXJTdHJlYW1Db250cm9sbGVyQWRkIHsKICAgIHJldHVybiBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6YXN5bmMnLCAnX0FzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXInLCAnYWRkJyk7CiAgfQoKICBNZW1iZXIgZ2V0IGFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJBZGRFcnJvciB7CiAgICByZXR1cm4gaW5kZXguZ2V0TWVtYmVyKAogICAgICAgICdkYXJ0OmFzeW5jJywgJ19Bc3luY1N0YXJTdHJlYW1Db250cm9sbGVyJywgJ2FkZEVycm9yJyk7CiAgfQoKICBNZW1iZXIgZ2V0IGFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW0gewogICAgcmV0dXJuIGluZGV4LmdldE1lbWJlcigKICAgICAgICAnZGFydDphc3luYycsICdfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcicsICdhZGRTdHJlYW0nKTsKICB9CgogIENsYXNzIGdldCBhc3luY1N0YXJTdHJlYW1Db250cm9sbGVyQ2xhc3MgewogICAgcmV0dXJuIGluZGV4LmdldENsYXNzKCdkYXJ0OmFzeW5jJywgJ19Bc3luY1N0YXJTdHJlYW1Db250cm9sbGVyJyk7CiAgfQoKICBNZW1iZXIgZ2V0IGFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJDbG9zZSB7CiAgICByZXR1cm4gaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmFzeW5jJywgJ19Bc3luY1N0YXJTdHJlYW1Db250cm9sbGVyJywgJ2Nsb3NlJyk7CiAgfQoKICBDb25zdHJ1Y3RvciBnZXQgYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckRlZmF1bHRDb25zdHJ1Y3RvciB7CiAgICByZXR1cm4gX2FzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJEZWZhdWx0Q29uc3RydWN0b3IgPz89CiAgICAgICAgaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmFzeW5jJywgJ19Bc3luY1N0YXJTdHJlYW1Db250cm9sbGVyJywgJycpOwogIH0KCiAgTWVtYmVyIGdldCBhc3luY1N0YXJTdHJlYW1Db250cm9sbGVyU3RyZWFtIHsKICAgIHJldHVybiBpbmRleC5nZXRNZW1iZXIoCiAgICAgICAgJ2RhcnQ6YXN5bmMnLCAnX0FzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXInLCAnZ2V0OnN0cmVhbScpOwogIH0KCiAgUHJvY2VkdXJlIGdldCBhc3luY1N0YXJMaXN0ZW5IZWxwZXIgewogICAgcmV0dXJuIF9hc3luY1N0YXJMaXN0ZW5IZWxwZXJQcm9jZWR1cmUgPz89CiAgICAgICAgaW5kZXguZ2V0VG9wTGV2ZWxNZW1iZXIoJ2RhcnQ6YXN5bmMnLCAnX2FzeW5jU3Rhckxpc3RlbkhlbHBlcicpOwogIH0KCiAgUHJvY2VkdXJlIGdldCBhc3luY1N0YXJNb3ZlTmV4dEhlbHBlciB7CiAgICByZXR1cm4gX2FzeW5jU3Rhck1vdmVOZXh0SGVscGVyUHJvY2VkdXJlID8/PQogICAgICAgIGluZGV4LmdldFRvcExldmVsTWVtYmVyKCdkYXJ0OmFzeW5jJywgJ19hc3luY1N0YXJNb3ZlTmV4dEhlbHBlcicpOwogIH0KCiAgUHJvY2VkdXJlIGdldCBhc3luY1N0YWNrVHJhY2VIZWxwZXJQcm9jZWR1cmUgewogICAgcmV0dXJuIF9hc3luY1N0YWNrVHJhY2VIZWxwZXJQcm9jZWR1cmUgPz89CiAgICAgICAgaW5kZXguZ2V0VG9wTGV2ZWxNZW1iZXIoJ2RhcnQ6YXN5bmMnLCAnX2FzeW5jU3RhY2tUcmFjZUhlbHBlcicpOwogIH0KCiAgUHJvY2VkdXJlIGdldCBhc3luY1RoZW5XcmFwcGVySGVscGVyUHJvY2VkdXJlIHsKICAgIHJldHVybiBfYXN5bmNUaGVuV3JhcHBlckhlbHBlclByb2NlZHVyZSA/Pz0KICAgICAgICBpbmRleC5nZXRUb3BMZXZlbE1lbWJlcignZGFydDphc3luYycsICdfYXN5bmNUaGVuV3JhcHBlckhlbHBlcicpOwogIH0KCiAgUHJvY2VkdXJlIGdldCBhd2FpdEhlbHBlclByb2NlZHVyZSB7CiAgICByZXR1cm4gX2F3YWl0SGVscGVyUHJvY2VkdXJlID8/PQogICAgICAgIGluZGV4LmdldFRvcExldmVsTWVtYmVyKCdkYXJ0OmFzeW5jJywgJ19hd2FpdEhlbHBlcicpOwogIH0KCiAgQ2xhc3MgZ2V0IGJvb2xDbGFzcyB7CiAgICByZXR1cm4gX2Jvb2xDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdib29sJyk7CiAgfQoKICBDbGFzcyBnZXQgYXN5bmNBd2FpdENvbXBsZXRlckNsYXNzIHsKICAgIHJldHVybiBfYXN5bmNBd2FpdENvbXBsZXRlckNsYXNzID8/PQogICAgICAgIGluZGV4LmdldENsYXNzKCdkYXJ0OmFzeW5jJywgJ19Bc3luY0F3YWl0Q29tcGxldGVyJyk7CiAgfQoKICBDb25zdHJ1Y3RvciBnZXQgYXN5bmNBd2FpdENvbXBsZXRlckNvbnN0cnVjdG9yIHsKICAgIHJldHVybiBfYXN5bmNBd2FpdENvbXBsZXRlckNvbnN0cnVjdG9yID8/PQogICAgICAgIGluZGV4LmdldE1lbWJlcignZGFydDphc3luYycsICdfQXN5bmNBd2FpdENvbXBsZXRlcicsICcnKTsKICB9CgogIE1lbWJlciBnZXQgY29tcGxldGVPbkFzeW5jUmV0dXJuIHsKICAgIHJldHVybiBfY29tcGxldGVPbkFzeW5jUmV0dXJuUHJvY2VkdXJlID8/PQogICAgICAgIGluZGV4LmdldFRvcExldmVsTWVtYmVyKCdkYXJ0OmFzeW5jJywgJ19jb21wbGV0ZU9uQXN5bmNSZXR1cm4nKTsKICB9CgogIFByb2NlZHVyZSBnZXQgY29tcGxldGVyQ29tcGxldGVFcnJvciB7CiAgICByZXR1cm4gX2NvbXBsZXRlckNvbXBsZXRlRXJyb3IgPz89CiAgICAgICAgaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmFzeW5jJywgJ0NvbXBsZXRlcicsICdjb21wbGV0ZUVycm9yJyk7CiAgfQoKICBNZW1iZXIgZ2V0IGNvbXBsZXRlckZ1dHVyZSB7CiAgICByZXR1cm4gaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmFzeW5jJywgJ0NvbXBsZXRlcicsICdnZXQ6ZnV0dXJlJyk7CiAgfQoKICBMaWJyYXJ5IGdldCBjb3JlTGlicmFyeSB7CiAgICByZXR1cm4gX2NvcmVMaWJyYXJ5ID8/PSBpbmRleC5nZXRMaWJyYXJ5KCdkYXJ0OmNvcmUnKTsKICB9CgogIENsYXNzIGdldCBkb3VibGVDbGFzcyB7CiAgICByZXR1cm4gX2RvdWJsZUNsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ2RvdWJsZScpOwogIH0KCiAgQ2xhc3MgZ2V0IGZ1bmN0aW9uQ2xhc3MgewogICAgcmV0dXJuIF9mdW5jdGlvbkNsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ0Z1bmN0aW9uJyk7CiAgfQoKICBDbGFzcyBnZXQgZnV0dXJlQ2xhc3MgewogICAgcmV0dXJuIF9mdXR1cmVDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdGdXR1cmUnKTsKICB9CgogIENsYXNzIGdldCBmdXR1cmVPckNsYXNzIHsKICAgIHJldHVybiBfZnV0dXJlT3JDbGFzcyA/Pz0gKGluZGV4LnRyeUdldENsYXNzKCdkYXJ0OmNvcmUnLCAnRnV0dXJlT3InKSA/PwogICAgICAgIGluZGV4LmdldENsYXNzKCdkYXJ0OmFzeW5jJywgJ0Z1dHVyZU9yJykpOwogIH0KCiAgUHJvY2VkdXJlIGdldCBpZGVudGljYWxQcm9jZWR1cmUgewogICAgcmV0dXJuIF9pZGVudGljYWxQcm9jZWR1cmUgPz89CiAgICAgICAgaW5kZXguZ2V0VG9wTGV2ZWxNZW1iZXIoJ2RhcnQ6Y29yZScsICdpZGVudGljYWwnKTsKICB9CgogIENsYXNzIGdldCBpbnRDbGFzcyB7CiAgICByZXR1cm4gX2ludENsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ2ludCcpOwogIH0KCiAgQ2xhc3MgZ2V0IGludGVybmFsU3ltYm9sQ2xhc3MgewogICAgcmV0dXJuIF9pbnRlcm5hbFN5bWJvbENsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpfaW50ZXJuYWwnLCAnU3ltYm9sJyk7CiAgfQoKICBDbGFzcyBnZXQgaW52b2NhdGlvbkNsYXNzIHsKICAgIHJldHVybiBfaW52b2NhdGlvbkNsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ0ludm9jYXRpb24nKTsKICB9CgogIENsYXNzIGdldCBpbnZvY2F0aW9uTWlycm9yQ2xhc3MgewogICAgcmV0dXJuIF9pbnZvY2F0aW9uTWlycm9yQ2xhc3MgPz89CiAgICAgICAgaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdfSW52b2NhdGlvbk1pcnJvcicpOwogIH0KCiAgQ29uc3RydWN0b3IgZ2V0IGludm9jYXRpb25NaXJyb3JXaXRoVHlwZUNvbnN0cnVjdG9yIHsKICAgIHJldHVybiBfaW52b2NhdGlvbk1pcnJvcldpdGhUeXBlQ29uc3RydWN0b3IgPz89CiAgICAgICAgaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnX0ludm9jYXRpb25NaXJyb3InLCAnX3dpdGhUeXBlJyk7CiAgfQoKICBDbGFzcyBnZXQgaXRlcmFibGVDbGFzcyB7CiAgICByZXR1cm4gX2l0ZXJhYmxlQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnSXRlcmFibGUnKTsKICB9CgogIENsYXNzIGdldCBpdGVyYXRvckNsYXNzIHsKICAgIHJldHVybiBfaXRlcmF0b3JDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdJdGVyYXRvcicpOwogIH0KCiAgQ2xhc3MgZ2V0IGxpc3RDbGFzcyB7CiAgICByZXR1cm4gX2xpc3RDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdMaXN0Jyk7CiAgfQoKICBQcm9jZWR1cmUgZ2V0IGxpc3RGcm9tQ29uc3RydWN0b3IgewogICAgcmV0dXJuIF9saXN0RnJvbUNvbnN0cnVjdG9yID8/PQogICAgICAgIGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ0xpc3QnLCAnZnJvbScpOwogIH0KCiAgUHJvY2VkdXJlIGdldCBsaXN0VW5tb2RpZmlhYmxlQ29uc3RydWN0b3IgewogICAgcmV0dXJuIF9saXN0VW5tb2RpZmlhYmxlQ29uc3RydWN0b3IgPz89CiAgICAgICAgaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnTGlzdCcsICd1bm1vZGlmaWFibGUnKTsKICB9CgogIENsYXNzIGdldCBzZXRDbGFzcyB7CiAgICByZXR1cm4gX3NldENsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ1NldCcpOwogIH0KCiAgQ2xhc3MgZ2V0IG1hcENsYXNzIHsKICAgIHJldHVybiBfbWFwQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnTWFwJyk7CiAgfQoKICBQcm9jZWR1cmUgZ2V0IG1hcFVubW9kaWZpYWJsZSB7CiAgICByZXR1cm4gX21hcFVubW9kaWZpYWJsZSA/Pz0KICAgICAgICBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6Y29yZScsICdNYXAnLCAndW5tb2RpZmlhYmxlJyk7CiAgfQoKICBMaWJyYXJ5IGdldCBtaXJyb3JzTGlicmFyeSB7CiAgICByZXR1cm4gX21pcnJvcnNMaWJyYXJ5ID8/PSBpbmRleC50cnlHZXRMaWJyYXJ5KCdkYXJ0Om1pcnJvcnMnKTsKICB9CgogIENvbnN0cnVjdG9yIGdldCBub1N1Y2hNZXRob2RFcnJvckRlZmF1bHRDb25zdHJ1Y3RvciB7CiAgICByZXR1cm4gX25vU3VjaE1ldGhvZEVycm9yRGVmYXVsdENvbnN0cnVjdG9yID8/PQogICAgICAgIC8vIFRPRE8ocmVnaXMpOiBSZXBsYWNlICd3aXRoSW52b2NhdGlvbicgd2l0aCAnJyBhZnRlciBkYXJ0MmpzIGlzIGZpeGVkLgogICAgICAgIGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ05vU3VjaE1ldGhvZEVycm9yJywgJ3dpdGhJbnZvY2F0aW9uJyk7CiAgfQoKICBDbGFzcyBnZXQgbnVsbENsYXNzIHsKICAgIHJldHVybiBfbnVsbENsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ051bGwnKTsKICB9CgogIENsYXNzIGdldCBudW1DbGFzcyB7CiAgICByZXR1cm4gX251bUNsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ251bScpOwogIH0KCiAgQ2xhc3MgZ2V0IG9iamVjdENsYXNzIHsKICAgIHJldHVybiBfb2JqZWN0Q2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnT2JqZWN0Jyk7CiAgfQoKICBQcm9jZWR1cmUgZ2V0IG9iamVjdEVxdWFscyB7CiAgICByZXR1cm4gX29iamVjdEVxdWFscyA/Pz0gaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnT2JqZWN0JywgJz09Jyk7CiAgfQoKICBDbGFzcyBnZXQgcHJhZ21hQ2xhc3MgewogICAgcmV0dXJuIF9wcmFnbWFDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdwcmFnbWEnKTsKICB9CgogIEZpZWxkIGdldCBwcmFnbWFOYW1lIHsKICAgIHJldHVybiBfcHJhZ21hTmFtZSA/Pz0gaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAncHJhZ21hJywgJ25hbWUnKTsKICB9CgogIEZpZWxkIGdldCBwcmFnbWFPcHRpb25zIHsKICAgIHJldHVybiBfcHJhZ21hT3B0aW9ucyA/Pz0gaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAncHJhZ21hJywgJ29wdGlvbnMnKTsKICB9CgogIENvbnN0cnVjdG9yIGdldCBwcmFnbWFDb25zdHJ1Y3RvciB7CiAgICByZXR1cm4gX3ByYWdtYUNvbnN0cnVjdG9yID8/PSBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6Y29yZScsICdwcmFnbWEnLCAnXycpOwogIH0KCiAgQ2xhc3MgZ2V0IHN0YWNrVHJhY2VDbGFzcyB7CiAgICByZXR1cm4gX3N0YWNrVHJhY2VDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdTdGFja1RyYWNlJyk7CiAgfQoKICBDbGFzcyBnZXQgc3RyZWFtQ2xhc3MgewogICAgcmV0dXJuIF9zdHJlYW1DbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdTdHJlYW0nKTsKICB9CgogIE1lbWJlciBnZXQgc3RyZWFtSXRlcmF0b3JTdWJzY3JpcHRpb24gewogICAgcmV0dXJuIGluZGV4LmdldE1lbWJlcignZGFydDphc3luYycsICdfU3RyZWFtSXRlcmF0b3InLCAnX3N1YnNjcmlwdGlvbicpOwogIH0KCiAgTWVtYmVyIGdldCBzdHJlYW1JdGVyYXRvckNhbmNlbCB7CiAgICByZXR1cm4gaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmFzeW5jJywgJ19TdHJlYW1JdGVyYXRvcicsICdjYW5jZWwnKTsKICB9CgogIENsYXNzIGdldCBzdHJlYW1JdGVyYXRvckNsYXNzIHsKICAgIHJldHVybiBpbmRleC5nZXRDbGFzcygnZGFydDphc3luYycsICdfU3RyZWFtSXRlcmF0b3InKTsKICB9CgogIENvbnN0cnVjdG9yIGdldCBzdHJlYW1JdGVyYXRvckRlZmF1bHRDb25zdHJ1Y3RvciB7CiAgICByZXR1cm4gX3N0cmVhbUl0ZXJhdG9yRGVmYXVsdENvbnN0cnVjdG9yID8/PQogICAgICAgIGluZGV4LmdldE1lbWJlcignZGFydDphc3luYycsICdfU3RyZWFtSXRlcmF0b3InLCAnJyk7CiAgfQoKICBNZW1iZXIgZ2V0IHN0cmVhbUl0ZXJhdG9yTW92ZU5leHQgewogICAgcmV0dXJuIGluZGV4LmdldE1lbWJlcignZGFydDphc3luYycsICdfU3RyZWFtSXRlcmF0b3InLCAnbW92ZU5leHQnKTsKICB9CgogIE1lbWJlciBnZXQgc3RyZWFtSXRlcmF0b3JDdXJyZW50IHsKICAgIHJldHVybiBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6YXN5bmMnLCAnX1N0cmVhbUl0ZXJhdG9yJywgJ2dldDpjdXJyZW50Jyk7CiAgfQoKICBDbGFzcyBnZXQgc3RyaW5nQ2xhc3MgewogICAgcmV0dXJuIF9zdHJpbmdDbGFzcyA/Pz0gaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdTdHJpbmcnKTsKICB9CgogIENsYXNzIGdldCBzeW1ib2xDbGFzcyB7CiAgICByZXR1cm4gX3N5bWJvbENsYXNzID8/PSBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ1N5bWJvbCcpOwogIH0KCiAgQ29uc3RydWN0b3IgZ2V0IHN5bmNJdGVyYWJsZURlZmF1bHRDb25zdHJ1Y3RvciB7CiAgICByZXR1cm4gX3N5bmNJdGVyYWJsZURlZmF1bHRDb25zdHJ1Y3RvciA/Pz0KICAgICAgICBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6Y29yZScsICdfU3luY0l0ZXJhYmxlJywgJycpOwogIH0KCiAgQ2xhc3MgZ2V0IHN5bmNJdGVyYXRvckNsYXNzIHsKICAgIHJldHVybiBpbmRleC5nZXRDbGFzcygnZGFydDpjb3JlJywgJ19TeW5jSXRlcmF0b3InKTsKICB9CgogIE1lbWJlciBnZXQgc3luY0l0ZXJhdG9yQ3VycmVudCB7CiAgICByZXR1cm4gaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnX1N5bmNJdGVyYXRvcicsICdfY3VycmVudCcpOwogIH0KCiAgTWVtYmVyIGdldCBzeW5jSXRlcmF0b3JZaWVsZEVhY2hJdGVyYWJsZSB7CiAgICByZXR1cm4gaW5kZXguZ2V0TWVtYmVyKCdkYXJ0OmNvcmUnLCAnX1N5bmNJdGVyYXRvcicsICdfeWllbGRFYWNoSXRlcmFibGUnKTsKICB9CgogIENsYXNzIGdldCB0eXBlQ2xhc3MgewogICAgcmV0dXJuIF90eXBlQ2xhc3MgPz89IGluZGV4LmdldENsYXNzKCdkYXJ0OmNvcmUnLCAnVHlwZScpOwogIH0KCiAgQ29uc3RydWN0b3IgZ2V0IGZhbGxUaHJvdWdoRXJyb3JVcmxBbmRMaW5lQ29uc3RydWN0b3IgewogICAgcmV0dXJuIF9mYWxsVGhyb3VnaEVycm9yVXJsQW5kTGluZUNvbnN0cnVjdG9yID8/PQogICAgICAgIGluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ0ZhbGxUaHJvdWdoRXJyb3InLCAnX2NyZWF0ZScpOwogIH0KCiAgUHJvY2VkdXJlIGdldCBib29sRnJvbUVudmlyb25tZW50IHsKICAgIHJldHVybiBfYm9vbEZyb21FbnZpcm9ubWVudCA/Pz0KICAgICAgICBpbmRleC5nZXRNZW1iZXIoJ2RhcnQ6Y29yZScsICdib29sJywgJ2Zyb21FbnZpcm9ubWVudCcpOwogIH0KfQqBiQBOTjwbARMdAUgSPRMQDg4NDRAQDg0SEhAOEhQaBxgQBxQQEAYFARwBGBYUFBMTFhYUExMYGBYUGBogNDQiKiE2Gx4BHgEZFhoWIxgvLSUvMTwtLy0uLyMiAU4bARYVGCIBITsBMzFLBAEdPQQBLE8EATEcQQQBMhxCBAEtRwQBLlEEAUA8SQQBLxxDBAEoL0kEASoxSwQBMS9JBAEyMEoEASclPwQBGD8EAScpPgQBMy9DBAElL0kEASknRQQBH0UEARw7BAEaQwQBHEcEARpDBAEcTTMEASUjOwQBFz0EASJQBAEeSwQBJCY6BAE4NEgEARxHBAEcRwQBGD8EASYkNgQBLiw+BAEXPQQBFz0EASIgPQQBH0QEATg0UU0EARg/BAEXPQQBGkMEAR9LBAEaQwQBGUsEARxRBAEmTwQBHksEARpDBAEqTgQBJEcEASI8BAE1MT4EASZJBAElTAQBGkMEARpDBAEzLzsEASA5BAEjRgQBLVAEARg/BAE6NkUEASYkQQQCAR5wYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnRAc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnX3Rlc3RlZC9wYWNrYWdlX2NvbmZpZy9saWIvcGFja2FnZXMuZGFydImZLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgcGFja2FnZV9jb25maWcucGFja2FnZXM7CgppbXBvcnQgInNyYy9wYWNrYWdlc19pbXBsLmRhcnQiOwoKLy8vIEEgcGFja2FnZSByZXNvbHV0aW9uIHN0cmF0ZWd5LgovLy8KLy8vIEFsbG93cyBjb252ZXJ0aW5nIGEgYHBhY2thZ2U6YCBVUkkgdG8gYSBkaWZmZXJlbnQga2luZCBvZiBVUkkuCi8vLwovLy8gTWF5IGFsc28gYWxsb3cgbGlzdGluZyB0aGUgYXZhaWxhYmxlIHBhY2thZ2VzIGFuZCBjb252ZXJ0aW5nCi8vLyB0byBhIGBNYXA8U3RyaW5nLCBVcmk+YCB0aGF0IGdpdmVzIHRoZSBiYXNlIGxvY2F0aW9uIG9mIGVhY2ggYXZhaWxhYmxlCi8vLyBwYWNrYWdlLiBJbiBzb21lIGNhc2VzIHRoZXJlIGlzIG5vIHdheSB0byBmaW5kIHRoZSBhdmFpbGFibGUgcGFja2FnZXMsCi8vLyBpbiB3aGljaCBjYXNlIFtwYWNrYWdlc10gYW5kIFthc01hcF0gd2lsbCB0aHJvdyBpZiB1c2VkLgovLy8gT25lIHN1Y2ggY2FzZSBpcyBpZiB0aGUgcGFja2FnZXMgYXJlIHJlc29sdmVkIHJlbGF0aXZlIHRvIGEKLy8vIGBwYWNrYWdlcy9gIGRpcmVjdG9yeSBhdmFpbGFibGUgb3ZlciBIVFRQLgphYnN0cmFjdCBjbGFzcyBQYWNrYWdlcyB7CiAgLy8vIEEgW1BhY2thZ2VzXSByZXNvbHZlciBjb250YWluaW5nIG5vIHBhY2thZ2VzLgogIC8vLwogIC8vLyBUaGlzIGNvbnN0YW50IG9iamVjdCBpcyByZXR1cm5lZCBieSBbZmluZF0gYWJvdmUgaWYgbm8KICAvLy8gcGFja2FnZSByZXNvbHV0aW9uIHN0cmF0ZWd5IGlzIGZvdW5kLgogIHN0YXRpYyBjb25zdCBQYWNrYWdlcyBub1BhY2thZ2VzID0gY29uc3QgTm9QYWNrYWdlcygpOwoKICAvLy8gUmVzb2x2ZSBhIHBhY2thZ2UgVVJJIGludG8gYSBub24tcGFja2FnZSBVUkkuCiAgLy8vCiAgLy8vIFRyYW5zbGF0ZXMgYSBgcGFja2FnZTpgIFVSSSwgYWNjb3JkaW5nIHRvIHRoZSBwYWNrYWdlIHJlc29sdXRpb24KICAvLy8gc3RyYXRlZ3ksIGludG8gYSBVUkkgdGhhdCBjYW4gYmUgbG9hZGVkLgogIC8vLyBCeSBkZWZhdWx0LCBvbmx5IGBmaWxlYCwgYGh0dHBgIGFuZCBgaHR0cHNgIFVSSXMgYXJlIHJldHVybmVkLgogIC8vLyBDdXN0b20gYFBhY2thZ2VzYCBvYmplY3RzIG1heSByZXR1cm4gb3RoZXIgVVJJcy4KICAvLy8KICAvLy8gSWYgcmVzb2x1dGlvbiBmYWlscyBiZWNhdXNlIGEgcGFja2FnZSB3aXRoIHRoZSByZXF1ZXN0ZWQgcGFja2FnZSBuYW1lCiAgLy8vIGlzIG5vdCBhdmFpbGFibGUsIHRoZSBbbm90Rm91bmRdIGZ1bmN0aW9uIGlzIGNhbGxlZC4KICAvLy8gSWYgbm8gYG5vdEZvdW5kYCBmdW5jdGlvbiBpcyBwcm92aWRlZCwgaXQgZGVmYXVsdHMgdG8gdGhyb3dpbmcgYW4gZXJyb3IuCiAgLy8vCiAgLy8vIFRoZSBbcGFja2FnZVVyaV0gbXVzdCBiZSBhIHZhbGlkIHBhY2thZ2UgVVJJLgogIFVyaSByZXNvbHZlKFVyaSBwYWNrYWdlVXJpLCB7VXJpIG5vdEZvdW5kKFVyaSBwYWNrYWdlVXJpKX0pOwoKICAvLy8gUmV0dXJuIHRoZSBuYW1lcyBvZiB0aGUgYXZhaWxhYmxlIHBhY2thZ2VzLgogIC8vLwogIC8vLyBSZXR1cm5zIGFuIGl0ZXJhYmxlIHRoYXQgYWxsb3dzIGl0ZXJhdGluZyB0aGUgbmFtZXMgb2YgYXZhaWxhYmxlIHBhY2thZ2VzLgogIC8vLwogIC8vLyBTb21lIGBQYWNrYWdlc2Agb2JqZWN0cyBhcmUgdW5hYmxlIHRvIGZpbmQgdGhlIHBhY2thZ2UgbmFtZXMsCiAgLy8vIGFuZCBnZXR0aW5nIGBwYWNrYWdlc2AgZnJvbSBzdWNoIGEgYFBhY2thZ2VzYCBvYmplY3Qgd2lsbCB0aHJvdy4KICBJdGVyYWJsZTxTdHJpbmc+IGdldCBwYWNrYWdlczsKCiAgLy8vIFJldHVybiB0aGUgbmFtZXMtdG8tYmFzZS1VUkkgbWFwcGluZyBvZiB0aGUgYXZhaWxhYmxlIHBhY2thZ2VzLgogIC8vLwogIC8vLyBSZXR1cm5zIGEgbWFwIGZyb20gcGFja2FnZSBuYW1lIHRvIGEgYmFzZSBVUkkuCiAgLy8vIFRoZSBbcmVzb2x2ZV0gbWV0aG9kIHdpbGwgcmVzb2x2ZSBhIHBhY2thZ2UgVVJJIHdpdGggYSBzcGVjaWZpYyBwYWNrYWdlCiAgLy8vIG5hbWUgdG8gYSBwYXRoIGV4dGVuZGluZyB0aGUgYmFzZSBVUkkgdGhhdCB0aGlzIG1hcCBnaXZlcyBmb3IgdGhhdAogIC8vLyBwYWNrYWdlIG5hbWUuCiAgLy8vCiAgLy8vIFNvbWUgYFBhY2thZ2VzYCBvYmplY3RzIGFyZSB1bmFibGUgdG8gZmluZCB0aGUgcGFja2FnZSBuYW1lcywKICAvLy8gYW5kIGNhbGxpbmcgYGFzTWFwYCBvbiBzdWNoIGEgYFBhY2thZ2VzYCBvYmplY3Qgd2lsbCB0aHJvdy4KICBNYXA8U3RyaW5nLCBVcmk+IGFzTWFwKCk7Cn0KPABOTjwBIQEhASMEQwRBS0s9QC8aNAY9LDkBNAZHL0U3Bkw7TwY0PwEyBlEGREchAUYGNU5JFAZEQhwCASRwYWNrYWdlOnBhY2thZ2VfY29uZmlnL3BhY2thZ2VzLmRhcnRFc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnX3Rlc3RlZC9wYWNrYWdlX2NvbmZpZy9saWIvcGFja2FnZXNfZmlsZS5kYXJ0mJYvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBwYWNrYWdlX2NvbmZpZy5wYWNrYWdlc19maWxlOwoKaW1wb3J0ICJwYWNrYWdlOmNoYXJjb2RlL2FzY2lpLmRhcnQiOwoKaW1wb3J0ICJzcmMvdXRpbC5kYXJ0IiBzaG93IGlzVmFsaWRQYWNrYWdlTmFtZTsKCi8vLyBQYXJzZXMgYSBgLnBhY2thZ2VzYCBmaWxlIGludG8gYSBtYXAgZnJvbSBwYWNrYWdlIG5hbWUgdG8gYmFzZSBVUkkuCi8vLwovLy8gVGhlIFtzb3VyY2VdIGlzIHRoZSBieXRlIGNvbnRlbnQgb2YgYSBgLnBhY2thZ2VzYCBmaWxlLCBhc3N1bWVkIHRvIGJlCi8vLyBVVEYtOCBlbmNvZGVkLiBJbiBwcmFjdGljZSwgYWxsIHNpZ25pZmljYW50IHBhcnRzIG9mIHRoZSBmaWxlIG11c3QgYmUgQVNDSUksCi8vLyBzbyBMYXRpbi0xIG9yIFdpbmRvd3MtMTI1MiBlbmNvZGluZyB3aWxsIGFsc28gd29yayBmaW5lLgovLy8KLy8vIElmIHRoZSBmaWxlIGNvbnRlbnQgaXMgYXZhaWxhYmxlIGFzIGEgc3RyaW5nLCBpdHMgW1N0cmluZy5jb2RlVW5pdHNdIGNhbgovLy8gYmUgdXNlZCBhcyB0aGUgYHNvdXJjZWAgYXJndW1lbnQgb2YgdGhpcyBmdW5jdGlvbi4KLy8vCi8vLyBUaGUgW2Jhc2VMb2NhdGlvbl0gaXMgdXNlZCBhcyBhIGJhc2UgVVJJIHRvIHJlc29sdmUgYWxsIHJlbGF0aXZlCi8vLyBVUkkgcmVmZXJlbmNlcyBhZ2FpbnN0LgovLy8gSWYgdGhlIGNvbnRlbnQgd2FzIHJlYWQgZnJvbSBhIGZpbGUsIGBiYXNlTG9jYXRpb25gIHNob3VsZCBiZSB0aGUKLy8vIGxvY2F0aW9uIG9mIHRoYXQgZmlsZS4KLy8vCi8vLyBSZXR1cm5zIGEgc2ltcGxlIG1hcHBpbmcgZnJvbSBwYWNrYWdlIG5hbWUgdG8gcGFja2FnZSBsb2NhdGlvbi4KTWFwPFN0cmluZywgVXJpPiBwYXJzZShMaXN0PGludD4gc291cmNlLCBVcmkgYmFzZUxvY2F0aW9uKSB7CiAgaW50IGluZGV4ID0gMDsKICBNYXA8U3RyaW5nLCBVcmk+IHJlc3VsdCA9IDxTdHJpbmcsIFVyaT57fTsKICB3aGlsZSAoaW5kZXggPCBzb3VyY2UubGVuZ3RoKSB7CiAgICBib29sIGlzQ29tbWVudCA9IGZhbHNlOwogICAgaW50IHN0YXJ0ID0gaW5kZXg7CiAgICBpbnQgc2VwYXJhdG9ySW5kZXggPSAtMTsKICAgIGludCBlbmQgPSBzb3VyY2UubGVuZ3RoOwogICAgaW50IGNoYXIgPSBzb3VyY2VbaW5kZXgrK107CiAgICBpZiAoY2hhciA9PSAkY3IgfHwgY2hhciA9PSAkbGYpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAoY2hhciA9PSAkY29sb24pIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigiTWlzc2luZyBwYWNrYWdlIG5hbWUiLCBzb3VyY2UsIGluZGV4IC0gMSk7CiAgICB9CiAgICBpc0NvbW1lbnQgPSBjaGFyID09ICRoYXNoOwogICAgd2hpbGUgKGluZGV4IDwgc291cmNlLmxlbmd0aCkgewogICAgICBjaGFyID0gc291cmNlW2luZGV4KytdOwogICAgICBpZiAoY2hhciA9PSAkY29sb24gJiYgc2VwYXJhdG9ySW5kZXggPCAwKSB7CiAgICAgICAgc2VwYXJhdG9ySW5kZXggPSBpbmRleCAtIDE7CiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PSAkY3IgfHwgY2hhciA9PSAkbGYpIHsKICAgICAgICBlbmQgPSBpbmRleCAtIDE7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc0NvbW1lbnQpIGNvbnRpbnVlOwogICAgaWYgKHNlcGFyYXRvckluZGV4IDwgMCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCJObyAnOicgb24gbGluZSIsIHNvdXJjZSwgaW5kZXggLSAxKTsKICAgIH0KICAgIHZhciBwYWNrYWdlTmFtZSA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhzb3VyY2UsIHN0YXJ0LCBzZXBhcmF0b3JJbmRleCk7CiAgICBpZiAoIWlzVmFsaWRQYWNrYWdlTmFtZShwYWNrYWdlTmFtZSkpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigiTm90IGEgdmFsaWQgcGFja2FnZSBuYW1lIiwgcGFja2FnZU5hbWUsIDApOwogICAgfQogICAgdmFyIHBhY2thZ2VVcmkgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoc291cmNlLCBzZXBhcmF0b3JJbmRleCArIDEsIGVuZCk7CiAgICB2YXIgcGFja2FnZUxvY2F0aW9uID0gVXJpLnBhcnNlKHBhY2thZ2VVcmkpOwogICAgcGFja2FnZUxvY2F0aW9uID0gYmFzZUxvY2F0aW9uLnJlc29sdmVVcmkocGFja2FnZUxvY2F0aW9uKTsKICAgIGlmICghcGFja2FnZUxvY2F0aW9uLnBhdGguZW5kc1dpdGgoJy8nKSkgewogICAgICBwYWNrYWdlTG9jYXRpb24gPQogICAgICAgICAgcGFja2FnZUxvY2F0aW9uLnJlcGxhY2UocGF0aDogcGFja2FnZUxvY2F0aW9uLnBhdGggKyAiLyIpOwogICAgfQogICAgaWYgKHJlc3VsdC5jb250YWluc0tleShwYWNrYWdlTmFtZSkpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICJTYW1lIHBhY2thZ2UgbmFtZSBvY2N1cmVkIHR3aWNlLiIsIHNvdXJjZSwgc3RhcnQpOwogICAgfQogICAgcmVzdWx0W3BhY2thZ2VOYW1lXSA9IHBhY2thZ2VMb2NhdGlvbjsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8vIFdyaXRlcyB0aGUgbWFwcGluZyB0byBhIFtTdHJpbmdTaW5rXS4KLy8vCi8vLyBJZiBbY29tbWVudF0gaXMgcHJvdmlkZWQsIHRoZSBvdXRwdXQgd2lsbCBjb250YWluIHRoaXMgY29tbWVudAovLy8gd2l0aCBgIyBgIGluIGZyb250IG9mIGVhY2ggbGluZS4KLy8vIExpbmVzIGFyZSBkZWZpbmVkIGFzIGVuZGluZyBpbiBsaW5lIGZlZWQgKGAnXG4nYCkuIElmIHRoZSBmaW5hbAovLy8gbGluZSBvZiB0aGUgY29tbWVudCBkb2Vzbid0IGVuZCBpbiBhIGxpbmUgZmVlZCwgb25lIHdpbGwgYmUgYWRkZWQuCi8vLwovLy8gSWYgW2Jhc2VVcmldIGlzIHByb3ZpZGVkLCBwYWNrYWdlIGxvY2F0aW9ucyB3aWxsIGJlIG1hZGUgcmVsYXRpdmUKLy8vIHRvIHRoZSBiYXNlIFVSSSwgaWYgcG9zc2libGUsIGJlZm9yZSB3cml0aW5nLgovLy8KLy8vIEFsbCB0aGUga2V5cyBvZiBbcGFja2FnZU1hcHBpbmddIG11c3QgYmUgdmFsaWQgcGFja2FnZSBuYW1lcywKLy8vIGFuZCB0aGUgdmFsdWVzIG11c3QgYmUgVVJJcyB0aGF0IGRvIG5vdCBoYXZlIHRoZSBgcGFja2FnZTpgIHNjaGVtZS4Kdm9pZCB3cml0ZShTdHJpbmdTaW5rIG91dHB1dCwgTWFwPFN0cmluZywgVXJpPiBwYWNrYWdlTWFwcGluZywKICAgIHtVcmkgYmFzZVVyaSwgU3RyaW5nIGNvbW1lbnR9KSB7CiAgaWYgKGJhc2VVcmkgIT0gbnVsbCAmJiAhYmFzZVVyaS5pc0Fic29sdXRlKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShiYXNlVXJpLCAiYmFzZVVyaSIsICJNdXN0IGJlIGFic29sdXRlIik7CiAgfQoKICBpZiAoY29tbWVudCAhPSBudWxsKSB7CiAgICB2YXIgbGluZXMgPSBjb21tZW50LnNwbGl0KCdcbicpOwogICAgaWYgKGxpbmVzLmxhc3QuaXNFbXB0eSkgbGluZXMucmVtb3ZlTGFzdCgpOwogICAgZm9yICh2YXIgY29tbWVudExpbmUgaW4gbGluZXMpIHsKICAgICAgb3V0cHV0LndyaXRlKCcjICcpOwogICAgICBvdXRwdXQud3JpdGVsbihjb21tZW50TGluZSk7CiAgICB9CiAgfSBlbHNlIHsKICAgIG91dHB1dC53cml0ZSgiIyBnZW5lcmF0ZWQgYnkgcGFja2FnZTpwYWNrYWdlX2NvbmZpZyBhdCAiKTsKICAgIG91dHB1dC53cml0ZShuZXcgRGF0ZVRpbWUubm93KCkpOwogICAgb3V0cHV0LndyaXRlbG4oKTsKICB9CgogIHBhY2thZ2VNYXBwaW5nLmZvckVhY2goKFN0cmluZyBwYWNrYWdlTmFtZSwgVXJpIHVyaSkgewogICAgLy8gVmFsaWRhdGUgcGFja2FnZU5hbWUuCiAgICBpZiAoIWlzVmFsaWRQYWNrYWdlTmFtZShwYWNrYWdlTmFtZSkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJyIkcGFja2FnZU5hbWUiIGlzIG5vdCBhIHZhbGlkIHBhY2thZ2UgbmFtZScpOwogICAgfQogICAgaWYgKHVyaS5zY2hlbWUgPT0gInBhY2thZ2UiKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgICAgIlBhY2thZ2UgbG9jYXRpb24gbXVzdCBub3QgYmUgYSBwYWNrYWdlOiBVUkkiLCB1cmkudG9TdHJpbmcoKSk7CiAgICB9CiAgICBvdXRwdXQud3JpdGUocGFja2FnZU5hbWUpOwogICAgb3V0cHV0LndyaXRlKCc6Jyk7CiAgICAvLyBJZiBiYXNlVXJpIHByb3ZpZGVkLCBtYWtlIHVyaSByZWxhdGl2ZS4KICAgIGlmIChiYXNlVXJpICE9IG51bGwpIHsKICAgICAgdXJpID0gX3JlbGF0aXZpemUodXJpLCBiYXNlVXJpKTsKICAgIH0KICAgIG91dHB1dC53cml0ZSh1cmkpOwogICAgaWYgKCF1cmkucGF0aC5lbmRzV2l0aCgnLycpKSB7CiAgICAgIG91dHB1dC53cml0ZSgnLycpOwogICAgfQogICAgb3V0cHV0LndyaXRlbG4oKTsKICB9KTsKfQoKLy8vIEF0dGVtcHRzIHRvIHJldHVybiBhIHJlbGF0aXZlIFVSSSBmb3IgW3VyaV0uCi8vLwovLy8gVGhlIHJlc3VsdCBVUkkgc2F0aXNmaWVzIGBiYXNlVXJpLnJlc29sdmVVcmkocmVzdWx0KSA9PSB1cmlgLAovLy8gYnV0IG1heSBiZSByZWxhdGl2ZS4KLy8vIFRoZSBgYmFzZVVyaWAgbXVzdCBiZSBhYnNvbHV0ZS4KVXJpIF9yZWxhdGl2aXplKFVyaSB1cmksIFVyaSBiYXNlVXJpKSB7CiAgYXNzZXJ0KGJhc2VVcmkuaXNBYnNvbHV0ZSk7CiAgaWYgKHVyaS5oYXNRdWVyeSB8fCB1cmkuaGFzRnJhZ21lbnQpIHsKICAgIHVyaSA9IG5ldyBVcmkoCiAgICAgICAgc2NoZW1lOiB1cmkuc2NoZW1lLAogICAgICAgIHVzZXJJbmZvOiB1cmkuaGFzQXV0aG9yaXR5ID8gdXJpLnVzZXJJbmZvIDogbnVsbCwKICAgICAgICBob3N0OiB1cmkuaGFzQXV0aG9yaXR5ID8gdXJpLmhvc3QgOiBudWxsLAogICAgICAgIHBvcnQ6IHVyaS5oYXNBdXRob3JpdHkgPyB1cmkucG9ydCA6IG51bGwsCiAgICAgICAgcGF0aDogdXJpLnBhdGgpOwogIH0KCiAgLy8gQWxyZWFkeSByZWxhdGl2ZS4gV2UgYXNzdW1lIHRoZSBjYWxsZXIga25vd3Mgd2hhdCB0aGV5IGFyZSBkb2luZy4KICBpZiAoIXVyaS5pc0Fic29sdXRlKSByZXR1cm4gdXJpOwoKICBpZiAoYmFzZVVyaS5zY2hlbWUgIT0gdXJpLnNjaGVtZSkgewogICAgcmV0dXJuIHVyaTsKICB9CgogIC8vIElmIGF1dGhvcml0eSBkaWZmZXJzLCB3ZSBjb3VsZCByZW1vdmUgdGhlIHNjaGVtZSwgYnV0IGl0J3Mgbm90IHdvcnRoIGl0LgogIGlmICh1cmkuaGFzQXV0aG9yaXR5ICE9IGJhc2VVcmkuaGFzQXV0aG9yaXR5KSByZXR1cm4gdXJpOwogIGlmICh1cmkuaGFzQXV0aG9yaXR5KSB7CiAgICBpZiAodXJpLnVzZXJJbmZvICE9IGJhc2VVcmkudXNlckluZm8gfHwKICAgICAgICB1cmkuaG9zdC50b0xvd2VyQ2FzZSgpICE9IGJhc2VVcmkuaG9zdC50b0xvd2VyQ2FzZSgpIHx8CiAgICAgICAgdXJpLnBvcnQgIT0gYmFzZVVyaS5wb3J0KSB7CiAgICAgIHJldHVybiB1cmk7CiAgICB9CiAgfQoKICBiYXNlVXJpID0gYmFzZVVyaS5ub3JtYWxpemVQYXRoKCk7CiAgTGlzdDxTdHJpbmc+IGJhc2UgPSBiYXNlVXJpLnBhdGhTZWdtZW50cy50b0xpc3QoKTsKICBpZiAoYmFzZS5pc05vdEVtcHR5KSB7CiAgICBiYXNlID0gbmV3IExpc3Q8U3RyaW5nPi5mcm9tKGJhc2UpLi5yZW1vdmVMYXN0KCk7CiAgfQogIHVyaSA9IHVyaS5ub3JtYWxpemVQYXRoKCk7CiAgTGlzdDxTdHJpbmc+IHRhcmdldCA9IHVyaS5wYXRoU2VnbWVudHMudG9MaXN0KCk7CiAgaWYgKHRhcmdldC5pc05vdEVtcHR5ICYmIHRhcmdldC5sYXN0LmlzRW1wdHkpIHRhcmdldC5yZW1vdmVMYXN0KCk7CiAgaW50IGluZGV4ID0gMDsKICB3aGlsZSAoaW5kZXggPCBiYXNlLmxlbmd0aCAmJiBpbmRleCA8IHRhcmdldC5sZW5ndGgpIHsKICAgIGlmIChiYXNlW2luZGV4XSAhPSB0YXJnZXRbaW5kZXhdKSB7CiAgICAgIGJyZWFrOwogICAgfQogICAgaW5kZXgrKzsKICB9CiAgaWYgKGluZGV4ID09IGJhc2UubGVuZ3RoKSB7CiAgICBpZiAoaW5kZXggPT0gdGFyZ2V0Lmxlbmd0aCkgewogICAgICByZXR1cm4gbmV3IFVyaShwYXRoOiAiLi8iKTsKICAgIH0KICAgIHJldHVybiBuZXcgVXJpKHBhdGg6IHRhcmdldC5za2lwKGluZGV4KS5qb2luKCcvJykpOwogIH0gZWxzZSBpZiAoaW5kZXggPiAwKSB7CiAgICByZXR1cm4gbmV3IFVyaSgKICAgICAgICBwYXRoOiAnLi4vJyAqIChiYXNlLmxlbmd0aCAtIGluZGV4KSArIHRhcmdldC5za2lwKGluZGV4KS5qb2luKCcvJykpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdXJpOwogIH0KfQqAvgBOTjwBJgEmATABSARKUT0ETTcERRxGGwREPREtIhwXHR0gJhAGGkwGHyQeMiQvGQ8IBh0eRgZPLE0GUDFALxhFBishPgYrBBECASoEQyVERwRGMgRCSD8lMEsEARklMCUaIwYLPyYWBAE5HSxNBiMlSgYfFy8bJwYXIxkGFgYCATEEQhkkKB4pExw6MjIZBAFHIwEmEAQBTjwaLEAkEgYEASU1GTYEHTNFETkoDQYNBB4iIgY4GhRNCxAEAgEpcGFja2FnZTpwYWNrYWdlX2NvbmZpZy9wYWNrYWdlc19maWxlLmRhcnRJc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnX3Rlc3RlZC9wYWNrYWdlX2NvbmZpZy9saWIvc3JjL3BhY2thZ2VzX2ltcGwuZGFydIxNLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBJbXBsZW1lbnRhdGlvbnMgb2YgW1BhY2thZ2VzXSB0aGF0IG1heSBiZSB1c2VkIGluIGVpdGhlciBzZXJ2ZXIgb3IgYnJvd3NlcgovLy8gYmFzZWQgYXBwbGljYXRpb25zLiBGb3IgaW1wbGVtZW50YXRpb25zIHRoYXQgY2FuIG9ubHkgcnVuIGluIHRoZSBicm93c2VyLAovLy8gc2VlIFtwYWNrYWdlX2NvbmZpZy5wYWNrYWdlc19pb19pbXBsXS4KbGlicmFyeSBwYWNrYWdlX2NvbmZpZy5wYWNrYWdlc19pbXBsOwoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iIHNob3cgVW5tb2RpZmlhYmxlTWFwVmlldzsKCmltcG9ydCAiLi4vcGFja2FnZXMuZGFydCI7CmltcG9ydCAidXRpbC5kYXJ0IiBzaG93IGNoZWNrVmFsaWRQYWNrYWdlVXJpOwoKLy8vIEEgW1BhY2thZ2VzXSBudWxsLW9iamVjdC4KY2xhc3MgTm9QYWNrYWdlcyBpbXBsZW1lbnRzIFBhY2thZ2VzIHsKICBjb25zdCBOb1BhY2thZ2VzKCk7CgogIFVyaSByZXNvbHZlKFVyaSBwYWNrYWdlVXJpLCB7VXJpIG5vdEZvdW5kKFVyaSBwYWNrYWdlVXJpKX0pIHsKICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGNoZWNrVmFsaWRQYWNrYWdlVXJpKHBhY2thZ2VVcmkpOwogICAgaWYgKG5vdEZvdW5kICE9IG51bGwpIHJldHVybiBub3RGb3VuZChwYWNrYWdlVXJpKTsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgIHBhY2thZ2VVcmksICJwYWNrYWdlVXJpIiwgJ05vIHBhY2thZ2UgbmFtZWQgIiRwYWNrYWdlTmFtZSInKTsKICB9CgogIEl0ZXJhYmxlPFN0cmluZz4gZ2V0IHBhY2thZ2VzID0+IG5ldyBJdGVyYWJsZTxTdHJpbmc+LmVtcHR5KCk7CgogIE1hcDxTdHJpbmcsIFVyaT4gYXNNYXAoKSA9PiBjb25zdCA8U3RyaW5nLCBVcmk+e307Cn0KCi8vLyBCYXNlIGNsYXNzIGZvciBbUGFja2FnZXNdIGltcGxlbWVudGF0aW9ucy4KLy8vCi8vLyBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIFtyZXNvbHZlXSBtZXRob2QgaW4gdGVybXMgb2YgYSBwcml2YXRlCi8vLyBtZW1iZXIKYWJzdHJhY3QgY2xhc3MgUGFja2FnZXNCYXNlIGltcGxlbWVudHMgUGFja2FnZXMgewogIFVyaSByZXNvbHZlKFVyaSBwYWNrYWdlVXJpLCB7VXJpIG5vdEZvdW5kKFVyaSBwYWNrYWdlVXJpKX0pIHsKICAgIHBhY2thZ2VVcmkgPSBwYWNrYWdlVXJpLm5vcm1hbGl6ZVBhdGgoKTsKICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGNoZWNrVmFsaWRQYWNrYWdlVXJpKHBhY2thZ2VVcmkpOwogICAgVXJpIHBhY2thZ2VCYXNlID0gZ2V0QmFzZShwYWNrYWdlTmFtZSk7CiAgICBpZiAocGFja2FnZUJhc2UgPT0gbnVsbCkgewogICAgICBpZiAobm90Rm91bmQgIT0gbnVsbCkgcmV0dXJuIG5vdEZvdW5kKHBhY2thZ2VVcmkpOwogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICAgIHBhY2thZ2VVcmksICJwYWNrYWdlVXJpIiwgJ05vIHBhY2thZ2UgbmFtZWQgIiRwYWNrYWdlTmFtZSInKTsKICAgIH0KICAgIFN0cmluZyBwYWNrYWdlUGF0aCA9IHBhY2thZ2VVcmkucGF0aC5zdWJzdHJpbmcocGFja2FnZU5hbWUubGVuZ3RoICsgMSk7CiAgICByZXR1cm4gcGFja2FnZUJhc2UucmVzb2x2ZShwYWNrYWdlUGF0aCk7CiAgfQoKICAvLy8gRmluZCBhIGJhc2UgbG9jYXRpb24gZm9yIGEgcGFja2FnZSBuYW1lLgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiBubyBwYWNrYWdlIGV4aXN0cyB3aXRoIHRoYXQgbmFtZSwgYW5kIHRoYXQgY2FuIGJlCiAgLy8vIGRldGVybWluZWQuCiAgVXJpIGdldEJhc2UoU3RyaW5nIHBhY2thZ2VOYW1lKTsKfQoKLy8vIEEgW1BhY2thZ2VzXSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBhbiBleGlzdGluZyBtYXAuCmNsYXNzIE1hcFBhY2thZ2VzIGV4dGVuZHMgUGFja2FnZXNCYXNlIHsKICBmaW5hbCBNYXA8U3RyaW5nLCBVcmk+IF9tYXBwaW5nOwogIE1hcFBhY2thZ2VzKHRoaXMuX21hcHBpbmcpOwoKICBVcmkgZ2V0QmFzZShTdHJpbmcgcGFja2FnZU5hbWUpID0+IF9tYXBwaW5nW3BhY2thZ2VOYW1lXTsKCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgcGFja2FnZXMgPT4gX21hcHBpbmcua2V5czsKCiAgTWFwPFN0cmluZywgVXJpPiBhc01hcCgpID0+IG5ldyBVbm1vZGlmaWFibGVNYXBWaWV3PFN0cmluZywgVXJpPihfbWFwcGluZyk7Cn0KCi8vLyBBIFtQYWNrYWdlc10gaW1wbGVtZW50YXRpb24gYmFzZWQgb24gYSByZW1vdGUgKGUuZy4sIEhUVFApIGRpcmVjdG9yeS4KLy8vCi8vLyBUaGVyZSBpcyBubyB3YXkgdG8gZGV0ZWN0IHdoaWNoIHBhY2thZ2VzIGV4aXN0IHNob3J0IG9mIHRyeWluZyB0byB1c2UKLy8vIHRoZW0uIFlvdSBjYW4ndCBuZWNlc3NhcmlseSBjaGVjayB3aGV0aGVyIGEgZGlyZWN0b3J5IGV4aXN0cywKLy8vIGV4Y2VwdCBieSBjaGVja2luZyBmb3IgYSBrbm93IGZpbGUgaW4gdGhlIGRpcmVjdG9yeS4KY2xhc3MgTm9uRmlsZVBhY2thZ2VzRGlyZWN0b3J5UGFja2FnZXMgZXh0ZW5kcyBQYWNrYWdlc0Jhc2UgewogIGZpbmFsIFVyaSBfcGFja2FnZUJhc2U7CiAgTm9uRmlsZVBhY2thZ2VzRGlyZWN0b3J5UGFja2FnZXModGhpcy5fcGFja2FnZUJhc2UpOwoKICBVcmkgZ2V0QmFzZShTdHJpbmcgcGFja2FnZU5hbWUpID0+IF9wYWNrYWdlQmFzZS5yZXNvbHZlKCIkcGFja2FnZU5hbWUvIik7CgogIEVycm9yIF9mYWlsTGlzdGluZ1BhY2thZ2VzKCkgewogICAgcmV0dXJuIG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJDYW5ub3QgbGlzdCBwYWNrYWdlcyBmb3IgYSAke19wYWNrYWdlQmFzZS5zY2hlbWV9OiAiCiAgICAgICAgImJhc2VkIHBhY2thZ2Ugcm9vdCIpOwogIH0KCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgcGFja2FnZXMgewogICAgdGhyb3cgX2ZhaWxMaXN0aW5nUGFja2FnZXMoKTsKICB9CgogIE1hcDxTdHJpbmcsIFVyaT4gYXNNYXAoKSB7CiAgICB0aHJvdyBfZmFpbExpc3RpbmdQYWNrYWdlcygpOwogIH0KfQpeAE5OPAFPTismATMBGy4BHicWAUA7NyNGBAFBATUCAS8ERQsyQC07LB85JUgGTC0EAS8GShIjAgE6KSMeATwBMgFOAgFKBEpCOT4aNwFMASEhPh8EASIiBAEdIgQCAS1wYWNrYWdlOnBhY2thZ2VfY29uZmlnL3NyYy9wYWNrYWdlc19pbXBsLmRhcnRIc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2FwaV9wcm90b3R5cGUvdGVybWluYWxfY29sb3Jfc3VwcG9ydC5kYXJ0jSsvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmcm9udF9lbmQudGVybWluYWxfY29sb3Jfc3VwcG9ydDsKCmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IGpzb25FbmNvZGU7CgppbXBvcnQgJ2RhcnQ6aW8nIHNob3cgUGxhdGZvcm0sIFByb2Nlc3MsIFByb2Nlc3NSZXN1bHQsIHN0ZGVyciwgc3Rkb3V0OwoKaW1wb3J0ICcuLi9mYXN0YS9jb2xvcnMuZGFydCcgc2hvdyBBTExfQ09ERVMsIFRFUk1JTkFMX0NBUEFCSUxJVElFUzsKCmltcG9ydCAnZGlhZ25vc3RpY19tZXNzYWdlLmRhcnQnIHNob3cgRGlhZ25vc3RpY01lc3NhZ2U7CgovLy8gVHJ1ZSBpZiB3ZSBzaG91bGQgZW5hYmxlIGNvbG9ycyBpbiBvdXRwdXQuCi8vLwovLy8gV2UgZW5hYmxlIGNvbG9ycyBvbmx5IHdoZW4gYm90aCBbc3Rkb3V0XSBhbmQgW3N0ZGVycl0gc3VwcG9ydCBBTlNJIGVzY2FwZXMuCmZpbmFsIGJvb2wgZW5hYmxlVGVybWluYWxDb2xvcnMgPSBfY29tcHV0ZUVuYWJsZUNvbG9ycygpOwoKdm9pZCBwcmludERpYWdub3N0aWNNZXNzYWdlKAogICAgRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSwgdm9pZCBGdW5jdGlvbihTdHJpbmcpIHByaW50bG4pIHsKICBpZiAoZW5hYmxlVGVybWluYWxDb2xvcnMpIHsKICAgIG1lc3NhZ2UuYW5zaUZvcm1hdHRlZC5mb3JFYWNoKHByaW50bG4pOwogIH0gZWxzZSB7CiAgICBtZXNzYWdlLnBsYWluVGV4dEZvcm1hdHRlZC5mb3JFYWNoKHByaW50bG4pOwogIH0KfQoKLy8vIE9uIFdpbmRvd3MsIGNvbG9ycyBhcmUgZW5hYmxlZCBpZiBib3RoIHN0ZG91dCBhbmQgc3RkZXJyIHN1cHBvcnRzIEFOU0kKLy8vIGVzY2FwZXMuICBPbiBvdGhlciBwbGF0Zm9ybXMsIHdlIHJlbHkgb24gdGhlIGV4dGVybmFsIHByb2dyYW1zIGB0dHlgIGFuZAovLy8gYHRwdXRgIHRvIGNvbXB1dGUgaWYgQU5TSSBjb2xvcnMgYXJlIHN1cHBvcnRlZC4KYm9vbCBfY29tcHV0ZUVuYWJsZUNvbG9ycygpIHsKICBjb25zdCBib29sIGRlYnVnID0KICAgICAgY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoImZyb250X2VuZC5kZWJ1Z19jb21wdXRlX2VuYWJsZV9jb2xvcnMiKTsKCiAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgaWYgKCFzdGRvdXQuc3VwcG9ydHNBbnNpRXNjYXBlcyB8fCAhc3RkZXJyLnN1cHBvcnRzQW5zaUVzY2FwZXMpIHsKICAgICAgLy8gSW4gdGhpcyBjYXNlLCBlaXRoZXIgW3N0ZG91dF0gb3IgW3N0ZGVycl0gZGlkIG5vdCBzdXBwb3J0IHRoZSBwcm9wZXJ0eQogICAgICAvLyBgc3VwcG9ydHNBbnNpRXNjYXBlc2AuIFNpbmNlIHdlIGRvIG5vdCBoYXZlIGFub3RoZXIgd2F5IHRvIGRldGVybWluZQogICAgICAvLyBzdXBwb3J0IGZvciBjb2xvcnMsIHdlIGRpc2FibGUgdGhlbS4KICAgICAgaWYgKGRlYnVnKSB7CiAgICAgICAgcHJpbnQoIk5vdCBlbmFibGluZyBjb2xvcnMgYXMgQU5TSSBpcyBub3Qgc3VwcG9ydGVkLiIpOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChkZWJ1ZykgewogICAgICBwcmludCgiRW5hYmxpbmcgY29sb3JzIGFzIE9TIGlzIFdpbmRvd3MuIik7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIFdlIGhhdmUgdG8gY2hlY2sgaWYgdGhlIHRlcm1pbmFsIGFjdHVhbGx5IHN1cHBvcnRzIGNvbG9ycy4gQ3VycmVudGx5LCB0bwogIC8vIGF2b2lkIGxpbmtpbmcgdGhlIERhcnQgVk0gd2l0aCBuY3Vyc2VzLCBBTlNJIGVzY2FwZSBzdXBwb3J0IGlzIHJlZHVjZWQgdG8KICAvLyBgUGxhdGZvcm0uZW52aXJvbm1lbnRbJ1RFUk0nXS5jb250YWlucygieHRlcm0iKWAuCgogIC8vIENoZWNrIGlmIHN0ZGluIGlzIGEgdGVybWluYWwgKFRUWSkuCiAgUHJvY2Vzc1Jlc3VsdCByZXN1bHQgPQogICAgICBQcm9jZXNzLnJ1blN5bmMoIi9iaW4vc2giLCBbIi1jIiwgInR0eSA+IC9kZXYvbnVsbCAyPiAvZGV2L251bGwiXSk7CgogIGlmIChyZXN1bHQuZXhpdENvZGUgIT0gMCkgewogICAgaWYgKGRlYnVnKSB7CiAgICAgIHByaW50KCJOb3QgZW5hYmxpbmcgY29sb3JzLCBzdGRpbiBpc24ndCBhIHRlcm1pbmFsLiIpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gVGhlIGAtU2Agb3B0aW9uIG9mIGB0cHV0YCBhbGxvd3MgdXMgdG8gcXVlcnkgbXVsdGlwbGUgY2FwYWJpbGl0aWVzIGF0CiAgLy8gb25jZS4KICByZXN1bHQgPSBQcm9jZXNzLnJ1blN5bmMoCiAgICAgICIvYmluL3NoIiwgWyItYyIsICJwcmludGYgJyVzJyAnJFRFUk1JTkFMX0NBUEFCSUxJVElFUycgfCB0cHV0IC1TIl0pOwoKICBpZiAocmVzdWx0LmV4aXRDb2RlICE9IDApIHsKICAgIGlmIChkZWJ1ZykgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgcnVubmluZyB0cHV0IGZhaWxlZC4iKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIExpc3Q8U3RyaW5nPiBsaW5lcyA9IHJlc3VsdC5zdGRvdXQuc3BsaXQoIlxuIik7CgogIGlmIChsaW5lcy5sZW5ndGggIT0gMikgewogICAgaWYgKGRlYnVnKSB7CiAgICAgIHByaW50KCJOb3QgZW5hYmxpbmcgY29sb3JzLCB1bmV4cGVjdGVkIG91dHB1dCBmcm9tIHRwdXQ6ICIKICAgICAgICAgICIke2pzb25FbmNvZGUocmVzdWx0LnN0ZG91dCl9LiIpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgU3RyaW5nIG51bWJlck9mQ29sb3JzID0gbGluZXNbMF07CiAgaWYgKChpbnQudHJ5UGFyc2UobnVtYmVyT2ZDb2xvcnMpID8/IC0xKSA8IDgpIHsKICAgIGlmIChkZWJ1ZykgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgbGVzcyB0aGFuIDggY29sb3JzIHN1cHBvcnRlZDogIgogICAgICAgICAgIiR7anNvbkVuY29kZShudW1iZXJPZkNvbG9ycyl9LiIpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgU3RyaW5nIGFsbENvZGVzID0gbGluZXNbMV0udHJpbSgpOwogIGlmIChBTExfQ09ERVMgIT0gYWxsQ29kZXMpIHsKICAgIGlmIChkZWJ1ZykgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgY29sb3IgY29kZXMgZG9uJ3QgbWF0Y2g6ICIKICAgICAgICAgICIke2pzb25FbmNvZGUoQUxMX0NPREVTKX0gIT0gJHtqc29uRW5jb2RlKGFsbENvZGVzKX0uIik7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpZiAoZGVidWcpIHsKICAgIHByaW50KCJFbmFibGluZyBjb2xvcnMuIik7CiAgfQogIHJldHVybiB0cnVlOwp9CnEATk48ASoBJwFIAUUBOQEvBFA6AR1AHiwLMQQCAUtNNB4VSwEcRlBOLhNACBQGETIGEQQBTk83ASkZSgEeET0GEgQBSwscTAEeEToGEgQBMgEbEUEsBhIEASQyEUItBhIEASUfET1DBhIEAQ8fBA8CAT9wYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS90ZXJtaW5hbF9jb2xvcl9zdXBwb3J0LmRhcnRAc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2NvbW1hbmRfbGluZV9yZXBvcnRpbmcuZGFydJehLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBQcm92aWRlcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIHJlcG9ydCBhbmQgZm9ybWF0IG1ldGhvZHMgb2YKLy8vIFtDb21waWxlckNvbnRleHRdIHRoYXQgYXJlIHN1aXRhYmxlIGZvciBjb21tYW5kLWxpbmUgdG9vbHMuIFRoZSBtZXRob2RzIGluCi8vLyB0aGlzIGxpYnJhcnkgYXJlbid0IGludGVuZGVkIHRvIGJlIGNhbGxlZCBkaXJlY3RseSwgaW5zdGVhZCwgb25lIHNob3VsZCB1c2UKLy8vIFtDb21waWxlckNvbnRleHRdLgpsaWJyYXJ5IGZhc3RhLmNvbW1hbmRfbGluZV9yZXBvcnRpbmc7CgppbXBvcnQgJ2RhcnQ6bWF0aCcgc2hvdyBtaW47CgppbXBvcnQgJ2RhcnQ6dHlwZWRfZGF0YScgc2hvdyBVaW50OExpc3Q7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IExvY2F0aW9uLCBUcmVlTm9kZTsKCmltcG9ydCAnLi4vY29tcHV0ZV9wbGF0Zm9ybV9iaW5hcmllc19sb2NhdGlvbi5kYXJ0JyBzaG93IHRyYW5zbGF0ZVNkazsKCmltcG9ydCAnY29sb3JzLmRhcnQnIHNob3cgZ3JlZW4sIG1hZ2VudGEsIHJlZDsKCmltcG9ydCAnY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmltcG9ydCAnY3Jhc2guZGFydCcgc2hvdyBDcmFzaCwgc2FmZVRvU3RyaW5nOwoKaW1wb3J0ICdmYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IExvY2F0ZWRNZXNzYWdlOwoKaW1wb3J0ICdtZXNzYWdlcy5kYXJ0JyBzaG93IGdldExvY2F0aW9uLCBnZXRTb3VyY2VMaW5lOwoKaW1wb3J0ICdwcm9ibGVtcy5kYXJ0JyBzaG93IHVuaGFuZGxlZDsKCmltcG9ydCAncmVzb2x2ZV9pbnB1dF91cmkuZGFydCcgc2hvdyBpc1dpbmRvd3M7CgppbXBvcnQgJ3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHksIHNldmVyaXR5UHJlZml4ZXM7CgppbXBvcnQgJ3NjYW5uZXIvY2hhcmFjdGVycy5kYXJ0JyBzaG93ICRDQVJFVCwgJFNQQUNFLCAkVEFCOwoKaW1wb3J0ICd1dGlsL3JlbGF0aXZpemUuZGFydCcgc2hvdyByZWxhdGl2aXplVXJpOwoKY29uc3QgYm9vbCBoaWRlV2FybmluZ3MgPSBmYWxzZTsKCi8vLyBGb3JtYXRzIFttZXNzYWdlXSBhcyBhIHN0cmluZyB0aGF0IGlzIHN1aXRhYmxlIGZvciBvdXRwdXQgZnJvbSBhCi8vLyBjb21tYW5kLWxpbmUgdG9vbC4gVGhpcyBpbmNsdWRlcyBzb3VyY2Ugc25pcHBldHMgYW5kIGRpZmZlcmVudCBjb2xvcnMgYmFzZWQKLy8vIG9uIFtzZXZlcml0eV0uClN0cmluZyBmb3JtYXQoTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwgU2V2ZXJpdHkgc2V2ZXJpdHksIHtMb2NhdGlvbiBsb2NhdGlvbn0pIHsKICB0cnkgewogICAgaW50IGxlbmd0aCA9IG1lc3NhZ2UubGVuZ3RoOwogICAgaWYgKGxlbmd0aCA8IDEpIHsKICAgICAgLy8gVE9ETyhhaGUpOiBUaHJvdyBpbiB0aGlzIHNpdHVhdGlvbi4gSXQgaXMgbm9ybWFsbHkgYW4gZXJyb3IgY2F1c2VkIGJ5CiAgICAgIC8vIGVtcHR5IG5hbWVzLgogICAgICBsZW5ndGggPSAxOwogICAgfQogICAgU3RyaW5nIHByZWZpeCA9IHNldmVyaXR5UHJlZml4ZXNbc2V2ZXJpdHldOwogICAgU3RyaW5nIHRleHQgPQogICAgICAgIHByZWZpeCA9PSBudWxsID8gbWVzc2FnZS5tZXNzYWdlIDogIiRwcmVmaXg6ICR7bWVzc2FnZS5tZXNzYWdlfSI7CiAgICBpZiAobWVzc2FnZS50aXAgIT0gbnVsbCkgewogICAgICB0ZXh0ICs9ICJcbiR7bWVzc2FnZS50aXB9IjsKICAgIH0KICAgIGlmIChDb21waWxlckNvbnRleHQuZW5hYmxlQ29sb3JzKSB7CiAgICAgIHN3aXRjaCAoc2V2ZXJpdHkpIHsKICAgICAgICBjYXNlIFNldmVyaXR5LmVycm9yOgogICAgICAgIGNhc2UgU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtOgogICAgICAgICAgdGV4dCA9IHJlZCh0ZXh0KTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIFNldmVyaXR5Lndhcm5pbmc6CiAgICAgICAgICB0ZXh0ID0gbWFnZW50YSh0ZXh0KTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIFNldmVyaXR5LmNvbnRleHQ6CiAgICAgICAgICB0ZXh0ID0gZ3JlZW4odGV4dCk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiB1bmhhbmRsZWQoIiRzZXZlcml0eSIsICJmb3JtYXQiLCAtMSwgbnVsbCk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAobWVzc2FnZS51cmkgIT0gbnVsbCkgewogICAgICBTdHJpbmcgcGF0aCA9CiAgICAgICAgICByZWxhdGl2aXplVXJpKFVyaS5iYXNlLCB0cmFuc2xhdGVTZGsobWVzc2FnZS51cmkpLCBpc1dpbmRvd3MpOwogICAgICBpbnQgb2Zmc2V0ID0gbWVzc2FnZS5jaGFyT2Zmc2V0OwogICAgICBsb2NhdGlvbiA/Pz0gKG9mZnNldCA9PSAtMSA/IG51bGwgOiBnZXRMb2NhdGlvbihtZXNzYWdlLnVyaSwgb2Zmc2V0KSk7CiAgICAgIGlmIChsb2NhdGlvbj8ubGluZSA9PSBUcmVlTm9kZS5ub09mZnNldCkgewogICAgICAgIGxvY2F0aW9uID0gbnVsbDsKICAgICAgfQogICAgICBTdHJpbmcgc291cmNlTGluZSA9IGdldFNvdXJjZUxpbmUobG9jYXRpb24pOwogICAgICBpZiAoc291cmNlTGluZSA9PSBudWxsKSB7CiAgICAgICAgc291cmNlTGluZSA9ICIiOwogICAgICB9IGVsc2UgaWYgKHNvdXJjZUxpbmUuaXNOb3RFbXB0eSkgewogICAgICAgIC8vIFRPRE8oYXNrZXNjKTogTXVjaCBtb3JlIGNvdWxkIGJlIGRvbmUgdG8gaW5kZW50IHByb3Blcmx5IGluIHRoZQogICAgICAgIC8vIHByZXNlbmNlIG9mIGFsbCBzb3J0cyBvZiB1bmljb2RlIHdlaXJkbmVzcy4KICAgICAgICAvLyBUaGlzIGhhbmRsaW5nIGNvdmVycyB0aGUgY29tbW9uIGNhc2Ugb2Ygc2luZ2xlLXdpZHRoIGNoYXJhY3RlcnMKICAgICAgICAvLyBpbmRlbnRlZCB3aXRoIHNwYWNlcyBhbmQvb3IgdGFicywgdXNpbmcgbm8gc3Vycm9nYXRlcy4KICAgICAgICBpbnQgaW5kZW50TGVuZ3RoID0gbG9jYXRpb24uY29sdW1uIC0gMTsKICAgICAgICBVaW50OExpc3QgaW5kZW50YXRpb24gPSBuZXcgVWludDhMaXN0KGluZGVudExlbmd0aCArIGxlbmd0aCkKICAgICAgICAgIC4uZmlsbFJhbmdlKDAsIGluZGVudExlbmd0aCwgJFNQQUNFKQogICAgICAgICAgLi5maWxsUmFuZ2UoaW5kZW50TGVuZ3RoLCBpbmRlbnRMZW5ndGggKyBsZW5ndGgsICRDQVJFVCk7CiAgICAgICAgaW50IGxlbmd0aEluU291cmNlTGluZSA9IG1pbihpbmRlbnRhdGlvbi5sZW5ndGgsIHNvdXJjZUxpbmUubGVuZ3RoKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aEluU291cmNlTGluZTsgaSsrKSB7CiAgICAgICAgICBpZiAoc291cmNlTGluZS5jb2RlVW5pdEF0KGkpID09ICRUQUIpIHsKICAgICAgICAgICAgaW5kZW50YXRpb25baV0gPSAkVEFCOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBTdHJpbmcgcG9pbnRlciA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhpbmRlbnRhdGlvbik7CiAgICAgICAgaWYgKHBvaW50ZXIubGVuZ3RoID4gc291cmNlTGluZS5sZW5ndGgpIHsKICAgICAgICAgIC8vIFRydW5jYXRlIHRoZSBjYXJldHMgdG8gaGFuZGxlIG1lc3NhZ2VzIHRoYXQgc3BhbiBtdWx0aXBsZSBsaW5lcy4KICAgICAgICAgIGludCBwb2ludGVyTGVuZ3RoID0gc291cmNlTGluZS5sZW5ndGg7CiAgICAgICAgICAvLyBBZGQgb25lIHRvIGNvdmVyIHRoZSBjYXNlIG9mIGEgcGFyc2VyIGVycm9yIHBvaW50aW5nIHRvIEVPRiB3aGVuCiAgICAgICAgICAvLyB0aGUgbGFzdCBsaW5lIGRvZXNuJ3QgZW5kIHdpdGggYSBuZXdsaW5lLiBGb3IgbWVzc2FnZXMgc3Bhbm5pbmcKICAgICAgICAgIC8vIG11bHRpcGxlIGxpbmVzLCB0aGlzIGFsc28gcHJvdmlkZXMgYSBtaW5vciB2aXN1YWwgY2x1ZSB0aGF0IGNhbiBiZQogICAgICAgICAgLy8gdXNlZnVsIGZvciBkZWJ1Z2dpbmcgRmFzdGEuCiAgICAgICAgICBwb2ludGVyTGVuZ3RoICs9IDE7CiAgICAgICAgICBwb2ludGVyID0gcG9pbnRlci5zdWJzdHJpbmcoMCwgcG9pbnRlckxlbmd0aCk7CiAgICAgICAgICBwb2ludGVyICs9ICIuLi4iOwogICAgICAgIH0KICAgICAgICBzb3VyY2VMaW5lID0gIlxuJHNvdXJjZUxpbmVcbiRwb2ludGVyIjsKICAgICAgfQogICAgICBTdHJpbmcgcG9zaXRpb24gPQogICAgICAgICAgbG9jYXRpb24gPT0gbnVsbCA/ICIiIDogIjoke2xvY2F0aW9uLmxpbmV9OiR7bG9jYXRpb24uY29sdW1ufSI7CiAgICAgIHJldHVybiAiJHBhdGgkcG9zaXRpb246ICR0ZXh0JHNvdXJjZUxpbmUiOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHRleHQ7CiAgICB9CiAgfSBjYXRjaCAoZXJyb3IsIHRyYWNlKSB7CiAgICBwcmludCgiQ3Jhc2ggd2hlbiBmb3JtYXR0aW5nOiAiCiAgICAgICAgIlske21lc3NhZ2UuY29kZS5uYW1lfV0gJHtzYWZlVG9TdHJpbmcobWVzc2FnZS5tZXNzYWdlKX1cbiIKICAgICAgICAiJHtzYWZlVG9TdHJpbmcoZXJyb3IpfVxuIgogICAgICAgICIkdHJhY2UiKTsKICAgIHRocm93IG5ldyBDcmFzaChtZXNzYWdlLnVyaSwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBlcnJvciwgdHJhY2UpOwogIH0KfQoKLy8vIEFyZSBwcm9ibGVtcyBvZiBbc2V2ZXJpdHldIHN1cHByZXNzZWQ/CmJvb2wgaXNIaWRkZW4oU2V2ZXJpdHkgc2V2ZXJpdHkpIHsKICBzd2l0Y2ggKHNldmVyaXR5KSB7CiAgICBjYXNlIFNldmVyaXR5LmVycm9yOgogICAgY2FzZSBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW06CiAgICBjYXNlIFNldmVyaXR5LmNvbnRleHQ6CiAgICAgIHJldHVybiBmYWxzZTsKCiAgICBjYXNlIFNldmVyaXR5Lndhcm5pbmc6CiAgICAgIHJldHVybiBoaWRlV2FybmluZ3M7CgogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIHVuaGFuZGxlZCgiJHNldmVyaXR5IiwgImlzSGlkZGVuIiwgLTEsIG51bGwpOwogIH0KfQoKLy8vIEFyZSBwcm9ibGVtcyBvZiBbc2V2ZXJpdHldIGZhdGFsPyBUaGF0IGlzLCBzaG91bGQgdGhlIGNvbXBpbGVyIHRlcm1pbmF0ZQovLy8gaW1tZWRpYXRlbHk/CmJvb2wgc2hvdWxkVGhyb3dPbihTZXZlcml0eSBzZXZlcml0eSkgewogIHN3aXRjaCAoc2V2ZXJpdHkpIHsKICAgIGNhc2UgU2V2ZXJpdHkuZXJyb3I6CiAgICAgIHJldHVybiBDb21waWxlckNvbnRleHQuY3VycmVudC5vcHRpb25zLnRocm93T25FcnJvcnNGb3JEZWJ1Z2dpbmc7CgogICAgY2FzZSBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW06CiAgICAgIHJldHVybiB0cnVlOwoKICAgIGNhc2UgU2V2ZXJpdHkud2FybmluZzoKICAgICAgcmV0dXJuIENvbXBpbGVyQ29udGV4dC5jdXJyZW50Lm9wdGlvbnMudGhyb3dPbldhcm5pbmdzRm9yRGVidWdnaW5nOwoKICAgIGNhc2UgU2V2ZXJpdHkuY29udGV4dDoKICAgICAgcmV0dXJuIGZhbHNlOwoKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiB1bmhhbmRsZWQoIiRzZXZlcml0eSIsICJzaG91bGRUaHJvd09uIiwgLTEsIG51bGwpOwogIH0KfQoKYm9vbCBpc0NvbXBpbGVUaW1lRXJyb3IoU2V2ZXJpdHkgc2V2ZXJpdHkpIHsKICBzd2l0Y2ggKHNldmVyaXR5KSB7CiAgICBjYXNlIFNldmVyaXR5LmVycm9yOgogICAgY2FzZSBTZXZlcml0eS5pbnRlcm5hbFByb2JsZW06CiAgICAgIHJldHVybiB0cnVlOwoKICAgIGNhc2UgU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nOgogICAgICByZXR1cm4gIUNvbXBpbGVyQ29udGV4dC5jdXJyZW50Lm9wdGlvbnMubGVnYWN5TW9kZTsKCiAgICBjYXNlIFNldmVyaXR5Lndhcm5pbmc6CiAgICBjYXNlIFNldmVyaXR5LmNvbnRleHQ6CiAgICAgIHJldHVybiBmYWxzZTsKCiAgICBjYXNlIFNldmVyaXR5Lmlnbm9yZWQ6CiAgICAgIGJyZWFrOyAvLyBGYWxsLXRocm91Z2ggdG8gdW5oYW5kbGVkIGJlbG93LgogIH0KICByZXR1cm4gdW5oYW5kbGVkKCIkc2V2ZXJpdHkiLCAiaXNDb21waWxlVGltZUVycm9yIiwgLTEsIG51bGwpOwp9CoC9AE5OPAFKT1AXJgEdASkBOgFHAS8BNQEuAS8BOAEnATABOAE8ATIBIQFFUBNQCCEWTxYSBjASSh8iBigaHSccEQEfIBEBHx4RARE9CAYBHxRJJ00xGQgzIBkqSzdLQjBFL0RNNzIjDApAMk4xTk1QKR45HAowCBhKMQ0TBhskRCMTRAQCASsjFhkjGxQBGxsBDTsEAgFNESgWGUgBIxMBG0oBGxQBDUAEAgEtFhkjEwEmOgEbGxQBGzEEQQIBN3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jb21tYW5kX2xpbmVfcmVwb3J0aW5nLmRhcnQyc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL21lc3NhZ2VzLmRhcnSGPC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLm1lc3NhZ2VzOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBMaWJyYXJ5LCBMb2NhdGlvbiwgQ29tcG9uZW50LCBUcmVlTm9kZTsKCmltcG9ydCAnY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmV4cG9ydCAnZmFzdGFfY29kZXMuZGFydCc7Cgpib29sIGdldCBpc1ZlcmJvc2UgPT4gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9ucy52ZXJib3NlOwoKTG9jYXRpb24gZ2V0TG9jYXRpb24oVXJpIHVyaSwgaW50IGNoYXJPZmZzZXQpIHsKICByZXR1cm4gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQudXJpVG9Tb3VyY2VbdXJpXT8uZ2V0TG9jYXRpb24odXJpLCBjaGFyT2Zmc2V0KTsKfQoKTG9jYXRpb24gZ2V0TG9jYXRpb25Gcm9tVXJpKFVyaSB1cmksIGludCBjaGFyT2Zmc2V0KSB7CiAgaWYgKGNoYXJPZmZzZXQgPT0gLTEpIHJldHVybiBudWxsOwogIHJldHVybiBnZXRMb2NhdGlvbih1cmksIGNoYXJPZmZzZXQpOwp9CgpTdHJpbmcgZ2V0U291cmNlTGluZShMb2NhdGlvbiBsb2NhdGlvbikgewogIGlmIChsb2NhdGlvbiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICByZXR1cm4gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQudXJpVG9Tb3VyY2VbbG9jYXRpb24uZmlsZV0KICAgICAgPy5nZXRUZXh0TGluZShsb2NhdGlvbi5saW5lKTsKfQoKTG9jYXRpb24gZ2V0TG9jYXRpb25Gcm9tTm9kZShUcmVlTm9kZSBub2RlKSB7CiAgaWYgKG5vZGUuZW5jbG9zaW5nQ29tcG9uZW50ID09IG51bGwpIHsKICAgIFRyZWVOb2RlIHBhcmVudCA9IG5vZGU7CiAgICB3aGlsZSAocGFyZW50ICE9IG51bGwgJiYgcGFyZW50IGlzISBMaWJyYXJ5KSB7CiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7CiAgICB9CiAgICBpZiAocGFyZW50IGlzIExpYnJhcnkpIHsKICAgICAgQ29tcG9uZW50IGNvbXBvbmVudCA9IENvbXBpbGVyQ29udGV4dC5jdXJyZW50Lm9wdGlvbnMudGFyZ2V0CiAgICAgICAgICAuY29uZmlndXJlQ29tcG9uZW50KAogICAgICAgICAgICAgIG5ldyBDb21wb25lbnQodXJpVG9Tb3VyY2U6IENvbXBpbGVyQ29udGV4dC5jdXJyZW50LnVyaVRvU291cmNlKSk7CiAgICAgIGNvbXBvbmVudC5saWJyYXJpZXMuYWRkKHBhcmVudCk7CiAgICAgIHBhcmVudC5wYXJlbnQgPSBjb21wb25lbnQ7CiAgICAgIExvY2F0aW9uIHJlc3VsdCA9IG5vZGUubG9jYXRpb247CiAgICAgIGNvbXBvbmVudC5saWJyYXJpZXMuY2xlYXIoKTsKICAgICAgcGFyZW50LnBhcmVudCA9IG51bGw7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9IGVsc2UgewogICAgcmV0dXJuIG5vZGUubG9jYXRpb247CiAgfQp9CjYATk48ARgBTgE1ARsBPwEwUQIBNyUnAgEqJTwkAgEuKRwzHgYdQx9QJyEnIxwVDRMGCxoEAgEpcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL21lc3NhZ2VzLmRhcnQyc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3Byb2JsZW1zLmRhcnSKoi8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnByb2JsZW1zOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBGaWxlVXJpTm9kZSwgVHJlZU5vZGU7CgppbXBvcnQgJ2NvbXBpbGVyX2NvbnRleHQuZGFydCcgc2hvdyBDb21waWxlckNvbnRleHQ7CgppbXBvcnQgJ21lc3NhZ2VzLmRhcnQnCiAgICBzaG93CiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgTWVzc2FnZSwKICAgICAgICBub0xlbmd0aCwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbURlYnVnQWJvcnQsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbmV4cGVjdGVkLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5oYW5kbGVkLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5pbXBsZW1lbnRlZCwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuc3VwcG9ydGVkOwoKaW1wb3J0ICdzZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5LCBzZXZlcml0eVRleHRzOwoKY2xhc3MgRGVidWdBYm9ydCB7CiAgZmluYWwgTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZTsKCiAgRGVidWdBYm9ydChVcmkgdXJpLCBpbnQgY2hhck9mZnNldCwgU2V2ZXJpdHkgc2V2ZXJpdHksIFN0YWNrVHJhY2UgdHJhY2UpCiAgICAgIDogbWVzc2FnZSA9IHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtRGVidWdBYm9ydAogICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhzZXZlcml0eVRleHRzW3NldmVyaXR5XSwgIiR0cmFjZSIpCiAgICAgICAgICAgIC53aXRoTG9jYXRpb24odXJpLCBjaGFyT2Zmc2V0LCBub0xlbmd0aCk7CgogIHRvU3RyaW5nKCkgPT4gIkRlYnVnQWJvcnQ6ICR7bWVzc2FnZS5tZXNzYWdlfSI7Cn0KCi8vLyBVc2VkIHRvIHJlcG9ydCBhbiBpbnRlcm5hbCBlcnJvci4KLy8vCi8vLyBJbnRlcm5hbCBlcnJvcnMgc2hvdWxkIGJlIGF2b2lkZWQgYXMgYmVzdCBhcyBwb3NzaWJsZSwgYnV0IGFyZSBwcmVmZXJyZWQKLy8vIG92ZXIgYXNzZXJ0aW9uIGZhaWx1cmVzLiBUaGUgbWVzc2FnZSBzaG91bGQgc3RhcnQgd2l0aCBhbiB1cHBlci1jYXNlIGxldHRlcgovLy8gYW5kIGNvbnRhaW4gYSBzaG9ydCBkZXNjcmlwdGlvbiB0aGF0IG1heSBoZWxwIGEgZGV2ZWxvcGVyIGRlYnVnIHRoZSBpc3N1ZS4KLy8vIFRoaXMgbWV0aG9kIHNob3VsZCBiZSBjYWxsZWQgaW5zdGVhZCBvZiB1c2luZyBgdGhyb3dgLCBhcyB0aGlzIGFsbG93cyB1cyB0bwovLy8gZW5zdXJlIHRoYXQgdGhlcmUgYXJlIG5vIHRocm93cyBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlYmFzZS4KLy8vCi8vLyBCZWZvcmUgcHJpbnRpbmcgdGhlIG1lc3NhZ2UsIHRoZSBzdHJpbmcgYCJJbnRlcm5hbCBlcnJvcjogImAgaXMgcHJlcGVuZGVkLgpkeW5hbWljIGludGVybmFsUHJvYmxlbShNZXNzYWdlIG1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LCBVcmkgdXJpKSB7CiAgdGhyb3cgQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQuZm9ybWF0KAogICAgICBtZXNzYWdlLndpdGhMb2NhdGlvbih1cmksIGNoYXJPZmZzZXQsIG5vTGVuZ3RoKSwKICAgICAgU2V2ZXJpdHkuaW50ZXJuYWxQcm9ibGVtKTsKfQoKZHluYW1pYyB1bmltcGxlbWVudGVkKFN0cmluZyB3aGF0LCBpbnQgY2hhck9mZnNldCwgVXJpIHVyaSkgewogIHJldHVybiBpbnRlcm5hbFByb2JsZW0oCiAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5pbXBsZW1lbnRlZC53aXRoQXJndW1lbnRzKHdoYXQpLAogICAgICBjaGFyT2Zmc2V0LAogICAgICB1cmkpOwp9CgpkeW5hbWljIHVuaGFuZGxlZChTdHJpbmcgd2hhdCwgU3RyaW5nIHdoZXJlLCBpbnQgY2hhck9mZnNldCwgVXJpIHVyaSkgewogIHJldHVybiBpbnRlcm5hbFByb2JsZW0oCiAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5oYW5kbGVkLndpdGhBcmd1bWVudHMod2hhdCwgd2hlcmUpLAogICAgICBjaGFyT2Zmc2V0LAogICAgICB1cmkpOwp9CgpkeW5hbWljIHVuZXhwZWN0ZWQoU3RyaW5nIGV4cGVjdGVkLCBTdHJpbmcgYWN0dWFsLCBpbnQgY2hhck9mZnNldCwgVXJpIHVyaSkgewogIHJldHVybiBpbnRlcm5hbFByb2JsZW0oCiAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5leHBlY3RlZC53aXRoQXJndW1lbnRzKGV4cGVjdGVkLCBhY3R1YWwpLAogICAgICBjaGFyT2Zmc2V0LAogICAgICB1cmkpOwp9CgpkeW5hbWljIHVuc3VwcG9ydGVkKFN0cmluZyBvcGVyYXRpb24sIGludCBjaGFyT2Zmc2V0LCBVcmkgdXJpKSB7CiAgcmV0dXJuIGludGVybmFsUHJvYmxlbSgKICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VbnN1cHBvcnRlZC53aXRoQXJndW1lbnRzKG9wZXJhdGlvbiksCiAgICAgIGNoYXJPZmZzZXQsCiAgICAgIHVyaSk7Cn0KClVyaSBnZXRGaWxlVXJpKFRyZWVOb2RlIG5vZGUpIHsKICBkbyB7CiAgICBpZiAobm9kZSBpcyBGaWxlVXJpTm9kZSkgcmV0dXJuIG5vZGUuZmlsZVVyaTsKICAgIG5vZGUgPSBub2RlLnBhcmVudDsKICB9IHdoaWxlIChub2RlIGlzIFRyZWVOb2RlKTsKICByZXR1cm4gbnVsbDsKfQpWAE5OPAEYAT0BNQEXCRgREisrKi4sATUBEyABSzQ+NgEyAgEmBE1QT1BDBE9EKDchAgE+GkASDAIBSBpDEgwCAU4aSRIMAgFBGkMSDAIBIAcyGB4PAgEpcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3Byb2JsZW1zLmRhcnQwc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3RpY2tlci5kYXJ0g20vLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS50aWNrZXI7CgpjbGFzcyBUaWNrZXIgewogIGZpbmFsIFN0b3B3YXRjaCBzdyA9IG5ldyBTdG9wd2F0Y2goKS4uc3RhcnQoKTsKCiAgYm9vbCBpc1ZlcmJvc2U7CgogIER1cmF0aW9uIHByZXZpb3VzVGljazsKCiAgVGlja2VyKHt0aGlzLmlzVmVyYm9zZTogdHJ1ZX0pIHsKICAgIHByZXZpb3VzVGljayA9IHN3LmVsYXBzZWQ7CiAgfQoKICB2b2lkIGxvZ01zKE9iamVjdCBtZXNzYWdlKSB7CiAgICBsb2coKER1cmF0aW9uIGVsYXBzZWQsIER1cmF0aW9uIHNpbmNlU3RhcnQpIHsKICAgICAgcHJpbnQoIiRzaW5jZVN0YXJ0OiAkbWVzc2FnZSBpbiAke2VsYXBzZWQuaW5NaWxsaXNlY29uZHN9bXMuIik7CiAgICB9KTsKICB9CgogIHZvaWQgbG9nKHZvaWQgZihEdXJhdGlvbiBlbGFwc2VkLCBEdXJhdGlvbiBzaW5jZVN0YXJ0KSkgewogICAgRHVyYXRpb24gZWxhcHNlZCA9IHN3LmVsYXBzZWQ7CiAgICB0cnkgewogICAgICBpZiAoaXNWZXJib3NlKSBmKGVsYXBzZWQgLSBwcmV2aW91c1RpY2ssIGVsYXBzZWQpOwogICAgfSBmaW5hbGx5IHsKICAgICAgcHJldmlvdXNUaWNrID0gc3cuZWxhcHNlZDsKICAgIH0KICB9CgogIHZvaWQgcmVzZXQoKSB7CiAgICBzdy5yZXNldCgpOwogICAgcHJldmlvdXNUaWNrID0gc3cuZWxhcHNlZDsKICB9Cn0KJwBOTjwBFgEPMQESARkBIx8EAR8yRggEATwjCjkQIQYEAREQHwQCASdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdGlja2VyLmRhcnQ4c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3VyaV90cmFuc2xhdG9yLmRhcnSNoy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnVyaV90cmFuc2xhdG9yOwoKaW1wb3J0ICdwYWNrYWdlOnBhY2thZ2VfY29uZmlnL3BhY2thZ2VzLmRhcnQnIHNob3cgUGFja2FnZXM7CgppbXBvcnQgJy4uL2Jhc2UvbGlicmFyaWVzX3NwZWNpZmljYXRpb24uZGFydCcgc2hvdyBUYXJnZXRMaWJyYXJpZXNTcGVjaWZpY2F0aW9uOwppbXBvcnQgJ2NvbXBpbGVyX2NvbnRleHQuZGFydCcgc2hvdyBDb21waWxlckNvbnRleHQ7CmltcG9ydCAnZmFzdGFfY29kZXMuZGFydCc7CmltcG9ydCAnc2V2ZXJpdHkuZGFydCcgc2hvdyBTZXZlcml0eTsKCmNsYXNzIFVyaVRyYW5zbGF0b3IgewogIGZpbmFsIFRhcmdldExpYnJhcmllc1NwZWNpZmljYXRpb24gZGFydExpYnJhcmllczsKCiAgZmluYWwgUGFja2FnZXMgcGFja2FnZXM7CgogIFVyaVRyYW5zbGF0b3IodGhpcy5kYXJ0TGlicmFyaWVzLCB0aGlzLnBhY2thZ2VzKTsKCiAgTGlzdDxVcmk+IGdldERhcnRQYXRjaGVzKFN0cmluZyBsaWJyYXJ5TmFtZSkgPT4KICAgICAgZGFydExpYnJhcmllcy5saWJyYXJ5SW5mb0ZvcihsaWJyYXJ5TmFtZSk/LnBhdGNoZXM7CgogIGJvb2wgaXNQbGF0Zm9ybUltcGxlbWVudGF0aW9uKFVyaSB1cmkpIHsKICAgIGlmICh1cmkuc2NoZW1lICE9ICJkYXJ0IikgcmV0dXJuIGZhbHNlOwogICAgU3RyaW5nIHBhdGggPSB1cmkucGF0aDsKICAgIHJldHVybiBkYXJ0TGlicmFyaWVzLmxpYnJhcnlJbmZvRm9yKHBhdGgpID09IG51bGwgfHwgcGF0aC5zdGFydHNXaXRoKCJfIik7CiAgfQoKICAvLyBUT0RPKHNpZ211bmQsIGFoZSk6IGNvbnNpZGVyIGV4cGFuZGluZyB0aGlzIEFQSSB0byBpbmNsdWRlIGFuIGVycm9yCiAgLy8gY2FsbGJhY2ssIHNvIHdlIGNhbiBwcm92aWRlIGFuIGVycm9yIGxvY2F0aW9uIHdoZW4gb25lIGlzIGF2YWlsYWJsZS4gRm9yCiAgLy8gZXhhbXBsZSwgaWYgdGhlIGVycm9yIG9jY3VycyBpbiBhbiBgaW1wb3J0YC4KICBVcmkgdHJhbnNsYXRlKFVyaSB1cmksIFtib29sIHJlcG9ydE1lc3NhZ2UgPSB0cnVlXSkgewogICAgaWYgKHVyaS5zY2hlbWUgPT0gImRhcnQiKSByZXR1cm4gX3RyYW5zbGF0ZURhcnRVcmkodXJpKTsKICAgIGlmICh1cmkuc2NoZW1lID09ICJwYWNrYWdlIikgewogICAgICByZXR1cm4gX3RyYW5zbGF0ZVBhY2thZ2VVcmkodXJpLCByZXBvcnRNZXNzYWdlKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIEZvciBhIHBhY2thZ2UgdXJpLCBnZXQgdGhlIGZyYWdtZW50IG9mIHRoZSB1cmkgc3BlY2lmaWVkIGZvciB0aGF0IHBhY2thZ2UuCiAgU3RyaW5nIGdldFBhY2thZ2VGcmFnbWVudChVcmkgdXJpKSB7CiAgICBpZiAocGFja2FnZXMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAodXJpLnNjaGVtZSAhPSAicGFja2FnZSIpIHJldHVybiBudWxsOwogICAgaW50IGZpcnN0U2xhc2ggPSB1cmkucGF0aC5pbmRleE9mKCcvJyk7CiAgICBpZiAoZmlyc3RTbGFzaCA9PSAtMSkgcmV0dXJuIG51bGw7CiAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSB1cmkucGF0aC5zdWJzdHJpbmcoMCwgZmlyc3RTbGFzaCk7CiAgICBVcmkgcGFja2FnZUJhc2VVcmkgPSBwYWNrYWdlcy5hc01hcCgpW3BhY2thZ2VOYW1lXTsKICAgIGlmIChwYWNrYWdlQmFzZVVyaSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBwYWNrYWdlQmFzZVVyaS5mcmFnbWVudDsKICB9CgogIGJvb2wgaXNMaWJyYXJ5U3VwcG9ydGVkKFN0cmluZyBsaWJyYXJ5TmFtZSkgewogICAgLy8gVE9ETyhzaWdtdW5kKTogY2hhbmdlIHRoaXMgdG8gYD8/IGZhbHNlYCB3aGVuIGFsbCBiYWNrZW5kcyBwcm92aWRlIHRoZQogICAgLy8gYGxpYnJhcmllcy5qc29uYCBmaWxlIGJ5IGRlZmF1bHQgKElzc3VlICMzMjY1NykuCiAgICByZXR1cm4gZGFydExpYnJhcmllcy5saWJyYXJ5SW5mb0ZvcihsaWJyYXJ5TmFtZSk/LmlzU3VwcG9ydGVkID8/IHRydWU7CiAgfQoKICBVcmkgX3RyYW5zbGF0ZURhcnRVcmkoVXJpIHVyaSkgewogICAgaWYgKCF1cmkuaXNTY2hlbWUoJ2RhcnQnKSkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gZGFydExpYnJhcmllcy5saWJyYXJ5SW5mb0Zvcih1cmkucGF0aCk/LnVyaTsKICB9CgogIFVyaSBfdHJhbnNsYXRlUGFja2FnZVVyaShVcmkgdXJpLCBib29sIHJlcG9ydE1lc3NhZ2UpIHsKICAgIHRyeSB7CiAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IG9uY2Ugd2UgcmVtb3ZlIHRoZSBgcGFyc2VgIEFQSSwgd2UgY2FuIGVuc3VyZSB0aGF0CiAgICAgIC8vIHBhY2thZ2VzIHdpbGwgbmV2ZXIgYmUgbnVsbCBhbmQgZ2V0IHJpZCBvZiBgP2AgYmVsb3cuCiAgICAgIHJldHVybiBwYWNrYWdlcz8ucmVzb2x2ZSh1cmksCiAgICAgICAgICBub3RGb3VuZDogcmVwb3J0TWVzc2FnZQogICAgICAgICAgICAgID8gX3BhY2thZ2VVcmlOb3RGb3VuZAogICAgICAgICAgICAgIDogX3BhY2thZ2VVcmlOb3RGb3VuZE5vUmVwb3J0KTsKICAgIH0gb24gQXJndW1lbnRFcnJvciBjYXRjaCAoZSkgewogICAgICAvLyBUT0RPKHNpZ211bmQpOiBjYXRjaCBhIG1vcmUgcHJlY2lzZSBlcnJvciB3aGVuCiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvcGFja2FnZV9jb25maWcvaXNzdWVzLzQwIGlzIGZpeGVkLgogICAgICBpZiAocmVwb3J0TWVzc2FnZSkgewogICAgICAgIENvbXBpbGVyQ29udGV4dC5jdXJyZW50LnJlcG9ydFdpdGhvdXRMb2NhdGlvbigKICAgICAgICAgICAgdGVtcGxhdGVJbnZhbGlkUGFja2FnZVVyaS53aXRoQXJndW1lbnRzKHVyaSwgJyRlJyksIFNldmVyaXR5LmVycm9yKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIHN0YXRpYyBVcmkgX3BhY2thZ2VVcmlOb3RGb3VuZChVcmkgdXJpKSB7CiAgICBTdHJpbmcgbmFtZSA9IHVyaS5wYXRoU2VnbWVudHMuZmlyc3Q7CiAgICBDb21waWxlckNvbnRleHQuY3VycmVudC5yZXBvcnRXaXRob3V0TG9jYXRpb24oCiAgICAgICAgdGVtcGxhdGVQYWNrYWdlTm90Rm91bmQud2l0aEFyZ3VtZW50cyhuYW1lLCB1cmkpLCBTZXZlcml0eS5lcnJvcik7CiAgICAvLyBUT0RPKHNpZ211bmQsIGFoZSk6IGVuc3VyZSB3ZSBvbmx5IHJlcG9ydCBhbiBlcnJvciBvbmNlLAogICAgLy8gdGhpcyBudWxsIHJlc3VsdCB3aWxsIGxpa2VseSBjYXVzZSBhbm90aGVyIGVycm9yIGZ1cnRoZXIgZG93biBpbiB0aGUKICAgIC8vIGNvbXBpbGVyLgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBzdGF0aWMgVXJpIF9wYWNrYWdlVXJpTm90Rm91bmROb1JlcG9ydChVcmkgdXJpKSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KYgBOTjwBHgE9AVE1GyYBFjQBGwE0ATI6ASssHE8EAUlOMjg9IzcGEQQBUScnLiwnPDgtJAQBME44SwQBIyw4BAE6Cks/JCIkLiM4SRs3UQgTBgQBLCozS0BMEREEATQRBAIBL3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS91cmlfdHJhbnNsYXRvci5kYXJ0O3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9yZXNvbHZlX2lucHV0X3VyaS5kYXJ0hHUvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIERldGVjdCBpZiB3ZSdyZSBvbiBXaW5kb3dzIHdpdGhvdXQgaW1wb3J0aW5nIGBkYXJ0OmlvYC4KYm9vbCBpc1dpbmRvd3MgPSBuZXcgVXJpLmRpcmVjdG9yeSgiQzpcXCIpLnBhdGggPT0KICAgIG5ldyBVcmkuZGlyZWN0b3J5KCJDOlxcIiwgd2luZG93czogdHJ1ZSkucGF0aDsKClVyaSByZXNvbHZlSW5wdXRVcmkoU3RyaW5nIHBhdGgpIHsKICBVcmkgdXJpOwogIGlmIChwYXRoLmluZGV4T2YoIjoiKSA9PSAtMSkgewogICAgdXJpID0gbmV3IFVyaS5maWxlKHBhdGgsIHdpbmRvd3M6IGlzV2luZG93cyk7CiAgfSBlbHNlIGlmICghaXNXaW5kb3dzKSB7CiAgICB1cmkgPSBwYXJzZVVyaShwYXRoKTsKICB9IGVsc2UgewogICAgdXJpID0gcmVzb2x2ZUFtYmlndW91c1dpbmRvd3NQYXRoKHBhdGgpOwogIH0KICByZXR1cm4gVXJpLmJhc2UucmVzb2x2ZVVyaSh1cmkpOwp9CgpVcmkgcGFyc2VVcmkoU3RyaW5nIHBhdGgpIHsKICBpZiAocGF0aC5zdGFydHNXaXRoKCJmaWxlOiIpKSB7CiAgICBpZiAoVXJpLmJhc2Uuc2NoZW1lID09ICJmaWxlIikgewogICAgICAvLyBUaGUgVXJpIGNsYXNzIGRvZXNuJ3QgaGFuZGxlIHJlbGF0aXZlIGZpbGUgVVJJcyBjb3JyZWN0bHksIHRoZQogICAgICAvLyBmb2xsb3dpbmcgd29ya3MgYXJvdW5kIHRoYXQgaXNzdWUuCiAgICAgIHJldHVybiBuZXcgVXJpKHBhdGg6IFVyaS5wYXJzZSgieC0kcGF0aCIpLnBhdGgpOwogICAgfQogIH0KICByZXR1cm4gVXJpLnBhcnNlKHBhdGgpOwp9CgpVcmkgcmVzb2x2ZUFtYmlndW91c1dpbmRvd3NQYXRoKFN0cmluZyBwYXRoKSB7CiAgdHJ5IHsKICAgIHJldHVybiBuZXcgVXJpLmZpbGUocGF0aCwgd2luZG93czogaXNXaW5kb3dzKTsKICB9IG9uIEFyZ3VtZW50RXJyb3IgY2F0Y2ggKF8pIHsKICAgIHJldHVybiBwYXJzZVVyaShwYXRoKTsKICB9Cn0KKABOTjwBPDMzASMLITIbGgstBCMCARwiJUgsNwYEGgIBLwgzIRsEAgEycGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3Jlc29sdmVfaW5wdXRfdXJpLmRhcnQ3c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NjYW5uZXIvdG9rZW4uZGFydKwaLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc2Nhbm5lci50b2tlbjsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBhcyBhbmFseXplcjsKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW4sIFRva2VuVHlwZTsKCmltcG9ydCAndG9rZW5fY29uc3RhbnRzLmRhcnQnIHNob3cgSURFTlRJRklFUl9UT0tFTjsKCmltcG9ydCAnc3RyaW5nX2Nhbm9uaWNhbGl6ZXIuZGFydCc7CgovKioKICogQSBTdHJpbmctdmFsdWVkIHRva2VuLiBSZXByZXNlbnRzIGlkZW50aWZpZXJzLCBzdHJpbmcgbGl0ZXJhbHMsCiAqIG51bWJlciBsaXRlcmFscywgY29tbWVudHMsIGFuZCBlcnJvciB0b2tlbnMsIHVzaW5nIHRoZSBjb3JyZXNwb25kaW5nCiAqIHByZWNlZGVuY2UgaW5mby4KICovCmNsYXNzIFN0cmluZ1Rva2VuIGV4dGVuZHMgYW5hbHl6ZXIuU2ltcGxlVG9rZW4gaW1wbGVtZW50cyBhbmFseXplci5TdHJpbmdUb2tlbiB7CiAgLyoqCiAgICogVGhlIGxlbmd0aCB0aHJlc2hvbGQgYWJvdmUgd2hpY2ggc3Vic3RyaW5nIHRva2VucyBhcmUgY29tcHV0ZWQgbGF6aWx5LgogICAqCiAgICogRm9yIHN0cmluZyB0b2tlbnMgdGhhdCBhcmUgc3Vic3RyaW5ncyBvZiB0aGUgcHJvZ3JhbSBzb3VyY2UsIHRoZSBhY3R1YWwKICAgKiBzdWJzdHJpbmcgZXh0cmFjdGlvbiBpcyBwZXJmb3JtZWQgbGF6aWx5LiBUaGlzIGlzIGJlbmVmaWNpYWwgYmVjYXVzZQogICAqIG5vdCBhbGwgc2Nhbm5lZCBjb2RlIGFyZSBhY3R1YWxseSB1c2VkLiBGb3IgdW51c2VkIHBhcnRzLCB0aGUgc3Vic3RyaW5ncwogICAqIGFyZSBuZXZlciBjb21wdXRlZCBhbmQgYWxsb2NhdGVkLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgTEFaWV9USFJFU0hPTEQgPSA0OwoKICB2YXIgLyogU3RyaW5nIHwgTGF6eVN1YnRyaW5nICovIHZhbHVlT3JMYXp5U3Vic3RyaW5nOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbm9uLWxhenkgc3RyaW5nIHRva2VuLiBJZiBbY2Fub25pY2FsaXplXSBpcyB0cnVlLCB0aGUgc3RyaW5nCiAgICogaXMgY2Fub25pY2FsaXplZCBiZWZvcmUgdGhlIHRva2VuIGlzIGNyZWF0ZWQuCiAgICovCiAgU3RyaW5nVG9rZW4uZnJvbVN0cmluZyhUb2tlblR5cGUgdHlwZSwgU3RyaW5nIHZhbHVlLCBpbnQgY2hhck9mZnNldCwKICAgICAge2Jvb2wgY2Fub25pY2FsaXplOiBmYWxzZSwgYW5hbHl6ZXIuQ29tbWVudFRva2VuIHByZWNlZGluZ0NvbW1lbnRzfSkKICAgICAgOiB2YWx1ZU9yTGF6eVN1YnN0cmluZyA9CiAgICAgICAgICAgIGNhbm9uaWNhbGl6ZWRTdHJpbmcodmFsdWUsIDAsIHZhbHVlLmxlbmd0aCwgY2Fub25pY2FsaXplKSwKICAgICAgICBzdXBlcih0eXBlLCBjaGFyT2Zmc2V0LCBwcmVjZWRpbmdDb21tZW50cyk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBsYXp5IHN0cmluZyB0b2tlbi4gSWYgW2Nhbm9uaWNhbGl6ZV0gaXMgdHJ1ZSwgdGhlIHN0cmluZwogICAqIGlzIGNhbm9uaWNhbGl6ZWQgYmVmb3JlIHRoZSB0b2tlbiBpcyBjcmVhdGVkLgogICAqLwogIFN0cmluZ1Rva2VuLmZyb21TdWJzdHJpbmcoCiAgICAgIFRva2VuVHlwZSB0eXBlLCBTdHJpbmcgZGF0YSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgY2hhck9mZnNldCwKICAgICAge2Jvb2wgY2Fub25pY2FsaXplOiBmYWxzZSwgYW5hbHl6ZXIuQ29tbWVudFRva2VuIHByZWNlZGluZ0NvbW1lbnRzfSkKICAgICAgOiBzdXBlcih0eXBlLCBjaGFyT2Zmc2V0LCBwcmVjZWRpbmdDb21tZW50cykgewogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA8PSBMQVpZX1RIUkVTSE9MRCkgewogICAgICB2YWx1ZU9yTGF6eVN1YnN0cmluZyA9CiAgICAgICAgICBjYW5vbmljYWxpemVkU3RyaW5nKGRhdGEsIHN0YXJ0LCBlbmQsIGNhbm9uaWNhbGl6ZSk7CiAgICB9IGVsc2UgewogICAgICB2YWx1ZU9yTGF6eVN1YnN0cmluZyA9CiAgICAgICAgICBuZXcgX0xhenlTdWJzdHJpbmcoZGF0YSwgc3RhcnQsIGxlbmd0aCwgY2Fub25pY2FsaXplKTsKICAgIH0KICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBsYXp5IHN0cmluZyB0b2tlbi4gSWYgW2FzY2lpT25seV0gaXMgZmFsc2UsIHRoZSBieXRlIGFycmF5CiAgICogaXMgcGFzc2VkIHRocm91Z2ggYSBVVEYtOCBkZWNvZGVyLgogICAqLwogIFN0cmluZ1Rva2VuLmZyb21VdGY4Qnl0ZXMoVG9rZW5UeXBlIHR5cGUsIExpc3Q8aW50PiBkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQsCiAgICAgIGJvb2wgYXNjaWlPbmx5LCBpbnQgY2hhck9mZnNldCwKICAgICAge2FuYWx5emVyLkNvbW1lbnRUb2tlbiBwcmVjZWRpbmdDb21tZW50c30pCiAgICAgIDogc3VwZXIodHlwZSwgY2hhck9mZnNldCwgcHJlY2VkaW5nQ29tbWVudHMpIHsKICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW5ndGggPD0gTEFaWV9USFJFU0hPTEQpIHsKICAgICAgdmFsdWVPckxhenlTdWJzdHJpbmcgPSBkZWNvZGVVdGY4KGRhdGEsIHN0YXJ0LCBlbmQsIGFzY2lpT25seSk7CiAgICB9IGVsc2UgewogICAgICB2YWx1ZU9yTGF6eVN1YnN0cmluZyA9IG5ldyBfTGF6eVN1YnN0cmluZyhkYXRhLCBzdGFydCwgbGVuZ3RoLCBhc2NpaU9ubHkpOwogICAgfQogIH0KCiAgU3RyaW5nVG9rZW4uXyhUb2tlblR5cGUgdHlwZSwgdGhpcy52YWx1ZU9yTGF6eVN1YnN0cmluZywgaW50IGNoYXJPZmZzZXQsCiAgICAgIFthbmFseXplci5Db21tZW50VG9rZW4gcHJlY2VkaW5nQ29tbWVudHNdKQogICAgICA6IHN1cGVyKHR5cGUsIGNoYXJPZmZzZXQsIHByZWNlZGluZ0NvbW1lbnRzKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBsZXhlbWUgewogICAgaWYgKHZhbHVlT3JMYXp5U3Vic3RyaW5nIGlzIFN0cmluZykgewogICAgICByZXR1cm4gdmFsdWVPckxhenlTdWJzdHJpbmc7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQodmFsdWVPckxhenlTdWJzdHJpbmcgaXMgX0xhenlTdWJzdHJpbmcpOwogICAgICB2YXIgZGF0YSA9IHZhbHVlT3JMYXp5U3Vic3RyaW5nLmRhdGE7CiAgICAgIGludCBzdGFydCA9IHZhbHVlT3JMYXp5U3Vic3RyaW5nLnN0YXJ0OwogICAgICBpbnQgZW5kID0gc3RhcnQgKyB2YWx1ZU9yTGF6eVN1YnN0cmluZy5sZW5ndGg7CiAgICAgIGlmIChkYXRhIGlzIFN0cmluZykgewogICAgICAgIHZhbHVlT3JMYXp5U3Vic3RyaW5nID0gY2Fub25pY2FsaXplZFN0cmluZygKICAgICAgICAgICAgZGF0YSwgc3RhcnQsIGVuZCwgdmFsdWVPckxhenlTdWJzdHJpbmcuYm9vbFZhbHVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YWx1ZU9yTGF6eVN1YnN0cmluZyA9CiAgICAgICAgICAgIGRlY29kZVV0ZjgoZGF0YSwgc3RhcnQsIGVuZCwgdmFsdWVPckxhenlTdWJzdHJpbmcuYm9vbFZhbHVlKTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWVPckxhenlTdWJzdHJpbmc7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0lkZW50aWZpZXIgPT4gaWRlbnRpY2FsKGtpbmQsIElERU5USUZJRVJfVE9LRU4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBsZXhlbWU7CgogIHN0YXRpYyBmaW5hbCBTdHJpbmdDYW5vbmljYWxpemVyIGNhbm9uaWNhbGl6ZXIgPSBuZXcgU3RyaW5nQ2Fub25pY2FsaXplcigpOwoKICBzdGF0aWMgU3RyaW5nIGNhbm9uaWNhbGl6ZWRTdHJpbmcoCiAgICAgIFN0cmluZyBzLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgY2Fub25pY2FsaXplKSB7CiAgICBpZiAoIWNhbm9uaWNhbGl6ZSkgcmV0dXJuIHM7CiAgICByZXR1cm4gY2Fub25pY2FsaXplci5jYW5vbmljYWxpemUocywgc3RhcnQsIGVuZCwgZmFsc2UpOwogIH0KCiAgc3RhdGljIFN0cmluZyBkZWNvZGVVdGY4KExpc3Q8aW50PiBkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgYXNjaWlPbmx5KSB7CiAgICByZXR1cm4gY2Fub25pY2FsaXplci5jYW5vbmljYWxpemUoZGF0YSwgc3RhcnQsIGVuZCwgYXNjaWlPbmx5KTsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIGNvcHkoKSA9PiBuZXcgU3RyaW5nVG9rZW4uXygKICAgICAgdHlwZSwgdmFsdWVPckxhenlTdWJzdHJpbmcsIGNoYXJPZmZzZXQsIGNvcHlDb21tZW50cyhwcmVjZWRpbmdDb21tZW50cykpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmFsdWUoKSA9PiBsZXhlbWU7Cn0KCi8qKgogKiBBIFN0cmluZy12YWx1ZWQgdG9rZW4gdGhhdCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgb3JpZ2luYWwgc291cmNlLgogKi8KY2xhc3MgU3ludGhldGljU3RyaW5nVG9rZW4gZXh0ZW5kcyBTdHJpbmdUb2tlbgogICAgaW1wbGVtZW50cyBhbmFseXplci5TeW50aGV0aWNTdHJpbmdUb2tlbiB7CiAgU3ludGhldGljU3RyaW5nVG9rZW4oVG9rZW5UeXBlIHR5cGUsIFN0cmluZyB2YWx1ZSwgaW50IG9mZnNldCwKICAgICAgW2FuYWx5emVyLkNvbW1lbnRUb2tlbiBwcmVjZWRpbmdDb21tZW50c10pCiAgICAgIDogc3VwZXIuXyh0eXBlLCB2YWx1ZSwgb2Zmc2V0LCBwcmVjZWRpbmdDb21tZW50cyk7CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IDA7CgogIEBvdmVycmlkZQogIFRva2VuIGNvcHkoKSA9PiBuZXcgU3ludGhldGljU3RyaW5nVG9rZW4oCiAgICAgIHR5cGUsIHZhbHVlT3JMYXp5U3Vic3RyaW5nLCBvZmZzZXQsIGNvcHlDb21tZW50cyhwcmVjZWRpbmdDb21tZW50cykpOwp9CgpjbGFzcyBDb21tZW50VG9rZW4gZXh0ZW5kcyBTdHJpbmdUb2tlbiBpbXBsZW1lbnRzIGFuYWx5emVyLkNvbW1lbnRUb2tlbiB7CiAgQG92ZXJyaWRlCiAgYW5hbHl6ZXIuU2ltcGxlVG9rZW4gcGFyZW50OwoKICAvKioKICAgKiBDcmVhdGVzIGEgbGF6eSBjb21tZW50IHRva2VuLiBJZiBbY2Fub25pY2FsaXplXSBpcyB0cnVlLCB0aGUgc3RyaW5nCiAgICogaXMgY2Fub25pY2FsaXplZCBiZWZvcmUgdGhlIHRva2VuIGlzIGNyZWF0ZWQuCiAgICovCiAgQ29tbWVudFRva2VuLmZyb21TdWJzdHJpbmcoCiAgICAgIFRva2VuVHlwZSB0eXBlLCBTdHJpbmcgZGF0YSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgY2hhck9mZnNldCwKICAgICAge2Jvb2wgY2Fub25pY2FsaXplOiBmYWxzZX0pCiAgICAgIDogc3VwZXIuZnJvbVN1YnN0cmluZyh0eXBlLCBkYXRhLCBzdGFydCwgZW5kLCBjaGFyT2Zmc2V0LAogICAgICAgICAgICBjYW5vbmljYWxpemU6IGNhbm9uaWNhbGl6ZSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBub24tbGF6eSBjb21tZW50IHRva2VuLgogICAqLwogIENvbW1lbnRUb2tlbi5mcm9tU3RyaW5nKFRva2VuVHlwZSB0eXBlLCBTdHJpbmcgbGV4ZW1lLCBpbnQgY2hhck9mZnNldCkKICAgICAgOiBzdXBlci5mcm9tU3RyaW5nKHR5cGUsIGxleGVtZSwgY2hhck9mZnNldCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBsYXp5IHN0cmluZyB0b2tlbi4gSWYgW2FzY2lpT25seV0gaXMgZmFsc2UsIHRoZSBieXRlIGFycmF5CiAgICogaXMgcGFzc2VkIHRocm91Z2ggYSBVVEYtOCBkZWNvZGVyLgogICAqLwogIENvbW1lbnRUb2tlbi5mcm9tVXRmOEJ5dGVzKFRva2VuVHlwZSB0eXBlLCBMaXN0PGludD4gZGF0YSwgaW50IHN0YXJ0LCBpbnQgZW5kLAogICAgICBib29sIGFzY2lpT25seSwgaW50IGNoYXJPZmZzZXQpCiAgICAgIDogc3VwZXIuZnJvbVV0ZjhCeXRlcyh0eXBlLCBkYXRhLCBzdGFydCwgZW5kLCBhc2NpaU9ubHksIGNoYXJPZmZzZXQpOwoKICBDb21tZW50VG9rZW4uXyhUb2tlblR5cGUgdHlwZSwgdmFsdWVPckxhenlTdWJzdHJpbmcsIGludCBjaGFyT2Zmc2V0KQogICAgICA6IHN1cGVyLl8odHlwZSwgdmFsdWVPckxhenlTdWJzdHJpbmcsIGNoYXJPZmZzZXQpOwoKICBAb3ZlcnJpZGUKICBDb21tZW50VG9rZW4gY29weSgpID0+CiAgICAgIG5ldyBDb21tZW50VG9rZW4uXyh0eXBlLCB2YWx1ZU9yTGF6eVN1YnN0cmluZywgY2hhck9mZnNldCk7CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlKCkgewogICAgaWYgKHByZXZpb3VzICE9IG51bGwpIHsKICAgICAgcHJldmlvdXMuc2V0TmV4dFdpdGhvdXRTZXR0aW5nUHJldmlvdXMobmV4dCk7CiAgICAgIG5leHQ/LnByZXZpb3VzID0gcHJldmlvdXM7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQocGFyZW50LnByZWNlZGluZ0NvbW1lbnRzID09IHRoaXMpOwogICAgICBwYXJlbnQucHJlY2VkaW5nQ29tbWVudHMgPSBuZXh0IGFzIENvbW1lbnRUb2tlbjsKICAgIH0KICB9Cn0KCi8qKgogKiBBIHNwZWNpYWxpemVkIGNvbW1lbnQgdG9rZW4gcmVwcmVzZW50aW5nIGEgbGFuZ3VhZ2UgdmVyc2lvbgogKiAoZS5nLiAnLy8gQGRhcnQgPSAyLjEnKS4KICovCmNsYXNzIExhbmd1YWdlVmVyc2lvblRva2VuIGV4dGVuZHMgQ29tbWVudFRva2VuIHsKICAvKioKICAgKiBUaGUgbWFqb3IgbGFuZ3VhZ2UgdmVyc2lvbi4KICAgKi8KICBpbnQgbWFqb3I7CgogIC8qKgogICAqIFRoZSBtaW5vciBsYW5ndWFnZSB2ZXJzaW9uLgogICAqLwogIGludCBtaW5vcjsKCiAgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4uZnJvbShTdHJpbmcgdGV4dCwgaW50IG9mZnNldCwgdGhpcy5tYWpvciwgdGhpcy5taW5vcikKICAgICAgOiBzdXBlci5mcm9tU3RyaW5nKFRva2VuVHlwZS5TSU5HTEVfTElORV9DT01NRU5ULCB0ZXh0LCBvZmZzZXQpOwoKICBMYW5ndWFnZVZlcnNpb25Ub2tlbi5mcm9tU3Vic3RyaW5nKAogICAgICBTdHJpbmcgc3RyaW5nLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCB0b2tlblN0YXJ0LCB0aGlzLm1ham9yLCB0aGlzLm1pbm9yLAogICAgICB7Ym9vbCBjYW5vbmljYWxpemV9KQogICAgICA6IHN1cGVyLmZyb21TdWJzdHJpbmcoCiAgICAgICAgICAgIFRva2VuVHlwZS5TSU5HTEVfTElORV9DT01NRU5ULCBzdHJpbmcsIHN0YXJ0LCBlbmQsIHRva2VuU3RhcnQsCiAgICAgICAgICAgIGNhbm9uaWNhbGl6ZTogY2Fub25pY2FsaXplKTsKCiAgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4uZnJvbVV0ZjhCeXRlcyhMaXN0PGludD4gYnl0ZXMsIGludCBzdGFydCwgaW50IGVuZCwKICAgICAgaW50IHRva2VuU3RhcnQsIHRoaXMubWFqb3IsIHRoaXMubWlub3IpCiAgICAgIDogc3VwZXIuZnJvbVV0ZjhCeXRlcygKICAgICAgICAgICAgVG9rZW5UeXBlLlNJTkdMRV9MSU5FX0NPTU1FTlQsIGJ5dGVzLCBzdGFydCwgZW5kLCB0cnVlLCB0b2tlblN0YXJ0KTsKCiAgQG92ZXJyaWRlCiAgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4gY29weSgpID0+CiAgICAgIG5ldyBMYW5ndWFnZVZlcnNpb25Ub2tlbi5mcm9tKGxleGVtZSwgb2Zmc2V0LCBtYWpvciwgbWlub3IpOwp9CgpjbGFzcyBEYXJ0RG9jVG9rZW4gZXh0ZW5kcyBDb21tZW50VG9rZW4KICAgIGltcGxlbWVudHMgYW5hbHl6ZXIuRG9jdW1lbnRhdGlvbkNvbW1lbnRUb2tlbiB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIGxhenkgY29tbWVudCB0b2tlbi4gSWYgW2Nhbm9uaWNhbGl6ZV0gaXMgdHJ1ZSwgdGhlIHN0cmluZwogICAqIGlzIGNhbm9uaWNhbGl6ZWQgYmVmb3JlIHRoZSB0b2tlbiBpcyBjcmVhdGVkLgogICAqLwogIERhcnREb2NUb2tlbi5mcm9tU3Vic3RyaW5nKAogICAgICBUb2tlblR5cGUgdHlwZSwgU3RyaW5nIGRhdGEsIGludCBzdGFydCwgaW50IGVuZCwgaW50IGNoYXJPZmZzZXQsCiAgICAgIHtib29sIGNhbm9uaWNhbGl6ZTogZmFsc2V9KQogICAgICA6IHN1cGVyLmZyb21TdWJzdHJpbmcodHlwZSwgZGF0YSwgc3RhcnQsIGVuZCwgY2hhck9mZnNldCwKICAgICAgICAgICAgY2Fub25pY2FsaXplOiBjYW5vbmljYWxpemUpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbGF6eSBzdHJpbmcgdG9rZW4uIElmIFthc2NpaU9ubHldIGlzIGZhbHNlLCB0aGUgYnl0ZSBhcnJheQogICAqIGlzIHBhc3NlZCB0aHJvdWdoIGEgVVRGLTggZGVjb2Rlci4KICAgKi8KICBEYXJ0RG9jVG9rZW4uZnJvbVV0ZjhCeXRlcyhUb2tlblR5cGUgdHlwZSwgTGlzdDxpbnQ+IGRhdGEsIGludCBzdGFydCwgaW50IGVuZCwKICAgICAgYm9vbCBhc2NpaU9ubHksIGludCBjaGFyT2Zmc2V0KQogICAgICA6IHN1cGVyLmZyb21VdGY4Qnl0ZXModHlwZSwgZGF0YSwgc3RhcnQsIGVuZCwgYXNjaWlPbmx5LCBjaGFyT2Zmc2V0KTsKCiAgRGFydERvY1Rva2VuLl8oVG9rZW5UeXBlIHR5cGUsIHZhbHVlT3JMYXp5U3Vic3RyaW5nLCBpbnQgY2hhck9mZnNldCkKICAgICAgOiBzdXBlci5fKHR5cGUsIHZhbHVlT3JMYXp5U3Vic3RyaW5nLCBjaGFyT2Zmc2V0KTsKCiAgQG92ZXJyaWRlCiAgRGFydERvY1Rva2VuIGNvcHkoKSA9PgogICAgICBuZXcgRGFydERvY1Rva2VuLl8odHlwZSwgdmFsdWVPckxhenlTdWJzdHJpbmcsIGNoYXJPZmZzZXQpOwp9CgovKioKICogVGhpcyBjbGFzcyByZXByZXNlbnRzIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gY29tcHV0ZSBhIHN1YnN0cmluZwogKiBsYXppbHkuIFRoZSBzdWJzdHJpbmcgY2FuIGVpdGhlciBvcmlnaW5hdGUgZnJvbSBhIHN0cmluZyBvciBmcm9tCiAqIGEgWzpMaXN0PGludD46XSBvZiBVVEYtOCBieXRlcy4KICovCmFic3RyYWN0IGNsYXNzIF9MYXp5U3Vic3RyaW5nIHsKICAvKiogVGhlIG9yaWdpbmFsIGRhdGEsIGVpdGhlciBhIHN0cmluZyBvciBhIExpc3Q8aW50PiAqLwogIGdldCBkYXRhOwoKICBpbnQgZ2V0IHN0YXJ0OwogIGludCBnZXQgbGVuZ3RoOwoKICAvKioKICAgKiBJZiB0aGlzIHN1YnN0cmluZyBpcyBiYXNlZCBvbiBhIFN0cmluZywgdGhlIFtib29sVmFsdWVdIGluZGljYXRlcyB3aGV0aGVyCiAgICogdGhlIHJlc3VsdGluZyBzdWJzdHJpbmcgc2hvdWxkIGJlIGNhbm9uaWNhbGl6ZWQuCiAgICoKICAgKiBGb3Igc3Vic3RyaW5ncyBiYXNlZCBvbiBhIGJ5dGUgYXJyYXksIHRoZSBbYm9vbFZhbHVlXSBpcyB0cnVlIGlmIHRoZQogICAqIGFycmF5IG9ubHkgaG9sZHMgQVNDSUkgY2hhcmFjdGVycy4gVGhlIHJlc3VsdGluZyBzdWJzdHJpbmcgd2lsbCBiZQogICAqIGNhbm9uaWNhbGl6ZWQgYWZ0ZXIgZGVjb2RpbmcuCiAgICovCiAgYm9vbCBnZXQgYm9vbFZhbHVlOwoKICBfTGF6eVN1YnN0cmluZy5pbnRlcm5hbCgpOwoKICBmYWN0b3J5IF9MYXp5U3Vic3RyaW5nKGRhdGEsIGludCBzdGFydCwgaW50IGxlbmd0aCwgYm9vbCBiKSB7CiAgICAvLyBTZWUgY29tbWVudCBvbiBbQ29tcGFjdExhenlTdWJzdHJpbmddLgogICAgaWYgKHN0YXJ0IDwgMHgxMDAwMDAgJiYgbGVuZ3RoIDwgMHgyMDApIHsKICAgICAgaW50IGZpZWxkcyA9IChzdGFydCA8PCA5KTsKICAgICAgZmllbGRzID0gZmllbGRzIHwgbGVuZ3RoOwogICAgICBmaWVsZHMgPSBmaWVsZHMgPDwgMTsKICAgICAgaWYgKGIpIGZpZWxkcyB8PSAxOwogICAgICByZXR1cm4gbmV3IF9Db21wYWN0TGF6eVN1YnN0cmluZyhkYXRhLCBmaWVsZHMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBfRnVsbExhenlTdWJzdHJpbmcoZGF0YSwgc3RhcnQsIGxlbmd0aCwgYik7CiAgICB9CiAgfQp9CgovKioKICogVGhpcyBjbGFzcyBlbmNvZGVzIFtzdGFydF0sIFtsZW5ndGhdIGFuZCBbYm9vbFZhbHVlXSBpbiBhIHNpbmdsZQogKiAzMCBiaXQgaW50ZWdlci4gSXQgdXNlcyAyMCBiaXRzIGZvciBbc3RhcnRdLCB3aGljaCBjb3ZlcnMgc291cmNlIGZpbGVzCiAqIG9mIDFNQi4gW2xlbmd0aF0gaGFzIDkgYml0cywgd2hpY2ggY292ZXJzIDUxMiBjaGFyYWN0ZXJzLgogKgogKiBUaGUgZmlsZSBodG1sX2RhcnQyanMuZGFydCBpcyBjdXJyZW50bHkgYXJvdW5kIDFNQi4KICovCmNsYXNzIF9Db21wYWN0TGF6eVN1YnN0cmluZyBleHRlbmRzIF9MYXp5U3Vic3RyaW5nIHsKICBmaW5hbCBkYXRhOwogIGZpbmFsIGludCBmaWVsZHM7CgogIF9Db21wYWN0TGF6eVN1YnN0cmluZyh0aGlzLmRhdGEsIHRoaXMuZmllbGRzKSA6IHN1cGVyLmludGVybmFsKCk7CgogIGludCBnZXQgc3RhcnQgPT4gZmllbGRzID4+IDEwOwogIGludCBnZXQgbGVuZ3RoID0+IChmaWVsZHMgPj4gMSkgJiAweDFmZjsKICBib29sIGdldCBib29sVmFsdWUgPT4gKGZpZWxkcyAmIDEpID09IDE7Cn0KCmNsYXNzIF9GdWxsTGF6eVN1YnN0cmluZyBleHRlbmRzIF9MYXp5U3Vic3RyaW5nIHsKICBmaW5hbCBkYXRhOwogIGZpbmFsIGludCBzdGFydDsKICBmaW5hbCBpbnQgbGVuZ3RoOwogIGZpbmFsIGJvb2wgYm9vbFZhbHVlOwogIF9GdWxsTGF6eVN1YnN0cmluZyh0aGlzLmRhdGEsIHRoaXMuc3RhcnQsIHRoaXMubGVuZ3RoLCB0aGlzLmJvb2xWYWx1ZSkKICAgICAgOiBzdXBlci5pbnRlcm5hbCgpOwp9Cgpib29sIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yKFN0cmluZyB2YWx1ZSkgewogIHJldHVybiBpc0JpbmFyeU9wZXJhdG9yKHZhbHVlKSB8fAogICAgICBpc01pbnVzT3BlcmF0b3IodmFsdWUpIHx8CiAgICAgIGlzVGVybmFyeU9wZXJhdG9yKHZhbHVlKSB8fAogICAgICBpc1VuYXJ5T3BlcmF0b3IodmFsdWUpOwp9Cgpib29sIGlzVW5hcnlPcGVyYXRvcihTdHJpbmcgdmFsdWUpID0+IGlkZW50aWNhbCh2YWx1ZSwgIn4iKTsKCmJvb2wgaXNCaW5hcnlPcGVyYXRvcihTdHJpbmcgdmFsdWUpIHsKICByZXR1cm4gaWRlbnRpY2FsKHZhbHVlLCAiPT0iKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICJbXSIpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgIioiKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICIvIikgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAiJSIpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgIn4vIikgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAiKyIpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgIjw8IikgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAiPj4iKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICI+Pj4iKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICI+PSIpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgIj4iKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICI8PSIpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgIjwiKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICImIikgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAiXiIpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgInwiKTsKfQoKYm9vbCBpc1Rlcm5hcnlPcGVyYXRvcihTdHJpbmcgdmFsdWUpID0+IGlkZW50aWNhbCh2YWx1ZSwgIltdPSIpOwoKYm9vbCBpc01pbnVzT3BlcmF0b3IoU3RyaW5nIHZhbHVlKSA9PiBpZGVudGljYWwodmFsdWUsICItIik7CoFfAE5OPAEdAS85ATUBJAEEQ0gUBFEGTAVNSk4nBicBOAEGTDMGR0sfRzQBBkgzBh1HSzUeJB0/DR1BBgQBBkooBlAmMTUeJEYNUQYEAUsxNAEMFiojDTYsLjUcND8PH0oIIwYEAQw+AQwfAU4BJTkhPQQBUUQEAQwlUAEMHAIBBEUELy9BMTkBDBcBDCxMAgFKDB8BBkkzBh5HIkApAQYnBkk0AQZKKAZRJkwBRzkBDBlCAQwSHDQhDTA3BgQCAQQ/HAQyBiEGDQEGIQYNAU1HASZRGx1LKQFKLh1RAQwhQwIBKDQGSTMGHkciQCkBBkooBlEmTAFHOQEMGUICAQRKRCMEIDsMARESAQZPNgVKSCMGFgEdAUAuLiEgHBo2DT0GBAIBBERKPQM3BDUOFAFEASErKwIBMg4TFBhJGgIBLSQgIh4CAT0BJiMgHx8fIB8gICEgHyAfHx8dAgFBAT0BLnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY2FubmVyL3Rva2VuLmRhcnQxc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL3NjYW5uZXIvdG9rZW4uZGFydMAAwVkvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLyoqCiAqIERlZmluZXMgdGhlIHRva2VucyB0aGF0IGFyZSBwcm9kdWNlZCBieSB0aGUgc2Nhbm5lciwgdXNlZCBieSB0aGUgcGFyc2VyLCBhbmQKICogcmVmZXJlbmNlZCBmcm9tIHRoZSBbQVNUIHN0cnVjdHVyZV0oYXN0LmRhcnQpLgogKi8KaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwoKaW1wb3J0ICcuLi9iYXNlL3N5bnRhY3RpY19lbnRpdHkuZGFydCc7CmltcG9ydCAnLi4vZmFzdGEvc2Nhbm5lci90b2tlbl9jb25zdGFudHMuZGFydCc7CmltcG9ydCAnc3RyaW5nX3V0aWxpdGllcy5kYXJ0JzsKCmNvbnN0IGludCBOT19QUkVDRURFTkNFID0gMDsKY29uc3QgaW50IEFTU0lHTk1FTlRfUFJFQ0VERU5DRSA9IDE7CmNvbnN0IGludCBDQVNDQURFX1BSRUNFREVOQ0UgPSAyOwpjb25zdCBpbnQgQ09ORElUSU9OQUxfUFJFQ0VERU5DRSA9IDM7CmNvbnN0IGludCBJRl9OVUxMX1BSRUNFREVOQ0UgPSA0Owpjb25zdCBpbnQgTE9HSUNBTF9PUl9QUkVDRURFTkNFID0gNTsKY29uc3QgaW50IExPR0lDQUxfQU5EX1BSRUNFREVOQ0UgPSA2Owpjb25zdCBpbnQgRVFVQUxJVFlfUFJFQ0VERU5DRSA9IDc7CmNvbnN0IGludCBSRUxBVElPTkFMX1BSRUNFREVOQ0UgPSA4Owpjb25zdCBpbnQgQklUV0lTRV9PUl9QUkVDRURFTkNFID0gOTsKY29uc3QgaW50IEJJVFdJU0VfWE9SX1BSRUNFREVOQ0UgPSAxMDsKY29uc3QgaW50IEJJVFdJU0VfQU5EX1BSRUNFREVOQ0UgPSAxMTsKY29uc3QgaW50IFNISUZUX1BSRUNFREVOQ0UgPSAxMjsKY29uc3QgaW50IEFERElUSVZFX1BSRUNFREVOQ0UgPSAxMzsKY29uc3QgaW50IE1VTFRJUExJQ0FUSVZFX1BSRUNFREVOQ0UgPSAxNDsKY29uc3QgaW50IFBSRUZJWF9QUkVDRURFTkNFID0gMTU7CmNvbnN0IGludCBQT1NURklYX1BSRUNFREVOQ0UgPSAxNjsKY29uc3QgaW50IFNFTEVDVE9SX1BSRUNFREVOQ0UgPSAxNzsKCi8qKgogKiBUaGUgb3BlbmluZyBoYWxmIG9mIGEgZ3JvdXBpbmcgcGFpciBvZiB0b2tlbnMuIFRoaXMgaXMgdXNlZCBmb3IgY3VybHkKICogYnJhY2tldHMgKCd7JyksIHBhcmVudGhlc2VzICgnKCcpLCBhbmQgc3F1YXJlIGJyYWNrZXRzICgnWycpLgogKi8KY2xhc3MgQmVnaW5Ub2tlbiBleHRlbmRzIFNpbXBsZVRva2VuIHsKICAvKioKICAgKiBUaGUgdG9rZW4gdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIHRva2VuLgogICAqLwogIFRva2VuIGVuZFRva2VuOwoKICAvKioKICAgKiBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCB0b2tlbiB0byBoYXZlIHRoZSBnaXZlbiBbdHlwZV0gYXQgdGhlIGdpdmVuCiAgICogW29mZnNldF0uCiAgICovCiAgQmVnaW5Ub2tlbihUb2tlblR5cGUgdHlwZSwgaW50IG9mZnNldCwgW0NvbW1lbnRUb2tlbiBwcmVjZWRpbmdDb21tZW50XSkKICAgICAgOiBzdXBlcih0eXBlLCBvZmZzZXQsIHByZWNlZGluZ0NvbW1lbnQpIHsKICAgIGFzc2VydCh0eXBlID09IFRva2VuVHlwZS5MVCB8fAogICAgICAgIHR5cGUgPT0gVG9rZW5UeXBlLk9QRU5fQ1VSTFlfQlJBQ0tFVCB8fAogICAgICAgIHR5cGUgPT0gVG9rZW5UeXBlLk9QRU5fUEFSRU4gfHwKICAgICAgICB0eXBlID09IFRva2VuVHlwZS5PUEVOX1NRVUFSRV9CUkFDS0VUIHx8CiAgICAgICAgdHlwZSA9PSBUb2tlblR5cGUuUVVFU1RJT05fUEVSSU9EX09QRU5fU1FVQVJFX0JSQUNLRVQgfHwKICAgICAgICB0eXBlID09IFRva2VuVHlwZS5TVFJJTkdfSU5URVJQT0xBVElPTl9FWFBSRVNTSU9OKTsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIGNvcHkoKSA9PiBuZXcgQmVnaW5Ub2tlbih0eXBlLCBvZmZzZXQsIGNvcHlDb21tZW50cyhwcmVjZWRpbmdDb21tZW50cykpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBnZXQgZW5kR3JvdXAgPT4gZW5kVG9rZW47CgogIC8qKgogICAqIFNldCB0aGUgdG9rZW4gdGhhdCBjb3JyZXNwb25kcyB0byB0aGlzIHRva2VuLgogICAqLwogIHNldCBlbmRHcm91cChUb2tlbiB0b2tlbikgewogICAgZW5kVG9rZW4gPSB0b2tlbjsKICB9Cn0KCi8qKgogKiBBIHRva2VuIHJlcHJlc2VudGluZyBhIGNvbW1lbnQuCiAqLwpjbGFzcyBDb21tZW50VG9rZW4gZXh0ZW5kcyBTdHJpbmdUb2tlbiB7CiAgLyoqCiAgICogVGhlIHRva2VuIHRoYXQgY29udGFpbnMgdGhpcyBjb21tZW50LgogICAqLwogIFNpbXBsZVRva2VuIHBhcmVudDsKCiAgLyoqCiAgICogSW5pdGlhbGl6ZSBhIG5ld2x5IGNyZWF0ZWQgdG9rZW4gdG8gcmVwcmVzZW50IGEgdG9rZW4gb2YgdGhlIGdpdmVuIFt0eXBlXQogICAqIHdpdGggdGhlIGdpdmVuIFt2YWx1ZV0gYXQgdGhlIGdpdmVuIFtvZmZzZXRdLgogICAqLwogIENvbW1lbnRUb2tlbihUb2tlblR5cGUgdHlwZSwgU3RyaW5nIHZhbHVlLCBpbnQgb2Zmc2V0KQogICAgICA6IHN1cGVyKHR5cGUsIHZhbHVlLCBvZmZzZXQpOwoKICBAb3ZlcnJpZGUKICBDb21tZW50VG9rZW4gY29weSgpID0+IG5ldyBDb21tZW50VG9rZW4odHlwZSwgX3ZhbHVlLCBvZmZzZXQpOwoKICAvKioKICAgKiBSZW1vdmUgdGhpcyBjb21tZW50IHRva2VuIGZyb20gdGhlIGxpc3QuCiAgICoKICAgKiBUaGlzIGlzIHVzZWQgd2hlbiB3ZSBkZWNpZGUgdG8gaW50ZXJwcmV0IHRoZSBjb21tZW50IGFzIHN5bnRheC4KICAgKi8KICB2b2lkIHJlbW92ZSgpIHsKICAgIGlmIChwcmV2aW91cyAhPSBudWxsKSB7CiAgICAgIHByZXZpb3VzLnNldE5leHRXaXRob3V0U2V0dGluZ1ByZXZpb3VzKG5leHQpOwogICAgICBuZXh0Py5wcmV2aW91cyA9IHByZXZpb3VzOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KHBhcmVudC5wcmVjZWRpbmdDb21tZW50cyA9PSB0aGlzKTsKICAgICAgcGFyZW50LnByZWNlZGluZ0NvbW1lbnRzID0gbmV4dDsKICAgIH0KICB9Cn0KCi8qKgogKiBBIGRvY3VtZW50YXRpb24gY29tbWVudCB0b2tlbi4KICovCmNsYXNzIERvY3VtZW50YXRpb25Db21tZW50VG9rZW4gZXh0ZW5kcyBDb21tZW50VG9rZW4gewogIC8qKgogICAqIEluaXRpYWxpemUgYSBuZXdseSBjcmVhdGVkIHRva2VuIHRvIHJlcHJlc2VudCBhIHRva2VuIG9mIHRoZSBnaXZlbiBbdHlwZV0KICAgKiB3aXRoIHRoZSBnaXZlbiBbdmFsdWVdIGF0IHRoZSBnaXZlbiBbb2Zmc2V0XS4KICAgKi8KICBEb2N1bWVudGF0aW9uQ29tbWVudFRva2VuKFRva2VuVHlwZSB0eXBlLCBTdHJpbmcgdmFsdWUsIGludCBvZmZzZXQpCiAgICAgIDogc3VwZXIodHlwZSwgdmFsdWUsIG9mZnNldCk7CgogIEBvdmVycmlkZQogIENvbW1lbnRUb2tlbiBjb3B5KCkgPT4gbmV3IERvY3VtZW50YXRpb25Db21tZW50VG9rZW4odHlwZSwgX3ZhbHVlLCBvZmZzZXQpOwp9CgovKioKICogVGhlIGtleXdvcmRzIGluIHRoZSBEYXJ0IHByb2dyYW1taW5nIGxhbmd1YWdlLgogKgogKiBDbGllbnRzIG1heSBub3QgZXh0ZW5kLCBpbXBsZW1lbnQgb3IgbWl4LWluIHRoaXMgY2xhc3MuCiAqLwpjbGFzcyBLZXl3b3JkIGV4dGVuZHMgVG9rZW5UeXBlIHsKICBzdGF0aWMgY29uc3QgS2V5d29yZCBBQlNUUkFDVCA9CiAgICAgIGNvbnN0IEtleXdvcmQoImFic3RyYWN0IiwgIkFCU1RSQUNUIiwgaXNCdWlsdEluOiB0cnVlLCBpc01vZGlmaWVyOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgQVMgPSBjb25zdCBLZXl3b3JkKCJhcyIsICJBUyIsCiAgICAgIHByZWNlZGVuY2U6IFJFTEFUSU9OQUxfUFJFQ0VERU5DRSwgaXNCdWlsdEluOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgQVNTRVJUID0gY29uc3QgS2V5d29yZCgiYXNzZXJ0IiwgIkFTU0VSVCIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBBU1lOQyA9IGNvbnN0IEtleXdvcmQoImFzeW5jIiwgIkFTWU5DIiwgaXNQc2V1ZG86IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBBV0FJVCA9IGNvbnN0IEtleXdvcmQoImF3YWl0IiwgIkFXQUlUIiwgaXNQc2V1ZG86IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBCUkVBSyA9IGNvbnN0IEtleXdvcmQoImJyZWFrIiwgIkJSRUFLIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIENBU0UgPSBjb25zdCBLZXl3b3JkKCJjYXNlIiwgIkNBU0UiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgQ0FUQ0ggPSBjb25zdCBLZXl3b3JkKCJjYXRjaCIsICJDQVRDSCIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBDTEFTUyA9CiAgICAgIGNvbnN0IEtleXdvcmQoImNsYXNzIiwgIkNMQVNTIiwgaXNUb3BMZXZlbEtleXdvcmQ6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBDT05TVCA9CiAgICAgIGNvbnN0IEtleXdvcmQoImNvbnN0IiwgIkNPTlNUIiwgaXNNb2RpZmllcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIENPTlRJTlVFID0gY29uc3QgS2V5d29yZCgiY29udGludWUiLCAiQ09OVElOVUUiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgQ09WQVJJQU5UID0gY29uc3QgS2V5d29yZCgiY292YXJpYW50IiwgIkNPVkFSSUFOVCIsCiAgICAgIGlzQnVpbHRJbjogdHJ1ZSwgaXNNb2RpZmllcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIERFRkFVTFQgPSBjb25zdCBLZXl3b3JkKCJkZWZhdWx0IiwgIkRFRkFVTFQiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgREVGRVJSRUQgPQogICAgICBjb25zdCBLZXl3b3JkKCJkZWZlcnJlZCIsICJERUZFUlJFRCIsIGlzQnVpbHRJbjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIERPID0gY29uc3QgS2V5d29yZCgiZG8iLCAiRE8iKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgRFlOQU1JQyA9CiAgICAgIGNvbnN0IEtleXdvcmQoImR5bmFtaWMiLCAiRFlOQU1JQyIsIGlzQnVpbHRJbjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEVMU0UgPSBjb25zdCBLZXl3b3JkKCJlbHNlIiwgIkVMU0UiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgRU5VTSA9CiAgICAgIGNvbnN0IEtleXdvcmQoImVudW0iLCAiRU5VTSIsIGlzVG9wTGV2ZWxLZXl3b3JkOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgRVhQT1JUID0gY29uc3QgS2V5d29yZCgiZXhwb3J0IiwgIkVYUE9SVCIsCiAgICAgIGlzQnVpbHRJbjogdHJ1ZSwgaXNUb3BMZXZlbEtleXdvcmQ6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBFWFRFTkRTID0gY29uc3QgS2V5d29yZCgiZXh0ZW5kcyIsICJFWFRFTkRTIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEVYVEVOU0lPTiA9IGNvbnN0IEtleXdvcmQoImV4dGVuc2lvbiIsICJFWFRFTlNJT04iLAogICAgICBpc0J1aWx0SW46IHRydWUsIGlzVG9wTGV2ZWxLZXl3b3JkOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgRVhURVJOQUwgPQogICAgICBjb25zdCBLZXl3b3JkKCJleHRlcm5hbCIsICJFWFRFUk5BTCIsIGlzQnVpbHRJbjogdHJ1ZSwgaXNNb2RpZmllcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEZBQ1RPUlkgPQogICAgICBjb25zdCBLZXl3b3JkKCJmYWN0b3J5IiwgIkZBQ1RPUlkiLCBpc0J1aWx0SW46IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBGQUxTRSA9IGNvbnN0IEtleXdvcmQoImZhbHNlIiwgIkZBTFNFIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEZJTkFMID0KICAgICAgY29uc3QgS2V5d29yZCgiZmluYWwiLCAiRklOQUwiLCBpc01vZGlmaWVyOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgRklOQUxMWSA9IGNvbnN0IEtleXdvcmQoImZpbmFsbHkiLCAiRklOQUxMWSIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBGT1IgPSBjb25zdCBLZXl3b3JkKCJmb3IiLCAiRk9SIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEZVTkNUSU9OID0KICAgICAgY29uc3QgS2V5d29yZCgiRnVuY3Rpb24iLCAiRlVOQ1RJT04iLCBpc1BzZXVkbzogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIEdFVCA9IGNvbnN0IEtleXdvcmQoImdldCIsICJHRVQiLCBpc0J1aWx0SW46IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBISURFID0gY29uc3QgS2V5d29yZCgiaGlkZSIsICJISURFIiwgaXNQc2V1ZG86IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBJRiA9IGNvbnN0IEtleXdvcmQoImlmIiwgIklGIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIElNUExFTUVOVFMgPQogICAgICBjb25zdCBLZXl3b3JkKCJpbXBsZW1lbnRzIiwgIklNUExFTUVOVFMiLCBpc0J1aWx0SW46IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBJTVBPUlQgPSBjb25zdCBLZXl3b3JkKCJpbXBvcnQiLCAiSU1QT1JUIiwKICAgICAgaXNCdWlsdEluOiB0cnVlLCBpc1RvcExldmVsS2V5d29yZDogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIElOID0gY29uc3QgS2V5d29yZCgiaW4iLCAiSU4iKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgSU5URVJGQUNFID0KICAgICAgY29uc3QgS2V5d29yZCgiaW50ZXJmYWNlIiwgIklOVEVSRkFDRSIsIGlzQnVpbHRJbjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIElTID0KICAgICAgY29uc3QgS2V5d29yZCgiaXMiLCAiSVMiLCBwcmVjZWRlbmNlOiBSRUxBVElPTkFMX1BSRUNFREVOQ0UpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBMQVRFID0gY29uc3QgS2V5d29yZCgibGF0ZSIsICJMQVRFIiwgaXNNb2RpZmllcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIExJQlJBUlkgPSBjb25zdCBLZXl3b3JkKCJsaWJyYXJ5IiwgIkxJQlJBUlkiLAogICAgICBpc0J1aWx0SW46IHRydWUsIGlzVG9wTGV2ZWxLZXl3b3JkOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgTUlYSU4gPQogICAgICBjb25zdCBLZXl3b3JkKCJtaXhpbiIsICJNSVhJTiIsIGlzQnVpbHRJbjogdHJ1ZSwgaXNUb3BMZXZlbEtleXdvcmQ6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBOQVRJVkUgPQogICAgICBjb25zdCBLZXl3b3JkKCJuYXRpdmUiLCAiTkFUSVZFIiwgaXNQc2V1ZG86IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBORVcgPSBjb25zdCBLZXl3b3JkKCJuZXciLCAiTkVXIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIE5VTEwgPSBjb25zdCBLZXl3b3JkKCJudWxsIiwgIk5VTEwiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgT0YgPSBjb25zdCBLZXl3b3JkKCJvZiIsICJPRiIsIGlzUHNldWRvOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgT04gPSBjb25zdCBLZXl3b3JkKCJvbiIsICJPTiIsIGlzUHNldWRvOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgT1BFUkFUT1IgPQogICAgICBjb25zdCBLZXl3b3JkKCJvcGVyYXRvciIsICJPUEVSQVRPUiIsIGlzQnVpbHRJbjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFBBUlQgPQogICAgICBjb25zdCBLZXl3b3JkKCJwYXJ0IiwgIlBBUlQiLCBpc0J1aWx0SW46IHRydWUsIGlzVG9wTGV2ZWxLZXl3b3JkOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgUEFUQ0ggPSBjb25zdCBLZXl3b3JkKCJwYXRjaCIsICJQQVRDSCIsIGlzUHNldWRvOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgUkVRVUlSRUQgPQogICAgICBjb25zdCBLZXl3b3JkKCJyZXF1aXJlZCIsICJSRVFVSVJFRCIsIGlzQnVpbHRJbjogdHJ1ZSwgaXNNb2RpZmllcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFJFVEhST1cgPSBjb25zdCBLZXl3b3JkKCJyZXRocm93IiwgIlJFVEhST1ciKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgUkVUVVJOID0gY29uc3QgS2V5d29yZCgicmV0dXJuIiwgIlJFVFVSTiIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBTRVQgPSBjb25zdCBLZXl3b3JkKCJzZXQiLCAiU0VUIiwgaXNCdWlsdEluOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgU0hPVyA9IGNvbnN0IEtleXdvcmQoInNob3ciLCAiU0hPVyIsIGlzUHNldWRvOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgU09VUkNFID0KICAgICAgY29uc3QgS2V5d29yZCgic291cmNlIiwgIlNPVVJDRSIsIGlzUHNldWRvOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgU1RBVElDID0KICAgICAgY29uc3QgS2V5d29yZCgic3RhdGljIiwgIlNUQVRJQyIsIGlzQnVpbHRJbjogdHJ1ZSwgaXNNb2RpZmllcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFNVUEVSID0gY29uc3QgS2V5d29yZCgic3VwZXIiLCAiU1VQRVIiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgU1dJVENIID0gY29uc3QgS2V5d29yZCgic3dpdGNoIiwgIlNXSVRDSCIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBTWU5DID0gY29uc3QgS2V5d29yZCgic3luYyIsICJTWU5DIiwgaXNQc2V1ZG86IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBUSElTID0gY29uc3QgS2V5d29yZCgidGhpcyIsICJUSElTIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFRIUk9XID0gY29uc3QgS2V5d29yZCgidGhyb3ciLCAiVEhST1ciKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgVFJVRSA9IGNvbnN0IEtleXdvcmQoInRydWUiLCAiVFJVRSIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBUUlkgPSBjb25zdCBLZXl3b3JkKCJ0cnkiLCAiVFJZIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFRZUEVERUYgPSBjb25zdCBLZXl3b3JkKCJ0eXBlZGVmIiwgIlRZUEVERUYiLAogICAgICBpc0J1aWx0SW46IHRydWUsIGlzVG9wTGV2ZWxLZXl3b3JkOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgVkFSID0gY29uc3QgS2V5d29yZCgidmFyIiwgIlZBUiIsIGlzTW9kaWZpZXI6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBWT0lEID0gY29uc3QgS2V5d29yZCgidm9pZCIsICJWT0lEIik7CgogIHN0YXRpYyBjb25zdCBLZXl3b3JkIFdISUxFID0gY29uc3QgS2V5d29yZCgid2hpbGUiLCAiV0hJTEUiKTsKCiAgc3RhdGljIGNvbnN0IEtleXdvcmQgV0lUSCA9IGNvbnN0IEtleXdvcmQoIndpdGgiLCAiV0lUSCIpOwoKICBzdGF0aWMgY29uc3QgS2V5d29yZCBZSUVMRCA9IGNvbnN0IEtleXdvcmQoInlpZWxkIiwgIllJRUxEIiwgaXNQc2V1ZG86IHRydWUpOwoKICBzdGF0aWMgY29uc3QgTGlzdDxLZXl3b3JkPiB2YWx1ZXMgPSBjb25zdCA8S2V5d29yZD5bCiAgICBBQlNUUkFDVCwKICAgIEFTLAogICAgQVNTRVJULAogICAgQVNZTkMsCiAgICBBV0FJVCwKICAgIEJSRUFLLAogICAgQ0FTRSwKICAgIENBVENILAogICAgQ0xBU1MsCiAgICBDT05TVCwKICAgIENPTlRJTlVFLAogICAgQ09WQVJJQU5ULAogICAgREVGQVVMVCwKICAgIERFRkVSUkVELAogICAgRE8sCiAgICBEWU5BTUlDLAogICAgRUxTRSwKICAgIEVOVU0sCiAgICBFWFBPUlQsCiAgICBFWFRFTkRTLAogICAgRVhURU5TSU9OLAogICAgRVhURVJOQUwsCiAgICBGQUNUT1JZLAogICAgRkFMU0UsCiAgICBGSU5BTCwKICAgIEZJTkFMTFksCiAgICBGT1IsCiAgICBGVU5DVElPTiwKICAgIEdFVCwKICAgIEhJREUsCiAgICBJRiwKICAgIElNUExFTUVOVFMsCiAgICBJTVBPUlQsCiAgICBJTiwKICAgIElOVEVSRkFDRSwKICAgIElTLAogICAgTEFURSwKICAgIExJQlJBUlksCiAgICBNSVhJTiwKICAgIE5BVElWRSwKICAgIE5FVywKICAgIE5VTEwsCiAgICBPRiwKICAgIE9OLAogICAgT1BFUkFUT1IsCiAgICBQQVJULAogICAgUEFUQ0gsCiAgICBSRVFVSVJFRCwKICAgIFJFVEhST1csCiAgICBSRVRVUk4sCiAgICBTRVQsCiAgICBTSE9XLAogICAgU09VUkNFLAogICAgU1RBVElDLAogICAgU1VQRVIsCiAgICBTV0lUQ0gsCiAgICBTWU5DLAogICAgVEhJUywKICAgIFRIUk9XLAogICAgVFJVRSwKICAgIFRSWSwKICAgIFRZUEVERUYsCiAgICBWQVIsCiAgICBWT0lELAogICAgV0hJTEUsCiAgICBXSVRILAogICAgWUlFTEQsCiAgXTsKCiAgLyoqCiAgICogQSB0YWJsZSBtYXBwaW5nIHRoZSBsZXhlbWVzIG9mIGtleXdvcmRzIHRvIHRoZSBjb3JyZXNwb25kaW5nIGtleXdvcmQuCiAgICovCiAgc3RhdGljIGZpbmFsIE1hcDxTdHJpbmcsIEtleXdvcmQ+IGtleXdvcmRzID0gX2NyZWF0ZUtleXdvcmRNYXAoKTsKCiAgLyoqCiAgICogQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUga2V5d29yZCBpcyAiYnVpbHQtaW4iIGlkZW50aWZpZXIuCiAgICovCiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0J1aWx0SW47CgogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNQc2V1ZG87CgogIC8qKgogICAqIEluaXRpYWxpemUgYSBuZXdseSBjcmVhdGVkIGtleXdvcmQuCiAgICovCiAgY29uc3QgS2V5d29yZChTdHJpbmcgbGV4ZW1lLCBTdHJpbmcgbmFtZSwKICAgICAge3RoaXMuaXNCdWlsdEluOiBmYWxzZSwKICAgICAgYm9vbCBpc01vZGlmaWVyOiBmYWxzZSwKICAgICAgdGhpcy5pc1BzZXVkbzogZmFsc2UsCiAgICAgIGJvb2wgaXNUb3BMZXZlbEtleXdvcmQ6IGZhbHNlLAogICAgICBpbnQgcHJlY2VkZW5jZTogTk9fUFJFQ0VERU5DRX0pCiAgICAgIDogc3VwZXIobGV4ZW1lLCBuYW1lLCBwcmVjZWRlbmNlLCBLRVlXT1JEX1RPS0VOLAogICAgICAgICAgICBpc01vZGlmaWVyOiBpc01vZGlmaWVyLCBpc1RvcExldmVsS2V5d29yZDogaXNUb3BMZXZlbEtleXdvcmQpOwoKICBib29sIGdldCBpc0J1aWx0SW5PclBzZXVkbyA9PiBpc0J1aWx0SW4gfHwgaXNQc2V1ZG87CgogIC8qKgogICAqIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGtleXdvcmQgaXMgImJ1aWx0LWluIiBpZGVudGlmaWVyLgogICAqIFRoaXMgbWV0aG9kIGV4aXN0cyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhbmQgd2lsbCBiZSByZW1vdmVkLgogICAqIFVzZSBbaXNCdWlsdEluXSBpbnN0ZWFkLgogICAqLwogIEBkZXByZWNhdGVkCiAgYm9vbCBnZXQgaXNQc2V1ZG9LZXl3b3JkID0+IGlzQnVpbHRJbjsgLy8gVE9ETyAoZGFucnViZWwpOiByZW1vdmUgdGhpcwoKICAvKioKICAgKiBUaGUgbmFtZSBvZiB0aGUga2V5d29yZCB0eXBlLgogICAqLwogIFN0cmluZyBnZXQgbmFtZSA9PiBsZXhlbWUudG9VcHBlckNhc2UoKTsKCiAgLyoqCiAgICogVGhlIGxleGVtZSBmb3IgdGhlIGtleXdvcmQuCiAgICoKICAgKiBEZXByZWNhdGVkIC0gdXNlIFtsZXhlbWVdIGluc3RlYWQuCiAgICovCiAgQGRlcHJlY2F0ZWQKICBTdHJpbmcgZ2V0IHN5bnRheCA9PiBsZXhlbWU7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IG5hbWU7CgogIC8qKgogICAqIENyZWF0ZSBhIHRhYmxlIG1hcHBpbmcgdGhlIGxleGVtZXMgb2Yga2V5d29yZHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcga2V5d29yZAogICAqIGFuZCByZXR1cm4gdGhlIHRhYmxlIHRoYXQgd2FzIGNyZWF0ZWQuCiAgICovCiAgc3RhdGljIE1hcDxTdHJpbmcsIEtleXdvcmQ+IF9jcmVhdGVLZXl3b3JkTWFwKCkgewogICAgTGlua2VkSGFzaE1hcDxTdHJpbmcsIEtleXdvcmQ+IHJlc3VsdCA9CiAgICAgICAgbmV3IExpbmtlZEhhc2hNYXA8U3RyaW5nLCBLZXl3b3JkPigpOwogICAgZm9yIChLZXl3b3JkIGtleXdvcmQgaW4gdmFsdWVzKSB7CiAgICAgIHJlc3VsdFtrZXl3b3JkLmxleGVtZV0gPSBrZXl3b3JkOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCi8qKgogKiBBIHRva2VuIHJlcHJlc2VudGluZyBhIGtleXdvcmQgaW4gdGhlIGxhbmd1YWdlLgogKi8KY2xhc3MgS2V5d29yZFRva2VuIGV4dGVuZHMgU2ltcGxlVG9rZW4gewogIEBvdmVycmlkZQogIGZpbmFsIEtleXdvcmQga2V5d29yZDsKCiAgLyoqCiAgICogSW5pdGlhbGl6ZSBhIG5ld2x5IGNyZWF0ZWQgdG9rZW4gdG8gcmVwcmVzZW50IHRoZSBnaXZlbiBba2V5d29yZF0gYXQgdGhlCiAgICogZ2l2ZW4gW29mZnNldF0uCiAgICovCiAgS2V5d29yZFRva2VuKHRoaXMua2V5d29yZCwgaW50IG9mZnNldCwgW0NvbW1lbnRUb2tlbiBwcmVjZWRpbmdDb21tZW50XSkKICAgICAgOiBzdXBlcihrZXl3b3JkLCBvZmZzZXQsIHByZWNlZGluZ0NvbW1lbnQpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBjb3B5KCkgPT4KICAgICAgbmV3IEtleXdvcmRUb2tlbihrZXl3b3JkLCBvZmZzZXQsIGNvcHlDb21tZW50cyhwcmVjZWRpbmdDb21tZW50cykpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0lkZW50aWZpZXIgPT4ga2V5d29yZC5pc1BzZXVkbyB8fCBrZXl3b3JkLmlzQnVpbHRJbjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNLZXl3b3JkID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzS2V5d29yZE9ySWRlbnRpZmllciA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBPYmplY3QgdmFsdWUoKSA9PiBrZXl3b3JkOwp9CgovKioKICogQSB0b2tlbiB0aGF0IHdhcyBzY2FubmVkIGZyb20gdGhlIGlucHV0LiBFYWNoIHRva2VuIGtub3dzIHdoaWNoIHRva2VucwogKiBwcmVjZWRlIGFuZCBmb2xsb3cgaXQsIGFjdGluZyBhcyBhIGxpbmsgaW4gYSBkb3VibHkgbGlua2VkIGxpc3Qgb2YgdG9rZW5zLgogKi8KY2xhc3MgU2ltcGxlVG9rZW4gaW1wbGVtZW50cyBUb2tlbiB7CiAgLyoqCiAgICogVGhlIHR5cGUgb2YgdGhlIHRva2VuLgogICAqLwogIEBvdmVycmlkZQogIGZpbmFsIFRva2VuVHlwZSB0eXBlOwoKICAvKioKICAgKiBUaGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIGluIHRoZQogICAqIHRva2VuLgogICAqLwogIEBvdmVycmlkZQogIGludCBvZmZzZXQgPSAwOwoKICAvKioKICAgKiBUaGUgcHJldmlvdXMgdG9rZW4gaW4gdGhlIHRva2VuIHN0cmVhbS4KICAgKi8KICBAb3ZlcnJpZGUKICBUb2tlbiBwcmV2aW91czsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gbmV4dDsKCiAgLyoqCiAgICogVGhlIGZpcnN0IGNvbW1lbnQgaW4gdGhlIGxpc3Qgb2YgY29tbWVudHMgdGhhdCBwcmVjZWRlIHRoaXMgdG9rZW4uCiAgICovCiAgQ29tbWVudFRva2VuIF9wcmVjZWRpbmdDb21tZW50OwoKICAvKioKICAgKiBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCB0b2tlbiB0byBoYXZlIHRoZSBnaXZlbiBbdHlwZV0gYW5kIFtvZmZzZXRdLgogICAqLwogIFNpbXBsZVRva2VuKHRoaXMudHlwZSwgdGhpcy5vZmZzZXQsIFt0aGlzLl9wcmVjZWRpbmdDb21tZW50XSkgewogICAgX3NldENvbW1lbnRQYXJlbnQoX3ByZWNlZGluZ0NvbW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBjaGFyQ291bnQgPT4gbGVuZ3RoOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGNoYXJPZmZzZXQgPT4gb2Zmc2V0OwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGNoYXJFbmQgPT4gZW5kOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBnZXQgYmVmb3JlU3ludGhldGljID0+IG51bGw7CgogIEBvdmVycmlkZQogIHNldCBiZWZvcmVTeW50aGV0aWMoVG9rZW4gcHJldmlvdXMpIHsKICAgIC8vIGlnbm9yZWQKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgZW5kID0+IG9mZnNldCArIGxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZ2V0IGVuZEdyb3VwID0+IG51bGw7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW9mID0+IHR5cGUgPT0gVG9rZW5UeXBlLkVPRjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNJZGVudGlmaWVyID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0tleXdvcmQgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzS2V5d29yZE9ySWRlbnRpZmllciA9PiBpc0lkZW50aWZpZXI7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTW9kaWZpZXIgPT4gdHlwZS5pc01vZGlmaWVyOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc09wZXJhdG9yID0+IHR5cGUuaXNPcGVyYXRvcjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTeW50aGV0aWMgPT4gbGVuZ3RoID09IDA7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVG9wTGV2ZWxLZXl3b3JkID0+IHR5cGUuaXNUb3BMZXZlbEtleXdvcmQ7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVXNlckRlZmluYWJsZU9wZXJhdG9yID0+IHR5cGUuaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I7CgogIEBvdmVycmlkZQogIEtleXdvcmQgZ2V0IGtleXdvcmQgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBraW5kID0+IHR5cGUua2luZDsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gbGV4ZW1lLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBsZXhlbWUgPT4gdHlwZS5sZXhlbWU7CgogIEBvdmVycmlkZQogIENvbW1lbnRUb2tlbiBnZXQgcHJlY2VkaW5nQ29tbWVudHMgPT4gX3ByZWNlZGluZ0NvbW1lbnQ7CgogIHZvaWQgc2V0IHByZWNlZGluZ0NvbW1lbnRzKENvbW1lbnRUb2tlbiBjb21tZW50KSB7CiAgICBfcHJlY2VkaW5nQ29tbWVudCA9IGNvbW1lbnQ7CiAgICBfc2V0Q29tbWVudFBhcmVudChfcHJlY2VkaW5nQ29tbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IHN0cmluZ1ZhbHVlID0+IHR5cGUuc3RyaW5nVmFsdWU7CgogIEBvdmVycmlkZQogIFRva2VuIGNvcHkoKSA9PgogICAgICBuZXcgU2ltcGxlVG9rZW4odHlwZSwgb2Zmc2V0LCBjb3B5Q29tbWVudHMocHJlY2VkaW5nQ29tbWVudHMpKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gY29weUNvbW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICBpZiAodG9rZW4gPT0gbnVsbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIFRva2VuIGhlYWQgPSB0b2tlbi5jb3B5KCk7CiAgICBUb2tlbiB0YWlsID0gaGVhZDsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIHdoaWxlICh0b2tlbiAhPSBudWxsKSB7CiAgICAgIHRhaWwgPSB0YWlsLnNldE5leHQodG9rZW4uY29weSgpKTsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgfQogICAgcmV0dXJuIGhlYWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG1hdGNoZXNBbnkoTGlzdDxUb2tlblR5cGU+IHR5cGVzKSB7CiAgICBmb3IgKFRva2VuVHlwZSB0eXBlIGluIHR5cGVzKSB7CiAgICAgIGlmICh0aGlzLnR5cGUgPT0gdHlwZSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBzZXROZXh0KFRva2VuIHRva2VuKSB7CiAgICBuZXh0ID0gdG9rZW47CiAgICB0b2tlbi5wcmV2aW91cyA9IHRoaXM7CiAgICB0b2tlbi5iZWZvcmVTeW50aGV0aWMgPSB0aGlzOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gc2V0TmV4dFdpdGhvdXRTZXR0aW5nUHJldmlvdXMoVG9rZW4gdG9rZW4pIHsKICAgIG5leHQgPSB0b2tlbjsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IGxleGVtZTsKCiAgQG92ZXJyaWRlCiAgT2JqZWN0IHZhbHVlKCkgPT4gbGV4ZW1lOwoKICAvKioKICAgKiBTZXRzIHRoZSBgcGFyZW50YCBwcm9wZXJ0eSB0byBgdGhpc2AgZm9yIHRoZSBnaXZlbiBbY29tbWVudF0gYW5kIGFsbCB0aGUKICAgKiBuZXh0IHRva2Vucy4KICAgKi8KICB2b2lkIF9zZXRDb21tZW50UGFyZW50KENvbW1lbnRUb2tlbiBjb21tZW50KSB7CiAgICB3aGlsZSAoY29tbWVudCAhPSBudWxsKSB7CiAgICAgIGNvbW1lbnQucGFyZW50ID0gdGhpczsKICAgICAgY29tbWVudCA9IGNvbW1lbnQubmV4dDsKICAgIH0KICB9Cn0KCi8qKgogKiBBIHRva2VuIHdob3NlIHZhbHVlIGlzIGluZGVwZW5kZW50IG9mIGl0J3MgdHlwZS4KICovCmNsYXNzIFN0cmluZ1Rva2VuIGV4dGVuZHMgU2ltcGxlVG9rZW4gewogIC8qKgogICAqIFRoZSBsZXhlbWUgcmVwcmVzZW50ZWQgYnkgdGhpcyB0b2tlbi4KICAgKi8KICBTdHJpbmcgX3ZhbHVlOwoKICAvKioKICAgKiBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCB0b2tlbiB0byByZXByZXNlbnQgYSB0b2tlbiBvZiB0aGUgZ2l2ZW4gW3R5cGVdCiAgICogd2l0aCB0aGUgZ2l2ZW4gW3ZhbHVlXSBhdCB0aGUgZ2l2ZW4gW29mZnNldF0uCiAgICovCiAgU3RyaW5nVG9rZW4oVG9rZW5UeXBlIHR5cGUsIFN0cmluZyB2YWx1ZSwgaW50IG9mZnNldCwKICAgICAgW0NvbW1lbnRUb2tlbiBwcmVjZWRpbmdDb21tZW50XSkKICAgICAgOiBzdXBlcih0eXBlLCBvZmZzZXQsIHByZWNlZGluZ0NvbW1lbnQpIHsKICAgIHRoaXMuX3ZhbHVlID0gU3RyaW5nVXRpbGl0aWVzLmludGVybih2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0lkZW50aWZpZXIgPT4gaWRlbnRpY2FsKGtpbmQsIElERU5USUZJRVJfVE9LRU4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGxleGVtZSA9PiBfdmFsdWU7CgogIEBvdmVycmlkZQogIFRva2VuIGNvcHkoKSA9PgogICAgICBuZXcgU3RyaW5nVG9rZW4odHlwZSwgX3ZhbHVlLCBvZmZzZXQsIGNvcHlDb21tZW50cyhwcmVjZWRpbmdDb21tZW50cykpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmFsdWUoKSA9PiBfdmFsdWU7Cn0KCi8qKgogKiBBIHN5bnRoZXRpYyBiZWdpbiB0b2tlbi4KICovCmNsYXNzIFN5bnRoZXRpY0JlZ2luVG9rZW4gZXh0ZW5kcyBCZWdpblRva2VuIHsKICAvKioKICAgKiBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCB0b2tlbiB0byBoYXZlIHRoZSBnaXZlbiBbdHlwZV0gYXQgdGhlIGdpdmVuCiAgICogW29mZnNldF0uCiAgICovCiAgU3ludGhldGljQmVnaW5Ub2tlbihUb2tlblR5cGUgdHlwZSwgaW50IG9mZnNldCwKICAgICAgW0NvbW1lbnRUb2tlbiBwcmVjZWRpbmdDb21tZW50XSkKICAgICAgOiBzdXBlcih0eXBlLCBvZmZzZXQsIHByZWNlZGluZ0NvbW1lbnQpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBjb3B5KCkgPT4KICAgICAgbmV3IFN5bnRoZXRpY0JlZ2luVG9rZW4odHlwZSwgb2Zmc2V0LCBjb3B5Q29tbWVudHMocHJlY2VkaW5nQ29tbWVudHMpKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTeW50aGV0aWMgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gMDsKfQoKLyoqCiAqIEEgc3ludGhldGljIGtleXdvcmQgdG9rZW4uCiAqLwpjbGFzcyBTeW50aGV0aWNLZXl3b3JkVG9rZW4gZXh0ZW5kcyBLZXl3b3JkVG9rZW4gewogIC8qKgogICAqIEluaXRpYWxpemUgYSBuZXdseSBjcmVhdGVkIHRva2VuIHRvIHJlcHJlc2VudCB0aGUgZ2l2ZW4gW2tleXdvcmRdIGF0IHRoZQogICAqIGdpdmVuIFtvZmZzZXRdLgogICAqLwogIFN5bnRoZXRpY0tleXdvcmRUb2tlbihLZXl3b3JkIGtleXdvcmQsIGludCBvZmZzZXQpIDogc3VwZXIoa2V5d29yZCwgb2Zmc2V0KTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gMDsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gY29weSgpID0+IG5ldyBTeW50aGV0aWNLZXl3b3JkVG9rZW4oa2V5d29yZCwgb2Zmc2V0KTsKfQoKLyoqCiAqIEEgdG9rZW4gd2hvc2UgdmFsdWUgaXMgaW5kZXBlbmRlbnQgb2YgaXQncyB0eXBlLgogKi8KY2xhc3MgU3ludGhldGljU3RyaW5nVG9rZW4gZXh0ZW5kcyBTdHJpbmdUb2tlbiB7CiAgZmluYWwgaW50IF9sZW5ndGg7CgogIC8qKgogICAqIEluaXRpYWxpemUgYSBuZXdseSBjcmVhdGVkIHRva2VuIHRvIHJlcHJlc2VudCBhIHRva2VuIG9mIHRoZSBnaXZlbiBbdHlwZV0KICAgKiB3aXRoIHRoZSBnaXZlbiBbdmFsdWVdIGF0IHRoZSBnaXZlbiBbb2Zmc2V0XS4gSWYgdGhlIFtsZW5ndGhdIGlzCiAgICogbm90IHNwZWNpZmllZCwgdGhlbiBpdCBkZWZhdWx0cyB0byB0aGUgbGVuZ3RoIG9mIFt2YWx1ZV0uCiAgICovCiAgU3ludGhldGljU3RyaW5nVG9rZW4oVG9rZW5UeXBlIHR5cGUsIFN0cmluZyB2YWx1ZSwgaW50IG9mZnNldCwgW3RoaXMuX2xlbmd0aF0pCiAgICAgIDogc3VwZXIodHlwZSwgdmFsdWUsIG9mZnNldCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3ludGhldGljID0+IHRydWU7CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IF9sZW5ndGggPz8gc3VwZXIubGVuZ3RoOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBjb3B5KCkgPT4gbmV3IFN5bnRoZXRpY1N0cmluZ1Rva2VuKHR5cGUsIF92YWx1ZSwgb2Zmc2V0LCBfbGVuZ3RoKTsKfQoKLyoqCiAqIEEgc3ludGhldGljIHRva2VuLgogKi8KY2xhc3MgU3ludGhldGljVG9rZW4gZXh0ZW5kcyBTaW1wbGVUb2tlbiB7CiAgU3ludGhldGljVG9rZW4oVG9rZW5UeXBlIHR5cGUsIGludCBvZmZzZXQpIDogc3VwZXIodHlwZSwgb2Zmc2V0KTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gYmVmb3JlU3ludGhldGljOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1N5bnRoZXRpYyA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCA9PiAwOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBjb3B5KCkgPT4gbmV3IFN5bnRoZXRpY1Rva2VuKHR5cGUsIG9mZnNldCk7Cn0KCi8qKgogKiBBIHRva2VuIHRoYXQgd2FzIHNjYW5uZWQgZnJvbSB0aGUgaW5wdXQuIEVhY2ggdG9rZW4ga25vd3Mgd2hpY2ggdG9rZW5zCiAqIHByZWNlZGUgYW5kIGZvbGxvdyBpdCwgYWN0aW5nIGFzIGEgbGluayBpbiBhIGRvdWJseSBsaW5rZWQgbGlzdCBvZiB0b2tlbnMuCiAqCiAqIENsaWVudHMgbWF5IG5vdCBleHRlbmQsIGltcGxlbWVudCBvciBtaXgtaW4gdGhpcyBjbGFzcy4KICovCmFic3RyYWN0IGNsYXNzIFRva2VuIGltcGxlbWVudHMgU3ludGFjdGljRW50aXR5IHsKICAvKioKICAgKiBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCB0b2tlbiB0byBoYXZlIHRoZSBnaXZlbiBbdHlwZV0gYW5kIFtvZmZzZXRdLgogICAqLwogIGZhY3RvcnkgVG9rZW4oVG9rZW5UeXBlIHR5cGUsIGludCBvZmZzZXQsIFtDb21tZW50VG9rZW4gcHJlY2VlZGluZ0NvbW1lbnRdKSA9CiAgICAgIFNpbXBsZVRva2VuOwoKICAvKioKICAgKiBJbml0aWFsaXplIGEgbmV3bHkgY3JlYXRlZCBlbmQtb2YtZmlsZSB0b2tlbiB0byBoYXZlIHRoZSBnaXZlbiBbb2Zmc2V0XS4KICAgKi8KICBmYWN0b3J5IFRva2VuLmVvZihpbnQgb2Zmc2V0LCBbQ29tbWVudFRva2VuIHByZWNlZGluZ0NvbW1lbnRzXSkgewogICAgVG9rZW4gZW9mID0gbmV3IFNpbXBsZVRva2VuKFRva2VuVHlwZS5FT0YsIG9mZnNldCwgcHJlY2VkaW5nQ29tbWVudHMpOwogICAgLy8gRU9GIHBvaW50cyB0byBpdHNlbGYgc28gdGhlcmUncyBhbHdheXMgaW5maW5pdGUgbG9vay1haGVhZC4KICAgIGVvZi5wcmV2aW91cyA9IGVvZjsKICAgIGVvZi5uZXh0ID0gZW9mOwogICAgcmV0dXJuIGVvZjsKICB9CgogIC8qKgogICAqIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwYXJzZWQgYnkgdGhpcyB0b2tlbi4KICAgKi8KICBpbnQgZ2V0IGNoYXJDb3VudDsKCiAgLyoqCiAgICogVGhlIGNoYXJhY3RlciBvZmZzZXQgb2YgdGhlIHN0YXJ0IG9mIHRoaXMgdG9rZW4gd2l0aGluIHRoZSBzb3VyY2UgdGV4dC4KICAgKi8KICBpbnQgZ2V0IGNoYXJPZmZzZXQ7CgogIC8qKgogICAqIFRoZSBjaGFyYWN0ZXIgb2Zmc2V0IG9mIHRoZSBlbmQgb2YgdGhpcyB0b2tlbiB3aXRoaW4gdGhlIHNvdXJjZSB0ZXh0LgogICAqLwogIGludCBnZXQgY2hhckVuZDsKCiAgLyoqCiAgICogVGhlIHRva2VuIGJlZm9yZSB0aGlzIHN5bnRoZXRpYyB0b2tlbiwKICAgKiBvciBgbnVsbGAgaWYgdGhpcyBpcyBub3QgYSBzeW50aGV0aWMgYClgLCBgXWAsIGB9YCwgb3IgYD5gIHRva2VuLgogICAqLwogIFRva2VuIGdldCBiZWZvcmVTeW50aGV0aWM7CgogIC8qKgogICAqIFNldCB0b2tlbiBiZWZvcmUgdGhpcyBzeW50aGV0aWMgYClgLCBgXWAsIGB9YCwgb3IgYD5gIHRva2VuLAogICAqIGFuZCBpZ25vcmVkIG90aGVyd2lzZS4KICAgKi8KICBzZXQgYmVmb3JlU3ludGhldGljKFRva2VuIHByZXZpb3VzKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBlbmQ7CgogIC8qKgogICAqIFRoZSB0b2tlbiB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoaXMgdG9rZW4sIG9yIGBudWxsYCBpZiB0aGlzIHRva2VuIGlzIG5vdAogICAqIHRoZSBmaXJzdCBvZiBhIHBhaXIgb2YgbWF0Y2hpbmcgdG9rZW5zIChzdWNoIGFzIHBhcmVudGhlc2VzKS4KICAgKi8KICBUb2tlbiBnZXQgZW5kR3JvdXAgPT4gbnVsbDsKCiAgLyoqCiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGlzIHRva2VuIHJlcHJlc2VudHMgYW4gZW5kIG9mIGZpbGUuCiAgICovCiAgYm9vbCBnZXQgaXNFb2Y7CgogIC8qKgogICAqIFRydWUgaWYgdGhpcyB0b2tlbiBpcyBhbiBpZGVudGlmaWVyLiBTb21lIGtleXdvcmRzIGFsbG93ZWQgYXMgaWRlbnRpZmllcnMsCiAgICogc2VlIGltcGxlbWVudGF0aW9uIGluIFtLZXl3b3JkVG9rZW5dLgogICAqLwogIGJvb2wgZ2V0IGlzSWRlbnRpZmllcjsKCiAgLyoqCiAgICogVHJ1ZSBpZiB0aGlzIHRva2VuIGlzIGEga2V5d29yZC4gU29tZSBrZXl3b3JkcyBhbGxvd2VkIGFzIGlkZW50aWZpZXJzLAogICAqIHNlZSBpbXBsZW1lbnRhdGlvbiBpbiBbS2V5d29yZFRva2VuXS4KICAgKi8KICBib29sIGdldCBpc0tleXdvcmQ7CgogIC8qKgogICAqIFRydWUgaWYgdGhpcyB0b2tlbiBpcyBhIGtleXdvcmQgb3IgYW4gaWRlbnRpZmllci4KICAgKi8KICBib29sIGdldCBpc0tleXdvcmRPcklkZW50aWZpZXI7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0b2tlbiBpcyBhIG1vZGlmaWVyIHN1Y2ggYXMgYGFic3RyYWN0YCBvciBgY29uc3RgLgogICAqLwogIGJvb2wgZ2V0IGlzTW9kaWZpZXI7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0b2tlbiByZXByZXNlbnRzIGFuIG9wZXJhdG9yLgogICAqLwogIGJvb2wgZ2V0IGlzT3BlcmF0b3I7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0b2tlbiBpcyBhIHN5bnRoZXRpYyB0b2tlbi4gQSBzeW50aGV0aWMgdG9rZW4gaXMgYQogICAqIHRva2VuIHRoYXQgd2FzIGludHJvZHVjZWQgYnkgdGhlIHBhcnNlciBpbiBvcmRlciB0byByZWNvdmVyIGZyb20gYW4gZXJyb3IKICAgKiBpbiB0aGUgY29kZS4KICAgKi8KICBib29sIGdldCBpc1N5bnRoZXRpYzsKCiAgLyoqCiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGlzIHRva2VuIGlzIGEga2V5d29yZCBzdGFydGluZyBhIHRvcCBsZXZlbCBkZWNsYXJhdGlvbgogICAqIHN1Y2ggYXMgYGNsYXNzYCwgYGVudW1gLCBgaW1wb3J0YCwgZXRjLgogICAqLwogIGJvb2wgZ2V0IGlzVG9wTGV2ZWxLZXl3b3JkOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdG9rZW4gcmVwcmVzZW50cyBhbiBvcGVyYXRvciB0aGF0IGNhbiBiZSBkZWZpbmVkIGJ5CiAgICogdXNlcnMuCiAgICovCiAgYm9vbCBnZXQgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I7CgogIC8qKgogICAqIFJldHVybiB0aGUga2V5d29yZCwgaWYgYSBrZXl3b3JkIHRva2VuLCBvciBgbnVsbGAgb3RoZXJ3aXNlLgogICAqLwogIEtleXdvcmQgZ2V0IGtleXdvcmQ7CgogIC8qKgogICAqIFRoZSBraW5kIGVudW0gb2YgdGhpcyB0b2tlbiBhcyBkZXRlcm1pbmVkIGJ5IGl0cyBbdHlwZV0uCiAgICovCiAgaW50IGdldCBraW5kOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aDsKCiAgLyoqCiAgICogUmV0dXJuIHRoZSBsZXhlbWUgdGhhdCByZXByZXNlbnRzIHRoaXMgdG9rZW4uCiAgICoKICAgKiBGb3IgW1N0cmluZ1Rva2VuXXMgdGhlIFtsZXhlbWVdIGluY2x1ZGVzIHRoZSBxdW90ZXMsIGV4cGxpY2l0IGVzY2FwZXMsIGV0Yy4KICAgKi8KICBTdHJpbmcgZ2V0IGxleGVtZTsKCiAgLyoqCiAgICogUmV0dXJuIHRoZSBuZXh0IHRva2VuIGluIHRoZSB0b2tlbiBzdHJlYW0uCiAgICovCiAgVG9rZW4gZ2V0IG5leHQ7CgogIC8qKgogICAqIFJldHVybiB0aGUgbmV4dCB0b2tlbiBpbiB0aGUgdG9rZW4gc3RyZWFtLgogICAqLwogIHZvaWQgc2V0IG5leHQoVG9rZW4gbmV4dCk7CgogIEBvdmVycmlkZQogIGludCBnZXQgb2Zmc2V0OwoKICAvKioKICAgKiBTZXQgdGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbgogICAqIHRoZSB0b2tlbiB0byB0aGUgZ2l2ZW4gW29mZnNldF0uCiAgICovCiAgdm9pZCBzZXQgb2Zmc2V0KGludCBvZmZzZXQpOwoKICAvKioKICAgKiBSZXR1cm4gdGhlIGZpcnN0IGNvbW1lbnQgaW4gdGhlIGxpc3Qgb2YgY29tbWVudHMgdGhhdCBwcmVjZWRlIHRoaXMgdG9rZW4sCiAgICogb3IgYG51bGxgIGlmIHRoZXJlIGFyZSBubyBjb21tZW50cyBwcmVjZWRpbmcgdGhpcyB0b2tlbi4gQWRkaXRpb25hbAogICAqIGNvbW1lbnRzIGNhbiBiZSByZWFjaGVkIGJ5IGZvbGxvd2luZyB0aGUgdG9rZW4gc3RyZWFtIHVzaW5nIFtuZXh0XSB1bnRpbAogICAqIGBudWxsYCBpcyByZXR1cm5lZC4KICAgKgogICAqIEZvciBleGFtcGxlLCBpZiB0aGUgb3JpZ2luYWwgY29udGVudHMgd2VyZSBgLyogb25lICovIC8qIHR3byAqLyBpZGAsIHRoZW4KICAgKiB0aGUgZmlyc3QgcHJlY2VkaW5nIGNvbW1lbnQgdG9rZW4gd2lsbCBoYXZlIGEgbGV4ZW1lIG9mIGAvKiBvbmUgKi9gIGFuZAogICAqIHRoZSBuZXh0IGNvbW1lbnQgdG9rZW4gd2lsbCBoYXZlIGEgbGV4ZW1lIG9mIGAvKiB0d28gKi9gLgogICAqLwogIFRva2VuIGdldCBwcmVjZWRpbmdDb21tZW50czsKCiAgLyoqCiAgICogUmV0dXJuIHRoZSBwcmV2aW91cyB0b2tlbiBpbiB0aGUgdG9rZW4gc3RyZWFtLgogICAqLwogIFRva2VuIGdldCBwcmV2aW91czsKCiAgLyoqCiAgICogU2V0IHRoZSBwcmV2aW91cyB0b2tlbiBpbiB0aGUgdG9rZW4gc3RyZWFtIHRvIHRoZSBnaXZlbiBbdG9rZW5dLgogICAqLwogIHZvaWQgc2V0IHByZXZpb3VzKFRva2VuIHRva2VuKTsKCiAgLyoqCiAgICogRm9yIHN5bWJvbCBhbmQga2V5d29yZCB0b2tlbnMsIHJldHVybnMgdGhlIHN0cmluZyB2YWx1ZSByZXByZXNlbnRlZCBieSB0aGlzCiAgICogdG9rZW4uIEZvciBbU3RyaW5nVG9rZW5dcyB0aGlzIG1ldGhvZCByZXR1cm5zIFs6bnVsbDpdLgogICAqCiAgICogRm9yIFtTeW1ib2xUb2tlbl1zIGFuZCBbS2V5d29yZFRva2VuXXMsIHRoZSBzdHJpbmcgdmFsdWUgaXMgYSBjb21waWxlLXRpbWUKICAgKiBjb25zdGFudCBvcmlnaW5hdGluZyBpbiB0aGUgW1Rva2VuVHlwZV0gb3IgaW4gdGhlIFtLZXl3b3JkXSBpbnN0YW5jZS4KICAgKiBUaGlzIGFsbG93cyB0ZXN0aW5nIGZvciBrZXl3b3JkcyBhbmQgc3ltYm9scyB1c2luZyBbOmlkZW50aWNhbDpdLCBlLmcuLAogICAqIFs6aWRlbnRpY2FsKCdjbGFzcycsIHRva2VuLnZhbHVlKTpdLgogICAqCiAgICogTm90ZSB0aGF0IHJldHVybmluZyBbOm51bGw6XSBmb3Igc3RyaW5nIHRva2VucyBpcyBpbXBvcnRhbnQgdG8gaWRlbnRpZnkKICAgKiBzeW1ib2xzIGFuZCBrZXl3b3Jkcywgd2UgY2Fubm90IHVzZSBbbGV4ZW1lXSBpbnN0ZWFkLiBUaGUgc3RyaW5nIGxpdGVyYWwKICAgKiAgICIkYSgkYiIKICAgKiBwcm9kdWNlcyAuLi4sIFN5bWJvbFRva2VuKCQpLCBTdHJpbmdUb2tlbihhKSwgU3RyaW5nVG9rZW4oKCksIC4uLgogICAqCiAgICogQWZ0ZXIgcGFyc2luZyB0aGUgaWRlbnRpZmllciAnYScsIHRoZSBwYXJzZXIgdGVzdHMgZm9yIGEgZnVuY3Rpb24KICAgKiBkZWNsYXJhdGlvbiB1c2luZyBbOmlkZW50aWNhbChuZXh0LnN0cmluZ1ZhbHVlLCAnKCcpOl0sIHdoaWNoIChyaWdodGZ1bGx5KQogICAqIHJldHVybnMgZmFsc2UgYmVjYXVzZSBzdHJpbmdWYWx1ZSByZXR1cm5zIFs6bnVsbDpdLgogICAqLwogIFN0cmluZyBnZXQgc3RyaW5nVmFsdWU7CgogIC8qKgogICAqIFJldHVybiB0aGUgdHlwZSBvZiB0aGUgdG9rZW4uCiAgICovCiAgVG9rZW5UeXBlIGdldCB0eXBlOwoKICAvKioKICAgKiBSZXR1cm4gYSBuZXdseSBjcmVhdGVkIHRva2VuIHRoYXQgaXMgYSBjb3B5IG9mIHRoaXMgdG9rZW5zCiAgICogaW5jbHVkaW5nIGFueSBbcHJlY2VlZGluZ0NvbW1lbnRdIHRva2VucywKICAgKiBidXQgdGhhdCBpcyBub3QgYSBwYXJ0IG9mIGFueSB0b2tlbiBzdHJlYW0uCiAgICovCiAgVG9rZW4gY29weSgpOwoKICAvKioKICAgKiBDb3B5IGEgbGlua2VkIGxpc3Qgb2YgY29tbWVudCB0b2tlbnMgaWRlbnRpY2FsIHRvIHRoZSBnaXZlbiBjb21tZW50IHRva2Vucy4KICAgKi8KICBUb2tlbiBjb3B5Q29tbWVudHMoVG9rZW4gdG9rZW4pOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdG9rZW4gaGFzIGFueSBvbmUgb2YgdGhlIGdpdmVuIFt0eXBlc10uCiAgICovCiAgYm9vbCBtYXRjaGVzQW55KExpc3Q8VG9rZW5UeXBlPiB0eXBlcyk7CgogIC8qKgogICAqIFNldCB0aGUgbmV4dCB0b2tlbiBpbiB0aGUgdG9rZW4gc3RyZWFtIHRvIHRoZSBnaXZlbiBbdG9rZW5dLiBUaGlzIGhhcyB0aGUKICAgKiBzaWRlLWVmZmVjdCBvZiBzZXR0aW5nIHRoaXMgdG9rZW4gdG8gYmUgdGhlIHByZXZpb3VzIHRva2VuIGZvciB0aGUgZ2l2ZW4KICAgKiB0b2tlbi4gUmV0dXJuIHRoZSB0b2tlbiB0aGF0IHdhcyBwYXNzZWQgaW4uCiAgICovCiAgVG9rZW4gc2V0TmV4dChUb2tlbiB0b2tlbik7CgogIC8qKgogICAqIFNldCB0aGUgbmV4dCB0b2tlbiBpbiB0aGUgdG9rZW4gc3RyZWFtIHRvIHRoZSBnaXZlbiB0b2tlbiB3aXRob3V0IGNoYW5naW5nCiAgICogd2hpY2ggdG9rZW4gaXMgdGhlIHByZXZpb3VzIHRva2VuIGZvciB0aGUgZ2l2ZW4gdG9rZW4uIFJldHVybiB0aGUgdG9rZW4KICAgKiB0aGF0IHdhcyBwYXNzZWQgaW4uCiAgICovCiAgVG9rZW4gc2V0TmV4dFdpdGhvdXRTZXR0aW5nUHJldmlvdXMoVG9rZW4gdG9rZW4pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGlzIHRva2VuIHRvIGJlIHVzZWQgZm9yIGRlYnVnZ2luZwogICAqIHB1cnBvc2VzLiBUaGUgcmVzdWx0aW5nIHN0cmluZyBtaWdodCBjb250YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZQogICAqIHN0cnVjdHVyZSBvZiB0aGUgdG9rZW4sIGZvciBleGFtcGxlICdTdHJpbmdUb2tlbihmb28pJyBmb3IgdGhlIGlkZW50aWZpZXIKICAgKiB0b2tlbiAnZm9vJy4KICAgKgogICAqIFVzZSBbbGV4ZW1lXSBmb3IgdGhlIHRleHQgYWN0dWFsbHkgcGFyc2VkIGJ5IHRoZSB0b2tlbi4KICAgKi8KICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKTsKCiAgLyoqCiAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGlzIHRva2VuLiBGb3Iga2V5d29yZCB0b2tlbnMsIHRoaXMgaXMgdGhlIGtleXdvcmQKICAgKiBhc3NvY2lhdGVkIHdpdGggdGhlIHRva2VuLCBmb3Igb3RoZXIgdG9rZW5zIGl0IGlzIHRoZSBsZXhlbWUgYXNzb2NpYXRlZAogICAqIHdpdGggdGhlIHRva2VuLgogICAqLwogIE9iamVjdCB2YWx1ZSgpOwoKICAvKioKICAgKiBDb21wYXJlIHRoZSBnaXZlbiBbdG9rZW5zXSB0byBmaW5kIHRoZSB0b2tlbiB0aGF0IGFwcGVhcnMgZmlyc3QgaW4gdGhlCiAgICogc291cmNlIGJlaW5nIHBhcnNlZC4gVGhhdCBpcywgcmV0dXJuIHRoZSBsZWZ0LW1vc3Qgb2YgYWxsIG9mIHRoZSB0b2tlbnMuCiAgICogVGhlIGxpc3QgbXVzdCBiZSBub24tYG51bGxgLCBidXQgdGhlIGVsZW1lbnRzIG9mIHRoZSBsaXN0IGFyZSBhbGxvd2VkIHRvIGJlCiAgICogYG51bGxgLiBSZXR1cm4gdGhlIHRva2VuIHdpdGggdGhlIHNtYWxsZXN0IG9mZnNldCwgb3IgYG51bGxgIGlmIHRoZSBsaXN0IGlzCiAgICogZW1wdHkgb3IgaWYgYWxsIG9mIHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdCBhcmUgYG51bGxgLgogICAqLwogIHN0YXRpYyBUb2tlbiBsZXhpY2FsbHlGaXJzdChMaXN0PFRva2VuPiB0b2tlbnMpIHsKICAgIFRva2VuIGZpcnN0ID0gbnVsbDsKICAgIGludCBvZmZzZXQgPSAtMTsKICAgIGludCBsZW5ndGggPSB0b2tlbnMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBUb2tlbiB0b2tlbiA9IHRva2Vuc1tpXTsKICAgICAgaWYgKHRva2VuICE9IG51bGwgJiYgKG9mZnNldCA8IDAgfHwgdG9rZW4ub2Zmc2V0IDwgb2Zmc2V0KSkgewogICAgICAgIGZpcnN0ID0gdG9rZW47CiAgICAgICAgb2Zmc2V0ID0gdG9rZW4ub2Zmc2V0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmlyc3Q7CiAgfQp9CgovKioKICogVGhlIGNsYXNzZXMgKG9yIGdyb3Vwcykgb2YgdG9rZW5zIHdpdGggYSBzaW1pbGFyIHVzZS4KICovCmNsYXNzIFRva2VuQ2xhc3MgewogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIG5vdCBwYXJ0IG9mIGFueSBzcGVjaWZpYwogICAqIGNsYXNzIG9mIHRva2VuLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIE5PX0NMQVNTID0gY29uc3QgVG9rZW5DbGFzcygnTk9fQ0xBU1MnKTsKCiAgLyoqCiAgICogQSB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuIHR5cGUgaXMgYW4gYWRkaXRpdmUgb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgQURESVRJVkVfT1BFUkFUT1IgPQogICAgICBjb25zdCBUb2tlbkNsYXNzKCdBRERJVElWRV9PUEVSQVRPUicsIEFERElUSVZFX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhbiBhc3NpZ25tZW50IG9wZXJhdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIEFTU0lHTk1FTlRfT1BFUkFUT1IgPQogICAgICBjb25zdCBUb2tlbkNsYXNzKCdBU1NJR05NRU5UX09QRVJBVE9SJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFKTsKCiAgLyoqCiAgICogQSB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuIHR5cGUgaXMgYSBiaXR3aXNlLWFuZCBvcGVyYXRvci4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5DbGFzcyBCSVRXSVNFX0FORF9PUEVSQVRPUiA9CiAgICAgIGNvbnN0IFRva2VuQ2xhc3MoJ0JJVFdJU0VfQU5EX09QRVJBVE9SJywgQklUV0lTRV9BTkRfUFJFQ0VERU5DRSk7CgogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIGEgYml0d2lzZS1vciBvcGVyYXRvci4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5DbGFzcyBCSVRXSVNFX09SX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnQklUV0lTRV9PUl9PUEVSQVRPUicsIEJJVFdJU0VfT1JfUFJFQ0VERU5DRSk7CgogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIGEgYml0d2lzZS14b3Igb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgQklUV0lTRV9YT1JfT1BFUkFUT1IgPQogICAgICBjb25zdCBUb2tlbkNsYXNzKCdCSVRXSVNFX1hPUl9PUEVSQVRPUicsIEJJVFdJU0VfWE9SX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhIGNhc2NhZGUgb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgQ0FTQ0FERV9PUEVSQVRPUiA9CiAgICAgIGNvbnN0IFRva2VuQ2xhc3MoJ0NBU0NBREVfT1BFUkFUT1InLCBDQVNDQURFX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhIGNvbmRpdGlvbmFsIG9wZXJhdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIENPTkRJVElPTkFMX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnQ09ORElUSU9OQUxfT1BFUkFUT1InLCBDT05ESVRJT05BTF9QUkVDRURFTkNFKTsKCiAgLyoqCiAgICogQSB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuIHR5cGUgaXMgYW4gZXF1YWxpdHkgb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgRVFVQUxJVFlfT1BFUkFUT1IgPQogICAgICBjb25zdCBUb2tlbkNsYXNzKCdFUVVBTElUWV9PUEVSQVRPUicsIEVRVUFMSVRZX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhbiBpZi1udWxsIG9wZXJhdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIElGX05VTExfT1BFUkFUT1IgPQogICAgICBjb25zdCBUb2tlbkNsYXNzKCdJRl9OVUxMX09QRVJBVE9SJywgSUZfTlVMTF9QUkVDRURFTkNFKTsKCiAgLyoqCiAgICogQSB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuIHR5cGUgaXMgYSBsb2dpY2FsLWFuZCBvcGVyYXRvci4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5DbGFzcyBMT0dJQ0FMX0FORF9PUEVSQVRPUiA9CiAgICAgIGNvbnN0IFRva2VuQ2xhc3MoJ0xPR0lDQUxfQU5EX09QRVJBVE9SJywgTE9HSUNBTF9BTkRfUFJFQ0VERU5DRSk7CgogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIGEgbG9naWNhbC1vciBvcGVyYXRvci4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5DbGFzcyBMT0dJQ0FMX09SX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnTE9HSUNBTF9PUl9PUEVSQVRPUicsIExPR0lDQUxfT1JfUFJFQ0VERU5DRSk7CgogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIGEgbXVsdGlwbGljYXRpdmUgb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgTVVMVElQTElDQVRJVkVfT1BFUkFUT1IgPQogICAgICBjb25zdCBUb2tlbkNsYXNzKCdNVUxUSVBMSUNBVElWRV9PUEVSQVRPUicsIE1VTFRJUExJQ0FUSVZFX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhIHJlbGF0aW9uYWwgb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgUkVMQVRJT05BTF9PUEVSQVRPUiA9CiAgICAgIGNvbnN0IFRva2VuQ2xhc3MoJ1JFTEFUSU9OQUxfT1BFUkFUT1InLCBSRUxBVElPTkFMX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBBIHZhbHVlIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9rZW4gdHlwZSBpcyBhIHNoaWZ0IG9wZXJhdG9yLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlbkNsYXNzIFNISUZUX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnU0hJRlRfT1BFUkFUT1InLCBTSElGVF9QUkVDRURFTkNFKTsKCiAgLyoqCiAgICogQSB2YWx1ZSB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRva2VuIHR5cGUgaXMgYSB1bmFyeSBvcGVyYXRvci4KICAgKi8KICBzdGF0aWMgY29uc3QgVG9rZW5DbGFzcyBVTkFSWV9QT1NURklYX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnVU5BUllfUE9TVEZJWF9PUEVSQVRPUicsIFBPU1RGSVhfUFJFQ0VERU5DRSk7CgogIC8qKgogICAqIEEgdmFsdWUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0b2tlbiB0eXBlIGlzIGEgdW5hcnkgb3BlcmF0b3IuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuQ2xhc3MgVU5BUllfUFJFRklYX09QRVJBVE9SID0KICAgICAgY29uc3QgVG9rZW5DbGFzcygnVU5BUllfUFJFRklYX09QRVJBVE9SJywgUFJFRklYX1BSRUNFREVOQ0UpOwoKICAvKioKICAgKiBUaGUgbmFtZSBvZiB0aGUgdG9rZW4gY2xhc3MuCiAgICovCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIC8qKgogICAqIFRoZSBwcmVjZWRlbmNlIG9mIHRva2VucyBvZiB0aGlzIGNsYXNzLCBvciBgMGAgaWYgdGhlIHN1Y2ggdG9rZW5zIGRvIG5vdAogICAqIHJlcHJlc2VudCBhbiBvcGVyYXRvci4KICAgKi8KICBmaW5hbCBpbnQgcHJlY2VkZW5jZTsKCiAgLyoqCiAgICogSW5pdGlhbGl6ZSBhIG5ld2x5IGNyZWF0ZWQgY2xhc3Mgb2YgdG9rZW5zIHRvIGhhdmUgdGhlIGdpdmVuIFtuYW1lXSBhbmQKICAgKiBbcHJlY2VkZW5jZV0uCiAgICovCiAgY29uc3QgVG9rZW5DbGFzcyh0aGlzLm5hbWUsIFt0aGlzLnByZWNlZGVuY2UgPSBOT19QUkVDRURFTkNFXSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IG5hbWU7Cn0KCi8qKgogKiBUaGUgdHlwZXMgb2YgdG9rZW5zIHRoYXQgY2FuIGJlIHJldHVybmVkIGJ5IHRoZSBzY2FubmVyLgogKgogKiBDbGllbnRzIG1heSBub3QgZXh0ZW5kLCBpbXBsZW1lbnQgb3IgbWl4LWluIHRoaXMgY2xhc3MuCiAqLwpjbGFzcyBUb2tlblR5cGUgewogIC8qKgogICAqIFRoZSB0eXBlIG9mIHRoZSB0b2tlbiB0aGF0IG1hcmtzIHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIGlucHV0LgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgRU9GID0KICAgICAgY29uc3QgVG9rZW5UeXBlKCcnLCAnRU9GJywgTk9fUFJFQ0VERU5DRSwgRU9GX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBET1VCTEUgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdkb3VibGUnLCAnRE9VQkxFJywgTk9fUFJFQ0VERU5DRSwgRE9VQkxFX1RPS0VOLAogICAgICBzdHJpbmdWYWx1ZTogbnVsbCk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgSEVYQURFQ0lNQUwgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdoZXhhZGVjaW1hbCcsICdIRVhBREVDSU1BTCcsIE5PX1BSRUNFREVOQ0UsIEhFWEFERUNJTUFMX1RPS0VOLAogICAgICBzdHJpbmdWYWx1ZTogbnVsbCk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgSURFTlRJRklFUiA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJ2lkZW50aWZpZXInLCAnSURFTlRJRklFUicsIE5PX1BSRUNFREVOQ0UsIElERU5USUZJRVJfVE9LRU4sCiAgICAgIHN0cmluZ1ZhbHVlOiBudWxsKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBJTlQgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdpbnQnLCAnSU5UJywgTk9fUFJFQ0VERU5DRSwgSU5UX1RPS0VOLAogICAgICBzdHJpbmdWYWx1ZTogbnVsbCk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgTVVMVElfTElORV9DT01NRU5UID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnY29tbWVudCcsICdNVUxUSV9MSU5FX0NPTU1FTlQnLCBOT19QUkVDRURFTkNFLCBDT01NRU5UX1RPS0VOLAogICAgICBzdHJpbmdWYWx1ZTogbnVsbCk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgU0NSSVBUX1RBRyA9CiAgICAgIGNvbnN0IFRva2VuVHlwZSgnc2NyaXB0JywgJ1NDUklQVF9UQUcnLCBOT19QUkVDRURFTkNFLCBTQ1JJUFRfVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFNJTkdMRV9MSU5FX0NPTU1FTlQgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdjb21tZW50JywgJ1NJTkdMRV9MSU5FX0NPTU1FTlQnLCBOT19QUkVDRURFTkNFLCBDT01NRU5UX1RPS0VOLAogICAgICBzdHJpbmdWYWx1ZTogbnVsbCk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgU1RSSU5HID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnc3RyaW5nJywgJ1NUUklORycsIE5PX1BSRUNFREVOQ0UsIFNUUklOR19UT0tFTiwKICAgICAgc3RyaW5nVmFsdWU6IG51bGwpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEFNUEVSU0FORCA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJyYnLCAnQU1QRVJTQU5EJywgQklUV0lTRV9BTkRfUFJFQ0VERU5DRSwgQU1QRVJTQU5EX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQU1QRVJTQU5EX0FNUEVSU0FORCA9IGNvbnN0IFRva2VuVHlwZSgnJiYnLAogICAgICAnQU1QRVJTQU5EX0FNUEVSU0FORCcsIExPR0lDQUxfQU5EX1BSRUNFREVOQ0UsIEFNUEVSU0FORF9BTVBFUlNBTkRfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICAvLyBUaGlzIGlzIG5vdCB5ZXQgcGFydCBvZiB0aGUgbGFuZ3VhZ2UgYW5kIG5vdCBzdXBwb3J0ZWQgYnkgZmFzdGEKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEFNUEVSU0FORF9BTVBFUlNBTkRfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICcmJj0nLAogICAgICAnQU1QRVJTQU5EX0FNUEVSU0FORF9FUScsCiAgICAgIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwKICAgICAgQU1QRVJTQU5EX0FNUEVSU0FORF9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQU1QRVJTQU5EX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnJj0nLCAnQU1QRVJTQU5EX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBBTVBFUlNBTkRfRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEFUID0KICAgICAgY29uc3QgVG9rZW5UeXBlKCdAJywgJ0FUJywgTk9fUFJFQ0VERU5DRSwgQVRfVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEJBTkcgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICchJywgJ0JBTkcnLCBQUkVGSVhfUFJFQ0VERU5DRSwgQkFOR19UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQkFOR19FUSA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJyE9JywgJ0JBTkdfRVEnLCBFUVVBTElUWV9QUkVDRURFTkNFLCBCQU5HX0VRX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBCQU5HX0VRX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnIT09JywgJ0JBTkdfRVFfRVEnLCBFUVVBTElUWV9QUkVDRURFTkNFLCBCQU5HX0VRX0VRX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBCQVIgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICd8JywgJ0JBUicsIEJJVFdJU0VfT1JfUFJFQ0VERU5DRSwgQkFSX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQkFSX0JBUiA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJ3x8JywgJ0JBUl9CQVInLCBMT0dJQ0FMX09SX1BSRUNFREVOQ0UsIEJBUl9CQVJfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICAvLyBUaGlzIGlzIG5vdCB5ZXQgcGFydCBvZiB0aGUgbGFuZ3VhZ2UgYW5kIG5vdCBzdXBwb3J0ZWQgYnkgZmFzdGEKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEJBUl9CQVJfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICd8fD0nLCAnQkFSX0JBUl9FUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgQkFSX0JBUl9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQkFSX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnfD0nLCAnQkFSX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBCQVJfRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIENPTE9OID0KICAgICAgY29uc3QgVG9rZW5UeXBlKCc6JywgJ0NPTE9OJywgTk9fUFJFQ0VERU5DRSwgQ09MT05fVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIENPTU1BID0KICAgICAgY29uc3QgVG9rZW5UeXBlKCcsJywgJ0NPTU1BJywgTk9fUFJFQ0VERU5DRSwgQ09NTUFfVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIENBUkVUID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnXicsICdDQVJFVCcsIEJJVFdJU0VfWE9SX1BSRUNFREVOQ0UsIENBUkVUX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgQ0FSRVRfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdePScsICdDQVJFVF9FUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgQ0FSRVRfRVFfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIENMT1NFX0NVUkxZX0JSQUNLRVQgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICd9JywgJ0NMT1NFX0NVUkxZX0JSQUNLRVQnLCBOT19QUkVDRURFTkNFLCBDTE9TRV9DVVJMWV9CUkFDS0VUX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBDTE9TRV9QQVJFTiA9CiAgICAgIGNvbnN0IFRva2VuVHlwZSgnKScsICdDTE9TRV9QQVJFTicsIE5PX1BSRUNFREVOQ0UsIENMT1NFX1BBUkVOX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBDTE9TRV9TUVVBUkVfQlJBQ0tFVCA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJ10nLCAnQ0xPU0VfU1FVQVJFX0JSQUNLRVQnLCBOT19QUkVDRURFTkNFLCBDTE9TRV9TUVVBUkVfQlJBQ0tFVF9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICc9JywgJ0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBFUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgRVFfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICc9PScsICdFUV9FUScsIEVRVUFMSVRZX1BSRUNFREVOQ0UsIEVRX0VRX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIC8vLyBUaGUgYD09PWAgb3BlcmF0b3IgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGUgRGFydCBsYW5ndWFnZQogIC8vLyBidXQgaXMgcGFyc2VkIGFzIHN1Y2ggYnkgdGhlIHNjYW5uZXIgdG8gc3VwcG9ydCBiZXR0ZXIgcmVjb3ZlcnkKICAvLy8gd2hlbiBhIEphdmFTY3JpcHQgY29kZSBzbmlwcGV0IGlzIHBhc3RlZCBpbnRvIGEgRGFydCBmaWxlLgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgRVFfRVFfRVEgPQogICAgICBjb25zdCBUb2tlblR5cGUoJz09PScsICdFUV9FUV9FUScsIEVRVUFMSVRZX1BSRUNFREVOQ0UsIEVRX0VRX0VRX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBGVU5DVElPTiA9CiAgICAgIGNvbnN0IFRva2VuVHlwZSgnPT4nLCAnRlVOQ1RJT04nLCBOT19QUkVDRURFTkNFLCBGVU5DVElPTl9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgR1QgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICc+JywgJ0dUJywgUkVMQVRJT05BTF9QUkVDRURFTkNFLCBHVF9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEdUX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPj0nLCAnR1RfRVEnLCBSRUxBVElPTkFMX1BSRUNFREVOQ0UsIEdUX0VRX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgR1RfR1QgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICc+PicsICdHVF9HVCcsIFNISUZUX1BSRUNFREVOQ0UsIEdUX0dUX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgR1RfR1RfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICc+Pj0nLCAnR1RfR1RfRVEnLCBBU1NJR05NRU5UX1BSRUNFREVOQ0UsIEdUX0dUX0VRX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBHVF9HVF9HVCA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJz4+PicsICdHVF9HVF9HVCcsIFNISUZUX1BSRUNFREVOQ0UsIEdUX0dUX0dUX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgR1RfR1RfR1RfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICc+Pj49JywgJ0dUX0dUX0dUX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBHVF9HVF9HVF9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgSEFTSCA9CiAgICAgIGNvbnN0IFRva2VuVHlwZSgnIycsICdIQVNIJywgTk9fUFJFQ0VERU5DRSwgSEFTSF9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgSU5ERVggPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdbXScsICdJTkRFWCcsIFNFTEVDVE9SX1BSRUNFREVOQ0UsIElOREVYX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgSU5ERVhfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdbXT0nLCAnSU5ERVhfRVEnLCBOT19QUkVDRURFTkNFLCBJTkRFWF9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIExUID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPCcsICdMVCcsIFJFTEFUSU9OQUxfUFJFQ0VERU5DRSwgTFRfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUsIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBMVF9FUSA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJzw9JywgJ0xUX0VRJywgUkVMQVRJT05BTF9QUkVDRURFTkNFLCBMVF9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIExUX0xUID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPDwnLCAnTFRfTFQnLCBTSElGVF9QUkVDRURFTkNFLCBMVF9MVF9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIExUX0xUX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPDw9JywgJ0xUX0xUX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBMVF9MVF9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgTUlOVVMgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICctJywgJ01JTlVTJywgQURESVRJVkVfUFJFQ0VERU5DRSwgTUlOVVNfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUsIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBNSU5VU19FUSA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJy09JywgJ01JTlVTX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBNSU5VU19FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgTUlOVVNfTUlOVVMgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICctLScsICdNSU5VU19NSU5VUycsIFBPU1RGSVhfUFJFQ0VERU5DRSwgTUlOVVNfTUlOVVNfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIE9QRU5fQ1VSTFlfQlJBQ0tFVCA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJ3snLCAnT1BFTl9DVVJMWV9CUkFDS0VUJywgTk9fUFJFQ0VERU5DRSwgT1BFTl9DVVJMWV9CUkFDS0VUX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBPUEVOX1BBUkVOID0KICAgICAgY29uc3QgVG9rZW5UeXBlKCcoJywgJ09QRU5fUEFSRU4nLCBTRUxFQ1RPUl9QUkVDRURFTkNFLCBPUEVOX1BBUkVOX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBPUEVOX1NRVUFSRV9CUkFDS0VUID0gY29uc3QgVG9rZW5UeXBlKCdbJywKICAgICAgJ09QRU5fU1FVQVJFX0JSQUNLRVQnLCBTRUxFQ1RPUl9QUkVDRURFTkNFLCBPUEVOX1NRVUFSRV9CUkFDS0VUX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBQRVJDRU5UID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnJScsICdQRVJDRU5UJywgTVVMVElQTElDQVRJVkVfUFJFQ0VERU5DRSwgUEVSQ0VOVF9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFBFUkNFTlRfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICclPScsICdQRVJDRU5UX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBQRVJDRU5UX0VRX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBQRVJJT0QgPQogICAgICBjb25zdCBUb2tlblR5cGUoJy4nLCAnUEVSSU9EJywgU0VMRUNUT1JfUFJFQ0VERU5DRSwgUEVSSU9EX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBQRVJJT0RfUEVSSU9EID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnLi4nLCAnUEVSSU9EX1BFUklPRCcsIENBU0NBREVfUFJFQ0VERU5DRSwgUEVSSU9EX1BFUklPRF9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgUExVUyA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJysnLCAnUExVUycsIEFERElUSVZFX1BSRUNFREVOQ0UsIFBMVVNfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUsIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBQTFVTX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnKz0nLCAnUExVU19FUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgUExVU19FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgUExVU19QTFVTID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnKysnLCAnUExVU19QTFVTJywgUE9TVEZJWF9QUkVDRURFTkNFLCBQTFVTX1BMVVNfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFFVRVNUSU9OID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPycsICdRVUVTVElPTicsIENPTkRJVElPTkFMX1BSRUNFREVOQ0UsIFFVRVNUSU9OX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBRVUVTVElPTl9QRVJJT0QgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICc/LicsICdRVUVTVElPTl9QRVJJT0QnLCBTRUxFQ1RPUl9QUkVDRURFTkNFLCBRVUVTVElPTl9QRVJJT0RfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUpOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFFVRVNUSU9OX1FVRVNUSU9OID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPz8nLCAnUVVFU1RJT05fUVVFU1RJT04nLCBJRl9OVUxMX1BSRUNFREVOQ0UsIFFVRVNUSU9OX1FVRVNUSU9OX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBRVUVTVElPTl9RVUVTVElPTl9FUSA9IGNvbnN0IFRva2VuVHlwZSgnPz89JywKICAgICAgJ1FVRVNUSU9OX1FVRVNUSU9OX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBRVUVTVElPTl9RVUVTVElPTl9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgU0VNSUNPTE9OID0KICAgICAgY29uc3QgVG9rZW5UeXBlKCc7JywgJ1NFTUlDT0xPTicsIE5PX1BSRUNFREVOQ0UsIFNFTUlDT0xPTl9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgU0xBU0ggPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICcvJywgJ1NMQVNIJywgTVVMVElQTElDQVRJVkVfUFJFQ0VERU5DRSwgU0xBU0hfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUsIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBTTEFTSF9FUSA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJy89JywgJ1NMQVNIX0VRJywgQVNTSUdOTUVOVF9QUkVDRURFTkNFLCBTTEFTSF9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgU1RBUiA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJyonLCAnU1RBUicsIE1VTFRJUExJQ0FUSVZFX1BSRUNFREVOQ0UsIFNUQVJfVE9LRU4sCiAgICAgIGlzT3BlcmF0b3I6IHRydWUsIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBTVEFSX0VRID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnKj0nLCAnU1RBUl9FUScsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgU1RBUl9FUV9UT0tFTiwKICAgICAgaXNPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgU1RSSU5HX0lOVEVSUE9MQVRJT05fRVhQUkVTU0lPTiA9IGNvbnN0IFRva2VuVHlwZSgKICAgICAgJ1wkeycsCiAgICAgICdTVFJJTkdfSU5URVJQT0xBVElPTl9FWFBSRVNTSU9OJywKICAgICAgTk9fUFJFQ0VERU5DRSwKICAgICAgU1RSSU5HX0lOVEVSUE9MQVRJT05fVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFNUUklOR19JTlRFUlBPTEFUSU9OX0lERU5USUZJRVIgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdcJCcsCiAgICAgICdTVFJJTkdfSU5URVJQT0xBVElPTl9JREVOVElGSUVSJywKICAgICAgTk9fUFJFQ0VERU5DRSwKICAgICAgU1RSSU5HX0lOVEVSUE9MQVRJT05fSURFTlRJRklFUl9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgVElMREUgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICd+JywgJ1RJTERFJywgUFJFRklYX1BSRUNFREVOQ0UsIFRJTERFX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgVElMREVfU0xBU0ggPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICd+LycsICdUSUxERV9TTEFTSCcsIE1VTFRJUExJQ0FUSVZFX1BSRUNFREVOQ0UsIFRJTERFX1NMQVNIX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlLCBpc1VzZXJEZWZpbmFibGVPcGVyYXRvcjogdHJ1ZSk7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgVElMREVfU0xBU0hfRVEgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICd+Lz0nLCAnVElMREVfU0xBU0hfRVEnLCBBU1NJR05NRU5UX1BSRUNFREVOQ0UsIFRJTERFX1NMQVNIX0VRX1RPS0VOLAogICAgICBpc09wZXJhdG9yOiB0cnVlKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBCQUNLUElORyA9CiAgICAgIGNvbnN0IFRva2VuVHlwZSgnYCcsICdCQUNLUElORycsIE5PX1BSRUNFREVOQ0UsIEJBQ0tQSU5HX1RPS0VOKTsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBCQUNLU0xBU0ggPQogICAgICBjb25zdCBUb2tlblR5cGUoJ1xcJywgJ0JBQ0tTTEFTSCcsIE5PX1BSRUNFREVOQ0UsIEJBQ0tTTEFTSF9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgUEVSSU9EX1BFUklPRF9QRVJJT0QgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICcuLi4nLCAnUEVSSU9EX1BFUklPRF9QRVJJT0QnLCBOT19QUkVDRURFTkNFLCBQRVJJT0RfUEVSSU9EX1BFUklPRF9UT0tFTik7CgogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgUEVSSU9EX1BFUklPRF9QRVJJT0RfUVVFU1RJT04gPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICcuLi4/JywKICAgICAgJ1BFUklPRF9QRVJJT0RfUEVSSU9EX1FVRVNUSU9OJywKICAgICAgTk9fUFJFQ0VERU5DRSwKICAgICAgUEVSSU9EX1BFUklPRF9QRVJJT0RfUVVFU1RJT05fVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIFFVRVNUSU9OX1BFUklPRF9PUEVOX1NRVUFSRV9CUkFDS0VUID0gY29uc3QgVG9rZW5UeXBlKAogICAgICAnPy5bJywKICAgICAgJ1FVRVNUSU9OX1BFUklPRF9PUEVOX1NRVUFSRV9CUkFDS0VUJywKICAgICAgU0VMRUNUT1JfUFJFQ0VERU5DRSwKICAgICAgUVVFU1RJT05fUEVSSU9EX09QRU5fU1FVQVJFX0JSQUNLRVRfVE9LRU4pOwoKICBzdGF0aWMgY29uc3QgVG9rZW5UeXBlIEFTID0gS2V5d29yZC5BUzsKCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBJUyA9IEtleXdvcmQuSVM7CgogIC8qKgogICAqIFRva2VuIHR5cGUgdXNlZCBieSBlcnJvciB0b2tlbnMuCiAgICovCiAgc3RhdGljIGNvbnN0IFRva2VuVHlwZSBCQURfSU5QVVQgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdtYWxmb3JtZWQgaW5wdXQnLCAnQkFEX0lOUFVUJywgTk9fUFJFQ0VERU5DRSwgQkFEX0lOUFVUX1RPS0VOLAogICAgICBzdHJpbmdWYWx1ZTogbnVsbCk7CgogIC8qKgogICAqIFRva2VuIHR5cGUgdXNlZCBieSBzeW50aGV0aWMgdG9rZW5zIHRoYXQgYXJlIGNyZWF0ZWQgZHVyaW5nIHBhcnNlcgogICAqIHJlY292ZXJ5IChub24tYW5hbHl6ZXIgdXNlIGNhc2UpLgogICAqLwogIHN0YXRpYyBjb25zdCBUb2tlblR5cGUgUkVDT1ZFUlkgPSBjb25zdCBUb2tlblR5cGUoCiAgICAgICdyZWNvdmVyeScsICdSRUNPVkVSWScsIE5PX1BSRUNFREVOQ0UsIFJFQ09WRVJZX1RPS0VOLAogICAgICBzdHJpbmdWYWx1ZTogbnVsbCk7CgogIC8vIFRPRE8oZGFucnViZWwpOiAiYWxsIiBpcyBtaXNsZWFkaW5nCiAgLy8gYmVjYXVzZSB0aGlzIGxpc3QgZG9lcyBub3QgaW5jbHVkZSBhbGwgVG9rZW5UeXBlIGluc3RhbmNlcy4KICBzdGF0aWMgY29uc3QgTGlzdDxUb2tlblR5cGU+IGFsbCA9IGNvbnN0IDxUb2tlblR5cGU+WwogICAgVG9rZW5UeXBlLkVPRiwKICAgIFRva2VuVHlwZS5ET1VCTEUsCiAgICBUb2tlblR5cGUuSEVYQURFQ0lNQUwsCiAgICBUb2tlblR5cGUuSURFTlRJRklFUiwKICAgIFRva2VuVHlwZS5JTlQsCiAgICBUb2tlblR5cGUuTVVMVElfTElORV9DT01NRU5ULAogICAgVG9rZW5UeXBlLlNDUklQVF9UQUcsCiAgICBUb2tlblR5cGUuU0lOR0xFX0xJTkVfQ09NTUVOVCwKICAgIFRva2VuVHlwZS5TVFJJTkcsCiAgICBUb2tlblR5cGUuQU1QRVJTQU5ELAogICAgVG9rZW5UeXBlLkFNUEVSU0FORF9BTVBFUlNBTkQsCiAgICBUb2tlblR5cGUuQU1QRVJTQU5EX0VRLAogICAgVG9rZW5UeXBlLkFULAogICAgVG9rZW5UeXBlLkJBTkcsCiAgICBUb2tlblR5cGUuQkFOR19FUSwKICAgIFRva2VuVHlwZS5CQVIsCiAgICBUb2tlblR5cGUuQkFSX0JBUiwKICAgIFRva2VuVHlwZS5CQVJfRVEsCiAgICBUb2tlblR5cGUuQ09MT04sCiAgICBUb2tlblR5cGUuQ09NTUEsCiAgICBUb2tlblR5cGUuQ0FSRVQsCiAgICBUb2tlblR5cGUuQ0FSRVRfRVEsCiAgICBUb2tlblR5cGUuQ0xPU0VfQ1VSTFlfQlJBQ0tFVCwKICAgIFRva2VuVHlwZS5DTE9TRV9QQVJFTiwKICAgIFRva2VuVHlwZS5DTE9TRV9TUVVBUkVfQlJBQ0tFVCwKICAgIFRva2VuVHlwZS5FUSwKICAgIFRva2VuVHlwZS5FUV9FUSwKICAgIFRva2VuVHlwZS5GVU5DVElPTiwKICAgIFRva2VuVHlwZS5HVCwKICAgIFRva2VuVHlwZS5HVF9FUSwKICAgIFRva2VuVHlwZS5HVF9HVCwKICAgIFRva2VuVHlwZS5HVF9HVF9FUSwKICAgIFRva2VuVHlwZS5IQVNILAogICAgVG9rZW5UeXBlLklOREVYLAogICAgVG9rZW5UeXBlLklOREVYX0VRLAogICAgVG9rZW5UeXBlLkxULAogICAgVG9rZW5UeXBlLkxUX0VRLAogICAgVG9rZW5UeXBlLkxUX0xULAogICAgVG9rZW5UeXBlLkxUX0xUX0VRLAogICAgVG9rZW5UeXBlLk1JTlVTLAogICAgVG9rZW5UeXBlLk1JTlVTX0VRLAogICAgVG9rZW5UeXBlLk1JTlVTX01JTlVTLAogICAgVG9rZW5UeXBlLk9QRU5fQ1VSTFlfQlJBQ0tFVCwKICAgIFRva2VuVHlwZS5PUEVOX1BBUkVOLAogICAgVG9rZW5UeXBlLk9QRU5fU1FVQVJFX0JSQUNLRVQsCiAgICBUb2tlblR5cGUuUEVSQ0VOVCwKICAgIFRva2VuVHlwZS5QRVJDRU5UX0VRLAogICAgVG9rZW5UeXBlLlBFUklPRCwKICAgIFRva2VuVHlwZS5QRVJJT0RfUEVSSU9ELAogICAgVG9rZW5UeXBlLlBMVVMsCiAgICBUb2tlblR5cGUuUExVU19FUSwKICAgIFRva2VuVHlwZS5QTFVTX1BMVVMsCiAgICBUb2tlblR5cGUuUVVFU1RJT04sCiAgICBUb2tlblR5cGUuUVVFU1RJT05fUEVSSU9ELAogICAgVG9rZW5UeXBlLlFVRVNUSU9OX1FVRVNUSU9OLAogICAgVG9rZW5UeXBlLlFVRVNUSU9OX1FVRVNUSU9OX0VRLAogICAgVG9rZW5UeXBlLlNFTUlDT0xPTiwKICAgIFRva2VuVHlwZS5TTEFTSCwKICAgIFRva2VuVHlwZS5TTEFTSF9FUSwKICAgIFRva2VuVHlwZS5TVEFSLAogICAgVG9rZW5UeXBlLlNUQVJfRVEsCiAgICBUb2tlblR5cGUuU1RSSU5HX0lOVEVSUE9MQVRJT05fRVhQUkVTU0lPTiwKICAgIFRva2VuVHlwZS5TVFJJTkdfSU5URVJQT0xBVElPTl9JREVOVElGSUVSLAogICAgVG9rZW5UeXBlLlRJTERFLAogICAgVG9rZW5UeXBlLlRJTERFX1NMQVNILAogICAgVG9rZW5UeXBlLlRJTERFX1NMQVNIX0VRLAogICAgVG9rZW5UeXBlLkJBQ0tQSU5HLAogICAgVG9rZW5UeXBlLkJBQ0tTTEFTSCwKICAgIFRva2VuVHlwZS5QRVJJT0RfUEVSSU9EX1BFUklPRCwKICAgIFRva2VuVHlwZS5QRVJJT0RfUEVSSU9EX1BFUklPRF9RVUVTVElPTiwKCiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogU2hvdWxkIHRoZXNlIGJlIGFkZGVkIHRvIHRoZSAiYWxsIiBsaXN0PwogICAgLy9Ub2tlblR5cGUuSVMsCiAgICAvL1Rva2VuVHlwZS5BUywKCiAgICAvLyBUaGVzZSBhcmUgbm90IHlldCBwYXJ0IG9mIHRoZSBsYW5ndWFnZSBhbmQgbm90IHN1cHBvcnRlZCBieSBmYXN0YQogICAgLy9Ub2tlblR5cGUuQU1QRVJTQU5EX0FNUEVSU0FORF9FUSwKICAgIC8vVG9rZW5UeXBlLkJBUl9CQVJfRVEsCgogICAgLy8gU3VwcG9ydGVkIGJ5IGZhc3RhIGJ1dCBub3QgcGFydCBvZiB0aGUgbGFuZ3VhZ2UKICAgIC8vVG9rZW5UeXBlLkJBTkdfRVFfRVEsCiAgICAvL1Rva2VuVHlwZS5FUV9FUV9FUSwKCiAgICAvLyBVc2VkIGJ5IHN5bnRoZXRpYyB0b2tlbnMgZ2VuZXJhdGVkIGR1cmluZyByZWNvdmVyeQogICAgLy9Ub2tlblR5cGUuQkFEX0lOUFVULAogICAgLy9Ub2tlblR5cGUuUkVDT1ZFUlksCiAgXTsKCiAgZmluYWwgaW50IGtpbmQ7CgogIC8qKgogICAqIGB0cnVlYCBpZiB0aGlzIHRva2VuIHR5cGUgcmVwcmVzZW50cyBhIG1vZGlmaWVyCiAgICogc3VjaCBhcyBgYWJzdHJhY3RgIG9yIGBjb25zdGAuCiAgICovCiAgZmluYWwgYm9vbCBpc01vZGlmaWVyOwoKICAvKioKICAgKiBgdHJ1ZWAgaWYgdGhpcyB0b2tlbiB0eXBlIHJlcHJlc2VudHMgYW4gb3BlcmF0b3IuCiAgICovCiAgZmluYWwgYm9vbCBpc09wZXJhdG9yOwoKICAvKioKICAgKiBgdHJ1ZWAgaWYgdGhpcyB0b2tlbiB0eXBlIHJlcHJlc2VudHMgYSBrZXl3b3JkIHN0YXJ0aW5nIGEgdG9wIGxldmVsCiAgICogZGVjbGFyYXRpb24gc3VjaCBhcyBgY2xhc3NgLCBgZW51bWAsIGBpbXBvcnRgLCBldGMuCiAgICovCiAgZmluYWwgYm9vbCBpc1RvcExldmVsS2V5d29yZDsKCiAgLyoqCiAgICogYHRydWVgIGlmIHRoaXMgdG9rZW4gdHlwZSByZXByZXNlbnRzIGFuIG9wZXJhdG9yCiAgICogdGhhdCBjYW4gYmUgZGVmaW5lZCBieSB1c2Vycy4KICAgKi8KICBmaW5hbCBib29sIGlzVXNlckRlZmluYWJsZU9wZXJhdG9yOwoKICAvKioKICAgKiBUaGUgbGV4ZW1lIHRoYXQgZGVmaW5lcyB0aGlzIHR5cGUgb2YgdG9rZW4sCiAgICogb3IgYG51bGxgIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcG9zc2libGUgbGV4ZW1lIGZvciB0aGlzIHR5cGUgb2YgdG9rZW4uCiAgICovCiAgZmluYWwgU3RyaW5nIGxleGVtZTsKCiAgLyoqCiAgICogVGhlIG5hbWUgb2YgdGhlIHRva2VuIHR5cGUuCiAgICovCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIC8qKgogICAqIFRoZSBwcmVjZWRlbmNlIG9mIHRoaXMgdHlwZSBvZiB0b2tlbiwKICAgKiBvciBgMGAgaWYgdGhlIHRva2VuIGRvZXMgbm90IHJlcHJlc2VudCBhbiBvcGVyYXRvci4KICAgKi8KICBmaW5hbCBpbnQgcHJlY2VkZW5jZTsKCiAgLyoqCiAgICogU2VlIFtUb2tlbi5zdHJpbmdWYWx1ZV0gZm9yIGFuIGV4cGxhbmF0aW9uLgogICAqLwogIGZpbmFsIFN0cmluZyBzdHJpbmdWYWx1ZTsKCiAgY29uc3QgVG9rZW5UeXBlKHRoaXMubGV4ZW1lLCB0aGlzLm5hbWUsIHRoaXMucHJlY2VkZW5jZSwgdGhpcy5raW5kLAogICAgICB7dGhpcy5pc01vZGlmaWVyOiBmYWxzZSwKICAgICAgdGhpcy5pc09wZXJhdG9yOiBmYWxzZSwKICAgICAgdGhpcy5pc1RvcExldmVsS2V5d29yZDogZmFsc2UsCiAgICAgIHRoaXMuaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I6IGZhbHNlLAogICAgICBTdHJpbmcgc3RyaW5nVmFsdWU6ICd1bnNwZWNpZmllZCd9KQogICAgICA6IHRoaXMuc3RyaW5nVmFsdWUgPSBzdHJpbmdWYWx1ZSA9PSAndW5zcGVjaWZpZWQnID8gbGV4ZW1lIDogc3RyaW5nVmFsdWU7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0eXBlIG9mIHRva2VuIHJlcHJlc2VudHMgYW4gYWRkaXRpdmUgb3BlcmF0b3IuCiAgICovCiAgYm9vbCBnZXQgaXNBZGRpdGl2ZU9wZXJhdG9yID0+IHByZWNlZGVuY2UgPT0gQURESVRJVkVfUFJFQ0VERU5DRTsKCiAgLyoqCiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGlzIHR5cGUgb2YgdG9rZW4gcmVwcmVzZW50cyBhbiBhc3NpZ25tZW50IG9wZXJhdG9yLgogICAqLwogIGJvb2wgZ2V0IGlzQXNzaWdubWVudE9wZXJhdG9yID0+IHByZWNlZGVuY2UgPT0gQVNTSUdOTUVOVF9QUkVDRURFTkNFOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdHlwZSBvZiB0b2tlbiByZXByZXNlbnRzIGFuIGFzc29jaWF0aXZlIG9wZXJhdG9yLiBBbgogICAqIGFzc29jaWF0aXZlIG9wZXJhdG9yIGlzIGFuIG9wZXJhdG9yIGZvciB3aGljaCB0aGUgZm9sbG93aW5nIGVxdWFsaXR5IGlzCiAgICogdHJ1ZTogYChhICogYikgKiBjID09IGEgKiAoYiAqIGMpYC4gSW4gb3RoZXIgd29yZHMsIGlmIHRoZSByZXN1bHQgb2YKICAgKiBhcHBseWluZyB0aGUgb3BlcmF0b3IgdG8gbXVsdGlwbGUgb3BlcmFuZHMgZG9lcyBub3QgZGVwZW5kIG9uIHRoZSBvcmRlciBpbgogICAqIHdoaWNoIHRob3NlIGFwcGxpY2F0aW9ucyBvY2N1ci4KICAgKgogICAqIE5vdGU6IFRoaXMgbWV0aG9kIGNvbnNpZGVycyB0aGUgbG9naWNhbC1hbmQgYW5kIGxvZ2ljYWwtb3Igb3BlcmF0b3JzIHRvIGJlCiAgICogYXNzb2NpYXRpdmUsIGV2ZW4gdGhvdWdoIHRoZSBvcmRlciBpbiB3aGljaCB0aGUgYXBwbGljYXRpb24gb2YgdGhvc2UKICAgKiBvcGVyYXRvcnMgY2FuIGhhdmUgYW4gZWZmZWN0IGJlY2F1c2UgZXZhbHVhdGlvbiBvZiB0aGUgcmlnaHQtaGFuZCBvcGVyYW5kCiAgICogaXMgY29uZGl0aW9uYWwuCiAgICovCiAgYm9vbCBnZXQgaXNBc3NvY2lhdGl2ZU9wZXJhdG9yID0+CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLkFNUEVSU0FORCB8fAogICAgICB0aGlzID09IFRva2VuVHlwZS5BTVBFUlNBTkRfQU1QRVJTQU5EIHx8CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLkJBUiB8fAogICAgICB0aGlzID09IFRva2VuVHlwZS5CQVJfQkFSIHx8CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLkNBUkVUIHx8CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLlBMVVMgfHwKICAgICAgdGhpcyA9PSBUb2tlblR5cGUuU1RBUjsKCiAgLyoqCiAgICogQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUga2V5d29yZCBpcyBhICJidWlsdC1pbiIgaWRlbnRpZmllci4KICAgKi8KICBib29sIGdldCBpc0J1aWx0SW4gPT4gZmFsc2U7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0eXBlIG9mIHRva2VuIHJlcHJlc2VudHMgYW4gZXF1YWxpdHkgb3BlcmF0b3IuCiAgICovCiAgYm9vbCBnZXQgaXNFcXVhbGl0eU9wZXJhdG9yID0+CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLkJBTkdfRVEgfHwgdGhpcyA9PSBUb2tlblR5cGUuRVFfRVE7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0eXBlIG9mIHRva2VuIHJlcHJlc2VudHMgYW4gaW5jcmVtZW50IG9wZXJhdG9yLgogICAqLwogIGJvb2wgZ2V0IGlzSW5jcmVtZW50T3BlcmF0b3IgPT4KICAgICAgdGhpcyA9PSBUb2tlblR5cGUuUExVU19QTFVTIHx8IHRoaXMgPT0gVG9rZW5UeXBlLk1JTlVTX01JTlVTOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdHlwZSBvZiB0b2tlbiBpcyBhIGtleXdvcmQuCiAgICovCiAgYm9vbCBnZXQgaXNLZXl3b3JkID0+IGtpbmQgPT0gS0VZV09SRF9UT0tFTjsKCiAgLyoqCiAgICogQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUga2V5d29yZCBjYW4gYmUgdXNlZCBhcyBhbiBpZGVudGlmaWVyCiAgICogaW4gc29tZSBzaXR1YXRpb25zLgogICAqLwogIGJvb2wgZ2V0IGlzUHNldWRvID0+IGZhbHNlOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdHlwZSBvZiB0b2tlbiByZXByZXNlbnRzIGEgbXVsdGlwbGljYXRpdmUgb3BlcmF0b3IuCiAgICovCiAgYm9vbCBnZXQgaXNNdWx0aXBsaWNhdGl2ZU9wZXJhdG9yID0+IHByZWNlZGVuY2UgPT0gTVVMVElQTElDQVRJVkVfUFJFQ0VERU5DRTsKCiAgLyoqCiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGlzIHR5cGUgb2YgdG9rZW4gcmVwcmVzZW50cyBhIHJlbGF0aW9uYWwgb3BlcmF0b3IuCiAgICovCiAgYm9vbCBnZXQgaXNSZWxhdGlvbmFsT3BlcmF0b3IgPT4KICAgICAgdGhpcyA9PSBUb2tlblR5cGUuTFQgfHwKICAgICAgdGhpcyA9PSBUb2tlblR5cGUuTFRfRVEgfHwKICAgICAgdGhpcyA9PSBUb2tlblR5cGUuR1QgfHwKICAgICAgdGhpcyA9PSBUb2tlblR5cGUuR1RfRVE7CgogIC8qKgogICAqIFJldHVybiBgdHJ1ZWAgaWYgdGhpcyB0eXBlIG9mIHRva2VuIHJlcHJlc2VudHMgYSBzaGlmdCBvcGVyYXRvci4KICAgKi8KICBib29sIGdldCBpc1NoaWZ0T3BlcmF0b3IgPT4gcHJlY2VkZW5jZSA9PSBTSElGVF9QUkVDRURFTkNFOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdHlwZSBvZiB0b2tlbiByZXByZXNlbnRzIGEgdW5hcnkgcG9zdGZpeCBvcGVyYXRvci4KICAgKi8KICBib29sIGdldCBpc1VuYXJ5UG9zdGZpeE9wZXJhdG9yID0+IHByZWNlZGVuY2UgPT0gUE9TVEZJWF9QUkVDRURFTkNFOwoKICAvKioKICAgKiBSZXR1cm4gYHRydWVgIGlmIHRoaXMgdHlwZSBvZiB0b2tlbiByZXByZXNlbnRzIGEgdW5hcnkgcHJlZml4IG9wZXJhdG9yLgogICAqLwogIGJvb2wgZ2V0IGlzVW5hcnlQcmVmaXhPcGVyYXRvciA9PgogICAgICBwcmVjZWRlbmNlID09IFBSRUZJWF9QUkVDRURFTkNFIHx8CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLk1JTlVTIHx8CiAgICAgIHRoaXMgPT0gVG9rZW5UeXBlLlBMVVNfUExVUyB8fAogICAgICB0aGlzID09IFRva2VuVHlwZS5NSU5VU19NSU5VUzsKCiAgLyoqCiAgICogUmV0dXJuIGB0cnVlYCBpZiB0aGlzIHR5cGUgb2YgdG9rZW4gcmVwcmVzZW50cyBhIHNlbGVjdG9yIG9wZXJhdG9yCiAgICogKHN0YXJ0aW5nIHRva2VuIG9mIGEgc2VsZWN0b3IpLgogICAqLwogIGJvb2wgZ2V0IGlzU2VsZWN0b3JPcGVyYXRvciA9PiBwcmVjZWRlbmNlID09IFNFTEVDVE9SX1BSRUNFREVOQ0U7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IG5hbWU7CgogIC8qKgogICAqIFVzZSBbbGV4ZW1lXSBpbnN0ZWFkIG9mIHRoaXMgbWV0aG9kCiAgICovCiAgQGRlcHJlY2F0ZWQKICBT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ZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvY29sb3JzLmRhcnSYky8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBUT0RPKGFoZSk6IE9yaWduaWFsbHkgY29waWVkIGZyb20gc2RrL3BrZy9jb21waWxlci9saWIvc3JjL2NvbG9ycy5kYXJ0LAovLyBtZXJnZSB0aGVzZSB0d28gcGFja2FnZXMuCmxpYnJhcnkgY29sb3JzOwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cganNvbkVuY29kZTsKCmltcG9ydCAnZGFydDppbycgc2hvdyBQbGF0Zm9ybSwgUHJvY2VzcywgUHJvY2Vzc1Jlc3VsdCwgc3RkZXJyLCBzdGRvdXQ7CgppbXBvcnQgJ2NvbXBpbGVyX2NvbnRleHQuZGFydCcgc2hvdyBDb21waWxlckNvbnRleHQ7CgovLy8gQU5TSS94dGVybSB0ZXJtY2FwIGZvciBzZXR0aW5nIGRlZmF1bHQgY29sb3JzLiBPdXRwdXQgZnJvbSBVbml4Ci8vLyBjb21tYW5kLWxpbmUgcHJvZ3JhbSBgdHB1dCBvcGAuCmNvbnN0IFN0cmluZyBERUZBVUxUX0NPTE9SID0gIlx4MWJbMzk7NDltIjsKCi8vLyBBTlNJL3h0ZXJtIHRlcm1jYXAgZm9yIHNldHRpbmcgYmxhY2sgdGV4dCBjb2xvci4gT3V0cHV0IGZyb20gVW5peAovLy8gY29tbWFuZC1saW5lIHByb2dyYW0gYHRwdXQgc2V0YWYgMGAuCmNvbnN0IFN0cmluZyBCTEFDS19DT0xPUiA9ICJceDFiWzMwbSI7CgovLy8gQU5TSS94dGVybSB0ZXJtY2FwIGZvciBzZXR0aW5nIHJlZCB0ZXh0IGNvbG9yLiBPdXRwdXQgZnJvbSBVbml4Ci8vLyBjb21tYW5kLWxpbmUgcHJvZ3JhbSBgdHB1dCBzZXRhZiAxYC4KY29uc3QgU3RyaW5nIFJFRF9DT0xPUiA9ICJceDFiWzMxbSI7CgovLy8gQU5TSS94dGVybSB0ZXJtY2FwIGZvciBzZXR0aW5nIGdyZWVuIHRleHQgY29sb3IuIE91dHB1dCBmcm9tIFVuaXgKLy8vIGNvbW1hbmQtbGluZSBwcm9ncmFtIGB0cHV0IHNldGFmIDJgLgpjb25zdCBTdHJpbmcgR1JFRU5fQ09MT1IgPSAiXHgxYlszMm0iOwoKLy8vIEFOU0kveHRlcm0gdGVybWNhcCBmb3Igc2V0dGluZyB5ZWxsb3cgdGV4dCBjb2xvci4gT3V0cHV0IGZyb20gVW5peAovLy8gY29tbWFuZC1saW5lIHByb2dyYW0gYHRwdXQgc2V0YWYgM2AuCmNvbnN0IFN0cmluZyBZRUxMT1dfQ09MT1IgPSAiXHgxYlszM20iOwoKLy8vIEFOU0kveHRlcm0gdGVybWNhcCBmb3Igc2V0dGluZyBibHVlIHRleHQgY29sb3IuIE91dHB1dCBmcm9tIFVuaXgKLy8vIGNvbW1hbmQtbGluZSBwcm9ncmFtIGB0cHV0IHNldGFmIDRgLgpjb25zdCBTdHJpbmcgQkxVRV9DT0xPUiA9ICJceDFiWzM0bSI7CgovLy8gQU5TSS94dGVybSB0ZXJtY2FwIGZvciBzZXR0aW5nIG1hZ2VudGEgdGV4dCBjb2xvci4gT3V0cHV0IGZyb20gVW5peAovLy8gY29tbWFuZC1saW5lIHByb2dyYW0gYHRwdXQgc2V0YWYgNWAuCmNvbnN0IFN0cmluZyBNQUdFTlRBX0NPTE9SID0gIlx4MWJbMzVtIjsKCi8vLyBBTlNJL3h0ZXJtIHRlcm1jYXAgZm9yIHNldHRpbmcgY3lhbiB0ZXh0IGNvbG9yLiBPdXRwdXQgZnJvbSBVbml4Ci8vLyBjb21tYW5kLWxpbmUgcHJvZ3JhbSBgdHB1dCBzZXRhZiA2YC4KY29uc3QgU3RyaW5nIENZQU5fQ09MT1IgPSAiXHgxYlszNm0iOwoKLy8vIEFOU0kveHRlcm0gdGVybWNhcCBmb3Igc2V0dGluZyB3aGl0ZSB0ZXh0IGNvbG9yLiBPdXRwdXQgZnJvbSBVbml4Ci8vLyBjb21tYW5kLWxpbmUgcHJvZ3JhbSBgdHB1dCBzZXRhZiA3YC4KY29uc3QgU3RyaW5nIFdISVRFX0NPTE9SID0gIlx4MWJbMzdtIjsKCi8vLyBBbGwgdGhlIGFib3ZlIGNvZGVzLiBUaGlzIGlzIHVzZWQgdG8gY29tcGFyZSB0aGUgYWJvdmUgY29kZXMgdG8gdGhlCi8vLyB0ZXJtaW5hbCdzLiBQcmludGluZyB0aGlzIHN0cmluZyBzaG91bGQgaGF2ZSB0aGUgc2FtZSBlZmZlY3QgYXMganVzdAovLy8gcHJpbnRpbmcgW0RFRkFVTFRfQ09MT1JdLgpjb25zdCBTdHJpbmcgQUxMX0NPREVTID0gQkxBQ0tfQ09MT1IgKwogICAgUkVEX0NPTE9SICsKICAgIEdSRUVOX0NPTE9SICsKICAgIFlFTExPV19DT0xPUiArCiAgICBCTFVFX0NPTE9SICsKICAgIE1BR0VOVEFfQ09MT1IgKwogICAgQ1lBTl9DT0xPUiArCiAgICBXSElURV9DT0xPUiArCiAgICBERUZBVUxUX0NPTE9SOwoKY29uc3QgU3RyaW5nIFRFUk1JTkFMX0NBUEFCSUxJVElFUyA9ICIiIgpjb2xvcnMKc2V0YWYgMApzZXRhZiAxCnNldGFmIDIKc2V0YWYgMwpzZXRhZiA0CnNldGFmIDUKc2V0YWYgNgpzZXRhZiA3Cm9wCiIiIjsKClN0cmluZyB3cmFwKFN0cmluZyBzdHJpbmcsIFN0cmluZyBjb2xvcikgewogIHJldHVybiBDb21waWxlckNvbnRleHQuZW5hYmxlQ29sb3JzCiAgICAgID8gIiR7Y29sb3J9JHN0cmluZyR7REVGQVVMVF9DT0xPUn0iCiAgICAgIDogc3RyaW5nOwp9CgpTdHJpbmcgYmxhY2soU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIEJMQUNLX0NPTE9SKTsKU3RyaW5nIHJlZChTdHJpbmcgc3RyaW5nKSA9PiB3cmFwKHN0cmluZywgUkVEX0NPTE9SKTsKU3RyaW5nIGdyZWVuKFN0cmluZyBzdHJpbmcpID0+IHdyYXAoc3RyaW5nLCBHUkVFTl9DT0xPUik7ClN0cmluZyB5ZWxsb3coU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIFlFTExPV19DT0xPUik7ClN0cmluZyBibHVlKFN0cmluZyBzdHJpbmcpID0+IHdyYXAoc3RyaW5nLCBCTFVFX0NPTE9SKTsKU3RyaW5nIG1hZ2VudGEoU3RyaW5nIHN0cmluZykgPT4gd3JhcChzdHJpbmcsIE1BR0VOVEFfQ09MT1IpOwpTdHJpbmcgY3lhbihTdHJpbmcgc3RyaW5nKSA9PiB3cmFwKHN0cmluZywgQ1lBTl9DT0xPUik7ClN0cmluZyB3aGl0ZShTdHJpbmcgc3RyaW5nKSA9PiB3cmFwKHN0cmluZywgV0hJVEVfQ09MT1IpOwoKLy8vIFJldHVybnMgd2hldGhlciBbc2lua10gc3VwcG9ydHMgQU5TSSBlc2NhcGVzIG9yIGBudWxsYCBpZiBpdCBjb3VsZCBub3QgYmUKLy8vIGRldGVybWluZWQuCmJvb2wgX3N1cHBvcnRzQW5zaUVzY2FwZXMoc2luaykgewogIHRyeSB7CiAgICAvLyBpZ25vcmU6IHVuZGVmaW5lZF9nZXR0ZXIKICAgIHJldHVybiBzaW5rLnN1cHBvcnRzQW5zaUVzY2FwZXM7CiAgfSBvbiBOb1N1Y2hNZXRob2RFcnJvciB7CiAgICAvLyBJZ25vcmVkOiBXZSdyZSBydW5uaW5nIG9uIGFuIG9sZGVyIHZlcnNpb24gb2YgdGhlIERhcnQgVk0gd2hpY2ggZG9lc24ndAogICAgLy8gaW1wbGVtZW50IGBzdXBwb3J0c0Fuc2lFc2NhcGVzYC4KICAgIHJldHVybiBudWxsOwogIH0KfQoKLy8vIFRydWUgaWYgd2Ugc2hvdWxkIGVuYWJsZSBjb2xvcnMgaW4gb3V0cHV0LgovLy8KLy8vIFdlIGVuYWJsZSBjb2xvcnMgd2hlbiBib3RoIGBzdGRvdXRgIGFuZCBgc3RkZXJyYCBzdXBwb3J0IEFOU0kgZXNjYXBlcy4KLy8vCi8vLyBPbiBub24tV2luZG93cyBwbGF0Zm9ybXMsIHRoaXMgZnVuY3Rpb25zIGNoZWNrcyB0aGUgdGVybWluYWwgY2FwYWJpbGl0aWVzLAovLy8gb24gV2luZG93cyB3ZSBvbmx5IGVuYWJsZSBjb2xvcnMgaWYgdGhlIFZNIGdldHRlcnMgYXJlIHByZXNlbnQgYW5kIHJldHVybmVkCi8vLyBgdHJ1ZWAuCi8vLwovLy8gTm90ZTogZG8gbm90IGNhbGwgdGhpcyBtZXRob2QgZGlyZWN0bHksIGFzIGl0IGlzIGV4cGVuc2l2ZSB0bwovLy8gY29tcHV0ZS4gSW5zdGVhZCwgdXNlIFtDb21waWxlckNvbnRleHQuZW5hYmxlQ29sb3JzXS4KYm9vbCBjb21wdXRlRW5hYmxlQ29sb3JzKENvbXBpbGVyQ29udGV4dCBjb250ZXh0KSB7CiAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcyBtZXRob2QuCgogIGJvb2wgc3RkZXJyU3VwcG9ydHNDb2xvcnMgPSBfc3VwcG9ydHNBbnNpRXNjYXBlcyhzdGRvdXQpOwogIGJvb2wgc3Rkb3V0U3VwcG9ydHNDb2xvcnMgPSBfc3VwcG9ydHNBbnNpRXNjYXBlcyhzdGRlcnIpOwoKICBpZiAoc3Rkb3V0U3VwcG9ydHNDb2xvcnMgPT0gZmFsc2UpIHsKICAgIGlmIChjb250ZXh0Lm9wdGlvbnMudmVyYm9zZSkgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgc3Rkb3V0IGRvZXMgbm90IHN1cHBvcnQgQU5TSSBjb2xvcnMuIik7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGlmIChzdGRlcnJTdXBwb3J0c0NvbG9ycyA9PSBmYWxzZSkgewogICAgaWYgKGNvbnRleHQub3B0aW9ucy52ZXJib3NlKSB7CiAgICAgIHByaW50KCJOb3QgZW5hYmxpbmcgY29sb3JzLCBzdGRlcnIgZG9lcyBub3Qgc3VwcG9ydCBBTlNJIGNvbG9ycy4iKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgIGlmIChzdGRlcnJTdXBwb3J0c0NvbG9ycyAhPSB0cnVlIHx8IHN0ZG91dFN1cHBvcnRzQ29sb3JzICE9IHRydWUpIHsKICAgICAgLy8gSW4gdGhpcyBjYXNlLCBlaXRoZXIgW3N0ZG91dF0gb3IgW3N0ZGVycl0gZGlkIG5vdCBzdXBwb3J0IHRoZQogICAgICAvLyBwcm9wZXJ0eSBgc3VwcG9ydHNBbnNpRXNjYXBlc2AuIFNpbmNlIHdlIGRvIG5vdCBoYXZlIGFub3RoZXIgd2F5CiAgICAgIC8vIHRvIGRldGVybWluZSBzdXBwb3J0IGZvciBjb2xvcnMsIHdlIGRpc2FibGUgdGhlbS4KICAgICAgaWYgKGNvbnRleHQub3B0aW9ucy52ZXJib3NlKSB7CiAgICAgICAgcHJpbnQoIk5vdCBlbmFibGluZyBjb2xvcnMgYXMgQU5TSSBpcyBub3Qgc3VwcG9ydGVkLiIpOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChjb250ZXh0Lm9wdGlvbnMudmVyYm9zZSkgewogICAgICBwcmludCgiRW5hYmxpbmcgY29sb3JzIGFzIE9TIGlzIFdpbmRvd3MuIik7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIFdlIGhhdmUgdG8gY2hlY2sgaWYgdGhlIHRlcm1pbmFsIGFjdHVhbGx5IHN1cHBvcnRzIGNvbG9ycy4gQ3VycmVudGx5LAogIC8vIHRvIGF2b2lkIGxpbmtpbmcgdGhlIERhcnQgVk0gd2l0aCBuY3Vyc2VzLCBBTlNJIGVzY2FwZSBzdXBwb3J0IGlzIHJlZHVjZWQKICAvLyB0byBgUGxhdGZvcm0uZW52aXJvbm1lbnRbJ1RFUk0nXS5jb250YWlucygieHRlcm0iKWAuCgogIC8vIFRoZSBgLVNgIG9wdGlvbiBvZiBgdHB1dGAgYWxsb3dzIHVzIHRvIHF1ZXJ5IG11bHRpcGxlIGNhcGFiaWxpdGllcyBhdAogIC8vIG9uY2UuCiAgUHJvY2Vzc1Jlc3VsdCByZXN1bHQgPSBQcm9jZXNzLnJ1blN5bmMoCiAgICAgICIvYmluL3NoIiwgWyItYyIsICJwcmludGYgJyVzJyAnJFRFUk1JTkFMX0NBUEFCSUxJVElFUycgfCB0cHV0IC1TIl0pOwoKICBpZiAocmVzdWx0LmV4aXRDb2RlICE9IDApIHsKICAgIGlmIChjb250ZXh0Lm9wdGlvbnMudmVyYm9zZSkgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgcnVubmluZyB0cHV0IGZhaWxlZC4iKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIExpc3Q8U3RyaW5nPiBsaW5lcyA9IHJlc3VsdC5zdGRvdXQuc3BsaXQoIlxuIik7CgogIGlmIChsaW5lcy5sZW5ndGggIT0gMikgewogICAgaWYgKGNvbnRleHQub3B0aW9ucy52ZXJib3NlKSB7CiAgICAgIHByaW50KCJOb3QgZW5hYmxpbmcgY29sb3JzLCB1bmV4cGVjdGVkIG91dHB1dCBmcm9tIHRwdXQ6ICIKICAgICAgICAgICIke2pzb25FbmNvZGUocmVzdWx0LnN0ZG91dCl9LiIpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgU3RyaW5nIG51bWJlck9mQ29sb3JzID0gbGluZXNbMF07CiAgaWYgKChpbnQudHJ5UGFyc2UobnVtYmVyT2ZDb2xvcnMpID8/IC0xKSA8IDgpIHsKICAgIGlmIChjb250ZXh0Lm9wdGlvbnMudmVyYm9zZSkgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgbGVzcyB0aGFuIDggY29sb3JzIHN1cHBvcnRlZDogIgogICAgICAgICAgIiR7anNvbkVuY29kZShudW1iZXJPZkNvbG9ycyl9LiIpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgU3RyaW5nIGFsbENvZGVzID0gbGluZXNbMV0udHJpbSgpOwogIGlmIChBTExfQ09ERVMgIT0gYWxsQ29kZXMpIHsKICAgIGlmIChjb250ZXh0Lm9wdGlvbnMudmVyYm9zZSkgewogICAgICBwcmludCgiTm90IGVuYWJsaW5nIGNvbG9ycywgY29sb3IgY29kZXMgZG9uJ3QgbWF0Y2g6ICIKICAgICAgICAgICIke2pzb25FbmNvZGUoQUxMX0NPREVTKX0gIT0gJHtqc29uRW5jb2RlKGFsbENvZGVzKX0uIik7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpZiAoY29udGV4dC5vcHRpb25zLnZlcmJvc2UpIHsKICAgIHByaW50KCJFbmFibGluZyBjb2xvcnMuIik7CiAgfQogIHJldHVybiB0cnVlOwp9CoDIAE5OPAFLHRABJwFIATUBRCQsAUYpJwFEKSUBRiknAUcpKAFFKSYBSCkpAUUpJgFGKScBSEkeJxASExEUERITASkHCAgICAgICAgDBQErJioQAgE6Njo8OD44OgFOECIIICUbTygRBAIBLwRLBE9QDARCOjQkATw8AScjSgYSBCcjSgYSBAEcSEdKOyVACBQGIzIGEQQBS086AUsLKkwBHiM6BhIEATIBGyNBLAYSBAEkMiNCLQYSBAElHyM9QwYSBAEhHwQPAgEncGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2NvbG9ycy5kYXJ0PXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvdHlwZV9sYWJlbGVyLmRhcnSvlC8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyBqc29uOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBCb29sQ29uc3RhbnQsCiAgICAgICAgQm90dG9tVHlwZSwKICAgICAgICBDbGFzcywKICAgICAgICBDb25zdGFudCwKICAgICAgICBDb25zdGFudE1hcEVudHJ5LAogICAgICAgIERhcnRUeXBlLAogICAgICAgIERvdWJsZUNvbnN0YW50LAogICAgICAgIER5bmFtaWNUeXBlLAogICAgICAgIEZpZWxkLAogICAgICAgIEZ1bmN0aW9uVHlwZSwKICAgICAgICBJbnZhbGlkVHlwZSwKICAgICAgICBJbnN0YW5jZUNvbnN0YW50LAogICAgICAgIEludENvbnN0YW50LAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgTGlicmFyeSwKICAgICAgICBMaXN0Q29uc3RhbnQsCiAgICAgICAgTWFwQ29uc3RhbnQsCiAgICAgICAgTnVsbENvbnN0YW50LAogICAgICAgIFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFNldENvbnN0YW50LAogICAgICAgIFN0cmluZ0NvbnN0YW50LAogICAgICAgIFN5bWJvbENvbnN0YW50LAogICAgICAgIFRlYXJPZmZDb25zdGFudCwKICAgICAgICBUcmVlTm9kZSwKICAgICAgICBUeXBlZGVmVHlwZSwKICAgICAgICBUeXBlTGl0ZXJhbENvbnN0YW50LAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVW5ldmFsdWF0ZWRDb25zdGFudCwKICAgICAgICBWb2lkVHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdmlzaXRvci5kYXJ0JyBzaG93IENvbnN0YW50VmlzaXRvciwgRGFydFR5cGVWaXNpdG9yOwoKaW1wb3J0ICcuLi9ibGFja2xpc3RlZF9jbGFzc2VzLmRhcnQnIHNob3cgYmxhY2tsaXN0ZWRDb3JlQ2xhc3NlczsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cgTWVzc2FnZSwgdGVtcGxhdGVUeXBlT3JpZ2luLCB0ZW1wbGF0ZVR5cGVPcmlnaW5XaXRoRmlsZVVyaTsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bnN1cHBvcnRlZDsKCi8vLyBBIHByZXR0eS1wcmludGVyIGZvciBLZXJuZWwgdHlwZXMgYW5kIGNvbnN0YW50cyB3aXRoIHRoZSBhYmlsaXR5IHRvIGxhYmVsCi8vLyByYXcgdHlwZXMgd2l0aCBudW1lcmljIG1hcmtlcnMgaW4gRGFydCBjb21tZW50cyAoZS5nLiBgLyoxKi9gKSB0bwovLy8gZGlzdGluZ3Vpc2ggZGlmZmVyZW50IHR5cGVzIHdpdGggdGhlIHNhbWUgbmFtZS4gVGhpcyBpcyB1c2VkIGluIGRpYWdub3N0aWMKLy8vIG1lc3NhZ2VzIHRvIGluZGljYXRlIHRoZSBvcmlnaW5zIG9mIHR5cGVzIG9jY3VycmluZyBpbiB0aGUgbWVzc2FnZS4KY2xhc3MgVHlwZUxhYmVsZXIgaW1wbGVtZW50cyBEYXJ0VHlwZVZpc2l0b3I8dm9pZD4sIENvbnN0YW50VmlzaXRvcjx2b2lkPiB7CiAgTGlzdDxMYWJlbGVkTm9kZT4gbmFtZXMgPSA8TGFiZWxlZE5vZGU+W107CiAgTWFwPFN0cmluZywgTGlzdDxMYWJlbGVkTm9kZT4+IG5hbWVNYXAgPSA8U3RyaW5nLCBMaXN0PExhYmVsZWROb2RlPj57fTsKCiAgTGlzdDxPYmplY3Q+IHJlc3VsdDsKCiAgLy8vIFByZXR0eS1wcmludCBhIHR5cGUuCiAgLy8vIFdoZW4gYWxsIHR5cGVzIGFuZCBjb25zdGFudHMgYXBwZWFyaW5nIGluIHRoZSBzYW1lIG1lc3NhZ2UgaGF2ZSBiZWVuCiAgLy8vIHByZXR0eS1wcmludGVkLCB0aGUgcmV0dXJuZWQgbGlzdCBjYW4gYmUgY29udmVydGVkIHRvIGl0cyBzdHJpbmcKICAvLy8gcmVwcmVzZW50YXRpb24gKHdpdGggbGFiZWxzIG9uIGR1cGxpY2F0ZWQgbmFtZXMpIGJ5IHRoZSBgam9pbigpYCBtZXRob2QuCiAgTGlzdDxPYmplY3Q+IGxhYmVsVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICAvLyBUT0RPKGFza2VzYyk6IFJlbW92ZSBudWxsIGNoZWNrIHdoZW4gd2UgYXJlIGNvbXBsZXRlbHkgbnVsbCBjbGVhbiBoZXJlLgogICAgaWYgKHR5cGUgPT0gbnVsbCkgcmV0dXJuIFsibnVsbC10eXBlIl07CiAgICByZXN1bHQgPSBbXTsKICAgIHR5cGUuYWNjZXB0KHRoaXMpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBQcmV0dHktcHJpbnQgYSBjb25zdGFudC4KICAvLy8gV2hlbiBhbGwgdHlwZXMgYW5kIGNvbnN0YW50cyBhcHBlYXJpbmcgaW4gdGhlIHNhbWUgbWVzc2FnZSBoYXZlIGJlZW4KICAvLy8gcHJldHR5LXByaW50ZWQsIHRoZSByZXR1cm5lZCBsaXN0IGNhbiBiZSBjb252ZXJ0ZWQgdG8gaXRzIHN0cmluZwogIC8vLyByZXByZXNlbnRhdGlvbiAod2l0aCBsYWJlbHMgb24gZHVwbGljYXRlZCBuYW1lcykgYnkgdGhlIGBqb2luKClgIG1ldGhvZC4KICBMaXN0PE9iamVjdD4gbGFiZWxDb25zdGFudChDb25zdGFudCBjb25zdGFudCkgewogICAgLy8gVE9ETyhhc2tlc2MpOiBSZW1vdmUgbnVsbCBjaGVjayB3aGVuIHdlIGFyZSBjb21wbGV0ZWx5IG51bGwgY2xlYW4gaGVyZS4KICAgIGlmIChjb25zdGFudCA9PSBudWxsKSByZXR1cm4gWyJudWxsLWNvbnN0YW50Il07CiAgICByZXN1bHQgPSBbXTsKICAgIGNvbnN0YW50LmFjY2VwdCh0aGlzKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gR2V0IGEgdGV4dHVhbCBkZXNjcmlwdGlvbiBvZiB0aGUgb3JpZ2lucyBvZiB0aGUgcmF3IHR5cGVzIGFwcGVhcmluZyBpbgogIC8vLyB0eXBlcyBhbmQgY29uc3RhbnRzIHRoYXQgaGF2ZSBiZWVuIHByZXR0eS1wcmludGVkIHVzaW5nIHRoaXMgbGFiZWxlci4KICBTdHJpbmcgZ2V0IG9yaWdpbk1lc3NhZ2VzIHsKICAgIFN0cmluZ0J1ZmZlciBtZXNzYWdlcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGZvciAoTGFiZWxlZE5vZGUgbmFtZSBpbiBuYW1lcykgewogICAgICBtZXNzYWdlcy53cml0ZShuYW1lLm9yaWdpbk1lc3NhZ2UpOwogICAgfQogICAgcmV0dXJuIG1lc3NhZ2VzLnRvU3RyaW5nKCk7CiAgfQoKICAvLyBXZSBkb24ndCBoYXZlIGFjY2VzcyB0byBjb3JlVHlwZXMgaGVyZSwgc28gd2UgaGF2ZSBvdXIgb3duIE9iamVjdCBjaGVjay4KICBzdGF0aWMgYm9vbCBpc09iamVjdChEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmIHR5cGUuY2xhc3NOb2RlLm5hbWUgPT0gJ09iamVjdCcpIHsKICAgICAgVXJpIGltcG9ydFVyaSA9IHR5cGUuY2xhc3NOb2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpOwogICAgICByZXR1cm4gaW1wb3J0VXJpLnNjaGVtZSA9PSAnZGFydCcgJiYgaW1wb3J0VXJpLnBhdGggPT0gJ2NvcmUnOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgTGFiZWxlZE5vZGUgbmFtZUZvckVudGl0eSgKICAgICAgVHJlZU5vZGUgbm9kZSwgU3RyaW5nIG5vZGVOYW1lLCBVcmkgaW1wb3J0VXJpLCBVcmkgZmlsZVVyaSkgewogICAgTGlzdDxMYWJlbGVkTm9kZT4gbGFiZWxzRm9yTmFtZSA9IG5hbWVNYXBbbm9kZU5hbWVdOwogICAgaWYgKGxhYmVsc0Zvck5hbWUgPT0gbnVsbCkgewogICAgICAvLyBGaXJzdCBlbmNvdW50ZXJlZCBlbnRpdHkgd2l0aCB0aGlzIG5hbWUKICAgICAgTGFiZWxlZE5vZGUgbmFtZSA9CiAgICAgICAgICBuZXcgTGFiZWxlZE5vZGUobm9kZSwgbm9kZU5hbWUsIGltcG9ydFVyaSwgZmlsZVVyaSwgdGhpcyk7CiAgICAgIG5hbWVzLmFkZChuYW1lKTsKICAgICAgbmFtZU1hcFtub2RlTmFtZV0gPSBbbmFtZV07CiAgICAgIHJldHVybiBuYW1lOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChMYWJlbGVkTm9kZSBlbnRpdHlGb3JOYW1lIGluIGxhYmVsc0Zvck5hbWUpIHsKICAgICAgICBpZiAoZW50aXR5Rm9yTmFtZS5ub2RlID09IG5vZGUpIHsKICAgICAgICAgIC8vIFByZXZpb3VzbHkgZW5jb3VudGVyZWQgZW50aXR5CiAgICAgICAgICByZXR1cm4gZW50aXR5Rm9yTmFtZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gTmV3IGVudGl0eSB3aXRoIG5hbWUgdGhhdCB3YXMgcHJldmlvdXNseSBlbmNvdW50ZXJlZAogICAgICBMYWJlbGVkTm9kZSBuYW1lID0KICAgICAgICAgIG5ldyBMYWJlbGVkTm9kZShub2RlLCBub2RlTmFtZSwgaW1wb3J0VXJpLCBmaWxlVXJpLCB0aGlzKTsKICAgICAgbmFtZXMuYWRkKG5hbWUpOwogICAgICBsYWJlbHNGb3JOYW1lLmFkZChuYW1lKTsKICAgICAgcmV0dXJuIG5hbWU7CiAgICB9CiAgfQoKICB2b2lkIGRlZmF1bHREYXJ0VHlwZShEYXJ0VHlwZSB0eXBlKSB7fQogIHZvaWQgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7fQoKICB2b2lkIHZpc2l0SW52YWxpZFR5cGUoSW52YWxpZFR5cGUgbm9kZSkgewogICAgLy8gVE9ETyhhc2tlc2MpOiBUaHJvdyBpbnRlcm5hbCBlcnJvciBpZiBJbnZhbGlkVHlwZSBhcHBlYXJzIGluIGRpYWdub3N0aWNzLgogICAgcmVzdWx0LmFkZCgiaW52YWxpZC10eXBlIik7CiAgfQoKICB2b2lkIHZpc2l0Qm90dG9tVHlwZShCb3R0b21UeXBlIG5vZGUpIHsKICAgIC8vIFRPRE8oYXNrZXNjKTogVGhyb3cgaW50ZXJuYWwgZXJyb3IgaWYgQm90dG9tVHlwZSBhcHBlYXJzIGluIGRpYWdub3N0aWNzLgogICAgcmVzdWx0LmFkZCgiYm90dG9tLXR5cGUiKTsKICB9CgogIHZvaWQgdmlzaXREeW5hbWljVHlwZShEeW5hbWljVHlwZSBub2RlKSB7CiAgICByZXN1bHQuYWRkKCJkeW5hbWljIik7CiAgfQoKICB2b2lkIHZpc2l0Vm9pZFR5cGUoVm9pZFR5cGUgbm9kZSkgewogICAgcmVzdWx0LmFkZCgidm9pZCIpOwogIH0KCiAgdm9pZCB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIFRyZWVOb2RlIHBhcmVudCA9IG5vZGUucGFyYW1ldGVyOwogICAgd2hpbGUgKHBhcmVudCBpcyEgTGlicmFyeSAmJiBwYXJlbnQgIT0gbnVsbCkgewogICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50OwogICAgfQogICAgLy8gTm90ZSB0aGF0IHRoaXMgY2FuIGJlIG51bGwgaWYsIGZvciBpbnN0YW5jZSwgdGhlIGVycm9ybmlvdXMgY29kZSBpcyBub3QKICAgIC8vIGFjdHVhbGx5IGluIHRoZSB0cmVlIC0gdGhlbiB3ZSBkb24ndCBrbm93IHdoZXJlIGl0IGNvbWVzIGZyb20hCiAgICBMaWJyYXJ5IGVuY2xvc2luZ0xpYnJhcnkgPSBwYXJlbnQ7CgogICAgcmVzdWx0LmFkZChuYW1lRm9yRW50aXR5KAogICAgICAgIG5vZGUucGFyYW1ldGVyLAogICAgICAgIG5vZGUucGFyYW1ldGVyLm5hbWUsCiAgICAgICAgZW5jbG9zaW5nTGlicmFyeSA9PSBudWxsID8gdW5rbm93blVyaSA6IGVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpLAogICAgICAgIGVuY2xvc2luZ0xpYnJhcnkgPT0gbnVsbCA/IHVua25vd25VcmkgOiBlbmNsb3NpbmdMaWJyYXJ5LmZpbGVVcmkpKTsKICB9CgogIHZvaWQgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIG5vZGUucmV0dXJuVHlwZS5hY2NlcHQodGhpcyk7CiAgICByZXN1bHQuYWRkKCIgRnVuY3Rpb24iKTsKICAgIGlmIChub2RlLnR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgcmVzdWx0LmFkZCgiPCIpOwogICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgICAgZm9yIChUeXBlUGFyYW1ldGVyIHBhcmFtIGluIG5vZGUudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgICBpZiAoIWZpcnN0KSByZXN1bHQuYWRkKCIsICIpOwogICAgICAgIHJlc3VsdC5hZGQocGFyYW0ubmFtZSk7CiAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmFtLmJvdW5kKSAmJiBwYXJhbS5kZWZhdWx0VHlwZSBpcyBEeW5hbWljVHlwZSkgewogICAgICAgICAgLy8gQm91bmQgd2FzIG5vdCBzcGVjaWZpZWQsIGFuZCB0aGVyZWZvcmUgc2hvdWxkIG5vdCBiZSBwcmludGVkLgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHQuYWRkKCIgZXh0ZW5kcyAiKTsKICAgICAgICAgIHBhcmFtLmJvdW5kLmFjY2VwdCh0aGlzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmVzdWx0LmFkZCgiPiIpOwogICAgfQogICAgcmVzdWx0LmFkZCgiKCIpOwogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudDsgaSsrKSB7CiAgICAgIGlmICghZmlyc3QpIHJlc3VsdC5hZGQoIiwgIik7CiAgICAgIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnNbaV0uYWNjZXB0KHRoaXMpOwogICAgICBmaXJzdCA9IGZhbHNlOwogICAgfQogICAgaWYgKG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoID4gbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgIGlmIChub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPiAwKSByZXN1bHQuYWRkKCIsICIpOwogICAgICByZXN1bHQuYWRkKCJbIik7CiAgICAgIGZpcnN0ID0gdHJ1ZTsKICAgICAgZm9yIChpbnQgaSA9IG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudDsKICAgICAgICAgIGkgPCBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsKICAgICAgICAgIGkrKykgewogICAgICAgIGlmICghZmlyc3QpIHJlc3VsdC5hZGQoIiwgIik7CiAgICAgICAgbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXS5hY2NlcHQodGhpcyk7CiAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgfQogICAgICByZXN1bHQuYWRkKCJdIik7CiAgICB9CiAgICBpZiAobm9kZS5uYW1lZFBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICBpZiAobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5pc05vdEVtcHR5KSByZXN1bHQuYWRkKCIsICIpOwogICAgICByZXN1bHQuYWRkKCJ7Iik7CiAgICAgIGZpcnN0ID0gdHJ1ZTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlLm5hbWVkUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICghZmlyc3QpIHJlc3VsdC5hZGQoIiwgIik7CiAgICAgICAgbm9kZS5uYW1lZFBhcmFtZXRlcnNbaV0udHlwZS5hY2NlcHQodGhpcyk7CiAgICAgICAgcmVzdWx0LmFkZCgiICR7bm9kZS5uYW1lZFBhcmFtZXRlcnNbaV0ubmFtZX0iKTsKICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICB9CiAgICAgIHJlc3VsdC5hZGQoIn0iKTsKICAgIH0KICAgIHJlc3VsdC5hZGQoIikiKTsKICB9CgogIHZvaWQgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgQ2xhc3MgY2xhc3NOb2RlID0gbm9kZS5jbGFzc05vZGU7CiAgICByZXN1bHQuYWRkKG5hbWVGb3JFbnRpdHkoCiAgICAgICAgY2xhc3NOb2RlLAogICAgICAgIGNsYXNzTm9kZS5uYW1lLAogICAgICAgIGNsYXNzTm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaSwKICAgICAgICBjbGFzc05vZGUuZW5jbG9zaW5nTGlicmFyeS5maWxlVXJpKSk7CiAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgcmVzdWx0LmFkZCgiPCIpOwogICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgICAgZm9yIChEYXJ0VHlwZSB0eXBlQXJnIGluIG5vZGUudHlwZUFyZ3VtZW50cykgewogICAgICAgIGlmICghZmlyc3QpIHJlc3VsdC5hZGQoIiwgIik7CiAgICAgICAgdHlwZUFyZy5hY2NlcHQodGhpcyk7CiAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgfQogICAgICByZXN1bHQuYWRkKCI+Iik7CiAgICB9CiAgfQoKICB2b2lkIGRlZmF1bHRDb25zdGFudChDb25zdGFudCBub2RlKSB7fQoKICB2b2lkIHZpc2l0TnVsbENvbnN0YW50KE51bGxDb25zdGFudCBub2RlKSB7CiAgICByZXN1bHQuYWRkKG5vZGUpOwogIH0KCiAgdm9pZCB2aXNpdEJvb2xDb25zdGFudChCb29sQ29uc3RhbnQgbm9kZSkgewogICAgcmVzdWx0LmFkZChub2RlKTsKICB9CgogIHZvaWQgdmlzaXRJbnRDb25zdGFudChJbnRDb25zdGFudCBub2RlKSB7CiAgICByZXN1bHQuYWRkKG5vZGUpOwogIH0KCiAgdm9pZCB2aXNpdERvdWJsZUNvbnN0YW50KERvdWJsZUNvbnN0YW50IG5vZGUpIHsKICAgIHJlc3VsdC5hZGQobm9kZSk7CiAgfQoKICB2b2lkIHZpc2l0U3ltYm9sQ29uc3RhbnQoU3ltYm9sQ29uc3RhbnQgbm9kZSkgewogICAgcmVzdWx0LmFkZChub2RlKTsKICB9CgogIHZvaWQgdmlzaXRTdHJpbmdDb25zdGFudChTdHJpbmdDb25zdGFudCBub2RlKSB7CiAgICByZXN1bHQuYWRkKGpzb24uZW5jb2RlKG5vZGUudmFsdWUpKTsKICB9CgogIHZvaWQgdmlzaXRJbnN0YW5jZUNvbnN0YW50KEluc3RhbmNlQ29uc3RhbnQgbm9kZSkgewogICAgbmV3IEludGVyZmFjZVR5cGUobm9kZS5jbGFzc05vZGUsIG5vZGUudHlwZUFyZ3VtZW50cykuYWNjZXB0KHRoaXMpOwogICAgcmVzdWx0LmFkZCgiIHsiKTsKICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgZm9yIChGaWVsZCBmaWVsZCBpbiBub2RlLmNsYXNzTm9kZS5maWVsZHMpIHsKICAgICAgaWYgKGZpZWxkLmlzU3RhdGljKSBjb250aW51ZTsKICAgICAgaWYgKCFmaXJzdCkgcmVzdWx0LmFkZCgiLCAiKTsKICAgICAgcmVzdWx0LmFkZCgiJHtmaWVsZC5uYW1lfTogIik7CiAgICAgIG5vZGUuZmllbGRWYWx1ZXNbZmllbGQucmVmZXJlbmNlXS5hY2NlcHQodGhpcyk7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICB9CiAgICByZXN1bHQuYWRkKCJ9Iik7CiAgfQoKICB2b2lkIHZpc2l0TGlzdENvbnN0YW50KExpc3RDb25zdGFudCBub2RlKSB7CiAgICByZXN1bHQuYWRkKCI8Iik7CiAgICBub2RlLnR5cGVBcmd1bWVudC5hY2NlcHQodGhpcyk7CiAgICByZXN1bHQuYWRkKCI+WyIpOwogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBmb3IgKENvbnN0YW50IGNvbnN0YW50IGluIG5vZGUuZW50cmllcykgewogICAgICBpZiAoIWZpcnN0KSByZXN1bHQuYWRkKCIsICIpOwogICAgICBjb25zdGFudC5hY2NlcHQodGhpcyk7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICB9CiAgICByZXN1bHQuYWRkKCJdIik7CiAgfQoKICB2b2lkIHZpc2l0U2V0Q29uc3RhbnQoU2V0Q29uc3RhbnQgbm9kZSkgewogICAgcmVzdWx0LmFkZCgiPCIpOwogICAgbm9kZS50eXBlQXJndW1lbnQuYWNjZXB0KHRoaXMpOwogICAgcmVzdWx0LmFkZCgiPnsiKTsKICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgZm9yIChDb25zdGFudCBjb25zdGFudCBpbiBub2RlLmVudHJpZXMpIHsKICAgICAgaWYgKCFmaXJzdCkgcmVzdWx0LmFkZCgiLCAiKTsKICAgICAgY29uc3RhbnQuYWNjZXB0KHRoaXMpOwogICAgICBmaXJzdCA9IGZhbHNlOwogICAgfQogICAgcmVzdWx0LmFkZCgifSIpOwogIH0KCiAgdm9pZCB2aXNpdE1hcENvbnN0YW50KE1hcENvbnN0YW50IG5vZGUpIHsKICAgIHJlc3VsdC5hZGQoIjwiKTsKICAgIG5vZGUua2V5VHlwZS5hY2NlcHQodGhpcyk7CiAgICByZXN1bHQuYWRkKCIsICIpOwogICAgbm9kZS52YWx1ZVR5cGUuYWNjZXB0KHRoaXMpOwogICAgcmVzdWx0LmFkZCgiPnsiKTsKICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgZm9yIChDb25zdGFudE1hcEVudHJ5IGVudHJ5IGluIG5vZGUuZW50cmllcykgewogICAgICBpZiAoIWZpcnN0KSByZXN1bHQuYWRkKCIsICIpOwogICAgICBlbnRyeS5rZXkuYWNjZXB0KHRoaXMpOwogICAgICByZXN1bHQuYWRkKCI6ICIpOwogICAgICBlbnRyeS52YWx1ZS5hY2NlcHQodGhpcyk7CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICB9CiAgICByZXN1bHQuYWRkKCJ9Iik7CiAgfQoKICB2b2lkIHZpc2l0VGVhck9mZkNvbnN0YW50KFRlYXJPZmZDb25zdGFudCBub2RlKSB7CiAgICBQcm9jZWR1cmUgcHJvY2VkdXJlID0gbm9kZS5wcm9jZWR1cmU7CiAgICBDbGFzcyBjbGFzc05vZGUgPSBwcm9jZWR1cmUuZW5jbG9zaW5nQ2xhc3M7CiAgICBpZiAoY2xhc3NOb2RlICE9IG51bGwpIHsKICAgICAgcmVzdWx0LmFkZChuYW1lRm9yRW50aXR5KAogICAgICAgICAgY2xhc3NOb2RlLAogICAgICAgICAgY2xhc3NOb2RlLm5hbWUsCiAgICAgICAgICBjbGFzc05vZGUuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmksCiAgICAgICAgICBjbGFzc05vZGUuZW5jbG9zaW5nTGlicmFyeS5maWxlVXJpKSk7CiAgICAgIHJlc3VsdC5hZGQoIi4iKTsKICAgIH0KICAgIHJlc3VsdC5hZGQocHJvY2VkdXJlLm5hbWUubmFtZSk7CiAgfQoKICB2b2lkIHZpc2l0UGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudChQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpIHsKICAgIG5vZGUudGVhck9mZkNvbnN0YW50LmFjY2VwdCh0aGlzKTsKICAgIGlmIChub2RlLnR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgcmVzdWx0LmFkZCgiPCIpOwogICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgICAgZm9yIChEYXJ0VHlwZSB0eXBlQXJnIGluIG5vZGUudHlwZXMpIHsKICAgICAgICBpZiAoIWZpcnN0KSByZXN1bHQuYWRkKCIsICIpOwogICAgICAgIHR5cGVBcmcuYWNjZXB0KHRoaXMpOwogICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgIH0KICAgICAgcmVzdWx0LmFkZCgiPiIpOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQoVHlwZUxpdGVyYWxDb25zdGFudCBub2RlKSB7CiAgICBub2RlLnR5cGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgdm9pZCB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSB7CiAgICB1bnN1cHBvcnRlZCgncHJpbnRpbmcgdW5ldmFsdWF0ZWQgY29uc3RhbnRzJywgLTEsIG51bGwpOwogIH0KfQoKZmluYWwgVXJpIHVua25vd25VcmkgPSBVcmkucGFyc2UoInVua25vd24iKTsKCmNsYXNzIExhYmVsZWROb2RlIHsKICBmaW5hbCBUcmVlTm9kZSBub2RlOwogIGZpbmFsIFR5cGVMYWJlbGVyIHR5cGVMYWJlbGVyOwogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIFVyaSBpbXBvcnRVcmk7CiAgZmluYWwgVXJpIGZpbGVVcmk7CgogIExhYmVsZWROb2RlKAogICAgICB0aGlzLm5vZGUsIHRoaXMubmFtZSwgdGhpcy5pbXBvcnRVcmksIHRoaXMuZmlsZVVyaSwgdGhpcy50eXBlTGFiZWxlcik7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIExpc3Q8TGFiZWxlZE5vZGU+IGVudGl0eUZvck5hbWUgPSB0eXBlTGFiZWxlci5uYW1lTWFwW25hbWVdOwogICAgaWYgKGVudGl0eUZvck5hbWUubGVuZ3RoID09IDEpIHsKICAgICAgcmV0dXJuIG5hbWU7CiAgICB9CiAgICByZXR1cm4gIiRuYW1lLyoke2VudGl0eUZvck5hbWUuaW5kZXhPZih0aGlzKSArIDF9Ki8iOwogIH0KCiAgU3RyaW5nIGdldCBvcmlnaW5NZXNzYWdlIHsKICAgIGlmIChpbXBvcnRVcmkuc2NoZW1lID09ICdkYXJ0JyAmJiBpbXBvcnRVcmkucGF0aCA9PSAnY29yZScpIHsKICAgICAgaWYgKG5vZGUgaXMgQ2xhc3MgJiYgYmxhY2tsaXN0ZWRDb3JlQ2xhc3Nlcy5jb250YWlucyhuYW1lKSkgewogICAgICAgIC8vIEJsYWNrbGlzdGVkIGNvcmUgY2xhc3MuIE9ubHkgcHJpbnQgaWYgYW1iaWd1b3VzLgogICAgICAgIExpc3Q8TGFiZWxlZE5vZGU+IGVudGl0eUZvck5hbWUgPSB0eXBlTGFiZWxlci5uYW1lTWFwW25hbWVdOwogICAgICAgIGlmIChlbnRpdHlGb3JOYW1lLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoaW1wb3J0VXJpID09IHVua25vd25VcmkgfHwgbm9kZSBpcyEgQ2xhc3MpIHsKICAgICAgLy8gV2UgZG9uJ3Qga25vdyB3aGVyZSBpdCBjb21lcyBmcm9tIGFuZC9vciBpdCdzIG5vdCBhIGNsYXNzLgogICAgICAvLyBPbmx5IHByaW50IGlmIGFtYmlndW91cy4KICAgICAgTGlzdDxMYWJlbGVkTm9kZT4gZW50aXR5Rm9yTmFtZSA9IHR5cGVMYWJlbGVyLm5hbWVNYXBbbmFtZV07CiAgICAgIGlmIChlbnRpdHlGb3JOYW1lLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgcmV0dXJuICIiOwogICAgICB9CiAgICB9CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSAoaW1wb3J0VXJpID09IGZpbGVVcmkgfHwgaW1wb3J0VXJpLnNjaGVtZSA9PSAnZGFydCcpCiAgICAgICAgPyB0ZW1wbGF0ZVR5cGVPcmlnaW4ud2l0aEFyZ3VtZW50cyh0b1N0cmluZygpLCBpbXBvcnRVcmkpCiAgICAgICAgOiB0ZW1wbGF0ZVR5cGVPcmlnaW5XaXRoRmlsZVVyaS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICB0b1N0cmluZygpLCBpbXBvcnRVcmksIGZpbGVVcmkpOwogICAgcmV0dXJuICJcbiAtICIgKyBtZXNzYWdlLm1lc3NhZ2U7CiAgfQp9CoGUAE5OPAEhASEJFhQPEhoSGBUPFhUaFRcRFhUWJhMVGBgZEhUdFxsdEgFMAUIBHUUBLAFORk9ITC1KARcBG0tHTypPLBEXEwQBH0tHTzJPNBEbEwQBTUweMCYqBiAEAU4oREFFBhIEAR1EOSExGUUXIhMNOSorIAoIPhlFFx8TBgQBKS0BLFEgBAEqUB8EASwbBAEmGAQBOCYzHgZPRicBHhgdTEwEAS4iHSoXGTkmIElLESMkCggXBhUXPCQxFQZKPRcUMDARJjMXCBcGK0IXFD4mMzgXCBcGFQQBMCYeExguLikXGTUmHhcIFwYEASkBLhYEAS4WBAEsFgQBMhYEATIWBAEyKQQBNkgWFzEkJCU2FQYVBAEuFSQWFy4kHRUGFQQBLBUkFhcuJB0VBhUEASwVHxYhFhczJB4YIBUGFQQBNCowHSAVGjAwFwYlBAFOJyEXGS0mHhcIFwYEATwcBAE8PQQCAS0BFBchFRcVAQ9NARZBJRMGOgQBHUJEPEUpFQoIBjVEIkMnEwgGS0I3LSYEAgE0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC90eXBlX2xhYmVsZXIuZGFydC9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvY3Jhc2guZGFydI3sLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuY3Jhc2g7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cganNvbkVuY29kZTsKCmltcG9ydCAnZGFydDppbycKICAgIHNob3cgQ29udGVudFR5cGUsIEh0dHBDbGllbnQsIEh0dHBDbGllbnRSZXF1ZXN0LCBTb2NrZXRFeGNlcHRpb24sIHN0ZGVycjsKCmltcG9ydCAncHJvYmxlbXMuZGFydCcgc2hvdyBEZWJ1Z0Fib3J0OwoKY29uc3QgU3RyaW5nIGRlZmF1bHRTZXJ2ZXJBZGRyZXNzID0gImh0dHA6Ly8xMjcuMC4wLjE6NTk0MTAvIjsKCi8vLyBUcmFja3MgaWYgdGhlcmUgaGFzIGJlZW4gYSBjcmFzaCByZXBvcnRlZCB0aHJvdWdoIFtyZXBvcnRDcmFzaF0uIFNob3VsZCBiZQovLy8gcmVzZXQgYmV0d2VlbiBlYWNoIGNvbXBpbGF0aW9uIGJ5IGNhbGxpbmcgW3Jlc2V0Q3Jhc2hSZXBvcnRpbmddLgpib29sIGhhc0NyYXNoZWQgPSBmYWxzZTsKCi8vLyBUcmFja3MgdGhlIGZpcnN0IHNvdXJjZSBVUkkgdGhhdCBoYXMgYmVlbiByZWFkIGFuZCBpcyB1c2VkIGFzIGEgZmFsbC1iYWNrCi8vLyBmb3IgW3JlcG9ydENyYXNoXS4gU2hvdWxkIGJlIHJlc2V0IGJldHdlZW4gZWFjaCBjb21waWxhdGlvbiBieSBjYWxsaW5nCi8vLyBbcmVzZXRDcmFzaFJlcG9ydGluZ10uClVyaSBmaXJzdFNvdXJjZVVyaTsKCmNsYXNzIENyYXNoIHsKICBmaW5hbCBVcmkgdXJpOwoKICBmaW5hbCBpbnQgY2hhck9mZnNldDsKCiAgZmluYWwgT2JqZWN0IGVycm9yOwoKICBmaW5hbCBTdGFja1RyYWNlIHRyYWNlOwoKICBDcmFzaCh0aGlzLnVyaSwgdGhpcy5jaGFyT2Zmc2V0LCB0aGlzLmVycm9yLCB0aGlzLnRyYWNlKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICIiIgpDcmFzaCB3aGVuIGNvbXBpbGluZyAkdXJpLAphdCBjaGFyYWN0ZXIgb2Zmc2V0ICRjaGFyT2Zmc2V0OgokZXJyb3Ike3RyYWNlID09IG51bGwgPyAnJyA6ICdcbiR0cmFjZSd9CiIiIjsKICB9Cn0KCnZvaWQgcmVzZXRDcmFzaFJlcG9ydGluZygpIHsKICBmaXJzdFNvdXJjZVVyaSA9IG51bGw7CiAgaGFzQ3Jhc2hlZCA9IGZhbHNlOwp9CgpGdXR1cmU8VD4gcmVwb3J0Q3Jhc2g8VD4oZXJyb3IsIFN0YWNrVHJhY2UgdHJhY2UsCiAgICBbVXJpIHVyaSwgaW50IGNoYXJPZmZzZXRdKSBhc3luYyB7CiAgbm90ZShTdHJpbmcgbm90ZSkgYXN5bmMgewogICAgc3RkZXJyLndyaXRlKG5vdGUpOwogICAgYXdhaXQgc3RkZXJyLmZsdXNoKCk7CiAgfQoKICBpZiAoaGFzQ3Jhc2hlZCkgcmV0dXJuIG5ldyBGdXR1cmU8VD4uZXJyb3IoZXJyb3IsIHRyYWNlKTsKICBpZiAoZXJyb3IgaXMgQ3Jhc2gpIHsKICAgIHRyYWNlID0gZXJyb3IudHJhY2UgPz8gdHJhY2U7CiAgICB1cmkgPSBlcnJvci51cmkgPz8gdXJpOwogICAgY2hhck9mZnNldCA9IGVycm9yLmNoYXJPZmZzZXQgPz8gY2hhck9mZnNldDsKICAgIGVycm9yID0gZXJyb3IuZXJyb3I7CiAgfQogIHVyaSA/Pz0gZmlyc3RTb3VyY2VVcmk7CiAgaGFzQ3Jhc2hlZCA9IHRydWU7CiAgTWFwPFN0cmluZywgZHluYW1pYz4gZGF0YSA9IDxTdHJpbmcsIGR5bmFtaWM+e307CiAgZGF0YVsidHlwZSJdID0gImNyYXNoIjsKICBkYXRhWyJjbGllbnQiXSA9ICJwYWNrYWdlOmZhc3RhIjsKICBpZiAodXJpICE9IG51bGwpIGRhdGFbInVyaSJdID0gIiR1cmkiOwogIGlmIChjaGFyT2Zmc2V0ICE9IG51bGwpIGRhdGFbIm9mZnNldCJdID0gY2hhck9mZnNldDsKICBkYXRhWyJlcnJvciJdID0gc2FmZVRvU3RyaW5nKGVycm9yKTsKICBkYXRhWyJ0cmFjZSJdID0gIiR0cmFjZSI7CiAgU3RyaW5nIGpzb24gPSBqc29uRW5jb2RlKGRhdGEpOwogIEh0dHBDbGllbnQgY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKICB0cnkgewogICAgVXJpIHNlcnZlclVyaSA9IFVyaS5wYXJzZShkZWZhdWx0U2VydmVyQWRkcmVzcyk7CiAgICBIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0OwogICAgdHJ5IHsKICAgICAgcmVxdWVzdCA9IGF3YWl0IGNsaWVudC5wb3N0VXJsKHNlcnZlclVyaSk7CiAgICB9IG9uIFNvY2tldEV4Y2VwdGlvbiB7CiAgICAgIC8vIEFzc3VtZSB0aGUgY3Jhc2ggbG9nZ2VyIGlzbid0IHJ1bm5pbmcuCiAgICAgIGNsaWVudC5jbG9zZShmb3JjZTogdHJ1ZSk7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlPFQ+LmVycm9yKAogICAgICAgICAgbmV3IENyYXNoKHVyaSwgY2hhck9mZnNldCwgZXJyb3IsIHRyYWNlKSwgdHJhY2UpOwogICAgfQogICAgaWYgKHJlcXVlc3QgIT0gbnVsbCkgewogICAgICBhd2FpdCBub3RlKCJcblNlbmRpbmcgY3Jhc2ggcmVwb3J0IGRhdGEiKTsKICAgICAgcmVxdWVzdC5wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IGZhbHNlOwogICAgICByZXF1ZXN0LmJ1ZmZlck91dHB1dCA9IGZhbHNlOwogICAgICBTdHJpbmcgaG9zdCA9IHJlcXVlc3Q/LmNvbm5lY3Rpb25JbmZvPy5yZW1vdGVBZGRyZXNzPy5ob3N0OwogICAgICBpbnQgcG9ydCA9IHJlcXVlc3Q/LmNvbm5lY3Rpb25JbmZvPy5yZW1vdGVQb3J0OwogICAgICBhd2FpdCBub3RlKCIgdG8gJGhvc3Q6JHBvcnQiKTsKICAgICAgYXdhaXQgcmVxdWVzdAogICAgICAgIC4uaGVhZGVycy5jb250ZW50VHlwZSA9IENvbnRlbnRUeXBlLmpzb24KICAgICAgICAuLndyaXRlKGpzb24pOwogICAgICBhd2FpdCByZXF1ZXN0LmNsb3NlKCk7CiAgICAgIGF3YWl0IG5vdGUoIi4iKTsKICAgIH0KICB9IGNhdGNoIChlLCBzKSB7CiAgICBhd2FpdCBub3RlKCJcbiR7c2FmZVRvU3RyaW5nKGUpfVxuJHNcbiIpOwogICAgYXdhaXQgbm90ZSgiXG5cblxuRkU6OkVSUk9SOjokanNvblxuXG5cbiIpOwogIH0KICBjbGllbnQuY2xvc2UoZm9yY2U6IHRydWUpOwogIGF3YWl0IG5vdGUoIlxuIik7CiAgcmV0dXJuIG5ldyBGdXR1cmU8VD4uZXJyb3IoZXJyb3IsIHRyYWNlKTsKfQoKU3RyaW5nIHNhZmVUb1N0cmluZyhPYmplY3Qgb2JqZWN0KSB7CiAgdHJ5IHsKICAgIHJldHVybiAiJG9iamVjdCI7CiAgfSBjYXRjaCAoZSkgewogICAgcmV0dXJuICJFcnJvciB3aGVuIGNvbnZlcnRpbmcgJHtvYmplY3QucnVudGltZVR5cGV9IHRvIHN0cmluZy4iOwogIH0KfQoKRnV0dXJlPFQ+IHdpdGhDcmFzaFJlcG9ydGluZzxUPigKICAgIEZ1dHVyZTxUPiBGdW5jdGlvbigpIGFjdGlvbiwgVXJpIEZ1bmN0aW9uKCkgY3VycmVudFVyaSkgYXN5bmMgewogIHJlc2V0Q3Jhc2hSZXBvcnRpbmcoKTsKICB0cnkgewogICAgcmV0dXJuIGF3YWl0IGFjdGlvbigpOwogIH0gb24gQ3Jhc2ggewogICAgcmV0aHJvdzsKICB9IG9uIERlYnVnQWJvcnQgewogICAgcmV0aHJvdzsKICB9IGNhdGNoIChlLCBzKSB7CiAgICByZXR1cm4gcmVwb3J0Q3Jhc2goZSwgcywgY3VycmVudFVyaSgpKTsKICB9Cn0KgIQATk48ARUBIQEnARFOASgBPwFPRRkBTksbFAEOEQEYARYBGgE8ARYPGyEpBQQCAR0ZFgIBMiccGBoEATwYIhwxGQQaFTMaJCk3JxwiKAg1HwoxGzAhIjwGGzEsJEI2JRQxFx0XBhMuMAQdFCwCASUIFhBFBAIBIUQZCBsPDRQNEywEAgEmcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2NyYXNoLmRhcnQ6c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2RpbGwvZGlsbF90YXJnZXQuZGFydIejLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZGlsbF90YXJnZXQ7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBMaWJyYXJ5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90YXJnZXQvdGFyZ2V0cy5kYXJ0JyBzaG93IFRhcmdldDsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnIHNob3cgQ2xhc3NCdWlsZGVyOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuc3VwcG9ydGVkOwoKaW1wb3J0ICcuLi90YXJnZXRfaW1wbGVtZW50YXRpb24uZGFydCcgc2hvdyBUYXJnZXRJbXBsZW1lbnRhdGlvbjsKCmltcG9ydCAnLi4vdGlja2VyLmRhcnQnIHNob3cgVGlja2VyOwoKaW1wb3J0ICcuLi91cmlfdHJhbnNsYXRvci5kYXJ0JyBzaG93IFVyaVRyYW5zbGF0b3I7CgppbXBvcnQgJ2RpbGxfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgRGlsbExpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICdkaWxsX2xvYWRlci5kYXJ0JyBzaG93IERpbGxMb2FkZXI7CgpjbGFzcyBEaWxsVGFyZ2V0IGV4dGVuZHMgVGFyZ2V0SW1wbGVtZW50YXRpb24gewogIGZpbmFsIE1hcDxVcmksIERpbGxMaWJyYXJ5QnVpbGRlcj4gbGlicmFyeUJ1aWxkZXJzID0KICAgICAgPFVyaSwgRGlsbExpYnJhcnlCdWlsZGVyPnt9OwoKICBib29sIGlzTG9hZGVkID0gZmFsc2U7CgogIERpbGxMb2FkZXIgbG9hZGVyOwoKICBEaWxsVGFyZ2V0KFRpY2tlciB0aWNrZXIsIFVyaVRyYW5zbGF0b3IgdXJpVHJhbnNsYXRvciwgVGFyZ2V0IGJhY2tlbmRUYXJnZXQpCiAgICAgIDogc3VwZXIodGlja2VyLCB1cmlUcmFuc2xhdG9yLCBiYWNrZW5kVGFyZ2V0KSB7CiAgICBsb2FkZXIgPSBuZXcgRGlsbExvYWRlcih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkU291cmNlSW5mb3JtYXRpb24oCiAgICAgIFVyaSBpbXBvcnRVcmksIFVyaSBmaWxlVXJpLCBMaXN0PGludD4gbGluZVN0YXJ0cywgTGlzdDxpbnQ+IHNvdXJjZUNvZGUpIHsKICAgIHVuc3VwcG9ydGVkKCJhZGRTb3VyY2VJbmZvcm1hdGlvbiIsIC0xLCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxOdWxsPiBidWlsZENvbXBvbmVudCgpIHsKICAgIHJldHVybiBuZXcgRnV0dXJlPE51bGw+LnN5bmMoKCkgPT4gdW5zdXBwb3J0ZWQoImJ1aWxkQ29tcG9uZW50IiwgLTEsIG51bGwpKTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxOdWxsPiBidWlsZE91dGxpbmVzKCkgYXN5bmMgewogICAgaWYgKGxvYWRlci5saWJyYXJpZXMuaXNOb3RFbXB0eSkgewogICAgICBhd2FpdCBsb2FkZXIuYnVpbGRPdXRsaW5lcygpOwogICAgICBsb2FkZXIuZmluYWxpemVFeHBvcnRzKCk7CiAgICB9CiAgICBpc0xvYWRlZCA9IHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBEaWxsTGlicmFyeUJ1aWxkZXIgY3JlYXRlTGlicmFyeUJ1aWxkZXIoVXJpIHVyaSwgVXJpIGZpbGVVcmksIG9yaWdpbikgewogICAgYXNzZXJ0KG9yaWdpbiA9PSBudWxsKTsKICAgIHJldHVybiBsaWJyYXJ5QnVpbGRlcnMucmVtb3ZlKHVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJyZWFrQ3ljbGUoQ2xhc3NCdWlsZGVyIGNscykge30KCiAgdm9pZCBhZGRMaWJyYXJ5KExpYnJhcnkgbGlicmFyeSkgewogICAgbGlicmFyeUJ1aWxkZXJzW2xpYnJhcnkuaW1wb3J0VXJpXSA9CiAgICAgICAgbmV3IERpbGxMaWJyYXJ5QnVpbGRlcihsaWJyYXJ5LCBsb2FkZXIpOwogIH0KfQpLAE5OPAEbASEBLwE5AToBLAFCASUBNAE8ASsBMDcjARkBFQFPNiMEAQwdUDMEAQwiUQQBDCcnJCAGFQQBDEocKAQBDCcBJSkxBAIBMXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9kaWxsL2RpbGxfdGFyZ2V0LmRhcnQ+c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9rZXJuZWxfdGFyZ2V0LmRhcnTAAH6LLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEua2VybmVsX3RhcmdldDsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIEFyZ3VtZW50cywKICAgICAgICBDYW5vbmljYWxOYW1lLAogICAgICAgIENsYXNzLAogICAgICAgIENvbXBvbmVudCwKICAgICAgICBDb25zdHJ1Y3RvciwKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBFbXB0eVN0YXRlbWVudCwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEZpZWxkLAogICAgICAgIEZpZWxkSW5pdGlhbGl6ZXIsCiAgICAgICAgRnVuY3Rpb25Ob2RlLAogICAgICAgIEluaXRpYWxpemVyLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgSW52YWxpZEluaXRpYWxpemVyLAogICAgICAgIExpYnJhcnksCiAgICAgICAgTmFtZSwKICAgICAgICBOYW1lZEV4cHJlc3Npb24sCiAgICAgICAgTnVsbExpdGVyYWwsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIsCiAgICAgICAgU291cmNlLAogICAgICAgIFN1cGVySW5pdGlhbGl6ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uLAogICAgICAgIFZhcmlhYmxlR2V0OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbG9uZS5kYXJ0JyBzaG93IENsb25lVmlzaXRvcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIHNob3cgc3Vic3RpdHV0ZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdGFyZ2V0L3RhcmdldHMuZGFydCcgc2hvdyBEaWFnbm9zdGljUmVwb3J0ZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgc2hvdyBUeXBlRW52aXJvbm1lbnQ7CgppbXBvcnQgJy4uLy4uL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCcgc2hvdyBGaWxlU3lzdGVtOwoKaW1wb3J0ICcuLi9jb21waWxlcl9jb250ZXh0LmRhcnQnIHNob3cgQ29tcGlsZXJDb250ZXh0OwoKaW1wb3J0ICcuLi9jcmFzaC5kYXJ0JyBzaG93IHdpdGhDcmFzaFJlcG9ydGluZzsKCmltcG9ydCAnLi4vZGlsbC9kaWxsX3RhcmdldC5kYXJ0JyBzaG93IERpbGxUYXJnZXQ7CgppbXBvcnQgJy4uL2RpbGwvZGlsbF9tZW1iZXJfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxNZW1iZXJCdWlsZGVyOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IE1lc3NhZ2UsIExvY2F0ZWRNZXNzYWdlOwoKaW1wb3J0ICcuLi9sb2FkZXIuZGFydCcgc2hvdyBMb2FkZXI7CgppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnCiAgICBzaG93CiAgICAgICAgRm9ybWF0dGVkTWVzc2FnZSwKICAgICAgICBtZXNzYWdlQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGQsCiAgICAgICAgbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkQ2F1c2UsCiAgICAgICAgbWVzc2FnZUNvbnN0Q29uc3RydWN0b3JSZWRpcmVjdGlvblRvTm9uQ29uc3QsCiAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgdGVtcGxhdGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWQsCiAgICAgICAgdGVtcGxhdGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yLAogICAgICAgIHRlbXBsYXRlSW5mZXJyZWRQYWNrYWdlVXJpLAogICAgICAgIHRlbXBsYXRlTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2UsCiAgICAgICAgdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9EZWZhdWx0Q29uc3RydWN0b3I7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5oYW5kbGVkOwoKaW1wb3J0ICcuLi9zY29wZS5kYXJ0JyBzaG93IEFtYmlndW91c0J1aWxkZXI7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfY2xhc3NfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUNsYXNzQnVpbGRlcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9sb2FkZXIuZGFydCcgc2hvdyBTb3VyY2VMb2FkZXI7CgppbXBvcnQgJy4uL3RhcmdldF9pbXBsZW1lbnRhdGlvbi5kYXJ0JyBzaG93IFRhcmdldEltcGxlbWVudGF0aW9uOwoKaW1wb3J0ICcuLi91cmlfdHJhbnNsYXRvci5kYXJ0JyBzaG93IFVyaVRyYW5zbGF0b3I7CgppbXBvcnQgJ2NvbnN0YW50X2V2YWx1YXRvci5kYXJ0JyBhcyBjb25zdGFudHMgc2hvdyB0cmFuc2Zvcm1MaWJyYXJpZXM7CgppbXBvcnQgJ2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIERlY2xhcmF0aW9uLAogICAgICAgIEludmFsaWRUeXBlQnVpbGRlciwKICAgICAgICBGaWVsZEJ1aWxkZXIsCiAgICAgICAgTmFtZWRUeXBlQnVpbGRlciwKICAgICAgICBQcm9jZWR1cmVCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXI7CgppbXBvcnQgJ2tlcm5lbF9jb25zdGFudHMuZGFydCcgc2hvdyBLZXJuZWxDb25zdGFudEVycm9yUmVwb3J0ZXI7CgppbXBvcnQgJ21ldGFkYXRhX2NvbGxlY3Rvci5kYXJ0JyBzaG93IE1ldGFkYXRhQ29sbGVjdG9yOwoKaW1wb3J0ICd2ZXJpZmllci5kYXJ0JyBzaG93IHZlcmlmeUNvbXBvbmVudDsKCmNsYXNzIEtlcm5lbFRhcmdldCBleHRlbmRzIFRhcmdldEltcGxlbWVudGF0aW9uIHsKICAvLy8gVGhlIFtGaWxlU3lzdGVtXSB3aGljaCBzaG91bGQgYmUgdXNlZCB0byBhY2Nlc3MgZmlsZXMuCiAgZmluYWwgRmlsZVN5c3RlbSBmaWxlU3lzdGVtOwoKICAvLy8gV2hldGhlciBjb21tZW50cyBzaG91bGQgYmUgc2Nhbm5lZCBhbmQgcGFyc2VkLgogIGZpbmFsIGJvb2wgaW5jbHVkZUNvbW1lbnRzOwoKICBmaW5hbCBEaWxsVGFyZ2V0IGRpbGxUYXJnZXQ7CgogIC8vLyBUaGUgW01ldGFkYXRhQ29sbGVjdG9yXSB0byB3cml0ZSBtZXRhZGF0YSB0by4KICBmaW5hbCBNZXRhZGF0YUNvbGxlY3RvciBtZXRhZGF0YUNvbGxlY3RvcjsKCiAgU291cmNlTG9hZGVyIGxvYWRlcjsKCiAgQ29tcG9uZW50IGNvbXBvbmVudDsKCiAgZmluYWwgVHlwZUJ1aWxkZXIgZHluYW1pY1R5cGUgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcigiZHluYW1pYyIsIG51bGwpOwoKICBmaW5hbCBOYW1lZFR5cGVCdWlsZGVyIG9iamVjdFR5cGUgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcigiT2JqZWN0IiwgbnVsbCk7CgogIGZpbmFsIFR5cGVCdWlsZGVyIGJvdHRvbVR5cGUgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcigiTnVsbCIsIG51bGwpOwoKICBib29sIGdldCBsZWdhY3lNb2RlID0+IGJhY2tlbmRUYXJnZXQubGVnYWN5TW9kZTsKCiAgZmluYWwgYm9vbCBleGNsdWRlU291cmNlID0gIUNvbXBpbGVyQ29udGV4dC5jdXJyZW50Lm9wdGlvbnMuZW1iZWRTb3VyY2VUZXh0OwoKICBmaW5hbCBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50RGVmaW5lcyA9CiAgICAgIENvbXBpbGVyQ29udGV4dC5jdXJyZW50Lm9wdGlvbnMuZW52aXJvbm1lbnREZWZpbmVzOwoKICBmaW5hbCBib29sIGVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50ID0KICAgICAgQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9ucy5lcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudDsKCiAgZmluYWwgTGlzdDxPYmplY3Q+IGNsb25lZEZvcm1hbHMgPSA8T2JqZWN0PltdOwoKICBLZXJuZWxUYXJnZXQodGhpcy5maWxlU3lzdGVtLCB0aGlzLmluY2x1ZGVDb21tZW50cywgRGlsbFRhcmdldCBkaWxsVGFyZ2V0LAogICAgICBVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3IsCiAgICAgIHtNZXRhZGF0YUNvbGxlY3RvciBtZXRhZGF0YUNvbGxlY3Rvcn0pCiAgICAgIDogZGlsbFRhcmdldCA9IGRpbGxUYXJnZXQsCiAgICAgICAgbWV0YWRhdGFDb2xsZWN0b3IgPSBtZXRhZGF0YUNvbGxlY3RvciwKICAgICAgICBzdXBlcihkaWxsVGFyZ2V0LnRpY2tlciwgdXJpVHJhbnNsYXRvciwgZGlsbFRhcmdldC5iYWNrZW5kVGFyZ2V0KSB7CiAgICBsb2FkZXIgPSBjcmVhdGVMb2FkZXIoKTsKICB9CgogIFNvdXJjZUxvYWRlciBjcmVhdGVMb2FkZXIoKSA9PgogICAgICBuZXcgU291cmNlTG9hZGVyKGZpbGVTeXN0ZW0sIGluY2x1ZGVDb21tZW50cywgdGhpcyk7CgogIHZvaWQgYWRkU291cmNlSW5mb3JtYXRpb24oCiAgICAgIFVyaSBpbXBvcnRVcmksIFVyaSBmaWxlVXJpLCBMaXN0PGludD4gbGluZVN0YXJ0cywgTGlzdDxpbnQ+IHNvdXJjZUNvZGUpIHsKICAgIHVyaVRvU291cmNlW2ZpbGVVcmldID0KICAgICAgICBuZXcgU291cmNlKGxpbmVTdGFydHMsIHNvdXJjZUNvZGUsIGltcG9ydFVyaSwgZmlsZVVyaSk7CiAgfQoKICAvLy8gUmV0dXJuIGxpc3Qgb2Ygc2FtZSBzaXplIGFzIGlucHV0IHdpdGggcG9zc2libHkgdHJhbnNsYXRlZCB1cmlzLgogIExpc3Q8VXJpPiBzZXRFbnRyeVBvaW50cyhMaXN0PFVyaT4gZW50cnlQb2ludHMpIHsKICAgIE1hcDxTdHJpbmcsIFVyaT4gcGFja2FnZXNNYXA7CiAgICBMaXN0PFVyaT4gcmVzdWx0ID0gbmV3IExpc3Q8VXJpPigpOwogICAgZm9yIChVcmkgZW50cnlQb2ludCBpbiBlbnRyeVBvaW50cykgewogICAgICBTdHJpbmcgc2NoZW1lID0gZW50cnlQb2ludC5zY2hlbWU7CiAgICAgIFVyaSBmaWxlVXJpOwogICAgICBzd2l0Y2ggKHNjaGVtZSkgewogICAgICAgIGNhc2UgInBhY2thZ2UiOgogICAgICAgIGNhc2UgImRhcnQiOgogICAgICAgIGNhc2UgImRhdGEiOgogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIC8vIEF0dGVtcHQgdG8gcmV2ZXJzZS1sb29rdXAgW2VudHJ5UG9pbnRdIGluIHBhY2thZ2UgY29uZmlnLgogICAgICAgICAgU3RyaW5nIGFzU3RyaW5nID0gIiRlbnRyeVBvaW50IjsKICAgICAgICAgIHBhY2thZ2VzTWFwID8/PSB1cmlUcmFuc2xhdG9yLnBhY2thZ2VzLmFzTWFwKCk7CiAgICAgICAgICBmb3IgKFN0cmluZyBwYWNrYWdlTmFtZSBpbiBwYWNrYWdlc01hcC5rZXlzKSB7CiAgICAgICAgICAgIFN0cmluZyBwcmVmaXggPSAiJHtwYWNrYWdlc01hcFtwYWNrYWdlTmFtZV19IjsKICAgICAgICAgICAgaWYgKGFzU3RyaW5nLnN0YXJ0c1dpdGgocHJlZml4KSkgewogICAgICAgICAgICAgIFVyaSByZXZlcnNlZCA9IFVyaS5wYXJzZSgKICAgICAgICAgICAgICAgICAgInBhY2thZ2U6JHBhY2thZ2VOYW1lLyR7YXNTdHJpbmcuc3Vic3RyaW5nKHByZWZpeC5sZW5ndGgpfSIpOwogICAgICAgICAgICAgIGlmIChlbnRyeVBvaW50ID09IHVyaVRyYW5zbGF0b3IudHJhbnNsYXRlKHJldmVyc2VkKSkgewogICAgICAgICAgICAgICAgbG9hZGVyLmFkZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVJbmZlcnJlZFBhY2thZ2VVcmkud2l0aEFyZ3VtZW50cyhyZXZlcnNlZCksCiAgICAgICAgICAgICAgICAgICAgLTEsCiAgICAgICAgICAgICAgICAgICAgMSwKICAgICAgICAgICAgICAgICAgICBlbnRyeVBvaW50KTsKICAgICAgICAgICAgICAgIGZpbGVVcmkgPSBlbnRyeVBvaW50OwogICAgICAgICAgICAgICAgZW50cnlQb2ludCA9IHJldmVyc2VkOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgIH0KICAgICAgcmVzdWx0LmFkZChlbnRyeVBvaW50KTsKICAgICAgbG9hZGVyLnJlYWQoZW50cnlQb2ludCwgLTEsIGFjY2Vzc29yOiBsb2FkZXIuZmlyc3QsIGZpbGVVcmk6IGZpbGVVcmkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIExpYnJhcnlCdWlsZGVyIGNyZWF0ZUxpYnJhcnlCdWlsZGVyKAogICAgICBVcmkgdXJpLCBVcmkgZmlsZVVyaSwgU291cmNlTGlicmFyeUJ1aWxkZXIgb3JpZ2luKSB7CiAgICBpZiAoZGlsbFRhcmdldC5pc0xvYWRlZCkgewogICAgICB2YXIgYnVpbGRlciA9IGRpbGxUYXJnZXQubG9hZGVyLmJ1aWxkZXJzW3VyaV07CiAgICAgIGlmIChidWlsZGVyICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gYnVpbGRlcjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBTb3VyY2VMaWJyYXJ5QnVpbGRlcih1cmksIGZpbGVVcmksIGxvYWRlciwgb3JpZ2luKTsKICB9CgogIC8vLyBSZXR1cm5zIGNsYXNzZXMgZGVmaW5lZCBpbiBsaWJyYXJpZXMgaW4gW2xvYWRlcl0uCiAgTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IGNvbGxlY3RNeUNsYXNzZXMoKSB7CiAgICBMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gcmVzdWx0ID0gPFNvdXJjZUNsYXNzQnVpbGRlcj5bXTsKICAgIGxvYWRlci5idWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSBsb2FkZXIpIHsKICAgICAgICBJdGVyYXRvcjxEZWNsYXJhdGlvbj4gaXRlcmF0b3IgPSBsaWJyYXJ5Lml0ZXJhdG9yOwogICAgICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgICBEZWNsYXJhdGlvbiBtZW1iZXIgPSBpdGVyYXRvci5jdXJyZW50OwogICAgICAgICAgaWYgKG1lbWJlciBpcyBTb3VyY2VDbGFzc0J1aWxkZXIgJiYgIW1lbWJlci5pc1BhdGNoKSB7CiAgICAgICAgICAgIHJlc3VsdC5hZGQobWVtYmVyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgYnJlYWtDeWNsZShDbGFzc0J1aWxkZXIgYnVpbGRlcikgewogICAgQ2xhc3MgY2xzID0gYnVpbGRlci50YXJnZXQ7CiAgICBjbHMuaW1wbGVtZW50ZWRUeXBlcy5jbGVhcigpOwogICAgY2xzLnN1cGVydHlwZSA9IG51bGw7CiAgICBjbHMubWl4ZWRJblR5cGUgPSBudWxsOwogICAgYnVpbGRlci5zdXBlcnR5cGUgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcigiT2JqZWN0IiwgbnVsbCkKICAgICAgLi5iaW5kKG9iamVjdENsYXNzQnVpbGRlcik7CiAgICBidWlsZGVyLmludGVyZmFjZXMgPSBudWxsOwogICAgYnVpbGRlci5taXhlZEluVHlwZSA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8Q29tcG9uZW50PiBidWlsZE91dGxpbmVzKHtDYW5vbmljYWxOYW1lIG5hbWVSb290fSkgYXN5bmMgewogICAgaWYgKGxvYWRlci5maXJzdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiB3aXRoQ3Jhc2hSZXBvcnRpbmc8Q29tcG9uZW50PigoKSBhc3luYyB7CiAgICAgIGxvYWRlci5jcmVhdGVUeXBlSW5mZXJlbmNlRW5naW5lKCk7CiAgICAgIGF3YWl0IGxvYWRlci5idWlsZE91dGxpbmVzKCk7CiAgICAgIGxvYWRlci5jb3JlTGlicmFyeS5iZWNvbWVDb3JlTGlicmFyeSgpOwogICAgICBkeW5hbWljVHlwZS5iaW5kKGxvYWRlci5jb3JlTGlicmFyeS5nZXRMb2NhbE1lbWJlcigiZHluYW1pYyIpKTsKICAgICAgbG9hZGVyLnJlc29sdmVQYXJ0cygpOwogICAgICBsb2FkZXIuY29tcHV0ZUxpYnJhcnlTY29wZXMoKTsKICAgICAgb2JqZWN0VHlwZS5iaW5kKGxvYWRlci5jb3JlTGlicmFyeS5nZXRMb2NhbE1lbWJlcigiT2JqZWN0IikpOwogICAgICBib3R0b21UeXBlLmJpbmQobG9hZGVyLmNvcmVMaWJyYXJ5LmdldExvY2FsTWVtYmVyKCJOdWxsIikpOwogICAgICBsb2FkZXIucmVzb2x2ZVR5cGVzKCk7CiAgICAgIGxvYWRlci5jb21wdXRlRGVmYXVsdFR5cGVzKGR5bmFtaWNUeXBlLCBib3R0b21UeXBlLCBvYmplY3RDbGFzc0J1aWxkZXIpOwogICAgICBMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gbXlDbGFzc2VzID0KICAgICAgICAgIGxvYWRlci5jaGVja1NlbWFudGljcyhvYmplY3RDbGFzc0J1aWxkZXIpOwogICAgICBsb2FkZXIuZmluaXNoVHlwZVZhcmlhYmxlcyhvYmplY3RDbGFzc0J1aWxkZXIsIGR5bmFtaWNUeXBlKTsKICAgICAgbG9hZGVyLmJ1aWxkQ29tcG9uZW50KCk7CiAgICAgIGxvYWRlci5maW5hbGl6ZUluaXRpYWxpemluZ0Zvcm1hbHMoKTsKICAgICAgaW5zdGFsbERlZmF1bHRTdXBlcnR5cGVzKCk7CiAgICAgIGluc3RhbGxTeW50aGV0aWNDb25zdHJ1Y3RvcnMobXlDbGFzc2VzKTsKICAgICAgbG9hZGVyLnJlc29sdmVDb25zdHJ1Y3RvcnMoKTsKICAgICAgY29tcG9uZW50ID0KICAgICAgICAgIGxpbmsobmV3IExpc3Q8TGlicmFyeT4uZnJvbShsb2FkZXIubGlicmFyaWVzKSwgbmFtZVJvb3Q6IG5hbWVSb290KTsKICAgICAgY29tcHV0ZUNvcmVUeXBlcygpOwogICAgICBsb2FkZXIuYnVpbGRDbGFzc0hpZXJhcmNoeShteUNsYXNzZXMsIG9iamVjdENsYXNzQnVpbGRlcik7CiAgICAgIGxvYWRlci5jb21wdXRlSGllcmFyY2h5KCk7CiAgICAgIGxvYWRlci5wZXJmb3JtVG9wTGV2ZWxJbmZlcmVuY2UobXlDbGFzc2VzKTsKICAgICAgbG9hZGVyLmNoZWNrU3VwZXJ0eXBlcyhteUNsYXNzZXMpOwogICAgICBsb2FkZXIuY2hlY2tCb3VuZHMoKTsKICAgICAgbG9hZGVyLmNoZWNrT3ZlcnJpZGVzKG15Q2xhc3Nlcyk7CiAgICAgIGxvYWRlci5jaGVja0Fic3RyYWN0TWVtYmVycyhteUNsYXNzZXMpOwogICAgICBsb2FkZXIuY2hlY2tSZWRpcmVjdGluZ0ZhY3RvcmllcyhteUNsYXNzZXMpOwogICAgICBsb2FkZXIuYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVycyhteUNsYXNzZXMpOwogICAgICBsb2FkZXIuY2hlY2tNaXhpbnMobXlDbGFzc2VzKTsKICAgICAgbG9hZGVyLmJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKCk7CiAgICAgIGluc3RhbGxBbGxDb21wb25lbnRQcm9ibGVtcyhsb2FkZXIuYWxsQ29tcG9uZW50UHJvYmxlbXMpOwogICAgICBsb2FkZXIuYWxsQ29tcG9uZW50UHJvYmxlbXMuY2xlYXIoKTsKICAgICAgcmV0dXJuIGNvbXBvbmVudDsKICAgIH0sICgpID0+IGxvYWRlcj8uY3VycmVudFVyaUZvckNyYXNoUmVwb3J0aW5nKTsKICB9CgogIC8vLyBCdWlsZCB0aGUga2VybmVsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21wb25lbnQgbG9hZGVkIGJ5IHRoaXMKICAvLy8gdGFyZ2V0LiBUaGUgY29tcG9uZW50IHdpbGwgY29udGFpbiBmdWxsIGJvZGllcyBmb3IgdGhlIGNvZGUgbG9hZGVkIGZyb20KICAvLy8gc291cmNlcywgYW5kIG9ubHkgcmVmZXJlbmNlcyB0byB0aGUgY29kZSBsb2FkZWQgYnkgdGhlIFtEaWxsVGFyZ2V0XSwKICAvLy8gd2hpY2ggbWF5IG9yIG1heSBub3QgaW5jbHVkZSBtZXRob2QgYm9kaWVzIChkZXBlbmRpbmcgb24gd2hhdCB3YXMgbG9hZGVkCiAgLy8vIGludG8gdGhhdCB0YXJnZXQsIGFuIG91dGxpbmUgb3IgYSBmdWxsIGtlcm5lbCBjb21wb25lbnQpLgogIC8vLwogIC8vLyBJZiBbdmVyaWZ5XSwgcnVuIHRoZSBkZWZhdWx0IGtlcm5lbCB2ZXJpZmljYXRpb24gb24gdGhlIHJlc3VsdGluZwogIC8vLyBjb21wb25lbnQuCiAgQG92ZXJyaWRlCiAgRnV0dXJlPENvbXBvbmVudD4gYnVpbGRDb21wb25lbnQoe2Jvb2wgdmVyaWZ5OiBmYWxzZX0pIGFzeW5jIHsKICAgIGlmIChsb2FkZXIuZmlyc3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gd2l0aENyYXNoUmVwb3J0aW5nPENvbXBvbmVudD4oKCkgYXN5bmMgewogICAgICB0aWNrZXIubG9nTXMoIkJ1aWxkaW5nIGNvbXBvbmVudCIpOwogICAgICBhd2FpdCBsb2FkZXIuYnVpbGRCb2RpZXMoKTsKICAgICAgZmluaXNoQ2xvbmVkUGFyYW1ldGVycygpOwogICAgICBsb2FkZXIuZmluaXNoRGVmZXJyZWRMb2FkVGVhcm9mZnMoKTsKICAgICAgbG9hZGVyLmZpbmlzaE5vU3VjaE1ldGhvZEZvcndhcmRlcnMoKTsKICAgICAgTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IG15Q2xhc3NlcyA9IGNvbGxlY3RNeUNsYXNzZXMoKTsKICAgICAgbG9hZGVyLmZpbmlzaE5hdGl2ZU1ldGhvZHMoKTsKICAgICAgbG9hZGVyLmZpbmlzaFBhdGNoTWV0aG9kcygpOwogICAgICBmaW5pc2hBbGxDb25zdHJ1Y3RvcnMobXlDbGFzc2VzKTsKICAgICAgcnVuQnVpbGRUcmFuc2Zvcm1hdGlvbnMoKTsKCiAgICAgIGlmICh2ZXJpZnkpIHRoaXMudmVyaWZ5KCk7CiAgICAgIGluc3RhbGxBbGxDb21wb25lbnRQcm9ibGVtcyhsb2FkZXIuYWxsQ29tcG9uZW50UHJvYmxlbXMpOwogICAgICByZXR1cm4gY29tcG9uZW50OwogICAgfSwgKCkgPT4gbG9hZGVyPy5jdXJyZW50VXJpRm9yQ3Jhc2hSZXBvcnRpbmcpOwogIH0KCiAgdm9pZCBpbnN0YWxsQWxsQ29tcG9uZW50UHJvYmxlbXMoCiAgICAgIExpc3Q8Rm9ybWF0dGVkTWVzc2FnZT4gYWxsQ29tcG9uZW50UHJvYmxlbXMpIHsKICAgIGlmIChhbGxDb21wb25lbnRQcm9ibGVtcy5pc05vdEVtcHR5KSB7CiAgICAgIGNvbXBvbmVudC5wcm9ibGVtc0FzSnNvbiA/Pz0gPFN0cmluZz5bXTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxsQ29tcG9uZW50UHJvYmxlbXMubGVuZ3RoOyBpKyspIHsKICAgICAgRm9ybWF0dGVkTWVzc2FnZSBmb3JtYXR0ZWRNZXNzYWdlID0gYWxsQ29tcG9uZW50UHJvYmxlbXNbaV07CiAgICAgIGNvbXBvbmVudC5wcm9ibGVtc0FzSnNvbi5hZGQoZm9ybWF0dGVkTWVzc2FnZS50b0pzb25TdHJpbmcoKSk7CiAgICB9CiAgfQoKICAvLy8gQ3JlYXRlcyBhIGNvbXBvbmVudCBieSBjb21iaW5pbmcgW2xpYnJhcmllc10gd2l0aCB0aGUgbGlicmFyaWVzIG9mCiAgLy8vIGBkaWxsVGFyZ2V0LmxvYWRlci5jb21wb25lbnRgLgogIENvbXBvbmVudCBsaW5rKExpc3Q8TGlicmFyeT4gbGlicmFyaWVzLCB7Q2Fub25pY2FsTmFtZSBuYW1lUm9vdH0pIHsKICAgIGxpYnJhcmllcy5hZGRBbGwoZGlsbFRhcmdldC5sb2FkZXIubGlicmFyaWVzKTsKCiAgICBNYXA8VXJpLCBTb3VyY2U+IHVyaVRvU291cmNlID0gbmV3IE1hcDxVcmksIFNvdXJjZT4oKTsKICAgIHZvaWQgY29weVNvdXJjZShVcmkgdXJpLCBTb3VyY2Ugc291cmNlKSB7CiAgICAgIHVyaVRvU291cmNlW3VyaV0gPSBleGNsdWRlU291cmNlCiAgICAgICAgICA/IG5ldyBTb3VyY2Uoc291cmNlLmxpbmVTdGFydHMsIGNvbnN0IDxpbnQ+W10sIHNvdXJjZS5pbXBvcnRVcmksCiAgICAgICAgICAgICAgc291cmNlLmZpbGVVcmkpCiAgICAgICAgICA6IHNvdXJjZTsKICAgIH0KCiAgICB0aGlzLnVyaVRvU291cmNlLmZvckVhY2goY29weVNvdXJjZSk7CgogICAgQ29tcG9uZW50IGNvbXBvbmVudCA9IGJhY2tlbmRUYXJnZXQuY29uZmlndXJlQ29tcG9uZW50KG5ldyBDb21wb25lbnQoCiAgICAgICAgbmFtZVJvb3Q6IG5hbWVSb290LCBsaWJyYXJpZXM6IGxpYnJhcmllcywgdXJpVG9Tb3VyY2U6IHVyaVRvU291cmNlKSk7CiAgICBpZiAobG9hZGVyLmZpcnN0ICE9IG51bGwpIHsKICAgICAgLy8gVE9ETyhzaWdtdW5kKTogZG8gb25seSBmb3IgZnVsbCBwcm9ncmFtCiAgICAgIERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0KICAgICAgICAgIGxvYWRlci5maXJzdC5leHBvcnRTY29wZS5sb29rdXAoIm1haW4iLCAtMSwgbnVsbCk7CiAgICAgIGlmIChkZWNsYXJhdGlvbiBpcyBBbWJpZ3VvdXNCdWlsZGVyKSB7CiAgICAgICAgQW1iaWd1b3VzQnVpbGRlciBwcm9ibGVtID0gZGVjbGFyYXRpb247CiAgICAgICAgZGVjbGFyYXRpb24gPSBwcm9ibGVtLmdldEZpcnN0RGVjbGFyYXRpb24oKTsKICAgICAgfQogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgUHJvY2VkdXJlQnVpbGRlcikgewogICAgICAgIGNvbXBvbmVudC5tYWluTWV0aG9kID0gZGVjbGFyYXRpb24ucHJvY2VkdXJlOwogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIERpbGxNZW1iZXJCdWlsZGVyKSB7CiAgICAgICAgaWYgKGRlY2xhcmF0aW9uLm1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgICAgIGNvbXBvbmVudC5tYWluTWV0aG9kID0gZGVjbGFyYXRpb24ubWVtYmVyOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmIChtZXRhZGF0YUNvbGxlY3RvciAhPSBudWxsKSB7CiAgICAgIGNvbXBvbmVudC5hZGRNZXRhZGF0YVJlcG9zaXRvcnkobWV0YWRhdGFDb2xsZWN0b3IucmVwb3NpdG9yeSk7CiAgICB9CgogICAgdGlja2VyLmxvZ01zKCJMaW5rZWQgY29tcG9uZW50Iik7CiAgICByZXR1cm4gY29tcG9uZW50OwogIH0KCiAgdm9pZCBpbnN0YWxsRGVmYXVsdFN1cGVydHlwZXMoKSB7CiAgICBDbGFzcyBvYmplY3RDbGFzcyA9IHRoaXMub2JqZWN0Q2xhc3M7CiAgICBsb2FkZXIuYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gbG9hZGVyKSB7CiAgICAgICAgSXRlcmF0b3I8RGVjbGFyYXRpb24+IGl0ZXJhdG9yID0gbGlicmFyeS5pdGVyYXRvcjsKICAgICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgICAgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSBpdGVyYXRvci5jdXJyZW50OwogICAgICAgICAgaWYgKGRlY2xhcmF0aW9uIGlzIFNvdXJjZUNsYXNzQnVpbGRlcikgewogICAgICAgICAgICBDbGFzcyBjbHMgPSBkZWNsYXJhdGlvbi50YXJnZXQ7CiAgICAgICAgICAgIGlmIChjbHMgIT0gb2JqZWN0Q2xhc3MpIHsKICAgICAgICAgICAgICBjbHMuc3VwZXJ0eXBlID8/PSBvYmplY3RDbGFzcy5hc1Jhd1N1cGVydHlwZTsKICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5zdXBlcnR5cGUgPz89IG5ldyBOYW1lZFR5cGVCdWlsZGVyKCJPYmplY3QiLCBudWxsKQogICAgICAgICAgICAgICAgLi5iaW5kKG9iamVjdENsYXNzQnVpbGRlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLmlzTWl4aW5BcHBsaWNhdGlvbikgewogICAgICAgICAgICAgIGNscy5taXhlZEluVHlwZSA9IGRlY2xhcmF0aW9uLm1peGVkSW5UeXBlLmJ1aWxkTWl4ZWRJblR5cGUoCiAgICAgICAgICAgICAgICAgIGxpYnJhcnksIGRlY2xhcmF0aW9uLmNoYXJPZmZzZXQsIGRlY2xhcmF0aW9uLmZpbGVVcmkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIHRpY2tlci5sb2dNcygiSW5zdGFsbGVkIE9iamVjdCBhcyBpbXBsaWNpdCBzdXBlcmNsYXNzIik7CiAgfQoKICB2b2lkIGluc3RhbGxTeW50aGV0aWNDb25zdHJ1Y3RvcnMoTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IGJ1aWxkZXJzKSB7CiAgICBDbGFzcyBvYmplY3RDbGFzcyA9IHRoaXMub2JqZWN0Q2xhc3M7CiAgICBmb3IgKFNvdXJjZUNsYXNzQnVpbGRlciBidWlsZGVyIGluIGJ1aWxkZXJzKSB7CiAgICAgIGlmIChidWlsZGVyLnRhcmdldCAhPSBvYmplY3RDbGFzcyAmJiAhYnVpbGRlci5pc1BhdGNoKSB7CiAgICAgICAgaWYgKGJ1aWxkZXIuaXNQYXRjaCB8fAogICAgICAgICAgICBidWlsZGVyLmlzTWl4aW5EZWNsYXJhdGlvbiB8fAogICAgICAgICAgICBidWlsZGVyLmlzRXh0ZW5zaW9uKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGJ1aWxkZXIuaXNNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgICAgICBpbnN0YWxsRm9yd2FyZGluZ0NvbnN0cnVjdG9ycyhidWlsZGVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW5zdGFsbERlZmF1bHRDb25zdHJ1Y3RvcihidWlsZGVyKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHRpY2tlci5sb2dNcygiSW5zdGFsbGVkIHN5bnRoZXRpYyBjb25zdHJ1Y3RvcnMiKTsKICB9CgogIENsYXNzQnVpbGRlciBnZXQgb2JqZWN0Q2xhc3NCdWlsZGVyID0+IG9iamVjdFR5cGUuZGVjbGFyYXRpb247CgogIENsYXNzIGdldCBvYmplY3RDbGFzcyA9PiBvYmplY3RDbGFzc0J1aWxkZXIuY2xzOwoKICAvLy8gSWYgW2J1aWxkZXJdIGRvZXNuJ3QgaGF2ZSBhIGNvbnN0cnVjdG9ycywgaW5zdGFsbCB0aGUgZGVmYXVsdHMuCiAgdm9pZCBpbnN0YWxsRGVmYXVsdENvbnN0cnVjdG9yKFNvdXJjZUNsYXNzQnVpbGRlciBidWlsZGVyKSB7CiAgICBhc3NlcnQoIWJ1aWxkZXIuaXNNaXhpbkFwcGxpY2F0aW9uKTsKICAgIGFzc2VydCghYnVpbGRlci5pc0V4dGVuc2lvbik7CiAgICAvLyBUT0RPKGFza2VzYyk6IE1ha2UgdGhpcyBjaGVjayBsaWdodC13ZWlnaHQgaW4gdGhlIGFic2VuY2Ugb2YgcGF0Y2hlcy4KICAgIGlmIChidWlsZGVyLnRhcmdldC5jb25zdHJ1Y3RvcnMuaXNOb3RFbXB0eSkgcmV0dXJuOwogICAgaWYgKGJ1aWxkZXIudGFyZ2V0LnJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9ycy5pc05vdEVtcHR5KSByZXR1cm47CiAgICBmb3IgKFByb2NlZHVyZSBwcm9jIGluIGJ1aWxkZXIudGFyZ2V0LnByb2NlZHVyZXMpIHsKICAgICAgaWYgKHByb2MuaXNGYWN0b3J5KSByZXR1cm47CiAgICB9CgogICAgLy8vIEZyb20gW0RhcnQgUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbiwgNHRoIEVkaXRpb25dKAogICAgLy8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9wdWJsaWNhdGlvbnMvZmlsZXMvRUNNQS1TVC9FQ01BLTQwOC5wZGYpOgogICAgLy8vID5JZmYgbm8gY29uc3RydWN0b3IgaXMgc3BlY2lmaWVkIGZvciBhIGNsYXNzIEMsIGl0IGltcGxpY2l0bHkgaGFzIGEKICAgIC8vLyA+ZGVmYXVsdCBjb25zdHJ1Y3RvciBDKCkgOiBzdXBlcigpIHt9LCB1bmxlc3MgQyBpcyBjbGFzcyBPYmplY3QuCiAgICAvLyBUaGUgc3VwZXJpbml0aWFsaXplciBpcyBpbnN0YWxsZWQgYmVsb3cgaW4gW2ZpbmlzaENvbnN0cnVjdG9yc10uCiAgICBidWlsZGVyLmFkZFN5bnRoZXRpY0NvbnN0cnVjdG9yKG1ha2VEZWZhdWx0Q29uc3RydWN0b3IoYnVpbGRlci50YXJnZXQpKTsKICB9CgogIHZvaWQgaW5zdGFsbEZvcndhcmRpbmdDb25zdHJ1Y3RvcnMoU291cmNlQ2xhc3NCdWlsZGVyIGJ1aWxkZXIpIHsKICAgIGFzc2VydChidWlsZGVyLmlzTWl4aW5BcHBsaWNhdGlvbik7CiAgICBpZiAoYnVpbGRlci5saWJyYXJ5LmxvYWRlciAhPSBsb2FkZXIpIHJldHVybjsKICAgIGlmIChidWlsZGVyLnRhcmdldC5jb25zdHJ1Y3RvcnMuaXNOb3RFbXB0eSkgewogICAgICAvLyBUaGVzZSB3ZXJlIGluc3RhbGxlZCBieSBhIHN1YmNsYXNzIGluIHRoZSByZWN1cnNpdmUgY2FsbCBiZWxvdy4KICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vLyBGcm9tIFtEYXJ0IFByb2dyYW1taW5nIExhbmd1YWdlIFNwZWNpZmljYXRpb24sIDR0aCBFZGl0aW9uXSgKICAgIC8vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvcHVibGljYXRpb25zL2ZpbGVzL0VDTUEtU1QvRUNNQS00MDgucGRmKToKICAgIC8vLyA+QSBtaXhpbiBhcHBsaWNhdGlvbiBvZiB0aGUgZm9ybSBTIHdpdGggTTsgZGVmaW5lcyBhIGNsYXNzIEMgd2l0aAogICAgLy8vID5zdXBlcmNsYXNzIFMuCiAgICAvLy8gPi4uLgoKICAgIC8vLyA+TGV0IExNIGJlIHRoZSBsaWJyYXJ5IGluIHdoaWNoIE0gaXMgZGVjbGFyZWQuIEZvciBlYWNoIGdlbmVyYXRpdmUKICAgIC8vLyA+Y29uc3RydWN0b3IgbmFtZWQgcWkoVGkxIGFpMSwgLiAuIC4gLCBUaWtpIGFpa2kpLCBpIGluIDEuLm4gb2YgUwogICAgLy8vID50aGF0IGlzIGFjY2Vzc2libGUgdG8gTE0gLCBDIGhhcyBhbiBpbXBsaWNpdGx5IGRlY2xhcmVkIGNvbnN0cnVjdG9yCiAgICAvLy8gPm5hbWVkIHEnaSA9IFtDL1NdcWkgb2YgdGhlIGZvcm0gcSdpKGFpMSwuLi4sYWlraSkgOgogICAgLy8vID5zdXBlcihhaTEsLi4uLGFpa2kpOy4KICAgIFR5cGVCdWlsZGVyIHR5cGUgPSBidWlsZGVyLnN1cGVydHlwZTsKICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgc3VwZXJ0eXBlOwogICAgaWYgKHR5cGUgaXMgTmFtZWRUeXBlQnVpbGRlcikgewogICAgICBzdXBlcnR5cGUgPSB0eXBlLmRlY2xhcmF0aW9uOwogICAgfSBlbHNlIHsKICAgICAgdW5oYW5kbGVkKCIke3R5cGUucnVudGltZVR5cGV9IiwgImluc3RhbGxGb3J3YXJkaW5nQ29uc3RydWN0b3JzIiwKICAgICAgICAgIGJ1aWxkZXIuY2hhck9mZnNldCwgYnVpbGRlci5maWxlVXJpKTsKICAgIH0KICAgIGlmIChzdXBlcnR5cGUuaXNNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgIGluc3RhbGxGb3J3YXJkaW5nQ29uc3RydWN0b3JzKHN1cGVydHlwZSk7CiAgICB9CiAgICBpZiAoc3VwZXJ0eXBlIGlzIENsYXNzQnVpbGRlcikgewogICAgICBpZiAoc3VwZXJ0eXBlLmNscy5jb25zdHJ1Y3RvcnMuaXNFbXB0eSkgewogICAgICAgIGJ1aWxkZXIuYWRkU3ludGhldGljQ29uc3RydWN0b3IobWFrZURlZmF1bHRDb25zdHJ1Y3RvcihidWlsZGVyLnRhcmdldCkpOwogICAgICB9IGVsc2UgewogICAgICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uTWFwID0KICAgICAgICAgICAgYnVpbGRlci5nZXRTdWJzdGl0dXRpb25NYXAoc3VwZXJ0eXBlLnRhcmdldCk7CiAgICAgICAgZm9yIChDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciBpbiBzdXBlcnR5cGUuY2xzLmNvbnN0cnVjdG9ycykgewogICAgICAgICAgYnVpbGRlci5hZGRTeW50aGV0aWNDb25zdHJ1Y3RvcihtYWtlTWl4aW5BcHBsaWNhdGlvbkNvbnN0cnVjdG9yKAogICAgICAgICAgICAgIGJ1aWxkZXIudGFyZ2V0LCBidWlsZGVyLmNscy5taXhpbiwgY29uc3RydWN0b3IsIHN1YnN0aXR1dGlvbk1hcCkpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChzdXBlcnR5cGUgaXMgSW52YWxpZFR5cGVCdWlsZGVyKSB7CiAgICAgIGJ1aWxkZXIuYWRkU3ludGhldGljQ29uc3RydWN0b3IobWFrZURlZmF1bHRDb25zdHJ1Y3RvcihidWlsZGVyLnRhcmdldCkpOwogICAgfSBlbHNlIHsKICAgICAgdW5oYW5kbGVkKCIke3N1cGVydHlwZS5ydW50aW1lVHlwZX0iLCAiaW5zdGFsbEZvcndhcmRpbmdDb25zdHJ1Y3RvcnMiLAogICAgICAgICAgYnVpbGRlci5jaGFyT2Zmc2V0LCBidWlsZGVyLmZpbGVVcmkpOwogICAgfQogIH0KCiAgQ29uc3RydWN0b3IgbWFrZU1peGluQXBwbGljYXRpb25Db25zdHJ1Y3RvcihDbGFzcyBjbHMsIENsYXNzIG1peGluLAogICAgICBDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBzdWJzdGl0dXRpb25NYXApIHsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gY29weUZvcm1hbChWYXJpYWJsZURlY2xhcmF0aW9uIGZvcm1hbCkgewogICAgICAvLyBUT0RPKGFoZSk6IEhhbmRsZSBpbml0aWFsaXplcnMuCiAgICAgIHZhciBjb3B5ID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oZm9ybWFsLm5hbWUsCiAgICAgICAgICBpc0ZpbmFsOiBmb3JtYWwuaXNGaW5hbCwgaXNDb25zdDogZm9ybWFsLmlzQ29uc3QpOwogICAgICBpZiAoZm9ybWFsLnR5cGUgIT0gbnVsbCkgewogICAgICAgIGNvcHkudHlwZSA9IHN1YnN0aXR1dGUoZm9ybWFsLnR5cGUsIHN1YnN0aXR1dGlvbk1hcCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHk7CiAgICB9CgogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBwb3NpdGlvbmFsUGFyYW1ldGVycyA9IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdOwogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBuYW1lZFBhcmFtZXRlcnMgPSA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gcG9zaXRpb25hbCA9IDxFeHByZXNzaW9uPltdOwogICAgTGlzdDxOYW1lZEV4cHJlc3Npb24+IG5hbWVkID0gPE5hbWVkRXhwcmVzc2lvbj5bXTsKICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBmb3JtYWwKICAgICAgICBpbiBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICBwb3NpdGlvbmFsUGFyYW1ldGVycy5hZGQoY29weUZvcm1hbChmb3JtYWwpKTsKICAgICAgcG9zaXRpb25hbC5hZGQobmV3IFZhcmlhYmxlR2V0KHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxhc3QpKTsKICAgIH0KICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBmb3JtYWwgaW4gY29uc3RydWN0b3IuZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gY2xvbmUgPSBjb3B5Rm9ybWFsKGZvcm1hbCk7CiAgICAgIGNsb25lZEZvcm1hbHMuLmFkZChmb3JtYWwpLi5hZGQoY2xvbmUpLi5hZGQoc3Vic3RpdHV0aW9uTWFwKTsKICAgICAgbmFtZWRQYXJhbWV0ZXJzLmFkZChjbG9uZSk7CiAgICAgIG5hbWVkLmFkZChuZXcgTmFtZWRFeHByZXNzaW9uKAogICAgICAgICAgZm9ybWFsLm5hbWUsIG5ldyBWYXJpYWJsZUdldChuYW1lZFBhcmFtZXRlcnMubGFzdCkpKTsKICAgIH0KICAgIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiA9IG5ldyBGdW5jdGlvbk5vZGUobmV3IEVtcHR5U3RhdGVtZW50KCksCiAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnM6IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgIG5hbWVkUGFyYW1ldGVyczogbmFtZWRQYXJhbWV0ZXJzLAogICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IGNvbnN0cnVjdG9yLmZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgcmV0dXJuVHlwZTogbWFrZUNvbnN0cnVjdG9yUmV0dXJuVHlwZShjbHMpKTsKICAgIFN1cGVySW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIgPSBuZXcgU3VwZXJJbml0aWFsaXplcigKICAgICAgICBjb25zdHJ1Y3RvciwgbmV3IEFyZ3VtZW50cyhwb3NpdGlvbmFsLCBuYW1lZDogbmFtZWQpKTsKICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3IoZnVuY3Rpb24sCiAgICAgICAgbmFtZTogY29uc3RydWN0b3IubmFtZSwKICAgICAgICBpbml0aWFsaXplcnM6IDxJbml0aWFsaXplcj5baW5pdGlhbGl6ZXJdLAogICAgICAgIGlzU3ludGhldGljOiB0cnVlLAogICAgICAgIGlzQ29uc3Q6IGNvbnN0cnVjdG9yLmlzQ29uc3QgJiYgbWl4aW4uZmllbGRzLmlzRW1wdHkpOwogIH0KCiAgdm9pZCBmaW5pc2hDbG9uZWRQYXJhbWV0ZXJzKCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbG9uZWRGb3JtYWxzLmxlbmd0aDsgaSArPSAzKSB7CiAgICAgIC8vIE5vdGUgdGhhdCBbb3JpZ2luYWxdIG1heSBpdHNlbGYgYmUgY2xvbmUuIElmIHNvLCBpdCB3YXMgYWRkZWQgdG8KICAgICAgLy8gW2Nsb25lZEZvcm1hbHNdIGJlZm9yZSBbY2xvbmVdLCBzbyBpdCdzIGluaXRpYWxpemVycyBhcmUgYWxyZWFkeSBpbgogICAgICAvLyBwbGFjZS4KICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBvcmlnaW5hbCA9IGNsb25lZEZvcm1hbHNbaV07CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gY2xvbmUgPSBjbG9uZWRGb3JtYWxzW2kgKyAxXTsKICAgICAgaWYgKG9yaWdpbmFsLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICAvLyBUT0RPKGFoZSk6IEl0IGlzIHVuY2xlYXIgaWYgaXQgaXMgbGVnYWwgdG8gdXNlIHR5cGUgdmFyaWFibGVzIGluCiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZXMsIGJ1dCBGYXN0YSBpcyBjdXJyZW50bHkgYWxsb3dpbmcgaXQsIGFuZCB0aGUgVk0KICAgICAgICAvLyBhY2NlcHRzIGl0LiBJZiBpdCBpc24ndCBsZWdhbCwgdGhlIHdlIGNhbiBzcGVlZCB0aGlzIHVwIGJ5IHVzaW5nIGEKICAgICAgICAvLyBzaW5nbGUgY2xvbmVyIHdpdGhvdXQgc3Vic3RpdHV0aW9uLgogICAgICAgIENsb25lVmlzaXRvciBjbG9uZXIgPQogICAgICAgICAgICBuZXcgQ2xvbmVWaXNpdG9yKHR5cGVTdWJzdGl0dXRpb246IGNsb25lZEZvcm1hbHNbaSArIDJdKTsKICAgICAgICBjbG9uZS5pbml0aWFsaXplciA9IGNsb25lci5jbG9uZShvcmlnaW5hbC5pbml0aWFsaXplcikuLnBhcmVudCA9IGNsb25lOwogICAgICB9CiAgICB9CiAgICBjbG9uZWRGb3JtYWxzLmNsZWFyKCk7CiAgICB0aWNrZXIubG9nTXMoIkNsb25lZCBkZWZhdWx0IHZhbHVlcyBvZiBmb3JtYWxzIik7CiAgfQoKICBDb25zdHJ1Y3RvciBtYWtlRGVmYXVsdENvbnN0cnVjdG9yKENsYXNzIGVuY2xvc2luZ0NsYXNzKSB7CiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKAogICAgICAgIG5ldyBGdW5jdGlvbk5vZGUobmV3IEVtcHR5U3RhdGVtZW50KCksCiAgICAgICAgICAgIHJldHVyblR5cGU6IG1ha2VDb25zdHJ1Y3RvclJldHVyblR5cGUoZW5jbG9zaW5nQ2xhc3MpKSwKICAgICAgICBuYW1lOiBuZXcgTmFtZSgiIiksCiAgICAgICAgaXNTeW50aGV0aWM6IHRydWUpOwogIH0KCiAgRGFydFR5cGUgbWFrZUNvbnN0cnVjdG9yUmV0dXJuVHlwZShDbGFzcyBlbmNsb3NpbmdDbGFzcykgewogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZVBhcmFtZXRlclR5cGVzID0gbmV3IExpc3Q8RGFydFR5cGU+KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciA9IGVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzW2ldOwogICAgICB0eXBlUGFyYW1ldGVyVHlwZXMuYWRkKG5ldyBUeXBlUGFyYW1ldGVyVHlwZSh0eXBlUGFyYW1ldGVyKSk7CiAgICB9CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoZW5jbG9zaW5nQ2xhc3MsIHR5cGVQYXJhbWV0ZXJUeXBlcyk7CiAgfQoKICB2b2lkIGNvbXB1dGVDb3JlVHlwZXMoKSB7CiAgICBMaXN0PExpYnJhcnk+IGxpYnJhcmllcyA9IDxMaWJyYXJ5PltdOwogICAgZm9yIChTdHJpbmcgcGxhdGZvcm1MaWJyYXJ5IGluIGNvbnN0IFsKICAgICAgImRhcnQ6X2ludGVybmFsIiwKICAgICAgImRhcnQ6YXN5bmMiLAogICAgICAvLyBUT0RPKGFza2VzYyk6IFdoZW4gYWxsIGJhY2tlbmRzIHN1cHBvcnQgc2V0IGxpdGVyYWxzLCB3ZSBubyBsb25nZXIKICAgICAgLy8gbmVlZCB0byBpbmRleCBkYXJ0OmNvbGxlY3Rpb24sIGFzIGl0IGlzIG9ubHkgbmVlZGVkIGZvciBkZXN1Z2FyaW5nIG9mCiAgICAgIC8vIGNvbnN0IHNldHMuIFdlIGNhbiByZW1vdmUgaXQgZnJvbSB0aGlzIGxpc3QgYXQgdGhhdCB0aW1lLgogICAgICAiZGFydDpjb2xsZWN0aW9uIiwKICAgICAgImRhcnQ6Y29yZSIsCiAgICAgICJkYXJ0Om1pcnJvcnMiCiAgICBdKSB7CiAgICAgIFVyaSB1cmkgPSBVcmkucGFyc2UocGxhdGZvcm1MaWJyYXJ5KTsKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGxvYWRlci5idWlsZGVyc1t1cmldOwogICAgICBpZiAobGlicmFyeSA9PSBudWxsKSB7CiAgICAgICAgLy8gVE9ETyhhaGUpOiBUaGlzIGlzIHdvcmtpbmcgYXJvdW5kIGEgYnVnIGluIGtlcm5lbF9kcml2ZXJfdGVzdCBvcgogICAgICAgIC8vIGtlcm5lbF9kcml2ZXIuCiAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgIGZvciAoTGlicmFyeSB0YXJnZXQgaW4gZGlsbFRhcmdldC5sb2FkZXIubGlicmFyaWVzKSB7CiAgICAgICAgICBpZiAodGFyZ2V0LmltcG9ydFVyaSA9PSB1cmkpIHsKICAgICAgICAgICAgbGlicmFyaWVzLmFkZCh0YXJnZXQpOwogICAgICAgICAgICBmb3VuZCA9IHRydWU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIWZvdW5kICYmIHVyaS5wYXRoICE9ICJtaXJyb3JzIikgewogICAgICAgICAgLy8gZGFydDptaXJyb3JzIGlzIG9wdGlvbmFsLgogICAgICAgICAgdGhyb3cgIkNhbid0IGZpbmQgJHVyaSI7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGxpYnJhcmllcy5hZGQobGlicmFyeS50YXJnZXQpOwogICAgICB9CiAgICB9CiAgICBDb21wb25lbnQgcGxhZm9ybUxpYnJhcmllcyA9CiAgICAgICAgYmFja2VuZFRhcmdldC5jb25maWd1cmVDb21wb25lbnQobmV3IENvbXBvbmVudCgpKTsKICAgIC8vIEFkZCBsaWJyYXJpZXMgZGlyZWN0bHkgdG8gcHJldmVudCB0aGF0IHRoZWlyIHBhcmVudHMgYXJlIGNoYW5nZWQuCiAgICBwbGFmb3JtTGlicmFyaWVzLmxpYnJhcmllcy5hZGRBbGwobGlicmFyaWVzKTsKICAgIGxvYWRlci5jb21wdXRlQ29yZVR5cGVzKHBsYWZvcm1MaWJyYXJpZXMpOwogIH0KCiAgdm9pZCBmaW5pc2hBbGxDb25zdHJ1Y3RvcnMoTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IGJ1aWxkZXJzKSB7CiAgICBDbGFzcyBvYmplY3RDbGFzcyA9IHRoaXMub2JqZWN0Q2xhc3M7CiAgICBmb3IgKFNvdXJjZUNsYXNzQnVpbGRlciBidWlsZGVyIGluIGJ1aWxkZXJzKSB7CiAgICAgIENsYXNzIGNscyA9IGJ1aWxkZXIudGFyZ2V0OwogICAgICBpZiAoY2xzICE9IG9iamVjdENsYXNzKSB7CiAgICAgICAgZmluaXNoQ29uc3RydWN0b3JzKGJ1aWxkZXIpOwogICAgICB9CiAgICB9CiAgICB0aWNrZXIubG9nTXMoIkZpbmlzaGVkIGNvbnN0cnVjdG9ycyIpOwogIH0KCiAgLy8vIEVuc3VyZSBjb25zdHJ1Y3RvcnMgb2YgW2Nsc10gaGF2ZSB0aGUgY29ycmVjdCBpbml0aWFsaXplcnMgYW5kIG90aGVyCiAgLy8vIHJlcXVpcmVtZW50cy4KICB2b2lkIGZpbmlzaENvbnN0cnVjdG9ycyhTb3VyY2VDbGFzc0J1aWxkZXIgYnVpbGRlcikgewogICAgaWYgKGJ1aWxkZXIuaXNQYXRjaCkgcmV0dXJuOwogICAgQ2xhc3MgY2xzID0gYnVpbGRlci50YXJnZXQ7CgogICAgLy8vIFF1b3RlcyBiZWxvdyBhcmUgZnJvbSBbRGFydCBQcm9ncmFtbWluZyBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLCA0dGgKICAgIC8vLyBFZGl0aW9uXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvcHVibGljYXRpb25zL2ZpbGVzL0VDTUEtU1QvRUNNQS00MDgucGRmKToKICAgIExpc3Q8RmllbGQ+IHVuaW5pdGlhbGl6ZWRGaWVsZHMgPSA8RmllbGQ+W107CiAgICBMaXN0PEZpZWxkPiBub25GaW5hbEZpZWxkcyA9IDxGaWVsZD5bXTsKICAgIGZvciAoRmllbGQgZmllbGQgaW4gY2xzLmZpZWxkcykgewogICAgICBpZiAoZmllbGQuaXNJbnN0YW5jZU1lbWJlciAmJiAhZmllbGQuaXNGaW5hbCkgewogICAgICAgIG5vbkZpbmFsRmllbGRzLmFkZChmaWVsZCk7CiAgICAgIH0KICAgICAgaWYgKGZpZWxkLmluaXRpYWxpemVyID09IG51bGwpIHsKICAgICAgICB1bmluaXRpYWxpemVkRmllbGRzLmFkZChmaWVsZCk7CiAgICAgIH0KICAgIH0KICAgIE1hcDxDb25zdHJ1Y3RvciwgU2V0PEZpZWxkPj4gY29uc3RydWN0b3JJbml0aWFsaXplZEZpZWxkcyA9CiAgICAgICAgPENvbnN0cnVjdG9yLCBTZXQ8RmllbGQ+Pnt9OwogICAgQ29uc3RydWN0b3Igc3VwZXJUYXJnZXQ7CiAgICBmb3IgKENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yIGluIGNscy5jb25zdHJ1Y3RvcnMpIHsKICAgICAgYm9vbCBpc1JlZGlyZWN0aW5nID0gZmFsc2U7CiAgICAgIGZvciAoSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIgaW4gY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzKSB7CiAgICAgICAgaWYgKGluaXRpYWxpemVyIGlzIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIpIHsKICAgICAgICAgIGlmIChjb25zdHJ1Y3Rvci5pc0NvbnN0ICYmICFpbml0aWFsaXplci50YXJnZXQuaXNDb25zdCkgewogICAgICAgICAgICBidWlsZGVyLmFkZFByb2JsZW0obWVzc2FnZUNvbnN0Q29uc3RydWN0b3JSZWRpcmVjdGlvblRvTm9uQ29uc3QsCiAgICAgICAgICAgICAgICBpbml0aWFsaXplci5maWxlT2Zmc2V0LCBpbml0aWFsaXplci50YXJnZXQubmFtZS5uYW1lLmxlbmd0aCk7CiAgICAgICAgICB9CiAgICAgICAgICBpc1JlZGlyZWN0aW5nID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIWlzUmVkaXJlY3RpbmcpIHsKICAgICAgICAvLy8gPklmIG5vIHN1cGVyaW5pdGlhbGl6ZXIgaXMgcHJvdmlkZWQsIGFuIGltcGxpY2l0IHN1cGVyaW5pdGlhbGl6ZXIKICAgICAgICAvLy8gPm9mIHRoZSBmb3JtIHN1cGVyKCkgaXMgYWRkZWQgYXQgdGhlIGVuZCBvZiBr4oCZcyBpbml0aWFsaXplciBsaXN0LAogICAgICAgIC8vLyA+dW5sZXNzIHRoZSBlbmNsb3NpbmcgY2xhc3MgaXMgY2xhc3MgT2JqZWN0LgogICAgICAgIGlmIChjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMuaXNFbXB0eSkgewogICAgICAgICAgc3VwZXJUYXJnZXQgPz89IGRlZmF1bHRTdXBlckNvbnN0cnVjdG9yKGNscyk7CiAgICAgICAgICBJbml0aWFsaXplciBpbml0aWFsaXplcjsKICAgICAgICAgIGlmIChzdXBlclRhcmdldCA9PSBudWxsKSB7CiAgICAgICAgICAgIGludCBvZmZzZXQgPSBjb25zdHJ1Y3Rvci5maWxlT2Zmc2V0OwogICAgICAgICAgICBpZiAob2Zmc2V0ID09IC0xICYmIGNvbnN0cnVjdG9yLmlzU3ludGhldGljKSB7CiAgICAgICAgICAgICAgb2Zmc2V0ID0gY2xzLmZpbGVPZmZzZXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnVpbGRlci5hZGRQcm9ibGVtKAogICAgICAgICAgICAgICAgdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9EZWZhdWx0Q29uc3RydWN0b3IKICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhjbHMuc3VwZXJjbGFzcy5uYW1lKSwKICAgICAgICAgICAgICAgIG9mZnNldCwKICAgICAgICAgICAgICAgIG5vTGVuZ3RoKTsKICAgICAgICAgICAgaW5pdGlhbGl6ZXIgPSBuZXcgSW52YWxpZEluaXRpYWxpemVyKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpbml0aWFsaXplciA9CiAgICAgICAgICAgICAgICBuZXcgU3VwZXJJbml0aWFsaXplcihzdXBlclRhcmdldCwgbmV3IEFyZ3VtZW50cy5lbXB0eSgpKQogICAgICAgICAgICAgICAgICAuLmlzU3ludGhldGljID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0cnVjdG9yLmluaXRpYWxpemVycy5hZGQoaW5pdGlhbGl6ZXIpOwogICAgICAgICAgaW5pdGlhbGl6ZXIucGFyZW50ID0gY29uc3RydWN0b3I7CiAgICAgICAgfQogICAgICAgIGlmIChjb25zdHJ1Y3Rvci5mdW5jdGlvbi5ib2R5ID09IG51bGwpIHsKICAgICAgICAgIC8vLyA+SWYgYSBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yIGMgaXMgbm90IGEgcmVkaXJlY3RpbmcgY29uc3RydWN0b3IKICAgICAgICAgIC8vLyA+YW5kIG5vIGJvZHkgaXMgcHJvdmlkZWQsIHRoZW4gYyBpbXBsaWNpdGx5IGhhcyBhbiBlbXB0eSBib2R5IHt9LgogICAgICAgICAgLy8vIFdlIHVzZSBhbiBlbXB0eSBzdGF0ZW1lbnQgaW5zdGVhZC4KICAgICAgICAgIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLmJvZHkgPSBuZXcgRW1wdHlTdGF0ZW1lbnQoKTsKICAgICAgICAgIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLmJvZHkucGFyZW50ID0gY29uc3RydWN0b3IuZnVuY3Rpb247CiAgICAgICAgfQoKICAgICAgICBTZXQ8RmllbGQ+IG15SW5pdGlhbGl6ZWRGaWVsZHMgPSBuZXcgU2V0PEZpZWxkPigpOwogICAgICAgIGZvciAoSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIgaW4gY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzKSB7CiAgICAgICAgICBpZiAoaW5pdGlhbGl6ZXIgaXMgRmllbGRJbml0aWFsaXplcikgewogICAgICAgICAgICBteUluaXRpYWxpemVkRmllbGRzLmFkZChpbml0aWFsaXplci5maWVsZCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBmb3JtYWwKICAgICAgICAgICAgaW4gY29uc3RydWN0b3IuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgICAgIGlmIChmb3JtYWwuaXNGaWVsZEZvcm1hbCkgewogICAgICAgICAgICBEZWNsYXJhdGlvbiBmaWVsZEJ1aWxkZXIgPSBidWlsZGVyLnNjb3BlLmxvY2FsW2Zvcm1hbC5uYW1lXSA/PwogICAgICAgICAgICAgICAgYnVpbGRlci5vcmlnaW4uc2NvcGUubG9jYWxbZm9ybWFsLm5hbWVdOwogICAgICAgICAgICBpZiAoZmllbGRCdWlsZGVyIGlzIEZpZWxkQnVpbGRlcikgewogICAgICAgICAgICAgIG15SW5pdGlhbGl6ZWRGaWVsZHMuYWRkKGZpZWxkQnVpbGRlci5maWVsZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3RydWN0b3JJbml0aWFsaXplZEZpZWxkc1tjb25zdHJ1Y3Rvcl0gPSBteUluaXRpYWxpemVkRmllbGRzOwogICAgICAgIGlmIChjb25zdHJ1Y3Rvci5pc0NvbnN0ICYmIG5vbkZpbmFsRmllbGRzLmlzTm90RW1wdHkpIHsKICAgICAgICAgIGJ1aWxkZXIuYWRkUHJvYmxlbShtZXNzYWdlQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGQsCiAgICAgICAgICAgICAgY29uc3RydWN0b3IuZmlsZU9mZnNldCwgbm9MZW5ndGgsCiAgICAgICAgICAgICAgY29udGV4dDogbm9uRmluYWxGaWVsZHMKICAgICAgICAgICAgICAgICAgLm1hcCgoZmllbGQpID0+IG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yTm9uRmluYWxGaWVsZENhdXNlCiAgICAgICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKGZpZWxkLmZpbGVVcmksIGZpZWxkLmZpbGVPZmZzZXQsIG5vTGVuZ3RoKSkKICAgICAgICAgICAgICAgICAgLnRvTGlzdCgpKTsKICAgICAgICAgIG5vbkZpbmFsRmllbGRzLmNsZWFyKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBTZXQ8RmllbGQ+IGluaXRpYWxpemVkRmllbGRzOwogICAgY29uc3RydWN0b3JJbml0aWFsaXplZEZpZWxkcwogICAgICAgIC5mb3JFYWNoKChDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwgU2V0PEZpZWxkPiBmaWVsZHMpIHsKICAgICAgaWYgKGluaXRpYWxpemVkRmllbGRzID09IG51bGwpIHsKICAgICAgICBpbml0aWFsaXplZEZpZWxkcyA9IG5ldyBTZXQ8RmllbGQ+LmZyb20oZmllbGRzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbml0aWFsaXplZEZpZWxkcy5hZGRBbGwoZmllbGRzKTsKICAgICAgfQogICAgfSk7CgogICAgLy8gUnVuIHRocm91Z2ggYWxsIGZpZWxkcyB0aGF0IGFyZW4ndCBpbml0aWFsaXplZCBieSBhbnkgY29uc3RydWN0b3IsIGFuZAogICAgLy8gc2V0IHRoZWlyIGluaXRpYWxpemVyIHRvIGBudWxsYC4KICAgIGZvciAoRmllbGQgZmllbGQgaW4gdW5pbml0aWFsaXplZEZpZWxkcykgewogICAgICBpZiAoaW5pdGlhbGl6ZWRGaWVsZHMgPT0gbnVsbCB8fCAhaW5pdGlhbGl6ZWRGaWVsZHMuY29udGFpbnMoZmllbGQpKSB7CiAgICAgICAgZmllbGQuaW5pdGlhbGl6ZXIgPSBuZXcgTnVsbExpdGVyYWwoKS4ucGFyZW50ID0gZmllbGQ7CiAgICAgICAgaWYgKGZpZWxkLmlzRmluYWwgJiYKICAgICAgICAgICAgKGNscy5jb25zdHJ1Y3RvcnMuaXNOb3RFbXB0eSB8fCBjbHMuaXNNaXhpbkRlY2xhcmF0aW9uKSkgewogICAgICAgICAgU3RyaW5nIHVyaSA9ICcke2ZpZWxkLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpfSc7CiAgICAgICAgICBTdHJpbmcgZmlsZSA9IGZpZWxkLmZpbGVVcmkucGF0aFNlZ21lbnRzLmxhc3Q7CiAgICAgICAgICBpZiAodXJpID09ICdkYXJ0Omh0bWwnIHx8CiAgICAgICAgICAgICAgdXJpID09ICdkYXJ0OnN2ZycgfHwKICAgICAgICAgICAgICB1cmkgPT0gJ2RhcnQ6X25hdGl2ZV90eXBlZF9kYXRhJyB8fAogICAgICAgICAgICAgIHVyaSA9PSAnZGFydDpfaW50ZXJjZXB0b3JzJyAmJiBmaWxlID09ICdqc19zdHJpbmcuZGFydCcpIHsKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIGV4dGVybmFsIGdldHRlcnMgaW5zdGVhZCBvZiBmaW5hbAogICAgICAgICAgICAvLyBmaWVsZHMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzM3NjIKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJ1aWxkZXIubGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgICAgICAgdGVtcGxhdGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWQud2l0aEFyZ3VtZW50cyhmaWVsZC5uYW1lLm5hbWUpLAogICAgICAgICAgICAgICAgZmllbGQuZmlsZU9mZnNldCwKICAgICAgICAgICAgICAgIGZpZWxkLm5hbWUubmFtZS5sZW5ndGgsCiAgICAgICAgICAgICAgICBmaWVsZC5maWxlVXJpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBSdW4gdGhyb3VnaCBhbGwgZmllbGRzIHRoYXQgYXJlIGluaXRpYWxpemVkIGJ5IHNvbWUgY29uc3RydWN0b3IsIGFuZAogICAgLy8gbWFrZSBzdXJlIHRoYXQgYWxsIG90aGVyIGNvbnN0cnVjdG9ycyBhbHNvIGluaXRpYWxpemUgdGhlbS4KICAgIGNvbnN0cnVjdG9ySW5pdGlhbGl6ZWRGaWVsZHMKICAgICAgICAuZm9yRWFjaCgoQ29uc3RydWN0b3IgY29uc3RydWN0b3IsIFNldDxGaWVsZD4gZmllbGRzKSB7CiAgICAgIGZvciAoRmllbGQgZmllbGQgaW4gaW5pdGlhbGl6ZWRGaWVsZHMuZGlmZmVyZW5jZShmaWVsZHMpKSB7CiAgICAgICAgaWYgKGZpZWxkLmluaXRpYWxpemVyID09IG51bGwpIHsKICAgICAgICAgIEZpZWxkSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIgPQogICAgICAgICAgICAgIG5ldyBGaWVsZEluaXRpYWxpemVyKGZpZWxkLCBuZXcgTnVsbExpdGVyYWwoKSkKICAgICAgICAgICAgICAgIC4uaXNTeW50aGV0aWMgPSB0cnVlOwogICAgICAgICAgaW5pdGlhbGl6ZXIucGFyZW50ID0gY29uc3RydWN0b3I7CiAgICAgICAgICBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMuaW5zZXJ0KDAsIGluaXRpYWxpemVyKTsKICAgICAgICAgIGlmIChmaWVsZC5pc0ZpbmFsKSB7CiAgICAgICAgICAgIGJ1aWxkZXIubGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgICAgICAgdGVtcGxhdGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yCiAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZmllbGQubmFtZS5uYW1lKSwKICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICBjb25zdHJ1Y3Rvci5uYW1lLm5hbWUubGVuZ3RoLAogICAgICAgICAgICAgICAgY29uc3RydWN0b3IuZmlsZVVyaSwKICAgICAgICAgICAgICAgIGNvbnRleHQ6IFsKICAgICAgICAgICAgICAgICAgdGVtcGxhdGVNaXNzaW5nSW1wbGVtZW50YXRpb25DYXVzZQogICAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZmllbGQubmFtZS5uYW1lKQogICAgICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihmaWVsZC5maWxlVXJpLCBmaWVsZC5maWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkLm5hbWUubmFtZS5sZW5ndGgpCiAgICAgICAgICAgICAgICBdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0KCiAgLy8vIFJ1biBhbGwgdHJhbnNmb3JtYXRpb25zIHRoYXQgYXJlIG5lZWRlZCB3aGVuIGJ1aWxkaW5nIGEgYnVuZGxlIG9mCiAgLy8vIGxpYnJhcmllcyBmb3IgdGhlIGZpcnN0IHRpbWUuCiAgdm9pZCBydW5CdWlsZFRyYW5zZm9ybWF0aW9ucygpIHsKICAgIGJhY2tlbmRUYXJnZXQucGVyZm9ybVByZUNvbnN0YW50RXZhbHVhdGlvblRyYW5zZm9ybWF0aW9ucygKICAgICAgICBjb21wb25lbnQsCiAgICAgICAgbG9hZGVyLmNvcmVUeXBlcywKICAgICAgICBsb2FkZXIubGlicmFyaWVzLAogICAgICAgIG5ldyBLZXJuZWxEaWFnbm9zdGljUmVwb3J0ZXIobG9hZGVyKSwKICAgICAgICBsb2dnZXI6IChTdHJpbmcgbXNnKSA9PiB0aWNrZXIubG9nTXMobXNnKSk7CiAgICBpZiAobG9hZGVyLnRhcmdldC5lbmFibGVDb25zdGFudFVwZGF0ZTIwMTgpIHsKICAgICAgVHlwZUVudmlyb25tZW50IGVudmlyb25tZW50ID0KICAgICAgICAgIG5ldyBUeXBlRW52aXJvbm1lbnQobG9hZGVyLmNvcmVUeXBlcywgbG9hZGVyLmhpZXJhcmNoeSk7CiAgICAgIGNvbnN0YW50cy50cmFuc2Zvcm1MaWJyYXJpZXMoCiAgICAgICAgICBsb2FkZXIubGlicmFyaWVzLAogICAgICAgICAgYmFja2VuZFRhcmdldC5jb25zdGFudHNCYWNrZW5kKGxvYWRlci5jb3JlVHlwZXMpLAogICAgICAgICAgZW52aXJvbm1lbnREZWZpbmVzLAogICAgICAgICAgZW52aXJvbm1lbnQsCiAgICAgICAgICBuZXcgS2VybmVsQ29uc3RhbnRFcnJvclJlcG9ydGVyKGxvYWRlciksCiAgICAgICAgICBkZXN1Z2FyU2V0czogIWJhY2tlbmRUYXJnZXQuc3VwcG9ydHNTZXRMaXRlcmFscywKICAgICAgICAgIGVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50OiBlcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudCk7CiAgICAgIHRpY2tlci5sb2dNcygiRXZhbHVhdGVkIGNvbnN0YW50cyIpOwogICAgfQogICAgYmFja2VuZFRhcmdldC5wZXJmb3JtTW9kdWxhclRyYW5zZm9ybWF0aW9uc09uTGlicmFyaWVzKAogICAgICAgIGNvbXBvbmVudCwKICAgICAgICBsb2FkZXIuY29yZVR5cGVzLAogICAgICAgIGxvYWRlci5oaWVyYXJjaHksCiAgICAgICAgbG9hZGVyLmxpYnJhcmllcywKICAgICAgICBlbnZpcm9ubWVudERlZmluZXMsCiAgICAgICAgbmV3IEtlcm5lbERpYWdub3N0aWNSZXBvcnRlcihsb2FkZXIpLAogICAgICAgIGxvZ2dlcjogKFN0cmluZyBtc2cpID0+IHRpY2tlci5sb2dNcyhtc2cpKTsKICB9CgogIHZvaWQgcnVuUHJvY2VkdXJlVHJhbnNmb3JtYXRpb25zKFByb2NlZHVyZSBwcm9jZWR1cmUpIHsKICAgIGJhY2tlbmRUYXJnZXQucGVyZm9ybVRyYW5zZm9ybWF0aW9uc09uUHJvY2VkdXJlKAogICAgICAgIGxvYWRlci5jb3JlVHlwZXMsIGxvYWRlci5oaWVyYXJjaHksIHByb2NlZHVyZSwKICAgICAgICBsb2dnZXI6IChTdHJpbmcgbXNnKSA9PiB0aWNrZXIubG9nTXMobXNnKSk7CiAgfQoKICB2b2lkIHZlcmlmeSgpIHsKICAgIC8vIFRPRE8oYWhlKTogSG93IHRvIGhhbmRsZSBlcnJvcnMuCiAgICB2ZXJpZnlDb21wb25lbnQoY29tcG9uZW50KTsKICAgIHRpY2tlci5sb2dNcygiVmVyaWZpZWQgY29tcG9uZW50Iik7CiAgfQoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gW2xpYnJhcnldIHdhcyBidWlsdCBieSB0aGlzIFtLZXJuZWxUYXJnZXRdCiAgLy8vIGZyb20gc291cmNlcywgYW5kIG5vdCBsb2FkZWQgZnJvbSBhIFtEaWxsVGFyZ2V0XS4KICBib29sIGlzU291cmNlTGlicmFyeShMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIHJldHVybiBsb2FkZXIubGlicmFyaWVzLmNvbnRhaW5zKGxpYnJhcnkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWFkUGF0Y2hGaWxlcyhTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICBhc3NlcnQobGlicmFyeS51cmkuc2NoZW1lID09ICJkYXJ0Iik7CiAgICBMaXN0PFVyaT4gcGF0Y2hlcyA9IHVyaVRyYW5zbGF0b3IuZ2V0RGFydFBhdGNoZXMobGlicmFyeS51cmkucGF0aCk7CiAgICBpZiAocGF0Y2hlcyAhPSBudWxsKSB7CiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGZpcnN0OwogICAgICBmb3IgKFVyaSBwYXRjaCBpbiBwYXRjaGVzKSB7CiAgICAgICAgaWYgKGZpcnN0ID09IG51bGwpIHsKICAgICAgICAgIGZpcnN0ID0gbGlicmFyeS5sb2FkZXIucmVhZChwYXRjaCwgLTEsCiAgICAgICAgICAgICAgZmlsZVVyaTogcGF0Y2gsIG9yaWdpbjogbGlicmFyeSwgYWNjZXNzb3I6IGxpYnJhcnkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBJZiB0aGVyZSdzIG1vcmUgdGhhbiBvbmUgcGF0Y2ggZmlsZSwgaXQncyBpbnRlcnByZXRlZCBhcyBhIHBhcnQgb2YKICAgICAgICAgIC8vIHRoZSBwYXRjaCBsaWJyYXJ5LgogICAgICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgcGFydCA9IGxpYnJhcnkubG9hZGVyLnJlYWQocGF0Y2gsIC0xLAogICAgICAgICAgICAgIG9yaWdpbjogbGlicmFyeSwgZmlsZVVyaTogcGF0Y2gsIGFjY2Vzc29yOiBsaWJyYXJ5KTsKICAgICAgICAgIGZpcnN0LnBhcnRzLmFkZChwYXJ0KTsKICAgICAgICAgIGZpcnN0LnBhcnRPZmZzZXRzLmFkZCgtMSk7CiAgICAgICAgICBwYXJ0LnBhcnRPZlVyaSA9IGZpcnN0LnVyaTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn0KCi8vLyBMb29rcyBmb3IgYSBjb25zdHJ1Y3RvciBjYWxsIHRoYXQgbWF0Y2hlcyBgc3VwZXIoKWAgZnJvbSBhIGNvbnN0cnVjdG9yIGluCi8vLyBbY2xzXS4gU3VjaCBhIGNvbnN0cnVjdG9yIG1heSBoYXZlIG9wdGlvbmFsIGFyZ3VtZW50cywgYnV0IG5vIHJlcXVpcmVkCi8vLyBhcmd1bWVudHMuCkNvbnN0cnVjdG9yIGRlZmF1bHRTdXBlckNvbnN0cnVjdG9yKENsYXNzIGNscykgewogIENsYXNzIHN1cGVyY2xhc3MgPSBjbHMuc3VwZXJjbGFzczsKICBpZiAoc3VwZXJjbGFzcyAhPSBudWxsKSB7CiAgICBmb3IgKENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yIGluIHN1cGVyY2xhc3MuY29uc3RydWN0b3JzKSB7CiAgICAgIGlmIChjb25zdHJ1Y3Rvci5uYW1lLm5hbWUuaXNFbXB0eSkgewogICAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50ID09IDAKICAgICAgICAgICAgPyBjb25zdHJ1Y3RvcgogICAgICAgICAgICA6IG51bGw7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIG51bGw7Cn0KCmNsYXNzIEtlcm5lbERpYWdub3N0aWNSZXBvcnRlcgogICAgZXh0ZW5kcyBEaWFnbm9zdGljUmVwb3J0ZXI8TWVzc2FnZSwgTG9jYXRlZE1lc3NhZ2U+IHsKICBmaW5hbCBMb2FkZXIgbG9hZGVyOwoKICBLZXJuZWxEaWFnbm9zdGljUmVwb3J0ZXIodGhpcy5sb2FkZXIpOwoKICB2b2lkIHJlcG9ydChNZXNzYWdlIG1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LCBpbnQgbGVuZ3RoLCBVcmkgZmlsZVVyaSwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICBsb2FkZXIuYWRkUHJvYmxlbShtZXNzYWdlLCBjaGFyT2Zmc2V0LCBub0xlbmd0aCwgZmlsZVVyaSwgY29udGV4dDogY29udGV4dCk7CiAgfQp9CoNqAE5OPAEdASEBIQkTFw8TFRIYFA8aFhUXHBEOGRUTIBAaFxsdFQE2ATsBRQFEAT8BOAEwATMBQgE7ASUBGgkaLjM2Eio3JCwzASoBLgFGAUoBOQFCATQBRwEdCRYVHBYaGhgVIAFBATkBLQEyPR8BNR4BHwE0LQEXARcBSQFMAUUBMwFPATE6ASpCATEBTSMtIS9MHQQBITsBHVAbQAQBRzQiKCopExgYFRUREUcrOjk7LyhQRSNIGBchJicXEA4MCB5NBhMEAQwnOx81HRgIBkMEATgwPkAmOyYxQSAMCggIEwQBKiAiGhw9Ih8gBAEMRCs0KiQuRh0lREIdTys1Qx8sIi8kEk4aQSEyKRwoLjMzJShAKxgzBAFGTktPQAZIEQxBKzQqIiArLT8kIyghASFAGDMEASQ1Ky8GPENFBgQBSSVGMwE7LidLHhQGASoBSk4gMSA9LTA1CC02NS81CggGASVFBgEmFgQBJCpAJjsmNjMsJjxNLA4ySkkODAoICD0EAUkqMz8fKiMUCioyES4KCAY2BAFBATMBRj8pIk04SjgiBgFFUUxJSE0EAUMoMjJJDgYBRVFKFw0BS0pNPR8qJiQkDUgwBigwBiUwUQ83OkZLUQoIMk8NTTAGBAFGT0EpNj0hPggTBgFOSTI3JDg0QgZPNkQiJUAGQzQqTTU5PyUgMhs/BAEiOEpNEDc4KkxKTi8eRlAIBhs2BAE9HC9EHBwEAT0+RUZEBkIEARwrKxgUTE9DGRMVCSw1HUwaHD4pIxoTDAovJyMKDycIBiE7STIvBAFCKjMiICUIBisEAUsUOCEgAUxdMSwmNiMIJygIBkAlHTgiQjVETU4MIBEKCBxOTjkwOCMlMTsnDiA6ORgbNBMaSSgMNSwKMU5QMTxDCgE7RDE4DAooPCZLOTA7DgwKSUBDMCZMUB4iCggGIiFAJzkPKggIAU4oL00/HUc+OSQjMklKSRMoUSIoIAwKCAYBTEMhQEIpKT0mLDsfKD41KC4lGzU2RTIUDAoICAQBSCQjPxMaGi40MiRDJBw8HhczO0MrBjwTGhoaHC40BAE6NTc0BAESKCAoBAFMOCovBAEMNipIGyIjHTFDEVAgRUMhJSYKCAYEAgFOSw8xJRw/K0AaFAgGBA8CAR86FwEpAUgoUQQCATVwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF90YXJnZXQuZGFydDZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL3V0aWxzLmRhcnSR9i8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKaW1wb3J0ICdkYXJ0OmlvJyBzaG93IEJ5dGVzQnVpbGRlciwgRmlsZSwgSU9TaW5rOwoKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnIHNob3cgVWludDhMaXN0OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbG9uZS5kYXJ0JyBzaG93IENsb25lVmlzaXRvcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgTGlicmFyeSwKICAgICAgICBDb21wb25lbnQsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIENsYXNzLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgU3VwZXJ0eXBlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X3RvX2JpbmFyeS5kYXJ0JyBzaG93IEJpbmFyeVByaW50ZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2JpbmFyeS9saW1pdGVkX2FzdF90b19iaW5hcnkuZGFydCcKICAgIHNob3cgTGltaXRlZEJpbmFyeVByaW50ZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3RleHQvYXN0X3RvX3RleHQuZGFydCcgc2hvdyBQcmludGVyOwoKLy8vIFByaW50IHRoZSBnaXZlbiBbY29tcG9uZW50XS4gIERvIG5vdGhpbmcgaWYgaXQgaXMgYG51bGxgLiAgSWYgdGhlCi8vLyBbbGlicmFyeUZpbHRlcl0gaXMgcHJvdmlkZWQsIHRoZW4gb25seSBsaWJyYXJpZXMgdGhhdCBzYXRpc2Z5IGl0IGFyZQovLy8gcHJpbnRlZC4Kdm9pZCBwcmludENvbXBvbmVudFRleHQoQ29tcG9uZW50IGNvbXBvbmVudCwKICAgIHtib29sIGxpYnJhcnlGaWx0ZXIoTGlicmFyeSBsaWJyYXJ5KX0pIHsKICBpZiAoY29tcG9uZW50ID09IG51bGwpIHJldHVybjsKICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgUHJpbnRlciBwcmludGVyID0gbmV3IFByaW50ZXIoc2IpOwogIHByaW50ZXIud3JpdGVDb21wb25lbnRQcm9ibGVtcyhjb21wb25lbnQpOwogIGZvciAoTGlicmFyeSBsaWJyYXJ5IGluIGNvbXBvbmVudC5saWJyYXJpZXMpIHsKICAgIGlmIChsaWJyYXJ5RmlsdGVyICE9IG51bGwgJiYgIWxpYnJhcnlGaWx0ZXIobGlicmFyeSkpIGNvbnRpbnVlOwogICAgcHJpbnRlci53cml0ZUxpYnJhcnlGaWxlKGxpYnJhcnkpOwogIH0KICBwcmludGVyLndyaXRlQ29uc3RhbnRUYWJsZShjb21wb25lbnQpOwogIHByaW50KHNiKTsKfQoKLy8vIFdyaXRlIFtjb21wb25lbnRdIHRvIGZpbGUgb25seSBpbmNsdWRpbmcgbGlicmFyaWVzIHRoYXQgbWF0Y2ggW2ZpbHRlcl0uCkZ1dHVyZTxOdWxsPiB3cml0ZUNvbXBvbmVudFRvRmlsZShDb21wb25lbnQgY29tcG9uZW50LCBVcmkgdXJpLAogICAge2Jvb2wgZmlsdGVyKExpYnJhcnkgbGlicmFyeSl9KSBhc3luYyB7CiAgRmlsZSBvdXRwdXQgPSBuZXcgRmlsZS5mcm9tVXJpKHVyaSk7CiAgSU9TaW5rIHNpbmsgPSBvdXRwdXQub3BlbldyaXRlKCk7CiAgdHJ5IHsKICAgIEJpbmFyeVByaW50ZXIgcHJpbnRlciA9IGZpbHRlciA9PSBudWxsCiAgICAgICAgPyBuZXcgQmluYXJ5UHJpbnRlcihzaW5rKQogICAgICAgIDogbmV3IExpbWl0ZWRCaW5hcnlQcmludGVyKHNpbmssIGZpbHRlciA/PyAoXykgPT4gdHJ1ZSwgZmFsc2UpOwogICAgcHJpbnRlci53cml0ZUNvbXBvbmVudEZpbGUoY29tcG9uZW50KTsKICB9IGZpbmFsbHkgewogICAgYXdhaXQgc2luay5jbG9zZSgpOwogIH0KfQoKLy8vIFNlcmlhbGl6ZSB0aGUgbGlicmFyaWVzIGluIFtjb21wb25lbnRdIHRoYXQgbWF0Y2ggW2ZpbHRlcl0uClVpbnQ4TGlzdCBzZXJpYWxpemVDb21wb25lbnQoQ29tcG9uZW50IGNvbXBvbmVudCwKICAgIHtib29sIGZpbHRlcihMaWJyYXJ5IGxpYnJhcnkpLAogICAgYm9vbCBpbmNsdWRlU291cmNlczogdHJ1ZSwKICAgIGJvb2wgaW5jbHVkZU9mZnNldHM6IHRydWV9KSB7CiAgQnl0ZVNpbmsgYnl0ZVNpbmsgPSBuZXcgQnl0ZVNpbmsoKTsKICBCaW5hcnlQcmludGVyIHByaW50ZXIgPSBmaWx0ZXIgPT0gbnVsbAogICAgICA/IG5ldyBCaW5hcnlQcmludGVyKGJ5dGVTaW5rLAogICAgICAgICAgaW5jbHVkZVNvdXJjZXM6IGluY2x1ZGVTb3VyY2VzLCBpbmNsdWRlT2Zmc2V0czogaW5jbHVkZU9mZnNldHMpCiAgICAgIDogbmV3IExpbWl0ZWRCaW5hcnlQcmludGVyKGJ5dGVTaW5rLCBmaWx0ZXIsICFpbmNsdWRlU291cmNlcywKICAgICAgICAgIGluY2x1ZGVPZmZzZXRzOiBpbmNsdWRlT2Zmc2V0cyk7CiAgcHJpbnRlci53cml0ZUNvbXBvbmVudEZpbGUoY29tcG9uZW50KTsKICByZXR1cm4gYnl0ZVNpbmsuYnVpbGRlci50YWtlQnl0ZXMoKTsKfQoKY29uc3QgU3RyaW5nIGtEZWJ1Z0NsYXNzTmFtZSA9ICIjRGVidWdDbGFzcyI7CgpDb21wb25lbnQgY3JlYXRlRXhwcmVzc2lvbkV2YWx1YXRpb25Db21wb25lbnQoUHJvY2VkdXJlIHByb2NlZHVyZSkgewogIExpYnJhcnkgZmFrZUxpYnJhcnkgPQogICAgICBuZXcgTGlicmFyeShuZXcgVXJpKHNjaGVtZTogJ2V2YWx1YXRlJywgcGF0aDogJ3NvdXJjZScpKTsKCiAgaWYgKHByb2NlZHVyZS5wYXJlbnQgaXMgQ2xhc3MpIHsKICAgIENsYXNzIHJlYWxDbGFzcyA9IHByb2NlZHVyZS5wYXJlbnQ7CgogICAgQ2xhc3MgZmFrZUNsYXNzID0gbmV3IENsYXNzKG5hbWU6IGtEZWJ1Z0NsYXNzTmFtZSk7CiAgICBNYXA8VHlwZVBhcmFtZXRlciwgVHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtcyA9CiAgICAgICAgPFR5cGVQYXJhbWV0ZXIsIFR5cGVQYXJhbWV0ZXI+e307CiAgICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHR5cGVTdWJzdGl0dXRpb24gPSA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICBmb3IgKFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtIGluIHJlYWxDbGFzcy50eXBlUGFyYW1ldGVycykgewogICAgICB2YXIgbmV3Tm9kZSA9IG5ldyBUeXBlUGFyYW1ldGVyKHR5cGVQYXJhbS5uYW1lKTsKICAgICAgdHlwZVBhcmFtc1t0eXBlUGFyYW1dID0gbmV3Tm9kZTsKICAgICAgdHlwZVN1YnN0aXR1dGlvblt0eXBlUGFyYW1dID0gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKG5ld05vZGUpOwogICAgfQogICAgQ2xvbmVWaXNpdG9yIGNsb25lciA9IG5ldyBDbG9uZVZpc2l0b3IoCiAgICAgICAgdHlwZVN1YnN0aXR1dGlvbjogdHlwZVN1YnN0aXR1dGlvbiwgdHlwZVBhcmFtczogdHlwZVBhcmFtcyk7CgogICAgZm9yIChUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbSBpbiByZWFsQ2xhc3MudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgZmFrZUNsYXNzLnR5cGVQYXJhbWV0ZXJzLmFkZCh0eXBlUGFyYW0uYWNjZXB0KGNsb25lcikpOwogICAgfQoKICAgIGZha2VDbGFzcy5wYXJlbnQgPSBmYWtlTGlicmFyeTsKICAgIGlmIChyZWFsQ2xhc3Muc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgLy8gc3VwZXJ0eXBlIGlzIG51bGwgZm9yIE9iamVjdC4KICAgICAgZmFrZUNsYXNzLnN1cGVydHlwZSA9IG5ldyBTdXBlcnR5cGUuYnlSZWZlcmVuY2UoCiAgICAgICAgICByZWFsQ2xhc3Muc3VwZXJ0eXBlLmNsYXNzTmFtZSwKICAgICAgICAgIHJlYWxDbGFzcy5zdXBlcnR5cGUudHlwZUFyZ3VtZW50cy5tYXAoY2xvbmVyLnZpc2l0VHlwZSkudG9MaXN0KCkpOwogICAgfQoKICAgIC8vIFJlYmluZCB0aGUgdHlwZSBwYXJhbWV0ZXJzIGluIHRoZSBwcm9jZWR1cmUuCiAgICBwcm9jZWR1cmUgPSBwcm9jZWR1cmUuYWNjZXB0KGNsb25lcik7CiAgICBwcm9jZWR1cmUucGFyZW50ID0gZmFrZUNsYXNzOwogICAgZmFrZUNsYXNzLnByb2NlZHVyZXMuYWRkKHByb2NlZHVyZSk7CiAgICBmYWtlTGlicmFyeS5jbGFzc2VzLmFkZChmYWtlQ2xhc3MpOwogIH0gZWxzZSB7CiAgICBmYWtlTGlicmFyeS5wcm9jZWR1cmVzLmFkZChwcm9jZWR1cmUpOwogICAgcHJvY2VkdXJlLnBhcmVudCA9IGZha2VMaWJyYXJ5OwogIH0KCiAgLy8gVE9ETyh2ZWdvcm92KSBmaW5kIGEgd2F5IHRvIHByZXNlcnZlIG1ldGFkYXRhLgogIHJldHVybiBuZXcgQ29tcG9uZW50KGxpYnJhcmllczogW2Zha2VMaWJyYXJ5XSk7Cn0KCkxpc3Q8aW50PiBzZXJpYWxpemVQcm9jZWR1cmUoUHJvY2VkdXJlIHByb2NlZHVyZSkgewogIHJldHVybiBzZXJpYWxpemVDb21wb25lbnQoY3JlYXRlRXhwcmVzc2lvbkV2YWx1YXRpb25Db21wb25lbnQocHJvY2VkdXJlKSk7Cn0KCi8vLyBBIFtTaW5rXSB0aGF0IGRpcmVjdGx5IHdyaXRlcyBkYXRhIGludG8gYSBieXRlIGJ1aWxkZXIuCmNsYXNzIEJ5dGVTaW5rIGltcGxlbWVudHMgU2luazxMaXN0PGludD4+IHsKICBmaW5hbCBCeXRlc0J1aWxkZXIgYnVpbGRlciA9IG5ldyBCeXRlc0J1aWxkZXIoKTsKCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGRhdGEpIHsKICAgIGJ1aWxkZXIuYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHt9Cn0KgIwATk48ASEBMgEpATYBIQkSERMTDxcbEwFGATofATwBRkkNLS0hKCUtMUQnBCkNAgFMQCwnJAgrIkgrDhgEAgFAMiMfIiYpJEpEKyknAgEuAUUYQAEjKAE4MypRQDcnRAYsRQFAPgYBJCcnNylNBgE0KiIpKAsrJAQBNDICATRNAgE8LDMBHRcEARICAS1wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3V0aWxzLmRhcnQ5c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC92ZXJpZmllci5kYXJ0l2UvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS52ZXJpZmllcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQXNFeHByZXNzaW9uLAogICAgICAgIENsYXNzLAogICAgICAgIENvbXBvbmVudCwKICAgICAgICBFeHByZXNzaW9uU3RhdGVtZW50LAogICAgICAgIEZpZWxkLAogICAgICAgIExldCwKICAgICAgICBMaWJyYXJ5LAogICAgICAgIE1lbWJlciwKICAgICAgICBQcm9jZWR1cmUsCiAgICAgICAgU3RhdGljSW52b2NhdGlvbiwKICAgICAgICBTdXBlck1ldGhvZEludm9jYXRpb24sCiAgICAgICAgU3VwZXJQcm9wZXJ0eUdldCwKICAgICAgICBTdXBlclByb3BlcnR5U2V0LAogICAgICAgIFRyZWVOb2RlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90cmFuc2Zvcm1hdGlvbnMvZmxhZ3MuZGFydCcgc2hvdyBUcmFuc2Zvcm1lckZsYWc7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3ZlcmlmaWVyLmRhcnQnIHNob3cgVmVyaWZ5aW5nVmlzaXRvcjsKCmltcG9ydCAnLi4vY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cgTG9jYXRlZE1lc3NhZ2UsIG5vTGVuZ3RoLCB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVZlcmlmaWNhdGlvbkVycm9yOwoKaW1wb3J0ICcuLi9zZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX3NjaGVtYS5kYXJ0JyBzaG93IFR5cGVTY2hlbWFWaXNpdG9yLCBVbmtub3duVHlwZTsKCmltcG9ydCAna2VybmVsX3NoYWRvd19hc3QuZGFydCcgc2hvdyBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQ7CgppbXBvcnQgJ3JlZGlyZWN0aW5nX2ZhY3RvcnlfYm9keS5kYXJ0JwogICAgc2hvdyBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5LCBnZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5OwoKTGlzdDxMb2NhdGVkTWVzc2FnZT4gdmVyaWZ5Q29tcG9uZW50KENvbXBvbmVudCBjb21wb25lbnQsCiAgICB7Ym9vbCBpc091dGxpbmU6IGZhbHNlLCBib29sIHNraXBQbGF0Zm9ybTogZmFsc2V9KSB7CiAgRmFzdGFWZXJpZnlpbmdWaXNpdG9yIHZlcmlmaWVyID0KICAgICAgbmV3IEZhc3RhVmVyaWZ5aW5nVmlzaXRvcihpc091dGxpbmUsIHNraXBQbGF0Zm9ybSk7CiAgY29tcG9uZW50LmFjY2VwdCh2ZXJpZmllcik7CiAgcmV0dXJuIHZlcmlmaWVyLmVycm9yczsKfQoKY2xhc3MgRmFzdGFWZXJpZnlpbmdWaXNpdG9yIGV4dGVuZHMgVmVyaWZ5aW5nVmlzaXRvcgogICAgaW1wbGVtZW50cyBUeXBlU2NoZW1hVmlzaXRvcjx2b2lkPiB7CiAgZmluYWwgTGlzdDxMb2NhdGVkTWVzc2FnZT4gZXJyb3JzID0gPExvY2F0ZWRNZXNzYWdlPltdOwoKICBVcmkgZmlsZVVyaTsKICBmaW5hbCBib29sIHNraXBQbGF0Zm9ybTsKCiAgRmFzdGFWZXJpZnlpbmdWaXNpdG9yKGJvb2wgaXNPdXRsaW5lLCB0aGlzLnNraXBQbGF0Zm9ybSkgewogICAgdGhpcy5pc091dGxpbmUgPSBpc091dGxpbmU7CiAgfQoKICBVcmkgY2hlY2tMb2NhdGlvbihUcmVlTm9kZSBub2RlLCBTdHJpbmcgbmFtZSwgVXJpIGZpbGVVcmkpIHsKICAgIGlmIChuYW1lID09IG51bGwgfHwgbmFtZS5jb250YWlucygiIyIpKSB7CiAgICAgIC8vIFRPRE8oYWhlKTogSW52ZXN0aWdhdGUgaWYgdGhlc2UgY2hlY2tzIGNhbiBiZSBlbmFibGVkOgogICAgICAvLyBpZiAobm9kZS5maWxlVXJpICE9IG51bGwgJiYgbm9kZSBpcyEgTGlicmFyeSkgewogICAgICAvLyAgIHByb2JsZW0obm9kZSwgIkEgc3ludGhldGljIG5vZGUgc2hvdWxkbid0IGhhdmUgYSBmaWxlVXJpIiwKICAgICAgLy8gICAgICAgY29udGV4dDogbm9kZSk7CiAgICAgIC8vIH0KICAgICAgLy8gaWYgKG5vZGUuZmlsZU9mZnNldCAhPSAtMSkgewogICAgICAvLyAgIHByb2JsZW0obm9kZSwgIkEgc3ludGhldGljIG5vZGUgc2hvdWxkbid0IGhhdmUgYSBmaWxlT2Zmc2V0IiwKICAgICAgLy8gICAgICAgY29udGV4dDogbm9kZSk7CiAgICAgIC8vIH0KICAgICAgcmV0dXJuIGZpbGVVcmk7CiAgICB9IGVsc2UgewogICAgICBpZiAoZmlsZVVyaSA9PSBudWxsKSB7CiAgICAgICAgcHJvYmxlbShub2RlLCAiJyRuYW1lJyBoYXMgbm8gZmlsZVVyaSIsIGNvbnRleHQ6IG5vZGUpOwogICAgICAgIHJldHVybiBmaWxlVXJpOwogICAgICB9CiAgICAgIGlmIChub2RlLmZpbGVPZmZzZXQgPT0gLTEgJiYgbm9kZSBpcyEgTGlicmFyeSkgewogICAgICAgIHByb2JsZW0obm9kZSwgIickbmFtZScgaGFzIG5vIGZpbGVPZmZzZXQiLCBjb250ZXh0OiBub2RlKTsKICAgICAgfQogICAgICByZXR1cm4gZmlsZVVyaTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tTdXBlckludm9jYXRpb24oVHJlZU5vZGUgbm9kZSkgewogICAgdmFyIGNvbnRhaW5pbmdNZW1iZXIgPSBnZXRDb250YWluaW5nTWVtYmVyKG5vZGUpOwogICAgaWYgKGNvbnRhaW5pbmdNZW1iZXIgPT0gbnVsbCkgewogICAgICBwcm9ibGVtKG5vZGUsICdTdXBlciBjYWxsIG91dHNpZGUgb2YgYW55IG1lbWJlcicpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGNvbnRhaW5pbmdNZW1iZXIudHJhbnNmb3JtZXJGbGFncyAmIFRyYW5zZm9ybWVyRmxhZy5zdXBlckNhbGxzID09IDApIHsKICAgICAgICBwcm9ibGVtKAogICAgICAgICAgICBub2RlLCAnU3VwZXIgY2FsbCBpbiBhIG1lbWJlciBsYWNraW5nIFRyYW5zZm9ybWVyRmxhZy5zdXBlckNhbGxzJyk7CiAgICAgIH0KICAgIH0KICB9CgogIE1lbWJlciBnZXRDb250YWluaW5nTWVtYmVyKFRyZWVOb2RlIG5vZGUpIHsKICAgIHdoaWxlIChub2RlICE9IG51bGwpIHsKICAgICAgaWYgKG5vZGUgaXMgTWVtYmVyKSByZXR1cm4gbm9kZTsKICAgICAgbm9kZSA9IG5vZGUucGFyZW50OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBwcm9ibGVtKFRyZWVOb2RlIG5vZGUsIFN0cmluZyBkZXRhaWxzLCB7VHJlZU5vZGUgY29udGV4dH0pIHsKICAgIG5vZGUgPz89IChjb250ZXh0ID8/IHRoaXMuY29udGV4dCk7CiAgICBpbnQgb2Zmc2V0ID0gbm9kZT8uZmlsZU9mZnNldCA/PyAtMTsKICAgIFVyaSBmaWxlID0gbm9kZT8ubG9jYXRpb24/LmZpbGUgPz8gZmlsZVVyaTsKICAgIFVyaSB1cmkgPSBmaWxlID09IG51bGwgPyBudWxsIDogZmlsZTsKICAgIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UgPSB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVZlcmlmaWNhdGlvbkVycm9yCiAgICAgICAgLndpdGhBcmd1bWVudHMoZGV0YWlscykKICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgb2Zmc2V0LCBub0xlbmd0aCk7CiAgICBDb21waWxlckNvbnRleHQuY3VycmVudC5yZXBvcnQobWVzc2FnZSwgU2V2ZXJpdHkuZXJyb3IpOwogICAgZXJyb3JzLmFkZChtZXNzYWdlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QXNFeHByZXNzaW9uKEFzRXhwcmVzc2lvbiBub2RlKSB7CiAgICBzdXBlci52aXNpdEFzRXhwcmVzc2lvbihub2RlKTsKICAgIGlmIChub2RlLmZpbGVPZmZzZXQgPT0gLTEpIHsKICAgICAgVHJlZU5vZGUgcGFyZW50ID0gbm9kZS5wYXJlbnQ7CiAgICAgIHdoaWxlIChwYXJlbnQgIT0gbnVsbCkgewogICAgICAgIGlmIChwYXJlbnQuZmlsZU9mZnNldCAhPSAtMSkgYnJlYWs7CiAgICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDsKICAgICAgfQogICAgICBwcm9ibGVtKHBhcmVudCwgIk5vIG9mZnNldCBmb3IgJG5vZGUiLCBjb250ZXh0OiBub2RlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIC8vIEJ5cGFzcyB2ZXJpZmljYXRpb24gb2YgdGhlIFtTdGF0aWNHZXRdIGluIFtSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5XSBhcwogICAgLy8gdGhpcyBpcyBhIHN0YXRpYyBnZXQgd2l0aG91dCBhIGdldHRlci4KICAgIGlmIChub2RlIGlzISBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KSB7CiAgICAgIHN1cGVyLnZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChub2RlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0TGV0KExldCBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQpIHsKICAgICAgcHJvYmxlbShub2RlLCAiTGVha2luZyBzaGFkb3cgbm9kZTogJHtub2RlLnJ1bnRpbWVUeXBlfSIpOwogICAgfQogICAgc3VwZXIudmlzaXRMZXQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdExpYnJhcnkoTGlicmFyeSBub2RlKSB7CiAgICAvLyBJc3N1ZShodHRwOi8vZGFydGJ1Zy5jb20vMzI1MzApCiAgICBpZiAoc2tpcFBsYXRmb3JtICYmIG5vZGUuaW1wb3J0VXJpLnNjaGVtZSA9PSAnZGFydCcpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgZmlsZVVyaSA9IGNoZWNrTG9jYXRpb24obm9kZSwgbm9kZS5uYW1lLCBub2RlLmZpbGVVcmkpOwogICAgc3VwZXIudmlzaXRMaWJyYXJ5KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDbGFzcyhDbGFzcyBub2RlKSB7CiAgICBmaWxlVXJpID0gY2hlY2tMb2NhdGlvbihub2RlLCBub2RlLm5hbWUsIG5vZGUuZmlsZVVyaSk7CiAgICBzdXBlci52aXNpdENsYXNzKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGaWVsZChGaWVsZCBub2RlKSB7CiAgICBmaWxlVXJpID0gY2hlY2tMb2NhdGlvbihub2RlLCBub2RlLm5hbWUubmFtZSwgbm9kZS5maWxlVXJpKTsKICAgIHN1cGVyLnZpc2l0RmllbGQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFByb2NlZHVyZShQcm9jZWR1cmUgbm9kZSkgewogICAgZmlsZVVyaSA9IGNoZWNrTG9jYXRpb24obm9kZSwgbm9kZS5uYW1lLm5hbWUsIG5vZGUuZmlsZVVyaSk7CiAgICBzdXBlci52aXNpdFByb2NlZHVyZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0VW5rbm93blR5cGUoVW5rbm93blR5cGUgbm9kZSkgewogICAgLy8gTm90ZTogd2UgY2FuJ3QgcGFzcyBbbm9kZV0gdG8gW3Byb2JsZW1dIGJlY2F1c2UgaXQncyBub3QgYSBbVHJlZU5vZGVdLgogICAgcHJvYmxlbShudWxsLCAiVW5leHBlY3RlZCBhcHBlYXJhbmNlIG9mIHRoZSB1bmtub3duIHR5cGUuIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihTdXBlck1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgY2hlY2tTdXBlckludm9jYXRpb24obm9kZSk7CiAgICBzdXBlci52aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3VwZXJQcm9wZXJ0eUdldChTdXBlclByb3BlcnR5R2V0IG5vZGUpIHsKICAgIGNoZWNrU3VwZXJJbnZvY2F0aW9uKG5vZGUpOwogICAgc3VwZXIudmlzaXRTdXBlclByb3BlcnR5R2V0KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdXBlclByb3BlcnR5U2V0KFN1cGVyUHJvcGVydHlTZXQgbm9kZSkgewogICAgY2hlY2tTdXBlckludm9jYXRpb24obm9kZSk7CiAgICBzdXBlci52aXNpdFN1cGVyUHJvcGVydHlTZXQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN0YXRpY0ludm9jYXRpb24oU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBzdXBlci52aXNpdFN0YXRpY0ludm9jYXRpb24obm9kZSk7CiAgICBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5IGJvZHkgPSBnZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KG5vZGUudGFyZ2V0KTsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgcHJvYmxlbShub2RlLCAiQXR0ZW1wdCB0byBpbnZva2UgcmVkaXJlY3RpbmcgZmFjdG9yeS4iKTsKICAgIH0KICB9Cn0KgNIATk48ARgBIQkWDxMdDw0REBMaHxoaEgFJAT0BOAEdTQEpAVEBQgEnPAE6OSM6HhoCATUpOgEPGwE9IAQBPy5AOUYfCyZJHwsWDR1AGAg3QwgWBgQBLTYkOQ1REVAIBgQBLhsnGgYRBAEMPygpMCpGIC49GQQBDCkjISUfLCAIPQYEAQw3TS4rLAYEAQwXL0EGGgQBDB8nOw4GPB4EAQwbPBwEAQwbQRwEAQwjQSAEAQwnTkEEAQw7ICwEAQwxICcEAQwxICcEAQwxJ0oYPwYEAgEwcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC92ZXJpZmllci5kYXJ0MHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9sb2FkZXIuZGFydK+2Ly8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEubG9hZGVyOwoKaW1wb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEZ1dHVyZTsKCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJyBzaG93IFF1ZXVlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBMaWJyYXJ5OwoKaW1wb3J0ICdidWlsZGVyL2J1aWxkZXIuZGFydCcKICAgIHNob3cgQ2xhc3NCdWlsZGVyLCBEZWNsYXJhdGlvbiwgTGlicmFyeUJ1aWxkZXIsIFR5cGVCdWlsZGVyOwoKaW1wb3J0ICdjcmFzaC5kYXJ0JyBzaG93IGZpcnN0U291cmNlVXJpOwoKaW1wb3J0ICdtZXNzYWdlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIEZvcm1hdHRlZE1lc3NhZ2UsCiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgTWVzc2FnZSwKICAgICAgICBub0xlbmd0aCwKICAgICAgICBTdW1tYXJ5VGVtcGxhdGUsCiAgICAgICAgVGVtcGxhdGUsCiAgICAgICAgbWVzc2FnZVBsYXRmb3JtUHJpdmF0ZUxpYnJhcnlBY2Nlc3MsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Db250ZXh0U2V2ZXJpdHksCiAgICAgICAgdGVtcGxhdGVTb3VyY2VCb2R5U3VtbWFyeTsKCmltcG9ydCAncHJvYmxlbXMuZGFydCcgc2hvdyBpbnRlcm5hbFByb2JsZW0sIHVuaGFuZGxlZDsKCmltcG9ydCAnc2V2ZXJpdHkuZGFydCcgc2hvdyBTZXZlcml0eTsKCmltcG9ydCAndGFyZ2V0X2ltcGxlbWVudGF0aW9uLmRhcnQnIHNob3cgVGFyZ2V0SW1wbGVtZW50YXRpb247CgppbXBvcnQgJ3RpY2tlci5kYXJ0JyBzaG93IFRpY2tlcjsKCmNvbnN0IFN0cmluZyB1bnRyYW5zbGF0YWJsZVVyaVNjaGVtZSA9ICJvcmctZGFydGxhbmctdW50cmFuc2xhdGFibGUtdXJpIjsKCmFic3RyYWN0IGNsYXNzIExvYWRlciB7CiAgZmluYWwgTWFwPFVyaSwgTGlicmFyeUJ1aWxkZXI+IGJ1aWxkZXJzID0gPFVyaSwgTGlicmFyeUJ1aWxkZXI+e307CgogIGZpbmFsIFF1ZXVlPExpYnJhcnlCdWlsZGVyPiB1bnBhcnNlZExpYnJhcmllcyA9IG5ldyBRdWV1ZTxMaWJyYXJ5QnVpbGRlcj4oKTsKCiAgZmluYWwgTGlzdDxMaWJyYXJ5PiBsaWJyYXJpZXMgPSA8TGlicmFyeT5bXTsKCiAgZmluYWwgVGFyZ2V0SW1wbGVtZW50YXRpb24gdGFyZ2V0OwoKICAvLy8gTGlzdCBvZiBhbGwgaGFuZGxlZCBjb21waWxlLXRpbWUgZXJyb3JzIHNlZW4gc28gZmFyIGJ5IGxpYnJhcmllcyBsb2FkZWQKICAvLy8gYnkgdGhpcyBsb2FkZXIuCiAgLy8vCiAgLy8vIEEgaGFuZGxlZCBlcnJvciBpcyBhbiBlcnJvciB0aGF0IGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgQVNUCiAgLy8vIGFscmVhZHksIGZvciBleGFtcGxlLCBhcyBhIHRocm93IGV4cHJlc3Npb24uCiAgZmluYWwgTGlzdDxMb2NhdGVkTWVzc2FnZT4gaGFuZGxlZEVycm9ycyA9IDxMb2NhdGVkTWVzc2FnZT5bXTsKCiAgLy8vIExpc3Qgb2YgYWxsIHVuaGFuZGxlZCBjb21waWxlLXRpbWUgZXJyb3JzIHNlZW4gc28gZmFyIGJ5IGxpYnJhcmllcyBsb2FkZWQKICAvLy8gYnkgdGhpcyBsb2FkZXIuCiAgLy8vCiAgLy8vIEFuIHVuaGFuZGxlZCBlcnJvciBpcyBhbiBlcnJvciB0aGF0IGhhc24ndCBiZWVuIGhhbmRsZWQsIHNlZQogIC8vLyBbaGFuZGxlZEVycm9yc10uCiAgZmluYWwgTGlzdDxMb2NhdGVkTWVzc2FnZT4gdW5oYW5kbGVkRXJyb3JzID0gPExvY2F0ZWRNZXNzYWdlPltdOwoKICAvLy8gTGlzdCBvZiBhbGwgcHJvYmxlbXMgc2VlbiBzbyBmYXIgYnkgbGlicmFyaWVzIGxvYWRlZCBieSB0aGlzIGxvYWRlciB0aGF0CiAgLy8vIGRvZXMgbm90IGJlbG9uZyBkaXJlY3RseSB0byBhIGxpYnJhcnkuCiAgZmluYWwgTGlzdDxGb3JtYXR0ZWRNZXNzYWdlPiBhbGxDb21wb25lbnRQcm9ibGVtcyA9IDxGb3JtYXR0ZWRNZXNzYWdlPltdOwoKICBmaW5hbCBTZXQ8U3RyaW5nPiBzZWVuTWVzc2FnZXMgPSBuZXcgU2V0PFN0cmluZz4oKTsKCiAgTGlicmFyeUJ1aWxkZXIgY29yZUxpYnJhcnk7CgogIC8vLyBUaGUgZmlyc3QgbGlicmFyeSB0aGF0IHdlJ3ZlIGJlZW4gYXNrZWQgdG8gY29tcGlsZS4gV2hlbiBjb21waWxpbmcgYQogIC8vLyBwcm9ncmFtIChha2Egc2NyaXB0KSwgdGhpcyBpcyB0aGUgbGlicmFyeSB0aGF0IHNob3VsZCBoYXZlIGEgbWFpbiBtZXRob2QuCiAgTGlicmFyeUJ1aWxkZXIgZmlyc3Q7CgogIGludCBieXRlQ291bnQgPSAwOwoKICBVcmkgY3VycmVudFVyaUZvckNyYXNoUmVwb3J0aW5nOwoKICBMb2FkZXIodGhpcy50YXJnZXQpOwoKICBUaWNrZXIgZ2V0IHRpY2tlciA9PiB0YXJnZXQudGlja2VyOwoKICBUZW1wbGF0ZTxTdW1tYXJ5VGVtcGxhdGU+IGdldCBvdXRsaW5lU3VtbWFyeVRlbXBsYXRlOwoKICBib29sIGdldCBpc1NvdXJjZUxvYWRlciA9PiBmYWxzZTsKCiAgLy8vIExvb2sgdXAgYSBsaWJyYXJ5IGJ1aWxkZXIgYnkgdGhlIG5hbWUgW3VyaV0sIG9yIGlmIHN1Y2ggZG9lc24ndAogIC8vLyBleGlzdCwgY3JlYXRlIG9uZS4gVGhlIGNhbm9uaWNhbCBVUkkgb2YgdGhlIGxpYnJhcnkgaXMgW3VyaV0sIGFuZCBpdHMKICAvLy8gYWN0dWFsIGxvY2F0aW9uIGlzIFtmaWxlVXJpXS4KICAvLy8KICAvLy8gQ2Fub25pY2FsIFVSSXMgaGF2ZSBzY2hlbWVzIGxpa2UgImRhcnQiLCBvciAicGFja2FnZSIsIGFuZCB0aGUgYWN0dWFsCiAgLy8vIGxvY2F0aW9uIGlzIG9mdGVuIGEgZmlsZSBVUkkuCiAgLy8vCiAgLy8vIFRoZSBbYWNjZXNzb3JdIGlzIHRoZSBsaWJyYXJ5IHRoYXQncyB0cnlpbmcgdG8gaW1wb3J0LCBleHBvcnQsIG9yIGluY2x1ZGUKICAvLy8gYXMgcGFydCBbdXJpXSwgYW5kIFtjaGFyT2Zmc2V0XSBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGNvcnJlc3BvbmRpbmcKICAvLy8gZGlyZWN0aXZlLiBJZiBbYWNjZXNzb3JdIGlzbid0IGFsbG93ZWQgdG8gYWNjZXNzIFt1cmldLCBpdCdzIGEKICAvLy8gY29tcGlsZS10aW1lIGVycm9yLgogIExpYnJhcnlCdWlsZGVyIHJlYWQoVXJpIHVyaSwgaW50IGNoYXJPZmZzZXQsCiAgICAgIHtVcmkgZmlsZVVyaSwgTGlicmFyeUJ1aWxkZXIgYWNjZXNzb3IsIExpYnJhcnlCdWlsZGVyIG9yaWdpbn0pIHsKICAgIExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgPSBidWlsZGVycy5wdXRJZkFic2VudCh1cmksICgpIHsKICAgICAgaWYgKGZpbGVVcmkgIT0gbnVsbCAmJgogICAgICAgICAgKGZpbGVVcmkuc2NoZW1lID09ICJkYXJ0IiB8fAogICAgICAgICAgICAgIGZpbGVVcmkuc2NoZW1lID09ICJwYWNrYWdlIiB8fAogICAgICAgICAgICAgIGZpbGVVcmkuc2NoZW1lID09ICJkYXJ0LWV4dCIpKSB7CiAgICAgICAgZmlsZVVyaSA9IG51bGw7CiAgICAgIH0KICAgICAgU3RyaW5nIHBhY2thZ2VGcmFnbWVudDsKICAgICAgaWYgKGZpbGVVcmkgPT0gbnVsbCkgewogICAgICAgIHN3aXRjaCAodXJpLnNjaGVtZSkgewogICAgICAgICAgY2FzZSAicGFja2FnZSI6CiAgICAgICAgICBjYXNlICJkYXJ0IjoKICAgICAgICAgICAgZmlsZVVyaSA9IHRhcmdldC50cmFuc2xhdGVVcmkodXJpKSA/PwogICAgICAgICAgICAgICAgbmV3IFVyaSgKICAgICAgICAgICAgICAgICAgICBzY2hlbWU6IHVudHJhbnNsYXRhYmxlVXJpU2NoZW1lLAogICAgICAgICAgICAgICAgICAgIHBhdGg6IFVyaS5lbmNvZGVDb21wb25lbnQoIiR1cmkiKSk7CiAgICAgICAgICAgIHBhY2thZ2VGcmFnbWVudCA9IHRhcmdldC51cmlUcmFuc2xhdG9yLmdldFBhY2thZ2VGcmFnbWVudCh1cmkpOwogICAgICAgICAgICBicmVhazsKCiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBmaWxlVXJpID0gdXJpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgYm9vbCBoYXNWYWxpZFBhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb24gPSBmYWxzZTsKICAgICAgaW50IHBhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb25NYWpvcjsKICAgICAgaW50IHBhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb25NaW5vcjsKICAgICAgaWYgKHBhY2thZ2VGcmFnbWVudCAhPSBudWxsKSB7CiAgICAgICAgTGlzdDxTdHJpbmc+IHByb3BlcnRpZXMgPSBwYWNrYWdlRnJhZ21lbnQuc3BsaXQoIiYiKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIFN0cmluZyBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07CiAgICAgICAgICBpZiAocHJvcGVydHkuc3RhcnRzV2l0aCgiZGFydD0iKSkgewogICAgICAgICAgICBTdHJpbmcgbGFuZ2F1Z2VWZXJzaW9uU3RyaW5nID0gcHJvcGVydHkuc3Vic3RyaW5nKDUpOwoKICAgICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHZlcnNpb24gaXMgeC55W3doYXRldmVyXQogICAgICAgICAgICBMaXN0PFN0cmluZz4gZG90U2VwYXJhdGVkUGFydHMgPSBsYW5nYXVnZVZlcnNpb25TdHJpbmcuc3BsaXQoIi4iKTsKICAgICAgICAgICAgaWYgKGRvdFNlcGFyYXRlZFBhcnRzLmxlbmd0aCA+PSAyKSB7CiAgICAgICAgICAgICAgcGFja2FnZVNwZWNpZmllZExhbmd1YWdlVmVyc2lvbk1ham9yID0KICAgICAgICAgICAgICAgICAgaW50LnRyeVBhcnNlKGRvdFNlcGFyYXRlZFBhcnRzWzBdKTsKICAgICAgICAgICAgICBwYWNrYWdlU3BlY2lmaWVkTGFuZ3VhZ2VWZXJzaW9uTWlub3IgPQogICAgICAgICAgICAgICAgICBpbnQudHJ5UGFyc2UoZG90U2VwYXJhdGVkUGFydHNbMV0pOwogICAgICAgICAgICAgIGlmIChwYWNrYWdlU3BlY2lmaWVkTGFuZ3VhZ2VWZXJzaW9uTWFqb3IgIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgICBwYWNrYWdlU3BlY2lmaWVkTGFuZ3VhZ2VWZXJzaW9uTWlub3IgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgaGFzVmFsaWRQYWNrYWdlU3BlY2lmaWVkTGFuZ3VhZ2VWZXJzaW9uID0gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghaGFzVmFsaWRQYWNrYWdlU3BlY2lmaWVkTGFuZ3VhZ2VWZXJzaW9uKSB7CiAgICAgICAgICAgICAgLy8gVE9ETyhqZW5zaik6IElzc3VlIGVycm9yIGhlcmUuCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0KICAgICAgICAgIHRhcmdldC5jcmVhdGVMaWJyYXJ5QnVpbGRlcih1cmksIGZpbGVVcmksIG9yaWdpbik7CiAgICAgIGlmIChoYXNWYWxpZFBhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb24pIHsKICAgICAgICBsaWJyYXJ5LnNldExhbmd1YWdlVmVyc2lvbihwYWNrYWdlU3BlY2lmaWVkTGFuZ3VhZ2VWZXJzaW9uTWFqb3IsCiAgICAgICAgICAgIHBhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb25NaW5vciwKICAgICAgICAgICAgZXhwbGljaXQ6IGZhbHNlKTsKICAgICAgfQogICAgICBpZiAodXJpLnNjaGVtZSA9PSAiZGFydCIgJiYgdXJpLnBhdGggPT0gImNvcmUiKSB7CiAgICAgICAgY29yZUxpYnJhcnkgPSBsaWJyYXJ5OwogICAgICB9CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciAhPSB0aGlzKSB7CiAgICAgICAgaWYgKGNvcmVMaWJyYXJ5ID09IGxpYnJhcnkpIHsKICAgICAgICAgIHRhcmdldC5sb2FkRXh0cmFSZXF1aXJlZExpYnJhcmllcyh0aGlzKTsKICAgICAgICB9CiAgICAgICAgLy8gVGhpcyBsaWJyYXJ5IGlzbid0IG93bmVkIGJ5IHRoaXMgbG9hZGVyLCBzbyBub3QgZnVydGhlciBwcm9jZXNzaW5nCiAgICAgICAgLy8gc2hvdWxkIGJlIGF0dGVtcHRlZC4KICAgICAgICByZXR1cm4gbGlicmFyeTsKICAgICAgfQoKICAgICAgewogICAgICAgIC8vIEFkZCBhbnkgYWRkaXRpb25hbCBsb2dpYyBhZnRlciB0aGlzIGJsb2NrLiBTZXR0aW5nIHRoZQogICAgICAgIC8vIGZpcnN0U291cmNlVXJpIGFuZCBmaXJzdCBsaWJyYXJ5IHNob3VsZCBiZSBkb25lIGFzIGVhcmx5IGFzCiAgICAgICAgLy8gcG9zc2libGUuCiAgICAgICAgZmlyc3RTb3VyY2VVcmkgPz89IHVyaTsKICAgICAgICBmaXJzdCA/Pz0gbGlicmFyeTsKICAgICAgfQogICAgICBpZiAoY29yZUxpYnJhcnkgPT0gbGlicmFyeSkgewogICAgICAgIHRhcmdldC5sb2FkRXh0cmFSZXF1aXJlZExpYnJhcmllcyh0aGlzKTsKICAgICAgfQogICAgICBpZiAodGFyZ2V0LmJhY2tlbmRUYXJnZXQubWF5RGVmaW5lUmVzdHJpY3RlZFR5cGUob3JpZ2luPy51cmkgPz8gdXJpKSkgewogICAgICAgIGxpYnJhcnkubWF5SW1wbGVtZW50UmVzdHJpY3RlZFR5cGVzID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAodXJpLnNjaGVtZSA9PSAiZGFydCIpIHsKICAgICAgICB0YXJnZXQucmVhZFBhdGNoRmlsZXMobGlicmFyeSk7CiAgICAgIH0KICAgICAgdW5wYXJzZWRMaWJyYXJpZXMuYWRkTGFzdChsaWJyYXJ5KTsKICAgICAgcmV0dXJuIGxpYnJhcnk7CiAgICB9KTsKICAgIGlmIChhY2Nlc3NvciA9PSBudWxsKSB7CiAgICAgIGlmIChidWlsZGVyLmxvYWRlciA9PSB0aGlzICYmIGZpcnN0ICE9IGJ1aWxkZXIgJiYgaXNTb3VyY2VMb2FkZXIpIHsKICAgICAgICB1bmhhbmRsZWQoIm51bGwiLCAiYWNjZXNzb3IiLCBjaGFyT2Zmc2V0LCB1cmkpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBidWlsZGVyLnJlY29yZEFjY2VzcyhjaGFyT2Zmc2V0LCBub0xlbmd0aCwgYWNjZXNzb3IuZmlsZVVyaSk7CiAgICAgIGlmICghYWNjZXNzb3IuaXNQYXRjaCAmJgogICAgICAgICAgIWFjY2Vzc29yLmlzUGFydCAmJgogICAgICAgICAgIXRhcmdldC5iYWNrZW5kVGFyZ2V0CiAgICAgICAgICAgICAgLmFsbG93UGxhdGZvcm1Qcml2YXRlTGlicmFyeUFjY2VzcyhhY2Nlc3Nvci51cmksIHVyaSkpIHsKICAgICAgICBhY2Nlc3Nvci5hZGRQcm9ibGVtKG1lc3NhZ2VQbGF0Zm9ybVByaXZhdGVMaWJyYXJ5QWNjZXNzLCBjaGFyT2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCwgYWNjZXNzb3IuZmlsZVVyaSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBidWlsZGVyOwogIH0KCiAgdm9pZCBlbnN1cmVDb3JlTGlicmFyeSgpIHsKICAgIGlmIChjb3JlTGlicmFyeSA9PSBudWxsKSB7CiAgICAgIHJlYWQoVXJpLnBhcnNlKCJkYXJ0OmNvcmUiKSwgMCwgYWNjZXNzb3I6IGZpcnN0KTsKICAgICAgLy8gVE9ETyhhc2tlc2MpOiBXaGVuIGFsbCBiYWNrZW5kcyBzdXBwb3J0IHNldCBsaXRlcmFscywgd2Ugbm8gbG9uZ2VyCiAgICAgIC8vIG5lZWQgdG8gaW5kZXggZGFydDpjb2xsZWN0aW9uLCBhcyBpdCBpcyBvbmx5IG5lZWRlZCBmb3IgZGVzdWdhcmluZyBvZgogICAgICAvLyBjb25zdCBzZXRzLiBXZSBjYW4gcmVtb3ZlIGl0IGZyb20gdGhpcyBsaXN0IGF0IHRoYXQgdGltZS4KICAgICAgcmVhZChVcmkucGFyc2UoImRhcnQ6Y29sbGVjdGlvbiIpLCAwLCBhY2Nlc3NvcjogZmlyc3QpOwogICAgICBhc3NlcnQoY29yZUxpYnJhcnkgIT0gbnVsbCk7CiAgICB9CiAgfQoKICBGdXR1cmU8TnVsbD4gYnVpbGRCb2RpZXMoKSBhc3luYyB7CiAgICBhc3NlcnQoY29yZUxpYnJhcnkgIT0gbnVsbCk7CiAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkgaW4gYnVpbGRlcnMudmFsdWVzKSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgY3VycmVudFVyaUZvckNyYXNoUmVwb3J0aW5nID0gbGlicmFyeS51cmk7CiAgICAgICAgYXdhaXQgYnVpbGRCb2R5KGxpYnJhcnkpOwogICAgICB9CiAgICB9CiAgICBjdXJyZW50VXJpRm9yQ3Jhc2hSZXBvcnRpbmcgPSBudWxsOwogICAgbG9nU3VtbWFyeSh0ZW1wbGF0ZVNvdXJjZUJvZHlTdW1tYXJ5KTsKICB9CgogIEZ1dHVyZTxOdWxsPiBidWlsZE91dGxpbmVzKCkgYXN5bmMgewogICAgZW5zdXJlQ29yZUxpYnJhcnkoKTsKICAgIHdoaWxlICh1bnBhcnNlZExpYnJhcmllcy5pc05vdEVtcHR5KSB7CiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPSB1bnBhcnNlZExpYnJhcmllcy5yZW1vdmVGaXJzdCgpOwogICAgICBjdXJyZW50VXJpRm9yQ3Jhc2hSZXBvcnRpbmcgPSBsaWJyYXJ5LnVyaTsKICAgICAgYXdhaXQgYnVpbGRPdXRsaW5lKGxpYnJhcnkpOwogICAgfQogICAgY3VycmVudFVyaUZvckNyYXNoUmVwb3J0aW5nID0gbnVsbDsKICAgIGxvZ1N1bW1hcnkob3V0bGluZVN1bW1hcnlUZW1wbGF0ZSk7CiAgfQoKICB2b2lkIGxvZ1N1bW1hcnkoVGVtcGxhdGU8U3VtbWFyeVRlbXBsYXRlPiB0ZW1wbGF0ZSkgewogICAgdGlja2VyLmxvZygoRHVyYXRpb24gZWxhcHNlZCwgRHVyYXRpb24gc2luY2VTdGFydCkgewogICAgICBpbnQgbGlicmFyeUNvdW50ID0gMDsKICAgICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSBsaWJyYXJ5Q291bnQrKzsKICAgICAgfSk7CiAgICAgIGRvdWJsZSBtcyA9IGVsYXBzZWQuaW5NaWNyb3NlY29uZHMgLyBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZDsKICAgICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGUud2l0aEFyZ3VtZW50cygKICAgICAgICAgIGxpYnJhcnlDb3VudCwgYnl0ZUNvdW50LCBtcywgYnl0ZUNvdW50IC8gbXMsIG1zIC8gbGlicmFyeUNvdW50KTsKICAgICAgcHJpbnQoIiRzaW5jZVN0YXJ0OiAke21lc3NhZ2UubWVzc2FnZX0iKTsKICAgIH0pOwogIH0KCiAgRnV0dXJlPE51bGw+IGJ1aWxkT3V0bGluZShjb3ZhcmlhbnQgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSk7CgogIC8vLyBCdWlsZHMgYWxsIHRoZSBtZXRob2QgYm9kaWVzIGZvdW5kIGluIHRoZSBnaXZlbiBbbGlicmFyeV0uCiAgRnV0dXJlPE51bGw+IGJ1aWxkQm9keShjb3ZhcmlhbnQgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSk7CgogIC8vLyBSZWdpc3RlciBbbWVzc2FnZV0gYXMgYSBwcm9ibGVtIHdpdGggYSBzZXZlcml0eSBkZXRlcm1pbmVkIGJ5IHRoZQogIC8vLyBpbnRyaW5zaWMgc2V2ZXJpdHkgb2YgdGhlIG1lc3NhZ2UuCiAgRm9ybWF0dGVkTWVzc2FnZSBhZGRQcm9ibGVtKAogICAgICBNZXNzYWdlIG1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LCBpbnQgbGVuZ3RoLCBVcmkgZmlsZVVyaSwKICAgICAge2Jvb2wgd2FzSGFuZGxlZDogZmFsc2UsCiAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQsCiAgICAgIFNldmVyaXR5IHNldmVyaXR5LAogICAgICBib29sIHByb2JsZW1PbkxpYnJhcnk6IGZhbHNlfSkgewogICAgcmV0dXJuIGFkZE1lc3NhZ2UobWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLCBmaWxlVXJpLCBzZXZlcml0eSwKICAgICAgICB3YXNIYW5kbGVkOiB3YXNIYW5kbGVkLAogICAgICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICAgICAgcHJvYmxlbU9uTGlicmFyeTogcHJvYmxlbU9uTGlicmFyeSk7CiAgfQoKICAvLy8gQWxsIG1lc3NhZ2VzIHJlcG9ydGVkIGJ5IHRoZSBjb21waWxlciAoZXJyb3JzLCB3YXJuaW5ncywgZXRjLikgYXJlIHJvdXRlZAogIC8vLyB0aHJvdWdoIHRoaXMgbWV0aG9kLgogIC8vLwogIC8vLyBSZXR1cm5zIGEgRm9ybWF0dGVkTWVzc2FnZSBpZiB0aGUgbWVzc2FnZSBpcyBuZXcsIHRoYXQgaXMsIG5vdCBwcmV2aW91c2x5CiAgLy8vIHJlcG9ydGVkLiBUaGlzIGlzIGltcG9ydGFudCBhcyBzb21lIHBhcnNlciBlcnJvcnMgbWF5IGJlIHJlcG9ydGVkIHVwIHRvCiAgLy8vIHRocmVlIHRpbWVzIGJ5IGBPdXRsaW5lQnVpbGRlcmAsIGBEaWV0TGlzdGVuZXJgLCBhbmQgYEJvZHlCdWlsZGVyYC4KICAvLy8gSWYgdGhlIG1lc3NhZ2UgaXMgbm90IG5ldywgW251bGxdIGlzIHJlcG9ydGVkLgogIC8vLwogIC8vLyBJZiBbc2V2ZXJpdHldIGlzIGBTZXZlcml0eS5lcnJvcmAsIHRoZSBtZXNzYWdlIGlzIGFkZGVkIHRvCiAgLy8vIFtoYW5kbGVkRXJyb3JzXSBpZiBbd2FzSGFuZGxlZF0gaXMgdHJ1ZSBvciB0byBbdW5oYW5kbGVkRXJyb3JzXSBpZgogIC8vLyBbd2FzSGFuZGxlZF0gaXMgZmFsc2UuCiAgRm9ybWF0dGVkTWVzc2FnZSBhZGRNZXNzYWdlKE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsCiAgICAgIFVyaSBmaWxlVXJpLCBTZXZlcml0eSBzZXZlcml0eSwKICAgICAge2Jvb2wgd2FzSGFuZGxlZDogZmFsc2UsCiAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQsCiAgICAgIGJvb2wgcHJvYmxlbU9uTGlicmFyeTogZmFsc2V9KSB7CiAgICBzZXZlcml0eSA9IHRhcmdldC5maXhTZXZlcml0eShzZXZlcml0eSwgbWVzc2FnZSwgZmlsZVVyaSk7CiAgICBpZiAoc2V2ZXJpdHkgPT0gU2V2ZXJpdHkuaWdub3JlZCkgcmV0dXJuIG51bGw7CiAgICBTdHJpbmcgdHJhY2UgPSAiIiIKbWVzc2FnZTogJHttZXNzYWdlLm1lc3NhZ2V9CmNoYXJPZmZzZXQ6ICRjaGFyT2Zmc2V0CmZpbGVVcmk6ICRmaWxlVXJpCnNldmVyaXR5OiAkc2V2ZXJpdHkKIiIiOwogICAgLy8gVE9ETyhhc2tlc2MpOiBTd2FwIG1lc3NhZ2UgYW5kIGNvbnRleHQgYXJvdW5kIGZvciBpbnRlcmZhY2UgY2hlY2tzCiAgICAvLyBhbmQgbWl4aW4gb3ZlcnJpZGVzIHRvIG1ha2UgY29tcGFyaW5nIGNvbnRleHQgaGVyZSB1bm5lY2Vzc2FyeS4KICAgIGlmIChjb250ZXh0ICE9IG51bGwpIHsKICAgICAgZm9yIChMb2NhdGVkTWVzc2FnZSBjb250ZXh0TWVzc2FnZSBpbiBjb250ZXh0KSB7CiAgICAgICAgdHJhY2UgKz0gIiIiCm1lc3NhZ2U6ICR7Y29udGV4dE1lc3NhZ2UubWVzc2FnZX0KY2hhck9mZnNldDogJHtjb250ZXh0TWVzc2FnZS5jaGFyT2Zmc2V0fQpmaWxlVXJpOiAke2NvbnRleHRNZXNzYWdlLnVyaX0KIiIiOwogICAgICB9CiAgICB9CiAgICBpZiAoIXNlZW5NZXNzYWdlcy5hZGQodHJhY2UpKSByZXR1cm4gbnVsbDsKICAgIGlmIChtZXNzYWdlLmNvZGUuc2V2ZXJpdHkgPT0gU2V2ZXJpdHkuY29udGV4dCkgewogICAgICBpbnRlcm5hbFByb2JsZW0oCiAgICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eQogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG1lc3NhZ2UuY29kZS5uYW1lKSwKICAgICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgICBmaWxlVXJpKTsKICAgIH0KICAgIHRhcmdldC5jb250ZXh0LnJlcG9ydCgKICAgICAgICBtZXNzYWdlLndpdGhMb2NhdGlvbihmaWxlVXJpLCBjaGFyT2Zmc2V0LCBsZW5ndGgpLCBzZXZlcml0eSwKICAgICAgICBjb250ZXh0OiBjb250ZXh0KTsKICAgIGlmIChzZXZlcml0eSA9PSBTZXZlcml0eS5lcnJvcikgewogICAgICAod2FzSGFuZGxlZCA/IGhhbmRsZWRFcnJvcnMgOiB1bmhhbmRsZWRFcnJvcnMpCiAgICAgICAgICAuYWRkKG1lc3NhZ2Uud2l0aExvY2F0aW9uKGZpbGVVcmksIGNoYXJPZmZzZXQsIGxlbmd0aCkpOwogICAgfQogICAgRm9ybWF0dGVkTWVzc2FnZSBmb3JtYXR0ZWRNZXNzYWdlID0gdGFyZ2V0LmNyZWF0ZUZvcm1hdHRlZE1lc3NhZ2UoCiAgICAgICAgbWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLCBmaWxlVXJpLCBjb250ZXh0LCBzZXZlcml0eSk7CiAgICBpZiAoIXByb2JsZW1PbkxpYnJhcnkpIHsKICAgICAgYWxsQ29tcG9uZW50UHJvYmxlbXMuYWRkKGZvcm1hdHRlZE1lc3NhZ2UpOwogICAgfQogICAgcmV0dXJuIGZvcm1hdHRlZE1lc3NhZ2U7CiAgfQoKICBEZWNsYXJhdGlvbiBnZXRBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yKCkgewogICAgcmV0dXJuIHRhcmdldC5nZXRBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yKHRoaXMpOwogIH0KCiAgRGVjbGFyYXRpb24gZ2V0Q29tcGlsZVRpbWVFcnJvcigpID0+IHRhcmdldC5nZXRDb21waWxlVGltZUVycm9yKHRoaXMpOwoKICBEZWNsYXJhdGlvbiBnZXREdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yKCkgewogICAgcmV0dXJuIHRhcmdldC5nZXREdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yKHRoaXMpOwogIH0KCiAgRGVjbGFyYXRpb24gZ2V0TmF0aXZlQW5ub3RhdGlvbigpID0+IHRhcmdldC5nZXROYXRpdmVBbm5vdGF0aW9uKHRoaXMpOwoKICBDbGFzc0J1aWxkZXIgY29tcHV0ZUNsYXNzQnVpbGRlckZyb21UYXJnZXRDbGFzcyhjb3ZhcmlhbnQgT2JqZWN0IGNscyk7CgogIFR5cGVCdWlsZGVyIGNvbXB1dGVUeXBlQnVpbGRlcihjb3ZhcmlhbnQgT2JqZWN0IHR5cGUpOwp9CoFfAE5OPAEWASEBJQEvAR5BASkBFwkaGBESGRItMCMBOAEmAT8BIgFKARhFAU8BLwElAU4WBkszQQFQFgZDF0MBTy1MATYBHgFLUBgBFQEjARcBJgE4ASQBRkwkBkwkBlBLRRovRzwdJy0vGAgeHR4aFzIZNThMEwETGxMKCDwwMCU+NisuQgE4TzE1NjU2QkJAEA4BPDAOARMMCggfPTVJMh4IOB8IJCYzCk4gGAgBCEJHFSAbCCQxCE40CCIoCCoWCBxKOAgNRB8eIEdNKQgGFAQBHR84TE9DPiMGBAElITYkMyIIBigrBAEnGStAMSMGKCgEATg5HDs0ClAwSzAIBAE/AUE8AUgpH0AfJBknRiAaLQQBUBsGUE5KNQZBSR1LJh8kJz8zFxwYEhQFSkcbNxUjKR8FCAYvNRcxMRYUBhtFGyY1QwZHQh0yBh0EATU8BAFJATU8BAFJAUkBOQIBJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9sb2FkZXIuZGFydEJzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc2Nhbm5lci9hYnN0cmFjdF9zY2FubmVyLmRhcnTAAOb4Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc2Nhbm5lci5hYnN0cmFjdF9zY2FubmVyOwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgTGlzdE1peGluOwoKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnIHNob3cgVWludDE2TGlzdCwgVWludDMyTGlzdDsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JwogICAgc2hvdyBCZWdpblRva2VuLCBLZXl3b3JkLCBLZXl3b3JkVG9rZW4sIFN5bnRoZXRpY1Rva2VuLCBUb2tlbiwgVG9rZW5UeXBlOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIGFzIGFuYWx5emVyIHNob3cgU3RyaW5nVG9rZW47CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgbWVzc2FnZUV4cGVjdGVkSGV4RGlnaXQsCiAgICAgICAgbWVzc2FnZU1pc3NpbmdFeHBvbmVudCwKICAgICAgICBtZXNzYWdlVW5leHBlY3RlZERvbGxhckluU3RyaW5nLAogICAgICAgIG1lc3NhZ2VVbnRlcm1pbmF0ZWRDb21tZW50OwoKaW1wb3J0ICcuLi9zY2FubmVyLmRhcnQnCiAgICBzaG93IEVycm9yVG9rZW4sIEtleXdvcmQsIFNjYW5uZXIsIGJ1aWxkVW5leHBlY3RlZENoYXJhY3RlclRva2VuOwoKaW1wb3J0ICcuLi91dGlsL2xpbmsuZGFydCcgc2hvdyBMaW5rOwoKaW1wb3J0ICdlcnJvcl90b2tlbi5kYXJ0JwogICAgc2hvdwogICAgICAgIE5vbkFzY2lpSWRlbnRpZmllclRva2VuLAogICAgICAgIFVubWF0Y2hlZFRva2VuLAogICAgICAgIFVuc3VwcG9ydGVkT3BlcmF0b3IsCiAgICAgICAgVW50ZXJtaW5hdGVkU3RyaW5nLAogICAgICAgIFVudGVybWluYXRlZFRva2VuOwoKaW1wb3J0ICdrZXl3b3JkX3N0YXRlLmRhcnQnIHNob3cgS2V5d29yZFN0YXRlOwoKaW1wb3J0ICd0b2tlbi5kYXJ0JwogICAgc2hvdyBDb21tZW50VG9rZW4sIERhcnREb2NUb2tlbiwgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4sIFN0cmluZ1Rva2VuOwoKaW1wb3J0ICd0b2tlbl9jb25zdGFudHMuZGFydCc7CgppbXBvcnQgJ2NoYXJhY3RlcnMuZGFydCc7Cgp0eXBlZGVmIHZvaWQgTGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCgKICAgIFNjYW5uZXIgc2Nhbm5lciwgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4gbGFuZ3VhZ2VWZXJzaW9uKTsKCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0U2Nhbm5lciBpbXBsZW1lbnRzIFNjYW5uZXIgewogIC8qKgogICAqIEEgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgY2hhcmFjdGVyIHNlcXVlbmNlcyBgJiY9YCBhbmQgYHx8PWAKICAgKiBzaG91bGQgYmUgdG9rZW5pemVkIGFzIHRoZSBhc3NpZ25tZW50IG9wZXJhdG9ycwogICAqIFtBTVBFUlNBTkRfQU1QRVJTQU5EX0VRX1RPS0VOXSBhbmQgW0JBUl9CQVJfRVFfVE9LRU5dIHJlc3BlY3RpdmVseS4KICAgKiBTZWUgaXNzdWUgaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzMwMzQwCiAgICovCiAgc3RhdGljIGNvbnN0IGJvb2wgTEFaWV9BU1NJR05NRU5UX0VOQUJMRUQgPSBmYWxzZTsKCiAgZmluYWwgYm9vbCBpbmNsdWRlQ29tbWVudHM7CgogIC8vLyBDYWxsZWQgd2hlbiB0aGUgc2Nhbm5lciBkZXRlY3RzIGEgbGFuZ3VhZ2UgdmVyc2lvbiBjb21tZW50CiAgLy8vIHNvIHRoYXQgdGhlIGxpc3RlbmVyIGNhbiB1cGRhdGUgdGhlIHNjYW5uZXIgY29uZmlndXJhdGlvbgogIC8vLyBiYXNlZCB1cG9uIHRoZSBzcGVjaWZpZWQgbGFuZ3VhZ2UgdmVyc2lvbi4KICBmaW5hbCBMYW5ndWFnZVZlcnNpb25DaGFuZ2VkIGxhbmd1YWdlVmVyc2lvbkNoYW5nZWQ7CgogIC8vLyBFeHBlcmltZW50YWwgZmxhZyBmb3IgZW5hYmxpbmcgc2Nhbm5pbmcgb2YgdGhlIGBleHRlbnNpb25gIHRva2VuLgogIGJvb2wgX2VuYWJsZUV4dGVuc2lvbk1ldGhvZHMgPSBmYWxzZTsKCiAgLy8vIEV4cGVyaW1lbnRhbCBmbGFnIGZvciBlbmFibGluZyBzY2FubmluZyBvZiBOTkJEIHRva2VucwogIC8vLyBzdWNoIGFzICdyZXF1aXJlZCcgYW5kICdsYXRlJy4KICBib29sIF9lbmFibGVOb25OdWxsYWJsZSA9IGZhbHNlOwoKICAvLy8gRXhwZXJpbWVudGFsIGZsYWcgZm9yIGVuYWJsaW5nIHNjYW5uaW5nIG9mIGA+Pj5gLgogIC8vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9sYW5ndWFnZS9pc3N1ZXMvNjEKICAvLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvbGFuZ3VhZ2UvaXNzdWVzLzYwCiAgYm9vbCBfZW5hYmxlVHJpcGxlU2hpZnQgPSBmYWxzZTsKCiAgLyoqCiAgICogVGhlIHN0cmluZyBvZmZzZXQgZm9yIHRoZSBuZXh0IHRva2VuIHRoYXQgd2lsbCBiZSBjcmVhdGVkLgogICAqCiAgICogTm90ZSB0aGF0IGluIHRoZSBbVXRmOEJ5dGVzU2Nhbm5lcl0sIFtzdHJpbmdPZmZzZXRdIGFuZCBbc2Nhbk9mZnNldF0gdmFsdWVzCiAgICogYXJlIGRpZmZlcmVudC4gT25lIHN0cmluZyBjaGFyYWN0ZXIgY2FuIGJlIGVuY29kZWQgdXNpbmcgbXVsdGlwbGUgVVRGLTgKICAgKiBieXRlcy4KICAgKi8KICBpbnQgdG9rZW5TdGFydCA9IC0xOwoKICAvKioKICAgKiBBIHBvaW50ZXIgdG8gdGhlIHRva2VuIHN0cmVhbSBjcmVhdGVkIGJ5IHRoaXMgc2Nhbm5lci4gVGhlIGZpcnN0IHRva2VuCiAgICogaXMgYSBzcGVjaWFsIHRva2VuIGFuZCBub3QgcGFydCBvZiB0aGUgc291cmNlIGZpbGUuIFRoaXMgaXMgYW4KICAgKiBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgdG8gYXZvaWRzIHNwZWNpYWwgY2FzZXMgaW4gdGhlIHNjYW5uZXIuIFRoaXMgdG9rZW4KICAgKiBpcyBub3QgZXhwb3NlZCB0byBjbGllbnRzIG9mIHRoZSBzY2FubmVyLCB3aGljaCBhcmUgZXhwZWN0ZWQgdG8gaW52b2tlCiAgICogW2ZpcnN0VG9rZW5dIHRvIGFjY2VzcyB0aGUgdG9rZW4gc3RyZWFtLgogICAqLwogIGZpbmFsIFRva2VuIHRva2VucyA9IG5ldyBUb2tlbi5lb2YoLTEpOwoKICAvKioKICAgKiBBIHBvaW50ZXIgdG8gdGhlIGxhc3Qgc2Nhbm5lZCB0b2tlbi4KICAgKi8KICBUb2tlbiB0YWlsOwoKICAvKioKICAgKiBBIHBvaW50ZXIgdG8gdGhlIGxhc3QgcHJlcGVuZGVkIGVycm9yIHRva2VuLgogICAqLwogIFRva2VuIGVycm9yVGFpbDsKCiAgYm9vbCBoYXNFcnJvcnMgPSBmYWxzZTsKCiAgLyoqCiAgICogQSBwb2ludGVyIHRvIHRoZSBzdHJlYW0gb2YgY29tbWVudCB0b2tlbnMgY3JlYXRlZCBieSB0aGlzIHNjYW5uZXIKICAgKiBiZWZvcmUgdGhleSBhcmUgYXNzaWduZWQgdG8gdGhlIFtUb2tlbl0gcHJlY2VkaW5nQ29tbWVudHMgZmllbGQKICAgKiBvZiBhIG5vbi1jb21tZW50IHRva2VuLiBBIHZhbHVlIG9mIGBudWxsYCBpbmRpY2F0ZXMgbm8gY29tbWVudCB0b2tlbnMuCiAgICovCiAgQ29tbWVudFRva2VuIGNvbW1lbnRzOwoKICAvKioKICAgKiBBIHBvaW50ZXIgdG8gdGhlIGxhc3Qgc2Nhbm5lZCBjb21tZW50IHRva2VuIG9yIGBudWxsYCBpZiBub25lLgogICAqLwogIFRva2VuIGNvbW1lbnRzVGFpbDsKCiAgZmluYWwgTGlzdDxpbnQ+IGxpbmVTdGFydHM7CgogIC8qKgogICAqIFRoZSBzdGFjayBvZiBvcGVuIGdyb3VwcywgZS5nIFs6IHsgLi4uICggLi4gOl0KICAgKiBFYWNoIEJlZ2luVG9rZW4gaGFzIGEgcG9pbnRlciB0byB0aGUgdG9rZW4gd2hlcmUgdGhlIGdyb3VwCiAgICogZW5kcy4gVGhpcyBmaWVsZCBpcyBzZXQgd2hlbiBzY2FubmluZyB0aGUgZW5kIGdyb3VwIHRva2VuLgogICAqLwogIExpbms8QmVnaW5Ub2tlbj4gZ3JvdXBpbmdTdGFjayA9IGNvbnN0IExpbms8QmVnaW5Ub2tlbj4oKTsKCiAgQWJzdHJhY3RTY2FubmVyKFNjYW5uZXJDb25maWd1cmF0aW9uIGNvbmZpZywgdGhpcy5pbmNsdWRlQ29tbWVudHMsCiAgICAgIHRoaXMubGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCwKICAgICAge2ludCBudW1iZXJPZkJ5dGVzSGludH0pCiAgICAgIDogbGluZVN0YXJ0cyA9IG5ldyBMaW5lU3RhcnRzKG51bWJlck9mQnl0ZXNIaW50KSB7CiAgICB0aGlzLnRhaWwgPSB0aGlzLnRva2VuczsKICAgIHRoaXMuZXJyb3JUYWlsID0gdGhpcy50b2tlbnM7CiAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBjb25maWc7CiAgfQoKICBAb3ZlcnJpZGUKICBzZXQgY29uZmlndXJhdGlvbihTY2FubmVyQ29uZmlndXJhdGlvbiBjb25maWcpIHsKICAgIGlmIChjb25maWcgIT0gbnVsbCkgewogICAgICBfZW5hYmxlRXh0ZW5zaW9uTWV0aG9kcyA9IGNvbmZpZy5lbmFibGVFeHRlbnNpb25NZXRob2RzOwogICAgICBfZW5hYmxlTm9uTnVsbGFibGUgPSBjb25maWcuZW5hYmxlTm9uTnVsbGFibGU7CiAgICAgIF9lbmFibGVUcmlwbGVTaGlmdCA9IGNvbmZpZy5lbmFibGVUcmlwbGVTaGlmdDsKICAgIH0KICB9CgogIC8qKgogICAqIEFkdmFuY2VzIGFuZCByZXR1cm5zIHRoZSBuZXh0IGNoYXJhY3Rlci4KICAgKgogICAqIElmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBub24tQVNDSUksIHRoZW4gdGhlIHJldHVybmVkIHZhbHVlIGRlcGVuZHMgb24gdGhlCiAgICogc2Nhbm5lciBpbXBsZW1lbnRhdGlvbi4gVGhlIFtVdGY4Qnl0ZXNTY2FubmVyXSByZXR1cm5zIGEgVVRGLTggYnl0ZSwgd2hpbGUKICAgKiB0aGUgW1N0cmluZ1NjYW5uZXJdIHJldHVybnMgYSBVVEYtMTYgY29kZSB1bml0LgogICAqCiAgICogVGhlIHNjYW5uZXIgZW5zdXJlcyB0aGF0IFthZHZhbmNlXSBpcyBub3QgaW52b2tlZCBhZnRlciBpdCByZXR1cm5lZCBbJEVPRl0uCiAgICogVGhpcyBhbGxvd3MgaW1wbGVtZW50YXRpb25zIHRvIG9taXQgYm91bmQgY2hlY2tzIGlmIHRoZSBkYXRhIHN0cnVjdHVyZSBlbmRzCiAgICogd2l0aCAnMCcuCiAgICovCiAgaW50IGFkdmFuY2UoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgY3VycmVudCB1bmljb2RlIGNoYXJhY3Rlci4KICAgKgogICAqIElmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBBU0NJSSwgdGhlbiBpdCBpcyByZXR1cm5lZCB1bmNoYW5nZWQuCiAgICoKICAgKiBUaGUgW1V0ZjhCeXRlc1NjYW5uZXJdIGRlY29kZXMgdGhlIG5leHQgdW5pY29kZSBjb2RlIHBvaW50IHN0YXJ0aW5nIGF0IHRoZQogICAqIGN1cnJlbnQgcG9zaXRpb24uIE5vdGUgdGhhdCBldmVyeSB1bmljb2RlIGNoYXJhY3RlciBpcyByZXR1cm5lZCBhcyBhIHNpbmdsZQogICAqIGNvZGUgcG9pbnQsIHRoYXQgaXMsIGZvciAnXHV7MWQxMWV9JyBpdCByZXR1cm5zIDExOTA3MCwgYW5kIHRoZSBmb2xsb3dpbmcKICAgKiBbYWR2YW5jZV0gcmV0dXJucyB0aGUgbmV4dCBjaGFyYWN0ZXIuCiAgICoKICAgKiBUaGUgW1N0cmluZ1NjYW5uZXJdIHJldHVybnMgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIHVuY2hhbmdlZCwgd2hpY2ggbWlnaHQKICAgKiBiZSBhIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIuIEluIHRoZSBjYXNlIG9mICdcdXsxZDExZX0nLCBpdCByZXR1cm5zIHRoZSBmaXJzdAogICAqIGNvZGUgdW5pdCA1NTM0OCwgYW5kIHRoZSBmb2xsb3dpbmcgW2FkdmFuY2VdIHJldHVybnMgdGhlIHNlY29uZCBjb2RlIHVuaXQKICAgKiA1NjYwNi4KICAgKgogICAqIEludm9raW5nIFtjdXJyZW50QXNVbmljb2RlXSBtdWx0aXBsZSB0aW1lcyBpcyBzYWZlLCBpLmUuLAogICAqIFs6Y3VycmVudEFzVW5pY29kZShuZXh0KSA9PSBjdXJyZW50QXNVbmljb2RlKGN1cnJlbnRBc1VuaWNvZGUobmV4dCkpOl0uCiAgICovCiAgaW50IGN1cnJlbnRBc1VuaWNvZGUoaW50IG5leHQpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjaGFyYWN0ZXIgYXQgdGhlIG5leHQgcG9zaXRpb24uIExpa2UgaW4gW2FkdmFuY2VdLCB0aGUKICAgKiBbVXRmOEJ5dGVzU2Nhbm5lcl0gcmV0dXJucyBhIFVURi04IGJ5dGUsIHdoaWxlIHRoZSBbU3RyaW5nU2Nhbm5lcl0gcmV0dXJucwogICAqIGEgVVRGLTE2IGNvZGUgdW5pdC4KICAgKi8KICBpbnQgcGVlaygpOwoKICAvKioKICAgKiBOb3RpZmllcyB0aGUgc2Nhbm5lciB0aGF0IHVuaWNvZGUgY2hhcmFjdGVycyB3ZXJlIGRldGVjdGVkIGluIGVpdGhlciBhCiAgICogY29tbWVudCBvciBhIHN0cmluZyBsaXRlcmFsIGJldHdlZW4gW3N0YXJ0U2Nhbk9mZnNldF0gYW5kIHRoZSBjdXJyZW50CiAgICogc2NhbiBvZmZzZXQuCiAgICovCiAgdm9pZCBoYW5kbGVVbmljb2RlKGludCBzdGFydFNjYW5PZmZzZXQpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHNjYW4gb2Zmc2V0LgogICAqCiAgICogSW4gdGhlIFtVdGY4Qnl0ZXNTY2FubmVyXSB0aGlzIGlzIHRoZSBvZmZzZXQgaW50byB0aGUgYnl0ZSBsaXN0LCBpbiB0aGUKICAgKiBbU3RyaW5nU2Nhbm5lcl0gdGhlIG9mZnNldCBpbiB0aGUgc291cmNlIHN0cmluZy4KICAgKi8KICBpbnQgZ2V0IHNjYW5PZmZzZXQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RyaW5nIG9mZnNldC4KICAgKgogICAqIEluIHRoZSBbU3RyaW5nU2Nhbm5lcl0gdGhpcyBpcyBpZGVudGljYWwgdG8gdGhlIFtzY2FuT2Zmc2V0XS4gSW4gdGhlCiAgICogW1V0ZjhCeXRlc1NjYW5uZXJdIGl0IGlzIGNvbXB1dGVkIGJhc2VkIG9uIGVuY291bnRlcmVkIFVURi04IGNoYXJhY3RlcnMuCiAgICovCiAgaW50IGdldCBzdHJpbmdPZmZzZXQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGZpcnN0IHRva2VuIHNjYW5uZWQgYnkgdGhpcyBbU2Nhbm5lcl0uCiAgICovCiAgVG9rZW4gZmlyc3RUb2tlbigpID0+IHRva2Vucy5uZXh0OwoKICAvKioKICAgKiBOb3RpZmllcyB0aGF0IGEgbmV3IHRva2VuIHN0YXJ0cyBhdCBjdXJyZW50IG9mZnNldC4KICAgKi8KICB2b2lkIGJlZ2luVG9rZW4oKSB7CiAgICB0b2tlblN0YXJ0ID0gc3RyaW5nT2Zmc2V0OwogIH0KCiAgLyoqCiAgICogQXBwZW5kcyBhIHN1YnN0cmluZyBmcm9tIHRoZSBzY2FuIG9mZnNldCBbOnN0YXJ0Ol0gdG8gdGhlIGN1cnJlbnQKICAgKiBbOnNjYW5PZmZzZXQ6XSBwbHVzIHRoZSBbOmV4dHJhT2Zmc2V0Ol0uIEZvciBleGFtcGxlLCBpZiB0aGUgY3VycmVudAogICAqIHNjYW5PZmZzZXQgaXMgMTAsIHRoZW4gWzphcHBlbmRTdWJzdHJpbmdUb2tlbig1LCAtMSk6XSB3aWxsIGFwcGVuZCB0aGUKICAgKiBzdWJzdHJpbmcgc3RyaW5nIFs1LDkpLgogICAqCiAgICogTm90ZSB0aGF0IFtleHRyYU9mZnNldF0gY2FuIG9ubHkgYmUgdXNlZCBpZiB0aGUgY292ZXJlZCBjaGFyYWN0ZXIocykgYXJlCiAgICoga25vd24gdG8gYmUgQVNDSUkuCiAgICovCiAgdm9pZCBhcHBlbmRTdWJzdHJpbmdUb2tlbihUb2tlblR5cGUgdHlwZSwgaW50IHN0YXJ0LCBib29sIGFzY2lpT25seSwKICAgICAgW2ludCBleHRyYU9mZnNldCA9IDBdKSB7CiAgICBhcHBlbmRUb2tlbihjcmVhdGVTdWJzdHJpbmdUb2tlbih0eXBlLCBzdGFydCwgYXNjaWlPbmx5LCBleHRyYU9mZnNldCkpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBzdWJzdHJpbmcgZnJvbSB0aGUgc2NhbiBvZmZzZXQgW3N0YXJ0XSB0byB0aGUgY3VycmVudAogICAqIFtzY2FuT2Zmc2V0XSBwbHVzIHRoZSBbZXh0cmFPZmZzZXRdLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnJlbnQKICAgKiBzY2FuT2Zmc2V0IGlzIDEwLCB0aGVuIFthcHBlbmRTdWJzdHJpbmdUb2tlbig1LCAtMSldIHdpbGwgYXBwZW5kIHRoZQogICAqIHN1YnN0cmluZyBzdHJpbmcgWzUsOSkuCiAgICoKICAgKiBOb3RlIHRoYXQgW2V4dHJhT2Zmc2V0XSBjYW4gb25seSBiZSB1c2VkIGlmIHRoZSBjb3ZlcmVkIGNoYXJhY3RlcihzKSBhcmUKICAgKiBrbm93biB0byBiZSBBU0NJSS4KICAgKi8KICBhbmFseXplci5TdHJpbmdUb2tlbiBjcmVhdGVTdWJzdHJpbmdUb2tlbigKICAgICAgVG9rZW5UeXBlIHR5cGUsIGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHksCiAgICAgIFtpbnQgZXh0cmFPZmZzZXQgPSAwXSk7CgogIC8qKgogICAqIEFwcGVuZHMgYSBzdWJzdHJpbmcgZnJvbSB0aGUgc2NhbiBvZmZzZXQgW3N0YXJ0XSB0byB0aGUgY3VycmVudAogICAqIFtzY2FuT2Zmc2V0XSBwbHVzIFtzeW50aGV0aWNDaGFyc10uIFRoZSBhZGRpdGlvbmFsIGNoYXIocykgd2lsbCBiZSBhZGRlZAogICAqIHRvIHRoZSB1bnRlcm1pbmF0ZWQgc3RyaW5nIGxpdGVyYWwncyBsZXhlbWUgYnV0IHRoZSByZXR1cm5lZAogICAqIHRva2VuJ3MgbGVuZ3RoIHdpbGwgKm5vdCogaW5jbHVkZSB0aG9zZSBhZGRpdGlvbmFsIGNoYXIocykKICAgKiBzbyBhcyB0byBiZSB0cnVlIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UuCiAgICovCiAgdm9pZCBhcHBlbmRTeW50aGV0aWNTdWJzdHJpbmdUb2tlbigKICAgICAgVG9rZW5UeXBlIHR5cGUsIGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHksIFN0cmluZyBzeW50aGV0aWNDaGFycykgewogICAgYXBwZW5kVG9rZW4oCiAgICAgICAgY3JlYXRlU3ludGhldGljU3Vic3RyaW5nVG9rZW4odHlwZSwgc3RhcnQsIGFzY2lpT25seSwgc3ludGhldGljQ2hhcnMpKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgc3ludGhldGljIHN1YnN0cmluZyBmcm9tIHRoZSBzY2FuIG9mZnNldCBbc3RhcnRdCiAgICogdG8gdGhlIGN1cnJlbnQgW3NjYW5PZmZzZXRdIHBsdXMgdGhlIFtzeW50aGV0aWNDaGFyc10uCiAgICogVGhlIFtzeW50aGV0aWNDaGFyc10gYXJlIGFwcGVuZGVkIHRvIHRoZSB1bnRlcm1pbmF0ZWQgc3RyaW5nCiAgICogbGl0ZXJhbCdzIGxleGVtZSBidXQgdGhlIHJldHVybmVkIHRva2VuJ3MgbGVuZ3RoIHdpbGwgKm5vdCogaW5jbHVkZQogICAqIHRob3NlIGFkZGl0aW9uYWwgY2hhcmFjdGVycyBzbyBhcyB0byBiZSB0cnVlIHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UuCiAgICovCiAgYW5hbHl6ZXIuU3RyaW5nVG9rZW4gY3JlYXRlU3ludGhldGljU3Vic3RyaW5nVG9rZW4oCiAgICAgIFRva2VuVHlwZSB0eXBlLCBpbnQgc3RhcnQsIGJvb2wgYXNjaWlPbmx5LCBTdHJpbmcgc3ludGhldGljQ2hhcnMpOwogIC8qKgogICAqIEFwcGVuZHMgYSBmaXhlZCB0b2tlbiB3aG9zZSBraW5kIGFuZCBjb250ZW50IGlzIGRldGVybWluZWQgYnkgW3R5cGVdLgogICAqIEFwcGVuZHMgYW4gKm9wZXJhdG9yKiB0b2tlbiBmcm9tIFt0eXBlXS4KICAgKgogICAqIEFuIG9wZXJhdG9yIHRva2VuIHJlcHJlc2VudCBvcGVyYXRvcnMgbGlrZSAnOicsICcuJywgJzsnLCAnJiYnLCAnPT0nLCAnLS0nLAogICAqICc9PicsIGV0Yy4KICAgKi8KICB2b2lkIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUgdHlwZSkgewogICAgYXBwZW5kVG9rZW4obmV3IFRva2VuKHR5cGUsIHRva2VuU3RhcnQsIGNvbW1lbnRzKSk7CiAgfQoKICAvKioKICAgKiBBcHBlbmRzIGEgZml4ZWQgdG9rZW4gYmFzZWQgb24gd2hldGhlciB0aGUgY3VycmVudCBjaGFyIGlzIFtjaG9pY2VdIG9yIG5vdC4KICAgKiBJZiB0aGUgY3VycmVudCBjaGFyIGlzIFtjaG9pY2VdIGEgZml4ZWQgdG9rZW4gd2hvc2Uga2luZCBhbmQgY29udGVudAogICAqIGlzIGRldGVybWluZWQgYnkgW3llc10gaXMgYXBwZW5kZWQsIG90aGVyd2lzZSBhIGZpeGVkIHRva2VuIHdob3NlIGtpbmQKICAgKiBhbmQgY29udGVudCBpcyBkZXRlcm1pbmVkIGJ5IFtub10gaXMgYXBwZW5kZWQuCiAgICovCiAgaW50IHNlbGVjdChpbnQgY2hvaWNlLCBUb2tlblR5cGUgeWVzLCBUb2tlblR5cGUgbm8pIHsKICAgIGludCBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKGlkZW50aWNhbChuZXh0LCBjaG9pY2UpKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbih5ZXMpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfSBlbHNlIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKG5vKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgfQoKICAvKioKICAgKiBBcHBlbmRzIGEga2V5d29yZCB0b2tlbiB3aG9zZSBraW5kIGlzIGRldGVybWluZWQgYnkgW2tleXdvcmRdLgogICAqLwogIHZvaWQgYXBwZW5kS2V5d29yZFRva2VuKEtleXdvcmQga2V5d29yZCkgewogICAgU3RyaW5nIHN5bnRheCA9IGtleXdvcmQubGV4ZW1lOwogICAgLy8gVHlwZSBwYXJhbWV0ZXJzIGFuZCBhcmd1bWVudHMgY2Fubm90IGNvbnRhaW4gJ3RoaXMnLgogICAgaWYgKGlkZW50aWNhbChzeW50YXgsICd0aGlzJykpIHsKICAgICAgZGlzY2FyZE9wZW5MdCgpOwogICAgfQogICAgYXBwZW5kVG9rZW4obmV3IEtleXdvcmRUb2tlbihrZXl3b3JkLCB0b2tlblN0YXJ0LCBjb21tZW50cykpOwogIH0KCiAgdm9pZCBhcHBlbmRFb2ZUb2tlbigpIHsKICAgIGJlZ2luVG9rZW4oKTsKICAgIGRpc2NhcmRPcGVuTHQoKTsKICAgIHdoaWxlICghZ3JvdXBpbmdTdGFjay5pc0VtcHR5KSB7CiAgICAgIHVubWF0Y2hlZEJlZ2luR3JvdXAoZ3JvdXBpbmdTdGFjay5oZWFkKTsKICAgICAgZ3JvdXBpbmdTdGFjayA9IGdyb3VwaW5nU3RhY2sudGFpbDsKICAgIH0KICAgIGFwcGVuZFRva2VuKG5ldyBUb2tlbi5lb2YodG9rZW5TdGFydCwgY29tbWVudHMpKTsKICB9CgogIC8qKgogICAqIE5vdGlmaWVzIHNjYW5uaW5nIGEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIuIE5vdGUgdGhhdCBbYXBwZW5kV2hpdGVTcGFjZV0gaXMKICAgKiBub3QgYWx3YXlzIGludm9rZWQgZm9yIFskU1BBQ0VdIGNoYXJhY3RlcnMuCiAgICoKICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIGJ5IHRoZSBzY2FubmVycyB0byB0cmFjayBsaW5lIGJyZWFrcyBhbmQgY3JlYXRlIHRoZQogICAqIFtsaW5lU3RhcnRzXSBtYXAuCiAgICovCiAgdm9pZCBhcHBlbmRXaGl0ZVNwYWNlKGludCBuZXh0KSB7CiAgICBpZiAobmV4dCA9PSAkTEYpIHsKICAgICAgbGluZVN0YXJ0cy5hZGQoc3RyaW5nT2Zmc2V0ICsgMSk7IC8vICsxLCB0aGUgbGluZSBzdGFydHMgYWZ0ZXIgdGhlICRMRi4KICAgIH0KICB9CgogIC8qKgogICAqIE5vdGlmaWVzIG9uIFskTEZdIGNoYXJhY3RlcnMgaW4gbXVsdGktbGluZSBjb21tZW50cyBvciBzdHJpbmdzLgogICAqCiAgICogVGhpcyBtZXRob2QgaXMgdXNlZCBieSB0aGUgc2Nhbm5lcnMgdG8gdHJhY2sgbGluZSBicmVha3MgYW5kIGNyZWF0ZSB0aGUKICAgKiBbbGluZVN0YXJ0c10gbWFwLgogICAqLwogIHZvaWQgbGluZUZlZWRJbk11bHRpbGluZSgpIHsKICAgIGxpbmVTdGFydHMuYWRkKHN0cmluZ09mZnNldCArIDEpOwogIH0KCiAgLyoqCiAgICogQXBwZW5kcyBhIHRva2VuIHRoYXQgYmVnaW5zIGEgbmV3IGdyb3VwLCByZXByZXNlbnRlZCBieSBbdHlwZV0uCiAgICogR3JvdXAgYmVnaW4gdG9rZW5zIGFyZSAneycsICcoJywgJ1snLCAnPCcgYW5kICckeycuCiAgICovCiAgdm9pZCBhcHBlbmRCZWdpbkdyb3VwKFRva2VuVHlwZSB0eXBlKSB7CiAgICBUb2tlbiB0b2tlbiA9IG5ldyBCZWdpblRva2VuKHR5cGUsIHRva2VuU3RhcnQsIGNvbW1lbnRzKTsKICAgIGFwcGVuZFRva2VuKHRva2VuKTsKCiAgICAvLyB7IFsgJHsgY2Fubm90IGFwcGVhciBpbnNpZGUgYSB0eXBlIHBhcmFtZXRlcnMgLyBhcmd1bWVudHMuCiAgICBpZiAoIWlkZW50aWNhbCh0eXBlLmtpbmQsIExUX1RPS0VOKSAmJgogICAgICAgICFpZGVudGljYWwodHlwZS5raW5kLCBPUEVOX1BBUkVOX1RPS0VOKSkgewogICAgICBkaXNjYXJkT3Blbkx0KCk7CiAgICB9CiAgICBncm91cGluZ1N0YWNrID0gZ3JvdXBpbmdTdGFjay5wcmVwZW5kKHRva2VuKTsKICB9CgogIC8qKgogICAqIEFwcGVuZHMgYSB0b2tlbiB0aGF0IGJlZ2lucyBhbiBlbmQgZ3JvdXAsIHJlcHJlc2VudGVkIGJ5IFt0eXBlXS4KICAgKiBJdCBoYW5kbGVzIHRoZSBncm91cCBlbmQgdG9rZW5zICd9JywgJyknIGFuZCAnXScuIFRoZSB0b2tlbnMgJz4nIGFuZAogICAqICc+PicgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBieSBbYXBwZW5kR3RdIGFuZCBbYXBwZW5kR3RHdF0uCiAgICovCiAgaW50IGFwcGVuZEVuZEdyb3VwKFRva2VuVHlwZSB0eXBlLCBpbnQgb3BlbktpbmQpIHsKICAgIGFzc2VydCghaWRlbnRpY2FsKG9wZW5LaW5kLCBMVF9UT0tFTikpOyAvLyBvcGVuS2luZCBpcyA8IGZvciA+IGFuZCA+PgogICAgaWYgKCFkaXNjYXJkQmVnaW5Hcm91cFVudGlsKG9wZW5LaW5kKSkgewogICAgICAvLyBObyBiZWdpbiBncm91cCBmb3VuZC4gSnVzdCBjb250aW51ZS4KICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKHR5cGUpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfQogICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKHR5cGUpOwogICAgVG9rZW4gY2xvc2UgPSB0YWlsOwogICAgQmVnaW5Ub2tlbiBiZWdpbiA9IGdyb3VwaW5nU3RhY2suaGVhZDsKICAgIGlmICghaWRlbnRpY2FsKGJlZ2luLmtpbmQsIG9wZW5LaW5kKSAmJgogICAgICAgICEoYmVnaW4ua2luZCA9PSBRVUVTVElPTl9QRVJJT0RfT1BFTl9TUVVBUkVfQlJBQ0tFVF9UT0tFTiAmJgogICAgICAgICAgICBvcGVuS2luZCA9PSBPUEVOX1NRVUFSRV9CUkFDS0VUX1RPS0VOKSkgewogICAgICBhc3NlcnQoYmVnaW4ua2luZCA9PSBTVFJJTkdfSU5URVJQT0xBVElPTl9UT0tFTiAmJgogICAgICAgICAgb3BlbktpbmQgPT0gT1BFTl9DVVJMWV9CUkFDS0VUX1RPS0VOKTsKICAgICAgLy8gV2UncmUgZW5kaW5nIGFuIGludGVycG9sYXRlZCBleHByZXNzaW9uLgogICAgICBiZWdpbi5lbmRHcm91cCA9IGNsb3NlOwogICAgICBncm91cGluZ1N0YWNrID0gZ3JvdXBpbmdTdGFjay50YWlsOwogICAgICAvLyBVc2luZyAic3RhcnQtb2YtdGV4dCIgdG8gc2lnbmFsIHRoYXQgd2UncmUgYmFjayBpbiBzdHJpbmcKICAgICAgLy8gc2Nhbm5pbmcgbW9kZS4KICAgICAgcmV0dXJuICRTVFg7CiAgICB9CiAgICBiZWdpbi5lbmRHcm91cCA9IGNsb3NlOwogICAgZ3JvdXBpbmdTdGFjayA9IGdyb3VwaW5nU3RhY2sudGFpbDsKICAgIHJldHVybiBhZHZhbmNlKCk7CiAgfQoKICAvKioKICAgKiBBcHBlbmRzIGEgdG9rZW4gZm9yICc+Jy4KICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBpc3N1ZSB1bm1hdGNoZWQgZXJyb3JzLCBiZWNhdXNlID4gaXMgYWxzbyB0aGUKICAgKiBncmVhdGVyLXRoYW4gb3BlcmF0b3IuIEl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gY2xvc2UgYSBncm91cC4KICAgKi8KICB2b2lkIGFwcGVuZEd0KFRva2VuVHlwZSB0eXBlKSB7CiAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4odHlwZSk7CiAgICBpZiAoZ3JvdXBpbmdTdGFjay5pc0VtcHR5KSByZXR1cm47CiAgICBpZiAoaWRlbnRpY2FsKGdyb3VwaW5nU3RhY2suaGVhZC5raW5kLCBMVF9UT0tFTikpIHsKICAgICAgZ3JvdXBpbmdTdGFjay5oZWFkLmVuZEdyb3VwID0gdGFpbDsKICAgICAgZ3JvdXBpbmdTdGFjayA9IGdyb3VwaW5nU3RhY2sudGFpbDsKICAgIH0KICB9CgogIC8qKgogICAqIEFwcGVuZHMgYSB0b2tlbiBmb3IgJz4+Jy4KICAgKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCBpc3N1ZSB1bm1hdGNoZWQgZXJyb3JzLCBiZWNhdXNlID4+IGlzIGFsc28gdGhlCiAgICogc2hpZnQgb3BlcmF0b3IuIEl0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IGhhdmUgdG8gY2xvc2UgYSBncm91cC4KICAgKi8KICB2b2lkIGFwcGVuZEd0R3QoVG9rZW5UeXBlIHR5cGUpIHsKICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbih0eXBlKTsKICAgIGlmIChncm91cGluZ1N0YWNrLmlzRW1wdHkpIHJldHVybjsKICAgIGlmIChpZGVudGljYWwoZ3JvdXBpbmdTdGFjay5oZWFkLmtpbmQsIExUX1RPS0VOKSkgewogICAgICAvLyBEb24ndCBhc3NpZ24gZW5kR3JvdXA6IGluICJUPFU8Vj4+IiwgdGhlICc+PicgdG9rZW4gY2xvc2VzIHRoZSBvdXRlcgogICAgICAvLyAnPCcsIHRoZSBpbm5lciAnPCcgaXMgbGVmdCB3aXRob3V0IGVuZEdyb3VwLgogICAgICBncm91cGluZ1N0YWNrID0gZ3JvdXBpbmdTdGFjay50YWlsOwogICAgfQogICAgaWYgKGdyb3VwaW5nU3RhY2suaXNFbXB0eSkgcmV0dXJuOwogICAgaWYgKGlkZW50aWNhbChncm91cGluZ1N0YWNrLmhlYWQua2luZCwgTFRfVE9LRU4pKSB7CiAgICAgIGdyb3VwaW5nU3RhY2suaGVhZC5lbmRHcm91cCA9IHRhaWw7CiAgICAgIGdyb3VwaW5nU3RhY2sgPSBncm91cGluZ1N0YWNrLnRhaWw7CiAgICB9CiAgfQoKICAvLy8gUHJlcGVuZCBbdG9rZW5dIHRvIHRoZSB0b2tlbiBzdHJlYW0uCiAgdm9pZCBwcmVwZW5kRXJyb3JUb2tlbihFcnJvclRva2VuIHRva2VuKSB7CiAgICBoYXNFcnJvcnMgPSB0cnVlOwogICAgaWYgKGVycm9yVGFpbCA9PSB0YWlsKSB7CiAgICAgIGFwcGVuZFRva2VuKHRva2VuKTsKICAgICAgZXJyb3JUYWlsID0gdGFpbDsKICAgIH0gZWxzZSB7CiAgICAgIHRva2VuLm5leHQgPSBlcnJvclRhaWwubmV4dDsKICAgICAgdG9rZW4ubmV4dC5wcmV2aW91cyA9IHRva2VuOwogICAgICBlcnJvclRhaWwubmV4dCA9IHRva2VuOwogICAgICB0b2tlbi5wcmV2aW91cyA9IGVycm9yVGFpbDsKICAgICAgZXJyb3JUYWlsID0gZXJyb3JUYWlsLm5leHQ7CiAgICB9CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGNvbW1lbnQgZnJvbSB0aGUgc2NhbiBvZmZzZXQgW3N0YXJ0XSB0byB0aGUgY3VycmVudAogICAqIFtzY2FuT2Zmc2V0XSBwbHVzIHRoZSBbZXh0cmFPZmZzZXRdLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnJlbnQKICAgKiBzY2FuT2Zmc2V0IGlzIDEwLCB0aGVuIFthcHBlbmRTdWJzdHJpbmdUb2tlbig1LCAtMSldIHdpbGwgYXBwZW5kIHRoZQogICAqIHN1YnN0cmluZyBzdHJpbmcgWzUsOSkuCiAgICoKICAgKiBOb3RlIHRoYXQgW2V4dHJhT2Zmc2V0XSBjYW4gb25seSBiZSB1c2VkIGlmIHRoZSBjb3ZlcmVkIGNoYXJhY3RlcihzKSBhcmUKICAgKiBrbm93biB0byBiZSBBU0NJSS4KICAgKi8KICBDb21tZW50VG9rZW4gY3JlYXRlQ29tbWVudFRva2VuKFRva2VuVHlwZSB0eXBlLCBpbnQgc3RhcnQsIGJvb2wgYXNjaWlPbmx5LAogICAgICBbaW50IGV4dHJhT2Zmc2V0ID0gMF0pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGRhcnRkb2MgZnJvbSB0aGUgc2NhbiBvZmZzZXQgW3N0YXJ0XSB0byB0aGUgY3VycmVudAogICAqIFtzY2FuT2Zmc2V0XSBwbHVzIHRoZSBbZXh0cmFPZmZzZXRdLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGN1cnJlbnQKICAgKiBzY2FuT2Zmc2V0IGlzIDEwLCB0aGVuIFthcHBlbmRTdWJzdHJpbmdUb2tlbig1LCAtMSldIHdpbGwgYXBwZW5kIHRoZQogICAqIHN1YnN0cmluZyBzdHJpbmcgWzUsOSkuCiAgICoKICAgKiBOb3RlIHRoYXQgW2V4dHJhT2Zmc2V0XSBjYW4gb25seSBiZSB1c2VkIGlmIHRoZSBjb3ZlcmVkIGNoYXJhY3RlcihzKSBhcmUKICAgKiBrbm93biB0byBiZSBBU0NJSS4KICAgKi8KICBEYXJ0RG9jVG9rZW4gY3JlYXRlRGFydERvY1Rva2VuKFRva2VuVHlwZSB0eXBlLCBpbnQgc3RhcnQsIGJvb2wgYXNjaWlPbmx5LAogICAgICBbaW50IGV4dHJhT2Zmc2V0ID0gMF0pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxhbmd1YWdlIHZlcnNpb24gdG9rZW4gZnJvbSB0aGUgc2NhbiBvZmZzZXQgW3N0YXJ0XQogICAqIHRvIHRoZSBjdXJyZW50IFtzY2FuT2Zmc2V0XSBzaW1pbGFyIHRvIGNyZWF0ZUNvbW1lbnRUb2tlbi4KICAgKi8KICBMYW5ndWFnZVZlcnNpb25Ub2tlbiBjcmVhdGVMYW5ndWFnZVZlcnNpb25Ub2tlbigKICAgICAgaW50IHN0YXJ0LCBpbnQgbWFqb3IsIGludCBtaW5vcik7CgogIC8qKgogICAqIElmIGEgYmVnaW4gZ3JvdXAgdG9rZW4gbWF0Y2hlcyBbb3BlbktpbmRdLAogICAqIHRoZW4gZGlzY2FyZCBiZWdpbiBncm91cCB0b2tlbnMgdXAgdG8gdGhhdCBtYXRjaCBhbmQgcmV0dXJuIGB0cnVlYCwKICAgKiBvdGhlcndpc2UgcmV0dXJuIGBmYWxzZWAuCiAgICogVGhpcyByZWNvdmVycyBuaWNlbHkgZnJvbSBmcm9tIHNpdHVhdGlvbnMgbGlrZSAie1t9IiBhbmQgIntmb28oKSk7fSIsCiAgICogYnV0IG5vdCAiZm9vKCgpIHtiYXIoKSk7fSk7CiAgICovCiAgYm9vbCBkaXNjYXJkQmVnaW5Hcm91cFVudGlsKGludCBvcGVuS2luZCkgewogICAgTGluazxCZWdpblRva2VuPiBvcmlnaW5hbFN0YWNrID0gZ3JvdXBpbmdTdGFjazsKCiAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgIGRvIHsKICAgICAgLy8gRG9uJ3QgcmVwb3J0IHVubWF0Y2hlZCBlcnJvcnMgZm9yIDw7IGl0IGlzIGFsc28gdGhlIGxlc3MtdGhhbiBvcGVyYXRvci4KICAgICAgZGlzY2FyZE9wZW5MdCgpOwogICAgICBpZiAoZ3JvdXBpbmdTdGFjay5pc0VtcHR5KSBicmVhazsgLy8gcmVjb3ZlcgogICAgICBCZWdpblRva2VuIGJlZ2luID0gZ3JvdXBpbmdTdGFjay5oZWFkOwogICAgICBpZiAob3BlbktpbmQgPT0gYmVnaW4ua2luZCB8fAogICAgICAgICAgKG9wZW5LaW5kID09IE9QRU5fQ1VSTFlfQlJBQ0tFVF9UT0tFTiAmJgogICAgICAgICAgICAgIGJlZ2luLmtpbmQgPT0gU1RSSU5HX0lOVEVSUE9MQVRJT05fVE9LRU4pIHx8CiAgICAgICAgICAob3BlbktpbmQgPT0gT1BFTl9TUVVBUkVfQlJBQ0tFVF9UT0tFTiAmJgogICAgICAgICAgICAgIGJlZ2luLmtpbmQgPT0gUVVFU1RJT05fUEVSSU9EX09QRU5fU1FVQVJFX0JSQUNLRVRfVE9LRU4pKSB7CiAgICAgICAgaWYgKGZpcnN0KSB7CiAgICAgICAgICAvLyBJZiB0aGUgZXhwZWN0ZWQgb3BlbmVyIGhhcyBiZWVuIGZvdW5kIG9uIHRoZSBmaXJzdCBwYXNzCiAgICAgICAgICAvLyB0aGVuIG5vIHJlY292ZXJ5IG5lY2Vzc2FyeS4KICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBicmVhazsgLy8gcmVjb3ZlcgogICAgICB9CiAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgIGdyb3VwaW5nU3RhY2sgPSBncm91cGluZ1N0YWNrLnRhaWw7CiAgICB9IHdoaWxlICghZ3JvdXBpbmdTdGFjay5pc0VtcHR5KTsKCiAgICAvLyBJZiB0aGUgc3RhY2sgZG9lcyBub3QgaGF2ZSBhbnkgb3BlbmVyIG9mIHRoZSBnaXZlbiB0eXBlLAogICAgLy8gdGhlbiByZXR1cm4gd2l0aG91dCBkaXNjYXJkaW5nIGFueXRoaW5nLgogICAgLy8gVGhpcyByZWNvdmVycyBuaWNlbHkgZnJvbSBmcm9tIHNpdHVhdGlvbnMgbGlrZSAie2ZvbygpKTt9Ii4KICAgIGlmIChncm91cGluZ1N0YWNrLmlzRW1wdHkpIHsKICAgICAgZ3JvdXBpbmdTdGFjayA9IG9yaWdpbmFsU3RhY2s7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvLyBJbnNlcnQgc3ludGhldGljIGNsb3NlcnMgYW5kIHJlcG9ydCBlcnJvcnMgZm9yIGFueSB1bmJhbGFuY2VkIG9wZW5lcnMuCiAgICAvLyBUaGlzIHJlY292ZXJzIG5pY2VseSBmcm9tIGZyb20gc2l0dWF0aW9ucyBsaWtlICJ7W30iLgogICAgd2hpbGUgKCFpZGVudGljYWwob3JpZ2luYWxTdGFjaywgZ3JvdXBpbmdTdGFjaykpIHsKICAgICAgLy8gRG9uJ3QgcmVwb3J0IHVubWF0Y2hlZCBlcnJvcnMgZm9yIDw7IGl0IGlzIGFsc28gdGhlIGxlc3MtdGhhbiBvcGVyYXRvci4KICAgICAgaWYgKCFpZGVudGljYWwoZ3JvdXBpbmdTdGFjay5oZWFkLmtpbmQsIExUX1RPS0VOKSkKICAgICAgICB1bm1hdGNoZWRCZWdpbkdyb3VwKG9yaWdpbmFsU3RhY2suaGVhZCk7CiAgICAgIG9yaWdpbmFsU3RhY2sgPSBvcmlnaW5hbFN0YWNrLnRhaWw7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8qKgogICAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBkaXNjYXJkICc8JyBmcm9tIHRoZSAiZ3JvdXBpbmciIHN0YWNrLgogICAqCiAgICogW1BhcnRpYWxQYXJzZXIuc2tpcEV4cHJlc3Npb25dIHJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IHdlIGRvIG5vdAogICAqIGNyZWF0ZSBncm91cHMgZm9yIHN0dWZmIGxpa2U6CiAgICogWzphID0gYiA8IGMsIGQgPSBlID4gZjpdLgogICAqCiAgICogSW4gb3RoZXIgd29yZHMsIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSBzY2FubmVyIHJlY29nbml6ZXMKICAgKiBzb21ldGhpbmcgd2hpY2ggY2Fubm90IHBvc3NpYmx5IGJlIHBhcnQgb2YgYSB0eXBlIHBhcmFtZXRlci9hcmd1bWVudAogICAqIGxpc3QsIGxpa2UgdGhlICc9JyBpbiB0aGUgYWJvdmUgZXhhbXBsZS4KICAgKi8KICB2b2lkIGRpc2NhcmRPcGVuTHQoKSB7CiAgICB3aGlsZSAoIWdyb3VwaW5nU3RhY2suaXNFbXB0eSAmJgogICAgICAgIGlkZW50aWNhbChncm91cGluZ1N0YWNrLmhlYWQua2luZCwgTFRfVE9LRU4pKSB7CiAgICAgIGdyb3VwaW5nU3RhY2sgPSBncm91cGluZ1N0YWNrLnRhaWw7CiAgICB9CiAgfQoKICAvKioKICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZGlzY2FyZCAnJHsnIGZyb20gdGhlICJncm91cGluZyIgc3RhY2suCiAgICoKICAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB0aGUgc2Nhbm5lciBmaW5kcyBhbiB1bnRlcm1pbmF0ZWQKICAgKiBpbnRlcnBvbGF0aW9uIGV4cHJlc3Npb24uCiAgICovCiAgdm9pZCBkaXNjYXJkSW50ZXJwb2xhdGlvbigpIHsKICAgIHdoaWxlICghZ3JvdXBpbmdTdGFjay5pc0VtcHR5KSB7CiAgICAgIEJlZ2luVG9rZW4gYmVnaW5Ub2tlbiA9IGdyb3VwaW5nU3RhY2suaGVhZDsKICAgICAgdW5tYXRjaGVkQmVnaW5Hcm91cChiZWdpblRva2VuKTsKICAgICAgZ3JvdXBpbmdTdGFjayA9IGdyb3VwaW5nU3RhY2sudGFpbDsKICAgICAgaWYgKGlkZW50aWNhbChiZWdpblRva2VuLmtpbmQsIFNUUklOR19JTlRFUlBPTEFUSU9OX1RPS0VOKSkgYnJlYWs7CiAgICB9CiAgfQoKICB2b2lkIHVubWF0Y2hlZEJlZ2luR3JvdXAoQmVnaW5Ub2tlbiBiZWdpbikgewogICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCB1bm1hdGNoZWQgQmVnaW5Ub2tlbnMgYXJlIHJlcG9ydGVkIGFzCiAgICAvLyBlcnJvcnMuICBIb3dldmVyLCB0aGUgZGlldCBwYXJzZXIgYXNzdW1lcyB0aGF0IGdyb3VwcyBhcmUgd2VsbC1iYWxhbmNlZAogICAgLy8gYW5kIHdpbGwgbmV2ZXIgbG9vayBhdCB0aGUgZW5kR3JvdXAgdG9rZW4uICBUaGlzIGlzIGEgbmljZSBwcm9wZXJ0eSB0aGF0CiAgICAvLyBhbGxvd3MgdXMgdG8gc2tpcCBxdWlja2x5IG92ZXIgY29ycmVjdCBjb2RlLiBCeSBpbnNlcnRpbmcgYW4gYWRkaXRpb25hbAogICAgLy8gc3ludGhldGljIHRva2VuIGluIHRoZSBzdHJlYW0sIHdlIGNhbiBrZWVwIGlnbm9yaW5nIGVuZEdyb3VwIHRva2Vucy4KICAgIC8vCiAgICAvLyBbYmVnaW5dIC0tbmV4dC0tPiBbdGFpbF0KICAgIC8vIFtiZWdpbl0gLS1lbmRHLS0+IFtzeW50aGV0aWNdIC0tbmV4dC0tPiBbbmV4dF0gLS1uZXh0LS0+IFt0YWlsXQogICAgLy8KICAgIC8vIFRoaXMgYWxsb3dzIHRoZSBkaWV0IHBhcnNlciB0byBza2lwIGZyb20gW2JlZ2luXSB2aWEgZW5kR3JvdXAgdG8KICAgIC8vIFtzeW50aGV0aWNdIGFuZCBpZ25vcmUgdGhlIFtzeW50aGV0aWNdIHRva2VuIChhc3N1bWluZyBpdCdzIGNvcnJlY3QpLAogICAgLy8gdGhlbiB0aGUgZXJyb3Igd2lsbCBiZSByZXBvcnRlZCB3aGVuIHBhcnNpbmcgdGhlIFtuZXh0XSB0b2tlbi4KICAgIC8vCiAgICAvLyBGb3IgZXhhbXBsZSwgdG9rZW5pemUoIntbMX07IikgcHJvZHVjZXM6CiAgICAvLwogICAgLy8gU3ltYm9sVG9rZW4oeykgLS1lbmRHcm91cC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyAgICAgbmV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vIFN5bWJvbFRva2VuKFspIC0tZW5kR3JvdXAtLSsgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gICAgIG5leHQgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vICAgICAgdiAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyBTdHJpbmdUb2tlbigxKSAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vICAgICBuZXh0ICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyAgICAgIHYgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gU3ltYm9sVG9rZW4oXSk8LS0tLS0tLS0tLS0tKyA8LS0gU3ludGhldGljIHRva2VuIHwKICAgIC8vICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyAgICAgbmV4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vIFVubWF0Y2hlZFRva2VuKFspICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgLy8gICAgIG5leHQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgIC8vICAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAvLyBTeW1ib2xUb2tlbih9KTwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwogICAgLy8gICAgICB8CiAgICAvLyAgICAgbmV4dAogICAgLy8gICAgICB2CiAgICAvLyBTeW1ib2xUb2tlbig7KQogICAgLy8gICAgICB8CiAgICAvLyAgICAgbmV4dAogICAgLy8gICAgICB2CiAgICAvLyAgICAgRU9GCiAgICBUb2tlblR5cGUgdHlwZSA9IGNsb3NlQnJhY2VJbmZvRm9yKGJlZ2luKTsKICAgIGFwcGVuZFRva2VuKG5ldyBTeW50aGV0aWNUb2tlbih0eXBlLCB0b2tlblN0YXJ0KS4uYmVmb3JlU3ludGhldGljID0gdGFpbCk7CiAgICBiZWdpbi5lbmRHcm91cCA9IHRhaWw7CiAgICBwcmVwZW5kRXJyb3JUb2tlbihuZXcgVW5tYXRjaGVkVG9rZW4oYmVnaW4pKTsKICB9CgogIC8vLyBSZXR1cm4gdHJ1ZSB3aGVuIGF0IEVPRi4KICBib29sIGF0RW5kT2ZGaWxlKCk7CgogIFRva2VuIHRva2VuaXplKCkgewogICAgd2hpbGUgKCFhdEVuZE9mRmlsZSgpKSB7CiAgICAgIGludCBuZXh0ID0gYWR2YW5jZSgpOwoKICAgICAgLy8gU2NhbiB0aGUgaGVhZGVyIGxvb2tpbmcgZm9yIGEgbGFuZ3VhZ2UgdmVyc2lvbgogICAgICBpZiAoIWlkZW50aWNhbChuZXh0LCAkRU9GKSkgewogICAgICAgIFRva2VuIG9sZFRhaWwgPSB0YWlsOwogICAgICAgIG5leHQgPSBiaWdIZWFkZXJTd2l0Y2gobmV4dCk7CiAgICAgICAgaWYgKCFpZGVudGljYWwobmV4dCwgJEVPRikgJiYgdGFpbC5raW5kID09IFNDUklQVF9UT0tFTikgewogICAgICAgICAgb2xkVGFpbCA9IHRhaWw7CiAgICAgICAgICBuZXh0ID0gYmlnSGVhZGVyU3dpdGNoKG5leHQpOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoIWlkZW50aWNhbChuZXh0LCAkRU9GKSAmJiB0YWlsID09IG9sZFRhaWwpIHsKICAgICAgICAgIG5leHQgPSBiaWdIZWFkZXJTd2l0Y2gobmV4dCk7CiAgICAgICAgfQogICAgICAgIG5leHQgPSBuZXh0OwogICAgICB9CgogICAgICB3aGlsZSAoIWlkZW50aWNhbChuZXh0LCAkRU9GKSkgewogICAgICAgIG5leHQgPSBiaWdTd2l0Y2gobmV4dCk7CiAgICAgIH0KICAgICAgaWYgKGF0RW5kT2ZGaWxlKCkpIHsKICAgICAgICBhcHBlbmRFb2ZUb2tlbigpOwogICAgICB9IGVsc2UgewogICAgICAgIHVuZXhwZWN0ZWQoJEVPRik7CiAgICAgIH0KICAgIH0KCiAgICAvLyBBbHdheXMgcHJldGVuZCB0aGF0IHRoZXJlJ3MgYSBsaW5lIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCiAgICBsaW5lU3RhcnRzLmFkZChzdHJpbmdPZmZzZXQgKyAxKTsKCiAgICByZXR1cm4gZmlyc3RUb2tlbigpOwogIH0KCiAgaW50IGJpZ0hlYWRlclN3aXRjaChpbnQgbmV4dCkgewogICAgaWYgKCFpZGVudGljYWwobmV4dCwgJFNMQVNIKSkgewogICAgICByZXR1cm4gYmlnU3dpdGNoKG5leHQpOwogICAgfQogICAgYmVnaW5Ub2tlbigpOwogICAgaWYgKCFpZGVudGljYWwoJFNMQVNILCBwZWVrKCkpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNsYXNoT3JDb21tZW50KG5leHQpOwogICAgfQogICAgcmV0dXJuIHRva2VuaXplTGFuZ3VhZ2VWZXJzaW9uT3JTaW5nbGVMaW5lQ29tbWVudChuZXh0KTsKICB9CgogIGludCBiaWdTd2l0Y2goaW50IG5leHQpIHsKICAgIGJlZ2luVG9rZW4oKTsKICAgIGlmIChpZGVudGljYWwobmV4dCwgJFNQQUNFKSB8fAogICAgICAgIGlkZW50aWNhbChuZXh0LCAkVEFCKSB8fAogICAgICAgIGlkZW50aWNhbChuZXh0LCAkTEYpIHx8CiAgICAgICAgaWRlbnRpY2FsKG5leHQsICRDUikpIHsKICAgICAgYXBwZW5kV2hpdGVTcGFjZShuZXh0KTsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgLy8gU2VxdWVuY2VzIG9mIHNwYWNlcyBhcmUgY29tbW9uLCBzbyBhZHZhbmNlIHRocm91Z2ggdGhlbSBmYXN0LgogICAgICB3aGlsZSAoaWRlbnRpY2FsKG5leHQsICRTUEFDRSkpIHsKICAgICAgICAvLyBXZSBkb24ndCBpbnZva2UgWzphcHBlbmRXaGl0ZVNwYWNlKG5leHQpOl0gaGVyZSBmb3IgZWZmaWNpZW5jeSwKICAgICAgICAvLyBhc3N1bWluZyB0aGF0IGl0IGRvZXMgbm90IGRvIGFueXRoaW5nIGZvciBzcGFjZSBjaGFyYWN0ZXJzLgogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CgogICAgaW50IG5leHRMb3dlciA9IG5leHQgfCAweDIwOwoKICAgIGlmICgkYSA8PSBuZXh0TG93ZXIgJiYgbmV4dExvd2VyIDw9ICR6KSB7CiAgICAgIGlmIChpZGVudGljYWwoJHIsIG5leHQpKSB7CiAgICAgICAgcmV0dXJuIHRva2VuaXplUmF3U3RyaW5nS2V5d29yZE9ySWRlbnRpZmllcihuZXh0KTsKICAgICAgfQogICAgICByZXR1cm4gdG9rZW5pemVLZXl3b3JkT3JJZGVudGlmaWVyKG5leHQsIHRydWUpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJENMT1NFX1BBUkVOKSkgewogICAgICByZXR1cm4gYXBwZW5kRW5kR3JvdXAoVG9rZW5UeXBlLkNMT1NFX1BBUkVOLCBPUEVOX1BBUkVOX1RPS0VOKTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRPUEVOX1BBUkVOKSkgewogICAgICBhcHBlbmRCZWdpbkdyb3VwKFRva2VuVHlwZS5PUEVOX1BBUkVOKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRTRU1JQ09MT04pKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuU0VNSUNPTE9OKTsKICAgICAgLy8gVHlwZSBwYXJhbWV0ZXJzIGFuZCBhcmd1bWVudHMgY2Fubm90IGNvbnRhaW4gc2VtaWNvbG9uLgogICAgICBkaXNjYXJkT3Blbkx0KCk7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkUEVSSU9EKSkgewogICAgICByZXR1cm4gdG9rZW5pemVEb3RzT3JOdW1iZXIobmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQ09NTUEpKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuQ09NTUEpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJEVRKSkgewogICAgICByZXR1cm4gdG9rZW5pemVFcXVhbHMobmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQ0xPU0VfQ1VSTFlfQlJBQ0tFVCkpIHsKICAgICAgcmV0dXJuIGFwcGVuZEVuZEdyb3VwKAogICAgICAgICAgVG9rZW5UeXBlLkNMT1NFX0NVUkxZX0JSQUNLRVQsIE9QRU5fQ1VSTFlfQlJBQ0tFVF9UT0tFTik7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkU0xBU0gpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNsYXNoT3JDb21tZW50KG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJE9QRU5fQ1VSTFlfQlJBQ0tFVCkpIHsKICAgICAgYXBwZW5kQmVnaW5Hcm91cChUb2tlblR5cGUuT1BFTl9DVVJMWV9CUkFDS0VUKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICREUSkgfHwgaWRlbnRpY2FsKG5leHQsICRTUSkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplU3RyaW5nKG5leHQsIHNjYW5PZmZzZXQsIGZhbHNlKTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRfKSkgewogICAgICByZXR1cm4gdG9rZW5pemVLZXl3b3JkT3JJZGVudGlmaWVyKG5leHQsIHRydWUpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJENPTE9OKSkgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkNPTE9OKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRMVCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplTGVzc1RoYW4obmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkR1QpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUdyZWF0ZXJUaGFuKG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJEJBTkcpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUV4Y2xhbWF0aW9uKG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJE9QRU5fU1FVQVJFX0JSQUNLRVQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZU9wZW5TcXVhcmVCcmFja2V0KG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJENMT1NFX1NRVUFSRV9CUkFDS0VUKSkgewogICAgICByZXR1cm4gYXBwZW5kRW5kR3JvdXAoCiAgICAgICAgICBUb2tlblR5cGUuQ0xPU0VfU1FVQVJFX0JSQUNLRVQsIE9QRU5fU1FVQVJFX0JSQUNLRVRfVE9LRU4pOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJEFUKSkgewogICAgICByZXR1cm4gdG9rZW5pemVBdChuZXh0KTsKICAgIH0KCiAgICBpZiAobmV4dCA+PSAkMSAmJiBuZXh0IDw9ICQ5KSB7CiAgICAgIHJldHVybiB0b2tlbml6ZU51bWJlcihuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRBTVBFUlNBTkQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUFtcGVyc2FuZChuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICQwKSkgewogICAgICByZXR1cm4gdG9rZW5pemVIZXhPck51bWJlcihuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRRVUVTVElPTikpIHsKICAgICAgcmV0dXJuIHRva2VuaXplUXVlc3Rpb24obmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQkFSKSkgewogICAgICByZXR1cm4gdG9rZW5pemVCYXIobmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkUExVUykpIHsKICAgICAgcmV0dXJuIHRva2VuaXplUGx1cyhuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICQkKSkgewogICAgICByZXR1cm4gdG9rZW5pemVLZXl3b3JkT3JJZGVudGlmaWVyKG5leHQsIHRydWUpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJE1JTlVTKSkgewogICAgICByZXR1cm4gdG9rZW5pemVNaW51cyhuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRTVEFSKSkgewogICAgICByZXR1cm4gdG9rZW5pemVNdWx0aXBseShuZXh0KTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRDQVJFVCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplQ2FyZXQobmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkVElMREUpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVRpbGRlKG5leHQpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJFBFUkNFTlQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVBlcmNlbnQobmV4dCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQkFDS1BJTkcpKSB7CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuQkFDS1BJTkcpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJEJBQ0tTTEFTSCkpIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5CQUNLU0xBU0gpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfQoKICAgIGlmIChpZGVudGljYWwobmV4dCwgJEhBU0gpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVRhZyhuZXh0KTsKICAgIH0KCiAgICBpZiAobmV4dCA8IDB4MWYpIHsKICAgICAgcmV0dXJuIHVuZXhwZWN0ZWQobmV4dCk7CiAgICB9CgogICAgbmV4dCA9IGN1cnJlbnRBc1VuaWNvZGUobmV4dCk7CgogICAgcmV0dXJuIHVuZXhwZWN0ZWQobmV4dCk7CiAgfQoKICBpbnQgdG9rZW5pemVUYWcoaW50IG5leHQpIHsKICAgIC8vICMgb3IgIyEuKltcblxyXQogICAgaWYgKHNjYW5PZmZzZXQgPT0gMCkgewogICAgICBpZiAoaWRlbnRpY2FsKHBlZWsoKSwgJEJBTkcpKSB7CiAgICAgICAgaW50IHN0YXJ0ID0gc2Nhbk9mZnNldDsKICAgICAgICBib29sIGFzY2lpT25seSA9IHRydWU7CiAgICAgICAgZG8gewogICAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICAgIGlmIChuZXh0ID4gMTI3KSBhc2NpaU9ubHkgPSBmYWxzZTsKICAgICAgICB9IHdoaWxlICghaWRlbnRpY2FsKG5leHQsICRMRikgJiYKICAgICAgICAgICAgIWlkZW50aWNhbChuZXh0LCAkQ1IpICYmCiAgICAgICAgICAgICFpZGVudGljYWwobmV4dCwgJEVPRikpOwogICAgICAgIGlmICghYXNjaWlPbmx5KSBoYW5kbGVVbmljb2RlKHN0YXJ0KTsKICAgICAgICBhcHBlbmRTdWJzdHJpbmdUb2tlbihUb2tlblR5cGUuU0NSSVBUX1RBRywgc3RhcnQsIGFzY2lpT25seSk7CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0KICAgIH0KICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuSEFTSCk7CiAgICByZXR1cm4gYWR2YW5jZSgpOwogIH0KCiAgaW50IHRva2VuaXplVGlsZGUoaW50IG5leHQpIHsKICAgIC8vIH4gfi8gfi89CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkU0xBU0gpKSB7CiAgICAgIHJldHVybiBzZWxlY3QoJEVRLCBUb2tlblR5cGUuVElMREVfU0xBU0hfRVEsIFRva2VuVHlwZS5USUxERV9TTEFTSCk7CiAgICB9IGVsc2UgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLlRJTERFKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgfQoKICBpbnQgdG9rZW5pemVPcGVuU3F1YXJlQnJhY2tldChpbnQgbmV4dCkgewogICAgLy8gWyBbXSBbXT0KICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRDTE9TRV9TUVVBUkVfQlJBQ0tFVCkpIHsKICAgICAgcmV0dXJuIHNlbGVjdCgkRVEsIFRva2VuVHlwZS5JTkRFWF9FUSwgVG9rZW5UeXBlLklOREVYKTsKICAgIH0KICAgIGFwcGVuZEJlZ2luR3JvdXAoVG9rZW5UeXBlLk9QRU5fU1FVQVJFX0JSQUNLRVQpOwogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBpbnQgdG9rZW5pemVDYXJldChpbnQgbmV4dCkgewogICAgLy8gXiBePQogICAgcmV0dXJuIHNlbGVjdCgkRVEsIFRva2VuVHlwZS5DQVJFVF9FUSwgVG9rZW5UeXBlLkNBUkVUKTsKICB9CgogIGludCB0b2tlbml6ZVF1ZXN0aW9uKGludCBuZXh0KSB7CiAgICAvLyA/ID8uID8/ID8/PQogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmIChpZGVudGljYWwobmV4dCwgJFFVRVNUSU9OKSkgewogICAgICByZXR1cm4gc2VsZWN0KAogICAgICAgICAgJEVRLCBUb2tlblR5cGUuUVVFU1RJT05fUVVFU1RJT05fRVEsIFRva2VuVHlwZS5RVUVTVElPTl9RVUVTVElPTik7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChuZXh0LCAkUEVSSU9EKSkgewogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICBpZiAoX2VuYWJsZU5vbk51bGxhYmxlICYmIGlkZW50aWNhbCgkT1BFTl9TUVVBUkVfQlJBQ0tFVCwgbmV4dCkpIHsKICAgICAgICBhcHBlbmRCZWdpbkdyb3VwKFRva2VuVHlwZS5RVUVTVElPTl9QRVJJT0RfT1BFTl9TUVVBUkVfQlJBQ0tFVCk7CiAgICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgICAgfQogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLlFVRVNUSU9OX1BFUklPRCk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfSBlbHNlIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5RVUVTVElPTik7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogIH0KCiAgaW50IHRva2VuaXplQmFyKGludCBuZXh0KSB7CiAgICAvLyB8IHx8IHw9IHx8PQogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmIChpZGVudGljYWwobmV4dCwgJEJBUikpIHsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgaWYgKExBWllfQVNTSUdOTUVOVF9FTkFCTEVEICYmIGlkZW50aWNhbChuZXh0LCAkRVEpKSB7CiAgICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5CQVJfQkFSX0VRKTsKICAgICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgICB9CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuQkFSX0JBUik7CiAgICAgIHJldHVybiBuZXh0OwogICAgfSBlbHNlIGlmIChpZGVudGljYWwobmV4dCwgJEVRKSkgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkJBUl9FUSk7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9IGVsc2UgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkJBUik7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogIH0KCiAgaW50IHRva2VuaXplQW1wZXJzYW5kKGludCBuZXh0KSB7CiAgICAvLyAmJiAmPSAmICYmPQogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmIChpZGVudGljYWwobmV4dCwgJEFNUEVSU0FORCkpIHsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgaWYgKExBWllfQVNTSUdOTUVOVF9FTkFCTEVEICYmIGlkZW50aWNhbChuZXh0LCAkRVEpKSB7CiAgICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5BTVBFUlNBTkRfQU1QRVJTQU5EX0VRKTsKICAgICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgICB9CiAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuQU1QRVJTQU5EX0FNUEVSU0FORCk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfSBlbHNlIGlmIChpZGVudGljYWwobmV4dCwgJEVRKSkgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkFNUEVSU0FORF9FUSk7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9IGVsc2UgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkFNUEVSU0FORCk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogIH0KCiAgaW50IHRva2VuaXplUGVyY2VudChpbnQgbmV4dCkgewogICAgLy8gJSAlPQogICAgcmV0dXJuIHNlbGVjdCgkRVEsIFRva2VuVHlwZS5QRVJDRU5UX0VRLCBUb2tlblR5cGUuUEVSQ0VOVCk7CiAgfQoKICBpbnQgdG9rZW5pemVNdWx0aXBseShpbnQgbmV4dCkgewogICAgLy8gKiAqPQogICAgcmV0dXJuIHNlbGVjdCgkRVEsIFRva2VuVHlwZS5TVEFSX0VRLCBUb2tlblR5cGUuU1RBUik7CiAgfQoKICBpbnQgdG9rZW5pemVNaW51cyhpbnQgbmV4dCkgewogICAgLy8gLSAtLSAtPQogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmIChpZGVudGljYWwobmV4dCwgJE1JTlVTKSkgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLk1JTlVTX01JTlVTKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKG5leHQsICRFUSkpIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5NSU5VU19FUSk7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9IGVsc2UgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLk1JTlVTKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgfQoKICBpbnQgdG9rZW5pemVQbHVzKGludCBuZXh0KSB7CiAgICAvLyArICsrICs9CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKGlkZW50aWNhbCgkUExVUywgbmV4dCkpIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5QTFVTX1BMVVMpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoJEVRLCBuZXh0KSkgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLlBMVVNfRVEpOwogICAgICByZXR1cm4gYWR2YW5jZSgpOwogICAgfSBlbHNlIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5QTFVTKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgfQoKICBpbnQgdG9rZW5pemVFeGNsYW1hdGlvbihpbnQgbmV4dCkgewogICAgLy8gISAhPQogICAgLy8gIT09IGlzIGtlcHQgZm9yIHVzZXItZnJpZW5kbHkgZXJyb3IgcmVwb3J0aW5nLgoKICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRFUSkpIHsKICAgICAgLy93YXMgYHJldHVybiBzZWxlY3QoJEVRLCBUb2tlblR5cGUuQkFOR19FUV9FUSwgVG9rZW5UeXBlLkJBTkdfRVEpO2AKICAgICAgaW50IG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIGlmIChpZGVudGljYWwobmV4dCwgJEVRKSkgewogICAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuQkFOR19FUV9FUSk7CiAgICAgICAgcHJlcGVuZEVycm9yVG9rZW4obmV3IFVuc3VwcG9ydGVkT3BlcmF0b3IodGFpbCwgdG9rZW5TdGFydCkpOwogICAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5CQU5HX0VRKTsKICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgfQogICAgfQogICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5CQU5HKTsKICAgIHJldHVybiBuZXh0OwogIH0KCiAgaW50IHRva2VuaXplRXF1YWxzKGludCBuZXh0KSB7CiAgICAvLyA9ID09ID0+CiAgICAvLyA9PT0gaXMga2VwdCBmb3IgdXNlci1mcmllbmRseSBlcnJvciByZXBvcnRpbmcuCgogICAgLy8gVHlwZSBwYXJhbWV0ZXJzIGFuZCBhcmd1bWVudHMgY2Fubm90IGNvbnRhaW4gYW55IHRva2VuIHRoYXQKICAgIC8vIHN0YXJ0cyB3aXRoICc9Jy4KICAgIGRpc2NhcmRPcGVuTHQoKTsKCiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKGlkZW50aWNhbChuZXh0LCAkRVEpKSB7CiAgICAgIC8vIHdhcyBgcmV0dXJuIHNlbGVjdCgkRVEsIFRva2VuVHlwZS5FUV9FUV9FUSwgVG9rZW5UeXBlLkVRX0VRKTtgCiAgICAgIGludCBuZXh0ID0gYWR2YW5jZSgpOwogICAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRFUSkpIHsKICAgICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkVRX0VRX0VRKTsKICAgICAgICBwcmVwZW5kRXJyb3JUb2tlbihuZXcgVW5zdXBwb3J0ZWRPcGVyYXRvcih0YWlsLCB0b2tlblN0YXJ0KSk7CiAgICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkVRX0VRKTsKICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgfQogICAgfSBlbHNlIGlmIChpZGVudGljYWwobmV4dCwgJEdUKSkgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkZVTkNUSU9OKTsKICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgIH0KICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuRVEpOwogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBpbnQgdG9rZW5pemVHcmVhdGVyVGhhbihpbnQgbmV4dCkgewogICAgLy8gPiA+PSA+PiA+Pj0gPj4+ID4+Pj0KICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoaWRlbnRpY2FsKCRFUSwgbmV4dCkpIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5HVF9FUSk7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgkR1QsIG5leHQpKSB7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIGlmIChpZGVudGljYWwoJEVRLCBuZXh0KSkgewogICAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuR1RfR1RfRVEpOwogICAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICAgIH0gZWxzZSBpZiAoX2VuYWJsZVRyaXBsZVNoaWZ0ICYmIGlkZW50aWNhbCgkR1QsIG5leHQpKSB7CiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICBpZiAoX2VuYWJsZVRyaXBsZVNoaWZ0ICYmIGlkZW50aWNhbCgkRVEsIG5leHQpKSB7CiAgICAgICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkdUX0dUX0dUX0VRKTsKICAgICAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICAgICAgfQogICAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuR1RfR1RfR1QpOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9IGVsc2UgewogICAgICAgIGFwcGVuZEd0R3QoVG9rZW5UeXBlLkdUX0dUKTsKICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYXBwZW5kR3QoVG9rZW5UeXBlLkdUKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgfQoKICBpbnQgdG9rZW5pemVMZXNzVGhhbihpbnQgbmV4dCkgewogICAgLy8gPCA8PSA8PCA8PD0KICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoaWRlbnRpY2FsKCRFUSwgbmV4dCkpIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5MVF9FUSk7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgkTFQsIG5leHQpKSB7CiAgICAgIHJldHVybiBzZWxlY3QoJEVRLCBUb2tlblR5cGUuTFRfTFRfRVEsIFRva2VuVHlwZS5MVF9MVCk7CiAgICB9IGVsc2UgewogICAgICBhcHBlbmRCZWdpbkdyb3VwKFRva2VuVHlwZS5MVCk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogIH0KCiAgaW50IHRva2VuaXplTnVtYmVyKGludCBuZXh0KSB7CiAgICBpbnQgc3RhcnQgPSBzY2FuT2Zmc2V0OwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgaWYgKCQwIDw9IG5leHQgJiYgbmV4dCA8PSAkOSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChuZXh0LCAkZSkgfHwgaWRlbnRpY2FsKG5leHQsICRFKSkgewogICAgICAgIHJldHVybiB0b2tlbml6ZUZyYWN0aW9uUGFydChuZXh0LCBzdGFydCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCAkUEVSSU9EKSkgewogICAgICAgICAgaW50IG5leHRuZXh0ID0gcGVlaygpOwogICAgICAgICAgaWYgKCQwIDw9IG5leHRuZXh0ICYmIG5leHRuZXh0IDw9ICQ5KSB7CiAgICAgICAgICAgIHJldHVybiB0b2tlbml6ZUZyYWN0aW9uUGFydChhZHZhbmNlKCksIHN0YXJ0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYXBwZW5kU3Vic3RyaW5nVG9rZW4oVG9rZW5UeXBlLklOVCwgc3RhcnQsIHRydWUpOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9CiAgICB9CiAgfQoKICBpbnQgdG9rZW5pemVIZXhPck51bWJlcihpbnQgbmV4dCkgewogICAgaW50IHggPSBwZWVrKCk7CiAgICBpZiAoaWRlbnRpY2FsKHgsICR4KSB8fCBpZGVudGljYWwoeCwgJFgpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUhleChuZXh0KTsKICAgIH0KICAgIHJldHVybiB0b2tlbml6ZU51bWJlcihuZXh0KTsKICB9CgogIGludCB0b2tlbml6ZUhleChpbnQgbmV4dCkgewogICAgaW50IHN0YXJ0ID0gc2Nhbk9mZnNldDsKICAgIG5leHQgPSBhZHZhbmNlKCk7IC8vIEFkdmFuY2UgcGFzdCB0aGUgJHggb3IgJFguCiAgICBib29sIGhhc0RpZ2l0cyA9IGZhbHNlOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgaWYgKCgkMCA8PSBuZXh0ICYmIG5leHQgPD0gJDkpIHx8CiAgICAgICAgICAoJEEgPD0gbmV4dCAmJiBuZXh0IDw9ICRGKSB8fAogICAgICAgICAgKCRhIDw9IG5leHQgJiYgbmV4dCA8PSAkZikpIHsKICAgICAgICBoYXNEaWdpdHMgPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIGlmICghaGFzRGlnaXRzKSB7CiAgICAgICAgICBwcmVwZW5kRXJyb3JUb2tlbihuZXcgVW50ZXJtaW5hdGVkVG9rZW4oCiAgICAgICAgICAgICAgbWVzc2FnZUV4cGVjdGVkSGV4RGlnaXQsIHN0YXJ0LCBzdHJpbmdPZmZzZXQpKTsKICAgICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgICBhcHBlbmRTeW50aGV0aWNTdWJzdHJpbmdUb2tlbigKICAgICAgICAgICAgICBUb2tlblR5cGUuSEVYQURFQ0lNQUwsIHN0YXJ0LCB0cnVlLCAiMCIpOwogICAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgICAgfQogICAgICAgIGFwcGVuZFN1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5IRVhBREVDSU1BTCwgc3RhcnQsIHRydWUpOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9CiAgICB9CiAgfQoKICBpbnQgdG9rZW5pemVEb3RzT3JOdW1iZXIoaW50IG5leHQpIHsKICAgIGludCBzdGFydCA9IHNjYW5PZmZzZXQ7CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKCgkMCA8PSBuZXh0ICYmIG5leHQgPD0gJDkpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUZyYWN0aW9uUGFydChuZXh0LCBzdGFydCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgkUEVSSU9ELCBuZXh0KSkgewogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRQRVJJT0QpKSB7CiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRRVUVTVElPTikpIHsKICAgICAgICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuUEVSSU9EX1BFUklPRF9QRVJJT0RfUVVFU1RJT04pOwogICAgICAgICAgcmV0dXJuIGFkdmFuY2UoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5QRVJJT0RfUEVSSU9EX1BFUklPRCk7CiAgICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5QRVJJT0RfUEVSSU9EKTsKICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5QRVJJT0QpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICB9CgogIGludCB0b2tlbml6ZUZyYWN0aW9uUGFydChpbnQgbmV4dCwgaW50IHN0YXJ0KSB7CiAgICBib29sIGRvbmUgPSBmYWxzZTsKICAgIGJvb2wgaGFzRGlnaXQgPSBmYWxzZTsKICAgIExPT1A6CiAgICB3aGlsZSAoIWRvbmUpIHsKICAgICAgaWYgKCQwIDw9IG5leHQgJiYgbmV4dCA8PSAkOSkgewogICAgICAgIGhhc0RpZ2l0ID0gdHJ1ZTsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwoJGUsIG5leHQpIHx8IGlkZW50aWNhbCgkRSwgbmV4dCkpIHsKICAgICAgICBoYXNEaWdpdCA9IHRydWU7CiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRQTFVTKSB8fCBpZGVudGljYWwobmV4dCwgJE1JTlVTKSkgewogICAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICB9CiAgICAgICAgYm9vbCBoYXNFeHBvbmVudERpZ2l0cyA9IGZhbHNlOwogICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICBpZiAoJDAgPD0gbmV4dCAmJiBuZXh0IDw9ICQ5KSB7CiAgICAgICAgICAgIGhhc0V4cG9uZW50RGlnaXRzID0gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICghaGFzRXhwb25lbnREaWdpdHMpIHsKICAgICAgICAgICAgICBhcHBlbmRTeW50aGV0aWNTdWJzdHJpbmdUb2tlbihUb2tlblR5cGUuRE9VQkxFLCBzdGFydCwgdHJ1ZSwgJzAnKTsKICAgICAgICAgICAgICBwcmVwZW5kRXJyb3JUb2tlbihuZXcgVW50ZXJtaW5hdGVkVG9rZW4oCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2VNaXNzaW5nRXhwb25lbnQsIHRva2VuU3RhcnQsIHN0cmluZ09mZnNldCkpOwogICAgICAgICAgICAgIHJldHVybiBuZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICB9CgogICAgICAgIGRvbmUgPSB0cnVlOwogICAgICAgIGNvbnRpbnVlIExPT1A7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9uZSA9IHRydWU7CiAgICAgICAgY29udGludWUgTE9PUDsKICAgICAgfQogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgfQogICAgaWYgKCFoYXNEaWdpdCkgewogICAgICAvLyBSZWR1Y2Ugb2Zmc2V0LCB3ZSBhbHJlYWR5IGFkdmFuY2VkIHRvIHRoZSB0b2tlbiBwYXN0IHRoZSBwZXJpb2QuCiAgICAgIGFwcGVuZFN1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5JTlQsIHN0YXJ0LCB0cnVlLCAtMSk7CgogICAgICAvLyBUT0RPKGFoZSk6IFdyb25nIG9mZnNldCBmb3IgdGhlIHBlcmlvZC4gQ2Fubm90IGNhbGwgYmVnaW5Ub2tlbiBiZWNhdXNlCiAgICAgIC8vIHRoZSBzY2FubmVyIGFscmVhZHkgYWR2YW5jZWQgcGFzdCB0aGUgcGVyaW9kLgogICAgICBpZiAoaWRlbnRpY2FsKCRQRVJJT0QsIG5leHQpKSB7CiAgICAgICAgcmV0dXJuIHNlbGVjdCgKICAgICAgICAgICAgJFBFUklPRCwgVG9rZW5UeXBlLlBFUklPRF9QRVJJT0RfUEVSSU9ELCBUb2tlblR5cGUuUEVSSU9EX1BFUklPRCk7CiAgICAgIH0KICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5QRVJJT0QpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICAgIGFwcGVuZFN1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5ET1VCTEUsIHN0YXJ0LCB0cnVlKTsKICAgIHJldHVybiBuZXh0OwogIH0KCiAgaW50IHRva2VuaXplU2xhc2hPckNvbW1lbnQoaW50IG5leHQpIHsKICAgIGludCBzdGFydCA9IHNjYW5PZmZzZXQ7CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKGlkZW50aWNhbCgkU1RBUiwgbmV4dCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplTXVsdGlMaW5lQ29tbWVudChuZXh0LCBzdGFydCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgkU0xBU0gsIG5leHQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50KG5leHQsIHN0YXJ0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCRFUSwgbmV4dCkpIHsKICAgICAgYXBwZW5kUHJlY2VkZW5jZVRva2VuKFRva2VuVHlwZS5TTEFTSF9FUSk7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7CiAgICB9IGVsc2UgewogICAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLlNMQVNIKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgfQoKICBpbnQgdG9rZW5pemVMYW5ndWFnZVZlcnNpb25PclNpbmdsZUxpbmVDb21tZW50KGludCBuZXh0KSB7CiAgICBpbnQgc3RhcnQgPSBzY2FuT2Zmc2V0OwogICAgbmV4dCA9IGFkdmFuY2UoKTsKCiAgICAvLyBEYXJ0IGRvYwogICAgaWYgKGlkZW50aWNhbCgkU0xBU0gsIHBlZWsoKSkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnQobmV4dCwgc3RhcnQpOwogICAgfQoKICAgIC8vICJAZGFydCIKICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICB3aGlsZSAoaWRlbnRpY2FsKCRTUEFDRSwgbmV4dCkpIHsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIH0KICAgIGlmICghaWRlbnRpY2FsKCRBVCwgbmV4dCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnRSZXN0KG5leHQsIHN0YXJ0LCBmYWxzZSk7CiAgICB9CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKCFpZGVudGljYWwoJGQsIG5leHQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50UmVzdChuZXh0LCBzdGFydCwgZmFsc2UpOwogICAgfQogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmICghaWRlbnRpY2FsKCRhLCBuZXh0KSkgewogICAgICByZXR1cm4gdG9rZW5pemVTaW5nbGVMaW5lQ29tbWVudFJlc3QobmV4dCwgc3RhcnQsIGZhbHNlKTsKICAgIH0KICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICBpZiAoIWlkZW50aWNhbCgkciwgbmV4dCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnRSZXN0KG5leHQsIHN0YXJ0LCBmYWxzZSk7CiAgICB9CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgaWYgKCFpZGVudGljYWwoJHQsIG5leHQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50UmVzdChuZXh0LCBzdGFydCwgZmFsc2UpOwogICAgfQogICAgbmV4dCA9IGFkdmFuY2UoKTsKCiAgICAvLyAiPSIKICAgIHdoaWxlIChpZGVudGljYWwoJFNQQUNFLCBuZXh0KSkgewogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgfQogICAgaWYgKCFpZGVudGljYWwoJEVRLCBuZXh0KSkgewogICAgICByZXR1cm4gdG9rZW5pemVTaW5nbGVMaW5lQ29tbWVudFJlc3QobmV4dCwgc3RhcnQsIGZhbHNlKTsKICAgIH0KICAgIG5leHQgPSBhZHZhbmNlKCk7CgogICAgLy8gbWFqb3IKICAgIHdoaWxlIChpZGVudGljYWwoJFNQQUNFLCBuZXh0KSkgewogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgfQogICAgaW50IG1ham9yID0gMDsKICAgIGludCBtYWpvclN0YXJ0ID0gc2Nhbk9mZnNldDsKICAgIHdoaWxlIChpc0RpZ2l0KG5leHQpKSB7CiAgICAgIG1ham9yID0gbWFqb3IgKiAxMCArIG5leHQgLSAkMDsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIH0KICAgIGlmIChzY2FuT2Zmc2V0ID09IG1ham9yU3RhcnQpIHsKICAgICAgcmV0dXJuIHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnRSZXN0KG5leHQsIHN0YXJ0LCBmYWxzZSk7CiAgICB9CgogICAgLy8gbWlub3IKICAgIGlmICghaWRlbnRpY2FsKCRQRVJJT0QsIG5leHQpKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50UmVzdChuZXh0LCBzdGFydCwgZmFsc2UpOwogICAgfQogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGludCBtaW5vciA9IDA7CiAgICBpbnQgbWlub3JTdGFydCA9IHNjYW5PZmZzZXQ7CiAgICB3aGlsZSAoaXNEaWdpdChuZXh0KSkgewogICAgICBtaW5vciA9IG1pbm9yICogMTAgKyBuZXh0IC0gJDA7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICB9CiAgICBpZiAoc2Nhbk9mZnNldCA9PSBtaW5vclN0YXJ0KSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50UmVzdChuZXh0LCBzdGFydCwgZmFsc2UpOwogICAgfQoKICAgIC8vIHRyYWlsaW5nIHNwYWNlcwogICAgd2hpbGUgKGlkZW50aWNhbCgkU1BBQ0UsIG5leHQpKSB7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICB9CiAgICBpZiAobmV4dCAhPSAkTEYgJiYgbmV4dCAhPSAkQ1IgJiYgbmV4dCAhPSAkRU9GKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50UmVzdChuZXh0LCBzdGFydCwgZmFsc2UpOwogICAgfQoKICAgIHZhciBsYW5ndWFnZVZlcnNpb24gPSBjcmVhdGVMYW5ndWFnZVZlcnNpb25Ub2tlbihzdGFydCwgbWFqb3IsIG1pbm9yKTsKICAgIGlmIChsYW5ndWFnZVZlcnNpb25DaGFuZ2VkICE9IG51bGwpIHsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IG1ha2UgdGhpcyByZXF1aXJlZCBhbmQgcmVtb3ZlIHRoZSBsYW5ndWFnZVZlcnNpb24gZmllbGQKICAgICAgbGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZCh0aGlzLCBsYW5ndWFnZVZlcnNpb24pOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IHJlbW92ZSB0aGlzIGhhY2sgYW5kIHJlcXVpcmUgbGlzdGVuZXIgdG8gdXBkYXRlCiAgICAgIC8vIHRoZSBzY2FubmVyJ3MgY29uZmlndXJhdGlvbi4KICAgICAgY29uZmlndXJhdGlvbiA9IFNjYW5uZXJDb25maWd1cmF0aW9uLmNsYXNzaWM7CiAgICB9CiAgICBpZiAoaW5jbHVkZUNvbW1lbnRzKSB7CiAgICAgIF9hcHBlbmRUb0NvbW1lbnRTdHJlYW0obGFuZ3VhZ2VWZXJzaW9uKTsKICAgIH0KICAgIHJldHVybiBuZXh0OwogIH0KCiAgaW50IHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnQoaW50IG5leHQsIGludCBzdGFydCkgewogICAgYm9vbCBkYXJ0ZG9jID0gaWRlbnRpY2FsKCRTTEFTSCwgcGVlaygpKTsKICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICByZXR1cm4gdG9rZW5pemVTaW5nbGVMaW5lQ29tbWVudFJlc3QobmV4dCwgc3RhcnQsIGRhcnRkb2MpOwogIH0KCiAgaW50IHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnRSZXN0KGludCBuZXh0LCBpbnQgc3RhcnQsIGJvb2wgZGFydGRvYykgewogICAgYm9vbCBhc2NpaU9ubHkgPSB0cnVlOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKG5leHQgPiAxMjcpIGFzY2lpT25seSA9IGZhbHNlOwogICAgICBpZiAoaWRlbnRpY2FsKCRMRiwgbmV4dCkgfHwKICAgICAgICAgIGlkZW50aWNhbCgkQ1IsIG5leHQpIHx8CiAgICAgICAgICBpZGVudGljYWwoJEVPRiwgbmV4dCkpIHsKICAgICAgICBpZiAoIWFzY2lpT25seSkgaGFuZGxlVW5pY29kZShzdGFydCk7CiAgICAgICAgaWYgKGRhcnRkb2MpIHsKICAgICAgICAgIGFwcGVuZERhcnREb2Moc3RhcnQsIFRva2VuVHlwZS5TSU5HTEVfTElORV9DT01NRU5ULCBhc2NpaU9ubHkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhcHBlbmRDb21tZW50KHN0YXJ0LCBUb2tlblR5cGUuU0lOR0xFX0xJTkVfQ09NTUVOVCwgYXNjaWlPbmx5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0KICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIH0KICB9CgogIGludCB0b2tlbml6ZU11bHRpTGluZUNvbW1lbnQoaW50IG5leHQsIGludCBzdGFydCkgewogICAgYm9vbCBhc2NpaU9ubHlDb21tZW50ID0gdHJ1ZTsgLy8gVHJhY2sgaWYgdGhlIGVudGlyZSBjb21tZW50IGlzIEFTQ0lJLgogICAgYm9vbCBhc2NpaU9ubHlMaW5lcyA9IHRydWU7IC8vIFRyYWNrIEFTQ0lJIHNpbmNlIHRoZSBsYXN0IGhhbmRsZVVuaWNvZGUuCiAgICBpbnQgdW5pY29kZVN0YXJ0ID0gc3RhcnQ7CiAgICBpbnQgbmVzdGluZyA9IDE7CiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgYm9vbCBkYXJ0ZG9jID0gaWRlbnRpY2FsKCRTVEFSLCBuZXh0KTsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChpZGVudGljYWwoJEVPRiwgbmV4dCkpIHsKICAgICAgICBpZiAoIWFzY2lpT25seUxpbmVzKSBoYW5kbGVVbmljb2RlKHVuaWNvZGVTdGFydCk7CiAgICAgICAgcHJlcGVuZEVycm9yVG9rZW4oVW50ZXJtaW5hdGVkVG9rZW4oCiAgICAgICAgICAgIG1lc3NhZ2VVbnRlcm1pbmF0ZWRDb21tZW50LCB0b2tlblN0YXJ0LCBzdHJpbmdPZmZzZXQpKTsKICAgICAgICBhZHZhbmNlQWZ0ZXJFcnJvcih0cnVlKTsKICAgICAgICBicmVhazsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwoJFNUQVIsIG5leHQpKSB7CiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICBpZiAoaWRlbnRpY2FsKCRTTEFTSCwgbmV4dCkpIHsKICAgICAgICAgIC0tbmVzdGluZzsKICAgICAgICAgIGlmICgwID09IG5lc3RpbmcpIHsKICAgICAgICAgICAgaWYgKCFhc2NpaU9ubHlMaW5lcykgaGFuZGxlVW5pY29kZSh1bmljb2RlU3RhcnQpOwogICAgICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgICAgICBpZiAoZGFydGRvYykgewogICAgICAgICAgICAgIGFwcGVuZERhcnREb2MoCiAgICAgICAgICAgICAgICAgIHN0YXJ0LCBUb2tlblR5cGUuTVVMVElfTElORV9DT01NRU5ULCBhc2NpaU9ubHlDb21tZW50KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBhcHBlbmRDb21tZW50KAogICAgICAgICAgICAgICAgICBzdGFydCwgVG9rZW5UeXBlLk1VTFRJX0xJTkVfQ09NTUVOVCwgYXNjaWlPbmx5Q29tbWVudCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwoJFNMQVNILCBuZXh0KSkgewogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgaWYgKGlkZW50aWNhbCgkU1RBUiwgbmV4dCkpIHsKICAgICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgICArK25lc3Rpbmc7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChuZXh0LCAkTEYpKSB7CiAgICAgICAgaWYgKCFhc2NpaU9ubHlMaW5lcykgewogICAgICAgICAgLy8gU3luY2hyb25pemUgdGhlIHN0cmluZyBvZmZzZXQgaW4gdGhlIHV0Zjggc2Nhbm5lci4KICAgICAgICAgIGhhbmRsZVVuaWNvZGUodW5pY29kZVN0YXJ0KTsKICAgICAgICAgIGFzY2lpT25seUxpbmVzID0gdHJ1ZTsKICAgICAgICAgIHVuaWNvZGVTdGFydCA9IHNjYW5PZmZzZXQ7CiAgICAgICAgfQogICAgICAgIGxpbmVGZWVkSW5NdWx0aWxpbmUoKTsKICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChuZXh0ID4gMTI3KSB7CiAgICAgICAgICBhc2NpaU9ubHlMaW5lcyA9IGZhbHNlOwogICAgICAgICAgYXNjaWlPbmx5Q29tbWVudCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV4dDsKICB9CgogIHZvaWQgYXBwZW5kQ29tbWVudChpbnQgc3RhcnQsIFRva2VuVHlwZSB0eXBlLCBib29sIGFzY2lpT25seSkgewogICAgaWYgKCFpbmNsdWRlQ29tbWVudHMpIHJldHVybjsKICAgIENvbW1lbnRUb2tlbiBuZXdDb21tZW50ID0gY3JlYXRlQ29tbWVudFRva2VuKHR5cGUsIHN0YXJ0LCBhc2NpaU9ubHkpOwogICAgX2FwcGVuZFRvQ29tbWVudFN0cmVhbShuZXdDb21tZW50KTsKICB9CgogIHZvaWQgYXBwZW5kRGFydERvYyhpbnQgc3RhcnQsIFRva2VuVHlwZSB0eXBlLCBib29sIGFzY2lpT25seSkgewogICAgaWYgKCFpbmNsdWRlQ29tbWVudHMpIHJldHVybjsKICAgIFRva2VuIG5ld0NvbW1lbnQgPSBjcmVhdGVEYXJ0RG9jVG9rZW4odHlwZSwgc3RhcnQsIGFzY2lpT25seSk7CiAgICBfYXBwZW5kVG9Db21tZW50U3RyZWFtKG5ld0NvbW1lbnQpOwogIH0KCiAgLyoqCiAgICogQXBwZW5kIHRoZSBnaXZlbiB0b2tlbiB0byB0aGUgW3RhaWxdIG9mIHRoZSBjdXJyZW50IHN0cmVhbSBvZiB0b2tlbnMuCiAgICovCiAgdm9pZCBhcHBlbmRUb2tlbihUb2tlbiB0b2tlbikgewogICAgdGFpbC5uZXh0ID0gdG9rZW47CiAgICB0b2tlbi5wcmV2aW91cyA9IHRhaWw7CiAgICB0YWlsID0gdG9rZW47CiAgICBpZiAoY29tbWVudHMgIT0gbnVsbCAmJiBjb21tZW50cyA9PSB0b2tlbi5wcmVjZWRpbmdDb21tZW50cykgewogICAgICBjb21tZW50cyA9IG51bGw7CiAgICAgIGNvbW1lbnRzVGFpbCA9IG51bGw7CiAgICB9IGVsc2UgewogICAgICAvLyBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0byBjb25zdHJ1Y3QgdGhlIHRva2VuCiAgICAgIC8vIGJlaW5nIGFwcGVuZGVkIHdpdGggcHJlY2VkaW5nIGNvbW1lbnRzIGlmIGFueQogICAgICBhc3NlcnQoY29tbWVudHMgPT0gbnVsbCB8fCB0b2tlbi5pc1N5bnRoZXRpYyB8fCB0b2tlbiBpcyBFcnJvclRva2VuKTsKICAgIH0KICB9CgogIHZvaWQgX2FwcGVuZFRvQ29tbWVudFN0cmVhbShUb2tlbiBuZXdDb21tZW50KSB7CiAgICBpZiAoY29tbWVudHMgPT0gbnVsbCkgewogICAgICBjb21tZW50cyA9IG5ld0NvbW1lbnQ7CiAgICAgIGNvbW1lbnRzVGFpbCA9IGNvbW1lbnRzOwogICAgfSBlbHNlIHsKICAgICAgY29tbWVudHNUYWlsLm5leHQgPSBuZXdDb21tZW50OwogICAgICBjb21tZW50c1RhaWwubmV4dC5wcmV2aW91cyA9IGNvbW1lbnRzVGFpbDsKICAgICAgY29tbWVudHNUYWlsID0gY29tbWVudHNUYWlsLm5leHQ7CiAgICB9CiAgfQoKICBpbnQgdG9rZW5pemVSYXdTdHJpbmdLZXl3b3JkT3JJZGVudGlmaWVyKGludCBuZXh0KSB7CiAgICAvLyBbbmV4dF0gaXMgJHIuCiAgICBpbnQgbmV4dG5leHQgPSBwZWVrKCk7CiAgICBpZiAoaWRlbnRpY2FsKG5leHRuZXh0LCAkRFEpIHx8IGlkZW50aWNhbChuZXh0bmV4dCwgJFNRKSkgewogICAgICBpbnQgc3RhcnQgPSBzY2FuT2Zmc2V0OwogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICByZXR1cm4gdG9rZW5pemVTdHJpbmcobmV4dCwgc3RhcnQsIHRydWUpOwogICAgfQogICAgcmV0dXJuIHRva2VuaXplS2V5d29yZE9ySWRlbnRpZmllcihuZXh0LCB0cnVlKTsKICB9CgogIGludCB0b2tlbml6ZUtleXdvcmRPcklkZW50aWZpZXIoaW50IG5leHQsIGJvb2wgYWxsb3dEb2xsYXIpIHsKICAgIEtleXdvcmRTdGF0ZSBzdGF0ZSA9IEtleXdvcmRTdGF0ZS5LRVlXT1JEX1NUQVRFOwogICAgaW50IHN0YXJ0ID0gc2Nhbk9mZnNldDsKICAgIC8vIFdlIGFsbG93IGEgbGVhZGluZyBjYXBpdGFsIGNoYXJhY3Rlci4KICAgIGlmICgkQSA8PSBuZXh0ICYmIG5leHQgPD0gJFopIHsKICAgICAgc3RhdGUgPSBzdGF0ZS5uZXh0Q2FwaXRhbChuZXh0KTsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIH0gZWxzZSBpZiAoJGEgPD0gbmV4dCAmJiBuZXh0IDw9ICR6KSB7CiAgICAgIC8vIERvIHRoZSBmaXJzdCBuZXh0IGNhbGwgb3V0c2lkZSB0aGUgbG9vcCB0byBhdm9pZCBhbiBhZGRpdGlvbmFsIHRlc3QKICAgICAgLy8gYW5kIHRvIG1ha2UgdGhlIGxvb3AgbW9ub21vcnBoaWMuCiAgICAgIHN0YXRlID0gc3RhdGUubmV4dChuZXh0KTsKICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIH0KICAgIHdoaWxlIChzdGF0ZSAhPSBudWxsICYmICRhIDw9IG5leHQgJiYgbmV4dCA8PSAkeikgewogICAgICBzdGF0ZSA9IHN0YXRlLm5leHQobmV4dCk7CiAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICB9CiAgICBpZiAoc3RhdGUgPT0gbnVsbCB8fCBzdGF0ZS5rZXl3b3JkID09IG51bGwpIHsKICAgICAgcmV0dXJuIHRva2VuaXplSWRlbnRpZmllcihuZXh0LCBzdGFydCwgYWxsb3dEb2xsYXIpOwogICAgfQogICAgaWYgKCFfZW5hYmxlRXh0ZW5zaW9uTWV0aG9kcyAmJiBzdGF0ZS5rZXl3b3JkID09IEtleXdvcmQuRVhURU5TSU9OKSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUlkZW50aWZpZXIobmV4dCwgc3RhcnQsIGFsbG93RG9sbGFyKTsKICAgIH0KICAgIGlmICghX2VuYWJsZU5vbk51bGxhYmxlICYmCiAgICAgICAgKHN0YXRlLmtleXdvcmQgPT0gS2V5d29yZC5MQVRFIHx8IHN0YXRlLmtleXdvcmQgPT0gS2V5d29yZC5SRVFVSVJFRCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplSWRlbnRpZmllcihuZXh0LCBzdGFydCwgYWxsb3dEb2xsYXIpOwogICAgfQogICAgaWYgKCgkQSA8PSBuZXh0ICYmIG5leHQgPD0gJFopIHx8CiAgICAgICAgKCQwIDw9IG5leHQgJiYgbmV4dCA8PSAkOSkgfHwKICAgICAgICBpZGVudGljYWwobmV4dCwgJF8pIHx8CiAgICAgICAgaWRlbnRpY2FsKG5leHQsICQkKSkgewogICAgICByZXR1cm4gdG9rZW5pemVJZGVudGlmaWVyKG5leHQsIHN0YXJ0LCBhbGxvd0RvbGxhcik7CiAgICB9IGVsc2UgewogICAgICBhcHBlbmRLZXl3b3JkVG9rZW4oc3RhdGUua2V5d29yZCk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogIH0KCiAgLyoqCiAgICogW2FsbG93RG9sbGFyXSBjYW4gZXhjbHVkZSAnJCcsIHdoaWNoIGlzIG5vdCBhbGxvd2VkIGFzIHBhcnQgb2YgYSBzdHJpbmcKICAgKiBpbnRlcnBvbGF0aW9uIGlkZW50aWZpZXIuCiAgICovCiAgaW50IHRva2VuaXplSWRlbnRpZmllcihpbnQgbmV4dCwgaW50IHN0YXJ0LCBib29sIGFsbG93RG9sbGFyKSB7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoX2lzSWRlbnRpZmllckNoYXIobmV4dCwgYWxsb3dEb2xsYXIpKSB7CiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBJZGVudGlmaWVyIGVuZHMgaGVyZS4KICAgICAgICBpZiAoc3RhcnQgPT0gc2Nhbk9mZnNldCkgewogICAgICAgICAgcmV0dXJuIHVuZXhwZWN0ZWQobmV4dCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFwcGVuZFN1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5JREVOVElGSUVSLCBzdGFydCwgdHJ1ZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV4dDsKICB9CgogIGludCB0b2tlbml6ZUF0KGludCBuZXh0KSB7CiAgICBhcHBlbmRQcmVjZWRlbmNlVG9rZW4oVG9rZW5UeXBlLkFUKTsKICAgIHJldHVybiBhZHZhbmNlKCk7CiAgfQoKICBpbnQgdG9rZW5pemVTdHJpbmcoaW50IG5leHQsIGludCBzdGFydCwgYm9vbCByYXcpIHsKICAgIGludCBxdW90ZUNoYXIgPSBuZXh0OwogICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmIChpZGVudGljYWwocXVvdGVDaGFyLCBuZXh0KSkgewogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICBpZiAoaWRlbnRpY2FsKHF1b3RlQ2hhciwgbmV4dCkpIHsKICAgICAgICAvLyBNdWx0aWxpbmUgc3RyaW5nLgogICAgICAgIHJldHVybiB0b2tlbml6ZU11bHRpTGluZVN0cmluZyhxdW90ZUNoYXIsIHN0YXJ0LCByYXcpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIEVtcHR5IHN0cmluZy4KICAgICAgICBhcHBlbmRTdWJzdHJpbmdUb2tlbihUb2tlblR5cGUuU1RSSU5HLCBzdGFydCwgdHJ1ZSk7CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0KICAgIH0KICAgIGlmIChyYXcpIHsKICAgICAgcmV0dXJuIHRva2VuaXplU2luZ2xlTGluZVJhd1N0cmluZyhuZXh0LCBxdW90ZUNoYXIsIHN0YXJ0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0b2tlbml6ZVNpbmdsZUxpbmVTdHJpbmcobmV4dCwgcXVvdGVDaGFyLCBzdGFydCk7CiAgICB9CiAgfQoKICAvKioKICAgKiBbbmV4dF0gaXMgdGhlIGZpcnN0IGNoYXJhY3RlciBhZnRlciB0aGUgcXVvdGUuCiAgICogW3F1b3RlU3RhcnRdIGlzIHRoZSBzY2FuT2Zmc2V0IG9mIHRoZSBxdW90ZS4KICAgKgogICAqIFRoZSB0b2tlbiBjb250YWlucyBhIHN1YnN0cmluZyBvZiB0aGUgc291cmNlIGZpbGUsIGluY2x1ZGluZyB0aGUKICAgKiBzdHJpbmcgcXVvdGVzLCBiYWNrc2xhc2hlcyBmb3IgZXNjYXBpbmcuIEZvciBpbnRlcnBvbGF0ZWQgc3RyaW5ncywKICAgKiB0aGUgcGFydHMgYmVmb3JlIGFuZCBhZnRlciBhcmUgc2VwYXJhdGUgdG9rZW5zLgogICAqCiAgICogICAiYSAkYiBjIgogICAqCiAgICogZ2l2ZXMgU3RyaW5nVG9rZW4oImEgJCksIFN0cmluZ1Rva2VuKGIpIGFuZCBTdHJpbmdUb2tlbiggYyIpLgogICAqLwogIGludCB0b2tlbml6ZVNpbmdsZUxpbmVTdHJpbmcoaW50IG5leHQsIGludCBxdW90ZUNoYXIsIGludCBxdW90ZVN0YXJ0KSB7CiAgICBpbnQgc3RhcnQgPSBxdW90ZVN0YXJ0OwogICAgYm9vbCBhc2NpaU9ubHkgPSB0cnVlOwogICAgd2hpbGUgKCFpZGVudGljYWwobmV4dCwgcXVvdGVDaGFyKSkgewogICAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRCQUNLU0xBU0gpKSB7CiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwobmV4dCwgJCQpKSB7CiAgICAgICAgaWYgKCFhc2NpaU9ubHkpIGhhbmRsZVVuaWNvZGUoc3RhcnQpOwogICAgICAgIG5leHQgPSB0b2tlbml6ZVN0cmluZ0ludGVycG9sYXRpb24oc3RhcnQsIGFzY2lpT25seSk7CiAgICAgICAgc3RhcnQgPSBzY2FuT2Zmc2V0OwogICAgICAgIGFzY2lpT25seSA9IHRydWU7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKG5leHQgPD0gJENSICYmCiAgICAgICAgICAoaWRlbnRpY2FsKG5leHQsICRMRikgfHwKICAgICAgICAgICAgICBpZGVudGljYWwobmV4dCwgJENSKSB8fAogICAgICAgICAgICAgIGlkZW50aWNhbChuZXh0LCAkRU9GKSkpIHsKICAgICAgICBpZiAoIWFzY2lpT25seSkgaGFuZGxlVW5pY29kZShzdGFydCk7CiAgICAgICAgdW50ZXJtaW5hdGVkU3RyaW5nKHF1b3RlQ2hhciwgcXVvdGVTdGFydCwgc3RhcnQsCiAgICAgICAgICAgIGFzY2lpT25seTogYXNjaWlPbmx5LCBpc011bHRpTGluZTogZmFsc2UsIGlzUmF3OiBmYWxzZSk7CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0KICAgICAgaWYgKG5leHQgPiAxMjcpIGFzY2lpT25seSA9IGZhbHNlOwogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgfQogICAgaWYgKCFhc2NpaU9ubHkpIGhhbmRsZVVuaWNvZGUoc3RhcnQpOwogICAgLy8gQWR2YW5jZSBwYXN0IHRoZSBxdW90ZSBjaGFyYWN0ZXIuCiAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgYXBwZW5kU3Vic3RyaW5nVG9rZW4oVG9rZW5UeXBlLlNUUklORywgc3RhcnQsIGFzY2lpT25seSk7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIGludCB0b2tlbml6ZVN0cmluZ0ludGVycG9sYXRpb24oaW50IHN0YXJ0LCBib29sIGFzY2lpT25seSkgewogICAgYXBwZW5kU3Vic3RyaW5nVG9rZW4oVG9rZW5UeXBlLlNUUklORywgc3RhcnQsIGFzY2lpT25seSk7CiAgICBiZWdpblRva2VuKCk7IC8vICQgc3RhcnRzIGhlcmUuCiAgICBpbnQgbmV4dCA9IGFkdmFuY2UoKTsKICAgIGlmIChpZGVudGljYWwobmV4dCwgJE9QRU5fQ1VSTFlfQlJBQ0tFVCkpIHsKICAgICAgcmV0dXJuIHRva2VuaXplSW50ZXJwb2xhdGVkRXhwcmVzc2lvbihuZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0b2tlbml6ZUludGVycG9sYXRlZElkZW50aWZpZXIobmV4dCk7CiAgICB9CiAgfQoKICBpbnQgdG9rZW5pemVJbnRlcnBvbGF0ZWRFeHByZXNzaW9uKGludCBuZXh0KSB7CiAgICBhcHBlbmRCZWdpbkdyb3VwKFRva2VuVHlwZS5TVFJJTkdfSU5URVJQT0xBVElPTl9FWFBSRVNTSU9OKTsKICAgIGJlZ2luVG9rZW4oKTsgLy8gVGhlIGV4cHJlc3Npb24gc3RhcnRzIGhlcmUuCiAgICBuZXh0ID0gYWR2YW5jZSgpOyAvLyBNb3ZlIHBhc3QgdGhlIGN1cmx5IGJyYWNrZXQuCiAgICB3aGlsZSAoIWlkZW50aWNhbChuZXh0LCAkRU9GKSAmJiAhaWRlbnRpY2FsKG5leHQsICRTVFgpKSB7CiAgICAgIG5leHQgPSBiaWdTd2l0Y2gobmV4dCk7CiAgICB9CiAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRFT0YpKSB7CiAgICAgIGJlZ2luVG9rZW4oKTsKICAgICAgZGlzY2FyZEludGVycG9sYXRpb24oKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgICBuZXh0ID0gYWR2YW5jZSgpOyAvLyBNb3ZlIHBhc3QgdGhlICRTVFguCiAgICBiZWdpblRva2VuKCk7IC8vIFRoZSBzdHJpbmcgaW50ZXJwb2xhdGlvbiBzdWZmaXggc3RhcnRzIGhlcmUuCiAgICByZXR1cm4gbmV4dDsKICB9CgogIGludCB0b2tlbml6ZUludGVycG9sYXRlZElkZW50aWZpZXIoaW50IG5leHQpIHsKICAgIGFwcGVuZFByZWNlZGVuY2VUb2tlbihUb2tlblR5cGUuU1RSSU5HX0lOVEVSUE9MQVRJT05fSURFTlRJRklFUik7CgogICAgaWYgKCRhIDw9IG5leHQgJiYgbmV4dCA8PSAkeiB8fAogICAgICAgICRBIDw9IG5leHQgJiYgbmV4dCA8PSAkWiB8fAogICAgICAgIGlkZW50aWNhbChuZXh0LCAkXykpIHsKICAgICAgYmVnaW5Ub2tlbigpOyAvLyBUaGUgaWRlbnRpZmllciBzdGFydHMgaGVyZS4KICAgICAgbmV4dCA9IHRva2VuaXplS2V5d29yZE9ySWRlbnRpZmllcihuZXh0LCBmYWxzZSk7CiAgICB9IGVsc2UgewogICAgICBiZWdpblRva2VuKCk7IC8vIFRoZSBzeW50aGV0aWMgaWRlbnRpZmllciBzdGFydHMgaGVyZS4KICAgICAgYXBwZW5kU3ludGhldGljU3Vic3RyaW5nVG9rZW4oVG9rZW5UeXBlLklERU5USUZJRVIsIHNjYW5PZmZzZXQsIHRydWUsICcnKTsKICAgICAgcHJlcGVuZEVycm9yVG9rZW4oVW50ZXJtaW5hdGVkVG9rZW4oCiAgICAgICAgICBtZXNzYWdlVW5leHBlY3RlZERvbGxhckluU3RyaW5nLCB0b2tlblN0YXJ0LCBzdHJpbmdPZmZzZXQpKTsKICAgIH0KICAgIGJlZ2luVG9rZW4oKTsgLy8gVGhlIHN0cmluZyBpbnRlcnBvbGF0aW9uIHN1ZmZpeCBzdGFydHMgaGVyZS4KICAgIHJldHVybiBuZXh0OwogIH0KCiAgaW50IHRva2VuaXplU2luZ2xlTGluZVJhd1N0cmluZyhpbnQgbmV4dCwgaW50IHF1b3RlQ2hhciwgaW50IHF1b3RlU3RhcnQpIHsKICAgIGJvb2wgYXNjaWlPbmx5ID0gdHJ1ZTsKICAgIHdoaWxlIChuZXh0ICE9ICRFT0YpIHsKICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCBxdW90ZUNoYXIpKSB7CiAgICAgICAgaWYgKCFhc2NpaU9ubHkpIGhhbmRsZVVuaWNvZGUocXVvdGVTdGFydCk7CiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICBhcHBlbmRTdWJzdHJpbmdUb2tlbihUb2tlblR5cGUuU1RSSU5HLCBxdW90ZVN0YXJ0LCBhc2NpaU9ubHkpOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChuZXh0LCAkTEYpIHx8IGlkZW50aWNhbChuZXh0LCAkQ1IpKSB7CiAgICAgICAgaWYgKCFhc2NpaU9ubHkpIGhhbmRsZVVuaWNvZGUocXVvdGVTdGFydCk7CiAgICAgICAgdW50ZXJtaW5hdGVkU3RyaW5nKHF1b3RlQ2hhciwgcXVvdGVTdGFydCwgcXVvdGVTdGFydCwKICAgICAgICAgICAgYXNjaWlPbmx5OiBhc2NpaU9ubHksIGlzTXVsdGlMaW5lOiBmYWxzZSwgaXNSYXc6IHRydWUpOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9IGVsc2UgaWYgKG5leHQgPiAxMjcpIHsKICAgICAgICBhc2NpaU9ubHkgPSBmYWxzZTsKICAgICAgfQogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgfQogICAgaWYgKCFhc2NpaU9ubHkpIGhhbmRsZVVuaWNvZGUocXVvdGVTdGFydCk7CiAgICB1bnRlcm1pbmF0ZWRTdHJpbmcocXVvdGVDaGFyLCBxdW90ZVN0YXJ0LCBxdW90ZVN0YXJ0LAogICAgICAgIGFzY2lpT25seTogYXNjaWlPbmx5LCBpc011bHRpTGluZTogZmFsc2UsIGlzUmF3OiB0cnVlKTsKICAgIHJldHVybiBuZXh0OwogIH0KCiAgaW50IHRva2VuaXplTXVsdGlMaW5lUmF3U3RyaW5nKGludCBxdW90ZUNoYXIsIGludCBxdW90ZVN0YXJ0KSB7CiAgICBib29sIGFzY2lpT25seVN0cmluZyA9IHRydWU7CiAgICBib29sIGFzY2lpT25seUxpbmUgPSB0cnVlOwogICAgaW50IHVuaWNvZGVTdGFydCA9IHF1b3RlU3RhcnQ7CiAgICBpbnQgbmV4dCA9IGFkdmFuY2UoKTsgLy8gQWR2YW5jZSBwYXN0IHRoZSAobGFzdCkgcXVvdGUgKG9mIHRocmVlKS4KICAgIG91dGVyOgogICAgd2hpbGUgKCFpZGVudGljYWwobmV4dCwgJEVPRikpIHsKICAgICAgd2hpbGUgKCFpZGVudGljYWwobmV4dCwgcXVvdGVDaGFyKSkgewogICAgICAgIGlmIChpZGVudGljYWwobmV4dCwgJExGKSkgewogICAgICAgICAgaWYgKCFhc2NpaU9ubHlMaW5lKSB7CiAgICAgICAgICAgIC8vIFN5bmNocm9uaXplIHRoZSBzdHJpbmcgb2Zmc2V0IGluIHRoZSB1dGY4IHNjYW5uZXIuCiAgICAgICAgICAgIGhhbmRsZVVuaWNvZGUodW5pY29kZVN0YXJ0KTsKICAgICAgICAgICAgYXNjaWlPbmx5TGluZSA9IHRydWU7CiAgICAgICAgICAgIHVuaWNvZGVTdGFydCA9IHNjYW5PZmZzZXQ7CiAgICAgICAgICB9CiAgICAgICAgICBsaW5lRmVlZEluTXVsdGlsaW5lKCk7CiAgICAgICAgfSBlbHNlIGlmIChuZXh0ID4gMTI3KSB7CiAgICAgICAgICBhc2NpaU9ubHlMaW5lID0gZmFsc2U7CiAgICAgICAgICBhc2NpaU9ubHlTdHJpbmcgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICBpZiAoaWRlbnRpY2FsKG5leHQsICRFT0YpKSBicmVhayBvdXRlcjsKICAgICAgfQogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICBpZiAoaWRlbnRpY2FsKG5leHQsIHF1b3RlQ2hhcikpIHsKICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgIGlmIChpZGVudGljYWwobmV4dCwgcXVvdGVDaGFyKSkgewogICAgICAgICAgaWYgKCFhc2NpaU9ubHlMaW5lKSBoYW5kbGVVbmljb2RlKHVuaWNvZGVTdGFydCk7CiAgICAgICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgICAgICAgYXBwZW5kU3Vic3RyaW5nVG9rZW4oVG9rZW5UeXBlLlNUUklORywgcXVvdGVTdGFydCwgYXNjaWlPbmx5U3RyaW5nKTsKICAgICAgICAgIHJldHVybiBuZXh0OwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKCFhc2NpaU9ubHlMaW5lKSBoYW5kbGVVbmljb2RlKHVuaWNvZGVTdGFydCk7CiAgICB1bnRlcm1pbmF0ZWRTdHJpbmcocXVvdGVDaGFyLCBxdW90ZVN0YXJ0LCBxdW90ZVN0YXJ0LAogICAgICAgIGFzY2lpT25seTogYXNjaWlPbmx5TGluZSwgaXNNdWx0aUxpbmU6IHRydWUsIGlzUmF3OiB0cnVlKTsKICAgIHJldHVybiBuZXh0OwogIH0KCiAgaW50IHRva2VuaXplTXVsdGlMaW5lU3RyaW5nKGludCBxdW90ZUNoYXIsIGludCBxdW90ZVN0YXJ0LCBib29sIHJhdykgewogICAgaWYgKHJhdykgcmV0dXJuIHRva2VuaXplTXVsdGlMaW5lUmF3U3RyaW5nKHF1b3RlQ2hhciwgcXVvdGVTdGFydCk7CiAgICBpbnQgc3RhcnQgPSBxdW90ZVN0YXJ0OwogICAgYm9vbCBhc2NpaU9ubHlTdHJpbmcgPSB0cnVlOwogICAgYm9vbCBhc2NpaU9ubHlMaW5lID0gdHJ1ZTsKICAgIGludCB1bmljb2RlU3RhcnQgPSBzdGFydDsKICAgIGludCBuZXh0ID0gYWR2YW5jZSgpOyAvLyBBZHZhbmNlIHBhc3QgdGhlIChsYXN0KSBxdW90ZSAob2YgdGhyZWUpLgogICAgd2hpbGUgKCFpZGVudGljYWwobmV4dCwgJEVPRikpIHsKICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCAkJCkpIHsKICAgICAgICBpZiAoIWFzY2lpT25seUxpbmUpIGhhbmRsZVVuaWNvZGUodW5pY29kZVN0YXJ0KTsKICAgICAgICBuZXh0ID0gdG9rZW5pemVTdHJpbmdJbnRlcnBvbGF0aW9uKHN0YXJ0LCBhc2NpaU9ubHlTdHJpbmcpOwogICAgICAgIHN0YXJ0ID0gc2Nhbk9mZnNldDsKICAgICAgICB1bmljb2RlU3RhcnQgPSBzdGFydDsKICAgICAgICBhc2NpaU9ubHlTdHJpbmcgPSB0cnVlOyAvLyBBIG5ldyBzdHJpbmcgdG9rZW4gaXMgY3JlYXRlZCBmb3IgdGhlIHJlc3QuCiAgICAgICAgYXNjaWlPbmx5TGluZSA9IHRydWU7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCBxdW90ZUNoYXIpKSB7CiAgICAgICAgbmV4dCA9IGFkdmFuY2UoKTsKICAgICAgICBpZiAoaWRlbnRpY2FsKG5leHQsIHF1b3RlQ2hhcikpIHsKICAgICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgICBpZiAoaWRlbnRpY2FsKG5leHQsIHF1b3RlQ2hhcikpIHsKICAgICAgICAgICAgaWYgKCFhc2NpaU9ubHlMaW5lKSBoYW5kbGVVbmljb2RlKHVuaWNvZGVTdGFydCk7CiAgICAgICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgICAgIGFwcGVuZFN1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5TVFJJTkcsIHN0YXJ0LCBhc2NpaU9ubHlTdHJpbmcpOwogICAgICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCAkQkFDS1NMQVNIKSkgewogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCAkRU9GKSkgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKGlkZW50aWNhbChuZXh0LCAkTEYpKSB7CiAgICAgICAgaWYgKCFhc2NpaU9ubHlMaW5lKSB7CiAgICAgICAgICAvLyBTeW5jaHJvbml6ZSB0aGUgc3RyaW5nIG9mZnNldCBpbiB0aGUgdXRmOCBzY2FubmVyLgogICAgICAgICAgaGFuZGxlVW5pY29kZSh1bmljb2RlU3RhcnQpOwogICAgICAgICAgYXNjaWlPbmx5TGluZSA9IHRydWU7CiAgICAgICAgICB1bmljb2RlU3RhcnQgPSBzY2FuT2Zmc2V0OwogICAgICAgIH0KICAgICAgICBsaW5lRmVlZEluTXVsdGlsaW5lKCk7CiAgICAgIH0gZWxzZSBpZiAobmV4dCA+IDEyNykgewogICAgICAgIGFzY2lpT25seVN0cmluZyA9IGZhbHNlOwogICAgICAgIGFzY2lpT25seUxpbmUgPSBmYWxzZTsKICAgICAgfQogICAgICBuZXh0ID0gYWR2YW5jZSgpOwogICAgfQogICAgaWYgKCFhc2NpaU9ubHlMaW5lKSBoYW5kbGVVbmljb2RlKHVuaWNvZGVTdGFydCk7CiAgICB1bnRlcm1pbmF0ZWRTdHJpbmcocXVvdGVDaGFyLCBxdW90ZVN0YXJ0LCBzdGFydCwKICAgICAgICBhc2NpaU9ubHk6IGFzY2lpT25seVN0cmluZywgaXNNdWx0aUxpbmU6IHRydWUsIGlzUmF3OiBmYWxzZSk7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIGludCB1bmV4cGVjdGVkKGludCBjaGFyYWN0ZXIpIHsKICAgIHZhciBlcnJvclRva2VuID0gYnVpbGRVbmV4cGVjdGVkQ2hhcmFjdGVyVG9rZW4oY2hhcmFjdGVyLCB0b2tlblN0YXJ0KTsKICAgIGlmIChlcnJvclRva2VuIGlzIE5vbkFzY2lpSWRlbnRpZmllclRva2VuKSB7CiAgICAgIGludCBjaGFyT2Zmc2V0OwogICAgICBMaXN0PGludD4gY29kZVVuaXRzID0gPGludD5bXTsKICAgICAgaWYgKHRhaWwudHlwZSA9PSBUb2tlblR5cGUuSURFTlRJRklFUiAmJiB0YWlsLmNoYXJFbmQgPT0gdG9rZW5TdGFydCkgewogICAgICAgIGNoYXJPZmZzZXQgPSB0YWlsLmNoYXJPZmZzZXQ7CiAgICAgICAgY29kZVVuaXRzLmFkZEFsbCh0YWlsLmxleGVtZS5jb2RlVW5pdHMpOwogICAgICAgIHRhaWwgPSB0YWlsLnByZXZpb3VzOwogICAgICB9IGVsc2UgewogICAgICAgIGNoYXJPZmZzZXQgPSBlcnJvclRva2VuLmNoYXJPZmZzZXQ7CiAgICAgIH0KICAgICAgY29kZVVuaXRzLmFkZChlcnJvclRva2VuLmNoYXJhY3Rlcik7CiAgICAgIHByZXBlbmRFcnJvclRva2VuKGVycm9yVG9rZW4pOwogICAgICBpbnQgbmV4dCA9IGFkdmFuY2VBZnRlckVycm9yKHRydWUpOwogICAgICB3aGlsZSAoX2lzSWRlbnRpZmllckNoYXIobmV4dCwgdHJ1ZSkpIHsKICAgICAgICBjb2RlVW5pdHMuYWRkKG5leHQpOwogICAgICAgIG5leHQgPSBhZHZhbmNlKCk7CiAgICAgIH0KICAgICAgYXBwZW5kVG9rZW4oU3RyaW5nVG9rZW4uZnJvbVN0cmluZyhUb2tlblR5cGUuSURFTlRJRklFUiwKICAgICAgICAgIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2RlVW5pdHMpLCBjaGFyT2Zmc2V0KSk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfSBlbHNlIHsKICAgICAgcHJlcGVuZEVycm9yVG9rZW4oZXJyb3JUb2tlbik7CiAgICAgIHJldHVybiBhZHZhbmNlQWZ0ZXJFcnJvcih0cnVlKTsKICAgIH0KICB9CgogIHZvaWQgdW50ZXJtaW5hdGVkU3RyaW5nKGludCBxdW90ZUNoYXIsIGludCBxdW90ZVN0YXJ0LCBpbnQgc3RhcnQsCiAgICAgIHtib29sIGFzY2lpT25seSwgYm9vbCBpc011bHRpTGluZSwgYm9vbCBpc1Jhd30pIHsKICAgIFN0cmluZyBzdWZmaXggPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoCiAgICAgICAgaXNNdWx0aUxpbmUgPyBbcXVvdGVDaGFyLCBxdW90ZUNoYXIsIHF1b3RlQ2hhcl0gOiBbcXVvdGVDaGFyXSk7CiAgICBTdHJpbmcgcHJlZml4ID0gaXNSYXcgPyAnciRzdWZmaXgnIDogc3VmZml4OwoKICAgIGFwcGVuZFN5bnRoZXRpY1N1YnN0cmluZ1Rva2VuKFRva2VuVHlwZS5TVFJJTkcsIHN0YXJ0LCBhc2NpaU9ubHksIHN1ZmZpeCk7CiAgICAvLyBFbnN1cmUgdGhhdCB0aGUgZXJyb3IgaXMgcmVwb3J0ZWQgb24gYSB2aXNpYmxlIHRva2VuCiAgICBpbnQgZXJyb3JTdGFydCA9IHRva2VuU3RhcnQgPCBzdHJpbmdPZmZzZXQgPyB0b2tlblN0YXJ0IDogcXVvdGVTdGFydDsKICAgIHByZXBlbmRFcnJvclRva2VuKG5ldyBVbnRlcm1pbmF0ZWRTdHJpbmcocHJlZml4LCBlcnJvclN0YXJ0LCBzdHJpbmdPZmZzZXQpKTsKICB9CgogIGludCBhZHZhbmNlQWZ0ZXJFcnJvcihib29sIHNob3VsZEFkdmFuY2UpIHsKICAgIGlmIChhdEVuZE9mRmlsZSgpKSByZXR1cm4gJEVPRjsKICAgIGlmIChzaG91bGRBZHZhbmNlKSB7CiAgICAgIHJldHVybiBhZHZhbmNlKCk7IC8vIEVuc3VyZSBwcm9ncmVzcy4KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICB9Cn0KClRva2VuVHlwZSBjbG9zZUJyYWNlSW5mb0ZvcihCZWdpblRva2VuIGJlZ2luKSB7CiAgcmV0dXJuIGNvbnN0IHsKICAgICcoJzogVG9rZW5UeXBlLkNMT1NFX1BBUkVOLAogICAgJ1snOiBUb2tlblR5cGUuQ0xPU0VfU1FVQVJFX0JSQUNLRVQsCiAgICAneyc6IFRva2VuVHlwZS5DTE9TRV9DVVJMWV9CUkFDS0VULAogICAgJzwnOiBUb2tlblR5cGUuR1QsCiAgICByJyR7JzogVG9rZW5UeXBlLkNMT1NFX0NVUkxZX0JSQUNLRVQsCiAgICAnPy5bJzogVG9rZW5UeXBlLkNMT1NFX1NRVUFSRV9CUkFDS0VULAogIH1bYmVnaW4ubGV4ZW1lXTsKfQoKY2xhc3MgTGluZVN0YXJ0cyBleHRlbmRzIE9iamVjdCB3aXRoIExpc3RNaXhpbjxpbnQ+IHsKICBMaXN0PGludD4gYXJyYXk7CiAgaW50IGFycmF5TGVuZ3RoID0gMDsKCiAgTGluZVN0YXJ0cyhpbnQgbnVtYmVyT2ZCeXRlc0hpbnQpIHsKICAgIC8vIExldCdzIGFzc3VtZSB0aGUgYXZlcmFnZSBEYXJ0IGZpbGUgaXMgMzAwIGJ5dGVzLgogICAgaWYgKG51bWJlck9mQnl0ZXNIaW50ID09IG51bGwpIG51bWJlck9mQnl0ZXNIaW50ID0gMzAwOwoKICAgIC8vIExldCdzIGFzc3VtZSB3ZSBoYXZlIG9uIGF2ZXJhZ2UgMjIgYnl0ZXMgcGVyIGxpbmUuCiAgICBmaW5hbCBpbnQgZXhwZWN0ZWROdW1iZXJPZkxpbmVzID0gMSArIChudW1iZXJPZkJ5dGVzSGludCB+LyAyMik7CgogICAgaWYgKG51bWJlck9mQnl0ZXNIaW50ID4gNjU1MzUpIHsKICAgICAgYXJyYXkgPSBuZXcgVWludDMyTGlzdChleHBlY3RlZE51bWJlck9mTGluZXMpOwogICAgfSBlbHNlIHsKICAgICAgYXJyYXkgPSBuZXcgVWludDE2TGlzdChleHBlY3RlZE51bWJlck9mTGluZXMpOwogICAgfQoKICAgIC8vIFRoZSBmaXJzdCBsaW5lIHN0YXJ0cyBhdCBjaGFyYWN0ZXIgb2Zmc2V0IDAuCiAgICBhZGQoMCk7CiAgfQoKICAvLyBJbXBsZW1lbnQgYWJzdHJhY3QgbWVtYmVycyB1c2VkIGJ5IFtMaXN0TWl4aW5dCgogIGludCBnZXQgbGVuZ3RoID0+IGFycmF5TGVuZ3RoOwoKICBpbnQgb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBhc3NlcnQoaW5kZXggPCBhcnJheUxlbmd0aCk7CiAgICByZXR1cm4gYXJyYXlbaW5kZXhdOwogIH0KCiAgdm9pZCBzZXQgbGVuZ3RoKGludCBuZXdMZW5ndGgpIHsKICAgIGlmIChuZXdMZW5ndGggPiBhcnJheS5sZW5ndGgpIHsKICAgICAgZ3JvdyhuZXdMZW5ndGgpOwogICAgfQogICAgYXJyYXlMZW5ndGggPSBuZXdMZW5ndGg7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIGludCB2YWx1ZSkgewogICAgaWYgKHZhbHVlID4gNjU1MzUgJiYgYXJyYXkgaXMhIFVpbnQzMkxpc3QpIHsKICAgICAgc3dpdGNoVG9VaW50MzIoYXJyYXkubGVuZ3RoKTsKICAgIH0KICAgIGFycmF5W2luZGV4XSA9IHZhbHVlOwogIH0KCiAgLy8gU3BlY2lhbGl6ZSBtZXRob2RzIGZyb20gW0xpc3RNaXhpbl0uCiAgdm9pZCBhZGQoaW50IHZhbHVlKSB7CiAgICBpZiAoYXJyYXlMZW5ndGggPj0gYXJyYXkubGVuZ3RoKSB7CiAgICAgIGdyb3coMCk7CiAgICB9CiAgICBpZiAodmFsdWUgPiA2NTUzNSAmJiBhcnJheSBpcyEgVWludDMyTGlzdCkgewogICAgICBzd2l0Y2hUb1VpbnQzMihhcnJheS5sZW5ndGgpOwogICAgfQogICAgYXJyYXlbYXJyYXlMZW5ndGgrK10gPSB2YWx1ZTsKICB9CgogIC8vIEhlbHBlciBtZXRob2RzLgoKICB2b2lkIGdyb3coaW50IG5ld0xlbmd0aE1pbmltdW0pIHsKICAgIGludCBuZXdMZW5ndGggPSBhcnJheS5sZW5ndGggKiAyOwogICAgaWYgKG5ld0xlbmd0aCA8IG5ld0xlbmd0aE1pbmltdW0pIG5ld0xlbmd0aCA9IG5ld0xlbmd0aE1pbmltdW07CgogICAgaWYgKGFycmF5IGlzIFVpbnQxNkxpc3QpIHsKICAgICAgZmluYWwgbmV3QXJyYXkgPSBuZXcgVWludDE2TGlzdChuZXdMZW5ndGgpOwogICAgICBuZXdBcnJheS5zZXRSYW5nZSgwLCBhcnJheUxlbmd0aCwgYXJyYXkpOwogICAgICBhcnJheSA9IG5ld0FycmF5OwogICAgfSBlbHNlIHsKICAgICAgc3dpdGNoVG9VaW50MzIobmV3TGVuZ3RoKTsKICAgIH0KICB9CgogIHZvaWQgc3dpdGNoVG9VaW50MzIoaW50IG5ld0xlbmd0aCkgewogICAgZmluYWwgbmV3QXJyYXkgPSBuZXcgVWludDMyTGlzdChuZXdMZW5ndGgpOwogICAgbmV3QXJyYXkuc2V0UmFuZ2UoMCwgYXJyYXlMZW5ndGgsIGFycmF5KTsKICAgIGFycmF5ID0gbmV3QXJyYXk7CiAgfQp9CgovLy8gW1NjYW5uZXJDb25maWd1cmF0aW9uXSBjb250YWlucyBpbmZvcm1hdGlvbiBmb3IgY29uZmlndXJpbmcgd2hpY2ggdG9rZW5zCi8vLyB0aGUgc2Nhbm5lciBwcm9kdWNlcyBiYXNlZCB1cG9uIHRoZSBEYXJ0IGxhbmd1YWdlIGxldmVsLgpjbGFzcyBTY2FubmVyQ29uZmlndXJhdGlvbiB7CiAgc3RhdGljIGNvbnN0IGNsYXNzaWMgPSBTY2FubmVyQ29uZmlndXJhdGlvbigpOwogIHN0YXRpYyBjb25zdCBub25OdWxsYWJsZSA9IFNjYW5uZXJDb25maWd1cmF0aW9uKGVuYWJsZU5vbk51bGxhYmxlOiB0cnVlKTsKCiAgLy8vIEV4cGVyaW1lbnRhbCBmbGFnIGZvciBlbmFibGluZyBzY2FubmluZyBvZiB0aGUgYGV4dGVuc2lvbmAga2V5d29yZC4KICBmaW5hbCBib29sIGVuYWJsZUV4dGVuc2lvbk1ldGhvZHM7CgogIC8vLyBFeHBlcmltZW50YWwgZmxhZyBmb3IgZW5hYmxpbmcgc2Nhbm5pbmcgb2YgTk5CRCB0b2tlbnMKICAvLy8gc3VjaCBhcyAncmVxdWlyZWQnIGFuZCAnbGF0ZScKICBmaW5hbCBib29sIGVuYWJsZU5vbk51bGxhYmxlOwoKICAvLy8gRXhwZXJpbWVudGFsIGZsYWcgZm9yIGVuYWJsaW5nIHNjYW5uaW5nIG9mIGA+Pj5gLgogIC8vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9sYW5ndWFnZS9pc3N1ZXMvNjEKICAvLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvbGFuZ3VhZ2UvaXNzdWVzLzYwCiAgZmluYWwgYm9vbCBlbmFibGVUcmlwbGVTaGlmdDsKCiAgY29uc3QgU2Nhbm5lckNvbmZpZ3VyYXRpb24oewogICAgYm9vbCBlbmFibGVFeHRlbnNpb25NZXRob2RzLAogICAgYm9vbCBlbmFibGVOb25OdWxsYWJsZSwKICAgIGJvb2wgZW5hYmxlVHJpcGxlU2hpZnQsCiAgfSkgIDogdGhpcy5lbmFibGVFeHRlbnNpb25NZXRob2RzID0gZW5hYmxlRXh0ZW5zaW9uTWV0aG9kcyA/PyBmYWxzZSwKICAgICAgICB0aGlzLmVuYWJsZU5vbk51bGxhYmxlID0gZW5hYmxlTm9uTnVsbGFi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Ci8vLyBpbnRlcmZhY2UuCi8vLwovLy8gQWxsIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgaW4gdGVybXMgb2YgYGxlbmd0aGAsIGBvcGVyYXRvcltdYCwKLy8vIGBvcGVyYXRvcltdPWAgYW5kIGBsZW5ndGg9YCwgd2hpY2ggbmVlZCB0byBiZSBpbXBsZW1lbnRlZC4KLy8vCi8vLyAqTk9USUNFKjogRm9yd2FyZGluZyBqdXN0IHRoZXNlIGZvdXIgb3BlcmF0aW9ucyB0byBhIG5vcm1hbCBncm93YWJsZSBbTGlzdF0KLy8vIChhcyBjcmVhdGVkIGJ5IGBuZXcgTGlzdCgpYCkgd2lsbCBnaXZlIHZlcnkgYmFkIHBlcmZvcm1hbmNlIGZvciBgYWRkYCBhbmQKLy8vIGBhZGRBbGxgIG9wZXJhdGlvbnMgb2YgYExpc3RCYXNlYC4gVGhlc2Ugb3BlcmF0aW9ucyBhcmUgaW1wbGVtZW50ZWQgYnkKLy8vIGluY3JlYXNpbmcgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBieSBvbmUgZm9yIGVhY2ggYGFkZGAgb3BlcmF0aW9uLCBhbmQKLy8vIHJlcGVhdGVkbHkgaW5jcmVhc2luZyB0aGUgbGVuZ3RoIG9mIGEgZ3Jvd2FibGUgbGlzdCBpcyBub3QgZWZmaWNpZW50LgovLy8gVG8gYXZvaWQgdGhpcywgZWl0aGVyIG92ZXJyaWRlICdhZGQnIGFuZCAnYWRkQWxsJyB0byBhbHNvIGZvcndhcmQgZGlyZWN0bHkKLy8vIHRvIHRoZSBncm93YWJsZSBsaXN0LCBvciwgcHJlZmVyYWJseSwgdXNlIGBEZWxlZ2F0aW5nTGlzdGAgZnJvbQovLy8gInBhY2thZ2U6Y29sbGVjdGlvbi93cmFwcGVycy5kYXJ0IiBpbnN0ZWFkLgphYnN0cmFjdCBjbGFzcyBMaXN0QmFzZTxFPiBleHRlbmRzIE9iamVjdCB3aXRoIExpc3RNaXhpbjxFPiB7CiAgLy8vIENvbnZlcnQgYSBgTGlzdGAgdG8gYSBzdHJpbmcgYXMgYFtlYWNoLCBlbGVtZW50LCBhcywgc3RyaW5nXWAuCiAgLy8vCiAgLy8vIEhhbmRsZXMgY2lyY3VsYXIgcmVmZXJlbmNlcyB3aGVyZSBjb252ZXJ0aW5nIG9uZSBvZiB0aGUgZWxlbWVudHMKICAvLy8gdG8gYSBzdHJpbmcgZW5kcyB1cCBjb252ZXJ0aW5nIFtsaXN0XSB0byBhIHN0cmluZyBhZ2Fpbi4KICBzdGF0aWMgU3RyaW5nIGxpc3RUb1N0cmluZyhMaXN0IGxpc3QpID0+CiAgICAgIEl0ZXJhYmxlQmFzZS5pdGVyYWJsZVRvRnVsbFN0cmluZyhsaXN0LCAnWycsICddJyk7Cn0KCi8vLyBCYXNlIGltcGxlbWVudGF0aW9uIG9mIGEgW0xpc3RdIGNsYXNzLgovLy8KLy8vIGBMaXN0TWl4aW5gIGNhbiBiZSB1c2VkIGFzIGEgbWl4aW4gdG8gbWFrZSBhIGNsYXNzIGltcGxlbWVudAovLy8gdGhlIGBMaXN0YCBpbnRlcmZhY2UuCi8vLwovLy8gVGhpcyBpbXBsZW1lbnRzIGFsbCByZWFkIG9wZXJhdGlvbnMgdXNpbmcgb25seSB0aGUgYGxlbmd0aGAgYW5kCi8vLyBgb3BlcmF0b3JbXWAgbWVtYmVycy4gSXQgaW1wbGVtZW50cyB3cml0ZSBvcGVyYXRpb25zIHVzaW5nIHRob3NlIGFuZAovLy8gYGxlbmd0aD1gIGFuZCBgb3BlcmF0b3JbXT1gCi8vLwovLy8gKk5PVElDRSo6IEZvcndhcmRpbmcganVzdCB0aGVzZSBmb3VyIG9wZXJhdGlvbnMgdG8gYSBub3JtYWwgZ3Jvd2FibGUgW0xpc3RdCi8vLyAoYXMgY3JlYXRlZCBieSBgbmV3IExpc3QoKWApIHdpbGwgZ2l2ZSB2ZXJ5IGJhZCBwZXJmb3JtYW5jZSBmb3IgYGFkZGAgYW5kCi8vLyBgYWRkQWxsYCBvcGVyYXRpb25zIG9mIGBMaXN0QmFzZWAuIFRoZXNlIG9wZXJhdGlvbnMgYXJlIGltcGxlbWVudGVkIGJ5Ci8vLyBpbmNyZWFzaW5nIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYnkgb25lIGZvciBlYWNoIGBhZGRgIG9wZXJhdGlvbiwgYW5kCi8vLyByZXBlYXRlZGx5IGluY3JlYXNpbmcgdGhlIGxlbmd0aCBvZiBhIGdyb3dhYmxlIGxpc3QgaXMgbm90IGVmZmljaWVudC4KLy8vIFRvIGF2b2lkIHRoaXMsIGVpdGhlciBvdmVycmlkZSAnYWRkJyBhbmQgJ2FkZEFsbCcgdG8gYWxzbyBmb3J3YXJkIGRpcmVjdGx5Ci8vLyB0byB0aGUgZ3Jvd2FibGUgbGlzdCwgb3IsIGlmIHBvc3NpYmxlLCB1c2UgYERlbGVnYXRpbmdMaXN0YCBmcm9tCi8vLyAicGFja2FnZTpjb2xsZWN0aW9uL3dyYXBwZXJzLmRhcnQiIGluc3RlYWQuCmFic3RyYWN0IGNsYXNzIExpc3RNaXhpbjxFPiBpbXBsZW1lbnRzIExpc3Q8RT4gewogIC8vIEl0ZXJhYmxlIGludGVyZmFjZS4KICAvLyBUT0RPKGxybik6IFdoZW4gd2UgZ2V0IGNvbXBvc2FibGUgbWl4aW5zLCByZXVzZSBJdGVyYWJsZU1peGluIGluc3RlYWQKICAvLyBvZiByZWRhY2xhdGluZyBldmVyeXRoaW5nLgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBMaXN0SXRlcmF0b3I8RT4odGhpcyk7CgogIEUgZWxlbWVudEF0KGludCBpbmRleCkgPT4gdGhpc1tpbmRleF07CgogIEl0ZXJhYmxlPEU+IGZvbGxvd2VkQnkoSXRlcmFibGU8RT4gb3RoZXIpID0+CiAgICAgIEZvbGxvd2VkQnlJdGVyYWJsZTxFPi5maXJzdEVmZmljaWVudCh0aGlzLCBvdGhlcik7CgogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihFIGVsZW1lbnQpKSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGFjdGlvbih0aGlzW2ldKTsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBsZW5ndGggPT0gMDsKCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKCiAgRSBnZXQgZmlyc3QgewogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHJldHVybiB0aGlzWzBdOwogIH0KCiAgdm9pZCBzZXQgZmlyc3QoRSB2YWx1ZSkgewogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHRoaXNbMF0gPSB2YWx1ZTsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHJldHVybiB0aGlzW2xlbmd0aCAtIDFdOwogIH0KCiAgdm9pZCBzZXQgbGFzdChFIHZhbHVlKSB7CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgdGhpc1tsZW5ndGggLSAxXSA9IHZhbHVlOwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBpZiAobGVuZ3RoID4gMSkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogICAgcmV0dXJuIHRoaXNbMF07CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHJldHVybiB0cnVlOwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIGV2ZXJ5KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICghdGVzdCh0aGlzW2ldKSkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGJvb2wgYW55KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0ZXN0KHRoaXNbaV0pKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgRSBmaXJzdFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgRSBlbGVtZW50ID0gdGhpc1tpXTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiBlbGVtZW50OwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBsYXN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IGxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIEUgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgRSBtYXRjaDsKICAgIGJvb2wgbWF0Y2hGb3VuZCA9IGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBFIGVsZW1lbnQgPSB0aGlzW2ldOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIGlmIChtYXRjaEZvdW5kKSB7CiAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgfQogICAgICAgIG1hdGNoRm91bmQgPSB0cnVlOwogICAgICAgIG1hdGNoID0gZWxlbWVudDsKICAgICAgfQogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICBpZiAobWF0Y2hGb3VuZCkgcmV0dXJuIG1hdGNoOwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIFN0cmluZyBqb2luKFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBpZiAobGVuZ3RoID09IDApIHJldHVybiAiIjsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBTdHJpbmdCdWZmZXIoKS4ud3JpdGVBbGwodGhpcywgc2VwYXJhdG9yKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIEl0ZXJhYmxlPEU+IHdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBXaGVyZUl0ZXJhYmxlPEU+KHRoaXMsIHRlc3QpOwoKICBJdGVyYWJsZTxUPiB3aGVyZVR5cGU8VD4oKSA9PiBXaGVyZVR5cGVJdGVyYWJsZTxUPih0aGlzKTsKCiAgSXRlcmFibGU8VD4gbWFwPFQ+KFQgZihFIGVsZW1lbnQpKSA9PiBNYXBwZWRMaXN0SXRlcmFibGU8RSwgVD4odGhpcywgZik7CgogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKEUgZWxlbWVudCkpID0+CiAgICAgIEV4cGFuZEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICBFIHJlZHVjZShFIGNvbWJpbmUoRSBwcmV2aW91c1ZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgRSB2YWx1ZSA9IHRoaXNbMF07CiAgICBmb3IgKGludCBpID0gMTsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHZhbHVlID0gY29tYmluZSh2YWx1ZSwgdGhpc1tpXSk7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgcHJldmlvdXNWYWx1ZSwgRSBlbGVtZW50KSkgewogICAgdmFyIHZhbHVlID0gaW5pdGlhbFZhbHVlOwogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIHRoaXNbaV0pOwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwKGludCBjb3VudCkgPT4gU3ViTGlzdEl0ZXJhYmxlPEU+KHRoaXMsIGNvdW50LCBudWxsKTsKCiAgSXRlcmFibGU8RT4gc2tpcFdoaWxlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICByZXR1cm4gU2tpcFdoaWxlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CiAgfQoKICBJdGVyYWJsZTxFPiB0YWtlKGludCBjb3VudCkgPT4gU3ViTGlzdEl0ZXJhYmxlPEU+KHRoaXMsIDAsIGNvdW50KTsKCiAgSXRlcmFibGU8RT4gdGFrZVdoaWxlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICByZXR1cm4gVGFrZVdoaWxlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CiAgfQoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZSA9IHRydWV9KSB7CiAgICBMaXN0PEU+IHJlc3VsdDsKICAgIGlmIChncm93YWJsZSkgewogICAgICByZXN1bHQgPSA8RT5bXS4ubGVuZ3RoID0gbGVuZ3RoOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0ID0gTGlzdDxFPihsZW5ndGgpOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHRbaV0gPSB0aGlzW2ldOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFNldDxFPiB0b1NldCgpIHsKICAgIFNldDxFPiByZXN1bHQgPSBTZXQ8RT4oKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0LmFkZCh0aGlzW2ldKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBMaXN0IGludGVyZmFjZS4KICB2b2lkIGFkZChFIGVsZW1lbnQpIHsKICAgIHRoaXNbdGhpcy5sZW5ndGgrK10gPSBlbGVtZW50OwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIGludCBpID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKEUgZWxlbWVudCBpbiBpdGVyYWJsZSkgewogICAgICBhc3NlcnQodGhpcy5sZW5ndGggPT0gaSB8fCAodGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpKSk7CiAgICAgIHRoaXMubGVuZ3RoID0gaSArIDE7CiAgICAgIHRoaXNbaV0gPSBlbGVtZW50OwogICAgICBpKys7CiAgICB9CiAgfQoKICBib29sIHJlbW92ZShPYmplY3QgZWxlbWVudCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0aGlzW2ldID09IGVsZW1lbnQpIHsKICAgICAgICB0aGlzLl9jbG9zZUdhcChpLCBpICsgMSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBSZW1vdmVzIGVsZW1lbnRzIGZyb20gdGhlIGxpc3Qgc3RhcnRpbmcgYXQgW3N0YXJ0XSB1cCB0byBidXQgbm90IGluY2x1ZGluZwogIC8vLyBbZW5kXS4gIEFyZ3VtZW50cyBhcmUgcHJlLXZhbGlkYXRlZC4KICB2b2lkIF9jbG9zZUdhcChpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGFzc2VydCgwIDw9IHN0YXJ0KTsKICAgIGFzc2VydChzdGFydCA8IGVuZCk7CiAgICBhc3NlcnQoZW5kIDw9IGxlbmd0aCk7CiAgICBpbnQgc2l6ZSA9IGVuZCAtIHN0YXJ0OwogICAgZm9yIChpbnQgaSA9IGVuZDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHRoaXNbaSAtIHNpemVdID0gdGhpc1tpXTsKICAgIH0KICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoIC0gc2l6ZTsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIF9maWx0ZXIodGVzdCwgZmFsc2UpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2ZpbHRlcih0ZXN0LCB0cnVlKTsKICB9CgogIHZvaWQgX2ZpbHRlcihib29sIHRlc3QoRSBlbGVtZW50KSwgYm9vbCByZXRhaW5NYXRjaGluZykgewogICAgTGlzdDxFPiByZXRhaW5lZCA9IDxFPltdOwogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YXIgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpID09IHJldGFpbk1hdGNoaW5nKSB7CiAgICAgICAgcmV0YWluZWQuYWRkKGVsZW1lbnQpOwogICAgICB9CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChyZXRhaW5lZC5sZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgdGhpcy5zZXRSYW5nZSgwLCByZXRhaW5lZC5sZW5ndGgsIHJldGFpbmVkKTsKICAgICAgdGhpcy5sZW5ndGggPSByZXRhaW5lZC5sZW5ndGg7CiAgICB9CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgdGhpcy5sZW5ndGggPSAwOwogIH0KCiAgTGlzdDxSPiBjYXN0PFI+KCkgPT4gTGlzdC5jYXN0RnJvbTxFLCBSPih0aGlzKTsKICBFIHJlbW92ZUxhc3QoKSB7CiAgICBpZiAobGVuZ3RoID09IDApIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB9CiAgICBFIHJlc3VsdCA9IHRoaXNbbGVuZ3RoIC0gMV07CiAgICBsZW5ndGgtLTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIHNvcnQoW2ludCBjb21wYXJlKEUgYSwgRSBiKV0pIHsKICAgIFNvcnQuc29ydCh0aGlzLCBjb21wYXJlID8/IF9jb21wYXJlQW55KTsKICB9CgogIHN0YXRpYyBpbnQgX2NvbXBhcmVBbnkoYSwgYikgewogICAgLy8gSW4gc3Ryb25nIG1vZGUgQ29tcGFyYWJsZS5jb21wYXJlIHJlcXVpcmVzIGFuIGltcGxpY2l0IGNhc3QgdG8gZW5zdXJlCiAgICAvLyBgYWAgYW5kIGBiYCBhcmUgQ29tcGFyYWJsZS4KICAgIHJldHVybiBDb21wYXJhYmxlLmNvbXBhcmUoYSwgYik7CiAgfQoKICB2b2lkIHNodWZmbGUoW1JhbmRvbSByYW5kb21dKSB7CiAgICByYW5kb20gPz89IFJhbmRvbSgpOwogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgd2hpbGUgKGxlbmd0aCA+IDEpIHsKICAgICAgaW50IHBvcyA9IHJhbmRvbS5uZXh0SW50KGxlbmd0aCk7CiAgICAgIGxlbmd0aCAtPSAxOwogICAgICB2YXIgdG1wID0gdGhpc1tsZW5ndGhdOwogICAgICB0aGlzW2xlbmd0aF0gPSB0aGlzW3Bvc107CiAgICAgIHRoaXNbcG9zXSA9IHRtcDsKICAgIH0KICB9CgogIE1hcDxpbnQsIEU+IGFzTWFwKCkgewogICAgcmV0dXJuIExpc3RNYXBWaWV3PEU+KHRoaXMpOwogIH0KCiAgTGlzdDxFPiBvcGVyYXRvciArKExpc3Q8RT4gb3RoZXIpIHsKICAgIHZhciByZXN1bHQgPSA8RT5bXS4ubGVuZ3RoID0gKHRoaXMubGVuZ3RoICsgb3RoZXIubGVuZ3RoKTsKICAgIHJlc3VsdC5zZXRSYW5nZSgwLCB0aGlzLmxlbmd0aCwgdGhpcyk7CiAgICByZXN1bHQuc2V0UmFuZ2UodGhpcy5sZW5ndGgsIHJlc3VsdC5sZW5ndGgsIG90aGVyKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBMaXN0PEU+IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIGludCBsaXN0TGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBlbmQgPz89IGxpc3RMZW5ndGg7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBsaXN0TGVuZ3RoKTsKICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIExpc3Q8RT4gcmVzdWx0ID0gPEU+W10uLmxlbmd0aCA9IGxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0W2ldID0gdGhpc1tzdGFydCArIGldOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEl0ZXJhYmxlPEU+IGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgcmV0dXJuIFN1Ykxpc3RJdGVyYWJsZTxFPih0aGlzLCBzdGFydCwgZW5kKTsKICB9CgogIHZvaWQgcmVtb3ZlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCB0aGlzLmxlbmd0aCk7CiAgICBpZiAoZW5kID4gc3RhcnQpIHsKICAgICAgX2Nsb3NlR2FwKHN0YXJ0LCBlbmQpOwogICAgfQogIH0KCiAgdm9pZCBmaWxsUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBbRSBmaWxsXSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdGhpc1tpXSA9IGZpbGw7CiAgICB9CiAgfQoKICB2b2lkIHNldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8RT4gaXRlcmFibGUsIFtpbnQgc2tpcENvdW50ID0gMF0pIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuOwogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKHNraXBDb3VudCwgInNraXBDb3VudCIpOwoKICAgIExpc3Q8RT4gb3RoZXJMaXN0OwogICAgaW50IG90aGVyU3RhcnQ7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogTWFrZSB0aGlzIGFjY2VwdCBtb3JlLgogICAgaWYgKGl0ZXJhYmxlIGlzIExpc3Q8RT4pIHsKICAgICAgb3RoZXJMaXN0ID0gaXRlcmFibGU7CiAgICAgIG90aGVyU3RhcnQgPSBza2lwQ291bnQ7CiAgICB9IGVsc2UgewogICAgICBvdGhlckxpc3QgPSBpdGVyYWJsZS5za2lwKHNraXBDb3VudCkudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICAgIG90aGVyU3RhcnQgPSAwOwogICAgfQogICAgaWYgKG90aGVyU3RhcnQgKyBsZW5ndGggPiBvdGhlckxpc3QubGVuZ3RoKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb0ZldygpOwogICAgfQogICAgaWYgKG90aGVyU3RhcnQgPCBzdGFydCkgewogICAgICAvLyBDb3B5IGJhY2t3YXJkcyB0byBlbnN1cmUgY29ycmVjdCBjb3B5IGlmIFtmcm9tXSBpcyB0aGlzLgogICAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICB0aGlzW3N0YXJ0ICsgaV0gPSBvdGhlckxpc3Rbb3RoZXJTdGFydCArIGldOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgdGhpc1tzdGFydCArIGldID0gb3RoZXJMaXN0W290aGVyU3RhcnQgKyBpXTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCByZXBsYWNlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBuZXdDb250ZW50cykgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgaWYgKG5ld0NvbnRlbnRzIGlzISBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZSkgewogICAgICBuZXdDb250ZW50cyA9IG5ld0NvbnRlbnRzLnRvTGlzdCgpOwogICAgfQogICAgaW50IHJlbW92ZUxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaW50IGluc2VydExlbmd0aCA9IG5ld0NvbnRlbnRzLmxlbmd0aDsKICAgIGlmIChyZW1vdmVMZW5ndGggPj0gaW5zZXJ0TGVuZ3RoKSB7CiAgICAgIGludCBpbnNlcnRFbmQgPSBzdGFydCArIGluc2VydExlbmd0aDsKICAgICAgdGhpcy5zZXRSYW5nZShzdGFydCwgaW5zZXJ0RW5kLCBuZXdDb250ZW50cyk7CiAgICAgIGlmIChyZW1vdmVMZW5ndGggPiBpbnNlcnRMZW5ndGgpIHsKICAgICAgICBfY2xvc2VHYXAoaW5zZXJ0RW5kLCBlbmQpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpbnQgZGVsdGEgPSBpbnNlcnRMZW5ndGggLSByZW1vdmVMZW5ndGg7CiAgICAgIGludCBuZXdMZW5ndGggPSB0aGlzLmxlbmd0aCArIGRlbHRhOwogICAgICBpbnQgaW5zZXJ0RW5kID0gc3RhcnQgKyBpbnNlcnRMZW5ndGg7IC8vIGFrYS4gZW5kICsgZGVsdGEuCiAgICAgIHRoaXMubGVuZ3RoID0gbmV3TGVuZ3RoOwogICAgICB0aGlzLnNldFJhbmdlKGluc2VydEVuZCwgbmV3TGVuZ3RoLCB0aGlzLCBlbmQpOwogICAgICB0aGlzLnNldFJhbmdlKHN0YXJ0LCBpbnNlcnRFbmQsIG5ld0NvbnRlbnRzKTsKICAgIH0KICB9CgogIGludCBpbmRleE9mKE9iamVjdCBlbGVtZW50LCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdGFydCA8IDApIHN0YXJ0ID0gMDsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBpbnQgaW5kZXhXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDA7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0ZXN0KHRoaXNbaV0pKSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIGludCBsYXN0SW5kZXhPZihPYmplY3QgZWxlbWVudCwgW2ludCBzdGFydF0pIHsKICAgIGlmIChzdGFydCA9PSBudWxsIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSBzdGFydCA9IHRoaXMubGVuZ3RoIC0gMTsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHsKICAgICAgaWYgKHRoaXNbaV0gPT0gZWxlbWVudCkgcmV0dXJuIGk7CiAgICB9CiAgICByZXR1cm4gLTE7CiAgfQoKICBpbnQgbGFzdEluZGV4V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIFtpbnQgc3RhcnRdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgc3RhcnQgPSB0aGlzLmxlbmd0aCAtIDE7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGlmICh0ZXN0KHRoaXNbaV0pKSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiAtMTsKICB9CgogIHZvaWQgaW5zZXJ0KGludCBpbmRleCwgRSBlbGVtZW50KSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChpbmRleCwgImluZGV4Iik7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsdWVJbkludGVydmFsKGluZGV4LCAwLCBsZW5ndGgsICJpbmRleCIpOwogICAgaWYgKGluZGV4ID09IHRoaXMubGVuZ3RoKSB7CiAgICAgIGFkZChlbGVtZW50KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5sZW5ndGgrKzsKICAgIHNldFJhbmdlKGluZGV4ICsgMSwgdGhpcy5sZW5ndGgsIHRoaXMsIGluZGV4KTsKICAgIHRoaXNbaW5kZXhdID0gZWxlbWVudDsKICB9CgogIEUgcmVtb3ZlQXQoaW50IGluZGV4KSB7CiAgICBFIHJlc3VsdCA9IHRoaXNbaW5kZXhdOwogICAgX2Nsb3NlR2FwKGluZGV4LCBpbmRleCArIDEpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgaW5zZXJ0QWxsKGludCBpbmRleCwgSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwoaW5kZXgsIDAsIGxlbmd0aCwgImluZGV4Iik7CiAgICBpZiAoaXRlcmFibGUgaXMhIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlIHx8IGlkZW50aWNhbChpdGVyYWJsZSwgdGhpcykpIHsKICAgICAgaXRlcmFibGUgPSBpdGVyYWJsZS50b0xpc3QoKTsKICAgIH0KICAgIGludCBpbnNlcnRpb25MZW5ndGggPSBpdGVyYWJsZS5sZW5ndGg7CiAgICAvLyBUaGVyZSBtaWdodCBiZSBlcnJvcnMgYWZ0ZXIgdGhlIGxlbmd0aCBjaGFuZ2UsIGluIHdoaWNoIGNhc2UgdGhlIGxpc3QKICAgIC8vIHdpbGwgZW5kIHVwIGJlaW5nIG1vZGlmaWVkIGJ1dCB0aGUgb3BlcmF0aW9uIG5vdCBjb21wbGV0ZS4gVW5sZXNzIHdlCiAgICAvLyBhbHdheXMgZ28gdGhyb3VnaCBhICJ0b0xpc3QiIHdlIGNhbid0IHJlYWxseSBhdm9pZCB0aGF0LgogICAgdGhpcy5sZW5ndGggKz0gaW5zZXJ0aW9uTGVuZ3RoOwogICAgaWYgKGl0ZXJhYmxlLmxlbmd0aCAhPSBpbnNlcnRpb25MZW5ndGgpIHsKICAgICAgLy8gSWYgdGhlIGl0ZXJhYmxlJ3MgbGVuZ3RoIGlzIGxpbmtlZCB0byB0aGlzIGxpc3QncyBsZW5ndGggc29tZWhvdywKICAgICAgLy8gd2UgY2FuJ3QgaW5zZXJ0IG9uZSBpbiB0aGUgb3RoZXIuCiAgICAgIHRoaXMubGVuZ3RoIC09IGluc2VydGlvbkxlbmd0aDsKICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKGl0ZXJhYmxlKTsKICAgIH0KICAgIHNldFJhbmdlKGluZGV4ICsgaW5zZXJ0aW9uTGVuZ3RoLCB0aGlzLmxlbmd0aCwgdGhpcywgaW5kZXgpOwogICAgc2V0QWxsKGluZGV4LCBpdGVyYWJsZSk7CiAgfQoKICB2b2lkIHNldEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICBpZiAoaXRlcmFibGUgaXMgTGlzdCkgewogICAgICBzZXRSYW5nZShpbmRleCwgaW5kZXggKyBpdGVyYWJsZS5sZW5ndGgsIGl0ZXJhYmxlKTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoRSBlbGVtZW50IGluIGl0ZXJhYmxlKSB7CiAgICAgICAgdGhpc1tpbmRleCsrXSA9IGVsZW1lbnQ7CiAgICAgIH0KICAgIH0KICB9CgogIEl0ZXJhYmxlPEU+IGdldCByZXZlcnNlZCA9PiBSZXZlcnNlZExpc3RJdGVyYWJsZTxFPih0aGlzKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gSXRlcmFibGVCYXNlLml0ZXJhYmxlVG9GdWxsU3RyaW5nKHRoaXMsICdbJywgJ10nKTsKfQqCGQBOTjwBGQEnBEcPBEM/BFBOS0tKT0QwPkUGRz8rOQIBKwRBGgRESSAEUE5LS0pPRTAxGUsgNQEpAS85ASkeJxcjMQgGBAEeIwEjARA9FAQBHD0VBAEPPR0EARs9HgQBET06FAQBIh4nKyMxCAYSBAElHicoIzEIBhEEASMeJyYjMQgGEgQBNR4nGykjMQgGKSwEATQeLBspIzEIBiksBAE2Hg0dJxsbGjAKGxkIIzEIBiIpLAQBKSBFHgQBSwE8AUsBNSUBNB49FycnIzEIBhIEAUUeHicnIzEIBhIEAUgBMC0EAUUBMC0EASsUFCcNIAYnGwYTBAETHicbBhMEARUYIwQBJhkiTRsZCwYEASAsICIVCAYSBAFRKyceGBkbHCkgBiEEASsaBAErGQQBPB4eJx0tHwgjMQgGKjMlBgQBERUEATITFy4GIQ4TBAEnLQQBIU0jJQQBIhkeGSgTHiAXBgQBGCEEASY/KzgTBAEqIhg4Hi0nIwYTBAEtOTEEASk5Fx0GBAExOSgWBgQBUTkeHTkBFxQuHxweDUQWBjIrBh5CLjUIDSk1CAYEAUM5MyoGJCsoLDQpIwgNLytBHzY0BgQBMR4wKAYPBAE6HjAjBg8EATFIJygGDwQBOkgnIwYPBAEmMEAgFA4GEzMbBAEaHCETBAE0QE0kBitNTEAkLksrJjMGQR0EATEcOg0kIQgGBAE9AUoCARlkYXJ0OmNvbGxlY3Rpb24vbGlzdC5kYXJ0QHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zY2FubmVyL3N0cmluZ19zY2FubmVyLmRhcnSM/y8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuc2Nhbm5lci5zdHJpbmdfc2Nhbm5lcjsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuLCBTeW50aGV0aWNTdHJpbmdUb2tlbiwgVG9rZW5UeXBlOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIGFzIGFuYWx5emVyIHNob3cgU3RyaW5nVG9rZW47CgppbXBvcnQgJ2Fic3RyYWN0X3NjYW5uZXIuZGFydCcKICAgIHNob3cgQWJzdHJhY3RTY2FubmVyLCBMYW5ndWFnZVZlcnNpb25DaGFuZ2VkLCBTY2FubmVyQ29uZmlndXJhdGlvbjsKCmltcG9ydCAndG9rZW4uZGFydCcKICAgIHNob3cgQ29tbWVudFRva2VuLCBEYXJ0RG9jVG9rZW4sIExhbmd1YWdlVmVyc2lvblRva2VuLCBTdHJpbmdUb2tlbjsKCmltcG9ydCAnZXJyb3JfdG9rZW4uZGFydCcgc2hvdyBFcnJvclRva2VuOwoKLyoqCiAqIFNjYW5uZXIgdGhhdCByZWFkcyBmcm9tIGEgU3RyaW5nIGFuZCBjcmVhdGVzIHRva2VucyB0aGF0IHBvaW50cyB0bwogKiBzdWJzdHJpbmdzLgogKi8KY2xhc3MgU3RyaW5nU2Nhbm5lciBleHRlbmRzIEFic3RyYWN0U2Nhbm5lciB7CiAgLyoqIFRoZSBmaWxlIGNvbnRlbnQuICovCiAgU3RyaW5nIHN0cmluZzsKCiAgLyoqIFRoZSBjdXJyZW50IG9mZnNldCBpbiBbc3RyaW5nXS4gKi8KICBpbnQgc2Nhbk9mZnNldCA9IC0xOwoKICBTdHJpbmdTY2FubmVyKFN0cmluZyBzdHJpbmcsCiAgICAgIHtTY2FubmVyQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uLAogICAgICBib29sIGluY2x1ZGVDb21tZW50czogZmFsc2UsCiAgICAgIExhbmd1YWdlVmVyc2lvbkNoYW5nZWQgbGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZH0pCiAgICAgIDogc3RyaW5nID0gZW5zdXJlWmVyb1Rlcm1pbmF0aW9uKHN0cmluZyksCiAgICAgICAgc3VwZXIoY29uZmlndXJhdGlvbiwgaW5jbHVkZUNvbW1lbnRzLCBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkKTsKCiAgc3RhdGljIFN0cmluZyBlbnN1cmVaZXJvVGVybWluYXRpb24oU3RyaW5nIHN0cmluZykgewogICAgcmV0dXJuIChzdHJpbmcuaXNFbXB0eSB8fCBzdHJpbmcuY29kZVVuaXRBdChzdHJpbmcubGVuZ3RoIC0gMSkgIT0gMCkKICAgICAgICAvLyBUT0RPKGxyeSk6IGFib3J0IGluc3RlYWQgb2YgY29weWluZyB0aGUgYXJyYXksIG9yIHdhcm4/CiAgICAgICAgPyBzdHJpbmcgKyAnXHgwMCcKICAgICAgICA6IHN0cmluZzsKICB9CgogIHN0YXRpYyBib29sIGlzTGVnYWxJZGVudGlmaWVyKFN0cmluZyBpZGVudGlmaWVyKSB7CiAgICBTdHJpbmdTY2FubmVyIHNjYW5uZXIgPSBuZXcgU3RyaW5nU2Nhbm5lcihpZGVudGlmaWVyKTsKICAgIFRva2VuIHN0YXJ0VG9rZW4gPSBzY2FubmVyLnRva2VuaXplKCk7CiAgICByZXR1cm4gc3RhcnRUb2tlbiBpcyEgRXJyb3JUb2tlbiAmJiBzdGFydFRva2VuLm5leHQuaXNFb2Y7CiAgfQoKICBpbnQgYWR2YW5jZSgpID0+IHN0cmluZy5jb2RlVW5pdEF0KCsrc2Nhbk9mZnNldCk7CiAgaW50IHBlZWsoKSA9PiBzdHJpbmcuY29kZVVuaXRBdChzY2FuT2Zmc2V0ICsgMSk7CgogIGludCBnZXQgc3RyaW5nT2Zmc2V0ID0+IHNjYW5PZmZzZXQ7CgogIGludCBjdXJyZW50QXNVbmljb2RlKGludCBuZXh0KSA9PiBuZXh0OwoKICB2b2lkIGhhbmRsZVVuaWNvZGUoaW50IHN0YXJ0U2Nhbk9mZnNldCkge30KCiAgQG92ZXJyaWRlCiAgYW5hbHl6ZXIuU3RyaW5nVG9rZW4gY3JlYXRlU3Vic3RyaW5nVG9rZW4oCiAgICAgIFRva2VuVHlwZSB0eXBlLCBpbnQgc3RhcnQsIGJvb2wgYXNjaWlPbmx5LAogICAgICBbaW50IGV4dHJhT2Zmc2V0ID0gMF0pIHsKICAgIHJldHVybiBuZXcgU3RyaW5nVG9rZW4uZnJvbVN1YnN0cmluZygKICAgICAgICB0eXBlLCBzdHJpbmcsIHN0YXJ0LCBzY2FuT2Zmc2V0ICsgZXh0cmFPZmZzZXQsIHRva2VuU3RhcnQsCiAgICAgICAgY2Fub25pY2FsaXplOiB0cnVlLCBwcmVjZWRpbmdDb21tZW50czogY29tbWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYW5hbHl6ZXIuU3RyaW5nVG9rZW4gY3JlYXRlU3ludGhldGljU3Vic3RyaW5nVG9rZW4oCiAgICAgIFRva2VuVHlwZSB0eXBlLCBpbnQgc3RhcnQsIGJvb2wgYXNjaWlPbmx5LCBTdHJpbmcgc3ludGhldGljQ2hhcnMpIHsKICAgIFN0cmluZyBzb3VyY2UgPSBzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBzY2FuT2Zmc2V0KTsKICAgIHJldHVybiBuZXcgU3ludGhldGljU3RyaW5nVG9rZW4oCiAgICAgICAgdHlwZSwgc291cmNlICsgc3ludGhldGljQ2hhcnMsIHRva2VuU3RhcnQsIHNvdXJjZS5sZW5ndGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29tbWVudFRva2VuIGNyZWF0ZUNvbW1lbnRUb2tlbihUb2tlblR5cGUgdHlwZSwgaW50IHN0YXJ0LCBib29sIGFzY2lpT25seSwKICAgICAgW2ludCBleHRyYU9mZnNldCA9IDBdKSB7CiAgICByZXR1cm4gbmV3IENvbW1lbnRUb2tlbi5mcm9tU3Vic3RyaW5nKAogICAgICAgIHR5cGUsIHN0cmluZywgc3RhcnQsIHNjYW5PZmZzZXQgKyBleHRyYU9mZnNldCwgdG9rZW5TdGFydCwKICAgICAgICBjYW5vbmljYWxpemU6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydERvY1Rva2VuIGNyZWF0ZURhcnREb2NUb2tlbihUb2tlblR5cGUgdHlwZSwgaW50IHN0YXJ0LCBib29sIGFzY2lpT25seSwKICAgICAgW2ludCBleHRyYU9mZnNldCA9IDBdKSB7CiAgICByZXR1cm4gbmV3IERhcnREb2NUb2tlbi5mcm9tU3Vic3RyaW5nKAogICAgICAgIHR5cGUsIHN0cmluZywgc3RhcnQsIHNjYW5PZmZzZXQgKyBleHRyYU9mZnNldCwgdG9rZW5TdGFydCwKICAgICAgICBjYW5vbmljYWxpemU6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4gY3JlYXRlTGFuZ3VhZ2VWZXJzaW9uVG9rZW4oCiAgICAgIGludCBzdGFydCwgaW50IG1ham9yLCBpbnQgbWlub3IpIHsKICAgIHJldHVybiBuZXcgTGFuZ3VhZ2VWZXJzaW9uVG9rZW4uZnJvbVN1YnN0cmluZygKICAgICAgICBzdHJpbmcsIHN0YXJ0LCBzY2FuT2Zmc2V0LCB0b2tlblN0YXJ0LCBtYWpvciwgbWlub3IsCiAgICAgICAgY2Fub25pY2FsaXplOiB0cnVlKTsKICB9CgogIGJvb2wgYXRFbmRPZkZpbGUoKSA9PiBzY2FuT2Zmc2V0ID49IHN0cmluZy5sZW5ndGggLSAxOwp9CmcATk48ASgBTwFAAR9IARRIASsBBEYPBC4bEQEpFwEfKyM2MEcBN0lDGhIEATU7Kz8EATQzASYBKgEtAQwtMR8qQzoEAQw2SjklQwQBDE0fK0MdBAEMTR8rQx0EAQwzKTM9HQQBOQIBN3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY2FubmVyL3N0cmluZ19zY2FubmVyLmRhcnREc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NjYW5uZXIvdXRmOF9ieXRlc19zY2FubmVyLmRhcnShRi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnNjYW5uZXIudXRmOF9ieXRlc19zY2FubmVyOwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cgdW5pY29kZUJvbUNoYXJhY3RlclJ1bmUsIHV0Zjg7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBTeW50aGV0aWNTdHJpbmdUb2tlbiwgVG9rZW5UeXBlOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIGFzIGFuYWx5emVyIHNob3cgU3RyaW5nVG9rZW47CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcgc2hvdyB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI7CgppbXBvcnQgJ2Fic3RyYWN0X3NjYW5uZXIuZGFydCcKICAgIHNob3cgQWJzdHJhY3RTY2FubmVyLCBMYW5ndWFnZVZlcnNpb25DaGFuZ2VkLCBTY2FubmVyQ29uZmlndXJhdGlvbjsKCmltcG9ydCAndG9rZW4uZGFydCcKICAgIHNob3cgQ29tbWVudFRva2VuLCBEYXJ0RG9jVG9rZW4sIExhbmd1YWdlVmVyc2lvblRva2VuLCBTdHJpbmdUb2tlbjsKCi8qKgogKiBTY2FubmVyIHRoYXQgcmVhZHMgZnJvbSBhIFVURi04IGVuY29kZWQgbGlzdCBvZiBieXRlcyBhbmQgY3JlYXRlcyB0b2tlbnMKICogdGhhdCBwb2ludHMgdG8gc3Vic3RyaW5ncy4KICovCmNsYXNzIFV0ZjhCeXRlc1NjYW5uZXIgZXh0ZW5kcyBBYnN0cmFjdFNjYW5uZXIgewogIC8qKgogICAqIFRoZSBmaWxlIGNvbnRlbnQuCiAgICoKICAgKiBUaGUgY29udGVudCBpcyB6ZXJvLXRlcm1pbmF0ZWQuCiAgICovCiAgTGlzdDxpbnQ+IGJ5dGVzOwoKICAvKioKICAgKiBQb2ludHMgdG8gdGhlIG9mZnNldCBvZiB0aGUgbGFzdCBieXRlIHJldHVybmVkIGJ5IFthZHZhbmNlXS4KICAgKgogICAqIEFmdGVyIGludm9raW5nIFtjdXJyZW50QXNVbmljb2RlXSwgdGhlIFtieXRlT2Zmc2V0XSBwb2ludHMgdG8gdGhlIGxhc3QKICAgKiBieXRlIHRoYXQgaXMgcGFydCBvZiB0aGUgKHVuaWNvZGUgb3IgQVNDSUkpIGNoYXJhY3Rlci4gVGhhdCB3YXksIFthZHZhbmNlXQogICAqIGNhbiBhbHdheXMgaW5jcmVhc2UgdGhlIGJ5dGUgb2Zmc2V0IGJ5IDEuCiAgICovCiAgaW50IGJ5dGVPZmZzZXQgPSAtMTsKCiAgLyoqCiAgICogVGhlIGdldHRlciBbc2Nhbk9mZnNldF0gaXMgZXhwZWN0ZWQgdG8gcmV0dXJuIHRoZSBpbmRleCB3aGVyZSB0aGUgY3VycmVudAogICAqIGNoYXJhY3RlciAqc3RhcnRzKi4gSW4gY2FzZSBvZiBhIG5vbi1hc2NpaSBjaGFyYWN0ZXIsIGFmdGVyIGludm9raW5nCiAgICogW2N1cnJlbnRBc1VuaWNvZGVdLCB0aGUgYnl0ZSBvZmZzZXQgcG9pbnRzIHRvIHRoZSAqbGFzdCogYnl0ZS4KICAgKgogICAqIFRoaXMgZmllbGQga2VlcHMgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBieXRlcyBmb3IgdGhlIGN1cnJlbnQgdW5pY29kZQogICAqIGNoYXJhY3Rlci4gRm9yIGV4YW1wbGUsIGlmIGJ5dGVzIDcsOCw5IGVuY29kZSBvbmUgdW5pY29kZSBjaGFyYWN0ZXIsIHRoZQogICAqIFtieXRlT2Zmc2V0XSBpcyA5IChhZnRlciBpbnZva2luZyBbY3VycmVudEFzVW5pY29kZV0pLiBUaGUgW3NjYW5TbGFja10KICAgKiB3aWxsIGJlIDIsIHNvIHRoYXQgW3NjYW5PZmZzZXRdIHJldHVybnMgNy4KICAgKi8KICBpbnQgc2NhblNsYWNrID0gMDsKCiAgLyoqCiAgICogSG9sZHMgdGhlIFtieXRlT2Zmc2V0XSB2YWx1ZSBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgW3NjYW5TbGFja10gaXMgdmFsaWQuCiAgICovCiAgaW50IHNjYW5TbGFja09mZnNldCA9IC0xOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBieXRlIG9mZnNldCBvZiB0aGUgZmlyc3QgYnl0ZSB0aGF0IGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQKICAgKiBjaGFyYWN0ZXIuCiAgICovCiAgaW50IGdldCBzY2FuT2Zmc2V0IHsKICAgIGlmIChieXRlT2Zmc2V0ID09IHNjYW5TbGFja09mZnNldCkgewogICAgICByZXR1cm4gYnl0ZU9mZnNldCAtIHNjYW5TbGFjazsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBieXRlT2Zmc2V0OwogICAgfQogIH0KCiAgLyoqCiAgICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFuZCB0aGUgbnVtYmVyIG9mIGNvcnJlc3BvbmRpbmcKICAgKiBzdHJpbmcgY2hhcmFjdGVycywgdXAgdG8gdGhlIGN1cnJlbnQgW2J5dGVPZmZzZXRdLgogICAqLwogIGludCB1dGY4U2xhY2sgPSAwOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IFV0ZjhCeXRlc1NjYW5uZXIuIFRoZSBzb3VyY2UgZmlsZSBpcyBleHBlY3RlZCB0byBiZSBhCiAgICogW1V0ZjhCeXRlc1NvdXJjZUZpbGVdIHRoYXQgaG9sZHMgYSBsaXN0IG9mIFVURi04IGJ5dGVzLiBPdGhlcndpc2UgdGhlCiAgICogc3RyaW5nIHRleHQgb2YgdGhlIHNvdXJjZSBmaWxlIGlzIGRlY29kZWQuCiAgICoKICAgKiBUaGUgbGlzdCBvZiBVVEYtOCBieXRlcyBbZmlsZS5zbG93VXRmOEJ5dGVzKCldIGlzIGV4cGVjdGVkIHRvIHJldHVybiBhbgogICAqIGFycmF5IHdob3NlIGxhc3QgZWxlbWVudCBpcyAnMCcgdG8gc2lnbmFsIHRoZSBlbmQgb2YgdGhlIGZpbGUuIElmIHRoaXMKICAgKiBpcyBub3QgdGhlIGNhc2UsIHRoZSBlbnRpcmUgYXJyYXkgaXMgY29waWVkIGJlZm9yZSBzY2FubmluZy4KICAgKi8KICBVdGY4Qnl0ZXNTY2FubmVyKHRoaXMuYnl0ZXMsCiAgICAgIHtTY2FubmVyQ29uZmlndXJhdGlvbiBjb25maWd1cmF0aW9uLAogICAgICBib29sIGluY2x1ZGVDb21tZW50czogZmFsc2UsCiAgICAgIExhbmd1YWdlVmVyc2lvbkNoYW5nZWQgbGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZH0pCiAgICAgIDogc3VwZXIoY29uZmlndXJhdGlvbiwgaW5jbHVkZUNvbW1lbnRzLCBsYW5ndWFnZVZlcnNpb25DaGFuZ2VkLAogICAgICAgICAgICBudW1iZXJPZkJ5dGVzSGludDogYnl0ZXMubGVuZ3RoKSB7CiAgICBhc3NlcnQoYnl0ZXMubGFzdCA9PSAwKTsKICAgIC8vIFNraXAgYSBsZWFkaW5nIEJPTS4KICAgIGlmIChjb250YWluc0JvbUF0KDApKSBieXRlT2Zmc2V0ICs9IDM7CiAgfQoKICBib29sIGNvbnRhaW5zQm9tQXQoaW50IG9mZnNldCkgewogICAgY29uc3QgQk9NX1VURjggPSBjb25zdCBbMHhFRiwgMHhCQiwgMHhCRl07CgogICAgcmV0dXJuIG9mZnNldCArIDMgPCBieXRlcy5sZW5ndGggJiYKICAgICAgICBieXRlc1tvZmZzZXRdID09IEJPTV9VVEY4WzBdICYmCiAgICAgICAgYnl0ZXNbb2Zmc2V0ICsgMV0gPT0gQk9NX1VURjhbMV0gJiYKICAgICAgICBieXRlc1tvZmZzZXQgKyAyXSA9PSBCT01fVVRGOFsyXTsKICB9CgogIGludCBhZHZhbmNlKCkgPT4gYnl0ZXNbKytieXRlT2Zmc2V0XTsKCiAgaW50IHBlZWsoKSA9PiBieXRlc1tieXRlT2Zmc2V0ICsgMV07CgogIC8vLyBSZXR1cm5zIHRoZSB1bmljb2RlIGNvZGUgcG9pbnQgc3RhcnRpbmcgYXQgdGhlIGJ5dGUgb2Zmc2V0IFtzdGFydE9mZnNldF0KICAvLy8gd2l0aCB0aGUgYnl0ZSBbbmV4dEJ5dGVdLgogIGludCBuZXh0Q29kZVBvaW50KGludCBzdGFydE9mZnNldCwgaW50IG5leHRCeXRlKSB7CiAgICBpbnQgZXhwZWN0ZWRIaWdoQnl0ZXM7CiAgICBpZiAobmV4dEJ5dGUgPCAweEMyKSB7CiAgICAgIGV4cGVjdGVkSGlnaEJ5dGVzID0gMTsgLy8gQmFkIGNvZGUgdW5pdC4KICAgIH0gZWxzZSBpZiAobmV4dEJ5dGUgPCAweEUwKSB7CiAgICAgIGV4cGVjdGVkSGlnaEJ5dGVzID0gMjsKICAgIH0gZWxzZSBpZiAobmV4dEJ5dGUgPCAweEYwKSB7CiAgICAgIGV4cGVjdGVkSGlnaEJ5dGVzID0gMzsKICAgIH0gZWxzZSBpZiAobmV4dEJ5dGUgPCAweEY1KSB7CiAgICAgIGV4cGVjdGVkSGlnaEJ5dGVzID0gNDsKICAgIH0gZWxzZSB7CiAgICAgIGV4cGVjdGVkSGlnaEJ5dGVzID0gMTsgLy8gQmFkIGNvZGUgdW5pdC4KICAgIH0KICAgIGludCBudW1CeXRlcyA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkSGlnaEJ5dGVzOyBpKyspIHsKICAgICAgaWYgKGJ5dGVzW2J5dGVPZmZzZXQgKyBpXSA8IDB4ODApIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBudW1CeXRlcysrOwogICAgfQogICAgaW50IGVuZCA9IHN0YXJ0T2Zmc2V0ICsgbnVtQnl0ZXM7CiAgICBieXRlT2Zmc2V0ID0gZW5kIC0gMTsKICAgIGlmIChleHBlY3RlZEhpZ2hCeXRlcyA9PSAxIHx8IG51bUJ5dGVzICE9IGV4cGVjdGVkSGlnaEJ5dGVzKSB7CiAgICAgIHJldHVybiB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI7CiAgICB9CiAgICAvLyBUT0RPKGxyeSk6IG1lYXN1cmFibHkgc2xvdywgZGVjb2RlIGNyZWF0ZXMgZmlyc3QgYSBVdGY4RGVjb2RlciBhbmQgYQogICAgLy8gX1V0ZjhEZWNvZGVyIGluc3RhbmNlLiBBbHNvIHRoZSBzdWJsaXN0IGlzIGVhZ2VybHkgYWxsb2NhdGVkLgogICAgU3RyaW5nIGNvZGVQb2ludCA9CiAgICAgICAgdXRmOC5kZWNvZGUoYnl0ZXMuc3VibGlzdChzdGFydE9mZnNldCwgZW5kKSwgYWxsb3dNYWxmb3JtZWQ6IHRydWUpOwogICAgaWYgKGNvZGVQb2ludC5sZW5ndGggPT0gMCkgewogICAgICAvLyBUaGUgVVRGLTggZGVjb2RlciBkaXNjYXJkcyBsZWFkaW5nIEJPTSBjaGFyYWN0ZXJzLgogICAgICAvLyBUT0RPKGZsb2l0c2NoKTogZG9uJ3QganVzdCBhc3N1bWUgdGhhdCByZW1vdmVkIGNoYXJhY3RlcnMgd2VyZSB0aGUKICAgICAgLy8gQk9NLgogICAgICBhc3NlcnQoY29udGFpbnNCb21BdChzdGFydE9mZnNldCkpOwogICAgICBjb2RlUG9pbnQgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZSh1bmljb2RlQm9tQ2hhcmFjdGVyUnVuZSk7CiAgICB9CiAgICBpZiAoY29kZVBvaW50Lmxlbmd0aCA9PSAxKSB7CiAgICAgIHV0ZjhTbGFjayArPSAobnVtQnl0ZXMgLSAxKTsKICAgICAgc2NhblNsYWNrID0gbnVtQnl0ZXMgLSAxOwogICAgICBzY2FuU2xhY2tPZmZzZXQgPSBieXRlT2Zmc2V0OwogICAgICByZXR1cm4gY29kZVBvaW50LmNvZGVVbml0QXQoMCk7CiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludC5sZW5ndGggPT0gMikgewogICAgICB1dGY4U2xhY2sgKz0gKG51bUJ5dGVzIC0gMik7CiAgICAgIHNjYW5TbGFjayA9IG51bUJ5dGVzIC0gMTsKICAgICAgc2NhblNsYWNrT2Zmc2V0ID0gYnl0ZU9mZnNldDsKICAgICAgc3RyaW5nT2Zmc2V0U2xhY2tPZmZzZXQgPSBieXRlT2Zmc2V0OwogICAgICAvLyBJbiBjYXNlIG9mIGEgc3Vycm9nYXRlIHBhaXIsIHJldHVybiBhIHNpbmdsZSBjb2RlIHBvaW50LgogICAgICAvLyBHcmFjZWZ1bGx5IGRlZ3JhZGUgZ2l2ZW4gaW52YWxpZCBVVEYtOC4KICAgICAgdmFyIHJ1bmVzID0gY29kZVBvaW50LnJ1bmVzLml0ZXJhdG9yOwogICAgICBpZiAoIXJ1bmVzLm1vdmVOZXh0KCkpIHJldHVybiB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI7CiAgICAgIHZhciBjb2RlVW5pdCA9IHJ1bmVzLmN1cnJlbnQ7CiAgICAgIHJldHVybiAhcnVuZXMubW92ZU5leHQoKSA/IGNvZGVVbml0IDogdW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlcjsKICAgIH0KICB9CgogIGludCBsYXN0VW5pY29kZU9mZnNldCA9IC0xOwogIGludCBjdXJyZW50QXNVbmljb2RlKGludCBuZXh0KSB7CiAgICBpZiAobmV4dCA8IDEyOCkgcmV0dXJuIG5leHQ7CiAgICAvLyBDaGVjayBpZiBjdXJyZW50QXNVbmljb2RlIHdhcyBhbHJlYWR5IGludm9rZWQuCiAgICBpZiAoYnl0ZU9mZnNldCA9PSBsYXN0VW5pY29kZU9mZnNldCkgcmV0dXJuIG5leHQ7CiAgICBpbnQgcmVzID0gbmV4dENvZGVQb2ludChieXRlT2Zmc2V0LCBuZXh0KTsKICAgIGxhc3RVbmljb2RlT2Zmc2V0ID0gYnl0ZU9mZnNldDsKICAgIHJldHVybiByZXM7CiAgfQoKICB2b2lkIGhhbmRsZVVuaWNvZGUoaW50IHN0YXJ0U2Nhbk9mZnNldCkgewogICAgaW50IGVuZCA9IGJ5dGVPZmZzZXQ7CiAgICAvLyBUT0RPKGxyeSk6IHRoaXMgbWVhc3VyYWJseSBzbG93cyBkb3duIHRoZSBzY2FubmVyIGZvciBmaWxlcyB3aXRoIHVuaWNvZGUuCiAgICBTdHJpbmcgcyA9CiAgICAgICAgdXRmOC5kZWNvZGUoYnl0ZXMuc3VibGlzdChzdGFydFNjYW5PZmZzZXQsIGVuZCksIGFsbG93TWFsZm9ybWVkOiB0cnVlKTsKICAgIHV0ZjhTbGFjayArPSAoZW5kIC0gc3RhcnRTY2FuT2Zmc2V0KSAtIHMubGVuZ3RoOwogIH0KCiAgLyoqCiAgICogVGhpcyBmaWVsZCByZW1lbWJlcnMgdGhlIGJ5dGUgb2Zmc2V0IG9mIHRoZSBsYXN0IGNoYXJhY3RlciBkZWNvZGVkIHdpdGgKICAgKiBbbmV4dENvZGVQb2ludF0gdGhhdCB1c2VkIHR3byBjb2RlIHVuaXRzIGluIFVURi0xNi4KICAgKgogICAqIFtuZXh0Q29kZVBvaW50XSByZXR1cm5zIGEgc2luZ2xlIGNvZGUgcG9pbnQgZm9yIGVhY2ggdW5pY29kZSBjaGFyYWN0ZXIsCiAgICogZXZlbiBpZiBpdCBuZWVkcyB0d28gY29kZSB1bml0cyBpbiBVVEYtMTYuCiAgICoKICAgKiBGb3IgZXhhbXBsZSwgJ1x1ezFkMTFlfScgdXNlcyA0IGJ5dGVzIGluIFVURi04LCBhbmQgdHdvIGNvZGUgdW5pdHMgaW4KICAgKiBVVEYtMTYuIFRoZSBbdXRmOFNsYWNrXSBpcyB0aGVyZWZvcmUgMi4gQWZ0ZXIgaW52b2tpbmcgW25leHRDb2RlUG9pbnRdLCB0aGUKICAgKiBbYnl0ZU9mZnNldF0gcG9pbnRzIHRvIHRoZSBsYXN0IChvZiA0KSBieXRlcy4gVGhlIFtzdHJpbmdPZmZzZXRdIHNob3VsZAogICAqIHJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBvbmUsIHdoaWNoIGlzIG9uZSBwb3NpdGlvbiBtb3JlIGxlZnQgdGhhbgogICAqIHRoZSBbdXRmOFNsYWNrXS4KICAgKi8KICBpbnQgc3RyaW5nT2Zmc2V0U2xhY2tPZmZzZXQgPSAtMTsKCiAgaW50IGdldCBzdHJpbmdPZmZzZXQgewogICAgaWYgKHN0cmluZ09mZnNldFNsYWNrT2Zmc2V0ID09IGJ5dGVPZmZzZXQpIHsKICAgICAgcmV0dXJuIGJ5dGVPZmZzZXQgLSB1dGY4U2xhY2sgLSAxOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGJ5dGVPZmZzZXQgLSB1dGY4U2xhY2s7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBhbmFseXplci5TdHJpbmdUb2tlbiBjcmVhdGVTdWJzdHJpbmdUb2tlbigKICAgICAgVG9rZW5UeXBlIHR5cGUsIGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHksCiAgICAgIFtpbnQgZXh0cmFPZmZzZXQgPSAwXSkgewogICAgcmV0dXJuIG5ldyBTdHJpbmdUb2tlbi5mcm9tVXRmOEJ5dGVzKAogICAgICAgIHR5cGUsIGJ5dGVzLCBzdGFydCwgYnl0ZU9mZnNldCArIGV4dHJhT2Zmc2V0LCBhc2NpaU9ubHksIHRva2VuU3RhcnQsCiAgICAgICAgcHJlY2VkaW5nQ29tbWVudHM6IGNvbW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGFuYWx5emVyLlN0cmluZ1Rva2VuIGNyZWF0ZVN5bnRoZXRpY1N1YnN0cmluZ1Rva2VuKAogICAgICBUb2tlblR5cGUgdHlwZSwgaW50IHN0YXJ0LCBib29sIGFzY2lpT25seSwgU3RyaW5nIHN5bnRoZXRpY0NoYXJzKSB7CiAgICBTdHJpbmcgc291cmNlID0gU3RyaW5nVG9rZW4uZGVjb2RlVXRmOChieXRlcywgc3RhcnQsIGJ5dGVPZmZzZXQsIGFzY2lpT25seSk7CiAgICByZXR1cm4gbmV3IFN5bnRoZXRpY1N0cmluZ1Rva2VuKAogICAgICAgIHR5cGUsIHNvdXJjZSArIHN5bnRoZXRpY0NoYXJzLCB0b2tlblN0YXJ0LCBzb3VyY2UubGVuZ3RoKTsKICB9CgogIEBvdmVycmlkZQogIENvbW1lbnRUb2tlbiBjcmVhdGVDb21tZW50VG9rZW4oVG9rZW5UeXBlIHR5cGUsIGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHksCiAgICAgIFtpbnQgZXh0cmFPZmZzZXQgPSAwXSkgewogICAgcmV0dXJuIG5ldyBDb21tZW50VG9rZW4uZnJvbVV0ZjhCeXRlcygKICAgICAgICB0eXBlLCBieXRlcywgc3RhcnQsIGJ5dGVPZmZzZXQgKyBleHRyYU9mZnNldCwgYXNjaWlPbmx5LCB0b2tlblN0YXJ0KTsKICB9CgogIEBvdmVycmlkZQogIERhcnREb2NUb2tlbiBjcmVhdGVEYXJ0RG9jVG9rZW4oVG9rZW5UeXBlIHR5cGUsIGludCBzdGFydCwgYm9vbCBhc2NpaU9ubHksCiAgICAgIFtpbnQgZXh0cmFPZmZzZXQgPSAwXSkgewogICAgcmV0dXJuIG5ldyBEYXJ0RG9jVG9rZW4uZnJvbVV0ZjhCeXRlcygKICAgICAgICB0eXBlLCBieXRlcywgc3RhcnQsIGJ5dGVPZmZzZXQgKyBleHRyYU9mZnNldCwgYXNjaWlPbmx5LCB0b2tlblN0YXJ0KTsKICB9CgogIEBvdmVycmlkZQogIExhbmd1YWdlVmVyc2lvblRva2VuIGNyZWF0ZUxhbmd1YWdlVmVyc2lvblRva2VuKAogICAgICBpbnQgc3RhcnQsIGludCBtYWpvciwgaW50IG1pbm9yKSB7CiAgICByZXR1cm4gbmV3IExhbmd1YWdlVmVyc2lvblRva2VuLmZyb21VdGY4Qnl0ZXMoCiAgICAgICAgYnl0ZXMsIHN0YXJ0LCBieXRlT2Zmc2V0LCB0b2tlblN0YXJ0LCBtYWpvciwgbWlub3IpOwogIH0KCiAgYm9vbCBhdEVuZE9mRmlsZSgpID0+IGJ5dGVPZmZzZXQgPj0gYnl0ZXMubGVuZ3RoIC0gMTsKfQqA+wBOTjwBKgE6AUgBQAE7AR9IARRIAQRMHgQxBhcFJQYTAQZCBUxQLwYXAQZPSkQFS05MMAYVAQZOBhwBBksQBhcpJQ0ZBgQBBlA4BhUBBklLMAVNTEIGHysjNkYvHRsrBAEjLwEoKCwqBAEoAScBTyA1GxsvIh0iHSIdDS8GFjIqDwgSBiYaQyoGTEUXTCE8TA4qRAYhIyAkJigjICQsQjEsQSRJDSoGBAEeIyE2Ni8kEAQBLBpRD1A1BAEGTTkFTTAFS1FNThYGJAEZMSkNJQYEAQwtMR8qTSYEAQw2SlElQwQBDE0fK04EAQxNHytOBAEMMykzPQQBOAIBO3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY2FubmVyL3V0ZjhfYnl0ZXNfc2Nhbm5lci5kYXJ0OXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zY2FubmVyL3JlY292ZXIuZGFydIisLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2V0IGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc2Nhbm5lci5yZWNvdmVyOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW5UeXBlOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJ3Rva2VuLmRhcnQnIHNob3cgU3RyaW5nVG9rZW47CgppbXBvcnQgJ2Vycm9yX3Rva2VuLmRhcnQnIHNob3cgRXJyb3JUb2tlbjsKCi8vLyBSZWNvdmVyIGZyb20gZXJyb3JzIGluIFt0b2tlbnNdLiBUaGUgb3JpZ2luYWwgc291cmNlcyBhcmUgcHJvdmlkZWQgYXMKLy8vIFtieXRlc10uIFtsaW5lU3RhcnRzXSBhcmUgdGhlIGJlZ2lubmluZyBjaGFyYWN0ZXIgb2Zmc2V0cyBvZiBsaW5lcywgYW5kCi8vLyBtdXN0IGJlIHVwZGF0ZWQgaWYgcmVjb3ZlcnkgaXMgcGVyZm9ybWVkIHJld3JpdGluZyB0aGUgb3JpZ2luYWwgc291cmNlCi8vLyBjb2RlLgpUb2tlbiBzY2FubmVyUmVjb3ZlcnkoTGlzdDxpbnQ+IGJ5dGVzLCBUb2tlbiB0b2tlbnMsIExpc3Q8aW50PiBsaW5lU3RhcnRzKSB7CiAgLy8gU2FuaXR5IGNoZWNrIHRoYXQgYWxsIGVycm9yIHRva2VucyBhcmUgcHJlcGVuZGVkLgoKICAvLyBUT0RPKGRhbnJ1YmVsKTogUmVtb3ZlIHRoaXMgaW4gYSB3aGlsZSBhZnRlciB0aGUgZHVzdCBoYXMgc2V0dGxlZC4KCiAgLy8gU2tpcCBvdmVyIHByZXBlbmRlZCBlcnJvciB0b2tlbnMKICB2YXIgdG9rZW4gPSB0b2tlbnM7CiAgd2hpbGUgKHRva2VuIGlzIEVycm9yVG9rZW4pIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICB9CgogIC8vIEFzc2VydCBubyBlcnJvciB0b2tlbnMgaW4gdGhlIHJlbWFpbmluZyB0b2tlbnMKICB3aGlsZSAoIXRva2VuLmlzRW9mKSB7CiAgICBpZiAodG9rZW4gaXMgRXJyb3JUb2tlbikgewogICAgICBmb3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwgMzsgKytjb3VudCkgewogICAgICAgIHZhciBwcmV2aW91cyA9IHRva2VuLnByZXZpb3VzOwogICAgICAgIGlmIChwcmV2aW91cy5pc0VvZikgYnJlYWs7CiAgICAgICAgdG9rZW4gPSBwcmV2aW91czsKICAgICAgfQogICAgICB2YXIgbXNnID0gbmV3IFN0cmluZ0J1ZmZlcigKICAgICAgICAgICJJbnRlcm5hbCBlcnJvcjogQWxsIGVycm9yIHRva2VucyBzaG91bGQgaGF2ZSBiZWVuIHByZXBlbmRlZDoiKTsKICAgICAgZm9yIChpbnQgY291bnQgPSAwOyBjb3VudCA8IDc7ICsrY291bnQpIHsKICAgICAgICBpZiAodG9rZW4uaXNFb2YpIGJyZWFrOwogICAgICAgIG1zZy53cml0ZSgnICR7dG9rZW4ucnVudGltZVR5cGV9LCcpOwogICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICB0aHJvdyBtc2cudG9TdHJpbmcoKTsKICAgIH0KICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICB9CgogIHJldHVybiB0b2tlbnM7Cn0KClRva2VuIHN5bnRoZXNpemVUb2tlbihpbnQgY2hhck9mZnNldCwgU3RyaW5nIHZhbHVlLCBUb2tlblR5cGUgdHlwZSkgewogIHJldHVybiBuZXcgU3RyaW5nVG9rZW4uZnJvbVN0cmluZyh0eXBlLCB2YWx1ZSwgY2hhck9mZnNldCk7Cn0KClRva2VuIHNraXBUb0VvZihUb2tlbiB0b2tlbikgewogIHdoaWxlICghdG9rZW4uaXNFb2YpIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICB9CiAgcmV0dXJuIHRva2VuOwp9CgpTdHJpbmcgY2xvc2VCcmFjZUZvcihTdHJpbmcgb3BlbkJyYWNlKSB7CiAgcmV0dXJuIGNvbnN0IHsKICAgICcoJzogJyknLAogICAgJ1snOiAnXScsCiAgICAneyc6ICd9JywKICAgICc8JzogJz4nLAogICAgcickeyc6ICd9JywKICAgICc/LlsnOiAnXScsCiAgfVtvcGVuQnJhY2VdOwp9CgpTdHJpbmcgY2xvc2VRdW90ZUZvcihTdHJpbmcgb3BlblF1b3RlKSB7CiAgcmV0dXJuIGNvbnN0IHsKICAgICciJzogJyInLAogICAgIiciOiAiJyIsCiAgICAnIiIiJzogJyIiIicsCiAgICAiJycnIjogIicnJyIsCiAgICAnciInOiAnIicsCiAgICAiciciOiAiJyIsCiAgICAnciIiIic6ICciIiInLAogICAgInInJyciOiAiJycnIiwKICB9W29wZW5RdW90ZV07Cn0KWABOTjwBHwEyAS4BJgErAUpMSwpNNwFIASYWIBgEATQZHzAnIxoIIkswIC0cCBwGGAQBEQIBRj4CAR8ZGAQQAgEpEQ4ODg4QEBACASkRDg4SEg8PExMQAgEwcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIvcmVjb3Zlci5kYXJ0PXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zY2FubmVyL2Vycm9yX3Rva2VuLmRhcnSZqS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNldCBoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnRfc2Nhbm5lci5lcnJvcl90b2tlbjsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IEJlZ2luVG9rZW4sIFNpbXBsZVRva2VuLCBUb2tlblR5cGU7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ29kZSwKICAgICAgICBNZXNzYWdlLAogICAgICAgIG1lc3NhZ2VFbmNvZGluZywKICAgICAgICB0ZW1wbGF0ZUFzY2lpQ29udHJvbENoYXJhY3RlciwKICAgICAgICB0ZW1wbGF0ZU5vbkFzY2lpSWRlbnRpZmllciwKICAgICAgICB0ZW1wbGF0ZU5vbkFzY2lpV2hpdGVzcGFjZSwKICAgICAgICB0ZW1wbGF0ZVVubWF0Y2hlZFRva2VuLAogICAgICAgIHRlbXBsYXRlVW5zdXBwb3J0ZWRPcGVyYXRvciwKICAgICAgICB0ZW1wbGF0ZVVudGVybWluYXRlZFN0cmluZzsKCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JyBzaG93IFRva2VuLCB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXI7CgppbXBvcnQgJy4uL3NjYW5uZXIvcmVjb3Zlci5kYXJ0JyBzaG93IGNsb3NlQnJhY2VGb3IsIGNsb3NlUXVvdGVGb3I7CgpFcnJvclRva2VuIGJ1aWxkVW5leHBlY3RlZENoYXJhY3RlclRva2VuKGludCBjaGFyYWN0ZXIsIGludCBjaGFyT2Zmc2V0KSB7CiAgaWYgKGNoYXJhY3RlciA8IDB4MWYpIHsKICAgIHJldHVybiBuZXcgQXNjaWlDb250cm9sQ2hhcmFjdGVyVG9rZW4oY2hhcmFjdGVyLCBjaGFyT2Zmc2V0KTsKICB9CiAgc3dpdGNoIChjaGFyYWN0ZXIpIHsKICAgIGNhc2UgdW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyOgogICAgICByZXR1cm4gbmV3IEVuY29kaW5nRXJyb3JUb2tlbihjaGFyT2Zmc2V0KTsKCiAgICAvLy8gU2VlIFtHZW5lcmFsIFB1bmN0dWF0aW9uXQogICAgLy8vIChodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NoYXJ0cy9QREYvVTIwMDAucGRmKS4KICAgIGNhc2UgMHgwMEEwOiAvLyBOby1icmVhayBzcGFjZS4KICAgIGNhc2UgMHgxNjgwOiAvLyBPZ2hhbSBzcGFjZSBtYXJrLgogICAgY2FzZSAweDE4MEU6IC8vIE1vbmdvbGlhbiB2b3dlbCBzZXBhcmF0b3IuCiAgICBjYXNlIDB4MjAwMDogLy8gRW4gcXVhZC4KICAgIGNhc2UgMHgyMDAxOiAvLyBFbSBxdWFkLgogICAgY2FzZSAweDIwMDI6IC8vIEVuIHNwYWNlLgogICAgY2FzZSAweDIwMDM6IC8vIEVtIHNwYWNlLgogICAgY2FzZSAweDIwMDQ6IC8vIFRocmVlLXBlci1lbSBzcGFjZS4KICAgIGNhc2UgMHgyMDA1OiAvLyBGb3VyLXBlci1lbSBzcGFjZS4KICAgIGNhc2UgMHgyMDA2OiAvLyBTaXgtcGVyLWVtIHNwYWNlLgogICAgY2FzZSAweDIwMDc6IC8vIEZpZ3VyZSBzcGFjZS4KICAgIGNhc2UgMHgyMDA4OiAvLyBQdW5jdHVhdGlvbiBzcGFjZS4KICAgIGNhc2UgMHgyMDA5OiAvLyBUaGluIHNwYWNlLgogICAgY2FzZSAweDIwMEE6IC8vIEhhaXIgc3BhY2UuCiAgICBjYXNlIDB4MjAwQjogLy8gWmVybyB3aWR0aCBzcGFjZS4KICAgIGNhc2UgMHgyMDI4OiAvLyBMaW5lIHNlcGFyYXRvci4KICAgIGNhc2UgMHgyMDI5OiAvLyBQYXJhZ3JhcGggc2VwYXJhdG9yLgogICAgY2FzZSAweDIwMkY6IC8vIE5hcnJvdyBuby1icmVhayBzcGFjZS4KICAgIGNhc2UgMHgyMDVGOiAvLyBNZWRpdW0gbWF0aGVtYXRpY2FsIHNwYWNlLgogICAgY2FzZSAweDMwMDA6IC8vIElkZW9ncmFwaGljIHNwYWNlLgogICAgY2FzZSAweEZFRkY6IC8vIFplcm8gd2lkdGggbm8tYnJlYWsgc3BhY2UuCiAgICAgIHJldHVybiBuZXcgTm9uQXNjaWlXaGl0ZXNwYWNlVG9rZW4oY2hhcmFjdGVyLCBjaGFyT2Zmc2V0KTsKCiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gbmV3IE5vbkFzY2lpSWRlbnRpZmllclRva2VuKGNoYXJhY3RlciwgY2hhck9mZnNldCk7CiAgfQp9CgovLy8gQ29tbW9uIHN1cGVyY2xhc3MgZm9yIGFsbCBlcnJvciB0b2tlbnMuCi8vLwovLy8gSXQncyBjb25zaWRlcmVkIGFuIGltcGxlbWVudGF0aW9uIGVycm9yIHRvIGFjY2VzcyBbbGV4ZW1lXSBvZiBhbgovLy8gW0Vycm9yVG9rZW5dLgphYnN0cmFjdCBjbGFzcyBFcnJvclRva2VuIGV4dGVuZHMgU2ltcGxlVG9rZW4gewogIEVycm9yVG9rZW4oaW50IG9mZnNldCkgOiBzdXBlcihUb2tlblR5cGUuQkFEX0lOUFVULCBvZmZzZXQsIG51bGwpOwoKICAvLy8gVGhpcyBpcyBhIHRva2VuIHRoYXQgd3JhcHMgYXJvdW5kIGFuIGVycm9yIG1lc3NhZ2UuIFJldHVybiAxCiAgLy8vIGluc3RlYWQgb2YgdGhlIHNpemUgb2YgdGhlIGxlbmd0aCBvZiB0aGUgZXJyb3IgbWVzc2FnZS4KICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCA9PiAxOwoKICBTdHJpbmcgZ2V0IGxleGVtZSB7CiAgICB2YXIgZXJyb3JNc2cgPSBhc3NlcnRpb25NZXNzYWdlLm1lc3NhZ2U7CgogICAgLy8gQXR0ZW1wdCB0byBpbmNsdWRlIHRoZSBsb2NhdGlvbiB3aGljaCBpcyBjYWxsaW5nIHRoZSBwYXJzZXIKICAgIC8vIGluIGFuIGVmZm9ydCB0byBkZWJ1ZyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzc1MjgKICAgIHZhciBwYXR0ZXJuID0gUmVnRXhwKCdeI1swLTldKiAqUGFyc2VyJyk7CiAgICB2YXIgdHJhY2VMaW5lcyA9IFN0YWNrVHJhY2UuY3VycmVudC50b1N0cmluZygpLnNwbGl0KCdcbicpOwogICAgZm9yIChpbnQgaW5kZXggPSB0cmFjZUxpbmVzLmxlbmd0aCAtIDI7IGluZGV4ID49IDA7IC0taW5kZXgpIHsKICAgICAgdmFyIGxpbmUgPSB0cmFjZUxpbmVzW2luZGV4XTsKICAgICAgaWYgKGxpbmUuc3RhcnRzV2l0aChwYXR0ZXJuKSkgewogICAgICAgIGVycm9yTXNnID0gJyRlcnJvck1zZyAtICR7dHJhY2VMaW5lc1tpbmRleCArIDFdfSc7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICB0aHJvdyBlcnJvck1zZzsKICB9CgogIE1lc3NhZ2UgZ2V0IGFzc2VydGlvbk1lc3NhZ2U7CgogIENvZGU8ZHluYW1pYz4gZ2V0IGVycm9yQ29kZSA9PiBhc3NlcnRpb25NZXNzYWdlLmNvZGU7CgogIGludCBnZXQgY2hhcmFjdGVyID0+IG51bGw7CgogIFN0cmluZyBnZXQgc3RhcnQgPT4gbnVsbDsKCiAgaW50IGdldCBlbmRPZmZzZXQgPT4gbnVsbDsKCiAgQmVnaW5Ub2tlbiBnZXQgYmVnaW4gPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gY29weSgpIHsKICAgIHRocm93ICd1bnN1cHBvcnRlZCBvcGVyYXRpb24nOwogIH0KfQoKLy8vIFJlcHJlc2VudHMgYW4gZW5jb2RpbmcgZXJyb3IuCmNsYXNzIEVuY29kaW5nRXJyb3JUb2tlbiBleHRlbmRzIEVycm9yVG9rZW4gewogIEVuY29kaW5nRXJyb3JUb2tlbihpbnQgY2hhck9mZnNldCkgOiBzdXBlcihjaGFyT2Zmc2V0KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkVuY29kaW5nRXJyb3JUb2tlbigpIjsKCiAgTWVzc2FnZSBnZXQgYXNzZXJ0aW9uTWVzc2FnZSA9PiBtZXNzYWdlRW5jb2Rpbmc7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbm9uLUFTQ0lJIGNoYXJhY3RlciBvdXRzaWRlIGEgc3RyaW5nIG9yIGNvbW1lbnQuCmNsYXNzIE5vbkFzY2lpSWRlbnRpZmllclRva2VuIGV4dGVuZHMgRXJyb3JUb2tlbiB7CiAgZmluYWwgaW50IGNoYXJhY3RlcjsKCiAgTm9uQXNjaWlJZGVudGlmaWVyVG9rZW4odGhpcy5jaGFyYWN0ZXIsIGludCBjaGFyT2Zmc2V0KSA6IHN1cGVyKGNoYXJPZmZzZXQpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiTm9uQXNjaWlJZGVudGlmaWVyVG9rZW4oJGNoYXJhY3RlcikiOwoKICBNZXNzYWdlIGdldCBhc3NlcnRpb25NZXNzYWdlID0+IHRlbXBsYXRlTm9uQXNjaWlJZGVudGlmaWVyLndpdGhBcmd1bWVudHMoCiAgICAgIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhbY2hhcmFjdGVyXSksIGNoYXJhY3Rlcik7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbm9uLUFTQ0lJIHdoaXRlc3BhY2Ugb3V0c2lkZSBhIHN0cmluZyBvciBjb21tZW50LgpjbGFzcyBOb25Bc2NpaVdoaXRlc3BhY2VUb2tlbiBleHRlbmRzIEVycm9yVG9rZW4gewogIGZpbmFsIGludCBjaGFyYWN0ZXI7CgogIE5vbkFzY2lpV2hpdGVzcGFjZVRva2VuKHRoaXMuY2hhcmFjdGVyLCBpbnQgY2hhck9mZnNldCkgOiBzdXBlcihjaGFyT2Zmc2V0KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIk5vbkFzY2lpV2hpdGVzcGFjZVRva2VuKCRjaGFyYWN0ZXIpIjsKCiAgTWVzc2FnZSBnZXQgYXNzZXJ0aW9uTWVzc2FnZSA9PgogICAgICB0ZW1wbGF0ZU5vbkFzY2lpV2hpdGVzcGFjZS53aXRoQXJndW1lbnRzKGNoYXJhY3Rlcik7Cn0KCi8vLyBSZXByZXNlbnRzIGFuIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVyIG91dHNpZGUgYSBzdHJpbmcgb3IgY29tbWVudC4KY2xhc3MgQXNjaWlDb250cm9sQ2hhcmFjdGVyVG9rZW4gZXh0ZW5kcyBFcnJvclRva2VuIHsKICBmaW5hbCBpbnQgY2hhcmFjdGVyOwoKICBBc2NpaUNvbnRyb2xDaGFyYWN0ZXJUb2tlbih0aGlzLmNoYXJhY3RlciwgaW50IGNoYXJPZmZzZXQpCiAgICAgIDogc3VwZXIoY2hhck9mZnNldCk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJBc2NpaUNvbnRyb2xDaGFyYWN0ZXJUb2tlbigkY2hhcmFjdGVyKSI7CgogIE1lc3NhZ2UgZ2V0IGFzc2VydGlvbk1lc3NhZ2UgPT4KICAgICAgdGVtcGxhdGVBc2NpaUNvbnRyb2xDaGFyYWN0ZXIud2l0aEFyZ3VtZW50cyhjaGFyYWN0ZXIpOwp9CgovLy8gRGVub3RlcyBhbiBvcGVyYXRvciB0aGF0IGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIERhcnQgbGFuZ3VhZ2UuCmNsYXNzIFVuc3VwcG9ydGVkT3BlcmF0b3IgZXh0ZW5kcyBFcnJvclRva2VuIHsKICBUb2tlbiB0b2tlbjsKCiAgVW5zdXBwb3J0ZWRPcGVyYXRvcih0aGlzLnRva2VuLCBpbnQgY2hhck9mZnNldCkgOiBzdXBlcihjaGFyT2Zmc2V0KTsKCiAgQG92ZXJyaWRlCiAgTWVzc2FnZSBnZXQgYXNzZXJ0aW9uTWVzc2FnZSA9PgogICAgICB0ZW1wbGF0ZVVuc3VwcG9ydGVkT3BlcmF0b3Iud2l0aEFyZ3VtZW50cyh0b2tlbik7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICJVbnN1cHBvcnRlZE9wZXJhdG9yKCR7dG9rZW4ubGV4ZW1lfSkiOwp9CgovLy8gUmVwcmVzZW50cyBhbiB1bnRlcm1pbmF0ZWQgc3RyaW5nLgpjbGFzcyBVbnRlcm1pbmF0ZWRTdHJpbmcgZXh0ZW5kcyBFcnJvclRva2VuIHsKICBmaW5hbCBTdHJpbmcgc3RhcnQ7CiAgZmluYWwgaW50IGVuZE9mZnNldDsKCiAgVW50ZXJtaW5hdGVkU3RyaW5nKHRoaXMuc3RhcnQsIGludCBjaGFyT2Zmc2V0LCB0aGlzLmVuZE9mZnNldCkKICAgICAgOiBzdXBlcihjaGFyT2Zmc2V0KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlVudGVybWluYXRlZFN0cmluZygkc3RhcnQpIjsKCiAgaW50IGdldCBjaGFyQ291bnQgPT4gZW5kT2Zmc2V0IC0gY2hhck9mZnNldDsKCiAgaW50IGdldCBsZW5ndGggPT4gY2hhckNvdW50OwoKICBNZXNzYWdlIGdldCBhc3NlcnRpb25NZXNzYWdlID0+CiAgICAgIHRlbXBsYXRlVW50ZXJtaW5hdGVkU3RyaW5nLndpdGhBcmd1bWVudHMoc3RhcnQsIGNsb3NlUXVvdGVGb3Ioc3RhcnQpKTsKfQoKLy8vIFJlcHJlc2VudHMgYW4gdW50ZXJtaW5hdGVkIHRva2VuLgpjbGFzcyBVbnRlcm1pbmF0ZWRUb2tlbiBleHRlbmRzIEVycm9yVG9rZW4gewogIGZpbmFsIE1lc3NhZ2UgYXNzZXJ0aW9uTWVzc2FnZTsKICBmaW5hbCBpbnQgZW5kT2Zmc2V0OwoKICBVbnRlcm1pbmF0ZWRUb2tlbih0aGlzLmFzc2VydGlvbk1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LCB0aGlzLmVuZE9mZnNldCkKICAgICAgOiBzdXBlcihjaGFyT2Zmc2V0KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlVudGVybWluYXRlZFRva2VuKCR7YXNzZXJ0aW9uTWVzc2FnZS5jb2RlLm5hbWV9KSI7CgogIGludCBnZXQgY2hhckNvdW50ID0+IGVuZE9mZnNldCAtIGNoYXJPZmZzZXQ7Cn0KCi8vLyBSZXByZXNlbnRzIGFuIG9wZW4gYnJhY2Ugd2l0aG91dCBhIG1hdGNoaW5nIGNsb3NlIGJyYWNlLgovLy8KLy8vIEluIHRoaXMgY2FzZSwgYnJhY2UgbWVhbnMgYW55IG9mIGAoYCwgYHtgLCBgW2AsIGFuZCBgPGAsIHBhcmVudGhlc2lzLCBjdXJseQovLy8gYnJhY2UsIHNxdWFyZSBicmFjZSwgYW5kIGFuZ2xlIGJyYWNlLCByZXNwZWN0aXZlbHkuCmNsYXNzIFVubWF0Y2hlZFRva2VuIGV4dGVuZHMgRXJyb3JUb2tlbiB7CiAgZmluYWwgQmVnaW5Ub2tlbiBiZWdpbjsKCiAgVW5tYXRjaGVkVG9rZW4oQmVnaW5Ub2tlbiBiZWdpbikKICAgICAgOiB0aGlzLmJlZ2luID0gYmVnaW4sCiAgICAgICAgc3VwZXIoYmVnaW4uY2hhck9mZnNldCk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJVbm1hdGNoZWRUb2tlbigke2JlZ2luLmxleGVtZX0pIjsKCiAgTWVzc2FnZSBnZXQgYXNzZXJ0aW9uTWVzc2FnZSA9PgogICAgICB0ZW1wbGF0ZVVubWF0Y2hlZFRva2VuLndpdGhBcmd1bWVudHMoY2xvc2VCcmFjZUZvcihiZWdpbi5sZXhlbWUpLCBiZWdpbik7Cn0KgNsATk48ASIBSwEdCQ4RGSckJCAlJAFCAUQBShpCBBcmMQEiNyQmLx0dHh4oJyYiJyAgJiQpKy8nL0EBDUEEAgEsBEUSMEUBQz4MFwEWLQFDSy5AQyQmOw8IBgEUBAEgATgBHQEcAR0BIAEMESMEAgEiLjoBLwEzAgFCMxcBTwE+AUw5AgFDMxcBTwE+ASI7AgFHNhcBPRsBQQEiPgIBRC8PAUcBDCI4AQw/AgEnLhYXAUEbATUBLwEfASJNAgEmLSIXAUsbAUsBLwIBPQRQOCoaASMcIQE6ASJQAgE0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIvZXJyb3JfdG9rZW4uZGFydEFzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc2Nhbm5lci90b2tlbl9jb25zdGFudHMuZGFydI+JLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc2Nhbm5lci50b2tlbl9jb25zdGFudHM7CgppbXBvcnQgJ2NoYXJhY3RlcnMuZGFydCc7Cgpjb25zdCBpbnQgRU9GX1RPS0VOID0gMDsKCmNvbnN0IGludCBLRVlXT1JEX1RPS0VOID0gJGs7CmNvbnN0IGludCBJREVOVElGSUVSX1RPS0VOID0gJGE7CmNvbnN0IGludCBTQ1JJUFRfVE9LRU4gPSAkYjsKY29uc3QgaW50IEJBRF9JTlBVVF9UT0tFTiA9ICRYOwpjb25zdCBpbnQgRE9VQkxFX1RPS0VOID0gJGQ7CmNvbnN0IGludCBJTlRfVE9LRU4gPSAkaTsKY29uc3QgaW50IFJFQ09WRVJZX1RPS0VOID0gJHI7CmNvbnN0IGludCBIRVhBREVDSU1BTF9UT0tFTiA9ICR4Owpjb25zdCBpbnQgU1RSSU5HX1RPS0VOID0gJFNROwoKY29uc3QgaW50IEFNUEVSU0FORF9UT0tFTiA9ICRBTVBFUlNBTkQ7CmNvbnN0IGludCBCQUNLUElOR19UT0tFTiA9ICRCQUNLUElORzsKY29uc3QgaW50IEJBQ0tTTEFTSF9UT0tFTiA9ICRCQUNLU0xBU0g7CmNvbnN0IGludCBCQU5HX1RPS0VOID0gJEJBTkc7CmNvbnN0IGludCBCQVJfVE9LRU4gPSAkQkFSOwpjb25zdCBpbnQgQ09MT05fVE9LRU4gPSAkQ09MT047CmNvbnN0IGludCBDT01NQV9UT0tFTiA9ICRDT01NQTsKY29uc3QgaW50IEVRX1RPS0VOID0gJEVROwpjb25zdCBpbnQgR1RfVE9LRU4gPSAkR1Q7CmNvbnN0IGludCBIQVNIX1RPS0VOID0gJEhBU0g7CmNvbnN0IGludCBPUEVOX0NVUkxZX0JSQUNLRVRfVE9LRU4gPSAkT1BFTl9DVVJMWV9CUkFDS0VUOwpjb25zdCBpbnQgT1BFTl9TUVVBUkVfQlJBQ0tFVF9UT0tFTiA9ICRPUEVOX1NRVUFSRV9CUkFDS0VUOwpjb25zdCBpbnQgT1BFTl9QQVJFTl9UT0tFTiA9ICRPUEVOX1BBUkVOOwpjb25zdCBpbnQgTFRfVE9LRU4gPSAkTFQ7CmNvbnN0IGludCBNSU5VU19UT0tFTiA9ICRNSU5VUzsKY29uc3QgaW50IFBFUklPRF9UT0tFTiA9ICRQRVJJT0Q7CmNvbnN0IGludCBQTFVTX1RPS0VOID0gJFBMVVM7CmNvbnN0IGludCBRVUVTVElPTl9UT0tFTiA9ICRRVUVTVElPTjsKY29uc3QgaW50IEFUX1RPS0VOID0gJEFUOwpjb25zdCBpbnQgQ0xPU0VfQ1VSTFlfQlJBQ0tFVF9UT0tFTiA9ICRDTE9TRV9DVVJMWV9CUkFDS0VUOwpjb25zdCBpbnQgQ0xPU0VfU1FVQVJFX0JSQUNLRVRfVE9LRU4gPSAkQ0xPU0VfU1FVQVJFX0JSQUNLRVQ7CmNvbnN0IGludCBDTE9TRV9QQVJFTl9UT0tFTiA9ICRDTE9TRV9QQVJFTjsKY29uc3QgaW50IFNFTUlDT0xPTl9UT0tFTiA9ICRTRU1JQ09MT047CmNvbnN0IGludCBTTEFTSF9UT0tFTiA9ICRTTEFTSDsKY29uc3QgaW50IFRJTERFX1RPS0VOID0gJFRJTERFOwpjb25zdCBpbnQgU1RBUl9UT0tFTiA9ICRTVEFSOwpjb25zdCBpbnQgUEVSQ0VOVF9UT0tFTiA9ICRQRVJDRU5UOwpjb25zdCBpbnQgQ0FSRVRfVE9LRU4gPSAkQ0FSRVQ7Cgpjb25zdCBpbnQgU1RSSU5HX0lOVEVSUE9MQVRJT05fVE9LRU4gPSAxMjg7CmNvbnN0IGludCBMVF9FUV9UT0tFTiA9IFNUUklOR19JTlRFUlBPTEFUSU9OX1RPS0VOICsgMTsKY29uc3QgaW50IEZVTkNUSU9OX1RPS0VOID0gTFRfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgU0xBU0hfRVFfVE9LRU4gPSBGVU5DVElPTl9UT0tFTiArIDE7CmNvbnN0IGludCBQRVJJT0RfUEVSSU9EX1BFUklPRF9UT0tFTiA9IFNMQVNIX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IFBFUklPRF9QRVJJT0RfVE9LRU4gPSBQRVJJT0RfUEVSSU9EX1BFUklPRF9UT0tFTiArIDE7CmNvbnN0IGludCBFUV9FUV9FUV9UT0tFTiA9IFBFUklPRF9QRVJJT0RfVE9LRU4gKyAxOwpjb25zdCBpbnQgRVFfRVFfVE9LRU4gPSBFUV9FUV9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBMVF9MVF9FUV9UT0tFTiA9IEVRX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IExUX0xUX1RPS0VOID0gTFRfTFRfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgR1RfRVFfVE9LRU4gPSBMVF9MVF9UT0tFTiArIDE7CmNvbnN0IGludCBHVF9HVF9FUV9UT0tFTiA9IEdUX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IElOREVYX0VRX1RPS0VOID0gR1RfR1RfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgSU5ERVhfVE9LRU4gPSBJTkRFWF9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBCQU5HX0VRX0VRX1RPS0VOID0gSU5ERVhfVE9LRU4gKyAxOwpjb25zdCBpbnQgQkFOR19FUV9UT0tFTiA9IEJBTkdfRVFfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgQU1QRVJTQU5EX0FNUEVSU0FORF9UT0tFTiA9IEJBTkdfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgQU1QRVJTQU5EX0FNUEVSU0FORF9FUV9UT0tFTiA9IEFNUEVSU0FORF9BTVBFUlNBTkRfVE9LRU4gKyAxOwpjb25zdCBpbnQgQU1QRVJTQU5EX0VRX1RPS0VOID0gQU1QRVJTQU5EX0FNUEVSU0FORF9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBCQVJfQkFSX1RPS0VOID0gQU1QRVJTQU5EX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IEJBUl9CQVJfRVFfVE9LRU4gPSBCQVJfQkFSX1RPS0VOICsgMTsKY29uc3QgaW50IEJBUl9FUV9UT0tFTiA9IEJBUl9CQVJfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgU1RBUl9FUV9UT0tFTiA9IEJBUl9FUV9UT0tFTiArIDE7CmNvbnN0IGludCBQTFVTX1BMVVNfVE9LRU4gPSBTVEFSX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IFBMVVNfRVFfVE9LRU4gPSBQTFVTX1BMVVNfVE9LRU4gKyAxOwpjb25zdCBpbnQgTUlOVVNfTUlOVVNfVE9LRU4gPSBQTFVTX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IE1JTlVTX0VRX1RPS0VOID0gTUlOVVNfTUlOVVNfVE9LRU4gKyAxOwpjb25zdCBpbnQgVElMREVfU0xBU0hfRVFfVE9LRU4gPSBNSU5VU19FUV9UT0tFTiArIDE7CmNvbnN0IGludCBUSUxERV9TTEFTSF9UT0tFTiA9IFRJTERFX1NMQVNIX0VRX1RPS0VOICsgMTsKY29uc3QgaW50IFBFUkNFTlRfRVFfVE9LRU4gPSBUSUxERV9TTEFTSF9UT0tFTiArIDE7CmNvbnN0IGludCBHVF9HVF9UT0tFTiA9IFBFUkNFTlRfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgQ0FSRVRfRVFfVE9LRU4gPSBHVF9HVF9UT0tFTiArIDE7CmNvbnN0IGludCBDT01NRU5UX1RPS0VOID0gQ0FSRVRfRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgU1RSSU5HX0lOVEVSUE9MQVRJT05fSURFTlRJRklFUl9UT0tFTiA9IENPTU1FTlRfVE9LRU4gKyAxOwpjb25zdCBpbnQgUVVFU1RJT05fUEVSSU9EX1RPS0VOID0gU1RSSU5HX0lOVEVSUE9MQVRJT05fSURFTlRJRklFUl9UT0tFTiArIDE7CmNvbnN0IGludCBRVUVTVElPTl9RVUVTVElPTl9UT0tFTiA9IFFVRVNUSU9OX1BFUklPRF9UT0tFTiArIDE7CmNvbnN0IGludCBRVUVTVElPTl9RVUVTVElPTl9FUV9UT0tFTiA9IFFVRVNUSU9OX1FVRVNUSU9OX1RPS0VOICsgMTsKY29uc3QgaW50IEdFTkVSSUNfTUVUSE9EX1RZUEVfQVNTSUdOX1RPS0VOID0gUVVFU1RJT05fUVVFU1RJT05fRVFfVE9LRU4gKyAxOwpjb25zdCBpbnQgR0VORVJJQ19NRVRIT0RfVFlQRV9MSVNUX1RPS0VOID0gR0VORVJJQ19NRVRIT0RfVFlQRV9BU1NJR05fVE9LRU4gKyAxOwpjb25zdCBpbnQgR1RfR1RfR1RfVE9LRU4gPSBHRU5FUklDX01FVEhPRF9UWVBFX0xJU1RfVE9LRU4gKyAxOwpjb25zdCBpbnQgUEVSSU9EX1BFUklPRF9QRVJJT0RfUVVFU1RJT05fVE9LRU4gPSBHVF9HVF9HVF9UT0tFTiArIDE7CmNvbnN0IGludCBHVF9HVF9HVF9FUV9UT0tFTiA9IFBFUklPRF9QRVJJT0RfUEVSSU9EX1FVRVNUSU9OX1RPS0VOICsgMTsKY29uc3QgaW50IFFVRVNUSU9OX1BFUklPRF9PUEVOX1NRVUFSRV9CUkFDS0VUX1RPS0VOID0gR1RfR1RfR1RfRVFfVE9LRU4gKyAxOwpeAE5OPAEnARoBGQEeIR0gHRofIh4BKCYoHhwgIBoaHjo8KhogIh4mGjw+LCggIB4kIAEsOCwvO0A0LCwsKSwvLC4wOUhBMjAvLC8vMTI1ODQuLC5FTT9ETVE/REdNAThwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci90b2tlbl9jb25zdGFudHMuZGFydD1zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2JvZHlfYnVpbGRlci5kYXJ0wAMHJy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmJvZHlfYnVpbGRlcjsKCmltcG9ydCAnZGFydDpjb3JlJyBoaWRlIE1hcEVudHJ5OwoKaW1wb3J0ICcuLi9jb25zdGFudF9jb250ZXh0LmRhcnQnIHNob3cgQ29uc3RhbnRDb250ZXh0OwoKaW1wb3J0ICcuLi9kaWxsL2RpbGxfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgRGlsbExpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBhcyBmYXN0YTsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcgc2hvdyBMb2NhdGVkTWVzc2FnZSwgTWVzc2FnZSwgbm9MZW5ndGgsIFRlbXBsYXRlOwoKaW1wb3J0ICcuLi9tZXNzYWdlcy5kYXJ0JyBhcyBtZXNzYWdlcyBzaG93IGdldExvY2F0aW9uRnJvbVVyaTsKCmltcG9ydCAnLi4vbW9kaWZpZXIuZGFydCcgc2hvdyBNb2RpZmllciwgY29uc3RNYXNrLCBjb3ZhcmlhbnRNYXNrLCBmaW5hbE1hc2s7CgppbXBvcnQgJy4uL25hbWVzLmRhcnQnCiAgICBzaG93IGNhbGxOYW1lLCBlbXB0eU5hbWUsIGluZGV4R2V0TmFtZSwgaW5kZXhTZXROYW1lLCBtaW51c05hbWUsIHBsdXNOYW1lOwoKaW1wb3J0ICcuLi9wYXJzZXIuZGFydCcKICAgIHNob3cKICAgICAgICBBc3NlcnQsCiAgICAgICAgUGFyc2VyLAogICAgICAgIEZvcm1hbFBhcmFtZXRlcktpbmQsCiAgICAgICAgSWRlbnRpZmllckNvbnRleHQsCiAgICAgICAgTWVtYmVyS2luZCwKICAgICAgICBsZW5ndGhGb3JUb2tlbiwKICAgICAgICBsZW5ndGhPZlNwYW4sCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4sCiAgICAgICAgb3B0aW9uYWw7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnCiAgICBzaG93IGludGVybmFsUHJvYmxlbSwgdW5leHBlY3RlZCwgdW5oYW5kbGVkLCB1bnN1cHBvcnRlZDsKCmltcG9ydCAnLi4vcXVvdGUuZGFydCcKICAgIHNob3cKICAgICAgICBRdW90ZSwKICAgICAgICBhbmFseXplUXVvdGUsCiAgICAgICAgdW5lc2NhcGUsCiAgICAgICAgdW5lc2NhcGVGaXJzdFN0cmluZ1BhcnQsCiAgICAgICAgdW5lc2NhcGVMYXN0U3RyaW5nUGFydCwKICAgICAgICB1bmVzY2FwZVN0cmluZzsKCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICcuLi9zY2FubmVyL3Rva2VuLmRhcnQnCiAgICBzaG93IGlzQmluYXJ5T3BlcmF0b3IsIGlzTWludXNPcGVyYXRvciwgaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3I7CgppbXBvcnQgJy4uL3Njb3BlLmRhcnQnIHNob3cgUHJvYmxlbUJ1aWxkZXI7CgppbXBvcnQgJy4uL3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgppbXBvcnQgJy4uL3NvdXJjZS9zY29wZV9saXN0ZW5lci5kYXJ0JwogICAgc2hvdwogICAgICAgIEZpeGVkTnVsbGFibGVMaXN0LAogICAgICAgIEdyb3dhYmxlTGlzdCwKICAgICAgICBKdW1wVGFyZ2V0S2luZCwKICAgICAgICBOdWxsVmFsdWUsCiAgICAgICAgUGFyc2VyUmVjb3ZlcnksCiAgICAgICAgU2NvcGVMaXN0ZW5lcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vc291cmNlL3ZhbHVlX2tpbmRzLmRhcnQnOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX2luZmVycmVyLmRhcnQnIHNob3cgVHlwZUluZmVycmVyOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX3Byb21vdGlvbi5kYXJ0JwogICAgc2hvdyBUeXBlUHJvbW90ZXIsIFR5cGVQcm9tb3Rpb25GYWN0LCBUeXBlUHJvbW90aW9uU2NvcGU7CgppbXBvcnQgJ2NvbGxlY3Rpb25zLmRhcnQnCiAgICBzaG93CiAgICAgICAgU3ByZWFkRWxlbWVudCwKICAgICAgICBTcHJlYWRNYXBFbnRyeSwKICAgICAgICBjb252ZXJ0VG9NYXBFbnRyeSwKICAgICAgICBpc0NvbnZlcnRpYmxlVG9NYXBFbnRyeTsKCmltcG9ydCAnY29uc3RuZXNzLmRhcnQnIHNob3cgQ29uc3RuZXNzOwoKaW1wb3J0ICdleHByZXNzaW9uX2dlbmVyYXRvci5kYXJ0JwogICAgc2hvdwogICAgICAgIERlbGF5ZWRBc3NpZ25tZW50LAogICAgICAgIERlbGF5ZWRQb3N0Zml4SW5jcmVtZW50LAogICAgICAgIEdlbmVyYXRvciwKICAgICAgICBJbmNvbXBsZXRlRXJyb3JHZW5lcmF0b3IsCiAgICAgICAgSW5jb21wbGV0ZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9yLAogICAgICAgIEluY29tcGxldGVTZW5kR2VuZXJhdG9yLAogICAgICAgIEluZGV4ZWRBY2Nlc3NHZW5lcmF0b3IsCiAgICAgICAgTG9hZExpYnJhcnlHZW5lcmF0b3IsCiAgICAgICAgUGFyZW50aGVzaXplZEV4cHJlc3Npb25HZW5lcmF0b3IsCiAgICAgICAgUGFyc2VyRXJyb3JHZW5lcmF0b3IsCiAgICAgICAgUHJlZml4VXNlR2VuZXJhdG9yLAogICAgICAgIFByb3BlcnR5QWNjZXNzR2VuZXJhdG9yLAogICAgICAgIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yLAogICAgICAgIFNlbmRBY2Nlc3NHZW5lcmF0b3IsCiAgICAgICAgU3RhdGljQWNjZXNzR2VuZXJhdG9yLAogICAgICAgIFN1cGVySW5kZXhlZEFjY2Vzc0dlbmVyYXRvciwKICAgICAgICBUaGlzQWNjZXNzR2VuZXJhdG9yLAogICAgICAgIFRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvciwKICAgICAgICBUeXBlVXNlR2VuZXJhdG9yLAogICAgICAgIFVubGlua2VkR2VuZXJhdG9yLAogICAgICAgIFVucmVzb2x2ZWROYW1lR2VuZXJhdG9yLAogICAgICAgIFZhcmlhYmxlVXNlR2VuZXJhdG9yLAogICAgICAgIGJ1aWxkSXNOdWxsOwoKaW1wb3J0ICdleHByZXNzaW9uX2dlbmVyYXRvcl9oZWxwZXIuZGFydCcgc2hvdyBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyOwoKaW1wb3J0ICdmYW5nb3JuLmRhcnQnIHNob3cgRmFuZ29ybjsKCmltcG9ydCAnZm9yZXN0LmRhcnQnIHNob3cgRm9yZXN0OwoKaW1wb3J0ICdpbXBsaWNpdF90eXBlX2FyZ3VtZW50LmRhcnQnIHNob3cgSW1wbGljaXRUeXBlQXJndW1lbnQ7CgppbXBvcnQgJ2tlcm5lbF9zaGFkb3dfYXN0LmRhcnQnIGFzIHNoYWRvdwogICAgc2hvdyBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQsIFN5bnRoZXRpY1dyYXBwZXI7CgppbXBvcnQgJ3JlZGlyZWN0aW5nX2ZhY3RvcnlfYm9keS5kYXJ0JwogICAgc2hvdwogICAgICAgIFJlZGlyZWN0aW5nRmFjdG9yeUJvZHksCiAgICAgICAgUmVkaXJlY3Rpb25UYXJnZXQsCiAgICAgICAgZ2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keSwKICAgICAgICBnZXRSZWRpcmVjdGlvblRhcmdldCwKICAgICAgICBpc1JlZGlyZWN0aW5nRmFjdG9yeTsKCmltcG9ydCAndHlwZV9hbGdvcml0aG1zLmRhcnQnIHNob3cgY2FsY3VsYXRlQm91bmRzOwoKaW1wb3J0ICdrZXJuZWxfYXBpLmRhcnQnOwoKaW1wb3J0ICdrZXJuZWxfYXN0X2FwaS5kYXJ0JzsKCmltcG9ydCAna2VybmVsX2J1aWxkZXIuZGFydCc7CgovLyBUT0RPKGFoZSk6IFJlbW92ZSB0aGlzIGFuZCBlbnN1cmUgYWxsIG5vZGVzIGhhdmUgYSBsb2NhdGlvbi4KY29uc3Qgbm9Mb2NhdGlvbiA9IG51bGw7CgovLyBUT0RPKGRhbnJ1YmVsKTogUmVtb3ZlIHRoaXMgb25jZSBjb250cm9sIGZsb3cgYW5kIHNwcmVhZCBjb2xsZWN0aW9uIHN1cHBvcnQKLy8gaGFzIGJlZW4gZW5hYmxlZCBieSBkZWZhdWx0Lgpjb25zdCBpbnZhbGlkQ29sbGVjdGlvbkVsZW1lbnQgPSBjb25zdCBPYmplY3QoKTsKCmNsYXNzIEJvZHlCdWlsZGVyIGV4dGVuZHMgU2NvcGVMaXN0ZW5lcjxKdW1wVGFyZ2V0PgogICAgaW1wbGVtZW50cyBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyLCBFbnN1cmVMb2FkZWQgewogIGZpbmFsIEZvcmVzdCBmb3Jlc3Q7CgogIC8vIFRPRE8oYWhlKTogUmVuYW1lIFtsaWJyYXJ5XSB0byAncGFydCcuCiAgQG92ZXJyaWRlCiAgZmluYWwgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeTsKCiAgZmluYWwgTW9kaWZpZXJCdWlsZGVyIG1lbWJlcjsKCiAgZmluYWwgQ2xhc3NCdWlsZGVyIGNsYXNzQnVpbGRlcjsKCiAgZmluYWwgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5OwoKICBAb3ZlcnJpZGUKICBmaW5hbCBDb3JlVHlwZXMgY29yZVR5cGVzOwoKICBmaW5hbCBib29sIGlzSW5zdGFuY2VNZW1iZXI7CgogIGZpbmFsIFNjb3BlIGVuY2xvc2luZ1Njb3BlOwoKICBmaW5hbCBib29sIGVuYWJsZU5hdGl2ZTsKCiAgZmluYWwgYm9vbCBzdHJpbmdFeHBlY3RlZEFmdGVyTmF0aXZlOwoKICAvLy8gV2hldGhlciB0byBpZ25vcmUgYW4gdW5yZXNvbHZlZCByZWZlcmVuY2UgdG8gYG1haW5gIHdpdGhpbiB0aGUgYm9keSBvZgogIC8vLyBgX2dldE1haW5DbG9zdXJlYCB3aGVuIGNvbXBpbGluZyB0aGUgY3VycmVudCBsaWJyYXJ5LgogIC8vLwogIC8vLyBUaGlzIGFzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQuIFRoZSBzdGFuZGFsb25lIFZNIGFuZCBmbHV0dGVyIGhhdmUKICAvLy8gc3BlY2lhbCBsb2dpYyB0byByZXNvbHZlIGBtYWluYCBpbiBgX2dldE1haW5DbG9zdXJlYCwgdGhpcyBmbGFnIGlzIHVzZWQgdG8KICAvLy8gaWdub3JlIHRoYXQgcmVmZXJlbmNlIHRvIGBtYWluYCwgYnV0IG9ubHkgb24gbGlicmFyaWVzIHdoZXJlIHdlIGV4cGVjdCB0bwogIC8vLyBzZWUgaXQgKHRvZGF5IHRoYXQgaXMgZGFydDpfYnVpbHRpbiBhbmQgZGFydDp1aSkuCiAgLy8vCiAgLy8gVE9ETyhhaGUsc2lnbXVuZCk6IHJlbW92ZSB3aGVuIHRoZSBWTSBnZXRzIHJpZCBvZiB0aGUgc3BlY2lhbCBydWxlLCBzZWUKICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMjg5ODkuCiAgZmluYWwgYm9vbCBpZ25vcmVNYWluSW5HZXRNYWluQ2xvc3VyZTsKCiAgLy8gVE9ETyhhaGUpOiBDb25zaWRlciByZW5hbWluZyBbdXJpXSB0byAncGFydFVyaScuCiAgQG92ZXJyaWRlCiAgZmluYWwgVXJpIHVyaTsKCiAgZmluYWwgVHlwZUluZmVycmVyIHR5cGVJbmZlcnJlcjsKCiAgQG92ZXJyaWRlCiAgZmluYWwgVHlwZVByb21vdGVyIHR5cGVQcm9tb3RlcjsKCiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBsZWdhY3lNb2RlOwoKICAvLy8gT25seSB1c2VkIHdoZW4gW21lbWJlcl0gaXMgYSBjb25zdHJ1Y3Rvci4gSXQgdHJhY2tzIGlmIGFuIGltcGxpY2l0IHN1cGVyCiAgLy8vIGluaXRpYWxpemVyIGlzIG5lZWRlZC4KICAvLy8KICAvLy8gQW4gaW1wbGljaXQgc3VwZXIgaW5pdGlhbGl6ZXIgaXNuJ3QgbmVlZGVkCiAgLy8vCiAgLy8vIDEuIGlmIHRoZSBjdXJyZW50IGNsYXNzIGlzIE9iamVjdCwKICAvLy8gMi4gaWYgdGhlcmUgaXMgYW4gZXhwbGljaXQgc3VwZXIgaW5pdGlhbGl6ZXIsCiAgLy8vIDMuIGlmIHRoZXJlIGlzIGEgcmVkaXJlY3RpbmcgKHRoaXMpIGluaXRpYWxpemVyLCBvcgogIC8vLyA0LiBpZiBhIGNvbXBpbGUtdGltZSBlcnJvciBwcmV2ZW50ZWQgdXMgZnJvbSBnZW5lcmF0aW5nIGNvZGUgZm9yIGFuCiAgLy8vICAgIGluaXRpYWxpemVyLiBUaGlzIGF2b2lkcyBjYXNjYWRpbmcgZXJyb3JzLgogIGJvb2wgbmVlZHNJbXBsaWNpdFN1cGVySW5pdGlhbGl6ZXI7CgogIFNjb3BlIGZvcm1hbFBhcmFtZXRlclNjb3BlOwoKICAvLy8gVGhpcyBpcyBzZXQgdG8gdHJ1ZSB3aGVuIHdlIHN0YXJ0IHBhcnNpbmcgYW4gaW5pdGlhbGl6ZXIuIFdlIHVzZSB0aGlzIHRvCiAgLy8vIGZpbmQgdGhlIGNvcnJlY3Qgc2NvcGUgZm9yIGluaXRpYWxpemVycyBsaWtlIGluIHRoaXMgZXhhbXBsZToKICAvLy8KICAvLy8gICAgIGNsYXNzIEMgewogIC8vLyAgICAgICBmaW5hbCB4OwogIC8vLyAgICAgICBDKHgpIDogeCA9IHg7CiAgLy8vICAgICB9CiAgLy8vCiAgLy8vIFdoZW4gcGFyc2luZyB0aGlzIGluaXRpYWxpemVyIGB4ID0geGAsIGB4YCBtdXN0IGJlIHJlc29sdmVkIGluIHR3bwogIC8vLyBkaWZmZXJlbnQgc2NvcGVzLiBUaGUgZmlyc3QgYHhgIG11c3QgYmUgcmVzb2x2ZWQgaW4gdGhlIGNsYXNzJyBzY29wZSwgdGhlCiAgLy8vIHNlY29uZCBpbiB0aGUgZm9ybWFsIHBhcmFtZXRlciBzY29wZS4KICBib29sIGluSW5pdGlhbGl6ZXIgPSBmYWxzZTsKCiAgLy8vIFNldCB0byBgdHJ1ZWAgd2hlbiB3ZSBhcmUgcGFyc2luZyBhIGZpZWxkIGluaXRpYWxpemVyIGVpdGhlciBkaXJlY3RseQogIC8vLyBvciB3aXRoaW4gYW4gaW5pdGlhbGl6ZXIgbGlzdC4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGluIGA8aW5pdD5gIGluCiAgLy8vCiAgLy8vICAgIHZhciBmb28gPSA8aW5pdD47CiAgLy8vICAgIGNsYXNzIENsYXNzIHsKICAvLy8gICAgICB2YXIgYmFyID0gPGluaXQ+OwogIC8vLyAgICAgIENsYXNzKCkgOiA8aW5pdD47CiAgLy8vICAgIH0KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIGluc3RhbmNlIHByb3BlcnRpZXMgYXJlIGF2YWlsYWJsZS4KICBib29sIGluRmllbGRJbml0aWFsaXplciA9IGZhbHNlOwoKICBib29sIGluQ2F0Y2hDbGF1c2UgPSBmYWxzZTsKCiAgYm9vbCBpbkNhdGNoQmxvY2sgPSBmYWxzZTsKCiAgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsID0gMDsKCiAgLy8gU2V0IHdoZW4gYSBzcHJlYWQgZWxlbWVudCBpcyBlbmNvdW50ZXJlZCBpbiBhIGNvbGxlY3Rpb24gc28gdGhlIGNvbGxlY3Rpb24KICAvLyBuZWVkcyB0byBiZSBkZXN1Z2FyZWQgYWZ0ZXIgdHlwZSBpbmZlcmVuY2UuCiAgYm9vbCB0cmFuc2Zvcm1Db2xsZWN0aW9ucyA9IGZhbHNlOwoKICAvLyBTZXQgYnkgdHlwZSBpbmZlcmVuY2Ugd2hlbiBhIHNldCBsaXRlcmFsIGlzIGVuY291bnRlcmVkIHRoYXQgbmVlZHMgdG8gYmUKICAvLyB0cmFuc2Zvcm1lZCBiZWNhdXNlIHRoZSBiYWNrZW5kIHRhcmdldCBkb2VzIG5vdCBzdXBwb3J0IHNldCBsaXRlcmFscy4KICBib29sIHRyYW5zZm9ybVNldExpdGVyYWxzID0gZmFsc2U7CgogIFN0YXRlbWVudCBwcm9ibGVtSW5Mb29wT3JTd2l0Y2g7CgogIFNjb3BlIHN3aXRjaFNjb3BlOwoKICBDbG9uZVZpc2l0b3IgY2xvbmVyOwoKICBDb25zdGFudENvbnRleHQgY29uc3RhbnRDb250ZXh0ID0gQ29uc3RhbnRDb250ZXh0Lm5vbmU7CgogIFVucmVzb2x2ZWRUeXBlIGN1cnJlbnRMb2NhbFZhcmlhYmxlVHlwZTsKCiAgLy8gVXNpbmcgbm9uLW51bGwgdmFsdWUgdG8gaW5pdGlhbGl6ZSB0aGlzIGZpZWxkIGJhc2VkIG9uIHBlcmZvcm1hbmNlIGFkdmljZQogIC8vIGZyb20gVk0gZW5naW5lZXJzLiBUT0RPKGFoZSk6IERvZXMgdGhpcyBzdGlsbCBhcHBseT8KICBpbnQgY3VycmVudExvY2FsVmFyaWFibGVNb2RpZmllcnMgPSAtMTsKCiAgLy8vIElmIG5vbi1udWxsLCByZWNvcmRzIGluc3RhbmNlIGZpZWxkcyB3aGljaCBoYXZlIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZAogIC8vLyBhbmQgd2hlcmUgdGhhdCB3YXMuCiAgTWFwPFN0cmluZywgaW50PiBpbml0aWFsaXplZEZpZWxkczsKCiAgLy8vIExpc3Qgb2YgYnVpbHQgcmVkaXJlY3RpbmcgZmFjdG9yeSBpbnZvY2F0aW9ucy4gIFRoZSB0YXJnZXRzIG9mIHRoZQogIC8vLyBpbnZvY2F0aW9ucyBhcmUgdG8gYmUgcmVzb2x2ZWQgaW4gYSBzZXBhcmF0ZSBzdGVwLgogIGZpbmFsIExpc3Q8RXhwcmVzc2lvbj4gcmVkaXJlY3RpbmdGYWN0b3J5SW52b2NhdGlvbnMgPSA8RXhwcmVzc2lvbj5bXTsKCiAgLy8vIFZhcmlhYmxlcyB3aXRoIG1ldGFkYXRhLiAgVGhlaXIgdHlwZXMgbmVlZCB0byBiZSBpbmZlcnJlZCBsYXRlLCBmb3IKICAvLy8gZXhhbXBsZSwgaW4gW2ZpbmlzaEZ1bmN0aW9uXS4KICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlc1dpdGhNZXRhZGF0YTsKCiAgLy8vIE1vcmUgdGhhbiBvbmUgdmFyaWFibGUgZGVjbGFyZWQgaW4gYSBzaW5nbGUgc3RhdGVtZW50IHRoYXQgaGFzIG1ldGFkYXRhLgogIC8vLyBUaGVpciB0eXBlcyBuZWVkIHRvIGJlIGluZmVycmVkIGxhdGUsIGZvciBleGFtcGxlLCBpbiBbZmluaXNoRnVuY3Rpb25dLgogIExpc3Q8TGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPj4gbXVsdGlWYXJpYWJsZXNXaXRoTWV0YWRhdGE7CgogIC8vLyBJZiB0aGUgY3VycmVudCBtZW1iZXIgaXMgYW4gaW5zdGFuY2UgbWVtYmVyIGluIGFuIGV4dGVuc2lvbiBkZWNsYXJhdGlvbiwKICAvLy8gW2V4dGVuc2lvblRoaXNdIGhvbGRzIHRoZSBzeW50aGV0aWNhbGx5IGFkZCBwYXJhbWV0ZXIgaG9sZGluZyB0aGUgdmFsdWUKICAvLy8gZm9yIGB0aGlzYC4KICBmaW5hbCBWYXJpYWJsZURlY2xhcmF0aW9uIGV4dGVuc2lvblRoaXM7CgogIEJvZHlCdWlsZGVyKAogICAgICB0aGlzLmxpYnJhcnksCiAgICAgIHRoaXMubWVtYmVyLAogICAgICB0aGlzLmVuY2xvc2luZ1Njb3BlLAogICAgICB0aGlzLmZvcm1hbFBhcmFtZXRlclNjb3BlLAogICAgICB0aGlzLmhpZXJhcmNoeSwKICAgICAgdGhpcy5jb3JlVHlwZXMsCiAgICAgIHRoaXMuY2xhc3NCdWlsZGVyLAogICAgICB0aGlzLmlzSW5zdGFuY2VNZW1iZXIsCiAgICAgIHRoaXMuZXh0ZW5zaW9uVGhpcywKICAgICAgdGhpcy51cmksCiAgICAgIHRoaXMudHlwZUluZmVycmVyKQogICAgICA6IGZvcmVzdCA9IGNvbnN0IEZhbmdvcm4oKSwKICAgICAgICBlbmFibGVOYXRpdmUgPQogICAgICAgICAgICBsaWJyYXJ5LmxvYWRlci50YXJnZXQuYmFja2VuZFRhcmdldC5lbmFibGVOYXRpdmUobGlicmFyeS51cmkpLAogICAgICAgIHN0cmluZ0V4cGVjdGVkQWZ0ZXJOYXRpdmUgPQogICAgICAgICAgICBsaWJyYXJ5LmxvYWRlci50YXJnZXQuYmFja2VuZFRhcmdldC5uYXRpdmVFeHRlbnNpb25FeHBlY3RzU3RyaW5nLAogICAgICAgIGlnbm9yZU1haW5JbkdldE1haW5DbG9zdXJlID0gbGlicmFyeS51cmkuc2NoZW1lID09ICdkYXJ0JyAmJgogICAgICAgICAgICAobGlicmFyeS51cmkucGF0aCA9PSAiX2J1aWx0aW4iIHx8IGxpYnJhcnkudXJpLnBhdGggPT0gInVpIiksCiAgICAgICAgbmVlZHNJbXBsaWNpdFN1cGVySW5pdGlhbGl6ZXIgPQogICAgICAgICAgICBjb3JlVHlwZXM/Lm9iamVjdENsYXNzICE9IGNsYXNzQnVpbGRlcj8uY2xzLAogICAgICAgIHR5cGVQcm9tb3RlciA9IHR5cGVJbmZlcnJlcj8udHlwZVByb21vdGVyLAogICAgICAgIGxlZ2FjeU1vZGUgPSBsaWJyYXJ5LmxlZ2FjeU1vZGUsCiAgICAgICAgc3VwZXIoZW5jbG9zaW5nU2NvcGUpOwoKICBCb2R5QnVpbGRlci53aXRoUGFyZW50cyhGaWVsZEJ1aWxkZXIgZmllbGQsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIHBhcnQsCiAgICAgIENsYXNzQnVpbGRlciBjbGFzc0J1aWxkZXIsIFR5cGVJbmZlcnJlciB0eXBlSW5mZXJyZXIpCiAgICAgIDogdGhpcygKICAgICAgICAgICAgcGFydCwKICAgICAgICAgICAgZmllbGQsCiAgICAgICAgICAgIGNsYXNzQnVpbGRlcj8uc2NvcGUgPz8gZmllbGQubGlicmFyeS5zY29wZSwKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgcGFydC5sb2FkZXIuaGllcmFyY2h5LAogICAgICAgICAgICBwYXJ0LmxvYWRlci5jb3JlVHlwZXMsCiAgICAgICAgICAgIGNsYXNzQnVpbGRlciwKICAgICAgICAgICAgZmllbGQuaXNJbnN0YW5jZU1lbWJlciwKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgZmllbGQuZmlsZVVyaSwKICAgICAgICAgICAgdHlwZUluZmVycmVyKTsKCiAgQm9keUJ1aWxkZXIuZm9yRmllbGQoRmllbGRCdWlsZGVyIGZpZWxkLCBUeXBlSW5mZXJyZXIgdHlwZUluZmVycmVyKQogICAgICA6IHRoaXMud2l0aFBhcmVudHMoCiAgICAgICAgICAgIGZpZWxkLAogICAgICAgICAgICBmaWVsZC5wYXJlbnQgaXMgQ2xhc3NCdWlsZGVyID8gZmllbGQucGFyZW50LnBhcmVudCA6IGZpZWxkLnBhcmVudCwKICAgICAgICAgICAgZmllbGQucGFyZW50IGlzIENsYXNzQnVpbGRlciA/IGZpZWxkLnBhcmVudCA6IG51bGwsCiAgICAgICAgICAgIHR5cGVJbmZlcnJlcik7CgogIEJvZHlCdWlsZGVyLmZvck91dGxpbmVFeHByZXNzaW9uKAogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LAogICAgICBDbGFzc0J1aWxkZXIgY2xhc3NCdWlsZGVyLAogICAgICBNb2RpZmllckJ1aWxkZXIgbWVtYmVyLAogICAgICBTY29wZSBzY29wZSwKICAgICAgVXJpIGZpbGVVcmkpCiAgICAgIDogdGhpcygKICAgICAgICAgICAgbGlicmFyeSwKICAgICAgICAgICAgbWVtYmVyLAogICAgICAgICAgICBzY29wZSwKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgbGlicmFyeS5sb2FkZXIuaGllcmFyY2h5LAogICAgICAgICAgICBsaWJyYXJ5LmxvYWRlci5jb3JlVHlwZXMsCiAgICAgICAgICAgIGNsYXNzQnVpbGRlciwKICAgICAgICAgICAgbWVtYmVyPy5pc0luc3RhbmNlTWVtYmVyID8/IGZhbHNlLAogICAgICAgICAgICBudWxsLAogICAgICAgICAgICBmaWxlVXJpLAogICAgICAgICAgICBsaWJyYXJ5LmxvYWRlci50eXBlSW5mZXJlbmNlRW5naW5lPy5jcmVhdGVMb2NhbFR5cGVJbmZlcnJlcigKICAgICAgICAgICAgICAgIGZpbGVVcmksIGNsYXNzQnVpbGRlcj8udGFyZ2V0Py50aGlzVHlwZSwgbGlicmFyeSkpOwoKICBib29sIGdldCBpbkNvbnN0cnVjdG9yIHsKICAgIHJldHVybiBmdW5jdGlvbk5lc3RpbmdMZXZlbCA9PSAwICYmIG1lbWJlciBpcyBDb25zdHJ1Y3RvckJ1aWxkZXI7CiAgfQoKICBib29sIGdldCBpc0luc3RhbmNlQ29udGV4dCB7CiAgICByZXR1cm4gaXNJbnN0YW5jZU1lbWJlciB8fCBtZW1iZXIgaXMgQ29uc3RydWN0b3JCdWlsZGVyOwogIH0KCiAgVHlwZUVudmlyb25tZW50IGdldCB0eXBlRW52aXJvbm1lbnQgPT4gdHlwZUluZmVycmVyPy50eXBlU2NoZW1hRW52aXJvbm1lbnQ7CgogIERhcnRUeXBlIGdldCBpbXBsaWNpdFR5cGVBcmd1bWVudCA9PgogICAgICBsZWdhY3lNb2RlID8gY29uc3QgRHluYW1pY1R5cGUoKSA6IGNvbnN0IEltcGxpY2l0VHlwZUFyZ3VtZW50KCk7CgogIEBvdmVycmlkZQogIHZvaWQgcHVzaChPYmplY3Qgbm9kZSkgewogICAgaWYgKG5vZGUgaXMgRGFydFR5cGUpIHsKICAgICAgdW5oYW5kbGVkKCJEYXJ0VHlwZSIsICJwdXNoIiwgLTEsIHVyaSk7CiAgICB9CiAgICBpbkluaXRpYWxpemVyID0gZmFsc2U7CiAgICBzdXBlci5wdXNoKG5vZGUpOwogIH0KCiAgRXhwcmVzc2lvbiBwb3BGb3JWYWx1ZSgpID0+IHRvVmFsdWUocG9wKCkpOwoKICBFeHByZXNzaW9uIHBvcEZvckVmZmVjdCgpID0+IHRvRWZmZWN0KHBvcCgpKTsKCiAgRXhwcmVzc2lvbiBwb3BGb3JWYWx1ZUlmTm90TnVsbChPYmplY3QgdmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZSA9PSBudWxsID8gbnVsbCA6IHBvcEZvclZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHRvVmFsdWUoT2JqZWN0IG5vZGUpIHsKICAgIGlmIChub2RlIGlzIEdlbmVyYXRvcikgewogICAgICByZXR1cm4gbm9kZS5idWlsZFNpbXBsZVJlYWQoKTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBFeHByZXNzaW9uKSB7CiAgICAgIHJldHVybiBub2RlOwogICAgfSBlbHNlIGlmIChub2RlIGlzIFN1cGVySW5pdGlhbGl6ZXIpIHsKICAgICAgcmV0dXJuIGJ1aWxkUHJvYmxlbSgKICAgICAgICAgIGZhc3RhLm1lc3NhZ2VTdXBlckFzRXhwcmVzc2lvbiwgbm9kZS5maWxlT2Zmc2V0LCBub0xlbmd0aCk7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgUHJvYmxlbUJ1aWxkZXIpIHsKICAgICAgcmV0dXJuIGJ1aWxkUHJvYmxlbShub2RlLm1lc3NhZ2UsIG5vZGUuY2hhck9mZnNldCwgbm9MZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHVuaGFuZGxlZCgiJHtub2RlLnJ1bnRpbWVUeXBlfSIsICJ0b1ZhbHVlIiwgLTEsIHVyaSk7CiAgICB9CiAgfQoKICBFeHByZXNzaW9uIHRvRWZmZWN0KE9iamVjdCBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBHZW5lcmF0b3IpIHJldHVybiBub2RlLmJ1aWxkRm9yRWZmZWN0KCk7CiAgICByZXR1cm4gdG9WYWx1ZShub2RlKTsKICB9CgogIExpc3Q8RXhwcmVzc2lvbj4gcG9wTGlzdEZvclZhbHVlKGludCBuKSB7CiAgICBMaXN0PEV4cHJlc3Npb24+IGxpc3QgPQogICAgICAgIG5ldyBMaXN0PEV4cHJlc3Npb24+LmZpbGxlZChuLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gbiAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGxpc3RbaV0gPSBwb3BGb3JWYWx1ZSgpOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBMaXN0PEV4cHJlc3Npb24+IHBvcExpc3RGb3JFZmZlY3QoaW50IG4pIHsKICAgIExpc3Q8RXhwcmVzc2lvbj4gbGlzdCA9CiAgICAgICAgbmV3IExpc3Q8RXhwcmVzc2lvbj4uZmlsbGVkKG4sIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgbGlzdFtpXSA9IHBvcEZvckVmZmVjdCgpOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBTdGF0ZW1lbnQgcG9wQmxvY2soaW50IGNvdW50LCBUb2tlbiBvcGVuQnJhY2UsIFRva2VuIGNsb3NlQnJhY2UpIHsKICAgIHJldHVybiBmb3Jlc3QuYmxvY2soCiAgICAgICAgb3BlbkJyYWNlLAogICAgICAgIGNvbnN0IEdyb3dhYmxlTGlzdDxTdGF0ZW1lbnQ+KCkucG9wKHN0YWNrLCBjb3VudCkgPz8gPFN0YXRlbWVudD5bXSwKICAgICAgICBjbG9zZUJyYWNlKTsKICB9CgogIFN0YXRlbWVudCBwb3BTdGF0ZW1lbnRJZk5vdE51bGwoT2JqZWN0IHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IG51bGwgOiBwb3BTdGF0ZW1lbnQoKTsKICB9CgogIFN0YXRlbWVudCBwb3BTdGF0ZW1lbnQoKSA9PiBmb3Jlc3Qud3JhcFZhcmlhYmxlcyhwb3AoKSk7CgogIHZvaWQgZW50ZXJTd2l0Y2hTY29wZSgpIHsKICAgIHB1c2goc3dpdGNoU2NvcGUgPz8gTnVsbFZhbHVlLlN3aXRjaFNjb3BlKTsKICAgIHN3aXRjaFNjb3BlID0gc2NvcGU7CiAgfQoKICB2b2lkIGV4aXRTd2l0Y2hTY29wZSgpIHsKICAgIFNjb3BlIG91dGVyU3dpdGNoU2NvcGUgPSBwb3AoKTsKICAgIGlmIChzd2l0Y2hTY29wZS51bmNsYWltZWRGb3J3YXJkRGVjbGFyYXRpb25zICE9IG51bGwpIHsKICAgICAgc3dpdGNoU2NvcGUudW5jbGFpbWVkRm9yd2FyZERlY2xhcmF0aW9ucwogICAgICAgICAgLmZvckVhY2goKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbikgewogICAgICAgIGlmIChvdXRlclN3aXRjaFNjb3BlID09IG51bGwpIHsKICAgICAgICAgIEp1bXBUYXJnZXQgdGFyZ2V0ID0gZGVjbGFyYXRpb247CiAgICAgICAgICBmb3IgKFN0YXRlbWVudCBzdGF0ZW1lbnQgaW4gdGFyZ2V0LnVzZXJzKSB7CiAgICAgICAgICAgIHN0YXRlbWVudC5wYXJlbnQucmVwbGFjZUNoaWxkKAogICAgICAgICAgICAgICAgc3RhdGVtZW50LAogICAgICAgICAgICAgICAgd3JhcEluUHJvYmxlbVN0YXRlbWVudChzdGF0ZW1lbnQsCiAgICAgICAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVMYWJlbE5vdEZvdW5kLndpdGhBcmd1bWVudHMobmFtZSkpKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgb3V0ZXJTd2l0Y2hTY29wZS5mb3J3YXJkRGVjbGFyZUxhYmVsKG5hbWUsIGRlY2xhcmF0aW9uKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgc3dpdGNoU2NvcGUgPSBvdXRlclN3aXRjaFNjb3BlOwogIH0KCiAgdm9pZCB3cmFwVmFyaWFibGVJbml0aWFsaXplckluRXJyb3IoCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsCiAgICAgIFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nIG5hbWUpPiB0ZW1wbGF0ZSwKICAgICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCkgewogICAgU3RyaW5nIG5hbWUgPSB2YXJpYWJsZS5uYW1lOwogICAgaW50IG9mZnNldCA9IHZhcmlhYmxlLmZpbGVPZmZzZXQ7CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSB0ZW1wbGF0ZS53aXRoQXJndW1lbnRzKG5hbWUpOwogICAgaWYgKHZhcmlhYmxlLmluaXRpYWxpemVyID09IG51bGwpIHsKICAgICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIgPQogICAgICAgICAgYnVpbGRQcm9ibGVtKG1lc3NhZ2UsIG9mZnNldCwgbmFtZS5sZW5ndGgsIGNvbnRleHQ6IGNvbnRleHQpCiAgICAgICAgICAgIC4ucGFyZW50ID0gdmFyaWFibGU7CiAgICB9IGVsc2UgewogICAgICB2YXJpYWJsZS5pbml0aWFsaXplciA9IHdyYXBJbkxvY2F0ZWRQcm9ibGVtKAogICAgICAgICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIsIG1lc3NhZ2Uud2l0aExvY2F0aW9uKHVyaSwgb2Zmc2V0LCBuYW1lLmxlbmd0aCksCiAgICAgICAgICBjb250ZXh0OiBjb250ZXh0KQogICAgICAgIC4ucGFyZW50ID0gdmFyaWFibGU7CiAgICB9CiAgfQoKICB2b2lkIGRlY2xhcmVWYXJpYWJsZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBTY29wZSBzY29wZSkgewogICAgU3RyaW5nIG5hbWUgPSB2YXJpYWJsZS5uYW1lOwogICAgRGVjbGFyYXRpb24gZXhpc3RpbmcgPSBzY29wZS5sb2NhbFtuYW1lXTsKICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgIC8vIFRoaXMgcmVwb3J0cyBhbiBlcnJvciBmb3IgZHVwbGljYXRlZCBkZWNsYXJhdGlvbnMgaW4gdGhlIHNhbWUgc2NvcGU6CiAgICAgIC8vIGB7IHZhciB4OyB2YXIgeDsgfWAKICAgICAgd3JhcFZhcmlhYmxlSW5pdGlhbGl6ZXJJbkVycm9yKAogICAgICAgICAgdmFyaWFibGUsIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLCA8TG9jYXRlZE1lc3NhZ2U+WwogICAgICAgIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uQ2F1c2UKICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZSkKICAgICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGV4aXN0aW5nLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKQogICAgICBdKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgTG9jYXRlZE1lc3NhZ2UgY29udGV4dCA9IHNjb3BlLmRlY2xhcmUoCiAgICAgICAgdmFyaWFibGUubmFtZSwKICAgICAgICBuZXcgVmFyaWFibGVCdWlsZGVyKHZhcmlhYmxlLCBtZW1iZXIgPz8gY2xhc3NCdWlsZGVyID8/IGxpYnJhcnksIHVyaSksCiAgICAgICAgdXJpKTsKICAgIGlmIChjb250ZXh0ICE9IG51bGwpIHsKICAgICAgLy8gVGhpcyBjYXNlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBhYm92ZSBlcnJvci4gSW4gdGhpcyBjYXNlLCB0aGUgcHJvYmxlbQogICAgICAvLyBpcyB1c2luZyBgeGAgYmVmb3JlIGl0J3MgZGVjbGFyZWQ6IGB7IHZhciB4OyB7IHByaW50KHgpOyB2YXIgeDsKICAgICAgLy8gfX1gLiBJbiB0aGlzIGNhc2UsIHdlIHdhbnQgdHdvIGVycm9ycywgdGhlIGB4YCBpbiBgcHJpbnQoeClgIGFuZCB0aGUKICAgICAgLy8gc2Vjb25kIChvciBpbm5lcm1vc3QgZGVjbGFyYXRpb24pIG9mIGB4YC4KICAgICAgd3JhcFZhcmlhYmxlSW5pdGlhbGl6ZXJJbkVycm9yKAogICAgICAgICAgdmFyaWFibGUsCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWQsCiAgICAgICAgICA8TG9jYXRlZE1lc3NhZ2U+W2NvbnRleHRdKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEp1bXBUYXJnZXQgY3JlYXRlSnVtcFRhcmdldChKdW1wVGFyZ2V0S2luZCBraW5kLCBpbnQgY2hhck9mZnNldCkgewogICAgcmV0dXJuIG5ldyBKdW1wVGFyZ2V0KGtpbmQsIGZ1bmN0aW9uTmVzdGluZ0xldmVsLCBtZW1iZXIsIGNoYXJPZmZzZXQpOwogIH0KCiAgdm9pZCBpbmZlckFubm90YXRpb25zKExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMpIHsKICAgIGlmIChhbm5vdGF0aW9ucyAhPSBudWxsKSB7CiAgICAgIHR5cGVJbmZlcnJlcj8uaW5mZXJNZXRhZGF0YSh0aGlzLCBhbm5vdGF0aW9ucyk7CiAgICAgIGxpYnJhcnkubG9hZGVyLnRyYW5zZm9ybUxpc3RQb3N0SW5mZXJlbmNlKAogICAgICAgICAgYW5ub3RhdGlvbnMsIHRyYW5zZm9ybVNldExpdGVyYWxzLCB0cmFuc2Zvcm1Db2xsZWN0aW9ucyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTWV0YWRhdGEoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luTWV0YWRhdGEiKTsKICAgIHN1cGVyLnB1c2goY29uc3RhbnRDb250ZXh0KTsKICAgIGNvbnN0YW50Q29udGV4dCA9IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWV0YWRhdGEoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gcGVyaW9kQmVmb3JlTmFtZSwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk1ldGFkYXRhIik7CiAgICBBcmd1bWVudHMgYXJndW1lbnRzID0gcG9wKCk7CiAgICBwdXNoUXVhbGlmaWVkUmVmZXJlbmNlKGJlZ2luVG9rZW4ubmV4dCwgcGVyaW9kQmVmb3JlTmFtZSk7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgcHVzaChhcmd1bWVudHMpOwogICAgICBidWlsZENvbnN0cnVjdG9yUmVmZXJlbmNlSW52b2NhdGlvbigKICAgICAgICAgIGJlZ2luVG9rZW4ubmV4dCwgYmVnaW5Ub2tlbi5vZmZzZXQsIENvbnN0bmVzcy5leHBsaWNpdENvbnN0KTsKICAgICAgcHVzaChwb3BGb3JWYWx1ZSgpKTsKICAgIH0gZWxzZSB7CiAgICAgIHBvcCgpOyAvLyBOYW1lIGxhc3QgaWRlbnRpZmllcgogICAgICBTdHJpbmcgbmFtZSA9IHBvcCgpOwogICAgICBwb3AoKTsgLy8gVHlwZSBhcmd1bWVudHMgKGlnbm9yZWQsIGFscmVhZHkgcmVwb3J0ZWQgYnkgcGFyc2VyKS4KICAgICAgT2JqZWN0IGV4cHJlc3Npb24gPSBwb3AoKTsKICAgICAgaWYgKGV4cHJlc3Npb24gaXMgSWRlbnRpZmllcikgewogICAgICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IGV4cHJlc3Npb247CiAgICAgICAgZXhwcmVzc2lvbiA9IG5ldyBVbnJlc29sdmVkTmFtZUdlbmVyYXRvcigKICAgICAgICAgICAgdGhpcywKICAgICAgICAgICAgZGVwcmVjYXRlZF9leHRyYWN0VG9rZW4oaWRlbnRpZmllciksCiAgICAgICAgICAgIG5ldyBOYW1lKGlkZW50aWZpZXIubmFtZSwgbGlicmFyeS5uYW1lT3JpZ2luKSk7CiAgICAgIH0KICAgICAgaWYgKG5hbWU/LmlzTm90RW1wdHkgPz8gZmFsc2UpIHsKICAgICAgICBUb2tlbiBwZXJpb2QgPSBwZXJpb2RCZWZvcmVOYW1lID8/IGJlZ2luVG9rZW4ubmV4dC5uZXh0OwogICAgICAgIEdlbmVyYXRvciBnZW5lcmF0b3IgPSBleHByZXNzaW9uOwogICAgICAgIGV4cHJlc3Npb24gPSBnZW5lcmF0b3IuYnVpbGRQcm9wZXJ0eUFjY2VzcygKICAgICAgICAgICAgbmV3IEluY29tcGxldGVQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcigKICAgICAgICAgICAgICAgIHRoaXMsIHBlcmlvZC5uZXh0LCBuZXcgTmFtZShuYW1lLCBsaWJyYXJ5Lm5hbWVPcmlnaW4pKSwKICAgICAgICAgICAgcGVyaW9kLm5leHQub2Zmc2V0LAogICAgICAgICAgICBmYWxzZSk7CiAgICAgIH0KCiAgICAgIENvbnN0YW50Q29udGV4dCBzYXZlZENvbnN0YW50Q29udGV4dCA9IHBvcCgpOwogICAgICBpZiAoZXhwcmVzc2lvbiBpcyEgU3RhdGljQWNjZXNzR2VuZXJhdG9yICYmCiAgICAgICAgICBleHByZXNzaW9uIGlzISBWYXJpYWJsZVVzZUdlbmVyYXRvcikgewogICAgICAgIHB1c2god3JhcEluUHJvYmxlbSgKICAgICAgICAgICAgdG9WYWx1ZShleHByZXNzaW9uKSwgZmFzdGEubWVzc2FnZUV4cHJlc3Npb25Ob3RNZXRhZGF0YSwgbm9MZW5ndGgpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwdXNoKHRvVmFsdWUoZXhwcmVzc2lvbikpOwogICAgICB9CiAgICAgIGNvbnN0YW50Q29udGV4dCA9IHNhdmVkQ29uc3RhbnRDb250ZXh0OwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRNZXRhZGF0YVN0YXIoaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJNZXRhZGF0YVN0YXIiKTsKICAgIGlmIChjb3VudCA9PSAwKSB7CiAgICAgIHB1c2goTnVsbFZhbHVlLk1ldGFkYXRhKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2goY29uc3QgR3Jvd2FibGVMaXN0PEV4cHJlc3Npb24+KCkucG9wKHN0YWNrLCBjb3VudCkgPz8KICAgICAgICAgIE51bGxWYWx1ZS5NZXRhZGF0YSAvKiBJZ25vcmUgcGFyc2VyIHJlY292ZXJ5ICovKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVG9wTGV2ZWxGaWVsZHMoCiAgICAgIFRva2VuIHN0YXRpY1Rva2VuLAogICAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwKICAgICAgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsCiAgICAgIGludCBjb3VudCwKICAgICAgVG9rZW4gYmVnaW5Ub2tlbiwKICAgICAgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlRvcExldmVsRmllbGRzIik7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogaGFuZGxlIE5OQkQgJ2xhdGUnIG1vZGlmaWVyCiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVOb25OdWxsYWJsZSkgewogICAgICByZXBvcnROb25OdWxsYWJsZU1vZGlmaWVyRXJyb3IobGF0ZVRva2VuKTsKICAgIH0KICAgIHB1c2goY291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGaWVsZHMoVG9rZW4gc3RhdGljVG9rZW4sIFRva2VuIGNvdmFyaWFudFRva2VuLCBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiRmllbGRzIik7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogaGFuZGxlIE5OQkQgJ2xhdGUnIG1vZGlmaWVyCiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVOb25OdWxsYWJsZSkgewogICAgICByZXBvcnROb25OdWxsYWJsZU1vZGlmaWVyRXJyb3IobGF0ZVRva2VuKTsKICAgIH0KICAgIHB1c2goY291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmaW5pc2hGaWVsZHMoKSB7CiAgICBkZWJ1Z0V2ZW50KCJmaW5pc2hGaWVsZHMiKTsKICAgIGludCBjb3VudCA9IHBvcCgpOwogICAgTGlzdDxGaWVsZEJ1aWxkZXI+IGZpZWxkcyA9IDxGaWVsZEJ1aWxkZXI+W107CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IHBvcCgpOwogICAgICBJZGVudGlmaWVyIGlkZW50aWZpZXIgPSBwb3AoKTsKICAgICAgU3RyaW5nIG5hbWUgPSBpZGVudGlmaWVyLm5hbWU7CiAgICAgIERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwogICAgICBpZiAoY2xhc3NCdWlsZGVyICE9IG51bGwpIHsKICAgICAgICBkZWNsYXJhdGlvbiA9IGNsYXNzQnVpbGRlci5nZXRMb2NhbE1lbWJlcihuYW1lKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBkZWNsYXJhdGlvbiA9IGxpYnJhcnkuZ2V0TG9jYWxNZW1iZXIobmFtZSk7CiAgICAgIH0KICAgICAgRmllbGRCdWlsZGVyIGZpZWxkOwogICAgICBpZiAoZGVjbGFyYXRpb24uaXNGaWVsZCAmJiBkZWNsYXJhdGlvbi5uZXh0ID09IG51bGwpIHsKICAgICAgICBmaWVsZCA9IGRlY2xhcmF0aW9uOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGZpZWxkcy5hZGQoZmllbGQpOwogICAgICBpZiAoaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgIGlmIChmaWVsZC5uZXh0ICE9IG51bGwpIHsKICAgICAgICAgIC8vIER1cGxpY2F0ZSBkZWZpbml0aW9uLiBUaGUgZmllbGQgbWlnaHQgbm90IGJlIHRoZSBjb3JyZWN0IG9uZSwKICAgICAgICAgIC8vIHNvIHdlIHNraXAgaW5mZXJlbmNlIG9mIHRoZSBpbml0aWFsaXplci4KICAgICAgICAgIC8vIEVycm9yIHJlcG9ydGluZyBhbmQgcmVjb3ZlcnkgaXMgaGFuZGxlZCBlbHNld2hlcmUuCiAgICAgICAgfSBlbHNlIGlmIChmaWVsZC50YXJnZXQuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgICAgLy8gVGhlIGluaXRpYWxpemVyIHdhcyBhbHJlYWR5IGNvbXBpbGVkIChlLmcuLCBpZiBpdCBhcHBlYXIgaW4gdGhlCiAgICAgICAgICAvLyBvdXRsaW5lLCBsaWtlIGNvbnN0YW50IGZpZWxkIGluaXRpYWxpemVycykgc28gd2UgZG8gbm90IG5lZWQgdG8KICAgICAgICAgIC8vIHBlcmZvcm0gdHlwZSBpbmZlcmVuY2Ugb3IgdHJhbnNmb3JtYXRpb25zLgogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmaWVsZC5pbml0aWFsaXplciA9IGluaXRpYWxpemVyOwogICAgICAgICAgdHlwZUluZmVycmVyPy5pbmZlckZpZWxkSW5pdGlhbGl6ZXIoCiAgICAgICAgICAgICAgdGhpcywgZmllbGQuYnVpbHRUeXBlLCBpbml0aWFsaXplcik7CiAgICAgICAgICBsaWJyYXJ5LmxvYWRlci50cmFuc2Zvcm1Qb3N0SW5mZXJlbmNlKAogICAgICAgICAgICAgIGZpZWxkLnRhcmdldCwgdHJhbnNmb3JtU2V0TGl0ZXJhbHMsIHRyYW5zZm9ybUNvbGxlY3Rpb25zKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHsKICAgICAgLy8gVE9ETyhhaGUpOiBUaGUgdHlwZSB3ZSBjb21wdXRlIGhlcmUgbWF5IGJlIGRpZmZlcmVudCBmcm9tIHdoYXQgaXMKICAgICAgLy8gY29tcHV0ZWQgaW4gdGhlIG91dGxpbmUgcGhhc2UuIFdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgb3V0bGluZQogICAgICAvLyBwaGFzZSBjb21wdXRlcyB0aGUgc2FtZSB0eXBlLiBTZWUKICAgICAgLy8gcGtnL2Zyb250X2VuZC90ZXN0Y2FzZXMvcmVncmVzcy9pc3N1ZV8zMjIwMC5kYXJ0IGZvciBhbiBleGFtcGxlIHdoZXJlCiAgICAgIC8vIG5vdCBjYWxsaW5nIFtidWlsZERhcnRUeXBlXSBsZWFkcyB0byBhIG1pc3NpbmcgY29tcGlsZS10aW1lCiAgICAgIC8vIGVycm9yLiBBbHNvLCBub3RpY2UgdGhhdCB0aGUgdHlwZSBvZiB0aGUgcHJvYmxlbWF0aWMgZmllbGQgaXNuJ3QKICAgICAgLy8gYGludmFsaWQtdHlwZWAuCiAgICAgIGJ1aWxkRGFydFR5cGUocG9wKCkpOyAvLyBUeXBlLgogICAgfQogICAgcG9wKCk7IC8vIEFubm90YXRpb25zLgoKICAgIHJlc29sdmVSZWRpcmVjdGluZ0ZhY3RvcnlUYXJnZXRzKCk7CiAgICBmaW5pc2hWYXJpYWJsZU1ldGFkYXRhKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE1lbWJlcigpIHsKICAgIGRlYnVnRXZlbnQoIk1lbWJlciIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRCbG9ja0Z1bmN0aW9uQm9keShpbnQgY291bnQsIFRva2VuIG9wZW5CcmFjZSwgVG9rZW4gY2xvc2VCcmFjZSkgewogICAgZGVidWdFdmVudCgiQmxvY2tGdW5jdGlvbkJvZHkiKTsKICAgIGlmIChvcGVuQnJhY2UgPT0gbnVsbCkgewogICAgICBhc3NlcnQoY291bnQgPT0gMCk7CiAgICAgIHB1c2goTnVsbFZhbHVlLkJsb2NrKTsKICAgIH0gZWxzZSB7CiAgICAgIFN0YXRlbWVudCBibG9jayA9IHBvcEJsb2NrKGNvdW50LCBvcGVuQnJhY2UsIGNsb3NlQnJhY2UpOwogICAgICBleGl0TG9jYWxTY29wZSgpOwogICAgICBwdXNoKGJsb2NrKTsKICAgIH0KICB9CgogIHZvaWQgcHJlcGFyZUluaXRpYWxpemVycygpIHsKICAgIEZ1bmN0aW9uQnVpbGRlciBtZW1iZXIgPSB0aGlzLm1lbWJlcjsKICAgIHNjb3BlID0gbWVtYmVyLmNvbXB1dGVGb3JtYWxQYXJhbWV0ZXJJbml0aWFsaXplclNjb3BlKHNjb3BlKTsKICAgIGlmIChtZW1iZXIgaXMgQ29uc3RydWN0b3JCdWlsZGVyKSB7CiAgICAgIG1lbWJlci5wcmVwYXJlSW5pdGlhbGl6ZXJzKCk7CiAgICAgIGlmIChtZW1iZXIuZm9ybWFscyAhPSBudWxsKSB7CiAgICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiBtZW1iZXIuZm9ybWFscykgewogICAgICAgICAgaWYgKGZvcm1hbC5pc0luaXRpYWxpemluZ0Zvcm1hbCkgewogICAgICAgICAgICBJbml0aWFsaXplciBpbml0aWFsaXplcjsKICAgICAgICAgICAgaWYgKG1lbWJlci5pc0V4dGVybmFsKSB7CiAgICAgICAgICAgICAgaW5pdGlhbGl6ZXIgPSBidWlsZEludmFsaWRJbml0aWFsaXplcigKICAgICAgICAgICAgICAgICAgZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgICAgICAgICAgZmFzdGEubWVzc2FnZUV4dGVybmFsQ29uc3RydWN0b3JXaXRoRmllbGRJbml0aWFsaXplcnMsCiAgICAgICAgICAgICAgICAgICAgICBmb3JtYWwuY2hhck9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgIGZvcm1hbC5uYW1lLmxlbmd0aCkpLAogICAgICAgICAgICAgICAgICBmb3JtYWwuY2hhck9mZnNldCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgaW5pdGlhbGl6ZXIgPSBidWlsZEZpZWxkSW5pdGlhbGl6ZXIoCiAgICAgICAgICAgICAgICAgIHRydWUsCiAgICAgICAgICAgICAgICAgIGZvcm1hbC5uYW1lLAogICAgICAgICAgICAgICAgICBmb3JtYWwuY2hhck9mZnNldCwKICAgICAgICAgICAgICAgICAgZm9ybWFsLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICAgIG5ldyBWYXJpYWJsZUdldChmb3JtYWwuZGVjbGFyYXRpb24pLAogICAgICAgICAgICAgICAgICBmb3JtYWxUeXBlOiBmb3JtYWwuZGVjbGFyYXRpb24udHlwZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbWVtYmVyLmFkZEluaXRpYWxpemVyKGluaXRpYWxpemVyLCB0aGlzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9Jbml0aWFsaXplcnMoKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb0luaXRpYWxpemVycyIpOwogICAgaWYgKGZ1bmN0aW9uTmVzdGluZ0xldmVsID09IDApIHsKICAgICAgcHJlcGFyZUluaXRpYWxpemVycygpOwogICAgICBzY29wZSA9IGZvcm1hbFBhcmFtZXRlclNjb3BlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkluaXRpYWxpemVycyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5Jbml0aWFsaXplcnMiKTsKICAgIGlmIChmdW5jdGlvbk5lc3RpbmdMZXZlbCA9PSAwKSB7CiAgICAgIHByZXBhcmVJbml0aWFsaXplcnMoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW5pdGlhbGl6ZXJzKGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkluaXRpYWxpemVycyIpOwogICAgaWYgKGZ1bmN0aW9uTmVzdGluZ0xldmVsID09IDApIHsKICAgICAgc2NvcGUgPSBmb3JtYWxQYXJhbWV0ZXJTY29wZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Jbml0aWFsaXplcihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5Jbml0aWFsaXplciIpOwogICAgaW5Jbml0aWFsaXplciA9IHRydWU7CiAgICBpbkZpZWxkSW5pdGlhbGl6ZXIgPSB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJbml0aWFsaXplcihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiZW5kSW5pdGlhbGl6ZXIiKTsKICAgIGluRmllbGRJbml0aWFsaXplciA9IGZhbHNlOwogICAgYXNzZXJ0KCFpbkluaXRpYWxpemVyKTsKICAgIGZpbmFsIG1lbWJlciA9IHRoaXMubWVtYmVyOwogICAgT2JqZWN0IG5vZGUgPSBwb3AoKTsKICAgIEluaXRpYWxpemVyIGluaXRpYWxpemVyOwogICAgaWYgKG5vZGUgaXMgSW5pdGlhbGl6ZXIpIHsKICAgICAgaW5pdGlhbGl6ZXIgPSBub2RlOwogICAgfSBlbHNlIGlmIChub2RlIGlzIEdlbmVyYXRvcikgewogICAgICBpbml0aWFsaXplciA9IG5vZGUuYnVpbGRGaWVsZEluaXRpYWxpemVyKGluaXRpYWxpemVkRmllbGRzKTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBDb25zdHJ1Y3Rvckludm9jYXRpb24pIHsKICAgICAgaW5pdGlhbGl6ZXIgPSBidWlsZFN1cGVySW5pdGlhbGl6ZXIoCiAgICAgICAgICBmYWxzZSwgbm9kZS50YXJnZXQsIG5vZGUuYXJndW1lbnRzLCB0b2tlbi5jaGFyT2Zmc2V0KTsKICAgIH0gZWxzZSB7CiAgICAgIEV4cHJlc3Npb24gdmFsdWUgPSB0b1ZhbHVlKG5vZGUpOwogICAgICBpZiAoIWZvcmVzdC5pc1Rocm93KG5vZGUpKSB7CiAgICAgICAgdmFsdWUgPQogICAgICAgICAgICB3cmFwSW5Qcm9ibGVtKHZhbHVlLCBmYXN0YS5tZXNzYWdlRXhwZWN0ZWRBbkluaXRpYWxpemVyLCBub0xlbmd0aCk7CiAgICAgIH0KICAgICAgaW5pdGlhbGl6ZXIgPSBidWlsZEludmFsaWRJbml0aWFsaXplcihub2RlLCB0b2tlbi5jaGFyT2Zmc2V0KTsKICAgIH0KICAgIHR5cGVJbmZlcnJlcj8uaW5mZXJJbml0aWFsaXplcih0aGlzLCBpbml0aWFsaXplcik7CiAgICBpZiAobWVtYmVyIGlzIENvbnN0cnVjdG9yQnVpbGRlciAmJiAhbWVtYmVyLmlzRXh0ZXJuYWwpIHsKICAgICAgbWVtYmVyLmFkZEluaXRpYWxpemVyKGluaXRpYWxpemVyLCB0aGlzKTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yCiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobWVtYmVyLm5hbWUpLAogICAgICAgICAgdG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgIG1lbWJlci5uYW1lLmxlbmd0aCk7CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBfY29tcHV0ZVJldHVyblR5cGVDb250ZXh0KE1lbWJlckJ1aWxkZXIgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyIGlzIFByb2NlZHVyZUJ1aWxkZXIpIHsKICAgICAgcmV0dXJuIG1lbWJlci5wcm9jZWR1cmUuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChtZW1iZXIgaXMgQ29uc3RydWN0b3JCdWlsZGVyKTsKICAgICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZpbmlzaEZ1bmN0aW9uKAogICAgICBGb3JtYWxQYXJhbWV0ZXJzIGZvcm1hbHMsIEFzeW5jTWFya2VyIGFzeW5jTW9kaWZpZXIsIFN0YXRlbWVudCBib2R5KSB7CiAgICBkZWJ1Z0V2ZW50KCJmaW5pc2hGdW5jdGlvbiIpOwogICAgdHlwZVByb21vdGVyPy5maW5pc2hlZCgpOwoKICAgIEZ1bmN0aW9uQnVpbGRlciBidWlsZGVyID0gbWVtYmVyOwogICAgaWYgKGZvcm1hbHM/LnBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZvcm1hbHMucGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgcGFyYW1ldGVyID0gZm9ybWFscy5wYXJhbWV0ZXJzW2ldOwogICAgICAgIEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIgPSBwYXJhbWV0ZXIudGFyZ2V0LmluaXRpYWxpemVyOwogICAgICAgIGlmIChwYXJhbWV0ZXIuaXNPcHRpb25hbCB8fCBpbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHJlYWxQYXJhbWV0ZXIgPSBidWlsZGVyLmZvcm1hbHNbaV0udGFyZ2V0OwogICAgICAgICAgaWYgKHBhcmFtZXRlci5pc09wdGlvbmFsKSB7CiAgICAgICAgICAgIGluaXRpYWxpemVyID8/PSBmb3Jlc3QubGl0ZXJhbE51bGwoCiAgICAgICAgICAgICAgICAvLyBUT0RPKGFoZSk6IFNob3VsZCBzdG9yZTogcmVhbFBhcmFtZXRlci5maWxlT2Zmc2V0CiAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzIyODkKICAgICAgICAgICAgICAgIG51bGwpOwogICAgICAgICAgfQogICAgICAgICAgcmVhbFBhcmFtZXRlci5pbml0aWFsaXplciA9IGluaXRpYWxpemVyLi5wYXJlbnQgPSByZWFsUGFyYW1ldGVyOwogICAgICAgICAgdHlwZUluZmVycmVyPy5pbmZlclBhcmFtZXRlckluaXRpYWxpemVyKAogICAgICAgICAgICAgIHRoaXMsIGluaXRpYWxpemVyLCByZWFsUGFyYW1ldGVyLnR5cGUpOwogICAgICAgICAgbGlicmFyeS5sb2FkZXIudHJhbnNmb3JtUG9zdEluZmVyZW5jZSgKICAgICAgICAgICAgICByZWFsUGFyYW1ldGVyLCB0cmFuc2Zvcm1TZXRMaXRlcmFscywgdHJhbnNmb3JtQ29sbGVjdGlvbnMpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHR5cGVJbmZlcnJlcj8uaW5mZXJGdW5jdGlvbkJvZHkoCiAgICAgICAgdGhpcywgX2NvbXB1dGVSZXR1cm5UeXBlQ29udGV4dChtZW1iZXIpLCBhc3luY01vZGlmaWVyLCBib2R5KTsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgbGlicmFyeS5sb2FkZXIudHJhbnNmb3JtUG9zdEluZmVyZW5jZSgKICAgICAgICAgIGJvZHksIHRyYW5zZm9ybVNldExpdGVyYWxzLCB0cmFuc2Zvcm1Db2xsZWN0aW9ucyk7CiAgICB9CgogICAgLy8gRm9yIGFzeW5jLCBhc3luYyosIGFuZCBzeW5jKiBmdW5jdGlvbnMgd2l0aCBkZWNsYXJlZCByZXR1cm4gdHlwZXMsIHdlCiAgICAvLyBuZWVkIHRvIGRldGVybWluZSB3aGV0aGVyIHRob3NlIHR5cGVzIGFyZSB2YWxpZC4KICAgIC8vIFRPRE8oaGlsbGVyc3Ryb20pOiBjdXJyZW50bHksIHdlIG5lZWQgdG8gY2hlY2sgd2hldGhlciBbbGVnYWN5TW9kZV0gaXMKICAgIC8vIGVuYWJsZWQgZm9yIHR3byByZWFzb25zOgogICAgLy8gMSkgdGhlIFtpc1N1YnR5cGVPZl0gcHJlZGljYXRlIHByb2R1Y2VzIGZhbHNlLW5lZ2F0aXZlcyB3aGVuCiAgICAvLyBbbGVnYWN5TW9kZV0gaXMgZW5hYmxlZC4KICAgIC8vIDIpIHRoZSBtZW1iZXIgW3R5cGVFbnZpcm9ubWVudF0gbWlnaHQgYmUgbnVsbCB3aGVuIFtsZWdhY3lNb2RlXSBpcwogICAgLy8gZW5hYmxlZC4KICAgIC8vIFRoaXMgcGFydGljdWxhciBiZWhhdmlvdXIgY2FuIGJlIG9ic2VydmVkIHdoZW4gcnVubmluZyB0aGUgZmFzdGEgcGVyZgogICAgLy8gYmVuY2htYXJrcy4KICAgIGlmICghbGVnYWN5TW9kZSAmJiBidWlsZGVyLnJldHVyblR5cGUgIT0gbnVsbCkgewogICAgICBEYXJ0VHlwZSByZXR1cm5UeXBlID0gYnVpbGRlci5mdW5jdGlvbi5yZXR1cm5UeXBlOwogICAgICAvLyBXZSB1c2UgdGhlIHNhbWUgdHJpY2sgaW4gZWFjaCBjYXNlIGJlbG93LiBGb3IgZXhhbXBsZSB0byBkZWNpZGUgd2hldGhlcgogICAgICAvLyBGdXR1cmU8VD4gPDogW3JldHVyblR5cGVdIGZvciBldmVyeSBULCB3ZSByZWx5IG9uIEZ1dHVyZTxCb3Q+IGFuZAogICAgICAvLyB0cmFuc2l0aXZpdHkgb2YgdGhlIHN1YnR5cGluZyByZWxhdGlvbiBiZWNhdXNlIEZ1dHVyZTxCb3Q+IDw6IEZ1dHVyZTxUPgogICAgICAvLyBmb3IgZXZlcnkgVC4KCiAgICAgIC8vIFdlIHVzZSBbcHJvYmxlbSA9PSBudWxsXSB0byBzaWduYWwgc3VjY2Vzcy4KICAgICAgTWVzc2FnZSBwcm9ibGVtOwogICAgICBzd2l0Y2ggKGFzeW5jTW9kaWZpZXIpIHsKICAgICAgICBjYXNlIEFzeW5jTWFya2VyLkFzeW5jOgogICAgICAgICAgRGFydFR5cGUgZnV0dXJlQm90dG9tVHlwZSA9IGxpYnJhcnkubG9hZGVyLmZ1dHVyZU9mQm90dG9tOwogICAgICAgICAgaWYgKCF0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoZnV0dXJlQm90dG9tVHlwZSwgcmV0dXJuVHlwZSkpIHsKICAgICAgICAgICAgcHJvYmxlbSA9IGZhc3RhLm1lc3NhZ2VJbGxlZ2FsQXN5bmNSZXR1cm5UeXBlOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgQXN5bmNNYXJrZXIuQXN5bmNTdGFyOgogICAgICAgICAgRGFydFR5cGUgc3RyZWFtQm90dG9tVHlwZSA9IGxpYnJhcnkubG9hZGVyLnN0cmVhbU9mQm90dG9tOwogICAgICAgICAgaWYgKHJldHVyblR5cGUgaXMgVm9pZFR5cGUpIHsKICAgICAgICAgICAgcHJvYmxlbSA9IGZhc3RhLm1lc3NhZ2VJbGxlZ2FsQXN5bmNHZW5lcmF0b3JWb2lkUmV0dXJuVHlwZTsKICAgICAgICAgIH0gZWxzZSBpZiAoIXR5cGVFbnZpcm9ubWVudC5pc1N1YnR5cGVPZigKICAgICAgICAgICAgICBzdHJlYW1Cb3R0b21UeXBlLCByZXR1cm5UeXBlKSkgewogICAgICAgICAgICBwcm9ibGVtID0gZmFzdGEubWVzc2FnZUlsbGVnYWxBc3luY0dlbmVyYXRvclJldHVyblR5cGU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBBc3luY01hcmtlci5TeW5jU3RhcjoKICAgICAgICAgIERhcnRUeXBlIGl0ZXJhYmxlQm90dG9tVHlwZSA9IGxpYnJhcnkubG9hZGVyLml0ZXJhYmxlT2ZCb3R0b207CiAgICAgICAgICBpZiAocmV0dXJuVHlwZSBpcyBWb2lkVHlwZSkgewogICAgICAgICAgICBwcm9ibGVtID0gZmFzdGEubWVzc2FnZUlsbGVnYWxTeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGU7CiAgICAgICAgICB9IGVsc2UgaWYgKCF0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoCiAgICAgICAgICAgICAgaXRlcmFibGVCb3R0b21UeXBlLCByZXR1cm5UeXBlKSkgewogICAgICAgICAgICBwcm9ibGVtID0gZmFzdGEubWVzc2FnZUlsbGVnYWxTeW5jR2VuZXJhdG9yUmV0dXJuVHlwZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIEFzeW5jTWFya2VyLlN5bmM6CiAgICAgICAgICBicmVhazsgLy8gc2tpcAogICAgICAgIGNhc2UgQXN5bmNNYXJrZXIuU3luY1lpZWxkaW5nOgogICAgICAgICAgdW5leHBlY3RlZCgiYXN5bmMsIGFzeW5jKiwgc3luYywgb3Igc3luYyoiLCAiJGFzeW5jTW9kaWZpZXIiLAogICAgICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LCB1cmkpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIGlmIChwcm9ibGVtICE9IG51bGwpIHsKICAgICAgICAvLyBUT0RPKGhpbGxlcnN0cm9tKTogb25jZSB0eXBlcyBnZXQgYW5ub3RhdGVkIHdpdGggbG9jYXRpb24KICAgICAgICAvLyBpbmZvcm1hdGlvbiwgd2UgY2FuIGltcHJvdmUgdGhlIHF1YWxpdHkgb2YgdGhlIGVycm9yIG1lc3NhZ2UgYnkKICAgICAgICAvLyB1c2luZyB0aGUgb2Zmc2V0IG9mIFtyZXR1cm5UeXBlXSAoYW5kIHRoZSBsZW5ndGggb2YgaXRzIG5hbWUpLgogICAgICAgIGFkZFByb2JsZW0ocHJvYmxlbSwgbWVtYmVyLmNoYXJPZmZzZXQsIG1lbWJlci5uYW1lLmxlbmd0aCk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoYnVpbGRlci5raW5kID09IFByb2NlZHVyZUtpbmQuU2V0dGVyKSB7CiAgICAgIGlmIChmb3JtYWxzPy5wYXJhbWV0ZXJzID09IG51bGwgfHwKICAgICAgICAgIGZvcm1hbHMucGFyYW1ldGVycy5sZW5ndGggIT0gMSB8fAogICAgICAgICAgZm9ybWFscy5wYXJhbWV0ZXJzLnNpbmdsZS5pc09wdGlvbmFsKSB7CiAgICAgICAgaW50IGNoYXJPZmZzZXQgPSBmb3JtYWxzPy5jaGFyT2Zmc2V0ID8/CiAgICAgICAgICAgIGJvZHk/LmZpbGVPZmZzZXQgPz8KICAgICAgICAgICAgYnVpbGRlci50YXJnZXQuZmlsZU9mZnNldDsKICAgICAgICBpZiAoYm9keSA9PSBudWxsKSB7CiAgICAgICAgICBib2R5ID0gbmV3IEVtcHR5U3RhdGVtZW50KCkuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgICAgIH0KICAgICAgICBpZiAoYnVpbGRlci5mb3JtYWxzICE9IG51bGwpIHsKICAgICAgICAgIC8vIElsbGVnYWwgcGFyYW1ldGVycyB3ZXJlIHJlbW92ZWQgYnkgdGhlIGZ1bmN0aW9uIGJ1aWxkZXIuCiAgICAgICAgICAvLyBBZGQgdGhlbSBhcyBsb2NhbCB2YXJpYWJsZSB0byBwdXQgdGhlbSBpbiBzY29wZSBvZiB0aGUgYm9keS4KICAgICAgICAgIExpc3Q8U3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gPFN0YXRlbWVudD5bXTsKICAgICAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBwYXJhbWV0ZXIgaW4gYnVpbGRlci5mb3JtYWxzKSB7CiAgICAgICAgICAgIHN0YXRlbWVudHMuYWRkKHBhcmFtZXRlci50YXJnZXQpOwogICAgICAgICAgfQogICAgICAgICAgc3RhdGVtZW50cy5hZGQoYm9keSk7CiAgICAgICAgICBib2R5ID0gZm9yZXN0LmJsb2NrKG51bGwsIHN0YXRlbWVudHMsIG51bGwpLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgICAgICB9CiAgICAgICAgYm9keSA9IGZvcmVzdC5ibG9jaygKICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgPFN0YXRlbWVudD5bCiAgICAgICAgICAgICAgZm9yZXN0LmV4cHJlc3Npb25TdGF0ZW1lbnQoCiAgICAgICAgICAgICAgICAgIC8vIFRoaXMgZXJyb3IgaXMgYWRkZWQgYWZ0ZXIgdHlwZSBpbmZlcmVuY2UgaXMgZG9uZSwgc28gd2UKICAgICAgICAgICAgICAgICAgLy8gZG9uJ3QgbmVlZCB0byB3cmFwIGVycm9ycyBpbiBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQuCiAgICAgICAgICAgICAgICAgIGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VTZXR0ZXJXaXRoV3JvbmdOdW1iZXJPZkZvcm1hbHMsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgbm9MZW5ndGgpKSwKICAgICAgICAgICAgICAgICAgbnVsbCksCiAgICAgICAgICAgICAgYm9keSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgbnVsbCkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgICAgIH0KICAgIH0KICAgIC8vIE5vLXN1Y2gtbWV0aG9kIGZvcndhcmRlcnMgZ2V0IHRoZWlyIGJvZGllcyBpbmplY3RlZCBkdXJpbmcgb3V0bGluZQogICAgLy8gYnVpbGRpbmcsIHNvIHdlIHNob3VsZCBza2lwIHRoZW0gaGVyZS4KICAgIGJvb2wgaXNOb1N1Y2hNZXRob2RGb3J3YXJkZXIgPSAoYnVpbGRlci5mdW5jdGlvbi5wYXJlbnQgaXMgUHJvY2VkdXJlICYmCiAgICAgICAgKGJ1aWxkZXIuZnVuY3Rpb24ucGFyZW50IGFzIFByb2NlZHVyZSkuaXNOb1N1Y2hNZXRob2RGb3J3YXJkZXIpOwogICAgaWYgKCFidWlsZGVyLmlzRXh0ZXJuYWwgJiYgIWlzTm9TdWNoTWV0aG9kRm9yd2FyZGVyKSB7CiAgICAgIGJ1aWxkZXIuYm9keSA9IGJvZHk7CiAgICB9IGVsc2UgewogICAgICBpZiAoYm9keSAhPSBudWxsKSB7CiAgICAgICAgYnVpbGRlci5ib2R5ID0gbmV3IEJsb2NrKDxTdGF0ZW1lbnQ+WwogICAgICAgICAgbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnRKdWRnbWVudChkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgICAgICBidWlsZFByb2JsZW0oZmFzdGEubWVzc2FnZUV4dGVybmFsTWV0aG9kV2l0aEJvZHksIGJvZHkuZmlsZU9mZnNldCwKICAgICAgICAgICAgICAgICAgbm9MZW5ndGgpKSkKICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gYm9keS5maWxlT2Zmc2V0LAogICAgICAgICAgYm9keSwKICAgICAgICBdKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gYm9keS5maWxlT2Zmc2V0OwogICAgICB9CiAgICB9CiAgICBpZiAoYnVpbGRlciBpcyBDb25zdHJ1Y3RvckJ1aWxkZXIpIHsKICAgICAgZmluaXNoQ29uc3RydWN0b3IoYnVpbGRlciwgYXN5bmNNb2RpZmllcik7CiAgICB9IGVsc2UgaWYgKGJ1aWxkZXIgaXMgUHJvY2VkdXJlQnVpbGRlcikgewogICAgICBidWlsZGVyLmFzeW5jTW9kaWZpZXIgPSBhc3luY01vZGlmaWVyOwogICAgfSBlbHNlIHsKICAgICAgdW5oYW5kbGVkKCIke2J1aWxkZXIucnVudGltZVR5cGV9IiwgImZpbmlzaEZ1bmN0aW9uIiwgYnVpbGRlci5jaGFyT2Zmc2V0LAogICAgICAgICAgYnVpbGRlci5maWxlVXJpKTsKICAgIH0KCiAgICByZXNvbHZlUmVkaXJlY3RpbmdGYWN0b3J5VGFyZ2V0cygpOwogICAgZmluaXNoVmFyaWFibGVNZXRhZGF0YSgpOwogIH0KCiAgLy8vIEVuc3VyZSB0aGF0IHRoZSBjb250YWluaW5nIGxpYnJhcnkgb2YgdGhlIFttZW1iZXJdIGhhcyBiZWVuIGxvYWRlZC4KICAvLy8KICAvLy8gVGhpcyBpcyBmb3IgaW5zdGFuY2UgaW1wb3J0YW50IGZvciBsYXp5IGRpbGwgbGlicmFyeSBidWlsZGVycyB3aGVyZSB0aGlzCiAgLy8vIG1ldGhvZCBoYXMgdG8gYmUgY2FsbGVkIHRvIGVuc3VyZSB0aGF0CiAgLy8vIGEpIFRoZSBsaWJyYXJ5IGhhcyBiZWVuIGZ1bGx5IGxvYWRlZCAoYW5kIGZvciBpbnN0YW5jZSBhbnkgaW50ZXJuYWwKICAvLy8gICAgdHJhbnNmb3JtYXRpb24gbmVlZGVkIGhhcyBiZWVuIHBlcmZvcm1lZCk7IGFuZAogIC8vLyBiKSBUaGUgbGlicmFyeSBpcyBjb3JyZWN0bHkgbWFya2VkIGFzIGJlaW5nIHVzZWQgdG8gYWxsb3cgZm9yIHByb3BlcgogIC8vLyAgICAnZGVwZW5kZW5jeSBwcnVuaW5nJy4KICB2b2lkIGVuc3VyZUxvYWRlZChNZW1iZXIgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyID09IG51bGwpIHJldHVybjsKICAgIExpYnJhcnkgZW5zdXJlTGlicmFyeUxvYWRlZCA9IG1lbWJlci5lbmNsb3NpbmdMaWJyYXJ5OwogICAgTGlicmFyeUJ1aWxkZXIgYnVpbGRlciA9CiAgICAgICAgbGlicmFyeS5sb2FkZXIuYnVpbGRlcnNbZW5zdXJlTGlicmFyeUxvYWRlZC5pbXBvcnRVcmldID8/CiAgICAgICAgICAgIGxpYnJhcnkubG9hZGVyLnRhcmdldC5kaWxsVGFyZ2V0LmxvYWRlcgogICAgICAgICAgICAgICAgLmJ1aWxkZXJzW2Vuc3VyZUxpYnJhcnlMb2FkZWQuaW1wb3J0VXJpXTsKICAgIGlmIChidWlsZGVyIGlzIERpbGxMaWJyYXJ5QnVpbGRlcikgewogICAgICBidWlsZGVyLmVuc3VyZUxvYWRlZCgpOwogICAgfQogIH0KCiAgLy8vIENoZWNrIGlmIHRoZSBjb250YWluaW5nIGxpYnJhcnkgb2YgdGhlIFttZW1iZXJdIGhhcyBiZWVuIGxvYWRlZC4KICAvLy8KICAvLy8gVGhpcyBpcyBkZXNpZ25lZCBmb3IgdXNlIHdpdGggYXNzZXJ0cy4KICAvLy8gU2VlIFtlbnN1cmVMb2FkZWRdIGZvciBhIGRlc2NyaXB0aW9uIG9mIHdoYXQgJ2xvYWRlZCcgbWVhbnMgYW5kIHRoZSBpZGVhcwogIC8vLyBiZWhpbmQgdGhhdC4KICBib29sIGlzTG9hZGVkKE1lbWJlciBtZW1iZXIpIHsKICAgIGlmIChtZW1iZXIgPT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICBMaWJyYXJ5IGVuc3VyZUxpYnJhcnlMb2FkZWQgPSBtZW1iZXIuZW5jbG9zaW5nTGlicmFyeTsKICAgIExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgPQogICAgICAgIGxpYnJhcnkubG9hZGVyLmJ1aWxkZXJzW2Vuc3VyZUxpYnJhcnlMb2FkZWQuaW1wb3J0VXJpXSA/PwogICAgICAgICAgICBsaWJyYXJ5LmxvYWRlci50YXJnZXQuZGlsbFRhcmdldC5sb2FkZXIKICAgICAgICAgICAgICAgIC5idWlsZGVyc1tlbnN1cmVMaWJyYXJ5TG9hZGVkLmltcG9ydFVyaV07CiAgICBpZiAoYnVpbGRlciBpcyBEaWxsTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgcmV0dXJuIGJ1aWxkZXIuaXNCdWlsdEFuZE1hcmtlZDsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgdm9pZCByZXNvbHZlUmVkaXJlY3RpbmdGYWN0b3J5VGFyZ2V0cygpIHsKICAgIGZvciAoU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uIGluIHJlZGlyZWN0aW5nRmFjdG9yeUludm9jYXRpb25zKSB7CiAgICAgIC8vIElmIHRoZSBpbnZvY2F0aW9uIHdhcyBpbnZhbGlkLCBpdCBvciBpdHMgcGFyZW50IGhhcyBhbHJlYWR5IGJlZW4KICAgICAgLy8gZGVzdWdhcmVkIGludG8gYW4gZXhjZXB0aW9uIHRocm93aW5nIGV4cHJlc3Npb24uICBUaGVyZSBpcyBub3RoaW5nIHRvCiAgICAgIC8vIHJlc29sdmUgYW55bW9yZS4gIE5vdGUgdGhhdCBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgaW52b2NhdGlvbidzIHBhcmVudAogICAgICAvLyB3YXMgaW52YWxpZCwgdHlwZSBpbmZlcmVuY2Ugd29uJ3QgcmVhY2ggdGhlIGludm9jYXRpb24gbm9kZSBhbmQgd29uJ3QKICAgICAgLy8gc2V0IGl0cyBpbmZlcnJlZFR5cGUgZmllbGQuICBJZiB0eXBlIGluZmVyZW5jZSBpcyBkaXNhYmxlZCwgcmVhY2ggdG8KICAgICAgLy8gdGhlIG91dHRlcm1vc3QgcGFyZW50IHRvIGNoZWNrIGlmIHRoZSBub2RlIGlzIGEgZGVhZCBjb2RlLgogICAgICBpZiAoaW52b2NhdGlvbi5wYXJlbnQgPT0gbnVsbCkgY29udGludWU7CiAgICAgIGlmICh0eXBlSW5mZXJyZXIgIT0gbnVsbCkgewogICAgICAgIGlmIChpbnZvY2F0aW9uIGlzIEZhY3RvcnlDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudCAmJgogICAgICAgICAgICBpbnZvY2F0aW9uLmluZmVycmVkVHlwZSA9PSBudWxsKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgVHJlZU5vZGUgcGFyZW50ID0gaW52b2NhdGlvbi5wYXJlbnQ7CiAgICAgICAgd2hpbGUgKHBhcmVudCBpcyEgQ29tcG9uZW50ICYmIHBhcmVudCAhPSBudWxsKSBwYXJlbnQgPSBwYXJlbnQucGFyZW50OwogICAgICAgIGlmIChwYXJlbnQgPT0gbnVsbCkgY29udGludWU7CiAgICAgIH0KCiAgICAgIFByb2NlZHVyZSBpbml0aWFsVGFyZ2V0ID0gaW52b2NhdGlvbi50YXJnZXQ7CiAgICAgIEV4cHJlc3Npb24gcmVwbGFjZW1lbnROb2RlOwoKICAgICAgUmVkaXJlY3Rpb25UYXJnZXQgcmVkaXJlY3Rpb25UYXJnZXQgPQogICAgICAgICAgZ2V0UmVkaXJlY3Rpb25UYXJnZXQoaW5pdGlhbFRhcmdldCwgdGhpcywgbGVnYWN5TW9kZTogbGVnYWN5TW9kZSk7CiAgICAgIE1lbWJlciByZXNvbHZlZFRhcmdldCA9IHJlZGlyZWN0aW9uVGFyZ2V0Py50YXJnZXQ7CgogICAgICBpZiAocmVzb2x2ZWRUYXJnZXQgPT0gbnVsbCkgewogICAgICAgIFN0cmluZyBuYW1lID0gY29uc3RydWN0b3JOYW1lRm9yRGlhZ25vc3RpY3MoaW5pdGlhbFRhcmdldC5uYW1lLm5hbWUsCiAgICAgICAgICAgIGNsYXNzTmFtZTogaW5pdGlhbFRhcmdldC5lbmNsb3NpbmdDbGFzcy5uYW1lKTsKICAgICAgICAvLyBUT0RPKGRtaXRyeWFzKTogUmVwb3J0IHRoaXMgZXJyb3IgZWFybGllci4KICAgICAgICByZXBsYWNlbWVudE5vZGUgPSBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlQ3ljbGljUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgaW5pdGlhbFRhcmdldC5maWxlT2Zmc2V0LAogICAgICAgICAgICBuYW1lLmxlbmd0aCkpOwogICAgICB9IGVsc2UgaWYgKHJlc29sdmVkVGFyZ2V0IGlzIENvbnN0cnVjdG9yICYmCiAgICAgICAgICByZXNvbHZlZFRhcmdldC5lbmNsb3NpbmdDbGFzcy5pc0Fic3RyYWN0KSB7CiAgICAgICAgcmVwbGFjZW1lbnROb2RlID0gZXZhbHVhdGVBcmd1bWVudHNCZWZvcmUoCiAgICAgICAgICAgIGZvcmVzdC5hcmd1bWVudHMoaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbCwgbnVsbCwKICAgICAgICAgICAgICAgIHR5cGVzOiBpbnZvY2F0aW9uLmFyZ3VtZW50cy50eXBlcywKICAgICAgICAgICAgICAgIG5hbWVkOiBpbnZvY2F0aW9uLmFyZ3VtZW50cy5uYW1lZCksCiAgICAgICAgICAgIGJ1aWxkQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcigKICAgICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlQWJzdHJhY3RSZWRpcmVjdGVkQ2xhc3NJbnN0YW50aWF0aW9uCiAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMocmVzb2x2ZWRUYXJnZXQuZW5jbG9zaW5nQ2xhc3MubmFtZSksCiAgICAgICAgICAgICAgICByZXNvbHZlZFRhcmdldC5lbmNsb3NpbmdDbGFzcy5uYW1lLAogICAgICAgICAgICAgICAgaW5pdGlhbFRhcmdldC5maWxlT2Zmc2V0KSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSByZWRpcmVjdGluZ0ZhY3RvcnlCb2R5ID0KICAgICAgICAgICAgZ2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keShyZXNvbHZlZFRhcmdldCk7CiAgICAgICAgaWYgKHJlZGlyZWN0aW5nRmFjdG9yeUJvZHkgIT0gbnVsbCkgewogICAgICAgICAgLy8gSWYgdGhlIHJlZGlyZWN0aW9uIHRhcmdldCBpcyBpdHNlbGYgYSByZWRpcmVjdGluZyBmYWN0b3J5LCBpdCBtZWFucwogICAgICAgICAgLy8gdGhhdCBpdCBpcyB1bnJlc29sdmVkLgogICAgICAgICAgYXNzZXJ0KHJlZGlyZWN0aW5nRmFjdG9yeUJvZHkuaXNVbnJlc29sdmVkKTsKICAgICAgICAgIFN0cmluZyBlcnJvck5hbWUgPSByZWRpcmVjdGluZ0ZhY3RvcnlCb2R5LnVucmVzb2x2ZWROYW1lOwoKICAgICAgICAgIHJlcGxhY2VtZW50Tm9kZSA9IHRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgICAgICAgICAgZm9yZXN0LmxpdGVyYWxOdWxsKG51bGwpLi5maWxlT2Zmc2V0ID0gaW52b2NhdGlvbi5maWxlT2Zmc2V0LAogICAgICAgICAgICAgIGVycm9yTmFtZSwKICAgICAgICAgICAgICBmb3Jlc3QuYXJndW1lbnRzKGludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwsIG51bGwsCiAgICAgICAgICAgICAgICAgIHR5cGVzOiBpbnZvY2F0aW9uLmFyZ3VtZW50cy50eXBlcywKICAgICAgICAgICAgICAgICAgbmFtZWQ6IGludm9jYXRpb24uYXJndW1lbnRzLm5hbWVkKSwKICAgICAgICAgICAgICBpbml0aWFsVGFyZ2V0LmZpbGVPZmZzZXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgICAgICBpbml0aWFsVGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgICAgIGludm9jYXRpb24uYXJndW1lbnRzLnR5cGVzKTsKICAgICAgICAgIGludm9jYXRpb24uYXJndW1lbnRzLnR5cGVzLmNsZWFyKCk7CiAgICAgICAgICBpbnZvY2F0aW9uLmFyZ3VtZW50cy50eXBlcy5sZW5ndGggPQogICAgICAgICAgICAgIHJlZGlyZWN0aW9uVGFyZ2V0LnR5cGVBcmd1bWVudHMubGVuZ3RoOwogICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnZvY2F0aW9uLmFyZ3VtZW50cy50eXBlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpbnZvY2F0aW9uLmFyZ3VtZW50cy50eXBlc1tpXSA9CiAgICAgICAgICAgICAgICBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUocmVkaXJlY3Rpb25UYXJnZXQudHlwZUFyZ3VtZW50c1tpXSk7CiAgICAgICAgICB9CgogICAgICAgICAgcmVwbGFjZW1lbnROb2RlID0gYnVpbGRTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgICAgICAgIHJlc29sdmVkVGFyZ2V0LAogICAgICAgICAgICAgIGZvcmVzdC5hcmd1bWVudHMoaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbCwgbnVsbCwKICAgICAgICAgICAgICAgICAgdHlwZXM6IGludm9jYXRpb24uYXJndW1lbnRzLnR5cGVzLAogICAgICAgICAgICAgICAgICBuYW1lZDogaW52b2NhdGlvbi5hcmd1bWVudHMubmFtZWQpLAogICAgICAgICAgICAgIGNvbnN0bmVzczogaW52b2NhdGlvbi5pc0NvbnN0CiAgICAgICAgICAgICAgICAgID8gQ29uc3RuZXNzLmV4cGxpY2l0Q29uc3QKICAgICAgICAgICAgICAgICAgOiBDb25zdG5lc3MuZXhwbGljaXROZXcsCiAgICAgICAgICAgICAgY2hhck9mZnNldDogaW52b2NhdGlvbi5maWxlT2Zmc2V0KTsKICAgICAgICAgIC8vIFRPRE8oZG1pdHJ5YXMpOiBGaW5kIGEgYmV0dGVyIHdheSB0byB1bndyYXAKICAgICAgICAgIC8vIFtTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnRdIG9yIG5vdCB0byBidWlsZCBpdCBpbiB0aGUgZmlyc3QgcGxhY2UKICAgICAgICAgIC8vIHdoZW4gaXQncyBub3QgbmVlZGVkLgogICAgICAgICAgaWYgKHJlcGxhY2VtZW50Tm9kZSBpcyBzaGFkb3cuU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50KSB7CiAgICAgICAgICAgIHJlcGxhY2VtZW50Tm9kZSA9IGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKHJlcGxhY2VtZW50Tm9kZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICBpbnZvY2F0aW9uLnJlcGxhY2VXaXRoKHJlcGxhY2VtZW50Tm9kZSk7CiAgICB9CiAgICByZWRpcmVjdGluZ0ZhY3RvcnlJbnZvY2F0aW9ucy5jbGVhcigpOwogIH0KCiAgdm9pZCBmaW5pc2hWYXJpYWJsZU1ldGFkYXRhKCkgewogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXNXaXRoTWV0YWRhdGEgPQogICAgICAgIHRoaXMudmFyaWFibGVzV2l0aE1ldGFkYXRhOwogICAgdGhpcy52YXJpYWJsZXNXaXRoTWV0YWRhdGEgPSBudWxsOwogICAgTGlzdDxMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+PiBtdWx0aVZhcmlhYmxlc1dpdGhNZXRhZGF0YSA9CiAgICAgICAgdGhpcy5tdWx0aVZhcmlhYmxlc1dpdGhNZXRhZGF0YTsKICAgIHRoaXMubXVsdGlWYXJpYWJsZXNXaXRoTWV0YWRhdGEgPSBudWxsOwoKICAgIGlmICh2YXJpYWJsZXNXaXRoTWV0YWRhdGEgIT0gbnVsbCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcmlhYmxlc1dpdGhNZXRhZGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgIGluZmVyQW5ub3RhdGlvbnModmFyaWFibGVzV2l0aE1ldGFkYXRhW2ldLmFubm90YXRpb25zKTsKICAgICAgfQogICAgfQogICAgaWYgKG11bHRpVmFyaWFibGVzV2l0aE1ldGFkYXRhICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtdWx0aVZhcmlhYmxlc1dpdGhNZXRhZGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzID0gbXVsdGlWYXJpYWJsZXNXaXRoTWV0YWRhdGFbaV07CiAgICAgICAgTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9ucyA9IHZhcmlhYmxlcy5maXJzdC5hbm5vdGF0aW9uczsKICAgICAgICBpbmZlckFubm90YXRpb25zKGFubm90YXRpb25zKTsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IHZhcmlhYmxlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgY2xvbmVyID8/PSBuZXcgQ2xvbmVWaXNpdG9yKCk7CiAgICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gdmFyaWFibGVzW2ldOwogICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbm5vdGF0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YXJpYWJsZS5hZGRBbm5vdGF0aW9uKGNsb25lci5jbG9uZShhbm5vdGF0aW9uc1tpXSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxFeHByZXNzaW9uPiBmaW5pc2hNZXRhZGF0YShUcmVlTm9kZSBwYXJlbnQpIHsKICAgIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMgPSBwb3AoKTsKICAgIGluZmVyQW5ub3RhdGlvbnMoZXhwcmVzc2lvbnMpOwoKICAgIC8vIFRoZSBpbnZvY2F0aW9uIG9mIFtyZXNvbHZlUmVkaXJlY3RpbmdGYWN0b3J5VGFyZ2V0c10gYmVsb3cgbWF5IGNoYW5nZSB0aGUKICAgIC8vIHJvb3Qgbm9kZXMgb2YgdGhlIGFubm90YXRpb24gZXhwcmVzc2lvbnMuICBXZSBuZWVkIHRvIGhhdmUgYSBwYXJlbnQgb2YKICAgIC8vIHRoZSBhbm5vdGF0aW9uIG5vZGVzIGJlZm9yZSB0aGUgcmVzb2x1dGlvbiBpcyBwZXJmb3JtZWQsIHRvIGNvbGxlY3QgYW5kCiAgICAvLyByZXR1cm4gdGhlbSBsYXRlci4gIElmIFtwYXJlbnRdIGlzIG5vdCBwcm92aWRlZCwgW3RlbXBvcmFyeVBhcmVudF0gaXMKICAgIC8vIHVzZWQuCiAgICBMaXN0TGl0ZXJhbCB0ZW1wb3JhcnlQYXJlbnQ7CgogICAgaWYgKHBhcmVudCBpcyBDbGFzcykgewogICAgICBmb3IgKEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBleHByZXNzaW9ucykgewogICAgICAgIHBhcmVudC5hZGRBbm5vdGF0aW9uKGV4cHJlc3Npb24pOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHBhcmVudCBpcyBMaWJyYXJ5KSB7CiAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIGV4cHJlc3Npb25zKSB7CiAgICAgICAgcGFyZW50LmFkZEFubm90YXRpb24oZXhwcmVzc2lvbik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocGFyZW50IGlzIExpYnJhcnlEZXBlbmRlbmN5KSB7CiAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIGV4cHJlc3Npb25zKSB7CiAgICAgICAgcGFyZW50LmFkZEFubm90YXRpb24oZXhwcmVzc2lvbik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocGFyZW50IGlzIExpYnJhcnlQYXJ0KSB7CiAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIGV4cHJlc3Npb25zKSB7CiAgICAgICAgcGFyZW50LmFkZEFubm90YXRpb24oZXhwcmVzc2lvbik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocGFyZW50IGlzIE1lbWJlcikgewogICAgICBmb3IgKEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBleHByZXNzaW9ucykgewogICAgICAgIHBhcmVudC5hZGRBbm5vdGF0aW9uKGV4cHJlc3Npb24pOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHBhcmVudCBpcyBUeXBlZGVmKSB7CiAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIGV4cHJlc3Npb25zKSB7CiAgICAgICAgcGFyZW50LmFkZEFubm90YXRpb24oZXhwcmVzc2lvbik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocGFyZW50IGlzIFR5cGVQYXJhbWV0ZXIpIHsKICAgICAgZm9yIChFeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gZXhwcmVzc2lvbnMpIHsKICAgICAgICBwYXJlbnQuYWRkQW5ub3RhdGlvbihleHByZXNzaW9uKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChwYXJlbnQgaXMgVmFyaWFibGVEZWNsYXJhdGlvbikgewogICAgICBmb3IgKEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBleHByZXNzaW9ucykgewogICAgICAgIHBhcmVudC5hZGRBbm5vdGF0aW9uKGV4cHJlc3Npb24pOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0ZW1wb3JhcnlQYXJlbnQgPSBuZXcgTGlzdExpdGVyYWwoZXhwcmVzc2lvbnMpOwogICAgfQogICAgcmVzb2x2ZVJlZGlyZWN0aW5nRmFjdG9yeVRhcmdldHMoKTsKICAgIGZpbmlzaFZhcmlhYmxlTWV0YWRhdGEoKTsKICAgIHJldHVybiB0ZW1wb3JhcnlQYXJlbnQgIT0gbnVsbCA/IHRlbXBvcmFyeVBhcmVudC5leHByZXNzaW9ucyA6IGV4cHJlc3Npb25zOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBwYXJzZVNpbmdsZUV4cHJlc3Npb24oCiAgICAgIFBhcnNlciBwYXJzZXIsIFRva2VuIHRva2VuLCBGdW5jdGlvbk5vZGUgcGFyYW1ldGVycykgewogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlUGFyYW1ldGVyQnVpbGRlcnM7CiAgICBmb3IgKFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciBpbiBwYXJhbWV0ZXJzLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIHR5cGVQYXJhbWV0ZXJCdWlsZGVycyA/Pz0gPFR5cGVWYXJpYWJsZUJ1aWxkZXI+W107CiAgICAgIHR5cGVQYXJhbWV0ZXJCdWlsZGVycwogICAgICAgICAgLmFkZChuZXcgVHlwZVZhcmlhYmxlQnVpbGRlci5mcm9tS2VybmVsKHR5cGVQYXJhbWV0ZXIsIGxpYnJhcnkpKTsKICAgIH0KICAgIGVudGVyRnVuY3Rpb25UeXBlU2NvcGUodHlwZVBhcmFtZXRlckJ1aWxkZXJzKTsKCiAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMgPQogICAgICAgIHBhcmFtZXRlcnMucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoID09IDAKICAgICAgICAgICAgPyBudWxsCiAgICAgICAgICAgIDogbmV3IExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4oCiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtZXRlcnMucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBmb3JtYWwgPSBwYXJhbWV0ZXJzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICBmb3JtYWxzW2ldID0gbmV3IEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIoCiAgICAgICAgICBudWxsLCAwLCBudWxsLCBmb3JtYWwubmFtZSwgbGlicmFyeSwgZm9ybWFsLmZpbGVPZmZzZXQpCiAgICAgICAgLi5kZWNsYXJhdGlvbiA9IGZvcm1hbDsKICAgIH0KICAgIGVudGVyTG9jYWxTY29wZSgKICAgICAgICBudWxsLAogICAgICAgIG5ldyBGb3JtYWxQYXJhbWV0ZXJzKGZvcm1hbHMsIG9mZnNldEZvclRva2VuKHRva2VuKSwgbm9MZW5ndGgsIHVyaSkKICAgICAgICAgICAgLmNvbXB1dGVGb3JtYWxQYXJhbWV0ZXJTY29wZShzY29wZSwgbWVtYmVyLCB0aGlzKSk7CgogICAgdG9rZW4gPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKHBhcnNlci5zeW50aGV0aWNQcmV2aW91c1Rva2VuKHRva2VuKSk7CgogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcG9wRm9yVmFsdWUoKTsKICAgIFRva2VuIGVvZiA9IHRva2VuLm5leHQ7CgogICAgaWYgKCFlb2YuaXNFb2YpIHsKICAgICAgZXhwcmVzc2lvbiA9IHdyYXBJbkxvY2F0ZWRQcm9ibGVtKAogICAgICAgICAgZXhwcmVzc2lvbiwKICAgICAgICAgIGZhc3RhLm1lc3NhZ2VFeHBlY3RlZE9uZUV4cHJlc3Npb24KICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgZW9mLmNoYXJPZmZzZXQsIGVvZi5sZW5ndGgpKTsKICAgIH0KCiAgICBSZXR1cm5KdWRnbWVudCBmYWtlUmV0dXJuID0gbmV3IFJldHVybkp1ZGdtZW50KG51bGwsIGV4cHJlc3Npb24pOwoKICAgIHR5cGVJbmZlcnJlcj8uaW5mZXJGdW5jdGlvbkJvZHkoCiAgICAgICAgdGhpcywgY29uc3QgRHluYW1pY1R5cGUoKSwgQXN5bmNNYXJrZXIuU3luYywgZmFrZVJldHVybik7CgogICAgcmV0dXJuIGZha2VSZXR1cm4uZXhwcmVzc2lvbjsKICB9CgogIHZvaWQgcGFyc2VJbml0aWFsaXplcnMoVG9rZW4gdG9rZW4pIHsKICAgIFBhcnNlciBwYXJzZXIgPSBuZXcgUGFyc2VyKHRoaXMpOwogICAgaWYgKCF0b2tlbi5pc0VvZikgewogICAgICB0b2tlbiA9IHBhcnNlci5wYXJzZUluaXRpYWxpemVycyh0b2tlbik7CiAgICAgIGNoZWNrRW1wdHkodG9rZW4uY2hhck9mZnNldCk7CiAgICB9IGVsc2UgewogICAgICBoYW5kbGVOb0luaXRpYWxpemVycygpOwogICAgfQogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZUZpZWxkSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIFBhcnNlciBwYXJzZXIgPSBuZXcgUGFyc2VyKHRoaXMpOwogICAgdG9rZW4gPSBwYXJzZXIucGFyc2VFeHByZXNzaW9uKHBhcnNlci5zeW50aGV0aWNQcmV2aW91c1Rva2VuKHRva2VuKSk7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgY2hlY2tFbXB0eSh0b2tlbi5jaGFyT2Zmc2V0KTsKICAgIHJldHVybiBleHByZXNzaW9uOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZUFubm90YXRpb24oVG9rZW4gdG9rZW4pIHsKICAgIFBhcnNlciBwYXJzZXIgPSBuZXcgUGFyc2VyKHRoaXMpOwogICAgdG9rZW4gPSBwYXJzZXIucGFyc2VNZXRhZGF0YShwYXJzZXIuc3ludGhldGljUHJldmlvdXNUb2tlbih0b2tlbikpOwogICAgRXhwcmVzc2lvbiBhbm5vdGF0aW9uID0gcG9wKCk7CiAgICBjaGVja0VtcHR5KHRva2VuLmNoYXJPZmZzZXQpOwogICAgcmV0dXJuIGFubm90YXRpb247CiAgfQoKICB2b2lkIGZpbmlzaENvbnN0cnVjdG9yKAogICAgICBDb25zdHJ1Y3RvckJ1aWxkZXIgYnVpbGRlciwgQXN5bmNNYXJrZXIgYXN5bmNNb2RpZmllcikgewogICAgLy8vIFF1b3RlcyBiZWxvdyBhcmUgZnJvbSBbRGFydCBQcm9ncmFtbWluZyBMYW5ndWFnZSBTcGVjaWZpY2F0aW9uLCA0dGgKICAgIC8vLyBFZGl0aW9uXSgKICAgIC8vLyBodHRwczovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvcHVibGljYXRpb25zL2ZpbGVzL0VDTUEtU1QvRUNNQS00MDgucGRmKS4KICAgIGFzc2VydChidWlsZGVyID09IG1lbWJlcik7CiAgICBDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IGJ1aWxkZXIuY29uc3RydWN0b3I7CiAgICBpZiAoYXN5bmNNb2RpZmllciAhPSBBc3luY01hcmtlci5TeW5jKSB7CiAgICAgIC8vIFRPRE8oYWhlKTogQ2hhbmdlIHRoaXMgdG8gYSBudWxsIGNoZWNrLgogICAgICBpbnQgb2Zmc2V0ID0gYnVpbGRlci5ib2R5Py5maWxlT2Zmc2V0ID8/IGJ1aWxkZXIuY2hhck9mZnNldDsKICAgICAgY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLmFkZChidWlsZEludmFsaWRJbml0aWFsaXplcigKICAgICAgICAgIGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgICAgICAgIGJ1aWxkUHJvYmxlbShmYXN0YS5tZXNzYWdlQ29uc3RydWN0b3JOb3RTeW5jLCBvZmZzZXQsIG5vTGVuZ3RoKSksCiAgICAgICAgICBvZmZzZXQpKTsKICAgIH0KICAgIGlmIChuZWVkc0ltcGxpY2l0U3VwZXJJbml0aWFsaXplcikgewogICAgICAvLy8gPklmIG5vIHN1cGVyaW5pdGlhbGl6ZXIgaXMgcHJvdmlkZWQsIGFuIGltcGxpY2l0IHN1cGVyaW5pdGlhbGl6ZXIKICAgICAgLy8vID5vZiB0aGUgZm9ybSBzdXBlcigpIGlzIGFkZGVkIGF0IHRoZSBlbmQgb2Yga+KAmXMgaW5pdGlhbGl6ZXIgbGlzdCwKICAgICAgLy8vID51bmxlc3MgdGhlIGVuY2xvc2luZyBjbGFzcyBpcyBjbGFzcyBPYmplY3QuCiAgICAgIENvbnN0cnVjdG9yIHN1cGVyVGFyZ2V0ID0gbG9va3VwQ29uc3RydWN0b3IoZW1wdHlOYW1lLCBpc1N1cGVyOiB0cnVlKTsKICAgICAgSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXI7CiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHMgPSBmb3Jlc3QuYXJndW1lbnRzRW1wdHkobm9Mb2NhdGlvbik7CiAgICAgIGlmIChzdXBlclRhcmdldCA9PSBudWxsIHx8CiAgICAgICAgICBjaGVja0FyZ3VtZW50c0ZvckZ1bmN0aW9uKHN1cGVyVGFyZ2V0LmZ1bmN0aW9uLCBhcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuY2hhck9mZnNldCwgY29uc3QgPFR5cGVQYXJhbWV0ZXI+W10pICE9CiAgICAgICAgICAgICAgbnVsbCkgewogICAgICAgIFN0cmluZyBzdXBlcmNsYXNzID0gY2xhc3NCdWlsZGVyLnN1cGVydHlwZS5mdWxsTmFtZUZvckVycm9yczsKICAgICAgICBpbnQgbGVuZ3RoID0gY29uc3RydWN0b3IubmFtZS5uYW1lLmxlbmd0aDsKICAgICAgICBpZiAobGVuZ3RoID09IDApIHsKICAgICAgICAgIGxlbmd0aCA9IChjb25zdHJ1Y3Rvci5wYXJlbnQgYXMgQ2xhc3MpLm5hbWUubGVuZ3RoOwogICAgICAgIH0KICAgICAgICBpbml0aWFsaXplciA9IGJ1aWxkSW52YWxpZEluaXRpYWxpemVyKAogICAgICAgICAgICBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3RvcgogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHN1cGVyY2xhc3MpLAogICAgICAgICAgICAgICAgYnVpbGRlci5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgbGVuZ3RoKSksCiAgICAgICAgICAgIGJ1aWxkZXIuY2hhck9mZnNldCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5pdGlhbGl6ZXIgPSBidWlsZFN1cGVySW5pdGlhbGl6ZXIoCiAgICAgICAgICAgIHRydWUsIHN1cGVyVGFyZ2V0LCBhcmd1bWVudHMsIGJ1aWxkZXIuY2hhck9mZnNldCk7CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLmFkZChpbml0aWFsaXplcik7CiAgICB9CiAgICBzZXRQYXJlbnRzKGNvbnN0cnVjdG9yLmluaXRpYWxpemVycywgY29uc3RydWN0b3IpOwogICAgbGlicmFyeS5sb2FkZXIudHJhbnNmb3JtTGlzdFBvc3RJbmZlcmVuY2UoCiAgICAgICAgY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLCB0cmFuc2Zvcm1TZXRMaXRlcmFscywgdHJhbnNmb3JtQ29sbGVjdGlvbnMpOwogICAgaWYgKGNvbnN0cnVjdG9yLmZ1bmN0aW9uLmJvZHkgPT0gbnVsbCkgewogICAgICAvLy8gPklmIGEgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3RvciBjIGlzIG5vdCBhIHJlZGlyZWN0aW5nIGNvbnN0cnVjdG9yCiAgICAgIC8vLyA+YW5kIG5vIGJvZHkgaXMgcHJvdmlkZWQsIHRoZW4gYyBpbXBsaWNpdGx5IGhhcyBhbiBlbXB0eSBib2R5IHt9LgogICAgICAvLy8gV2UgdXNlIGFuIGVtcHR5IHN0YXRlbWVudCBpbnN0ZWFkLgogICAgICBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5ib2R5ID0gbmV3IEVtcHR5U3RhdGVtZW50KCk7CiAgICAgIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLmJvZHkucGFyZW50ID0gY29uc3RydWN0b3IuZnVuY3Rpb247CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUV4cHJlc3Npb25TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkV4cHJlc3Npb25TdGF0ZW1lbnQiKTsKICAgIHB1c2goZm9yZXN0LmV4cHJlc3Npb25TdGF0ZW1lbnQocG9wRm9yRWZmZWN0KCksIHRva2VuKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEFyZ3VtZW50cyhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJBcmd1bWVudHMiKTsKICAgIExpc3Q8T2JqZWN0PiBhcmd1bWVudHMgPSBjb3VudCA9PSAwCiAgICAgICAgPyA8T2JqZWN0PltdCiAgICAgICAgOiBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxPYmplY3Q+KCkucG9wKHN0YWNrLCBjb3VudCk7CiAgICBpZiAoYXJndW1lbnRzID09IG51bGwpIHsKICAgICAgcHVzaChuZXcgUGFyc2VyUmVjb3ZlcnkoYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0KSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGludCBmaXJzdE5hbWVkQXJndW1lbnRJbmRleCA9IGFyZ3VtZW50cy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBPYmplY3Qgbm9kZSA9IGFyZ3VtZW50c1tpXTsKICAgICAgaWYgKG5vZGUgaXMgTmFtZWRFeHByZXNzaW9uKSB7CiAgICAgICAgZmlyc3ROYW1lZEFyZ3VtZW50SW5kZXggPQogICAgICAgICAgICBpIDwgZmlyc3ROYW1lZEFyZ3VtZW50SW5kZXggPyBpIDogZmlyc3ROYW1lZEFyZ3VtZW50SW5kZXg7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgRXhwcmVzc2lvbiBhcmd1bWVudCA9IHRvVmFsdWUobm9kZSk7CiAgICAgICAgYXJndW1lbnRzW2ldID0gYXJndW1lbnQ7CiAgICAgICAgaWYgKGkgPiBmaXJzdE5hbWVkQXJndW1lbnRJbmRleCkgewogICAgICAgICAgYXJndW1lbnRzW2ldID0gbmV3IE5hbWVkRXhwcmVzc2lvbigKICAgICAgICAgICAgICAiIyRpIiwKICAgICAgICAgICAgICBidWlsZFByb2JsZW0oZmFzdGEubWVzc2FnZUV4cGVjdGVkTmFtZWRBcmd1bWVudCwKICAgICAgICAgICAgICAgICAgZm9yZXN0LnJlYWRPZmZzZXQoYXJndW1lbnQpLCBub0xlbmd0aCkpCiAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGJlZ2luVG9rZW4uY2hhck9mZnNldDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChmaXJzdE5hbWVkQXJndW1lbnRJbmRleCA8IGFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgTGlzdDxFeHByZXNzaW9uPiBwb3NpdGlvbmFsID0gbmV3IExpc3Q8RXhwcmVzc2lvbj4uZnJvbSgKICAgICAgICAgIGFyZ3VtZW50cy5nZXRSYW5nZSgwLCBmaXJzdE5hbWVkQXJndW1lbnRJbmRleCkpOwogICAgICBMaXN0PE5hbWVkRXhwcmVzc2lvbj4gbmFtZWQgPSBuZXcgTGlzdDxOYW1lZEV4cHJlc3Npb24+LmZyb20oCiAgICAgICAgICBhcmd1bWVudHMuZ2V0UmFuZ2UoZmlyc3ROYW1lZEFyZ3VtZW50SW5kZXgsIGFyZ3VtZW50cy5sZW5ndGgpKTsKICAgICAgcHVzaChmb3Jlc3QuYXJndW1lbnRzKHBvc2l0aW9uYWwsIGJlZ2luVG9rZW4sIG5hbWVkOiBuYW1lZCkpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhrbWlsbGlraW4pOiBGaW5kIGEgd2F5IHRvIGF2b2lkIGFsbG9jYXRpbmcgYSBzZWNvbmQgbGlzdCBpbiB0aGUKICAgICAgLy8gY2FzZSB3aGVyZSB0aGVyZSB3ZXJlIG5vIG5hbWVkIGFyZ3VtZW50cywgd2hpY2ggaXMgYSBjb21tb24gb25lLgogICAgICBwdXNoKGZvcmVzdC5hcmd1bWVudHMobmV3IExpc3Q8RXhwcmVzc2lvbj4uZnJvbShhcmd1bWVudHMpLCBiZWdpblRva2VuKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVBhcmVudGhlc2l6ZWRDb25kaXRpb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlBhcmVudGhlc2l6ZWRDb25kaXRpb24iKTsKICAgIHB1c2goZm9yZXN0LnBhcmVudGhlc2l6ZWRDb25kaXRpb24odG9rZW4sIHBvcEZvclZhbHVlKCksIHRva2VuLmVuZEdyb3VwKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiIpOwogICAgRXhwcmVzc2lvbiB2YWx1ZSA9IHBvcEZvclZhbHVlKCk7CiAgICBpZiAodmFsdWUgaXMgU2hhZG93TGFyZ2VJbnRMaXRlcmFsKSB7CiAgICAgIC8vIFdlIG5lZWQgdG8ga25vdyB0aGF0IHRoZSBleHByZXNzaW9uIHdhcyBwYXJlbnRoZXNpemVkIGJlY2F1c2Ugd2Ugd2lsbAogICAgICAvLyB0cmVhdCAtbiBkaWZmZXJlbnRseSBmcm9tIC0obikuICBJZiB0aGUgZXhwcmVzc2lvbiBvY2N1cnMgaW4gYSBkb3VibGUKICAgICAgLy8gY29udGV4dCwgLW4gaXMgYSBkb3VibGUgbGl0ZXJhbCBhbmQgLShuKSBpcyBhbiBhcHBsaWNhdGlvbiBvZiB1bmFyeS0gdG8KICAgICAgLy8gYW4gaW50ZWdlciBsaXRlcmFsLiAgQW5kIGluIGFueSBvdGhlciBjb250ZXh0LCAnLScgaXMgcGFydCBvZiB0aGUKICAgICAgLy8gc3ludGF4IG9mIC1uLCBpLmUuLCAtOTIyMzM3MjAzNjg1NDc3NTgwOCBpcyBPSyBhbmQgaXQgaXMgdGhlIG1pbmltdW0KICAgICAgLy8gNjQtYml0IGludGVnZXIsIGFuZCAnLScgaXMgYW4gYXBwbGljYXRpb24gb2YgdW5hcnktIGluIC0obiksIGkuZS4sCiAgICAgIC8vIC0oOTIyMzM3MjAzNjg1NDc3NTgwOCkgaXMgYW4gZXJyb3IgYmVjYXVzZSB0aGUgbGl0ZXJhbCBkb2VzIG5vdCBmaXQgaW4KICAgICAgLy8gNjQtYml0cy4KICAgICAgcHVzaCh2YWx1ZS4uaXNQYXJlbnRoZXNpemVkID0gdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKG5ldyBQYXJlbnRoZXNpemVkRXhwcmVzc2lvbkdlbmVyYXRvcih0aGlzLCB0b2tlbi5lbmRHcm91cCwgdmFsdWUpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU2VuZChUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgYXNzZXJ0KGNoZWNrU3RhdGUoYmVnaW5Ub2tlbiwgWwogICAgICBWYWx1ZUtpbmQuQXJndW1lbnRzT3JOdWxsLAogICAgICBWYWx1ZUtpbmQuVHlwZUFyZ3VtZW50c09yTnVsbCwKICAgICAgdW5pb25PZktpbmRzKFsKICAgICAgICBWYWx1ZUtpbmQuRXhwcmVzc2lvbiwKICAgICAgICBWYWx1ZUtpbmQuR2VuZXJhdG9yLAogICAgICAgIFZhbHVlS2luZC5JZGVudGlmaWVyLAogICAgICAgIFZhbHVlS2luZC5QYXJzZXJSZWNvdmVyeSwKICAgICAgICBWYWx1ZUtpbmQuUHJvYmxlbUJ1aWxkZXIKICAgICAgXSkKICAgIF0pKTsKICAgIGRlYnVnRXZlbnQoIlNlbmQiKTsKICAgIEFyZ3VtZW50cyBhcmd1bWVudHMgPSBwb3AoKTsKICAgIExpc3Q8VW5yZXNvbHZlZFR5cGU+IHR5cGVBcmd1bWVudHMgPSBwb3AoKTsKICAgIE9iamVjdCByZWNlaXZlciA9IHBvcCgpOwogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsICYmIHR5cGVBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhc3NlcnQoZm9yZXN0LmFyZ3VtZW50c1R5cGVBcmd1bWVudHMoYXJndW1lbnRzKS5pc0VtcHR5KTsKICAgICAgZm9yZXN0LmFyZ3VtZW50c1NldFR5cGVBcmd1bWVudHMoCiAgICAgICAgICBhcmd1bWVudHMsIGJ1aWxkRGFydFR5cGVBcmd1bWVudHModHlwZUFyZ3VtZW50cykpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KHR5cGVBcmd1bWVudHMgPT0gbnVsbCk7CiAgICB9CiAgICBpZiAocmVjZWl2ZXIgaXMgSWRlbnRpZmllcikgewogICAgICBOYW1lIG5hbWUgPSBuZXcgTmFtZShyZWNlaXZlci5uYW1lLCBsaWJyYXJ5Lm5hbWVPcmlnaW4pOwogICAgICBpZiAoYXJndW1lbnRzID09IG51bGwpIHsKICAgICAgICBwdXNoKG5ldyBJbmNvbXBsZXRlUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IodGhpcywgYmVnaW5Ub2tlbiwgbmFtZSkpOwogICAgICB9IGVsc2UgewogICAgICAgIHB1c2gobmV3IFNlbmRBY2Nlc3NHZW5lcmF0b3IoCiAgICAgICAgICAgIHRoaXMsIGJlZ2luVG9rZW4sIG5hbWUsIGZvcmVzdC5jYXN0QXJndW1lbnRzKGFyZ3VtZW50cykpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChhcmd1bWVudHMgPT0gbnVsbCkgewogICAgICBwdXNoKHJlY2VpdmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2goZmluaXNoU2VuZChyZWNlaXZlciwgYXJndW1lbnRzLCBiZWdpblRva2VuLmNoYXJPZmZzZXQpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGZpbmlzaFNlbmQoT2JqZWN0IHJlY2VpdmVyLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgY2hhck9mZnNldCkgewogICAgaWYgKHJlY2VpdmVyIGlzIEdlbmVyYXRvcikgewogICAgICByZXR1cm4gcmVjZWl2ZXIuZG9JbnZvY2F0aW9uKGNoYXJPZmZzZXQsIGFyZ3VtZW50cyk7CiAgICB9IGVsc2UgaWYgKHJlY2VpdmVyIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHJldHVybiBuZXcgUGFyc2VyRXJyb3JHZW5lcmF0b3IodGhpcywgbnVsbCwgZmFzdGEubWVzc2FnZVN5bnRoZXRpY1Rva2VuKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBidWlsZE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgICB0b1ZhbHVlKHJlY2VpdmVyKSwgY2FsbE5hbWUsIGFyZ3VtZW50cywgY2hhck9mZnNldCwKICAgICAgICAgIGlzSW1wbGljaXRDYWxsOiB0cnVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5DYXNjYWRlKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkNhc2NhZGUiKTsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBvcEZvclZhbHVlKCk7CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBDYXNjYWRlSnVkZ21lbnQpIHsKICAgICAgcHVzaChleHByZXNzaW9uKTsKICAgICAgcHVzaChuZXcgVmFyaWFibGVVc2VHZW5lcmF0b3IodGhpcywgdG9rZW4sIGV4cHJlc3Npb24udmFyaWFibGUpKTsKICAgICAgZXhwcmVzc2lvbi5leHRlbmQoKTsKICAgIH0gZWxzZSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LmZvclZhbHVlKAogICAgICAgICAgZXhwcmVzc2lvbiwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gZXhwcmVzc2lvbi5maWxlT2Zmc2V0OwogICAgICBwdXNoKG5ldyBDYXNjYWRlSnVkZ21lbnQodmFyaWFibGUpLi5maWxlT2Zmc2V0ID0gZXhwcmVzc2lvbi5maWxlT2Zmc2V0KTsKICAgICAgcHVzaChuZXcgVmFyaWFibGVVc2VHZW5lcmF0b3IodGhpcywgdG9rZW4sIHZhcmlhYmxlKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENhc2NhZGUoKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRDYXNjYWRlIik7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwb3BGb3JFZmZlY3QoKTsKICAgIENhc2NhZGVKdWRnbWVudCBjYXNjYWRlUmVjZWl2ZXIgPSBwb3AoKTsKICAgIGNhc2NhZGVSZWNlaXZlci5maW5hbGl6ZShleHByZXNzaW9uKTsKICAgIHB1c2goY2FzY2FkZVJlY2VpdmVyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5DYXNlRXhwcmVzc2lvbihUb2tlbiBjYXNlS2V5d29yZCkgewogICAgZGVidWdFdmVudCgiYmVnaW5DYXNlRXhwcmVzc2lvbiIpOwogICAgc3VwZXIucHVzaChjb25zdGFudENvbnRleHQpOwogICAgY29uc3RhbnRDb250ZXh0ID0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDYXNlRXhwcmVzc2lvbihUb2tlbiBjb2xvbikgewogICAgZGVidWdFdmVudCgiZW5kQ2FzZUV4cHJlc3Npb24iKTsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBvcEZvclZhbHVlKCk7CiAgICBjb25zdGFudENvbnRleHQgPSBwb3AoKTsKICAgIHN1cGVyLnB1c2goZXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQmluYXJ5RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgaWYgKG9wdGlvbmFsKCImJiIsIHRva2VuKSB8fCBvcHRpb25hbCgifHwiLCB0b2tlbikpIHsKICAgICAgRXhwcmVzc2lvbiBsaHMgPSBwb3BGb3JWYWx1ZSgpOwogICAgICB0eXBlUHJvbW90ZXI/LmVudGVyTG9naWNhbEV4cHJlc3Npb24obGhzLCB0b2tlbi5zdHJpbmdWYWx1ZSk7CiAgICAgIHB1c2gobGhzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQmluYXJ5RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiQmluYXJ5RXhwcmVzc2lvbiIpOwogICAgaWYgKG9wdGlvbmFsKCIuIiwgdG9rZW4pIHx8IG9wdGlvbmFsKCIuLiIsIHRva2VuKSkgewogICAgICByZXR1cm4gZG9Eb3RPckNhc2NhZGVFeHByZXNzaW9uKHRva2VuKTsKICAgIH0KICAgIGlmIChvcHRpb25hbCgiJiYiLCB0b2tlbikgfHwgb3B0aW9uYWwoInx8IiwgdG9rZW4pKSB7CiAgICAgIHJldHVybiBkb0xvZ2ljYWxFeHByZXNzaW9uKHRva2VuKTsKICAgIH0KICAgIGlmIChvcHRpb25hbCgiPz8iLCB0b2tlbikpIHJldHVybiBkb0lmTnVsbCh0b2tlbik7CiAgICBpZiAob3B0aW9uYWwoIj8uIiwgdG9rZW4pKSByZXR1cm4gZG9JZk5vdE51bGwodG9rZW4pOwogICAgRXhwcmVzc2lvbiBhcmd1bWVudCA9IHBvcEZvclZhbHVlKCk7CiAgICBPYmplY3QgcmVjZWl2ZXIgPSBwb3AoKTsKICAgIGJvb2wgaXNTdXBlciA9IGZhbHNlOwogICAgaWYgKHJlY2VpdmVyIGlzIFRoaXNBY2Nlc3NHZW5lcmF0b3IgJiYgcmVjZWl2ZXIuaXNTdXBlcikgewogICAgICBUaGlzQWNjZXNzR2VuZXJhdG9yIHRoaXNBY2Nlc3NvclJlY2VpdmVyID0gcmVjZWl2ZXI7CiAgICAgIGlzU3VwZXIgPSB0cnVlOwogICAgICByZWNlaXZlciA9IGZvcmVzdC50aGlzRXhwcmVzc2lvbih0aGlzQWNjZXNzb3JSZWNlaXZlci50b2tlbik7CiAgICB9CiAgICBwdXNoKGJ1aWxkQmluYXJ5T3BlcmF0b3IodG9WYWx1ZShyZWNlaXZlciksIHRva2VuLCBhcmd1bWVudCwgaXNTdXBlcikpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZEJpbmFyeU9wZXJhdG9yKAogICAgICBFeHByZXNzaW9uIGEsIFRva2VuIHRva2VuLCBFeHByZXNzaW9uIGIsIGJvb2wgaXNTdXBlcikgewogICAgYm9vbCBuZWdhdGUgPSBmYWxzZTsKICAgIFN0cmluZyBvcGVyYXRvciA9IHRva2VuLnN0cmluZ1ZhbHVlOwogICAgaWYgKGlkZW50aWNhbCgiIT0iLCBvcGVyYXRvcikpIHsKICAgICAgb3BlcmF0b3IgPSAiPT0iOwogICAgICBuZWdhdGUgPSB0cnVlOwogICAgfQogICAgaWYgKCFpc0JpbmFyeU9wZXJhdG9yKG9wZXJhdG9yKSAmJiAhaXNNaW51c09wZXJhdG9yKG9wZXJhdG9yKSkgewogICAgICBpZiAoaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3Iob3BlcmF0b3IpKSB7CiAgICAgICAgcmV0dXJuIGJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVOb3RCaW5hcnlPcGVyYXRvci53aXRoQXJndW1lbnRzKHRva2VuKSwKICAgICAgICAgICAgdG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgICAgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gYnVpbGRQcm9ibGVtKGZhc3RhLnRlbXBsYXRlSW52YWxpZE9wZXJhdG9yLndpdGhBcmd1bWVudHModG9rZW4pLAogICAgICAgICAgICB0b2tlbi5jaGFyT2Zmc2V0LCB0b2tlbi5sZW5ndGgpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBFeHByZXNzaW9uIHJlc3VsdCA9IGJ1aWxkTWV0aG9kSW52b2NhdGlvbihhLCBuZXcgTmFtZShvcGVyYXRvciksCiAgICAgICAgICBmb3Jlc3QuYXJndW1lbnRzKDxFeHByZXNzaW9uPltiXSwgbm9Mb2NhdGlvbiksIHRva2VuLmNoYXJPZmZzZXQsCiAgICAgICAgICAvLyBUaGlzICpjb3VsZCogYmUgYSBjb25zdGFudCBleHByZXNzaW9uLCB3ZSBjYW4ndCBrbm93IHdpdGhvdXQKICAgICAgICAgIC8vIGV2YWx1YXRpbmcgW2FdIGFuZCBbYl0uCiAgICAgICAgICBpc0NvbnN0YW50RXhwcmVzc2lvbjogIWlzU3VwZXIsCiAgICAgICAgICBpc1N1cGVyOiBpc1N1cGVyKTsKICAgICAgcmV0dXJuIG5lZ2F0ZSA/IGZvcmVzdC5ub3RFeHByZXNzaW9uKHJlc3VsdCwgbnVsbCwgdHJ1ZSkgOiByZXN1bHQ7CiAgICB9CiAgfQoKICB2b2lkIGRvTG9naWNhbEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIEV4cHJlc3Npb24gYXJndW1lbnQgPSBwb3BGb3JWYWx1ZSgpOwogICAgRXhwcmVzc2lvbiByZWNlaXZlciA9IHBvcCgpOwogICAgRXhwcmVzc2lvbiBsb2dpY2FsRXhwcmVzc2lvbiA9CiAgICAgICAgZm9yZXN0LmxvZ2ljYWxFeHByZXNzaW9uKHJlY2VpdmVyLCB0b2tlbiwgYXJndW1lbnQpOwogICAgdHlwZVByb21vdGVyPy5leGl0TG9naWNhbEV4cHJlc3Npb24oYXJndW1lbnQsIGxvZ2ljYWxFeHByZXNzaW9uKTsKICAgIHB1c2gobG9naWNhbEV4cHJlc3Npb24pOwogIH0KCiAgLy8vIEhhbmRsZSBgYSA/PyBiYC4KICB2b2lkIGRvSWZOdWxsKFRva2VuIHRva2VuKSB7CiAgICBFeHByZXNzaW9uIGIgPSBwb3BGb3JWYWx1ZSgpOwogICAgRXhwcmVzc2lvbiBhID0gcG9wRm9yVmFsdWUoKTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShhKTsKICAgIHB1c2gobmV3IElmTnVsbEp1ZGdtZW50KAogICAgICAgIHZhcmlhYmxlLAogICAgICAgIGZvcmVzdC5jb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgICAgICAgIGJ1aWxkSXNOdWxsKG5ldyBWYXJpYWJsZUdldCh2YXJpYWJsZSksIG9mZnNldEZvclRva2VuKHRva2VuKSwgdGhpcyksCiAgICAgICAgICAgIHRva2VuLAogICAgICAgICAgICBiLAogICAgICAgICAgICBudWxsLAogICAgICAgICAgICBuZXcgVmFyaWFibGVHZXQodmFyaWFibGUpKSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pKTsKICB9CgogIC8vLyBIYW5kbGUgYGE/LmIoLi4uKWAuCiAgdm9pZCBkb0lmTm90TnVsbChUb2tlbiB0b2tlbikgewogICAgT2JqZWN0IHNlbmQgPSBwb3AoKTsKICAgIGlmIChzZW5kIGlzIEluY29tcGxldGVTZW5kR2VuZXJhdG9yKSB7CiAgICAgIHB1c2goc2VuZC53aXRoUmVjZWl2ZXIocG9wKCksIHRva2VuLmNoYXJPZmZzZXQsIGlzTnVsbEF3YXJlOiB0cnVlKSk7CiAgICB9IGVsc2UgewogICAgICBwb3AoKTsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICBwdXNoKGJ1aWxkUHJvYmxlbShmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKHRva2VuKSwKICAgICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSwgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKSk7CiAgICB9CiAgfQoKICB2b2lkIGRvRG90T3JDYXNjYWRlRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgT2JqZWN0IHNlbmQgPSBwb3AoKTsKICAgIGlmIChzZW5kIGlzIEluY29tcGxldGVTZW5kR2VuZXJhdG9yKSB7CiAgICAgIE9iamVjdCByZWNlaXZlciA9IG9wdGlvbmFsKCIuIiwgdG9rZW4pID8gcG9wKCkgOiBwb3BGb3JWYWx1ZSgpOwogICAgICBwdXNoKHNlbmQud2l0aFJlY2VpdmVyKHJlY2VpdmVyLCB0b2tlbi5jaGFyT2Zmc2V0KSk7CiAgICB9IGVsc2UgewogICAgICBwb3AoKTsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICBwdXNoKGJ1aWxkUHJvYmxlbShmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKHRva2VuKSwKICAgICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSwgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKSk7CiAgICB9CiAgfQoKICBib29sIGFyZUFyZ3VtZW50c0NvbXBhdGlibGUoRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uLCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICAvLyBUT0RPKGFoZSk6IEltcGxlbWVudCB0aGlzLgogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsIFN0cmluZyBuYW1lLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgY2hhck9mZnNldCwKICAgICAge01lbWJlciBjYW5kaWRhdGUsCiAgICAgIGJvb2wgaXNTdXBlcjogZmFsc2UsCiAgICAgIGJvb2wgaXNHZXR0ZXI6IGZhbHNlLAogICAgICBib29sIGlzU2V0dGVyOiBmYWxzZSwKICAgICAgYm9vbCBpc1N0YXRpYzogZmFsc2UsCiAgICAgIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2V9KSB7CiAgICBpbnQgbGVuZ3RoID0gbmFtZS5sZW5ndGg7CiAgICBpbnQgcGVyaW9kSW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCIuIik7CiAgICBpZiAocGVyaW9kSW5kZXggIT0gLTEpIHsKICAgICAgbGVuZ3RoIC09IHBlcmlvZEluZGV4ICsgMTsKICAgIH0KICAgIE5hbWUga2VybmVsTmFtZSA9IG5ldyBOYW1lKG5hbWUsIGxpYnJhcnkubmFtZU9yaWdpbik7CiAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0OwogICAgaWYgKGNhbmRpZGF0ZSAhPSBudWxsICYmIGNhbmRpZGF0ZS5sb2NhdGlvbiAhPSBudWxsKSB7CiAgICAgIFVyaSB1cmkgPSBjYW5kaWRhdGUubG9jYXRpb24uZmlsZTsKICAgICAgaW50IG9mZnNldCA9IGNhbmRpZGF0ZS5maWxlT2Zmc2V0OwogICAgICBNZXNzYWdlIGNvbnRleHRNZXNzYWdlOwogICAgICBpbnQgbGVuZ3RoID0gbm9MZW5ndGg7CiAgICAgIGlmIChjYW5kaWRhdGUgaXMgQ29uc3RydWN0b3IgJiYgY2FuZGlkYXRlLmlzU3ludGhldGljKSB7CiAgICAgICAgb2Zmc2V0ID0gY2FuZGlkYXRlLmVuY2xvc2luZ0NsYXNzLmZpbGVPZmZzZXQ7CiAgICAgICAgY29udGV4dE1lc3NhZ2UgPSBmYXN0YS50ZW1wbGF0ZUNhbmRpZGF0ZUZvdW5kSXNEZWZhdWx0Q29uc3RydWN0b3IKICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoY2FuZGlkYXRlLmVuY2xvc2luZ0NsYXNzLm5hbWUpOwogICAgICB9IGVsc2UgewogICAgICAgIGxlbmd0aCA9IG5hbWUubGVuZ3RoOwogICAgICAgIGNvbnRleHRNZXNzYWdlID0gZmFzdGEubWVzc2FnZUNhbmRpZGF0ZUZvdW5kOwogICAgICB9CiAgICAgIGNvbnRleHQgPSBbY29udGV4dE1lc3NhZ2Uud2l0aExvY2F0aW9uKHVyaSwgb2Zmc2V0LCBsZW5ndGgpXTsKICAgIH0KICAgIGlmIChtZXNzYWdlID09IG51bGwpIHsKICAgICAgaWYgKGlzR2V0dGVyKSB7CiAgICAgICAgbWVzc2FnZSA9IHdhcm5VbnJlc29sdmVkR2V0KGtlcm5lbE5hbWUsIGNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICBpc1N1cGVyOiBpc1N1cGVyLCByZXBvcnRXYXJuaW5nOiBmYWxzZSwgY29udGV4dDogY29udGV4dCkKICAgICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGNoYXJPZmZzZXQsIGxlbmd0aCk7CiAgICAgIH0gZWxzZSBpZiAoaXNTZXR0ZXIpIHsKICAgICAgICBtZXNzYWdlID0gd2FyblVucmVzb2x2ZWRTZXQoa2VybmVsTmFtZSwgY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGlzU3VwZXI6IGlzU3VwZXIsIHJlcG9ydFdhcm5pbmc6IGZhbHNlLCBjb250ZXh0OiBjb250ZXh0KQogICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgY2hhck9mZnNldCwgbGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtZXNzYWdlID0gd2FyblVucmVzb2x2ZWRNZXRob2Qoa2VybmVsTmFtZSwgY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGlzU3VwZXI6IGlzU3VwZXIsIHJlcG9ydFdhcm5pbmc6IGZhbHNlLCBjb250ZXh0OiBjb250ZXh0KQogICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgY2hhck9mZnNldCwgbGVuZ3RoKTsKICAgICAgfQogICAgfQogICAgaWYgKGxlZ2FjeU1vZGUgJiYgY29uc3RhbnRDb250ZXh0ID09IENvbnN0YW50Q29udGV4dC5ub25lKSB7CiAgICAgIGFkZFByb2JsZW0obWVzc2FnZS5tZXNzYWdlT2JqZWN0LCBtZXNzYWdlLmNoYXJPZmZzZXQsIG1lc3NhZ2UubGVuZ3RoLAogICAgICAgICAgd2FzSGFuZGxlZDogdHJ1ZSwgY29udGV4dDogY29udGV4dCk7CiAgICAgIHJldHVybiBmb3Jlc3QudGhyb3dFeHByZXNzaW9uKAogICAgICAgICAgbnVsbCwKICAgICAgICAgIGxpYnJhcnkubG9hZGVyLmluc3RhbnRpYXRlTm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgICAgICAgICAgcmVjZWl2ZXIsIG5hbWUsIGZvcmVzdC5jYXN0QXJndW1lbnRzKGFyZ3VtZW50cyksIGNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgaXNNZXRob2Q6ICFpc0dldHRlciAmJiAhaXNTZXR0ZXIsCiAgICAgICAgICAgICAgaXNHZXR0ZXI6IGlzR2V0dGVyLAogICAgICAgICAgICAgIGlzU2V0dGVyOiBpc1NldHRlciwKICAgICAgICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsCiAgICAgICAgICAgICAgaXNUb3BMZXZlbDogIWlzU3RhdGljICYmICFpc1N1cGVyKSkKICAgICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgfQogICAgcmV0dXJuIGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGJ1aWxkUHJvYmxlbSgKICAgICAgICBtZXNzYWdlLm1lc3NhZ2VPYmplY3QsIG1lc3NhZ2UuY2hhck9mZnNldCwgbWVzc2FnZS5sZW5ndGgsCiAgICAgICAgY29udGV4dDogY29udGV4dCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVzc2FnZSB3YXJuVW5yZXNvbHZlZEdldChOYW1lIG5hbWUsIGludCBjaGFyT2Zmc2V0LAogICAgICB7Ym9vbCBpc1N1cGVyOiBmYWxzZSwKICAgICAgYm9vbCByZXBvcnRXYXJuaW5nOiB0cnVlLAogICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgTWVzc2FnZSBtZXNzYWdlID0gaXNTdXBlcgogICAgICAgID8gZmFzdGEudGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9HZXR0ZXIud2l0aEFyZ3VtZW50cyhuYW1lLm5hbWUpCiAgICAgICAgOiBmYXN0YS50ZW1wbGF0ZUdldHRlck5vdEZvdW5kLndpdGhBcmd1bWVudHMobmFtZS5uYW1lKTsKICAgIGlmIChyZXBvcnRXYXJuaW5nKSB7CiAgICAgIGFkZFByb2JsZW1FcnJvcklmQ29uc3QobWVzc2FnZSwgY2hhck9mZnNldCwgbmFtZS5uYW1lLmxlbmd0aCwKICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogICAgfQogICAgcmV0dXJuIG1lc3NhZ2U7CiAgfQoKICBAb3ZlcnJpZGUKICBNZXNzYWdlIHdhcm5VbnJlc29sdmVkU2V0KE5hbWUgbmFtZSwgaW50IGNoYXJPZmZzZXQsCiAgICAgIHtib29sIGlzU3VwZXI6IGZhbHNlLAogICAgICBib29sIHJlcG9ydFdhcm5pbmc6IHRydWUsCiAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSBpc1N1cGVyCiAgICAgICAgPyBmYXN0YS50ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb1NldHRlci53aXRoQXJndW1lbnRzKG5hbWUubmFtZSkKICAgICAgICA6IGZhc3RhLnRlbXBsYXRlU2V0dGVyTm90Rm91bmQud2l0aEFyZ3VtZW50cyhuYW1lLm5hbWUpOwogICAgaWYgKHJlcG9ydFdhcm5pbmcpIHsKICAgICAgYWRkUHJvYmxlbUVycm9ySWZDb25zdChtZXNzYWdlLCBjaGFyT2Zmc2V0LCBuYW1lLm5hbWUubGVuZ3RoLAogICAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgICB9CiAgICByZXR1cm4gbWVzc2FnZTsKICB9CgogIEBvdmVycmlkZQogIE1lc3NhZ2Ugd2FyblVucmVzb2x2ZWRNZXRob2QoTmFtZSBuYW1lLCBpbnQgY2hhck9mZnNldCwKICAgICAge2Jvb2wgaXNTdXBlcjogZmFsc2UsCiAgICAgIGJvb2wgcmVwb3J0V2FybmluZzogdHJ1ZSwKICAgICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dH0pIHsKICAgIFN0cmluZyBwbGFpbk5hbWUgPSBuYW1lLm5hbWU7CiAgICBpbnQgZG90SW5kZXggPSBwbGFpbk5hbWUubGFzdEluZGV4T2YoIi4iKTsKICAgIGlmIChkb3RJbmRleCAhPSAtMSkgewogICAgICBwbGFpbk5hbWUgPSBwbGFpbk5hbWUuc3Vic3RyaW5nKGRvdEluZGV4ICsgMSk7CiAgICB9CiAgICAvLyBUT0RPKGFoZSk6IFRoaXMgaXMgcmF0aGVyIGJyaXR0bGUuIFdlIHdvdWxkIHByb2JhYmx5IGJlIGJldHRlciBvZmYgd2l0aAogICAgLy8gbW9yZSBwcmVjaXNlIGxvY2F0aW9uIGluZm9ybWF0aW9uIGluIHRoaXMgY2FzZS4KICAgIGludCBsZW5ndGggPSBwbGFpbk5hbWUubGVuZ3RoOwogICAgaWYgKHBsYWluTmFtZS5zdGFydHNXaXRoKCJbIikpIHsKICAgICAgbGVuZ3RoID0gMTsKICAgIH0KICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGlzU3VwZXIKICAgICAgICA/IGZhc3RhLnRlbXBsYXRlU3VwZXJjbGFzc0hhc05vTWV0aG9kLndpdGhBcmd1bWVudHMobmFtZS5uYW1lKQogICAgICAgIDogZmFzdGEudGVtcGxhdGVNZXRob2ROb3RGb3VuZC53aXRoQXJndW1lbnRzKG5hbWUubmFtZSk7CiAgICBpZiAocmVwb3J0V2FybmluZykgewogICAgICBhZGRQcm9ibGVtRXJyb3JJZkNvbnN0KG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGxlbmd0aCwgY29udGV4dDogY29udGV4dCk7CiAgICB9CiAgICByZXR1cm4gbWVzc2FnZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd2FyblR5cGVBcmd1bWVudHNNaXNtYXRjaChTdHJpbmcgbmFtZSwgaW50IGV4cGVjdGVkLCBpbnQgY2hhck9mZnNldCkgewogICAgYWRkUHJvYmxlbUVycm9ySWZDb25zdCgKICAgICAgICBmYXN0YS50ZW1wbGF0ZVR5cGVBcmd1bWVudE1pc21hdGNoLndpdGhBcmd1bWVudHMoZXhwZWN0ZWQpLAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgbmFtZS5sZW5ndGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyIGxvb2t1cEluc3RhbmNlTWVtYmVyKE5hbWUgbmFtZSwKICAgICAge2Jvb2wgaXNTZXR0ZXI6IGZhbHNlLCBib29sIGlzU3VwZXI6IGZhbHNlfSkgewogICAgcmV0dXJuIGNsYXNzQnVpbGRlci5sb29rdXBJbnN0YW5jZU1lbWJlcihoaWVyYXJjaHksIG5hbWUsCiAgICAgICAgaXNTZXR0ZXI6IGlzU2V0dGVyLCBpc1N1cGVyOiBpc1N1cGVyKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yIGxvb2t1cENvbnN0cnVjdG9yKE5hbWUgbmFtZSwge2Jvb2wgaXNTdXBlcn0pIHsKICAgIHJldHVybiBjbGFzc0J1aWxkZXIubG9va3VwQ29uc3RydWN0b3IobmFtZSwgaXNTdXBlcjogaXNTdXBlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIGRlYnVnRXZlbnQoImhhbmRsZUlkZW50aWZpZXIiKTsKICAgIFN0cmluZyBuYW1lID0gdG9rZW4ubGV4ZW1lOwogICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgiZGVwcmVjYXRlZCIpICYmCiAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBwcmV2aW91cyBjaGVjayBpcyByZWR1bmRhbnQsIGJ1dCBmYXN0ZXIgaW4gdGhlIGNvbW1vbgogICAgICAgIC8vIGNhc2UgKHdoZW4gW25hbWVdIGlzbid0IGRlcHJlY2F0ZWQpLgogICAgICAgIChuYW1lID09ICJkZXByZWNhdGVkIiB8fCBuYW1lLnN0YXJ0c1dpdGgoImRlcHJlY2F0ZWRfIikpKSB7CiAgICAgIGFkZFByb2JsZW0oZmFzdGEudGVtcGxhdGVVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbiksIGxlbmd0aEZvclRva2VuKHRva2VuKSk7CiAgICB9CiAgICBpZiAoY29udGV4dC5pc1Njb3BlUmVmZXJlbmNlKSB7CiAgICAgIGFzc2VydCghaW5Jbml0aWFsaXplciB8fAogICAgICAgICAgdGhpcy5zY29wZSA9PSBlbmNsb3NpbmdTY29wZSB8fAogICAgICAgICAgdGhpcy5zY29wZS5wYXJlbnQgPT0gZW5jbG9zaW5nU2NvcGUpOwogICAgICAvLyBUaGlzIGRlYWxzIHdpdGggdGhpcyBraW5kIG9mIGluaXRpYWxpemVyOiBgQyhhKSA6IGEgPSBhO2AKICAgICAgU2NvcGUgc2NvcGUgPSBpbkluaXRpYWxpemVyID8gZW5jbG9zaW5nU2NvcGUgOiB0aGlzLnNjb3BlOwogICAgICBwdXNoKHNjb3BlTG9va3VwKHNjb3BlLCBuYW1lLCB0b2tlbikpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKGNvbnRleHQuaW5EZWNsYXJhdGlvbikgewogICAgICBpZiAoY29udGV4dCA9PSBJZGVudGlmaWVyQ29udGV4dC50b3BMZXZlbFZhcmlhYmxlRGVjbGFyYXRpb24gfHwKICAgICAgICAgIGNvbnRleHQgPT0gSWRlbnRpZmllckNvbnRleHQuZmllbGREZWNsYXJhdGlvbikgewogICAgICAgIGNvbnN0YW50Q29udGV4dCA9IG1lbWJlci5pc0NvbnN0CiAgICAgICAgICAgID8gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkCiAgICAgICAgICAgIDogIW1lbWJlci5pc1N0YXRpYyAmJgogICAgICAgICAgICAgICAgICAgIGNsYXNzQnVpbGRlciAhPSBudWxsICYmCiAgICAgICAgICAgICAgICAgICAgY2xhc3NCdWlsZGVyLmhhc0NvbnN0Q29uc3RydWN0b3IKICAgICAgICAgICAgICAgID8gQ29uc3RhbnRDb250ZXh0LnJlcXVpcmVkCiAgICAgICAgICAgICAgICA6IENvbnN0YW50Q29udGV4dC5ub25lOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSAmJgogICAgICAgICFjb250ZXh0LmFsbG93ZWRJbkNvbnN0YW50RXhwcmVzc2lvbikgewogICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgZmFzdGEubWVzc2FnZU5vdEFDb25zdGFudEV4cHJlc3Npb24sIHRva2VuLmNoYXJPZmZzZXQsIHRva2VuLmxlbmd0aCk7CiAgICB9CiAgICBpZiAodG9rZW4uaXNTeW50aGV0aWMpIHsKICAgICAgcHVzaChuZXcgUGFyc2VyUmVjb3Zlcnkob2Zmc2V0Rm9yVG9rZW4odG9rZW4pKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKG5ldyBJZGVudGlmaWVyLnByZXNlcnZlVG9rZW4odG9rZW4pKTsKICAgIH0KICB9CgogIC8vLyBIZWxwZXIgbWV0aG9kIHRvIGNyZWF0ZSBhIFtWYXJpYWJsZUdldF0gb2YgdGhlIFt2YXJpYWJsZV0gdXNpbmcKICAvLy8gW2NoYXJPZmZzZXRdIGFzIHRoZSBmaWxlIG9mZnNldC4KICBWYXJpYWJsZUdldCBfY3JlYXRlVmFyaWFibGVHZXQoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgaW50IGNoYXJPZmZzZXQpIHsKICAgIE9iamVjdCBmYWN0ID0KICAgICAgICB0eXBlUHJvbW90ZXI/LmdldEZhY3RGb3JBY2Nlc3ModmFyaWFibGUsIGZ1bmN0aW9uTmVzdGluZ0xldmVsKTsKICAgIE9iamVjdCBzY29wZSA9IHR5cGVQcm9tb3Rlcj8uY3VycmVudFNjb3BlOwogICAgcmV0dXJuIG5ldyBWYXJpYWJsZUdldEp1ZGdtZW50KHZhcmlhYmxlLCBmYWN0LCBzY29wZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICB9CgogIC8vLyBIZWxwZXIgbWV0aG9kIHRvIGNyZWF0ZSBhIFtSZWFkT25seUFjY2Vzc0dlbmVyYXRvcl0gb24gdGhlIFt2YXJpYWJsZV0KICAvLy8gdXNpbmcgW3Rva2VuXSBhbmQgW2NoYXJPZmZzZXRdIGZvciBvZmZzZXQgaW5mb3JtYXRpb24gYW5kIFtuYW1lXQogIC8vLyBmb3IgYEV4cHJlc3Npb25HZW5lcmF0b3IuX3BsYWluTmFtZUZvclJlYWRgLgogIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yIF9jcmVhdGVSZWFkT25seVZhcmlhYmxlQWNjZXNzKAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBUb2tlbiB0b2tlbiwgaW50IGNoYXJPZmZzZXQsIFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gbmV3IFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yKAogICAgICAgIHRoaXMsIHRva2VuLCBfY3JlYXRlVmFyaWFibGVHZXQodmFyaWFibGUsIGNoYXJPZmZzZXQpLCBuYW1lKTsKICB9CgogIC8vLyBMb29rIHVwIFtuYW1lXSBpbiBbc2NvcGVdIHVzaW5nIFt0b2tlbl0gYXMgbG9jYXRpb24gaW5mb3JtYXRpb24gKGJvdGggdG8KICAvLy8gcmVwb3J0IHByb2JsZW1zIGFuZCBhcyB0aGUgZmlsZSBvZmZzZXQgaW4gdGhlIGdlbmVyYXRlZCBrZXJuZWwgY29kZSkuCiAgLy8vIFtpc1F1YWxpZmllZF0gc2hvdWxkIGJlIHRydWUgaWYgW25hbWVdIGlzIGEgcXVhbGlmaWVkIGFjY2VzcyAod2hpY2gKICAvLy8gaW1wbGllcyB0aGF0IGl0IHNob3VsZG4ndCBiZSB0dXJuZWQgaW50byBhIFtUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3JdCiAgLy8vIGlmIHRoZSBuYW1lIGRvZXNuJ3QgcmVzb2x2ZSBpbiB0aGUgc2NvcGUpLgogIEBvdmVycmlkZQogIHNjb3BlTG9va3VwKFNjb3BlIHNjb3BlLCBTdHJpbmcgbmFtZSwgVG9rZW4gdG9rZW4sCiAgICAgIHtib29sIGlzUXVhbGlmaWVkOiBmYWxzZSwgUHJlZml4QnVpbGRlciBwcmVmaXh9KSB7CiAgICBpbnQgY2hhck9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGlmICh0b2tlbi5pc1N5bnRoZXRpYykgewogICAgICByZXR1cm4gbmV3IFBhcnNlckVycm9yR2VuZXJhdG9yKHRoaXMsIHRva2VuLCBmYXN0YS5tZXNzYWdlU3ludGhldGljVG9rZW4pOwogICAgfQogICAgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSBzY29wZS5sb29rdXAobmFtZSwgY2hhck9mZnNldCwgdXJpKTsKICAgIGlmIChkZWNsYXJhdGlvbiBpcyBVbmxpbmtlZERlY2xhcmF0aW9uKSB7CiAgICAgIHJldHVybiBuZXcgVW5saW5rZWRHZW5lcmF0b3IodGhpcywgdG9rZW4sIGRlY2xhcmF0aW9uKTsKICAgIH0KICAgIGlmIChkZWNsYXJhdGlvbiA9PSBudWxsICYmCiAgICAgICAgcHJlZml4ID09IG51bGwgJiYKICAgICAgICAoY2xhc3NCdWlsZGVyPy5pc1BhdGNoID8/IGZhbHNlKSkgewogICAgICAvLyBUaGUgc2NvcGUgb2YgYSBwYXRjaGVkIG1ldGhvZCBpbmNsdWRlcyB0aGUgb3JpZ2luIGNsYXNzLgogICAgICBkZWNsYXJhdGlvbiA9CiAgICAgICAgICBjbGFzc0J1aWxkZXIub3JpZ2luLmZpbmRTdGF0aWNCdWlsZGVyKG5hbWUsIGNoYXJPZmZzZXQsIHVyaSwgbGlicmFyeSk7CiAgICB9CiAgICBpZiAoZGVjbGFyYXRpb24gIT0gbnVsbCAmJgogICAgICAgIGRlY2xhcmF0aW9uLmlzSW5zdGFuY2VNZW1iZXIgJiYKICAgICAgICBpbkZpZWxkSW5pdGlhbGl6ZXIgJiYKICAgICAgICAhaW5Jbml0aWFsaXplcikgewogICAgICByZXR1cm4gbmV3IEluY29tcGxldGVFcnJvckdlbmVyYXRvcih0aGlzLCB0b2tlbiwKICAgICAgICAgIGZhc3RhLnRlbXBsYXRlVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplci53aXRoQXJndW1lbnRzKG5hbWUpKTsKICAgIH0KICAgIGlmIChkZWNsYXJhdGlvbiA9PSBudWxsIHx8CiAgICAgICAgKCFpc0luc3RhbmNlQ29udGV4dCAmJiBkZWNsYXJhdGlvbi5pc0luc3RhbmNlTWVtYmVyKSkgewogICAgICBOYW1lIG4gPSBuZXcgTmFtZShuYW1lLCBsaWJyYXJ5Lm5hbWVPcmlnaW4pOwogICAgICBpZiAoIWlzUXVhbGlmaWVkICYmIGlzSW5zdGFuY2VDb250ZXh0KSB7CiAgICAgICAgYXNzZXJ0KGRlY2xhcmF0aW9uID09IG51bGwpOwogICAgICAgIGlmIChjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUgfHwgbWVtYmVyLmlzRmllbGQpIHsKICAgICAgICAgIHJldHVybiBuZXcgVW5yZXNvbHZlZE5hbWVHZW5lcmF0b3IodGhpcywgdG9rZW4sIG4pOwogICAgICAgIH0KICAgICAgICBpZiAoZXh0ZW5zaW9uVGhpcyAhPSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IubWFrZSgKICAgICAgICAgICAgICB0aGlzLAogICAgICAgICAgICAgIHRva2VuLAogICAgICAgICAgICAgIF9jcmVhdGVWYXJpYWJsZUdldChleHRlbnNpb25UaGlzLCBjaGFyT2Zmc2V0KSwKICAgICAgICAgICAgICBuLAogICAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICBmYWxzZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBuZXcgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yKHRoaXMsIHRva2VuLCBuLAogICAgICAgICAgICAgIGxvb2t1cEluc3RhbmNlTWVtYmVyKG4pLCBsb29rdXBJbnN0YW5jZU1lbWJlcihuLCBpc1NldHRlcjogdHJ1ZSkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChpZ25vcmVNYWluSW5HZXRNYWluQ2xvc3VyZSAmJgogICAgICAgICAgbmFtZSA9PSAibWFpbiIgJiYKICAgICAgICAgIG1lbWJlcj8ubmFtZSA9PSAiX2dldE1haW5DbG9zdXJlIikgewogICAgICAgIHJldHVybiBmb3Jlc3QubGl0ZXJhbE51bGwobnVsbCkuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBuZXcgVW5yZXNvbHZlZE5hbWVHZW5lcmF0b3IodGhpcywgdG9rZW4sIG4pOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLmlzVHlwZURlY2xhcmF0aW9uKSB7CiAgICAgIHJldHVybiBuZXcgVHlwZVVzZUdlbmVyYXRvcih0aGlzLCB0b2tlbiwgZGVjbGFyYXRpb24sIG5hbWUpOwogICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbi5pc0xvY2FsKSB7CiAgICAgIGlmIChjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUgJiYKICAgICAgICAgICFkZWNsYXJhdGlvbi5pc0NvbnN0ICYmCiAgICAgICAgICAhbWVtYmVyLmlzQ29uc3RydWN0b3IpIHsKICAgICAgICByZXR1cm4gbmV3IEluY29tcGxldGVFcnJvckdlbmVyYXRvcigKICAgICAgICAgICAgdGhpcywgdG9rZW4sIGZhc3RhLm1lc3NhZ2VOb3RBQ29uc3RhbnRFeHByZXNzaW9uKTsKICAgICAgfQogICAgICAvLyBBbiBpbml0aWFsaXppbmcgZm9ybWFsIHBhcmFtZXRlciBtaWdodCBiZSBmaW5hbCB3aXRob3V0IGl0cwogICAgICAvLyBWYXJpYWJsZURlY2xhcmF0aW9uIGJlaW5nIGZpbmFsLiBTZWUKICAgICAgLy8gW1Byb2NlZHVyZUJ1aWxkZXIuY29tcHV0ZUZvcm1hbFBhcmFtZXRlckluaXRpYWxpemVyU2NvcGVdLiBJZiB0aGF0CiAgICAgIC8vIHdhc24ndCB0aGUgY2FzZSwgd2UgY291bGQgYWx3YXlzIHVzZSBbVmFyaWFibGVVc2VHZW5lcmF0b3JdLgogICAgICBpZiAoZGVjbGFyYXRpb24uaXNGaW5hbCkgewogICAgICAgIHJldHVybiBfY3JlYXRlUmVhZE9ubHlWYXJpYWJsZUFjY2VzcygKICAgICAgICAgICAgZGVjbGFyYXRpb24udGFyZ2V0LCB0b2tlbiwgY2hhck9mZnNldCwgbmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5ldyBWYXJpYWJsZVVzZUdlbmVyYXRvcih0aGlzLCB0b2tlbiwgZGVjbGFyYXRpb24udGFyZ2V0KTsKICAgICAgfQogICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbi5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgIGlmIChjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUgJiYKICAgICAgICAgICFpbkluaXRpYWxpemVyICYmCiAgICAgICAgICAvLyBUT0RPKGFoZSk6IFRoaXMgaXMgYSBoYWNrIGJlY2F1c2UgRmFzdGEgc2V0cyB1cCB0aGUgc2NvcGUKICAgICAgICAgIC8vICJ0aGlzLmZpZWxkIiBwYXJhbWV0ZXJzIGFjY29yZGluZyB0byBvbGQgc2VtYW50aWNzLiBVbmRlciB0aGUgbmV3CiAgICAgICAgICAvLyBzZW1hbnRpY3MsIHN1Y2ggcGFyYW1ldGVycyBpbnRyb2R1Y2VzIGEgbmV3IHBhcmFtZXRlciB3aXRoIHRoYXQKICAgICAgICAgIC8vIG5hbWUgdGhhdCBzaG91bGQgYmUgcmVzb2x2ZWQgaGVyZS4KICAgICAgICAgICFtZW1iZXIuaXNDb25zdHJ1Y3RvcikgewogICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VOb3RBQ29uc3RhbnRFeHByZXNzaW9uLCBjaGFyT2Zmc2V0LCB0b2tlbi5sZW5ndGgpOwogICAgICB9CiAgICAgIE5hbWUgbiA9IG5ldyBOYW1lKG5hbWUsIGxpYnJhcnkubmFtZU9yaWdpbik7CiAgICAgIE1lbWJlciBnZXR0ZXI7CiAgICAgIE1lbWJlciBzZXR0ZXI7CiAgICAgIGlmIChkZWNsYXJhdGlvbiBpcyBBY2Nlc3NFcnJvckJ1aWxkZXIpIHsKICAgICAgICBzZXR0ZXIgPSBkZWNsYXJhdGlvbi5wYXJlbnQudGFyZ2V0OwogICAgICAgIGdldHRlciA9IGxvb2t1cEluc3RhbmNlTWVtYmVyKG4pOwogICAgICB9IGVsc2UgewogICAgICAgIGdldHRlciA9IGRlY2xhcmF0aW9uLnRhcmdldDsKICAgICAgICBzZXR0ZXIgPSBsb29rdXBJbnN0YW5jZU1lbWJlcihuLCBpc1NldHRlcjogdHJ1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IodGhpcywgdG9rZW4sIG4sIGdldHRlciwgc2V0dGVyKTsKICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24uaXNSZWd1bGFyTWV0aG9kKSB7CiAgICAgIGFzc2VydChkZWNsYXJhdGlvbi5pc1N0YXRpYyB8fCBkZWNsYXJhdGlvbi5pc1RvcExldmVsKTsKICAgICAgcmV0dXJuIG5ldyBTdGF0aWNBY2Nlc3NHZW5lcmF0b3IodGhpcywgdG9rZW4sIGRlY2xhcmF0aW9uLnRhcmdldCwgbnVsbCk7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFByZWZpeEJ1aWxkZXIpIHsKICAgICAgYXNzZXJ0KHByZWZpeCA9PSBudWxsKTsKICAgICAgcmV0dXJuIG5ldyBQcmVmaXhVc2VHZW5lcmF0b3IodGhpcywgdG9rZW4sIGRlY2xhcmF0aW9uKTsKICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgTG9hZExpYnJhcnlCdWlsZGVyKSB7CiAgICAgIHJldHVybiBuZXcgTG9hZExpYnJhcnlHZW5lcmF0b3IodGhpcywgdG9rZW4sIGRlY2xhcmF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChkZWNsYXJhdGlvbi5oYXNQcm9ibGVtICYmIGRlY2xhcmF0aW9uIGlzISBBY2Nlc3NFcnJvckJ1aWxkZXIpCiAgICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogICAgICBEZWNsYXJhdGlvbiBzZXR0ZXI7CiAgICAgIGlmIChkZWNsYXJhdGlvbi5pc1NldHRlcikgewogICAgICAgIHNldHRlciA9IGRlY2xhcmF0aW9uOwogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLmlzR2V0dGVyKSB7CiAgICAgICAgc2V0dGVyID0gc2NvcGUubG9va3VwU2V0dGVyKG5hbWUsIGNoYXJPZmZzZXQsIHVyaSk7CiAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24uaXNGaWVsZCkgewogICAgICAgIGlmIChkZWNsYXJhdGlvbi5pc0ZpbmFsIHx8IGRlY2xhcmF0aW9uLmlzQ29uc3QpIHsKICAgICAgICAgIHNldHRlciA9IHNjb3BlLmxvb2t1cFNldHRlcihuYW1lLCBjaGFyT2Zmc2V0LCB1cmkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZXR0ZXIgPSBkZWNsYXJhdGlvbjsKICAgICAgICB9CiAgICAgIH0KICAgICAgU3RhdGljQWNjZXNzR2VuZXJhdG9yIGdlbmVyYXRvciA9IG5ldyBTdGF0aWNBY2Nlc3NHZW5lcmF0b3IuZnJvbUJ1aWxkZXIoCiAgICAgICAgICB0aGlzLCBkZWNsYXJhdGlvbiwgdG9rZW4sIHNldHRlcik7CiAgICAgIGlmIChjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUpIHsKICAgICAgICBNZW1iZXIgcmVhZFRhcmdldCA9IGdlbmVyYXRvci5yZWFkVGFyZ2V0OwogICAgICAgIGlmICghKHJlYWRUYXJnZXQgaXMgRmllbGQgJiYgcmVhZFRhcmdldC5pc0NvbnN0IHx8CiAgICAgICAgICAgIC8vIFN0YXRpYyB0ZWFyLW9mZnMgYXJlIGFsc28gY29tcGlsZSB0aW1lIGNvbnN0YW50cy4KICAgICAgICAgICAgcmVhZFRhcmdldCBpcyBQcm9jZWR1cmUpKSB7CiAgICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VOb3RBQ29uc3RhbnRFeHByZXNzaW9uLCBjaGFyT2Zmc2V0LCB0b2tlbi5sZW5ndGgpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gZ2VuZXJhdG9yOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVRdWFsaWZpZWQoVG9rZW4gcGVyaW9kKSB7CiAgICBkZWJ1Z0V2ZW50KCJRdWFsaWZpZWQiKTsKICAgIE9iamVjdCBub2RlID0gcG9wKCk7CiAgICBPYmplY3QgcXVhbGlmaWVyID0gcG9wKCk7CiAgICBpZiAocXVhbGlmaWVyIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gocXVhbGlmaWVyKTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gbm9kZTsKICAgICAgcHVzaChpZGVudGlmaWVyLndpdGhRdWFsaWZpZXIocXVhbGlmaWVyKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTGl0ZXJhbFN0cmluZyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5MaXRlcmFsU3RyaW5nIik7CiAgICBwdXNoKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3RyaW5nUGFydChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiU3RyaW5nUGFydCIpOwogICAgcHVzaCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZExpdGVyYWxTdHJpbmcoaW50IGludGVycG9sYXRpb25Db3VudCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZExpdGVyYWxTdHJpbmciKTsKICAgIGlmIChpbnRlcnBvbGF0aW9uQ291bnQgPT0gMCkgewogICAgICBUb2tlbiB0b2tlbiA9IHBvcCgpOwogICAgICBTdHJpbmcgdmFsdWUgPSB1bmVzY2FwZVN0cmluZyh0b2tlbi5sZXhlbWUsIHRva2VuLCB0aGlzKTsKICAgICAgcHVzaChmb3Jlc3QubGl0ZXJhbFN0cmluZyh2YWx1ZSwgdG9rZW4pKTsKICAgIH0gZWxzZSB7CiAgICAgIGludCBjb3VudCA9IDEgKyBpbnRlcnBvbGF0aW9uQ291bnQgKiAyOwogICAgICBMaXN0PE9iamVjdD4gcGFydHMgPSBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxPYmplY3Q+KCkucG9wKHN0YWNrLCBjb3VudCk7CiAgICAgIGlmIChwYXJ0cyA9PSBudWxsKSB7CiAgICAgICAgcHVzaChuZXcgUGFyc2VyUmVjb3ZlcnkoZW5kVG9rZW4uY2hhck9mZnNldCkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBUb2tlbiBmaXJzdCA9IHBhcnRzLmZpcnN0OwogICAgICBUb2tlbiBsYXN0ID0gcGFydHMubGFzdDsKICAgICAgUXVvdGUgcXVvdGUgPSBhbmFseXplUXVvdGUoZmlyc3QubGV4ZW1lKTsKICAgICAgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9ucyA9IDxFeHByZXNzaW9uPltdOwogICAgICAvLyBDb250YWlucyBtb3JlIHRoYW4ganVzdCBcJyBvciBcIi4KICAgICAgaWYgKGZpcnN0LmxleGVtZS5sZW5ndGggPiAxKSB7CiAgICAgICAgU3RyaW5nIHZhbHVlID0KICAgICAgICAgICAgdW5lc2NhcGVGaXJzdFN0cmluZ1BhcnQoZmlyc3QubGV4ZW1lLCBxdW90ZSwgZmlyc3QsIHRoaXMpOwogICAgICAgIGlmICh2YWx1ZS5pc05vdEVtcHR5KSB7CiAgICAgICAgICBleHByZXNzaW9ucy5hZGQoZm9yZXN0LmxpdGVyYWxTdHJpbmcodmFsdWUsIGZpcnN0KSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgaSsrKSB7CiAgICAgICAgT2JqZWN0IHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgICBpZiAocGFydCBpcyBUb2tlbikgewogICAgICAgICAgaWYgKHBhcnQubGV4ZW1lLmxlbmd0aCAhPSAwKSB7CiAgICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHVuZXNjYXBlKHBhcnQubGV4ZW1lLCBxdW90ZSwgcGFydCwgdGhpcyk7CiAgICAgICAgICAgIGV4cHJlc3Npb25zLmFkZChmb3Jlc3QubGl0ZXJhbFN0cmluZyh2YWx1ZSwgcGFydCkpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBleHByZXNzaW9ucy5hZGQodG9WYWx1ZShwYXJ0KSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIENvbnRhaW5zIG1vcmUgdGhhbiBqdXN0IFwnIG9yIFwiLgogICAgICBpZiAobGFzdC5sZXhlbWUubGVuZ3RoID4gMSkgewogICAgICAgIFN0cmluZyB2YWx1ZSA9IHVuZXNjYXBlTGFzdFN0cmluZ1BhcnQoCiAgICAgICAgICAgIGxhc3QubGV4ZW1lLCBxdW90ZSwgbGFzdCwgbGFzdC5pc1N5bnRoZXRpYywgdGhpcyk7CiAgICAgICAgaWYgKHZhbHVlLmlzTm90RW1wdHkpIHsKICAgICAgICAgIGV4cHJlc3Npb25zLmFkZChmb3Jlc3QubGl0ZXJhbFN0cmluZyh2YWx1ZSwgbGFzdCkpOwogICAgICAgIH0KICAgICAgfQogICAgICBwdXNoKGZvcmVzdC5zdHJpbmdDb25jYXRlbmF0aW9uRXhwcmVzc2lvbihleHByZXNzaW9ucywgZW5kVG9rZW4pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmF0aXZlQ2xhdXNlKFRva2VuIG5hdGl2ZVRva2VuLCBib29sIGhhc05hbWUpIHsKICAgIGRlYnVnRXZlbnQoIk5hdGl2ZUNsYXVzZSIpOwogICAgaWYgKGhhc05hbWUpIHsKICAgICAgZm9yZXN0LmFzTGl0ZXJhbFN0cmluZyhwb3AoKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVNjcmlwdChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiU2NyaXB0Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN0cmluZ0p1eHRhcG9zaXRpb24oaW50IGxpdGVyYWxDb3VudCkgewogICAgZGVidWdFdmVudCgiU3RyaW5nSnV4dGFwb3NpdGlvbiIpOwogICAgTGlzdDxFeHByZXNzaW9uPiBwYXJ0cyA9IHBvcExpc3RGb3JWYWx1ZShsaXRlcmFsQ291bnQpOwogICAgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9uczsKICAgIC8vIEZsYXR0ZW4gc3RyaW5nIGp1eHRhcG9zaXRpb25zIG9mIHN0cmluZyBpbnRlcnBvbGF0aW9uLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykgewogICAgICBFeHByZXNzaW9uIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgaWYgKHBhcnQgaXMgU3RyaW5nQ29uY2F0ZW5hdGlvbikgewogICAgICAgIGlmIChleHByZXNzaW9ucyA9PSBudWxsKSB7CiAgICAgICAgICBleHByZXNzaW9ucyA9IHBhcnRzLnN1Ymxpc3QoMCwgaSk7CiAgICAgICAgfQogICAgICAgIGZvciAoRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIHBhcnQuZXhwcmVzc2lvbnMpIHsKICAgICAgICAgIGV4cHJlc3Npb25zLmFkZChleHByZXNzaW9uKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGV4cHJlc3Npb25zICE9IG51bGwpIHsKICAgICAgICAgIGV4cHJlc3Npb25zLmFkZChwYXJ0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHB1c2goZm9yZXN0LnN0cmluZ0NvbmNhdGVuYXRpb25FeHByZXNzaW9uKGV4cHJlc3Npb25zID8/IHBhcnRzLCBudWxsKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxpdGVyYWxJbnQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkxpdGVyYWxJbnQiKTsKICAgIGludCB2YWx1ZSA9IGludC50cnlQYXJzZSh0b2tlbi5sZXhlbWUpOwogICAgaWYgKGxlZ2FjeU1vZGUpIHsKICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgICBwdXNoKHVuaGFuZGxlZCgKICAgICAgICAgICAgJ2xhcmdlIGludGVnZXInLCAnaGFuZGxlTGl0ZXJhbEludCcsIHRva2VuLmNoYXJPZmZzZXQsIHVyaSkpOwogICAgICB9IGVsc2UgewogICAgICAgIHB1c2goZm9yZXN0LmxpdGVyYWxJbnQodmFsdWUsIHRva2VuKSk7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gUG9zdHBvbmUgcGFyc2luZyBvZiBsaXRlcmFscyByZXN1bHRpbmcgaW4gYSBuZWdhdGl2ZSB2YWx1ZQogICAgLy8gKGhleCBsaXRlcmFscyA+PSAyXjYzKS4gVGhlc2UgYXJlIG9ubHkgYWxsb3dlZCB3aGVuIG5vdCBuZWdhdGVkLgogICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPCAwKSB7CiAgICAgIHB1c2goZm9yZXN0LmxpdGVyYWxMYXJnZUludCh0b2tlbi5sZXhlbWUsIHRva2VuKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGZvcmVzdC5saXRlcmFsSW50KHZhbHVlLCB0b2tlbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVFbXB0eUZ1bmN0aW9uQm9keShUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIkV4cHJlc3Npb25GdW5jdGlvbkJvZHkiKTsKICAgIGVuZEJsb2NrRnVuY3Rpb25Cb2R5KDAsIG51bGwsIHNlbWljb2xvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUV4cHJlc3Npb25GdW5jdGlvbkJvZHkoVG9rZW4gYXJyb3dUb2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkV4cHJlc3Npb25GdW5jdGlvbkJvZHkiKTsKICAgIGVuZFJldHVyblN0YXRlbWVudCh0cnVlLCBhcnJvd1Rva2VuLm5leHQsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kUmV0dXJuU3RhdGVtZW50KAogICAgICBib29sIGhhc0V4cHJlc3Npb24sIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJSZXR1cm5TdGF0ZW1lbnQiKTsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IGhhc0V4cHJlc3Npb24gPyBwb3BGb3JWYWx1ZSgpIDogbnVsbDsKICAgIGlmIChleHByZXNzaW9uICE9IG51bGwgJiYgaW5Db25zdHJ1Y3RvcikgewogICAgICBwdXNoKGJ1aWxkUHJvYmxlbVN0YXRlbWVudCgKICAgICAgICAgIGZhc3RhLm1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhSZXR1cm5UeXBlLCBiZWdpblRva2VuLmNoYXJPZmZzZXQpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2goZm9yZXN0LnJldHVyblN0YXRlbWVudChiZWdpblRva2VuLCBleHByZXNzaW9uLCBlbmRUb2tlbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblRoZW5TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIEV4cHJlc3Npb24gY29uZGl0aW9uID0gcG9wRm9yVmFsdWUoKTsKICAgIGVudGVyVGhlbkZvclR5cGVQcm9tb3Rpb24oY29uZGl0aW9uKTsKICAgIHB1c2goY29uZGl0aW9uKTsKICAgIHN1cGVyLmJlZ2luVGhlblN0YXRlbWVudCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFRoZW5TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIHR5cGVQcm9tb3Rlcj8uZW50ZXJFbHNlKCk7CiAgICBzdXBlci5lbmRUaGVuU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSWZTdGF0ZW1lbnQoVG9rZW4gaWZUb2tlbiwgVG9rZW4gZWxzZVRva2VuKSB7CiAgICBTdGF0ZW1lbnQgZWxzZVBhcnQgPSBwb3BTdGF0ZW1lbnRJZk5vdE51bGwoZWxzZVRva2VuKTsKICAgIFN0YXRlbWVudCB0aGVuUGFydCA9IHBvcFN0YXRlbWVudCgpOwogICAgRXhwcmVzc2lvbiBjb25kaXRpb24gPSBwb3AoKTsKICAgIHR5cGVQcm9tb3Rlcj8uZXhpdENvbmRpdGlvbmFsKCk7CiAgICBwdXNoKGZvcmVzdC5pZlN0YXRlbWVudChpZlRva2VuLCBjb25kaXRpb24sIHRoZW5QYXJ0LCBlbHNlVG9rZW4sIGVsc2VQYXJ0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFZhcmlhYmxlSW5pdGlhbGl6ZXIoVG9rZW4gYXNzaWdubWVudE9wZXJhdG9yKSB7CiAgICBkZWJ1Z0V2ZW50KCJWYXJpYWJsZUluaXRpYWxpemVyIik7CiAgICBhc3NlcnQoYXNzaWdubWVudE9wZXJhdG9yLnN0cmluZ1ZhbHVlID09ICI9Iik7CiAgICBwdXNoTmV3TG9jYWxWYXJpYWJsZShwb3BGb3JWYWx1ZSgpLCBlcXVhbHNUb2tlbjogYXNzaWdubWVudE9wZXJhdG9yKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9WYXJpYWJsZUluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb1ZhcmlhYmxlSW5pdGlhbGl6ZXIiKTsKICAgIGJvb2wgaXNDb25zdCA9IChjdXJyZW50TG9jYWxWYXJpYWJsZU1vZGlmaWVycyAmIGNvbnN0TWFzaykgIT0gMDsKICAgIGJvb2wgaXNGaW5hbCA9IChjdXJyZW50TG9jYWxWYXJpYWJsZU1vZGlmaWVycyAmIGZpbmFsTWFzaykgIT0gMDsKICAgIEV4cHJlc3Npb24gaW5pdGlhbGl6ZXI7CiAgICBpZiAoIW9wdGlvbmFsKCJpbiIsIHRva2VuKSkgewogICAgICAvLyBBIGZvci1pbiBsb29wLXZhcmlhYmxlIGNhbid0IGhhdmUgYW4gaW5pdGlhbGl6ZXIuIFNvIGxldCdzIHJlbWFpbgogICAgICAvLyBzaWxlbnQgaWYgdGhlIG5leHQgdG9rZW4gaXMgYGluYC4gU2luY2UgYSBmb3ItaW4gbG9vcCBjYW4gb25seSBoYXZlCiAgICAgIC8vIG9uZSB2YXJpYWJsZSBpdCBtdXN0IGJlIGZvbGxvd2VkIGJ5IGBpbmAuCiAgICAgIGlmIChpc0NvbnN0KSB7CiAgICAgICAgaW5pdGlhbGl6ZXIgPSBidWlsZFByb2JsZW0oCiAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlQ29uc3RGaWVsZFdpdGhvdXRJbml0aWFsaXplcgogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHModG9rZW4ubGV4ZW1lKSwKICAgICAgICAgICAgdG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgICAgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSBlbHNlIGlmIChpc0ZpbmFsKSB7CiAgICAgICAgaW5pdGlhbGl6ZXIgPSBidWlsZFByb2JsZW0oCiAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRmluYWxGaWVsZFdpdGhvdXRJbml0aWFsaXplcgogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHModG9rZW4ubGV4ZW1lKSwKICAgICAgICAgICAgdG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgICAgdG9rZW4ubGVuZ3RoKTsKICAgICAgfQogICAgfQogICAgcHVzaE5ld0xvY2FsVmFyaWFibGUoaW5pdGlhbGl6ZXIpOwogIH0KCiAgdm9pZCBwdXNoTmV3TG9jYWxWYXJpYWJsZShFeHByZXNzaW9uIGluaXRpYWxpemVyLCB7VG9rZW4gZXF1YWxzVG9rZW59KSB7CiAgICBPYmplY3Qgbm9kZSA9IHBvcCgpOwogICAgaWYgKG5vZGUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChub2RlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gbm9kZTsKICAgIGFzc2VydChjdXJyZW50TG9jYWxWYXJpYWJsZU1vZGlmaWVycyAhPSAtMSk7CiAgICBib29sIGlzQ29uc3QgPSAoY3VycmVudExvY2FsVmFyaWFibGVNb2RpZmllcnMgJiBjb25zdE1hc2spICE9IDA7CiAgICBib29sIGlzRmluYWwgPSAoY3VycmVudExvY2FsVmFyaWFibGVNb2RpZmllcnMgJiBmaW5hbE1hc2spICE9IDA7CiAgICBhc3NlcnQoaXNDb25zdCA9PSAoY29uc3RhbnRDb250ZXh0ID09IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZCkpOwogICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQoCiAgICAgICAgaWRlbnRpZmllci5uYW1lLCBmdW5jdGlvbk5lc3RpbmdMZXZlbCwKICAgICAgICBmb3JTeW50aGV0aWNUb2tlbjogZGVwcmVjYXRlZF9leHRyYWN0VG9rZW4oaWRlbnRpZmllcikuaXNTeW50aGV0aWMsCiAgICAgICAgaW5pdGlhbGl6ZXI6IGluaXRpYWxpemVyLAogICAgICAgIHR5cGU6IGJ1aWxkRGFydFR5cGUoY3VycmVudExvY2FsVmFyaWFibGVUeXBlKSwKICAgICAgICBpc0ZpbmFsOiBpc0ZpbmFsLAogICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QpCiAgICAgIC4uZmlsZU9mZnNldCA9IGlkZW50aWZpZXIuY2hhck9mZnNldAogICAgICAuLmZpbGVFcXVhbHNPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihlcXVhbHNUb2tlbik7CiAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5WYXJpYWJsZURlY2xhcmF0aW9uKHZhcmlhYmxlLCB0eXBlRW52aXJvbm1lbnQsIHVyaSk7CiAgICBwdXNoKHZhcmlhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GaWVsZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBpbkZpZWxkSW5pdGlhbGl6ZXIgPSB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGaWVsZEluaXRpYWxpemVyKFRva2VuIGFzc2lnbm1lbnRPcGVyYXRvciwgVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZpZWxkSW5pdGlhbGl6ZXIiKTsKICAgIGluRmllbGRJbml0aWFsaXplciA9IGZhbHNlOwogICAgYXNzZXJ0KGFzc2lnbm1lbnRPcGVyYXRvci5zdHJpbmdWYWx1ZSA9PSAiPSIpOwogICAgcHVzaChwb3BGb3JWYWx1ZSgpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9GaWVsZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb0ZpZWxkSW5pdGlhbGl6ZXIiKTsKICAgIGlmIChjb25zdGFudENvbnRleHQgPT0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkKSB7CiAgICAgIC8vIENyZWF0aW5nIGEgbnVsbCB2YWx1ZSB0byBwcmV2ZW50IHRoZSBEYXJ0IFZNIGZyb20gY3Jhc2hpbmcuCiAgICAgIHB1c2goZm9yZXN0LmxpdGVyYWxOdWxsKHRva2VuKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKE51bGxWYWx1ZS5GaWVsZEluaXRpYWxpemVyKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW5pdGlhbGl6ZWRJZGVudGlmaWVyKFRva2VuIG5hbWVUb2tlbikgewogICAgLy8gVE9ETyhhaGUpOiBVc2UgW0luaXRpYWxpemVkSWRlbnRpZmllcl0gaGVyZT8KICAgIGRlYnVnRXZlbnQoIkluaXRpYWxpemVkSWRlbnRpZmllciIpOwogICAgT2JqZWN0IG5vZGUgPSBwb3AoKTsKICAgIGlmIChub2RlIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gobm9kZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBub2RlOwogICAgdmFyaWFibGUuZmlsZU9mZnNldCA9IG5hbWVUb2tlbi5jaGFyT2Zmc2V0OwogICAgcHVzaCh2YXJpYWJsZSk7CiAgICBkZWNsYXJlVmFyaWFibGUodmFyaWFibGUsIHNjb3BlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5WYXJpYWJsZXNEZWNsYXJhdGlvbigKICAgICAgVG9rZW4gdG9rZW4sIFRva2VuIGxhdGVUb2tlbiwgVG9rZW4gdmFyRmluYWxPckNvbnN0KSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpblZhcmlhYmxlc0RlY2xhcmF0aW9uIik7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogaGFuZGxlIE5OQkQgJ2xhdGUnIG1vZGlmaWVyCiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVOb25OdWxsYWJsZSkgewogICAgICByZXBvcnROb25OdWxsYWJsZU1vZGlmaWVyRXJyb3IobGF0ZVRva2VuKTsKICAgIH0KICAgIFVucmVzb2x2ZWRUeXBlIHR5cGUgPSBwb3AoKTsKICAgIGludCBtb2RpZmllcnMgPSBNb2RpZmllci52YWxpZGF0ZVZhckZpbmFsT3JDb25zdCh2YXJGaW5hbE9yQ29uc3Q/LmxleGVtZSk7CiAgICBzdXBlci5wdXNoKGN1cnJlbnRMb2NhbFZhcmlhYmxlTW9kaWZpZXJzKTsKICAgIHN1cGVyLnB1c2goY3VycmVudExvY2FsVmFyaWFibGVUeXBlID8/IE51bGxWYWx1ZS5UeXBlKTsKICAgIGN1cnJlbnRMb2NhbFZhcmlhYmxlVHlwZSA9IHR5cGU7CiAgICBjdXJyZW50TG9jYWxWYXJpYWJsZU1vZGlmaWVycyA9IG1vZGlmaWVyczsKICAgIHN1cGVyLnB1c2goY29uc3RhbnRDb250ZXh0KTsKICAgIGNvbnN0YW50Q29udGV4dCA9ICgobW9kaWZpZXJzICYgY29uc3RNYXNrKSAhPSAwKQogICAgICAgID8gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkCiAgICAgICAgOiBDb25zdGFudENvbnRleHQubm9uZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVmFyaWFibGVzRGVjbGFyYXRpb24oaW50IGNvdW50LCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiVmFyaWFibGVzRGVjbGFyYXRpb24iKTsKICAgIGlmIChjb3VudCA9PSAxKSB7CiAgICAgIE9iamVjdCBub2RlID0gcG9wKCk7CiAgICAgIGNvbnN0YW50Q29udGV4dCA9IHBvcCgpOwogICAgICBjdXJyZW50TG9jYWxWYXJpYWJsZVR5cGUgPSBwb3AoKTsKICAgICAgY3VycmVudExvY2FsVmFyaWFibGVNb2RpZmllcnMgPSBwb3AoKTsKICAgICAgTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9ucyA9IHBvcCgpOwogICAgICBpZiAobm9kZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICAgIHB1c2gobm9kZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBub2RlOwogICAgICBpZiAoYW5ub3RhdGlvbnMgIT0gbnVsbCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYW5ub3RhdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHZhcmlhYmxlLmFkZEFubm90YXRpb24oYW5ub3RhdGlvbnNbaV0pOwogICAgICAgIH0KICAgICAgICAodmFyaWFibGVzV2l0aE1ldGFkYXRhID8/PSA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXSkuYWRkKHZhcmlhYmxlKTsKICAgICAgfQogICAgICBwdXNoKHZhcmlhYmxlKTsKICAgIH0gZWxzZSB7CiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzID0KICAgICAgICAgIGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+KCkucG9wKHN0YWNrLCBjb3VudCk7CiAgICAgIGNvbnN0YW50Q29udGV4dCA9IHBvcCgpOwogICAgICBjdXJyZW50TG9jYWxWYXJpYWJsZVR5cGUgPSBwb3AoKTsKICAgICAgY3VycmVudExvY2FsVmFyaWFibGVNb2RpZmllcnMgPSBwb3AoKTsKICAgICAgTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9ucyA9IHBvcCgpOwogICAgICBpZiAodmFyaWFibGVzID09IG51bGwpIHsKICAgICAgICBwdXNoKG5ldyBQYXJzZXJSZWNvdmVyeShvZmZzZXRGb3JUb2tlbihlbmRUb2tlbikpKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGFubm90YXRpb25zICE9IG51bGwpIHsKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGZpcnN0ID0gdmFyaWFibGVzLmZpcnN0OwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYW5ub3RhdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGZpcnN0LmFkZEFubm90YXRpb24oYW5ub3RhdGlvbnNbaV0pOwogICAgICAgIH0KICAgICAgICAobXVsdGlWYXJpYWJsZXNXaXRoTWV0YWRhdGEgPz89IDxMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+PltdKQogICAgICAgICAgICAuYWRkKHZhcmlhYmxlcyk7CiAgICAgIH0KICAgICAgcHVzaChmb3Jlc3QudmFyaWFibGVzRGVjbGFyYXRpb24odmFyaWFibGVzLCB1cmkpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQmxvY2soaW50IGNvdW50LCBUb2tlbiBvcGVuQnJhY2UsIFRva2VuIGNsb3NlQnJhY2UpIHsKICAgIGRlYnVnRXZlbnQoIkJsb2NrIik7CiAgICBTdGF0ZW1lbnQgYmxvY2sgPSBwb3BCbG9jayhjb3VudCwgb3BlbkJyYWNlLCBjbG9zZUJyYWNlKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBwdXNoKGJsb2NrKTsKICB9CgogIHZvaWQgaGFuZGxlSW52YWxpZFRvcExldmVsQmxvY2soVG9rZW4gdG9rZW4pIHsKICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciBpbXByb3ZlZCByZWNvdmVyeSBieSBhZGRpbmcgdGhpcyBibG9jawogICAgLy8gYXMgcGFydCBvZiBhIHN5bnRoZXRpYyB0b3AgbGV2ZWwgZnVuY3Rpb24uCiAgICBwb3AoKTsgLy8gYmxvY2sKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQXNzaWdubWVudEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkFzc2lnbm1lbnRFeHByZXNzaW9uIik7CiAgICBFeHByZXNzaW9uIHZhbHVlID0gcG9wRm9yVmFsdWUoKTsKICAgIE9iamVjdCBnZW5lcmF0b3IgPSBwb3AoKTsKICAgIGlmIChnZW5lcmF0b3IgaXMhIEdlbmVyYXRvcikgewogICAgICBwdXNoKGJ1aWxkUHJvYmxlbShmYXN0YS5tZXNzYWdlTm90QW5MdmFsdWUsIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICAgIGxlbmd0aEZvclRva2VuKHRva2VuKSkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChuZXcgRGVsYXllZEFzc2lnbm1lbnQoCiAgICAgICAgICB0aGlzLCB0b2tlbiwgZ2VuZXJhdG9yLCB2YWx1ZSwgdG9rZW4uc3RyaW5nVmFsdWUpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW50ZXJMb29wKGludCBjaGFyT2Zmc2V0KSB7CiAgICBpZiAocGVlaygpIGlzIExhYmVsVGFyZ2V0KSB7CiAgICAgIExhYmVsVGFyZ2V0IHRhcmdldCA9IHBlZWsoKTsKICAgICAgZW50ZXJCcmVha1RhcmdldChjaGFyT2Zmc2V0LCB0YXJnZXQuYnJlYWtUYXJnZXQpOwogICAgICBlbnRlckNvbnRpbnVlVGFyZ2V0KGNoYXJPZmZzZXQsIHRhcmdldC5jb250aW51ZVRhcmdldCk7CiAgICB9IGVsc2UgewogICAgICBlbnRlckJyZWFrVGFyZ2V0KGNoYXJPZmZzZXQpOwogICAgICBlbnRlckNvbnRpbnVlVGFyZ2V0KGNoYXJPZmZzZXQpOwogICAgfQogIH0KCiAgdm9pZCBleGl0TG9vcE9yU3dpdGNoKFN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgIGlmIChwcm9ibGVtSW5Mb29wT3JTd2l0Y2ggIT0gbnVsbCkgewogICAgICBwdXNoKHByb2JsZW1Jbkxvb3BPclN3aXRjaCk7CiAgICAgIHByb2JsZW1Jbkxvb3BPclN3aXRjaCA9IG51bGw7CiAgICB9IGVsc2UgewogICAgICBwdXNoKHN0YXRlbWVudCk7CiAgICB9CiAgfQoKICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IGJ1aWxkVmFyaWFibGVEZWNsYXJhdGlvbnModmFyaWFibGVPckV4cHJlc3Npb24pIHsKICAgIC8vIFRPRE8oYWhlKTogVGhpcyBjYW4gYmUgc2ltcGxpZmllZCBub3cgdGhhdCB3ZSBoYXZlIHRoZSBldmVudHMKICAgIC8vIGBoYW5kbGVGb3JJbml0aWFsaXplci4uLmAgZXZlbnRzLgogICAgaWYgKHZhcmlhYmxlT3JFeHByZXNzaW9uIGlzIEdlbmVyYXRvcikgewogICAgICB2YXJpYWJsZU9yRXhwcmVzc2lvbiA9IHZhcmlhYmxlT3JFeHByZXNzaW9uLmJ1aWxkRm9yRWZmZWN0KCk7CiAgICB9CiAgICBpZiAodmFyaWFibGVPckV4cHJlc3Npb24gaXMgVmFyaWFibGVEZWNsYXJhdGlvbikgewogICAgICByZXR1cm4gPFZhcmlhYmxlRGVjbGFyYXRpb24+W3ZhcmlhYmxlT3JFeHByZXNzaW9uXTsKICAgIH0gZWxzZSBpZiAodmFyaWFibGVPckV4cHJlc3Npb24gaXMgRXhwcmVzc2lvbikgewogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudC5mb3JFZmZlY3QoCiAgICAgICAgICB2YXJpYWJsZU9yRXhwcmVzc2lvbiwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwogICAgICByZXR1cm4gPFZhcmlhYmxlRGVjbGFyYXRpb24+W3ZhcmlhYmxlXTsKICAgIH0gZWxzZSBpZiAodmFyaWFibGVPckV4cHJlc3Npb24gaXMgRXhwcmVzc2lvblN0YXRlbWVudCkgewogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudC5mb3JFZmZlY3QoCiAgICAgICAgICB2YXJpYWJsZU9yRXhwcmVzc2lvbi5leHByZXNzaW9uLCBmdW5jdGlvbk5lc3RpbmdMZXZlbCk7CiAgICAgIHJldHVybiA8VmFyaWFibGVEZWNsYXJhdGlvbj5bdmFyaWFibGVdOwogICAgfSBlbHNlIGlmIChmb3Jlc3QuaXNWYXJpYWJsZXNEZWNsYXJhdGlvbih2YXJpYWJsZU9yRXhwcmVzc2lvbikpIHsKICAgICAgcmV0dXJuIGZvcmVzdAogICAgICAgICAgLnZhcmlhYmxlc0RlY2xhcmF0aW9uRXh0cmFjdERlY2xhcmF0aW9ucyh2YXJpYWJsZU9yRXhwcmVzc2lvbik7CiAgICB9IGVsc2UgaWYgKHZhcmlhYmxlT3JFeHByZXNzaW9uIGlzIExpc3Q8T2JqZWN0PikgewogICAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlcyA9IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdOwogICAgICBmb3IgKE9iamVjdCB2IGluIHZhcmlhYmxlT3JFeHByZXNzaW9uKSB7CiAgICAgICAgdmFyaWFibGVzLmFkZEFsbChidWlsZFZhcmlhYmxlRGVjbGFyYXRpb25zKHYpKTsKICAgICAgfQogICAgICByZXR1cm4gdmFyaWFibGVzOwogICAgfSBlbHNlIGlmICh2YXJpYWJsZU9yRXhwcmVzc2lvbiA9PSBudWxsKSB7CiAgICAgIHJldHVybiA8VmFyaWFibGVEZWNsYXJhdGlvbj5bXTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGb3JJbml0aWFsaXplckVtcHR5U3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGb3JJbml0aWFsaXplckVtcHR5U3RhdGVtZW50Iik7CiAgICBwdXNoKE51bGxWYWx1ZS5FeHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRm9ySW5pdGlhbGl6ZXJFeHByZXNzaW9uU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGb3JJbml0aWFsaXplckV4cHJlc3Npb25TdGF0ZW1lbnQiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRm9ySW5pdGlhbGl6ZXJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZvckluaXRpYWxpemVyTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZvckxvb3BQYXJ0cyhUb2tlbiBmb3JLZXl3b3JkLCBUb2tlbiBsZWZ0UGFyZW4sCiAgICAgIFRva2VuIGxlZnRTZXBhcmF0b3IsIGludCB1cGRhdGVFeHByZXNzaW9uQ291bnQpIHsKICAgIHB1c2goZm9yS2V5d29yZCk7CiAgICBwdXNoKGxlZnRQYXJlbik7CiAgICBwdXNoKGxlZnRTZXBhcmF0b3IpOwogICAgcHVzaCh1cGRhdGVFeHByZXNzaW9uQ291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JDb250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiRm9yQ29udHJvbEZsb3ciKTsKICAgIHZhciBlbnRyeSA9IHBvcCgpOwogICAgaW50IHVwZGF0ZUV4cHJlc3Npb25Db3VudCA9IHBvcCgpOwogICAgcG9wKCk7IC8vIGxlZnQgc2VwYXJhdG9yCiAgICBwb3AoKTsgLy8gbGVmdCBwYXJlbnRoZXNpcwogICAgVG9rZW4gZm9yVG9rZW4gPSBwb3AoKTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gdXBkYXRlcyA9IHBvcExpc3RGb3JFZmZlY3QodXBkYXRlRXhwcmVzc2lvbkNvdW50KTsKICAgIFN0YXRlbWVudCBjb25kaXRpb25TdGF0ZW1lbnQgPSBwb3BTdGF0ZW1lbnQoKTsgLy8gY29uZGl0aW9uCiAgICBPYmplY3QgdmFyaWFibGVPckV4cHJlc3Npb24gPSBwb3AoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CgogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlQ29udHJvbEZsb3dDb2xsZWN0aW9ucykgewogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogUmVwb3J0IGEgbW9yZSB1c2VyIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UKICAgICAgLy8gd2hlbiBhbiBleHBlcmltZW50IGlzIG5vdCBlbmFibGVkCiAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbi53aXRoQXJndW1lbnRzKGZvclRva2VuKSwKICAgICAgICAgIGZvclRva2VuLAogICAgICAgICAgZm9yVG9rZW4pOwogICAgICBwdXNoKGludmFsaWRDb2xsZWN0aW9uRWxlbWVudCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lKSB7CiAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUNhbnRVc2VDb250cm9sRmxvd09yU3ByZWFkQXNDb25zdGFudAogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGZvclRva2VuKSwKICAgICAgICAgIGZvclRva2VuLAogICAgICAgICAgZm9yVG9rZW4pOwogICAgICBwdXNoKGludmFsaWRDb2xsZWN0aW9uRWxlbWVudCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB0cmFuc2Zvcm1Db2xsZWN0aW9ucyA9IHRydWU7CiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlcyA9CiAgICAgICAgYnVpbGRWYXJpYWJsZURlY2xhcmF0aW9ucyh2YXJpYWJsZU9yRXhwcmVzc2lvbik7CiAgICBFeHByZXNzaW9uIGNvbmRpdGlvbjsKICAgIGlmIChmb3Jlc3QuaXNFeHByZXNzaW9uU3RhdGVtZW50KGNvbmRpdGlvblN0YXRlbWVudCkpIHsKICAgICAgY29uZGl0aW9uID0KICAgICAgICAgIGZvcmVzdC5nZXRFeHByZXNzaW9uRnJvbUV4cHJlc3Npb25TdGF0ZW1lbnQoY29uZGl0aW9uU3RhdGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChmb3Jlc3QuaXNFbXB0eVN0YXRlbWVudChjb25kaXRpb25TdGF0ZW1lbnQpKTsKICAgIH0KICAgIGlmIChlbnRyeSBpcyBNYXBFbnRyeSkgewogICAgICBwdXNoKGZvcmVzdC5mb3JNYXBFbnRyeSh2YXJpYWJsZXMsIGNvbmRpdGlvbiwgdXBkYXRlcywgZW50cnksIGZvclRva2VuKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGZvcmVzdC5mb3JFbGVtZW50KAogICAgICAgICAgdmFyaWFibGVzLCBjb25kaXRpb24sIHVwZGF0ZXMsIHRvVmFsdWUoZW50cnkpLCBmb3JUb2tlbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JTdGF0ZW1lbnQoVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZvclN0YXRlbWVudCIpOwogICAgU3RhdGVtZW50IGJvZHkgPSBwb3BTdGF0ZW1lbnQoKTsKCiAgICBpbnQgdXBkYXRlRXhwcmVzc2lvbkNvdW50ID0gcG9wKCk7CiAgICBUb2tlbiBsZWZ0U2VwYXJhdG9yID0gcG9wKCk7CiAgICBUb2tlbiBsZWZ0UGFyZW4gPSBwb3AoKTsKICAgIFRva2VuIGZvcktleXdvcmQgPSBwb3AoKTsKCiAgICBMaXN0PEV4cHJlc3Npb24+IHVwZGF0ZXMgPSBwb3BMaXN0Rm9yRWZmZWN0KHVwZGF0ZUV4cHJlc3Npb25Db3VudCk7CiAgICBTdGF0ZW1lbnQgY29uZGl0aW9uU3RhdGVtZW50ID0gcG9wU3RhdGVtZW50KCk7CiAgICBPYmplY3QgdmFyaWFibGVPckV4cHJlc3Npb24gPSBwb3AoKTsKICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzID0KICAgICAgICBidWlsZFZhcmlhYmxlRGVjbGFyYXRpb25zKHZhcmlhYmxlT3JFeHByZXNzaW9uKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBKdW1wVGFyZ2V0IGNvbnRpbnVlVGFyZ2V0ID0gZXhpdENvbnRpbnVlVGFyZ2V0KCk7CiAgICBKdW1wVGFyZ2V0IGJyZWFrVGFyZ2V0ID0gZXhpdEJyZWFrVGFyZ2V0KCk7CiAgICBpZiAoY29udGludWVUYXJnZXQuaGFzVXNlcnMpIHsKICAgICAgYm9keSA9IGZvcmVzdC5zeW50aGV0aWNMYWJlbGVkU3RhdGVtZW50KGJvZHkpOwogICAgICBjb250aW51ZVRhcmdldC5yZXNvbHZlQ29udGludWVzKGZvcmVzdCwgYm9keSk7CiAgICB9CiAgICBFeHByZXNzaW9uIGNvbmRpdGlvbjsKICAgIGlmIChmb3Jlc3QuaXNFeHByZXNzaW9uU3RhdGVtZW50KGNvbmRpdGlvblN0YXRlbWVudCkpIHsKICAgICAgY29uZGl0aW9uID0KICAgICAgICAgIGZvcmVzdC5nZXRFeHByZXNzaW9uRnJvbUV4cHJlc3Npb25TdGF0ZW1lbnQoY29uZGl0aW9uU3RhdGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChmb3Jlc3QuaXNFbXB0eVN0YXRlbWVudChjb25kaXRpb25TdGF0ZW1lbnQpKTsKICAgIH0KICAgIFN0YXRlbWVudCByZXN1bHQgPSBmb3Jlc3QuZm9yU3RhdGVtZW50KAogICAgICAgIGZvcktleXdvcmQsCiAgICAgICAgbGVmdFBhcmVuLAogICAgICAgIHZhcmlhYmxlcywKICAgICAgICBsZWZ0U2VwYXJhdG9yLAogICAgICAgIGNvbmRpdGlvbiwKICAgICAgICBjb25kaXRpb25TdGF0ZW1lbnQsCiAgICAgICAgdXBkYXRlcywKICAgICAgICBsZWZ0UGFyZW4uZW5kR3JvdXAsCiAgICAgICAgYm9keSk7CiAgICBpZiAoYnJlYWtUYXJnZXQuaGFzVXNlcnMpIHsKICAgICAgcmVzdWx0ID0gZm9yZXN0LnN5bnRoZXRpY0xhYmVsZWRTdGF0ZW1lbnQocmVzdWx0KTsKICAgICAgYnJlYWtUYXJnZXQucmVzb2x2ZUJyZWFrcyhmb3Jlc3QsIHJlc3VsdCk7CiAgICB9CiAgICBpZiAodmFyaWFibGVPckV4cHJlc3Npb24gaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHJvYmxlbUluTG9vcE9yU3dpdGNoID8/PSBidWlsZFByb2JsZW1TdGF0ZW1lbnQoCiAgICAgICAgICBmYXN0YS5tZXNzYWdlU3ludGhldGljVG9rZW4sIHZhcmlhYmxlT3JFeHByZXNzaW9uLmNoYXJPZmZzZXQsCiAgICAgICAgICBzdXBwcmVzc01lc3NhZ2U6IHRydWUpOwogICAgfQogICAgZXhpdExvb3BPclN3aXRjaChyZXN1bHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRBd2FpdEV4cHJlc3Npb24oVG9rZW4ga2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkF3YWl0RXhwcmVzc2lvbiIpOwogICAgcHVzaChmb3Jlc3QuYXdhaXRFeHByZXNzaW9uKHBvcEZvclZhbHVlKCksIGtleXdvcmQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW52YWxpZEF3YWl0RXhwcmVzc2lvbigKICAgICAgVG9rZW4ga2V5d29yZCwgVG9rZW4gZW5kVG9rZW4sIGZhc3RhLk1lc3NhZ2VDb2RlIGVycm9yQ29kZSkgewogICAgZGVidWdFdmVudCgiQXdhaXRFeHByZXNzaW9uIik7CiAgICBwb3BGb3JWYWx1ZSgpOwogICAgcHVzaChidWlsZFByb2JsZW0oZXJyb3JDb2RlLCBrZXl3b3JkLm9mZnNldCwga2V5d29yZC5sZW5ndGgpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQXN5bmNNb2RpZmllcihUb2tlbiBhc3luY1Rva2VuLCBUb2tlbiBzdGFyVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkFzeW5jTW9kaWZpZXIiKTsKICAgIHB1c2goYXN5bmNNYXJrZXJGcm9tVG9rZW5zKGFzeW5jVG9rZW4sIHN0YXJUb2tlbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMaXRlcmFsTGlzdCgKICAgICAgaW50IGNvdW50LCBUb2tlbiBsZWZ0QnJhY2tldCwgVG9rZW4gY29uc3RLZXl3b3JkLCBUb2tlbiByaWdodEJyYWNrZXQpIHsKICAgIGRlYnVnRXZlbnQoIkxpdGVyYWxMaXN0Iik7CgogICAgLy8gVE9ETyhkYW5ydWJlbCk6IFJlcGxhY2UgdGhpcyB3aXRoIHBvcExpc3RGb3JWYWx1ZQogICAgLy8gd2hlbiBjb250cm9sIGZsb3cgYW5kIHNwcmVhZCBjb2xsZWN0aW9ucyBoYXZlIGJlZW4gZW5hYmxlZCBieSBkZWZhdWx0CiAgICBMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zID0KICAgICAgICBuZXcgTGlzdDxFeHByZXNzaW9uPi5maWxsZWQoY291bnQsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSBjb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIHZhciBlbGVtID0gcG9wKCk7CiAgICAgIGlmIChlbGVtICE9IGludmFsaWRDb2xsZWN0aW9uRWxlbWVudCkgewogICAgICAgIGV4cHJlc3Npb25zW2ldID0gdG9WYWx1ZShlbGVtKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBleHByZXNzaW9ucy5yZW1vdmVBdChpKTsKICAgICAgfQogICAgfQoKICAgIExpc3Q8VW5yZXNvbHZlZFR5cGU+IHR5cGVBcmd1bWVudHMgPSBwb3AoKTsKCiAgICBEYXJ0VHlwZSB0eXBlQXJndW1lbnQ7CiAgICBpZiAodHlwZUFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCA+IDEpIHsKICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICBmYXN0YS5tZXNzYWdlTGlzdExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50cywKICAgICAgICAgICAgb2Zmc2V0Rm9yVG9rZW4obGVmdEJyYWNrZXQpLAogICAgICAgICAgICBsZW5ndGhPZlNwYW4obGVmdEJyYWNrZXQsIGxlZnRCcmFja2V0LmVuZEdyb3VwKSk7CiAgICAgICAgdHlwZUFyZ3VtZW50ID0gY29uc3QgSW52YWxpZFR5cGUoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0eXBlQXJndW1lbnQgPSBidWlsZERhcnRUeXBlKHR5cGVBcmd1bWVudHMuc2luZ2xlKTsKICAgICAgICBpZiAoIWxlZ2FjeU1vZGUpIHsKICAgICAgICAgIHR5cGVBcmd1bWVudCA9CiAgICAgICAgICAgICAgaW5zdGFudGlhdGVUb0JvdW5kcyh0eXBlQXJndW1lbnQsIGNvcmVUeXBlcy5vYmplY3RDbGFzcyk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0eXBlQXJndW1lbnQgPSBpbXBsaWNpdFR5cGVBcmd1bWVudDsKICAgIH0KCiAgICBFeHByZXNzaW9uIG5vZGUgPSBmb3Jlc3QubGl0ZXJhbExpc3QoCiAgICAgICAgY29uc3RLZXl3b3JkLAogICAgICAgIGNvbnN0S2V5d29yZCAhPSBudWxsIHx8IGNvbnN0YW50Q29udGV4dCA9PSBDb25zdGFudENvbnRleHQuaW5mZXJyZWQsCiAgICAgICAgdHlwZUFyZ3VtZW50LAogICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgbGVmdEJyYWNrZXQsCiAgICAgICAgZXhwcmVzc2lvbnMsCiAgICAgICAgcmlnaHRCcmFja2V0KTsKICAgIGxpYnJhcnkuY2hlY2tCb3VuZHNJbkxpc3RMaXRlcmFsKG5vZGUsIHR5cGVFbnZpcm9ubWVudCwgdXJpKTsKICAgIHB1c2gobm9kZSk7CiAgfQoKICB2b2lkIGJ1aWxkTGl0ZXJhbFNldChMaXN0PFVucmVzb2x2ZWRUeXBlPiB0eXBlQXJndW1lbnRzLCBUb2tlbiBjb25zdEtleXdvcmQsCiAgICAgIFRva2VuIGxlZnRCcmFjZSwgTGlzdDxkeW5hbWljPiBzZXRPck1hcEVudHJpZXMpIHsKICAgIERhcnRUeXBlIHR5cGVBcmd1bWVudDsKICAgIGlmICh0eXBlQXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgdHlwZUFyZ3VtZW50ID0gYnVpbGREYXJ0VHlwZSh0eXBlQXJndW1lbnRzLnNpbmdsZSk7CiAgICAgIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmxlZ2FjeU1vZGUpIHsKICAgICAgICB0eXBlQXJndW1lbnQgPSBpbnN0YW50aWF0ZVRvQm91bmRzKHR5cGVBcmd1bWVudCwgY29yZVR5cGVzLm9iamVjdENsYXNzKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdHlwZUFyZ3VtZW50ID0gaW1wbGljaXRUeXBlQXJndW1lbnQ7CiAgICB9CgogICAgdmFyIGV4cHJlc3Npb25zID0gPEV4cHJlc3Npb24+W107CiAgICBpZiAoc2V0T3JNYXBFbnRyaWVzICE9IG51bGwpIHsKICAgICAgZm9yICh2YXIgZW50cnkgaW4gc2V0T3JNYXBFbnRyaWVzKSB7CiAgICAgICAgaWYgKGVudHJ5IGlzIE1hcEVudHJ5KSB7CiAgICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogcmVwb3J0IHRoZSBlcnJvciBvbiB0aGUgY29sb24KICAgICAgICAgIGFkZFByb2JsZW0oZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCcsJyksCiAgICAgICAgICAgICAgZW50cnkuZmlsZU9mZnNldCwgMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBSZXZpc2Ugb25jZSBjb250cm9sIGZsb3cgYW5kIHNwcmVhZAogICAgICAgICAgLy8gIGNvbGxlY3Rpb24gZW50cmllcyBhcmUgc3VwcG9ydGVkLgogICAgICAgICAgZXhwcmVzc2lvbnMuYWRkKGVudHJ5IGFzIEV4cHJlc3Npb24pOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIEV4cHJlc3Npb24gbm9kZSA9IGZvcmVzdC5saXRlcmFsU2V0KAogICAgICAgIGNvbnN0S2V5d29yZCwKICAgICAgICBjb25zdEtleXdvcmQgIT0gbnVsbCB8fCBjb25zdGFudENvbnRleHQgPT0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkLAogICAgICAgIHR5cGVBcmd1bWVudCwKICAgICAgICB0eXBlQXJndW1lbnRzLAogICAgICAgIGxlZnRCcmFjZSwKICAgICAgICBleHByZXNzaW9ucywKICAgICAgICBsZWZ0QnJhY2UuZW5kR3JvdXApOwogICAgbGlicmFyeS5jaGVja0JvdW5kc0luU2V0TGl0ZXJhbChub2RlLCB0eXBlRW52aXJvbm1lbnQsIHVyaSk7CiAgICBwdXNoKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMaXRlcmFsU2V0T3JNYXAoCiAgICBpbnQgY291bnQsCiAgICBUb2tlbiBsZWZ0QnJhY2UsCiAgICBUb2tlbiBjb25zdEtleXdvcmQsCiAgICBUb2tlbiByaWdodEJyYWNlLAogICAgLy8gVE9ETyhkYW5ydWJlbCk6IGhhc1NldEVudHJ5IHBhcmFtZXRlciBleGlzdHMgZm9yIHJlcGxpY2F0aW5nIGV4aXN0aW5nCiAgICAvLyBiZWhhdmlvciBhbmQgd2lsbCBiZSByZW1vdmVkIG9uY2UgdW5pZmllZCBjb2xsZWN0aW9uIGhhcyBiZWVuIGVuYWJsZWQKICAgIGJvb2wgaGFzU2V0RW50cnksCiAgKSB7CiAgICBkZWJ1Z0V2ZW50KCJMaXRlcmFsU2V0T3JNYXAiKTsKCiAgICB2YXIgc2V0T3JNYXBFbnRyaWVzID0gbmV3IExpc3Q8ZHluYW1pYz4uZmlsbGVkKGNvdW50LCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gY291bnQgLSAxOyBpID49IDA7IGktLSkgewogICAgICB2YXIgZWxlbSA9IHBvcCgpOwogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogUmV2aXNlIHRoaXMgdG8gaGFuZGxlIGNvbnRyb2wgZmxvdyBhbmQgc3ByZWFkCiAgICAgIGlmIChlbGVtID09IGludmFsaWRDb2xsZWN0aW9uRWxlbWVudCkgewogICAgICAgIHNldE9yTWFwRW50cmllcy5yZW1vdmVBdChpKTsKICAgICAgfSBlbHNlIGlmIChlbGVtIGlzIE1hcEVudHJ5KSB7CiAgICAgICAgc2V0T3JNYXBFbnRyaWVzW2ldID0gZWxlbTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzZXRPck1hcEVudHJpZXNbaV0gPSB0b1ZhbHVlKGVsZW0pOwogICAgICB9CiAgICB9CiAgICBMaXN0PFVucmVzb2x2ZWRUeXBlPiB0eXBlQXJndW1lbnRzID0gcG9wKCk7CgogICAgLy8gUmVwbGljYXRlIGV4aXN0aW5nIGJlaGF2aW9yIHRoYXQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwYXJzZXIuCiAgICAvLyBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHVuaWZpZWQgY29sbGVjdGlvbnMgaXMgaW1wbGVtZW50ZWQuCgogICAgLy8gRGV0ZXJtaW5lIGlmIHRoaXMgaXMgYSBzZXQgb3IgbWFwIGJhc2VkIG9uIHR5cGUgYXJncyBhbmQgY29udGVudAogICAgLy8gVE9ETyhkYW5ydWJlbCk6IFNpbmNlIHR5cGUgcmVzb2x1dGlvbiBpcyBuZWVkZWQgdG8gZGlzYW1iaWd1YXRlCiAgICAvLyBzZXQgb3IgbWFwIGluIHNvbWUgc2l0dWF0aW9ucywgY29uc2lkZXIgYWx3YXlzIGRlZmVycmluZyBkZXRlcm1pbmF0aW9uCiAgICAvLyB1bnRpbCB0aGUgdHlwZSByZXNvbHV0aW9uIHBoYXNlLgogICAgZmluYWwgdHlwZUFyZ0NvdW50ID0gdHlwZUFyZ3VtZW50cz8ubGVuZ3RoOwogICAgYm9vbCBpc1NldCA9IHR5cGVBcmdDb3VudCA9PSAxID8gdHJ1ZSA6IHR5cGVBcmdDb3VudCAhPSBudWxsID8gZmFsc2UgOiBudWxsOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2V0T3JNYXBFbnRyaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgIGlmIChzZXRPck1hcEVudHJpZXNbaV0gaXMhIE1hcEVudHJ5ICYmCiAgICAgICAgICAhaXNDb252ZXJ0aWJsZVRvTWFwRW50cnkoc2V0T3JNYXBFbnRyaWVzW2ldKSkgewogICAgICAgIGhhc1NldEVudHJ5ID0gdHJ1ZTsKICAgICAgfQogICAgfQoKICAgIC8vIFRPRE8oZGFucnViZWwpOiBJZiB0aGUgdHlwZSBhcmd1bWVudHMgYXJlIG5vdCBrbm93biAobnVsbCkgdGhlbgogICAgLy8gZGVmZXIgc2V0L21hcCBkZXRlcm1pbmF0aW9uIHVudGlsIGFmdGVyIHR5cGUgcmVzb2x1dGlvbiBhcyBwZXIgdGhlCiAgICAvLyB1bmlmaWVkIGNvbGxlY3Rpb24gc3BlYzogaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9sYW5ndWFnZS9wdWxsLzIwMAogICAgLy8gcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGd1ZXNzIGFzIGRvbmUgYmVsb3cuCiAgICBpc1NldCA/Pz0gaGFzU2V0RW50cnk7CgogICAgaWYgKGlzU2V0KSB7CiAgICAgIGJ1aWxkTGl0ZXJhbFNldCh0eXBlQXJndW1lbnRzLCBjb25zdEtleXdvcmQsIGxlZnRCcmFjZSwgc2V0T3JNYXBFbnRyaWVzKTsKICAgIH0gZWxzZSB7CiAgICAgIExpc3Q8TWFwRW50cnk+IG1hcEVudHJpZXMgPSBuZXcgTGlzdDxNYXBFbnRyeT4oc2V0T3JNYXBFbnRyaWVzLmxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2V0T3JNYXBFbnRyaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgaWYgKHNldE9yTWFwRW50cmllc1tpXSBpcyBNYXBFbnRyeSkgewogICAgICAgICAgbWFwRW50cmllc1tpXSA9IHNldE9yTWFwRW50cmllc1tpXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWFwRW50cmllc1tpXSA9IGNvbnZlcnRUb01hcEVudHJ5KHNldE9yTWFwRW50cmllc1tpXSwgdGhpcyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGJ1aWxkTGl0ZXJhbE1hcCh0eXBlQXJndW1lbnRzLCBjb25zdEtleXdvcmQsIGxlZnRCcmFjZSwgbWFwRW50cmllcyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxpdGVyYWxCb29sKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJMaXRlcmFsQm9vbCIpOwogICAgYm9vbCB2YWx1ZSA9IG9wdGlvbmFsKCJ0cnVlIiwgdG9rZW4pOwogICAgYXNzZXJ0KHZhbHVlIHx8IG9wdGlvbmFsKCJmYWxzZSIsIHRva2VuKSk7CiAgICBwdXNoKGZvcmVzdC5saXRlcmFsQm9vbCh2YWx1ZSwgdG9rZW4pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTGl0ZXJhbERvdWJsZShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTGl0ZXJhbERvdWJsZSIpOwogICAgcHVzaChmb3Jlc3QubGl0ZXJhbERvdWJsZShkb3VibGUucGFyc2UodG9rZW4ubGV4ZW1lKSwgdG9rZW4pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTGl0ZXJhbE51bGwoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkxpdGVyYWxOdWxsIik7CiAgICBwdXNoKGZvcmVzdC5saXRlcmFsTnVsbCh0b2tlbikpOwogIH0KCiAgdm9pZCBidWlsZExpdGVyYWxNYXAoTGlzdDxVbnJlc29sdmVkVHlwZT4gdHlwZUFyZ3VtZW50cywgVG9rZW4gY29uc3RLZXl3b3JkLAogICAgICBUb2tlbiBsZWZ0QnJhY2UsIExpc3Q8TWFwRW50cnk+IGVudHJpZXMpIHsKICAgIERhcnRUeXBlIGtleVR5cGU7CiAgICBEYXJ0VHlwZSB2YWx1ZVR5cGU7CiAgICBpZiAodHlwZUFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7CiAgICAgICAga2V5VHlwZSA9IGNvbnN0IEludmFsaWRUeXBlKCk7CiAgICAgICAgdmFsdWVUeXBlID0gY29uc3QgSW52YWxpZFR5cGUoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBrZXlUeXBlID0gYnVpbGREYXJ0VHlwZSh0eXBlQXJndW1lbnRzWzBdKTsKICAgICAgICB2YWx1ZVR5cGUgPSBidWlsZERhcnRUeXBlKHR5cGVBcmd1bWVudHNbMV0pOwogICAgICAgIGlmICghbGVnYWN5TW9kZSkgewogICAgICAgICAga2V5VHlwZSA9IGluc3RhbnRpYXRlVG9Cb3VuZHMoa2V5VHlwZSwgY29yZVR5cGVzLm9iamVjdENsYXNzKTsKICAgICAgICAgIHZhbHVlVHlwZSA9IGluc3RhbnRpYXRlVG9Cb3VuZHModmFsdWVUeXBlLCBjb3JlVHlwZXMub2JqZWN0Q2xhc3MpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgRGFydFR5cGUgaW1wbGljaXRUeXBlQXJndW1lbnQgPSB0aGlzLmltcGxpY2l0VHlwZUFyZ3VtZW50OwogICAgICBrZXlUeXBlID0gaW1wbGljaXRUeXBlQXJndW1lbnQ7CiAgICAgIHZhbHVlVHlwZSA9IGltcGxpY2l0VHlwZUFyZ3VtZW50OwogICAgfQoKICAgIEV4cHJlc3Npb24gbm9kZSA9IGZvcmVzdC5saXRlcmFsTWFwKAogICAgICAgIGNvbnN0S2V5d29yZCwKICAgICAgICBjb25zdEtleXdvcmQgIT0gbnVsbCB8fCBjb25zdGFudENvbnRleHQgPT0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkLAogICAgICAgIGtleVR5cGUsCiAgICAgICAgdmFsdWVUeXBlLAogICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgbGVmdEJyYWNlLAogICAgICAgIGVudHJpZXMsCiAgICAgICAgbGVmdEJyYWNlLmVuZEdyb3VwKTsKICAgIGxpYnJhcnkuY2hlY2tCb3VuZHNJbk1hcExpdGVyYWwobm9kZSwgdHlwZUVudmlyb25tZW50LCB1cmkpOwogICAgcHVzaChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTGl0ZXJhbE1hcEVudHJ5KFRva2VuIGNvbG9uLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiTGl0ZXJhbE1hcEVudHJ5Iik7CiAgICBFeHByZXNzaW9uIHZhbHVlID0gcG9wRm9yVmFsdWUoKTsKICAgIEV4cHJlc3Npb24ga2V5ID0gcG9wRm9yVmFsdWUoKTsKICAgIHB1c2goZm9yZXN0Lm1hcEVudHJ5KGtleSwgY29sb24sIHZhbHVlKSk7CiAgfQoKICBTdHJpbmcgc3ltYm9sUGFydFRvU3RyaW5nKG5hbWUpIHsKICAgIGlmIChuYW1lIGlzIElkZW50aWZpZXIpIHsKICAgICAgcmV0dXJuIG5hbWUubmFtZTsKICAgIH0gZWxzZSBpZiAobmFtZSBpcyBPcGVyYXRvcikgewogICAgICByZXR1cm4gbmFtZS5uYW1lOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHVuaGFuZGxlZCgiJHtuYW1lLnJ1bnRpbWVUeXBlfSIsICJzeW1ib2xQYXJ0VG9TdHJpbmciLCAtMSwgdXJpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTGl0ZXJhbFN5bWJvbChUb2tlbiBoYXNoVG9rZW4sIGludCBpZGVudGlmaWVyQ291bnQpIHsKICAgIGRlYnVnRXZlbnQoIkxpdGVyYWxTeW1ib2wiKTsKICAgIGlmIChpZGVudGlmaWVyQ291bnQgPT0gMSkgewogICAgICBPYmplY3QgcGFydCA9IHBvcCgpOwogICAgICBpZiAocGFydCBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICAgIHB1c2gobmV3IFBhcnNlckVycm9yR2VuZXJhdG9yKAogICAgICAgICAgICB0aGlzLCBoYXNoVG9rZW4sIGZhc3RhLm1lc3NhZ2VTeW50aGV0aWNUb2tlbikpOwogICAgICB9IGVsc2UgewogICAgICAgIHB1c2goZm9yZXN0LmxpdGVyYWxTeW1ib2xTaW5nbHVhcigKICAgICAgICAgICAgc3ltYm9sUGFydFRvU3RyaW5nKHBhcnQpLCBoYXNoVG9rZW4sIHBhcnQpKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgTGlzdDxJZGVudGlmaWVyPiBwYXJ0cyA9CiAgICAgICAgICBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxJZGVudGlmaWVyPigpLnBvcChzdGFjaywgaWRlbnRpZmllckNvdW50KTsKICAgICAgaWYgKHBhcnRzID09IG51bGwpIHsKICAgICAgICBwdXNoKG5ldyBQYXJzZXJFcnJvckdlbmVyYXRvcigKICAgICAgICAgICAgdGhpcywgaGFzaFRva2VuLCBmYXN0YS5tZXNzYWdlU3ludGhldGljVG9rZW4pKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgU3RyaW5nIHZhbHVlID0gc3ltYm9sUGFydFRvU3RyaW5nKHBhcnRzLmZpcnN0KTsKICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhbHVlICs9ICIuJHtzeW1ib2xQYXJ0VG9TdHJpbmcocGFydHNbaV0pfSI7CiAgICAgIH0KICAgICAgcHVzaChmb3Jlc3QubGl0ZXJhbFN5bWJvbE11bHRpcGxlKHZhbHVlLCBoYXNoVG9rZW4sIHBhcnRzKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vbk51bGxBc3NlcnRFeHByZXNzaW9uKFRva2VuIGJhbmcpIHsKICAgIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmVuYWJsZU5vbk51bGxhYmxlKSB7CiAgICAgIHJlcG9ydE5vbk51bGxBc3NlcnRFeHByZXNzaW9uTm90RW5hYmxlZChiYW5nKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVHlwZShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBxdWVzdGlvbk1hcmspIHsKICAgIC8vIFRPRE8oYWhlKTogVGhlIHNjb3BlIGlzIHdyb25nIGZvciByZXR1cm4gdHlwZXMgb2YgZ2VuZXJpYyBmdW5jdGlvbnMuCiAgICBkZWJ1Z0V2ZW50KCJUeXBlIik7CiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVOb25OdWxsYWJsZSkgewogICAgICByZXBvcnRFcnJvcklmTnVsbGFibGVUeXBlKHF1ZXN0aW9uTWFyayk7CiAgICB9CiAgICBMaXN0PFVucmVzb2x2ZWRUeXBlPiBhcmd1bWVudHMgPSBwb3AoKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBpZiAobmFtZSBpcyBRdWFsaWZpZWROYW1lKSB7CiAgICAgIFF1YWxpZmllZE5hbWUgcXVhbGlmaWVkID0gbmFtZTsKICAgICAgT2JqZWN0IHByZWZpeCA9IHF1YWxpZmllZC5xdWFsaWZpZXI7CiAgICAgIFRva2VuIHN1ZmZpeCA9IGRlcHJlY2F0ZWRfZXh0cmFjdFRva2VuKHF1YWxpZmllZCk7CiAgICAgIGlmIChwcmVmaXggaXMgR2VuZXJhdG9yKSB7CiAgICAgICAgbmFtZSA9IHByZWZpeC5xdWFsaWZpZWRMb29rdXAoc3VmZml4KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBTdHJpbmcgbmFtZSA9IGdldE5vZGVOYW1lKHByZWZpeCk7CiAgICAgICAgU3RyaW5nIGRpc3BsYXlOYW1lID0gZGVidWdOYW1lKG5hbWUsIHN1ZmZpeC5sZXhlbWUpOwogICAgICAgIGludCBvZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihiZWdpblRva2VuKTsKICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBmYXN0YS50ZW1wbGF0ZU5vdEFUeXBlLndpdGhBcmd1bWVudHMoZGlzcGxheU5hbWUpOwogICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgICAgbWVzc2FnZSwgb2Zmc2V0LCBsZW5ndGhPZlNwYW4oYmVnaW5Ub2tlbiwgc3VmZml4KSwgdXJpKTsKICAgICAgICBwdXNoKG5ldyBVbnJlc29sdmVkVHlwZSgKICAgICAgICAgICAgbmV3IE5hbWVkVHlwZUJ1aWxkZXIobmFtZSwgbnVsbCkKICAgICAgICAgICAgICAuLmJpbmQobmV3IEludmFsaWRUeXBlQnVpbGRlcigKICAgICAgICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgICAgICAgbWVzc2FnZS53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICB1cmksIG9mZnNldCwgbGVuZ3RoT2ZTcGFuKGJlZ2luVG9rZW4sIHN1ZmZpeCkpKSksCiAgICAgICAgICAgIG9mZnNldCwKICAgICAgICAgICAgdXJpKSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CiAgICBUeXBlQnVpbGRlciByZXN1bHQ7CiAgICBpZiAobmFtZSBpcyBHZW5lcmF0b3IpIHsKICAgICAgcmVzdWx0ID0gbmFtZS5idWlsZFR5cGVXaXRoUmVzb2x2ZWRBcmd1bWVudHMoYXJndW1lbnRzKTsKICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgICAgdW5oYW5kbGVkKCJudWxsIiwgInJlc3VsdCIsIGJlZ2luVG9rZW4uY2hhck9mZnNldCwgdXJpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChuYW1lIGlzIFByb2JsZW1CdWlsZGVyKSB7CiAgICAgIC8vIFRPRE8oYWhlKTogQXJndW1lbnRzIGNvdWxkIGJlIHBhc3NlZCBoZXJlLgogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICBuYW1lLm1lc3NhZ2UsIG5hbWUuY2hhck9mZnNldCwgbmFtZS5uYW1lLmxlbmd0aCwgbmFtZS5maWxlVXJpKTsKICAgICAgcmVzdWx0ID0gbmV3IE5hbWVkVHlwZUJ1aWxkZXIobmFtZS5uYW1lLCBudWxsKQogICAgICAgIC4uYmluZChuZXcgSW52YWxpZFR5cGVCdWlsZGVyKAogICAgICAgICAgICBuYW1lLm5hbWUsCiAgICAgICAgICAgIG5hbWUubWVzc2FnZS53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICBuYW1lLmZpbGVVcmksIG5hbWUuY2hhck9mZnNldCwgbmFtZS5uYW1lLmxlbmd0aCkpKTsKICAgIH0gZWxzZSB7CiAgICAgIHVuaGFuZGxlZCgKICAgICAgICAgICIke25hbWUucnVudGltZVR5cGV9IiwgImhhbmRsZVR5cGUiLCBiZWdpblRva2VuLmNoYXJPZmZzZXQsIHVyaSk7CiAgICB9CiAgICBwdXNoKG5ldyBVbnJlc29sdmVkVHlwZShyZXN1bHQsIGJlZ2luVG9rZW4uY2hhck9mZnNldCwgdXJpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRnVuY3Rpb25UeXBlKFRva2VuIGJlZ2luVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luRnVuY3Rpb25UeXBlIik7CiAgfQoKICB2b2lkIGVudGVyRnVuY3Rpb25UeXBlU2NvcGUoTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbnRlckZ1bmN0aW9uVHlwZVNjb3BlIik7CiAgICBlbnRlckxvY2FsU2NvcGUobnVsbCwKICAgICAgICBzY29wZS5jcmVhdGVOZXN0ZWRTY29wZSgiZnVuY3Rpb24tdHlwZSBzY29wZSIsIGlzTW9kaWZpYWJsZTogdHJ1ZSkpOwogICAgaWYgKHR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBTY29wZUJ1aWxkZXIgc2NvcGVCdWlsZGVyID0gbmV3IFNjb3BlQnVpbGRlcihzY29wZSk7CiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciBidWlsZGVyIGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgICBTdHJpbmcgbmFtZSA9IGJ1aWxkZXIubmFtZTsKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyIGV4aXN0aW5nID0gc2NvcGVCdWlsZGVyW25hbWVdOwogICAgICAgIGlmIChleGlzdGluZyA9PSBudWxsKSB7CiAgICAgICAgICBzY29wZUJ1aWxkZXIuYWRkTWVtYmVyKG5hbWUsIGJ1aWxkZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXBvcnREdXBsaWNhdGVkRGVjbGFyYXRpb24oZXhpc3RpbmcsIG5hbWUsIGJ1aWxkZXIuY2hhck9mZnNldCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZ1bmN0aW9uVHlwZShUb2tlbiBmdW5jdGlvblRva2VuLCBUb2tlbiBxdWVzdGlvbk1hcmspIHsKICAgIGRlYnVnRXZlbnQoIkZ1bmN0aW9uVHlwZSIpOwogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0RXJyb3JJZk51bGxhYmxlVHlwZShxdWVzdGlvbk1hcmspOwogICAgfQogICAgRm9ybWFsUGFyYW1ldGVycyBmb3JtYWxzID0gcG9wKCk7CiAgICBVbnJlc29sdmVkVHlwZSByZXR1cm5UeXBlID0gcG9wKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIFVucmVzb2x2ZWRUeXBlIHR5cGUgPSBmb3JtYWxzLnRvRnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHR5cGVWYXJpYWJsZXMpOwogICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIHB1c2godHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVZvaWRLZXl3b3JkKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJWb2lkS2V5d29yZCIpOwogICAgaW50IG9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIHB1c2gobmV3IFVucmVzb2x2ZWRUeXBlKAogICAgICAgIG5ldyBOYW1lZFR5cGVCdWlsZGVyKCJ2b2lkIiwgbnVsbCkKICAgICAgICAgIC4uYmluZChuZXcgVm9pZFR5cGVCdWlsZGVyKGNvbnN0IFZvaWRUeXBlKCksIGxpYnJhcnksIG9mZnNldCkpLAogICAgICAgIG9mZnNldCwKICAgICAgICB1cmkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQXNPcGVyYXRvcihUb2tlbiBvcGVyYXRvcikgewogICAgZGVidWdFdmVudCgiQXNPcGVyYXRvciIpOwogICAgRGFydFR5cGUgdHlwZSA9IGJ1aWxkRGFydFR5cGUocG9wKCkpOwogICAgbGlicmFyeS5jaGVja0JvdW5kc0luVHlwZSh0eXBlLCB0eXBlRW52aXJvbm1lbnQsIHVyaSwgb3BlcmF0b3IuY2hhck9mZnNldCk7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlQ29uc3RhbnRVcGRhdGUyMDE4ICYmCiAgICAgICAgY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lKSB7CiAgICAgIHB1c2goZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oYnVpbGRQcm9ibGVtKAogICAgICAgICAgZmFzdGEudGVtcGxhdGVOb3RDb25zdGFudEV4cHJlc3Npb24ud2l0aEFyZ3VtZW50cygnQXMgZXhwcmVzc2lvbicpLAogICAgICAgICAgb3BlcmF0b3IuY2hhck9mZnNldCwKICAgICAgICAgIG9wZXJhdG9yLmxlbmd0aCkpKTsKICAgIH0gZWxzZSB7CiAgICAgIEV4cHJlc3Npb24gbm9kZSA9IGZvcmVzdC5hc0V4cHJlc3Npb24oZXhwcmVzc2lvbiwgdHlwZSwgb3BlcmF0b3IpOwogICAgICBwdXNoKG5vZGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJc09wZXJhdG9yKFRva2VuIGlzT3BlcmF0b3IsIFRva2VuIG5vdCkgewogICAgZGVidWdFdmVudCgiSXNPcGVyYXRvciIpOwogICAgRGFydFR5cGUgdHlwZSA9IGJ1aWxkRGFydFR5cGUocG9wKCkpOwogICAgRXhwcmVzc2lvbiBvcGVyYW5kID0gcG9wRm9yVmFsdWUoKTsKICAgIGJvb2wgaXNJbnZlcnRlZCA9IG5vdCAhPSBudWxsOwogICAgRXhwcmVzc2lvbiBpc0V4cHJlc3Npb24gPQogICAgICAgIGZvcmVzdC5pc0V4cHJlc3Npb24ob3BlcmFuZCwgaXNPcGVyYXRvciwgbm90LCB0eXBlKTsKICAgIGxpYnJhcnkuY2hlY2tCb3VuZHNJblR5cGUoCiAgICAgICAgdHlwZSwgdHlwZUVudmlyb25tZW50LCB1cmksIGlzT3BlcmF0b3IuY2hhck9mZnNldCk7CiAgICBpZiAob3BlcmFuZCBpcyBWYXJpYWJsZUdldCkgewogICAgICB0eXBlUHJvbW90ZXI/LmhhbmRsZUlzQ2hlY2soaXNFeHByZXNzaW9uLCBpc0ludmVydGVkLCBvcGVyYW5kLnZhcmlhYmxlLAogICAgICAgICAgdHlwZSwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwogICAgfQogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlQ29uc3RhbnRVcGRhdGUyMDE4ICYmCiAgICAgICAgY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lKSB7CiAgICAgIHB1c2goZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oYnVpbGRQcm9ibGVtKAogICAgICAgICAgZmFzdGEudGVtcGxhdGVOb3RDb25zdGFudEV4cHJlc3Npb24ud2l0aEFyZ3VtZW50cygnSXMgZXhwcmVzc2lvbicpLAogICAgICAgICAgaXNPcGVyYXRvci5jaGFyT2Zmc2V0LAogICAgICAgICAgaXNPcGVyYXRvci5sZW5ndGgpKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGlzRXhwcmVzc2lvbik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ29uZGl0aW9uYWxFeHByZXNzaW9uKFRva2VuIHF1ZXN0aW9uKSB7CiAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBvcEZvclZhbHVlKCk7CiAgICB0eXBlUHJvbW90ZXI/LmVudGVyVGhlbihjb25kaXRpb24pOwogICAgcHVzaChjb25kaXRpb24pOwogICAgc3VwZXIuYmVnaW5Db25kaXRpb25hbEV4cHJlc3Npb24ocXVlc3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDb25kaXRpb25hbEV4cHJlc3Npb25Db2xvbigpIHsKICAgIEV4cHJlc3Npb24gdGhlbiA9IHBvcEZvclZhbHVlKCk7CiAgICB0eXBlUHJvbW90ZXI/LmVudGVyRWxzZSgpOwogICAgcHVzaCh0aGVuKTsKICAgIHN1cGVyLmhhbmRsZUNvbmRpdGlvbmFsRXhwcmVzc2lvbkNvbG9uKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbmRpdGlvbmFsRXhwcmVzc2lvbihUb2tlbiBxdWVzdGlvbiwgVG9rZW4gY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiIpOwogICAgRXhwcmVzc2lvbiBlbHNlRXhwcmVzc2lvbiA9IHBvcEZvclZhbHVlKCk7CiAgICBFeHByZXNzaW9uIHRoZW5FeHByZXNzaW9uID0gcG9wKCk7CiAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBvcCgpOwogICAgdHlwZVByb21vdGVyPy5leGl0Q29uZGl0aW9uYWwoKTsKICAgIHB1c2goZm9yZXN0LmNvbmRpdGlvbmFsRXhwcmVzc2lvbigKICAgICAgICBjb25kaXRpb24sIHF1ZXN0aW9uLCB0aGVuRXhwcmVzc2lvbiwgY29sb24sIGVsc2VFeHByZXNzaW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVRocm93RXhwcmVzc2lvbihUb2tlbiB0aHJvd1Rva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiVGhyb3dFeHByZXNzaW9uIik7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgaWYgKGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSkgewogICAgICBwdXNoKGJ1aWxkUHJvYmxlbSgKICAgICAgICAgIGZhc3RhLnRlbXBsYXRlTm90Q29uc3RhbnRFeHByZXNzaW9uLndpdGhBcmd1bWVudHMoJ1Rocm93JyksCiAgICAgICAgICB0aHJvd1Rva2VuLm9mZnNldCwKICAgICAgICAgIHRocm93VG9rZW4ubGVuZ3RoKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGZvcmVzdC50aHJvd0V4cHJlc3Npb24odGhyb3dUb2tlbiwgZXhwcmVzc2lvbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvcm1hbFBhcmFtZXRlcihUb2tlbiB0b2tlbiwgTWVtYmVyS2luZCBraW5kLCBUb2tlbiByZXF1aXJlZFRva2VuLAogICAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwgVG9rZW4gdmFyRmluYWxPckNvbnN0KSB7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogaGFuZGxlIHJlcXVpcmVkIHRva2VuCiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVOb25OdWxsYWJsZSkgewogICAgICByZXBvcnROb25OdWxsYWJsZU1vZGlmaWVyRXJyb3IocmVxdWlyZWRUb2tlbik7CiAgICB9CiAgICBwdXNoKChjb3ZhcmlhbnRUb2tlbiAhPSBudWxsID8gY292YXJpYW50TWFzayA6IDApIHwKICAgICAgICBNb2RpZmllci52YWxpZGF0ZVZhckZpbmFsT3JDb25zdCh2YXJGaW5hbE9yQ29uc3Q/LmxleGVtZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JtYWxQYXJhbWV0ZXIoCiAgICAgIFRva2VuIHRoaXNLZXl3b3JkLAogICAgICBUb2tlbiBwZXJpb2RBZnRlclRoaXMsCiAgICAgIFRva2VuIG5hbWVUb2tlbiwKICAgICAgVG9rZW4gaW5pdGlhbGl6ZXJTdGFydCwKICAgICAgVG9rZW4gaW5pdGlhbGl6ZXJFbmQsCiAgICAgIEZvcm1hbFBhcmFtZXRlcktpbmQga2luZCwKICAgICAgTWVtYmVyS2luZCBtZW1iZXJLaW5kKSB7CiAgICBkZWJ1Z0V2ZW50KCJGb3JtYWxQYXJhbWV0ZXIiKTsKICAgIGlmICh0aGlzS2V5d29yZCAhPSBudWxsKSB7CiAgICAgIGlmICghaW5Db25zdHJ1Y3RvcikgewogICAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoZmFzdGEubWVzc2FnZUZpZWxkSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3IsCiAgICAgICAgICAgIHRoaXNLZXl3b3JkLCB0aGlzS2V5d29yZCk7CiAgICAgICAgdGhpc0tleXdvcmQgPSBudWxsOwogICAgICB9CiAgICB9CiAgICBPYmplY3QgbmFtZU5vZGUgPSBwb3AoKTsKICAgIFVucmVzb2x2ZWRUeXBlIHR5cGUgPSBwb3AoKTsKICAgIGlmIChmdW5jdGlvbk5lc3RpbmdMZXZlbCA9PSAwKSB7CiAgICAgIC8vIFRPRE8oYWhlKTogVGhlIHR5cGUgd2UgY29tcHV0ZSBoZXJlIG1heSBiZSBkaWZmZXJlbnQgZnJvbSB3aGF0IGlzCiAgICAgIC8vIGNvbXB1dGVkIGluIHRoZSBvdXRsaW5lIHBoYXNlLiBXZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIG91dGxpbmUKICAgICAgLy8gcGhhc2UgY29tcHV0ZXMgdGhlIHNhbWUgdHlwZS4gU2VlCiAgICAgIC8vIHBrZy9mcm9udF9lbmQvdGVzdGNhc2VzL2RlZmVycmVkX3R5cGVfYW5ub3RhdGlvbi5kYXJ0IGZvciBhbiBleGFtcGxlCiAgICAgIC8vIHdoZXJlIG5vdCBjYWxsaW5nIFtidWlsZERhcnRUeXBlXSBsZWFkcyB0byBhIG1pc3NpbmcgY29tcGlsZS10aW1lCiAgICAgIC8vIGVycm9yLiBBbHNvLCBub3RpY2UgdGhhdCB0aGUgdHlwZSBvZiB0aGUgcHJvYmxlbWF0aWMgcGFyYW1ldGVyIGlzbid0CiAgICAgIC8vIGBpbnZhbGlkLXR5cGVgLgogICAgICBidWlsZERhcnRUeXBlKHR5cGUpOwogICAgfQogICAgaW50IG1vZGlmaWVycyA9IHBvcCgpOwogICAgaWYgKGluQ2F0Y2hDbGF1c2UpIHsKICAgICAgbW9kaWZpZXJzIHw9IGZpbmFsTWFzazsKICAgIH0KICAgIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMgPSBwb3AoKTsKICAgIGlmIChuYW1lTm9kZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKG5hbWVOb2RlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgSWRlbnRpZmllciBuYW1lID0gbmFtZU5vZGU7CiAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIHBhcmFtZXRlcjsKICAgIGlmICghaW5DYXRjaENsYXVzZSAmJgogICAgICAgIGZ1bmN0aW9uTmVzdGluZ0xldmVsID09IDAgJiYKICAgICAgICBtZW1iZXJLaW5kICE9IE1lbWJlcktpbmQuR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUpIHsKICAgICAgRnVuY3Rpb25CdWlsZGVyIG1lbWJlciA9IHRoaXMubWVtYmVyOwogICAgICBwYXJhbWV0ZXIgPSBtZW1iZXIuZ2V0Rm9ybWFsKG5hbWUubmFtZSk7CiAgICAgIGlmIChwYXJhbWV0ZXIgPT0gbnVsbCkgewogICAgICAgIHB1c2gobmV3IFBhcnNlclJlY292ZXJ5KG5hbWVUb2tlbi5jaGFyT2Zmc2V0KSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBwYXJhbWV0ZXIgPSBuZXcgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcihudWxsLCBtb2RpZmllcnMsIHR5cGU/LmJ1aWxkZXIsCiAgICAgICAgICBuYW1lPy5uYW1lLCBsaWJyYXJ5LCBvZmZzZXRGb3JUb2tlbihuYW1lVG9rZW4pKTsKICAgIH0KICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPQogICAgICAgIHBhcmFtZXRlci5idWlsZChsaWJyYXJ5LCBmdW5jdGlvbk5lc3RpbmdMZXZlbCk7CiAgICBFeHByZXNzaW9uIGluaXRpYWxpemVyID0gbmFtZT8uaW5pdGlhbGl6ZXI7CiAgICBpZiAoaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICBpZiAobWVtYmVyIGlzIFJlZGlyZWN0aW5nRmFjdG9yeUJ1aWxkZXIpIHsKICAgICAgICBSZWRpcmVjdGluZ0ZhY3RvcnlCdWlsZGVyIGZhY3RvcnkgPSBtZW1iZXI7CiAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVEZWZhdWx0VmFsdWVJblJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhmYWN0b3J5LnJlZGlyZWN0aW9uVGFyZ2V0LmZ1bGxOYW1lRm9yRXJyb3JzKSwKICAgICAgICAgICAgaW5pdGlhbGl6ZXIuZmlsZU9mZnNldCwKICAgICAgICAgICAgbm9MZW5ndGgpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhcmlhYmxlLmluaXRpYWxpemVyID0gaW5pdGlhbGl6ZXIuLnBhcmVudCA9IHZhcmlhYmxlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGtpbmQgIT0gRm9ybWFsUGFyYW1ldGVyS2luZC5tYW5kYXRvcnkpIHsKICAgICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIgPz89IGZvcmVzdC5saXRlcmFsTnVsbChudWxsKS4ucGFyZW50ID0gdmFyaWFibGU7CiAgICB9CiAgICBpZiAoYW5ub3RhdGlvbnMgIT0gbnVsbCkgewogICAgICBpZiAoZnVuY3Rpb25OZXN0aW5nTGV2ZWwgPT0gMCkgewogICAgICAgIGluZmVyQW5ub3RhdGlvbnMoYW5ub3RhdGlvbnMpOwogICAgICB9CiAgICAgIGZvciAoRXhwcmVzc2lvbiBhbm5vdGF0aW9uIGluIGFubm90YXRpb25zKSB7CiAgICAgICAgdmFyaWFibGUuYWRkQW5ub3RhdGlvbihhbm5vdGF0aW9uKTsKICAgICAgfQogICAgfQogICAgcHVzaChwYXJhbWV0ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnMoCiAgICAgIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVycyIpOwogICAgRm9ybWFsUGFyYW1ldGVyS2luZCBraW5kID0gb3B0aW9uYWwoInsiLCBiZWdpblRva2VuKQogICAgICAgID8gRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbE5hbWVkCiAgICAgICAgOiBGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsUG9zaXRpb25hbDsKICAgIC8vIFdoZW4gcmVjb3ZlcmluZyBmcm9tIGFuIGVtcHR5IGxpc3Qgb2Ygb3B0aW9uYWwgYXJndW1lbnRzLCBjb3VudCBtYXkgYmUKICAgIC8vIDAuIEl0IG1pZ2h0IGJlIHNpbXBsZXIgaWYgdGhlIHBhcnNlciBkaWRuJ3QgY2FsbCB0aGlzIG1ldGhvZCBpbiB0aGF0CiAgICAvLyBjYXNlLCBob3dldmVyLCB0aGVuIFtiZWdpbk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVyc10gd291bGRuJ3QgYWx3YXlzIGJlCiAgICAvLyBtYXRjaGVkIGJ5IHRoaXMgbWV0aG9kLgogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBwYXJhbWV0ZXJzID0KICAgICAgICBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPigpLnBvcChzdGFjaywgY291bnQpOwogICAgaWYgKHBhcmFtZXRlcnMgPT0gbnVsbCkgewogICAgICBwdXNoKG5ldyBQYXJzZXJSZWNvdmVyeShvZmZzZXRGb3JUb2tlbihiZWdpblRva2VuKSkpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIHBhcmFtZXRlciBpbiBwYXJhbWV0ZXJzKSB7CiAgICAgICAgcGFyYW1ldGVyLmtpbmQgPSBraW5kOwogICAgICB9CiAgICAgIHB1c2gocGFyYW1ldGVycyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlcihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5GdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyIik7CiAgICBmdW5jdGlvbk5lc3RpbmdMZXZlbCsrOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyKFRva2VuIG5hbWVUb2tlbiwgVG9rZW4gcXVlc3Rpb24pIHsKICAgIGRlYnVnRXZlbnQoIkZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIiKTsKICAgIGlmIChpbkNhdGNoQ2xhdXNlIHx8IGZ1bmN0aW9uTmVzdGluZ0xldmVsICE9IDApIHsKICAgICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIH0KICAgIEZvcm1hbFBhcmFtZXRlcnMgZm9ybWFscyA9IHBvcCgpOwogICAgVW5yZXNvbHZlZFR5cGUgcmV0dXJuVHlwZSA9IHBvcCgpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcG9wKCk7CiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVOb25OdWxsYWJsZSkgewogICAgICByZXBvcnRFcnJvcklmTnVsbGFibGVUeXBlKHF1ZXN0aW9uKTsKICAgIH0KICAgIFVucmVzb2x2ZWRUeXBlIHR5cGUgPSBmb3JtYWxzLnRvRnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHR5cGVWYXJpYWJsZXMpOwogICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIHB1c2godHlwZSk7CiAgICBmdW5jdGlvbk5lc3RpbmdMZXZlbC0tOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb24oKSB7CiAgICBzdXBlci5wdXNoKGNvbnN0YW50Q29udGV4dCk7CiAgICBjb25zdGFudENvbnRleHQgPSBDb25zdGFudENvbnRleHQucmVxdWlyZWQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb24oKSB7CiAgICBkZWJ1Z0V2ZW50KCJGb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uIik7CiAgICBPYmplY3QgZGVmYXVsdFZhbHVlRXhwcmVzc2lvbiA9IHBvcCgpOwogICAgY29uc3RhbnRDb250ZXh0ID0gcG9wKCk7CiAgICBwdXNoKGRlZmF1bHRWYWx1ZUV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVWYWx1ZWRGb3JtYWxQYXJhbWV0ZXIoVG9rZW4gZXF1YWxzLCBUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiVmFsdWVkRm9ybWFsUGFyYW1ldGVyIik7CiAgICBFeHByZXNzaW9uIGluaXRpYWxpemVyID0gcG9wRm9yVmFsdWUoKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChuZXcgSW5pdGlhbGl6ZWRJZGVudGlmaWVyKG5hbWUsIGluaXRpYWxpemVyKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZvcm1hbFBhcmFtZXRlcldpdGhvdXRWYWx1ZShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRm9ybWFsUGFyYW1ldGVycyhUb2tlbiB0b2tlbiwgTWVtYmVyS2luZCBraW5kKSB7CiAgICBzdXBlci5wdXNoKGNvbnN0YW50Q29udGV4dCk7CiAgICBjb25zdGFudENvbnRleHQgPSBDb25zdGFudENvbnRleHQubm9uZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ybWFsUGFyYW1ldGVycygKICAgICAgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbiwgTWVtYmVyS2luZCBraW5kKSB7CiAgICBkZWJ1Z0V2ZW50KCJGb3JtYWxQYXJhbWV0ZXJzIik7CiAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IG9wdGlvbmFsczsKICAgIGludCBvcHRpb25hbHNDb3VudCA9IDA7CiAgICBpZiAoY291bnQgPiAwICYmIHBlZWsoKSBpcyBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+KSB7CiAgICAgIG9wdGlvbmFscyA9IHBvcCgpOwogICAgICBjb3VudC0tOwogICAgICBvcHRpb25hbHNDb3VudCA9IG9wdGlvbmFscy5sZW5ndGg7CiAgICB9CiAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IHBhcmFtZXRlcnMgPQogICAgICAgIGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+KCkKICAgICAgICAgICAgLnBvcFBhZGRlZChzdGFjaywgY291bnQsIG9wdGlvbmFsc0NvdW50KTsKICAgIGlmIChvcHRpb25hbHMgIT0gbnVsbCAmJiBwYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgcGFyYW1ldGVycy5zZXRSYW5nZShjb3VudCwgY291bnQgKyBvcHRpb25hbHNDb3VudCwgb3B0aW9uYWxzKTsKICAgIH0KICAgIGFzc2VydChwYXJhbWV0ZXJzPy5pc05vdEVtcHR5ID8/IHRydWUpOwogICAgRm9ybWFsUGFyYW1ldGVycyBmb3JtYWxzID0gbmV3IEZvcm1hbFBhcmFtZXRlcnMocGFyYW1ldGVycywKICAgICAgICBvZmZzZXRGb3JUb2tlbihiZWdpblRva2VuKSwgbGVuZ3RoT2ZTcGFuKGJlZ2luVG9rZW4sIGVuZFRva2VuKSwgdXJpKTsKICAgIGNvbnN0YW50Q29udGV4dCA9IHBvcCgpOwogICAgcHVzaChmb3JtYWxzKTsKICAgIGlmICgoaW5DYXRjaENsYXVzZSB8fCBmdW5jdGlvbk5lc3RpbmdMZXZlbCAhPSAwKSAmJgogICAgICAgIGtpbmQgIT0gTWVtYmVyS2luZC5HZW5lcmFsaXplZEZ1bmN0aW9uVHlwZSkgewogICAgICBlbnRlckxvY2FsU2NvcGUoCiAgICAgICAgICBudWxsLAogICAgICAgICAgZm9ybWFscy5jb21wdXRlRm9ybWFsUGFyYW1ldGVyU2NvcGUoCiAgICAgICAgICAgICAgc2NvcGUsIG1lbWJlciA/PyBjbGFzc0J1aWxkZXIgPz8gbGlicmFyeSwgdGhpcykpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNhdGNoQ2xhdXNlKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkNhdGNoQ2xhdXNlIik7CiAgICBpbkNhdGNoQ2xhdXNlID0gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2F0Y2hDbGF1c2UoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkNhdGNoQ2xhdXNlIik7CiAgICBpbkNhdGNoQ2xhdXNlID0gZmFsc2U7CiAgICBwdXNoKGluQ2F0Y2hCbG9jayk7CiAgICBpbkNhdGNoQmxvY2sgPSB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDYXRjaEJsb2NrKFRva2VuIG9uS2V5d29yZCwgVG9rZW4gY2F0Y2hLZXl3b3JkLCBUb2tlbiBjb21tYSkgewogICAgZGVidWdFdmVudCgiQ2F0Y2hCbG9jayIpOwogICAgU3RhdGVtZW50IGJvZHkgPSBwb3AoKTsKICAgIGluQ2F0Y2hCbG9jayA9IHBvcCgpOwogICAgaWYgKGNhdGNoS2V5d29yZCAhPSBudWxsKSB7CiAgICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICB9CiAgICBGb3JtYWxQYXJhbWV0ZXJzIGNhdGNoUGFyYW1ldGVycyA9IHBvcElmTm90TnVsbChjYXRjaEtleXdvcmQpOwogICAgRGFydFR5cGUgZXhjZXB0aW9uVHlwZSA9CiAgICAgICAgYnVpbGREYXJ0VHlwZShwb3BJZk5vdE51bGwob25LZXl3b3JkKSkgPz8gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZXhjZXB0aW9uOwogICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBzdGFja1RyYWNlOwogICAgTGlzdDxTdGF0ZW1lbnQ+IGNvbXBpbGVUaW1lRXJyb3JzOwogICAgaWYgKGNhdGNoUGFyYW1ldGVycz8ucGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIGludCBwYXJhbWV0ZXJDb3VudCA9IGNhdGNoUGFyYW1ldGVycy5wYXJhbWV0ZXJzLmxlbmd0aDsKICAgICAgaWYgKHBhcmFtZXRlckNvdW50ID4gMCkgewogICAgICAgIGV4Y2VwdGlvbiA9IGNhdGNoUGFyYW1ldGVycy5wYXJhbWV0ZXJzWzBdOwogICAgICAgIGV4Y2VwdGlvbi5idWlsZChsaWJyYXJ5LCBmdW5jdGlvbk5lc3RpbmdMZXZlbCkudHlwZSA9IGV4Y2VwdGlvblR5cGU7CiAgICAgICAgaWYgKHBhcmFtZXRlckNvdW50ID4gMSkgewogICAgICAgICAgc3RhY2tUcmFjZSA9IGNhdGNoUGFyYW1ldGVycy5wYXJhbWV0ZXJzWzFdOwogICAgICAgICAgc3RhY2tUcmFjZS5idWlsZChsaWJyYXJ5LCBmdW5jdGlvbk5lc3RpbmdMZXZlbCkudHlwZSA9CiAgICAgICAgICAgICAgY29yZVR5cGVzLnN0YWNrVHJhY2VDbGFzcy5yYXdUeXBlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAocGFyYW1ldGVyQ291bnQgPiAyKSB7CiAgICAgICAgLy8gSWYgcGFyYW1ldGVyQ291bnQgaXMgMCwgdGhlIHBhcnNlciByZXBvcnRlZCBhbiBlcnJvciBhbHJlYWR5LgogICAgICAgIGlmIChwYXJhbWV0ZXJDb3VudCAhPSAwKSB7CiAgICAgICAgICBmb3IgKGludCBpID0gMjsgaSA8IHBhcmFtZXRlckNvdW50OyBpKyspIHsKICAgICAgICAgICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBwYXJhbWV0ZXIgPSBjYXRjaFBhcmFtZXRlcnMucGFyYW1ldGVyc1tpXTsKICAgICAgICAgICAgY29tcGlsZVRpbWVFcnJvcnMgPz89IDxTdGF0ZW1lbnQ+W107CiAgICAgICAgICAgIGNvbXBpbGVUaW1lRXJyb3JzLmFkZChidWlsZFByb2JsZW1TdGF0ZW1lbnQoCiAgICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlQ2F0Y2hTeW50YXhFeHRyYVBhcmFtZXRlcnMsIHBhcmFtZXRlci5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgbGVuZ3RoOiBwYXJhbWV0ZXIubmFtZS5sZW5ndGgpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHB1c2goZm9yZXN0LmNhdGNoQ2xhdXNlKAogICAgICAgIG9uS2V5d29yZCwKICAgICAgICBleGNlcHRpb25UeXBlLAogICAgICAgIGNhdGNoS2V5d29yZCwKICAgICAgICBleGNlcHRpb24/LnRhcmdldCwKICAgICAgICBzdGFja1RyYWNlPy50YXJnZXQsCiAgICAgICAgY29yZVR5cGVzLnN0YWNrVHJhY2VDbGFzcy5yYXdUeXBlLAogICAgICAgIGJvZHkpKTsKICAgIGlmIChjb21waWxlVGltZUVycm9ycyA9PSBudWxsKSB7CiAgICAgIHB1c2goTnVsbFZhbHVlLkJsb2NrKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2goZm9yZXN0LmJsb2NrKG51bGwsIGNvbXBpbGVUaW1lRXJyb3JzLCBudWxsKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFRyeVN0YXRlbWVudChpbnQgY2F0Y2hDb3VudCwgVG9rZW4gdHJ5S2V5d29yZCwgVG9rZW4gZmluYWxseUtleXdvcmQpIHsKICAgIFN0YXRlbWVudCBmaW5hbGx5QmxvY2sgPSBwb3BTdGF0ZW1lbnRJZk5vdE51bGwoZmluYWxseUtleXdvcmQpOwogICAgTGlzdDxDYXRjaD4gY2F0Y2hCbG9ja3M7CiAgICBMaXN0PFN0YXRlbWVudD4gY29tcGlsZVRpbWVFcnJvcnM7CiAgICBpZiAoY2F0Y2hDb3VudCAhPSAwKSB7CiAgICAgIExpc3Q8T2JqZWN0PiBjYXRjaEJsb2Nrc0FuZEVycm9ycyA9CiAgICAgICAgICBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxPYmplY3Q+KCkucG9wKHN0YWNrLCBjYXRjaENvdW50ICogMik7CiAgICAgIGNhdGNoQmxvY2tzID0gbmV3IExpc3Q8Q2F0Y2g+LmZpbGxlZChjYXRjaENvdW50LCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2F0Y2hDb3VudDsgaSsrKSB7CiAgICAgICAgY2F0Y2hCbG9ja3NbaV0gPSBjYXRjaEJsb2Nrc0FuZEVycm9yc1tpICogMl07CiAgICAgICAgU3RhdGVtZW50IGVycm9yID0gY2F0Y2hCbG9ja3NBbmRFcnJvcnNbaSAqIDIgKyAxXTsKICAgICAgICBpZiAoZXJyb3IgIT0gbnVsbCkgewogICAgICAgICAgY29tcGlsZVRpbWVFcnJvcnMgPz89IDxTdGF0ZW1lbnQ+W107CiAgICAgICAgICBjb21waWxlVGltZUVycm9ycy5hZGQoZXJyb3IpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgU3RhdGVtZW50IHRyeUJsb2NrID0gcG9wU3RhdGVtZW50KCk7CiAgICBTdGF0ZW1lbnQgdHJ5U3RhdGVtZW50ID0gZm9yZXN0LnRyeVN0YXRlbWVudCgKICAgICAgICB0cnlLZXl3b3JkLCB0cnlCbG9jaywgY2F0Y2hCbG9ja3MsIGZpbmFsbHlLZXl3b3JkLCBmaW5hbGx5QmxvY2spOwogICAgaWYgKGNvbXBpbGVUaW1lRXJyb3JzICE9IG51bGwpIHsKICAgICAgY29tcGlsZVRpbWVFcnJvcnMuYWRkKHRyeVN0YXRlbWVudCk7CiAgICAgIHB1c2goZm9yZXN0LmJsb2NrKG51bGwsIGNvbXBpbGVUaW1lRXJyb3JzLCBudWxsKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKHRyeVN0YXRlbWVudCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUluZGV4ZWRFeHByZXNzaW9uKAogICAgICBUb2tlbiBvcGVuU3F1YXJlQnJhY2tldCwgVG9rZW4gY2xvc2VTcXVhcmVCcmFja2V0KSB7CiAgICBkZWJ1Z0V2ZW50KCJJbmRleGVkRXhwcmVzc2lvbiIpOwogICAgRXhwcmVzc2lvbiBpbmRleCA9IHBvcEZvclZhbHVlKCk7CiAgICBPYmplY3QgcmVjZWl2ZXIgPSBwb3AoKTsKICAgIGlmIChyZWNlaXZlciBpcyBUaGlzQWNjZXNzR2VuZXJhdG9yICYmIHJlY2VpdmVyLmlzU3VwZXIpIHsKICAgICAgcHVzaChuZXcgU3VwZXJJbmRleGVkQWNjZXNzR2VuZXJhdG9yKAogICAgICAgICAgdGhpcywKICAgICAgICAgIG9wZW5TcXVhcmVCcmFja2V0LAogICAgICAgICAgaW5kZXgsCiAgICAgICAgICBsb29rdXBJbnN0YW5jZU1lbWJlcihpbmRleEdldE5hbWUsIGlzU3VwZXI6IHRydWUpLAogICAgICAgICAgbG9va3VwSW5zdGFuY2VNZW1iZXIoaW5kZXhTZXROYW1lLCBpc1N1cGVyOiB0cnVlKSkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChJbmRleGVkQWNjZXNzR2VuZXJhdG9yLm1ha2UoCiAgICAgICAgICB0aGlzLCBvcGVuU3F1YXJlQnJhY2tldCwgdG9WYWx1ZShyZWNlaXZlciksIGluZGV4LCBudWxsLCBudWxsKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVVuYXJ5UHJlZml4RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiVW5hcnlQcmVmaXhFeHByZXNzaW9uIik7CiAgICBPYmplY3QgcmVjZWl2ZXIgPSBwb3AoKTsKICAgIGlmIChvcHRpb25hbCgiISIsIHRva2VuKSkgewogICAgICBwdXNoKGZvcmVzdC5ub3RFeHByZXNzaW9uKHRvVmFsdWUocmVjZWl2ZXIpLCB0b2tlbiwgZmFsc2UpKTsKICAgIH0gZWxzZSB7CiAgICAgIFN0cmluZyBvcGVyYXRvciA9IHRva2VuLnN0cmluZ1ZhbHVlOwogICAgICBFeHByZXNzaW9uIHJlY2VpdmVyVmFsdWU7CiAgICAgIGlmIChvcHRpb25hbCgiLSIsIHRva2VuKSkgewogICAgICAgIG9wZXJhdG9yID0gInVuYXJ5LSI7CiAgICAgIH0KICAgICAgYm9vbCBpc1N1cGVyID0gZmFsc2U7CiAgICAgIGlmIChyZWNlaXZlciBpcyBUaGlzQWNjZXNzR2VuZXJhdG9yICYmIHJlY2VpdmVyLmlzU3VwZXIpIHsKICAgICAgICBpc1N1cGVyID0gdHJ1ZTsKICAgICAgICByZWNlaXZlclZhbHVlID0gZm9yZXN0LnRoaXNFeHByZXNzaW9uKHJlY2VpdmVyLnRva2VuKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZWNlaXZlclZhbHVlID0gdG9WYWx1ZShyZWNlaXZlcik7CiAgICAgIH0KICAgICAgcHVzaChidWlsZE1ldGhvZEludm9jYXRpb24ocmVjZWl2ZXJWYWx1ZSwgbmV3IE5hbWUob3BlcmF0b3IpLAogICAgICAgICAgZm9yZXN0LmFyZ3VtZW50c0VtcHR5KG5vTG9jYXRpb24pLCB0b2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgLy8gVGhpcyAqY291bGQqIGJlIGEgY29uc3RhbnQgZXhwcmVzc2lvbiwgd2UgY2FuJ3Qga25vdyB3aXRob3V0CiAgICAgICAgICAvLyBldmFsdWF0aW5nIFtyZWNlaXZlcl0uCiAgICAgICAgICBpc0NvbnN0YW50RXhwcmVzc2lvbjogIWlzU3VwZXIsCiAgICAgICAgICBpc1N1cGVyOiBpc1N1cGVyKSk7CiAgICB9CiAgfQoKICBOYW1lIGluY3JlbWVudE9wZXJhdG9yKFRva2VuIHRva2VuKSB7CiAgICBpZiAob3B0aW9uYWwoIisrIiwgdG9rZW4pKSByZXR1cm4gcGx1c05hbWU7CiAgICBpZiAob3B0aW9uYWwoIi0tIiwgdG9rZW4pKSByZXR1cm4gbWludXNOYW1lOwogICAgcmV0dXJuIHVuaGFuZGxlZCh0b2tlbi5sZXhlbWUsICJpbmNyZW1lbnRPcGVyYXRvciIsIHRva2VuLmNoYXJPZmZzZXQsIHVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVVuYXJ5UHJlZml4QXNzaWdubWVudEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlVuYXJ5UHJlZml4QXNzaWdubWVudEV4cHJlc3Npb24iKTsKICAgIE9iamVjdCBnZW5lcmF0b3IgPSBwb3AoKTsKICAgIGlmIChnZW5lcmF0b3IgaXMgR2VuZXJhdG9yKSB7CiAgICAgIHB1c2goZ2VuZXJhdG9yLmJ1aWxkUHJlZml4SW5jcmVtZW50KGluY3JlbWVudE9wZXJhdG9yKHRva2VuKSwKICAgICAgICAgIG9mZnNldDogdG9rZW4uY2hhck9mZnNldCkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaCh3cmFwSW5Qcm9ibGVtKAogICAgICAgICAgdG9WYWx1ZShnZW5lcmF0b3IpLCBmYXN0YS5tZXNzYWdlTm90QW5MdmFsdWUsIG5vTGVuZ3RoKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVVuYXJ5UG9zdGZpeEFzc2lnbm1lbnRFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJVbmFyeVBvc3RmaXhBc3NpZ25tZW50RXhwcmVzc2lvbiIpOwogICAgT2JqZWN0IGdlbmVyYXRvciA9IHBvcCgpOwogICAgaWYgKGdlbmVyYXRvciBpcyBHZW5lcmF0b3IpIHsKICAgICAgcHVzaChuZXcgRGVsYXllZFBvc3RmaXhJbmNyZW1lbnQoCiAgICAgICAgICB0aGlzLCB0b2tlbiwgZ2VuZXJhdG9yLCBpbmNyZW1lbnRPcGVyYXRvcih0b2tlbiksIG51bGwpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2god3JhcEluUHJvYmxlbSgKICAgICAgICAgIHRvVmFsdWUoZ2VuZXJhdG9yKSwgZmFzdGEubWVzc2FnZU5vdEFuTHZhbHVlLCBub0xlbmd0aCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25zdHJ1Y3RvclJlZmVyZW5jZSgKICAgICAgVG9rZW4gc3RhcnQsIFRva2VuIHBlcmlvZEJlZm9yZU5hbWUsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJDb25zdHJ1Y3RvclJlZmVyZW5jZSIpOwogICAgcHVzaFF1YWxpZmllZFJlZmVyZW5jZShzdGFydCwgcGVyaW9kQmVmb3JlTmFtZSk7CiAgfQoKICAvLy8gQSBxdWFsaWZpZWQgcmVmZXJlbmNlIGlzIHNvbWV0aGluZyB0aGF0IG1hdGNoZXMgb25lIG9mOgogIC8vLwogIC8vLyAgICAgaWRlbnRpZmllcgogIC8vLyAgICAgaWRlbnRpZmllciB0eXBlQXJndW1lbnRzPyAnLicgaWRlbnRpZmllcgogIC8vLyAgICAgaWRlbnRpZmllciAnLicgaWRlbnRpZmllciB0eXBlQXJndW1lbnRzPyAnLicgaWRlbnRpZmllcgogIC8vLwogIC8vLyBUaGF0IGlzLCBvbmUgdG8gdGhyZWUgaWRlbnRpZmllcnMgc2VwYXJhdGVkIGJ5IHBlcmlvZHMgYW5kIG9wdGlvbmFsbHkgb25lCiAgLy8vIGxpc3Qgb2YgdHlwZSBhcmd1bWVudHMuCiAgLy8vCiAgLy8vIEEgcXVhbGlmaWVkIHJlZmVyZW5jZSBjYW4gYmUgdXNlZCB0byByZXByZXNlbnQgYm90aCBhIHJlZmVyZW5jZSB0bwogIC8vLyBjb21waWxlLXRpbWUgY29uc3RhbnQgdmFyaWFibGUgKG1ldGFkYXRhKSBvciBhIGNvbnN0cnVjdG9yIHJlZmVyZW5jZQogIC8vLyAodXNlZCBieSBtZXRhZGF0YSwgbmV3L2NvbnN0IGV4cHJlc3Npb24sIGFuZCByZWRpcmVjdGluZyBmYWN0b3JpZXMpLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhlIHBhcnNlciB3aWxsIHJlcG9ydCBlcnJvcnMgaWYgbWV0YWRhdGEgaW5jbHVkZXMgdHlwZQogIC8vLyBhcmd1bWVudHMsIGJ1dCB3aWxsIG90aGVyIHByZXNlcnZlIHRoZW0gZm9yIGVycm9yIHJlY292ZXJ5LgogIC8vLwogIC8vLyBBIGNvbnN0cnVjdG9yIHJlZmVyZW5jZSBjYW4gY29udGFpbiB1cCB0byB0aHJlZSBpZGVudGlmaWVyczoKICAvLy8KICAvLy8gICAgIGEpIHR5cGUgdHlwZUFyZ3VtZW50cz8KICAvLy8gICAgIGIpIHR5cGUgdHlwZUFyZ3VtZW50cz8gJy4nIG5hbWUKICAvLy8gICAgIGMpIHByZWZpeCAnLicgdHlwZSB0eXBlQXJndW1lbnRzPwogIC8vLyAgICAgZCkgcHJlZml4ICcuJyB0eXBlIHR5cGVBcmd1bWVudHM/ICcuJyBuYW1lCiAgLy8vCiAgLy8vIFRoaXMgaXNuJ3QgYSBsZWdhbCBjb25zdHJ1Y3RvciByZWZlcmVuY2U6CiAgLy8vCiAgLy8vICAgICB0eXBlICcuJyBuYW1lIHR5cGVBcmd1bWVudHM/CiAgLy8vCiAgLy8vIEJ1dCB0aGUgcGFyc2VyIGNhbid0IHRlbGwgdGhpcyBmcm9tIHR5cGUgYykgYWJvdmUuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIHBvcHMgMiAob3IgMyBpZiBgcGVyaW9kQmVmb3JlTmFtZSAhPSBudWxsYCkgdmFsdWVzIGZyb20gdGhlCiAgLy8vIHN0YWNrIGFuZCBwdXNoZXMgMyB2YWx1ZXM6IGEgZ2VuZXJhdG9yICh0aGUgdHlwZSBpbiBhIGNvbnN0cnVjdG9yCiAgLy8vIHJlZmVyZW5jZSwgb3IgYW4gZXhwcmVzc2lvbiBpbiBtZXRhZGF0YSksIGEgbGlzdCBvZiB0eXBlIGFyZ3VtZW50cywgYW5kIGEKICAvLy8gbmFtZS4KICB2b2lkIHB1c2hRdWFsaWZpZWRSZWZlcmVuY2UoVG9rZW4gc3RhcnQsIFRva2VuIHBlcmlvZEJlZm9yZU5hbWUpIHsKICAgIElkZW50aWZpZXIgc3VmZml4ID0gcG9wSWZOb3ROdWxsKHBlcmlvZEJlZm9yZU5hbWUpOwogICAgSWRlbnRpZmllciBpZGVudGlmaWVyOwogICAgTGlzdDxVbnJlc29sdmVkVHlwZT4gdHlwZUFyZ3VtZW50cyA9IHBvcCgpOwogICAgT2JqZWN0IHR5cGUgPSBwb3AoKTsKICAgIGlmICh0eXBlIGlzIFF1YWxpZmllZE5hbWUpIHsKICAgICAgaWRlbnRpZmllciA9IHR5cGU7CiAgICAgIFF1YWxpZmllZE5hbWUgcXVhbGlmaWVkID0gdHlwZTsKICAgICAgT2JqZWN0IHF1YWxpZmllciA9IHF1YWxpZmllZC5xdWFsaWZpZXI7CiAgICAgIGlmIChxdWFsaWZpZXIgaXMgVHlwZVVzZUdlbmVyYXRvcikgewogICAgICAgIHR5cGUgPSBxdWFsaWZpZXI7CiAgICAgICAgaWYgKHR5cGVBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICAgICAgLy8gVE9ETyhhaGUpOiBQb2ludCB0byB0aGUgdHlwZSBhcmd1bWVudHMgaW5zdGVhZC4KICAgICAgICAgIGFkZFByb2JsZW0oZmFzdGEubWVzc2FnZUNvbnN0cnVjdG9yV2l0aFR5cGVBcmd1bWVudHMsCiAgICAgICAgICAgICAgaWRlbnRpZmllci5jaGFyT2Zmc2V0LCBpZGVudGlmaWVyLm5hbWUubGVuZ3RoKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAocXVhbGlmaWVyIGlzIEdlbmVyYXRvcikgewogICAgICAgIHR5cGUgPSBxdWFsaWZpZXIucXVhbGlmaWVkTG9va3VwKGRlcHJlY2F0ZWRfZXh0cmFjdFRva2VuKGlkZW50aWZpZXIpKTsKICAgICAgICBpZGVudGlmaWVyID0gbnVsbDsKICAgICAgfSBlbHNlIHsKICAgICAgICB1bmhhbmRsZWQoIiR7cXVhbGlmaWVyLnJ1bnRpbWVUeXBlfSIsICJwdXNoUXVhbGlmaWVkUmVmZXJlbmNlIiwKICAgICAgICAgICAgc3RhcnQuY2hhck9mZnNldCwgdXJpKTsKICAgICAgfQogICAgfQogICAgU3RyaW5nIG5hbWU7CiAgICBpZiAoaWRlbnRpZmllciAhPSBudWxsICYmIHN1ZmZpeCAhPSBudWxsKSB7CiAgICAgIG5hbWUgPSAiJHtpZGVudGlmaWVyLm5hbWV9LiR7c3VmZml4Lm5hbWV9IjsKICAgIH0gZWxzZSBpZiAoaWRlbnRpZmllciAhPSBudWxsKSB7CiAgICAgIG5hbWUgPSBpZGVudGlmaWVyLm5hbWU7CiAgICB9IGVsc2UgaWYgKHN1ZmZpeCAhPSBudWxsKSB7CiAgICAgIG5hbWUgPSBzdWZmaXgubmFtZTsKICAgIH0gZWxzZSB7CiAgICAgIG5hbWUgPSAiIjsKICAgIH0KICAgIHB1c2godHlwZSk7CiAgICBwdXNoKHR5cGVBcmd1bWVudHMgPz8gTnVsbFZhbHVlLlR5cGVBcmd1bWVudHMpOwogICAgcHVzaChuYW1lKTsKICAgIHB1c2goc3VmZml4ID8/IGlkZW50aWZpZXIgPz8gTnVsbFZhbHVlLklkZW50aWZpZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZFN0YXRpY0ludm9jYXRpb24oTWVtYmVyIHRhcmdldCwgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAge0NvbnN0bmVzcyBjb25zdG5lc3M6IENvbnN0bmVzcy5pbXBsaWNpdCwKICAgICAgaW50IGNoYXJPZmZzZXQ6IC0xLAogICAgICBpbnQgY2hhckxlbmd0aDogbm9MZW5ndGh9KSB7CiAgICAvLyBUaGUgYXJndW1lbnQgY2hlY2tzIGZvciB0aGUgaW5pdGlhbCB0YXJnZXQgb2YgcmVkaXJlY3RpbmcgZmFjdG9yaWVzCiAgICAvLyBpbnZvY2F0aW9ucyBhcmUgc2tpcHBlZCBpbiBEYXJ0IDEuCiAgICBpZiAoIWxlZ2FjeU1vZGUgfHwgIWlzUmVkaXJlY3RpbmdGYWN0b3J5KHRhcmdldCwgaGVscGVyOiB0aGlzKSkgewogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzID0gdGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzOwogICAgICBpZiAodGFyZ2V0IGlzIENvbnN0cnVjdG9yKSB7CiAgICAgICAgYXNzZXJ0KCF0YXJnZXQuZW5jbG9zaW5nQ2xhc3MuaXNBYnN0cmFjdCk7CiAgICAgICAgdHlwZVBhcmFtZXRlcnMgPSB0YXJnZXQuZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnM7CiAgICAgIH0KICAgICAgTG9jYXRlZE1lc3NhZ2UgYXJnTWVzc2FnZSA9IGNoZWNrQXJndW1lbnRzRm9yRnVuY3Rpb24oCiAgICAgICAgICB0YXJnZXQuZnVuY3Rpb24sIGFyZ3VtZW50cywgY2hhck9mZnNldCwgdHlwZVBhcmFtZXRlcnMpOwogICAgICBpZiAoYXJnTWVzc2FnZSAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHdyYXBTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgICAgICB0aHJvd05vU3VjaE1ldGhvZEVycm9yKAogICAgICAgICAgICAgICAgZm9yZXN0LmxpdGVyYWxOdWxsKG51bGwpLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIHRhcmdldC5uYW1lLm5hbWUsCiAgICAgICAgICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgY2FuZGlkYXRlOiB0YXJnZXQsCiAgICAgICAgICAgICAgICBtZXNzYWdlOiBhcmdNZXNzYWdlKSwKICAgICAgICAgICAgY2hhck9mZnNldCk7CiAgICAgIH0KICAgIH0KCiAgICBib29sIGlzQ29uc3QgPSBjb25zdG5lc3MgPT0gQ29uc3RuZXNzLmV4cGxpY2l0Q29uc3Q7CiAgICBpZiAodGFyZ2V0IGlzIENvbnN0cnVjdG9yKSB7CiAgICAgIGlzQ29uc3QgPQogICAgICAgICAgaXNDb25zdCB8fCBjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUgJiYgdGFyZ2V0LmlzQ29uc3Q7CiAgICAgIGlmICgoaXNDb25zdCB8fCBjb25zdGFudENvbnRleHQgPT0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkKSAmJgogICAgICAgICAgIXRhcmdldC5pc0NvbnN0KSB7CiAgICAgICAgcmV0dXJuIHdyYXBJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgICAgICBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlTm9uQ29uc3RDb25zdHJ1Y3RvciwgY2hhck9mZnNldCwgY2hhckxlbmd0aCkpLAogICAgICAgICAgICB0YXJnZXQsCiAgICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgICAgY2hhck9mZnNldCk7CiAgICAgIH0KICAgICAgQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUgPSBuZXcgQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgICAgdGFyZ2V0LCBmb3Jlc3QuY2FzdEFyZ3VtZW50cyhhcmd1bWVudHMpLAogICAgICAgICAgaXNDb25zdDogaXNDb25zdCkKICAgICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5Db25zdHJ1Y3Rvckludm9jYXRpb24obm9kZSwgdHlwZUVudmlyb25tZW50LCB1cmkpOwogICAgICByZXR1cm4gbm9kZTsKICAgIH0gZWxzZSB7CiAgICAgIFByb2NlZHVyZSBwcm9jZWR1cmUgPSB0YXJnZXQ7CiAgICAgIGlmIChwcm9jZWR1cmUuaXNGYWN0b3J5KSB7CiAgICAgICAgaXNDb25zdCA9IGlzQ29uc3QgfHwKICAgICAgICAgICAgY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lICYmIHByb2NlZHVyZS5pc0NvbnN0OwogICAgICAgIGlmICgoaXNDb25zdCB8fCBjb25zdGFudENvbnRleHQgPT0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkKSAmJgogICAgICAgICAgICAhcHJvY2VkdXJlLmlzQ29uc3QpIHsKICAgICAgICAgIHJldHVybiB3cmFwSW52YWxpZENvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgICAgICAgICBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VOb25Db25zdEZhY3RvcnksIGNoYXJPZmZzZXQsIGNoYXJMZW5ndGgpKSwKICAgICAgICAgICAgICB0YXJnZXQsCiAgICAgICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgICAgIGNoYXJPZmZzZXQpOwogICAgICAgIH0KICAgICAgICBTdGF0aWNJbnZvY2F0aW9uIG5vZGUgPSBGYWN0b3J5Q29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgICAgICAgIHRhcmdldCwgZm9yZXN0LmNhc3RBcmd1bWVudHMoYXJndW1lbnRzKSwKICAgICAgICAgICAgaXNDb25zdDogaXNDb25zdCkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgICAgICAgbGlicmFyeS5jaGVja0JvdW5kc0luRmFjdG9yeUludm9jYXRpb24obm9kZSwgdHlwZUVudmlyb25tZW50LCB1cmkpOwogICAgICAgIHJldHVybiBub2RlOwogICAgICB9IGVsc2UgewogICAgICAgIFN0YXRpY0ludm9jYXRpb24gbm9kZSA9IG5ldyBTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgICAgICB0YXJnZXQsIGZvcmVzdC5jYXN0QXJndW1lbnRzKGFyZ3VtZW50cyksCiAgICAgICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgICAgIGxpYnJhcnkuY2hlY2tCb3VuZHNJblN0YXRpY0ludm9jYXRpb24obm9kZSwgdHlwZUVudmlyb25tZW50LCB1cmkpOwogICAgICAgIHJldHVybiBub2RlOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBMb2NhdGVkTWVzc2FnZSBjaGVja0FyZ3VtZW50c0ZvckZ1bmN0aW9uKEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiwKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCwgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycykgewogICAgaWYgKGZvcmVzdC5hcmd1bWVudHNQb3NpdGlvbmFsKGFyZ3VtZW50cykubGVuZ3RoIDwKICAgICAgICBmdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgIHJldHVybiBmYXN0YS50ZW1wbGF0ZVRvb0Zld0FyZ3VtZW50cwogICAgICAgICAgLndpdGhBcmd1bWVudHMoZnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICAgICAgICBmb3Jlc3QuYXJndW1lbnRzUG9zaXRpb25hbChhcmd1bWVudHMpLmxlbmd0aCkKICAgICAgICAgIC53aXRoTG9jYXRpb24odXJpLCBhcmd1bWVudHMuZmlsZU9mZnNldCwgbm9MZW5ndGgpOwogICAgfQogICAgaWYgKGZvcmVzdC5hcmd1bWVudHNQb3NpdGlvbmFsKGFyZ3VtZW50cykubGVuZ3RoID4KICAgICAgICBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIGZhc3RhLnRlbXBsYXRlVG9vTWFueUFyZ3VtZW50cwogICAgICAgICAgLndpdGhBcmd1bWVudHMoZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoLAogICAgICAgICAgICAgIGZvcmVzdC5hcmd1bWVudHNQb3NpdGlvbmFsKGFyZ3VtZW50cykubGVuZ3RoKQogICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGFyZ3VtZW50cy5maWxlT2Zmc2V0LCBub0xlbmd0aCk7CiAgICB9CiAgICBMaXN0PE9iamVjdD4gbmFtZWQgPSBmb3Jlc3QuYXJndW1lbnRzTmFtZWQoYXJndW1lbnRzKTsKICAgIGlmIChuYW1lZC5pc05vdEVtcHR5KSB7CiAgICAgIFNldDxTdHJpbmc+IG5hbWVzID0KICAgICAgICAgIG5ldyBTZXQuZnJvbShmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMubWFwKChhKSA9PiBhLm5hbWUpKTsKICAgICAgZm9yIChOYW1lZEV4cHJlc3Npb24gYXJndW1lbnQgaW4gbmFtZWQpIHsKICAgICAgICBpZiAoIW5hbWVzLmNvbnRhaW5zKGFyZ3VtZW50Lm5hbWUpKSB7CiAgICAgICAgICByZXR1cm4gZmFzdGEudGVtcGxhdGVOb1N1Y2hOYW1lZFBhcmFtZXRlcgogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGFyZ3VtZW50Lm5hbWUpCiAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGFyZ3VtZW50LmZpbGVPZmZzZXQsIGFyZ3VtZW50Lm5hbWUubGVuZ3RoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBMaXN0PERhcnRUeXBlPiB0eXBlcyA9IGZvcmVzdC5hcmd1bWVudHNUeXBlQXJndW1lbnRzKGFyZ3VtZW50cyk7CiAgICBpZiAodHlwZVBhcmFtZXRlcnMubGVuZ3RoICE9IHR5cGVzLmxlbmd0aCkgewogICAgICBpZiAodHlwZXMubGVuZ3RoID09IDApIHsKICAgICAgICAvLyBFeHBlY3RlZCBgdHlwZVBhcmFtZXRlcnMubGVuZ3RoYCB0eXBlIGFyZ3VtZW50cywgYnV0IG5vbmUgZ2l2ZW4sIHNvCiAgICAgICAgLy8gd2UgZmlsbCBpbiBkeW5hbWljIGluIGxlZ2FjeSBtb2RlLCBhbmQgdXNlIHR5cGUgaW5mZXJlbmNlIG90aGVyd2lzZS4KICAgICAgICBpZiAobGVnYWN5TW9kZSkgewogICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB0eXBlcy5hZGQoY29uc3QgRHluYW1pY1R5cGUoKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIEEgd3JvbmcgKG5vbi16ZXJvKSBhbW91bnQgb2YgdHlwZSBhcmd1bWVudHMgZ2l2ZW4uIFRoYXQncyBhbiBlcnJvci4KICAgICAgICAvLyBUT0RPKGplbnNqKTogUG9zaXRpb24gc2hvdWxkIGJlIG9uIHR5cGUgYXJndW1lbnRzIGluc3RlYWQuCiAgICAgICAgcmV0dXJuIGZhc3RhLnRlbXBsYXRlVHlwZUFyZ3VtZW50TWlzbWF0Y2gKICAgICAgICAgICAgLndpdGhBcmd1bWVudHModHlwZVBhcmFtZXRlcnMubGVuZ3RoKQogICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgb2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIExvY2F0ZWRNZXNzYWdlIGNoZWNrQXJndW1lbnRzRm9yVHlwZSgKICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgb2Zmc2V0KSB7CiAgICBpZiAoZm9yZXN0LmFyZ3VtZW50c1Bvc2l0aW9uYWwoYXJndW1lbnRzKS5sZW5ndGggPAogICAgICAgIGZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHsKICAgICAgcmV0dXJuIGZhc3RhLnRlbXBsYXRlVG9vRmV3QXJndW1lbnRzCiAgICAgICAgICAud2l0aEFyZ3VtZW50cyhmdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgICAgICAgIGZvcmVzdC5hcmd1bWVudHNQb3NpdGlvbmFsKGFyZ3VtZW50cykubGVuZ3RoKQogICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIGFyZ3VtZW50cy5maWxlT2Zmc2V0LCBub0xlbmd0aCk7CiAgICB9CiAgICBpZiAoZm9yZXN0LmFyZ3VtZW50c1Bvc2l0aW9uYWwoYXJndW1lbnRzKS5sZW5ndGggPgogICAgICAgIGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICByZXR1cm4gZmFzdGEudGVtcGxhdGVUb29NYW55QXJndW1lbnRzCiAgICAgICAgICAud2l0aEFyZ3VtZW50cyhmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgsCiAgICAgICAgICAgICAgZm9yZXN0LmFyZ3VtZW50c1Bvc2l0aW9uYWwoYXJndW1lbnRzKS5sZW5ndGgpCiAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgYXJndW1lbnRzLmZpbGVPZmZzZXQsIG5vTGVuZ3RoKTsKICAgIH0KICAgIExpc3Q8T2JqZWN0PiBuYW1lZCA9IGZvcmVzdC5hcmd1bWVudHNOYW1lZChhcmd1bWVudHMpOwogICAgaWYgKG5hbWVkLmlzTm90RW1wdHkpIHsKICAgICAgU2V0PFN0cmluZz4gbmFtZXMgPQogICAgICAgICAgbmV3IFNldC5mcm9tKGZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy5tYXAoKGEpID0+IGEubmFtZSkpOwogICAgICBmb3IgKE5hbWVkRXhwcmVzc2lvbiBhcmd1bWVudCBpbiBuYW1lZCkgewogICAgICAgIGlmICghbmFtZXMuY29udGFpbnMoYXJndW1lbnQubmFtZSkpIHsKICAgICAgICAgIHJldHVybiBmYXN0YS50ZW1wbGF0ZU5vU3VjaE5hbWVkUGFyYW1ldGVyCiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoYXJndW1lbnQubmFtZSkKICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgYXJndW1lbnQuZmlsZU9mZnNldCwgYXJndW1lbnQubmFtZS5sZW5ndGgpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgTGlzdDxPYmplY3Q+IHR5cGVzID0gZm9yZXN0LmFyZ3VtZW50c1R5cGVBcmd1bWVudHMoYXJndW1lbnRzKTsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMgPSBmdW5jdGlvbi50eXBlUGFyYW1ldGVyczsKICAgIGlmICh0eXBlUGFyYW1ldGVycy5sZW5ndGggIT0gdHlwZXMubGVuZ3RoICYmIHR5cGVzLmxlbmd0aCAhPSAwKSB7CiAgICAgIC8vIEEgd3JvbmcgKG5vbi16ZXJvKSBhbW91bnQgb2YgdHlwZSBhcmd1bWVudHMgZ2l2ZW4uIFRoYXQncyBhbiBlcnJvci4KICAgICAgLy8gVE9ETyhqZW5zaik6IFBvc2l0aW9uIHNob3VsZCBiZSBvbiB0eXBlIGFyZ3VtZW50cyBpbnN0ZWFkLgogICAgICByZXR1cm4gZmFzdGEudGVtcGxhdGVUeXBlQXJndW1lbnRNaXNtYXRjaAogICAgICAgICAgLndpdGhBcmd1bWVudHModHlwZVBhcmFtZXRlcnMubGVuZ3RoKQogICAgICAgICAgLndpdGhMb2NhdGlvbih1cmksIG9mZnNldCwgbm9MZW5ndGgpOwogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk5ld0V4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luTmV3RXhwcmVzc2lvbiIpOwogICAgc3VwZXIucHVzaChjb25zdGFudENvbnRleHQpOwogICAgaWYgKGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSkgewogICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgZmFzdGEudGVtcGxhdGVOb3RDb25zdGFudEV4cHJlc3Npb24ud2l0aEFyZ3VtZW50cygnTmV3IGV4cHJlc3Npb24nKSwKICAgICAgICAgIHRva2VuLmNoYXJPZmZzZXQsCiAgICAgICAgICB0b2tlbi5sZW5ndGgpOwogICAgfQogICAgY29uc3RhbnRDb250ZXh0ID0gQ29uc3RhbnRDb250ZXh0Lm5vbmU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ29uc3RFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkNvbnN0RXhwcmVzc2lvbiIpOwogICAgc3VwZXIucHVzaChjb25zdGFudENvbnRleHQpOwogICAgY29uc3RhbnRDb250ZXh0ID0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNvbnN0TGl0ZXJhbChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5Db25zdExpdGVyYWwiKTsKICAgIHN1cGVyLnB1c2goY29uc3RhbnRDb250ZXh0KTsKICAgIGNvbnN0YW50Q29udGV4dCA9IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5JbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5JbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbiIpOwogICAgc3VwZXIucHVzaChjb25zdGFudENvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25zdExpdGVyYWwoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZENvbnN0TGl0ZXJhbCIpOwogICAgT2JqZWN0IGxpdGVyYWwgPSBwb3AoKTsKICAgIGNvbnN0YW50Q29udGV4dCA9IHBvcCgpOwogICAgcHVzaChsaXRlcmFsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTmV3RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTmV3RXhwcmVzc2lvbiIpOwogICAgYnVpbGRDb25zdHJ1Y3RvclJlZmVyZW5jZUludm9jYXRpb24oCiAgICAgICAgdG9rZW4ubmV4dCwgdG9rZW4ub2Zmc2V0LCBDb25zdG5lc3MuZXhwbGljaXROZXcpOwogIH0KCiAgdm9pZCBidWlsZENvbnN0cnVjdG9yUmVmZXJlbmNlSW52b2NhdGlvbigKICAgICAgVG9rZW4gbmFtZVRva2VuLCBpbnQgb2Zmc2V0LCBDb25zdG5lc3MgY29uc3RuZXNzKSB7CiAgICBBcmd1bWVudHMgYXJndW1lbnRzID0gcG9wKCk7CiAgICBJZGVudGlmaWVyIG5hbWVMYXN0SWRlbnRpZmllciA9IHBvcChOdWxsVmFsdWUuSWRlbnRpZmllcik7CiAgICBUb2tlbiBuYW1lTGFzdFRva2VuID0KICAgICAgICBkZXByZWNhdGVkX2V4dHJhY3RUb2tlbihuYW1lTGFzdElkZW50aWZpZXIpID8/IG5hbWVUb2tlbjsKICAgIFN0cmluZyBuYW1lID0gcG9wKCk7CiAgICBMaXN0PFVucmVzb2x2ZWRUeXBlPiB0eXBlQXJndW1lbnRzID0gcG9wKCk7CgogICAgT2JqZWN0IHR5cGUgPSBwb3AoKTsKCiAgICBDb25zdGFudENvbnRleHQgc2F2ZWRDb25zdGFudENvbnRleHQgPSBwb3AoKTsKICAgIGlmICh0eXBlIGlzIEdlbmVyYXRvcikgewogICAgICBwdXNoKHR5cGUuaW52b2tlQ29uc3RydWN0b3IoCiAgICAgICAgICB0eXBlQXJndW1lbnRzLCBuYW1lLCBhcmd1bWVudHMsIG5hbWVUb2tlbiwgbmFtZUxhc3RUb2tlbiwgY29uc3RuZXNzKSk7CiAgICB9IGVsc2UgaWYgKHR5cGUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChuZXcgUGFyc2VyRXJyb3JHZW5lcmF0b3IoCiAgICAgICAgICB0aGlzLCBuYW1lVG9rZW4sIGZhc3RhLm1lc3NhZ2VTeW50aGV0aWNUb2tlbikpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaCh3cmFwU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgIHRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgICAgICAgICAgZm9yZXN0LmxpdGVyYWxOdWxsKG51bGwpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LAogICAgICAgICAgICAgIGRlYnVnTmFtZShnZXROb2RlTmFtZSh0eXBlKSwgbmFtZSksCiAgICAgICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgICAgIG5hbWVUb2tlbi5jaGFyT2Zmc2V0KSwKICAgICAgICAgIG9mZnNldCkpOwogICAgfQogICAgY29uc3RhbnRDb250ZXh0ID0gc2F2ZWRDb25zdGFudENvbnRleHQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJJbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbiIpOwogICAgYnVpbGRDb25zdHJ1Y3RvclJlZmVyZW5jZUludm9jYXRpb24oCiAgICAgICAgdG9rZW4sIHRva2VuLm9mZnNldCwgQ29uc3RuZXNzLmltcGxpY2l0KTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgdHlwZSwKICAgICAgVG9rZW4gbmFtZVRva2VuLAogICAgICBUb2tlbiBuYW1lTGFzdFRva2VuLAogICAgICBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgTGlzdDxVbnJlc29sdmVkVHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIENvbnN0bmVzcyBjb25zdG5lc3MpIHsKICAgIGlmIChhcmd1bWVudHMgPT0gbnVsbCkgewogICAgICByZXR1cm4gYnVpbGRQcm9ibGVtKGZhc3RhLm1lc3NhZ2VNaXNzaW5nQXJndW1lbnRMaXN0LAogICAgICAgICAgbmFtZVRva2VuLmNoYXJPZmZzZXQsIG5hbWVUb2tlbi5sZW5ndGgpOwogICAgfQogICAgaWYgKG5hbWUuaXNOb3RFbXB0eSAmJiBhcmd1bWVudHMudHlwZXMuaXNOb3RFbXB0eSkgewogICAgICAvLyBUT0RPKGFoZSk6IFBvaW50IHRvIHRoZSB0eXBlIGFyZ3VtZW50cyBpbnN0ZWFkLgogICAgICBhZGRQcm9ibGVtKGZhc3RhLm1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhUeXBlQXJndW1lbnRzLAogICAgICAgICAgbmFtZVRva2VuLmNoYXJPZmZzZXQsIG5hbWVUb2tlbi5sZW5ndGgpOwogICAgfQoKICAgIGlmICh0eXBlQXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KGZvcmVzdC5hcmd1bWVudHNUeXBlQXJndW1lbnRzKGFyZ3VtZW50cykuaXNFbXB0eSk7CiAgICAgIGZvcmVzdC5hcmd1bWVudHNTZXRUeXBlQXJndW1lbnRzKAogICAgICAgICAgYXJndW1lbnRzLCBidWlsZERhcnRUeXBlQXJndW1lbnRzKHR5cGVBcmd1bWVudHMpKTsKICAgIH0KCiAgICBTdHJpbmcgZXJyb3JOYW1lOwogICAgTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZTsKICAgIGlmICh0eXBlIGlzIENsYXNzQnVpbGRlcikgewogICAgICBpZiAodHlwZSBpcyBFbnVtQnVpbGRlcikgewogICAgICAgIHJldHVybiBidWlsZFByb2JsZW0oZmFzdGEubWVzc2FnZUVudW1JbnN0YW50aWF0aW9uLAogICAgICAgICAgICBuYW1lVG9rZW4uY2hhck9mZnNldCwgbmFtZVRva2VuLmxlbmd0aCk7CiAgICAgIH0KICAgICAgRGVjbGFyYXRpb24gYiA9CiAgICAgICAgICB0eXBlLmZpbmRDb25zdHJ1Y3Rvck9yRmFjdG9yeShuYW1lLCBjaGFyT2Zmc2V0LCB1cmksIGxpYnJhcnkpOwogICAgICBNZW1iZXIgdGFyZ2V0ID0gYj8udGFyZ2V0OwogICAgICBpZiAoYiA9PSBudWxsKSB7CiAgICAgICAgLy8gTm90IGZvdW5kLiBSZXBvcnRlZCBiZWxvdy4KICAgICAgfSBlbHNlIGlmIChiIGlzIFByb2JsZW1CdWlsZGVyKSB7CiAgICAgICAgbWVzc2FnZSA9IGIubWVzc2FnZS53aXRoTG9jYXRpb24odXJpLCBjaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgIH0gZWxzZSBpZiAoYi5pc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgaWYgKHR5cGUuaXNBYnN0cmFjdCkgewogICAgICAgICAgcmV0dXJuIHdyYXBJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgICAgICAgIGV2YWx1YXRlQXJndW1lbnRzQmVmb3JlKAogICAgICAgICAgICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgIGJ1aWxkQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcigKICAgICAgICAgICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb24KICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0eXBlLm5hbWUpLAogICAgICAgICAgICAgICAgICAgICAgdHlwZS5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgbmFtZVRva2VuLmNoYXJPZmZzZXQpKSwKICAgICAgICAgICAgICB0YXJnZXQsCiAgICAgICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgICAgIGNoYXJPZmZzZXQpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0IGlzIENvbnN0cnVjdG9yIHx8CiAgICAgICAgICAodGFyZ2V0IGlzIFByb2NlZHVyZSAmJiB0YXJnZXQua2luZCA9PSBQcm9jZWR1cmVLaW5kLkZhY3RvcnkpKSB7CiAgICAgICAgRXhwcmVzc2lvbiBpbnZvY2F0aW9uOwoKICAgICAgICBpZiAobGVnYWN5TW9kZSAmJiBpc1JlZGlyZWN0aW5nRmFjdG9yeSh0YXJnZXQsIGhlbHBlcjogdGhpcykpIHsKICAgICAgICAgIC8vIEluIGxlZ2FjeSBtb2RlIHRoZSBjaGVja3MgdGhhdCBhcmUgZG9uZSBpbiBbYnVpbGRTdGF0aWNJbnZvY2F0aW9uXQogICAgICAgICAgLy8gb24gdGhlIGluaXRpYWwgdGFyZ2V0IG9mIGEgcmVkaXJlY3RpbmcgZmFjdG9yeSBpbnZvY2F0aW9uIHNob3VsZAogICAgICAgICAgLy8gYmUgc2tpcHBlZC4gU28gd2UgYnVpbGQgdGhlIGludm9jYXRpb24gbm9kZXMgZGlyZWN0bHkgaGVyZSB3aXRob3V0CiAgICAgICAgICAvLyBkb2luZyBhbnkgY2hlY2tzLgogICAgICAgICAgaWYgKHRhcmdldC5mdW5jdGlvbi50eXBlUGFyYW1ldGVycyAhPSBudWxsICYmCiAgICAgICAgICAgICAgdGFyZ2V0LmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCAhPQogICAgICAgICAgICAgICAgICBmb3Jlc3QuYXJndW1lbnRzVHlwZUFyZ3VtZW50cyhhcmd1bWVudHMpLmxlbmd0aCkgewogICAgICAgICAgICBhcmd1bWVudHMgPSBmb3Jlc3QuYXJndW1lbnRzKAogICAgICAgICAgICAgICAgZm9yZXN0LmFyZ3VtZW50c1Bvc2l0aW9uYWwoYXJndW1lbnRzKSwgbnVsbCwKICAgICAgICAgICAgICAgIG5hbWVkOiBmb3Jlc3QuYXJndW1lbnRzTmFtZWQoYXJndW1lbnRzKSwKICAgICAgICAgICAgICAgIHR5cGVzOiBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKAogICAgICAgICAgICAgICAgICAgIHRhcmdldC5mdW5jdGlvbi50eXBlUGFyYW1ldGVycy5sZW5ndGgsIGNvbnN0IER5bmFtaWNUeXBlKCksCiAgICAgICAgICAgICAgICAgICAgZ3Jvd2FibGU6IHRydWUpKTsKICAgICAgICAgIH0KICAgICAgICAgIGludm9jYXRpb24gPSBuZXcgRmFjdG9yeUNvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgICAgICAgIHRhcmdldCwgZm9yZXN0LmNhc3RBcmd1bWVudHMoYXJndW1lbnRzKSwKICAgICAgICAgICAgICBpc0NvbnN0OiBjb25zdG5lc3MgPT0gQ29uc3RuZXNzLmV4cGxpY2l0Q29uc3QpCiAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG5hbWVUb2tlbi5jaGFyT2Zmc2V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbnZvY2F0aW9uID0gYnVpbGRTdGF0aWNJbnZvY2F0aW9uKHRhcmdldCwgYXJndW1lbnRzLAogICAgICAgICAgICAgIGNvbnN0bmVzczogY29uc3RuZXNzLAogICAgICAgICAgICAgIGNoYXJPZmZzZXQ6IG5hbWVUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgIGNoYXJMZW5ndGg6IG5hbWVUb2tlbi5sZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGludm9jYXRpb24gaXMgU3RhdGljSW52b2NhdGlvbiAmJgogICAgICAgICAgICBpc1JlZGlyZWN0aW5nRmFjdG9yeSh0YXJnZXQsIGhlbHBlcjogdGhpcykpIHsKICAgICAgICAgIHJlZGlyZWN0aW5nRmFjdG9yeUludm9jYXRpb25zLmFkZChpbnZvY2F0aW9uKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBpbnZvY2F0aW9uOwogICAgICB9IGVsc2UgewogICAgICAgIGVycm9yTmFtZSA/Pz0gZGVidWdOYW1lKHR5cGUubmFtZSwgbmFtZSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodHlwZSBpcyBJbnZhbGlkVHlwZUJ1aWxkZXIpIHsKICAgICAgTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSA9IHR5cGUubWVzc2FnZTsKICAgICAgcmV0dXJuIGV2YWx1YXRlQXJndW1lbnRzQmVmb3JlKAogICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgYnVpbGRQcm9ibGVtKG1lc3NhZ2UubWVzc2FnZU9iamVjdCwgbmFtZVRva2VuLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgbmFtZVRva2VuLmxleGVtZS5sZW5ndGgpKTsKICAgIH0gZWxzZSB7CiAgICAgIGVycm9yTmFtZSA9IGRlYnVnTmFtZSh0eXBlLmZ1bGxOYW1lRm9yRXJyb3JzLCBuYW1lKTsKICAgIH0KICAgIGVycm9yTmFtZSA/Pz0gbmFtZTsKCiAgICByZXR1cm4gd3JhcFVucmVzb2x2ZWRUYXJnZXRJbnZvY2F0aW9uKAogICAgICAgIHRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgICAgICAgIGZvcmVzdC5saXRlcmFsTnVsbChudWxsKS4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQsCiAgICAgICAgICAgIGVycm9yTmFtZSwKICAgICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgICBuYW1lTGFzdFRva2VuLmNoYXJPZmZzZXQsCiAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UpLAogICAgICAgIGFyZ3VtZW50cywKICAgICAgICBhcmd1bWVudHMuZmlsZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbnN0RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiZW5kQ29uc3RFeHByZXNzaW9uIik7CiAgICBidWlsZENvbnN0cnVjdG9yUmVmZXJlbmNlSW52b2NhdGlvbigKICAgICAgICB0b2tlbi5uZXh0LCB0b2tlbi5vZmZzZXQsIENvbnN0bmVzcy5leHBsaWNpdENvbnN0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5JZkNvbnRyb2xGbG93KFRva2VuIGlmVG9rZW4pIHsKICAgIC8vIFRPRE8oZGFucnViZWwpOiBjb25zaWRlciByZW1vdmluZyB0aGlzIHdoZW4gY29udHJvbCBmbG93IHN1cHBvcnQgaXMgYWRkZWQKICAgIC8vIGlmIHRoZSBpZlRva2VuIGlzIG5vdCBuZWVkZWQgZm9yIGVycm9yIHJlcG9ydGluZwogICAgcHVzaChpZlRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5UaGVuQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIEV4cHJlc3Npb24gY29uZGl0aW9uID0gcG9wRm9yVmFsdWUoKTsKICAgIGVudGVyVGhlbkZvclR5cGVQcm9tb3Rpb24oY29uZGl0aW9uKTsKICAgIHB1c2goY29uZGl0aW9uKTsKICAgIHN1cGVyLmJlZ2luVGhlbkNvbnRyb2xGbG93KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRWxzZUNvbnRyb2xGbG93KFRva2VuIGVsc2VUb2tlbikgewogICAgdHlwZVByb21vdGVyPy5lbnRlckVsc2UoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSWZDb250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiZW5kSWZDb250cm9sRmxvdyIpOwogICAgdmFyIGVudHJ5ID0gcG9wKCk7CiAgICB2YXIgY29uZGl0aW9uID0gcG9wKCk7IC8vIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbgogICAgVG9rZW4gaWZUb2tlbiA9IHBvcCgpOwogICAgdHlwZVByb21vdGVyPy5lbnRlckVsc2UoKTsKICAgIHR5cGVQcm9tb3Rlcj8uZXhpdENvbmRpdGlvbmFsKCk7CiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVDb250cm9sRmxvd0NvbGxlY3Rpb25zKSB7CiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBSZXBvcnQgYSBtb3JlIHVzZXIgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZQogICAgICAvLyB3aGVuIGFuIGV4cGVyaW1lbnQgaXMgbm90IGVuYWJsZWQKICAgICAgaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuLndpdGhBcmd1bWVudHMoaWZUb2tlbiksCiAgICAgICAgICBpZlRva2VuLAogICAgICAgICAgaWZUb2tlbik7CiAgICAgIHB1c2goaW52YWxpZENvbGxlY3Rpb25FbGVtZW50KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUgJiYKICAgICAgICAhbGlicmFyeS5sb2FkZXIudGFyZ2V0LmVuYWJsZUNvbnN0YW50VXBkYXRlMjAxOCkgewogICAgICBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgZmFzdGEudGVtcGxhdGVDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnQKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhpZlRva2VuKSwKICAgICAgICAgIGlmVG9rZW4sCiAgICAgICAgICBpZlRva2VuKTsKICAgICAgcHVzaChpbnZhbGlkQ29sbGVjdGlvbkVsZW1lbnQpOwogICAgICByZXR1cm47CiAgICB9CgogICAgdHJhbnNmb3JtQ29sbGVjdGlvbnMgPSB0cnVlOwogICAgaWYgKGVudHJ5IGlzIE1hcEVudHJ5KSB7CiAgICAgIHB1c2goZm9yZXN0LmlmTWFwRW50cnkodG9WYWx1ZShjb25kaXRpb24pLCBlbnRyeSwgbnVsbCwgaWZUb2tlbikpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChmb3Jlc3QuaWZFbGVtZW50KHRvVmFsdWUoY29uZGl0aW9uKSwgdG9WYWx1ZShlbnRyeSksIG51bGwsIGlmVG9rZW4pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSWZFbHNlQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZElmRWxzZUNvbnRyb2xGbG93Iik7CiAgICB2YXIgZWxzZUVudHJ5ID0gcG9wKCk7IC8vIGVsc2UgZW50cnkKICAgIHZhciB0aGVuRW50cnkgPSBwb3AoKTsgLy8gdGhlbiBlbnRyeQogICAgdmFyIGNvbmRpdGlvbiA9IHBvcCgpOyAvLyBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24KICAgIFRva2VuIGlmVG9rZW4gPSBwb3AoKTsKICAgIHR5cGVQcm9tb3Rlcj8uZXhpdENvbmRpdGlvbmFsKCk7CiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVDb250cm9sRmxvd0NvbGxlY3Rpb25zKSB7CiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBSZXBvcnQgYSBtb3JlIHVzZXIgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZQogICAgICAvLyB3aGVuIGFuIGV4cGVyaW1lbnQgaXMgbm90IGVuYWJsZWQKICAgICAgaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuLndpdGhBcmd1bWVudHMoaWZUb2tlbiksCiAgICAgICAgICBpZlRva2VuLAogICAgICAgICAgaWZUb2tlbik7CiAgICAgIHB1c2goaW52YWxpZENvbGxlY3Rpb25FbGVtZW50KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUgJiYKICAgICAgICAhbGlicmFyeS5sb2FkZXIudGFyZ2V0LmVuYWJsZUNvbnN0YW50VXBkYXRlMjAxOCkgewogICAgICBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgZmFzdGEudGVtcGxhdGVDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnQKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhpZlRva2VuKSwKICAgICAgICAgIGlmVG9rZW4sCiAgICAgICAgICBpZlRva2VuKTsKICAgICAgcHVzaChpbnZhbGlkQ29sbGVjdGlvbkVsZW1lbnQpOwogICAgICByZXR1cm47CiAgICB9CgogICAgdHJhbnNmb3JtQ29sbGVjdGlvbnMgPSB0cnVlOwogICAgaWYgKHRoZW5FbnRyeSBpcyBNYXBFbnRyeSkgewogICAgICBpZiAoZWxzZUVudHJ5IGlzIE1hcEVudHJ5KSB7CiAgICAgICAgcHVzaChmb3Jlc3QuaWZNYXBFbnRyeSgKICAgICAgICAgICAgdG9WYWx1ZShjb25kaXRpb24pLCB0aGVuRW50cnksIGVsc2VFbnRyeSwgaWZUb2tlbikpOwogICAgICB9IGVsc2UgaWYgKGVsc2VFbnRyeSBpcyBTcHJlYWRFbGVtZW50KSB7CiAgICAgICAgcHVzaChmb3Jlc3QuaWZNYXBFbnRyeSgKICAgICAgICAgICAgdG9WYWx1ZShjb25kaXRpb24pLAogICAgICAgICAgICB0aGVuRW50cnksCiAgICAgICAgICAgIG5ldyBTcHJlYWRNYXBFbnRyeShlbHNlRW50cnkuZXhwcmVzc2lvbiwgZWxzZUVudHJ5LmlzTnVsbEF3YXJlKSwKICAgICAgICAgICAgaWZUb2tlbikpOwogICAgICB9IGVsc2UgewogICAgICAgIGludCBvZmZzZXQgPSBlbHNlRW50cnkgaXMgRXhwcmVzc2lvbgogICAgICAgICAgICA/IGVsc2VFbnRyeS5maWxlT2Zmc2V0CiAgICAgICAgICAgIDogb2Zmc2V0Rm9yVG9rZW4oaWZUb2tlbik7CiAgICAgICAgcHVzaChuZXcgTWFwRW50cnkoCiAgICAgICAgICAgIGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdC53aXRoQXJndW1lbnRzKCc6JyksCiAgICAgICAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICAgICAgICAxKSksCiAgICAgICAgICAgIG5ldyBOdWxsTGl0ZXJhbCgpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4oaWZUb2tlbikpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGVsc2VFbnRyeSBpcyBNYXBFbnRyeSkgewogICAgICBpZiAodGhlbkVudHJ5IGlzIFNwcmVhZEVsZW1lbnQpIHsKICAgICAgICBwdXNoKGZvcmVzdC5pZk1hcEVudHJ5KAogICAgICAgICAgICB0b1ZhbHVlKGNvbmRpdGlvbiksCiAgICAgICAgICAgIG5ldyBTcHJlYWRNYXBFbnRyeSh0aGVuRW50cnkuZXhwcmVzc2lvbiwgdGhlbkVudHJ5LmlzTnVsbEF3YXJlKSwKICAgICAgICAgICAgZWxzZUVudHJ5LAogICAgICAgICAgICBpZlRva2VuKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW50IG9mZnNldCA9IHRoZW5FbnRyeSBpcyBFeHByZXNzaW9uCiAgICAgICAgICAgID8gdGhlbkVudHJ5LmZpbGVPZmZzZXQKICAgICAgICAgICAgOiBvZmZzZXRGb3JUb2tlbihpZlRva2VuKTsKICAgICAgICBwdXNoKG5ldyBNYXBFbnRyeSgKICAgICAgICAgICAgZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEFmdGVyQnV0R290LndpdGhBcmd1bWVudHMoJzonKSwKICAgICAgICAgICAgICAgIG9mZnNldCwKICAgICAgICAgICAgICAgIDEpKSwKICAgICAgICAgICAgbmV3IE51bGxMaXRlcmFsKCkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihpZlRva2VuKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHB1c2goZm9yZXN0LmlmRWxlbWVudCgKICAgICAgICAgIHRvVmFsdWUoY29uZGl0aW9uKSwgdG9WYWx1ZSh0aGVuRW50cnkpLCB0b1ZhbHVlKGVsc2VFbnRyeSksIGlmVG9rZW4pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3ByZWFkRXhwcmVzc2lvbihUb2tlbiBzcHJlYWRUb2tlbikgewogICAgZGVidWdFdmVudCgiU3ByZWFkRXhwcmVzc2lvbiIpOwogICAgdmFyIGV4cHJlc3Npb24gPSBwb3AoKTsKICAgIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmVuYWJsZVNwcmVhZENvbGxlY3Rpb25zKSB7CiAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbi53aXRoQXJndW1lbnRzKHNwcmVhZFRva2VuKSwKICAgICAgICAgIHNwcmVhZFRva2VuLAogICAgICAgICAgc3ByZWFkVG9rZW4pOwogICAgICBwdXNoKGludmFsaWRDb2xsZWN0aW9uRWxlbWVudCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lICYmCiAgICAgICAgIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVDb25zdGFudFVwZGF0ZTIwMTgpIHsKICAgICAgaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIGZhc3RhLnRlbXBsYXRlQ2FudFVzZUNvbnRyb2xGbG93T3JTcHJlYWRBc0NvbnN0YW50CiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoc3ByZWFkVG9rZW4pLAogICAgICAgICAgc3ByZWFkVG9rZW4sCiAgICAgICAgICBzcHJlYWRUb2tlbik7CiAgICAgIHB1c2goaW52YWxpZENvbGxlY3Rpb25FbGVtZW50KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHRyYW5zZm9ybUNvbGxlY3Rpb25zID0gdHJ1ZTsKICAgIHB1c2goZm9yZXN0LnNwcmVhZEVsZW1lbnQodG9WYWx1ZShleHByZXNzaW9uKSwgc3ByZWFkVG9rZW4pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVHlwZUFyZ3VtZW50cyhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJUeXBlQXJndW1lbnRzIik7CiAgICBwdXNoKGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PFVucmVzb2x2ZWRUeXBlPigpLnBvcChzdGFjaywgY291bnQpID8/CiAgICAgICAgTnVsbFZhbHVlLlR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnZhbGlkVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiSW52YWxpZFR5cGVBcmd1bWVudHMiKTsKICAgIHBvcChOdWxsVmFsdWUuVHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVRoaXNFeHByZXNzaW9uKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBkZWJ1Z0V2ZW50KCJUaGlzRXhwcmVzc2lvbiIpOwogICAgaWYgKGNvbnRleHQuaXNTY29wZVJlZmVyZW5jZSAmJiBpc0luc3RhbmNlQ29udGV4dCkgewogICAgICBpZiAoZXh0ZW5zaW9uVGhpcyAhPSBudWxsKSB7CiAgICAgICAgcHVzaChfY3JlYXRlUmVhZE9ubHlWYXJpYWJsZUFjY2VzcygKICAgICAgICAgICAgZXh0ZW5zaW9uVGhpcywgdG9rZW4sIG9mZnNldEZvclRva2VuKHRva2VuKSwgJ3RoaXMnKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHVzaChuZXcgVGhpc0FjY2Vzc0dlbmVyYXRvcigKICAgICAgICAgICAgdGhpcywgdG9rZW4sIGluSW5pdGlhbGl6ZXIsIGluRmllbGRJbml0aWFsaXplcikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBwdXNoKG5ldyBJbmNvbXBsZXRlRXJyb3JHZW5lcmF0b3IoCiAgICAgICAgICB0aGlzLCB0b2tlbiwgZmFzdGEubWVzc2FnZVRoaXNBc0lkZW50aWZpZXIpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3VwZXJFeHByZXNzaW9uKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBkZWJ1Z0V2ZW50KCJTdXBlckV4cHJlc3Npb24iKTsKICAgIGlmIChjb250ZXh0LmlzU2NvcGVSZWZlcmVuY2UgJiYKICAgICAgICBpc0luc3RhbmNlQ29udGV4dCAmJgogICAgICAgIGV4dGVuc2lvblRoaXMgPT0gbnVsbCkgewogICAgICBNZW1iZXIgbWVtYmVyID0gdGhpcy5tZW1iZXIudGFyZ2V0OwogICAgICBtZW1iZXIudHJhbnNmb3JtZXJGbGFncyB8PSBUcmFuc2Zvcm1lckZsYWcuc3VwZXJDYWxsczsKICAgICAgcHVzaChuZXcgVGhpc0FjY2Vzc0dlbmVyYXRvcigKICAgICAgICAgIHRoaXMsIHRva2VuLCBpbkluaXRpYWxpemVyLCBpbkZpZWxkSW5pdGlhbGl6ZXIsCiAgICAgICAgICBpc1N1cGVyOiB0cnVlKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKG5ldyBJbmNvbXBsZXRlRXJyb3JHZW5lcmF0b3IoCiAgICAgICAgICB0aGlzLCB0b2tlbiwgZmFzdGEubWVzc2FnZVN1cGVyQXNJZGVudGlmaWVyKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hbWVkQXJndW1lbnQoVG9rZW4gY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIk5hbWVkQXJndW1lbnQiKTsKICAgIEV4cHJlc3Npb24gdmFsdWUgPSBwb3BGb3JWYWx1ZSgpOwogICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gcG9wKCk7CiAgICBwdXNoKG5ldyBOYW1lZEV4cHJlc3Npb24oaWRlbnRpZmllci5uYW1lLCB2YWx1ZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gaWRlbnRpZmllci5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25OYW1lKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGdW5jdGlvbk5hbWUiKTsKICAgIElkZW50aWZpZXIgbmFtZSA9IHBvcCgpOwogICAgVG9rZW4gbmFtZVRva2VuID0gZGVwcmVjYXRlZF9leHRyYWN0VG9rZW4obmFtZSk7CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCgKICAgICAgICBuYW1lLm5hbWUsIGZ1bmN0aW9uTmVzdGluZ0xldmVsLAogICAgICAgIGZvclN5bnRoZXRpY1Rva2VuOiBuYW1lVG9rZW4uaXNTeW50aGV0aWMsCiAgICAgICAgaXNGaW5hbDogdHJ1ZSwKICAgICAgICBpc0xvY2FsRnVuY3Rpb246IHRydWUpCiAgICAgIC4uZmlsZU9mZnNldCA9IG5hbWUuY2hhck9mZnNldDsKICAgIC8vIFRPRE8oYWhlKTogV2h5IGFyZSB3ZSBsb29raW5nIHVwIGluIGxvY2FsIHNjb3BlLCBidXQgZGVjbGFyaW5nIGluIHBhcmVudAogICAgLy8gc2NvcGU/CiAgICBEZWNsYXJhdGlvbiBleGlzdGluZyA9IHNjb3BlLmxvY2FsW25hbWUubmFtZV07CiAgICBpZiAoZXhpc3RpbmcgIT0gbnVsbCkgewogICAgICByZXBvcnREdXBsaWNhdGVkRGVjbGFyYXRpb24oZXhpc3RpbmcsIG5hbWUubmFtZSwgbmFtZS5jaGFyT2Zmc2V0KTsKICAgIH0KICAgIHB1c2gobmV3IEZ1bmN0aW9uRGVjbGFyYXRpb25KdWRnbWVudCgKICAgICAgICB2YXJpYWJsZSwKICAgICAgICAvLyBUaGUgZnVuY3Rpb24gbm9kZSBpcyBjcmVhdGVkIGxhdGVyLgogICAgICAgIG51bGwpCiAgICAgIC4uZmlsZU9mZnNldCA9IGJlZ2luVG9rZW4uY2hhck9mZnNldCk7CiAgICBkZWNsYXJlVmFyaWFibGUodmFyaWFibGUsIHNjb3BlLnBhcmVudCk7CiAgfQoKICB2b2lkIGVudGVyRnVuY3Rpb24oKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbnRlckZ1bmN0aW9uIik7CiAgICBmdW5jdGlvbk5lc3RpbmdMZXZlbCsrOwogICAgcHVzaChzd2l0Y2hTY29wZSA/PyBOdWxsVmFsdWUuU3dpdGNoU2NvcGUpOwogICAgc3dpdGNoU2NvcGUgPSBudWxsOwogICAgcHVzaChpbkNhdGNoQmxvY2spOwogICAgaW5DYXRjaEJsb2NrID0gZmFsc2U7CiAgfQoKICB2b2lkIGV4aXRGdW5jdGlvbigpIHsKICAgIGRlYnVnRXZlbnQoImV4aXRGdW5jdGlvbiIpOwogICAgZnVuY3Rpb25OZXN0aW5nTGV2ZWwtLTsKICAgIGluQ2F0Y2hCbG9jayA9IHBvcCgpOwogICAgc3dpdGNoU2NvcGUgPSBwb3AoKTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IHBvcCgpOwogICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIHB1c2godHlwZVZhcmlhYmxlcyA/PyBOdWxsVmFsdWUuVHlwZVZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbiIpOwogICAgZW50ZXJGdW5jdGlvbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk5hbWVkRnVuY3Rpb25FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbk5hbWVkRnVuY3Rpb25FeHByZXNzaW9uIik7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIC8vIENyZWF0ZSBhbiBhZGRpdGlvbmFsIHNjb3BlIGluIHdoaWNoIHRoZSBuYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIGlzCiAgICAvLyBkZWNsYXJlZC4KICAgIGVudGVyTG9jYWxTY29wZSgibmFtZWQgZnVuY3Rpb24iKTsKICAgIHB1c2godHlwZVZhcmlhYmxlcyA/PyBOdWxsVmFsdWUuVHlwZVZhcmlhYmxlcyk7CiAgICBlbnRlckZ1bmN0aW9uKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRnVuY3Rpb25FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkZ1bmN0aW9uRXhwcmVzc2lvbiIpOwogICAgZW50ZXJGdW5jdGlvbigpOwogIH0KCiAgdm9pZCBwdXNoTmFtZWRGdW5jdGlvbihUb2tlbiB0b2tlbiwgYm9vbCBpc0Z1bmN0aW9uRXhwcmVzc2lvbikgewogICAgU3RhdGVtZW50IGJvZHkgPSBwb3BTdGF0ZW1lbnQoKTsKICAgIEFzeW5jTWFya2VyIGFzeW5jTW9kaWZpZXIgPSBwb3AoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBGb3JtYWxQYXJhbWV0ZXJzIGZvcm1hbHMgPSBwb3AoKTsKICAgIE9iamVjdCBkZWNsYXJhdGlvbiA9IHBvcCgpOwogICAgVW5yZXNvbHZlZFR5cGUgcmV0dXJuVHlwZSA9IHBvcCgpOwogICAgYm9vbCBoYXNJbXBsaWNpdFJldHVyblR5cGUgPSByZXR1cm5UeXBlID09IG51bGw7CiAgICBleGl0RnVuY3Rpb24oKTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVBhcmFtZXRlcnMgPSBwb3AoKTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gYW5ub3RhdGlvbnM7CiAgICBpZiAoIWlzRnVuY3Rpb25FeHByZXNzaW9uKSB7CiAgICAgIGFubm90YXRpb25zID0gcG9wKCk7IC8vIE1ldGFkYXRhLgogICAgfQogICAgRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uID0gZm9ybWFscy5idWlsZEZ1bmN0aW9uTm9kZShsaWJyYXJ5LCByZXR1cm5UeXBlLAogICAgICAgIHR5cGVQYXJhbWV0ZXJzLCBhc3luY01vZGlmaWVyLCBib2R5LCB0b2tlbi5jaGFyT2Zmc2V0KTsKCiAgICBpZiAoZGVjbGFyYXRpb24gaXMgRnVuY3Rpb25EZWNsYXJhdGlvbikgewogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gZGVjbGFyYXRpb24udmFyaWFibGU7CiAgICAgIGlmIChhbm5vdGF0aW9ucyAhPSBudWxsKSB7CiAgICAgICAgZm9yIChFeHByZXNzaW9uIGFubm90YXRpb24gaW4gYW5ub3RhdGlvbnMpIHsKICAgICAgICAgIHZhcmlhYmxlLmFkZEFubm90YXRpb24oYW5ub3RhdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25KdWRnbWVudC5zZXRIYXNJbXBsaWNpdFJldHVyblR5cGUoCiAgICAgICAgICBkZWNsYXJhdGlvbiwgaGFzSW1wbGljaXRSZXR1cm5UeXBlKTsKCiAgICAgIHZhcmlhYmxlLnR5cGUgPSBmdW5jdGlvbi5mdW5jdGlvblR5cGU7CiAgICAgIGlmIChpc0Z1bmN0aW9uRXhwcmVzc2lvbikgewogICAgICAgIEV4cHJlc3Npb24gb2xkSW5pdGlhbGl6ZXIgPSB2YXJpYWJsZS5pbml0aWFsaXplcjsKICAgICAgICB2YXJpYWJsZS5pbml0aWFsaXplciA9IG5ldyBGdW5jdGlvbkV4cHJlc3Npb24oZnVuY3Rpb24pCiAgICAgICAgICAuLnBhcmVudCA9IHZhcmlhYmxlCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBmb3JtYWxzLmNoYXJPZmZzZXQ7CiAgICAgICAgZXhpdExvY2FsU2NvcGUoKTsKICAgICAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBuZXcgTmFtZWRGdW5jdGlvbkV4cHJlc3Npb25KdWRnbWVudCh2YXJpYWJsZSk7CiAgICAgICAgaWYgKG9sZEluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICAgIC8vIFRoaXMgbXVzdCBoYXZlIGJlZW4gYSBjb21waWxlLXRpbWUgZXJyb3IuCiAgICAgICAgICBFeHByZXNzaW9uIGVycm9yID0gZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24ob2xkSW5pdGlhbGl6ZXIpOwogICAgICAgICAgYXNzZXJ0KGlzRXJyb25lb3VzTm9kZShlcnJvcikpOwogICAgICAgICAgaW50IG9mZnNldCA9IGZvcmVzdC5yZWFkT2Zmc2V0KGV4cHJlc3Npb24pOwogICAgICAgICAgcHVzaCh3cmFwU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgICAgICBuZXcgTGV0KAogICAgICAgICAgICAgICAgICBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShlcnJvcikuLmZpbGVPZmZzZXQgPSBvZmZzZXQsCiAgICAgICAgICAgICAgICAgIGV4cHJlc3Npb24pCiAgICAgICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQsCiAgICAgICAgICAgICAgb2Zmc2V0KSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHB1c2goZXhwcmVzc2lvbik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGRlY2xhcmF0aW9uLmZ1bmN0aW9uID0gZnVuY3Rpb247CiAgICAgICAgZnVuY3Rpb24ucGFyZW50ID0gZGVjbGFyYXRpb247CiAgICAgICAgaWYgKHZhcmlhYmxlLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICAgIC8vIFRoaXMgbXVzdCBoYXZlIGJlZW4gYSBjb21waWxlLXRpbWUgZXJyb3IuCiAgICAgICAgICBhc3NlcnQoaXNFcnJvbmVvdXNOb2RlKHZhcmlhYmxlLmluaXRpYWxpemVyKSk7CgogICAgICAgICAgcHVzaChmb3Jlc3QuYmxvY2soCiAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICA8U3RhdGVtZW50PlsKICAgICAgICAgICAgICAgIGZvcmVzdC5leHByZXNzaW9uU3RhdGVtZW50KHZhcmlhYmxlLmluaXRpYWxpemVyLCB0b2tlbiksCiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbgogICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgbnVsbCkKICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZGVjbGFyYXRpb24uZmlsZU9mZnNldCk7CiAgICAgICAgICB2YXJpYWJsZS5pbml0aWFsaXplciA9IG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHB1c2goZGVjbGFyYXRpb24pOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHVuaGFuZGxlZCgiJHtkZWNsYXJhdGlvbi5ydW50aW1lVHlwZX0iLCAicHVzaE5hbWVkRnVuY3Rpb24iLAogICAgICAgICAgdG9rZW4uY2hhck9mZnNldCwgdXJpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTmFtZWRGdW5jdGlvbkV4cHJlc3Npb24oVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5hbWVkRnVuY3Rpb25FeHByZXNzaW9uIik7CiAgICBwdXNoTmFtZWRGdW5jdGlvbihlbmRUb2tlbiwgdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uIik7CiAgICBwdXNoTmFtZWRGdW5jdGlvbih0b2tlbiwgZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGdW5jdGlvbkV4cHJlc3Npb24oVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZ1bmN0aW9uRXhwcmVzc2lvbiIpOwogICAgU3RhdGVtZW50IGJvZHkgPSBwb3BTdGF0ZW1lbnQoKTsKICAgIEFzeW5jTWFya2VyIGFzeW5jTW9kaWZpZXIgPSBwb3AoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBGb3JtYWxQYXJhbWV0ZXJzIGZvcm1hbHMgPSBwb3AoKTsKICAgIGV4aXRGdW5jdGlvbigpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlUGFyYW1ldGVycyA9IHBvcCgpOwogICAgRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uID0gZm9ybWFscy5idWlsZEZ1bmN0aW9uTm9kZSgKICAgICAgICBsaWJyYXJ5LCBudWxsLCB0eXBlUGFyYW1ldGVycywgYXN5bmNNb2RpZmllciwgYm9keSwgdG9rZW4uY2hhck9mZnNldCkKICAgICAgLi5maWxlT2Zmc2V0ID0gYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0OwoKICAgIGlmIChsaWJyYXJ5LmxlZ2FjeU1vZGUgJiYgYXN5bmNNb2RpZmllciAhPSBBc3luY01hcmtlci5TeW5jKSB7CiAgICAgIERhcnRUeXBlIHJldHVyblR5cGU7CiAgICAgIHN3aXRjaCAoYXN5bmNNb2RpZmllcikgewogICAgICAgIGNhc2UgQXN5bmNNYXJrZXIuQXN5bmM6CiAgICAgICAgICByZXR1cm5UeXBlID0gY29yZVR5cGVzLmZ1dHVyZUNsYXNzLnJhd1R5cGU7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEFzeW5jTWFya2VyLkFzeW5jU3RhcjoKICAgICAgICAgIHJldHVyblR5cGUgPSBjb3JlVHlwZXMuc3RyZWFtQ2xhc3MucmF3VHlwZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQXN5bmNNYXJrZXIuU3luY1N0YXI6CiAgICAgICAgICByZXR1cm5UeXBlID0gY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3MucmF3VHlwZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm5UeXBlID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGZ1bmN0aW9uLnJldHVyblR5cGUgPSByZXR1cm5UeXBlOwogICAgfQogICAgaWYgKGNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSkgewogICAgICBwdXNoKGJ1aWxkUHJvYmxlbShmYXN0YS5tZXNzYWdlTm90QUNvbnN0YW50RXhwcmVzc2lvbiwgZm9ybWFscy5jaGFyT2Zmc2V0LAogICAgICAgICAgZm9ybWFscy5sZW5ndGgpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobmV3IEZ1bmN0aW9uRXhwcmVzc2lvbihmdW5jdGlvbikKICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihiZWdpblRva2VuKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZERvV2hpbGVTdGF0ZW1lbnQoCiAgICAgIFRva2VuIGRvS2V5d29yZCwgVG9rZW4gd2hpbGVLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiRG9XaGlsZVN0YXRlbWVudCIpOwogICAgRXhwcmVzc2lvbiBjb25kaXRpb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgU3RhdGVtZW50IGJvZHkgPSBwb3BTdGF0ZW1lbnQoKTsKICAgIEp1bXBUYXJnZXQgY29udGludWVUYXJnZXQgPSBleGl0Q29udGludWVUYXJnZXQoKTsKICAgIEp1bXBUYXJnZXQgYnJlYWtUYXJnZXQgPSBleGl0QnJlYWtUYXJnZXQoKTsKICAgIGlmIChjb250aW51ZVRhcmdldC5oYXNVc2VycykgewogICAgICBib2R5ID0gZm9yZXN0LnN5bnRoZXRpY0xhYmVsZWRTdGF0ZW1lbnQoYm9keSk7CiAgICAgIGNvbnRpbnVlVGFyZ2V0LnJlc29sdmVDb250aW51ZXMoZm9yZXN0LCBib2R5KTsKICAgIH0KICAgIFN0YXRlbWVudCByZXN1bHQgPQogICAgICAgIGZvcmVzdC5kb1N0YXRlbWVudChkb0tleXdvcmQsIGJvZHksIHdoaWxlS2V5d29yZCwgY29uZGl0aW9uLCBlbmRUb2tlbik7CiAgICBpZiAoYnJlYWtUYXJnZXQuaGFzVXNlcnMpIHsKICAgICAgcmVzdWx0ID0gZm9yZXN0LnN5bnRoZXRpY0xhYmVsZWRTdGF0ZW1lbnQocmVzdWx0KTsKICAgICAgYnJlYWtUYXJnZXQucmVzb2x2ZUJyZWFrcyhmb3Jlc3QsIHJlc3VsdCk7CiAgICB9CiAgICBleGl0TG9vcE9yU3dpdGNoKHJlc3VsdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRm9ySW5FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBlbnRlckxvY2FsU2NvcGUobnVsbCwgc2NvcGUucGFyZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ySW5FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGb3JJbkV4cHJlc3Npb24iKTsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBvcEZvclZhbHVlKCk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgcHVzaChleHByZXNzaW9uID8/IE51bGxWYWx1ZS5FeHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRm9ySW5Mb29wUGFydHMoVG9rZW4gYXdhaXRUb2tlbiwgVG9rZW4gZm9yVG9rZW4sCiAgICAgIFRva2VuIGxlZnRQYXJlbnRoZXNpcywgVG9rZW4gaW5LZXl3b3JkKSB7CiAgICBwdXNoKGF3YWl0VG9rZW4gPz8gTnVsbFZhbHVlLkF3YWl0VG9rZW4pOwogICAgcHVzaChmb3JUb2tlbik7CiAgICBwdXNoKGluS2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvckluQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZvckluQ29udHJvbEZsb3ciKTsKICAgIHZhciBlbnRyeSA9IHBvcCgpOwogICAgVG9rZW4gaW5Ub2tlbiA9IHBvcCgpOwogICAgVG9rZW4gZm9yVG9rZW4gPSBwb3AoKTsKICAgIFRva2VuIGF3YWl0VG9rZW4gPSBwb3AoTnVsbFZhbHVlLkF3YWl0VG9rZW4pOwogICAgRXhwcmVzc2lvbiBpdGVyYWJsZSA9IHBvcEZvclZhbHVlKCk7CiAgICBPYmplY3QgbHZhbHVlID0gcG9wKCk7IC8vIGx2YWx1ZQogICAgZXhpdExvY2FsU2NvcGUoKTsKCiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVDb250cm9sRmxvd0NvbGxlY3Rpb25zKSB7CiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBSZXBvcnQgYSBtb3JlIHVzZXIgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZQogICAgICAvLyB3aGVuIGFuIGV4cGVyaW1lbnQgaXMgbm90IGVuYWJsZWQKICAgICAgaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuLndpdGhBcmd1bWVudHMoZm9yVG9rZW4pLAogICAgICAgICAgZm9yVG9rZW4sCiAgICAgICAgICBmb3JUb2tlbik7CiAgICAgIHB1c2goaW52YWxpZENvbGxlY3Rpb25FbGVtZW50KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUpIHsKICAgICAgaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIGZhc3RhLnRlbXBsYXRlQ2FudFVzZUNvbnRyb2xGbG93T3JTcHJlYWRBc0NvbnN0YW50CiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZm9yVG9rZW4pLAogICAgICAgICAgZm9yVG9rZW4sCiAgICAgICAgICBmb3JUb2tlbik7CiAgICAgIHB1c2goaW52YWxpZENvbGxlY3Rpb25FbGVtZW50KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHRyYW5zZm9ybUNvbGxlY3Rpb25zID0gdHJ1ZTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBidWlsZEZvckluVmFyaWFibGUobHZhbHVlKTsKICAgIEV4cHJlc3Npb24gcHJvYmxlbSA9IGNoZWNrRm9ySW5WYXJpYWJsZShsdmFsdWUsIHZhcmlhYmxlLCBmb3JUb2tlbik7CiAgICBTdGF0ZW1lbnQgcHJvbG9ndWUgPSBidWlsZEZvckluQm9keShsdmFsdWUsIHZhcmlhYmxlLCBmb3JUb2tlbiwgaW5Ub2tlbik7CiAgICBpZiAoZW50cnkgaXMgTWFwRW50cnkpIHsKICAgICAgcHVzaChmb3Jlc3QuZm9ySW5NYXBFbnRyeSgKICAgICAgICAgIHZhcmlhYmxlLCBpdGVyYWJsZSwgcHJvbG9ndWUsIGVudHJ5LCBwcm9ibGVtLCBmb3JUb2tlbiwKICAgICAgICAgIGlzQXN5bmM6IGF3YWl0VG9rZW4gIT0gbnVsbCkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChmb3Jlc3QuZm9ySW5FbGVtZW50KAogICAgICAgICAgdmFyaWFibGUsIGl0ZXJhYmxlLCBwcm9sb2d1ZSwgdG9WYWx1ZShlbnRyeSksIHByb2JsZW0sIGZvclRva2VuLAogICAgICAgICAgaXNBc3luYzogYXdhaXRUb2tlbiAhPSBudWxsKSk7CiAgICB9CiAgfQoKICBWYXJpYWJsZURlY2xhcmF0aW9uIGJ1aWxkRm9ySW5WYXJpYWJsZShPYmplY3QgbHZhbHVlKSB7CiAgICBpZiAobHZhbHVlIGlzIFZhcmlhYmxlRGVjbGFyYXRpb24pIHJldHVybiBsdmFsdWU7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudC5mb3JWYWx1ZShudWxsLCBmdW5jdGlvbk5lc3RpbmdMZXZlbCk7CiAgfQoKICBFeHByZXNzaW9uIGNoZWNrRm9ySW5WYXJpYWJsZSgKICAgICAgT2JqZWN0IGx2YWx1ZSwgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgVG9rZW4gZm9yVG9rZW4pIHsKICAgIGlmIChsdmFsdWUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbikgewogICAgICBpZiAodmFyaWFibGUuaXNDb25zdCkgewogICAgICAgIHJldHVybiBidWlsZFByb2JsZW0oZmFzdGEubWVzc2FnZUZvckluTG9vcFdpdGhDb25zdFZhcmlhYmxlLAogICAgICAgICAgICB2YXJpYWJsZS5maWxlT2Zmc2V0LCB2YXJpYWJsZS5uYW1lLmxlbmd0aCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobHZhbHVlIGlzISBHZW5lcmF0b3IpIHsKICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZm9yZXN0LmlzVmFyaWFibGVzRGVjbGFyYXRpb24obHZhbHVlKQogICAgICAgICAgPyBmYXN0YS5tZXNzYWdlRm9ySW5Mb29wRXhhY3RseU9uZVZhcmlhYmxlCiAgICAgICAgICA6IGZhc3RhLm1lc3NhZ2VGb3JJbkxvb3BOb3RBc3NpZ25hYmxlOwogICAgICBUb2tlbiB0b2tlbiA9IGZvclRva2VuLm5leHQubmV4dDsKICAgICAgcmV0dXJuIGJ1aWxkUHJvYmxlbSgKICAgICAgICAgIG1lc3NhZ2UsIG9mZnNldEZvclRva2VuKHRva2VuKSwgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgU3RhdGVtZW50IGJ1aWxkRm9ySW5Cb2R5KE9iamVjdCBsdmFsdWUsIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsCiAgICAgIFRva2VuIGZvclRva2VuLCBUb2tlbiBpbktleXdvcmQpIHsKICAgIGlmIChsdmFsdWUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbikgcmV0dXJuIG51bGw7CiAgICBpZiAobHZhbHVlIGlzIEdlbmVyYXRvcikgewogICAgICAvLy8gV2UgYXJlIGluIHRoaXMgY2FzZSwgd2hlcmUgYGx2YWx1ZWAgaXNuJ3QgYSBbVmFyaWFibGVEZWNsYXJhdGlvbl06CiAgICAgIC8vLwogICAgICAvLy8gICAgIGZvciAobHZhbHVlIGluIGV4cHJlc3Npb24pIGJvZHkKICAgICAgLy8vCiAgICAgIC8vLyBUaGlzIGlzIG5vcm1hbGl6ZWQgdG86CiAgICAgIC8vLwogICAgICAvLy8gICAgIGZvciAoZmluYWwgI3QgaW4gZXhwcmVzc2lvbikgewogICAgICAvLy8gICAgICAgbHZhbHVlID0gI3Q7CiAgICAgIC8vLyAgICAgICBib2R5OwogICAgICAvLy8gICAgIH0KICAgICAgVHlwZVByb21vdGlvbkZhY3QgZmFjdCA9CiAgICAgICAgICB0eXBlUHJvbW90ZXI/LmdldEZhY3RGb3JBY2Nlc3ModmFyaWFibGUsIGZ1bmN0aW9uTmVzdGluZ0xldmVsKTsKICAgICAgVHlwZVByb21vdGlvblNjb3BlIHNjb3BlID0gdHlwZVByb21vdGVyPy5jdXJyZW50U2NvcGU7CiAgICAgIEV4cHJlc3Npb24gc3ludGhldGljQXNzaWdubWVudCA9IGx2YWx1ZS5idWlsZEFzc2lnbm1lbnQoCiAgICAgICAgICBuZXcgVmFyaWFibGVHZXRKdWRnbWVudCh2YXJpYWJsZSwgZmFjdCwgc2NvcGUpCiAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGluS2V5d29yZC5vZmZzZXQsCiAgICAgICAgICB2b2lkQ29udGV4dDogdHJ1ZSk7CiAgICAgIGlmIChzeW50aGV0aWNBc3NpZ25tZW50IGlzIHNoYWRvdy5TeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQpIHsKICAgICAgICBzeW50aGV0aWNBc3NpZ25tZW50ID0gd3JhcFN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICAgIGRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKHN5bnRoZXRpY0Fzc2lnbm1lbnQpLAogICAgICAgICAgICBvZmZzZXRGb3JUb2tlbihsdmFsdWUudG9rZW4pKTsKICAgICAgfQogICAgICByZXR1cm4gZm9yZXN0LmV4cHJlc3Npb25TdGF0ZW1lbnQoc3ludGhldGljQXNzaWdubWVudCwgbnVsbCk7CiAgICB9CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSBmb3Jlc3QuaXNWYXJpYWJsZXNEZWNsYXJhdGlvbihsdmFsdWUpCiAgICAgICAgPyBmYXN0YS5tZXNzYWdlRm9ySW5Mb29wRXhhY3RseU9uZVZhcmlhYmxlCiAgICAgICAgOiBmYXN0YS5tZXNzYWdlRm9ySW5Mb29wTm90QXNzaWduYWJsZTsKICAgIFRva2VuIHRva2VuID0gZm9yVG9rZW4ubmV4dC5uZXh0OwogICAgU3RhdGVtZW50IGJvZHk7CiAgICBpZiAoZm9yZXN0LmlzVmFyaWFibGVzRGVjbGFyYXRpb24obHZhbHVlKSkgewogICAgICBib2R5ID0gZm9yZXN0LmJsb2NrKAogICAgICAgICAgbnVsbCwKICAgICAgICAgIC8vIE5ldyBsaXN0IGJlY2F1c2UgdGhlIGRlY2xhcmF0aW9ucyBhcmUgbm90IGEgZ3Jvd2FibGUgbGlzdC4KICAgICAgICAgIG5ldyBMaXN0PFN0YXRlbWVudD4uZnJvbSgKICAgICAgICAgICAgICBmb3Jlc3QudmFyaWFibGVzRGVjbGFyYXRpb25FeHRyYWN0RGVjbGFyYXRpb25zKGx2YWx1ZSkpLAogICAgICAgICAgbnVsbCk7CiAgICB9IGVsc2UgewogICAgICBib2R5ID0gZm9yZXN0LmV4cHJlc3Npb25TdGF0ZW1lbnQobHZhbHVlLCBudWxsKTsKICAgIH0KICAgIHJldHVybiBjb21iaW5lU3RhdGVtZW50cygKICAgICAgICBmb3Jlc3QuZXhwcmVzc2lvblN0YXRlbWVudCgKICAgICAgICAgICAgYnVpbGRQcm9ibGVtKG1lc3NhZ2UsIG9mZnNldEZvclRva2VuKHRva2VuKSwgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKSwKICAgICAgICAgICAgbnVsbCksCiAgICAgICAgYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvckluKFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGb3JJbiIpOwogICAgU3RhdGVtZW50IGJvZHkgPSBwb3BTdGF0ZW1lbnQoKTsKCiAgICBUb2tlbiBpbktleXdvcmQgPSBwb3AoKTsKICAgIFRva2VuIGZvclRva2VuID0gcG9wKCk7CiAgICBUb2tlbiBhd2FpdFRva2VuID0gcG9wKE51bGxWYWx1ZS5Bd2FpdFRva2VuKTsKCiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwb3BGb3JWYWx1ZSgpOwogICAgT2JqZWN0IGx2YWx1ZSA9IHBvcCgpOwogICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIEp1bXBUYXJnZXQgY29udGludWVUYXJnZXQgPSBleGl0Q29udGludWVUYXJnZXQoKTsKICAgIEp1bXBUYXJnZXQgYnJlYWtUYXJnZXQgPSBleGl0QnJlYWtUYXJnZXQoKTsKICAgIGlmIChjb250aW51ZVRhcmdldC5oYXNVc2VycykgewogICAgICBib2R5ID0gZm9yZXN0LnN5bnRoZXRpY0xhYmVsZWRTdGF0ZW1lbnQoYm9keSk7CiAgICAgIGNvbnRpbnVlVGFyZ2V0LnJlc29sdmVDb250aW51ZXMoZm9yZXN0LCBib2R5KTsKICAgIH0KICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBidWlsZEZvckluVmFyaWFibGUobHZhbHVlKTsKICAgIEV4cHJlc3Npb24gcHJvYmxlbSA9IGNoZWNrRm9ySW5WYXJpYWJsZShsdmFsdWUsIHZhcmlhYmxlLCBmb3JUb2tlbik7CiAgICBTdGF0ZW1lbnQgcHJvbG9ndWUgPSBidWlsZEZvckluQm9keShsdmFsdWUsIHZhcmlhYmxlLCBmb3JUb2tlbiwgaW5LZXl3b3JkKTsKICAgIGlmIChwcm9sb2d1ZSAhPSBudWxsKSB7CiAgICAgIGlmIChwcm9sb2d1ZSBpcyBCbG9jaykgewogICAgICAgIGlmIChib2R5IGlzIEJsb2NrKSB7CiAgICAgICAgICBmb3IgKFN0YXRlbWVudCBzdGF0ZW1lbnQgaW4gYm9keS5zdGF0ZW1lbnRzKSB7CiAgICAgICAgICAgIHByb2xvZ3VlLmFkZFN0YXRlbWVudChzdGF0ZW1lbnQpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwcm9sb2d1ZS5hZGRTdGF0ZW1lbnQoYm9keSk7CiAgICAgICAgfQogICAgICAgIGJvZHkgPSBwcm9sb2d1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBib2R5ID0gY29tYmluZVN0YXRlbWVudHMocHJvbG9ndWUsIGJvZHkpOwogICAgICB9CiAgICB9CiAgICBTdGF0ZW1lbnQgcmVzdWx0ID0gbmV3IEZvckluU3RhdGVtZW50KHZhcmlhYmxlLCBleHByZXNzaW9uLCBib2R5LAogICAgICAgIGlzQXN5bmM6IGF3YWl0VG9rZW4gIT0gbnVsbCkKICAgICAgLi5maWxlT2Zmc2V0ID0gYXdhaXRUb2tlbj8uY2hhck9mZnNldCA/PyBmb3JUb2tlbi5jaGFyT2Zmc2V0CiAgICAgIC4uYm9keU9mZnNldCA9IGJvZHkuZmlsZU9mZnNldDsgLy8gVE9ETyhhaGUpOiBJc24ndCB0aGlzIHJlZHVuZGFudD8KICAgIGlmIChicmVha1RhcmdldC5oYXNVc2VycykgewogICAgICByZXN1bHQgPSBmb3Jlc3Quc3ludGhldGljTGFiZWxlZFN0YXRlbWVudChyZXN1bHQpOwogICAgICBicmVha1RhcmdldC5yZXNvbHZlQnJlYWtzKGZvcmVzdCwgcmVzdWx0KTsKICAgIH0KICAgIGlmIChwcm9ibGVtICE9IG51bGwpIHsKICAgICAgcmVzdWx0ID0KICAgICAgICAgIGNvbWJpbmVTdGF0ZW1lbnRzKGZvcmVzdC5leHByZXNzaW9uU3RhdGVtZW50KHByb2JsZW0sIG51bGwpLCByZXN1bHQpOwogICAgfQogICAgZXhpdExvb3BPclN3aXRjaChyZXN1bHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMYWJlbChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTGFiZWwiKTsKICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IHBvcCgpOwogICAgcHVzaChuZXcgTGFiZWwoaWRlbnRpZmllci5uYW1lLCBpZGVudGlmaWVyLmNoYXJPZmZzZXQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5MYWJlbGVkU3RhdGVtZW50KFRva2VuIHRva2VuLCBpbnQgbGFiZWxDb3VudCkgewogICAgZGVidWdFdmVudCgiYmVnaW5MYWJlbGVkU3RhdGVtZW50Iik7CiAgICBMaXN0PExhYmVsPiBsYWJlbHMgPQogICAgICAgIGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PExhYmVsPigpLnBvcChzdGFjaywgbGFiZWxDb3VudCk7CiAgICBlbnRlckxvY2FsU2NvcGUobnVsbCwgc2NvcGUuY3JlYXRlTmVzdGVkTGFiZWxTY29wZSgpKTsKICAgIExhYmVsVGFyZ2V0IHRhcmdldCA9CiAgICAgICAgbmV3IExhYmVsVGFyZ2V0KG1lbWJlciwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwsIHRva2VuLmNoYXJPZmZzZXQpOwogICAgaWYgKGxhYmVscyAhPSBudWxsKSB7CiAgICAgIGZvciAoTGFiZWwgbGFiZWwgaW4gbGFiZWxzKSB7CiAgICAgICAgc2NvcGUuZGVjbGFyZUxhYmVsKGxhYmVsLm5hbWUsIHRhcmdldCk7CiAgICAgIH0KICAgIH0KICAgIHB1c2godGFyZ2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTGFiZWxlZFN0YXRlbWVudChpbnQgbGFiZWxDb3VudCkgewogICAgZGVidWdFdmVudCgiTGFiZWxlZFN0YXRlbWVudCIpOwogICAgU3RhdGVtZW50IHN0YXRlbWVudCA9IHBvcCgpOwogICAgTGFiZWxUYXJnZXQgdGFyZ2V0ID0gcG9wKCk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgaWYgKHRhcmdldC5icmVha1RhcmdldC5oYXNVc2VycyB8fCB0YXJnZXQuY29udGludWVUYXJnZXQuaGFzVXNlcnMpIHsKICAgICAgaWYgKGZvcmVzdC5pc1ZhcmlhYmxlc0RlY2xhcmF0aW9uKHN0YXRlbWVudCkpIHsKICAgICAgICBpbnRlcm5hbFByb2JsZW0oCiAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VJbnRlcm5hbFByb2JsZW1MYWJlbFVzYWdlSW5WYXJpYWJsZXNEZWNsYXJhdGlvbiwKICAgICAgICAgICAgc3RhdGVtZW50LmZpbGVPZmZzZXQsCiAgICAgICAgICAgIHVyaSk7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlbWVudCBpcyEgTGFiZWxlZFN0YXRlbWVudCkgewogICAgICAgIHN0YXRlbWVudCA9IGZvcmVzdC5zeW50aGV0aWNMYWJlbGVkU3RhdGVtZW50KHN0YXRlbWVudCk7CiAgICAgIH0KICAgICAgdGFyZ2V0LmJyZWFrVGFyZ2V0LnJlc29sdmVCcmVha3MoZm9yZXN0LCBzdGF0ZW1lbnQpOwogICAgICB0YXJnZXQuY29udGludWVUYXJnZXQucmVzb2x2ZUNvbnRpbnVlcyhmb3Jlc3QsIHN0YXRlbWVudCk7CiAgICB9CiAgICBwdXNoKHN0YXRlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFJldGhyb3dTdGF0ZW1lbnQoVG9rZW4gcmV0aHJvd1Rva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiUmV0aHJvd1N0YXRlbWVudCIpOwogICAgaWYgKGluQ2F0Y2hCbG9jaykgewogICAgICBwdXNoKGZvcmVzdC5yZXRocm93U3RhdGVtZW50KHJldGhyb3dUb2tlbiwgZW5kVG9rZW4pKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobmV3IEV4cHJlc3Npb25TdGF0ZW1lbnRKdWRnbWVudChidWlsZFByb2JsZW0oCiAgICAgICAgICBmYXN0YS5tZXNzYWdlUmV0aHJvd05vdENhdGNoLAogICAgICAgICAgb2Zmc2V0Rm9yVG9rZW4ocmV0aHJvd1Rva2VuKSwKICAgICAgICAgIGxlbmd0aEZvclRva2VuKHJldGhyb3dUb2tlbikpKQogICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHJldGhyb3dUb2tlbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGaW5hbGx5QmxvY2soVG9rZW4gZmluYWxseUtleXdvcmQpIHsKICAgIGRlYnVnRXZlbnQoIkZpbmFsbHlCbG9jayIpOwogICAgLy8gRG8gbm90aGluZywgaGFuZGxlZCBieSBbZW5kVHJ5U3RhdGVtZW50XS4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kV2hpbGVTdGF0ZW1lbnQoVG9rZW4gd2hpbGVLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiV2hpbGVTdGF0ZW1lbnQiKTsKICAgIFN0YXRlbWVudCBib2R5ID0gcG9wU3RhdGVtZW50KCk7CiAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBvcEZvclZhbHVlKCk7CiAgICBKdW1wVGFyZ2V0IGNvbnRpbnVlVGFyZ2V0ID0gZXhpdENvbnRpbnVlVGFyZ2V0KCk7CiAgICBKdW1wVGFyZ2V0IGJyZWFrVGFyZ2V0ID0gZXhpdEJyZWFrVGFyZ2V0KCk7CiAgICBpZiAoY29udGludWVUYXJnZXQuaGFzVXNlcnMpIHsKICAgICAgYm9keSA9IGZvcmVzdC5zeW50aGV0aWNMYWJlbGVkU3RhdGVtZW50KGJvZHkpOwogICAgICBjb250aW51ZVRhcmdldC5yZXNvbHZlQ29udGludWVzKGZvcmVzdCwgYm9keSk7CiAgICB9CiAgICBTdGF0ZW1lbnQgcmVzdWx0ID0gZm9yZXN0LndoaWxlU3RhdGVtZW50KHdoaWxlS2V5d29yZCwgY29uZGl0aW9uLCBib2R5KTsKICAgIGlmIChicmVha1RhcmdldC5oYXNVc2VycykgewogICAgICByZXN1bHQgPSBmb3Jlc3Quc3ludGhldGljTGFiZWxlZFN0YXRlbWVudChyZXN1bHQpOwogICAgICBicmVha1RhcmdldC5yZXNvbHZlQnJlYWtzKGZvcmVzdCwgcmVzdWx0KTsKICAgIH0KICAgIGV4aXRMb29wT3JTd2l0Y2gocmVzdWx0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRW1wdHlTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkVtcHR5U3RhdGVtZW50Iik7CiAgICBwdXNoKGZvcmVzdC5lbXB0eVN0YXRlbWVudCh0b2tlbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkFzc2VydChUb2tlbiBhc3NlcnRLZXl3b3JkLCBBc3NlcnQga2luZCkgewogICAgZGVidWdFdmVudCgiYmVnaW5Bc3NlcnQiKTsKICAgIC8vIElmIGluIGFuIGFzc2VydCBpbml0aWFsaXplciwgbWFrZSBzdXJlIFtpbkluaXRpYWxpemVyXSBpcyBmYWxzZSBzbyB3ZQogICAgLy8gdXNlIHRoZSBmb3JtYWwgcGFyYW1ldGVyIHNjb3BlLiBJZiB0aGlzIGlzIGFueSBvdGhlciBraW5kIG9mIGFzc2VydCwKICAgIC8vIGluSW5pdGlhbGl6ZXIgc2hvdWxkIGJlIGZhbHNlIGFueXdheS4KICAgIGluSW5pdGlhbGl6ZXIgPSBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQXNzZXJ0KFRva2VuIGFzc2VydEtleXdvcmQsIEFzc2VydCBraW5kLCBUb2tlbiBsZWZ0UGFyZW50aGVzaXMsCiAgICAgIFRva2VuIGNvbW1hVG9rZW4sIFRva2VuIHNlbWljb2xvblRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJBc3NlcnQiKTsKICAgIEV4cHJlc3Npb24gbWVzc2FnZSA9IHBvcEZvclZhbHVlSWZOb3ROdWxsKGNvbW1hVG9rZW4pOwogICAgRXhwcmVzc2lvbiBjb25kaXRpb24gPSBwb3BGb3JWYWx1ZSgpOwoKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIEFzc2VydC5TdGF0ZW1lbnQ6CiAgICAgICAgcHVzaChmb3Jlc3QuYXNzZXJ0U3RhdGVtZW50KGFzc2VydEtleXdvcmQsIGxlZnRQYXJlbnRoZXNpcywgY29uZGl0aW9uLAogICAgICAgICAgICBjb21tYVRva2VuLCBtZXNzYWdlLCBzZW1pY29sb25Ub2tlbikpOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBBc3NlcnQuRXhwcmVzc2lvbjoKICAgICAgICAvLyBUaGUgcGFyc2VyIGhhcyBhbHJlYWR5IHJlcG9ydGVkIGFuIGVycm9yIGluZGljYXRpbmcgdGhhdCBhc3NlcnQKICAgICAgICAvLyBjYW5ub3QgYmUgdXNlZCBpbiBhbiBleHByZXNzaW9uLgogICAgICAgIHB1c2goYnVpbGRQcm9ibGVtKGZhc3RhLm1lc3NhZ2VBc3NlcnRBc0V4cHJlc3Npb24sIGFzc2VydEtleXdvcmQub2Zmc2V0LAogICAgICAgICAgICBhc3NlcnRLZXl3b3JkLmxlbmd0aCkpOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBBc3NlcnQuSW5pdGlhbGl6ZXI6CiAgICAgICAgcHVzaChmb3Jlc3QuYXNzZXJ0SW5pdGlhbGl6ZXIoCiAgICAgICAgICAgIGFzc2VydEtleXdvcmQsIGxlZnRQYXJlbnRoZXNpcywgY29uZGl0aW9uLCBjb21tYVRva2VuLCBtZXNzYWdlKSk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFlpZWxkU3RhdGVtZW50KFRva2VuIHlpZWxkVG9rZW4sIFRva2VuIHN0YXJUb2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIllpZWxkU3RhdGVtZW50Iik7CiAgICBwdXNoKGZvcmVzdC55aWVsZFN0YXRlbWVudCh5aWVsZFRva2VuLCBzdGFyVG9rZW4sIHBvcEZvclZhbHVlKCksIGVuZFRva2VuKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luU3dpdGNoQmxvY2soVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luU3dpdGNoQmxvY2siKTsKICAgIGVudGVyTG9jYWxTY29wZSgic3dpdGNoIGJsb2NrIik7CiAgICBlbnRlclN3aXRjaFNjb3BlKCk7CiAgICBlbnRlckJyZWFrVGFyZ2V0KHRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblN3aXRjaENhc2UoaW50IGxhYmVsQ291bnQsIGludCBleHByZXNzaW9uQ291bnQsIFRva2VuIGZpcnN0VG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luU3dpdGNoQ2FzZSIpOwogICAgaW50IGNvdW50ID0gbGFiZWxDb3VudCArIGV4cHJlc3Npb25Db3VudDsKICAgIExpc3Q8T2JqZWN0PiBsYWJlbHNBbmRFeHByZXNzaW9ucyA9CiAgICAgICAgY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8T2JqZWN0PigpLnBvcChzdGFjaywgY291bnQpOwogICAgTGlzdDxMYWJlbD4gbGFiZWxzID0gbGFiZWxDb3VudCA9PSAwID8gbnVsbCA6IG5ldyBMaXN0PExhYmVsPihsYWJlbENvdW50KTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMgPQogICAgICAgIG5ldyBMaXN0PEV4cHJlc3Npb24+LmZpbGxlZChleHByZXNzaW9uQ291bnQsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGludCBsYWJlbEluZGV4ID0gMDsKICAgIGludCBleHByZXNzaW9uSW5kZXggPSAwOwogICAgaWYgKGxhYmVsc0FuZEV4cHJlc3Npb25zICE9IG51bGwpIHsKICAgICAgZm9yIChPYmplY3QgbGFiZWxPckV4cHJlc3Npb24gaW4gbGFiZWxzQW5kRXhwcmVzc2lvbnMpIHsKICAgICAgICBpZiAobGFiZWxPckV4cHJlc3Npb24gaXMgTGFiZWwpIHsKICAgICAgICAgIGxhYmVsc1tsYWJlbEluZGV4KytdID0gbGFiZWxPckV4cHJlc3Npb247CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGV4cHJlc3Npb25zW2V4cHJlc3Npb25JbmRleCsrXSA9IGxhYmVsT3JFeHByZXNzaW9uOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYXNzZXJ0KHNjb3BlID09IHN3aXRjaFNjb3BlKTsKICAgIGlmIChsYWJlbHMgIT0gbnVsbCkgewogICAgICBmb3IgKExhYmVsIGxhYmVsIGluIGxhYmVscykgewogICAgICAgIFN0cmluZyBsYWJlbE5hbWUgPSBsYWJlbC5uYW1lOwogICAgICAgIGlmIChzY29wZS5oYXNMb2NhbExhYmVsKGxhYmVsTmFtZSkpIHsKICAgICAgICAgIC8vIFRPRE8oYWhlKTogU2hvdWxkIHZhbGlkYXRlIHRoaXMgaXMgYSBnb3RvIHRhcmdldC4KICAgICAgICAgIGlmICghc2NvcGUuY2xhaW1MYWJlbChsYWJlbE5hbWUpKSB7CiAgICAgICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZUxhYmVsSW5Td2l0Y2hTdGF0ZW1lbnQKICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhsYWJlbE5hbWUpLAogICAgICAgICAgICAgICAgbGFiZWwuY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGxhYmVsTmFtZS5sZW5ndGgpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzY29wZS5kZWNsYXJlTGFiZWwoCiAgICAgICAgICAgICAgbGFiZWxOYW1lLCBjcmVhdGVHb3RvVGFyZ2V0KGZpcnN0VG9rZW4uY2hhck9mZnNldCkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcHVzaChleHByZXNzaW9ucyk7CiAgICBwdXNoKGxhYmVscyA/PyBOdWxsVmFsdWUuTGFiZWxzKTsKICAgIGVudGVyTG9jYWxTY29wZSgic3dpdGNoIGNhc2UiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kU3dpdGNoQ2FzZSgKICAgICAgaW50IGxhYmVsQ291bnQsCiAgICAgIGludCBleHByZXNzaW9uQ291bnQsCiAgICAgIFRva2VuIGRlZmF1bHRLZXl3b3JkLAogICAgICBUb2tlbiBjb2xvbkFmdGVyRGVmYXVsdCwKICAgICAgaW50IHN0YXRlbWVudENvdW50LAogICAgICBUb2tlbiBmaXJzdFRva2VuLAogICAgICBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiU3dpdGNoQ2FzZSIpOwogICAgLy8gV2UgYWx3YXlzIGNyZWF0ZSBhIGJsb2NrIGhlcmUgc28gdGhhdCB3ZSBsYXRlciBrbm93IHRoYXQgdGhlcmUncyBhbHdheXMKICAgIC8vIG9uZSBzeW50aGV0aWMgYmxvY2sgd2hlbiB3ZSBmaW5pc2ggY29tcGlsaW5nIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGFuZAogICAgLy8gY2hlY2sgdGhpcyBzd2l0Y2ggY2FzZSB0byBzZWUgaWYgaXQgZmFsbHMgdGhyb3VnaCB0byB0aGUgbmV4dCBjYXNlLgogICAgU3RhdGVtZW50IGJsb2NrID0gcG9wQmxvY2soc3RhdGVtZW50Q291bnQsIGZpcnN0VG9rZW4sIG51bGwpOwogICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIExpc3Q8TGFiZWw+IGxhYmVscyA9IHBvcCgpOwogICAgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9ucyA9IHBvcCgpOwogICAgTGlzdDxpbnQ+IGV4cHJlc3Npb25PZmZzZXRzID0gPGludD5bXTsKICAgIGZvciAoRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIGV4cHJlc3Npb25zKSB7CiAgICAgIGV4cHJlc3Npb25PZmZzZXRzLmFkZChmb3Jlc3QucmVhZE9mZnNldChleHByZXNzaW9uKSk7CiAgICB9CiAgICBwdXNoKG5ldyBTd2l0Y2hDYXNlSnVkZ21lbnQoZXhwcmVzc2lvbnMsIGV4cHJlc3Npb25PZmZzZXRzLCBibG9jaywKICAgICAgICBpc0RlZmF1bHQ6IGRlZmF1bHRLZXl3b3JkICE9IG51bGwpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZpcnN0VG9rZW4uY2hhck9mZnNldCk7CiAgICBwdXNoKGxhYmVscyA/PyBOdWxsVmFsdWUuTGFiZWxzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kU3dpdGNoU3RhdGVtZW50KFRva2VuIHN3aXRjaEtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJTd2l0Y2hTdGF0ZW1lbnQiKTsKCiAgICBMaXN0PFN3aXRjaENhc2U+IGNhc2VzID0gcG9wKCk7CiAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IGV4aXRCcmVha1RhcmdldCgpOwogICAgZXhpdFN3aXRjaFNjb3BlKCk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcG9wRm9yVmFsdWUoKTsKICAgIFN0YXRlbWVudCByZXN1bHQgPSBuZXcgU3dpdGNoU3RhdGVtZW50SnVkZ21lbnQoZXhwcmVzc2lvbiwgY2FzZXMpCiAgICAgIC4uZmlsZU9mZnNldCA9IHN3aXRjaEtleXdvcmQuY2hhck9mZnNldDsKICAgIGlmICh0YXJnZXQuaGFzVXNlcnMpIHsKICAgICAgcmVzdWx0ID0gZm9yZXN0LnN5bnRoZXRpY0xhYmVsZWRTdGF0ZW1lbnQocmVzdWx0KTsKICAgICAgdGFyZ2V0LnJlc29sdmVCcmVha3MoZm9yZXN0LCByZXN1bHQpOwogICAgfQogICAgZXhpdExvb3BPclN3aXRjaChyZXN1bHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRTd2l0Y2hCbG9jayhpbnQgY2FzZUNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiU3dpdGNoQmxvY2siKTsKICAgIExpc3Q8U3dpdGNoQ2FzZT4gY2FzZXMgPQogICAgICAgIG5ldyBMaXN0PFN3aXRjaENhc2U+LmZpbGxlZChjYXNlQ291bnQsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSBjYXNlQ291bnQgLSAxOyBpID49IDA7IGktLSkgewogICAgICBMaXN0PExhYmVsPiBsYWJlbHMgPSBwb3AoKTsKICAgICAgU3dpdGNoQ2FzZSBjdXJyZW50ID0gY2FzZXNbaV0gPSBwb3AoKTsKICAgICAgaWYgKGxhYmVscyAhPSBudWxsKSB7CiAgICAgICAgZm9yIChMYWJlbCBsYWJlbCBpbiBsYWJlbHMpIHsKICAgICAgICAgIEp1bXBUYXJnZXQgdGFyZ2V0ID0gc3dpdGNoU2NvcGUubG9va3VwTGFiZWwobGFiZWwubmFtZSk7CiAgICAgICAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHsKICAgICAgICAgICAgdGFyZ2V0LnJlc29sdmVHb3Rvcyhmb3Jlc3QsIGN1cnJlbnQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYXNlQ291bnQgLSAxOyBpKyspIHsKICAgICAgU3dpdGNoQ2FzZSBjdXJyZW50ID0gY2FzZXNbaV07CiAgICAgIEJsb2NrIGJsb2NrID0gY3VycmVudC5ib2R5OwogICAgICAvLyBbYmxvY2tdIGlzIGEgc3ludGhldGljIGJsb2NrIHRoYXQgaXMgYWRkZWQgdG8gaGFuZGxlIHZhcmlhYmxlCiAgICAgIC8vIGRlY2xhcmF0aW9ucyBpbiB0aGUgc3dpdGNoIGNhc2UuCiAgICAgIFRyZWVOb2RlIGxhc3ROb2RlID0KICAgICAgICAgIGJsb2NrLnN0YXRlbWVudHMuaXNFbXB0eSA/IG51bGwgOiBibG9jay5zdGF0ZW1lbnRzLmxhc3Q7CiAgICAgIGlmIChmb3Jlc3QuaXNCbG9jayhsYXN0Tm9kZSkpIHsKICAgICAgICAvLyBUaGlzIGlzIGEgbm9uLXN5bnRoZXRpYyBibG9jay4KICAgICAgICBCbG9jayBibG9jayA9IGxhc3ROb2RlOwogICAgICAgIGxhc3ROb2RlID0gYmxvY2suc3RhdGVtZW50cy5pc0VtcHR5ID8gbnVsbCA6IGJsb2NrLnN0YXRlbWVudHMubGFzdDsKICAgICAgfQogICAgICBpZiAobGFzdE5vZGUgaXMgRXhwcmVzc2lvblN0YXRlbWVudCkgewogICAgICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQgc3RhdGVtZW50ID0gbGFzdE5vZGU7CiAgICAgICAgbGFzdE5vZGUgPSBzdGF0ZW1lbnQuZXhwcmVzc2lvbjsKICAgICAgfQogICAgICBpZiAobGFzdE5vZGUgaXMhIEJyZWFrU3RhdGVtZW50ICYmCiAgICAgICAgICBsYXN0Tm9kZSBpcyEgQ29udGludWVTd2l0Y2hTdGF0ZW1lbnQgJiYKICAgICAgICAgIGxhc3ROb2RlIGlzISBSZXRocm93ICYmCiAgICAgICAgICBsYXN0Tm9kZSBpcyEgUmV0dXJuU3RhdGVtZW50ICYmCiAgICAgICAgICAhZm9yZXN0LmlzVGhyb3cobGFzdE5vZGUpKSB7CiAgICAgICAgYmxvY2suYWRkU3RhdGVtZW50KAogICAgICAgICAgICBuZXcgRXhwcmVzc2lvblN0YXRlbWVudChidWlsZEZhbGxUaHJvdWdoRXJyb3IoY3VycmVudC5maWxlT2Zmc2V0KSkpOwogICAgICB9CiAgICB9CgogICAgcHVzaChjYXNlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNhc2VNYXRjaChUb2tlbiBjYXNlS2V5d29yZCwgVG9rZW4gY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIkNhc2VNYXRjaCIpOwogICAgLy8gRG8gbm90aGluZy4gSGFuZGxlZCBieSBbaGFuZGxlU3dpdGNoQ2FzZV0uCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUJyZWFrU3RhdGVtZW50KAogICAgICBib29sIGhhc1RhcmdldCwgVG9rZW4gYnJlYWtLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiQnJlYWtTdGF0ZW1lbnQiKTsKICAgIEp1bXBUYXJnZXQgdGFyZ2V0ID0gYnJlYWtUYXJnZXQ7CiAgICBJZGVudGlmaWVyIGlkZW50aWZpZXI7CiAgICBTdHJpbmcgbmFtZTsKICAgIGlmIChoYXNUYXJnZXQpIHsKICAgICAgaWRlbnRpZmllciA9IHBvcCgpOwogICAgICBuYW1lID0gaWRlbnRpZmllci5uYW1lOwogICAgICB0YXJnZXQgPSBzY29wZS5sb29rdXBMYWJlbChuYW1lKTsKICAgIH0KICAgIGlmICh0YXJnZXQgPT0gbnVsbCAmJiBuYW1lID09IG51bGwpIHsKICAgICAgcHVzaChwcm9ibGVtSW5Mb29wT3JTd2l0Y2ggPSBidWlsZFByb2JsZW1TdGF0ZW1lbnQoCiAgICAgICAgICBmYXN0YS5tZXNzYWdlQnJlYWtPdXRzaWRlT2ZMb29wLCBicmVha0tleXdvcmQuY2hhck9mZnNldCkpOwogICAgfSBlbHNlIGlmICh0YXJnZXQgPT0gbnVsbCB8fAogICAgICAgIHRhcmdldCBpcyEgSnVtcFRhcmdldCB8fAogICAgICAgICF0YXJnZXQuaXNCcmVha1RhcmdldCkgewogICAgICBUb2tlbiBsYWJlbFRva2VuID0gYnJlYWtLZXl3b3JkLm5leHQ7CiAgICAgIHB1c2gocHJvYmxlbUluTG9vcE9yU3dpdGNoID0gYnVpbGRQcm9ibGVtU3RhdGVtZW50KAogICAgICAgICAgZmFzdGEudGVtcGxhdGVJbnZhbGlkQnJlYWtUYXJnZXQud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgIGxhYmVsVG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgIGxlbmd0aDogbGFiZWxUb2tlbi5sZW5ndGgpKTsKICAgIH0gZWxzZSBpZiAodGFyZ2V0LmZ1bmN0aW9uTmVzdGluZ0xldmVsICE9IGZ1bmN0aW9uTmVzdGluZ0xldmVsKSB7CiAgICAgIHB1c2goYnVpbGRQcm9ibGVtVGFyZ2V0T3V0c2lkZUxvY2FsRnVuY3Rpb24obmFtZSwgYnJlYWtLZXl3b3JkKSk7CiAgICB9IGVsc2UgewogICAgICBTdGF0ZW1lbnQgc3RhdGVtZW50ID0KICAgICAgICAgIGZvcmVzdC5icmVha1N0YXRlbWVudChicmVha0tleXdvcmQsIGlkZW50aWZpZXIsIGVuZFRva2VuKTsKICAgICAgdGFyZ2V0LmFkZEJyZWFrKHN0YXRlbWVudCk7CiAgICAgIHB1c2goc3RhdGVtZW50KTsKICAgIH0KICB9CgogIFN0YXRlbWVudCBidWlsZFByb2JsZW1UYXJnZXRPdXRzaWRlTG9jYWxGdW5jdGlvbihTdHJpbmcgbmFtZSwgVG9rZW4ga2V5d29yZCkgewogICAgU3RhdGVtZW50IHByb2JsZW07CiAgICBib29sIGlzQnJlYWsgPSBvcHRpb25hbCgiYnJlYWsiLCBrZXl3b3JkKTsKICAgIGlmIChuYW1lICE9IG51bGwpIHsKICAgICAgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcpPiB0ZW1wbGF0ZSA9IGlzQnJlYWsKICAgICAgICAgID8gZmFzdGEudGVtcGxhdGVCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbgogICAgICAgICAgOiBmYXN0YS50ZW1wbGF0ZUNvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uOwogICAgICBwcm9ibGVtID0gYnVpbGRQcm9ibGVtU3RhdGVtZW50KAogICAgICAgICAgdGVtcGxhdGUud2l0aEFyZ3VtZW50cyhuYW1lKSwgb2Zmc2V0Rm9yVG9rZW4oa2V5d29yZCksCiAgICAgICAgICBsZW5ndGg6IGxlbmd0aE9mU3BhbihrZXl3b3JkLCBrZXl3b3JkLm5leHQpKTsKICAgIH0gZWxzZSB7CiAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGlzQnJlYWsKICAgICAgICAgID8gZmFzdGEubWVzc2FnZUFub255bW91c0JyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uCiAgICAgICAgICA6IGZhc3RhLm1lc3NhZ2VBbm9ueW1vdXNDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbjsKICAgICAgcHJvYmxlbSA9IGJ1aWxkUHJvYmxlbVN0YXRlbWVudChtZXNzYWdlLCBvZmZzZXRGb3JUb2tlbihrZXl3b3JkKSwKICAgICAgICAgIGxlbmd0aDogbGVuZ3RoRm9yVG9rZW4oa2V5d29yZCkpOwogICAgfQogICAgcHJvYmxlbUluTG9vcE9yU3dpdGNoID8/PSBwcm9ibGVtOwogICAgcmV0dXJuIHByb2JsZW07CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNvbnRpbnVlU3RhdGVtZW50KAogICAgICBib29sIGhhc1RhcmdldCwgVG9rZW4gY29udGludWVLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiQ29udGludWVTdGF0ZW1lbnQiKTsKICAgIEp1bXBUYXJnZXQgdGFyZ2V0ID0gY29udGludWVUYXJnZXQ7CiAgICBJZGVudGlmaWVyIGlkZW50aWZpZXI7CiAgICBTdHJpbmcgbmFtZTsKICAgIGlmIChoYXNUYXJnZXQpIHsKICAgICAgaWRlbnRpZmllciA9IHBvcCgpOwogICAgICBuYW1lID0gaWRlbnRpZmllci5uYW1lOwogICAgICBEZWNsYXJhdGlvbiBuYW1lZFRhcmdldCA9IHNjb3BlLmxvb2t1cExhYmVsKGlkZW50aWZpZXIubmFtZSk7CiAgICAgIGlmIChuYW1lZFRhcmdldCAhPSBudWxsICYmIG5hbWVkVGFyZ2V0IGlzISBKdW1wVGFyZ2V0KSB7CiAgICAgICAgVG9rZW4gbGFiZWxUb2tlbiA9IGNvbnRpbnVlS2V5d29yZC5uZXh0OwogICAgICAgIHB1c2gocHJvYmxlbUluTG9vcE9yU3dpdGNoID0gYnVpbGRQcm9ibGVtU3RhdGVtZW50KAogICAgICAgICAgICBmYXN0YS5tZXNzYWdlQ29udGludWVMYWJlbE5vdFRhcmdldCwgbGFiZWxUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgICBsZW5ndGg6IGxhYmVsVG9rZW4ubGVuZ3RoKSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRhcmdldCA9IG5hbWVkVGFyZ2V0OwogICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHsKICAgICAgICBpZiAoc3dpdGNoU2NvcGUgPT0gbnVsbCkgewogICAgICAgICAgcHVzaChidWlsZFByb2JsZW1TdGF0ZW1lbnQoCiAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVMYWJlbE5vdEZvdW5kLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgICAgY29udGludWVLZXl3b3JkLm5leHQuY2hhck9mZnNldCkpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBzd2l0Y2hTY29wZS5mb3J3YXJkRGVjbGFyZUxhYmVsKAogICAgICAgICAgICBpZGVudGlmaWVyLm5hbWUsIHRhcmdldCA9IGNyZWF0ZUdvdG9UYXJnZXQoaWRlbnRpZmllci5jaGFyT2Zmc2V0KSk7CiAgICAgIH0KICAgICAgaWYgKHRhcmdldC5pc0dvdG9UYXJnZXQgJiYKICAgICAgICAgIHRhcmdldC5mdW5jdGlvbk5lc3RpbmdMZXZlbCA9PSBmdW5jdGlvbk5lc3RpbmdMZXZlbCkgewogICAgICAgIENvbnRpbnVlU3dpdGNoU3RhdGVtZW50IHN0YXRlbWVudCA9IG5ldyBDb250aW51ZVN3aXRjaEp1ZGdtZW50KG51bGwpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBjb250aW51ZUtleXdvcmQuY2hhck9mZnNldDsKICAgICAgICB0YXJnZXQuYWRkR290byhzdGF0ZW1lbnQpOwogICAgICAgIHB1c2goc3RhdGVtZW50KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgewogICAgICBwdXNoKHByb2JsZW1Jbkxvb3BPclN3aXRjaCA9IGJ1aWxkUHJvYmxlbVN0YXRlbWVudCgKICAgICAgICAgIGZhc3RhLm1lc3NhZ2VDb250aW51ZVdpdGhvdXRMYWJlbEluQ2FzZSwgY29udGludWVLZXl3b3JkLmNoYXJPZmZzZXQsCiAgICAgICAgICBsZW5ndGg6IGNvbnRpbnVlS2V5d29yZC5sZW5ndGgpKTsKICAgIH0gZWxzZSBpZiAoIXRhcmdldC5pc0NvbnRpbnVlVGFyZ2V0KSB7CiAgICAgIFRva2VuIGxhYmVsVG9rZW4gPSBjb250aW51ZUtleXdvcmQubmV4dDsKICAgICAgcHVzaChwcm9ibGVtSW5Mb29wT3JTd2l0Y2ggPSBidWlsZFByb2JsZW1TdGF0ZW1lbnQoCiAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUludmFsaWRDb250aW51ZVRhcmdldC53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgbGFiZWxUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgbGVuZ3RoOiBsYWJlbFRva2VuLmxlbmd0aCkpOwogICAgfSBlbHNlIGlmICh0YXJnZXQuZnVuY3Rpb25OZXN0aW5nTGV2ZWwgIT0gZnVuY3Rpb25OZXN0aW5nTGV2ZWwpIHsKICAgICAgcHVzaChidWlsZFByb2JsZW1UYXJnZXRPdXRzaWRlTG9jYWxGdW5jdGlvbihuYW1lLCBjb250aW51ZUtleXdvcmQpKTsKICAgIH0gZWxzZSB7CiAgICAgIFN0YXRlbWVudCBzdGF0ZW1lbnQgPQogICAgICAgICAgZm9yZXN0LmNvbnRpbnVlU3RhdGVtZW50KGNvbnRpbnVlS2V5d29yZCwgaWRlbnRpZmllciwgZW5kVG9rZW4pOwogICAgICB0YXJnZXQuYWRkQ29udGludWUoc3RhdGVtZW50KTsKICAgICAgcHVzaChzdGF0ZW1lbnQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblR5cGVWYXJpYWJsZShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5UeXBlVmFyaWFibGUiKTsKICAgIElkZW50aWZpZXIgbmFtZSA9IHBvcCgpOwogICAgTGlzdDxFeHByZXNzaW9uPiBhbm5vdGF0aW9ucyA9IHBvcCgpOwogICAgVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSA9CiAgICAgICAgbmV3IFR5cGVWYXJpYWJsZUJ1aWxkZXIobmFtZS5uYW1lLCBsaWJyYXJ5LCBuYW1lLmNoYXJPZmZzZXQpOwogICAgaWYgKGFubm90YXRpb25zICE9IG51bGwpIHsKICAgICAgaW5mZXJBbm5vdGF0aW9ucyhhbm5vdGF0aW9ucyk7CiAgICAgIGZvciAoRXhwcmVzc2lvbiBhbm5vdGF0aW9uIGluIGFubm90YXRpb25zKSB7CiAgICAgICAgdmFyaWFibGUucGFyYW1ldGVyLmFkZEFubm90YXRpb24oYW5ub3RhdGlvbik7CiAgICAgIH0KICAgIH0KICAgIHB1c2godmFyaWFibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVUeXBlVmFyaWFibGVzRGVmaW5lZChUb2tlbiB0b2tlbiwgaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVUeXBlVmFyaWFibGVzRGVmaW5lZCIpOwogICAgYXNzZXJ0KGNvdW50ID4gMCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPQogICAgICAgIGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+KCkucG9wKHN0YWNrLCBjb3VudCk7CiAgICBlbnRlckZ1bmN0aW9uVHlwZVNjb3BlKHR5cGVWYXJpYWJsZXMpOwogICAgcHVzaCh0eXBlVmFyaWFibGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVHlwZVZhcmlhYmxlKFRva2VuIHRva2VuLCBpbnQgaW5kZXgsIFRva2VuIGV4dGVuZHNPclN1cGVyKSB7CiAgICBkZWJ1Z0V2ZW50KCJUeXBlVmFyaWFibGUiKTsKICAgIFVucmVzb2x2ZWRUeXBlIGJvdW5kID0gcG9wKCk7CiAgICAvLyBQZWVrIHRvIGxlYXZlIHR5cGUgcGFyYW1ldGVycyBvbiB0b3Agb2Ygc3RhY2suCiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwZWVrKCk7CgogICAgVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSA9IHR5cGVWYXJpYWJsZXNbaW5kZXhdOwogICAgdmFyaWFibGUuYm91bmQgPSBib3VuZD8uYnVpbGRlcjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVHlwZVZhcmlhYmxlcyhUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiVHlwZVZhcmlhYmxlcyIpOwogICAgLy8gUGVlayB0byBsZWF2ZSB0eXBlIHBhcmFtZXRlcnMgb24gdG9wIG9mIHN0YWNrLgogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcGVlaygpOwoKICAgIGlmICghbGVnYWN5TW9kZSkgewogICAgICBMaXN0PFR5cGVCdWlsZGVyPiBjYWxjdWxhdGVkQm91bmRzID0gY2FsY3VsYXRlQm91bmRzKAogICAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICAgIGxpYnJhcnkubG9hZGVyLnRhcmdldC5keW5hbWljVHlwZSwKICAgICAgICAgIGxpYnJhcnkubG9hZGVyLnRhcmdldC5ib3R0b21UeXBlLAogICAgICAgICAgbGlicmFyeS5sb2FkZXIudGFyZ2V0Lm9iamVjdENsYXNzQnVpbGRlcik7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVZhcmlhYmxlcy5sZW5ndGg7ICsraSkgewogICAgICAgIHR5cGVWYXJpYWJsZXNbaV0uZGVmYXVsdFR5cGUgPSBjYWxjdWxhdGVkQm91bmRzW2ldOwogICAgICAgIHR5cGVWYXJpYWJsZXNbaV0uZGVmYXVsdFR5cGUucmVzb2x2ZUluKHNjb3BlLAogICAgICAgICAgICB0eXBlVmFyaWFibGVzW2ldLmNoYXJPZmZzZXQsIHR5cGVWYXJpYWJsZXNbaV0uZmlsZVVyaSwgbGlicmFyeSk7CiAgICAgICAgdHlwZVZhcmlhYmxlc1tpXS5maW5pc2goCiAgICAgICAgICAgIGxpYnJhcnksCiAgICAgICAgICAgIGxpYnJhcnkubG9hZGVyLnRhcmdldC5vYmplY3RDbGFzc0J1aWxkZXIsCiAgICAgICAgICAgIGxpYnJhcnkubG9hZGVyLnRhcmdldC5keW5hbWljVHlwZSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVZhcmlhYmxlcy5sZW5ndGg7ICsraSkgewogICAgICAgIHR5cGVWYXJpYWJsZXNbaV0uZGVmYXVsdFR5cGUgPSBsaWJyYXJ5LmxvYWRlci50YXJnZXQuZHluYW1pY1R5cGU7CiAgICAgICAgdHlwZVZhcmlhYmxlc1tpXS5maW5pc2goCiAgICAgICAgICAgIGxpYnJhcnksCiAgICAgICAgICAgIGxpYnJhcnkubG9hZGVyLnRhcmdldC5vYmplY3RDbGFzc0J1aWxkZXIsCiAgICAgICAgICAgIGxpYnJhcnkubG9hZGVyLnRhcmdldC5keW5hbWljVHlwZSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9UeXBlVmFyaWFibGVzKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb1R5cGVWYXJpYWJsZXMiKTsKICAgIGVudGVyRnVuY3Rpb25UeXBlU2NvcGUobnVsbCk7CiAgICBwdXNoKE51bGxWYWx1ZS5UeXBlVmFyaWFibGVzKTsKICB9CgogIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVZhcmlhYmxlQnVpbGRlcnNUb0tlcm5lbCgKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVCdWlsZGVycykgewogICAgaWYgKHR5cGVWYXJpYWJsZUJ1aWxkZXJzID09IG51bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9IG5ldyBMaXN0PFR5cGVQYXJhbWV0ZXI+LmZpbGxlZCgKICAgICAgICB0eXBlVmFyaWFibGVCdWlsZGVycy5sZW5ndGgsIG51bGwsCiAgICAgICAgZ3Jvd2FibGU6IHRydWUpOwogICAgaW50IGkgPSAwOwogICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIGJ1aWxkZXIgaW4gdHlwZVZhcmlhYmxlQnVpbGRlcnMpIHsKICAgICAgdHlwZVBhcmFtZXRlcnNbaSsrXSA9IGJ1aWxkZXIudGFyZ2V0OwogICAgfQogICAgcmV0dXJuIHR5cGVQYXJhbWV0ZXJzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnZhbGlkU3RhdGVtZW50KFRva2VuIHRva2VuLCBNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIFN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwb3AoKTsKICAgIHB1c2gobmV3IEV4cHJlc3Npb25TdGF0ZW1lbnQoZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgYnVpbGRQcm9ibGVtKG1lc3NhZ2UsIHN0YXRlbWVudC5maWxlT2Zmc2V0LCBub0xlbmd0aCkpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkUHJvYmxlbShNZXNzYWdlIG1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LCBpbnQgbGVuZ3RoLAogICAgICB7TGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCwgYm9vbCBzdXBwcmVzc01lc3NhZ2U6IGZhbHNlfSkgewogICAgaWYgKCFzdXBwcmVzc01lc3NhZ2UpIHsKICAgICAgYWRkUHJvYmxlbShtZXNzYWdlLCBjaGFyT2Zmc2V0LCBsZW5ndGgsCiAgICAgICAgICB3YXNIYW5kbGVkOiB0cnVlLCBjb250ZXh0OiBjb250ZXh0KTsKICAgIH0KICAgIFN0cmluZyB0ZXh0ID0gbGlicmFyeS5sb2FkZXIudGFyZ2V0LmNvbnRleHQKICAgICAgICAuZm9ybWF0KG1lc3NhZ2Uud2l0aExvY2F0aW9uKHVyaSwgY2hhck9mZnNldCwgbGVuZ3RoKSwgU2V2ZXJpdHkuZXJyb3IpOwogICAgcmV0dXJuIHdyYXBTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgIG5ldyBJbnZhbGlkRXhwcmVzc2lvbih0ZXh0KS4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQsIGNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiB3cmFwSW5Qcm9ibGVtKEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgTWVzc2FnZSBtZXNzYWdlLCBpbnQgbGVuZ3RoLAogICAgICB7TGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dH0pIHsKICAgIGludCBjaGFyT2Zmc2V0ID0gZm9yZXN0LnJlYWRPZmZzZXQoZXhwcmVzc2lvbik7CiAgICBTZXZlcml0eSBzZXZlcml0eSA9IG1lc3NhZ2UuY29kZS5zZXZlcml0eTsKICAgIGlmIChzZXZlcml0eSA9PSBTZXZlcml0eS5lcnJvciB8fAogICAgICAgIHNldmVyaXR5ID09IFNldmVyaXR5LmVycm9yTGVnYWN5V2FybmluZyAmJiAhbGVnYWN5TW9kZSkgewogICAgICByZXR1cm4gd3JhcEluTG9jYXRlZFByb2JsZW0oCiAgICAgICAgICBleHByZXNzaW9uLCBtZXNzYWdlLndpdGhMb2NhdGlvbih1cmksIGNoYXJPZmZzZXQsIGxlbmd0aCksCiAgICAgICAgICBjb250ZXh0OiBjb250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLCBjb250ZXh0OiBjb250ZXh0KTsKICAgICAgcmV0dXJuIGV4cHJlc3Npb247CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHdyYXBJbkxvY2F0ZWRQcm9ibGVtKEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICAvLyBUT0RPKGFza2VzYyk6IFByb2R1Y2UgZXhwbGljaXQgZXJyb3IgZXhwcmVzc2lvbiB3cmFwcGluZyB0aGUgb3JpZ2luYWwuCiAgICAvLyBTZWUgW2lzc3VlIDI5NzE3XShodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMjk3MTcpCiAgICBpbnQgb2Zmc2V0ID0gZm9yZXN0LnJlYWRPZmZzZXQoZXhwcmVzc2lvbik7CiAgICBpZiAob2Zmc2V0ID09IC0xKSB7CiAgICAgIG9mZnNldCA9IG1lc3NhZ2UuY2hhck9mZnNldDsKICAgIH0KICAgIHJldHVybiBuZXcgTGV0KAogICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKAogICAgICAgICAgICBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICBtZXNzYWdlLm1lc3NhZ2VPYmplY3QsIG1lc3NhZ2UuY2hhck9mZnNldCwgbWVzc2FnZS5sZW5ndGgsCiAgICAgICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0KSksCiAgICAgICAgICAgIHR5cGU6IGNvbnN0IEJvdHRvbVR5cGUoKSkKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldCwKICAgICAgICBleHByZXNzaW9uKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGRGYWxsVGhyb3VnaEVycm9yKGludCBjaGFyT2Zmc2V0KSB7CiAgICBhZGRQcm9ibGVtKGZhc3RhLm1lc3NhZ2VTd2l0Y2hDYXNlRmFsbFRocm91Z2gsIGNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKCiAgICAvLyBUT0RPKGFoZSk6IFRoZSBmb2xsb3dpbmcgZG9lc24ndCBtYWtlIHNlbnNlIGZvciB0aGUgQW5hbHl6ZXIuIEl0IHNob3VsZAogICAgLy8gYmUgbW92ZWQgdG8gW0ZvcmVzdF0gb3IgY29uZGl0aW9uYWwgb24gYGZvcmVzdCBpcyBGYW5nb3JuYC4KCiAgICAvLyBUT0RPKGFoZSk6IENvbXB1dGUgYSBMb2NhdGVkTWVzc2FnZSBhYm92ZSBpbnN0ZWFkPwogICAgTG9jYXRpb24gbG9jYXRpb24gPSBtZXNzYWdlcy5nZXRMb2NhdGlvbkZyb21VcmkodXJpLCBjaGFyT2Zmc2V0KTsKCiAgICByZXR1cm4gZm9yZXN0LnRocm93RXhwcmVzc2lvbigKICAgICAgICBudWxsLAogICAgICAgIGJ1aWxkU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgICAgbGlicmFyeS5sb2FkZXIuY29yZVR5cGVzLmZhbGxUaHJvdWdoRXJyb3JVcmxBbmRMaW5lQ29uc3RydWN0b3IsCiAgICAgICAgICAgIGZvcmVzdC5hcmd1bWVudHMoPEV4cHJlc3Npb24+WwogICAgICAgICAgICAgIGZvcmVzdC5saXRlcmFsU3RyaW5nKCIke2xvY2F0aW9uPy5maWxlID8/IHVyaX0iLCBudWxsKQogICAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldCwKICAgICAgICAgICAgICBmb3Jlc3QubGl0ZXJhbEludChsb2NhdGlvbj8ubGluZSA/PyAwLCBudWxsKQogICAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldCwKICAgICAgICAgICAgXSwgbm9Mb2NhdGlvbiksCiAgICAgICAgICAgIGNoYXJPZmZzZXQ6IGNoYXJPZmZzZXQpKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZEFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3IoCiAgICAgIE1lc3NhZ2UgbWVzc2FnZSwgU3RyaW5nIGNsYXNzTmFtZSwKICAgICAgW2ludCBjaGFyT2Zmc2V0ID0gLTFdKSB7CiAgICBhZGRQcm9ibGVtRXJyb3JJZkNvbnN0KG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGNsYXNzTmFtZS5sZW5ndGgpOwogICAgLy8gVE9ETyhhaGUpOiBUaGUgZm9sbG93aW5nIGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBBbmFseXplciBBU1QuCiAgICBEZWNsYXJhdGlvbiBjb25zdHJ1Y3RvciA9CiAgICAgICAgbGlicmFyeS5sb2FkZXIuZ2V0QWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcigpOwogICAgRXhwcmVzc2lvbiBpbnZvY2F0aW9uID0gYnVpbGRTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgIGNvbnN0cnVjdG9yLnRhcmdldCwKICAgICAgICBmb3Jlc3QuYXJndW1lbnRzKDxFeHByZXNzaW9uPlsKICAgICAgICAgIGZvcmVzdC5saXRlcmFsU3RyaW5nKGNsYXNzTmFtZSwgbnVsbCkuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0CiAgICAgICAgXSwgbm9Mb2NhdGlvbikKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQsCiAgICAgICAgY2hhck9mZnNldDogY2hhck9mZnNldCk7CiAgICBpZiAoaW52b2NhdGlvbiBpcyBzaGFkb3cuU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50KSB7CiAgICAgIGludm9jYXRpb24gPSBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihpbnZvY2F0aW9uKTsKICAgIH0KICAgIHJldHVybiBmb3Jlc3QudGhyb3dFeHByZXNzaW9uKG51bGwsIGludm9jYXRpb24pLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICB9CgogIFN0YXRlbWVudCBidWlsZFByb2JsZW1TdGF0ZW1lbnQoTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQsIGludCBsZW5ndGgsIGJvb2wgc3VwcHJlc3NNZXNzYWdlOiBmYWxzZX0pIHsKICAgIGxlbmd0aCA/Pz0gbm9MZW5ndGg7CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25TdGF0ZW1lbnRKdWRnbWVudChidWlsZFByb2JsZW0oCiAgICAgICAgbWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLAogICAgICAgIGNvbnRleHQ6IGNvbnRleHQsIHN1cHByZXNzTWVzc2FnZTogc3VwcHJlc3NNZXNzYWdlKSk7CiAgfQoKICBTdGF0ZW1lbnQgd3JhcEluUHJvYmxlbVN0YXRlbWVudChTdGF0ZW1lbnQgc3RhdGVtZW50LCBNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIC8vIFRPRE8oYXNrZXNjKTogUHJvZHVjZSBleHBsaWNpdCBlcnJvciBzdGF0ZW1lbnQgd3JhcHBpbmcgdGhlIG9yaWdpbmFsLgogICAgLy8gU2VlIFtpc3N1ZSAyOTcxN10oaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzI5NzE3KQogICAgcmV0dXJuIGJ1aWxkUHJvYmxlbVN0YXRlbWVudChtZXNzYWdlLCBzdGF0ZW1lbnQuZmlsZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplciBidWlsZEludmFsaWRJbml0aWFsaXplcihFeHByZXNzaW9uIGV4cHJlc3Npb24sCiAgICAgIFtpbnQgY2hhck9mZnNldCA9IC0xXSkgewogICAgbmVlZHNJbXBsaWNpdFN1cGVySW5pdGlhbGl6ZXIgPSBmYWxzZTsKICAgIHJldHVybiBuZXcgU2hhZG93SW52YWxpZEluaXRpYWxpemVyKAogICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKGV4cHJlc3Npb24pKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KCiAgSW5pdGlhbGl6ZXIgYnVpbGRJbnZhbGlkU3VwZXJJbml0aWFsaXplcigKICAgICAgQ29uc3RydWN0b3IgdGFyZ2V0LCBBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHMsIEV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAgW2ludCBjaGFyT2Zmc2V0ID0gLTFdKSB7CiAgICBuZWVkc0ltcGxpY2l0U3VwZXJJbml0aWFsaXplciA9IGZhbHNlOwogICAgcmV0dXJuIG5ldyBJbnZhbGlkU3VwZXJJbml0aWFsaXplckp1ZGdtZW50KAogICAgICAgIHRhcmdldCwgYXJndW1lbnRzLCBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShleHByZXNzaW9uKSkKICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICB9CgogIEluaXRpYWxpemVyIGJ1aWxkRHVwbGljYXRlZEluaXRpYWxpemVyKEZpZWxkIGZpZWxkLCBFeHByZXNzaW9uIHZhbHVlLAogICAgICBTdHJpbmcgbmFtZSwgaW50IG9mZnNldCwgaW50IHByZXZpb3VzSW5pdGlhbGl6ZXJPZmZzZXQpIHsKICAgIHJldHVybiBuZXcgU2hhZG93SW52YWxpZEZpZWxkSW5pdGlhbGl6ZXIoCiAgICAgICAgZmllbGQsCiAgICAgICAgdmFsdWUsCiAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICAgIGJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkCiAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICAgICAgICBub0xlbmd0aCkpKSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogIH0KCiAgLy8vIFBhcmFtZXRlciBbZm9ybWFsVHlwZV0gc2hvdWxkIG9ubHkgYmUgcGFzc2VkIGluIHRoZSBzcGVjaWFsIGNhc2Ugb2YKICAvLy8gYnVpbGRpbmcgYSBmaWVsZCBpbml0aWFsaXplciBhcyBhIGRlc3VnYXJpbmcgb2YgYW4gaW5pdGlhbGl6aW5nIGZvcm1hbAogIC8vLyBwYXJhbWV0ZXIuICBUaGUgc3BlYyBzYXlzIHRoZSBmb2xsb3dpbmc6CiAgLy8vCiAgLy8vICJJZiBhbiBleHBsaWNpdCB0eXBlIGlzIGF0dGFjaGVkIHRvIHRoZSBpbml0aWFsaXppbmcgZm9ybWFsLCB0aGF0IGlzIGl0cwogIC8vLyBzdGF0aWMgdHlwZS4gIE90aGVyd2lzZSwgdGhlIHR5cGUgb2YgYW4gaW5pdGlhbGl6aW5nIGZvcm1hbCBuYW1lZCBfaWRfIGlzCiAgLy8vIF9UaWRfLCB3aGVyZSBfVGlkXyBpcyB0aGUgdHlwZSBvZiB0aGUgaW5zdGFuY2UgdmFyaWFibGUgbmFtZWQgX2lkXyBpbiB0aGUKICAvLy8gaW1tZWRpYXRlbHkgZW5jbG9zaW5nIGNsYXNzLiAgSXQgaXMgYSBzdGF0aWMgd2FybmluZyBpZiB0aGUgc3RhdGljIHR5cGUgb2YKICAvLy8gX2lkXyBpcyBub3QgYSBzdWJ0eXBlIG9mIF9UaWRfLiIKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplciBidWlsZEZpZWxkSW5pdGlhbGl6ZXIoYm9vbCBpc1N5bnRoZXRpYywgU3RyaW5nIG5hbWUsCiAgICAgIGludCBmaWVsZE5hbWVPZmZzZXQsIGludCBhc3NpZ25tZW50T2Zmc2V0LCBFeHByZXNzaW9uIGV4cHJlc3Npb24sCiAgICAgIHtEYXJ0VHlwZSBmb3JtYWxUeXBlfSkgewogICAgRGVjbGFyYXRpb24gYnVpbGRlciA9CiAgICAgICAgY2xhc3NCdWlsZGVyLnNjb3BlLmxvY2FsW25hbWVdID8/IGNsYXNzQnVpbGRlci5vcmlnaW4uc2NvcGUubG9jYWxbbmFtZV07CiAgICBpZiAoYnVpbGRlcj8ubmV4dCAhPSBudWxsKSB7CiAgICAgIC8vIER1cGxpY2F0ZWQgbmFtZSwgYWxyZWFkeSByZXBvcnRlZC4KICAgICAgcmV0dXJuIG5ldyBMb2NhbEluaXRpYWxpemVyKAogICAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoCiAgICAgICAgICAgICAgZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZS53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICAgICAgICBmaWVsZE5hbWVPZmZzZXQsCiAgICAgICAgICAgICAgICAgIG5hbWUubGVuZ3RoKSkKICAgICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGZpZWxkTmFtZU9mZnNldCkKICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZmllbGROYW1lT2Zmc2V0KQogICAgICAgIC4uZmlsZU9mZnNldCA9IGZpZWxkTmFtZU9mZnNldDsKICAgIH0gZWxzZSBpZiAoYnVpbGRlciBpcyBGaWVsZEJ1aWxkZXIgJiYgYnVpbGRlci5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgIGluaXRpYWxpemVkRmllbGRzID8/PSA8U3RyaW5nLCBpbnQ+e307CiAgICAgIGlmIChpbml0aWFsaXplZEZpZWxkcy5jb250YWluc0tleShuYW1lKSkgewogICAgICAgIHJldHVybiBidWlsZER1cGxpY2F0ZWRJbml0aWFsaXplcihidWlsZGVyLmZpZWxkLCBleHByZXNzaW9uLCBuYW1lLAogICAgICAgICAgICBhc3NpZ25tZW50T2Zmc2V0LCBpbml0aWFsaXplZEZpZWxkc1tuYW1lXSk7CiAgICAgIH0KICAgICAgaW5pdGlhbGl6ZWRGaWVsZHNbbmFtZV0gPSBhc3NpZ25tZW50T2Zmc2V0OwogICAgICBpZiAoYnVpbGRlci5pc0ZpbmFsICYmIGJ1aWxkZXIuaGFzSW5pdGlhbGl6ZXIpIHsKICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZAogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgIGFzc2lnbm1lbnRPZmZzZXQsCiAgICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWRDYXVzZQogICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lKQogICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgYnVpbGRlci5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCkKICAgICAgICAgICAgXSk7CiAgICAgICAgRGVjbGFyYXRpb24gY29uc3RydWN0b3IgPQogICAgICAgICAgICBsaWJyYXJ5LmxvYWRlci5nZXREdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yKCk7CiAgICAgICAgRXhwcmVzc2lvbiBpbnZvY2F0aW9uID0gYnVpbGRTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgICAgICBjb25zdHJ1Y3Rvci50YXJnZXQsCiAgICAgICAgICAgIGZvcmVzdC5hcmd1bWVudHMoPEV4cHJlc3Npb24+WwogICAgICAgICAgICAgIGZvcmVzdC5saXRlcmFsU3RyaW5nKG5hbWUsIG51bGwpLi5maWxlT2Zmc2V0ID0gYXNzaWdubWVudE9mZnNldAogICAgICAgICAgICBdLCBub0xvY2F0aW9uKQogICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGFzc2lnbm1lbnRPZmZzZXQsCiAgICAgICAgICAgIGNoYXJPZmZzZXQ6IGFzc2lnbm1lbnRPZmZzZXQpOwogICAgICAgIGlmIChpbnZvY2F0aW9uIGlzIHNoYWRvdy5TeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQpIHsKICAgICAgICAgIGludm9jYXRpb24gPSBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihpbnZvY2F0aW9uKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBTaGFkb3dJbnZhbGlkRmllbGRJbml0aWFsaXplcigKICAgICAgICAgICAgYnVpbGRlci5maWVsZCwKICAgICAgICAgICAgZXhwcmVzc2lvbiwKICAgICAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoCiAgICAgICAgICAgICAgICBmb3Jlc3QudGhyb3dFeHByZXNzaW9uKG51bGwsIGludm9jYXRpb24pCiAgICAgICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGFzc2lnbm1lbnRPZmZzZXQpKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gYXNzaWdubWVudE9mZnNldDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoIWxlZ2FjeU1vZGUgJiYKICAgICAgICAgICAgZm9ybWFsVHlwZSAhPSBudWxsICYmCiAgICAgICAgICAgICF0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoZm9ybWFsVHlwZSwgYnVpbGRlci5maWVsZC50eXBlKSkgewogICAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoCiAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUsIGZvcm1hbFR5cGUsIGJ1aWxkZXIuZmllbGQudHlwZSksCiAgICAgICAgICAgICAgYXNzaWdubWVudE9mZnNldCwKICAgICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgICB1cmksCiAgICAgICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgZmFzdGEubWVzc2FnZUluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaEZpZWxkCiAgICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihidWlsZGVyLmZpbGVVcmksIGJ1aWxkZXIuY2hhck9mZnNldCwgbm9MZW5ndGgpCiAgICAgICAgICAgICAgXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgU2hhZG93RmllbGRJbml0aWFsaXplcihidWlsZGVyLmZpZWxkLCBleHByZXNzaW9uKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gYXNzaWdubWVudE9mZnNldAogICAgICAgICAgLi5pc1N5bnRoZXRpYyA9IGlzU3ludGhldGljOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gYnVpbGRJbnZhbGlkSW5pdGlhbGl6ZXIoCiAgICAgICAgICBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgICAgZmllbGROYW1lT2Zmc2V0LAogICAgICAgICAgICAgIG5hbWUubGVuZ3RoKSksCiAgICAgICAgICBmaWVsZE5hbWVPZmZzZXQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXIgYnVpbGRTdXBlckluaXRpYWxpemVyKAogICAgICBib29sIGlzU3ludGhldGljLCBDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAgW2ludCBjaGFyT2Zmc2V0ID0gLTFdKSB7CiAgICBpZiAobWVtYmVyLmlzQ29uc3QgJiYgIWNvbnN0cnVjdG9yLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIGJ1aWxkSW52YWxpZFN1cGVySW5pdGlhbGl6ZXIoCiAgICAgICAgICBjb25zdHJ1Y3RvciwKICAgICAgICAgIGZvcmVzdC5jYXN0QXJndW1lbnRzKGFyZ3VtZW50cyksCiAgICAgICAgICBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgZmFzdGEubWVzc2FnZUNvbnN0Q29uc3RydWN0b3JXaXRoTm9uQ29uc3RTdXBlciwKICAgICAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgICAgIGNvbnN0cnVjdG9yLm5hbWUubmFtZS5sZW5ndGgpKSwKICAgICAgICAgIGNoYXJPZmZzZXQpOwogICAgfQogICAgbmVlZHNJbXBsaWNpdFN1cGVySW5pdGlhbGl6ZXIgPSBmYWxzZTsKICAgIHJldHVybiBuZXcgU3VwZXJJbml0aWFsaXplckp1ZGdtZW50KAogICAgICAgIGNvbnN0cnVjdG9yLCBmb3Jlc3QuY2FzdEFyZ3VtZW50cyhhcmd1bWVudHMpKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0CiAgICAgIC4uaXNTeW50aGV0aWMgPSBpc1N5bnRoZXRpYzsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyIGJ1aWxkUmVkaXJlY3RpbmdJbml0aWFsaXplcigKICAgICAgQ29uc3RydWN0b3IgY29uc3RydWN0b3IsIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIFtpbnQgY2hhck9mZnNldCA9IC0xXSkgewogICAgaWYgKGNsYXNzQnVpbGRlci5jaGVja0NvbnN0cnVjdG9yQ3ljbGljKAogICAgICAgIG1lbWJlci5uYW1lLCBjb25zdHJ1Y3Rvci5uYW1lLm5hbWUpKSB7CiAgICAgIGludCBsZW5ndGggPSBjb25zdHJ1Y3Rvci5uYW1lLm5hbWUubGVuZ3RoOwogICAgICBpZiAobGVuZ3RoID09IDApIGxlbmd0aCA9ICJ0aGlzIi5sZW5ndGg7CiAgICAgIGFkZFByb2JsZW0oZmFzdGEubWVzc2FnZUNvbnN0cnVjdG9yQ3ljbGljLCBjaGFyT2Zmc2V0LCBsZW5ndGgpOwogICAgICAvLyBUT0RPKGFza2VzYyk6IFByb2R1Y2UgaW52YWxpZCBpbml0aWFsaXplci4KICAgIH0KICAgIG5lZWRzSW1wbGljaXRTdXBlckluaXRpYWxpemVyID0gZmFsc2U7CiAgICByZXR1cm4gbmV3IFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJKdWRnbWVudCgKICAgICAgICBjb25zdHJ1Y3RvciwgZm9yZXN0LmNhc3RBcmd1bWVudHMoYXJndW1lbnRzKSkKICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlT3BlcmF0b3IoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk9wZXJhdG9yIik7CiAgICBwdXNoKG5ldyBPcGVyYXRvcih0b2tlbiwgdG9rZW4uY2hhck9mZnNldCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTeW1ib2xWb2lkKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJTeW1ib2xWb2lkIik7CiAgICBwdXNoKG5ldyBJZGVudGlmaWVyLnByZXNlcnZlVG9rZW4odG9rZW4pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZEZ1bmN0aW9uQm9keShUb2tlbiB0b2tlbikgewogICAgaWYgKG1lbWJlci5pc05hdGl2ZSkgewogICAgICBwdXNoKE51bGxWYWx1ZS5GdW5jdGlvbkJvZHkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChmb3Jlc3QuYmxvY2soCiAgICAgICAgICB0b2tlbiwKICAgICAgICAgIDxTdGF0ZW1lbnQ+WwogICAgICAgICAgICBidWlsZFByb2JsZW1TdGF0ZW1lbnQoCiAgICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkRnVuY3Rpb25Cb2R5LndpdGhBcmd1bWVudHModG9rZW4pLAogICAgICAgICAgICAgICAgdG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGxlbmd0aDogdG9rZW4ubGVuZ3RoKQogICAgICAgICAgXSwKICAgICAgICAgIG51bGwpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFVucmVzb2x2ZWRUeXBlIHZhbGlkYXRlVHlwZVVzZSgKICAgICAgVW5yZXNvbHZlZFR5cGUgdW5yZXNvbHZlZCwgYm9vbCBub25JbnN0YW5jZUFjY2Vzc0lzRXJyb3IpIHsKICAgIFR5cGVCdWlsZGVyIGJ1aWxkZXIgPSB1bnJlc29sdmVkLmJ1aWxkZXI7CiAgICBpZiAoYnVpbGRlciBpcyBOYW1lZFR5cGVCdWlsZGVyICYmIGJ1aWxkZXIuZGVjbGFyYXRpb24uaXNUeXBlVmFyaWFibGUpIHsKICAgICAgVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyID0gYnVpbGRlci5kZWNsYXJhdGlvbi50YXJnZXQ7CiAgICAgIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2U7CiAgICAgIGlmICghaXNJbnN0YW5jZUNvbnRleHQgJiYgdHlwZVBhcmFtZXRlci5wYXJlbnQgaXMgQ2xhc3MpIHsKICAgICAgICBtZXNzYWdlID0gZmFzdGEubWVzc2FnZVR5cGVWYXJpYWJsZUluU3RhdGljQ29udGV4dC53aXRoTG9jYXRpb24oCiAgICAgICAgICAgIHVucmVzb2x2ZWQuZmlsZVVyaSwKICAgICAgICAgICAgdW5yZXNvbHZlZC5jaGFyT2Zmc2V0LAogICAgICAgICAgICB0eXBlUGFyYW1ldGVyLm5hbWUubGVuZ3RoKTsKICAgICAgfSBlbHNlIGlmIChjb25zdGFudENvbnRleHQgPT0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkKSB7CiAgICAgICAgbWVzc2FnZSA9IGZhc3RhLm1lc3NhZ2VUeXBlVmFyaWFibGVJbkNvbnN0YW50Q29udGV4dC53aXRoTG9jYXRpb24oCiAgICAgICAgICAgIHVucmVzb2x2ZWQuZmlsZVVyaSwKICAgICAgICAgICAgdW5yZXNvbHZlZC5jaGFyT2Zmc2V0LAogICAgICAgICAgICB0eXBlUGFyYW1ldGVyLm5hbWUubGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gdW5yZXNvbHZlZDsKICAgICAgfQogICAgICBhZGRQcm9ibGVtKG1lc3NhZ2UubWVzc2FnZU9iamVjdCwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBtZXNzYWdlLmxlbmd0aCk7CiAgICAgIHJldHVybiBuZXcgVW5yZXNvbHZlZFR5cGUoCiAgICAgICAgICBuZXcgTmFtZWRUeXBlQnVpbGRlcih0eXBlUGFyYW1ldGVyLm5hbWUsIG51bGwpCiAgICAgICAgICAgIC4uYmluZChuZXcgSW52YWxpZFR5cGVCdWlsZGVyKHR5cGVQYXJhbWV0ZXIubmFtZSwgbWVzc2FnZSkpLAogICAgICAgICAgdW5yZXNvbHZlZC5jaGFyT2Zmc2V0LAogICAgICAgICAgdW5yZXNvbHZlZC5maWxlVXJpKTsKICAgIH0KICAgIHJldHVybiB1bnJlc29sdmVkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBldmFsdWF0ZUFyZ3VtZW50c0JlZm9yZSgKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywgRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICBpZiAoYXJndW1lbnRzID09IG51bGwpIHJldHVybiBleHByZXNzaW9uOwogICAgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9ucyA9CiAgICAgICAgbmV3IExpc3Q8RXhwcmVzc2lvbj4uZnJvbShmb3Jlc3QuYXJndW1lbnRzUG9zaXRpb25hbChhcmd1bWVudHMpKTsKICAgIGZvciAoTmFtZWRFeHByZXNzaW9uIG5hbWVkIGluIGZvcmVzdC5hcmd1bWVudHNOYW1lZChhcmd1bWVudHMpKSB7CiAgICAgIGV4cHJlc3Npb25zLmFkZChuYW1lZC52YWx1ZSk7CiAgICB9CiAgICBmb3IgKEV4cHJlc3Npb24gYXJndW1lbnQgaW4gZXhwcmVzc2lvbnMucmV2ZXJzZWQpIHsKICAgICAgZXhwcmVzc2lvbiA9IG5ldyBMZXQoCiAgICAgICAgICBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShhcmd1bWVudCwKICAgICAgICAgICAgICBpc0ZpbmFsOiB0cnVlLCB0eXBlOiBjb3JlVHlwZXMub2JqZWN0Q2xhc3MucmF3VHlwZSksCiAgICAgICAgICBleHByZXNzaW9uKTsKICAgIH0KICAgIHJldHVybiBleHByZXNzaW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0lkZW50aWNhbChNZW1iZXIgbWVtYmVyKSA9PiBtZW1iZXIgPT0gY29yZVR5cGVzLmlkZW50aWNhbFByb2NlZHVyZTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZE1ldGhvZEludm9jYXRpb24oCiAgICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsIE5hbWUgbmFtZSwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCwKICAgICAge2Jvb2wgaXNDb25zdGFudEV4cHJlc3Npb246IGZhbHNlLAogICAgICBib29sIGlzTnVsbEF3YXJlOiBmYWxzZSwKICAgICAgYm9vbCBpc0ltcGxpY2l0Q2FsbDogZmFsc2UsCiAgICAgIGJvb2wgaXNTdXBlcjogZmFsc2UsCiAgICAgIE1lbWJlciBpbnRlcmZhY2VUYXJnZXR9KSB7CiAgICBpZiAoY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lICYmICFpc0NvbnN0YW50RXhwcmVzc2lvbikgewogICAgICByZXR1cm4gYnVpbGRQcm9ibGVtKAogICAgICAgICAgZmFzdGEudGVtcGxhdGVOb3RDb25zdGFudEV4cHJlc3Npb24KICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cygnTWV0aG9kIGludm9jYXRpb24nKSwKICAgICAgICAgIG9mZnNldCwKICAgICAgICAgIG5hbWUubmFtZS5sZW5ndGgpOwogICAgfQogICAgaWYgKGlzU3VwZXIpIHsKICAgICAgLy8gV2UgY2FuIGlnbm9yZSBbaXNOdWxsQXdhcmVdIG9uIHN1cGVyIHNlbmRzLgogICAgICBhc3NlcnQoZm9yZXN0LmlzVGhpc0V4cHJlc3Npb24ocmVjZWl2ZXIpKTsKICAgICAgTWVtYmVyIHRhcmdldCA9IGxvb2t1cEluc3RhbmNlTWVtYmVyKG5hbWUsIGlzU3VwZXI6IHRydWUpOwoKICAgICAgaWYgKHRhcmdldCA9PSBudWxsIHx8ICh0YXJnZXQgaXMgUHJvY2VkdXJlICYmICF0YXJnZXQuaXNBY2Nlc3NvcikpIHsKICAgICAgICBpZiAodGFyZ2V0ID09IG51bGwpIHsKICAgICAgICAgIHdhcm5VbnJlc29sdmVkTWV0aG9kKG5hbWUsIG9mZnNldCwgaXNTdXBlcjogdHJ1ZSk7CiAgICAgICAgfSBlbHNlIGlmICghYXJlQXJndW1lbnRzQ29tcGF0aWJsZSh0YXJnZXQuZnVuY3Rpb24sIGFyZ3VtZW50cykpIHsKICAgICAgICAgIHRhcmdldCA9IG51bGw7CiAgICAgICAgICBhZGRQcm9ibGVtRXJyb3JJZkNvbnN0KAogICAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlU3VwZXJjbGFzc01ldGhvZEFyZ3VtZW50TWlzbWF0Y2gKICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZS5uYW1lKSwKICAgICAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICAgICAgbmFtZS5uYW1lLmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgU3VwZXJNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgICAgICAgIG5hbWUsIGZvcmVzdC5jYXN0QXJndW1lbnRzKGFyZ3VtZW50cyksCiAgICAgICAgICAgIGludGVyZmFjZVRhcmdldDogdGFyZ2V0KQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICB9CgogICAgICByZWNlaXZlciA9IG5ldyBTdXBlclByb3BlcnR5R2V0SnVkZ21lbnQobmFtZSwgaW50ZXJmYWNlVGFyZ2V0OiB0YXJnZXQpCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBNZXRob2RJbnZvY2F0aW9uIG5vZGUgPSBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgICAgcmVjZWl2ZXIsIGNhbGxOYW1lLCBmb3Jlc3QuY2FzdEFyZ3VtZW50cyhhcmd1bWVudHMpLAogICAgICAgICAgaXNJbXBsaWNpdENhbGw6IHRydWUpCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gZm9yZXN0LnJlYWRPZmZzZXQoYXJndW1lbnRzKTsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CgogICAgaWYgKGlzTnVsbEF3YXJlKSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShyZWNlaXZlcik7CiAgICAgIHJldHVybiBuZXcgTnVsbEF3YXJlTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgICAgdmFyaWFibGUsCiAgICAgICAgICBmb3Jlc3QuY29uZGl0aW9uYWxFeHByZXNzaW9uKAogICAgICAgICAgICAgIGJ1aWxkSXNOdWxsKG5ldyBWYXJpYWJsZUdldCh2YXJpYWJsZSksIG9mZnNldCwgdGhpcyksCiAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICBmb3Jlc3QubGl0ZXJhbE51bGwobnVsbCkuLmZpbGVPZmZzZXQgPSBvZmZzZXQsCiAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICBuZXcgTWV0aG9kSW52b2NhdGlvbihuZXcgVmFyaWFibGVHZXQodmFyaWFibGUpLCBuYW1lLAogICAgICAgICAgICAgICAgICBmb3Jlc3QuY2FzdEFyZ3VtZW50cyhhcmd1bWVudHMpLCBpbnRlcmZhY2VUYXJnZXQpCiAgICAgICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQpCiAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldCkKICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICB9IGVsc2UgewogICAgICBNZXRob2RJbnZvY2F0aW9uIG5vZGUgPSBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgICAgcmVjZWl2ZXIsIG5hbWUsIGZvcmVzdC5jYXN0QXJndW1lbnRzKGFyZ3VtZW50cyksCiAgICAgICAgICBpc0ltcGxpY2l0Q2FsbDogaXNJbXBsaWNpdENhbGwsIGludGVyZmFjZVRhcmdldDogaW50ZXJmYWNlVGFyZ2V0KQogICAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldDsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFByb2JsZW0oTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwKICAgICAge2Jvb2wgd2FzSGFuZGxlZDogZmFsc2UsCiAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQsCiAgICAgIFNldmVyaXR5IHNldmVyaXR5fSkgewogICAgbGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGxlbmd0aCwgdXJpLAogICAgICAgIHdhc0hhbmRsZWQ6IHdhc0hhbmRsZWQsIGNvbnRleHQ6IGNvbnRleHQsIHNldmVyaXR5OiBzZXZlcml0eSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFByb2JsZW1FcnJvcklmQ29uc3QoTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwKICAgICAge2Jvb2wgd2FzSGFuZGxlZDogZmFsc2UsIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICAvLyBUT0RPKGFza2VzYyk6IEluc3RlYWQgb2YgZGVjaWRpbmcgb24gdGhlIHNldmVyaXR5LCB0aGlzIG1ldGhvZCBzaG91bGQKICAgIC8vIHRha2UgdHdvIG1lc3NhZ2VzOiBvbmUgdG8gdXNlIHdoZW4gYSBjb25zdGFudCBleHByZXNzaW9uIGlzCiAgICAvLyByZXF1aXJlZCBhbmQgb25lIHRvIHVzZSBvdGhlcndpc2UuCiAgICBTZXZlcml0eSBzZXZlcml0eSA9IG1lc3NhZ2UuY29kZS5zZXZlcml0eTsKICAgIGlmIChjb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUpIHsKICAgICAgc2V2ZXJpdHkgPSBTZXZlcml0eS5lcnJvcjsKICAgIH0KICAgIGFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLAogICAgICAgIHdhc0hhbmRsZWQ6IHdhc0hhbmRsZWQsIGNvbnRleHQ6IGNvbnRleHQsIHNldmVyaXR5OiBzZXZlcml0eSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydER1cGxpY2F0ZWREZWNsYXJhdGlvbigKICAgICAgRGVjbGFyYXRpb24gZXhpc3RpbmcsIFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCkgewogICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCA9IGV4aXN0aW5nLmlzU3ludGhldGljCiAgICAgICAgPyBudWxsCiAgICAgICAgOiA8TG9jYXRlZE1lc3NhZ2U+WwogICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbkNhdXNlCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lKQogICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgICAgICBleGlzdGluZy5maWxlVXJpLCBleGlzdGluZy5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCkKICAgICAgICAgIF07CiAgICBhZGRQcm9ibGVtKGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgY2hhck9mZnNldCwgbmFtZS5sZW5ndGgsCiAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlYnVnRXZlbnQoU3RyaW5nIG5hbWUpIHsKICAgIC8vIHByaW50RXZlbnQoJ0JvZHlCdWlsZGVyOiAkbmFtZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RhdGljR2V0IG1ha2VTdGF0aWNHZXQoTWVtYmVyIHJlYWRUYXJnZXQsIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IFN0YXRpY0dldChyZWFkVGFyZ2V0KS4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gd3JhcEluRGVmZXJyZWRDaGVjaygKICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBQcmVmaXhCdWlsZGVyIHByZWZpeCwgaW50IGNoYXJPZmZzZXQpIHsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gY2hlY2sgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZSgKICAgICAgICBmb3Jlc3QuY2hlY2tMaWJyYXJ5SXNMb2FkZWQocHJlZml4LmRlcGVuZGVuY3kpKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgcmV0dXJuIG5ldyBEZWZlcnJlZENoZWNrSnVkZ21lbnQoY2hlY2ssIGV4cHJlc3Npb24pOwogIH0KCiAgLy8vIFRPRE8oYWhlKTogVGhpcyBtZXRob2QgaXMgdGVtcG9yYXJpbHkgaW1wbGVtZW50ZWQuIE9uY2UgdHlwZSBwcm9tb3Rpb24gaXMKICAvLy8gaW5kZXBlbmRlbnQgb2Ygc2hhZG93IG5vZGVzLCByZW1vdmUgdGhpcyBtZXRob2QuCiAgdm9pZCBlbnRlclRoZW5Gb3JUeXBlUHJvbW90aW9uKEV4cHJlc3Npb24gY29uZGl0aW9uKSB7CiAgICB0eXBlUHJvbW90ZXI/LmVudGVyVGhlbihjb25kaXRpb24pOwogIH0KCiAgYm9vbCBpc0Vycm9uZW91c05vZGUoVHJlZU5vZGUgbm9kZSkgewogICAgcmV0dXJuIGxpYnJhcnkubG9hZGVyLmhhbmRsZWRFcnJvcnMuaXNOb3RFbXB0eSAmJgogICAgICAgIGZvcmVzdC5pc0Vycm9uZW91c05vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBidWlsZERhcnRUeXBlKFVucmVzb2x2ZWRUeXBlIHVucmVzb2x2ZWRUeXBlLAogICAgICB7Ym9vbCBub25JbnN0YW5jZUFjY2Vzc0lzRXJyb3I6IGZhbHNlfSkgewogICAgaWYgKHVucmVzb2x2ZWRUeXBlID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIHZhbGlkYXRlVHlwZVVzZSh1bnJlc29sdmVkVHlwZSwgbm9uSW5zdGFuY2VBY2Nlc3NJc0Vycm9yKQogICAgICAgIC5idWlsZGVyCiAgICAgICAgPy5idWlsZChsaWJyYXJ5KTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8RGFydFR5cGU+IGJ1aWxkRGFydFR5cGVBcmd1bWVudHMoTGlzdDxVbnJlc29sdmVkVHlwZT4gdW5yZXNvbHZlZFR5cGVzKSB7CiAgICBpZiAodW5yZXNvbHZlZFR5cGVzID09IG51bGwpIHJldHVybiA8RGFydFR5cGU+W107CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlcyA9CiAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCh1bnJlc29sdmVkVHlwZXMubGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHR5cGVzW2ldID0gYnVpbGREYXJ0VHlwZSh1bnJlc29sdmVkVHlwZXNbaV0pOwogICAgfQogICAgcmV0dXJuIHR5cGVzOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGNvbnN0cnVjdG9yTmFtZUZvckRpYWdub3N0aWNzKFN0cmluZyBuYW1lLAogICAgICB7U3RyaW5nIGNsYXNzTmFtZSwgYm9vbCBpc1N1cGVyOiBmYWxzZX0pIHsKICAgIGlmIChjbGFzc05hbWUgPT0gbnVsbCkgewogICAgICBDbGFzcyBjbHMgPSBjbGFzc0J1aWxkZXIuY2xzOwogICAgICBpZiAoaXNTdXBlcikgewogICAgICAgIGNscyA9IGNscy5zdXBlcmNsYXNzOwogICAgICAgIHdoaWxlIChjbHMuaXNNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgICAgICBjbHMgPSBjbHMuc3VwZXJjbGFzczsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2xhc3NOYW1lID0gY2xzLm5hbWU7CiAgICB9CiAgICByZXR1cm4gbmFtZS5pc0VtcHR5ID8gY2xhc3NOYW1lIDogIiRjbGFzc05hbWUuJG5hbWUiOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiB3cmFwU3ludGhldGljRXhwcmVzc2lvbihFeHByZXNzaW9uIGRlc3VnYXJlZCwgaW50IGNoYXJPZmZzZXQpIHsKICAgIGlmIChsZWdhY3lNb2RlKSByZXR1cm4gZGVzdWdhcmVkOwogICAgcmV0dXJuIHNoYWRvdy5TeW50aGV0aWNXcmFwcGVyLndyYXBTeW50aGV0aWNFeHByZXNzaW9uKGRlc3VnYXJlZCkKICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpZiAobGVnYWN5TW9kZSkgcmV0dXJuIG5vZGU7CiAgICBzaGFkb3cuU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50IHNoYWRvd05vZGUgPSBub2RlOwogICAgcmV0dXJuIHNoYWRvd05vZGUuZGVzdWdhcmVkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiB3cmFwSW52YWxpZENvbnN0cnVjdG9ySW52b2NhdGlvbihFeHByZXNzaW9uIGRlc3VnYXJlZCwKICAgICAgTWVtYmVyIGNvbnN0cnVjdG9yLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgY2hhck9mZnNldCkgewogICAgaWYgKGxlZ2FjeU1vZGUpIHJldHVybiBkZXN1Z2FyZWQ7CiAgICByZXR1cm4gc2hhZG93LlN5bnRoZXRpY1dyYXBwZXIud3JhcEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgZGVzdWdhcmVkLCBjb25zdHJ1Y3RvciwgYXJndW1lbnRzKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiB3cmFwSW52YWxpZFdyaXRlKAogICAgICBFeHByZXNzaW9uIGRlc3VnYXJlZCwgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBpbnQgY2hhck9mZnNldCkgewogICAgaWYgKGxlZ2FjeU1vZGUpIHJldHVybiBkZXN1Z2FyZWQ7CiAgICByZXR1cm4gc2hhZG93LlN5bnRoZXRpY1dyYXBwZXIud3JhcEludmFsaWRXcml0ZShkZXN1Z2FyZWQsIGV4cHJlc3Npb24pCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHdyYXBVbnJlc29sdmVkVGFyZ2V0SW52b2NhdGlvbigKICAgICAgRXhwcmVzc2lvbiBkZXN1Z2FyZWQsIEFyZ3VtZW50cyBhcmd1bWVudHMsIGludCBjaGFyT2Zmc2V0KSB7CiAgICBpZiAobGVnYWN5TW9kZSkgcmV0dXJuIGRlc3VnYXJlZDsKICAgIHJldHVybiBzaGFkb3cuU3ludGhldGljV3JhcHBlci53cmFwVW5yZXNvbHZlZFRhcmdldEludm9jYXRpb24oCiAgICAgICAgZGVzdWdhcmVkLCBhcmd1bWVudHMpCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHdyYXBVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50KAogICAgICBFeHByZXNzaW9uIGRlc3VnYXJlZCwgYm9vbCBpc0NvbXBvdW5kLCBFeHByZXNzaW9uIHJocywgaW50IGNoYXJPZmZzZXQpIHsKICAgIGlmIChsZWdhY3lNb2RlKSByZXR1cm4gZGVzdWdhcmVkOwogICAgcmV0dXJuIHNoYWRvdy5TeW50aGV0aWNXcmFwcGVyLndyYXBVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50KAogICAgICAgIGRlc3VnYXJlZCwgaXNDb21wb3VuZCwgcmhzKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgRW5zdXJlTG9hZGVkIHsKICB2b2lkIGVuc3VyZUxvYWRlZChNZW1iZXIgbWVtYmVyKTsKICBib29sIGlzTG9hZGVkKE1lbWJlciBtZW1iZXIpOwp9CgpjbGFzcyBPcGVyYXRvciB7CiAgZmluYWwgVG9rZW4gdG9rZW47CiAgU3RyaW5nIGdldCBuYW1lID0+IHRva2VuLnN0cmluZ1ZhbHVlOwoKICBmaW5hbCBpbnQgY2hhck9mZnNldDsKCiAgT3BlcmF0b3IodGhpcy50b2tlbiwgdGhpcy5jaGFyT2Zmc2V0KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIm9wZXJhdG9yKCRuYW1lKSI7Cn0KCmNsYXNzIEp1bXBUYXJnZXQgZXh0ZW5kcyBEZWNsYXJhdGlvbiB7CiAgZmluYWwgTGlzdDxTdGF0ZW1lbnQ+IHVzZXJzID0gPFN0YXRlbWVudD5bXTsKCiAgZmluYWwgSnVtcFRhcmdldEtpbmQga2luZDsKCiAgZmluYWwgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBNZW1iZXJCdWlsZGVyIHBhcmVudDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIEp1bXBUYXJnZXQoCiAgICAgIHRoaXMua2luZCwgdGhpcy5mdW5jdGlvbk5lc3RpbmdMZXZlbCwgdGhpcy5wYXJlbnQsIHRoaXMuY2hhck9mZnNldCk7CgogIEBvdmVycmlkZQogIFVyaSBnZXQgZmlsZVVyaSA9PiBwYXJlbnQuZmlsZVVyaTsKCiAgYm9vbCBnZXQgaXNCcmVha1RhcmdldCA9PiBraW5kID09IEp1bXBUYXJnZXRLaW5kLkJyZWFrOwoKICBib29sIGdldCBpc0NvbnRpbnVlVGFyZ2V0ID0+IGtpbmQgPT0gSnVtcFRhcmdldEtpbmQuQ29udGludWU7CgogIGJvb2wgZ2V0IGlzR290b1RhcmdldCA9PiBraW5kID09IEp1bXBUYXJnZXRLaW5kLkdvdG87CgogIGJvb2wgZ2V0IGhhc1VzZXJzID0+IHVzZXJzLmlzTm90RW1wdHk7CgogIHZvaWQgYWRkQnJlYWsoU3RhdGVtZW50IHN0YXRlbWVudCkgewogICAgYXNzZXJ0KGlzQnJlYWtUYXJnZXQpOwogICAgdXNlcnMuYWRkKHN0YXRlbWVudCk7CiAgfQoKICB2b2lkIGFkZENvbnRpbnVlKFN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgIGFzc2VydChpc0NvbnRpbnVlVGFyZ2V0KTsKICAgIHVzZXJzLmFkZChzdGF0ZW1lbnQpOwogIH0KCiAgdm9pZCBhZGRHb3RvKFN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgIGFzc2VydChpc0dvdG9UYXJnZXQpOwogICAgdXNlcnMuYWRkKHN0YXRlbWVudCk7CiAgfQoKICB2b2lkIHJlc29sdmVCcmVha3MoRm9yZXN0IGZvcmVzdCwgU3RhdGVtZW50IHRhcmdldCkgewogICAgYXNzZXJ0KGlzQnJlYWtUYXJnZXQpOwogICAgZm9yIChCcmVha1N0YXRlbWVudCB1c2VyIGluIHVzZXJzKSB7CiAgICAgIHVzZXIudGFyZ2V0ID0gdGFyZ2V0OwogICAgfQogICAgdXNlcnMuY2xlYXIoKTsKICB9CgogIHZvaWQgcmVzb2x2ZUNvbnRpbnVlcyhGb3Jlc3QgZm9yZXN0LCBTdGF0ZW1lbnQgdGFyZ2V0KSB7CiAgICBhc3NlcnQoaXNDb250aW51ZVRhcmdldCk7CiAgICBmb3IgKEJyZWFrU3RhdGVtZW50IHVzZXIgaW4gdXNlcnMpIHsKICAgICAgdXNlci50YXJnZXQgPSB0YXJnZXQ7CiAgICB9CiAgICB1c2Vycy5jbGVhcigpOwogIH0KCiAgdm9pZCByZXNvbHZlR290b3MoRm9yZXN0IGZvcmVzdCwgU3dpdGNoQ2FzZSB0YXJnZXQpIHsKICAgIGFzc2VydChpc0dvdG9UYXJnZXQpOwogICAgZm9yIChDb250aW51ZVN3aXRjaFN0YXRlbWVudCB1c2VyIGluIHVzZXJzKSB7CiAgICAgIHVzZXIudGFyZ2V0ID0gdGFyZ2V0OwogICAgfQogICAgdXNlcnMuY2xlYXIoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZnVsbE5hbWVGb3JFcnJvcnMgPT4gIjxqdW1wLXRhcmdldD4iOwp9CgpjbGFzcyBMYWJlbFRhcmdldCBleHRlbmRzIERlY2xhcmF0aW9uIGltcGxlbWVudHMgSnVtcFRhcmdldCB7CiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyQnVpbGRlciBwYXJlbnQ7CgogIGZpbmFsIEp1bXBUYXJnZXQgYnJlYWtUYXJnZXQ7CgogIGZpbmFsIEp1bXBUYXJnZXQgY29udGludWVUYXJnZXQ7CgogIGZpbmFsIGludCBmdW5jdGlvbk5lc3RpbmdMZXZlbDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIExhYmVsVGFyZ2V0KHRoaXMucGFyZW50LCB0aGlzLmZ1bmN0aW9uTmVzdGluZ0xldmVsLCB0aGlzLmNoYXJPZmZzZXQpCiAgICAgIDogYnJlYWtUYXJnZXQgPSBuZXcgSnVtcFRhcmdldCgKICAgICAgICAgICAgSnVtcFRhcmdldEtpbmQuQnJlYWssIGZ1bmN0aW9uTmVzdGluZ0xldmVsLCBwYXJlbnQsIGNoYXJPZmZzZXQpLAogICAgICAgIGNvbnRpbnVlVGFyZ2V0ID0gbmV3IEp1bXBUYXJnZXQoCiAgICAgICAgICAgIEp1bXBUYXJnZXRLaW5kLkNvbnRpbnVlLCBmdW5jdGlvbk5lc3RpbmdMZXZlbCwgcGFyZW50LCBjaGFyT2Zmc2V0KTsKCiAgQG92ZXJyaWRlCiAgVXJpIGdldCBmaWxlVXJpID0+IHBhcmVudC5maWxlVXJpOwoKICBib29sIGdldCBoYXNVc2VycyA9PiBicmVha1RhcmdldC5oYXNVc2VycyB8fCBjb250aW51ZVRhcmdldC5oYXNVc2VyczsKCiAgTGlzdDxTdGF0ZW1lbnQ+IGdldCB1c2VycyA9PiB1bnN1cHBvcnRlZCgidXNlcnMiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKCiAgSnVtcFRhcmdldEtpbmQgZ2V0IGtpbmQgPT4gdW5zdXBwb3J0ZWQoImtpbmQiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKCiAgYm9vbCBnZXQgaXNCcmVha1RhcmdldCA9PiB0cnVlOwoKICBib29sIGdldCBpc0NvbnRpbnVlVGFyZ2V0ID0+IHRydWU7CgogIGJvb2wgZ2V0IGlzR290b1RhcmdldCA9PiBmYWxzZTsKCiAgdm9pZCBhZGRCcmVhayhTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICBicmVha1RhcmdldC5hZGRCcmVhayhzdGF0ZW1lbnQpOwogIH0KCiAgdm9pZCBhZGRDb250aW51ZShTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICBjb250aW51ZVRhcmdldC5hZGRDb250aW51ZShzdGF0ZW1lbnQpOwogIH0KCiAgdm9pZCBhZGRHb3RvKFN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgIHVuc3VwcG9ydGVkKCJhZGRHb3RvIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQoKICB2b2lkIHJlc29sdmVCcmVha3MoRm9yZXN0IGZvcmVzdCwgU3RhdGVtZW50IHRhcmdldCkgewogICAgYnJlYWtUYXJnZXQucmVzb2x2ZUJyZWFrcyhmb3Jlc3QsIHRhcmdldCk7CiAgfQoKICB2b2lkIHJlc29sdmVDb250aW51ZXMoRm9yZXN0IGZvcmVzdCwgU3RhdGVtZW50IHRhcmdldCkgewogICAgY29udGludWVUYXJnZXQucmVzb2x2ZUNvbnRpbnVlcyhmb3Jlc3QsIHRhcmdldCk7CiAgfQoKICB2b2lkIHJlc29sdmVHb3RvcyhGb3Jlc3QgZm9yZXN0LCBTd2l0Y2hDYXNlIHRhcmdldCkgewogICAgdW5zdXBwb3J0ZWQoInJlc29sdmVHb3RvcyIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBmdWxsTmFtZUZvckVycm9ycyA9PiAiPGxhYmVsLXRhcmdldD4iOwp9CgpjbGFzcyBGb3JtYWxQYXJhbWV0ZXJzIHsKICBmaW5hbCBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IHBhcmFtZXRlcnM7CiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CiAgZmluYWwgaW50IGxlbmd0aDsKICBmaW5hbCBVcmkgdXJpOwoKICBGb3JtYWxQYXJhbWV0ZXJzKHRoaXMucGFyYW1ldGVycywgdGhpcy5jaGFyT2Zmc2V0LCB0aGlzLmxlbmd0aCwgdGhpcy51cmkpIHsKICAgIGlmIChwYXJhbWV0ZXJzPy5pc0VtcHR5ID8/IGZhbHNlKSB7CiAgICAgIHRocm93ICJFbXB0eSBwYXJhbWV0ZXJzIHNob3VsZCBiZSBudWxsIjsKICAgIH0KICB9CgogIEZ1bmN0aW9uTm9kZSBidWlsZEZ1bmN0aW9uTm9kZSgKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwKICAgICAgVW5yZXNvbHZlZFR5cGUgcmV0dXJuVHlwZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlUGFyYW1ldGVycywKICAgICAgQXN5bmNNYXJrZXIgYXN5bmNNb2RpZmllciwKICAgICAgU3RhdGVtZW50IGJvZHksCiAgICAgIGludCBmaWxlRW5kT2Zmc2V0KSB7CiAgICBGdW5jdGlvblR5cGUgdHlwZSA9CiAgICAgICAgdG9GdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgdHlwZVBhcmFtZXRlcnMpLmJ1aWxkZXIuYnVpbGQobGlicmFyeSk7CiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gPFZhcmlhYmxlRGVjbGFyYXRpb24+W107CiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IG5hbWVkUGFyYW1ldGVycyA9IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdOwogICAgaWYgKHBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgcGFyYW1ldGVyIGluIHBhcmFtZXRlcnMpIHsKICAgICAgICBpZiAocGFyYW1ldGVyLmlzTmFtZWQpIHsKICAgICAgICAgIG5hbWVkUGFyYW1ldGVycy5hZGQocGFyYW1ldGVyLnRhcmdldCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmFkZChwYXJhbWV0ZXIudGFyZ2V0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbmFtZWRQYXJhbWV0ZXJzLnNvcnQoKFZhcmlhYmxlRGVjbGFyYXRpb24gYSwgVmFyaWFibGVEZWNsYXJhdGlvbiBiKSB7CiAgICAgICAgcmV0dXJuIGEubmFtZS5jb21wYXJlVG8oYi5uYW1lKTsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZUp1ZGdtZW50KGJvZHksCiAgICAgICAgdHlwZVBhcmFtZXRlcnM6IHR5cGUudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnM6IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgIG5hbWVkUGFyYW1ldGVyczogbmFtZWRQYXJhbWV0ZXJzLAogICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IHR5cGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICByZXR1cm5UeXBlOiB0eXBlLnJldHVyblR5cGUsCiAgICAgICAgYXN5bmNNYXJrZXI6IGFzeW5jTW9kaWZpZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQKICAgICAgLi5maWxlRW5kT2Zmc2V0ID0gZmlsZUVuZE9mZnNldDsKICB9CgogIFVucmVzb2x2ZWRUeXBlIHRvRnVuY3Rpb25UeXBlKFVucmVzb2x2ZWRUeXBlIHJldHVyblR5cGUsCiAgICAgIFtMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVQYXJhbWV0ZXJzXSkgewogICAgcmV0dXJuIG5ldyBVbnJlc29sdmVkVHlwZSgKICAgICAgICBuZXcgRnVuY3Rpb25UeXBlQnVpbGRlcigKICAgICAgICAgICAgcmV0dXJuVHlwZT8uYnVpbGRlciwgdHlwZVBhcmFtZXRlcnMsIHBhcmFtZXRlcnMpLAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgdXJpKTsKICB9CgogIFNjb3BlIGNvbXB1dGVGb3JtYWxQYXJhbWV0ZXJTY29wZSgKICAgICAgU2NvcGUgcGFyZW50LCBEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiwgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIpIHsKICAgIGlmIChwYXJhbWV0ZXJzID09IG51bGwpIHJldHVybiBwYXJlbnQ7CiAgICBhc3NlcnQocGFyYW1ldGVycy5pc05vdEVtcHR5KTsKICAgIE1hcDxTdHJpbmcsIERlY2xhcmF0aW9uPiBsb2NhbCA9IDxTdHJpbmcsIERlY2xhcmF0aW9uPnt9OwoKICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBwYXJhbWV0ZXIgaW4gcGFyYW1ldGVycykgewogICAgICBEZWNsYXJhdGlvbiBleGlzdGluZyA9IGxvY2FsW3BhcmFtZXRlci5uYW1lXTsKICAgICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKICAgICAgICBoZWxwZXIucmVwb3J0RHVwbGljYXRlZERlY2xhcmF0aW9uKAogICAgICAgICAgICBleGlzdGluZywgcGFyYW1ldGVyLm5hbWUsIHBhcmFtZXRlci5jaGFyT2Zmc2V0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsb2NhbFtwYXJhbWV0ZXIubmFtZV0gPSBwYXJhbWV0ZXI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgU2NvcGUobG9jYWwsIG51bGwsIHBhcmVudCwgImZvcm1hbHMiLCBpc01vZGlmaWFibGU6IGZhbHNlKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAiRm9ybWFsUGFyYW1ldGVycygkcGFyYW1ldGVycywgJGNoYXJPZmZzZXQsICR1cmkpIjsKICB9Cn0KCi8vLyBSZXR1cm5zIGEgYmxvY2sgbGlrZSB0aGlzOgovLy8KLy8vICAgICB7Ci8vLyAgICAgICBzdGF0ZW1lbnQ7Ci8vLyAgICAgICBib2R5OwovLy8gICAgIH0KLy8vCi8vLyBJZiBbYm9keV0gaXMgYSBbQmxvY2tdLCBpdCdzIHJldHVybmVkIHdpdGggW3N0YXRlbWVudF0gcHJlcGVuZGVkIHRvIGl0LgpCbG9jayBjb21iaW5lU3RhdGVtZW50cyhTdGF0ZW1lbnQgc3RhdGVtZW50LCBTdGF0ZW1lbnQgYm9keSkgewogIGlmIChib2R5IGlzIEJsb2NrKSB7CiAgICBib2R5LnN0YXRlbWVudHMuaW5zZXJ0KDAsIHN0YXRlbWVudCk7CiAgICBzdGF0ZW1lbnQucGFyZW50ID0gYm9keTsKICAgIHJldHVybiBib2R5OwogIH0gZWxzZSB7CiAgICByZXR1cm4gbmV3IEJsb2NrSnVkZ21lbnQoPFN0YXRlbWVudD5bc3RhdGVtZW50LCBib2R5XSkKICAgICAgLi5maWxlT2Zmc2V0ID0gc3RhdGVtZW50LmZpbGVPZmZzZXQ7CiAgfQp9CgpTdHJpbmcgZGVidWdOYW1lKFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBuYW1lLCBbU3RyaW5nIHByZWZpeF0pIHsKICBTdHJpbmcgcmVzdWx0ID0gbmFtZS5pc0VtcHR5ID8gY2xhc3NOYW1lIDogIiRjbGFzc05hbWUuJG5hbWUiOwogIHJldHVybiBwcmVmaXggPT0gbnVsbCA/IHJlc3VsdCA6ICIkcHJlZml4LnJlc3VsdCI7Cn0KCi8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoaXMgaXMgYSBiaXQgYWQgaG9jLiBDYWxsIHNpdGVzIHNob3VsZCBrbm93IHdoYXQga2luZAovLyBvZiBvYmplY3RzIGNhbiBiZSBhbnRpY2lwYXRlZCBhbmQgaGFuZGxlIHRoZXNlIGRpcmVjdGx5LgpTdHJpbmcgZ2V0Tm9kZU5hbWUoT2JqZWN0IG5vZGUpIHsKICBpZiAobm9kZSBpcyBJZGVudGlmaWVyKSB7CiAgICByZXR1cm4gbm9kZS5uYW1lOwogIH0gZWxzZSBpZiAobm9kZSBpcyBEZWNsYXJhdGlvbikgewogICAgcmV0dXJuIG5vZGUuZnVsbE5hbWVGb3JFcnJvcnM7CiAgfSBlbHNlIGlmIChub2RlIGlzIFF1YWxpZmllZE5hbWUpIHsKICAgIHJldHVybiBmbGF0dGVuTmFtZShub2RlLCBub2RlLmNoYXJPZmZzZXQsIG51bGwpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdW5oYW5kbGVkKCIke25vZGUucnVudGltZVR5cGV9IiwgImdldE5vZGVOYW1lIiwgLTEsIG51bGwpOwogIH0KfQoKQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXJGcm9tVG9rZW5zKFRva2VuIGFzeW5jVG9rZW4sIFRva2VuIHN0YXJUb2tlbikgewogIGlmIChhc3luY1Rva2VuID09IG51bGwgfHwgaWRlbnRpY2FsKGFzeW5jVG9rZW4uc3RyaW5nVmFsdWUsICJzeW5jIikpIHsKICAgIGlmIChzdGFyVG9rZW4gPT0gbnVsbCkgewogICAgICByZXR1cm4gQXN5bmNNYXJrZXIuU3luYzsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChpZGVudGljYWwoc3RhclRva2VuLnN0cmluZ1ZhbHVlLCAiKiIpKTsKICAgICAgcmV0dXJuIEFzeW5jTWFya2VyLlN5bmNTdGFyOwogICAgfQogIH0gZWxzZSBpZiAoaWRlbnRpY2FsKGFzeW5jVG9rZW4uc3RyaW5nVmFsdWUsICJhc3luYyIpKSB7CiAgICBpZiAoc3RhclRva2VuID09IG51bGwpIHsKICAgICAgcmV0dXJuIEFzeW5jTWFya2VyLkFzeW5jOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGlkZW50aWNhbChzdGFyVG9rZW4uc3RyaW5nVmFsdWUsICIqIikpOwogICAgICByZXR1cm4gQXN5bmNNYXJrZXIuQXN5bmNTdGFyOwogICAgfQogIH0gZWxzZSB7CiAgICByZXR1cm4gdW5oYW5kbGVkKGFzeW5jVG9rZW4ubGV4ZW1lLCAiYXN5bmNNYXJrZXJGcm9tVG9rZW5zIiwKICAgICAgICBhc3luY1Rva2VuLmNoYXJPZmZzZXQsIG51bGwpOwogIH0KfQoKLy8vIEEgZGF0YSBob2xkZXIgdXNlZCB0byBob2xkIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBhIGxhYmVsIHRoYXQgaXMgcHVzaGVkIG9uCi8vLyB0aGUgc3RhY2suCmNsYXNzIExhYmVsIHsKICBTdHJpbmcgbmFtZTsKICBpbnQgY2hhck9mZnNldDsKCiAgTGFiZWwodGhpcy5uYW1lLCB0aGlzLmNoYXJPZmZzZXQpOwoKICBTdHJpbmcgdG9TdHJp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YmluYXJ5L2FzdF9mcm9tX2JpbmFyeS5kYXJ0JwogICAgc2hvdwogICAgICAgIEJpbmFyeUJ1aWxkZXIsCiAgICAgICAgQ2Fub25pY2FsTmFtZUVycm9yLAogICAgICAgIENhbm9uaWNhbE5hbWVTZGtFcnJvciwKICAgICAgICBJbnZhbGlkS2VybmVsVmVyc2lvbkVycm9yOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcKICAgIHNob3cgQ2xhc3NIaWVyYXJjaHksIENsb3NlZFdvcmxkQ2xhc3NIaWVyYXJjaHk7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgc2hvdyBDb3JlVHlwZXM7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2tlcm5lbC5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzLAogICAgICAgIENvbXBvbmVudCwKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEZ1bmN0aW9uTm9kZSwKICAgICAgICBMaWJyYXJ5LAogICAgICAgIExpYnJhcnlEZXBlbmRlbmN5LAogICAgICAgIExpYnJhcnlQYXJ0LAogICAgICAgIE5hbWUsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFByb2NlZHVyZUtpbmQsCiAgICAgICAgUmV0dXJuU3RhdGVtZW50LAogICAgICAgIFNvdXJjZSwKICAgICAgICBTdXBlcnR5cGUsCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVHlwZVBhcmFtZXRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwva2VybmVsLmRhcnQnIGFzIGtlcm5lbCBzaG93IENvbWJpbmF0b3I7CgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCcgc2hvdyBGaWxlU3lzdGVtRW50aXR5OwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2luY3JlbWVudGFsX2tlcm5lbF9nZW5lcmF0b3IuZGFydCcKICAgIHNob3cgSW5jcmVtZW50YWxLZXJuZWxHZW5lcmF0b3IsIGlzTGVnYWxJZGVudGlmaWVyOwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL21lbW9yeV9maWxlX3N5c3RlbS5kYXJ0JyBzaG93IE1lbW9yeUZpbGVTeXN0ZW07CgppbXBvcnQgJ2J1aWxkZXIvYnVpbGRlci5kYXJ0JyBzaG93IExpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICdidWlsZGVyX2dyYXBoLmRhcnQnIHNob3cgQnVpbGRlckdyYXBoOwoKaW1wb3J0ICdjb21iaW5hdG9yLmRhcnQnIHNob3cgQ29tYmluYXRvcjsKCmltcG9ydCAnY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmltcG9ydCAnZGlsbC9kaWxsX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnZGlsbC9kaWxsX3RhcmdldC5kYXJ0JyBzaG93IERpbGxUYXJnZXQ7CgppbXBvcnQgJ3V0aWwvZXJyb3JfcmVwb3J0ZXJfZmlsZV9jb3BpZXIuZGFydCcgc2hvdyBzYXZlQXNHemlwOwoKaW1wb3J0ICdmYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24sCiAgICAgICAgdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkLAogICAgICAgIHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZE5vRHVtcCwKICAgICAgICB0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtLAogICAgICAgIHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW1Ob0R1bXA7CgppbXBvcnQgJ2h5YnJpZF9maWxlX3N5c3RlbS5kYXJ0JyBzaG93IEh5YnJpZEZpbGVTeXN0ZW07CgppbXBvcnQgJ2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5QnVpbGRlcjsKCmltcG9ydCAna2VybmVsL2tlcm5lbF9zaGFkb3dfYXN0LmRhcnQnIHNob3cgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50OwoKaW1wb3J0ICdrZXJuZWwva2VybmVsX3RhcmdldC5kYXJ0JyBzaG93IEtlcm5lbFRhcmdldDsKCmltcG9ydCAnbGlicmFyeV9ncmFwaC5kYXJ0JyBzaG93IExpYnJhcnlHcmFwaDsKCmltcG9ydCAnbWVzc2FnZXMuZGFydCcgc2hvdyBNZXNzYWdlOwoKaW1wb3J0ICdzb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICd0aWNrZXIuZGFydCcgc2hvdyBUaWNrZXI7CgppbXBvcnQgJ3VyaV90cmFuc2xhdG9yLmRhcnQnIHNob3cgVXJpVHJhbnNsYXRvcjsKCmNsYXNzIEluY3JlbWVudGFsQ29tcGlsZXIgaW1wbGVtZW50cyBJbmNyZW1lbnRhbEtlcm5lbEdlbmVyYXRvciB7CiAgZmluYWwgQ29tcGlsZXJDb250ZXh0IGNvbnRleHQ7CgogIGZpbmFsIFRpY2tlciB0aWNrZXI7CgogIGZpbmFsIGJvb2wgb3V0bGluZU9ubHk7CiAgYm9vbCB0cmFja05lZWRlZERpbGxMaWJyYXJpZXMgPSBmYWxzZTsKICBTZXQ8TGlicmFyeT4gbmVlZGVkRGlsbExpYnJhcmllczsKCiAgU2V0PFVyaT4gaW52YWxpZGF0ZWRVcmlzID0gbmV3IFNldDxVcmk+KCk7CgogIERpbGxUYXJnZXQgZGlsbExvYWRlZERhdGE7CiAgTGlzdDxMaWJyYXJ5QnVpbGRlcj4gcGxhdGZvcm1CdWlsZGVyczsKICBNYXA8VXJpLCBMaWJyYXJ5QnVpbGRlcj4gdXNlckJ1aWxkZXJzOwogIGZpbmFsIFVyaSBpbml0aWFsaXplRnJvbURpbGxVcmk7CiAgZmluYWwgQ29tcG9uZW50IGNvbXBvbmVudFRvSW5pdGlhbGl6ZUZyb207CiAgYm9vbCBpbml0aWFsaXplZEZyb21EaWxsID0gZmFsc2U7CiAgVXJpIHByZXZpb3VzUGFja2FnZXNVcmk7CiAgTWFwPFN0cmluZywgVXJpPiBwcmV2aW91c1BhY2thZ2VzTWFwOwogIE1hcDxTdHJpbmcsIFVyaT4gY3VycmVudFBhY2thZ2VzTWFwOwogIGJvb2wgaGFzVG9DaGVja1BhY2thZ2VVcmlzID0gZmFsc2U7CiAgTWFwPFVyaSwgTGlzdDxEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uPj4gcmVtYWluaW5nQ29tcG9uZW50UHJvYmxlbXMgPQogICAgICBuZXcgTWFwPFVyaSwgTGlzdDxEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uPj4oKTsKICBMaXN0PENvbXBvbmVudD4gbW9kdWxlc1RvTG9hZDsKCiAgc3RhdGljIGZpbmFsIFVyaSBkZWJ1Z0V4cHJVcmkgPQogICAgICBuZXcgVXJpKHNjaGVtZTogIm9yZy1kYXJ0bGFuZy1kZWJ1ZyIsIHBhdGg6ICJzeW50aGV0aWNfZGVidWdfZXhwcmVzc2lvbiIpOwoKICBLZXJuZWxUYXJnZXQgdXNlckNvZGU7CgogIEluY3JlbWVudGFsQ29tcGlsZXIuZnJvbUNvbXBvbmVudCgKICAgICAgdGhpcy5jb250ZXh0LCBDb21wb25lbnQgdGhpcy5jb21wb25lbnRUb0luaXRpYWxpemVGcm9tLAogICAgICBbYm9vbCBvdXRsaW5lT25seV0pCiAgICAgIDogdGlja2VyID0gY29udGV4dC5vcHRpb25zLnRpY2tlciwKICAgICAgICBpbml0aWFsaXplRnJvbURpbGxVcmkgPSBudWxsLAogICAgICAgIHRoaXMub3V0bGluZU9ubHkgPSBvdXRsaW5lT25seSA/PyBmYWxzZTsKCiAgSW5jcmVtZW50YWxDb21waWxlcih0aGlzLmNvbnRleHQsCiAgICAgIFt0aGlzLmluaXRpYWxpemVGcm9tRGlsbFVyaSwgYm9vbCBvdXRsaW5lT25seV0pCiAgICAgIDogdGlja2VyID0gY29udGV4dC5vcHRpb25zLnRpY2tlciwKICAgICAgICBjb21wb25lbnRUb0luaXRpYWxpemVGcm9tID0gbnVsbCwKICAgICAgICB0aGlzLm91dGxpbmVPbmx5ID0gb3V0bGluZU9ubHkgPz8gZmFsc2U7CgogIEBvdmVycmlkZQogIEZ1dHVyZTxDb21wb25lbnQ+IGNvbXB1dGVEZWx0YSgKICAgICAge0xpc3Q8VXJpPiBlbnRyeVBvaW50cywgYm9vbCBmdWxsQ29tcG9uZW50OiBmYWxzZX0pIGFzeW5jIHsKICAgIHRpY2tlci5yZXNldCgpOwogICAgZW50cnlQb2ludHMgPz89IGNvbnRleHQub3B0aW9ucy5pbnB1dHM7CiAgICByZXR1cm4gY29udGV4dC5ydW5JbkNvbnRleHQ8Q29tcG9uZW50PigoQ29tcGlsZXJDb250ZXh0IGMpIGFzeW5jIHsKICAgICAgSW5jcmVtZW50YWxDb21waWxlckRhdGEgZGF0YSA9IG5ldyBJbmNyZW1lbnRhbENvbXBpbGVyRGF0YSgpOwoKICAgICAgYm9vbCBieXBhc3NDYWNoZSA9IGZhbHNlOwogICAgICBpZiAoIWlkZW50aWNhbChwcmV2aW91c1BhY2thZ2VzVXJpLCBjLm9wdGlvbnMucGFja2FnZXNVcmlSYXcpKSB7CiAgICAgICAgcHJldmlvdXNQYWNrYWdlc1VyaSA9IGMub3B0aW9ucy5wYWNrYWdlc1VyaVJhdzsKICAgICAgICBieXBhc3NDYWNoZSA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5pbnZhbGlkYXRlZFVyaXMuY29udGFpbnMoYy5vcHRpb25zLnBhY2thZ2VzVXJpKSkgewogICAgICAgIGJ5cGFzc0NhY2hlID0gdHJ1ZTsKICAgICAgfQogICAgICBoYXNUb0NoZWNrUGFja2FnZVVyaXMgPSBoYXNUb0NoZWNrUGFja2FnZVVyaXMgfHwgYnlwYXNzQ2FjaGU7CiAgICAgIFVyaVRyYW5zbGF0b3IgdXJpVHJhbnNsYXRvciA9CiAgICAgICAgICBhd2FpdCBjLm9wdGlvbnMuZ2V0VXJpVHJhbnNsYXRvcihieXBhc3NDYWNoZTogYnlwYXNzQ2FjaGUpOwogICAgICBwcmV2aW91c1BhY2thZ2VzTWFwID0gY3VycmVudFBhY2thZ2VzTWFwOwogICAgICBjdXJyZW50UGFja2FnZXNNYXAgPSB1cmlUcmFuc2xhdG9yLnBhY2thZ2VzLmFzTWFwKCk7CiAgICAgIHRpY2tlci5sb2dNcygiUmVhZCBwYWNrYWdlcyBmaWxlIik7CgogICAgICBpZiAoZGlsbExvYWRlZERhdGEgPT0gbnVsbCkgewogICAgICAgIGludCBieXRlc0xlbmd0aCA9IDA7CiAgICAgICAgaWYgKGNvbXBvbmVudFRvSW5pdGlhbGl6ZUZyb20gIT0gbnVsbCkgewogICAgICAgICAgLy8gSWYgaW5pdGlhbGl6aW5nIGZyb20gYSBjb21wb25lbnQgaXQgaGFzIHRvIGluY2x1ZGUgdGhlIHNkaywKICAgICAgICAgIC8vIHNvIHdlIGV4cGxpY2l0bHkgZG9uJ3QgbG9hZCBpdCBoZXJlLgogICAgICAgICAgaW5pdGlhbGl6ZUZyb21Db21wb25lbnQodXJpVHJhbnNsYXRvciwgYywgZGF0YSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIExpc3Q8aW50PiBzdW1tYXJ5Qnl0ZXMgPSBhd2FpdCBjLm9wdGlvbnMubG9hZFNka1N1bW1hcnlCeXRlcygpOwogICAgICAgICAgYnl0ZXNMZW5ndGggPSBwcmVwYXJlU3VtbWFyeShzdW1tYXJ5Qnl0ZXMsIHVyaVRyYW5zbGF0b3IsIGMsIGRhdGEpOwogICAgICAgICAgaWYgKGluaXRpYWxpemVGcm9tRGlsbFVyaSAhPSBudWxsKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgYnl0ZXNMZW5ndGggKz0gYXdhaXQgaW5pdGlhbGl6ZUZyb21EaWxsKHVyaVRyYW5zbGF0b3IsIGMsIGRhdGEpOwogICAgICAgICAgICB9IGNhdGNoIChlLCBzdCkgewogICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGhhdmUgbG9hZGVkIHggb3V0IG9mIHkgbGlicmFyaWVzIGludG8gdGhlIGNvbXBvbmVudC4KICAgICAgICAgICAgICAvLyBUbyBhdm9pZCBhbnkgdW5mb3Jlc2VlbiBwcm9ibGVtcyBzdGFydCBvdmVyLgogICAgICAgICAgICAgIGJ5dGVzTGVuZ3RoID0KICAgICAgICAgICAgICAgICAgcHJlcGFyZVN1bW1hcnkoc3VtbWFyeUJ5dGVzLCB1cmlUcmFuc2xhdG9yLCBjLCBkYXRhKTsKCiAgICAgICAgICAgICAgaWYgKGUgaXMgSW52YWxpZEtlcm5lbFZlcnNpb25FcnJvciB8fAogICAgICAgICAgICAgICAgICBlIGlzIFBhY2thZ2VDaGFuZ2VkRXJyb3IgfHwKICAgICAgICAgICAgICAgICAgZSBpcyBDYW5vbmljYWxOYW1lU2RrRXJyb3IpIHsKICAgICAgICAgICAgICAgIC8vIERvbid0IHJlcG9ydCBhbnkgd2FybmluZy4KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgVXJpIGd6SW5pdGlhbGl6ZWRGcm9tOwogICAgICAgICAgICAgICAgaWYgKGMub3B0aW9ucy53cml0ZUZpbGVPbkNyYXNoUmVwb3J0KSB7CiAgICAgICAgICAgICAgICAgIGd6SW5pdGlhbGl6ZWRGcm9tID0gc2F2ZUFzR3ppcCgKICAgICAgICAgICAgICAgICAgICAgIGRhdGEuaW5pdGlhbGl6YXRpb25CeXRlcywgImluaXRpYWxpemVfZnJvbS5kaWxsIik7CiAgICAgICAgICAgICAgICAgIHJlY29yZFRlbXBvcmFyeUZpbGVGb3JUZXN0aW5nKGd6SW5pdGlhbGl6ZWRGcm9tKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChlIGlzIENhbm9uaWNhbE5hbWVFcnJvcikgewogICAgICAgICAgICAgICAgICBNZXNzYWdlIG1lc3NhZ2UgPSBnekluaXRpYWxpemVkRnJvbSAhPSBudWxsCiAgICAgICAgICAgICAgICAgICAgICA/IHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZAogICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGluaXRpYWxpemVGcm9tRGlsbFVyaS50b1N0cmluZygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnekluaXRpYWxpemVkRnJvbSkKICAgICAgICAgICAgICAgICAgICAgIDogdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkTm9EdW1wCiAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoaW5pdGlhbGl6ZUZyb21EaWxsVXJpLnRvU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICBkaWxsTG9hZGVkRGF0YS5sb2FkZXIKICAgICAgICAgICAgICAgICAgICAgIC5hZGRQcm9ibGVtKG1lc3NhZ2UsIFRyZWVOb2RlLm5vT2Zmc2V0LCAxLCBudWxsKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIC8vIFVua25vd24gZXJyb3I6IFJlcG9ydCBwcm9ibGVtIGFzIHN1Y2guCiAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IGd6SW5pdGlhbGl6ZWRGcm9tICE9IG51bGwKICAgICAgICAgICAgICAgICAgICAgID8gdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxpemVGcm9tRGlsbFVyaS50b1N0cmluZygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICIkZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiRzdCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3pJbml0aWFsaXplZEZyb20pCiAgICAgICAgICAgICAgICAgICAgICA6IHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW1Ob0R1bXAKICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZUZyb21EaWxsVXJpLnRvU3RyaW5nKCksICIkZSIsICIkc3QiKTsKICAgICAgICAgICAgICAgICAgZGlsbExvYWRlZERhdGEubG9hZGVyCiAgICAgICAgICAgICAgICAgICAgICAuYWRkUHJvYmxlbShtZXNzYWdlLCBUcmVlTm9kZS5ub09mZnNldCwgMSwgbnVsbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFwcGVuZExpYnJhcmllcyhkYXRhLCBieXRlc0xlbmd0aCk7CgogICAgICAgIGF3YWl0IGRpbGxMb2FkZWREYXRhLmJ1aWxkT3V0bGluZXMoKTsKICAgICAgICB1c2VyQnVpbGRlcnMgPSA8VXJpLCBMaWJyYXJ5QnVpbGRlcj57fTsKICAgICAgICBwbGF0Zm9ybUJ1aWxkZXJzID0gPExpYnJhcnlCdWlsZGVyPltdOwogICAgICAgIGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy5mb3JFYWNoKCh1cmksIGJ1aWxkZXIpIHsKICAgICAgICAgIGlmIChidWlsZGVyLnVyaS5zY2hlbWUgPT0gImRhcnQiKSB7CiAgICAgICAgICAgIHBsYXRmb3JtQnVpbGRlcnMuYWRkKGJ1aWxkZXIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdXNlckJ1aWxkZXJzW3VyaV0gPSBidWlsZGVyOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICh1c2VyQnVpbGRlcnMuaXNFbXB0eSkgdXNlckJ1aWxkZXJzID0gbnVsbDsKICAgICAgfQogICAgICBkYXRhLmluaXRpYWxpemF0aW9uQnl0ZXMgPSBudWxsOwoKICAgICAgU2V0PFVyaT4gaW52YWxpZGF0ZWRVcmlzID0gdGhpcy5pbnZhbGlkYXRlZFVyaXMudG9TZXQoKTsKCiAgICAgIGludmFsaWRhdGVOb3RLZXB0VXNlckJ1aWxkZXJzKGludmFsaWRhdGVkVXJpcyk7CgogICAgICBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHkgPSB1c2VyQ29kZT8ubG9hZGVyPy5oaWVyYXJjaHk7CiAgICAgIFNldDxMaWJyYXJ5QnVpbGRlcj4gbm90UmV1c2VkTGlicmFyaWVzID0gbmV3IFNldDxMaWJyYXJ5QnVpbGRlcj4oKTsKICAgICAgTGlzdDxMaWJyYXJ5QnVpbGRlcj4gcmV1c2VkTGlicmFyaWVzID0gY29tcHV0ZVJldXNlZExpYnJhcmllcygKICAgICAgICAgIGludmFsaWRhdGVkVXJpcywgdXJpVHJhbnNsYXRvciwKICAgICAgICAgIG5vdFJldXNlZDogbm90UmV1c2VkTGlicmFyaWVzKTsKCiAgICAgIGJvb2wgcmVtb3ZlZERpbGxCdWlsZGVycyA9IGZhbHNlOwogICAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgaW4gbm90UmV1c2VkTGlicmFyaWVzKSB7CiAgICAgICAgQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQudXJpVG9Tb3VyY2UucmVtb3ZlKGJ1aWxkZXIuZmlsZVVyaSk7CgogICAgICAgIExpYnJhcnlCdWlsZGVyIGRpbGxCdWlsZGVyID0KICAgICAgICAgICAgZGlsbExvYWRlZERhdGEubG9hZGVyLmJ1aWxkZXJzLnJlbW92ZShidWlsZGVyLnVyaSk7CiAgICAgICAgaWYgKGRpbGxCdWlsZGVyICE9IG51bGwpIHsKICAgICAgICAgIHJlbW92ZWREaWxsQnVpbGRlcnMgPSB0cnVlOwogICAgICAgICAgdXNlckJ1aWxkZXJzPy5yZW1vdmUoYnVpbGRlci51cmkpOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVtb3ZlIGNvbXBvbmVudCBwcm9ibGVtcyBmb3IgbGlicmFyaWVzIHdlIGRvbid0IHJldXNlLgogICAgICAgIGlmIChyZW1haW5pbmdDb21wb25lbnRQcm9ibGVtcy5pc05vdEVtcHR5KSB7CiAgICAgICAgICBMaWJyYXJ5IGxpYiA9IGJ1aWxkZXIudGFyZ2V0OwogICAgICAgICAgcmVtb3ZlTGlicmFyeUZyb21SZW1haW5pbmdDb21wb25lbnRQcm9ibGVtcyhsaWIsIHVyaVRyYW5zbGF0b3IpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKHJlbW92ZWREaWxsQnVpbGRlcnMpIHsKICAgICAgICBkaWxsTG9hZGVkRGF0YS5sb2FkZXIubGlicmFyaWVzLmNsZWFyKCk7CiAgICAgICAgZm9yIChMaWJyYXJ5QnVpbGRlciBidWlsZGVyIGluIGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy52YWx1ZXMpIHsKICAgICAgICAgIGRpbGxMb2FkZWREYXRhLmxvYWRlci5saWJyYXJpZXMuYWRkKGJ1aWxkZXIudGFyZ2V0KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChoYXNUb0NoZWNrUGFja2FnZVVyaXMpIHsKICAgICAgICAvLyBUaGUgcGFja2FnZSBmaWxlIHdhcyBjaGFuZ2VkLgogICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgZGlsbCBsb2FkZXIgaXMgb24gdGhlIHNhbWUgcGFnZS4KICAgICAgICBEaWxsVGFyZ2V0IG9sZERpbGxMb2FkZWREYXRhID0gZGlsbExvYWRlZERhdGE7CiAgICAgICAgZGlsbExvYWRlZERhdGEgPQogICAgICAgICAgICBuZXcgRGlsbFRhcmdldCh0aWNrZXIsIHVyaVRyYW5zbGF0b3IsIGMub3B0aW9ucy50YXJnZXQpOwogICAgICAgIGZvciAoRGlsbExpYnJhcnlCdWlsZGVyIGxpYnJhcnkKICAgICAgICAgICAgaW4gb2xkRGlsbExvYWRlZERhdGEubG9hZGVyLmJ1aWxkZXJzLnZhbHVlcykgewogICAgICAgICAgbGlicmFyeS5sb2FkZXIgPSBkaWxsTG9hZGVkRGF0YS5sb2FkZXI7CiAgICAgICAgICBkaWxsTG9hZGVkRGF0YS5sb2FkZXIuYnVpbGRlcnNbbGlicmFyeS51cmldID0gbGlicmFyeTsKICAgICAgICAgIGlmIChsaWJyYXJ5LnVyaS5zY2hlbWUgPT0gImRhcnQiICYmIGxpYnJhcnkudXJpLnBhdGggPT0gImNvcmUiKSB7CiAgICAgICAgICAgIGRpbGxMb2FkZWREYXRhLmxvYWRlci5jb3JlTGlicmFyeSA9IGxpYnJhcnk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRpbGxMb2FkZWREYXRhLmxvYWRlci5maXJzdCA9IG9sZERpbGxMb2FkZWREYXRhLmxvYWRlci5maXJzdDsKICAgICAgICBkaWxsTG9hZGVkRGF0YS5sb2FkZXIubGlicmFyaWVzCiAgICAgICAgICAgIC5hZGRBbGwob2xkRGlsbExvYWRlZERhdGEubG9hZGVyLmxpYnJhcmllcyk7CiAgICAgIH0KCiAgICAgIGlmIChoaWVyYXJjaHkgIT0gbnVsbCkgewogICAgICAgIExpc3Q8TGlicmFyeT4gcmVtb3ZlZExpYnJhcmllcyA9IG5ldyBMaXN0PExpYnJhcnk+KCk7CiAgICAgICAgZm9yIChMaWJyYXJ5QnVpbGRlciBidWlsZGVyIGluIG5vdFJldXNlZExpYnJhcmllcykgewogICAgICAgICAgTGlicmFyeSBsaWIgPSBidWlsZGVyLnRhcmdldDsKICAgICAgICAgIHJlbW92ZWRMaWJyYXJpZXMuYWRkKGxpYik7CiAgICAgICAgfQogICAgICAgIGhpZXJhcmNoeS5hcHBseVRyZWVDaGFuZ2VzKHJlbW92ZWRMaWJyYXJpZXMsIGNvbnN0IFtdKTsKICAgICAgfQogICAgICBub3RSZXVzZWRMaWJyYXJpZXMgPSBudWxsOwoKICAgICAgaWYgKHVzZXJDb2RlICE9IG51bGwpIHsKICAgICAgICB0aWNrZXIubG9nTXMoIkRlY2lkZWQgdG8gcmV1c2UgJHtyZXVzZWRMaWJyYXJpZXMubGVuZ3RofSIKICAgICAgICAgICAgIiBvZiAke3VzZXJDb2RlLmxvYWRlci5idWlsZGVycy5sZW5ndGh9IGxpYnJhcmllcyIpOwogICAgICB9CgogICAgICBhd2FpdCBsb2FkRW5zdXJlTG9hZGVkQ29tcG9uZW50cyhyZXVzZWRMaWJyYXJpZXMpOwoKICAgICAgS2VybmVsVGFyZ2V0IHVzZXJDb2RlT2xkID0gdXNlckNvZGU7CiAgICAgIHVzZXJDb2RlID0gbmV3IEtlcm5lbFRhcmdldCgKICAgICAgICAgIG5ldyBIeWJyaWRGaWxlU3lzdGVtKAogICAgICAgICAgICAgIG5ldyBNZW1vcnlGaWxlU3lzdGVtKAogICAgICAgICAgICAgICAgICBuZXcgVXJpKHNjaGVtZTogIm9yZy1kYXJ0bGFuZy1kZWJ1ZyIsIHBhdGg6ICIvIikpLAogICAgICAgICAgICAgIGMuZmlsZVN5c3RlbSksCiAgICAgICAgICBmYWxzZSwKICAgICAgICAgIGRpbGxMb2FkZWREYXRhLAogICAgICAgICAgdXJpVHJhbnNsYXRvcik7CiAgICAgIHVzZXJDb2RlLmxvYWRlci5oaWVyYXJjaHkgPSBoaWVyYXJjaHk7CgogICAgICBpZiAodHJhY2tOZWVkZWREaWxsTGlicmFyaWVzKSB7CiAgICAgICAgLy8gUmVzZXQgZGlsbCBsb2FkZXJzIGFuZCBrZXJuZWwgY2xhc3MgaGllcmFyY2h5LgogICAgICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgYnVpbGRlciBpbiBkaWxsTG9hZGVkRGF0YS5sb2FkZXIuYnVpbGRlcnMudmFsdWVzKSB7CiAgICAgICAgICBpZiAoYnVpbGRlciBpcyBEaWxsTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgICAgICAgYnVpbGRlci5pc0J1aWx0QW5kTWFya2VkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaGllcmFyY2h5IGlzIENsb3NlZFdvcmxkQ2xhc3NIaWVyYXJjaHkpIHsKICAgICAgICAgIGhpZXJhcmNoeS5yZXNldFVzZWQoKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSBpbiByZXVzZWRMaWJyYXJpZXMpIHsKICAgICAgICB1c2VyQ29kZS5sb2FkZXIuYnVpbGRlcnNbbGlicmFyeS51cmldID0gbGlicmFyeTsKICAgICAgICBpZiAobGlicmFyeS51cmkuc2NoZW1lID09ICJkYXJ0IiAmJiBsaWJyYXJ5LnVyaS5wYXRoID09ICJjb3JlIikgewogICAgICAgICAgdXNlckNvZGUubG9hZGVyLmNvcmVMaWJyYXJ5ID0gbGlicmFyeTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGVudHJ5UG9pbnRzID0gdXNlckNvZGUuc2V0RW50cnlQb2ludHMoZW50cnlQb2ludHMpOwogICAgICBpZiAodXNlckNvZGUubG9hZGVyLmZpcnN0ID09IG51bGwgJiYKICAgICAgICAgIHVzZXJDb2RlLmxvYWRlci5idWlsZGVyc1tlbnRyeVBvaW50cy5maXJzdF0gIT0gbnVsbCkgewogICAgICAgIHVzZXJDb2RlLmxvYWRlci5maXJzdCA9IHVzZXJDb2RlLmxvYWRlci5idWlsZGVyc1tlbnRyeVBvaW50cy5maXJzdF07CiAgICAgIH0KICAgICAgQ29tcG9uZW50IGNvbXBvbmVudFdpdGhEaWxsID0gYXdhaXQgdXNlckNvZGUuYnVpbGRPdXRsaW5lcygpOwoKICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGZ1bGwgY29tcG9uZW50LiBJdCBpcyB0aGUgY29tcG9uZW50IGNvbnNpc3Rpbmcgb2YgYWxsCiAgICAgIC8vIG5ld2x5IGNvbXBpbGVkIGxpYnJhcmllcyBhbmQgYWxsIGxpYnJhcmllcyBsb2FkZWQgZnJvbSAuZGlsbCBmaWxlcyBvcgogICAgICAvLyBkaXJlY3RseSBmcm9tIGNvbXBvbmVudHMuCiAgICAgIC8vIFRlY2huaWNhbGx5LCBpdCdzIHRoZSBjb21iaW5hdGlvbiBvZiB1c2VyQ29kZS5sb2FkZXIubGlicmFyaWVzIGFuZAogICAgICAvLyBkaWxsTG9hZGVkRGF0YS5sb2FkZXIubGlicmFyaWVzLgogICAgICBpZiAoIW91dGxpbmVPbmx5KSB7CiAgICAgICAgY29tcG9uZW50V2l0aERpbGwgPQogICAgICAgICAgICBhd2FpdCB1c2VyQ29kZS5idWlsZENvbXBvbmVudCh2ZXJpZnk6IGMub3B0aW9ucy52ZXJpZnkpOwogICAgICB9CiAgICAgIGhpZXJhcmNoeSA/Pz0gdXNlckNvZGUubG9hZGVyLmhpZXJhcmNoeTsKCiAgICAgIHJlY29yZE5vbkZ1bGxDb21wb25lbnRGb3JUZXN0aW5nKGNvbXBvbmVudFdpdGhEaWxsKTsKICAgICAgaWYgKHRyYWNrTmVlZGVkRGlsbExpYnJhcmllcykgewogICAgICAgIC8vIFdoaWNoIGRpbGwgYnVpbGRlcnMgd2VyZSBidWlsdD8KICAgICAgICBuZWVkZWREaWxsTGlicmFyaWVzID0gbmV3IFNldDxMaWJyYXJ5PigpOwogICAgICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgYnVpbGRlciBpbiBkaWxsTG9hZGVkRGF0YS5sb2FkZXIuYnVpbGRlcnMudmFsdWVzKSB7CiAgICAgICAgICBpZiAoYnVpbGRlciBpcyBEaWxsTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgICAgICAgaWYgKGJ1aWxkZXIuaXNCdWlsdEFuZE1hcmtlZCkgewogICAgICAgICAgICAgIG5lZWRlZERpbGxMaWJyYXJpZXMuYWRkKGJ1aWxkZXIubGlicmFyeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHVwZGF0ZU5lZWRlZERpbGxMaWJyYXJlc1dpdGhIaWVyYXJjaHkoCiAgICAgICAgICAgIGhpZXJhcmNoeSwgdXNlckNvZGUubG9hZGVyLmJ1aWxkZXJIaWVyYXJjaHkpOwogICAgICB9CgogICAgICBpZiAoY29tcG9uZW50V2l0aERpbGwgIT0gbnVsbCkgewogICAgICAgIHRoaXMuaW52YWxpZGF0ZWRVcmlzLmNsZWFyKCk7CiAgICAgICAgaGFzVG9DaGVja1BhY2thZ2VVcmlzID0gZmFsc2U7CiAgICAgICAgdXNlckNvZGVPbGQ/LmxvYWRlcj8ucmVsZWFzZUFuY2lsbGFyeVJlc291cmNlcygpOwogICAgICAgIHVzZXJDb2RlT2xkPy5sb2FkZXI/LmJ1aWxkZXJzPy5jbGVhcigpOwogICAgICAgIHVzZXJDb2RlT2xkID0gbnVsbDsKICAgICAgfQoKICAgICAgTGlzdDxMaWJyYXJ5PiBjb21waWxlZExpYnJhcmllcyA9CiAgICAgICAgICBuZXcgTGlzdDxMaWJyYXJ5Pi5mcm9tKHVzZXJDb2RlLmxvYWRlci5saWJyYXJpZXMpOwogICAgICBQcm9jZWR1cmUgbWFpbk1ldGhvZCA9IGNvbXBvbmVudFdpdGhEaWxsID09IG51bGwKICAgICAgICAgID8gZGF0YS51c2VyTG9hZGVkVXJpTWFpbgogICAgICAgICAgOiBjb21wb25lbnRXaXRoRGlsbC5tYWluTWV0aG9kOwoKICAgICAgTGlzdDxMaWJyYXJ5PiBvdXRwdXRMaWJyYXJpZXM7CiAgICAgIFNldDxMaWJyYXJ5PiBhbGxMaWJyYXJpZXM7CiAgICAgIE1hcDxVcmksIFNvdXJjZT4gdXJpVG9Tb3VyY2UgPSBjb21wb25lbnRXaXRoRGlsbD8udXJpVG9Tb3VyY2U7CiAgICAgIGlmIChkYXRhLmNvbXBvbmVudCAhPSBudWxsIHx8IGZ1bGxDb21wb25lbnQpIHsKICAgICAgICBvdXRwdXRMaWJyYXJpZXMgPSBjb21wdXRlVHJhbnNpdGl2ZUNsb3N1cmUoCiAgICAgICAgICAgIGNvbXBpbGVkTGlicmFyaWVzLAogICAgICAgICAgICBlbnRyeVBvaW50cywKICAgICAgICAgICAgcmV1c2VkTGlicmFyaWVzLAogICAgICAgICAgICBoaWVyYXJjaHksCiAgICAgICAgICAgIHVyaVRyYW5zbGF0b3IsCiAgICAgICAgICAgIHVyaVRvU291cmNlKTsKICAgICAgICBhbGxMaWJyYXJpZXMgPSBvdXRwdXRMaWJyYXJpZXMudG9TZXQoKTsKICAgICAgICBpZiAoIWMub3B0aW9ucy5vbWl0UGxhdGZvcm0pIHsKICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGxhdGZvcm1CdWlsZGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBMaWJyYXJ5IGxpYiA9IHBsYXRmb3JtQnVpbGRlcnNbaV0udGFyZ2V0OwogICAgICAgICAgICBvdXRwdXRMaWJyYXJpZXMuYWRkKGxpYik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIG91dHB1dExpYnJhcmllcyA9IG5ldyBMaXN0PExpYnJhcnk+KCk7CiAgICAgICAgYWxsTGlicmFyaWVzID0gY29tcHV0ZVRyYW5zaXRpdmVDbG9zdXJlKAogICAgICAgICAgICAgICAgY29tcGlsZWRMaWJyYXJpZXMsCiAgICAgICAgICAgICAgICBlbnRyeVBvaW50cywKICAgICAgICAgICAgICAgIHJldXNlZExpYnJhcmllcywKICAgICAgICAgICAgICAgIGhpZXJhcmNoeSwKICAgICAgICAgICAgICAgIHVyaVRyYW5zbGF0b3IsCiAgICAgICAgICAgICAgICB1cmlUb1NvdXJjZSwKICAgICAgICAgICAgICAgIG91dHB1dExpYnJhcmllcykKICAgICAgICAgICAgLnRvU2V0KCk7CiAgICAgIH0KCiAgICAgIExpc3Q8U3RyaW5nPiBwcm9ibGVtc0FzSnNvbiA9IHJlaXNzdWVDb21wb25lbnRQcm9ibGVtcyhjb21wb25lbnRXaXRoRGlsbCk7CiAgICAgIHJlaXNzdWVMaWJyYXJ5UHJvYmxlbXMoYWxsTGlicmFyaWVzLCBjb21waWxlZExpYnJhcmllcyk7CgogICAgICBpZiAoY29tcG9uZW50V2l0aERpbGwgPT0gbnVsbCkgewogICAgICAgIHVzZXJDb2RlLmxvYWRlci5idWlsZGVycy5jbGVhcigpOwogICAgICAgIHVzZXJDb2RlID0gdXNlckNvZGVPbGQ7CiAgICAgIH0KCiAgICAgIC8vIFRoaXMgaXMgdGhlIGluY3JlbWVudGFsIGNvbXBvbmVudC4KICAgICAgcmV0dXJuIGNvbnRleHQub3B0aW9ucy50YXJnZXQuY29uZmlndXJlQ29tcG9uZW50KAogICAgICAgICAgbmV3IENvbXBvbmVudChsaWJyYXJpZXM6IG91dHB1dExpYnJhcmllcywgdXJpVG9Tb3VyY2U6IHVyaVRvU291cmNlKSkKICAgICAgICAuLm1haW5NZXRob2QgPSBtYWluTWV0aG9kCiAgICAgICAgLi5wcm9ibGVtc0FzSnNvbiA9IHByb2JsZW1zQXNKc29uOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb3JlVHlwZXMgZ2V0Q29yZVR5cGVzKCkgPT4gdXNlckNvZGU/LmxvYWRlcj8uY29yZVR5cGVzOwoKICBAb3ZlcnJpZGUKICBDbGFzc0hpZXJhcmNoeSBnZXRDbGFzc0hpZXJhcmNoeSgpID0+IHVzZXJDb2RlPy5sb2FkZXI/LmhpZXJhcmNoeTsKCiAgLy8vIEFsbG93cyBmb3IgdXBkYXRpbmcgdGhlIGxpc3Qgb2YgbmVlZGVkIGxpYnJhcmllcy4KICAvLy8KICAvLy8gVXNlZnVsIGlmIGEgY2xhc3MgaGllcmFyY2h5IGhhcyBiZWVuIHVzZWQgZXh0ZXJuYWxseS4KICAvLy8gQ3VycmVudGx5IHRoZXJlIGFyZSB0d28gZGlmZmVyZW50IGNsYXNzIGhpZXJhcmNoaWVzIHdoaWNoIGlzIHVuZm9ydHVuYXRlLgogIC8vLyBGb3Igbm93IHRoaXMgbWV0aG9kIGFsbG93cyB0aGUgJ0NsYXNzSGllcmFyY2h5QnVpbGRlcicgdG8gYmUgbnVsbC4KICAvLy8KICAvLy8gVE9ETyhqZW5zaixDRkUgaW4gZ2VuZXJhbCk6IEV2ZW50dWFsbHkgd2Ugc2hvdWxkIGdldCB0byBhIHBvaW50IHdoZXJlIHdlCiAgLy8vIG9ubHkgaGF2ZSBvbmUgY2xhc3MgaGllcmFyY2h5LgogIC8vLyBUT0RPKGplbnNqKTogVGhpcyBjb3VsZCBwcm9iYWJseSBiZSBhIHV0aWxpdHkgbWV0aG9kIHNvbWV3aGVyZSBpbnN0ZWFkCiAgLy8vICh0aG91Z2ggaGFuZGxpbmcgb2YgdGhlIGNhc2Ugd2hlcmUgYWxsIGJldHMgYXJlIG9mZiBzaG91bGQgcHJvYmFibHkgc3RpbGwKICAvLy8gbGl2ZSBsb2NhbGx5KS4KICB2b2lkIHVwZGF0ZU5lZWRlZERpbGxMaWJyYXJlc1dpdGhIaWVyYXJjaHkoCiAgICAgIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSwgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGJ1aWxkZXJIaWVyYXJjaHkpIHsKICAgIGlmIChoaWVyYXJjaHkgaXMgQ2xvc2VkV29ybGRDbGFzc0hpZXJhcmNoeSAmJiAhaGllcmFyY2h5LmFsbEJldHNPZmYpIHsKICAgICAgbmVlZGVkRGlsbExpYnJhcmllcyA/Pz0gbmV3IFNldDxMaWJyYXJ5PigpOwogICAgICBTZXQ8Q2xhc3M+IGNsYXNzZXMgPSBuZXcgU2V0PENsYXNzPigpOwogICAgICBMaXN0PENsYXNzPiB3b3JrbGlzdCA9IG5ldyBMaXN0PENsYXNzPigpOwogICAgICAvLyBHZXQgYWxsIGNsYXNzZXMgdG91Y2hlZCBieSBrZXJuZWwgY2xhc3MgaGllcmFyY2h5LgogICAgICBMaXN0PENsYXNzPiB1c2VkQ2xhc3NlcyA9IGhpZXJhcmNoeS5nZXRVc2VkQ2xhc3NlcygpOwogICAgICB3b3JrbGlzdC5hZGRBbGwodXNlZENsYXNzZXMpOwogICAgICBjbGFzc2VzLmFkZEFsbCh1c2VkQ2xhc3Nlcyk7CgogICAgICAvLyBHZXQgYWxsIGNsYXNzZXMgdG91Y2hlZCBieSBmYXN0YSBjbGFzcyBoaWVyYXJjaHkuCiAgICAgIGlmIChidWlsZGVySGllcmFyY2h5ICE9IG51bGwpIHsKICAgICAgICBmb3IgKENsYXNzIGMgaW4gYnVpbGRlckhpZXJhcmNoeS5ub2Rlcy5rZXlzKSB7CiAgICAgICAgICBpZiAoY2xhc3Nlcy5hZGQoYykpIHdvcmtsaXN0LmFkZChjKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIEdldCBhbGwgc3VwZXJzIGV0Yy4KICAgICAgd2hpbGUgKHdvcmtsaXN0LmlzTm90RW1wdHkpIHsKICAgICAgICBDbGFzcyBjID0gd29ya2xpc3QucmVtb3ZlTGFzdCgpOwogICAgICAgIGZvciAoU3VwZXJ0eXBlIHN1cGVydHlwZSBpbiBjLmltcGxlbWVudGVkVHlwZXMpIHsKICAgICAgICAgIGlmIChjbGFzc2VzLmFkZChzdXBlcnR5cGUuY2xhc3NOb2RlKSkgewogICAgICAgICAgICB3b3JrbGlzdC5hZGQoc3VwZXJ0eXBlLmNsYXNzTm9kZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChjLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgICAgIGlmIChjbGFzc2VzLmFkZChjLm1peGVkSW5UeXBlLmNsYXNzTm9kZSkpIHsKICAgICAgICAgICAgd29ya2xpc3QuYWRkKGMubWl4ZWRJblR5cGUuY2xhc3NOb2RlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGMuc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgICAgIGlmIChjbGFzc2VzLmFkZChjLnN1cGVydHlwZS5jbGFzc05vZGUpKSB7CiAgICAgICAgICAgIHdvcmtsaXN0LmFkZChjLnN1cGVydHlwZS5jbGFzc05vZGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gQWRkIGFueSBsaWJyYXJpZXMgdGhhdCB3YXMgdXNlZCBvciB3YXMgaW4gdGhlICJwYXJlbnQtY2hhaW4iIG9mIGEKICAgICAgLy8gdXNlZCBjbGFzcy4KICAgICAgZm9yIChDbGFzcyBjIGluIGNsYXNzZXMpIHsKICAgICAgICBMaWJyYXJ5IGxpYnJhcnkgPSBjLmVuY2xvc2luZ0xpYnJhcnk7CiAgICAgICAgLy8gT25seSBhZGQgaWYgbG9hZGVkIGZyb20gYSBkaWxsIGZpbGUuCiAgICAgICAgaWYgKGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy5jb250YWluc0tleShsaWJyYXJ5LmltcG9ydFVyaSkpIHsKICAgICAgICAgIG5lZWRlZERpbGxMaWJyYXJpZXMuYWRkKGxpYnJhcnkpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gQ2Fubm90IHRyYWNrIGluIG90aGVyIGtlcm5lbCBjbGFzcyBoaWVyYXJjaGllcyBvcgogICAgICAvLyBpZiBhbGwgYmV0cyBhcmUgb2ZmOiBBZGQgZXZlcnl0aGluZy4KICAgICAgbmVlZGVkRGlsbExpYnJhcmllcyA9IG5ldyBTZXQ8TGlicmFyeT4oKTsKICAgICAgZm9yIChMaWJyYXJ5QnVpbGRlciBidWlsZGVyIGluIGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy52YWx1ZXMpIHsKICAgICAgICBpZiAoYnVpbGRlciBpcyBEaWxsTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgICAgIG5lZWRlZERpbGxMaWJyYXJpZXMuYWRkKGJ1aWxkZXIubGlicmFyeSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIHZvaWQgaW52YWxpZGF0ZU5vdEtlcHRVc2VyQnVpbGRlcnMoU2V0PFVyaT4gaW52YWxpZGF0ZWRVcmlzKSB7CiAgICBpZiAobW9kdWxlc1RvTG9hZCAhPSBudWxsICYmIHVzZXJCdWlsZGVycyAhPSBudWxsKSB7CiAgICAgIFNldDxMaWJyYXJ5PiBsb2FkZWROb3RLZXB0ID0gbmV3IFNldDxMaWJyYXJ5PigpOwogICAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgaW4gdXNlckJ1aWxkZXJzLnZhbHVlcykgewogICAgICAgIGxvYWRlZE5vdEtlcHQuYWRkKGJ1aWxkZXIudGFyZ2V0KTsKICAgICAgfQogICAgICBmb3IgKENvbXBvbmVudCBtb2R1bGUgaW4gbW9kdWxlc1RvTG9hZCkgewogICAgICAgIGxvYWRlZE5vdEtlcHQucmVtb3ZlQWxsKG1vZHVsZS5saWJyYXJpZXMpOwogICAgICB9CiAgICAgIGZvciAoTGlicmFyeSBsaWIgaW4gbG9hZGVkTm90S2VwdCkgewogICAgICAgIGludmFsaWRhdGVkVXJpcy5hZGQobGliLmltcG9ydFVyaSk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBJbnRlcm5hbCBtZXRob2QuCiAgRnV0dXJlPHZvaWQ+IGxvYWRFbnN1cmVMb2FkZWRDb21wb25lbnRzKAogICAgICBMaXN0PExpYnJhcnlCdWlsZGVyPiByZXVzZWRMaWJyYXJpZXMpIGFzeW5jIHsKICAgIGlmIChtb2R1bGVzVG9Mb2FkICE9IG51bGwpIHsKICAgICAgYm9vbCBsb2FkZWRBbnl0aGluZyA9IGZhbHNlOwogICAgICBmb3IgKENvbXBvbmVudCBtb2R1bGUgaW4gbW9kdWxlc1RvTG9hZCkgewogICAgICAgIGJvb2wgdXNlZENvbXBvbmVudCA9IGZhbHNlOwogICAgICAgIGZvciAoTGlicmFyeSBsaWIgaW4gbW9kdWxlLmxpYnJhcmllcykgewogICAgICAgICAgaWYgKCFkaWxsTG9hZGVkRGF0YS5sb2FkZXIuYnVpbGRlcnMuY29udGFpbnNLZXkobGliLmltcG9ydFVyaSkpIHsKICAgICAgICAgICAgZGlsbExvYWRlZERhdGEubG9hZGVyLmxpYnJhcmllcy5hZGQobGliKTsKICAgICAgICAgICAgZGlsbExvYWRlZERhdGEuYWRkTGlicmFyeShsaWIpOwogICAgICAgICAgICByZXVzZWRMaWJyYXJpZXMuYWRkKGRpbGxMb2FkZWREYXRhLmxvYWRlci5yZWFkKGxpYi5pbXBvcnRVcmksIC0xKSk7CiAgICAgICAgICAgIHVzZWRDb21wb25lbnQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodXNlZENvbXBvbmVudCkgewogICAgICAgICAgZGlsbExvYWRlZERhdGEudXJpVG9Tb3VyY2UuYWRkQWxsKG1vZHVsZS51cmlUb1NvdXJjZSk7CiAgICAgICAgICBsb2FkZWRBbnl0aGluZyA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChsb2FkZWRBbnl0aGluZykgewogICAgICAgIGF3YWl0IGRpbGxMb2FkZWREYXRhLmJ1aWxkT3V0bGluZXMoKTsKICAgICAgICB1c2VyQnVpbGRlcnMgPSA8VXJpLCBMaWJyYXJ5QnVpbGRlcj57fTsKICAgICAgICBwbGF0Zm9ybUJ1aWxkZXJzID0gPExpYnJhcnlCdWlsZGVyPltdOwogICAgICAgIGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy5mb3JFYWNoKCh1cmksIGJ1aWxkZXIpIHsKICAgICAgICAgIGlmIChidWlsZGVyLnVyaS5zY2hlbWUgPT0gImRhcnQiKSB7CiAgICAgICAgICAgIHBsYXRmb3JtQnVpbGRlcnMuYWRkKGJ1aWxkZXIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdXNlckJ1aWxkZXJzW3VyaV0gPSBidWlsZGVyOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICh1c2VyQnVpbGRlcnMuaXNFbXB0eSkgewogICAgICAgICAgdXNlckJ1aWxkZXJzID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgICAgbW9kdWxlc1RvTG9hZCA9IG51bGw7CiAgICB9CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIHZvaWQgcmVpc3N1ZUxpYnJhcnlQcm9ibGVtcygKICAgICAgU2V0PExpYnJhcnk+IGFsbExpYnJhcmllcywgTGlzdDxMaWJyYXJ5PiBjb21waWxlZExpYnJhcmllcykgewogICAgLy8gVGhlIG5ld2x5LWNvbXBpbGVkIGxpYnJhcmllcyBoYXZlIGlzc3VlZCBwcm9ibGVtcyBhbHJlYWR5LiBSZS1pc3N1ZQogICAgLy8gcHJvYmxlbXMgZm9yIHRoZSBsaWJyYXJpZXMgdGhhdCB3ZXJlbid0IHJlLWNvbXBpbGVkIChpZ25vcmUgY29tcGlsZQogICAgLy8gZXhwcmVzc2lvbiBwcm9ibGVtcykKICAgIGFsbExpYnJhcmllcy5yZW1vdmVBbGwoY29tcGlsZWRMaWJyYXJpZXMpOwogICAgZm9yIChMaWJyYXJ5IGxpYnJhcnkgaW4gYWxsTGlicmFyaWVzKSB7CiAgICAgIGlmIChsaWJyYXJ5LnByb2JsZW1zQXNKc29uPy5pc05vdEVtcHR5ID09IHRydWUpIHsKICAgICAgICBmb3IgKFN0cmluZyBqc29uU3RyaW5nIGluIGxpYnJhcnkucHJvYmxlbXNBc0pzb24pIHsKICAgICAgICAgIERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24gbWVzc2FnZSA9CiAgICAgICAgICAgICAgbmV3IERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24uZnJvbUpzb24oanNvblN0cmluZyk7CiAgICAgICAgICBpZiAobWVzc2FnZS51cmkgPT0gZGVidWdFeHByVXJpKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgY29udGV4dC5vcHRpb25zLnJlcG9ydERpYWdub3N0aWNNZXNzYWdlKG1lc3NhZ2UpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICAvLy8gUmUtaXNzdWUgcHJvYmxlbXMgb24gdGhlIGNvbXBvbmVudCBhbmQgcmV0dXJuIHRoZSBmaWx0ZXJlZCBsaXN0LgogIExpc3Q8U3RyaW5nPiByZWlzc3VlQ29tcG9uZW50UHJvYmxlbXMoQ29tcG9uZW50IGNvbXBvbmVudFdpdGhEaWxsKSB7CiAgICAvLyBUaGVzZSBwcm9ibGVtcyBoYXZlIGFscmVhZHkgYmVlbiByZXBvcnRlZC4KICAgIFNldDxTdHJpbmc+IGlzc3VlZFByb2JsZW1zID0gbmV3IFNldDxTdHJpbmc+KCk7CiAgICBpZiAoY29tcG9uZW50V2l0aERpbGw/LnByb2JsZW1zQXNKc29uICE9IG51bGwpIHsKICAgICAgaXNzdWVkUHJvYmxlbXMuYWRkQWxsKGNvbXBvbmVudFdpdGhEaWxsLnByb2JsZW1zQXNKc29uKTsKICAgIH0KCiAgICAvLyBSZXBvcnQgb2xkIHByb2JsZW1zIHRoYXQgd2Fzbid0IHJlcG9ydGVkIGFnYWluLgogICAgZm9yIChMaXN0PERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24+IG1lc3NhZ2VzCiAgICAgICAgaW4gcmVtYWluaW5nQ29tcG9uZW50UHJvYmxlbXMudmFsdWVzKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWVzc2FnZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uIG1lc3NhZ2UgPSBtZXNzYWdlc1tpXTsKICAgICAgICBpZiAoaXNzdWVkUHJvYmxlbXMuYWRkKG1lc3NhZ2UudG9Kc29uU3RyaW5nKCkpKSB7CiAgICAgICAgICBjb250ZXh0Lm9wdGlvbnMucmVwb3J0RGlhZ25vc3RpY01lc3NhZ2UobWVzc2FnZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gU2F2ZSBhbnkgbmV3IGNvbXBvbmVudC1wcm9ibGVtcy4KICAgIGlmIChjb21wb25lbnRXaXRoRGlsbD8ucHJvYmxlbXNBc0pzb24gIT0gbnVsbCkgewogICAgICBmb3IgKFN0cmluZyBqc29uU3RyaW5nIGluIGNvbXBvbmVudFdpdGhEaWxsLnByb2JsZW1zQXNKc29uKSB7CiAgICAgICAgRGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbiBtZXNzYWdlID0KICAgICAgICAgICAgbmV3IERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24uZnJvbUpzb24oanNvblN0cmluZyk7CiAgICAgICAgTGlzdDxEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uPiBtZXNzYWdlcyA9CiAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudFByb2JsZW1zW21lc3NhZ2UudXJpXSA/Pz0KICAgICAgICAgICAgICAgIG5ldyBMaXN0PERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24+KCk7CiAgICAgICAgbWVzc2FnZXMuYWRkKG1lc3NhZ2UpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IExpc3Q8U3RyaW5nPi5mcm9tKGlzc3VlZFByb2JsZW1zKTsKICB9CgogIC8vLyBJbnRlcm5hbCBtZXRob2QuCiAgVXJpIGdldFBhcnRGaWxlVXJpKAogICAgICBVcmkgcGFyZW50RmlsZVVyaSwgTGlicmFyeVBhcnQgcGFydCwgVXJpVHJhbnNsYXRvciB1cmlUcmFuc2xhdG9yKSB7CiAgICBVcmkgZmlsZVVyaSA9IHBhcmVudEZpbGVVcmkucmVzb2x2ZShwYXJ0LnBhcnRVcmkpOwogICAgaWYgKGZpbGVVcmkuc2NoZW1lID09ICJwYWNrYWdlIikgewogICAgICAvLyBQYXJ0IHdhcyBzcGVjaWZpZWQgdmlhIHBhY2thZ2UgVVJJIGFuZCB0aGUgcmVzb2x2ZSBhYm92ZSB0aHVzCiAgICAgIC8vIGRpZCBub3QgZ28gYXMgZXhwZWN0ZWQuIFRyYW5zbGF0ZSB0aGUgcGFja2FnZSBVUkkgdG8gZ2V0IHRoZQogICAgICAvLyBhY3R1YWwgZmlsZSBVUkkuCiAgICAgIGZpbGVVcmkgPSB1cmlUcmFuc2xhdG9yLnRyYW5zbGF0ZShmaWxlVXJpLCBmYWxzZSk7CiAgICB9CiAgICByZXR1cm4gZmlsZVVyaTsKICB9CgogIC8vLyBJbnRlcm5hbCBtZXRob2QuCiAgLy8vIENvbXB1dGUgdGhlIHRyYW5zaXRpdmUgY2xvc3VyZS4KICAvLy8KICAvLy8gQXMgYSBzaWRlLWVmZmVjdCwgdGhpcyBhbHNvIGNsZWFucy11cCBub3ctdW5yZWZlcmVuY2VkIGJ1aWxkZXJzIGFzIHdlbGwgYXMKICAvLy8gYW55IHNhdmVkIGNvbXBvbmVudCBwcm9ibGVtcyBmb3Igc3VjaCBidWlsZGVycy4KICBMaXN0PExpYnJhcnk+IGNvbXB1dGVUcmFuc2l0aXZlQ2xvc3VyZSgKICAgICAgTGlzdDxMaWJyYXJ5PiBpbnB1dExpYnJhcmllcywKICAgICAgTGlzdDxVcmk+IGVudHJpZXMsCiAgICAgIExpc3Q8TGlicmFyeUJ1aWxkZXI+IHJldXNlZExpYnJhcmllcywKICAgICAgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5LAogICAgICBVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3IsCiAgICAgIE1hcDxVcmksIFNvdXJjZT4gdXJpVG9Tb3VyY2UsCiAgICAgIFtMaXN0PExpYnJhcnk+IGlucHV0TGlicmFyaWVzRmlsdGVyZWRdKSB7CiAgICBMaXN0PExpYnJhcnk+IHJlc3VsdCA9IG5ldyBMaXN0PExpYnJhcnk+KCk7CiAgICBNYXA8VXJpLCBMaWJyYXJ5PiBsaWJyYXJ5TWFwID0gPFVyaSwgTGlicmFyeT57fTsKICAgIE1hcDxVcmksIExpYnJhcnk+IHBvdGVudGlhbGx5UmVmZXJlbmNlZExpYnJhcmllcyA9IDxVcmksIExpYnJhcnk+e307CiAgICBNYXA8VXJpLCBMaWJyYXJ5PiBwb3RlbnRpYWxseVJlZmVyZW5jZWRJbnB1dExpYnJhcmllcyA9IDxVcmksIExpYnJhcnk+e307CiAgICBmb3IgKExpYnJhcnkgbGlicmFyeSBpbiBpbnB1dExpYnJhcmllcykgewogICAgICBsaWJyYXJ5TWFwW2xpYnJhcnkuaW1wb3J0VXJpXSA9IGxpYnJhcnk7CiAgICAgIGlmIChsaWJyYXJ5LmltcG9ydFVyaS5zY2hlbWUgPT0gImRhcnQiKSB7CiAgICAgICAgcmVzdWx0LmFkZChsaWJyYXJ5KTsKICAgICAgICBpbnB1dExpYnJhcmllc0ZpbHRlcmVkPy5hZGQobGlicmFyeSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcG90ZW50aWFsbHlSZWZlcmVuY2VkTGlicmFyaWVzW2xpYnJhcnkuaW1wb3J0VXJpXSA9IGxpYnJhcnk7CiAgICAgICAgcG90ZW50aWFsbHlSZWZlcmVuY2VkSW5wdXRMaWJyYXJpZXNbbGlicmFyeS5pbXBvcnRVcmldID0gbGlicmFyeTsKICAgICAgfQogICAgfQoKICAgIExpc3Q8VXJpPiB3b3JrbGlzdCA9IG5ldyBMaXN0PFVyaT4oKTsKICAgIHdvcmtsaXN0LmFkZEFsbChlbnRyaWVzKTsKICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSBpbiByZXVzZWRMaWJyYXJpZXMpIHsKICAgICAgaWYgKGxpYnJhcnkudXJpLnNjaGVtZSA9PSAiZGFydCIgJiYgIWxpYnJhcnkuaXNTeW50aGV0aWMpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBMaWJyYXJ5IGxpYiA9IGxpYnJhcnkudGFyZ2V0OwogICAgICBwb3RlbnRpYWxseVJlZmVyZW5jZWRMaWJyYXJpZXNbbGlicmFyeS51cmldID0gbGliOwogICAgICBsaWJyYXJ5TWFwW2xpYnJhcnkudXJpXSA9IGxpYjsKICAgIH0KCiAgICBMaWJyYXJ5R3JhcGggZ3JhcGggPSBuZXcgTGlicmFyeUdyYXBoKGxpYnJhcnlNYXApOwogICAgd2hpbGUgKHdvcmtsaXN0LmlzTm90RW1wdHkgJiYgcG90ZW50aWFsbHlSZWZlcmVuY2VkTGlicmFyaWVzLmlzTm90RW1wdHkpIHsKICAgICAgVXJpIHVyaSA9IHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKICAgICAgaWYgKGxpYnJhcnlNYXAuY29udGFpbnNLZXkodXJpKSkgewogICAgICAgIGZvciAoVXJpIG5laWdoYm9yIGluIGdyYXBoLm5laWdoYm9yc09mKHVyaSkpIHsKICAgICAgICAgIHdvcmtsaXN0LmFkZChuZWlnaGJvcik7CiAgICAgICAgfQogICAgICAgIGxpYnJhcnlNYXAucmVtb3ZlKHVyaSk7CiAgICAgICAgTGlicmFyeSBsaWJyYXJ5ID0gcG90ZW50aWFsbHlSZWZlcmVuY2VkTGlicmFyaWVzLnJlbW92ZSh1cmkpOwogICAgICAgIGlmIChsaWJyYXJ5ICE9IG51bGwpIHsKICAgICAgICAgIHJlc3VsdC5hZGQobGlicmFyeSk7CiAgICAgICAgICBpZiAocG90ZW50aWFsbHlSZWZlcmVuY2VkSW5wdXRMaWJyYXJpZXMucmVtb3ZlKHVyaSkgIT0gbnVsbCkgewogICAgICAgICAgICBpbnB1dExpYnJhcmllc0ZpbHRlcmVkPy5hZGQobGlicmFyeSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgTGlzdDxMaWJyYXJ5PiByZW1vdmVkTGlicmFyaWVzID0gbmV3IExpc3Q8TGlicmFyeT4oKTsKICAgIGZvciAoVXJpIHVyaSBpbiBwb3RlbnRpYWxseVJlZmVyZW5jZWRMaWJyYXJpZXMua2V5cykgewogICAgICBpZiAodXJpLnNjaGVtZSA9PSAicGFja2FnZSIpIGNvbnRpbnVlOwogICAgICBMaWJyYXJ5QnVpbGRlciBidWlsZGVyID0gdXNlckNvZGUubG9hZGVyLmJ1aWxkZXJzLnJlbW92ZSh1cmkpOwogICAgICBpZiAoYnVpbGRlciAhPSBudWxsKSB7CiAgICAgICAgTGlicmFyeSBsaWIgPSBidWlsZGVyLnRhcmdldDsKICAgICAgICByZW1vdmVkTGlicmFyaWVzLmFkZChsaWIpOwogICAgICAgIGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy5yZW1vdmUodXJpKTsKICAgICAgICBDb21waWxlckNvbnRleHQuY3VycmVudC51cmlUb1NvdXJjZS5yZW1vdmUodXJpKTsKICAgICAgICB1cmlUb1NvdXJjZS5yZW1vdmUodXJpKTsKICAgICAgICB1c2VyQnVpbGRlcnM/LnJlbW92ZSh1cmkpOwogICAgICAgIHJlbW92ZUxpYnJhcnlGcm9tUmVtYWluaW5nQ29tcG9uZW50UHJvYmxlbXMobGliLCB1cmlUcmFuc2xhdG9yKTsKICAgICAgfQogICAgfQogICAgaGllcmFyY2h5Py5hcHBseVRyZWVDaGFuZ2VzKHJlbW92ZWRMaWJyYXJpZXMsIGNvbnN0IFtdKTsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICB2b2lkIHJlbW92ZUxpYnJhcnlGcm9tUmVtYWluaW5nQ29tcG9uZW50UHJvYmxlbXMoCiAgICAgIExpYnJhcnkgbGliLCBVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3IpIHsKICAgIHJlbWFpbmluZ0NvbXBvbmVudFByb2JsZW1zLnJlbW92ZShsaWIuZmlsZVVyaSk7CiAgICAvLyBSZW1vdmUgcGFydHMgdG9vLgogICAgZm9yIChMaWJyYXJ5UGFydCBwYXJ0IGluIGxpYi5wYXJ0cykgewogICAgICBVcmkgcGFydEZpbGVVcmkgPSBnZXRQYXJ0RmlsZVVyaShsaWIuZmlsZVVyaSwgcGFydCwgdXJpVHJhbnNsYXRvcik7CiAgICAgIHJlbWFpbmluZ0NvbXBvbmVudFByb2JsZW1zLnJlbW92ZShwYXJ0RmlsZVVyaSk7CiAgICB9CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIGludCBwcmVwYXJlU3VtbWFyeShMaXN0PGludD4gc3VtbWFyeUJ5dGVzLCBVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3IsCiAgICAgIENvbXBpbGVyQ29udGV4dCBjLCBJbmNyZW1lbnRhbENvbXBpbGVyRGF0YSBkYXRhKSB7CiAgICBkaWxsTG9hZGVkRGF0YSA9IG5ldyBEaWxsVGFyZ2V0KHRpY2tlciwgdXJpVHJhbnNsYXRvciwgYy5vcHRpb25zLnRhcmdldCk7CiAgICBpbnQgYnl0ZXNMZW5ndGggPSAwOwoKICAgIGlmIChzdW1tYXJ5Qnl0ZXMgIT0gbnVsbCkgewogICAgICB0aWNrZXIubG9nTXMoIlJlYWQgJHtjLm9wdGlvbnMuc2RrU3VtbWFyeX0iKTsKICAgICAgZGF0YS5jb21wb25lbnQgPSBjLm9wdGlvbnMudGFyZ2V0LmNvbmZpZ3VyZUNvbXBvbmVudChuZXcgQ29tcG9uZW50KCkpOwogICAgICBuZXcgQmluYXJ5QnVpbGRlcihzdW1tYXJ5Qnl0ZXMsIGRpc2FibGVMYXp5UmVhZGluZzogZmFsc2UpCiAgICAgICAgICAucmVhZENvbXBvbmVudChkYXRhLmNvbXBvbmVudCk7CiAgICAgIHRpY2tlci5sb2dNcygiRGVzZXJpYWxpemVkICR7Yy5vcHRpb25zLnNka1N1bW1hcnl9Iik7CiAgICAgIGJ5dGVzTGVuZ3RoICs9IHN1bW1hcnlCeXRlcy5sZW5ndGg7CiAgICB9CgogICAgcmV0dXJuIGJ5dGVzTGVuZ3RoOwogIH0KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICAvLyBUaGlzIHByb2NlZHVyZSB3aWxsIHRyeSB0byBsb2FkIHRoZSBkaWxsIGZpbGUgYW5kIHdpbGwgY3Jhc2ggaWYgaXQgY2Fubm90LgogIEZ1dHVyZTxpbnQ+IGluaXRpYWxpemVGcm9tRGlsbChVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3IsIENvbXBpbGVyQ29udGV4dCBjLAogICAgICBJbmNyZW1lbnRhbENvbXBpbGVyRGF0YSBkYXRhKSBhc3luYyB7CiAgICBpbnQgYnl0ZXNMZW5ndGggPSAwOwogICAgRmlsZVN5c3RlbUVudGl0eSBlbnRpdHkgPQogICAgICAgIGMub3B0aW9ucy5maWxlU3lzdGVtLmVudGl0eUZvclVyaShpbml0aWFsaXplRnJvbURpbGxVcmkpOwogICAgaWYgKGF3YWl0IGVudGl0eS5leGlzdHMoKSkgewogICAgICBMaXN0PGludD4gaW5pdGlhbGl6YXRpb25CeXRlcyA9IGF3YWl0IGVudGl0eS5yZWFkQXNCeXRlcygpOwogICAgICBpZiAoaW5pdGlhbGl6YXRpb25CeXRlcyAhPSBudWxsICYmIGluaXRpYWxpemF0aW9uQnl0ZXMuaXNOb3RFbXB0eSkgewogICAgICAgIHRpY2tlci5sb2dNcygiUmVhZCAkaW5pdGlhbGl6ZUZyb21EaWxsVXJpIik7CiAgICAgICAgZGF0YS5pbml0aWFsaXphdGlvbkJ5dGVzID0gaW5pdGlhbGl6YXRpb25CeXRlczsKCiAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gb3V0cHV0IGFsbCB3ZSByZWFkIGhlcmUgc28gbGF6eSBsb2FkaW5nIGl0CiAgICAgICAgLy8gZG9lc24ndCBtYWtlIHNlbnNlLgogICAgICAgIG5ldyBCaW5hcnlCdWlsZGVyKGluaXRpYWxpemF0aW9uQnl0ZXMsIGRpc2FibGVMYXp5UmVhZGluZzogdHJ1ZSkKICAgICAgICAgICAgLnJlYWRDb21wb25lbnQoZGF0YS5jb21wb25lbnQsIGNoZWNrQ2Fub25pY2FsTmFtZXM6IHRydWUpOwoKICAgICAgICAvLyBDaGVjayB0aGUgYW55IHBhY2thZ2UtdXJscyBzdGlsbCBwb2ludCB0byB0aGUgc2FtZSBmaWxlCiAgICAgICAgLy8gKGUuZy4gdGhlIHBhY2thZ2Ugc3RpbGwgZXhpc3RzIGFuZCBoYXNuJ3QgYmVlbiB1cGRhdGVkKS4KICAgICAgICBmb3IgKExpYnJhcnkgbGliIGluIGRhdGEuY29tcG9uZW50LmxpYnJhcmllcykgewogICAgICAgICAgaWYgKGxpYi5pbXBvcnRVcmkuc2NoZW1lID09ICJwYWNrYWdlIiAmJgogICAgICAgICAgICAgIHVyaVRyYW5zbGF0b3IudHJhbnNsYXRlKGxpYi5pbXBvcnRVcmksIGZhbHNlKSAhPSBsaWIuZmlsZVVyaSkgewogICAgICAgICAgICAvLyBQYWNrYWdlIGhhcyBiZWVuIHJlbW92ZWQgb3IgdXBkYXRlZC4KICAgICAgICAgICAgLy8gVGhpcyBsaWJyYXJ5IHNob3VsZCBiZSB0aHJvd24gYXdheS4KICAgICAgICAgICAgLy8gRXZlcnl0aGluZyB0aGF0IGRlcGVuZHMgb24gaXQgc2hvdWxkIGJlIHRocm93biBhd2F5LgogICAgICAgICAgICAvLyBUT0RPKGplbnNqKTogQW55dGhpbmcgdGhhdCBkb2Vzbid0IGRlcGVuZCBvbiBpdCBjYW4gYmUga2VwdC4KICAgICAgICAgICAgLy8gRm9yIG5vdyBqdXN0IGRvbid0IGluaXRpYWxpemUgZnJvbSB0aGlzIGRpbGwuCiAgICAgICAgICAgIHRocm93IGNvbnN0IFBhY2thZ2VDaGFuZ2VkRXJyb3IoKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGluaXRpYWxpemVkRnJvbURpbGwgPSB0cnVlOwogICAgICAgIGJ5dGVzTGVuZ3RoICs9IGluaXRpYWxpemF0aW9uQnl0ZXMubGVuZ3RoOwogICAgICAgIGRhdGEudXNlckxvYWRlZFVyaU1haW4gPSBkYXRhLmNvbXBvbmVudC5tYWluTWV0aG9kOwogICAgICAgIHNhdmVDb21wb25lbnRQcm9ibGVtcyhkYXRhKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGJ5dGVzTGVuZ3RoOwogIH0KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICB2b2lkIHNhdmVDb21wb25lbnRQcm9ibGVtcyhJbmNyZW1lbnRhbENvbXBpbGVyRGF0YSBkYXRhKSB7CiAgICBpZiAoZGF0YS5jb21wb25lbnQucHJvYmxlbXNBc0pzb24gIT0gbnVsbCkgewogICAgICBmb3IgKFN0cmluZyBqc29uU3RyaW5nIGluIGRhdGEuY29tcG9uZW50LnByb2JsZW1zQXNKc29uKSB7CiAgICAgICAgRGlhZ25vc3RpY01lc3NhZ2VGcm9tSnNvbiBtZXNzYWdlID0KICAgICAgICAgICAgbmV3IERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24uZnJvbUpzb24oanNvblN0cmluZyk7CiAgICAgICAgTGlzdDxEaWFnbm9zdGljTWVzc2FnZUZyb21Kc29uPiBtZXNzYWdlcyA9CiAgICAgICAgICAgIHJlbWFpbmluZ0NvbXBvbmVudFByb2JsZW1zW21lc3NhZ2UudXJpXSA/Pz0KICAgICAgICAgICAgICAgIG5ldyBMaXN0PERpYWdub3N0aWNNZXNzYWdlRnJvbUpzb24+KCk7CiAgICAgICAgbWVzc2FnZXMuYWRkKG1lc3NhZ2UpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIC8vIFRoaXMgcHJvY2VkdXJlIHdpbGwgc2V0IHVwIGNvbXBpbGVyIGZyb20gW2NvbXBvbmVudFRvSW5pdGlhbGl6ZUZyb21dLgogIHZvaWQgaW5pdGlhbGl6ZUZyb21Db21wb25lbnQoVXJpVHJhbnNsYXRvciB1cmlUcmFuc2xhdG9yLCBDb21waWxlckNvbnRleHQgYywKICAgICAgSW5jcmVtZW50YWxDb21waWxlckRhdGEgZGF0YSkgewogICAgdGlja2VyLmxvZ01zKCJBYm91dCB0byBpbml0aWFsaXplRnJvbUNvbXBvbmVudCIpOwoKICAgIGRpbGxMb2FkZWREYXRhID0gbmV3IERpbGxUYXJnZXQodGlja2VyLCB1cmlUcmFuc2xhdG9yLCBjLm9wdGlvbnMudGFyZ2V0KTsKICAgIGRhdGEuY29tcG9uZW50ID0gbmV3IENvbXBvbmVudCgKICAgICAgICBsaWJyYXJpZXM6IGNvbXBvbmVudFRvSW5pdGlhbGl6ZUZyb20ubGlicmFyaWVzLAogICAgICAgIHVyaVRvU291cmNlOiBjb21wb25lbnRUb0luaXRpYWxpemVGcm9tLnVyaVRvU291cmNlKQogICAgICAuLm1haW5NZXRob2QgPSBjb21wb25lbnRUb0luaXRpYWxpemVGcm9tLm1haW5NZXRob2Q7CiAgICBkYXRhLnVzZXJMb2FkZWRVcmlNYWluID0gY29tcG9uZW50VG9Jbml0aWFsaXplRnJvbS5tYWluTWV0aG9kOwogICAgc2F2ZUNvbXBvbmVudFByb2JsZW1zKGRhdGEpOwoKICAgIGJvb2wgZm91bmREYXJ0Q29yZSA9IGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkYXRhLmNvbXBvbmVudC5saWJyYXJpZXMubGVuZ3RoOyBpKyspIHsKICAgICAgTGlicmFyeSBsaWJyYXJ5ID0gZGF0YS5jb21wb25lbnQubGlicmFyaWVzW2ldOwogICAgICBpZiAobGlicmFyeS5pbXBvcnRVcmkuc2NoZW1lID09ICJkYXJ0IiAmJgogICAgICAgICAgbGlicmFyeS5pbXBvcnRVcmkucGF0aCA9PSAiY29yZSIpIHsKICAgICAgICBmb3VuZERhcnRDb3JlID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQoKICAgIGlmICghZm91bmREYXJ0Q29yZSkgewogICAgICB0aHJvdyBjb25zdCBJbml0aWFsaXplRnJvbUNvbXBvbmVudEVycm9yKCJEaWQgbm90IGZpbmQgZGFydDpjb3JlIHdoZW4gIgogICAgICAgICAgInRyaWVkIHRvIGluaXRpYWxpemUgZnJvbSBjb21wb25lbnQuIik7CiAgICB9CgogICAgdGlja2VyLmxvZ01zKCJSYW4gaW5pdGlhbGl6ZUZyb21Db21wb25lbnQiKTsKICB9CgogIC8vLyBJbnRlcm5hbCBtZXRob2QuCiAgdm9pZCBhcHBlbmRMaWJyYXJpZXMoSW5jcmVtZW50YWxDb21waWxlckRhdGEgZGF0YSwgaW50IGJ5dGVzTGVuZ3RoKSB7CiAgICBpZiAoZGF0YS5jb21wb25lbnQgIT0gbnVsbCkgewogICAgICBkaWxsTG9hZGVkRGF0YS5sb2FkZXIKICAgICAgICAgIC5hcHBlbmRMaWJyYXJpZXMoZGF0YS5jb21wb25lbnQsIGJ5dGVDb3VudDogYnl0ZXNMZW5ndGgpOwogICAgfQogICAgdGlja2VyLmxvZ01zKCJBcHBlbmRlZCBsaWJyYXJpZXMiKTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxQcm9jZWR1cmU+IGNvbXBpbGVFeHByZXNzaW9uKAogICAgICBTdHJpbmcgZXhwcmVzc2lvbiwKICAgICAgTWFwPFN0cmluZywgRGFydFR5cGU+IGRlZmluaXRpb25zLAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVEZWZpbml0aW9ucywKICAgICAgU3RyaW5nIHN5bnRoZXRpY1Byb2NlZHVyZU5hbWUsCiAgICAgIFVyaSBsaWJyYXJ5VXJpLAogICAgICBbU3RyaW5nIGNsYXNzTmFtZSwKICAgICAgYm9vbCBpc1N0YXRpYyA9IGZhbHNlXSkgYXN5bmMgewogICAgYXNzZXJ0KGRpbGxMb2FkZWREYXRhICE9IG51bGwgJiYgdXNlckNvZGUgIT0gbnVsbCk7CgogICAgcmV0dXJuIGF3YWl0IGNvbnRleHQucnVuSW5Db250ZXh0KChfKSBhc3luYyB7CiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPQogICAgICAgICAgdXNlckNvZGUubG9hZGVyLnJlYWQobGlicmFyeVVyaSwgLTEsIGFjY2Vzc29yOiB1c2VyQ29kZS5sb2FkZXIuZmlyc3QpOwoKICAgICAgQ2xhc3Mga2VybmVsQ2xhc3M7CiAgICAgIGlmIChjbGFzc05hbWUgIT0gbnVsbCkgewogICAgICAgIGtlcm5lbENsYXNzID0gbGlicmFyeS5zY29wZUJ1aWxkZXJbY2xhc3NOYW1lXT8udGFyZ2V0OwogICAgICAgIGlmIChrZXJuZWxDbGFzcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgfQoKICAgICAgdXNlckNvZGUubG9hZGVyLnNlZW5NZXNzYWdlcy5jbGVhcigpOwoKICAgICAgZm9yIChUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbSBpbiB0eXBlRGVmaW5pdGlvbnMpIHsKICAgICAgICBpZiAoIWlzTGVnYWxJZGVudGlmaWVyKHR5cGVQYXJhbS5uYW1lKSkgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgZm9yIChTdHJpbmcgbmFtZSBpbiBkZWZpbml0aW9ucy5rZXlzKSB7CiAgICAgICAgaWYgKCFpc0xlZ2FsSWRlbnRpZmllcihuYW1lKSkgcmV0dXJuIG51bGw7CiAgICAgIH0KCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGRlYnVnTGlicmFyeSA9IG5ldyBTb3VyY2VMaWJyYXJ5QnVpbGRlcigKICAgICAgICBsaWJyYXJ5VXJpLAogICAgICAgIGRlYnVnRXhwclVyaSwKICAgICAgICB1c2VyQ29kZS5sb2FkZXIsCiAgICAgICAgbnVsbCwKICAgICAgICBzY29wZTogbGlicmFyeS5zY29wZS5jcmVhdGVOZXN0ZWRTY29wZSgiZXhwcmVzc2lvbiIpLAogICAgICAgIG5hbWVPcmlnaW46IGxpYnJhcnkudGFyZ2V0LAogICAgICApOwoKICAgICAgaWYgKGxpYnJhcnkgaXMgRGlsbExpYnJhcnlCdWlsZGVyKSB7CiAgICAgICAgZm9yIChMaWJyYXJ5RGVwZW5kZW5jeSBkZXBlbmRlbmN5IGluIGxpYnJhcnkudGFyZ2V0LmRlcGVuZGVuY2llcykgewogICAgICAgICAgaWYgKCFkZXBlbmRlbmN5LmlzSW1wb3J0KSBjb250aW51ZTsKCiAgICAgICAgICBMaXN0PENvbWJpbmF0b3I+IGNvbWJpbmF0b3JzOwoKICAgICAgICAgIGZvciAoa2VybmVsLkNvbWJpbmF0b3IgY29tYmluYXRvciBpbiBkZXBlbmRlbmN5LmNvbWJpbmF0b3JzKSB7CiAgICAgICAgICAgIGNvbWJpbmF0b3JzID8/PSA8Q29tYmluYXRvcj5bXTsKCiAgICAgICAgICAgIGNvbWJpbmF0b3JzLmFkZChjb21iaW5hdG9yLmlzU2hvdwogICAgICAgICAgICAgICAgPyBuZXcgQ29tYmluYXRvci5zaG93KAogICAgICAgICAgICAgICAgICAgIGNvbWJpbmF0b3IubmFtZXMsIGNvbWJpbmF0b3IuZmlsZU9mZnNldCwgbGlicmFyeS5maWxlVXJpKQogICAgICAgICAgICAgICAgOiBuZXcgQ29tYmluYXRvci5oaWRlKAogICAgICAgICAgICAgICAgICAgIGNvbWJpbmF0b3IubmFtZXMsIGNvbWJpbmF0b3IuZmlsZU9mZnNldCwgbGlicmFyeS5maWxlVXJpKSk7CiAgICAgICAgICB9CgogICAgICAgICAgZGVidWdMaWJyYXJ5LmFkZEltcG9ydCgKICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgIGRlcGVuZGVuY3kuaW1wb3J0ZWRMaWJyYXJ5UmVmZXJlbmNlLmNhbm9uaWNhbE5hbWUubmFtZSwKICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgIGRlcGVuZGVuY3kubmFtZSwKICAgICAgICAgICAgICBjb21iaW5hdG9ycywKICAgICAgICAgICAgICBkZXBlbmRlbmN5LmlzRGVmZXJyZWQsCiAgICAgICAgICAgICAgLTEsCiAgICAgICAgICAgICAgLTEsCiAgICAgICAgICAgICAgLTEsCiAgICAgICAgICAgICAgLTEpOwogICAgICAgIH0KCiAgICAgICAgZGVidWdMaWJyYXJ5LmFkZEltcG9ydHNUb1Njb3BlKCk7CiAgICAgIH0KCiAgICAgIEh5YnJpZEZpbGVTeXN0ZW0gaGZzID0gdXNlckNvZGUuZmlsZVN5c3RlbTsKICAgICAgTWVtb3J5RmlsZVN5c3RlbSBmcyA9IGhmcy5tZW1vcnk7CiAgICAgIGZzLmVudGl0eUZvclVyaShkZWJ1Z0V4cHJVcmkpLndyaXRlQXNTdHJpbmdTeW5jKGV4cHJlc3Npb24pOwoKICAgICAgRnVuY3Rpb25Ob2RlIHBhcmFtZXRlcnMgPSBuZXcgRnVuY3Rpb25Ob2RlKG51bGwsCiAgICAgICAgICB0eXBlUGFyYW1ldGVyczogdHlwZURlZmluaXRpb25zLAogICAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnM6IGRlZmluaXRpb25zLmtleXMKICAgICAgICAgICAgICAubWFwKChuYW1lKSA9PiBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KG5hbWUsIDApKQogICAgICAgICAgICAgIC50b0xpc3QoKSk7CgogICAgICBkZWJ1Z0xpYnJhcnkuYnVpbGQodXNlckNvZGUubG9hZGVyLmNvcmVMaWJyYXJ5LCBtb2RpZnlUYXJnZXQ6IGZhbHNlKTsKICAgICAgRXhwcmVzc2lvbiBjb21waWxlZEV4cHJlc3Npb24gPSBhd2FpdCB1c2VyQ29kZS5sb2FkZXIuYnVpbGRFeHByZXNzaW9uKAogICAgICAgICAgZGVidWdMaWJyYXJ5LCBjbGFzc05hbWUsIGNsYXNzTmFtZSAhPSBudWxsICYmICFpc1N0YXRpYywgcGFyYW1ldGVycyk7CgogICAgICBQcm9jZWR1cmUgcHJvY2VkdXJlID0gbmV3IFByb2NlZHVyZSgKICAgICAgICAgIG5ldyBOYW1lKHN5bnRoZXRpY1Byb2NlZHVyZU5hbWUpLCBQcm9jZWR1cmVLaW5kLk1ldGhvZCwgcGFyYW1ldGVycywKICAgICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYyk7CgogICAgICBwYXJhbWV0ZXJzLmJvZHkgPSBuZXcgUmV0dXJuU3RhdGVtZW50KGNvbXBpbGVkRXhwcmVzc2lvbikKICAgICAgICAuLnBhcmVudCA9IHBhcmFtZXRlcnM7CgogICAgICBwcm9jZWR1cmUuZmlsZVVyaSA9IGRlYnVnTGlicmFyeS5maWxlVXJpOwogICAgICBwcm9jZWR1cmUucGFyZW50ID0gY2xhc3NOYW1lICE9IG51bGwgPyBrZXJuZWxDbGFzcyA6IGxpYnJhcnkudGFyZ2V0OwoKICAgICAgdXNlckNvZGUudXJpVG9Tb3VyY2UucmVtb3ZlKGRlYnVnRXhwclVyaSk7CiAgICAgIHVzZXJDb2RlLmxvYWRlci5zb3VyY2VCeXRlcy5yZW1vdmUoZGVidWdFeHByVXJpKTsKCiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgbGlicmFyeSBoYXMgYSBjYW5vbmljYWwgbmFtZS4KICAgICAgQ29tcG9uZW50IGMgPSBuZXcgQ29tcG9uZW50KGxpYnJhcmllczogW2RlYnVnTGlicmFyeS50YXJnZXRdKTsKICAgICAgYy5jb21wdXRlQ2Fub25pY2FsTmFtZXMoKTsKCiAgICAgIHVzZXJDb2RlLnJ1blByb2NlZHVyZVRyYW5zZm9ybWF0aW9ucyhwcm9jZWR1cmUpOwoKICAgICAgcmV0dXJuIHByb2NlZHVyZTsKICAgIH0pOwogIH0KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICBMaXN0PExpYnJhcnlCdWlsZGVyPiBjb21wdXRlUmV1c2VkTGlicmFyaWVzKAogICAgICBTZXQ8VXJpPiBpbnZhbGlkYXRlZFVyaXMsIFVyaVRyYW5zbGF0b3IgdXJpVHJhbnNsYXRvciwKICAgICAge1NldDxMaWJyYXJ5QnVpbGRlcj4gbm90UmV1c2VkfSkgewogICAgTGlzdDxMaWJyYXJ5QnVpbGRlcj4gcmVzdWx0ID0gPExpYnJhcnlCdWlsZGVyPltdOwogICAgcmVzdWx0LmFkZEFsbChwbGF0Zm9ybUJ1aWxkZXJzKTsKICAgIGlmICh1c2VyQ29kZSA9PSBudWxsICYmIHVzZXJCdWlsZGVycyA9PSBudWxsKSB7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgLy8gTWFwcyBhbGwgbm9uLXBsYXRmb3JtIExpYnJhcnlCdWlsZGVycyBmcm9tIHRoZWlyIGltcG9ydCBVUkkuCiAgICBNYXA8VXJpLCBMaWJyYXJ5QnVpbGRlcj4gYnVpbGRlcnMgPSA8VXJpLCBMaWJyYXJ5QnVpbGRlcj57fTsKCiAgICAvLyBJbnZhbGlkYXRlZCBVUklzIHRyYW5zbGF0ZWQgYmFjayB0byB0aGVpciBpbXBvcnQgVVJJIChwYWNrYWdlOiwgZGFydDosCiAgICAvLyBldGMuKS4KICAgIExpc3Q8VXJpPiBpbnZhbGlkYXRlZEltcG9ydFVyaXMgPSA8VXJpPltdOwoKICAgIGJvb2wgaXNJbnZhbGlkYXRlZChVcmkgaW1wb3J0VXJpLCBVcmkgZmlsZVVyaSkgewogICAgICBpZiAoaW52YWxpZGF0ZWRVcmlzLmNvbnRhaW5zKGltcG9ydFVyaSkpIHJldHVybiB0cnVlOwogICAgICBpZiAoaW1wb3J0VXJpICE9IGZpbGVVcmkgJiYgaW52YWxpZGF0ZWRVcmlzLmNvbnRhaW5zKGZpbGVVcmkpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaWYgKGhhc1RvQ2hlY2tQYWNrYWdlVXJpcyAmJiBpbXBvcnRVcmkuc2NoZW1lID09ICJwYWNrYWdlIikgewogICAgICAgIC8vIEdldCBwYWNrYWdlIG5hbWUsIGNoZWNrIGlmIHRoZSBiYXNlIFVSSSBoYXMgY2hhbmdlZCBmb3IgdGhlIHBhY2thZ2UsCiAgICAgICAgLy8gaWYgaXQgaGFzLCB0cmFuc2xhdGUgdGhlIFVSSSBhZ2FpbiwKICAgICAgICAvLyBvdGhlcndpc2UgdGhlIFVSSSBjYW5ub3QgaGF2ZSBjaGFuZ2VkLgogICAgICAgIFN0cmluZyBwYXRoID0gaW1wb3J0VXJpLnBhdGg7CiAgICAgICAgaW50IGZpcnN0U2xhc2ggPSBwYXRoLmluZGV4T2YoJy8nKTsKICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSBwYXRoLnN1YnN0cmluZygwLCBmaXJzdFNsYXNoKTsKICAgICAgICBpZiAocHJldmlvdXNQYWNrYWdlc01hcCA9PSBudWxsIHx8CiAgICAgICAgICAgIChwcmV2aW91c1BhY2thZ2VzTWFwW3BhY2thZ2VOYW1lXSAhPQogICAgICAgICAgICAgICAgY3VycmVudFBhY2thZ2VzTWFwW3BhY2thZ2VOYW1lXSkpIHsKICAgICAgICAgIFVyaSBuZXdGaWxlVXJpID0gdXJpVHJhbnNsYXRvci50cmFuc2xhdGUoaW1wb3J0VXJpLCBmYWxzZSk7CiAgICAgICAgICBpZiAobmV3RmlsZVVyaSAhPSBmaWxlVXJpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoYnVpbGRlcnNbaW1wb3J0VXJpXT8uaXNTeW50aGV0aWMgPz8gZmFsc2UpIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgYWRkQnVpbGRlckFuZEludmFsaWRhdGVVcmlzKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKHVyaS5zY2hlbWUgPT0gImRhcnQiICYmICFsaWJyYXJ5LmlzU3ludGhldGljKSB7CiAgICAgICAgcmVzdWx0LmFkZChsaWJyYXJ5KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgYnVpbGRlcnNbdXJpXSA9IGxpYnJhcnk7CiAgICAgIGlmIChpc0ludmFsaWRhdGVkKHVyaSwgbGlicmFyeS50YXJnZXQuZmlsZVVyaSkpIHsKICAgICAgICBpbnZhbGlkYXRlZEltcG9ydFVyaXMuYWRkKHVyaSk7CiAgICAgIH0KICAgICAgaWYgKGxpYnJhcnkgaXMgU291cmNlTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgICBmb3IgKExpYnJhcnlCdWlsZGVyIHBhcnQgaW4gbGlicmFyeS5wYXJ0cykgewogICAgICAgICAgaWYgKGlzSW52YWxpZGF0ZWQocGFydC51cmksIHBhcnQuZmlsZVVyaSkpIHsKICAgICAgICAgICAgaW52YWxpZGF0ZWRJbXBvcnRVcmlzLmFkZChwYXJ0LnVyaSk7CiAgICAgICAgICAgIGJ1aWxkZXJzW3BhcnQudXJpXSA9IHBhcnQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGxpYnJhcnkgaXMgRGlsbExpYnJhcnlCdWlsZGVyKSB7CiAgICAgICAgZm9yIChMaWJyYXJ5UGFydCBwYXJ0IGluIGxpYnJhcnkudGFyZ2V0LnBhcnRzKSB7CiAgICAgICAgICBVcmkgcGFydFVyaSA9IGxpYnJhcnkudXJpLnJlc29sdmUocGFydC5wYXJ0VXJpKTsKICAgICAgICAgIFVyaSBmaWxlVXJpID0KICAgICAgICAgICAgICBnZXRQYXJ0RmlsZVVyaShsaWJyYXJ5LmxpYnJhcnkuZmlsZVVyaSwgcGFydCwgdXJpVHJhbnNsYXRvcik7CgogICAgICAgICAgaWYgKGlzSW52YWxpZGF0ZWQocGFydFVyaSwgZmlsZVVyaSkpIHsKICAgICAgICAgICAgaW52YWxpZGF0ZWRJbXBvcnRVcmlzLmFkZChwYXJ0VXJpKTsKICAgICAgICAgICAgYnVpbGRlcnNbcGFydFVyaV0gPSBsaWJyYXJ5OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmICh1c2VyQ29kZSAhPSBudWxsKSB7CiAgICAgIC8vIHVzZXJDb2RlIGFscmVhZHkgY29udGFpbnMgdGhlIGJ1aWxkZXJzIGZyb20gdXNlckJ1aWxkZXJzLgogICAgICB1c2VyQ29kZS5sb2FkZXIuYnVpbGRlcnMuZm9yRWFjaChhZGRCdWlsZGVyQW5kSW52YWxpZGF0ZVVyaXMpOwogICAgfSBlbHNlIHsKICAgICAgLy8gdXNlckNvZGUgd2FzIG51bGwgc28gd2UgZXhwbGljaXRseSBoYXZlIHRvIGFkZCB0aGUgYnVpbGRlcnMgZnJvbQogICAgICAvLyB1c2VyQnVpbGRlcnMgKHdoaWNoIGNhbm5vdCBiZSBudWxsIGFzIHdlIGNoZWNrZWQgaW5pdGlhbGx5IHRoYXQgb25lIG9mCiAgICAgIC8vIHRoZW0gd2FzIG5vbi1udWxsKS4KICAgICAgdXNlckJ1aWxkZXJzLmZvckVhY2goYWRkQnVpbGRlckFuZEludmFsaWRhdGVVcmlzKTsKICAgIH0KCiAgICByZWNvcmRJbnZhbGlkYXRlZEltcG9ydFVyaXNGb3JUZXN0aW5nKGludmFsaWRhdGVkSW1wb3J0VXJpcyk7CgogICAgQnVpbGRlckdyYXBoIGdyYXBoID0gbmV3IEJ1aWxkZXJHcmFwaChidWlsZGVycyk7CgogICAgLy8gQ29tcHV0ZSBkaXJlY3QgZGVwZW5kZW5jaWVzIGZvciBlYWNoIGltcG9ydCBVUkkgKHRoZSByZXZlcnNlIG9mIHRoZQogICAgLy8gZWRnZXMgcmV0dXJuZWQgYnkgYGdyYXBoLm5laWdoYm9yc09mYCkuCiAgICBNYXA8VXJpLCBTZXQ8VXJpPj4gZGlyZWN0RGVwZW5kZW5jaWVzID0gPFVyaSwgU2V0PFVyaT4+e307CiAgICBmb3IgKFVyaSB2ZXJ0ZXggaW4gZ3JhcGgudmVydGljZXMpIHsKICAgICAgZm9yIChVcmkgbmVpZ2hib3IgaW4gZ3JhcGgubmVpZ2hib3JzT2YodmVydGV4KSkgewogICAgICAgIChkaXJlY3REZXBlbmRlbmNpZXNbbmVpZ2hib3JdID8/PSBuZXcgU2V0PFVyaT4oKSkuYWRkKHZlcnRleCk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBSZW1vdmUgYWxsIGRlcGVuZGVuY2llcyBvZiBbaW52YWxpZGF0ZWRJbXBvcnRVcmlzXSBmcm9tIGJ1aWxkZXJzLgogICAgTGlzdDxVcmk+IHdvcmtMaXN0ID0gaW52YWxpZGF0ZWRJbXBvcnRVcmlzOwogICAgd2hpbGUgKHdvcmtMaXN0LmlzTm90RW1wdHkpIHsKICAgICAgVXJpIHJlbW92ZWQgPSB3b3JrTGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgIExpYnJhcnlCdWlsZGVyIGN1cnJlbnQgPSBidWlsZGVycy5yZW1vdmUocmVtb3ZlZCk7CiAgICAgIC8vIFtjdXJyZW50XSBpcyBudWxsIGlmIHRoZSBjb3JyZXNwb25kaW5nIGtleSAoVVJJKSBoYXMgYWxyZWFkeSBiZWVuCiAgICAgIC8vIHJlbW92ZWQuCiAgICAgIGlmIChjdXJyZW50ICE9IG51bGwpIHsKICAgICAgICBTZXQ8VXJpPiBzID0gZGlyZWN0RGVwZW5kZW5jaWVzW2N1cnJlbnQudXJpXTsKICAgICAgICBpZiAoY3VycmVudC51cmkgIT0gcmVtb3ZlZCkgewogICAgICAgICAgaWYgKHMgPT0gbnVsbCkgewogICAgICAgICAgICBzID0gZGlyZWN0RGVwZW5kZW5jaWVzW3JlbW92ZWRdOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcy5hZGRBbGwoZGlyZWN0RGVwZW5kZW5jaWVzW3JlbW92ZWRdKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHMgIT0gbnVsbCkgewogICAgICAgICAgLy8gW3NdIGlzIG51bGwgZm9yIGxlYXZlcy4KICAgICAgICAgIGZvciAoVXJpIGRlcGVuZGVuY3kgaW4gcykgewogICAgICAgICAgICB3b3JrTGlzdC5hZGQoZGVwZW5kZW5jeSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG5vdFJldXNlZD8uYWRkKGN1cnJlbnQpOwogICAgICB9CiAgICB9CgogICAgLy8gQnVpbGRlcnMgY29udGFpbiBtYXBwaW5ncyBmcm9tIHBhcnQgdXJpIHRvIGJ1aWxkZXIsIG1lYW5pbmcgdGhlIHNhbWUKICAgIC8vIGJ1aWxkZXIgY2FuIGV4aXN0IG11bHRpcGxlIHRpbWVzIGluIHRoZSB2YWx1ZXMgbGlzdC4KICAgIFNldDxVcmk+IHNlZW5VcmlzID0gbmV3IFNldDxVcmk+KCk7CiAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIgaW4gYnVpbGRlcnMudmFsdWVzKSB7CiAgICAgIGlmIChidWlsZGVyLmlzUGFydCkgY29udGludWU7CiAgICAgIC8vIFRPRE8oamVuc2ovYWhlKTogVGhpcyBsaW5lIGNhbiBwcm9iYWJseSBnbyBhd2F5IG9uY2UKICAgICAgLy8gaHR0cHM6Ly9kYXJ0LXJldmlldy5nb29nbGVzb3VyY2UuY29tLzQ3NDQyIGxhbmRzLgogICAgICBpZiAoYnVpbGRlci5pc1BhdGNoKSBjb250aW51ZTsKICAgICAgaWYgKCFzZWVuVXJpcy5hZGQoYnVpbGRlci51cmkpKSBjb250aW51ZTsKICAgICAgcmVzdWx0LmFkZChidWlsZGVyKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGludmFsaWRhdGUoVXJpIHVyaSkgewogICAgaW52YWxpZGF0ZWRVcmlzLmFkZCh1cmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBpbnZhbGlkYXRlQWxsU291cmNlcygpIHsKICAgIGlmICh1c2VyQ29kZSAhPSBudWxsKSB7CiAgICAgIFNldDxVcmk+IHVyaXMgPSBuZXcgU2V0PFVyaT4uZnJvbSh1c2VyQ29kZS5sb2FkZXIuYnVpbGRlcnMua2V5cyk7CiAgICAgIHVyaXMucmVtb3ZlQWxsKGRpbGxMb2FkZWREYXRhLmxvYWRlci5idWlsZGVycy5rZXlzKTsKICAgICAgaW52YWxpZGF0ZWRVcmlzLmFkZEFsbCh1cmlzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgc2V0TW9kdWxlc1RvTG9hZE9uTmV4dENvbXB1dGVEZWx0YShMaXN0PENvbXBvbmVudD4gY29tcG9uZW50cykgewogICAgbW9kdWxlc1RvTG9hZCA9IGNvbXBvbmVudHMudG9MaXN0KCk7CiAgfQoKICAvLy8gSW50ZXJuYWwgbWV0aG9kLgogIHZvaWQgcmVjb3JkTm9uRnVsbENvbXBvbmVudEZvclRlc3RpbmcoQ29tcG9uZW50IGNvbXBvbmVudCkge30KCiAgLy8vIEludGVybmFsIG1ldGhvZC4KICB2b2lkIHJlY29yZEludmFsaWRhdGVkSW1wb3J0VXJpc0ZvclRlc3RpbmcoTGlzdDxVcmk+IHVyaXMpIHt9CgogIC8vLyBJbnRlcm5hbCBtZXRob2QuCiAgdm9pZCByZWNvcmRUZW1wb3JhcnlGaWxlRm9yVGVzdGluZyhVcmkgdXJpKSB7fQp9CgpjbGFzcyBQYWNrYWdlQ2hhbmdlZEVycm9yIHsKICBjb25zdCBQYWNrYWdlQ2hhbmdlZEVycm9yKCk7Cn0KCmNsYXNzIEluaXRpYWxpemVGcm9tQ29tcG9uZW50RXJyb3IgewogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwoKICBjb25zdCBJbml0aWFsaXplRnJvbUNvbXBvbmVudEVycm9yKHRoaXMubWVzc2FnZSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+IG1lc3NhZ2U7Cn0KCmNsYXNzIEluY3JlbWVudGFsQ29tcGlsZXJEYXRhIHsKICBQcm9jZWR1cmUgdXNlckxvYWRlZFVyaU1haW4gPSBudWxsOwogIENvbXBvbmVudCBjb21wb25lbnQgPSBudWxsOwogIExpc3Q8aW50PiBpbml0aWFsaXphdGlvbkJ5dGVzID0gbnVsbDsKfQqEWwBOTjwBJAEhAUgBNAkXHB8jAS00ATgBJAkPExIUFhEbFQ4TFxkQExIXAT8BQgE8OAFJATMBLwEqATUBQQEwAT8BGgkjNDoyOAE4AUABSQE2AS8BJQFHASIBMQFCIQEXARopJAEtAR0pKSMtJBsoJyZJNyEBIlEBGQElPhopJjEBJDYpKjEBDCJCFCxHRAEgRzgcSRwIRCRGMDsqASQdMUkyOxFKTi8STx5PPhxIATQuMC0XJzgySUQSLz5DSzFJTChIGTw+UDwgIS1HKk4oSBIQDgwKLAEuMC9ALisTKQwMNwgnAT8BNgE+SkUqKgEoO0UBJUAjJi0KAUM1KEsKCAEhMVA/CggBIyk6NxlFKDsyQUw5DApGKDkIAR8+PSglCkAIIQEeQkEIATkBKyMgJEUdERoaLQEmOlAvLgwKATYhCggBODlKMQoIATorQU0IRAFPTyNMKhocRQgvATsmKzJQLyw4DgwKAS86CAEnJic6MBwIASg9NyMqASUhRTU0HxkdFxsaMCc+NiYMCg8vMSMdIRsfHSEWCAFRPwEnKiAIASw4TyIrCAQBDDsBDEUBOAY8UEkGTyVNUBUuSksyLTA8PCQjATsmNy8KCAEdJCk6Mi8MCiU2MwwKIzQxDAoIAUsVIS4wTSwKCA07LjBOLTQKCAYEARdBOTc8KwgwMwgrLAgGBAEXKzQhIzAkMEw2LFAiDAodQSEKCBwuMC9ALisTKQwMJB8KCBwGBAEXH0RLSxwvLDg8LkItFgw8CggGBAEXR0cyNDU/BgE3MjAyOTo8CggGASg1RCxAMzg3HwgGMgQBFxZKNydHRho5BhQEARcmBlE2KiQZLCAjJDAwNUlOLi8wHS4PRUoIBgEqHjZCEggkOSUGATdPJyk3IgogRh8fSTIMCggGATo7LUUdJiM0OSEjSQgGPQETBAEXNDI0GSpKNgYEARdKOU4ZASA0TUEqPCoGARgEARdQUSwZHkIhQks1OAFFH0lHAUNEODNONDNETD0vDAoBJDM8JQgGGAQBFz0xQSxAMzg3HwgGBAEXS08mNgFOJDg8O0MhASBANTAuHg8IBgEaTjIGATEEARdIIhxEBigEAQwnGSkrJRYZJjgBMh9RARkfPy4IASwBOT0ILjMIAUQUFhkOPiQJAStMLgEoAUksAS4nTidQDAEiFEYUHxslEhISEwoBKggBMihDATcrMUcaAUxNUAErTh8BQB8BMEsBMTgBNUUhATcBGAgEARcvPSk2JTQVBgFEQQFODi8BNTxHFQhEUC8yJiw8KzE0RicZDAoIQhQGAUM6HRAIHzgoCC01NzEnDAoyOTsYTAExMCkMCggGARxDRQ1KUB05BgFCATUBSy8/KThHCAYBSTAiKzlLEh02JhstEzMMChklJiYMCiEIBgFMPCg2JD47JTAbBhMEAQwdHgQBDCAcSDskBgQBDEgpBAEXQAEXQAEXMQIBHB8CASUYATQBIAIBICYeKAIBNXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9pbmNyZW1lbnRhbF9jb21waWxlci5kYXJ0MXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL29sZF90b19uZXdfYXBpLmRhcnSM9i8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gSW1wbGVtZW50YXRpb24gb2YgdGhlIG5ldyBjb21waWxlciBBUEkgaW4gJy4uL2NvbXBpbGVyX25ldy5kYXJ0JyB0aHJvdWdoIHRoZQovLy8gb2xkIGNvbXBpbGVyIEFQSSBpbiAnLi4vY29tcGlsZXIuZGFydCcuCgpsaWJyYXJ5IGNvbXBpbGVyLmFwaS5sZWdhY3k7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRXZlbnRTaW5rLCBGdXR1cmU7CmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IHV0Zjg7CgppbXBvcnQgJy4uL2NvbXBpbGVyLmRhcnQnOwppbXBvcnQgJy4uL2NvbXBpbGVyX25ldy5kYXJ0JzsKaW1wb3J0ICdpby9zb3VyY2VfZmlsZS5kYXJ0JzsKaW1wb3J0ICdudWxsX2NvbXBpbGVyX291dHB1dC5kYXJ0JyBzaG93IE51bGxTaW5rOwoKLy8vIEltcGxlbWVudGF0aW9uIG9mIFtDb21waWxlcklucHV0XSB1c2luZyBhIFtDb21waWxlcklucHV0UHJvdmlkZXJdLgpjbGFzcyBMZWdhY3lDb21waWxlcklucHV0IGltcGxlbWVudHMgQ29tcGlsZXJJbnB1dCB7CiAgZmluYWwgQ29tcGlsZXJJbnB1dFByb3ZpZGVyIF9pbnB1dFByb3ZpZGVyOwoKICBMZWdhY3lDb21waWxlcklucHV0KHRoaXMuX2lucHV0UHJvdmlkZXIpOwoKICBAb3ZlcnJpZGUKICBGdXR1cmU8SW5wdXQ+IHJlYWRGcm9tVXJpKFVyaSB1cmksIHtJbnB1dEtpbmQgaW5wdXRLaW5kOiBJbnB1dEtpbmQuVVRGOH0pIHsKICAgIC8vIFRoZSBzd2l0Y2ggaGFuZGxlcyBhbGwgZW51bSB2YWx1ZXMsIGJ1dCBub3QgbnVsbC4KICAgIC8vIGlnbm9yZTogbWlzc2luZ19yZXR1cm4KICAgIHJldHVybiBfaW5wdXRQcm92aWRlcih1cmkpLnRoZW4oKC8qU3RyaW5nfExpc3Q8aW50PiovIGRhdGEpIHsKICAgICAgc3dpdGNoIChpbnB1dEtpbmQpIHsKICAgICAgICBjYXNlIElucHV0S2luZC5VVEY4OgogICAgICAgICAgU291cmNlRmlsZSBzb3VyY2VGaWxlOwogICAgICAgICAgaWYgKGRhdGEgaXMgTGlzdDxpbnQ+KSB7CiAgICAgICAgICAgIHNvdXJjZUZpbGUgPSBuZXcgVXRmOEJ5dGVzU291cmNlRmlsZSh1cmksIGRhdGEpOwogICAgICAgICAgfSBlbHNlIGlmIChkYXRhIGlzIFN0cmluZykgewogICAgICAgICAgICBzb3VyY2VGaWxlID0gbmV3IFN0cmluZ1NvdXJjZUZpbGUuZnJvbVVyaSh1cmksIGRhdGEpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgIkV4cGVjdGVkIGEgJ1N0cmluZycgb3IgYSAnTGlzdDxpbnQ+JyBmcm9tIHRoZSBpbnB1dCAiCiAgICAgICAgICAgICAgICAicHJvdmlkZXIsIGJ1dCBnb3Q6ICR7RXJyb3Iuc2FmZVRvU3RyaW5nKGRhdGEpfS4iOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHNvdXJjZUZpbGU7CiAgICAgICAgY2FzZSBJbnB1dEtpbmQuYmluYXJ5OgogICAgICAgICAgaWYgKGRhdGEgaXMgU3RyaW5nKSB7CiAgICAgICAgICAgIGRhdGEgPSB1dGY4LmVuY29kZShkYXRhKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBuZXcgQmluYXJ5KHVyaSwgZGF0YSk7CiAgICAgIH0KICAgIH0pOwogIH0KfQoKLy8vIEltcGxlbWVudGF0aW9uIG9mIFtDb21waWxlckRpYWdub3N0aWNzXSB1c2luZyBhIFtEaWFnbm9zdGljSGFuZGxlcl0uCmNsYXNzIExlZ2FjeUNvbXBpbGVyRGlhZ25vc3RpY3MgaW1wbGVtZW50cyBDb21waWxlckRpYWdub3N0aWNzIHsKICBmaW5hbCBEaWFnbm9zdGljSGFuZGxlciBfaGFuZGxlcjsKCiAgTGVnYWN5Q29tcGlsZXJEaWFnbm9zdGljcyh0aGlzLl9oYW5kbGVyKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnQoCiAgICAgIHZhciBjb2RlLCBVcmkgdXJpLCBpbnQgYmVnaW4sIGludCBlbmQsIFN0cmluZyBtZXNzYWdlLCBEaWFnbm9zdGljIGtpbmQpIHsKICAgIF9oYW5kbGVyKHVyaSwgYmVnaW4sIGVuZCwgbWVzc2FnZSwga2luZCk7CiAgfQp9CgovLy8gSW1wbGVtZW50YXRpb24gb2YgW0NvbXBpbGVyT3V0cHV0XSB1c2luZyBhbiBvcHRpb25hbAovLy8gW0NvbXBpbGVyT3V0cHV0UHJvdmlkZXJdLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDaGFuZ2UgUHViIHRvIHVzZSB0aGUgbmV3IGludGVyZmFjZSBhbmQgcmVtb3ZlIHRoaXMuCmNsYXNzIExlZ2FjeUNvbXBpbGVyT3V0cHV0IGltcGxlbWVudHMgQ29tcGlsZXJPdXRwdXQgewogIGZpbmFsIENvbXBpbGVyT3V0cHV0UHJvdmlkZXIgX291dHB1dFByb3ZpZGVyOwoKICBMZWdhY3lDb21waWxlck91dHB1dChbdGhpcy5fb3V0cHV0UHJvdmlkZXJdKTsKCiAgQG92ZXJyaWRlCiAgT3V0cHV0U2luayBjcmVhdGVPdXRwdXRTaW5rKFN0cmluZyBuYW1lLCBTdHJpbmcgZXh0ZW5zaW9uLCBPdXRwdXRUeXBlIHR5cGUpIHsKICAgIGlmIChfb3V0cHV0UHJvdmlkZXIgIT0gbnVsbCkgewogICAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgICBjYXNlIE91dHB1dFR5cGUuZHVtcEluZm86CiAgICAgICAgY2FzZSBPdXRwdXRUeXBlLmRlZmVycmVkTWFwOgogICAgICAgICAgaWYgKGV4dGVuc2lvbiA9PSAnJykgewogICAgICAgICAgICAvLyBOZWVkZWQgdG8gbWFrZSBQdWIgZ2VuZXJhdGUgdGhlIHNhbWUgb3V0cHV0IG5hbWUuCiAgICAgICAgICAgIGV4dGVuc2lvbiA9ICdkZWZlcnJlZF9tYXAnOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgfQogICAgICByZXR1cm4gbmV3IExlZ2FjeU91dHB1dFNpbmsoX291dHB1dFByb3ZpZGVyKG5hbWUsIGV4dGVuc2lvbikpOwogICAgfQogICAgcmV0dXJuIE51bGxTaW5rLm91dHB1dFByb3ZpZGVyKG5hbWUsIGV4dGVuc2lvbiwgdHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBCaW5hcnlPdXRwdXRTaW5rIGNyZWF0ZUJpbmFyeVNpbmsoVXJpIHVyaSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkxlZ2FjeUNvbXBpbGVyT3V0cHV0LmNyZWF0ZUJpbmFyeVNpbmsiKTsKICB9Cn0KCmNsYXNzIExlZ2FjeU91dHB1dFNpbmsgaW1wbGVtZW50cyBPdXRwdXRTaW5rIHsKICBmaW5hbCBFdmVudFNpbms8U3RyaW5nPiBzaW5rOwoKICBMZWdhY3lPdXRwdXRTaW5rKHRoaXMuc2luayk7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkKFN0cmluZyBldmVudCkgPT4gc2luay5hZGQoZXZlbnQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgPT4gc2luay5jbG9zZSgpOwp9CmwATk48AVEsAR0BLCEBGx8eMgFHNS4BLAEMTjkeQhsdISM9J0ITSUMMHR8gJgwoCAgEAgFJQSQBLAEMD1AuBAIBOR5NNzABMAEMUCMWIiUhQSgMEREIRQY7BAEML0kEAgEvIAEfAQwtAQwgAgEocGFja2FnZTpjb21waWxlci9zcmMvb2xkX3RvX25ld19hcGkuZGFydC9zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21tb24vdGFza3MuZGFydKXbLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5jb21tb24udGFza3M7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnCiAgICBzaG93IEZ1dHVyZSwgWm9uZSwgWm9uZURlbGVnYXRlLCBab25lU3BlY2lmaWNhdGlvbiwgcnVuWm9uZWQ7CgovLy8gVXNlZCB0byBtZWFzdXJlIHdoZXJlIHRpbWUgaXMgc3BlbnQgaW4gdGhlIGNvbXBpbGVyLgovLy8KLy8vIFRoaXMgZXhwb3NlcyBbbWVhc3VyZV0gYW5kIFttZWFzdXJlSW9dLCB3aGljaCB3cmFwIGFuIGFjdGlvbiBhbmQgYXNzb2NpYXRlCi8vLyB0aGUgdGltZSBzcGVudCBkdXJpbmcgdGhhdCBhY3Rpb24gd2l0aCB0aGlzIHRhc2suIE5lc3RlZCBtZWFzdXJlbWVudHNjY2FuIGJlCi8vLyBpbnRyb2R1Y2VkIGJ5IHVzaW5nIFttZWFzdXJlU3VidGFza10uCi8vIFRPRE8oc2lnbXVuZCk6IHJlbmFtZSB0byBNZWFzdXJhYmxlVGFzawphYnN0cmFjdCBjbGFzcyBDb21waWxlclRhc2sgewogIGZpbmFsIE1lYXN1cmVyIF9tZWFzdXJlcjsKICBmaW5hbCBTdG9wd2F0Y2ggX3dhdGNoOwogIGZpbmFsIE1hcDxTdHJpbmcsIEdlbmVyaWNUYXNrPiBfc3VidGFza3MgPSA8U3RyaW5nLCBHZW5lcmljVGFzaz57fTsKCiAgaW50IF9hc3luY0NvdW50ID0gMDsKCiAgLy8gRWFjaCB0YXNrIGhhcyBhIGZpeGVkLCBsYXppbHkgY29tcHV0ZWQsIFpvbmVTcGVjaWZpY2F0aW9uIGFuZCB6b25lVmFsdWVzCiAgLy8gZm9yIFtfbWVhc3VyZVpvbmVkXS4KICBab25lU3BlY2lmaWNhdGlvbiBfem9uZVNwZWNpZmljYXRpb247CiAgTWFwIF96b25lVmFsdWVzOwoKICBDb21waWxlclRhc2sodGhpcy5fbWVhc3VyZXIpCiAgICAgIDogX3dhdGNoID0gX21lYXN1cmVyLmVuYWJsZVRhc2tNZWFzdXJlbWVudHMgPyBuZXcgU3RvcHdhdGNoKCkgOiBudWxsOwoKICAvLy8gV2hldGhlciBtZWFzdXJlbWVudCBpcyBkaXNhYmxlZC4gVGhlIGZ1bmN0aW9ucyBbbWVhc3VyZV0gYW5kIFttZWFzdXJlSW9dCiAgLy8vIG9ubHkgbWVhc3VyZSB0aW1lIGlmIG1lYXN1cmVtZW50cyBhcmUgZW5hYmxlZC4KICBib29sIGdldCBfaXNEaXNhYmxlZCA9PiBfd2F0Y2ggPT0gbnVsbDsKCiAgLy8vIE5hbWUgdG8gdXNlIGZvciByZXBvcnRpbmcgdGltaW5nIGluZm9ybWF0aW9uLgogIC8vLwogIC8vLyBTdWJjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIHdpdGggYSBwcm9wZXIgbmFtZSwgb3RoZXJ3aXNlIHdlIHVzZSB0aGUKICAvLy8gcnVudGltZSB0eXBlIG9mIHRoZSB0YXNrLgogIFN0cmluZyBnZXQgbmFtZSA9PiAiVW5rbm93biB0YXNrICcke3RoaXMucnVudGltZVR5cGV9JyI7CgogIGJvb2wgZ2V0IGlzUnVubmluZyA9PiBfd2F0Y2g/LmlzUnVubmluZyA9PSB0cnVlOwoKICBpbnQgZ2V0IHRpbWluZyB7CiAgICBpZiAoX2lzRGlzYWJsZWQpIHJldHVybiAwOwogICAgaW50IHRvdGFsID0gX3dhdGNoLmVsYXBzZWRNaWxsaXNlY29uZHM7CiAgICBmb3IgKEdlbmVyaWNUYXNrIHN1YnRhc2sgaW4gX3N1YnRhc2tzLnZhbHVlcykgewogICAgICB0b3RhbCArPSBzdWJ0YXNrLnRpbWluZzsKICAgIH0KICAgIHJldHVybiB0b3RhbDsKICB9CgogIER1cmF0aW9uIGdldCBkdXJhdGlvbiB7CiAgICBpZiAoX2lzRGlzYWJsZWQpIHJldHVybiBEdXJhdGlvbi56ZXJvOwogICAgRHVyYXRpb24gdG90YWwgPSBfd2F0Y2guZWxhcHNlZDsKICAgIGZvciAoR2VuZXJpY1Rhc2sgc3VidGFzayBpbiBfc3VidGFza3MudmFsdWVzKSB7CiAgICAgIHRvdGFsICs9IHN1YnRhc2suZHVyYXRpb247CiAgICB9CiAgICByZXR1cm4gdG90YWw7CiAgfQoKICAvLy8gUGVyZm9ybSBbYWN0aW9uXSBhbmQgbWVhc3VyZSBpdHMgcnVudGltZSAoaW5jbHVkaW5nIGFueSBhc3luY2hyb25vdXMKICAvLy8gY2FsbGJhY2tzLCBzdWNoIGFzLCBbRnV0dXJlLnRoZW5dLCBidXQgZXhjbHVkaW5nIGNvZGUgbWVhc3VyZWQgYnkgb3RoZXIKICAvLy8gdGFza3MpLgogIFQgbWVhc3VyZTxUPihUIGFjdGlvbigpKSA9PiBfaXNEaXNhYmxlZCA/IGFjdGlvbigpIDogX21lYXN1cmVab25lZChhY3Rpb24pOwoKICAvLy8gSGVscGVyIG1ldGhvZCB0aGF0IHN0YXJ0cyBtZWFzdXJpbmcgd2l0aCB0aGlzIFtDb21waWxlclRhc2tdLCB0aGF0IGlzLAogIC8vLyBtYWtlIHRoaXMgdGFzayB0aGUgY3VycmVudGx5IG1lYXN1cmVkIHRhc2suCiAgQ29tcGlsZXJUYXNrIF9zdGFydCgpIHsKICAgIGlmIChfaXNEaXNhYmxlZCkgcmV0dXJuIG51bGw7CiAgICBDb21waWxlclRhc2sgcHJldmlvdXMgPSBfbWVhc3VyZXIuX2N1cnJlbnRUYXNrOwogICAgX21lYXN1cmVyLl9jdXJyZW50VGFzayA9IHRoaXM7CiAgICBpZiAocHJldmlvdXMgIT0gbnVsbCkgcHJldmlvdXMuX3dhdGNoLnN0b3AoKTsKICAgIC8vIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBbcHJldmlvdXNdIGlzIGBudWxsYCB3ZSd2ZSByZXR1cm5lZCBmcm9tIHRoZQogICAgLy8gZXZlbnRsb29wLgogICAgX21lYXN1cmVyLnN0b3BBc3luY1dhbGxDbG9jaygpOwogICAgX3dhdGNoLnN0YXJ0KCk7CiAgICByZXR1cm4gcHJldmlvdXM7CiAgfQoKICAvLy8gSGVscGVyIG1ldGhvZCB0aGF0IHN0b3BzIG1lYXN1cmluZyB3aXRoIHRoaXMgW0NvbXBpbGVyVGFza10sIHRoYXQgaXMsCiAgLy8vIG1ha2UgW3ByZXZpb3VzXSB0aGUgY3VycmVudGx5IG1lYXN1cmVkIHRhc2suCiAgdm9pZCBfc3RvcChDb21waWxlclRhc2sgcHJldmlvdXMpIHsKICAgIGlmIChfaXNEaXNhYmxlZCkgcmV0dXJuOwogICAgX3dhdGNoLnN0b3AoKTsKICAgIGlmIChwcmV2aW91cyAhPSBudWxsKSB7CiAgICAgIHByZXZpb3VzLl93YXRjaC5zdGFydCgpOwogICAgfSBlbHNlIHsKICAgICAgLy8gSWYgdGhlcmUncyBubyBwcmV2aW91cyB0YXNrLCB3ZSdyZSBhYm91dCB0byByZXR1cm4gY29udHJvbCB0byB0aGUKICAgICAgLy8gZXZlbnQgbG9vcC4gU3RhcnQgY291bnRpbmcgdGhhdCBhcyB3YWl0aW5nIGFzeW5jaHJvbm91cyBJL08uCiAgICAgIF9tZWFzdXJlci5zdGFydEFzeW5jV2FsbENsb2NrKCk7CiAgICB9CiAgICBfbWVhc3VyZXIuX2N1cnJlbnRUYXNrID0gcHJldmlvdXM7CiAgfQoKICBUIF9tZWFzdXJlWm9uZWQ8VD4oVCBhY3Rpb24oKSkgewogICAgLy8gVXNpbmcgem9uZXMsIHdlJ3JlIGFibGUgdG8gdHJhY2sgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgY29ycmVjdGx5LCBhcwogICAgLy8gb3VyIHpvbmUgd2lsbCBiZSBhc2tlZCB0byBpbnZva2UgYHRoZW5gIGJsb2Nrcy4gVGhlbiBibG9ja3MgKHRoZSBjbG9zdXJlCiAgICAvLyBwYXNzZWQgdG8gcnVuWm9uZWQsIGFuZCBvdGhlciBjbG9zdXJlcykgYXJlIHJ1biB2aWEgdGhlIGBydW5gIGZ1bmN0aW9ucwogICAgLy8gYmVsb3cuCgogICAgYXNzZXJ0KF93YXRjaCAhPSBudWxsKTsKCiAgICAvLyBUaGUgY3VycmVudCB6b25lIGlzIGFscmVhZHkgbWVhc3VyaW5nIGB0aGlzYCB0YXNrLgogICAgaWYgKFpvbmUuY3VycmVudFtfbWVhc3VyZXJdID09IHRoaXMpIHJldHVybiBhY3Rpb24oKTsKCiAgICByZXR1cm4gcnVuWm9uZWQoYWN0aW9uLAogICAgICAgIHpvbmVWYWx1ZXM6IF96b25lVmFsdWVzID8/PSB7X21lYXN1cmVyOiB0aGlzfSwKICAgICAgICB6b25lU3BlY2lmaWNhdGlvbjogX3pvbmVTcGVjaWZpY2F0aW9uID8/PSBuZXcgWm9uZVNwZWNpZmljYXRpb24oCiAgICAgICAgICAgIHJ1bjogX3J1biwgcnVuVW5hcnk6IF9ydW5VbmFyeSwgcnVuQmluYXJ5OiBfcnVuQmluYXJ5KSk7CiAgfQoKICAvLy8gUnVuIFtmXSBpbiBbem9uZV0uIFJ1bm5pbmcgbXVzdCBiZSBkZWxlZ2F0ZWQgdG8gW3BhcmVudF0gdG8gZW5zdXJlIHRoYXQKICAvLy8gdmFyaW91cyBzdGF0ZSBpcyBzZXQgdXAgY29ycmVjdGx5IChpbiBwYXJ0aWN1bGFyIHRoYXQgYFpvbmUuY3VycmVudGAKICAvLy8gaGFzIHRoZSByaWdodCB2YWx1ZSkuIFNpbmNlIFtfbWVhc3VyZVpvbmVkXSBjYW4gYmUgY2FsbGVkIHJlY3Vyc2l2ZWx5CiAgLy8vIChzeW5jaHJvbm91c2x5KSwgc29tZSBvZiB0aGUgbWVhc3VyaW5nIHpvbmVzIHdlIGNyZWF0ZSB3aWxsIGJlIHBhcmVudHMKICAvLy8gb2Ygb3RoZXIgbWVhc3VyaW5nIHpvbmVzLCBidXQgd2Ugc3RpbGwgbmVlZCB0byBjYWxsIHRocm91Z2ggdGhlIHBhcmVudAogIC8vLyBjaGFpbi4gQ29uc2VxdWVudGx5LCB3ZSB1c2UgYSB6b25lIHZhbHVlIGtleWVkIGJ5IFtfbWVhc3VyZXJdIHRvIHNlZSBpZgogIC8vLyB3ZSBzaG91bGQgbWVhc3VyZSBvciBub3Qgd2hlbiBkZWxlZ2F0aW5nLgogIFIgX3J1bjxSPihab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBmKCkpIHsKICAgIGlmICh6b25lW19tZWFzdXJlcl0gIT0gdGhpcykgcmV0dXJuIHBhcmVudC5ydW4oem9uZSwgZik7CiAgICBDb21waWxlclRhc2sgcHJldmlvdXMgPSBfc3RhcnQoKTsKICAgIHRyeSB7CiAgICAgIHJldHVybiBwYXJlbnQucnVuKHpvbmUsIGYpOwogICAgfSBmaW5hbGx5IHsKICAgICAgX3N0b3AocHJldmlvdXMpOwogICAgfQogIH0KCiAgLy8vIFNhbWUgYXMgW3J1bl0gZXhjZXB0IHRoYXQgW2ZdIHRha2VzIG9uZSBhcmd1bWVudCwgW2FyZ10uCiAgUiBfcnVuVW5hcnk8UiwgVD4oCiAgICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBSIGYoVCBhcmcpLCBUIGFyZykgewogICAgaWYgKHpvbmVbX21lYXN1cmVyXSAhPSB0aGlzKSByZXR1cm4gcGFyZW50LnJ1blVuYXJ5KHpvbmUsIGYsIGFyZyk7CiAgICBDb21waWxlclRhc2sgcHJldmlvdXMgPSBfc3RhcnQoKTsKICAgIHRyeSB7CiAgICAgIHJldHVybiBwYXJlbnQucnVuVW5hcnkoem9uZSwgZiwgYXJnKTsKICAgIH0gZmluYWxseSB7CiAgICAgIF9zdG9wKHByZXZpb3VzKTsKICAgIH0KICB9CgogIC8vLyBTYW1lIGFzIFtydW5dIGV4Y2VwdCB0aGF0IFtmXSB0YWtlcyB0d28gYXJndW1lbnRzIChbYTFdIGFuZCBbYTJdKS4KICBSIF9ydW5CaW5hcnk8UiwgVDEsIFQyPihab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwKICAgICAgUiBmKFQxIGExLCBUMiBhMiksIFQxIGExLCBUMiBhMikgewogICAgaWYgKHpvbmVbX21lYXN1cmVyXSAhPSB0aGlzKSByZXR1cm4gcGFyZW50LnJ1bkJpbmFyeSh6b25lLCBmLCBhMSwgYTIpOwogICAgQ29tcGlsZXJUYXNrIHByZXZpb3VzID0gX3N0YXJ0KCk7CiAgICB0cnkgewogICAgICByZXR1cm4gcGFyZW50LnJ1bkJpbmFyeSh6b25lLCBmLCBhMSwgYTIpOwogICAgfSBmaW5hbGx5IHsKICAgICAgX3N0b3AocHJldmlvdXMpOwogICAgfQogIH0KCiAgLy8vIEFzeW5jaHJvbm91cyB2ZXJzaW9uIG9mIFttZWFzdXJlXS4gVXNlIHRoaXMgd2hlbiBhY3Rpb24gcmV0dXJucyBhIGZ1dHVyZQogIC8vLyB0aGF0J3MgdHJ1bHkgYXN5bmNocm9ub3VzLCBzdWNoIEkvTy4gT25seSBvbmUgdGFzayBjYW4gdXNlIHRoaXMgbWV0aG9kCiAgLy8vIGNvbmN1cnJlbnRseS4KICAvLy8KICAvLy8gTm90ZTogd2UgYXNzdW1lIHRoYXQgdGhpcyBtZXRob2QgaXMgdXNlZCBvbmx5IGJ5IHRoZSBjb21waWxlciBpbnB1dAogIC8vLyBwcm92aWRlciwgYnV0IGl0IGNvdWxkIGJlIHVzZWQgYnkgb3RoZXIgdGFza3MgYXMgbG9uZyBhcyB0aGUgaW5wdXQKICAvLy8gcHJvdmlkZXIgd2lsbCBub3QgYmUgY2FsbGVkIGJ5IHRob3NlIHRhc2tzLgogIEZ1dHVyZTxUPiBtZWFzdXJlSW88VD4oRnV0dXJlPFQ+IGFjdGlvbigpKSB7CiAgICBpZiAoX2lzRGlzYWJsZWQpIHJldHVybiBhY3Rpb24oKTsKCiAgICBpZiAoX21lYXN1cmVyLl9jdXJyZW50QXN5bmNUYXNrID09IG51bGwpIHsKICAgICAgX21lYXN1cmVyLl9jdXJyZW50QXN5bmNUYXNrID0gdGhpczsKICAgIH0gZWxzZSBpZiAoX21lYXN1cmVyLl9jdXJyZW50QXN5bmNUYXNrICE9IHRoaXMpIHsKICAgICAgdGhyb3cgIkNhbid0IHRyYWNrIGFzeW5jIHRhc2sgJyRuYW1lJyBiZWNhdXNlIgogICAgICAgICAgIiAnJHtfbWVhc3VyZXIuX2N1cnJlbnRBc3luY1Rhc2submFtZX0nIGlzIGFscmVhZHkgYmVpbmcgdHJhY2tlZC4iOwogICAgfQogICAgX2FzeW5jQ291bnQrKzsKICAgIHJldHVybiBtZWFzdXJlKGFjdGlvbikud2hlbkNvbXBsZXRlKCgpIHsKICAgICAgX2FzeW5jQ291bnQtLTsKICAgICAgaWYgKF9hc3luY0NvdW50ID09IDApIF9tZWFzdXJlci5fY3VycmVudEFzeW5jVGFzayA9IG51bGw7CiAgICB9KTsKICB9CgogIC8vLyBNZWFzdXJlIHRoZSB0aW1lIHNwZW50IGluIFthY3Rpb25dIChpZiBpbiB2ZXJib3NlIG1vZGUpIGFuZCBhY2N1bXVsYXRlIGl0CiAgLy8vIHVuZGVyIGEgc3VidGFzayB3aXRoIHRoZSBnaXZlbiBuYW1lLgogIFQgbWVhc3VyZVN1YnRhc2s8VD4oU3RyaW5nIG5hbWUsIFQgYWN0aW9uKCkpIHsKICAgIGlmIChfaXNEaXNhYmxlZCkgcmV0dXJuIGFjdGlvbigpOwoKICAgIC8vIFVzZSBhIG5lc3RlZCBDb21waWxlclRhc2sgZm9yIHRoZSBtZWFzdXJlbWVudCB0byBlbnN1cmUgbmVzdGVkIFttZWFzdXJlXQogICAgLy8gY2FsbHMgd29yayBjb3JyZWN0bHkuIFRoZSBzdWJ0YXNrcyB3aWxsIG5ldmVyIHRoZW1zZWx2ZXMgaGF2ZSBuZXN0ZWQKICAgIC8vIHN1YnRhc2tzIGJlY2F1c2UgdGhleSBhcmUgbm90IGFjY2Vzc2libGUgb3V0c2lkZS4KICAgIEdlbmVyaWNUYXNrIHN1YnRhc2sgPSBfc3VidGFza3NbbmFtZV0gPz89IG5ldyBHZW5lcmljVGFzayhuYW1lLCBfbWVhc3VyZXIpOwogICAgcmV0dXJuIHN1YnRhc2subWVhc3VyZShhY3Rpb24pOwogIH0KCiAgLy8vIEFzeW5jaHJvbm91cyB2ZXJzaW9uIG9mIFttZWFzdXJlU3VidGFza10uIFVzZSB0aGlzIHdoZW4gYWN0aW9uIHJldHVybnMgYQogIC8vLyBmdXR1cmUgdGhhdCdzIHRydWx5IGFzeW5jaHJvbm91cywgc3VjaCBJL08uIE9ubHkgb25lIHRhc2sgY2FuIHVzZSB0aGlzCiAgLy8vIGNvbmN1cnJlbnRseS4KICAvLy8KICAvLy8gTm90ZTogd2UgYXNzdW1lIHRoYXQgdGhpcyBtZXRob2QgaXMgdXNlZCBvbmx5IGJ5IHRoZSBjb21waWxlciBpbnB1dAogIC8vLyBwcm92aWRlciwgYnV0IGl0IGNvdWxkIGJlIHVzZWQgYnkgb3RoZXIgdGFza3MgYXMgbG9uZyBhcyB0aGUgaW5wdXQKICAvLy8gcHJvdmlkZXIgd2lsbCBub3QgYmUgY2FsbGVkIGJ5IHRob3NlIHRhc2tzLgogIEZ1dHVyZTxUPiBtZWFzdXJlSW9TdWJ0YXNrPFQ+KFN0cmluZyBuYW1lLCBGdXR1cmU8VD4gYWN0aW9uKCkpIHsKICAgIGlmIChfaXNEaXNhYmxlZCkgcmV0dXJuIGFjdGlvbigpOwoKICAgIC8vIFVzZSBhIG5lc3RlZCBDb21waWxlclRhc2sgZm9yIHRoZSBtZWFzdXJlbWVudCB0byBlbnN1cmUgbmVzdGVkIFttZWFzdXJlXQogICAgLy8gY2FsbHMgd29yayBjb3JyZWN0bHkuIFRoZSBzdWJ0YXNrcyB3aWxsIG5ldmVyIHRoZW1zZWx2ZXMgaGF2ZSBuZXN0ZWQKICAgIC8vIHN1YnRhc2tzIGJlY2F1c2UgdGhleSBhcmUgbm90IGFjY2Vzc2libGUgb3V0c2lkZS4KICAgIEdlbmVyaWNUYXNrIHN1YnRhc2sgPSBfc3VidGFza3NbbmFtZV0gPz89IG5ldyBHZW5lcmljVGFzayhuYW1lLCBfbWVhc3VyZXIpOwogICAgcmV0dXJuIHN1YnRhc2subWVhc3VyZUlvKGFjdGlvbik7CiAgfQoKICBJdGVyYWJsZTxTdHJpbmc+IGdldCBzdWJ0YXNrcyA9PiBfc3VidGFza3Mua2V5czsKCiAgaW50IGdldFN1YnRhc2tUaW1lKFN0cmluZyBzdWJ0YXNrKSA9PiBfc3VidGFza3Nbc3VidGFza10udGltaW5nOwoKICBib29sIGdldFN1YnRhc2tJc1J1bm5pbmcoU3RyaW5nIHN1YnRhc2spID0+IF9zdWJ0YXNrc1tzdWJ0YXNrXS5pc1J1bm5pbmc7Cn0KCmNsYXNzIEdlbmVyaWNUYXNrIGV4dGVuZHMgQ29tcGlsZXJUYXNrIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBHZW5lcmljVGFzayh0aGlzLm5hbWUsIE1lYXN1cmVyIG1lYXN1cmVyKSA6IHN1cGVyKG1lYXN1cmVyKTsKfQoKY2xhc3MgTWVhc3VyZXIgewogIC8vLyBNZWFzdXJlcyB0aGUgdG90YWwgcnVudGltZSBmcm9tIHRoaXMgb2JqZWN0IHdhcyBjb25zdHJ1Y3RlZC4KICAvLy8KICAvLy8gTm90ZTogTVVTVCBiZSB0aGUgZmlyc3QgZmllbGQgb2YgdGhpcyBjbGFzcyB0byBlbnN1cmUgW3dhbGxjbG9ja10gaXMKICAvLy8gc3RhcnRlZCBiZWZvcmUgb3RoZXIgY29tcHV0YXRpb25zLgogIGZpbmFsIFN0b3B3YXRjaCBfd2FsbENsb2NrID0gbmV3IFN0b3B3YXRjaCgpLi5zdGFydCgpOwoKICBEdXJhdGlvbiBnZXQgZWxhcHNlZFdhbGxDbG9jayA9PiBfd2FsbENsb2NrLmVsYXBzZWQ7CgogIC8vLyBNZWFzdXJlcyBnYXBzIGJldHdlZW4gem9uZWQgY2xvc3VyZXMgZHVlIHRvIGFzeW5jaHJvbmljaXR5LgogIGZpbmFsIFN0b3B3YXRjaCBfYXN5bmNXYWxsQ2xvY2sgPSBuZXcgU3RvcHdhdGNoKCk7CgogIER1cmF0aW9uIGdldCBlbGFwc2VkQXN5bmNXYWxsQ2xvY2sgPT4gX2FzeW5jV2FsbENsb2NrLmVsYXBzZWQ7CgogIC8vLyBXaGV0aGVyIG1lYXN1cmVtZW50IG9mIHRhc2tzIGlzIGVuYWJsZWQuCiAgZmluYWwgYm9vbCBlbmFibGVUYXNrTWVhc3VyZW1lbnRzOwoKICBzdGF0aWMgaW50IF9oYXNoQ29kZUdlbmVyYXRvciA9IDE5NzsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGUgPSBfaGFzaENvZGVHZW5lcmF0b3IrKzsKCiAgTWVhc3VyZXIoe3RoaXMuZW5hYmxlVGFza01lYXN1cmVtZW50czogZmFsc2V9KTsKCiAgLy8vIFRoZSBjdXJyZW50bHkgcnVubmluZyB0YXNrLCB0aGF0IGlzLCB0aGUgdGFzayB3aG9zZSBbU3RvcHdhdGNoXSBpcwogIC8vLyBjdXJyZW50bHkgcnVubmluZy4KICBDb21waWxlclRhc2sgX2N1cnJlbnRUYXNrOwoKICAvLy8gVGhlIGN1cnJlbnQgdGFzayB3aGljaCBzaG91bGQgYmUgY2hhcmdlZCBmb3IgYXN5bmNocm9ub3VzIGdhcHMuCiAgQ29tcGlsZXJUYXNrIF9jdXJyZW50QXN5bmNUYXNrOwoKICAvLy8gU3RhcnQgY291bnRpbmcgdGhlIHRvdGFsIGVsYXBzZWQgdGltZSBzaW5jZSB0aGUgY29tcGlsZXIgc3RhcnRlZC4KICB2b2lkIHN0YXJ0V2FsbENsb2NrKCkgewogICAgX3dhbGxDbG9jay5zdGFydCgpOwogIH0KCiAgLy8vIFN0YXJ0IGNvdW50aW5nIHRoZSB0b3RhbCBlbGFwc2VkIHRpbWUgc2luY2UgdGhlIGNvbXBpbGVyIHN0YXJ0ZWQuCiAgdm9pZCBzdG9wV2FsbENsb2NrKCkgewogICAgX3dhbGxDbG9jay5zdG9wKCk7CiAgfQoKICAvLy8gQ2FsbCB0aGlzIGJlZm9yZSByZXR1cm5pbmcgdG8gdGhlIGV2ZW50bG9vcC4KICB2b2lkIHN0YXJ0QXN5bmNXYWxsQ2xvY2soKSB7CiAgICBpZiAoX2N1cnJlbnRBc3luY1Rhc2sgIT0gbnVsbCkgewogICAgICBfY3VycmVudEFzeW5jVGFzay5fd2F0Y2guc3RhcnQoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9hc3luY1dhbGxDbG9jay5zdGFydCgpOwogICAgfQogIH0KCiAgLy8vIENhbGwgdGhpcyB3aGVuIHRoZSBldmVudGxvb3AgcmV0dXJucyBjb250cm9sIHRvIHVzLgogIHZvaWQgc3RvcEFzeW5jV2FsbENsb2NrKCkgewogICAgaWYgKF9jdXJyZW50QXN5bmNUYXNrICE9IG51bGwpIHsKICAgICAgX2N1cnJlbnRBc3luY1Rhc2suX3dhdGNoLnN0b3AoKTsKICAgIH0KICAgIF9hc3luY1dhbGxDbG9jay5zdG9wKCk7CiAgfQp9CoEUAE5OPAEeARRCATkET1EqKx4cGkYBFwFOGigTAR9MAU81KgE0Bk8gOwEzARMfLDQfBhIEARorJTQhBhIEAUtODk4BTTIaIjQjMkoSJBQVBAFMMyYdExwfDUtGJwYnBAEjTlBPDgEcATo6ARw3SUUEAU5LTE1NTjBAPSYKIhAXBgQBPxVGRyYKLBAXBgQBSUUpSyYKMBAXBgQBT00UBkpJMi8mAS8qNjVOBhMtFUAIBAFQKzEmAVBMOVAkBAFPTRQGSkkyQyYBUEw5UCYEATMBQwFMAgEpDBU/AgERQwZLKTkBNwFCNQFBAS8lAScMLQEyAUkZHQFGIgFIGhgEAUgZFwQBMx8lKA0fBgQBOh4lJwYcBAIBJnBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbW1vbi90YXNrcy5kYXJ0KXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2NvbW1vbi5kYXJ0g1gvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIExpYnJhcnkgdGhhdCByZS1leHBvcnRzIGxpYnJhcmllcyB1c2VkIHRocm91Z2hvdXQgdGhlIGNvbXBpbGVyIHJlZ2FyZGxlc3MKLy8vIG9mIHBoYXNlIG9yIHN1YmZ1bmN0aW9uYWxpdHkuCmxpYnJhcnkgZGFydDJqcy5jb21tb247CgpleHBvcnQgJ2RpYWdub3N0aWNzL2RpYWdub3N0aWNfbGlzdGVuZXIuZGFydCcKICAgIHNob3cgRGlhZ25vc3RpY01lc3NhZ2UsIERpYWdub3N0aWNSZXBvcnRlcjsKZXhwb3J0ICdkaWFnbm9zdGljcy9pbnZhcmlhbnQuZGFydCcgc2hvdyBhc3NlcnREZWJ1Z01vZGUsIGZhaWxlZEF0OwpleHBvcnQgJ2RpYWdub3N0aWNzL21lc3NhZ2VzLmRhcnQnIHNob3cgTWVzc2FnZUtpbmQ7CmV4cG9ydCAnZGlhZ25vc3RpY3Mvc291cmNlX3NwYW4uZGFydCcgc2hvdyBTb3VyY2VTcGFuOwpleHBvcnQgJ2RpYWdub3N0aWNzL3NwYW5uYWJsZS5kYXJ0JwogICAgc2hvdwogICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgIFNwYW5uYWJsZSwKICAgICAgICBTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlOwpleHBvcnQgJ2hlbHBlcnMvaGVscGVycy5kYXJ0JzsKCmJvb2wgcmV0YWluRGF0YUZvclRlc3RpbmcgPSBmYWxzZTsKGABOTjwBTiIYAS4wRDU3JAkjHxMjHwEjASBwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24uZGFydCtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21waWxlci5kYXJ0wACKPC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY29tcGlsZXJfYmFzZTsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JwogICAgc2hvdyBjbGVhclN0cmluZ1Rva2VuQ2Fub25pY2FsaXplcjsKCmltcG9ydCAnLi4vY29tcGlsZXJfbmV3LmRhcnQnIGFzIGFwaTsKaW1wb3J0ICdiYWNrZW5kX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJ2NvbW1vbi9jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJ2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IFNlbGVjdG9ycywgVXJpczsKaW1wb3J0ICdjb21tb24vdGFza3MuZGFydCcgc2hvdyBDb21waWxlclRhc2ssIEdlbmVyaWNUYXNrLCBNZWFzdXJlcjsKaW1wb3J0ICdjb21tb24vd29yay5kYXJ0JyBzaG93IFdvcmtJdGVtOwppbXBvcnQgJ2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICdjb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnZGVmZXJyZWRfbG9hZC5kYXJ0JyBzaG93IERlZmVycmVkTG9hZFRhc2ssIE91dHB1dFVuaXREYXRhOwppbXBvcnQgJ2RpYWdub3N0aWNzL2NvZGVfbG9jYXRpb24uZGFydCc7CmltcG9ydCAnZGlhZ25vc3RpY3MvZGlhZ25vc3RpY19saXN0ZW5lci5kYXJ0JyBzaG93IERpYWdub3N0aWNSZXBvcnRlcjsKaW1wb3J0ICdkaWFnbm9zdGljcy9tZXNzYWdlcy5kYXJ0JyBzaG93IE1lc3NhZ2UsIE1lc3NhZ2VUZW1wbGF0ZTsKaW1wb3J0ICdkdW1wX2luZm8uZGFydCcgc2hvdyBEdW1wSW5mb1Rhc2s7CmltcG9ydCAnZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnZW5xdWV1ZS5kYXJ0JyBzaG93IEVucXVldWVyLCBFbnF1ZXVlVGFzaywgUmVzb2x1dGlvbkVucXVldWVyOwppbXBvcnQgJ2Vudmlyb25tZW50LmRhcnQnOwppbXBvcnQgJ2Zyb250ZW5kX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJ2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JyBzaG93IEFic3RyYWN0VmFsdWVTdHJhdGVneTsKaW1wb3J0ICdpbmZlcnJlci90cml2aWFsLmRhcnQnIHNob3cgVHJpdmlhbEFic3RyYWN0VmFsdWVTdHJhdGVneTsKaW1wb3J0ICdpbmZlcnJlci90eXBlbWFza3MvbWFza3MuZGFydCcgc2hvdyBUeXBlTWFza1N0cmF0ZWd5OwppbXBvcnQgJ2luZmVycmVyL3R5cGVzLmRhcnQnCiAgICBzaG93IEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzLCBHbG9iYWxUeXBlSW5mZXJlbmNlVGFzazsKaW1wb3J0ICdpby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCcgc2hvdyBTb3VyY2VJbmZvcm1hdGlvbjsKaW1wb3J0ICdqc19iYWNrZW5kL2JhY2tlbmQuZGFydCcgc2hvdyBDb2RlZ2VuSW5wdXRzLCBKYXZhU2NyaXB0SW1wYWN0U3RyYXRlZ3k7CmltcG9ydCAnanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnQnOwppbXBvcnQgJ2pzX21vZGVsL2pzX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJ2tlcm5lbC9rZXJuZWxfc3RyYXRlZ3kuZGFydCc7CmltcG9ydCAna2VybmVsL2xvYWRlci5kYXJ0JyBzaG93IEtlcm5lbExvYWRlclRhc2ssIEtlcm5lbFJlc3VsdDsKaW1wb3J0ICdudWxsX2NvbXBpbGVyX291dHB1dC5kYXJ0JyBzaG93IE51bGxDb21waWxlck91dHB1dDsKaW1wb3J0ICdvcHRpb25zLmRhcnQnIHNob3cgQ29tcGlsZXJPcHRpb25zLCBEaWFnbm9zdGljT3B0aW9uczsKaW1wb3J0ICdzZXJpYWxpemF0aW9uL3Rhc2suZGFydCc7CmltcG9ydCAnc2VyaWFsaXphdGlvbi9zdHJhdGVnaWVzLmRhcnQnOwppbXBvcnQgJ3NzYS9ub2Rlcy5kYXJ0JyBzaG93IEhJbnN0cnVjdGlvbjsKaW1wb3J0ICd1bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJ3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS9yZXNvbHV0aW9uX3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAndW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IEltcGFjdFN0cmF0ZWd5LCBXb3JsZEltcGFjdCwgV29ybGRJbXBhY3RCdWlsZGVySW1wbDsKaW1wb3J0ICd3b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZCwgS0Nsb3NlZFdvcmxkOwoKdHlwZWRlZiBDb21waWxlckRpYWdub3N0aWNSZXBvcnRlciBNYWtlUmVwb3J0ZXJGdW5jdGlvbigKICAgIENvbXBpbGVyIGNvbXBpbGVyLCBDb21waWxlck9wdGlvbnMgb3B0aW9ucyk7CgphYnN0cmFjdCBjbGFzcyBDb21waWxlciB7CiAgTWVhc3VyZXIgZ2V0IG1lYXN1cmVyOwoKICBhcGkuQ29tcGlsZXJJbnB1dCBnZXQgcHJvdmlkZXI7CgogIEZyb250ZW5kU3RyYXRlZ3kgZnJvbnRlbmRTdHJhdGVneTsKICBCYWNrZW5kU3RyYXRlZ3kgYmFja2VuZFN0cmF0ZWd5OwogIENvbXBpbGVyRGlhZ25vc3RpY1JlcG9ydGVyIF9yZXBvcnRlcjsKICBNYXA8RW50aXR5LCBXb3JsZEltcGFjdD4gX2ltcGFjdENhY2hlOwogIEltcGFjdENhY2hlRGVsZXRlciBfaW1wYWN0Q2FjaGVEZWxldGVyOwoKICBJbXBhY3RTdHJhdGVneSBpbXBhY3RTdHJhdGVneSA9IGNvbnN0IEltcGFjdFN0cmF0ZWd5KCk7CgogIC8vLyBPcHRpb25zIHByb3ZpZGVkIGZyb20gY29tbWFuZC1saW5lIGFyZ3VtZW50cy4KICBmaW5hbCBDb21waWxlck9wdGlvbnMgb3B0aW9uczsKCiAgLy8gVGhlc2UgaW50ZXJuYWwgZmxhZ3MgYXJlIHVzZWQgdG8gc3RvcCBjb21waWxhdGlvbiBhZnRlciBhIHNwZWNpZmljIHBoYXNlLgogIC8vIFVzZWQgb25seSBmb3IgZGVidWdnaW5nIGFuZCB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuCiAgYm9vbCBzdG9wQWZ0ZXJDbG9zZWRXb3JsZCA9IGZhbHNlOwogIGJvb2wgc3RvcEFmdGVyVHlwZUluZmVyZW5jZSA9IGZhbHNlOwoKICAvLy8gT3V0cHV0IHByb3ZpZGVyIGZyb20gdXNlciBvZiBDb21waWxlciBBUEkuCiAgYXBpLkNvbXBpbGVyT3V0cHV0IF9vdXRwdXRQcm92aWRlcjsKCiAgYXBpLkNvbXBpbGVyT3V0cHV0IGdldCBvdXRwdXRQcm92aWRlciA9PiBfb3V0cHV0UHJvdmlkZXI7CgogIExpc3Q8Q29kZUxvY2F0aW9uPiBfdXNlckNvZGVMb2NhdGlvbnMgPSA8Q29kZUxvY2F0aW9uPltdOwoKICBKQ2xvc2VkV29ybGQgYmFja2VuZENsb3NlZFdvcmxkRm9yVGVzdGluZzsKCiAgRGlhZ25vc3RpY1JlcG9ydGVyIGdldCByZXBvcnRlciA9PiBfcmVwb3J0ZXI7CiAgTWFwPEVudGl0eSwgV29ybGRJbXBhY3Q+IGdldCBpbXBhY3RDYWNoZSA9PiBfaW1wYWN0Q2FjaGU7CiAgSW1wYWN0Q2FjaGVEZWxldGVyIGdldCBpbXBhY3RDYWNoZURlbGV0ZXIgPT4gX2ltcGFjdENhY2hlRGVsZXRlcjsKCiAgZmluYWwgRW52aXJvbm1lbnQgZW52aXJvbm1lbnQ7CiAgLy8gVE9ETyhzaWdtdW5kKTogZGVsZXRlIG9uY2Ugd2UgbWlncmF0ZSB0aGUgcmVzdCBvZiB0aGUgY29tcGlsZXIgdG8gdXNlCiAgLy8gYGVudmlyb25tZW50YCBkaXJlY3RseS4KICBAZGVwcmVjYXRlZAogIGZyb21FbnZpcm9ubWVudChTdHJpbmcgbmFtZSkgPT4gZW52aXJvbm1lbnQudmFsdWVPZihuYW1lKTsKCiAgRW50aXR5IGdldCBjdXJyZW50RWxlbWVudCA9PiBfcmVwb3J0ZXIuY3VycmVudEVsZW1lbnQ7CgogIExpc3Q8Q29tcGlsZXJUYXNrPiB0YXNrczsKICBLZXJuZWxMb2FkZXJUYXNrIGtlcm5lbExvYWRlcjsKICBHbG9iYWxUeXBlSW5mZXJlbmNlVGFzayBnbG9iYWxJbmZlcmVuY2U7CiAgQ29kZWdlbldvcmxkQnVpbGRlciBfY29kZWdlbldvcmxkQnVpbGRlcjsKCiAgQWJzdHJhY3RWYWx1ZVN0cmF0ZWd5IGFic3RyYWN0VmFsdWVTdHJhdGVneTsKCiAgR2VuZXJpY1Rhc2sgc2VsZlRhc2s7CgogIEVucXVldWVUYXNrIGVucXVldWVyOwogIERlZmVycmVkTG9hZFRhc2sgZGVmZXJyZWRMb2FkVGFzazsKICBEdW1wSW5mb1Rhc2sgZHVtcEluZm9UYXNrOwogIFNlcmlhbGl6YXRpb25UYXNrIHNlcmlhbGl6YXRpb25UYXNrOwoKICBib29sIGdldCBoYXNDcmFzaGVkID0+IF9yZXBvcnRlci5oYXNDcmFzaGVkOwoKICBQcm9ncmVzcyBwcm9ncmVzcyA9IGNvbnN0IFByb2dyZXNzKCk7CgogIHN0YXRpYyBjb25zdCBpbnQgUEhBU0VfU0NBTk5JTkcgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgUEhBU0VfUkVTT0xWSU5HID0gMTsKICBzdGF0aWMgY29uc3QgaW50IFBIQVNFX0RPTkVfUkVTT0xWSU5HID0gMjsKICBzdGF0aWMgY29uc3QgaW50IFBIQVNFX0NPTVBJTElORyA9IDM7CiAgaW50IHBoYXNlOwoKICBib29sIGNvbXBpbGF0aW9uRmFpbGVkID0gZmFsc2U7CgogIC8vIENhbGxiYWNrIGZ1bmN0aW9uIHVzZWQgZm9yIHRlc3RpbmcgcmVzb2x1dGlvbiBlbnF1ZXVpbmcuCiAgdm9pZCBGdW5jdGlvbigpIG9uUmVzb2x1dGlvblF1ZXVlRW1wdHlGb3JUZXN0aW5nOwoKICAvLyBDYWxsYmFjayBmdW5jdGlvbiB1c2VkIGZvciB0ZXN0aW5nIGNvZGVnZW4gZW5xdWV1aW5nLgogIHZvaWQgRnVuY3Rpb24oKSBvbkNvZGVnZW5RdWV1ZUVtcHR5Rm9yVGVzdGluZzsKCiAgQ29tcGlsZXIoCiAgICAgIHtDb21waWxlck9wdGlvbnMgb3B0aW9ucywKICAgICAgYXBpLkNvbXBpbGVyT3V0cHV0IG91dHB1dFByb3ZpZGVyLAogICAgICB0aGlzLmVudmlyb25tZW50OiBjb25zdCBfRW1wdHlFbnZpcm9ubWVudCgpLAogICAgICBNYWtlUmVwb3J0ZXJGdW5jdGlvbiBtYWtlUmVwb3J0ZXJ9KQogICAgICA6IHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgewogICAgb3B0aW9ucy5kZXJpdmVPcHRpb25zKCk7CiAgICBvcHRpb25zLnZhbGlkYXRlKCk7CgogICAgYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5ID0gb3B0aW9ucy51c2VUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgID8gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWVTdHJhdGVneSgpCiAgICAgICAgOiBjb25zdCBUeXBlTWFza1N0cmF0ZWd5KCk7CiAgICBDb21waWxlclRhc2sga2VybmVsRnJvbnRFbmRUYXNrOwogICAgc2VsZlRhc2sgPSBuZXcgR2VuZXJpY1Rhc2soJ3NlbGYnLCBtZWFzdXJlcik7CiAgICBfb3V0cHV0UHJvdmlkZXIgPSBuZXcgX0NvbXBpbGVyT3V0cHV0KHRoaXMsIG91dHB1dFByb3ZpZGVyKTsKICAgIGlmIChtYWtlUmVwb3J0ZXIgIT0gbnVsbCkgewogICAgICBfcmVwb3J0ZXIgPSBtYWtlUmVwb3J0ZXIodGhpcywgb3B0aW9ucyk7CiAgICB9IGVsc2UgewogICAgICBfcmVwb3J0ZXIgPSBuZXcgQ29tcGlsZXJEaWFnbm9zdGljUmVwb3J0ZXIodGhpcywgb3B0aW9ucyk7CiAgICB9CiAgICBrZXJuZWxGcm9udEVuZFRhc2sgPSBuZXcgR2VuZXJpY1Rhc2soJ0Zyb250IGVuZCcsIG1lYXN1cmVyKTsKICAgIGZyb250ZW5kU3RyYXRlZ3kgPSBuZXcgS2VybmVsRnJvbnRlbmRTdHJhdGVneSgKICAgICAgICBrZXJuZWxGcm9udEVuZFRhc2ssIG9wdGlvbnMsIHJlcG9ydGVyLCBlbnZpcm9ubWVudCk7CiAgICBiYWNrZW5kU3RyYXRlZ3kgPSBjcmVhdGVCYWNrZW5kU3RyYXRlZ3koKTsKICAgIF9pbXBhY3RDYWNoZSA9IDxFbnRpdHksIFdvcmxkSW1wYWN0Pnt9OwogICAgX2ltcGFjdENhY2hlRGVsZXRlciA9IG5ldyBfTWFwSW1wYWN0Q2FjaGVEZWxldGVyKF9pbXBhY3RDYWNoZSk7CgogICAgaWYgKG9wdGlvbnMuc2hvd0ludGVybmFsUHJvZ3Jlc3MpIHsKICAgICAgcHJvZ3Jlc3MgPSBuZXcgSW50ZXJhY3RpdmVQcm9ncmVzcygpOwogICAgfQoKICAgIGVucXVldWVyID0gbmV3IEVucXVldWVUYXNrKHRoaXMpOwoKICAgIHRhc2tzID0gWwogICAgICBrZXJuZWxMb2FkZXIgPSBuZXcgS2VybmVsTG9hZGVyVGFzaygKICAgICAgICAgIG9wdGlvbnMsIHByb3ZpZGVyLCBfb3V0cHV0UHJvdmlkZXIsIHJlcG9ydGVyLCBtZWFzdXJlciksCiAgICAgIGtlcm5lbEZyb250RW5kVGFzaywKICAgICAgZ2xvYmFsSW5mZXJlbmNlID0gbmV3IEdsb2JhbFR5cGVJbmZlcmVuY2VUYXNrKHRoaXMpLAogICAgICBkZWZlcnJlZExvYWRUYXNrID0gZnJvbnRlbmRTdHJhdGVneS5jcmVhdGVEZWZlcnJlZExvYWRUYXNrKHRoaXMpLAogICAgICAvLyBbZW5xdWV1ZXJdIGlzIGNyZWF0ZWQgZWFybGllciBiZWNhdXNlIGl0IGNvbnRhaW5zIHRoZSByZXNvbHV0aW9uIHdvcmxkCiAgICAgIC8vIG9iamVjdHMgbmVlZGVkIGJ5IG90aGVyIHRhc2tzLgogICAgICBlbnF1ZXVlciwKICAgICAgZHVtcEluZm9UYXNrID0gbmV3IER1bXBJbmZvVGFzayh0aGlzKSwKICAgICAgc2VsZlRhc2ssCiAgICAgIHNlcmlhbGl6YXRpb25UYXNrID0gbmV3IFNlcmlhbGl6YXRpb25UYXNrKAogICAgICAgICAgb3B0aW9ucywgcmVwb3J0ZXIsIHByb3ZpZGVyLCBvdXRwdXRQcm92aWRlciwgbWVhc3VyZXIpLAogICAgXTsKCiAgICB0YXNrcy5hZGRBbGwoYmFja2VuZFN0cmF0ZWd5LnRhc2tzKTsKICB9CgogIC8vLyBDcmVhdGVzIHRoZSBiYWNrZW5kIHN0cmF0ZWd5LgogIC8vLwogIC8vLyBPdmVycmlkZSB0aGlzIHRvIG1vY2sgdGhlIGJhY2tlbmQgc3RyYXRlZ3kgZm9yIHRlc3RpbmcuCiAgQmFja2VuZFN0cmF0ZWd5IGNyZWF0ZUJhY2tlbmRTdHJhdGVneSgpIHsKICAgIHJldHVybiBuZXcgSnNCYWNrZW5kU3RyYXRlZ3kodGhpcyk7CiAgfQoKICBSZXNvbHV0aW9uV29ybGRCdWlsZGVyIGdldCByZXNvbHV0aW9uV29ybGRCdWlsZGVyID0+CiAgICAgIGVucXVldWVyLnJlc29sdXRpb24ud29ybGRCdWlsZGVyOwoKICBDb2RlZ2VuV29ybGRCdWlsZGVyIGdldCBjb2RlZ2VuV29ybGRCdWlsZGVyIHsKICAgIGFzc2VydCgKICAgICAgICBfY29kZWdlbldvcmxkQnVpbGRlciAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgIkNvZGVnZW5Xb3JsZEJ1aWxkZXIgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgeWV0LiIpKTsKICAgIHJldHVybiBfY29kZWdlbldvcmxkQnVpbGRlcjsKICB9CgogIENvZGVnZW5Xb3JsZCBjb2RlZ2VuV29ybGRGb3JUZXN0aW5nOwoKICBib29sIGdldCBkaXNhYmxlVHlwZUluZmVyZW5jZSA9PgogICAgICBvcHRpb25zLmRpc2FibGVUeXBlSW5mZXJlbmNlIHx8IGNvbXBpbGF0aW9uRmFpbGVkOwoKICAvLyBDb21waWxlcyB0aGUgZGFydCBzY3JpcHQgYXQgW3VyaV0uCiAgLy8KICAvLyBUaGUgcmVzdWx0aW5nIGZ1dHVyZSB3aWxsIGNvbXBsZXRlIHdpdGggdHJ1ZSBpZiB0aGUgY29tcGlsYXRpb24KICAvLyBzdWNjZWVkZWQuCiAgRnV0dXJlPGJvb2w+IHJ1bihVcmkgdXJpKSA9PiBzZWxmVGFzay5tZWFzdXJlU3VidGFzaygicnVuIiwgKCkgewogICAgICAgIG1lYXN1cmVyLnN0YXJ0V2FsbENsb2NrKCk7CgogICAgICAgIHJldHVybiBuZXcgRnV0dXJlLnN5bmMoKCkgPT4gcnVuSW50ZXJuYWwodXJpKSkKICAgICAgICAgICAgLmNhdGNoRXJyb3IoKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpID0+CiAgICAgICAgICAgICAgICBfcmVwb3J0ZXIub25FcnJvcih1cmksIGVycm9yLCBzdGFja1RyYWNlKSkKICAgICAgICAgICAgLndoZW5Db21wbGV0ZSgoKSB7CiAgICAgICAgICBtZWFzdXJlci5zdG9wV2FsbENsb2NrKCk7CiAgICAgICAgfSkudGhlbigoXykgewogICAgICAgICAgcmV0dXJuICFjb21waWxhdGlvbkZhaWxlZDsKICAgICAgICB9KTsKICAgICAgfSk7CgogIEZ1dHVyZSBydW5JbnRlcm5hbChVcmkgdXJpKSBhc3luYyB7CiAgICBjbGVhclN0YXRlKCk7CiAgICBhc3NlcnQodXJpICE9IG51bGwpOwogICAgLy8gQXMgZmFyIGFzIEkgY2FuIHRlbGwsIHRoaXMgYnJhbmNoIGlzIG9ubHkgdXNlZCBieSB0ZXN0IGNvZGUuCiAgICByZXBvcnRlci5sb2coJ0NvbXBpbGluZyAkdXJpICgke29wdGlvbnMuYnVpbGRJZH0pJyk7CgogICAgaWYgKG9wdGlvbnMucmVhZERhdGFVcmkgIT0gbnVsbCkgewogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyA9CiAgICAgICAgICBhd2FpdCBzZXJpYWxpemF0aW9uVGFzay5kZXNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2UoCiAgICAgICAgICAgICAgZW52aXJvbm1lbnQsIGFic3RyYWN0VmFsdWVTdHJhdGVneSk7CiAgICAgIGlmIChvcHRpb25zLmRlYnVnR2xvYmFsSW5mZXJlbmNlKSB7CiAgICAgICAgcGVyZm9ybUdsb2JhbFR5cGVJbmZlcmVuY2UoZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMuY2xvc2VkV29ybGQpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBhd2FpdCBnZW5lcmF0ZUphdmFTY3JpcHRDb2RlKGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzKTsKICAgIH0gZWxzZSB7CiAgICAgIEtlcm5lbFJlc3VsdCByZXN1bHQgPSBhd2FpdCBrZXJuZWxMb2FkZXIubG9hZCh1cmkpOwogICAgICByZXBvcnRlci5sb2coIktlcm5lbCBsb2FkIGNvbXBsZXRlIik7CiAgICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgcmV0dXJuOwogICAgICBpZiAoY29tcGlsYXRpb25GYWlsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKG9wdGlvbnMuY2ZlT25seSkgcmV0dXJuOwoKICAgICAgZnJvbnRlbmRTdHJhdGVneS5yZWdpc3RlckxvYWRlZExpYnJhcmllcyhyZXN1bHQpOwoKICAgICAgLy8gVE9ETyhlZm9ydHVuYSwgc2lnbXVuZCk6IFRoZXNlIHZhbGlkYXRpb24gc3RlcHMgc2hvdWxkIGJlIGRvbmUgaW4gdGhlCiAgICAgIC8vIGZyb250IGVuZCBmb3IgdGhlIEtlcm5lbCBwYXRoIHNpbmNlIEtlcm5lbCBkb2Vzbid0IGhhdmUgdGhlIG5vdGlvbiBvZgogICAgICAvLyBpbXBvcnRzIChldmVyeXRoaW5nIGhhcyBhbHJlYWR5IGJlZW4gcmVzb2x2ZWQpLiAoU2VlCiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8yOTM2OCkKICAgICAgaWYgKHJlc3VsdC5saWJyYXJpZXMuY29udGFpbnMoVXJpcy5kYXJ0X21pcnJvcnMpKSB7CiAgICAgICAgcmVwb3J0ZXIucmVwb3J0V2FybmluZ01lc3NhZ2UoTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgICBNZXNzYWdlS2luZC5NSVJST1JTX0xJQlJBUllfTk9UX1NVUFBPUlRfV0lUSF9DRkUpOwogICAgICB9CgogICAgICBhd2FpdCBjb21waWxlRnJvbUtlcm5lbChyZXN1bHQucm9vdExpYnJhcnlVcmksIHJlc3VsdC5saWJyYXJpZXMpOwogICAgfQogIH0KCiAgdm9pZCBnZW5lcmF0ZUphdmFTY3JpcHRDb2RlKAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cykgYXN5bmMgewogICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMuY2xvc2VkV29ybGQ7CiAgICBiYWNrZW5kU3RyYXRlZ3kucmVnaXN0ZXJKQ2xvc2VkV29ybGQoY2xvc2VkV29ybGQpOwogICAgcGhhc2UgPSBQSEFTRV9DT01QSUxJTkc7CiAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW5JbnB1dHMgPQogICAgICAgIGJhY2tlbmRTdHJhdGVneS5vbkNvZGVnZW5TdGFydChnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyk7CgogICAgaWYgKG9wdGlvbnMucmVhZENvZGVnZW5VcmkgIT0gbnVsbCkgewogICAgICBDb2RlZ2VuUmVzdWx0cyBjb2RlZ2VuUmVzdWx0cyA9CiAgICAgICAgICBhd2FpdCBzZXJpYWxpemF0aW9uVGFzay5kZXNlcmlhbGl6ZUNvZGVnZW4oCiAgICAgICAgICAgICAgYmFja2VuZFN0cmF0ZWd5LCBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cywgY29kZWdlbklucHV0cyk7CiAgICAgIHJlcG9ydGVyLmxvZygnQ29tcGlsaW5nIG1ldGhvZHMnKTsKICAgICAgcnVuQ29kZWdlbkVucXVldWVyKGNvZGVnZW5SZXN1bHRzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlcG9ydGVyLmxvZygnQ29tcGlsaW5nIG1ldGhvZHMnKTsKICAgICAgQ29kZWdlblJlc3VsdHMgY29kZWdlblJlc3VsdHMgPSBuZXcgT25EZW1hbmRDb2RlZ2VuUmVzdWx0cygKICAgICAgICAgIGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzLAogICAgICAgICAgY29kZWdlbklucHV0cywKICAgICAgICAgIGJhY2tlbmRTdHJhdGVneS5mdW5jdGlvbkNvbXBpbGVyKTsKICAgICAgaWYgKG9wdGlvbnMud3JpdGVDb2RlZ2VuVXJpICE9IG51bGwpIHsKICAgICAgICBzZXJpYWxpemF0aW9uVGFzay5zZXJpYWxpemVDb2RlZ2VuKGJhY2tlbmRTdHJhdGVneSwgY29kZWdlblJlc3VsdHMpOwogICAgICB9IGVsc2UgewogICAgICAgIHJ1bkNvZGVnZW5FbnF1ZXVlcihjb2RlZ2VuUmVzdWx0cyk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBDbGVhciB0aGUgaW50ZXJuYWwgY29tcGlsZXIgc3RhdGUgdG8gcHJldmVudCBtZW1vcnkgbGVha3Mgd2hlbiBpbnZva2luZwogIC8vLyB0aGUgY29tcGlsZXIgbXVsdGlwbGUgdGltZXMgKGUuZy4gaW4gYmF0Y2ggbW9kZSkuCiAgLy8gVE9ETyhhaGUpOiBpbXBsZW1lbnQgYSBiZXR0ZXIgbWVjaGFuaXNtIHdoZXJlIHdlIGNhbiBzdG9yZQogIC8vIHN1Y2ggY2FjaGVzIGluIHRoZSBjb21waWxlciBhbmQgZ2V0IGFjY2VzcyB0byB0aGVtIHRocm91Z2ggYQogIC8vIHN1aXRhYmx5IG1haW50YWluZWQgc3RhdGljIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBjb21waWxlci4KICB2b2lkIGNsZWFyU3RhdGUoKSB7CiAgICBjbGVhclN0cmluZ1Rva2VuQ2Fub25pY2FsaXplcigpOwogICAgU2VsZWN0b3IuY2Fub25pY2FsaXplZFZhbHVlcy5jbGVhcigpOwoKICAgIC8vIFRoZSBzZWxlY3RvciBvYmplY3RzIGhlbGQgaW4gc3RhdGljIGZpZWxkcyBtdXN0IHJlbWFpbiBjYW5vbmljYWwuCiAgICBmb3IgKFNlbGVjdG9yIHNlbGVjdG9yIGluIFNlbGVjdG9ycy5BTEwpIHsKICAgICAgU2VsZWN0b3IuY2Fub25pY2FsaXplZFZhbHVlcwogICAgICAgICAgLnB1dElmQWJzZW50KHNlbGVjdG9yLmhhc2hDb2RlLCAoKSA9PiA8U2VsZWN0b3I+W10pCiAgICAgICAgICAuYWRkKHNlbGVjdG9yKTsKICAgIH0KICB9CgogIC8vLyBTdGFydHMgdGhlIHJlc29sdXRpb24gcGhhc2UsIGNyZWF0aW5nIHRoZSBbUmVzb2x1dGlvbkVucXVldWVyXSBpZiBub3QKICAvLy8gYWxyZWFkeSBjcmVhdGVkLgogIC8vLwogIC8vLyBEdXJpbmcgbm9ybWFsIGNvbXBpbGF0aW9uIHJlc29sdXRpb24gb25seSBzdGFydGVkIG9uY2UsIGJ1dCB0aHJvdWdoCiAgLy8vIFthbmFseXplVXJpXSByZXNvbHV0aW9uIGlzIHN0YXJ0ZWQgcmVwZWF0ZWRseS4KICBSZXNvbHV0aW9uRW5xdWV1ZXIgc3RhcnRSZXNvbHV0aW9uKCkgewogICAgUmVzb2x1dGlvbkVucXVldWVyIHJlc29sdXRpb25FbnF1ZXVlcjsKICAgIGlmIChlbnF1ZXVlci5oYXNSZXNvbHV0aW9uKSB7CiAgICAgIHJlc29sdXRpb25FbnF1ZXVlciA9IGVucXVldWVyLnJlc29sdXRpb247CiAgICB9IGVsc2UgewogICAgICByZXNvbHV0aW9uRW5xdWV1ZXIgPSBlbnF1ZXVlci5jcmVhdGVSZXNvbHV0aW9uRW5xdWV1ZXIoKTsKICAgICAgZnJvbnRlbmRTdHJhdGVneS5vblJlc29sdXRpb25TdGFydCgpOwogICAgfQogICAgcmV0dXJuIHJlc29sdXRpb25FbnF1ZXVlcjsKICB9CgogIEpDbG9zZWRXb3JsZCBjb21wdXRlQ2xvc2VkV29ybGQoVXJpIHJvb3RMaWJyYXJ5VXJpLCBJdGVyYWJsZTxVcmk+IGxpYnJhcmllcykgewogICAgUmVzb2x1dGlvbkVucXVldWVyIHJlc29sdXRpb25FbnF1ZXVlciA9IHN0YXJ0UmVzb2x1dGlvbigpOwogICAgZm9yIChMaWJyYXJ5RW50aXR5IGxpYnJhcnkKICAgICAgICBpbiBmcm9udGVuZFN0cmF0ZWd5LmVsZW1lbnRFbnZpcm9ubWVudC5saWJyYXJpZXMpIHsKICAgICAgZnJvbnRlbmRTdHJhdGVneS5lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENsYXNzKGxpYnJhcnksCiAgICAgICAgICAoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgICAgLy8gUmVnaXN0ZXIgYWxsIGNsYXNzZXMgZWFnZXJseSB0byBvcHRpbWl6ZSBjbG9zZWQgd29ybGQgY29tcHV0YXRpb24gaW4KICAgICAgICAvLyBgQ2xhc3NXb3JsZEJ1aWxkZXIuaXNJbmhlcml0ZWRJblN1YnR5cGVPZmAuCiAgICAgICAgcmVzb2x1dGlvbkVucXVldWVyLndvcmxkQnVpbGRlci5yZWdpc3RlckNsYXNzKGNscyk7CiAgICAgIH0pOwogICAgfQogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBtYWluSW1wYWN0ID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIEZ1bmN0aW9uRW50aXR5IG1haW5GdW5jdGlvbiA9IGZyb250ZW5kU3RyYXRlZ3kuY29tcHV0ZU1haW4obWFpbkltcGFjdCk7CgogICAgLy8gSW4gb3JkZXIgdG8gc2VlIGlmIGEgbGlicmFyeSBpcyBkZWZlcnJlZCwgd2UgbXVzdCBjb21wdXRlIHRoZQogICAgLy8gY29tcGlsZS10aW1lIGNvbnN0YW50cyB0aGF0IGFyZSBtZXRhZGF0YS4gIFRoaXMgbWVhbnMgYWRkaW5nCiAgICAvLyBzb21ldGhpbmcgdG8gdGhlIHJlc29sdXRpb24gcXVldWUuICBTbyB3ZSBjYW5ub3Qgd2FpdCB3aXRoCiAgICAvLyB0aGlzIHVudGlsIGFmdGVyIHRoZSByZXNvbHV0aW9uIHF1ZXVlIGlzIHByb2Nlc3NlZC4KICAgIGRlZmVycmVkTG9hZFRhc2suYmVmb3JlUmVzb2x1dGlvbihyb290TGlicmFyeVVyaSwgbGlicmFyaWVzKTsKCiAgICBpbXBhY3RTdHJhdGVneSA9IG5ldyBKYXZhU2NyaXB0SW1wYWN0U3RyYXRlZ3koCiAgICAgICAgaW1wYWN0Q2FjaGVEZWxldGVyLCBkdW1wSW5mb1Rhc2ssCiAgICAgICAgc3VwcG9ydERlZmVycmVkTG9hZDogZGVmZXJyZWRMb2FkVGFzay5pc1Byb2dyYW1TcGxpdCwKICAgICAgICBzdXBwb3J0RHVtcEluZm86IG9wdGlvbnMuZHVtcEluZm8pOwoKICAgIHBoYXNlID0gUEhBU0VfUkVTT0xWSU5HOwogICAgcmVzb2x1dGlvbkVucXVldWVyLmFwcGx5SW1wYWN0KG1haW5JbXBhY3QpOwogICAgaWYgKG9wdGlvbnMuc2hvd0ludGVybmFsUHJvZ3Jlc3MpIHJlcG9ydGVyLmxvZygnQ29tcHV0aW5nIGNsb3NlZCB3b3JsZCcpOwoKICAgIHByb2Nlc3NRdWV1ZSgKICAgICAgICBmcm9udGVuZFN0cmF0ZWd5LmVsZW1lbnRFbnZpcm9ubWVudCwgcmVzb2x1dGlvbkVucXVldWVyLCBtYWluRnVuY3Rpb24sCiAgICAgICAgb25Qcm9ncmVzczogc2hvd1Jlc29sdXRpb25Qcm9ncmVzcyk7CiAgICBmcm9udGVuZFN0cmF0ZWd5Lm9uUmVzb2x1dGlvbkVuZCgpOwogICAgcmVzb2x1dGlvbkVucXVldWVyLmxvZ1N1bW1hcnkocmVwb3J0ZXIubG9nKTsKCiAgICBfcmVwb3J0ZXIucmVwb3J0U3VwcHJlc3NlZE1lc3NhZ2VzU3VtbWFyeSgpOwoKICAgIGlmIChjb21waWxhdGlvbkZhaWxlZCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBhc3NlcnQobWFpbkZ1bmN0aW9uICE9IG51bGwpOwogICAgY2hlY2tRdWV1ZShyZXNvbHV0aW9uRW5xdWV1ZXIpOwoKICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCA9IGNsb3NlUmVzb2x1dGlvbihtYWluRnVuY3Rpb24pOwogICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSB7CiAgICAgIGJhY2tlbmRDbG9zZWRXb3JsZEZvclRlc3RpbmcgPSBjbG9zZWRXb3JsZDsKICAgIH0KICAgIHJldHVybiBjbG9zZWRXb3JsZDsKICB9CgogIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHBlcmZvcm1HbG9iYWxUeXBlSW5mZXJlbmNlKAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEZ1bmN0aW9uRW50aXR5IG1haW5GdW5jdGlvbiA9IGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudC5tYWluRnVuY3Rpb247CiAgICByZXBvcnRlci5sb2coJ1BlcmZvcm1pbmcgZ2xvYmFsIHR5cGUgaW5mZXJlbmNlJyk7CiAgICBJbmZlcnJlZERhdGFCdWlsZGVyIGluZmVycmVkRGF0YUJ1aWxkZXIgPQogICAgICAgIG5ldyBJbmZlcnJlZERhdGFCdWlsZGVySW1wbChjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEpOwogICAgcmV0dXJuIGdsb2JhbEluZmVyZW5jZS5ydW5HbG9iYWxUeXBlSW5mZXJlbmNlKAogICAgICAgIG1haW5GdW5jdGlvbiwgY2xvc2VkV29ybGQsIGluZmVycmVkRGF0YUJ1aWxkZXIpOwogIH0KCiAgdm9pZCBydW5Db2RlZ2VuRW5xdWV1ZXIoQ29kZWdlblJlc3VsdHMgY29kZWdlblJlc3VsdHMpIHsKICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMgPQogICAgICAgIGNvZGVnZW5SZXN1bHRzLmdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzOwogICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cy5jbG9zZWRXb3JsZDsKICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbklucHV0cyA9IGNvZGVnZW5SZXN1bHRzLmNvZGVnZW5JbnB1dHM7CiAgICBFbnF1ZXVlciBjb2RlZ2VuRW5xdWV1ZXIgPSBlbnF1ZXVlci5jcmVhdGVDb2RlZ2VuRW5xdWV1ZXIoCiAgICAgICAgY2xvc2VkV29ybGQsIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsIGNvZGVnZW5JbnB1dHMsIGNvZGVnZW5SZXN1bHRzKTsKICAgIF9jb2RlZ2VuV29ybGRCdWlsZGVyID0gY29kZWdlbkVucXVldWVyLndvcmxkQnVpbGRlcjsKCiAgICBGdW5jdGlvbkVudGl0eSBtYWluRnVuY3Rpb24gPSBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQubWFpbkZ1bmN0aW9uOwogICAgcHJvY2Vzc1F1ZXVlKGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudCwgY29kZWdlbkVucXVldWVyLCBtYWluRnVuY3Rpb24sCiAgICAgICAgb25Qcm9ncmVzczogc2hvd0NvZGVnZW5Qcm9ncmVzcyk7CiAgICBjb2RlZ2VuRW5xdWV1ZXIubG9nU3VtbWFyeShyZXBvcnRlci5sb2cpOwogICAgQ29kZWdlbldvcmxkIGNvZGVnZW5Xb3JsZCA9IGNvZGVnZW5Xb3JsZEJ1aWxkZXIuY2xvc2UoKTsKICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgewogICAgICBjb2RlZ2VuV29ybGRGb3JUZXN0aW5nID0gY29kZWdlbldvcmxkOwogICAgfQogICAgcmVwb3J0ZXIubG9nKCdFbWl0dGluZyBKYXZhU2NyaXB0Jyk7CiAgICBpbnQgcHJvZ3JhbVNpemUgPSBiYWNrZW5kU3RyYXRlZ3kuYXNzZW1ibGVQcm9ncmFtKGNsb3NlZFdvcmxkLAogICAgICAgIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMuaW5mZXJyZWREYXRhLCBjb2RlZ2VuSW5wdXRzLCBjb2RlZ2VuV29ybGQpOwoKICAgIGlmIChvcHRpb25zLmR1bXBJbmZvKSB7CiAgICAgIGR1bXBJbmZvVGFzay5yZXBvcnRTaXplKHByb2dyYW1TaXplKTsKICAgICAgZHVtcEluZm9UYXNrLmR1bXBJbmZvKGNsb3NlZFdvcmxkLCBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzKTsKICAgIH0KCiAgICBiYWNrZW5kU3RyYXRlZ3kub25Db2RlZ2VuRW5kKGNvZGVnZW5JbnB1dHMpOwoKICAgIGNoZWNrUXVldWUoY29kZWdlbkVucXVldWVyKTsKICB9CgogIHZvaWQgY29tcGlsZUZyb21LZXJuZWwoVXJpIHJvb3RMaWJyYXJ5VXJpLCBJdGVyYWJsZTxVcmk+IGxpYnJhcmllcykgewogICAgX3VzZXJDb2RlTG9jYXRpb25zLmFkZChuZXcgQ29kZUxvY2F0aW9uKHJvb3RMaWJyYXJ5VXJpKSk7CiAgICBzZWxmVGFzay5tZWFzdXJlU3VidGFzaygiY29tcGlsZUZyb21LZXJuZWwiLCAoKSB7CiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCA9IHNlbGZUYXNrLm1lYXN1cmVTdWJ0YXNrKCJjb21wdXRlQ2xvc2VkV29ybGQiLAogICAgICAgICAgKCkgPT4gY29tcHV0ZUNsb3NlZFdvcmxkKHJvb3RMaWJyYXJ5VXJpLCBsaWJyYXJpZXMpKTsKICAgICAgaWYgKHN0b3BBZnRlckNsb3NlZFdvcmxkKSByZXR1cm47CiAgICAgIGlmIChjbG9zZWRXb3JsZCAhPSBudWxsKSB7CiAgICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyA9CiAgICAgICAgICAgIHBlcmZvcm1HbG9iYWxUeXBlSW5mZXJlbmNlKGNsb3NlZFdvcmxkKTsKICAgICAgICBpZiAob3B0aW9ucy53cml0ZURhdGFVcmkgIT0gbnVsbCkgewogICAgICAgICAgc2VyaWFsaXphdGlvblRhc2sKICAgICAgICAgICAgICAuc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZShnbG9iYWxJbmZlcmVuY2VSZXN1bHRzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKG9wdGlvbnMudGVzdE1vZGUpIHsKICAgICAgICAgIFNlcmlhbGl6YXRpb25TdHJhdGVneSBzdHJhdGVneSA9CiAgICAgICAgICAgICAgY29uc3QgQnl0ZXNJbk1lbW9yeVNlcmlhbGl6YXRpb25TdHJhdGVneSgpOwogICAgICAgICAgTGlzdDxpbnQ+IGlyRGF0YSA9CiAgICAgICAgICAgICAgc3RyYXRlZ3kuc2VyaWFsaXplQ29tcG9uZW50KGdsb2JhbEluZmVyZW5jZVJlc3VsdHMpOwogICAgICAgICAgTGlzdCB3b3JsZERhdGEgPSBzdHJhdGVneS5zZXJpYWxpemVEYXRhKGdsb2JhbEluZmVyZW5jZVJlc3VsdHMpOwogICAgICAgICAgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyA9IHN0cmF0ZWd5LmRlc2VyaWFsaXplRGF0YSgKICAgICAgICAgICAgICBvcHRpb25zLAogICAgICAgICAgICAgIHJlcG9ydGVyLAogICAgICAgICAgICAgIGVudmlyb25tZW50LAogICAgICAgICAgICAgIGFic3RyYWN0VmFsdWVTdHJhdGVneSwKICAgICAgICAgICAgICBzdHJhdGVneS5kZXNlcmlhbGl6ZUNvbXBvbmVudChpckRhdGEpLAogICAgICAgICAgICAgIHdvcmxkRGF0YSk7CiAgICAgICAgfQogICAgICAgIGlmIChzdG9wQWZ0ZXJUeXBlSW5mZXJlbmNlKSByZXR1cm47CiAgICAgICAgZ2VuZXJhdGVKYXZhU2NyaXB0Q29kZShnbG9iYWxJbmZlcmVuY2VSZXN1bHRzKTsKICAgICAgfQogICAgfSk7CiAgfQoKICAvLy8gUGVyZm9ybSB0aGUgc3RlcHMgbmVlZGVkIHRvIGZ1bGx5IGVuZCB0aGUgcmVzb2x1dGlvbiBwaGFzZS4KICBKQ2xvc2VkV29ybGQgY2xvc2VSZXNvbHV0aW9uKEZ1bmN0aW9uRW50aXR5IG1haW5GdW5jdGlvbikgewogICAgcGhhc2UgPSBQSEFTRV9ET05FX1JFU09MVklORzsKCiAgICBLQ2xvc2VkV29ybGQga0Nsb3NlZFdvcmxkID0gcmVzb2x1dGlvbldvcmxkQnVpbGRlci5jbG9zZVdvcmxkKHJlcG9ydGVyKTsKICAgIE91dHB1dFVuaXREYXRhIHJlc3VsdCA9IGRlZmVycmVkTG9hZFRhc2sucnVuKG1haW5GdW5jdGlvbiwga0Nsb3NlZFdvcmxkKTsKICAgIEpDbG9zZWRXb3JsZCBqQ2xvc2VkV29ybGQgPQogICAgICAgIGJhY2tlbmRTdHJhdGVneS5jcmVhdGVKQ2xvc2VkV29ybGQoa0Nsb3NlZFdvcmxkLCByZXN1bHQpOwogICAgcmV0dXJuIGpDbG9zZWRXb3JsZDsKICB9CgogIC8vLyBFbXB0eSB0aGUgW2VucXVldWVyXSBxdWV1ZS4KICB2b2lkIGVtcHR5UXVldWUoRW5xdWV1ZXIgZW5xdWV1ZXIsIHt2b2lkIG9uUHJvZ3Jlc3MoRW5xdWV1ZXIgZW5xdWV1ZXIpfSkgewogICAgc2VsZlRhc2subWVhc3VyZVN1YnRhc2soImVtcHR5UXVldWUiLCAoKSB7CiAgICAgIGVucXVldWVyLmZvckVhY2goKFdvcmtJdGVtIHdvcmspIHsKICAgICAgICBpZiAob25Qcm9ncmVzcyAhPSBudWxsKSB7CiAgICAgICAgICBvblByb2dyZXNzKGVucXVldWVyKTsKICAgICAgICB9CiAgICAgICAgcmVwb3J0ZXIud2l0aEN1cnJlbnRFbGVtZW50KAogICAgICAgICAgICB3b3JrLmVsZW1lbnQsCiAgICAgICAgICAgICgpID0+IHNlbGZUYXNrLm1lYXN1cmVTdWJ0YXNrKCJhcHBseUltcGFjdCIsICgpIHsKICAgICAgICAgICAgICAgICAgZW5xdWV1ZXIuYXBwbHlJbXBhY3QoCiAgICAgICAgICAgICAgICAgICAgICBzZWxmVGFzay5tZWFzdXJlU3VidGFzaygid29yay5ydW4iLCAoKSA9PiB3b3JrLnJ1bigpKSwKICAgICAgICAgICAgICAgICAgICAgIGltcGFjdFNvdXJjZTogd29yay5lbGVtZW50KTsKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgfSk7CiAgICB9KTsKICB9CgogIHZvaWQgcHJvY2Vzc1F1ZXVlKEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsIEVucXVldWVyIGVucXVldWVyLAogICAgICBGdW5jdGlvbkVudGl0eSBtYWluTWV0aG9kLAogICAgICB7dm9pZCBvblByb2dyZXNzKEVucXVldWVyIGVucXVldWVyKX0pIHsKICAgIHNlbGZUYXNrLm1lYXN1cmVTdWJ0YXNrKCJwcm9jZXNzUXVldWUiLCAoKSB7CiAgICAgIGVucXVldWVyLm9wZW4oCiAgICAgICAgICBpbXBhY3RTdHJhdGVneSwKICAgICAgICAgIG1haW5NZXRob2QsCiAgICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQubGlicmFyaWVzCiAgICAgICAgICAgICAgLm1hcCgoTGlicmFyeUVudGl0eSBsaWJyYXJ5KSA9PiBsaWJyYXJ5LmNhbm9uaWNhbFVyaSkpOwogICAgICBwcm9ncmVzcy5zdGFydFBoYXNlKCk7CiAgICAgIGVtcHR5UXVldWUoZW5xdWV1ZXIsIG9uUHJvZ3Jlc3M6IG9uUHJvZ3Jlc3MpOwogICAgICBlbnF1ZXVlci5xdWV1ZUlzQ2xvc2VkID0gdHJ1ZTsKICAgICAgZW5xdWV1ZXIuY2xvc2UoKTsKICAgICAgLy8gTm90aWZ5IHRoZSBpbXBhY3Qgc3RyYXRlZ3kgaW1wYWN0cyBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBmb3IgdGhpcwogICAgICAvLyBlbnF1ZXVlci4KICAgICAgaW1wYWN0U3RyYXRlZ3kub25JbXBhY3RVc2VkKGVucXVldWVyLmltcGFjdFVzZSk7CiAgICAgIGFzc2VydChjb21waWxhdGlvbkZhaWxlZCB8fAogICAgICAgICAgZW5xdWV1ZXIuY2hlY2tOb0VucXVldWVkSW52b2tlZEluc3RhbmNlTWV0aG9kcyhlbGVtZW50RW52aXJvbm1lbnQpKTsKICAgIH0pOwogIH0KCiAgLy8vIFBlcmZvcm0gdmFyaW91cyBjaGVja3Mgb2YgdGhlIHF1ZXVlLiBUaGlzIGluY2x1ZGVzIGNoZWNraW5nIHRoYXQgdGhlCiAgLy8vIHF1ZXVlcyBhcmUgZW1wdHkgKG5vdGhpbmcgd2FzIGFkZGVkIGFmdGVyIHdlIHN0b3BwZWQgcHJvY2Vzc2luZyB0aGUKICAvLy8gcXVldWVzKS4KICBjaGVja1F1ZXVlKEVucXVldWVyIGVucXVldWVyKSB7CiAgICBlbnF1ZXVlci5jaGVja1F1ZXVlSXNFbXB0eSgpOwogIH0KCiAgdm9pZCBzaG93UmVzb2x1dGlvblByb2dyZXNzKEVucXVldWVyIGVucXVldWVyKSB7CiAgICBhc3NlcnQocGhhc2UgPT0gUEhBU0VfUkVTT0xWSU5HLCAnVW5leHBlY3RlZCBwaGFzZTogJHBoYXNlJyk7CiAgICBwcm9ncmVzcy5zaG93UHJvZ3Jlc3MoCiAgICAgICAgJ1Jlc29sdmVkICcsIGVucXVldWVyLnByb2Nlc3NlZEVudGl0aWVzLmxlbmd0aCwgJyBlbGVtZW50cy4nKTsKICB9CgogIHZvaWQgc2hvd0NvZGVnZW5Qcm9ncmVzcyhFbnF1ZXVlciBlbnF1ZXVlcikgewogICAgcHJvZ3Jlc3Muc2hvd1Byb2dyZXNzKAogICAgICAgICdDb21waWxlZCAnLCBlbnF1ZXVlci5wcm9jZXNzZWRFbnRpdGllcy5sZW5ndGgsICcgbWV0aG9kcy4nKTsKICB9CgogIHZvaWQgcmVwb3J0RGlhZ25vc3RpYyhEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlLAogICAgICBMaXN0PERpYWdub3N0aWNNZXNzYWdlPiBpbmZvcywgYXBpLkRpYWdub3N0aWMga2luZCk7CgogIHZvaWQgcmVwb3J0Q3Jhc2hJblVzZXJDb2RlKFN0cmluZyBtZXNzYWdlLCBleGNlcHRpb24sIHN0YWNrVHJhY2UpIHsKICAgIHJlcG9ydGVyLm9uQ3Jhc2hJblVzZXJDb2RlKG1lc3NhZ2UsIGV4Y2VwdGlvbiwgc3RhY2tUcmFjZSk7CiAgfQoKICAvLy8gTWVzc2FnZXMgZm9yIHdoaWNoIGNvbXBpbGUtdGltZSBlcnJvcnMgYXJlIHJlcG9ydGVkIGJ1dCBjb21waWxhdGlvbgogIC8vLyBjb250aW51ZXMgcmVnYXJkbGVzcy4KICBzdGF0aWMgY29uc3QgTGlzdDxNZXNzYWdlS2luZD4gQkVOSUdOX0VSUk9SUyA9IGNvbnN0IDxNZXNzYWdlS2luZD5bCiAgICBNZXNzYWdlS2luZC5JTlZBTElEX01FVEFEQVRBLAogICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9NRVRBREFUQV9HRU5FUklDLAogIF07CgogIGJvb2wgbWFya0NvbXBpbGF0aW9uQXNGYWlsZWQoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSwgYXBpLkRpYWdub3N0aWMga2luZCkgewogICAgaWYgKG9wdGlvbnMudGVzdE1vZGUpIHsKICAgICAgLy8gV2hlbiBpbiB0ZXN0IG1vZGUsIGkuZS4gb24gdGhlIGJ1aWxkLWJvdCwgd2UgYWx3YXlzIHN0b3AgY29tcGlsYXRpb24uCiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHJlcG9ydGVyLm9wdGlvbnMuZmF0YWxXYXJuaW5ncykgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiAhQkVOSUdOX0VSUk9SUy5jb250YWlucyhtZXNzYWdlLm1lc3NhZ2Uua2luZCk7CiAgfQoKICB2b2lkIGZhdGFsRGlhZ25vc3RpY1JlcG9ydGVkKERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UsCiAgICAgIExpc3Q8RGlhZ25vc3RpY01lc3NhZ2U+IGluZm9zLCBhcGkuRGlhZ25vc3RpYyBraW5kKSB7CiAgICBpZiAobWFya0NvbXBpbGF0aW9uQXNGYWlsZWQobWVzc2FnZSwga2luZCkpIHsKICAgICAgY29tcGlsYXRpb25GYWlsZWQgPSB0cnVlOwogICAgfQogIH0KCiAgLy8vIEhlbHBlciBmb3IgZGV0ZXJtaW5pbmcgd2hldGhlciB0aGUgY3VycmVudCBlbGVtZW50IGlzIGRlY2xhcmVkIHdpdGhpbgogIC8vLyAndXNlciBjb2RlJy4KICAvLy8KICAvLy8gU2VlIFtpblVzZXJDb2RlXSBmb3Igd2hhdCBkZWZpbmVzICd1c2VyIGNvZGUnLgogIGJvb2wgY3VycmVudGx5SW5Vc2VyQ29kZSgpIHsKICAgIHJldHVybiBpblVzZXJDb2RlKGN1cnJlbnRFbGVtZW50KTsKICB9CgogIC8vLyBIZWxwZXIgZm9yIGRldGVybWluaW5nIHdoZXRoZXIgW2VsZW1lbnRdIGlzIGRlY2xhcmVkIHdpdGhpbiAndXNlciBjb2RlJy4KICAvLy8KICAvLy8gV2hhdCBjb25zdGl0dXRlcyAndXNlciBjb2RlJyBpcyBkZWZpbmVkIGJ5IHRoZSBVUkkocykgcHJvdmlkZWQgYnkgdGhlCiAgLy8vIGVudHJ5IHBvaW50KHMpIG9mIGNvbXBpbGF0aW9uIG9yIGFuYWx5c2lzOgogIC8vLwogIC8vLyBJZiBhbiBlbnRyeXBvaW50IFVSSSB1c2VzIHRoZSAncGFja2FnZScgc2NoZW1lIHRoZW4gZXZlcnkgbGlicmFyeSBmcm9tCiAgLy8vIHRoYXQgc2FtZSBwYWNrYWdlIGlzIGNvbnNpZGVyZWQgdG8gYmUgaW4gdXNlciBjb2RlLiBGb3IgaW5zdGFuY2UsIGlmCiAgLy8vIGFuIGVudHJ5IHBvaW50IFVSSSBpcyAncGFja2FnZTpmb28vYmFyLmRhcnQnIHRoZW4gZXZlcnkgbGlicmFyeSB3aG9zZQogIC8vLyBjYW5vbmljYWwgVVJJIHN0YXJ0cyB3aXRoICdwYWNrYWdlOmZvby8nIGlzIGluIHVzZXIgY29kZS4KICAvLy8KICAvLy8gSWYgYW4gZW50cnlwb2ludCBVUkkgdXNlcyBhbm90aGVyIHNjaGVtZSB0aGFuICdwYWNrYWdlJyB0aGVuIGV2ZXJ5IGxpYnJhcnkKICAvLy8gd2l0aCB0aGF0IHNjaGVtZSBpcyBpbiB1c2VyIGNvZGUuIEZvciBpbnN0YW5jZSwgYW4gZW50cnkgcG9pbnQgVVJJIGlzCiAgLy8vICdmaWxlOi8vL2Zvby5kYXJ0JyB0aGVuIGV2ZXJ5IGxpYnJhcnkgd2hvc2UgY2Fub25pY2FsIFVSSSBzY2hlbWUgaXMKICAvLy8gJ2ZpbGUnIGlzIGluIHVzZXIgY29kZS4KICAvLy8KICAvLy8gSWYgW2Fzc3VtZUluVXNlckNvZGVdIGlzIGB0cnVlYCwgW2VsZW1lbnRdIGlzIGFzc3VtZWQgdG8gYmUgaW4gdXNlciBjb2RlCiAgLy8vIGlmIG5vIGVudHJ5cG9pbnRzIGhhdmUgYmVlbiBzZXQuCiAgYm9vbCBpblVzZXJDb2RlKEVudGl0eSBlbGVtZW50LCB7Ym9vbCBhc3N1bWVJblVzZXJDb2RlOiBmYWxzZX0pIHsKICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybiBhc3N1bWVJblVzZXJDb2RlOwogICAgVXJpIGxpYnJhcnlVcmkgPSBfdXJpRnJvbUVsZW1lbnQoZWxlbWVudCk7CiAgICBpZiAobGlicmFyeVVyaSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoX3VzZXJDb2RlTG9jYXRpb25zLmlzRW1wdHkgJiYgYXNzdW1lSW5Vc2VyQ29kZSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gX3VzZXJDb2RlTG9jYXRpb25zLmFueSgKICAgICAgICAoQ29kZUxvY2F0aW9uIGNvZGVMb2NhdGlvbikgPT4gY29kZUxvY2F0aW9uLmluU2FtZUxvY2F0aW9uKGxpYnJhcnlVcmkpKTsKICB9CgogIC8vLyBSZXR1cm4gYSBjYW5vbmljYWwgVVJJIGZvciB0aGUgc291cmNlIG9mIFtlbGVtZW50XS4KICAvLy8KICAvLy8gRm9yIGEgcGFja2FnZSBsaWJyYXJ5IHdpdGggY2Fub25pY2FsIFVSSSAncGFja2FnZTpmb28vYmFyL2Jhei5kYXJ0JyB0aGUKICAvLy8gcmV0dXJuIFVSSSBpcyAncGFja2FnZTpmb28nLiBGb3Igbm9uLXBhY2thZ2UgbGlicmFyaWVzIHRoZSByZXR1cm5lZCBVUkkgaXMKICAvLy8gdGhlIGNhbm9uaWNhbCBVUkkgb2YgdGhlIGxpYnJhcnkgaXRzZWxmLgogIFVyaSBnZXRDYW5vbmljYWxVcmkoRW50aXR5IGVsZW1lbnQpIHsKICAgIFVyaSBsaWJyYXJ5VXJpID0gX3VyaUZyb21FbGVtZW50KGVsZW1lbnQpOwogICAgaWYgKGxpYnJhcnlVcmkgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAobGlicmFyeVVyaS5zY2hlbWUgPT0gJ3BhY2thZ2UnKSB7CiAgICAgIGludCBzbGFzaFBvcyA9IGxpYnJhcnlVcmkucGF0aC5pbmRleE9mKCcvJyk7CiAgICAgIGlmIChzbGFzaFBvcyAhPSAtMSkgewogICAgICAgIFN0cmluZyBwYWNrYWdlTmFtZSA9IGxpYnJhcnlVcmkucGF0aC5zdWJzdHJpbmcoMCwgc2xhc2hQb3MpOwogICAgICAgIHJldHVybiBuZXcgVXJpKHNjaGVtZTogJ3BhY2thZ2UnLCBwYXRoOiBwYWNrYWdlTmFtZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBsaWJyYXJ5VXJpOwogIH0KCiAgVXJpIF91cmlGcm9tRWxlbWVudChFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQgaXMgTGlicmFyeUVudGl0eSkgewogICAgICByZXR1cm4gZWxlbWVudC5jYW5vbmljYWxVcmk7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaXMgQ2xhc3NFbnRpdHkpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQubGlicmFyeS5jYW5vbmljYWxVcmk7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQgaXMgTWVtYmVyRW50aXR5KSB7CiAgICAgIHJldHVybiBlbGVtZW50LmxpYnJhcnkuY2Fub25pY2FsVXJpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgpjbGFzcyBfQ29tcGlsZXJPdXRwdXQgaW1wbGVtZW50cyBhcGkuQ29tcGlsZXJPdXRwdXQgewogIGZpbmFsIENvbXBpbGVyIF9jb21waWxlcjsKICBmaW5hbCBhcGkuQ29tcGlsZXJPdXRwdXQgX3VzZXJPdXRwdXQ7CgogIF9Db21waWxlck91dHB1dCh0aGlzLl9jb21waWxlciwgYXBpLkNvbXBpbGVyT3V0cHV0IG91dHB1dCkKICAgICAgOiB0aGlzLl91c2VyT3V0cHV0ID0gb3V0cHV0ID8/IGNvbnN0IE51bGxDb21waWxlck91dHB1dCgpOwoKICBAb3ZlcnJpZGUKICBhcGkuT3V0cHV0U2luayBjcmVhdGVPdXRwdXRTaW5rKAogICAgICBTdHJpbmcgbmFtZSwgU3RyaW5nIGV4dGVuc2lvbiwgYXBpLk91dHB1dFR5cGUgdHlwZSkgewogICAgaWYgKF9jb21waWxlci5jb21waWxhdGlvbkZhaWxlZCkgewogICAgICAvLyBFbnN1cmUgdGhhdCB3ZSBkb24ndCBlbWl0IG91dHB1dCB3aGVuIHRoZSBjb21waWxhdGlvbiBoYXMgZmFpbGVkLgogICAgICByZXR1cm4gY29uc3QgTnVsbENvbXBpbGVyT3V0cHV0KCkuY3JlYXRlT3V0cHV0U2luayhuYW1lLCBleHRlbnNpb24sIHR5cGUpOwogICAgfQogICAgcmV0dXJuIF91c2VyT3V0cHV0LmNyZWF0ZU91dHB1dFNpbmsobmFtZSwgZXh0ZW5zaW9uLCB0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIGFwaS5CaW5hcnlPdXRwdXRTaW5rIGNyZWF0ZUJpbmFyeVNpbmsoVXJpIHVyaSkgewogICAgcmV0dXJuIF91c2VyT3V0cHV0LmNyZWF0ZUJpbmFyeVNpbmsodXJpKTsKICB9Cn0KCi8vLyBJbmZvcm1hdGlvbiBhYm91dCBzdXBwcmVzc2VkIHdhcm5pbmdzIGFuZCBoaW50cyBmb3IgYSBnaXZlbiBsaWJyYXJ5LgpjbGFzcyBTdXBwcmVzc2lvbkluZm8gewogIGludCB3YXJuaW5ncyA9IDA7CiAgaW50IGhpbnRzID0gMDsKfQoKY2xhc3MgQ29tcGlsZXJEaWFnbm9zdGljUmVwb3J0ZXIgZXh0ZW5kcyBEaWFnbm9zdGljUmVwb3J0ZXIgewogIGZpbmFsIENvbXBpbGVyIGNvbXBpbGVyOwogIEBvdmVycmlkZQogIGZpbmFsIERpYWdub3N0aWNPcHRpb25zIG9wdGlvbnM7CgogIEVudGl0eSBfY3VycmVudEVsZW1lbnQ7CiAgYm9vbCBoYXNDcmFzaGVkID0gZmFsc2U7CgogIC8vLyBgdHJ1ZWAgaWYgdGhlIGxhc3QgZGlhZ25vc3RpYyB3YXMgZmlsdGVyZWQsIGluIHdoaWNoIGNhc2UgdGhlCiAgLy8vIGFjY29tcGFueWluZyBpbmZvIG1lc3NhZ2Ugc2hvdWxkIGJlIGZpbHRlcmVkIGFzIHdlbGwuCiAgYm9vbCBsYXN0RGlhZ25vc3RpY1dhc0ZpbHRlcmVkID0gZmFsc2U7CgogIC8vLyBNYXAgY29udGFpbmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgd2FybmluZ3MgYW5kIGhpbnRzIHRoYXQgaGF2ZSBiZWVuCiAgLy8vIHN1cHByZXNzZWQgZm9yIGVhY2ggbGlicmFyeS4KICBNYXA8VXJpLCBTdXBwcmVzc2lvbkluZm8+IHN1cHByZXNzZWRXYXJuaW5ncyA9IDxVcmksIFN1cHByZXNzaW9uSW5mbz57fTsKCiAgQ29tcGlsZXJEaWFnbm9zdGljUmVwb3J0ZXIodGhpcy5jb21waWxlciwgdGhpcy5vcHRpb25zKTsKCiAgRW50aXR5IGdldCBjdXJyZW50RWxlbWVudCA9PiBfY3VycmVudEVsZW1lbnQ7CgogIEBvdmVycmlkZQogIERpYWdub3N0aWNNZXNzYWdlIGNyZWF0ZU1lc3NhZ2UoU3Bhbm5hYmxlIHNwYW5uYWJsZSwgTWVzc2FnZUtpbmQgbWVzc2FnZUtpbmQsCiAgICAgIFtNYXAgYXJndW1lbnRzID0gY29uc3Qge31dKSB7CiAgICBTb3VyY2VTcGFuIHNwYW4gPSBzcGFuRnJvbVNwYW5uYWJsZShzcGFubmFibGUpOwogICAgTWVzc2FnZVRlbXBsYXRlIHRlbXBsYXRlID0gTWVzc2FnZVRlbXBsYXRlLlRFTVBMQVRFU1ttZXNzYWdlS2luZF07CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSB0ZW1wbGF0ZS5tZXNzYWdlKGFyZ3VtZW50cywgb3B0aW9ucy50ZXJzZURpYWdub3N0aWNzKTsKICAgIHJldHVybiBuZXcgRGlhZ25vc3RpY01lc3NhZ2Uoc3Bhbiwgc3Bhbm5hYmxlLCBtZXNzYWdlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVwb3J0RXJyb3IoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSwKICAgICAgW0xpc3Q8RGlhZ25vc3RpY01lc3NhZ2U+IGluZm9zID0gY29uc3QgPERpYWdub3N0aWNNZXNzYWdlPltdXSkgewogICAgcmVwb3J0RGlhZ25vc3RpY0ludGVybmFsKG1lc3NhZ2UsIGluZm9zLCBhcGkuRGlhZ25vc3RpYy5FUlJPUik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydFdhcm5pbmcoRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSwKICAgICAgW0xpc3Q8RGlhZ25vc3RpY01lc3NhZ2U+IGluZm9zID0gY29uc3QgPERpYWdub3N0aWNNZXNzYWdlPltdXSkgewogICAgcmVwb3J0RGlhZ25vc3RpY0ludGVybmFsKG1lc3NhZ2UsIGluZm9zLCBhcGkuRGlhZ25vc3RpYy5XQVJOSU5HKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVwb3J0SGludChEaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlLAogICAgICBbTGlzdDxEaWFnbm9zdGljTWVzc2FnZT4gaW5mb3MgPSBjb25zdCA8RGlhZ25vc3RpY01lc3NhZ2U+W11dKSB7CiAgICByZXBvcnREaWFnbm9zdGljSW50ZXJuYWwobWVzc2FnZSwgaW5mb3MsIGFwaS5EaWFnbm9zdGljLkhJTlQpOwogIH0KCiAgQGRlcHJlY2F0ZWQKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydEluZm8oU3Bhbm5hYmxlIG5vZGUsIE1lc3NhZ2VLaW5kIG1lc3NhZ2VLaW5kLAogICAgICBbTWFwIGFyZ3VtZW50cyA9IGNvbnN0IHt9XSkgewogICAgcmVwb3J0RGlhZ25vc3RpY0ludGVybmFsKGNyZWF0ZU1lc3NhZ2Uobm9kZSwgbWVzc2FnZUtpbmQsIGFyZ3VtZW50cyksCiAgICAgICAgY29uc3QgPERpYWdub3N0aWNNZXNzYWdlPltdLCBhcGkuRGlhZ25vc3RpYy5JTkZPKTsKICB9CgogIHZvaWQgcmVwb3J0RGlhZ25vc3RpY0ludGVybmFsKERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UsCiAgICAgIExpc3Q8RGlhZ25vc3RpY01lc3NhZ2U+IGluZm9zLCBhcGkuRGlhZ25vc3RpYyBraW5kKSB7CiAgICBpZiAoIW9wdGlvbnMuc2hvd0FsbFBhY2thZ2VXYXJuaW5ncyAmJgogICAgICAgIG1lc3NhZ2Uuc3Bhbm5hYmxlICE9IE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSkgewogICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICBjYXNlIGFwaS5EaWFnbm9zdGljLldBUk5JTkc6CiAgICAgICAgY2FzZSBhcGkuRGlhZ25vc3RpYy5ISU5UOgogICAgICAgICAgRW50aXR5IGVsZW1lbnQgPSBlbGVtZW50RnJvbVNwYW5uYWJsZShtZXNzYWdlLnNwYW5uYWJsZSk7CiAgICAgICAgICBpZiAoIWNvbXBpbGVyLmluVXNlckNvZGUoZWxlbWVudCwgYXNzdW1lSW5Vc2VyQ29kZTogdHJ1ZSkpIHsKICAgICAgICAgICAgVXJpIHVyaSA9IGNvbXBpbGVyLmdldENhbm9uaWNhbFVyaShlbGVtZW50KTsKICAgICAgICAgICAgaWYgKG9wdGlvbnMuc2hvd1BhY2thZ2VXYXJuaW5nc0Zvcih1cmkpKSB7CiAgICAgICAgICAgICAgcmVwb3J0RGlhZ25vc3RpYyhtZXNzYWdlLCBpbmZvcywga2luZCk7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIFN1cHByZXNzaW9uSW5mbyBpbmZvID0gc3VwcHJlc3NlZFdhcm5pbmdzLnB1dElmQWJzZW50KAogICAgICAgICAgICAgICAgdXJpLCAoKSA9PiBuZXcgU3VwcHJlc3Npb25JbmZvKCkpOwogICAgICAgICAgICBpZiAoa2luZCA9PSBhcGkuRGlhZ25vc3RpYy5XQVJOSU5HKSB7CiAgICAgICAgICAgICAgaW5mby53YXJuaW5ncysrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGluZm8uaGludHMrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICBsYXN0RGlhZ25vc3RpY1dhc0ZpbHRlcmVkID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBhcGkuRGlhZ25vc3RpYy5JTkZPOgogICAgICAgICAgaWYgKGxhc3REaWFnbm9zdGljV2FzRmlsdGVyZWQpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGxhc3REaWFnbm9zdGljV2FzRmlsdGVyZWQgPSBmYWxzZTsKICAgIHJlcG9ydERpYWdub3N0aWMobWVzc2FnZSwgaW5mb3MsIGtpbmQpOwogIH0KCiAgdm9pZCByZXBvcnREaWFnbm9zdGljKERpYWdub3N0aWNNZXNzYWdlIG1lc3NhZ2UsCiAgICAgIExpc3Q8RGlhZ25vc3RpY01lc3NhZ2U+IGluZm9zLCBhcGkuRGlhZ25vc3RpYyBraW5kKSB7CiAgICBjb21waWxlci5yZXBvcnREaWFnbm9zdGljKG1lc3NhZ2UsIGluZm9zLCBraW5kKTsKICAgIGlmIChraW5kID09IGFwaS5EaWFnbm9zdGljLkVSUk9SIHx8CiAgICAgICAga2luZCA9PSBhcGkuRGlhZ25vc3RpYy5DUkFTSCB8fAogICAgICAgIChvcHRpb25zLmZhdGFsV2FybmluZ3MgJiYga2luZCA9PSBhcGkuRGlhZ25vc3RpYy5XQVJOSU5HKSkgewogICAgICBjb21waWxlci5mYXRhbERpYWdub3N0aWNSZXBvcnRlZChtZXNzYWdlLCBpbmZvcywga2luZCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBoYXNSZXBvcnRlZEVycm9yID0+IGNvbXBpbGVyLmNvbXBpbGF0aW9uRmFpbGVkOwoKICAvLy8gUGVyZm9ybSBhbiBvcGVyYXRpb24sIFtmXSwgcmV0dXJuaW5nIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBbZl0uICBJZiBhbgogIC8vLyBlcnJvciBvY2N1cnMgdGhlbiByZXBvcnQgaXQgYXMgaGF2aW5nIG9jY3VycmVkIGR1cmluZyBjb21waWxhdGlvbiBvZgogIC8vLyBbZWxlbWVudF0uICBDYW4gYmUgbmVzdGVkLgogIEBvdmVycmlkZQogIHdpdGhDdXJyZW50RWxlbWVudChFbnRpdHkgZWxlbWVudCwgZigpKSB7CiAgICBFbnRpdHkgb2xkID0gY3VycmVudEVsZW1lbnQ7CiAgICBfY3VycmVudEVsZW1lbnQgPSBlbGVtZW50OwogICAgdHJ5IHsKICAgICAgcmV0dXJuIGYoKTsKICAgIH0gb24gU3Bhbm5hYmxlQXNzZXJ0aW9uRmFpbHVyZSBjYXRjaCAoZXgpIHsKICAgICAgaWYgKCFoYXNDcmFzaGVkKSB7CiAgICAgICAgcmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShleCk7CiAgICAgICAgcGxlYXNlUmVwb3J0Q3Jhc2goKTsKICAgICAgfQogICAgICBoYXNDcmFzaGVkID0gdHJ1ZTsKICAgICAgcmV0aHJvdzsKICAgIH0gb24gU3RhY2tPdmVyZmxvd0Vycm9yIHsKICAgICAgLy8gV2UgY2Fubm90IHJlcG9ydCBhbnl0aGluZyB1c2VmdWwgaW4gdGhpcyBjYXNlLCBiZWNhdXNlIHdlCiAgICAgIC8vIGRvIG5vdCBoYXZlIGVub3VnaCBzdGFjayBzcGFjZS4KICAgICAgcmV0aHJvdzsKICAgIH0gY2F0Y2ggKGV4KSB7CiAgICAgIGlmIChoYXNDcmFzaGVkKSByZXRocm93OwogICAgICB0cnkgewogICAgICAgIHVuaGFuZGxlZEV4Y2VwdGlvbk9uRWxlbWVudChlbGVtZW50KTsKICAgICAgfSBjYXRjaCAoZG91YmxlRmF1bHQpIHsKICAgICAgICAvLyBJZ25vcmluZyBleGNlcHRpb25zIGluIGV4Y2VwdGlvbiBoYW5kbGluZy4KICAgICAgfQogICAgICByZXRocm93OwogICAgfSBmaW5hbGx5IHsKICAgICAgX2N1cnJlbnRFbGVtZW50ID0gb2xkOwogICAgfQogIH0KCiAgdm9pZCByZXBvcnRBc3NlcnRpb25GYWlsdXJlKFNwYW5uYWJsZUFzc2VydGlvbkZhaWx1cmUgZXgpIHsKICAgIFN0cmluZyBtZXNzYWdlID0KICAgICAgICAoZXgubWVzc2FnZSAhPSBudWxsKSA/IHRyeVRvU3RyaW5nKGV4Lm1lc3NhZ2UpIDogdHJ5VG9TdHJpbmcoZXgpOwogICAgcmVwb3J0RGlhZ25vc3RpY0ludGVybmFsKAogICAgICAgIGNyZWF0ZU1lc3NhZ2UoZXgubm9kZSwgTWVzc2FnZUtpbmQuR0VORVJJQywgeyd0ZXh0JzogbWVzc2FnZX0pLAogICAgICAgIGNvbnN0IDxEaWFnbm9zdGljTWVzc2FnZT5bXSwKICAgICAgICBhcGkuRGlhZ25vc3RpYy5DUkFTSCk7CiAgfQoKICAvLy8gVXNpbmcgW2Zyb250ZW5kU3RyYXRlZ3ldIHRvIGNvbXB1dGUgYSBbU291cmNlU3Bhbl0gZnJvbSBzcGFubmFibGUgdXNpbmcKICAvLy8gdGhlIFtjdXJyZW50RWxlbWVudF0gYXMgY29udGV4dC4KICBTb3VyY2VTcGFuIF9zcGFuRnJvbVN0cmF0ZWd5KFNwYW5uYWJsZSBzcGFubmFibGUpIHsKICAgIFNvdXJjZVNwYW4gc3BhbjsKICAgIGlmIChjb21waWxlci5waGFzZSA9PSBDb21waWxlci5QSEFTRV9DT01QSUxJTkcpIHsKICAgICAgc3BhbiA9CiAgICAgICAgICBjb21waWxlci5iYWNrZW5kU3RyYXRlZ3kuc3BhbkZyb21TcGFubmFibGUoc3Bhbm5hYmxlLCBjdXJyZW50RWxlbWVudCk7CiAgICB9IGVsc2UgewogICAgICBzcGFuID0gY29tcGlsZXIuZnJvbnRlbmRTdHJhdGVneQogICAgICAgICAgLnNwYW5Gcm9tU3Bhbm5hYmxlKHNwYW5uYWJsZSwgY3VycmVudEVsZW1lbnQpOwogICAgfQogICAgaWYgKHNwYW4gIT0gbnVsbCkgcmV0dXJuIHNwYW47CiAgICB0aHJvdyAnTm8gZXJyb3IgbG9jYXRpb24uJzsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZVNwYW4gc3BhbkZyb21TcGFubmFibGUoU3Bhbm5hYmxlIHNwYW5uYWJsZSkgewogICAgaWYgKHNwYW5uYWJsZSA9PSBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFKSB7CiAgICAgIHNwYW5uYWJsZSA9IGN1cnJlbnRFbGVtZW50OwogICAgfSBlbHNlIGlmIChzcGFubmFibGUgPT0gTk9fTE9DQVRJT05fU1BBTk5BQkxFKSB7CiAgICAgIGlmIChjdXJyZW50RWxlbWVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgc3Bhbm5hYmxlID0gY3VycmVudEVsZW1lbnQ7CiAgICB9CiAgICBpZiAoc3Bhbm5hYmxlIGlzIFNvdXJjZVNwYW4pIHsKICAgICAgcmV0dXJuIHNwYW5uYWJsZTsKICAgIH0gZWxzZSBpZiAoc3Bhbm5hYmxlIGlzIEhJbnN0cnVjdGlvbikgewogICAgICBFbnRpdHkgZWxlbWVudCA9IHNwYW5uYWJsZS5zb3VyY2VFbGVtZW50OwogICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSBlbGVtZW50ID0gY3VycmVudEVsZW1lbnQ7CiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHBvc2l0aW9uID0gc3Bhbm5hYmxlLnNvdXJjZUluZm9ybWF0aW9uOwogICAgICBpZiAocG9zaXRpb24gIT0gbnVsbCkgcmV0dXJuIHBvc2l0aW9uLnNvdXJjZVNwYW47CiAgICAgIHJldHVybiBfc3BhbkZyb21TdHJhdGVneShlbGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfc3BhbkZyb21TdHJhdGVneShzcGFubmFibGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgaW50ZXJuYWxFcnJvcihTcGFubmFibGUgc3Bhbm5hYmxlLCByZWFzb24pIHsKICAgIFN0cmluZyBtZXNzYWdlID0gdHJ5VG9TdHJpbmcocmVhc29uKTsKICAgIHJlcG9ydERpYWdub3N0aWNJbnRlcm5hbCgKICAgICAgICBjcmVhdGVNZXNzYWdlKHNwYW5uYWJsZSwgTWVzc2FnZUtpbmQuR0VORVJJQywgeyd0ZXh0JzogbWVzc2FnZX0pLAogICAgICAgIGNvbnN0IDxEaWFnbm9zdGljTWVzc2FnZT5bXSwKICAgICAgICBhcGkuRGlhZ25vc3RpYy5DUkFTSCk7CiAgICB0aHJvdyAnSW50ZXJuYWwgRXJyb3I6ICRtZXNzYWdlJzsKICB9CgogIHZvaWQgdW5oYW5kbGVkRXhjZXB0aW9uT25FbGVtZW50KEVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoaGFzQ3Jhc2hlZCkgcmV0dXJuOwogICAgaGFzQ3Jhc2hlZCA9IHRydWU7CiAgICByZXBvcnREaWFnbm9zdGljKGNyZWF0ZU1lc3NhZ2UoZWxlbWVudCwgTWVzc2FnZUtpbmQuQ09NUElMRVJfQ1JBU0hFRCksCiAgICAgICAgY29uc3QgPERpYWdub3N0aWNNZXNzYWdlPltdLCBhcGkuRGlhZ25vc3RpYy5DUkFTSCk7CiAgICBwbGVhc2VSZXBvcnRDcmFzaCgpOwogIH0KCiAgdm9pZCBwbGVhc2VSZXBvcnRDcmFzaCgpIHsKICAgIHByaW50KE1lc3NhZ2VUZW1wbGF0ZS5URU1QTEFURVNbTWVzc2FnZUtpbmQuUExFQVNFX1JFUE9SVF9USEVfQ1JBU0hdCiAgICAgICAgLm1lc3NhZ2UoeydidWlsZElkJzogY29tcGlsZXIub3B0aW9ucy5idWlsZElkfSkpOwogIH0KCiAgLy8vIEZpbmRzIHRoZSBhcHByb3hpbWF0ZSBbRWxlbWVudF0gZm9yIFtub2RlXS4gW2N1cnJlbnRFbGVtZW50XSBpcyB1c2VkIGFzCiAgLy8vIHRoZSBkZWZhdWx0IHZhbHVlLgogIEVudGl0eSBlbGVtZW50RnJvbVNwYW5uYWJsZShTcGFubmFibGUgbm9kZSkgewogICAgRW50aXR5IGVsZW1lbnQ7CiAgICBpZiAobm9kZSBpcyBFbnRpdHkpIHsKICAgICAgZWxlbWVudCA9IG5vZGU7CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgSEluc3RydWN0aW9uKSB7CiAgICAgIGVsZW1lbnQgPSBub2RlLnNvdXJjZUVsZW1lbnQ7CiAgICB9CiAgICByZXR1cm4gZWxlbWVudCAhPSBudWxsID8gZWxlbWVudCA6IGN1cnJlbnRFbGVtZW50OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBsb2cobWVzc2FnZSkgewogICAgTWVzc2FnZSBtc2cgPSBNZXNzYWdlVGVtcGxhdGUuVEVNUExBVEVTW01lc3NhZ2VLaW5kLkdFTkVSSUNdCiAgICAgICAgLm1lc3NhZ2Uoeyd0ZXh0JzogJyRtZXNzYWdlJ30pOwogICAgcmVwb3J0RGlhZ25vc3RpYyhuZXcgRGlhZ25vc3RpY01lc3NhZ2UobnVsbCwgbnVsbCwgbXNnKSwKICAgICAgICBjb25zdCA8RGlhZ25vc3RpY01lc3NhZ2U+W10sIGFwaS5EaWFnbm9zdGljLlZFUkJPU0VfSU5GTyk7CiAgfQoKICBTdHJpbmcgdHJ5VG9TdHJpbmcob2JqZWN0KSB7CiAgICB0cnkgewogICAgICByZXR1cm4gb2JqZWN0LnRvU3RyaW5nKCk7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIHJldHVybiAnPGV4Y2VwdGlvbiBpbiB0b1N0cmluZygpPic7CiAgICB9CiAgfQoKICBvbkVycm9yKFVyaSB1cmksIGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIHRyeSB7CiAgICAgIGlmICghaGFzQ3Jhc2hlZCkgewogICAgICAgIGhhc0NyYXNoZWQgPSB0cnVlOwogICAgICAgIGlmIChlcnJvciBpcyBTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlKSB7CiAgICAgICAgICByZXBvcnRBc3NlcnRpb25GYWlsdXJlKGVycm9yKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVwb3J0RGlhZ25vc3RpYygKICAgICAgICAgICAgICBjcmVhdGVNZXNzYWdlKAogICAgICAgICAgICAgICAgICBuZXcgU291cmNlU3Bhbih1cmksIDAsIDApLCBNZXNzYWdlS2luZC5DT01QSUxFUl9DUkFTSEVEKSwKICAgICAgICAgICAgICBjb25zdCA8RGlhZ25vc3RpY01lc3NhZ2U+W10sCiAgICAgICAgICAgICAgYXBpLkRpYWdub3N0aWMuQ1JBU0gpOwogICAgICAgIH0KICAgICAgICBwbGVhc2VSZXBvcnRDcmFzaCgpOwogICAgICB9CiAgICB9IGNhdGNoIChkb3VibGVGYXVsdCkgewogICAgICAvLyBJZ25vcmluZyBleGNlcHRpb25zIGluIGV4Y2VwdGlvbiBoYW5kbGluZy4KICAgIH0KICAgIHJldHVybiBuZXcgRnV0dXJlLmVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgb25DcmFzaEluVXNlckNvZGUoU3RyaW5nIG1lc3NhZ2UsIGV4Y2VwdGlvbiwgc3RhY2tUcmFjZSkgewogICAgaGFzQ3Jhc2hlZCA9IHRydWU7CiAgICBwcmludCgnJG1lc3NhZ2U6ICR7dHJ5VG9TdHJpbmcoZXhjZXB0aW9uKX0nKTsKICAgIHByaW50KHRyeVRvU3RyaW5nKHN0YWNrVHJhY2UpKTsKICB9CgogIHZvaWQgcmVwb3J0U3VwcHJlc3NlZE1lc3NhZ2VzU3VtbWFyeSgpIHsKICAgIGlmICghb3B0aW9ucy5zaG93QWxsUGFja2FnZVdhcm5pbmdzICYmICFvcHRpb25zLnN1cHByZXNzV2FybmluZ3MpIHsKICAgICAgc3VwcHJlc3NlZFdhcm5pbmdzLmZvckVhY2goKFVyaSB1cmksIFN1cHByZXNzaW9uSW5mbyBpbmZvKSB7CiAgICAgICAgTWVzc2FnZUtpbmQga2luZCA9IE1lc3NhZ2VLaW5kLkhJRERFTl9XQVJOSU5HU19ISU5UUzsKICAgICAgICBpZiAoaW5mby53YXJuaW5ncyA9PSAwKSB7CiAgICAgICAgICBraW5kID0gTWVzc2FnZUtpbmQuSElEREVOX0hJTlRTOwogICAgICAgIH0gZWxzZSBpZiAoaW5mby5oaW50cyA9PSAwKSB7CiAgICAgICAgICBraW5kID0gTWVzc2FnZUtpbmQuSElEREVOX1dBUk5JTkdTOwogICAgICAgIH0KICAgICAgICBNZXNzYWdlVGVtcGxhdGUgdGVtcGxhdGUgPSBNZXNzYWdlVGVtcGxhdGUuVEVNUExBVEVTW2tpbmRdOwogICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHRlbXBsYXRlLm1lc3NhZ2UoCiAgICAgICAgICAgIHsnd2FybmluZ3MnOiBpbmZvLndhcm5pbmdzLCAnaGludHMnOiBpbmZvLmhpbnRzLCAndXJpJzogdXJpfSwKICAgICAgICAgICAgb3B0aW9ucy50ZXJzZURpYWdub3N0aWNzKTsKICAgICAgICByZXBvcnREaWFnbm9zdGljKG5ldyBEaWFnbm9zdGljTWVzc2FnZShudWxsLCBudWxsLCBtZXNzYWdlKSwKICAgICAgICAgICAgY29uc3QgPERpYWdub3N0aWNNZXNzYWdlPltdLCBhcGkuRGlhZ25vc3RpYy5ISU5UKTsKICAgICAgfSk7CiAgICB9CiAgfQp9CgpjbGFzcyBfTWFwSW1wYWN0Q2FjaGVEZWxldGVyIGltcGxlbWVudHMgSW1wYWN0Q2FjaGVEZWxldGVyIHsKICBmaW5hbCBNYXA8RW50aXR5LCBXb3JsZEltcGFjdD4gX2ltcGFjdENhY2hlOwogIF9NYXBJbXBhY3RDYWNoZURlbGV0ZXIodGhpcy5faW1wYWN0Q2FjaGUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHVuY2FjaGVXb3JsZEltcGFjdChFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSByZXR1cm47CiAgICBfaW1wYWN0Q2FjaGUucmVtb3ZlKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbXB0eUNhY2hlKCkgewogICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSByZXR1cm47CiAgICBfaW1wYWN0Q2FjaGUuY2xlYXIoKTsKICB9Cn0KCmNsYXNzIF9FbXB0eUVudmlyb25tZW50IGltcGxlbWVudHMgRW52aXJvbm1lbnQgewogIGNvbnN0IF9FbXB0eUVudmlyb25tZW50KCk7CgogIEBvdmVycmlkZQogIFN0cmluZyB2YWx1ZU9mKFN0cmluZyBrZXkpID0+IG51bGw7CgogIEBvdmVycmlkZQogIE1hcDxTdHJpbmcsIFN0cmluZz4gdG9NYXAoKSA9PiBjb25zdCB7fTsKfQoKLy8vIEludGVyZmFjZSBmb3Igc2hvd2luZyBwcm9ncmVzcyBkdXJpbmcgY29tcGlsYXRpb24uCmNsYXNzIFByb2dyZXNzIHsKICBjb25zdCBQcm9ncmVzcygpOwoKICAvLy8gU3RhcnRzIGEgbmV3IHBoYXNlIGZvciB3aGljaCB0byBzaG93IHByb2dyZXNzLgogIHZvaWQgc3RhcnRQaGFzZSgpIHt9CgogIC8vLyBTaG93cyBwcm9ncmVzcyBvZiB0aGUgY3VycmVudCBwaGFzZSBpZiBuZWVkZWQuIFRoZSBzaG93biBtZXNzYWdlIGlzCiAgLy8vIGNvbXB1dGVkIGFzICckcHJlZml4JGNvdW50JHN1ZmZpeCcuCiAgdm9pZCBzaG93UHJvZ3Jlc3MoU3RyaW5nIHByZWZpeCwgaW50IGNvdW50LCBTdHJpbmcgc3VmZml4KSB7fQp9CgovLy8gUHJvZ3Jlc3MgaW1wbGVtZW50YXRpb25zIHRoYXQgcHJpbnRzIHByb2dyZXNzIHRvIHRoZSBbRGlhZ25vc3RpY1JlcG9ydGVyXQovLy8gd2l0aCA1MDBtcyBpbnRlcnZhbHMuCmNsYXNzIFByb2dyZXNzSW1wbCBpbXBsZW1lbnRzIFByb2dyZXNzIHsKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgX3JlcG9ydGVyOwogIGZpbmFsIFN0b3B3YXRjaCBfc3RvcHdhdGNoID0gbmV3IFN0b3B3YXRjaCgpLi5zdGFydCgpOwoKICBQcm9ncmVzc0ltcGwodGhpcy5fcmVwb3J0ZXIpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHNob3dQcm9ncmVzcyhTdHJpbmcgcHJlZml4LCBpbnQgY291bnQsIFN0cmluZyBzdWZmaXgpIHsKICAgIGlmIChfc3RvcHdhdGNoLmVsYXBzZWRNaWxsaXNlY29uZHMgPiA1MDApIHsKICAgICAgX3JlcG9ydGVyLmxvZygnJHByZWZpeCRjb3VudCRzdWZmaXgnKTsKICAgICAgX3N0b3B3YXRjaC5yZXNldCgpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzdGFydFBoYXNlKCkgewogICAgX3N0b3B3YXRjaC5yZXNldCgpOwogIH0KfQoKLy8vIFByb2dyZXNzIGltcGxlbWVudGF0aW9ucyB0aGF0IHByaW50cyBwcm9ncmVzcyB0byB0aGUgW0RpYWdub3N0aWNSZXBvcnRlcl0KLy8vIHdpdGggNTAwbXMgaW50ZXJ2YWxzIHVzaW5nIGVzY2FwZSBzZXF1ZW5jZXMgdG8ga2VlcCB0aGUgcHJvZ3Jlc3MgZGF0YSBvbiBhCi8vLyBzaW5nbGUgbGluZS4KY2xhc3MgSW50ZXJhY3RpdmVQcm9ncmVzcyBpbXBsZW1lbnRzIFByb2dyZXNzIHsKICBmaW5hbCBTdG9wd2F0Y2ggX3N0b3B3YXRjaFBoYXNlID0gbmV3IFN0b3B3YXRjaCgpLi5zdGFydCgpOwogIGZpbmFsIFN0b3B3YXRjaCBfc3RvcHdhdGNoSW50ZXJ2YWwgPSBuZXcgU3RvcHdhdGNoKCkuLnN0YXJ0KCk7CiAgQG92ZXJyaWRlCiAgdm9pZCBzdGFydFBoYXNlKCkgewogICAgcHJpbnQoJycpOwogICAgX3N0b3B3YXRjaFBoYXNlLnJlc2V0KCk7CiAgICBfc3RvcHdhdGNoSW50ZXJ2YWwucmVzZXQoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgc2hvd1Byb2dyZXNzKFN0cmluZyBwcmVmaXgsIGludCBjb3VudCwgU3RyaW5nIHN1ZmZpeCkgewogICAgaWYgKF9zdG9wd2F0Y2hJbnRlcnZhbC5lbGFwc2VkTWlsbGlzZWNvbmRzID4gNTAwKSB7CiAgICAgIHZhciB0aW1lID0gX3N0b3B3YXRjaFBoYXNlLmVsYXBzZWRNaWxsaXNl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TlNFIGZpbGUuCgovLy8gVGhlIG1lc3NhZ2VzIGluIHRoaXMgZmlsZSBzaG91bGQgZm9sbG93IHRoZSBbR3VpZGUgZm9yIFdyaXRpbmcKLy8vIERpYWdub3N0aWNzXSguLi8uLi8uLi8uLi9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9kaWFnbm9zdGljcy5tZCkuCi8vLwovLy8gT3RoZXIgdGhpbmdzIHRvIGtlZXAgaW4gbWluZDoKLy8vCi8vLyBBbiBJTkZPIG1lc3NhZ2Ugc2hvdWxkIGFsd2F5cyBiZSBwcmVjZWRlZCBieSBhIG5vbi1JTkZPIG1lc3NhZ2UsIGFuZCB0aGUKLy8vIElORk8gbWVzc2FnZXMgYXJlIGFkZGl0aW9uYWwgZGV0YWlscyBhYm91dCB0aGUgcHJlY2VkaW5nIG5vbi1JTkZPCi8vLyBtZXNzYWdlLiBGb3IgZXhhbXBsZSwgY29uc2lkZXIgZHVwbGljYXRlZCBlbGVtZW50cy4gRmlyc3QgcmVwb3J0IGEgV0FSTklORwovLy8gb3IgRVJST1IgYWJvdXQgdGhlIGR1cGxpY2F0ZWQgZWxlbWVudCwgYW5kIHRoZW4gcmVwb3J0IGFuIElORk8gYWJvdXQgdGhlCi8vLyBsb2NhdGlvbiBvZiB0aGUgZXhpc3RpbmcgZWxlbWVudC4KbGlicmFyeSBkYXJ0MmpzLm1lc3NhZ2VzOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcgc2hvdyB0b2tlblRvU3RyaW5nOwoKaW1wb3J0ICdnZW5lcmF0ZWQvc2hhcmVkX21lc3NhZ2VzLmRhcnQnIGFzIHNoYXJlZF9tZXNzYWdlczsKaW1wb3J0ICcuLi9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydCcgc2hvdyBDb25zdGFudEV4cHJlc3Npb247CmltcG9ydCAnLi4vY29tbWFuZGxpbmVfb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICdpbnZhcmlhbnQuZGFydCcgc2hvdyBmYWlsZWRBdDsKaW1wb3J0ICdzcGFubmFibGUuZGFydCcgc2hvdyBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFOwoKY29uc3QgRE9OVF9LTk9XX0hPV19UT19GSVggPSAiQ29tcHV0ZXIgc2F5cyBubyEiOwoKLy8vIEtleXMgZm9yIHRoZSBbTWVzc2FnZVRlbXBsYXRlXXMuCmVudW0gTWVzc2FnZUtpbmQgewogIEFCU1RSQUNUX0dFVFRFUiwKICBDQU5OT1RfUkVTT0xWRSwKICBDT01QSUxFUl9DUkFTSEVELAogIENPTVBMRVhfUkVUVVJOSU5HX05TTSwKICBDT01QTEVYX1RIUk9XSU5HX05TTSwKICBDT05TVF9DT05TVFJVQ1RPUl9XSVRIX0JPRFksCiAgQ09OU1RfRkFDVE9SWSwKICBDT05TVFJVQ1RPUl9XSVRIX1JFVFVSTl9UWVBFLAogIENZQ0xJQ19DT01QSUxFX1RJTUVfQ09OU1RBTlRTLAogIERJUkVDVExZX1RIUk9XSU5HX05TTSwKICBFUVVBTF9NQVBfRU5UUllfS0VZLAogIEVRVUFMX1NFVF9FTlRSWSwKICBFWFRSQU5FT1VTX01PRElGSUVSLAogIEVYVFJBTkVPVVNfTU9ESUZJRVJfUkVQTEFDRSwKICBGT1JJTl9OT1RfQVNTSUdOQUJMRSwKICBHRU5FUklDLAogIEhJRERFTl9ISU5UUywKICBISURERU5fV0FSTklOR1MsCiAgSElEREVOX1dBUk5JTkdTX0hJTlRTLAogIElNUExJQ0lUX0pTX0lOVEVST1BfRklFTERfTk9UX1NVUFBPUlRFRCwKICBJTlZBTElEX0FTU0VSVF9WQUxVRSwKICBJTlZBTElEX0FTU0VSVF9WQUxVRV9NRVNTQUdFLAogIElOVkFMSURfQk9PTF9GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRSwKICBJTlZBTElEX0NPTlNUQU5UX0NBU1QsCiAgSU5WQUxJRF9DT05TVEFOVF9BRERfVFlQRVMsCiAgSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfSU5UX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfTlVNX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfUFJJTUlUSVZFX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9DT01QTEVNRU5UX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9DT05ESVRJT05BTF9UWVBFLAogIElOVkFMSURfQ09OU1RBTlRfQ09OU1RSVUNUT1IsCiAgSU5WQUxJRF9DT05TVEFOVF9ESVYsCiAgSU5WQUxJRF9DT05TVEFOVF9JTkRFWCwKICBJTlZBTElEX0NPTlNUQU5UX0lOVEVSUE9MQVRJT05fVFlQRSwKICBJTlZBTElEX0NPTlNUQU5UX05FR0FURV9UWVBFLAogIElOVkFMSURfQ09OU1RBTlRfTk9UX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9TVFJJTkdfQUREX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9OVU1fQUREX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9TVFJJTkdfTEVOR1RIX1RZUEUsCiAgSU5WQUxJRF9DT05TVEFOVF9TSElGVCwKICBJTlZBTElEX0ZST01fRU5WSVJPTk1FTlRfTkFNRV9UWVBFLAogIElOVkFMSURfSU5UX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFLAogIElOVkFMSURfTE9HSUNBTF9BTkRfT1BFUkFORF9UWVBFLAogIElOVkFMSURfTE9HSUNBTF9PUl9PUEVSQU5EX1RZUEUsCiAgSU5WQUxJRF9NRVRBREFUQSwKICBJTlZBTElEX01FVEFEQVRBX0dFTkVSSUMsCiAgSU5WQUxJRF9QQUNLQUdFX0NPTkZJRywKICBJTlZBTElEX1BBQ0tBR0VfVVJJLAogIElOVkFMSURfU1RSSU5HX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFLAogIEpTX0lOVEVST1BfQ0xBU1NfQ0FOTk9UX0VYVEVORF9EQVJUX0NMQVNTLAogIEpTX0lOVEVST1BfQ0xBU1NfTk9OX0VYVEVSTkFMX0NPTlNUUlVDVE9SLAogIEpTX0lOVEVST1BfQ0xBU1NfTk9OX0VYVEVSTkFMX01FTUJFUiwKICBKU19JTlRFUk9QX0ZJRUxEX05PVF9TVVBQT1JURUQsCiAgSlNfSU5URVJPUF9JTkRFWF9OT1RfU1VQUE9SVEVELAogIEpTX0lOVEVST1BfTk9OX0VYVEVSTkFMX01FTUJFUiwKICBKU19JTlRFUk9QX01FTUJFUl9JTl9OT05fSlNfSU5URVJPUF9DTEFTUywKICBKU19JTlRFUk9QX01FVEhPRF9XSVRIX05BTUVEX0FSR1VNRU5UUywKICBKU19PQkpFQ1RfTElURVJBTF9DT05TVFJVQ1RPUl9XSVRIX1BPU0lUSU9OQUxfQVJHVU1FTlRTLAogIEpTX1BMQUNFSE9MREVSX0NBUFRVUkUsCiAgTElCUkFSWV9OT1RfRk9VTkQsCiAgTUlSUk9SU19MSUJSQVJZX05PVF9TVVBQT1JUX1dJVEhfQ0ZFLAogIE1JU1NJTkdfRVhQUkVTU0lPTl9JTl9USFJPVywKICBOQVRJVkVfTk9OX0lOU1RBTkNFX0lOX05PTl9OQVRJVkVfQ0xBU1MsCiAgTk9fU1VDSF9TVVBFUl9NRU1CRVIsCiAgTk9OX05BVElWRV9FWFRFUk5BTCwKICBOT1RfQV9DT01QSUxFX1RJTUVfQ09OU1RBTlQsCiAgTk9UX0FTU0lHTkFCTEUsCiAgUExFQVNFX1JFUE9SVF9USEVfQ1JBU0gsCiAgUFJFQU1CTEUsCiAgUkVUSFJPV19PVVRTSURFX0NBVENILAogIFJFVFVSTl9JTl9HRU5FUkFUSVZFX0NPTlNUUlVDVE9SLAogIFJFVFVSTl9JTl9HRU5FUkFUT1IsCiAgUlVOVElNRV9UWVBFX1RPX1NUUklOR19PQkpFQ1QsCiAgUlVOVElNRV9UWVBFX1RPX1NUUklOR19TVUJUWVBFLAogIFNUUklOR19FWFBFQ1RFRCwKICBVTkRFRklORURfR0VUVEVSLAogIFVOREVGSU5FRF9JTlNUQU5DRV9HRVRURVJfQlVUX1NFVFRFUiwKICBVTkRFRklORURfTUVUSE9ELAogIFVOREVGSU5FRF9PUEVSQVRPUiwKICBVTkRFRklORURfU0VUVEVSLAogIFVOREVGSU5FRF9TVEFUSUNfR0VUVEVSX0JVVF9TRVRURVIsCiAgVU5ERUZJTkVEX1NUQVRJQ19TRVRURVJfQlVUX0dFVFRFUiwKICBVTkRFRklORURfU1VQRVJfU0VUVEVSLAogIFdST05HX0FSR1VNRU5UX0ZPUl9KUywKICBXUk9OR19BUkdVTUVOVF9GT1JfSlNfRklSU1QsCiAgV1JPTkdfQVJHVU1FTlRfRk9SX0pTX1NFQ09ORCwKICBXUk9OR19BUkdVTUVOVF9GT1JfSlNfSU5URVJDRVBUT1JfQ09OU1RBTlQsCiAgLy8gVE9ETygzMjU1Nyk6IFJlbW92ZSB0aGVzZSB3aGVuIGlzc3VlIDMyNTU3IGlzIGZpeGVkLgogIFNXSVRDSF9DQVNFX0ZPUkJJRERFTiwKICBTV0lUQ0hfQ0FTRV9WQUxVRV9PVkVSUklERVNfRVFVQUxTLAogIFNXSVRDSF9DQVNFX1RZUEVTX05PVF9FUVVBTCwKICBTV0lUQ0hfQ0FTRV9UWVBFU19OT1RfRVFVQUxfQ0FTRSwKfQoKLy8vIEEgbWVzc2FnZSB0ZW1wbGF0ZSBmb3IgYW4gZXJyb3IsIHdhcm5pbmcsIGhpbnQgb3IgaW5mbyBtZXNzYWdlIGdlbmVyYXRlZAovLy8gYnkgdGhlIGNvbXBpbGVyLiBFYWNoIHRlbXBsYXRlIGlzIGFzc29jaWF0ZWQgd2l0aCBhIFtNZXNzYWdlS2luZF0gdGhhdAovLy8gdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgbWVzc2FnZSB0ZW1wbGF0ZS4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogRm9yIEluZm9zLCBjb25zaWRlciBhZGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlCi8vIGVycm9yL3dhcm5pbmcvaGludCB0aGF0IHRoZXkgYmVsb25nIHRvLgpjbGFzcyBNZXNzYWdlVGVtcGxhdGUgewogIGZpbmFsIE1lc3NhZ2VLaW5kIGtpbmQ7CgogIC8vLyBTaG91bGQgZGVzY3JpYmUgd2hhdCBpcyB3cm9uZyBhbmQgd2h5LgogIGZpbmFsIFN0cmluZyB0ZW1wbGF0ZTsKCiAgLy8vIFNob3VsZCBkZXNjcmliZSBob3cgdG8gZml4IHRoZSBwcm9ibGVtLiBFbGlkZWQgd2hlbiB1c2luZyAtLXRlcnNlIG9wdGlvbi4KICBmaW5hbCBTdHJpbmcgaG93VG9GaXg7CgogIC8vLyAgRXhhbXBsZXMgd2lsbCBiZSBjaGVja2VkIGJ5CiAgLy8vICB0ZXN0cy9jb21waWxlci9kYXJ0MmpzL21lc3NhZ2Vfa2luZF90ZXN0LmRhcnQuCiAgLy8vCiAgLy8vICBBbiBleGFtcGxlIGlzIGVpdGhlciBhIFN0cmluZyBjb250YWluaW5nIHRoZSBleGFtcGxlIHNvdXJjZSBjb2RlIG9yIGEgTWFwCiAgLy8vICBmcm9tIGZpbGVuYW1lcyB0byBzb3VyY2UgY29kZS4gSW4gdGhlIGxhdHRlciBjYXNlLCB0aGUgZmlsZW5hbWUgZm9yIHRoZQogIC8vLyAgbWFpbiBsaWJyYXJ5IGNvZGUgbXVzdCBiZSAnbWFpbi5kYXJ0Jy4KICBmaW5hbCBMaXN0IGV4YW1wbGVzOwoKICAvLy8gQWRkaXRpb25hbCBvcHRpb25zIG5lZWRlZCBmb3IgdGhlIGV4YW1wbGVzIHRvIHdvcmsuCiAgZmluYWwgTGlzdDxTdHJpbmc+IG9wdGlvbnM7CgogIGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSh0aGlzLmtpbmQsIHRoaXMudGVtcGxhdGUsCiAgICAgIHt0aGlzLmhvd1RvRml4LCB0aGlzLmV4YW1wbGVzLCB0aGlzLm9wdGlvbnM6IGNvbnN0IDxTdHJpbmc+W119KTsKCiAgLy8vIEFsbCB0ZW1wbGF0ZXMgdXNlZCBieSB0aGUgY29tcGlsZXIuCiAgLy8vCiAgLy8vIFRoZSBtYXAgaXMgY29tcGxldGUgbWFwcGluZyBmcm9tIFtNZXNzYWdlS2luZF0gdG8gdGhlaXIgY29ycmVzcG9uZGluZwogIC8vLyBbTWVzc2FnZVRlbXBsYXRlXS4KICAvLyBUaGUga2V5IHR5cGUgaXMgYSB1bmlvbiBvZiBNZXNzYWdlS2luZCBhbmQgU2hhcmVkTWVzc2FnZUtpbmQuCiAgc3RhdGljIGZpbmFsIE1hcDxkeW5hbWljLCBNZXNzYWdlVGVtcGxhdGU+IFRFTVBMQVRFUyA9IDxkeW5hbWljLAogICAgICBNZXNzYWdlVGVtcGxhdGU+e30KICAgIC4uYWRkQWxsKHNoYXJlZF9tZXNzYWdlcy5URU1QTEFURVMpCiAgICAuLmFkZEFsbChjb25zdCA8TWVzc2FnZUtpbmQsIE1lc3NhZ2VUZW1wbGF0ZT57CiAgICAgIC8vLyBEbyBub3QgdXNlIHRoaXMuIEl0IGlzIGhlcmUgZm9yIGxlZ2FjeSBhbmQgZGVidWdnaW5nLiBJdCB2aW9sYXRlcyBpdGVtCiAgICAgIC8vLyA0IG9mIHRoZSBndWlkZSBsaW5lcyBmb3IgZXJyb3IgbWVzc2FnZXMgaW4gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQzoKICAgICAgICAgIGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZShNZXNzYWdlS2luZC5HRU5FUklDLCAnI3t0ZXh0fScpLAoKICAgICAgTWVzc2FnZUtpbmQuQ0FOTk9UX1JFU09MVkU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkNBTk5PVF9SRVNPTFZFLCAiQ2Fubm90IHJlc29sdmUgJyN7bmFtZX0nLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuTk9UX0FfQ09NUElMRV9USU1FX0NPTlNUQU5UOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5OT1RfQV9DT01QSUxFX1RJTUVfQ09OU1RBTlQsCiAgICAgICAgICAiTm90IGEgY29tcGlsZS10aW1lIGNvbnN0YW50LiIpLAoKICAgICAgTWVzc2FnZUtpbmQuQ1lDTElDX0NPTVBJTEVfVElNRV9DT05TVEFOVFM6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkNZQ0xJQ19DT01QSUxFX1RJTUVfQ09OU1RBTlRTLAogICAgICAgICAgIkN5Y2xlIGluIHRoZSBjb21waWxlLXRpbWUgY29uc3RhbnQgY29tcHV0YXRpb24uIiksCgogICAgICBNZXNzYWdlS2luZC5VTkRFRklORURfU1RBVElDX1NFVFRFUl9CVVRfR0VUVEVSOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5VTkRFRklORURfU1RBVElDX1NFVFRFUl9CVVRfR0VUVEVSLAogICAgICAgICAgIkNhbm5vdCByZXNvbHZlIHNldHRlci4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLlNUUklOR19FWFBFQ1RFRDogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuU1RSSU5HX0VYUEVDVEVELAogICAgICAgICAgIkV4cGVjdGVkIGEgJ1N0cmluZycsIGJ1dCBnb3QgYW4gaW5zdGFuY2Ugb2YgJyN7dHlwZX0nLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19DQU5OT1RfRVhURU5EX0RBUlRfQ0xBU1M6CiAgICAgICAgICBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19DQU5OT1RfRVhURU5EX0RBUlRfQ0xBU1MsCiAgICAgICAgICAgICAgIkpzLWludGVyb3AgY2xhc3MgJyN7Y2xzfScgY2Fubm90IGV4dGVuZCBmcm9tIHRoZSBub24ganMtaW50ZXJvcCAiCiAgICAgICAgICAgICAgImNsYXNzICcje3N1cGVyY2xhc3N9Jy4iLAogICAgICAgICAgICAgIGhvd1RvRml4OiAiQW5ub3RhdGUgdGhlIHN1cGVyY2xhc3Mgd2l0aCBASlMuIiwKICAgICAgICAgICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICAgICAiIiIKICAgICAgICAgICAgICBpbXBvcnQgJ3BhY2thZ2U6anMvanMuZGFydCc7CgogICAgICAgICAgICAgIGNsYXNzIEZvbyB7IH0KCiAgICAgICAgICAgICAgQEpTKCkKICAgICAgICAgICAgICBjbGFzcyBCYXIgZXh0ZW5kcyBGb28geyB9CgogICAgICAgICAgICAgIG1haW4oKSB7CiAgICAgICAgICAgICAgICBuZXcgQmFyKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICIiIgogICAgICAgICAgXSksCgogICAgICBNZXNzYWdlS2luZC5KU19JTlRFUk9QX0lOREVYX05PVF9TVVBQT1JURUQ6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfSU5ERVhfTk9UX1NVUFBPUlRFRCwKICAgICAgICAgICJKcy1pbnRlcm9wIGRvZXMgbm90IHN1cHBvcnQgW10gYW5kIFtdPSBvcGVyYXRvciBtZXRob2RzLiIsCiAgICAgICAgICBob3dUb0ZpeDogIlRyeSByZXBsYWNpbmcgW10gYW5kIFtdPSBvcGVyYXRvciBtZXRob2RzIHdpdGggbm9ybWFsICIKICAgICAgICAgICAgICAibWV0aG9kcy4iLAogICAgICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAgICAgIiIiCiAgICAgICAgaW1wb3J0ICdwYWNrYWdlOmpzL2pzLmRhcnQnOwoKICAgICAgICBASlMoKQogICAgICAgIGNsYXNzIEZvbyB7CiAgICAgICAgICBleHRlcm5hbCBvcGVyYXRvciBbXShhcmcpOwogICAgICAgIH0KCiAgICAgICAgbWFpbigpIHsKICAgICAgICAgIG5ldyBGb28oKVswXTsKICAgICAgICB9CiAgICAgICAgIiIiLAogICAgICAgICAgICAiIiIKICAgICAgICBpbXBvcnQgJ3BhY2thZ2U6anMvanMuZGFydCc7CgogICAgICAgIEBKUygpCiAgICAgICAgY2xhc3MgRm9vIHsKICAgICAgICAgIGV4dGVybmFsIG9wZXJhdG9yIFtdPShhcmcsIHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIG1haW4oKSB7CiAgICAgICAgICBuZXcgRm9vKClbMF0gPSAxOwogICAgICAgIH0KICAgICAgICAiIiIKICAgICAgICAgIF0pLAoKICAgICAgTWVzc2FnZUtpbmQuSlNfT0JKRUNUX0xJVEVSQUxfQ09OU1RSVUNUT1JfV0lUSF9QT1NJVElPTkFMX0FSR1VNRU5UUzoKICAgICAgICAgIGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgICAgICBNZXNzYWdlS2luZAogICAgICAgICAgICAgICAgICAuSlNfT0JKRUNUX0xJVEVSQUxfQ09OU1RSVUNUT1JfV0lUSF9QT1NJVElPTkFMX0FSR1VNRU5UUywKICAgICAgICAgICAgICAiU29tZSBwYXJhbWV0ZXJzIGluIGFub255bW91cyBqcy1pbnRlcm9wIGNsYXNzICcje2Nsc30nICIKICAgICAgICAgICAgICAib2JqZWN0IGxpdGVyYWwgY29uc3RydWN0b3IgYXJlIHBvc2l0aW9uYWwgaW5zdGVhZCBvZiBuYW1lZC4iCiAgICAgICAgICAgICAgIi4iLAogICAgICAgICAgICAgIGhvd1RvRml4OiAiTWFrZSBhbGwgYXJndW1lbnRzIGluIGV4dGVybmFsIGZhY3Rvcnkgb2JqZWN0IGxpdGVyYWwgIgogICAgICAgICAgICAgICAgICAiY29uc3RydWN0b3JzIG5hbWVkLiIsCiAgICAgICAgICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAgICAgIiIiCmNsYXNzIFN1cGVyIHsKICBmYWN0b3J5IFN1cGVyLmZvbygpID0+IG51bGw7Cn0KY2xhc3MgQ2xhc3MgZXh0ZW5kcyBTdXBlciB7CiAgQ2xhc3MoKSA6IHN1cGVyLmZvbygpOwp9Cm1haW4oKSA9PiBuZXcgQ2xhc3MoKTsKIiIiCiAgICAgICAgICBdKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfTk9OX0VYVEVSTkFMX01FTUJFUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9OT05fRVhURVJOQUxfTUVNQkVSLAogICAgICAgICAgIkpzLWludGVyb3AgbWVtYmVycyBtdXN0IGJlICdleHRlcm5hbCcuIiksCgogICAgICBNZXNzYWdlS2luZC5KU19JTlRFUk9QX01FTUJFUl9JTl9OT05fSlNfSU5URVJPUF9DTEFTUzogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9NRU1CRVJfSU5fTk9OX0pTX0lOVEVST1BfQ0xBU1MsCiAgICAgICAgICAiSnMtaW50ZXJvcCBjbGFzcyBtZW1iZXJzIGFyZSBvbmx5IHN1cHBvcnRlZCBpbiBqcy1pbnRlcm9wIGNsYXNzZXMuIiwKICAgICAgICAgIGhvd1RvRml4OiAiVHJ5IG1hcmtpbmcgdGhlIGVuY2xvc2luZyBjbGFzcyBhcyBqcy1pbnRlcm9wIG9yICIKICAgICAgICAgICAgICAicmVtb3ZlIHRoZSBqcy1pbnRlcm9wIGFubm90YXRpb24gZnJvbSB0aGUgbWVtYmVyLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19OT05fRVhURVJOQUxfQ09OU1RSVUNUT1I6CiAgICAgICAgICBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19OT05fRVhURVJOQUxfQ09OU1RSVUNUT1IsCiAgICAgICAgICAgICAgIkNvbnN0cnVjdG9yICcje2NvbnN0cnVjdG9yfScgaW4ganMtaW50ZXJvcCBjbGFzcyAnI3tjbHN9JyBpcyAiCiAgICAgICAgICAgICAgIm5vdCBleHRlcm5hbC4iLAogICAgICAgICAgICAgIGhvd1RvRml4OiAiVHJ5IGFkZGluZyB0aGUgJ2V4dGVybmFsJyB0byAnI3tjb25zdHJ1Y3Rvcn0nLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19OT05fRVhURVJOQUxfTUVNQkVSOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5KU19JTlRFUk9QX0NMQVNTX05PTl9FWFRFUk5BTF9NRU1CRVIsCiAgICAgICAgICAiTWVtYmVyICcje21lbWJlcn0nIGluIGpzLWludGVyb3AgY2xhc3MgJyN7Y2xzfScgaXMgbm90IGV4dGVybmFsLiIsCiAgICAgICAgICBob3dUb0ZpeDogIlRyeSBhZGRpbmcgdGhlICdleHRlcm5hbCcgdG8gJyN7bWVtYmVyfScuIiwKICAgICAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgICAgICIiIgogICAgICAgICAgICAgIGltcG9ydCAncGFja2FnZTpqcy9qcy5kYXJ0JzsKCiAgICAgICAgICAgICAgQEpTKCkKICAgICAgICAgICAgICBjbGFzcyBGb28gewogICAgICAgICAgICAgICAgYmFyKCkge30KICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIG1haW4oKSB7CiAgICAgICAgICAgICAgICBuZXcgRm9vKCkuYmFyKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICIiIgogICAgICAgICAgXSksCgogICAgICBNZXNzYWdlS2luZC5KU19JTlRFUk9QX01FVEhPRF9XSVRIX05BTUVEX0FSR1VNRU5UUzogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9NRVRIT0RfV0lUSF9OQU1FRF9BUkdVTUVOVFMsCiAgICAgICAgICAiSnMtaW50ZXJvcCBtZXRob2QgJyN7bWV0aG9kfScgaGFzIG5hbWVkIGFyZ3VtZW50cyBidXQgaXMgbm90ICIKICAgICAgICAgICJhIGZhY3RvcnkgY29uc3RydWN0b3Igb2YgYW4gQGFub255bW91cyBASlMgY2xhc3MuIiwKICAgICAgICAgIGhvd1RvRml4OiAiUmVtb3ZlIGFsbCBuYW1lZCBhcmd1bWVudHMgZnJvbSBqcy1pbnRlcm9wIG1ldGhvZCBvciAiCiAgICAgICAgICAgICAgImluIHRoZSBjYXNlIG9mIGEgZmFjdG9yeSBjb25zdHJ1Y3RvciBhbm5vdGF0ZSB0aGUgY2xhc3MgIgogICAgICAgICAgICAgICJhcyBAYW5vbnltb3VzLiIsCiAgICAgICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICAgICAiIiIKICAgICAgICAgICAgICBpbXBvcnQgJ3BhY2thZ2U6anMvanMuZGFydCc7CgogICAgICAgICAgICAgIEBKUygpCiAgICAgICAgICAgICAgY2xhc3MgRm9vIHsKICAgICAgICAgICAgICAgIGV4dGVybmFsIGJhcihmb28sIHtiYXp9KTsKICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgIG1haW4oKSB7CiAgICAgICAgICAgICAgICBuZXcgRm9vKCkuYmFyKDQsIGJhejogNSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICIiIgogICAgICAgICAgXSksCiAgICAgIE1lc3NhZ2VLaW5kLklNUExJQ0lUX0pTX0lOVEVST1BfRklFTERfTk9UX1NVUFBPUlRFRDoKICAgICAgICAgIGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgICAgICBNZXNzYWdlS2luZC5JTVBMSUNJVF9KU19JTlRFUk9QX0ZJRUxEX05PVF9TVVBQT1JURUQsCiAgICAgICAgICAgICAgIkZpZWxkcyBpbiBqcy1pbnRlcm9wIGNsYXNzZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIiwKICAgICAgICAgICAgICBob3dUb0ZpeDogIlRyeSByZXBsYWNpbmcgdGhlIGZpZWxkIHdpdGggYW4gIgogICAgICAgICAgICAgICAgICAiZXh0ZXJuYWwgZ2V0dGVyIGFuZC9vciBzZXR0ZXIuIiksCiAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfRklFTERfTk9UX1NVUFBPUlRFRDogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9GSUVMRF9OT1RfU1VQUE9SVEVELAogICAgICAgICAgIkZpZWxkIGNhbid0IGJlIG1hcmtlZCBhcyBqcy1pbnRlcm9wLiIsCiAgICAgICAgICBob3dUb0ZpeDogIlRyeSByZXBsYWNpbmcgdGhlIGZpZWxkIHdpdGggYW4gIgogICAgICAgICAgICAgICJleHRlcm5hbCBnZXR0ZXIgYW5kL29yIHNldHRlci4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkxJQlJBUllfTk9UX0ZPVU5EOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5MSUJSQVJZX05PVF9GT1VORCwgIkxpYnJhcnkgbm90IGZvdW5kICcje3Jlc29sdmVkVXJpfScuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX1BBQ0tBR0VfQ09ORklHOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX1BBQ0tBR0VfQ09ORklHLAogICAgICAgICAgIiIiUGFja2FnZSBjb25maWcgZmlsZSAnI3t1cml9JyBpcyBpbnZhbGlkLgoje2V4Y2VwdGlvbn0iIiIsCiAgICAgICAgICBob3dUb0ZpeDogRE9OVF9LTk9XX0hPV19UT19GSVgpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9QQUNLQUdFX1VSSTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9QQUNLQUdFX1VSSSwKICAgICAgICAgICInI3t1cml9JyBpcyBub3QgYSB2YWxpZCBwYWNrYWdlIFVSSSAoI3tleGNlcHRpb259KS4iLAogICAgICAgICAgaG93VG9GaXg6IERPTlRfS05PV19IT1dfVE9fRklYLAogICAgICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAgICAgIiIiCi8vIGNhbid0IGhhdmUgYSAndG9wIGxldmVsJyBwYWNrYWdlIFVSSQppbXBvcnQgJ3BhY2thZ2U6Zm9vLmRhcnQnOwoKbWFpbigpIHt9CiIiIiwKICAgICAgICAgICAgIiIiCi8vIGNhbid0IGhhdmUgMiBzbGFzaGVzCmltcG9ydCAncGFja2FnZTovL2Zvby9mb28uZGFydCc7CgptYWluKCkge30KIiIiLAogICAgICAgICAgICAiIiIKLy8gcGFja2FnZSBuYW1lIG11c3QgYmUgdmFsaWQKaW1wb3J0ICdwYWNrYWdlOm5vdFx2YWxpZC9mb28uZGFydCc7CgptYWluKCkge30KIiIiCiAgICAgICAgICBdKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkpTX1BMQUNFSE9MREVSX0NBUFRVUkU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkpTX1BMQUNFSE9MREVSX0NBUFRVUkUsCiAgICAgICAgICAiSlMgY29kZSBtdXN0IG5vdCB1c2UgJyMnIHBsYWNlaG9sZGVycyBpbnNpZGUgZnVuY3Rpb25zLiIsCiAgICAgICAgICBob3dUb0ZpeDoKICAgICAgICAgICAgICAiVXNlIGFuIGltbWVkaWF0ZWx5IGNhbGxlZCBKYXZhU2NyaXB0IGZ1bmN0aW9uIHRvIGNhcHR1cmUgdGhlIgogICAgICAgICAgICAgICIgdGhlIHBsYWNlaG9sZGVyIHZhbHVlcyBhcyBKYXZhU2NyaXB0IGZ1bmN0aW9uIHBhcmFtZXRlcnMuIiksCgogICAgICBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlM6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KUywKICAgICAgICAgICJKUyBleHByZXNzaW9uIG11c3QgdGFrZSB0d28gb3IgbW9yZSBhcmd1bWVudHMuIiksCgogICAgICBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfRklSU1Q6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KU19GSVJTVCwKICAgICAgICAgICJKUyBleHByZXNzaW9uIG11c3QgdGFrZSB0d28gb3IgbW9yZSBhcmd1bWVudHMuIiksCgogICAgICBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfU0VDT05EOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfU0VDT05ELAogICAgICAgICAgIkpTIHNlY29uZCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIGxpdGVyYWwuIiksCgogICAgICBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfSU5URVJDRVBUT1JfQ09OU1RBTlQ6CiAgICAgICAgICBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTX0lOVEVSQ0VQVE9SX0NPTlNUQU5ULAogICAgICAgICAgICAgICJBcmd1bWVudCBmb3IgJ0pTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UJyBtdXN0IGJlIGEgdHlwZSBjb25zdGFudC4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkFCU1RSQUNUX0dFVFRFUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuQUJTVFJBQ1RfR0VUVEVSLAogICAgICAgICAgIlRoZSBnZXR0ZXIgJyN7bmFtZX0nIGhhcyBubyBpbXBsZW1lbnRhdGlvbiBpbiAiCiAgICAgICAgICAiY2xhc3MgJyN7Y2xhc3N9Jy4iLAogICAgICAgICAgaG93VG9GaXg6ICJUcnkgYWRkaW5nIGEgYm9keSB0byAnI3tuYW1lfScgb3IgZGVjbGFyaW5nICIKICAgICAgICAgICAgICAiJyN7Y2xhc3N9JyB0byBiZSAnYWJzdHJhY3QnLiIsCiAgICAgICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICAgICAiIiIKY2xhc3MgQ2xhc3MgewogIGdldCBnZXR0ZXI7Cn0KbWFpbigpID0+IG5ldyBDbGFzcygpOwoiIiIKICAgICAgICAgIF0pLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9NRVRBREFUQTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9NRVRBREFUQSwKICAgICAgICAgICJBIG1ldGFkYXRhIGFubm90YXRpb24gbXVzdCBiZSBlaXRoZXIgYSByZWZlcmVuY2UgdG8gYSBjb21waWxlLXRpbWUgIgogICAgICAgICAgImNvbnN0YW50IHZhcmlhYmxlIG9yIGEgY2FsbCB0byBhIGNvbnN0YW50IGNvbnN0cnVjdG9yLiIsCiAgICAgICAgICBob3dUb0ZpeDoKICAgICAgICAgICAgICAiVHJ5IHVzaW5nIGEgZGlmZmVyZW50IGNvbnN0YW50IHZhbHVlIG9yIHJlZmVyZW5jaW5nIGl0IHRocm91Z2ggYSAiCiAgICAgICAgICAgICAgImNvbnN0YW50IHZhcmlhYmxlLiIsCiAgICAgICAgICBleGFtcGxlczogY29uc3QgWydAT2JqZWN0IG1haW4oKSB7fScsICdAcHJpbnQgbWFpbigpIHt9J10pLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9NRVRBREFUQV9HRU5FUklDOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX01FVEFEQVRBX0dFTkVSSUMsCiAgICAgICAgICAiQSBtZXRhZGF0YSBhbm5vdGF0aW9uIHVzaW5nIGEgY29uc3RhbnQgY29uc3RydWN0b3IgY2Fubm90IHVzZSB0eXBlICIKICAgICAgICAgICJhcmd1bWVudHMuIiwKICAgICAgICAgIGhvd1RvRml4OgogICAgICAgICAgICAgICJUcnkgcmVtb3ZpbmcgdGhlIHR5cGUgYXJndW1lbnRzIG9yIHJlZmVyZW5jaW5nIHRoZSBjb25zdGFudCAiCiAgICAgICAgICAgICAgInRocm91Z2ggYSBjb25zdGFudCB2YXJpYWJsZS4iLAogICAgICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAgICAgJycnCmNsYXNzIEM8VD4gewogIGNvbnN0IEMoKTsKfQpAQzxpbnQ+KCkgbWFpbigpIHt9CicnJwogICAgICAgICAgXSksCgogICAgICBNZXNzYWdlS2luZC5FUVVBTF9NQVBfRU5UUllfS0VZOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5FUVVBTF9NQVBfRU5UUllfS0VZLAogICAgICAgICAgIkFuIGVudHJ5IHdpdGggdGhlIHNhbWUga2V5IGFscmVhZHkgZXhpc3RzIGluIHRoZSBtYXAuIiwKICAgICAgICAgIGhvd1RvRml4OgogICAgICAgICAgICAgICJUcnkgcmVtb3ZpbmcgdGhlIHByZXZpb3VzIGVudHJ5IG9yIGNoYW5naW5nIHRoZSBrZXkgaW4gb25lICIKICAgICAgICAgICAgICAib2YgdGhlIGVudHJpZXMuIiwKICAgICAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgICAgICIiIgptYWluKCkgewogIHZhciBtID0gY29uc3Qgeydmb28nOiAxLCAnZm9vJzogMn07Cn0iIiIKICAgICAgICAgIF0pLAoKICAgICAgTWVzc2FnZUtpbmQuRVFVQUxfU0VUX0VOVFJZOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5FUVVBTF9TRVRfRU5UUlksICJBbiBlbnRyeSBhcHBlYXJzIHR3aWNlIGluIHRoZSBzZXQuIiwKICAgICAgICAgIGhvd1RvRml4OiAiVHJ5IHJlbW92aW5nIG9uZSBvZiB0aGUgZW50cmllcy4iLAogICAgICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAgICAgIiIiCm1haW4oKSB7CiAgdmFyIG0gPSBjb25zdCB7J2ZvbycsICdiYXInLCAnZm9vJ307Cn0iIiIKICAgICAgICAgIF0pLAoKICAgICAgTWVzc2FnZUtpbmQuQ09NUElMRVJfQ1JBU0hFRDogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuQ09NUElMRVJfQ1JBU0hFRCwKICAgICAgICAgICJUaGUgY29tcGlsZXIgY3Jhc2hlZCB3aGVuIGNvbXBpbGluZyB0aGlzIGVsZW1lbnQuIiksCgogICAgICBNZXNzYWdlS2luZC5QTEVBU0VfUkVQT1JUX1RIRV9DUkFTSDoKICAgICAgICAgIGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZShNZXNzYWdlS2luZC5QTEVBU0VfUkVQT1JUX1RIRV9DUkFTSCwgJycnClRoZSBjb21waWxlciBpcyBicm9rZW4uCgpXaGVuIGNvbXBpbGluZyB0aGUgYWJvdmUgZWxlbWVudCwgdGhlIGNvbXBpbGVyIGNyYXNoZWQuIEl0IGlzIG5vdApwb3NzaWJsZSB0byB0ZWxsIGlmIHRoaXMgaXMgY2F1c2VkIGJ5IGEgcHJvYmxlbSBpbiB5b3VyIHByb2dyYW0gb3IKbm90LiBSZWdhcmRsZXNzLCB0aGUgY29tcGlsZXIgc2hvdWxkIG5vdCBjcmFzaC4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvCnJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy4KClBsZWFzZSBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CgoqIHRoZSBuYW1lIGFuZCB2ZXJzaW9uIG9mIHlvdXIgb3BlcmF0aW5nIHN5c3RlbSwKCiogdGhlIERhcnQgU0RLIGJ1aWxkIG51bWJlciAoI3tidWlsZElkfSksIGFuZAoKKiB0aGUgZW50aXJlIG1lc3NhZ2UgeW91IHNlZSBoZXJlIChpbmNsdWRpbmcgdGhlIGZ1bGwgc3RhY2sgdHJhY2UKICBiZWxvdyBhcyB3ZWxsIGFzIHRoZSBzb3VyY2UgbG9jYXRpb24gYWJvdmUpLgonJycpLAoKICAgICAgTWVzc2FnZUtpbmQuSElEREVOX1dBUk5JTkdTX0hJTlRTOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5ISURERU5fV0FSTklOR1NfSElOVFMsCiAgICAgICAgICAiI3t3YXJuaW5nc30gd2FybmluZyhzKSBhbmQgI3toaW50c30gaGludChzKSBzdXBwcmVzc2VkIGluICN7dXJpfS4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkhJRERFTl9XQVJOSU5HUzogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSElEREVOX1dBUk5JTkdTLAogICAgICAgICAgIiN7d2FybmluZ3N9IHdhcm5pbmcocykgc3VwcHJlc3NlZCBpbiAje3VyaX0uIiksCgogICAgICBNZXNzYWdlS2luZC5ISURERU5fSElOVFM6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkhJRERFTl9ISU5UUywgIiN7aGludHN9IGhpbnQocykgc3VwcHJlc3NlZCBpbiAje3VyaX0uIiksCgogICAgICBNZXNzYWdlS2luZC5QUkVBTUJMRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuUFJFQU1CTEUsCiAgICAgICAgICAiV2hlbiBydW4gb24gdGhlIGNvbW1hbmQtbGluZSwgdGhlIGNvbXBpbGVkIG91dHB1dCBtaWdodCIKICAgICAgICAgICIgcmVxdWlyZSBhIHByZWFtYmxlIGZpbGUgbG9jYXRlZCBpbjpcbiIKICAgICAgICAgICIgIDxzZGs+L2xpYi9faW50ZXJuYWwvanNfcnVudGltZS9saWIvcHJlYW1ibGVzLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9DT05ESVRJT05BTF9UWVBFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NPTkRJVElPTkFMX1RZUEUsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBjb25zdGFudCBjb25kaXRpb24uICIKICAgICAgICAgICJNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnYm9vbCcuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0lOVEVSUE9MQVRJT05fVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9JTlRFUlBPTEFUSU9OX1RZUEUsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgdmFsaWQgaW4gY29uc3RhbnQgc3RyaW5nICIKICAgICAgICAgICJpbnRlcnBvbGF0aW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnYm9vbCcsICdpbnQnLCAnZG91YmxlJywgIgogICAgICAgICAgIm9yICdTdHJpbmcnLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfUFJJTUlUSVZFX1RZUEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQklOQVJZX1BSSU1JVElWRV9UWVBFLAogICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhICIKICAgICAgICAgICJjb25zdGFudCBiaW5hcnkgI3tvcGVyYXRvcn0gZXhwcmVzc2lvbi4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgIgogICAgICAgICAgIidib29sJywgJ2ludCcsICdkb3VibGUnLCAnU3RyaW5nJywgb3IgJ051bGwnLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9TVFJJTkdfQUREX1RZUEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfU1RSSU5HX0FERF9UWVBFLAogICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhICIKICAgICAgICAgICJjb25zdGFudCBiaW5hcnkgKyBleHByZXNzaW9uIG9uICdTdHJpbmcnLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAiCiAgICAgICAgICAiJ1N0cmluZycuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX1NUUklOR19MRU5HVEhfVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9TVFJJTkdfTEVOR1RIX1RZUEUsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIGZvciBhICIKICAgICAgICAgICIubGVuZ3RoIGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdTdHJpbmcnLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9TSElGVDogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9TSElGVCwKICAgICAgICAgICJTaGlmdCBhbW91bnQgbXVzdCBiZSBub24tbmVnYXRpdmUgaW4gIgogICAgICAgICAgImAje2xlZnR9ICN7b3BlcmF0b3J9ICN7cmlnaHR9YC4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfRElWOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0RJViwKICAgICAgICAgICJEaXZpc29yIG11c3QgYmUgbm9uLXplcm8gaW4gYCN7bGVmdH0gI3tvcGVyYXRvcn0gI3tyaWdodH1gLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9OVU1fQUREX1RZUEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfTlVNX0FERF9UWVBFLAogICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhICIKICAgICAgICAgICJjb25zdGFudCBiaW5hcnkgKyBleHByZXNzaW9uIG9uICdudW0nLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAiCiAgICAgICAgICAiJ2ludCcgb3IgJ2RvdWJsZScuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NBU1Q6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ0FTVCwKICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHN1YnR5cGUgb2YgI3tjYXN0VHlwZX0uIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0FERF9UWVBFUzogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9BRERfVFlQRVMsCiAgICAgICAgICAiYCN7bGVmdENvbnN0YW50fWAgb2YgdHlwZSAnI3tsZWZ0VHlwZX0nIGFuZCAiCiAgICAgICAgICAiYCN7cmlnaHRDb25zdGFudH1gIG9mIHR5cGUgJyN7cmlnaHRUeXBlfScgYXJlIG5vdCB2YWxpZCBvcGVyYW5kcyAiCiAgICAgICAgICAib2YgYSBjb25zdGFudCBiaW5hcnkgKyBleHByZXNzaW9uLiBNdXN0IGJvdGggYmUgZWl0aGVyIG9mICIKICAgICAgICAgICJ0eXBlICdTdHJpbmcnLCBvciBvZiB0eXBlcyAnaW50JyBvciAnZG91YmxlJy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQklOQVJZX05VTV9UWVBFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9OVU1fVFlQRSwKICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgb2YgYSAiCiAgICAgICAgICAiY29uc3RhbnQgYmluYXJ5ICN7b3BlcmF0b3J9IGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICIKICAgICAgICAgICInaW50JyBvciAnZG91YmxlJy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQklOQVJZX0lOVF9UWVBFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9JTlRfVFlQRSwKICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgb2YgYSAiCiAgICAgICAgICAiY29uc3RhbnQgYmluYXJ5ICN7b3BlcmF0b3J9IGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICIKICAgICAgICAgICInaW50Jy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfTk9UX1RZUEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfTk9UX1RZUEUsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIG9mIGEgIgogICAgICAgICAgImNvbnN0YW50IHVuYXJ5ICN7b3BlcmF0b3J9IGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICIKICAgICAgICAgICInYm9vbCcuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX05FR0FURV9UWVBFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX05FR0FURV9UWVBFLAogICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhICIKICAgICAgICAgICJjb25zdGFudCB1bmFyeSAje29wZXJhdG9yfSBleHByZXNzaW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAiCiAgICAgICAgICAiJ2ludCcgb3IgJ2RvdWJsZScuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NPTVBMRU1FTlRfVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9DT01QTEVNRU5UX1RZUEUsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIG9mIGEgIgogICAgICAgICAgImNvbnN0YW50IHVuYXJ5ICN7b3BlcmF0b3J9IGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICIKICAgICAgICAgICInaW50Jy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfSU5ERVg6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfSU5ERVgsCiAgICAgICAgICAiSW5kZXggZXhwcmVzc2lvbnMgYXJlIG5vdCBhbGxvd2VkIGluIGNvbnN0YW50IGV4cHJlc3Npb25zLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9GUk9NX0VOVklST05NRU5UX05BTUVfVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9GUk9NX0VOVklST05NRU5UX05BTUVfVFlQRSwKICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIGVudmlyb25tZW50IG5hbWUgIgogICAgICAgICAgImNvbnN0YW50LiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnU3RyaW5nJy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQk9PTF9GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRToKICAgICAgICAgIGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0JPT0xfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEUsCiAgICAgICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgIgogICAgICAgICAgICAgICJgYm9vbC5mcm9tRW52aXJvbm1lbnRgIGRlZmF1bHQgdmFsdWUgY29uc3RhbnQuICIKICAgICAgICAgICAgICAiTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2Jvb2wnIG9yIGBudWxsYC4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfSU5UX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFOgogICAgICAgICAgY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfSU5UX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFLAogICAgICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkICIKICAgICAgICAgICAgICAiYGludC5mcm9tRW52aXJvbm1lbnRgIGRlZmF1bHQgdmFsdWUgY29uc3RhbnQuICIKICAgICAgICAgICAgICAiTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2ludCcgb3IgYG51bGxgLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9TVFJJTkdfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEU6CiAgICAgICAgICBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9TVFJJTkdfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEUsCiAgICAgICAgICAgICAgImAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgIgogICAgICAgICAgICAgICJgU3RyaW5nLmZyb21FbnZpcm9ubWVudGAgZGVmYXVsdCB2YWx1ZSBjb25zdGFudC4gIgogICAgICAgICAgICAgICJNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnU3RyaW5nJyBvciBgbnVsbGAuIiksCgogICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0xPR0lDQUxfQU5EX09QRVJBTkRfVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9MT0dJQ0FMX0FORF9PUEVSQU5EX1RZUEUsCiAgICAgICAgICAiYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBsb2dpY2FsIGFuZCBvcGVyYW5kLiAiCiAgICAgICAgICAiTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2Jvb2wnLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9MT0dJQ0FMX09SX09QRVJBTkRfVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9MT0dJQ0FMX09SX09QRVJBTkRfVFlQRSwKICAgICAgICAgICJgI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIGxvZ2ljYWwgb3Igb3BlcmFuZC4gIgogICAgICAgICAgIk11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdib29sJy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ09OU1RSVUNUT1I6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ09OU1RSVUNUT1IsCiAgICAgICAgICAiQ29uc3RydWN0b3IgJyN7Y29uc3RydWN0b3JOYW1lfScgaXMgbm90IGEgdmFsaWQgY29uc3RhbnQgIgogICAgICAgICAgImNvbnN0cnVjdG9yLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9BU1NFUlRfVkFMVUU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQVNTRVJUX1ZBTFVFLCAiQXNzZXJ0aW9uICcje2Fzc2VydGlvbn0nIGZhaWxlZC4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQVNTRVJUX1ZBTFVFX01FU1NBR0U6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQVNTRVJUX1ZBTFVFX01FU1NBR0UsCiAgICAgICAgICAiQXNzZXJ0aW9uIGZhaWxlZDogI3ttZXNzYWdlfSIpLAoKICAgICAgTWVzc2FnZUtpbmQuTUlSUk9SU19MSUJSQVJZX05PVF9TVVBQT1JUX1dJVEhfQ0ZFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5NSVJST1JTX0xJQlJBUllfTk9UX1NVUFBPUlRfV0lUSF9DRkUsICIiIgpkYXJ0MmpzIG5vIGxvbmdlciBzdXBwb3J0cyB0aGUgZGFydDptaXJyb3JzIGxpYnJhcnkuCgpBUElzIGZyb20gdGhpcyBsaWJyYXJ5IHdpbGwgdGhyb3cgYSBydW50aW1lIGVycm9yIGF0IHRoaXMgdGltZSwgYnV0IHRoZXkgd2lsbApiZWNvbWUgYSBjb21waWxlLXRpbWUgZXJyb3IgaW4gdGhlIGZ1dHVyZS4iIiIpLAoKICAgICAgTWVzc2FnZUtpbmQuRElSRUNUTFlfVEhST1dJTkdfTlNNOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5ESVJFQ1RMWV9USFJPV0lOR19OU00sCiAgICAgICAgICAiVGhpcyAnbm9TdWNoTWV0aG9kJyBpbXBsZW1lbnRhdGlvbiBpcyBndWFyYW50ZWVkIHRvIHRocm93IGFuICIKICAgICAgICAgICJleGNlcHRpb24uIFRoZSBnZW5lcmF0ZWQgY29kZSB3aWxsIGJlIHNtYWxsZXIgaWYgaXQgaXMgIgogICAgICAgICAgInJld3JpdHRlbi4iLAogICAgICAgICAgaG93VG9GaXg6ICJSZXdyaXRlIHRvICIKICAgICAgICAgICAgICAiJ25vU3VjaE1ldGhvZChJbnZvY2F0aW9uIGkpID0+IHN1cGVyLm5vU3VjaE1ldGhvZChpKTsnLiIpLAoKICAgICAgTWVzc2FnZUtpbmQuQ09NUExFWF9USFJPV0lOR19OU006IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLkNPTVBMRVhfVEhST1dJTkdfTlNNLAogICAgICAgICAgIlRoaXMgJ25vU3VjaE1ldGhvZCcgaW1wbGVtZW50YXRpb24gaXMgZ3VhcmFudGVlZCB0byB0aHJvdyBhbiAiCiAgICAgICAgICAiZXhjZXB0aW9uLiBUaGUgZ2VuZXJhdGVkIGNvZGUgd2lsbCBiZSBzbWFsbGVyIGFuZCB0aGUgY29tcGlsZXIgIgogICAgICAgICAgIndpbGwgYmUgYWJsZSB0byBwZXJmb3JtIG1vcmUgb3B0aW1pemF0aW9ucyBpZiBpdCBpcyByZXdyaXR0ZW4uIiwKICAgICAgICAgIGhvd1RvRml4OiAiUmV3cml0ZSB0byAiCiAgICAgICAgICAgICAgIidub1N1Y2hNZXRob2QoSW52b2NhdGlvbiBpKSA9PiBzdXBlci5ub1N1Y2hNZXRob2QoaSk7Jy4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLkNPTVBMRVhfUkVUVVJOSU5HX05TTTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuQ09NUExFWF9SRVRVUk5JTkdfTlNNLAogICAgICAgICAgIk92ZXJyaWRpbmcgJ25vU3VjaE1ldGhvZCcgY2F1c2VzIHRoZSBjb21waWxlciB0byBnZW5lcmF0ZSAiCiAgICAgICAgICAibW9yZSBjb2RlIGFuZCBwcmV2ZW50cyB0aGUgY29tcGlsZXIgZnJvbSBkb2luZyBzb21lIG9wdGltaXphdGlvbnMuIiwKICAgICAgICAgIGhvd1RvRml4OiAiQ29uc2lkZXIgcmVtb3ZpbmcgdGhpcyAnbm9TdWNoTWV0aG9kJyBpbXBsZW1lbnRhdGlvbi4iKSwKCiAgICAgIE1lc3NhZ2VLaW5kLlJVTlRJTUVfVFlQRV9UT19TVFJJTkdfT0JKRUNUOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5SVU5USU1FX1RZUEVfVE9fU1RSSU5HX09CSkVDVCwKICAgICAgICAgICJVc2luZyAnLnJ1bnRpbWVUeXBlLnRvU3RyaW5nKCknIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgIgogICAgICAgICAgIm1vcmUgY29kZSBiZWNhdXNlIGl0IG5lZWRzIHRvIHByZXNlcnZlIHR5cGUgYXJndW1lbnRzIG9uIGFsbCAiCiAgICAgICAgICAiZ2VuZXJpYyBjbGFzc2VzLCBldmVuIGlmIHRoZXkgYXJlIG5vdCBuZWNlc3NhcnkgZWxzZXdoZXJlLiIsCiAgICAgICAgICBob3dUb0ZpeDogIklmIHVzZWQgb25seSBmb3IgZGVidWdnaW5nLCBjb25zaWRlciB1c2luZyBvcHRpb24gIgogICAgICAgICAgICAgICIke0ZsYWdzLmxheFJ1bnRpbWVUeXBlVG9TdHJpbmd9IHRvIHJlZHVjZSB0aGUgY29kZSBzaXplICIKICAgICAgICAgICAgICAiaW1wYWN0LiIpLAoKICAgICAgTWVzc2FnZUtpbmQuUlVOVElNRV9UWVBFX1RPX1NUUklOR19TVUJUWVBFOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5SVU5USU1FX1RZUEVfVE9fU1RSSU5HX1NVQlRZUEUsCiAgICAgICAgICAiVXNpbmcgJy5ydW50aW1lVHlwZS50b1N0cmluZygpJyBoZXJlIGNhdXNlcyB0aGUgY29tcGlsZXIgdG8gIgogICAgICAgICAgImdlbmVyYXRlIG1vcmUgY29kZSBiZWNhdXNlIGl0IG5lZWRzIHRvIHByZXNlcnZlIHR5cGUgYXJndW1lbnRzIG9uICIKICAgICAgICAgICJhbGwgZ2VuZXJpYyBzdWJ0eXBlcyBvZiAnI3tyZWNlaXZlclR5cGV9JywgZXZlbiBpZiB0aGV5IGFyZSBub3QgIgogICAgICAgICAgIm5lY2Vzc2FyeSBlbHNld2hlcmUuIiwKICAgICAgICAgIGhvd1RvRml4OiAiSWYgdXNlZCBvbmx5IGZvciBkZWJ1Z2dpbmcsIGNvbnNpZGVyIHVzaW5nIG9wdGlvbiAiCiAgICAgICAgICAgICAgIiR7RmxhZ3MubGF4UnVudGltZVR5cGVUb1N0cmluZ30gdG8gcmVkdWNlIHRoZSBjb2RlIHNpemUgIgogICAgICAgICAgICAgICJpbXBhY3QuIiksCgogICAgICBNZXNzYWdlS2luZC5OT05fTkFUSVZFX0VYVEVSTkFMOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5OT05fTkFUSVZFX0VYVEVSTkFMLAogICAgICAgICAgIk9ubHkgZXh0ZXJuYWwganMtaW50ZXJvcCBmdW5jdGlvbnMgYXJlIHN1cHBvcnRlZC4iLAogICAgICAgICAgaG93VG9GaXg6CiAgICAgICAgICAgICAgIlRyeSByZW1vdmluZyAnZXh0ZXJuYWwnIGtleXdvcmQgb3IgYW5ub3RhdGluZyB0aGUgZnVuY3Rpb24gIgogICAgICAgICAgICAgICJhcyBhIGpzLWludGVyb3AgZnVuY3Rpb24uIiksCgogICAgICBNZXNzYWdlS2luZC5OQVRJVkVfTk9OX0lOU1RBTkNFX0lOX05PTl9OQVRJVkVfQ0xBU1M6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLk5BVElWRV9OT05fSU5TVEFOQ0VfSU5fTk9OX05BVElWRV9DTEFTUywKICAgICAgICAgICJOYXRpdmUgbm9uLWluc3RhbmNlIG1lbWJlcnMgYXJlIG9ubHkgYWxsb3dlZCBpbiBuYXRpdmUgY2xhc3Nlcy4iKSwKCiAgICAgIC8vIFRPRE8oMzI1NTcpOiBSZW1vdmUgdGhlc2Ugd2hlbiBpc3N1ZSAzMjU1NyBpcyBmaXhlZC4KICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVkFMVUVfT1ZFUlJJREVTX0VRVUFMUzogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVkFMVUVfT1ZFUlJJREVTX0VRVUFMUywKICAgICAgICAgICInY2FzZScgZXhwcmVzc2lvbiB0eXBlICcje3R5cGV9JyBvdmVycmlkZXMgJ29wZXJhdG9yID09Jy4iKSwKICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfRk9SQklEREVOOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5TV0lUQ0hfQ0FTRV9GT1JCSURERU4sCiAgICAgICAgICAiJ2Nhc2UnIGV4cHJlc3Npb24gbWF5IG5vdCBiZSBvZiB0eXBlICcje3R5cGV9Jy4iKSwKICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVFlQRVNfTk9UX0VRVUFMOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgICAgICBNZXNzYWdlS2luZC5TV0lUQ0hfQ0FTRV9UWVBFU19OT1RfRVFVQUwsCiAgICAgICAgICAiJ2Nhc2UnIGV4cHJlc3Npb25zIGRvIG5vdCBhbGwgaGF2ZSB0eXBlICcje3R5cGV9Jy4iKSwKICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVFlQRVNfTk9UX0VRVUFMX0NBU0U6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgICAgIE1lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX1RZUEVTX05PVF9FUVVBTF9DQVNFLAogICAgICAgICAgIidjYXNlJyBleHByZXNzaW9uIG9mIHR5cGUgJyN7dHlwZX0nLiIpLAogICAgfSk7IC8vIEVuZCBvZiBURU1QTEFURVMuCgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IHRlbXBsYXRlOwoKICBNZXNzYWdlIG1lc3NhZ2UoW01hcCBhcmd1bWVudHMgPSBjb25zdCB7fSwgYm9vbCB0ZXJzZSA9IGZhbHNlXSkgewogICAgcmV0dXJuIG5ldyBNZXNzYWdlKHRoaXMsIGFyZ3VtZW50cywgdGVyc2UpOwogIH0KCiAgYm9vbCBnZXQgaGFzSG93VG9GaXggPT4gaG93VG9GaXggIT0gbnVsbCAmJiBob3dUb0ZpeCAhPSBET05UX0tOT1dfSE9XX1RPX0ZJWDsKfQoKY2xhc3MgTWVzc2FnZSB7CiAgZmluYWwgTWVzc2FnZVRlbXBsYXRlIHRlbXBsYXRlOwogIGZpbmFsIE1hcCBhcmd1bWVudHM7CiAgZmluYWwgYm9vbCB0ZXJzZTsKICBTdHJpbmcgbWVzc2FnZTsKCiAgTWVzc2FnZSh0aGlzLnRlbXBsYXRlLCB0aGlzLmFyZ3VtZW50cywgdGhpcy50ZXJzZSkgewogICAgYXNzZXJ0KCgpIHsKICAgICAgY29tcHV0ZU1lc3NhZ2UoKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9KCkpOwogIH0KCiAgTWVzc2FnZUtpbmQgZ2V0IGtpbmQgPT4gdGVtcGxhdGUua2luZDsKCiAgU3RyaW5nIGNvbXB1dGVNZXNzYWdlKCkgewogICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkgewogICAgICBtZXNzYWdlID0gdGVtcGxhdGUudGVtcGxhdGU7CiAgICAgIGFyZ3VtZW50cy5mb3JFYWNoKChrZXksIHZhbHVlKSB7CiAgICAgICAgbWVzc2FnZSA9IG1lc3NhZ2UucmVwbGFjZUFsbCgnI3ske2tleX19JywgY29udmVydFRvU3RyaW5nKHZhbHVlKSk7CiAgICAgIH0pOwogICAgICBhc3NlcnQoCiAgICAgICAgICBraW5kID09IE1lc3NhZ2VLaW5kLkdFTkVSSUMgfHwKICAgICAgICAgICAgICAhbWVzc2FnZS5jb250YWlucyhuZXcgUmVnRXhwKHInI1x7LitcfScpKSwKICAgICAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgICAgJ01pc3NpbmcgYXJndW1lbnRzIGluIGVycm9yIG1lc3NhZ2U6ICIkbWVzc2FnZSInKSk7CiAgICAgIGlmICghdGVyc2UgJiYgdGVtcGxhdGUuaGFzSG93VG9GaXgpIHsKICAgICAgICBTdHJpbmcgaG93VG9GaXggPSB0ZW1wbGF0ZS5ob3dUb0ZpeDsKICAgICAgICBhcmd1bWVudHMuZm9yRWFjaCgoa2V5LCB2YWx1ZSkgewogICAgICAgICAgaG93VG9GaXggPSBob3dUb0ZpeC5yZXBsYWNlQWxsKCcjeyR7a2V5fX0nLCBjb252ZXJ0VG9TdHJpbmcodmFsdWUpKTsKICAgICAgICB9KTsKICAgICAgICBtZXNzYWdlID0gJyRtZXNzYWdlXG4kaG93VG9GaXgnOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbWVzc2FnZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiBjb21wdXRlTWVzc2FnZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBNZXNzYWdlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gKHRlbXBsYXRlID09IG90aGVyLnRlbXBsYXRlKSAmJiAodG9TdHJpbmcoKSA9PSBvdGhlci50b1N0cmluZygpKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ01lc3NhZ2UuaGFzaENvZGUnKTsKCiAgc3RhdGljIFN0cmluZyBjb252ZXJ0VG9TdHJpbmcodmFsdWUpIHsKICAgIGlmICh2YWx1ZSBpcyBDb25zdGFudEV4cHJlc3Npb24pIHsKICAgICAgdmFsdWUgPSB2YWx1ZS50b0RhcnRUZXh0KCk7CiAgICB9IGVsc2UgewogICAgICB2YWx1ZSA9IHRva2VuVG9TdHJpbmcodmFsdWUpOwogICAgfQogICAgcmV0dXJuICckdmFsdWUnOwogIH0KfQqDAwBOTjwBQ0YEIgRNRk9NJhoBTQE8QCYnOAEyASUTExIUGRgfESAhGRcTFx8YCxATGSsYIDQZHiQkKiQlIBgaJyAdJCEnGiYzJCMUHBoXNi0tKCIiIi0qOxoVKB8rGBcfEhsMGSQXISITFCgUFhQmJhoZHyAuOhkmHyQCAU1LLkYrGBoBLRkBUBkBIzYGUU8uFwE6HgEyRwEqBkwZQ0MZKDNRUBtBATlEAUYzKwFINT4BTTolATonRQE9IUVRKD0gECsBHAEUKAEXGxASDgFJNkZNGhwQJQEOFCUKAREYCg0QJQEOFC0KAREcCgwOAUshGkxITBNRKSAQDh8CHBkCFwQOAUk2NQFUQVBIRAE9IUVOH0sBTzxOQRwQKwEUGhkQARchEBIOAVE+Sj9MSSAcECsBFBoqEAEXKhASDjshQ0E7NUk2MjcxATxRAUEuNhErAT4rQSocECgbAQoFEBghAQoFEB4lAQoEDgFBLkUUTU0BQC09AUYzPQFHNDsBPiFGUgE6JzsfQy4cEA4OAhcEDgE7KFBEFFIkRgFDMFAYFE0uHBANDQIUBA4BPitDFEwhHBAJJgUOATpNOBwQCScFDgE7KEABK0kYAUJDMAFFLwEqATEBLgFCLwYBQC1QATonOwE3TwEzIEQzPgFMOVAuAU47TU0bAVE+SU08AUs4SU8YAU47SkQBQS4yLgE/LEoBSDVJTCEBQC1PAUUyOU5HPAFLOElNIQFLOElNFQFEMUlMFgFHNElMIQFLOElMFQFBLkkBTTpNOgFEIUxAQDwBQyFLQD87AUYhTkBCPgFLOFEuAUo3UC4BRzRGGwE/UQFHNCsBT0A1AU4wAUAtSkQYIkoBPyxKTEwiSgFALUdQTgFINU1KSElJGgFJNklPTSJJSRoBPis/FEwsAVI/TgE+TTpIQC0+RjNBSzgzHQEMIQFEMAQBUAIBECIXFBIBNxAYEwoEASkBHBsjJ0sKDik5LkIsLSlPDCkIBhQEAQwWHQQBDBwpTQQBDEYBKSciDSQGFQQCAS5wYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9tZXNzYWdlcy5kYXJ0LnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2Vudmlyb25tZW50LmRhcnSDEC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gQ29sbGVjdHMgZGVmaW5pdGlvbnMgcHJvdmlkZWQgdG8gdGhlIGNvbXBpbGVyIHZpYSB0aGUgYC1EYCBmbGFnLgovLy8KLy8vIEVudmlyb25tZW50IHZhcmlhYmxlcyBjYW4gYmUgdXNlZCBpbiB0aGUgdXNlciBjb2RlIGluIHR3byB3YXlzLiBGcm9tCi8vLyBjb25kaXRpb25hbCBpbXBvcnRzLCBhbmQgZnJvbSBgY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudGAgYW5kCi8vLyBvdGhlciBzaW1pbGFyIGNvbnN0cnVjdG9ycy4KYWJzdHJhY3QgY2xhc3MgRW52aXJvbm1lbnQgewogIC8vLyBSZXR1cm4gdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgZ2l2ZW4ga2V5LgogIC8vLwogIC8vLyBOb3RlIHRoYXQgYGJvb2wuZnJvbUVudmlyb25tZW50YCBhbmQgYGludC5mcm9tRW52aXJvbm1lbnRgIGFyZSBhbHNvCiAgLy8vIGltcGxlbWVudGVkIGluIHRlcm1zIG9mIGBTdHJpbmcuZnJvbUVudmlyb25tZW50YC4KICBTdHJpbmcgdmFsdWVPZihTdHJpbmcga2V5KTsKCiAgLy8vIFJldHVybnMgdGhlIGZ1bGwgZW52aXJvbm1lbnQgYXMgbWFwLgogIE1hcDxTdHJpbmcsIFN0cmluZz4gdG9NYXAoKTsKfQoVAE5OPAFFBElFIB0wBko4HgErHwIBJXBhY2thZ2U6Y29tcGlsZXIvc3JjL2Vudmlyb25tZW50LmRhcnQ3c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW8vbG9jYXRpb25fcHJvdmlkZXIuZGFydIYwLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5pby5sb2NhdGlvbl9wcm92aWRlcjsKCmltcG9ydCAnY29kZV9vdXRwdXQuZGFydCcgc2hvdyBDb2RlT3V0cHV0TGlzdGVuZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IExvY2F0aW9uLCBTb3VyY2U7CgovLy8gSW50ZXJmYWNlIGZvciBwcm92aWRpbmcgbGluZS9jb2x1bW4gaW5mb3JtYXRpb24uCmFic3RyYWN0IGNsYXNzIExvY2F0aW9uUHJvdmlkZXIgewogIC8vLyBUcmFuc2xhdGVzIHRoZSB6ZXJvLWJhc2VkIGNoYXJhY3RlciBbb2Zmc2V0XSAoZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGEKICAvLy8gZmlsZSkgdG8gYSBbTG9jYXRpb25dLgogIExvY2F0aW9uIGdldExvY2F0aW9uKGludCBvZmZzZXQpOwp9CgovLy8gW0NvZGVPdXRwdXRMaXN0ZW5lcl0gdGhhdCBjb2xsZWN0cyBsaW5lIGluZm9ybWF0aW9uLgpjbGFzcyBMb2NhdGlvbkNvbGxlY3RvciBleHRlbmRzIENvZGVPdXRwdXRMaXN0ZW5lciBpbXBsZW1lbnRzIExvY2F0aW9uUHJvdmlkZXIgewogIGludCBsZW5ndGggPSAwOwogIExpc3Q8aW50PiBsaW5lU3RhcnRzID0gPGludD5bMF07CgogIHZvaWQgX2NvbGxlY3QoU3RyaW5nIHRleHQpIHsKICAgIGludCBpbmRleCA9IDA7CiAgICB3aGlsZSAoaW5kZXggPCB0ZXh0Lmxlbmd0aCkgewogICAgICAvLyBVbml4IHVzZXMgJ1xuJyBhbmQgV2luZG93cyB1c2VzICdcclxuJywgc28gdGhpcyBhbGdvcml0aG0gd29ya3MgZm9yCiAgICAgIC8vIGJvdGggcGxhdGZvcm1zLgogICAgICBpbmRleCA9IHRleHQuaW5kZXhPZignXG4nLCBpbmRleCkgKyAxOwogICAgICBpZiAoaW5kZXggPD0gMCkgYnJlYWs7CiAgICAgIGxpbmVTdGFydHMuYWRkKGxlbmd0aCArIGluZGV4KTsKICAgIH0KICAgIGxlbmd0aCArPSB0ZXh0Lmxlbmd0aDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgb25UZXh0KFN0cmluZyB0ZXh0KSB7CiAgICBfY29sbGVjdCh0ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIExvY2F0aW9uIGdldExvY2F0aW9uKGludCBvZmZzZXQpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwob2Zmc2V0LCAwLCBsZW5ndGgsICdvZmZzZXQnKTsKICAgIHJldHVybiBuZXcgU291cmNlKGxpbmVTdGFydHMsIG51bGwsIG51bGwsIG51bGwpLmdldExvY2F0aW9uKG51bGwsIG9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9uRG9uZShpbnQgbGVuZ3RoKSB7CiAgICBsaW5lU3RhcnRzLmFkZChsZW5ndGggKyAxKTsKICAgIHRoaXMubGVuZ3RoID0gbGVuZ3RoOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdsaW5lU3RhcnRzPSRsaW5lU3RhcnRzLGxlbmd0aD0kbGVuZ3RoJzsKICB9Cn0KOgBOTjwBJgEzATgBNSJMHSQCATlREiMBHxMiTRktHSYGGwQBDB0UBAEMJUJPBAEMHCAaBAEMFjQEAgEucGFja2FnZTpjb21waWxlci9zcmMvaW8vbG9jYXRpb25fcHJvdmlkZXIuZGFydCdzZGtyb290Oi9wa2cva2VybmVsL2xpYi9iaW5hcnkvdGFnLmRhcnSYxC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLmJpbmFyeS50YWc7CgpjbGFzcyBUYWcgewogIHN0YXRpYyBjb25zdCBpbnQgTm90aGluZyA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBTb21ldGhpbmcgPSAxOwoKICBzdGF0aWMgY29uc3QgaW50IENsYXNzID0gMjsKCiAgc3RhdGljIGNvbnN0IGludCBGdW5jdGlvbk5vZGUgPSAzOwoKICAvLyBNZW1iZXJzCiAgc3RhdGljIGNvbnN0IGludCBGaWVsZCA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBDb25zdHJ1Y3RvciA9IDU7CiAgc3RhdGljIGNvbnN0IGludCBQcm9jZWR1cmUgPSA2OwogIHN0YXRpYyBjb25zdCBpbnQgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IgPSAxMDg7CgogIC8vIEluaXRpYWxpemVycwogIHN0YXRpYyBjb25zdCBpbnQgSW52YWxpZEluaXRpYWxpemVyID0gNzsKICBzdGF0aWMgY29uc3QgaW50IEZpZWxkSW5pdGlhbGl6ZXIgPSA4OwogIHN0YXRpYyBjb25zdCBpbnQgU3VwZXJJbml0aWFsaXplciA9IDk7CiAgc3RhdGljIGNvbnN0IGludCBSZWRpcmVjdGluZ0luaXRpYWxpemVyID0gMTA7CiAgc3RhdGljIGNvbnN0IGludCBMb2NhbEluaXRpYWxpemVyID0gMTE7CiAgc3RhdGljIGNvbnN0IGludCBBc3NlcnRJbml0aWFsaXplciA9IDEyOwoKICAvLyBFeHByZXNzaW9ucwogIHN0YXRpYyBjb25zdCBpbnQgQ2hlY2tMaWJyYXJ5SXNMb2FkZWQgPSAxMzsKICBzdGF0aWMgY29uc3QgaW50IExvYWRMaWJyYXJ5ID0gMTQ7CiAgc3RhdGljIGNvbnN0IGludCBEaXJlY3RQcm9wZXJ0eUdldCA9IDE1OwogIHN0YXRpYyBjb25zdCBpbnQgRGlyZWN0UHJvcGVydHlTZXQgPSAxNjsKICBzdGF0aWMgY29uc3QgaW50IERpcmVjdE1ldGhvZEludm9jYXRpb24gPSAxNzsKICBzdGF0aWMgY29uc3QgaW50IENvbnN0U3RhdGljSW52b2NhdGlvbiA9IDE4OwogIHN0YXRpYyBjb25zdCBpbnQgSW52YWxpZEV4cHJlc3Npb24gPSAxOTsKICBzdGF0aWMgY29uc3QgaW50IFZhcmlhYmxlR2V0ID0gMjA7CiAgc3RhdGljIGNvbnN0IGludCBWYXJpYWJsZVNldCA9IDIxOwogIHN0YXRpYyBjb25zdCBpbnQgUHJvcGVydHlHZXQgPSAyMjsKICBzdGF0aWMgY29uc3QgaW50IFByb3BlcnR5U2V0ID0gMjM7CiAgc3RhdGljIGNvbnN0IGludCBTdXBlclByb3BlcnR5R2V0ID0gMjQ7CiAgc3RhdGljIGNvbnN0IGludCBTdXBlclByb3BlcnR5U2V0ID0gMjU7CiAgc3RhdGljIGNvbnN0IGludCBTdGF0aWNHZXQgPSAyNjsKICBzdGF0aWMgY29uc3QgaW50IFN0YXRpY1NldCA9IDI3OwogIHN0YXRpYyBjb25zdCBpbnQgTWV0aG9kSW52b2NhdGlvbiA9IDI4OwogIHN0YXRpYyBjb25zdCBpbnQgU3VwZXJNZXRob2RJbnZvY2F0aW9uID0gMjk7CiAgc3RhdGljIGNvbnN0IGludCBTdGF0aWNJbnZvY2F0aW9uID0gMzA7CiAgc3RhdGljIGNvbnN0IGludCBDb25zdHJ1Y3Rvckludm9jYXRpb24gPSAzMTsKICBzdGF0aWMgY29uc3QgaW50IENvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uID0gMzI7CiAgc3RhdGljIGNvbnN0IGludCBOb3QgPSAzMzsKICBzdGF0aWMgY29uc3QgaW50IExvZ2ljYWxFeHByZXNzaW9uID0gMzQ7CiAgc3RhdGljIGNvbnN0IGludCBDb25kaXRpb25hbEV4cHJlc3Npb24gPSAzNTsKICBzdGF0aWMgY29uc3QgaW50IFN0cmluZ0NvbmNhdGVuYXRpb24gPSAzNjsKICBzdGF0aWMgY29uc3QgaW50IExpc3RDb25jYXRlbmF0aW9uID0gMTExOwogIHN0YXRpYyBjb25zdCBpbnQgU2V0Q29uY2F0ZW5hdGlvbiA9IDExMjsKICBzdGF0aWMgY29uc3QgaW50IE1hcENvbmNhdGVuYXRpb24gPSAxMTM7CiAgc3RhdGljIGNvbnN0IGludCBJbnN0YW5jZUNyZWF0aW9uID0gMTE0OwogIHN0YXRpYyBjb25zdCBpbnQgSXNFeHByZXNzaW9uID0gMzc7CiAgc3RhdGljIGNvbnN0IGludCBBc0V4cHJlc3Npb24gPSAzODsKICBzdGF0aWMgY29uc3QgaW50IFN0cmluZ0xpdGVyYWwgPSAzOTsKICBzdGF0aWMgY29uc3QgaW50IERvdWJsZUxpdGVyYWwgPSA0MDsKICBzdGF0aWMgY29uc3QgaW50IFRydWVMaXRlcmFsID0gNDE7CiAgc3RhdGljIGNvbnN0IGludCBGYWxzZUxpdGVyYWwgPSA0MjsKICBzdGF0aWMgY29uc3QgaW50IE51bGxMaXRlcmFsID0gNDM7CiAgc3RhdGljIGNvbnN0IGludCBTeW1ib2xMaXRlcmFsID0gNDQ7CiAgc3RhdGljIGNvbnN0IGludCBUeXBlTGl0ZXJhbCA9IDQ1OwogIHN0YXRpYyBjb25zdCBpbnQgVGhpc0V4cHJlc3Npb24gPSA0NjsKICBzdGF0aWMgY29uc3QgaW50IFJldGhyb3cgPSA0NzsKICBzdGF0aWMgY29uc3QgaW50IFRocm93ID0gNDg7CiAgc3RhdGljIGNvbnN0IGludCBMaXN0TGl0ZXJhbCA9IDQ5OwogIHN0YXRpYyBjb25zdCBpbnQgTWFwTGl0ZXJhbCA9IDUwOwogIHN0YXRpYyBjb25zdCBpbnQgQXdhaXRFeHByZXNzaW9uID0gNTE7CiAgc3RhdGljIGNvbnN0IGludCBGdW5jdGlvbkV4cHJlc3Npb24gPSA1MjsKICBzdGF0aWMgY29uc3QgaW50IExldCA9IDUzOwogIHN0YXRpYyBjb25zdCBpbnQgQmxvY2tFeHByZXNzaW9uID0gODI7CiAgc3RhdGljIGNvbnN0IGludCBJbnN0YW50aWF0aW9uID0gNTQ7CiAgc3RhdGljIGNvbnN0IGludCBQb3NpdGl2ZUludExpdGVyYWwgPSA1NTsKICBzdGF0aWMgY29uc3QgaW50IE5lZ2F0aXZlSW50TGl0ZXJhbCA9IDU2OwogIHN0YXRpYyBjb25zdCBpbnQgQmlnSW50TGl0ZXJhbCA9IDU3OwogIHN0YXRpYyBjb25zdCBpbnQgQ29uc3RMaXN0TGl0ZXJhbCA9IDU4OwogIHN0YXRpYyBjb25zdCBpbnQgQ29uc3RNYXBMaXRlcmFsID0gNTk7CiAgc3RhdGljIGNvbnN0IGludCBTZXRMaXRlcmFsID0gMTA5OwogIHN0YXRpYyBjb25zdCBpbnQgQ29uc3RTZXRMaXRlcmFsID0gMTEwOwoKICAvLyBTdGF0ZW1lbnRzCiAgc3RhdGljIGNvbnN0IGludCBFeHByZXNzaW9uU3RhdGVtZW50ID0gNjE7CiAgc3RhdGljIGNvbnN0IGludCBCbG9jayA9IDYyOwogIHN0YXRpYyBjb25zdCBpbnQgRW1wdHlTdGF0ZW1lbnQgPSA2MzsKICBzdGF0aWMgY29uc3QgaW50IEFzc2VydFN0YXRlbWVudCA9IDY0OwogIHN0YXRpYyBjb25zdCBpbnQgTGFiZWxlZFN0YXRlbWVudCA9IDY1OwogIHN0YXRpYyBjb25zdCBpbnQgQnJlYWtTdGF0ZW1lbnQgPSA2NjsKICBzdGF0aWMgY29uc3QgaW50IFdoaWxlU3RhdGVtZW50ID0gNjc7CiAgc3RhdGljIGNvbnN0IGludCBEb1N0YXRlbWVudCA9IDY4OwogIHN0YXRpYyBjb25zdCBpbnQgRm9yU3RhdGVtZW50ID0gNjk7CiAgc3RhdGljIGNvbnN0IGludCBGb3JJblN0YXRlbWVudCA9IDcwOwogIHN0YXRpYyBjb25zdCBpbnQgU3dpdGNoU3RhdGVtZW50ID0gNzE7CiAgc3RhdGljIGNvbnN0IGludCBDb250aW51ZVN3aXRjaFN0YXRlbWVudCA9IDcyOwogIHN0YXRpYyBjb25zdCBpbnQgSWZTdGF0ZW1lbnQgPSA3MzsKICBzdGF0aWMgY29uc3QgaW50IFJldHVyblN0YXRlbWVudCA9IDc0OwogIHN0YXRpYyBjb25zdCBpbnQgVHJ5Q2F0Y2ggPSA3NTsKICBzdGF0aWMgY29uc3QgaW50IFRyeUZpbmFsbHkgPSA3NjsKICBzdGF0aWMgY29uc3QgaW50IFlpZWxkU3RhdGVtZW50ID0gNzc7CiAgc3RhdGljIGNvbnN0IGludCBWYXJpYWJsZURlY2xhcmF0aW9uID0gNzg7CiAgc3RhdGljIGNvbnN0IGludCBGdW5jdGlvbkRlY2xhcmF0aW9uID0gNzk7CiAgc3RhdGljIGNvbnN0IGludCBBc3luY0ZvckluU3RhdGVtZW50ID0gODA7CiAgc3RhdGljIGNvbnN0IGludCBBc3NlcnRCbG9jayA9IDgxOwogIC8vIDgyIGlzIG9jY3VwaWVkIGJ5IFtCbG9ja0V4cHJlc3Npb25dIChleHByZXNzaW9uKS4KCiAgLy8gVHlwZXMKICBzdGF0aWMgY29uc3QgaW50IFR5cGVkZWZUeXBlID0gODc7CiAgc3RhdGljIGNvbnN0IGludCBCb3R0b21UeXBlID0gODk7CiAgc3RhdGljIGNvbnN0IGludCBJbnZhbGlkVHlwZSA9IDkwOwogIHN0YXRpYyBjb25zdCBpbnQgRHluYW1pY1R5cGUgPSA5MTsKICBzdGF0aWMgY29uc3QgaW50IFZvaWRUeXBlID0gOTI7CiAgc3RhdGljIGNvbnN0IGludCBJbnRlcmZhY2VUeXBlID0gOTM7CiAgc3RhdGljIGNvbnN0IGludCBGdW5jdGlvblR5cGUgPSA5NDsKICBzdGF0aWMgY29uc3QgaW50IFR5cGVQYXJhbWV0ZXJUeXBlID0gOTU7CiAgc3RhdGljIGNvbnN0IGludCBTaW1wbGVJbnRlcmZhY2VUeXBlID0gOTY7CiAgc3RhdGljIGNvbnN0IGludCBTaW1wbGVGdW5jdGlvblR5cGUgPSA5NzsKCiAgLy8gUmVmZXJlbmNlcwogIHN0YXRpYyBjb25zdCBpbnQgTnVsbFJlZmVyZW5jZSA9IDk5OwogIHN0YXRpYyBjb25zdCBpbnQgQ2xhc3NSZWZlcmVuY2UgPSAxMDA7CiAgc3RhdGljIGNvbnN0IGludCBNZW1iZXJSZWZlcmVuY2UgPSAxMDE7CgogIHN0YXRpYyBjb25zdCBpbnQgQ29uc3RhbnRFeHByZXNzaW9uID0gMTA2OwoKICAvLyBUYWcgaXMgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDI0LgogIHN0YXRpYyBjb25zdCBpbnQgRGVwcmVjYXRlZF9Db25zdGFudEV4cHJlc3Npb24gPSAxMDc7CgogIC8vLyAxMDggaXMgb2NjdXBpZWQgYnkgW1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yXSAobWVtYmVyKS4KICAvLy8gMTA5IGlzIG9jY3VwaWVkIGJ5IFtTZXRMaXRlcmFsXSAoZXhwcmVzc2lvbikuCiAgLy8vIDExMCBpcyBvY2N1cGllZCBieSBbQ29uc3RTZXRMaXRlcmFsXSAoZXhwcmVzc2lvbikuCiAgLy8vIDExMSBpcyBvY2N1cGllZCBieSBbTGlzdENvbmNhdGVuYXRpb25dIChleHByZXNzaW9uKS4KICAvLy8gMTEyIGlzIG9jY3VwaWVkIGJ5IFtTZXRDb25jYXRlbmF0aW9uXSAoZXhwcmVzc2lvbikuCiAgLy8vIDExMyBpcyBvY2N1cGllZCBieSBbTWFwQ29uY2F0ZW5hdGlvbl0gKGV4cHJlc3Npb24pLgogIC8vLyAxMTQgaXMgb2NjdXBpZWQgYnkgW0luc3RhbmNlQ3JlYXRpb25dIChleHByZXNzaW9uKS4KCiAgc3RhdGljIGNvbnN0IGludCBTcGVjaWFsaXplZFRhZ0hpZ2hCaXQgPSAweDgwOyAvLyAxMDAwMDAwMAogIHN0YXRpYyBjb25zdCBpbnQgU3BlY2lhbGl6ZWRUYWdNYXNrID0gMHhGODsgLy8gMTExMTEwMDAKICBzdGF0aWMgY29uc3QgaW50IFNwZWNpYWxpemVkUGF5bG9hZE1hc2sgPSAweDc7IC8vIDAwMDAwMTExCgogIHN0YXRpYyBjb25zdCBpbnQgU3BlY2lhbGl6ZWRWYXJpYWJsZUdldCA9IDEyODsKICBzdGF0aWMgY29uc3QgaW50IFNwZWNpYWxpemVkVmFyaWFibGVTZXQgPSAxMzY7CiAgc3RhdGljIGNvbnN0IGludCBTcGVjaWFsaXplZEludExpdGVyYWwgPSAxNDQ7CgogIHN0YXRpYyBjb25zdCBpbnQgU3BlY2lhbGl6ZWRJbnRMaXRlcmFsQmlhcyA9IDM7CgogIHN0YXRpYyBjb25zdCBpbnQgQ29tcG9uZW50RmlsZSA9IDB4OTBBQkNERUY7CgogIC8vLyBJbnRlcm5hbCB2ZXJzaW9uIG9mIGtlcm5lbCBiaW5hcnkgZm9ybWF0LgogIC8vLyBCdW1wIGl0IHdoZW4gbWFraW5nIGluY29tcGF0aWJsZSBjaGFuZ2VzIGluIGtlcm5lbCBiaW5hcmllcy4KICAvLy8gS2VlcCBpbiBzeW5jIHdpdGggcnVudGltZS92bS9rZXJuZWxfYmluYXJ5LmgsIHBrZy9rZXJuZWwvYmluYXJ5Lm1kLgogIHN0YXRpYyBjb25zdCBpbnQgQmluYXJ5Rm9ybWF0VmVyc2lvbiA9IDI4Owp9CgphYnN0cmFjdCBjbGFzcyBDb25zdGFudFRhZyB7CiAgc3RhdGljIGNvbnN0IGludCBOdWxsQ29uc3RhbnQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgQm9vbENvbnN0YW50ID0gMTsKICBzdGF0aWMgY29uc3QgaW50IEludENvbnN0YW50ID0gMjsKICBzdGF0aWMgY29uc3QgaW50IERvdWJsZUNvbnN0YW50ID0gMzsKICBzdGF0aWMgY29uc3QgaW50IFN0cmluZ0NvbnN0YW50ID0gNDsKICBzdGF0aWMgY29uc3QgaW50IFN5bWJvbENvbnN0YW50ID0gNTsKICBzdGF0aWMgY29uc3QgaW50IE1hcENvbnN0YW50ID0gNjsKICBzdGF0aWMgY29uc3QgaW50IExpc3RDb25zdGFudCA9IDc7CiAgc3RhdGljIGNvbnN0IGludCBTZXRDb25zdGFudCA9IDEzOwogIHN0YXRpYyBjb25zdCBpbnQgSW5zdGFuY2VDb25zdGFudCA9IDg7CiAgc3RhdGljIGNvbnN0IGludCBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50ID0gOTsKICBzdGF0aWMgY29uc3QgaW50IFRlYXJPZmZDb25zdGFudCA9IDEwOwogIHN0YXRpYyBjb25zdCBpbnQgVHlwZUxpdGVyYWxDb25zdGFudCA9IDExOwogIHN0YXRpYyBjb25zdCBpbnQgVW5ldmFsdWF0ZWRDb25zdGFudCA9IDEyOwogIC8vIDEzIGlzIG9jY3VwaWVkIGJ5IFtTZXRDb25zdGFudF0KfQqArgBOTjwbAQwgIgEeASUBDR4kIjgBEispKTAqKwERLiUrKzAvKyUlJSUqKiMjKi8qLzQdKy8tLCsrKyYmJyclJiUnJSghHyUkKSwdKScsLCcqKSUqARAtHygpKigoJSYoKTElKSIkKC0tLSU3AQslJCUlIicmKy0sARAnKSoBLQEpOAFDNDk7Ojo6AT06PQExMTABMgEvATBDSi0CAR0lJSQnJyckJSUpNSktLSUCAR5wYWNrYWdlOmtlcm5lbC9iaW5hcnkvdGFnLmRhcnQpc2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvaW1wb3J0X3RhYmxlLmRhcnSTWy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLmltcG9ydF90YWJsZTsKCmltcG9ydCAnYXN0LmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgSW1wb3J0VGFibGUgewogIGludCBnZXRJbXBvcnRJbmRleChMaWJyYXJ5IGxpYnJhcnkpOwp9CgpjbGFzcyBDb21wb25lbnRJbXBvcnRUYWJsZSBpbXBsZW1lbnRzIEltcG9ydFRhYmxlIHsKICBmaW5hbCBNYXA8TGlicmFyeSwgaW50PiBfbGlicmFyeUluZGV4ID0gPExpYnJhcnksIGludD57fTsKCiAgQ29tcG9uZW50SW1wb3J0VGFibGUoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb21wb25lbnQubGlicmFyaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgIF9saWJyYXJ5SW5kZXhbY29tcG9uZW50LmxpYnJhcmllc1tpXV0gPSBpOwogICAgfQogIH0KCiAgaW50IGdldEltcG9ydEluZGV4KExpYnJhcnkgbGlicmFyeSkgPT4gX2xpYnJhcnlJbmRleFtsaWJyYXJ5XSA/PyAtMTsKfQoKY2xhc3MgTGlicmFyeUltcG9ydFRhYmxlIGltcGxlbWVudHMgSW1wb3J0VGFibGUgewogIGZpbmFsIExpc3Q8U3RyaW5nPiBfaW1wb3J0UGF0aHMgPSA8U3RyaW5nPltdOwogIGZpbmFsIExpc3Q8TGlicmFyeT4gX2ltcG9ydGVkTGlicmFyaWVzID0gPExpYnJhcnk+W107CiAgZmluYWwgTWFwPExpYnJhcnksIGludD4gX2xpYnJhcnlJbmRleCA9IDxMaWJyYXJ5LCBpbnQ+e307CgogIGZhY3RvcnkgTGlicmFyeUltcG9ydFRhYmxlKExpYnJhcnkgbGliKSB7CiAgICByZXR1cm4gbmV3IF9JbXBvcnRUYWJsZUJ1aWxkZXIobGliKS5idWlsZCgpOwogIH0KCiAgTGlicmFyeUltcG9ydFRhYmxlLmVtcHR5KCk7CgogIC8vLyBUaGUgbGlzdCBvZiBpbXBvcnRzLgogIC8vLwogIC8vLyBTaG91bGQgbm90IGJlIG1vZGlmaWVkIGRpcmVjdGx5LCBhcyB0aGUgaW5kZXggbWFwIHdvdWxkIGdvIG91dCBvZiBzeW5jLgogIExpc3Q8U3RyaW5nPiBnZXQgaW1wb3J0UGF0aHMgPT4gX2ltcG9ydFBhdGhzOwoKICBMaXN0PExpYnJhcnk+IGdldCBpbXBvcnRlZExpYnJhcmllcyA9PiBfaW1wb3J0ZWRMaWJyYXJpZXM7CgogIGludCBhZGRJbXBvcnQoTGlicmFyeSB0YXJnZXQsIFN0cmluZyBpbXBvcnRQYXRoKSB7CiAgICBpbnQgaW5kZXggPSBfbGlicmFyeUluZGV4W3RhcmdldF07CiAgICBpZiAoaW5kZXggIT0gbnVsbCkgcmV0dXJuIGluZGV4OwogICAgaW5kZXggPSBfaW1wb3J0UGF0aHMubGVuZ3RoOwogICAgX2ltcG9ydFBhdGhzLmFkZChpbXBvcnRQYXRoKTsKICAgIF9pbXBvcnRlZExpYnJhcmllcy5hZGQodGFyZ2V0KTsKICAgIF9saWJyYXJ5SW5kZXhbdGFyZ2V0XSA9IGluZGV4OwogICAgcmV0dXJuIGluZGV4OwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBnaXZlbiBpbXBvcnQsIG9yIC0xIGlmIG5vdCBmb3VuZC4KICBpbnQgZ2V0SW1wb3J0SW5kZXgoTGlicmFyeSBsaWJyYXJ5KSB7CiAgICByZXR1cm4gX2xpYnJhcnlJbmRleFtsaWJyYXJ5XSA/PyAtMTsKICB9CgogIFN0cmluZyBnZXRJbXBvcnRQYXRoKExpYnJhcnkgbGlicmFyeSkgewogICAgcmV0dXJuIF9pbXBvcnRQYXRoc1tnZXRJbXBvcnRJbmRleChsaWJyYXJ5KV07CiAgfQp9CgovLy8gQnVpbGRzIHRoZSBpbXBvcnQgdGFibGUgZm9yIGEgZ2l2ZW4gbGlicmFyeS4KY2xhc3MgX0ltcG9ydFRhYmxlQnVpbGRlciBleHRlbmRzIFJlY3Vyc2l2ZVZpc2l0b3IgewogIGZpbmFsIExpYnJhcnlJbXBvcnRUYWJsZSB0YWJsZSA9IG5ldyBMaWJyYXJ5SW1wb3J0VGFibGUuZW1wdHkoKTsKICBmaW5hbCBMaWJyYXJ5IHJlZmVyZW5jZUxpYnJhcnk7CgogIExpYnJhcnlJbXBvcnRUYWJsZSBidWlsZCgpIHsKICAgIHJlZmVyZW5jZUxpYnJhcnkuYWNjZXB0KHRoaXMpOwogICAgcmV0dXJuIHRhYmxlOwogIH0KCiAgX0ltcG9ydFRhYmxlQnVpbGRlcih0aGlzLnJlZmVyZW5jZUxpYnJhcnkpIHsKICAgIHRhYmxlLmFkZEltcG9ydChyZWZlcmVuY2VMaWJyYXJ5LCAnJyk7CiAgfQoKICB2b2lkIGFkZExpYnJhcnlJbXBvcnQoTGlicmFyeSB0YXJnZXQpIHsKICAgIGlmICh0YXJnZXQgPT0gcmVmZXJlbmNlTGlicmFyeSkgcmV0dXJuOyAvLyBTZWxmLXJlZmVyZW5jZSBpcyBzcGVjaWFsLgogICAgdmFyIHJlZmVyZW5jZVVyaSA9IHJlZmVyZW5jZUxpYnJhcnkuaW1wb3J0VXJpOwogICAgdmFyIHRhcmdldFVyaSA9IHRhcmdldC5pbXBvcnRVcmk7CiAgICBpZiAodGFyZ2V0VXJpID09IG51bGwpIHsKICAgICAgdGhyb3cgJyRyZWZlcmVuY2VVcmkgY2Fubm90IHJlZmVyIHRvIGxpYnJhcnkgd2l0aG91dCBhbiBpbXBvcnQgVVJJJzsKICAgIH0KICAgIC8vIFRvIHN1cHBvcnQgdXNpbmcgY3VzdG9tLXVyaXMgaW4gdW5pdCB0ZXN0cywgd2UgZG9uJ3QgY2hlY2sgZGlyZWN0bHkKICAgIC8vIHdoZXRoZXIgdGhlIHNjaGVtZSBpcyAnZmlsZTonLCBidXQgaW5zdGVhZCB3ZSBjaGVjayB0aGF0IGlzIG5vdCAnZGFydDonCiAgICAvLyBvciAncGFja2FnZTonLgogICAgYm9vbCBpc0ZpbGVPckN1c3RvbVNjaGVtZSh1cmkpID0+CiAgICAgICAgdXJpLnNjaGVtZSAhPSAnJyAmJiB1cmkuc2NoZW1lICE9ICdwYWNrYWdlJyAmJiB1cmkuc2NoZW1lICE9ICdkYXJ0JzsKICAgIGJvb2wgaXNUYXJnZXRTY2hlbWVGaWxlT3JDdXN0b20gPSBpc0ZpbGVPckN1c3RvbVNjaGVtZSh0YXJnZXRVcmkpOwogICAgYm9vbCBpc1JlZmVyZW5jZVNjaGVtZUZpbGVPckN1c3RvbSA9IGlzRmlsZU9yQ3VzdG9tU2NoZW1lKHJlZmVyZW5jZVVyaSk7CiAgICBpZiAoaXNUYXJnZXRTY2hlbWVGaWxlT3JDdXN0b20gJiYgaXNSZWZlcmVuY2VTY2hlbWVGaWxlT3JDdXN0b20pIHsKICAgICAgU3RyaW5nIHJlbGF0aXZlVXJpID0gcmVsYXRpdmVVcmlQYXRoKHRhcmdldFVyaSwgcmVmZXJlbmNlVXJpKTsKICAgICAgdGFibGUuYWRkSW1wb3J0KHRhcmdldCwgcmVsYXRpdmVVcmkpOwogICAgfSBlbHNlIGlmIChpc1RhcmdldFNjaGVtZUZpbGVPckN1c3RvbSkgewogICAgICAvLyBDYW5ub3QgaW1wb3J0IGEgZmlsZTpVUkkgZnJvbSBhIGRhcnQ6VVJJIG9yIHBhY2thZ2U6VVJJLgogICAgICAvLyBXZSBtYXkgd2FudCB0byByZW1vdmUgdGhpcyByZXN0cmljdGlvbiwgYnV0IGZvciBub3cgaXQncyBqdXN0IGEgc2FuaXR5CiAgICAgIC8vIGNoZWNrLgogICAgICB0aHJvdyAnJHJlZmVyZW5jZVVyaSBjYW5ub3QgcmVmZXIgdG8gYXBwbGljYXRpb24gbGlicmFyeSAkdGFyZ2V0VXJpJzsKICAgIH0gZWxzZSB7CiAgICAgIHRhYmxlLmFkZEltcG9ydCh0YXJnZXQsIHRhcmdldC5pbXBvcnRVcmkudG9TdHJpbmcoKSk7CiAgICB9CiAgfQoKICB2aXNpdENsYXNzUmVmZXJlbmNlKENsYXNzIG5vZGUpIHsKICAgIGFkZExpYnJhcnlJbXBvcnQobm9kZS5lbmNsb3NpbmdMaWJyYXJ5KTsKICB9CgogIHZpc2l0TGlicmFyeShMaWJyYXJ5IG5vZGUpIHsKICAgIHN1cGVyLnZpc2l0TGlicmFyeShub2RlKTsKICAgIGZvciAoUmVmZXJlbmNlIGV4cG9ydGVkUmVmZXJlbmNlIGluIG5vZGUuYWRkaXRpb25hbEV4cG9ydHMpIHsKICAgICAgYWRkTGlicmFyeUltcG9ydChleHBvcnRlZFJlZmVyZW5jZS5ub2RlLnBhcmVudCk7CiAgICB9CiAgfQoKICBkZWZhdWx0TWVtYmVyUmVmZXJlbmNlKE1lbWJlciBub2RlKSB7CiAgICBhZGRMaWJyYXJ5SW1wb3J0KG5vZGUuZW5jbG9zaW5nTGlicmFyeSk7CiAgfQoKICB2aXNpdE5hbWUoTmFtZSBuYW1lKSB7CiAgICBpZiAobmFtZS5saWJyYXJ5ICE9IG51bGwpIHsKICAgICAgYWRkTGlicmFyeUltcG9ydChuYW1lLmxpYnJhcnkpOwogICAgfQogIH0KfQoKU3RyaW5nIHJlbGF0aXZlVXJpUGF0aChVcmkgdGFyZ2V0LCBVcmkgcmVmKSB7CiAgTGlzdDxTdHJpbmc+IHRhcmdldFNlZ21lbnRzID0gdGFyZ2V0LnBhdGhTZWdtZW50czsKICBMaXN0PFN0cmluZz4gcmVmU2VnbWVudHMgPSByZWYucGF0aFNlZ21lbnRzOwogIGludCB0byA9IHJlZlNlZ21lbnRzLmxlbmd0aDsKICBpZiAodGFyZ2V0U2VnbWVudHMubGVuZ3RoIDwgdG8pIHRvID0gdGFyZ2V0U2VnbWVudHMubGVuZ3RoOwogIHRvLS07IC8vIFRoZSBsYXN0IGVudHJ5IGlzIHRoZSBmaWxlbmFtZSwgaGVyZSB3ZSBjb21wYXJlIG9ubHkgZGlyZWN0b3JpZXMuCiAgaW50IHNhbWUgPSAtMTsKICBmb3IgKGludCBpID0gMDsgaSA8IHRvOyBpKyspIHsKICAgIGlmICh0YXJnZXRTZWdtZW50c1tpXSA9PSByZWZTZWdtZW50c1tpXSkgewogICAgICBzYW1lID0gaTsKICAgIH0gZWxzZSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KICBpZiAoc2FtZSA9PSB0YXJnZXRTZWdtZW50cy5sZW5ndGggLSAyICYmCiAgICAgIHRhcmdldFNlZ21lbnRzLmxlbmd0aCA9PSByZWZTZWdtZW50cy5sZW5ndGgpIHsKICAgIC8vIEJvdGggcGFydHMgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2Ygc2VnbWVudHMsCiAgICAvLyBhbmQgdGhleSBhZ3JlZSBvbiBhbGwgZGlyZWN0b3JpZXMuCiAgICBpZiAodGFyZ2V0U2VnbWVudHMubGFzdCA9PSAiIikgcmV0dXJuICIuIjsKICAgIHJldHVybiB0YXJnZXRTZWdtZW50cy5sYXN0OwogIH0KICBMaXN0PFN0cmluZz4gcGF0aCA9IG5ldyBMaXN0PFN0cmluZz4oKTsKICBpbnQgb2tlZCA9IHNhbWUgKyAxOwogIHdoaWxlIChva2VkIDwgcmVmU2VnbWVudHMubGVuZ3RoIC0gMSkgewogICAgcGF0aC5hZGQoIi4uIik7CiAgICBva2VkKys7CiAgfQogIHBhdGguYWRkQWxsKHRhcmdldFNlZ21lbnRzLnNraXAoc2FtZSArIDEpKTsKCiAgaWYgKHBhdGguaXNFbXB0eSkgcGF0aC5hZGQoIi4iKTsKICByZXR1cm4gcGF0aC5qb2luKCIvIik7Cn0KgJ4ATk48HQETAR0nAgE0PAEuOzEGBAFHAgEyMDg8ASwxBAEeARsGTjABPQE1JyUhIiQjEgQBQSgpBAEqMgQCATE1QyIBHyMSBAEvKwQBKkozJh1LBktPFiZNR01HRSwtQlAQTA08BgQBJC0EAR8eQjcGBAEoLQQBGSAmBgQCAS41Lx8+TREhLxANDQYEKzU0Ki8gBCoXKhQMBC4BIxkCASBwYWNrYWdlOmtlcm5lbC9pbXBvcnRfdGFibGUuZGFydEFzZGtyb290Oi9wa2cva2VybmVsL2xpYi9zcmMvaGllcmFyY2h5X2Jhc2VkX3R5cGVfZW52aXJvbm1lbnQuZGFydINBLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkga2VybmVsLmhpZXJhcmNoeV9iYXNlZF90eXBlX2Vudmlyb25tZW50OwoKaW1wb3J0ICcuLi9hc3QuZGFydCcgc2hvdyBDbGFzcywgSW50ZXJmYWNlVHlwZTsKCmltcG9ydCAnLi4vY2xhc3NfaGllcmFyY2h5LmRhcnQnIHNob3cgQ2xhc3NIaWVyYXJjaHk7CgppbXBvcnQgJy4uL2NvcmVfdHlwZXMuZGFydCcgc2hvdyBDb3JlVHlwZXM7CgppbXBvcnQgJy4uL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgc2hvdyBUeXBlRW52aXJvbm1lbnQ7CgpjbGFzcyBIaWVyYXJjaHlCYXNlZFR5cGVFbnZpcm9ubWVudCBleHRlbmRzIFR5cGVFbnZpcm9ubWVudCB7CiAgZmluYWwgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5OwoKICBIaWVyYXJjaHlCYXNlZFR5cGVFbnZpcm9ubWVudChDb3JlVHlwZXMgY29yZVR5cGVzLCB0aGlzLmhpZXJhcmNoeSkKICAgICAgOiBzdXBlci5mcm9tU3ViY2xhc3MoY29yZVR5cGVzKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRUeXBlQXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgcmV0dXJuIGhpZXJhcmNoeS5nZXRUeXBlQXNJbnN0YW5jZU9mKHR5cGUsIHN1cGVyY2xhc3MpOwogIH0KfQobAE5OPAExATABNgEsATgBPiIBRScBDEw8BAIBOHBhY2thZ2U6a2VybmVsL3NyYy9oaWVyYXJjaHlfYmFzZWRfdHlwZV9lbnZpcm9ubWVudC5kYXJ0JXNka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL3NyYy9oZWFwLmRhcnSGcS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gQmFzaWMgaW1wbGVtZW50YXRpb24gb2YgYSBoZWFwLCB3aXRoIE8obG9nIG4pIGluc2VydGlvbiBhbmQgcmVtb3ZhbC4KYWJzdHJhY3QgY2xhc3MgSGVhcDxUPiB7CiAgZmluYWwgX2l0ZW1zID0gPFQ+W107CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2l0ZW1zLmlzRW1wdHk7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2l0ZW1zLmlzTm90RW1wdHk7CgogIHZvaWQgYWRkKFQgaXRlbSkgewogICAgaW50IGluZGV4ID0gX2l0ZW1zLmxlbmd0aDsKICAgIF9pdGVtcy5sZW5ndGggKz0gMTsKICAgIHdoaWxlIChpbmRleCA+IDApIHsKICAgICAgVCBwYXJlbnQgPSBfaXRlbXNbX3BhcmVudEluZGV4KGluZGV4KV07CiAgICAgIGlmIChzb3J0c0JlZm9yZShwYXJlbnQsIGl0ZW0pKSBicmVhazsKICAgICAgX2l0ZW1zW2luZGV4XSA9IHBhcmVudDsKICAgICAgaW5kZXggPSBfcGFyZW50SW5kZXgoaW5kZXgpOwogICAgfQogICAgX2l0ZW1zW2luZGV4XSA9IGl0ZW07CiAgfQoKICBUIHJlbW92ZSgpIHsKICAgIFQgcmVtb3ZlZCA9IF9pdGVtc1swXTsKICAgIFQgb3JwaGFuID0gX2l0ZW1zLnJlbW92ZUxhc3QoKTsKICAgIGlmIChfaXRlbXMuaXNOb3RFbXB0eSkgX3JlSW5zZXJ0KG9ycGhhbik7CiAgICByZXR1cm4gcmVtb3ZlZDsKICB9CgogIC8vLyBDbGllbnQgc2hvdWxkIHVzZSBhIGRlcml2ZWQgY2xhc3MgdG8gc3BlY2lmeSB0aGUgc29ydCBvcmRlci4KICBib29sIHNvcnRzQmVmb3JlKFQgYSwgVCBiKTsKCiAgaW50IF9maXJzdENoaWxkSW5kZXgoaW50IGluZGV4KSB7CiAgICByZXR1cm4gKGluZGV4IDw8IDEpICsgMTsKICB9CgogIGludCBfcGFyZW50SW5kZXgoaW50IGluZGV4KSB7CiAgICByZXR1cm4gKGluZGV4IC0gMSkgPj4gMTsKICB9CgogIHZvaWQgX3JlSW5zZXJ0KFQgaXRlbSkgewogICAgaW50IGluZGV4ID0gMDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGludCBjaGlsZEluZGV4ID0gX2ZpcnN0Q2hpbGRJbmRleChpbmRleCk7CiAgICAgIGlmIChjaGlsZEluZGV4ID49IF9pdGVtcy5sZW5ndGgpIGJyZWFrOwogICAgICBUIGNoaWxkID0gX2l0ZW1zW2NoaWxkSW5kZXhdOwogICAgICBpZiAoY2hpbGRJbmRleCArIDEgPCBfaXRlbXMubGVuZ3RoKSB7CiAgICAgICAgVCBuZXh0Q2hpbGQgPSBfaXRlbXNbY2hpbGRJbmRleCArIDFdOwogICAgICAgIGlmIChzb3J0c0JlZm9yZShuZXh0Q2hpbGQsIGNoaWxkKSkgewogICAgICAgICAgY2hpbGQgPSBuZXh0Q2hpbGQ7CiAgICAgICAgICBjaGlsZEluZGV4Kys7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzb3J0c0JlZm9yZShpdGVtLCBjaGlsZCkpIGJyZWFrOwogICAgICBfaXRlbXNbaW5kZXhdID0gX2l0ZW1zW2NoaWxkSW5kZXhdOwogICAgICBpbmRleCA9IGNoaWxkSW5kZXg7CiAgICB9CiAgICBfaXRlbXNbaW5kZXhdID0gaXRlbTsKICB9Cn0KQABOTjwBSRkYASYBLAEVHxgYLiweIwYaBAEPGyQuFAQBQx4BJB0EASAdBAEbExMwLiQsLi0dGAoIKyoaBhoEAgEccGFja2FnZTprZXJuZWwvc3JjL2hlYXAuZGFydCpzZGtyb290Oi9wa2cva2VybmVsL2xpYi9saWJyYXJ5X2luZGV4LmRhcnSg/S8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLmxpYnJhcnlfaW5kZXg7CgppbXBvcnQgJ2FzdC5kYXJ0JzsKCi8vLyBQcm92aWRlcyBuYW1lLWJhc2VkIGFjY2VzcyB0byBsaWJyYXJ5LCBjbGFzcywgYW5kIG1lbWJlciBBU1Qgbm9kZXMuCi8vLwovLy8gV2hlbiBjb25zdHJ1Y3RlZCwgYSBnaXZlbiBzZXQgb2YgbGlicmFyaWVzIGFyZSBpbmRleGVkIGltbWVkaWF0ZWx5LCBhbmQKLy8vIHdpbGwgbm90IGJlIHVwLXRvLWRhdGUgd2l0aCBjaGFuZ2VzIG1hZGUgYWZ0ZXIgaXQgd2FzIGNyZWF0ZWQuCmNsYXNzIExpYnJhcnlJbmRleCB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBnZXR0ZXJQcmVmaXggPSAnZ2V0Oic7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzZXR0ZXJQcmVmaXggPSAnc2V0Oic7CgogIC8vLyBBIHNwZWNpYWwgY2xhc3MgbmFtZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGFjY2VzcyB0aGUgdG9wLWxldmVsIG1lbWJlcnMKICAvLy8gb2YgYSBsaWJyYXJ5LgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdG9wTGV2ZWwgPSAnOjonOwoKICBmaW5hbCBNYXA8U3RyaW5nLCBfQ2xhc3NUYWJsZT4gX2xpYnJhcmllcyA9IDxTdHJpbmcsIF9DbGFzc1RhYmxlPnt9OwoKICAvLy8gSW5kZXhlcyB0aGUgbGlicmFyaWVzIHdpdGggdGhlIFVSSXMgZ2l2ZW4gaW4gW2xpYnJhcnlVcmlzXS4KICBMaWJyYXJ5SW5kZXgoQ29tcG9uZW50IGNvbXBvbmVudCwgSXRlcmFibGU8U3RyaW5nPiBsaWJyYXJ5VXJpcykgewogICAgdmFyIGxpYnJhcnlVcmlTZXQgPSBsaWJyYXJ5VXJpcy50b1NldCgpOwogICAgZm9yICh2YXIgbGlicmFyeSBpbiBjb21wb25lbnQubGlicmFyaWVzKSB7CiAgICAgIHZhciB1cmkgPSAnJHtsaWJyYXJ5LmltcG9ydFVyaX0nOwogICAgICBpZiAobGlicmFyeVVyaVNldC5jb250YWlucyh1cmkpKSB7CiAgICAgICAgX2xpYnJhcmllc1t1cmldID0gbmV3IF9DbGFzc1RhYmxlKGxpYnJhcnkpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gSW5kZXhlcyB0aGUgbGlicmFyaWVzIHdpdGggdGhlIFVSSXMgZ2l2ZW4gaW4gW2xpYnJhcnlVcmlzXS4KICBMaWJyYXJ5SW5kZXguYnlVcmkoQ29tcG9uZW50IGNvbXBvbmVudCwgSXRlcmFibGU8VXJpPiBsaWJyYXJ5VXJpcykKICAgICAgOiB0aGlzKGNvbXBvbmVudCwgbGlicmFyeVVyaXMubWFwKCh1cmkpID0+ICckdXJpJykpOwoKICAvLy8gSW5kZXhlcyBgZGFydDpgIGxpYnJhcmllcy4KICBMaWJyYXJ5SW5kZXguY29yZUxpYnJhcmllcyhDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBmb3IgKHZhciBsaWJyYXJ5IGluIGNvbXBvbmVudC5saWJyYXJpZXMpIHsKICAgICAgaWYgKGxpYnJhcnkuaW1wb3J0VXJpLnNjaGVtZSA9PSAnZGFydCcpIHsKICAgICAgICBfbGlicmFyaWVzWycke2xpYnJhcnkuaW1wb3J0VXJpfSddID0gbmV3IF9DbGFzc1RhYmxlKGxpYnJhcnkpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gSW5kZXhlcyB0aGUgZW50aXJlIGNvbXBvbmVudC4KICAvLy8KICAvLy8gQ29uc2lkZXIgdXNpbmcgYW5vdGhlciBjb25zdHJ1Y3RvciB0byBvbmx5IGluZGV4IHRoZSBsaWJyYXJpZXMgdGhhdAogIC8vLyBhcmUgbmVlZGVkLgogIExpYnJhcnlJbmRleC5hbGwoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgZm9yICh2YXIgbGlicmFyeSBpbiBjb21wb25lbnQubGlicmFyaWVzKSB7CiAgICAgIF9saWJyYXJpZXNbJyR7bGlicmFyeS5pbXBvcnRVcml9J10gPSBuZXcgX0NsYXNzVGFibGUobGlicmFyeSk7CiAgICB9CiAgfQoKICBfQ2xhc3NUYWJsZSBfZ2V0TGlicmFyeUluZGV4KFN0cmluZyB1cmkpIHsKICAgIF9DbGFzc1RhYmxlIGxpYnJhcnlJbmRleCA9IF9saWJyYXJpZXNbdXJpXTsKICAgIGlmIChsaWJyYXJ5SW5kZXggPT0gbnVsbCkgewogICAgICB0aHJvdyAiVGhlIGxpYnJhcnkgJyR1cmknIGhhcyBub3QgYmVlbiBpbmRleGVkIjsKICAgIH0KICAgIHJldHVybiBsaWJyYXJ5SW5kZXg7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbGlicmFyeSB3aXRoIHRoZSBnaXZlbiBVUkkuCiAgLy8vCiAgLy8vIFRocm93cyBhbiBlcnJvciBpZiBpdCBkb2VzIG5vdCBleGlzdC4KICBMaWJyYXJ5IGdldExpYnJhcnkoU3RyaW5nIHVyaSkgPT4gX2dldExpYnJhcnlJbmRleCh1cmkpLmxpYnJhcnk7CgogIC8vLyBMaWtlIFtnZXRMaWJyYXJ5XSBidXQgcmV0dXJucyBgbnVsbGAgaWYgbm90IGZvdW5kLgogIExpYnJhcnkgdHJ5R2V0TGlicmFyeShTdHJpbmcgdXJpKSA9PiBfbGlicmFyaWVzW3VyaV0/LmxpYnJhcnk7CgogIC8vLyBUcnVlIGlmIHRoZSBsaWJyYXJ5IHdpdGggdGhlIGdpdmVuIFVSSSBleGlzdHMgYW5kIHdhcyBpbmRleGVkLgogIGJvb2wgY29udGFpbnNMaWJyYXJ5KFN0cmluZyB1cmkpID0+IF9saWJyYXJpZXMuY29udGFpbnNLZXkodXJpKTsKCiAgLy8vIFJldHVybnMgdGhlIGNsYXNzIHdpdGggdGhlIGdpdmVuIG5hbWUgaW4gdGhlIGdpdmVuIGxpYnJhcnkuCiAgLy8vCiAgLy8vIEFuIGVycm9yIGlzIHRocm93biBpZiB0aGUgY2xhc3MgaXMgbm90IGZvdW5kLgogIENsYXNzIGdldENsYXNzKFN0cmluZyBsaWJyYXJ5LCBTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICByZXR1cm4gX2dldExpYnJhcnlJbmRleChsaWJyYXJ5KS5nZXRDbGFzcyhjbGFzc05hbWUpOwogIH0KCiAgLy8vIExpa2UgW2dldENsYXNzXSBidXQgcmV0dXJucyBgbnVsbGAgaWYgbm90IGZvdW5kLgogIENsYXNzIHRyeUdldENsYXNzKFN0cmluZyBsaWJyYXJ5LCBTdHJpbmcgY2xhc3NOYW1lKSB7CiAgICByZXR1cm4gX2xpYnJhcmllc1tsaWJyYXJ5XT8udHJ5R2V0Q2xhc3MoY2xhc3NOYW1lKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBtZW1iZXIgd2l0aCB0aGUgZ2l2ZW4gbmFtZSwgaW4gdGhlIGdpdmVuIGNsYXNzLCBpbiB0aGUKICAvLy8gZ2l2ZW4gbGlicmFyeS4KICAvLy8KICAvLy8gSWYgYSBnZXR0ZXIgb3Igc2V0dGVyIGlzIHdhbnRlZCwgdGhlIGBnZXQ6YCBvciBgc2V0OmAgcHJlZml4IG11c3QgYmUKICAvLy8gYWRkZWQgaW4gZnJvbnQgb2YgdGhlIG1lbWJlciBuYW1lLgogIC8vLwogIC8vLyBUaGUgc3BlY2lhbCBjbGFzcyBuYW1lIGA6OmAgY2FuIGJlIHVzZWQgdG8gYWNjZXNzIHRvcC1sZXZlbCBtZW1iZXJzLgogIC8vLwogIC8vLyBJZiB0aGUgbWVtYmVyIG5hbWUgaXMgcHJpdmF0ZSBpdCBpcyBjb25zaWRlcmVkIHByaXZhdGUgdG8gW2xpYnJhcnldLgogIC8vLyBJdCBpcyBub3QgcG9zc2libGUgd2l0aCB0aGlzIGNsYXNzIHRvIGxvb2t1cCBtZW1iZXJzIHdob3NlIG5hbWUgaXMgcHJpdmF0ZQogIC8vLyB0byBhIGxpYnJhcnkgb3RoZXIgdGhhbiB0aGUgb25lIGNvbnRhaW5pbmcgaXQuCiAgLy8vCiAgLy8vIEFuIGVycm9yIGlzIHRocm93biBpZiB0aGUgbWVtYmVyIGlzIG5vdCBmb3VuZC4KICBNZW1iZXIgZ2V0TWVtYmVyKFN0cmluZyBsaWJyYXJ5LCBTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcgbWVtYmVyTmFtZSkgewogICAgcmV0dXJuIF9nZXRMaWJyYXJ5SW5kZXgobGlicmFyeSkuZ2V0TWVtYmVyKGNsYXNzTmFtZSwgbWVtYmVyTmFtZSk7CiAgfQoKICAvLy8gTGlrZSBbZ2V0TWVtYmVyXSBidXQgcmV0dXJucyBgbnVsbGAgaWYgbm90IGZvdW5kLgogIE1lbWJlciB0cnlHZXRNZW1iZXIoU3RyaW5nIGxpYnJhcnksIFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBtZW1iZXJOYW1lKSB7CiAgICByZXR1cm4gX2xpYnJhcmllc1tsaWJyYXJ5XT8udHJ5R2V0TWVtYmVyKGNsYXNzTmFtZSwgbWVtYmVyTmFtZSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgdG9wLWxldmVsIG1lbWJlciB3aXRoIHRoZSBnaXZlbiBuYW1lLCBpbiB0aGUgZ2l2ZW4gbGlicmFyeS4KICAvLy8KICAvLy8gSWYgYSBnZXR0ZXIgb3Igc2V0dGVyIGlzIHdhbnRlZCwgdGhlIGBnZXQ6YCBvciBgc2V0OmAgcHJlZml4IG11c3QgYmUKICAvLy8gYWRkZWQgaW4gZnJvbnQgb2YgdGhlIG1lbWJlciBuYW1lLgogIC8vLwogIC8vLyBJZiB0aGUgbWVtYmVyIG5hbWUgaXMgcHJpdmF0ZSBpdCBpcyBjb25zaWRlcmVkIHByaXZhdGUgdG8gW2xpYnJhcnldLgogIC8vLyBJdCBpcyBub3QgcG9zc2libGUgd2l0aCB0aGlzIGNsYXNzIHRvIGxvb2t1cCBtZW1iZXJzIHdob3NlIG5hbWUgaXMgcHJpdmF0ZQogIC8vLyB0byBhIGxpYnJhcnkgb3RoZXIgdGhhbiB0aGUgb25lIGNvbnRhaW5pbmcgaXQuCiAgLy8vCiAgLy8vIEFuIGVycm9yIGlzIHRocm93biBpZiB0aGUgbWVtYmVyIGlzIG5vdCBmb3VuZC4KICBNZW1iZXIgZ2V0VG9wTGV2ZWxNZW1iZXIoU3RyaW5nIGxpYnJhcnksIFN0cmluZyBtZW1iZXJOYW1lKSB7CiAgICByZXR1cm4gZ2V0TWVtYmVyKGxpYnJhcnksIHRvcExldmVsLCBtZW1iZXJOYW1lKTsKICB9CgogIC8vLyBMaWtlIFtnZXRUb3BMZXZlbE1lbWJlcl0gYnV0IHJldHVybnMgYG51bGxgIGlmIG5vdCBmb3VuZC4KICBNZW1iZXIgdHJ5R2V0VG9wTGV2ZWxNZW1iZXIoCiAgICAgIFN0cmluZyBsaWJyYXJ5LCBTdHJpbmcgY2xhc3NOYW1lLCBTdHJpbmcgbWVtYmVyTmFtZSkgewogICAgcmV0dXJuIHRyeUdldE1lbWJlcihsaWJyYXJ5LCB0b3BMZXZlbCwgbWVtYmVyTmFtZSk7CiAgfQp9CgpjbGFzcyBfQ2xhc3NUYWJsZSB7CiAgZmluYWwgTGlicmFyeSBsaWJyYXJ5OwoKICBNYXA8U3RyaW5nLCBfTWVtYmVyVGFibGU+IF9jbGFzc2VzOwoKICBfQ2xhc3NUYWJsZSh0aGlzLmxpYnJhcnkpOwoKICBNYXA8U3RyaW5nLCBfTWVtYmVyVGFibGU+IGdldCBjbGFzc2VzIHsKICAgIGlmIChfY2xhc3NlcyA9PSBudWxsKSB7CiAgICAgIF9jbGFzc2VzID0gPFN0cmluZywgX01lbWJlclRhYmxlPnt9OwogICAgICBfY2xhc3Nlc1tMaWJyYXJ5SW5kZXgudG9wTGV2ZWxdID0gbmV3IF9NZW1iZXJUYWJsZS50b3BMZXZlbCh0aGlzKTsKICAgICAgZm9yICh2YXIgY2xhc3NfIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICAgIF9jbGFzc2VzW2NsYXNzXy5uYW1lXSA9IG5ldyBfTWVtYmVyVGFibGUodGhpcywgY2xhc3NfKTsKICAgICAgfQogICAgICBmb3IgKFJlZmVyZW5jZSByZWZlcmVuY2UgaW4gbGlicmFyeS5hZGRpdGlvbmFsRXhwb3J0cykgewogICAgICAgIE5hbWVkTm9kZSBub2RlID0gcmVmZXJlbmNlLm5vZGU7CiAgICAgICAgaWYgKG5vZGUgaXMgQ2xhc3MpIHsKICAgICAgICAgIF9jbGFzc2VzW25vZGUubmFtZV0gPSBuZXcgX01lbWJlclRhYmxlKHRoaXMsIG5vZGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIF9jbGFzc2VzOwogIH0KCiAgU3RyaW5nIGdldCBjb250YWluZXJOYW1lIHsKICAgIC8vIEZvciB1c2VmdWwgZXJyb3IgbWVzc2FnZXMsIGl0IGNhbiBiZSBoZWxwZnVsIHRvIGluZGljYXRlIGlmIHRoZSBsaWJyYXJ5CiAgICAvLyBpcyBleHRlcm5hbC4gIElmIGEgY2xhc3Mgb3IgbWVtYmVyIHdhcyBub3QgZm91bmQgaW4gYW4gZXh0ZXJuYWwgbGlicmFyeSwKICAgIC8vIGl0IG1pZ2h0IGJlIHRoYXQgaXQgZXhpc3RzIGluIHRoZSBhY3R1YWwgbGlicmFyeSwgYnV0IGl0cyBpbnRlcmZhY2Ugd2FzCiAgICAvLyBub3QgaW5jbHVkZWQgaW4gdGhpcyBidWlsZCB1bml0LgogICAgcmV0dXJuIGxpYnJhcnkuaXNFeHRlcm5hbAogICAgICAgID8gImV4dGVybmFsIGxpYnJhcnkgJyR7bGlicmFyeS5pbXBvcnRVcml9JyIKICAgICAgICA6ICJsaWJyYXJ5ICcke2xpYnJhcnkuaW1wb3J0VXJpfSciOwogIH0KCiAgX01lbWJlclRhYmxlIF9nZXRDbGFzc0luZGV4KFN0cmluZyBuYW1lKSB7CiAgICB2YXIgaW5kZXhlciA9IGNsYXNzZXNbbmFtZV07CiAgICBpZiAoaW5kZXhlciA9PSBudWxsKSB7CiAgICAgIHRocm93ICJDbGFzcyAnJG5hbWUnIG5vdCBmb3VuZCBpbiAkY29udGFpbmVyTmFtZSI7CiAgICB9CiAgICByZXR1cm4gaW5kZXhlcjsKICB9CgogIENsYXNzIGdldENsYXNzKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gX2dldENsYXNzSW5kZXgobmFtZSkuY2xhc3NfOwogIH0KCiAgQ2xhc3MgdHJ5R2V0Q2xhc3MoU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBjbGFzc2VzW25hbWVdPy5jbGFzc187CiAgfQoKICBNZW1iZXIgZ2V0TWVtYmVyKFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBtZW1iZXJOYW1lKSB7CiAgICByZXR1cm4gX2dldENsYXNzSW5kZXgoY2xhc3NOYW1lKS5nZXRNZW1iZXIobWVtYmVyTmFtZSk7CiAgfQoKICBNZW1iZXIgdHJ5R2V0TWVtYmVyKFN0cmluZyBjbGFzc05hbWUsIFN0cmluZyBtZW1iZXJOYW1lKSB7CiAgICByZXR1cm4gY2xhc3Nlc1tjbGFzc05hbWVdPy50cnlHZXRNZW1iZXIobWVtYmVyTmFtZSk7CiAgfQp9CgpjbGFzcyBfTWVtYmVyVGFibGUgewogIGZpbmFsIF9DbGFzc1RhYmxlIHBhcmVudDsKICBmaW5hbCBDbGFzcyBjbGFzc187IC8vIE51bGwgZm9yIHRvcC1sZXZlbC4KICBNYXA8U3RyaW5nLCBNZW1iZXI+IF9tZW1iZXJzOwoKICBMaWJyYXJ5IGdldCBsaWJyYXJ5ID0+IHBhcmVudC5saWJyYXJ5OwoKICBfTWVtYmVyVGFibGUodGhpcy5wYXJlbnQsIHRoaXMuY2xhc3NfKTsKCiAgX01lbWJlclRhYmxlLnRvcExldmVsKHRoaXMucGFyZW50KSA6IGNsYXNzXyA9IG51bGw7CgogIE1hcDxTdHJpbmcsIE1lbWJlcj4gZ2V0IG1lbWJlcnMgewogICAgaWYgKF9tZW1iZXJzID09IG51bGwpIHsKICAgICAgX21lbWJlcnMgPSA8U3RyaW5nLCBNZW1iZXI+e307CiAgICAgIGlmIChjbGFzc18gIT0gbnVsbCkgewogICAgICAgIGNsYXNzXy5wcm9jZWR1cmVzLmZvckVhY2goYWRkTWVtYmVyKTsKICAgICAgICBjbGFzc18uZmllbGRzLmZvckVhY2goYWRkTWVtYmVyKTsKICAgICAgICBjbGFzc18uY29uc3RydWN0b3JzLmZvckVhY2goYWRkTWVtYmVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsaWJyYXJ5LnByb2NlZHVyZXMuZm9yRWFjaChhZGRNZW1iZXIpOwogICAgICAgIGxpYnJhcnkuZmllbGRzLmZvckVhY2goYWRkTWVtYmVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9tZW1iZXJzOwogIH0KCiAgU3RyaW5nIGdldERpc2FtYmlndWF0ZWROYW1lKE1lbWJlciBtZW1iZXIpIHsKICAgIGlmIChtZW1iZXIgaXMgUHJvY2VkdXJlKSB7CiAgICAgIGlmIChtZW1iZXIuaXNHZXR0ZXIpIHJldHVybiBMaWJyYXJ5SW5kZXguZ2V0dGVyUHJlZml4ICsgbWVtYmVyLm5hbWUubmFtZTsKICAgICAgaWYgKG1lbWJlci5pc1NldHRlcikgcmV0dXJuIExpYnJhcnlJbmRleC5zZXR0ZXJQcmVmaXggKyBtZW1iZXIubmFtZS5uYW1lOwogICAgfQogICAgcmV0dXJuIG1lbWJlci5uYW1lLm5hbWU7CiAgfQoKICB2b2lkIGFkZE1lbWJlcihNZW1iZXIgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyLm5hbWUuaXNQcml2YXRlICYmIG1lbWJlci5uYW1lLmxpYnJhcnkgIT0gbGlicmFyeSkgewogICAgICAvLyBNZW1iZXJzIHdob3NlIG5hbWUgaXMgcHJpdmF0ZSB0byBvdGhlciBsaWJyYXJpZXMgY2Fubm90IGN1cnJlbnRseQogICAgICAvLyBiZSBmb3VuZCB3aXRoIHRoZSBMaWJyYXJ5SW5kZXggY2xhc3MuCiAgICAgIHJldHVybjsKICAgIH0KICAgIF9tZW1iZXJzW2dldERpc2FtYmlndWF0ZWROYW1lKG1lbWJlcildID0gbWVtYmVyOwogIH0KCiAgU3RyaW5nIGdldCBjb250YWluZXJOYW1lIHsKICAgIGlmIChjbGFzc18gPT0gbnVsbCkgewogICAgICByZXR1cm4gInRvcC1sZXZlbCBvZiAke3BhcmVudC5jb250YWluZXJOYW1lfSI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gImNsYXNzICcke2NsYXNzXy5uYW1lfScgaW4gJHtwYXJlbnQuY29udGFpbmVyTmFtZX0iOwogICAgfQogIH0KCiAgTWVtYmVyIGdldE1lbWJlcihTdHJpbmcgbmFtZSkgewogICAgdmFyIG1lbWJlciA9IG1lbWJlcnNbbmFtZV07CiAgICBpZiAobWVtYmVyID09IG51bGwpIHsKICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAiQSBtZW1iZXIgd2l0aCBkaXNhbWJpZ3VhdGVkIG5hbWUgJyRuYW1lJyB3YXMgbm90IGZvdW5kICIKICAgICAgICAgICJpbiAkY29udGFpbmVyTmFtZSI7CiAgICAgIHZhciBnZXR0ZXIgPSBMaWJyYXJ5SW5kZXguZ2V0dGVyUHJlZml4ICsgbmFtZTsKICAgICAgdmFyIHNldHRlciA9IExpYnJhcnlJbmRleC5zZXR0ZXJQcmVmaXggKyBuYW1lOwogICAgICBpZiAobWVtYmVyc1tnZXR0ZXJdICE9IG51bGwgfHwgbWVtYmVyc1tzZXR0ZXJdICE9IG51bGwpIHsKICAgICAgICB0aHJvdyAiJG1lc3NhZ2UuIERpZCB5b3UgbWVhbiAnJGdldHRlcicgb3IgJyRzZXR0ZXInPyI7CiAgICAgIH0KICAgICAgdGhyb3cgbWVzc2FnZTsKICAgIH0KICAgIHJldHVybiBtZW1iZXI7CiAgfQoKICBNZW1iZXIgdHJ5R2V0TWVtYmVyKFN0cmluZyBuYW1lKSA9PiBtZW1iZXJzW25hbWVdOwp9CoECAE5OPB4BEwFIBExDFS0tAUwUJwFHAUJELS8oKTQIBgQBQkU7ASE0LzBHCAYEASQGShIqL0UGBAEtMCA3BhkEAS4GLEMBOUEBRUMBQgY0NToEATc4OAQBSRUGSykGSwZLUTUGNUpHBAE4TUUEAU4GSykGS1E1BjVANQQBQB89OAQCARQZASYBHQEqHCtJLEAIPykdPgoIBhUEAR1PUE8oHjQsBAEtIRs5BhQEASAoBAEjIgQBOjwEAT05BAIBFRwtIAEpASoBNgEkHCUcLiowDy8rCAYVBAEvH1BQBh0EASJDSy8OBjUEAR0aNQ1CBgQBIiAaUR81NUBACBUGEwQBNQIBIXBhY2thZ2U6a2VybmVsL2xpYnJhcnlfaW5kZXguZGFydDBzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY2hhcmNvZGUvbGliL2FzY2lpLmRhcnSjKS8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIERlY2xhcmUgaW50ZWdlciBjb25zdGFudHMgZm9yIGVhY2ggQVNDSUkgY2hhcmFjdGVyLgovLy8KLy8vIFRoZSBjb25zdGFudHMgYWxsIHN0YXJ0IHdpdGggIiQiIHRvIGF2b2lkIGNvbmZsaWN0aW5nIHdpdGggb3RoZXIgY29uc3RhbnRzLgovLy8KLy8vIEZvciBjaGFyYWN0ZXJzIHRoYXQgYXJlIHZhbGlkIGluIGFuIGlkZW50aWZpZXIsIHRoZSBjaGFyYWN0ZXIgaXRzZWxmCi8vLyBmb2xsb3dzIHRoZSAiJCIuIEZvciBvdGhlciBjaGFyYWN0ZXJzLCBhIHN5bWJvbGljIG5hbWUgaXMgdXNlZC4KLy8vIEluIHNvbWUgY2FzZXMsIG11bHRpcGxlIGFsdGVybmF0aXZlIHN5bWJvbGljIG5hbWVzIGFyZSBwcm92aWRlZC4KLy8vIFBsZWFzZSBzdGljayB0byB1c2luZyBvbmUgbmFtZSBwZXIgY2hhcmFjdGVyIGluIHlvdXIgY29kZS4KLy8vCi8vLyBUaGUgc3ltYm9saWMgbmFtZXMgYXJlLCB3aGVyZSBhcHBsaWNhYmxlLCB0aGUgbmFtZSBvZiB0aGUgc3ltYm9sIHdpdGhvdXQKLy8vIGFueSAibWFyayIsICJzeW1ib2wiICJzaWduIiBvciAiYWNjZW50IiBzdWZmaXguCi8vLyBFeGFtcGxlczogWyRleGNsYW1hdGlvbl0sIFskcGlwZV0sIFskZG9sbGFyXSBhbmQgWyRncmF2ZV0uCi8vLyBGb3IgbGVzcyBjb21tb24gc3ltYm9scywgYSBzZWxlY3Rpb24gb2YgY29tbW9uIG5hbWVzIGFyZSB1c2VkLgovLy8KLy8vIEZvciBwYXJlbnRoZXRpY2FsIG1hcmtlcnMsIHRoZXJlIGlzIGJvdGggYSBzaG9ydCBuYW1lLCBbJGxwYXJlbl0vWyRycGFyZW5dLAovLy8gYW5kIGEgbG9uZyBuYW1lLCBbJG9wZW5fcGFyZW5dLyBbJGNsb3NlX3BhcmVuXS4KLy8vCi8vLyBGb3IgY29tbW9uIEhUTUwgZW50aXRpZXMsIHRoZSBlbnRpdHkgbmFtZXMgYXJlIGFsc28gdXNhYmxlIGFzIHN5bWJvbGljCi8vLyBuYW1lczogWyRhcG9zXSwgWyRxdW90XSwgWyRsdF0sIFskZ3RdLCBhbmQgWyRhbXBdLgpsaWJyYXJ5IGNoYXJjb2RlLmFzY2lpLmRvbGxhcl9sb3dlcmNhc2U7CgovLyBDb250cm9sIGNoYXJhY3RlcnMuCgovLy8gIk51bGwgY2hhcmFjdGVyIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRudWwgPSAweDAwOwoKLy8vICJTdGFydCBvZiBIZWFkZXIiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJHNvaCA9IDB4MDE7CgovLy8gIlN0YXJ0IG9mIFRleHQiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJHN0eCA9IDB4MDI7CgovLy8gIkVuZCBvZiBUZXh0IiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRldHggPSAweDAzOwoKLy8vICJFbmQgb2YgVHJhbnNtaXNzaW9uIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRlb3QgPSAweDA0OwoKLy8vICJFbnF1aXJ5IiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRlbnEgPSAweDA1OwoKLy8vICJBY2tub3dsZWRnbWVudCIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkYWNrID0gMHgwNjsKCi8vLyAiQmVsbCIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkYmVsID0gMHgwNzsKCi8vLyAiQmFja3NwYWNlIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRicyA9IDB4MDg7CgovLy8gIkhvcml6b250YWwgVGFiIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRodCA9IDB4MDk7CgovLy8gIkhvcml6b250YWwgVGFiIiBjb250cm9sIGNoYXJhY3RlciwgY29tbW9uIG5hbWUuCmNvbnN0IGludCAkdGFiID0gMHgwOTsKCi8vLyAiTGluZSBmZWVkIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRsZiA9IDB4MEE7CgovLy8gIlZlcnRpY2FsIFRhYiIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkdnQgPSAweDBCOwoKLy8vICJGb3JtIGZlZWQiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGZmID0gMHgwQzsKCi8vLyAiQ2FycmlhZ2UgcmV0dXJuIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRjciA9IDB4MEQ7CgovLy8gIlNoaWZ0IE91dCIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkc28gPSAweDBFOwoKLy8vICJTaGlmdCBJbiIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkc2kgPSAweDBGOwoKLy8vICJEYXRhIExpbmsgRXNjYXBlIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRkbGUgPSAweDEwOwoKLy8vICJEZXZpY2UgQ29udHJvbCAxIiBjb250cm9sIGNoYXJhY3RlciAob2Z0LiBYT04pLgpjb25zdCBpbnQgJGRjMSA9IDB4MTE7CgovLy8gIkRldmljZSBDb250cm9sIDIiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGRjMiA9IDB4MTI7CgovLy8gIkRldmljZSBDb250cm9sIDMiIGNvbnRyb2wgY2hhcmFjdGVyIChvZnQuIFhPRkYpLgpjb25zdCBpbnQgJGRjMyA9IDB4MTM7CgovLy8gIkRldmljZSBDb250cm9sIDQiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGRjNCA9IDB4MTQ7CgovLy8gIk5lZ2F0aXZlIEFja25vd2xlZGdtZW50IiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRuYWsgPSAweDE1OwoKLy8vICJTeW5jaHJvbm91cyBpZGxlIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRzeW4gPSAweDE2OwoKLy8vICJFbmQgb2YgVHJhbnNtaXNzaW9uIEJsb2NrIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRldGIgPSAweDE3OwoKLy8vICJDYW5jZWwiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGNhbiA9IDB4MTg7CgovLy8gIkVuZCBvZiBNZWRpdW0iIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGVtID0gMHgxOTsKCi8vLyAiU3Vic3RpdHV0ZSIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkc3ViID0gMHgxQTsKCi8vLyAiRXNjYXBlIiBjb250cm9sIGNoYXJhY3Rlci4KY29uc3QgaW50ICRlc2MgPSAweDFCOwoKLy8vICJGaWxlIFNlcGFyYXRvciIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkZnMgPSAweDFDOwoKLy8vICJHcm91cCBTZXBhcmF0b3IiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGdzID0gMHgxRDsKCi8vLyAiUmVjb3JkIFNlcGFyYXRvciIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkcnMgPSAweDFFOwoKLy8vICJVbml0IFNlcGFyYXRvciIgY29udHJvbCBjaGFyYWN0ZXIuCmNvbnN0IGludCAkdXMgPSAweDFGOwoKLy8vICJEZWxldGUiIGNvbnRyb2wgY2hhcmFjdGVyLgpjb25zdCBpbnQgJGRlbCA9IDB4N0Y7CgovLyBWaXNpYmxlIGNoYXJhY3RlcnMuCgovLy8gU3BhY2UgY2hhcmFjdGVyLgpjb25zdCBpbnQgJHNwYWNlID0gMHgyMDsKCi8vLyBDaGFyYWN0ZXIgJyEnLgpjb25zdCBpbnQgJGV4Y2xhbWF0aW9uID0gMHgyMTsKCi8vLyBDaGFyYWN0ZXIgJyInLCBzaG9ydCBuYW1lLgpjb25zdCBpbnQgJHF1b3QgPSAweDIyOwoKLy8vIENoYXJhY3RlciAnIicuCmNvbnN0IGludCAkcXVvdGUgPSAweDIyOwoKLy8vIENoYXJhY3RlciAnIicuCmNvbnN0IGludCAkZG91YmxlX3F1b3RlID0gMHgyMjsKCi8vLyBDaGFyYWN0ZXIgJyInLgpjb25zdCBpbnQgJHF1b3RhdGlvbiA9IDB4MjI7CgovLy8gQ2hhcmFjdGVyICcjJy4KY29uc3QgaW50ICRoYXNoID0gMHgyMzsKCi8vLyBDaGFyYWN0ZXIgJyQnLgpjb25zdCBpbnQgJCQgPSAweDI0OwoKLy8vIENoYXJhY3RlciAnJCcuCmNvbnN0IGludCAkZG9sbGFyID0gMHgyNDsKCi8vLyBDaGFyYWN0ZXIgJyUnLgpjb25zdCBpbnQgJHBlcmNlbnQgPSAweDI1OwoKLy8vIENoYXJhY3RlciAnJicsIHNob3J0IG5hbWUuCmNvbnN0IGludCAkYW1wID0gMHgyNjsKCi8vLyBDaGFyYWN0ZXIgJyYnLgpjb25zdCBpbnQgJGFtcGVyc2FuZCA9IDB4MjY7CgovLy8gQ2hhcmFjdGVyICInIi4KY29uc3QgaW50ICRhcG9zID0gMHgyNzsKCi8vLyBDaGFyYWN0ZXIgJycnLgpjb25zdCBpbnQgJGFwb3N0cm9waGUgPSAweDI3OwoKLy8vIENoYXJhY3RlciAnJycuCmNvbnN0IGludCAkc2luZ2xlX3F1b3RlID0gMHgyNzsKCi8vLyBDaGFyYWN0ZXIgJygnLgpjb25zdCBpbnQgJGxwYXJlbiA9IDB4Mjg7CgovLy8gQ2hhcmFjdGVyICcoJy4KY29uc3QgaW50ICRvcGVuX3BhcmVuID0gMHgyODsKCi8vLyBDaGFyYWN0ZXIgJygnLgpjb25zdCBpbnQgJG9wZW5fcGFyZW50aGVzaXMgPSAweDI4OwoKLy8vIENoYXJhY3RlciAnKScuCmNvbnN0IGludCAkcnBhcmVuID0gMHgyOTsKCi8vLyBDaGFyYWN0ZXIgJyknLgpjb25zdCBpbnQgJGNsb3NlX3BhcmVuID0gMHgyOTsKCi8vLyBDaGFyYWN0ZXIgJyknLgpjb25zdCBpbnQgJGNsb3NlX3BhcmVudGhlc2lzID0gMHgyOTsKCi8vLyBDaGFyYWN0ZXIgJyonLgpjb25zdCBpbnQgJGFzdGVyaXNrID0gMHgyQTsKCi8vLyBDaGFyYWN0ZXIgJysnLgpjb25zdCBpbnQgJHBsdXMgPSAweDJCOwoKLy8vIENoYXJhY3RlciAnLCcuCmNvbnN0IGludCAkY29tbWEgPSAweDJDOwoKLy8vIENoYXJhY3RlciAnLScuCmNvbnN0IGludCAkbWludXMgPSAweDJEOwoKLy8vIENoYXJhY3RlciAnLScuCmNvbnN0IGludCAkZGFzaCA9IDB4MkQ7CgovLy8gQ2hhcmFjdGVyICcuJy4KY29uc3QgaW50ICRkb3QgPSAweDJFOwoKLy8vIENoYXJhY3RlciAnLicuCmNvbnN0IGludCAkZnVsbHN0b3AgPSAweDJFOwoKLy8vIENoYXJhY3RlciAnLycuCmNvbnN0IGludCAkc2xhc2ggPSAweDJGOwoKLy8vIENoYXJhY3RlciAnLycuCmNvbnN0IGludCAkc29saWR1cyA9IDB4MkY7CgovLy8gQ2hhcmFjdGVyICcvJy4KY29uc3QgaW50ICRkaXZpc2lvbiA9IDB4MkY7CgovLy8gQ2hhcmFjdGVyICcwJy4KY29uc3QgaW50ICQwID0gMHgzMDsKCi8vLyBDaGFyYWN0ZXIgJzEnLgpjb25zdCBpbnQgJDEgPSAweDMxOwoKLy8vIENoYXJhY3RlciAnMicuCmNvbnN0IGludCAkMiA9IDB4MzI7CgovLy8gQ2hhcmFjdGVyICczJy4KY29uc3QgaW50ICQzID0gMHgzMzsKCi8vLyBDaGFyYWN0ZXIgJzQnLgpjb25zdCBpbnQgJDQgPSAweDM0OwoKLy8vIENoYXJhY3RlciAnNScuCmNvbnN0IGludCAkNSA9IDB4MzU7CgovLy8gQ2hhcmFjdGVyICc2Jy4KY29uc3QgaW50ICQ2ID0gMHgzNjsKCi8vLyBDaGFyYWN0ZXIgJzcnLgpjb25zdCBpbnQgJDcgPSAweDM3OwoKLy8vIENoYXJhY3RlciAnOCcuCmNvbnN0IGludCAkOCA9IDB4Mzg7CgovLy8gQ2hhcmFjdGVyICc5Jy4KY29uc3QgaW50ICQ5ID0gMHgzOTsKCi8vLyBDaGFyYWN0ZXIgJzonLgpjb25zdCBpbnQgJGNvbG9uID0gMHgzQTsKCi8vLyBDaGFyYWN0ZXIgJzsnLgpjb25zdCBpbnQgJHNlbWljb2xvbiA9IDB4M0I7CgovLy8gQ2hhcmFjdGVyICc8Jy4KY29uc3QgaW50ICRsdCA9IDB4M0M7CgovLy8gQ2hhcmFjdGVyICc8Jy4KY29uc3QgaW50ICRsZXNzX3RoYW4gPSAweDNDOwoKLy8vIENoYXJhY3RlciAnPCcuCmNvbnN0IGludCAkbGFuZ2xlID0gMHgzQzsKCi8vLyBDaGFyYWN0ZXIgJzwnLgpjb25zdCBpbnQgJG9wZW5fYW5nbGUgPSAweDNDOwoKLy8vIENoYXJhY3RlciAnPScuCmNvbnN0IGludCAkZXF1YWwgPSAweDNEOwoKLy8vIENoYXJhY3RlciAnPicuCmNvbnN0IGludCAkZ3QgPSAweDNFOwoKLy8vIENoYXJhY3RlciAnPicuCmNvbnN0IGludCAkZ3JlYXRlcl90aGFuID0gMHgzRTsKCi8vLyBDaGFyYWN0ZXIgJz4nLgpjb25zdCBpbnQgJHJhbmdsZSA9IDB4M0U7CgovLy8gQ2hhcmFjdGVyICc+Jy4KY29uc3QgaW50ICRjbG9zZV9hbmdsZSA9IDB4M0U7CgovLy8gQ2hhcmFjdGVyICc/Jy4KY29uc3QgaW50ICRxdWVzdGlvbiA9IDB4M0Y7CgovLy8gQ2hhcmFjdGVyICdAJy4KY29uc3QgaW50ICRhdCA9IDB4NDA7CgovLy8gQ2hhcmFjdGVyICdBJy4KY29uc3QgaW50ICRBID0gMHg0MTsKCi8vLyBDaGFyYWN0ZXIgJ0InLgpjb25zdCBpbnQgJEIgPSAweDQyOwoKLy8vIENoYXJhY3RlciAnQycuCmNvbnN0IGludCAkQyA9IDB4NDM7CgovLy8gQ2hhcmFjdGVyICdEJy4KY29uc3QgaW50ICREID0gMHg0NDsKCi8vLyBDaGFyYWN0ZXIgJ0UnLgpjb25zdCBpbnQgJEUgPSAweDQ1OwoKLy8vIENoYXJhY3RlciAnRicuCmNvbnN0IGludCAkRiA9IDB4NDY7CgovLy8gQ2hhcmFjdGVyICdHJy4KY29uc3QgaW50ICRHID0gMHg0NzsKCi8vLyBDaGFyYWN0ZXIgJ0gnLgpjb25zdCBpbnQgJEggPSAweDQ4OwoKLy8vIENoYXJhY3RlciAnSScuCmNvbnN0IGludCAkSSA9IDB4NDk7CgovLy8gQ2hhcmFjdGVyICdKJy4KY29uc3QgaW50ICRKID0gMHg0QTsKCi8vLyBDaGFyYWN0ZXIgJ0snLgpjb25zdCBpbnQgJEsgPSAweDRCOwoKLy8vIENoYXJhY3RlciAnTCcuCmNvbnN0IGludCAkTCA9IDB4NEM7CgovLy8gQ2hhcmFjdGVyICdNJy4KY29uc3QgaW50ICRNID0gMHg0RDsKCi8vLyBDaGFyYWN0ZXIgJ04nLgpjb25zdCBpbnQgJE4gPSAweDRFOwoKLy8vIENoYXJhY3RlciAnTycuCmNvbnN0IGludCAkTyA9IDB4NEY7CgovLy8gQ2hhcmFjdGVyICdQJy4KY29uc3QgaW50ICRQID0gMHg1MDsKCi8vLyBDaGFyYWN0ZXIgJ1EnLgpjb25zdCBpbnQgJFEgPSAweDUxOwoKLy8vIENoYXJhY3RlciAnUicuCmNvbnN0IGludCAkUiA9IDB4NTI7CgovLy8gQ2hhcmFjdGVyICdTJy4KY29uc3QgaW50ICRTID0gMHg1MzsKCi8vLyBDaGFyYWN0ZXIgJ1QnLgpjb25zdCBpbnQgJFQgPSAweDU0OwoKLy8vIENoYXJhY3RlciAnVScuCmNvbnN0IGludCAkVSA9IDB4NTU7CgovLy8gQ2hhcmFjdGVyICdWJy4KY29uc3QgaW50ICRWID0gMHg1NjsKCi8vLyBDaGFyYWN0ZXIgJ1cnLgpjb25zdCBpbnQgJFcgPSAweDU3OwoKLy8vIENoYXJhY3RlciAnWCcuCmNvbnN0IGludCAkWCA9IDB4NTg7CgovLy8gQ2hhcmFjdGVyICdZJy4KY29uc3QgaW50ICRZID0gMHg1OTsKCi8vLyBDaGFyYWN0ZXIgJ1onLgpjb25zdCBpbnQgJFogPSAweDVBOwoKLy8vIENoYXJhY3RlciAnWycuCmNvbnN0IGludCAkbGJyYWNrZXQgPSAweDVCOwoKLy8vIENoYXJhY3RlciAnWycuCmNvbnN0IGludCAkb3Blbl9icmFja2V0ID0gMHg1QjsKCi8vLyBDaGFyYWN0ZXIgJ1wnLgpjb25zdCBpbnQgJGJhY2tzbGFzaCA9IDB4NUM7CgovLy8gQ2hhcmFjdGVyICddJy4KY29uc3QgaW50ICRyYnJhY2tldCA9IDB4NUQ7CgovLy8gQ2hhcmFjdGVyICddJy4KY29uc3QgaW50ICRjbG9zZV9icmFja2V0ID0gMHg1RDsKCi8vLyBDaGFyYWN0ZXIgJ14nLgpjb25zdCBpbnQgJGNpcmN1bWZsZXggPSAweDVFOwoKLy8vIENoYXJhY3RlciAnXicuCmNvbnN0IGludCAkY2FyZXQgPSAweDVFOwoKLy8vIENoYXJhY3RlciAnXicuCmNvbnN0IGludCAkaGF0ID0gMHg1RTsKCi8vLyBDaGFyYWN0ZXIgJ18nLgpjb25zdCBpbnQgJF8gPSAweDVGOwoKLy8vIENoYXJhY3RlciAnXycuCmNvbnN0IGludCAkdW5kZXJzY29yZSA9IDB4NUY7CgovLy8gQ2hhcmFjdGVyICdfJy4KY29uc3QgaW50ICR1bmRlcmxpbmUgPSAweDVGOwoKLy8vIENoYXJhY3RlciAnYCcuCmNvbnN0IGludCAkYmFja3F1b3RlID0gMHg2MDsKCi8vLyBDaGFyYWN0ZXIgJ2AnLgpjb25zdCBpbnQgJGdyYXZlID0gMHg2MDsKCi8vLyBDaGFyYWN0ZXIgJ2EnLgpjb25zdCBpbnQgJGEgPSAweDYxOwoKLy8vIENoYXJhY3RlciAnYicuCmNvbnN0IGludCAkYiA9IDB4NjI7CgovLy8gQ2hhcmFjdGVyICdjJy4KY29uc3QgaW50ICRjID0gMHg2MzsKCi8vLyBDaGFyYWN0ZXIgJ2QnLgpjb25zdCBpbnQgJGQgPSAweDY0OwoKLy8vIENoYXJhY3RlciAnZScuCmNvbnN0IGludCAkZSA9IDB4NjU7CgovLy8gQ2hhcmFjdGVyICdmJy4KY29uc3QgaW50ICRmID0gMHg2NjsKCi8vLyBDaGFyYWN0ZXIgJ2cnLgpjb25zdCBpbnQgJGcgPSAweDY3OwoKLy8vIENoYXJhY3RlciAnaCcuCmNvbnN0IGludCAkaCA9IDB4Njg7CgovLy8gQ2hhcmFjdGVyICdpJy4KY29uc3QgaW50ICRpID0gMHg2OTsKCi8vLyBDaGFyYWN0ZXIgJ2onLgpjb25zdCBpbnQgJGogPSAweDZBOwoKLy8vIENoYXJhY3RlciAnaycuCmNvbnN0IGludCAkayA9IDB4NkI7CgovLy8gQ2hhcmFjdGVyICdsJy4KY29uc3QgaW50ICRsID0gMHg2QzsKCi8vLyBDaGFyYWN0ZXIgJ20nLgpjb25zdCBpbnQgJG0gPSAweDZEOwoKLy8vIENoYXJhY3RlciAnbicuCmNvbnN0IGludCAkbiA9IDB4NkU7CgovLy8gQ2hhcmFjdGVyICdvJy4KY29uc3QgaW50ICRvID0gMHg2RjsKCi8vLyBDaGFyYWN0ZXIgJ3AnLgpjb25zdCBpbnQgJHAgPSAweDcwOwoKLy8vIENoYXJhY3RlciAncScuCmNvbnN0IGludCAkcSA9IDB4NzE7CgovLy8gQ2hhcmFjdGVyICdyJy4KY29uc3QgaW50ICRyID0gMHg3MjsKCi8vLyBDaGFyYWN0ZXIgJ3MnLgpjb25zdCBpbnQgJHMgPSAweDczOwoKLy8vIENoYXJhY3RlciAndCcuCmNvbnN0IGludCAkdCA9IDB4NzQ7CgovLy8gQ2hhcmFjdGVyICd1Jy4KY29uc3QgaW50ICR1ID0gMHg3NTsKCi8vLyBDaGFyYWN0ZXIgJ3YnLgpjb25zdCBpbnQgJHYgPSAweDc2OwoKLy8vIENoYXJhY3RlciAndycuCmNvbnN0IGludCAkdyA9IDB4Nzc7CgovLy8gQ2hhcmFjdGVyICd4Jy4KY29uc3QgaW50ICR4ID0gMHg3ODsKCi8vLyBDaGFyYWN0ZXIgJ3knLgpjb25zdCBpbnQgJHkgPSAweDc5OwoKLy8vIENoYXJhY3RlciAneicuCmNvbnN0IGludCAkeiA9IDB4N0E7CgovLy8gQ2hhcmFjdGVyICd7Jy4KY29uc3QgaW50ICRsYnJhY2UgPSAweDdCOwoKLy8vIENoYXJhY3RlciAneycuCmNvbnN0IGludCAkb3Blbl9icmFjZSA9IDB4N0I7CgovLy8gQ2hhcmFjdGVyICd8Jy4KY29uc3QgaW50ICRwaXBlID0gMHg3QzsKCi8vLyBDaGFyYWN0ZXIgJ3wnLgpjb25zdCBpbnQgJGJhciA9IDB4N0M7CgovLy8gQ2hhcmFjdGVyICd9Jy4KY29uc3QgaW50ICRyYnJhY2UgPSAweDdEOwoKLy8vIENoYXJhY3RlciAnfScuCmNvbnN0IGludCAkY2xvc2VfYnJhY2UgPSAweDdEOwoKLy8vIENoYXJhY3RlciAnficuCmNvbnN0IGludCAkdGlsZGUgPSAweDdFOwqB/gBOSTwBOARQBElERT8ETTQ/QwRQNARLNykBFwEoFwEpFwEnFwElFwEtFwEhFwEoFwEeFwEjFgEoFgE1FwEjFgEmFgEjFgEpFgEjFgEiFgEqFwE1FwEqFwE2FwEqFwExFwEqFwEzFwEgFwEnFgEkFwEgFwEoFgEpFgEqFgEoFgEgFwEXARUZARMfAR8YARMZARMgARMdARMYARMVARMaARMbAR8XARMdARMYARMeARMgARMaARMeARMkARMaARMfARMlARMcARMYARMZARMZARMYARMXARMcARMZARMbARMcARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMZARMdARMWARMdARMaARMeARMZARMWARMgARMaARMfARMcARMWARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMcARMgARMdARMcARMhARMeARMZARMXARMVARMeARMdARMdARMZARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMVARMaARMeARMYARMXARMaARMfARMZARtwYWNrYWdlOmNoYXJjb2RlL2FzY2lpLmRhcnRAc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnX3Rlc3RlZC9wYWNrYWdlX2NvbmZpZy9saWIvc3JjL3V0aWwuZGFydI8QLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBVdGlsaXR5IG1ldGhvZHMgdXNlZCBieSBtb3JlIHRoYW4gb25lIGxpYnJhcnkgaW4gdGhlIHBhY2thZ2UuCmxpYnJhcnkgcGFja2FnZV9jb25maWcudXRpbDsKCmltcG9ydCAicGFja2FnZTpjaGFyY29kZS9hc2NpaS5kYXJ0IjsKCi8vIEFsbCBBU0NJSSBjaGFyYWN0ZXJzIHRoYXQgYXJlIHZhbGlkIGluIGEgcGFja2FnZSBuYW1lLCB3aXRoIHNwYWNlCi8vIGZvciBhbGwgdGhlIGludmFsaWQgb25lcyAoaW5jbHVkaW5nIHNwYWNlKS4KY29uc3QgU3RyaW5nIF92YWxpZFBhY2thZ2VOYW1lQ2hhcmFjdGVycyA9CiAgICByIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgICQgJicoKSorLC0uIDAxMjM0NTY3ODkgOyA9ICAiCiAgICByIkBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiAgICBfIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ICAgfiAiOwoKLy8vIFRlc3RzIHdoZXRoZXIgc29tZXRoaW5nIGlzIGEgdmFsaWQgRGFydCBwYWNrYWdlIG5hbWUuCmJvb2wgaXNWYWxpZFBhY2thZ2VOYW1lKFN0cmluZyBzdHJpbmcpIHsKICByZXR1cm4gX2ZpbmRJbnZhbGlkQ2hhcmFjdGVyKHN0cmluZykgPCAwOwp9CgovLy8gQ2hlY2sgaWYgYSBzdHJpbmcgaXMgYSB2YWxpZCBwYWNrYWdlIG5hbWUuCi8vLwovLy8gVmFsaWQgcGFja2FnZSBuYW1lcyBjb250YWluIG9ubHkgY2hhcmFjdGVycyBpbiBbX3ZhbGlkUGFja2FnZU5hbWVDaGFyYWN0ZXJzXQovLy8gYW5kIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgbm9uLScuJyBjaGFyYWN0ZXIuCi8vLwovLy8gUmV0dXJucyBgLTFgIGlmIHRoZSBzdHJpbmcgaXMgdmFsaWQuCi8vLyBPdGhlcndpc2UgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyLAovLy8gb3IgYHN0cmluZy5sZW5ndGhgIGlmIHRoZSBzdHJpbmcgY29udGFpbnMgbm8gbm9uLScuJyBjaGFyYWN0ZXIuCmludCBfZmluZEludmFsaWRDaGFyYWN0ZXIoU3RyaW5nIHN0cmluZykgewogIC8vIEJlY29tZXMgbm9uLXplcm8gaWYgYW55IG5vbi0nLicgY2hhcmFjdGVyIGlzIGVuY291bnRlcmVkLgogIGludCBub25Eb3QgPSAwOwogIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgYyA9IHN0cmluZy5jb2RlVW5pdEF0KGkpOwogICAgaWYgKGMgPiAweDdmIHx8IF92YWxpZFBhY2thZ2VOYW1lQ2hhcmFjdGVycy5jb2RlVW5pdEF0KGMpIDw9ICRzcGFjZSkgewogICAgICByZXR1cm4gaTsKICAgIH0KICAgIG5vbkRvdCArPSBjIF4gJGRvdDsKICB9CiAgaWYgKG5vbkRvdCA9PSAwKSByZXR1cm4gc3RyaW5nLmxlbmd0aDsKICByZXR1cm4gLTE7Cn0KCi8vLyBWYWxpZGF0ZSB0aGF0IGEgVXJpIGlzIGEgdmFsaWQgcGFja2FnZTpVUkkuClN0cmluZyBjaGVja1ZhbGlkUGFja2FnZVVyaShVcmkgcGFja2FnZVVyaSkgewogIGlmIChwYWNrYWdlVXJpLnNjaGVtZSAhPSAicGFja2FnZSIpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgIHBhY2thZ2VVcmksICJwYWNrYWdlVXJpIiwgIk5vdCBhIHBhY2thZ2U6IFVSSSIpOwogIH0KICBpZiAocGFja2FnZVVyaS5oYXNBdXRob3JpdHkpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgIHBhY2thZ2VVcmksICJwYWNrYWdlVXJpIiwgIlBhY2thZ2UgVVJJcyBtdXN0IG5vdCBoYXZlIGEgaG9zdCBwYXJ0Iik7CiAgfQogIGlmIChwYWNrYWdlVXJpLmhhc1F1ZXJ5KSB7CiAgICAvLyBBIHF1ZXJ5IG1ha2VzIG5vIHNlbnNlIGlmIHJlc29sdmVkIHRvIGEgZmlsZTogVVJJLgogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUoCiAgICAgICAgcGFja2FnZVVyaSwgInBhY2thZ2VVcmkiLCAiUGFja2FnZSBVUklzIG11c3Qgbm90IGhhdmUgYSBxdWVyeSBwYXJ0Iik7CiAgfQogIGlmIChwYWNrYWdlVXJpLmhhc0ZyYWdtZW50KSB7CiAgICAvLyBXZSBjb3VsZCBsZWF2ZSB0aGUgZnJhZ21lbnQgYWZ0ZXIgdGhlIFVSTCB3aGVuIHJlc29sdmluZywKICAgIC8vIGJ1dCBpdCB3b3VsZCBiZSBvZGQgaWYgInBhY2thZ2U6Zm9vL2Zvby5kYXJ0IzEiIGFuZAogICAgLy8gInBhY2thZ2U6Zm9vL2Zvby5kYXJ0IzIiIHdlcmUgY29uc2lkZXJlZCBkaWZmZXJlbnQgbGlicmFyaWVzLgogICAgLy8gS2VlcCB0aGUgc3ludGF4IG9wZW4gaW4gY2FzZSB3ZSBldmVyIGdldCBtdWx0aXBsZSBsaWJyYXJpZXMgaW4gb25lIGZpbGUuCiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICBwYWNrYWdlVXJpLCAicGFja2FnZVVyaSIsICJQYWNrYWdlIFVSSXMgbXVzdCBub3QgaGF2ZSBhIGZyYWdtZW50IHBhcnQiKTsKICB9CiAgaWYgKHBhY2thZ2VVcmkucGF0aC5zdGFydHNXaXRoKCcvJykpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgIHBhY2thZ2VVcmksICJwYWNrYWdlVXJpIiwgIlBhY2thZ2UgVVJJcyBtdXN0IG5vdCBzdGFydCB3aXRoIGEgJy8nIik7CiAgfQogIGludCBmaXJzdFNsYXNoID0gcGFja2FnZVVyaS5wYXRoLmluZGV4T2YoJy8nKTsKICBpZiAoZmlyc3RTbGFzaCA9PSAtMSkgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUocGFja2FnZVVyaSwgInBhY2thZ2VVcmkiLAogICAgICAgICJQYWNrYWdlIFVSSXMgbXVzdCBzdGFydCB3aXRoIHRoZSBwYWNrYWdlIG5hbWUgZm9sbG93ZWQgYnkgYSAnLyciKTsKICB9CiAgU3RyaW5nIHBhY2thZ2VOYW1lID0gcGFja2FnZVVyaS5wYXRoLnN1YnN0cmluZygwLCBmaXJzdFNsYXNoKTsKICBpbnQgYmFkSW5kZXggPSBfZmluZEludmFsaWRDaGFyYWN0ZXIocGFja2FnZU5hbWUpOwogIGlmIChiYWRJbmRleCA+PSAwKSB7CiAgICBpZiAocGFja2FnZU5hbWUuaXNFbXB0eSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICAgIHBhY2thZ2VVcmksICJwYWNrYWdlVXJpIiwgIlBhY2thZ2UgbmFtZXMgbXVzIGJlIG5vbi1lbXB0eSIpOwogICAgfQogICAgaWYgKGJhZEluZGV4ID09IHBhY2thZ2VOYW1lLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShwYWNrYWdlVXJpLCAicGFja2FnZVVyaSIsCiAgICAgICAgICAiUGFja2FnZSBuYW1lcyBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIG5vbi0nLicgY2hhcmFjdGVyIik7CiAgICB9CiAgICBhc3NlcnQoYmFkSW5kZXggPCBwYWNrYWdlTmFtZS5sZW5ndGgpOwogICAgaW50IGJhZENoYXJDb2RlID0gcGFja2FnZU5hbWUuY29kZVVuaXRBdChiYWRJbmRleCk7CiAgICB2YXIgYmFkQ2hhciA9ICJVKyIgKyBiYWRDaGFyQ29kZS50b1JhZGl4U3RyaW5nKDE2KS5wYWRMZWZ0KDQsICcwJyk7CiAgICBpZiAoYmFkQ2hhckNvZGUgPj0gMHgyMCAmJiBiYWRDaGFyQ29kZSA8PSAweDdlKSB7CiAgICAgIC8vIFByaW50YWJsZSBjaGFyYWN0ZXIuCiAgICAgIGJhZENoYXIgPSAiJyR7cGFja2FnZU5hbWVbYmFkSW5kZXhdfScgKCRiYWRDaGFyKSI7CiAgICB9CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSgKICAgICAgICBwYWNrYWdlVXJpLCAicGFja2FnZVVyaSIsICJQYWNrYWdlIG5hbWVzIG11c3Qgbm90IGNvbnRhaW4gJGJhZENoYXIiKTsKICB9CiAgcmV0dXJuIHBhY2thZ2VOYW1lOwp9CmMATk48AUIdASYBRS8rSEkBOiksAgEvBFE1BClARCs/EiwiSxAGGAQpDQIBMC4oIzkEISNNBB06I04EIEE7RVAjUQQpI00EMRo8TARBNRcfJUcGKj5IBis4SDYeOQYjTgQWAgEkcGFja2FnZTpwYWNrYWdlX2NvbmZpZy9zcmMvdXRpbC5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zY2FubmVyL3N0cmluZ19jYW5vbmljYWxpemVyLmRhcnSMhC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnNjYW5uZXIuc3RyaW5nX2Nhbm9uaWNhbGl6ZXI7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CgpjbGFzcyBOb2RlIHsKICB2YXIgLyogU3RyaW5nIHwgTGlzdDxpbnQ+ICovIGRhdGE7CiAgaW50IHN0YXJ0OwogIGludCBlbmQ7CiAgU3RyaW5nIHBheWxvYWQ7CiAgTm9kZSBuZXh0OwogIE5vZGUodGhpcy5kYXRhLCB0aGlzLnN0YXJ0LCB0aGlzLmVuZCwgdGhpcy5wYXlsb2FkLCB0aGlzLm5leHQpOwp9CgovLy8gQSBoYXNoIHRhYmxlIGZvciB0cmlwbGVzOgovLy8gKGxpc3Qgb2YgYnl0ZXMsIHN0YXJ0LCBlbmQpIC0tPiBjYW5vbmljYWxpemVkIHN0cmluZwovLy8gVXNpbmcgdHJpcGxlcyBhdm9pZHMgYWxsb2NhdGluZyBzdHJpbmcgc2xpY2VzIGJlZm9yZSBjaGVja2luZyBpZiB0aGV5Ci8vLyBhcmUgY2Fub25pY2FsLgovLy8KLy8vIEdpdmVzIGFib3V0IDMlIHNwZWVkdXAgb24gZGFydDJqcy4KY2xhc3MgU3RyaW5nQ2Fub25pY2FsaXplciB7CiAgLy8vIE1hc2sgYXdheSB0b3AgYml0cyB0byBrZWVwIGhhc2ggY2FsY3VsYXRpb24gd2l0aGluIDMyLWJpdCBTTUkgcmFuZ2UuCiAgc3RhdGljIGNvbnN0IGludCBNQVNLID0gMTYgKiAxMDI0ICogMTAyNCAtIDE7CgogIHN0YXRpYyBjb25zdCBpbnQgSU5JVElBTF9TSVpFID0gOCAqIDEwMjQ7CgogIC8vLyBMaW5lYXIgc2l6ZSBvZiBhIGhhc2ggdGFibGUuCiAgaW50IF9zaXplID0gSU5JVElBTF9TSVpFOwoKICAvLy8gSXRlbXMgaW4gYSBoYXNoIHRhYmxlLgogIGludCBfY291bnQgPSAwOwoKICAvLy8gVGhlIHRhYmxlIGl0c2VsZi4KICBMaXN0PE5vZGU+IF9ub2RlcyA9IG5ldyBMaXN0PE5vZGU+KElOSVRJQUxfU0laRSk7CgogIHN0YXRpYyBTdHJpbmcgZGVjb2RlKExpc3Q8aW50PiBkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgYXNjaWlPbmx5KSB7CiAgICB2YXIgczsKICAgIGlmIChhc2NpaU9ubHkpIHsKICAgICAgcyA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhkYXRhLCBzdGFydCwgZW5kKTsKICAgIH0gZWxzZSB7CiAgICAgIHMgPSBuZXcgVXRmOERlY29kZXIoYWxsb3dNYWxmb3JtZWQ6IHRydWUpLmNvbnZlcnQoZGF0YSwgc3RhcnQsIGVuZCk7CiAgICB9CiAgICByZXR1cm4gczsKICB9CgogIHN0YXRpYyBpbnQgaGFzaEJ5dGVzKExpc3Q8aW50PiBkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGludCBoID0gNTM4MTsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIGggPSAoKGggPDwgNSkgKyBoICsgZGF0YVtpXSkgJiBNQVNLOwogICAgfQogICAgcmV0dXJuIGg7CiAgfQoKICBzdGF0aWMgaW50IGhhc2hTdHJpbmcoU3RyaW5nIGRhdGEsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgaW50IGggPSA1MzgxOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgaCA9ICgoaCA8PCA1KSArIGggKyBkYXRhLmNvZGVVbml0QXQoaSkpICYgTUFTSzsKICAgIH0KICAgIHJldHVybiBoOwogIH0KCiAgcmVoYXNoKCkgewogICAgdmFyIG5ld1NpemUgPSBfc2l6ZSAqIDI7CiAgICB2YXIgbmV3Tm9kZXMgPSBuZXcgTGlzdDxOb2RlPihuZXdTaXplKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX3NpemU7IGkrKykgewogICAgICBOb2RlIHQgPSBfbm9kZXNbaV07CiAgICAgIHdoaWxlICh0ICE9IG51bGwpIHsKICAgICAgICBOb2RlIG4gPSB0Lm5leHQ7CiAgICAgICAgaW50IG5ld0luZGV4ID0gdC5kYXRhIGlzIFN0cmluZwogICAgICAgICAgICA/IGhhc2hTdHJpbmcodC5kYXRhLCB0LnN0YXJ0LCB0LmVuZCkgJiAobmV3U2l6ZSAtIDEpCiAgICAgICAgICAgIDogaGFzaEJ5dGVzKHQuZGF0YSwgdC5zdGFydCwgdC5lbmQpICYgKG5ld1NpemUgLSAxKTsKICAgICAgICBOb2RlIHMgPSBuZXdOb2Rlc1tuZXdJbmRleF07CiAgICAgICAgdC5uZXh0ID0gczsKICAgICAgICBuZXdOb2Rlc1tuZXdJbmRleF0gPSB0OwogICAgICAgIHQgPSBuOwogICAgICB9CiAgICB9CiAgICBfc2l6ZSA9IG5ld1NpemU7CiAgICBfbm9kZXMgPSBuZXdOb2RlczsKICB9CgogIFN0cmluZyBjYW5vbmljYWxpemUoZGF0YSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGFzY2lpT25seSkgewogICAgaWYgKF9jb3VudCA+IF9zaXplKSByZWhhc2goKTsKICAgIGludCBpbmRleCA9IGRhdGEgaXMgU3RyaW5nCiAgICAgICAgPyBoYXNoU3RyaW5nKGRhdGEsIHN0YXJ0LCBlbmQpCiAgICAgICAgOiBoYXNoQnl0ZXMoZGF0YSwgc3RhcnQsIGVuZCk7CiAgICBpbmRleCA9IGluZGV4ICYgKF9zaXplIC0gMSk7CiAgICBOb2RlIHMgPSBfbm9kZXNbaW5kZXhdOwogICAgTm9kZSB0ID0gczsKICAgIGludCBsZW4gPSBlbmQgLSBzdGFydDsKICAgIHdoaWxlICh0ICE9IG51bGwpIHsKICAgICAgaWYgKHQuZW5kIC0gdC5zdGFydCA9PSBsZW4pIHsKICAgICAgICBpbnQgaSA9IHN0YXJ0LCBqID0gdC5zdGFydDsKICAgICAgICB3aGlsZSAoaSA8IGVuZCAmJiBkYXRhW2ldID09IHQuZGF0YVtqXSkgewogICAgICAgICAgaSsrOwogICAgICAgICAgaisrOwogICAgICAgIH0KICAgICAgICBpZiAoaSA9PSBlbmQpIHsKICAgICAgICAgIHJldHVybiB0LnBheWxvYWQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIHQgPSB0Lm5leHQ7CiAgICB9CiAgICBTdHJpbmcgcGF5bG9hZDsKICAgIGlmIChkYXRhIGlzIFN0cmluZykKICAgICAgcGF5bG9hZCA9IGRhdGEuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOwogICAgZWxzZQogICAgICBwYXlsb2FkID0gZGVjb2RlKGRhdGEsIHN0YXJ0LCBlbmQsIGFzY2lpT25seSk7CiAgICBfbm9kZXNbaW5kZXhdID0gbmV3IE5vZGUoZGF0YSwgc3RhcnQsIGVuZCwgcGF5bG9hZCwgcyk7CiAgICBfY291bnQrKzsKICAgIHJldHVybiBwYXlsb2FkOwogIH0KCiAgY2xlYXIoKSB7CiAgICBfc2l6ZSA9IElOSVRJQUxfU0laRTsKICAgIF9ub2RlcyA9IG5ldyBMaXN0PE5vZGU+KF9zaXplKTsKICAgIF9jb3VudCA9IDA7CiAgfQp9CnwATk48ASwBFwENJQ0LEg1CAgEeOUoTBCccSzABLAEjHAEdEgEYNAFNCxU2DUsGDgQBPRIoKwYOBAE7Eig2Bg4EAQ0dLCYaGhkoQUElFCAPCAYVFwQBQiIfJychHBAbGCQkMg8PChgcCggSBhQYLAk1PA4UBAEMGiQQBAIBPXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY2FubmVyL3N0cmluZ19jYW5vbmljYWxpemVyLmRhcnQ5c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Jhc2Uvc3ludGFjdGljX2VudGl0eS5kYXJ0gxcvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLyoqCiAqIEludGVyZmFjZSByZXByZXNlbnRpbmcgYSBzeW50YWN0aWMgZW50aXR5IChlaXRoZXIgYSB0b2tlbiBvciBhbiBBU1Qgbm9kZSkKICogd2hpY2ggaGFzIGEgbG9jYXRpb24gYW5kIGV4dGVudCBpbiB0aGUgc291cmNlIGZpbGUuCiAqLwphYnN0cmFjdCBjbGFzcyBTeW50YWN0aWNFbnRpdHkgewogIC8qKgogICAqIFJldHVybiB0aGUgb2Zmc2V0IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZSB0byB0aGUgY2hhcmFjdGVyIGFmdGVyIHRoZQogICAqIGxhc3QgY2hhcmFjdGVyIG9mIHRoZSBzeW50YWN0aWMgZW50aXR5LgogICAqLwogIGludCBnZXQgZW5kOwoKICAvKioKICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRoZSBzeW50YWN0aWMgZW50aXR5J3Mgc291cmNlIHJhbmdlLgogICAqLwogIGludCBnZXQgbGVuZ3RoOwoKICAvKioKICAgKiBSZXR1cm4gdGhlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBpbgogICAqIHRoZSBzeW50YWN0aWMgZW50aXR5LgogICAqLwogIGludCBnZXQgb2Zmc2V0Owp9ChwATk48AQRNNwQhBlEtBg8BBk0GEgEGUBsGEgIBMHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9iYXNlL3N5bnRhY3RpY19lbnRpdHkuZGFydDxzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvc2Nhbm5lci9zdHJpbmdfdXRpbGl0aWVzLmRhcnSBgC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2ludGVybmVyLmRhcnQnOwoKY2xhc3MgU3RyaW5nVXRpbGl0aWVzIHsKICBzdGF0aWMgSW50ZXJuZXIgSU5URVJORVIgPSBuZXcgTnVsbEludGVybmVyKCk7CgogIHN0YXRpYyBTdHJpbmcgaW50ZXJuKFN0cmluZyBzdHJpbmcpID0+IElOVEVSTkVSLmludGVybihzdHJpbmcpOwp9Cg0ATk48ARgBGDEBQgIBM3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9zY2FubmVyL3N0cmluZ191dGlsaXRpZXMuZGFydD1zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYmxhY2tsaXN0ZWRfY2xhc3Nlcy5kYXJ0gYkvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gTGlzdCBvZiBzcGVjaWFsIGNsYXNzZXMgaW4gZGFydDpjb3JlIHRoYXQgY2FuJ3QgYmUgc3ViY2xhc3NlZC4KY29uc3QgTGlzdDxTdHJpbmc+IGJsYWNrbGlzdGVkQ29yZUNsYXNzZXMgPSBbCiAgImJvb2wiLAogICJpbnQiLAogICJudW0iLAogICJkb3VibGUiLAogICJTdHJpbmciLAogICJOdWxsIgpdOwoPAE5OPAFCLgoJCQwMCQMBNHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9ibGFja2xpc3RlZF9jbGFzc2VzLmRhcnQ/c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0h3EvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5rZXJuZWxfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQ29tYmluYXRvciwKICAgICAgICBDb25zdHJ1Y3RvciwKICAgICAgICBJbml0aWFsaXplciwKICAgICAgICBQcm9jZWR1cmUsCiAgICAgICAgUmVkaXJlY3RpbmdJbml0aWFsaXplcjsKCmltcG9ydCAnLi4vY29tYmluYXRvci5kYXJ0JyBhcyBmYXN0YTsKCmV4cG9ydCAnLi4vYnVpbGRlci9idWlsZGVyLmRhcnQnOwoKZXhwb3J0ICdjbGFzc19oaWVyYXJjaHlfYnVpbGRlci5kYXJ0JwogICAgc2hvdyBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIsIERlbGF5ZWRNZW1iZXIsIERlbGF5ZWRPdmVycmlkZUNoZWNrOwoKZXhwb3J0ICdpbXBsaWNpdF9maWVsZF90eXBlLmRhcnQnIHNob3cgSW1wbGljaXRGaWVsZFR5cGU7CgpleHBvcnQgJ2tlcm5lbF92YXJpYWJsZV9idWlsZGVyLmRhcnQnIHNob3cgVmFyaWFibGVCdWlsZGVyOwoKZXhwb3J0ICdsb2FkX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IExvYWRMaWJyYXJ5QnVpbGRlcjsKCmV4cG9ydCAndW5saW5rZWRfc2NvcGUuZGFydCcgc2hvdyBVbmxpbmtlZERlY2xhcmF0aW9uOwoKaW50IGNvbXBhcmVQcm9jZWR1cmVzKFByb2NlZHVyZSBhLCBQcm9jZWR1cmUgYikgewogIGludCBpID0gIiR7YS5maWxlVXJpfSIuY29tcGFyZVRvKCIke2IuZmlsZVVyaX0iKTsKICBpZiAoaSAhPSAwKSByZXR1cm4gaTsKICByZXR1cm4gYS5maWxlT2Zmc2V0LmNvbXBhcmVUbyhiLmZpbGVPZmZzZXQpOwp9Cgpib29sIGlzUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RydWN0b3JJbXBsZW1lbnRhdGlvbihDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvcikgewogIExpc3Q8SW5pdGlhbGl6ZXI+IGluaXRpYWxpemVycyA9IGNvbnN0cnVjdG9yLmluaXRpYWxpemVyczsKICByZXR1cm4gaW5pdGlhbGl6ZXJzLmxlbmd0aCA9PSAxICYmCiAgICAgIGluaXRpYWxpemVycy5zaW5nbGUgaXMgUmVkaXJlY3RpbmdJbml0aWFsaXplcjsKfQoKTGlzdDxDb21iaW5hdG9yPiB0b0tlcm5lbENvbWJpbmF0b3JzKExpc3Q8ZmFzdGEuQ29tYmluYXRvcj4gZmFzdGFDb21iaW5hdG9ycykgewogIGlmIChmYXN0YUNvbWJpbmF0b3JzID09IG51bGwpIHsKICAgIC8vIE5vdGU6IGl0J3Mgc2FmZSB0byByZXR1cm4gbnVsbCBoZXJlIGFzIEtlcm5lbCdzIExpYnJhcnlEZXBlbmRlbmN5IHdpbGwKICAgIC8vIGNvbnZlcnQgbnVsbCB0byBhbiBlbXB0eSBsaXN0LgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBMaXN0PENvbWJpbmF0b3I+IHJlc3VsdCA9IG5ldyBMaXN0PENvbWJpbmF0b3I+LmZpbGxlZCgKICAgICAgZmFzdGFDb21iaW5hdG9ycy5sZW5ndGgsIG51bGwsCiAgICAgIGdyb3dhYmxlOiB0cnVlKTsKICBmb3IgKGludCBpID0gMDsgaSA8IGZhc3RhQ29tYmluYXRvcnMubGVuZ3RoOyBpKyspIHsKICAgIGZhc3RhLkNvbWJpbmF0b3IgY29tYmluYXRvciA9IGZhc3RhQ29tYmluYXRvcnNbaV07CiAgICBMaXN0PFN0cmluZz4gbmFtZUxpc3QgPSBjb21iaW5hdG9yLm5hbWVzLnRvTGlzdCgpOwogICAgcmVzdWx0W2ldID0gY29tYmluYXRvci5pc1Nob3cKICAgICAgICA/IG5ldyBDb21iaW5hdG9yLnNob3cobmFtZUxpc3QpCiAgICAgICAgOiBuZXcgQ29tYmluYXRvci5oaWRlKG5hbWVMaXN0KTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQo+AE5OPAEeASEJFBUVEyABJgEiASZFAToBPAE8ATcBMjQYLwIBUT0lNQIBUCJOJhEEATklFzY3NyIoKQQRAgE2cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS90YXJnZXRfaW1wbGVtZW50YXRpb24uZGFydJmhLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudGFyZ2V0X2ltcGxlbWVudGF0aW9uOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBTb3VyY2U7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3RhcmdldC90YXJnZXRzLmRhcnQnIGFzIGJhY2tlbmQgc2hvdyBUYXJnZXQ7CgppbXBvcnQgJy4uL2Jhc2UvcHJvY2Vzc2VkX29wdGlvbnMuZGFydCcgc2hvdyBQcm9jZXNzZWRPcHRpb25zOwoKaW1wb3J0ICdidWlsZGVyL2J1aWxkZXIuZGFydCcgc2hvdyBEZWNsYXJhdGlvbiwgQ2xhc3NCdWlsZGVyLCBMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnY29tcGlsZXJfY29udGV4dC5kYXJ0JyBzaG93IENvbXBpbGVyQ29udGV4dDsKCmltcG9ydCAnbG9hZGVyLmRhcnQnIHNob3cgTG9hZGVyOwoKaW1wb3J0ICdtZXNzYWdlcy5kYXJ0JyBzaG93IEZvcm1hdHRlZE1lc3NhZ2UsIExvY2F0ZWRNZXNzYWdlLCBNZXNzYWdlOwoKaW1wb3J0ICdyZXdyaXRlX3NldmVyaXR5LmRhcnQnIHNob3cgcmV3cml0ZVNldmVyaXR5OwoKaW1wb3J0ICdzZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICd0YXJnZXQuZGFydCcgc2hvdyBUYXJnZXQ7CgppbXBvcnQgJ3RpY2tlci5kYXJ0JyBzaG93IFRpY2tlcjsKCmltcG9ydCAndXJpX3RyYW5zbGF0b3IuZGFydCcgc2hvdyBVcmlUcmFuc2xhdG9yOwoKaW1wb3J0ICcuLi9hcGlfcHJvdG90eXBlL2V4cGVyaW1lbnRhbF9mbGFncy5kYXJ0JyBzaG93IEV4cGVyaW1lbnRhbEZsYWc7CgovLy8gUHJvdmlkZXMgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgdXNlZCBieSBhIGxvYWRlciBmb3IgYSB0YXJnZXQuCmFic3RyYWN0IGNsYXNzIFRhcmdldEltcGxlbWVudGF0aW9uIGV4dGVuZHMgVGFyZ2V0IHsKICBmaW5hbCBVcmlUcmFuc2xhdG9yIHVyaVRyYW5zbGF0b3I7CgogIGZpbmFsIGJhY2tlbmQuVGFyZ2V0IGJhY2tlbmRUYXJnZXQ7CgogIGZpbmFsIENvbXBpbGVyQ29udGV4dCBjb250ZXh0ID0gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQ7CgogIC8vLyBTaGFyZWQgd2l0aCBbQ29tcGlsZXJDb250ZXh0XS4KICBmaW5hbCBNYXA8VXJpLCBTb3VyY2U+IHVyaVRvU291cmNlID0gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQudXJpVG9Tb3VyY2U7CgogIERlY2xhcmF0aW9uIGNhY2hlZEFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3I7CiAgRGVjbGFyYXRpb24gY2FjaGVkQ29tcGlsZVRpbWVFcnJvcjsKICBEZWNsYXJhdGlvbiBjYWNoZWREdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yOwogIERlY2xhcmF0aW9uIGNhY2hlZEZhbGxUaHJvdWdoRXJyb3I7CiAgRGVjbGFyYXRpb24gY2FjaGVkTmF0aXZlQW5ub3RhdGlvbjsKICBEZWNsYXJhdGlvbiBjYWNoZWROYXRpdmVFeHRlbnNpb25Bbm5vdGF0aW9uOwoKICBib29sIGVuYWJsZUNvbnN0YW50VXBkYXRlMjAxODsKICBib29sIGVuYWJsZUNvbnRyb2xGbG93Q29sbGVjdGlvbnM7CiAgYm9vbCBlbmFibGVFeHRlbnNpb25NZXRob2RzOwogIGJvb2wgZW5hYmxlTm9uTnVsbGFibGU7CiAgYm9vbCBlbmFibGVTcHJlYWRDb2xsZWN0aW9uczsKICBib29sIGVuYWJsZVRyaXBsZVNoaWZ0OwoKICBUYXJnZXRJbXBsZW1lbnRhdGlvbihUaWNrZXIgdGlja2VyLCB0aGlzLnVyaVRyYW5zbGF0b3IsIHRoaXMuYmFja2VuZFRhcmdldCkKICAgICAgOiBlbmFibGVDb25zdGFudFVwZGF0ZTIwMTggPSBDb21waWxlckNvbnRleHQuY3VycmVudC5vcHRpb25zCiAgICAgICAgICAgIC5pc0V4cGVyaW1lbnRFbmFibGVkKEV4cGVyaW1lbnRhbEZsYWcuY29uc3RhbnRVcGRhdGUyMDE4KSwKICAgICAgICBlbmFibGVDb250cm9sRmxvd0NvbGxlY3Rpb25zID0gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9ucwogICAgICAgICAgICAuaXNFeHBlcmltZW50RW5hYmxlZChFeHBlcmltZW50YWxGbGFnLmNvbnRyb2xGbG93Q29sbGVjdGlvbnMpLAogICAgICAgIGVuYWJsZUV4dGVuc2lvbk1ldGhvZHMgPSBDb21waWxlckNvbnRleHQuY3VycmVudC5vcHRpb25zCiAgICAgICAgICAgIC5pc0V4cGVyaW1lbnRFbmFibGVkKEV4cGVyaW1lbnRhbEZsYWcuZXh0ZW5zaW9uTWV0aG9kcyksCiAgICAgICAgZW5hYmxlTm9uTnVsbGFibGUgPSBDb21waWxlckNvbnRleHQuY3VycmVudC5vcHRpb25zCiAgICAgICAgICAgIC5pc0V4cGVyaW1lbnRFbmFibGVkKEV4cGVyaW1lbnRhbEZsYWcubm9uTnVsbGFibGUpLAogICAgICAgIGVuYWJsZVNwcmVhZENvbGxlY3Rpb25zID0gQ29tcGlsZXJDb250ZXh0LmN1cnJlbnQub3B0aW9ucwogICAgICAgICAgICAuaXNFeHBlcmltZW50RW5hYmxlZChFeHBlcmltZW50YWxGbGFnLnNwcmVhZENvbGxlY3Rpb25zKSwKICAgICAgICBlbmFibGVUcmlwbGVTaGlmdCA9IENvbXBpbGVyQ29udGV4dC5jdXJyZW50Lm9wdGlvbnMKICAgICAgICAgICAgLmlzRXhwZXJpbWVudEVuYWJsZWQoRXhwZXJpbWVudGFsRmxhZy50cmlwbGVTaGlmdCksCiAgICAgICAgc3VwZXIodGlja2VyKTsKCiAgLy8vIENyZWF0ZXMgYSBbTGlicmFyeUJ1aWxkZXJdIGNvcnJlc3BvbmRpbmcgdG8gW3VyaV0sIGlmIG9uZSBkb2Vzbid0IGV4aXN0CiAgLy8vIGFscmVhZHkuCiAgLy8vCiAgLy8vIFtmaWxlVXJpXSBtdXN0IG5vdCBiZSBudWxsIGFuZCBpcyBhIFVSSSB0aGF0IGNhbiBiZSBwYXNzZWQgdG8gRmlsZVN5c3RlbQogIC8vLyB0byBsb2NhdGUgdGhlIGNvcnJlc3BvbmRpbmcgZmlsZS4KICAvLy8KICAvLy8gW29yaWdpbl0gaXMgbm9uLW51bGwgaWYgdGhlIGNyZWF0ZWQgbGlicmFyeSBpcyBhIHBhdGNoIHRvIFtvcmlnaW5dLgogIExpYnJhcnlCdWlsZGVyIGNyZWF0ZUxpYnJhcnlCdWlsZGVyKAogICAgICBVcmkgdXJpLCBVcmkgZmlsZVVyaSwgY292YXJpYW50IExpYnJhcnlCdWlsZGVyIG9yaWdpbik7CgogIC8vLyBUaGUgY2xhc3MgW2Nsc10gaXMgaW52b2x2ZWQgaW4gYSBjeWNsaWMgZGVmaW5pdGlvbi4gVGhpcyBtZXRob2Qgc2hvdWxkCiAgLy8vIGVuc3VyZSB0aGF0IHRoZSBjeWNsZSBpcyBicm9rZW4sIGZvciBleGFtcGxlLCBieSByZW1vdmluZyBzdXBlcmNsYXNzIGFuZAogIC8vLyBpbXBsZW1lbnRlZCBpbnRlcmZhY2VzLgogIHZvaWQgYnJlYWtDeWNsZShDbGFzc0J1aWxkZXIgY2xzKTsKCiAgVXJpIHRyYW5zbGF0ZVVyaShVcmkgdXJpKSA9PiB1cmlUcmFuc2xhdG9yLnRyYW5zbGF0ZSh1cmkpOwoKICAvLy8gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgY29uc3RydWN0b3Igb2YKICAvLy8gW0Fic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3JdIGVycm9yLiAgVGhlIGNvbnN0cnVjdG9yIGlzIGV4cGVjdGVkIHRvCiAgLy8vIGFjY2VwdCBhIHNpbmdsZSBhcmd1bWVudCBvZiB0eXBlIFN0cmluZywgd2hpY2ggaXMgdGhlIG5hbWUgb2YgdGhlCiAgLy8vIGFic3RyYWN0IGNsYXNzLgogIERlY2xhcmF0aW9uIGdldEFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3IoTG9hZGVyIGxvYWRlcikgewogICAgaWYgKGNhY2hlZEFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3IgIT0gbnVsbCkgewogICAgICByZXR1cm4gY2FjaGVkQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcjsKICAgIH0KICAgIHJldHVybiBjYWNoZWRBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yID0KICAgICAgICBsb2FkZXIuY29yZUxpYnJhcnkuZ2V0Q29uc3RydWN0b3IoIkFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3IiKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgcmVmZXJlbmNlIHRvIHRoZSBjb25zdHJ1Y3RvciB1c2VkIGZvciBjcmVhdGluZyBhIGNvbXBpbGUtdGltZQogIC8vLyBlcnJvci4gVGhlIGNvbnN0cnVjdG9yIGlzIGV4cGVjdGVkIHRvIGFjY2VwdCBhIHNpbmdsZSBhcmd1bWVudCBvZiB0eXBlCiAgLy8vIFN0cmluZywgd2hpY2ggaXMgdGhlIGNvbXBpbGUtdGltZSBlcnJvciBtZXNzYWdlLgogIERlY2xhcmF0aW9uIGdldENvbXBpbGVUaW1lRXJyb3IoTG9hZGVyIGxvYWRlcikgewogICAgaWYgKGNhY2hlZENvbXBpbGVUaW1lRXJyb3IgIT0gbnVsbCkgcmV0dXJuIGNhY2hlZENvbXBpbGVUaW1lRXJyb3I7CiAgICByZXR1cm4gY2FjaGVkQ29tcGlsZVRpbWVFcnJvciA9IGxvYWRlci5jb3JlTGlicmFyeQogICAgICAgIC5nZXRDb25zdHJ1Y3RvcigiX0NvbXBpbGVUaW1lRXJyb3IiLCBieXBhc3NMaWJyYXJ5UHJpdmFjeTogdHJ1ZSk7CiAgfQoKICAvLy8gUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgY29uc3RydWN0b3IgdXNlZCBmb3IgY3JlYXRpbmcgYSBydW50aW1lIGVycm9yCiAgLy8vIHdoZW4gYSBmaW5hbCBmaWVsZCBpcyBpbml0aWFsaXplZCB0d2ljZS4gVGhlIGNvbnN0cnVjdG9yIGlzIGV4cGVjdGVkIHRvCiAgLy8vIGFjY2VwdCBhIHNpbmdsZSBhcmd1bWVudCB3aGljaCBpcyB0aGUgbmFtZSBvZiB0aGUgZmllbGQuCiAgRGVjbGFyYXRpb24gZ2V0RHVwbGljYXRlZEZpZWxkSW5pdGlhbGl6ZXJFcnJvcihMb2FkZXIgbG9hZGVyKSB7CiAgICBpZiAoY2FjaGVkRHVwbGljYXRlZEZpZWxkSW5pdGlhbGl6ZXJFcnJvciAhPSBudWxsKSB7CiAgICAgIHJldHVybiBjYWNoZWREdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yOwogICAgfQogICAgcmV0dXJuIGNhY2hlZER1cGxpY2F0ZWRGaWVsZEluaXRpYWxpemVyRXJyb3IgPSBsb2FkZXIuY29yZUxpYnJhcnkKICAgICAgICAuZ2V0Q29uc3RydWN0b3IoIl9EdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yIiwKICAgICAgICAgICAgYnlwYXNzTGlicmFyeVByaXZhY3k6IHRydWUpOwogIH0KCiAgLy8vIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnN0cnVjdG9yIHVzZWQgZm9yIGNyZWF0aW5nIGBuYXRpdmVgCiAgLy8vIGFubm90YXRpb25zLiBUaGUgY29uc3RydWN0b3IgaXMgZXhwZWN0ZWQgdG8gYWNjZXB0IGEgc2luZ2xlIGFyZ3VtZW50IG9mCiAgLy8vIHR5cGUgU3RyaW5nLCB3aGljaCBpcyB0aGUgbmFtZSBvZiB0aGUgbmF0aXZlIG1ldGhvZC4KICBEZWNsYXJhdGlvbiBnZXROYXRpdmVBbm5vdGF0aW9uKExvYWRlciBsb2FkZXIpIHsKICAgIGlmIChjYWNoZWROYXRpdmVBbm5vdGF0aW9uICE9IG51bGwpIHJldHVybiBjYWNoZWROYXRpdmVBbm5vdGF0aW9uOwogICAgTGlicmFyeUJ1aWxkZXIgaW50ZXJuYWwgPSBsb2FkZXIucmVhZChVcmkucGFyc2UoImRhcnQ6X2ludGVybmFsIiksIC0xLAogICAgICAgIGFjY2Vzc29yOiBsb2FkZXIuY29yZUxpYnJhcnkpOwogICAgcmV0dXJuIGNhY2hlZE5hdGl2ZUFubm90YXRpb24gPSBpbnRlcm5hbC5nZXRDb25zdHJ1Y3RvcigiRXh0ZXJuYWxOYW1lIik7CiAgfQoKICB2b2lkIGxvYWRFeHRyYVJlcXVpcmVkTGlicmFyaWVzKExvYWRlciBsb2FkZXIpIHsKICAgIGZvciAoU3RyaW5nIHVyaSBpbiBiYWNrZW5kVGFyZ2V0LmV4dHJhUmVxdWlyZWRMaWJyYXJpZXMpIHsKICAgICAgbG9hZGVyLnJlYWQoVXJpLnBhcnNlKHVyaSksIDAsIGFjY2Vzc29yOiBsb2FkZXIuY29yZUxpYnJhcnkpOwogICAgfQogIH0KCiAgdm9pZCBhZGRTb3VyY2VJbmZvcm1hdGlvbigKICAgICAgVXJpIGltcG9ydFVyaSwgVXJpIGZpbGVVcmksIExpc3Q8aW50PiBsaW5lU3RhcnRzLCBMaXN0PGludD4gc291cmNlQ29kZSk7CgogIHZvaWQgcmVhZFBhdGNoRmlsZXMoY292YXJpYW50IExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHt9CgogIEZvcm1hdHRlZE1lc3NhZ2UgY3JlYXRlRm9ybWF0dGVkTWVzc2FnZSgKICAgICAgTWVzc2FnZSBtZXNzYWdlLAogICAgICBpbnQgY2hhck9mZnNldCwKICAgICAgaW50IGxlbmd0aCwKICAgICAgVXJpIGZpbGVVcmksCiAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IG1lc3NhZ2VDb250ZXh0LAogICAgICBTZXZlcml0eSBzZXZlcml0eSkgewogICAgUHJvY2Vzc2VkT3B0aW9ucyBwcm9jZXNzZWRPcHRpb25zID0gY29udGV4dC5vcHRpb25zOwogICAgcmV0dXJuIHByb2Nlc3NlZE9wdGlvbnMuZm9ybWF0KAogICAgICAgIG1lc3NhZ2Uud2l0aExvY2F0aW9uKGZpbGVVcmksIGNoYXJPZmZzZXQsIGxlbmd0aCksCiAgICAgICAgc2V2ZXJpdHksCiAgICAgICAgbWVzc2FnZUNvbnRleHQpOwogIH0KCiAgU2V2ZXJpdHkgZml4U2V2ZXJpdHkoU2V2ZXJpdHkgc2V2ZXJpdHksIE1lc3NhZ2UgbWVzc2FnZSwgVXJpIGZpbGVVcmkpIHsKICAgIHNldmVyaXR5ID8/PSBtZXNzYWdlLmNvZGUuc2V2ZXJpdHk7CiAgICBpZiAoc2V2ZXJpdHkgPT0gU2V2ZXJpdHkuZXJyb3JMZWdhY3lXYXJuaW5nKSB7CiAgICAgIHNldmVyaXR5ID0gYmFja2VuZFRhcmdldC5sZWdhY3lNb2RlID8gU2V2ZXJpdHkud2FybmluZyA6IFNldmVyaXR5LmVycm9yOwogICAgfQogICAgcmV0dXJuIHJld3JpdGVTZXZlcml0eShzZXZlcml0eSwgbWVzc2FnZS5jb2RlLCBmaWxlVXJpKTsKICB9Cn0KgKcATk48ASUBLgFEAT8BTgE1ASIBRwE1ASYBIgEiATEBSQFHNSUBJgE7ASVMATUmNSYmLwEhJR8aIBoBTkNHR0tBRTxAQkY8QBcBTg8GTygGSic+AU1PHiUBPQEwT0gWQjk0BjNOBAFOTTczRzdKBAFPTj9COTQGRjwpBAFITjszR0snTQQBMz9EBgQBHU8BOwErFxYSEysbOSQ7EhkEAUooM08GPQQCATZwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdGFyZ2V0X2ltcGxlbWVudGF0aW9uLmRhcnRDc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2RpbGwvZGlsbF9saWJyYXJ5X2J1aWxkZXIuZGFydKVFLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZGlsbF9saWJyYXJ5X2J1aWxkZXI7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyBqc29uRGVjb2RlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzcywKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGaWVsZCwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgTGlicmFyeSwKICAgICAgICBMaXN0TGl0ZXJhbCwKICAgICAgICBNZW1iZXIsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFN0YXRpY0dldCwKICAgICAgICBTdHJpbmdMaXRlcmFsLAogICAgICAgIFR5cGVkZWY7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgTWVzc2FnZSwKICAgICAgICBub0xlbmd0aCwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbiwKICAgICAgICB0ZW1wbGF0ZVR5cGVOb3RGb3VuZCwKICAgICAgICB0ZW1wbGF0ZVVuc3BlY2lmaWVkOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IGludGVybmFsUHJvYmxlbSwgdW5oYW5kbGVkLCB1bmltcGxlbWVudGVkOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBEZWNsYXJhdGlvbiwKICAgICAgICBEeW5hbWljVHlwZUJ1aWxkZXIsCiAgICAgICAgSW52YWxpZFR5cGVCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIFNjb3BlOwoKaW1wb3J0ICcuLi9rZXJuZWwvcmVkaXJlY3RpbmdfZmFjdG9yeV9ib2R5LmRhcnQnIHNob3cgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keTsKCmltcG9ydCAnZGlsbF9jbGFzc19idWlsZGVyLmRhcnQnIHNob3cgRGlsbENsYXNzQnVpbGRlcjsKCmltcG9ydCAnZGlsbF9tZW1iZXJfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxNZW1iZXJCdWlsZGVyOwoKaW1wb3J0ICdkaWxsX2xvYWRlci5kYXJ0JyBzaG93IERpbGxMb2FkZXI7CgppbXBvcnQgJ2RpbGxfdHlwZV9hbGlhc19idWlsZGVyLmRhcnQnIHNob3cgRGlsbFR5cGVBbGlhc0J1aWxkZXI7CgpjbGFzcyBMYXp5TGlicmFyeVNjb3BlIGV4dGVuZHMgU2NvcGUgewogIERpbGxMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5QnVpbGRlcjsKCiAgTGF6eUxpYnJhcnlTY29wZShNYXA8U3RyaW5nLCBEZWNsYXJhdGlvbj4gbG9jYWwsCiAgICAgIE1hcDxTdHJpbmcsIERlY2xhcmF0aW9uPiBzZXR0ZXJzLCBTY29wZSBwYXJlbnQsIFN0cmluZyBkZWJ1Z05hbWUsCiAgICAgIHtib29sIGlzTW9kaWZpYWJsZTogdHJ1ZX0pCiAgICAgIDogc3VwZXIobG9jYWwsIHNldHRlcnMsIHBhcmVudCwgZGVidWdOYW1lLCBpc01vZGlmaWFibGU6IGlzTW9kaWZpYWJsZSk7CgogIExhenlMaWJyYXJ5U2NvcGUudG9wKHtib29sIGlzTW9kaWZpYWJsZTogZmFsc2V9KQogICAgICA6IHRoaXMoPFN0cmluZywgRGVjbGFyYXRpb24+e30sIDxTdHJpbmcsIERlY2xhcmF0aW9uPnt9LCBudWxsLCAidG9wIiwKICAgICAgICAgICAgaXNNb2RpZmlhYmxlOiBpc01vZGlmaWFibGUpOwoKICBNYXA8U3RyaW5nLCBEZWNsYXJhdGlvbj4gZ2V0IGxvY2FsIHsKICAgIGlmIChsaWJyYXJ5QnVpbGRlciA9PSBudWxsKSB0aHJvdyBuZXcgU3RhdGVFcnJvcigiTm8gbGlicmFyeSBidWlsZGVyLiIpOwogICAgbGlicmFyeUJ1aWxkZXIuZW5zdXJlTG9hZGVkKCk7CiAgICByZXR1cm4gc3VwZXIubG9jYWw7CiAgfQoKICBNYXA8U3RyaW5nLCBEZWNsYXJhdGlvbj4gZ2V0IHNldHRlcnMgewogICAgaWYgKGxpYnJhcnlCdWlsZGVyID09IG51bGwpIHRocm93IG5ldyBTdGF0ZUVycm9yKCJObyBsaWJyYXJ5IGJ1aWxkZXIuIik7CiAgICBsaWJyYXJ5QnVpbGRlci5lbnN1cmVMb2FkZWQoKTsKICAgIHJldHVybiBzdXBlci5zZXR0ZXJzOwogIH0KfQoKY2xhc3MgRGlsbExpYnJhcnlCdWlsZGVyIGV4dGVuZHMgTGlicmFyeUJ1aWxkZXIgewogIGZpbmFsIExpYnJhcnkgbGlicmFyeTsKCiAgRGlsbExvYWRlciBsb2FkZXI7CgogIC8vLyBFeHBvcnRzIHRoYXQgY2FuJ3QgYmUgc2VyaWFsaXplZC4KICAvLy8KICAvLy8gVGhlIGVsZW1lbnRzIG9mIHRoaXMgbWFwIGFyZSBkb2N1bWVudGVkIGluCiAgLy8vIFsuLi9rZXJuZWwva2VybmVsX2xpYnJhcnlfYnVpbGRlci5kYXJ0XS4KICBNYXA8U3RyaW5nLCBTdHJpbmc+IHVuc2VyaWFsaXphYmxlRXhwb3J0czsKCiAgYm9vbCBleHBvcnRzQWxyZWFkeUZpbmFsaXplZCA9IGZhbHNlOwoKICAvLyBUT0RPKGplbnNqKTogVGhlc2UgNCBib29sZWFucyBjb3VsZCBwb3RlbnRpYWxseSBiZSBtZXJnZWQgaW50byBhIHNpbmdsZQogIC8vIHN0YXRlIGZpZWxkLgogIGJvb2wgaXNSZWFkeVRvQnVpbGQgPSBmYWxzZTsKICBib29sIGlzUmVhZHlUb0ZpbmFsaXplRXhwb3J0cyA9IGZhbHNlOwogIGJvb2wgaXNCdWlsdCA9IGZhbHNlOwogIGJvb2wgaXNCdWlsdEFuZE1hcmtlZCA9IGZhbHNlOwoKICBEaWxsTGlicmFyeUJ1aWxkZXIodGhpcy5saWJyYXJ5LCB0aGlzLmxvYWRlcikKICAgICAgOiBzdXBlcihsaWJyYXJ5LmZpbGVVcmksIG5ldyBMYXp5TGlicmFyeVNjb3BlLnRvcCgpLAogICAgICAgICAgICBuZXcgTGF6eUxpYnJhcnlTY29wZS50b3AoKSkgewogICAgTGF6eUxpYnJhcnlTY29wZSBsYXp5U2NvcGUgPSBzY29wZTsKICAgIGxhenlTY29wZS5saWJyYXJ5QnVpbGRlciA9IHRoaXM7CiAgICBMYXp5TGlicmFyeVNjb3BlIGxhenlFeHBvcnRTY29wZSA9IGV4cG9ydFNjb3BlOwogICAgbGF6eUV4cG9ydFNjb3BlLmxpYnJhcnlCdWlsZGVyID0gdGhpczsKICB9CgogIHZvaWQgZW5zdXJlTG9hZGVkKCkgewogICAgaWYgKCFpc1JlYWR5VG9CdWlsZCkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIk5vdCByZWFkeSB0byBidWlsZC4iKTsKICAgIGlzQnVpbHRBbmRNYXJrZWQgPSB0cnVlOwogICAgaWYgKGlzQnVpbHQpIHJldHVybjsKICAgIGlzQnVpbHQgPSB0cnVlOwogICAgbGlicmFyeS5jbGFzc2VzLmZvckVhY2goYWRkQ2xhc3MpOwogICAgbGlicmFyeS5wcm9jZWR1cmVzLmZvckVhY2goYWRkTWVtYmVyKTsKICAgIGxpYnJhcnkudHlwZWRlZnMuZm9yRWFjaChhZGRUeXBlZGVmKTsKICAgIGxpYnJhcnkuZmllbGRzLmZvckVhY2goYWRkTWVtYmVyKTsKCiAgICBpZiAoaXNSZWFkeVRvRmluYWxpemVFeHBvcnRzKSB7CiAgICAgIGZpbmFsaXplRXhwb3J0cygpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIk5vdCByZWFkeSB0byBmaW5hbGl6ZSBleHBvcnRzLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTeW50aGV0aWMgPT4gbGlicmFyeS5pc1N5bnRoZXRpYzsKCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRMYW5ndWFnZVZlcnNpb24oaW50IG1ham9yLCBpbnQgbWlub3IsIHtib29sIGV4cGxpY2l0fSkge30KCiAgVXJpIGdldCB1cmkgPT4gbGlicmFyeS5pbXBvcnRVcmk7CgogIFVyaSBnZXQgZmlsZVVyaSA9PiBsaWJyYXJ5LmZpbGVVcmk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiBsaWJyYXJ5Lm5hbWU7CgogIEBvdmVycmlkZQogIExpYnJhcnkgZ2V0IHRhcmdldCA9PiBsaWJyYXJ5OwoKICB2b2lkIGFkZFN5bnRoZXRpY0RlY2xhcmF0aW9uT2ZEeW5hbWljKCkgewogICAgYWRkQnVpbGRlcigKICAgICAgICAiZHluYW1pYyIsIG5ldyBEeW5hbWljVHlwZUJ1aWxkZXIoY29uc3QgRHluYW1pY1R5cGUoKSwgdGhpcywgLTEpLCAtMSk7CiAgfQoKICB2b2lkIGFkZENsYXNzKENsYXNzIGNscykgewogICAgRGlsbENsYXNzQnVpbGRlciBjbGFzc0J1bGRlciA9IG5ldyBEaWxsQ2xhc3NCdWlsZGVyKGNscywgdGhpcyk7CiAgICBhZGRCdWlsZGVyKGNscy5uYW1lLCBjbGFzc0J1bGRlciwgY2xzLmZpbGVPZmZzZXQpOwogICAgY2xzLnByb2NlZHVyZXMuZm9yRWFjaChjbGFzc0J1bGRlci5hZGRNZW1iZXIpOwogICAgY2xzLmNvbnN0cnVjdG9ycy5mb3JFYWNoKGNsYXNzQnVsZGVyLmFkZE1lbWJlcik7CiAgICBmb3IgKEZpZWxkIGZpZWxkIGluIGNscy5maWVsZHMpIHsKICAgICAgaWYgKGZpZWxkLm5hbWUubmFtZSA9PSAiX3JlZGlyZWN0aW5nIyIpIHsKICAgICAgICBMaXN0TGl0ZXJhbCBpbml0aWFsaXplciA9IGZpZWxkLmluaXRpYWxpemVyOwogICAgICAgIGZvciAoU3RhdGljR2V0IGdldCBpbiBpbml0aWFsaXplci5leHByZXNzaW9ucykgewogICAgICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keS5yZXN0b3JlRnJvbURpbGwoZ2V0LnRhcmdldCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNsYXNzQnVsZGVyLmFkZE1lbWJlcihmaWVsZCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgYWRkTWVtYmVyKE1lbWJlciBtZW1iZXIpIHsKICAgIFN0cmluZyBuYW1lID0gbWVtYmVyLm5hbWUubmFtZTsKICAgIGlmIChuYW1lID09ICJfZXhwb3J0cyMiKSB7CiAgICAgIEZpZWxkIGZpZWxkID0gbWVtYmVyOwogICAgICBTdHJpbmdMaXRlcmFsIHN0cmluZyA9IGZpZWxkLmluaXRpYWxpemVyOwogICAgICB2YXIganNvbiA9IGpzb25EZWNvZGUoc3RyaW5nLnZhbHVlKTsKICAgICAgdW5zZXJpYWxpemFibGVFeHBvcnRzID0KICAgICAgICAgIGpzb24gIT0gbnVsbCA/IG5ldyBNYXA8U3RyaW5nLCBTdHJpbmc+LmZyb20oanNvbikgOiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgYWRkQnVpbGRlcihuYW1lLCBuZXcgRGlsbE1lbWJlckJ1aWxkZXIobWVtYmVyLCB0aGlzKSwgbWVtYmVyLmZpbGVPZmZzZXQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgRGVjbGFyYXRpb24gYWRkQnVpbGRlcihTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24sIGludCBjaGFyT2Zmc2V0KSB7CiAgICBpZiAobmFtZSA9PSBudWxsIHx8IG5hbWUuaXNFbXB0eSkgcmV0dXJuIG51bGw7CiAgICBib29sIGlzU2V0dGVyID0gZGVjbGFyYXRpb24uaXNTZXR0ZXI7CiAgICBpZiAoaXNTZXR0ZXIpIHsKICAgICAgc2NvcGVCdWlsZGVyLmFkZFNldHRlcihuYW1lLCBkZWNsYXJhdGlvbik7CiAgICB9IGVsc2UgewogICAgICBzY29wZUJ1aWxkZXIuYWRkTWVtYmVyKG5hbWUsIGRlY2xhcmF0aW9uKTsKICAgIH0KICAgIGlmICghbmFtZS5zdGFydHNXaXRoKCJfIikpIHsKICAgICAgaWYgKGlzU2V0dGVyKSB7CiAgICAgICAgZXhwb3J0U2NvcGVCdWlsZGVyLmFkZFNldHRlcihuYW1lLCBkZWNsYXJhdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZXhwb3J0U2NvcGVCdWlsZGVyLmFkZE1lbWJlcihuYW1lLCBkZWNsYXJhdGlvbik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICB9CgogIHZvaWQgYWRkVHlwZWRlZihUeXBlZGVmIHR5cGVkZWYpIHsKICAgIERhcnRUeXBlIHR5cGUgPSB0eXBlZGVmLnR5cGU7CiAgICBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGUgJiYgdHlwZS50eXBlZGVmVHlwZSA9PSBudWxsKSB7CiAgICAgIHVuaGFuZGxlZCgibnVsbCIsICJhZGRUeXBlZGVmIiwgdHlwZWRlZi5maWxlT2Zmc2V0LCB0eXBlZGVmLmZpbGVVcmkpOwogICAgfQogICAgYWRkQnVpbGRlcih0eXBlZGVmLm5hbWUsIG5ldyBEaWxsVHlwZUFsaWFzQnVpbGRlcih0eXBlZGVmLCB0aGlzKSwKICAgICAgICB0eXBlZGVmLmZpbGVPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRUb1Njb3BlKAogICAgICBTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gbWVtYmVyLCBpbnQgY2hhck9mZnNldCwgYm9vbCBpc0ltcG9ydCkgewogICAgdW5pbXBsZW1lbnRlZCgiYWRkVG9TY29wZSIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGVjbGFyYXRpb24gY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uKAogICAgICBTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gYnVpbGRlciwgRGVjbGFyYXRpb24gb3RoZXIsIGludCBjaGFyT2Zmc2V0LAogICAgICB7Ym9vbCBpc0V4cG9ydDogZmFsc2UsIGJvb2wgaXNJbXBvcnQ6IGZhbHNlfSkgewogICAgaWYgKGJ1aWxkZXIgPT0gb3RoZXIpIHJldHVybiBidWlsZGVyOwogICAgaWYgKGJ1aWxkZXIgaXMgSW52YWxpZFR5cGVCdWlsZGVyKSByZXR1cm4gYnVpbGRlcjsKICAgIGlmIChvdGhlciBpcyBJbnZhbGlkVHlwZUJ1aWxkZXIpIHJldHVybiBvdGhlcjsKICAgIC8vIEZvciBlYWNoIGVudHJ5IG1hcHBpbmcga2V5IGBrYCB0byBkZWNsYXJhdGlvbiBgZGAgaW4gYE5TYCBhbiBlbnRyeQogICAgLy8gbWFwcGluZyBga2AgdG8gYGRgIGlzIGFkZGVkIHRvIHRoZSBleHBvcnRlZCBuYW1lc3BhY2Ugb2YgYExgIHVubGVzcyBhCiAgICAvLyB0b3AtbGV2ZWwgZGVjbGFyYXRpb24gd2l0aCB0aGUgbmFtZSBga2AgZXhpc3RzIGluIGBMYC4KICAgIGlmIChidWlsZGVyLnBhcmVudCA9PSB0aGlzKSByZXR1cm4gYnVpbGRlcjsKICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLndpdGhBcmd1bWVudHMobmFtZSk7CiAgICBhZGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoLCBmaWxlVXJpKTsKICAgIHJldHVybiBuZXcgSW52YWxpZFR5cGVCdWlsZGVyKAogICAgICAgIG5hbWUsIG1lc3NhZ2Uud2l0aExvY2F0aW9uKGZpbGVVcmksIGNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzIHsKICAgIHJldHVybiBsaWJyYXJ5Lm5hbWUgPz8gIjxsaWJyYXJ5ICcke2xpYnJhcnkuZmlsZVVyaX0nPiI7CiAgfQoKICB2b2lkIG1hcmtBc1JlYWR5VG9CdWlsZCgpIHsKICAgIGlzUmVhZHlUb0J1aWxkID0gdHJ1ZTsKICB9CgogIHZvaWQgbWFya0FzUmVhZHlUb0ZpbmFsaXplRXhwb3J0cygpIHsKICAgIGlzUmVhZHlUb0ZpbmFsaXplRXhwb3J0cyA9IHRydWU7CiAgfQoKICB2b2lkIGZpbmFsaXplRXhwb3J0cygpIHsKICAgIGlmIChleHBvcnRzQWxyZWFkeUZpbmFsaXplZCkgcmV0dXJuOwogICAgZXhwb3J0c0FscmVhZHlGaW5hbGl6ZWQgPSB0cnVlOwogICAgdW5zZXJpYWxpemFibGVFeHBvcnRzPy5mb3JFYWNoKChTdHJpbmcgbmFtZSwgU3RyaW5nIG1lc3NhZ2VUZXh0KSB7CiAgICAgIERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwogICAgICBzd2l0Y2ggKG5hbWUpIHsKICAgICAgICBjYXNlICJkeW5hbWljIjoKICAgICAgICBjYXNlICJ2b2lkIjoKICAgICAgICAgIC8vIFRPRE8oYWhlKTogSXQncyBsaWtlbHkgdGhhdCB3ZSBzaG91bGRuJ3QgYmUgZXhwb3J0aW5nIHRoZXNlIHR5cGVzCiAgICAgICAgICAvLyBmcm9tIGRhcnQ6Y29yZSwgYW5kIHRoaXMgY2FzZSBjYW4gYmUgcmVtb3ZlZC4KICAgICAgICAgIGRlY2xhcmF0aW9uID0gbG9hZGVyLmNvcmVMaWJyYXJ5LmV4cG9ydFNjb3BlQnVpbGRlcltuYW1lXTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gbWVzc2FnZVRleHQgPT0gbnVsbAogICAgICAgICAgICAgID8gdGVtcGxhdGVUeXBlTm90Rm91bmQud2l0aEFyZ3VtZW50cyhuYW1lKQogICAgICAgICAgICAgIDogdGVtcGxhdGVVbnNwZWNpZmllZC53aXRoQXJndW1lbnRzKG1lc3NhZ2VUZXh0KTsKICAgICAgICAgIGFkZFByb2JsZW0obWVzc2FnZSwgLTEsIG5vTGVuZ3RoLCBudWxsKTsKICAgICAgICAgIGRlY2xhcmF0aW9uID0gbmV3IEludmFsaWRUeXBlQnVpbGRlcihuYW1lLCBtZXNzYWdlLndpdGhvdXRMb2NhdGlvbigpKTsKICAgICAgfQogICAgICBleHBvcnRTY29wZUJ1aWxkZXIuYWRkTWVtYmVyKG5hbWUsIGRlY2xhcmF0aW9uKTsKICAgIH0pOwoKICAgIGZvciAodmFyIHJlZmVyZW5jZSBpbiBsaWJyYXJ5LmFkZGl0aW9uYWxFeHBvcnRzKSB7CiAgICAgIHZhciBub2RlID0gcmVmZXJlbmNlLm5vZGU7CiAgICAgIFVyaSBsaWJyYXJ5VXJpOwogICAgICBTdHJpbmcgbmFtZTsKICAgICAgYm9vbCBpc1NldHRlciA9IGZhbHNlOwogICAgICBpZiAobm9kZSBpcyBDbGFzcykgewogICAgICAgIGxpYnJhcnlVcmkgPSBub2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpOwogICAgICAgIG5hbWUgPSBub2RlLm5hbWU7CiAgICAgIH0gZWxzZSBpZiAobm9kZSBpcyBQcm9jZWR1cmUpIHsKICAgICAgICBsaWJyYXJ5VXJpID0gbm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaTsKICAgICAgICBuYW1lID0gbm9kZS5uYW1lLm5hbWU7CiAgICAgICAgaXNTZXR0ZXIgPSBub2RlLmlzU2V0dGVyOwogICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgTWVtYmVyKSB7CiAgICAgICAgbGlicmFyeVVyaSA9IG5vZGUuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmk7CiAgICAgICAgbmFtZSA9IG5vZGUubmFtZS5uYW1lOwogICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgVHlwZWRlZikgewogICAgICAgIGxpYnJhcnlVcmkgPSBub2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpOwogICAgICAgIG5hbWUgPSBub2RlLm5hbWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdW5oYW5kbGVkKCIke25vZGUucnVudGltZVR5cGV9IiwgImZpbmFsaXplRXhwb3J0cyIsIC0xLCBmaWxlVXJpKTsKICAgICAgfQogICAgICBEaWxsTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGxvYWRlci5idWlsZGVyc1tsaWJyYXJ5VXJpXTsKICAgICAgaWYgKGxpYnJhcnkgPT0gbnVsbCkgewogICAgICAgIGludGVybmFsUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVVbnNwZWNpZmllZC53aXRoQXJndW1lbnRzKCJObyBidWlsZGVyIGZvciAnJGxpYnJhcnlVcmknLiIpLAogICAgICAgICAgICAtMSwKICAgICAgICAgICAgZmlsZVVyaSk7CiAgICAgIH0KICAgICAgRGVjbGFyYXRpb24gZGVjbGFyYXRpb247CiAgICAgIGlmIChpc1NldHRlcikgewogICAgICAgIGRlY2xhcmF0aW9uID0gbGlicmFyeS5leHBvcnRTY29wZS5zZXR0ZXJzW25hbWVdOwogICAgICAgIGV4cG9ydFNjb3BlQnVpbGRlci5hZGRTZXR0ZXIobmFtZSwgZGVjbGFyYXRpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIGRlY2xhcmF0aW9uID0gbGlicmFyeS5leHBvcnRTY29wZS5sb2NhbFtuYW1lXTsKICAgICAgICBleHBvcnRTY29wZUJ1aWxkZXIuYWRkTWVtYmVyKG5hbWUsIGRlY2xhcmF0aW9uKTsKICAgICAgfQogICAgICBpZiAoZGVjbGFyYXRpb24gPT0gbnVsbCkgewogICAgICAgIGludGVybmFsUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVVbnNwZWNpZmllZC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgIkV4cG9ydGVkIGVsZW1lbnQgJyRuYW1lJyBub3QgZm91bmQgaW4gJyRsaWJyYXJ5VXJpJy4iKSwKICAgICAgICAgICAgLTEsCiAgICAgICAgICAgIGZpbGVVcmkpOwogICAgICB9CiAgICAgIGFzc2VydChub2RlID09IGRlY2xhcmF0aW9uLnRhcmdldCk7CiAgICB9CiAgfQp9CoE1AE5OPAEkAScBIQkPEhUPFhEVEBMTFxEBHQkREiceHQFKAScJFRwcGA8BTgE4AToBKwFBASclATNIIU4BM0wpASdNIxgEASlNIxoEAgEyGQEVASgGMS8tASgBTRIfKRghATA7KiglNCsEARhGHRkUJysqJwEkGQ0+BgQBDC8BDEQBJAEmAQwjAQwhASwQTwQBHUQ3MzUmMDU5PgoPJggGBAEiJB8cMCseRA1QBgQBDFEzKhQxDTEGIRY5DzkIBhgEASUiPEwGRh0EAQwTSDYEAQwrSzYqNzNKTT4wSTsjRwQBDCE9BAEeGwQBKCUEARspJEcfFhgVTztFEQERMDlAM1EINwgBNyEWEx0bNhomNh8iIzYfJDYaD0oIQB0ZUBAWCB8WOTkPNzkIIRkvSRAWCCoGBAIBOnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9kaWxsL2RpbGxfbGlicmFyeV9idWlsZGVyLmRhcnQ6c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2RpbGwvZGlsbF9sb2FkZXIuZGFydItqLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZGlsbF9sb2FkZXI7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBDbGFzcywgQ29tcG9uZW50LCBEYXJ0VHlwZSwgTGlicmFyeTsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cgU3VtbWFyeVRlbXBsYXRlLCBUZW1wbGF0ZSwgdGVtcGxhdGVEaWxsT3V0bGluZVN1bW1hcnk7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdyBDbGFzc0J1aWxkZXIsIFR5cGVCdWlsZGVyLCBMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL3R5cGVfYnVpbGRlcl9jb21wdXRlci5kYXJ0JyBzaG93IFR5cGVCdWlsZGVyQ29tcHV0ZXI7CgppbXBvcnQgJy4uL2xvYWRlci5kYXJ0JyBzaG93IExvYWRlcjsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bmhhbmRsZWQ7CgppbXBvcnQgJy4uL3RhcmdldF9pbXBsZW1lbnRhdGlvbi5kYXJ0JyBzaG93IFRhcmdldEltcGxlbWVudGF0aW9uOwoKaW1wb3J0ICdkaWxsX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnZGlsbF90YXJnZXQuZGFydCcgc2hvdyBEaWxsVGFyZ2V0OwoKY2xhc3MgRGlsbExvYWRlciBleHRlbmRzIExvYWRlciB7CiAgRGlsbExvYWRlcihUYXJnZXRJbXBsZW1lbnRhdGlvbiB0YXJnZXQpIDogc3VwZXIodGFyZ2V0KTsKCiAgVGVtcGxhdGU8U3VtbWFyeVRlbXBsYXRlPiBnZXQgb3V0bGluZVN1bW1hcnlUZW1wbGF0ZSA9PgogICAgICB0ZW1wbGF0ZURpbGxPdXRsaW5lU3VtbWFyeTsKCiAgLy8vIEFwcGVuZCBjb21waWxlZCBsaWJyYXJpZXMgZnJvbSB0aGUgZ2l2ZW4gW2NvbXBvbmVudF0uIElmIHRoZSBbZmlsdGVyXSBpcwogIC8vLyBwcm92aWRlZCwgYXBwZW5kIG9ubHkgbGlicmFyaWVzIHdob3NlIFtVcmldIGlzIGFjY2VwdGVkIGJ5IHRoZSBbZmlsdGVyXS4KICBMaXN0PERpbGxMaWJyYXJ5QnVpbGRlcj4gYXBwZW5kTGlicmFyaWVzKENvbXBvbmVudCBjb21wb25lbnQsCiAgICAgIHtib29sIGZpbHRlcihVcmkgdXJpKSwgaW50IGJ5dGVDb3VudDogMH0pIHsKICAgIExpc3Q8TGlicmFyeT4gY29tcG9uZW50TGlicmFyaWVzID0gY29tcG9uZW50LmxpYnJhcmllczsKICAgIExpc3Q8VXJpPiByZXF1ZXN0ZWRMaWJyYXJpZXMgPSA8VXJpPltdOwogICAgRGlsbFRhcmdldCB0YXJnZXQgPSB0aGlzLnRhcmdldDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcG9uZW50TGlicmFyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIExpYnJhcnkgbGlicmFyeSA9IGNvbXBvbmVudExpYnJhcmllc1tpXTsKICAgICAgVXJpIHVyaSA9IGxpYnJhcnkuaW1wb3J0VXJpOwogICAgICBpZiAoZmlsdGVyID09IG51bGwgfHwgZmlsdGVyKGxpYnJhcnkuaW1wb3J0VXJpKSkgewogICAgICAgIGxpYnJhcmllcy5hZGQobGlicmFyeSk7CiAgICAgICAgdGFyZ2V0LmFkZExpYnJhcnkobGlicmFyeSk7CiAgICAgICAgcmVxdWVzdGVkTGlicmFyaWVzLmFkZCh1cmkpOwogICAgICB9CiAgICB9CiAgICBMaXN0PERpbGxMaWJyYXJ5QnVpbGRlcj4gcmVzdWx0ID0gPERpbGxMaWJyYXJ5QnVpbGRlcj5bXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVxdWVzdGVkTGlicmFyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdC5hZGQocmVhZChyZXF1ZXN0ZWRMaWJyYXJpZXNbaV0sIC0xKSk7CiAgICB9CiAgICB0YXJnZXQudXJpVG9Tb3VyY2UuYWRkQWxsKGNvbXBvbmVudC51cmlUb1NvdXJjZSk7CiAgICB0aGlzLmJ5dGVDb3VudCArPSBieXRlQ291bnQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRnV0dXJlPE51bGw+IGJ1aWxkT3V0bGluZShEaWxsTGlicmFyeUJ1aWxkZXIgYnVpbGRlcikgYXN5bmMgewogICAgaWYgKGJ1aWxkZXIubGlicmFyeSA9PSBudWxsKSB7CiAgICAgIHVuaGFuZGxlZCgibnVsbCIsICJidWlsZGVyLmxpYnJhcnkiLCAwLCBidWlsZGVyLmZpbGVVcmkpOwogICAgfQogICAgYnVpbGRlci5tYXJrQXNSZWFkeVRvQnVpbGQoKTsKICB9CgogIEZ1dHVyZTxOdWxsPiBidWlsZEJvZHkoRGlsbExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIpIHsKICAgIHJldHVybiBidWlsZE91dGxpbmUoYnVpbGRlcik7CiAgfQoKICB2b2lkIGZpbmFsaXplRXhwb3J0cygpIHsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGJ1aWxkZXIpIHsKICAgICAgRGlsbExpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPSBidWlsZGVyOwogICAgICBsaWJyYXJ5Lm1hcmtBc1JlYWR5VG9GaW5hbGl6ZUV4cG9ydHMoKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NCdWlsZGVyIGNvbXB1dGVDbGFzc0J1aWxkZXJGcm9tVGFyZ2V0Q2xhc3MoQ2xhc3MgY2xzKSB7CiAgICBMaWJyYXJ5IGtlcm5lbExpYnJhcnkgPSBjbHMuZW5jbG9zaW5nTGlicmFyeTsKICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPSBidWlsZGVyc1trZXJuZWxMaWJyYXJ5LmltcG9ydFVyaV07CiAgICByZXR1cm4gbGlicmFyeS5nZXRMb2NhbE1lbWJlcihjbHMubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlQnVpbGRlciBjb21wdXRlVHlwZUJ1aWxkZXIoRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIHR5cGUuYWNjZXB0KG5ldyBUeXBlQnVpbGRlckNvbXB1dGVyKHRoaXMpKTsKICB9Cn0KWwBOTjwBGwEhAUsBHUABJzQBSAElASoBQgE8ASsBIjsBOiIBT09AMjwsJTovIzkgJCUIBj46MwY2IRMEAUAjQAYiBAE3IgQBGzksLggEAQw/MkAtBAEMMjcEAgExcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2RpbGwvZGlsbF9sb2FkZXIuZGFydCJzZGtyb290Oi9wa2cva2VybmVsL2xpYi9jbG9uZS5kYXJ0wABTKy8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkga2VybmVsLmNsb25lOwoKaW1wb3J0ICdkYXJ0OmNvcmUnIGhpZGUgTWFwRW50cnk7CgppbXBvcnQgJ2FzdC5kYXJ0JzsKaW1wb3J0ICd0eXBlX2FsZ2VicmEuZGFydCc7CgovLy8gVmlzaXRvciB0aGF0IHJldHVybiBhIGNsb25lIG9mIGEgdHJlZSwgbWFpbnRhaW5pbmcgcmVmZXJlbmNlcyB0byBjbG9uZWQKLy8vIG9iamVjdHMuCi8vLwovLy8gSXQgaXMgc2FmZSB0byBjbG9uZSBtZW1iZXJzLCBidXQgY2xvbmluZyBhIGNsYXNzIG9yIGxpYnJhcnkgaXMgbm90Ci8vLyBzdXBwb3J0ZWQuCmNsYXNzIENsb25lVmlzaXRvciBpbXBsZW1lbnRzIFRyZWVWaXNpdG9yIHsKICBmaW5hbCBNYXA8VmFyaWFibGVEZWNsYXJhdGlvbiwgVmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzID0KICAgICAgPFZhcmlhYmxlRGVjbGFyYXRpb24sIFZhcmlhYmxlRGVjbGFyYXRpb24+e307CiAgZmluYWwgTWFwPExhYmVsZWRTdGF0ZW1lbnQsIExhYmVsZWRTdGF0ZW1lbnQ+IGxhYmVscyA9CiAgICAgIDxMYWJlbGVkU3RhdGVtZW50LCBMYWJlbGVkU3RhdGVtZW50Pnt9OwogIGZpbmFsIE1hcDxTd2l0Y2hDYXNlLCBTd2l0Y2hDYXNlPiBzd2l0Y2hDYXNlcyA9IDxTd2l0Y2hDYXNlLCBTd2l0Y2hDYXNlPnt9OwogIGZpbmFsIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gdHlwZVN1YnN0aXR1dGlvbjsKICBmaW5hbCBNYXA8VHlwZVBhcmFtZXRlciwgVHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtczsKICBib29sIGNsb25lQW5ub3RhdGlvbnM7CgogIC8vLyBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHRoZSBjbG9uaW5nIHZpc2l0b3IgZm9yIEtlcm5lbCBBU1RzLgogIC8vLwogIC8vLyBUaGUgYm9vbGVhbiB2YWx1ZSBvZiBbY2xvbmVBbm5vdGF0aW9uc10gdGVsbHMgaWYgdGhlIGFubm90YXRpb25zIG9uIHRoZQogIC8vLyBvdXRsaW5lIGVsZW1lbnRzIGluIHRoZSBzb3VyY2UgQVNUIHNob3VsZCBiZSBjbG9uZWQgdG8gdGhlIHRhcmdldCBBU1QuIFRoZQogIC8vLyBhbm5vdGF0aW9ucyBpbiBwcm9jZWR1cmUgYm9kaWVzIGFyZSBjbG9uZWQgdW5jb25kaXRpb25hbGx5LgogIENsb25lVmlzaXRvcigKICAgICAge01hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gdHlwZVN1YnN0aXR1dGlvbiwKICAgICAgTWFwPFR5cGVQYXJhbWV0ZXIsIFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbXMsCiAgICAgIHRoaXMuY2xvbmVBbm5vdGF0aW9ucyA9IHRydWV9KQogICAgICA6IHRoaXMudHlwZVN1YnN0aXR1dGlvbiA9IGVuc3VyZU11dGFibGUodHlwZVN1YnN0aXR1dGlvbiksCiAgICAgICAgdGhpcy50eXBlUGFyYW1zID0gdHlwZVBhcmFtcyA/PyA8VHlwZVBhcmFtZXRlciwgVHlwZVBhcmFtZXRlcj57fTsKCiAgc3RhdGljIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gZW5zdXJlTXV0YWJsZSgKICAgICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBtYXApIHsKICAgIC8vIFdlIG5lZWQgdG8gbXV0YXRlIHRoaXMgbWFwLCBzbyBtYWtlIHN1cmUgd2UgZG9uJ3QgdXNlIGEgY29uc3RhbnQgbWFwLgogICAgaWYgKG1hcCA9PSBudWxsIHx8IG1hcC5pc0VtcHR5KSB7CiAgICAgIHJldHVybiA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH0KCiAgVHJlZU5vZGUgdmlzaXRMaWJyYXJ5KExpYnJhcnkgbm9kZSkgewogICAgdGhyb3cgJ0Nsb25pbmcgb2YgbGlicmFyaWVzIGlzIG5vdCBpbXBsZW1lbnRlZCc7CiAgfQoKICBUcmVlTm9kZSB2aXNpdENsYXNzKENsYXNzIG5vZGUpIHsKICAgIHRocm93ICdDbG9uaW5nIG9mIGNsYXNzZXMgaXMgbm90IGltcGxlbWVudGVkJzsKICB9CgogIC8vIFRoZSBjdXJyZW50bHkgYWN0aXZlIGZpbGUgdXJpIHdoZXJlIHdlIGFyZSBjbG9uaW5nIFtUcmVlTm9kZV1zIGZyb20uICBJZgogIC8vIHRoaXMgaXMgc2V0IHRvIGBudWxsYCB3ZSBjYW5ub3QgY2xvbmUgZmlsZSBvZmZzZXRzIHRvIG5ld2x5IGNyZWF0ZWQgbm9kZXMuCiAgLy8gVGhlIFtfY2xvbmVGaWxlT2Zmc2V0XSBoZWxwZXIgZnVuY3Rpb24gd2lsbCBlbnN1cmUgdGhpcy4KICBVcmkgX2FjdGl2ZUZpbGVVcmk7CgogIC8vIElmIHdlIGRvbid0IGtub3cgdGhlIGZpbGUgdXJpIHdlIGFyZSBjbG9uaW5nIGVsZW1lbnRzIGZyb20sIGl0J3Mgbm90IHNhZmUKICAvLyB0byBjbG9uZSBmaWxlIG9mZnNldHMgZWl0aGVyLgogIGludCBfY2xvbmVGaWxlT2Zmc2V0KGludCBmaWxlT2Zmc2V0KSB7CiAgICByZXR1cm4gX2FjdGl2ZUZpbGVVcmkgPT0gbnVsbCA/IFRyZWVOb2RlLm5vT2Zmc2V0IDogZmlsZU9mZnNldDsKICB9CgogIFQgY2xvbmU8VCBleHRlbmRzIFRyZWVOb2RlPihUIG5vZGUpIHsKICAgIGZpbmFsIFVyaSBhY3RpdmVGaWxlVXJpU2F2ZWQgPSBfYWN0aXZlRmlsZVVyaTsKICAgIGlmIChub2RlIGlzIEZpbGVVcmlOb2RlKSBfYWN0aXZlRmlsZVVyaSA9IG5vZGUuZmlsZVVyaSA/PyBfYWN0aXZlRmlsZVVyaTsKICAgIGZpbmFsIFRyZWVOb2RlIHJlc3VsdCA9IG5vZGUuYWNjZXB0KHRoaXMpCiAgICAgIC4uZmlsZU9mZnNldCA9IF9jbG9uZUZpbGVPZmZzZXQobm9kZS5maWxlT2Zmc2V0KTsKICAgIF9hY3RpdmVGaWxlVXJpID0gYWN0aXZlRmlsZVVyaVNhdmVkOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFRyZWVOb2RlIGNsb25lT3B0aW9uYWwoVHJlZU5vZGUgbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBmaW5hbCBVcmkgYWN0aXZlRmlsZVVyaVNhdmVkID0gX2FjdGl2ZUZpbGVVcmk7CiAgICBpZiAobm9kZSBpcyBGaWxlVXJpTm9kZSkgX2FjdGl2ZUZpbGVVcmkgPSBub2RlLmZpbGVVcmkgPz8gX2FjdGl2ZUZpbGVVcmk7CiAgICBUcmVlTm9kZSByZXN1bHQgPSBub2RlPy5hY2NlcHQodGhpcyk7CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHJlc3VsdC5maWxlT2Zmc2V0ID0gX2Nsb25lRmlsZU9mZnNldChub2RlLmZpbGVPZmZzZXQpOwogICAgX2FjdGl2ZUZpbGVVcmkgPSBhY3RpdmVGaWxlVXJpU2F2ZWQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRGFydFR5cGUgdmlzaXRUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBzdWJzdGl0dXRlKHR5cGUsIHR5cGVTdWJzdGl0dXRpb24pOwogIH0KCiAgQ29uc3RhbnQgdmlzaXRDb25zdGFudChDb25zdGFudCBjb25zdGFudCkgewogICAgcmV0dXJuIGNvbnN0YW50OwogIH0KCiAgRGFydFR5cGUgdmlzaXRPcHRpb25hbFR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIHR5cGUgPT0gbnVsbCA/IG51bGwgOiBzdWJzdGl0dXRlKHR5cGUsIHR5cGVTdWJzdGl0dXRpb24pOwogIH0KCiAgdmlzaXRJbnZhbGlkRXhwcmVzc2lvbihJbnZhbGlkRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IEludmFsaWRFeHByZXNzaW9uKG5vZGUubWVzc2FnZSk7CiAgfQoKICB2aXNpdFZhcmlhYmxlR2V0KFZhcmlhYmxlR2V0IG5vZGUpIHsKICAgIHJldHVybiBuZXcgVmFyaWFibGVHZXQoCiAgICAgICAgdmFyaWFibGVzW25vZGUudmFyaWFibGVdLCB2aXNpdE9wdGlvbmFsVHlwZShub2RlLnByb21vdGVkVHlwZSkpOwogIH0KCiAgdmlzaXRWYXJpYWJsZVNldChWYXJpYWJsZVNldCBub2RlKSB7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlU2V0KHZhcmlhYmxlc1tub2RlLnZhcmlhYmxlXSwgY2xvbmUobm9kZS52YWx1ZSkpOwogIH0KCiAgdmlzaXRQcm9wZXJ0eUdldChQcm9wZXJ0eUdldCBub2RlKSB7CiAgICByZXR1cm4gbmV3IFByb3BlcnR5R2V0LmJ5UmVmZXJlbmNlKAogICAgICAgIGNsb25lKG5vZGUucmVjZWl2ZXIpLCBub2RlLm5hbWUsIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIHZpc2l0UHJvcGVydHlTZXQoUHJvcGVydHlTZXQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBQcm9wZXJ0eVNldC5ieVJlZmVyZW5jZShjbG9uZShub2RlLnJlY2VpdmVyKSwgbm9kZS5uYW1lLAogICAgICAgIGNsb25lKG5vZGUudmFsdWUpLCBub2RlLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICB2aXNpdERpcmVjdFByb3BlcnR5R2V0KERpcmVjdFByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHJldHVybiBuZXcgRGlyZWN0UHJvcGVydHlHZXQuYnlSZWZlcmVuY2UoCiAgICAgICAgY2xvbmUobm9kZS5yZWNlaXZlciksIG5vZGUudGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIHZpc2l0RGlyZWN0UHJvcGVydHlTZXQoRGlyZWN0UHJvcGVydHlTZXQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBEaXJlY3RQcm9wZXJ0eVNldC5ieVJlZmVyZW5jZSgKICAgICAgICBjbG9uZShub2RlLnJlY2VpdmVyKSwgbm9kZS50YXJnZXRSZWZlcmVuY2UsIGNsb25lKG5vZGUudmFsdWUpKTsKICB9CgogIHZpc2l0U3VwZXJQcm9wZXJ0eUdldChTdXBlclByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHJldHVybiBuZXcgU3VwZXJQcm9wZXJ0eUdldC5ieVJlZmVyZW5jZSgKICAgICAgICBub2RlLm5hbWUsIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIHZpc2l0U3VwZXJQcm9wZXJ0eVNldChTdXBlclByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHJldHVybiBuZXcgU3VwZXJQcm9wZXJ0eVNldC5ieVJlZmVyZW5jZSgKICAgICAgICBub2RlLm5hbWUsIGNsb25lKG5vZGUudmFsdWUpLCBub2RlLmludGVyZmFjZVRhcmdldFJlZmVyZW5jZSk7CiAgfQoKICB2aXNpdFN0YXRpY0dldChTdGF0aWNHZXQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBTdGF0aWNHZXQuYnlSZWZlcmVuY2Uobm9kZS50YXJnZXRSZWZlcmVuY2UpOwogIH0KCiAgdmlzaXRTdGF0aWNTZXQoU3RhdGljU2V0IG5vZGUpIHsKICAgIHJldHVybiBuZXcgU3RhdGljU2V0LmJ5UmVmZXJlbmNlKG5vZGUudGFyZ2V0UmVmZXJlbmNlLCBjbG9uZShub2RlLnZhbHVlKSk7CiAgfQoKICB2aXNpdE1ldGhvZEludm9jYXRpb24oTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IE1ldGhvZEludm9jYXRpb24uYnlSZWZlcmVuY2UoY2xvbmUobm9kZS5yZWNlaXZlciksIG5vZGUubmFtZSwKICAgICAgICBjbG9uZShub2RlLmFyZ3VtZW50cyksIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIHZpc2l0RGlyZWN0TWV0aG9kSW52b2NhdGlvbihEaXJlY3RNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgRGlyZWN0TWV0aG9kSW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgICBjbG9uZShub2RlLnJlY2VpdmVyKSwgbm9kZS50YXJnZXRSZWZlcmVuY2UsIGNsb25lKG5vZGUuYXJndW1lbnRzKSk7CiAgfQoKICB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihTdXBlck1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBTdXBlck1ldGhvZEludm9jYXRpb24uYnlSZWZlcmVuY2UoCiAgICAgICAgbm9kZS5uYW1lLCBjbG9uZShub2RlLmFyZ3VtZW50cyksIG5vZGUuaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlKTsKICB9CgogIHZpc2l0U3RhdGljSW52b2NhdGlvbihTdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgU3RhdGljSW52b2NhdGlvbi5ieVJlZmVyZW5jZSgKICAgICAgICBub2RlLnRhcmdldFJlZmVyZW5jZSwgY2xvbmUobm9kZS5hcmd1bWVudHMpLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgfQoKICB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihDb25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvckludm9jYXRpb24uYnlSZWZlcmVuY2UoCiAgICAgICAgbm9kZS50YXJnZXRSZWZlcmVuY2UsIGNsb25lKG5vZGUuYXJndW1lbnRzKSwKICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QpOwogIH0KCiAgdmlzaXROb3QoTm90IG5vZGUpIHsKICAgIHJldHVybiBuZXcgTm90KGNsb25lKG5vZGUub3BlcmFuZCkpOwogIH0KCiAgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbihMb2dpY2FsRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IExvZ2ljYWxFeHByZXNzaW9uKAogICAgICAgIGNsb25lKG5vZGUubGVmdCksIG5vZGUub3BlcmF0b3IsIGNsb25lKG5vZGUucmlnaHQpKTsKICB9CgogIHZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKENvbmRpdGlvbmFsRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IENvbmRpdGlvbmFsRXhwcmVzc2lvbihjbG9uZShub2RlLmNvbmRpdGlvbiksIGNsb25lKG5vZGUudGhlbiksCiAgICAgICAgY2xvbmUobm9kZS5vdGhlcndpc2UpLCB2aXNpdE9wdGlvbmFsVHlwZShub2RlLnN0YXRpY1R5cGUpKTsKICB9CgogIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihTdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgU3RyaW5nQ29uY2F0ZW5hdGlvbihub2RlLmV4cHJlc3Npb25zLm1hcChjbG9uZSkudG9MaXN0KCkpOwogIH0KCiAgdmlzaXRMaXN0Q29uY2F0ZW5hdGlvbihMaXN0Q29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IExpc3RDb25jYXRlbmF0aW9uKG5vZGUubGlzdHMubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICB0eXBlQXJndW1lbnQ6IHZpc2l0VHlwZShub2RlLnR5cGVBcmd1bWVudCkpOwogIH0KCiAgdmlzaXRTZXRDb25jYXRlbmF0aW9uKFNldENvbmNhdGVuYXRpb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBTZXRDb25jYXRlbmF0aW9uKG5vZGUuc2V0cy5tYXAoY2xvbmUpLnRvTGlzdCgpLAogICAgICAgIHR5cGVBcmd1bWVudDogdmlzaXRUeXBlKG5vZGUudHlwZUFyZ3VtZW50KSk7CiAgfQoKICB2aXNpdE1hcENvbmNhdGVuYXRpb24oTWFwQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IE1hcENvbmNhdGVuYXRpb24obm9kZS5tYXBzLm1hcChjbG9uZSkudG9MaXN0KCksCiAgICAgICAga2V5VHlwZTogdmlzaXRUeXBlKG5vZGUua2V5VHlwZSksIHZhbHVlVHlwZTogdmlzaXRUeXBlKG5vZGUudmFsdWVUeXBlKSk7CiAgfQoKICB2aXNpdEluc3RhbmNlQ3JlYXRpb24oSW5zdGFuY2VDcmVhdGlvbiBub2RlKSB7CiAgICBmaW5hbCBNYXA8UmVmZXJlbmNlLCBFeHByZXNzaW9uPiBmaWVsZFZhbHVlcyA9IDxSZWZlcmVuY2UsIEV4cHJlc3Npb24+e307CiAgICBub2RlLmZpZWxkVmFsdWVzLmZvckVhY2goKFJlZmVyZW5jZSBmaWVsZFJlZiwgRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICBmaWVsZFZhbHVlc1tmaWVsZFJlZl0gPSBjbG9uZSh2YWx1ZSk7CiAgICB9KTsKICAgIHJldHVybiBuZXcgSW5zdGFuY2VDcmVhdGlvbigKICAgICAgICBub2RlLmNsYXNzUmVmZXJlbmNlLAogICAgICAgIG5vZGUudHlwZUFyZ3VtZW50cy5tYXAodmlzaXRUeXBlKS50b0xpc3QoKSwKICAgICAgICBmaWVsZFZhbHVlcywKICAgICAgICBub2RlLmFzc2VydHMubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICBub2RlLnVudXNlZEFyZ3VtZW50cy5tYXAoY2xvbmUpLnRvTGlzdCgpKTsKICB9CgogIHZpc2l0SXNFeHByZXNzaW9uKElzRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IElzRXhwcmVzc2lvbihjbG9uZShub2RlLm9wZXJhbmQpLCB2aXNpdFR5cGUobm9kZS50eXBlKSk7CiAgfQoKICB2aXNpdEFzRXhwcmVzc2lvbihBc0V4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBBc0V4cHJlc3Npb24oY2xvbmUobm9kZS5vcGVyYW5kKSwgdmlzaXRUeXBlKG5vZGUudHlwZSkpCiAgICAgIC4uZmxhZ3MgPSBub2RlLmZsYWdzOwogIH0KCiAgdmlzaXRTeW1ib2xMaXRlcmFsKFN5bWJvbExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBTeW1ib2xMaXRlcmFsKG5vZGUudmFsdWUpOwogIH0KCiAgdmlzaXRUeXBlTGl0ZXJhbChUeXBlTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gbmV3IFR5cGVMaXRlcmFsKHZpc2l0VHlwZShub2RlLnR5cGUpKTsKICB9CgogIHZpc2l0VGhpc0V4cHJlc3Npb24oVGhpc0V4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBUaGlzRXhwcmVzc2lvbigpOwogIH0KCiAgdmlzaXRSZXRocm93KFJldGhyb3cgbm9kZSkgewogICAgcmV0dXJuIG5ldyBSZXRocm93KCk7CiAgfQoKICB2aXNpdFRocm93KFRocm93IG5vZGUpIHsKICAgIHJldHVybiBuZXcgVGhyb3coY2xvbmVPcHRpb25hbChub2RlLmV4cHJlc3Npb24pKTsKICB9CgogIHZpc2l0TGlzdExpdGVyYWwoTGlzdExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBMaXN0TGl0ZXJhbChub2RlLmV4cHJlc3Npb25zLm1hcChjbG9uZSkudG9MaXN0KCksCiAgICAgICAgdHlwZUFyZ3VtZW50OiB2aXNpdFR5cGUobm9kZS50eXBlQXJndW1lbnQpLCBpc0NvbnN0OiBub2RlLmlzQ29uc3QpOwogIH0KCiAgdmlzaXRTZXRMaXRlcmFsKFNldExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBTZXRMaXRlcmFsKG5vZGUuZXhwcmVzc2lvbnMubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICB0eXBlQXJndW1lbnQ6IHZpc2l0VHlwZShub2RlLnR5cGVBcmd1bWVudCksIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgfQoKICB2aXNpdE1hcExpdGVyYWwoTWFwTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gbmV3IE1hcExpdGVyYWwobm9kZS5lbnRyaWVzLm1hcChjbG9uZSkudG9MaXN0KCksCiAgICAgICAga2V5VHlwZTogdmlzaXRUeXBlKG5vZGUua2V5VHlwZSksCiAgICAgICAgdmFsdWVUeXBlOiB2aXNpdFR5cGUobm9kZS52YWx1ZVR5cGUpLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgfQoKICB2aXNpdE1hcEVudHJ5KE1hcEVudHJ5IG5vZGUpIHsKICAgIHJldHVybiBuZXcgTWFwRW50cnkoY2xvbmUobm9kZS5rZXkpLCBjbG9uZShub2RlLnZhbHVlKSk7CiAgfQoKICB2aXNpdEF3YWl0RXhwcmVzc2lvbihBd2FpdEV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBBd2FpdEV4cHJlc3Npb24oY2xvbmUobm9kZS5vcGVyYW5kKSk7CiAgfQoKICB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihGdW5jdGlvbkV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIG5ldyBGdW5jdGlvbkV4cHJlc3Npb24oY2xvbmUobm9kZS5mdW5jdGlvbikpOwogIH0KCiAgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgQ29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgIHZpc2l0Q29uc3RhbnQobm9kZS5jb25zdGFudCksIHZpc2l0VHlwZShub2RlLnR5cGUpKTsKICB9CgogIHZpc2l0U3RyaW5nTGl0ZXJhbChTdHJpbmdMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBuZXcgU3RyaW5nTGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIHZpc2l0SW50TGl0ZXJhbChJbnRMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIHZpc2l0RG91YmxlTGl0ZXJhbChEb3VibGVMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBuZXcgRG91YmxlTGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIHZpc2l0Qm9vbExpdGVyYWwoQm9vbExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBCb29sTGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIHZpc2l0TnVsbExpdGVyYWwoTnVsbExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG5ldyBOdWxsTGl0ZXJhbCgpOwogIH0KCiAgdmlzaXRMZXQoTGV0IG5vZGUpIHsKICAgIHZhciBuZXdWYXJpYWJsZSA9IGNsb25lKG5vZGUudmFyaWFibGUpOwogICAgcmV0dXJuIG5ldyBMZXQobmV3VmFyaWFibGUsIGNsb25lKG5vZGUuYm9keSkpOwogIH0KCiAgdmlzaXRCbG9ja0V4cHJlc3Npb24oQmxvY2tFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgQmxvY2tFeHByZXNzaW9uKGNsb25lKG5vZGUuYm9keSksIGNsb25lKG5vZGUudmFsdWUpKTsKICB9CgogIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvblN0YXRlbWVudChjbG9uZShub2RlLmV4cHJlc3Npb24pKTsKICB9CgogIHZpc2l0QmxvY2soQmxvY2sgbm9kZSkgewogICAgcmV0dXJuIG5ldyBCbG9jayhub2RlLnN0YXRlbWVudHMubWFwKGNsb25lKS50b0xpc3QoKSk7CiAgfQoKICB2aXNpdEFzc2VydEJsb2NrKEFzc2VydEJsb2NrIG5vZGUpIHsKICAgIHJldHVybiBuZXcgQXNzZXJ0QmxvY2sobm9kZS5zdGF0ZW1lbnRzLm1hcChjbG9uZSkudG9MaXN0KCkpOwogIH0KCiAgdmlzaXRFbXB0eVN0YXRlbWVudChFbXB0eVN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gbmV3IEVtcHR5U3RhdGVtZW50KCk7CiAgfQoKICB2aXNpdEFzc2VydFN0YXRlbWVudChBc3NlcnRTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBBc3NlcnRTdGF0ZW1lbnQoY2xvbmUobm9kZS5jb25kaXRpb24pLAogICAgICAgIGNvbmRpdGlvblN0YXJ0T2Zmc2V0OiBub2RlLmNvbmRpdGlvblN0YXJ0T2Zmc2V0LAogICAgICAgIGNvbmRpdGlvbkVuZE9mZnNldDogbm9kZS5jb25kaXRpb25FbmRPZmZzZXQsCiAgICAgICAgbWVzc2FnZTogY2xvbmVPcHRpb25hbChub2RlLm1lc3NhZ2UpKTsKICB9CgogIHZpc2l0TGFiZWxlZFN0YXRlbWVudChMYWJlbGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIExhYmVsZWRTdGF0ZW1lbnQgbmV3Tm9kZSA9IG5ldyBMYWJlbGVkU3RhdGVtZW50KG51bGwpOwogICAgbGFiZWxzW25vZGVdID0gbmV3Tm9kZTsKICAgIG5ld05vZGUuYm9keSA9IGNsb25lKG5vZGUuYm9keSkuLnBhcmVudCA9IG5ld05vZGU7CiAgICByZXR1cm4gbmV3Tm9kZTsKICB9CgogIHZpc2l0QnJlYWtTdGF0ZW1lbnQoQnJlYWtTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBCcmVha1N0YXRlbWVudChsYWJlbHNbbm9kZS50YXJnZXRdKTsKICB9CgogIHZpc2l0V2hpbGVTdGF0ZW1lbnQoV2hpbGVTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBXaGlsZVN0YXRlbWVudChjbG9uZShub2RlLmNvbmRpdGlvbiksIGNsb25lKG5vZGUuYm9keSkpOwogIH0KCiAgdmlzaXREb1N0YXRlbWVudChEb1N0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gbmV3IERvU3RhdGVtZW50KGNsb25lKG5vZGUuYm9keSksIGNsb25lKG5vZGUuY29uZGl0aW9uKSk7CiAgfQoKICB2aXNpdEZvclN0YXRlbWVudChGb3JTdGF0ZW1lbnQgbm9kZSkgewogICAgdmFyIHZhcmlhYmxlcyA9IG5vZGUudmFyaWFibGVzLm1hcChjbG9uZSkudG9MaXN0KCk7CiAgICByZXR1cm4gbmV3IEZvclN0YXRlbWVudCh2YXJpYWJsZXMsIGNsb25lT3B0aW9uYWwobm9kZS5jb25kaXRpb24pLAogICAgICAgIG5vZGUudXBkYXRlcy5tYXAoY2xvbmUpLnRvTGlzdCgpLCBjbG9uZShub2RlLmJvZHkpKTsKICB9CgogIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgdmFyIG5ld1ZhcmlhYmxlID0gY2xvbmUobm9kZS52YXJpYWJsZSk7CiAgICByZXR1cm4gbmV3IEZvckluU3RhdGVtZW50KAogICAgICAgIG5ld1ZhcmlhYmxlLCBjbG9uZShub2RlLml0ZXJhYmxlKSwgY2xvbmUobm9kZS5ib2R5KSwKICAgICAgICBpc0FzeW5jOiBub2RlLmlzQXN5bmMpOwogIH0KCiAgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIGZvciAoU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlIGluIG5vZGUuY2FzZXMpIHsKICAgICAgc3dpdGNoQ2FzZXNbc3dpdGNoQ2FzZV0gPSBuZXcgU3dpdGNoQ2FzZSgKICAgICAgICAgIHN3aXRjaENhc2UuZXhwcmVzc2lvbnMubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICAgIG5ldyBMaXN0PGludD4uZnJvbShzd2l0Y2hDYXNlLmV4cHJlc3Npb25PZmZzZXRzKSwKICAgICAgICAgIG51bGwsCiAgICAgICAgICBpc0RlZmF1bHQ6IHN3aXRjaENhc2UuaXNEZWZhdWx0KTsKICAgIH0KICAgIHJldHVybiBuZXcgU3dpdGNoU3RhdGVtZW50KAogICAgICAgIGNsb25lKG5vZGUuZXhwcmVzc2lvbiksIG5vZGUuY2FzZXMubWFwKGNsb25lKS50b0xpc3QoKSk7CiAgfQoKICB2aXNpdFN3aXRjaENhc2UoU3dpdGNoQ2FzZSBub2RlKSB7CiAgICB2YXIgc3dpdGNoQ2FzZSA9IHN3aXRjaENhc2VzW25vZGVdOwogICAgc3dpdGNoQ2FzZS5ib2R5ID0gY2xvbmUobm9kZS5ib2R5KS4ucGFyZW50ID0gc3dpdGNoQ2FzZTsKICAgIHJldHVybiBzd2l0Y2hDYXNlOwogIH0KCiAgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChDb250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gbmV3IENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KHN3aXRjaENhc2VzW25vZGUudGFyZ2V0XSk7CiAgfQoKICB2aXNpdElmU3RhdGVtZW50KElmU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBuZXcgSWZTdGF0ZW1lbnQoCiAgICAgICAgY2xvbmUobm9kZS5jb25kaXRpb24pLCBjbG9uZShub2RlLnRoZW4pLCBjbG9uZU9wdGlvbmFsKG5vZGUub3RoZXJ3aXNlKSk7CiAgfQoKICB2aXNpdFJldHVyblN0YXRlbWVudChSZXR1cm5TdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBSZXR1cm5TdGF0ZW1lbnQoY2xvbmVPcHRpb25hbChub2RlLmV4cHJlc3Npb24pKTsKICB9CgogIHZpc2l0VHJ5Q2F0Y2goVHJ5Q2F0Y2ggbm9kZSkgewogICAgcmV0dXJuIG5ldyBUcnlDYXRjaChjbG9uZShub2RlLmJvZHkpLCBub2RlLmNhdGNoZXMubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICBpc1N5bnRoZXRpYzogbm9kZS5pc1N5bnRoZXRpYyk7CiAgfQoKICB2aXNpdENhdGNoKENhdGNoIG5vZGUpIHsKICAgIHZhciBuZXdFeGNlcHRpb24gPSBjbG9uZU9wdGlvbmFsKG5vZGUuZXhjZXB0aW9uKTsKICAgIHZhciBuZXdTdGFja1RyYWNlID0gY2xvbmVPcHRpb25hbChub2RlLnN0YWNrVHJhY2UpOwogICAgcmV0dXJuIG5ldyBDYXRjaChuZXdFeGNlcHRpb24sIGNsb25lKG5vZGUuYm9keSksCiAgICAgICAgc3RhY2tUcmFjZTogbmV3U3RhY2tUcmFjZSwgZ3VhcmQ6IHZpc2l0VHlwZShub2RlLmd1YXJkKSk7CiAgfQoKICB2aXNpdFRyeUZpbmFsbHkoVHJ5RmluYWxseSBub2RlKSB7CiAgICByZXR1cm4gbmV3IFRyeUZpbmFsbHkoY2xvbmUobm9kZS5ib2R5KSwgY2xvbmUobm9kZS5maW5hbGl6ZXIpKTsKICB9CgogIHZpc2l0WWllbGRTdGF0ZW1lbnQoWWllbGRTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBZaWVsZFN0YXRlbWVudChjbG9uZShub2RlLmV4cHJlc3Npb24pKS4uZmxhZ3MgPSBub2RlLmZsYWdzOwogIH0KCiAgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgcmV0dXJuIHZhcmlhYmxlc1tub2RlXSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUubmFtZSwKICAgICAgICBpbml0aWFsaXplcjogY2xvbmVPcHRpb25hbChub2RlLmluaXRpYWxpemVyKSwKICAgICAgICB0eXBlOiB2aXNpdFR5cGUobm9kZS50eXBlKSkKICAgICAgLi5hbm5vdGF0aW9ucyA9IGNsb25lQW5ub3RhdGlvbnMgJiYgIW5vZGUuYW5ub3RhdGlvbnMuaXNFbXB0eQogICAgICAgICAgPyBub2RlLmFubm90YXRpb25zLm1hcChjbG9uZSkudG9MaXN0KCkKICAgICAgICAgIDogY29uc3QgPEV4cHJlc3Npb24+W10KICAgICAgLi5mbGFncyA9IG5vZGUuZmxhZ3MKICAgICAgLi5maWxlRXF1YWxzT2Zmc2V0ID0gX2Nsb25lRmlsZU9mZnNldChub2RlLmZpbGVFcXVhbHNPZmZzZXQpOwogIH0KCiAgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKEZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSkgewogICAgdmFyIG5ld1ZhcmlhYmxlID0gY2xvbmUobm9kZS52YXJpYWJsZSk7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uRGVjbGFyYXRpb24obmV3VmFyaWFibGUsIGNsb25lKG5vZGUuZnVuY3Rpb24pKTsKICB9CgogIC8vIE1lbWJlcnMKICB2aXNpdENvbnN0cnVjdG9yKENvbnN0cnVjdG9yIG5vZGUpIHsKICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3IoY2xvbmUobm9kZS5mdW5jdGlvbiksCiAgICAgICAgbmFtZTogbm9kZS5uYW1lLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCwKICAgICAgICBpc0V4dGVybmFsOiBub2RlLmlzRXh0ZXJuYWwsCiAgICAgICAgaXNTeW50aGV0aWM6IG5vZGUuaXNTeW50aGV0aWMsCiAgICAgICAgaW5pdGlhbGl6ZXJzOiBub2RlLmluaXRpYWxpemVycy5tYXAoY2xvbmUpLnRvTGlzdCgpLAogICAgICAgIHRyYW5zZm9ybWVyRmxhZ3M6IG5vZGUudHJhbnNmb3JtZXJGbGFncywKICAgICAgICBmaWxlVXJpOiBfYWN0aXZlRmlsZVVyaSkKICAgICAgLi5hbm5vdGF0aW9ucyA9IGNsb25lQW5ub3RhdGlvbnMgJiYgIW5vZGUuYW5ub3RhdGlvbnMuaXNFbXB0eQogICAgICAgICAgPyBub2RlLmFubm90YXRpb25zLm1hcChjbG9uZSkudG9MaXN0KCkKICAgICAgICAgIDogY29uc3QgPEV4cHJlc3Npb24+W10KICAgICAgLi5maWxlT2Zmc2V0ID0gX2Nsb25lRmlsZU9mZnNldChub2RlLmZpbGVPZmZzZXQpCiAgICAgIC4uZmlsZUVuZE9mZnNldCA9IF9jbG9uZUZpbGVPZmZzZXQobm9kZS5maWxlRW5kT2Zmc2V0KTsKICB9CgogIHZpc2l0UHJvY2VkdXJlKFByb2NlZHVyZSBub2RlKSB7CiAgICByZXR1cm4gbmV3IFByb2NlZHVyZShub2RlLm5hbWUsIG5vZGUua2luZCwgY2xvbmUobm9kZS5mdW5jdGlvbiksCiAgICAgICAgdHJhbnNmb3JtZXJGbGFnczogbm9kZS50cmFuc2Zvcm1lckZsYWdzLAogICAgICAgIGZpbGVVcmk6IF9hY3RpdmVGaWxlVXJpLAogICAgICAgIGZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXQ6IG5vZGUuZm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldCwKICAgICAgICBmb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldDogbm9kZS5mb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldCkKICAgICAgLi5hbm5vdGF0aW9ucyA9IGNsb25lQW5ub3RhdGlvbnMgJiYgIW5vZGUuYW5ub3RhdGlvbnMuaXNFbXB0eQogICAgICAgICAgPyBub2RlLmFubm90YXRpb25zLm1hcChjbG9uZSkudG9MaXN0KCkKICAgICAgICAgIDogY29uc3QgPEV4cHJlc3Npb24+W10KICAgICAgLi5zdGFydEZpbGVPZmZzZXQgPSBfY2xvbmVGaWxlT2Zmc2V0KG5vZGUuc3RhcnRGaWxlT2Zmc2V0KQogICAgICAuLmZpbGVPZmZzZXQgPSBfY2xvbmVGaWxlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCkKICAgICAgLi5maWxlRW5kT2Zmc2V0ID0gX2Nsb25lRmlsZU9mZnNldChub2RlLmZpbGVFbmRPZmZzZXQpCiAgICAgIC4uZmxhZ3MgPSBub2RlLmZsYWdzOwogIH0KCiAgdmlzaXRGaWVsZChGaWVsZCBub2RlKSB7CiAgICByZXR1cm4gbmV3IEZpZWxkKG5vZGUubmFtZSwKICAgICAgICB0eXBlOiB2aXNpdFR5cGUobm9kZS50eXBlKSwKICAgICAgICBpbml0aWFsaXplcjogY2xvbmVPcHRpb25hbChub2RlLmluaXRpYWxpemVyKSwKICAgICAgICBpc0NvdmFyaWFudDogbm9kZS5pc0NvdmFyaWFudCwKICAgICAgICBpc0ZpbmFsOiBub2RlLmlzRmluYWwsCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0LAogICAgICAgIGlzU3RhdGljOiBub2RlLmlzU3RhdGljLAogICAgICAgIGhhc0ltcGxpY2l0R2V0dGVyOiBub2RlLmhhc0ltcGxpY2l0R2V0dGVyLAogICAgICAgIGhhc0ltcGxpY2l0U2V0dGVyOiBub2RlLmhhc0ltcGxpY2l0U2V0dGVyLAogICAgICAgIHRyYW5zZm9ybWVyRmxhZ3M6IG5vZGUudHJhbnNmb3JtZXJGbGFncywKICAgICAgICBmaWxlVXJpOiBfYWN0aXZlRmlsZVVyaSkKICAgICAgLi5hbm5vdGF0aW9ucyA9IGNsb25lQW5ub3RhdGlvbnMgJiYgIW5vZGUuYW5ub3RhdGlvbnMuaXNFbXB0eQogICAgICAgICAgPyBub2RlLmFubm90YXRpb25zLm1hcChjbG9uZSkudG9MaXN0KCkKICAgICAgICAgIDogY29uc3QgPEV4cHJlc3Npb24+W10KICAgICAgLi5maWxlT2Zmc2V0ID0gX2Nsb25lRmlsZU9mZnNldChub2RlLmZpbGVPZmZzZXQpCiAgICAgIC4uZmlsZUVuZE9mZnNldCA9IF9jbG9uZUZpbGVPZmZzZXQobm9kZS5maWxlRW5kT2Zmc2V0KQogICAgICAuLmZsYWdzID0gbm9kZS5mbGFnczsKICB9CgogIHZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IoUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3Igbm9kZSkgewogICAgcmV0dXJuIG5ldyBSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvcihub2RlLnRhcmdldFJlZmVyZW5jZSwKICAgICAgICBuYW1lOiBub2RlLm5hbWUsCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0LAogICAgICAgIGlzRXh0ZXJuYWw6IG5vZGUuaXNFeHRlcm5hbCwKICAgICAgICB0cmFuc2Zvcm1lckZsYWdzOiBub2RlLnRyYW5zZm9ybWVyRmxhZ3MsCiAgICAgICAgdHlwZUFyZ3VtZW50czogbm9kZS50eXBlQXJndW1lbnRzLm1hcCh2aXNpdFR5cGUpLnRvTGlzdCgpLAogICAgICAgIHR5cGVQYXJhbWV0ZXJzOiBub2RlLnR5cGVQYXJhbWV0ZXJzLm1hcChjbG9uZSkudG9MaXN0KCksCiAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnM6IG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMubWFwKGNsb25lKS50b0xpc3QoKSwKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IG5vZGUubmFtZWRQYXJhbWV0ZXJzLm1hcChjbG9uZSkudG9MaXN0KCksCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgIGZpbGVVcmk6IF9hY3RpdmVGaWxlVXJpKQogICAgICAuLmFubm90YXRpb25zID0gY2xvbmVBbm5vdGF0aW9ucyAmJiAhbm9kZS5hbm5vdGF0aW9ucy5pc0VtcHR5CiAgICAgICAgICA/IG5vZGUuYW5ub3RhdGlvbnMubWFwKGNsb25lKS50b0xpc3QoKQogICAgICAgICAgOiBjb25zdCA8RXhwcmVzc2lvbj5bXTsKICB9CgogIHZpc2l0VHlwZVBhcmFtZXRlcihUeXBlUGFyYW1ldGVyIG5vZGUpIHsKICAgIFR5cGVQYXJhbWV0ZXIgbmV3Tm9kZSA9IHR5cGVQYXJhbXNbbm9kZV07CiAgICBpZiAobmV3Tm9kZSA9PSBudWxsKSB7CiAgICAgIG5ld05vZGUgPSBuZXcgVHlwZVBhcmFtZXRlcihub2RlLm5hbWUpOwogICAgICB0eXBlU3Vic3RpdHV0aW9uW25vZGVdID0gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKG5ld05vZGUpOwogICAgfQogICAgbmV3Tm9kZS5ib3VuZCA9IHZpc2l0VHlwZShub2RlLmJvdW5kKTsKICAgIGlmIChub2RlLmRlZmF1bHRUeXBlICE9IG51bGwpIHsKICAgICAgbmV3Tm9kZS5kZWZhdWx0VHlwZSA9IHZpc2l0VHlwZShub2RlLmRlZmF1bHRUeXBlKTsKICAgIH0KICAgIHJldHVybiBuZXdOb2RlCiAgICAgIC4uYW5ub3RhdGlvbnMgPSBjbG9uZUFubm90YXRpb25zICYmICFub2RlLmFubm90YXRpb25zLmlzRW1wdHkKICAgICAgICAgID8gbm9kZS5hbm5vdGF0aW9ucy5tYXAoY2xvbmUpLnRvTGlzdCgpCiAgICAgICAgICA6IGNvbnN0IDxFeHByZXNzaW9uPltdCiAgICAgIC4uZmxhZ3MgPSBub2RlLmZsYWdzOwogIH0KCiAgVHJlZU5vZGUgY2xvbmVGdW5jdGlvbk5vZGVCb2R5KEZ1bmN0aW9uTm9kZSBub2RlKSB7CiAgICBib29sIHNhdmVkQ2xvbmVBbm5vdGF0aW9ucyA9IHRoaXMuY2xvbmVBbm5vdGF0aW9uczsKICAgIHRyeSB7CiAgICAgIHRoaXMuY2xvbmVBbm5vdGF0aW9ucyA9IHRydWU7CiAgICAgIHJldHVybiBjbG9uZU9wdGlvbmFsKG5vZGUuYm9keSk7CiAgICB9IGZpbmFsbHkgewogICAgICB0aGlzLmNsb25lQW5ub3RhdGlvbnMgPSBzYXZlZENsb25lQW5ub3RhdGlvbnM7CiAgICB9CiAgfQoKICB2aXNpdEZ1bmN0aW9uTm9kZShGdW5jdGlvbk5vZGUgbm9kZSkgewogICAgdmFyIHR5cGVQYXJhbWV0ZXJzID0gbm9kZS50eXBlUGFyYW1ldGVycy5tYXAoY2xvbmUpLnRvTGlzdCgpOwogICAgdmFyIHBvc2l0aW9uYWwgPSBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLm1hcChjbG9uZSkudG9MaXN0KCk7CiAgICB2YXIgbmFtZWQgPSBub2RlLm5hbWVkUGFyYW1ldGVycy5tYXAoY2xvbmUpLnRvTGlzdCgpOwogICAgcmV0dXJuIG5ldyBGdW5jdGlvbk5vZGUoY2xvbmVGdW5jdGlvbk5vZGVCb2R5KG5vZGUpLAogICAgICAgIHR5cGVQYXJhbWV0ZXJzOiB0eXBlUGFyYW1ldGVycywKICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyczogcG9zaXRpb25hbCwKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IG5hbWVkLAogICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICByZXR1cm5UeXBlOiB2aXNpdFR5cGUobm9kZS5yZXR1cm5UeXBlKSwKICAgICAgICBhc3luY01hcmtlcjogbm9kZS5hc3luY01hcmtlciwKICAgICAgICBkYXJ0QXN5bmNNYXJrZXI6IG5vZGUuZGFydEFzeW5jTWFya2VyKQogICAgICAuLmZpbGVPZmZzZXQgPSBfY2xvbmVGaWxlT2Zmc2V0KG5vZGUuZmlsZU9mZnNldCkKICAgICAgLi5maWxlRW5kT2Zmc2V0ID0gX2Nsb25lRmlsZU9mZnNldChub2RlLmZpbGVFbmRPZmZzZXQpOwogIH0KCiAgdmlzaXRBcmd1bWVudHMoQXJndW1lbnRzIG5vZGUpIHsKICAgIHJldHVybiBuZXcgQXJndW1lbnRzKG5vZGUucG9zaXRpb25hbC5tYXAoY2xvbmUpLnRvTGlzdCgpLAogICAgICAgIHR5cGVzOiBub2RlLnR5cGVzLm1hcCh2aXNpdFR5cGUpLnRvTGlzdCgpLAogICAgICAgIG5hbWVkOiBub2RlLm5hbWVkLm1hcChjbG9uZSkudG9MaXN0KCkpOwogIH0KCiAgdmlzaXROYW1lZEV4cHJlc3Npb24oTmFtZWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgTmFtZWRFeHByZXNzaW9uKG5vZGUubmFtZSwgY2xvbmUobm9kZS52YWx1ZSkpOwogIH0KCiAgZGVmYXVsdEJhc2ljTGl0ZXJhbChCYXNpY0xpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIH0KCiAgZGVmYXVsdEV4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlKSB7CiAgICB0aHJvdyAnVW5pbXBsZW1lbnRlZCBjbG9uZSBmb3IgS2VybmVsIGV4cHJlc3Npb246ICRub2RlJzsKICB9CgogIGRlZmF1bHRJbml0aWFsaXplcihJbml0aWFsaXplciBub2RlKSB7CiAgICB0aHJvdyAnVW5pbXBsZW1lbnRlZCBjbG9uZSBmb3IgS2VybmVsIGluaXRpYWxpemVyOiAkbm9kZSc7CiAgfQoKICBkZWZhdWx0TWVtYmVyKE1lbWJlciBub2RlKSB7CiAgICB0aHJvdyAnVW5pbXBsZW1lbnRlZCBjbG9uZSBmb3IgS2VybmVsIG1lbWJlcjogJG5vZGUnOwogIH0KCiAgZGVmYXVsdFN0YXRlbWVudChTdGF0ZW1lbnQgbm9kZSkgewogICAgdGhyb3cgJ1VuaW1wbGVtZW50ZWQgY2xvbmUgZm9yIEtlcm5lbCBzdGF0ZW1lbnQ6ICRub2RlJzsKICB9CgogIGRlZmF1bHRUcmVlTm9kZShUcmVlTm9kZSBub2RlKSB7CiAgICB0aHJvdyAnQ2xvbmluZyBLZXJuZWwgbm9uLW1lbWJlcnMgaXMgbm90IHN1cHBvcnRlZC4gICcKICAgICAgICAnVHJpZWQgY2xvbmluZyAkbm9kZSc7CiAgfQoKICB2aXNpdEFzc2VydEluaXRpYWxpemVyKEFzc2VydEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHJldHVybiBuZXcgQXNzZXJ0SW5pdGlhbGl6ZXIoY2xvbmUobm9kZS5zdGF0ZW1lbnQpKTsKICB9CgogIHZpc2l0Q2hlY2tMaWJyYXJ5SXNMb2FkZWQoQ2hlY2tMaWJyYXJ5SXNMb2FkZWQgbm9kZSkgewogICAgcmV0dXJuIG5ldyBDaGVja0xpYnJhcnlJc0xvYWRlZChub2RlLmltcG9ydCk7CiAgfQoKICB2aXNpdENvbWJpbmF0b3IoQ29tYmluYXRvciBub2RlKSB7CiAgICByZXR1cm4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgdmlzaXRGaWVsZEluaXRpYWxpemVyKEZpZWxkSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgcmV0dXJuIG5ldyBGaWVsZEluaXRpYWxpemVyLmJ5UmVmZXJlbmNlKAogICAgICAgIG5vZGUuZmllbGRSZWZlcmVuY2UsIGNsb25lKG5vZGUudmFsdWUpKTsKICB9CgogIHZpc2l0SW5zdGFudGlhdGlvbihJbnN0YW50aWF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBuZXcgSW5zdGFudGlhdGlvbigKICAgICAgICBjbG9uZShub2RlLmV4cHJlc3Npb24pLCBub2RlLnR5cGVBcmd1bWVudHMubWFwKHZpc2l0VHlwZSkudG9MaXN0KCkpOwogIH0KCiAgdmlzaXRJbnZhbGlkSW5pdGlhbGl6ZXIoSW52YWxpZEluaXRpYWxpemVyIG5vZGUpIHsKICAgIHJldHVybiBuZXcgSW52YWxpZEluaXRpYWxpemVyKCk7CiAgfQoKICB2aXNpdExpYnJhcnlEZXBlbmRlbmN5KExpYnJhcnlEZXBlbmRlbmN5IG5vZGUpIHsKICAgIHJldHVybiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgfQoKICB2aXNpdExpYnJhcnlQYXJ0KExpYnJhcnlQYXJ0IG5vZGUpIHsKICAgIHJldHVybiBkZWZhdWx0VHJlZU5vZGUobm9kZSk7CiAgfQoKICB2aXNpdExvYWRMaWJyYXJ5KExvYWRMaWJyYXJ5IG5vZGUpIHsKICAgIHJldHVybiBuZXcgTG9hZExpYnJhcnkobm9kZS5pbXBvcnQpOwogIH0KCiAgdmlzaXRMb2NhbEluaXRpYWxpemVyKExvY2FsSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgcmV0dXJuIG5ldyBMb2NhbEluaXRpYWxpemVyKGNsb25lKG5vZGUudmFyaWFibGUpKTsKICB9CgogIHZpc2l0Q29tcG9uZW50KENvbXBvbmVudCBub2RlKSB7CiAgICByZXR1cm4gZGVmYXVsdFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgdmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVyKFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgcmV0dXJuIG5ldyBSZWRpcmVjdGluZ0luaXRpYWxpemVyLmJ5UmVmZXJlbmNlKAogICAgICAgIG5vZGUudGFyZ2V0UmVmZXJlbmNlLCBjbG9uZShub2RlLmFyZ3VtZW50cykpOwogIH0KCiAgdmlzaXRTdXBlckluaXRpYWxpemVyKFN1cGVySW5pdGlhbGl6ZXIgbm9kZSkgewogICAgcmV0dXJuIG5ldyBTdXBlckluaXRpYWxpemVyLmJ5UmVmZXJlbmNlKAogICAgICAgIG5vZGUudGFyZ2V0UmVmZXJlbmNlLCBjbG9uZShub2RlLmFyZ3VtZW50cykpOwogIH0KCiAgdmlzaXRUeXBlZGVmKFR5cGVkZWYgbm9kZSkgewogICAgcmV0dXJuIGRlZmF1bHRUcmVlTm9kZShub2RlKTsKICB9Cn0KCmNsYXNzIENsb25lV2l0aG91dEJvZHkgZXh0ZW5kcyBDbG9uZVZpc2l0b3IgewogIENsb25lV2l0aG91dEJvZHkoCiAgICAgIHtNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHR5cGVTdWJzdGl0dXRpb24sCiAgICAgIGJvb2wgY2xvbmVBbm5vdGF0aW9ucyA9IHRydWV9KQogICAgICA6IHN1cGVyKAogICAgICAgICAgICB0eXBlU3Vic3RpdHV0aW9uOiB0eXBlU3Vic3RpdHV0aW9uLAogICAgICAgICAgICBjbG9uZUFubm90YXRpb25zOiBjbG9uZUFubm90YXRpb25zKTsKCiAgQG92ZXJyaWRlCiAgVHJlZU5vZGUgY2xvbmVGdW5jdGlvbk5vZGVCb2R5KEZ1bmN0aW9uTm9kZSBub2RlKSA9PiBudWxsOwp9CoKPAE5OPBYBIgETHAFMDQRHDyxCNDkuTjc2GQFCBk5RQhA2NCVBSgE1Kk0mKgYQBAEoNQQBJDMEAU5QPhYBTyMpRAQBKDNOLjgpEwQBKiMzTipPKRMEASYvBAEuFQQBLkUEATMwBAEnHEkEASdJBAEnKEkEASdIOwQBMy41BAEzLkgEATEtMwQBMS1GBAEjPAQBI08EATFNPwQBPTNMBAE7MkoEATEtNSAEATsyNSAEARcpBAEzIj0EATtORAQBN0oEATNBNQQBMT81BAExP1EEATFORiwIIR00FSozBAEpSAQBKUccBAErKgQBJzIEAS0hBAEfGgQBGzYEASdBTAQBJUBMBAElPCouIAQBIT0EAS81BAE1OQQBNSM9BAErKgQBJScEASsqBAEnKAQBJx4EARcsMwQBL0UEATc8BAEbOwQBJ0EEAS0hBAEvNjk1LwQBMTscNxQEAS00BAEtSAQBJ0UEASk4Rj0EAS0sHz0gBAEvMDA2PBAsBiBBBAElKD0XBAE/QgQBJxxRBAEvQAQBIUwoBAEbNjg1QgQBJUQEAS1LBAE3QDYkRDEhG0QEATcsRwQBDScxGR8lJz0xIUQxITc+BAEjRTEhQ0tEMSFBNz0cBAEbICQ2Jx8fITMzMSFEMSE3PRwEAUtDGR8lMUNBTUM9IUQxIgQBKy4bLj8GKyQ5BhNEMSEcBAE2OAokJxA1BgQBKUJEOjkoKiA9MCcvNz4EASM+MzAEAS8+BAErJAQBJz4EASk/BAEfOgQBJT0EASM7HwQBMzkEATkyBAElIgQBMS0xBAErHk0EATUlBAEzIgQBJyIEAScpBAExNwQBIyIEAT0zNgQBMS02BAEfIgQCAS4UNiUPMDEBDD0CARlwYWNrYWdlOmtlcm5lbC9jbG9uZS5kYXJ0QnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9kaWxsL2RpbGxfbWVtYmVyX2J1aWxkZXIuZGFydIoHLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZGlsbF9tZW1iZXJfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93IENvbnN0cnVjdG9yLCBGaWVsZCwgTWVtYmVyLCBQcm9jZWR1cmUsIFByb2NlZHVyZUtpbmQ7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIERlY2xhcmF0aW9uLAogICAgICAgIE1lbWJlckJ1aWxkZXIsCiAgICAgICAgaXNSZWRpcmVjdGluZ0dlbmVyYXRpdmVDb25zdHJ1Y3RvckltcGxlbWVudGF0aW9uOwoKaW1wb3J0ICcuLi9tb2RpZmllci5kYXJ0JwogICAgc2hvdyBhYnN0cmFjdE1hc2ssIGNvbnN0TWFzaywgZXh0ZXJuYWxNYXNrLCBmaW5hbE1hc2ssIHN0YXRpY01hc2s7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5oYW5kbGVkOwoKY2xhc3MgRGlsbE1lbWJlckJ1aWxkZXIgZXh0ZW5kcyBNZW1iZXJCdWlsZGVyIHsKICBmaW5hbCBpbnQgbW9kaWZpZXJzOwoKICBmaW5hbCBNZW1iZXIgbWVtYmVyOwoKICBEaWxsTWVtYmVyQnVpbGRlcihNZW1iZXIgbWVtYmVyLCBEZWNsYXJhdGlvbiBwYXJlbnQpCiAgICAgIDogbW9kaWZpZXJzID0gY29tcHV0ZU1vZGlmaWVycyhtZW1iZXIpLAogICAgICAgIG1lbWJlciA9IG1lbWJlciwKICAgICAgICBzdXBlcihwYXJlbnQsIG1lbWJlci5maWxlT2Zmc2V0KTsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIkRpbGxNZW1iZXJCdWlsZGVyIjsKCiAgTWVtYmVyIGdldCB0YXJnZXQgPT4gbWVtYmVyOwoKICBTdHJpbmcgZ2V0IG5hbWUgPT4gbWVtYmVyLm5hbWUubmFtZTsKCiAgYm9vbCBnZXQgaXNDb25zdHJ1Y3RvciA9PiBtZW1iZXIgaXMgQ29uc3RydWN0b3I7CgogIFByb2NlZHVyZUtpbmQgZ2V0IGtpbmQgewogICAgZmluYWwgbWVtYmVyID0gdGhpcy5tZW1iZXI7CiAgICByZXR1cm4gbWVtYmVyIGlzIFByb2NlZHVyZSA/IG1lbWJlci5raW5kIDogbnVsbDsKICB9CgogIGJvb2wgZ2V0IGlzUmVndWxhck1ldGhvZCA9PiBpZGVudGljYWwoUHJvY2VkdXJlS2luZC5NZXRob2QsIGtpbmQpOwoKICBib29sIGdldCBpc0dldHRlciA9PiBpZGVudGljYWwoUHJvY2VkdXJlS2luZC5HZXR0ZXIsIGtpbmQpOwoKICBib29sIGdldCBpc1NldHRlciA9PiBpZGVudGljYWwoUHJvY2VkdXJlS2luZC5TZXR0ZXIsIGtpbmQpOwoKICBib29sIGdldCBpc09wZXJhdG9yID0+IGlkZW50aWNhbChQcm9jZWR1cmVLaW5kLk9wZXJhdG9yLCBraW5kKTsKCiAgYm9vbCBnZXQgaXNGYWN0b3J5ID0+IGlkZW50aWNhbChQcm9jZWR1cmVLaW5kLkZhY3RvcnksIGtpbmQpOwoKICBib29sIGdldCBpc1JlZGlyZWN0aW5nR2VuZXJhdGl2ZUNvbnN0cnVjdG9yIHsKICAgIHJldHVybiBpc0NvbnN0cnVjdG9yICYmCiAgICAgICAgaXNSZWRpcmVjdGluZ0dlbmVyYXRpdmVDb25zdHJ1Y3RvckltcGxlbWVudGF0aW9uKG1lbWJlcik7CiAgfQoKICBib29sIGdldCBpc1N5bnRoZXRpYyB7CiAgICBmaW5hbCBNZW1iZXIgbWVtYmVyID0gdGhpcy5tZW1iZXI7CiAgICByZXR1cm4gbWVtYmVyIGlzIENvbnN0cnVjdG9yICYmIG1lbWJlci5pc1N5bnRoZXRpYzsKICB9CgogIGJvb2wgZ2V0IGlzRmllbGQgPT4gbWVtYmVyIGlzIEZpZWxkOwp9CgppbnQgY29tcHV0ZU1vZGlmaWVycyhNZW1iZXIgbWVtYmVyKSB7CiAgaW50IG1vZGlmaWVyID0gbWVtYmVyLmlzQWJzdHJhY3QgPyBhYnN0cmFjdE1hc2sgOiAwOwogIG1vZGlmaWVyIHw9IG1lbWJlci5pc0V4dGVybmFsID8gZXh0ZXJuYWxNYXNrIDogMDsKICBpZiAobWVtYmVyIGlzIEZpZWxkKSB7CiAgICBtb2RpZmllciB8PSBtZW1iZXIuaXNDb25zdCA/IGNvbnN0TWFzayA6IDA7CiAgICBtb2RpZmllciB8PSBtZW1iZXIuaXNGaW5hbCA/IGZpbmFsTWFzayA6IDA7CiAgICBtb2RpZmllciB8PSBtZW1iZXIuaXNTdGF0aWMgPyBzdGF0aWNNYXNrIDogMDsKICB9IGVsc2UgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgIG1vZGlmaWVyIHw9IG1lbWJlci5pc0NvbnN0ID8gY29uc3RNYXNrIDogMDsKICAgIG1vZGlmaWVyIHw9IG1lbWJlci5pc1N0YXRpYyA/IHN0YXRpY01hc2sgOiAwOwogIH0gZWxzZSBpZiAobWVtYmVyIGlzIENvbnN0cnVjdG9yKSB7CiAgICBtb2RpZmllciB8PSBtZW1iZXIuaXNDb25zdCA/IGNvbnN0TWFzayA6IDA7CiAgfSBlbHNlIHsKICAgIGR5bmFtaWMgcGFyZW50ID0gbWVtYmVyLnBhcmVudDsKICAgIHVuaGFuZGxlZCgiJHttZW1iZXIucnVudGltZVR5cGV9IiwgImNvbXB1dGVNb2RpZmllcnMiLCBtZW1iZXIuZmlsZU9mZnNldCwKICAgICAgICBVcmkuYmFzZS5yZXNvbHZlKHBhcmVudC5maWxlVXJpKSk7CiAgfQogIHJldHVybiBtb2RpZmllcjsKfQpXAE5OPAEjASE/AScJFRc6ARpHASoBMBcBFwE3LhkqAS8BHwEnATMBGyA1BAFFAT4BPgFCAUABMBxCBAEZJzgEAScCASY3NBkwMDIkMDImMAskTisEEwIBOXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9kaWxsL2RpbGxfbWVtYmVyX2J1aWxkZXIuZGFydC9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc2NvcGUuZGFydLaFLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc2NvcGU7CgppbXBvcnQgJ2J1aWxkZXIvYnVpbGRlci5kYXJ0JwogICAgc2hvdyBEZWNsYXJhdGlvbiwgTmFtZUl0ZXJhdG9yLCBUeXBlVmFyaWFibGVCdWlsZGVyOwoKaW1wb3J0ICdmYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgbWVzc2FnZUludGVybmFsUHJvYmxlbUV4dGVuZGluZ1VubW9kaWZpYWJsZVNjb3BlLAogICAgICAgIHRlbXBsYXRlQWNjZXNzRXJyb3IsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2UsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkQ2F1c2U7CgppbXBvcnQgJ3Byb2JsZW1zLmRhcnQnIHNob3cgaW50ZXJuYWxQcm9ibGVtLCB1bnN1cHBvcnRlZDsKCmNsYXNzIE11dGFibGVTY29wZSB7CiAgLy8vIE5hbWVzIGRlY2xhcmVkIGluIHRoaXMgc2NvcGUuCiAgTWFwPFN0cmluZywgRGVjbGFyYXRpb24+IGxvY2FsOwoKICAvLy8gU2V0dGVycyBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlLgogIE1hcDxTdHJpbmcsIERlY2xhcmF0aW9uPiBzZXR0ZXJzOwoKICAvLy8gVGhlIHNjb3BlIHRoYXQgdGhpcyBzY29wZSBpcyBuZXN0ZWQgd2l0aGluLCBvciBgbnVsbGAgaWYgdGhpcyBpcyB0aGUgdG9wCiAgLy8vIGxldmVsIHNjb3BlLgogIFNjb3BlIHBhcmVudDsKCiAgZmluYWwgU3RyaW5nIGNsYXNzTmFtZU9yRGVidWdOYW1lOwoKICBNdXRhYmxlU2NvcGUoCiAgICAgIHRoaXMubG9jYWwsIHRoaXMuc2V0dGVycywgdGhpcy5wYXJlbnQsIHRoaXMuY2xhc3NOYW1lT3JEZWJ1Z05hbWUpIHsKICAgIGFzc2VydChjbGFzc05hbWVPckRlYnVnTmFtZSAhPSBudWxsKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJTY29wZSgkY2xhc3NOYW1lT3JEZWJ1Z05hbWUsICR7bG9jYWwua2V5c30pIjsKfQoKY2xhc3MgU2NvcGUgZXh0ZW5kcyBNdXRhYmxlU2NvcGUgewogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciBhbiBhdHRlbXB0IHRvIGRlY2xhcmUgbmV3IG5hbWVzIGluIHRoaXMgc2NvcGUgc2hvdWxkCiAgLy8vIHN1Y2NlZWQuCiAgZmluYWwgYm9vbCBpc01vZGlmaWFibGU7CgogIE1hcDxTdHJpbmcsIERlY2xhcmF0aW9uPiBsYWJlbHM7CgogIE1hcDxTdHJpbmcsIERlY2xhcmF0aW9uPiBmb3J3YXJkRGVjbGFyZWRMYWJlbHM7CgogIE1hcDxTdHJpbmcsIGludD4gdXNlZE5hbWVzOwoKICBTY29wZShNYXA8U3RyaW5nLCBEZWNsYXJhdGlvbj4gbG9jYWwsIE1hcDxTdHJpbmcsIERlY2xhcmF0aW9uPiBzZXR0ZXJzLAogICAgICBTY29wZSBwYXJlbnQsIFN0cmluZyBkZWJ1Z05hbWUsIHt0aGlzLmlzTW9kaWZpYWJsZTogdHJ1ZX0pCiAgICAgIDogc3VwZXIobG9jYWwsIHNldHRlcnMgPSBzZXR0ZXJzID8/IGNvbnN0IDxTdHJpbmcsIERlY2xhcmF0aW9uPnt9LCBwYXJlbnQsCiAgICAgICAgICAgIGRlYnVnTmFtZSk7CgogIFNjb3BlLnRvcCh7Ym9vbCBpc01vZGlmaWFibGU6IGZhbHNlfSkKICAgICAgOiB0aGlzKDxTdHJpbmcsIERlY2xhcmF0aW9uPnt9LCA8U3RyaW5nLCBEZWNsYXJhdGlvbj57fSwgbnVsbCwgInRvcCIsCiAgICAgICAgICAgIGlzTW9kaWZpYWJsZTogaXNNb2RpZmlhYmxlKTsKCiAgU2NvcGUuaW1tdXRhYmxlKCkKICAgICAgOiB0aGlzKGNvbnN0IDxTdHJpbmcsIERlY2xhcmF0aW9uPnt9LCBjb25zdCA8U3RyaW5nLCBEZWNsYXJhdGlvbj57fSwgbnVsbCwKICAgICAgICAgICAgImltbXV0YWJsZSIsCiAgICAgICAgICAgIGlzTW9kaWZpYWJsZTogZmFsc2UpOwoKICBTY29wZS5uZXN0ZWQoU2NvcGUgcGFyZW50LCBTdHJpbmcgZGVidWdOYW1lLCB7Ym9vbCBpc01vZGlmaWFibGU6IHRydWV9KQogICAgICA6IHRoaXMoCiAgICAgICAgICAgIDxTdHJpbmcsIERlY2xhcmF0aW9uPnt9LCA8U3RyaW5nLCBEZWNsYXJhdGlvbj57fSwgcGFyZW50LCBkZWJ1Z05hbWUsCiAgICAgICAgICAgIGlzTW9kaWZpYWJsZTogaXNNb2RpZmlhYmxlKTsKCiAgSXRlcmF0b3I8RGVjbGFyYXRpb24+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gbmV3IFNjb3BlTG9jYWxEZWNsYXJhdGlvbkl0ZXJhdG9yKHRoaXMpOwogIH0KCiAgTmFtZUl0ZXJhdG9yIGdldCBuYW1lSXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBTY29wZUxvY2FsRGVjbGFyYXRpb25OYW1lSXRlcmF0b3IodGhpcyk7CiAgfQoKICBTY29wZSBjb3B5V2l0aFBhcmVudChTY29wZSBwYXJlbnQsIFN0cmluZyBkZWJ1Z05hbWUpIHsKICAgIHJldHVybiBuZXcgU2NvcGUoc3VwZXIubG9jYWwsIHN1cGVyLnNldHRlcnMsIHBhcmVudCwgZGVidWdOYW1lLAogICAgICAgIGlzTW9kaWZpYWJsZTogaXNNb2RpZmlhYmxlKTsKICB9CgogIC8vLyBEb24ndCB1c2UgdGhpcy4gVXNlIFtiZWNvbWVQYXJ0T2ZdIGluc3RlYWQuCiAgdm9pZCBzZXQgbG9jYWwoXykgPT4gdW5zdXBwb3J0ZWQoImxvY2FsPSIsIC0xLCBudWxsKTsKCiAgLy8vIERvbid0IHVzZSB0aGlzLiBVc2UgW2JlY29tZVBhcnRPZl0gaW5zdGVhZC4KICB2b2lkIHNldCBzZXR0ZXJzKF8pID0+IHVuc3VwcG9ydGVkKCJzZXR0ZXJzPSIsIC0xLCBudWxsKTsKCiAgLy8vIERvbid0IHVzZSB0aGlzLiBVc2UgW2JlY29tZVBhcnRPZl0gaW5zdGVhZC4KICB2b2lkIHNldCBwYXJlbnQoXykgPT4gdW5zdXBwb3J0ZWQoInBhcmVudD0iLCAtMSwgbnVsbCk7CgogIC8vLyBUaGlzIHNjb3BlIGJlY29tZXMgZXF1aXZhbGVudCB0byBbc2NvcGVdLiBUaGlzIGlzIHVzZWQgZm9yIHBhcnRzIHRvCiAgLy8vIGJlY29tZSBwYXJ0IG9mIHRoZWlyIGxpYnJhcnkncyBzY29wZS4KICB2b2lkIGJlY29tZVBhcnRPZihTY29wZSBzY29wZSkgewogICAgYXNzZXJ0KHBhcmVudC5wYXJlbnQgPT0gbnVsbCk7CiAgICBhc3NlcnQoc2NvcGUucGFyZW50LnBhcmVudCA9PSBudWxsKTsKICAgIHN1cGVyLmxvY2FsID0gc2NvcGUubG9jYWw7CiAgICBzdXBlci5zZXR0ZXJzID0gc2NvcGUuc2V0dGVyczsKICAgIHN1cGVyLnBhcmVudCA9IHNjb3BlLnBhcmVudDsKICB9CgogIFNjb3BlIGNyZWF0ZU5lc3RlZFNjb3BlKFN0cmluZyBkZWJ1Z05hbWUsIHtib29sIGlzTW9kaWZpYWJsZTogdHJ1ZX0pIHsKICAgIHJldHVybiBuZXcgU2NvcGUubmVzdGVkKHRoaXMsIGRlYnVnTmFtZSwgaXNNb2RpZmlhYmxlOiBpc01vZGlmaWFibGUpOwogIH0KCiAgU2NvcGUgd2l0aFR5cGVWYXJpYWJsZXMoTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzKSB7CiAgICBpZiAodHlwZVZhcmlhYmxlcyA9PSBudWxsKSByZXR1cm4gdGhpczsKICAgIFNjb3BlIG5ld1Njb3BlID0KICAgICAgICBuZXcgU2NvcGUubmVzdGVkKHRoaXMsICJ0eXBlIHZhcmlhYmxlcyIsIGlzTW9kaWZpYWJsZTogZmFsc2UpOwogICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHQgaW4gdHlwZVZhcmlhYmxlcykgewogICAgICBuZXdTY29wZS5sb2NhbFt0Lm5hbWVdID0gdDsKICAgIH0KICAgIHJldHVybiBuZXdTY29wZTsKICB9CgogIC8vLyBDcmVhdGUgYSBzcGVjaWFsIHNjb3BlIGZvciB1c2UgYnkgbGFiZWxlZCBzdGFtZW50cy4gVGhpcyBzY29wZSBkb2Vzbid0CiAgLy8vIGludHJvZHVjZSBhIG5ldyBzY29wZSBmb3IgbG9jYWwgdmFyaWFibGVzLCBvbmx5IGZvciBsYWJlbHMuIFRoaXMgZGVhbHMKICAvLy8gd2l0aCBjb3JuZXIgY2FzZXMgbGlrZSB0aGlzOgogIC8vLwogIC8vLyAgICAgTDogdmFyIHg7CiAgLy8vICAgICB4ID0gNDI7CiAgLy8vICAgICBwcmludCgiVGhlIGFuc3dlciBpcyAkeC4iKTsKICBTY29wZSBjcmVhdGVOZXN0ZWRMYWJlbFNjb3BlKCkgewogICAgcmV0dXJuIG5ldyBTY29wZShsb2NhbCwgc2V0dGVycywgcGFyZW50LCAibGFiZWwiLCBpc01vZGlmaWFibGU6IHRydWUpOwogIH0KCiAgdm9pZCByZWNvcmRVc2UoU3RyaW5nIG5hbWUsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkgewogICAgaWYgKGlzTW9kaWZpYWJsZSkgewogICAgICB1c2VkTmFtZXMgPz89IDxTdHJpbmcsIGludD57fTsKICAgICAgdXNlZE5hbWVzLnB1dElmQWJzZW50KG5hbWUsICgpID0+IGNoYXJPZmZzZXQpOwogICAgfQogIH0KCiAgRGVjbGFyYXRpb24gbG9va3VwSW4oU3RyaW5nIG5hbWUsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSwKICAgICAgTWFwPFN0cmluZywgRGVjbGFyYXRpb24+IG1hcCwgYm9vbCBpc0luc3RhbmNlU2NvcGUpIHsKICAgIERlY2xhcmF0aW9uIGJ1aWxkZXIgPSBtYXBbbmFtZV07CiAgICBpZiAoYnVpbGRlciA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmIChidWlsZGVyLm5leHQgIT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IEFtYmlndW91c0J1aWxkZXIobmFtZS5pc0VtcHR5ID8gY2xhc3NOYW1lT3JEZWJ1Z05hbWUgOiBuYW1lLAogICAgICAgICAgYnVpbGRlciwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9IGVsc2UgaWYgKCFpc0luc3RhbmNlU2NvcGUgJiYgYnVpbGRlci5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGJ1aWxkZXI7CiAgICB9CiAgfQoKICBEZWNsYXJhdGlvbiBsb29rdXAoU3RyaW5nIG5hbWUsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSwKICAgICAge2Jvb2wgaXNJbnN0YW5jZVNjb3BlOiB0cnVlfSkgewogICAgcmVjb3JkVXNlKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgRGVjbGFyYXRpb24gYnVpbGRlciA9CiAgICAgICAgbG9va3VwSW4obmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSwgbG9jYWwsIGlzSW5zdGFuY2VTY29wZSk7CiAgICBpZiAoYnVpbGRlciAhPSBudWxsKSByZXR1cm4gYnVpbGRlcjsKICAgIGJ1aWxkZXIgPSBsb29rdXBJbihuYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpLCBzZXR0ZXJzLCBpc0luc3RhbmNlU2NvcGUpOwogICAgaWYgKGJ1aWxkZXIgIT0gbnVsbCAmJiAhYnVpbGRlci5oYXNQcm9ibGVtKSB7CiAgICAgIHJldHVybiBuZXcgQWNjZXNzRXJyb3JCdWlsZGVyKG5hbWUsIGJ1aWxkZXIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgfQogICAgaWYgKCFpc0luc3RhbmNlU2NvcGUpIHsKICAgICAgLy8gRm9yIHN0YXRpYyBsb29rdXAsIGRvIG5vdCBzZWFjaCB0aGUgcGFyZW50IHNjb3BlLgogICAgICByZXR1cm4gYnVpbGRlcjsKICAgIH0KICAgIHJldHVybiBidWlsZGVyID8/IHBhcmVudD8ubG9va3VwKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogIH0KCiAgRGVjbGFyYXRpb24gbG9va3VwU2V0dGVyKFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmksCiAgICAgIHtib29sIGlzSW5zdGFuY2VTY29wZTogdHJ1ZX0pIHsKICAgIHJlY29yZFVzZShuYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIERlY2xhcmF0aW9uIGJ1aWxkZXIgPQogICAgICAgIGxvb2t1cEluKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmksIHNldHRlcnMsIGlzSW5zdGFuY2VTY29wZSk7CiAgICBpZiAoYnVpbGRlciAhPSBudWxsKSByZXR1cm4gYnVpbGRlcjsKICAgIGJ1aWxkZXIgPSBsb29rdXBJbihuYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpLCBsb2NhbCwgaXNJbnN0YW5jZVNjb3BlKTsKICAgIGlmIChidWlsZGVyICE9IG51bGwgJiYgIWJ1aWxkZXIuaGFzUHJvYmxlbSkgewogICAgICByZXR1cm4gbmV3IEFjY2Vzc0Vycm9yQnVpbGRlcihuYW1lLCBidWlsZGVyLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIH0KICAgIGlmICghaXNJbnN0YW5jZVNjb3BlKSB7CiAgICAgIC8vIEZvciBzdGF0aWMgbG9va3VwLCBkbyBub3Qgc2VhY2ggdGhlIHBhcmVudCBzY29wZS4KICAgICAgcmV0dXJuIGJ1aWxkZXI7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlciA/PyBwYXJlbnQ/Lmxvb2t1cFNldHRlcihuYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9CgogIGJvb2wgaGFzTG9jYWxMYWJlbChTdHJpbmcgbmFtZSkgPT4gbGFiZWxzICE9IG51bGwgJiYgbGFiZWxzLmNvbnRhaW5zS2V5KG5hbWUpOwoKICB2b2lkIGRlY2xhcmVMYWJlbChTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gdGFyZ2V0KSB7CiAgICBpZiAoaXNNb2RpZmlhYmxlKSB7CiAgICAgIGxhYmVscyA/Pz0gPFN0cmluZywgRGVjbGFyYXRpb24+e307CiAgICAgIGxhYmVsc1tuYW1lXSA9IHRhcmdldDsKICAgIH0gZWxzZSB7CiAgICAgIGludGVybmFsUHJvYmxlbSgKICAgICAgICAgIG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1FeHRlbmRpbmdVbm1vZGlmaWFibGVTY29wZSwgLTEsIG51bGwpOwogICAgfQogIH0KCiAgdm9pZCBmb3J3YXJkRGVjbGFyZUxhYmVsKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiB0YXJnZXQpIHsKICAgIGRlY2xhcmVMYWJlbChuYW1lLCB0YXJnZXQpOwogICAgZm9yd2FyZERlY2xhcmVkTGFiZWxzID8/PSA8U3RyaW5nLCBEZWNsYXJhdGlvbj57fTsKICAgIGZvcndhcmREZWNsYXJlZExhYmVsc1tuYW1lXSA9IHRhcmdldDsKICB9CgogIGJvb2wgY2xhaW1MYWJlbChTdHJpbmcgbmFtZSkgewogICAgaWYgKGZvcndhcmREZWNsYXJlZExhYmVscyA9PSBudWxsIHx8CiAgICAgICAgZm9yd2FyZERlY2xhcmVkTGFiZWxzLnJlbW92ZShuYW1lKSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZm9yd2FyZERlY2xhcmVkTGFiZWxzLmxlbmd0aCA9PSAwKSB7CiAgICAgIGZvcndhcmREZWNsYXJlZExhYmVscyA9IG51bGw7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIE1hcDxTdHJpbmcsIERlY2xhcmF0aW9uPiBnZXQgdW5jbGFpbWVkRm9yd2FyZERlY2xhcmF0aW9ucyB7CiAgICByZXR1cm4gZm9yd2FyZERlY2xhcmVkTGFiZWxzOwogIH0KCiAgRGVjbGFyYXRpb24gbG9va3VwTGFiZWwoU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiAobGFiZWxzID09IG51bGwgPyBudWxsIDogbGFiZWxzW25hbWVdKSA/PyBwYXJlbnQ/Lmxvb2t1cExhYmVsKG5hbWUpOwogIH0KCiAgLy8vIERlY2xhcmVzIHRoYXQgdGhlIG1lYW5pbmcgb2YgW25hbWVdIGluIHRoaXMgc2NvcGUgaXMgW2J1aWxkZXJdLgogIC8vLwogIC8vLyBJZiBuYW1lIHdhcyB1c2VkIHByZXZpb3VzbHkgaW4gdGhpcyBzY29wZSwgdGhpcyBtZXRob2QgcmV0dXJucyBhIG1lc3NhZ2UKICAvLy8gdGhhdCBjYW4gYmUgdXNlZCBhcyBjb250ZXh0IGZvciByZXBvcnRpbmcgYSBjb21waWxlLXRpbWUgZXJyb3IgYWJvdXQKICAvLy8gW25hbWVdIGJlaW5nIHVzZWQgYmVmb3JlIGl0cyBkZWNsYXJlZC4gW2ZpbGVVcmldIGlzIHVzZWQgdG8gYmluZCB0aGUKICAvLy8gbG9jYXRpb24gb2YgdGhpcyBtZXNzYWdlLgogIExvY2F0ZWRNZXNzYWdlIGRlY2xhcmUoU3RyaW5nIG5hbWUsIERlY2xhcmF0aW9uIGJ1aWxkZXIsIFVyaSBmaWxlVXJpKSB7CiAgICBpZiAoaXNNb2RpZmlhYmxlKSB7CiAgICAgIGlmICh1c2VkTmFtZXM/LmNvbnRhaW5zS2V5KG5hbWUpID8/IGZhbHNlKSB7CiAgICAgICAgcmV0dXJuIHRlbXBsYXRlRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZENhdXNlCiAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpCiAgICAgICAgICAgIC53aXRoTG9jYXRpb24oZmlsZVVyaSwgdXNlZE5hbWVzW25hbWVdLCBuYW1lLmxlbmd0aCk7CiAgICAgIH0KICAgICAgbG9jYWxbbmFtZV0gPSBidWlsZGVyOwogICAgfSBlbHNlIHsKICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgbWVzc2FnZUludGVybmFsUHJvYmxlbUV4dGVuZGluZ1VubW9kaWZpYWJsZVNjb3BlLCAtMSwgbnVsbCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgbWVyZ2UoCiAgICAgIFNjb3BlIHNjb3BlLAogICAgICBEZWNsYXJhdGlvbiBjb21wdXRlQW1iaWd1b3VzRGVjbGFyYXRpb24oCiAgICAgICAgICBTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gZXhpc3RpbmcsIERlY2xhcmF0aW9uIG1lbWJlcikpIHsKICAgIE1hcDxTdHJpbmcsIERlY2xhcmF0aW9uPiBtYXAgPSBsb2NhbDsKCiAgICB2b2lkIG1lcmdlTWVtYmVyKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBtZW1iZXIpIHsKICAgICAgRGVjbGFyYXRpb24gZXhpc3RpbmcgPSBtYXBbbmFtZV07CiAgICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgICAgaWYgKGV4aXN0aW5nICE9IG1lbWJlcikgewogICAgICAgICAgbWVtYmVyID0gY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uKG5hbWUsIGV4aXN0aW5nLCBtZW1iZXIpOwogICAgICAgIH0KICAgICAgfQogICAgICBtYXBbbmFtZV0gPSBtZW1iZXI7CiAgICB9CgogICAgc2NvcGUubG9jYWwuZm9yRWFjaChtZXJnZU1lbWJlcik7CiAgICBtYXAgPSBzZXR0ZXJzOwogICAgc2NvcGUuc2V0dGVycy5mb3JFYWNoKG1lcmdlTWVtYmVyKTsKICB9CgogIHZvaWQgZm9yRWFjaChmKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBtZW1iZXIpKSB7CiAgICBsb2NhbC5mb3JFYWNoKGYpOwogICAgc2V0dGVycy5mb3JFYWNoKGYpOwogIH0KCiAgU3RyaW5nIGdldCBkZWJ1Z1N0cmluZyB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgaW50IG5lc3RpbmdMZXZlbCA9IHdyaXRlT24oYnVmZmVyKTsKICAgIGZvciAoaW50IGkgPSBuZXN0aW5nTGV2ZWw7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGJ1ZmZlci53cml0ZWxuKCIkeycgICcgKiBpfX0iKTsKICAgIH0KICAgIHJldHVybiAiJGJ1ZmZlciI7CiAgfQoKICBpbnQgd3JpdGVPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIGludCBuZXN0aW5nTGV2ZWwgPSAocGFyZW50Py53cml0ZU9uKHNpbmspID8/IC0xKSArIDE7CiAgICBTdHJpbmcgaW5kZW50ID0gIiAgIiAqIG5lc3RpbmdMZXZlbDsKICAgIHNpbmsud3JpdGVsbigiJGluZGVudHsiKTsKICAgIGxvY2FsLmZvckVhY2goKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBtZW1iZXIpIHsKICAgICAgc2luay53cml0ZWxuKCIkaW5kZW50ICAkbmFtZSIpOwogICAgfSk7CiAgICBzZXR0ZXJzLmZvckVhY2goKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBtZW1iZXIpIHsKICAgICAgc2luay53cml0ZWxuKCIkaW5kZW50ICAkbmFtZT0iKTsKICAgIH0pOwogICAgcmV0dXJuIG5lc3RpbmdMZXZlbDsKICB9CgogIFNjb3BlIGNvbXB1dGVNaXhpblNjb3BlKCkgewogICAgTGlzdDxTdHJpbmc+IG5hbWVzID0gdGhpcy5sb2NhbC5rZXlzLnRvTGlzdCgpOwogICAgTWFwPFN0cmluZywgRGVjbGFyYXRpb24+IGxvY2FsID0gPFN0cmluZywgRGVjbGFyYXRpb24+e307CiAgICBib29sIG5lZWRzQ29weSA9IGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgewogICAgICBTdHJpbmcgbmFtZSA9IG5hbWVzW2ldOwogICAgICBEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiA9IHRoaXMubG9jYWxbbmFtZV07CiAgICAgIGlmIChkZWNsYXJhdGlvbi5pc1N0YXRpYykgewogICAgICAgIG5lZWRzQ29weSA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbG9jYWxbbmFtZV0gPSBkZWNsYXJhdGlvbjsKICAgICAgfQogICAgfQogICAgbmFtZXMgPSB0aGlzLnNldHRlcnMua2V5cy50b0xpc3QoKTsKICAgIE1hcDxTdHJpbmcsIERlY2xhcmF0aW9uPiBzZXR0ZXJzID0gPFN0cmluZywgRGVjbGFyYXRpb24+e307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIFN0cmluZyBuYW1lID0gbmFtZXNbaV07CiAgICAgIERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gdGhpcy5zZXR0ZXJzW25hbWVdOwogICAgICBpZiAoZGVjbGFyYXRpb24uaXNTdGF0aWMpIHsKICAgICAgICBuZWVkc0NvcHkgPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIHNldHRlcnNbbmFtZV0gPSBkZWNsYXJhdGlvbjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5lZWRzQ29weQogICAgICAgID8gbmV3IFNjb3BlKGxvY2FsLCBzZXR0ZXJzLCBwYXJlbnQsIGNsYXNzTmFtZU9yRGVidWdOYW1lLAogICAgICAgICAgICBpc01vZGlmaWFibGU6IGlzTW9kaWZpYWJsZSkKICAgICAgICA6IHRoaXM7CiAgfQp9CgpjbGFzcyBTY29wZUJ1aWxkZXIgewogIGZpbmFsIFNjb3BlIHNjb3BlOwoKICBTY29wZUJ1aWxkZXIodGhpcy5zY29wZSk7CgogIHZvaWQgYWRkTWVtYmVyKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBidWlsZGVyKSB7CiAgICBzY29wZS5sb2NhbFtuYW1lXSA9IGJ1aWxkZXI7CiAgfQoKICB2b2lkIGFkZFNldHRlcihTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gYnVpbGRlcikgewogICAgc2NvcGUuc2V0dGVyc1tuYW1lXSA9IGJ1aWxkZXI7CiAgfQoKICBEZWNsYXJhdGlvbiBvcGVyYXRvciBbXShTdHJpbmcgbmFtZSkgPT4gc2NvcGUubG9jYWxbbmFtZV07Cn0KCmFic3RyYWN0IGNsYXNzIFByb2JsZW1CdWlsZGVyIGV4dGVuZHMgRGVjbGFyYXRpb24gewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBmaW5hbCBEZWNsYXJhdGlvbiBidWlsZGVyOwoKICBmaW5hbCBpbnQgY2hhck9mZnNldDsKCiAgZmluYWwgVXJpIGZpbGVVcmk7CgogIFByb2JsZW1CdWlsZGVyKHRoaXMubmFtZSwgdGhpcy5idWlsZGVyLCB0aGlzLmNoYXJPZmZzZXQsIHRoaXMuZmlsZVVyaSk7CgogIGdldCB0YXJnZXQgPT4gbnVsbDsKCiAgYm9vbCBnZXQgaGFzUHJvYmxlbSA9PiB0cnVlOwoKICBNZXNzYWdlIGdldCBtZXNzYWdlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzID0+IG5hbWU7Cn0KCi8vLyBSZXByZXNlbnRzIGEgW2J1aWxkZXJdIHRoYXQncyBiZWluZyBhY2Nlc3NlZCBpbmNvcnJlY3RseS4gRm9yIGV4YW1wbGUsIGFuCi8vLyBhdHRlbXB0IHRvIHdyaXRlIHRvIGEgZmluYWwgZmllbGQsIG9yIHRvIHJlYWQgZnJvbSBhIHNldHRlci4KY2xhc3MgQWNjZXNzRXJyb3JCdWlsZGVyIGV4dGVuZHMgUHJvYmxlbUJ1aWxkZXIgewogIEFjY2Vzc0Vycm9yQnVpbGRlcigKICAgICAgU3RyaW5nIG5hbWUsIERlY2xhcmF0aW9uIGJ1aWxkZXIsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkKICAgICAgOiBzdXBlcihuYW1lLCBidWlsZGVyLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKCiAgRGVjbGFyYXRpb24gZ2V0IHBhcmVudCA9PiBidWlsZGVyOwoKICBib29sIGdldCBpc0ZpbmFsID0+IGJ1aWxkZXIuaXNGaW5hbDsKCiAgYm9vbCBnZXQgaXNGaWVsZCA9PiBidWlsZGVyLmlzRmllbGQ7CgogIGJvb2wgZ2V0IGlzUmVndWxhck1ldGhvZCA9PiBidWlsZGVyLmlzUmVndWxhck1ldGhvZDsKCiAgYm9vbCBnZXQgaXNHZXR0ZXIgPT4gIWJ1aWxkZXIuaXNHZXR0ZXI7CgogIGJvb2wgZ2V0IGlzU2V0dGVyID0+ICFidWlsZGVyLmlzU2V0dGVyOwoKICBib29sIGdldCBpc0luc3RhbmNlTWVtYmVyID0+IGJ1aWxkZXIuaXNJbnN0YW5jZU1lbWJlcjsKCiAgYm9vbCBnZXQgaXNTdGF0aWMgPT4gYnVpbGRlci5pc1N0YXRpYzsKCiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiBidWlsZGVyLmlzVG9wTGV2ZWw7CgogIGJvb2wgZ2V0IGlzVHlwZURlY2xhcmF0aW9uID0+IGJ1aWxkZXIuaXNUeXBlRGVjbGFyYXRpb247CgogIGJvb2wgZ2V0IGlzTG9jYWwgPT4gYnVpbGRlci5pc0xvY2FsOwoKICBNZXNzYWdlIGdldCBtZXNzYWdlID0+IHRlbXBsYXRlQWNjZXNzRXJyb3Iud2l0aEFyZ3VtZW50cyhuYW1lKTsKfQoKY2xhc3MgQW1iaWd1b3VzQnVpbGRlciBleHRlbmRzIFByb2JsZW1CdWlsZGVyIHsKICBBbWJpZ3VvdXNCdWlsZGVyKAogICAgICBTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gYnVpbGRlciwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKQogICAgICA6IHN1cGVyKG5hbWUsIGJ1aWxkZXIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwoKICBEZWNsYXJhdGlvbiBnZXQgcGFyZW50ID0+IG51bGw7CgogIE1lc3NhZ2UgZ2V0IG1lc3NhZ2UgPT4gdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2Uud2l0aEFyZ3VtZW50cyhuYW1lKTsKCiAgLy8gVE9ETyhhaGUpOiBBbHNvIHByb3ZpZGUgY29udGV4dC4KCiAgRGVjbGFyYXRpb24gZ2V0Rmlyc3REZWNsYXJhdGlvbigpIHsKICAgIERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gYnVpbGRlcjsKICAgIHdoaWxlIChkZWNsYXJhdGlvbi5uZXh0ICE9IG51bGwpIHsKICAgICAgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbi5uZXh0OwogICAgfQogICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogIH0KfQoKY2xhc3MgU2NvcGVMb2NhbERlY2xhcmF0aW9uSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcjxEZWNsYXJhdGlvbj4gewogIEl0ZXJhdG9yPERlY2xhcmF0aW9uPiBsb2NhbDsKICBmaW5hbCBJdGVyYXRvcjxEZWNsYXJhdGlvbj4gc2V0dGVyczsKICBEZWNsYXJhdGlvbiBjdXJyZW50OwoKICBTY29wZUxvY2FsRGVjbGFyYXRpb25JdGVyYXRvcihTY29wZSBzY29wZSkKICAgICAgOiBsb2NhbCA9IHNjb3BlLmxvY2FsLnZhbHVlcy5pdGVyYXRvciwKICAgICAgICBzZXR0ZXJzID0gc2NvcGUuc2V0dGVycy52YWx1ZXMuaXRlcmF0b3I7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBEZWNsYXJhdGlvbiBuZXh0ID0gY3VycmVudD8ubmV4dDsKICAgIGlmIChuZXh0ICE9IG51bGwpIHsKICAgICAgY3VycmVudCA9IG5leHQ7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKGxvY2FsICE9IG51bGwpIHsKICAgICAgaWYgKGxvY2FsLm1vdmVOZXh0KCkpIHsKICAgICAgICBjdXJyZW50ID0gbG9jYWwuY3VycmVudDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBsb2NhbCA9IG51bGw7CiAgICB9CiAgICBpZiAoc2V0dGVycy5tb3ZlTmV4dCgpKSB7CiAgICAgIGN1cnJlbnQgPSBzZXR0ZXJzLmN1cnJlbnQ7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgY3VycmVudCA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCmNsYXNzIFNjb3BlTG9jYWxEZWNsYXJhdGlvbk5hbWVJdGVyYXRvciBleHRlbmRzIFNjb3BlTG9jYWxEZWNsYXJhdGlvbkl0ZXJhdG9yCiAgICBpbXBsZW1lbnRzIE5hbWVJdGVyYXRvciB7CiAgSXRlcmF0b3I8U3RyaW5nPiBsb2NhbE5hbWVzOwogIGZpbmFsIEl0ZXJhdG9yPFN0cmluZz4gc2V0dGVyTmFtZXM7CgogIFN0cmluZyBuYW1lOwoKICBTY29wZUxvY2FsRGVjbGFyYXRpb25OYW1lSXRlcmF0b3IoU2NvcGUgc2NvcGUpCiAgICAgIDogbG9jYWxOYW1lcyA9IHNjb3BlLmxvY2FsLmtleXMuaXRlcmF0b3IsCiAgICAgICAgc2V0dGVyTmFtZXMgPSBzY29wZS5zZXR0ZXJzLmtleXMuaXRlcmF0b3IsCiAgICAgICAgc3VwZXIoc2NvcGUpOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgRGVjbGFyYXRpb24gbmV4dCA9IGN1cnJlbnQ/Lm5leHQ7CiAgICBpZiAobmV4dCAhPSBudWxsKSB7CiAgICAgIGN1cnJlbnQgPSBuZXh0OwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChsb2NhbCAhPSBudWxsKSB7CiAgICAgIGlmIChsb2NhbC5tb3ZlTmV4dCgpKSB7CiAgICAgICAgbG9jYWxOYW1lcy5tb3ZlTmV4dCgpOwogICAgICAgIGN1cnJlbnQgPSBsb2NhbC5jdXJyZW50OwogICAgICAgIG5hbWUgPSBsb2NhbE5hbWVzLmN1cnJlbnQ7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgbG9jYWxOYW1lcyA9IG51bGw7CiAgICB9CiAgICBpZiAoc2V0dGVycy5tb3ZlTmV4dCgpKSB7CiAgICAgIHNldHRlck5hbWVzLm1vdmVOZXh0KCk7CiAgICAgIGN1cnJlbnQgPSBzZXR0ZXJzLmN1cnJlbnQ7CiAgICAgIG5hbWUgPSBzZXR0ZXJOYW1lcy5jdXJyZW50OwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIGN1cnJlbnQgPSBudWxsOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9CoHfAE5OPAEVAR45ARoJGBE6HSozAToBFSQiASYkAU8TEAElARBKKgQBRgIBI00PGwEjATIBHgFKQVEYAShMKQEUURkiAUoOUSkBJzQEASI4BAE5RCUEATI4ATI8ATI6AUosIyMpHyMhBAFJSgQBRSwVRzMiBhUEAU1NIwYUEiYjSwQBPRglNQYEAUE8JSYgTik/Ew0WBgQBPyYqGkUpTTJJBhw7FgZBBAFFJioaRylLMkkGHDsWBkcEAVEBNxgqHQ0XRwYEAT4gNyoEASEpQi0kBhEEAT4iBAEpUAQBRgZPS0sgShgzOSFCCB0NF0cGEQQBDhMvRCoBOCgeIkgKCBoGASYTKAQBNRYYBAEbLiguJgYWBAEhOikeNiYIOCcIGQQBHjM+HC0eMiIaDyMIBihALR40IhoPJQgGFUIoEAQCARUVARwBNSEEATUjBAE9AgE0FQEdARgBFQFKARYBHwEXAQwoAgFOQTIWRTMBJQEnAScBNwEqASoBOQEpAS0BOwEnAUICATAURTMBIgFPASYBJicnJgYYBAIBRx8nFwEtLTEBFCYYFhMGGR4hFQgUBh4hEw0WFAYEAgFOHh8mAQ8BMTAzFgEUJhgWEwYZHh8hIxUIGQYeHiEiEw0WFAYEAgEmcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3Njb3BlLmRhcnRFc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NvdXJjZS9zb3VyY2VfY2xhc3NfYnVpbGRlci5kYXJ0q+cvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5zb3VyY2VfY2xhc3NfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93IENsYXNzLCBDb25zdHJ1Y3RvciwgTWVtYmVyLCBTdXBlcnR5cGUsIFRyZWVOb2RlOwoKaW1wb3J0ICcuLi9kaWxsL2RpbGxfbWVtYmVyX2J1aWxkZXIuZGFydCcgc2hvdyBEaWxsTWVtYmVyQnVpbGRlcjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBNZXNzYWdlLAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIHRlbXBsYXRlQmFkVHlwZVZhcmlhYmxlSW5TdXBlcnR5cGUsCiAgICAgICAgdGVtcGxhdGVDb25mbGljdHNXaXRoQ29uc3RydWN0b3IsCiAgICAgICAgdGVtcGxhdGVDb25mbGljdHNXaXRoRmFjdG9yeSwKICAgICAgICB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhNZW1iZXIsCiAgICAgICAgdGVtcGxhdGVDb25mbGljdHNXaXRoTWVtYmVyV2FybmluZywKICAgICAgICB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhTZXR0ZXIsCiAgICAgICAgdGVtcGxhdGVDb25mbGljdHNXaXRoU2V0dGVyV2FybmluZywKICAgICAgICB0ZW1wbGF0ZVN1cGVydHlwZUlzSWxsZWdhbDsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlciwKICAgICAgICBEZWNsYXJhdGlvbiwKICAgICAgICBGaWVsZEJ1aWxkZXIsCiAgICAgICAgRnVuY3Rpb25CdWlsZGVyLAogICAgICAgIEludmFsaWRUeXBlQnVpbGRlciwKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1ldGFkYXRhQnVpbGRlciwKICAgICAgICBTY29wZSwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyLAogICAgICAgIGNvbXBhcmVQcm9jZWR1cmVzOwoKaW1wb3J0ICcuLi9rZXJuZWwvdHlwZV9hbGdvcml0aG1zLmRhcnQnIHNob3cgVmFyaWFuY2UsIGNvbXB1dGVWYXJpYW5jZTsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bmV4cGVjdGVkLCB1bmhhbmRsZWQ7CgppbXBvcnQgJ3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCkNsYXNzIGluaXRpYWxpemVDbGFzcygKICAgIENsYXNzIGNscywKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcywKICAgIFN0cmluZyBuYW1lLAogICAgU291cmNlTGlicmFyeUJ1aWxkZXIgcGFyZW50LAogICAgaW50IHN0YXJ0Q2hhck9mZnNldCwKICAgIGludCBjaGFyT2Zmc2V0LAogICAgaW50IGNoYXJFbmRPZmZzZXQpIHsKICBjbHMgPz89IG5ldyBDbGFzcygKICAgICAgbmFtZTogbmFtZSwKICAgICAgdHlwZVBhcmFtZXRlcnM6CiAgICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyLmtlcm5lbFR5cGVQYXJhbWV0ZXJzRnJvbUJ1aWxkZXJzKHR5cGVWYXJpYWJsZXMpKTsKICBjbHMuZmlsZVVyaSA/Pz0gcGFyZW50LmZpbGVVcmk7CiAgaWYgKGNscy5zdGFydEZpbGVPZmZzZXQgPT0gVHJlZU5vZGUubm9PZmZzZXQpIHsKICAgIGNscy5zdGFydEZpbGVPZmZzZXQgPSBzdGFydENoYXJPZmZzZXQ7CiAgfQogIGlmIChjbHMuZmlsZU9mZnNldCA9PSBUcmVlTm9kZS5ub09mZnNldCkgewogICAgY2xzLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KICBpZiAoY2xzLmZpbGVFbmRPZmZzZXQgPT0gVHJlZU5vZGUubm9PZmZzZXQpIHsKICAgIGNscy5maWxlRW5kT2Zmc2V0ID0gY2hhckVuZE9mZnNldDsKICB9CgogIHJldHVybiBjbHM7Cn0KCmNsYXNzIFNvdXJjZUNsYXNzQnVpbGRlciBleHRlbmRzIENsYXNzQnVpbGRlcgogICAgaW1wbGVtZW50cyBDb21wYXJhYmxlPFNvdXJjZUNsYXNzQnVpbGRlcj4gewogIEBvdmVycmlkZQogIGZpbmFsIENsYXNzIGFjdHVhbENsczsKCiAgZmluYWwgTGlzdDxDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXI+IGNvbnN0cnVjdG9yUmVmZXJlbmNlczsKCiAgVHlwZUJ1aWxkZXIgbWl4ZWRJblR5cGU7CgogIGJvb2wgaXNNaXhpbkRlY2xhcmF0aW9uOwoKICBTb3VyY2VDbGFzc0J1aWxkZXIoCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgaW50IG1vZGlmaWVycywKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcywKICAgICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlLAogICAgICBMaXN0PFR5cGVCdWlsZGVyPiBpbnRlcmZhY2VzLAogICAgICBMaXN0PFR5cGVCdWlsZGVyPiBvblR5cGVzLAogICAgICBTY29wZSBzY29wZSwKICAgICAgU2NvcGUgY29uc3RydWN0b3JzLAogICAgICBMaWJyYXJ5QnVpbGRlciBwYXJlbnQsCiAgICAgIHRoaXMuY29uc3RydWN0b3JSZWZlcmVuY2VzLAogICAgICBpbnQgc3RhcnRDaGFyT2Zmc2V0LAogICAgICBpbnQgY2hhck9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQsCiAgICAgIHtDbGFzcyBjbHMsCiAgICAgIHRoaXMubWl4ZWRJblR5cGUsCiAgICAgIHRoaXMuaXNNaXhpbkRlY2xhcmF0aW9uID0gZmFsc2V9KQogICAgICA6IGFjdHVhbENscyA9IGluaXRpYWxpemVDbGFzcyhjbHMsIHR5cGVWYXJpYWJsZXMsIG5hbWUsIHBhcmVudCwKICAgICAgICAgICAgc3RhcnRDaGFyT2Zmc2V0LCBjaGFyT2Zmc2V0LCBjaGFyRW5kT2Zmc2V0KSwKICAgICAgICBzdXBlcihtZXRhZGF0YSwgbW9kaWZpZXJzLCBuYW1lLCB0eXBlVmFyaWFibGVzLCBzdXBlcnR5cGUsIGludGVyZmFjZXMsCiAgICAgICAgICAgIG9uVHlwZXMsIHNjb3BlLCBjb25zdHJ1Y3RvcnMsIHBhcmVudCwgY2hhck9mZnNldCk7CgogIEBvdmVycmlkZQogIENsYXNzIGdldCBjbHMgPT4gb3JpZ2luLmFjdHVhbENsczsKCiAgQG92ZXJyaWRlCiAgU291cmNlTGlicmFyeUJ1aWxkZXIgZ2V0IGxpYnJhcnkgPT4gc3VwZXIubGlicmFyeTsKCiAgQ2xhc3MgYnVpbGQoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlicmFyeUJ1aWxkZXIgY29yZUxpYnJhcnkpIHsKICAgIHZvaWQgYnVpbGRCdWlsZGVycyhTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24pIHsKICAgICAgZG8gewogICAgICAgIGlmIChkZWNsYXJhdGlvbi5wYXJlbnQgIT0gdGhpcykgewogICAgICAgICAgaWYgKGZpbGVVcmkgIT0gZGVjbGFyYXRpb24ucGFyZW50LmZpbGVVcmkpIHsKICAgICAgICAgICAgdW5leHBlY3RlZCgiJGZpbGVVcmkiLCAiJHtkZWNsYXJhdGlvbi5wYXJlbnQuZmlsZVVyaX0iLCBjaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgZmlsZVVyaSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB1bmV4cGVjdGVkKGZ1bGxOYW1lRm9yRXJyb3JzLCBkZWNsYXJhdGlvbi5wYXJlbnQ/LmZ1bGxOYW1lRm9yRXJyb3JzLAogICAgICAgICAgICAgICAgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBGaWVsZEJ1aWxkZXIpIHsKICAgICAgICAgIC8vIFRPRE8oYWhlKTogSXQgd291bGQgYmUgbmljZSB0byBoYXZlIGEgY29tbW9uIGludGVyZmFjZSBmb3IgdGhlCiAgICAgICAgICAvLyBidWlsZCBtZXRob2QgdG8gYXZvaWQgZHVwbGljYXRpbmcgdGhlc2UgdHdvIGNhc2VzLgogICAgICAgICAgTWVtYmVyIGZpZWxkID0gZGVjbGFyYXRpb24uYnVpbGQobGlicmFyeSk7CiAgICAgICAgICBpZiAoIWRlY2xhcmF0aW9uLmlzUGF0Y2ggJiYgZGVjbGFyYXRpb24ubmV4dCA9PSBudWxsKSB7CiAgICAgICAgICAgIGNscy5hZGRNZW1iZXIoZmllbGQpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgRnVuY3Rpb25CdWlsZGVyKSB7CiAgICAgICAgICBNZW1iZXIgZnVuY3Rpb24gPSBkZWNsYXJhdGlvbi5idWlsZChsaWJyYXJ5KTsKICAgICAgICAgIGZ1bmN0aW9uLnBhcmVudCA9IGNsczsKICAgICAgICAgIGlmICghZGVjbGFyYXRpb24uaXNQYXRjaCAmJiBkZWNsYXJhdGlvbi5uZXh0ID09IG51bGwpIHsKICAgICAgICAgICAgY2xzLmFkZE1lbWJlcihmdW5jdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHVuaGFuZGxlZCgiJHtkZWNsYXJhdGlvbi5ydW50aW1lVHlwZX0iLCAiYnVpbGRCdWlsZGVycyIsCiAgICAgICAgICAgICAgZGVjbGFyYXRpb24uY2hhck9mZnNldCwgZGVjbGFyYXRpb24uZmlsZVVyaSk7CiAgICAgICAgfQogICAgICAgIGRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb24ubmV4dDsKICAgICAgfSB3aGlsZSAoZGVjbGFyYXRpb24gIT0gbnVsbCk7CiAgICB9CgogICAgc2NvcGUuZm9yRWFjaChidWlsZEJ1aWxkZXJzKTsKICAgIGNvbnN0cnVjdG9ycy5mb3JFYWNoKGJ1aWxkQnVpbGRlcnMpOwogICAgc3VwZXJ0eXBlID0gY2hlY2tTdXBlcnR5cGUoc3VwZXJ0eXBlKTsKICAgIGFjdHVhbENscy5zdXBlcnR5cGUgPQogICAgICAgIHN1cGVydHlwZT8uYnVpbGRTdXBlcnR5cGUobGlicmFyeSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICBpZiAoIWlzTWl4aW5EZWNsYXJhdGlvbiAmJgogICAgICAgIGFjdHVhbENscy5zdXBlcnR5cGUgIT0gbnVsbCAmJgogICAgICAgIGFjdHVhbENscy5zdXBlcmNsYXNzLmlzTWl4aW5EZWNsYXJhdGlvbikgewogICAgICAvLyBEZWNsYXJlZCBtaXhpbnMgaGF2ZSBpbnRlcmZhY2VzIHRoYXQgY2FuIGJlIGltcGxlbWVudGVkLCBidXQgdGhleQogICAgICAvLyBjYW5ub3QgYmUgZXh0ZW5kZWQuICBIb3dldmVyLCBhIG1peGluIGRlY2xhcmF0aW9uIHdpdGggYSBzaW5nbGUKICAgICAgLy8gc3VwZXJjbGFzcyBjb25zdHJhaW50IGlzIGVuY29kZWQgd2l0aCB0aGUgY29uc3RyYWludCBhcyB0aGUgc3VwZXJ0eXBlLAogICAgICAvLyBhbmQgdGhhdCBpcyBhbGxvd2VkIHRvIGJlIGEgbWl4aW4ncyBpbnRlcmZhY2UuCiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlU3VwZXJ0eXBlSXNJbGxlZ2FsLndpdGhBcmd1bWVudHMoYWN0dWFsQ2xzLnN1cGVyY2xhc3MubmFtZSksCiAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICBmaWxlVXJpKTsKICAgICAgYWN0dWFsQ2xzLnN1cGVydHlwZSA9IG51bGw7CiAgICB9CiAgICBpZiAoYWN0dWFsQ2xzLnN1cGVydHlwZSA9PSBudWxsICYmIHN1cGVydHlwZSBpcyEgTmFtZWRUeXBlQnVpbGRlcikgewogICAgICBzdXBlcnR5cGUgPSBudWxsOwogICAgfQogICAgbWl4ZWRJblR5cGUgPSBjaGVja1N1cGVydHlwZShtaXhlZEluVHlwZSk7CiAgICBhY3R1YWxDbHMubWl4ZWRJblR5cGUgPQogICAgICAgIG1peGVkSW5UeXBlPy5idWlsZE1peGVkSW5UeXBlKGxpYnJhcnksIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgaWYgKGFjdHVhbENscy5taXhlZEluVHlwZSA9PSBudWxsICYmIG1peGVkSW5UeXBlIGlzISBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICAgIG1peGVkSW5UeXBlID0gbnVsbDsKICAgIH0KICAgIGFjdHVhbENscy5pc01peGluRGVjbGFyYXRpb24gPSBpc01peGluRGVjbGFyYXRpb247CiAgICAvLyBUT0RPKGFoZSk6IElmIGBjbHMuc3VwZXJ0eXBlYCBpcyBudWxsLCBhbmQgdGhpcyBpc24ndCBPYmplY3QsIHJlcG9ydCBhCiAgICAvLyBjb21waWxlLXRpbWUgZXJyb3IuCiAgICBjbHMuaXNBYnN0cmFjdCA9IGlzQWJzdHJhY3Q7CiAgICBpZiAoaW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW50ZXJmYWNlcy5sZW5ndGg7ICsraSkgewogICAgICAgIGludGVyZmFjZXNbaV0gPSBjaGVja1N1cGVydHlwZShpbnRlcmZhY2VzW2ldKTsKICAgICAgICBTdXBlcnR5cGUgc3VwZXJ0eXBlID0KICAgICAgICAgICAgaW50ZXJmYWNlc1tpXS5idWlsZFN1cGVydHlwZShsaWJyYXJ5LCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgICAgICBpZiAoc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgICAgIC8vIFRPRE8oYWhlKTogUmVwb3J0IGFuIGVycm9yIGlmIHN1cGVydHlwZSBpcyBudWxsLgogICAgICAgICAgYWN0dWFsQ2xzLmltcGxlbWVudGVkVHlwZXMuYWRkKHN1cGVydHlwZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgY29uc3RydWN0b3JzLmZvckVhY2goKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBjb25zdHJ1Y3RvcikgewogICAgICBEZWNsYXJhdGlvbiBtZW1iZXIgPSBzY29wZUJ1aWxkZXJbbmFtZV07CiAgICAgIGlmIChtZW1iZXIgPT0gbnVsbCkgcmV0dXJuOwogICAgICBpZiAoIW1lbWJlci5pc1N0YXRpYykgcmV0dXJuOwogICAgICAvLyBUT0RPKGFoZSk6IFJldmlzaXQgdGhlc2UgbWVzc2FnZXMuIEl0IHNlZW1zIGxpa2UgdGhlIGxhc3QgdHdvIHNob3VsZAogICAgICAvLyBiZSBgY29udGV4dGAgcGFyYW1ldGVyIHRvIHRoaXMgbWVzc2FnZS4KICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhNZW1iZXIud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgIGNvbnN0cnVjdG9yLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzRmFjdG9yeSkgewogICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aEZhY3Rvcnkud2l0aEFyZ3VtZW50cygiJHt0aGlzLm5hbWV9LiR7bmFtZX0iKSwKICAgICAgICAgICAgbWVtYmVyLmNoYXJPZmZzZXQsCiAgICAgICAgICAgIG5vTGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhDb25zdHJ1Y3RvcgogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoIiR7dGhpcy5uYW1lfS4ke25hbWV9IiksCiAgICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCk7CiAgICAgIH0KICAgIH0pOwoKICAgIHNjb3BlLnNldHRlcnMuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIERlY2xhcmF0aW9uIHNldHRlcikgewogICAgICBEZWNsYXJhdGlvbiBtZW1iZXIgPSBzY29wZUJ1aWxkZXJbbmFtZV07CiAgICAgIGlmIChtZW1iZXIgPT0gbnVsbCB8fAogICAgICAgICAgIShtZW1iZXIuaXNGaWVsZCAmJiAhbWVtYmVyLmlzRmluYWwgJiYgIW1lbWJlci5pc0NvbnN0IHx8CiAgICAgICAgICAgICAgbWVtYmVyLmlzUmVndWxhck1ldGhvZCAmJiBtZW1iZXIuaXNTdGF0aWMgJiYgc2V0dGVyLmlzU3RhdGljKSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAobWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIgPT0gc2V0dGVyLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlci53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICBzZXR0ZXIuY2hhck9mZnNldCwgbm9MZW5ndGgpOwogICAgICAgIC8vIFRPRE8oYWhlKTogQ29udGV4dCBhcmd1bWVudCB0byBwcmV2aW91cyBtZXNzYWdlPwogICAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVDb25mbGljdHNXaXRoU2V0dGVyLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhNZW1iZXJXYXJuaW5nLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgIHNldHRlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgICAgLy8gVE9ETyhhaGUpOiBDb250ZXh0IGFyZ3VtZW50IHRvIHByZXZpb3VzIG1lc3NhZ2U/CiAgICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhTZXR0ZXJXYXJuaW5nLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgIH0KICAgIH0pOwoKICAgIHNjb3BlLnNldHRlcnMuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIERlY2xhcmF0aW9uIHNldHRlcikgewogICAgICBEZWNsYXJhdGlvbiBjb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yU2NvcGVCdWlsZGVyW25hbWVdOwogICAgICBpZiAoY29uc3RydWN0b3IgPT0gbnVsbCB8fCAhc2V0dGVyLmlzU3RhdGljKSByZXR1cm47CiAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVDb25mbGljdHNXaXRoQ29uc3RydWN0b3Iud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgIHNldHRlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVDb25mbGljdHNXaXRoU2V0dGVyLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBjb25zdHJ1Y3Rvci5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICB9KTsKCiAgICBjbHMucHJvY2VkdXJlcy5zb3J0KGNvbXBhcmVQcm9jZWR1cmVzKTsKICAgIHJldHVybiBjbHM7CiAgfQoKICBUeXBlQnVpbGRlciBjaGVja1N1cGVydHlwZShUeXBlQnVpbGRlciBzdXBlcnR5cGUpIHsKICAgIGlmICh0eXBlVmFyaWFibGVzID09IG51bGwgfHwgc3VwZXJ0eXBlID09IG51bGwpIHJldHVybiBzdXBlcnR5cGU7CiAgICBNZXNzYWdlIG1lc3NhZ2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVWYXJpYWJsZXMubGVuZ3RoOyArK2kpIHsKICAgICAgaW50IHZhcmlhbmNlID0gY29tcHV0ZVZhcmlhbmNlKHR5cGVWYXJpYWJsZXNbaV0sIHN1cGVydHlwZSk7CiAgICAgIGlmICh2YXJpYW5jZSA9PSBWYXJpYW5jZS5jb250cmF2YXJpYW50IHx8CiAgICAgICAgICB2YXJpYW5jZSA9PSBWYXJpYW5jZS5pbnZhcmlhbnQpIHsKICAgICAgICBtZXNzYWdlID0gdGVtcGxhdGVCYWRUeXBlVmFyaWFibGVJblN1cGVydHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICB0eXBlVmFyaWFibGVzW2ldLm5hbWUsIHN1cGVydHlwZS5uYW1lKTsKICAgICAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgICB9CiAgICB9CiAgICBpZiAobWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgTmFtZWRUeXBlQnVpbGRlcihzdXBlcnR5cGUubmFtZSwgbnVsbCkKICAgICAgICAuLmJpbmQobmV3IEludmFsaWRUeXBlQnVpbGRlcihzdXBlcnR5cGUubmFtZSwKICAgICAgICAgICAgbWVzc2FnZS53aXRoTG9jYXRpb24oZmlsZVVyaSwgY2hhck9mZnNldCwgbm9MZW5ndGgpKSk7CiAgICB9CiAgICByZXR1cm4gc3VwZXJ0eXBlOwogIH0KCiAgdm9pZCBhZGRTeW50aGV0aWNDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvcikgewogICAgU3RyaW5nIG5hbWUgPSBjb25zdHJ1Y3Rvci5uYW1lLm5hbWU7CiAgICBjbHMuY29uc3RydWN0b3JzLmFkZChjb25zdHJ1Y3Rvcik7CiAgICBjb25zdHJ1Y3Rvci5wYXJlbnQgPSBjbHM7CiAgICBEaWxsTWVtYmVyQnVpbGRlciBtZW1iZXJCdWlsZGVyID0gbmV3IERpbGxNZW1iZXJCdWlsZGVyKGNvbnN0cnVjdG9yLCB0aGlzKTsKICAgIG1lbWJlckJ1aWxkZXIubmV4dCA9IGNvbnN0cnVjdG9yU2NvcGVCdWlsZGVyW25hbWVdOwogICAgY29uc3RydWN0b3JTY29wZUJ1aWxkZXIuYWRkTWVtYmVyKG5hbWUsIG1lbWJlckJ1aWxkZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGZpbmlzaFBhdGNoKCkgewogICAgaWYgKCFpc1BhdGNoKSByZXR1cm4gMDsKCiAgICAvLyBUT0RPKGFoZSk6IHJlc3RvcmUgZmlsZS1vZmZzZXQgb25jZSB3ZSB0cmFjayBib3RoIG9yaWdpbiBhbmQgcGF0Y2ggZmlsZQogICAgLy8gVVJJcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zMTU3OQogICAgY2xzLmFubm90YXRpb25zLmZvckVhY2goKG0pID0+IG0uZmlsZU9mZnNldCA9IG9yaWdpbi5jbHMuZmlsZU9mZnNldCk7CgogICAgaW50IGNvdW50ID0gMDsKICAgIHNjb3BlLmZvckVhY2goKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbikgewogICAgICBjb3VudCArPSBkZWNsYXJhdGlvbi5maW5pc2hQYXRjaCgpOwogICAgfSk7CiAgICBjb25zdHJ1Y3RvcnMuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uKSB7CiAgICAgIGNvdW50ICs9IGRlY2xhcmF0aW9uLmZpbmlzaFBhdGNoKCk7CiAgICB9KTsKICAgIHJldHVybiBjb3VudDsKICB9CgogIExpc3Q8RGVjbGFyYXRpb24+IGNvbXB1dGVEaXJlY3RTdXBlcnR5cGVzKENsYXNzQnVpbGRlciBvYmplY3RDbGFzcykgewogICAgZmluYWwgTGlzdDxEZWNsYXJhdGlvbj4gcmVzdWx0ID0gPERlY2xhcmF0aW9uPltdOwogICAgZmluYWwgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlID0gdGhpcy5zdXBlcnR5cGU7CiAgICBpZiAoc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgcmVzdWx0LmFkZChzdXBlcnR5cGUuZGVjbGFyYXRpb24pOwogICAgfSBlbHNlIGlmIChvYmplY3RDbGFzcyAhPSB0aGlzKSB7CiAgICAgIHJlc3VsdC5hZGQob2JqZWN0Q2xhc3MpOwogICAgfQogICAgZmluYWwgTGlzdDxUeXBlQnVpbGRlcj4gaW50ZXJmYWNlcyA9IHRoaXMuaW50ZXJmYWNlczsKICAgIGlmIChpbnRlcmZhY2VzICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgVHlwZUJ1aWxkZXIgaW50ZXJmYWNlID0gaW50ZXJmYWNlc1tpXTsKICAgICAgICByZXN1bHQuYWRkKGludGVyZmFjZS5kZWNsYXJhdGlvbik7CiAgICAgIH0KICAgIH0KICAgIGZpbmFsIFR5cGVCdWlsZGVyIG1peGVkSW5UeXBlID0gdGhpcy5taXhlZEluVHlwZTsKICAgIGlmIChtaXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgIHJlc3VsdC5hZGQobWl4ZWRJblR5cGUuZGVjbGFyYXRpb24pOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIGludCBjb21wYXJlVG8oU291cmNlQ2xhc3NCdWlsZGVyIG90aGVyKSB7CiAgICBpbnQgcmVzdWx0ID0gIiRmaWxlVXJpIi5jb21wYXJlVG8oIiR7b3RoZXIuZmlsZVVyaX0iKTsKICAgIGlmIChyZXN1bHQgIT0gMCkgcmV0dXJuIHJlc3VsdDsKICAgIHJldHVybiBjaGFyT2Zmc2V0LmNvbXBhcmVUbyhvdGhlci5jaGFyT2Zmc2V0KTsKICB9Cn0KgUMATk48ASQBIToBQgEdCRESLComJSwlLCQBJwkWJRUWGRwaGBkPFR0bAUgBNgFAARcPLREhGRQZFRIWUCIyKwQtIQQwJwQBDgIBLjAMGQFBARsBGwEWJhUTLx0kIRMaHSIbFhkSGChGOU8/AQwlAQw1AUo/Cyo3UBoTUSYMMkxANUIiDDU4IUIlDBFDPAooJQYBIikrGkEfJzNLSVA4Gk8WFBQiBkkYBi8cRU0aBjdOGyEeNDceSCE+NQoIBgFCLyIkTjFCLSMUUB8XDxQtOB8XCAgBPi8cRE8QCEBEKjxEKg9LKjxLKggIAT4/O0coQi0IASwQBAE2RhU1QzAsRDRECAYbODZDBhYEATopJx5QODwEAQwWHAFPP0oBEzsqCEIqCBIEAUg2Mh0pJh8GOh40LysIBjYfKwYTBAEMLDskMwQCATxwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL3NvdXJjZV9jbGFzc19idWlsZGVyLmRhcnRHc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnTAAadULy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc291cmNlX2xpYnJhcnlfYnVpbGRlcjsKCmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IGpzb25FbmNvZGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIEFyZ3VtZW50cywKICAgICAgICBDbGFzcywKICAgICAgICBDb25zdHJ1Y3RvciwKICAgICAgICBDb25zdHJ1Y3Rvckludm9jYXRpb24sCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBGaWVsZCwKICAgICAgICBGdW5jdGlvbk5vZGUsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgTGlicmFyeSwKICAgICAgICBMaWJyYXJ5RGVwZW5kZW5jeSwKICAgICAgICBMaWJyYXJ5UGFydCwKICAgICAgICBMaXN0TGl0ZXJhbCwKICAgICAgICBNYXBMaXRlcmFsLAogICAgICAgIE1lbWJlciwKICAgICAgICBOYW1lLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFNldExpdGVyYWwsCiAgICAgICAgU3RhdGljSW52b2NhdGlvbiwKICAgICAgICBTdHJpbmdMaXRlcmFsLAogICAgICAgIFN1cGVydHlwZSwKICAgICAgICBUeXBlZGVmLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiwKICAgICAgICBWb2lkVHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIHNob3cgQ2xhc3NIaWVyYXJjaHk7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2Nsb25lLmRhcnQnIHNob3cgQ2xvbmVWaXNpdG9yOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9zcmMvYm91bmRzX2NoZWNrcy5kYXJ0JwogICAgc2hvdwogICAgICAgIFR5cGVBcmd1bWVudElzc3VlLAogICAgICAgIGZpbmRUeXBlQXJndW1lbnRJc3N1ZXMsCiAgICAgICAgZmluZFR5cGVBcmd1bWVudElzc3Vlc0Zvckludm9jYXRpb24sCiAgICAgICAgZ2V0R2VuZXJpY1R5cGVOYW1lOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgc2hvdyBzdWJzdGl0dXRlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIHNob3cgVHlwZUVudmlyb25tZW50OwoKaW1wb3J0ICcuLi8uLi9iYXNlL3Jlc29sdmVfcmVsYXRpdmVfdXJpLmRhcnQnIHNob3cgcmVzb2x2ZVJlbGF0aXZlVXJpOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL2J1aWxkZXIvYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIsCiAgICAgICAgRGVjbGFyYXRpb24sCiAgICAgICAgRW51bUNvbnN0YW50SW5mbywKICAgICAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyLAogICAgICAgIEZ1bmN0aW9uVHlwZUJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTWVtYmVyQnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXIsCiAgICAgICAgTmFtZUl0ZXJhdG9yLAogICAgICAgIFByZWZpeEJ1aWxkZXIsCiAgICAgICAgRnVuY3Rpb25CdWlsZGVyLAogICAgICAgIFF1YWxpZmllZE5hbWUsCiAgICAgICAgU2NvcGUsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyLAogICAgICAgIFVucmVzb2x2ZWRUeXBlLAogICAgICAgIGZsYXR0ZW5OYW1lOwoKaW1wb3J0ICcuLi9jb21iaW5hdG9yLmRhcnQnIHNob3cgQ29tYmluYXRvcjsKCmltcG9ydCAnLi4vY29uZmlndXJhdGlvbi5kYXJ0JyBzaG93IENvbmZpZ3VyYXRpb247CgppbXBvcnQgJy4uL2V4cG9ydC5kYXJ0JyBzaG93IEV4cG9ydDsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBGb3JtYXR0ZWRNZXNzYWdlLAogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgbWVzc2FnZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDYXVzZSwKICAgICAgICBtZXNzYWdlQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lLAogICAgICAgIG1lc3NhZ2VFeHBlY3RlZFVyaSwKICAgICAgICBtZXNzYWdlTWVtYmVyV2l0aFNhbWVOYW1lQXNDbGFzcywKICAgICAgICBtZXNzYWdlR2VuZXJpY0Z1bmN0aW9uVHlwZUluQm91bmQsCiAgICAgICAgbWVzc2FnZUdlbmVyaWNGdW5jdGlvblR5cGVVc2VkQXNBY3R1YWxUeXBlQXJndW1lbnQsCiAgICAgICAgbWVzc2FnZUluY29ycmVjdFR5cGVBcmd1bWVudFZhcmlhYmxlLAogICAgICAgIG1lc3NhZ2VQYXJ0RXhwb3J0LAogICAgICAgIG1lc3NhZ2VQYXJ0RXhwb3J0Q29udGV4dCwKICAgICAgICBtZXNzYWdlUGFydEluUGFydCwKICAgICAgICBtZXNzYWdlUGFydEluUGFydExpYnJhcnlDb250ZXh0LAogICAgICAgIG1lc3NhZ2VQYXJ0T2ZTZWxmLAogICAgICAgIG1lc3NhZ2VQYXJ0T2ZUd29MaWJyYXJpZXMsCiAgICAgICAgbWVzc2FnZVBhcnRPZlR3b0xpYnJhcmllc0NvbnRleHQsCiAgICAgICAgbWVzc2FnZVR5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lLAogICAgICAgIG1lc3NhZ2VUeXBlVmFyaWFibGVTYW1lTmFtZUFzRW5jbG9zaW5nLAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIHRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlciwKICAgICAgICB0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhTZXR0ZXIsCiAgICAgICAgdGVtcGxhdGVDb25mbGljdHNXaXRoVHlwZVZhcmlhYmxlLAogICAgICAgIHRlbXBsYXRlQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lQ29udGV4dCwKICAgICAgICB0ZW1wbGF0ZUNvdWxkTm90UGFyc2VVcmksCiAgICAgICAgdGVtcGxhdGVEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWQsCiAgICAgICAgdGVtcGxhdGVEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWRDYXVzZSwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbiwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbkNhdXNlLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZEV4cG9ydCwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRFeHBvcnRJblR5cGUsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkSW1wb3J0LAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZEltcG9ydEluVHlwZSwKICAgICAgICB0ZW1wbGF0ZUV4cG9ydEhpZGVzRXhwb3J0LAogICAgICAgIHRlbXBsYXRlR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnQsCiAgICAgICAgdGVtcGxhdGVJbXBvcnRIaWRlc0ltcG9ydCwKICAgICAgICB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudCwKICAgICAgICB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudEluUmV0dXJuVHlwZSwKICAgICAgICB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudEluZmVycmVkLAogICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkLAogICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkSW5mZXJyZWQsCiAgICAgICAgdGVtcGxhdGVJbnRlcnNlY3Rpb25UeXBlQXNUeXBlQXJndW1lbnQsCiAgICAgICAgdGVtcGxhdGVMb2FkTGlicmFyeUhpZGVzTWVtYmVyLAogICAgICAgIHRlbXBsYXRlTG9jYWxEZWZpbml0aW9uSGlkZXNFeHBvcnQsCiAgICAgICAgdGVtcGxhdGVMb2NhbERlZmluaXRpb25IaWRlc0ltcG9ydCwKICAgICAgICB0ZW1wbGF0ZU1pc3NpbmdQYXJ0T2YsCiAgICAgICAgdGVtcGxhdGVOb3RBUHJlZml4SW5UeXBlQW5ub3RhdGlvbiwKICAgICAgICB0ZW1wbGF0ZVBhcnRPZkluTGlicmFyeSwKICAgICAgICB0ZW1wbGF0ZVBhcnRPZkxpYnJhcnlOYW1lTWlzbWF0Y2gsCiAgICAgICAgdGVtcGxhdGVQYXJ0T2ZVcmlNaXNtYXRjaCwKICAgICAgICB0ZW1wbGF0ZVBhcnRPZlVzZVVyaSwKICAgICAgICB0ZW1wbGF0ZVBhcnRUd2ljZSwKICAgICAgICB0ZW1wbGF0ZVBhdGNoSW5qZWN0aW9uRmFpbGVkLAogICAgICAgIHRlbXBsYXRlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWVDYXVzZTsKCmltcG9ydCAnLi4vaW1wb3J0LmRhcnQnIHNob3cgSW1wb3J0OwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBBY2Nlc3NFcnJvckJ1aWxkZXIsCiAgICAgICAgQnVpbHRpblR5cGVCdWlsZGVyLAogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIsCiAgICAgICAgRGVjbGFyYXRpb24sCiAgICAgICAgRHluYW1pY1R5cGVCdWlsZGVyLAogICAgICAgIEVudW1Db25zdGFudEluZm8sCiAgICAgICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciwKICAgICAgICBGdW5jdGlvblR5cGVCdWlsZGVyLAogICAgICAgIEltcGxpY2l0RmllbGRUeXBlLAogICAgICAgIEludmFsaWRUeXBlQnVpbGRlciwKICAgICAgICBDb25zdHJ1Y3RvckJ1aWxkZXIsCiAgICAgICAgRW51bUJ1aWxkZXIsCiAgICAgICAgRnVuY3Rpb25CdWlsZGVyLAogICAgICAgIFR5cGVBbGlhc0J1aWxkZXIsCiAgICAgICAgRmllbGRCdWlsZGVyLAogICAgICAgIE1peGluQXBwbGljYXRpb25CdWlsZGVyLAogICAgICAgIE5hbWVkVHlwZUJ1aWxkZXIsCiAgICAgICAgUHJvY2VkdXJlQnVpbGRlciwKICAgICAgICBSZWRpcmVjdGluZ0ZhY3RvcnlCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIExvYWRMaWJyYXJ5QnVpbGRlciwKICAgICAgICBNZW1iZXJCdWlsZGVyLAogICAgICAgIE1ldGFkYXRhQnVpbGRlciwKICAgICAgICBOYW1lSXRlcmF0b3IsCiAgICAgICAgUHJlZml4QnVpbGRlciwKICAgICAgICBRdWFsaWZpZWROYW1lLAogICAgICAgIFNjb3BlLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIsCiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciwKICAgICAgICBVbnJlc29sdmVkVHlwZSwKICAgICAgICBWb2lkVHlwZUJ1aWxkZXIsCiAgICAgICAgY29tcGFyZVByb2NlZHVyZXMsCiAgICAgICAgdG9LZXJuZWxDb21iaW5hdG9yczsKCmltcG9ydCAnLi4va2VybmVsL21ldGFkYXRhX2NvbGxlY3Rvci5kYXJ0JzsKCmltcG9ydCAnLi4va2VybmVsL3R5cGVfYWxnb3JpdGhtcy5kYXJ0JwogICAgc2hvdwogICAgICAgIGNhbGN1bGF0ZUJvdW5kcywKICAgICAgICBmaW5kR2VuZXJpY0Z1bmN0aW9uVHlwZXMsCiAgICAgICAgZ2V0Tm9uU2ltcGxpY2l0eUlzc3Vlc0ZvckRlY2xhcmF0aW9uLAogICAgICAgIGdldE5vblNpbXBsaWNpdHlJc3N1ZXNGb3JUeXBlVmFyaWFibGVzOwoKaW1wb3J0ICcuLi9sb2FkZXIuZGFydCcgc2hvdyBMb2FkZXI7CgppbXBvcnQgJy4uL21vZGlmaWVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgYWJzdHJhY3RNYXNrLAogICAgICAgIGNvbnN0TWFzaywKICAgICAgICBmaW5hbE1hc2ssCiAgICAgICAgaGFzQ29uc3RDb25zdHJ1Y3Rvck1hc2ssCiAgICAgICAgaGFzSW5pdGlhbGl6ZXJNYXNrLAogICAgICAgIGluaXRpYWxpemluZ0Zvcm1hbE1hc2ssCiAgICAgICAgbWl4aW5EZWNsYXJhdGlvbk1hc2ssCiAgICAgICAgbmFtZWRNaXhpbkFwcGxpY2F0aW9uTWFzaywKICAgICAgICBzdGF0aWNNYXNrOwoKaW1wb3J0ICcuLi9uYW1lcy5kYXJ0JyBzaG93IGluZGV4U2V0TmFtZTsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bmV4cGVjdGVkLCB1bmhhbmRsZWQ7CgppbXBvcnQgJy4uL3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfaW5mZXJyZXIuZGFydCcgc2hvdyBUeXBlSW5mZXJyZXJJbXBsOwoKaW1wb3J0ICdzb3VyY2VfY2xhc3NfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUNsYXNzQnVpbGRlcjsKCmltcG9ydCAnc291cmNlX2xvYWRlci5kYXJ0JyBzaG93IFNvdXJjZUxvYWRlcjsKCmNsYXNzIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGV4dGVuZHMgTGlicmFyeUJ1aWxkZXIgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgTUFMRk9STUVEX1VSSV9TQ0hFTUUgPSAib3JnLWRhcnRsYW5nLW1hbGZvcm1lZC11cmkiOwoKICBmaW5hbCBTb3VyY2VMb2FkZXIgbG9hZGVyOwoKICBmaW5hbCBEZWNsYXJhdGlvbkJ1aWxkZXIgbGlicmFyeURlY2xhcmF0aW9uOwoKICBmaW5hbCBMaXN0PENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlcj4gY29uc3RydWN0b3JSZWZlcmVuY2VzID0KICAgICAgPENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlcj5bXTsKCiAgZmluYWwgTGlzdDxTb3VyY2VMaWJyYXJ5QnVpbGRlcj4gcGFydHMgPSA8U291cmNlTGlicmFyeUJ1aWxkZXI+W107CgogIC8vIENhbiBJIHVzZSBsaWJyYXJ5LnBhcnRzIGluc3RlYWQ/IFNlZSBTb3VyY2VMaWJyYXJ5QnVpbGRlci5hZGRQYXJ0LgogIGZpbmFsIExpc3Q8aW50PiBwYXJ0T2Zmc2V0cyA9IDxpbnQ+W107CgogIGZpbmFsIExpc3Q8SW1wb3J0PiBpbXBvcnRzID0gPEltcG9ydD5bXTsKCiAgZmluYWwgTGlzdDxFeHBvcnQ+IGV4cG9ydHMgPSA8RXhwb3J0PltdOwoKICBmaW5hbCBTY29wZSBpbXBvcnRTY29wZTsKCiAgZmluYWwgVXJpIGZpbGVVcmk7CgogIGZpbmFsIExpc3Q8SW1wbGVtZW50YXRpb25JbmZvPiBpbXBsZW1lbnRhdGlvbkJ1aWxkZXJzID0KICAgICAgPEltcGxlbWVudGF0aW9uSW5mbz5bXTsKCiAgZmluYWwgTGlzdDxPYmplY3Q+IGFjY2Vzc29ycyA9IDxPYmplY3Q+W107CgogIGZpbmFsIGJvb2wgbGVnYWN5TW9kZTsKCiAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50OwoKICBTdHJpbmcgbmFtZTsKCiAgU3RyaW5nIHBhcnRPZk5hbWU7CgogIFVyaSBwYXJ0T2ZVcmk7CgogIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YTsKCiAgLy8vIFRoZSBjdXJyZW50IGRlY2xhcmF0aW9uIHRoYXQgaXMgYmVpbmcgYnVpbHQuIFdoZW4gd2Ugc3RhcnQgcGFyc2luZyBhCiAgLy8vIGRlY2xhcmF0aW9uIChjbGFzcywgbWV0aG9kLCBhbmQgc28gb24pLCB3ZSBkb24ndCBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbgogIC8vLyB0byBjcmVhdGUgYSBidWlsZGVyIGFuZCB0aGlzIG9iamVjdCByZWNvcmRzIGl0cyBtZW1iZXJzIGFuZCB0eXBlcyB1bnRpbCwKICAvLy8gZm9yIGV4YW1wbGUsIFthZGRDbGFzc10gaXMgY2FsbGVkLgogIERlY2xhcmF0aW9uQnVpbGRlciBjdXJyZW50RGVjbGFyYXRpb247CgogIGJvb2wgY2FuQWRkSW1wbGVtZW50YXRpb25CdWlsZGVycyA9IGZhbHNlOwoKICAvLy8gTm9uLW51bGwgaWYgdGhpcyBsaWJyYXJ5IGNhdXNlcyBhbiBlcnJvciB1cG9uIGFjY2VzcywgdGhhdCBpcywgdGhlcmUgd2FzCiAgLy8vIGFuIGVycm9yIHJlYWRpbmcgaXRzIHNvdXJjZS4KICBNZXNzYWdlIGFjY2Vzc1Byb2JsZW07CgogIGZpbmFsIExpYnJhcnkgbGlicmFyeTsKCiAgZmluYWwgU291cmNlTGlicmFyeUJ1aWxkZXIgYWN0dWFsT3JpZ2luOwoKICBmaW5hbCBMaXN0PEZ1bmN0aW9uQnVpbGRlcj4gbmF0aXZlTWV0aG9kcyA9IDxGdW5jdGlvbkJ1aWxkZXI+W107CgogIGZpbmFsIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gYm91bmRsZXNzVHlwZVZhcmlhYmxlcyA9CiAgICAgIDxUeXBlVmFyaWFibGVCdWlsZGVyPltdOwoKICAvLyBBIGxpc3Qgb2YgYWx0ZXJuYXRpbmcgZm9yd2FyZGVycyBhbmQgdGhlIHByb2NlZHVyZXMgdGhleSB3ZXJlIGdlbmVyYXRlZAogIC8vIGZvci4gIE5vdGUgdGhhdCBpdCBtYXkgbm90IGluY2x1ZGUgYSBmb3J3YXJkZXItb3JpZ2luIHBhaXIgaW4gY2FzZXMgd2hlbgogIC8vIHRoZSBmb3JtZXIgZG9lcyBub3QgbmVlZCB0byBiZSB1cGRhdGVkIGFmdGVyIHRoZSBib2R5IG9mIHRoZSBsYXR0ZXIgd2FzCiAgLy8gYnVpbHQuCiAgZmluYWwgTGlzdDxQcm9jZWR1cmU+IGZvcndhcmRlcnNPcmlnaW5zID0gPFByb2NlZHVyZT5bXTsKCiAgLy8gTGlzdCBvZiB0eXBlcyBpbmZlcnJlZCBpbiB0aGUgb3V0bGluZS4gIEVycm9ycyBpbiB0aGVzZSBzaG91bGQgYmUgcmVwb3J0ZWQKICAvLyBkaWZmZXJlbnRseSB0aGFuIGZvciBzcGVjaWZpZWQgdHlwZXMuCiAgLy8gVE9ETyhkbWl0cnlhcyk6ICBGaW5kIGEgd2F5IHRvIG1hcmsgaW5mZXJyZWQgdHlwZXMuCiAgZmluYWwgU2V0PERhcnRUeXBlPiBpbmZlcnJlZFR5cGVzID0gbmV3IFNldDxEYXJ0VHlwZT4uaWRlbnRpdHkoKTsKCiAgLy8gQSBsaWJyYXJ5IHRvIHVzZSBmb3IgTmFtZXMgZ2VuZXJhdGVkIHdoZW4gY29tcGlsaW5nIGNvZGUgaW4gdGhpcyBsaWJyYXJ5LgogIC8vIFRoaXMgYWxsb3dzIGNvZGUgZ2VuZXJhdGVkIGluIG9uZSBsaWJyYXJ5IHRvIHVzZSB0aGUgcHJpdmF0ZSBuYW1lc3BhY2Ugb2YKICAvLyBhbm90aGVyLCBmb3IgZXhhbXBsZSBkdXJpbmcgZXhwcmVzc2lvbiBjb21waWxhdGlvbiAoZGVidWdnaW5nKS4KICBMaWJyYXJ5IGdldCBuYW1lT3JpZ2luID0+IF9uYW1lT3JpZ2luID8/IGxpYnJhcnk7CiAgZmluYWwgTGlicmFyeSBfbmFtZU9yaWdpbjsKCiAgLy8vIEV4cG9ydHMgdGhhdCBjYW4ndCBiZSBzZXJpYWxpemVkLgogIC8vLwogIC8vLyBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBleHBvcnRlZCBtZW1iZXIuCiAgLy8vCiAgLy8vIElmIHRoZSBuYW1lIGlzIGBkeW5hbWljYCBvciBgdm9pZGAsIHRoaXMgbGlicmFyeSByZWV4cG9ydHMgdGhlCiAgLy8vIGNvcnJlc3BvbmRpbmcgdHlwZSBmcm9tIGBkYXJ0OmNvcmVgLCBhbmQgdGhlIHZhbHVlIGlzIG51bGwuCiAgLy8vCiAgLy8vIE90aGVyd2lzZSwgdGhpcyByZXByZXNlbnRzIGFuIGVycm9yIChhbiBhbWJpZ3VvdXMgZXhwb3J0KS4gSW4gdGhpcyBjYXNlLAogIC8vLyB0aGUgZXJyb3IgbWVzc2FnZSBpcyB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSBpbiB0aGUgbWFwLgogIE1hcDxTdHJpbmcsIFN0cmluZz4gdW5zZXJpYWxpemFibGVFeHBvcnRzOwoKICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IHVudHlwZWRJbml0aWFsaXppbmdGb3JtYWxzOwoKICBMaXN0PEZpZWxkQnVpbGRlcj4gaW1wbGljaXRseVR5cGVkRmllbGRzOwoKICBib29sIGxhbmd1YWdlVmVyc2lvbkV4cGxpY2l0bHlTZXQgPSBmYWxzZTsKCiAgU291cmNlTGlicmFyeUJ1aWxkZXIuaW50ZXJuYWwoU291cmNlTG9hZGVyIGxvYWRlciwgVXJpIGZpbGVVcmksIFNjb3BlIHNjb3BlLAogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBhY3R1YWxPcmlnaW4sIExpYnJhcnkgbGlicmFyeSwgTGlicmFyeSBuYW1lT3JpZ2luKQogICAgICA6IHRoaXMuZnJvbVNjb3Blcyhsb2FkZXIsIGZpbGVVcmksIG5ldyBEZWNsYXJhdGlvbkJ1aWxkZXIubGlicmFyeSgpLAogICAgICAgICAgICBzY29wZSA/PyBuZXcgU2NvcGUudG9wKCksIGFjdHVhbE9yaWdpbiwgbGlicmFyeSwgbmFtZU9yaWdpbik7CgogIFNvdXJjZUxpYnJhcnlCdWlsZGVyLmZyb21TY29wZXMoCiAgICAgIHRoaXMubG9hZGVyLAogICAgICB0aGlzLmZpbGVVcmksCiAgICAgIHRoaXMubGlicmFyeURlY2xhcmF0aW9uLAogICAgICB0aGlzLmltcG9ydFNjb3BlLAogICAgICB0aGlzLmFjdHVhbE9yaWdpbiwKICAgICAgdGhpcy5saWJyYXJ5LAogICAgICB0aGlzLl9uYW1lT3JpZ2luKQogICAgICA6IGN1cnJlbnREZWNsYXJhdGlvbiA9IGxpYnJhcnlEZWNsYXJhdGlvbiwKICAgICAgICBsZWdhY3lNb2RlID0gbG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlLAogICAgICAgIHN1cGVyKAogICAgICAgICAgICBmaWxlVXJpLCBsaWJyYXJ5RGVjbGFyYXRpb24udG9TY29wZShpbXBvcnRTY29wZSksIG5ldyBTY29wZS50b3AoKSk7CgogIFNvdXJjZUxpYnJhcnlCdWlsZGVyKAogICAgICBVcmkgdXJpLCBVcmkgZmlsZVVyaSwgTG9hZGVyIGxvYWRlciwgU291cmNlTGlicmFyeUJ1aWxkZXIgYWN0dWFsT3JpZ2luLAogICAgICB7U2NvcGUgc2NvcGUsIExpYnJhcnkgdGFyZ2V0LCBMaWJyYXJ5IG5hbWVPcmlnaW59KQogICAgICA6IHRoaXMuaW50ZXJuYWwoCiAgICAgICAgICAgIGxvYWRlciwKICAgICAgICAgICAgZmlsZVVyaSwKICAgICAgICAgICAgc2NvcGUsCiAgICAgICAgICAgIGFjdHVhbE9yaWdpbiwKICAgICAgICAgICAgdGFyZ2V0ID8/CiAgICAgICAgICAgICAgICAoYWN0dWFsT3JpZ2luPy5saWJyYXJ5ID8/IG5ldyBMaWJyYXJ5KHVyaSwgZmlsZVVyaTogZmlsZVVyaSkpLAogICAgICAgICAgICBuYW1lT3JpZ2luKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQYXJ0ID0+IHBhcnRPZk5hbWUgIT0gbnVsbCB8fCBwYXJ0T2ZVcmkgIT0gbnVsbDsKCiAgTGlzdDxVbnJlc29sdmVkVHlwZT4gZ2V0IHR5cGVzID0+IGxpYnJhcnlEZWNsYXJhdGlvbi50eXBlczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTeW50aGV0aWMgPT4gYWNjZXNzUHJvYmxlbSAhPSBudWxsOwoKICBUeXBlQnVpbGRlciBhZGRUeXBlKFR5cGVCdWlsZGVyIHR5cGUsIGludCBjaGFyT2Zmc2V0KSB7CiAgICBjdXJyZW50RGVjbGFyYXRpb24uYWRkVHlwZShuZXcgVW5yZXNvbHZlZFR5cGUodHlwZSwgY2hhck9mZnNldCwgZmlsZVVyaSkpOwogICAgcmV0dXJuIHR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHNldExhbmd1YWdlVmVyc2lvbihpbnQgbWFqb3IsIGludCBtaW5vciwge2Jvb2wgZXhwbGljaXR9KSB7CiAgICBpZiAobGFuZ3VhZ2VWZXJzaW9uRXhwbGljaXRseVNldCkgcmV0dXJuOwogICAgbGlicmFyeS5zZXRMYW5ndWFnZVZlcnNpb24obWFqb3IsIG1pbm9yKTsKICAgIGlmIChleHBsaWNpdCkgbGFuZ3VhZ2VWZXJzaW9uRXhwbGljaXRseVNldCA9IHRydWU7CiAgfQoKICBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIgYWRkQ29uc3RydWN0b3JSZWZlcmVuY2UoT2JqZWN0IG5hbWUsCiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IHR5cGVBcmd1bWVudHMsIFN0cmluZyBzdWZmaXgsIGludCBjaGFyT2Zmc2V0KSB7CiAgICBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIgcmVmID0gbmV3IENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlcigKICAgICAgICBuYW1lLCB0eXBlQXJndW1lbnRzLCBzdWZmaXgsIHRoaXMsIGNoYXJPZmZzZXQpOwogICAgY29uc3RydWN0b3JSZWZlcmVuY2VzLmFkZChyZWYpOwogICAgcmV0dXJuIHJlZjsKICB9CgogIHZvaWQgYmVnaW5OZXN0ZWREZWNsYXJhdGlvbihEZWNsYXJhdGlvbktpbmQga2luZCwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIGhhc01lbWJlcnM6IHRydWV9KSB7CiAgICBjdXJyZW50RGVjbGFyYXRpb24gPQogICAgICAgIGN1cnJlbnREZWNsYXJhdGlvbi5jcmVhdGVOZXN0ZWQoa2luZCwgbmFtZSwgaGFzTWVtYmVycyk7CiAgfQoKICBEZWNsYXJhdGlvbkJ1aWxkZXIgZW5kTmVzdGVkRGVjbGFyYXRpb24oRGVjbGFyYXRpb25LaW5kIGtpbmQsIFN0cmluZyBuYW1lKSB7CiAgICBhc3NlcnQoCiAgICAgICAgY3VycmVudERlY2xhcmF0aW9uLmtpbmQgPT0ga2luZCwKICAgICAgICAiVW5leHBlY3RlZCBkZWNsYXJhdGlvbi4gIgogICAgICAgICJUcnlpbmcgdG8gZW5kIGEgJHtjdXJyZW50RGVjbGFyYXRpb24ua2luZH0gYXMgYSAka2luZC4iKTsKICAgIGFzc2VydCgKICAgICAgICAobmFtZT8uc3RhcnRzV2l0aChjdXJyZW50RGVjbGFyYXRpb24ubmFtZSkgPz8KICAgICAgICAgICAgICAgIChuYW1lID09IGN1cnJlbnREZWNsYXJhdGlvbi5uYW1lKSkgfHwKICAgICAgICAgICAgY3VycmVudERlY2xhcmF0aW9uLm5hbWUgPT0gIm9wZXJhdG9yIiB8fAogICAgICAgICAgICBpZGVudGljYWwobmFtZSwgIjxzeW50YXgtZXJyb3I+IiksCiAgICAgICAgIiR7bmFtZX0gIT0gJHtjdXJyZW50RGVjbGFyYXRpb24ubmFtZX0iKTsKICAgIERlY2xhcmF0aW9uQnVpbGRlciBwcmV2aW91cyA9IGN1cnJlbnREZWNsYXJhdGlvbjsKICAgIGN1cnJlbnREZWNsYXJhdGlvbiA9IGN1cnJlbnREZWNsYXJhdGlvbi5wYXJlbnQ7CiAgICByZXR1cm4gcHJldmlvdXM7CiAgfQoKICBib29sIHVyaUlzVmFsaWQoVXJpIHVyaSkgPT4gdXJpLnNjaGVtZSAhPSBNQUxGT1JNRURfVVJJX1NDSEVNRTsKCiAgVXJpIHJlc29sdmUoVXJpIGJhc2VVcmksIFN0cmluZyB1cmksIGludCB1cmlPZmZzZXQsIHtpc1BhcnQ6IGZhbHNlfSkgewogICAgaWYgKHVyaSA9PSBudWxsKSB7CiAgICAgIGFkZFByb2JsZW0obWVzc2FnZUV4cGVjdGVkVXJpLCB1cmlPZmZzZXQsIG5vTGVuZ3RoLCB0aGlzLnVyaSk7CiAgICAgIHJldHVybiBuZXcgVXJpKHNjaGVtZTogTUFMRk9STUVEX1VSSV9TQ0hFTUUpOwogICAgfQogICAgVXJpIHBhcnNlZFVyaTsKICAgIHRyeSB7CiAgICAgIHBhcnNlZFVyaSA9IFVyaS5wYXJzZSh1cmkpOwogICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgLy8gUG9pbnQgdG8gcG9zaXRpb24gaW4gc3RyaW5nIGluZGljYXRlZCBieSB0aGUgZXhjZXB0aW9uLAogICAgICAvLyBvciB0byB0aGUgaW5pdGlhbCBxdW90ZSBpZiBubyBwb3NpdGlvbiBpcyBnaXZlbi4KICAgICAgLy8gKEFzc3VtZXMgdGhlIGRpcmVjdGl2ZSBpcyB1c2luZyBhIHNpbmdsZS1saW5lIHN0cmluZy4pCiAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVDb3VsZE5vdFBhcnNlVXJpLndpdGhBcmd1bWVudHModXJpLCBlLm1lc3NhZ2UpLAogICAgICAgICAgdXJpT2Zmc2V0ICsgMSArIChlLm9mZnNldCA/PyAtMSksIDEsIHRoaXMudXJpKTsKICAgICAgcmV0dXJuIG5ldyBVcmkoCiAgICAgICAgICBzY2hlbWU6IE1BTEZPUk1FRF9VUklfU0NIRU1FLCBxdWVyeTogVXJpLmVuY29kZVF1ZXJ5Q29tcG9uZW50KHVyaSkpOwogICAgfQogICAgaWYgKGlzUGFydCAmJiBiYXNlVXJpLnNjaGVtZSA9PSAiZGFydCIpIHsKICAgICAgLy8gUmVzb2x2ZSB1c2luZyBzcGVjaWFsIHJ1bGVzIGZvciBkYXJ0OiBVUklzCiAgICAgIHJldHVybiByZXNvbHZlUmVsYXRpdmVVcmkoYmFzZVVyaSwgcGFyc2VkVXJpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBiYXNlVXJpLnJlc29sdmVVcmkocGFyc2VkVXJpKTsKICAgIH0KICB9CgogIFN0cmluZyBjb21wdXRlQW5kVmFsaWRhdGVDb25zdHJ1Y3Rvck5hbWUoT2JqZWN0IG5hbWUsIGludCBjaGFyT2Zmc2V0LAogICAgICB7aXNGYWN0b3J5OiBmYWxzZX0pIHsKICAgIFN0cmluZyBjbGFzc05hbWUgPSBjdXJyZW50RGVjbGFyYXRpb24ubmFtZTsKICAgIFN0cmluZyBwcmVmaXg7CiAgICBTdHJpbmcgc3VmZml4OwogICAgaWYgKG5hbWUgaXMgUXVhbGlmaWVkTmFtZSkgewogICAgICBwcmVmaXggPSBuYW1lLnF1YWxpZmllcjsKICAgICAgc3VmZml4ID0gbmFtZS5uYW1lOwogICAgfSBlbHNlIHsKICAgICAgcHJlZml4ID0gbmFtZTsKICAgICAgc3VmZml4ID0gbnVsbDsKICAgIH0KICAgIGlmIChwcmVmaXggPT0gY2xhc3NOYW1lKSB7CiAgICAgIHJldHVybiBzdWZmaXggPz8gIiI7CiAgICB9CiAgICBpZiAoc3VmZml4ID09IG51bGwgJiYgIWlzRmFjdG9yeSkgewogICAgICAvLyBBIGxlZ2FsIG5hbWUgZm9yIGEgcmVndWxhciBtZXRob2QsIGJ1dCBub3QgZm9yIGEgY29uc3RydWN0b3IuCiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGFkZFByb2JsZW0oCiAgICAgICAgbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZSwgY2hhck9mZnNldCwgcHJlZml4Lmxlbmd0aCwgZmlsZVVyaSwKICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICB0ZW1wbGF0ZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZUNvbnRleHQKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhjdXJyZW50RGVjbGFyYXRpb24ubmFtZSkKICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgY3VycmVudERlY2xhcmF0aW9uLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICAgIGN1cnJlbnREZWNsYXJhdGlvbi5uYW1lLmxlbmd0aCkKICAgICAgICBdKTsKCiAgICByZXR1cm4gc3VmZml4OwogIH0KCiAgdm9pZCBhZGRFeHBvcnQoCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgU3RyaW5nIHVyaSwKICAgICAgTGlzdDxDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9ucywKICAgICAgTGlzdDxDb21iaW5hdG9yPiBjb21iaW5hdG9ycywKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIGludCB1cmlPZmZzZXQpIHsKICAgIGlmIChjb25maWd1cmF0aW9ucyAhPSBudWxsKSB7CiAgICAgIGZvciAoQ29uZmlndXJhdGlvbiBjb25maWcgaW4gY29uZmlndXJhdGlvbnMpIHsKICAgICAgICBpZiAobG9va3VwSW1wb3J0Q29uZGl0aW9uKGNvbmZpZy5kb3R0ZWROYW1lKSA9PSBjb25maWcuY29uZGl0aW9uKSB7CiAgICAgICAgICB1cmkgPSBjb25maWcuaW1wb3J0VXJpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdmFyIGV4cG9ydGVkTGlicmFyeSA9IGxvYWRlcgogICAgICAgIC5yZWFkKHJlc29sdmUodGhpcy51cmksIHVyaSwgdXJpT2Zmc2V0KSwgY2hhck9mZnNldCwgYWNjZXNzb3I6IHRoaXMpOwogICAgZXhwb3J0ZWRMaWJyYXJ5LmFkZEV4cG9ydGVyKHRoaXMsIGNvbWJpbmF0b3JzLCBjaGFyT2Zmc2V0KTsKICAgIGV4cG9ydHMuYWRkKG5ldyBFeHBvcnQodGhpcywgZXhwb3J0ZWRMaWJyYXJ5LCBjb21iaW5hdG9ycywgY2hhck9mZnNldCkpOwogIH0KCiAgU3RyaW5nIGxvb2t1cEltcG9ydENvbmRpdGlvbihTdHJpbmcgZG90dGVkTmFtZSkgewogICAgY29uc3QgU3RyaW5nIHByZWZpeCA9ICJkYXJ0LmxpYnJhcnkuIjsKICAgIGlmICghZG90dGVkTmFtZS5zdGFydHNXaXRoKHByZWZpeCkpIHJldHVybiAiIjsKICAgIGRvdHRlZE5hbWUgPSBkb3R0ZWROYW1lLnN1YnN0cmluZyhwcmVmaXgubGVuZ3RoKTsKICAgIGlmICghbG9hZGVyLnRhcmdldC51cmlUcmFuc2xhdG9yLmlzTGlicmFyeVN1cHBvcnRlZChkb3R0ZWROYW1lKSkgcmV0dXJuICIiOwoKICAgIExpYnJhcnlCdWlsZGVyIGltcG9ydGVkID0KICAgICAgICBsb2FkZXIuYnVpbGRlcnNbbmV3IFVyaShzY2hlbWU6ICJkYXJ0IiwgcGF0aDogZG90dGVkTmFtZSldOwoKICAgIGlmIChpbXBvcnRlZCA9PSBudWxsKSB7CiAgICAgIExpYnJhcnlCdWlsZGVyIGNvcmVMaWJyYXJ5ID0gbG9hZGVyLnJlYWQoCiAgICAgICAgICByZXNvbHZlKAogICAgICAgICAgICAgIHRoaXMudXJpLCBuZXcgVXJpKHNjaGVtZTogImRhcnQiLCBwYXRoOiAiY29yZSIpLnRvU3RyaW5nKCksIC0xKSwKICAgICAgICAgIC0xKTsKICAgICAgaW1wb3J0ZWQgPSBjb3JlTGlicmFyeQogICAgICAgICAgLmxvYWRlci5idWlsZGVyc1tuZXcgVXJpKHNjaGVtZTogJ2RhcnQnLCBwYXRoOiBkb3R0ZWROYW1lKV07CiAgICB9CiAgICByZXR1cm4gaW1wb3J0ZWQgIT0gbnVsbCA/ICJ0cnVlIiA6ICIiOwogIH0KCiAgdm9pZCBhZGRJbXBvcnQoCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgU3RyaW5nIHVyaSwKICAgICAgTGlzdDxDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9ucywKICAgICAgU3RyaW5nIHByZWZpeCwKICAgICAgTGlzdDxDb21iaW5hdG9yPiBjb21iaW5hdG9ycywKICAgICAgYm9vbCBkZWZlcnJlZCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIGludCBwcmVmaXhDaGFyT2Zmc2V0LAogICAgICBpbnQgdXJpT2Zmc2V0LAogICAgICBpbnQgaW1wb3J0SW5kZXgpIHsKICAgIGlmIChjb25maWd1cmF0aW9ucyAhPSBudWxsKSB7CiAgICAgIGZvciAoQ29uZmlndXJhdGlvbiBjb25maWcgaW4gY29uZmlndXJhdGlvbnMpIHsKICAgICAgICBpZiAobG9va3VwSW1wb3J0Q29uZGl0aW9uKGNvbmZpZy5kb3R0ZWROYW1lKSA9PSBjb25maWcuY29uZGl0aW9uKSB7CiAgICAgICAgICB1cmkgPSBjb25maWcuaW1wb3J0VXJpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgTGlicmFyeUJ1aWxkZXIgYnVpbGRlciA9IG51bGw7CgogICAgVXJpIHJlc29sdmVkVXJpOwogICAgU3RyaW5nIG5hdGl2ZVBhdGg7CiAgICBjb25zdCBTdHJpbmcgbmF0aXZlRXh0ZW5zaW9uU2NoZW1lID0gImRhcnQtZXh0OiI7CiAgICBpZiAodXJpLnN0YXJ0c1dpdGgobmF0aXZlRXh0ZW5zaW9uU2NoZW1lKSkgewogICAgICBTdHJpbmcgc3RyaXBwZWRVcmkgPSB1cmkuc3Vic3RyaW5nKG5hdGl2ZUV4dGVuc2lvblNjaGVtZS5sZW5ndGgpOwogICAgICBpZiAoc3RyaXBwZWRVcmkuc3RhcnRzV2l0aCgicGFja2FnZSIpKSB7CiAgICAgICAgcmVzb2x2ZWRVcmkgPSByZXNvbHZlKAogICAgICAgICAgICB0aGlzLnVyaSwgc3RyaXBwZWRVcmksIHVyaU9mZnNldCArIG5hdGl2ZUV4dGVuc2lvblNjaGVtZS5sZW5ndGgpOwogICAgICAgIHJlc29sdmVkVXJpID0gbG9hZGVyLnRhcmdldC50cmFuc2xhdGVVcmkocmVzb2x2ZWRVcmkpOwogICAgICAgIG5hdGl2ZVBhdGggPSByZXNvbHZlZFVyaS50b1N0cmluZygpOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc29sdmVkVXJpID0gbmV3IFVyaShzY2hlbWU6ICJkYXJ0LWV4dCIsIHBhdGhTZWdtZW50czogW3VyaV0pOwogICAgICAgIG5hdGl2ZVBhdGggPSB1cmk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlc29sdmVkVXJpID0gcmVzb2x2ZSh0aGlzLnVyaSwgdXJpLCB1cmlPZmZzZXQpOwogICAgICBidWlsZGVyID0gbG9hZGVyLnJlYWQocmVzb2x2ZWRVcmksIHVyaU9mZnNldCwgYWNjZXNzb3I6IHRoaXMpOwogICAgfQoKICAgIGltcG9ydHMuYWRkKG5ldyBJbXBvcnQodGhpcywgYnVpbGRlciwgZGVmZXJyZWQsIHByZWZpeCwgY29tYmluYXRvcnMsCiAgICAgICAgY29uZmlndXJhdGlvbnMsIGNoYXJPZmZzZXQsIHByZWZpeENoYXJPZmZzZXQsIGltcG9ydEluZGV4LAogICAgICAgIG5hdGl2ZUltcG9ydFBhdGg6IG5hdGl2ZVBhdGgpKTsKICB9CgogIHZvaWQgYWRkUGFydChMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsIFN0cmluZyB1cmksIGludCBjaGFyT2Zmc2V0KSB7CiAgICBVcmkgcmVzb2x2ZWRVcmk7CiAgICBVcmkgbmV3RmlsZVVyaTsKICAgIHJlc29sdmVkVXJpID0gcmVzb2x2ZSh0aGlzLnVyaSwgdXJpLCBjaGFyT2Zmc2V0LCBpc1BhcnQ6IHRydWUpOwogICAgbmV3RmlsZVVyaSA9IHJlc29sdmUoZmlsZVVyaSwgdXJpLCBjaGFyT2Zmc2V0KTsKICAgIHBhcnRzLmFkZChsb2FkZXIucmVhZChyZXNvbHZlZFVyaSwgY2hhck9mZnNldCwKICAgICAgICBmaWxlVXJpOiBuZXdGaWxlVXJpLCBhY2Nlc3NvcjogdGhpcykpOwogICAgcGFydE9mZnNldHMuYWRkKGNoYXJPZmZzZXQpOwoKICAgIC8vIFRPRE8oYWhlKTogW21ldGFkYXRhXSBzaG91bGQgYmUgc3RvcmVkLCBldmFsdWF0ZWQsIGFuZCBhZGRlZCB0byBbcGFydF0uCiAgICBMaWJyYXJ5UGFydCBwYXJ0ID0gbmV3IExpYnJhcnlQYXJ0KDxFeHByZXNzaW9uPltdLCB1cmkpCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgICBsaWJyYXJ5LmFkZFBhcnQocGFydCk7CiAgfQoKICB2b2lkIGFkZFBhcnRPZigKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLCBTdHJpbmcgbmFtZSwgU3RyaW5nIHVyaSwgaW50IHVyaU9mZnNldCkgewogICAgcGFydE9mTmFtZSA9IG5hbWU7CiAgICBpZiAodXJpICE9IG51bGwpIHsKICAgICAgcGFydE9mVXJpID0gcmVzb2x2ZSh0aGlzLnVyaSwgdXJpLCB1cmlPZmZzZXQpOwogICAgICBVcmkgbmV3RmlsZVVyaSA9IHJlc29sdmUoZmlsZVVyaSwgdXJpLCB1cmlPZmZzZXQpOwogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gbG9hZGVyLnJlYWQocGFydE9mVXJpLCB1cmlPZmZzZXQsCiAgICAgICAgICBmaWxlVXJpOiBuZXdGaWxlVXJpLCBhY2Nlc3NvcjogdGhpcyk7CiAgICAgIGlmIChsb2FkZXIuZmlyc3QgPT0gdGhpcykgewogICAgICAgIC8vIFRoaXMgaXMgYSBwYXJ0LCBhbmQgaXQgd2FzIHRoZSBmaXJzdCBpbnB1dC4gTGV0IHRoZSBsb2FkZXIga25vdwogICAgICAgIC8vIGFib3V0IHRoYXQuCiAgICAgICAgbG9hZGVyLmZpcnN0ID0gbGlicmFyeTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBhZGRGaWVsZHMoU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LCBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsIFR5cGVCdWlsZGVyIHR5cGUsIExpc3Q8RmllbGRJbmZvPiBmaWVsZEluZm9zKSB7CiAgICBmb3IgKEZpZWxkSW5mbyBpbmZvIGluIGZpZWxkSW5mb3MpIHsKICAgICAgYm9vbCBpc0NvbnN0ID0gbW9kaWZpZXJzICYgY29uc3RNYXNrICE9IDA7CiAgICAgIGJvb2wgaXNGaW5hbCA9IG1vZGlmaWVycyAmIGZpbmFsTWFzayAhPSAwOwogICAgICBib29sIHBvdGVudGlhbGx5TmVlZEluaXRpYWxpemVySW5PdXRsaW5lID0gaXNDb25zdCB8fCBpc0ZpbmFsOwogICAgICBUb2tlbiBzdGFydFRva2VuOwogICAgICBpZiAocG90ZW50aWFsbHlOZWVkSW5pdGlhbGl6ZXJJbk91dGxpbmUgfHwKICAgICAgICAgICh0eXBlID09IG51bGwgJiYgIWxlZ2FjeU1vZGUpKSB7CiAgICAgICAgc3RhcnRUb2tlbiA9IGluZm8uaW5pdGlhbGl6ZXJUb2tlbjsKICAgICAgfQogICAgICBpZiAoc3RhcnRUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgLy8gRXh0cmFjdCBvbmx5IHRoZSB0b2tlbnMgZm9yIHRoZSBpbml0aWFsaXplciBleHByZXNzaW9uIGZyb20gdGhlCiAgICAgICAgLy8gdG9rZW4gc3RyZWFtLgogICAgICAgIFRva2VuIGVuZFRva2VuID0gaW5mby5iZWZvcmVMYXN0OwogICAgICAgIGVuZFRva2VuLnNldE5leHQobmV3IFRva2VuLmVvZihlbmRUb2tlbi5uZXh0Lm9mZnNldCkpOwogICAgICAgIG5ldyBUb2tlbi5lb2Yoc3RhcnRUb2tlbi5wcmV2aW91cy5vZmZzZXQpLnNldE5leHQoc3RhcnRUb2tlbik7CiAgICAgIH0KICAgICAgYm9vbCBoYXNJbml0aWFsaXplciA9IGluZm8uaW5pdGlhbGl6ZXJUb2tlbiAhPSBudWxsOwogICAgICBhZGRGaWVsZChkb2N1bWVudGF0aW9uQ29tbWVudCwgbWV0YWRhdGEsIG1vZGlmaWVycywgdHlwZSwgaW5mby5uYW1lLAogICAgICAgICAgaW5mby5jaGFyT2Zmc2V0LCBpbmZvLmNoYXJFbmRPZmZzZXQsIHN0YXJ0VG9rZW4sIGhhc0luaXRpYWxpemVyLAogICAgICAgICAgY29uc3RJbml0aWFsaXplclRva2VuOgogICAgICAgICAgICAgIHBvdGVudGlhbGx5TmVlZEluaXRpYWxpemVySW5PdXRsaW5lID8gc3RhcnRUb2tlbiA6IG51bGwpOwogICAgfQogIH0KCiAgRGVjbGFyYXRpb24gYWRkQnVpbGRlcihTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24sIGludCBjaGFyT2Zmc2V0KSB7CiAgICAvLyBUT0RPKGFoZSk6IFNldCB0aGUgcGFyZW50IGNvcnJlY3RseSBoZXJlLiBDb3VsZCB0aGVuIGNoYW5nZSB0aGUKICAgIC8vIGltcGxlbWVudGF0aW9uIG9mIE1lbWJlckJ1aWxkZXIuaXNUb3BMZXZlbCB0byB0ZXN0IGV4cGxpY2l0bHkgZm9yIGEKICAgIC8vIExpYnJhcnlCdWlsZGVyLgogICAgaWYgKG5hbWUgPT0gbnVsbCkgewogICAgICB1bmhhbmRsZWQoIm51bGwiLCAibmFtZSIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgfQogICAgaWYgKGN1cnJlbnREZWNsYXJhdGlvbiA9PSBsaWJyYXJ5RGVjbGFyYXRpb24pIHsKICAgICAgaWYgKGRlY2xhcmF0aW9uIGlzIE1lbWJlckJ1aWxkZXIpIHsKICAgICAgICBkZWNsYXJhdGlvbi5wYXJlbnQgPSB0aGlzOwogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIpIHsKICAgICAgICBkZWNsYXJhdGlvbi5wYXJlbnQgPSB0aGlzOwogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFByZWZpeEJ1aWxkZXIpIHsKICAgICAgICBhc3NlcnQoZGVjbGFyYXRpb24ucGFyZW50ID09IHRoaXMpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB1bmhhbmRsZWQoCiAgICAgICAgICAgICIke2RlY2xhcmF0aW9uLnJ1bnRpbWVUeXBlfSIsICJhZGRCdWlsZGVyIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChjdXJyZW50RGVjbGFyYXRpb24ucGFyZW50ID09IGxpYnJhcnlEZWNsYXJhdGlvbik7CiAgICB9CiAgICBib29sIGlzQ29uc3RydWN0b3IgPSBkZWNsYXJhdGlvbiBpcyBGdW5jdGlvbkJ1aWxkZXIgJiYKICAgICAgICAoZGVjbGFyYXRpb24uaXNDb25zdHJ1Y3RvciB8fCBkZWNsYXJhdGlvbi5pc0ZhY3RvcnkpOwogICAgaWYgKCFpc0NvbnN0cnVjdG9yICYmIG5hbWUgPT0gY3VycmVudERlY2xhcmF0aW9uLm5hbWUpIHsKICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgIG1lc3NhZ2VNZW1iZXJXaXRoU2FtZU5hbWVBc0NsYXNzLCBjaGFyT2Zmc2V0LCBub0xlbmd0aCwgZmlsZVVyaSk7CiAgICB9CiAgICBNYXA8U3RyaW5nLCBEZWNsYXJhdGlvbj4gbWVtYmVycyA9IGlzQ29uc3RydWN0b3IKICAgICAgICA/IGN1cnJlbnREZWNsYXJhdGlvbi5jb25zdHJ1Y3RvcnMKICAgICAgICA6IChkZWNsYXJhdGlvbi5pc1NldHRlcgogICAgICAgICAgICA/IGN1cnJlbnREZWNsYXJhdGlvbi5zZXR0ZXJzCiAgICAgICAgICAgIDogY3VycmVudERlY2xhcmF0aW9uLm1lbWJlcnMpOwogICAgRGVjbGFyYXRpb24gZXhpc3RpbmcgPSBtZW1iZXJzW25hbWVdOwogICAgaWYgKGRlY2xhcmF0aW9uLm5leHQgIT0gbnVsbCAmJiBkZWNsYXJhdGlvbi5uZXh0ICE9IGV4aXN0aW5nKSB7CiAgICAgIHVuZXhwZWN0ZWQoCiAgICAgICAgICAiJHtkZWNsYXJhdGlvbi5uZXh0LmZpbGVVcml9QCR7ZGVjbGFyYXRpb24ubmV4dC5jaGFyT2Zmc2V0fSIsCiAgICAgICAgICAiJHtleGlzdGluZz8uZmlsZVVyaX1AJHtleGlzdGluZz8uY2hhck9mZnNldH0iLAogICAgICAgICAgZGVjbGFyYXRpb24uY2hhck9mZnNldCwKICAgICAgICAgIGRlY2xhcmF0aW9uLmZpbGVVcmkpOwogICAgfQogICAgZGVjbGFyYXRpb24ubmV4dCA9IGV4aXN0aW5nOwogICAgaWYgKGRlY2xhcmF0aW9uIGlzIFByZWZpeEJ1aWxkZXIgJiYgZXhpc3RpbmcgaXMgUHJlZml4QnVpbGRlcikgewogICAgICBhc3NlcnQoZXhpc3RpbmcubmV4dCBpcyEgUHJlZml4QnVpbGRlcik7CiAgICAgIERlY2xhcmF0aW9uIGRlZmVycmVkOwogICAgICBEZWNsYXJhdGlvbiBvdGhlcjsKICAgICAgaWYgKGRlY2xhcmF0aW9uLmRlZmVycmVkKSB7CiAgICAgICAgZGVmZXJyZWQgPSBkZWNsYXJhdGlvbjsKICAgICAgICBvdGhlciA9IGV4aXN0aW5nOwogICAgICB9IGVsc2UgaWYgKGV4aXN0aW5nLmRlZmVycmVkKSB7CiAgICAgICAgZGVmZXJyZWQgPSBleGlzdGluZzsKICAgICAgICBvdGhlciA9IGRlY2xhcmF0aW9uOwogICAgICB9CiAgICAgIGlmIChkZWZlcnJlZCAhPSBudWxsKSB7CiAgICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZURlZmVycmVkUHJlZml4RHVwbGljYXRlZC53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICBkZWZlcnJlZC5jaGFyT2Zmc2V0LCBub0xlbmd0aCwgZmlsZVVyaSwKICAgICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgIHRlbXBsYXRlRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkQ2F1c2UKICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZSkKICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihmaWxlVXJpLCBvdGhlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICAgICAgXSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGV4aXN0aW5nCiAgICAgICAgLi5leHBvcnRTY29wZS5tZXJnZShkZWNsYXJhdGlvbi5leHBvcnRTY29wZSwKICAgICAgICAgICAgKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBleGlzdGluZywgRGVjbGFyYXRpb24gbWVtYmVyKSB7CiAgICAgICAgICByZXR1cm4gY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uKAogICAgICAgICAgICAgIG5hbWUsIGV4aXN0aW5nLCBtZW1iZXIsIGNoYXJPZmZzZXQpOwogICAgICAgIH0pOwogICAgfSBlbHNlIGlmIChpc0R1cGxpY2F0ZWREZWNsYXJhdGlvbihleGlzdGluZywgZGVjbGFyYXRpb24pKSB7CiAgICAgIFN0cmluZyBmdWxsTmFtZSA9IG5hbWU7CiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgaWYgKG5hbWUuaXNFbXB0eSkgewogICAgICAgICAgZnVsbE5hbWUgPSBjdXJyZW50RGVjbGFyYXRpb24ubmFtZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZnVsbE5hbWUgPSAiJHtjdXJyZW50RGVjbGFyYXRpb24ubmFtZX0uJG5hbWUiOwogICAgICAgIH0KICAgICAgfQogICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLndpdGhBcmd1bWVudHMoZnVsbE5hbWUpLAogICAgICAgICAgY2hhck9mZnNldCwgZnVsbE5hbWUubGVuZ3RoLCBkZWNsYXJhdGlvbi5maWxlVXJpLAogICAgICAgICAgY29udGV4dDogPExvY2F0ZWRNZXNzYWdlPlsKICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZQogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZnVsbE5hbWUpCiAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLmZpbGVVcmksIGV4aXN0aW5nLmNoYXJPZmZzZXQsIGZ1bGxOYW1lLmxlbmd0aCkKICAgICAgICAgIF0pOwogICAgfQogICAgcmV0dXJuIG1lbWJlcnNbbmFtZV0gPSBkZWNsYXJhdGlvbjsKICB9CgogIGJvb2wgaXNEdXBsaWNhdGVkRGVjbGFyYXRpb24oRGVjbGFyYXRpb24gZXhpc3RpbmcsIERlY2xhcmF0aW9uIG90aGVyKSB7CiAgICBpZiAoZXhpc3RpbmcgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgRGVjbGFyYXRpb24gbmV4dCA9IGV4aXN0aW5nLm5leHQ7CiAgICBpZiAobmV4dCA9PSBudWxsKSB7CiAgICAgIGlmIChleGlzdGluZy5pc0dldHRlciAmJiBvdGhlci5pc1NldHRlcikgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoZXhpc3RpbmcuaXNTZXR0ZXIgJiYgb3RoZXIuaXNHZXR0ZXIpIHJldHVybiBmYWxzZTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChuZXh0IGlzIENsYXNzQnVpbGRlciAmJiAhbmV4dC5pc01peGluQXBwbGljYXRpb24pIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKGV4aXN0aW5nIGlzIENsYXNzQnVpbGRlciAmJiBvdGhlciBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgLy8gV2UgYWxsb3cgbXVsdGlwbGUgbWl4aW4gYXBwbGljYXRpb25zIHdpdGggdGhlIHNhbWUgbmFtZS4gQW4KICAgICAgLy8gYWx0ZXJuYXRpdmUgaXMgdG8gc2hhcmUgdGhlc2UgbWl4aW4gYXBwbGljYXRpb25zLiBUaGlzIHNpdHVhdGlvbiBjYW4KICAgICAgLy8gaGFwcGVuIGlmIHlvdSBoYXZlIGBjbGFzcyBBIGV4dGVuZHMgT2JqZWN0IHdpdGggTWl4aW4ge31gIGFuZCBgY2xhc3MgQgogICAgICAvLyBleHRlbmRzIE9iamVjdCB3aXRoIE1peGluIHt9YCBpbiB0aGUgc2FtZSBsaWJyYXJ5LgogICAgICByZXR1cm4gIWV4aXN0aW5nLmlzTWl4aW5BcHBsaWNhdGlvbiB8fCAhb3RoZXIuaXNNaXhpbkFwcGxpY2F0aW9uOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBMaWJyYXJ5IGJ1aWxkKExpYnJhcnlCdWlsZGVyIGNvcmVMaWJyYXJ5LCB7Ym9vbCBtb2RpZnlUYXJnZXR9KSB7CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb25CdWlsZGVycy5pc0VtcHR5KTsKICAgIGNhbkFkZEltcGxlbWVudGF0aW9uQnVpbGRlcnMgPSB0cnVlOwogICAgSXRlcmF0b3I8RGVjbGFyYXRpb24+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIGJ1aWxkQnVpbGRlcihpdGVyYXRvci5jdXJyZW50LCBjb3JlTGlicmFyeSk7CiAgICB9CiAgICBmb3IgKEltcGxlbWVudGF0aW9uSW5mbyBpbmZvIGluIGltcGxlbWVudGF0aW9uQnVpbGRlcnMpIHsKICAgICAgU3RyaW5nIG5hbWUgPSBpbmZvLm5hbWU7CiAgICAgIERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gaW5mby5kZWNsYXJhdGlvbjsKICAgICAgaW50IGNoYXJPZmZzZXQgPSBpbmZvLmNoYXJPZmZzZXQ7CiAgICAgIGFkZEJ1aWxkZXIobmFtZSwgZGVjbGFyYXRpb24sIGNoYXJPZmZzZXQpOwogICAgICBidWlsZEJ1aWxkZXIoZGVjbGFyYXRpb24sIGNvcmVMaWJyYXJ5KTsKICAgIH0KICAgIGNhbkFkZEltcGxlbWVudGF0aW9uQnVpbGRlcnMgPSBmYWxzZTsKCiAgICBzY29wZS5zZXR0ZXJzLmZvckVhY2goKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBzZXR0ZXIpIHsKICAgICAgRGVjbGFyYXRpb24gbWVtYmVyID0gc2NvcGVCdWlsZGVyW25hbWVdOwogICAgICBpZiAobWVtYmVyID09IG51bGwgfHwKICAgICAgICAgICFtZW1iZXIuaXNGaWVsZCB8fAogICAgICAgICAgbWVtYmVyLmlzRmluYWwgfHwKICAgICAgICAgIG1lbWJlci5pc0NvbnN0KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVDb25mbGljdHNXaXRoTWVtYmVyLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBzZXR0ZXIuY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgICAvLyBUT0RPKGFoZSk6IENvbnRleHQgdG8gcHJldmlvdXMgbWVzc2FnZT8KICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhTZXR0ZXIud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LCBub0xlbmd0aCwgZmlsZVVyaSk7CiAgICB9KTsKCiAgICBpZiAobW9kaWZ5VGFyZ2V0ID09IGZhbHNlKSByZXR1cm4gbGlicmFyeTsKCiAgICBsaWJyYXJ5LmlzU3ludGhldGljID0gaXNTeW50aGV0aWM7CiAgICBhZGREZXBlbmRlbmNpZXMobGlicmFyeSwgbmV3IFNldDxTb3VyY2VMaWJyYXJ5QnVpbGRlcj4oKSk7CgogICAgbG9hZGVyLnRhcmdldC5tZXRhZGF0YUNvbGxlY3RvcgogICAgICAgID8uc2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQobGlicmFyeSwgZG9jdW1lbnRhdGlvbkNvbW1lbnQpOwoKICAgIGxpYnJhcnkubmFtZSA9IG5hbWU7CiAgICBsaWJyYXJ5LnByb2NlZHVyZXMuc29ydChjb21wYXJlUHJvY2VkdXJlcyk7CgogICAgaWYgKHVuc2VyaWFsaXphYmxlRXhwb3J0cyAhPSBudWxsKSB7CiAgICAgIGxpYnJhcnkuYWRkTWVtYmVyKG5ldyBGaWVsZChuZXcgTmFtZSgiX2V4cG9ydHMjIiwgbGlicmFyeSksCiAgICAgICAgICBpbml0aWFsaXplcjogbmV3IFN0cmluZ0xpdGVyYWwoanNvbkVuY29kZSh1bnNlcmlhbGl6YWJsZUV4cG9ydHMpKSwKICAgICAgICAgIGlzU3RhdGljOiB0cnVlLAogICAgICAgICAgaXNDb25zdDogdHJ1ZSkpOwogICAgfQoKICAgIHJldHVybiBsaWJyYXJ5OwogIH0KCiAgLy8vIFVzZWQgdG8gYWRkIGltcGxlbWVudGF0aW9uIGJ1aWxkZXIgZHVyaW5nIHRoZSBjYWxsIHRvIFtidWlsZF0gYWJvdmUuCiAgLy8vIEN1cnJlbnRseSwgb25seSBhbm9ueW1vdXMgbWl4aW5zIGFyZSB1c2luZyBpbXBsZW1lbnRhdGlvbiBidWlsZGVycyAoc2VlCiAgLy8vIFtNaXhpbkFwcGxpY2F0aW9uQnVpbGRlcl0KICAvLy8gKC4uL2tlcm5lbC9rZXJuZWxfbWl4aW5fYXBwbGljYXRpb25fYnVpbGRlci5kYXJ0KSkuCiAgdm9pZCBhZGRJbXBsZW1lbnRhdGlvbkJ1aWxkZXIoCiAgICAgIFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiwgaW50IGNoYXJPZmZzZXQpIHsKICAgIGFzc2VydChjYW5BZGRJbXBsZW1lbnRhdGlvbkJ1aWxkZXJzLCAiJHVyaSIpOwogICAgaW1wbGVtZW50YXRpb25CdWlsZGVycwogICAgICAgIC5hZGQobmV3IEltcGxlbWVudGF0aW9uSW5mbyhuYW1lLCBkZWNsYXJhdGlvbiwgY2hhck9mZnNldCkpOwogIH0KCiAgdm9pZCB2YWxpZGF0ZVBhcnQoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgU2V0PFVyaT4gdXNlZFBhcnRzKSB7CiAgICBpZiAobGlicmFyeSAhPSBudWxsICYmIHBhcnRzLmlzTm90RW1wdHkpIHsKICAgICAgLy8gSWYgW2xpYnJhcnldIGlzIG51bGwsIHdlIGhhdmUgYWxyZWFkeSByZXBvcnRlZCBhIHByb2JsZW0gdGhhdCB0aGlzCiAgICAgIC8vIHBhcnQgaXMgb3JwaGFuZWQuCiAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQgPSA8TG9jYXRlZE1lc3NhZ2U+WwogICAgICAgIG1lc3NhZ2VQYXJ0SW5QYXJ0TGlicmFyeUNvbnRleHQud2l0aExvY2F0aW9uKGxpYnJhcnkuZmlsZVVyaSwgLTEsIDEpLAogICAgICBdOwogICAgICBmb3IgKGludCBvZmZzZXQgaW4gcGFydE9mZnNldHMpIHsKICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2VQYXJ0SW5QYXJ0LCBvZmZzZXQsIG5vTGVuZ3RoLCBmaWxlVXJpLAogICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0KTsKICAgICAgfQogICAgICBmb3IgKFNvdXJjZUxpYnJhcnlCdWlsZGVyIHBhcnQgaW4gcGFydHMpIHsKICAgICAgICAvLyBNYXJrIHRoaXMgcGFydCBhcyB1c2VkIHNvIHdlIGRvbid0IHJlcG9ydCBpdCBhcyBvcnBoYW5lZC4KICAgICAgICB1c2VkUGFydHMuYWRkKHBhcnQudXJpKTsKICAgICAgfQogICAgfQogICAgcGFydHMuY2xlYXIoKTsKICAgIGlmIChleHBvcnRlcnMuaXNOb3RFbXB0eSkgewogICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0ID0gPExvY2F0ZWRNZXNzYWdlPlsKICAgICAgICBtZXNzYWdlUGFydEV4cG9ydENvbnRleHQud2l0aExvY2F0aW9uKGZpbGVVcmksIC0xLCAxKSwKICAgICAgXTsKICAgICAgZm9yIChFeHBvcnQgZXhwb3J0IGluIGV4cG9ydGVycykgewogICAgICAgIGV4cG9ydC5leHBvcnRlci5hZGRQcm9ibGVtKAogICAgICAgICAgICBtZXNzYWdlUGFydEV4cG9ydCwgZXhwb3J0LmNoYXJPZmZzZXQsICJleHBvcnQiLmxlbmd0aCwgbnVsbCwKICAgICAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgaW5jbHVkZVBhcnRzKFNldDxVcmk+IHVzZWRQYXJ0cykgewogICAgU2V0PFVyaT4gc2VlblBhcnRzID0gbmV3IFNldDxVcmk+KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIHBhcnQgPSBwYXJ0c1tpXTsKICAgICAgaW50IHBhcnRPZmZzZXQgPSBwYXJ0T2Zmc2V0c1tpXTsKICAgICAgaWYgKHBhcnQgPT0gdGhpcykgewogICAgICAgIGFkZFByb2JsZW0obWVzc2FnZVBhcnRPZlNlbGYsIC0xLCBub0xlbmd0aCwgZmlsZVVyaSk7CiAgICAgIH0gZWxzZSBpZiAoc2VlblBhcnRzLmFkZChwYXJ0LmZpbGVVcmkpKSB7CiAgICAgICAgaWYgKHBhcnQucGFydE9mTGlicmFyeSAhPSBudWxsKSB7CiAgICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2VQYXJ0T2ZUd29MaWJyYXJpZXMsIC0xLCBub0xlbmd0aCwgcGFydC5maWxlVXJpLAogICAgICAgICAgICAgIGNvbnRleHQ6IFsKICAgICAgICAgICAgICAgIG1lc3NhZ2VQYXJ0T2ZUd29MaWJyYXJpZXNDb250ZXh0LndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgICAgICBwYXJ0LnBhcnRPZkxpYnJhcnkuZmlsZVVyaSwgLTEsIG5vTGVuZ3RoKSwKICAgICAgICAgICAgICAgIG1lc3NhZ2VQYXJ0T2ZUd29MaWJyYXJpZXNDb250ZXh0LndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVVcmksIC0xLCBub0xlbmd0aCkKICAgICAgICAgICAgICBdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGlzUGF0Y2gpIHsKICAgICAgICAgICAgdXNlZFBhcnRzLmFkZChwYXJ0LmZpbGVVcmkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdXNlZFBhcnRzLmFkZChwYXJ0LnVyaSk7CiAgICAgICAgICB9CiAgICAgICAgICBpbmNsdWRlUGFydChwYXJ0LCB1c2VkUGFydHMsIHBhcnRPZmZzZXQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlUGFydFR3aWNlLndpdGhBcmd1bWVudHMocGFydC5maWxlVXJpKSwgLTEsIG5vTGVuZ3RoLAogICAgICAgICAgICBmaWxlVXJpKTsKICAgICAgfQogICAgfQogIH0KCiAgYm9vbCBpbmNsdWRlUGFydCgKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgcGFydCwgU2V0PFVyaT4gdXNlZFBhcnRzLCBpbnQgcGFydE9mZnNldCkgewogICAgaWYgKHBhcnQucGFydE9mVXJpICE9IG51bGwpIHsKICAgICAgaWYgKHVyaUlzVmFsaWQocGFydC5wYXJ0T2ZVcmkpICYmIHBhcnQucGFydE9mVXJpICE9IHVyaSkgewogICAgICAgIC8vIFRoaXMgaXMgYW4gZXJyb3IsIGJ1dCB0aGUgcGFydCBpcyBub3QgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IG9mIHBhcnRzLAogICAgICAgIC8vIHNvIHRoYXQgbWV0YWRhdGEgYW5ub3RhdGlvbnMgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBpdC4KICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZVBhcnRPZlVyaU1pc21hdGNoLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBwYXJ0LmZpbGVVcmksIHVyaSwgcGFydC5wYXJ0T2ZVcmkpLAogICAgICAgICAgICBwYXJ0T2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgZmlsZVVyaSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHBhcnQucGFydE9mTmFtZSAhPSBudWxsKSB7CiAgICAgIGlmIChuYW1lICE9IG51bGwpIHsKICAgICAgICBpZiAocGFydC5wYXJ0T2ZOYW1lICE9IG5hbWUpIHsKICAgICAgICAgIC8vIFRoaXMgaXMgYW4gZXJyb3IsIGJ1dCB0aGUgcGFydCBpcyBub3QgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IG9mCiAgICAgICAgICAvLyBwYXJ0cywgc28gdGhhdCBtZXRhZGF0YSBhbm5vdGF0aW9ucyBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGl0LgogICAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgICB0ZW1wbGF0ZVBhcnRPZkxpYnJhcnlOYW1lTWlzbWF0Y2gud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgcGFydC5maWxlVXJpLCBuYW1lLCBwYXJ0LnBhcnRPZk5hbWUpLAogICAgICAgICAgICAgIHBhcnRPZmZzZXQsCiAgICAgICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICAgICAgZmlsZVVyaSk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRoaXMgaXMgYW4gZXJyb3IsIGJ1dCB0aGUgcGFydCBpcyBub3QgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IG9mIHBhcnRzLAogICAgICAgIC8vIHNvIHRoYXQgbWV0YWRhdGEgYW5ub3RhdGlvbnMgY2FuIGJlIGFzc29jaWF0ZWQgd2l0aCBpdC4KICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZVBhcnRPZlVzZVVyaS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgcGFydC5maWxlVXJpLCBmaWxlVXJpLCBwYXJ0LnBhcnRPZk5hbWUpLAogICAgICAgICAgICBwYXJ0T2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgZmlsZVVyaSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBUaGlzIGlzIGFuIGVycm9yLCBidXQgdGhlIHBhcnQgaXMgbm90IHJlbW92ZWQgZnJvbSB0aGUgbGlzdCBvZiBwYXJ0cywKICAgICAgLy8gc28gdGhhdCBtZXRhZGF0YSBhbm5vdGF0aW9ucyBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGl0LgogICAgICBhc3NlcnQoIXBhcnQuaXNQYXJ0KTsKICAgICAgaWYgKHVyaUlzVmFsaWQocGFydC5maWxlVXJpKSkgewogICAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVNaXNzaW5nUGFydE9mLndpdGhBcmd1bWVudHMocGFydC5maWxlVXJpKSwKICAgICAgICAgICAgcGFydE9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHBhcnQudmFsaWRhdGVQYXJ0KHRoaXMsIHVzZWRQYXJ0cyk7CiAgICBOYW1lSXRlcmF0b3IgcGFydERlY2xhcmF0aW9ucyA9IHBhcnQubmFtZUl0ZXJhdG9yOwogICAgd2hpbGUgKHBhcnREZWNsYXJhdGlvbnMubW92ZU5leHQoKSkgewogICAgICBTdHJpbmcgbmFtZSA9IHBhcnREZWNsYXJhdGlvbnMubmFtZTsKICAgICAgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSBwYXJ0RGVjbGFyYXRpb25zLmN1cnJlbnQ7CgogICAgICBpZiAoZGVjbGFyYXRpb24ubmV4dCAhPSBudWxsKSB7CiAgICAgICAgTGlzdDxEZWNsYXJhdGlvbj4gZHVwbGljYXRlZCA9IDxEZWNsYXJhdGlvbj5bXTsKICAgICAgICB3aGlsZSAoZGVjbGFyYXRpb24ubmV4dCAhPSBudWxsKSB7CiAgICAgICAgICBkdXBsaWNhdGVkLmFkZChkZWNsYXJhdGlvbik7CiAgICAgICAgICBwYXJ0RGVjbGFyYXRpb25zLm1vdmVOZXh0KCk7CiAgICAgICAgICBkZWNsYXJhdGlvbiA9IHBhcnREZWNsYXJhdGlvbnMuY3VycmVudDsKICAgICAgICB9CiAgICAgICAgZHVwbGljYXRlZC5hZGQoZGVjbGFyYXRpb24pOwogICAgICAgIC8vIEhhbmRsZSBkdXBsaWNhdGVkIGRlY2xhcmF0aW9ucyBpbiB0aGUgcGFydC4KICAgICAgICAvLwogICAgICAgIC8vIER1cGxpY2F0ZWQgZGVjbGFyYXRpb25zIGFyZSBoYW5kbGVkIGJ5IGNyZWF0aW5nIGEgbGlua2VkIGxpc3QgdXNpbmcKICAgICAgICAvLyB0aGUgYG5leHRgIGZpZWxkLiBUaGlzIGlzIHByZWZlcnJlZCBvdmVyIG1ha2luZyBhbGwgc2NvcGUgZW50cmllcyBiZQogICAgICAgIC8vIGEgYExpc3Q8RGVjbGFyYXRpb24+YC4KICAgICAgICAvLwogICAgICAgIC8vIFdlIG1haW50YWluIHRoZSBsaW5rZWQgbGlzdCBzbyB0aGF0IHRoZSBsYXN0IGVudHJ5IGlzIGVhc3kgdG8KICAgICAgICAvLyByZWNvZ25pemUgKGl0J3MgYG5leHRgIGZpZWxkIGlzIG51bGwpLiBUaGlzIG1lYW5zIHRoYXQgaXQgaXMKICAgICAgICAvLyByZXZlcnNlZCB3aXRoIHJlc3BlY3QgdG8gc291cmNlIGNvZGUgb3JkZXIuIFNpbmNlIGtlcm5lbCBkb2Vzbid0CiAgICAgICAgLy8gYWxsb3cgZHVwbGljYXRlZCBkZWNsYXJhdGlvbnMsIHdlIGVuc3VyZSB0aGF0IHdlIG9ubHkgYWRkIHRoZSBmaXJzdAogICAgICAgIC8vIGRlY2xhcmF0aW9uIHRvIHRoZSBrZXJuZWwgdHJlZS4KICAgICAgICAvLwogICAgICAgIC8vIFNpbmNlIHRoZSBkdXBsaWNhdGVkIGRlY2xhcmF0aW9ucyBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3JkZXIsIHdlCiAgICAgICAgLy8gaXRlcmF0ZSBvdmVyIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciBhcyB0aGlzIGlzIHNpbXBsZXIgYW5kIG5vcm1hbGx5CiAgICAgICAgLy8gbm90IGEgcHJvYmxlbS4gSG93ZXZlciwgaW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gY2FsbCBbYWRkQnVpbGRlcl0gaW4KICAgICAgICAvLyBzb3VyY2Ugb3JkZXIgYXMgaXQgd291bGQgb3RoZXJ3aXNlIGNyZWF0ZSBjeWNsZXMuCiAgICAgICAgLy8KICAgICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gYmUgY2FyZWZ1bCBwcmVzZXJ2aW5nIHRoZSBvcmRlciBvZiB0aGUgbGlua3MuIFRoZQogICAgICAgIC8vIHBhcnQgbGlicmFyeSBzdGlsbCBrZWVwcyB0aGVzZSBkZWNsYXJhdGlvbnMgaW4gaXRzIHNjb3BlIHNvIHRoYXQKICAgICAgICAvLyBEaWV0TGlzdGVuZXIgY2FuIGZpbmQgdGhlbS4KICAgICAgICBmb3IgKGludCBpID0gZHVwbGljYXRlZC5sZW5ndGg7IGkgPiAwOyBpLS0pIHsKICAgICAgICAgIERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gZHVwbGljYXRlZFtpIC0gMV07CiAgICAgICAgICBhZGRCdWlsZGVyKG5hbWUsIGRlY2xhcmF0aW9uLCBkZWNsYXJhdGlvbi5jaGFyT2Zmc2V0KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWRkQnVpbGRlcihuYW1lLCBkZWNsYXJhdGlvbiwgZGVjbGFyYXRpb24uY2hhck9mZnNldCk7CiAgICAgIH0KICAgIH0KICAgIHR5cGVzLmFkZEFsbChwYXJ0LnR5cGVzKTsKICAgIGNvbnN0cnVjdG9yUmVmZXJlbmNlcy5hZGRBbGwocGFydC5jb25zdHJ1Y3RvclJlZmVyZW5jZXMpOwogICAgcGFydC5wYXJ0T2ZMaWJyYXJ5ID0gdGhpczsKICAgIHBhcnQuc2NvcGUuYmVjb21lUGFydE9mKHNjb3BlKTsKICAgIC8vIFRPRE8oYWhlKTogSW5jbHVkZSBtZXRhZGF0YSBmcm9tIHBhcnQ/CgogICAgbmF0aXZlTWV0aG9kcy5hZGRBbGwocGFydC5uYXRpdmVNZXRob2RzKTsKICAgIGJvdW5kbGVzc1R5cGVWYXJpYWJsZXMuYWRkQWxsKHBhcnQuYm91bmRsZXNzVHlwZVZhcmlhYmxlcyk7CiAgICAvLyBDaGVjayB0aGF0IHRoZSB0YXJnZXRzIGFyZSBkaWZmZXJlbnQuIFRoaXMgaXMgbm90IG5vcm1hbGx5IGEgcHJvYmxlbQogICAgLy8gYnV0IGlzIGZvciBwYXRjaCBmaWxlcy4KICAgIGlmICh0YXJnZXQgIT0gcGFydC50YXJnZXQgJiYgcGFydC50YXJnZXQucHJvYmxlbXNBc0pzb24gIT0gbnVsbCkgewogICAgICB0YXJnZXQucHJvYmxlbXNBc0pzb24gPz89IDxTdHJpbmc+W107CiAgICAgIHRhcmdldC5wcm9ibGVtc0FzSnNvbi5hZGRBbGwocGFydC50YXJnZXQucHJvYmxlbXNBc0pzb24pOwogICAgfQogICAgTGlzdDxGaWVsZEJ1aWxkZXI+IHBhcnRJbXBsaWNpdGx5VHlwZWRGaWVsZHMgPQogICAgICAgIHBhcnQudGFrZUltcGxpY2l0bHlUeXBlZEZpZWxkcygpOwogICAgaWYgKHBhcnRJbXBsaWNpdGx5VHlwZWRGaWVsZHMgIT0gbnVsbCkgewogICAgICBpZiAoaW1wbGljaXRseVR5cGVkRmllbGRzID09IG51bGwpIHsKICAgICAgICBpbXBsaWNpdGx5VHlwZWRGaWVsZHMgPSBwYXJ0SW1wbGljaXRseVR5cGVkRmllbGRzOwogICAgICB9IGVsc2UgewogICAgICAgIGltcGxpY2l0bHlUeXBlZEZpZWxkcy5hZGRBbGwocGFydEltcGxpY2l0bHlUeXBlZEZpZWxkcyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgdm9pZCBidWlsZEluaXRpYWxTY29wZXMoKSB7CiAgICBOYW1lSXRlcmF0b3IgaXRlcmF0b3IgPSBuYW1lSXRlcmF0b3I7CiAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICBhZGRUb0V4cG9ydFNjb3BlKGl0ZXJhdG9yLm5hbWUsIGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgfQogIH0KCiAgdm9pZCBhZGRJbXBvcnRzVG9TY29wZSgpIHsKICAgIGJvb2wgZXhwbGljaXRDb3JlSW1wb3J0ID0gdGhpcyA9PSBsb2FkZXIuY29yZUxpYnJhcnk7CiAgICBmb3IgKEltcG9ydCBpbXBvcnQgaW4gaW1wb3J0cykgewogICAgICBpZiAoaW1wb3J0LmltcG9ydGVkID09IGxvYWRlci5jb3JlTGlicmFyeSkgewogICAgICAgIGV4cGxpY2l0Q29yZUltcG9ydCA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKGltcG9ydC5pbXBvcnRlZD8uaXNQYXJ0ID8/IGZhbHNlKSB7CiAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVQYXJ0T2ZJbkxpYnJhcnkud2l0aEFyZ3VtZW50cyhpbXBvcnQuaW1wb3J0ZWQuZmlsZVVyaSksCiAgICAgICAgICAgIGltcG9ydC5jaGFyT2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgZmlsZVVyaSk7CiAgICAgIH0KICAgICAgaW1wb3J0LmZpbmFsaXplSW1wb3J0cyh0aGlzKTsKICAgIH0KICAgIGlmICghZXhwbGljaXRDb3JlSW1wb3J0KSB7CiAgICAgIGxvYWRlci5jb3JlTGlicmFyeS5leHBvcnRTY29wZS5mb3JFYWNoKChTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gbWVtYmVyKSB7CiAgICAgICAgYWRkVG9TY29wZShuYW1lLCBtZW1iZXIsIC0xLCB0cnVlKTsKICAgICAgfSk7CiAgICB9CgogICAgZXhwb3J0U2NvcGUuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIERlY2xhcmF0aW9uIG1lbWJlcikgewogICAgICBpZiAobWVtYmVyLnBhcmVudCAhPSB0aGlzKSB7CiAgICAgICAgc3dpdGNoIChuYW1lKSB7CiAgICAgICAgICBjYXNlICJkeW5hbWljIjoKICAgICAgICAgIGNhc2UgInZvaWQiOgogICAgICAgICAgICB1bnNlcmlhbGl6YWJsZUV4cG9ydHMgPz89IDxTdHJpbmcsIFN0cmluZz57fTsKICAgICAgICAgICAgdW5zZXJpYWxpemFibGVFeHBvcnRzW25hbWVdID0gbnVsbDsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgaWYgKG1lbWJlciBpcyBJbnZhbGlkVHlwZUJ1aWxkZXIpIHsKICAgICAgICAgICAgICB1bnNlcmlhbGl6YWJsZUV4cG9ydHMgPz89IDxTdHJpbmcsIFN0cmluZz57fTsKICAgICAgICAgICAgICB1bnNlcmlhbGl6YWJsZUV4cG9ydHNbbmFtZV0gPSBtZW1iZXIubWVzc2FnZS5tZXNzYWdlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIEV2ZW50dWFsbHkgKGluICNidWlsZEJ1aWxkZXIpIG1lbWJlcnMgYXJlbid0IGFkZGVkIHRvIHRoZQogICAgICAgICAgICAgIC8vIGxpYnJhcnkgaWYgdGhlIGhhdmUgJ25leHQnIHBvaW50ZXJzLCBzbyBkb24ndCBhZGQgdGhlbSBhcwogICAgICAgICAgICAgIC8vIGFkZGl0aW9uYWxFeHBvcnRzIGVpdGhlci4gQWRkIHRoZSBsYXN0IG9uZSBvbmx5ICh0aGUgb25lIHRoYXQKICAgICAgICAgICAgICAvLyB3aWxsIGV2ZW50dWFsbHkgYmUgYWRkZWQgdG8gdGhlIGxpYnJhcnkpLgogICAgICAgICAgICAgIERlY2xhcmF0aW9uIG1lbWJlckxhc3QgPSBtZW1iZXI7CiAgICAgICAgICAgICAgd2hpbGUgKG1lbWJlckxhc3QubmV4dCAhPSBudWxsKSBtZW1iZXJMYXN0ID0gbWVtYmVyTGFzdC5uZXh0OwogICAgICAgICAgICAgIGxpYnJhcnkuYWRkaXRpb25hbEV4cG9ydHMuYWRkKG1lbWJlckxhc3QudGFyZ2V0LnJlZmVyZW5jZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRUb1Njb3BlKAogICAgICBTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gbWVtYmVyLCBpbnQgY2hhck9mZnNldCwgYm9vbCBpc0ltcG9ydCkgewogICAgTWFwPFN0cmluZywgRGVjbGFyYXRpb24+IG1hcCA9CiAgICAgICAgbWVtYmVyLmlzU2V0dGVyID8gaW1wb3J0U2NvcGUuc2V0dGVycyA6IGltcG9ydFNjb3BlLmxvY2FsOwogICAgRGVjbGFyYXRpb24gZXhpc3RpbmcgPSBtYXBbbmFtZV07CiAgICBpZiAoZXhpc3RpbmcgIT0gbnVsbCkgewogICAgICBpZiAoZXhpc3RpbmcgIT0gbWVtYmVyKSB7CiAgICAgICAgbWFwW25hbWVdID0gY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uKAogICAgICAgICAgICBuYW1lLCBleGlzdGluZywgbWVtYmVyLCBjaGFyT2Zmc2V0LAogICAgICAgICAgICBpc0ltcG9ydDogaXNJbXBvcnQpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBtYXBbbmFtZV0gPSBtZW1iZXI7CiAgICB9CiAgfQoKICAvLy8gUmVzb2x2ZXMgYWxsIHVucmVzb2x2ZWQgdHlwZXMgaW4gW3R5cGVzXS4gVGhlIGxpc3Qgb2YgdHlwZXMgaXMgY2xlYXJlZAogIC8vLyB3aGVuIGRvbmUuCiAgaW50IHJlc29sdmVUeXBlcygpIHsKICAgIGludCB0eXBlQ291bnQgPSB0eXBlcy5sZW5ndGg7CiAgICBmb3IgKFVucmVzb2x2ZWRUeXBlIHQgaW4gdHlwZXMpIHsKICAgICAgdC5yZXNvbHZlSW4oc2NvcGUsIHRoaXMpOwogICAgICBpZiAoIWxvYWRlci50YXJnZXQubGVnYWN5TW9kZSkgewogICAgICAgIHQuY2hlY2tUeXBlKHRoaXMpOwogICAgICB9IGVsc2UgewogICAgICAgIHQubm9ybWFsaXplVHlwZSgpOwogICAgICB9CiAgICB9CiAgICB0eXBlcy5jbGVhcigpOwogICAgcmV0dXJuIHR5cGVDb3VudDsKICB9CgogIEBvdmVycmlkZQogIGludCByZXNvbHZlQ29uc3RydWN0b3JzKF8pIHsKICAgIGludCBjb3VudCA9IDA7CiAgICBJdGVyYXRvcjxEZWNsYXJhdGlvbj4gaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yOwogICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgY291bnQgKz0gaXRlcmF0b3IuY3VycmVudC5yZXNvbHZlQ29uc3RydWN0b3JzKHRoaXMpOwogICAgfQogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBmdWxsTmFtZUZvckVycm9ycyB7CiAgICAvLyBUT0RPKGFoZSk6IENvbnNpZGVyIGlmIHdlIHNob3VsZCB1c2UgcmVsYXRpdml6ZVVyaSBoZXJlLiBUaGUgZG93bnNpZGUgdG8KICAgIC8vIGRvaW5nIHRoYXQgaXMgdGhhdCB0aGlzIFVSSSBtYXkgYmUgdXNlZCBpbiBhbiBlcnJvciBtZXNzYWdlLiBJZGVhbGx5LCB3ZQogICAgLy8gc2hvdWxkIGNyZWF0ZSBhIGNsYXNzIHRoYXQgcmVwcmVzZW50cyBxdWFsaWZpZWQgbmFtZXMgdGhhdCB3ZSBjYW4KICAgIC8vIHJlbGF0aXZpemUgd2hlbiBwcmludGluZyBhIG1lc3NhZ2UsIGJ1dCBzdGlsbCBzdG9yZSB0aGUgZnVsbCBVUkkgaW4KICAgIC8vIC5kaWxsIGZpbGVzLgogICAgcmV0dXJuIG5hbWUgPz8gIjxsaWJyYXJ5ICckZmlsZVVyaSc+IjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVjb3JkQWNjZXNzKGludCBjaGFyT2Zmc2V0LCBpbnQgbGVuZ3RoLCBVcmkgZmlsZVVyaSkgewogICAgYWNjZXNzb3JzLmFkZChmaWxlVXJpKTsKICAgIGFjY2Vzc29ycy5hZGQoY2hhck9mZnNldCk7CiAgICBhY2Nlc3NvcnMuYWRkKGxlbmd0aCk7CiAgICBpZiAoYWNjZXNzUHJvYmxlbSAhPSBudWxsKSB7CiAgICAgIGFkZFByb2JsZW0oYWNjZXNzUHJvYmxlbSwgY2hhck9mZnNldCwgbGVuZ3RoLCBmaWxlVXJpKTsKICAgIH0KICB9CgogIHZvaWQgYWRkUHJvYmxlbUF0QWNjZXNzb3JzKE1lc3NhZ2UgbWVzc2FnZSkgewogICAgaWYgKGFjY2Vzc1Byb2JsZW0gPT0gbnVsbCkgewogICAgICBpZiAoYWNjZXNzb3JzLmlzRW1wdHkgJiYgdGhpcyA9PSBsb2FkZXIuZmlyc3QpIHsKICAgICAgICAvLyBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBsaWJyYXJ5LCBhbmQgbm9ib2R5IGFjY2VzcyBpdCBkaXJlY3RseS4gU28KICAgICAgICAvLyB3ZSBuZWVkIHRvIHJlcG9ydCBhIHByb2JsZW0uCiAgICAgICAgbG9hZGVyLmFkZFByb2JsZW0obWVzc2FnZSwgLTEsIDEsIG51bGwpOwogICAgICB9CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWNjZXNzb3JzLmxlbmd0aDsgaSArPSAzKSB7CiAgICAgICAgVXJpIGFjY2Vzc29yID0gYWNjZXNzb3JzW2ldOwogICAgICAgIGludCBjaGFyT2Zmc2V0ID0gYWNjZXNzb3JzW2kgKyAxXTsKICAgICAgICBpbnQgbGVuZ3RoID0gYWNjZXNzb3JzW2kgKyAyXTsKICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGxlbmd0aCwgYWNjZXNzb3IpOwogICAgICB9CiAgICAgIGFjY2Vzc1Byb2JsZW0gPSBtZXNzYWdlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlTGlicmFyeUJ1aWxkZXIgZ2V0IG9yaWdpbiA9PiBhY3R1YWxPcmlnaW4gPz8gdGhpczsKCiAgQG92ZXJyaWRlCiAgTGlicmFyeSBnZXQgdGFyZ2V0ID0+IGxpYnJhcnk7CgogIFVyaSBnZXQgdXJpID0+IGxpYnJhcnkuaW1wb3J0VXJpOwoKICB2b2lkIGFkZFN5bnRoZXRpY0RlY2xhcmF0aW9uT2ZEeW5hbWljKCkgewogICAgYWRkQnVpbGRlcigKICAgICAgICAiZHluYW1pYyIsIG5ldyBEeW5hbWljVHlwZUJ1aWxkZXIoY29uc3QgRHluYW1pY1R5cGUoKSwgdGhpcywgLTEpLCAtMSk7CiAgfQoKICBUeXBlQnVpbGRlciBhZGROYW1lZFR5cGUoCiAgICAgIE9iamVjdCBuYW1lLCBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMsIGludCBjaGFyT2Zmc2V0KSB7CiAgICByZXR1cm4gYWRkVHlwZShuZXcgTmFtZWRUeXBlQnVpbGRlcihuYW1lLCBhcmd1bWVudHMpLCBjaGFyT2Zmc2V0KTsKICB9CgogIFR5cGVCdWlsZGVyIGFkZE1peGluQXBwbGljYXRpb24oCiAgICAgIFR5cGVCdWlsZGVyIHN1cGVydHlwZSwgTGlzdDxUeXBlQnVpbGRlcj4gbWl4aW5zLCBpbnQgY2hhck9mZnNldCkgewogICAgcmV0dXJuIGFkZFR5cGUobmV3IE1peGluQXBwbGljYXRpb25CdWlsZGVyKHN1cGVydHlwZSwgbWl4aW5zKSwgY2hhck9mZnNldCk7CiAgfQoKICBUeXBlQnVpbGRlciBhZGRWb2lkVHlwZShpbnQgY2hhck9mZnNldCkgewogICAgcmV0dXJuIGFkZE5hbWVkVHlwZSgidm9pZCIsIG51bGwsIGNoYXJPZmZzZXQpCiAgICAgIC4uYmluZChuZXcgVm9pZFR5cGVCdWlsZGVyKGNvbnN0IFZvaWRUeXBlKCksIHRoaXMsIGNoYXJPZmZzZXQpKTsKICB9CgogIEBvdmVycmlkZQogIEZvcm1hdHRlZE1lc3NhZ2UgYWRkUHJvYmxlbSgKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwgVXJpIGZpbGVVcmksCiAgICAgIHtib29sIHdhc0hhbmRsZWQ6IGZhbHNlLAogICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0LAogICAgICBTZXZlcml0eSBzZXZlcml0eSwKICAgICAgYm9vbCBwcm9ibGVtT25MaWJyYXJ5OiBmYWxzZX0pIHsKICAgIEZvcm1hdHRlZE1lc3NhZ2UgZm9ybWF0dGVkTWVzc2FnZSA9IHN1cGVyLmFkZFByb2JsZW0oCiAgICAgICAgbWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLCBmaWxlVXJpLAogICAgICAgIHdhc0hhbmRsZWQ6IHdhc0hhbmRsZWQsCiAgICAgICAgY29udGV4dDogY29udGV4dCwKICAgICAgICBzZXZlcml0eTogc2V2ZXJpdHksCiAgICAgICAgcHJvYmxlbU9uTGlicmFyeTogdHJ1ZSk7CiAgICBpZiAoZm9ybWF0dGVkTWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIHRhcmdldC5wcm9ibGVtc0FzSnNvbiA/Pz0gPFN0cmluZz5bXTsKICAgICAgdGFyZ2V0LnByb2JsZW1zQXNKc29uLmFkZChmb3JtYXR0ZWRNZXNzYWdlLnRvSnNvblN0cmluZygpKTsKICAgIH0KICAgIHJldHVybiBmb3JtYXR0ZWRNZXNzYWdlOwogIH0KCiAgdm9pZCBhZGRDbGFzcygKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFN0cmluZyBjbGFzc05hbWUsCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcywKICAgICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlLAogICAgICBMaXN0PFR5cGVCdWlsZGVyPiBpbnRlcmZhY2VzLAogICAgICBpbnQgc3RhcnRPZmZzZXQsCiAgICAgIGludCBuYW1lT2Zmc2V0LAogICAgICBpbnQgZW5kT2Zmc2V0LAogICAgICBpbnQgc3VwZXJ0eXBlT2Zmc2V0KSB7CiAgICBfYWRkQ2xhc3MoCiAgICAgICAgRGVjbGFyYXRpb25LaW5kLmNsYXNzRGVjbGFyYXRpb24sCiAgICAgICAgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgbW9kaWZpZXJzLAogICAgICAgIGNsYXNzTmFtZSwKICAgICAgICB0eXBlVmFyaWFibGVzLAogICAgICAgIHN1cGVydHlwZSwKICAgICAgICBpbnRlcmZhY2VzLAogICAgICAgIHN0YXJ0T2Zmc2V0LAogICAgICAgIG5hbWVPZmZzZXQsCiAgICAgICAgZW5kT2Zmc2V0LAogICAgICAgIHN1cGVydHlwZU9mZnNldCk7CiAgfQoKICB2b2lkIGFkZE1peGluRGVjbGFyYXRpb24oCiAgICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBTdHJpbmcgY2xhc3NOYW1lLAogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMsCiAgICAgIFR5cGVCdWlsZGVyIHN1cGVydHlwZSwKICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gaW50ZXJmYWNlcywKICAgICAgaW50IHN0YXJ0T2Zmc2V0LAogICAgICBpbnQgbmFtZU9mZnNldCwKICAgICAgaW50IGVuZE9mZnNldCwKICAgICAgaW50IHN1cGVydHlwZU9mZnNldCkgewogICAgX2FkZENsYXNzKAogICAgICAgIERlY2xhcmF0aW9uS2luZC5taXhpbkRlY2xhcmF0aW9uLAogICAgICAgIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIG1vZGlmaWVycywKICAgICAgICBjbGFzc05hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICBzdXBlcnR5cGUsCiAgICAgICAgaW50ZXJmYWNlcywKICAgICAgICBzdGFydE9mZnNldCwKICAgICAgICBuYW1lT2Zmc2V0LAogICAgICAgIGVuZE9mZnNldCwKICAgICAgICBzdXBlcnR5cGVPZmZzZXQpOwogIH0KCiAgdm9pZCBfYWRkQ2xhc3MoCiAgICAgIERlY2xhcmF0aW9uS2luZCBraW5kLAogICAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgaW50IG1vZGlmaWVycywKICAgICAgU3RyaW5nIGNsYXNzTmFtZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgICBUeXBlQnVpbGRlciBzdXBlcnR5cGUsCiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXMsCiAgICAgIGludCBzdGFydE9mZnNldCwKICAgICAgaW50IG5hbWVPZmZzZXQsCiAgICAgIGludCBlbmRPZmZzZXQsCiAgICAgIGludCBzdXBlcnR5cGVPZmZzZXQpIHsKICAgIC8vIE5lc3RlZCBkZWNsYXJhdGlvbiBiZWdhbiBpbiBgT3V0bGluZUJ1aWxkZXIuYmVnaW5DbGFzc0RlY2xhcmF0aW9uYC4KICAgIERlY2xhcmF0aW9uQnVpbGRlciBkZWNsYXJhdGlvbiA9IGVuZE5lc3RlZERlY2xhcmF0aW9uKGtpbmQsIGNsYXNzTmFtZSkKICAgICAgLi5yZXNvbHZlVHlwZXModHlwZVZhcmlhYmxlcywgdGhpcyk7CiAgICBhc3NlcnQoZGVjbGFyYXRpb24ucGFyZW50ID09IGxpYnJhcnlEZWNsYXJhdGlvbik7CiAgICBNYXA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPiBtZW1iZXJzID0gZGVjbGFyYXRpb24ubWVtYmVyczsKICAgIE1hcDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+IGNvbnN0cnVjdG9ycyA9IGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yczsKICAgIE1hcDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+IHNldHRlcnMgPSBkZWNsYXJhdGlvbi5zZXR0ZXJzOwoKICAgIFNjb3BlIGNsYXNzU2NvcGUgPSBuZXcgU2NvcGUobWVtYmVycywgc2V0dGVycywKICAgICAgICBzY29wZS53aXRoVHlwZVZhcmlhYmxlcyh0eXBlVmFyaWFibGVzKSwgImNsYXNzICRjbGFzc05hbWUiLAogICAgICAgIGlzTW9kaWZpYWJsZTogZmFsc2UpOwoKICAgIC8vIFdoZW4gbG9va2luZyB1cCBhIGNvbnN0cnVjdG9yLCB3ZSBkb24ndCBjb25zaWRlciB0eXBlIHZhcmlhYmxlcyBvciB0aGUKICAgIC8vIGxpYnJhcnkgc2NvcGUuCiAgICBTY29wZSBjb25zdHJ1Y3RvclNjb3BlID0KICAgICAgICBuZXcgU2NvcGUoY29uc3RydWN0b3JzLCBudWxsLCBudWxsLCBjbGFzc05hbWUsIGlzTW9kaWZpYWJsZTogZmFsc2UpOwogICAgYm9vbCBpc01peGluRGVjbGFyYXRpb24gPSBmYWxzZTsKICAgIGlmIChtb2RpZmllcnMgJiBtaXhpbkRlY2xhcmF0aW9uTWFzayAhPSAwKSB7CiAgICAgIGlzTWl4aW5EZWNsYXJhdGlvbiA9IHRydWU7CiAgICAgIG1vZGlmaWVycyA9IChtb2RpZmllcnMgJiB+bWl4aW5EZWNsYXJhdGlvbk1hc2spIHwgYWJzdHJhY3RNYXNrOwogICAgfQogICAgaWYgKGRlY2xhcmF0aW9uLmhhc0NvbnN0Q29uc3RydWN0b3IpIHsKICAgICAgbW9kaWZpZXJzIHw9IGhhc0NvbnN0Q29uc3RydWN0b3JNYXNrOwogICAgfQogICAgQ2xhc3NCdWlsZGVyIGNscyA9IG5ldyBTb3VyY2VDbGFzc0J1aWxkZXIoCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgbW9kaWZpZXJzLAogICAgICAgIGNsYXNzTmFtZSwKICAgICAgICB0eXBlVmFyaWFibGVzLAogICAgICAgIGFwcGx5TWl4aW5zKHN1cGVydHlwZSwgc3RhcnRPZmZzZXQsIG5hbWVPZmZzZXQsIGVuZE9mZnNldCwgY2xhc3NOYW1lLAogICAgICAgICAgICBpc01peGluRGVjbGFyYXRpb24sCiAgICAgICAgICAgIHR5cGVWYXJpYWJsZXM6IHR5cGVWYXJpYWJsZXMpLAogICAgICAgIGludGVyZmFjZXMsCiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQWRkIHRoZSBgb25gIGNsYXVzZSB0eXBlcyBvZiBhIG1peGluIGRlY2xhcmF0aW9uCiAgICAgICAgLy8gaGVyZS4KICAgICAgICBudWxsLAogICAgICAgIGNsYXNzU2NvcGUsCiAgICAgICAgY29uc3RydWN0b3JTY29wZSwKICAgICAgICB0aGlzLAogICAgICAgIG5ldyBMaXN0PENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlcj4uZnJvbShjb25zdHJ1Y3RvclJlZmVyZW5jZXMpLAogICAgICAgIHN0YXJ0T2Zmc2V0LAogICAgICAgIG5hbWVPZmZzZXQsCiAgICAgICAgZW5kT2Zmc2V0LAogICAgICAgIGlzTWl4aW5EZWNsYXJhdGlvbjogaXNNaXhpbkRlY2xhcmF0aW9uKTsKICAgIGxvYWRlci50YXJnZXQubWV0YWRhdGFDb2xsZWN0b3IKICAgICAgICA/LnNldERvY3VtZW50YXRpb25Db21tZW50KGNscy50YXJnZXQsIGRvY3VtZW50YXRpb25Db21tZW50KTsKCiAgICBjb25zdHJ1Y3RvclJlZmVyZW5jZXMuY2xlYXIoKTsKICAgIE1hcDxTdHJpbmcsIFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXNCeU5hbWUgPQogICAgICAgIGNoZWNrVHlwZVZhcmlhYmxlcyh0eXBlVmFyaWFibGVzLCBjbHMpOwogICAgdm9pZCBzZXRQYXJlbnQoU3RyaW5nIG5hbWUsIE1lbWJlckJ1aWxkZXIgbWVtYmVyKSB7CiAgICAgIHdoaWxlIChtZW1iZXIgIT0gbnVsbCkgewogICAgICAgIG1lbWJlci5wYXJlbnQgPSBjbHM7CiAgICAgICAgbWVtYmVyID0gbWVtYmVyLm5leHQ7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIHNldFBhcmVudEFuZENoZWNrQ29uZmxpY3RzKFN0cmluZyBuYW1lLCBNZW1iZXJCdWlsZGVyIG1lbWJlcikgewogICAgICBpZiAodHlwZVZhcmlhYmxlc0J5TmFtZSAhPSBudWxsKSB7CiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciB0diA9IHR5cGVWYXJpYWJsZXNCeU5hbWVbbmFtZV07CiAgICAgICAgaWYgKHR2ICE9IG51bGwpIHsKICAgICAgICAgIGNscy5hZGRQcm9ibGVtKHRlbXBsYXRlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZS53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCwKICAgICAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICBtZXNzYWdlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNhdXNlLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgICAgICB0di5maWxlVXJpLCB0di5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCkKICAgICAgICAgICAgICBdKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0UGFyZW50KG5hbWUsIG1lbWJlcik7CiAgICB9CgogICAgbWVtYmVycy5mb3JFYWNoKHNldFBhcmVudEFuZENoZWNrQ29uZmxpY3RzKTsKICAgIGNvbnN0cnVjdG9ycy5mb3JFYWNoKHNldFBhcmVudEFuZENoZWNrQ29uZmxpY3RzKTsKICAgIHNldHRlcnMuZm9yRWFjaChzZXRQYXJlbnRBbmRDaGVja0NvbmZsaWN0cyk7CiAgICBhZGRCdWlsZGVyKGNsYXNzTmFtZSwgY2xzLCBuYW1lT2Zmc2V0KTsKICB9CgogIE1hcDxTdHJpbmcsIFR5cGVWYXJpYWJsZUJ1aWxkZXI+IGNoZWNrVHlwZVZhcmlhYmxlcygKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLCBEZWNsYXJhdGlvbiBvd25lcikgewogICAgaWYgKHR5cGVWYXJpYWJsZXM/LmlzRW1wdHkgPz8gdHJ1ZSkgcmV0dXJuIG51bGw7CiAgICBNYXA8U3RyaW5nLCBUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzQnlOYW1lID0KICAgICAgICA8U3RyaW5nLCBUeXBlVmFyaWFibGVCdWlsZGVyPnt9OwogICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHR2IGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciBleGlzdGluZyA9IHR5cGVWYXJpYWJsZXNCeU5hbWVbdHYubmFtZV07CiAgICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWUsIHR2LmNoYXJPZmZzZXQsCiAgICAgICAgICAgIHR2Lm5hbWUubGVuZ3RoLCBmaWxlVXJpLAogICAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlCiAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHR2Lm5hbWUpCiAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICBmaWxlVXJpLCBleGlzdGluZy5jaGFyT2Zmc2V0LCBleGlzdGluZy5uYW1lLmxlbmd0aCkKICAgICAgICAgICAgXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdHlwZVZhcmlhYmxlc0J5TmFtZVt0di5uYW1lXSA9IHR2OwogICAgICAgIGlmIChvd25lciBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgICAgIC8vIE9ubHkgY2xhc3NlcyBhbmQgdHlwZSB2YXJpYWJsZXMgY2FuJ3QgaGF2ZSB0aGUgc2FtZSBuYW1lLiBTZWUKICAgICAgICAgIC8vIFsjMjk1NTVdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8yOTU1NSkuCiAgICAgICAgICBpZiAodHYubmFtZSA9PSBvd25lci5uYW1lKSB7CiAgICAgICAgICAgIGFkZFByb2JsZW0obWVzc2FnZVR5cGVWYXJpYWJsZVNhbWVOYW1lQXNFbmNsb3NpbmcsIHR2LmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICB0di5uYW1lLmxlbmd0aCwgZmlsZVVyaSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHlwZVZhcmlhYmxlc0J5TmFtZTsKICB9CgogIHZvaWQgYWRkRXh0ZW5zaW9uRGVjbGFyYXRpb24oCiAgICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBTdHJpbmcgZXh0ZW5zaW9uTmFtZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgICBUeXBlQnVpbGRlciB0eXBlLAogICAgICBpbnQgc3RhcnRPZmZzZXQsCiAgICAgIGludCBuYW1lT2Zmc2V0LAogICAgICBpbnQgZW5kT2Zmc2V0KSB7CiAgICAvLyBOZXN0ZWQgZGVjbGFyYXRpb24gYmVnYW4gaW4gYE91dGxpbmVCdWlsZGVyLmJlZ2luRXh0ZW5zaW9uRGVjbGFyYXRpb25gLgogICAgRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uID0gZW5kTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgRGVjbGFyYXRpb25LaW5kLmV4dGVuc2lvbkRlY2xhcmF0aW9uLCBleHRlbnNpb25OYW1lKQogICAgICAuLnJlc29sdmVUeXBlcyh0eXBlVmFyaWFibGVzLCB0aGlzKTsKICAgIGFzc2VydChkZWNsYXJhdGlvbi5wYXJlbnQgPT0gbGlicmFyeURlY2xhcmF0aW9uKTsKICAgIE1hcDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+IG1lbWJlcnMgPSBkZWNsYXJhdGlvbi5tZW1iZXJzOwogICAgTWFwPFN0cmluZywgTWVtYmVyQnVpbGRlcj4gY29uc3RydWN0b3JzID0gZGVjbGFyYXRpb24uY29uc3RydWN0b3JzOwogICAgTWFwPFN0cmluZywgTWVtYmVyQnVpbGRlcj4gc2V0dGVycyA9IGRlY2xhcmF0aW9uLnNldHRlcnM7CgogICAgU2NvcGUgY2xhc3NTY29wZSA9IG5ldyBTY29wZShtZW1iZXJzLCBzZXR0ZXJzLAogICAgICAgIHNjb3BlLndpdGhUeXBlVmFyaWFibGVzKHR5cGVWYXJpYWJsZXMpLCAiZXh0ZW5zaW9uICRleHRlbnNpb25OYW1lIiwKICAgICAgICBpc01vZGlmaWFibGU6IGZhbHNlKTsKCiAgICAvLyBXaGVuIGxvb2tpbmcgdXAgYSBjb25zdHJ1Y3Rvciwgd2UgZG9uJ3QgY29uc2lkZXIgdHlwZSB2YXJpYWJsZXMgb3IgdGhlCiAgICAvLyBsaWJyYXJ5IHNjb3BlLgogICAgU2NvcGUgY29uc3RydWN0b3JTY29wZSA9CiAgICAgICAgbmV3IFNjb3BlKGNvbnN0cnVjdG9ycywgbnVsbCwgbnVsbCwgZXh0ZW5zaW9uTmFtZSwgaXNNb2RpZmlhYmxlOiBmYWxzZSk7CiAgICBib29sIGlzTWl4aW5EZWNsYXJhdGlvbiA9IGZhbHNlOwogICAgaWYgKG1vZGlmaWVycyAmIG1peGluRGVjbGFyYXRpb25NYXNrICE9IDApIHsKICAgICAgaXNNaXhpbkRlY2xhcmF0aW9uID0gdHJ1ZTsKICAgICAgbW9kaWZpZXJzID0gKG1vZGlmaWVycyAmIH5taXhpbkRlY2xhcmF0aW9uTWFzaykgfCBhYnN0cmFjdE1hc2s7CiAgICB9CiAgICBpZiAoZGVjbGFyYXRpb24uaGFzQ29uc3RDb25zdHJ1Y3RvcikgewogICAgICBtb2RpZmllcnMgfD0gaGFzQ29uc3RDb25zdHJ1Y3Rvck1hc2s7CiAgICB9CiAgICBDbGFzc0J1aWxkZXIgY2xzID0gbmV3IFNvdXJjZUNsYXNzQnVpbGRlcigKICAgICAgICBtZXRhZGF0YSwKICAgICAgICBtb2RpZmllcnMsCiAgICAgICAgZXh0ZW5zaW9uTmFtZSwKICAgICAgICB0eXBlVmFyaWFibGVzLAogICAgICAgIG51bGwsIC8vIE5vIGV4cGxpY2l0IHN1cGVydHlwZS4KICAgICAgICBudWxsLCAvLyBObyBpbXBsZW1lbnRlZCBpbnRlcmZhY2VzLgogICAgICAgIFt0eXBlXSwKICAgICAgICBjbGFzc1Njb3BlLAogICAgICAgIGNvbnN0cnVjdG9yU2NvcGUsCiAgICAgICAgdGhpcywKICAgICAgICBuZXcgTGlzdDxDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXI+LmZyb20oY29uc3RydWN0b3JSZWZlcmVuY2VzKSwKICAgICAgICBzdGFydE9mZnNldCwKICAgICAgICBuYW1lT2Zmc2V0LAogICAgICAgIGVuZE9mZnNldCwKICAgICAgICBpc01peGluRGVjbGFyYXRpb246IGlzTWl4aW5EZWNsYXJhdGlvbik7CiAgICBsb2FkZXIudGFyZ2V0Lm1ldGFkYXRhQ29sbGVjdG9yCiAgICAgICAgPy5zZXREb2N1bWVudGF0aW9uQ29tbWVudChjbHMudGFyZ2V0LCBkb2N1bWVudGF0aW9uQ29tbWVudCk7CgogICAgY29uc3RydWN0b3JSZWZlcmVuY2VzLmNsZWFyKCk7CiAgICBNYXA8U3RyaW5nLCBUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzQnlOYW1lID0KICAgICAgICBjaGVja1R5cGVWYXJpYWJsZXModHlwZVZhcmlhYmxlcywgY2xzKTsKICAgIHZvaWQgc2V0UGFyZW50KFN0cmluZyBuYW1lLCBNZW1iZXJCdWlsZGVyIG1lbWJlcikgewogICAgICB3aGlsZSAobWVtYmVyICE9IG51bGwpIHsKICAgICAgICBtZW1iZXIucGFyZW50ID0gY2xzOwogICAgICAgIG1lbWJlciA9IG1lbWJlci5uZXh0OwogICAgICB9CiAgICB9CgogICAgdm9pZCBzZXRQYXJlbnRBbmRDaGVja0NvbmZsaWN0cyhTdHJpbmcgbmFtZSwgTWVtYmVyQnVpbGRlciBtZW1iZXIpIHsKICAgICAgaWYgKHR5cGVWYXJpYWJsZXNCeU5hbWUgIT0gbnVsbCkgewogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgdHYgPSB0eXBlVmFyaWFibGVzQnlOYW1lW25hbWVdOwogICAgICAgIGlmICh0diAhPSBudWxsKSB7CiAgICAgICAgICBjbHMuYWRkUHJvYmxlbSh0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGUud2l0aEFyZ3VtZW50cyhuYW1lKSwKICAgICAgICAgICAgICBtZW1iZXIuY2hhck9mZnNldCwgbmFtZS5sZW5ndGgsCiAgICAgICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgbWVzc2FnZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDYXVzZS53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICAgICAgdHYuZmlsZVVyaSwgdHYuY2hhck9mZnNldCwgbmFtZS5sZW5ndGgpCiAgICAgICAgICAgICAgXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldFBhcmVudChuYW1lLCBtZW1iZXIpOwogICAgfQoKICAgIG1lbWJlcnMuZm9yRWFjaChzZXRQYXJlbnRBbmRDaGVja0NvbmZsaWN0cyk7CiAgICBjb25zdHJ1Y3RvcnMuZm9yRWFjaChzZXRQYXJlbnRBbmRDaGVja0NvbmZsaWN0cyk7CiAgICBzZXR0ZXJzLmZvckVhY2goc2V0UGFyZW50QW5kQ2hlY2tDb25mbGljdHMpOwogICAgYWRkQnVpbGRlcihleHRlbnNpb25OYW1lLCBjbHMsIG5hbWVPZmZzZXQpOwogIH0KCiAgVHlwZUJ1aWxkZXIgYXBwbHlNaXhpbnMoVHlwZUJ1aWxkZXIgdHlwZSwgaW50IHN0YXJ0Q2hhck9mZnNldCwgaW50IGNoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyRW5kT2Zmc2V0LCBTdHJpbmcgc3ViY2xhc3NOYW1lLCBib29sIGlzTWl4aW5EZWNsYXJhdGlvbiwKICAgICAge1N0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBMaXN0PFR5cGVCdWlsZGVyPiBpbnRlcmZhY2VzfSkgewogICAgaWYgKG5hbWUgPT0gbnVsbCkgewogICAgICAvLyBUaGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGJ1aWxkaW5nIGEgbmFtZWQKICAgICAgLy8gbWl4aW4gYXBwbGljYXRpb24uCiAgICAgIGlmIChkb2N1bWVudGF0aW9uQ29tbWVudCAhPSBudWxsKSB7CiAgICAgICAgdW5oYW5kbGVkKCJkb2N1bWVudGF0aW9uQ29tbWVudCIsICJ1bm5hbWVkIG1peGluIGFwcGxpY2F0aW9uIiwKICAgICAgICAgICAgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICAgIH0gZWxzZSBpZiAobWV0YWRhdGEgIT0gbnVsbCkgewogICAgICAgIHVuaGFuZGxlZCgibWV0YWRhdGEiLCAidW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbiIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgICB9IGVsc2UgaWYgKGludGVyZmFjZXMgIT0gbnVsbCkgewogICAgICAgIHVuaGFuZGxlZCgKICAgICAgICAgICAgImludGVyZmFjZXMiLCAidW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbiIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgICB9CiAgICB9CiAgICBpZiAodHlwZSBpcyBNaXhpbkFwcGxpY2F0aW9uQnVpbGRlcikgewogICAgICAvLyBEb2N1bWVudGF0aW9uIGJlbG93IGFzc3VtZXMgdGhlIGdpdmVuIG1peGluIGFwcGxpY2F0aW9uIGlzIGluIG9uZSBvZgogICAgICAvLyB0aGVzZSBmb3JtczoKICAgICAgLy8KICAgICAgLy8gICAgIGNsYXNzIEMgZXh0ZW5kcyBTIHdpdGggTTEsIE0yLCBNMzsKICAgICAgLy8gICAgIGNsYXNzIE5hbWVkID0gUyB3aXRoIE0xLCBNMiwgTTM7CiAgICAgIC8vCiAgICAgIC8vIFdoZW4gd2UgcmVmZXIgdG8gdGhlIHN1YmNsYXNzLCB3ZSBtZWFuIGBDYCBvciBgTmFtZWRgLgoKICAgICAgLy8vIFRoZSBjdXJyZW50IHN1cGVydHlwZS4KICAgICAgLy8vCiAgICAgIC8vLyBTdGFydHMgb3V0IGhhdmluZyB0aGUgdmFsdWUgYFNgIGFuZCBvbiBlYWNoIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcAogICAgICAvLy8gYmVsb3csIGl0IHdpbGwgdGFrZSBvbiB0aGUgdmFsdWUgY29ycmVzcG9uZGluZyB0bzoKICAgICAgLy8vCiAgICAgIC8vLyAxLiBgUyB3aXRoIE0xYC4KICAgICAgLy8vIDIuIGAoUyB3aXRoIE0xKSB3aXRoIE0yYC4KICAgICAgLy8vIDMuIGAoKFMgd2l0aCBNMSkgd2l0aCBNMikgd2l0aCBNM2AuCiAgICAgIFR5cGVCdWlsZGVyIHN1cGVydHlwZSA9IHR5cGUuc3VwZXJ0eXBlID8/IGxvYWRlci50YXJnZXQub2JqZWN0VHlwZTsKCiAgICAgIC8vLyBUaGUgdmFyaWFibGUgcGFydCBvZiB0aGUgbWl4aW4gYXBwbGljYXRpb24ncyBzeW50aGV0aWMgbmFtZS4gSXQKICAgICAgLy8vIHN0YXJ0cyBvdXQgYXMgdGhlIG5hbWUgb2YgdGhlIHN1cGVyY2xhc3MsIGJ1dCBpcyBvbmx5IHVzZWQgYWZ0ZXIgaXQKICAgICAgLy8vIGhhcyBiZWVuIGNvbWJpbmVkIHdpdGggdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgbWl4aW4uIEluIHRoZSBleGFtcGxlcwogICAgICAvLy8gZnJvbSBhYm92ZSwgaXQgd2lsbCB0YWtlIHRoZXNlIHZhbHVlczoKICAgICAgLy8vCiAgICAgIC8vLyAxLiBgUyZNMWAKICAgICAgLy8vIDIuIGBTJk0xJk0yYAogICAgICAvLy8gMy4gYFMmTTEmTTImTTNgLgogICAgICAvLy8KICAgICAgLy8vIFRoZSBmdWxsIG5hbWUgb2YgdGhlIG1peGluIGFwcGxpY2F0aW9uIGlzIG9idGFpbmVkIGJ5IHByZXBlbmRpbmcgdGhlCiAgICAgIC8vLyBuYW1lIG9mIHRoZSBzdWJjbGFzcyAoYENgIG9yIGBOYW1lZGAgaW4gdGhlIGFib3ZlIGV4YW1wbGVzKSB0byB0aGUKICAgICAgLy8vIHJ1bm5pbmcgbmFtZS4gRm9yIHRoZSBleGFtcGxlIGBDYCwgdGhhdCBsZWFkcyB0byB0aGVzZSBmdWxsIG5hbWVzOgogICAgICAvLy8KICAgICAgLy8vIDEuIGBfQyZTJk0xYAogICAgICAvLy8gMi4gYF9DJlMmTTEmTTJgCiAgICAgIC8vLyAzLiBgX0MmUyZNMSZNMiZNM2AuCiAgICAgIC8vLwogICAgICAvLy8gRm9yIGEgbmFtZWQgbWl4aW4gYXBwbGljYXRpb24sIHRoZSBsYXN0IG5hbWUgaGFzIGJlZW4gZ2l2ZW4gYnkgdGhlCiAgICAgIC8vLyBwcm9ncmFtbWVyLCBzbyBmb3IgdGhlIGV4YW1wbGUgYE5hbWVkYCB3ZSBzZWUgdGhlc2UgZnVsbCBuYW1lczoKICAgICAgLy8vCiAgICAgIC8vLyAxLiBgX05hbWVkJlMmTTFgCiAgICAgIC8vLyAyLiBgX05hbWVkJlMmTTEmTTJgCiAgICAgIC8vLyAzLiBgTmFtZWRgLgogICAgICBTdHJpbmcgcnVubmluZ05hbWUgPSBleHRyYWN0TmFtZShzdXBlcnR5cGUubmFtZSk7CgogICAgICAvLy8gVHJ1ZSB3aGVuIHdlJ3JlIGJ1aWxkaW5nIGEgbmFtZWQgbWl4aW4gYXBwbGljYXRpb24uIE5vdGljZSB0aGF0IGZvcgogICAgICAvLy8gdGhlIGBOYW1lZGAgZXhhbXBsZSBhYm92ZSwgdGhpcyBpcyBvbmx5IHRydWUgb24gdGhlIGxhc3QKICAgICAgLy8vIGl0ZXJhdGlvbiBiZWNhdXNlIG9ubHkgdGhlIGZ1bGwgbWl4aW4gYXBwbGljYXRpb24gaXMgbmFtZWQuCiAgICAgIGJvb2wgaXNOYW1lZE1peGluQXBwbGljYXRpb247CgogICAgICAvLy8gVGhlIG5hbWVzIG9mIHRoZSB0eXBlIHZhcmlhYmxlcyBvZiB0aGUgc3ViY2xhc3MuCiAgICAgIFNldDxTdHJpbmc+IHR5cGVWYXJpYWJsZU5hbWVzOwogICAgICBpZiAodHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgICAgdHlwZVZhcmlhYmxlTmFtZXMgPSBuZXcgU2V0PFN0cmluZz4oKTsKICAgICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdHlwZVZhcmlhYmxlIGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgICAgIHR5cGVWYXJpYWJsZU5hbWVzLmFkZCh0eXBlVmFyaWFibGUubmFtZSk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLy8gSGVscGVyIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBgdHJ1ZWAgaWYgYSB0eXBlIHZhcmlhYmxlIHdpdGggYSBuYW1lCiAgICAgIC8vLyBmcm9tIFt0eXBlVmFyaWFibGVOYW1lc10gaXMgcmVmZXJlbmNlZCBpbiBbdHlwZV0uCiAgICAgIGJvb2wgdXNlc1R5cGVWYXJpYWJsZXMoVHlwZUJ1aWxkZXIgdHlwZSkgewogICAgICAgIGlmICh0eXBlIGlzIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgICAgICAgIGlmICh0eXBlLmRlY2xhcmF0aW9uIGlzIFR5cGVWYXJpYWJsZUJ1aWxkZXIpIHsKICAgICAgICAgICAgcmV0dXJuIHR5cGVWYXJpYWJsZU5hbWVzLmNvbnRhaW5zKHR5cGUuZGVjbGFyYXRpb24ubmFtZSk7CiAgICAgICAgICB9CgogICAgICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gdHlwZUFyZ3VtZW50cyA9IHR5cGUuYXJndW1lbnRzOwogICAgICAgICAgaWYgKHR5cGVBcmd1bWVudHMgIT0gbnVsbCAmJiB0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICAgICAgZm9yIChUeXBlQnVpbGRlciBhcmd1bWVudCBpbiB0eXBlQXJndW1lbnRzKSB7CiAgICAgICAgICAgICAgaWYgKHVzZXNUeXBlVmFyaWFibGVzKGFyZ3VtZW50KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgICAgICAgIGlmICh0eXBlLmZvcm1hbHMgIT0gbnVsbCkgewogICAgICAgICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsIGluIHR5cGUuZm9ybWFscykgewogICAgICAgICAgICAgIGlmICh1c2VzVHlwZVZhcmlhYmxlcyhmb3JtYWwudHlwZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHVzZXNUeXBlVmFyaWFibGVzKHR5cGUucmV0dXJuVHlwZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgLy8vIEl0ZXJhdGUgb3ZlciB0aGUgbWl4aW5zIGZyb20gbGVmdCB0byByaWdodC4gQXQgdGhlIGVuZCBvZiBlYWNoCiAgICAgIC8vLyBpdGVyYXRpb24sIGEgbmV3IFtzdXBlcnR5cGVdIGlzIGNvbXB1dGVkIHRoYXQgaXMgdGhlIG1peGluCiAgICAgIC8vLyBhcHBsaWNhdGlvbiBvZiBbc3VwZXJ0eXBlXSB3aXRoIHRoZSBjdXJyZW50IG1peGluLgogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGUubWl4aW5zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgVHlwZUJ1aWxkZXIgbWl4aW4gPSB0eXBlLm1peGluc1tpXTsKICAgICAgICBpc05hbWVkTWl4aW5BcHBsaWNhdGlvbiA9IG5hbWUgIT0gbnVsbCAmJiBtaXhpbiA9PSB0eXBlLm1peGlucy5sYXN0OwogICAgICAgIGJvb2wgaXNHZW5lcmljID0gZmFsc2U7CiAgICAgICAgaWYgKCFpc05hbWVkTWl4aW5BcHBsaWNhdGlvbikgewogICAgICAgICAgaWYgKHN1cGVydHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICAgICAgICAgIGlzR2VuZXJpYyA9IGlzR2VuZXJpYyB8fCB1c2VzVHlwZVZhcmlhYmxlcyhzdXBlcnR5cGUpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG1peGluIGlzIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgICAgICAgICAgcnVubmluZ05hbWUgKz0gIiYke2V4dHJhY3ROYW1lKG1peGluLm5hbWUpfSI7CiAgICAgICAgICAgIGlzR2VuZXJpYyA9IGlzR2VuZXJpYyB8fCB1c2VzVHlwZVZhcmlhYmxlcyhtaXhpbik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIFN0cmluZyBmdWxsbmFtZSA9CiAgICAgICAgICAgIGlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uID8gbmFtZSA6ICJfJHN1YmNsYXNzTmFtZSYkcnVubmluZ05hbWUiOwogICAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gYXBwbGljYXRpb25UeXBlVmFyaWFibGVzOwogICAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGFwcGxpY2F0aW9uVHlwZUFyZ3VtZW50czsKICAgICAgICBpZiAoaXNOYW1lZE1peGluQXBwbGljYXRpb24pIHsKICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBuYW1lZCBtaXhpbiBhcHBsaWNhdGlvbiwgaXQgbXVzdCBiZSBnaXZlbiBhbGwgdGhlCiAgICAgICAgICAvLyBkZWNsYXJhdGVkIHR5cGUgdmFyaWFibGVzLgogICAgICAgICAgYXBwbGljYXRpb25UeXBlVmFyaWFibGVzID0gdHlwZVZhcmlhYmxlczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBwYXNzIHRoZSBmcmVzaCB0eXBlIHZhcmlhYmxlcyB0byB0aGUgbWl4aW4KICAgICAgICAgIC8vIGFwcGxpY2F0aW9uIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkncmUgZGVjbGFyZWQgb24gdGhlIHN1YmNsYXNzLgogICAgICAgICAgaWYgKGlzR2VuZXJpYykgewogICAgICAgICAgICB0aGlzLmJlZ2luTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgICAgICAgICBEZWNsYXJhdGlvbktpbmQudW5uYW1lZE1peGluQXBwbGljYXRpb24sICJtaXhpbiBhcHBsaWNhdGlvbiIpOwoKICAgICAgICAgICAgYXBwbGljYXRpb25UeXBlVmFyaWFibGVzID0KICAgICAgICAgICAgICAgIGNvcHlUeXBlVmFyaWFibGVzKHR5cGVWYXJpYWJsZXMsIGN1cnJlbnREZWNsYXJhdGlvbik7CgogICAgICAgICAgICBMaXN0PFR5cGVCdWlsZGVyPiBuZXdUeXBlcyA9IDxUeXBlQnVpbGRlcj5bXTsKICAgICAgICAgICAgaWYgKHN1cGVydHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyICYmIHN1cGVydHlwZS5hcmd1bWVudHMgIT0gbnVsbCkgewogICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3VwZXJ0eXBlLmFyZ3VtZW50cy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgICAgc3VwZXJ0eXBlLmFyZ3VtZW50c1tpXSA9IHN1cGVydHlwZS5hcmd1bWVudHNbaV0uY2xvbmUobmV3VHlwZXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobWl4aW4gaXMgTmFtZWRUeXBlQnVpbGRlciAmJiBtaXhpbi5hcmd1bWVudHMgIT0gbnVsbCkgewogICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWl4aW4uYXJndW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAgICBtaXhpbi5hcmd1bWVudHNbaV0gPSBtaXhpbi5hcmd1bWVudHNbaV0uY2xvbmUobmV3VHlwZXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmb3IgKFR5cGVCdWlsZGVyIG5ld1R5cGUgaW4gbmV3VHlwZXMpIHsKICAgICAgICAgICAgICBjdXJyZW50RGVjbGFyYXRpb24uYWRkVHlwZShuZXcgVW5yZXNvbHZlZFR5cGUobmV3VHlwZSwgLTEsIG51bGwpKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgRGVjbGFyYXRpb25CdWlsZGVyIG1peGluRGVjbGFyYXRpb24gPSB0aGlzLmVuZE5lc3RlZERlY2xhcmF0aW9uKAogICAgICAgICAgICAgICAgRGVjbGFyYXRpb25LaW5kLnVubmFtZWRNaXhpbkFwcGxpY2F0aW9uLCAibWl4aW4gYXBwbGljYXRpb24iKTsKICAgICAgICAgICAgbWl4aW5EZWNsYXJhdGlvbi5yZXNvbHZlVHlwZXMoYXBwbGljYXRpb25UeXBlVmFyaWFibGVzLCB0aGlzKTsKCiAgICAgICAgICAgIGFwcGxpY2F0aW9uVHlwZUFyZ3VtZW50cyA9IDxUeXBlQnVpbGRlcj5bXTsKICAgICAgICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHR5cGVWYXJpYWJsZSBpbiB0eXBlVmFyaWFibGVzKSB7CiAgICAgICAgICAgICAgYXBwbGljYXRpb25UeXBlQXJndW1lbnRzCiAgICAgICAgICAgICAgICAgIC5hZGQoYWRkTmFtZWRUeXBlKHR5cGVWYXJpYWJsZS5uYW1lLCBudWxsLCBjaGFyT2Zmc2V0KS4uYmluZCgKICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSB0eXBlIHZhcmlhYmxlIHR5cGVzIHBhc3NlZCBhcyBhcmd1bWVudHMgdG8gdGhlCiAgICAgICAgICAgICAgICAgICAgICAvLyBnZW5lcmljIGNsYXNzIHJlcHJlc2VudGluZyB0aGUgYW5vbnltb3VzIG1peGluCiAgICAgICAgICAgICAgICAgICAgICAvLyBhcHBsaWNhdGlvbiBzaG91bGQgcmVmZXIgYmFjayB0byB0aGUgdHlwZSB2YXJpYWJsZXMgb2YKICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBjbGFzcyB0aGF0IGV4dGVuZCB0aGUgYW5vbnltb3VzIG1peGluIGFwcGxpY2F0aW9uLgogICAgICAgICAgICAgICAgICAgICAgdHlwZVZhcmlhYmxlKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZmluYWwgaW50IGNvbXB1dGVkU3RhcnRDaGFyT2Zmc2V0ID0KICAgICAgICAgICAgKGlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uID8gbWV0YWRhdGEgOiBudWxsKSA9PSBudWxsCiAgICAgICAgICAgICAgICA/IHN0YXJ0Q2hhck9mZnNldAogICAgICAgICAgICAgICAgOiBtZXRhZGF0YS5maXJzdC5jaGFyT2Zmc2V0OwogICAgICAgIFNvdXJjZUNsYXNzQnVpbGRlciBhcHBsaWNhdGlvbiA9IG5ldyBTb3VyY2VDbGFzc0J1aWxkZXIoCiAgICAgICAgICAgIGlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uID8gbWV0YWRhdGEgOiBudWxsLAogICAgICAgICAgICBpc05hbWVkTWl4aW5BcHBsaWNhdGlvbgogICAgICAgICAgICAgICAgPyBtb2RpZmllcnMgfCBuYW1lZE1peGluQXBwbGljYXRpb25NYXNrCiAgICAgICAgICAgICAgICA6IGFic3RyYWN0TWFzaywKICAgICAgICAgICAgZnVsbG5hbWUsCiAgICAgICAgICAgIGFwcGxpY2F0aW9uVHlwZVZhcmlhYmxlcywKICAgICAgICAgICAgaXNNaXhpbkRlY2xhcmF0aW9uID8gbnVsbCA6IHN1cGVydHlwZSwKICAgICAgICAgICAgaXNOYW1lZE1peGluQXBwbGljYXRpb24KICAgICAgICAgICAgICAgID8gaW50ZXJmYWNlcwogICAgICAgICAgICAgICAgOiBpc01peGluRGVjbGFyYXRpb24gPyBbc3VwZXJ0eXBlLCBtaXhpbl0gOiBudWxsLAogICAgICAgICAgICBudWxsLCAvLyBObyBgb25gIGNsYXVzZSB0eXBlcy4KICAgICAgICAgICAgbmV3IFNjb3BlKDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+e30sIDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+e30sCiAgICAgICAgICAgICAgICBzY29wZS53aXRoVHlwZVZhcmlhYmxlcyh0eXBlVmFyaWFibGVzKSwKICAgICAgICAgICAgICAgICJtaXhpbiAkZnVsbG5hbWUgIiwgaXNNb2RpZmlhYmxlOiBmYWxzZSksCiAgICAgICAgICAgIG5ldyBTY29wZSg8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPnt9LCBudWxsLCBudWxsLCBmdWxsbmFtZSwKICAgICAgICAgICAgICAgIGlzTW9kaWZpYWJsZTogZmFsc2UpLAogICAgICAgICAgICB0aGlzLAogICAgICAgICAgICA8Q29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyPltdLAogICAgICAgICAgICBjb21wdXRlZFN0YXJ0Q2hhck9mZnNldCwKICAgICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgICAgY2hhckVuZE9mZnNldCwKICAgICAgICAgICAgbWl4ZWRJblR5cGU6IGlzTWl4aW5EZWNsYXJhdGlvbiA/IG51bGwgOiBtaXhpbik7CiAgICAgICAgaWYgKGlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgICAgICBsb2FkZXIudGFyZ2V0Lm1ldGFkYXRhQ29sbGVjdG9yPy5zZXREb2N1bWVudGF0aW9uQ29tbWVudCgKICAgICAgICAgICAgICBhcHBsaWNhdGlvbi50YXJnZXQsIGRvY3VtZW50YXRpb25Db21tZW50KTsKICAgICAgICB9CiAgICAgICAgLy8gVE9ETyhhaGUsIGttaWxsaWtpbik6IFNob3VsZCBhbHdheXMgYmUgdHJ1ZT8KICAgICAgICAvLyBwa2cvYW5hbHl6ZXIvdGVzdC9zcmMvc3VtbWFyeS9yZXN5bnRoZXNpemVfa2VybmVsX3Rlc3QuZGFydCBjYW4ndAogICAgICAgIC8vIGhhbmRsZSB0aGF0IDooCiAgICAgICAgYXBwbGljYXRpb24uY2xzLmlzQW5vbnltb3VzTWl4aW4gPSAhaXNOYW1lZE1peGluQXBwbGljYXRpb247CiAgICAgICAgYWRkQnVpbGRlcihmdWxsbmFtZSwgYXBwbGljYXRpb24sIGNoYXJPZmZzZXQpOwogICAgICAgIHN1cGVydHlwZSA9CiAgICAgICAgICAgIGFkZE5hbWVkVHlwZShmdWxsbmFtZSwgYXBwbGljYXRpb25UeXBlQXJndW1lbnRzLCBjaGFyT2Zmc2V0KTsKICAgICAgfQogICAgICByZXR1cm4gc3VwZXJ0eXBlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHR5cGU7CiAgICB9CiAgfQoKICB2b2lkIGFkZE5hbWVkTWl4aW5BcHBsaWNhdGlvbigKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFR5cGVCdWlsZGVyIG1peGluQXBwbGljYXRpb24sCiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXMsCiAgICAgIGludCBzdGFydENoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBpbnQgY2hhckVuZE9mZnNldCkgewogICAgLy8gTmVzdGVkIGRlY2xhcmF0aW9uIGJlZ2FuIGluIGBPdXRsaW5lQnVpbGRlci5iZWdpbk5hbWVkTWl4aW5BcHBsaWNhdGlvbmAuCiAgICBlbmROZXN0ZWREZWNsYXJhdGlvbihEZWNsYXJhdGlvbktpbmQubmFtZWRNaXhpbkFwcGxpY2F0aW9uLCBuYW1lKQogICAgICAgIC5yZXNvbHZlVHlwZXModHlwZVZhcmlhYmxlcywgdGhpcyk7CiAgICBOYW1lZFR5cGVCdWlsZGVyIHN1cGVydHlwZSA9IGFwcGx5TWl4aW5zKG1peGluQXBwbGljYXRpb24sIHN0YXJ0Q2hhck9mZnNldCwKICAgICAgICBjaGFyT2Zmc2V0LCBjaGFyRW5kT2Zmc2V0LCBuYW1lLCBmYWxzZSwKICAgICAgICBkb2N1bWVudGF0aW9uQ29tbWVudDogZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgICAgbWV0YWRhdGE6IG1ldGFkYXRhLAogICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlczogdHlwZVZhcmlhYmxlcywKICAgICAgICBtb2RpZmllcnM6IG1vZGlmaWVycywKICAgICAgICBpbnRlcmZhY2VzOiBpbnRlcmZhY2VzKTsKICAgIGNoZWNrVHlwZVZhcmlhYmxlcyh0eXBlVmFyaWFibGVzLCBzdXBlcnR5cGUuZGVjbGFyYXRpb24pOwogIH0KCiAgdm9pZCBhZGRGaWVsZCgKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFR5cGVCdWlsZGVyIHR5cGUsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBpbnQgY2hhck9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQsCiAgICAgIFRva2VuIGluaXRpYWxpemVyVG9rZW4sCiAgICAgIGJvb2wgaGFzSW5pdGlhbGl6ZXIsCiAgICAgIHtUb2tlbiBjb25zdEluaXRpYWxpemVyVG9rZW59KSB7CiAgICBpZiAoaGFzSW5pdGlhbGl6ZXIpIHsKICAgICAgbW9kaWZpZXJzIHw9IGhhc0luaXRpYWxpemVyTWFzazsKICAgIH0KICAgIEZpZWxkQnVpbGRlciBmaWVsZCA9IG5ldyBGaWVsZEJ1aWxkZXIoCiAgICAgICAgbWV0YWRhdGEsIHR5cGUsIG5hbWUsIG1vZGlmaWVycywgdGhpcywgY2hhck9mZnNldCwgY2hhckVuZE9mZnNldCk7CiAgICBmaWVsZC5jb25zdEluaXRpYWxpemVyVG9rZW4gPSBjb25zdEluaXRpYWxpemVyVG9rZW47CiAgICBhZGRCdWlsZGVyKG5hbWUsIGZpZWxkLCBjaGFyT2Zmc2V0KTsKICAgIGlmICghbGVnYWN5TW9kZSAmJiB0eXBlID09IG51bGwgJiYgaW5pdGlhbGl6ZXJUb2tlbiAhPSBudWxsKSB7CiAgICAgIGZpZWxkLnRhcmdldC50eXBlID0gbmV3IEltcGxpY2l0RmllbGRUeXBlKGZpZWxkLCBpbml0aWFsaXplclRva2VuKTsKICAgICAgKGltcGxpY2l0bHlUeXBlZEZpZWxkcyA/Pz0gPEZpZWxkQnVpbGRlcj5bXSkuYWRkKGZpZWxkKTsKICAgIH0KICAgIGxvYWRlci50YXJnZXQubWV0YWRhdGFDb2xsZWN0b3IKICAgICAgICA/LnNldERvY3VtZW50YXRpb25Db21tZW50KGZpZWxkLnRhcmdldCwgZG9jdW1lbnRhdGlvbkNvbW1lbnQpOwogIH0KCiAgdm9pZCBhZGRDb25zdHJ1Y3RvcigKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIGludCBtb2RpZmllcnMsCiAgICAgIFR5cGVCdWlsZGVyIHJldHVyblR5cGUsCiAgICAgIGZpbmFsIE9iamVjdCBuYW1lLAogICAgICBTdHJpbmcgY29uc3RydWN0b3JOYW1lLAogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMsCiAgICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFscywKICAgICAgaW50IHN0YXJ0Q2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyT3BlblBhcmVuT2Zmc2V0LAogICAgICBpbnQgY2hhckVuZE9mZnNldCwKICAgICAgU3RyaW5nIG5hdGl2ZU1ldGhvZE5hbWUsCiAgICAgIHtUb2tlbiBiZWdpbkluaXRpYWxpemVyc30pIHsKICAgIE1ldGFkYXRhQ29sbGVjdG9yIG1ldGFkYXRhQ29sbGVjdG9yID0gbG9hZGVyLnRhcmdldC5tZXRhZGF0YUNvbGxlY3RvcjsKICAgIENvbnN0cnVjdG9yQnVpbGRlciBwcm9jZWR1cmUgPSBuZXcgQ29uc3RydWN0b3JCdWlsZGVyKAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIG1vZGlmaWVycyAmIH5hYnN0cmFjdE1hc2ssCiAgICAgICAgcmV0dXJuVHlwZSwKICAgICAgICBjb25zdHJ1Y3Rvck5hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICBmb3JtYWxzLAogICAgICAgIHRoaXMsCiAgICAgICAgc3RhcnRDaGFyT2Zmc2V0LAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgY2hhck9wZW5QYXJlbk9mZnNldCwKICAgICAgICBjaGFyRW5kT2Zmc2V0LAogICAgICAgIG5hdGl2ZU1ldGhvZE5hbWUpOwogICAgbWV0YWRhdGFDb2xsZWN0b3I/LnNldERvY3VtZW50YXRpb25Db21tZW50KAogICAgICAgIHByb2NlZHVyZS50YXJnZXQsIGRvY3VtZW50YXRpb25Db21tZW50KTsKICAgIG1ldGFkYXRhQ29sbGVjdG9yPy5zZXRDb25zdHJ1Y3Rvck5hbWVPZmZzZXQocHJvY2VkdXJlLnRhcmdldCwgbmFtZSk7CiAgICBjaGVja1R5cGVWYXJpYWJsZXModHlwZVZhcmlhYmxlcywgcHJvY2VkdXJlKTsKICAgIGFkZEJ1aWxkZXIoY29uc3RydWN0b3JOYW1lLCBwcm9jZWR1cmUsIGNoYXJPZmZzZXQpOwogICAgaWYgKG5hdGl2ZU1ldGhvZE5hbWUgIT0gbnVsbCkgewogICAgICBhZGROYXRpdmVNZXRob2QocHJvY2VkdXJlKTsKICAgIH0KICAgIGlmIChwcm9jZWR1cmUuaXNDb25zdCkgewogICAgICBjdXJyZW50RGVjbGFyYXRpb24/Lmhhc0NvbnN0Q29uc3RydWN0b3IgPSB0cnVlOwogICAgICAvLyBjb25zdCBjb25zdHJ1Y3RvcnMgd2lsbCBoYXZlIHRoZWlyIGluaXRpYWxpemVycyBjb21waWxlZCBhbmQgd3JpdHRlbgogICAgICAvLyBpbnRvIHRoZSBvdXRsaW5lLgogICAgICBwcm9jZWR1cmUuYmVnaW5Jbml0aWFsaXplcnMgPSBiZWdpbkluaXRpYWxpemVycyA/PyBUb2tlbi5lb2YoLTEpOwogICAgfQogIH0KCiAgdm9pZCBhZGRQcm9jZWR1cmUoCiAgICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMsCiAgICAgIFByb2NlZHVyZUtpbmQga2luZCwKICAgICAgaW50IHN0YXJ0Q2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyT3BlblBhcmVuT2Zmc2V0LAogICAgICBpbnQgY2hhckVuZE9mZnNldCwKICAgICAgU3RyaW5nIG5hdGl2ZU1ldGhvZE5hbWUsCiAgICAgIHtib29sIGlzVG9wTGV2ZWx9KSB7CiAgICBNZXRhZGF0YUNvbGxlY3RvciBtZXRhZGF0YUNvbGxlY3RvciA9IGxvYWRlci50YXJnZXQubWV0YWRhdGFDb2xsZWN0b3I7CiAgICBpZiAocmV0dXJuVHlwZSA9PSBudWxsKSB7CiAgICAgIGlmIChraW5kID09IFByb2NlZHVyZUtpbmQuT3BlcmF0b3IgJiYKICAgICAgICAgIGlkZW50aWNhbChuYW1lLCBpbmRleFNldE5hbWUubmFtZSkpIHsKICAgICAgICByZXR1cm5UeXBlID0gYWRkVm9pZFR5cGUoY2hhck9mZnNldCk7CiAgICAgIH0gZWxzZSBpZiAoa2luZCA9PSBQcm9jZWR1cmVLaW5kLlNldHRlcikgewogICAgICAgIHJldHVyblR5cGUgPSBhZGRWb2lkVHlwZShjaGFyT2Zmc2V0KTsKICAgICAgfQogICAgfQogICAgRnVuY3Rpb25CdWlsZGVyIHByb2NlZHVyZSA9IG5ldyBQcm9jZWR1cmVCdWlsZGVyKAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIG1vZGlmaWVycywKICAgICAgICByZXR1cm5UeXBlLAogICAgICAgIG5hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICBmb3JtYWxzLAogICAgICAgIGtpbmQsCiAgICAgICAgdGhpcywKICAgICAgICBzdGFydENoYXJPZmZzZXQsCiAgICAgICAgY2hhck9mZnNldCwKICAgICAgICBjaGFyT3BlblBhcmVuT2Zmc2V0LAogICAgICAgIGNoYXJFbmRPZmZzZXQsCiAgICAgICAgbmF0aXZlTWV0aG9kTmFtZSk7CiAgICBtZXRhZGF0YUNvbGxlY3Rvcj8uc2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQoCiAgICAgICAgcHJvY2VkdXJlLnRhcmdldCwgZG9jdW1lbnRhdGlvbkNvbW1lbnQpOwogICAgY2hlY2tUeXBlVmFyaWFibGVzKHR5cGVWYXJpYWJsZXMsIHByb2NlZHVyZSk7CiAgICBhZGRCdWlsZGVyKG5hbWUsIHByb2NlZHVyZSwgY2hhck9mZnNldCk7CiAgICBpZiAobmF0aXZlTWV0aG9kTmFtZSAhPSBudWxsKSB7CiAgICAgIGFkZE5hdGl2ZU1ldGhvZChwcm9jZWR1cmUpOwogICAgfQogIH0KCiAgdm9pZCBhZGRGYWN0b3J5TWV0aG9kKAogICAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgaW50IG1vZGlmaWVycywKICAgICAgT2JqZWN0IG5hbWUsCiAgICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFscywKICAgICAgQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyIHJlZGlyZWN0aW9uVGFyZ2V0LAogICAgICBpbnQgc3RhcnRDaGFyT2Zmc2V0LAogICAgICBpbnQgY2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPcGVuUGFyZW5PZmZzZXQsCiAgICAgIGludCBjaGFyRW5kT2Zmc2V0LAogICAgICBTdHJpbmcgbmF0aXZlTWV0aG9kTmFtZSkgewogICAgVHlwZUJ1aWxkZXIgcmV0dXJuVHlwZSA9IGFkZE5hbWVkVHlwZSgKICAgICAgICBjdXJyZW50RGVjbGFyYXRpb24ucGFyZW50Lm5hbWUsIDxUeXBlQnVpbGRlcj5bXSwgY2hhck9mZnNldCk7CiAgICAvLyBOZXN0ZWQgZGVjbGFyYXRpb24gYmVnYW4gaW4gYE91dGxpbmVCdWlsZGVyLmJlZ2luRmFjdG9yeU1ldGhvZGAuCiAgICBEZWNsYXJhdGlvbkJ1aWxkZXIgZmFjdG9yeURlY2xhcmF0aW9uID0KICAgICAgICBlbmROZXN0ZWREZWNsYXJhdGlvbihEZWNsYXJhdGlvbktpbmQuZmFjdG9yeU1ldGhvZCwgIiNmYWN0b3J5X21ldGhvZCIpOwoKICAgIC8vIFByZXBhcmUgdGhlIHNpbXBsZSBwcm9jZWR1cmUgbmFtZS4KICAgIFN0cmluZyBwcm9jZWR1cmVOYW1lOwogICAgU3RyaW5nIGNvbnN0cnVjdG9yTmFtZSA9CiAgICAgICAgY29tcHV0ZUFuZFZhbGlkYXRlQ29uc3RydWN0b3JOYW1lKG5hbWUsIGNoYXJPZmZzZXQsIGlzRmFjdG9yeTogdHJ1ZSk7CiAgICBpZiAoY29uc3RydWN0b3JOYW1lICE9IG51bGwpIHsKICAgICAgcHJvY2VkdXJlTmFtZSA9IGNvbnN0cnVjdG9yTmFtZTsKICAgIH0gZWxzZSB7CiAgICAgIHByb2NlZHVyZU5hbWUgPSBuYW1lOwogICAgfQoKICAgIFByb2NlZHVyZUJ1aWxkZXIgcHJvY2VkdXJlOwogICAgaWYgKHJlZGlyZWN0aW9uVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgcHJvY2VkdXJlID0gbmV3IFJlZGlyZWN0aW5nRmFjdG9yeUJ1aWxkZXIoCiAgICAgICAgICBtZXRhZGF0YSwKICAgICAgICAgIHN0YXRpY01hc2sgfCBtb2RpZmllcnMsCiAgICAgICAgICByZXR1cm5UeXBlLAogICAgICAgICAgcHJvY2VkdXJlTmFtZSwKICAgICAgICAgIGNvcHlUeXBlVmFyaWFibGVzKAogICAgICAgICAgICAgIGN1cnJlbnREZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzID8/IGNvbnN0IDxUeXBlVmFyaWFibGVCdWlsZGVyPltdLAogICAgICAgICAgICAgIGZhY3RvcnlEZWNsYXJhdGlvbiksCiAgICAgICAgICBmb3JtYWxzLAogICAgICAgICAgdGhpcywKICAgICAgICAgIHN0YXJ0Q2hhck9mZnNldCwKICAgICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgICBjaGFyT3BlblBhcmVuT2Zmc2V0LAogICAgICAgICAgY2hhckVuZE9mZnNldCwKICAgICAgICAgIG5hdGl2ZU1ldGhvZE5hbWUsCiAgICAgICAgICByZWRpcmVjdGlvblRhcmdldCk7CiAgICB9IGVsc2UgewogICAgICBwcm9jZWR1cmUgPSBuZXcgUHJvY2VkdXJlQnVpbGRlcigKICAgICAgICAgIG1ldGFkYXRhLAogICAgICAgICAgc3RhdGljTWFzayB8IG1vZGlmaWVycywKICAgICAgICAgIHJldHVyblR5cGUsCiAgICAgICAgICBwcm9jZWR1cmVOYW1lLAogICAgICAgICAgY29weVR5cGVWYXJpYWJsZXMoCiAgICAgICAgICAgICAgY3VycmVudERlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMgPz8gY29uc3QgPFR5cGVWYXJpYWJsZUJ1aWxkZXI+W10sCiAgICAgICAgICAgICAgZmFjdG9yeURlY2xhcmF0aW9uKSwKICAgICAgICAgIGZvcm1hbHMsCiAgICAgICAgICBQcm9jZWR1cmVLaW5kLkZhY3RvcnksCiAgICAgICAgICB0aGlzLAogICAgICAgICAgc3RhcnRDaGFyT2Zmc2V0LAogICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgIGNoYXJPcGVuUGFyZW5PZmZzZXQsCiAgICAgICAgICBjaGFyRW5kT2Zmc2V0LAogICAgICAgICAgbmF0aXZlTWV0aG9kTmFtZSk7CiAgICB9CgogICAgdmFyIG1ldGFkYXRhQ29sbGVjdG9yID0gbG9hZGVyLnRhcmdldC5tZXRhZGF0YUNvbGxlY3RvcjsKICAgIG1ldGFkYXRhQ29sbGVjdG9yPy5zZXREb2N1bWVudGF0aW9uQ29tbWVudCgKICAgICAgICBwcm9jZWR1cmUudGFyZ2V0LCBkb2N1bWVudGF0aW9uQ29tbWVudCk7CiAgICBtZXRhZGF0YUNvbGxlY3Rvcj8uc2V0Q29uc3RydWN0b3JOYW1lT2Zmc2V0KHByb2NlZHVyZS50YXJnZXQsIG5hbWUpOwoKICAgIERlY2xhcmF0aW9uQnVpbGRlciBzYXZlZERlY2xhcmF0aW9uID0gY3VycmVudERlY2xhcmF0aW9uOwogICAgY3VycmVudERlY2xhcmF0aW9uID0gZmFjdG9yeURlY2xhcmF0aW9uOwogICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHR2IGluIHByb2NlZHVyZS50eXBlVmFyaWFibGVzKSB7CiAgICAgIE5hbWVkVHlwZUJ1aWxkZXIgdCA9IHByb2NlZHVyZS5yZXR1cm5UeXBlOwogICAgICB0LmFyZ3VtZW50cy5hZGQoYWRkTmFtZWRUeXBlKHR2Lm5hbWUsIG51bGwsIHByb2NlZHVyZS5jaGFyT2Zmc2V0KSk7CiAgICB9CiAgICBjdXJyZW50RGVjbGFyYXRpb24gPSBzYXZlZERlY2xhcmF0aW9uOwoKICAgIGZhY3RvcnlEZWNsYXJhdGlvbi5yZXNvbHZlVHlwZXMocHJvY2VkdXJlLnR5cGVWYXJpYWJsZXMsIHRoaXMpOwogICAgYWRkQnVpbGRlcihwcm9jZWR1cmVOYW1lLCBwcm9jZWR1cmUsIGNoYXJPZmZzZXQpOwogICAgaWYgKG5hdGl2ZU1ldGhvZE5hbWUgIT0gbnVsbCkgewogICAgICBhZGROYXRpdmVNZXRob2QocHJvY2VkdXJlKTsKICAgIH0KICB9CgogIHZvaWQgYWRkRW51bSgKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBMaXN0PEVudW1Db25zdGFudEluZm8+IGVudW1Db25zdGFudEluZm9zLAogICAgICBpbnQgc3RhcnRDaGFyT2Zmc2V0LAogICAgICBpbnQgY2hhck9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQpIHsKICAgIE1ldGFkYXRhQ29sbGVjdG9yIG1ldGFkYXRhQ29sbGVjdG9yID0gbG9hZGVyLnRhcmdldC5tZXRhZGF0YUNvbGxlY3RvcjsKICAgIEVudW1CdWlsZGVyIGJ1aWxkZXIgPSBuZXcgRW51bUJ1aWxkZXIobWV0YWRhdGFDb2xsZWN0b3IsIG1ldGFkYXRhLCBuYW1lLAogICAgICAgIGVudW1Db25zdGFudEluZm9zLCB0aGlzLCBzdGFydENoYXJPZmZzZXQsIGNoYXJPZmZzZXQsIGNoYXJFbmRPZmZzZXQpOwogICAgYWRkQnVpbGRlcihuYW1lLCBidWlsZGVyLCBjaGFyT2Zmc2V0KTsKICAgIG1ldGFkYXRhQ29sbGVjdG9yPy5zZXREb2N1bWVudGF0aW9uQ29tbWVudCgKICAgICAgICBidWlsZGVyLnRhcmdldCwgZG9jdW1lbnRhdGlvbkNvbW1lbnQpOwogIH0KCiAgdm9pZCBhZGRGdW5jdGlvblR5cGVBbGlhcygKICAgICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMsCiAgICAgIEZ1bmN0aW9uVHlwZUJ1aWxkZXIgdHlwZSwKICAgICAgaW50IGNoYXJPZmZzZXQpIHsKICAgIFR5cGVBbGlhc0J1aWxkZXIgdHlwZWRlZiA9IG5ldyBUeXBlQWxpYXNCdWlsZGVyKAogICAgICAgIG1ldGFkYXRhLCBuYW1lLCB0eXBlVmFyaWFibGVzLCB0eXBlLCB0aGlzLCBjaGFyT2Zmc2V0KTsKICAgIGxvYWRlci50YXJnZXQubWV0YWRhdGFDb2xsZWN0b3IKICAgICAgICA/LnNldERvY3VtZW50YXRpb25Db21tZW50KHR5cGVkZWYudGFyZ2V0LCBkb2N1bWVudGF0aW9uQ29tbWVudCk7CiAgICBjaGVja1R5cGVWYXJpYWJsZXModHlwZVZhcmlhYmxlcywgdHlwZWRlZik7CiAgICAvLyBOZXN0ZWQgZGVjbGFyYXRpb24gYmVnYW4gaW4gYE91dGxpbmVCdWlsZGVyLmJlZ2luRnVuY3Rpb25UeXBlQWxpYXNgLgogICAgZW5kTmVzdGVkRGVjbGFyYXRpb24oRGVjbGFyYXRpb25LaW5kLnR5cGVkZWYsICIjdHlwZWRlZiIpCiAgICAgICAgLnJlc29sdmVUeXBlcyh0eXBlVmFyaWFibGVzLCB0aGlzKTsKICAgIGFkZEJ1aWxkZXIobmFtZSwgdHlwZWRlZiwgY2hhck9mZnNldCk7CiAgfQoKICBGdW5jdGlvblR5cGVCdWlsZGVyIGFkZEZ1bmN0aW9uVHlwZSgKICAgICAgVHlwZUJ1aWxkZXIgcmV0dXJuVHlwZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMsCiAgICAgIGludCBjaGFyT2Zmc2V0KSB7CiAgICB2YXIgYnVpbGRlciA9IG5ldyBGdW5jdGlvblR5cGVCdWlsZGVyKHJldHVyblR5cGUsIHR5cGVWYXJpYWJsZXMsIGZvcm1hbHMpOwogICAgY2hlY2tUeXBlVmFyaWFibGVzKHR5cGVWYXJpYWJsZXMsIG51bGwpOwogICAgLy8gTmVzdGVkIGRlY2xhcmF0aW9uIGJlZ2FuIGluIGBPdXRsaW5lQnVpbGRlci5iZWdpbkZ1bmN0aW9uVHlwZWAgb3IKICAgIC8vIGBPdXRsaW5lQnVpbGRlci5iZWdpbkZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXJgLgogICAgZW5kTmVzdGVkRGVjbGFyYXRpb24oRGVjbGFyYXRpb25LaW5kLmZ1bmN0aW9uVHlwZSwgIiNmdW5jdGlvbl90eXBlIikKICAgICAgICAucmVzb2x2ZVR5cGVzKHR5cGVWYXJpYWJsZXMsIHRoaXMpOwogICAgcmV0dXJuIGFkZFR5cGUoYnVpbGRlciwgY2hhck9mZnNldCk7CiAgfQoKICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGFkZEZvcm1hbFBhcmFtZXRlcigKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBUeXBlQnVpbGRlciB0eXBlLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgYm9vbCBoYXNUaGlzLAogICAgICBpbnQgY2hhck9mZnNldCwKICAgICAgVG9rZW4gaW5pdGlhbGl6ZXJUb2tlbikgewogICAgaWYgKGhhc1RoaXMpIHsKICAgICAgbW9kaWZpZXJzIHw9IGluaXRpYWxpemluZ0Zvcm1hbE1hc2s7CiAgICB9CiAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCA9IG5ldyBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyKAogICAgICAgIG1ldGFkYXRhLCBtb2RpZmllcnMsIHR5cGUsIG5hbWUsIHRoaXMsIGNoYXJPZmZzZXQpOwogICAgZm9ybWFsLmluaXRpYWxpemVyVG9rZW4gPSBpbml0aWFsaXplclRva2VuOwogICAgaWYgKGxlZ2FjeU1vZGUgJiYgaGFzVGhpcyAmJiB0eXBlID09IG51bGwpIHsKICAgICAgKHVudHlwZWRJbml0aWFsaXppbmdGb3JtYWxzID8/PSA8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj5bXSkuYWRkKGZvcm1hbCk7CiAgICB9CiAgICByZXR1cm4gZm9ybWFsOwogIH0KCiAgVHlwZVZhcmlhYmxlQnVpbGRlciBhZGRUeXBlVmFyaWFibGUoCiAgICAgIFN0cmluZyBuYW1lLCBUeXBlQnVpbGRlciBib3VuZCwgaW50IGNoYXJPZmZzZXQpIHsKICAgIHZhciBidWlsZGVyID0gbmV3IFR5cGVWYXJpYWJsZUJ1aWxkZXIobmFtZSwgdGhpcywgY2hhck9mZnNldCwgYm91bmQ6IGJvdW5kKTsKICAgIGJvdW5kbGVzc1R5cGVWYXJpYWJsZXMuYWRkKGJ1aWxkZXIpOwogICAgcmV0dXJuIGJ1aWxkZXI7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKCkgewogICAgTWV0YWRhdGFCdWlsZGVyLmJ1aWxkQW5ub3RhdGlvbnMobGlicmFyeSwgbWV0YWRhdGEsIHRoaXMsIG51bGwsIG51bGwpOwogIH0KCiAgdm9pZCBidWlsZEJ1aWxkZXIoRGVjbGFyYXRpb24gZGVjbGFyYXRpb24sIExpYnJhcnlCdWlsZGVyIGNvcmVMaWJyYXJ5KSB7CiAgICBDbGFzcyBjbHM7CiAgICBNZW1iZXIgbWVtYmVyOwogICAgVHlwZWRlZiB0eXBlZGVmOwogICAgaWYgKGRlY2xhcmF0aW9uIGlzIFNvdXJjZUNsYXNzQnVpbGRlcikgewogICAgICBjbHMgPSBkZWNsYXJhdGlvbi5idWlsZCh0aGlzLCBjb3JlTGlicmFyeSk7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIEZpZWxkQnVpbGRlcikgewogICAgICBtZW1iZXIgPSBkZWNsYXJhdGlvbi5idWlsZCh0aGlzKS4uaXNTdGF0aWMgPSB0cnVlOwogICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBQcm9jZWR1cmVCdWlsZGVyKSB7CiAgICAgIG1lbWJlciA9IGRlY2xhcmF0aW9uLmJ1aWxkKHRoaXMpLi5pc1N0YXRpYyA9IHRydWU7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFR5cGVBbGlhc0J1aWxkZXIpIHsKICAgICAgdHlwZWRlZiA9IGRlY2xhcmF0aW9uLmJ1aWxkKHRoaXMpOwogICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBFbnVtQnVpbGRlcikgewogICAgICBjbHMgPSBkZWNsYXJhdGlvbi5idWlsZCh0aGlzLCBjb3JlTGlicmFyeSk7CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFByZWZpeEJ1aWxkZXIpIHsKICAgICAgLy8gSWdub3JlZC4gS2VybmVsIGRvZXNuJ3QgcmVwcmVzZW50IHByZWZpeGVzLgogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIEJ1aWx0aW5UeXBlQnVpbGRlcikgewogICAgICAvLyBOb3RoaW5nIG5lZWRlZC4KICAgICAgcmV0dXJuOwogICAgfSBlbHNlIHsKICAgICAgdW5oYW5kbGVkKCIke2RlY2xhcmF0aW9uLnJ1bnRpbWVUeXBlfSIsICJidWlsZEJ1aWxkZXIiLAogICAgICAgICAgZGVjbGFyYXRpb24uY2hhck9mZnNldCwgZGVjbGFyYXRpb24uZmlsZVVyaSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChkZWNsYXJhdGlvbi5pc1BhdGNoKSB7CiAgICAgIC8vIFRoZSBrZXJuZWwgbm9kZSBvZiBhIHBhdGNoIGlzIHNoYXJlZCB3aXRoIHRoZSBvcmlnaW4gZGVjbGFyYXRpb24uIFdlCiAgICAgIC8vIGhhdmUgdHdvIGJ1aWxkZXJzOiB0aGUgb3JpZ2luLCBhbmQgdGhlIHBhdGNoLCBidXQgb25seSBvbmUga2VybmVsIG5vZGUKICAgICAgLy8gKHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBmaW5hbCBvdXRwdXQpLiBDb25zZXF1ZW50bHksIHRoZSBub2RlCiAgICAgIC8vIHNob3VsZG4ndCBiZSBhZGRlZCB0byBpdHMgYXBwYXJlbnQga2VybmVsIHBhcmVudCBhcyB0aGlzIHdvdWxkIGNyZWF0ZQogICAgICAvLyBhIGR1cGxpY2F0ZSBlbnRyeSBpbiB0aGUgcGFyZW50J3MgbGlzdCBvZiBjaGlsZHJlbi9tZW1iZXJzLgogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoY2xzICE9IG51bGwpIHsKICAgICAgaWYgKGRlY2xhcmF0aW9uLm5leHQgIT0gbnVsbCkgewogICAgICAgIGludCBjb3VudCA9IDA7CiAgICAgICAgRGVjbGFyYXRpb24gY3VycmVudCA9IGRlY2xhcmF0aW9uLm5leHQ7CiAgICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCkgewogICAgICAgICAgY291bnQrKzsKICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7CiAgICAgICAgfQogICAgICAgIGNscy5uYW1lICs9ICIjJGNvdW50IjsKICAgICAgfQogICAgICBsaWJyYXJ5LmFkZENsYXNzKGNscyk7CiAgICB9IGVsc2UgaWYgKG1lbWJlciAhPSBudWxsKSB7CiAgICAgIGlmIChkZWNsYXJhdGlvbi5uZXh0ID09IG51bGwpIHsKICAgICAgICBsaWJyYXJ5LmFkZE1lbWJlcihtZW1iZXIpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHR5cGVkZWYgIT0gbnVsbCkgewogICAgICBpZiAoZGVjbGFyYXRpb24ubmV4dCA9PSBudWxsKSB7CiAgICAgICAgbGlicmFyeS5hZGRUeXBlZGVmKHR5cGVkZWYpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGFkZE5hdGl2ZURlcGVuZGVuY3koU3RyaW5nIG5hdGl2ZUltcG9ydFBhdGgpIHsKICAgIERlY2xhcmF0aW9uIGNvbnN0cnVjdG9yID0gbG9hZGVyLmdldE5hdGl2ZUFubm90YXRpb24oKTsKICAgIEFyZ3VtZW50cyBhcmd1bWVudHMgPQogICAgICAgIG5ldyBBcmd1bWVudHMoPEV4cHJlc3Npb24+W25ldyBTdHJpbmdMaXRlcmFsKG5hdGl2ZUltcG9ydFBhdGgpXSk7CiAgICBFeHByZXNzaW9uIGFubm90YXRpb247CiAgICBpZiAoY29uc3RydWN0b3IuaXNDb25zdHJ1Y3RvcikgewogICAgICBhbm5vdGF0aW9uID0gbmV3IENvbnN0cnVjdG9ySW52b2NhdGlvbihjb25zdHJ1Y3Rvci50YXJnZXQsIGFyZ3VtZW50cykKICAgICAgICAuLmlzQ29uc3QgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgYW5ub3RhdGlvbiA9IG5ldyBTdGF0aWNJbnZvY2F0aW9uKGNvbnN0cnVjdG9yLnRhcmdldCwgYXJndW1lbnRzKQogICAgICAgIC4uaXNDb25zdCA9IHRydWU7CiAgICB9CiAgICBsaWJyYXJ5LmFkZEFubm90YXRpb24oYW5ub3RhdGlvbik7CiAgfQoKICB2b2lkIGFkZERlcGVuZGVuY2llcyhMaWJyYXJ5IGxpYnJhcnksIFNldDxTb3VyY2VMaWJyYXJ5QnVpbGRlcj4gc2VlbikgewogICAgaWYgKCFzZWVuLmFkZCh0aGlzKSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gTWVyZ2UgaW1wb3J0IGFuZCBleHBvcnQgbGlzdHMgdG8gaGF2ZSB0aGUgZGVwZW5kZW5jaWVzIGluIHNvdXJjZSBvcmRlci4KICAgIC8vIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZSBEaWV0TGlzdGVuZXIgdG8gY29ycmVjdGx5IG1hdGNoIHVwIG1ldGFkYXRhLgogICAgaW50IGltcG9ydEluZGV4ID0gMDsKICAgIGludCBleHBvcnRJbmRleCA9IDA7CiAgICB3aGlsZSAoaW1wb3J0SW5kZXggPCBpbXBvcnRzLmxlbmd0aCB8fCBleHBvcnRJbmRleCA8IGV4cG9ydHMubGVuZ3RoKSB7CiAgICAgIGlmIChleHBvcnRJbmRleCA+PSBleHBvcnRzLmxlbmd0aCB8fAogICAgICAgICAgKGltcG9ydEluZGV4IDwgaW1wb3J0cy5sZW5ndGggJiYKICAgICAgICAgICAgICBpbXBvcnRzW2ltcG9ydEluZGV4XS5jaGFyT2Zmc2V0IDwKICAgICAgICAgICAgICAgICAgZXhwb3J0c1tleHBvcnRJbmRleF0uY2hhck9mZnNldCkpIHsKICAgICAgICAvLyBBZGQgaW1wb3J0CiAgICAgICAgSW1wb3J0IGltcG9ydCA9IGltcG9ydHNbaW1wb3J0SW5kZXgrK107CgogICAgICAgIC8vIFJhdGhlciB0aGFuIGFkZCBhIExpYnJhcnlEZXBlbmRlbmN5LCB3ZSBhdHRhY2ggYW4gYW5ub3RhdGlvbi4KICAgICAgICBpZiAoaW1wb3J0Lm5hdGl2ZUltcG9ydFBhdGggIT0gbnVsbCkgewogICAgICAgICAgYWRkTmF0aXZlRGVwZW5kZW5jeShpbXBvcnQubmF0aXZlSW1wb3J0UGF0aCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIGlmIChpbXBvcnQuZGVmZXJyZWQgJiYgaW1wb3J0LnByZWZpeEJ1aWxkZXI/LmRlcGVuZGVuY3kgIT0gbnVsbCkgewogICAgICAgICAgbGlicmFyeS5hZGREZXBlbmRlbmN5KGltcG9ydC5wcmVmaXhCdWlsZGVyLmRlcGVuZGVuY3kpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsaWJyYXJ5LmFkZERlcGVuZGVuY3kobmV3IExpYnJhcnlEZXBlbmRlbmN5LmltcG9ydCgKICAgICAgICAgICAgICBpbXBvcnQuaW1wb3J0ZWQudGFyZ2V0LAogICAgICAgICAgICAgIG5hbWU6IGltcG9ydC5wcmVmaXgsCiAgICAgICAgICAgICAgY29tYmluYXRvcnM6IHRvS2VybmVsQ29tYmluYXRvcnMoaW1wb3J0LmNvbWJpbmF0b3JzKSkKICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gaW1wb3J0LmNoYXJPZmZzZXQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBBZGQgZXhwb3J0CiAgICAgICAgRXhwb3J0IGV4cG9ydCA9IGV4cG9ydHNbZXhwb3J0SW5kZXgrK107CiAgICAgICAgbGlicmFyeS5hZGREZXBlbmRlbmN5KG5ldyBMaWJyYXJ5RGVwZW5kZW5jeS5leHBvcnQoCiAgICAgICAgICAgIGV4cG9ydC5leHBvcnRlZC50YXJnZXQsCiAgICAgICAgICAgIGNvbWJpbmF0b3JzOiB0b0tlcm5lbENvbWJpbmF0b3JzKGV4cG9ydC5jb21iaW5hdG9ycykpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBleHBvcnQuY2hhck9mZnNldCk7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKFNvdXJjZUxpYnJhcnlCdWlsZGVyIHBhcnQgaW4gcGFydHMpIHsKICAgICAgcGFydC5hZGREZXBlbmRlbmNpZXMobGlicmFyeSwgc2Vlbik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBEZWNsYXJhdGlvbiBjb21wdXRlQW1iaWd1b3VzRGVjbGFyYXRpb24oCiAgICAgIFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiwgRGVjbGFyYXRpb24gb3RoZXIsIGludCBjaGFyT2Zmc2V0LAogICAgICB7Ym9vbCBpc0V4cG9ydDogZmFsc2UsIGJvb2wgaXNJbXBvcnQ6IGZhbHNlfSkgewogICAgLy8gVE9ETyhhaGUpOiBDYW4gSSBtb3ZlIHRoaXMgdG8gU2NvcGUgb3IgUHJlZml4PwogICAgaWYgKGRlY2xhcmF0aW9uID09IG90aGVyKSByZXR1cm4gZGVjbGFyYXRpb247CiAgICBpZiAoZGVjbGFyYXRpb24gaXMgSW52YWxpZFR5cGVCdWlsZGVyKSByZXR1cm4gZGVjbGFyYXRpb247CiAgICBpZiAob3RoZXIgaXMgSW52YWxpZFR5cGVCdWlsZGVyKSByZXR1cm4gb3RoZXI7CiAgICBpZiAoZGVjbGFyYXRpb24gaXMgQWNjZXNzRXJyb3JCdWlsZGVyKSB7CiAgICAgIEFjY2Vzc0Vycm9yQnVpbGRlciBlcnJvciA9IGRlY2xhcmF0aW9uOwogICAgICBkZWNsYXJhdGlvbiA9IGVycm9yLmJ1aWxkZXI7CiAgICB9CiAgICBpZiAob3RoZXIgaXMgQWNjZXNzRXJyb3JCdWlsZGVyKSB7CiAgICAgIEFjY2Vzc0Vycm9yQnVpbGRlciBlcnJvciA9IG90aGVyOwogICAgICBvdGhlciA9IGVycm9yLmJ1aWxkZXI7CiAgICB9CiAgICBib29sIGlzTG9jYWwgPSBmYWxzZTsKICAgIGJvb2wgaXNMb2FkTGlicmFyeSA9IGZhbHNlOwogICAgRGVjbGFyYXRpb24gcHJlZmVycmVkOwogICAgVXJpIHVyaTsKICAgIFVyaSBvdGhlclVyaTsKICAgIFVyaSBwcmVmZXJyZWRVcmk7CiAgICBVcmkgaGlkZGVuVXJpOwogICAgaWYgKHNjb3BlLmxvY2FsW25hbWVdID09IGRlY2xhcmF0aW9uKSB7CiAgICAgIGlzTG9jYWwgPSB0cnVlOwogICAgICBwcmVmZXJyZWQgPSBkZWNsYXJhdGlvbjsKICAgICAgaGlkZGVuVXJpID0gY29tcHV0ZUxpYnJhcnlVcmkob3RoZXIpOwogICAgfSBlbHNlIHsKICAgICAgdXJpID0gY29tcHV0ZUxpYnJhcnlVcmkoZGVjbGFyYXRpb24pOwogICAgICBvdGhlclVyaSA9IGNvbXB1dGVMaWJyYXJ5VXJpKG90aGVyKTsKICAgICAgaWYgKGRlY2xhcmF0aW9uIGlzIExvYWRMaWJyYXJ5QnVpbGRlcikgewogICAgICAgIGlzTG9hZExpYnJhcnkgPSB0cnVlOwogICAgICAgIHByZWZlcnJlZCA9IGRlY2xhcmF0aW9uOwogICAgICAgIHByZWZlcnJlZFVyaSA9IG90aGVyVXJpOwogICAgICB9IGVsc2UgaWYgKG90aGVyIGlzIExvYWRMaWJyYXJ5QnVpbGRlcikgewogICAgICAgIGlzTG9hZExpYnJhcnkgPSB0cnVlOwogICAgICAgIHByZWZlcnJlZCA9IG90aGVyOwogICAgICAgIHByZWZlcnJlZFVyaSA9IHVyaTsKICAgICAgfSBlbHNlIGlmIChvdGhlclVyaT8uc2NoZW1lID09ICJkYXJ0IiAmJiB1cmk/LnNjaGVtZSAhPSAiZGFydCIpIHsKICAgICAgICBwcmVmZXJyZWQgPSBkZWNsYXJhdGlvbjsKICAgICAgICBwcmVmZXJyZWRVcmkgPSB1cmk7CiAgICAgICAgaGlkZGVuVXJpID0gb3RoZXJVcmk7CiAgICAgIH0gZWxzZSBpZiAodXJpPy5zY2hlbWUgPT0gImRhcnQiICYmIG90aGVyVXJpPy5zY2hlbWUgIT0gImRhcnQiKSB7CiAgICAgICAgcHJlZmVycmVkID0gb3RoZXI7CiAgICAgICAgcHJlZmVycmVkVXJpID0gb3RoZXJVcmk7CiAgICAgICAgaGlkZGVuVXJpID0gdXJpOwogICAgICB9CiAgICB9CiAgICBpZiAocHJlZmVycmVkICE9IG51bGwpIHsKICAgICAgaWYgKGlzTG9jYWwpIHsKICAgICAgICB2YXIgdGVtcGxhdGUgPSBpc0V4cG9ydAogICAgICAgICAgICA/IHRlbXBsYXRlTG9jYWxEZWZpbml0aW9uSGlkZXNFeHBvcnQKICAgICAgICAgICAgOiB0ZW1wbGF0ZUxvY2FsRGVmaW5pdGlvbkhpZGVzSW1wb3J0OwogICAgICAgIGFkZFByb2JsZW0odGVtcGxhdGUud2l0aEFyZ3VtZW50cyhuYW1lLCBoaWRkZW5VcmkpLCBjaGFyT2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCwgZmlsZVVyaSk7CiAgICAgIH0gZWxzZSBpZiAoaXNMb2FkTGlicmFyeSkgewogICAgICAgIGFkZFByb2JsZW0odGVtcGxhdGVMb2FkTGlicmFyeUhpZGVzTWVtYmVyLndpdGhBcmd1bWVudHMocHJlZmVycmVkVXJpKSwKICAgICAgICAgICAgY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciB0ZW1wbGF0ZSA9CiAgICAgICAgICAgIGlzRXhwb3J0ID8gdGVtcGxhdGVFeHBvcnRIaWRlc0V4cG9ydCA6IHRlbXBsYXRlSW1wb3J0SGlkZXNJbXBvcnQ7CiAgICAgICAgYWRkUHJvYmxlbSh0ZW1wbGF0ZS53aXRoQXJndW1lbnRzKG5hbWUsIHByZWZlcnJlZFVyaSwgaGlkZGVuVXJpKSwKICAgICAgICAgICAgY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgICB9CiAgICAgIHJldHVybiBwcmVmZXJyZWQ7CiAgICB9CiAgICBpZiAoZGVjbGFyYXRpb24ubmV4dCA9PSBudWxsICYmIG90aGVyLm5leHQgPT0gbnVsbCkgewogICAgICBpZiAoaXNJbXBvcnQgJiYgZGVjbGFyYXRpb24gaXMgUHJlZml4QnVpbGRlciAmJiBvdGhlciBpcyBQcmVmaXhCdWlsZGVyKSB7CiAgICAgICAgLy8gSGFuZGxlcyB0aGUgY2FzZSB3aGVyZSB0aGUgc2FtZSBwcmVmaXggaXMgdXNlZCBmb3IgZGlmZmVyZW50CiAgICAgICAgLy8gaW1wb3J0cy4KICAgICAgICByZXR1cm4gZGVjbGFyYXRpb24KICAgICAgICAgIC4uZXhwb3J0U2NvcGUubWVyZ2Uob3RoZXIuZXhwb3J0U2NvcGUsCiAgICAgICAgICAgICAgKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBleGlzdGluZywgRGVjbGFyYXRpb24gbWVtYmVyKSB7CiAgICAgICAgICAgIHJldHVybiBjb21wdXRlQW1iaWd1b3VzRGVjbGFyYXRpb24oCiAgICAgICAgICAgICAgICBuYW1lLCBleGlzdGluZywgbWVtYmVyLCBjaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgaXNFeHBvcnQ6IGlzRXhwb3J0LCBpc0ltcG9ydDogaXNJbXBvcnQpOwogICAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHZhciB0ZW1wbGF0ZSA9CiAgICAgICAgaXNFeHBvcnQgPyB0ZW1wbGF0ZUR1cGxpY2F0ZWRFeHBvcnQgOiB0ZW1wbGF0ZUR1cGxpY2F0ZWRJbXBvcnQ7CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSB0ZW1wbGF0ZS53aXRoQXJndW1lbnRzKG5hbWUsIHVyaSwgb3RoZXJVcmkpOwogICAgYWRkUHJvYmxlbShtZXNzYWdlLCBjaGFyT2Zmc2V0LCBub0xlbmd0aCwgZmlsZVVyaSk7CiAgICB2YXIgYnVpbGRlclRlbXBsYXRlID0gaXNFeHBvcnQKICAgICAgICA/IHRlbXBsYXRlRHVwbGljYXRlZEV4cG9ydEluVHlwZQogICAgICAgIDogdGVtcGxhdGVEdXBsaWNhdGVkSW1wb3J0SW5UeXBlOwogICAgbWVzc2FnZSA9IGJ1aWxkZXJUZW1wbGF0ZS53aXRoQXJndW1lbnRzKAogICAgICAgIG5hbWUsCiAgICAgICAgLy8gVE9ETyhhaGUpOiBXZSBzaG91bGQgcHJvYmFibHkgdXNlIGEgY29udGV4dCBvYmplY3QgaGVyZQogICAgICAgIC8vIGluc3RlYWQgb2YgaW5jbHVkaW5nIFVSSXMgaW4gdGhpcyBtZXNzYWdlLgogICAgICAgIHVyaSwKICAgICAgICBvdGhlclVyaSk7CiAgICAvLyBXZSByZXBvcnQgdGhlIGVycm9yIGxhemlseSAoc2V0dGluZyBzdXBwcmVzc01lc3NhZ2UgdG8gZmFsc2UpIGJlY2F1c2UgdGhlCiAgICAvLyBzcGVjIDE4LjEgc3RhdGVzIHRoYXQgJ0l0IGlzIG5vdCBhbiBlcnJvciBpZiBOIGlzIGludHJvZHVjZWQgYnkgdHdvIG9yCiAgICAvLyBtb3JlIGltcG9ydHMgYnV0IG5ldmVyIHJlZmVycmVkIHRvLicKICAgIHJldHVybiBuZXcgSW52YWxpZFR5cGVCdWlsZGVyKAogICAgICAgIG5hbWUsIG1lc3NhZ2Uud2l0aExvY2F0aW9uKGZpbGVVcmksIGNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKSwKICAgICAgICBzdXBwcmVzc01lc3NhZ2U6IGZhbHNlKTsKICB9CgogIGludCBmaW5pc2hEZWZlcnJlZExvYWRUZWFyb2ZmcygpIHsKICAgIGludCB0b3RhbCA9IDA7CiAgICBmb3IgKHZhciBpbXBvcnQgaW4gaW1wb3J0cykgewogICAgICBpZiAoaW1wb3J0LmRlZmVycmVkKSB7CiAgICAgICAgUHJvY2VkdXJlIHRlYXJvZmYgPSBpbXBvcnQucHJlZml4QnVpbGRlci5sb2FkTGlicmFyeUJ1aWxkZXIudGVhcm9mZjsKICAgICAgICBpZiAodGVhcm9mZiAhPSBudWxsKSBsaWJyYXJ5LmFkZE1lbWJlcih0ZWFyb2ZmKTsKICAgICAgICB0b3RhbCsrOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdG90YWw7CiAgfQoKICBpbnQgZmluaXNoRm9yd2FyZGVycygpIHsKICAgIGludCBjb3VudCA9IDA7CiAgICBDbG9uZVZpc2l0b3IgY2xvbmVyID0gbmV3IENsb25lVmlzaXRvcigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb3J3YXJkZXJzT3JpZ2lucy5sZW5ndGg7IGkgKz0gMikgewogICAgICBQcm9jZWR1cmUgZm9yd2FyZGVyID0gZm9yd2FyZGVyc09yaWdpbnNbaV07CiAgICAgIFByb2NlZHVyZSBvcmlnaW4gPSBmb3J3YXJkZXJzT3JpZ2luc1tpICsgMV07CgogICAgICBpbnQgcG9zaXRpb25hbENvdW50ID0gb3JpZ2luLmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsKICAgICAgaWYgKGZvcndhcmRlci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggIT0gcG9zaXRpb25hbENvdW50KSB7CiAgICAgICAgcmV0dXJuIHVuZXhwZWN0ZWQoCiAgICAgICAgICAgICIkcG9zaXRpb25hbENvdW50IiwKICAgICAgICAgICAgIiR7Zm9yd2FyZGVyLmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aH0iLAogICAgICAgICAgICBvcmlnaW4uZmlsZU9mZnNldCwKICAgICAgICAgICAgb3JpZ2luLmZpbGVVcmkpOwogICAgICB9CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcG9zaXRpb25hbENvdW50OyArK2opIHsKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGZvcndhcmRlclBhcmFtZXRlciA9CiAgICAgICAgICAgIGZvcndhcmRlci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyc1tqXTsKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG9yaWdpblBhcmFtZXRlciA9CiAgICAgICAgICAgIG9yaWdpbi5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyc1tqXTsKICAgICAgICBpZiAob3JpZ2luUGFyYW1ldGVyLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICAgIGZvcndhcmRlclBhcmFtZXRlci5pbml0aWFsaXplciA9CiAgICAgICAgICAgICAgY2xvbmVyLmNsb25lKG9yaWdpblBhcmFtZXRlci5pbml0aWFsaXplcik7CiAgICAgICAgICBmb3J3YXJkZXJQYXJhbWV0ZXIuaW5pdGlhbGl6ZXIucGFyZW50ID0gZm9yd2FyZGVyUGFyYW1ldGVyOwogICAgICAgIH0KICAgICAgfQoKICAgICAgTWFwPFN0cmluZywgVmFyaWFibGVEZWNsYXJhdGlvbj4gb3JpZ2luTmFtZWRNYXAgPQogICAgICAgICAgPFN0cmluZywgVmFyaWFibGVEZWNsYXJhdGlvbj57fTsKICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIG9yaWdpbk5hbWVkIGluIG9yaWdpbi5mdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgICBvcmlnaW5OYW1lZE1hcFtvcmlnaW5OYW1lZC5uYW1lXSA9IG9yaWdpbk5hbWVkOwogICAgICB9CiAgICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBmb3J3YXJkZXJOYW1lZAogICAgICAgICAgaW4gZm9yd2FyZGVyLmZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycykgewogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gb3JpZ2luTmFtZWQgPSBvcmlnaW5OYW1lZE1hcFtmb3J3YXJkZXJOYW1lZC5uYW1lXTsKICAgICAgICBpZiAob3JpZ2luTmFtZWQgPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIHVuaGFuZGxlZCgKICAgICAgICAgICAgICAibnVsbCIsIGZvcndhcmRlci5uYW1lLm5hbWUsIG9yaWdpbi5maWxlT2Zmc2V0LCBvcmlnaW4uZmlsZVVyaSk7CiAgICAgICAgfQogICAgICAgIGlmIChvcmlnaW5OYW1lZC5pbml0aWFsaXplciA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICBmb3J3YXJkZXJOYW1lZC5pbml0aWFsaXplciA9IGNsb25lci5jbG9uZShvcmlnaW5OYW1lZC5pbml0aWFsaXplcik7CiAgICAgICAgZm9yd2FyZGVyTmFtZWQuaW5pdGlhbGl6ZXIucGFyZW50ID0gZm9yd2FyZGVyTmFtZWQ7CiAgICAgIH0KCiAgICAgICsrY291bnQ7CiAgICB9CiAgICBmb3J3YXJkZXJzT3JpZ2lucy5jbGVhcigpOwogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgdm9pZCBhZGROYXRpdmVNZXRob2QoRnVuY3Rpb25CdWlsZGVyIG1ldGhvZCkgewogICAgbmF0aXZlTWV0aG9kcy5hZGQobWV0aG9kKTsKICB9CgogIGludCBmaW5pc2hOYXRpdmVNZXRob2RzKCkgewogICAgZm9yIChGdW5jdGlvbkJ1aWxkZXIgbWV0aG9kIGluIG5hdGl2ZU1ldGhvZHMpIHsKICAgICAgbWV0aG9kLmJlY29tZU5hdGl2ZShsb2FkZXIpOwogICAgfQogICAgcmV0dXJuIG5hdGl2ZU1ldGhvZHMubGVuZ3RoOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBjb3B5IG9mIFtvcmlnaW5hbF0gaW50byB0aGUgc2NvcGUgb2YgW2RlY2xhcmF0aW9uXS4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGZvciBhZGRpbmcgY29waWVzIG9mIGNsYXNzIHR5cGUgcGFyYW1ldGVycyB0byBmYWN0b3J5CiAgLy8vIG1ldGhvZHMgYW5kIHVubmFtZWQgbWl4aW4gYXBwbGljYXRpb25zLCBhbmQgZm9yIGFkZGluZyBjb3BpZXMgb2YKICAvLy8gZXh0ZW5zaW9uIHR5cGUgcGFyYW1ldGVycyB0byBleHRlbnNpb24gaW5zdGFuY2UgbWV0aG9kcy4KICAvLy8KICAvLy8gSWYgW3N5bnRoZXNpemVUeXBlUGFyYW1ldGVyTmFtZXNdIGlzIGB0cnVlYCB0aGUgbmFtZXMgb2YgdGhlCiAgLy8vIFtUeXBlUGFyYW1ldGVyXSBhcmUgcHJlZml4IHdpdGggJyMnIHRvIGluZGljYXRlIHRoYXQgdGhlaXIgc3ludGhlc2l6ZWQuCiAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiBjb3B5VHlwZVZhcmlhYmxlcygKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiBvcmlnaW5hbCwgRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uLAogICAgICB7Ym9vbCBzeW50aGVzaXplVHlwZVBhcmFtZXRlck5hbWVzOiBmYWxzZX0pIHsKICAgIExpc3Q8VHlwZUJ1aWxkZXI+IG5ld1R5cGVzID0gPFR5cGVCdWlsZGVyPltdOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiBjb3B5ID0gPFR5cGVWYXJpYWJsZUJ1aWxkZXI+W107CiAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgaW4gb3JpZ2luYWwpIHsKICAgICAgdmFyIG5ld1ZhcmlhYmxlID0gbmV3IFR5cGVWYXJpYWJsZUJ1aWxkZXIoCiAgICAgICAgICB2YXJpYWJsZS5uYW1lLCB0aGlzLCB2YXJpYWJsZS5jaGFyT2Zmc2V0LAogICAgICAgICAgYm91bmQ6IHZhcmlhYmxlLmJvdW5kPy5jbG9uZShuZXdUeXBlcyksCiAgICAgICAgICBzeW50aGVzaXplVHlwZVBhcmFtZXRlck5hbWU6IHN5bnRoZXNpemVUeXBlUGFyYW1ldGVyTmFtZXMpOwogICAgICBjb3B5LmFkZChuZXdWYXJpYWJsZSk7CiAgICAgIGJvdW5kbGVzc1R5cGVWYXJpYWJsZXMuYWRkKG5ld1ZhcmlhYmxlKTsKICAgIH0KICAgIGZvciAoVHlwZUJ1aWxkZXIgbmV3VHlwZSBpbiBuZXdUeXBlcykgewogICAgICBkZWNsYXJhdGlvbi5hZGRUeXBlKG5ldyBVbnJlc29sdmVkVHlwZShuZXdUeXBlLCAtMSwgbnVsbCkpOwogICAgfQogICAgcmV0dXJuIGNvcHk7CiAgfQoKICBpbnQgZmluaXNoVHlwZVZhcmlhYmxlcyhDbGFzc0J1aWxkZXIgb2JqZWN0LCBUeXBlQnVpbGRlciBkeW5hbWljVHlwZSkgewogICAgaW50IGNvdW50ID0gYm91bmRsZXNzVHlwZVZhcmlhYmxlcy5sZW5ndGg7CiAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgYnVpbGRlciBpbiBib3VuZGxlc3NUeXBlVmFyaWFibGVzKSB7CiAgICAgIGJ1aWxkZXIuZmluaXNoKHRoaXMsIG9iamVjdCwgZHluYW1pY1R5cGUpOwogICAgfQogICAgYm91bmRsZXNzVHlwZVZhcmlhYmxlcy5jbGVhcigpOwogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgaW50IGNvbXB1dGVEZWZhdWx0VHlwZXMoVHlwZUJ1aWxkZXIgZHluYW1pY1R5cGUsIFR5cGVCdWlsZGVyIGJvdHRvbVR5cGUsCiAgICAgIENsYXNzQnVpbGRlciBvYmplY3RDbGFzcykgewogICAgaW50IGNvdW50ID0gMDsKCiAgICBpbnQgY29tcHV0ZURlZmF1bHRUeXBlc0ZvclZhcmlhYmxlcygKICAgICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHZhcmlhYmxlcywgYm9vbCBsZWdhY3lNb2RlKSB7CiAgICAgIGlmICh2YXJpYWJsZXMgPT0gbnVsbCkgcmV0dXJuIDA7CgogICAgICBib29sIGhhdmVFcnJvbmVvdXNCb3VuZHMgPSBmYWxzZTsKICAgICAgaWYgKCFsZWdhY3lNb2RlKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJpYWJsZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgPSB2YXJpYWJsZXNbaV07CiAgICAgICAgICBMaXN0PFR5cGVCdWlsZGVyPiBnZW5lcmljRnVuY3Rpb25UeXBlcyA9IDxUeXBlQnVpbGRlcj5bXTsKICAgICAgICAgIGZpbmRHZW5lcmljRnVuY3Rpb25UeXBlcyh2YXJpYWJsZS5ib3VuZCwKICAgICAgICAgICAgICByZXN1bHQ6IGdlbmVyaWNGdW5jdGlvblR5cGVzKTsKICAgICAgICAgIGlmIChnZW5lcmljRnVuY3Rpb25UeXBlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGhhdmVFcnJvbmVvdXNCb3VuZHMgPSB0cnVlOwogICAgICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlSW5Cb3VuZCwgdmFyaWFibGUuY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIHZhcmlhYmxlLm5hbWUubGVuZ3RoLCB2YXJpYWJsZS5maWxlVXJpKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghaGF2ZUVycm9uZW91c0JvdW5kcykgewogICAgICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gY2FsY3VsYXRlZEJvdW5kcyA9CiAgICAgICAgICAgICAgY2FsY3VsYXRlQm91bmRzKHZhcmlhYmxlcywgZHluYW1pY1R5cGUsIGJvdHRvbVR5cGUsIG9iamVjdENsYXNzKTsKICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyaWFibGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIHZhcmlhYmxlc1tpXS5kZWZhdWx0VHlwZSA9IGNhbGN1bGF0ZWRCb3VuZHNbaV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICBpZiAobGVnYWN5TW9kZSB8fCBoYXZlRXJyb25lb3VzQm91bmRzKSB7CiAgICAgICAgLy8gSW4gRGFydCAxLCBwdXQgYGR5bmFtaWNgIGV2ZXJ5d2hlcmUuCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJpYWJsZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIHZhcmlhYmxlc1tpXS5kZWZhdWx0VHlwZSA9IGR5bmFtaWNUeXBlOwogICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuIHZhcmlhYmxlcy5sZW5ndGg7CiAgICB9CgogICAgdm9pZCByZXBvcnRJc3N1ZXMoTGlzdDxPYmplY3Q+IGlzc3VlcykgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlzc3Vlcy5sZW5ndGg7IGkgKz0gMykgewogICAgICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb24gPSBpc3N1ZXNbaV07CiAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gaXNzdWVzW2kgKyAxXTsKICAgICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0ID0gaXNzdWVzW2kgKyAyXTsKCiAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlLCBkZWNsYXJhdGlvbi5jaGFyT2Zmc2V0LCBkZWNsYXJhdGlvbi5uYW1lLmxlbmd0aCwKICAgICAgICAgICAgZGVjbGFyYXRpb24uZmlsZVVyaSwKICAgICAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgICAgIH0KICAgIH0KCiAgICBib29sIGxlZ2FjeU1vZGUgPSBsb2FkZXIudGFyZ2V0LmxlZ2FjeU1vZGU7CiAgICBmb3IgKHZhciBkZWNsYXJhdGlvbiBpbiBsaWJyYXJ5RGVjbGFyYXRpb24ubWVtYmVycy52YWx1ZXMpIHsKICAgICAgaWYgKGRlY2xhcmF0aW9uIGlzIENsYXNzQnVpbGRlcikgewogICAgICAgIHsKICAgICAgICAgIExpc3Q8T2JqZWN0PiBpc3N1ZXMgPSBsZWdhY3lNb2RlCiAgICAgICAgICAgICAgPyBjb25zdCA8T2JqZWN0PltdCiAgICAgICAgICAgICAgOiBnZXROb25TaW1wbGljaXR5SXNzdWVzRm9yRGVjbGFyYXRpb24oZGVjbGFyYXRpb24sCiAgICAgICAgICAgICAgICAgIHBlcmZvcm1FcnJvclJlY292ZXJ5OiB0cnVlKTsKICAgICAgICAgIHJlcG9ydElzc3Vlcyhpc3N1ZXMpOwogICAgICAgICAgLy8gSW4gY2FzZSBvZiBpc3N1ZXMsIHVzZSBsZWdhY3kgbW9kZSBmb3IgZXJyb3IgcmVjb3ZlcnkuCiAgICAgICAgICBjb3VudCArPSBjb21wdXRlRGVmYXVsdFR5cGVzRm9yVmFyaWFibGVzKAogICAgICAgICAgICAgIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMsIGxlZ2FjeU1vZGUgfHwgaXNzdWVzLmlzTm90RW1wdHkpOwogICAgICAgIH0KICAgICAgICBkZWNsYXJhdGlvbi5mb3JFYWNoKChTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gbWVtYmVyKSB7CiAgICAgICAgICBpZiAobWVtYmVyIGlzIFByb2NlZHVyZUJ1aWxkZXIpIHsKICAgICAgICAgICAgTGlzdDxPYmplY3Q+IGlzc3VlcyA9IGxlZ2FjeU1vZGUKICAgICAgICAgICAgICAgID8gY29uc3QgPE9iamVjdD5bXQogICAgICAgICAgICAgICAgOiBnZXROb25TaW1wbGljaXR5SXNzdWVzRm9yVHlwZVZhcmlhYmxlcyhtZW1iZXIudHlwZVZhcmlhYmxlcyk7CiAgICAgICAgICAgIHJlcG9ydElzc3Vlcyhpc3N1ZXMpOwogICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGlzc3VlcywgdXNlIGxlZ2FjeSBtb2RlIGZvciBlcnJvciByZWNvdmVyeS4KICAgICAgICAgICAgY291bnQgKz0gY29tcHV0ZURlZmF1bHRUeXBlc0ZvclZhcmlhYmxlcygKICAgICAgICAgICAgICAgIG1lbWJlci50eXBlVmFyaWFibGVzLCBsZWdhY3lNb2RlIHx8IGlzc3Vlcy5pc05vdEVtcHR5KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBUeXBlQWxpYXNCdWlsZGVyKSB7CiAgICAgICAgTGlzdDxPYmplY3Q+IGlzc3VlcyA9IGxlZ2FjeU1vZGUKICAgICAgICAgICAgPyBjb25zdCA8T2JqZWN0PltdCiAgICAgICAgICAgIDogZ2V0Tm9uU2ltcGxpY2l0eUlzc3Vlc0ZvckRlY2xhcmF0aW9uKGRlY2xhcmF0aW9uLAogICAgICAgICAgICAgICAgcGVyZm9ybUVycm9yUmVjb3Zlcnk6IHRydWUpOwogICAgICAgIHJlcG9ydElzc3Vlcyhpc3N1ZXMpOwogICAgICAgIC8vIEluIGNhc2Ugb2YgaXNzdWVzLCB1c2UgbGVnYWN5IG1vZGUgZm9yIGVycm9yIHJlY292ZXJ5LgogICAgICAgIGNvdW50ICs9IGNvbXB1dGVEZWZhdWx0VHlwZXNGb3JWYXJpYWJsZXMoCiAgICAgICAgICAgIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMsIGxlZ2FjeU1vZGUgfHwgaXNzdWVzLmlzTm90RW1wdHkpOwogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIEZ1bmN0aW9uQnVpbGRlcikgewogICAgICAgIExpc3Q8T2JqZWN0PiBpc3N1ZXMgPSBsZWdhY3lNb2RlCiAgICAgICAgICAgID8gY29uc3QgPE9iamVjdD5bXQogICAgICAgICAgICA6IGdldE5vblNpbXBsaWNpdHlJc3N1ZXNGb3JUeXBlVmFyaWFibGVzKGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMpOwogICAgICAgIHJlcG9ydElzc3Vlcyhpc3N1ZXMpOwogICAgICAgIC8vIEluIGNhc2Ugb2YgaXNzdWVzLCB1c2UgbGVnYWN5IG1vZGUgZm9yIGVycm9yIHJlY292ZXJ5LgogICAgICAgIGNvdW50ICs9IGNvbXB1dGVEZWZhdWx0VHlwZXNGb3JWYXJpYWJsZXMoCiAgICAgICAgICAgIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMsIGxlZ2FjeU1vZGUgfHwgaXNzdWVzLmlzTm90RW1wdHkpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhcHBseVBhdGNoZXMoKSB7CiAgICBpZiAoIWlzUGF0Y2gpIHJldHVybjsKICAgIE5hbWVJdGVyYXRvciBvcmlnaW5EZWNsYXJhdGlvbnMgPSBvcmlnaW4ubmFtZUl0ZXJhdG9yOwogICAgd2hpbGUgKG9yaWdpbkRlY2xhcmF0aW9ucy5tb3ZlTmV4dCgpKSB7CiAgICAgIFN0cmluZyBuYW1lID0gb3JpZ2luRGVjbGFyYXRpb25zLm5hbWU7CiAgICAgIERlY2xhcmF0aW9uIG1lbWJlciA9IG9yaWdpbkRlY2xhcmF0aW9ucy5jdXJyZW50OwogICAgICBib29sIGlzU2V0dGVyID0gbWVtYmVyLmlzU2V0dGVyOwogICAgICBEZWNsYXJhdGlvbiBwYXRjaCA9IGlzU2V0dGVyID8gc2NvcGUuc2V0dGVyc1tuYW1lXSA6IHNjb3BlLmxvY2FsW25hbWVdOwogICAgICBpZiAocGF0Y2ggIT0gbnVsbCkgewogICAgICAgIC8vIFtwYXRjaF0gaGFzIHRoZSBzYW1lIG5hbWUgYXMgYSBbbWVtYmVyXSBpbiBbb3JpZ2luXSBsaWJyYXJ5LCBzbyBpdAogICAgICAgIC8vIG11c3QgYmUgYSBwYXRjaCB0byBbbWVtYmVyXS4KICAgICAgICBtZW1iZXIuYXBwbHlQYXRjaChwYXRjaCk7CiAgICAgICAgLy8gVE9ETyhhaGUpOiBWZXJpZnkgdGhhdCBwYXRjaCBoYXMgdGhlIEBwYXRjaCBhbm5vdGF0aW9uLgogICAgICB9IGVsc2UgewogICAgICAgIC8vIE5vIG1lbWJlciB3aXRoIFtuYW1lXSBleGlzdHMgaW4gdGhpcyBsaWJyYXJ5IGFscmVhZHkuIFNvIHdlIG5lZWQgdG8KICAgICAgICAvLyBpbXBvcnQgaXQgaW50byB0aGUgcGF0Y2ggbGlicmFyeS4gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIG9yaWdpbgogICAgICAgIC8vIGxpYnJhcnkgaXMgaW4gc2NvcGUgb2YgdGhlIHBhdGNoIGxpYnJhcnkuCiAgICAgICAgaWYgKGlzU2V0dGVyKSB7CiAgICAgICAgICBzY29wZUJ1aWxkZXIuYWRkU2V0dGVyKG5hbWUsIG1lbWJlcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNjb3BlQnVpbGRlci5hZGRNZW1iZXIobmFtZSwgbWVtYmVyKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIE5hbWVJdGVyYXRvciBwYXRjaERlY2xhcmF0aW9ucyA9IG5hbWVJdGVyYXRvcjsKICAgIHdoaWxlIChwYXRjaERlY2xhcmF0aW9ucy5tb3ZlTmV4dCgpKSB7CiAgICAgIFN0cmluZyBuYW1lID0gcGF0Y2hEZWNsYXJhdGlvbnMubmFtZTsKICAgICAgRGVjbGFyYXRpb24gbWVtYmVyID0gcGF0Y2hEZWNsYXJhdGlvbnMuY3VycmVudDsKICAgICAgLy8gV2UgbmVlZCB0byBpbmplY3QgYWxsIG5vbi1wYXRjaCBtZW1iZXJzIGludG8gdGhlIG9yaWdpbiBsaWJyYXJ5LiBUaGlzCiAgICAgIC8vIHNob3VsZCBvbmx5IGFwcGx5IHRvIHByaXZhdGUgbWVtYmVycy4KICAgICAgaWYgKG1lbWJlci5pc1BhdGNoKSB7CiAgICAgICAgLy8gSWdub3JlIHBhdGNoZXMuCiAgICAgIH0gZWxzZSBpZiAobmFtZS5zdGFydHNXaXRoKCJfIikpIHsKICAgICAgICBvcmlnaW4uaW5qZWN0TWVtYmVyRnJvbVBhdGNoKG5hbWUsIG1lbWJlcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3JpZ2luLmV4cG9ydE1lbWJlckZyb21QYXRjaChuYW1lLCBtZW1iZXIpOwogICAgICB9CiAgICB9CiAgfQoKICBpbnQgZmluaXNoUGF0Y2hNZXRob2RzKCkgewogICAgaWYgKCFpc1BhdGNoKSByZXR1cm4gMDsKICAgIGludCBjb3VudCA9IDA7CiAgICBJdGVyYXRvcjxEZWNsYXJhdGlvbj4gaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yOwogICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgY291bnQgKz0gaXRlcmF0b3IuY3VycmVudC5maW5pc2hQYXRjaCgpOwogICAgfQogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgdm9pZCBpbmplY3RNZW1iZXJGcm9tUGF0Y2goU3RyaW5nIG5hbWUsIERlY2xhcmF0aW9uIG1lbWJlcikgewogICAgaWYgKG1lbWJlci5pc1NldHRlcikgewogICAgICBhc3NlcnQoc2NvcGUuc2V0dGVyc1tuYW1lXSA9PSBudWxsKTsKICAgICAgc2NvcGVCdWlsZGVyLmFkZFNldHRlcihuYW1lLCBtZW1iZXIpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KHNjb3BlLmxvY2FsW25hbWVdID09IG51bGwpOwogICAgICBzY29wZUJ1aWxkZXIuYWRkTWVtYmVyKG5hbWUsIG1lbWJlcik7CiAgICB9CiAgfQoKICB2b2lkIGV4cG9ydE1lbWJlckZyb21QYXRjaChTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gbWVtYmVyKSB7CiAgICBpZiAodXJpLnNjaGVtZSAhPSAiZGFydCIgfHwgIXVyaS5wYXRoLnN0YXJ0c1dpdGgoIl8iKSkgewogICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlUGF0Y2hJbmplY3Rpb25GYWlsZWQud2l0aEFyZ3VtZW50cyhuYW1lLCB1cmkpLAogICAgICAgICAgbWVtYmVyLmNoYXJPZmZzZXQsIG5vTGVuZ3RoLCBtZW1iZXIuZmlsZVVyaSk7CiAgICB9CiAgICAvLyBQbGF0Zm9ybS1wcml2YXRlIGxpYnJhcmllcywgc3VjaCBhcyAiZGFydDpfaW50ZXJuYWwiIGhhdmUgc3BlY2lhbAogICAgLy8gc2VtYW50aWNzOiBwdWJsaWMgbWVtYmVycyBhcmUgaW5qZWN0ZWQgaW50byB0aGUgb3JpZ2luIGxpYnJhcnkuCiAgICAvLyBUT0RPKGFoZSk6IFNlZSBpZiB3ZSBjYW4gcmVtb3ZlIHRoaXMgc3BlY2lhbCBjYXNlLgoKICAgIC8vIElmIHRoaXMgbWVtYmVyIGFscmVhZHkgZXhpc3QgaW4gdGhlIG9yaWdpbiBsaWJyYXJ5IHNjb3BlLCBpdCBzaG91bGQKICAgIC8vIGhhdmUgYmVlbiBtYXJrZWQgYXMgcGF0Y2guCiAgICBhc3NlcnQoKG1lbWJlci5pc1NldHRlciAmJiBzY29wZS5zZXR0ZXJzW25hbWVdID09IG51bGwpIHx8CiAgICAgICAgKCFtZW1iZXIuaXNTZXR0ZXIgJiYgc2NvcGUubG9jYWxbbmFtZV0gPT0gbnVsbCkpOwogICAgYWRkVG9FeHBvcnRTY29wZShuYW1lLCBtZW1iZXIpOwogIH0KCiAgdm9pZCByZXBvcnRUeXBlQXJndW1lbnRJc3N1ZXMoCiAgICAgIExpc3Q8VHlwZUFyZ3VtZW50SXNzdWU+IGlzc3VlcywgVXJpIGZpbGVVcmksIGludCBvZmZzZXQsCiAgICAgIHtib29sIGluZmVycmVkLCBEYXJ0VHlwZSB0YXJnZXRSZWNlaXZlciwgU3RyaW5nIHRhcmdldE5hbWV9KSB7CiAgICBmb3IgKFR5cGVBcmd1bWVudElzc3VlIGlzc3VlIGluIGlzc3VlcykgewogICAgICBEYXJ0VHlwZSBhcmd1bWVudCA9IGlzc3VlLmFyZ3VtZW50OwogICAgICBUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgPSBpc3N1ZS50eXBlUGFyYW1ldGVyOwoKICAgICAgTWVzc2FnZSBtZXNzYWdlOwogICAgICBib29sIGlzc3VlSW5mZXJyZWQgPSBpbmZlcnJlZCA/PyBpbmZlcnJlZFR5cGVzLmNvbnRhaW5zKGFyZ3VtZW50KTsKICAgICAgaWYgKGFyZ3VtZW50IGlzIEZ1bmN0aW9uVHlwZSAmJiBhcmd1bWVudC50eXBlUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7CiAgICAgICAgaWYgKGlzc3VlSW5mZXJyZWQpIHsKICAgICAgICAgIG1lc3NhZ2UgPSB0ZW1wbGF0ZUdlbmVyaWNGdW5jdGlvblR5cGVJbmZlcnJlZEFzQWN0dWFsVHlwZUFyZ3VtZW50CiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoYXJndW1lbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZUdlbmVyaWNGdW5jdGlvblR5cGVVc2VkQXNBY3R1YWxUeXBlQXJndW1lbnQ7CiAgICAgICAgfQogICAgICAgIHR5cGVQYXJhbWV0ZXIgPSBudWxsOwogICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50IGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgICBhcmd1bWVudC5wcm9tb3RlZEJvdW5kICE9IG51bGwpIHsKICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZUludGVyc2VjdGlvblR5cGVBc1R5cGVBcmd1bWVudC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5uYW1lLCBhcmd1bWVudCwgYXJndW1lbnQucHJvbW90ZWRCb3VuZCksCiAgICAgICAgICAgIG9mZnNldCwKICAgICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICAgIGZpbGVVcmkpOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChpc3N1ZS5lbmNsb3NpbmdUeXBlID09IG51bGwgJiYgdGFyZ2V0UmVjZWl2ZXIgIT0gbnVsbCkgewogICAgICAgICAgaWYgKGlzc3VlSW5mZXJyZWQpIHsKICAgICAgICAgICAgbWVzc2FnZSA9CiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZEluZmVycmVkLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQsCiAgICAgICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5ib3VuZCwKICAgICAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UmVjZWl2ZXIsCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TmFtZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBtZXNzYWdlID0gdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWQud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgIGFyZ3VtZW50LAogICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5ib3VuZCwKICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIubmFtZSwKICAgICAgICAgICAgICAgIHRhcmdldFJlY2VpdmVyLAogICAgICAgICAgICAgICAgdGFyZ2V0TmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIFN0cmluZyBlbmNsb3NpbmdOYW1lID0gaXNzdWUuZW5jbG9zaW5nVHlwZSA9PSBudWxsCiAgICAgICAgICAgICAgPyB0YXJnZXROYW1lCiAgICAgICAgICAgICAgOiBnZXRHZW5lcmljVHlwZU5hbWUoaXNzdWUuZW5jbG9zaW5nVHlwZSk7CiAgICAgICAgICBhc3NlcnQoZW5jbG9zaW5nTmFtZSAhPSBudWxsKTsKICAgICAgICAgIGlmIChpc3N1ZUluZmVycmVkKSB7CiAgICAgICAgICAgIG1lc3NhZ2UgPSB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudEluZmVycmVkLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBhcmd1bWVudCwKICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIuYm91bmQsCiAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLm5hbWUsCiAgICAgICAgICAgICAgICBlbmNsb3NpbmdOYW1lKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1lc3NhZ2UgPSB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudC53aXRoQXJndW1lbnRzKGFyZ3VtZW50LAogICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5ib3VuZCwgdHlwZVBhcmFtZXRlci5uYW1lLCBlbmNsb3NpbmdOYW1lKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJlcG9ydFR5cGVBcmd1bWVudElzc3VlKG1lc3NhZ2UsIGZpbGVVcmksIG9mZnNldCwgdHlwZVBhcmFtZXRlcik7CiAgICB9CiAgfQoKICB2b2lkIHJlcG9ydFR5cGVBcmd1bWVudElzc3VlKE1lc3NhZ2UgbWVzc2FnZSwgVXJpIGZpbGVVcmksIGludCBmaWxlT2Zmc2V0LAogICAgICBUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIpIHsKICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQ7CiAgICBpZiAodHlwZVBhcmFtZXRlciAhPSBudWxsICYmIHR5cGVQYXJhbWV0ZXIuZmlsZU9mZnNldCAhPSAtMSkgewogICAgICAvLyBJdCBsb29rcyBsaWtlIHdoZW4gcGFyYW1ldGVycyBjb21lIGZyb20gcGF0Y2ggZmlsZXMsIHRoZXkgZG9uJ3QKICAgICAgLy8gaGF2ZSBhIHJlcG9ydGFibGUgbG9jYXRpb24uCiAgICAgIGNvbnRleHQgPSA8TG9jYXRlZE1lc3NhZ2U+WwogICAgICAgIG1lc3NhZ2VJbmNvcnJlY3RUeXBlQXJndW1lbnRWYXJpYWJsZS53aXRoTG9jYXRpb24oCiAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIubG9jYXRpb24uZmlsZSwgdHlwZVBhcmFtZXRlci5maWxlT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgXTsKICAgIH0KICAgIGFkZFByb2JsZW0obWVzc2FnZSwgZmlsZU9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmksIGNvbnRleHQ6IGNvbnRleHQpOwogIH0KCiAgdm9pZCBjaGVja0JvdW5kc0luRmllbGQoRmllbGQgZmllbGQsIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQpIHsKICAgIGlmIChsb2FkZXIudGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKICAgIGNoZWNrQm91bmRzSW5UeXBlKAogICAgICAgIGZpZWxkLnR5cGUsIHR5cGVFbnZpcm9ubWVudCwgZmllbGQuZmlsZVVyaSwgZmllbGQuZmlsZU9mZnNldCwKICAgICAgICBhbGxvd1N1cGVyQm91bmRlZDogdHJ1ZSk7CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5GdW5jdGlvbk5vZGVQYXJ0cygKICAgICAgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwgVXJpIGZpbGVVcmksIGludCBmaWxlT2Zmc2V0LAogICAgICB7TGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycywKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBwb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBuYW1lZFBhcmFtZXRlcnMsCiAgICAgIERhcnRUeXBlIHJldHVyblR5cGV9KSB7CiAgICBpZiAobG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBpZiAodHlwZVBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICBmb3IgKFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyIGluIHR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgY2hlY2tCb3VuZHNJblR5cGUoCiAgICAgICAgICAgIHBhcmFtZXRlci5ib3VuZCwgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpLCBwYXJhbWV0ZXIuZmlsZU9mZnNldCwKICAgICAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpOwogICAgICB9CiAgICB9CiAgICBpZiAocG9zaXRpb25hbFBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICBmb3IgKFZhcmlhYmxlRGVjbGFyYXRpb24gZm9ybWFsIGluIHBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgICAgY2hlY2tCb3VuZHNJblR5cGUoCiAgICAgICAgICAgIGZvcm1hbC50eXBlLCB0eXBlRW52aXJvbm1lbnQsIGZpbGVVcmksIGZvcm1hbC5maWxlT2Zmc2V0LAogICAgICAgICAgICBhbGxvd1N1cGVyQm91bmRlZDogdHJ1ZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChuYW1lZFBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICBmb3IgKFZhcmlhYmxlRGVjbGFyYXRpb24gbmFtZWQgaW4gbmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgICAgY2hlY2tCb3VuZHNJblR5cGUoCiAgICAgICAgICAgIG5hbWVkLnR5cGUsIHR5cGVFbnZpcm9ubWVudCwgZmlsZVVyaSwgbmFtZWQuZmlsZU9mZnNldCwKICAgICAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpOwogICAgICB9CiAgICB9CiAgICBpZiAocmV0dXJuVHlwZSAhPSBudWxsKSB7CiAgICAgIExpc3Q8VHlwZUFyZ3VtZW50SXNzdWU+IGlzc3VlcyA9IGZpbmRUeXBlQXJndW1lbnRJc3N1ZXMoCiAgICAgICAgICByZXR1cm5UeXBlLCB0eXBlRW52aXJvbm1lbnQsCiAgICAgICAgICBhbGxvd1N1cGVyQm91bmRlZDogdHJ1ZSk7CiAgICAgIGlmIChpc3N1ZXMgIT0gbnVsbCkgewogICAgICAgIGludCBvZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgICAgIGZvciAoVHlwZUFyZ3VtZW50SXNzdWUgaXNzdWUgaW4gaXNzdWVzKSB7CiAgICAgICAgICBEYXJ0VHlwZSBhcmd1bWVudCA9IGlzc3VlLmFyZ3VtZW50OwogICAgICAgICAgVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyID0gaXNzdWUudHlwZVBhcmFtZXRlcjsKCiAgICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNoZWNrIGlmIFthcmd1bWVudF0gd2FzIGluZmVycmVkIG9yIHNwZWNpZmllZAogICAgICAgICAgLy8gaGVyZSwgYmVjYXVzZSBpbmZlcmVuY2UgaW4gcmV0dXJuIHR5cGVzIGJvaWxzIGRvd24gdG8gaW5zdGFudGlhdGUtCiAgICAgICAgICAvLyAtdG8tYm91bmQsIGFuZCBpdCBjYW4ndCBwcm92aWRlIGEgdHlwZSB0aGF0IHZpb2xhdGVzIHRoZSBib3VuZC4KICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZTsKICAgICAgICAgIGlmIChhcmd1bWVudCBpcyBGdW5jdGlvblR5cGUgJiYgYXJndW1lbnQudHlwZVBhcmFtZXRlcnMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZUdlbmVyaWNGdW5jdGlvblR5cGVVc2VkQXNBY3R1YWxUeXBlQXJndW1lbnQ7CiAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIgPSBudWxsOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWVzc2FnZSA9IHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5SZXR1cm5UeXBlLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBhcmd1bWVudCwKICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIuYm91bmQsCiAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLm5hbWUsCiAgICAgICAgICAgICAgICBnZXRHZW5lcmljVHlwZU5hbWUoaXNzdWUuZW5jbG9zaW5nVHlwZSkpOwogICAgICAgICAgfQoKICAgICAgICAgIHJlcG9ydFR5cGVBcmd1bWVudElzc3VlKG1lc3NhZ2UsIGZpbGVVcmksIG9mZnNldCwgdHlwZVBhcmFtZXRlcik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5GdW5jdGlvbk5vZGUoCiAgICAgIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwgVXJpIGZpbGVVcmkpIHsKICAgIGlmIChsb2FkZXIudGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKICAgIGNoZWNrQm91bmRzSW5GdW5jdGlvbk5vZGVQYXJ0cygKICAgICAgICB0eXBlRW52aXJvbm1lbnQsIGZpbGVVcmksIGZ1bmN0aW9uLmZpbGVPZmZzZXQsCiAgICAgICAgdHlwZVBhcmFtZXRlcnM6IGZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzOiBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IGZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycywKICAgICAgICByZXR1cm5UeXBlOiBmdW5jdGlvbi5yZXR1cm5UeXBlKTsKICB9CgogIHZvaWQgY2hlY2tCb3VuZHNJbkxpc3RMaXRlcmFsKAogICAgICBMaXN0TGl0ZXJhbCBub2RlLCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LCBVcmkgZmlsZVVyaSwKICAgICAge2Jvb2wgaW5mZXJyZWQgPSBmYWxzZX0pIHsKICAgIGlmIChsb2FkZXIudGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKICAgIGNoZWNrQm91bmRzSW5UeXBlKAogICAgICAgIG5vZGUudHlwZUFyZ3VtZW50LCB0eXBlRW52aXJvbm1lbnQsIGZpbGVVcmksIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICBpbmZlcnJlZDogaW5mZXJyZWQsIGFsbG93U3VwZXJCb3VuZGVkOiB0cnVlKTsKICB9CgogIHZvaWQgY2hlY2tCb3VuZHNJblNldExpdGVyYWwoCiAgICAgIFNldExpdGVyYWwgbm9kZSwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwgVXJpIGZpbGVVcmksCiAgICAgIHtib29sIGluZmVycmVkID0gZmFsc2V9KSB7CiAgICBpZiAobG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBjaGVja0JvdW5kc0luVHlwZSgKICAgICAgICBub2RlLnR5cGVBcmd1bWVudCwgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpLCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgaW5mZXJyZWQ6IGluZmVycmVkLCBhbGxvd1N1cGVyQm91bmRlZDogdHJ1ZSk7CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5NYXBMaXRlcmFsKAogICAgICBNYXBMaXRlcmFsIG5vZGUsIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsIFVyaSBmaWxlVXJpLAogICAgICB7Ym9vbCBpbmZlcnJlZCA9IGZhbHNlfSkgewogICAgaWYgKGxvYWRlci50YXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwogICAgY2hlY2tCb3VuZHNJblR5cGUobm9kZS5rZXlUeXBlLCB0eXBlRW52aXJvbm1lbnQsIGZpbGVVcmksIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICBpbmZlcnJlZDogaW5mZXJyZWQsIGFsbG93U3VwZXJCb3VuZGVkOiB0cnVlKTsKICAgIGNoZWNrQm91bmRzSW5UeXBlKG5vZGUudmFsdWVUeXBlLCB0eXBlRW52aXJvbm1lbnQsIGZpbGVVcmksIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICBpbmZlcnJlZDogaW5mZXJyZWQsIGFsbG93U3VwZXJCb3VuZGVkOiB0cnVlKTsKICB9CgogIHZvaWQgY2hlY2tCb3VuZHNJblR5cGUoCiAgICAgIERhcnRUeXBlIHR5cGUsIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsIFVyaSBmaWxlVXJpLCBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCBpbmZlcnJlZCwgYm9vbCBhbGxvd1N1cGVyQm91bmRlZCA9IHRydWV9KSB7CiAgICBpZiAobG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiBpc3N1ZXMgPSBmaW5kVHlwZUFyZ3VtZW50SXNzdWVzKAogICAgICAgIHR5cGUsIHR5cGVFbnZpcm9ubWVudCwKICAgICAgICBhbGxvd1N1cGVyQm91bmRlZDogYWxsb3dTdXBlckJvdW5kZWQpOwogICAgaWYgKGlzc3VlcyAhPSBudWxsKSB7CiAgICAgIHJlcG9ydFR5cGVBcmd1bWVudElzc3Vlcyhpc3N1ZXMsIGZpbGVVcmksIG9mZnNldCwgaW5mZXJyZWQ6IGluZmVycmVkKTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tCb3VuZHNJblZhcmlhYmxlRGVjbGFyYXRpb24oCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwgVXJpIGZpbGVVcmksCiAgICAgIHtib29sIGluZmVycmVkID0gZmFsc2V9KSB7CiAgICBpZiAobG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBpZiAobm9kZS50eXBlID09IG51bGwpIHJldHVybjsKICAgIGNoZWNrQm91bmRzSW5UeXBlKG5vZGUudHlwZSwgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpLCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgaW5mZXJyZWQ6IGluZmVycmVkLCBhbGxvd1N1cGVyQm91bmRlZDogdHJ1ZSk7CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5Db25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgIENvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlLCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LCBVcmkgZmlsZVVyaSwKICAgICAge2Jvb2wgaW5mZXJyZWQgPSBmYWxzZX0pIHsKICAgIGlmIChsb2FkZXIudGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKICAgIGlmIChub2RlLmFyZ3VtZW50cy50eXBlcy5pc0VtcHR5KSByZXR1cm47CiAgICBDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IG5vZGUudGFyZ2V0OwogICAgQ2xhc3Mga2xhc3MgPSBjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzczsKICAgIERhcnRUeXBlIGNvbnN0cnVjdGVkVHlwZSA9IG5ldyBJbnRlcmZhY2VUeXBlKGtsYXNzLCBub2RlLmFyZ3VtZW50cy50eXBlcyk7CiAgICBjaGVja0JvdW5kc0luVHlwZSgKICAgICAgICBjb25zdHJ1Y3RlZFR5cGUsIHR5cGVFbnZpcm9ubWVudCwgZmlsZVVyaSwgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgIGluZmVycmVkOiBpbmZlcnJlZCwgYWxsb3dTdXBlckJvdW5kZWQ6IGZhbHNlKTsKICB9CgogIHZvaWQgY2hlY2tCb3VuZHNJbkZhY3RvcnlJbnZvY2F0aW9uKAogICAgICBTdGF0aWNJbnZvY2F0aW9uIG5vZGUsIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsIFVyaSBmaWxlVXJpLAogICAgICB7Ym9vbCBpbmZlcnJlZCA9IGZhbHNlfSkgewogICAgaWYgKGxvYWRlci50YXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwogICAgaWYgKG5vZGUuYXJndW1lbnRzLnR5cGVzLmlzRW1wdHkpIHJldHVybjsKICAgIFByb2NlZHVyZSBmYWN0b3J5ID0gbm9kZS50YXJnZXQ7CiAgICBhc3NlcnQoZmFjdG9yeS5pc0ZhY3RvcnkpOwogICAgQ2xhc3Mga2xhc3MgPSBmYWN0b3J5LmVuY2xvc2luZ0NsYXNzOwogICAgRGFydFR5cGUgY29uc3RydWN0ZWRUeXBlID0gbmV3IEludGVyZmFjZVR5cGUoa2xhc3MsIG5vZGUuYXJndW1lbnRzLnR5cGVzKTsKICAgIGNoZWNrQm91bmRzSW5UeXBlKAogICAgICAgIGNvbnN0cnVjdGVkVHlwZSwgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpLCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgaW5mZXJyZWQ6IGluZmVycmVkLCBhbGxvd1N1cGVyQm91bmRlZDogZmFsc2UpOwogIH0KCiAgdm9pZCBjaGVja0JvdW5kc0luU3RhdGljSW52b2NhdGlvbigKICAgICAgU3RhdGljSW52b2NhdGlvbiBub2RlLCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LCBVcmkgZmlsZVVyaSwKICAgICAge2Jvb2wgaW5mZXJyZWQgPSBmYWxzZX0pIHsKICAgIGlmIChsb2FkZXIudGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKICAgIGlmIChub2RlLmFyZ3VtZW50cy50eXBlcy5pc0VtcHR5KSByZXR1cm47CiAgICBDbGFzcyBrbGFzcyA9IG5vZGUudGFyZ2V0LmVuY2xvc2luZ0NsYXNzOwogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBwYXJhbWV0ZXJzID0gbm9kZS50YXJnZXQuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnM7CiAgICBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMgPSBub2RlLmFyZ3VtZW50cy50eXBlczsKICAgIC8vIFRoZSBmb2xsb3dpbmcgZXJyb3IgaXMgdG8gYmUgcmVwb3J0ZWQgZWxzZXdoZXJlLgogICAgaWYgKHBhcmFtZXRlcnMubGVuZ3RoICE9IGFyZ3VtZW50cy5sZW5ndGgpIHJldHVybjsKICAgIExpc3Q8VHlwZUFyZ3VtZW50SXNzdWU+IGlzc3VlcyA9IGZpbmRUeXBlQXJndW1lbnRJc3N1ZXNGb3JJbnZvY2F0aW9uKAogICAgICAgIHBhcmFtZXRlcnMsIGFyZ3VtZW50cywgdHlwZUVudmlyb25tZW50KTsKICAgIGlmIChpc3N1ZXMgIT0gbnVsbCkgewogICAgICBEYXJ0VHlwZSB0YXJnZXRSZWNlaXZlcjsKICAgICAgaWYgKGtsYXNzICE9IG51bGwpIHsKICAgICAgICB0YXJnZXRSZWNlaXZlciA9IG5ldyBJbnRlcmZhY2VUeXBlKGtsYXNzKTsKICAgICAgfQogICAgICBTdHJpbmcgdGFyZ2V0TmFtZSA9IG5vZGUudGFyZ2V0Lm5hbWUubmFtZTsKICAgICAgcmVwb3J0VHlwZUFyZ3VtZW50SXNzdWVzKGlzc3VlcywgZmlsZVVyaSwgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgICAgaW5mZXJyZWQ6IGluZmVycmVkLAogICAgICAgICAgdGFyZ2V0UmVjZWl2ZXI6IHRhcmdldFJlY2VpdmVyLAogICAgICAgICAgdGFyZ2V0TmFtZTogdGFyZ2V0TmFtZSk7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrQm91bmRzSW5NZXRob2RJbnZvY2F0aW9uKAogICAgICBEYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsCiAgICAgIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSwKICAgICAgVHlwZUluZmVycmVySW1wbCB0eXBlSW5mZXJyZXIsCiAgICAgIE5hbWUgbmFtZSwKICAgICAgTWVtYmVyIGludGVyZmFjZVRhcmdldCwKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAgVXJpIGZpbGVVcmksCiAgICAgIGludCBvZmZzZXQsCiAgICAgIHtib29sIGluZmVycmVkID0gZmFsc2V9KSB7CiAgICBpZiAobG9hZGVyLnRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBpZiAoYXJndW1lbnRzLnR5cGVzLmlzRW1wdHkpIHJldHVybjsKICAgIENsYXNzIGtsYXNzOwogICAgTGlzdDxEYXJ0VHlwZT4gcmVjZWl2ZXJUeXBlQXJndW1lbnRzOwogICAgaWYgKHJlY2VpdmVyVHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIGtsYXNzID0gcmVjZWl2ZXJUeXBlLmNsYXNzTm9kZTsKICAgICAgcmVjZWl2ZXJUeXBlQXJndW1lbnRzID0gcmVjZWl2ZXJUeXBlLnR5cGVBcmd1bWVudHM7CiAgICB9IGVsc2UgewogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBUT0RPKGRtaXRyeWFzKTogRmluZCBhIGJldHRlciB3YXkgdGhhbiByZWx5aW5nIG9uIFtpbnRlcmZhY2VUYXJnZXRdLgogICAgTWVtYmVyIG1ldGhvZCA9IGhpZXJhcmNoeS5nZXREaXNwYXRjaFRhcmdldChrbGFzcywgbmFtZSkgPz8gaW50ZXJmYWNlVGFyZ2V0OwogICAgaWYgKG1ldGhvZCA9PSBudWxsIHx8IG1ldGhvZCBpcyEgUHJvY2VkdXJlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChrbGFzcyAhPSBtZXRob2QuZW5jbG9zaW5nQ2xhc3MpIHsKICAgICAgU3VwZXJ0eXBlIHBhcmVudCA9CiAgICAgICAgICBoaWVyYXJjaHkuZ2V0Q2xhc3NBc0luc3RhbmNlT2Yoa2xhc3MsIG1ldGhvZC5lbmNsb3NpbmdDbGFzcyk7CiAgICAgIGtsYXNzID0gbWV0aG9kLmVuY2xvc2luZ0NsYXNzOwogICAgICByZWNlaXZlclR5cGVBcmd1bWVudHMgPSBwYXJlbnQudHlwZUFyZ3VtZW50czsKICAgIH0KICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uTWFwID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWNlaXZlclR5cGVBcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgc3Vic3RpdHV0aW9uTWFwW2tsYXNzLnR5cGVQYXJhbWV0ZXJzW2ldXSA9IHJlY2VpdmVyVHlwZUFyZ3VtZW50c1tpXTsKICAgIH0KICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gbWV0aG9kUGFyYW1ldGVycyA9IG1ldGhvZC5mdW5jdGlvbi50eXBlUGFyYW1ldGVyczsKICAgIC8vIFRoZSBlcnJvciBpcyB0byBiZSByZXBvcnRlZCBlbHNld2hlcmUuCiAgICBpZiAobWV0aG9kUGFyYW1ldGVycy5sZW5ndGggIT0gYXJndW1lbnRzLnR5cGVzLmxlbmd0aCkgcmV0dXJuOwogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBpbnN0YW50aWF0ZWRNZXRob2RQYXJhbWV0ZXJzID0KICAgICAgICBuZXcgTGlzdDxUeXBlUGFyYW1ldGVyPi5maWxsZWQobWV0aG9kUGFyYW1ldGVycy5sZW5ndGgsIG51bGwpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnN0YW50aWF0ZWRNZXRob2RQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgIGluc3RhbnRpYXRlZE1ldGhvZFBhcmFtZXRlcnNbaV0gPQogICAgICAgICAgbmV3IFR5cGVQYXJhbWV0ZXIobWV0aG9kUGFyYW1ldGVyc1tpXS5uYW1lKTsKICAgICAgc3Vic3RpdHV0aW9uTWFwW21ldGhvZFBhcmFtZXRlcnNbaV1dID0KICAgICAgICAgIG5ldyBUeXBlUGFyYW1ldGVyVHlwZShpbnN0YW50aWF0ZWRNZXRob2RQYXJhbWV0ZXJzW2ldKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5zdGFudGlhdGVkTWV0aG9kUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICBpbnN0YW50aWF0ZWRNZXRob2RQYXJhbWV0ZXJzW2ldLmJvdW5kID0KICAgICAgICAgIHN1YnN0aXR1dGUobWV0aG9kUGFyYW1ldGVyc1tpXS5ib3VuZCwgc3Vic3RpdHV0aW9uTWFwKTsKICAgIH0KICAgIExpc3Q8VHlwZUFyZ3VtZW50SXNzdWU+IGlzc3VlcyA9IGZpbmRUeXBlQXJndW1lbnRJc3N1ZXNGb3JJbnZvY2F0aW9uKAogICAgICAgIGluc3RhbnRpYXRlZE1ldGhvZFBhcmFtZXRlcnMsIGFyZ3VtZW50cy50eXBlcywgdHlwZUVudmlyb25tZW50KTsKICAgIGlmIChpc3N1ZXMgIT0gbnVsbCkgewogICAgICByZXBvcnRUeXBlQXJndW1lbnRJc3N1ZXMoaXNzdWVzLCBmaWxlVXJpLCBvZmZzZXQsCiAgICAgICAgICBpbmZlcnJlZDogaW5mZXJyZWQsCiAgICAgICAgICB0YXJnZXRSZWNlaXZlcjogcmVjZWl2ZXJUeXBlLAogICAgICAgICAgdGFyZ2V0TmFtZTogbmFtZS5uYW1lKTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tCb3VuZHNJbk91dGxpbmUoVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCkgewogICAgaWYgKGxvYWRlci50YXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwogICAgSXRlcmF0b3I8RGVjbGFyYXRpb24+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gaXRlcmF0b3IuY3VycmVudDsKICAgICAgaWYgKGRlY2xhcmF0aW9uIGlzIEZpZWxkQnVpbGRlcikgewogICAgICAgIGNoZWNrQm91bmRzSW5GaWVsZChkZWNsYXJhdGlvbi50YXJnZXQsIHR5cGVFbnZpcm9ubWVudCk7CiAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgUHJvY2VkdXJlQnVpbGRlcikgewogICAgICAgIGNoZWNrQm91bmRzSW5GdW5jdGlvbk5vZGUoCiAgICAgICAgICAgIGRlY2xhcmF0aW9uLnRhcmdldC5mdW5jdGlvbiwgdHlwZUVudmlyb25tZW50LCBkZWNsYXJhdGlvbi5maWxlVXJpKTsKICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgICBkZWNsYXJhdGlvbi5jaGVja0JvdW5kc0luT3V0bGluZSh0eXBlRW52aXJvbm1lbnQpOwogICAgICB9CiAgICB9CiAgICBpbmZlcnJlZFR5cGVzLmNsZWFyKCk7CiAgfQoKICBpbnQgZmluYWxpemVJbml0aWFsaXppbmdGb3JtYWxzKCkgewogICAgaWYgKCFsZWdhY3lNb2RlIHx8IHVudHlwZWRJbml0aWFsaXppbmdGb3JtYWxzID09IG51bGwpIHJldHVybiAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1bnR5cGVkSW5pdGlhbGl6aW5nRm9ybWFscy5sZW5ndGg7IGkrKykgewogICAgICB1bnR5cGVkSW5pdGlhbGl6aW5nRm9ybWFsc1tpXS5maW5hbGl6ZUluaXRpYWxpemluZ0Zvcm1hbCgpOwogICAgfQogICAgaW50IGNvdW50ID0gdW50eXBlZEluaXRpYWxpemluZ0Zvcm1hbHMubGVuZ3RoOwogICAgdW50eXBlZEluaXRpYWxpemluZ0Zvcm1hbHMgPSBudWxsOwogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxGaWVsZEJ1aWxkZXI+IHRha2VJbXBsaWNpdGx5VHlwZWRGaWVsZHMoKSB7CiAgICBMaXN0PEZpZWxkQnVpbGRlcj4gcmVzdWx0ID0gaW1wbGljaXRseVR5cGVkRmllbGRzOwogICAgaW1wbGljaXRseVR5cGVkRmllbGRzID0gbnVsbDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgplbnVtIERlY2xhcmF0aW9uS2luZCB7CiAgbGlicmFyeSwKICBjbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uLAogIGNsYXNzRGVjbGFyYXRpb24sCiAgbWl4aW5EZWNsYXJhdGlvbiwKICB1bm5hbWVkTWl4aW5BcHBsaWNhdGlvbiwKICBuYW1lZE1peGluQXBwbGljYXRpb24sCiAgZXh0ZW5zaW9uRGVjbGFyYXRpb24sCiAgdHlwZWRlZiwKICBzdGF0aWNPckluc3RhbmNlTWV0aG9kT3JDb25zdHJ1Y3RvciwKICB0b3BMZXZlbE1ldGhvZCwKICBmYWN0b3J5TWV0aG9kLAogIGZ1bmN0aW9uVHlwZSwKfQoKLy8vIFVubGlrZSBbU2NvcGVdLCB0aGlzIHNjb3BlIGlzIHVzZWQgZHVyaW5nIGNvbnN0cnVjdGlvbiBvZiBidWlsZGVycyB0bwovLy8gZW5zdXJlIHR5cGVzIGFuZCBtZW1iZXJzIGFyZSBhZGRlZCB0byBhbmQgcmVzb2x2ZWQgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uCmNsYXNzIERlY2xhcmF0aW9uQnVpbGRlciB7CiAgRGVjbGFyYXRpb25LaW5kIF9raW5kOwoKICBmaW5hbCBEZWNsYXJhdGlvbkJ1aWxkZXIgcGFyZW50OwoKICBmaW5hbCBNYXA8U3RyaW5nLCBEZWNsYXJhdGlvbj4gbWVtYmVyczsKCiAgZmluYWwgTWFwPFN0cmluZywgRGVjbGFyYXRpb24+IGNvbnN0cnVjdG9yczsKCiAgZmluYWwgTWFwPFN0cmluZywgRGVjbGFyYXRpb24+IHNldHRlcnM7CgogIGZpbmFsIExpc3Q8VW5yZXNvbHZlZFR5cGU+IHR5cGVzID0gPFVucmVzb2x2ZWRUeXBlPltdOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdG9wIHVzaW5nIFtfbmFtZV0gZm9yIGRldGVybWluaW5nIHRoZSBkZWNsYXJhdGlvbgogIC8vIGtpbmQuCiAgU3RyaW5nIF9uYW1lOwoKICAvLy8gT2Zmc2V0IG9mIG5hbWUgdG9rZW4sIHVwZGF0ZWQgYnkgdGhlIG91dGxpbmUgYnVpbGRlciBhbG9uZwogIC8vLyB3aXRoIHRoZSBuYW1lIGFzIHRoZSBjdXJyZW50IGRlY2xhcmF0aW9uIGNoYW5nZXMuCiAgaW50IF9jaGFyT2Zmc2V0OwoKICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IF90eXBlVmFyaWFibGVzOwoKICAvLy8gVGhlIHR5cGUgb2YgYHRoaXNgIGluIGluc3RhbmNlIG1ldGhvZHMgZGVjbGFyZWQgaW4gZXh0ZW5zaW9uIGRlY2xhcmF0aW9ucy4KICAvLy8KICAvLy8gSW5zdGFuY2UgbWV0aG9kcyBkZWNsYXJlZCBpbiBleHRlbnNpb24gZGVjbGFyYXRpb25zIG1ldGhvZHMgYXJlIGV4dGVuZGVkCiAgLy8vIHdpdGggYSBzeW50aGVzaXplZCBwYXJhbWV0ZXIgb2YgdGhpcyB0eXBlLgogIFR5cGVCdWlsZGVyIF9leHRlbnNpb25UaGlzVHlwZTsKCiAgYm9vbCBoYXNDb25zdENvbnN0cnVjdG9yID0gZmFsc2U7CgogIERlY2xhcmF0aW9uQnVpbGRlcih0aGlzLl9raW5kLCB0aGlzLm1lbWJlcnMsIHRoaXMuc2V0dGVycywgdGhpcy5jb25zdHJ1Y3RvcnMsCiAgICAgIHRoaXMuX25hbWUsIHRoaXMuX2NoYXJPZmZzZXQsIHRoaXMucGFyZW50KSB7CiAgICBhc3NlcnQoX25hbWUgIT0gbnVsbCk7CiAgfQoKICBEZWNsYXJhdGlvbkJ1aWxkZXIubGlicmFyeSgpCiAgICAgIDogdGhpcyhEZWNsYXJhdGlvbktpbmQubGlicmFyeSwgPFN0cmluZywgRGVjbGFyYXRpb24+e30sCiAgICAgICAgICAgIDxTdHJpbmcsIERlY2xhcmF0aW9uPnt9LCBudWxsLCAiPGxpYnJhcnk+IiwgLTEsIG51bGwpOwoKICBEZWNsYXJhdGlvbkJ1aWxkZXIgY3JlYXRlTmVzdGVkKAogICAgICBEZWNsYXJhdGlvbktpbmQga2luZCwgU3RyaW5nIG5hbWUsIGJvb2wgaGFzTWVtYmVycykgewogICAgcmV0dXJuIG5ldyBEZWNsYXJhdGlvbkJ1aWxkZXIoCiAgICAgICAga2luZCwKICAgICAgICBoYXNNZW1iZXJzID8gPFN0cmluZywgTWVtYmVyQnVpbGRlcj57fSA6IG51bGwsCiAgICAgICAgaGFzTWVtYmVycyA/IDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+e30gOiBudWxsLAogICAgICAgIGhhc01lbWJlcnMgPyA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPnt9IDogbnVsbCwKICAgICAgICBuYW1lLAogICAgICAgIC0xLAogICAgICAgIHRoaXMpOwogIH0KCiAgLy8vIFJlZ2lzdGVycyB0aGUgdGhpcyBkZWNsYXJhdGlvbiBhcyBhIGNsYXNzIGRlY2xhcmF0aW9uIHdpdGggdGhlIGdpdmVuCiAgLy8vIFtuYW1lXSBhbmQgW3R5cGVWYXJpYWJsZXNdIGxvY2F0ZWQgW2NoYXJPZmZzZXRdLgogIHZvaWQgcmVnaXN0ZXJDbGFzc0RlY2xhcmF0aW9uKAogICAgICBTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQsIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcykgewogICAgYXNzZXJ0KF9raW5kID09IERlY2xhcmF0aW9uS2luZC5jbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uLAogICAgICAgICJVbmV4cGVjdGVkIGRlY2xhcmF0aW9uIGtpbmQ6ICRfa2luZCIpOwogICAgX2tpbmQgPSBEZWNsYXJhdGlvbktpbmQuY2xhc3NEZWNsYXJhdGlvbjsKICAgIF9uYW1lID0gbmFtZTsKICAgIF9jaGFyT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgIF90eXBlVmFyaWFibGVzID0gdHlwZVZhcmlhYmxlczsKICB9CgogIC8vLyBSZWdpc3RlcnMgdGhlIHRoaXMgZGVjbGFyYXRpb24gYXMgYSBuYW1lZCBtaXhpbiBhcHBsaWNhdGlvbiB3aXRoIHRoZSBnaXZlbgogIC8vLyBbbmFtZV0gYW5kIFt0eXBlVmFyaWFibGVzXSBsb2NhdGVkIFtjaGFyT2Zmc2V0XS4KICB2b2lkIHJlZ2lzdGVyTmFtZWRNaXhpbkFwcGxpY2F0aW9uKAogICAgICBTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQsIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcykgewogICAgYXNzZXJ0KF9raW5kID09IERlY2xhcmF0aW9uS2luZC5jbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uLAogICAgICAgICJVbmV4cGVjdGVkIGRlY2xhcmF0aW9uIGtpbmQ6ICRfa2luZCIpOwogICAgX2tpbmQgPSBEZWNsYXJhdGlvbktpbmQubmFtZWRNaXhpbkFwcGxpY2F0aW9uOwogICAgX25hbWUgPSBuYW1lOwogICAgX2NoYXJPZmZzZXQgPSBjaGFyT2Zmc2V0OwogICAgX3R5cGVWYXJpYWJsZXMgPSB0eXBlVmFyaWFibGVzOwogIH0KCiAgLy8vIFJlZ2lzdGVycyB0aGUgdGhpcyBkZWNsYXJhdGlvbiBhcyBhIG1peGluIGRlY2xhcmF0aW9uIHdpdGggdGhlIGdpdmVuCiAgLy8vIFtuYW1lXSBhbmQgW3R5cGVWYXJpYWJsZXNdIGxvY2F0ZWQgW2NoYXJPZmZzZXRdLgogIHZvaWQgcmVnaXN0ZXJNaXhpbkRlY2xhcmF0aW9uKAogICAgICBTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQsIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcykgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdXNpbmcgJ2NsYXNzT3JOYW1lZE1peGluQXBwbGljYXRpb24nIGZvciBtaXhpbgogICAgLy8gZGVjbGFyYXRpb24uIFRoZXNlIGFyZSBzeW50YWN0aWNhbGx5IGRpc3RpbmN0IHNvIHdlIGRvbid0IG5lZWQgdGhlCiAgICAvLyB0cmFuc2l0aW9uLgogICAgYXNzZXJ0KF9raW5kID09IERlY2xhcmF0aW9uS2luZC5jbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uLAogICAgICAgICJVbmV4cGVjdGVkIGRlY2xhcmF0aW9uIGtpbmQ6ICRfa2luZCIpOwogICAgX2tpbmQgPSBEZWNsYXJhdGlvbktpbmQubWl4aW5EZWNsYXJhdGlvbjsKICAgIF9uYW1lID0gbmFtZTsKICAgIF9jaGFyT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgIF90eXBlVmFyaWFibGVzID0gdHlwZVZhcmlhYmxlczsKICB9CgogIC8vLyBSZWdpc3RlcnMgdGhlIHRoaXMgZGVjbGFyYXRpb24gYXMgYW4gZXh0ZW5zaW9uIGRlY2xhcmF0aW9uIHdpdGggdGhlIGdpdmVuCiAgLy8vIFtuYW1lXSBhbmQgW3R5cGVWYXJpYWJsZXNdIGxvY2F0ZWQgW2NoYXJPZmZzZXRdLgogIHZvaWQgcmVnaXN0ZXJFeHRlbnNpb25EZWNsYXJhdGlvbigKICAgICAgU3RyaW5nIG5hbWUsIGludCBjaGFyT2Zmc2V0LCBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMpIHsKICAgIGFzc2VydChfa2luZCA9PSBEZWNsYXJhdGlvbktpbmQuZXh0ZW5zaW9uRGVjbGFyYXRpb24sCiAgICAgICAgIlVuZXhwZWN0ZWQgZGVjbGFyYXRpb24ga2luZDogJF9raW5kIik7CiAgICBfbmFtZSA9IG5hbWU7CiAgICBfY2hhck9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgICBfdHlwZVZhcmlhYmxlcyA9IHR5cGVWYXJpYWJsZXM7CiAgfQoKICAvLy8gUmVnaXN0ZXJzIHRoZSAnZXh0ZW5zaW9uIHRoaXMgdHlwZScgb2YgdGhpcyBleHRlbnNpb24gZGVjbGFyYXRpb24uCiAgLy8vCiAgLy8vIFNlZSBbZXh0ZW5zaW9uVGhpc1R5cGVdIGZvciB0ZXJtaW5vbG9neS4KICB2b2lkIHJlZ2lzdGVyRXh0ZW5zaW9uVGhpc1R5cGUoVHlwZUJ1aWxkZXIgdHlwZSkgewogICAgYXNzZXJ0KF9raW5kID09IERlY2xhcmF0aW9uS2luZC5leHRlbnNpb25EZWNsYXJhdGlvbiwKICAgICAgICAiRGVjbGFyYXRpb25CdWlsZGVyLnJlZ2lzdGVyRXh0ZW5zaW9uVGhpc1R5cGUgaXMgbm90IHN1cHBvcnRlZCAkX2tpbmQiKTsKICAgIGFzc2VydChfZXh0ZW5zaW9uVGhpc1R5cGUgPT0gbnVsbCwKICAgICAgICAiRXh0ZW5zaW9uIHRoaXMgdHlwZSBoYXMgYWxyZWFkeSBiZWVuIHNldC4iKTsKICAgIF9leHRlbnNpb25UaGlzVHlwZSA9IHR5cGU7CiAgfQoKICAvLy8gUmV0dXJucyB3aGF0IGtpbmQgb2YgZGVjbGFyYXRpb24gdGhpcyBbRGVjbGFyYXRpb25CdWlsZGVyXSBpcyBjcmVhdGluZy4KICAvLy8KICAvLy8gVGhpcyBpbmZvcm1hdGlvbiBpcyB0cmFuc2llbnQgZm9yIHNvbWUgZGVjbGFyYXRpb25zLiBJbiBwYXJ0aWN1bGFyCiAgLy8vIGNsYXNzZXMgYW5kIG5hbWVkIG1peGluIGFwcGxpY2F0aW9ucyBhcmUgaW5pdGlhbGx5IGNyZWF0ZWQgd2l0aCB0aGUga2luZAogIC8vLyBbRGVjbGFyYXRpb25LaW5kLmNsYXNzT3JOYW1lZE1peGluQXBwbGljYXRpb25dIGJlZm9yZSBhIGNhbGwgdG8gZWl0aGVyCiAgLy8vIFtyZWdpc3RlckNsYXNzRGVjbGFyYXRpb25dIG9yIFtyZWdpc3Rlck5hbWVkTWl4aW5BcHBsaWNhdGlvbl0gc2V0cyB0aGUKICAvLy8gdmFsdWUgdG8gaXRzIGFjdHVhbCBraW5kLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoZSB0cmFuc2l0aW9uIGN1cnJlbnRseSB1c2VkIG9uIG1peGluCiAgLy8gZGVjbGFyYXRpb25zLgogIERlY2xhcmF0aW9uS2luZCBnZXQga2luZCA9PiBfa2luZDsKCiAgU3RyaW5nIGdldCBuYW1lID0+IF9uYW1lOwoKICBpbnQgZ2V0IGNoYXJPZmZzZXQgPT4gX2NoYXJPZmZzZXQ7CgogIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gZ2V0IHR5cGVWYXJpYWJsZXMgPT4gX3R5cGVWYXJpYWJsZXM7CgogIC8vLyBSZXR1cm5zIHRoZSAnZXh0ZW5zaW9uIHRoaXMgdHlwZScgb2YgdGhpcyBleHRlbnNpb24gZGVjbGFyYXRpb24uCiAgLy8vCiAgLy8vIFRoZSAnZXh0ZW5zaW9uIHRoaXMgdHlwZScgaXMgdGhlIHR5cGUgbWVudGlvbmVkIGluIHRoZSBvbi1jbGF1c2Ugb2YgdGhlCiAgLy8vIGV4dGVuc2lvbiBkZWNsYXJhdGlvbi4gRm9yIGluc3RhbmNlIGBCYCBpbiB0aGlzIGV4dGVuc2lvbiBkZWNsYXJhdGlvbjoKICAvLy8KICAvLy8gICAgIGV4dGVuc2lvbiBBIG9uIEIgewogIC8vLyAgICAgICBCIG1ldGhvZCgpID0+IHRoaXM7CiAgLy8vICAgICB9CiAgLy8vCiAgLy8vIFRoZSAnZXh0ZW5zaW9uIHRoaXMgdHlwZScgaXMgdGhlIHR5cGUgaWYgYHRoaXNgIGV4cHJlc3Npb24gaW4gaW5zdGFuY2UKICAvLy8gbWV0aG9kcyBkZWNsYXJlZCBpbiBleHRlbnNpb24gZGVjbGFyYXRpb25zLgogIFR5cGVCdWlsZGVyIGdldCBleHRlbnNpb25UaGlzVHlwZSB7CiAgICBhc3NlcnQoa2luZCA9PSBEZWNsYXJhdGlvbktpbmQuZXh0ZW5zaW9uRGVjbGFyYXRpb24sCiAgICAgICAgIkRlY2xhcmF0aW9uQnVpbGRlci5leHRlbnNpb25UaGlzVHlwZSBub3Qgc3VwcG9ydGVkIG9uICRraW5kLiIpOwogICAgYXNzZXJ0KF9leHRlbnNpb25UaGlzVHlwZSAhPSBudWxsLAogICAgICAgICJEZWNsYXJhdGlvbkJ1aWxkZXIuZXh0ZW5zaW9uVGhpc1R5cGUgaGFzIG5vdCBiZWVuIHNldCBvbiAkdGhpcy4iKTsKICAgIHJldHVybiBfZXh0ZW5zaW9uVGhpc1R5cGU7CiAgfQoKICB2b2lkIGFkZFR5cGUoVW5yZXNvbHZlZFR5cGUgdHlwZSkgewogICAgdHlwZXMuYWRkKHR5cGUpOwogIH0KCiAgLy8vIFJlc29sdmVzIHR5cGUgdmFyaWFibGVzIGluIFt0eXBlc10gYW5kIHByb3BhZ2F0ZSBvdGhlciB0eXBlcyB0byBbcGFyZW50XS4KICB2b2lkIHJlc29sdmVUeXBlcygKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICBNYXA8U3RyaW5nLCBUeXBlVmFyaWFibGVCdWlsZGVyPiBtYXA7CiAgICBpZiAodHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIG1hcCA9IDxTdHJpbmcsIFR5cGVWYXJpYWJsZUJ1aWxkZXI+e307CiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciBidWlsZGVyIGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgICBtYXBbYnVpbGRlci5uYW1lXSA9IGJ1aWxkZXI7CiAgICAgIH0KICAgIH0KICAgIFNjb3BlIHNjb3BlOwogICAgZm9yIChVbnJlc29sdmVkVHlwZSB0eXBlIGluIHR5cGVzKSB7CiAgICAgIE9iamVjdCBuYW1lT3JRdWFsaWZpZWQgPSB0eXBlLmJ1aWxkZXIubmFtZTsKICAgICAgU3RyaW5nIG5hbWUgPSBuYW1lT3JRdWFsaWZpZWQgaXMgUXVhbGlmaWVkTmFtZQogICAgICAgICAgPyBuYW1lT3JRdWFsaWZpZWQucXVhbGlmaWVyCiAgICAgICAgICA6IG5hbWVPclF1YWxpZmllZDsKICAgICAgRGVjbGFyYXRpb24gZGVjbGFyYXRpb247CiAgICAgIGlmIChuYW1lICE9IG51bGwpIHsKICAgICAgICBpZiAobWVtYmVycyAhPSBudWxsKSB7CiAgICAgICAgICBkZWNsYXJhdGlvbiA9IG1lbWJlcnNbbmFtZV07CiAgICAgICAgfQogICAgICAgIGlmIChkZWNsYXJhdGlvbiA9PSBudWxsICYmIG1hcCAhPSBudWxsKSB7CiAgICAgICAgICBkZWNsYXJhdGlvbiA9IG1hcFtuYW1lXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGRlY2xhcmF0aW9uID09IG51bGwpIHsKICAgICAgICAvLyBTaW5jZSBuYW1lIGRpZG4ndCByZXNvbHZlIGluIHRoaXMgc2NvcGUsIHByb3BhZ2F0ZSBpdCB0byB0aGUKICAgICAgICAvLyBwYXJlbnQgZGVjbGFyYXRpb24uCiAgICAgICAgcGFyZW50LmFkZFR5cGUodHlwZSk7CiAgICAgIH0gZWxzZSBpZiAobmFtZU9yUXVhbGlmaWVkIGlzIFF1YWxpZmllZE5hbWUpIHsKICAgICAgICAvLyBBdHRlbXB0IHRvIHVzZSBhIG1lbWJlciBvciB0eXBlIHZhcmlhYmxlIGFzIGEgcHJlZml4LgogICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHRlbXBsYXRlTm90QVByZWZpeEluVHlwZUFubm90YXRpb24ud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgZmxhdHRlbk5hbWUoCiAgICAgICAgICAgICAgICBuYW1lT3JRdWFsaWZpZWQucXVhbGlmaWVyLCB0eXBlLmNoYXJPZmZzZXQsIHR5cGUuZmlsZVVyaSksCiAgICAgICAgICAgIG5hbWVPclF1YWxpZmllZC5uYW1lKTsKICAgICAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZSwgdHlwZS5jaGFyT2Zmc2V0LAogICAgICAgICAgICBuYW1lT3JRdWFsaWZpZWQuZW5kQ2hhck9mZnNldCAtIHR5cGUuY2hhck9mZnNldCwgdHlwZS5maWxlVXJpKTsKICAgICAgICB0eXBlLmJ1aWxkZXIuYmluZCh0eXBlLmJ1aWxkZXIuYnVpbGRJbnZhbGlkVHlwZShtZXNzYWdlLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgdHlwZS5maWxlVXJpLAogICAgICAgICAgICB0eXBlLmNoYXJPZmZzZXQsCiAgICAgICAgICAgIG5hbWVPclF1YWxpZmllZC5lbmRDaGFyT2Zmc2V0IC0gdHlwZS5jaGFyT2Zmc2V0KSkpOwogICAgICB9IGVsc2UgewogICAgICAgIHNjb3BlID8/PSB0b1Njb3BlKG51bGwpLndpdGhUeXBlVmFyaWFibGVzKHR5cGVWYXJpYWJsZXMpOwogICAgICAgIHR5cGUucmVzb2x2ZUluKHNjb3BlLCBsaWJyYXJ5KTsKICAgICAgfQogICAgfQogICAgdHlwZXMuY2xlYXIoKTsKICB9CgogIFNjb3BlIHRvU2NvcGUoU2NvcGUgcGFyZW50KSB7CiAgICByZXR1cm4gbmV3IFNjb3BlKG1lbWJlcnMsIHNldHRlcnMsIHBhcmVudCwgbmFtZSwgaXNNb2RpZmlhYmxlOiBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnRGVjbGFyYXRpb25CdWlsZGVyKCR7aGFzaENvZGV9OmtpbmQ9JGtpbmQsbmFtZT0kbmFtZSknOwp9CgpjbGFzcyBGaWVsZEluZm8gewogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwogIGZpbmFsIFRva2VuIGluaXRpYWxpemVyVG9rZW47CiAgZmluYWwgVG9rZW4gYmVmb3JlTGFzdDsKICBmaW5hbCBpbnQgY2hhckVuZE9mZnNldDsKCiAgY29uc3QgRmllbGRJbmZvKHRoaXMubmFtZSwgdGhpcy5jaGFyT2Zmc2V0LCB0aGlzLmluaXRpYWxpemVyVG9rZW4sCiAgICAgIHRoaXMuYmVmb3JlTGFzdCwgdGhpcy5jaGFyRW5kT2Zmc2V0KTsKfQoKY2xhc3MgSW1wbGVtZW50YXRp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cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnQ+c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NvdXJjZS9zb3VyY2VfbG9hZGVyLmRhcnTAAKMWLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc291cmNlX2xvYWRlcjsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgppbXBvcnQgJ2RhcnQ6Y29udmVydCcgc2hvdyB1dGY4OwoKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnIHNob3cgVWludDhMaXN0OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHMsCiAgICAgICAgQm90dG9tVHlwZSwKICAgICAgICBDbGFzcywKICAgICAgICBDb21wb25lbnQsCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBGdW5jdGlvbk5vZGUsCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBMaWJyYXJ5LAogICAgICAgIExpYnJhcnlEZXBlbmRlbmN5LAogICAgICAgIFByb2NlZHVyZUtpbmQsCiAgICAgICAgU3VwZXJ0eXBlLAogICAgICAgIFRyZWVOb2RlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcKICAgIHNob3cgQ2xhc3NIaWVyYXJjaHksIEhhbmRsZUFtYmlndW91c1N1cGVydHlwZXM7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgc2hvdyBDb3JlVHlwZXM7CgppbXBvcnQgJy4uLy4uL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCc7CgppbXBvcnQgJy4uLy4uL2Jhc2UvaW5zdHJ1bWVudGF0aW9uLmRhcnQnIHNob3cgSW5zdHJ1bWVudGF0aW9uOwoKaW1wb3J0ICcuLi9ibGFja2xpc3RlZF9jbGFzc2VzLmRhcnQnIHNob3cgYmxhY2tsaXN0ZWRDb3JlQ2xhc3NlczsKCmltcG9ydCAnLi4vZXhwb3J0LmRhcnQnIHNob3cgRXhwb3J0OwoKaW1wb3J0ICcuLi9pbXBvcnQuZGFydCcgc2hvdyBJbXBvcnQ7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgTWVzc2FnZSwKICAgICAgICBTdW1tYXJ5VGVtcGxhdGUsCiAgICAgICAgVGVtcGxhdGUsCiAgICAgICAgbWVzc2FnZU9iamVjdEV4dGVuZHMsCiAgICAgICAgbWVzc2FnZU9iamVjdEltcGxlbWVudHMsCiAgICAgICAgbWVzc2FnZU9iamVjdE1peGVzSW4sCiAgICAgICAgbWVzc2FnZVBhcnRPcnBoYW4sCiAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgdGVtcGxhdGVBbWJpZ3VvdXNTdXBlcnR5cGVzLAogICAgICAgIHRlbXBsYXRlQ2FudFJlYWRGaWxlLAogICAgICAgIHRlbXBsYXRlQ3ljbGljQ2xhc3NIaWVyYXJjaHksCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUV4cG9ydCwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0Q29udGV4dCwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0LAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlJbXBvcnRDb250ZXh0LAogICAgICAgIHRlbXBsYXRlRXh0ZW5kaW5nRW51bSwKICAgICAgICB0ZW1wbGF0ZUV4dGVuZGluZ1Jlc3RyaWN0ZWQsCiAgICAgICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW4sCiAgICAgICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9ycywKICAgICAgICB0ZW1wbGF0ZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzQ2F1c2UsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1VcmlNaXNzaW5nU2NoZW1lLAogICAgICAgIHRlbXBsYXRlU291cmNlT3V0bGluZVN1bW1hcnksCiAgICAgICAgdGVtcGxhdGVVbnRyYW5zbGF0YWJsZVVyaTsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9zaGFkb3dfYXN0LmRhcnQnIHNob3cgU2hhZG93VHlwZUluZmVyZW5jZUVuZ2luZTsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIENsYXNzSGllcmFyY2h5QnVpbGRlciwKICAgICAgICBEZWNsYXJhdGlvbiwKICAgICAgICBEZWxheWVkTWVtYmVyLAogICAgICAgIERlbGF5ZWRPdmVycmlkZUNoZWNrLAogICAgICAgIEVudW1CdWlsZGVyLAogICAgICAgIEZpZWxkQnVpbGRlciwKICAgICAgICBQcm9jZWR1cmVCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1lbWJlckJ1aWxkZXIsCiAgICAgICAgTmFtZWRUeXBlQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF90YXJnZXQuZGFydCcgc2hvdyBLZXJuZWxUYXJnZXQ7CgppbXBvcnQgJy4uL2tlcm5lbC9ib2R5X2J1aWxkZXIuZGFydCcgc2hvdyBCb2R5QnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL3RyYW5zZm9ybV9jb2xsZWN0aW9ucy5kYXJ0JyBzaG93IENvbGxlY3Rpb25UcmFuc2Zvcm1lcjsKCmltcG9ydCAnLi4va2VybmVsL3RyYW5zZm9ybV9zZXRfbGl0ZXJhbHMuZGFydCcgc2hvdyBTZXRMaXRlcmFsVHJhbnNmb3JtZXI7CgppbXBvcnQgJy4uL2tlcm5lbC90eXBlX2J1aWxkZXJfY29tcHV0ZXIuZGFydCcgc2hvdyBUeXBlQnVpbGRlckNvbXB1dGVyOwoKaW1wb3J0ICcuLi9sb2FkZXIuZGFydCcgc2hvdyBMb2FkZXIsIHVudHJhbnNsYXRhYmxlVXJpU2NoZW1lOwoKaW1wb3J0ICcuLi9wYXJzZXIvY2xhc3NfbWVtYmVyX3BhcnNlci5kYXJ0JyBzaG93IENsYXNzTWVtYmVyUGFyc2VyOwoKaW1wb3J0ICcuLi9wYXJzZXIuZGFydCcgc2hvdyBQYXJzZXIsIGxlbmd0aEZvclRva2VuLCBvZmZzZXRGb3JUb2tlbjsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyBpbnRlcm5hbFByb2JsZW07CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcKICAgIHNob3cKICAgICAgICBFcnJvclRva2VuLAogICAgICAgIExhbmd1YWdlVmVyc2lvblRva2VuLAogICAgICAgIFNjYW5uZXJDb25maWd1cmF0aW9uLAogICAgICAgIFNjYW5uZXJSZXN1bHQsCiAgICAgICAgVG9rZW4sCiAgICAgICAgc2NhbjsKCmltcG9ydCAnZGlldF9saXN0ZW5lci5kYXJ0JyBzaG93IERpZXRMaXN0ZW5lcjsKCmltcG9ydCAnZGlldF9wYXJzZXIuZGFydCcgc2hvdyBEaWV0UGFyc2VyOwoKaW1wb3J0ICdvdXRsaW5lX2J1aWxkZXIuZGFydCcgc2hvdyBPdXRsaW5lQnVpbGRlcjsKCmltcG9ydCAnc291cmNlX2NsYXNzX2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VDbGFzc0J1aWxkZXI7CgppbXBvcnQgJ3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmNsYXNzIFNvdXJjZUxvYWRlciBleHRlbmRzIExvYWRlciB7CiAgLy8vIFRoZSBbRmlsZVN5c3RlbV0gd2hpY2ggc2hvdWxkIGJlIHVzZWQgdG8gYWNjZXNzIGZpbGVzLgogIGZpbmFsIEZpbGVTeXN0ZW0gZmlsZVN5c3RlbTsKCiAgLy8vIFdoZXRoZXIgY29tbWVudHMgc2hvdWxkIGJlIHNjYW5uZWQgYW5kIHBhcnNlZC4KICBmaW5hbCBib29sIGluY2x1ZGVDb21tZW50czsKCiAgZmluYWwgTWFwPFVyaSwgTGlzdDxpbnQ+PiBzb3VyY2VCeXRlcyA9IDxVcmksIExpc3Q8aW50Pj57fTsKCiAgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGJ1aWxkZXJIaWVyYXJjaHk7CgogIC8vIFVzZWQgd2hlbiBidWlsZGluZyBkaXJlY3RseSB0byBrZXJuZWwuCiAgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5OwogIENvcmVUeXBlcyBjb3JlVHlwZXM7CiAgLy8gVXNlZCB3aGVuIGNoZWNraW5nIHdoZXRoZXIgYSByZXR1cm4gdHlwZSBvZiBhbiBhc3luYyBmdW5jdGlvbiBpcyB2YWxpZC4KICBEYXJ0VHlwZSBmdXR1cmVPZkJvdHRvbTsKICBEYXJ0VHlwZSBpdGVyYWJsZU9mQm90dG9tOwogIERhcnRUeXBlIHN0cmVhbU9mQm90dG9tOwoKICBTaGFkb3dUeXBlSW5mZXJlbmNlRW5naW5lIHR5cGVJbmZlcmVuY2VFbmdpbmU7CgogIEluc3RydW1lbnRhdGlvbiBpbnN0cnVtZW50YXRpb247CgogIENvbGxlY3Rpb25UcmFuc2Zvcm1lciBjb2xsZWN0aW9uVHJhbnNmb3JtZXI7CgogIFNldExpdGVyYWxUcmFuc2Zvcm1lciBzZXRMaXRlcmFsVHJhbnNmb3JtZXI7CgogIFNvdXJjZUxvYWRlcih0aGlzLmZpbGVTeXN0ZW0sIHRoaXMuaW5jbHVkZUNvbW1lbnRzLCBLZXJuZWxUYXJnZXQgdGFyZ2V0KQogICAgICA6IHN1cGVyKHRhcmdldCk7CgogIFRlbXBsYXRlPFN1bW1hcnlUZW1wbGF0ZT4gZ2V0IG91dGxpbmVTdW1tYXJ5VGVtcGxhdGUgPT4KICAgICAgdGVtcGxhdGVTb3VyY2VPdXRsaW5lU3VtbWFyeTsKCiAgYm9vbCBnZXQgaXNTb3VyY2VMb2FkZXIgPT4gdHJ1ZTsKCiAgRnV0dXJlPFRva2VuPiB0b2tlbml6ZShTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LAogICAgICB7Ym9vbCBzdXBwcmVzc0xleGljYWxFcnJvcnM6IGZhbHNlfSkgYXN5bmMgewogICAgVXJpIHVyaSA9IGxpYnJhcnkuZmlsZVVyaTsKCiAgICAvLyBMb29rdXAgdGhlIGZpbGUgVVJJIGluIHRoZSBjYWNoZS4KICAgIExpc3Q8aW50PiBieXRlcyA9IHNvdXJjZUJ5dGVzW3VyaV07CgogICAgaWYgKGJ5dGVzID09IG51bGwpIHsKICAgICAgLy8gRXJyb3IgcmVjb3ZlcnkuCiAgICAgIGlmICh1cmkuc2NoZW1lID09IHVudHJhbnNsYXRhYmxlVXJpU2NoZW1lKSB7CiAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGVVbnRyYW5zbGF0YWJsZVVyaS53aXRoQXJndW1lbnRzKGxpYnJhcnkudXJpKTsKICAgICAgICBsaWJyYXJ5LmFkZFByb2JsZW1BdEFjY2Vzc29ycyhtZXNzYWdlKTsKICAgICAgICBieXRlcyA9IHN5bnRoZXNpemVTb3VyY2VGb3JNaXNzaW5nRmlsZShsaWJyYXJ5LnVyaSwgbnVsbCk7CiAgICAgIH0gZWxzZSBpZiAoIXVyaS5oYXNTY2hlbWUpIHsKICAgICAgICByZXR1cm4gaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVyaU1pc3NpbmdTY2hlbWUud2l0aEFyZ3VtZW50cyh1cmkpLAogICAgICAgICAgICAtMSwKICAgICAgICAgICAgbGlicmFyeS51cmkpOwogICAgICB9IGVsc2UgaWYgKHVyaS5zY2hlbWUgPT0gU291cmNlTGlicmFyeUJ1aWxkZXIuTUFMRk9STUVEX1VSSV9TQ0hFTUUpIHsKICAgICAgICBieXRlcyA9IHN5bnRoZXNpemVTb3VyY2VGb3JNaXNzaW5nRmlsZShsaWJyYXJ5LnVyaSwgbnVsbCk7CiAgICAgIH0KICAgICAgaWYgKGJ5dGVzICE9IG51bGwpIHsKICAgICAgICBVaW50OExpc3QgemVyb1Rlcm1pbmF0ZWRCeXRlcyA9IG5ldyBVaW50OExpc3QoYnl0ZXMubGVuZ3RoICsgMSk7CiAgICAgICAgemVyb1Rlcm1pbmF0ZWRCeXRlcy5zZXRSYW5nZSgwLCBieXRlcy5sZW5ndGgsIGJ5dGVzKTsKICAgICAgICBieXRlcyA9IHplcm9UZXJtaW5hdGVkQnl0ZXM7CiAgICAgICAgc291cmNlQnl0ZXNbdXJpXSA9IGJ5dGVzOwogICAgICB9CiAgICB9CgogICAgaWYgKGJ5dGVzID09IG51bGwpIHsKICAgICAgLy8gSWYgaXQgaXNuJ3QgZm91bmQgaW4gdGhlIGNhY2hlLCByZWFkIHRoZSBmaWxlIHJlYWQgZnJvbSB0aGUgZmlsZQogICAgICAvLyBzeXN0ZW0uCiAgICAgIExpc3Q8aW50PiByYXdCeXRlczsKICAgICAgdHJ5IHsKICAgICAgICByYXdCeXRlcyA9IGF3YWl0IGZpbGVTeXN0ZW0uZW50aXR5Rm9yVXJpKHVyaSkucmVhZEFzQnl0ZXMoKTsKICAgICAgfSBvbiBGaWxlU3lzdGVtRXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICAgICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGVDYW50UmVhZEZpbGUud2l0aEFyZ3VtZW50cyh1cmksIGUubWVzc2FnZSk7CiAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtQXRBY2Nlc3NvcnMobWVzc2FnZSk7CiAgICAgICAgcmF3Qnl0ZXMgPSBzeW50aGVzaXplU291cmNlRm9yTWlzc2luZ0ZpbGUobGlicmFyeS51cmksIG1lc3NhZ2UpOwogICAgICB9CiAgICAgIFVpbnQ4TGlzdCB6ZXJvVGVybWluYXRlZEJ5dGVzID0gbmV3IFVpbnQ4TGlzdChyYXdCeXRlcy5sZW5ndGggKyAxKTsKICAgICAgemVyb1Rlcm1pbmF0ZWRCeXRlcy5zZXRSYW5nZSgwLCByYXdCeXRlcy5sZW5ndGgsIHJhd0J5dGVzKTsKICAgICAgYnl0ZXMgPSB6ZXJvVGVybWluYXRlZEJ5dGVzOwogICAgICBzb3VyY2VCeXRlc1t1cmldID0gYnl0ZXM7CiAgICAgIGJ5dGVDb3VudCArPSByYXdCeXRlcy5sZW5ndGg7CiAgICB9CgogICAgU2Nhbm5lclJlc3VsdCByZXN1bHQgPSBzY2FuKGJ5dGVzLAogICAgICAgIGluY2x1ZGVDb21tZW50czogaW5jbHVkZUNvbW1lbnRzLAogICAgICAgIGNvbmZpZ3VyYXRpb246IG5ldyBTY2FubmVyQ29uZmlndXJhdGlvbigKICAgICAgICAgICAgZW5hYmxlVHJpcGxlU2hpZnQ6IHRhcmdldC5lbmFibGVUcmlwbGVTaGlmdCwKICAgICAgICAgICAgZW5hYmxlRXh0ZW5zaW9uTWV0aG9kczogdGFyZ2V0LmVuYWJsZUV4dGVuc2lvbk1ldGhvZHMsCiAgICAgICAgICAgIGVuYWJsZU5vbk51bGxhYmxlOiB0YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpLAogICAgICAgIGxhbmd1YWdlVmVyc2lvbkNoYW5nZWQ6IChfLCBMYW5ndWFnZVZlcnNpb25Ub2tlbiB2ZXJzaW9uKSB7CiAgICAgIC8vIFRPRE8oamVuc2opOiBXaGF0IGlmIHdlIGhhdmUgc2V2ZXJhbD8gV2hhdCBpZiBpdCBpcyB1bnN1cHBvcnRlZD8KICAgICAgLy8gV2hhdCBpZiB0aGUgbGFuZ3VhZ2UgdmVyc2lvbiB3YXMgYWxyZWFkeSBzZXQgdmlhIHBhY2thZ2VzIGFuZCB0aGlzIGlzCiAgICAgIC8vIGhpZ2hlcj8gRXRjCiAgICAgIGxpYnJhcnkuc2V0TGFuZ3VhZ2VWZXJzaW9uKHZlcnNpb24ubWFqb3IsIHZlcnNpb24ubWlub3IsIGV4cGxpY2l0OiB0cnVlKTsKICAgIH0pOwogICAgVG9rZW4gdG9rZW4gPSByZXN1bHQudG9rZW5zOwogICAgaWYgKCFzdXBwcmVzc0xleGljYWxFcnJvcnMpIHsKICAgICAgTGlzdDxpbnQ+IHNvdXJjZSA9IGdldFNvdXJjZShieXRlcyk7CiAgICAgIFVyaSBpbXBvcnRVcmkgPSBsaWJyYXJ5LnVyaTsKICAgICAgaWYgKGxpYnJhcnkuaXNQYXRjaCkgewogICAgICAgIC8vIEZvciBwYXRjaCBmaWxlcyB3ZSBjcmVhdGUgYSAiZmFrZSIgaW1wb3J0IHVyaS4KICAgICAgICAvLyBXZSBjYW5ub3QgdXNlIHRoZSBpbXBvcnQgdXJpIGZyb20gdGhlIHBhdGNoZWQgbGliYXJhcnkgYmVjYXVzZQogICAgICAgIC8vIHNldmVyYWwgZGlmZmVyZW50IGZpbGVzIHdvdWxkIHRoZW4gaGF2ZSB0aGUgc2FtZSBpbXBvcnQgdXJpLAogICAgICAgIC8vIGFuZCB0aGUgVk0gZG9lcyBub3Qgc3VwcG9ydCB0aGF0LiBBbHNvLCB3aGF0IHdvdWxkLCBmb3IgaW5zdGFuY2UsCiAgICAgICAgLy8gc2V0dGluZyBhIGJyZWFrcG9pbnQgb24gbGluZSA0MiBvZiBzb21lIGltcG9ydCB1cmkgbWVhbiwgaWYgdGhlIHVyaQogICAgICAgIC8vIHJlcHJlc2VudGVkIHNldmVyYWwgZmlsZXM/CiAgICAgICAgTGlzdDxTdHJpbmc+IG5ld1BhdGhTZWdtZW50cyA9CiAgICAgICAgICAgIG5ldyBMaXN0PFN0cmluZz4uZnJvbShpbXBvcnRVcmkucGF0aFNlZ21lbnRzKTsKICAgICAgICBuZXdQYXRoU2VnbWVudHMuYWRkKGxpYnJhcnkuZmlsZVVyaS5wYXRoU2VnbWVudHMubGFzdCk7CiAgICAgICAgbmV3UGF0aFNlZ21lbnRzWzBdID0gIiR7bmV3UGF0aFNlZ21lbnRzWzBdfS1wYXRjaCI7CiAgICAgICAgaW1wb3J0VXJpID0gaW1wb3J0VXJpLnJlcGxhY2UocGF0aFNlZ21lbnRzOiBuZXdQYXRoU2VnbWVudHMpOwogICAgICB9CiAgICAgIHRhcmdldC5hZGRTb3VyY2VJbmZvcm1hdGlvbigKICAgICAgICAgIGltcG9ydFVyaSwgbGlicmFyeS5maWxlVXJpLCByZXN1bHQubGluZVN0YXJ0cywgc291cmNlKTsKICAgIH0KICAgIHdoaWxlICh0b2tlbiBpcyBFcnJvclRva2VuKSB7CiAgICAgIGlmICghc3VwcHJlc3NMZXhpY2FsRXJyb3JzKSB7CiAgICAgICAgRXJyb3JUb2tlbiBlcnJvciA9IHRva2VuOwogICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbShlcnJvci5hc3NlcnRpb25NZXNzYWdlLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksCiAgICAgICAgICAgIGxlbmd0aEZvclRva2VuKHRva2VuKSwgdXJpKTsKICAgICAgfQogICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBMaXN0PGludD4gc3ludGhlc2l6ZVNvdXJjZUZvck1pc3NpbmdGaWxlKFVyaSB1cmksIE1lc3NhZ2UgbWVzc2FnZSkgewogICAgc3dpdGNoICgiJHVyaSIpIHsKICAgICAgY2FzZSAiZGFydDpjb3JlIjoKICAgICAgICByZXR1cm4gdXRmOC5lbmNvZGUoZGVmYXVsdERhcnRDb3JlU291cmNlKTsKCiAgICAgIGNhc2UgImRhcnQ6YXN5bmMiOgogICAgICAgIHJldHVybiB1dGY4LmVuY29kZShkZWZhdWx0RGFydEFzeW5jU291cmNlKTsKCiAgICAgIGNhc2UgImRhcnQ6Y29sbGVjdGlvbiI6CiAgICAgICAgcmV0dXJuIHV0ZjguZW5jb2RlKGRlZmF1bHREYXJ0Q29sbGVjdGlvblNvdXJjZSk7CgogICAgICBjYXNlICJkYXJ0Ol9pbnRlcm5hbCI6CiAgICAgICAgcmV0dXJuIHV0ZjguZW5jb2RlKGRlZmF1bHREYXJ0SW50ZXJuYWxTb3VyY2UpOwoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gdXRmOC5lbmNvZGUobWVzc2FnZSA9PSBudWxsID8gIiIgOiAiLyogJHttZXNzYWdlLm1lc3NhZ2V9ICovIik7CiAgICB9CiAgfQoKICBMaXN0PGludD4gZ2V0U291cmNlKExpc3Q8aW50PiBieXRlcykgewogICAgLy8gYnl0ZXMgaXMgMC10ZXJtaW5hdGVkLiBXZSBkb24ndCB3YW50IHRoYXQgaW5jbHVkZWQuCiAgICBpZiAoYnl0ZXMgaXMgVWludDhMaXN0KSB7CiAgICAgIHJldHVybiBuZXcgVWludDhMaXN0LnZpZXcoCiAgICAgICAgICBieXRlcy5idWZmZXIsIGJ5dGVzLm9mZnNldEluQnl0ZXMsIGJ5dGVzLmxlbmd0aCAtIDEpOwogICAgfQogICAgcmV0dXJuIGJ5dGVzLnN1Ymxpc3QoMCwgYnl0ZXMubGVuZ3RoIC0gMSk7CiAgfQoKICBGdXR1cmU8TnVsbD4gYnVpbGRPdXRsaW5lKFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIGFzeW5jIHsKICAgIFRva2VuIHRva2VucyA9IGF3YWl0IHRva2VuaXplKGxpYnJhcnkpOwogICAgaWYgKHRva2VucyA9PSBudWxsKSByZXR1cm47CiAgICBPdXRsaW5lQnVpbGRlciBsaXN0ZW5lciA9IG5ldyBPdXRsaW5lQnVpbGRlcihsaWJyYXJ5KTsKICAgIG5ldyBDbGFzc01lbWJlclBhcnNlcihsaXN0ZW5lcikucGFyc2VVbml0KHRva2Vucyk7CiAgfQoKICBGdXR1cmU8TnVsbD4gYnVpbGRCb2R5KExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIGFzeW5jIHsKICAgIGlmIChsaWJyYXJ5IGlzIFNvdXJjZUxpYnJhcnlCdWlsZGVyKSB7CiAgICAgIC8vIFdlIHRva2VuaXplIHNvdXJjZSBmaWxlcyB0d2ljZSB0byBrZWVwIG1lbW9yeSB1c2FnZSBsb3cuIFRoaXMgaXMgdGhlCiAgICAgIC8vIHNlY29uZCB0aW1lLCBhbmQgdGhlIGZpcnN0IHRpbWUgd2FzIGluIFtidWlsZE91dGxpbmVdIGFib3ZlLiBTbyB0aGlzCiAgICAgIC8vIHRpbWUgd2Ugc3VwcHJlc3MgbGV4aWNhbCBlcnJvcnMuCiAgICAgIFRva2VuIHRva2VucyA9IGF3YWl0IHRva2VuaXplKGxpYnJhcnksIHN1cHByZXNzTGV4aWNhbEVycm9yczogdHJ1ZSk7CiAgICAgIGlmICh0b2tlbnMgPT0gbnVsbCkgcmV0dXJuOwogICAgICBEaWV0TGlzdGVuZXIgbGlzdGVuZXIgPSBjcmVhdGVEaWV0TGlzdGVuZXIobGlicmFyeSk7CiAgICAgIERpZXRQYXJzZXIgcGFyc2VyID0gbmV3IERpZXRQYXJzZXIobGlzdGVuZXIpOwogICAgICBwYXJzZXIucGFyc2VVbml0KHRva2Vucyk7CiAgICAgIGZvciAoU291cmNlTGlicmFyeUJ1aWxkZXIgcGFydCBpbiBsaWJyYXJ5LnBhcnRzKSB7CiAgICAgICAgaWYgKHBhcnQucGFydE9mTGlicmFyeSAhPSBsaWJyYXJ5KSB7CiAgICAgICAgICAvLyBQYXJ0IHdhcyBpbmNsdWRlZCBpbiBtdWx0aXBsZSBsaWJyYXJpZXMuIFNraXAgaXQgaGVyZS4KICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBUb2tlbiB0b2tlbnMgPSBhd2FpdCB0b2tlbml6ZShwYXJ0KTsKICAgICAgICBpZiAodG9rZW5zICE9IG51bGwpIHsKICAgICAgICAgIGxpc3RlbmVyLnVyaSA9IHBhcnQuZmlsZVVyaTsKICAgICAgICAgIHBhcnNlci5wYXJzZVVuaXQodG9rZW5zKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIEZ1dHVyZTxFeHByZXNzaW9uPiBidWlsZEV4cHJlc3Npb24oCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnksCiAgICAgIFN0cmluZyBlbmNsb3NpbmdDbGFzcywKICAgICAgYm9vbCBpc0luc3RhbmNlTWVtYmVyLAogICAgICBGdW5jdGlvbk5vZGUgcGFyYW1ldGVycykgYXN5bmMgewogICAgVG9rZW4gdG9rZW4gPSBhd2FpdCB0b2tlbml6ZShsaWJyYXJ5LCBzdXBwcmVzc0xleGljYWxFcnJvcnM6IGZhbHNlKTsKICAgIGlmICh0b2tlbiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIERpZXRMaXN0ZW5lciBkaWV0TGlzdGVuZXIgPSBjcmVhdGVEaWV0TGlzdGVuZXIobGlicmFyeSk7CgogICAgRGVjbGFyYXRpb24gcGFyZW50ID0gbGlicmFyeTsKICAgIGlmIChlbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIERlY2xhcmF0aW9uIGNscyA9CiAgICAgICAgICBkaWV0TGlzdGVuZXIubWVtYmVyU2NvcGUubG9va3VwKGVuY2xvc2luZ0NsYXNzLCAtMSwgbnVsbCk7CiAgICAgIGlmIChjbHMgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgcGFyZW50ID0gY2xzOwogICAgICAgIGRpZXRMaXN0ZW5lcgogICAgICAgICAgLi5jdXJyZW50Q2xhc3MgPSBjbHMKICAgICAgICAgIC4ubWVtYmVyU2NvcGUgPSBjbHMuc2NvcGUuY29weVdpdGhQYXJlbnQoCiAgICAgICAgICAgICAgZGlldExpc3RlbmVyLm1lbWJlclNjb3BlLndpdGhUeXBlVmFyaWFibGVzKGNscy50eXBlVmFyaWFibGVzKSwKICAgICAgICAgICAgICAiZGVidWdFeHByZXNzaW9uIGluICRlbmNsb3NpbmdDbGFzcyIpOwogICAgICB9CiAgICB9CiAgICBQcm9jZWR1cmVCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgUHJvY2VkdXJlQnVpbGRlcihudWxsLCAwLCBudWxsLCAiZGVidWdFeHByIiwKICAgICAgICBudWxsLCBudWxsLCBQcm9jZWR1cmVLaW5kLk1ldGhvZCwgbGlicmFyeSwgMCwgMCwgLTEsIC0xKQogICAgICAuLnBhcmVudCA9IHBhcmVudDsKICAgIEJvZHlCdWlsZGVyIGxpc3RlbmVyID0gZGlldExpc3RlbmVyLmNyZWF0ZUxpc3RlbmVyKAogICAgICAgIGJ1aWxkZXIsIGRpZXRMaXN0ZW5lci5tZW1iZXJTY29wZSwgaXNJbnN0YW5jZU1lbWJlcik7CgogICAgcmV0dXJuIGxpc3RlbmVyLnBhcnNlU2luZ2xlRXhwcmVzc2lvbigKICAgICAgICBuZXcgUGFyc2VyKGxpc3RlbmVyKSwgdG9rZW4sIHBhcmFtZXRlcnMpOwogIH0KCiAgS2VybmVsVGFyZ2V0IGdldCB0YXJnZXQgPT4gc3VwZXIudGFyZ2V0OwoKICBEaWV0TGlzdGVuZXIgY3JlYXRlRGlldExpc3RlbmVyKFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIHJldHVybiBuZXcgRGlldExpc3RlbmVyKGxpYnJhcnksIGhpZXJhcmNoeSwgY29yZVR5cGVzLCB0eXBlSW5mZXJlbmNlRW5naW5lKTsKICB9CgogIHZvaWQgcmVzb2x2ZVBhcnRzKCkgewogICAgTGlzdDxVcmk+IHBhcnRzID0gPFVyaT5bXTsKICAgIExpc3Q8U291cmNlTGlicmFyeUJ1aWxkZXI+IGxpYnJhcmllcyA9IDxTb3VyY2VMaWJyYXJ5QnVpbGRlcj5bXTsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBpZiAobGlicmFyeS5pc1BhcnQpIHsKICAgICAgICAgIHBhcnRzLmFkZCh1cmkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsaWJyYXJpZXMuYWRkKGxpYnJhcnkpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBTZXQ8VXJpPiB1c2VkUGFydHMgPSBuZXcgU2V0PFVyaT4oKTsKICAgIGZvciAoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSBpbiBsaWJyYXJpZXMpIHsKICAgICAgbGlicmFyeS5pbmNsdWRlUGFydHModXNlZFBhcnRzKTsKICAgIH0KICAgIGZvciAoVXJpIHVyaSBpbiBwYXJ0cykgewogICAgICBpZiAodXNlZFBhcnRzLmNvbnRhaW5zKHVyaSkpIHsKICAgICAgICBidWlsZGVycy5yZW1vdmUodXJpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBwYXJ0ID0gYnVpbGRlcnNbdXJpXTsKICAgICAgICBwYXJ0LmFkZFByb2JsZW0obWVzc2FnZVBhcnRPcnBoYW4sIDAsIDEsIHBhcnQuZmlsZVVyaSk7CiAgICAgICAgcGFydC52YWxpZGF0ZVBhcnQobnVsbCwgbnVsbCk7CiAgICAgIH0KICAgIH0KICAgIHRpY2tlci5sb2dNcygiUmVzb2x2ZWQgcGFydHMiKTsKCiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgbGlicmFyeS5hcHBseVBhdGNoZXMoKTsKICAgICAgfQogICAgfSk7CiAgICB0aWNrZXIubG9nTXMoIkFwcGxpZWQgcGF0Y2hlcyIpOwogIH0KCiAgdm9pZCBjb21wdXRlTGlicmFyeVNjb3BlcygpIHsKICAgIFNldDxMaWJyYXJ5QnVpbGRlcj4gZXhwb3J0ZXJzID0gbmV3IFNldDxMaWJyYXJ5QnVpbGRlcj4oKTsKICAgIFNldDxMaWJyYXJ5QnVpbGRlcj4gZXhwb3J0ZWVzID0gbmV3IFNldDxMaWJyYXJ5QnVpbGRlcj4oKTsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBzb3VyY2VMaWJyYXJ5ID0gbGlicmFyeTsKICAgICAgICBzb3VyY2VMaWJyYXJ5LmJ1aWxkSW5pdGlhbFNjb3BlcygpOwogICAgICB9CiAgICAgIGlmIChsaWJyYXJ5LmV4cG9ydGVycy5pc05vdEVtcHR5KSB7CiAgICAgICAgZXhwb3J0ZWVzLmFkZChsaWJyYXJ5KTsKICAgICAgICBmb3IgKEV4cG9ydCBleHBvcnRlciBpbiBsaWJyYXJ5LmV4cG9ydGVycykgewogICAgICAgICAgZXhwb3J0ZXJzLmFkZChleHBvcnRlci5leHBvcnRlcik7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIFNldDxTb3VyY2VMaWJyYXJ5QnVpbGRlcj4gYm90aCA9IG5ldyBTZXQ8U291cmNlTGlicmFyeUJ1aWxkZXI+KCk7CiAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGV4cG9ydGVkIGluIGV4cG9ydGVlcykgewogICAgICBpZiAoZXhwb3J0ZXJzLmNvbnRhaW5zKGV4cG9ydGVkKSkgewogICAgICAgIGJvdGguYWRkKGV4cG9ydGVkKTsKICAgICAgfQogICAgICBmb3IgKEV4cG9ydCBleHBvcnQgaW4gZXhwb3J0ZWQuZXhwb3J0ZXJzKSB7CiAgICAgICAgZXhwb3J0ZWQuZXhwb3J0U2NvcGUuZm9yRWFjaChleHBvcnQuYWRkVG9FeHBvcnRTY29wZSk7CiAgICAgIH0KICAgIH0KICAgIGJvb2wgd2FzQ2hhbmdlZCA9IGZhbHNlOwogICAgZG8gewogICAgICB3YXNDaGFuZ2VkID0gZmFsc2U7CiAgICAgIGZvciAoU291cmNlTGlicmFyeUJ1aWxkZXIgZXhwb3J0ZWQgaW4gYm90aCkgewogICAgICAgIGZvciAoRXhwb3J0IGV4cG9ydCBpbiBleHBvcnRlZC5leHBvcnRlcnMpIHsKICAgICAgICAgIGV4cG9ydGVkLmV4cG9ydFNjb3BlLmZvckVhY2goKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBtZW1iZXIpIHsKICAgICAgICAgICAgaWYgKGV4cG9ydC5hZGRUb0V4cG9ydFNjb3BlKG5hbWUsIG1lbWJlcikpIHsKICAgICAgICAgICAgICB3YXNDaGFuZ2VkID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9IHdoaWxlICh3YXNDaGFuZ2VkKTsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBzb3VyY2VMaWJyYXJ5ID0gbGlicmFyeTsKICAgICAgICBzb3VyY2VMaWJyYXJ5LmFkZEltcG9ydHNUb1Njb3BlKCk7CiAgICAgIH0KICAgIH0pOwogICAgZm9yIChMaWJyYXJ5QnVpbGRlciBleHBvcnRlZSBpbiBleHBvcnRlZXMpIHsKICAgICAgLy8gVE9ETyhhaGUpOiBDaGFuZ2UgaG93IHdlIHRyYWNrIGV4cG9ydGVycy4gQ3VycmVudGx5LCB3aGVuIGEgbGlicmFyeQogICAgICAvLyAoZXhwb3J0ZXIpIGV4cG9ydHMgYW5vdGhlciBsaWJyYXJ5IChleHBvcnRlZSkgd2UgYWRkIGEgcmVmZXJlbmNlIHRvCiAgICAgIC8vIGV4cG9ydGVyIHRvIGV4cG9ydGVlLiBUaGlzIGNyZWF0ZXMgYSByZWZlcmVuY2UgaW4gdGhlIHdyb25nIGRpcmVjdGlvbgogICAgICAvLyBhbmQgY2FuIGxlYWQgdG8gbWVtb3J5IGxlYWtzLgogICAgICBleHBvcnRlZS5leHBvcnRlcnMuY2xlYXIoKTsKICAgIH0KICAgIHRpY2tlci5sb2dNcygiQ29tcHV0ZWQgbGlicmFyeSBzY29wZXMiKTsKICAgIC8vIGRlYnVnUHJpbnRFeHBvcnRzKCk7CiAgfQoKICB2b2lkIGRlYnVnUHJpbnRFeHBvcnRzKCkgewogICAgLy8gVE9ETyhzaWdtdW5kKTogc2hvdWxkIGJlIGBjb3ZhcmludCBTb3VyY2VMaWJyYXJ5QnVpbGRlcmAuCiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBkeW5hbWljIGwpIHsKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGw7CiAgICAgIFNldDxEZWNsYXJhdGlvbj4gbWVtYmVycyA9IG5ldyBTZXQ8RGVjbGFyYXRpb24+KCk7CiAgICAgIEl0ZXJhdG9yPERlY2xhcmF0aW9uPiBpdGVyYXRvciA9IGxpYnJhcnkuaXRlcmF0b3I7CiAgICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgbWVtYmVycy5hZGQoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIH0KICAgICAgTGlzdDxTdHJpbmc+IGV4cG9ydHMgPSA8U3RyaW5nPltdOwogICAgICBsaWJyYXJ5LmV4cG9ydFNjb3BlLmZvckVhY2goKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBtZW1iZXIpIHsKICAgICAgICB3aGlsZSAobWVtYmVyICE9IG51bGwpIHsKICAgICAgICAgIGlmICghbWVtYmVycy5jb250YWlucyhtZW1iZXIpKSB7CiAgICAgICAgICAgIGV4cG9ydHMuYWRkKG5hbWUpOwogICAgICAgICAgfQogICAgICAgICAgbWVtYmVyID0gbWVtYmVyLm5leHQ7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaWYgKGV4cG9ydHMuaXNOb3RFbXB0eSkgewogICAgICAgIHByaW50KCIkdXJpIGV4cG9ydHMgJGV4cG9ydHMiKTsKICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIHJlc29sdmVUeXBlcygpIHsKICAgIGludCB0eXBlQ291bnQgPSAwOwogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIHNvdXJjZUxpYnJhcnkgPSBsaWJyYXJ5OwogICAgICAgIHR5cGVDb3VudCArPSBzb3VyY2VMaWJyYXJ5LnJlc29sdmVUeXBlcygpOwogICAgICB9CiAgICB9KTsKICAgIHRpY2tlci5sb2dNcygiUmVzb2x2ZWQgJHR5cGVDb3VudCB0eXBlcyIpOwogIH0KCiAgdm9pZCBmaW5hbGl6ZUluaXRpYWxpemluZ0Zvcm1hbHMoKSB7CiAgICBpbnQgZm9ybWFsQ291bnQgPSAwOwogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIHNvdXJjZUxpYnJhcnkgPSBsaWJyYXJ5OwogICAgICAgIGZvcm1hbENvdW50ICs9IHNvdXJjZUxpYnJhcnkuZmluYWxpemVJbml0aWFsaXppbmdGb3JtYWxzKCk7CiAgICAgIH0KICAgIH0pOwogICAgdGlja2VyLmxvZ01zKCJGaW5hbGl6ZWQgJGZvcm1hbENvdW50IGluaXRpYWxpemluZyBmb3JtYWxzIik7CiAgfQoKICB2b2lkIGZpbmlzaERlZmVycmVkTG9hZFRlYXJvZmZzKCkgewogICAgaW50IGNvdW50ID0gMDsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBjb3VudCArPSBsaWJyYXJ5LmZpbmlzaERlZmVycmVkTG9hZFRlYXJvZmZzKCk7CiAgICAgIH0KICAgIH0pOwogICAgdGlja2VyLmxvZ01zKCJGaW5pc2hlZCBkZWZlcnJlZCBsb2FkIHRlYXJvZmZzICRjb3VudCIpOwogIH0KCiAgdm9pZCBmaW5pc2hOb1N1Y2hNZXRob2RGb3J3YXJkZXJzKCkgewogICAgaW50IGNvdW50ID0gMDsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBjb3VudCArPSBsaWJyYXJ5LmZpbmlzaEZvcndhcmRlcnMoKTsKICAgICAgfQogICAgfSk7CiAgICB0aWNrZXIubG9nTXMoIkZpbmlzaGVkIGZvcndhcmRlcnMgZm9yICRjb3VudCBwcm9jZWR1cmVzIik7CiAgfQoKICB2b2lkIHJlc29sdmVDb25zdHJ1Y3RvcnMoKSB7CiAgICBpbnQgY291bnQgPSAwOwogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIGNvdW50ICs9IGxpYnJhcnkucmVzb2x2ZUNvbnN0cnVjdG9ycyhudWxsKTsKICAgICAgfQogICAgfSk7CiAgICB0aWNrZXIubG9nTXMoIlJlc29sdmVkICRjb3VudCBjb25zdHJ1Y3RvcnMiKTsKICB9CgogIHZvaWQgZmluaXNoVHlwZVZhcmlhYmxlcyhDbGFzc0J1aWxkZXIgb2JqZWN0LCBUeXBlQnVpbGRlciBkeW5hbWljVHlwZSkgewogICAgaW50IGNvdW50ID0gMDsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBjb3VudCArPSBsaWJyYXJ5LmZpbmlzaFR5cGVWYXJpYWJsZXMob2JqZWN0LCBkeW5hbWljVHlwZSk7CiAgICAgIH0KICAgIH0pOwogICAgdGlja2VyLmxvZ01zKCJSZXNvbHZlZCAkY291bnQgdHlwZS12YXJpYWJsZSBib3VuZHMiKTsKICB9CgogIHZvaWQgY29tcHV0ZURlZmF1bHRUeXBlcyhUeXBlQnVpbGRlciBkeW5hbWljVHlwZSwgVHlwZUJ1aWxkZXIgYm90dG9tVHlwZSwKICAgICAgQ2xhc3NCdWlsZGVyIG9iamVjdENsYXNzKSB7CiAgICBpbnQgY291bnQgPSAwOwogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIGNvdW50ICs9CiAgICAgICAgICAgIGxpYnJhcnkuY29tcHV0ZURlZmF1bHRUeXBlcyhkeW5hbWljVHlwZSwgYm90dG9tVHlwZSwgb2JqZWN0Q2xhc3MpOwogICAgICB9CiAgICB9KTsKICAgIHRpY2tlci5sb2dNcygiQ29tcHV0ZWQgZGVmYXVsdCB0eXBlcyBmb3IgJGNvdW50IHR5cGUgdmFyaWFibGVzIik7CiAgfQoKICB2b2lkIGZpbmlzaE5hdGl2ZU1ldGhvZHMoKSB7CiAgICBpbnQgY291bnQgPSAwOwogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIGNvdW50ICs9IGxpYnJhcnkuZmluaXNoTmF0aXZlTWV0aG9kcygpOwogICAgICB9CiAgICB9KTsKICAgIHRpY2tlci5sb2dNcygiRmluaXNoZWQgJGNvdW50IG5hdGl2ZSBtZXRob2RzIik7CiAgfQoKICB2b2lkIGZpbmlzaFBhdGNoTWV0aG9kcygpIHsKICAgIGludCBjb3VudCA9IDA7CiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgY291bnQgKz0gbGlicmFyeS5maW5pc2hQYXRjaE1ldGhvZHMoKTsKICAgICAgfQogICAgfSk7CiAgICB0aWNrZXIubG9nTXMoIkZpbmlzaGVkICRjb3VudCBwYXRjaCBtZXRob2RzIik7CiAgfQoKICAvLy8gQ2hlY2sgdGhhdCBbb2JqZWN0Q2xhc3NdIGhhcyBubyBzdXBlcnR5cGVzLiBSZWNvdmVyIGJ5IHJlbW92aW5nIGFueQogIC8vLyBmb3VuZC4KICB2b2lkIGNoZWNrT2JqZWN0Q2xhc3NIaWVyYXJjaHkoQ2xhc3NCdWlsZGVyIG9iamVjdENsYXNzKSB7CiAgICBpZiAob2JqZWN0Q2xhc3MgaXMgU291cmNlQ2xhc3NCdWlsZGVyICYmCiAgICAgICAgb2JqZWN0Q2xhc3MubGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICBpZiAob2JqZWN0Q2xhc3Muc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgICBvYmplY3RDbGFzcy5zdXBlcnR5cGUgPSBudWxsOwogICAgICAgIG9iamVjdENsYXNzLmFkZFByb2JsZW0oCiAgICAgICAgICAgIG1lc3NhZ2VPYmplY3RFeHRlbmRzLCBvYmplY3RDbGFzcy5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgIH0KICAgICAgaWYgKG9iamVjdENsYXNzLmludGVyZmFjZXMgIT0gbnVsbCkgewogICAgICAgIG9iamVjdENsYXNzLmFkZFByb2JsZW0oCiAgICAgICAgICAgIG1lc3NhZ2VPYmplY3RJbXBsZW1lbnRzLCBvYmplY3RDbGFzcy5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgICAgb2JqZWN0Q2xhc3MuaW50ZXJmYWNlcyA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKG9iamVjdENsYXNzLm1peGVkSW5UeXBlICE9IG51bGwpIHsKICAgICAgICBvYmplY3RDbGFzcy5hZGRQcm9ibGVtKAogICAgICAgICAgICBtZXNzYWdlT2JqZWN0TWl4ZXNJbiwgb2JqZWN0Q2xhc3MuY2hhck9mZnNldCwgbm9MZW5ndGgpOwogICAgICAgIG9iamVjdENsYXNzLm1peGVkSW5UeXBlID0gbnVsbDsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIFJldHVybnMgYSBsaXN0IG9mIGFsbCBjbGFzcyBidWlsZGVycyBkZWNsYXJlZCBpbiB0aGlzIGxvYWRlci4gIEFzIHRoZQogIC8vLyBjbGFzc2VzIGFyZSBzb3J0ZWQsIGFueSBjeWNsZXMgaW4gdGhlIGhpZWFyY2h5IGFyZSByZXBvcnRlZCBhcwogIC8vLyBlcnJvcnMuIFJlY292ZXIgYnkgYnJlYWtpbmcgdGhlIGN5Y2xlcy4gVGhpcyBtZWFucyB0aGF0IHRoZSByZXN0IG9mIHRoZQogIC8vLyBwaXBlbGluZSAoaW5jbHVkaW5nIGJhY2tlbmRzKSBjYW4gYXNzdW1lIHRoYXQgdGhlcmUgYXJlIG5vIGhpZXJhcmNoeQogIC8vLyBjeWNsZXMuCiAgTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IGhhbmRsZUhpZXJhcmNoeUN5Y2xlcyhDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3MpIHsKICAgIC8vIENvbXB1dGUgdGhlIGluaXRpYWwgd29yayBsaXN0IG9mIGFsbCBjbGFzc2VzIGRlY2xhcmVkIGluIHRoaXMgbG9hZGVyLgogICAgTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IHdvcmtMaXN0ID0gPFNvdXJjZUNsYXNzQnVpbGRlcj5bXTsKICAgIGZvciAoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSBpbiBidWlsZGVycy52YWx1ZXMpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBJdGVyYXRvcjxEZWNsYXJhdGlvbj4gbWVtYmVycyA9IGxpYnJhcnkuaXRlcmF0b3I7CiAgICAgICAgd2hpbGUgKG1lbWJlcnMubW92ZU5leHQoKSkgewogICAgICAgICAgRGVjbGFyYXRpb24gbWVtYmVyID0gbWVtYmVycy5jdXJyZW50OwogICAgICAgICAgaWYgKG1lbWJlciBpcyBTb3VyY2VDbGFzc0J1aWxkZXIpIHsKICAgICAgICAgICAgd29ya0xpc3QuYWRkKG1lbWJlcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgU2V0PENsYXNzQnVpbGRlcj4gYmxhY2tMaXN0ZWRDbGFzc2VzID0gbmV3IFNldDxDbGFzc0J1aWxkZXI+KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGJsYWNrbGlzdGVkQ29yZUNsYXNzZXMubGVuZ3RoOyBpKyspIHsKICAgICAgYmxhY2tMaXN0ZWRDbGFzc2VzCiAgICAgICAgICAuYWRkKGNvcmVMaWJyYXJ5LmdldExvY2FsTWVtYmVyKGJsYWNrbGlzdGVkQ29yZUNsYXNzZXNbaV0pKTsKICAgIH0KCiAgICAvLyBTb3J0IHRoZSBjbGFzc2VzIHRvcG9sb2dpY2FsbHkuCiAgICBTZXQ8U291cmNlQ2xhc3NCdWlsZGVyPiB0b3BvbG9naWNhbGx5U29ydGVkQ2xhc3NlcyA9CiAgICAgICAgbmV3IFNldDxTb3VyY2VDbGFzc0J1aWxkZXI+KCk7CiAgICBMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gcHJldmlvdXNXb3JrTGlzdDsKICAgIGRvIHsKICAgICAgcHJldmlvdXNXb3JrTGlzdCA9IHdvcmtMaXN0OwogICAgICB3b3JrTGlzdCA9IDxTb3VyY2VDbGFzc0J1aWxkZXI+W107CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJldmlvdXNXb3JrTGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgIFNvdXJjZUNsYXNzQnVpbGRlciBjbHMgPSBwcmV2aW91c1dvcmtMaXN0W2ldOwogICAgICAgIExpc3Q8RGVjbGFyYXRpb24+IGRpcmVjdFN1cGVydHlwZXMgPQogICAgICAgICAgICBjbHMuY29tcHV0ZURpcmVjdFN1cGVydHlwZXMob2JqZWN0Q2xhc3MpOwogICAgICAgIGJvb2wgYWxsU3VwZXJ0eXBlc1Byb2Nlc3NlZCA9IHRydWU7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaXJlY3RTdXBlcnR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBEZWNsYXJhdGlvbiBzdXBlcnR5cGUgPSBkaXJlY3RTdXBlcnR5cGVzW2ldOwogICAgICAgICAgaWYgKHN1cGVydHlwZSBpcyBTb3VyY2VDbGFzc0J1aWxkZXIgJiYKICAgICAgICAgICAgICBzdXBlcnR5cGUubGlicmFyeS5sb2FkZXIgPT0gdGhpcyAmJgogICAgICAgICAgICAgICF0b3BvbG9naWNhbGx5U29ydGVkQ2xhc3Nlcy5jb250YWlucyhzdXBlcnR5cGUpKSB7CiAgICAgICAgICAgIGFsbFN1cGVydHlwZXNQcm9jZXNzZWQgPSBmYWxzZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChhbGxTdXBlcnR5cGVzUHJvY2Vzc2VkICYmIGNscy5pc1BhdGNoKSB7CiAgICAgICAgICBhbGxTdXBlcnR5cGVzUHJvY2Vzc2VkID0KICAgICAgICAgICAgICB0b3BvbG9naWNhbGx5U29ydGVkQ2xhc3Nlcy5jb250YWlucyhjbHMub3JpZ2luKTsKICAgICAgICB9CiAgICAgICAgaWYgKGFsbFN1cGVydHlwZXNQcm9jZXNzZWQpIHsKICAgICAgICAgIHRvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzLmFkZChjbHMpOwogICAgICAgICAgY2hlY2tDbGFzc1N1cGVydHlwZXMoY2xzLCBkaXJlY3RTdXBlcnR5cGVzLCBibGFja0xpc3RlZENsYXNzZXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB3b3JrTGlzdC5hZGQoY2xzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gd2hpbGUgKHByZXZpb3VzV29ya0xpc3QubGVuZ3RoICE9IHdvcmtMaXN0Lmxlbmd0aCk7CiAgICBMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gY2xhc3NlcyA9IHRvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzLnRvTGlzdCgpOwogICAgTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IGNsYXNzZXNXaXRoQ3ljbGVzID0gcHJldmlvdXNXb3JrTGlzdDsKCiAgICAvLyBPbmNlIHRoZSB3b3JrIGxpc3QgZG9lc24ndCBjaGFuZ2UgaW4gc2l6ZSwgaXQncyBlaXRoZXIgZW1wdHksIG9yCiAgICAvLyBjb250YWlucyBhbGwgY2xhc3NlcyB3aXRoIGN5Y2xlcy4KCiAgICAvLyBTb3J0IHRoZSBjbGFzc2VzIHRvIGVuc3VyZSBjb25zaXN0ZW50IG91dHB1dC4KICAgIGNsYXNzZXNXaXRoQ3ljbGVzLnNvcnQoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlc1dpdGhDeWNsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgU291cmNlQ2xhc3NCdWlsZGVyIGNscyA9IGNsYXNzZXNXaXRoQ3ljbGVzW2ldOwogICAgICB0YXJnZXQuYnJlYWtDeWNsZShjbHMpOwogICAgICBjbGFzc2VzLmFkZChjbHMpOwogICAgICBjbHMuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlQ3ljbGljQ2xhc3NIaWVyYXJjaHkud2l0aEFyZ3VtZW50cyhjbHMuZnVsbE5hbWVGb3JFcnJvcnMpLAogICAgICAgICAgY2xzLmNoYXJPZmZzZXQsCiAgICAgICAgICBub0xlbmd0aCk7CiAgICB9CgogICAgdGlja2VyLmxvZ01zKCJDaGVja2VkIGNsYXNzIGhpZXJhcmNoeSIpOwogICAgcmV0dXJuIGNsYXNzZXM7CiAgfQoKICB2b2lkIGNoZWNrQ2xhc3NTdXBlcnR5cGVzKAogICAgICBTb3VyY2VDbGFzc0J1aWxkZXIgY2xzLAogICAgICBMaXN0PERlY2xhcmF0aW9uPiBkaXJlY3RTdXBlcnR5cGVzLAogICAgICBTZXQ8Q2xhc3NCdWlsZGVyPiBibGFja0xpc3RlZENsYXNzZXMpIHsKICAgIC8vIENoZWNrIHRoYXQgdGhlIGRpcmVjdCBzdXBlcnR5cGVzIGFyZW4ndCBibGFjay1saXN0ZWQgb3IgZW51bXMuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpcmVjdFN1cGVydHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgRGVjbGFyYXRpb24gc3VwZXJ0eXBlID0gZGlyZWN0U3VwZXJ0eXBlc1tpXTsKICAgICAgaWYgKHN1cGVydHlwZSBpcyBFbnVtQnVpbGRlcikgewogICAgICAgIGNscy5hZGRQcm9ibGVtKHRlbXBsYXRlRXh0ZW5kaW5nRW51bS53aXRoQXJndW1lbnRzKHN1cGVydHlwZS5uYW1lKSwKICAgICAgICAgICAgY2xzLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgfSBlbHNlIGlmICghY2xzLmxpYnJhcnkubWF5SW1wbGVtZW50UmVzdHJpY3RlZFR5cGVzICYmCiAgICAgICAgICBibGFja0xpc3RlZENsYXNzZXMuY29udGFpbnMoc3VwZXJ0eXBlKSkgewogICAgICAgIGNscy5hZGRQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZUV4dGVuZGluZ1Jlc3RyaWN0ZWQKICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHN1cGVydHlwZS5mdWxsTmFtZUZvckVycm9ycyksCiAgICAgICAgICAgIGNscy5jaGFyT2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBDaGVjayB0aGF0IHRoZSBtaXhlZC1pbiB0eXBlIGNhbiBiZSB1c2VkIGFzIGEgbWl4aW4uCiAgICBmaW5hbCBUeXBlQnVpbGRlciBtaXhlZEluVHlwZSA9IGNscy5taXhlZEluVHlwZTsKICAgIGlmIChtaXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgIGJvb2wgaXNDbGFzc0J1aWxkZXIgPSBmYWxzZTsKICAgICAgaWYgKG1peGVkSW5UeXBlIGlzIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgICAgICB2YXIgYnVpbGRlciA9IG1peGVkSW5UeXBlLmRlY2xhcmF0aW9uOwogICAgICAgIGlmIChidWlsZGVyIGlzIENsYXNzQnVpbGRlcikgewogICAgICAgICAgaXNDbGFzc0J1aWxkZXIgPSB0cnVlOwogICAgICAgICAgZm9yIChEZWNsYXJhdGlvbiBjb25zdHJ1Y3RvcnkgaW4gYnVpbGRlci5jb25zdHJ1Y3RvcnMubG9jYWwudmFsdWVzKSB7CiAgICAgICAgICAgIGlmIChjb25zdHJ1Y3RvcnkuaXNDb25zdHJ1Y3RvciAmJiAhY29uc3RydWN0b3J5LmlzU3ludGhldGljKSB7CiAgICAgICAgICAgICAgY2xzLmFkZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnMKICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGJ1aWxkZXIuZnVsbE5hbWVGb3JFcnJvcnMpLAogICAgICAgICAgICAgICAgICBjbHMuY2hhck9mZnNldCwKICAgICAgICAgICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IFsKICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzQ2F1c2UKICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoYnVpbGRlci5mdWxsTmFtZUZvckVycm9ycykKICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihjb25zdHJ1Y3RvcnkuZmlsZVVyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yeS5jaGFyT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICAgICAgICAgICAgXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCFpc0NsYXNzQnVpbGRlcikgewogICAgICAgIC8vIFRPRE8oYWhlKTogRWl0aGVyIHdlIG5lZWQgdG8gY2hlY2sgdGhpcyBmb3Igc3VwZXJjbGFzcyBhbmQKICAgICAgICAvLyBpbnRlcmZhY2VzLCBvciB0aGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnkgKG9yIGhhbmRsZWQgZWxzZXdoZXJlKS4KICAgICAgICBjbHMuYWRkUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW4ud2l0aEFyZ3VtZW50cyhtaXhlZEluVHlwZS5mdWxsTmFtZUZvckVycm9ycyksCiAgICAgICAgICAgIGNscy5jaGFyT2Zmc2V0LAogICAgICAgICAgICBub0xlbmd0aCk7CiAgICAgIH0KICAgIH0KICB9CgogIExpc3Q8U291cmNlQ2xhc3NCdWlsZGVyPiBjaGVja1NlbWFudGljcyhDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3MpIHsKICAgIGNoZWNrT2JqZWN0Q2xhc3NIaWVyYXJjaHkob2JqZWN0Q2xhc3MpOwogICAgTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IGNsYXNzZXMgPSBoYW5kbGVIaWVyYXJjaHlDeWNsZXMob2JqZWN0Q2xhc3MpOwoKICAgIC8vIENoZWNrIGltcG9ydHMgYW5kIGV4cG9ydHMgZm9yIGR1cGxpY2F0ZSBuYW1lcy4KICAgIC8vIFRoaXMgaXMgcmF0aGVyIHNpbGx5LCBlLmcuIGl0IG1ha2VzIGltcG9ydGluZyAnZm9vJyBhbmQgZXhwb3J0aW5nIGFub3RoZXIKICAgIC8vICdmb28nIG9rLgogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeSBpcyBTb3VyY2VMaWJyYXJ5QnVpbGRlciAmJiBsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgLy8gQ2hlY2sgZXhwb3J0cy4KICAgICAgICBpZiAobGlicmFyeS5leHBvcnRzLmlzTm90RW1wdHkpIHsKICAgICAgICAgIE1hcDxTdHJpbmcsIExpc3Q8RXhwb3J0Pj4gbmFtZVRvRXhwb3J0czsKICAgICAgICAgIGJvb2wgZXJyb3JFeHBvcnRzID0gZmFsc2U7CiAgICAgICAgICBmb3IgKEV4cG9ydCBleHBvcnQgaW4gbGlicmFyeS5leHBvcnRzKSB7CiAgICAgICAgICAgIFN0cmluZyBuYW1lID0gZXhwb3J0LmV4cG9ydGVkPy5uYW1lID8/ICcnOwogICAgICAgICAgICBpZiAobmFtZSAhPSAnJykgewogICAgICAgICAgICAgIG5hbWVUb0V4cG9ydHMgPz89IG5ldyBNYXA8U3RyaW5nLCBMaXN0PEV4cG9ydD4+KCk7CiAgICAgICAgICAgICAgTGlzdDxFeHBvcnQ+IGV4cG9ydHMgPSBuYW1lVG9FeHBvcnRzW25hbWVdID8/PSA8RXhwb3J0PltdOwogICAgICAgICAgICAgIGV4cG9ydHMuYWRkKGV4cG9ydCk7CiAgICAgICAgICAgICAgaWYgKGV4cG9ydHNbMF0uZXhwb3J0ZWQgIT0gZXhwb3J0LmV4cG9ydGVkKSBlcnJvckV4cG9ydHMgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZXJyb3JFeHBvcnRzKSB7CiAgICAgICAgICAgIGZvciAoU3RyaW5nIG5hbWUgaW4gbmFtZVRvRXhwb3J0cy5rZXlzKSB7CiAgICAgICAgICAgICAgTGlzdDxFeHBvcnQ+IGV4cG9ydHMgPSBuYW1lVG9FeHBvcnRzW25hbWVdOwogICAgICAgICAgICAgIGlmIChleHBvcnRzLmxlbmd0aCA8IDIpIGNvbnRpbnVlOwogICAgICAgICAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQgPSA8TG9jYXRlZE1lc3NhZ2U+W107CiAgICAgICAgICAgICAgZm9yIChFeHBvcnQgZXhwb3J0IGluIGV4cG9ydHMuc2tpcCgxKSkgewogICAgICAgICAgICAgICAgY29udGV4dC5hZGQodGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUV4cG9ydENvbnRleHQKICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lKQogICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24odXJpLCBleHBvcnQuY2hhck9mZnNldCwgbm9MZW5ndGgpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0LndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgICAgICAgIGV4cG9ydHNbMF0uY2hhck9mZnNldCwKICAgICAgICAgICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICAgICAgICAgIHVyaSwKICAgICAgICAgICAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIGltcG9ydHMuCiAgICAgICAgaWYgKGxpYnJhcnkuaW1wb3J0cy5pc05vdEVtcHR5KSB7CiAgICAgICAgICBNYXA8U3RyaW5nLCBMaXN0PEltcG9ydD4+IG5hbWVUb0ltcG9ydHM7CiAgICAgICAgICBib29sIGVycm9ySW1wb3J0czsKICAgICAgICAgIGZvciAoSW1wb3J0IGltcG9ydCBpbiBsaWJyYXJ5LmltcG9ydHMpIHsKICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBpbXBvcnQuaW1wb3J0ZWQ/Lm5hbWUgPz8gJyc7CiAgICAgICAgICAgIGlmIChuYW1lICE9ICcnKSB7CiAgICAgICAgICAgICAgbmFtZVRvSW1wb3J0cyA/Pz0gbmV3IE1hcDxTdHJpbmcsIExpc3Q8SW1wb3J0Pj4oKTsKICAgICAgICAgICAgICBMaXN0PEltcG9ydD4gaW1wb3J0cyA9IG5hbWVUb0ltcG9ydHNbbmFtZV0gPz89IDxJbXBvcnQ+W107CiAgICAgICAgICAgICAgaW1wb3J0cy5hZGQoaW1wb3J0KTsKICAgICAgICAgICAgICBpZiAoaW1wb3J0c1swXS5pbXBvcnRlZCAhPSBpbXBvcnQuaW1wb3J0ZWQpIGVycm9ySW1wb3J0cyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChlcnJvckltcG9ydHMgIT0gbnVsbCkgewogICAgICAgICAgICBmb3IgKFN0cmluZyBuYW1lIGluIG5hbWVUb0ltcG9ydHMua2V5cykgewogICAgICAgICAgICAgIExpc3Q8SW1wb3J0PiBpbXBvcnRzID0gbmFtZVRvSW1wb3J0c1tuYW1lXTsKICAgICAgICAgICAgICBpZiAoaW1wb3J0cy5sZW5ndGggPCAyKSBjb250aW51ZTsKICAgICAgICAgICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0ID0gPExvY2F0ZWRNZXNzYWdlPltdOwogICAgICAgICAgICAgIGZvciAoSW1wb3J0IGltcG9ydCBpbiBpbXBvcnRzLnNraXAoMSkpIHsKICAgICAgICAgICAgICAgIGNvbnRleHQuYWRkKHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlJbXBvcnRDb250ZXh0CiAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZSkKICAgICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKHVyaSwgaW1wb3J0LmNoYXJPZmZzZXQsIG5vTGVuZ3RoKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydC53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICAgICAgICBpbXBvcnRzWzBdLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgICAgICAgICB1cmksCiAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIHRpY2tlci5sb2dNcygiQ2hlY2tlZCBpbXBvcnRzIGFuZCBleHBvcnRzIGZvciBkdXBsaWNhdGUgbmFtZXMiKTsKICAgIHJldHVybiBjbGFzc2VzOwogIH0KCiAgdm9pZCBidWlsZENvbXBvbmVudCgpIHsKICAgIGJ1aWxkZXJzLmZvckVhY2goKFVyaSB1cmksIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBzb3VyY2VMaWJyYXJ5ID0gbGlicmFyeTsKICAgICAgICBMaWJyYXJ5IHRhcmdldCA9IHNvdXJjZUxpYnJhcnkuYnVpbGQoY29yZUxpYnJhcnkpOwogICAgICAgIGlmICghbGlicmFyeS5pc1BhdGNoKSB7CiAgICAgICAgICBsaWJyYXJpZXMuYWRkKHRhcmdldCk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIHRpY2tlci5sb2dNcygiQnVpbHQgY29tcG9uZW50Iik7CiAgfQoKICBDb21wb25lbnQgY29tcHV0ZUZ1bGxDb21wb25lbnQoKSB7CiAgICBTZXQ8TGlicmFyeT4gbGlicmFyaWVzID0gbmV3IFNldDxMaWJyYXJ5PigpOwogICAgTGlzdDxMaWJyYXJ5PiB3b3JrTGlzdCA9IDxMaWJyYXJ5PltdOwogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAoIWxpYnJhcnkuaXNQYXRjaCAmJgogICAgICAgICAgKGxpYnJhcnkubG9hZGVyID09IHRoaXMgfHwKICAgICAgICAgICAgICBsaWJyYXJ5LnVyaS5zY2hlbWUgPT0gImRhcnQiIHx8CiAgICAgICAgICAgICAgbGlicmFyeSA9PSB0aGlzLmZpcnN0KSkgewogICAgICAgIGlmIChsaWJyYXJpZXMuYWRkKGxpYnJhcnkudGFyZ2V0KSkgewogICAgICAgICAgd29ya0xpc3QuYWRkKGxpYnJhcnkudGFyZ2V0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgd2hpbGUgKHdvcmtMaXN0LmlzTm90RW1wdHkpIHsKICAgICAgTGlicmFyeSBsaWJyYXJ5ID0gd29ya0xpc3QucmVtb3ZlTGFzdCgpOwogICAgICBmb3IgKExpYnJhcnlEZXBlbmRlbmN5IGRlcGVuZGVuY3kgaW4gbGlicmFyeS5kZXBlbmRlbmNpZXMpIHsKICAgICAgICBpZiAobGlicmFyaWVzLmFkZChkZXBlbmRlbmN5LnRhcmdldExpYnJhcnkpKSB7CiAgICAgICAgICB3b3JrTGlzdC5hZGQoZGVwZW5kZW5jeS50YXJnZXRMaWJyYXJ5KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgQ29tcG9uZW50KCkuLmxpYnJhcmllcy5hZGRBbGwobGlicmFyaWVzKTsKICB9CgogIHZvaWQgY29tcHV0ZUhpZXJhcmNoeSgpIHsKICAgIExpc3Q8QW1iaWd1b3VzVHlwZXNSZWNvcmQ+IGFtYmlndW91c1R5cGVzUmVjb3JkcyA9IFtdOwogICAgSGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlcyBvbkFtYmlndW91c1N1cGVydHlwZXMgPQogICAgICAgIChDbGFzcyBjbHMsIFN1cGVydHlwZSBhLCBTdXBlcnR5cGUgYikgewogICAgICBpZiAoYW1iaWd1b3VzVHlwZXNSZWNvcmRzICE9IG51bGwpIHsKICAgICAgICBhbWJpZ3VvdXNUeXBlc1JlY29yZHMuYWRkKG5ldyBBbWJpZ3VvdXNUeXBlc1JlY29yZChjbHMsIGEsIGIpKTsKICAgICAgfQogICAgfTsKICAgIGlmIChoaWVyYXJjaHkgPT0gbnVsbCkgewogICAgICBoaWVyYXJjaHkgPSBuZXcgQ2xhc3NIaWVyYXJjaHkoY29tcHV0ZUZ1bGxDb21wb25lbnQoKSwKICAgICAgICAgIG9uQW1iaWd1b3VzU3VwZXJ0eXBlczogb25BbWJpZ3VvdXNTdXBlcnR5cGVzKTsKICAgIH0gZWxzZSB7CiAgICAgIGhpZXJhcmNoeS5vbkFtYmlndW91c1N1cGVydHlwZXMgPSBvbkFtYmlndW91c1N1cGVydHlwZXM7CiAgICAgIENvbXBvbmVudCBjb21wb25lbnQgPSBjb21wdXRlRnVsbENvbXBvbmVudCgpOwogICAgICBoaWVyYXJjaHkuYXBwbHlUcmVlQ2hhbmdlcyhjb25zdCBbXSwgY29tcG9uZW50LmxpYnJhcmllcywKICAgICAgICAgIHJlaXNzdWVBbWJpZ3VvdXNTdXBlcnR5cGVzRm9yOiBjb21wb25lbnQpOwogICAgfQogICAgZm9yIChBbWJpZ3VvdXNUeXBlc1JlY29yZCByZWNvcmQgaW4gYW1iaWd1b3VzVHlwZXNSZWNvcmRzKSB7CiAgICAgIGhhbmRsZUFtYmlndW91c1N1cGVydHlwZXMocmVjb3JkLmNscywgcmVjb3JkLmEsIHJlY29yZC5iKTsKICAgIH0KICAgIGFtYmlndW91c1R5cGVzUmVjb3JkcyA9IG51bGw7CiAgICB0aWNrZXIubG9nTXMoIkNvbXB1dGVkIGNsYXNzIGhpZXJhcmNoeSIpOwogIH0KCiAgdm9pZCBoYW5kbGVBbWJpZ3VvdXNTdXBlcnR5cGVzKENsYXNzIGNscywgU3VwZXJ0eXBlIGEsIFN1cGVydHlwZSBiKSB7CiAgICBhZGRQcm9ibGVtKAogICAgICAgIHRlbXBsYXRlQW1iaWd1b3VzU3VwZXJ0eXBlcy53aXRoQXJndW1lbnRzKAogICAgICAgICAgICBjbHMubmFtZSwgYS5hc0ludGVyZmFjZVR5cGUsIGIuYXNJbnRlcmZhY2VUeXBlKSwKICAgICAgICBjbHMuZmlsZU9mZnNldCwKICAgICAgICBub0xlbmd0aCwKICAgICAgICBjbHMuZmlsZVVyaSk7CiAgfQoKICB2b2lkIGlnbm9yZUFtYmlndW91c1N1cGVydHlwZXMoQ2xhc3MgY2xzLCBTdXBlcnR5cGUgYSwgU3VwZXJ0eXBlIGIpIHt9CgogIHZvaWQgY29tcHV0ZUNvcmVUeXBlcyhDb21wb25lbnQgY29tcG9uZW50KSB7CiAgICBjb3JlVHlwZXMgPSBuZXcgQ29yZVR5cGVzKGNvbXBvbmVudCk7CgogICAgZnV0dXJlT2ZCb3R0b20gPSBuZXcgSW50ZXJmYWNlVHlwZSgKICAgICAgICBjb3JlVHlwZXMuZnV0dXJlQ2xhc3MsIDxEYXJ0VHlwZT5bY29uc3QgQm90dG9tVHlwZSgpXSk7CiAgICBpdGVyYWJsZU9mQm90dG9tID0gbmV3IEludGVyZmFjZVR5cGUoCiAgICAgICAgY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3MsIDxEYXJ0VHlwZT5bY29uc3QgQm90dG9tVHlwZSgpXSk7CiAgICBzdHJlYW1PZkJvdHRvbSA9IG5ldyBJbnRlcmZhY2VUeXBlKAogICAgICAgIGNvcmVUeXBlcy5zdHJlYW1DbGFzcywgPERhcnRUeXBlPltjb25zdCBCb3R0b21UeXBlKCldKTsKCiAgICB0aWNrZXIubG9nTXMoIkNvbXB1dGVkIGNvcmUgdHlwZXMiKTsKICB9CgogIHZvaWQgY2hlY2tTdXBlcnR5cGVzKExpc3Q8U291cmNlQ2xhc3NCdWlsZGVyPiBzb3VyY2VDbGFzc2VzKSB7CiAgICBmb3IgKFNvdXJjZUNsYXNzQnVpbGRlciBidWlsZGVyIGluIHNvdXJjZUNsYXNzZXMpIHsKICAgICAgaWYgKGJ1aWxkZXIubGlicmFyeS5sb2FkZXIgPT0gdGhpcyAmJiAhYnVpbGRlci5pc1BhdGNoKSB7CiAgICAgICAgYnVpbGRlci5jaGVja1N1cGVydHlwZXMoY29yZVR5cGVzKTsKICAgICAgfQogICAgfQogICAgdGlja2VyLmxvZ01zKCJDaGVja2VkIHN1cGVydHlwZXMiKTsKICB9CgogIHZvaWQgY2hlY2tCb3VuZHMoKSB7CiAgICBpZiAodGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKCiAgICBidWlsZGVycy5mb3JFYWNoKChVcmkgdXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAgIGlmIChsaWJyYXJ5IGlzIFNvdXJjZUxpYnJhcnlCdWlsZGVyKSB7CiAgICAgICAgaWYgKGxpYnJhcnkubG9hZGVyID09IHRoaXMpIHsKICAgICAgICAgIGxpYnJhcnkKICAgICAgICAgICAgICAuY2hlY2tCb3VuZHNJbk91dGxpbmUodHlwZUluZmVyZW5jZUVuZ2luZS50eXBlU2NoZW1hRW52aXJvbm1lbnQpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICB0aWNrZXIubG9nTXMoIkNoZWNrZWQgdHlwZSBhcmd1bWVudHMgb2Ygc3VwZXJzIGFnYWluc3QgdGhlIGJvdW5kcyIpOwogIH0KCiAgdm9pZCBjaGVja092ZXJyaWRlcyhMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gc291cmNlQ2xhc3NlcykgewogICAgTGlzdDxEZWxheWVkT3ZlcnJpZGVDaGVjaz4gb3ZlcnJpZGVDaGVja3MgPQogICAgICAgIGJ1aWxkZXJIaWVyYXJjaHkub3ZlcnJpZGVDaGVja3MudG9MaXN0KCk7CiAgICBidWlsZGVySGllcmFyY2h5Lm92ZXJyaWRlQ2hlY2tzLmNsZWFyKCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG92ZXJyaWRlQ2hlY2tzLmxlbmd0aDsgaSsrKSB7CiAgICAgIG92ZXJyaWRlQ2hlY2tzW2ldLmNoZWNrKGJ1aWxkZXJIaWVyYXJjaHkpOwogICAgfQogICAgdGlja2VyLmxvZ01zKCJDaGVja2VkICR7b3ZlcnJpZGVDaGVja3MubGVuZ3RofSBvdmVycmlkZXMiKTsKCiAgICB0eXBlSW5mZXJlbmNlRW5naW5lPy5maW5pc2hUb3BMZXZlbEluaXRpYWxpemluZ0Zvcm1hbHMoKTsKICAgIHRpY2tlci5sb2dNcygiRmluaXNoZWQgaW5pdGlhbGl6aW5nIGZvcm1hbHMiKTsKICB9CgogIHZvaWQgY2hlY2tBYnN0cmFjdE1lbWJlcnMoTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IHNvdXJjZUNsYXNzZXMpIHsKICAgIExpc3Q8RGVsYXllZE1lbWJlcj4gZGVsYXllZE1lbWJlckNoZWNrcyA9CiAgICAgICAgYnVpbGRlckhpZXJhcmNoeS5kZWxheWVkTWVtYmVyQ2hlY2tzLnRvTGlzdCgpOwogICAgYnVpbGRlckhpZXJhcmNoeS5kZWxheWVkTWVtYmVyQ2hlY2tzLmNsZWFyKCk7CiAgICBTZXQ8Q2xhc3M+IGNoYW5nZWRDbGFzc2VzID0gbmV3IFNldDxDbGFzcz4oKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVsYXllZE1lbWJlckNoZWNrcy5sZW5ndGg7IGkrKykgewogICAgICBkZWxheWVkTWVtYmVyQ2hlY2tzW2ldLmNoZWNrKGJ1aWxkZXJIaWVyYXJjaHkpOwogICAgICBjaGFuZ2VkQ2xhc3Nlcy5hZGQoZGVsYXllZE1lbWJlckNoZWNrc1tpXS5wYXJlbnQuY2xzKTsKICAgIH0KICAgIHRpY2tlci5sb2dNcygKICAgICAgICAiQ29tcHV0ZWQgJHtkZWxheWVkTWVtYmVyQ2hlY2tzLmxlbmd0aH0gY29tYmluZWQgbWVtYmVyIHNpZ25hdHVyZXMiKTsKCiAgICBoaWVyYXJjaHkuYXBwbHlNZW1iZXJDaGFuZ2VzKGNoYW5nZWRDbGFzc2VzLCBmaW5kRGVzY2VuZGFudHM6IGZhbHNlKTsKICAgIHRpY2tlcgogICAgICAgIC5sb2dNcygiVXBkYXRlZCAke2NoYW5nZWRDbGFzc2VzLmxlbmd0aH0gY2xhc3NlcyBpbiBrZXJuZWwgaGllcmFyY2h5Iik7CiAgfQoKICB2b2lkIGNoZWNrUmVkaXJlY3RpbmdGYWN0b3JpZXMoTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IHNvdXJjZUNsYXNzZXMpIHsKICAgIC8vIFRPRE8oYWhlKTogTW92ZSB0aGlzIHRvIFtDbGFzc0hpZXJhcmNoeUJ1aWxkZXJdLgogICAgaWYgKHRhcmdldC5sZWdhY3lNb2RlKSByZXR1cm47CiAgICBmb3IgKFNvdXJjZUNsYXNzQnVpbGRlciBidWlsZGVyIGluIHNvdXJjZUNsYXNzZXMpIHsKICAgICAgaWYgKGJ1aWxkZXIubGlicmFyeS5sb2FkZXIgPT0gdGhpcyAmJiAhYnVpbGRlci5pc1BhdGNoKSB7CiAgICAgICAgYnVpbGRlci5jaGVja1JlZGlyZWN0aW5nRmFjdG9yaWVzKAogICAgICAgICAgICB0eXBlSW5mZXJlbmNlRW5naW5lLnR5cGVTY2hlbWFFbnZpcm9ubWVudCk7CiAgICAgIH0KICAgIH0KICAgIHRpY2tlci5sb2dNcygiQ2hlY2tlZCByZWRpcmVjdGluZyBmYWN0b3JpZXMiKTsKICB9CgogIHZvaWQgYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVycyhMaXN0PFNvdXJjZUNsYXNzQnVpbGRlcj4gc291cmNlQ2xhc3NlcykgewogICAgLy8gVE9ETyhhaGUpOiBNb3ZlIHRoaXMgdG8gW0NsYXNzSGllcmFyY2h5QnVpbGRlcl0uCiAgICBpZiAoIXRhcmdldC5iYWNrZW5kVGFyZ2V0LmVuYWJsZU5vU3VjaE1ldGhvZEZvcndhcmRlcnMpIHJldHVybjsKCiAgICBMaXN0PENsYXNzPiBjaGFuZ2VkQ2xhc3NlcyA9IG5ldyBMaXN0PENsYXNzPigpOwogICAgZm9yIChTb3VyY2VDbGFzc0J1aWxkZXIgYnVpbGRlciBpbiBzb3VyY2VDbGFzc2VzKSB7CiAgICAgIGlmIChidWlsZGVyLmxpYnJhcnkubG9hZGVyID09IHRoaXMgJiYgIWJ1aWxkZXIuaXNQYXRjaCkgewogICAgICAgIGlmIChidWlsZGVyLmFkZE5vU3VjaE1ldGhvZEZvcndhcmRlcnModGFyZ2V0LCBoaWVyYXJjaHkpKSB7CiAgICAgICAgICBjaGFuZ2VkQ2xhc3Nlcy5hZGQoYnVpbGRlci50YXJnZXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaGllcmFyY2h5LmFwcGx5TWVtYmVyQ2hhbmdlcyhjaGFuZ2VkQ2xhc3NlcywgZmluZERlc2NlbmRhbnRzOiB0cnVlKTsKICAgIHRpY2tlci5sb2dNcygiQWRkZWQgbm9TdWNoTWV0aG9kIGZvcndhcmRlcnMiKTsKICB9CgogIHZvaWQgY2hlY2tNaXhpbnMoTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IHNvdXJjZUNsYXNzZXMpIHsKICAgIGZvciAoU291cmNlQ2xhc3NCdWlsZGVyIGJ1aWxkZXIgaW4gc291cmNlQ2xhc3NlcykgewogICAgICBpZiAoYnVpbGRlci5saWJyYXJ5LmxvYWRlciA9PSB0aGlzICYmICFidWlsZGVyLmlzUGF0Y2gpIHsKICAgICAgICBpZiAoYnVpbGRlci5pc01peGluRGVjbGFyYXRpb24pIHsKICAgICAgICAgIGJ1aWxkZXIuY2hlY2tNaXhpbkRlY2xhcmF0aW9uKCk7CiAgICAgICAgfQoKICAgICAgICBDbGFzcyBtaXhlZEluQ2xhc3MgPSBidWlsZGVyLmNscy5taXhlZEluQ2xhc3M7CiAgICAgICAgaWYgKG1peGVkSW5DbGFzcyAhPSBudWxsICYmIG1peGVkSW5DbGFzcy5pc01peGluRGVjbGFyYXRpb24pIHsKICAgICAgICAgIGJ1aWxkZXIuY2hlY2tNaXhpbkFwcGxpY2F0aW9uKGhpZXJhcmNoeSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB0aWNrZXIubG9nTXMoIkNoZWNrZWQgbWl4aW4gZGVjbGFyYXRpb24gYXBwbGljYXRpb25zIik7CiAgfQoKICB2b2lkIGJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKCkgewogICAgYnVpbGRlcnMuZm9yRWFjaCgoVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgICBpZiAobGlicmFyeS5sb2FkZXIgPT0gdGhpcykgewogICAgICAgIGxpYnJhcnkuYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnMoKTsKICAgICAgICBJdGVyYXRvcjxEZWNsYXJhdGlvbj4gaXRlcmF0b3IgPSBsaWJyYXJ5Lml0ZXJhdG9yOwogICAgICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgICBEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICAgICAgICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgICAgIGRlY2xhcmF0aW9uLmJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKGxpYnJhcnkpOwogICAgICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBNZW1iZXJCdWlsZGVyKSB7CiAgICAgICAgICAgIGRlY2xhcmF0aW9uLmJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKGxpYnJhcnkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIGJ1aWxkQ2xhc3NIaWVyYXJjaHkoCiAgICAgIExpc3Q8U291cmNlQ2xhc3NCdWlsZGVyPiBzb3VyY2VDbGFzc2VzLCBDbGFzc0J1aWxkZXIgb2JqZWN0Q2xhc3MpIHsKICAgIGJ1aWxkZXJIaWVyYXJjaHkgPSBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIuYnVpbGQoCiAgICAgICAgb2JqZWN0Q2xhc3MsIHNvdXJjZUNsYXNzZXMsIHRoaXMsIGNvcmVUeXBlcyk7CiAgICB0eXBlSW5mZXJlbmNlRW5naW5lPy5oaWVyYXJjaHlCdWlsZGVyID0gYnVpbGRlckhpZXJhcmNoeTsKICAgIHRpY2tlci5sb2dNcygiQnVpbHQgY2xhc3MgaGllcmFyY2h5Iik7CiAgfQoKICB2b2lkIGNyZWF0ZVR5cGVJbmZlcmVuY2VFbmdpbmUoKSB7CiAgICBpZiAodGFyZ2V0LmxlZ2FjeU1vZGUpIHJldHVybjsKICAgIHR5cGVJbmZlcmVuY2VFbmdpbmUgPSBuZXcgU2hhZG93VHlwZUluZmVyZW5jZUVuZ2luZShpbnN0cnVtZW50YXRpb24pOwogIH0KCiAgdm9pZCBwZXJmb3JtVG9wTGV2ZWxJbmZlcmVuY2UoTGlzdDxTb3VyY2VDbGFzc0J1aWxkZXI+IHNvdXJjZUNsYXNzZXMpIHsKICAgIGlmICh0YXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwoKICAgIC8vLyBUaGUgZmlyc3QgcGhhc2Ugb2YgdG9wIGxldmVsIGluaXRpYWxpemVyIGluZmVyZW5jZSwgd2hpY2ggY29uc2lzdHMgb2YKICAgIC8vLyBjcmVhdGluZyBrZXJuZWwgb2JqZWN0cyBmb3IgYWxsIGZpZWxkcyBhbmQgdG9wIGxldmVsIHZhcmlhYmxlcyB0aGF0CiAgICAvLy8gbWlnaHQgYmUgc3ViamVjdCB0byB0eXBlIGluZmVyZW5jZSwgYW5kIHJlY29yZHMgZGVwZW5kZW5jaWVzIGJldHdlZW4KICAgIC8vLyB0aGVtLgogICAgdHlwZUluZmVyZW5jZUVuZ2luZS5wcmVwYXJlVG9wTGV2ZWwoY29yZVR5cGVzLCBoaWVyYXJjaHkpOwogICAgTGlzdDxGaWVsZEJ1aWxkZXI+IGFsbEltcGxpY2l0bHlUeXBlZEZpZWxkcyA9IDxGaWVsZEJ1aWxkZXI+W107CiAgICBmb3IgKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkgaW4gYnVpbGRlcnMudmFsdWVzKSB7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciA9PSB0aGlzKSB7CiAgICAgICAgTGlzdDxGaWVsZEJ1aWxkZXI+IGltcGxpY2l0bHlUeXBlZEZpZWxkcyA9CiAgICAgICAgICAgIGxpYnJhcnkudGFrZUltcGxpY2l0bHlUeXBlZEZpZWxkcygpOwogICAgICAgIGlmIChpbXBsaWNpdGx5VHlwZWRGaWVsZHMgIT0gbnVsbCkgewogICAgICAgICAgYWxsSW1wbGljaXRseVR5cGVkRmllbGRzLmFkZEFsbChpbXBsaWNpdGx5VHlwZWRGaWVsZHMpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYWxsSW1wbGljaXRseVR5cGVkRmllbGRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIC8vIFRPRE8oYWhlKTogVGhpcyBjYW4gY2F1c2UgYSBjcmFzaCBmb3IgcGFydHMgdGhhdCBmYWlsZWQgdG8gZ2V0CiAgICAgIC8vIGluY2x1ZGVkLCBzZWUgZm9yIGV4YW1wbGUsCiAgICAgIC8vIHRlc3RzL3N0YW5kYWxvbmVfMi9pby9odHRwX2Nvb2tpZV9kYXRlX3Rlc3QuZGFydC4KICAgICAgYWxsSW1wbGljaXRseVR5cGVkRmllbGRzW2ldLmluZmVyVHlwZSgpOwogICAgfQoKICAgIHR5cGVJbmZlcmVuY2VFbmdpbmUuaXNUeXBlSW5mZXJlbmNlUHJlcGFyZWQgPSB0cnVlOwoKICAgIC8vIFNpbmNlIGZpbmFsaXphdGlvbiBvZiBjb3ZhcmlhbmNlIG1heSBoYXZlIGFkZGVkIGZvcndhcmRpbmcgc3R1YnMsIHdlIG5lZWQKICAgIC8vIHRvIHJlY29tcHV0ZSB0aGUgY2xhc3MgaGllcmFyY2h5IHNvIHRoYXQgbWV0aG9kIGNvbXBpbGF0aW9uIHdpbGwgcHJvcGVybHkKICAgIC8vIHRhcmdldCB0aG9zZSBmb3J3YXJkaW5nIHN0dWJzLgogICAgaGllcmFyY2h5Lm9uQW1iaWd1b3VzU3VwZXJ0eXBlcyA9IGlnbm9yZUFtYmlndW91c1N1cGVydHlwZXM7CiAgICB0aWNrZXIubG9nTXMoIlBlcmZvcm1lZCB0b3AgbGV2ZWwgaW5mZXJlbmNlIik7CiAgfQoKICB2b2lkIHRyYW5zZm9ybVBvc3RJbmZlcmVuY2UoCiAgICAgIFRyZWVOb2RlIG5vZGUsIGJvb2wgdHJhbnNmb3JtU2V0TGl0ZXJhbHMsIGJvb2wgdHJhbnNmb3JtQ29sbGVjdGlvbnMpIHsKICAgIGlmICh0cmFuc2Zvcm1Db2xsZWN0aW9ucykgewogICAgICBub2RlLmFjY2VwdChjb2xsZWN0aW9uVHJhbnNmb3JtZXIgPz89IG5ldyBDb2xsZWN0aW9uVHJhbnNmb3JtZXIodGhpcykpOwogICAgfQogICAgaWYgKHRyYW5zZm9ybVNldExpdGVyYWxzKSB7CiAgICAgIG5vZGUuYWNjZXB0KHNldExpdGVyYWxUcmFuc2Zvcm1lciA/Pz0gbmV3IFNldExpdGVyYWxUcmFuc2Zvcm1lcih0aGlzLAogICAgICAgICAgdHJhbnNmb3JtQ29uc3Q6ICF0YXJnZXQuZW5hYmxlQ29uc3RhbnRVcGRhdGUyMDE4KSk7CiAgICB9CiAgfQoKICB2b2lkIHRyYW5zZm9ybUxpc3RQb3N0SW5mZXJlbmNlKExpc3Q8VHJlZU5vZGU+IGxpc3QsCiAgICAgIGJvb2wgdHJhbnNmb3JtU2V0TGl0ZXJhbHMsIGJvb2wgdHJhbnNmb3JtQ29sbGVjdGlvbnMpIHsKICAgIGlmICh0cmFuc2Zvcm1Db2xsZWN0aW9ucykgewogICAgICBDb2xsZWN0aW9uVHJhbnNmb3JtZXIgdHJhbnNmb3JtZXIgPQogICAgICAgICAgY29sbGVjdGlvblRyYW5zZm9ybWVyID8/PSBuZXcgQ29sbGVjdGlvblRyYW5zZm9ybWVyKHRoaXMpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHsKICAgICAgICBsaXN0W2ldID0gbGlzdFtpXS5hY2NlcHQodHJhbnNmb3JtZXIpOwogICAgICB9CiAgICB9CiAgICBpZiAodHJhbnNmb3JtU2V0TGl0ZXJhbHMpIHsKICAgICAgU2V0TGl0ZXJhbFRyYW5zZm9ybWVyIHRyYW5zZm9ybWVyID0gc2V0TGl0ZXJhbFRyYW5zZm9ybWVyID8/PQogICAgICAgICAgbmV3IFNldExpdGVyYWxUcmFuc2Zvcm1lcih0aGlzLAogICAgICAgICAgICAgIHRyYW5zZm9ybUNvbnN0OiAhdGFyZ2V0LmVuYWJsZUNvbnN0YW50VXBkYXRlMjAxOCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkgewogICAgICAgIGxpc3RbaV0gPSBsaXN0W2ldLmFjY2VwdCh0cmFuc2Zvcm1lcik7CiAgICAgIH0KICAgIH0KICB9CgogIEV4cHJlc3Npb24gaW5zdGFudGlhdGVJbnZvY2F0aW9uKEV4cHJlc3Npb24gcmVjZWl2ZXIsIFN0cmluZyBuYW1lLAogICAgICBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgb2Zmc2V0LCBib29sIGlzU3VwZXIpIHsKICAgIHJldHVybiB0YXJnZXQuYmFja2VuZFRhcmdldC5pbnN0YW50aWF0ZUludm9jYXRpb24oCiAgICAgICAgY29yZVR5cGVzLCByZWNlaXZlciwgbmFtZSwgYXJndW1lbnRzLCBvZmZzZXQsIGlzU3VwZXIpOwogIH0KCiAgRXhwcmVzc2lvbiBpbnN0YW50aWF0ZU5vU3VjaE1ldGhvZEVycm9yKAogICAgICBFeHByZXNzaW9uIHJlY2VpdmVyLCBTdHJpbmcgbmFtZSwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IG9mZnNldCwKICAgICAge2Jvb2wgaXNNZXRob2Q6IGZhbHNlLAogICAgICBib29sIGlzR2V0dGVyOiBmYWxzZSwKICAgICAgYm9vbCBpc1NldHRlcjogZmFsc2UsCiAgICAgIGJvb2wgaXNGaWVsZDogZmFsc2UsCiAgICAgIGJvb2wgaXNMb2NhbFZhcmlhYmxlOiBmYWxzZSwKICAgICAgYm9vbCBpc0R5bmFtaWM6IGZhbHNlLAogICAgICBib29sIGlzU3VwZXI6IGZhbHNlLAogICAgICBib29sIGlzU3RhdGljOiBmYWxzZSwKICAgICAgYm9vbCBpc0NvbnN0cnVjdG9yOiBmYWxzZSwKICAgICAgYm9vbCBpc1RvcExldmVsOiBmYWxzZX0pIHsKICAgIHJldHVybiB0YXJnZXQuYmFja2VuZFRhcmdldC5pbnN0YW50aWF0ZU5vU3VjaE1ldGhvZEVycm9yKAogICAgICAgIGNvcmVUeXBlcywgcmVjZWl2ZXIsIG5hbWUsIGFyZ3VtZW50cywgb2Zmc2V0LAogICAgICAgIGlzTWV0aG9kOiBpc01ldGhvZCwKICAgICAgICBpc0dldHRlcjogaXNHZXR0ZXIsCiAgICAgICAgaXNTZXR0ZXI6IGlzU2V0dGVyLAogICAgICAgIGlzRmllbGQ6IGlzRmllbGQsCiAgICAgICAgaXNMb2NhbFZhcmlhYmxlOiBpc0xvY2FsVmFyaWFibGUsCiAgICAgICAgaXNEeW5hbWljOiBpc0R5bmFtaWMsCiAgICAgICAgaXNTdXBlcjogaXNTdXBlciwKICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsCiAgICAgICAgaXNDb25zdHJ1Y3RvcjogaXNDb25zdHJ1Y3RvciwKICAgICAgICBpc1RvcExldmVsOiBpc1RvcExldmVsKTsKICB9CgogIHZvaWQgcmVsZWFzZUFuY2lsbGFyeVJlc291cmNlcygpIHsKICAgIGhpZXJhcmNoeSA9IG51bGw7CiAgICB0eXBlSW5mZXJlbmNlRW5naW5lID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIENsYXNzQnVpbGRlciBjb21wdXRlQ2xhc3NCdWlsZGVyRnJvbVRhcmdldENsYXNzKENsYXNzIGNscykgewogICAgTGlicmFyeSBrZXJuZWxMaWJyYXJ5ID0gY2xzLmVuY2xvc2luZ0xpYnJhcnk7CiAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gYnVpbGRlcnNba2VybmVsTGlicmFyeS5pbXBvcnRVcmldOwogICAgaWYgKGxpYnJhcnkgPT0gbnVsbCkgewogICAgICByZXR1cm4gdGFyZ2V0LmRpbGxUYXJnZXQubG9hZGVyLmNvbXB1dGVDbGFzc0J1aWxkZXJGcm9tVGFyZ2V0Q2xhc3MoY2xzKTsKICAgIH0KICAgIHJldHVybiBsaWJyYXJ5LmdldExvY2FsTWVtYmVyKGNscy5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVCdWlsZGVyIGNvbXB1dGVUeXBlQnVpbGRlcihEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gdHlwZS5hY2NlcHQobmV3IFR5cGVCdWlsZGVyQ29tcHV0ZXIodGhpcykpOwogIH0KfQoKLy8vIEEgbWluaW1hbCBpbXBsZW1lbnRhdGlvbiBvZiBkYXJ0OmNvcmUgdGhhdCBpcyBzdWZmaWNpZW50IHRvIGNyZWF0ZSBhbgovLy8gaW5zdGFuY2Ugb2YgW0NvcmVUeXBlc10gYW5kIGNvbXBpbGUgYSBwcm9ncmFtLgpjb25zdCBTdHJpbmcgZGVmYXVsdERhcnRDb3JlU291cmNlID0gIiIiCmltcG9ydCAnZGFydDpfaW50ZXJuYWwnOwppbXBvcnQgJ2RhcnQ6YXN5bmMnOwoKZXhwb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEZ1dHVyZSwgU3RyZWFtOwoKcHJpbnQob2JqZWN0KSB7fQoKY2xhc3MgSXRlcmF0b3Ige30KCmNsYXNzIEl0ZXJhYmxlIHt9CgpjbGFzcyBMaXN0IGV4dGVuZHMgSXRlcmFibGUgewogIGZhY3RvcnkgTGlzdC51bm1vZGlmaWFibGUoZWxlbWVudHMpID0+IG51bGw7Cn0KCmNsYXNzIE1hcCBleHRlbmRzIEl0ZXJhYmxlIHsKICBmYWN0b3J5IE1hcC51bm1vZGlmaWFibGUob3RoZXIpID0+IG51bGw7Cn0KCmNsYXNzIE5vU3VjaE1ldGhvZEVycm9yIHsKICBOb1N1Y2hNZXRob2RFcnJvci53aXRoSW52b2NhdGlvbihyZWNlaXZlciwgaW52b2NhdGlvbik7Cn0KCmNsYXNzIE51bGwge30KCmNsYXNzIE9iamVjdCB7CiAgbm9TdWNoTWV0aG9kKGludm9jYXRpb24pID0+IG51bGw7Cn0KCmNsYXNzIFN0cmluZyB7fQoKY2xhc3MgU3ltYm9sIHt9CgpjbGFzcyBTZXQge30KCmNsYXNzIFR5cGUge30KCmNsYXNzIF9JbnZvY2F0aW9uTWlycm9yIHsKICBfSW52b2NhdGlvbk1pcnJvci5fd2l0aFR5cGUoX21lbWJlck5hbWUsIF90eXBlLCBfdHlwZUFyZ3VtZW50cywKICAgICAgX3Bvc2l0aW9uYWxBcmd1bWVudHMsIF9uYW1lZEFyZ3VtZW50cyk7Cn0KCmNsYXNzIGJvb2wge30KCmNsYXNzIGRvdWJsZSBleHRlbmRzIG51bSB7fQoKY2xhc3MgaW50IGV4dGVuZHMgbnVtIHt9CgpjbGFzcyBudW0ge30KCmNsYXNzIF9TeW5jSXRlcmFibGUge30KCmNsYXNzIF9TeW5jSXRlcmF0b3IgewogIHZhciBfY3VycmVudDsKICB2YXIgX3lpZWxkRWFjaEl0ZXJhYmxlOwp9CgpjbGFzcyBGdW5jdGlvbiB7fQoiIiI7CgovLy8gQSBtaW5pbWFsIGltcGxlbWVudGF0aW9uIG9mIGRhcnQ6YXN5bmMgdGhhdCBpcyBzdWZmaWNpZW50IHRvIGNyZWF0ZSBhbgovLy8gaW5zdGFuY2Ugb2YgW0NvcmVUeXBlc10gYW5kIGNvbXBpbGUgcHJvZ3JhbS4KY29uc3QgU3RyaW5nIGRlZmF1bHREYXJ0QXN5bmNTb3VyY2UgPSAiIiIKX2FzeW5jRXJyb3JXcmFwcGVySGVscGVyKGNvbnRpbnVhdGlvbikge30KCl9hc3luY1N0YWNrVHJhY2VIZWxwZXIoYXN5bmNfb3ApIHt9CgpfYXN5bmNUaGVuV3JhcHBlckhlbHBlcihjb250aW51YXRpb24pIHt9CgpfYXdhaXRIZWxwZXIob2JqZWN0LCB0aGVuQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2ssIGF3YWl0ZXIpIHt9CgpfY29tcGxldGVPbkFzeW5jUmV0dXJuKGNvbXBsZXRlciwgdmFsdWUpIHt9CgpjbGFzcyBfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlciB7CiAgYWRkKGV2ZW50KSB7fQoKICBhZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSkge30KCiAgYWRkU3RyZWFtKHN0cmVhbSkge30KCiAgY2xvc2UoKSB7fQoKICBnZXQgc3RyZWFtID0+IG51bGw7Cn0KCmNsYXNzIENvbXBsZXRlciB7CiAgZmFjdG9yeSBDb21wbGV0ZXIuc3luYygpID0+IG51bGw7CgogIGdldCBmdXR1cmU7CgogIGNvbXBsZXRlKFt2YWx1ZV0pOwoKICBjb21wbGV0ZUVycm9yKGVycm9yLCBbc3RhY2tUcmFjZV0pOwp9CgpjbGFzcyBGdXR1cmUgewogIGZhY3RvcnkgRnV0dXJlLm1pY3JvdGFzayhjb21wdXRhdGlvbikgPT4gbnVsbDsKfQoKY2xhc3MgRnV0dXJlT3Igewp9CgpjbGFzcyBfQXN5bmNBd2FpdENvbXBsZXRlciBpbXBsZW1lbnRzIENvbXBsZXRlciB7CiAgZ2V0IGZ1dHVyZSA9PiBudWxsOwoKICBjb21wbGV0ZShbdmFsdWVdKSB7fQoKICBjb21wbGV0ZUVycm9yKGVycm9yLCBbc3RhY2tUcmFjZV0pIHt9Cn0KCmNsYXNzIFN0cmVhbSB7fQoKY2xhc3MgX1N0cmVhbUl0ZXJhdG9yIHsKICBnZXQgY3VycmVudCA9PiBudWxsOwoKICBtb3ZlTmV4dCgpIHt9CgogIGNhbmNlbCgpIHt9Cn0KIiIiOwoKLy8vIEEgbWluaW1hbCBpbXBsZW1lbnRhdGlvbiBvZiBkYXJ0OmNvbGxlY3Rpb24gdGhhdCBpcyBzdWZmaWNpZW50IHRvIGNyZWF0ZSBhbgovLy8gaW5zdGFuY2Ugb2YgW0NvcmVUeXBlc10gYW5kIGNvbXBpbGUgcHJvZ3JhbS4KY29uc3QgU3RyaW5nIGRlZmF1bHREYXJ0Q29sbGVj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ZGVyLmRhcnRDc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9jb25zdGFudF9ldmFsdWF0b3IuZGFydMABN2svLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIFRoaXMgbGlicmFyeSBpbXBsZW1lbnRzIGEga2VybmVsMmtlcm5lbCBjb25zdGFudCBldmFsdWF0aW9uIHRyYW5zZm9ybWF0aW9uLgovLy8KLy8vIEV2ZW4gdGhvdWdoIGl0IGlzIGV4cGVjdGVkIHRoYXQgdGhlIGZyb250ZW5kIGRvZXMgbm90IGVtaXQga2VybmVsIEFTVCB3aGljaAovLy8gY29udGFpbnMgY29tcGlsZS10aW1lIGVycm9ycywgdGhpcyB0cmFuc2Zvcm1hdGlvbiBzdGlsbCBwZXJmb3JtcyBzb21lCi8vLyB2YWxpYXRpb24gYW5kIHRocm93cyBhIFtDb25zdGFudEV2YWx1YXRpb25FcnJvcl0gaWYgdGhlcmUgd2FzIGEgY29tcGlsZS10aW1lCi8vLyBlcnJvcnMuCi8vLwovLy8gRHVlIHRvIHRoZSBsYWNrIGluZm9ybWF0aW9uIHdoaWNoIGlzIGlzIG9ubHkgYXZhaWxhYmxlIGluIHRoZSBmcm9udC1lbmQsCi8vLyB0aGlzIHZhbGlkYXRpb24gaXMgaW5jb21wbGV0ZSAoZS5nLiB3aGV0aGVyIGFuIGludGVnZXIgbGl0ZXJhbCB1c2VkIHRoZQovLy8gaGV4YWRlY2ltYWwgc3ludGF4IG9yIG5vdCkuCi8vLwovLy8gRnVydGhlcm1vcmUgZHVlIHRvIHRoZSBsb3dlcmluZyBvZiBjZXJ0YWluIGNvbnN0cnVjdHMgaW4gdGhlIGZyb250LWVuZAovLy8gKGUuZy4gJz8/Jykgd2UgbmVlZCB0byBzdXBwb3J0IGEgc3VwZXItc2V0IG9mIHRoZSBub3JtYWwgY29uc3RhbnQgZXhwcmVzc2lvbgovLy8gbGFuZ3VhZ2UuICBJc3N1ZShodHRwOi8vZGFydGJ1Zy5jb20vMzE3OTkpCmxpYnJhcnkgZmFzdGEuY29uc3RhbnRfZXZhbHVhdG9yOwoKaW1wb3J0ICdkYXJ0OmNvcmUnIGhpZGUgTWFwRW50cnk7CgppbXBvcnQgJ2RhcnQ6aW8nIGFzIGlvOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2Nsb25lLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwva2VybmVsLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90YXJnZXQvdGFyZ2V0cy5kYXJ0JzsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBMb2NhdGVkTWVzc2FnZSwKICAgICAgICBNZXNzYWdlLAogICAgICAgIG1lc3NhZ2VDb25zdEV2YWxDaXJjdWxhcml0eSwKICAgICAgICBtZXNzYWdlQ29uc3RFdmFsQ29udGV4dCwKICAgICAgICBtZXNzYWdlQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uLAogICAgICAgIG1lc3NhZ2VDb25zdEV2YWxOb3RMaXN0T3JTZXRJblNwcmVhZCwKICAgICAgICBtZXNzYWdlQ29uc3RFdmFsTm90TWFwSW5TcHJlYWQsCiAgICAgICAgbWVzc2FnZUNvbnN0RXZhbE51bGxWYWx1ZSwKICAgICAgICBtZXNzYWdlQ29uc3RFdmFsVW5ldmFsdWF0ZWQsCiAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxEZWZlcnJlZExpYnJhcnksCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxEdXBsaWNhdGVFbGVtZW50LAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsRHVwbGljYXRlS2V5LAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsRWxlbWVudEltcGxlbWVudHNFcXVhbCwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbldpdGhNZXNzYWdlLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsRnJlZVR5cGVQYXJhbWV0ZXIsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkVHlwZSwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZSwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRFcXVhbHNPcGVyYW5kVHlwZSwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRNZXRob2RJbnZvY2F0aW9uLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFByb3BlcnR5R2V0LAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN0YXRpY0ludm9jYXRpb24sCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkU3RyaW5nSW50ZXJwb2xhdGlvbk9wZXJhbmQsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkU3ltYm9sTmFtZSwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEtleUltcGxlbWVudHNFcXVhbCwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbE5lZ2F0aXZlU2hpZnQsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxOb25Db25zdGFudExpdGVyYWwsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxOb25Db25zdGFudFZhcmlhYmxlR2V0LAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsWmVyb0Rpdmlzb3I7CgpwYXJ0ICdjb25zdGFudF9jb2xsZWN0aW9uX2J1aWxkZXJzLmRhcnQnOwoKQ29tcG9uZW50IHRyYW5zZm9ybUNvbXBvbmVudChDb21wb25lbnQgY29tcG9uZW50LCBDb25zdGFudHNCYWNrZW5kIGJhY2tlbmQsCiAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50RGVmaW5lcywgRXJyb3JSZXBvcnRlciBlcnJvclJlcG9ydGVyLAogICAge2Jvb2wga2VlcEZpZWxkczogdHJ1ZSwKICAgIGJvb2wgZXZhbHVhdGVBbm5vdGF0aW9uczogdHJ1ZSwKICAgIGJvb2wgZGVzdWdhclNldHM6IGZhbHNlLAogICAgYm9vbCBlcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudDogZmFsc2UsCiAgICBDb3JlVHlwZXMgY29yZVR5cGVzLAogICAgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5fSkgewogIGNvcmVUeXBlcyA/Pz0gbmV3IENvcmVUeXBlcyhjb21wb25lbnQpOwogIGhpZXJhcmNoeSA/Pz0gbmV3IENsYXNzSGllcmFyY2h5KGNvbXBvbmVudCk7CgogIGZpbmFsIHR5cGVFbnZpcm9ubWVudCA9IG5ldyBUeXBlRW52aXJvbm1lbnQoY29yZVR5cGVzLCBoaWVyYXJjaHkpOwoKICB0cmFuc2Zvcm1MaWJyYXJpZXMoY29tcG9uZW50LmxpYnJhcmllcywgYmFja2VuZCwgZW52aXJvbm1lbnREZWZpbmVzLAogICAgICB0eXBlRW52aXJvbm1lbnQsIGVycm9yUmVwb3J0ZXIsCiAgICAgIGtlZXBGaWVsZHM6IGtlZXBGaWVsZHMsCiAgICAgIGRlc3VnYXJTZXRzOiBkZXN1Z2FyU2V0cywKICAgICAgZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQ6IGVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50LAogICAgICBldmFsdWF0ZUFubm90YXRpb25zOiBldmFsdWF0ZUFubm90YXRpb25zKTsKICByZXR1cm4gY29tcG9uZW50Owp9Cgp2b2lkIHRyYW5zZm9ybUxpYnJhcmllcygKICAgIExpc3Q8TGlicmFyeT4gbGlicmFyaWVzLAogICAgQ29uc3RhbnRzQmFja2VuZCBiYWNrZW5kLAogICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudERlZmluZXMsCiAgICBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LAogICAgRXJyb3JSZXBvcnRlciBlcnJvclJlcG9ydGVyLAogICAge2Jvb2wga2VlcEZpZWxkczogdHJ1ZSwKICAgIGJvb2wga2VlcFZhcmlhYmxlczogZmFsc2UsCiAgICBib29sIGV2YWx1YXRlQW5ub3RhdGlvbnM6IHRydWUsCiAgICBib29sIGRlc3VnYXJTZXRzOiBmYWxzZSwKICAgIGJvb2wgZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQ6IGZhbHNlfSkgewogIGZpbmFsIENvbnN0YW50c1RyYW5zZm9ybWVyIGNvbnN0YW50c1RyYW5zZm9ybWVyID0gbmV3IENvbnN0YW50c1RyYW5zZm9ybWVyKAogICAgICBiYWNrZW5kLAogICAgICBlbnZpcm9ubWVudERlZmluZXMsCiAgICAgIGtlZXBGaWVsZHMsCiAgICAgIGtlZXBWYXJpYWJsZXMsCiAgICAgIGV2YWx1YXRlQW5ub3RhdGlvbnMsCiAgICAgIGRlc3VnYXJTZXRzLAogICAgICBlcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudCwKICAgICAgdHlwZUVudmlyb25tZW50LAogICAgICBlcnJvclJlcG9ydGVyKTsKICBmb3IgKGZpbmFsIExpYnJhcnkgbGlicmFyeSBpbiBsaWJyYXJpZXMpIHsKICAgIGNvbnN0YW50c1RyYW5zZm9ybWVyLmNvbnZlcnRMaWJyYXJ5KGxpYnJhcnkpOwogIH0KfQoKY2xhc3MgSmF2YVNjcmlwdEludENvbnN0YW50IGV4dGVuZHMgRG91YmxlQ29uc3RhbnQgewogIGZpbmFsIEJpZ0ludCBiaWdJbnRWYWx1ZTsKICBKYXZhU2NyaXB0SW50Q29uc3RhbnQoaW50IHZhbHVlKSA6IHRoaXMuZnJvbUJpZ0ludChCaWdJbnQuZnJvbSh2YWx1ZSkpOwogIEphdmFTY3JpcHRJbnRDb25zdGFudC5mcm9tRG91YmxlKGRvdWJsZSB2YWx1ZSkKICAgICAgOiBiaWdJbnRWYWx1ZSA9IEJpZ0ludC5mcm9tKHZhbHVlKSwKICAgICAgICBzdXBlcih2YWx1ZSk7CiAgSmF2YVNjcmlwdEludENvbnN0YW50LmZyb21CaWdJbnQodGhpcy5iaWdJbnRWYWx1ZSkKICAgICAgOiBzdXBlcihiaWdJbnRWYWx1ZS50b0RvdWJsZSgpKTsKICBKYXZhU2NyaXB0SW50Q29uc3RhbnQuZnJvbVVJbnQ2NChpbnQgdmFsdWUpCiAgICAgIDogdGhpcy5mcm9tQmlnSW50KEJpZ0ludC5mcm9tKHZhbHVlKS50b1Vuc2lnbmVkKDY0KSk7CgogIERhcnRUeXBlIGdldFR5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSA9PiB0eXBlcy5pbnRUeXBlOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJGJpZ0ludFZhbHVlJzsKfQoKY2xhc3MgQ29uc3RhbnRzVHJhbnNmb3JtZXIgZXh0ZW5kcyBUcmFuc2Zvcm1lciB7CiAgZmluYWwgQ29uc3RhbnRzQmFja2VuZCBiYWNrZW5kOwogIGZpbmFsIENvbnN0YW50RXZhbHVhdG9yIGNvbnN0YW50RXZhbHVhdG9yOwogIGZpbmFsIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQ7CgogIC8vLyBXaGV0aGVyIHRvIHByZXNlcnZlIGNvbnN0YW50IFtGaWVsZF1zLiAgQWxsIHVzZS1zaXRlcyB3aWxsIGJlIHJld3JpdHRlbi4KICBmaW5hbCBib29sIGtlZXBGaWVsZHM7CiAgZmluYWwgYm9vbCBrZWVwVmFyaWFibGVzOwogIGZpbmFsIGJvb2wgZXZhbHVhdGVBbm5vdGF0aW9uczsKICBmaW5hbCBib29sIGRlc3VnYXJTZXRzOwogIGZpbmFsIGJvb2wgZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQ7CgogIENvbnN0YW50c1RyYW5zZm9ybWVyKAogICAgICB0aGlzLmJhY2tlbmQsCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnREZWZpbmVzLAogICAgICB0aGlzLmtlZXBGaWVsZHMsCiAgICAgIHRoaXMua2VlcFZhcmlhYmxlcywKICAgICAgdGhpcy5ldmFsdWF0ZUFubm90YXRpb25zLAogICAgICB0aGlzLmRlc3VnYXJTZXRzLAogICAgICB0aGlzLmVycm9yT25VbmV2YWx1YXRlZENvbnN0YW50LAogICAgICB0aGlzLnR5cGVFbnZpcm9ubWVudCwKICAgICAgRXJyb3JSZXBvcnRlciBlcnJvclJlcG9ydGVyKQogICAgICA6IGNvbnN0YW50RXZhbHVhdG9yID0gbmV3IENvbnN0YW50RXZhbHVhdG9yKAogICAgICAgICAgICBiYWNrZW5kLCBlbnZpcm9ubWVudERlZmluZXMsIHR5cGVFbnZpcm9ubWVudCwgZXJyb3JSZXBvcnRlciwKICAgICAgICAgICAgZGVzdWdhclNldHM6IGRlc3VnYXJTZXRzLAogICAgICAgICAgICBlcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudDogZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQpOwoKICAvLyBUcmFuc2Zvcm0gdGhlIGxpYnJhcnkvY2xhc3MgbWVtYmVyczoKCiAgdm9pZCBjb252ZXJ0TGlicmFyeShMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIHRyYW5zZm9ybUFubm90YXRpb25zKGxpYnJhcnkuYW5ub3RhdGlvbnMsIGxpYnJhcnkpOwoKICAgIHRyYW5zZm9ybUxpc3QobGlicmFyeS5kZXBlbmRlbmNpZXMsIHRoaXMsIGxpYnJhcnkpOwogICAgdHJhbnNmb3JtTGlzdChsaWJyYXJ5LnBhcnRzLCB0aGlzLCBsaWJyYXJ5KTsKICAgIHRyYW5zZm9ybUxpc3QobGlicmFyeS50eXBlZGVmcywgdGhpcywgbGlicmFyeSk7CiAgICB0cmFuc2Zvcm1MaXN0KGxpYnJhcnkuY2xhc3NlcywgdGhpcywgbGlicmFyeSk7CiAgICB0cmFuc2Zvcm1MaXN0KGxpYnJhcnkucHJvY2VkdXJlcywgdGhpcywgbGlicmFyeSk7CiAgICB0cmFuc2Zvcm1MaXN0KGxpYnJhcnkuZmllbGRzLCB0aGlzLCBsaWJyYXJ5KTsKCiAgICBpZiAoIWtlZXBGaWVsZHMpIHsKICAgICAgLy8gVGhlIHRyYW5zZm9ybWVyIEFQSSBkb2VzIG5vdCBpdGVyYXRlIG92ZXIgYExpYnJhcnkuYWRkaXRpb25hbEV4cG9ydHNgLAogICAgICAvLyBzbyB3ZSBtYW51YWxseSBkZWxldGUgdGhlIHJlZmVyZW5jZXMgdG8gc2hha2VuIG5vZGVzLgogICAgICBsaWJyYXJ5LmFkZGl0aW9uYWxFeHBvcnRzLnJlbW92ZVdoZXJlKChSZWZlcmVuY2UgcmVmZXJlbmNlKSB7CiAgICAgICAgcmV0dXJuIHJlZmVyZW5jZS5ub2RlIGlzIEZpZWxkICYmIHJlZmVyZW5jZS5jYW5vbmljYWxOYW1lID09IG51bGw7CiAgICAgIH0pOwogICAgfQogIH0KCiAgdmlzaXRMaWJyYXJ5UGFydChMaWJyYXJ5UGFydCBub2RlKSB7CiAgICBjb25zdGFudEV2YWx1YXRvci53aXRoTmV3RW52aXJvbm1lbnQoKCkgewogICAgICB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhub2RlLmFubm90YXRpb25zLCBub2RlKTsKICAgIH0pOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICB2aXNpdExpYnJhcnlEZXBlbmRlbmN5KExpYnJhcnlEZXBlbmRlbmN5IG5vZGUpIHsKICAgIGNvbnN0YW50RXZhbHVhdG9yLndpdGhOZXdFbnZpcm9ubWVudCgoKSB7CiAgICAgIHRyYW5zZm9ybUFubm90YXRpb25zKG5vZGUuYW5ub3RhdGlvbnMsIG5vZGUpOwogICAgfSk7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIHZpc2l0Q2xhc3MoQ2xhc3Mgbm9kZSkgewogICAgY29uc3RhbnRFdmFsdWF0b3Iud2l0aE5ld0Vudmlyb25tZW50KCgpIHsKICAgICAgdHJhbnNmb3JtQW5ub3RhdGlvbnMobm9kZS5hbm5vdGF0aW9ucywgbm9kZSk7CiAgICAgIHRyYW5zZm9ybUxpc3Qobm9kZS5maWVsZHMsIHRoaXMsIG5vZGUpOwogICAgICB0cmFuc2Zvcm1MaXN0KG5vZGUudHlwZVBhcmFtZXRlcnMsIHRoaXMsIG5vZGUpOwogICAgICB0cmFuc2Zvcm1MaXN0KG5vZGUuY29uc3RydWN0b3JzLCB0aGlzLCBub2RlKTsKICAgICAgdHJhbnNmb3JtTGlzdChub2RlLnByb2NlZHVyZXMsIHRoaXMsIG5vZGUpOwogICAgICB0cmFuc2Zvcm1MaXN0KG5vZGUucmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzLCB0aGlzLCBub2RlKTsKICAgIH0pOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICB2aXNpdFByb2NlZHVyZShQcm9jZWR1cmUgbm9kZSkgewogICAgY29uc3RhbnRFdmFsdWF0b3Iud2l0aE5ld0Vudmlyb25tZW50KCgpIHsKICAgICAgdHJhbnNmb3JtQW5ub3RhdGlvbnMobm9kZS5hbm5vdGF0aW9ucywgbm9kZSk7CiAgICAgIG5vZGUuZnVuY3Rpb24gPSBub2RlLmZ1bmN0aW9uLmFjY2VwdCh0aGlzKS4ucGFyZW50ID0gbm9kZTsKICAgIH0pOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICB2aXNpdENvbnN0cnVjdG9yKENvbnN0cnVjdG9yIG5vZGUpIHsKICAgIGNvbnN0YW50RXZhbHVhdG9yLndpdGhOZXdFbnZpcm9ubWVudCgoKSB7CiAgICAgIHRyYW5zZm9ybUFubm90YXRpb25zKG5vZGUuYW5ub3RhdGlvbnMsIG5vZGUpOwogICAgICB0cmFuc2Zvcm1MaXN0KG5vZGUuaW5pdGlhbGl6ZXJzLCB0aGlzLCBub2RlKTsKICAgICAgbm9kZS5mdW5jdGlvbiA9IG5vZGUuZnVuY3Rpb24uYWNjZXB0KHRoaXMpLi5wYXJlbnQgPSBub2RlOwogICAgfSk7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIHZpc2l0VHlwZWRlZihUeXBlZGVmIG5vZGUpIHsKICAgIGNvbnN0YW50RXZhbHVhdG9yLndpdGhOZXdFbnZpcm9ubWVudCgoKSB7CiAgICAgIHRyYW5zZm9ybUFubm90YXRpb25zKG5vZGUuYW5ub3RhdGlvbnMsIG5vZGUpOwogICAgICB0cmFuc2Zvcm1MaXN0KG5vZGUudHlwZVBhcmFtZXRlcnMsIHRoaXMsIG5vZGUpOwogICAgICB0cmFuc2Zvcm1MaXN0KG5vZGUudHlwZVBhcmFtZXRlcnNPZkZ1bmN0aW9uVHlwZSwgdGhpcywgbm9kZSk7CiAgICAgIHRyYW5zZm9ybUxpc3Qobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycywgdGhpcywgbm9kZSk7CiAgICAgIHRyYW5zZm9ybUxpc3Qobm9kZS5uYW1lZFBhcmFtZXRlcnMsIHRoaXMsIG5vZGUpOwogICAgfSk7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIHZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IoUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3Igbm9kZSkgewogICAgY29uc3RhbnRFdmFsdWF0b3Iud2l0aE5ld0Vudmlyb25tZW50KCgpIHsKICAgICAgdHJhbnNmb3JtQW5ub3RhdGlvbnMobm9kZS5hbm5vdGF0aW9ucywgbm9kZSk7CiAgICAgIHRyYW5zZm9ybUxpc3Qobm9kZS50eXBlUGFyYW1ldGVycywgdGhpcywgbm9kZSk7CiAgICAgIHRyYW5zZm9ybUxpc3Qobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycywgdGhpcywgbm9kZSk7CiAgICAgIHRyYW5zZm9ybUxpc3Qobm9kZS5uYW1lZFBhcmFtZXRlcnMsIHRoaXMsIG5vZGUpOwogICAgfSk7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIHZpc2l0VHlwZVBhcmFtZXRlcihUeXBlUGFyYW1ldGVyIG5vZGUpIHsKICAgIHRyYW5zZm9ybUFubm90YXRpb25zKG5vZGUuYW5ub3RhdGlvbnMsIG5vZGUpOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICB2b2lkIHRyYW5zZm9ybUFubm90YXRpb25zKExpc3Q8RXhwcmVzc2lvbj4gbm9kZXMsIFRyZWVOb2RlIHBhcmVudCkgewogICAgaWYgKGV2YWx1YXRlQW5ub3RhdGlvbnMgJiYgbm9kZXMubGVuZ3RoID4gMCkgewogICAgICB0cmFuc2Zvcm1FeHByZXNzaW9ucyhub2RlcywgcGFyZW50KTsKICAgIH0KICB9CgogIHZvaWQgdHJhbnNmb3JtRXhwcmVzc2lvbnMoTGlzdDxFeHByZXNzaW9uPiBub2RlcywgVHJlZU5vZGUgcGFyZW50KSB7CiAgICBjb25zdGFudEV2YWx1YXRvci53aXRoTmV3RW52aXJvbm1lbnQoKCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgbm9kZXNbaV0gPSBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KHBhcmVudCwgbm9kZXNbaV0pCiAgICAgICAgICAuLnBhcmVudCA9IHBhcmVudDsKICAgICAgfQogICAgfSk7CiAgfQoKICAvLyBIYW5kbGUgZGVmaW5pdGlvbiBvZiBjb25zdGFudHM6CgogIHZpc2l0RnVuY3Rpb25Ob2RlKEZ1bmN0aW9uTm9kZSBub2RlKSB7CiAgICBmaW5hbCBwb3NpdGlvbmFsUGFyYW1ldGVyQ291bnQgPSBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9zaXRpb25hbFBhcmFtZXRlckNvdW50OyArK2kpIHsKICAgICAgZmluYWwgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICAgIHRyYW5zZm9ybUFubm90YXRpb25zKHZhcmlhYmxlLmFubm90YXRpb25zLCB2YXJpYWJsZSk7CiAgICAgIGlmICh2YXJpYWJsZS5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgdmFyaWFibGUuaW5pdGlhbGl6ZXIgPQogICAgICAgICAgICBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KHZhcmlhYmxlLCB2YXJpYWJsZS5pbml0aWFsaXplcikKICAgICAgICAgICAgICAuLnBhcmVudCA9IHZhcmlhYmxlOwogICAgICB9CiAgICB9CiAgICBmb3IgKGZpbmFsIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgaW4gbm9kZS5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgdHJhbnNmb3JtQW5ub3RhdGlvbnModmFyaWFibGUuYW5ub3RhdGlvbnMsIHZhcmlhYmxlKTsKICAgICAgaWYgKHZhcmlhYmxlLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICB2YXJpYWJsZS5pbml0aWFsaXplciA9CiAgICAgICAgICAgIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQodmFyaWFibGUsIHZhcmlhYmxlLmluaXRpYWxpemVyKQogICAgICAgICAgICAgIC4ucGFyZW50ID0gdmFyaWFibGU7CiAgICAgIH0KICAgIH0KICAgIGlmIChub2RlLmJvZHkgIT0gbnVsbCkgewogICAgICBub2RlLmJvZHkgPSBub2RlLmJvZHkuYWNjZXB0KHRoaXMpLi5wYXJlbnQgPSBub2RlOwogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQoKICB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhub2RlLmFubm90YXRpb25zLCBub2RlKTsKCiAgICBpZiAobm9kZS5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgICBmaW5hbCBDb25zdGFudCBjb25zdGFudCA9IGV2YWx1YXRlV2l0aENvbnRleHQobm9kZSwgbm9kZS5pbml0aWFsaXplcik7CiAgICAgICAgY29uc3RhbnRFdmFsdWF0b3IuZW52LmFkZFZhcmlhYmxlVmFsdWUobm9kZSwgY29uc3RhbnQpOwogICAgICAgIG5vZGUuaW5pdGlhbGl6ZXIgPSBtYWtlQ29uc3RhbnRFeHByZXNzaW9uKGNvbnN0YW50LCBub2RlLmluaXRpYWxpemVyKQogICAgICAgICAgLi5wYXJlbnQgPSBub2RlOwoKICAgICAgICAvLyBJZiB0aGlzIGNvbnN0YW50IGlzIGlubGluZWQsIHJlbW92ZSBpdC4KICAgICAgICBpZiAoIWtlZXBWYXJpYWJsZXMgJiYgc2hvdWxkSW5saW5lKG5vZGUuaW5pdGlhbGl6ZXIpKSB7CiAgICAgICAgICBpZiAoY29uc3RhbnQgaXMhIFVuZXZhbHVhdGVkQ29uc3RhbnQpIHsKICAgICAgICAgICAgLy8gSWYgdGhlIGNvbnN0YW50IGlzIHVuZXZhbHVhdGVkIHdlIG5lZWQgdG8ga2VlcCB0aGUgZXhwcmVzc2lvbiwKICAgICAgICAgICAgLy8gc28gdGhhdCwgaW4gdGhlIGNhc2UgdGhlIGNvbnN0YW50IGNvbnRhaW5zIGVycm9yIGJ1dCB0aGUgbG9jYWwKICAgICAgICAgICAgLy8gaXMgdW51c2VkLCB0aGUgZXJyb3Igd2lsbCBzdGlsbCBiZSByZXBvcnRlZC4KICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIG5vZGUuaW5pdGlhbGl6ZXIgPSBub2RlLmluaXRpYWxpemVyLmFjY2VwdCh0aGlzKS4ucGFyZW50ID0gbm9kZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQoKICB2aXNpdEZpZWxkKEZpZWxkIG5vZGUpIHsKICAgIHJldHVybiBjb25zdGFudEV2YWx1YXRvci53aXRoTmV3RW52aXJvbm1lbnQoKCkgewogICAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgICAgdHJhbnNmb3JtQW5ub3RhdGlvbnMobm9kZS5hbm5vdGF0aW9ucywgbm9kZSk7CiAgICAgICAgbm9kZS5pbml0aWFsaXplciA9CiAgICAgICAgICAgIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQobm9kZSwgbm9kZS5pbml0aWFsaXplcikKICAgICAgICAgICAgICAuLnBhcmVudCA9IG5vZGU7CgogICAgICAgIC8vIElmIHRoaXMgY29uc3RhbnQgaXMgaW5saW5lZCwgcmVtb3ZlIGl0LgogICAgICAgIGlmICgha2VlcEZpZWxkcyAmJiBzaG91bGRJbmxpbmUobm9kZS5pbml0aWFsaXplcikpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0cmFuc2Zvcm1Bbm5vdGF0aW9ucyhub2RlLmFubm90YXRpb25zLCBub2RlKTsKICAgICAgICBpZiAobm9kZS5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICBub2RlLmluaXRpYWxpemVyID0gbm9kZS5pbml0aWFsaXplci5hY2NlcHQodGhpcykuLnBhcmVudCA9IG5vZGU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBub2RlOwogICAgfSk7CiAgfQoKICAvLyBIYW5kbGUgdXNlLXNpdGVzIG9mIGNvbnN0YW50cyAoYW5kICJpbmxpbmUiIGNvbnN0YW50IGV4cHJlc3Npb25zKToKCiAgdmlzaXRTeW1ib2xMaXRlcmFsKFN5bWJvbExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIG1ha2VDb25zdGFudEV4cHJlc3Npb24oY29uc3RhbnRFdmFsdWF0b3IuZXZhbHVhdGUobm9kZSksIG5vZGUpOwogIH0KCiAgdmlzaXRTdGF0aWNHZXQoU3RhdGljR2V0IG5vZGUpIHsKICAgIGZpbmFsIE1lbWJlciB0YXJnZXQgPSBub2RlLnRhcmdldDsKICAgIGlmICh0YXJnZXQgaXMgRmllbGQgJiYgdGFyZ2V0LmlzQ29uc3QpIHsKICAgICAgLy8gTWFrZSBzdXJlIHRoZSBpbml0aWFsaXplciBpcyBldmFsdWF0ZWQgZmlyc3QuCiAgICAgIHRhcmdldC5pbml0aWFsaXplciA9CiAgICAgICAgICBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KHRhcmdldCwgdGFyZ2V0LmluaXRpYWxpemVyKQogICAgICAgICAgICAuLnBhcmVudCA9IHRhcmdldDsKICAgICAgaWYgKHNob3VsZElubGluZSh0YXJnZXQuaW5pdGlhbGl6ZXIpKSB7CiAgICAgICAgcmV0dXJuIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQobm9kZSwgbm9kZSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodGFyZ2V0IGlzIFByb2NlZHVyZSAmJiB0YXJnZXQua2luZCA9PSBQcm9jZWR1cmVLaW5kLk1ldGhvZCkgewogICAgICByZXR1cm4gZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dChub2RlLCBub2RlKTsKICAgIH0KICAgIHJldHVybiBzdXBlci52aXNpdFN0YXRpY0dldChub2RlKTsKICB9CgogIHZpc2l0U3dpdGNoQ2FzZShTd2l0Y2hDYXNlIG5vZGUpIHsKICAgIHRyYW5zZm9ybUV4cHJlc3Npb25zKG5vZGUuZXhwcmVzc2lvbnMsIG5vZGUpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0U3dpdGNoQ2FzZShub2RlKTsKICB9CgogIHZpc2l0VmFyaWFibGVHZXQoVmFyaWFibGVHZXQgbm9kZSkgewogICAgZmluYWwgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IG5vZGUudmFyaWFibGU7CiAgICBpZiAodmFyaWFibGUuaXNDb25zdCkgewogICAgICB2YXJpYWJsZS5pbml0aWFsaXplciA9CiAgICAgICAgICBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KHZhcmlhYmxlLCB2YXJpYWJsZS5pbml0aWFsaXplcikKICAgICAgICAgICAgLi5wYXJlbnQgPSB2YXJpYWJsZTsKICAgICAgaWYgKHNob3VsZElubGluZSh2YXJpYWJsZS5pbml0aWFsaXplcikpIHsKICAgICAgICByZXR1cm4gZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dChub2RlLCBub2RlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHN1cGVyLnZpc2l0VmFyaWFibGVHZXQobm9kZSk7CiAgfQoKICB2aXNpdExpc3RMaXRlcmFsKExpc3RMaXRlcmFsIG5vZGUpIHsKICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQobm9kZSwgbm9kZSk7CiAgICB9CiAgICByZXR1cm4gc3VwZXIudmlzaXRMaXN0TGl0ZXJhbChub2RlKTsKICB9CgogIHZpc2l0TGlzdENvbmNhdGVuYXRpb24oTGlzdENvbmNhdGVuYXRpb24gbm9kZSkgewogICAgcmV0dXJuIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQobm9kZSwgbm9kZSk7CiAgfQoKICB2aXNpdFNldExpdGVyYWwoU2V0TGl0ZXJhbCBub2RlKSB7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIHJldHVybiBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KG5vZGUsIG5vZGUpOwogICAgfQogICAgcmV0dXJuIHN1cGVyLnZpc2l0U2V0TGl0ZXJhbChub2RlKTsKICB9CgogIHZpc2l0U2V0Q29uY2F0ZW5hdGlvbihTZXRDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KG5vZGUsIG5vZGUpOwogIH0KCiAgdmlzaXRNYXBMaXRlcmFsKE1hcExpdGVyYWwgbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICByZXR1cm4gZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dChub2RlLCBub2RlKTsKICAgIH0KICAgIHJldHVybiBzdXBlci52aXNpdE1hcExpdGVyYWwobm9kZSk7CiAgfQoKICB2aXNpdE1hcENvbmNhdGVuYXRpb24oTWFwQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICByZXR1cm4gZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dChub2RlLCBub2RlKTsKICB9CgogIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKENvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKSB7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIHJldHVybiBldmFsdWF0ZUFuZFRyYW5zZm9ybVdpdGhDb250ZXh0KG5vZGUsIG5vZGUpOwogICAgfQogICAgcmV0dXJuIHN1cGVyLnZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKG5vZGUpOwogIH0KCiAgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKFN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICByZXR1cm4gZXZhbHVhdGVBbmRUcmFuc2Zvcm1XaXRoQ29udGV4dChub2RlLCBub2RlKTsKICAgIH0KICAgIHJldHVybiBzdXBlci52aXNpdFN0YXRpY0ludm9jYXRpb24obm9kZSk7CiAgfQoKICB2aXNpdENvbnN0YW50RXhwcmVzc2lvbihDb25zdGFudEV4cHJlc3Npb24gbm9kZSkgewogICAgQ29uc3RhbnQgY29uc3RhbnQgPSBub2RlLmNvbnN0YW50OwogICAgaWYgKGNvbnN0YW50IGlzIFVuZXZhbHVhdGVkQ29uc3RhbnQpIHsKICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gY29uc3RhbnQuZXhwcmVzc2lvbjsKICAgICAgcmV0dXJuIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQoZXhwcmVzc2lvbiwgZXhwcmVzc2lvbik7CiAgICB9IGVsc2UgewogICAgICBub2RlLmNvbnN0YW50ID0gY29uc3RhbnRFdmFsdWF0b3IuY2Fub25pY2FsaXplKGNvbnN0YW50KTsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CiAgfQoKICBFeHByZXNzaW9uIGV2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHQoCiAgICAgIFRyZWVOb2RlIHRyZWVDb250ZXh0LCBFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiBtYWtlQ29uc3RhbnRFeHByZXNzaW9uKGV2YWx1YXRlV2l0aENvbnRleHQodHJlZUNvbnRleHQsIG5vZGUpLCBub2RlKTsKICB9CgogIENvbnN0YW50IGV2YWx1YXRlV2l0aENvbnRleHQoVHJlZU5vZGUgdHJlZUNvbnRleHQsIEV4cHJlc3Npb24gbm9kZSkgewogICAgaWYgKHRyZWVDb250ZXh0ID09IG5vZGUpIHsKICAgICAgcmV0dXJuIGNvbnN0YW50RXZhbHVhdG9yLmV2YWx1YXRlKG5vZGUpOwogICAgfQoKICAgIHJldHVybiBjb25zdGFudEV2YWx1YXRvci5ydW5JbnNpZGVDb250ZXh0KHRyZWVDb250ZXh0LCAoKSB7CiAgICAgIHJldHVybiBjb25zdGFudEV2YWx1YXRvci5ldmFsdWF0ZShub2RlKTsKICAgIH0pOwogIH0KCiAgRXhwcmVzc2lvbiBtYWtlQ29uc3RhbnRFeHByZXNzaW9uKENvbnN0YW50IGNvbnN0YW50LCBFeHByZXNzaW9uIG5vZGUpIHsKICAgIGlmIChjb25zdGFudCBpcyBVbmV2YWx1YXRlZENvbnN0YW50ICYmCiAgICAgICAgY29uc3RhbnQuZXhwcmVzc2lvbiBpcyBJbnZhbGlkRXhwcmVzc2lvbikgewogICAgICByZXR1cm4gY29uc3RhbnQuZXhwcmVzc2lvbjsKICAgIH0KICAgIHJldHVybiBuZXcgQ29uc3RhbnRFeHByZXNzaW9uKGNvbnN0YW50LCBub2RlLmdldFN0YXRpY1R5cGUodHlwZUVudmlyb25tZW50KSkKICAgICAgLi5maWxlT2Zmc2V0ID0gbm9kZS5maWxlT2Zmc2V0OwogIH0KCiAgYm9vbCBzaG91bGRJbmxpbmUoRXhwcmVzc2lvbiBpbml0aWFsaXplcikgewogICAgaWYgKGluaXRpYWxpemVyIGlzIENvbnN0YW50RXhwcmVzc2lvbikgewogICAgICByZXR1cm4gYmFja2VuZC5zaG91bGRJbmxpbmVDb25zdGFudChpbml0aWFsaXplcik7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCmNsYXNzIENvbnN0YW50RXZhbHVhdG9yIGV4dGVuZHMgUmVjdXJzaXZlVmlzaXRvcjxDb25zdGFudD4gewogIGZpbmFsIENvbnN0YW50c0JhY2tlbmQgYmFja2VuZDsKICBmaW5hbCBOdW1iZXJTZW1hbnRpY3MgbnVtYmVyU2VtYW50aWNzOwogIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnREZWZpbmVzOwogIGZpbmFsIGJvb2wgZXJyb3JPblVuZXZhbHVhdGVkQ29uc3RhbnQ7CiAgZmluYWwgQ29yZVR5cGVzIGNvcmVUeXBlczsKICBmaW5hbCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50OwogIGZpbmFsIEVycm9yUmVwb3J0ZXIgZXJyb3JSZXBvcnRlcjsKCiAgZmluYWwgYm9vbCBkZXN1Z2FyU2V0czsKICBmaW5hbCBGaWVsZCB1bm1vZGlmaWFibGVTZXRNYXA7CgogIGZpbmFsIGlzSW5zdGFudGlhdGVkID0gbmV3IElzSW5zdGFudGlhdGVkVmlzaXRvcigpLmlzSW5zdGFudGlhdGVkOwoKICBmaW5hbCBNYXA8Q29uc3RhbnQsIENvbnN0YW50PiBjYW5vbmljYWxpemF0aW9uQ2FjaGU7CiAgZmluYWwgTWFwPE5vZGUsIE9iamVjdD4gbm9kZUNhY2hlOwogIGZpbmFsIENsb25lVmlzaXRvciBjbG9uZXIgPSBuZXcgQ2xvbmVWaXNpdG9yKCk7CgogIE1hcDxDbGFzcywgYm9vbD4gcHJpbWl0aXZlRXF1YWxDYWNoZTsKCiAgZmluYWwgTnVsbENvbnN0YW50IG51bGxDb25zdGFudCA9IG5ldyBOdWxsQ29uc3RhbnQoKTsKICBmaW5hbCBCb29sQ29uc3RhbnQgdHJ1ZUNvbnN0YW50ID0gbmV3IEJvb2xDb25zdGFudCh0cnVlKTsKICBmaW5hbCBCb29sQ29uc3RhbnQgZmFsc2VDb25zdGFudCA9IG5ldyBCb29sQ29uc3RhbnQoZmFsc2UpOwoKICBmaW5hbCBMaXN0PFRyZWVOb2RlPiBjb250ZXh0Q2hhaW4gPSBbXTsKCiAgSW5zdGFuY2VCdWlsZGVyIGluc3RhbmNlQnVpbGRlcjsKICBFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52OwogIFNldDxFeHByZXNzaW9uPiByZXBsYWNlbWVudE5vZGVzID0gbmV3IFNldDxFeHByZXNzaW9uPi5pZGVudGl0eSgpOwogIE1hcDxDb25zdGFudCwgQ29uc3RhbnQ+IGxvd2VyZWQgPSBuZXcgTWFwPENvbnN0YW50LCBDb25zdGFudD4uaWRlbnRpdHkoKTsKCiAgYm9vbCBzZWVuVW5ldmFsdWF0ZWRDaGlsZDsgLy8gQW55IGNoaWxkcmVuIHRoYXQgd2VyZSBsZWZ0IHVuZXZhbHVhdGVkPwogIGludCBsYXp5RGVwdGg7IC8vIEN1cnJlbnQgbmVzdGluZyBkZXB0aCBvZiBsYXp5IHJlZ2lvbnMuCgogIGJvb2wgZ2V0IHNob3VsZEJlVW5ldmFsdWF0ZWQgPT4gc2VlblVuZXZhbHVhdGVkQ2hpbGQgfHwgbGF6eURlcHRoICE9IDA7CgogIGJvb2wgZ2V0IHRhcmdldGluZ0phdmFTY3JpcHQgPT4gbnVtYmVyU2VtYW50aWNzID09IE51bWJlclNlbWFudGljcy5qczsKCiAgQ29uc3RhbnRFdmFsdWF0b3IodGhpcy5iYWNrZW5kLCB0aGlzLmVudmlyb25tZW50RGVmaW5lcywgdGhpcy50eXBlRW52aXJvbm1lbnQsCiAgICAgIHRoaXMuZXJyb3JSZXBvcnRlciwKICAgICAge3RoaXMuZGVzdWdhclNldHMgPSBmYWxzZSwgdGhpcy5lcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudCA9IGZhbHNlfSkKICAgICAgOiBudW1iZXJTZW1hbnRpY3MgPSBiYWNrZW5kLm51bWJlclNlbWFudGljcywKICAgICAgICBjb3JlVHlwZXMgPSB0eXBlRW52aXJvbm1lbnQuY29yZVR5cGVzLAogICAgICAgIGNhbm9uaWNhbGl6YXRpb25DYWNoZSA9IDxDb25zdGFudCwgQ29uc3RhbnQ+e30sCiAgICAgICAgbm9kZUNhY2hlID0gPE5vZGUsIENvbnN0YW50Pnt9LAogICAgICAgIGVudiA9IG5ldyBFdmFsdWF0aW9uRW52aXJvbm1lbnQoKSwKICAgICAgICB1bm1vZGlmaWFibGVTZXRNYXAgPSBkZXN1Z2FyU2V0cwogICAgICAgICAgICA/IHR5cGVFbnZpcm9ubWVudC5jb3JlVHlwZXMuaW5kZXgKICAgICAgICAgICAgICAgIC5nZXRNZW1iZXIoJ2RhcnQ6Y29sbGVjdGlvbicsICdfVW5tb2RpZmlhYmxlU2V0JywgJ19tYXAnKQogICAgICAgICAgICA6IG51bGwgewogICAgaWYgKGVudmlyb25tZW50RGVmaW5lcyA9PSBudWxsICYmICFiYWNrZW5kLnN1cHBvcnRzVW5ldmFsdWF0ZWRDb25zdGFudHMpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAiTm8gJ2Vudmlyb25tZW50RGVmaW5lcycgcGFzc2VkIHRvIHRoZSBjb25zdGFudCBldmFsdWF0b3IgYnV0IHRoZSAiCiAgICAgICAgICAiQ29uc3RhbnRzQmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IHVuZXZhbHVhdGVkIGNvbnN0YW50cy4iKTsKICAgIH0KICAgIHByaW1pdGl2ZUVxdWFsQ2FjaGUgPSA8Q2xhc3MsIGJvb2w+ewogICAgICBjb3JlVHlwZXMuYm9vbENsYXNzOiB0cnVlLAogICAgICBjb3JlVHlwZXMuZG91YmxlQ2xhc3M6IGZhbHNlLAogICAgICBjb3JlVHlwZXMuaW50Q2xhc3M6IHRydWUsCiAgICAgIGNvcmVUeXBlcy5pbnRlcm5hbFN5bWJvbENsYXNzOiB0cnVlLAogICAgICBjb3JlVHlwZXMubGlzdENsYXNzOiB0cnVlLAogICAgICBjb3JlVHlwZXMubWFwQ2xhc3M6IHRydWUsCiAgICAgIGNvcmVUeXBlcy5udWxsQ2xhc3M6IHRydWUsCiAgICAgIGNvcmVUeXBlcy5vYmplY3RDbGFzczogdHJ1ZSwKICAgICAgY29yZVR5cGVzLnNldENsYXNzOiB0cnVlLAogICAgICBjb3JlVHlwZXMuc3RyaW5nQ2xhc3M6IHRydWUsCiAgICAgIGNvcmVUeXBlcy5zeW1ib2xDbGFzczogdHJ1ZSwKICAgICAgY29yZVR5cGVzLnR5cGVDbGFzczogdHJ1ZSwKICAgIH07CiAgfQoKICBVcmkgZ2V0RmlsZVVyaShUcmVlTm9kZSBub2RlKSB7CiAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmIG5vZGUgaXMhIEZpbGVVcmlOb2RlKSB7CiAgICAgIG5vZGUgPSBub2RlLnBhcmVudDsKICAgIH0KICAgIHJldHVybiAobm9kZSBhcyBGaWxlVXJpTm9kZSk/LmZpbGVVcmk7CiAgfQoKICBpbnQgZ2V0RmlsZU9mZnNldChVcmkgdXJpLCBUcmVlTm9kZSBub2RlKSB7CiAgICBpZiAodXJpID09IG51bGwpIHJldHVybiBUcmVlTm9kZS5ub09mZnNldDsKICAgIHdoaWxlIChub2RlICE9IG51bGwgJiYgbm9kZS5maWxlT2Zmc2V0ID09IFRyZWVOb2RlLm5vT2Zmc2V0KSB7CiAgICAgIG5vZGUgPSBub2RlLnBhcmVudDsKICAgIH0KICAgIHJldHVybiBub2RlID09IG51bGwgPyBUcmVlTm9kZS5ub09mZnNldCA6IG5vZGUuZmlsZU9mZnNldDsKICB9CgogIC8vLyBFdmFsdWF0ZSBbbm9kZV0gYW5kIHBvc3NpYmx5IGNhY2hlIHRoZSBldmFsdWF0aW9uIHJlc3VsdC4KICAvLy8gUmV0dXJucyBVbmV2YWx1YXRlZENvbnN0YW50IGlmIHRoZSBjb25zdGFudCBjb3VsZCBub3QgYmUgZXZhbHVhdGVkLgogIC8vLyBJZiB0aGUgZXhwcmVzc2lvbiBpbiB0aGUgVW5ldmFsdWF0ZWRDb25zdGFudCBpcyBhbiBJbnZhbGlkRXhwcmVzc2lvbiwKICAvLy8gYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGNvbnN0YW50IGV2YWx1YXRpb24uCiAgQ29uc3RhbnQgZXZhbHVhdGUoRXhwcmVzc2lvbiBub2RlKSB7CiAgICBzZWVuVW5ldmFsdWF0ZWRDaGlsZCA9IGZhbHNlOwogICAgbGF6eURlcHRoID0gMDsKICAgIHRyeSB7CiAgICAgIENvbnN0YW50IHJlc3VsdCA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZSk7CiAgICAgIGlmIChlcnJvck9uVW5ldmFsdWF0ZWRDb25zdGFudCAmJiByZXN1bHQgaXMgVW5ldmFsdWF0ZWRDb25zdGFudCkgewogICAgICAgIHJldHVybiByZXBvcnQobm9kZSwgbWVzc2FnZUNvbnN0RXZhbFVuZXZhbHVhdGVkKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSBvbiBfQWJvcnREdWVUb0Vycm9yIGNhdGNoIChlKSB7CiAgICAgIGZpbmFsIFVyaSB1cmkgPSBnZXRGaWxlVXJpKGUubm9kZSk7CiAgICAgIGZpbmFsIGludCBmaWxlT2Zmc2V0ID0gZ2V0RmlsZU9mZnNldCh1cmksIGUubm9kZSk7CiAgICAgIGZpbmFsIGxvY2F0ZWRNZXNzYWdlID0gZS5tZXNzYWdlLndpdGhMb2NhdGlvbih1cmksIGZpbGVPZmZzZXQsIG5vTGVuZ3RoKTsKCiAgICAgIGZpbmFsIGNvbnRleHRNZXNzYWdlcyA9IDxMb2NhdGVkTWVzc2FnZT5bXTsKICAgICAgaWYgKGUuY29udGV4dCAhPSBudWxsKSBjb250ZXh0TWVzc2FnZXMuYWRkQWxsKGUuY29udGV4dCk7CiAgICAgIGZvciAoZmluYWwgVHJlZU5vZGUgbm9kZSBpbiBjb250ZXh0Q2hhaW4pIHsKICAgICAgICBmaW5hbCBVcmkgdXJpID0gZ2V0RmlsZVVyaShub2RlKTsKICAgICAgICBmaW5hbCBpbnQgZmlsZU9mZnNldCA9IGdldEZpbGVPZmZzZXQodXJpLCBub2RlKTsKICAgICAgICBjb250ZXh0TWVzc2FnZXMuYWRkKAogICAgICAgICAgICBtZXNzYWdlQ29uc3RFdmFsQ29udGV4dC53aXRoTG9jYXRpb24odXJpLCBmaWxlT2Zmc2V0LCBub0xlbmd0aCkpOwogICAgICB9CiAgICAgIGVycm9yUmVwb3J0ZXIucmVwb3J0KGxvY2F0ZWRNZXNzYWdlLCBjb250ZXh0TWVzc2FnZXMpOwogICAgICByZXR1cm4gbmV3IFVuZXZhbHVhdGVkQ29uc3RhbnQobmV3IEludmFsaWRFeHByZXNzaW9uKGUubWVzc2FnZS5tZXNzYWdlKSk7CiAgICB9IG9uIF9BYm9ydER1ZVRvSW52YWxpZEV4cHJlc3Npb24gY2F0Y2ggKGUpIHsKICAgICAgLy8gVE9ETyhhc2tlc2MpOiBDb3B5IHBvc2l0aW9uIGZyb20gZXJyb25lb3VzIG5vZGUuCiAgICAgIC8vIEN1cnJlbnRseSBub3QgcG9zc2libGUsIGFzIGl0IG1pZ2h0IGJlIGluIGEgZGlmZmVyZW50IGZpbGUuCiAgICAgIC8vIENhbiBiZSBkb25lIGlmIHdlIGFkZCBhbiBleHBsaWNpdCBVUkkgdG8gSW52YWxpZEV4cHJlc3Npb24uCiAgICAgIEludmFsaWRFeHByZXNzaW9uIGludmFsaWQgPSBuZXcgSW52YWxpZEV4cHJlc3Npb24oZS5tZXNzYWdlKTsKICAgICAgaWYgKGludmFsaWQuZmlsZU9mZnNldCA9PSBUcmVlTm9kZS5ub09mZnNldCkgewogICAgICAgIGludmFsaWQuZmlsZU9mZnNldCA9IG5vZGUuZmlsZU9mZnNldDsKICAgICAgfQogICAgICBlcnJvclJlcG9ydGVyLnJlcG9ydEludmFsaWRFeHByZXNzaW9uKGludmFsaWQpOwogICAgICByZXR1cm4gbmV3IFVuZXZhbHVhdGVkQ29uc3RhbnQoaW52YWxpZCk7CiAgICB9CiAgfQoKICAvLy8gUmVwb3J0IGFuIGVycm9yIHRoYXQgaGFzIGJlZW4gZGV0ZWN0ZWQgZHVyaW5nIGNvbnN0YW50IGV2YWx1YXRpb24uCiAgTnVsbCByZXBvcnQoVHJlZU5vZGUgbm9kZSwgTWVzc2FnZSBtZXNzYWdlLCB7TGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dH0pIHsKICAgIHRocm93IG5ldyBfQWJvcnREdWVUb0Vycm9yKG5vZGUsIG1lc3NhZ2UsIGNvbnRleHQ6IGNvbnRleHQpOwogIH0KCiAgLy8vIFJlcG9ydCBhIGNvbnN0cnVjdCB0aGF0IHNob3VsZCBub3Qgb2NjdXIgaW5zaWRlIGEgcG90ZW50aWFsbHkgY29uc3RhbnQKICAvLy8gZXhwcmVzc2lvbi4gSXQgaXMgYXNzdW1lZCB0aGF0IGFuIGVycm9yIGhhcyBhbHJlYWR5IGJlZW4gcmVwb3J0ZWQuCiAgTnVsbCByZXBvcnRJbnZhbGlkKFRyZWVOb2RlIG5vZGUsIFN0cmluZyBtZXNzYWdlKSB7CiAgICB0aHJvdyBuZXcgX0Fib3J0RHVlVG9JbnZhbGlkRXhwcmVzc2lvbihub2RlLCBtZXNzYWdlKTsKICB9CgogIC8vLyBQcm9kdWNlIGFuIHVuZXZhbHVhdGVkIGNvbnN0YW50IG5vZGUgZm9yIGFuIGV4cHJlc3Npb24uCiAgQ29uc3RhbnQgdW5ldmFsdWF0ZWQoRXhwcmVzc2lvbiBvcmlnaW5hbCwgRXhwcmVzc2lvbiByZXBsYWNlbWVudCkgewogICAgcmVwbGFjZW1lbnQuZmlsZU9mZnNldCA9IG9yaWdpbmFsLmZpbGVPZmZzZXQ7CiAgICAvLyBUT0RPKGFza2VzYyxqb2hubml3aW50aGVyKTogUHJlc2VydmUgZmlsZVVyaSBvbiBbcmVwbGFjZW1lbnRdLgogICAgcmV0dXJuIG5ldyBVbmV2YWx1YXRlZENvbnN0YW50KHJlcGxhY2VtZW50KTsKICB9CgogIC8vLyBFeHRyYWN0IGFuIGV4cHJlc3Npb24gZnJvbSBhIChwb3NzaWJseSB1bmV2YWx1YXRlZCkgY29uc3RhbnQgdG8gYmVjb21lCiAgLy8vIHBhcnQgb2YgdGhlIGV4cHJlc3Npb24gdHJlZSBvZiBhbm90aGVyIHVuZXZhbHVhdGVkIGNvbnN0YW50LgogIC8vLyBNYWtlcyBzdXJlIGEgcGFydGljdWxhciBleHByZXNzaW9uIG9jY3VycyBvbmx5IG9uY2UgaW4gdGhlIHRyZWUgYnkKICAvLy8gY2xvbmluZyBmdXJ0aGVyIGluc3RhbmNlcy4KICBFeHByZXNzaW9uIGV4dHJhY3QoQ29uc3RhbnQgY29uc3RhbnQpIHsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IGNvbnN0YW50LmFzRXhwcmVzc2lvbigpOwogICAgaWYgKCFyZXBsYWNlbWVudE5vZGVzLmFkZChleHByZXNzaW9uKSkgewogICAgICBleHByZXNzaW9uID0gY2xvbmVyLmNsb25lKGV4cHJlc3Npb24pOwogICAgICByZXBsYWNlbWVudE5vZGVzLmFkZChleHByZXNzaW9uKTsKICAgIH0KICAgIHJldHVybiBleHByZXNzaW9uOwogIH0KCiAgLy8vIEVudGVyIGEgcmVnaW9uIG9mIGxhenkgZXZhbHVhdGlvbi4gQWxsIGxlYWYgbm9kZXMgYXJlIGV2YWx1YXRlZCBub3JtYWxseQogIC8vLyAodG8gZW5zdXJlIGlubGluaW5nIG9mIHJlZmVyZW5jZWQgbG9jYWwgdmFyaWFibGVzKSwgYnV0IGNvbXBvc2l0ZSBub2RlcwogIC8vLyBhbHdheXMgdHJlYXQgdGhlaXIgY2hpbGRyZW4gYXMgdW5ldmFsdWF0ZWQsIHJlc3VsdGluZyBpbiBhIHBhcnRpYWxseQogIC8vLyBldmFsdWF0ZWQgY2xvbmUgb2YgdGhlIG9yaWdpbmFsIGV4cHJlc3Npb24gdHJlZS4KICAvLy8gTGF6eSBldmFsdWF0aW9uIGlzIHVzZWQgZm9yIHRoZSBzdWJ0cmVlcyBvZiBsYXp5IG9wZXJhdGlvbnMgd2l0aAogIC8vLyB1bmV2YWx1YXRlZCBjb25kaXRpb25zIHRvIGVuc3VyZSBubyBlcnJvcnMgYXJlIHJlcG9ydGVkIGZvciBwcm9ibGVtcwogIC8vLyBpbiB0aGUgc3VidHJlZSBhcyBsb25nIGFzIHRoZSBzdWJ0cmVlIGlzIHBvdGVudGlhbGx5IGNvbnN0YW50LgogIHZvaWQgZW50ZXJMYXp5KCkgPT4gbGF6eURlcHRoKys7CgogIC8vLyBMZWF2ZSBhIChwb3NzaWJseSBuZXN0ZWQpIHJlZ2lvbiBvZiBsYXp5IGV2YWx1YXRpb24uCiAgdm9pZCBsZWF2ZUxhenkoKSA9PiBsYXp5RGVwdGgtLTsKCiAgQ29uc3RhbnQgbG93ZXIoQ29uc3RhbnQgb3JpZ2luYWwsIENvbnN0YW50IHJlcGxhY2VtZW50KSB7CiAgICBpZiAoIWlkZW50aWNhbChvcmlnaW5hbCwgcmVwbGFjZW1lbnQpKSB7CiAgICAgIG9yaWdpbmFsID0gY2Fub25pY2FsaXplKG9yaWdpbmFsKTsKICAgICAgcmVwbGFjZW1lbnQgPSBjYW5vbmljYWxpemUocmVwbGFjZW1lbnQpOwogICAgICBsb3dlcmVkW3JlcGxhY2VtZW50XSA9IG9yaWdpbmFsOwogICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CiAgICB9CiAgICByZXR1cm4gY2Fub25pY2FsaXplKHJlcGxhY2VtZW50KTsKICB9CgogIENvbnN0YW50IHVubG93ZXIoQ29uc3RhbnQgY29uc3RhbnQpIHsKICAgIHJldHVybiBsb3dlcmVkW2NvbnN0YW50XSA/PyBjb25zdGFudDsKICB9CgogIENvbnN0YW50IGxvd2VyTGlzdENvbnN0YW50KExpc3RDb25zdGFudCBjb25zdGFudCkgewogICAgaWYgKHNob3VsZEJlVW5ldmFsdWF0ZWQpIHJldHVybiBjb25zdGFudDsKICAgIHJldHVybiBsb3dlcihjb25zdGFudCwgYmFja2VuZC5sb3dlckxpc3RDb25zdGFudChjb25zdGFudCkpOwogIH0KCiAgQ29uc3RhbnQgbG93ZXJTZXRDb25zdGFudChTZXRDb25zdGFudCBjb25zdGFudCkgewogICAgaWYgKHNob3VsZEJlVW5ldmFsdWF0ZWQpIHJldHVybiBjb25zdGFudDsKICAgIHJldHVybiBsb3dlcihjb25zdGFudCwgYmFja2VuZC5sb3dlclNldENvbnN0YW50KGNvbnN0YW50KSk7CiAgfQoKICBDb25zdGFudCBsb3dlck1hcENvbnN0YW50KE1hcENvbnN0YW50IGNvbnN0YW50KSB7CiAgICBpZiAoc2hvdWxkQmVVbmV2YWx1YXRlZCkgcmV0dXJuIGNvbnN0YW50OwogICAgcmV0dXJuIGxvd2VyKGNvbnN0YW50LCBiYWNrZW5kLmxvd2VyTWFwQ29uc3RhbnQoY29uc3RhbnQpKTsKICB9CgogIC8vLyBFdmFsdWF0ZSBbbm9kZV0gYW5kIHBvc3NpYmx5IGNhY2hlIHRoZSBldmFsdWF0aW9uIHJlc3VsdC4KICAvLy8gQHRocm93cyBfQWJvcnREdWVUb0Vycm9yIG9yIF9BYm9ydER1ZVRvSW52YWxpZEV4cHJlc3Npb24gaWYgZXhwcmVzc2lvbgogIC8vLyBjYW4ndCBiZSBldmFsdWF0ZWQuCiAgQ29uc3RhbnQgX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUpIHsKICAgIGJvb2wgd2FzVW5ldmFsdWF0ZWQgPSBzZWVuVW5ldmFsdWF0ZWRDaGlsZDsKICAgIHNlZW5VbmV2YWx1YXRlZENoaWxkID0gZmFsc2U7CiAgICBDb25zdGFudCByZXN1bHQ7CiAgICBpZiAoZW52LmlzRW1wdHkpIHsKICAgICAgLy8gV2Ugb25seSB0cnkgdG8gZXZhbHVhdGUgdGhlIHNhbWUgW25vZGVdICpvbmNlKiB3aXRoaW4gYW4gZW1wdHkKICAgICAgLy8gZW52aXJvbm1lbnQuCiAgICAgIGlmIChub2RlQ2FjaGUuY29udGFpbnNLZXkobm9kZSkpIHsKICAgICAgICByZXN1bHQgPSBub2RlQ2FjaGVbbm9kZV0gPz8gcmVwb3J0KG5vZGUsIG1lc3NhZ2VDb25zdEV2YWxDaXJjdWxhcml0eSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbm9kZUNhY2hlW25vZGVdID0gbnVsbDsKICAgICAgICB0cnkgewogICAgICAgICAgcmVzdWx0ID0gbm9kZUNhY2hlW25vZGVdID0gbm9kZS5hY2NlcHQodGhpcyk7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgbm9kZUNhY2hlLnJlbW92ZShub2RlKTsKICAgICAgICAgIHJldGhyb3c7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBub2RlLmFjY2VwdCh0aGlzKTsKICAgIH0KICAgIHNlZW5VbmV2YWx1YXRlZENoaWxkID0gd2FzVW5ldmFsdWF0ZWQgfHwgcmVzdWx0IGlzIFVuZXZhbHVhdGVkQ29uc3RhbnQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQ29uc3RhbnQgX2V2YWx1YXRlTnVsbGFibGVTdWJleHByZXNzaW9uKEV4cHJlc3Npb24gbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGxDb25zdGFudDsKICAgIHJldHVybiBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUpOwogIH0KCiAgQ29uc3RhbnQgcnVuSW5zaWRlQ29udGV4dChUcmVlTm9kZSBub2RlLCBDb25zdGFudCBmdW4oKSkgewogICAgdHJ5IHsKICAgICAgcHVzaENvbnRleHQobm9kZSk7CiAgICAgIHJldHVybiBmdW4oKTsKICAgIH0gZmluYWxseSB7CiAgICAgIHBvcENvbnRleHQobm9kZSk7CiAgICB9CiAgfQoKICBDb25zdGFudCBydW5JbnNpZGVDb250ZXh0SWZOb0NvbnRleHQoVHJlZU5vZGUgbm9kZSwgQ29uc3RhbnQgZnVuKCkpIHsKICAgIGlmIChjb250ZXh0Q2hhaW4uaXNFbXB0eSkgewogICAgICByZXR1cm4gcnVuSW5zaWRlQ29udGV4dChub2RlLCBmdW4pOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZ1bigpOwogICAgfQogIH0KCiAgcHVzaENvbnRleHQoVHJlZU5vZGUgY29udGV4dE5vZGUpIHsKICAgIGNvbnRleHRDaGFpbi5hZGQoY29udGV4dE5vZGUpOwogIH0KCiAgcG9wQ29udGV4dChUcmVlTm9kZSBjb250ZXh0Tm9kZSkgewogICAgYXNzZXJ0KGNvbnRleHRDaGFpbi5sYXN0ID09IGNvbnRleHROb2RlKTsKICAgIGNvbnRleHRDaGFpbi5sZW5ndGggPSBjb250ZXh0Q2hhaW4ubGVuZ3RoIC0gMTsKICB9CgogIGRlZmF1bHRUcmVlTm9kZShOb2RlIG5vZGUpIHsKICAgIC8vIE9ubHkgYSBzdWJzZXQgb2YgdGhlIGV4cHJlc3Npb24gbGFuZ3VhZ2UgaXMgdmFsaWQgZm9yIGNvbnN0YW50CiAgICAvLyBldmFsdWF0aW9uLgogICAgcmV0dXJuIHJlcG9ydEludmFsaWQoCiAgICAgICAgbm9kZSwgJ0NvbnN0YW50IGV2YWx1YXRpb24gaGFzIG5vIHN1cHBvcnQgZm9yICR7bm9kZS5ydW50aW1lVHlwZX0hJyk7CiAgfQoKICB2aXNpdE51bGxMaXRlcmFsKE51bGxMaXRlcmFsIG5vZGUpID0+IG51bGxDb25zdGFudDsKCiAgdmlzaXRCb29sTGl0ZXJhbChCb29sTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gbWFrZUJvb2xDb25zdGFudChub2RlLnZhbHVlKTsKICB9CgogIHZpc2l0SW50TGl0ZXJhbChJbnRMaXRlcmFsIG5vZGUpIHsKICAgIC8vIFRoZSBmcm9udGVuZCBlbnN1cmVzIHRoYXQgaW50ZWdlciBsaXRlcmFscyBhcmUgdmFsaWQgYWNjb3JkaW5nIHRvIHRoZQogICAgLy8gdGFyZ2V0IHJlcHJlc2VudGF0aW9uLgogICAgcmV0dXJuIHRhcmdldGluZ0phdmFTY3JpcHQKICAgICAgICA/IGNhbm9uaWNhbGl6ZShuZXcgSmF2YVNjcmlwdEludENvbnN0YW50LmZyb21VSW50NjQobm9kZS52YWx1ZSkpCiAgICAgICAgOiBjYW5vbmljYWxpemUobmV3IEludENvbnN0YW50KG5vZGUudmFsdWUpKTsKICB9CgogIHZpc2l0RG91YmxlTGl0ZXJhbChEb3VibGVMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBjYW5vbmljYWxpemUobWFrZURvdWJsZUNvbnN0YW50KG5vZGUudmFsdWUpKTsKICB9CgogIHZpc2l0U3RyaW5nTGl0ZXJhbChTdHJpbmdMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IFN0cmluZ0NvbnN0YW50KG5vZGUudmFsdWUpKTsKICB9CgogIHZpc2l0VHlwZUxpdGVyYWwoVHlwZUxpdGVyYWwgbm9kZSkgewogICAgZmluYWwgRGFydFR5cGUgdHlwZSA9IGV2YWx1YXRlRGFydFR5cGUobm9kZSwgbm9kZS50eXBlKTsKICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IFR5cGVMaXRlcmFsQ29uc3RhbnQodHlwZSkpOwogIH0KCiAgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIENvbnN0YW50IGNvbnN0YW50ID0gbm9kZS5jb25zdGFudDsKICAgIENvbnN0YW50IHJlc3VsdCA9IGNvbnN0YW50OwogICAgaWYgKGNvbnN0YW50IGlzIFVuZXZhbHVhdGVkQ29uc3RhbnQpIHsKICAgICAgcmVzdWx0ID0gcnVuSW5zaWRlQ29udGV4dChjb25zdGFudC5leHByZXNzaW9uLCAoKSB7CiAgICAgICAgcmV0dXJuIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24oY29uc3RhbnQuZXhwcmVzc2lvbik7CiAgICAgIH0pOwogICAgfSBlbHNlIGlmICh0YXJnZXRpbmdKYXZhU2NyaXB0KSB7CiAgICAgIGlmIChjb25zdGFudCBpcyBEb3VibGVDb25zdGFudCkgewogICAgICAgIGRvdWJsZSB2YWx1ZSA9IGNvbnN0YW50LnZhbHVlOwogICAgICAgIC8vIFRPRE8oYXNrZXNjLCBmaXNoeXRoZWZpc2gpOiBIYW5kbGUgaW5maW5pdGUgaW50ZWdlcnMuCiAgICAgICAgaWYgKHZhbHVlLmlzRmluaXRlICYmIHZhbHVlLnRydW5jYXRlVG9Eb3VibGUoKSA9PSB2YWx1ZSkgewogICAgICAgICAgcmVzdWx0ID0gbmV3IEphdmFTY3JpcHRJbnRDb25zdGFudC5mcm9tRG91YmxlKHZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIC8vIElmIHRoZXJlIHdlcmUgYWxyZWFkeSBjb25zdGFudHMgaW4gdGhlIEFTVCB0aGVuIHdlIG1ha2Ugc3VyZSB3ZQogICAgLy8gcmUtY2Fub25pY2FsaXplIHRoZW0uICBBZnRlciBydW5uaW5nIHRoZSB0cmFuc2Zvcm1lciB3ZSB3aWxsIHRoZXJlZm9yZQogICAgLy8gaGF2ZSBhIGZ1bGx5LWNhbm9uaWNhbGl6ZWQgY29uc3RhbnQgREFHIHdpdGggcm9vdHMgY29taW5nIGZyb20gdGhlCiAgICAvLyBbQ29uc3RhbnRFeHByZXNzaW9uXSBub2RlcyBpbiB0aGUgQVNULgogICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShyZXN1bHQpOwogIH0KCiAgdmlzaXRMaXN0TGl0ZXJhbChMaXN0TGl0ZXJhbCBub2RlKSB7CiAgICBpZiAoIW5vZGUuaXNDb25zdCkgewogICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgbm9kZSwgdGVtcGxhdGVDb25zdEV2YWxOb25Db25zdGFudExpdGVyYWwud2l0aEFyZ3VtZW50cygnTGlzdCcpKTsKICAgIH0KICAgIGZpbmFsIExpc3RDb25zdGFudEJ1aWxkZXIgYnVpbGRlciA9CiAgICAgICAgbmV3IExpc3RDb25zdGFudEJ1aWxkZXIobm9kZSwgbm9kZS50eXBlQXJndW1lbnQsIHRoaXMpOwogICAgZm9yIChFeHByZXNzaW9uIGVsZW1lbnQgaW4gbm9kZS5leHByZXNzaW9ucykgewogICAgICBidWlsZGVyLmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJldHVybiBidWlsZGVyLmJ1aWxkKCk7CiAgfQoKICB2aXNpdExpc3RDb25jYXRlbmF0aW9uKExpc3RDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIGZpbmFsIExpc3RDb25zdGFudEJ1aWxkZXIgYnVpbGRlciA9CiAgICAgICAgbmV3IExpc3RDb25zdGFudEJ1aWxkZXIobm9kZSwgbm9kZS50eXBlQXJndW1lbnQsIHRoaXMpOwogICAgZm9yIChFeHByZXNzaW9uIGxpc3QgaW4gbm9kZS5saXN0cykgewogICAgICBidWlsZGVyLmFkZFNwcmVhZChsaXN0KTsKICAgIH0KICAgIHJldHVybiBidWlsZGVyLmJ1aWxkKCk7CiAgfQoKICB2aXNpdFNldExpdGVyYWwoU2V0TGl0ZXJhbCBub2RlKSB7CiAgICBpZiAoIW5vZGUuaXNDb25zdCkgewogICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgbm9kZSwgdGVtcGxhdGVDb25zdEV2YWxOb25Db25zdGFudExpdGVyYWwud2l0aEFyZ3VtZW50cygnU2V0JykpOwogICAgfQogICAgZmluYWwgU2V0Q29uc3RhbnRCdWlsZGVyIGJ1aWxkZXIgPQogICAgICAgIG5ldyBTZXRDb25zdGFudEJ1aWxkZXIobm9kZSwgbm9kZS50eXBlQXJndW1lbnQsIHRoaXMpOwogICAgZm9yIChFeHByZXNzaW9uIGVsZW1lbnQgaW4gbm9kZS5leHByZXNzaW9ucykgewogICAgICBidWlsZGVyLmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJldHVybiBidWlsZGVyLmJ1aWxkKCk7CiAgfQoKICB2aXNpdFNldENvbmNhdGVuYXRpb24oU2V0Q29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICBmaW5hbCBTZXRDb25zdGFudEJ1aWxkZXIgYnVpbGRlciA9CiAgICAgICAgbmV3IFNldENvbnN0YW50QnVpbGRlcihub2RlLCBub2RlLnR5cGVBcmd1bWVudCwgdGhpcyk7CiAgICBmb3IgKEV4cHJlc3Npb24gc2V0XyBpbiBub2RlLnNldHMpIHsKICAgICAgYnVpbGRlci5hZGRTcHJlYWQoc2V0Xyk7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwogIH0KCiAgdmlzaXRNYXBMaXRlcmFsKE1hcExpdGVyYWwgbm9kZSkgewogICAgaWYgKCFub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgIG5vZGUsIHRlbXBsYXRlQ29uc3RFdmFsTm9uQ29uc3RhbnRMaXRlcmFsLndpdGhBcmd1bWVudHMoJ01hcCcpKTsKICAgIH0KICAgIGZpbmFsIE1hcENvbnN0YW50QnVpbGRlciBidWlsZGVyID0KICAgICAgICBuZXcgTWFwQ29uc3RhbnRCdWlsZGVyKG5vZGUsIG5vZGUua2V5VHlwZSwgbm9kZS52YWx1ZVR5cGUsIHRoaXMpOwogICAgZm9yIChNYXBFbnRyeSBlbGVtZW50IGluIG5vZGUuZW50cmllcykgewogICAgICBidWlsZGVyLmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJldHVybiBidWlsZGVyLmJ1aWxkKCk7CiAgfQoKICB2aXNpdE1hcENvbmNhdGVuYXRpb24oTWFwQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICBmaW5hbCBNYXBDb25zdGFudEJ1aWxkZXIgYnVpbGRlciA9CiAgICAgICAgbmV3IE1hcENvbnN0YW50QnVpbGRlcihub2RlLCBub2RlLmtleVR5cGUsIG5vZGUudmFsdWVUeXBlLCB0aGlzKTsKICAgIGZvciAoRXhwcmVzc2lvbiBtYXAgaW4gbm9kZS5tYXBzKSB7CiAgICAgIGJ1aWxkZXIuYWRkU3ByZWFkKG1hcCk7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwogIH0KCiAgdmlzaXRGdW5jdGlvbkV4cHJlc3Npb24oRnVuY3Rpb25FeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgbm9kZSwgdGVtcGxhdGVDb25zdEV2YWxOb25Db25zdGFudExpdGVyYWwud2l0aEFyZ3VtZW50cygnRnVuY3Rpb24nKSk7CiAgfQoKICB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihDb25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgZmluYWwgQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBub2RlLnRhcmdldDsKICAgIGZpbmFsIENsYXNzIGtsYXNzID0gY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3M7CiAgICBib29sIGlzU3ltYm9sID0ga2xhc3MgPT0gY29yZVR5cGVzLmludGVybmFsU3ltYm9sQ2xhc3M7CiAgICBpZiAoIWNvbnN0cnVjdG9yLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIHJlcG9ydEludmFsaWQobm9kZSwgJ05vbi1jb25zdCBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uLicpOwogICAgfQogICAgaWYgKGNvbnN0cnVjdG9yLmZ1bmN0aW9uLmJvZHkgIT0gbnVsbCAmJgogICAgICAgIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLmJvZHkgaXMhIEVtcHR5U3RhdGVtZW50KSB7CiAgICAgIHJldHVybiByZXBvcnRJbnZhbGlkKAogICAgICAgICAgbm9kZSwKICAgICAgICAgICdDb25zdHJ1Y3RvciAiJG5vZGUiIGhhcyBub24tdHJpdmlhbCBib2R5ICcKICAgICAgICAgICciJHtjb25zdHJ1Y3Rvci5mdW5jdGlvbi5ib2R5LnJ1bnRpbWVUeXBlfSIuJyk7CiAgICB9CiAgICBpZiAoa2xhc3MuaXNBYnN0cmFjdCkgewogICAgICByZXR1cm4gcmVwb3J0SW52YWxpZCgKICAgICAgICAgIG5vZGUsICdDb25zdHJ1Y3RvciAiJG5vZGUiIGJlbG9uZ3MgdG8gYWJzdHJhY3QgY2xhc3MgIiR7a2xhc3N9Ii4nKTsKICAgIH0KCiAgICBmaW5hbCBwb3NpdGlvbmFscyA9IGV2YWx1YXRlUG9zaXRpb25hbEFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICBmaW5hbCBuYW1lZCA9IGV2YWx1YXRlTmFtZWRBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpOwoKICAgIGlmIChpc1N5bWJvbCAmJiBzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIHJldHVybiB1bmV2YWx1YXRlZCgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICBuZXcgQ29uc3RydWN0b3JJbnZvY2F0aW9uKGNvbnN0cnVjdG9yLAogICAgICAgICAgICAgIHVuZXZhbHVhdGVkQXJndW1lbnRzKHBvc2l0aW9uYWxzLCBuYW1lZCwgbm9kZS5hcmd1bWVudHMudHlwZXMpLAogICAgICAgICAgICAgIGlzQ29uc3Q6IHRydWUpKTsKICAgIH0KCiAgICAvLyBTcGVjaWFsIGNhc2UgdGhlIGRhcnQ6Y29yZSdzIFN5bWJvbCBjbGFzcyBoZXJlIGFuZCBjb252ZXJ0IGl0IHRvIGEKICAgIC8vIFtTeW1ib2xDb25zdGFudF0uICBGb3IgaW52YWxpZCB2YWx1ZXMgd2UgcmVwb3J0IGEgY29tcGlsZS10aW1lIGVycm9yLgogICAgaWYgKGlzU3ltYm9sKSB7CiAgICAgIGZpbmFsIENvbnN0YW50IG5hbWVWYWx1ZSA9IHBvc2l0aW9uYWxzLnNpbmdsZTsKCiAgICAgIGlmIChuYW1lVmFsdWUgaXMgU3RyaW5nQ29uc3RhbnQgJiYgaXNWYWxpZFN5bWJvbE5hbWUobmFtZVZhbHVlLnZhbHVlKSkgewogICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IFN5bWJvbENvbnN0YW50KG5hbWVWYWx1ZS52YWx1ZSwgbnVsbCkpOwogICAgICB9CiAgICAgIHJldHVybiByZXBvcnQobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCwKICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN5bWJvbE5hbWUud2l0aEFyZ3VtZW50cyhuYW1lVmFsdWUpKTsKICAgIH0KCiAgICBmaW5hbCB0eXBlQXJndW1lbnRzID0gZXZhbHVhdGVUeXBlQXJndW1lbnRzKG5vZGUsIG5vZGUuYXJndW1lbnRzKTsKCiAgICAvLyBGaWxsIGluIGFueSBtaXNzaW5nIHR5cGUgYXJndW1lbnRzIHdpdGggImR5bmFtaWMiLgogICAgZm9yIChpbnQgaSA9IHR5cGVBcmd1bWVudHMubGVuZ3RoOyBpIDwga2xhc3MudHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgdHlwZUFyZ3VtZW50cy5hZGQoY29uc3QgRHluYW1pY1R5cGUoKSk7CiAgICB9CgogICAgLy8gU3RhcnQgYnVpbGRpbmcgYSBuZXcgaW5zdGFuY2UuCiAgICByZXR1cm4gd2l0aE5ld0luc3RhbmNlQnVpbGRlcihrbGFzcywgdHlwZUFyZ3VtZW50cywgKCkgewogICAgICByZXR1cm4gcnVuSW5zaWRlQ29udGV4dElmTm9Db250ZXh0KG5vZGUsICgpIHsKICAgICAgICAvLyAiUnVuIiB0aGUgY29uc3RydWN0b3IgKGFuZCBhbnkgc3VwZXIgY29uc3RydWN0b3IgY2FsbHMpLCB3aGljaCB3aWxsCiAgICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgZmllbGRzIG9mIHRoZSBuZXcgaW5zdGFuY2UuCiAgICAgICAgaWYgKHNob3VsZEJlVW5ldmFsdWF0ZWQpIHsKICAgICAgICAgIGVudGVyTGF6eSgpOwogICAgICAgICAgaGFuZGxlQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgICAgICAgIGNvbnN0cnVjdG9yLCB0eXBlQXJndW1lbnRzLCBwb3NpdGlvbmFscywgbmFtZWQpOwogICAgICAgICAgbGVhdmVMYXp5KCk7CiAgICAgICAgICByZXR1cm4gdW5ldmFsdWF0ZWQobm9kZSwgaW5zdGFuY2VCdWlsZGVyLmJ1aWxkVW5ldmFsdWF0ZWRJbnN0YW5jZSgpKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgICAgICBjb25zdHJ1Y3RvciwgdHlwZUFyZ3VtZW50cywgcG9zaXRpb25hbHMsIG5hbWVkKTsKICAgICAgICBpZiAoc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICAgICAgcmV0dXJuIHVuZXZhbHVhdGVkKG5vZGUsIGluc3RhbmNlQnVpbGRlci5idWlsZFVuZXZhbHVhdGVkSW5zdGFuY2UoKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjYW5vbmljYWxpemUoaW5zdGFuY2VCdWlsZGVyLmJ1aWxkSW5zdGFuY2UoKSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICB2aXNpdEluc3RhbmNlQ3JlYXRpb24oSW5zdGFuY2VDcmVhdGlvbiBub2RlKSB7CiAgICByZXR1cm4gd2l0aE5ld0luc3RhbmNlQnVpbGRlcihub2RlLmNsYXNzTm9kZSwgbm9kZS50eXBlQXJndW1lbnRzLCAoKSB7CiAgICAgIGZvciAoQXNzZXJ0U3RhdGVtZW50IHN0YXRlbWVudCBpbiBub2RlLmFzc2VydHMpIHsKICAgICAgICBjaGVja0Fzc2VydChzdGF0ZW1lbnQpOwogICAgICB9CiAgICAgIG5vZGUuZmllbGRWYWx1ZXMuZm9yRWFjaCgoUmVmZXJlbmNlIGZpZWxkUmVmLCBFeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgICAgaW5zdGFuY2VCdWlsZGVyLnNldEZpZWxkVmFsdWUoCiAgICAgICAgICAgIGZpZWxkUmVmLmFzRmllbGQsIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24odmFsdWUpKTsKICAgICAgfSk7CiAgICAgIG5vZGUudW51c2VkQXJndW1lbnRzLmZvckVhY2goKEV4cHJlc3Npb24gdmFsdWUpIHsKICAgICAgICBDb25zdGFudCBjb25zdGFudCA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24odmFsdWUpOwogICAgICAgIGlmIChjb25zdGFudCBpcyBVbmV2YWx1YXRlZENvbnN0YW50KSB7CiAgICAgICAgICBpbnN0YW5jZUJ1aWxkZXIudW51c2VkQXJndW1lbnRzLmFkZChleHRyYWN0KGNvbnN0YW50KSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaWYgKHNob3VsZEJlVW5ldmFsdWF0ZWQpIHsKICAgICAgICByZXR1cm4gdW5ldmFsdWF0ZWQobm9kZSwgaW5zdGFuY2VCdWlsZGVyLmJ1aWxkVW5ldmFsdWF0ZWRJbnN0YW5jZSgpKTsKICAgICAgfQogICAgICByZXR1cm4gY2Fub25pY2FsaXplKGluc3RhbmNlQnVpbGRlci5idWlsZEluc3RhbmNlKCkpOwogICAgfSk7CiAgfQoKICBib29sIGlzVmFsaWRTeW1ib2xOYW1lKFN0cmluZyBuYW1lKSB7CiAgICAvLyBTZWUgaHR0cHM6Ly9hcGkuZGFydGxhbmcub3JnL3N0YWJsZS8yLjAuMC9kYXJ0LWNvcmUvU3ltYm9sL1N5bWJvbC5odG1sOgogICAgLy8KICAgIC8vICBBIHF1YWxpZmllZCBuYW1lIGlzIGEgdmFsaWQgbmFtZSBwcmVjZWRlZCBieSBhIHB1YmxpYyBpZGVudGlmaWVyIG5hbWUgYW5kCiAgICAvLyAgYSAnLicsIGUuZy4sIGZvby5iYXIuYmF6PSBpcyBhIHF1YWxpZmllZCB2ZXJzaW9uIG9mIGJhej0uCiAgICAvLwogICAgLy8gIFRoYXQgbWVhbnMgdGhhdCB0aGUgY29udGVudCBvZiB0aGUgbmFtZSBTdHJpbmcgbXVzdCBiZSBlaXRoZXIKICAgIC8vICAgICAtIGEgdmFsaWQgcHVibGljIERhcnQgaWRlbnRpZmllciAodGhhdCBpcywgYW4gaWRlbnRpZmllciBub3QKICAgIC8vICAgICAgIHN0YXJ0aW5nIHdpdGggIl8iKSwKICAgIC8vICAgICAtIHN1Y2ggYW4gaWRlbnRpZmllciBmb2xsb3dlZCBieSAiPSIgKGEgc2V0dGVyIG5hbWUpLAogICAgLy8gICAgIC0gdGhlIG5hbWUgb2YgYSBkZWNsYXJhYmxlIG9wZXJhdG9yLAogICAgLy8gICAgIC0gYW55IG9mIHRoZSBhYm92ZSBwcmVjZWRlZCBieSBhbnkgbnVtYmVyIG9mIHF1YWxpZmllcnMsIHdoZXJlIGEKICAgIC8vICAgICAgIHF1YWxpZmllciBpcyBhIG5vbi1wcml2YXRlIGlkZW50aWZpZXIgZm9sbG93ZWQgYnkgJy4nLAogICAgLy8gICAgIC0gb3IgdGhlIGVtcHR5IHN0cmluZyAodGhlIGRlZmF1bHQgbmFtZSBvZiBhIGxpYnJhcnkgd2l0aCBubyBsaWJyYXJ5CiAgICAvLyAgICAgICBuYW1lIGRlY2xhcmF0aW9uKS4KCiAgICBjb25zdCBvcGVyYXRvck5hbWVzID0gY29uc3QgPFN0cmluZz5bCiAgICAgICcrJywKICAgICAgJy0nLAogICAgICAnKicsCiAgICAgICcvJywKICAgICAgJyUnLAogICAgICAnfi8nLAogICAgICAnJicsCiAgICAgICd8JywKICAgICAgJ14nLAogICAgICAnficsCiAgICAgICc8PCcsCiAgICAgICc+PicsCiAgICAgICc8JywKICAgICAgJzw9JywKICAgICAgJz4nLAogICAgICAnPj0nLAogICAgICAnPT0nLAogICAgICAnW10nLAogICAgICAnW109JywKICAgICAgJ3VuYXJ5LScKICAgIF07CgogICAgaWYgKG5hbWUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKG5hbWUgPT0gJycpIHJldHVybiB0cnVlOwoKICAgIGZpbmFsIHBhcnRzID0gbmFtZS5zcGxpdCgnLicpOwoKICAgIC8vIEVhY2ggcXVhbGlmaWVyIG11c3QgYmUgYSBwdWJsaWMgaWRlbnRpZmllci4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoIC0gMTsgKytpKSB7CiAgICAgIGlmICghaXNWYWxpZFB1YmxpY0lkZW50aWZpZXIocGFydHNbaV0pKSByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgU3RyaW5nIGxhc3QgPSBwYXJ0cy5sYXN0OwogICAgaWYgKG9wZXJhdG9yTmFtZXMuY29udGFpbnMobGFzdCkpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAobGFzdC5lbmRzV2l0aCgnPScpKSB7CiAgICAgIGxhc3QgPSBsYXN0LnN1YnN0cmluZygwLCBsYXN0Lmxlbmd0aCAtIDEpOwogICAgfQogICAgaWYgKCFpc1ZhbGlkUHVibGljSWRlbnRpZmllcihsYXN0KSkgcmV0dXJuIGZhbHNlOwoKICAgIHJldHVybiB0cnVlOwogIH0KCiAgLy8vIEZyb20gdGhlIERhcnQgTGFuZ3VhZ2Ugc3BlY2lmaWNhdGlvbjoKICAvLy8KICAvLy8gICBJREVOVElGSUVSOgogIC8vLyAgICAgSURFTlRJRklFUl9TVEFSVCBJREVOVElGSUVSX1BBUlQqCiAgLy8vCiAgLy8vICAgSURFTlRJRklFUl9TVEFSVDoKICAvLy8gICAgICAgSURFTlRJRklFUl9TVEFSVF9OT19ET0xMQVIgfCDigJgk4oCZCiAgLy8vCiAgLy8vICAgSURFTlRJRklFUl9QQVJUOgogIC8vLyAgICAgICBJREVOVElGSUVSX1NUQVJUIHwgRElHSVQKICAvLy8KICAvLy8gICBJREVOVElGSUVSX05PX0RPTExBUjoKICAvLy8gICAgIElERU5USUZJRVJfU1RBUlRfTk9fRE9MTEFSIElERU5USUZJRVJfUEFSVF9OT19ET0xMQVIqCiAgLy8vCiAgLy8vICAgSURFTlRJRklFUl9TVEFSVF9OT19ET0xMQVI6CiAgLy8vICAgICAgIExFVFRFUiB8ICdfJwogIC8vLwogIC8vLyAgIElERU5USUZJRVJfUEFSVF9OT19ET0xMQVI6CiAgLy8vICAgICAgIElERU5USUZJRVJfU1RBUlRfTk9fRE9MTEFSIHwgRElHSVQKICAvLy8KICBzdGF0aWMgZmluYWwgcHVibGljSWRlbnRpZmllclJlZ0V4cCA9CiAgICAgIG5ldyBSZWdFeHAocideW2EtekEtWiRdW2EtekEtWjAtOV8kXSokJyk7CgogIHN0YXRpYyBjb25zdCBub25Vc2FibGVLZXl3b3JkcyA9IGNvbnN0IDxTdHJpbmc+WwogICAgJ2Fzc2VydCcsCiAgICAnYnJlYWsnLAogICAgJ2Nhc2UnLAogICAgJ2NhdGNoJywKICAgICdjbGFzcycsCiAgICAnY29uc3QnLAogICAgJ2NvbnRpbnVlJywKICAgICdkZWZhdWx0JywKICAgICdkbycsCiAgICAnZWxzZScsCiAgICAnZW51bScsCiAgICAnZXh0ZW5kcycsCiAgICAnZmFsc2UnLAogICAgJ2ZpbmFsJywKICAgICdmaW5hbGx5JywKICAgICdmb3InLAogICAgJ2lmJywKICAgICdpbicsCiAgICAnaXMnLAogICAgJ25ldycsCiAgICAnbnVsbCcsCiAgICAncmV0aHJvdycsCiAgICAncmV0dXJuJywKICAgICdzdXBlcicsCiAgICAnc3dpdGNoJywKICAgICd0aGlzJywKICAgICd0aHJvdycsCiAgICAndHJ1ZScsCiAgICAndHJ5JywKICAgICd2YXInLAogICAgJ3doaWxlJywKICAgICd3aXRoJywKICBdOwoKICBib29sIGlzVmFsaWRQdWJsaWNJZGVudGlmaWVyKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gcHVibGljSWRlbnRpZmllclJlZ0V4cC5oYXNNYXRjaChuYW1lKSAmJgogICAgICAgICFub25Vc2FibGVLZXl3b3Jkcy5jb250YWlucyhuYW1lKTsKICB9CgogIGhhbmRsZUNvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgQ29uc3RydWN0b3IgY29uc3RydWN0b3IsCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIExpc3Q8Q29uc3RhbnQ+IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIE1hcDxTdHJpbmcsIENvbnN0YW50PiBuYW1lZEFyZ3VtZW50cykgewogICAgcmV0dXJuIHJ1bkluc2lkZUNvbnRleHQoY29uc3RydWN0b3IsICgpIHsKICAgICAgcmV0dXJuIHdpdGhOZXdFbnZpcm9ubWVudCgoKSB7CiAgICAgICAgZmluYWwgQ2xhc3Mga2xhc3MgPSBjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzczsKICAgICAgICBmaW5hbCBGdW5jdGlvbk5vZGUgZnVuY3Rpb24gPSBjb25zdHJ1Y3Rvci5mdW5jdGlvbjsKCiAgICAgICAgLy8gV2Ugc2ltdWxhdGUgbm93IHRoZSBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uLgoKICAgICAgICAvLyBTdGVwIDEpIE1hcCB0eXBlIGFyZ3VtZW50cyBhbmQgbm9ybWFsIGFyZ3VtZW50cyBmcm9tIGNhbGxlciB0byBjYWxsZWUuCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrbGFzcy50eXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgZW52LmFkZFR5cGVQYXJhbWV0ZXJWYWx1ZShrbGFzcy50eXBlUGFyYW1ldGVyc1tpXSwgdHlwZUFyZ3VtZW50c1tpXSk7CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGZpbmFsIFZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyID0KICAgICAgICAgICAgICBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICAgICAgICAgIGZpbmFsIENvbnN0YW50IHZhbHVlID0gKGkgPCBwb3NpdGlvbmFsQXJndW1lbnRzLmxlbmd0aCkKICAgICAgICAgICAgICA/IHBvc2l0aW9uYWxBcmd1bWVudHNbaV0KICAgICAgICAgICAgICA6IF9ldmFsdWF0ZU51bGxhYmxlU3ViZXhwcmVzc2lvbihwYXJhbWV0ZXIuaW5pdGlhbGl6ZXIpOwogICAgICAgICAgZW52LmFkZFZhcmlhYmxlVmFsdWUocGFyYW1ldGVyLCB2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGZvciAoZmluYWwgVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgaW4gZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgICAgICBmaW5hbCBDb25zdGFudCB2YWx1ZSA9IG5hbWVkQXJndW1lbnRzW3BhcmFtZXRlci5uYW1lXSA/PwogICAgICAgICAgICAgIF9ldmFsdWF0ZU51bGxhYmxlU3ViZXhwcmVzc2lvbihwYXJhbWV0ZXIuaW5pdGlhbGl6ZXIpOwogICAgICAgICAgZW52LmFkZFZhcmlhYmxlVmFsdWUocGFyYW1ldGVyLCB2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICAvLyBTdGVwIDIpIFJ1biBhbGwgaW5pdGlhbGl6ZXJzIChpbmNsdWRpbmcgc3VwZXIgY2FsbHMpIHdpdGggZW52aXJvbm1lbnQgc2V0dXAuCiAgICAgICAgZm9yIChmaW5hbCBGaWVsZCBmaWVsZCBpbiBrbGFzcy5maWVsZHMpIHsKICAgICAgICAgIGlmICghZmllbGQuaXNTdGF0aWMpIHsKICAgICAgICAgICAgaW5zdGFuY2VCdWlsZGVyLnNldEZpZWxkVmFsdWUoCiAgICAgICAgICAgICAgICBmaWVsZCwgX2V2YWx1YXRlTnVsbGFibGVTdWJleHByZXNzaW9uKGZpZWxkLmluaXRpYWxpemVyKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvciAoZmluYWwgSW5pdGlhbGl6ZXIgaW5pdCBpbiBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMpIHsKICAgICAgICAgIGlmIChpbml0IGlzIEZpZWxkSW5pdGlhbGl6ZXIpIHsKICAgICAgICAgICAgaW5zdGFuY2VCdWlsZGVyLnNldEZpZWxkVmFsdWUoCiAgICAgICAgICAgICAgICBpbml0LmZpZWxkLCBfZXZhbHVhdGVTdWJleHByZXNzaW9uKGluaXQudmFsdWUpKTsKICAgICAgICAgIH0gZWxzZSBpZiAoaW5pdCBpcyBMb2NhbEluaXRpYWxpemVyKSB7CiAgICAgICAgICAgIGZpbmFsIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBpbml0LnZhcmlhYmxlOwogICAgICAgICAgICBlbnYuYWRkVmFyaWFibGVWYWx1ZSgKICAgICAgICAgICAgICAgIHZhcmlhYmxlLCBfZXZhbHVhdGVTdWJleHByZXNzaW9uKHZhcmlhYmxlLmluaXRpYWxpemVyKSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGluaXQgaXMgU3VwZXJJbml0aWFsaXplcikgewogICAgICAgICAgICBoYW5kbGVDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgICAgICAgICBpbml0LnRhcmdldCwKICAgICAgICAgICAgICAgIGV2YWx1YXRlU3VwZXJUeXBlQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICAgIGluaXQsIGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzLnN1cGVydHlwZSksCiAgICAgICAgICAgICAgICBldmFsdWF0ZVBvc2l0aW9uYWxBcmd1bWVudHMoaW5pdC5hcmd1bWVudHMpLAogICAgICAgICAgICAgICAgZXZhbHVhdGVOYW1lZEFyZ3VtZW50cyhpbml0LmFyZ3VtZW50cykpOwogICAgICAgICAgfSBlbHNlIGlmIChpbml0IGlzIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIpIHsKICAgICAgICAgICAgLy8gU2luY2UgYSByZWRpcmVjdGluZyBjb25zdHJ1Y3RvciB0YXJnZXRzIGEgY29uc3RydWN0b3Igb2YgdGhlIHNhbWUKICAgICAgICAgICAgLy8gY2xhc3MsIHdlIHBhc3MgdGhlIHNhbWUgW3R5cGVBcmd1bWVudHNdLgogICAgICAgICAgICBoYW5kbGVDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgICAgICAgICBpbml0LnRhcmdldCwKICAgICAgICAgICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgICAgICAgICBldmFsdWF0ZVBvc2l0aW9uYWxBcmd1bWVudHMoaW5pdC5hcmd1bWVudHMpLAogICAgICAgICAgICAgICAgZXZhbHVhdGVOYW1lZEFyZ3VtZW50cyhpbml0LmFyZ3VtZW50cykpOwogICAgICAgICAgfSBlbHNlIGlmIChpbml0IGlzIEFzc2VydEluaXRpYWxpemVyKSB7CiAgICAgICAgICAgIGNoZWNrQXNzZXJ0KGluaXQuc3RhdGVtZW50KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiByZXBvcnRJbnZhbGlkKAogICAgICAgICAgICAgICAgY29uc3RydWN0b3IsCiAgICAgICAgICAgICAgICAnTm8gc3VwcG9ydCBmb3IgaGFuZGxpbmcgaW5pdGlhbGl6ZXIgb2YgdHlwZSAnCiAgICAgICAgICAgICAgICAnIiR7aW5pdC5ydW50aW1lVHlwZX0iLicpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yIChVbmV2YWx1YXRlZENvbnN0YW50IGNvbnN0YW50IGluIGVudi51bmV2YWx1YXRlZFVucmVhZENvbnN0YW50cykgewogICAgICAgICAgaW5zdGFuY2VCdWlsZGVyLnVudXNlZEFyZ3VtZW50cy5hZGQoZXh0cmFjdChjb25zdGFudCkpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9CgogIHZvaWQgY2hlY2tBc3NlcnQoQXNzZXJ0U3RhdGVtZW50IHN0YXRlbWVudCkgewogICAgZmluYWwgQ29uc3RhbnQgY29uZGl0aW9uID0gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihzdGF0ZW1lbnQuY29uZGl0aW9uKTsKCiAgICBpZiAoc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICBFeHByZXNzaW9uIG1lc3NhZ2UgPSBudWxsOwogICAgICBpZiAoc3RhdGVtZW50Lm1lc3NhZ2UgIT0gbnVsbCkgewogICAgICAgIGVudGVyTGF6eSgpOwogICAgICAgIG1lc3NhZ2UgPSBleHRyYWN0KF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24oc3RhdGVtZW50Lm1lc3NhZ2UpKTsKICAgICAgICBsZWF2ZUxhenkoKTsKICAgICAgfQogICAgICBpbnN0YW5jZUJ1aWxkZXIuYXNzZXJ0cy5hZGQobmV3IEFzc2VydFN0YXRlbWVudChleHRyYWN0KGNvbmRpdGlvbiksCiAgICAgICAgICBtZXNzYWdlOiBtZXNzYWdlLAogICAgICAgICAgY29uZGl0aW9uU3RhcnRPZmZzZXQ6IHN0YXRlbWVudC5jb25kaXRpb25TdGFydE9mZnNldCwKICAgICAgICAgIGNvbmRpdGlvbkVuZE9mZnNldDogc3RhdGVtZW50LmNvbmRpdGlvbkVuZE9mZnNldCkpOwogICAgfSBlbHNlIGlmIChjb25kaXRpb24gaXMgQm9vbENvbnN0YW50KSB7CiAgICAgIGlmICghY29uZGl0aW9uLnZhbHVlKSB7CiAgICAgICAgaWYgKHN0YXRlbWVudC5tZXNzYWdlID09IG51bGwpIHsKICAgICAgICAgIHJlcG9ydChzdGF0ZW1lbnQuY29uZGl0aW9uLCBtZXNzYWdlQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uKTsKICAgICAgICB9CiAgICAgICAgZmluYWwgQ29uc3RhbnQgbWVzc2FnZSA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24oc3RhdGVtZW50Lm1lc3NhZ2UpOwogICAgICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgICAgICBpbnN0YW5jZUJ1aWxkZXIuYXNzZXJ0cy5hZGQobmV3IEFzc2VydFN0YXRlbWVudChleHRyYWN0KGNvbmRpdGlvbiksCiAgICAgICAgICAgICAgbWVzc2FnZTogZXh0cmFjdChtZXNzYWdlKSwKICAgICAgICAgICAgICBjb25kaXRpb25TdGFydE9mZnNldDogc3RhdGVtZW50LmNvbmRpdGlvblN0YXJ0T2Zmc2V0LAogICAgICAgICAgICAgIGNvbmRpdGlvbkVuZE9mZnNldDogc3RhdGVtZW50LmNvbmRpdGlvbkVuZE9mZnNldCkpOwogICAgICAgIH0gZWxzZSBpZiAobWVzc2FnZSBpcyBTdHJpbmdDb25zdGFudCkgewogICAgICAgICAgcmVwb3J0KAogICAgICAgICAgICAgIHN0YXRlbWVudC5jb25kaXRpb24sCiAgICAgICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxGYWlsZWRBc3NlcnRpb25XaXRoTWVzc2FnZQogICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhtZXNzYWdlLnZhbHVlKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlcG9ydCgKICAgICAgICAgICAgICBzdGF0ZW1lbnQubWVzc2FnZSwKICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRUeXBlLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsCiAgICAgICAgICAgICAgICAgIHR5cGVFbnZpcm9ubWVudC5zdHJpbmdUeXBlLAogICAgICAgICAgICAgICAgICBtZXNzYWdlLmdldFR5cGUodHlwZUVudmlyb25tZW50KSkpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmVwb3J0KAogICAgICAgICAgc3RhdGVtZW50LmNvbmRpdGlvbiwKICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFR5cGUud2l0aEFyZ3VtZW50cyhjb25kaXRpb24sCiAgICAgICAgICAgICAgdHlwZUVudmlyb25tZW50LmJvb2xUeXBlLCBjb25kaXRpb24uZ2V0VHlwZSh0eXBlRW52aXJvbm1lbnQpKSk7CiAgICB9CiAgfQoKICB2aXNpdEludmFsaWRFeHByZXNzaW9uKEludmFsaWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiByZXBvcnRJbnZhbGlkKG5vZGUsIG5vZGUubWVzc2FnZSk7CiAgfQoKICB2aXNpdE1ldGhvZEludm9jYXRpb24oTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICAvLyBXZSBoYXZlIG5vIHN1cHBvcnQgZm9yIGdlbmVyaWMgbWV0aG9kIGludm9jYXRpb24gYXRtLgogICAgYXNzZXJ0KG5vZGUuYXJndW1lbnRzLm5hbWVkLmlzRW1wdHkpOwoKICAgIGZpbmFsIENvbnN0YW50IHJlY2VpdmVyID0gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihub2RlLnJlY2VpdmVyKTsKICAgIGZpbmFsIExpc3Q8Q29uc3RhbnQ+IGFyZ3VtZW50cyA9CiAgICAgICAgZXZhbHVhdGVQb3NpdGlvbmFsQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKCiAgICBpZiAoc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICByZXR1cm4gdW5ldmFsdWF0ZWQoCiAgICAgICAgICBub2RlLAogICAgICAgICAgbmV3IE1ldGhvZEludm9jYXRpb24oZXh0cmFjdChyZWNlaXZlciksIG5vZGUubmFtZSwKICAgICAgICAgICAgICB1bmV2YWx1YXRlZEFyZ3VtZW50cyhhcmd1bWVudHMsIHt9LCBub2RlLmFyZ3VtZW50cy50eXBlcykpKTsKICAgIH0KCiAgICAvLyBIYW5kbGUgPT0gYW5kICE9IGZpcnN0IChpdCdzIGNvbW1vbiBiZXR3ZWVuIGFsbCB0eXBlcykuIFNpbmNlIGBhICE9IGJgIGlzCiAgICAvLyBwYXJzZWQgYXMgYCEoYSA9PSBiKWAgaXQgaXMgaGFuZGxlZCBpbXBsaWNpdGx5IHRocm91Z2ggPT0uCiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxICYmIG5vZGUubmFtZS5uYW1lID09ICc9PScpIHsKICAgICAgZmluYWwgcmlnaHQgPSBhcmd1bWVudHNbMF07CgogICAgICAvLyBbRG91YmxlQ29uc3RhbnRdIHVzZXMgW2lkZW50aWNhbF0gdG8gZGV0ZXJtaW5lIGVxdWFsaXR5LCBzbyB3ZSBuZWVkIHR3bwogICAgICAvLyBzcGVjaWFsIGNhc2VzOgogICAgICAvLyBUd28gTmFOcyBhcmUgYWx3YXlzIHVuZXF1YWwgZXZlbiBpZiBbaWRlbnRpY2FsXSByZXR1cm5zIGB0cnVlYC4KICAgICAgaWYgKGlzTmFOKHJlY2VpdmVyKSB8fCBpc05hTihyaWdodCkpIHsKICAgICAgICByZXR1cm4gZmFsc2VDb25zdGFudDsKICAgICAgfQoKICAgICAgLy8gVHdvIHplcm8gdmFsdWVzIGFyZSBhbHdheXMgZXF1YWwgcmVnYXJkbGVzcyBvZiBzaWduLgogICAgICBpZiAoaXNaZXJvKHJlY2VpdmVyKSkgewogICAgICAgIHJldHVybiBtYWtlQm9vbENvbnN0YW50KGlzWmVybyhyaWdodCkpOwogICAgICB9CgogICAgICBpZiAocmVjZWl2ZXIgaXMgTnVsbENvbnN0YW50IHx8CiAgICAgICAgICByZWNlaXZlciBpcyBCb29sQ29uc3RhbnQgfHwKICAgICAgICAgIHJlY2VpdmVyIGlzIEludENvbnN0YW50IHx8CiAgICAgICAgICByZWNlaXZlciBpcyBEb3VibGVDb25zdGFudCB8fAogICAgICAgICAgcmVjZWl2ZXIgaXMgU3RyaW5nQ29uc3RhbnQgfHwKICAgICAgICAgIHJpZ2h0IGlzIE51bGxDb25zdGFudCkgewogICAgICAgIHJldHVybiBtYWtlQm9vbENvbnN0YW50KHJlY2VpdmVyID09IHJpZ2h0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRFcXVhbHNPcGVyYW5kVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgcmVjZWl2ZXIsIHJlY2VpdmVyLmdldFR5cGUodHlwZUVudmlyb25tZW50KSkpOwogICAgICB9CiAgICB9CgogICAgLy8gVGhpcyBpcyBhIHdoaXRlLWxpc3RlZCBzZXQgb2YgbWV0aG9kcyB3ZSBuZWVkIHRvIHN1cHBvcnQgb24gY29uc3RhbnRzLgogICAgaWYgKHJlY2VpdmVyIGlzIFN0cmluZ0NvbnN0YW50KSB7CiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgICBzd2l0Y2ggKG5vZGUubmFtZS5uYW1lKSB7CiAgICAgICAgICBjYXNlICcrJzoKICAgICAgICAgICAgZmluYWwgQ29uc3RhbnQgb3RoZXIgPSBhcmd1bWVudHNbMF07CiAgICAgICAgICAgIGlmIChvdGhlciBpcyBTdHJpbmdDb25zdGFudCkgewogICAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUoCiAgICAgICAgICAgICAgICAgIG5ldyBTdHJpbmdDb25zdGFudChyZWNlaXZlci52YWx1ZSArIG90aGVyLnZhbHVlKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICAgICcrJywKICAgICAgICAgICAgICAgICAgICByZWNlaXZlciwKICAgICAgICAgICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuc3RyaW5nVHlwZSwKICAgICAgICAgICAgICAgICAgICBvdGhlci5nZXRUeXBlKHR5cGVFbnZpcm9ubWVudCkpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocmVjZWl2ZXIgaXMgSW50Q29uc3RhbnQgfHwgcmVjZWl2ZXIgaXMgSmF2YVNjcmlwdEludENvbnN0YW50KSB7CiAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDApIHsKICAgICAgICBzd2l0Y2ggKG5vZGUubmFtZS5uYW1lKSB7CiAgICAgICAgICBjYXNlICd1bmFyeS0nOgogICAgICAgICAgICBpZiAodGFyZ2V0aW5nSmF2YVNjcmlwdCkgewogICAgICAgICAgICAgIEJpZ0ludCB2YWx1ZSA9IChyZWNlaXZlciBhcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQpLmJpZ0ludFZhbHVlOwogICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBCaWdJbnQuemVybykgewogICAgICAgICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShuZXcgRG91YmxlQ29uc3RhbnQoLTAuMCkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBKYXZhU2NyaXB0SW50Q29uc3RhbnQuZnJvbUJpZ0ludCgtdmFsdWUpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbnQgdmFsdWUgPSAocmVjZWl2ZXIgYXMgSW50Q29uc3RhbnQpLnZhbHVlOwogICAgICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBJbnRDb25zdGFudCgtdmFsdWUpKTsKICAgICAgICAgIGNhc2UgJ34nOgogICAgICAgICAgICBpZiAodGFyZ2V0aW5nSmF2YVNjcmlwdCkgewogICAgICAgICAgICAgIEJpZ0ludCB2YWx1ZSA9IChyZWNlaXZlciBhcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQpLmJpZ0ludFZhbHVlOwogICAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEphdmFTY3JpcHRJbnRDb25zdGFudC5mcm9tQmlnSW50KAogICAgICAgICAgICAgICAgICAofnZhbHVlKS50b1Vuc2lnbmVkKDMyKSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGludCB2YWx1ZSA9IChyZWNlaXZlciBhcyBJbnRDb25zdGFudCkudmFsdWU7CiAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEludENvbnN0YW50KH52YWx1ZSkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgICBmaW5hbCBDb25zdGFudCBvdGhlciA9IGFyZ3VtZW50c1swXTsKICAgICAgICBmaW5hbCBvcCA9IG5vZGUubmFtZS5uYW1lOwogICAgICAgIGlmIChvdGhlciBpcyBJbnRDb25zdGFudCB8fCBvdGhlciBpcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQpIHsKICAgICAgICAgIGlmICgob3AgPT0gJzw8JyB8fCBvcCA9PSAnPj4nIHx8IG9wID09ICc+Pj4nKSkgewogICAgICAgICAgICB2YXIgcmVjZWl2ZXJWYWx1ZSA9IHJlY2VpdmVyIGlzIEludENvbnN0YW50CiAgICAgICAgICAgICAgICA/IHJlY2VpdmVyLnZhbHVlCiAgICAgICAgICAgICAgICA6IChyZWNlaXZlciBhcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQpLmJpZ0ludFZhbHVlOwogICAgICAgICAgICBpbnQgb3RoZXJWYWx1ZSA9IG90aGVyIGlzIEludENvbnN0YW50CiAgICAgICAgICAgICAgICA/IG90aGVyLnZhbHVlCiAgICAgICAgICAgICAgICA6IChvdGhlciBhcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQpLmJpZ0ludFZhbHVlLnRvSW50KCk7CiAgICAgICAgICAgIGlmIChvdGhlclZhbHVlIDwgMCkgewogICAgICAgICAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3QsCiAgICAgICAgICAgICAgICAgIC8vIFRPRE8oYXNrZXNjKTogQ2hhbmdlIGFyZ3VtZW50IHR5cGVzIGluIHRlbXBsYXRlIHRvIGNvbnN0YW50cy4KICAgICAgICAgICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxOZWdhdGl2ZVNoaWZ0LndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgICAgICBvcCwgJyR7cmVjZWl2ZXJWYWx1ZX0nLCAnJHtvdGhlclZhbHVlfScpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIGlmICgob3AgPT0gJyUnIHx8IG9wID09ICd+LycpKSB7CiAgICAgICAgICAgIHZhciByZWNlaXZlclZhbHVlID0gcmVjZWl2ZXIgaXMgSW50Q29uc3RhbnQKICAgICAgICAgICAgICAgID8gcmVjZWl2ZXIudmFsdWUKICAgICAgICAgICAgICAgIDogKHJlY2VpdmVyIGFzIEphdmFTY3JpcHRJbnRDb25zdGFudCkuYmlnSW50VmFsdWU7CiAgICAgICAgICAgIGludCBvdGhlclZhbHVlID0gb3RoZXIgaXMgSW50Q29uc3RhbnQKICAgICAgICAgICAgICAgID8gb3RoZXIudmFsdWUKICAgICAgICAgICAgICAgIDogKG90aGVyIGFzIEphdmFTY3JpcHRJbnRDb25zdGFudCkuYmlnSW50VmFsdWUudG9JbnQoKTsKICAgICAgICAgICAgaWYgKG90aGVyVmFsdWUgPT0gMCkgewogICAgICAgICAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3QsCiAgICAgICAgICAgICAgICAgIC8vIFRPRE8oYXNrZXNjKTogQ2hhbmdlIGFyZ3VtZW50IHR5cGUgaW4gdGVtcGxhdGUgdG8gY29uc3RhbnQuCiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsWmVyb0Rpdmlzb3Iud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgICAgIG9wLCAnJHtyZWNlaXZlclZhbHVlfScpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQoKICAgICAgICAgIHN3aXRjaCAob3ApIHsKICAgICAgICAgICAgY2FzZSAnfCc6CiAgICAgICAgICAgIGNhc2UgJyYnOgogICAgICAgICAgICBjYXNlICdeJzoKICAgICAgICAgICAgICBpbnQgcmVjZWl2ZXJWYWx1ZSA9IHJlY2VpdmVyIGlzIEludENvbnN0YW50CiAgICAgICAgICAgICAgICAgID8gcmVjZWl2ZXIudmFsdWUKICAgICAgICAgICAgICAgICAgOiAocmVjZWl2ZXIgYXMgSmF2YVNjcmlwdEludENvbnN0YW50KQogICAgICAgICAgICAgICAgICAgICAgLmJpZ0ludFZhbHVlCiAgICAgICAgICAgICAgICAgICAgICAudG9VbnNpZ25lZCgzMikKICAgICAgICAgICAgICAgICAgICAgIC50b0ludCgpOwogICAgICAgICAgICAgIGludCBvdGhlclZhbHVlID0gb3RoZXIgaXMgSW50Q29uc3RhbnQKICAgICAgICAgICAgICAgICAgPyBvdGhlci52YWx1ZQogICAgICAgICAgICAgICAgICA6IChvdGhlciBhcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQpCiAgICAgICAgICAgICAgICAgICAgICAuYmlnSW50VmFsdWUKICAgICAgICAgICAgICAgICAgICAgIC50b1Vuc2lnbmVkKDMyKQogICAgICAgICAgICAgICAgICAgICAgLnRvSW50KCk7CiAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRlQmluYXJ5Qml0T3BlcmF0aW9uKAogICAgICAgICAgICAgICAgICBub2RlLm5hbWUubmFtZSwgcmVjZWl2ZXJWYWx1ZSwgb3RoZXJWYWx1ZSwgbm9kZSk7CiAgICAgICAgICAgIGNhc2UgJzw8JzoKICAgICAgICAgICAgY2FzZSAnPj4nOgogICAgICAgICAgICBjYXNlICc+Pj4nOgogICAgICAgICAgICAgIGJvb2wgbmVnYXRpdmUgPSBmYWxzZTsKICAgICAgICAgICAgICBpbnQgcmVjZWl2ZXJWYWx1ZTsKICAgICAgICAgICAgICBpZiAocmVjZWl2ZXIgaXMgSW50Q29uc3RhbnQpIHsKICAgICAgICAgICAgICAgIHJlY2VpdmVyVmFsdWUgPSByZWNlaXZlci52YWx1ZTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgQmlnSW50IGJpZ0ludFZhbHVlID0KICAgICAgICAgICAgICAgICAgICAocmVjZWl2ZXIgYXMgSmF2YVNjcmlwdEludENvbnN0YW50KS5iaWdJbnRWYWx1ZTsKICAgICAgICAgICAgICAgIHJlY2VpdmVyVmFsdWUgPSBiaWdJbnRWYWx1ZS50b1Vuc2lnbmVkKDMyKS50b0ludCgpOwogICAgICAgICAgICAgICAgbmVnYXRpdmUgPSBiaWdJbnRWYWx1ZS5pc05lZ2F0aXZlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpbnQgb3RoZXJWYWx1ZSA9IG90aGVyIGlzIEludENvbnN0YW50CiAgICAgICAgICAgICAgICAgID8gb3RoZXIudmFsdWUKICAgICAgICAgICAgICAgICAgOiAob3RoZXIgYXMgSmF2YVNjcmlwdEludENvbnN0YW50KS5iaWdJbnRWYWx1ZS50b0ludCgpOwoKICAgICAgICAgICAgICByZXR1cm4gZXZhbHVhdGVCaW5hcnlTaGlmdE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgbm9kZS5uYW1lLm5hbWUsIHJlY2VpdmVyVmFsdWUsIG90aGVyVmFsdWUsIG5vZGUsCiAgICAgICAgICAgICAgICAgIG5lZ2F0aXZlUmVjZWl2ZXI6IG5lZ2F0aXZlKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICBudW0gcmVjZWl2ZXJWYWx1ZSA9IHJlY2VpdmVyIGlzIEludENvbnN0YW50CiAgICAgICAgICAgICAgICAgID8gcmVjZWl2ZXIudmFsdWUKICAgICAgICAgICAgICAgICAgOiAocmVjZWl2ZXIgYXMgRG91YmxlQ29uc3RhbnQpLnZhbHVlOwogICAgICAgICAgICAgIG51bSBvdGhlclZhbHVlID0gb3RoZXIgaXMgSW50Q29uc3RhbnQKICAgICAgICAgICAgICAgICAgPyBvdGhlci52YWx1ZQogICAgICAgICAgICAgICAgICA6IChvdGhlciBhcyBEb3VibGVDb25zdGFudCkudmFsdWU7CiAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRlQmluYXJ5TnVtZXJpY09wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgbm9kZS5uYW1lLm5hbWUsIHJlY2VpdmVyVmFsdWUsIG90aGVyVmFsdWUsIG5vZGUpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAob3RoZXIgaXMgRG91YmxlQ29uc3RhbnQpIHsKICAgICAgICAgIG51bSByZWNlaXZlclZhbHVlID0gcmVjZWl2ZXIgaXMgSW50Q29uc3RhbnQKICAgICAgICAgICAgICA/IHJlY2VpdmVyLnZhbHVlCiAgICAgICAgICAgICAgOiAocmVjZWl2ZXIgYXMgRG91YmxlQ29uc3RhbnQpLnZhbHVlOwogICAgICAgICAgcmV0dXJuIGV2YWx1YXRlQmluYXJ5TnVtZXJpY09wZXJhdGlvbigKICAgICAgICAgICAgICBub2RlLm5hbWUubmFtZSwgcmVjZWl2ZXJWYWx1ZSwgb3RoZXIudmFsdWUsIG5vZGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgbm9kZS5uYW1lLm5hbWUsCiAgICAgICAgICAgICAgICByZWNlaXZlciwKICAgICAgICAgICAgICAgIHR5cGVFbnZpcm9ubWVudC5udW1UeXBlLAogICAgICAgICAgICAgICAgb3RoZXIuZ2V0VHlwZSh0eXBlRW52aXJvbm1lbnQpKSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocmVjZWl2ZXIgaXMgRG91YmxlQ29uc3RhbnQpIHsKICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMCkgewogICAgICAgIHN3aXRjaCAobm9kZS5uYW1lLm5hbWUpIHsKICAgICAgICAgIGNhc2UgJ3VuYXJ5LSc6CiAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobWFrZURvdWJsZUNvbnN0YW50KC1yZWNlaXZlci52YWx1ZSkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDEpIHsKICAgICAgICBmaW5hbCBDb25zdGFudCBvdGhlciA9IGFyZ3VtZW50c1swXTsKCiAgICAgICAgaWYgKG90aGVyIGlzIEludENvbnN0YW50IHx8IG90aGVyIGlzIERvdWJsZUNvbnN0YW50KSB7CiAgICAgICAgICBmaW5hbCBudW0gdmFsdWUgPSAob3RoZXIgaXMgSW50Q29uc3RhbnQpCiAgICAgICAgICAgICAgPyBvdGhlci52YWx1ZQogICAgICAgICAgICAgIDogKG90aGVyIGFzIERvdWJsZUNvbnN0YW50KS52YWx1ZTsKICAgICAgICAgIHJldHVybiBldmFsdWF0ZUJpbmFyeU51bWVyaWNPcGVyYXRpb24oCiAgICAgICAgICAgICAgbm9kZS5uYW1lLm5hbWUsIHJlY2VpdmVyLnZhbHVlLCB2YWx1ZSwgbm9kZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBub2RlLm5hbWUubmFtZSwKICAgICAgICAgICAgICAgIHJlY2VpdmVyLAogICAgICAgICAgICAgICAgdHlwZUVudmlyb25tZW50Lm51bVR5cGUsCiAgICAgICAgICAgICAgICBvdGhlci5nZXRUeXBlKHR5cGVFbnZpcm9ubWVudCkpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChyZWNlaXZlciBpcyBCb29sQ29uc3RhbnQpIHsKICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMSkgewogICAgICAgIGZpbmFsIENvbnN0YW50IG90aGVyID0gYXJndW1lbnRzWzBdOwogICAgICAgIGlmIChvdGhlciBpcyBCb29sQ29uc3RhbnQpIHsKICAgICAgICAgIHN3aXRjaCAobm9kZS5uYW1lLm5hbWUpIHsKICAgICAgICAgICAgY2FzZSAnfCc6CiAgICAgICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZSgKICAgICAgICAgICAgICAgICAgbmV3IEJvb2xDb25zdGFudChyZWNlaXZlci52YWx1ZSB8fCBvdGhlci52YWx1ZSkpOwogICAgICAgICAgICBjYXNlICcmJzoKICAgICAgICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKAogICAgICAgICAgICAgICAgICBuZXcgQm9vbENvbnN0YW50KHJlY2VpdmVyLnZhbHVlICYmIG90aGVyLnZhbHVlKSk7CiAgICAgICAgICAgIGNhc2UgJ14nOgogICAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUoCiAgICAgICAgICAgICAgICAgIG5ldyBCb29sQ29uc3RhbnQocmVjZWl2ZXIudmFsdWUgIT0gb3RoZXIudmFsdWUpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocmVjZWl2ZXIgaXMgTnVsbENvbnN0YW50KSB7CiAgICAgIHJldHVybiByZXBvcnQobm9kZSwgbWVzc2FnZUNvbnN0RXZhbE51bGxWYWx1ZSk7CiAgICB9CgogICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICBub2RlLAogICAgICAgIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZE1ldGhvZEludm9jYXRpb24ud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgbm9kZS5uYW1lLm5hbWUsIHJlY2VpdmVyKSk7CiAgfQoKICB2aXNpdExvZ2ljYWxFeHByZXNzaW9uKExvZ2ljYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIGZpbmFsIENvbnN0YW50IGxlZnQgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUubGVmdCk7CiAgICBpZiAoc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICBlbnRlckxhenkoKTsKICAgICAgQ29uc3RhbnQgcmlnaHQgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUucmlnaHQpOwogICAgICBsZWF2ZUxhenkoKTsKICAgICAgcmV0dXJuIHVuZXZhbHVhdGVkKG5vZGUsCiAgICAgICAgICBuZXcgTG9naWNhbEV4cHJlc3Npb24oZXh0cmFjdChsZWZ0KSwgbm9kZS5vcGVyYXRvciwgZXh0cmFjdChyaWdodCkpKTsKICAgIH0KICAgIHN3aXRjaCAobm9kZS5vcGVyYXRvcikgewogICAgICBjYXNlICd8fCc6CiAgICAgICAgaWYgKGxlZnQgaXMgQm9vbENvbnN0YW50KSB7CiAgICAgICAgICBpZiAobGVmdC52YWx1ZSkgcmV0dXJuIHRydWVDb25zdGFudDsKCiAgICAgICAgICBmaW5hbCBDb25zdGFudCByaWdodCA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5yaWdodCk7CiAgICAgICAgICBpZiAocmlnaHQgaXMgQm9vbENvbnN0YW50IHx8IHJpZ2h0IGlzIFVuZXZhbHVhdGVkQ29uc3RhbnQpIHsKICAgICAgICAgICAgcmV0dXJuIHJpZ2h0OwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICBub2RlLm9wZXJhdG9yLAogICAgICAgICAgICAgICAgICBsZWZ0LAogICAgICAgICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuYm9vbFR5cGUsCiAgICAgICAgICAgICAgICAgIHJpZ2h0LmdldFR5cGUodHlwZUVudmlyb25tZW50KSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRNZXRob2RJbnZvY2F0aW9uLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBub2RlLm9wZXJhdG9yLCBsZWZ0KSk7CiAgICAgIGNhc2UgJyYmJzoKICAgICAgICBpZiAobGVmdCBpcyBCb29sQ29uc3RhbnQpIHsKICAgICAgICAgIGlmICghbGVmdC52YWx1ZSkgcmV0dXJuIGZhbHNlQ29uc3RhbnQ7CgogICAgICAgICAgZmluYWwgQ29uc3RhbnQgcmlnaHQgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUucmlnaHQpOwogICAgICAgICAgaWYgKHJpZ2h0IGlzIEJvb2xDb25zdGFudCB8fCByaWdodCBpcyBVbmV2YWx1YXRlZENvbnN0YW50KSB7CiAgICAgICAgICAgIHJldHVybiByaWdodDsKICAgICAgICAgIH0KCiAgICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkQmluYXJ5T3BlcmFuZFR5cGUud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgbm9kZS5vcGVyYXRvciwKICAgICAgICAgICAgICAgICAgbGVmdCwKICAgICAgICAgICAgICAgICAgdHlwZUVudmlyb25tZW50LmJvb2xUeXBlLAogICAgICAgICAgICAgICAgICByaWdodC5nZXRUeXBlKHR5cGVFbnZpcm9ubWVudCkpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvbi53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgbm9kZS5vcGVyYXRvciwgbGVmdCkpOwogICAgICBjYXNlICc/Pyc6CiAgICAgICAgcmV0dXJuIChsZWZ0IGlzISBOdWxsQ29uc3RhbnQpCiAgICAgICAgICAgID8gbGVmdAogICAgICAgICAgICA6IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5yaWdodCk7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvbi53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgbm9kZS5vcGVyYXRvciwgbGVmdCkpOwogICAgfQogIH0KCiAgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUpIHsKICAgIGZpbmFsIENvbnN0YW50IGNvbmRpdGlvbiA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5jb25kaXRpb24pOwogICAgaWYgKGNvbmRpdGlvbiA9PSB0cnVlQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS50aGVuKTsKICAgIH0gZWxzZSBpZiAoY29uZGl0aW9uID09IGZhbHNlQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5vdGhlcndpc2UpOwogICAgfSBlbHNlIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIGVudGVyTGF6eSgpOwogICAgICBDb25zdGFudCB0aGVuID0gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihub2RlLnRoZW4pOwogICAgICBDb25zdGFudCBvdGhlcndpc2UgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUub3RoZXJ3aXNlKTsKICAgICAgbGVhdmVMYXp5KCk7CiAgICAgIHJldHVybiB1bmV2YWx1YXRlZCgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICBuZXcgQ29uZGl0aW9uYWxFeHByZXNzaW9uKGV4dHJhY3QoY29uZGl0aW9uKSwgZXh0cmFjdCh0aGVuKSwKICAgICAgICAgICAgICBleHRyYWN0KG90aGVyd2lzZSksIG5vZGUuc3RhdGljVHlwZSkpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgIG5vZGUuY29uZGl0aW9uLAogICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkVHlwZS53aXRoQXJndW1lbnRzKGNvbmRpdGlvbiwKICAgICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuYm9vbFR5cGUsIGNvbmRpdGlvbi5nZXRUeXBlKHR5cGVFbnZpcm9ubWVudCkpKTsKICAgIH0KICB9CgogIHZpc2l0UHJvcGVydHlHZXQoUHJvcGVydHlHZXQgbm9kZSkgewogICAgaWYgKG5vZGUucmVjZWl2ZXIgaXMgVGhpc0V4cHJlc3Npb24pIHsKICAgICAgLy8gQWNjZXNzICJ0aGlzIiBkdXJpbmcgaW5zdGFuY2UgY3JlYXRpb24uCiAgICAgIGlmIChpbnN0YW5jZUJ1aWxkZXIgPT0gbnVsbCkgewogICAgICAgIHJldHVybiByZXBvcnRJbnZhbGlkKG5vZGUsICdJbnN0YW5jZSBmaWVsZCBhY2Nlc3Mgb3V0c2lkZSBjb25zdHJ1Y3RvcicpOwogICAgICB9CiAgICAgIGZvciAoZmluYWwgRmllbGQgZmllbGQgaW4gaW5zdGFuY2VCdWlsZGVyLmZpZWxkcy5rZXlzKSB7CiAgICAgICAgaWYgKGZpZWxkLm5hbWUgPT0gbm9kZS5uYW1lKSB7CiAgICAgICAgICByZXR1cm4gaW5zdGFuY2VCdWlsZGVyLmZpZWxkc1tmaWVsZF07CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXBvcnRJbnZhbGlkKG5vZGUsCiAgICAgICAgICAnQ291bGQgbm90IGV2YWx1YXRlIGZpZWxkIGdldCAke25vZGUubmFtZX0gb24gaW5jb21wbGV0ZSBpbnN0YW5jZScpOwogICAgfQoKICAgIGZpbmFsIENvbnN0YW50IHJlY2VpdmVyID0gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihub2RlLnJlY2VpdmVyKTsKICAgIGlmIChyZWNlaXZlciBpcyBTdHJpbmdDb25zdGFudCAmJiBub2RlLm5hbWUubmFtZSA9PSAnbGVuZ3RoJykgewogICAgICBpZiAodGFyZ2V0aW5nSmF2YVNjcmlwdCkgewogICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEphdmFTY3JpcHRJbnRDb25zdGFudChyZWNlaXZlci52YWx1ZS5sZW5ndGgpKTsKICAgICAgfQogICAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBJbnRDb25zdGFudChyZWNlaXZlci52YWx1ZS5sZW5ndGgpKTsKICAgIH0gZWxzZSBpZiAoc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICByZXR1cm4gdW5ldmFsdWF0ZWQobm9kZSwKICAgICAgICAgIG5ldyBQcm9wZXJ0eUdldChleHRyYWN0KHJlY2VpdmVyKSwgbm9kZS5uYW1lLCBub2RlLmludGVyZmFjZVRhcmdldCkpOwogICAgfSBlbHNlIGlmIChyZWNlaXZlciBpcyBOdWxsQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIHJlcG9ydChub2RlLCBtZXNzYWdlQ29uc3RFdmFsTnVsbFZhbHVlKTsKICAgIH0KICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgbm9kZSwKICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRQcm9wZXJ0eUdldC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICBub2RlLm5hbWUubmFtZSwgcmVjZWl2ZXIpKTsKICB9CgogIHZpc2l0TGV0KExldCBub2RlKSB7CiAgICBlbnYuYWRkVmFyaWFibGVWYWx1ZSgKICAgICAgICBub2RlLnZhcmlhYmxlLCBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUudmFyaWFibGUuaW5pdGlhbGl6ZXIpKTsKICAgIHJldHVybiBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUuYm9keSk7CiAgfQoKICB2aXNpdFZhcmlhYmxlR2V0KFZhcmlhYmxlR2V0IG5vZGUpIHsKICAgIC8vIE5vdCBldmVyeSB2YXJpYWJsZSB3aGljaCBhIFtWYXJpYWJsZUdldF0gcmVmZXJzIHRvIG11c3QgYmUgbWFya2VkIGFzCiAgICAvLyBjb25zdGFudC4gIEZvciBleGFtcGxlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYXMgd2VsbCBhcyBjb25zdHJ1Y3RzCiAgICAvLyBkZXN1Z2FyZWQgdG8gW0xldF0gZXhwcmVzc2lvbnMgYXJlIG9rLgogICAgLy8KICAgIC8vIFRPRE8oa3VzdGVybWFubik6IFRoZSBoZXVyaXN0aWMgb2YgYWxsb3dpbmcgYWxsIFtWYXJpYWJsZUdldF1zIG9uIFtMZXRdCiAgICAvLyB2YXJpYWJsZXMgbWlnaHQgYWxsb3cgbW9yZSB0aGFuIGl0IHNob3VsZC4KICAgIGZpbmFsIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlOwogICAgaWYgKHZhcmlhYmxlLnBhcmVudCBpcyBMZXQgfHwgX2lzRm9ybWFsUGFyYW1ldGVyKHZhcmlhYmxlKSkgewogICAgICByZXR1cm4gZW52Lmxvb2t1cFZhcmlhYmxlKG5vZGUudmFyaWFibGUpID8/CiAgICAgICAgICByZXBvcnQoCiAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbE5vbkNvbnN0YW50VmFyaWFibGVHZXQKICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHModmFyaWFibGUubmFtZSkpOwogICAgfQogICAgaWYgKHZhcmlhYmxlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24odmFyaWFibGUuaW5pdGlhbGl6ZXIpOwogICAgfQogICAgcmV0dXJuIHJlcG9ydEludmFsaWQobm9kZSwgJ1ZhcmlhYmxlIGdldCBvZiBhIG5vbi1jb25zdCB2YXJpYWJsZS4nKTsKICB9CgogIHZpc2l0U3RhdGljR2V0KFN0YXRpY0dldCBub2RlKSB7CiAgICByZXR1cm4gd2l0aE5ld0Vudmlyb25tZW50KCgpIHsKICAgICAgZmluYWwgTWVtYmVyIHRhcmdldCA9IG5vZGUudGFyZ2V0OwogICAgICBpZiAodGFyZ2V0IGlzIEZpZWxkKSB7CiAgICAgICAgaWYgKHRhcmdldC5pc0NvbnN0KSB7CiAgICAgICAgICBpZiAodGFyZ2V0LmlzSW5FeHRlcm5hbExpYnJhcnkgJiYgdGFyZ2V0LmluaXRpYWxpemVyID09IG51bGwpIHsKICAgICAgICAgICAgLy8gVGhlIHZhcmlhYmxlIGlzIHVuYXZhaWxhYmxlIGR1ZSB0byBzZXBhcmF0ZSBjb21waWxhdGlvbi4KICAgICAgICAgICAgcmV0dXJuIHVuZXZhbHVhdGVkKG5vZGUsIG5ldyBTdGF0aWNHZXQodGFyZ2V0KSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcnVuSW5zaWRlQ29udGV4dCh0YXJnZXQsICgpIHsKICAgICAgICAgICAgcmV0dXJuIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24odGFyZ2V0LmluaXRpYWxpemVyKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0YXJnZXQubmFtZS5uYW1lKSk7CiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0IGlzIFByb2NlZHVyZSkgewogICAgICAgIGlmICh0YXJnZXQua2luZCA9PSBQcm9jZWR1cmVLaW5kLk1ldGhvZCkgewogICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShuZXcgVGVhck9mZkNvbnN0YW50KHRhcmdldCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0YXJnZXQubmFtZS5uYW1lKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVwb3J0SW52YWxpZCgKICAgICAgICAgICAgbm9kZSwgJ05vIHN1cHBvcnQgZm9yICR7dGFyZ2V0LnJ1bnRpbWVUeXBlfSBpbiBhIHN0YXRpYy1nZXQuJyk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgewogICAgZmluYWwgTGlzdDxPYmplY3Q+IGNvbmNhdGVuYXRlZCA9IDxPYmplY3Q+W25ldyBTdHJpbmdCdWZmZXIoKV07CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgQ29uc3RhbnQgY29uc3RhbnQgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbnNbaV0pOwogICAgICBpZiAoY29uc3RhbnQgaXMgUHJpbWl0aXZlQ29uc3RhbnQ8T2JqZWN0PikgewogICAgICAgIFN0cmluZyB2YWx1ZSA9IGNvbnN0YW50LnRvU3RyaW5nKCk7CiAgICAgICAgT2JqZWN0IGxhc3QgPSBjb25jYXRlbmF0ZWQubGFzdDsKICAgICAgICBpZiAobGFzdCBpcyBTdHJpbmdCdWZmZXIpIHsKICAgICAgICAgIGxhc3Qud3JpdGUodmFsdWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25jYXRlbmF0ZWQuYWRkKG5ldyBTdHJpbmdCdWZmZXIodmFsdWUpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICAgIC8vIFRoZSBjb25zdGFudCBpcyBlaXRoZXIgdW5ldmFsdWF0ZWQgb3IgYSBub24tcHJpbWl0aXZlIGluIGFuCiAgICAgICAgLy8gdW5ldmFsdWF0ZWQgY29udGV4dC4gSW4gYm90aCBjYXNlcyB3ZSBkZWZlciB0aGUgZXZhbHVhdGlvbiBhbmQvb3IKICAgICAgICAvLyBlcnJvciByZXBvcnRpbmcgdGlsbCBsYXRlci4KICAgICAgICBjb25jYXRlbmF0ZWQuYWRkKGNvbnN0YW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gcmVwb3J0KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICB0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdHJpbmdJbnRlcnBvbGF0aW9uT3BlcmFuZAogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoY29uc3RhbnQpKTsKICAgICAgfQogICAgfQogICAgaWYgKGNvbmNhdGVuYXRlZC5sZW5ndGggPiAxKSB7CiAgICAgIGZpbmFsIGV4cHJlc3Npb25zID0gbmV3IExpc3Q8RXhwcmVzc2lvbj4oY29uY2F0ZW5hdGVkLmxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uY2F0ZW5hdGVkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgT2JqZWN0IHZhbHVlID0gY29uY2F0ZW5hdGVkW2ldOwogICAgICAgIGlmICh2YWx1ZSBpcyBTdHJpbmdCdWZmZXIpIHsKICAgICAgICAgIGV4cHJlc3Npb25zW2ldID0gbmV3IENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgICAgICAgICBjYW5vbmljYWxpemUobmV3IFN0cmluZ0NvbnN0YW50KHZhbHVlLnRvU3RyaW5nKCkpKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFRoZSB2YWx1ZSBpcyBlaXRoZXIgdW5ldmFsdWF0ZWQgY29uc3RhbnQgb3IgYSBub24tcHJpbWl0aXZlCiAgICAgICAgICAvLyBjb25zdGFudCBpbiBhbiB1bmV2YWx1YXRlZCBleHByZXNzaW9uLgogICAgICAgICAgZXhwcmVzc2lvbnNbaV0gPSBleHRyYWN0KHZhbHVlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHVuZXZhbHVhdGVkKG5vZGUsIG5ldyBTdHJpbmdDb25jYXRlbmF0aW9uKGV4cHJlc3Npb25zKSk7CiAgICB9CiAgICByZXR1cm4gY2Fub25pY2FsaXplKG5ldyBTdHJpbmdDb25zdGFudChjb25jYXRlbmF0ZWQuc2luZ2xlLnRvU3RyaW5nKCkpKTsKICB9CgogIHZpc2l0U3RhdGljSW52b2NhdGlvbihTdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGZpbmFsIFByb2NlZHVyZSB0YXJnZXQgPSBub2RlLnRhcmdldDsKICAgIGZpbmFsIEFyZ3VtZW50cyBhcmd1bWVudHMgPSBub2RlLmFyZ3VtZW50czsKICAgIGZpbmFsIHBvc2l0aW9uYWxzID0gZXZhbHVhdGVQb3NpdGlvbmFsQXJndW1lbnRzKGFyZ3VtZW50cyk7CiAgICBmaW5hbCBuYW1lZCA9IGV2YWx1YXRlTmFtZWRBcmd1bWVudHMoYXJndW1lbnRzKTsKICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIHJldHVybiB1bmV2YWx1YXRlZCgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICBuZXcgU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgICAgICB0YXJnZXQsIHVuZXZhbHVhdGVkQXJndW1lbnRzKHBvc2l0aW9uYWxzLCBuYW1lZCwgYXJndW1lbnRzLnR5cGVzKSwKICAgICAgICAgICAgICBpc0NvbnN0OiB0cnVlKSk7CiAgICB9CiAgICBpZiAodGFyZ2V0LmtpbmQgPT0gUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICAgIGlmICh0YXJnZXQuaXNDb25zdCAmJgogICAgICAgICAgdGFyZ2V0Lm5hbWUubmFtZSA9PSAiZnJvbUVudmlyb25tZW50IiAmJgogICAgICAgICAgdGFyZ2V0LmVuY2xvc2luZ0xpYnJhcnkgPT0gY29yZVR5cGVzLmNvcmVMaWJyYXJ5ICYmCiAgICAgICAgICBwb3NpdGlvbmFscy5sZW5ndGggPT0gMSkgewogICAgICAgIGlmIChlbnZpcm9ubWVudERlZmluZXMgIT0gbnVsbCkgewogICAgICAgICAgLy8gRXZhbHVhdGUgZW52aXJvbm1lbnQgY29uc3RhbnQuCiAgICAgICAgICBDb25zdGFudCBuYW1lID0gcG9zaXRpb25hbHMuc2luZ2xlOwogICAgICAgICAgaWYgKG5hbWUgaXMgU3RyaW5nQ29uc3RhbnQpIHsKICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gZW52aXJvbm1lbnREZWZpbmVzW25hbWUudmFsdWVdOwogICAgICAgICAgICBDb25zdGFudCBkZWZhdWx0VmFsdWUgPSBuYW1lZFsiZGVmYXVsdFZhbHVlIl07CgogICAgICAgICAgICBpZiAodGFyZ2V0LmVuY2xvc2luZ0NsYXNzID09IGNvcmVUeXBlcy5ib29sQ2xhc3MpIHsKICAgICAgICAgICAgICBDb25zdGFudCBib29sQ29uc3RhbnQgPSB2YWx1ZSA9PSAidHJ1ZSIKICAgICAgICAgICAgICAgICAgPyB0cnVlQ29uc3RhbnQKICAgICAgICAgICAgICAgICAgOiB2YWx1ZSA9PSAiZmFsc2UiCiAgICAgICAgICAgICAgICAgICAgICA/IGZhbHNlQ29uc3RhbnQKICAgICAgICAgICAgICAgICAgICAgIDogZGVmYXVsdFZhbHVlIGlzIEJvb2xDb25zdGFudAogICAgICAgICAgICAgICAgICAgICAgICAgID8gbWFrZUJvb2xDb25zdGFudChkZWZhdWx0VmFsdWUudmFsdWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBkZWZhdWx0VmFsdWUgaXMgTnVsbENvbnN0YW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbnVsbENvbnN0YW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZmFsc2VDb25zdGFudDsKICAgICAgICAgICAgICByZXR1cm4gYm9vbENvbnN0YW50OwogICAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldC5lbmNsb3NpbmdDbGFzcyA9PSBjb3JlVHlwZXMuaW50Q2xhc3MpIHsKICAgICAgICAgICAgICBpbnQgaW50VmFsdWUgPSB2YWx1ZSAhPSBudWxsID8gaW50LnRyeVBhcnNlKHZhbHVlKSA6IG51bGw7CiAgICAgICAgICAgICAgaW50VmFsdWUgPz89IGRlZmF1bHRWYWx1ZSBpcyBJbnRDb25zdGFudAogICAgICAgICAgICAgICAgICA/IGRlZmF1bHRWYWx1ZS52YWx1ZQogICAgICAgICAgICAgICAgICA6IGRlZmF1bHRWYWx1ZSBpcyBKYXZhU2NyaXB0SW50Q29uc3RhbnQKICAgICAgICAgICAgICAgICAgICAgID8gZGVmYXVsdFZhbHVlLmJpZ0ludFZhbHVlLnRvSW50KCkKICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDsKICAgICAgICAgICAgICBpZiAoaW50VmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGxDb25zdGFudDsKICAgICAgICAgICAgICBpZiAodGFyZ2V0aW5nSmF2YVNjcmlwdCkgewogICAgICAgICAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShuZXcgSmF2YVNjcmlwdEludENvbnN0YW50KGludFZhbHVlKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEludENvbnN0YW50KGludFZhbHVlKSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0LmVuY2xvc2luZ0NsYXNzID09IGNvcmVUeXBlcy5zdHJpbmdDbGFzcykgewogICAgICAgICAgICAgIHZhbHVlID8/PQogICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgaXMgU3RyaW5nQ29uc3RhbnQgPyBkZWZhdWx0VmFsdWUudmFsdWUgOiBudWxsOwogICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbENvbnN0YW50OwogICAgICAgICAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IFN0cmluZ0NvbnN0YW50KHZhbHVlKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAobmFtZSBpcyBOdWxsQ29uc3RhbnQpIHsKICAgICAgICAgICAgcmV0dXJuIHJlcG9ydChub2RlLCBtZXNzYWdlQ29uc3RFdmFsTnVsbFZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gTGVhdmUgZW52aXJvbm1lbnQgY29uc3RhbnQgdW5ldmFsdWF0ZWQuCiAgICAgICAgICByZXR1cm4gdW5ldmFsdWF0ZWQoCiAgICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgICBuZXcgU3RhdGljSW52b2NhdGlvbih0YXJnZXQsCiAgICAgICAgICAgICAgICAgIHVuZXZhbHVhdGVkQXJndW1lbnRzKHBvc2l0aW9uYWxzLCBuYW1lZCwgYXJndW1lbnRzLnR5cGVzKSwKICAgICAgICAgICAgICAgICAgaXNDb25zdDogdHJ1ZSkpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmICh0YXJnZXQubmFtZS5uYW1lID09ICdpZGVudGljYWwnKSB7CiAgICAgIC8vIEVuc3VyZSB0aGUgImlkZW50aWNhbCgpIiBmdW5jdGlvbiBjb21lcyBmcm9tIGRhcnQ6Y29yZS4KICAgICAgZmluYWwgcGFyZW50ID0gdGFyZ2V0LnBhcmVudDsKICAgICAgaWYgKHBhcmVudCBpcyBMaWJyYXJ5ICYmIHBhcmVudCA9PSBjb3JlVHlwZXMuY29yZUxpYnJhcnkpIHsKICAgICAgICBmaW5hbCBDb25zdGFudCBsZWZ0ID0gcG9zaXRpb25hbHNbMF07CiAgICAgICAgZmluYWwgQ29uc3RhbnQgcmlnaHQgPSBwb3NpdGlvbmFsc1sxXTsKCiAgICAgICAgaWYgKHRhcmdldGluZ0phdmFTY3JpcHQpIHsKICAgICAgICAgIC8vIEluIEphdmFTY3JpcHQsIHdlIGxvd2VyIFtpZGVudGljYWxdIHRvIGA9PT1gLCBzbyBhbnkgY29tcGFyaXNvbgogICAgICAgICAgLy8gYWdhaW5zdCBOYU4geWllbGRzIGBmYWxzZWAuCiAgICAgICAgICBpZiAoaXNOYU4obGVmdCkgfHwgaXNOYU4ocmlnaHQpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZUNvbnN0YW50OwogICAgICAgICAgfQoKICAgICAgICAgIC8vIEluIEphdmFTY3JpcHQsIGAtMC4wID09PSAwLjBgLgogICAgICAgICAgaWYgKGlzWmVybyhsZWZ0KSkgewogICAgICAgICAgICByZXR1cm4gbWFrZUJvb2xDb25zdGFudChpc1plcm8ocmlnaHQpKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFNpbmNlIHdlIGNhbm9uaWNhbGl6ZSBjb25zdGFudHMgZHVyaW5nIHRoZSBldmFsdWF0aW9uLCB3ZSBjYW4gdXNlCiAgICAgICAgLy8gaWRlbnRpY2FsIGhlcmUuCiAgICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQoaWRlbnRpY2FsKGxlZnQsIHJpZ2h0KSk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBUT0RPKGttaWxsaWtpbikgRm9yIGFuIGludmFsaWQgZmFjdG9yeSBpbnZvY2F0aW9uIHdlIHNob3VsZCBhZG9wdCBhCiAgICAvLyBiZXR0ZXIgbWVzc2FnZS4gIFRoaXMgd2lsbCBzaG93IHNvbWV0aGluZyBsaWtlOgogICAgLy8KICAgIC8vICJUaGUgaW52b2NhdGlvbiBvZiAnTGlzdCcgaXMgbm90IGFsbG93ZWQgd2l0aGluIGEgY29uc3QgY29udGV4dC4iCiAgICAvLwogICAgLy8gV2hpY2ggaXMgbm90IHF1aXRlIHJpZ2h0IHdoZW4gdGhlIGNvZGUgd2FzICJuZXcgTGlzdCgpIi4KICAgIFN0cmluZyBuYW1lID0gdGFyZ2V0Lm5hbWUubmFtZTsKICAgIGlmICh0YXJnZXQgaXMgUHJvY2VkdXJlICYmIHRhcmdldC5pc0ZhY3RvcnkpIHsKICAgICAgaWYgKG5hbWUuaXNFbXB0eSkgewogICAgICAgIG5hbWUgPSB0YXJnZXQuZW5jbG9zaW5nQ2xhc3MubmFtZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuYW1lID0gJyR7dGFyZ2V0LmVuY2xvc2luZ0NsYXNzLm5hbWV9LiR7bmFtZX0nOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVwb3J0KAogICAgICAgIG5vZGUsIHRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFN0YXRpY0ludm9jYXRpb24ud2l0aEFyZ3VtZW50cyhuYW1lKSk7CiAgfQoKICB2aXNpdEFzRXhwcmVzc2lvbihBc0V4cHJlc3Npb24gbm9kZSkgewogICAgZmluYWwgQ29uc3RhbnQgY29uc3RhbnQgPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKG5vZGUub3BlcmFuZCk7CiAgICBpZiAoc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICByZXR1cm4gdW5ldmFsdWF0ZWQobm9kZSwKICAgICAgICAgIG5ldyBBc0V4cHJlc3Npb24oZXh0cmFjdChjb25zdGFudCksIGVudi5zdWJzdGl0dXRlVHlwZShub2RlLnR5cGUpKSk7CiAgICB9CiAgICByZXR1cm4gZW5zdXJlSXNTdWJ0eXBlKGNvbnN0YW50LCBldmFsdWF0ZURhcnRUeXBlKG5vZGUsIG5vZGUudHlwZSksIG5vZGUpOwogIH0KCiAgdmlzaXRJc0V4cHJlc3Npb24oSXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIGZpbmFsIENvbnN0YW50IGNvbnN0YW50ID0gbm9kZS5vcGVyYW5kLmFjY2VwdCh0aGlzKTsKICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIHJldHVybiB1bmV2YWx1YXRlZChub2RlLCBuZXcgSXNFeHByZXNzaW9uKGV4dHJhY3QoY29uc3RhbnQpLCBub2RlLnR5cGUpKTsKICAgIH0KICAgIGlmIChjb25zdGFudCBpcyBOdWxsQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQobm9kZS50eXBlID09IHR5cGVFbnZpcm9ubWVudC5udWxsVHlwZSB8fAogICAgICAgICAgbm9kZS50eXBlID09IHR5cGVFbnZpcm9ubWVudC5vYmplY3RUeXBlIHx8CiAgICAgICAgICBub2RlLnR5cGUgaXMgRHluYW1pY1R5cGUpOwogICAgfQogICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQoCiAgICAgICAgaXNTdWJ0eXBlKGNvbnN0YW50LCBldmFsdWF0ZURhcnRUeXBlKG5vZGUsIG5vZGUudHlwZSkpKTsKICB9CgogIHZpc2l0Tm90KE5vdCBub2RlKSB7CiAgICBmaW5hbCBDb25zdGFudCBjb25zdGFudCA9IF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZS5vcGVyYW5kKTsKICAgIGlmIChjb25zdGFudCBpcyBCb29sQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQoY29uc3RhbnQgIT0gdHJ1ZUNvbnN0YW50KTsKICAgIH0KICAgIGlmIChzaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIHJldHVybiB1bmV2YWx1YXRlZChub2RlLCBuZXcgTm90KGV4dHJhY3QoY29uc3RhbnQpKSk7CiAgICB9CiAgICByZXR1cm4gcmVwb3J0KAogICAgICAgIG5vZGUsCiAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkVHlwZS53aXRoQXJndW1lbnRzKGNvbnN0YW50LAogICAgICAgICAgICB0eXBlRW52aXJvbm1lbnQuYm9vbFR5cGUsIGNvbnN0YW50LmdldFR5cGUodHlwZUVudmlyb25tZW50KSkpOwogIH0KCiAgdmlzaXRTeW1ib2xMaXRlcmFsKFN5bWJvbExpdGVyYWwgbm9kZSkgewogICAgZmluYWwgbGlicmFyeVJlZmVyZW5jZSA9CiAgICAgICAgbm9kZS52YWx1ZS5zdGFydHNXaXRoKCdfJykgPyBsaWJyYXJ5T2Yobm9kZSkucmVmZXJlbmNlIDogbnVsbDsKICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IFN5bWJvbENvbnN0YW50KG5vZGUudmFsdWUsIGxpYnJhcnlSZWZlcmVuY2UpKTsKICB9CgogIHZpc2l0SW5zdGFudGlhdGlvbihJbnN0YW50aWF0aW9uIG5vZGUpIHsKICAgIGZpbmFsIENvbnN0YW50IGNvbnN0YW50ID0gX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24pOwogICAgaWYgKHNob3VsZEJlVW5ldmFsdWF0ZWQpIHsKICAgICAgcmV0dXJuIHVuZXZhbHVhdGVkKAogICAgICAgICAgbm9kZSwKICAgICAgICAgIG5ldyBJbnN0YW50aWF0aW9uKGV4dHJhY3QoY29uc3RhbnQpLAogICAgICAgICAgICAgIG5vZGUudHlwZUFyZ3VtZW50cy5tYXAoKHQpID0+IGVudi5zdWJzdGl0dXRlVHlwZSh0KSkudG9MaXN0KCkpKTsKICAgIH0KICAgIGlmIChjb25zdGFudCBpcyBUZWFyT2ZmQ29uc3RhbnQpIHsKICAgICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGggPT0KICAgICAgICAgIGNvbnN0YW50LnByb2NlZHVyZS5mdW5jdGlvbi50eXBlUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICBmaW5hbCB0eXBlQXJndW1lbnRzID0gZXZhbHVhdGVEYXJ0VHlwZXMobm9kZSwgbm9kZS50eXBlQXJndW1lbnRzKTsKICAgICAgICByZXR1cm4gY2Fub25pY2FsaXplKAogICAgICAgICAgICBuZXcgUGFydGlhbEluc3RhbnRpYXRpb25Db25zdGFudChjb25zdGFudCwgdHlwZUFyZ3VtZW50cykpOwogICAgICB9CiAgICAgIHJldHVybiByZXBvcnRJbnZhbGlkKAogICAgICAgICAgbm9kZSwKICAgICAgICAgICdUaGUgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIHN1cHBsaWVkIGluIHRoZSBwYXJ0aWFsIGluc3RhbnRpYXRpb24gJwogICAgICAgICAgJ2RvZXMgbm90IG1hdGNoIHRoZSBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgb2YgdGhlICRjb25zdGFudC4nKTsKICAgIH0KICAgIC8vIFRoZSBpbm5lciBleHByZXNzaW9uIGluIGFuIGluc3RhbnRpYXRpb24gY2FuIG5ldmVyIGJlIG51bGwsIHNpbmNlCiAgICAvLyBpbnN0YW50aWF0aW9ucyBhcmUgb25seSBpbmZlcnJlZCBvbiBkaXJlY3QgcmVmZXJlbmNlcyB0byBkZWNsYXJhdGlvbnMuCiAgICByZXR1cm4gcmVwb3J0SW52YWxpZCgKICAgICAgICBub2RlLCAnT25seSB0ZWFyLW9mZiBjb25zdGFudHMgY2FuIGJlIHBhcnRpYWxseSBpbnN0YW50aWF0ZWQuJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENoZWNrTGlicmFyeUlzTG9hZGVkKENoZWNrTGlicmFyeUlzTG9hZGVkIG5vZGUpIHsKICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgbm9kZSwgdGVtcGxhdGVDb25zdEV2YWxEZWZlcnJlZExpYnJhcnkud2l0aEFyZ3VtZW50cyhub2RlLmltcG9ydC5uYW1lKSk7CiAgfQoKICAvLyBIZWxwZXIgbWV0aG9kczoKCiAgYm9vbCBpc1plcm8oQ29uc3RhbnQgdmFsdWUpID0+CiAgICAgICh2YWx1ZSBpcyBJbnRDb25zdGFudCAmJiB2YWx1ZS52YWx1ZSA9PSAwKSB8fAogICAgICAodmFsdWUgaXMgSmF2YVNjcmlwdEludENvbnN0YW50ICYmIHZhbHVlLmJpZ0ludFZhbHVlID09IEJpZ0ludC56ZXJvKSB8fAogICAgICAodmFsdWUgaXMgRG91YmxlQ29uc3RhbnQgJiYgdmFsdWUudmFsdWUgPT0gMCk7CgogIGJvb2wgaXNOYU4oQ29uc3RhbnQgdmFsdWUpID0+IHZhbHVlIGlzIERvdWJsZUNvbnN0YW50ICYmIHZhbHVlLnZhbHVlLmlzTmFOOwoKICBib29sIGhhc1ByaW1pdGl2ZUVxdWFsKENvbnN0YW50IGNvbnN0YW50KSB7CiAgICAvLyBUT0RPKGFza2VzYywgZmlzaHl0aGVmaXNoKTogTWFrZSBzdXJlIHRoZSBjb3JyZWN0IGNsYXNzIGlzIGluZmVycmVkCiAgICAvLyB3aGVuIHdlIGNsZWFuIHVwIEphdmFTY3JpcHQgaW50IGNvbnN0YW50IGhhbmRsaW5nLgogICAgRGFydFR5cGUgdHlwZSA9IGNvbnN0YW50LmdldFR5cGUodHlwZUVudmlyb25tZW50KTsKICAgIHJldHVybiAhKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJiAhY2xhc3NIYXNQcmltaXRpdmVFcXVhbCh0eXBlLmNsYXNzTm9kZSkpOwogIH0KCiAgYm9vbCBjbGFzc0hhc1ByaW1pdGl2ZUVxdWFsKENsYXNzIGtsYXNzKSB7CiAgICBib29sIGNhY2hlZCA9IHByaW1pdGl2ZUVxdWFsQ2FjaGVba2xhc3NdOwogICAgaWYgKGNhY2hlZCAhPSBudWxsKSByZXR1cm4gY2FjaGVkOwogICAgZm9yIChQcm9jZWR1cmUgcHJvY2VkdXJlIGluIGtsYXNzLnByb2NlZHVyZXMpIHsKICAgICAgaWYgKHByb2NlZHVyZS5raW5kID09IFByb2NlZHVyZUtpbmQuT3BlcmF0b3IgJiYKICAgICAgICAgIHByb2NlZHVyZS5uYW1lLm5hbWUgPT0gJz09JyAmJgogICAgICAgICAgIXByb2NlZHVyZS5pc0Fic3RyYWN0ICYmCiAgICAgICAgICAhcHJvY2VkdXJlLmlzRm9yd2FyZGluZ1N0dWIpIHsKICAgICAgICByZXR1cm4gcHJpbWl0aXZlRXF1YWxDYWNoZVtrbGFzc10gPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGtsYXNzLnN1cGVydHlwZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTsgLy8gVG8gYmUgb24gdGhlIHNhZmUgc2lkZQogICAgcmV0dXJuIHByaW1pdGl2ZUVxdWFsQ2FjaGVba2xhc3NdID0KICAgICAgICBjbGFzc0hhc1ByaW1pdGl2ZUVxdWFsKGtsYXNzLnN1cGVydHlwZS5jbGFzc05vZGUpOwogIH0KCiAgQm9vbENvbnN0YW50IG1ha2VCb29sQ29uc3RhbnQoYm9vbCB2YWx1ZSkgPT4KICAgICAgdmFsdWUgPyB0cnVlQ29uc3RhbnQgOiBmYWxzZUNvbnN0YW50OwoKICBEb3VibGVDb25zdGFudCBtYWtlRG91YmxlQ29uc3RhbnQoZG91YmxlIHZhbHVlKSB7CiAgICBpZiAodGFyZ2V0aW5nSmF2YVNjcmlwdCkgewogICAgICAvLyBDb252ZXJ0IHRvIGFuIGludGVnZXIgd2hlbiBwb3NzaWJsZSAobWF0Y2hpbmcgdGhlIHJ1bnRpbWUgYmVoYXZpb3IKICAgICAgLy8gb2YgYGlzIGludGApLgogICAgICBpZiAodmFsdWUuaXNGaW5pdGUgJiYgIWlkZW50aWNhbCh2YWx1ZSwgLTAuMCkpIHsKICAgICAgICB2YXIgaSA9IHZhbHVlLnRvSW50KCk7CiAgICAgICAgaWYgKHZhbHVlID09IGkudG9Eb3VibGUoKSkgcmV0dXJuIG5ldyBKYXZhU2NyaXB0SW50Q29uc3RhbnQoaSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgRG91YmxlQ29uc3RhbnQodmFsdWUpOwogIH0KCiAgYm9vbCBpc1N1YnR5cGUoQ29uc3RhbnQgY29uc3RhbnQsIERhcnRUeXBlIHR5cGUpIHsKICAgIERhcnRUeXBlIGNvbnN0YW50VHlwZSA9IGNvbnN0YW50LmdldFR5cGUodHlwZUVudmlyb25tZW50KTsKICAgIGlmICh0YXJnZXRpbmdKYXZhU2NyaXB0KSB7CiAgICAgIGlmIChjb25zdGFudFR5cGUgPT0gdHlwZUVudmlyb25tZW50LmludFR5cGUgJiYKICAgICAgICAgIHR5cGUgPT0gdHlwZUVudmlyb25tZW50LmRvdWJsZVR5cGUpIHsKICAgICAgICAvLyBXaXRoIEpTIHNlbWFudGljcywgYW4gaW50ZWdlciBpcyBhbHNvIGEgZG91YmxlLgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAgICBpZiAoY29uc3RhbnRUeXBlID09IHR5cGVFbnZpcm9ubWVudC5kb3VibGVUeXBlICYmCiAgICAgICAgICB0eXBlID09IHR5cGVFbnZpcm9ubWVudC5pbnRUeXBlKSB7CiAgICAgICAgZG91YmxlIHZhbHVlID0gKGNvbnN0YW50IGFzIERvdWJsZUNvbnN0YW50KS52YWx1ZTsKICAgICAgICBpZiAodmFsdWUuaXNGaW5pdGUgJiYgdmFsdWUgPT0gdmFsdWUudHJ1bmNhdGVUb0RvdWJsZSgpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoY29uc3RhbnRUeXBlLCB0eXBlKTsKICB9CgogIENvbnN0YW50IGVuc3VyZUlzU3VidHlwZShDb25zdGFudCBjb25zdGFudCwgRGFydFR5cGUgdHlwZSwgVHJlZU5vZGUgbm9kZSkgewogICAgaWYgKCFpc1N1YnR5cGUoY29uc3RhbnQsIHR5cGUpKSB7CiAgICAgIHJldHVybiByZXBvcnQoCiAgICAgICAgICBub2RlLAogICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgIGNvbnN0YW50LCB0eXBlLCBjb25zdGFudC5nZXRUeXBlKHR5cGVFbnZpcm9ubWVudCkpKTsKICAgIH0KICAgIHJldHVybiBjb25zdGFudDsKICB9CgogIExpc3Q8RGFydFR5cGU+IGV2YWx1YXRlVHlwZUFyZ3VtZW50cyhUcmVlTm9kZSBub2RlLCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gZXZhbHVhdGVEYXJ0VHlwZXMobm9kZSwgYXJndW1lbnRzLnR5cGVzKTsKICB9CgogIExpc3Q8RGFydFR5cGU+IGV2YWx1YXRlU3VwZXJUeXBlQXJndW1lbnRzKFRyZWVOb2RlIG5vZGUsIFN1cGVydHlwZSB0eXBlKSB7CiAgICByZXR1cm4gZXZhbHVhdGVEYXJ0VHlwZXMobm9kZSwgdHlwZS50eXBlQXJndW1lbnRzKTsKICB9CgogIExpc3Q8RGFydFR5cGU+IGV2YWx1YXRlRGFydFR5cGVzKFRyZWVOb2RlIG5vZGUsIExpc3Q8RGFydFR5cGU+IHR5cGVzKSB7CiAgICAvLyBUT0RPOiBPbmNlIHRoZSBmcm9udGVuZCBndXJhbnRlZXMgdGhhdCB0aGVyZSBhcmUgbm8gZnJlZSB0eXBlIHZhcmlhYmxlcwogICAgLy8gbGVmdCBvdmVyIGFmdGVyIHN0dWJzdGl0dXRpb24sIHdlIGNhbiBlbmFibGUgdGhpcyBzaG9ydGN1dCBhZ2FpbjoKICAgIC8vIGlmIChlbnYuaXNFbXB0eSkgcmV0dXJuIHR5cGVzOwogICAgcmV0dXJuIHR5cGVzLm1hcCgodCkgPT4gZXZhbHVhdGVEYXJ0VHlwZShub2RlLCB0KSkudG9MaXN0KCk7CiAgfQoKICBEYXJ0VHlwZSBldmFsdWF0ZURhcnRUeXBlKFRyZWVOb2RlIG5vZGUsIERhcnRUeXBlIHR5cGUpIHsKICAgIGZpbmFsIHJlc3VsdCA9IGVudi5zdWJzdGl0dXRlVHlwZSh0eXBlKTsKCiAgICBpZiAoIWlzSW5zdGFudGlhdGVkKHJlc3VsdCkpIHsKICAgICAgcmV0dXJuIHJlcG9ydCgKICAgICAgICAgIG5vZGUsIHRlbXBsYXRlQ29uc3RFdmFsRnJlZVR5cGVQYXJhbWV0ZXIud2l0aEFyZ3VtZW50cyh0eXBlKSk7CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIExpc3Q8Q29uc3RhbnQ+IGV2YWx1YXRlUG9zaXRpb25hbEFyZ3VtZW50cyhBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gYXJndW1lbnRzLnBvc2l0aW9uYWwubWFwKChFeHByZXNzaW9uIG5vZGUpIHsKICAgICAgcmV0dXJuIF9ldmFsdWF0ZVN1YmV4cHJlc3Npb24obm9kZSk7CiAgICB9KS50b0xpc3QoKTsKICB9CgogIE1hcDxTdHJpbmcsIENvbnN0YW50PiBldmFsdWF0ZU5hbWVkQXJndW1lbnRzKEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIGlmIChhcmd1bWVudHMubmFtZWQuaXNFbXB0eSkgcmV0dXJuIGNvbnN0IDxTdHJpbmcsIENvbnN0YW50Pnt9OwoKICAgIGZpbmFsIE1hcDxTdHJpbmcsIENvbnN0YW50PiBuYW1lZCA9IHt9OwogICAgYXJndW1lbnRzLm5hbWVkLmZvckVhY2goKE5hbWVkRXhwcmVzc2lvbiBwYWlyKSB7CiAgICAgIG5hbWVkW3BhaXIubmFtZV0gPSBfZXZhbHVhdGVTdWJleHByZXNzaW9uKHBhaXIudmFsdWUpOwogICAgfSk7CiAgICByZXR1cm4gbmFtZWQ7CiAgfQoKICBBcmd1bWVudHMgdW5ldmFsdWF0ZWRBcmd1bWVudHMoTGlzdDxDb25zdGFudD4gcG9zaXRpb25hbEFyZ3MsCiAgICAgIE1hcDxTdHJpbmcsIENvbnN0YW50PiBuYW1lZEFyZ3MsIExpc3Q8RGFydFR5cGU+IHR5cGVzKSB7CiAgICBmaW5hbCBwb3NpdGlvbmFsID0gbmV3IExpc3Q8RXhwcmVzc2lvbj4ocG9zaXRpb25hbEFyZ3MubGVuZ3RoKTsKICAgIGZpbmFsIG5hbWVkID0gbmV3IExpc3Q8TmFtZWRFeHByZXNzaW9uPihuYW1lZEFyZ3MubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcG9zaXRpb25hbEFyZ3MubGVuZ3RoOyArK2kpIHsKICAgICAgcG9zaXRpb25hbFtpXSA9IGV4dHJhY3QocG9zaXRpb25hbEFyZ3NbaV0pOwogICAgfQogICAgaW50IGkgPSAwOwogICAgbmFtZWRBcmdzLmZvckVhY2goKFN0cmluZyBuYW1lLCBDb25zdGFudCB2YWx1ZSkgewogICAgICBuYW1lZFtpKytdID0gbmV3IE5hbWVkRXhwcmVzc2lvbihuYW1lLCBleHRyYWN0KHZhbHVlKSk7CiAgICB9KTsKICAgIHJldHVybiBuZXcgQXJndW1lbnRzKHBvc2l0aW9uYWwsIG5hbWVkOiBuYW1lZCwgdHlwZXM6IHR5cGVzKTsKICB9CgogIENvbnN0YW50IGNhbm9uaWNhbGl6ZShDb25zdGFudCBjb25zdGFudCkgewogICAgcmV0dXJuIGNhbm9uaWNhbGl6YXRpb25DYWNoZS5wdXRJZkFic2VudChjb25zdGFudCwgKCkgPT4gY29uc3RhbnQpOwogIH0KCiAgd2l0aE5ld0luc3RhbmNlQnVpbGRlcihDbGFzcyBrbGFzcywgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywgZm4oKSkgewogICAgSW5zdGFuY2VCdWlsZGVyIG9sZCA9IGluc3RhbmNlQnVpbGRlcjsKICAgIHRyeSB7CiAgICAgIGluc3RhbmNlQnVpbGRlciA9IG5ldyBJbnN0YW5jZUJ1aWxkZXIodGhpcywga2xhc3MsIHR5cGVBcmd1bWVudHMpOwogICAgICByZXR1cm4gZm4oKTsKICAgIH0gZmluYWxseSB7CiAgICAgIGluc3RhbmNlQnVpbGRlciA9IG9sZDsKICAgIH0KICB9CgogIHdpdGhOZXdFbnZpcm9ubWVudChmbigpKSB7CiAgICBmaW5hbCBFdmFsdWF0aW9uRW52aXJvbm1lbnQgb2xkRW52ID0gZW52OwogICAgdHJ5IHsKICAgICAgZW52ID0gbmV3IEV2YWx1YXRpb25FbnZpcm9ubWVudCgpOwogICAgICByZXR1cm4gZm4oKTsKICAgIH0gZmluYWxseSB7CiAgICAgIGVudiA9IG9sZEVudjsKICAgIH0KICB9CgogIENvbnN0YW50IGV2YWx1YXRlQmluYXJ5Qml0T3BlcmF0aW9uKFN0cmluZyBvcCwgaW50IGEsIGludCBiLCBUcmVlTm9kZSBub2RlKSB7CiAgICBpbnQgcmVzdWx0OwogICAgc3dpdGNoIChvcCkgewogICAgICBjYXNlICd8JzoKICAgICAgICByZXN1bHQgPSBhIHwgYjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnJic6CiAgICAgICAgcmVzdWx0ID0gYSAmIGI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ14nOgogICAgICAgIHJlc3VsdCA9IGEgXiBiOwogICAgICAgIGJyZWFrOwogICAgfQoKICAgIGlmICh0YXJnZXRpbmdKYXZhU2NyaXB0KSB7CiAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEphdmFTY3JpcHRJbnRDb25zdGFudChyZXN1bHQpKTsKICAgIH0KICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEludENvbnN0YW50KHJlc3VsdCkpOwogIH0KCiAgQ29uc3RhbnQgZXZhbHVhdGVCaW5hcnlTaGlmdE9wZXJhdGlvbihTdHJpbmcgb3AsIGludCBhLCBpbnQgYiwgVHJlZU5vZGUgbm9kZSwKICAgICAge25lZ2F0aXZlUmVjZWl2ZXI6IGZhbHNlfSkgewogICAgaW50IHJlc3VsdDsKICAgIHN3aXRjaCAob3ApIHsKICAgICAgY2FzZSAnPDwnOgogICAgICAgIHJlc3VsdCA9IGEgPDwgYjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnPj4nOgogICAgICAgIGlmICh0YXJnZXRpbmdKYXZhU2NyaXB0KSB7CiAgICAgICAgICBpZiAobmVnYXRpdmVSZWNlaXZlcikgewogICAgICAgICAgICBjb25zdCBzaWduQml0ID0gMHg4MDAwMDAwMDsKICAgICAgICAgICAgYSAtPSAoYSAmIHNpZ25CaXQpIDw8IDE7CiAgICAgICAgICB9CiAgICAgICAgICByZXN1bHQgPSBhID4+IGI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlc3VsdCA9IGEgPj4gYjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJz4+Pic6CiAgICAgICAgLy8gVE9ETyhmaXNoeXRoZWZpc2gpOiBJbXBsZW1lbnQgSlMgc2VtYW50aWNzIGZvciBgPj4+YC4KICAgICAgICByZXN1bHQgPSBiID49IDY0ID8gMCA6IChhID4+IGIpICYgKCgxIDw8ICg2NCAtIGIpKSAtIDEpOwogICAgICAgIGJyZWFrOwogICAgfQoKICAgIGlmICh0YXJnZXRpbmdKYXZhU2NyaXB0KSB7CiAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEphdmFTY3JpcHRJbnRDb25zdGFudChyZXN1bHQudG9VbnNpZ25lZCgzMikpKTsKICAgIH0KICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEludENvbnN0YW50KHJlc3VsdCkpOwogIH0KCiAgQ29uc3RhbnQgZXZhbHVhdGVCaW5hcnlOdW1lcmljT3BlcmF0aW9uKAogICAgICBTdHJpbmcgb3AsIG51bSBhLCBudW0gYiwgVHJlZU5vZGUgbm9kZSkgewogICAgbnVtIHJlc3VsdDsKICAgIHN3aXRjaCAob3ApIHsKICAgICAgY2FzZSAnKyc6CiAgICAgICAgcmVzdWx0ID0gYSArIGI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJy0nOgogICAgICAgIHJlc3VsdCA9IGEgLSBiOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICcqJzoKICAgICAgICByZXN1bHQgPSBhICogYjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnLyc6CiAgICAgICAgcmVzdWx0ID0gYSAvIGI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ34vJzoKICAgICAgICByZXN1bHQgPSBhIH4vIGI7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJyUnOgogICAgICAgIHJlc3VsdCA9IGEgJSBiOwogICAgICAgIGJyZWFrOwogICAgfQoKICAgIGlmIChyZXN1bHQgaXMgaW50KSB7CiAgICAgIGlmICh0YXJnZXRpbmdKYXZhU2NyaXB0KSB7CiAgICAgICAgcmV0dXJuIGNhbm9uaWNhbGl6ZShuZXcgSmF2YVNjcmlwdEludENvbnN0YW50KHJlc3VsdCkpOwogICAgICB9CiAgICAgIHJldHVybiBjYW5vbmljYWxpemUobmV3IEludENvbnN0YW50KHJlc3VsdC50b1NpZ25lZCg2NCkpKTsKICAgIH0KICAgIGlmIChyZXN1bHQgaXMgZG91YmxlKSB7CiAgICAgIHJldHVybiBjYW5vbmljYWxpemUobWFrZURvdWJsZUNvbnN0YW50KHJlc3VsdCkpOwogICAgfQoKICAgIHN3aXRjaCAob3ApIHsKICAgICAgY2FzZSAnPCc6CiAgICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQoYSA8IGIpOwogICAgICBjYXNlICc8PSc6CiAgICAgICAgcmV0dXJuIG1ha2VCb29sQ29uc3RhbnQoYSA8PSBiKTsKICAgICAgY2FzZSAnPj0nOgogICAgICAgIHJldHVybiBtYWtlQm9vbENvbnN0YW50KGEgPj0gYik7CiAgICAgIGNhc2UgJz4nOgogICAgICAgIHJldHVybiBtYWtlQm9vbENvbnN0YW50KGEgPiBiKTsKICAgIH0KCiAgICByZXR1cm4gcmVwb3J0SW52YWxpZChub2RlLCAiVW5leHBlY3RlZCBiaW5hcnkgbnVtZXJpYyBvcGVyYXRpb24gJyRvcCcuIik7CiAgfQoKICBMaWJyYXJ5IGxpYnJhcnlPZihUcmVlTm9kZSBub2RlKSB7CiAgICAvLyBUaGUgdHJlZSBzdHJ1Y3R1cmUgb2YgdGhlIGtlcm5lbCBBU1QgZW5zdXJlcyB3ZSBhbHdheXMgaGF2ZSBhbiBlbmNsb3NpbmcKICAgIC8vIGxpYnJhcnkuCiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAobm9kZSBpcyBMaWJyYXJ5KSByZXR1cm4gbm9kZTsKICAgICAgbm9kZSA9IG5vZGUucGFyZW50OwogICAgfQogIH0KfQoKLy8vIEhvbGRzIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIGEgY29uc3RhbnQgb2JqZWN0LCBuYW1lbHkKLy8vICAgKiB0aGUgW2tsYXNzXSBiZWluZyBpbnN0YW50aWF0ZWQKLy8vICAgKiB0aGUgW3R5cGVBcmd1bWVudHNdIHVzZWQgZm9yIHRoZSBpbnN0YW50aWF0aW9uCi8vLyAgICogdGhlIFtmaWVsZHNdIHRoZSBpbnN0YW5jZSB3aWxsIG9idGFpbiAoYWxsIGZpZWxkcyBmcm9tIHRoZQovLy8gICAgIGluc3RhbnRpYXRlZCBba2xhc3NdIHVwIHRvIHRoZSBbT2JqZWN0XSBrbGFzcykuCmNsYXNzIEluc3RhbmNlQnVpbGRlciB7CiAgQ29uc3RhbnRFdmFsdWF0b3IgZXZhbHVhdG9yOwoKICAvLy8gVGhlIGNsYXNzIG9mIHRoZSBuZXcgaW5zdGFuY2UuCiAgZmluYWwgQ2xhc3Mga2xhc3M7CgogIC8vLyBUaGUgdmFsdWVzIG9mIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgdGhlIG5ldyBpbnN0YW5jZS4KICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwoKICAvLy8gVGhlIGZpZWxkIHZhbHVlcyBvZiB0aGUgbmV3IGluc3RhbmNlLgogIGZpbmFsIE1hcDxGaWVsZCwgQ29uc3RhbnQ+IGZpZWxkcyA9IDxGaWVsZCwgQ29uc3RhbnQ+e307CgogIGZpbmFsIExpc3Q8QXNzZXJ0U3RhdGVtZW50PiBhc3NlcnRzID0gPEFzc2VydFN0YXRlbWVudD5bXTsKCiAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiB1bnVzZWRBcmd1bWVudHMgPSA8RXhwcmVzc2lvbj5bXTsKCiAgSW5zdGFuY2VCdWlsZGVyKHRoaXMuZXZhbHVhdG9yLCB0aGlzLmtsYXNzLCB0aGlzLnR5cGVBcmd1bWVudHMpOwoKICB2b2lkIHNldEZpZWxkVmFsdWUoRmllbGQgZmllbGQsIENvbnN0YW50IGNvbnN0YW50KSB7CiAgICBmaWVsZHNbZmllbGRdID0gY29uc3RhbnQ7CiAgfQoKICBJbnN0YW5jZUNvbnN0YW50IGJ1aWxkSW5zdGFuY2UoKSB7CiAgICBhc3NlcnQoYXNzZXJ0cy5pc0VtcHR5KTsKICAgIGZpbmFsIE1hcDxSZWZlcmVuY2UsIENvbnN0YW50PiBmaWVsZFZhbHVlcyA9IDxSZWZlcmVuY2UsIENvbnN0YW50Pnt9OwogICAgZmllbGRzLmZvckVhY2goKEZpZWxkIGZpZWxkLCBDb25zdGFudCB2YWx1ZSkgewogICAgICBhc3NlcnQodmFsdWUgaXMhIFVuZXZhbHVhdGVkQ29uc3RhbnQpOwogICAgICBmaWVsZFZhbHVlc1tmaWVsZC5yZWZlcmVuY2VdID0gdmFsdWU7CiAgICB9KTsKICAgIGFzc2VydCh1bnVzZWRBcmd1bWVudHMuaXNFbXB0eSk7CiAgICByZXR1cm4gbmV3IEluc3RhbmNlQ29uc3RhbnQoa2xhc3MucmVmZXJlbmNlLCB0eXBlQXJndW1lbnRzLCBmaWVsZFZhbHVlcyk7CiAgfQoKICBJbnN0YW5jZUNyZWF0aW9uIGJ1aWxkVW5ldmFsdWF0ZWRJbnN0YW5jZSgpIHsKICAgIGZpbmFsIE1hcDxSZWZlcmVuY2UsIEV4cHJlc3Npb24+IGZpZWxkVmFsdWVzID0gPFJlZmVyZW5jZSwgRXhwcmVzc2lvbj57fTsKICAgIGZpZWxkcy5mb3JFYWNoKChGaWVsZCBmaWVsZCwgQ29uc3RhbnQgdmFsdWUpIHsKICAgICAgZmllbGRWYWx1ZXNbZmllbGQucmVmZXJlbmNlXSA9IGV2YWx1YXRvci5leHRyYWN0KHZhbHVlKTsKICAgIH0pOwogICAgcmV0dXJuIG5ldyBJbnN0YW5jZUNyZWF0aW9uKAogICAgICAgIGtsYXNzLnJlZmVyZW5jZSwgdHlwZUFyZ3VtZW50cywgZmllbGRWYWx1ZXMsIGFzc2VydHMsIHVudXNlZEFyZ3VtZW50cyk7CiAgfQp9CgovLy8gSG9sZHMgYW4gZW52aXJvbm1lbnQgb2YgdHlwZSBwYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzIGFuZCB2YXJpYWJsZXMuCmNsYXNzIEV2YWx1YXRpb25FbnZpcm9ubWVudCB7CiAgLy8vIFRoZSB2YWx1ZXMgb2YgdGhlIHR5cGUgcGFyYW1ldGVycyBpbiBzY29wZS4KICBmaW5hbCBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IF90eXBlVmFyaWFibGVzID0KICAgICAgPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwoKICAvLy8gVGhlIHZhbHVlcyBvZiB0aGUgcGFyYW1ldGVycy92YXJpYWJsZXMgaW4gc2NvcGUuCiAgZmluYWwgTWFwPFZhcmlhYmxlRGVjbGFyYXRpb24sIENvbnN0YW50PiBfdmFyaWFibGVzID0KICAgICAgPFZhcmlhYmxlRGVjbGFyYXRpb24sIENvbnN0YW50Pnt9OwoKICAvLy8gVGhlIHZhcmlhYmxlcyB0aGF0IGhvbGQgdW5ldmFsdWF0ZWQgY29uc3RhbnRzLgogIC8vLwogIC8vLyBWYXJpYWJsZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGlzIHNldCB3aGVuIGxvb2tlZCB1cCwgbGVhdmluZyBvbmx5IHRoZQogIC8vLyB1bnJlYWQgdmFyaWFibGVzIGF0IHRoZSBlbmQuCiAgZmluYWwgU2V0PFZhcmlhYmxlRGVjbGFyYXRpb24+IF91bnJlYWRVbmV2YWx1YXRlZFZhcmlhYmxlcyA9CiAgICAgIG5ldyBTZXQ8VmFyaWFibGVEZWNsYXJhdGlvbj4oKTsKCiAgLy8vIFdoZXRoZXIgdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQgaXMgZW1wdHkuCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfdHlwZVZhcmlhYmxlcy5pc0VtcHR5ICYmIF92YXJpYWJsZXMuaXNFbXB0eTsKCiAgdm9pZCBhZGRUeXBlUGFyYW1ldGVyVmFsdWUoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIERhcnRUeXBlIHZhbHVlKSB7CiAgICBhc3NlcnQoIV90eXBlVmFyaWFibGVzLmNvbnRhaW5zS2V5KHBhcmFtZXRlcikpOwogICAgX3R5cGVWYXJpYWJsZXNbcGFyYW1ldGVyXSA9IHZhbHVlOwogIH0KCiAgdm9pZCBhZGRWYXJpYWJsZVZhbHVlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIENvbnN0YW50IHZhbHVlKSB7CiAgICBfdmFyaWFibGVzW3ZhcmlhYmxlXSA9IHZhbHVlOwogICAgaWYgKHZhbHVlIGlzIFVuZXZhbHVhdGVkQ29uc3RhbnQpIHsKICAgICAgX3VucmVhZFVuZXZhbHVhdGVkVmFyaWFibGVzLmFkZCh2YXJpYWJsZSk7CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBsb29rdXBQYXJhbWV0ZXJWYWx1ZShUeXBlUGFyYW1ldGVyIHBhcmFtZXRlcikgewogICAgZmluYWwgRGFydFR5cGUgdmFsdWUgPSBfdHlwZVZhcmlhYmxlc1twYXJhbWV0ZXJdOwogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgQ29uc3RhbnQgbG9va3VwVmFyaWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSkgewogICAgQ29uc3RhbnQgdmFsdWUgPSBfdmFyaWFibGVzW3ZhcmlhYmxlXTsKICAgIGlmICh2YWx1ZSBpcyBVbmV2YWx1YXRlZENvbnN0YW50KSB7CiAgICAgIF91bnJlYWRVbmV2YWx1YXRlZFZhcmlhYmxlcy5yZW1vdmUodmFyaWFibGUpOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgLy8vIFRoZSB1bmV2YWx1YXRlZCBjb25zdGFudHMgb2YgdmFyaWFibGVzIHRoYXQgd2VyZSBuZXZlciByZWFkLgogIEl0ZXJhYmxlPFVuZXZhbHVhdGVkQ29uc3RhbnQ+IGdldCB1bmV2YWx1YXRlZFVucmVhZENvbnN0YW50cyB7CiAgICBpZiAoX3VucmVhZFVuZXZhbHVhdGVkVmFyaWFibGVzLmlzRW1wdHkpIHJldHVybiBjb25zdCBbXTsKICAgIHJldHVybiBfdW5yZWFkVW5ldmFsdWF0ZWRWYXJpYWJsZXMubWFwPFVuZXZhbHVhdGVkQ29uc3RhbnQ+KAogICAgICAgIChWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSA9PiBfdmFyaWFibGVzW3ZhcmlhYmxlXSk7CiAgfQoKICBEYXJ0VHlwZSBzdWJzdGl0dXRlVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAoX3R5cGVWYXJpYWJsZXMuaXNFbXB0eSkgcmV0dXJuIHR5cGU7CiAgICByZXR1cm4gc3Vic3RpdHV0ZSh0eXBlLCBfdHlwZVZhcmlhYmxlcyk7CiAgfQp9CgovLyBVc2VkIGFzIGNvbnRyb2wtZmxvdyB0byBhYm9ydCB0aGUgY3VycmVudCBldmFsdWF0aW9uLgpjbGFzcyBfQWJvcnREdWVUb0Vycm9yIHsKICBmaW5hbCBUcmVlTm9kZSBub2RlOwogIGZpbmFsIE1lc3NhZ2UgbWVzc2FnZTsKICBmaW5hbCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0OwoKICBfQWJvcnREdWVUb0Vycm9yKHRoaXMubm9kZSwgdGhpcy5tZXNzYWdlLCB7dGhpcy5jb250ZXh0fSk7Cn0KCmNsYXNzIF9BYm9ydER1ZVRvSW52YWxpZEV4cHJlc3Npb24gewogIGZpbmFsIFRyZWVOb2RlIG5vZGU7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIF9BYm9ydER1ZVRvSW52YWxpZEV4cHJlc3Npb24odGhpcy5ub2RlLCB0aGlzLm1lc3NhZ2UpOwp9CgphYnN0cmFjdCBjbGFzcyBFcnJvclJlcG9ydGVyIHsKICBjb25zdCBFcnJvclJlcG9ydGVyKCk7CgogIHZvaWQgcmVwb3J0KExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UsIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQpOwoKICB2b2lkIHJlcG9ydEludmFsaWRFeHByZXNzaW9uKEludmFsaWRFeHByZXNzaW9uIG5vZGUpOwp9CgpjbGFzcyBTaW1wbGVFcnJvclJlcG9ydGVyIGltcGxlbWVudHMgRXJyb3JSZXBvcnRlciB7CiAgY29uc3QgU2ltcGxlRXJyb3JSZXBvcnRlcigpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydChMb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0KSB7CiAgICBfcmVwb3J0KG1lc3NhZ2UpOwogICAgZm9yIChMb2NhdGVkTWVzc2FnZSBjb250ZXh0TWVzc2FnZSBpbiBjb250ZXh0KSB7CiAgICAgIF9yZXBvcnQoY29udGV4dE1lc3NhZ2UpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnRJbnZhbGlkRXhwcmVzc2lvbihJbnZhbGlkRXhwcmVzc2lvbiBub2RlKSB7CiAgICAvLyBJZ25vcmVkCiAgfQoKICB2b2lkIF9yZXBvcnQoTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSkgewogICAgcmVwb3J0TWVzc2FnZShtZXNzYWdlLnVyaSwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBtZXNzYWdlLm1lc3NhZ2UpOwogIH0KCiAgdm9pZCByZXBvcnRNZXNzYWdlKFVyaSB1cmksIGludCBvZmZzZXQsIFN0cmluZyBtZXNzYWdlKSB7CiAgICBpby5leGl0Q29kZSA9IDQyOwogICAgaW8uc3RkZXJyLndyaXRlbG4oJyR1cmk6JG9mZnNldCBDb25zdGFudCBldmFsdWF0aW9uIGVycm9yOiAkbWVzc2FnZScpOwogIH0KfQoKY2xhc3MgSXNJbnN0YW50aWF0ZWRWaXNpdG9yIGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPGJvb2w+IHsKICBmaW5hbCBfYXZhaWxhYmxlVmFyaWFibGVzID0gbmV3IFNldDxUeXBlUGFyYW1ldGVyPigpOwoKICBib29sIGlzSW5zdGFudGlhdGVkKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiB0eXBlLmFjY2VwdCh0aGlzKTsKICB9CgogIGJvb2wgZGVmYXVsdERhcnRUeXBlKERhcnRUeXBlIG5vZGUpIHsKICAgIHRocm93ICdBIHZpc2l0b3IgbWV0aG9kIHNlZW1zIHRvIGJlIHVuaW1wbGVtZW50ZWQhJzsKICB9CgogIGJvb2wgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKSA9PiB0cnVlOwogIGJvb2wgdmlzaXREeW5hbWljVHlwZShEeW5hbWljVHlwZSBub2RlKSA9PiB0cnVlOwogIGJvb2wgdmlzaXRWb2lkVHlwZShWb2lkVHlwZSBub2RlKSA9PiB0cnVlOwogIGJvb2wgdmlzaXRCb3R0b21UeXBlKEJvdHRvbVR5cGUgbm9kZSkgPT4gdHJ1ZTsKCiAgYm9vbCB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIHJldHVybiBfYXZhaWxhYmxlVmFyaWFibGVzLmNvbnRhaW5zKG5vZGUucGFyYW1ldGVyKTsKICB9CgogIGJvb2wgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgcmV0dXJuIG5vZGUudHlwZUFyZ3VtZW50cwogICAgICAgIC5ldmVyeSgoRGFydFR5cGUgdHlwZUFyZ3VtZW50KSA9PiB0eXBlQXJndW1lbnQuYWNjZXB0KHRoaXMpKTsKICB9CgogIGJvb2wgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIGZpbmFsIHBhcmFtZXRlcnMgPSBub2RlLnR5cGVQYXJhbWV0ZXJzOwogICAgX2F2YWlsYWJsZVZhcmlhYmxlcy5hZGRBbGwocGFyYW1ldGVycyk7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BgFOBAElUBATKBoGBAIBQic3QzgYHwElFQE9JgEsOwE9ATsBQwE3HgQBJR1KMy0sCCVOBAEwTjM/CCFQBAIBRx4yNiMBNzgpATUGSyM/JgEwRAFINCcEAUgiKDEGBAE7NhsSBAE6Kyg0BhIEAUNBPkFBBAErLS0EAgE5GRcZJgE9AgElFxgBOQIBHxkBRQE4AgE1HwEMRhY1HwYEAQw5DwQBKUUEATwWSwQCATw4ASceBAEoOQQBMzMtMQE4OQQBMB5GBAEuLCw4QkAvEwQBLCYEAgE4IiA9MwQQAgE6cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9jb25zdGFudF9ldmFsdWF0b3IuZGFydE1zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2NvbnN0YW50X2NvbGxlY3Rpb25fYnVpbGRlcnMuZGFydKPLLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgJ2NvbnN0YW50X2V2YWx1YXRvci5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIF9MaXN0T3JTZXRDb25zdGFudEJ1aWxkZXI8TCBleHRlbmRzIEV4cHJlc3Npb24+IHsKICBmaW5hbCBDb25zdGFudEV2YWx1YXRvciBldmFsdWF0b3I7CiAgZmluYWwgRXhwcmVzc2lvbiBvcmlnaW5hbDsKICBmaW5hbCBEYXJ0VHlwZSBlbGVtZW50VHlwZTsKCiAgLy8gRWFjaCBlbGVtZW50IG9mIFtwYXJ0c10gaXMgZWl0aGVyIGEgYExpc3Q8Q29uc3RhbnQ+YCAoY29udGFpbmluZyBmdWxseQogIC8vIGV2YWx1YXRlZCBjb25zdGFudHMpIG9yIGEgYENvbnN0YW50YCAocG90ZW50aWFsbHkgdW5ldmFsdWF0ZWQpLgogIExpc3Q8T2JqZWN0PiBwYXJ0cyA9IDxPYmplY3Q+WzxDb25zdGFudD5bXV07CgogIF9MaXN0T3JTZXRDb25zdGFudEJ1aWxkZXIodGhpcy5vcmlnaW5hbCwgdGhpcy5lbGVtZW50VHlwZSwgdGhpcy5ldmFsdWF0b3IpOwoKICBMIG1ha2VMaXRlcmFsKExpc3Q8RXhwcmVzc2lvbj4gZWxlbWVudHMpOwoKICAvLy8gQWRkIGFuIGVsZW1lbnQgdG8gdGhlIGNvbnN0YW50IGxpc3QgYmVpbmcgYnVpbHQgYnkgdGhpcyBidWlsZGVyLgogIHZvaWQgYWRkKEV4cHJlc3Npb24gZWxlbWVudCkgewogICAgQ29uc3RhbnQgY29uc3RhbnQgPSBldmFsdWF0b3IuX2V2YWx1YXRlU3ViZXhwcmVzc2lvbihlbGVtZW50KTsKICAgIGlmIChldmFsdWF0b3Iuc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICBwYXJ0cy5hZGQoZXZhbHVhdG9yLnVuZXZhbHVhdGVkKAogICAgICAgICAgZWxlbWVudCwgbWFrZUxpdGVyYWwoW2V2YWx1YXRvci5leHRyYWN0KGNvbnN0YW50KV0pKSk7CiAgICB9IGVsc2UgewogICAgICBhZGRDb25zdGFudChjb25zdGFudCwgZWxlbWVudCk7CiAgICB9CiAgfQoKICB2b2lkIGFkZFNwcmVhZChFeHByZXNzaW9uIHNwcmVhZEV4cHJlc3Npb24pIHsKICAgIENvbnN0YW50IHNwcmVhZCA9CiAgICAgICAgZXZhbHVhdG9yLnVubG93ZXIoZXZhbHVhdG9yLl9ldmFsdWF0ZVN1YmV4cHJlc3Npb24oc3ByZWFkRXhwcmVzc2lvbikpOwogICAgaWYgKGV2YWx1YXRvci5zaG91bGRCZVVuZXZhbHVhdGVkKSB7CiAgICAgIC8vIFVuZXZhbHVhdGVkIHNwcmVhZAogICAgICBwYXJ0cy5hZGQoc3ByZWFkKTsKICAgIH0gZWxzZSBpZiAoc3ByZWFkID09IGV2YWx1YXRvci5udWxsQ29uc3RhbnQpIHsKICAgICAgLy8gTnVsbCBzcHJlYWQKICAgICAgZXZhbHVhdG9yLnJlcG9ydChzcHJlYWRFeHByZXNzaW9uLCBtZXNzYWdlQ29uc3RFdmFsTnVsbFZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEZ1bGx5IGV2YWx1YXRlZCBzcHJlYWQKICAgICAgTGlzdDxDb25zdGFudD4gZW50cmllczsKICAgICAgaWYgKHNwcmVhZCBpcyBMaXN0Q29uc3RhbnQpIHsKICAgICAgICBlbnRyaWVzID0gc3ByZWFkLmVudHJpZXM7CiAgICAgIH0gZWxzZSBpZiAoc3ByZWFkIGlzIFNldENvbnN0YW50KSB7CiAgICAgICAgZW50cmllcyA9IHNwcmVhZC5lbnRyaWVzOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIE5vdCBsaXN0IG9yIHNldCBpbiBzcHJlYWQKICAgICAgICByZXR1cm4gZXZhbHVhdG9yLnJlcG9ydCgKICAgICAgICAgICAgc3ByZWFkRXhwcmVzc2lvbiwgbWVzc2FnZUNvbnN0RXZhbE5vdExpc3RPclNldEluU3ByZWFkKTsKICAgICAgfQogICAgICBmb3IgKENvbnN0YW50IGVudHJ5IGluIGVudHJpZXMpIHsKICAgICAgICBhZGRDb25zdGFudChlbnRyeSwgc3ByZWFkRXhwcmVzc2lvbik7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgYWRkQ29uc3RhbnQoQ29uc3RhbnQgY29uc3RhbnQsIFRyZWVOb2RlIGNvbnRleHQpOwoKICBDb25zdGFudCBidWlsZCgpOwp9CgpjbGFzcyBMaXN0Q29uc3RhbnRCdWlsZGVyIGV4dGVuZHMgX0xpc3RPclNldENvbnN0YW50QnVpbGRlcjxMaXN0TGl0ZXJhbD4gewogIExpc3RDb25zdGFudEJ1aWxkZXIoCiAgICAgIEV4cHJlc3Npb24gb3JpZ2luYWwsIERhcnRUeXBlIGVsZW1lbnRUeXBlLCBDb25zdGFudEV2YWx1YXRvciBldmFsdWF0b3IpCiAgICAgIDogc3VwZXIob3JpZ2luYWwsIGVsZW1lbnRUeXBlLCBldmFsdWF0b3IpOwoKICBAb3ZlcnJpZGUKICBMaXN0TGl0ZXJhbCBtYWtlTGl0ZXJhbChMaXN0PEV4cHJlc3Npb24+IGVsZW1lbnRzKSA9PgogICAgICBuZXcgTGlzdExpdGVyYWwoZWxlbWVudHMsIGlzQ29uc3Q6IHRydWUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZENvbnN0YW50KENvbnN0YW50IGNvbnN0YW50LCBUcmVlTm9kZSBjb250ZXh0KSB7CiAgICBMaXN0PENvbnN0YW50PiBsYXN0UGFydDsKICAgIGlmIChwYXJ0cy5sYXN0IGlzIExpc3Q8Q29uc3RhbnQ+KSB7CiAgICAgIGxhc3RQYXJ0ID0gcGFydHMubGFzdDsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnRzLmFkZChsYXN0UGFydCA9IDxDb25zdGFudD5bXSk7CiAgICB9CiAgICBsYXN0UGFydC5hZGQoZXZhbHVhdG9yLmVuc3VyZUlzU3VidHlwZShjb25zdGFudCwgZWxlbWVudFR5cGUsIGNvbnRleHQpKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50IGJ1aWxkKCkgewogICAgaWYgKHBhcnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIC8vIEZ1bGx5IGV2YWx1YXRlZAogICAgICByZXR1cm4gZXZhbHVhdG9yCiAgICAgICAgICAubG93ZXJMaXN0Q29uc3RhbnQobmV3IExpc3RDb25zdGFudChlbGVtZW50VHlwZSwgcGFydHMuc2luZ2xlKSk7CiAgICB9CiAgICBMaXN0PEV4cHJlc3Npb24+IGxpc3RzID0gPEV4cHJlc3Npb24+W107CiAgICBmb3IgKE9iamVjdCBwYXJ0IGluIHBhcnRzKSB7CiAgICAgIGlmIChwYXJ0IGlzIExpc3Q8Q29uc3RhbnQ+KSB7CiAgICAgICAgbGlzdHMuYWRkKG5ldyBDb25zdGFudEV4cHJlc3Npb24obmV3IExpc3RDb25zdGFudChlbGVtZW50VHlwZSwgcGFydCkpKTsKICAgICAgfSBlbHNlIGlmIChwYXJ0IGlzIENvbnN0YW50KSB7CiAgICAgICAgbGlzdHMuYWRkKGV2YWx1YXRvci5leHRyYWN0KHBhcnQpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyAnTm9uLWNvbnN0YW50IGluIGNvbnN0YW50IGxpc3QnOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXZhbHVhdG9yLnVuZXZhbHVhdGVkKAogICAgICAgIG9yaWdpbmFsLCBuZXcgTGlzdENvbmNhdGVuYXRpb24obGlzdHMsIHR5cGVBcmd1bWVudDogZWxlbWVudFR5cGUpKTsKICB9Cn0KCmNsYXNzIFNldENvbnN0YW50QnVpbGRlciBleHRlbmRzIF9MaXN0T3JTZXRDb25zdGFudEJ1aWxkZXI8U2V0TGl0ZXJhbD4gewogIGZpbmFsIFNldDxDb25zdGFudD4gc2VlbiA9IG5ldyBTZXQ8Q29uc3RhbnQ+LmlkZW50aXR5KCk7CgogIFNldENvbnN0YW50QnVpbGRlcigKICAgICAgRXhwcmVzc2lvbiBvcmlnaW5hbCwgRGFydFR5cGUgZWxlbWVudFR5cGUsIENvbnN0YW50RXZhbHVhdG9yIGV2YWx1YXRvcikKICAgICAgOiBzdXBlcihvcmlnaW5hbCwgZWxlbWVudFR5cGUsIGV2YWx1YXRvcik7CgogIEBvdmVycmlkZQogIFNldExpdGVyYWwgbWFrZUxpdGVyYWwoTGlzdDxFeHByZXNzaW9uPiBlbGVtZW50cykgPT4KICAgICAgbmV3IFNldExpdGVyYWwoZWxlbWVudHMsIGlzQ29uc3Q6IHRydWUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZENvbnN0YW50KENvbnN0YW50IGNvbnN0YW50LCBUcmVlTm9kZSBjb250ZXh0KSB7CiAgICBpZiAoIWV2YWx1YXRvci5oYXNQcmltaXRpdmVFcXVhbChjb25zdGFudCkpIHsKICAgICAgZXZhbHVhdG9yLnJlcG9ydChjb250ZXh0LAogICAgICAgICAgdGVtcGxhdGVDb25zdEV2YWxFbGVtZW50SW1wbGVtZW50c0VxdWFsLndpdGhBcmd1bWVudHMoY29uc3RhbnQpKTsKICAgIH0KICAgIGlmICghc2Vlbi5hZGQoY29uc3RhbnQpKSB7CiAgICAgIGV2YWx1YXRvci5yZXBvcnQoCiAgICAgICAgICBjb250ZXh0LCB0ZW1wbGF0ZUNvbnN0RXZhbER1cGxpY2F0ZUVsZW1lbnQud2l0aEFyZ3VtZW50cyhjb25zdGFudCkpOwogICAgfQoKICAgIExpc3Q8Q29uc3RhbnQ+IGxhc3RQYXJ0OwogICAgaWYgKHBhcnRzLmxhc3QgaXMgTGlzdDxDb25zdGFudD4pIHsKICAgICAgbGFzdFBhcnQgPSBwYXJ0cy5sYXN0OwogICAgfSBlbHNlIHsKICAgICAgcGFydHMuYWRkKGxhc3RQYXJ0ID0gPENvbnN0YW50PltdKTsKICAgIH0KICAgIGxhc3RQYXJ0LmFkZChldmFsdWF0b3IuZW5zdXJlSXNTdWJ0eXBlKGNvbnN0YW50LCBlbGVtZW50VHlwZSwgY29udGV4dCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnQgYnVpbGQoKSB7CiAgICBpZiAocGFydHMubGVuZ3RoID09IDEpIHsKICAgICAgLy8gRnVsbHkgZXZhbHVhdGVkCiAgICAgIExpc3Q8Q29uc3RhbnQ+IGVudHJpZXMgPSBwYXJ0cy5zaW5nbGU7CiAgICAgIFNldENvbnN0YW50IHJlc3VsdCA9IG5ldyBTZXRDb25zdGFudChlbGVtZW50VHlwZSwgZW50cmllcyk7CiAgICAgIGlmIChldmFsdWF0b3IuZGVzdWdhclNldHMpIHsKICAgICAgICBmaW5hbCBMaXN0PENvbnN0YW50TWFwRW50cnk+IG1hcEVudHJpZXMgPQogICAgICAgICAgICBuZXcgTGlzdDxDb25zdGFudE1hcEVudHJ5PihlbnRyaWVzLmxlbmd0aCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBtYXBFbnRyaWVzW2ldID0KICAgICAgICAgICAgICBuZXcgQ29uc3RhbnRNYXBFbnRyeShlbnRyaWVzW2ldLCBldmFsdWF0b3IubnVsbENvbnN0YW50KTsKICAgICAgICB9CiAgICAgICAgQ29uc3RhbnQgbWFwID0gZXZhbHVhdG9yLmxvd2VyTWFwQ29uc3RhbnQobmV3IE1hcENvbnN0YW50KAogICAgICAgICAgICBlbGVtZW50VHlwZSwgZXZhbHVhdG9yLnR5cGVFbnZpcm9ubWVudC5udWxsVHlwZSwgbWFwRW50cmllcykpOwogICAgICAgIHJldHVybiBldmFsdWF0b3IubG93ZXIoCiAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgbmV3IEluc3RhbmNlQ29uc3RhbnQoCiAgICAgICAgICAgICAgICBldmFsdWF0b3IudW5tb2RpZmlhYmxlU2V0TWFwLmVuY2xvc2luZ0NsYXNzLnJlZmVyZW5jZSwgWwogICAgICAgICAgICAgIGVsZW1lbnRUeXBlCiAgICAgICAgICAgIF0sIDxSZWZlcmVuY2UsIENvbnN0YW50PnsKICAgICAgICAgICAgICBldmFsdWF0b3IudW5tb2RpZmlhYmxlU2V0TWFwLnJlZmVyZW5jZTogbWFwCiAgICAgICAgICAgIH0pKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gZXZhbHVhdG9yLmxvd2VyU2V0Q29uc3RhbnQocmVzdWx0KTsKICAgICAgfQogICAgfQogICAgTGlzdDxFeHByZXNzaW9uPiBzZXRzID0gPEV4cHJlc3Npb24+W107CiAgICBmb3IgKE9iamVjdCBwYXJ0IGluIHBhcnRzKSB7CiAgICAgIGlmIChwYXJ0IGlzIExpc3Q8Q29uc3RhbnQ+KSB7CiAgICAgICAgc2V0cy5hZGQobmV3IENvbnN0YW50RXhwcmVzc2lvbihuZXcgU2V0Q29uc3RhbnQoZWxlbWVudFR5cGUsIHBhcnQpKSk7CiAgICAgIH0gZWxzZSBpZiAocGFydCBpcyBDb25zdGFudCkgewogICAgICAgIHNldHMuYWRkKGV2YWx1YXRvci5leHRyYWN0KHBhcnQpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyAnTm9uLWNvbnN0YW50IGluIGNvbnN0YW50IHNldCc7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBldmFsdWF0b3IudW5ldmFsdWF0ZWQoCiAgICAgICAgb3JpZ2luYWwsIG5ldyBTZXRDb25jYXRlbmF0aW9uKHNldHMsIHR5cGVBcmd1bWVudDogZWxlbWVudFR5cGUpKTsKICB9Cn0KCmNsYXNzIE1hcENvbnN0YW50QnVpbGRlciB7CiAgZmluYWwgQ29uc3RhbnRFdmFsdWF0b3IgZXZhbHVhdG9yOwogIGZpbmFsIEV4cHJlc3Npb24gb3JpZ2luYWw7CiAgZmluYWwgRGFydFR5cGUga2V5VHlwZTsKICBmaW5hbCBEYXJ0VHlwZSB2YWx1ZVR5cGU7CgogIC8vLyBFYWNoIGVsZW1lbnQgb2YgW3BhcnRzXSBpcyBlaXRoZXIgYSBgTGlzdDxDb25zdGFudE1hcEVudHJ5PmAgKGNvbnRhaW5pbmcKICAvLy8gZnVsbHkgZXZhbHVhdGVkIG1hcCBlbnRyaWVzKSBvciBhIGBDb25zdGFudGAgKHBvdGVudGlhbGx5IHVuZXZhbHVhdGVkKS4KICBMaXN0PE9iamVjdD4gcGFydHMgPSA8T2JqZWN0Pls8Q29uc3RhbnRNYXBFbnRyeT5bXV07CgogIGZpbmFsIFNldDxDb25zdGFudD4gc2VlbktleXMgPSBuZXcgU2V0PENvbnN0YW50Pi5pZGVudGl0eSgpOwoKICBNYXBDb25zdGFudEJ1aWxkZXIoCiAgICAgIHRoaXMub3JpZ2luYWwsIHRoaXMua2V5VHlwZSwgdGhpcy52YWx1ZVR5cGUsIHRoaXMuZXZhbHVhdG9yKTsKCiAgLy8vIEFkZCBhIG1hcCBlbnRyeSB0byB0aGUgY29uc3RhbnQgbWFwIGJlaW5nIGJ1aWx0IGJ5IHRoaXMgYnVpbGRlcgogIHZvaWQgYWRkKE1hcEVudHJ5IGVsZW1lbnQpIHsKICAgIENvbnN0YW50IGtleSA9IGV2YWx1YXRvci5fZXZhbHVhdGVTdWJleHByZXNzaW9uKGVsZW1lbnQua2V5KTsKICAgIENvbnN0YW50IHZhbHVlID0gZXZhbHVhdG9yLl9ldmFsdWF0ZVN1YmV4cHJlc3Npb24oZWxlbWVudC52YWx1ZSk7CiAgICBpZiAoZXZhbHVhdG9yLnNob3VsZEJlVW5ldmFsdWF0ZWQpIHsKICAgICAgcGFydHMuYWRkKGV2YWx1YXRvci51bmV2YWx1YXRlZCgKICAgICAgICAgIGVsZW1lbnQua2V5LAogICAgICAgICAgbmV3IE1hcExpdGVyYWwoCiAgICAgICAgICAgICAgW25ldyBNYXBFbnRyeShldmFsdWF0b3IuZXh0cmFjdChrZXkpLCBldmFsdWF0b3IuZXh0cmFjdCh2YWx1ZSkpXSwKICAgICAgICAgICAgICBpc0NvbnN0OiB0cnVlKSkpOwogICAgfSBlbHNlIHsKICAgICAgYWRkQ29uc3RhbnQoa2V5LCB2YWx1ZSwgZWxlbWVudC5rZXksIGVsZW1lbnQudmFsdWUpOwogICAgfQogIH0KCiAgdm9pZCBhZGRTcHJlYWQoRXhwcmVzc2lvbiBzcHJlYWRFeHByZXNzaW9uKSB7CiAgICBDb25zdGFudCBzcHJlYWQgPQogICAgICAgIGV2YWx1YXRvci51bmxvd2VyKGV2YWx1YXRvci5fZXZhbHVhdGVTdWJleHByZXNzaW9uKHNwcmVhZEV4cHJlc3Npb24pKTsKICAgIGlmIChldmFsdWF0b3Iuc2hvdWxkQmVVbmV2YWx1YXRlZCkgewogICAgICAvLyBVbmV2YWx1YXRlZCBzcHJlYWQKICAgICAgcGFydHMuYWRkKHNwcmVhZCk7CiAgICB9IGVsc2UgaWYgKHNwcmVhZCA9PSBldmFsdWF0b3IubnVsbENvbnN0YW50KSB7CiAgICAgIC8vIE51bGwgc3ByZWFkCiAgICAgIGV2YWx1YXRvci5yZXBvcnQoc3ByZWFkRXhwcmVzc2lvbiwgbWVzc2FnZUNvbnN0RXZhbE51bGxWYWx1ZSk7CiAgICB9IGVsc2UgewogICAgICAvLyBGdWxseSBldmFsdWF0ZWQgc3ByZWFkCiAgICAgIGlmIChzcHJlYWQgaXMgTWFwQ29uc3RhbnQpIHsKICAgICAgICBmb3IgKENvbnN0YW50TWFwRW50cnkgZW50cnkgaW4gc3ByZWFkLmVudHJpZXMpIHsKICAgICAgICAgIGFkZENvbnN0YW50KAogICAgICAgICAgICAgIGVudHJ5LmtleSwgZW50cnkudmFsdWUsIHNwcmVhZEV4cHJlc3Npb24sIHNwcmVhZEV4cHJlc3Npb24pOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBOb3QgbWFwIGluIHNwcmVhZAogICAgICAgIHJldHVybiBldmFsdWF0b3IucmVwb3J0KAogICAgICAgICAgICBzcHJlYWRFeHByZXNzaW9uLCBtZXNzYWdlQ29uc3RFdmFsTm90TWFwSW5TcHJlYWQpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGFkZENvbnN0YW50KENvbnN0YW50IGtleSwgQ29uc3RhbnQgdmFsdWUsIFRyZWVOb2RlIGtleUNvbnRleHQsCiAgICAgIFRyZWVOb2RlIHZhbHVlQ29udGV4dCkgewogICAgTGlzdDxDb25zdGFudE1hcEVudHJ5PiBsYXN0UGFydDsKICAgIGlmIChwYXJ0cy5sYXN0IGlzIExpc3Q8Q29uc3RhbnRNYXBFbnRyeT4pIHsKICAgICAgbGFzdFBhcnQgPSBwYXJ0cy5sYXN0OwogICAgfSBlbHNlIHsKICAgICAgcGFydHMuYWRkKGxhc3RQYXJ0ID0gPENvbnN0YW50TWFwRW50cnk+W10pOwogICAgfQogICAgaWYgKCFldmFsdWF0b3IuaGFzUHJpbWl0aXZlRXF1YWwoa2V5KSkgewogICAgICBldmFsdWF0b3IucmVwb3J0KAogICAgICAgICAga2V5Q29udGV4dCwgdGVtcGxhdGVDb25zdEV2YWxLZXlJbXBsZW1lbnRzRXF1YWwud2l0aEFyZ3VtZW50cyhrZXkpKTsKICAgIH0KICAgIGlmICghc2VlbktleXMuYWRkKGtleSkpIHsKICAgICAgZXZhbHVhdG9yLnJlcG9ydCgKICAgICAgICAgIGtleUNvbnRleHQsIHRlbXBsYXRlQ29uc3RFdmFsRHVwbGljYXRlS2V5LndpdGhBcmd1bWVudHMoa2V5KSk7CiAgICB9CiAgICBsYXN0UGFydC5hZGQobmV3IENvbnN0YW50TWFwRW50cnkoCiAgICAgICAgZXZhbHVhdG9yLmVuc3VyZUlzU3VidHlwZShrZXksIGtleVR5cGUsIGtleUNvbnRleHQpLAogICAgICAgIGV2YWx1YXRvci5lbnN1cmVJc1N1YnR5cGUodmFsdWUsIHZhbHVlVHlwZSwgdmFsdWVDb250ZXh0KSkpOwogIH0KCiAgQ29uc3RhbnQgYnVpbGQoKSB7CiAgICBpZiAocGFydHMubGVuZ3RoID09IDEpIHsKICAgICAgLy8gRnVsbHkgZXZhbHVhdGVkCiAgICAgIHJldHVybiBldmFsdWF0b3IKICAgICAgICAgIC5sb3dlck1hcENvbnN0YW50KG5ldyBNYXBDb25zdGFudChrZXlUeXBlLCB2YWx1ZVR5cGUsIHBhcnRzLnNpbmdsZSkpOwogICAgfQogICAgTGlzdDxFeHByZXNzaW9uPiBtYXBzID0gPEV4cHJlc3Npb24+W107CiAgICBmb3IgKE9iamVjdCBwYXJ0IGluIHBhcnRzKSB7CiAgICAgIGlmIChwYXJ0IGlzIExpc3Q8Q29uc3RhbnRNYXBFbnRyeT4pIHsKICAgICAgICBtYXBzLmFkZCgKICAgICAgICAgICAgbmV3IENvbnN0YW50RXhwcmVzc2lvbihuZXcgTWFwQ29uc3RhbnQoa2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJ0KSkpOwogICAgICB9IGVsc2UgaWYgKHBhcnQgaXMgQ29uc3RhbnQpIHsKICAgICAgICBtYXBzLmFkZChldmFsdWF0b3IuZXh0cmFjdChwYXJ0KSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgJ05vbi1jb25zdGFudCBpbiBjb25zdGFudCBtYXAnOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXZhbHVhdG9yLnVuZXZhbHVhdGVkKG9yaWdpbmFsLAogICAgICAgIG5ldyBNYXBDb25jYXRlbmF0aW9uKG1hcHMsIGtleVR5cGU6IGtleVR5cGUsIHZhbHVlVHlwZTogdmFsdWVUeXBlKSk7CiAgfQp9CoETAE5OPAEjAUElHR4BTEUvAU4BLAFHIUMpJ0ENJgYEATAWTykcGTMVRQ0gHiQiKiIPJSFFCCguCAYEATkBFAIBSxdOMQEMODABDDodKB0NKgZNBAEMFR0ZF0sGLSEkUCUsDy8IBiJMBAIBSTsBFk4xAQw3LwEMOjIgTAYfGE8GAR0oHQ0qBk0EAQwVHRktQiMyODMaSApDSyAUIkkaJjoRDzMIBiwhJE4lKw8uCAYiSgQCARslHRocAU9ONwE/ARZEAUYfQkYpJxcaUCANOwYEATAWTykcGTMVRQ0gIzkXSwoPHSE/CAYEAUYfJTAdDTIGLRhPBh4YSQYnPUUEARUdGRdQBiwhLBJQJSsPLggGK00EAgFEcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9jb25zdGFudF9jb2xsZWN0aW9uX2J1aWxkZXJzLmRhcnRBc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9rZXJuZWxfY29uc3RhbnRzLmRhcnSDjS8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmtlcm5lbF9jb25zdGFudHM7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IEludmFsaWRFeHByZXNzaW9uOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IExvY2F0ZWRNZXNzYWdlOwoKaW1wb3J0ICcuLi9sb2FkZXIuZGFydCcgc2hvdyBMb2FkZXI7CgppbXBvcnQgJ2NvbnN0YW50X2V2YWx1YXRvci5kYXJ0JyBzaG93IEVycm9yUmVwb3J0ZXI7CgpjbGFzcyBLZXJuZWxDb25zdGFudEVycm9yUmVwb3J0ZXIgZXh0ZW5kcyBFcnJvclJlcG9ydGVyIHsKICBmaW5hbCBMb2FkZXIgbG9hZGVyOwoKICBLZXJuZWxDb25zdGFudEVycm9yUmVwb3J0ZXIodGhpcy5sb2FkZXIpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydChMb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0KSB7CiAgICBsb2FkZXIuYWRkUHJvYmxlbSgKICAgICAgICBtZXNzYWdlLm1lc3NhZ2VPYmplY3QsIG1lc3NhZ2UuY2hhck9mZnNldCwgbWVzc2FnZS5sZW5ndGgsIG1lc3NhZ2UudXJpLAogICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnRJbnZhbGlkRXhwcmVzc2lvbihJbnZhbGlkRXhwcmVzc2lvbiBub2RlKSB7CiAgICAvLyBBc3N1bWVkIHRvIGJlIGFscmVhZHkgcmVwb3J0ZWQuCiAgfQp9CiEATk48ASABOQEyASUBNQE6FwEsAQxGF1AbBAEMOScEAgE4cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9rZXJuZWxfY29uc3RhbnRzLmRhcnRDc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9tZXRhZGF0YV9jb2xsZWN0b3IuZGFydIK7Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwva2VybmVsLmRhcnQnIHNob3cgTWVtYmVyLCBNZXRhZGF0YVJlcG9zaXRvcnksIE5hbWVkTm9kZTsKCi8vLyBUaGUgY29sbGVjdG9yIHRvIGFkZCB0YXJnZXQgc3BlY2lmaWMgbWV0YWRhdGEgdG8uCmFic3RyYWN0IGNsYXNzIE1ldGFkYXRhQ29sbGVjdG9yIHsKICAvLy8gTWV0YWRhdGEgaXMgcmVtZW1iZXJlZCBpbiB0aGlzIHJlcG9zaXRvcnksIHNvIHRoYXQgd2hlbiBpdCBpcyBhZGRlZAogIC8vLyB0byBhIGNvbXBvbmVudCwgbWV0YWRhdGEgaXMgc2VyaWFsaXplZCB3aXRoIHRoZSBjb21wb25lbnQuCiAgTWV0YWRhdGFSZXBvc2l0b3J5PGR5bmFtaWM+IGdldCByZXBvc2l0b3J5OwoKICB2b2lkIHNldENvbnN0cnVjdG9yTmFtZU9mZnNldChNZW1iZXIgbm9kZSwgT2JqZWN0IG5hbWUpOwoKICB2b2lkIHNldERvY3VtZW50YXRpb25Db21tZW50KE5hbWVkTm9kZSBub2RlLCBTdHJpbmcgY29tbWVudCk7Cn0KEgBOTjwBUAE2I0pBLgE7AUACATpwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL21ldGFkYXRhX2NvbGxlY3Rvci5kYXJ0OXNka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL2JpbmFyeS9saW1pdGVkX2FzdF90b19iaW5hcnkuZGFydIjxLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2JpbmFyeS9hc3RfdG9fYmluYXJ5LmRhcnQnOwoKLy8vIFdyaXRlcyBsaWJyYXJpZXMgdGhhdCBzYXRpc2Z5IHRoZSBbcHJlZGljYXRlXS4KLy8vCi8vLyBPbmx5IHRoZSByZWZlcmVuY2VkIHN1YnNldCBvZiBjYW5vbmljYWwgbmFtZXMgaXMgaW5kZXhlZCBhbmQgd3JpdHRlbiwKLy8vIHNvIHdlIGRvbid0IHdhc3RlIHRpbWUgaW5kZXhpbmcgYWxsIGxpYnJhcmllcyBvZiBhIGNvbXBvbmVudCwgd2hlbiBvbmx5Ci8vLyBhIHRpbnkgc3Vic2V0IGlzIHVzZWQuCmNsYXNzIExpbWl0ZWRCaW5hcnlQcmludGVyIGV4dGVuZHMgQmluYXJ5UHJpbnRlciB7CiAgZmluYWwgTGlicmFyeUZpbHRlciBwcmVkaWNhdGU7CgogIC8vLyBFeGNsdWRlcyBhbGwgdXJpVG9Tb3VyY2UgaW5mb3JtYXRpb24uCiAgLy8vCiAgLy8vIEJ5IGRlZmF1bHQgdGhlIFtwcmVkaWNhdGVdIGFib3ZlIHdpbGwgb25seSBleGNsdWRlIGNhbm9uaWNhbCBuYW1lcyBhbmQKICAvLy8ga2VybmVsIGxpYnJhcmllcywgYnV0IGl0IHdpbGwgc3RpbGwgZW1pdCB0aGUgc291cmNlcyBmb3IgYWxsIGxpYnJhcmllcy4KICAvLy8gZmlsdGVyZWQgYnkgbGlicmFyaWVzIG1hdGNoaW5nIFtwcmVkaWNhdGVdLgogIC8vIFRPRE8oc2lnbXVuZCk6IHByb3ZpZGUgYSB3YXkgdG8gZmlsdGVyIHNvdXJjZXMgZGlyZWN0bHkgYmFzZWQgb24KICAvLyBbcHJlZGljYXRlXS4gVGhhdCByZXF1aXJlcyBzcGVjaWFsIGxvZ2ljIHRvIGhhbmRsZSBzb3VyY2VzIGZyb20gcGFydCBmaWxlcy4KICBmaW5hbCBib29sIGV4Y2x1ZGVVcmlUb1NvdXJjZTsKCiAgTGltaXRlZEJpbmFyeVByaW50ZXIoCiAgICAgIFNpbms8TGlzdDxpbnQ+PiBzaW5rLCB0aGlzLnByZWRpY2F0ZSwgdGhpcy5leGNsdWRlVXJpVG9Tb3VyY2UsCiAgICAgIHtib29sIGluY2x1ZGVPZmZzZXRzID0gdHJ1ZX0pCiAgICAgIDogc3VwZXIoc2luaywKICAgICAgICAgICAgaW5jbHVkZVNvdXJjZXM6ICFleGNsdWRlVXJpVG9Tb3VyY2UsCiAgICAgICAgICAgIGluY2x1ZGVPZmZzZXRzOiBpbmNsdWRlT2Zmc2V0cyk7CgogIEBvdmVycmlkZQogIHZvaWQgY29tcHV0ZUNhbm9uaWNhbE5hbWVzKENvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIGZvciAodmFyIGxpYnJhcnkgaW4gY29tcG9uZW50LmxpYnJhcmllcykgewogICAgICBpZiAocHJlZGljYXRlKGxpYnJhcnkpKSB7CiAgICAgICAgY29tcG9uZW50LnJvb3QKICAgICAgICAgICAgLmdldENoaWxkRnJvbVVyaShsaWJyYXJ5LmltcG9ydFVyaSkKICAgICAgICAgICAgLmJpbmRUbyhsaWJyYXJ5LnJlZmVyZW5jZSk7CiAgICAgICAgbGlicmFyeS5jb21wdXRlQ2Fub25pY2FsTmFtZXMoKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBzaG91bGRXcml0ZUxpYnJhcnlDYW5vbmljYWxOYW1lcyhMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIHJldHVybiBwcmVkaWNhdGUobGlicmFyeSk7CiAgfQoKICB2b2lkIHdyaXRlTGlicmFyaWVzKENvbXBvbmVudCBjb21wb25lbnQpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29tcG9uZW50LmxpYnJhcmllcy5sZW5ndGg7ICsraSkgewogICAgICBMaWJyYXJ5IGxpYnJhcnkgPSBjb21wb25lbnQubGlicmFyaWVzW2ldOwogICAgICBpZiAocHJlZGljYXRlKGxpYnJhcnkpKSB3cml0ZUxpYnJhcnlOb2RlKGxpYnJhcnkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZU5vZGUoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBMaWJyYXJ5ICYmICFwcmVkaWNhdGUobm9kZSkpIHJldHVybjsKICAgIHN1cGVyLndyaXRlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVDb21wb25lbnRJbmRleChDb21wb25lbnQgY29tcG9uZW50LCBMaXN0PExpYnJhcnk+IGxpYnJhcmllcykgewogICAgdmFyIGxpYnJhcmllc1RvV3JpdGUgPSBsaWJyYXJpZXMud2hlcmUocHJlZGljYXRlKS50b0xpc3QoKTsKICAgIHN1cGVyLndyaXRlQ29tcG9uZW50SW5kZXgoY29tcG9uZW50LCBsaWJyYXJpZXNUb1dyaXRlKTsKICB9Cn0KRQBOTjwBIjMBMwRKTBszIQEsBk1OMkZRIQEYRSQUMS0BDDQvIBcwKCkIBgQBDDsfBAEtOzA5BgQBDB41GwQBDEtAPAQCATBwYWNrYWdlOmtlcm5lbC9iaW5hcnkvbGltaXRlZF9hc3RfdG9fYmluYXJ5LmRhcnQlc2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvdmVyaWZpZXIuZGFydMAATnYvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpsaWJyYXJ5IGtlcm5lbC5jaGVja3M7CgppbXBvcnQgJ2FzdC5kYXJ0JzsKaW1wb3J0ICd0cmFuc2Zvcm1hdGlvbnMvZmxhZ3MuZGFydCc7Cgp2b2lkIHZlcmlmeUNvbXBvbmVudChDb21wb25lbnQgY29tcG9uZW50KSB7CiAgVmVyaWZ5aW5nVmlzaXRvci5jaGVjayhjb21wb25lbnQpOwp9CgpjbGFzcyBWZXJpZmljYXRpb25FcnJvciB7CiAgZmluYWwgVHJlZU5vZGUgY29udGV4dDsKCiAgZmluYWwgVHJlZU5vZGUgbm9kZTsKCiAgZmluYWwgU3RyaW5nIGRldGFpbHM7CgogIFZlcmlmaWNhdGlvbkVycm9yKHRoaXMuY29udGV4dCwgdGhpcy5ub2RlLCB0aGlzLmRldGFpbHMpOwoKICB0b1N0cmluZygpIHsKICAgIExvY2F0aW9uIGxvY2F0aW9uOwogICAgdHJ5IHsKICAgICAgbG9jYXRpb24gPSBub2RlPy5sb2NhdGlvbiA/PyBjb250ZXh0Py5sb2NhdGlvbjsKICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgLy8gVE9ETyhhaGUpOiBGaXggdGhlIGNvbXBpbGVyIGluc3RlYWQuCiAgICB9CiAgICBpZiAobG9jYXRpb24gIT0gbnVsbCkgewogICAgICBTdHJpbmcgZmlsZSA9IGxvY2F0aW9uLmZpbGU/LnRvU3RyaW5nKCkgPz8gIiI7CiAgICAgIHJldHVybiAiJGZpbGU6JHtsb2NhdGlvbi5saW5lfToke2xvY2F0aW9uLmNvbHVtbn06IFZlcmlmaWNhdGlvbiBlcnJvcjoiCiAgICAgICAgICAiICRkZXRhaWxzIjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAiVmVyaWZpY2F0aW9uIGVycm9yOiAkZGV0YWlsc1xuIgogICAgICAgICAgIkNvbnRleHQ6ICckY29udGV4dCcuXG4iCiAgICAgICAgICAiTm9kZTogJyRub2RlJy4iOwogICAgfQogIH0KfQoKZW51bSBUeXBlZGVmU3RhdGUgeyBEb25lLCBCZWluZ0NoZWNrZWQgfQoKLy8vIENoZWNrcyB0aGF0IGEga2VybmVsIGNvbXBvbmVudCBpcyB3ZWxsLWZvcm1lZC4KLy8vCi8vLyBUaGlzIGRvZXMgbm90IGluY2x1ZGUgYW55IGtpbmQgb2YgdHlwZSBjaGVja2luZy4KY2xhc3MgVmVyaWZ5aW5nVmlzaXRvciBleHRlbmRzIFJlY3Vyc2l2ZVZpc2l0b3I8dm9pZD4gewogIGZpbmFsIFNldDxDbGFzcz4gY2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3M+KCk7CiAgZmluYWwgU2V0PFR5cGVkZWY+IHR5cGVkZWZzID0gbmV3IFNldDxUeXBlZGVmPigpOwogIFNldDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyc0luU2NvcGUgPSBuZXcgU2V0PFR5cGVQYXJhbWV0ZXI+KCk7CiAgZmluYWwgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZVN0YWNrID0gPFZhcmlhYmxlRGVjbGFyYXRpb24+W107CiAgZmluYWwgTWFwPFR5cGVkZWYsIFR5cGVkZWZTdGF0ZT4gdHlwZWRlZlN0YXRlID0gPFR5cGVkZWYsIFR5cGVkZWZTdGF0ZT57fTsKICBib29sIGNsYXNzVHlwZVBhcmFtZXRlcnNBcmVJblNjb3BlID0gZmFsc2U7CgogIC8vLyBJZiB0cnVlLCByZWxheCBjZXJ0YWluIGNoZWNrcyBmb3IgKm91dGxpbmUqIG1vZGUuIEZvciBleGFtcGxlLCBkb24ndAogIC8vLyBhdHRlbXB0IHRvIHZhbGlkYXRlIGNvbnN0cnVjdG9yIGluaXRpYWxpemVycy4KICBib29sIGlzT3V0bGluZSA9IGZhbHNlOwoKICBib29sIGluQ2F0Y2hCbG9jayA9IGZhbHNlOwoKICBMaWJyYXJ5IGN1cnJlbnRMaWJyYXJ5OwoKICBNZW1iZXIgY3VycmVudE1lbWJlcjsKCiAgQ2xhc3MgY3VycmVudENsYXNzOwoKICBUcmVlTm9kZSBjdXJyZW50UGFyZW50OwoKICBUcmVlTm9kZSBnZXQgY29udGV4dCA9PiBjdXJyZW50TWVtYmVyID8/IGN1cnJlbnRDbGFzczsKCiAgc3RhdGljIHZvaWQgY2hlY2soQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgY29tcG9uZW50LmFjY2VwdChuZXcgVmVyaWZ5aW5nVmlzaXRvcigpKTsKICB9CgogIGRlZmF1bHRUcmVlTm9kZShUcmVlTm9kZSBub2RlKSB7CiAgICB2aXNpdENoaWxkcmVuKG5vZGUpOwogIH0KCiAgcHJvYmxlbShUcmVlTm9kZSBub2RlLCBTdHJpbmcgZGV0YWlscywge1RyZWVOb2RlIGNvbnRleHR9KSB7CiAgICBjb250ZXh0ID8/PSB0aGlzLmNvbnRleHQ7CiAgICB0aHJvdyBuZXcgVmVyaWZpY2F0aW9uRXJyb3IoY29udGV4dCwgbm9kZSwgZGV0YWlscyk7CiAgfQoKICBUcmVlTm9kZSBlbnRlclBhcmVudChUcmVlTm9kZSBub2RlKSB7CiAgICBpZiAoIWlkZW50aWNhbChub2RlLnBhcmVudCwgY3VycmVudFBhcmVudCkpIHsKICAgICAgcHJvYmxlbSgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICAiSW5jb3JyZWN0IHBhcmVudCBwb2ludGVyIG9uICR7bm9kZS5ydW50aW1lVHlwZX06IgogICAgICAgICAgIiBleHBlY3RlZCAnJHtjdXJyZW50UGFyZW50LnJ1bnRpbWVUeXBlfScsIgogICAgICAgICAgIiBidXQgZm91bmQ6ICcke25vZGUucGFyZW50LnJ1bnRpbWVUeXBlfScuIiwKICAgICAgICAgIGNvbnRleHQ6IGN1cnJlbnRQYXJlbnQpOwogICAgfQogICAgdmFyIG9sZFBhcmVudCA9IGN1cnJlbnRQYXJlbnQ7CiAgICBjdXJyZW50UGFyZW50ID0gbm9kZTsKICAgIHJldHVybiBvbGRQYXJlbnQ7CiAgfQoKICB2b2lkIGV4aXRQYXJlbnQoVHJlZU5vZGUgb2xkUGFyZW50KSB7CiAgICBjdXJyZW50UGFyZW50ID0gb2xkUGFyZW50OwogIH0KCiAgaW50IGVudGVyTG9jYWxTY29wZSgpID0+IHZhcmlhYmxlU3RhY2subGVuZ3RoOwoKICB2b2lkIGV4aXRMb2NhbFNjb3BlKGludCBzdGFja0hlaWdodCkgewogICAgZm9yIChpbnQgaSA9IHN0YWNrSGVpZ2h0OyBpIDwgdmFyaWFibGVTdGFjay5sZW5ndGg7ICsraSkgewogICAgICB1bmRlY2xhcmVWYXJpYWJsZSh2YXJpYWJsZVN0YWNrW2ldKTsKICAgIH0KICAgIHZhcmlhYmxlU3RhY2subGVuZ3RoID0gc3RhY2tIZWlnaHQ7CiAgfQoKICB2b2lkIHZpc2l0Q2hpbGRyZW4oVHJlZU5vZGUgbm9kZSkgewogICAgdmFyIG9sZFBhcmVudCA9IGVudGVyUGFyZW50KG5vZGUpOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogICAgZXhpdFBhcmVudChvbGRQYXJlbnQpOwogIH0KCiAgdm9pZCB2aXNpdFdpdGhMb2NhbFNjb3BlKFRyZWVOb2RlIG5vZGUpIHsKICAgIGludCBzdGFja0hlaWdodCA9IGVudGVyTG9jYWxTY29wZSgpOwogICAgdmlzaXRDaGlsZHJlbihub2RlKTsKICAgIGV4aXRMb2NhbFNjb3BlKHN0YWNrSGVpZ2h0KTsKICB9CgogIHZvaWQgZGVjbGFyZU1lbWJlcihNZW1iZXIgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyLnRyYW5zZm9ybWVyRmxhZ3MgJiBUcmFuc2Zvcm1lckZsYWcuc2VlbkJ5VmVyaWZpZXIgIT0gMCkgewogICAgICBwcm9ibGVtKG1lbWJlci5mdW5jdGlvbiwKICAgICAgICAgICJNZW1iZXIgJyRtZW1iZXInIGhhcyBiZWVuIGRlY2xhcmVkIG1vcmUgdGhhbiBvbmNlLiIpOwogICAgfQogICAgbWVtYmVyLnRyYW5zZm9ybWVyRmxhZ3MgfD0gVHJhbnNmb3JtZXJGbGFnLnNlZW5CeVZlcmlmaWVyOwogIH0KCiAgdm9pZCB1bmRlY2xhcmVNZW1iZXIoTWVtYmVyIG1lbWJlcikgewogICAgbWVtYmVyLnRyYW5zZm9ybWVyRmxhZ3MgJj0gflRyYW5zZm9ybWVyRmxhZy5zZWVuQnlWZXJpZmllcjsKICB9CgogIHZvaWQgZGVjbGFyZVZhcmlhYmxlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpIHsKICAgIGlmICh2YXJpYWJsZS5mbGFncyAmIFZhcmlhYmxlRGVjbGFyYXRpb24uRmxhZ0luU2NvcGUgIT0gMCkgewogICAgICBwcm9ibGVtKHZhcmlhYmxlLCAiVmFyaWFibGUgJyR2YXJpYWJsZScgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UuIik7CiAgICB9CiAgICB2YXJpYWJsZS5mbGFncyB8PSBWYXJpYWJsZURlY2xhcmF0aW9uLkZsYWdJblNjb3BlOwogICAgdmFyaWFibGVTdGFjay5hZGQodmFyaWFibGUpOwogIH0KCiAgdm9pZCB1bmRlY2xhcmVWYXJpYWJsZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICB2YXJpYWJsZS5mbGFncyAmPSB+VmFyaWFibGVEZWNsYXJhdGlvbi5GbGFnSW5TY29wZTsKICB9CgogIHZvaWQgZGVjbGFyZVR5cGVQYXJhbWV0ZXJzKExpc3Q8VHlwZVBhcmFtZXRlcj4gcGFyYW1ldGVycykgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7CiAgICAgIHZhciBwYXJhbWV0ZXIgPSBwYXJhbWV0ZXJzW2ldOwogICAgICBpZiAocGFyYW1ldGVyLmJvdW5kID09IG51bGwpIHsKICAgICAgICBwcm9ibGVtKAogICAgICAgICAgICBjdXJyZW50UGFyZW50LCAiTWlzc2luZyBib3VuZCBmb3IgdHlwZSBwYXJhbWV0ZXIgJyRwYXJhbWV0ZXInLiIpOwogICAgICB9CiAgICAgIGlmICghdHlwZVBhcmFtZXRlcnNJblNjb3BlLmFkZChwYXJhbWV0ZXIpKSB7CiAgICAgICAgcHJvYmxlbShwYXJhbWV0ZXIsICJUeXBlIHBhcmFtZXRlciAnJHBhcmFtZXRlcicgcmVkZWNsYXJlZC4iKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCB1bmRlY2xhcmVUeXBlUGFyYW1ldGVycyhMaXN0PFR5cGVQYXJhbWV0ZXI+IHBhcmFtZXRlcnMpIHsKICAgIHR5cGVQYXJhbWV0ZXJzSW5TY29wZS5yZW1vdmVBbGwocGFyYW1ldGVycyk7CiAgfQoKICB2b2lkIGNoZWNrVmFyaWFibGVJblNjb3BlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIFRyZWVOb2RlIHdoZXJlKSB7CiAgICBpZiAodmFyaWFibGUuZmxhZ3MgJiBWYXJpYWJsZURlY2xhcmF0aW9uLkZsYWdJblNjb3BlID09IDApIHsKICAgICAgcHJvYmxlbSh3aGVyZSwgIlZhcmlhYmxlICckdmFyaWFibGUnIHVzZWQgb3V0IG9mIHNjb3BlLiIpOwogICAgfQogIH0KCiAgdmlzaXRDb21wb25lbnQoQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgdHJ5IHsKICAgICAgZm9yICh2YXIgbGlicmFyeSBpbiBjb21wb25lbnQubGlicmFyaWVzKSB7CiAgICAgICAgZm9yICh2YXIgY2xhc3NfIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICAgICAgaWYgKCFjbGFzc2VzLmFkZChjbGFzc18pKSB7CiAgICAgICAgICAgIHByb2JsZW0oY2xhc3NfLCAiQ2xhc3MgJyRjbGFzc18nIGRlY2xhcmVkIG1vcmUgdGhhbiBvbmNlLiIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKHZhciB0eXBlZGVmXyBpbiBsaWJyYXJ5LnR5cGVkZWZzKSB7CiAgICAgICAgICBpZiAoIXR5cGVkZWZzLmFkZCh0eXBlZGVmXykpIHsKICAgICAgICAgICAgcHJvYmxlbSh0eXBlZGVmXywgIlR5cGVkZWYgJyR0eXBlZGVmXycgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UuIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxpYnJhcnkubWVtYmVycy5mb3JFYWNoKGRlY2xhcmVNZW1iZXIpOwogICAgICAgIGZvciAodmFyIGNsYXNzXyBpbiBsaWJyYXJ5LmNsYXNzZXMpIHsKICAgICAgICAgIGNsYXNzXy5tZW1iZXJzLmZvckVhY2goZGVjbGFyZU1lbWJlcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZpc2l0Q2hpbGRyZW4oY29tcG9uZW50KTsKICAgIH0gZmluYWxseSB7CiAgICAgIGZvciAodmFyIGxpYnJhcnkgaW4gY29tcG9uZW50LmxpYnJhcmllcykgewogICAgICAgIGxpYnJhcnkubWVtYmVycy5mb3JFYWNoKHVuZGVjbGFyZU1lbWJlcik7CiAgICAgICAgZm9yICh2YXIgY2xhc3NfIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICAgICAgY2xhc3NfLm1lbWJlcnMuZm9yRWFjaCh1bmRlY2xhcmVNZW1iZXIpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YXJpYWJsZVN0YWNrLmZvckVhY2godW5kZWNsYXJlVmFyaWFibGUpOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdExpYnJhcnkoTGlicmFyeSBub2RlKSB7CiAgICBjdXJyZW50TGlicmFyeSA9IG5vZGU7CiAgICBzdXBlci52aXNpdExpYnJhcnkobm9kZSk7CiAgICBjdXJyZW50TGlicmFyeSA9IG51bGw7CiAgfQoKICB2b2lkIGNoZWNrVHlwZWRlZihUeXBlZGVmIG5vZGUpIHsKICAgIHZhciBzdGF0ZSA9IHR5cGVkZWZTdGF0ZVtub2RlXTsKICAgIGlmIChzdGF0ZSA9PSBUeXBlZGVmU3RhdGUuRG9uZSkgcmV0dXJuOwogICAgaWYgKHN0YXRlID09IFR5cGVkZWZTdGF0ZS5CZWluZ0NoZWNrZWQpIHsKICAgICAgcHJvYmxlbShub2RlLCAiVGhlIHR5cGVkZWYgJyRub2RlJyByZWZlcnMgdG8gaXRzZWxmIiwgY29udGV4dDogbm9kZSk7CiAgICB9CiAgICBhc3NlcnQoc3RhdGUgPT0gbnVsbCk7CiAgICB0eXBlZGVmU3RhdGVbbm9kZV0gPSBUeXBlZGVmU3RhdGUuQmVpbmdDaGVja2VkOwogICAgdmFyIHNhdmVkVHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVyc0luU2NvcGU7CiAgICB0eXBlUGFyYW1ldGVyc0luU2NvcGUgPSBub2RlLnR5cGVQYXJhbWV0ZXJzLnRvU2V0KCk7CiAgICB2YXIgc2F2ZWRQYXJlbnQgPSBjdXJyZW50UGFyZW50OwogICAgY3VycmVudFBhcmVudCA9IG5vZGU7CiAgICAvLyBWaXNpdCBjaGlsZHJlbiB3aXRob3V0IGNoZWNraW5nIHRoZSBwYXJlbnQgcG9pbnRlciBvbiB0aGUgdHlwZWRlZiBpdHNlbGYKICAgIC8vIHNpbmNlIHRoaXMgY2FuIGJlIGNhbGxlZCBmcm9tIGEgY29udGV4dCBvdGhlciB0aGFuIGl0cyB0cnVlIHBhcmVudC4KICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICAgIGN1cnJlbnRQYXJlbnQgPSBzYXZlZFBhcmVudDsKICAgIHR5cGVQYXJhbWV0ZXJzSW5TY29wZSA9IHNhdmVkVHlwZVBhcmFtZXRlcnM7CiAgICB0eXBlZGVmU3RhdGVbbm9kZV0gPSBUeXBlZGVmU3RhdGUuRG9uZTsKICB9CgogIHZpc2l0VHlwZWRlZihUeXBlZGVmIG5vZGUpIHsKICAgIGNoZWNrVHlwZWRlZihub2RlKTsKICAgIC8vIEVudGVyIGFuZCBleGl0IHRoZSBub2RlIHRvIGNoZWNrIHRoZSBwYXJlbnQgcG9pbnRlciBvbiB0aGUgdHlwZWRlZiBub2RlLgogICAgZXhpdFBhcmVudChlbnRlclBhcmVudChub2RlKSk7CiAgfQoKICB2aXNpdEZpZWxkKEZpZWxkIG5vZGUpIHsKICAgIGN1cnJlbnRNZW1iZXIgPSBub2RlOwogICAgdmFyIG9sZFBhcmVudCA9IGVudGVyUGFyZW50KG5vZGUpOwogICAgYm9vbCBpc1RvcExldmVsID0gbm9kZS5wYXJlbnQgPT0gY3VycmVudExpYnJhcnk7CiAgICBpZiAoaXNUb3BMZXZlbCAmJiAhbm9kZS5pc1N0YXRpYykgewogICAgICBwcm9ibGVtKG5vZGUsICJUaGUgdG9wLWxldmVsIGZpZWxkICcke25vZGUubmFtZS5uYW1lfScgc2hvdWxkIGJlIHN0YXRpYyIsCiAgICAgICAgICBjb250ZXh0OiBub2RlKTsKICAgIH0KICAgIGlmIChub2RlLmlzQ29uc3QgJiYgIW5vZGUuaXNTdGF0aWMpIHsKICAgICAgcHJvYmxlbShub2RlLCAiVGhlIGNvbnN0IGZpZWxkICcke25vZGUubmFtZS5uYW1lfScgc2hvdWxkIGJlIHN0YXRpYyIsCiAgICAgICAgICBjb250ZXh0OiBub2RlKTsKICAgIH0KICAgIGNsYXNzVHlwZVBhcmFtZXRlcnNBcmVJblNjb3BlID0gIW5vZGUuaXNTdGF0aWM7CiAgICBub2RlLmluaXRpYWxpemVyPy5hY2NlcHQodGhpcyk7CiAgICBub2RlLnR5cGUuYWNjZXB0KHRoaXMpOwogICAgY2xhc3NUeXBlUGFyYW1ldGVyc0FyZUluU2NvcGUgPSBmYWxzZTsKICAgIHZpc2l0TGlzdChub2RlLmFubm90YXRpb25zLCB0aGlzKTsKICAgIGV4aXRQYXJlbnQob2xkUGFyZW50KTsKICAgIGN1cnJlbnRNZW1iZXIgPSBudWxsOwogIH0KCiAgdmlzaXRQcm9jZWR1cmUoUHJvY2VkdXJlIG5vZGUpIHsKICAgIGN1cnJlbnRNZW1iZXIgPSBub2RlOwogICAgdmFyIG9sZFBhcmVudCA9IGVudGVyUGFyZW50KG5vZGUpOwogICAgY2xhc3NUeXBlUGFyYW1ldGVyc0FyZUluU2NvcGUgPSAhbm9kZS5pc1N0YXRpYzsKICAgIG5vZGUuZnVuY3Rpb24uYWNjZXB0KHRoaXMpOwogICAgY2xhc3NUeXBlUGFyYW1ldGVyc0FyZUluU2NvcGUgPSBmYWxzZTsKICAgIHZpc2l0TGlzdChub2RlLmFubm90YXRpb25zLCB0aGlzKTsKICAgIGV4aXRQYXJlbnQob2xkUGFyZW50KTsKICAgIGN1cnJlbnRNZW1iZXIgPSBudWxsOwogIH0KCiAgdmlzaXRDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvciBub2RlKSB7CiAgICBjdXJyZW50TWVtYmVyID0gbm9kZTsKICAgIGNsYXNzVHlwZVBhcmFtZXRlcnNBcmVJblNjb3BlID0gdHJ1ZTsKICAgIC8vIFRoZSBjb25zdHJ1Y3RvciBtZW1iZXIgbmVlZHMgc3BlY2lhbCB0cmVhdG1lbnQgZHVlIHRvIHBhcmFtZXRlcnMgYmVpbmcKICAgIC8vIGluIHNjb3BlIGluIHRoZSBpbml0aWFsaXplciBsaXN0LgogICAgdmFyIG9sZFBhcmVudCA9IGVudGVyUGFyZW50KG5vZGUpOwogICAgaW50IHN0YWNrSGVpZ2h0ID0gZW50ZXJMb2NhbFNjb3BlKCk7CiAgICB2aXNpdENoaWxkcmVuKG5vZGUuZnVuY3Rpb24pOwogICAgdmlzaXRMaXN0KG5vZGUuaW5pdGlhbGl6ZXJzLCB0aGlzKTsKICAgIGlmICghaXNPdXRsaW5lKSB7CiAgICAgIGNoZWNrSW5pdGlhbGl6ZXJzKG5vZGUpOwogICAgfQogICAgZXhpdExvY2FsU2NvcGUoc3RhY2tIZWlnaHQpOwogICAgY2xhc3NUeXBlUGFyYW1ldGVyc0FyZUluU2NvcGUgPSBmYWxzZTsKICAgIHZpc2l0TGlzdChub2RlLmFubm90YXRpb25zLCB0aGlzKTsKICAgIGV4aXRQYXJlbnQob2xkUGFyZW50KTsKICAgIGNsYXNzVHlwZVBhcmFtZXRlcnNBcmVJblNjb3BlID0gZmFsc2U7CiAgICBjdXJyZW50TWVtYmVyID0gbnVsbDsKICB9CgogIHZpc2l0Q2xhc3MoQ2xhc3Mgbm9kZSkgewogICAgY3VycmVudENsYXNzID0gbm9kZTsKICAgIGRlY2xhcmVUeXBlUGFyYW1ldGVycyhub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIHZhciBvbGRQYXJlbnQgPSBlbnRlclBhcmVudChub2RlKTsKICAgIGNsYXNzVHlwZVBhcmFtZXRlcnNBcmVJblNjb3BlID0gZmFsc2U7CiAgICB2aXNpdExpc3Qobm9kZS5hbm5vdGF0aW9ucywgdGhpcyk7CiAgICBjbGFzc1R5cGVQYXJhbWV0ZXJzQXJlSW5TY29wZSA9IHRydWU7CiAgICB2aXNpdExpc3Qobm9kZS50eXBlUGFyYW1ldGVycywgdGhpcyk7CiAgICB2aXNpdExpc3Qobm9kZS5maWVsZHMsIHRoaXMpOwogICAgdmlzaXRMaXN0KG5vZGUuY29uc3RydWN0b3JzLCB0aGlzKTsKICAgIHZpc2l0TGlzdChub2RlLnByb2NlZHVyZXMsIHRoaXMpOwogICAgZXhpdFBhcmVudChvbGRQYXJlbnQpOwogICAgdW5kZWNsYXJlVHlwZVBhcmFtZXRlcnMobm9kZS50eXBlUGFyYW1ldGVycyk7CiAgICBjdXJyZW50Q2xhc3MgPSBudWxsOwogIH0KCiAgdmlzaXRGdW5jdGlvbk5vZGUoRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIGRlY2xhcmVUeXBlUGFyYW1ldGVycyhub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIGJvb2wgc2F2ZWRJbkNhdGNoQmxvY2sgPSBpbkNhdGNoQmxvY2s7CiAgICBpbkNhdGNoQmxvY2sgPSBmYWxzZTsKICAgIHZpc2l0V2l0aExvY2FsU2NvcGUobm9kZSk7CiAgICBpbkNhdGNoQmxvY2sgPSBzYXZlZEluQ2F0Y2hCbG9jazsKICAgIHVuZGVjbGFyZVR5cGVQYXJhbWV0ZXJzKG5vZGUudHlwZVBhcmFtZXRlcnMpOwogIH0KCiAgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbm9kZS5uYW1lZFBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsKICAgICAgaWYgKG5vZGUubmFtZWRQYXJhbWV0ZXJzW2kgLSAxXS5jb21wYXJlVG8obm9kZS5uYW1lZFBhcmFtZXRlcnNbaV0pID49IDApIHsKICAgICAgICBwcm9ibGVtKGN1cnJlbnRQYXJlbnQsCiAgICAgICAgICAgICJOYW1lZCBwYXJhbWV0ZXJzIGFyZSBub3Qgc29ydGVkIG9uIGZ1bmN0aW9uIHR5cGUgKCRub2RlKS4iKTsKICAgICAgfQogICAgfQogICAgZGVjbGFyZVR5cGVQYXJhbWV0ZXJzKG5vZGUudHlwZVBhcmFtZXRlcnMpOwogICAgZm9yICh2YXIgdHlwZVBhcmFtZXRlciBpbiBub2RlLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIHR5cGVQYXJhbWV0ZXIuYm91bmQ/LmFjY2VwdCh0aGlzKTsKICAgIH0KICAgIHZpc2l0TGlzdChub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLCB0aGlzKTsKICAgIHZpc2l0TGlzdChub2RlLm5hbWVkUGFyYW1ldGVycywgdGhpcyk7CiAgICBub2RlLnJldHVyblR5cGUuYWNjZXB0KHRoaXMpOwogICAgdW5kZWNsYXJlVHlwZVBhcmFtZXRlcnMobm9kZS50eXBlUGFyYW1ldGVycyk7CiAgfQoKICB2aXNpdEJsb2NrKEJsb2NrIG5vZGUpIHsKICAgIHZpc2l0V2l0aExvY2FsU2NvcGUobm9kZSk7CiAgfQoKICB2aXNpdEZvclN0YXRlbWVudChGb3JTdGF0ZW1lbnQgbm9kZSkgewogICAgdmlzaXRXaXRoTG9jYWxTY29wZShub2RlKTsKICB9CgogIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgdmlzaXRXaXRoTG9jYWxTY29wZShub2RlKTsKICB9CgogIHZpc2l0TGV0KExldCBub2RlKSB7CiAgICB2aXNpdFdpdGhMb2NhbFNjb3BlKG5vZGUpOwogIH0KCiAgdmlzaXRCbG9ja0V4cHJlc3Npb24oQmxvY2tFeHByZXNzaW9uIG5vZGUpIHsKICAgIGludCBzdGFja0hlaWdodCA9IGVudGVyTG9jYWxTY29wZSgpOwogICAgLy8gRG8gbm90IHZpc2l0IHRoZSBibG9jayBkaXJlY3RseSBiZWNhdXNlIHRoZSB2YWx1ZSBleHByZXNzaW9uIG5lZWRzIHRvCiAgICAvLyBiZSBpbiBpdHMgc2NvcGUuCiAgICBUcmVlTm9kZSBvbGRQYXJlbnQgPSBlbnRlclBhcmVudChub2RlKTsKICAgIGVudGVyUGFyZW50KG5vZGUuYm9keSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUuYm9keS5zdGF0ZW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIG5vZGUuYm9keS5zdGF0ZW1lbnRzW2ldLmFjY2VwdCh0aGlzKTsKICAgIH0KICAgIGV4aXRQYXJlbnQobm9kZSk7CiAgICBub2RlLnZhbHVlLmFjY2VwdCh0aGlzKTsKICAgIGV4aXRQYXJlbnQob2xkUGFyZW50KTsKICAgIGV4aXRMb2NhbFNjb3BlKHN0YWNrSGVpZ2h0KTsKICB9CgogIHZpc2l0Q2F0Y2goQ2F0Y2ggbm9kZSkgewogICAgYm9vbCBzYXZlZEluQ2F0Y2hCbG9jayA9IGluQ2F0Y2hCbG9jazsKICAgIGluQ2F0Y2hCbG9jayA9IHRydWU7CiAgICB2aXNpdFdpdGhMb2NhbFNjb3BlKG5vZGUpOwogICAgaW5DYXRjaEJsb2NrID0gc2F2ZWRJbkNhdGNoQmxvY2s7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFJldGhyb3coUmV0aHJvdyBub2RlKSB7CiAgICBpZiAoIWluQ2F0Y2hCbG9jaykgewogICAgICBwcm9ibGVtKG5vZGUsICJSZXRocm93IG11c3QgYmUgaW5zaWRlIGEgQ2F0Y2ggYmxvY2suIik7CiAgICB9CiAgfQoKICB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQ7CiAgICBpZiAocGFyZW50IGlzISBCbG9jayAmJgogICAgICAgICEocGFyZW50IGlzIENhdGNoICYmIHBhcmVudC5ib2R5ICE9IG5vZGUpICYmCiAgICAgICAgIShwYXJlbnQgaXMgRnVuY3Rpb25Ob2RlICYmIHBhcmVudC5ib2R5ICE9IG5vZGUpICYmCiAgICAgICAgcGFyZW50IGlzISBGdW5jdGlvbkRlY2xhcmF0aW9uICYmCiAgICAgICAgIShwYXJlbnQgaXMgRm9yU3RhdGVtZW50ICYmIHBhcmVudC5ib2R5ICE9IG5vZGUpICYmCiAgICAgICAgIShwYXJlbnQgaXMgRm9ySW5TdGF0ZW1lbnQgJiYgcGFyZW50LmJvZHkgIT0gbm9kZSkgJiYKICAgICAgICBwYXJlbnQgaXMhIExldCAmJgogICAgICAgIHBhcmVudCBpcyEgTG9jYWxJbml0aWFsaXplcikgewogICAgICBwcm9ibGVtKAogICAgICAgICAgbm9kZSwKICAgICAgICAgICJWYXJpYWJsZURlY2xhcmF0aW9uIG11c3QgYmUgYSBkaXJlY3QgY2hpbGQgb2YgYSBCbG9jaywgIgogICAgICAgICAgIm5vdCAke3BhcmVudC5ydW50aW1lVHlwZX0uIik7CiAgICB9CiAgICB2aXNpdENoaWxkcmVuKG5vZGUpOwogICAgZGVjbGFyZVZhcmlhYmxlKG5vZGUpOwogIH0KCiAgdmlzaXRWYXJpYWJsZUdldChWYXJpYWJsZUdldCBub2RlKSB7CiAgICBjaGVja1ZhcmlhYmxlSW5TY29wZShub2RlLnZhcmlhYmxlLCBub2RlKTsKICAgIHZpc2l0Q2hpbGRyZW4obm9kZSk7CiAgfQoKICB2aXNpdFZhcmlhYmxlU2V0KFZhcmlhYmxlU2V0IG5vZGUpIHsKICAgIGNoZWNrVmFyaWFibGVJblNjb3BlKG5vZGUudmFyaWFibGUsIG5vZGUpOwogICAgdmlzaXRDaGlsZHJlbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3RhdGljR2V0KFN0YXRpY0dldCBub2RlKSB7CiAgICB2aXNpdENoaWxkcmVuKG5vZGUpOwogICAgaWYgKG5vZGUudGFyZ2V0ID09IG51bGwpIHsKICAgICAgcHJvYmxlbShub2RlLCAiU3RhdGljR2V0IHdpdGhvdXQgdGFyZ2V0LiIpOwogICAgfQogICAgLy8gQ3VycmVudGx5IENvbnN0cnVjdG9yLmhhc0dldHRlciByZXR1cm5zIGBmYWxzZWAgZXZlbiB0aG91Z2ggZmFzdGEgdXNlcyBpdAogICAgLy8gYXMgYSBnZXR0ZXIgZm9yIGludGVybmFsIHB1cnBvc2VzOgogICAgLy8KICAgIC8vIEZhc3RhIGlzIGxldHRpbmcgYWxsIGNhbGwgc2l0ZSBvZiBhIHJlZGlyZWN0aW5nIGNvbnN0cnVjdG9yIGJlIHJlc29sdmVkCiAgICAvLyB0byB0aGUgcmVhbCB0YXJnZXQuICBJbiBvcmRlciB0byByZXNvbHZlIGl0LCBpdCBzZWVtcyB0byBhZGQgYSBib2R5IGludG8KICAgIC8vIHRoZSByZWRpcmVjdGluZy1mYWN0b3J5IGNvbnN0cnVjdG9yIHdoaWNoIGNhY2hlcyB0aGUgdGFyZ2V0IGNvbnN0cnVjdG9yLgogICAgLy8gVGhhdCBjYWNoZSBpcyB2aWEgYSBgU3RhdGljR2V0KHJlYWwtY29uc3RydWN0b3IpYCBub2RlLCB3aGljaCB3ZSBtYWtlCiAgICAvLyBoZXJlIHBhc3MgdGhlIHZlcmlmaWVyLgogICAgaWYgKCFub2RlLnRhcmdldC5oYXNHZXR0ZXIgJiYgbm9kZS50YXJnZXQgaXMhIENvbnN0cnVjdG9yKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIlN0YXRpY0dldCBvZiAnJHtub2RlLnRhcmdldH0nIHdpdGhvdXQgZ2V0dGVyLiIpOwogICAgfQogICAgaWYgKG5vZGUudGFyZ2V0LmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgcHJvYmxlbShub2RlLCAiU3RhdGljR2V0IG9mICcke25vZGUudGFyZ2V0fScgdGhhdCdzIGFuIGluc3RhbmNlIG1lbWJlci4iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3RhdGljU2V0KFN0YXRpY1NldCBub2RlKSB7CiAgICB2aXNpdENoaWxkcmVuKG5vZGUpOwogICAgaWYgKG5vZGUudGFyZ2V0ID09IG51bGwpIHsKICAgICAgcHJvYmxlbShub2RlLCAiU3RhdGljU2V0IHdpdGhvdXQgdGFyZ2V0LiIpOwogICAgfQogICAgaWYgKCFub2RlLnRhcmdldC5oYXNTZXR0ZXIpIHsKICAgICAgcHJvYmxlbShub2RlLCAiU3RhdGljU2V0IHRvICcke25vZGUudGFyZ2V0fScgd2l0aG91dCBzZXR0ZXIuIik7CiAgICB9CiAgICBpZiAobm9kZS50YXJnZXQuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICBwcm9ibGVtKG5vZGUsICJTdGF0aWNTZXQgdG8gJyR7bm9kZS50YXJnZXR9JyB0aGF0J3MgYW4gaW5zdGFuY2UgbWVtYmVyLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKFN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgY2hlY2tUYXJnZXRlZEludm9jYXRpb24obm9kZS50YXJnZXQsIG5vZGUpOwogICAgaWYgKG5vZGUudGFyZ2V0LmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgcHJvYmxlbShub2RlLAogICAgICAgICAgIlN0YXRpY0ludm9jYXRpb24gb2YgJyR7bm9kZS50YXJnZXR9JyB0aGF0J3MgYW4gaW5zdGFuY2UgbWVtYmVyLiIpOwogICAgfQogICAgaWYgKG5vZGUuaXNDb25zdCAmJgogICAgICAgICghbm9kZS50YXJnZXQuaXNDb25zdCB8fAogICAgICAgICAgICAhbm9kZS50YXJnZXQuaXNFeHRlcm5hbCB8fAogICAgICAgICAgICBub2RlLnRhcmdldC5raW5kICE9IFByb2NlZHVyZUtpbmQuRmFjdG9yeSkpIHsKICAgICAgcHJvYmxlbSgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICAiQ29uc3RhbnQgU3RhdGljSW52b2NhdGlvbiBvZiAnJHtub2RlLnRhcmdldH0nIHRoYXQgaXNuJ3QiCiAgICAgICAgICAiIGEgY29uc3QgZXh0ZXJuYWwgZmFjdG9yeS4iKTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tUYXJnZXRlZEludm9jYXRpb24oTWVtYmVyIHRhcmdldCwgSW52b2NhdGlvbkV4cHJlc3Npb24gbm9kZSkgewogICAgdmlzaXRDaGlsZHJlbihub2RlKTsKICAgIGlmICh0YXJnZXQgPT0gbnVsbCkgewogICAgICBwcm9ibGVtKG5vZGUsICIke25vZGUucnVudGltZVR5cGV9IHdpdGhvdXQgdGFyZ2V0LiIpOwogICAgfQogICAgaWYgKHRhcmdldC5mdW5jdGlvbiA9PSBudWxsKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIiR7bm9kZS5ydW50aW1lVHlwZX0gd2l0aG91dCBmdW5jdGlvbi4iKTsKICAgIH0KICAgIGlmICghYXJlQXJndW1lbnRzQ29tcGF0aWJsZShub2RlLmFyZ3VtZW50cywgdGFyZ2V0LmZ1bmN0aW9uKSkgewogICAgICBwcm9ibGVtKG5vZGUsCiAgICAgICAgICAiJHtub2RlLnJ1bnRpbWVUeXBlfSB3aXRoIGluY29tcGF0aWJsZSBhcmd1bWVudHMgZm9yICcke3RhcmdldH0nLiIpOwogICAgfQogICAgaW50IGV4cGVjdGVkVHlwZVBhcmFtZXRlcnMgPSB0YXJnZXQgaXMgQ29uc3RydWN0b3IKICAgICAgICA/IHRhcmdldC5lbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVycy5sZW5ndGgKICAgICAgICA6IHRhcmdldC5mdW5jdGlvbi50eXBlUGFyYW1ldGVycy5sZW5ndGg7CiAgICBpZiAobm9kZS5hcmd1bWVudHMudHlwZXMubGVuZ3RoICE9IGV4cGVjdGVkVHlwZVBhcmFtZXRlcnMpIHsKICAgICAgcHJvYmxlbSgKICAgICAgICAgIG5vZGUsCiAgICAgICAgICAiJHtub2RlLnJ1bnRpbWVUeXBlfSB3aXRoIHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyIKICAgICAgICAgICIgZm9yICcke3RhcmdldH0nLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREaXJlY3RQcm9wZXJ0eUdldChEaXJlY3RQcm9wZXJ0eUdldCBub2RlKSB7CiAgICB2aXNpdENoaWxkcmVuKG5vZGUpOwogICAgaWYgKG5vZGUudGFyZ2V0ID09IG51bGwpIHsKICAgICAgcHJvYmxlbShub2RlLCAiRGlyZWN0UHJvcGVydHlHZXQgd2l0aG91dCB0YXJnZXQuIik7CiAgICB9CiAgICBpZiAoIW5vZGUudGFyZ2V0Lmhhc0dldHRlcikgewogICAgICBwcm9ibGVtKG5vZGUsICJEaXJlY3RQcm9wZXJ0eUdldCBvZiAnJHtub2RlLnRhcmdldH0nIHdpdGhvdXQgZ2V0dGVyLiIpOwogICAgfQogICAgaWYgKCFub2RlLnRhcmdldC5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgIHByb2JsZW0oCiAgICAgICAgICBub2RlLAogICAgICAgICAgIkRpcmVjdFByb3BlcnR5R2V0IG9mICcke25vZGUudGFyZ2V0fScgdGhhdCBpc24ndCBhbiIKICAgICAgICAgICIgaW5zdGFuY2UgbWVtYmVyLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREaXJlY3RQcm9wZXJ0eVNldChEaXJlY3RQcm9wZXJ0eVNldCBub2RlKSB7CiAgICB2aXNpdENoaWxkcmVuKG5vZGUpOwogICAgaWYgKG5vZGUudGFyZ2V0ID09IG51bGwpIHsKICAgICAgcHJvYmxlbShub2RlLCAiRGlyZWN0UHJvcGVydHlTZXQgd2l0aG91dCB0YXJnZXQuIik7CiAgICB9CiAgICBpZiAoIW5vZGUudGFyZ2V0Lmhhc1NldHRlcikgewogICAgICBwcm9ibGVtKG5vZGUsICJEaXJlY3RQcm9wZXJ0eVNldCBvZiAnJHtub2RlLnRhcmdldH0nIHdpdGhvdXQgc2V0dGVyLiIpOwogICAgfQogICAgaWYgKCFub2RlLnRhcmdldC5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIkRpcmVjdFByb3BlcnR5U2V0IG9mICcke25vZGUudGFyZ2V0fScgdGhhdCBpcyBzdGF0aWMuIik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdERpcmVjdE1ldGhvZEludm9jYXRpb24oRGlyZWN0TWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICBjaGVja1RhcmdldGVkSW52b2NhdGlvbihub2RlLnRhcmdldCwgbm9kZSk7CiAgICBpZiAobm9kZS5yZWNlaXZlciA9PSBudWxsKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIkRpcmVjdE1ldGhvZEludm9jYXRpb24gd2l0aG91dCByZWNlaXZlci4iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q29uc3RydWN0b3JJbnZvY2F0aW9uKENvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKSB7CiAgICBjaGVja1RhcmdldGVkSW52b2NhdGlvbihub2RlLnRhcmdldCwgbm9kZSk7CiAgICBpZiAobm9kZS50YXJnZXQuZW5jbG9zaW5nQ2xhc3MuaXNBYnN0cmFjdCkgewogICAgICBwcm9ibGVtKG5vZGUsICJDb25zdHJ1Y3Rvckludm9jYXRpb24gb2YgYWJzdHJhY3QgY2xhc3MuIik7CiAgICB9CiAgICBpZiAobm9kZS5pc0NvbnN0ICYmICFub2RlLnRhcmdldC5pc0NvbnN0KSB7CiAgICAgIHByb2JsZW0oCiAgICAgICAgICBub2RlLAogICAgICAgICAgIkNvbnN0YW50IENvbnN0cnVjdG9ySW52b2NhdGlvbiBmbyAnJHtub2RlLnRhcmdldH0nIHRoYXQiCiAgICAgICAgICAiIGlzbid0IGNvbnN0LiIpOwogICAgfQogIH0KCiAgYm9vbCBhcmVBcmd1bWVudHNDb21wYXRpYmxlKEFyZ3VtZW50cyBhcmd1bWVudHMsIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbikgewogICAgaWYgKGFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA8IGZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKGFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA+IGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBuYW1lZExvb3A6CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5uYW1lZC5sZW5ndGg7ICsraSkgewogICAgICB2YXIgYXJndW1lbnQgPSBhcmd1bWVudHMubmFtZWRbaV07CiAgICAgIFN0cmluZyBuYW1lID0gYXJndW1lbnQubmFtZTsKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMubGVuZ3RoOyArK2opIHsKICAgICAgICBpZiAoZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzW2pdLm5hbWUgPT0gbmFtZSkgY29udGludWUgbmFtZWRMb29wOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChDb250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICBpZiAobm9kZS50YXJnZXQgPT0gbnVsbCkgewogICAgICBwcm9ibGVtKG5vZGUsICJObyB0YXJnZXQuIik7CiAgICB9IGVsc2UgaWYgKG5vZGUudGFyZ2V0LnBhcmVudCA9PSBudWxsKSB7CiAgICAgIHByb2JsZW0obm9kZSwgIlRhcmdldCBoYXMgbm8gcGFyZW50LiIpOwogICAgfSBlbHNlIHsKICAgICAgU3dpdGNoU3RhdGVtZW50IHN0YXRlbWVudCA9IG5vZGUudGFyZ2V0LnBhcmVudDsKICAgICAgZm9yIChTd2l0Y2hDYXNlIHN3aXRjaENhc2UgaW4gc3RhdGVtZW50LmNhc2VzKSB7CiAgICAgICAgaWYgKHN3aXRjaENhc2UgPT0gbm9kZS50YXJnZXQpIHJldHVybjsKICAgICAgfQogICAgICBwcm9ibGVtKG5vZGUsICJTd2l0Y2ggY2FzZSBpc24ndCBjaGlsZCBvZiBwYXJlbnQuIik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBkZWZhdWx0TWVtYmVyUmVmZXJlbmNlKE1lbWJlciBub2RlKSB7CiAgICBpZiAobm9kZS50cmFuc2Zvcm1lckZsYWdzICYgVHJhbnNmb3JtZXJGbGFnLnNlZW5CeVZlcmlmaWVyID09IDApIHsKICAgICAgcHJvYmxlbSgKICAgICAgICAgIG5vZGUsICJEYW5nbGluZyByZWZlcmVuY2UgdG8gJyRub2RlJywgcGFyZW50IGlzOiAnJHtub2RlLnBhcmVudH0nLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDbGFzc1JlZmVyZW5jZShDbGFzcyBub2RlKSB7CiAgICBpZiAoIWNsYXNzZXMuY29udGFpbnMobm9kZSkpIHsKICAgICAgcHJvYmxlbSgKICAgICAgICAgIG5vZGUsICJEYW5nbGluZyByZWZlcmVuY2UgdG8gJyRub2RlJywgcGFyZW50IGlzOiAnJHtub2RlLnBhcmVudH0nLiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlZGVmUmVmZXJlbmNlKFR5cGVkZWYgbm9kZSkgewogICAgaWYgKCF0eXBlZGVmcy5jb250YWlucyhub2RlKSkgewogICAgICBwcm9ibGVtKAogICAgICAgICAgbm9kZSwgIkRhbmdsaW5nIHJlZmVyZW5jZSB0byAnJG5vZGUnLCBwYXJlbnQgaXM6ICcke25vZGUucGFyZW50fSciKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoVHlwZVBhcmFtZXRlclR5cGUgbm9kZSkgewogICAgdmFyIHBhcmFtZXRlciA9IG5vZGUucGFyYW1ldGVyOwogICAgaWYgKCF0eXBlUGFyYW1ldGVyc0luU2NvcGUuY29udGFpbnMocGFyYW1ldGVyKSkgewogICAgICBwcm9ibGVtKAogICAgICAgICAgY3VycmVudFBhcmVudCwKICAgICAgICAgICJUeXBlIHBhcmFtZXRlciAnJHBhcmFtZXRlcicgcmVmZXJlbmNlZCBvdXQgb2YiCiAgICAgICAgICAiIHNjb3BlLCBwYXJlbnQgaXM6ICcke3BhcmFtZXRlci5wYXJlbnR9Jy4iKTsKICAgIH0KICAgIGlmIChwYXJhbWV0ZXIucGFyZW50IGlzIENsYXNzICYmICFjbGFzc1R5cGVQYXJhbWV0ZXJzQXJlSW5TY29wZSkgewogICAgICBwcm9ibGVtKAogICAgICAgICAgY3VycmVudFBhcmVudCwKICAgICAgICAgICJUeXBlIHBhcmFtZXRlciAnJHBhcmFtZXRlcicgcmVmZXJlbmNlZCBmcm9tIgogICAgICAgICAgIiBzdGF0aWMgY29udGV4dCwgcGFyZW50IGlzOiAnJHtwYXJhbWV0ZXIucGFyZW50fScuIik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSBub2RlKSB7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCAhPSBub2RlLmNsYXNzTm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgcHJvYmxlbSgKICAgICAgICAgIGN1cnJlbnRQYXJlbnQsCiAgICAgICAgICAiVHlwZSAkbm9kZSBwcm92aWRlcyAke25vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGh9IgogICAgICAgICAgIiB0eXBlIGFyZ3VtZW50cyBidXQgdGhlIGNsYXNzIGRlY2xhcmVzIgogICAgICAgICAgIiAke25vZGUuY2xhc3NOb2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aH0gcGFyYW1ldGVycy4iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgbm9kZSkgewogICAgY2hlY2tUeXBlZGVmKG5vZGUudHlwZWRlZk5vZGUpOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogICAgaWYgKG5vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGggIT0gbm9kZS50eXBlZGVmTm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgcHJvYmxlbSgKICAgICAgICAgIGN1cnJlbnRQYXJlbnQsCiAgICAgICAgICAiVGhlIHR5cGVkZWYgdHlwZSAkbm9kZSBwcm92aWRlcyAke25vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGh9IgogICAgICAgICAgIiB0eXBlIGFyZ3VtZW50cyBidXQgdGhlIHR5cGVkZWYgZGVjbGFyZXMiCiAgICAgICAgICAiICR7bm9kZS50eXBlZGVmTm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGh9IHBhcmFtZXRlcnMuIik7CiAgICB9CiAgfQp9CgpjbGFzcyBDaGVja1BhcmVudFBvaW50ZXJzIGV4dGVuZHMgVmlzaXRvciB7CiAgc3RhdGljIHZvaWQgY2hlY2soVHJlZU5vZGUgbm9kZSkgewogICAgbm9kZS5hY2NlcHQobmV3IENoZWNrUGFyZW50UG9pbnRlcnMobm9kZS5wYXJlbnQpKTsKICB9CgogIFRyZWVOb2RlIHBhcmVudDsKCiAgQ2hlY2tQYXJlbnRQb2ludGVycyhbdGhpcy5wYXJlbnRdKTsKCiAgZGVmYXVsdFRyZWVOb2RlKFRyZWVOb2RlIG5vZGUpIHsKICAgIGlmIChub2RlLnBhcmVudCAhPSBwYXJlbnQpIHsKICAgICAgdGhyb3cgbmV3IFZlcmlmaWNhdGlvbkVycm9yKAogICAgICAgICAgcGFyZW50LAogICAgICAgICAgbm9kZSwKICAgICAgICAgICJQYXJlbnQgcG9pbnRlciBvbiAnJHtub2RlLnJ1bnRpbWVUeXBlfScgIgogICAgICAgICAgImlzICcke25vZGUucGFyZW50LnJ1bnRpbWVUeXBlfScgIgogICAgICAgICAgImJ1dCBzaG91bGQgYmUgJyR7cGFyZW50LnJ1bnRpbWVUeXBlfScuIik7CiAgICB9CiAgICB2YXIgb2xkUGFyZW50ID0gcGFyZW50OwogICAgcGFyZW50ID0gbm9kZTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICAgIHBhcmVudCA9IG9sZFBhcmVudDsKICB9Cn0KCnZvaWQgY2hlY2tJbml0aWFsaXplcnMoQ29uc3RydWN0b3IgY29uc3RydWN0b3IpIHsKICAvLyBUT0RPKGFoZSk6IEknbGwgYWRkIG1vcmUgaGVyZSBpbiBvdGhlciBDTHMuCn0KgpMATk48FwETJQEsJQIBGhoBFwEYATwBDxcKNhIuBhw1ThcNLiMcBgQCASkBMwQ1OC80R0tNLgFLNBoBHQEaARgBFgEaATkBKy4EASMZBAE/HjkEASgyDxA9NjcjBiMaFgQBKB8EATEBKT8rBigEASYnHhsEASwpGSEEASZJH0EGPwQBKEAEATdBSgY3IQQBOTgEAT8yJSURTggzRwgGBAFBMQQBTEFBBgQBKAoxLiZJDAoxKU8MCjAuMQoIIBAxMi4zCggwBgQBJBseGwQBJCQsLkwGGzQ1OSUaUEseITEsBAEfGFAjBAEbGic1KFAaBipMGgY0JBwrJxsaBAEjGic0ICsnGxoEAScaKk4pJykiKBYfBiErJxsrGgQBGxkwJysnKioiKCYbMhkEASkwKxofJjIEASk8UR9KCAYwNSkGMCsiMgQBGx8EASkfBAEtHwQBFx8EAS8pTRgsHDwsBhYdGyEEARsrGR8mBAEMHxk+BgQBNx4cNTwqPD4aJw8QRCkGGRsEAScvGQQBJy8ZBAEMIxkfMgZRKgdPUFBNH0FGBihRBgQBDCMZHzIGIkYGKFEGBAEMMTAoFE4GGCEnOg8QRSkGBAFLGRo8BiM+BkQUTwY3NjFBDxBEIAYEAQwzGR86BiJOBikPEEAgBgQBDDMZHzoGIk4GKU4GBAEMPTAhQQYEAQw7MDFBBjAPEEQcBgQBTEkUBk4UBg83KSNCSggUBhEEAQw/HyMtLg02Ny8IOwYEAQwoRw9QBgQBDCQjD1AGBAEMKCQPTwYEAQwzJDYPGTo4BkcPGThBBgQBDCseTQ8ZPTNDBgQBDCckHk8PGUk1RQYEAgEsJTcEARMBJgEjISMSEDUtNQYcEx4YBAIBMjECARxwYWNrYWdlOmtlcm5lbC92ZXJpZmllci5kYXJ0RHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX3NjaGVtYS5kYXJ0kKUvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLm1kIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIERhcnRUeXBlLAogICAgICAgIERhcnRUeXBlVmlzaXRvciwKICAgICAgICBEYXJ0VHlwZVZpc2l0b3IxLAogICAgICAgIEZ1bmN0aW9uVHlwZSwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIFR5cGVkZWZUeXBlLAogICAgICAgIFZpc2l0b3I7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2ltcG9ydF90YWJsZS5kYXJ0JyBzaG93IEltcG9ydFRhYmxlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90ZXh0L2FzdF90b190ZXh0LmRhcnQnCiAgICBzaG93IEFubm90YXRvciwgTmFtZVN5c3RlbSwgUHJpbnRlciwgZ2xvYmFsRGVidWdnaW5nTmFtZXM7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5zdXBwb3J0ZWQ7CgovLy8gRGV0ZXJtaW5lcyB3aGV0aGVyIGEgdHlwZSBzY2hlbWEgY29udGFpbnMgYD9gIHNvbWV3aGVyZSBpbnNpZGUgaXQuCmJvb2wgaXNLbm93bihEYXJ0VHlwZSBzY2hlbWEpID0+IHNjaGVtYS5hY2NlcHQobmV3IF9Jc0tub3duVmlzaXRvcigpKTsKCi8vLyBDb252ZXJ0cyBhIFtEYXJ0VHlwZV0gdG8gYSBzdHJpbmcsIHJlcHJlc2VudGluZyB0aGUgdW5rbm93biB0eXBlIGFzIGA/YC4KU3RyaW5nIHR5cGVTY2hlbWFUb1N0cmluZyhEYXJ0VHlwZSBzY2hlbWEpIHsKICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIG5ldyBUeXBlU2NoZW1hUHJpbnRlcihidWZmZXIsIHN5bnRoZXRpY05hbWVzOiBnbG9iYWxEZWJ1Z2dpbmdOYW1lcykKICAgICAgLndyaXRlTm9kZShzY2hlbWEpOwogIHJldHVybiAnJGJ1ZmZlcic7Cn0KCi8vLyBFeHRlbnNpb24gb2YgW1ByaW50ZXJdIHRoYXQgcmVwcmVzZW50cyB0aGUgdW5rbm93biB0eXBlIGFzIGA/YC4KY2xhc3MgVHlwZVNjaGVtYVByaW50ZXIgZXh0ZW5kcyBQcmludGVyIGltcGxlbWVudHMgVHlwZVNjaGVtYVZpc2l0b3I8TnVsbD4gewogIFR5cGVTY2hlbWFQcmludGVyKFN0cmluZ1Npbmsgc2luaywKICAgICAge05hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMsCiAgICAgIGJvb2wgc2hvd0V4dGVybmFsLAogICAgICBib29sIHNob3dPZmZzZXRzOiBmYWxzZSwKICAgICAgSW1wb3J0VGFibGUgaW1wb3J0VGFibGUsCiAgICAgIEFubm90YXRvciBhbm5vdGF0b3J9KQogICAgICA6IHN1cGVyKHNpbmssCiAgICAgICAgICAgIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcywKICAgICAgICAgICAgc2hvd0V4dGVybmFsOiBzaG93RXh0ZXJuYWwsCiAgICAgICAgICAgIHNob3dPZmZzZXRzOiBzaG93T2Zmc2V0cywKICAgICAgICAgICAgaW1wb3J0VGFibGU6IGltcG9ydFRhYmxlLAogICAgICAgICAgICBhbm5vdGF0b3I6IGFubm90YXRvcik7CgogIEBvdmVycmlkZQogIHZpc2l0VW5rbm93blR5cGUoVW5rbm93blR5cGUgbm9kZSkgewogICAgd3JpdGVXb3JkKCc/Jyk7CiAgfQp9CgovLy8gRXh0ZW5zaW9uIG9mIFtEYXJ0VHlwZVZpc2l0b3JdIHdoaWNoIGNhbiB2aXNpdCBbVW5rbm93blR5cGVdLgpjbGFzcyBUeXBlU2NoZW1hVmlzaXRvcjxSPiBleHRlbmRzIERhcnRUeXBlVmlzaXRvcjxSPiB7CiAgLy8vIENhbGxlZCB3aGVuIFtVbmtub3duVHlwZV0gaXMgdmlzaXRlZC4KICBSIHZpc2l0VW5rbm93blR5cGUoVW5rbm93blR5cGUgbm9kZSkgPT4gZGVmYXVsdERhcnRUeXBlKG5vZGUpOwp9CgovLy8gVGhlIHVua25vd24gdHlwZSAoZGVub3RlZCBgP2ApIGlzIGFuIG9iamVjdCB3aGljaCBjYW4gYXBwZWFyIGFueXdoZXJlIHRoYXQKLy8vIGEgdHlwZSBpcyBleHBlY3RlZC4gIEl0IHJlcHJlc2VudHMgYSBjb21wb25lbnQgb2YgYSB0eXBlIHdoaWNoIGhhcyBub3QgeWV0Ci8vLyBiZWVuIGZpeGVkIGJ5IGluZmVyZW5jZS4KLy8vCi8vLyBUaGUgdW5rbm93biB0eXBlIGNhbm5vdCBhcHBlYXIgaW4gcHJvZ3JhbXMgb3IgaW4gZmluYWwgaW5mZXJyZWQgdHlwZXM6IGl0IGlzCi8vLyBwdXJlbHkgcGFydCBvZiB0aGUgbG9jYWwgaW5mZXJlbmNlIHByb2Nlc3MuCmNsYXNzIFVua25vd25UeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIEBvdmVycmlkZQogIGdldCBudWxsYWJpbGl0eSA9PiB1bnN1cHBvcnRlZCgibnVsbGFiaWxpdHkiLCAtMSwgbnVsbCk7CgogIGNvbnN0IFVua25vd25UeXBlKCk7CgogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKSB7CiAgICAvLyBUaGlzIGNsYXNzIGRvZXNuJ3QgaGF2ZSBhbnkgZmllbGRzIHNvIGFsbCBpbnN0YW5jZXMgb2YgYFVua25vd25UeXBlYCBhcmUKICAgIC8vIGVxdWFsLgogICAgcmV0dXJuIG90aGVyIGlzIFVua25vd25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KERhcnRUeXBlVmlzaXRvcjxkeW5hbWljPiB2KSB7CiAgICBpZiAodiBpcyBUeXBlU2NoZW1hVmlzaXRvcjxkeW5hbWljPikgewogICAgICByZXR1cm4gdi52aXNpdFVua25vd25UeXBlKHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgLy8gTm90ZTogaW4gcHJpbmNpcGxlIGl0IHNlZW1zIGxpa2UgdGhpcyBzaG91bGQgdGhyb3csIHNpbmNlIGFueSB2aXNpdG9yCiAgICAgIC8vIHRoYXQgb3BlcmF0ZXMgb24gYSB0eXBlIHNjaGVtYSBvdWdodCB0byBpbmhlcml0IGZyb20gVHlwZVNjaGVtYVZpc2l0b3IuCiAgICAgIC8vIEhvd2V2ZXIsIHRoYXQgd291bGQgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIHVzZSB0b1N0cmluZygpIG9uIGFueSB0eXBlCiAgICAgIC8vIHNjaGVtYSwgc2luY2UgdG9TdHJpbmcoKSB1c2VzIHRoZSBrZXJuZWwncyBQcmludGVyIHZpc2l0b3IsIHdoaWNoIGNhbid0CiAgICAgIC8vIHBvc3NpYmx5IGluaGVyaXQgZnJvbSBUeXBlU2NoZW1hVmlzaXRvciBzaW5jZSBpdCdzIGluc2lkZSBrZXJuZWwuCiAgICAgIHJldHVybiB2LmRlZmF1bHREYXJ0VHlwZSh0aGlzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGFjY2VwdDEoRGFydFR5cGVWaXNpdG9yMTxkeW5hbWljLCBkeW5hbWljPiB2LCBhcmcpID0+CiAgICAgIHYuZGVmYXVsdERhcnRUeXBlKHRoaXMsIGFyZyk7CgogIEBvdmVycmlkZQogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvcjxkeW5hbWljPiB2KSB7fQp9CgovLy8gVmlzaXRvciB0aGF0IGNvbXB1dGVzIFtpc0tub3duXS4KY2xhc3MgX0lzS25vd25WaXNpdG9yIGV4dGVuZHMgVHlwZVNjaGVtYVZpc2l0b3I8Ym9vbD4gewogIEBvdmVycmlkZQogIGJvb2wgZGVmYXVsdERhcnRUeXBlKERhcnRUeXBlIG5vZGUpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIGlmICghbm9kZS5yZXR1cm5UeXBlLmFjY2VwdCh0aGlzKSkgcmV0dXJuIGZhbHNlOwogICAgZm9yICh2YXIgcGFyYW1ldGVyVHlwZSBpbiBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgIGlmICghcGFyYW1ldGVyVHlwZS5hY2NlcHQodGhpcykpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZvciAodmFyIG5hbWVkUGFyYW1ldGVyVHlwZSBpbiBub2RlLm5hbWVkUGFyYW1ldGVycykgewogICAgICBpZiAoIW5hbWVkUGFyYW1ldGVyVHlwZS50eXBlLmFjY2VwdCh0aGlzKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIG5vZGUpIHsKICAgIGZvciAodmFyIHR5cGVBcmd1bWVudCBpbiBub2RlLnR5cGVBcmd1bWVudHMpIHsKICAgICAgaWYgKCF0eXBlQXJndW1lbnQuYWNjZXB0KHRoaXMpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7CiAgICBmb3IgKHZhciB0eXBlQXJndW1lbnQgaW4gbm9kZS50eXBlQXJndW1lbnRzKSB7CiAgICAgIGlmICghdHlwZUFyZ3VtZW50LmFjY2VwdCh0aGlzKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VW5rbm93blR5cGUoVW5rbm93blR5cGUgbm9kZSkgPT4gZmFsc2U7Cn0KgIkATU4/ASEJEhkaFhcVEQE8AS4/ASwBR0cBTS0sRhoUAgFETSUiGR8fHBQsKCYmIwEMJxQEAgFCOCxBAgFPTx0EUTAlDDsBFwEjUA4hBAEMJysnDU9RTlFLJgYEAQw4JAEMJwIBJTgMLwEMLjU7NQY7PwYRBAEMMDM0BhEEAQwsMzQGEQQBDDQCATtwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWEuZGFydEJzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9zaGFkb3dfYXN0LmRhcnTAAPTuLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBUaGlzIGZpbGUgZGVjbGFyZXMgYSAic2hhZG93IGhpZXJhcmNoeSIgb2YgY29uY3JldGUgY2xhc3NlcyB3aGljaCBleHRlbmQKLy8vIHRoZSBrZXJuZWwgY2xhc3MgaGllcmFyY2h5LCBhZGRpbmcgbWV0aG9kcyBhbmQgZmllbGRzIG5lZWRlZCBieSB0aGUKLy8vIEJvZHlCdWlsZGVyLgovLy8KLy8vIEluc3RhbmNlcyBvZiB0aGVzZSBjbGFzc2VzIG1heSBiZSBjcmVhdGVkIHVzaW5nIHRoZSBmYWN0b3J5IG1ldGhvZHMgaW4KLy8vIGBhc3RfZmFjdG9yeS5kYXJ0YC4KLy8vCi8vLyBOb3RlIHRoYXQgdGhlc2UgY2xhc3NlcyByZXByZXNlbnQgdGhlIERhcnQgbGFuZ3VhZ2UgcHJpb3IgdG8gZGVzdWdhcmluZy4KLy8vIFdoZW4gYSBzaW5nbGUgRGFydCBjb25zdHJ1Y3QgZGVzdWdhcnMgdG8gYSB0cmVlIGNvbnRhaW5pbmcgbXVsdGlwbGUga2VybmVsCi8vLyBBU1Qgbm9kZXMsIHRoZSBzaGFkb3cgY2xhc3MgZXh0ZW5kcyB0aGUga2VybmVsIG9iamVjdCBhdCB0aGUgdG9wIG9mIHRoZQovLy8gZGVzdWdhcmVkIHRyZWUuCi8vLwovLy8gVGhpcyBtZWFucyB0aGF0IGluIHNvbWUgY2FzZXMgbXVsdGlwbGUgc2hhZG93IGNsYXNzZXMgbWF5IGV4dGVuZCB0aGUgc2FtZQovLy8ga2VybmVsIGNsYXNzLCBiZWNhdXNlIG11bHRpcGxlIGNvbnN0cnVjdHMgaW4gRGFydCBtYXkgZGVzdWdhciB0byBhIHRyZWUKLy8vIHdpdGggdGhlIHNhbWUga2luZCBvZiByb290IG5vZGUuCgppbXBvcnQgJ2RhcnQ6Y29yZScgaGlkZSBNYXBFbnRyeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGtlcm5lbCBzaG93IEV4cHJlc3Npb24sIEluaXRpYWxpemVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCc7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBzaG93IFN1YnN0aXR1dGlvbjsKCmltcG9ydCAnLi4vLi4vYmFzZS9pbnN0cnVtZW50YXRpb24uZGFydCcKICAgIHNob3cKICAgICAgICBJbnN0cnVtZW50YXRpb24sCiAgICAgICAgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JNZW1iZXIsCiAgICAgICAgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlLAogICAgICAgIEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZUFyZ3M7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgbWVzc2FnZUNhbnREaXNhbWJpZ3VhdGVBbWJpZ3VvdXNJbmZvcm1hdGlvbiwKICAgICAgICBtZXNzYWdlQ2FudERpc2FtYmlndWF0ZU5vdEVub3VnaEluZm9ybWF0aW9uLAogICAgICAgIG1lc3NhZ2VOb25OdWxsQXdhcmVTcHJlYWRJc051bGwsCiAgICAgICAgbWVzc2FnZVN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlQ2F1c2UsCiAgICAgICAgbWVzc2FnZVZvaWRFeHByZXNzaW9uLAogICAgICAgIG5vTGVuZ3RoLAogICAgICAgIHRlbXBsYXRlQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHksCiAgICAgICAgdGVtcGxhdGVGb3JJbkxvb3BFbGVtZW50VHlwZU5vdEFzc2lnbmFibGUsCiAgICAgICAgdGVtcGxhdGVGb3JJbkxvb3BUeXBlTm90SXRlcmFibGUsCiAgICAgICAgdGVtcGxhdGVJbnRlZ2VyTGl0ZXJhbElzT3V0T2ZSYW5nZSwKICAgICAgICB0ZW1wbGF0ZVNwcmVhZEVsZW1lbnRUeXBlTWlzbWF0Y2gsCiAgICAgICAgdGVtcGxhdGVTcHJlYWRNYXBFbnRyeUVsZW1lbnRLZXlUeXBlTWlzbWF0Y2gsCiAgICAgICAgdGVtcGxhdGVTcHJlYWRNYXBFbnRyeUVsZW1lbnRWYWx1ZVR5cGVNaXNtYXRjaCwKICAgICAgICB0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoLAogICAgICAgIHRlbXBsYXRlU3ByZWFkVHlwZU1pc21hdGNoLAogICAgICAgIHRlbXBsYXRlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGUsCiAgICAgICAgdGVtcGxhdGVXZWJMaXRlcmFsQ2Fubm90QmVSZXByZXNlbnRlZEV4YWN0bHk7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgZ2V0RmlsZVVyaSwgdW5oYW5kbGVkLCB1bnN1cHBvcnRlZDsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9jbGFzc19idWlsZGVyLmRhcnQnIHNob3cgU291cmNlQ2xhc3NCdWlsZGVyOwoKaW1wb3J0ICcuLi9zb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS9pbmZlcmVuY2VfaGVscGVyLmRhcnQnIHNob3cgSW5mZXJlbmNlSGVscGVyOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX2luZmVyZW5jZV9lbmdpbmUuZGFydCcKICAgIHNob3cgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5LCBUeXBlSW5mZXJlbmNlRW5naW5lOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX2luZmVycmVyLmRhcnQnCiAgICBzaG93IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQsIFR5cGVJbmZlcnJlciwgVHlwZUluZmVycmVySW1wbDsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9wcm9tb3Rpb24uZGFydCcKICAgIHNob3cgVHlwZVByb21vdGVyLCBUeXBlUHJvbW90ZXJJbXBsLCBUeXBlUHJvbW90aW9uRmFjdCwgVHlwZVByb21vdGlvblNjb3BlOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX3NjaGVtYS5kYXJ0JyBzaG93IFVua25vd25UeXBlOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX3NjaGVtYV9lbGltaW5hdGlvbi5kYXJ0JyBzaG93IGdyZWF0ZXN0Q2xvc3VyZTsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWFfZW52aXJvbm1lbnQuZGFydCcKICAgIHNob3cgVHlwZVNjaGVtYUVudmlyb25tZW50LCBnZXRQb3NpdGlvbmFsUGFyYW1ldGVyVHlwZTsKCmltcG9ydCAnYm9keV9idWlsZGVyLmRhcnQnIHNob3cgY29tYmluZVN0YXRlbWVudHM7CgppbXBvcnQgJ2NvbGxlY3Rpb25zLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ29udHJvbEZsb3dNYXBFbnRyeSwKICAgICAgICBGb3JFbGVtZW50LAogICAgICAgIEZvckluRWxlbWVudCwKICAgICAgICBGb3JJbk1hcEVudHJ5LAogICAgICAgIEZvck1hcEVudHJ5LAogICAgICAgIElmRWxlbWVudCwKICAgICAgICBJZk1hcEVudHJ5LAogICAgICAgIFNwcmVhZEVsZW1lbnQsCiAgICAgICAgU3ByZWFkTWFwRW50cnksCiAgICAgICAgY29udmVydFRvRWxlbWVudDsKCmltcG9ydCAnZXhwcmVzc2lvbl9nZW5lcmF0b3IuZGFydCcgc2hvdyBtYWtlTGV0OwoKaW1wb3J0ICdpbXBsaWNpdF90eXBlX2FyZ3VtZW50LmRhcnQnIHNob3cgSW1wbGljaXRUeXBlQXJndW1lbnQ7CgpwYXJ0ICJpbmZlcmVuY2VfdmlzaXRvci5kYXJ0IjsKcGFydCAiaW5mZXJyZWRfdHlwZV92aXNpdG9yLmRhcnQiOwoKLy8vIENvbXB1dGVzIHRoZSByZXR1cm4gdHlwZSBvZiBhIChwb3NzaWJseSBmYWN0b3J5KSBjb25zdHJ1Y3Rvci4KSW50ZXJmYWNlVHlwZSBjb21wdXRlQ29uc3RydWN0b3JSZXR1cm5UeXBlKE1lbWJlciBjb25zdHJ1Y3RvcikgewogIGlmIChjb25zdHJ1Y3RvciBpcyBDb25zdHJ1Y3RvcikgewogICAgcmV0dXJuIGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzLnRoaXNUeXBlOwogIH0gZWxzZSB7CiAgICByZXR1cm4gY29uc3RydWN0b3IuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICB9Cn0KCkxpc3Q8RGFydFR5cGU+IGdldEV4cGxpY2l0VHlwZUFyZ3VtZW50cyhBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgaWYgKGFyZ3VtZW50cyBpcyBBcmd1bWVudHNKdWRnbWVudCkgewogICAgcmV0dXJuIGFyZ3VtZW50cy5faGFzRXhwbGljaXRUeXBlQXJndW1lbnRzID8gYXJndW1lbnRzLnR5cGVzIDogbnVsbDsKICB9IGVsc2UgewogICAgLy8gVGhpcyBjb2RlIHBhdGggc2hvdWxkIG9ubHkgYmUgdGFrZW4gaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGVyZSBhcmUgbm8KICAgIC8vIHR5cGUgYXJndW1lbnRzIGF0IGFsbCwgZS5nLiBjYWxsaW5nIGEgdXNlci1kZWZpbmFibGUgb3BlcmF0b3IuCiAgICBhc3NlcnQoYXJndW1lbnRzLnR5cGVzLmlzRW1wdHkpOwogICAgcmV0dXJuIG51bGw7CiAgfQp9CgovLy8gSW5mb3JtYXRpb24gYXNzb2NpYXRlZCB3aXRoIGEgY2xhc3MgZHVyaW5nIHR5cGUgaW5mZXJlbmNlLgpjbGFzcyBDbGFzc0luZmVyZW5jZUluZm8gewogIC8vLyBUaGUgYnVpbGRlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBjbGFzcy4KICBmaW5hbCBTb3VyY2VDbGFzc0J1aWxkZXIgYnVpbGRlcjsKCiAgLy8vIFRoZSB2aXNpdG9yIGZvciBkZXRlcm1pbmluZyBpZiBhIGdpdmVuIHR5cGUgbWFrZXMgY292YXJpYW50IHVzZSBvZiBvbmUgb2YKICAvLy8gdGhlIGNsYXNzJ3MgZ2VuZXJpYyBwYXJhbWV0ZXJzLCBhbmQgdGhlcmVmb3JlIHJlcXVpcmVzIGNvdmFyaWFudCBjaGVja3MuCiAgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5IG5lZWRzQ2hlY2tWaXNpdG9yOwoKICAvLy8gR2V0dGVycyBhbmQgbWV0aG9kcyBpbiB0aGUgY2xhc3MncyBBUEkuICBNYXkgaW5jbHVkZSBmb3J3YXJkaW5nIG5vZGVzLgogIGZpbmFsIGdldHRlcnNBbmRNZXRob2RzID0gPE1lbWJlcj5bXTsKCiAgLy8vIFNldHRlcnMgaW4gdGhlIGNsYXNzJ3MgQVBJLiAgTWF5IGluY2x1ZGUgZm9yd2FyZGluZyBub2Rlcy4KICBmaW5hbCBzZXR0ZXJzID0gPE1lbWJlcj5bXTsKCiAgQ2xhc3NJbmZlcmVuY2VJbmZvKHRoaXMuYnVpbGRlcik7Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIHNldCBvZiBpbnZvY2F0aW9uIGFyZ3VtZW50cy4KY2xhc3MgQXJndW1lbnRzSnVkZ21lbnQgZXh0ZW5kcyBBcmd1bWVudHMgewogIGJvb2wgX2hhc0V4cGxpY2l0VHlwZUFyZ3VtZW50czsKCiAgTGlzdDxFeHByZXNzaW9uPiBnZXQgcG9zaXRpb25hbEp1ZGdtZW50cyA9PiBwb3NpdGlvbmFsLmNhc3QoKTsKCiAgQXJndW1lbnRzSnVkZ21lbnQoTGlzdDxFeHByZXNzaW9uPiBwb3NpdGlvbmFsLAogICAgICB7TGlzdDxEYXJ0VHlwZT4gdHlwZXMsIExpc3Q8TmFtZWRFeHByZXNzaW9uPiBuYW1lZH0pCiAgICAgIDogX2hhc0V4cGxpY2l0VHlwZUFyZ3VtZW50cyA9IHR5cGVzICE9IG51bGwgJiYgdHlwZXMuaXNOb3RFbXB0eSwKICAgICAgICBzdXBlcihwb3NpdGlvbmFsLCB0eXBlczogdHlwZXMsIG5hbWVkOiBuYW1lZCk7CgogIHN0YXRpYyB2b2lkIHNldE5vbkluZmVycmFibGVBcmd1bWVudFR5cGVzKAogICAgICBBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHMsIExpc3Q8RGFydFR5cGU+IHR5cGVzKSB7CiAgICBhcmd1bWVudHMudHlwZXMuY2xlYXIoKTsKICAgIGFyZ3VtZW50cy50eXBlcy5hZGRBbGwodHlwZXMpOwogICAgYXJndW1lbnRzLl9oYXNFeHBsaWNpdFR5cGVBcmd1bWVudHMgPSB0cnVlOwogIH0KCiAgc3RhdGljIHZvaWQgcmVtb3ZlTm9uSW5mZXJyYWJsZUFyZ3VtZW50VHlwZXMoQXJndW1lbnRzSnVkZ21lbnQgYXJndW1lbnRzKSB7CiAgICBhcmd1bWVudHMudHlwZXMuY2xlYXIoKTsKICAgIGFyZ3VtZW50cy5faGFzRXhwbGljaXRUeXBlQXJndW1lbnRzID0gZmFsc2U7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYW4gYXNzZXJ0IGluaXRpYWxpemVyIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBBc3NlcnRJbml0aWFsaXplckp1ZGdtZW50IGV4dGVuZHMgQXNzZXJ0SW5pdGlhbGl6ZXIKICAgIGltcGxlbWVudHMgSW5pdGlhbGl6ZXJKdWRnbWVudCB7CiAgQXNzZXJ0SW5pdGlhbGl6ZXJKdWRnbWVudChBc3NlcnRTdGF0ZW1lbnQgc3RhdGVtZW50KSA6IHN1cGVyKHN0YXRlbWVudCk7CgogIEFzc2VydFN0YXRlbWVudEp1ZGdtZW50IGdldCBqdWRnbWVudCA9PiBzdGF0ZW1lbnQ7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRBc3NlcnRJbml0aWFsaXplckp1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGFzc2VydGlvbiBzdGF0ZW1lbnQgaW4ga2VybmVsIGZvcm0uCmNsYXNzIEFzc2VydFN0YXRlbWVudEp1ZGdtZW50IGV4dGVuZHMgQXNzZXJ0U3RhdGVtZW50CiAgICBpbXBsZW1lbnRzIFN0YXRlbWVudEp1ZGdtZW50IHsKICBBc3NlcnRTdGF0ZW1lbnRKdWRnbWVudChFeHByZXNzaW9uIGNvbmRpdGlvbiwKICAgICAge0V4cHJlc3Npb24gbWVzc2FnZSwgaW50IGNvbmRpdGlvblN0YXJ0T2Zmc2V0LCBpbnQgY29uZGl0aW9uRW5kT2Zmc2V0fSkKICAgICAgOiBzdXBlcihjb25kaXRpb24sCiAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UsCiAgICAgICAgICAgIGNvbmRpdGlvblN0YXJ0T2Zmc2V0OiBjb25kaXRpb25TdGFydE9mZnNldCwKICAgICAgICAgICAgY29uZGl0aW9uRW5kT2Zmc2V0OiBjb25kaXRpb25FbmRPZmZzZXQpOwoKICBFeHByZXNzaW9uIGdldCBjb25kaXRpb25KdWRnbWVudCA9PiBjb25kaXRpb247CgogIEV4cHJlc3Npb24gZ2V0IG1lc3NhZ2VKdWRnbWVudCA9PiBtZXNzYWdlOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0QXNzZXJ0U3RhdGVtZW50SnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSBzdGF0ZW1lbnQgYmxvY2sgaW4ga2VybmVsIGZvcm0uCmNsYXNzIEJsb2NrSnVkZ21lbnQgZXh0ZW5kcyBCbG9jayBpbXBsZW1lbnRzIFN0YXRlbWVudEp1ZGdtZW50IHsKICBCbG9ja0p1ZGdtZW50KExpc3Q8U3RhdGVtZW50PiBzdGF0ZW1lbnRzKSA6IHN1cGVyKHN0YXRlbWVudHMpOwoKICBMaXN0PFN0YXRlbWVudD4gZ2V0IGp1ZGdtZW50cyA9PiBzdGF0ZW1lbnRzOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0QmxvY2tKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIGNhc2NhZGUgZXhwcmVzc2lvbi4KLy8vCi8vLyBBIGNhc2NhZGUgZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgYS4uYigpLi5jKClgIGlzIHJlcHJlc2VudGVkIGFzIHRoZSBrZXJuZWwKLy8vIGV4cHJlc3Npb246Ci8vLwovLy8gICAgIGxldCB2ID0gYSBpbgovLy8gICAgICAgICBsZXQgXyA9IHYuYigpIGluCi8vLyAgICAgICAgICAgICBsZXQgXyA9IHYuYygpIGluCi8vLyAgICAgICAgICAgICAgICAgdgovLy8KLy8vIEluIHRoZSBkb2N1bWVudGF0aW9uIHRoYXQgZm9sbG93cywgYHZgIGlzIHJlZmVycmVkIHRvIGFzIHRoZSAiY2FzY2FkZQovLy8gdmFyaWFibGUiLS10aGlzIGlzIHRoZSB2YXJpYWJsZSB0aGF0IHJlbWVtYmVycyB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24KLy8vIHByZWNlZGluZyB0aGUgZmlyc3QgYC4uYCB3aGlsZSB0aGUgY2FzY2FkZXMgYXJlIGJlaW5nIGV2YWx1YXRlZC4KLy8vCi8vLyBBZnRlciBjb25zdHJ1Y3RpbmcgYSBbQ2FzY2FkZUp1ZGdtZW50XSwgdGhlIGNhbGxlciBzaG91bGQKLy8vIGNhbGwgW2ZpbmFsaXplXSB3aXRoIGFuIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSBleHByZXNzaW9uIGFmdGVyIHRoZQovLy8gYC4uYC4gIElmIGEgZnVydGhlciBgLi5gIGZvbGxvd3MgdGhhdCBleHByZXNzaW9uLCB0aGUgY2FsbGVyIHNob3VsZCBjYWxsCi8vLyBbZXh0ZW5kXSBmb2xsb3dlZCBieSBbZmluYWxpemVdIGZvciBlYWNoIHN1YnNlcXVlbnQgY2FzY2FkZS4KY2xhc3MgQ2FzY2FkZUp1ZGdtZW50IGV4dGVuZHMgTGV0IGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIC8vLyBQb2ludGVyIHRvIHRoZSBsYXN0ICJsZXQiIGV4cHJlc3Npb24gaW4gdGhlIGNhc2NhZGUuCiAgTGV0IG5leHRDYXNjYWRlOwoKICAvLy8gQ3JlYXRlcyBhIFtDYXNjYWRlSnVkZ21lbnRdIHVzaW5nIFt2YXJpYWJsZV0gYXMgdGhlIGNhc2NhZGUKICAvLy8gdmFyaWFibGUuICBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgW3ZhcmlhYmxlXSdzCiAgLy8vIGluaXRpYWxpemVyIGlzIHRoZSBleHByZXNzaW9uIHByZWNlZGluZyB0aGUgZmlyc3QgYC4uYCBvZiB0aGUgY2FzY2FkZQogIC8vLyBleHByZXNzaW9uLgogIENhc2NhZGVKdWRnbWVudChWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQgdmFyaWFibGUpCiAgICAgIDogc3VwZXIoCiAgICAgICAgICAgIHZhcmlhYmxlLAogICAgICAgICAgICBtYWtlTGV0KG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKG5ldyBfVW5maW5pc2hlZENhc2NhZGUoKSksCiAgICAgICAgICAgICAgICBuZXcgVmFyaWFibGVHZXQodmFyaWFibGUpKSkgewogICAgbmV4dENhc2NhZGUgPSBib2R5OwogIH0KCiAgRXhwcmVzc2lvbiBnZXQgdGFyZ2V0SnVkZ21lbnQgPT4gdmFyaWFibGUuaW5pdGlhbGl6ZXI7CgogIEl0ZXJhYmxlPEV4cHJlc3Npb24+IGdldCBjYXNjYWRlSnVkZ21lbnRzIHN5bmMqIHsKICAgIExldCBzZWN0aW9uID0gYm9keTsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIHlpZWxkIHNlY3Rpb24udmFyaWFibGUuaW5pdGlhbGl6ZXI7CiAgICAgIGlmIChzZWN0aW9uLmJvZHkgaXMhIExldCkgYnJlYWs7CiAgICAgIHNlY3Rpb24gPSBzZWN0aW9uLmJvZHk7CiAgICB9CiAgfQoKICAvLy8gQWRkcyBhIG5ldyB1bmZpbmFsaXplZCBzZWN0aW9uIHRvIHRoZSBlbmQgb2YgdGhlIGNhc2NhZGUuICBTaG91bGQgYmUKICAvLy8gY2FsbGVkIGFmdGVyIHRoZSBwcmV2aW91cyBjYXNjYWRlIHNlY3Rpb24gaGFzIGJlZW4gZmluYWxpemVkLgogIHZvaWQgZXh0ZW5kKCkgewogICAgYXNzZXJ0KG5leHRDYXNjYWRlLnZhcmlhYmxlLmluaXRpYWxpemVyIGlzISBfVW5maW5pc2hlZENhc2NhZGUpOwogICAgTGV0IG5ld0Nhc2NhZGUgPSBtYWtlTGV0KAogICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKG5ldyBfVW5maW5pc2hlZENhc2NhZGUoKSksCiAgICAgICAgbmV4dENhc2NhZGUuYm9keSk7CiAgICBuZXh0Q2FzY2FkZS5ib2R5ID0gbmV3Q2FzY2FkZTsKICAgIG5ld0Nhc2NhZGUucGFyZW50ID0gbmV4dENhc2NhZGU7CiAgICBuZXh0Q2FzY2FkZSA9IG5ld0Nhc2NhZGU7CiAgfQoKICAvLy8gRmluYWxpemVzIHRoZSBsYXN0IGNhc2NhZGUgc2VjdGlvbiB3aXRoIHRoZSBnaXZlbiBbZXhwcmVzc2lvbl0uCiAgdm9pZCBmaW5hbGl6ZShFeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgIGFzc2VydChuZXh0Q2FzY2FkZS52YXJpYWJsZS5pbml0aWFsaXplciBpcyBfVW5maW5pc2hlZENhc2NhZGUpOwogICAgbmV4dENhc2NhZGUudmFyaWFibGUuaW5pdGlhbGl6ZXIgPSBleHByZXNzaW9uOwogICAgZXhwcmVzc2lvbi5wYXJlbnQgPSBuZXh0Q2FzY2FkZS52YXJpYWJsZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q2FzY2FkZUp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBBYnN0cmFjdCBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIGNvbXBsZXggYXNzaWdubWVudCBpbiBrZXJuZWwgZm9ybS4KLy8vCi8vLyBTaW5jZSB0aGVyZSBhcmUgbWFueSBmb3JtcyBhIGNvbXBsZXggYXNzaWdubWVudCBtaWdodCBoYXZlIGJlZW4gZGVzdWdhcmVkCi8vLyB0bywgdGhpcyBjbGFzcyB3cmFwcyB0aGUgZGVzdWdhcmVkIGFzc2lnbm1lbnQgcmF0aGVyIHRoYW4gZXh0ZW5kaW5nIGl0LgovLy8KLy8vIFRPRE8ocGF1bGJlcnJ5KTogb25jZSB3ZSBrbm93IGV4YWN0bHkgd2hhdCBjb25zdGl0dXRlcyBhICJjb21wbGV4Ci8vLyBhc3NpZ25tZW50IiwgZG9jdW1lbnQgaXQgaGVyZS4KYWJzdHJhY3QgY2xhc3MgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBleHRlbmRzIFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCB7CiAgLy8vIEluIGEgY29tcG91bmQgYXNzaWdubWVudCwgdGhlIGV4cHJlc3Npb24gdGhhdCByZWFkcyB0aGUgb2xkIHZhbHVlLCBvcgogIC8vLyBgbnVsbGAgaWYgdGhpcyBpcyBub3QgYSBjb21wb3VuZCBhc3NpZ25tZW50LgogIEV4cHJlc3Npb24gcmVhZDsKCiAgLy8vIFRoZSBleHByZXNzaW9uIGFwcGVhcmluZyBvbiB0aGUgUkhTIG9mIHRoZSBhc3NpZ25tZW50LgogIGZpbmFsIEV4cHJlc3Npb24gcmhzOwoKICAvLy8gVGhlIGV4cHJlc3Npb24gdGhhdCBwZXJmb3JtcyB0aGUgd3JpdGUgKGUuZy4gYGEuW109KGIsIGEuW10oYikgKyAxKWAgaW4KICAvLy8gYCsrYVtiXWApLgogIEV4cHJlc3Npb24gd3JpdGU7CgogIC8vLyBJbiBhIGNvbXBvdW5kIGFzc2lnbm1lbnQgd2l0aG91dCBzaG9ydGN1dCBzZW1hbnRpY3MsIHRoZSBleHByZXNzaW9uIHRoYXQKICAvLy8gY29tYmluZXMgdGhlIG9sZCBhbmQgbmV3IHZhbHVlcywgb3IgYG51bGxgIGlmIHRoaXMgaXMgbm90IGEgY29tcG91bmQKICAvLy8gYXNzaWdubWVudC4KICAvLy8KICAvLy8gTm90ZSB0aGF0IGluIGEgY29tcG91bmQgYXNzaWdubWVudCB3aXRoIHNob3J0Y3V0IHNlbWFudGljcywgdGhpcyBpcyBub3QKICAvLy8gdXNlZDsgW251bGxBd2FyZUNvbWJpbmVyXSBpcyB1c2VkIGluc3RlYWQuCiAgTWV0aG9kSW52b2NhdGlvbiBjb21iaW5lcjsKCiAgLy8vIEluIGEgY29tcG91bmQgYXNzaWdubWVudCB3aXRoIHNob3J0Y3V0IHNlbWFudGljcywgdGhlIGNvbmRpdGlvbmFsCiAgLy8vIGV4cHJlc3Npb24gdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGFzc2lnbm1lbnQgb2NjdXJzLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgaW4gYSBjb21wb3VuZCBhc3NpZ25tZW50IHdpdGhvdXQgc2hvcnRjdXQgc2VtYW50aWNzLCB0aGlzIGlzIG5vdAogIC8vLyB1c2VkOyBbY29tYmluZXJdIGlzIHVzZWQgaW5zdGVhZC4KICBDb25kaXRpb25hbEV4cHJlc3Npb24gbnVsbEF3YXJlQ29tYmluZXI7CgogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZXhwcmVzc2lvbiBhcm9zZSBmcm9tIGEgcG9zdC1pbmNyZW1lbnQgb3IKICAvLy8gcG9zdC1kZWNyZW1lbnQuCiAgYm9vbCBpc1Bvc3RJbmNEZWMgPSBmYWxzZTsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBleHByZXNzaW9uIGFyb3NlIGZyb20gYSBwcmUtaW5jcmVtZW50IG9yCiAgLy8vIHByZS1kZWNyZW1lbnQuCiAgYm9vbCBpc1ByZUluY0RlYyA9IGZhbHNlOwoKICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50Ll8odGhpcy5yaHMpIDogc3VwZXIuXyhudWxsKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgdmFyIHBhcnRzID0gX2dldFRvU3RyaW5nUGFydHMoKTsKICAgIHJldHVybiAnJHtydW50aW1lVHlwZX0oJHtwYXJ0cy5qb2luKCcsICcpfSknOwogIH0KCiAgTGlzdDxTdHJpbmc+IF9nZXRUb1N0cmluZ1BhcnRzKCkgewogICAgTGlzdDxTdHJpbmc+IHBhcnRzID0gW107CiAgICBpZiAoZGVzdWdhcmVkICE9IG51bGwpIHBhcnRzLmFkZCgnZGVzdWdhcmVkPSRkZXN1Z2FyZWQnKTsKICAgIGlmIChyZWFkICE9IG51bGwpIHBhcnRzLmFkZCgncmVhZD0kcmVhZCcpOwogICAgaWYgKHJocyAhPSBudWxsKSBwYXJ0cy5hZGQoJ3Jocz0kcmhzJyk7CiAgICBpZiAod3JpdGUgIT0gbnVsbCkgcGFydHMuYWRkKCd3cml0ZT0kd3JpdGUnKTsKICAgIGlmIChjb21iaW5lciAhPSBudWxsKSBwYXJ0cy5hZGQoJ2NvbWJpbmVyPSRjb21iaW5lcicpOwogICAgaWYgKG51bGxBd2FyZUNvbWJpbmVyICE9IG51bGwpIHsKICAgICAgcGFydHMuYWRkKCdudWxsQXdhcmVDb21iaW5lcj0kbnVsbEF3YXJlQ29tYmluZXInKTsKICAgIH0KICAgIGlmIChpc1Bvc3RJbmNEZWMpIHBhcnRzLmFkZCgnaXNQb3N0SW5jRGVjPXRydWUnKTsKICAgIGlmIChpc1ByZUluY0RlYykgcGFydHMuYWRkKCdpc1ByZUluY0RlYz10cnVlJyk7CiAgICByZXR1cm4gcGFydHM7CiAgfQoKICBfQ29tcGxleEFzc2lnbm1lbnRJbmZlcmVuY2VSZXN1bHQgX2luZmVyUmhzKAogICAgICBTaGFkb3dUeXBlSW5mZXJyZXIgaW5mZXJyZXIsIERhcnRUeXBlIHJlYWRUeXBlLCBEYXJ0VHlwZSB3cml0ZUNvbnRleHQpIHsKICAgIGFzc2VydCh3cml0ZUNvbnRleHQgIT0gbnVsbCk7CiAgICBpZiAocmVhZFR5cGUgaXMgVm9pZFR5cGUgJiYKICAgICAgICAoY29tYmluZXIgIT0gbnVsbCB8fCBudWxsQXdhcmVDb21iaW5lciAhPSBudWxsKSkgewogICAgICBpbmZlcnJlci5oZWxwZXIKICAgICAgICAgID8uYWRkUHJvYmxlbShtZXNzYWdlVm9pZEV4cHJlc3Npb24sIHJlYWQuZmlsZU9mZnNldCwgbm9MZW5ndGgpOwogICAgfQogICAgdmFyIHdyaXRlT2Zmc2V0ID0gd3JpdGUgPT0gbnVsbCA/IC0xIDogd3JpdGUuZmlsZU9mZnNldDsKICAgIFByb2NlZHVyZSBjb21iaW5lck1lbWJlcjsKICAgIERhcnRUeXBlIGNvbWJpbmVkVHlwZTsKICAgIGlmIChjb21iaW5lciAhPSBudWxsKSB7CiAgICAgIGJvb2wgaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yID0gZmFsc2U7CiAgICAgIGNvbWJpbmVyTWVtYmVyID0gaW5mZXJyZXIuZmluZE1ldGhvZEludm9jYXRpb25NZW1iZXIocmVhZFR5cGUsIGNvbWJpbmVyLAogICAgICAgICAgaW5zdHJ1bWVudGVkOiBmYWxzZSk7CiAgICAgIGlmIChjb21iaW5lck1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgICBpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3IgPSBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAgICAgLmlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvckFuZFR5cGUoY29tYmluZXJNZW1iZXIsIHJlYWRUeXBlKTsKICAgICAgfQogICAgICBEYXJ0VHlwZSByaHNUeXBlOwogICAgICB2YXIgY29tYmluZXJUeXBlID0gaW5mZXJyZXIuZ2V0Q2FsbGVlRnVuY3Rpb25UeXBlKAogICAgICAgICAgaW5mZXJyZXIuZ2V0Q2FsbGVlVHlwZShjb21iaW5lck1lbWJlciwgcmVhZFR5cGUpLCBmYWxzZSk7CiAgICAgIGlmIChpc1ByZUluY0RlYyB8fCBpc1Bvc3RJbmNEZWMpIHsKICAgICAgICByaHNUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmludENsYXNzLnJhd1R5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gSXQncyBub3QgbmVjZXNzYXJ5IHRvIGNhbGwgX3N0b3JlTGV0VHlwZSBmb3IgW3Joc10gYmVjYXVzZSB0aGUgUkhTCiAgICAgICAgLy8gaXMgYWx3YXlzIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgY29tYmluZXI7IGl0J3MgbmV2ZXIgc3RvcmVkIGluIGEKICAgICAgICAvLyB0ZW1wb3JhcnkgdmFyaWFibGUgZmlyc3QuCiAgICAgICAgYXNzZXJ0KGlkZW50aWNhbChjb21iaW5lci5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCwgcmhzKSk7CiAgICAgICAgLy8gQW5hbHl6ZXIgdXNlcyBhIG51bGwgY29udGV4dCBmb3IgdGhlIFJIUyBoZXJlLgogICAgICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogaW1wcm92ZSBvbiB0aGlzLgogICAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihyaHMsIGNvbnN0IFVua25vd25UeXBlKCksIHRydWUpOwogICAgICAgIHJoc1R5cGUgPSBnZXRJbmZlcnJlZFR5cGUocmhzLCBpbmZlcnJlcik7CiAgICAgICAgLy8gRG8gbm90IHVzZSByaHMgYWZ0ZXIgdGhpcyBwb2ludCBiZWNhdXNlIGl0IG1heSBiZSBhIFNoYWRvdyBub2RlCiAgICAgICAgLy8gdGhhdCBoYXMgYmVlbiByZXBsYWNlZCBpbiB0aGUgdHJlZSB3aXRoIGl0cyBkZXN1Z2FyaW5nLgogICAgICAgIHZhciBleHBlY3RlZFR5cGUgPSBnZXRQb3NpdGlvbmFsUGFyYW1ldGVyVHlwZShjb21iaW5lclR5cGUsIDApOwogICAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoZXhwZWN0ZWRUeXBlLCByaHNUeXBlLAogICAgICAgICAgICBjb21iaW5lci5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdCwgY29tYmluZXIuZmlsZU9mZnNldCk7CiAgICAgIH0KICAgICAgaWYgKGlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvcikgewogICAgICAgIGNvbWJpbmVkVHlwZSA9IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgICAuZ2V0VHlwZU9mT3ZlcmxvYWRlZEFyaXRobWV0aWMocmVhZFR5cGUsIHJoc1R5cGUpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbWJpbmVkVHlwZSA9IGNvbWJpbmVyVHlwZS5yZXR1cm5UeXBlOwogICAgICB9CiAgICAgIHZhciBjaGVja0tpbmQgPSBpbmZlcnJlci5wcmVDaGVja0ludm9jYXRpb25Db250cmF2YXJpYW5jZShyZWFkLCByZWFkVHlwZSwKICAgICAgICAgIGNvbWJpbmVyTWVtYmVyLCBjb21iaW5lciwgY29tYmluZXIuYXJndW1lbnRzLCBjb21iaW5lcik7CiAgICAgIHZhciByZXBsYWNlZENvbWJpbmVyID0gaW5mZXJyZXIuaGFuZGxlSW52b2NhdGlvbkNvbnRyYXZhcmlhbmNlKAogICAgICAgICAgY2hlY2tLaW5kLAogICAgICAgICAgY29tYmluZXIsCiAgICAgICAgICBjb21iaW5lci5hcmd1bWVudHMsCiAgICAgICAgICBjb21iaW5lciwKICAgICAgICAgIGNvbWJpbmVkVHlwZSwKICAgICAgICAgIGNvbWJpbmVyVHlwZSwKICAgICAgICAgIGNvbWJpbmVyLmZpbGVPZmZzZXQpOwogICAgICB2YXIgcmVwbGFjZWRDb21iaW5lcjIgPSBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgICAgd3JpdGVDb250ZXh0LCBjb21iaW5lZFR5cGUsIHJlcGxhY2VkQ29tYmluZXIsIHdyaXRlT2Zmc2V0KTsKICAgICAgaWYgKHJlcGxhY2VkQ29tYmluZXIyICE9IG51bGwpIHsKICAgICAgICByZXBsYWNlZENvbWJpbmVyID0gcmVwbGFjZWRDb21iaW5lcjI7CiAgICAgIH0KICAgICAgX3N0b3JlTGV0VHlwZShpbmZlcnJlciwgcmVwbGFjZWRDb21iaW5lciwgY29tYmluZWRUeXBlKTsKICAgIH0gZWxzZSB7CiAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihyaHMsIHdyaXRlQ29udGV4dCA/PyBjb25zdCBVbmtub3duVHlwZSgpLCB0cnVlLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgIHZhciByaHNUeXBlID0gZ2V0SW5mZXJyZWRUeXBlKHJocywgaW5mZXJyZXIpOwogICAgICB2YXIgcmVwbGFjZWRSaHMgPSBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgICAgd3JpdGVDb250ZXh0LCByaHNUeXBlLCByaHMsIHdyaXRlT2Zmc2V0LAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogd3JpdGVDb250ZXh0IGlzIFZvaWRUeXBlKTsKICAgICAgX3N0b3JlTGV0VHlwZShpbmZlcnJlciwgcmVwbGFjZWRSaHMgPz8gcmhzLCByaHNUeXBlKTsKICAgICAgaWYgKG51bGxBd2FyZUNvbWJpbmVyICE9IG51bGwpIHsKICAgICAgICBNZXRob2RJbnZvY2F0aW9uIGVxdWFsc0ludm9jYXRpb24gPSBudWxsQXdhcmVDb21iaW5lci5jb25kaXRpb247CiAgICAgICAgaW5mZXJyZXIuZmluZE1ldGhvZEludm9jYXRpb25NZW1iZXIoCiAgICAgICAgICAgIGdyZWF0ZXN0Q2xvc3VyZShpbmZlcnJlci5jb3JlVHlwZXMsIHdyaXRlQ29udGV4dCksIGVxdWFsc0ludm9jYXRpb24sCiAgICAgICAgICAgIGluc3RydW1lbnRlZDogZmFsc2UpOwogICAgICAgIC8vIE5vdGU6IHRoZSBjYXNlIG9mIHJlYWRUeXBlPW51bGwgb25seSBoYXBwZW5zIGZvciBlcnJvbmVvdXMgY29kZS4KICAgICAgICBjb21iaW5lZFR5cGUgPSByZWFkVHlwZSA9PSBudWxsCiAgICAgICAgICAgID8gcmhzVHlwZQogICAgICAgICAgICA6IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgICAgICAgLmdldFN0YW5kYXJkVXBwZXJCb3VuZChyZWFkVHlwZSwgcmhzVHlwZSk7CiAgICAgICAgbnVsbEF3YXJlQ29tYmluZXIuc3RhdGljVHlwZSA9IGNvbWJpbmVkVHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb21iaW5lZFR5cGUgPSByaHNUeXBlOwogICAgICB9CiAgICB9CiAgICBpZiAodGhpcyBpcyBJbmRleEFzc2lnbm1lbnRKdWRnbWVudCkgewogICAgICBfc3RvcmVMZXRUeXBlKGluZmVycmVyLCB3cml0ZSwgY29uc3QgVm9pZFR5cGUoKSk7CiAgICB9IGVsc2UgewogICAgICBfc3RvcmVMZXRUeXBlKGluZmVycmVyLCB3cml0ZSwgY29tYmluZWRUeXBlKTsKICAgIH0KICAgIGluZmVycmVkVHlwZSA9CiAgICAgICAgaXNQb3N0SW5jRGVjID8gKHJlYWRUeXBlID8/IGNvbnN0IER5bmFtaWNUeXBlKCkpIDogY29tYmluZWRUeXBlOwogICAgcmV0dXJuIG5ldyBfQ29tcGxleEFzc2lnbm1lbnRJbmZlcmVuY2VSZXN1bHQoY29tYmluZXJNZW1iZXIpOwogIH0KfQoKLy8vIEFic3RyYWN0IHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgY29tcGxleCBhc3NpZ25tZW50IGludm9sdmluZyBhCi8vLyByZWNlaXZlci4KYWJzdHJhY3QgY2xhc3MgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudFdpdGhSZWNlaXZlcgogICAgZXh0ZW5kcyBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHsKICAvLy8gVGhlIHJlY2VpdmVyIG9mIHRoZSBhc3NpZ25tZW50IHRhcmdldCAoZS5nLiBgYWAgaW4gYGFbYl0gPSBjYCkuCiAgZmluYWwgRXhwcmVzc2lvbiByZWNlaXZlcjsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgYXNzaWdubWVudCB1c2VzIGBzdXBlcmAuCiAgZmluYWwgYm9vbCBpc1N1cGVyOwoKICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50V2l0aFJlY2VpdmVyLl8oCiAgICAgIHRoaXMucmVjZWl2ZXIsIEV4cHJlc3Npb24gcmhzLCB0aGlzLmlzU3VwZXIpCiAgICAgIDogc3VwZXIuXyhyaHMpOwoKICBAb3ZlcnJpZGUKICBMaXN0PFN0cmluZz4gX2dldFRvU3RyaW5nUGFydHMoKSB7CiAgICB2YXIgcGFydHMgPSBzdXBlci5fZ2V0VG9TdHJpbmdQYXJ0cygpOwogICAgaWYgKHJlY2VpdmVyICE9IG51bGwpIHBhcnRzLmFkZCgncmVjZWl2ZXI9JHJlY2VpdmVyJyk7CiAgICBpZiAoaXNTdXBlcikgcGFydHMuYWRkKCdpc1N1cGVyPXRydWUnKTsKICAgIHJldHVybiBwYXJ0czsKICB9CgogIERhcnRUeXBlIF9pbmZlclJlY2VpdmVyKFNoYWRvd1R5cGVJbmZlcnJlciBpbmZlcnJlcikgewogICAgaWYgKHJlY2VpdmVyICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKHJlY2VpdmVyLCBjb25zdCBVbmtub3duVHlwZSgpLCB0cnVlKTsKICAgICAgdmFyIHJlY2VpdmVyVHlwZSA9IGdldEluZmVycmVkVHlwZShyZWNlaXZlciwgaW5mZXJyZXIpOwogICAgICBfc3RvcmVMZXRUeXBlKGluZmVycmVyLCByZWNlaXZlciwgcmVjZWl2ZXJUeXBlKTsKICAgICAgcmV0dXJuIHJlY2VpdmVyVHlwZTsKICAgIH0gZWxzZSBpZiAoaXNTdXBlcikgewogICAgICByZXR1cm4gaW5mZXJyZXIuY2xhc3NIaWVyYXJjaHkuZ2V0VHlwZUFzSW5zdGFuY2VPZigKICAgICAgICAgIGluZmVycmVyLnRoaXNUeXBlLCBpbmZlcnJlci50aGlzVHlwZS5jbGFzc05vZGUuc3VwZXJ0eXBlLmNsYXNzTm9kZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gaW5mZXJyZXIudGhpc1R5cGU7CiAgICB9CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSBjb250aW51ZSBzdGF0ZW1lbnQgZnJvbSBhIHN3aXRjaAovLy8gc3RhdGVtZW50LCBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgQ29udGludWVTd2l0Y2hKdWRnbWVudCBleHRlbmRzIENvbnRpbnVlU3dpdGNoU3RhdGVtZW50CiAgICBpbXBsZW1lbnRzIFN0YXRlbWVudEp1ZGdtZW50IHsKICBDb250aW51ZVN3aXRjaEp1ZGdtZW50KFN3aXRjaENhc2UgdGFyZ2V0KSA6IHN1cGVyKHRhcmdldCk7CgogIFN3aXRjaENhc2VKdWRnbWVudCBnZXQgdGFyZ2V0SnVkZ21lbnQgPT4gdGFyZ2V0OwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q29udGludWVTd2l0Y2hKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBTaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIGRlZmVycmVkIGNoZWNrIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBEZWZlcnJlZENoZWNrSnVkZ21lbnQgZXh0ZW5kcyBMZXQgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgRGVmZXJyZWRDaGVja0p1ZGdtZW50KFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIEV4cHJlc3Npb24gYm9keSkKICAgICAgOiBzdXBlcih2YXJpYWJsZSwgYm9keSk7CgogIEV4cHJlc3Npb24gZ2V0IGp1ZGdtZW50ID0+IGJvZHk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RGVmZXJyZWRDaGVja0p1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIGRvIGxvb3AgaW4ga2VybmVsIGZvcm0uCmNsYXNzIERvSnVkZ21lbnQgZXh0ZW5kcyBEb1N0YXRlbWVudCBpbXBsZW1lbnRzIFN0YXRlbWVudEp1ZGdtZW50IHsKICBEb0p1ZGdtZW50KFN0YXRlbWVudCBib2R5LCBFeHByZXNzaW9uIGNvbmRpdGlvbikgOiBzdXBlcihib2R5LCBjb25kaXRpb24pOwoKICBFeHByZXNzaW9uIGdldCBjb25kaXRpb25KdWRnbWVudCA9PiBjb25kaXRpb247CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXREb0p1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgZG91YmxlIGxpdGVyYWwgaW4ga2VybmVsIGZvcm0uCmNsYXNzIERvdWJsZUp1ZGdtZW50IGV4dGVuZHMgRG91YmxlTGl0ZXJhbCBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBEb3VibGVKdWRnbWVudChkb3VibGUgdmFsdWUpIDogc3VwZXIodmFsdWUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdERvdWJsZUp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb21tb24gYmFzZSBjbGFzcyBmb3Igc2hhZG93IG9iamVjdHMgcmVwcmVzZW50aW5nIGV4cHJlc3Npb25zIGluIGtlcm5lbAovLy8gZm9ybS4KYWJzdHJhY3QgY2xhc3MgRXhwcmVzc2lvbkp1ZGdtZW50IGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICAvLy8gQ2FsbHMgYmFjayB0byBbaW5mZXJyZXJdIHRvIHBlcmZvcm0gdHlwZSBpbmZlcmVuY2UgZm9yIHdoYXRldmVyIGNvbmNyZXRlCiAgLy8vIHR5cGUgb2YgW0V4cHJlc3Npb25dIHRoaXMgaXMuCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCk7Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBlbXB0eSBzdGF0ZW1lbnQgaW4ga2VybmVsIGZvcm0uCmNsYXNzIEVtcHR5U3RhdGVtZW50SnVkZ21lbnQgZXh0ZW5kcyBFbXB0eVN0YXRlbWVudAogICAgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgRW1wdHlTdGF0ZW1lbnRKdWRnbWVudCgpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RW1wdHlTdGF0ZW1lbnRKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBleHByZXNzaW9uIHN0YXRlbWVudCBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50IGV4dGVuZHMgRXhwcmVzc2lvblN0YXRlbWVudAogICAgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50KEV4cHJlc3Npb24gZXhwcmVzc2lvbikgOiBzdXBlcihleHByZXNzaW9uKTsKCiAgRXhwcmVzc2lvbiBnZXQganVkZ21lbnQgPT4gZXhwcmVzc2lvbjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnRKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBTaGFkb3cgb2JqZWN0IGZvciBbU3RhdGljSW52b2NhdGlvbl0gd2hlbiB0aGUgcHJvY2VkdXJlIGJlaW5nIGludm9rZWQgaXMgYQovLy8gZmFjdG9yeSBjb25zdHJ1Y3Rvci4KY2xhc3MgRmFjdG9yeUNvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50IGV4dGVuZHMgU3RhdGljSW52b2NhdGlvbgogICAgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgRmFjdG9yeUNvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50KAogICAgICBQcm9jZWR1cmUgdGFyZ2V0LCBBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHMsCiAgICAgIHtib29sIGlzQ29uc3Q6IGZhbHNlfSkKICAgICAgOiBzdXBlcih0YXJnZXQsIGFyZ3VtZW50cywgaXNDb25zdDogaXNDb25zdCk7CgogIEFyZ3VtZW50c0p1ZGdtZW50IGdldCBhcmd1bWVudEp1ZGdtZW50cyA9PiBhcmd1bWVudHM7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RmFjdG9yeUNvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIGZpZWxkIGluaXRpYWxpemVyIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBTaGFkb3dGaWVsZEluaXRpYWxpemVyIGV4dGVuZHMgRmllbGRJbml0aWFsaXplcgogICAgaW1wbGVtZW50cyBJbml0aWFsaXplckp1ZGdtZW50IHsKICBTaGFkb3dGaWVsZEluaXRpYWxpemVyKEZpZWxkIGZpZWxkLCBFeHByZXNzaW9uIHZhbHVlKSA6IHN1cGVyKGZpZWxkLCB2YWx1ZSk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTaGFkb3dGaWVsZEluaXRpYWxpemVyKHRoaXMpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgY2xhc3NpYyBmb3IgbG9vcCBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgRm9ySnVkZ21lbnQgZXh0ZW5kcyBGb3JTdGF0ZW1lbnQgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgRm9ySnVkZ21lbnQoTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXMsIEV4cHJlc3Npb24gY29uZGl0aW9uLAogICAgICBMaXN0PEV4cHJlc3Npb24+IHVwZGF0ZXMsIFN0YXRlbWVudCBib2R5KQogICAgICA6IHN1cGVyKHZhcmlhYmxlcyA/PyBbXSwgY29uZGl0aW9uLCB1cGRhdGVzLCBib2R5KTsKCiAgRXhwcmVzc2lvbiBnZXQgY29uZGl0aW9uSnVkZ21lbnQgPT4gY29uZGl0aW9uOwoKICBMaXN0PEV4cHJlc3Npb24+IGdldCB1cGRhdGVKdWRnbWVudHMgPT4gdXBkYXRlcy5jYXN0KCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRGb3JKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIGZ1bmN0aW9uIGV4cHJlc3Npb24gaW4ga2VybmVsIGZvcm0uCmNsYXNzIEZ1bmN0aW9uTm9kZUp1ZGdtZW50IGV4dGVuZHMgRnVuY3Rpb25Ob2RlIHsKICBGdW5jdGlvbk5vZGVKdWRnbWVudChTdGF0ZW1lbnQgYm9keSwKICAgICAge0xpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gcG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWRQYXJhbWV0ZXJzLAogICAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgRGFydFR5cGUgcmV0dXJuVHlwZTogY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXI6IEFzeW5jTWFya2VyLlN5bmMsCiAgICAgIEFzeW5jTWFya2VyIGRhcnRBc3luY01hcmtlcn0pCiAgICAgIDogc3VwZXIoYm9keSwKICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnM6IHR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyczogcG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgICAgICAgIG5hbWVkUGFyYW1ldGVyczogbmFtZWRQYXJhbWV0ZXJzLAogICAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiByZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICAgICAgICByZXR1cm5UeXBlOiByZXR1cm5UeXBlLAogICAgICAgICAgICBhc3luY01hcmtlcjogYXN5bmNNYXJrZXIsCiAgICAgICAgICAgIGRhcnRBc3luY01hcmtlcjogZGFydEFzeW5jTWFya2VyKTsKfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgbG9jYWwgZnVuY3Rpb24gZGVjbGFyYXRpb24gaW4ga2VybmVsCi8vLyBmb3JtLgpjbGFzcyBGdW5jdGlvbkRlY2xhcmF0aW9uSnVkZ21lbnQgZXh0ZW5kcyBGdW5jdGlvbkRlY2xhcmF0aW9uCiAgICBpbXBsZW1lbnRzIFN0YXRlbWVudEp1ZGdtZW50IHsKICBib29sIF9oYXNJbXBsaWNpdFJldHVyblR5cGUgPSBmYWxzZTsKCiAgRnVuY3Rpb25EZWNsYXJhdGlvbkp1ZGdtZW50KAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQgdmFyaWFibGUsIEZ1bmN0aW9uTm9kZUp1ZGdtZW50IGZ1bmN0aW9uKQogICAgICA6IHN1cGVyKHZhcmlhYmxlLCBmdW5jdGlvbik7CgogIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCBnZXQgdmFyaWFibGVKdWRnbWVudCA9PiB2YXJpYWJsZTsKCiAgRnVuY3Rpb25Ob2RlSnVkZ21lbnQgZ2V0IGZ1bmN0aW9uSnVkZ21lbnQgPT4gZnVuY3Rpb247CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uSnVkZ21lbnQodGhpcyk7CiAgfQoKICBzdGF0aWMgdm9pZCBzZXRIYXNJbXBsaWNpdFJldHVyblR5cGUoCiAgICAgIEZ1bmN0aW9uRGVjbGFyYXRpb25KdWRnbWVudCBkZWNsYXJhdGlvbiwgYm9vbCBoYXNJbXBsaWNpdFJldHVyblR5cGUpIHsKICAgIGRlY2xhcmF0aW9uLl9oYXNJbXBsaWNpdFJldHVyblR5cGUgPSBoYXNJbXBsaWNpdFJldHVyblR5cGU7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSBzdXBlciBpbml0aWFsaXplciBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgSW52YWxpZFN1cGVySW5pdGlhbGl6ZXJKdWRnbWVudCBleHRlbmRzIExvY2FsSW5pdGlhbGl6ZXIKICAgIGltcGxlbWVudHMgSW5pdGlhbGl6ZXJKdWRnbWVudCB7CiAgZmluYWwgQ29uc3RydWN0b3IgdGFyZ2V0OwogIGZpbmFsIEFyZ3VtZW50c0p1ZGdtZW50IGFyZ3VtZW50c0p1ZGdtZW50OwoKICBJbnZhbGlkU3VwZXJJbml0aWFsaXplckp1ZGdtZW50KAogICAgICB0aGlzLnRhcmdldCwgdGhpcy5hcmd1bWVudHNKdWRnbWVudCwgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSkKICAgICAgOiBzdXBlcih2YXJpYWJsZSk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRJbnZhbGlkU3VwZXJJbml0aWFsaXplckp1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGlmLW51bGwgZXhwcmVzc2lvbi4KLy8vCi8vLyBBbiBpZi1udWxsIGV4cHJlc3Npb24gb2YgdGhlIGZvcm0gYGEgPz8gYmAgaXMgcmVwcmVzZW50ZWQgYXMgdGhlIGtlcm5lbAovLy8gZXhwcmVzc2lvbjoKLy8vCi8vLyAgICAgbGV0IHYgPSBhIGluIHYgPT0gbnVsbCA/IGIgOiB2CmNsYXNzIElmTnVsbEp1ZGdtZW50IGV4dGVuZHMgTGV0IGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIElmTnVsbEp1ZGdtZW50KFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIEV4cHJlc3Npb24gYm9keSkKICAgICAgOiBzdXBlcih2YXJpYWJsZSwgYm9keSk7CgogIEBvdmVycmlkZQogIENvbmRpdGlvbmFsRXhwcmVzc2lvbiBnZXQgYm9keSA9PiBzdXBlci5ib2R5OwoKICAvLy8gUmV0dXJucyB0aGUgZXhwcmVzc2lvbiB0byB0aGUgbGVmdCBvZiBgPz9gLgogIEV4cHJlc3Npb24gZ2V0IGxlZnRKdWRnbWVudCA9PiB2YXJpYWJsZS5pbml0aWFsaXplcjsKCiAgLy8vIFJldHVybnMgdGhlIGV4cHJlc3Npb24gdG8gdGhlIHJpZ2h0IG9mIGA/P2AuCiAgRXhwcmVzc2lvbiBnZXQgcmlnaHRKdWRnbWVudCA9PiBib2R5LnRoZW47CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0SWZOdWxsSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGlmIHN0YXRlbWVudCBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgSWZKdWRnbWVudCBleHRlbmRzIElmU3RhdGVtZW50IGltcGxlbWVudHMgU3RhdGVtZW50SnVkZ21lbnQgewogIElmSnVkZ21lbnQoRXhwcmVzc2lvbiBjb25kaXRpb24sIFN0YXRlbWVudCB0aGVuLCBTdGF0ZW1lbnQgb3RoZXJ3aXNlKQogICAgICA6IHN1cGVyKGNvbmRpdGlvbiwgdGhlbiwgb3RoZXJ3aXNlKTsKCiAgRXhwcmVzc2lvbiBnZXQgY29uZGl0aW9uSnVkZ21lbnQgPT4gY29uZGl0aW9uOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0SWZKdWRnbWVudCh0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBhc3NpZ25tZW50IHRvIGEgdGFyZ2V0IGZvciB3aGljaAovLy8gYXNzaWdubWVudCBpcyBub3QgYWxsb3dlZC4KY2xhc3MgSWxsZWdhbEFzc2lnbm1lbnRKdWRnbWVudCBleHRlbmRzIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgewogIC8vLyBUaGUgb2Zmc2V0IGF0IHdoaWNoIHRoZSBpbnZhbGlkIGFzc2lnbm1lbnQgc2hvdWxkIGJlIHN0b3JlZC4KICAvLy8gSWYgYC0xYCwgdGhlbiB0aGVyZSBpcyBubyBzZXBhcmF0ZSBsb2NhdGlvbiBmb3IgaW52YWxpZCBhc3NpZ25tZW50LgogIGZpbmFsIGludCBhc3NpZ25tZW50T2Zmc2V0OwoKICBJbGxlZ2FsQXNzaWdubWVudEp1ZGdtZW50Ll8oRXhwcmVzc2lvbiByaHMsIHt0aGlzLmFzc2lnbm1lbnRPZmZzZXQ6IC0xfSkKICAgICAgOiBzdXBlci5fKHJocykgewogICAgcmhzLnBhcmVudCA9IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdElsbGVnYWxBc3NpZ25tZW50SnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGFzc2lnbm1lbnQgdG8gYSB0YXJnZXQgb2YgdGhlIGZvcm0KLy8vIGBhW2JdYC4KY2xhc3MgSW5kZXhBc3NpZ25tZW50SnVkZ21lbnQgZXh0ZW5kcyBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50V2l0aFJlY2VpdmVyIHsKICAvLy8gSW4gYW4gYXNzaWdubWVudCB0byBhbiBpbmRleCBleHByZXNzaW9uLCB0aGUgaW5kZXggZXhwcmVzc2lvbi4KICBmaW5hbCBFeHByZXNzaW9uIGluZGV4OwoKICBJbmRleEFzc2lnbm1lbnRKdWRnbWVudC5fKEV4cHJlc3Npb24gcmVjZWl2ZXIsIHRoaXMuaW5kZXgsIEV4cHJlc3Npb24gcmhzLAogICAgICB7Ym9vbCBpc1N1cGVyOiBmYWxzZX0pCiAgICAgIDogc3VwZXIuXyhyZWNlaXZlciwgcmhzLCBpc1N1cGVyKTsKCiAgQXJndW1lbnRzIF9nZXRJbnZvY2F0aW9uQXJndW1lbnRzKAogICAgICBTaGFkb3dUeXBlSW5mZXJyZXIgaW5mZXJyZXIsIEV4cHJlc3Npb24gaW52b2NhdGlvbikgewogICAgaWYgKGludm9jYXRpb24gaXMgTWV0aG9kSW52b2NhdGlvbikgewogICAgICByZXR1cm4gaW52b2NhdGlvbi5hcmd1bWVudHM7CiAgICB9IGVsc2UgaWYgKGludm9jYXRpb24gaXMgU3VwZXJNZXRob2RJbnZvY2F0aW9uKSB7CiAgICAgIHJldHVybiBpbnZvY2F0aW9uLmFyZ3VtZW50czsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IHVuaGFuZGxlZCgiJHtpbnZvY2F0aW9uLnJ1bnRpbWVUeXBlfSIsICJfZ2V0SW52b2NhdGlvbkFyZ3VtZW50cyIsCiAgICAgICAgICBmaWxlT2Zmc2V0LCBpbmZlcnJlci51cmkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxTdHJpbmc+IF9nZXRUb1N0cmluZ1BhcnRzKCkgewogICAgdmFyIHBhcnRzID0gc3VwZXIuX2dldFRvU3RyaW5nUGFydHMoKTsKICAgIGlmIChpbmRleCAhPSBudWxsKSBwYXJ0cy5hZGQoJ2luZGV4PSRpbmRleCcpOwogICAgcmV0dXJuIHBhcnRzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRJbmRleEFzc2lnbm1lbnRKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29tbW9uIGJhc2UgY2xhc3MgZm9yIHNoYWRvdyBvYmplY3RzIHJlcHJlc2VudGluZyBpbml0aWFsaXplcnMgaW4ga2VybmVsCi8vLyBmb3JtLgphYnN0cmFjdCBjbGFzcyBJbml0aWFsaXplckp1ZGdtZW50IGltcGxlbWVudHMgSW5pdGlhbGl6ZXIgewogIC8vLyBQZXJmb3JtcyB0eXBlIGluZmVyZW5jZSBmb3Igd2hhdGV2ZXIgY29uY3JldGUgdHlwZSBvZiBbSW5pdGlhbGl6ZXJKdWRnbWVudF0KICAvLy8gdGhpcyBpcy4KICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpOwp9CgpFeHByZXNzaW9uIGNoZWNrV2ViSW50TGl0ZXJhbHNFcnJvcklmVW5leGFjdCgKICAgIFNoYWRvd1R5cGVJbmZlcnJlciBpbmZlcnJlciwgaW50IHZhbHVlLCBTdHJpbmcgbGl0ZXJhbCwgaW50IGNoYXJPZmZzZXQpIHsKICBpZiAodmFsdWUgPj0gMCAmJiB2YWx1ZSA8PSAoMSA8PCA1MykpIHJldHVybiBudWxsOwogIGlmIChpbmZlcnJlci5saWJyYXJ5ID09IG51bGwpIHJldHVybiBudWxsOwogIGlmICghaW5mZXJyZXIubGlicmFyeS5sb2FkZXIudGFyZ2V0LmJhY2tlbmRUYXJnZXQKICAgICAgLmVycm9yT25VbmV4YWN0V2ViSW50TGl0ZXJhbHMpIHJldHVybiBudWxsOwogIEJpZ0ludCBhc0ludCA9IEJpZ0ludC5mcm9tKHZhbHVlKS50b1Vuc2lnbmVkKDY0KTsKICBCaWdJbnQgYXNEb3VibGUgPSBCaWdJbnQuZnJvbShhc0ludC50b0RvdWJsZSgpKTsKICBpZiAoYXNJbnQgPT0gYXNEb3VibGUpIHJldHVybiBudWxsOwogIFN0cmluZyB0ZXh0ID0gbGl0ZXJhbCA/PyB2YWx1ZS50b1N0cmluZygpOwogIFN0cmluZyBuZWFyZXN0ID0gdGV4dC5zdGFydHNXaXRoKCcweCcpIHx8IHRleHQuc3RhcnRzV2l0aCgnMFgnKQogICAgICA/ICcweCR7YXNEb3VibGUudG9SYWRpeFN0cmluZygxNil9JwogICAgICA6IGFzRG91YmxlLnRvU3RyaW5nKCk7CiAgaW50IGxlbmd0aCA9IGxpdGVyYWw/Lmxlbmd0aCA/PyBub0xlbmd0aDsKICByZXR1cm4gaW5mZXJyZXIuaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGluZmVycmVyLmhlbHBlcgogICAgICAuYnVpbGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVXZWJMaXRlcmFsQ2Fubm90QmVSZXByZXNlbnRlZEV4YWN0bHkud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICB0ZXh0LCBuZWFyZXN0KSwKICAgICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgICBsZW5ndGgpKTsKfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGFuIGludGVnZXIgbGl0ZXJhbCBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgSW50SnVkZ21lbnQgZXh0ZW5kcyBJbnRMaXRlcmFsIGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CiAgZmluYWwgU3RyaW5nIGxpdGVyYWw7CgogIEludEp1ZGdtZW50KGludCB2YWx1ZSwgdGhpcy5saXRlcmFsKSA6IHN1cGVyKHZhbHVlKTsKCiAgZG91YmxlIGFzRG91YmxlKHtib29sIG5lZ2F0ZWQ6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlID09IDAgJiYgbmVnYXRlZCkgcmV0dXJuIC0wLjA7CiAgICBCaWdJbnQgaW50VmFsdWUgPSBCaWdJbnQuZnJvbShuZWdhdGVkID8gLXZhbHVlIDogdmFsdWUpOwogICAgZG91YmxlIGRvdWJsZVZhbHVlID0gaW50VmFsdWUudG9Eb3VibGUoKTsKICAgIHJldHVybiBpbnRWYWx1ZSA9PSBCaWdJbnQuZnJvbShkb3VibGVWYWx1ZSkgPyBkb3VibGVWYWx1ZSA6IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEludEp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCmNsYXNzIFNoYWRvd0xhcmdlSW50TGl0ZXJhbCBleHRlbmRzIEludExpdGVyYWwgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIGZpbmFsIFN0cmluZyBsaXRlcmFsOwogIGZpbmFsIGludCBmaWxlT2Zmc2V0OwogIGJvb2wgaXNQYXJlbnRoZXNpemVkID0gZmFsc2U7CgogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgU2hhZG93TGFyZ2VJbnRMaXRlcmFsKHRoaXMubGl0ZXJhbCwgdGhpcy5maWxlT2Zmc2V0KSA6IHN1cGVyKDApOwoKICBkb3VibGUgYXNEb3VibGUoe2Jvb2wgbmVnYXRlZDogZmFsc2V9KSB7CiAgICBCaWdJbnQgaW50VmFsdWUgPSBCaWdJbnQudHJ5UGFyc2UobmVnYXRlZCA/ICctJHtsaXRlcmFsfScgOiBsaXRlcmFsKTsKICAgIGlmIChpbnRWYWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IGludFZhbHVlLnRvRG91YmxlKCk7CiAgICByZXR1cm4gIWRvdWJsZVZhbHVlLmlzTmFOICYmCiAgICAgICAgICAgICFkb3VibGVWYWx1ZS5pc0luZmluaXRlICYmCiAgICAgICAgICAgIGludFZhbHVlID09IEJpZ0ludC5mcm9tKGRvdWJsZVZhbHVlKQogICAgICAgID8gZG91YmxlVmFsdWUKICAgICAgICA6IG51bGw7CiAgfQoKICBpbnQgYXNJbnQ2NCh7Ym9vbCBuZWdhdGVkOiBmYWxzZX0pIHsKICAgIHJldHVybiBpbnQudHJ5UGFyc2UobmVnYXRlZCA/ICctJHtsaXRlcmFsfScgOiBsaXRlcmFsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U2hhZG93TGFyZ2VJbnRMaXRlcmFsKHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBpbnZhbGlkIGluaXRpYWxpemVyIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBTaGFkb3dJbnZhbGlkSW5pdGlhbGl6ZXIgZXh0ZW5kcyBMb2NhbEluaXRpYWxpemVyCiAgICBpbXBsZW1lbnRzIEluaXRpYWxpemVySnVkZ21lbnQgewogIFNoYWRvd0ludmFsaWRJbml0aWFsaXplcihWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSA6IHN1cGVyKHZhcmlhYmxlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFNoYWRvd0ludmFsaWRJbml0aWFsaXplcih0aGlzKTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBpbnZhbGlkIGluaXRpYWxpemVyIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBTaGFkb3dJbnZhbGlkRmllbGRJbml0aWFsaXplciBleHRlbmRzIExvY2FsSW5pdGlhbGl6ZXIKICAgIGltcGxlbWVudHMgSW5pdGlhbGl6ZXJKdWRnbWVudCB7CiAgZmluYWwgRmllbGQgZmllbGQ7CiAgZmluYWwgRXhwcmVzc2lvbiB2YWx1ZTsKCiAgU2hhZG93SW52YWxpZEZpZWxkSW5pdGlhbGl6ZXIoCiAgICAgIHRoaXMuZmllbGQsIHRoaXMudmFsdWUsIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpCiAgICAgIDogc3VwZXIodmFyaWFibGUpIHsKICAgIHZhbHVlPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgRXhwcmVzc2lvbiBnZXQganVkZ21lbnQgPT4gdmFsdWU7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTaGFkb3dJbnZhbGlkRmllbGRJbml0aWFsaXplcih0aGlzKTsKICB9Cn0KCi8vLyBUeXBlIGluZmVyZW5jZSBkZXJpdmF0aW9uIGZvciBbTGlzdExpdGVyYWxdLgpjbGFzcyBMaXN0TGl0ZXJhbEp1ZGdtZW50IGV4dGVuZHMgTGlzdExpdGVyYWwgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgTGlzdExpdGVyYWxKdWRnbWVudChMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zLAogICAgICB7RGFydFR5cGUgdHlwZUFyZ3VtZW50LCBib29sIGlzQ29uc3Q6IGZhbHNlfSkKICAgICAgOiBhc3NlcnQodHlwZUFyZ3VtZW50ICE9IG51bGwpLAogICAgICAgIHN1cGVyKGV4cHJlc3Npb25zLCB0eXBlQXJndW1lbnQ6IHR5cGVBcmd1bWVudCwgaXNDb25zdDogaXNDb25zdCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TGlzdExpdGVyYWxKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gVHlwZSBpbmZlcmVuY2UgZGVyaXZhdGlvbiBmb3IgW1NldExpdGVyYWxdLgpjbGFzcyBTZXRMaXRlcmFsSnVkZ21lbnQgZXh0ZW5kcyBTZXRMaXRlcmFsIGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIFNldExpdGVyYWxKdWRnbWVudChMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zLAogICAgICB7RGFydFR5cGUgdHlwZUFyZ3VtZW50LCBib29sIGlzQ29uc3Q6IGZhbHNlfSkKICAgICAgOiBhc3NlcnQodHlwZUFyZ3VtZW50ICE9IG51bGwpLAogICAgICAgIHN1cGVyKGV4cHJlc3Npb25zLCB0eXBlQXJndW1lbnQ6IHR5cGVBcmd1bWVudCwgaXNDb25zdDogaXNDb25zdCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U2V0TGl0ZXJhbEp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBUeXBlIGluZmVyZW5jZSBkZXJpdmF0aW9uIGZvciBbTWFwTGl0ZXJhbF0uCmNsYXNzIE1hcExpdGVyYWxKdWRnbWVudCBleHRlbmRzIE1hcExpdGVyYWwgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgTWFwTGl0ZXJhbEp1ZGdtZW50KExpc3Q8TWFwRW50cnk+IGp1ZGdtZW50cywKICAgICAge0RhcnRUeXBlIGtleVR5cGUsIERhcnRUeXBlIHZhbHVlVHlwZSwgYm9vbCBpc0NvbnN0OiBmYWxzZX0pCiAgICAgIDogYXNzZXJ0KGtleVR5cGUgIT0gbnVsbCksCiAgICAgICAgYXNzZXJ0KHZhbHVlVHlwZSAhPSBudWxsKSwKICAgICAgICBzdXBlcihqdWRnbWVudHMsCiAgICAgICAgICAgIGtleVR5cGU6IGtleVR5cGUsIHZhbHVlVHlwZTogdmFsdWVUeXBlLCBpc0NvbnN0OiBpc0NvbnN0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRNYXBMaXRlcmFsSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIFNoYWRvdyBvYmplY3QgZm9yIFtNZXRob2RJbnZvY2F0aW9uXS4KY2xhc3MgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50IGV4dGVuZHMgTWV0aG9kSW52b2NhdGlvbgogICAgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgbWV0aG9kIGludm9jYXRpb24gaXMgYSBjYWxsIHRvIGEgYGNhbGxgIG1ldGhvZAogIC8vLyByZXN1bHRpbmcgZnJvbSB0aGUgaW52b2NhdGlvbiBvZiBhIGZ1bmN0aW9uIGV4cHJlc3Npb24uCiAgZmluYWwgYm9vbCBfaXNJbXBsaWNpdENhbGw7CgogIE1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgTmFtZSBuYW1lLCBBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHMsCiAgICAgIHtib29sIGlzSW1wbGljaXRDYWxsOiBmYWxzZSwgTWVtYmVyIGludGVyZmFjZVRhcmdldH0pCiAgICAgIDogX2lzSW1wbGljaXRDYWxsID0gaXNJbXBsaWNpdENhbGwsCiAgICAgICAgc3VwZXIocmVjZWl2ZXIsIG5hbWUsIGFyZ3VtZW50cywgaW50ZXJmYWNlVGFyZ2V0KTsKCiAgQXJndW1lbnRzSnVkZ21lbnQgZ2V0IGFyZ3VtZW50SnVkZ21lbnRzID0+IGFyZ3VtZW50czsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbi4KLy8vCi8vLyBOYW1lZCBmdW5jdGlvbiBleHByZXNzaW9ucyBhcmUgbm90IGxlZ2FsIGluIERhcnQsIGJ1dCB0aGV5IGFyZSBhY2NlcHRlZCBieQovLy8gdGhlIHBhcnNlciBhbmQgQm9keUJ1aWxkZXIgZm9yIGVycm9yIHJlY292ZXJ5IHB1cnBvc2VzLgovLy8KLy8vIEEgbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbiBvZiB0aGUgZm9ybSBgZigpIHsgLi4uIH1gIGlzIHJlcHJlc2VudGVkIGFzIHRoZQovLy8ga2VybmVsIGV4cHJlc3Npb246Ci8vLwovLy8gICAgIGxldCBmID0gKCkgeyAuLi4gfSBpbiBmCmNsYXNzIE5hbWVkRnVuY3Rpb25FeHByZXNzaW9uSnVkZ21lbnQgZXh0ZW5kcyBMZXQKICAgIGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIE5hbWVkRnVuY3Rpb25FeHByZXNzaW9uSnVkZ21lbnQoVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50IHZhcmlhYmxlKQogICAgICA6IHN1cGVyKHZhcmlhYmxlLCBuZXcgVmFyaWFibGVHZXQodmFyaWFibGUpKTsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50IGdldCB2YXJpYWJsZUp1ZGdtZW50ID0+IHZhcmlhYmxlOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdE5hbWVkRnVuY3Rpb25FeHByZXNzaW9uSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgbnVsbC1hd2FyZSBtZXRob2QgaW52b2NhdGlvbi4KLy8vCi8vLyBBIG51bGwtYXdhcmUgbWV0aG9kIGludm9jYXRpb24gb2YgdGhlIGZvcm0gYGE/LmIoLi4uKWAgaXMgcmVwcmVzZW50ZWQgYXMgdGhlCi8vLyBleHByZXNzaW9uOgovLy8KLy8vICAgICBsZXQgdiA9IGEgaW4gdiA9PSBudWxsID8gbnVsbCA6IHYuYiguLi4pCmNsYXNzIE51bGxBd2FyZU1ldGhvZEludm9jYXRpb25KdWRnbWVudCBleHRlbmRzIExldAogICAgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgTnVsbEF3YXJlTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBFeHByZXNzaW9uIGJvZHkpCiAgICAgIDogc3VwZXIodmFyaWFibGUsIGJvZHkpOwoKICBAb3ZlcnJpZGUKICBDb25kaXRpb25hbEV4cHJlc3Npb24gZ2V0IGJvZHkgPT4gc3VwZXIuYm9keTsKCiAgTWV0aG9kSW52b2NhdGlvbiBnZXQgX2Rlc3VnYXJlZEludm9jYXRpb24gPT4gYm9keS5vdGhlcndpc2U7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TnVsbEF3YXJlTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIG51bGwtYXdhcmUgcmVhZCBmcm9tIGEgcHJvcGVydHkuCi8vLwovLy8gQSBudWxsLWF3YXJlIHByb3BlcnR5IGdldCBvZiB0aGUgZm9ybSBgYT8uYmAgaXMgcmVwcmVzZW50ZWQgYXMgdGhlIGtlcm5lbAovLy8gZXhwcmVzc2lvbjoKLy8vCi8vLyAgICAgbGV0IHYgPSBhIGluIHYgPT0gbnVsbCA/IG51bGwgOiB2LmIKY2xhc3MgTnVsbEF3YXJlUHJvcGVydHlHZXRKdWRnbWVudCBleHRlbmRzIExldCBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBOdWxsQXdhcmVQcm9wZXJ0eUdldEp1ZGdtZW50KAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBDb25kaXRpb25hbEV4cHJlc3Npb24gYm9keSkKICAgICAgOiBzdXBlcih2YXJpYWJsZSwgYm9keSk7CgogIEBvdmVycmlkZQogIENvbmRpdGlvbmFsRXhwcmVzc2lvbiBnZXQgYm9keSA9PiBzdXBlci5ib2R5OwoKICBQcm9wZXJ0eUdldCBnZXQgX2Rlc3VnYXJlZEdldCA9PiBib2R5Lm90aGVyd2lzZTsKCiAgRXhwcmVzc2lvbiBnZXQgcmVjZWl2ZXJKdWRnbWVudCA9PiB2YXJpYWJsZS5pbml0aWFsaXplcjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXROdWxsQXdhcmVQcm9wZXJ0eUdldEp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBhc3NpZ25tZW50IHRvIGEgcHJvcGVydHkuCmNsYXNzIFByb3BlcnR5QXNzaWdubWVudEp1ZGdtZW50IGV4dGVuZHMgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudFdpdGhSZWNlaXZlciB7CiAgLy8vIElmIHRoaXMgYXNzaWdubWVudCB1c2VzIG51bGwtYXdhcmUgYWNjZXNzIChgPy5gKSwgdGhlIGNvbmRpdGlvbmFsCiAgLy8vIGV4cHJlc3Npb24gdGhhdCBndWFyZHMgdGhlIGFjY2Vzczsgb3RoZXJ3aXNlIGBudWxsYC4KICBDb25kaXRpb25hbEV4cHJlc3Npb24gbnVsbEF3YXJlR3VhcmQ7CgogIFByb3BlcnR5QXNzaWdubWVudEp1ZGdtZW50Ll8oRXhwcmVzc2lvbiByZWNlaXZlciwgRXhwcmVzc2lvbiByaHMsCiAgICAgIHtib29sIGlzU3VwZXI6IGZhbHNlfSkKICAgICAgOiBzdXBlci5fKHJlY2VpdmVyLCByaHMsIGlzU3VwZXIpOwoKICBAb3ZlcnJpZGUKICBMaXN0PFN0cmluZz4gX2dldFRvU3RyaW5nUGFydHMoKSB7CiAgICB2YXIgcGFydHMgPSBzdXBlci5fZ2V0VG9TdHJpbmdQYXJ0cygpOwogICAgaWYgKG51bGxBd2FyZUd1YXJkICE9IG51bGwpIHBhcnRzLmFkZCgnbnVsbEF3YXJlR3VhcmQ9JG51bGxBd2FyZUd1YXJkJyk7CiAgICByZXR1cm4gcGFydHM7CiAgfQoKICBPYmplY3QgX2hhbmRsZVdyaXRlQ29udHJhdmFyaWFuY2UoCiAgICAgIFNoYWRvd1R5cGVJbmZlcnJlciBpbmZlcnJlciwgRGFydFR5cGUgcmVjZWl2ZXJUeXBlKSB7CiAgICByZXR1cm4gaW5mZXJyZXIuZmluZFByb3BlcnR5U2V0TWVtYmVyKHJlY2VpdmVyVHlwZSwgd3JpdGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRQcm9wZXJ0eUFzc2lnbm1lbnRKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSByZWRpcmVjdGluZyBpbml0aWFsaXplciBpbiBrZXJuZWwKLy8vIGZvcm0uCmNsYXNzIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJKdWRnbWVudCBleHRlbmRzIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIKICAgIGltcGxlbWVudHMgSW5pdGlhbGl6ZXJKdWRnbWVudCB7CiAgUmVkaXJlY3RpbmdJbml0aWFsaXplckp1ZGdtZW50KAogICAgICBDb25zdHJ1Y3RvciB0YXJnZXQsIEFyZ3VtZW50c0p1ZGdtZW50IGFyZ3VtZW50cykKICAgICAgOiBzdXBlcih0YXJnZXQsIGFyZ3VtZW50cyk7CgogIEFyZ3VtZW50c0p1ZGdtZW50IGdldCBhcmd1bWVudEp1ZGdtZW50cyA9PiBhcmd1bWVudHM7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVySnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSByZXR1cm4gc3RhdGVtZW50IGluIGtlcm5lbCBmb3JtLgpjbGFzcyBSZXR1cm5KdWRnbWVudCBleHRlbmRzIFJldHVyblN0YXRlbWVudCBpbXBsZW1lbnRzIFN0YXRlbWVudEp1ZGdtZW50IHsKICBmaW5hbCBTdHJpbmcgcmV0dXJuS2V5d29yZExleGVtZTsKCiAgUmV0dXJuSnVkZ21lbnQodGhpcy5yZXR1cm5LZXl3b3JkTGV4ZW1lLCBbRXhwcmVzc2lvbiBleHByZXNzaW9uXSkKICAgICAgOiBzdXBlcihleHByZXNzaW9uKTsKCiAgRXhwcmVzc2lvbiBnZXQganVkZ21lbnQgPT4gZXhwcmVzc2lvbjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFJldHVybkp1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBzaGFkb3cgb2JqZWN0cyByZXByZXNlbnRpbmcgc3RhdGVtZW50cyBpbiBrZXJuZWwKLy8vIGZvcm0uCmFic3RyYWN0IGNsYXNzIFN0YXRlbWVudEp1ZGdtZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICAvLy8gQ2FsbHMgYmFjayB0byBbaW5mZXJyZXJdIHRvIHBlcmZvcm0gdHlwZSBpbmZlcmVuY2UgZm9yIHdoYXRldmVyIGNvbmNyZXRlCiAgLy8vIHR5cGUgb2YgW1N0YXRlbWVudEp1ZGdtZW50XSB0aGlzIGlzLgogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcik7Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhbiBhc3NpZ25tZW50IHRvIGEgc3RhdGljIHZhcmlhYmxlLgpjbGFzcyBTdGF0aWNBc3NpZ25tZW50SnVkZ21lbnQgZXh0ZW5kcyBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHsKICBTdGF0aWNBc3NpZ25tZW50SnVkZ21lbnQuXyhFeHByZXNzaW9uIHJocykgOiBzdXBlci5fKHJocyk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U3RhdGljQXNzaWdubWVudEp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIHN1cGVyIGluaXRpYWxpemVyIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBTdXBlckluaXRpYWxpemVySnVkZ21lbnQgZXh0ZW5kcyBTdXBlckluaXRpYWxpemVyCiAgICBpbXBsZW1lbnRzIEluaXRpYWxpemVySnVkZ21lbnQgewogIFN1cGVySW5pdGlhbGl6ZXJKdWRnbWVudChDb25zdHJ1Y3RvciB0YXJnZXQsIEFyZ3VtZW50c0p1ZGdtZW50IGFyZ3VtZW50cykKICAgICAgOiBzdXBlcih0YXJnZXQsIGFyZ3VtZW50cyk7CgogIEFyZ3VtZW50c0p1ZGdtZW50IGdldCBhcmd1bWVudEp1ZGdtZW50cyA9PiBhcmd1bWVudHM7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTdXBlckluaXRpYWxpemVySnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gU2hhZG93IG9iamVjdCBmb3IgW1N1cGVyTWV0aG9kSW52b2NhdGlvbl0uCmNsYXNzIFN1cGVyTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50IGV4dGVuZHMgU3VwZXJNZXRob2RJbnZvY2F0aW9uCiAgICBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBTdXBlck1ldGhvZEludm9jYXRpb25KdWRnbWVudChOYW1lIG5hbWUsIEFyZ3VtZW50c0p1ZGdtZW50IGFyZ3VtZW50cywKICAgICAge1Byb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXR9KQogICAgICA6IHN1cGVyKG5hbWUsIGFyZ3VtZW50cywgaW50ZXJmYWNlVGFyZ2V0KTsKCiAgQXJndW1lbnRzSnVkZ21lbnQgZ2V0IGFyZ3VtZW50SnVkZ21lbnRzID0+IGFyZ3VtZW50czsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTdXBlck1ldGhvZEludm9jYXRpb25KdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gU2hhZG93IG9iamVjdCBmb3IgW1N1cGVyUHJvcGVydHlHZXRdLgpjbGFzcyBTdXBlclByb3BlcnR5R2V0SnVkZ21lbnQgZXh0ZW5kcyBTdXBlclByb3BlcnR5R2V0CiAgICBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBTdXBlclByb3BlcnR5R2V0SnVkZ21lbnQoTmFtZSBuYW1lLCB7TWVtYmVyIGludGVyZmFjZVRhcmdldH0pCiAgICAgIDogc3VwZXIobmFtZSwgaW50ZXJmYWNlVGFyZ2V0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTdXBlclByb3BlcnR5R2V0SnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgc3dpdGNoIGNhc2UuCmNsYXNzIFN3aXRjaENhc2VKdWRnbWVudCBleHRlbmRzIFN3aXRjaENhc2UgewogIFN3aXRjaENhc2VKdWRnbWVudCgKICAgICAgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9ucywgTGlzdDxpbnQ+IGV4cHJlc3Npb25PZmZzZXRzLCBTdGF0ZW1lbnQgYm9keSwKICAgICAge2Jvb2wgaXNEZWZhdWx0OiBmYWxzZX0pCiAgICAgIDogc3VwZXIoZXhwcmVzc2lvbnMsIGV4cHJlc3Npb25PZmZzZXRzLCBib2R5LCBpc0RlZmF1bHQ6IGlzRGVmYXVsdCk7CgogIFN3aXRjaENhc2VKdWRnbWVudC5kZWZhdWx0Q2FzZShTdGF0ZW1lbnQgYm9keSkgOiBzdXBlci5kZWZhdWx0Q2FzZShib2R5KTsKCiAgU3dpdGNoQ2FzZUp1ZGdtZW50LmVtcHR5KCkgOiBzdXBlci5lbXB0eSgpOwoKICBMaXN0PEV4cHJlc3Npb24+IGdldCBleHByZXNzaW9uSnVkZ21lbnRzID0+IGV4cHJlc3Npb25zLmNhc3QoKTsKfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgc3dpdGNoIHN0YXRlbWVudCBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgU3dpdGNoU3RhdGVtZW50SnVkZ21lbnQgZXh0ZW5kcyBTd2l0Y2hTdGF0ZW1lbnQKICAgIGltcGxlbWVudHMgU3RhdGVtZW50SnVkZ21lbnQgewogIFN3aXRjaFN0YXRlbWVudEp1ZGdtZW50KEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgTGlzdDxTd2l0Y2hDYXNlPiBjYXNlcykKICAgICAgOiBzdXBlcihleHByZXNzaW9uLCBjYXNlcyk7CgogIEV4cHJlc3Npb24gZ2V0IGV4cHJlc3Npb25KdWRnbWVudCA9PiBleHByZXNzaW9uOwoKICBMaXN0PFN3aXRjaENhc2VKdWRnbWVudD4gZ2V0IGNhc2VKdWRnbWVudHMgPT4gY2FzZXMuY2FzdCgpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U3dpdGNoU3RhdGVtZW50SnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gU2hhZG93IG9iamVjdCBmb3IgW1N5bWJvbExpdGVyYWxdLgpjbGFzcyBTeW1ib2xMaXRlcmFsSnVkZ21lbnQgZXh0ZW5kcyBTeW1ib2xMaXRlcmFsCiAgICBpbXBsZW1lbnRzIEV4cHJlc3Npb25KdWRnbWVudCB7CiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBTeW1ib2xMaXRlcmFsSnVkZ21lbnQoU3RyaW5nIHZhbHVlKSA6IHN1cGVyKHZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTeW1ib2xMaXRlcmFsSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIFN5bnRoZXRpYyBqdWRnbWVudCBjbGFzcyByZXByZXNlbnRpbmcgYW4gYXR0ZW1wdCB0byBpbnZva2UgYW4gdW5yZXNvbHZlZAovLy8gY29uc3RydWN0b3IsIG9yIGEgY29uc3RydWN0b3IgdGhhdCBjYW5ub3QgYmUgaW52b2tlZCwgb3IgYSByZXNvbHZlZAovLy8gY29uc3RydWN0b3Igd2l0aCB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLgovLyBUT0RPKGFoZSk6IFJlbW92ZSB0aGlzPwpjbGFzcyBJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnQgZXh0ZW5kcyBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQgewogIGZpbmFsIE1lbWJlciBjb25zdHJ1Y3RvcjsKICBmaW5hbCBBcmd1bWVudHMgYXJndW1lbnRzOwoKICBJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnQuXygKICAgICAga2VybmVsLkV4cHJlc3Npb24gZGVzdWdhcmVkLCB0aGlzLmNvbnN0cnVjdG9yLCB0aGlzLmFyZ3VtZW50cykKICAgICAgOiBzdXBlci5fKGRlc3VnYXJlZCk7CgogIEFyZ3VtZW50c0p1ZGdtZW50IGdldCBhcmd1bWVudEp1ZGdtZW50cyA9PiBhcmd1bWVudHM7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0SW52YWxpZENvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBTeW50aGV0aWMganVkZ21lbnQgY2xhc3MgcmVwcmVzZW50aW5nIGFuIGF0dGVtcHQgdG8gYXNzaWduIHRvIHRoZQovLy8gW2V4cHJlc3Npb25dIHdoaWNoIGlzIG5vdCBhc3NpZ25hYmxlLgpjbGFzcyBJbnZhbGlkV3JpdGVKdWRnbWVudCBleHRlbmRzIFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCB7CiAgZmluYWwgRXhwcmVzc2lvbiBleHByZXNzaW9uOwoKICBJbnZhbGlkV3JpdGVKdWRnbWVudC5fKGtlcm5lbC5FeHByZXNzaW9uIGRlc3VnYXJlZCwgdGhpcy5leHByZXNzaW9uKQogICAgICA6IHN1cGVyLl8oZGVzdWdhcmVkKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRJbnZhbGlkV3JpdGVKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gU2hhZG93IG9iamVjdCBmb3IgZXhwcmVzc2lvbnMgdGhhdCBhcmUgaW50cm9kdWNlZCBieSB0aGUgZnJvbnQgZW5kIGFzIHBhcnQKLy8vIG9mIGRlc3VnYXJpbmcgb3IgdGhlIGhhbmRsaW5nIG9mIGVycm9yIGNvbmRpdGlvbnMuCi8vLwovLy8gVGhlc2UgZXhwcmVzc2lvbnMgYXJlIHJlbW92ZWQgYnkgdHlwZSBpbmZlcmVuY2UgYW5kIHJlcGxhY2VkIHdpdGggdGhlaXIKLy8vIGRlc3VnYXJlZCBlcXVpdmFsZW50cy4KY2xhc3MgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50IGV4dGVuZHMgTGV0IGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudC5fKEV4cHJlc3Npb24gZGVzdWdhcmVkKQogICAgICA6IHN1cGVyKG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKCdfJywgaW5pdGlhbGl6ZXI6IG5ldyBOdWxsTGl0ZXJhbCgpKSwKICAgICAgICAgICAgZGVzdWdhcmVkKTsKCiAgLy8vIFRoZSBkZXN1Z2FyZWQga2VybmVsIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgc3ludGhldGljIGV4cHJlc3Npb24uCiAgRXhwcmVzc2lvbiBnZXQgZGVzdWdhcmVkID0+IGJvZHk7CgogIHZvaWQgc2V0IGRlc3VnYXJlZChFeHByZXNzaW9uIHZhbHVlKSB7CiAgICB0aGlzLmJvZHkgPSB2YWx1ZTsKICAgIHZhbHVlLnBhcmVudCA9IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQoKICAvLy8gUmVtb3ZlcyB0aGlzIGV4cHJlc3Npb24gZnJvbSB0aGUgZXhwcmVzc2lvbiB0cmVlLCByZXBsYWNpbmcgaXQgd2l0aAogIC8vLyBbZGVzdWdhcmVkXS4KICB2b2lkIF9yZXBsYWNlV2l0aERlc3VnYXJlZCgpIHsKICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQodGhpcywgZGVzdWdhcmVkKTsKICAgIHBhcmVudCA9IG51bGw7CiAgfQoKICAvLy8gVXBkYXRlcyBhbnkgW0xldF0gbm9kZXMgaW4gdGhlIGRlc3VnYXJlZCBleHByZXNzaW9uIHRvIGFjY291bnQgZm9yIHRoZQogIC8vLyBmYWN0IHRoYXQgW2V4cHJlc3Npb25dIGhhcyB0aGUgZ2l2ZW4gW3R5cGVdLgogIHZvaWQgX3N0b3JlTGV0VHlwZSgKICAgICAgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlciwgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBFeHByZXNzaW9uIGRlc3VnYXJlZCA9IHRoaXMuZGVzdWdhcmVkOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKGRlc3VnYXJlZCBpcyBMZXQpIHsKICAgICAgICBMZXQgZGVzdWdhcmVkTGV0ID0gZGVzdWdhcmVkOwogICAgICAgIHZhciB2YXJpYWJsZSA9IGRlc3VnYXJlZExldC52YXJpYWJsZTsKICAgICAgICBpZiAoaWRlbnRpY2FsKHZhcmlhYmxlLmluaXRpYWxpemVyLCBleHByZXNzaW9uKSkgewogICAgICAgICAgdmFyaWFibGUudHlwZSA9IHR5cGU7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGRlc3VnYXJlZCA9IGRlc3VnYXJlZExldC5ib2R5OwogICAgICB9IGVsc2UgaWYgKGRlc3VnYXJlZCBpcyBDb25kaXRpb25hbEV4cHJlc3Npb24pIHsKICAgICAgICAvLyBXaGVuIGEgbnVsbC1hd2FyZSBhc3NpZ25tZW50IGlzIGRlc3VnYXJlZCwgb2Z0ZW4gdGhlICJ0aGVuIiBvciAiZWxzZSIKICAgICAgICAvLyBicmFuY2ggb2YgdGhlIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gb2Z0ZW4gY29udGFpbnMgImxldCIgbm9kZXMgdGhhdAogICAgICAgIC8vIG5lZWQgdG8gYmUgdXBkYXRlZC4KICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb24gZGVzdWdhcmVkQ29uZGl0aW9uYWxFeHByZXNzaW9uID0gZGVzdWdhcmVkOwogICAgICAgIGlmIChkZXN1Z2FyZWRDb25kaXRpb25hbEV4cHJlc3Npb24udGhlbiBpcyBMZXQpIHsKICAgICAgICAgIGRlc3VnYXJlZCA9IGRlc3VnYXJlZENvbmRpdGlvbmFsRXhwcmVzc2lvbi50aGVuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkZXN1Z2FyZWQgPSBkZXN1Z2FyZWRDb25kaXRpb25hbEV4cHJlc3Npb24ub3RoZXJ3aXNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEV4cHJlc3Npb25WaXNpdG9yPGR5bmFtaWM+IHYpIHsKICAgIC8vIFRoaXMgaXMgZGVzaWduZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGR1cmluZyBzZXJpYWxpemF0aW9uLiBJdCBjYW4gYWxzbwogICAgLy8gbGVhZCB0byBleGNlcHRpb25zIGR1cmluZyB0cmFuc2Zvcm1hdGlvbnMsIGJ1dCB3ZSBoYXZlIHRvIGFjY2VwdCBhCiAgICAvLyBbVHJhbnNmb3JtZXJdIGFzIHRoaXMgaXMgdXNlZCB0byBpbXBsZW1lbnQgYHJlcGxhY2VDaGlsZGAuCiAgICBpZiAodiBpcyBUcmFuc2Zvcm1lcikgcmV0dXJuIHN1cGVyLmFjY2VwdCh2KTsKICAgIHVuc3VwcG9ydGVkKCJhY2NlcHQiLCBmaWxlT2Zmc2V0LCBnZXRGaWxlVXJpKHRoaXMpKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxPGR5bmFtaWMsIGR5bmFtaWM+IHYsIGFyZykgewogICAgdW5zdXBwb3J0ZWQoImFjY2VwdDEiLCBmaWxlT2Zmc2V0LCBnZXRGaWxlVXJpKHRoaXMpKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvcjxkeW5hbWljPiB2KSB7CiAgICB1bnN1cHBvcnRlZCgidmlzaXRDaGlsZHJlbiIsIGZpbGVPZmZzZXQsIGdldEZpbGVVcmkodGhpcykpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgY2F0Y2ggY2xhdXNlLgpjbGFzcyBDYXRjaEp1ZGdtZW50IGV4dGVuZHMgQ2F0Y2ggewogIENhdGNoSnVkZ21lbnQoVmFyaWFibGVEZWNsYXJhdGlvbiBleGNlcHRpb24sIFN0YXRlbWVudCBib2R5LAogICAgICB7RGFydFR5cGUgZ3VhcmQ6IGNvbnN0IER5bmFtaWNUeXBlKCksIFZhcmlhYmxlRGVjbGFyYXRpb24gc3RhY2tUcmFjZX0pCiAgICAgIDogc3VwZXIoZXhjZXB0aW9uLCBib2R5LCBndWFyZDogZ3VhcmQsIHN0YWNrVHJhY2U6IHN0YWNrVHJhY2UpOwoKICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQgZ2V0IGV4Y2VwdGlvbkp1ZGdtZW50ID0+IGV4Y2VwdGlvbjsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50IGdldCBzdGFja1RyYWNlSnVkZ21lbnQgPT4gc3RhY2tUcmFjZTsKfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHJ5LWNhdGNoIGJsb2NrIGluIGtlcm5lbCBmb3JtLgpjbGFzcyBUcnlDYXRjaEp1ZGdtZW50IGV4dGVuZHMgVHJ5Q2F0Y2ggaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgVHJ5Q2F0Y2hKdWRnbWVudChTdGF0ZW1lbnQgYm9keSwgTGlzdDxDYXRjaD4gY2F0Y2hlcykgOiBzdXBlcihib2R5LCBjYXRjaGVzKTsKCiAgTGlzdDxDYXRjaEp1ZGdtZW50PiBnZXQgY2F0Y2hKdWRnbWVudHMgPT4gY2F0Y2hlcy5jYXN0KCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRUcnlDYXRjaEp1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgdHJ5LWZpbmFsbHkgYmxvY2sgaW4ga2VybmVsIGZvcm0uCmNsYXNzIFRyeUZpbmFsbHlKdWRnbWVudCBleHRlbmRzIFRyeUZpbmFsbHkgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgVHJ5RmluYWxseUp1ZGdtZW50KFN0YXRlbWVudCBib2R5LCBTdGF0ZW1lbnQgZmluYWxpemVyKQogICAgICA6IHN1cGVyKGJvZHksIGZpbmFsaXplcik7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRUcnlGaW5hbGx5SnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgW1R5cGVJbmZlcmVuY2VFbmdpbmVdIHNwZWNpYWxpemVkIHRvIHdvcmsgd2l0aAovLy8ga2VybmVsIG9iamVjdHMuCmNsYXNzIFNoYWRvd1R5cGVJbmZlcmVuY2VFbmdpbmUgZXh0ZW5kcyBUeXBlSW5mZXJlbmNlRW5naW5lIHsKICBTaGFkb3dUeXBlSW5mZXJlbmNlRW5naW5lKEluc3RydW1lbnRhdGlvbiBpbnN0cnVtZW50YXRpb24pCiAgICAgIDogc3VwZXIoaW5zdHJ1bWVudGF0aW9uKTsKCiAgQG92ZXJyaWRlCiAgU2hhZG93VHlwZUluZmVycmVyIGNyZWF0ZUxvY2FsVHlwZUluZmVycmVyKAogICAgICBVcmkgdXJpLCBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlLCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICByZXR1cm4gbmV3IFR5cGVJbmZlcnJlcih0aGlzLCB1cmksIGZhbHNlLCB0aGlzVHlwZSwgbGlicmFyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTaGFkb3dUeXBlSW5mZXJyZXIgY3JlYXRlVG9wTGV2ZWxUeXBlSW5mZXJyZXIoCiAgICAgIFVyaSB1cmksIEludGVyZmFjZVR5cGUgdGhpc1R5cGUsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIHJldHVybiBuZXcgVHlwZUluZmVycmVyKHRoaXMsIHVyaSwgdHJ1ZSwgdGhpc1R5cGUsIGxpYnJhcnkpOwogIH0KfQoKLy8vIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFtUeXBlSW5mZXJyZXJdIHNwZWNpYWxpemVkIHRvIHdvcmsgd2l0aCBrZXJuZWwKLy8vIG9iamVjdHMuCmNsYXNzIFNoYWRvd1R5cGVJbmZlcnJlciBleHRlbmRzIFR5cGVJbmZlcnJlckltcGwgewogIEBvdmVycmlkZQogIGZpbmFsIHR5cGVQcm9tb3RlcjsKCiAgU2hhZG93VHlwZUluZmVycmVyLnByaXZhdGUoU2hhZG93VHlwZUluZmVyZW5jZUVuZ2luZSBlbmdpbmUsIFVyaSB1cmksCiAgICAgIGJvb2wgdG9wTGV2ZWwsIEludGVyZmFjZVR5cGUgdGhpc1R5cGUsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpCiAgICAgIDogdHlwZVByb21vdGVyID0gbmV3IFR5cGVQcm9tb3RlcihlbmdpbmUudHlwZVNjaGVtYUVudmlyb25tZW50KSwKICAgICAgICBzdXBlci5wcml2YXRlKGVuZ2luZSwgdXJpLCB0b3BMZXZlbCwgdGhpc1R5cGUsIGxpYnJhcnkpOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGdldEZpZWxkSW5pdGlhbGl6ZXIoRmllbGQgZmllbGQpIHsKICAgIHJldHVybiBmaWVsZC5pbml0aWFsaXplcjsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGluZmVyRXhwcmVzc2lvbigKICAgICAga2VybmVsLkV4cHJlc3Npb24gZXhwcmVzc2lvbiwgRGFydFR5cGUgdHlwZUNvbnRleHQsIGJvb2wgdHlwZU5lZWRlZCwKICAgICAge2Jvb2wgaXNWb2lkQWxsb3dlZDogZmFsc2V9KSB7CiAgICAvLyBgbnVsbGAgc2hvdWxkIG5ldmVyIGJlIHVzZWQgYXMgdGhlIHR5cGUgY29udGV4dC4gIEFuIGluc3RhbmNlIG9mCiAgICAvLyBgVW5rbm93blR5cGVgIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuCiAgICBhc3NlcnQodHlwZUNvbnRleHQgIT0gbnVsbCk7CgogICAgLy8gSXQgaXNuJ3Qgc2FmZSB0byBkbyB0eXBlIGluZmVyZW5jZSBvbiBhbiBleHByZXNzaW9uIHdpdGhvdXQgYSBwYXJlbnQsCiAgICAvLyBiZWNhdXNlIHR5cGUgaW5mZXJlbmNlIG1pZ2h0IGNhdXNlIHVzIHRvIGhhdmUgdG8gcmVwbGFjZSBvbmUgZXhwcmVzc2lvbgogICAgLy8gd2l0aCBhbm90aGVyLCBhbmQgd2UgY2FuIG9ubHkgcmVwbGFjZSBhIG5vZGUgaWYgaXQgaGFzIGEgcGFyZW50IHBvaW50ZXIuCiAgICBhc3NlcnQoZXhwcmVzc2lvbi5wYXJlbnQgIT0gbnVsbCk7CgogICAgLy8gRm9yIGZ1bGwgKG5vbi10b3AgbGV2ZWwpIGluZmVyZW5jZSwgd2UgbmVlZCBhY2Nlc3MgdG8gdGhlCiAgICAvLyBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIHNvIHRoYXQgd2UgY2FuIHBlcmZvcm0gZXJyb3IgcmVjb3ZlcnkuCiAgICBhc3NlcnQoaXNUb3BMZXZlbCB8fCBoZWxwZXIgIT0gbnVsbCk7CgogICAgLy8gV2hlbiBkb2luZyB0b3AgbGV2ZWwgaW5mZXJlbmNlLCB3ZSBza2lwIHN1YmV4cHJlc3Npb25zIHdob3NlIHR5cGUgaXNuJ3QKICAgIC8vIG5lZWRlZCBzbyB0aGF0IHdlIGRvbid0IGluZHVjZSBib2d1cyBkZXBlbmRlbmNpZXMgb24gZmllbGRzIG1lbnRpb25lZCBpbgogICAgLy8gdGhvc2Ugc3ViZXhwcmVzc2lvbnMuCiAgICBpZiAoIXR5cGVOZWVkZWQpIHJldHVybiBudWxsOwoKICAgIEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciA9IG5ldyBJbmZlcmVuY2VWaXNpdG9yKHRoaXMpOwogICAgaWYgKGV4cHJlc3Npb24gaXMgRXhwcmVzc2lvbkp1ZGdtZW50KSB7CiAgICAgIGV4cHJlc3Npb24uYWNjZXB0SW5mZXJlbmNlKHZpc2l0b3IsIHR5cGVDb250ZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgIGV4cHJlc3Npb24uYWNjZXB0MSh2aXNpdG9yLCB0eXBlQ29udGV4dCk7CiAgICB9CiAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGUgPSBnZXRJbmZlcnJlZFR5cGUoZXhwcmVzc2lvbiwgdGhpcyk7CiAgICBpZiAoaW5mZXJyZWRUeXBlIGlzIFZvaWRUeXBlICYmICFpc1ZvaWRBbGxvd2VkKSB7CiAgICAgIGlmIChleHByZXNzaW9uLnBhcmVudCBpcyEgQXJndW1lbnRzSnVkZ21lbnQpIHsKICAgICAgICBoZWxwZXI/LmFkZFByb2JsZW0oCiAgICAgICAgICAgIG1lc3NhZ2VWb2lkRXhwcmVzc2lvbiwgZXhwcmVzc2lvbi5maWxlT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpbmZlcnJlZFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGluZmVySW5pdGlhbGl6ZXIoCiAgICAgIEluZmVyZW5jZUhlbHBlciBoZWxwZXIsIGtlcm5lbC5Jbml0aWFsaXplciBpbml0aWFsaXplcikgewogICAgYXNzZXJ0KGluaXRpYWxpemVyIGlzIEluaXRpYWxpemVySnVkZ21lbnQpOwogICAgdGhpcy5oZWxwZXIgPSBoZWxwZXI7CiAgICAvLyBVc2UgcG9seW1vcnBoaWMgZGlzcGF0Y2ggb24gW0tlcm5lbEluaXRpYWxpemVyXSB0byBwZXJmb3JtIHdoYXRldmVyCiAgICAvLyBraW5kIG9mIHR5cGUgaW5mZXJlbmNlIGlzIGNvcnJlY3QgZm9yIHRoaXMga2luZCBvZiBpbml0aWFsaXplci4KICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogZXhwZXJpbWVudCB0byBzZWUgaWYgZHluYW1pYyBkaXNwYXRjaCB3b3VsZCBiZSBiZXR0ZXIsCiAgICAvLyBzbyB0aGF0IHRoZSB0eXBlIGhpZXJhcmNoeSB3aWxsIGJlIHNpbXBsZXIgKHdoaWNoIG1heSBzcGVlZCB1cCAiaXMiCiAgICAvLyBjaGVja3MpLgogICAgSW5pdGlhbGl6ZXJKdWRnbWVudCBrZXJuZWxJbml0aWFsaXplciA9IGluaXRpYWxpemVyOwogICAga2VybmVsSW5pdGlhbGl6ZXIuYWNjZXB0SW5mZXJlbmNlKG5ldyBJbmZlcmVuY2VWaXNpdG9yKHRoaXMpKTsKICAgIHRoaXMuaGVscGVyID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaW5mZXJTdGF0ZW1lbnQoU3RhdGVtZW50IHN0YXRlbWVudCkgewogICAgLy8gRm9yIGZ1bGwgKG5vbi10b3AgbGV2ZWwpIGluZmVyZW5jZSwgd2UgbmVlZCBhY2Nlc3MgdG8gdGhlCiAgICAvLyBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIHNvIHRoYXQgd2UgY2FuIHBlcmZvcm0gZXJyb3IgcmVjb3ZlcnkuCiAgICBpZiAoIWlzVG9wTGV2ZWwpIGFzc2VydChoZWxwZXIgIT0gbnVsbCk7CgogICAgaWYgKHN0YXRlbWVudCBpcyBTdGF0ZW1lbnRKdWRnbWVudCkgewogICAgICAvLyBVc2UgcG9seW1vcnBoaWMgZGlzcGF0Y2ggb24gW0tlcm5lbFN0YXRlbWVudF0gdG8gcGVyZm9ybSB3aGF0ZXZlciBraW5kCiAgICAgIC8vIG9mIHR5cGUgaW5mZXJlbmNlIGlzIGNvcnJlY3QgZm9yIHRoaXMga2luZCBvZiBzdGF0ZW1lbnQuCiAgICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogZXhwZXJpbWVudCB0byBzZWUgaWYgZHluYW1pYyBkaXNwYXRjaCB3b3VsZCBiZSBiZXR0ZXIsCiAgICAgIC8vIHNvIHRoYXQgdGhlIHR5cGUgaGllcmFyY2h5IHdpbGwgYmUgc2ltcGxlciAod2hpY2ggbWF5IHNwZWVkIHVwICJpcyIKICAgICAgLy8gY2hlY2tzKS4KICAgICAgcmV0dXJuIHN0YXRlbWVudC5hY2NlcHRJbmZlcmVuY2UobmV3IEluZmVyZW5jZVZpc2l0b3IodGhpcykpOwogICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQgaXMgRm9ySW5TdGF0ZW1lbnQpIHsKICAgICAgcmV0dXJuIHN0YXRlbWVudC5hY2NlcHQxKG5ldyBJbmZlcmVuY2VWaXNpdG9yKHRoaXMpLCBudWxsKTsKICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50IGlzIExhYmVsZWRTdGF0ZW1lbnQpIHsKICAgICAgcmV0dXJuIHN0YXRlbWVudC5hY2NlcHQxKG5ldyBJbmZlcmVuY2VWaXNpdG9yKHRoaXMpLCBudWxsKTsKICAgIH0gZWxzZSBpZiAoc3RhdGVtZW50IGlzIEJyZWFrU3RhdGVtZW50KSB7CiAgICAgIHJldHVybiBzdGF0ZW1lbnQuYWNjZXB0MShuZXcgSW5mZXJlbmNlVmlzaXRvcih0aGlzKSwgbnVsbCk7CiAgICB9IGVsc2UgewogICAgICAvLyBFbmNvdW50ZXJlZCBhIHN0YXRlbWVudCB0eXBlIGZvciB3aGljaCB0eXBlIGluZmVyZW5jZSBpcyBub3QgeWV0CiAgICAgIC8vIGltcGxlbWVudGVkLCBzbyBqdXN0IHNraXAgaXQgZm9yIG5vdy4KICAgICAgLy8gVE9ETyhwYXVsYmVycnkpOiBvbmNlIHRoZSBCb2R5QnVpbGRlciB1c2VzIHNoYWRvdyBjbGFzc2VzIGZvcgogICAgICAvLyBldmVyeXRoaW5nLCB0aGlzIGNhc2Ugc2hvdWxkIG5vIGxvbmdlciBiZSBuZWVkZWQuCiAgICB9CiAgfQp9CgpjbGFzcyBUeXBlTGl0ZXJhbEp1ZGdtZW50IGV4dGVuZHMgVHlwZUxpdGVyYWwgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIERhcnRUeXBlIGluZmVycmVkVHlwZTsKCiAgVHlwZUxpdGVyYWxKdWRnbWVudChEYXJ0VHlwZSB0eXBlKSA6IHN1cGVyKHR5cGUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFR5cGVMaXRlcmFsSnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFtUeXBlUHJvbW90ZXJdIHNwZWNpYWxpemVkIHRvIHdvcmsgd2l0aCBrZXJuZWwKLy8vIG9iamVjdHMuCmNsYXNzIFNoYWRvd1R5cGVQcm9tb3RlciBleHRlbmRzIFR5cGVQcm9tb3RlckltcGwgewogIFNoYWRvd1R5cGVQcm9tb3Rlci5wcml2YXRlKFR5cGVTY2hlbWFFbnZpcm9ubWVudCB0eXBlU2NoZW1hRW52aXJvbm1lbnQpCiAgICAgIDogc3VwZXIucHJpdmF0ZSh0eXBlU2NoZW1hRW52aXJvbm1lbnQpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0VmFyaWFibGVGdW5jdGlvbk5lc3RpbmdMZXZlbChWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICBpZiAodmFyaWFibGUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KSB7CiAgICAgIHJldHVybiB2YXJpYWJsZS5fZnVuY3Rpb25OZXN0aW5nTGV2ZWw7CiAgICB9IGVsc2UgewogICAgICAvLyBIYWNrIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IEJvZHlCdWlsZGVyIHN0aWxsIGNyZWF0ZXMgcmF3CiAgICAgIC8vIFZhcmlhYmxlRGVjbGFyYXRpb24gb2JqZWN0cyBzb21ldGltZXMuCiAgICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogZ2V0IHJpZCBvZiB0aGlzIG9uY2UgdGhlIHR5cGUgcGFyYW1ldGVyIGlzCiAgICAgIC8vIEtlcm5lbFZhcmlhYmxlRGVjbGFyYXRpb24uCiAgICAgIHJldHVybiAwOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1Byb21vdGlvbkNhbmRpZGF0ZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICBhc3NlcnQodmFyaWFibGUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCBrZXJuZWxWYXJpYWJsZURlY2xhcmF0aW9uID0gdmFyaWFibGU7CiAgICByZXR1cm4gIWtlcm5lbFZhcmlhYmxlRGVjbGFyYXRpb24uX2lzTG9jYWxGdW5jdGlvbjsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgc2FtZUV4cHJlc3Npb25zKEV4cHJlc3Npb24gYSwgRXhwcmVzc2lvbiBiKSB7CiAgICByZXR1cm4gaWRlbnRpY2FsKGEsIGIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRWYXJpYWJsZU11dGF0ZWRBbnl3aGVyZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICBpZiAodmFyaWFibGUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KSB7CiAgICAgIHZhcmlhYmxlLl9tdXRhdGVkQW55d2hlcmUgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgLy8gSGFjayB0byBkZWFsIHdpdGggdGhlIGZhY3QgdGhhdCBCb2R5QnVpbGRlciBzdGlsbCBjcmVhdGVzIHJhdwogICAgICAvLyBWYXJpYWJsZURlY2xhcmF0aW9uIG9iamVjdHMgc29tZXRpbWVzLgogICAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IGdldCByaWQgb2YgdGhpcyBvbmNlIHRoZSB0eXBlIHBhcmFtZXRlciBpcwogICAgICAvLyBLZXJuZWxWYXJpYWJsZURlY2xhcmF0aW9uLgogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRWYXJpYWJsZU11dGF0ZWRJbkNsb3N1cmUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSkgewogICAgaWYgKHZhcmlhYmxlIGlzIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCkgewogICAgICB2YXJpYWJsZS5fbXV0YXRlZEluQ2xvc3VyZSA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICAvLyBIYWNrIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IEJvZHlCdWlsZGVyIHN0aWxsIGNyZWF0ZXMgcmF3CiAgICAgIC8vIFZhcmlhYmxlRGVjbGFyYXRpb24gb2JqZWN0cyBzb21ldGltZXMuCiAgICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogZ2V0IHJpZCBvZiB0aGlzIG9uY2UgdGhlIHR5cGUgcGFyYW1ldGVyIGlzCiAgICAgIC8vIEtlcm5lbFZhcmlhYmxlRGVjbGFyYXRpb24uCiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHdhc1ZhcmlhYmxlTXV0YXRlZEFueXdoZXJlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpIHsKICAgIGlmICh2YXJpYWJsZSBpcyBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQpIHsKICAgICAgcmV0dXJuIHZhcmlhYmxlLl9tdXRhdGVkQW55d2hlcmU7CiAgICB9IGVsc2UgewogICAgICAvLyBIYWNrIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB0aGF0IEJvZHlCdWlsZGVyIHN0aWxsIGNyZWF0ZXMgcmF3CiAgICAgIC8vIFZhcmlhYmxlRGVjbGFyYXRpb24gb2JqZWN0cyBzb21ldGltZXMuCiAgICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogZ2V0IHJpZCBvZiB0aGlzIG9uY2UgdGhlIHR5cGUgcGFyYW1ldGVyIGlzCiAgICAgIC8vIEtlcm5lbFZhcmlhYmxlRGVjbGFyYXRpb24uCiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KfQoKY2xhc3MgVmFyaWFibGVBc3NpZ25tZW50SnVkZ21lbnQgZXh0ZW5kcyBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHsKICBWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudC5fKEV4cHJlc3Npb24gcmhzKSA6IHN1cGVyLl8ocmhzKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSB2YXJpYWJsZSBkZWNsYXJhdGlvbiBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50IGV4dGVuZHMgVmFyaWFibGVEZWNsYXJhdGlvbgogICAgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgZmluYWwgYm9vbCBmb3JTeW50aGV0aWNUb2tlbjsKCiAgZmluYWwgYm9vbCBfaW1wbGljaXRseVR5cGVkOwoKICAvLyBUT0RPKGFoZSk6IFJlbW92ZSB0aGlzIGZpZWxkLiBXZSBjYW4gZ2V0IHJpZCBvZiBpdCBieSByZWNvcmRpbmcgY2xvc3VyZQogIC8vIG11dGF0aW9uIGluIFtCb2R5QnVpbGRlcl0uCiAgZmluYWwgaW50IF9mdW5jdGlvbk5lc3RpbmdMZXZlbDsKCiAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcyBmaWVsZC4gSXQncyBvbmx5IHVzZWQgbG9jYWxseSB3aGVuIGNvbXBpbGluZyBhCiAgLy8gbWV0aG9kLCBhbmQgdGhpcyBjYW4gdGh1cyBiZSB0cmFja2VkIGluIGEgW1NldF0gKGFjdHVhbGx5LCB0cmFja2luZyB0aGlzCiAgLy8gaW5mb3JtYXRpb24gaW4gYSBbTGlzdF0gaXMgcHJvYmFibHkgZXZlbiBmYXN0ZXIgYXMgdGhlIGF2ZXJhZ2Ugc2l6ZSB3aWxsCiAgLy8gYmUgY2xvc2UgdG8gemVybykuCiAgYm9vbCBfbXV0YXRlZEluQ2xvc3VyZSA9IGZhbHNlOwoKICAvLyBUT0RPKGFoZSk6IEludmVzdGlnYXRlIGlmIHRoaXMgY2FuIGJlIHJlbW92ZWQuCiAgYm9vbCBfbXV0YXRlZEFueXdoZXJlID0gZmFsc2U7CgogIC8vIFRPRE8oYWhlKTogSW52ZXN0aWdhdGUgaWYgdGhpcyBjYW4gYmUgcmVtb3ZlZC4KICBmaW5hbCBib29sIF9pc0xvY2FsRnVuY3Rpb247CgogIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudChTdHJpbmcgbmFtZSwgdGhpcy5fZnVuY3Rpb25OZXN0aW5nTGV2ZWwsCiAgICAgIHt0aGlzLmZvclN5bnRoZXRpY1Rva2VuOiBmYWxzZSwKICAgICAgRXhwcmVzc2lvbiBpbml0aWFsaXplciwKICAgICAgRGFydFR5cGUgdHlwZSwKICAgICAgYm9vbCBpc0ZpbmFsOiBmYWxzZSwKICAgICAgYm9vbCBpc0NvbnN0OiBmYWxzZSwKICAgICAgYm9vbCBpc0ZpZWxkRm9ybWFsOiBmYWxzZSwKICAgICAgYm9vbCBpc0NvdmFyaWFudDogZmFsc2UsCiAgICAgIGJvb2wgaXNMb2NhbEZ1bmN0aW9uOiBmYWxzZX0pCiAgICAgIDogX2ltcGxpY2l0bHlUeXBlZCA9IHR5cGUgPT0gbnVsbCwKICAgICAgICBfaXNMb2NhbEZ1bmN0aW9uID0gaXNMb2NhbEZ1bmN0aW9uLAogICAgICAgIHN1cGVyKG5hbWUsCiAgICAgICAgICAgIGluaXRpYWxpemVyOiBpbml0aWFsaXplciwKICAgICAgICAgICAgdHlwZTogdHlwZSA/PyBjb25zdCBEeW5hbWljVHlwZSgpLAogICAgICAgICAgICBpc0ZpbmFsOiBpc0ZpbmFsLAogICAgICAgICAgICBpc0NvbnN0OiBpc0NvbnN0LAogICAgICAgICAgICBpc0ZpZWxkRm9ybWFsOiBpc0ZpZWxkRm9ybWFsLAogICAgICAgICAgICBpc0NvdmFyaWFudDogaXNDb3ZhcmlhbnQpOwoKICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQuZm9yRWZmZWN0KAogICAgICBFeHByZXNzaW9uIGluaXRpYWxpemVyLCB0aGlzLl9mdW5jdGlvbk5lc3RpbmdMZXZlbCkKICAgICAgOiBmb3JTeW50aGV0aWNUb2tlbiA9IGZhbHNlLAogICAgICAgIF9pbXBsaWNpdGx5VHlwZWQgPSBmYWxzZSwKICAgICAgICBfaXNMb2NhbEZ1bmN0aW9uID0gZmFsc2UsCiAgICAgICAgc3VwZXIuZm9yVmFsdWUoaW5pdGlhbGl6ZXIpOwoKICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQuZm9yVmFsdWUoCiAgICAgIEV4cHJlc3Npb24gaW5pdGlhbGl6ZXIsIHRoaXMuX2Z1bmN0aW9uTmVzdGluZ0xldmVsKQogICAgICA6IGZvclN5bnRoZXRpY1Rva2VuID0gZmFsc2UsCiAgICAgICAgX2ltcGxpY2l0bHlUeXBlZCA9IHRydWUsCiAgICAgICAgX2lzTG9jYWxGdW5jdGlvbiA9IGZhbHNlLAogICAgICAgIHN1cGVyLmZvclZhbHVlKGluaXRpYWxpemVyKTsKCiAgRXhwcmVzc2lvbiBnZXQgaW5pdGlhbGl6ZXJKdWRnbWVudCA9PiBpbml0aWFsaXplcjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCh0aGlzKTsKICB9CgogIC8vLyBEZXRlcm1pbmUgd2hldGhlciB0aGUgZ2l2ZW4gW1ZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudF0gaGFkIGFuIGltcGxpY2l0CiAgLy8vIHR5cGUuCiAgLy8vCiAgLy8vIFRoaXMgaXMgc3RhdGljIHRvIGF2b2lkIGludHJvZHVjaW5nIGEgbWV0aG9kIHRoYXQgd291bGQgYmUgdmlzaWJsZSB0bwogIC8vLyB0aGUga2VybmVsLgogIHN0YXRpYyBib29sIGlzSW1wbGljaXRseVR5cGVkKFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCB2YXJpYWJsZSkgPT4KICAgICAgdmFyaWFibGUuX2ltcGxpY2l0bHlUeXBlZDsKCiAgLy8vIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gW1ZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudF0gcmVwcmVzZW50cyBhCiAgLy8vIGxvY2FsIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBUaGlzIGlzIHN0YXRpYyB0byBhdm9pZCBpbnRyb2R1Y2luZyBhIG1ldGhvZCB0aGF0IHdvdWxkIGJlIHZpc2libGUgdG8gdGhlCiAgLy8vIGtlcm5lbC4KICBzdGF0aWMgYm9vbCBpc0xvY2FsRnVuY3Rpb24oVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50IHZhcmlhYmxlKSA9PgogICAgICB2YXJpYWJsZS5faXNMb2NhbEZ1bmN0aW9uOwp9CgovLy8gU3ludGhldGljIGp1ZGdtZW50IGNsYXNzIHJlcHJlc2VudGluZyBhbiBhdHRlbXB0IHRvIGludm9rZSBhbiB1bnJlc29sdmVkCi8vLyB0YXJnZXQuCmNsYXNzIFVucmVzb2x2ZWRUYXJnZXRJbnZvY2F0aW9uSnVkZ21lbnQgZXh0ZW5kcyBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQgewogIGZpbmFsIEFyZ3VtZW50c0p1ZGdtZW50IGFyZ3VtZW50c0p1ZGdtZW50OwoKICBVbnJlc29sdmVkVGFyZ2V0SW52b2NhdGlvbkp1ZGdtZW50Ll8oCiAgICAgIGtlcm5lbC5FeHByZXNzaW9uIGRlc3VnYXJlZCwgdGhpcy5hcmd1bWVudHNKdWRnbWVudCkKICAgICAgOiBzdXBlci5fKGRlc3VnYXJlZCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvciwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0VW5yZXNvbHZlZFRhcmdldEludm9jYXRpb25KdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gU3ludGhldGljIGp1ZGdtZW50IGNsYXNzIHJlcHJlc2VudGluZyBhbiBhdHRlbXB0IHRvIGFzc2lnbiB0byBhbiB1bnJlc29sdmVkCi8vLyB2YXJpYWJsZS4KY2xhc3MgVW5yZXNvbHZlZFZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50IGV4dGVuZHMgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBmaW5hbCBib29sIGlzQ29tcG91bmQ7CiAgZmluYWwgRXhwcmVzc2lvbiByaHM7CgogIFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudC5fKAogICAgICBrZXJuZWwuRXhwcmVzc2lvbiBkZXN1Z2FyZWQsIHRoaXMuaXNDb21wb3VuZCwgdGhpcy5yaHMpCiAgICAgIDogc3VwZXIuXyhkZXN1Z2FyZWQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudCh0aGlzLCB0eXBlQ29udGV4dCk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSByZWFkIGZyb20gYSB2YXJpYWJsZSBpbiBrZXJuZWwgZm9ybS4KY2xhc3MgVmFyaWFibGVHZXRKdWRnbWVudCBleHRlbmRzIFZhcmlhYmxlR2V0IGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIGZpbmFsIFR5cGVQcm9tb3Rpb25GYWN0IF9mYWN0OwoKICBmaW5hbCBUeXBlUHJvbW90aW9uU2NvcGUgX3Njb3BlOwoKICBWYXJpYWJsZUdldEp1ZGdtZW50KFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIHRoaXMuX2ZhY3QsIHRoaXMuX3Njb3BlKQogICAgICA6IHN1cGVyKHZhcmlhYmxlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRWYXJpYWJsZUdldEp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBDb25jcmV0ZSBzaGFkb3cgb2JqZWN0IHJlcHJlc2VudGluZyBhIHdoaWxlIGxvb3AgaW4ga2VybmVsIGZvcm0uCmNsYXNzIFdoaWxlSnVkZ21lbnQgZXh0ZW5kcyBXaGlsZVN0YXRlbWVudCBpbXBsZW1lbnRzIFN0YXRlbWVudEp1ZGdtZW50IHsKICBXaGlsZUp1ZGdtZW50KEV4cHJlc3Npb24gY29uZGl0aW9uLCBTdGF0ZW1lbnQgYm9keSkgOiBzdXBlcihjb25kaXRpb24sIGJvZHkpOwoKICBFeHByZXNzaW9uIGdldCBjb25kaXRpb25KdWRnbWVudCA9PiBjb25kaXRpb247CgogIEBvdmVycmlkZQogIHZvaWQgYWNjZXB0SW5mZXJlbmNlKEluZmVyZW5jZVZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRXaGlsZUp1ZGdtZW50KHRoaXMpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgeWllbGQgc3RhdGVtZW50IGluIGtlcm5lbCBmb3JtLgpjbGFzcyBZaWVsZEp1ZGdtZW50IGV4dGVuZHMgWWllbGRTdGF0ZW1lbnQgaW1wbGVtZW50cyBTdGF0ZW1lbnRKdWRnbWVudCB7CiAgWWllbGRKdWRnbWVudChib29sIGlzWWllbGRTdGFyLCBFeHByZXNzaW9uIGV4cHJlc3Npb24pCiAgICAgIDogc3VwZXIoZXhwcmVzc2lvbiwgaXNZaWVsZFN0YXI6IGlzWWllbGRTdGFyKTsKCiAgRXhwcmVzc2lvbiBnZXQganVkZ21lbnQgPT4gZXhwcmVzc2lvbjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHRJbmZlcmVuY2UoSW5mZXJlbmNlVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFlpZWxkSnVkZ21lbnQodGhpcyk7CiAgfQp9CgovLy8gQ29uY3JldGUgc2hhZG93IG9iamVjdCByZXByZXNlbnRpbmcgYSBkZWZlcnJlZCBsb2FkIGxpYnJhcnkgY2FsbC4KY2xhc3MgTG9hZExpYnJhcnlKdWRnbWVudCBleHRlbmRzIExvYWRMaWJyYXJ5IGltcGxlbWVudHMgRXhwcmVzc2lvbkp1ZGdtZW50IHsKICBmaW5hbCBBcmd1bWVudHMgYXJndW1lbnRzOwoKICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CgogIExvYWRMaWJyYXJ5SnVkZ21lbnQoTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0LCB0aGlzLmFyZ3VtZW50cykgOiBzdXBlcihpbXBvcnQpOwoKICBBcmd1bWVudHNKdWRnbWVudCBnZXQgYXJndW1lbnRKdWRnbWVudHMgPT4gYXJndW1lbnRzOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdExvYWRMaWJyYXJ5SnVkZ21lbnQodGhpcywgdHlwZUNvbnRleHQpOwogIH0KfQoKLy8vIENvbmNyZXRlIHNoYWRvdyBvYmplY3QgcmVwcmVzZW50aW5nIGEgdGVhci1vZmYgb2YgYSBgbG9hZExpYnJhcnlgIGZ1bmN0aW9uLgpjbGFzcyBMb2FkTGlicmFyeVRlYXJPZmZKdWRnbWVudCBleHRlbmRzIFN0YXRpY0dldAogICAgaW1wbGVtZW50cyBFeHByZXNzaW9uSnVkZ21lbnQgewogIGZpbmFsIExpYnJhcnlEZXBlbmRlbmN5IGltcG9ydDsKCiAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwoKICBMb2FkTGlicmFyeVRlYXJPZmZKdWRnbWVudCh0aGlzLmltcG9ydCwgUHJvY2VkdXJlIHRhcmdldCkgOiBzdXBlcih0YXJnZXQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFjY2VwdEluZmVyZW5jZShJbmZlcmVuY2VWaXNpdG9yIHZpc2l0b3IsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdExvYWRMaWJyYXJ5VGVhck9mZkp1ZGdtZW50KHRoaXMsIHR5cGVDb250ZXh0KTsKICB9Cn0KCi8vLyBUaGUgcmVzdWx0IG9mIGluZmVyZW5jZSBmb3IgYSBSSFMgb2YgYW4gYXNzaWdubWVudC4KY2xhc3MgX0NvbXBsZXhBc3NpZ25tZW50SW5mZXJlbmNlUmVzdWx0IHsKICAvLy8gVGhlIHJlc29sdmVkIGNvbWJpbmVyIFtQcm9jZWR1cmVdLCBlLmcuIGBvcGVyYXRvcitgIGZvciBgYSArPSAyYCwgb3IKICAvLy8gYG51bGxgIGlmIHRoZSBhc3NpZ25tZW50IGlzIG5vdCBjb21wb3VuZC4KICBmaW5hbCBQcm9jZWR1cmUgY29tYmluZXI7CgogIF9Db21wbGV4QXNzaWdubWVudEluZmVyZW5jZVJlc3VsdCh0aGlzLmNvbWJpbmVyKTsKfQoKY2xhc3MgX1VuZmluaXNoZWRDYXNjYWRlIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgYWNjZXB0KHYpID0+IHVuc3VwcG9ydGVkKCJhY2NlcHQiLCAtMSwgbnVsbCk7CgogIGFjY2VwdDEodiwgYXJnKSA9PiB1bnN1cHBvcnRlZCgiYWNjZXB0MSIsIC0xLCBudWxsKTsKCiAgZ2V0U3RhdGljVHlwZSh0eXBlcykgPT4gdW5zdXBwb3J0ZWQoImdldFN0YXRpY1R5cGUiLCAtMSwgbnVsbCk7CgogIHRyYW5zZm9ybUNoaWxkcmVuKHYpID0+IHVuc3VwcG9ydGVkKCJ0cmFuc2Zvcm1DaGlsZHJlbiIsIC0xLCBudWxsKTsKCiAgdmlzaXRDaGlsZHJlbih2KSA9PiB1bnN1cHBvcnRlZCgidmlzaXRDaGlsZHJlbiIsIC0xLCBudWxsKTsKfQoKY2xhc3MgU3ludGhldGljV3JhcHBlciB7CiAgc3RhdGljIEV4cHJlc3Npb24gd3JhcElsbGVnYWxBc3NpZ25tZW50KEV4cHJlc3Npb24gcmhzLAogICAgICB7aW50IGFzc2lnbm1lbnRPZmZzZXQ6IC0xfSkgewogICAgcmV0dXJuIG5ldyBJbGxlZ2FsQXNzaWdubWVudEp1ZGdtZW50Ll8ocmhzLAogICAgICAgIGFzc2lnbm1lbnRPZmZzZXQ6IGFzc2lnbm1lbnRPZmZzZXQpCiAgICAgIC4uZmlsZU9mZnNldCA9IHJocy5maWxlT2Zmc2V0OwogIH0KCiAgc3RhdGljIEV4cHJlc3Npb24gd3JhcEluZGV4QXNzaWdubWVudCgKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwgRXhwcmVzc2lvbiBpbmRleCwgRXhwcmVzc2lvbiByaHMsCiAgICAgIHtib29sIGlzU3VwZXI6IGZhbHNlfSkgewogICAgcmV0dXJuIG5ldyBJbmRleEFzc2lnbm1lbnRKdWRnbWVudC5fKHJlY2VpdmVyLCBpbmRleCwgcmhzLCBpc1N1cGVyOiBpc1N1cGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBpbmRleC5maWxlT2Zmc2V0OwogIH0KCiAgc3RhdGljIEV4cHJlc3Npb24gd3JhcEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgIGtlcm5lbC5FeHByZXNzaW9uIGRlc3VnYXJlZCwgTWVtYmVyIGNvbnN0cnVjdG9yLCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudC5fKAogICAgICAgIGRlc3VnYXJlZCwgY29uc3RydWN0b3IsIGFyZ3VtZW50cykKICAgICAgLi5maWxlT2Zmc2V0ID0gZGVzdWdhcmVkLmZpbGVPZmZzZXQ7CiAgfQoKICBzdGF0aWMgRXhwcmVzc2lvbiB3cmFwSW52YWxpZFdyaXRlKAogICAgICBFeHByZXNzaW9uIGRlc3VnYXJlZCwgRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICByZXR1cm4gbmV3IEludmFsaWRXcml0ZUp1ZGdtZW50Ll8oZGVzdWdhcmVkLCBleHByZXNzaW9uKQogICAgICAuLmZpbGVPZmZzZXQgPSBkZXN1Z2FyZWQuZmlsZU9mZnNldDsKICB9CgogIHN0YXRpYyBFeHByZXNzaW9uIHdyYXBQcm9wZXJ0eUFzc2lnbm1lbnQoRXhwcmVzc2lvbiByZWNlaXZlciwgRXhwcmVzc2lvbiByaHMsCiAgICAgIHtib29sIGlzU3VwZXI6IGZhbHNlfSkgewogICAgcmV0dXJuIG5ldyBQcm9wZXJ0eUFzc2lnbm1lbnRKdWRnbWVudC5fKHJlY2VpdmVyLCByaHMsIGlzU3VwZXI6IGlzU3VwZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IHJocy5maWxlT2Zmc2V0OwogIH0KCiAgc3RhdGljIEV4cHJlc3Npb24gd3JhcFN0YXRpY0Fzc2lnbm1lbnQoRXhwcmVzc2lvbiByaHMpIHsKICAgIHJldHVybiBuZXcgU3RhdGljQXNzaWdubWVudEp1ZGdtZW50Ll8ocmhzKS4uZmlsZU9mZnNldCA9IHJocy5maWxlT2Zmc2V0OwogIH0KCiAgc3RhdGljIEV4cHJlc3Npb24gd3JhcFN5bnRoZXRpY0V4cHJlc3Npb24oRXhwcmVzc2lvbiBkZXN1Z2FyZWQpIHsKICAgIHJldHVybiBuZXcgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50Ll8oZGVzdWdhcmVkKQogICAgICAuLmZpbGVPZmZzZXQgPSBkZXN1Z2FyZWQuZmlsZU9mZnNldDsKICB9CgogIHN0YXRpYyBFeHByZXNzaW9uIHdyYXBVbnJlc29sdmVkVGFyZ2V0SW52b2NhdGlvbigKICAgICAgRXhwcmVzc2lvbiBkZXN1Z2FyZWQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgVW5yZXNvbHZlZFRhcmdldEludm9jYXRpb25KdWRnbWVudC5fKGRlc3VnYXJlZCwgYXJndW1lbnRzKQogICAgICAuLmZpbGVPZmZzZXQgPSBkZXN1Z2FyZWQuZmlsZU9mZnNldDsKICB9CgogIHN0YXRpYyBFeHByZXNzaW9uIHdyYXBVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50KAogICAgICBFeHByZXNzaW9uIGRlc3VnYXJlZCwgYm9vbCBpc0NvbXBvdW5kLCBFeHByZXNzaW9uIHJocykgewogICAgcmV0dXJuIG5ldyBVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50SnVkZ21lbnQuXygKICAgICAgICBkZXN1Z2FyZWQsIGlzQ29tcG91bmQsIHJocykKICAgICAgLi5maWxlT2Zmc2V0ID0gZGVzdWdhcmVkLmZpbGVPZmZzZXQ7CiAgfQoKICBzdGF0aWMgRXhwcmVzc2lvbiB3cmFwVmFyaWFibGVBc3NpZ25tZW50KEV4cHJlc3Npb24gcmhzKSB7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50Ll8ocmhzKS4uZmlsZU9mZnNldCA9IHJocy5maWxlT2Zmc2V0OwogIH0KfQqHDgBOTjwBTUgRBEsYBE1PTBQETkwlASIBSQEiAT0BKQkZJyUpAR0JNTUpMx8SLzMqLCs2OCwkLzYBQwFGAUoBRwE2RAEuRAEvUAE+AU4BODwBMwEaCR0UFhcVExQXGBoBMQFAAR8jAUJBJDALLAQCAT8oSQtMRiURBAIBPxsuJAFQTzoBTSgBQR4BJAIBRywiAUEBMTtHNwEtOx0jMAQBTh0xBAIBTjolSwE1AQwzOQQCAU82IzBOGR44NQExAS0BDDM3BAIBSkFBAS8BDDMtBAIBPgRQEAQVHSEWBEpPRQQ+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aWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mICJrZXJuZWxfc2hhZG93X2FzdC5kYXJ0IjsKCmNsYXNzIEluZmVyZW5jZVZpc2l0b3IgZXh0ZW5kcyBCb2R5VmlzaXRvcjE8dm9pZCwgRGFydFR5cGU+IHsKICBmaW5hbCBTaGFkb3dUeXBlSW5mZXJyZXIgaW5mZXJyZXI7CgogIENsYXNzIG1hcEVudHJ5Q2xhc3M7CgogIC8vIFN0b3JlcyB0aGUgb2Zmc2V0IG9mIHRoZSBtYXAgZW50cnkgZm91bmQgYnkgaW5mZXJNYXBFbnRyeS4KICBpbnQgbWFwRW50cnlPZmZzZXQgPSBudWxsOwoKICAvLyBTdG9yZXMgdGhlIG9mZnNldCBvZiB0aGUgbWFwIHNwcmVhZCBmb3VuZCBieSBpbmZlck1hcEVudHJ5LgogIGludCBtYXBTcHJlYWRPZmZzZXQgPSBudWxsOwoKICAvLyBTdG9yZXMgdGhlIG9mZnNldCBvZiB0aGUgaXRlcmFibGUgc3ByZWFkIGZvdW5kIGJ5IGluZmVyTWFwRW50cnkuCiAgaW50IGl0ZXJhYmxlU3ByZWFkT2Zmc2V0ID0gbnVsbDsKCiAgLy8gU3RvcmVzIHRoZSB0eXBlIG9mIHRoZSBpdGVyYWJsZSBzcHJlYWQgZm91bmQgYnkgaW5mZXJNYXBFbnRyeS4KICBEYXJ0VHlwZSBpdGVyYWJsZVNwcmVhZFR5cGUgPSBudWxsOwoKICBJbmZlcmVuY2VWaXNpdG9yKHRoaXMuaW5mZXJyZXIpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHRFeHByZXNzaW9uKEV4cHJlc3Npb24gbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHVuaGFuZGxlZCgiJHtub2RlLnJ1bnRpbWVUeXBlfSIsICJJbmZlcmVuY2VWaXNpdG9yIiwgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgIGluZmVycmVyLmhlbHBlci51cmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0U3RhdGVtZW50KFN0YXRlbWVudCBub2RlLCBfKSB7CiAgICB1bmhhbmRsZWQoIiR7bm9kZS5ydW50aW1lVHlwZX0iLCAiSW5mZXJlbmNlVmlzaXRvciIsIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICBpbmZlcnJlci5oZWxwZXIudXJpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnZhbGlkRXhwcmVzc2lvbihJbnZhbGlkRXhwcmVzc2lvbiBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludExpdGVyYWwoSW50TGl0ZXJhbCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERvdWJsZUxpdGVyYWwoRG91YmxlTGl0ZXJhbCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFzRXhwcmVzc2lvbihBc0V4cHJlc3Npb24gbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICBub2RlLm9wZXJhbmQsIGNvbnN0IFVua25vd25UeXBlKCksICFpbmZlcnJlci5pc1RvcExldmVsLAogICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogIH0KCiAgdm9pZCB2aXNpdEFzc2VydEluaXRpYWxpemVySnVkZ21lbnQoQXNzZXJ0SW5pdGlhbGl6ZXJKdWRnbWVudCBub2RlKSB7CiAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChub2RlLmp1ZGdtZW50KTsKICB9CgogIHZvaWQgdmlzaXRBc3NlcnRTdGF0ZW1lbnRKdWRnbWVudChBc3NlcnRTdGF0ZW1lbnRKdWRnbWVudCBub2RlKSB7CiAgICB2YXIgY29uZGl0aW9uSnVkZ21lbnQgPSBub2RlLmNvbmRpdGlvbkp1ZGdtZW50OwogICAgdmFyIG1lc3NhZ2VKdWRnbWVudCA9IG5vZGUubWVzc2FnZUp1ZGdtZW50OwogICAgdmFyIGV4cGVjdGVkVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZTsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICBjb25kaXRpb25KdWRnbWVudCwgZXhwZWN0ZWRUeXBlLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgIGV4cGVjdGVkVHlwZSwKICAgICAgICBnZXRJbmZlcnJlZFR5cGUoY29uZGl0aW9uSnVkZ21lbnQsIGluZmVycmVyKSwKICAgICAgICBjb25kaXRpb25KdWRnbWVudCwKICAgICAgICBjb25kaXRpb25KdWRnbWVudC5maWxlT2Zmc2V0KTsKICAgIGlmIChtZXNzYWdlSnVkZ21lbnQgIT0gbnVsbCkgewogICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICBtZXNzYWdlSnVkZ21lbnQsIGNvbnN0IFVua25vd25UeXBlKCksICFpbmZlcnJlci5pc1RvcExldmVsKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBd2FpdEV4cHJlc3Npb24oQXdhaXRFeHByZXNzaW9uIG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBpZiAoIWluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC5pc0VtcHR5Q29udGV4dCh0eXBlQ29udGV4dCkpIHsKICAgICAgdHlwZUNvbnRleHQgPSBpbmZlcnJlci53cmFwRnV0dXJlT3JUeXBlKHR5cGVDb250ZXh0KTsKICAgIH0KICAgIHZhciBvcGVyYW5kID0gbm9kZS5vcGVyYW5kOwogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKG9wZXJhbmQsIHR5cGVDb250ZXh0LCB0cnVlLCBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgIGluZmVycmVyLnN0b3JlSW5mZXJyZWRUeXBlKAogICAgICAgIG5vZGUsCiAgICAgICAgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50CiAgICAgICAgICAgIC51bmZ1dHVyZVR5cGUoZ2V0SW5mZXJyZWRUeXBlKG9wZXJhbmQsIGluZmVycmVyKSkpOwogIH0KCiAgdm9pZCB2aXNpdEJsb2NrSnVkZ21lbnQoQmxvY2tKdWRnbWVudCBub2RlKSB7CiAgICBmb3IgKHZhciBqdWRnbWVudCBpbiBub2RlLmp1ZGdtZW50cykgewogICAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChqdWRnbWVudCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm9vbExpdGVyYWwoQm9vbExpdGVyYWwgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCcmVha1N0YXRlbWVudChCcmVha1N0YXRlbWVudCBub2RlLCBfKSB7CiAgICAvLyBObyBpbmZlcmVuY2UgbmVlZHMgdG8gYmUgZG9uZS4KICB9CgogIHZvaWQgdmlzaXRDYXNjYWRlSnVkZ21lbnQoQ2FzY2FkZUp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBub2RlLmluZmVycmVkVHlwZSA9CiAgICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKG5vZGUudGFyZ2V0SnVkZ21lbnQsIHR5cGVDb250ZXh0LCB0cnVlKTsKICAgIG5vZGUudmFyaWFibGUudHlwZSA9IGdldEluZmVycmVkVHlwZShub2RlLCBpbmZlcnJlcik7CiAgICBmb3IgKHZhciBqdWRnbWVudCBpbiBub2RlLmNhc2NhZGVKdWRnbWVudHMpIHsKICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAganVkZ21lbnQsIGNvbnN0IFVua25vd25UeXBlKCksICFpbmZlcnJlci5pc1RvcExldmVsLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgIENvbmRpdGlvbmFsRXhwcmVzc2lvbiBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgdmFyIGNvbmRpdGlvbiA9IG5vZGUuY29uZGl0aW9uOwogICAgdmFyIHRoZW4gPSBub2RlLnRoZW47CiAgICB2YXIgb3RoZXJ3aXNlID0gbm9kZS5vdGhlcndpc2U7CiAgICB2YXIgZXhwZWN0ZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKGNvbmRpdGlvbiwgZXhwZWN0ZWRUeXBlLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgIGV4cGVjdGVkVHlwZSwKICAgICAgICBnZXRJbmZlcnJlZFR5cGUoY29uZGl0aW9uLCBpbmZlcnJlciksCiAgICAgICAgbm9kZS5jb25kaXRpb24sCiAgICAgICAgbm9kZS5jb25kaXRpb24uZmlsZU9mZnNldCk7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24odGhlbiwgdHlwZUNvbnRleHQsIHRydWUsIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKG90aGVyd2lzZSwgdHlwZUNvbnRleHQsIHRydWUsIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50CiAgICAgICAgLmdldFN0YW5kYXJkVXBwZXJCb3VuZChnZXRJbmZlcnJlZFR5cGUodGhlbiwgaW5mZXJyZXIpLAogICAgICAgICAgICBnZXRJbmZlcnJlZFR5cGUob3RoZXJ3aXNlLCBpbmZlcnJlcikpOwogICAgbm9kZS5zdGF0aWNUeXBlID0gaW5mZXJyZWRUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICB2YXIgbGlicmFyeSA9IGluZmVycmVyLmVuZ2luZS5iZWluZ0luZmVycmVkW25vZGUudGFyZ2V0XTsKICAgIGlmIChsaWJyYXJ5ICE9IG51bGwpIHsKICAgICAgLy8gVGhlcmUgaXMgYSBjeWNsaWMgZGVwZW5kZW5jeSB3aGVyZSBpbmZlcnJpbmcgdGhlIHR5cGVzIG9mIHRoZQogICAgICAvLyBpbml0aWFsaXppbmcgZm9ybWFscyBvZiBhIGNvbnN0cnVjdG9yIHJlcXVpcmVkIHVzIHRvIGluZmVyIHRoZQogICAgICAvLyBjb3JyZXNwb25kaW5nIGZpZWxkIHR5cGUgd2hpY2ggcmVxdWlyZWQgdXMgdG8ga25vdyB0aGUgdHlwZSBvZiB0aGUKICAgICAgLy8gY29uc3RydWN0b3IuCiAgICAgIFN0cmluZyBuYW1lID0gbm9kZS50YXJnZXQuZW5jbG9zaW5nQ2xhc3MubmFtZTsKICAgICAgaWYgKG5vZGUudGFyZ2V0Lm5hbWUubmFtZS5pc05vdEVtcHR5KSB7CiAgICAgICAgLy8gVE9ETyhhaGUpOiBVc2UgYGluZmVycmVyLmhlbHBlci5jb25zdHJ1Y3Rvck5hbWVGb3JEaWFnbm9zdGljc2AKICAgICAgICAvLyBpbnN0ZWFkLiBIb3dldmVyLCBgaW5mZXJyZXIuaGVscGVyYCBtYXkgYmUgbnVsbC4KICAgICAgICBuYW1lICs9ICIuJHtub2RlLnRhcmdldC5uYW1lLm5hbWV9IjsKICAgICAgfQogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICB0ZW1wbGF0ZUNhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5LndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBub2RlLnRhcmdldC5maWxlT2Zmc2V0LAogICAgICAgICAgbmFtZS5sZW5ndGgsCiAgICAgICAgICBub2RlLnRhcmdldC5maWxlVXJpKTsKICAgICAgZm9yICh2YXIgZGVjbGFyYXRpb24gaW4gbm9kZS50YXJnZXQuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgICBkZWNsYXJhdGlvbi50eXBlID8/PSBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgICB9CiAgICAgIGZvciAodmFyIGRlY2xhcmF0aW9uIGluIG5vZGUudGFyZ2V0LmZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycykgewogICAgICAgIGRlY2xhcmF0aW9uLnR5cGUgPz89IGNvbnN0IEludmFsaWRUeXBlKCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoKGxpYnJhcnkgPSBpbmZlcnJlci5lbmdpbmUudG9CZUluZmVycmVkW25vZGUudGFyZ2V0XSkgIT0gbnVsbCkgewogICAgICBpbmZlcnJlci5lbmdpbmUudG9CZUluZmVycmVkLnJlbW92ZShub2RlLnRhcmdldCk7CiAgICAgIGluZmVycmVyLmVuZ2luZS5iZWluZ0luZmVycmVkW25vZGUudGFyZ2V0XSA9IGxpYnJhcnk7CiAgICAgIGZvciAodmFyIGRlY2xhcmF0aW9uIGluIG5vZGUudGFyZ2V0LmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgICAgaW5mZXJyZXIuZW5naW5lLmluZmVySW5pdGlhbGl6aW5nRm9ybWFsKGRlY2xhcmF0aW9uLCBub2RlLnRhcmdldCk7CiAgICAgIH0KICAgICAgZm9yICh2YXIgZGVjbGFyYXRpb24gaW4gbm9kZS50YXJnZXQuZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgICAgaW5mZXJyZXIuZW5naW5lLmluZmVySW5pdGlhbGl6aW5nRm9ybWFsKGRlY2xhcmF0aW9uLCBub2RlLnRhcmdldCk7CiAgICAgIH0KICAgICAgaW5mZXJyZXIuZW5naW5lLmJlaW5nSW5mZXJyZWQucmVtb3ZlKG5vZGUudGFyZ2V0KTsKICAgIH0KICAgIGJvb2wgaGFzRXhwbGljaXRUeXBlQXJndW1lbnRzID0KICAgICAgICBnZXRFeHBsaWNpdFR5cGVBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpICE9IG51bGw7CiAgICB2YXIgaW5mZXJlbmNlUmVzdWx0ID0gaW5mZXJyZXIuaW5mZXJJbnZvY2F0aW9uKAogICAgICAgIHR5cGVDb250ZXh0LAogICAgICAgIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICBub2RlLnRhcmdldC5mdW5jdGlvbi5mdW5jdGlvblR5cGUsCiAgICAgICAgY29tcHV0ZUNvbnN0cnVjdG9yUmV0dXJuVHlwZShub2RlLnRhcmdldCksCiAgICAgICAgbm9kZS5hcmd1bWVudHMsCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICAgIGluZmVycmVyLnN0b3JlSW5mZXJyZWRUeXBlKG5vZGUsIGluZmVyZW5jZVJlc3VsdC50eXBlKTsKICAgIGlmICghaW5mZXJyZXIuaXNUb3BMZXZlbCkgewogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gaW5mZXJyZXIubGlicmFyeTsKICAgICAgaWYgKCFoYXNFeHBsaWNpdFR5cGVBcmd1bWVudHMpIHsKICAgICAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5Db25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgICAgIG5vZGUsIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudCwgaW5mZXJyZXIuaGVscGVyLnVyaSwKICAgICAgICAgICAgaW5mZXJyZWQ6IHRydWUpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0Q29udGludWVTd2l0Y2hKdWRnbWVudChDb250aW51ZVN3aXRjaEp1ZGdtZW50IG5vZGUpIHsKICAgIC8vIE5vIGluZmVyZW5jZSBuZWVkcyB0byBiZSBkb25lLgogIH0KICB2b2lkIHZpc2l0RGVmZXJyZWRDaGVja0p1ZGdtZW50KAogICAgICBEZWZlcnJlZENoZWNrSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIC8vIFNpbmNlIHRoZSB2YXJpYWJsZSBpcyBub3QgdXNlZCBpbiB0aGUgYm9keSB3ZSBkb24ndCBuZWVkIHRvIHR5cGUgaW5mZXIKICAgIC8vIGl0LiAgV2UgY2FuIGp1c3QgdHlwZSBpbmZlciB0aGUgYm9keS4KICAgIHZhciBqdWRnbWVudCA9IG5vZGUuanVkZ21lbnQ7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oanVkZ21lbnQsIHR5cGVDb250ZXh0LCB0cnVlLCBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gZ2V0SW5mZXJyZWRUeXBlKGp1ZGdtZW50LCBpbmZlcnJlcik7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgdmlzaXREb0p1ZGdtZW50KERvSnVkZ21lbnQgbm9kZSkgewogICAgdmFyIGNvbmRpdGlvbkp1ZGdtZW50ID0gbm9kZS5jb25kaXRpb25KdWRnbWVudDsKICAgIGluZmVycmVyLmluZmVyU3RhdGVtZW50KG5vZGUuYm9keSk7CiAgICB2YXIgYm9vbFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGU7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oY29uZGl0aW9uSnVkZ21lbnQsIGJvb2xUeXBlLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgIGJvb2xUeXBlLAogICAgICAgIGdldEluZmVycmVkVHlwZShjb25kaXRpb25KdWRnbWVudCwgaW5mZXJyZXIpLAogICAgICAgIG5vZGUuY29uZGl0aW9uLAogICAgICAgIG5vZGUuY29uZGl0aW9uLmZpbGVPZmZzZXQpOwogIH0KCiAgdm9pZCB2aXNpdERvdWJsZUp1ZGdtZW50KERvdWJsZUp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBub2RlLmluZmVycmVkVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5kb3VibGVDbGFzcy5yYXdUeXBlOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHZpc2l0RW1wdHlTdGF0ZW1lbnRKdWRnbWVudChFbXB0eVN0YXRlbWVudEp1ZGdtZW50IG5vZGUpIHsKICAgIC8vIE5vIGluZmVyZW5jZSBuZWVkcyB0byBiZSBkb25lLgogIH0KICB2b2lkIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50KEV4cHJlc3Npb25TdGF0ZW1lbnRKdWRnbWVudCBub2RlKSB7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgbm9kZS5qdWRnbWVudCwgY29uc3QgVW5rbm93blR5cGUoKSwgIWluZmVycmVyLmlzVG9wTGV2ZWwsCiAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgfQoKICB2b2lkIHZpc2l0RmFjdG9yeUNvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50KAogICAgICBGYWN0b3J5Q29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIGJvb2wgaGFkRXhwbGljaXRUeXBlQXJndW1lbnRzID0KICAgICAgICBnZXRFeHBsaWNpdFR5cGVBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpICE9IG51bGw7CiAgICB2YXIgaW5mZXJlbmNlUmVzdWx0ID0gaW5mZXJyZXIuaW5mZXJJbnZvY2F0aW9uKAogICAgICAgIHR5cGVDb250ZXh0LAogICAgICAgIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICBub2RlLnRhcmdldC5mdW5jdGlvbi5mdW5jdGlvblR5cGUsCiAgICAgICAgY29tcHV0ZUNvbnN0cnVjdG9yUmV0dXJuVHlwZShub2RlLnRhcmdldCksCiAgICAgICAgbm9kZS5hcmd1bWVudEp1ZGdtZW50cywKICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QpOwogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBpbmZlcmVuY2VSZXN1bHQudHlwZTsKICAgIGlmICghaW5mZXJyZXIuaXNUb3BMZXZlbCkgewogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gaW5mZXJyZXIubGlicmFyeTsKICAgICAgaWYgKCFoYWRFeHBsaWNpdFR5cGVBcmd1bWVudHMpIHsKICAgICAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5GYWN0b3J5SW52b2NhdGlvbigKICAgICAgICAgICAgbm9kZSwgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LCBpbmZlcnJlci5oZWxwZXIudXJpLAogICAgICAgICAgICBpbmZlcnJlZDogdHJ1ZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCB2aXNpdFNoYWRvd0ZpZWxkSW5pdGlhbGl6ZXIoU2hhZG93RmllbGRJbml0aWFsaXplciBub2RlKSB7CiAgICB2YXIgaW5pdGlhbGl6ZXJUeXBlID0KICAgICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24obm9kZS52YWx1ZSwgbm9kZS5maWVsZC50eXBlLCB0cnVlKTsKICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgbm9kZS5maWVsZC50eXBlLCBpbml0aWFsaXplclR5cGUsIG5vZGUudmFsdWUsIG5vZGUuZmlsZU9mZnNldCk7CiAgfQoKICB2b2lkIGhhbmRsZUZvckluRGVjbGFyaW5nVmFyaWFibGUoCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIEV4cHJlc3Npb24gaXRlcmFibGUsIFN0YXRlbWVudCBib2R5LAogICAgICB7Ym9vbCBpc0FzeW5jOiBmYWxzZX0pIHsKICAgIERhcnRUeXBlIGVsZW1lbnRUeXBlOwogICAgYm9vbCB0eXBlTmVlZGVkID0gZmFsc2U7CiAgICBib29sIHR5cGVDaGVja3NOZWVkZWQgPSAhaW5mZXJyZXIuaXNUb3BMZXZlbDsKICAgIGlmIChWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQuaXNJbXBsaWNpdGx5VHlwZWQodmFyaWFibGUpKSB7CiAgICAgIHR5cGVOZWVkZWQgPSB0cnVlOwogICAgICBlbGVtZW50VHlwZSA9IGNvbnN0IFVua25vd25UeXBlKCk7CiAgICB9IGVsc2UgewogICAgICBlbGVtZW50VHlwZSA9IHZhcmlhYmxlLnR5cGU7CiAgICB9CgogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlID0gaW5mZXJGb3JJbkl0ZXJhYmxlKAogICAgICAgIGl0ZXJhYmxlLCBlbGVtZW50VHlwZSwgdHlwZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkLAogICAgICAgIGlzQXN5bmM6IGlzQXN5bmMpOwogICAgaWYgKHR5cGVOZWVkZWQpIHsKICAgICAgaW5mZXJyZXIuaW5zdHJ1bWVudGF0aW9uPy5yZWNvcmQoaW5mZXJyZXIudXJpLCB2YXJpYWJsZS5maWxlT2Zmc2V0LAogICAgICAgICAgJ3R5cGUnLCBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlKGluZmVycmVkVHlwZSkpOwogICAgICB2YXJpYWJsZS50eXBlID0gaW5mZXJyZWRUeXBlOwogICAgfQoKICAgIGlmIChib2R5ICE9IG51bGwpIGluZmVycmVyLmluZmVyU3RhdGVtZW50KGJvZHkpOwoKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdGVtcFZhciA9CiAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24obnVsbCwgdHlwZTogaW5mZXJyZWRUeXBlLCBpc0ZpbmFsOiB0cnVlKTsKICAgIFZhcmlhYmxlR2V0IHZhcmlhYmxlR2V0ID0gbmV3IFZhcmlhYmxlR2V0KHRlbXBWYXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IHZhcmlhYmxlLmZpbGVPZmZzZXQ7CiAgICBUcmVlTm9kZSBwYXJlbnQgPSB2YXJpYWJsZS5wYXJlbnQ7CiAgICBFeHByZXNzaW9uIGltcGxpY2l0RG93bmNhc3QgPSBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgIHZhcmlhYmxlLnR5cGUsIGluZmVycmVkVHlwZSwgdmFyaWFibGVHZXQsIHBhcmVudC5maWxlT2Zmc2V0LAogICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZUZvckluTG9vcEVsZW1lbnRUeXBlTm90QXNzaWduYWJsZSk7CiAgICBpZiAoaW1wbGljaXREb3duY2FzdCAhPSBudWxsKSB7CiAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQodmFyaWFibGUsIHRlbXBWYXIpOwogICAgICB2YXJpYWJsZS5pbml0aWFsaXplciA9IGltcGxpY2l0RG93bmNhc3QuLnBhcmVudCA9IHZhcmlhYmxlOwogICAgICBpZiAoYm9keSA9PSBudWxsKSB7CiAgICAgICAgaWYgKHBhcmVudCBpcyBGb3JJbkVsZW1lbnQpIHsKICAgICAgICAgIHBhcmVudC5wcm9sb2d1ZSA9IHZhcmlhYmxlOwogICAgICAgIH0gZWxzZSBpZiAocGFyZW50IGlzIEZvckluTWFwRW50cnkpIHsKICAgICAgICAgIHBhcmVudC5wcm9sb2d1ZSA9IHZhcmlhYmxlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB1bmhhbmRsZWQoIiR7cGFyZW50LnJ1bnRpbWVUeXBlfSIsICJoYW5kbGVGb3JJbkRlY2xhcmluZ1ZhcmlhYmxlIiwKICAgICAgICAgICAgICB2YXJpYWJsZS5maWxlT2Zmc2V0LCB2YXJpYWJsZS5sb2NhdGlvbi5maWxlKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZChib2R5LCBjb21iaW5lU3RhdGVtZW50cyh2YXJpYWJsZSwgYm9keSkpOwogICAgICB9CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBpbmZlckZvckluSXRlcmFibGUoCiAgICAgIEV4cHJlc3Npb24gaXRlcmFibGUsIERhcnRUeXBlIGVsZW1lbnRUeXBlLCBib29sIHR5cGVOZWVkZWQsCiAgICAgIHtib29sIGlzQXN5bmM6IGZhbHNlfSkgewogICAgQ2xhc3MgaXRlcmFibGVDbGFzcyA9IGlzQXN5bmMKICAgICAgICA/IGluZmVycmVyLmNvcmVUeXBlcy5zdHJlYW1DbGFzcwogICAgICAgIDogaW5mZXJyZXIuY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3M7CiAgICBEYXJ0VHlwZSBjb250ZXh0ID0gaW5mZXJyZXIud3JhcFR5cGUoZWxlbWVudFR5cGUsIGl0ZXJhYmxlQ2xhc3MpOwogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKGl0ZXJhYmxlLCBjb250ZXh0LCB0eXBlTmVlZGVkKTsKICAgIERhcnRUeXBlIGluZmVycmVkRXhwcmVzc2lvblR5cGUgPQogICAgICAgIGluZmVycmVyLnJlc29sdmVUeXBlUGFyYW1ldGVyKGdldEluZmVycmVkVHlwZShpdGVyYWJsZSwgaW5mZXJyZXIpKTsKICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgaW5mZXJyZXIud3JhcFR5cGUoY29uc3QgRHluYW1pY1R5cGUoKSwgaXRlcmFibGVDbGFzcyksCiAgICAgICAgaW5mZXJyZWRFeHByZXNzaW9uVHlwZSwKICAgICAgICBpdGVyYWJsZSwKICAgICAgICBpdGVyYWJsZS5maWxlT2Zmc2V0LAogICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZUZvckluTG9vcFR5cGVOb3RJdGVyYWJsZSk7CiAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CiAgICBpZiAodHlwZU5lZWRlZCkgewogICAgICBpbmZlcnJlZFR5cGUgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICBpZiAoaW5mZXJyZWRFeHByZXNzaW9uVHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUgPSBpbmZlcnJlci5jbGFzc0hpZXJhcmNoeQogICAgICAgICAgICAuZ2V0VHlwZUFzSW5zdGFuY2VPZihpbmZlcnJlZEV4cHJlc3Npb25UeXBlLCBpdGVyYWJsZUNsYXNzKTsKICAgICAgICBpZiAoc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgICAgIGluZmVycmVkVHlwZSA9IHN1cGVydHlwZS50eXBlQXJndW1lbnRzWzBdOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGluZmVycmVkVHlwZTsKICB9CgogIHZvaWQgaGFuZGxlRm9ySW5XaXRob3V0VmFyaWFibGUoCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIEV4cHJlc3Npb24gaXRlcmFibGUsIFN0YXRlbWVudCBib2R5LAogICAgICB7Ym9vbCBpc0FzeW5jOiBmYWxzZX0pIHsKICAgIERhcnRUeXBlIGVsZW1lbnRUeXBlOwogICAgYm9vbCB0eXBlQ2hlY2tzTmVlZGVkID0gIWluZmVycmVyLmlzVG9wTGV2ZWw7CiAgICBEYXJ0VHlwZSBzeW50aGV0aWNXcml0ZVR5cGU7CiAgICBFeHByZXNzaW9uIHN5bnRoZXRpY0Fzc2lnbm1lbnQ7CiAgICBFeHByZXNzaW9uIHJoczsKICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQgc3RhdGVtZW50ID0KICAgICAgICBib2R5IGlzIEJsb2NrID8gYm9keS5zdGF0ZW1lbnRzLmZpcnN0IDogYm9keTsKICAgIFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCBqdWRnbWVudCA9IHN0YXRlbWVudC5leHByZXNzaW9uOwogICAgc3ludGhldGljQXNzaWdubWVudCA9IGp1ZGdtZW50LmRlc3VnYXJlZDsKICAgIGlmIChzeW50aGV0aWNBc3NpZ25tZW50IGlzIFZhcmlhYmxlU2V0KSB7CiAgICAgIHN5bnRoZXRpY1dyaXRlVHlwZSA9IGVsZW1lbnRUeXBlID0gc3ludGhldGljQXNzaWdubWVudC52YXJpYWJsZS50eXBlOwogICAgICByaHMgPSBzeW50aGV0aWNBc3NpZ25tZW50LnZhbHVlOwogICAgfSBlbHNlIGlmIChzeW50aGV0aWNBc3NpZ25tZW50IGlzIFByb3BlcnR5U2V0IHx8CiAgICAgICAgc3ludGhldGljQXNzaWdubWVudCBpcyBTdXBlclByb3BlcnR5U2V0KSB7CiAgICAgIERhcnRUeXBlIHJlY2VpdmVyVHlwZSA9IGluZmVycmVyLnRoaXNUeXBlOwogICAgICBPYmplY3Qgd3JpdGVNZW1iZXIgPQogICAgICAgICAgaW5mZXJyZXIuZmluZFByb3BlcnR5U2V0TWVtYmVyKHJlY2VpdmVyVHlwZSwgc3ludGhldGljQXNzaWdubWVudCk7CiAgICAgIHN5bnRoZXRpY1dyaXRlVHlwZSA9CiAgICAgICAgICBlbGVtZW50VHlwZSA9IGluZmVycmVyLmdldFNldHRlclR5cGUod3JpdGVNZW1iZXIsIHJlY2VpdmVyVHlwZSk7CiAgICAgIGlmIChzeW50aGV0aWNBc3NpZ25tZW50IGlzIFByb3BlcnR5U2V0KSB7CiAgICAgICAgcmhzID0gc3ludGhldGljQXNzaWdubWVudC52YWx1ZTsKICAgICAgfSBlbHNlIGlmIChzeW50aGV0aWNBc3NpZ25tZW50IGlzIFN1cGVyUHJvcGVydHlTZXQpIHsKICAgICAgICByaHMgPSBzeW50aGV0aWNBc3NpZ25tZW50LnZhbHVlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHN5bnRoZXRpY0Fzc2lnbm1lbnQgaXMgU3RhdGljU2V0KSB7CiAgICAgIHN5bnRoZXRpY1dyaXRlVHlwZSA9IGVsZW1lbnRUeXBlID0gc3ludGhldGljQXNzaWdubWVudC50YXJnZXQuc2V0dGVyVHlwZTsKICAgICAgcmhzID0gc3ludGhldGljQXNzaWdubWVudC52YWx1ZTsKICAgIH0gZWxzZSBpZiAoc3ludGhldGljQXNzaWdubWVudCBpcyBJbnZhbGlkRXhwcmVzc2lvbikgewogICAgICBlbGVtZW50VHlwZSA9IGNvbnN0IFVua25vd25UeXBlKCk7CiAgICB9IGVsc2UgewogICAgICB1bmhhbmRsZWQoCiAgICAgICAgICAiJHtzeW50aGV0aWNBc3NpZ25tZW50LnJ1bnRpbWVUeXBlfSIsCiAgICAgICAgICAiaGFuZGxlRm9ySW5TdGF0ZW1lbnRXaXRob3V0VmFyaWFibGUiLAogICAgICAgICAgc3ludGhldGljQXNzaWdubWVudC5maWxlT2Zmc2V0LAogICAgICAgICAgaW5mZXJyZXIuaGVscGVyLnVyaSk7CiAgICB9CgogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlID0gaW5mZXJGb3JJbkl0ZXJhYmxlKAogICAgICAgIGl0ZXJhYmxlLCBlbGVtZW50VHlwZSwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICBpc0FzeW5jOiBpc0FzeW5jKTsKICAgIGlmICh0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgIHZhcmlhYmxlLnR5cGUgPSBpbmZlcnJlZFR5cGU7CiAgICB9CgogICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQoYm9keSk7CgogICAgaWYgKHN5bnRoZXRpY1dyaXRlVHlwZSAhPSBudWxsKSB7CiAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgICBncmVhdGVzdENsb3N1cmUoaW5mZXJyZXIuY29yZVR5cGVzLCBzeW50aGV0aWNXcml0ZVR5cGUpLAogICAgICAgICAgdmFyaWFibGUudHlwZSwKICAgICAgICAgIHJocywKICAgICAgICAgIHJocy5maWxlT2Zmc2V0LAogICAgICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlRm9ySW5Mb29wRWxlbWVudFR5cGVOb3RBc3NpZ25hYmxlLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoRm9ySW5TdGF0ZW1lbnQgbm9kZSwgXykgewogICAgaWYgKG5vZGUudmFyaWFibGUubmFtZSA9PSBudWxsKSB7CiAgICAgIGhhbmRsZUZvckluV2l0aG91dFZhcmlhYmxlKG5vZGUudmFyaWFibGUsIG5vZGUuaXRlcmFibGUsIG5vZGUuYm9keSwKICAgICAgICAgIGlzQXN5bmM6IG5vZGUuaXNBc3luYyk7CiAgICB9IGVsc2UgewogICAgICBoYW5kbGVGb3JJbkRlY2xhcmluZ1ZhcmlhYmxlKG5vZGUudmFyaWFibGUsIG5vZGUuaXRlcmFibGUsIG5vZGUuYm9keSwKICAgICAgICAgIGlzQXN5bmM6IG5vZGUuaXNBc3luYyk7CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0Rm9ySnVkZ21lbnQoRm9ySnVkZ21lbnQgbm9kZSkgewogICAgdmFyIGNvbmRpdGlvbkp1ZGdtZW50ID0gbm9kZS5jb25kaXRpb25KdWRnbWVudDsKICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSBpbiBub2RlLnZhcmlhYmxlcykgewogICAgICBpZiAodmFyaWFibGUubmFtZSA9PSBudWxsKSB7CiAgICAgICAgRXhwcmVzc2lvbiBpbml0aWFsaXplciA9IHZhcmlhYmxlLmluaXRpYWxpemVyOwogICAgICAgIGlmIChpbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICB2YXJpYWJsZS50eXBlID0gaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAgICAgIGluaXRpYWxpemVyLCBjb25zdCBVbmtub3duVHlwZSgpLCB0cnVlLAogICAgICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudCh2YXJpYWJsZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjb25kaXRpb25KdWRnbWVudCAhPSBudWxsKSB7CiAgICAgIHZhciBleHBlY3RlZFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGU7CiAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICAgIGNvbmRpdGlvbkp1ZGdtZW50LCBleHBlY3RlZFR5cGUsICFpbmZlcnJlci5pc1RvcExldmVsKTsKICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICAgIGV4cGVjdGVkVHlwZSwKICAgICAgICAgIGdldEluZmVycmVkVHlwZShjb25kaXRpb25KdWRnbWVudCwgaW5mZXJyZXIpLAogICAgICAgICAgbm9kZS5jb25kaXRpb24sCiAgICAgICAgICBub2RlLmNvbmRpdGlvbi5maWxlT2Zmc2V0KTsKICAgIH0KICAgIGZvciAodmFyIHVwZGF0ZSBpbiBub2RlLnVwZGF0ZUp1ZGdtZW50cykgewogICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICB1cGRhdGUsIGNvbnN0IFVua25vd25UeXBlKCksICFpbmZlcnJlci5pc1RvcExldmVsLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICB9CiAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChub2RlLmJvZHkpOwogIH0KCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCB2aXNpdEZ1bmN0aW9uTm9kZUp1ZGdtZW50KAogICAgICBGdW5jdGlvbk5vZGVKdWRnbWVudCBub2RlLAogICAgICBEYXJ0VHlwZSB0eXBlQ29udGV4dCwKICAgICAgRGFydFR5cGUgcmV0dXJuQ29udGV4dCwKICAgICAgaW50IHJldHVyblR5cGVJbnN0cnVtZW50YXRpb25PZmZzZXQpIHsKICAgIHJldHVybiBpbmZlcnJlci5pbmZlckxvY2FsRnVuY3Rpb24oCiAgICAgICAgbm9kZSwgdHlwZUNvbnRleHQsIHJldHVyblR5cGVJbnN0cnVtZW50YXRpb25PZmZzZXQsIHJldHVybkNvbnRleHQpOwogIH0KCiAgdm9pZCB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb25KdWRnbWVudChGdW5jdGlvbkRlY2xhcmF0aW9uSnVkZ21lbnQgbm9kZSkgewogICAgaW5mZXJyZXIuaW5mZXJNZXRhZGF0YUtlZXBpbmdIZWxwZXIobm9kZS52YXJpYWJsZS5hbm5vdGF0aW9ucyk7CiAgICBEYXJ0VHlwZSByZXR1cm5Db250ZXh0ID0KICAgICAgICBub2RlLl9oYXNJbXBsaWNpdFJldHVyblR5cGUgPyBudWxsIDogbm9kZS5mdW5jdGlvbi5yZXR1cm5UeXBlOwogICAgdmFyIGluZmVyZW5jZVJlc3VsdCA9IHZpc2l0RnVuY3Rpb25Ob2RlSnVkZ21lbnQoCiAgICAgICAgbm9kZS5mdW5jdGlvbkp1ZGdtZW50LCBudWxsLCByZXR1cm5Db250ZXh0LCBub2RlLmZpbGVPZmZzZXQpOwogICAgbm9kZS52YXJpYWJsZS50eXBlID0gaW5mZXJlbmNlUmVzdWx0LnR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKEZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgdmFyIGluZmVyZW5jZVJlc3VsdCA9IHZpc2l0RnVuY3Rpb25Ob2RlSnVkZ21lbnQoCiAgICAgICAgbm9kZS5mdW5jdGlvbiwgdHlwZUNvbnRleHQsIG51bGwsIG5vZGUuZmlsZU9mZnNldCk7CiAgICBpbmZlcnJlci5zdG9yZUluZmVycmVkVHlwZShub2RlLCBpbmZlcmVuY2VSZXN1bHQudHlwZSk7CiAgfQoKICB2b2lkIHZpc2l0SW52YWxpZFN1cGVySW5pdGlhbGl6ZXJKdWRnbWVudCgKICAgICAgSW52YWxpZFN1cGVySW5pdGlhbGl6ZXJKdWRnbWVudCBub2RlKSB7CiAgICB2YXIgc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21TdXBlcnR5cGUoaW5mZXJyZXIuY2xhc3NIaWVyYXJjaHkKICAgICAgICAuZ2V0Q2xhc3NBc0luc3RhbmNlT2YoCiAgICAgICAgICAgIGluZmVycmVyLnRoaXNUeXBlLmNsYXNzTm9kZSwgbm9kZS50YXJnZXQuZW5jbG9zaW5nQ2xhc3MpKTsKICAgIGluZmVycmVyLmluZmVySW52b2NhdGlvbigKICAgICAgICBudWxsLAogICAgICAgIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoCiAgICAgICAgICAgIG5vZGUudGFyZ2V0LmZ1bmN0aW9uLmZ1bmN0aW9uVHlwZS53aXRob3V0VHlwZVBhcmFtZXRlcnMpLAogICAgICAgIGluZmVycmVyLnRoaXNUeXBlLAogICAgICAgIG5vZGUuYXJndW1lbnRzSnVkZ21lbnQsCiAgICAgICAgc2tpcFR5cGVBcmd1bWVudEluZmVyZW5jZTogdHJ1ZSk7CiAgfQoKICB2b2lkIHZpc2l0SWZOdWxsSnVkZ21lbnQoSWZOdWxsSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHZhciBsZWZ0SnVkZ21lbnQgPSBub2RlLmxlZnRKdWRnbWVudDsKICAgIHZhciByaWdodEp1ZGdtZW50ID0gbm9kZS5yaWdodEp1ZGdtZW50OwogICAgLy8gVG8gaW5mZXIgYGUwID8/IGUxYCBpbiBjb250ZXh0IEs6CiAgICAvLyAtIEluZmVyIGUwIGluIGNvbnRleHQgSyB0byBnZXQgVDAKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihsZWZ0SnVkZ21lbnQsIHR5cGVDb250ZXh0LCB0cnVlKTsKICAgIHZhciBsaHNUeXBlID0gZ2V0SW5mZXJyZWRUeXBlKGxlZnRKdWRnbWVudCwgaW5mZXJyZXIpOwogICAgbm9kZS52YXJpYWJsZS50eXBlID0gbGhzVHlwZTsKICAgIC8vIC0gTGV0IEogPSBUMCBpZiBLIGlzIGA/YCBlbHNlIEsuCiAgICAvLyAtIEluZmVyIGUxIGluIGNvbnRleHQgSiB0byBnZXQgVDEKICAgIGlmICh0eXBlQ29udGV4dCBpcyBVbmtub3duVHlwZSkgewogICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24ocmlnaHRKdWRnbWVudCwgbGhzVHlwZSwgdHJ1ZSwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKHJpZ2h0SnVkZ21lbnQsIHR5cGVDb250ZXh0LCB0cnVlLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICB9CiAgICB2YXIgcmhzVHlwZSA9IGdldEluZmVycmVkVHlwZShyaWdodEp1ZGdtZW50LCBpbmZlcnJlcik7CiAgICAvLyAtIExldCBUID0gZ3JlYXRlc3QgY2xvc3VyZSBvZiBLIHdpdGggcmVzcGVjdCB0byBgP2AgaWYgSyBpcyBub3QgYF9gLCBlbHNlCiAgICAvLyAgIFVQKHQwLCB0MSkKICAgIC8vIC0gVGhlbiB0aGUgaW5mZXJyZWQgdHlwZSBpcyBULgogICAgbm9kZS5pbmZlcnJlZFR5cGUgPQogICAgICAgIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC5nZXRTdGFuZGFyZFVwcGVyQm91bmQobGhzVHlwZSwgcmhzVHlwZSk7CiAgICBub2RlLmJvZHkuc3RhdGljVHlwZSA9IGdldEluZmVycmVkVHlwZShub2RlLCBpbmZlcnJlcik7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgdmlzaXRJZkp1ZGdtZW50KElmSnVkZ21lbnQgbm9kZSkgewogICAgdmFyIGNvbmRpdGlvbkp1ZGdtZW50ID0gbm9kZS5jb25kaXRpb25KdWRnbWVudDsKICAgIHZhciBleHBlY3RlZFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGU7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgY29uZGl0aW9uSnVkZ21lbnQsIGV4cGVjdGVkVHlwZSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICBleHBlY3RlZFR5cGUsCiAgICAgICAgZ2V0SW5mZXJyZWRUeXBlKGNvbmRpdGlvbkp1ZGdtZW50LCBpbmZlcnJlciksCiAgICAgICAgbm9kZS5jb25kaXRpb24sCiAgICAgICAgbm9kZS5jb25kaXRpb24uZmlsZU9mZnNldCk7CiAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChub2RlLnRoZW4pOwogICAgaWYgKG5vZGUub3RoZXJ3aXNlICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQobm9kZS5vdGhlcndpc2UpOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdElsbGVnYWxBc3NpZ25tZW50SnVkZ21lbnQoCiAgICAgIElsbGVnYWxBc3NpZ25tZW50SnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIGlmIChub2RlLndyaXRlICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAgbm9kZS53cml0ZSwgY29uc3QgVW5rbm93blR5cGUoKSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogICAgfQogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgIG5vZGUucmhzLCBjb25zdCBVbmtub3duVHlwZSgpLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgICBub2RlLl9yZXBsYWNlV2l0aERlc3VnYXJlZCgpOwogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHZpc2l0SW5kZXhBc3NpZ25tZW50SnVkZ21lbnQoCiAgICAgIEluZGV4QXNzaWdubWVudEp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICB2YXIgcmVjZWl2ZXJUeXBlID0gbm9kZS5faW5mZXJSZWNlaXZlcihpbmZlcnJlcik7CiAgICB2YXIgd3JpdGVNZW1iZXIgPQogICAgICAgIGluZmVycmVyLmZpbmRNZXRob2RJbnZvY2F0aW9uTWVtYmVyKHJlY2VpdmVyVHlwZSwgbm9kZS53cml0ZSk7CiAgICAvLyBUbyByZXBsaWNhdGUgYW5hbHl6ZXIgYmVoYXZpb3IsIHdlIGJhc2UgdHlwZSBpbmZlcmVuY2Ugb24gdGhlIHdyaXRlCiAgICAvLyBtZW1iZXIuICBUT0RPKHBhdWxiZXJyeSk6IHdvdWxkIGl0IGJlIGJldHRlciB0byB1c2UgdGhlIHJlYWQgbWVtYmVyCiAgICAvLyB3aGVuIGRvaW5nIGNvbXBvdW5kIGFzc2lnbm1lbnQ/CiAgICB2YXIgY2FsbGVlVHlwZSA9IGluZmVycmVyLmdldENhbGxlZUZ1bmN0aW9uVHlwZSgKICAgICAgICBpbmZlcnJlci5nZXRDYWxsZWVUeXBlKHdyaXRlTWVtYmVyLCByZWNlaXZlclR5cGUpLCBmYWxzZSk7CiAgICBEYXJ0VHlwZSBleHBlY3RlZEluZGV4VHlwZUZvcldyaXRlOwogICAgRGFydFR5cGUgaW5kZXhDb250ZXh0ID0gY29uc3QgVW5rbm93blR5cGUoKTsKICAgIERhcnRUeXBlIHdyaXRlQ29udGV4dCA9IGNvbnN0IFVua25vd25UeXBlKCk7CiAgICBpZiAoY2FsbGVlVHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggPj0gMikgewogICAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IHdlIG91Z2h0IHRvIGdldCBhIGNvbnRleHQgZm9yIHRoZSBpbmRleCBleHByZXNzaW9uCiAgICAgIC8vIGZyb20gdGhlIGluZGV4IGZvcm1hbCBwYXJhbWV0ZXIsIGJ1dCBhbmFseXplciBkb2Vzbid0IHNvIGZvciBub3cgd2UKICAgICAgLy8gcmVwbGljYXRlIGl0cyBiZWhhdmlvci4KICAgICAgZXhwZWN0ZWRJbmRleFR5cGVGb3JXcml0ZSA9IGNhbGxlZVR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnNbMF07CiAgICAgIHdyaXRlQ29udGV4dCA9IGNhbGxlZVR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnNbMV07CiAgICB9CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24obm9kZS5pbmRleCwgaW5kZXhDb250ZXh0LCB0cnVlKTsKICAgIHZhciBpbmRleFR5cGUgPSBnZXRJbmZlcnJlZFR5cGUobm9kZS5pbmRleCwgaW5mZXJyZXIpOwogICAgbm9kZS5fc3RvcmVMZXRUeXBlKGluZmVycmVyLCBub2RlLmluZGV4LCBpbmRleFR5cGUpOwogICAgaWYgKHdyaXRlQ29udGV4dCBpcyEgVW5rbm93blR5cGUpIHsKICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICAgIGV4cGVjdGVkSW5kZXhUeXBlRm9yV3JpdGUsCiAgICAgICAgICBpbmRleFR5cGUsCiAgICAgICAgICBub2RlLl9nZXRJbnZvY2F0aW9uQXJndW1lbnRzKGluZmVycmVyLCBub2RlLndyaXRlKS5wb3NpdGlvbmFsWzBdLAogICAgICAgICAgbm9kZS53cml0ZS5maWxlT2Zmc2V0KTsKICAgIH0KICAgIEludm9jYXRpb25FeHByZXNzaW9uIHJlYWQgPSBub2RlLnJlYWQ7CiAgICBEYXJ0VHlwZSByZWFkVHlwZTsKICAgIGlmIChyZWFkICE9IG51bGwpIHsKICAgICAgdmFyIHJlYWRNZW1iZXIgPSBpbmZlcnJlci5maW5kTWV0aG9kSW52b2NhdGlvbk1lbWJlcihyZWNlaXZlclR5cGUsIHJlYWQsCiAgICAgICAgICBpbnN0cnVtZW50ZWQ6IGZhbHNlKTsKICAgICAgdmFyIGNhbGxlZUZ1bmN0aW9uVHlwZSA9IGluZmVycmVyLmdldENhbGxlZUZ1bmN0aW9uVHlwZSgKICAgICAgICAgIGluZmVycmVyLmdldENhbGxlZVR5cGUocmVhZE1lbWJlciwgcmVjZWl2ZXJUeXBlKSwgZmFsc2UpOwogICAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgICAgZ2V0UG9zaXRpb25hbFBhcmFtZXRlclR5cGUoY2FsbGVlRnVuY3Rpb25UeXBlLCAwKSwKICAgICAgICAgIGluZGV4VHlwZSwKICAgICAgICAgIG5vZGUuX2dldEludm9jYXRpb25Bcmd1bWVudHMoaW5mZXJyZXIsIHJlYWQpLnBvc2l0aW9uYWxbMF0sCiAgICAgICAgICByZWFkLmZpbGVPZmZzZXQpOwogICAgICByZWFkVHlwZSA9IGNhbGxlZUZ1bmN0aW9uVHlwZS5yZXR1cm5UeXBlOwogICAgICB2YXIgZGVzdWdhcmVkSW52b2NhdGlvbiA9IHJlYWQgaXMgTWV0aG9kSW52b2NhdGlvbiA/IHJlYWQgOiBudWxsOwogICAgICB2YXIgY2hlY2tLaW5kID0gaW5mZXJyZXIucHJlQ2hlY2tJbnZvY2F0aW9uQ29udHJhdmFyaWFuY2Uobm9kZS5yZWNlaXZlciwKICAgICAgICAgIHJlY2VpdmVyVHlwZSwgcmVhZE1lbWJlciwgZGVzdWdhcmVkSW52b2NhdGlvbiwgcmVhZC5hcmd1bWVudHMsIHJlYWQpOwogICAgICB2YXIgcmVwbGFjZWRSZWFkID0gaW5mZXJyZXIuaGFuZGxlSW52b2NhdGlvbkNvbnRyYXZhcmlhbmNlKAogICAgICAgICAgY2hlY2tLaW5kLAogICAgICAgICAgZGVzdWdhcmVkSW52b2NhdGlvbiwKICAgICAgICAgIHJlYWQuYXJndW1lbnRzLAogICAgICAgICAgcmVhZCwKICAgICAgICAgIHJlYWRUeXBlLAogICAgICAgICAgY2FsbGVlRnVuY3Rpb25UeXBlLAogICAgICAgICAgcmVhZC5maWxlT2Zmc2V0KTsKICAgICAgbm9kZS5fc3RvcmVMZXRUeXBlKGluZmVycmVyLCByZXBsYWNlZFJlYWQsIHJlYWRUeXBlKTsKICAgIH0KICAgIG5vZGUuX2luZmVyUmhzKGluZmVycmVyLCByZWFkVHlwZSwgd3JpdGVDb250ZXh0KTsKICAgIG5vZGUuX3JlcGxhY2VXaXRoRGVzdWdhcmVkKCk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgdmlzaXRJbnRKdWRnbWVudChJbnRKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgaWYgKGluZmVycmVyLmlzRG91YmxlQ29udGV4dCh0eXBlQ29udGV4dCkpIHsKICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gbm9kZS5hc0RvdWJsZSgpOwogICAgICBpZiAoZG91YmxlVmFsdWUgIT0gbnVsbCkgewogICAgICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgbm9kZSwgRG91YmxlTGl0ZXJhbChkb3VibGVWYWx1ZSkuLmZpbGVPZmZzZXQgPSBub2RlLmZpbGVPZmZzZXQpOwogICAgICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmRvdWJsZUNsYXNzLnJhd1R5cGU7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIEV4cHJlc3Npb24gZXJyb3IgPSBjaGVja1dlYkludExpdGVyYWxzRXJyb3JJZlVuZXhhY3QoCiAgICAgICAgaW5mZXJyZXIsIG5vZGUudmFsdWUsIG5vZGUubGl0ZXJhbCwgbm9kZS5maWxlT2Zmc2V0KTsKICAgIGlmIChlcnJvciAhPSBudWxsKSB7CiAgICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZChub2RlLCBlcnJvcik7CiAgICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gY29uc3QgQm90dG9tVHlwZSgpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmludENsYXNzLnJhd1R5cGU7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgdmlzaXRTaGFkb3dMYXJnZUludExpdGVyYWwoCiAgICAgIFNoYWRvd0xhcmdlSW50TGl0ZXJhbCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgaWYgKGluZmVycmVyLmlzRG91YmxlQ29udGV4dCh0eXBlQ29udGV4dCkpIHsKICAgICAgZG91YmxlIGRvdWJsZVZhbHVlID0gbm9kZS5hc0RvdWJsZSgpOwogICAgICBpZiAoZG91YmxlVmFsdWUgIT0gbnVsbCkgewogICAgICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgbm9kZSwgRG91YmxlTGl0ZXJhbChkb3VibGVWYWx1ZSkuLmZpbGVPZmZzZXQgPSBub2RlLmZpbGVPZmZzZXQpOwogICAgICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmRvdWJsZUNsYXNzLnJhd1R5cGU7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KCiAgICBpbnQgaW50VmFsdWUgPSBub2RlLmFzSW50NjQoKTsKICAgIGlmIChpbnRWYWx1ZSA9PSBudWxsKSB7CiAgICAgIEV4cHJlc3Npb24gcmVwbGFjZW1lbnQgPSBpbmZlcnJlci5oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICBpbmZlcnJlci5oZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgIHRlbXBsYXRlSW50ZWdlckxpdGVyYWxJc091dE9mUmFuZ2Uud2l0aEFyZ3VtZW50cyhub2RlLmxpdGVyYWwpLAogICAgICAgICAgICAgIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICAgICAgICBub2RlLmxpdGVyYWwubGVuZ3RoKSk7CiAgICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZChub2RlLCByZXBsYWNlbWVudCk7CiAgICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gY29uc3QgQm90dG9tVHlwZSgpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIEV4cHJlc3Npb24gZXJyb3IgPSBjaGVja1dlYkludExpdGVyYWxzRXJyb3JJZlVuZXhhY3QoCiAgICAgICAgaW5mZXJyZXIsIGludFZhbHVlLCBub2RlLmxpdGVyYWwsIG5vZGUuZmlsZU9mZnNldCk7CiAgICBpZiAoZXJyb3IgIT0gbnVsbCkgewogICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQobm9kZSwgZXJyb3IpOwogICAgICBub2RlLmluZmVycmVkVHlwZSA9IGNvbnN0IEJvdHRvbVR5cGUoKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBub2RlLnBhcmVudAogICAgICAgIC5yZXBsYWNlQ2hpbGQobm9kZSwgSW50TGl0ZXJhbChpbnRWYWx1ZSkuLmZpbGVPZmZzZXQgPSBub2RlLmZpbGVPZmZzZXQpOwogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuaW50Q2xhc3MucmF3VHlwZTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCB2aXNpdFNoYWRvd0ludmFsaWRJbml0aWFsaXplcihTaGFkb3dJbnZhbGlkSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgIG5vZGUudmFyaWFibGUuaW5pdGlhbGl6ZXIsIGNvbnN0IFVua25vd25UeXBlKCksICFpbmZlcnJlci5pc1RvcExldmVsKTsKICB9CgogIHZvaWQgdmlzaXRTaGFkb3dJbnZhbGlkRmllbGRJbml0aWFsaXplcihTaGFkb3dJbnZhbGlkRmllbGRJbml0aWFsaXplciBub2RlKSB7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24obm9kZS52YWx1ZSwgbm9kZS5maWVsZC50eXBlLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SXNFeHByZXNzaW9uKElzRXhwcmVzc2lvbiBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgIG5vZGUub3BlcmFuZCwgY29uc3QgVW5rbm93blR5cGUoKSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoTGFiZWxlZFN0YXRlbWVudCBub2RlLCBfKSB7CiAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChub2RlLmJvZHkpOwogIH0KCiAgRGFydFR5cGUgZ2V0U3ByZWFkRWxlbWVudFR5cGUoRGFydFR5cGUgc3ByZWFkVHlwZSwgYm9vbCBpc051bGxBd2FyZSkgewogICAgaWYgKHNwcmVhZFR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSA9IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgLmdldFR5cGVBc0luc3RhbmNlT2Yoc3ByZWFkVHlwZSwgaW5mZXJyZXIuY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3MpOwogICAgICBpZiAoc3VwZXJ0eXBlICE9IG51bGwpIHJldHVybiBzdXBlcnR5cGUudHlwZUFyZ3VtZW50c1swXTsKICAgICAgaWYgKHNwcmVhZFR5cGUuY2xhc3NOb2RlID09IGluZmVycmVyLmNvcmVUeXBlcy5udWxsQ2xhc3MgJiYgaXNOdWxsQXdhcmUpIHsKICAgICAgICByZXR1cm4gc3ByZWFkVHlwZTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChzcHJlYWRUeXBlIGlzIER5bmFtaWNUeXBlKSByZXR1cm4gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgRGFydFR5cGUgaW5mZXJFbGVtZW50KAogICAgICBFeHByZXNzaW9uIGVsZW1lbnQsCiAgICAgIFRyZWVOb2RlIHBhcmVudCwKICAgICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlQXJndW1lbnQsCiAgICAgIE1hcDxUcmVlTm9kZSwgRGFydFR5cGU+IGluZmVycmVkU3ByZWFkVHlwZXMsCiAgICAgIGJvb2wgaW5mZXJlbmNlTmVlZGVkLAogICAgICBib29sIHR5cGVDaGVja3NOZWVkZWQpIHsKICAgIGlmIChlbGVtZW50IGlzIFNwcmVhZEVsZW1lbnQpIHsKICAgICAgRGFydFR5cGUgc3ByZWFkVHlwZSA9IGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICAgIGVsZW1lbnQuZXhwcmVzc2lvbiwKICAgICAgICAgIG5ldyBJbnRlcmZhY2VUeXBlKGluZmVycmVyLmNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzLAogICAgICAgICAgICAgIDxEYXJ0VHlwZT5baW5mZXJyZWRUeXBlQXJndW1lbnRdKSwKICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgIGluZmVycmVkU3ByZWFkVHlwZXNbZWxlbWVudC5leHByZXNzaW9uXSA9IHNwcmVhZFR5cGU7CiAgICAgIGlmICh0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgICAgRGFydFR5cGUgc3ByZWFkRWxlbWVudFR5cGUgPQogICAgICAgICAgICBnZXRTcHJlYWRFbGVtZW50VHlwZShzcHJlYWRUeXBlLCBlbGVtZW50LmlzTnVsbEF3YXJlKTsKICAgICAgICBpZiAoc3ByZWFkRWxlbWVudFR5cGUgPT0gbnVsbCkgewogICAgICAgICAgaWYgKHNwcmVhZFR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgICAgICAgIHNwcmVhZFR5cGUuY2xhc3NOb2RlID09IGluZmVycmVyLmNvcmVUeXBlcy5udWxsQ2xhc3MgJiYKICAgICAgICAgICAgICAhZWxlbWVudC5pc051bGxBd2FyZSkgewogICAgICAgICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKAogICAgICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgICAgIGluZmVycmVyLmhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihpbmZlcnJlci5oZWxwZXIKICAgICAgICAgICAgICAgICAgICAuYnVpbGRQcm9ibGVtKG1lc3NhZ2VOb25OdWxsQXdhcmVTcHJlYWRJc051bGwsCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZXhwcmVzc2lvbi5maWxlT2Zmc2V0LCAxKSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICAgICBpbmZlcnJlci5oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oaW5mZXJyZXIuaGVscGVyCiAgICAgICAgICAgICAgICAgICAgLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVTcHJlYWRUeXBlTWlzbWF0Y2gud2l0aEFyZ3VtZW50cyhzcHJlYWRUeXBlKSwKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5leHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgIDEpKSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzcHJlYWRUeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICAgIGlmICghaW5mZXJyZXIuaXNBc3NpZ25hYmxlKGluZmVycmVkVHlwZUFyZ3VtZW50LCBzcHJlYWRFbGVtZW50VHlwZSkpIHsKICAgICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICAgICBpbmZlcnJlci5oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oaW5mZXJyZXIuaGVscGVyCiAgICAgICAgICAgICAgICAgICAgLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVTcHJlYWRFbGVtZW50VHlwZU1pc21hdGNoLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcHJlYWRFbGVtZW50VHlwZSwgaW5mZXJyZWRUeXBlQXJndW1lbnQpLAogICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmV4cHJlc3Npb24uZmlsZU9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgMSkpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gVXNlICdkeW5hbWljJyBmb3IgZXJyb3IgcmVjb3ZlcnkuCiAgICAgIHJldHVybiBlbGVtZW50LmVsZW1lbnRUeXBlID0KICAgICAgICAgIGdldFNwcmVhZEVsZW1lbnRUeXBlKHNwcmVhZFR5cGUsIGVsZW1lbnQuaXNOdWxsQXdhcmUpID8/CiAgICAgICAgICAgICAgY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpcyBJZkVsZW1lbnQpIHsKICAgICAgRGFydFR5cGUgYm9vbFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGU7CiAgICAgIERhcnRUeXBlIGNvbmRpdGlvblR5cGUgPSBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICBlbGVtZW50LmNvbmRpdGlvbiwgYm9vbFR5cGUsIHR5cGVDaGVja3NOZWVkZWQsCiAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiBmYWxzZSk7CiAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoYm9vbFR5cGUsIGNvbmRpdGlvblR5cGUsIGVsZW1lbnQuY29uZGl0aW9uLAogICAgICAgICAgZWxlbWVudC5jb25kaXRpb24uZmlsZU9mZnNldCk7CiAgICAgIERhcnRUeXBlIHRoZW5UeXBlID0gaW5mZXJFbGVtZW50KAogICAgICAgICAgZWxlbWVudC50aGVuLAogICAgICAgICAgZWxlbWVudCwKICAgICAgICAgIGluZmVycmVkVHlwZUFyZ3VtZW50LAogICAgICAgICAgaW5mZXJyZWRTcHJlYWRUeXBlcywKICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCwKICAgICAgICAgIHR5cGVDaGVja3NOZWVkZWQpOwogICAgICBEYXJ0VHlwZSBvdGhlcndpc2VUeXBlOwogICAgICBpZiAoZWxlbWVudC5vdGhlcndpc2UgIT0gbnVsbCkgewogICAgICAgIG90aGVyd2lzZVR5cGUgPSBpbmZlckVsZW1lbnQoCiAgICAgICAgICAgIGVsZW1lbnQub3RoZXJ3aXNlLAogICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICBpbmZlcnJlZFR5cGVBcmd1bWVudCwKICAgICAgICAgICAgaW5mZXJyZWRTcHJlYWRUeXBlcywKICAgICAgICAgICAgaW5mZXJlbmNlTmVlZGVkLAogICAgICAgICAgICB0eXBlQ2hlY2tzTmVlZGVkKTsKICAgICAgfQogICAgICByZXR1cm4gb3RoZXJ3aXNlVHlwZSA9PSBudWxsCiAgICAgICAgICA/IHRoZW5UeXBlCiAgICAgICAgICA6IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgICAgIC5nZXRTdGFuZGFyZFVwcGVyQm91bmQodGhlblR5cGUsIG90aGVyd2lzZVR5cGUpOwogICAgfSBlbHNlIGlmIChlbGVtZW50IGlzIEZvckVsZW1lbnQpIHsKICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uIGluIGVsZW1lbnQudmFyaWFibGVzKSB7CiAgICAgICAgaWYgKGRlY2xhcmF0aW9uLm5hbWUgPT0gbnVsbCkgewogICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICAgICAgZGVjbGFyYXRpb24udHlwZSA9IGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihkZWNsYXJhdGlvbi5pbml0aWFsaXplciwKICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uLnR5cGUsIGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkLAogICAgICAgICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGluZmVycmVyLmluZmVyU3RhdGVtZW50KGRlY2xhcmF0aW9uKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGVsZW1lbnQuY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICAgIGVsZW1lbnQuY29uZGl0aW9uLAogICAgICAgICAgICBpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGUsCiAgICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkLAogICAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiBmYWxzZSk7CiAgICAgIH0KICAgICAgZm9yIChFeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gZWxlbWVudC51cGRhdGVzKSB7CiAgICAgICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKGV4cHJlc3Npb24sIGNvbnN0IFVua25vd25UeXBlKCksCiAgICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkLAogICAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgICAgfQogICAgICByZXR1cm4gaW5mZXJFbGVtZW50KGVsZW1lbnQuYm9keSwgZWxlbWVudCwgaW5mZXJyZWRUeXBlQXJndW1lbnQsCiAgICAgICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzLCBpbmZlcmVuY2VOZWVkZWQsIHR5cGVDaGVja3NOZWVkZWQpOwogICAgfSBlbHNlIGlmIChlbGVtZW50IGlzIEZvckluRWxlbWVudCkgewogICAgICBpZiAoZWxlbWVudC52YXJpYWJsZS5uYW1lID09IG51bGwpIHsKICAgICAgICBoYW5kbGVGb3JJbldpdGhvdXRWYXJpYWJsZSgKICAgICAgICAgICAgZWxlbWVudC52YXJpYWJsZSwgZWxlbWVudC5pdGVyYWJsZSwgZWxlbWVudC5wcm9sb2d1ZSwKICAgICAgICAgICAgaXNBc3luYzogZWxlbWVudC5pc0FzeW5jKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBoYW5kbGVGb3JJbkRlY2xhcmluZ1ZhcmlhYmxlKAogICAgICAgICAgICBlbGVtZW50LnZhcmlhYmxlLCBlbGVtZW50Lml0ZXJhYmxlLCBlbGVtZW50LnByb2xvZ3VlLAogICAgICAgICAgICBpc0FzeW5jOiBlbGVtZW50LmlzQXN5bmMpOwogICAgICB9CiAgICAgIGlmIChlbGVtZW50LnByb2JsZW0gIT0gbnVsbCkgewogICAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihlbGVtZW50LnByb2JsZW0sIGNvbnN0IFVua25vd25UeXBlKCksCiAgICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkLAogICAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgICAgfQogICAgICByZXR1cm4gaW5mZXJFbGVtZW50KGVsZW1lbnQuYm9keSwgZWxlbWVudCwgaW5mZXJyZWRUeXBlQXJndW1lbnQsCiAgICAgICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzLCBpbmZlcmVuY2VOZWVkZWQsIHR5cGVDaGVja3NOZWVkZWQpOwogICAgfSBlbHNlIHsKICAgICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAgZWxlbWVudCwgaW5mZXJyZWRUeXBlQXJndW1lbnQsIGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgIGlmIChpbmZlcnJlZFR5cGVBcmd1bWVudCBpcyEgVW5rbm93blR5cGUpIHsKICAgICAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKAogICAgICAgICAgICBpbmZlcnJlZFR5cGVBcmd1bWVudCwgaW5mZXJyZWRUeXBlLCBlbGVtZW50LCBlbGVtZW50LmZpbGVPZmZzZXQsCiAgICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IGluZmVycmVkVHlwZUFyZ3VtZW50IGlzIFZvaWRUeXBlKTsKICAgICAgfQogICAgICByZXR1cm4gaW5mZXJyZWRUeXBlOwogICAgfQogIH0KCiAgdm9pZCBjaGVja0VsZW1lbnQoRXhwcmVzc2lvbiBpdGVtLCBFeHByZXNzaW9uIHBhcmVudCwgRGFydFR5cGUgdHlwZUFyZ3VtZW50LAogICAgICBNYXA8VHJlZU5vZGUsIERhcnRUeXBlPiBpbmZlcnJlZFNwcmVhZFR5cGVzKSB7CiAgICBpZiAoaXRlbSBpcyBTcHJlYWRFbGVtZW50KSB7CiAgICAgIERhcnRUeXBlIHNwcmVhZFR5cGUgPSBpbmZlcnJlZFNwcmVhZFR5cGVzW2l0ZW0uZXhwcmVzc2lvbl07CiAgICAgIGlmIChzcHJlYWRUeXBlIGlzIER5bmFtaWNUeXBlKSB7CiAgICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZShpbmZlcnJlci5jb3JlVHlwZXMuaXRlcmFibGVDbGFzcy5yYXdUeXBlLAogICAgICAgICAgICBzcHJlYWRUeXBlLCBpdGVtLmV4cHJlc3Npb24sIGl0ZW0uZXhwcmVzc2lvbi5maWxlT2Zmc2V0KTsKICAgICAgfQogICAgfSBlbHNlIGlmIChpdGVtIGlzIElmRWxlbWVudCkgewogICAgICBjaGVja0VsZW1lbnQoaXRlbS50aGVuLCBpdGVtLCB0eXBlQXJndW1lbnQsIGluZmVycmVkU3ByZWFkVHlwZXMpOwogICAgICBpZiAoaXRlbS5vdGhlcndpc2UgIT0gbnVsbCkgewogICAgICAgIGNoZWNrRWxlbWVudChpdGVtLm90aGVyd2lzZSwgaXRlbSwgdHlwZUFyZ3VtZW50LCBpbmZlcnJlZFNwcmVhZFR5cGVzKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChpdGVtIGlzIEZvckVsZW1lbnQpIHsKICAgICAgaWYgKGl0ZW0uY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgICBEYXJ0VHlwZSBjb25kaXRpb25UeXBlID0gZ2V0SW5mZXJyZWRUeXBlKGl0ZW0uY29uZGl0aW9uLCBpbmZlcnJlcik7CiAgICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZShpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGUsCiAgICAgICAgICAgIGNvbmRpdGlvblR5cGUsIGl0ZW0uY29uZGl0aW9uLCBpdGVtLmNvbmRpdGlvbi5maWxlT2Zmc2V0KTsKICAgICAgfQogICAgICBjaGVja0VsZW1lbnQoaXRlbS5ib2R5LCBpdGVtLCB0eXBlQXJndW1lbnQsIGluZmVycmVkU3ByZWFkVHlwZXMpOwogICAgfSBlbHNlIGlmIChpdGVtIGlzIEZvckluRWxlbWVudCkgewogICAgICBjaGVja0VsZW1lbnQoaXRlbS5ib2R5LCBpdGVtLCB0eXBlQXJndW1lbnQsIGluZmVycmVkU3ByZWFkVHlwZXMpOwogICAgfSBlbHNlIHsKICAgICAgLy8gRG8gbm90aGluZy4gIEFzc2lnbmFiaWxpdHkgY2hlY2tzIGFyZSBkb25lIGR1cmluZyB0eXBlIGluZmVyZW5jZS4KICAgIH0KICB9CgogIHZvaWQgdmlzaXRMaXN0TGl0ZXJhbEp1ZGdtZW50KAogICAgICBMaXN0TGl0ZXJhbEp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICB2YXIgbGlzdENsYXNzID0gaW5mZXJyZXIuY29yZVR5cGVzLmxpc3RDbGFzczsKICAgIHZhciBsaXN0VHlwZSA9IGxpc3RDbGFzcy50aGlzVHlwZTsKICAgIExpc3Q8RGFydFR5cGU+IGluZmVycmVkVHlwZXM7CiAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGVBcmd1bWVudDsKICAgIExpc3Q8RGFydFR5cGU+IGZvcm1hbFR5cGVzOwogICAgTGlzdDxEYXJ0VHlwZT4gYWN0dWFsVHlwZXM7CiAgICBib29sIGluZmVyZW5jZU5lZWRlZCA9IG5vZGUudHlwZUFyZ3VtZW50IGlzIEltcGxpY2l0VHlwZUFyZ3VtZW50OwogICAgYm9vbCB0eXBlQ2hlY2tzTmVlZGVkID0gIWluZmVycmVyLmlzVG9wTGV2ZWw7CiAgICBNYXA8VHJlZU5vZGUsIERhcnRUeXBlPiBpbmZlcnJlZFNwcmVhZFR5cGVzOwogICAgaWYgKGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgIGZvcm1hbFR5cGVzID0gW107CiAgICAgIGFjdHVhbFR5cGVzID0gW107CiAgICAgIGluZmVycmVkU3ByZWFkVHlwZXMgPSBuZXcgTWFwPFRyZWVOb2RlLCBEYXJ0VHlwZT4uaWRlbnRpdHkoKTsKICAgIH0KICAgIGlmIChpbmZlcmVuY2VOZWVkZWQpIHsKICAgICAgaW5mZXJyZWRUeXBlcyA9IFtjb25zdCBVbmtub3duVHlwZSgpXTsKICAgICAgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LmluZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBlKGxpc3RUeXBlLAogICAgICAgICAgbGlzdENsYXNzLnR5cGVQYXJhbWV0ZXJzLCBudWxsLCBudWxsLCB0eXBlQ29udGV4dCwgaW5mZXJyZWRUeXBlcywKICAgICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgICAgIGluZmVycmVkVHlwZUFyZ3VtZW50ID0gaW5mZXJyZWRUeXBlc1swXTsKICAgIH0gZWxzZSB7CiAgICAgIGluZmVycmVkVHlwZUFyZ3VtZW50ID0gbm9kZS50eXBlQXJndW1lbnQ7CiAgICB9CiAgICBpZiAoaW5mZXJlbmNlTmVlZGVkIHx8IHR5cGVDaGVja3NOZWVkZWQpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlLmV4cHJlc3Npb25zLmxlbmd0aDsgKytpKSB7CiAgICAgICAgRGFydFR5cGUgdHlwZSA9IGluZmVyRWxlbWVudCgKICAgICAgICAgICAgbm9kZS5leHByZXNzaW9uc1tpXSwKICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgaW5mZXJyZWRUeXBlQXJndW1lbnQsCiAgICAgICAgICAgIGluZmVycmVkU3ByZWFkVHlwZXMsCiAgICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCwKICAgICAgICAgICAgdHlwZUNoZWNrc05lZWRlZCk7CiAgICAgICAgYWN0dWFsVHlwZXMuYWRkKHR5cGUpOwogICAgICAgIGlmIChpbmZlcmVuY2VOZWVkZWQpIHsKICAgICAgICAgIGZvcm1hbFR5cGVzLmFkZChsaXN0VHlwZS50eXBlQXJndW1lbnRzWzBdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChpbmZlcmVuY2VOZWVkZWQpIHsKICAgICAgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LmluZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBlKAogICAgICAgICAgbGlzdFR5cGUsCiAgICAgICAgICBsaXN0Q2xhc3MudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICBmb3JtYWxUeXBlcywKICAgICAgICAgIGFjdHVhbFR5cGVzLAogICAgICAgICAgdHlwZUNvbnRleHQsCiAgICAgICAgICBpbmZlcnJlZFR5cGVzKTsKICAgICAgaW5mZXJyZWRUeXBlQXJndW1lbnQgPSBpbmZlcnJlZFR5cGVzWzBdOwogICAgICBpbmZlcnJlci5pbnN0cnVtZW50YXRpb24/LnJlY29yZCgKICAgICAgICAgIGluZmVycmVyLnVyaSwKICAgICAgICAgIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICAgICd0eXBlQXJncycsCiAgICAgICAgICBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlQXJncyhbaW5mZXJyZWRUeXBlQXJndW1lbnRdKSk7CiAgICAgIG5vZGUudHlwZUFyZ3VtZW50ID0gaW5mZXJyZWRUeXBlQXJndW1lbnQ7CiAgICB9CiAgICBpZiAodHlwZUNoZWNrc05lZWRlZCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBjaGVja0VsZW1lbnQoCiAgICAgICAgICAgIG5vZGUuZXhwcmVzc2lvbnNbaV0sIG5vZGUsIG5vZGUudHlwZUFyZ3VtZW50LCBpbmZlcnJlZFNwcmVhZFR5cGVzKTsKICAgICAgfQogICAgfQogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBuZXcgSW50ZXJmYWNlVHlwZShsaXN0Q2xhc3MsIFtpbmZlcnJlZFR5cGVBcmd1bWVudF0pOwogICAgaWYgKCFpbmZlcnJlci5pc1RvcExldmVsKSB7CiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPSBpbmZlcnJlci5saWJyYXJ5OwogICAgICBpZiAoaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgICAgbGlicmFyeS5jaGVja0JvdW5kc0luTGlzdExpdGVyYWwoCiAgICAgICAgICAgIG5vZGUsIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudCwgaW5mZXJyZXIuaGVscGVyLnVyaSwKICAgICAgICAgICAgaW5mZXJyZWQ6IHRydWUpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TG9naWNhbEV4cHJlc3Npb24oTG9naWNhbEV4cHJlc3Npb24gbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHZhciBib29sVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZTsKICAgIHZhciBsZWZ0ID0gbm9kZS5sZWZ0OwogICAgdmFyIHJpZ2h0ID0gbm9kZS5yaWdodDsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihsZWZ0LCBib29sVHlwZSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKHJpZ2h0LCBib29sVHlwZSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZShib29sVHlwZSwgZ2V0SW5mZXJyZWRUeXBlKGxlZnQsIGluZmVycmVyKSwKICAgICAgICBub2RlLmxlZnQsIG5vZGUubGVmdC5maWxlT2Zmc2V0KTsKICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoYm9vbFR5cGUsIGdldEluZmVycmVkVHlwZShyaWdodCwgaW5mZXJyZXIpLAogICAgICAgIG5vZGUucmlnaHQsIG5vZGUucmlnaHQuZmlsZU9mZnNldCk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIENhbGN1bGF0ZXMgdGhlIGtleSBhbmQgdGhlIHZhbHVlIHR5cGUgb2YgYSBzcHJlYWQgbWFwIGVudHJ5IG9mIHR5cGUKICAvLyBzcHJlYWRNYXBFbnRyeVR5cGUgYW5kIHN0b3JlcyB0aGVtIGluIG91dHB1dCBpbiBwb3NpdGlvbnMgb2Zmc2V0IGFuZCBvZmZzZXQKICAvLyArIDEuICBJZiB0aGUgdHlwZXMgY2FuJ3QgYmUgY2FsY3VsYXRlZCwgZm9yIGV4YW1wbGUsIGlmIHNwcmVhZE1hcEVudHJ5VHlwZQogIC8vIGlzIGEgZnVuY3Rpb24gdHlwZSwgdGhlIG9yaWdpbmFsIHZhbHVlcyBpbiBvdXRwdXQgYXJlIHByZXNlcnZlZC4KICB2b2lkIHN0b3JlU3ByZWFkTWFwRW50cnlFbGVtZW50VHlwZXMoRGFydFR5cGUgc3ByZWFkTWFwRW50cnlUeXBlLAogICAgICBib29sIGlzTnVsbEF3YXJlLCBMaXN0PERhcnRUeXBlPiBvdXRwdXQsIGludCBvZmZzZXQpIHsKICAgIGlmIChzcHJlYWRNYXBFbnRyeVR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSA9IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgLmdldFR5cGVBc0luc3RhbmNlT2Yoc3ByZWFkTWFwRW50cnlUeXBlLCBpbmZlcnJlci5jb3JlVHlwZXMubWFwQ2xhc3MpOwogICAgICBpZiAoc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgICBvdXRwdXRbb2Zmc2V0XSA9IHN1cGVydHlwZS50eXBlQXJndW1lbnRzWzBdOwogICAgICAgIG91dHB1dFtvZmZzZXQgKyAxXSA9IHN1cGVydHlwZS50eXBlQXJndW1lbnRzWzFdOwogICAgICB9IGVsc2UgaWYgKHNwcmVhZE1hcEVudHJ5VHlwZS5jbGFzc05vZGUgPT0gaW5mZXJyZXIuY29yZVR5cGVzLm51bGxDbGFzcyAmJgogICAgICAgICAgaXNOdWxsQXdhcmUpIHsKICAgICAgICBvdXRwdXRbb2Zmc2V0XSA9IG91dHB1dFtvZmZzZXQgKyAxXSA9IHNwcmVhZE1hcEVudHJ5VHlwZTsKICAgICAgfQogICAgfQogICAgaWYgKHNwcmVhZE1hcEVudHJ5VHlwZSBpcyBEeW5hbWljVHlwZSkgewogICAgICBvdXRwdXRbb2Zmc2V0XSA9IG91dHB1dFtvZmZzZXQgKyAxXSA9IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICB9CiAgfQoKICAvLyBOb3RlIHRoYXQgaW5mZXJNYXBFbnRyeSBhZGRzIGV4YWN0bHkgdHdvIGVsZW1lbnRzIHRvIGFjdHVhbFR5cGVzIC0tIHRoZQogIC8vIGFjdHVhbCB0eXBlcyBvZiB0aGUga2V5IGFuZCB0aGUgdmFsdWUuICBUaGUgc2FtZSB0ZWNobmlxdWUgaXMgdXNlZCBmb3IKICAvLyBhY3R1YWxUeXBlc0ZvclNldCwgb25seSBpbmZlck1hcEVudHJ5IGFkZHMgZXhhY3RseSBvbmUgZWxlbWVudCB0byB0aGF0CiAgLy8gbGlzdDogdGhlIGFjdHVhbCB0eXBlIG9mIHRoZSBpdGVyYWJsZSBzcHJlYWQgZWxlbWVudHMgaW4gY2FzZSB0aGUgbWFwCiAgLy8gbGl0ZXJhbCB3aWxsIGJlIGRpc2FtYmlndWF0ZWQgYXMgYSBzZXQgbGl0ZXJhbCBsYXRlci4KICB2b2lkIGluZmVyTWFwRW50cnkoCiAgICAgIE1hcEVudHJ5IGVudHJ5LAogICAgICBUcmVlTm9kZSBwYXJlbnQsCiAgICAgIERhcnRUeXBlIGluZmVycmVkS2V5VHlwZSwKICAgICAgRGFydFR5cGUgaW5mZXJyZWRWYWx1ZVR5cGUsCiAgICAgIERhcnRUeXBlIHNwcmVhZENvbnRleHQsCiAgICAgIExpc3Q8RGFydFR5cGU+IGFjdHVhbFR5cGVzLAogICAgICBMaXN0PERhcnRUeXBlPiBhY3R1YWxUeXBlc0ZvclNldCwKICAgICAgTWFwPFRyZWVOb2RlLCBEYXJ0VHlwZT4gaW5mZXJyZWRTcHJlYWRUeXBlcywKICAgICAgYm9vbCBpbmZlcmVuY2VOZWVkZWQsCiAgICAgIGJvb2wgdHlwZUNoZWNrc05lZWRlZCkgewogICAgaWYgKGVudHJ5IGlzIFNwcmVhZE1hcEVudHJ5KSB7CiAgICAgIERhcnRUeXBlIHNwcmVhZFR5cGUgPSBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICBlbnRyeS5leHByZXNzaW9uLCBzcHJlYWRDb250ZXh0LCBpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzW2VudHJ5LmV4cHJlc3Npb25dID0gc3ByZWFkVHlwZTsKICAgICAgaW50IGxlbmd0aCA9IGFjdHVhbFR5cGVzLmxlbmd0aDsKICAgICAgYWN0dWFsVHlwZXMuYWRkKG51bGwpOwogICAgICBhY3R1YWxUeXBlcy5hZGQobnVsbCk7CiAgICAgIHN0b3JlU3ByZWFkTWFwRW50cnlFbGVtZW50VHlwZXMoCiAgICAgICAgICBzcHJlYWRUeXBlLCBlbnRyeS5pc051bGxBd2FyZSwgYWN0dWFsVHlwZXMsIGxlbmd0aCk7CiAgICAgIERhcnRUeXBlIGFjdHVhbEtleVR5cGUgPSBhY3R1YWxUeXBlc1tsZW5ndGhdOwogICAgICBEYXJ0VHlwZSBhY3R1YWxWYWx1ZVR5cGUgPSBhY3R1YWxUeXBlc1tsZW5ndGggKyAxXTsKICAgICAgRGFydFR5cGUgYWN0dWFsRWxlbWVudFR5cGUgPQogICAgICAgICAgZ2V0U3ByZWFkRWxlbWVudFR5cGUoc3ByZWFkVHlwZSwgZW50cnkuaXNOdWxsQXdhcmUpOwoKICAgICAgaWYgKHR5cGVDaGVja3NOZWVkZWQpIHsKICAgICAgICBpZiAoYWN0dWFsS2V5VHlwZSA9PSBudWxsKSB7CiAgICAgICAgICBpZiAoc3ByZWFkVHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmCiAgICAgICAgICAgICAgc3ByZWFkVHlwZS5jbGFzc05vZGUgPT0gaW5mZXJyZXIuY29yZVR5cGVzLm51bGxDbGFzcyAmJgogICAgICAgICAgICAgICFlbnRyeS5pc051bGxBd2FyZSkgewogICAgICAgICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKAogICAgICAgICAgICAgICAgZW50cnksCiAgICAgICAgICAgICAgICBuZXcgTWFwRW50cnkoCiAgICAgICAgICAgICAgICAgICAgaW5mZXJyZXIuaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGluZmVycmVyLmhlbHBlcgogICAgICAgICAgICAgICAgICAgICAgICAuYnVpbGRQcm9ibGVtKG1lc3NhZ2VOb25OdWxsQXdhcmVTcHJlYWRJc051bGwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5leHByZXNzaW9uLmZpbGVPZmZzZXQsIDEpKSwKICAgICAgICAgICAgICAgICAgICBuZXcgTnVsbExpdGVyYWwoKSkKICAgICAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZW50cnkuZmlsZU9mZnNldCk7CiAgICAgICAgICB9IGVsc2UgaWYgKGFjdHVhbEVsZW1lbnRUeXBlICE9IG51bGwpIHsKICAgICAgICAgICAgLy8gRG9uJ3QgcmVwb3J0IHRoZSBlcnJvciBoZXJlLCBpdCBtaWdodCBiZSBhbiBhbWJpZ3VvdXMgU2V0LiAgVGhlCiAgICAgICAgICAgIC8vIGVycm9yIGlzIHJlcG9ydGVkIGluIGNoZWNrTWFwRW50cnkgaWYgaXQncyBkaXNhbWJpZ3VhdGVkIGFzIG1hcC4KICAgICAgICAgICAgaXRlcmFibGVTcHJlYWRUeXBlID0gc3ByZWFkVHlwZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgICBlbnRyeSwKICAgICAgICAgICAgICAgIG5ldyBNYXBFbnRyeSgKICAgICAgICAgICAgICAgICAgICBpbmZlcnJlci5oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oaW5mZXJyZXIuaGVscGVyCiAgICAgICAgICAgICAgICAgICAgICAgIC5idWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoc3ByZWFkVHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS5leHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSksCiAgICAgICAgICAgICAgICAgICAgbmV3IE51bGxMaXRlcmFsKCkpCiAgICAgICAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGVudHJ5LmZpbGVPZmZzZXQpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3ByZWFkVHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICBFeHByZXNzaW9uIGtleUVycm9yOwogICAgICAgICAgRXhwcmVzc2lvbiB2YWx1ZUVycm9yOwogICAgICAgICAgaWYgKCFpbmZlcnJlci5pc0Fzc2lnbmFibGUoaW5mZXJyZWRLZXlUeXBlLCBhY3R1YWxLZXlUeXBlKSkgewogICAgICAgICAgICBrZXlFcnJvciA9IGluZmVycmVyLmhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgICAgICAgIGluZmVycmVyLmhlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVTcHJlYWRNYXBFbnRyeUVsZW1lbnRLZXlUeXBlTWlzbWF0Y2gud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgICAgICAgYWN0dWFsS2V5VHlwZSwgaW5mZXJyZWRLZXlUeXBlKSwKICAgICAgICAgICAgICAgICAgICBlbnRyeS5leHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgMSkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFpbmZlcnJlci5pc0Fzc2lnbmFibGUoaW5mZXJyZWRWYWx1ZVR5cGUsIGFjdHVhbFZhbHVlVHlwZSkpIHsKICAgICAgICAgICAgdmFsdWVFcnJvciA9IGluZmVycmVyLmhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgICAgICAgIGluZmVycmVyLmhlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVTcHJlYWRNYXBFbnRyeUVsZW1lbnRWYWx1ZVR5cGVNaXNtYXRjaAogICAgICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhhY3R1YWxWYWx1ZVR5cGUsIGluZmVycmVkVmFsdWVUeXBlKSwKICAgICAgICAgICAgICAgICAgICBlbnRyeS5leHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgMSkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGtleUVycm9yICE9IG51bGwgfHwgdmFsdWVFcnJvciAhPSBudWxsKSB7CiAgICAgICAgICAgIGtleUVycm9yID8/PSBuZXcgTnVsbExpdGVyYWwoKTsKICAgICAgICAgICAgdmFsdWVFcnJvciA/Pz0gbmV3IE51bGxMaXRlcmFsKCk7CiAgICAgICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICAgICAgICBlbnRyeSwKICAgICAgICAgICAgICAgIG5ldyBNYXBFbnRyeShrZXlFcnJvciwgdmFsdWVFcnJvcikKICAgICAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZW50cnkuZmlsZU9mZnNldCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBVc2UgJ2R5bmFtaWMnIGZvciBlcnJvciByZWNvdmVyeS4KICAgICAgaWYgKGFjdHVhbEtleVR5cGUgPT0gbnVsbCkgewogICAgICAgIGFjdHVhbEtleVR5cGUgPSBhY3R1YWxUeXBlc1tsZW5ndGhdID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgICBhY3R1YWxWYWx1ZVR5cGUgPSBhY3R1YWxUeXBlc1tsZW5ndGggKyAxXSA9IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgIH0KICAgICAgLy8gU3RvcmUgdGhlIHR5cGUgaW4gY2FzZSBvZiBhbiBhbWJpZ3VvdXMgU2V0LiAgVXNlICdkeW5hbWljJyBmb3IgZXJyb3IKICAgICAgLy8gcmVjb3ZlcnkuCiAgICAgIGFjdHVhbFR5cGVzRm9yU2V0LmFkZChhY3R1YWxFbGVtZW50VHlwZSA/PyBjb25zdCBEeW5hbWljVHlwZSgpKTsKCiAgICAgIG1hcEVudHJ5Q2xhc3MgPz89CiAgICAgICAgICBpbmZlcnJlci5jb3JlVHlwZXMuaW5kZXguZ2V0Q2xhc3MoJ2RhcnQ6Y29yZScsICdNYXBFbnRyeScpOwogICAgICAvLyBUT0RPKGRtaXRyeWFzKTogIEhhbmRsZSB0aGUgY2FzZSBvZiBhbiBhbWJpZ3VvdXMgU2V0LgogICAgICBlbnRyeS5lbnRyeVR5cGUgPSBuZXcgSW50ZXJmYWNlVHlwZSgKICAgICAgICAgIG1hcEVudHJ5Q2xhc3MsIDxEYXJ0VHlwZT5bYWN0dWFsS2V5VHlwZSwgYWN0dWFsVmFsdWVUeXBlXSk7CgogICAgICBib29sIGlzTWFwID0gaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50CiAgICAgICAgICAuaXNTdWJ0eXBlT2Yoc3ByZWFkVHlwZSwgaW5mZXJyZXIuY29yZVR5cGVzLm1hcENsYXNzLnJhd1R5cGUpOwogICAgICBib29sIGlzSXRlcmFibGUgPSBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAgIC5pc1N1YnR5cGVPZihzcHJlYWRUeXBlLCBpbmZlcnJlci5jb3JlVHlwZXMuaXRlcmFibGVDbGFzcy5yYXdUeXBlKTsKICAgICAgaWYgKGlzTWFwICYmICFpc0l0ZXJhYmxlKSB7CiAgICAgICAgbWFwU3ByZWFkT2Zmc2V0ID0gZW50cnkuZmlsZU9mZnNldDsKICAgICAgfQogICAgICBpZiAoIWlzTWFwICYmIGlzSXRlcmFibGUpIHsKICAgICAgICBpdGVyYWJsZVNwcmVhZE9mZnNldCA9IGVudHJ5LmV4cHJlc3Npb24uZmlsZU9mZnNldDsKICAgICAgfQoKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmIChlbnRyeSBpcyBJZk1hcEVudHJ5KSB7CiAgICAgIERhcnRUeXBlIGJvb2xUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogICAgICBEYXJ0VHlwZSBjb25kaXRpb25UeXBlID0gaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgICAgZW50cnkuY29uZGl0aW9uLCBib29sVHlwZSwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IGZhbHNlKTsKICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICAgIGJvb2xUeXBlLCBjb25kaXRpb25UeXBlLCBlbnRyeS5jb25kaXRpb24sIGVudHJ5LmNvbmRpdGlvbi5maWxlT2Zmc2V0KTsKICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgcmVjdXJzaXZlIGludm9jYXRpb24gb2YgaW5mZXJNYXBFbnRyeSB3aWxsIGFkZCB0d28gdHlwZXMKICAgICAgLy8gdG8gYWN0dWFsVHlwZXM7IHRoZXkgYXJlIHRoZSBhY3R1YWwgdHlwZXMgb2YgdGhlIGN1cnJlbnQgaW52b2NhdGlvbiBpZgogICAgICAvLyB0aGUgJ2Vsc2UnIGJyYW5jaCBpcyBlbXB0eS4KICAgICAgaW5mZXJNYXBFbnRyeSgKICAgICAgICAgIGVudHJ5LnRoZW4sCiAgICAgICAgICBlbnRyeSwKICAgICAgICAgIGluZmVycmVkS2V5VHlwZSwKICAgICAgICAgIGluZmVycmVkVmFsdWVUeXBlLAogICAgICAgICAgc3ByZWFkQ29udGV4dCwKICAgICAgICAgIGFjdHVhbFR5cGVzLAogICAgICAgICAgYWN0dWFsVHlwZXNGb3JTZXQsCiAgICAgICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzLAogICAgICAgICAgaW5mZXJlbmNlTmVlZGVkLAogICAgICAgICAgdHlwZUNoZWNrc05lZWRlZCk7CiAgICAgIGlmIChlbnRyeS5vdGhlcndpc2UgIT0gbnVsbCkgewogICAgICAgIC8vIFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgdHlwZXMgYWRkZWQgaW4gdGhlIHJlY3Vyc2l2ZSBjYWxsIHRvCiAgICAgICAgLy8gaW5mZXJNYXBFbnRyeS4KICAgICAgICBEYXJ0VHlwZSBhY3R1YWxWYWx1ZVR5cGUgPSBhY3R1YWxUeXBlcy5yZW1vdmVMYXN0KCk7CiAgICAgICAgRGFydFR5cGUgYWN0dWFsS2V5VHlwZSA9IGFjdHVhbFR5cGVzLnJlbW92ZUxhc3QoKTsKICAgICAgICBEYXJ0VHlwZSBhY3R1YWxUeXBlRm9yU2V0ID0gYWN0dWFsVHlwZXNGb3JTZXQucmVtb3ZlTGFzdCgpOwogICAgICAgIGluZmVyTWFwRW50cnkoCiAgICAgICAgICAgIGVudHJ5Lm90aGVyd2lzZSwKICAgICAgICAgICAgZW50cnksCiAgICAgICAgICAgIGluZmVycmVkS2V5VHlwZSwKICAgICAgICAgICAgaW5mZXJyZWRWYWx1ZVR5cGUsCiAgICAgICAgICAgIHNwcmVhZENvbnRleHQsCiAgICAgICAgICAgIGFjdHVhbFR5cGVzLAogICAgICAgICAgICBhY3R1YWxUeXBlc0ZvclNldCwKICAgICAgICAgICAgaW5mZXJyZWRTcHJlYWRUeXBlcywKICAgICAgICAgICAgaW5mZXJlbmNlTmVlZGVkLAogICAgICAgICAgICB0eXBlQ2hlY2tzTmVlZGVkKTsKICAgICAgICBpbnQgbGVuZ3RoID0gYWN0dWFsVHlwZXMubGVuZ3RoOwogICAgICAgIGFjdHVhbFR5cGVzW2xlbmd0aCAtIDJdID0gaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50CiAgICAgICAgICAgIC5nZXRTdGFuZGFyZFVwcGVyQm91bmQoYWN0dWFsS2V5VHlwZSwgYWN0dWFsVHlwZXNbbGVuZ3RoIC0gMl0pOwogICAgICAgIGFjdHVhbFR5cGVzW2xlbmd0aCAtIDFdID0gaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50CiAgICAgICAgICAgIC5nZXRTdGFuZGFyZFVwcGVyQm91bmQoYWN0dWFsVmFsdWVUeXBlLCBhY3R1YWxUeXBlc1tsZW5ndGggLSAxXSk7CiAgICAgICAgaW50IGxlbmd0aEZvclNldCA9IGFjdHVhbFR5cGVzRm9yU2V0Lmxlbmd0aDsKICAgICAgICBhY3R1YWxUeXBlc0ZvclNldFtsZW5ndGhGb3JTZXQgLSAxXSA9IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgICAuZ2V0U3RhbmRhcmRVcHBlckJvdW5kKAogICAgICAgICAgICAgICAgYWN0dWFsVHlwZUZvclNldCwgYWN0dWFsVHlwZXNGb3JTZXRbbGVuZ3RoRm9yU2V0IC0gMV0pOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZiAoZW50cnkgaXMgRm9yTWFwRW50cnkpIHsKICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uIGluIGVudHJ5LnZhcmlhYmxlcykgewogICAgICAgIGlmIChkZWNsYXJhdGlvbi5uYW1lID09IG51bGwpIHsKICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICAgIGRlY2xhcmF0aW9uLnR5cGUgPSBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oZGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIsCiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi50eXBlLCBpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChkZWNsYXJhdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChlbnRyeS5jb25kaXRpb24gIT0gbnVsbCkgewogICAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbigKICAgICAgICAgICAgZW50cnkuY29uZGl0aW9uLAogICAgICAgICAgICBpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGUsCiAgICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkLAogICAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiBmYWxzZSk7CiAgICAgIH0KICAgICAgZm9yIChFeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gZW50cnkudXBkYXRlcykgewogICAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihleHByZXNzaW9uLCBjb25zdCBVbmtub3duVHlwZSgpLAogICAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQgfHwgdHlwZUNoZWNrc05lZWRlZCwKICAgICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgIH0KICAgICAgLy8gQWN0dWFsIHR5cGVzIGFyZSBhZGRlZCBieSB0aGUgcmVjdXJzaXZlIGNhbGwuCiAgICAgIHJldHVybiBpbmZlck1hcEVudHJ5KAogICAgICAgICAgZW50cnkuYm9keSwKICAgICAgICAgIGVudHJ5LAogICAgICAgICAgaW5mZXJyZWRLZXlUeXBlLAogICAgICAgICAgaW5mZXJyZWRWYWx1ZVR5cGUsCiAgICAgICAgICBzcHJlYWRDb250ZXh0LAogICAgICAgICAgYWN0dWFsVHlwZXMsCiAgICAgICAgICBhY3R1YWxUeXBlc0ZvclNldCwKICAgICAgICAgIGluZmVycmVkU3ByZWFkVHlwZXMsCiAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQsCiAgICAgICAgICB0eXBlQ2hlY2tzTmVlZGVkKTsKICAgIH0gZWxzZSBpZiAoZW50cnkgaXMgRm9ySW5NYXBFbnRyeSkgewogICAgICBpZiAoZW50cnkudmFyaWFibGUubmFtZSA9PSBudWxsKSB7CiAgICAgICAgaGFuZGxlRm9ySW5XaXRob3V0VmFyaWFibGUoCiAgICAgICAgICAgIGVudHJ5LnZhcmlhYmxlLCBlbnRyeS5pdGVyYWJsZSwgZW50cnkucHJvbG9ndWUsCiAgICAgICAgICAgIGlzQXN5bmM6IGVudHJ5LmlzQXN5bmMpOwogICAgICB9IGVsc2UgewogICAgICAgIGhhbmRsZUZvckluRGVjbGFyaW5nVmFyaWFibGUoCiAgICAgICAgICAgIGVudHJ5LnZhcmlhYmxlLCBlbnRyeS5pdGVyYWJsZSwgZW50cnkucHJvbG9ndWUsCiAgICAgICAgICAgIGlzQXN5bmM6IGVudHJ5LmlzQXN5bmMpOwogICAgICB9CiAgICAgIGlmIChlbnRyeS5wcm9ibGVtICE9IG51bGwpIHsKICAgICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oZW50cnkucHJvYmxlbSwgY29uc3QgVW5rbm93blR5cGUoKSwKICAgICAgICAgICAgaW5mZXJlbmNlTmVlZGVkIHx8IHR5cGVDaGVja3NOZWVkZWQsCiAgICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgICB9CiAgICAgIC8vIEFjdHVhbCB0eXBlcyBhcmUgYWRkZWQgYnkgdGhlIHJlY3Vyc2l2ZSBjYWxsLgogICAgICBpbmZlck1hcEVudHJ5KAogICAgICAgICAgZW50cnkuYm9keSwKICAgICAgICAgIGVudHJ5LAogICAgICAgICAgaW5mZXJyZWRLZXlUeXBlLAogICAgICAgICAgaW5mZXJyZWRWYWx1ZVR5cGUsCiAgICAgICAgICBzcHJlYWRDb250ZXh0LAogICAgICAgICAgYWN0dWFsVHlwZXMsCiAgICAgICAgICBhY3R1YWxUeXBlc0ZvclNldCwKICAgICAgICAgIGluZmVycmVkU3ByZWFkVHlwZXMsCiAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQsCiAgICAgICAgICB0eXBlQ2hlY2tzTmVlZGVkKTsKICAgIH0gZWxzZSB7CiAgICAgIERhcnRUeXBlIGtleVR5cGUgPSBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICBlbnRyeS5rZXksIGluZmVycmVkS2V5VHlwZSwgdHJ1ZSwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgICBEYXJ0VHlwZSB2YWx1ZVR5cGUgPSBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICBlbnRyeS52YWx1ZSwgaW5mZXJyZWRWYWx1ZVR5cGUsIHRydWUsCiAgICAgICAgICBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICAgIGluZmVycmVkS2V5VHlwZSwga2V5VHlwZSwgZW50cnkua2V5LCBlbnRyeS5rZXkuZmlsZU9mZnNldCwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IGluZmVycmVkS2V5VHlwZSBpcyBWb2lkVHlwZSk7CiAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgICBpbmZlcnJlZFZhbHVlVHlwZSwgdmFsdWVUeXBlLCBlbnRyeS52YWx1ZSwgZW50cnkudmFsdWUuZmlsZU9mZnNldCwKICAgICAgICAgIGlzVm9pZEFsbG93ZWQ6IGluZmVycmVkVmFsdWVUeXBlIGlzIFZvaWRUeXBlKTsKICAgICAgYWN0dWFsVHlwZXMuYWRkKGtleVR5cGUpOwogICAgICBhY3R1YWxUeXBlcy5hZGQodmFsdWVUeXBlKTsKICAgICAgLy8gVXNlICdkeW5hbWljJyBmb3IgZXJyb3IgcmVjb3ZlcnkuCiAgICAgIGFjdHVhbFR5cGVzRm9yU2V0LmFkZChjb25zdCBEeW5hbWljVHlwZSgpKTsKICAgICAgbWFwRW50cnlPZmZzZXQgPSBlbnRyeS5maWxlT2Zmc2V0OwogICAgICByZXR1cm47CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrTWFwRW50cnkoCiAgICAgIE1hcEVudHJ5IGVudHJ5LAogICAgICBUcmVlTm9kZSBwYXJlbnQsCiAgICAgIEV4cHJlc3Npb24gY2FjaGVkS2V5LAogICAgICBFeHByZXNzaW9uIGNhY2hlZFZhbHVlLAogICAgICBEYXJ0VHlwZSBrZXlUeXBlLAogICAgICBEYXJ0VHlwZSB2YWx1ZVR5cGUsCiAgICAgIE1hcDxUcmVlTm9kZSwgRGFydFR5cGU+IGluZmVycmVkU3ByZWFkVHlwZXMpIHsKICAgIC8vIEl0J3MgZGlzYW1iaWd1YXRlZCBhcyBhIG1hcCBsaXRlcmFsLgogICAgaWYgKGl0ZXJhYmxlU3ByZWFkT2Zmc2V0ICE9IG51bGwpIHsKICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgIGVudHJ5LAogICAgICAgICAgbmV3IE1hcEVudHJ5KAogICAgICAgICAgICAgIGluZmVycmVyLmhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihpbmZlcnJlci5oZWxwZXIKICAgICAgICAgICAgICAgICAgLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlU3ByZWFkTWFwRW50cnlUeXBlTWlzbWF0Y2gKICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhpdGVyYWJsZVNwcmVhZFR5cGUpLAogICAgICAgICAgICAgICAgICAgICAgaXRlcmFibGVTcHJlYWRPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAxKSksCiAgICAgICAgICAgICAgbmV3IE51bGxMaXRlcmFsKCkpKTsKICAgIH0KICAgIGlmIChlbnRyeSBpcyBTcHJlYWRNYXBFbnRyeSkgewogICAgICBEYXJ0VHlwZSBzcHJlYWRUeXBlID0gaW5mZXJyZWRTcHJlYWRUeXBlc1tlbnRyeS5leHByZXNzaW9uXTsKICAgICAgaWYgKHNwcmVhZFR5cGUgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgICBpbmZlcnJlci5lbnN1cmVBc3NpZ25hYmxlKGluZmVycmVyLmNvcmVUeXBlcy5tYXBDbGFzcy5yYXdUeXBlLAogICAgICAgICAgICBzcHJlYWRUeXBlLCBlbnRyeS5leHByZXNzaW9uLCBlbnRyeS5leHByZXNzaW9uLmZpbGVPZmZzZXQpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGVudHJ5IGlzIElmTWFwRW50cnkpIHsKICAgICAgY2hlY2tNYXBFbnRyeShlbnRyeS50aGVuLCBlbnRyeSwgY2FjaGVkS2V5LCBjYWNoZWRWYWx1ZSwga2V5VHlwZSwKICAgICAgICAgIHZhbHVlVHlwZSwgaW5mZXJyZWRTcHJlYWRUeXBlcyk7CiAgICAgIGlmIChlbnRyeS5vdGhlcndpc2UgIT0gbnVsbCkgewogICAgICAgIGNoZWNrTWFwRW50cnkoZW50cnkub3RoZXJ3aXNlLCBlbnRyeSwgY2FjaGVkS2V5LCBjYWNoZWRWYWx1ZSwga2V5VHlwZSwKICAgICAgICAgICAgdmFsdWVUeXBlLCBpbmZlcnJlZFNwcmVhZFR5cGVzKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChlbnRyeSBpcyBGb3JNYXBFbnRyeSkgewogICAgICBpZiAoZW50cnkuY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgICBEYXJ0VHlwZSBjb25kaXRpb25UeXBlID0gZ2V0SW5mZXJyZWRUeXBlKGVudHJ5LmNvbmRpdGlvbiwgaW5mZXJyZXIpOwogICAgICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlLAogICAgICAgICAgICBjb25kaXRpb25UeXBlLCBlbnRyeS5jb25kaXRpb24sIGVudHJ5LmNvbmRpdGlvbi5maWxlT2Zmc2V0KTsKICAgICAgfQogICAgICBjaGVja01hcEVudHJ5KGVudHJ5LmJvZHksIGVudHJ5LCBjYWNoZWRLZXksIGNhY2hlZFZhbHVlLCBrZXlUeXBlLAogICAgICAgICAgdmFsdWVUeXBlLCBpbmZlcnJlZFNwcmVhZFR5cGVzKTsKICAgIH0gZWxzZSBpZiAoZW50cnkgaXMgRm9ySW5NYXBFbnRyeSkgewogICAgICBjaGVja01hcEVudHJ5KGVudHJ5LmJvZHksIGVudHJ5LCBjYWNoZWRLZXksIGNhY2hlZFZhbHVlLCBrZXlUeXBlLAogICAgICAgICAgdmFsdWVUeXBlLCBpbmZlcnJlZFNwcmVhZFR5cGVzKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIERvIG5vdGhpbmcuICBBc3NpZ25hYmlsaXR5IGNoZWNrcyBhcmUgZG9uZSBkdXJpbmcgdHlwZSBpbmZlcmVuY2UuCiAgICB9CiAgfQoKICB2b2lkIHZpc2l0TWFwTGl0ZXJhbEp1ZGdtZW50KE1hcExpdGVyYWxKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgdmFyIG1hcENsYXNzID0gaW5mZXJyZXIuY29yZVR5cGVzLm1hcENsYXNzOwogICAgdmFyIG1hcFR5cGUgPSBtYXBDbGFzcy50aGlzVHlwZTsKICAgIExpc3Q8RGFydFR5cGU+IGluZmVycmVkVHlwZXM7CiAgICBEYXJ0VHlwZSBpbmZlcnJlZEtleVR5cGU7CiAgICBEYXJ0VHlwZSBpbmZlcnJlZFZhbHVlVHlwZTsKICAgIExpc3Q8RGFydFR5cGU+IGZvcm1hbFR5cGVzOwogICAgTGlzdDxEYXJ0VHlwZT4gYWN0dWFsVHlwZXM7CiAgICBMaXN0PERhcnRUeXBlPiBhY3R1YWxUeXBlc0ZvclNldDsKICAgIGFzc2VydCgobm9kZS5rZXlUeXBlIGlzIEltcGxpY2l0VHlwZUFyZ3VtZW50KSA9PQogICAgICAgIChub2RlLnZhbHVlVHlwZSBpcyBJbXBsaWNpdFR5cGVBcmd1bWVudCkpOwogICAgYm9vbCBpbmZlcmVuY2VOZWVkZWQgPSBub2RlLmtleVR5cGUgaXMgSW1wbGljaXRUeXBlQXJndW1lbnQ7CiAgICBib29sIHR5cGVDb250ZXh0SXNNYXAgPSBub2RlLmtleVR5cGUgaXMhIEltcGxpY2l0VHlwZUFyZ3VtZW50OwogICAgYm9vbCB0eXBlQ29udGV4dElzSXRlcmFibGUgPSBmYWxzZTsKICAgIGlmICghaW5mZXJyZXIuaXNUb3BMZXZlbCAmJiBpbmZlcmVuY2VOZWVkZWQpIHsKICAgICAgLy8gQW1iaWd1b3VzIHNldC9tYXAgbGl0ZXJhbAogICAgICBEYXJ0VHlwZSBjb250ZXh0ID0KICAgICAgICAgIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC51bmZ1dHVyZVR5cGUodHlwZUNvbnRleHQpOwogICAgICBpZiAoY29udGV4dCBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgdHlwZUNvbnRleHRJc01hcCA9IHR5cGVDb250ZXh0SXNNYXAgfHwKICAgICAgICAgICAgaW5mZXJyZXIuY2xhc3NIaWVyYXJjaHkKICAgICAgICAgICAgICAgIC5pc1N1YnR5cGVPZihjb250ZXh0LmNsYXNzTm9kZSwgaW5mZXJyZXIuY29yZVR5cGVzLm1hcENsYXNzKTsKICAgICAgICB0eXBlQ29udGV4dElzSXRlcmFibGUgPSB0eXBlQ29udGV4dElzSXRlcmFibGUgfHwKICAgICAgICAgICAgaW5mZXJyZXIuY2xhc3NIaWVyYXJjaHkuaXNTdWJ0eXBlT2YoCiAgICAgICAgICAgICAgICBjb250ZXh0LmNsYXNzTm9kZSwgaW5mZXJyZXIuY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3MpOwogICAgICAgIGlmIChub2RlLmVudHJpZXMuaXNFbXB0eSAmJgogICAgICAgICAgICB0eXBlQ29udGV4dElzSXRlcmFibGUgJiYKICAgICAgICAgICAgIXR5cGVDb250ZXh0SXNNYXApIHsKICAgICAgICAgIC8vIFNldCBsaXRlcmFsCiAgICAgICAgICBTZXRMaXRlcmFsSnVkZ21lbnQgc2V0TGl0ZXJhbCA9IG5ldyBTZXRMaXRlcmFsSnVkZ21lbnQoW10sCiAgICAgICAgICAgICAgdHlwZUFyZ3VtZW50OiBjb25zdCBJbXBsaWNpdFR5cGVBcmd1bWVudCgpLCBpc0NvbnN0OiBub2RlLmlzQ29uc3QpCiAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IG5vZGUuZmlsZU9mZnNldDsKICAgICAgICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZChub2RlLCBzZXRMaXRlcmFsKTsKICAgICAgICAgIHZpc2l0U2V0TGl0ZXJhbEp1ZGdtZW50KHNldExpdGVyYWwsIHR5cGVDb250ZXh0KTsKICAgICAgICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gc2V0TGl0ZXJhbC5pbmZlcnJlZFR5cGU7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBib29sIHR5cGVDaGVja3NOZWVkZWQgPSAhaW5mZXJyZXIuaXNUb3BMZXZlbDsKICAgIE1hcDxUcmVlTm9kZSwgRGFydFR5cGU+IGluZmVycmVkU3ByZWFkVHlwZXM7CiAgICBpZiAoaW5mZXJlbmNlTmVlZGVkIHx8IHR5cGVDaGVja3NOZWVkZWQpIHsKICAgICAgZm9ybWFsVHlwZXMgPSBbXTsKICAgICAgYWN0dWFsVHlwZXMgPSBbXTsKICAgICAgYWN0dWFsVHlwZXNGb3JTZXQgPSBbXTsKICAgICAgaW5mZXJyZWRTcHJlYWRUeXBlcyA9IG5ldyBNYXA8VHJlZU5vZGUsIERhcnRUeXBlPi5pZGVudGl0eSgpOwogICAgfQogICAgaWYgKGluZmVyZW5jZU5lZWRlZCkgewogICAgICBpbmZlcnJlZFR5cGVzID0gW2NvbnN0IFVua25vd25UeXBlKCksIGNvbnN0IFVua25vd25UeXBlKCldOwogICAgICBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQuaW5mZXJHZW5lcmljRnVuY3Rpb25PclR5cGUobWFwVHlwZSwKICAgICAgICAgIG1hcENsYXNzLnR5cGVQYXJhbWV0ZXJzLCBudWxsLCBudWxsLCB0eXBlQ29udGV4dCwgaW5mZXJyZWRUeXBlcywKICAgICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgICAgIGluZmVycmVkS2V5VHlwZSA9IGluZmVycmVkVHlwZXNbMF07CiAgICAgIGluZmVycmVkVmFsdWVUeXBlID0gaW5mZXJyZWRUeXBlc1sxXTsKICAgIH0gZWxzZSB7CiAgICAgIGluZmVycmVkS2V5VHlwZSA9IG5vZGUua2V5VHlwZTsKICAgICAgaW5mZXJyZWRWYWx1ZVR5cGUgPSBub2RlLnZhbHVlVHlwZTsKICAgIH0KICAgIExpc3Q8RXhwcmVzc2lvbj4gY2FjaGVkS2V5cyA9IG5ldyBMaXN0KG5vZGUuZW50cmllcy5sZW5ndGgpOwogICAgTGlzdDxFeHByZXNzaW9uPiBjYWNoZWRWYWx1ZXMgPSBuZXcgTGlzdChub2RlLmVudHJpZXMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5lbnRyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIE1hcEVudHJ5IGVudHJ5ID0gbm9kZS5lbnRyaWVzW2ldOwogICAgICBpZiAoZW50cnkgaXMhIENvbnRyb2xGbG93TWFwRW50cnkpIHsKICAgICAgICBjYWNoZWRLZXlzW2ldID0gbm9kZS5lbnRyaWVzW2ldLmtleTsKICAgICAgICBjYWNoZWRWYWx1ZXNbaV0gPSBub2RlLmVudHJpZXNbaV0udmFsdWU7CiAgICAgIH0KICAgIH0KICAgIGJvb2wgaGFzTWFwRW50cnkgPSBmYWxzZTsKICAgIGJvb2wgaGFzTWFwU3ByZWFkID0gZmFsc2U7CiAgICBib29sIGhhc0l0ZXJhYmxlU3ByZWFkID0gZmFsc2U7CiAgICBpZiAoaW5mZXJlbmNlTmVlZGVkIHx8IHR5cGVDaGVja3NOZWVkZWQpIHsKICAgICAgbWFwRW50cnlPZmZzZXQgPSBudWxsOwogICAgICBtYXBTcHJlYWRPZmZzZXQgPSBudWxsOwogICAgICBpdGVyYWJsZVNwcmVhZE9mZnNldCA9IG51bGw7CiAgICAgIGl0ZXJhYmxlU3ByZWFkVHlwZSA9IG51bGw7CiAgICAgIERhcnRUeXBlIHNwcmVhZFR5cGVDb250ZXh0ID0gY29uc3QgVW5rbm93blR5cGUoKTsKICAgICAgaWYgKHR5cGVDb250ZXh0SXNJdGVyYWJsZSAmJiAhdHlwZUNvbnRleHRJc01hcCkgewogICAgICAgIHNwcmVhZFR5cGVDb250ZXh0ID0gaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50CiAgICAgICAgICAgIC5nZXRUeXBlQXNJbnN0YW5jZU9mKHR5cGVDb250ZXh0LCBpbmZlcnJlci5jb3JlVHlwZXMuaXRlcmFibGVDbGFzcyk7CiAgICAgIH0gZWxzZSBpZiAoIXR5cGVDb250ZXh0SXNJdGVyYWJsZSAmJiB0eXBlQ29udGV4dElzTWFwKSB7CiAgICAgICAgc3ByZWFkVHlwZUNvbnRleHQgPSBuZXcgSW50ZXJmYWNlVHlwZShpbmZlcnJlci5jb3JlVHlwZXMubWFwQ2xhc3MsCiAgICAgICAgICAgIDxEYXJ0VHlwZT5baW5mZXJyZWRLZXlUeXBlLCBpbmZlcnJlZFZhbHVlVHlwZV0pOwogICAgICB9CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5lbnRyaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgTWFwRW50cnkgZW50cnkgPSBub2RlLmVudHJpZXNbaV07CiAgICAgICAgaW5mZXJNYXBFbnRyeSgKICAgICAgICAgICAgZW50cnksCiAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgIGluZmVycmVkS2V5VHlwZSwKICAgICAgICAgICAgaW5mZXJyZWRWYWx1ZVR5cGUsCiAgICAgICAgICAgIHNwcmVhZFR5cGVDb250ZXh0LAogICAgICAgICAgICBhY3R1YWxUeXBlcywKICAgICAgICAgICAgYWN0dWFsVHlwZXNGb3JTZXQsCiAgICAgICAgICAgIGluZmVycmVkU3ByZWFkVHlwZXMsCiAgICAgICAgICAgIGluZmVyZW5jZU5lZWRlZCwKICAgICAgICAgICAgdHlwZUNoZWNrc05lZWRlZCk7CiAgICAgICAgaWYgKGluZmVyZW5jZU5lZWRlZCkgewogICAgICAgICAgZm9ybWFsVHlwZXMuYWRkKG1hcFR5cGUudHlwZUFyZ3VtZW50c1swXSk7CiAgICAgICAgICBmb3JtYWxUeXBlcy5hZGQobWFwVHlwZS50eXBlQXJndW1lbnRzWzFdKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaGFzTWFwRW50cnkgPSBtYXBFbnRyeU9mZnNldCAhPSBudWxsOwogICAgICBoYXNNYXBTcHJlYWQgPSBtYXBTcHJlYWRPZmZzZXQgIT0gbnVsbDsKICAgICAgaGFzSXRlcmFibGVTcHJlYWQgPSBpdGVyYWJsZVNwcmVhZE9mZnNldCAhPSBudWxsOwogICAgfQogICAgaWYgKGluZmVyZW5jZU5lZWRlZCkgewogICAgICBib29sIGNhbkJlU2V0ID0gIWhhc01hcFNwcmVhZCAmJiAhaGFzTWFwRW50cnkgJiYgIXR5cGVDb250ZXh0SXNNYXA7CiAgICAgIGJvb2wgY2FuQmVNYXAgPSAhaGFzSXRlcmFibGVTcHJlYWQgJiYgIXR5cGVDb250ZXh0SXNJdGVyYWJsZTsKICAgICAgaWYgKGNhbkJlU2V0ICYmICFjYW5CZU1hcCkgewogICAgICAgIExpc3Q8RXhwcmVzc2lvbj4gc2V0RWxlbWVudHMgPSA8RXhwcmVzc2lvbj5bXTsKICAgICAgICBMaXN0PERhcnRUeXBlPiBmb3JtYWxUeXBlc0ZvclNldCA9IDxEYXJ0VHlwZT5bXTsKICAgICAgICBJbnRlcmZhY2VUeXBlIHNldFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuc2V0Q2xhc3MudGhpc1R5cGU7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlLmVudHJpZXMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgIHNldEVsZW1lbnRzLmFkZChjb252ZXJ0VG9FbGVtZW50KG5vZGUuZW50cmllc1tpXSwgaW5mZXJyZXIuaGVscGVyKSk7CiAgICAgICAgICBmb3JtYWxUeXBlc0ZvclNldC5hZGQoc2V0VHlwZS50eXBlQXJndW1lbnRzWzBdKTsKICAgICAgICB9CgogICAgICAgIExpc3Q8RGFydFR5cGU+IGluZmVycmVkVHlwZXNGb3JTZXQgPSA8RGFydFR5cGU+W2NvbnN0IFVua25vd25UeXBlKCldOwogICAgICAgIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC5pbmZlckdlbmVyaWNGdW5jdGlvbk9yVHlwZSgKICAgICAgICAgICAgc2V0VHlwZSwKICAgICAgICAgICAgaW5mZXJyZXIuY29yZVR5cGVzLnNldENsYXNzLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgICBudWxsLAogICAgICAgICAgICBudWxsLAogICAgICAgICAgICB0eXBlQ29udGV4dCwKICAgICAgICAgICAgaW5mZXJyZWRUeXBlc0ZvclNldCwKICAgICAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICAgICAgICBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQuaW5mZXJHZW5lcmljRnVuY3Rpb25PclR5cGUoCiAgICAgICAgICAgIGluZmVycmVyLmNvcmVUeXBlcy5zZXRDbGFzcy50aGlzVHlwZSwKICAgICAgICAgICAgaW5mZXJyZXIuY29yZVR5cGVzLnNldENsYXNzLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgICBmb3JtYWxUeXBlc0ZvclNldCwKICAgICAgICAgICAgYWN0dWFsVHlwZXNGb3JTZXQsCiAgICAgICAgICAgIHR5cGVDb250ZXh0LAogICAgICAgICAgICBpbmZlcnJlZFR5cGVzRm9yU2V0KTsKICAgICAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGVBcmd1bWVudCA9IGluZmVycmVkVHlwZXNGb3JTZXRbMF07CiAgICAgICAgaW5mZXJyZXIuaW5zdHJ1bWVudGF0aW9uPy5yZWNvcmQoCiAgICAgICAgICAgIGluZmVycmVyLnVyaSwKICAgICAgICAgICAgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgICAgICAndHlwZUFyZ3MnLAogICAgICAgICAgICBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlQXJncyhbaW5mZXJyZWRUeXBlQXJndW1lbnRdKSk7CgogICAgICAgIFNldExpdGVyYWxKdWRnbWVudCBzZXRMaXRlcmFsID0gbmV3IFNldExpdGVyYWxKdWRnbWVudChzZXRFbGVtZW50cywKICAgICAgICAgICAgdHlwZUFyZ3VtZW50OiBpbmZlcnJlZFR5cGVBcmd1bWVudCwgaXNDb25zdDogbm9kZS5pc0NvbnN0KQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gbm9kZS5maWxlT2Zmc2V0OwogICAgICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZChub2RlLCBzZXRMaXRlcmFsKTsKICAgICAgICBpZiAodHlwZUNoZWNrc05lZWRlZCkgewogICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzZXRMaXRlcmFsLmV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGNoZWNrRWxlbWVudChzZXRMaXRlcmFsLmV4cHJlc3Npb25zW2ldLCBzZXRMaXRlcmFsLAogICAgICAgICAgICAgICAgc2V0TGl0ZXJhbC50eXBlQXJndW1lbnQsIGluZmVycmVkU3ByZWFkVHlwZXMpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBzZXRMaXRlcmFsLmluZmVycmVkVHlwZSA9CiAgICAgICAgICAgIG5ldyBJbnRlcmZhY2VUeXBlKGluZmVycmVyLmNvcmVUeXBlcy5zZXRDbGFzcywgaW5mZXJyZWRUeXBlc0ZvclNldCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChjYW5CZVNldCAmJiBjYW5CZU1hcCAmJiBub2RlLmVudHJpZXMuaXNOb3RFbXB0eSkgewogICAgICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgaW5mZXJyZXIuaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGluZmVycmVyLmhlbHBlcgogICAgICAgICAgICAgICAgLmJ1aWxkUHJvYmxlbShtZXNzYWdlQ2FudERpc2FtYmlndWF0ZU5vdEVub3VnaEluZm9ybWF0aW9uLAogICAgICAgICAgICAgICAgICAgIG5vZGUuZmlsZU9mZnNldCwgMSkpKTsKICAgICAgICBub2RlLmluZmVycmVkVHlwZSA9IGNvbnN0IEJvdHRvbVR5cGUoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKCFjYW5CZVNldCAmJiAhY2FuQmVNYXApIHsKICAgICAgICBpZiAoIWluZmVycmVyLmlzVG9wTGV2ZWwpIHsKICAgICAgICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgICBub2RlLAogICAgICAgICAgICAgIGluZmVycmVyLmhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihpbmZlcnJlci5oZWxwZXIKICAgICAgICAgICAgICAgICAgLmJ1aWxkUHJvYmxlbShtZXNzYWdlQ2FudERpc2FtYmlndWF0ZUFtYmlndW91c0luZm9ybWF0aW9uLAogICAgICAgICAgICAgICAgICAgICAgbm9kZS5maWxlT2Zmc2V0LCAxKSkpOwogICAgICAgIH0KICAgICAgICBub2RlLmluZmVycmVkVHlwZSA9IGNvbnN0IEJvdHRvbVR5cGUoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LmluZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBlKAogICAgICAgICAgbWFwVHlwZSwKICAgICAgICAgIG1hcENsYXNzLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgZm9ybWFsVHlwZXMsCiAgICAgICAgICBhY3R1YWxUeXBlcywKICAgICAgICAgIHR5cGVDb250ZXh0LAogICAgICAgICAgaW5mZXJyZWRUeXBlcyk7CiAgICAgIGluZmVycmVkS2V5VHlwZSA9IGluZmVycmVkVHlwZXNbMF07CiAgICAgIGluZmVycmVkVmFsdWVUeXBlID0gaW5mZXJyZWRUeXBlc1sxXTsKICAgICAgaW5mZXJyZXIuaW5zdHJ1bWVudGF0aW9uPy5yZWNvcmQoCiAgICAgICAgICBpbmZlcnJlci51cmksCiAgICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgICAndHlwZUFyZ3MnLAogICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZUFyZ3MoCiAgICAgICAgICAgICAgW2luZmVycmVkS2V5VHlwZSwgaW5mZXJyZWRWYWx1ZVR5cGVdKSk7CiAgICAgIG5vZGUua2V5VHlwZSA9IGluZmVycmVkS2V5VHlwZTsKICAgICAgbm9kZS52YWx1ZVR5cGUgPSBpbmZlcnJlZFZhbHVlVHlwZTsKICAgIH0KICAgIGlmICh0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5lbnRyaWVzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgY2hlY2tNYXBFbnRyeShub2RlLmVudHJpZXNbaV0sIG5vZGUsIGNhY2hlZEtleXNbaV0sIGNhY2hlZFZhbHVlc1tpXSwKICAgICAgICAgICAgbm9kZS5rZXlUeXBlLCBub2RlLnZhbHVlVHlwZSwgaW5mZXJyZWRTcHJlYWRUeXBlcyk7CiAgICAgIH0KICAgIH0KICAgIG5vZGUuaW5mZXJyZWRUeXBlID0KICAgICAgICBuZXcgSW50ZXJmYWNlVHlwZShtYXBDbGFzcywgW2luZmVycmVkS2V5VHlwZSwgaW5mZXJyZWRWYWx1ZVR5cGVdKTsKICAgIGlmICghaW5mZXJyZXIuaXNUb3BMZXZlbCkgewogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gaW5mZXJyZXIubGlicmFyeTsKICAgICAgLy8gRWl0aGVyIGJvdGggW19kZWNsYXJlZEtleVR5cGVdIGFuZCBbX2RlY2xhcmVkVmFsdWVUeXBlXSBhcmUgb21pdHRlZCBvcgogICAgICAvLyBub25lIG9mIHRoZW0sIHNvIHdlIG1heSBqdXN0IGNoZWNrIG9uZS4KICAgICAgaWYgKGluZmVyZW5jZU5lZWRlZCkgewogICAgICAgIGxpYnJhcnkuY2hlY2tCb3VuZHNJbk1hcExpdGVyYWwoCiAgICAgICAgICAgIG5vZGUsIGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudCwgaW5mZXJyZXIuaGVscGVyLnVyaSwKICAgICAgICAgICAgaW5mZXJyZWQ6IHRydWUpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0TWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIGlmIChub2RlLm5hbWUubmFtZSA9PSAndW5hcnktJyAmJgogICAgICAgIG5vZGUuYXJndW1lbnRzLnR5cGVzLmlzRW1wdHkgJiYKICAgICAgICBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmlzRW1wdHkgJiYKICAgICAgICBub2RlLmFyZ3VtZW50cy5uYW1lZC5pc0VtcHR5KSB7CiAgICAgIC8vIFJlcGxhY2UgaW50ZWdlciBsaXRlcmFscyBpbiBhIGRvdWJsZSBjb250ZXh0IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcKICAgICAgLy8gZG91YmxlIGxpdGVyYWwgaWYgaXQncyBleGFjdC4gIEZvciBkb3VibGUgbGl0ZXJhbHMsIHRoZSBuZWdhdGlvbiBpcwogICAgICAvLyBmb2xkZWQgYXdheS4gIEluIGFueSBub24tZG91YmxlIGNvbnRleHQsIG9yIGlmIHRoZXJlIGlzIG5vIGV4YWN0CiAgICAgIC8vIGRvdWJsZSB2YWx1ZSwgdGhlbiB0aGUgY29ycmVzcG9uZGluZyBpbnRlZ2VyIGxpdGVyYWwgaXMgbGVmdC4gIFRoZQogICAgICAvLyBuZWdhdGlvbiBpcyBub3QgZm9sZGVkIGF3YXkgc28gdGhhdCBwbGF0Zm9ybXMgd2l0aCB3ZWIgbGl0ZXJhbHMgY2FuCiAgICAgIC8vIGRpc3Rpbmd1aXNoIGJldHdlZW4gKG5vbi1uZWdhdGVkKSAweDgwMDAwMDAwMDAwMDAwMDAgcmVwcmVzZW50ZWQgYXMKICAgICAgLy8gaW50ZWdlciBsaXRlcmFsIC05MjIzMzcyMDM2ODU0Nzc1ODA4IHdoaWNoIHNob3VsZCBiZSBhIHBvc2l0aXZlIG51bWJlciwKICAgICAgLy8gYW5kIG5lZ2F0ZWQgOTIyMzM3MjAzNjg1NDc3NTgwOCByZXByZXNlbnRlZCBhcwogICAgICAvLyAtOTIyMzM3MjAzNjg1NDc3NTgwOC51bmFyeS0oKSB3aGljaCBzaG91bGQgYmUgYSBuZWdhdGl2ZSBudW1iZXIuCiAgICAgIGlmIChub2RlLnJlY2VpdmVyIGlzIEludEp1ZGdtZW50KSB7CiAgICAgICAgSW50SnVkZ21lbnQgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgICAgIGlmIChpbmZlcnJlci5pc0RvdWJsZUNvbnRleHQodHlwZUNvbnRleHQpKSB7CiAgICAgICAgICBkb3VibGUgZG91YmxlVmFsdWUgPSByZWNlaXZlci5hc0RvdWJsZShuZWdhdGVkOiB0cnVlKTsKICAgICAgICAgIGlmIChkb3VibGVWYWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgICAgIG5vZGUsIERvdWJsZUxpdGVyYWwoZG91YmxlVmFsdWUpLi5maWxlT2Zmc2V0ID0gbm9kZS5maWxlT2Zmc2V0KTsKICAgICAgICAgICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuZG91YmxlQ2xhc3MucmF3VHlwZTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIEV4cHJlc3Npb24gZXJyb3IgPSBjaGVja1dlYkludExpdGVyYWxzRXJyb3JJZlVuZXhhY3QoCiAgICAgICAgICAgIGluZmVycmVyLCByZWNlaXZlci52YWx1ZSwgcmVjZWl2ZXIubGl0ZXJhbCwgcmVjZWl2ZXIuZmlsZU9mZnNldCk7CiAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHsKICAgICAgICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZChub2RlLCBlcnJvcik7CiAgICAgICAgICBub2RlLmluZmVycmVkVHlwZSA9IGNvbnN0IEJvdHRvbVR5cGUoKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChub2RlLnJlY2VpdmVyIGlzIFNoYWRvd0xhcmdlSW50TGl0ZXJhbCkgewogICAgICAgIFNoYWRvd0xhcmdlSW50TGl0ZXJhbCByZWNlaXZlciA9IG5vZGUucmVjZWl2ZXI7CiAgICAgICAgaWYgKCFyZWNlaXZlci5pc1BhcmVudGhlc2l6ZWQpIHsKICAgICAgICAgIGlmIChpbmZlcnJlci5pc0RvdWJsZUNvbnRleHQodHlwZUNvbnRleHQpKSB7CiAgICAgICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IHJlY2VpdmVyLmFzRG91YmxlKG5lZ2F0ZWQ6IHRydWUpOwogICAgICAgICAgICBpZiAoZG91YmxlVmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgICAgIG5vZGUucGFyZW50LnJlcGxhY2VDaGlsZChub2RlLAogICAgICAgICAgICAgICAgICBEb3VibGVMaXRlcmFsKGRvdWJsZVZhbHVlKS4uZmlsZU9mZnNldCA9IG5vZGUuZmlsZU9mZnNldCk7CiAgICAgICAgICAgICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBpbmZlcnJlci5jb3JlVHlwZXMuZG91YmxlQ2xhc3MucmF3VHlwZTsKICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaW50IGludFZhbHVlID0gcmVjZWl2ZXIuYXNJbnQ2NChuZWdhdGVkOiB0cnVlKTsKICAgICAgICAgIGlmIChpbnRWYWx1ZSA9PSBudWxsKSB7CiAgICAgICAgICAgIEV4cHJlc3Npb24gZXJyb3IgPSBpbmZlcnJlci5oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICAgICAgICBpbmZlcnJlci5oZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlSW50ZWdlckxpdGVyYWxJc091dE9mUmFuZ2UKICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMocmVjZWl2ZXIubGl0ZXJhbCksCiAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZXIuZmlsZU9mZnNldCwKICAgICAgICAgICAgICAgICAgICByZWNlaXZlci5saXRlcmFsLmxlbmd0aCkpOwogICAgICAgICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQobm9kZSwgZXJyb3IpOwogICAgICAgICAgICBub2RlLmluZmVycmVkVHlwZSA9IGNvbnN0IEJvdHRvbVR5cGUoKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaW50VmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgICBFeHByZXNzaW9uIGVycm9yID0gY2hlY2tXZWJJbnRMaXRlcmFsc0Vycm9ySWZVbmV4YWN0KAogICAgICAgICAgICAgICAgaW5mZXJyZXIsIGludFZhbHVlLCByZWNlaXZlci5saXRlcmFsLCByZWNlaXZlci5maWxlT2Zmc2V0KTsKICAgICAgICAgICAgaWYgKGVycm9yICE9IG51bGwpIHsKICAgICAgICAgICAgICBub2RlLnBhcmVudC5yZXBsYWNlQ2hpbGQobm9kZSwgZXJyb3IpOwogICAgICAgICAgICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gY29uc3QgQm90dG9tVHlwZSgpOwogICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG5vZGUucmVjZWl2ZXIgPSBJbnRMaXRlcmFsKC1pbnRWYWx1ZSkKICAgICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBub2RlLnJlY2VpdmVyLmZpbGVPZmZzZXQKICAgICAgICAgICAgICAuLnBhcmVudCA9IG5vZGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB2YXIgaW5mZXJlbmNlUmVzdWx0ID0gaW5mZXJyZXIuaW5mZXJNZXRob2RJbnZvY2F0aW9uKAogICAgICAgIG5vZGUsIG5vZGUucmVjZWl2ZXIsIG5vZGUuZmlsZU9mZnNldCwgbm9kZS5faXNJbXBsaWNpdENhbGwsIHR5cGVDb250ZXh0LAogICAgICAgIGRlc3VnYXJlZEludm9jYXRpb246IG5vZGUpOwogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBpbmZlcmVuY2VSZXN1bHQudHlwZTsKICB9CgogIHZvaWQgdmlzaXROYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbkp1ZGdtZW50KAogICAgICBOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbkp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBFeHByZXNzaW9uIGluaXRpYWxpemVyID0gbm9kZS52YXJpYWJsZUp1ZGdtZW50LmluaXRpYWxpemVyOwogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKGluaXRpYWxpemVyLCB0eXBlQ29udGV4dCwgdHJ1ZSk7CiAgICBub2RlLmluZmVycmVkVHlwZSA9IGdldEluZmVycmVkVHlwZShpbml0aWFsaXplciwgaW5mZXJyZXIpOwogICAgbm9kZS52YXJpYWJsZS50eXBlID0gbm9kZS5pbmZlcnJlZFR5cGU7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROb3QoTm90IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICB2YXIgb3BlcmFuZCA9IG5vZGUub3BlcmFuZDsKICAgIHZhciBib29sVHlwZSA9IGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZTsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihvcGVyYW5kLCBib29sVHlwZSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZShib29sVHlwZSwgZ2V0SW5mZXJyZWRUeXBlKG9wZXJhbmQsIGluZmVycmVyKSwKICAgICAgICBub2RlLm9wZXJhbmQsIG5vZGUuZmlsZU9mZnNldCk7CiAgfQoKICB2b2lkIHZpc2l0TnVsbEF3YXJlTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICBOdWxsQXdhcmVNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHZhciBpbmZlcmVuY2VSZXN1bHQgPSBpbmZlcnJlci5pbmZlck1ldGhvZEludm9jYXRpb24oCiAgICAgICAgbm9kZSwgbm9kZS52YXJpYWJsZS5pbml0aWFsaXplciwgbm9kZS5maWxlT2Zmc2V0LCBmYWxzZSwgdHlwZUNvbnRleHQsCiAgICAgICAgcmVjZWl2ZXJWYXJpYWJsZTogbm9kZS52YXJpYWJsZSwKICAgICAgICBkZXN1Z2FyZWRJbnZvY2F0aW9uOiBub2RlLl9kZXN1Z2FyZWRJbnZvY2F0aW9uKTsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gaW5mZXJlbmNlUmVzdWx0LnR5cGU7CiAgICBub2RlLmJvZHkuc3RhdGljVHlwZSA9IG5vZGUuaW5mZXJyZWRUeXBlOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHZpc2l0TnVsbEF3YXJlUHJvcGVydHlHZXRKdWRnbWVudCgKICAgICAgTnVsbEF3YXJlUHJvcGVydHlHZXRKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgaW5mZXJyZXIuaW5mZXJQcm9wZXJ0eUdldCgKICAgICAgICBub2RlLCBub2RlLnJlY2VpdmVySnVkZ21lbnQsIG5vZGUuZmlsZU9mZnNldCwgdHlwZUNvbnRleHQsCiAgICAgICAgcmVjZWl2ZXJWYXJpYWJsZTogbm9kZS52YXJpYWJsZSwgZGVzdWdhcmVkR2V0OiBub2RlLl9kZXN1Z2FyZWRHZXQpOwogICAgbm9kZS5ib2R5LnN0YXRpY1R5cGUgPSBub2RlLmluZmVycmVkVHlwZTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE51bGxMaXRlcmFsKE51bGxMaXRlcmFsIG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGV0KExldCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgRGFydFR5cGUgdmFyaWFibGVUeXBlID0gbm9kZS52YXJpYWJsZS50eXBlOwogICAgaWYgKHZhcmlhYmxlVHlwZSA9PSBjb25zdCBEeW5hbWljVHlwZSgpKSB7CiAgICAgIHJldHVybiBkZWZhdWx0RXhwcmVzc2lvbihub2RlLCB0eXBlQ29udGV4dCk7CiAgICB9CiAgICBFeHByZXNzaW9uIGluaXRpYWxpemVyID0gbm9kZS52YXJpYWJsZS5pbml0aWFsaXplcjsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihpbml0aWFsaXplciwgdmFyaWFibGVUeXBlLCB0cnVlLAogICAgICAgIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgRXhwcmVzc2lvbiBib2R5ID0gbm9kZS5ib2R5OwogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKGJvZHksIHR5cGVDb250ZXh0LCB0cnVlLCBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgIC8vIFRPRE8oYWhlKTogVGhpcyBzaG91bGRuJ3QgYmUgbmVlZGVkLiBTZWUgSW5mZXJyZWRUeXBlVmlzaXRvci52aXNpdExldC4KICAgIGluZmVycmVyLnN0b3JlSW5mZXJyZWRUeXBlKG5vZGUsIGdldEluZmVycmVkVHlwZShib2R5LCBpbmZlcnJlcikpOwogIH0KCiAgdm9pZCB2aXNpdFByb3BlcnR5QXNzaWdubWVudEp1ZGdtZW50KAogICAgICBQcm9wZXJ0eUFzc2lnbm1lbnRKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgdmFyIHJlY2VpdmVyVHlwZSA9IG5vZGUuX2luZmVyUmVjZWl2ZXIoaW5mZXJyZXIpOwoKICAgIERhcnRUeXBlIHJlYWRUeXBlOwogICAgaWYgKG5vZGUucmVhZCAhPSBudWxsKSB7CiAgICAgIHZhciByZWFkTWVtYmVyID0gaW5mZXJyZXIuZmluZFByb3BlcnR5R2V0TWVtYmVyKHJlY2VpdmVyVHlwZSwgbm9kZS5yZWFkLAogICAgICAgICAgaW5zdHJ1bWVudGVkOiBmYWxzZSk7CiAgICAgIHJlYWRUeXBlID0gaW5mZXJyZXIuZ2V0Q2FsbGVlVHlwZShyZWFkTWVtYmVyLCByZWNlaXZlclR5cGUpOwogICAgICBpbmZlcnJlci5oYW5kbGVQcm9wZXJ0eUdldENvbnRyYXZhcmlhbmNlKAogICAgICAgICAgbm9kZS5yZWNlaXZlciwKICAgICAgICAgIHJlYWRNZW1iZXIsCiAgICAgICAgICBub2RlLnJlYWQgaXMgUHJvcGVydHlHZXQgPyBub2RlLnJlYWQgOiBudWxsLAogICAgICAgICAgbm9kZS5yZWFkLAogICAgICAgICAgcmVhZFR5cGUsCiAgICAgICAgICBub2RlLnJlYWQuZmlsZU9mZnNldCk7CiAgICAgIG5vZGUuX3N0b3JlTGV0VHlwZShpbmZlcnJlciwgbm9kZS5yZWFkLCByZWFkVHlwZSk7CiAgICB9CiAgICBNZW1iZXIgd3JpdGVNZW1iZXI7CiAgICBpZiAobm9kZS53cml0ZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlTWVtYmVyID0gbm9kZS5faGFuZGxlV3JpdGVDb250cmF2YXJpYW5jZShpbmZlcnJlciwgcmVjZWl2ZXJUeXBlKTsKICAgIH0KICAgIC8vIFRvIHJlcGxpY2F0ZSBhbmFseXplciBiZWhhdmlvciwgd2UgYmFzZSB0eXBlIGluZmVyZW5jZSBvbiB0aGUgd3JpdGUKICAgIC8vIG1lbWJlci4gIFRPRE8ocGF1bGJlcnJ5KTogd291bGQgaXQgYmUgYmV0dGVyIHRvIHVzZSB0aGUgcmVhZCBtZW1iZXIgd2hlbgogICAgLy8gZG9pbmcgY29tcG91bmQgYXNzaWdubWVudD8KICAgIHZhciB3cml0ZUNvbnRleHQgPSBpbmZlcnJlci5nZXRTZXR0ZXJUeXBlKHdyaXRlTWVtYmVyLCByZWNlaXZlclR5cGUpOwogICAgbm9kZS5faW5mZXJSaHMoaW5mZXJyZXIsIHJlYWRUeXBlLCB3cml0ZUNvbnRleHQpOwogICAgbm9kZS5udWxsQXdhcmVHdWFyZD8uc3RhdGljVHlwZSA9IG5vZGUuaW5mZXJyZWRUeXBlOwogICAgbm9kZS5fcmVwbGFjZVdpdGhEZXN1Z2FyZWQoKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByb3BlcnR5R2V0KFByb3BlcnR5R2V0IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBpbmZlcnJlci5pbmZlclByb3BlcnR5R2V0KG5vZGUsIG5vZGUucmVjZWl2ZXIsIG5vZGUuZmlsZU9mZnNldCwgdHlwZUNvbnRleHQsCiAgICAgICAgZGVzdWdhcmVkR2V0OiBub2RlKTsKICB9CgogIHZvaWQgdmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVySnVkZ21lbnQoCiAgICAgIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJKdWRnbWVudCBub2RlKSB7CiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IGNsYXNzVHlwZVBhcmFtZXRlcnMgPQogICAgICAgIG5vZGUudGFyZ2V0LmVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+KGNsYXNzVHlwZVBhcmFtZXRlcnMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZUFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICB0eXBlQXJndW1lbnRzW2ldID0gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKGNsYXNzVHlwZVBhcmFtZXRlcnNbaV0pOwogICAgfQogICAgQXJndW1lbnRzSnVkZ21lbnQuc2V0Tm9uSW5mZXJyYWJsZUFyZ3VtZW50VHlwZXMoCiAgICAgICAgbm9kZS5hcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpOwogICAgaW5mZXJyZXIuaW5mZXJJbnZvY2F0aW9uKAogICAgICAgIG51bGwsCiAgICAgICAgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgIG5vZGUudGFyZ2V0LmZ1bmN0aW9uLmZ1bmN0aW9uVHlwZSwKICAgICAgICBub2RlLnRhcmdldC5lbmNsb3NpbmdDbGFzcy50aGlzVHlwZSwKICAgICAgICBub2RlLmFyZ3VtZW50SnVkZ21lbnRzLAogICAgICAgIHNraXBUeXBlQXJndW1lbnRJbmZlcmVuY2U6IHRydWUpOwogICAgQXJndW1lbnRzSnVkZ21lbnQucmVtb3ZlTm9uSW5mZXJyYWJsZUFyZ3VtZW50VHlwZXMobm9kZS5hcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFJldGhyb3coUmV0aHJvdyBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkge30KCiAgdm9pZCB2aXNpdFJldHVybkp1ZGdtZW50KFJldHVybkp1ZGdtZW50IG5vZGUpIHsKICAgIHZhciBqdWRnbWVudCA9IG5vZGUuanVkZ21lbnQ7CiAgICB2YXIgY2xvc3VyZUNvbnRleHQgPSBpbmZlcnJlci5jbG9zdXJlQ29udGV4dDsKICAgIERhcnRUeXBlIHR5cGVDb250ZXh0ID0gIWNsb3N1cmVDb250ZXh0LmlzR2VuZXJhdG9yCiAgICAgICAgPyBjbG9zdXJlQ29udGV4dC5yZXR1cm5PcllpZWxkQ29udGV4dAogICAgICAgIDogY29uc3QgVW5rbm93blR5cGUoKTsKICAgIERhcnRUeXBlIGluZmVycmVkVHlwZTsKICAgIGlmIChub2RlLmV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oanVkZ21lbnQsIHR5cGVDb250ZXh0LCB0cnVlLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgIGluZmVycmVkVHlwZSA9IGdldEluZmVycmVkVHlwZShqdWRnbWVudCwgaW5mZXJyZXIpOwogICAgfSBlbHNlIHsKICAgICAgaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLm51bGxDbGFzcy5yYXdUeXBlOwogICAgfQogICAgY2xvc3VyZUNvbnRleHQuaGFuZGxlUmV0dXJuKGluZmVycmVyLCBub2RlLCBpbmZlcnJlZFR5cGUsCiAgICAgICAgIWlkZW50aWNhbChub2RlLnJldHVybktleXdvcmRMZXhlbWUsICJyZXR1cm4iKSk7CiAgfQoKICB2b2lkIHZpc2l0U2V0TGl0ZXJhbEp1ZGdtZW50KFNldExpdGVyYWxKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgdmFyIHNldENsYXNzID0gaW5mZXJyZXIuY29yZVR5cGVzLnNldENsYXNzOwogICAgdmFyIHNldFR5cGUgPSBzZXRDbGFzcy50aGlzVHlwZTsKICAgIExpc3Q8RGFydFR5cGU+IGluZmVycmVkVHlwZXM7CiAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGVBcmd1bWVudDsKICAgIExpc3Q8RGFydFR5cGU+IGZvcm1hbFR5cGVzOwogICAgTGlzdDxEYXJ0VHlwZT4gYWN0dWFsVHlwZXM7CiAgICBib29sIGluZmVyZW5jZU5lZWRlZCA9IG5vZGUudHlwZUFyZ3VtZW50IGlzIEltcGxpY2l0VHlwZUFyZ3VtZW50OwogICAgYm9vbCB0eXBlQ2hlY2tzTmVlZGVkID0gIWluZmVycmVyLmlzVG9wTGV2ZWw7CiAgICBNYXA8VHJlZU5vZGUsIERhcnRUeXBlPiBpbmZlcnJlZFNwcmVhZFR5cGVzOwogICAgaWYgKGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgIGZvcm1hbFR5cGVzID0gW107CiAgICAgIGFjdHVhbFR5cGVzID0gW107CiAgICAgIGluZmVycmVkU3ByZWFkVHlwZXMgPSBuZXcgTWFwPFRyZWVOb2RlLCBEYXJ0VHlwZT4uaWRlbnRpdHkoKTsKICAgIH0KICAgIGlmIChpbmZlcmVuY2VOZWVkZWQpIHsKICAgICAgaW5mZXJyZWRUeXBlcyA9IFtjb25zdCBVbmtub3duVHlwZSgpXTsKICAgICAgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LmluZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBlKHNldFR5cGUsCiAgICAgICAgICBzZXRDbGFzcy50eXBlUGFyYW1ldGVycywgbnVsbCwgbnVsbCwgdHlwZUNvbnRleHQsIGluZmVycmVkVHlwZXMsCiAgICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QpOwogICAgICBpbmZlcnJlZFR5cGVBcmd1bWVudCA9IGluZmVycmVkVHlwZXNbMF07CiAgICB9IGVsc2UgewogICAgICBpbmZlcnJlZFR5cGVBcmd1bWVudCA9IG5vZGUudHlwZUFyZ3VtZW50OwogICAgfQogICAgaWYgKGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5leHByZXNzaW9ucy5sZW5ndGg7ICsraSkgewogICAgICAgIERhcnRUeXBlIHR5cGUgPSBpbmZlckVsZW1lbnQoCiAgICAgICAgICAgIG5vZGUuZXhwcmVzc2lvbnNbaV0sCiAgICAgICAgICAgIG5vZGUsCiAgICAgICAgICAgIGluZmVycmVkVHlwZUFyZ3VtZW50LAogICAgICAgICAgICBpbmZlcnJlZFNwcmVhZFR5cGVzLAogICAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQsCiAgICAgICAgICAgIHR5cGVDaGVja3NOZWVkZWQpOwogICAgICAgIGFjdHVhbFR5cGVzLmFkZCh0eXBlKTsKICAgICAgICBpZiAoaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgICAgICBmb3JtYWxUeXBlcy5hZGQoc2V0VHlwZS50eXBlQXJndW1lbnRzWzBdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChpbmZlcmVuY2VOZWVkZWQpIHsKICAgICAgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LmluZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBlKAogICAgICAgICAgc2V0VHlwZSwKICAgICAgICAgIHNldENsYXNzLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgZm9ybWFsVHlwZXMsCiAgICAgICAgICBhY3R1YWxUeXBlcywKICAgICAgICAgIHR5cGVDb250ZXh0LAogICAgICAgICAgaW5mZXJyZWRUeXBlcyk7CiAgICAgIGluZmVycmVkVHlwZUFyZ3VtZW50ID0gaW5mZXJyZWRUeXBlc1swXTsKICAgICAgaW5mZXJyZXIuaW5zdHJ1bWVudGF0aW9uPy5yZWNvcmQoCiAgICAgICAgICBpbmZlcnJlci51cmksCiAgICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgICAndHlwZUFyZ3MnLAogICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZUFyZ3MoW2luZmVycmVkVHlwZUFyZ3VtZW50XSkpOwogICAgICBub2RlLnR5cGVBcmd1bWVudCA9IGluZmVycmVkVHlwZUFyZ3VtZW50OwogICAgfQogICAgaWYgKHR5cGVDaGVja3NOZWVkZWQpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlLmV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgY2hlY2tFbGVtZW50KAogICAgICAgICAgICBub2RlLmV4cHJlc3Npb25zW2ldLCBub2RlLCBub2RlLnR5cGVBcmd1bWVudCwgaW5mZXJyZWRTcHJlYWRUeXBlcyk7CiAgICAgIH0KICAgIH0KICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gbmV3IEludGVyZmFjZVR5cGUoc2V0Q2xhc3MsIFtpbmZlcnJlZFR5cGVBcmd1bWVudF0pOwogICAgaWYgKCFpbmZlcnJlci5pc1RvcExldmVsKSB7CiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPSBpbmZlcnJlci5saWJyYXJ5OwogICAgICBpZiAoaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgICAgbGlicmFyeS5jaGVja0JvdW5kc0luU2V0TGl0ZXJhbCgKICAgICAgICAgICAgbm9kZSwgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LCBpbmZlcnJlci5oZWxwZXIudXJpLAogICAgICAgICAgICBpbmZlcnJlZDogdHJ1ZSk7CiAgICAgIH0KCiAgICAgIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmJhY2tlbmRUYXJnZXQuc3VwcG9ydHNTZXRMaXRlcmFscykgewogICAgICAgIGluZmVycmVyLmhlbHBlci50cmFuc2Zvcm1TZXRMaXRlcmFscyA9IHRydWU7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgdmlzaXRTdGF0aWNBc3NpZ25tZW50SnVkZ21lbnQoCiAgICAgIFN0YXRpY0Fzc2lnbm1lbnRKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgRGFydFR5cGUgcmVhZFR5cGUgPSBjb25zdCBEeW5hbWljVHlwZSgpOyAvLyBPbmx5IHVzZWQgaW4gZXJyb3IgcmVjb3ZlcnkKICAgIHZhciByZWFkID0gbm9kZS5yZWFkOwogICAgaWYgKHJlYWQgaXMgU3RhdGljR2V0KSB7CiAgICAgIHJlYWRUeXBlID0gcmVhZC50YXJnZXQuZ2V0dGVyVHlwZTsKICAgICAgbm9kZS5fc3RvcmVMZXRUeXBlKGluZmVycmVyLCByZWFkLCByZWFkVHlwZSk7CiAgICB9CiAgICBNZW1iZXIgd3JpdGVNZW1iZXI7CiAgICBEYXJ0VHlwZSB3cml0ZUNvbnRleHQgPSBjb25zdCBVbmtub3duVHlwZSgpOwogICAgdmFyIHdyaXRlID0gbm9kZS53cml0ZTsKICAgIGlmICh3cml0ZSBpcyBTdGF0aWNTZXQpIHsKICAgICAgd3JpdGVDb250ZXh0ID0gd3JpdGUudGFyZ2V0LnNldHRlclR5cGU7CiAgICAgIHdyaXRlTWVtYmVyID0gd3JpdGUudGFyZ2V0OwogICAgICBUeXBlSW5mZXJlbmNlRW5naW5lLnJlc29sdmVJbmZlcmVuY2VOb2RlKHdyaXRlTWVtYmVyKTsKICAgIH0KICAgIG5vZGUuX2luZmVyUmhzKGluZmVycmVyLCByZWFkVHlwZSwgd3JpdGVDb250ZXh0KTsKICAgIG5vZGUuX3JlcGxhY2VXaXRoRGVzdWdhcmVkKCk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdGF0aWNHZXQoU3RhdGljR2V0IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICB2YXIgdGFyZ2V0ID0gbm9kZS50YXJnZXQ7CiAgICBUeXBlSW5mZXJlbmNlRW5naW5lLnJlc29sdmVJbmZlcmVuY2VOb2RlKHRhcmdldCk7CiAgICB2YXIgdHlwZSA9IHRhcmdldC5nZXR0ZXJUeXBlOwogICAgaWYgKHRhcmdldCBpcyBQcm9jZWR1cmUgJiYgdGFyZ2V0LmtpbmQgPT0gUHJvY2VkdXJlS2luZC5NZXRob2QpIHsKICAgICAgdHlwZSA9IGluZmVycmVyLmluc3RhbnRpYXRlVGVhck9mZih0eXBlLCB0eXBlQ29udGV4dCwgbm9kZSk7CiAgICB9CiAgICBpbmZlcnJlci5zdG9yZUluZmVycmVkVHlwZShub2RlLCB0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKFN0YXRpY0ludm9jYXRpb24gbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIEZ1bmN0aW9uVHlwZSBjYWxsZWVUeXBlID0gbm9kZS50YXJnZXQgIT0gbnVsbAogICAgICAgID8gbm9kZS50YXJnZXQuZnVuY3Rpb24uZnVuY3Rpb25UeXBlCiAgICAgICAgOiBuZXcgRnVuY3Rpb25UeXBlKFtdLCBjb25zdCBEeW5hbWljVHlwZSgpKTsKICAgIGJvb2wgaGFkRXhwbGljaXRUeXBlQXJndW1lbnRzID0KICAgICAgICBnZXRFeHBsaWNpdFR5cGVBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpICE9IG51bGw7CiAgICB2YXIgaW5mZXJlbmNlUmVzdWx0ID0gaW5mZXJyZXIuaW5mZXJJbnZvY2F0aW9uKHR5cGVDb250ZXh0LCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgY2FsbGVlVHlwZSwgY2FsbGVlVHlwZS5yZXR1cm5UeXBlLCBub2RlLmFyZ3VtZW50cyk7CiAgICBpbmZlcnJlci5zdG9yZUluZmVycmVkVHlwZShub2RlLCBpbmZlcmVuY2VSZXN1bHQudHlwZSk7CiAgICBpZiAoIWhhZEV4cGxpY2l0VHlwZUFyZ3VtZW50cyAmJiBub2RlLnRhcmdldCAhPSBudWxsKSB7CiAgICAgIGluZmVycmVyLmxpYnJhcnk/LmNoZWNrQm91bmRzSW5TdGF0aWNJbnZvY2F0aW9uKAogICAgICAgICAgbm9kZSwgaW5mZXJyZXIudHlwZVNjaGVtYUVudmlyb25tZW50LCBpbmZlcnJlci5oZWxwZXIudXJpLAogICAgICAgICAgaW5mZXJyZWQ6IHRydWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oCiAgICAgIFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIGlmICghaW5mZXJyZXIuaXNUb3BMZXZlbCkgewogICAgICBmb3IgKHZhciBleHByZXNzaW9uIGluIG5vZGUuZXhwcmVzc2lvbnMpIHsKICAgICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgICAgIGV4cHJlc3Npb24sIGNvbnN0IFVua25vd25UeXBlKCksICFpbmZlcnJlci5pc1RvcExldmVsKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0xpdGVyYWwoU3RyaW5nTGl0ZXJhbCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkge30KCiAgdm9pZCB2aXNpdFN1cGVySW5pdGlhbGl6ZXJKdWRnbWVudChTdXBlckluaXRpYWxpemVySnVkZ21lbnQgbm9kZSkgewogICAgdmFyIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tU3VwZXJ0eXBlKGluZmVycmVyLmNsYXNzSGllcmFyY2h5CiAgICAgICAgLmdldENsYXNzQXNJbnN0YW5jZU9mKAogICAgICAgICAgICBpbmZlcnJlci50aGlzVHlwZS5jbGFzc05vZGUsIG5vZGUudGFyZ2V0LmVuY2xvc2luZ0NsYXNzKSk7CiAgICBpbmZlcnJlci5pbmZlckludm9jYXRpb24oCiAgICAgICAgbnVsbCwKICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKAogICAgICAgICAgICBub2RlLnRhcmdldC5mdW5jdGlvbi5mdW5jdGlvblR5cGUud2l0aG91dFR5cGVQYXJhbWV0ZXJzKSwKICAgICAgICBpbmZlcnJlci50aGlzVHlwZSwKICAgICAgICBub2RlLmFyZ3VtZW50SnVkZ21lbnRzLAogICAgICAgIHNraXBUeXBlQXJndW1lbnRJbmZlcmVuY2U6IHRydWUpOwogIH0KCiAgdm9pZCB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICBTdXBlck1ldGhvZEludm9jYXRpb25KdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgaWYgKG5vZGUuaW50ZXJmYWNlVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIuaW5zdHJ1bWVudGF0aW9uPy5yZWNvcmQoaW5mZXJyZXIudXJpLCBub2RlLmZpbGVPZmZzZXQsICd0YXJnZXQnLAogICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyKG5vZGUuaW50ZXJmYWNlVGFyZ2V0KSk7CiAgICB9CiAgICB2YXIgaW5mZXJlbmNlUmVzdWx0ID0gaW5mZXJyZXIuaW5mZXJNZXRob2RJbnZvY2F0aW9uKAogICAgICAgIG5vZGUsIG51bGwsIG5vZGUuZmlsZU9mZnNldCwgZmFsc2UsIHR5cGVDb250ZXh0LAogICAgICAgIGludGVyZmFjZU1lbWJlcjogbm9kZS5pbnRlcmZhY2VUYXJnZXQsCiAgICAgICAgbWV0aG9kTmFtZTogbm9kZS5uYW1lLAogICAgICAgIGFyZ3VtZW50czogbm9kZS5hcmd1bWVudHMpOwogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBpbmZlcmVuY2VSZXN1bHQudHlwZTsKICB9CgogIHZvaWQgdmlzaXRTdXBlclByb3BlcnR5R2V0SnVkZ21lbnQoCiAgICAgIFN1cGVyUHJvcGVydHlHZXRKdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgaWYgKG5vZGUuaW50ZXJmYWNlVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIuaW5zdHJ1bWVudGF0aW9uPy5yZWNvcmQoaW5mZXJyZXIudXJpLCBub2RlLmZpbGVPZmZzZXQsICd0YXJnZXQnLAogICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyKG5vZGUuaW50ZXJmYWNlVGFyZ2V0KSk7CiAgICB9CiAgICBpbmZlcnJlci5pbmZlclByb3BlcnR5R2V0KG5vZGUsIG51bGwsIG5vZGUuZmlsZU9mZnNldCwgdHlwZUNvbnRleHQsCiAgICAgICAgaW50ZXJmYWNlTWVtYmVyOiBub2RlLmludGVyZmFjZVRhcmdldCwgcHJvcGVydHlOYW1lOiBub2RlLm5hbWUpOwogIH0KCiAgdm9pZCB2aXNpdFN3aXRjaFN0YXRlbWVudEp1ZGdtZW50KFN3aXRjaFN0YXRlbWVudEp1ZGdtZW50IG5vZGUpIHsKICAgIHZhciBleHByZXNzaW9uSnVkZ21lbnQgPSBub2RlLmV4cHJlc3Npb25KdWRnbWVudDsKICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihleHByZXNzaW9uSnVkZ21lbnQsIGNvbnN0IFVua25vd25UeXBlKCksIHRydWUpOwogICAgdmFyIGV4cHJlc3Npb25UeXBlID0gZ2V0SW5mZXJyZWRUeXBlKGV4cHJlc3Npb25KdWRnbWVudCwgaW5mZXJyZXIpOwoKICAgIGZvciAodmFyIHN3aXRjaENhc2UgaW4gbm9kZS5jYXNlSnVkZ21lbnRzKSB7CiAgICAgIGZvciAodmFyIGNhc2VFeHByZXNzaW9uIGluIHN3aXRjaENhc2UuZXhwcmVzc2lvbkp1ZGdtZW50cykgewogICAgICAgIERhcnRUeXBlIGNhc2VFeHByZXNzaW9uVHlwZSA9CiAgICAgICAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihjYXNlRXhwcmVzc2lvbiwgZXhwcmVzc2lvblR5cGUsIHRydWUpOwoKICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBleHByZXNzaW9uIHR5cGUgaXMgYXNzaWduYWJsZSB0byB0aGUgY2FzZSBleHByZXNzaW9uIHR5cGUuCiAgICAgICAgaWYgKCFpbmZlcnJlci5pc0Fzc2lnbmFibGUoZXhwcmVzc2lvblR5cGUsIGNhc2VFeHByZXNzaW9uVHlwZSkpIHsKICAgICAgICAgIGluZmVycmVyLmhlbHBlci5hZGRQcm9ibGVtKAogICAgICAgICAgICAgIHRlbXBsYXRlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGUud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgZXhwcmVzc2lvblR5cGUsIGNhc2VFeHByZXNzaW9uVHlwZSksCiAgICAgICAgICAgICAgY2FzZUV4cHJlc3Npb24uZmlsZU9mZnNldCwKICAgICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICBtZXNzYWdlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGVDYXVzZS53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICAgICAgaW5mZXJyZXIudXJpLCBleHByZXNzaW9uSnVkZ21lbnQuZmlsZU9mZnNldCwgbm9MZW5ndGgpCiAgICAgICAgICAgICAgXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGluZmVycmVyLmluZmVyU3RhdGVtZW50KHN3aXRjaENhc2UuYm9keSk7CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0U3ltYm9sTGl0ZXJhbEp1ZGdtZW50KAogICAgICBTeW1ib2xMaXRlcmFsSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLnN5bWJvbENsYXNzLnJhd1R5cGU7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgdmlzaXRJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgIEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudCBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgRnVuY3Rpb25UeXBlIGNhbGxlZVR5cGU7CiAgICBEYXJ0VHlwZSByZXR1cm5UeXBlOwogICAgaWYgKG5vZGUuY29uc3RydWN0b3IgIT0gbnVsbCkgewogICAgICBjYWxsZWVUeXBlID0gbm9kZS5jb25zdHJ1Y3Rvci5mdW5jdGlvbi5mdW5jdGlvblR5cGU7CiAgICAgIHJldHVyblR5cGUgPSBjb21wdXRlQ29uc3RydWN0b3JSZXR1cm5UeXBlKG5vZGUuY29uc3RydWN0b3IpOwogICAgfSBlbHNlIHsKICAgICAgY2FsbGVlVHlwZSA9IG5ldyBGdW5jdGlvblR5cGUoW10sIGNvbnN0IER5bmFtaWNUeXBlKCkpOwogICAgICByZXR1cm5UeXBlID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIH0KICAgIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgaW5mZXJlbmNlUmVzdWx0ID0gaW5mZXJyZXIuaW5mZXJJbnZvY2F0aW9uKAogICAgICAgIHR5cGVDb250ZXh0LAogICAgICAgIG5vZGUuZmlsZU9mZnNldCwKICAgICAgICBjYWxsZWVUeXBlLAogICAgICAgIHJldHVyblR5cGUsCiAgICAgICAgbm9kZS5hcmd1bWVudEp1ZGdtZW50cyk7CiAgICBub2RlLmluZmVycmVkVHlwZSA9IGluZmVyZW5jZVJlc3VsdC50eXBlOwogICAgcmV0dXJuIHZpc2l0U3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50KG5vZGUsIHR5cGVDb250ZXh0KTsKICB9CgogIHZvaWQgdmlzaXRJbnZhbGlkV3JpdGVKdWRnbWVudCgKICAgICAgSW52YWxpZFdyaXRlSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIC8vIFdoZW4gYSBjb21wb3VuZCBhc3NpZ25tZW50LCB0aGUgZXhwcmVzc2lvbiBpcyBhbHJlYWR5IHdyYXBwaW5nIGluCiAgICAvLyBWYXJpYWJsZURlY2xhcmF0aW9uIGluIF9tYWtlUmVhZCgpLiBPdGhlcndpc2UsIHRlbXBvcmFyeSBhc3NvY2lhdGUKICAgIC8vIHRoZSBleHByZXNzaW9uIHdpdGggdGhpcyBub2RlLgogICAgbm9kZS5leHByZXNzaW9uLnBhcmVudCA/Pz0gbm9kZTsKCiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oCiAgICAgICAgbm9kZS5leHByZXNzaW9uLCBjb25zdCBVbmtub3duVHlwZSgpLCAhaW5mZXJyZXIuaXNUb3BMZXZlbCk7CiAgICByZXR1cm4gdmlzaXRTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQobm9kZSwgdHlwZUNvbnRleHQpOwogIH0KCiAgdm9pZCB2aXNpdFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCgKICAgICAgU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBub2RlLl9yZXBsYWNlV2l0aERlc3VnYXJlZCgpOwogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHZpc2l0VGhpc0V4cHJlc3Npb24oVGhpc0V4cHJlc3Npb24gbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUaHJvdyhUaHJvdyBub2RlLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCkgewogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgIG5vZGUuZXhwcmVzc2lvbiwgY29uc3QgVW5rbm93blR5cGUoKSwgIWluZmVycmVyLmlzVG9wTGV2ZWwpOwogIH0KCiAgdm9pZCB2aXNpdENhdGNoSnVkZ21lbnQoQ2F0Y2hKdWRnbWVudCBub2RlKSB7CiAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChub2RlLmJvZHkpOwogIH0KCiAgdm9pZCB2aXNpdFRyeUNhdGNoSnVkZ21lbnQoVHJ5Q2F0Y2hKdWRnbWVudCBub2RlKSB7CiAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChub2RlLmJvZHkpOwogICAgZm9yICh2YXIgY2F0Y2hfIGluIG5vZGUuY2F0Y2hKdWRnbWVudHMpIHsKICAgICAgdmlzaXRDYXRjaEp1ZGdtZW50KGNhdGNoXyk7CiAgICB9CiAgfQoKICB2b2lkIHZpc2l0VHJ5RmluYWxseUp1ZGdtZW50KFRyeUZpbmFsbHlKdWRnbWVudCBub2RlKSB7CiAgICBpbmZlcnJlci5pbmZlclN0YXRlbWVudChub2RlLmJvZHkpOwogICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQobm9kZS5maW5hbGl6ZXIpOwogIH0KCiAgdm9pZCB2aXNpdFR5cGVMaXRlcmFsSnVkZ21lbnQoCiAgICAgIFR5cGVMaXRlcmFsSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLnR5cGVDbGFzcy5yYXdUeXBlOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHZpc2l0VmFyaWFibGVBc3NpZ25tZW50SnVkZ21lbnQoCiAgICAgIFZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBEYXJ0VHlwZSByZWFkVHlwZTsKICAgIHZhciByZWFkID0gbm9kZS5yZWFkOwogICAgaWYgKHJlYWQgaXMgVmFyaWFibGVHZXQpIHsKICAgICAgcmVhZFR5cGUgPSByZWFkLnByb21vdGVkVHlwZSA/PyByZWFkLnZhcmlhYmxlLnR5cGU7CiAgICB9CiAgICBEYXJ0VHlwZSB3cml0ZUNvbnRleHQgPSBjb25zdCBVbmtub3duVHlwZSgpOwogICAgdmFyIHdyaXRlID0gbm9kZS53cml0ZTsKICAgIGlmICh3cml0ZSBpcyBWYXJpYWJsZVNldCkgewogICAgICB3cml0ZUNvbnRleHQgPSB3cml0ZS52YXJpYWJsZS50eXBlOwogICAgICBpZiAocmVhZCAhPSBudWxsKSB7CiAgICAgICAgbm9kZS5fc3RvcmVMZXRUeXBlKGluZmVycmVyLCByZWFkLCB3cml0ZUNvbnRleHQpOwogICAgICB9CiAgICB9CiAgICBub2RlLl9pbmZlclJocyhpbmZlcnJlciwgcmVhZFR5cGUsIHdyaXRlQ29udGV4dCk7CiAgICBub2RlLl9yZXBsYWNlV2l0aERlc3VnYXJlZCgpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50KFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCBub2RlKSB7CiAgICB2YXIgaW5pdGlhbGl6ZXJKdWRnbWVudCA9IG5vZGUuaW5pdGlhbGl6ZXJKdWRnbWVudDsKICAgIHZhciBkZWNsYXJlZFR5cGUgPSBub2RlLl9pbXBsaWNpdGx5VHlwZWQgPyBjb25zdCBVbmtub3duVHlwZSgpIDogbm9kZS50eXBlOwogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwogICAgRGFydFR5cGUgaW5pdGlhbGl6ZXJUeXBlOwogICAgaWYgKGluaXRpYWxpemVySnVkZ21lbnQgIT0gbnVsbCkgewogICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oaW5pdGlhbGl6ZXJKdWRnbWVudCwgZGVjbGFyZWRUeXBlLAogICAgICAgICAgIWluZmVycmVyLmlzVG9wTGV2ZWwgfHwgbm9kZS5faW1wbGljaXRseVR5cGVkLAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSk7CiAgICAgIGluaXRpYWxpemVyVHlwZSA9IGdldEluZmVycmVkVHlwZShpbml0aWFsaXplckp1ZGdtZW50LCBpbmZlcnJlcik7CiAgICAgIGluZmVycmVkVHlwZSA9IGluZmVycmVyLmluZmVyRGVjbGFyYXRpb25UeXBlKGluaXRpYWxpemVyVHlwZSk7CiAgICB9IGVsc2UgewogICAgICBpbmZlcnJlZFR5cGUgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfQogICAgaWYgKG5vZGUuX2ltcGxpY2l0bHlUeXBlZCkgewogICAgICBpbmZlcnJlci5pbnN0cnVtZW50YXRpb24/LnJlY29yZChpbmZlcnJlci51cmksIG5vZGUuZmlsZU9mZnNldCwgJ3R5cGUnLAogICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZShpbmZlcnJlZFR5cGUpKTsKICAgICAgbm9kZS50eXBlID0gaW5mZXJyZWRUeXBlOwogICAgfQogICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICB2YXIgcmVwbGFjZWRJbml0aWFsaXplciA9IGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgICBub2RlLnR5cGUsIGluaXRpYWxpemVyVHlwZSwgbm9kZS5pbml0aWFsaXplciwgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgICAgaXNWb2lkQWxsb3dlZDogbm9kZS50eXBlIGlzIFZvaWRUeXBlKTsKICAgICAgaWYgKHJlcGxhY2VkSW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgIG5vZGUuaW5pdGlhbGl6ZXIgPSByZXBsYWNlZEluaXRpYWxpemVyOwogICAgICB9CiAgICB9CiAgICBpZiAoIWluZmVycmVyLmlzVG9wTGV2ZWwpIHsKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGluZmVycmVyLmxpYnJhcnk7CiAgICAgIGlmIChub2RlLl9pbXBsaWNpdGx5VHlwZWQpIHsKICAgICAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5WYXJpYWJsZURlY2xhcmF0aW9uKAogICAgICAgICAgICBub2RlLCBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQsIGluZmVycmVyLmhlbHBlci51cmksCiAgICAgICAgICAgIGluZmVycmVkOiB0cnVlKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCB2aXNpdFVucmVzb2x2ZWRUYXJnZXRJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgIFVucmVzb2x2ZWRUYXJnZXRJbnZvY2F0aW9uSnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIHZhciByZXN1bHQgPSB2aXNpdFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudChub2RlLCB0eXBlQ29udGV4dCk7CiAgICBpbmZlcnJlci5pbmZlckludm9jYXRpb24oCiAgICAgICAgdHlwZUNvbnRleHQsCiAgICAgICAgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgIFR5cGVJbmZlcnJlckltcGwudW5rbm93bkZ1bmN0aW9uLAogICAgICAgIGNvbnN0IER5bmFtaWNUeXBlKCksCiAgICAgICAgbm9kZS5hcmd1bWVudHNKdWRnbWVudCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCB2aXNpdFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudCgKICAgICAgVW5yZXNvbHZlZFZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24obm9kZS5yaHMsIGNvbnN0IFVua25vd25UeXBlKCksIHRydWUpOwogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSBub2RlLmlzQ29tcG91bmQKICAgICAgICA/IGNvbnN0IER5bmFtaWNUeXBlKCkKICAgICAgICA6IGdldEluZmVycmVkVHlwZShub2RlLnJocywgaW5mZXJyZXIpOwogICAgcmV0dXJuIHZpc2l0U3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50KG5vZGUsIHR5cGVDb250ZXh0KTsKICB9CgogIHZvaWQgdmlzaXRWYXJpYWJsZUdldEp1ZGdtZW50KAogICAgICBWYXJpYWJsZUdldEp1ZGdtZW50IG5vZGUsIERhcnRUeXBlIHR5cGVDb250ZXh0KSB7CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQgdmFyaWFibGUgPSBub2RlLnZhcmlhYmxlOwogICAgYm9vbCBtdXRhdGVkSW5DbG9zdXJlID0gdmFyaWFibGUuX211dGF0ZWRJbkNsb3N1cmU7CiAgICBEYXJ0VHlwZSBkZWNsYXJlZE9ySW5mZXJyZWRUeXBlID0gdmFyaWFibGUudHlwZTsKCiAgICBEYXJ0VHlwZSBwcm9tb3RlZFR5cGUgPSBpbmZlcnJlci50eXBlUHJvbW90ZXIKICAgICAgICAuY29tcHV0ZVByb21vdGVkVHlwZShub2RlLl9mYWN0LCBub2RlLl9zY29wZSwgbXV0YXRlZEluQ2xvc3VyZSk7CiAgICBpZiAocHJvbW90ZWRUeXBlICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIuaW5zdHJ1bWVudGF0aW9uPy5yZWNvcmQoaW5mZXJyZXIudXJpLCBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgICAncHJvbW90ZWRUeXBlJywgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZShwcm9tb3RlZFR5cGUpKTsKICAgIH0KICAgIG5vZGUucHJvbW90ZWRUeXBlID0gcHJvbW90ZWRUeXBlOwogICAgdmFyIHR5cGUgPSBwcm9tb3RlZFR5cGUgPz8gZGVjbGFyZWRPckluZmVycmVkVHlwZTsKICAgIGlmICh2YXJpYWJsZS5faXNMb2NhbEZ1bmN0aW9uKSB7CiAgICAgIHR5cGUgPSBpbmZlcnJlci5pbnN0YW50aWF0ZVRlYXJPZmYodHlwZSwgdHlwZUNvbnRleHQsIG5vZGUpOwogICAgfQogICAgbm9kZS5pbmZlcnJlZFR5cGUgPSB0eXBlOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHZpc2l0V2hpbGVKdWRnbWVudChXaGlsZUp1ZGdtZW50IG5vZGUpIHsKICAgIHZhciBjb25kaXRpb25KdWRnbWVudCA9IG5vZGUuY29uZGl0aW9uSnVkZ21lbnQ7CiAgICB2YXIgZXhwZWN0ZWRUeXBlID0gaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogICAgaW5mZXJyZXIuaW5mZXJFeHByZXNzaW9uKAogICAgICAgIGNvbmRpdGlvbkp1ZGdtZW50LCBleHBlY3RlZFR5cGUsICFpbmZlcnJlci5pc1RvcExldmVsKTsKICAgIGluZmVycmVyLmVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgZXhwZWN0ZWRUeXBlLAogICAgICAgIGdldEluZmVycmVkVHlwZShjb25kaXRpb25KdWRnbWVudCwgaW5mZXJyZXIpLAogICAgICAgIG5vZGUuY29uZGl0aW9uLAogICAgICAgIG5vZGUuY29uZGl0aW9uLmZpbGVPZmZzZXQpOwogICAgaW5mZXJyZXIuaW5mZXJTdGF0ZW1lbnQobm9kZS5ib2R5KTsKICB9CgogIHZvaWQgdmlzaXRZaWVsZEp1ZGdtZW50KFlpZWxkSnVkZ21lbnQgbm9kZSkgewogICAgdmFyIGp1ZGdtZW50ID0gbm9kZS5qdWRnbWVudDsKICAgIHZhciBjbG9zdXJlQ29udGV4dCA9IGluZmVycmVyLmNsb3N1cmVDb250ZXh0OwogICAgaWYgKGNsb3N1cmVDb250ZXh0LmlzR2VuZXJhdG9yKSB7CiAgICAgIHZhciB0eXBlQ29udGV4dCA9IGNsb3N1cmVDb250ZXh0LnJldHVybk9yWWllbGRDb250ZXh0OwogICAgICBpZiAobm9kZS5pc1lpZWxkU3RhciAmJiB0eXBlQ29udGV4dCAhPSBudWxsKSB7CiAgICAgICAgdHlwZUNvbnRleHQgPSBpbmZlcnJlci53cmFwVHlwZSgKICAgICAgICAgICAgdHlwZUNvbnRleHQsCiAgICAgICAgICAgIGNsb3N1cmVDb250ZXh0LmlzQXN5bmMKICAgICAgICAgICAgICAgID8gaW5mZXJyZXIuY29yZVR5cGVzLnN0cmVhbUNsYXNzCiAgICAgICAgICAgICAgICA6IGluZmVycmVyLmNvcmVUeXBlcy5pdGVyYWJsZUNsYXNzKTsKICAgICAgfQogICAgICBpbmZlcnJlci5pbmZlckV4cHJlc3Npb24oanVkZ21lbnQsIHR5cGVDb250ZXh0LCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGluZmVycmVyLmluZmVyRXhwcmVzc2lvbihqdWRnbWVudCwgY29uc3QgVW5rbm93blR5cGUoKSwgdHJ1ZSk7CiAgICB9CiAgICBjbG9zdXJlQ29udGV4dC5oYW5kbGVZaWVsZChpbmZlcnJlciwgbm9kZS5pc1lpZWxkU3RhciwKICAgICAgICBnZXRJbmZlcnJlZFR5cGUoanVkZ21lbnQsIGluZmVycmVyKSwgbm9kZS5leHByZXNzaW9uLCBub2RlLmZpbGVPZmZzZXQpOwogIH0KCiAgdm9pZCB2aXNpdExvYWRMaWJyYXJ5SnVkZ21lbnQoCiAgICAgIExvYWRMaWJyYXJ5SnVkZ21lbnQgbm9kZSwgRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIG5vZGUuaW5mZXJyZWRUeXBlID0KICAgICAgICBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQuZnV0dXJlVHlwZShjb25zdCBEeW5hbWljVHlwZSgpKTsKICAgIGlmIChub2RlLmFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIHZhciBjYWxsZWVUeXBlID0gbmV3IEZ1bmN0aW9uVHlwZShbXSwgbm9kZS5pbmZlcnJlZFR5cGUpOwogICAgICBpbmZlcnJlci5pbmZlckludm9jYXRpb24odHlwZUNvbnRleHQsIG5vZGUuZmlsZU9mZnNldCwgY2FsbGVlVHlwZSwKICAgICAgICAgIGNhbGxlZVR5cGUucmV0dXJuVHlwZSwgbm9kZS5hcmd1bWVudEp1ZGdtZW50cyk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgdmlzaXRMb2FkTGlicmFyeVRlYXJPZmZKdWRnbWVu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dGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mICJrZXJuZWxfc2hhZG93X2FzdC5kYXJ0IjsKCkRhcnRUeXBlIGdldEluZmVycmVkVHlwZShFeHByZXNzaW9uIGV4cHJlc3Npb24sIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICBpZiAoZXhwcmVzc2lvbiBpcyBFeHByZXNzaW9uSnVkZ21lbnQpIHsKICAgIHJldHVybiBleHByZXNzaW9uLmluZmVycmVkVHlwZTsKICB9IGVsc2UgewogICAgcmV0dXJuIGV4cHJlc3Npb24uYWNjZXB0MShjb25zdCBJbmZlcnJlZFR5cGVWaXNpdG9yKCksIGluZmVycmVyKTsKICB9Cn0KCkRhcnRUeXBlIGludmFsaWRUb0JvdHRvbShEYXJ0VHlwZSB0eXBlKSB7CiAgLy8gVE9ETyhhaGUpOiBUaGlzIHNob3VsZCByZWFsbHkgcmV0dXJuIFtCb3R0b21UeXBlXSwgYnV0IHRoYXQgcmVxdWlyZXMgbW9yZQogIC8vIHdvcmsgdG8gdGhlIEtlcm5lbCB0eXBlIHN5c3RlbSBhbmQgaW1wbGVtZW50YXRpb24uCiAgcmV0dXJuICh0eXBlID09IG51bGwgfHwgdHlwZSBpcyBJbnZhbGlkVHlwZSkgPyBjb25zdCBEeW5hbWljVHlwZSgpIDogdHlwZTsKfQoKRGFydFR5cGUgaW52YWxpZFRvVG9wKERhcnRUeXBlIHR5cGUpIHsKICByZXR1cm4gKHR5cGUgPT0gbnVsbCB8fCB0eXBlIGlzIEludmFsaWRUeXBlKSA/IGNvbnN0IER5bmFtaWNUeXBlKCkgOiB0eXBlOwp9CgpjbGFzcyBJbmZlcnJlZFR5cGVWaXNpdG9yCiAgICBleHRlbmRzIEV4cHJlc3Npb25WaXNpdG9yMTxEYXJ0VHlwZSwgVHlwZUluZmVycmVySW1wbD4gewogIGNvbnN0IEluZmVycmVkVHlwZVZpc2l0b3IoKTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZGVmYXVsdEV4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICB1bmhhbmRsZWQoIiR7bm9kZS5ydW50aW1lVHlwZX0iLCAiZ2V0SW5mZXJyZWRUeXBlIiwgbm9kZS5maWxlT2Zmc2V0LAogICAgICAgIGluZmVycmVyLnVyaSk7CiAgICByZXR1cm4gY29uc3QgSW52YWxpZFR5cGUoKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0SW50TGl0ZXJhbChJbnRMaXRlcmFsIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci5jb3JlVHlwZXMuaW50Q2xhc3MucmF3VHlwZTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0RG91YmxlTGl0ZXJhbChEb3VibGVMaXRlcmFsIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci5jb3JlVHlwZXMuZG91YmxlQ2xhc3MucmF3VHlwZTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0SW52YWxpZEV4cHJlc3Npb24oCiAgICAgIEludmFsaWRFeHByZXNzaW9uIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBjb25zdCBCb3R0b21UeXBlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEFzRXhwcmVzc2lvbihBc0V4cHJlc3Npb24gbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGludmFsaWRUb0JvdHRvbShub2RlLnR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRBd2FpdEV4cHJlc3Npb24oCiAgICAgIEF3YWl0RXhwcmVzc2lvbiBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIucmVhZEluZmVycmVkVHlwZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0VGhpc0V4cHJlc3Npb24oVGhpc0V4cHJlc3Npb24gbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGludmFsaWRUb0JvdHRvbShpbmZlcnJlci50aGlzVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEJvb2xMaXRlcmFsKEJvb2xMaXRlcmFsIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdENvbmRpdGlvbmFsRXhwcmVzc2lvbigKICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBub2RlLnN0YXRpY1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci5yZWFkSW5mZXJyZWRUeXBlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRJc0V4cHJlc3Npb24oSXNFeHByZXNzaW9uIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci5jb3JlVHlwZXMuYm9vbENsYXNzLnJhd1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbigKICAgICAgRnVuY3Rpb25FeHByZXNzaW9uIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci5yZWFkSW5mZXJyZWRUeXBlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRMb2dpY2FsRXhwcmVzc2lvbigKICAgICAgTG9naWNhbEV4cHJlc3Npb24gbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLmNvcmVUeXBlcy5ib29sQ2xhc3MucmF3VHlwZTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0Tm90KE5vdCBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIuY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXROdWxsTGl0ZXJhbChOdWxsTGl0ZXJhbCBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIuY29yZVR5cGVzLm51bGxDbGFzcy5yYXdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRQcm9wZXJ0eUdldChQcm9wZXJ0eUdldCBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIucmVhZEluZmVycmVkVHlwZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0UmV0aHJvdyhSZXRocm93IG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBjb25zdCBCb3R0b21UeXBlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oCiAgICAgIFN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLmNvcmVUeXBlcy5zdHJpbmdDbGFzcy5yYXdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRTdHJpbmdMaXRlcmFsKFN0cmluZ0xpdGVyYWwgbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLmNvcmVUeXBlcy5zdHJpbmdDbGFzcy5yYXdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRMZXQoTGV0IG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIC8vIFRPRE8oYWhlKTogV2Ugc2hvdWxkIGJlIGFibGUgdG8gcmV0dXJuIHRoZSBpbmZlcnJlZCB0eXBlIG9mCiAgICAvLyBub2RlLmJvZHkuIEhvd2V2ZXIsIHRoYXQgdHlwZSBtYXkgYmUgbG9zdCwgZm9yIGV4YW1wbGUsIGluCiAgICAvLyBWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudC5fcmVwbGFjZVdpdGhEZXN1Z2FyZWQuCiAgICByZXR1cm4gaW5mZXJyZXIucmVhZEluZmVycmVkVHlwZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0U3RhdGljR2V0KFN0YXRpY0dldCBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIucmVhZEluZmVycmVkVHlwZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0U3RhdGljSW52b2NhdGlvbigKICAgICAgU3RhdGljSW52b2NhdGlvbiBub2RlLCBUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIucmVhZEluZmVycmVkVHlwZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0VGhyb3coVGhyb3cgbm9kZSwgVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgcmV0dXJuIGNvbnN0IEJvdHRvbVR5cGUoKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0Q2hlY2tMaWJyYXJ5SXNMb2FkZWQoCiAgICAgIENoZWNrTGlicmFyeUlzTG9hZGVkIG5vZGUsIFR5cGVJbmZlcnJlckltcGwgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci5jb3JlVHlwZXMub2JqZWN0Q2xhc3MucmF3VHlwZTsKICB9Cn0KgKQATk48ASIBTSokC0YEAgEqTzhNAgEnTQIBGj0fAQxLSRcgBAEMSTAEAQxPMwQBDCM7HwQBDE0nBAEMITksBAEMUS8EAQxLMQQBDCc/HAQBDCc/LAQBDE0xBAEMJDwsBAEMIzsxBAEMOzEEAQxLMQQBDEssBAEMQx8EAQwlPTMEAQxPMwQBDDtDQjksBAEMRywEAQwiOiwEAQw/HwQBDCY+MwQCAT1wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2luZmVycmVkX3R5cGVfdmlzaXRvci5kYXJ0OXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL2J1aWxkZXIuZGFydIfaLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuYnVpbGRlcjsKCmV4cG9ydCAnLi4vaWRlbnRpZmllcnMuZGFydCcKICAgIHNob3cKICAgICAgICBJZGVudGlmaWVyLAogICAgICAgIEluaXRpYWxpemVkSWRlbnRpZmllciwKICAgICAgICBRdWFsaWZpZWROYW1lLAogICAgICAgIGRlcHJlY2F0ZWRfZXh0cmFjdFRva2VuLAogICAgICAgIGZsYXR0ZW5OYW1lOwoKZXhwb3J0ICcuLi9zY29wZS5kYXJ0JyBzaG93IEFjY2Vzc0Vycm9yQnVpbGRlciwgU2NvcGUsIFNjb3BlQnVpbGRlcjsKCmV4cG9ydCAnYnVpbHRpbl90eXBlX2J1aWxkZXIuZGFydCcgc2hvdyBCdWlsdGluVHlwZUJ1aWxkZXI7CgpleHBvcnQgJ2NsYXNzX2J1aWxkZXIuZGFydCcgc2hvdyBDbGFzc0J1aWxkZXI7CgpleHBvcnQgJ2NvbnN0cnVjdG9yX3JlZmVyZW5jZV9idWlsZGVyLmRhcnQnIHNob3cgQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyOwoKZXhwb3J0ICdkZWNsYXJhdGlvbi5kYXJ0JyBzaG93IERlY2xhcmF0aW9uOwoKZXhwb3J0ICdkeW5hbWljX3R5cGVfYnVpbGRlci5kYXJ0JyBzaG93IER5bmFtaWNUeXBlQnVpbGRlcjsKCmV4cG9ydCAnZW51bV9idWlsZGVyLmRhcnQnIHNob3cgRW51bUJ1aWxkZXIsIEVudW1Db25zdGFudEluZm87CgpleHBvcnQgJ2ZpZWxkX2J1aWxkZXIuZGFydCcgc2hvdyBGaWVsZEJ1aWxkZXI7CgpleHBvcnQgJ2Zvcm1hbF9wYXJhbWV0ZXJfYnVpbGRlci5kYXJ0JyBzaG93IEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI7CgpleHBvcnQgJ3Byb2NlZHVyZV9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgRnVuY3Rpb25CdWlsZGVyLAogICAgICAgIENvbnN0cnVjdG9yQnVpbGRlciwKICAgICAgICBQcm9jZWR1cmVCdWlsZGVyLAogICAgICAgIFJlZGlyZWN0aW5nRmFjdG9yeUJ1aWxkZXI7CgpleHBvcnQgJ2Z1bmN0aW9uX3R5cGVfYnVpbGRlci5kYXJ0JyBzaG93IEZ1bmN0aW9uVHlwZUJ1aWxkZXI7CgpleHBvcnQgJ2ludmFsaWRfdHlwZV9idWlsZGVyLmRhcnQnIHNob3cgSW52YWxpZFR5cGVCdWlsZGVyOwoKZXhwb3J0ICdsaWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBMaWJyYXJ5QnVpbGRlcjsKCmV4cG9ydCAnbWVtYmVyX2J1aWxkZXIuZGFydCcgc2hvdyBNZW1iZXJCdWlsZGVyOwoKZXhwb3J0ICdtZXRhZGF0YV9idWlsZGVyLmRhcnQnIHNob3cgTWV0YWRhdGFCdWlsZGVyOwoKZXhwb3J0ICdtaXhpbl9hcHBsaWNhdGlvbl9idWlsZGVyLmRhcnQnIHNob3cgTWl4aW5BcHBsaWNhdGlvbkJ1aWxkZXI7CgpleHBvcnQgJ21vZGlmaWVyX2J1aWxkZXIuZGFydCcgc2hvdyBNb2RpZmllckJ1aWxkZXI7CgpleHBvcnQgJ25hbWVfaXRlcmF0b3IuZGFydCcgc2hvdyBOYW1lSXRlcmF0b3I7CgpleHBvcnQgJ25hbWVkX3R5cGVfYnVpbGRlci5kYXJ0JyBzaG93IE5hbWVkVHlwZUJ1aWxkZXI7CgpleHBvcnQgJ3ByZWZpeF9idWlsZGVyLmRhcnQnIHNob3cgUHJlZml4QnVpbGRlcjsKCmV4cG9ydCAndHlwZV9hbGlhc19idWlsZGVyLmRhcnQnIHNob3cgVHlwZUFsaWFzQnVpbGRlcjsKCmV4cG9ydCAndHlwZV9idWlsZGVyLmRhcnQnIHNob3cgVHlwZUJ1aWxkZXI7CgpleHBvcnQgJ3R5cGVfZGVjbGFyYXRpb25fYnVpbGRlci5kYXJ0JyBzaG93IFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXI7CgpleHBvcnQgJ3R5cGVfdmFyaWFibGVfYnVpbGRlci5kYXJ0JyBzaG93IFR5cGVWYXJpYWJsZUJ1aWxkZXI7CgpleHBvcnQgJ3VucmVzb2x2ZWRfdHlwZS5kYXJ0JyBzaG93IFVucmVzb2x2ZWRUeXBlOwoKZXhwb3J0ICd2b2lkX3R5cGVfYnVpbGRlci5kYXJ0JyBzaG93IFZvaWRUeXBlQnVpbGRlcjsKSABOTjwBFwEdCRQfFyEVAUUBPAEvAU4BLAE8AT8BLwFEASAJGRwaIwE+ATwBMwExATUBRgE1AS8BOAExATgBLQFEAT4BMwE2ATBwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9idWlsZGVyLmRhcnQ/c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NjYW5uZXIva2V5d29yZF9zdGF0ZS5kYXJ0kJkvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5zY2FubmVyLmtleXdvcmRzOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIGFzIGFuYWx5emVyOwoKaW1wb3J0ICdjaGFyYWN0ZXJzLmRhcnQnIHNob3cgJGEsICR6LCAkQSwgJFo7CgovKioKICogQWJzdHJhY3Qgc3RhdGUgaW4gYSBzdGF0ZSBtYWNoaW5lIGZvciBzY2FubmluZyBrZXl3b3Jkcy4KICovCmFic3RyYWN0IGNsYXNzIEtleXdvcmRTdGF0ZSB7CiAgS2V5d29yZFN0YXRlIG5leHQoaW50IGMpOwogIEtleXdvcmRTdGF0ZSBuZXh0Q2FwaXRhbChpbnQgYyk7CgogIGFuYWx5emVyLktleXdvcmQgZ2V0IGtleXdvcmQ7CgogIHN0YXRpYyBLZXl3b3JkU3RhdGUgX0tFWVdPUkRfU1RBVEU7CiAgc3RhdGljIEtleXdvcmRTdGF0ZSBnZXQgS0VZV09SRF9TVEFURSB7CiAgICBpZiAoX0tFWVdPUkRfU1RBVEUgPT0gbnVsbCkgewogICAgICBMaXN0PFN0cmluZz4gc3RyaW5ncyA9IG5ldyBMaXN0PFN0cmluZz4oYW5hbHl6ZXIuS2V5d29yZC52YWx1ZXMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbmFseXplci5LZXl3b3JkLnZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICAgIHN0cmluZ3NbaV0gPSBhbmFseXplci5LZXl3b3JkLnZhbHVlc1tpXS5sZXhlbWU7CiAgICAgIH0KICAgICAgc3RyaW5ncy5zb3J0KChhLCBiKSA9PiBhLmNvbXBhcmVUbyhiKSk7CiAgICAgIF9LRVlXT1JEX1NUQVRFID0gY29tcHV0ZUtleXdvcmRTdGF0ZVRhYmxlKDAsIHN0cmluZ3MsIDAsIHN0cmluZ3MubGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiBfS0VZV09SRF9TVEFURTsKICB9CgogIHN0YXRpYyBLZXl3b3JkU3RhdGUgY29tcHV0ZUtleXdvcmRTdGF0ZVRhYmxlKAogICAgICBpbnQgc3RhcnQsIExpc3Q8U3RyaW5nPiBzdHJpbmdzLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7CiAgICBib29sIGlzTG93ZXJjYXNlID0gdHJ1ZTsKCiAgICBMaXN0PEtleXdvcmRTdGF0ZT4gdGFibGUgPSBuZXcgTGlzdDxLZXl3b3JkU3RhdGU+KCR6IC0gJEEgKyAxKTsKICAgIGFzc2VydChsZW5ndGggIT0gMCk7CiAgICBpbnQgY2h1bmsgPSAwOwogICAgaW50IGNodW5rU3RhcnQgPSAtMTsKICAgIGJvb2wgaXNMZWFmID0gZmFsc2U7CiAgICBmb3IgKGludCBpID0gb2Zmc2V0OyBpIDwgb2Zmc2V0ICsgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHN0cmluZ3NbaV0ubGVuZ3RoID09IHN0YXJ0KSB7CiAgICAgICAgaXNMZWFmID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoc3RyaW5nc1tpXS5sZW5ndGggPiBzdGFydCkgewogICAgICAgIGludCBjID0gc3RyaW5nc1tpXS5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgICAgICBpZiAoJEEgPD0gYyAmJiBjIDw9ICRaKSB7CiAgICAgICAgICBpc0xvd2VyY2FzZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoY2h1bmsgIT0gYykgewogICAgICAgICAgaWYgKGNodW5rU3RhcnQgIT0gLTEpIHsKICAgICAgICAgICAgYXNzZXJ0KHRhYmxlW2NodW5rIC0gJEFdID09IG51bGwpOwogICAgICAgICAgICB0YWJsZVtjaHVuayAtICRBXSA9IGNvbXB1dGVLZXl3b3JkU3RhdGVUYWJsZSgKICAgICAgICAgICAgICAgIHN0YXJ0ICsgMSwgc3RyaW5ncywgY2h1bmtTdGFydCwgaSAtIGNodW5rU3RhcnQpOwogICAgICAgICAgfQogICAgICAgICAgY2h1bmtTdGFydCA9IGk7CiAgICAgICAgICBjaHVuayA9IGM7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoY2h1bmtTdGFydCAhPSAtMSkgewogICAgICBhc3NlcnQodGFibGVbY2h1bmsgLSAkQV0gPT0gbnVsbCk7CiAgICAgIHRhYmxlW2NodW5rIC0gJEFdID0gY29tcHV0ZUtleXdvcmRTdGF0ZVRhYmxlKAogICAgICAgICAgc3RhcnQgKyAxLCBzdHJpbmdzLCBjaHVua1N0YXJ0LCBvZmZzZXQgKyBsZW5ndGggLSBjaHVua1N0YXJ0KTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChsZW5ndGggPT0gMSk7CiAgICAgIHJldHVybiBuZXcgTGVhZktleXdvcmRTdGF0ZShzdHJpbmdzW29mZnNldF0pOwogICAgfQogICAgU3RyaW5nIHN5bnRheCA9IGlzTGVhZiA/IHN0cmluZ3Nbb2Zmc2V0XSA6IG51bGw7CiAgICBpZiAoaXNMb3dlcmNhc2UpIHsKICAgICAgdGFibGUgPSB0YWJsZS5zdWJsaXN0KCRhIC0gJEEpOwogICAgICByZXR1cm4gbmV3IExvd2VyQ2FzZUFycmF5S2V5d29yZFN0YXRlKHRhYmxlLCBzeW50YXgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBVcHBlckNhc2VBcnJheUtleXdvcmRTdGF0ZSh0YWJsZSwgc3ludGF4KTsKICAgIH0KICB9Cn0KCi8qKgogKiBBIHN0YXRlIHdpdGggbXVsdGlwbGUgb3V0Z29pbmcgdHJhbnNpdGlvbnMuCiAqLwphYnN0cmFjdCBjbGFzcyBBcnJheUtleXdvcmRTdGF0ZSBpbXBsZW1lbnRzIEtleXdvcmRTdGF0ZSB7CiAgZmluYWwgTGlzdDxLZXl3b3JkU3RhdGU+IHRhYmxlOwogIGZpbmFsIGFuYWx5emVyLktleXdvcmQga2V5d29yZDsKCiAgQXJyYXlLZXl3b3JkU3RhdGUodGhpcy50YWJsZSwgU3RyaW5nIHN5bnRheCkKICAgICAgOiBrZXl3b3JkID0gKChzeW50YXggPT0gbnVsbCkgPyBudWxsIDogYW5hbHl6ZXIuS2V5d29yZC5rZXl3b3Jkc1tzeW50YXhdKTsKCiAgS2V5d29yZFN0YXRlIG5leHQoaW50IGMpOwoKICBLZXl3b3JkU3RhdGUgbmV4dENhcGl0YWwoaW50IGMpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgiWyIpOwogICAgaWYgKGtleXdvcmQgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgiKiIpOwogICAgICBzYi53cml0ZShrZXl3b3JkKTsKICAgICAgc2Iud3JpdGUoIiAiKTsKICAgIH0KICAgIExpc3Q8S2V5d29yZFN0YXRlPiBmb28gPSB0YWJsZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9vLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChmb29baV0gIT0gbnVsbCkgewogICAgICAgIHNiLndyaXRlKCIke25ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhbaSArICRhXSl9OiAiCiAgICAgICAgICAgICIke2Zvb1tpXX07ICIpOwogICAgICB9CiAgICB9CiAgICBzYi53cml0ZSgiXSIpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBMb3dlckNhc2VBcnJheUtleXdvcmRTdGF0ZSBleHRlbmRzIEFycmF5S2V5d29yZFN0YXRlIHsKICBMb3dlckNhc2VBcnJheUtleXdvcmRTdGF0ZShMaXN0PEtleXdvcmRTdGF0ZT4gdGFibGUsIFN0cmluZyBzeW50YXgpCiAgICAgIDogc3VwZXIodGFibGUsIHN5bnRheCkgewogICAgYXNzZXJ0KHRhYmxlLmxlbmd0aCA9PSAkeiAtICRhICsgMSk7CiAgfQoKICBLZXl3b3JkU3RhdGUgbmV4dChpbnQgYykgPT4gdGFibGVbYyAtICRhXTsKCiAgS2V5d29yZFN0YXRlIG5leHRDYXBpdGFsKGludCBjKSA9PiBudWxsOwp9CgpjbGFzcyBVcHBlckNhc2VBcnJheUtleXdvcmRTdGF0ZSBleHRlbmRzIEFycmF5S2V5d29yZFN0YXRlIHsKICBVcHBlckNhc2VBcnJheUtleXdvcmRTdGF0ZShMaXN0PEtleXdvcmRTdGF0ZT4gdGFibGUsIFN0cmluZyBzeW50YXgpCiAgICAgIDogc3VwZXIodGFibGUsIHN5bnRheCkgewogICAgYXNzZXJ0KHRhYmxlLmxlbmd0aCA9PSAkeiAtICRBICsgMSk7CiAgfQoKICBLZXl3b3JkU3RhdGUgbmV4dChpbnQgYykgPT4gdGFibGVbYyAtICRBXTsKCiAgS2V5d29yZFN0YXRlIG5leHRDYXBpdGFsKGludCBjKSA9PiB0YWJsZVtjIC0gJEFdOwp9CgovKioKICogQSBzdGF0ZSB0aGF0IGhhcyBubyBvdXRnb2luZyB0cmFuc2l0aW9ucy4KICovCmNsYXNzIExlYWZLZXl3b3JkU3RhdGUgaW1wbGVtZW50cyBLZXl3b3JkU3RhdGUgewogIGZpbmFsIGFuYWx5emVyLktleXdvcmQga2V5d29yZDsKCiAgTGVhZktleXdvcmRTdGF0ZShTdHJpbmcgc3ludGF4KSA6IGtleXdvcmQgPSBhbmFseXplci5LZXl3b3JkLmtleXdvcmRzW3N5bnRheF07CgogIEtleXdvcmRTdGF0ZSBuZXh0KGludCBjKSA9PiBudWxsOwogIEtleXdvcmRTdGF0ZSBuZXh0Q2FwaXRhbChpbnQgYykgPT4gbnVsbDsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4ga2V5d29yZC5sZXhlbWU7Cn0KgJYATk48ASABLwEuAQQ8BB4cIwEgASYqIk9BOAguUAYbBAEwQR0BRBkTGRk1KBcIJy4iHwoaIi86QQwaFQoIBhwpNEkNGzQGNRcmPA08BgQCAQQvBDsiIgEvUQEcASMBFioTGxUZFQYkKxw7HAgGExoEAgE9Rh8pBAEtASsCAT1GHykEAS0BNAIBBC0EMSIBUQEkKwEnAgE2cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIva2V5d29yZF9zdGF0ZS5kYXJ0OnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9jb25zdGFudF9jb250ZXh0LmRhcnSE4S8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmNvbnN0YW50X2NvbnRleHQ7CgplbnVtIENvbnN0YW50Q29udGV4dCB7CiAgLy8vIE5vdCBpbiBhIGNvbnN0YW50IGNvbnRleHQuCiAgLy8vCiAgLy8vIFRoaXMgbWVhbnMgdGhhdCBgT2JqZWN0KClgIGFuZCBgW11gIGFyZSBlcXVpdmFsZW50IHRvIGBuZXcgT2JqZWN0KClgIGFuZAogIC8vLyBgW11gIHJlc3BlY3RpdmVseS4gYG5ldyBPYmplY3QoKWAgaXMgKipub3QqKiBhIGNvbXBpbGUtdGltZSBlcnJvci4KICAvLy8KICAvLy8gVE9ETyhhaGUpOiBVcGRhdGUgdGhlIGFib3ZlIHNwZWNpZmljYXRpb24gYW5kIGNvcnJlc3BvbmRpbmcKICAvLy8gaW1wbGVtZW50YXRpb24gYmVjYXVzZSBgT2JqZWN0KClgIGlzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50LiBTZWUgW21hZ2ljCiAgLy8vIGNvbnN0XSgKICAvLy8gLi4vLi4vLi4vLi4vLi4vLi4vZG9jcy9sYW5ndWFnZS9pbmZvcm1hbC9kb2NzL2xhbmd1YWdlL2luZm9ybWFsL2ltcGxpY2l0LWNyZWF0aW9uLm1kCiAgLy8vICkuCiAgbm9uZSwKCiAgLy8vIEluIGEgY29udGV4dCB3aGVyZSBjb25zdGFudCBleHByZXNzaW9ucyBhcmUgcmVxdWlyZWQsIGFuZCBgY29uc3RgIG1heSBiZQogIC8vLyBpbmZlcnJlZC4KICAvLy8KICAvLy8gVGhpcyBtZWFucyB0aGF0IGBPYmplY3QoKWAgYW5kIGBbXWAgYXJlIGVxdWl2YWxlbnQgdG8gYGNvbnN0IE9iamVjdCgpYCBhbmQKICAvLy8gYGNvbnN0IFtdYCByZXNwZWN0aXZlbHkuIGBuZXcgT2JqZWN0KClgIGlzIGEgY29tcGlsZS10aW1lIGVycm9yLgogIGluZmVycmVkLAoKICAvLy8gSW4gYSBjb250ZXh0IHdoZXJlIGNvbnN0YW50IGV4cHJlc3Npb25zIGFyZSByZXF1aXJlZCwgYnV0IGBjb25zdGAgaXMgbm90CiAgLy8vIGluZmVycmVkLiBUaGlzIGluY2x1ZGVzIGRlZmF1bHQgdmFsdWVzIG9mIG9wdGlvbmFsIHBhcmFtZXRlcnMgYW5kCiAgLy8vIGluaXRpYWxpemluZyBleHByZXNzaW9ucyBvbiBmaWVsZHMgaW4gY2xhc3NlcyB3aXRoIGEgYGNvbnN0YCBjb25zdHJ1Y3Rvci4KICByZXF1aXJlZCwKfQohAE5OPAEgARchBk9JBkJPDlsJCAFPEAZRRwwBT0hQDAIBMXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jb25zdGFudF9jb250ZXh0LmRhcnQyc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL21vZGlmaWVyLmRhcnSNfi8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLm1vZGlmaWVyOwoKaW1wb3J0ICdwcm9ibGVtcy5kYXJ0JyBzaG93IHVuaGFuZGxlZDsKCmVudW0gTW9kaWZpZXJFbnVtIHsKICBBYnN0cmFjdCwKICBDb25zdCwKICBDb3ZhcmlhbnQsCiAgRXh0ZXJuYWwsCiAgRmluYWwsCiAgU3RhdGljLAoKICAvLyBOb3QgYSByZWFsIG1vZGlmaWVyLgogIFZhciwKfQoKY29uc3QgaW50IGFic3RyYWN0TWFzayA9IDE7Cgpjb25zdCBpbnQgY29uc3RNYXNrID0gYWJzdHJhY3RNYXNrIDw8IDE7Cgpjb25zdCBpbnQgY292YXJpYW50TWFzayA9IGNvbnN0TWFzayA8PCAxOwoKY29uc3QgaW50IGV4dGVybmFsTWFzayA9IGNvdmFyaWFudE1hc2sgPDwgMTsKCmNvbnN0IGludCBmaW5hbE1hc2sgPSBleHRlcm5hbE1hc2sgPDwgMTsKCmNvbnN0IGludCBzdGF0aWNNYXNrID0gZmluYWxNYXNrIDw8IDE7Cgpjb25zdCBpbnQgbmFtZWRNaXhpbkFwcGxpY2F0aW9uTWFzayA9IHN0YXRpY01hc2sgPDwgMTsKCi8vLyBOb3QgYSBtb2RpZmllciwgdXNlZCBmb3IgbWl4aW5zIGRlY2xhcmVkIGV4cGxpY2l0bHkgYnkgdXNpbmcgdGhlIGBtaXhpbmAKLy8vIGtleXdvcmQuCmNvbnN0IGludCBtaXhpbkRlY2xhcmF0aW9uTWFzayA9IG5hbWVkTWl4aW5BcHBsaWNhdGlvbk1hc2sgPDwgMTsKCi8vLyBOb3QgYSBtb2RpZmllciwgdXNlZCBmb3IgZXh0ZW5zaW9uIGRlY2xhcmF0aW9ucy4KY29uc3QgaW50IGV4dGVuc2lvbkRlY2xhcmF0aW9uTWFzayA9IG1peGluRGVjbGFyYXRpb25NYXNrIDw8IDE7CgovLy8gTm90IGEgbW9kaWZpZXIsIHVzZWQgYnkgZmllbGRzIHRvIHRyYWNrIGlmIHRoZXkgaGF2ZSBhbiBpbml0aWFsaXplci4KY29uc3QgaW50IGhhc0luaXRpYWxpemVyTWFzayA9IGV4dGVuc2lvbkRlY2xhcmF0aW9uTWFzayA8PCAxOwoKLy8vIE5vdCBhIG1vZGlmaWVyLCB1c2VkIGJ5IGZvcm1hbCBwYXJhbWV0ZXJzIHRvIHRyYWNrIGlmIHRoZXkgYXJlIGluaXRpYWxpemluZy4KY29uc3QgaW50IGluaXRpYWxpemluZ0Zvcm1hbE1hc2sgPSBoYXNJbml0aWFsaXplck1hc2sgPDwgMTsKCi8vLyBOb3QgYSBtb2RpZmllciwgdXNlZCBieSBjbGFzc2VzIHRvIHRyYWNrIGlmIHRoZSBjbGFzcyBoYXMgYSBjb25zdAovLy8gY29uc3RydWN0b3IuCmNvbnN0IGludCBoYXNDb25zdENvbnN0cnVjdG9yTWFzayA9IGluaXRpYWxpemluZ0Zvcm1hbE1hc2sgPDwgMTsKCi8vLyBOb3QgYSByZWFsIG1vZGlmaWVyLCBhbmQgYnkgc2V0dGluZyBpdCB0byB6ZXJvLCBpdCBpcyBhdXRvbWF0aWNhbGx5IGlnbm9yZWQKLy8vIGJ5IFtNb2RpZmllci52YWxpZGF0ZV0gYmVsb3cuCmNvbnN0IGludCB2YXJNYXNrID0gMDsKCmNvbnN0IE1vZGlmaWVyIEFic3RyYWN0ID0gY29uc3QgTW9kaWZpZXIoTW9kaWZpZXJFbnVtLkFic3RyYWN0LCBhYnN0cmFjdE1hc2spOwoKY29uc3QgTW9kaWZpZXIgQ29uc3QgPSBjb25zdCBNb2RpZmllcihNb2RpZmllckVudW0uQ29uc3QsIGNvbnN0TWFzayk7Cgpjb25zdCBNb2RpZmllciBDb3ZhcmlhbnQgPQogICAgY29uc3QgTW9kaWZpZXIoTW9kaWZpZXJFbnVtLkNvdmFyaWFudCwgY292YXJpYW50TWFzayk7Cgpjb25zdCBNb2RpZmllciBFeHRlcm5hbCA9IGNvbnN0IE1vZGlmaWVyKE1vZGlmaWVyRW51bS5FeHRlcm5hbCwgZXh0ZXJuYWxNYXNrKTsKCmNvbnN0IE1vZGlmaWVyIEZpbmFsID0gY29uc3QgTW9kaWZpZXIoTW9kaWZpZXJFbnVtLkZpbmFsLCBmaW5hbE1hc2spOwoKY29uc3QgTW9kaWZpZXIgU3RhdGljID0gY29uc3QgTW9kaWZpZXIoTW9kaWZpZXJFbnVtLlN0YXRpYywgc3RhdGljTWFzayk7CgovLy8gTm90IGEgcmVhbCBtb2RpZmllci4KY29uc3QgTW9kaWZpZXIgVmFyID0gY29uc3QgTW9kaWZpZXIoTW9kaWZpZXJFbnVtLlZhciwgdmFyTWFzayk7CgpjbGFzcyBNb2RpZmllciB7CiAgZmluYWwgTW9kaWZpZXJFbnVtIGtpbmQ7CgogIGZpbmFsIGludCBtYXNrOwoKICBjb25zdCBNb2RpZmllcih0aGlzLmtpbmQsIHRoaXMubWFzayk7CgogIGZhY3RvcnkgTW9kaWZpZXIuZnJvbVN0cmluZyhTdHJpbmcgc3RyaW5nKSB7CiAgICBpZiAoaWRlbnRpY2FsKCdhYnN0cmFjdCcsIHN0cmluZykpIHJldHVybiBBYnN0cmFjdDsKICAgIGlmIChpZGVudGljYWwoJ2NvbnN0Jywgc3RyaW5nKSkgcmV0dXJuIENvbnN0OwogICAgaWYgKGlkZW50aWNhbCgnY292YXJpYW50Jywgc3RyaW5nKSkgcmV0dXJuIENvdmFyaWFudDsKICAgIGlmIChpZGVudGljYWwoJ2V4dGVybmFsJywgc3RyaW5nKSkgcmV0dXJuIEV4dGVybmFsOwogICAgaWYgKGlkZW50aWNhbCgnZmluYWwnLCBzdHJpbmcpKSByZXR1cm4gRmluYWw7CiAgICBpZiAoaWRlbnRpY2FsKCdzdGF0aWMnLCBzdHJpbmcpKSByZXR1cm4gU3RhdGljOwogICAgaWYgKGlkZW50aWNhbCgndmFyJywgc3RyaW5nKSkgcmV0dXJuIFZhcjsKICAgIHJldHVybiB1bmhhbmRsZWQoc3RyaW5nLCAiTW9kaWZpZXIuZnJvbVN0cmluZyIsIC0xLCBudWxsKTsKICB9CgogIHRvU3RyaW5nKCkgPT4gIm1vZGlmaWVyKCR7JyRraW5kJy5zdWJzdHJpbmcoJ01vZGlmaWVyRW51bS4nLmxlbmd0aCl9KSI7CgogIHN0YXRpYyBpbnQgdmFsaWRhdGUoTGlzdDxNb2RpZmllcj4gbW9kaWZpZXJzLCB7Ym9vbCBpc0Fic3RyYWN0OiBmYWxzZX0pIHsKICAgIC8vIFRPRE8oYWhlKTogUmVuYW1lIHRoaXMgbWV0aG9kLCB2YWxpZGF0aW9uIGlzIG5vdyB0YWtlbiBjYXJlIG9mIGJ5IHRoZQogICAgLy8gcGFyc2VyLgogICAgaW50IHJlc3VsdCA9IGlzQWJzdHJhY3QgPyBhYnN0cmFjdE1hc2sgOiAwOwogICAgaWYgKG1vZGlmaWVycyA9PSBudWxsKSByZXR1cm4gcmVzdWx0OwogICAgZm9yIChNb2RpZmllciBtb2RpZmllciBpbiBtb2RpZmllcnMpIHsKICAgICAgcmVzdWx0IHw9IG1vZGlmaWVyLm1hc2s7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGludCB2YWxpZGF0ZVZhckZpbmFsT3JDb25zdChTdHJpbmcgbGV4ZW1lKSB7CiAgICBpZiAobGV4ZW1lID09IG51bGwpIHJldHVybiAwOwogICAgaWYgKGlkZW50aWNhbCgnY29uc3QnLCBsZXhlbWUpKSByZXR1cm4gQ29uc3QubWFzazsKICAgIGlmIChpZGVudGljYWwoJ2ZpbmFsJywgbGV4ZW1lKSkgcmV0dXJuIEZpbmFsLm1hc2s7CiAgICBpZiAoaWRlbnRpY2FsKCd2YXInLCBsZXhlbWUpKSByZXR1cm4gVmFyLm1hc2s7CiAgICByZXR1cm4gdW5oYW5kbGVkKGxleGVtZSwgIk1vZGlmaWVyLnZhbGlkYXRlVmFyRmluYWxPckNvbnN0IiwgLTEsIG51bGwpOwogIH0KfQpwAE5OPAEYAScBFAwJDQwJCgEaBwIBHAEpASoBLQEpAScBNwFNDUEBNUABST4BUTwBRhFBAVAiFwFPAUYBGzsBTwFGAUkBGUABERsBEgEoAS84Mjo4MjQuPwQBSgFMTQ8wKisfBhMEATYiNzczTAQCASlwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvbW9kaWZpZXIuZGFydC9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvbmFtZXMuZGFydIZWLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZnJvbnRfZW5kLnNyYy5mYXN0YS5uYW1lczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgTmFtZTsKCmZpbmFsIE5hbWUgYW1wZXJzYW5kTmFtZSA9IG5ldyBOYW1lKCImIik7CgpmaW5hbCBOYW1lIGJhck5hbWUgPSBuZXcgTmFtZSgifCIpOwoKZmluYWwgTmFtZSBjYWxsTmFtZSA9IG5ldyBOYW1lKCJjYWxsIik7CgpmaW5hbCBOYW1lIGNhcmV0TmFtZSA9IG5ldyBOYW1lKCJeIik7CgpmaW5hbCBOYW1lIGRpdmlzaW9uTmFtZSA9IG5ldyBOYW1lKCIvIik7CgpmaW5hbCBOYW1lIGRvdWJsZUFtcGVyc2FuZE5hbWUgPSBuZXcgTmFtZSgiJiYiKTsKCmZpbmFsIE5hbWUgZG91YmxlQmFyTmFtZSA9IG5ldyBOYW1lKCJ8fCIpOwoKZmluYWwgTmFtZSBkb3VibGVRdWVzdGlvbk5hbWUgPSBuZXcgTmFtZSgiPz8iKTsKCmZpbmFsIE5hbWUgZW1wdHlOYW1lID0gbmV3IE5hbWUoIiIpOwoKZmluYWwgTmFtZSBlcXVhbHNOYW1lID0gbmV3IE5hbWUoJz09Jyk7CgpmaW5hbCBOYW1lIGdyZWF0ZXJUaGFuTmFtZSA9IG5ldyBOYW1lKCI+Iik7CgpmaW5hbCBOYW1lIGdyZWF0ZXJUaGFuT3JFcXVhbHNOYW1lID0gbmV3IE5hbWUoIj49Iik7CgpmaW5hbCBOYW1lIGlkZW50aWNhbE5hbWUgPSBuZXcgTmFtZSgiaWRlbnRpY2FsIik7CgpmaW5hbCBOYW1lIGluZGV4R2V0TmFtZSA9IG5ldyBOYW1lKCJbXSIpOwoKZmluYWwgTmFtZSBpbmRleFNldE5hbWUgPSBuZXcgTmFtZSgiW109Iik7CgpmaW5hbCBOYW1lIGxlZnRTaGlmdE5hbWUgPSBuZXcgTmFtZSgiPDwiKTsKCmZpbmFsIE5hbWUgbGVuZ3RoTmFtZSA9IG5ldyBOYW1lKCJsZW5ndGgiKTsKCmZpbmFsIE5hbWUgbGVzc1RoYW5OYW1lID0gbmV3IE5hbWUoIjwiKTsKCmZpbmFsIE5hbWUgbGVzc1RoYW5PckVxdWFsc05hbWUgPSBuZXcgTmFtZSgiPD0iKTsKCmZpbmFsIE5hbWUgbWludXNOYW1lID0gbmV3IE5hbWUoIi0iKTsKCmZpbmFsIE5hbWUgbXVsdGlwbHlOYW1lID0gbmV3IE5hbWUoIioiKTsKCmZpbmFsIE5hbWUgbXVzdGFjaGVOYW1lID0gbmV3IE5hbWUoIn4vIik7CgpmaW5hbCBOYW1lIG5lZ2F0aW9uTmFtZSA9IG5ldyBOYW1lKCIhIik7CgpmaW5hbCBOYW1lIG5vU3VjaE1ldGhvZE5hbWUgPSBuZXcgTmFtZSgibm9TdWNoTWV0aG9kIik7CgpmaW5hbCBOYW1lIHBlcmNlbnROYW1lID0gbmV3IE5hbWUoIiUiKTsKCmZpbmFsIE5hbWUgcGx1c05hbWUgPSBuZXcgTmFtZSgiKyIpOwoKZmluYWwgTmFtZSByaWdodFNoaWZ0TmFtZSA9IG5ldyBOYW1lKCI+PiIpOwoKZmluYWwgTmFtZSB0cmlwbGVTaGlmdE5hbWUgPSBuZXcgTmFtZSgiPj4+Iik7CgpmaW5hbCBOYW1lIHRpbGRlTmFtZSA9IG5ldyBOYW1lKCJ+Iik7CgpmaW5hbCBOYW1lIHVuYXJ5TWludXNOYW1lID0gbmV3IE5hbWUoInVuYXJ5LSIpOwpFAE5OPAEjASwBKgEkASgBJgEpATEBKwEwASUBKAEsATUBMgEqASsBKwEsASkBMgEmASkBKgEpATgBKAElASwBLgEmATABJnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9uYW1lcy5kYXJ0MHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIuZGFydIceLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS5tZCBmaWxlLgoKbGlicmFyeSBmYXN0YS5wYXJzZXI7CgppbXBvcnQgJy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAncGFyc2VyL2xpc3RlbmVyLmRhcnQnIHNob3cgTGlzdGVuZXI7CgppbXBvcnQgJ3BhcnNlci9wYXJzZXIuZGFydCcgc2hvdyBQYXJzZXI7CgppbXBvcnQgJ3BhcnNlci9wYXJzZXJfZXJyb3IuZGFydCcgc2hvdyBQYXJzZXJFcnJvcjsKCmltcG9ydCAnZmFzdGFfY29kZXMuZGFydCcgc2hvdyBNZXNzYWdlLCBtZXNzYWdlTmF0aXZlQ2xhdXNlU2hvdWxkQmVBbm5vdGF0aW9uOwoKZXhwb3J0ICdwYXJzZXIvYXNzZXJ0LmRhcnQnIHNob3cgQXNzZXJ0OwoKZXhwb3J0ICdwYXJzZXIvY2xhc3NfbWVtYmVyX3BhcnNlci5kYXJ0JyBzaG93IENsYXNzTWVtYmVyUGFyc2VyOwoKZXhwb3J0ICdwYXJzZXIvZm9ybWFsX3BhcmFtZXRlcl9raW5kLmRhcnQnIHNob3cgRm9ybWFsUGFyYW1ldGVyS2luZDsKCmV4cG9ydCAncGFyc2VyL2lkZW50aWZpZXJfY29udGV4dC5kYXJ0JyBzaG93IElkZW50aWZpZXJDb250ZXh0OwoKZXhwb3J0ICdwYXJzZXIvbGlzdGVuZXIuZGFydCcgc2hvdyBMaXN0ZW5lcjsKCmV4cG9ydCAncGFyc2VyL2NsYXNzX2tpbmQuZGFydCcgc2hvdyBDbGFzc0tpbmQ7CgpleHBvcnQgJ3BhcnNlci9tZW1iZXJfa2luZC5kYXJ0JyBzaG93IE1lbWJlcktpbmQ7CgpleHBvcnQgJ3BhcnNlci9wYXJzZXIuZGFydCcgc2hvdyBQYXJzZXI7CgpleHBvcnQgJ3BhcnNlci9wYXJzZXJfZXJyb3IuZGFydCcgc2hvdyBQYXJzZXJFcnJvcjsKCmV4cG9ydCAncGFyc2VyL3RvcF9sZXZlbF9wYXJzZXIuZGFydCcgc2hvdyBUb3BMZXZlbFBhcnNlcjsKCmV4cG9ydCAncGFyc2VyL3V0aWwuZGFydCcKICAgIHNob3cgbGVuZ3RoRm9yVG9rZW4sIGxlbmd0aE9mU3Bhbiwgb2Zmc2V0Rm9yVG9rZW4sIG9wdGlvbmFsOwoKY2xhc3MgRXJyb3JDb2xsZWN0aW5nTGlzdGVuZXIgZXh0ZW5kcyBMaXN0ZW5lciB7CiAgZmluYWwgTGlzdDxQYXJzZXJFcnJvcj4gcmVjb3ZlcmFibGVFcnJvcnMgPSA8UGFyc2VyRXJyb3I+W107CgogIHZvaWQgaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBUb2tlbiBzdGFydFRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgLy8vIFRPRE8oZGFucnViZWwpOiBJZ25vcmUgdGhpcyBlcnJvciB1bnRpbCB3ZSBkZXByZWNhdGUgYG5hdGl2ZWAgc3VwcG9ydC4KICAgIGlmIChtZXNzYWdlID09IG1lc3NhZ2VOYXRpdmVDbGF1c2VTaG91bGRCZUFubm90YXRpb24pIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgcmVjb3ZlcmFibGVFcnJvcnMKICAgICAgICAuYWRkKG5ldyBQYXJzZXJFcnJvci5mcm9tVG9rZW5zKHN0YXJ0VG9rZW4sIGVuZFRva2VuLCBtZXNzYWdlKSk7CiAgfQp9CgpMaXN0PFBhcnNlckVycm9yPiBwYXJzZShUb2tlbiB0b2tlbnMpIHsKICBFcnJvckNvbGxlY3RpbmdMaXN0ZW5lciBsaXN0ZW5lciA9IG5ldyBFcnJvckNvbGxlY3RpbmdMaXN0ZW5lcigpOwogIFBhcnNlciBwYXJzZXIgPSBuZXcgUGFyc2VyKGxpc3RlbmVyKTsKICBwYXJzZXIucGFyc2VVbml0KHRva2Vucyk7CiAgcmV0dXJuIGxpc3RlbmVyLnJlY292ZXJhYmxlRXJyb3JzOwp9Cj0ATU4/ARYBKwEtASkBNAFPASkBQQFFAUABLQEwATIBKQE0ATsBGkEBMT8BHztPPA4GFkkEAgEoRCgcJQIBJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIuZGFydC9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcXVvdGUuZGFydKVrLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucXVvdGU7CgppbXBvcnQgJ3Byb2JsZW1zLmRhcnQnIHNob3cgdW5oYW5kbGVkOwoKaW1wb3J0ICdmYXN0YV9jb2Rlcy5kYXJ0JyBhcyBmYXN0YTsKCmltcG9ydCAnc2Nhbm5lci9jaGFyYWN0ZXJzLmRhcnQnCiAgICBzaG93CiAgICAgICAgJEJBQ0tTTEFTSCwKICAgICAgICAkQlMsCiAgICAgICAgJENMT1NFX0NVUkxZX0JSQUNLRVQsCiAgICAgICAgJENSLAogICAgICAgICRGRiwKICAgICAgICAkTEYsCiAgICAgICAgJE9QRU5fQ1VSTFlfQlJBQ0tFVCwKICAgICAgICAkU1BBQ0UsCiAgICAgICAgJFRBQiwKICAgICAgICAkVlRBQiwKICAgICAgICAkYiwKICAgICAgICAkZiwKICAgICAgICAkbiwKICAgICAgICAkciwKICAgICAgICAkdCwKICAgICAgICAkdSwKICAgICAgICAkdiwKICAgICAgICAkeCwKICAgICAgICBoZXhEaWdpdFZhbHVlLAogICAgICAgIGlzSGV4RGlnaXQ7CgplbnVtIFF1b3RlIHsKICBTaW5nbGUsCiAgRG91YmxlLAogIE11bHRpTGluZVNpbmdsZSwKICBNdWx0aUxpbmVEb3VibGUsCiAgUmF3U2luZ2xlLAogIFJhd0RvdWJsZSwKICBSYXdNdWx0aUxpbmVTaW5nbGUsCiAgUmF3TXVsdGlMaW5lRG91YmxlLAp9CgpRdW90ZSBhbmFseXplUXVvdGUoU3RyaW5nIGZpcnN0KSB7CiAgaWYgKGZpcnN0LnN0YXJ0c1dpdGgoJyIiIicpKSByZXR1cm4gUXVvdGUuTXVsdGlMaW5lRG91YmxlOwogIGlmIChmaXJzdC5zdGFydHNXaXRoKCdyIiIiJykpIHJldHVybiBRdW90ZS5SYXdNdWx0aUxpbmVEb3VibGU7CiAgaWYgKGZpcnN0LnN0YXJ0c1dpdGgoIicnJyIpKSByZXR1cm4gUXVvdGUuTXVsdGlMaW5lU2luZ2xlOwogIGlmIChmaXJzdC5zdGFydHNXaXRoKCJyJycnIikpIHJldHVybiBRdW90ZS5SYXdNdWx0aUxpbmVTaW5nbGU7CiAgaWYgKGZpcnN0LnN0YXJ0c1dpdGgoJyInKSkgcmV0dXJuIFF1b3RlLkRvdWJsZTsKICBpZiAoZmlyc3Quc3RhcnRzV2l0aCgnciInKSkgcmV0dXJuIFF1b3RlLlJhd0RvdWJsZTsKICBpZiAoZmlyc3Quc3RhcnRzV2l0aCgiJyIpKSByZXR1cm4gUXVvdGUuU2luZ2xlOwogIGlmIChmaXJzdC5zdGFydHNXaXRoKCJyJyIpKSByZXR1cm4gUXVvdGUuUmF3U2luZ2xlOwogIHJldHVybiB1bmhhbmRsZWQoZmlyc3QsICJhbmFseXplUXVvdGUiLCAtMSwgbnVsbCk7Cn0KCi8vIE5vdGU6IGJhc2VkIG9uIFtTdHJpbmdWYWxpZGF0b3IucXVvdGluZ0Zyb21TdHJpbmddCi8vIChwa2cvY29tcGlsZXIvbGliL3NyYy9zdHJpbmdfdmFsaWRhdG9yLmRhcnQpLgppbnQgbGVuZ3RoT2ZPcHRpb25hbFdoaXRlc3BhY2VQcmVmaXgoU3RyaW5nIGZpcnN0LCBpbnQgc3RhcnQpIHsKICBMaXN0PGludD4gY29kZVVuaXRzID0gZmlyc3QuY29kZVVuaXRzOwogIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGNvZGVVbml0cy5sZW5ndGg7IGkrKykgewogICAgaW50IGNvZGUgPSBjb2RlVW5pdHNbaV07CiAgICBpZiAoY29kZSA9PSAkQkFDS1NMQVNIKSB7CiAgICAgIGkrKzsKICAgICAgaWYgKGkgPCBjb2RlVW5pdHMubGVuZ3RoKSB7CiAgICAgICAgY29kZSA9IGNvZGVVbml0c1tpXTsKICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKGNvZGUgPT0gJFRBQiB8fCBjb2RlID09ICRTUEFDRSkgY29udGludWU7CiAgICBpZiAoY29kZSA9PSAkQ1IpIHsKICAgICAgaWYgKGkgKyAxIDwgY29kZVVuaXRzLmxlbmd0aCAmJiBjb2RlVW5pdHNbaSArIDFdID09ICRMRikgewogICAgICAgIGkrKzsKICAgICAgfQogICAgICByZXR1cm4gaSArIDE7CiAgICB9CiAgICBpZiAoY29kZSA9PSAkTEYpIHsKICAgICAgcmV0dXJuIGkgKyAxOwogICAgfQogICAgYnJlYWs7IC8vIE5vdCBhIHdoaXRlLXNwYWNlIGNoYXJhY3Rlci4KICB9CiAgcmV0dXJuIHN0YXJ0Owp9CgppbnQgZmlyc3RRdW90ZUxlbmd0aChTdHJpbmcgZmlyc3QsIFF1b3RlIHF1b3RlKSB7CiAgc3dpdGNoIChxdW90ZSkgewogICAgY2FzZSBRdW90ZS5TaW5nbGU6CiAgICBjYXNlIFF1b3RlLkRvdWJsZToKICAgICAgcmV0dXJuIDE7CgogICAgY2FzZSBRdW90ZS5NdWx0aUxpbmVTaW5nbGU6CiAgICBjYXNlIFF1b3RlLk11bHRpTGluZURvdWJsZToKICAgICAgcmV0dXJuIGxlbmd0aE9mT3B0aW9uYWxXaGl0ZXNwYWNlUHJlZml4KGZpcnN0LCAzKTsKCiAgICBjYXNlIFF1b3RlLlJhd1NpbmdsZToKICAgIGNhc2UgUXVvdGUuUmF3RG91YmxlOgogICAgICByZXR1cm4gMjsKCiAgICBjYXNlIFF1b3RlLlJhd011bHRpTGluZVNpbmdsZToKICAgIGNhc2UgUXVvdGUuUmF3TXVsdGlMaW5lRG91YmxlOgogICAgICByZXR1cm4gbGVuZ3RoT2ZPcHRpb25hbFdoaXRlc3BhY2VQcmVmaXgoZmlyc3QsIDQpOwogIH0KICByZXR1cm4gdW5oYW5kbGVkKCIkcXVvdGUiLCAiZmlyc3RRdW90ZUxlbmd0aCIsIC0xLCBudWxsKTsKfQoKaW50IGxhc3RRdW90ZUxlbmd0aChRdW90ZSBxdW90ZSkgewogIHN3aXRjaCAocXVvdGUpIHsKICAgIGNhc2UgUXVvdGUuU2luZ2xlOgogICAgY2FzZSBRdW90ZS5Eb3VibGU6CiAgICBjYXNlIFF1b3RlLlJhd1NpbmdsZToKICAgIGNhc2UgUXVvdGUuUmF3RG91YmxlOgogICAgICByZXR1cm4gMTsKCiAgICBjYXNlIFF1b3RlLk11bHRpTGluZVNpbmdsZToKICAgIGNhc2UgUXVvdGUuTXVsdGlMaW5lRG91YmxlOgogICAgY2FzZSBRdW90ZS5SYXdNdWx0aUxpbmVTaW5nbGU6CiAgICBjYXNlIFF1b3RlLlJhd011bHRpTGluZURvdWJsZToKICAgICAgcmV0dXJuIDM7CiAgfQogIHJldHVybiB1bmhhbmRsZWQoIiRxdW90ZSIsICJsYXN0UXVvdGVMZW5ndGgiLCAtMSwgbnVsbCk7Cn0KClN0cmluZyB1bmVzY2FwZUZpcnN0U3RyaW5nUGFydChTdHJpbmcgZmlyc3QsIFF1b3RlIHF1b3RlLCBPYmplY3QgbG9jYXRpb24sCiAgICBVbmVzY2FwZUVycm9yTGlzdGVuZXIgbGlzdGVuZXIpIHsKICByZXR1cm4gdW5lc2NhcGUoZmlyc3Quc3Vic3RyaW5nKGZpcnN0UXVvdGVMZW5ndGgoZmlyc3QsIHF1b3RlKSksIHF1b3RlLAogICAgICBsb2NhdGlvbiwgbGlzdGVuZXIpOwp9CgpTdHJpbmcgdW5lc2NhcGVMYXN0U3RyaW5nUGFydChTdHJpbmcgbGFzdCwgUXVvdGUgcXVvdGUsIE9iamVjdCBsb2NhdGlvbiwKICAgIGJvb2wgaXNMYXN0UXVvdGVTeW50aGV0aWMsIFVuZXNjYXBlRXJyb3JMaXN0ZW5lciBsaXN0ZW5lcikgewogIGludCBlbmQgPSBsYXN0Lmxlbmd0aCAtIChpc0xhc3RRdW90ZVN5bnRoZXRpYyA/IDAgOiBsYXN0UXVvdGVMZW5ndGgocXVvdGUpKTsKICByZXR1cm4gdW5lc2NhcGUobGFzdC5zdWJzdHJpbmcoMCwgZW5kKSwgcXVvdGUsIGxvY2F0aW9uLCBsaXN0ZW5lcik7Cn0KClN0cmluZyB1bmVzY2FwZVN0cmluZygKICAgIFN0cmluZyBzdHJpbmcsIE9iamVjdCBsb2NhdGlvbiwgVW5lc2NhcGVFcnJvckxpc3RlbmVyIGxpc3RlbmVyKSB7CiAgUXVvdGUgcXVvdGUgPSBhbmFseXplUXVvdGUoc3RyaW5nKTsKICByZXR1cm4gdW5lc2NhcGUoCiAgICAgIHN0cmluZy5zdWJzdHJpbmcoZmlyc3RRdW90ZUxlbmd0aChzdHJpbmcsIHF1b3RlKSwKICAgICAgICAgIHN0cmluZy5sZW5ndGggLSBsYXN0UXVvdGVMZW5ndGgocXVvdGUpKSwKICAgICAgcXVvdGUsCiAgICAgIGxvY2F0aW9uLAogICAgICBsaXN0ZW5lcik7Cn0KClN0cmluZyB1bmVzY2FwZShTdHJpbmcgc3RyaW5nLCBRdW90ZSBxdW90ZSwgT2JqZWN0IGxvY2F0aW9uLAogICAgVW5lc2NhcGVFcnJvckxpc3RlbmVyIGxpc3RlbmVyKSB7CiAgc3dpdGNoIChxdW90ZSkgewogICAgY2FzZSBRdW90ZS5TaW5nbGU6CiAgICBjYXNlIFF1b3RlLkRvdWJsZToKICAgICAgcmV0dXJuICFzdHJpbmcuY29udGFpbnMoIlxcIikKICAgICAgICAgID8gc3RyaW5nCiAgICAgICAgICA6IHVuZXNjYXBlQ29kZVVuaXRzKHN0cmluZy5jb2RlVW5pdHMsIGZhbHNlLCBsb2NhdGlvbiwgbGlzdGVuZXIpOwoKICAgIGNhc2UgUXVvdGUuTXVsdGlMaW5lU2luZ2xlOgogICAgY2FzZSBRdW90ZS5NdWx0aUxpbmVEb3VibGU6CiAgICAgIHJldHVybiAhc3RyaW5nLmNvbnRhaW5zKCJcXCIpICYmICFzdHJpbmcuY29udGFpbnMoIlxyIikKICAgICAgICAgID8gc3RyaW5nCiAgICAgICAgICA6IHVuZXNjYXBlQ29kZVVuaXRzKHN0cmluZy5jb2RlVW5pdHMsIGZhbHNlLCBsb2NhdGlvbiwgbGlzdGVuZXIpOwoKICAgIGNhc2UgUXVvdGUuUmF3U2luZ2xlOgogICAgY2FzZSBRdW90ZS5SYXdEb3VibGU6CiAgICAgIHJldHVybiBzdHJpbmc7CgogICAgY2FzZSBRdW90ZS5SYXdNdWx0aUxpbmVTaW5nbGU6CiAgICBjYXNlIFF1b3RlLlJhd011bHRpTGluZURvdWJsZToKICAgICAgcmV0dXJuICFzdHJpbmcuY29udGFpbnMoIlxyIikKICAgICAgICAgID8gc3RyaW5nCiAgICAgICAgICA6IHVuZXNjYXBlQ29kZVVuaXRzKHN0cmluZy5jb2RlVW5pdHMsIHRydWUsIGxvY2F0aW9uLCBsaXN0ZW5lcik7CiAgfQogIHJldHVybiB1bmhhbmRsZWQoIiRxdW90ZSIsICJ1bmVzY2FwZSIsIC0xLCBudWxsKTsKfQoKLy8gTm90ZTogYmFzZWQgb24KLy8gW1N0cmluZ1ZhbGlkYXRvci52YWxpZGF0ZVN0cmluZ10ocGtnL2NvbXBpbGVyL2xpYi9zcmMvc3RyaW5nX3ZhbGlkYXRvci5kYXJ0KS4KU3RyaW5nIHVuZXNjYXBlQ29kZVVuaXRzKExpc3Q8aW50PiBjb2RlVW5pdHMsIGJvb2wgaXNSYXcsIE9iamVjdCBsb2NhdGlvbiwKICAgIFVuZXNjYXBlRXJyb3JMaXN0ZW5lciBsaXN0ZW5lcikgewogIC8vIENhbid0IHVzZSBVaW50OExpc3Qgb3IgVWludDE2TGlzdCBoZXJlLCB0aGUgY29kZSB1bml0cyBtYXkgYmUgbGFyZ2VyLgogIExpc3Q8aW50PiByZXN1bHQgPSBuZXcgTGlzdDxpbnQ+KGNvZGVVbml0cy5sZW5ndGgpOwogIGludCByZXN1bHRPZmZzZXQgPSAwOwoKICBmb3IgKGludCBpID0gMDsgaSA8IGNvZGVVbml0cy5sZW5ndGg7IGkrKykgewogICAgaW50IGNvZGUgPSBjb2RlVW5pdHNbaV07CiAgICBpZiAoY29kZSA9PSAkQ1IpIHsKICAgICAgaWYgKGkgKyAxIDwgY29kZVVuaXRzLmxlbmd0aCAmJiBjb2RlVW5pdHNbaSArIDFdID09ICRMRikgewogICAgICAgIGkrKzsKICAgICAgfQogICAgICBjb2RlID0gJExGOwogICAgfSBlbHNlIGlmICghaXNSYXcgJiYgY29kZSA9PSAkQkFDS1NMQVNIKSB7CiAgICAgIGlmIChjb2RlVW5pdHMubGVuZ3RoID09ICsraSkgewogICAgICAgIGxpc3RlbmVyLmhhbmRsZVVuZXNjYXBlRXJyb3IoCiAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VJbnZhbGlkVW5pY29kZUVzY2FwZSwgbG9jYXRpb24sIGksIDEpOwogICAgICAgIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZVVuaXRzKTsKICAgICAgfQogICAgICBjb2RlID0gY29kZVVuaXRzW2ldOwoKICAgICAgLy8vIGBcbmAgZm9yIG5ld2xpbmUsIGVxdWl2YWxlbnQgdG8gYFx4MEFgLgogICAgICAvLy8gYFxyYCBmb3IgY2FycmlhZ2UgcmV0dXJuLCBlcXVpdmFsZW50IHRvIGBceDBEYC4KICAgICAgLy8vIGBcZmAgZm9yIGZvcm0gZmVlZCwgZXF1aXZhbGVudCB0byBgXHgwQ2AuCiAgICAgIC8vLyBgXGJgIGZvciBiYWNrc3BhY2UsIGVxdWl2YWxlbnQgdG8gYFx4MDhgLgogICAgICAvLy8gYFx0YCBmb3IgdGFiLCBlcXVpdmFsZW50IHRvIGBceDA5YC4KICAgICAgLy8vIGBcdmAgZm9yIHZlcnRpY2FsIHRhYiwgZXF1aXZhbGVudCB0byBgXHgwQmAuCiAgICAgIC8vLyBgXHhYWGAgZm9yIGhleCBlc2NhcGUuCiAgICAgIC8vLyBgXHVYWFhYYCBvciBgXHV7WFg/WD9YP1g/WD99YCBmb3IgVW5pY29kZSBoZXggZXNjYXBlLgogICAgICBpZiAoY29kZSA9PSAkbikgewogICAgICAgIGNvZGUgPSAkTEY7CiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAkcikgewogICAgICAgIGNvZGUgPSAkQ1I7CiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAkZikgewogICAgICAgIGNvZGUgPSAkRkY7CiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAkYikgewogICAgICAgIGNvZGUgPSAkQlM7CiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAkdCkgewogICAgICAgIGNvZGUgPSAkVEFCOwogICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gJHYpIHsKICAgICAgICBjb2RlID0gJFZUQUI7CiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAkeCkgewogICAgICAgIC8vIEV4cGVjdCBleGFjdGx5IDIgaGV4IGRpZ2l0cy4KICAgICAgICBpbnQgYmVnaW4gPSBpOwogICAgICAgIGlmIChjb2RlVW5pdHMubGVuZ3RoIDw9IGkgKyAyKSB7CiAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVVbmVzY2FwZUVycm9yKGZhc3RhLm1lc3NhZ2VJbnZhbGlkSGV4RXNjYXBlLCBsb2NhdGlvbiwKICAgICAgICAgICAgICBiZWdpbiwgY29kZVVuaXRzLmxlbmd0aCArIDEgLSBiZWdpbik7CiAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGNvZGVVbml0cyk7CiAgICAgICAgfQogICAgICAgIGNvZGUgPSAwOwogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMjsgaisrKSB7CiAgICAgICAgICBpbnQgZGlnaXQgPSBjb2RlVW5pdHNbKytpXTsKICAgICAgICAgIGlmICghaXNIZXhEaWdpdChkaWdpdCkpIHsKICAgICAgICAgICAgbGlzdGVuZXIuaGFuZGxlVW5lc2NhcGVFcnJvcigKICAgICAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VJbnZhbGlkSGV4RXNjYXBlLCBsb2NhdGlvbiwgYmVnaW4sIGkgKyAxIC0gYmVnaW4pOwogICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGNvZGVVbml0cyk7CiAgICAgICAgICB9CiAgICAgICAgICBjb2RlID0gKGNvZGUgPDwgNCkgKyBoZXhEaWdpdFZhbHVlKGRpZ2l0KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY29kZSA9PSAkdSkgewogICAgICAgIGludCBiZWdpbiA9IGk7CiAgICAgICAgaWYgKGNvZGVVbml0cy5sZW5ndGggPT0gaSArIDEpIHsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZVVuZXNjYXBlRXJyb3IoZmFzdGEubWVzc2FnZUludmFsaWRVbmljb2RlRXNjYXBlLAogICAgICAgICAgICAgIGxvY2F0aW9uLCBiZWdpbiwgY29kZVVuaXRzLmxlbmd0aCArIDEgLSBiZWdpbik7CiAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGNvZGVVbml0cyk7CiAgICAgICAgfQogICAgICAgIGNvZGUgPSBjb2RlVW5pdHNbaSArIDFdOwogICAgICAgIGlmIChjb2RlID09ICRPUEVOX0NVUkxZX0JSQUNLRVQpIHsKICAgICAgICAgIC8vIEV4cGVjdCAxLTYgaGV4IGRpZ2l0cyBmb2xsb3dlZCBieSAnfScuCiAgICAgICAgICBpZiAoY29kZVVuaXRzLmxlbmd0aCA9PSArK2kpIHsKICAgICAgICAgICAgbGlzdGVuZXIuaGFuZGxlVW5lc2NhcGVFcnJvcihmYXN0YS5tZXNzYWdlSW52YWxpZFVuaWNvZGVFc2NhcGUsCiAgICAgICAgICAgICAgICBsb2NhdGlvbiwgYmVnaW4sIGkgKyAxIC0gYmVnaW4pOwogICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGNvZGVVbml0cyk7CiAgICAgICAgICB9CiAgICAgICAgICBjb2RlID0gMDsKICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgNzsgaisrKSB7CiAgICAgICAgICAgIGlmIChjb2RlVW5pdHMubGVuZ3RoID09ICsraSkgewogICAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZVVuZXNjYXBlRXJyb3IoZmFzdGEubWVzc2FnZUludmFsaWRVbmljb2RlRXNjYXBlLAogICAgICAgICAgICAgICAgICBsb2NhdGlvbiwgYmVnaW4sIGkgKyAxIC0gYmVnaW4pOwogICAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZVVuaXRzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbnQgZGlnaXQgPSBjb2RlVW5pdHNbaV07CiAgICAgICAgICAgIGlmIChqICE9IDAgJiYgZGlnaXQgPT0gJENMT1NFX0NVUkxZX0JSQUNLRVQpIGJyZWFrOwogICAgICAgICAgICBpZiAoIWlzSGV4RGlnaXQoZGlnaXQpKSB7CiAgICAgICAgICAgICAgbGlzdGVuZXIuaGFuZGxlVW5lc2NhcGVFcnJvcihmYXN0YS5tZXNzYWdlSW52YWxpZFVuaWNvZGVFc2NhcGUsCiAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLCBiZWdpbiwgaSArIDIgLSBiZWdpbik7CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2Rlcyhjb2RlVW5pdHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvZGUgPSAoY29kZSA8PCA0KSArIGhleERpZ2l0VmFsdWUoZGlnaXQpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBFeHBlY3QgZXhhY3RseSA0IGhleCBkaWdpdHMuCiAgICAgICAgICBpZiAoY29kZVVuaXRzLmxlbmd0aCA8PSBpICsgNCkgewogICAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVVbmVzY2FwZUVycm9yKGZhc3RhLm1lc3NhZ2VJbnZhbGlkVW5pY29kZUVzY2FwZSwKICAgICAgICAgICAgICAgIGxvY2F0aW9uLCBiZWdpbiwgY29kZVVuaXRzLmxlbmd0aCArIDEgLSBiZWdpbik7CiAgICAgICAgICAgIHJldHVybiBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZVVuaXRzKTsKICAgICAgICAgIH0KICAgICAgICAgIGNvZGUgPSAwOwogICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA0OyBqKyspIHsKICAgICAgICAgICAgaW50IGRpZ2l0ID0gY29kZVVuaXRzWysraV07CiAgICAgICAgICAgIGlmICghaXNIZXhEaWdpdChkaWdpdCkpIHsKICAgICAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVVbmVzY2FwZUVycm9yKGZhc3RhLm1lc3NhZ2VJbnZhbGlkVW5pY29kZUVzY2FwZSwKICAgICAgICAgICAgICAgICAgbG9jYXRpb24sIGJlZ2luLCBpICsgMSAtIGJlZ2luKTsKICAgICAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGNvZGVVbml0cyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29kZSA9IChjb2RlIDw8IDQpICsgaGV4RGlnaXRWYWx1ZShkaWdpdCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChjb2RlID4gMHgxMEZGRkYpIHsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZVVuZXNjYXBlRXJyb3IoCiAgICAgICAgICAgICAgZmFzdGEubWVzc2FnZUludmFsaWRDb2RlUG9pbnQsIGxvY2F0aW9uLCBiZWdpbiwgaSArIDEgLSBiZWdpbik7CiAgICAgICAgICByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGNvZGVVbml0cyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIE5vdGhpbmcsIGVzY2FwZWQgY2hhcmFjdGVyIGlzIHBhc3NlZCB0aHJvdWdoOwogICAgICB9CiAgICB9CiAgICByZXN1bHRbcmVzdWx0T2Zmc2V0KytdID0gY29kZTsKICB9CiAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhyZXN1bHQsIDAsIHJlc3VsdE9mZnNldCk7Cn0KCmFic3RyYWN0IGNsYXNzIFVuZXNjYXBlRXJyb3JMaXN0ZW5lciB7CiAgdm9pZCBoYW5kbGVVbmVzY2FwZUVycm9yKAogICAgICBmYXN0YS5NZXNzYWdlIG1lc3NhZ2UsIGNvdmFyaWFudCBsb2NhdGlvbiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCk7Cn0KgTAATk48ARUBJwEkASEJFA0eDQ0NHRAODwwMDAwMDAwMFxQBDQoKExMNDRYWAgEjPUE9QTI2MjY1AgE2MUApMx0eCyIdDw8IBjIXQQ0IFAYXFAYrBBACATITFxcQASAgOQEaGhABIyM5BDwCASMTFxcaGhABICAjIxAEOwIBSyZKGwIBSUFPRgIBF0YmEzgzDRARAgE9JhMXFyQTTAEgID4TTAEaGhUBIyMkE0sENAIBElFLJks2GAEvHRdBDQgSLyUmQDQIGwEyOjQ0LjchQBgUHxQfFB8UHxUfFh8oFylQNDYKEiYmJCpQOAw1Ch8XKUo+NgohKzQpTDE4DBQoK04zOg4mQCZOMzoONwwRKitMQDgMFCgoJk4zOg43DAofKE42Cg85CAYjBDwCASccSgIBJnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9xdW90ZS5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zb3VyY2Uvc2NvcGVfbGlzdGVuZXIuZGFydJLhLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuc2NvcGVfbGlzdGVuZXI7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnLi4vc2NvcGUuZGFydCcgc2hvdyBTY29wZTsKCmltcG9ydCAnc3RhY2tfbGlzdGVuZXIuZGFydCcgc2hvdyBOdWxsVmFsdWUsIFN0YWNrTGlzdGVuZXI7CgpleHBvcnQgJ3N0YWNrX2xpc3RlbmVyLmRhcnQnCiAgICBzaG93IEZpeGVkTnVsbGFibGVMaXN0LCBHcm93YWJsZUxpc3QsIE51bGxWYWx1ZSwgUGFyc2VyUmVjb3Zlcnk7CgplbnVtIEp1bXBUYXJnZXRLaW5kIHsKICBCcmVhaywKICBDb250aW51ZSwKICBHb3RvLCAvLyBDb250aW51ZSBsYWJlbCBpbiBzd2l0Y2guCn0KCmFic3RyYWN0IGNsYXNzIFNjb3BlTGlzdGVuZXI8Sj4gZXh0ZW5kcyBTdGFja0xpc3RlbmVyIHsKICBTY29wZSBzY29wZTsKCiAgSiBicmVha1RhcmdldDsKCiAgSiBjb250aW51ZVRhcmdldDsKCiAgU2NvcGVMaXN0ZW5lcihTY29wZSBzY29wZSkgOiBzY29wZSA9IHNjb3BlID8/IG5ldyBTY29wZS5pbW11dGFibGUoKTsKCiAgSiBjcmVhdGVKdW1wVGFyZ2V0KEp1bXBUYXJnZXRLaW5kIGtpbmQsIGludCBjaGFyT2Zmc2V0KTsKCiAgSiBjcmVhdGVCcmVha1RhcmdldChpbnQgY2hhck9mZnNldCkgewogICAgcmV0dXJuIGNyZWF0ZUp1bXBUYXJnZXQoSnVtcFRhcmdldEtpbmQuQnJlYWssIGNoYXJPZmZzZXQpOwogIH0KCiAgSiBjcmVhdGVDb250aW51ZVRhcmdldChpbnQgY2hhck9mZnNldCkgewogICAgcmV0dXJuIGNyZWF0ZUp1bXBUYXJnZXQoSnVtcFRhcmdldEtpbmQuQ29udGludWUsIGNoYXJPZmZzZXQpOwogIH0KCiAgSiBjcmVhdGVHb3RvVGFyZ2V0KGludCBjaGFyT2Zmc2V0KSB7CiAgICByZXR1cm4gY3JlYXRlSnVtcFRhcmdldChKdW1wVGFyZ2V0S2luZC5Hb3RvLCBjaGFyT2Zmc2V0KTsKICB9CgogIHZvaWQgZW50ZXJMb2NhbFNjb3BlKFN0cmluZyBkZWJ1Z05hbWUsIFtTY29wZSBuZXdTY29wZV0pIHsKICAgIHB1c2goc2NvcGUpOwogICAgc2NvcGUgPSBuZXdTY29wZSA/PyBzY29wZS5jcmVhdGVOZXN0ZWRTY29wZShkZWJ1Z05hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBleGl0TG9jYWxTY29wZSgpIHsKICAgIHNjb3BlID0gcG9wKCk7CiAgICBhc3NlcnQoc2NvcGUgIT0gbnVsbCk7CiAgfQoKICB2b2lkIGVudGVyQnJlYWtUYXJnZXQoaW50IGNoYXJPZmZzZXQsIFtKIHRhcmdldF0pIHsKICAgIHB1c2goYnJlYWtUYXJnZXQgPz8gTnVsbFZhbHVlLkJyZWFrVGFyZ2V0KTsKICAgIGJyZWFrVGFyZ2V0ID0gdGFyZ2V0ID8/IGNyZWF0ZUJyZWFrVGFyZ2V0KGNoYXJPZmZzZXQpOwogIH0KCiAgdm9pZCBlbnRlckNvbnRpbnVlVGFyZ2V0KGludCBjaGFyT2Zmc2V0LCBbSiB0YXJnZXRdKSB7CiAgICBwdXNoKGNvbnRpbnVlVGFyZ2V0ID8/IE51bGxWYWx1ZS5Db250aW51ZVRhcmdldCk7CiAgICBjb250aW51ZVRhcmdldCA9IHRhcmdldCA/PyBjcmVhdGVDb250aW51ZVRhcmdldChjaGFyT2Zmc2V0KTsKICB9CgogIEogZXhpdEJyZWFrVGFyZ2V0KCkgewogICAgSiBjdXJyZW50ID0gYnJlYWtUYXJnZXQ7CiAgICBicmVha1RhcmdldCA9IHBvcCgpOwogICAgcmV0dXJuIGN1cnJlbnQ7CiAgfQoKICBKIGV4aXRDb250aW51ZVRhcmdldCgpIHsKICAgIEogY3VycmVudCA9IGNvbnRpbnVlVGFyZ2V0OwogICAgY29udGludWVUYXJnZXQgPSBwb3AoKTsKICAgIHJldHVybiBjdXJyZW50OwogIH0KCiAgdm9pZCBlbnRlckxvb3AoaW50IGNoYXJPZmZzZXQpIHsKICAgIGVudGVyQnJlYWtUYXJnZXQoY2hhck9mZnNldCk7CiAgICBlbnRlckNvbnRpbnVlVGFyZ2V0KGNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkJsb2NrRnVuY3Rpb25Cb2R5KFRva2VuIGJlZ2luKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkJsb2NrRnVuY3Rpb25Cb2R5Iik7CiAgICBlbnRlckxvY2FsU2NvcGUoImJsb2NrIGZ1bmN0aW9uIGJvZHkiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luRm9yU3RhdGVtZW50Iik7CiAgICBlbnRlckxvb3AodG9rZW4uY2hhck9mZnNldCk7CiAgICBlbnRlckxvY2FsU2NvcGUoImZvciBzdGF0bWVudCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvckNvbnRyb2xGbG93KFRva2VuIGF3YWl0VG9rZW4sIFRva2VuIGZvclRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkZvckNvbnRyb2xGbG93Iik7CiAgICBlbnRlckxvY2FsU2NvcGUoImZvciBpbiBhIGNvbGxlY3Rpb24iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5CbG9jayhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5CbG9jayIpOwogICAgZW50ZXJMb2NhbFNjb3BlKCJibG9jayIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblN3aXRjaEJsb2NrKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpblN3aXRjaEJsb2NrIik7CiAgICBlbnRlckxvY2FsU2NvcGUoInN3aXRjaCBibG9jayIpOwogICAgZW50ZXJCcmVha1RhcmdldCh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Eb1doaWxlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkRvV2hpbGVTdGF0ZW1lbnQiKTsKICAgIGVudGVyTG9vcCh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5XaGlsZVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5XaGlsZVN0YXRlbWVudCIpOwogICAgZW50ZXJMb29wKHRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkRvV2hpbGVTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkRvV2hpbGVTdGF0ZW1lbnRCb2R5Iik7CiAgICBlbnRlckxvY2FsU2NvcGUoImRvLXdoaWxlIHN0YXRlbWVudCBib2R5Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZERvV2hpbGVTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmREb1doaWxlU3RhdGVtZW50Qm9keSIpOwogICAgdmFyIGJvZHkgPSBwb3AoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBwdXNoKGJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbldoaWxlU3RhdGVtZW50Qm9keShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5XaGlsZVN0YXRlbWVudEJvZHkiKTsKICAgIGVudGVyTG9jYWxTY29wZSgid2hpbGUgc3RhdGVtZW50IGJvZHkiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kV2hpbGVTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRXaGlsZVN0YXRlbWVudEJvZHkiKTsKICAgIHZhciBib2R5ID0gcG9wKCk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgcHVzaChib2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkZvclN0YXRlbWVudEJvZHkiKTsKICAgIGVudGVyTG9jYWxTY29wZSgiZm9yIHN0YXRlbWVudCBib2R5Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvclN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZEZvclN0YXRlbWVudEJvZHkiKTsKICAgIHZhciBib2R5ID0gcG9wKCk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgcHVzaChib2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JJbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luRm9ySW5Cb2R5Iik7CiAgICBlbnRlckxvY2FsU2NvcGUoImZvci1pbiBib2R5Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvckluQm9keShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiZW5kRm9ySW5Cb2R5Iik7CiAgICB2YXIgYm9keSA9IHBvcCgpOwogICAgZXhpdExvY2FsU2NvcGUoKTsKICAgIHB1c2goYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVGhlblN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5UaGVuU3RhdGVtZW50Iik7CiAgICBlbnRlckxvY2FsU2NvcGUoInRoZW4iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVGhlblN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiZW5kVGhlblN0YXRlbWVudCIpOwogICAgdmFyIGJvZHkgPSBwb3AoKTsKICAgIGV4aXRMb2NhbFNjb3BlKCk7CiAgICBwdXNoKGJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkVsc2VTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luRWxzZVN0YXRlbWVudCIpOwogICAgZW50ZXJMb2NhbFNjb3BlKCJlbHNlIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEVsc2VTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZEVsc2VTdGF0ZW1lbnQiKTsKICAgIHZhciBib2R5ID0gcG9wKCk7CiAgICBleGl0TG9jYWxTY29wZSgpOwogICAgcHVzaChib2R5KTsKICB9Cn0KgNQATk48AR4BLgEjATwBHUUBFgkMJQIBOA8BEQEUAUcBOwEoPwQBK0IEASc+BAE9ETwEAQwaExsEATYwOwQBOTZBBAEYHRkUBAEbIBwUBAEjIiUEAQwtKiwEAQwoJSElBAEMPycsBAEMIR4eBAEMJyQlKAQBDCwpIQQBDConIQQBDDAtMAQBDC4rFhYQBAEMListBAEMLCkWFhAEAQwsKSsEAQwqJxYWEAQBDCUiJAQBDCMgFhYQBAEMKSYdBAEMJyQWFhAEAQwpJh0EAQwnJBYWEAQCATZwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL3Njb3BlX2xpc3RlbmVyLmRhcnQ8c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NvdXJjZS92YWx1ZV9raW5kcy5kYXJ0kpsvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgdHlwZTsKCmltcG9ydCAnLi4vYnVpbGRlci9idWlsZGVyLmRhcnQnIGFzIHR5cGU7CgppbXBvcnQgJy4uL2tlcm5lbC9leHByZXNzaW9uX2dlbmVyYXRvci5kYXJ0JyBhcyB0eXBlOwoKaW1wb3J0ICcuLi9tb2RpZmllci5kYXJ0JyBhcyB0eXBlOwoKaW1wb3J0ICcuLi9vcGVyYXRvci5kYXJ0JyBhcyB0eXBlOwoKaW1wb3J0ICcuLi9zY2FubmVyLmRhcnQnIGFzIHR5cGUgc2hvdyBUb2tlbjsKCmltcG9ydCAnLi4vc2NvcGUuZGFydCcgYXMgdHlwZTsKCmltcG9ydCAnLi4vc291cmNlL291dGxpbmVfYnVpbGRlci5kYXJ0JyBhcyB0eXBlOwoKaW1wb3J0ICdzdGFja19saXN0ZW5lci5kYXJ0JyBzaG93IE51bGxWYWx1ZTsKCmltcG9ydCAnc3RhY2tfbGlzdGVuZXIuZGFydCcgYXMgdHlwZTsKCi8vLyBbVmFsdWVLaW5kXSBpcyB1c2VkIGluIFtTdGFja0xpc3RlbmVyLmNoZWNrU3RhdGVdIHRvIGRvY3VtZW50IGFuZCBjaGVjayB0aGUKLy8vIGV4cGVjdGVkIHZhbHVlcyBvZiB0aGUgc3RhY2suCi8vLwovLy8gQWRkIG5ldyB2YWx1ZSBraW5kcyBhcyBuZWVkZWQgZm9yIGRvY3VtZW50aW5nIGFuZCBjaGVja2luZyB0aGUgdmFyaW91cyBzdGFjawovLy8gbGlzdGVuZXIgaW1wbGVtZW50YXRpb25zLgphYnN0cmFjdCBjbGFzcyBWYWx1ZUtpbmQgewogIGNvbnN0IFZhbHVlS2luZCgpOwoKICAvLy8gQ2hlY2tzIHRoZSBbdmFsdWVdIGFuIHJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZSBpcyBvZiB0aGUgZXhwZWN0ZWQga2luZC4KICBib29sIGNoZWNrKE9iamVjdCB2YWx1ZSk7CgogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgQXJndW1lbnRzT3JOdWxsID0KICAgICAgX1NpbmdsZVZhbHVlS2luZDx0eXBlLkFyZ3VtZW50cz4oTnVsbFZhbHVlLkFyZ3VtZW50cyk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBFeHByZXNzaW9uID0gX1NpbmdsZVZhbHVlS2luZDx0eXBlLkV4cHJlc3Npb24+KCk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBJZGVudGlmaWVyID0gX1NpbmdsZVZhbHVlS2luZDx0eXBlLklkZW50aWZpZXI+KCk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBJbnRlZ2VyID0gX1NpbmdsZVZhbHVlS2luZDxpbnQ+KCk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBGb3JtYWxzID0KICAgICAgX1NpbmdsZVZhbHVlS2luZDxMaXN0PHR5cGUuRm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4+KCk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBGb3JtYWxzT3JOdWxsID0KICAgICAgX1NpbmdsZVZhbHVlS2luZDxMaXN0PHR5cGUuRm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4+KAogICAgICAgICAgTnVsbFZhbHVlLkZvcm1hbFBhcmFtZXRlcnMpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgR2VuZXJhdG9yID0gX1NpbmdsZVZhbHVlS2luZDx0eXBlLkdlbmVyYXRvcj4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIE1ldGhvZEJvZHkgPSBfU2luZ2xlVmFsdWVLaW5kPHR5cGUuTWV0aG9kQm9keT4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIE1vZGlmaWVycyA9IF9TaW5nbGVWYWx1ZUtpbmQ8TGlzdDx0eXBlLk1vZGlmaWVyPj4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIE1vZGlmaWVyc09yTnVsbCA9CiAgICAgIF9TaW5nbGVWYWx1ZUtpbmQ8TGlzdDx0eXBlLk1vZGlmaWVyPj4oTnVsbFZhbHVlLk1vZGlmaWVycyk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBOYW1lID0gX1NpbmdsZVZhbHVlS2luZDxTdHJpbmc+KCk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBOYW1lT3JOdWxsID0gX1NpbmdsZVZhbHVlS2luZDxTdHJpbmc+KE51bGxWYWx1ZS5OYW1lKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIE5hbWVPck9wZXJhdG9yID0gX1VuaW9uVmFsdWVLaW5kKFtOYW1lLCBPcGVyYXRvcl0pOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgTmFtZU9yUXVhbGlmaWVkTmFtZU9yT3BlcmF0b3IgPQogICAgICBfVW5pb25WYWx1ZUtpbmQoW05hbWUsIFF1YWxpZmllZE5hbWUsIE9wZXJhdG9yXSk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBOYW1lT3JQYXJzZXJSZWNvdmVyeSA9CiAgICAgIF9VbmlvblZhbHVlS2luZChbTmFtZSwgUGFyc2VyUmVjb3ZlcnldKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIE1ldGFkYXRhTGlzdE9yTnVsbCA9CiAgICAgIF9TaW5nbGVWYWx1ZUtpbmQ8TGlzdDx0eXBlLk1ldGFkYXRhQnVpbGRlcj4+KE51bGxWYWx1ZS5NZXRhZGF0YSk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBPcGVyYXRvciA9IF9TaW5nbGVWYWx1ZUtpbmQ8dHlwZS5PcGVyYXRvcj4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIFBhcnNlclJlY292ZXJ5ID0KICAgICAgX1NpbmdsZVZhbHVlS2luZDx0eXBlLlBhcnNlclJlY292ZXJ5PigpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgUHJvYmxlbUJ1aWxkZXIgPQogICAgICBfU2luZ2xlVmFsdWVLaW5kPHR5cGUuUHJvYmxlbUJ1aWxkZXI+KCk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBRdWFsaWZpZWROYW1lID0gX1NpbmdsZVZhbHVlS2luZDx0eXBlLlF1YWxpZmllZE5hbWU+KCk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBUb2tlbiA9IF9TaW5nbGVWYWx1ZUtpbmQ8dHlwZS5Ub2tlbj4oKTsKICBzdGF0aWMgY29uc3QgVmFsdWVLaW5kIFRva2VuT3JOdWxsID0KICAgICAgX1NpbmdsZVZhbHVlS2luZDx0eXBlLlRva2VuPihOdWxsVmFsdWUuVG9rZW4pOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgVHlwZUFyZ3VtZW50c09yTnVsbCA9CiAgICAgIF9TaW5nbGVWYWx1ZUtpbmQ8TGlzdDx0eXBlLlVucmVzb2x2ZWRUeXBlPj4oTnVsbFZhbHVlLlR5cGVBcmd1bWVudHMpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgVHlwZUJ1aWxkZXIgPSBfU2luZ2xlVmFsdWVLaW5kPHR5cGUuVHlwZUJ1aWxkZXI+KCk7CiAgc3RhdGljIGNvbnN0IFZhbHVlS2luZCBUeXBlQnVpbGRlck9yTnVsbCA9CiAgICAgIF9TaW5nbGVWYWx1ZUtpbmQ8dHlwZS5UeXBlQnVpbGRlcj4oTnVsbFZhbHVlLlR5cGUpOwogIHN0YXRpYyBjb25zdCBWYWx1ZUtpbmQgVHlwZVZhcmlhYmxlTGlzdE9yTnVsbCA9CiAgICAgIF9TaW5nbGVWYWx1ZUtpbmQ8TGlzdDx0eXBlLlR5cGVWYXJpYWJsZUJ1aWxkZXI+PihOdWxsVmFsdWUuVHlwZVZhcmlhYmxlcyk7Cn0KCi8vLyBBIFtWYWx1ZUtpbmRdIGZvciBhIHBhcnRpY3VsYXIgdHlwZSBbVF0sIG9wdGlvbmFsbHkgd2l0aCBhIHJlY29nbml6ZWQKLy8vIFtOdWxsVmFsdWVdLgpjbGFzcyBfU2luZ2xlVmFsdWVLaW5kPFQ+IGltcGxlbWVudHMgVmFsdWVLaW5kIHsKICBmaW5hbCBOdWxsVmFsdWUgbnVsbFZhbHVlOwoKICBjb25zdCBfU2luZ2xlVmFsdWVLaW5kKFt0aGlzLm51bGxWYWx1ZV0pOwoKICBAb3ZlcnJpZGUKICBib29sIGNoZWNrKE9iamVjdCB2YWx1ZSkgewogICAgaWYgKG51bGxWYWx1ZSAhPSBudWxsICYmIHZhbHVlID09IG51bGxWYWx1ZSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiB2YWx1ZSBpcyBUOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaWYgKG51bGxWYWx1ZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiAnJFQgb3IgJG51bGxWYWx1ZSc7CiAgICB9CiAgICByZXR1cm4gJyRUJzsKICB9Cn0KCi8vLyBBIFtWYWx1ZUtpbmRdIGZvciB0aGUgdW5pb24gb2YgYSBsaXN0IG9mIFtWYWx1ZUtpbmRdcy4KY2xhc3MgX1VuaW9uVmFsdWVLaW5kIGltcGxlbWVudHMgVmFsdWVLaW5kIHsKICBmaW5hbCBMaXN0PFZhbHVlS2luZD4ga2luZHM7CgogIGNvbnN0IF9VbmlvblZhbHVlS2luZCh0aGlzLmtpbmRzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjaGVjayhPYmplY3QgdmFsdWUpIHsKICAgIGZvciAoVmFsdWVLaW5kIGtpbmQgaW4ga2luZHMpIHsKICAgICAgaWYgKGtpbmQuY2hlY2sodmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIFN0cmluZyBvciA9ICcnOwogICAgZm9yIChWYWx1ZUtpbmQga2luZCBpbiBraW5kcykgewogICAgICBzYi53cml0ZShvcik7CiAgICAgIHNiLndyaXRlKGtpbmQpOwogICAgICBvciA9ICcgb3IgJzsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIEhlbHBlciBtZXRob2QgZm9yIGNyZWF0aW5nIGEgbGlzdCBvZiBbVmFsdWVLaW5kXXMgb2YgdGhlIGdpdmVuIGxlbmd0aAovLy8gW2NvdW50XS4KTGlzdDxWYWx1ZUtpbmQ+IHJlcGVhdGVkS2luZHMoVmFsdWVLaW5kIGtpbmQsIGludCBjb3VudCkgewogIHJldHVybiBuZXcgTGlzdC5nZW5lcmF0ZShjb3VudCwgKF8pID0+IGtpbmQpOwp9CgovLy8gSGVscGVyIG1ldGhvZCBmb3IgY3JlYXRpbmcgYSB1bmlvbiBvZiBhIGxpc3Qgb2YgW1ZhbHVlS2luZF1zLgpWYWx1ZUtpbmQgdW5pb25PZktpbmRzKExpc3Q8VmFsdWVLaW5kPiBraW5kcykgewogIHJldHVybiBfVW5pb25WYWx1ZUtpbmQoa2luZHMpOwp9CoCMAE5OPAEqASoBNgEjASMBLQEgATEBLQEmAVAiBFEeGxUBURwBKz1LSzwjPSk7J0lLTitCPFBNOTgwLy5IRyovKi9RQSc1L0xNLToyUQIBShExHQEsAQwdMxMGFwQBFh0hBhEEAgE7LR8BJQEMHSQfFQgGEgQBFioUJBQWEwYaBAIBSg07MAIBQjAhAgEzcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS92YWx1ZV9raW5kcy5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX2luZmVycmVyLmRhcnTAATzQLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS5tZCBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMga2VybmVsOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHMsCiAgICAgICAgQXNFeHByZXNzaW9uLAogICAgICAgIEFzeW5jTWFya2VyLAogICAgICAgIEJvdHRvbVR5cGUsCiAgICAgICAgQ2xhc3MsCiAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uLAogICAgICAgIENvbnN0cnVjdG9ySW52b2NhdGlvbiwKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEZpZWxkLAogICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbiwKICAgICAgICBGdW5jdGlvbk5vZGUsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEluc3RhbnRpYXRpb24sCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBJbnZhbGlkVHlwZSwKICAgICAgICBJbnZvY2F0aW9uRXhwcmVzc2lvbiwKICAgICAgICBMZXQsCiAgICAgICAgTGlzdExpdGVyYWwsCiAgICAgICAgTWFwTGl0ZXJhbCwKICAgICAgICBNZW1iZXIsCiAgICAgICAgTWV0aG9kSW52b2NhdGlvbiwKICAgICAgICBOYW1lLAogICAgICAgIE51bGxMaXRlcmFsLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFByb3BlcnR5R2V0LAogICAgICAgIFByb3BlcnR5U2V0LAogICAgICAgIFJldHVyblN0YXRlbWVudCwKICAgICAgICBTZXRMaXRlcmFsLAogICAgICAgIFN0YXRlbWVudCwKICAgICAgICBTdGF0aWNHZXQsCiAgICAgICAgU3VwZXJNZXRob2RJbnZvY2F0aW9uLAogICAgICAgIFN1cGVyUHJvcGVydHlHZXQsCiAgICAgICAgU3VwZXJQcm9wZXJ0eVNldCwKICAgICAgICBTdXBlcnR5cGUsCiAgICAgICAgVGhpc0V4cHJlc3Npb24sCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uLAogICAgICAgIFZhcmlhYmxlR2V0LAogICAgICAgIFZvaWRUeXBlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgc2hvdyBDbGFzc0hpZXJhcmNoeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnCiAgICBzaG93IGdldEZyZXNoVHlwZVBhcmFtZXRlcnMsIFN1YnN0aXR1dGlvbjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvc3JjL2JvdW5kc19jaGVja3MuZGFydCcgc2hvdyBjYWxjdWxhdGVCb3VuZHM7CgppbXBvcnQgJy4uLy4uL2Jhc2UvaW5zdHJ1bWVudGF0aW9uLmRhcnQnCiAgICBzaG93CiAgICAgICAgSW5zdHJ1bWVudGF0aW9uLAogICAgICAgIEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyLAogICAgICAgIEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZSwKICAgICAgICBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGVBcmdzOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIExvY2F0ZWRNZXNzYWdlLAogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgVGVtcGxhdGUsCiAgICAgICAgbWVzc2FnZVJldHVybkZyb21Wb2lkRnVuY3Rpb24sCiAgICAgICAgbWVzc2FnZVJldHVybldpdGhvdXRFeHByZXNzaW9uLAogICAgICAgIG1lc3NhZ2VWb2lkRXhwcmVzc2lvbiwKICAgICAgICBub0xlbmd0aCwKICAgICAgICB0ZW1wbGF0ZUFyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGUsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTmFtZWRBcmd1bWVudCwKICAgICAgICB0ZW1wbGF0ZUltcGxpY2l0Q2FsbE9mTm9uTWV0aG9kLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm9JbmZlcnJlZFR5cGVTdG9yZWQsCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdG9yaW5nTXVsdGlwbGVJbmZlcnJlZFR5cGVzLAogICAgICAgIHRlbXBsYXRlSW52YWxpZEFzc2lnbm1lbnQsCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdEZ1bmN0aW9uRXhwciwKICAgICAgICB0ZW1wbGF0ZUludmFsaWRDYXN0TGl0ZXJhbExpc3QsCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxNYXAsCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxTZXQsCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdExvY2FsRnVuY3Rpb24sCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdE5ld0V4cHIsCiAgICAgICAgdGVtcGxhdGVJbnZhbGlkQ2FzdFN0YXRpY01ldGhvZCwKICAgICAgICB0ZW1wbGF0ZUludmFsaWRDYXN0VG9wTGV2ZWxGdW5jdGlvbiwKICAgICAgICB0ZW1wbGF0ZUludm9rZU5vbkZ1bmN0aW9uLAogICAgICAgIHRlbXBsYXRlTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3MsCiAgICAgICAgdGVtcGxhdGVVbmRlZmluZWRHZXR0ZXIsCiAgICAgICAgdGVtcGxhdGVVbmRlZmluZWRNZXRob2QsCiAgICAgICAgdGVtcGxhdGVVbmRlZmluZWRTZXR0ZXI7CgppbXBvcnQgJy4uL2tlcm5lbC9leHByZXNzaW9uX2dlbmVyYXRvci5kYXJ0JyBzaG93IGJ1aWxkSXNOdWxsOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX3NoYWRvd19hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBFeHByZXNzaW9uSnVkZ21lbnQsCiAgICAgICAgU2hhZG93VHlwZUluZmVyZW5jZUVuZ2luZSwKICAgICAgICBTaGFkb3dUeXBlSW5mZXJyZXIsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LAogICAgICAgIGdldEV4cGxpY2l0VHlwZUFyZ3VtZW50cywKICAgICAgICBnZXRJbmZlcnJlZFR5cGU7CgppbXBvcnQgJy4uL2tlcm5lbC90eXBlX2FsZ29yaXRobXMuZGFydCcgc2hvdyBoYXNBbnlUeXBlVmFyaWFibGVzOwoKaW1wb3J0ICcuLi9uYW1lcy5kYXJ0JyBzaG93IGNhbGxOYW1lLCB1bmFyeU1pbnVzTmFtZTsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyBpbnRlcm5hbFByb2JsZW0sIHVuZXhwZWN0ZWQsIHVuaGFuZGxlZDsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnaW5mZXJlbmNlX2hlbHBlci5kYXJ0JyBzaG93IEluZmVyZW5jZUhlbHBlcjsKCmltcG9ydCAndHlwZV9jb25zdHJhaW50X2dhdGhlcmVyLmRhcnQnIHNob3cgVHlwZUNvbnN0cmFpbnRHYXRoZXJlcjsKCmltcG9ydCAndHlwZV9pbmZlcmVuY2VfZW5naW5lLmRhcnQnCiAgICBzaG93IEluY2x1ZGVzVHlwZVBhcmFtZXRlcnNOb25Db3ZhcmlhbnRseSwgVHlwZUluZmVyZW5jZUVuZ2luZSwgVmFyaWFuY2U7CgppbXBvcnQgJ3R5cGVfcHJvbW90aW9uLmRhcnQnIHNob3cgVHlwZVByb21vdGVyOwoKaW1wb3J0ICd0eXBlX3NjaGVtYS5kYXJ0JyBzaG93IGlzS25vd24sIFVua25vd25UeXBlOwoKaW1wb3J0ICd0eXBlX3NjaGVtYV9lbGltaW5hdGlvbi5kYXJ0JyBzaG93IGdyZWF0ZXN0Q2xvc3VyZTsKCmltcG9ydCAndHlwZV9zY2hlbWFfZW52aXJvbm1lbnQuZGFydCcKICAgIHNob3cKICAgICAgICBnZXROYW1lZFBhcmFtZXRlclR5cGUsCiAgICAgICAgZ2V0UG9zaXRpb25hbFBhcmFtZXRlclR5cGUsCiAgICAgICAgVHlwZVZhcmlhYmxlRWxpbWluYXRvciwKICAgICAgICBUeXBlU2NoZW1hRW52aXJvbm1lbnQ7CgovLy8gR2l2ZW4gYSBbRnVuY3Rpb25Ob2RlXSwgZ2V0cyB0aGUgbmFtZWQgcGFyYW1ldGVyIGlkZW50aWZpZWQgYnkgW25hbWVdLCBvcgovLy8gYG51bGxgIGlmIHRoZXJlIGlzIG5vIHBhcmFtZXRlciB3aXRoIHRoZSBnaXZlbiBuYW1lLgpWYXJpYWJsZURlY2xhcmF0aW9uIGdldE5hbWVkRm9ybWFsKEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiwgU3RyaW5nIG5hbWUpIHsKICBmb3IgKHZhciBmb3JtYWwgaW4gZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICBpZiAoZm9ybWFsLm5hbWUgPT0gbmFtZSkgcmV0dXJuIGZvcm1hbDsKICB9CiAgcmV0dXJuIG51bGw7Cn0KCi8vLyBHaXZlbiBhIFtGdW5jdGlvbk5vZGVdLCBnZXRzIHRoZSBbaV10aCBwb3NpdGlvbmFsIGZvcm1hbCBwYXJhbWV0ZXIsIG9yCi8vLyBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gcGFyYW1ldGVyIHdpdGggdGhhdCBpbmRleC4KVmFyaWFibGVEZWNsYXJhdGlvbiBnZXRQb3NpdGlvbmFsRm9ybWFsKEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiwgaW50IGkpIHsKICBpZiAoaSA8IGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgcmV0dXJuIGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogIH0gZWxzZSB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmJvb2wgaXNPdmVybG9hZGFibGVBcml0aG1ldGljT3BlcmF0b3IoU3RyaW5nIG5hbWUpIHsKICByZXR1cm4gaWRlbnRpY2FsKG5hbWUsICcrJykgfHwKICAgICAgaWRlbnRpY2FsKG5hbWUsICctJykgfHwKICAgICAgaWRlbnRpY2FsKG5hbWUsICcqJykgfHwKICAgICAgaWRlbnRpY2FsKG5hbWUsICclJyk7Cn0KCi8vLyBLZWVwcyB0cmFjayBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW5uZXJtb3N0IGZ1bmN0aW9uIG9yIGNsb3N1cmUgYmVpbmcKLy8vIGluZmVycmVkLgpjbGFzcyBDbG9zdXJlQ29udGV4dCB7CiAgZmluYWwgYm9vbCBpc0FzeW5jOwoKICBmaW5hbCBib29sIGlzR2VuZXJhdG9yOwoKICAvLy8gVGhlIHR5cGluZyBleHBlY3RhdGlvbiBmb3IgdGhlIHN1YmV4cHJlc3Npb24gb2YgYSBgcmV0dXJuYCBvciBgeWllbGRgCiAgLy8vIHN0YXRlbWVudCBpbnNpZGUgdGhlIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBGb3Igbm9uLWdlbmVyYXRvciBhc3luYyBmdW5jdGlvbnMsIHRoaXMgd2lsbCBiZSBhICJGdXR1cmVPciIgdHlwZSAoc2luY2UKICAvLy8gaXQgaXMgcGVybWlzc2libGUgZm9yIHN1Y2ggYSBmdW5jdGlvbiB0byByZXR1cm4gZWl0aGVyIGEgZGlyZWN0IHZhbHVlIG9yCiAgLy8vIGEgZnV0dXJlKS4KICAvLy8KICAvLy8gRm9yIGdlbmVyYXRvciBmdW5jdGlvbnMgY29udGFpbmluZyBhIGB5aWVsZCpgIHN0YXRlbWVudCwgdGhlIGV4cGVjdGVkIHR5cGUKICAvLy8gZm9yIHRoZSBzdWJleHByZXNzaW9uIG9mIHRoZSBgeWllbGQqYCBzdGF0ZW1lbnQgaXMgdGhlIHJlc3VsdCBvZiB3cmFwcGluZwogIC8vLyB0aGlzIHR5cGluZyBleHBlY3RhdGlvbiBpbiBgU3RyZWFtYCBvciBgSXRlcmF0b3JgLCBhcyBhcHByb3ByaWF0ZS4KICBmaW5hbCBEYXJ0VHlwZSByZXR1cm5PcllpZWxkQ29udGV4dDsKCiAgZmluYWwgRGFydFR5cGUgZGVjbGFyZWRSZXR1cm5UeXBlOwoKICBmaW5hbCBib29sIF9uZWVkVG9JbmZlclJldHVyblR5cGU7CgogIC8vLyBUaGUgdHlwZSB0aGF0IGFjdHVhbGx5IGFwcGVhcmVkIGFzIHRoZSBzdWJleHByZXNzaW9uIG9mIGByZXR1cm5gIG9yCiAgLy8vIGB5aWVsZGAgc3RhdGVtZW50cyBpbnNpZGUgdGhlIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBGb3Igbm9uLWdlbmVyYXRvciBhc3luYyBmdW5jdGlvbnMsIHRoaXMgaXMgdGhlICJ1bndyYXBwZWQiIHR5cGUgKGUuZy4gaWYKICAvLy8gdGhlIGZ1bmN0aW9uIGlzIGV4cGVjdGVkIHRvIHJldHVybiBgRnV0dXJlPGludD5gLCB0aGlzIGlzIGBpbnRgKS4KICAvLy8KICAvLy8gRm9yIGdlbmVyYXRvciBmdW5jdGlvbnMgY29udGFpbmluZyBhIGB5aWVsZCpgIHN0YXRlbWVudCwgdGhlIHR5cGUgdGhhdAogIC8vLyBhcHBlYXJlZCBhcyB0aGUgc3ViZXhwcmVzc2lvbiBvZiB0aGUgYHlpZWxkKmAgc3RhdGVtZW50IHdhcyB0aGUgcmVzdWx0IG9mCiAgLy8vIHdyYXBwaW5nIHRoaXMgdHlwZSBpbiBgU3RyZWFtYCBvciBgSXRlcmF0b3JgLCBhcyBhcHByb3ByaWF0ZS4KICBEYXJ0VHlwZSBfaW5mZXJyZWRVbndyYXBwZWRSZXR1cm5PcllpZWxkVHlwZTsKCiAgLy8vIFdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzIGFuIGFycm93IGZ1bmN0aW9uLgogIGJvb2wgaXNBcnJvdzsKCiAgLy8vIEEgbGlzdCBvZiByZXR1cm4gc3RhdGVtZW50cyBpbiBmdW5jdGlvbnMgd2hvc2UgcmV0dXJuIHR5cGUgaXMgYmVpbmcKICAvLy8gaW5mZXJyZWQuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5zIGFyZSBjaGVja2VkIGZvciB2YWxpZGl0eSBhZnRlciB0aGUgcmV0dXJuIHR5cGUgaXMgaW5mZXJyZWQuCiAgTGlzdDxSZXR1cm5TdGF0ZW1lbnQ+IHJldHVyblN0YXRlbWVudHM7CgogIC8vLyBBIGxpc3Qgb2YgcmV0dXJuIGV4cHJlc3Npb24gdHlwZXMgaW4gZnVuY3Rpb25zIHdob3NlIHJldHVybiB0eXBlIGlzCiAgLy8vIGJlaW5nIGluZmVycmVkLgogIExpc3Q8RGFydFR5cGU+IHJldHVybkV4cHJlc3Npb25UeXBlczsKCiAgZmFjdG9yeSBDbG9zdXJlQ29udGV4dChUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyLCBBc3luY01hcmtlciBhc3luY01hcmtlciwKICAgICAgRGFydFR5cGUgcmV0dXJuQ29udGV4dCwgYm9vbCBuZWVkVG9JbmZlclJldHVyblR5cGUpIHsKICAgIGFzc2VydChyZXR1cm5Db250ZXh0ICE9IG51bGwpOwogICAgRGFydFR5cGUgZGVjbGFyZWRSZXR1cm5UeXBlID0KICAgICAgICBncmVhdGVzdENsb3N1cmUoaW5mZXJyZXIuY29yZVR5cGVzLCByZXR1cm5Db250ZXh0KTsKICAgIGJvb2wgaXNBc3luYyA9IGFzeW5jTWFya2VyID09IEFzeW5jTWFya2VyLkFzeW5jIHx8CiAgICAgICAgYXN5bmNNYXJrZXIgPT0gQXN5bmNNYXJrZXIuQXN5bmNTdGFyOwogICAgYm9vbCBpc0dlbmVyYXRvciA9IGFzeW5jTWFya2VyID09IEFzeW5jTWFya2VyLlN5bmNTdGFyIHx8CiAgICAgICAgYXN5bmNNYXJrZXIgPT0gQXN5bmNNYXJrZXIuQXN5bmNTdGFyOwogICAgaWYgKGlzR2VuZXJhdG9yKSB7CiAgICAgIGlmIChpc0FzeW5jKSB7CiAgICAgICAgcmV0dXJuQ29udGV4dCA9IGluZmVycmVyLmdldFR5cGVBcmd1bWVudE9mKAogICAgICAgICAgICByZXR1cm5Db250ZXh0LCBpbmZlcnJlci5jb3JlVHlwZXMuc3RyZWFtQ2xhc3MpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybkNvbnRleHQgPSBpbmZlcnJlci5nZXRUeXBlQXJndW1lbnRPZigKICAgICAgICAgICAgcmV0dXJuQ29udGV4dCwgaW5mZXJyZXIuY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3MpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzQXN5bmMpIHsKICAgICAgcmV0dXJuQ29udGV4dCA9IGluZmVycmVyLndyYXBGdXR1cmVPclR5cGUoCiAgICAgICAgICBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQudW5mdXR1cmVUeXBlKHJldHVybkNvbnRleHQpKTsKICAgIH0KICAgIHJldHVybiBuZXcgQ2xvc3VyZUNvbnRleHQuXyhpc0FzeW5jLCBpc0dlbmVyYXRvciwgcmV0dXJuQ29udGV4dCwKICAgICAgICBkZWNsYXJlZFJldHVyblR5cGUsIG5lZWRUb0luZmVyUmV0dXJuVHlwZSk7CiAgfQoKICBDbG9zdXJlQ29udGV4dC5fKHRoaXMuaXNBc3luYywgdGhpcy5pc0dlbmVyYXRvciwgdGhpcy5yZXR1cm5PcllpZWxkQ29udGV4dCwKICAgICAgdGhpcy5kZWNsYXJlZFJldHVyblR5cGUsIHRoaXMuX25lZWRUb0luZmVyUmV0dXJuVHlwZSkgewogICAgaWYgKF9uZWVkVG9JbmZlclJldHVyblR5cGUpIHsKICAgICAgcmV0dXJuU3RhdGVtZW50cyA9IFtdOwogICAgICByZXR1cm5FeHByZXNzaW9uVHlwZXMgPSBbXTsKICAgIH0KICB9CgogIGJvb2wgY2hlY2tWYWxpZFJldHVybihUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyLCBEYXJ0VHlwZSByZXR1cm5UeXBlLAogICAgICBSZXR1cm5TdGF0ZW1lbnQgc3RhdGVtZW50LCBEYXJ0VHlwZSBleHByZXNzaW9uVHlwZSkgewogICAgLy8gVGhlIHJ1bGVzIGZvciB2YWxpZCByZXR1cm5zIGZvciBmdW5jdGlvbnMgd2l0aCByZXR1cm4gdHlwZSBUIGFuZCBwb3NzaWJseQogICAgLy8gYSByZXR1cm4gZXhwcmVzc2lvbiB3aXRoIHN0YXRpYyB0eXBlIFMuCiAgICB2YXIgZmxhdHRlbmVkUmV0dXJuVHlwZSA9IGlzQXN5bmMKICAgICAgICA/IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC51bmZ1dHVyZVR5cGUocmV0dXJuVHlwZSkKICAgICAgICA6IHJldHVyblR5cGU7CiAgICBpZiAoc3RhdGVtZW50LmV4cHJlc3Npb24gPT0gbnVsbCkgewogICAgICAvLyBTeW5jOiByZXR1cm47IGlzIGEgdmFsaWQgcmV0dXJuIGlmIFQgaXMgdm9pZCwgZHluYW1pYywgb3IgTnVsbC4KICAgICAgLy8gQXN5bmM6IHJldHVybjsgaXMgYSB2YWxpZCByZXR1cm4gaWYgZmxhdHRlbihUKSBpcyB2b2lkLCBkeW5hbWljLCBvcgogICAgICAvLyBOdWxsLgogICAgICBpZiAoZmxhdHRlbmVkUmV0dXJuVHlwZSBpcyBWb2lkVHlwZSB8fAogICAgICAgICAgZmxhdHRlbmVkUmV0dXJuVHlwZSBpcyBEeW5hbWljVHlwZSB8fAogICAgICAgICAgZmxhdHRlbmVkUmV0dXJuVHlwZSA9PSBpbmZlcnJlci5jb3JlVHlwZXMubnVsbENsYXNzLnJhd1R5cGUpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA9IGluZmVycmVyLmhlbHBlci53cmFwSW5Qcm9ibGVtKAogICAgICAgICAgbmV3IE51bGxMaXRlcmFsKCkuLmZpbGVPZmZzZXQgPSBzdGF0ZW1lbnQuZmlsZU9mZnNldCwKICAgICAgICAgIG1lc3NhZ2VSZXR1cm5XaXRob3V0RXhwcmVzc2lvbiwKICAgICAgICAgIG5vTGVuZ3RoKQogICAgICAgIC4ucGFyZW50ID0gc3RhdGVtZW50OwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy8gQXJyb3cgZnVuY3Rpb25zIGFyZSB2YWxpZCBpZjoKICAgIC8vIFN5bmM6IFQgaXMgdm9pZCBvciByZXR1cm4gZXhwOyBpcyBhIHZhbGlkIGZvciBhIGJsb2NrLWJvZGllZCBmdW5jdGlvbi4KICAgIC8vIEFzeW5jOiBmbGF0dGVuKFQpIGlzIHZvaWQgb3IgcmV0dXJuIGV4cDsgaXMgdmFsaWQgZm9yIGEgYmxvY2stYm9kaWVkCiAgICAvLyBmdW5jdGlvbi4KICAgIGlmIChpc0Fycm93ICYmIGZsYXR0ZW5lZFJldHVyblR5cGUgaXMgVm9pZFR5cGUpIHJldHVybiB0cnVlOwoKICAgIC8vIFN5bmM6IGludmFsaWQgaWYgVCBpcyB2b2lkIGFuZCBTIGlzIG5vdCB2b2lkLCBkeW5hbWljLCBvciBOdWxsCiAgICAvLyBBc3luYzogaW52YWxpZCBpZiBUIGlzIHZvaWQgYW5kIGZsYXR0ZW4oUykgaXMgbm90IHZvaWQsIGR5bmFtaWMsIG9yIE51bGwuCiAgICB2YXIgZmxhdHRlbmVkRXhwcmVzc2lvblR5cGUgPSBpc0FzeW5jCiAgICAgICAgPyBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQudW5mdXR1cmVUeXBlKGV4cHJlc3Npb25UeXBlKQogICAgICAgIDogZXhwcmVzc2lvblR5cGU7CiAgICBpZiAocmV0dXJuVHlwZSBpcyBWb2lkVHlwZSAmJgogICAgICAgIGZsYXR0ZW5lZEV4cHJlc3Npb25UeXBlIGlzISBWb2lkVHlwZSAmJgogICAgICAgIGZsYXR0ZW5lZEV4cHJlc3Npb25UeXBlIGlzISBEeW5hbWljVHlwZSAmJgogICAgICAgIGZsYXR0ZW5lZEV4cHJlc3Npb25UeXBlICE9IGluZmVycmVyLmNvcmVUeXBlcy5udWxsQ2xhc3MucmF3VHlwZSkgewogICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA9IGluZmVycmVyLmhlbHBlci53cmFwSW5Qcm9ibGVtKAogICAgICAgICAgc3RhdGVtZW50LmV4cHJlc3Npb24sIG1lc3NhZ2VSZXR1cm5Gcm9tVm9pZEZ1bmN0aW9uLCBub0xlbmd0aCkKICAgICAgICAuLnBhcmVudCA9IHN0YXRlbWVudDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8vIFN5bmM6IGludmFsaWQgaWYgUyBpcyB2b2lkIGFuZCBUIGlzIG5vdCB2b2lkLCBkeW5hbWljLCBvciBOdWxsLgogICAgLy8gQXN5bmM6IGludmFsaWQgaWYgZmxhdHRlbihTKSBpcyB2b2lkIGFuZCBmbGF0dGVuKFQpIGlzIG5vdCB2b2lkLCBkeW5hbWljLAogICAgLy8gb3IgTnVsbC4KICAgIGlmIChmbGF0dGVuZWRFeHByZXNzaW9uVHlwZSBpcyBWb2lkVHlwZSAmJgogICAgICAgIGZsYXR0ZW5lZFJldHVyblR5cGUgaXMhIFZvaWRUeXBlICYmCiAgICAgICAgZmxhdHRlbmVkUmV0dXJuVHlwZSBpcyEgRHluYW1pY1R5cGUgJiYKICAgICAgICBmbGF0dGVuZWRSZXR1cm5UeXBlICE9IGluZmVycmVyLmNvcmVUeXBlcy5udWxsQ2xhc3MucmF3VHlwZSkgewogICAgICBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA9IGluZmVycmVyLmhlbHBlcgogICAgICAgICAgLndyYXBJblByb2JsZW0oc3RhdGVtZW50LmV4cHJlc3Npb24sIG1lc3NhZ2VWb2lkRXhwcmVzc2lvbiwgbm9MZW5ndGgpCiAgICAgICAgICAgIC4ucGFyZW50ID0gc3RhdGVtZW50OwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy8gVGhlIGNhbGxlciB3aWxsIGNoZWNrIHRoYXQgdGhlIHJldHVybiBleHByZXNzaW9uIGlzIGFzc2lnbmFibGUgdG8gdGhlCiAgICAvLyByZXR1cm4gdHlwZS4KICAgIHJldHVybiB0cnVlOwogIH0KCiAgLy8vIFVwZGF0ZXMgdGhlIGluZmVycmVkIHJldHVybiB0eXBlIGJhc2VkIG9uIHRoZSBwcmVzZW5jZSBvZiBhIHJldHVybgogIC8vLyBzdGF0ZW1lbnQgcmV0dXJuaW5nIHRoZSBnaXZlbiBbdHlwZV0uCiAgdm9pZCBoYW5kbGVSZXR1cm4oVHlwZUluZmVycmVySW1wbCBpbmZlcnJlciwgUmV0dXJuU3RhdGVtZW50IHN0YXRlbWVudCwKICAgICAgRGFydFR5cGUgdHlwZSwgYm9vbCBpc0Fycm93KSB7CiAgICBpZiAoaXNHZW5lcmF0b3IpIHJldHVybjsKICAgIC8vIFRoZSBmaXJzdCByZXR1cm4gd2Ugc2VlIHRlbGxzIHVzIGlmIHdlIGhhdmUgYW4gYXJyb3cgZnVuY3Rpb24uCiAgICBpZiAodGhpcy5pc0Fycm93ID09IG51bGwpIHsKICAgICAgdGhpcy5pc0Fycm93ID0gaXNBcnJvdzsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydCh0aGlzLmlzQXJyb3cgPT0gaXNBcnJvdyk7CiAgICB9CgogICAgaWYgKF9uZWVkVG9JbmZlclJldHVyblR5cGUpIHsKICAgICAgLy8gQWRkIHRoZSByZXR1cm4gdG8gYSBsaXN0IHRvIGJlIGNoZWNrZWQgZm9yIHZhbGlkaXR5IGFmdGVyIHdlJ3ZlCiAgICAgIC8vIGluZmVycmVkIHRoZSByZXR1cm4gdHlwZS4KICAgICAgcmV0dXJuU3RhdGVtZW50cy5hZGQoc3RhdGVtZW50KTsKICAgICAgcmV0dXJuRXhwcmVzc2lvblR5cGVzLmFkZCh0eXBlKTsKCiAgICAgIC8vIFRoZSByZXR1cm4gZXhwcmVzc2lvbiBoYXMgdG8gYmUgYXNzaWduYWJsZSB0byB0aGUgcmV0dXJuIHR5cGUKICAgICAgLy8gZXhwZWN0YXRpb24gZnJvbSB0aGUgZG93bndhcmRzIGluZmVyZW5jZSBjb250ZXh0LgogICAgICBpZiAoc3RhdGVtZW50LmV4cHJlc3Npb24gIT0gbnVsbCAmJgogICAgICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZShyZXR1cm5PcllpZWxkQ29udGV4dCwgdHlwZSwKICAgICAgICAgICAgICAgICAgc3RhdGVtZW50LmV4cHJlc3Npb24sIHN0YXRlbWVudC5maWxlT2Zmc2V0LAogICAgICAgICAgICAgICAgICBpc1JldHVybkZyb21Bc3luYzogaXNBc3luYywgaXNWb2lkQWxsb3dlZDogdHJ1ZSkgIT0KICAgICAgICAgICAgICBudWxsKSB7CiAgICAgICAgLy8gTm90IGFzc2lnbmFibGUsIHVzZSB0aGUgZXhwZWN0YXRpb24uCiAgICAgICAgdHlwZSA9IGdyZWF0ZXN0Q2xvc3VyZShpbmZlcnJlci5jb3JlVHlwZXMsIHJldHVybk9yWWllbGRDb250ZXh0KTsKICAgICAgfQogICAgICB2YXIgdW53cmFwcGVkVHlwZSA9IHR5cGU7CiAgICAgIGlmIChpc0FzeW5jKSB7CiAgICAgICAgdW53cmFwcGVkVHlwZSA9IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudC51bmZ1dHVyZVR5cGUodHlwZSk7CiAgICAgIH0KICAgICAgaWYgKF9pbmZlcnJlZFVud3JhcHBlZFJldHVybk9yWWllbGRUeXBlID09IG51bGwpIHsKICAgICAgICBfaW5mZXJyZWRVbndyYXBwZWRSZXR1cm5PcllpZWxkVHlwZSA9IHVud3JhcHBlZFR5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2luZmVycmVkVW53cmFwcGVkUmV0dXJuT3JZaWVsZFR5cGUgPSBpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAgICAgLmdldFN0YW5kYXJkVXBwZXJCb3VuZCgKICAgICAgICAgICAgICAgIF9pbmZlcnJlZFVud3JhcHBlZFJldHVybk9yWWllbGRUeXBlLCB1bndyYXBwZWRUeXBlKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gSWYgd2UgYXJlIG5vdCBpbmZlcnJpbmcgYSB0eXBlIHdlIGNhbiBpbW1lZGlhdGVseSBjaGVjayB0aGF0IHRoZSByZXR1cm4KICAgIC8vIGlzIHZhbGlkLgogICAgaWYgKGNoZWNrVmFsaWRSZXR1cm4oaW5mZXJyZXIsIGRlY2xhcmVkUmV0dXJuVHlwZSwgc3RhdGVtZW50LCB0eXBlKSAmJgogICAgICAgIHN0YXRlbWVudC5leHByZXNzaW9uICE9IG51bGwpIHsKICAgICAgaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZShyZXR1cm5PcllpZWxkQ29udGV4dCwgdHlwZSwKICAgICAgICAgIHN0YXRlbWVudC5leHByZXNzaW9uLCBzdGF0ZW1lbnQuZmlsZU9mZnNldCwKICAgICAgICAgIGlzUmV0dXJuRnJvbUFzeW5jOiBpc0FzeW5jLCBpc1ZvaWRBbGxvd2VkOiB0cnVlKTsKICAgIH0KICB9CgogIHZvaWQgaGFuZGxlWWllbGQoVHlwZUluZmVycmVySW1wbCBpbmZlcnJlciwgYm9vbCBpc1lpZWxkU3RhciwgRGFydFR5cGUgdHlwZSwKICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBpbnQgZmlsZU9mZnNldCkgewogICAgaWYgKCFpc0dlbmVyYXRvcikgcmV0dXJuOwogICAgdmFyIGV4cGVjdGVkVHlwZSA9IGlzWWllbGRTdGFyCiAgICAgICAgPyBfd3JhcEFzeW5jT3JHZW5lcmF0b3IoaW5mZXJyZXIsIHJldHVybk9yWWllbGRDb250ZXh0KQogICAgICAgIDogcmV0dXJuT3JZaWVsZENvbnRleHQ7CiAgICBpZiAoaW5mZXJyZXIuZW5zdXJlQXNzaWduYWJsZShleHBlY3RlZFR5cGUsIHR5cGUsIGV4cHJlc3Npb24sIGZpbGVPZmZzZXQsCiAgICAgICAgICAgIGlzUmV0dXJuRnJvbUFzeW5jOiBpc0FzeW5jKSAhPQogICAgICAgIG51bGwpIHsKICAgICAgdHlwZSA9IGdyZWF0ZXN0Q2xvc3VyZShpbmZlcnJlci5jb3JlVHlwZXMsIGV4cGVjdGVkVHlwZSk7CiAgICB9CiAgICBpZiAoX25lZWRUb0luZmVyUmV0dXJuVHlwZSkgewogICAgICB2YXIgdW53cmFwcGVkVHlwZSA9IHR5cGU7CiAgICAgIGlmIChpc1lpZWxkU3RhcikgewogICAgICAgIHVud3JhcHBlZFR5cGUgPSBpbmZlcnJlci5nZXREZXJpdmVkVHlwZUFyZ3VtZW50T2YoCiAgICAgICAgICAgICAgICB0eXBlLAogICAgICAgICAgICAgICAgaXNBc3luYwogICAgICAgICAgICAgICAgICAgID8gaW5mZXJyZXIuY29yZVR5cGVzLnN0cmVhbUNsYXNzCiAgICAgICAgICAgICAgICAgICAgOiBpbmZlcnJlci5jb3JlVHlwZXMuaXRlcmFibGVDbGFzcykgPz8KICAgICAgICAgICAgdHlwZTsKICAgICAgfQogICAgICBpZiAoX2luZmVycmVkVW53cmFwcGVkUmV0dXJuT3JZaWVsZFR5cGUgPT0gbnVsbCkgewogICAgICAgIF9pbmZlcnJlZFVud3JhcHBlZFJldHVybk9yWWllbGRUeXBlID0gdW53cmFwcGVkVHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfaW5mZXJyZWRVbndyYXBwZWRSZXR1cm5PcllpZWxkVHlwZSA9IGluZmVycmVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgICAuZ2V0U3RhbmRhcmRVcHBlckJvdW5kKAogICAgICAgICAgICAgICAgX2luZmVycmVkVW53cmFwcGVkUmV0dXJuT3JZaWVsZFR5cGUsIHVud3JhcHBlZFR5cGUpOwogICAgICB9CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBpbmZlclJldHVyblR5cGUoVHlwZUluZmVycmVySW1wbCBpbmZlcnJlcikgewogICAgYXNzZXJ0KF9uZWVkVG9JbmZlclJldHVyblR5cGUpOwogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlID0KICAgICAgICBpbmZlcnJlci5pbmZlclJldHVyblR5cGUoX2luZmVycmVkVW53cmFwcGVkUmV0dXJuT3JZaWVsZFR5cGUpOwogICAgaWYgKCFpbmZlcnJlci50eXBlU2NoZW1hRW52aXJvbm1lbnQKICAgICAgICAuaXNTdWJ0eXBlT2YoaW5mZXJyZWRUeXBlLCByZXR1cm5PcllpZWxkQ29udGV4dCkpIHsKICAgICAgLy8gSWYgdGhlIGluZmVycmVkIHJldHVybiB0eXBlIGlzbid0IGEgc3VidHlwZSBvZiB0aGUgY29udGV4dCwgd2UgdXNlIHRoZQogICAgICAvLyBjb250ZXh0LgogICAgICBpbmZlcnJlZFR5cGUgPSBncmVhdGVzdENsb3N1cmUoaW5mZXJyZXIuY29yZVR5cGVzLCByZXR1cm5PcllpZWxkQ29udGV4dCk7CiAgICB9CgogICAgaW5mZXJyZWRUeXBlID0gX3dyYXBBc3luY09yR2VuZXJhdG9yKGluZmVycmVyLCBpbmZlcnJlZFR5cGUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXR1cm5TdGF0ZW1lbnRzLmxlbmd0aDsgKytpKSB7CiAgICAgIGNoZWNrVmFsaWRSZXR1cm4oaW5mZXJyZXIsIGluZmVycmVkVHlwZSwgcmV0dXJuU3RhdGVtZW50c1tpXSwKICAgICAgICAgIHJldHVybkV4cHJlc3Npb25UeXBlc1tpXSk7CiAgICB9CgogICAgcmV0dXJuIGluZmVycmVkVHlwZTsKICB9CgogIERhcnRUeXBlIF93cmFwQXN5bmNPckdlbmVyYXRvcihUeXBlSW5mZXJyZXJJbXBsIGluZmVycmVyLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAoaXNHZW5lcmF0b3IpIHsKICAgICAgaWYgKGlzQXN5bmMpIHsKICAgICAgICByZXR1cm4gaW5mZXJyZXIud3JhcFR5cGUodHlwZSwgaW5mZXJyZXIuY29yZVR5cGVzLnN0cmVhbUNsYXNzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gaW5mZXJyZXIud3JhcFR5cGUodHlwZSwgaW5mZXJyZXIuY29yZVR5cGVzLml0ZXJhYmxlQ2xhc3MpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzQXN5bmMpIHsKICAgICAgcmV0dXJuIGluZmVycmVyLndyYXBGdXR1cmVUeXBlKHR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHR5cGU7CiAgICB9CiAgfQp9CgovLy8gRW51bSBkZW5vdGluZyB0aGUga2luZHMgb2YgY29udHJhdmFyaWFuY2UgY2hlY2sgdGhhdCBtaWdodCBuZWVkIHRvIGJlCi8vLyBpbnNlcnRlZCBmb3IgYSBtZXRob2QgY2FsbC4KZW51bSBNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZCB7CiAgLy8vIE5vIGNvbnRyYXZhcmlhbmNlIGNoZWNrIGlzIG5lZWRlZC4KICBub25lLAoKICAvLy8gVGhlIHJldHVybiB2YWx1ZSBmcm9tIHRoZSBtZXRob2QgY2FsbCBuZWVkcyB0byBiZSBjaGVja2VkLgogIGNoZWNrTWV0aG9kUmV0dXJuLAoKICAvLy8gVGhlIG1ldGhvZCBjYWxsIG5lZWRzIHRvIGJlIGRlc3VnYXJlZCBpbnRvIGEgZ2V0dGVyIGNhbGwsIGZvbGxvd2VkIGJ5IGFuCiAgLy8vICJhcyIgY2hlY2ssIGZvbGxvd2VkIGJ5IGFuIGludm9jYXRpb24gb2YgdGhlIHJlc3VsdGluZyBmdW5jdGlvbiBvYmplY3QuCiAgY2hlY2tHZXR0ZXJSZXR1cm4sCn0KCi8vLyBLZWVwcyB0cmFjayBvZiB0aGUgbG9jYWwgc3RhdGUgZm9yIHRoZSB0eXBlIGluZmVyZW5jZSB0aGF0IG9jY3VycyBkdXJpbmcKLy8vIGNvbXBpbGF0aW9uIG9mIGEgc2luZ2xlIG1ldGhvZCBib2R5IG9yIHRvcCBsZXZlbCBpbml0aWFsaXplci4KLy8vCi8vLyBUaGlzIGNsYXNzIGRlc2NyaWJlcyB0aGUgaW50ZXJmYWNlIGZvciB1c2UgYnkgY2xpZW50cyBvZiB0eXBlIGluZmVyZW5jZQovLy8gKGUuZy4gQm9keUJ1aWxkZXIpLiAgRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBkZXJpdmUgZnJvbSBbVHlwZUluZmVycmVySW1wbF0uCmFic3RyYWN0IGNsYXNzIFR5cGVJbmZlcnJlciB7CiAgZmluYWwgQ29yZVR5cGVzIGNvcmVUeXBlczsKCiAgVHlwZUluZmVycmVyLnByaXZhdGUodGhpcy5jb3JlVHlwZXMpOwoKICBmYWN0b3J5IFR5cGVJbmZlcnJlcigKICAgICAgU2hhZG93VHlwZUluZmVyZW5jZUVuZ2luZSBlbmdpbmUsCiAgICAgIFVyaSB1cmksCiAgICAgIGJvb2wgdG9wTGV2ZWwsCiAgICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUsCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpID0gU2hhZG93VHlwZUluZmVycmVyLnByaXZhdGU7CgogIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGdldCBsaWJyYXJ5OwoKICAvLy8gR2V0cyB0aGUgW1R5cGVQcm9tb3Rlcl0gdGhhdCBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIHR5cGUgcHJvbW90aW9uIHdpdGhpbgogIC8vLyB0aGlzIG1ldGhvZCBib2R5IG9yIGluaXRpYWxpemVyLgogIFR5cGVQcm9tb3RlciBnZXQgdHlwZVByb21vdGVyOwoKICAvLy8gR2V0cyB0aGUgW1R5cGVTY2hlbWFFbnZpcm9ubWVudF0gYmVpbmcgdXNlZCBmb3IgdHlwZSBpbmZlcmVuY2UuCiAgVHlwZVNjaGVtYUVudmlyb25tZW50IGdldCB0eXBlU2NoZW1hRW52aXJvbm1lbnQ7CgogIC8vLyBUaGUgVVJJIG9mIHRoZSBjb2RlIGZvciB3aGljaCB0eXBlIGluZmVyZW5jZSBpcyBjdXJyZW50bHkgYmVpbmcKICAvLy8gcGVyZm9ybWVkLS10aGlzIGlzIHVzZWQgZm9yIHRlc3RpbmcuCiAgVXJpIGdldCB1cmk7CgogIC8vLyBQZXJmb3JtcyBmdWxsIHR5cGUgaW5mZXJlbmNlIG9uIHRoZSBnaXZlbiBmaWVsZCBpbml0aWFsaXplci4KICB2b2lkIGluZmVyRmllbGRJbml0aWFsaXplcihJbmZlcmVuY2VIZWxwZXIgaGVscGVyLCBEYXJ0VHlwZSBkZWNsYXJlZFR5cGUsCiAgICAgIGtlcm5lbC5FeHByZXNzaW9uIGluaXRpYWxpemVyKTsKCiAgLy8vIFBlcmZvcm1zIHR5cGUgaW5mZXJlbmNlIG9uIHRoZSBnaXZlbiBmdW5jdGlvbiBib2R5LgogIHZvaWQgaW5mZXJGdW5jdGlvbkJvZHkoSW5mZXJlbmNlSGVscGVyIGhlbHBlciwgRGFydFR5cGUgcmV0dXJuVHlwZSwKICAgICAgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIsIFN0YXRlbWVudCBib2R5KTsKCiAgLy8vIFBlcmZvcm1zIHR5cGUgaW5mZXJlbmNlIG9uIHRoZSBnaXZlbiBjb25zdHJ1Y3RvciBpbml0aWFsaXplci4KICB2b2lkIGluZmVySW5pdGlhbGl6ZXIoSW5mZXJlbmNlSGVscGVyIGhlbHBlciwga2VybmVsLkluaXRpYWxpemVyIGluaXRpYWxpemVyKTsKCiAgLy8vIFBlcmZvcm1zIHR5cGUgaW5mZXJlbmNlIG9uIHRoZSBnaXZlbiBtZXRhZGF0YSBhbm5vdGF0aW9ucy4KICB2b2lkIGluZmVyTWV0YWRhdGEoCiAgICAgIEluZmVyZW5jZUhlbHBlciBoZWxwZXIsIExpc3Q8a2VybmVsLkV4cHJlc3Npb24+IGFubm90YXRpb25zKTsKCiAgLy8vIFBlcmZvcm1zIHR5cGUgaW5mZXJlbmNlIG9uIHRoZSBnaXZlbiBtZXRhZGF0YSBhbm5vdGF0aW9ucyBrZWVwaW5nIHRoZQogIC8vLyBleGlzdGluZyBoZWxwZXIgaWYgcG9zc2libGUuCiAgdm9pZCBpbmZlck1ldGFkYXRhS2VlcGluZ0hlbHBlcihMaXN0PGtlcm5lbC5FeHByZXNzaW9uPiBhbm5vdGF0aW9ucyk7CgogIC8vLyBQZXJmb3JtcyB0eXBlIGluZmVyZW5jZSBvbiB0aGUgZ2l2ZW4gZnVuY3Rpb24gcGFyYW1ldGVyIGluaXRpYWxpemVyCiAgLy8vIGV4cHJlc3Npb24uCiAgdm9pZCBpbmZlclBhcmFtZXRlckluaXRpYWxpemVyKEluZmVyZW5jZUhlbHBlciBoZWxwZXIsCiAgICAgIGtlcm5lbC5FeHByZXNzaW9uIGluaXRpYWxpemVyLCBEYXJ0VHlwZSBkZWNsYXJlZFR5cGUpOwp9CgovLy8gRGVyaXZlZCBjbGFzcyBjb250YWluaW5nIGdlbmVyaWMgaW1wbGVtZW50YXRpb25zIG9mIFtUeXBlSW5mZXJyZXJdLgovLy8KLy8vIFRoaXMgY2xhc3MgY29udGFpbnMgYXMgbXVjaCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdHlwZSBpbmZlcmVuY2UgYXMKLy8vIHBvc3NpYmxlIHdpdGhvdXQga25vd2luZyB0aGUgaWRlbnRpdHkgb2YgdGhlIHR5cGUgcGFyYW1ldGVycy4gIEl0IGRlZmVycyB0bwovLy8gYWJzdHJhY3QgbWV0aG9kcyBmb3IgZXZlcnl0aGluZyBlbHNlLgphYnN0cmFjdCBjbGFzcyBUeXBlSW5mZXJyZXJJbXBsIGV4dGVuZHMgVHlwZUluZmVycmVyIHsKICAvLy8gTWFya2VyIG9iamVjdCB0byBpbmRpY2F0ZSB0aGF0IGEgZnVuY3Rpb24gdGFrZXMgYW4gdW5rbm93biBudW1iZXIKICAvLy8gb2YgYXJndW1lbnRzLgogIHN0YXRpYyBmaW5hbCBGdW5jdGlvblR5cGUgdW5rbm93bkZ1bmN0aW9uID0KICAgICAgbmV3IEZ1bmN0aW9uVHlwZShjb25zdCBbXSwgY29uc3QgRHluYW1pY1R5cGUoKSk7CgogIGZpbmFsIFR5cGVJbmZlcmVuY2VFbmdpbmUgZW5naW5lOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgdXJpOwoKICAvLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGNvbnN0cnVjdCB3ZSBhcmUgY3VycmVudGx5IHBlcmZvcm1pbmcgaW5mZXJlbmNlIGZvcgogIC8vLyBpcyBvdXRzaWRlIG9mIGEgbWV0aG9kIGJvZHksIGFuZCBoZW5jZSB0b3AgbGV2ZWwgdHlwZSBpbmZlcmVuY2UgcnVsZXMKICAvLy8gc2hvdWxkIGFwcGx5LgogIGZpbmFsIGJvb2wgaXNUb3BMZXZlbDsKCiAgZmluYWwgQ2xhc3NIaWVyYXJjaHkgY2xhc3NIaWVyYXJjaHk7CgogIGZpbmFsIEluc3RydW1lbnRhdGlvbiBpbnN0cnVtZW50YXRpb247CgogIGZpbmFsIFR5cGVTY2hlbWFFbnZpcm9ubWVudCB0eXBlU2NoZW1hRW52aXJvbm1lbnQ7CgogIGZpbmFsIEludGVyZmFjZVR5cGUgdGhpc1R5cGU7CgogIEBvdmVycmlkZQogIGZpbmFsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnk7CgogIGZpbmFsIE1hcDxUcmVlTm9kZSwgRGFydFR5cGU+IGluZmVycmVkVHlwZXNNYXAgPSA8VHJlZU5vZGUsIERhcnRUeXBlPnt9OwoKICBJbmZlcmVuY2VIZWxwZXIgaGVscGVyOwoKICAvLy8gQ29udGV4dCBpbmZvcm1hdGlvbiBmb3IgdGhlIGN1cnJlbnQgY2xvc3VyZSwgb3IgYG51bGxgIGlmIHdlIGFyZSBub3QKICAvLy8gaW5zaWRlIGEgY2xvc3VyZS4KICBDbG9zdXJlQ29udGV4dCBjbG9zdXJlQ29udGV4dDsKCiAgLy8vIFRoZSBbU3Vic3RpdHV0aW9uXSBpbmZlcnJlZCBieSB0aGUgbGFzdCBbaW5mZXJJbnZvY2F0aW9uXSwgb3IgYG51bGxgIGlmCiAgLy8vIHRoZSBsYXN0IGludm9jYXRpb24gZGlkbid0IHJlcXVpcmUgYW55IGluZmVyZW5jZS4KICBTdWJzdGl0dXRpb24gbGFzdEluZmVycmVkU3Vic3RpdHV0aW9uOwoKICAvLy8gVGhlIFtGdW5jdGlvblR5cGVdIG9mIHRoZSBjYWxsZWUgaW4gdGhlIGxhc3QgW2luZmVySW52b2NhdGlvbl0sIG9yIGBudWxsYAogIC8vLyBpZiB0aGUgbGFzdCBpbnZvY2F0aW9uIGRpZG4ndCByZXF1aXJlIGFueSBpbmZlcmVuY2UuCiAgRnVuY3Rpb25UeXBlIGxhc3RDYWxsZWVUeXBlOwoKICBUeXBlSW5mZXJyZXJJbXBsLnByaXZhdGUoCiAgICAgIHRoaXMuZW5naW5lLCB0aGlzLnVyaSwgYm9vbCB0b3BMZXZlbCwgdGhpcy50aGlzVHlwZSwgdGhpcy5saWJyYXJ5KQogICAgICA6IGFzc2VydCgodG9wTGV2ZWwgJiYgbGlicmFyeSA9PSBudWxsKSB8fCAoIXRvcExldmVsICYmIGxpYnJhcnkgIT0gbnVsbCkpLAogICAgICAgIGNsYXNzSGllcmFyY2h5ID0gZW5naW5lLmNsYXNzSGllcmFyY2h5LAogICAgICAgIGluc3RydW1lbnRhdGlvbiA9IHRvcExldmVsID8gbnVsbCA6IGVuZ2luZS5pbnN0cnVtZW50YXRpb24sCiAgICAgICAgdHlwZVNjaGVtYUVudmlyb25tZW50ID0gZW5naW5lLnR5cGVTY2hlbWFFbnZpcm9ubWVudCwKICAgICAgICBpc1RvcExldmVsID0gdG9wTGV2ZWwsCiAgICAgICAgc3VwZXIucHJpdmF0ZShlbmdpbmUuY29yZVR5cGVzKTsKCiAgRGFydFR5cGUgc3RvcmVJbmZlcnJlZFR5cGUoVHJlZU5vZGUgbm9kZSwgRGFydFR5cGUgdHlwZSkgewogICAgaWYgKG5vZGUgaXMgRXhwcmVzc2lvbkp1ZGdtZW50KSB7CiAgICAgIHJldHVybiBub2RlLmluZmVycmVkVHlwZSA9IHR5cGU7CiAgICB9IGVsc2UgewogICAgICBpZiAoaW5mZXJyZWRUeXBlc01hcC5jb250YWluc0tleShub2RlKSkgewogICAgICAgIGludGVybmFsUHJvYmxlbSgKICAgICAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdG9yaW5nTXVsdGlwbGVJbmZlcnJlZFR5cGVzLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBpbmZlcnJlZFR5cGVzTWFwW25vZGVdLCAiJHtub2RlLnJ1bnRpbWVUeXBlfSIpLAogICAgICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgICAgIHVyaSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGluZmVycmVkVHlwZXNNYXBbbm9kZV0gPSB0eXBlOwogICAgfQogIH0KCiAgRGFydFR5cGUgcmVhZEluZmVycmVkVHlwZShUcmVlTm9kZSBub2RlKSB7CiAgICBpZiAoIWluZmVycmVkVHlwZXNNYXAuY29udGFpbnNLZXkobm9kZSkgJiYgIWlzVG9wTGV2ZWwpIHsKICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Ob0luZmVycmVkVHlwZVN0b3JlZAogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKCIke25vZGUucnVudGltZVR5cGV9IiksCiAgICAgICAgICBub2RlLmZpbGVPZmZzZXQsCiAgICAgICAgICB1cmkpOwogICAgfQogICAgcmV0dXJuIGluZmVycmVkVHlwZXNNYXBbbm9kZV07CiAgfQoKICAvLy8gR2V0cyB0aGUgdHlwZSBwcm9tb3RlciB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHByb21vdGUgdHlwZXMgZHVyaW5nCiAgLy8vIGluZmVyZW5jZS4KICBUeXBlUHJvbW90ZXIgZ2V0IHR5cGVQcm9tb3RlcjsKCiAgYm9vbCBpc0RvdWJsZUNvbnRleHQoRGFydFR5cGUgdHlwZUNvbnRleHQpIHsKICAgIC8vIEEgY29udGV4dCBpcyBhIGRvdWJsZSBjb250ZXh0IGlmIGRvdWJsZSBpcyBhc3NpZ25hYmxlIHRvIGl0IGJ1dCBpbnQgaXMKICAgIC8vIG5vdC4gIFRoYXQgaXMgdGhlIHR5cGUgY29udGV4dCBpcyBhIGRvdWJsZSBjb250ZXh0IGlmIGl0IGlzOgogICAgLy8gICAqIGRvdWJsZQogICAgLy8gICAqIEZ1dHVyZU9yPFQ+IHdoZXJlIFQgaXMgYSBkb3VibGUgY29udGV4dAogICAgLy8KICAgIC8vIFdlIGNoZWNrIGRpcmVjdGx5LCByYXRoZXIgdGhhbiB1c2luZyBpc0Fzc2lnbmFibGUgYmVjYXVzZSBpdCdzIHNpbXBsZXIuCiAgICB3aGlsZSAodHlwZUNvbnRleHQgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIHR5cGVDb250ZXh0LmNsYXNzTm9kZSA9PSBjb3JlVHlwZXMuZnV0dXJlT3JDbGFzcyAmJgogICAgICAgIHR5cGVDb250ZXh0LnR5cGVBcmd1bWVudHMuaXNOb3RFbXB0eSkgewogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSB0eXBlQ29udGV4dDsKICAgICAgdHlwZUNvbnRleHQgPSB0eXBlLnR5cGVBcmd1bWVudHMuZmlyc3Q7CiAgICB9CiAgICByZXR1cm4gdHlwZUNvbnRleHQgPT0gY29yZVR5cGVzLmRvdWJsZUNsYXNzLnJhd1R5cGU7CiAgfQoKICBib29sIGlzQXNzaWduYWJsZShEYXJ0VHlwZSBleHBlY3RlZFR5cGUsIERhcnRUeXBlIGFjdHVhbFR5cGUpIHsKICAgIHJldHVybiB0eXBlU2NoZW1hRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoZXhwZWN0ZWRUeXBlLCBhY3R1YWxUeXBlKSB8fAogICAgICAgIHR5cGVTY2hlbWFFbnZpcm9ubWVudC5pc1N1YnR5cGVPZihhY3R1YWxUeXBlLCBleHBlY3RlZFR5cGUpOwogIH0KCiAgLy8vIENoZWNrcyB3aGV0aGVyIFthY3R1YWxUeXBlXSBjYW4gYmUgYXNzaWduZWQgdG8gdGhlIGdyZWF0ZXN0IGNsb3N1cmUgb2YKICAvLy8gW2V4cGVjdGVkVHlwZV0sIGFuZCBpbnNlcnRzIGFuIGltcGxpY2l0IGRvd25jYXN0IGlmIGFwcHJvcHJpYXRlLgogIEV4cHJlc3Npb24gZW5zdXJlQXNzaWduYWJsZShEYXJ0VHlwZSBleHBlY3RlZFR5cGUsIERhcnRUeXBlIGFjdHVhbFR5cGUsCiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgaW50IGZpbGVPZmZzZXQsCiAgICAgIHtib29sIGlzUmV0dXJuRnJvbUFzeW5jOiBmYWxzZSwKICAgICAgYm9vbCBpc1ZvaWRBbGxvd2VkOiBmYWxzZSwKICAgICAgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihEYXJ0VHlwZSwgRGFydFR5cGUpPiB0ZW1wbGF0ZX0pIHsKICAgIGFzc2VydChleHBlY3RlZFR5cGUgIT0gbnVsbCk7CiAgICBleHBlY3RlZFR5cGUgPSBncmVhdGVzdENsb3N1cmUoY29yZVR5cGVzLCBleHBlY3RlZFR5cGUpOwoKICAgIERhcnRUeXBlIGluaXRpYWxFeHBlY3RlZFR5cGUgPSBleHBlY3RlZFR5cGU7CiAgICBpZiAoaXNSZXR1cm5Gcm9tQXN5bmMgJiYgIWlzQXNzaWduYWJsZShleHBlY3RlZFR5cGUsIGFjdHVhbFR5cGUpKSB7CiAgICAgIC8vIElmIHRoZSBib2R5IG9mIHRoZSBmdW5jdGlvbiBpcyBhc3luYywgdGhlIGV4cGVjdGVkIHJldHVybiB0eXBlIGhhcyB0aGUKICAgICAgLy8gc2hhcGUgRnV0dXJlT3I8VD4uICBXZSBjaGVjayBib3RoIGJyYW5jaGVzIGZvciBGdXR1cmVPciBoZXJlOiBib3RoIFQKICAgICAgLy8gYW5kIEZ1dHVyZTxUPi4KICAgICAgRGFydFR5cGUgdW5mdXR1cmVkRXhwZWN0ZWRUeXBlID0KICAgICAgICAgIHR5cGVTY2hlbWFFbnZpcm9ubWVudC51bmZ1dHVyZVR5cGUoZXhwZWN0ZWRUeXBlKTsKICAgICAgRGFydFR5cGUgZnV0dXJlZEV4cGVjdGVkVHlwZSA9IHdyYXBGdXR1cmVUeXBlKHVuZnV0dXJlZEV4cGVjdGVkVHlwZSk7CiAgICAgIGlmIChpc0Fzc2lnbmFibGUodW5mdXR1cmVkRXhwZWN0ZWRUeXBlLCBhY3R1YWxUeXBlKSkgewogICAgICAgIGV4cGVjdGVkVHlwZSA9IHVuZnV0dXJlZEV4cGVjdGVkVHlwZTsKICAgICAgfSBlbHNlIGlmIChpc0Fzc2lnbmFibGUoZnV0dXJlZEV4cGVjdGVkVHlwZSwgYWN0dWFsVHlwZSkpIHsKICAgICAgICBleHBlY3RlZFR5cGUgPSBmdXR1cmVkRXhwZWN0ZWRUeXBlOwogICAgICB9CiAgICB9CgogICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBpbnNlcnQgYXNzaWduYWJpbGl0eSBjaGVja3Mgd2hlbiBkb2luZyB0b3AgbGV2ZWwgdHlwZQogICAgLy8gaW5mZXJlbmNlIHNpbmNlIHRvcCBsZXZlbCB0eXBlIGluZmVyZW5jZSBvbmx5IGNhcmVzIGFib3V0IHRoZSB0eXBlIHRoYXQKICAgIC8vIGlzIGluZmVycmVkICh0aGUga2VybmVsIGNvZGUgaXMgZGlzY2FyZGVkKS4KICAgIGlmIChpc1RvcExldmVsKSByZXR1cm4gbnVsbDsKCiAgICAvLyBJZiBhbiBpbnRlcmZhY2UgdHlwZSBpcyBiZWluZyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHR5cGUsIHNlZSBpZiB3ZQogICAgLy8gc2hvdWxkIHRlYXIgb2ZmIGAuY2FsbGAuCiAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IHVzZSByZXNvbHZlVHlwZVBhcmFtZXRlci4gIFNlZSBmaW5kSW50ZXJmYWNlTWVtYmVyLgogICAgaWYgKGFjdHVhbFR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICB2YXIgY2xhc3NOb2RlID0gKGFjdHVhbFR5cGUgYXMgSW50ZXJmYWNlVHlwZSkuY2xhc3NOb2RlOwogICAgICB2YXIgY2FsbE1lbWJlciA9IGNsYXNzSGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcihjbGFzc05vZGUsIGNhbGxOYW1lKTsKICAgICAgaWYgKGNhbGxNZW1iZXIgaXMgUHJvY2VkdXJlICYmIGNhbGxNZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLk1ldGhvZCkgewogICAgICAgIGlmIChfc2hvdWxkVGVhck9mZkNhbGwoZXhwZWN0ZWRUeXBlLCBhY3R1YWxUeXBlKSkgewogICAgICAgICAgLy8gUmVwbGFjZSBleHByZXNzaW9uIHdpdGg6CiAgICAgICAgICAvLyBgbGV0IHQgPSBleHByZXNzaW9uIGluIHQgPT0gbnVsbCA/IG51bGwgOiB0LmNhbGxgCiAgICAgICAgICB2YXIgcGFyZW50ID0gZXhwcmVzc2lvbi5wYXJlbnQ7CiAgICAgICAgICB2YXIgdCA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKGV4cHJlc3Npb24sIHR5cGU6IGFjdHVhbFR5cGUpCiAgICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgICAgICB2YXIgbnVsbENoZWNrID0gYnVpbGRJc051bGwobmV3IFZhcmlhYmxlR2V0KHQpLCBmaWxlT2Zmc2V0LCBoZWxwZXIpOwogICAgICAgICAgdmFyIHRlYXJPZmYgPQogICAgICAgICAgICAgIG5ldyBQcm9wZXJ0eUdldChuZXcgVmFyaWFibGVHZXQodCksIGNhbGxOYW1lLCBjYWxsTWVtYmVyKQogICAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gZmlsZU9mZnNldDsKICAgICAgICAgIGFjdHVhbFR5cGUgPSBnZXRDYWxsZWVUeXBlKGNhbGxNZW1iZXIsIGFjdHVhbFR5cGUpOwogICAgICAgICAgdmFyIGNvbmRpdGlvbmFsID0gbmV3IENvbmRpdGlvbmFsRXhwcmVzc2lvbihudWxsQ2hlY2ssCiAgICAgICAgICAgICAgbmV3IE51bGxMaXRlcmFsKCkuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0LCB0ZWFyT2ZmLCBhY3R1YWxUeXBlKTsKICAgICAgICAgIHZhciBsZXQgPSBuZXcgTGV0KHQsIGNvbmRpdGlvbmFsKS4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgICAgICBwYXJlbnQ/LnJlcGxhY2VDaGlsZChleHByZXNzaW9uLCBsZXQpOwogICAgICAgICAgZXhwcmVzc2lvbiA9IGxldDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBpZiAoYWN0dWFsVHlwZSBpcyBWb2lkVHlwZSAmJiAhaXNWb2lkQWxsb3dlZCkgewogICAgICAvLyBFcnJvcjogbm90IGFzc2lnbmFibGUuICBQZXJmb3JtIGVycm9yIHJlY292ZXJ5LgogICAgICBUcmVlTm9kZSBwYXJlbnQgPSBleHByZXNzaW9uLnBhcmVudDsKICAgICAgRXhwcmVzc2lvbiBlcnJvck5vZGUgPQogICAgICAgICAgaGVscGVyLndyYXBJblByb2JsZW0oZXhwcmVzc2lvbiwgbWVzc2FnZVZvaWRFeHByZXNzaW9uLCBub0xlbmd0aCk7CiAgICAgIHBhcmVudD8ucmVwbGFjZUNoaWxkKGV4cHJlc3Npb24sIGVycm9yTm9kZSk7CiAgICAgIHJldHVybiBlcnJvck5vZGU7CiAgICB9CgogICAgaWYgKGV4cGVjdGVkVHlwZSA9PSBudWxsIHx8CiAgICAgICAgdHlwZVNjaGVtYUVudmlyb25tZW50LmlzU3VidHlwZU9mKGFjdHVhbFR5cGUsIGV4cGVjdGVkVHlwZSkpIHsKICAgICAgLy8gVHlwZXMgYXJlIGNvbXBhdGlibGUuCiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGlmICghdHlwZVNjaGVtYUVudmlyb25tZW50LmlzU3VidHlwZU9mKGV4cGVjdGVkVHlwZSwgYWN0dWFsVHlwZSkpIHsKICAgICAgLy8gRXJyb3I6IG5vdCBhc3NpZ25hYmxlLiAgUGVyZm9ybSBlcnJvciByZWNvdmVyeS4KICAgICAgdmFyIHBhcmVudCA9IGV4cHJlc3Npb24ucGFyZW50OwogICAgICBFeHByZXNzaW9uIGVycm9yTm9kZSA9IG5ldyBBc0V4cHJlc3Npb24oCiAgICAgICAgICBleHByZXNzaW9uLAogICAgICAgICAgLy8gVE9ETyhhaGUpOiBUaGUgb3V0bGluZSBwaGFzZSBkb2Vzbid0IGNvcnJlY3RseSByZW1vdmUgaW52YWxpZAogICAgICAgICAgLy8gdXNlcyBvZiB0eXBlIHZhcmlhYmxlcywgZm9yIGV4YW1wbGUsIG9uIHN0YXRpYyBtZW1iZXJzLiBPbmNlCiAgICAgICAgICAvLyB0aGF0IGhhcyBiZWVuIGZpeGVkLCB3ZSBzaG91bGQgYWx3YXlzIGJlIGFibGUgdG8gdXNlCiAgICAgICAgICAvLyBbZXhwZWN0ZWRUeXBlXSBkaXJlY3RseSBoZXJlLgogICAgICAgICAgaGFzQW55VHlwZVZhcmlhYmxlcyhleHBlY3RlZFR5cGUpID8gY29uc3QgQm90dG9tVHlwZSgpIDogZXhwZWN0ZWRUeXBlKQogICAgICAgIC4uaXNUeXBlRXJyb3IgPSB0cnVlCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gZXhwcmVzc2lvbi5maWxlT2Zmc2V0OwogICAgICBpZiAoZXhwZWN0ZWRUeXBlIGlzISBJbnZhbGlkVHlwZSAmJiBhY3R1YWxUeXBlIGlzISBJbnZhbGlkVHlwZSkgewogICAgICAgIGVycm9yTm9kZSA9IGhlbHBlci53cmFwSW5Qcm9ibGVtKAogICAgICAgICAgICBlcnJvck5vZGUsCiAgICAgICAgICAgICh0ZW1wbGF0ZSA/PyB0ZW1wbGF0ZUludmFsaWRBc3NpZ25tZW50KQogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoYWN0dWFsVHlwZSwgZXhwZWN0ZWRUeXBlKSwKICAgICAgICAgICAgbm9MZW5ndGgpOwogICAgICB9CiAgICAgIHBhcmVudD8ucmVwbGFjZUNoaWxkKGV4cHJlc3Npb24sIGVycm9yTm9kZSk7CiAgICAgIHJldHVybiBlcnJvck5vZGU7CiAgICB9IGVsc2UgewogICAgICB2YXIgdGVtcGxhdGUgPSBfZ2V0UHJlY2lzZVR5cGVFcnJvclRlbXBsYXRlKGV4cHJlc3Npb24pOwogICAgICBpZiAodGVtcGxhdGUgIT0gbnVsbCkgewogICAgICAgIC8vIFRoZSB0eXBlIG9mIHRoZSBleHByZXNzaW9uIGlzIGtub3duIHByZWNpc2VseSwgc28gYW4gaW1wbGljaXQKICAgICAgICAvLyBkb3duY2FzdCBpcyBndWFyYW50ZWVkIHRvIGZhaWwuICBJbnNlcnQgYSBjb21waWxlLXRpbWUgZXJyb3IuCiAgICAgICAgdmFyIHBhcmVudCA9IGV4cHJlc3Npb24ucGFyZW50OwogICAgICAgIHZhciBlcnJvck5vZGUgPSBoZWxwZXIud3JhcEluUHJvYmxlbShleHByZXNzaW9uLAogICAgICAgICAgICB0ZW1wbGF0ZS53aXRoQXJndW1lbnRzKGFjdHVhbFR5cGUsIGV4cGVjdGVkVHlwZSksIG5vTGVuZ3RoKTsKICAgICAgICBwYXJlbnQ/LnJlcGxhY2VDaGlsZChleHByZXNzaW9uLCBlcnJvck5vZGUpOwogICAgICAgIHJldHVybiBlcnJvck5vZGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gSW5zZXJ0IGFuIGltcGxpY2l0IGRvd25jYXN0LgogICAgICAgIHZhciBwYXJlbnQgPSBleHByZXNzaW9uLnBhcmVudDsKICAgICAgICB2YXIgdHlwZUNoZWNrID0gbmV3IEFzRXhwcmVzc2lvbihleHByZXNzaW9uLCBpbml0aWFsRXhwZWN0ZWRUeXBlKQogICAgICAgICAgLi5pc1R5cGVFcnJvciA9IHRydWUKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgICAgcGFyZW50Py5yZXBsYWNlQ2hpbGQoZXhwcmVzc2lvbiwgdHlwZUNoZWNrKTsKICAgICAgICByZXR1cm4gdHlwZUNoZWNrOwogICAgICB9CiAgICB9CiAgfQoKICBib29sIGlzTnVsbChEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gdHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmIHR5cGUuY2xhc3NOb2RlID09IGNvcmVUeXBlcy5udWxsQ2xhc3M7CiAgfQoKICAvLy8gRmluZHMgYSBtZW1iZXIgb2YgW3JlY2VpdmVyVHlwZV0gY2FsbGVkIFtuYW1lXSwgYW5kIGlmIGl0IGlzIGZvdW5kLAogIC8vLyByZXBvcnRzIGl0IHRocm91Z2ggaW5zdHJ1bWVudGF0aW9uIHVzaW5nIFtmaWxlT2Zmc2V0XS4KICAvLy8KICAvLy8gRm9yIHRoZSBjYXNlIHdoZXJlIFtyZWNlaXZlclR5cGVdIGlzIGEgW0Z1bmN0aW9uVHlwZV0sIGFuZCB0aGUgbmFtZQogIC8vLyBpcyBgY2FsbGAsIHRoZSBzdHJpbmcgJ2NhbGwnIGlzIHJldHVybmVkIGFzIGEgc2VudGluZWwgb2JqZWN0LgogIC8vLwogIC8vLyBGb3IgdGhlIGNhc2Ugd2hlcmUgW3JlY2VpdmVyVHlwZV0gaXMgYGR5bmFtaWNgLCBhbmQgdGhlIG5hbWUgaXMgZGVjbGFyZWQKICAvLy8gaW4gT2JqZWN0LCB0aGUgbWVtYmVyIGZyb20gT2JqZWN0IGlzIHJldHVybmVkIHRob3VnaCB0aGUgY2FsbCBtYXkgbm90IGVuZAogIC8vLyB1cCB0YXJnZXRpbmcgaXQgaWYgdGhlIGFyZ3VtZW50cyBkbyBub3QgbWF0Y2ggKHRoZSBiYXNpYyBwcmluY2lwbGUgaXMgdGhhdAogIC8vLyB0aGUgT2JqZWN0IG1lbWJlciBpcyB1c2VkIGZvciBpbmZlcnJpbmcgdHlwZXMgb25seSBpZiBub1N1Y2hNZXRob2QgY2Fubm90CiAgLy8vIGJlIHRhcmdldGVkIGR1ZSB0bywgZS5nLiwgYW4gaW5jb3JyZWN0IGFyZ3VtZW50IGNvdW50KS4KICBPYmplY3QgZmluZEludGVyZmFjZU1lbWJlcihEYXJ0VHlwZSByZWNlaXZlclR5cGUsIE5hbWUgbmFtZSwgaW50IGZpbGVPZmZzZXQsCiAgICAgIHtUZW1wbGF0ZTxNZXNzYWdlIEZ1bmN0aW9uKFN0cmluZywgRGFydFR5cGUpPiBlcnJvclRlbXBsYXRlLAogICAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24sCiAgICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsCiAgICAgIGJvb2wgc2V0dGVyOiBmYWxzZSwKICAgICAgYm9vbCBpbnN0cnVtZW50ZWQ6IHRydWV9KSB7CiAgICBhc3NlcnQocmVjZWl2ZXJUeXBlICE9IG51bGwgJiYgaXNLbm93bihyZWNlaXZlclR5cGUpKTsKCiAgICByZWNlaXZlclR5cGUgPSByZXNvbHZlVHlwZVBhcmFtZXRlcihyZWNlaXZlclR5cGUpOwoKICAgIGlmIChyZWNlaXZlclR5cGUgaXMgRnVuY3Rpb25UeXBlICYmIG5hbWUubmFtZSA9PSAnY2FsbCcpIHsKICAgICAgcmV0dXJuICdjYWxsJzsKICAgIH0KCiAgICBDbGFzcyBjbGFzc05vZGUgPSByZWNlaXZlclR5cGUgaXMgSW50ZXJmYWNlVHlwZQogICAgICAgID8gcmVjZWl2ZXJUeXBlLmNsYXNzTm9kZQogICAgICAgIDogY29yZVR5cGVzLm9iamVjdENsYXNzOwogICAgTWVtYmVyIGludGVyZmFjZU1lbWJlciA9CiAgICAgICAgX2dldEludGVyZmFjZU1lbWJlcihjbGFzc05vZGUsIG5hbWUsIHNldHRlciwgZmlsZU9mZnNldCk7CiAgICBpZiAoaW5zdHJ1bWVudGVkICYmCiAgICAgICAgcmVjZWl2ZXJUeXBlICE9IGNvbnN0IER5bmFtaWNUeXBlKCkgJiYKICAgICAgICBpbnRlcmZhY2VNZW1iZXIgIT0gbnVsbCkgewogICAgICBpbnN0cnVtZW50YXRpb24/LnJlY29yZCh1cmksIGZpbGVPZmZzZXQsICd0YXJnZXQnLAogICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyKGludGVyZmFjZU1lbWJlcikpOwogICAgfQoKICAgIGlmICghaXNUb3BMZXZlbCAmJgogICAgICAgIGludGVyZmFjZU1lbWJlciA9PSBudWxsICYmCiAgICAgICAgcmVjZWl2ZXJUeXBlIGlzISBEeW5hbWljVHlwZSAmJgogICAgICAgIHJlY2VpdmVyVHlwZSBpcyEgSW52YWxpZFR5cGUgJiYKICAgICAgICAhKHJlY2VpdmVyVHlwZSA9PSBjb3JlVHlwZXMuZnVuY3Rpb25DbGFzcy5yYXdUeXBlICYmCiAgICAgICAgICAgIG5hbWUubmFtZSA9PSAnY2FsbCcpICYmCiAgICAgICAgZXJyb3JUZW1wbGF0ZSAhPSBudWxsKSB7CiAgICAgIGludCBsZW5ndGggPSBuYW1lLm5hbWUubGVuZ3RoOwogICAgICBpZiAoaWRlbnRpY2FsKG5hbWUubmFtZSwgY2FsbE5hbWUubmFtZSkgfHwKICAgICAgICAgIGlkZW50aWNhbChuYW1lLm5hbWUsIHVuYXJ5TWludXNOYW1lLm5hbWUpKSB7CiAgICAgICAgbGVuZ3RoID0gMTsKICAgICAgfQogICAgICBleHByZXNzaW9uLnBhcmVudC5yZXBsYWNlQ2hpbGQoCiAgICAgICAgICBleHByZXNzaW9uLAogICAgICAgICAgaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGhlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgICAgICAgZXJyb3JUZW1wbGF0ZS53aXRoQXJndW1lbnRzKG5hbWUubmFtZSwgcmVjZWl2ZXJUeXBlKSwKICAgICAgICAgICAgICBmaWxlT2Zmc2V0LAogICAgICAgICAgICAgIGxlbmd0aCkpKTsKICAgIH0KICAgIHJldHVybiBpbnRlcmZhY2VNZW1iZXI7CiAgfQoKICAvLy8gRmluZHMgYSBtZW1iZXIgb2YgW3JlY2VpdmVyVHlwZV0gY2FsbGVkIFtuYW1lXSBhbmQgcmVjb3JkcyBpdCBpbgogIC8vLyBbbWV0aG9kSW52b2NhdGlvbl0uCiAgT2JqZWN0IGZpbmRNZXRob2RJbnZvY2F0aW9uTWVtYmVyKAogICAgICBEYXJ0VHlwZSByZWNlaXZlclR5cGUsIEludm9jYXRpb25FeHByZXNzaW9uIG1ldGhvZEludm9jYXRpb24sCiAgICAgIHtib29sIGluc3RydW1lbnRlZDogdHJ1ZX0pIHsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogY291bGQgd2UgYWRkIGdldHRlcnMgdG8gSW52b2NhdGlvbkV4cHJlc3Npb24gdG8gbWFrZQogICAgLy8gdGhlc2UgaXMtY2hlY2tzIHVubmVjZXNzYXJ5PwogICAgaWYgKG1ldGhvZEludm9jYXRpb24gaXMgTWV0aG9kSW52b2NhdGlvbikgewogICAgICB2YXIgaW50ZXJmYWNlTWVtYmVyID0gZmluZEludGVyZmFjZU1lbWJlcigKICAgICAgICAgIHJlY2VpdmVyVHlwZSwgbWV0aG9kSW52b2NhdGlvbi5uYW1lLCBtZXRob2RJbnZvY2F0aW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICBlcnJvclRlbXBsYXRlOiB0ZW1wbGF0ZVVuZGVmaW5lZE1ldGhvZCwKICAgICAgICAgIGV4cHJlc3Npb246IG1ldGhvZEludm9jYXRpb24sCiAgICAgICAgICByZWNlaXZlcjogbWV0aG9kSW52b2NhdGlvbi5yZWNlaXZlciwKICAgICAgICAgIGluc3RydW1lbnRlZDogaW5zdHJ1bWVudGVkKTsKICAgICAgaWYgKHJlY2VpdmVyVHlwZSA9PSBjb25zdCBEeW5hbWljVHlwZSgpICYmIGludGVyZmFjZU1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgICB2YXIgYXJndW1lbnRzID0gbWV0aG9kSW52b2NhdGlvbi5hcmd1bWVudHM7CiAgICAgICAgdmFyIHNpZ25hdHVyZSA9IGludGVyZmFjZU1lbWJlci5mdW5jdGlvbjsKICAgICAgICBpZiAoYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoIDwgc2lnbmF0dXJlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQgfHwKICAgICAgICAgICAgYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoID4KICAgICAgICAgICAgICAgIHNpZ25hdHVyZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBmb3IgKHZhciBhcmd1bWVudCBpbiBhcmd1bWVudHMubmFtZWQpIHsKICAgICAgICAgIGlmICghc2lnbmF0dXJlLm5hbWVkUGFyYW1ldGVycwogICAgICAgICAgICAgIC5hbnkoKGRlY2xhcmF0aW9uKSA9PiBkZWNsYXJhdGlvbi5uYW1lID09IGFyZ3VtZW50Lm5hbWUpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaW5zdHJ1bWVudGVkICYmIGluc3RydW1lbnRhdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICBpbnN0cnVtZW50YXRpb24ucmVjb3JkKHVyaSwgbWV0aG9kSW52b2NhdGlvbi5maWxlT2Zmc2V0LCAndGFyZ2V0JywKICAgICAgICAgICAgICBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JNZW1iZXIoaW50ZXJmYWNlTWVtYmVyKSk7CiAgICAgICAgfQogICAgICAgIG1ldGhvZEludm9jYXRpb24uaW50ZXJmYWNlVGFyZ2V0ID0gaW50ZXJmYWNlTWVtYmVyOwogICAgICB9IGVsc2UgaWYgKGludGVyZmFjZU1lbWJlciBpcyBNZW1iZXIpIHsKICAgICAgICBtZXRob2RJbnZvY2F0aW9uLmludGVyZmFjZVRhcmdldCA9IGludGVyZmFjZU1lbWJlcjsKICAgICAgfQogICAgICByZXR1cm4gaW50ZXJmYWNlTWVtYmVyOwogICAgfSBlbHNlIGlmIChtZXRob2RJbnZvY2F0aW9uIGlzIFN1cGVyTWV0aG9kSW52b2NhdGlvbikgewogICAgICBhc3NlcnQocmVjZWl2ZXJUeXBlICE9IGNvbnN0IER5bmFtaWNUeXBlKCkpOwogICAgICB2YXIgaW50ZXJmYWNlTWVtYmVyID0gZmluZEludGVyZmFjZU1lbWJlcigKICAgICAgICAgIHJlY2VpdmVyVHlwZSwgbWV0aG9kSW52b2NhdGlvbi5uYW1lLCBtZXRob2RJbnZvY2F0aW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICBpbnN0cnVtZW50ZWQ6IGluc3RydW1lbnRlZCk7CiAgICAgIGlmIChpbnRlcmZhY2VNZW1iZXIgaXMgTWVtYmVyKSB7CiAgICAgICAgbWV0aG9kSW52b2NhdGlvbi5pbnRlcmZhY2VUYXJnZXQgPSBpbnRlcmZhY2VNZW1iZXI7CiAgICAgIH0KICAgICAgcmV0dXJuIGludGVyZmFjZU1lbWJlcjsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IHVuaGFuZGxlZCgiJHttZXRob2RJbnZvY2F0aW9uLnJ1bnRpbWVUeXBlfSIsCiAgICAgICAgICAiZmluZE1ldGhvZEludm9jYXRpb25NZW1iZXIiLCBtZXRob2RJbnZvY2F0aW9uLmZpbGVPZmZzZXQsIHVyaSk7CiAgICB9CiAgfQoKICAvLy8gRmluZHMgYSBtZW1iZXIgb2YgW3JlY2VpdmVyVHlwZV0gY2FsbGVkIFtuYW1lXSwgYW5kIGlmIGl0IGlzIGZvdW5kLAogIC8vLyByZXBvcnRzIGl0IHRocm91Z2ggaW5zdHJ1bWVudGF0aW9uIGFuZCByZWNvcmRzIGl0IGluIFtwcm9wZXJ0eUdldF0uCiAgT2JqZWN0IGZpbmRQcm9wZXJ0eUdldE1lbWJlcihEYXJ0VHlwZSByZWNlaXZlclR5cGUsIEV4cHJlc3Npb24gcHJvcGVydHlHZXQsCiAgICAgIHtib29sIGluc3RydW1lbnRlZDogdHJ1ZX0pIHsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogY291bGQgd2UgYWRkIGEgY29tbW9uIGJhc2UgY2xhc3MgdG8gUHJvcGVydHlHZXQgYW5kCiAgICAvLyBTdXBlclByb3BlcnR5R2V0IHRvIG1ha2UgdGhlc2UgaXMtY2hlY2tzIHVubmVjZXNzYXJ5PwogICAgaWYgKHByb3BlcnR5R2V0IGlzIFByb3BlcnR5R2V0KSB7CiAgICAgIHZhciBpbnRlcmZhY2VNZW1iZXIgPSBmaW5kSW50ZXJmYWNlTWVtYmVyKAogICAgICAgICAgcmVjZWl2ZXJUeXBlLCBwcm9wZXJ0eUdldC5uYW1lLCBwcm9wZXJ0eUdldC5maWxlT2Zmc2V0LAogICAgICAgICAgZXJyb3JUZW1wbGF0ZTogdGVtcGxhdGVVbmRlZmluZWRHZXR0ZXIsCiAgICAgICAgICBleHByZXNzaW9uOiBwcm9wZXJ0eUdldCwKICAgICAgICAgIHJlY2VpdmVyOiBwcm9wZXJ0eUdldC5yZWNlaXZlciwKICAgICAgICAgIGluc3RydW1lbnRlZDogaW5zdHJ1bWVudGVkKTsKICAgICAgaWYgKGludGVyZmFjZU1lbWJlciBpcyBNZW1iZXIpIHsKICAgICAgICBpZiAoaW5zdHJ1bWVudGVkICYmCiAgICAgICAgICAgIGluc3RydW1lbnRhdGlvbiAhPSBudWxsICYmCiAgICAgICAgICAgIHJlY2VpdmVyVHlwZSA9PSBjb25zdCBEeW5hbWljVHlwZSgpKSB7CiAgICAgICAgICBpbnN0cnVtZW50YXRpb24ucmVjb3JkKHVyaSwgcHJvcGVydHlHZXQuZmlsZU9mZnNldCwgJ3RhcmdldCcsCiAgICAgICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVyKGludGVyZmFjZU1lbWJlcikpOwogICAgICAgIH0KICAgICAgICBwcm9wZXJ0eUdldC5pbnRlcmZhY2VUYXJnZXQgPSBpbnRlcmZhY2VNZW1iZXI7CiAgICAgIH0KICAgICAgcmV0dXJuIGludGVyZmFjZU1lbWJlcjsKICAgIH0gZWxzZSBpZiAocHJvcGVydHlHZXQgaXMgU3VwZXJQcm9wZXJ0eUdldCkgewogICAgICBhc3NlcnQocmVjZWl2ZXJUeXBlICE9IGNvbnN0IER5bmFtaWNUeXBlKCkpOwogICAgICB2YXIgaW50ZXJmYWNlTWVtYmVyID0gZmluZEludGVyZmFjZU1lbWJlcigKICAgICAgICAgIHJlY2VpdmVyVHlwZSwgcHJvcGVydHlHZXQubmFtZSwgcHJvcGVydHlHZXQuZmlsZU9mZnNldCwKICAgICAgICAgIGluc3RydW1lbnRlZDogaW5zdHJ1bWVudGVkKTsKICAgICAgaWYgKGludGVyZmFjZU1lbWJlciBpcyBNZW1iZXIpIHsKICAgICAgICBwcm9wZXJ0eUdldC5pbnRlcmZhY2VUYXJnZXQgPSBpbnRlcmZhY2VNZW1iZXI7CiAgICAgIH0KICAgICAgcmV0dXJuIGludGVyZmFjZU1lbWJlcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB1bmhhbmRsZWQoIiR7cHJvcGVydHlHZXQucnVudGltZVR5cGV9IiwgImZpbmRQcm9wZXJ0eUdldE1lbWJlciIsCiAgICAgICAgICBwcm9wZXJ0eUdldC5maWxlT2Zmc2V0LCB1cmkpOwogICAgfQogIH0KCiAgLy8vIEZpbmRzIGEgbWVtYmVyIG9mIFtyZWNlaXZlclR5cGVdIGNhbGxlZCBbbmFtZV0sIGFuZCBpZiBpdCBpcyBmb3VuZCwKICAvLy8gcmVwb3J0cyBpdCB0aHJvdWdoIGluc3RydW1lbnRhdGlvbiBhbmQgcmVjb3JkcyBpdCBpbiBbcHJvcGVydHlTZXRdLgogIE9iamVjdCBmaW5kUHJvcGVydHlTZXRNZW1iZXIoRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBFeHByZXNzaW9uIHByb3BlcnR5U2V0LAogICAgICB7Ym9vbCBpbnN0cnVtZW50ZWQ6IHRydWV9KSB7CiAgICBpZiAocHJvcGVydHlTZXQgaXMgUHJvcGVydHlTZXQpIHsKICAgICAgdmFyIGludGVyZmFjZU1lbWJlciA9IGZpbmRJbnRlcmZhY2VNZW1iZXIoCiAgICAgICAgICByZWNlaXZlclR5cGUsIHByb3BlcnR5U2V0Lm5hbWUsIHByb3BlcnR5U2V0LmZpbGVPZmZzZXQsCiAgICAgICAgICBlcnJvclRlbXBsYXRlOiB0ZW1wbGF0ZVVuZGVmaW5lZFNldHRlciwKICAgICAgICAgIGV4cHJlc3Npb246IHByb3BlcnR5U2V0LAogICAgICAgICAgcmVjZWl2ZXI6IHByb3BlcnR5U2V0LnJlY2VpdmVyLAogICAgICAgICAgc2V0dGVyOiB0cnVlLAogICAgICAgICAgaW5zdHJ1bWVudGVkOiBpbnN0cnVtZW50ZWQpOwogICAgICBpZiAoaW50ZXJmYWNlTWVtYmVyIGlzIE1lbWJlcikgewogICAgICAgIGlmIChpbnN0cnVtZW50ZWQgJiYKICAgICAgICAgICAgaW5zdHJ1bWVudGF0aW9uICE9IG51bGwgJiYKICAgICAgICAgICAgcmVjZWl2ZXJUeXBlID09IGNvbnN0IER5bmFtaWNUeXBlKCkpIHsKICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5yZWNvcmQodXJpLCBwcm9wZXJ0eVNldC5maWxlT2Zmc2V0LCAndGFyZ2V0JywKICAgICAgICAgICAgICBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JNZW1iZXIoaW50ZXJmYWNlTWVtYmVyKSk7CiAgICAgICAgfQogICAgICAgIHByb3BlcnR5U2V0LmludGVyZmFjZVRhcmdldCA9IGludGVyZmFjZU1lbWJlcjsKICAgICAgfQogICAgICByZXR1cm4gaW50ZXJmYWNlTWVtYmVyOwogICAgfSBlbHNlIGlmIChwcm9wZXJ0eVNldCBpcyBTdXBlclByb3BlcnR5U2V0KSB7CiAgICAgIGFzc2VydChyZWNlaXZlclR5cGUgIT0gY29uc3QgRHluYW1pY1R5cGUoKSk7CiAgICAgIHZhciBpbnRlcmZhY2VNZW1iZXIgPSBmaW5kSW50ZXJmYWNlTWVtYmVyKAogICAgICAgICAgcmVjZWl2ZXJUeXBlLCBwcm9wZXJ0eVNldC5uYW1lLCBwcm9wZXJ0eVNldC5maWxlT2Zmc2V0LAogICAgICAgICAgc2V0dGVyOiB0cnVlLCBpbnN0cnVtZW50ZWQ6IGluc3RydW1lbnRlZCk7CiAgICAgIGlmIChpbnRlcmZhY2VNZW1iZXIgaXMgTWVtYmVyKSB7CiAgICAgICAgcHJvcGVydHlTZXQuaW50ZXJmYWNlVGFyZ2V0ID0gaW50ZXJmYWNlTWVtYmVyOwogICAgICB9CiAgICAgIHJldHVybiBpbnRlcmZhY2VNZW1iZXI7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyB1bmhhbmRsZWQoIiR7cHJvcGVydHlTZXQucnVudGltZVR5cGV9IiwgImZpbmRQcm9wZXJ0eVNldE1lbWJlciIsCiAgICAgICAgICBwcm9wZXJ0eVNldC5maWxlT2Zmc2V0LCB1cmkpOwogICAgfQogIH0KCiAgRnVuY3Rpb25UeXBlIGdldENhbGxlZUZ1bmN0aW9uVHlwZShEYXJ0VHlwZSBjYWxsZWVUeXBlLCBib29sIGZvbGxvd0NhbGwpIHsKICAgIGlmIChjYWxsZWVUeXBlIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICByZXR1cm4gY2FsbGVlVHlwZTsKICAgIH0gZWxzZSBpZiAoZm9sbG93Q2FsbCAmJiBjYWxsZWVUeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgdmFyIG1lbWJlciA9CiAgICAgICAgICBfZ2V0SW50ZXJmYWNlTWVtYmVyKGNhbGxlZVR5cGUuY2xhc3NOb2RlLCBjYWxsTmFtZSwgZmFsc2UsIC0xKTsKICAgICAgdmFyIGNhbGxUeXBlID0gZ2V0Q2FsbGVlVHlwZShtZW1iZXIsIGNhbGxlZVR5cGUpOwogICAgICBpZiAoY2FsbFR5cGUgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgcmV0dXJuIGNhbGxUeXBlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdW5rbm93bkZ1bmN0aW9uOwogIH0KCiAgRGFydFR5cGUgZ2V0Q2FsbGVlVHlwZShPYmplY3QgaW50ZXJmYWNlTWVtYmVyLCBEYXJ0VHlwZSByZWNlaXZlclR5cGUpIHsKICAgIGlmIChpZGVudGljYWwoaW50ZXJmYWNlTWVtYmVyLCAnY2FsbCcpKSB7CiAgICAgIHJldHVybiByZWNlaXZlclR5cGU7CiAgICB9IGVsc2UgaWYgKGludGVyZmFjZU1lbWJlciA9PSBudWxsKSB7CiAgICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfSBlbHNlIGlmIChpbnRlcmZhY2VNZW1iZXIgaXMgTWVtYmVyKSB7CiAgICAgIHZhciBtZW1iZXJDbGFzcyA9IGludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgICAgRGFydFR5cGUgY2FsbGVlVHlwZTsKICAgICAgaWYgKGludGVyZmFjZU1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgICBpZiAoaW50ZXJmYWNlTWVtYmVyLmtpbmQgPT0gUHJvY2VkdXJlS2luZC5HZXR0ZXIpIHsKICAgICAgICAgIGNhbGxlZVR5cGUgPSBpbnRlcmZhY2VNZW1iZXIuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2FsbGVlVHlwZSA9IGludGVyZmFjZU1lbWJlci5mdW5jdGlvbi5mdW5jdGlvblR5cGU7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGludGVyZmFjZU1lbWJlciBpcyBGaWVsZCkgewogICAgICAgIGNhbGxlZVR5cGUgPSBpbnRlcmZhY2VNZW1iZXIudHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyB1bmhhbmRsZWQoaW50ZXJmYWNlTWVtYmVyLnJ1bnRpbWVUeXBlLnRvU3RyaW5nKCksICdnZXRDYWxsZWVUeXBlJywKICAgICAgICAgICAgbnVsbCwgbnVsbCk7CiAgICAgIH0KICAgICAgaWYgKG1lbWJlckNsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgICByZWNlaXZlclR5cGUgPSByZXNvbHZlVHlwZVBhcmFtZXRlcihyZWNlaXZlclR5cGUpOwogICAgICAgIGlmIChyZWNlaXZlclR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgICAgdmFyIGNhc3RlZFR5cGUgPQogICAgICAgICAgICAgIGNsYXNzSGllcmFyY2h5LmdldFR5cGVBc0luc3RhbmNlT2YocmVjZWl2ZXJUeXBlLCBtZW1iZXJDbGFzcyk7CiAgICAgICAgICBjYWxsZWVUeXBlID0gU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKGNhc3RlZFR5cGUpCiAgICAgICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKGNhbGxlZVR5cGUpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gY2FsbGVlVHlwZTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IHVuaGFuZGxlZCgKICAgICAgICAgIGludGVyZmFjZU1lbWJlci5ydW50aW1lVHlwZS50b1N0cmluZygpLCAnZ2V0Q2FsbGVlVHlwZScsIG51bGwsIG51bGwpOwogICAgfQogIH0KCiAgRGFydFR5cGUgZ2V0RGVyaXZlZFR5cGVBcmd1bWVudE9mKERhcnRUeXBlIHR5cGUsIENsYXNzIGNsYXNzXykgewogICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICB2YXIgdHlwZUFzSW5zdGFuY2VPZkNsYXNzID0KICAgICAgICAgIGNsYXNzSGllcmFyY2h5LmdldFR5cGVBc0luc3RhbmNlT2YodHlwZSwgY2xhc3NfKTsKICAgICAgaWYgKHR5cGVBc0luc3RhbmNlT2ZDbGFzcyAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHR5cGVBc0luc3RhbmNlT2ZDbGFzcy50eXBlQXJndW1lbnRzWzBdOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBHZXRzIHRoZSBpbml0aWFsaXplciBmb3IgdGhlIGdpdmVuIFtmaWVsZF0sIG9yIGBudWxsYCBpZiB0aGVyZSBpcyBubwogIC8vLyBpbml0aWFsaXplci4KICBFeHByZXNzaW9uIGdldEZpZWxkSW5pdGlhbGl6ZXIoRmllbGQgZmllbGQpOwoKICAvLy8gSWYgdGhlIFttZW1iZXJdIGlzIGEgZm9yd2FyZGluZyBzdHViLCByZXR1cm4gdGhlIHRhcmdldCBpdCBmb3J3YXJkcyB0by4KICAvLy8gT3RoZXJ3aXNlIHJldHVybiB0aGUgZ2l2ZW4gW21lbWJlcl0uCiAgTWVtYmVyIGdldFJlYWxUYXJnZXQoTWVtYmVyIG1lbWJlcikgewogICAgaWYgKG1lbWJlciBpcyBQcm9jZWR1cmUgJiYgbWVtYmVyLmlzRm9yd2FyZGluZ1N0dWIpIHsKICAgICAgcmV0dXJuIG1lbWJlci5mb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldDsKICAgIH0KICAgIHJldHVybiBtZW1iZXI7CiAgfQoKICBEYXJ0VHlwZSBnZXRTZXR0ZXJUeXBlKE9iamVjdCBpbnRlcmZhY2VNZW1iZXIsIERhcnRUeXBlIHJlY2VpdmVyVHlwZSkgewogICAgaWYgKGludGVyZmFjZU1lbWJlciBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgcmV0dXJuIGludGVyZmFjZU1lbWJlcjsKICAgIH0gZWxzZSBpZiAoaW50ZXJmYWNlTWVtYmVyID09IG51bGwpIHsKICAgICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICB9IGVsc2UgaWYgKGludGVyZmFjZU1lbWJlciBpcyBNZW1iZXIpIHsKICAgICAgdmFyIG1lbWJlckNsYXNzID0gaW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzOwogICAgICBEYXJ0VHlwZSBzZXR0ZXJUeXBlOwogICAgICBpZiAoaW50ZXJmYWNlTWVtYmVyIGlzIFByb2NlZHVyZSkgewogICAgICAgIGFzc2VydChpbnRlcmZhY2VNZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLlNldHRlcik7CiAgICAgICAgdmFyIHNldHRlclBhcmFtZXRlcnMgPSBpbnRlcmZhY2VNZW1iZXIuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgICAgICAgc2V0dGVyVHlwZSA9IHNldHRlclBhcmFtZXRlcnMubGVuZ3RoID4gMAogICAgICAgICAgICA/IHNldHRlclBhcmFtZXRlcnNbMF0udHlwZQogICAgICAgICAgICA6IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgIH0gZWxzZSBpZiAoaW50ZXJmYWNlTWVtYmVyIGlzIEZpZWxkKSB7CiAgICAgICAgc2V0dGVyVHlwZSA9IGludGVyZmFjZU1lbWJlci50eXBlOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IHVuaGFuZGxlZChpbnRlcmZhY2VNZW1iZXIucnVudGltZVR5cGUudG9TdHJpbmcoKSwgJ2dldFNldHRlclR5cGUnLAogICAgICAgICAgICBudWxsLCBudWxsKTsKICAgICAgfQogICAgICBpZiAobWVtYmVyQ2xhc3MudHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICAgIHJlY2VpdmVyVHlwZSA9IHJlc29sdmVUeXBlUGFyYW1ldGVyKHJlY2VpdmVyVHlwZSk7CiAgICAgICAgaWYgKHJlY2VpdmVyVHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICB2YXIgY2FzdGVkVHlwZSA9CiAgICAgICAgICAgICAgY2xhc3NIaWVyYXJjaHkuZ2V0VHlwZUFzSW5zdGFuY2VPZihyZWNlaXZlclR5cGUsIG1lbWJlckNsYXNzKTsKICAgICAgICAgIHNldHRlclR5cGUgPSBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUoY2FzdGVkVHlwZSkKICAgICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUoc2V0dGVyVHlwZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBzZXR0ZXJUeXBlOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgdW5oYW5kbGVkKAogICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLnJ1bnRpbWVUeXBlLnRvU3RyaW5nKCksICdnZXRTZXR0ZXJUeXBlJywgbnVsbCwgbnVsbCk7CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBnZXRUeXBlQXJndW1lbnRPZihEYXJ0VHlwZSB0eXBlLCBDbGFzcyBjbGFzc18pIHsKICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYgaWRlbnRpY2FsKHR5cGUuY2xhc3NOb2RlLCBjbGFzc18pKSB7CiAgICAgIHJldHVybiB0eXBlLnR5cGVBcmd1bWVudHNbMF07CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY29uc3QgVW5rbm93blR5cGUoKTsKICAgIH0KICB9CgogIC8vLyBBZGRzIGFuICJhcyIgY2hlY2sgdG8gYSBbTWV0aG9kSW52b2NhdGlvbl0gaWYgbmVjZXNzYXJ5IGR1ZSB0bwogIC8vLyBjb250cmF2YXJpYW5jZS4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIGV4cHJlc3Npb24gaXMgdGhlIFtBc0V4cHJlc3Npb25dLCBpZiBvbmUgd2FzIGFkZGVkOyBvdGhlcndpc2UKICAvLy8gaXQgaXMgdGhlIFtNZXRob2RJbnZvY2F0aW9uXS4KICBFeHByZXNzaW9uIGhhbmRsZUludm9jYXRpb25Db250cmF2YXJpYW5jZSgKICAgICAgTWV0aG9kQ29udHJhdmFyaWFuY2VDaGVja0tpbmQgY2hlY2tLaW5kLAogICAgICBNZXRob2RJbnZvY2F0aW9uIGRlc3VnYXJlZEludm9jYXRpb24sCiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlLAogICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLAogICAgICBpbnQgZmlsZU9mZnNldCkgewogICAgdmFyIGV4cHJlc3Npb25Ub1JlcGxhY2UgPSBkZXN1Z2FyZWRJbnZvY2F0aW9uID8/IGV4cHJlc3Npb247CiAgICBzd2l0Y2ggKGNoZWNrS2luZCkgewogICAgICBjYXNlIE1ldGhvZENvbnRyYXZhcmlhbmNlQ2hlY2tLaW5kLmNoZWNrTWV0aG9kUmV0dXJuOgogICAgICAgIHZhciBwYXJlbnQgPSBleHByZXNzaW9uVG9SZXBsYWNlLnBhcmVudDsKICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBuZXcgQXNFeHByZXNzaW9uKGV4cHJlc3Npb25Ub1JlcGxhY2UsIGluZmVycmVkVHlwZSkKICAgICAgICAgIC4uaXNUeXBlRXJyb3IgPSB0cnVlCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgICAgIHBhcmVudC5yZXBsYWNlQ2hpbGQoZXhwcmVzc2lvblRvUmVwbGFjZSwgcmVwbGFjZW1lbnQpOwogICAgICAgIGlmIChpbnN0cnVtZW50YXRpb24gIT0gbnVsbCkgewogICAgICAgICAgaW50IG9mZnNldCA9IGFyZ3VtZW50cy5maWxlT2Zmc2V0ID09IC0xCiAgICAgICAgICAgICAgPyBleHByZXNzaW9uLmZpbGVPZmZzZXQKICAgICAgICAgICAgICA6IGFyZ3VtZW50cy5maWxlT2Zmc2V0OwogICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLnJlY29yZCh1cmksIG9mZnNldCwgJ2NoZWNrUmV0dXJuJywKICAgICAgICAgICAgICBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlKGluZmVycmVkVHlwZSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7CiAgICAgIGNhc2UgTWV0aG9kQ29udHJhdmFyaWFuY2VDaGVja0tpbmQuY2hlY2tHZXR0ZXJSZXR1cm46CiAgICAgICAgdmFyIHBhcmVudCA9IGV4cHJlc3Npb25Ub1JlcGxhY2UucGFyZW50OwogICAgICAgIHZhciBwcm9wZXJ0eUdldCA9IG5ldyBQcm9wZXJ0eUdldChkZXN1Z2FyZWRJbnZvY2F0aW9uLnJlY2VpdmVyLAogICAgICAgICAgICBkZXN1Z2FyZWRJbnZvY2F0aW9uLm5hbWUsIGRlc3VnYXJlZEludm9jYXRpb24uaW50ZXJmYWNlVGFyZ2V0KTsKICAgICAgICB2YXIgYXNFeHByZXNzaW9uID0gbmV3IEFzRXhwcmVzc2lvbihwcm9wZXJ0eUdldCwgZnVuY3Rpb25UeXBlKQogICAgICAgICAgLi5pc1R5cGVFcnJvciA9IHRydWUKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGZpbGVPZmZzZXQ7CiAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gbmV3IE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgICAgIGFzRXhwcmVzc2lvbiwgY2FsbE5hbWUsIGRlc3VnYXJlZEludm9jYXRpb24uYXJndW1lbnRzKTsKICAgICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKGV4cHJlc3Npb25Ub1JlcGxhY2UsIHJlcGxhY2VtZW50KTsKICAgICAgICBpZiAoaW5zdHJ1bWVudGF0aW9uICE9IG51bGwpIHsKICAgICAgICAgIGludCBvZmZzZXQgPSBhcmd1bWVudHMuZmlsZU9mZnNldCA9PSAtMQogICAgICAgICAgICAgID8gZXhwcmVzc2lvbi5maWxlT2Zmc2V0CiAgICAgICAgICAgICAgOiBhcmd1bWVudHMuZmlsZU9mZnNldDsKICAgICAgICAgIGluc3RydW1lbnRhdGlvbi5yZWNvcmQodXJpLCBvZmZzZXQsICdjaGVja0dldHRlclJldHVybicsCiAgICAgICAgICAgICAgbmV3IEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZShmdW5jdGlvblR5cGUpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OwogICAgICBjYXNlIE1ldGhvZENvbnRyYXZhcmlhbmNlQ2hlY2tLaW5kLm5vbmU6CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gZXhwcmVzc2lvblRvUmVwbGFjZTsKICB9CgogIC8vLyBBZGQgYW4gImFzIiBjaGVjayBpZiBuZWNlc3NhcnkgZHVlIHRvIGNvbnRyYXZhcmlhbmNlLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSAiYXMiIGNoZWNrIGlmIGl0IHdhcyBhZGRlZDsgb3RoZXJ3aXNlIHJldHVybnMgdGhlIG9yaWdpbmFsCiAgLy8vIGV4cHJlc3Npb24uCiAgRXhwcmVzc2lvbiBoYW5kbGVQcm9wZXJ0eUdldENvbnRyYXZhcmlhbmNlKAogICAgICBFeHByZXNzaW9uIHJlY2VpdmVyLAogICAgICBPYmplY3QgaW50ZXJmYWNlTWVtYmVyLAogICAgICBQcm9wZXJ0eUdldCBkZXN1Z2FyZWRHZXQsCiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlLAogICAgICBpbnQgZmlsZU9mZnNldCkgewogICAgYm9vbCBjaGVja1JldHVybiA9IGZhbHNlOwogICAgaWYgKHJlY2VpdmVyICE9IG51bGwgJiYKICAgICAgICBpbnRlcmZhY2VNZW1iZXIgIT0gbnVsbCAmJgogICAgICAgIHJlY2VpdmVyIGlzISBUaGlzRXhwcmVzc2lvbikgewogICAgICBpZiAoaW50ZXJmYWNlTWVtYmVyIGlzIFByb2NlZHVyZSkgewogICAgICAgIGNoZWNrUmV0dXJuID0gcmV0dXJuZWRUeXBlUGFyYW1ldGVyc09jY3VyTm9uQ292YXJpYW50bHkoCiAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcywKICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmZ1bmN0aW9uLnJldHVyblR5cGUpOwogICAgICB9IGVsc2UgaWYgKGludGVyZmFjZU1lbWJlciBpcyBGaWVsZCkgewogICAgICAgIGNoZWNrUmV0dXJuID0gcmV0dXJuZWRUeXBlUGFyYW1ldGVyc09jY3VyTm9uQ292YXJpYW50bHkoCiAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcywgaW50ZXJmYWNlTWVtYmVyLnR5cGUpOwogICAgICB9CiAgICB9CiAgICB2YXIgcmVwbGFjZWRFeHByZXNzaW9uID0gZGVzdWdhcmVkR2V0ID8/IGV4cHJlc3Npb247CiAgICBpZiAoY2hlY2tSZXR1cm4pIHsKICAgICAgdmFyIGV4cHJlc3Npb25Ub1JlcGxhY2UgPSByZXBsYWNlZEV4cHJlc3Npb247CiAgICAgIHZhciBwYXJlbnQgPSBleHByZXNzaW9uVG9SZXBsYWNlLnBhcmVudDsKICAgICAgcmVwbGFjZWRFeHByZXNzaW9uID0gbmV3IEFzRXhwcmVzc2lvbihleHByZXNzaW9uVG9SZXBsYWNlLCBpbmZlcnJlZFR5cGUpCiAgICAgICAgLi5pc1R5cGVFcnJvciA9IHRydWUKICAgICAgICAuLmZpbGVPZmZzZXQgPSBmaWxlT2Zmc2V0OwogICAgICBwYXJlbnQucmVwbGFjZUNoaWxkKGV4cHJlc3Npb25Ub1JlcGxhY2UsIHJlcGxhY2VkRXhwcmVzc2lvbik7CiAgICB9CiAgICBpZiAoaW5zdHJ1bWVudGF0aW9uICE9IG51bGwgJiYgY2hlY2tSZXR1cm4pIHsKICAgICAgaW5zdHJ1bWVudGF0aW9uLnJlY29yZCh1cmksIGV4cHJlc3Npb24uZmlsZU9mZnNldCwgJ2NoZWNrUmV0dXJuJywKICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGUoaW5mZXJyZWRUeXBlKSk7CiAgICB9CiAgICByZXR1cm4gcmVwbGFjZWRFeHByZXNzaW9uOwogIH0KCiAgLy8vIE1vZGlmaWVzIGEgdHlwZSBhcyBhcHByb3ByaWF0ZSB3aGVuIGluZmVycmluZyBhIGRlY2xhcmVkIHZhcmlhYmxlJ3MgdHlwZS4KICBEYXJ0VHlwZSBpbmZlckRlY2xhcmF0aW9uVHlwZShEYXJ0VHlwZSBpbml0aWFsaXplclR5cGUpIHsKICAgIGlmIChpbml0aWFsaXplclR5cGUgaXMgQm90dG9tVHlwZSB8fAogICAgICAgIChpbml0aWFsaXplclR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgICAgICBpbml0aWFsaXplclR5cGUuY2xhc3NOb2RlID09IGNvcmVUeXBlcy5udWxsQ2xhc3MpKSB7CiAgICAgIC8vIElmIHRoZSBpbml0aWFsaXplciB0eXBlIGlzIE51bGwgb3IgYm90dG9tLCB0aGUgaW5mZXJyZWQgdHlwZSBpcwogICAgICAvLyBkeW5hbWljLgogICAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IHRoaXMgcnVsZSBpcyBpbmhlcml0ZWQgZnJvbSBhbmFseXplciBiZWhhdmlvciBidXQgaXMKICAgICAgLy8gbm90IHNwZWMnZWQgYW55d2hlcmUuCiAgICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfQogICAgcmV0dXJuIGluaXRpYWxpemVyVHlwZTsKICB9CgogIC8vLyBQZXJmb3JtcyB0eXBlIGluZmVyZW5jZSBvbiB0aGUgZ2l2ZW4gW2V4cHJlc3Npb25dLgogIC8vLwogIC8vLyBbdHlwZUNvbnRleHRdIGlzIHRoZSBleHBlY3RlZCB0eXBlIG9mIHRoZSBleHByZXNzaW9uLCBiYXNlZCBvbiBzdXJyb3VuZGluZwogIC8vLyBjb2RlLiAgW3R5cGVOZWVkZWRdIGluZGljYXRlcyB3aGV0aGVyIGl0IGlzIG5lY2Vzc2FyeSB0byBjb21wdXRlIHRoZQogIC8vLyBhY3R1YWwgdHlwZSBvZiB0aGUgZXhwcmVzc2lvbi4gIElmIFt0eXBlTmVlZGVkXSBpcyBgdHJ1ZWAsIHRoZSBhY3R1YWwgdHlwZQogIC8vLyBvZiB0aGUgZXhwcmVzc2lvbiBpcyByZXR1cm5lZDsgb3RoZXJ3aXNlIGBudWxsYCBpcyByZXR1cm5lZC4KICAvLy8KICAvLy8gRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCB3aXRoIGxvZ2ljIHRoYXQgZGlzcGF0Y2hlcyBvbgogIC8vLyB0aGUgZXhwcmVzc2lvbiB0eXBlIGFuZCBjYWxscyB0aGUgYXBwcm9wcmlhdGUgc3BlY2lhbGl6ZWQgImluZmVyIiBtZXRob2QuCiAgRGFydFR5cGUgaW5mZXJFeHByZXNzaW9uKAogICAgICBrZXJuZWwuRXhwcmVzc2lvbiBleHByZXNzaW9uLCBEYXJ0VHlwZSB0eXBlQ29udGV4dCwgYm9vbCB0eXBlTmVlZGVkLAogICAgICB7Ym9vbCBpc1ZvaWRBbGxvd2VkfSk7CgogIEBvdmVycmlkZQogIHZvaWQgaW5mZXJGaWVsZEluaXRpYWxpemVyKAogICAgSW5mZXJlbmNlSGVscGVyIGhlbHBlciwKICAgIERhcnRUeXBlIGNvbnRleHQsCiAgICBrZXJuZWwuRXhwcmVzc2lvbiBpbml0aWFsaXplciwKICApIHsKICAgIGFzc2VydChjbG9zdXJlQ29udGV4dCA9PSBudWxsKTsKICAgIGFzc2VydCghaXNUb3BMZXZlbCk7CiAgICB0aGlzLmhlbHBlciA9IGhlbHBlcjsKICAgIHZhciBhY3R1YWxUeXBlID0KICAgICAgICBpbmZlckV4cHJlc3Npb24oaW5pdGlhbGl6ZXIsIGNvbnRleHQsIHRydWUsIGlzVm9pZEFsbG93ZWQ6IHRydWUpOwogICAgZW5zdXJlQXNzaWduYWJsZShjb250ZXh0LCBhY3R1YWxUeXBlLCBpbml0aWFsaXplciwgaW5pdGlhbGl6ZXIuZmlsZU9mZnNldCwKICAgICAgICBpc1ZvaWRBbGxvd2VkOiBjb250ZXh0IGlzIFZvaWRUeXBlKTsKICAgIHRoaXMuaGVscGVyID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaW5mZXJGdW5jdGlvbkJvZHkoSW5mZXJlbmNlSGVscGVyIGhlbHBlciwgRGFydFR5cGUgcmV0dXJuVHlwZSwKICAgICAgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIsIFN0YXRlbWVudCBib2R5KSB7CiAgICBhc3NlcnQoY2xvc3VyZUNvbnRleHQgPT0gbnVsbCk7CiAgICB0aGlzLmhlbHBlciA9IGhlbHBlcjsKICAgIGNsb3N1cmVDb250ZXh0ID0gbmV3IENsb3N1cmVDb250ZXh0KHRoaXMsIGFzeW5jTWFya2VyLCByZXR1cm5UeXBlLCBmYWxzZSk7CiAgICBpbmZlclN0YXRlbWVudChib2R5KTsKICAgIGNsb3N1cmVDb250ZXh0ID0gbnVsbDsKICAgIHRoaXMuaGVscGVyID0gbnVsbDsKICB9CgogIC8vLyBQZXJmb3JtcyB0aGUgdHlwZSBpbmZlcmVuY2Ugc3RlcHMgdGhhdCBhcmUgc2hhcmVkIGJ5IGFsbCBraW5kcyBvZgogIC8vLyBpbnZvY2F0aW9ucyAoY29uc3RydWN0b3JzLCBpbnN0YW5jZSBtZXRob2RzLCBhbmQgc3RhdGljIG1ldGhvZHMpLgogIEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQgaW5mZXJJbnZvY2F0aW9uKERhcnRUeXBlIHR5cGVDb250ZXh0LCBpbnQgb2Zmc2V0LAogICAgICBGdW5jdGlvblR5cGUgY2FsbGVlVHlwZSwgRGFydFR5cGUgcmV0dXJuVHlwZSwgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAge2Jvb2wgaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yOiBmYWxzZSwKICAgICAgRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBib29sIHNraXBUeXBlQXJndW1lbnRJbmZlcmVuY2U6IGZhbHNlLAogICAgICBib29sIGlzQ29uc3Q6IGZhbHNlfSkgewogICAgbGFzdEluZmVycmVkU3Vic3RpdHV0aW9uID0gbnVsbDsKICAgIGxhc3RDYWxsZWVUeXBlID0gbnVsbDsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gY2FsbGVlVHlwZVBhcmFtZXRlcnMgPSBjYWxsZWVUeXBlLnR5cGVQYXJhbWV0ZXJzOwogICAgaWYgKGNhbGxlZVR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IG9uZSBvZiB0aGUgY2FsbGVlIHR5cGUgcGFyYW1ldGVycyBtaWdodCBtYXRjaCBhIHR5cGUKICAgICAgLy8gdGhhdCBhbHJlYWR5IGV4aXN0cyBhcyBwYXJ0IG9mIGluZmVyZW5jZSAoZS5nLiB0aGUgdHlwZSBvZiBhbgogICAgICAvLyBhcmd1bWVudCkuICBUaGlzIG1pZ2h0IGhhcHBlbiwgZm9yIGluc3RhbmNlLCBpbiB0aGUgY2FzZSB3aGVyZSBhCiAgICAgIC8vIGZ1bmN0aW9uIG9yIG1ldGhvZCBtYWtlcyBhIHJlY3Vyc2l2ZSBjYWxsIHRvIGl0c2VsZi4gIFRvIGF2b2lkIHRoZQogICAgICAvLyBjYWxsZWUgdHlwZSBwYXJhbWV0ZXJzIGFjY2lkZW50YWxseSBtYXRjaGluZyBhIHR5cGUgdGhhdCBhbHJlYWR5CiAgICAgIC8vIGV4aXN0cywgYW5kIGNyZWF0aW5nIGludmFsaWQgaW5mZXJlbmNlIHJlc3VsdHMsIHdlIG5lZWQgdG8gY3JlYXRlIGZyZXNoCiAgICAgIC8vIHR5cGUgcGFyYW1ldGVycyBmb3IgdGhlIGNhbGxlZSAoc2VlIGRhcnRidWcuY29tLzMxNzU5KS4KICAgICAgLy8gVE9ETyhwYXVsYmVycnkpOiBpcyBpdCBwb3NzaWJsZSB0byBmaW5kIGEgbmFycm93ZXIgc2V0IG9mIGNpcmN1bXN0YW5jZXMKICAgICAgLy8gaW4gd2hpY2ggbWUgbXVzdCBkbyB0aGlzLCB0byBhdm9pZCBhIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24/CiAgICAgIHZhciBmcmVzaCA9IGdldEZyZXNoVHlwZVBhcmFtZXRlcnMoY2FsbGVlVHlwZVBhcmFtZXRlcnMpOwogICAgICBjYWxsZWVUeXBlID0gZnJlc2guYXBwbHlUb0Z1bmN0aW9uVHlwZShjYWxsZWVUeXBlKTsKICAgICAgcmV0dXJuVHlwZSA9IGZyZXNoLnN1YnN0aXR1dGUocmV0dXJuVHlwZSk7CiAgICAgIGNhbGxlZVR5cGVQYXJhbWV0ZXJzID0gZnJlc2guZnJlc2hUeXBlUGFyYW1ldGVyczsKICAgIH0KICAgIExpc3Q8RGFydFR5cGU+IGV4cGxpY2l0VHlwZUFyZ3VtZW50cyA9IGdldEV4cGxpY2l0VHlwZUFyZ3VtZW50cyhhcmd1bWVudHMpOwogICAgYm9vbCBpbmZlcmVuY2VOZWVkZWQgPSAhc2tpcFR5cGVBcmd1bWVudEluZmVyZW5jZSAmJgogICAgICAgIGV4cGxpY2l0VHlwZUFyZ3VtZW50cyA9PSBudWxsICYmCiAgICAgICAgY2FsbGVlVHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eTsKICAgIGJvb2wgdHlwZUNoZWNrc05lZWRlZCA9ICFpc1RvcExldmVsOwogICAgTGlzdDxEYXJ0VHlwZT4gaW5mZXJyZWRUeXBlczsKICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb247CiAgICBMaXN0PERhcnRUeXBlPiBmb3JtYWxUeXBlczsKICAgIExpc3Q8RGFydFR5cGU+IGFjdHVhbFR5cGVzOwogICAgaWYgKGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgIGZvcm1hbFR5cGVzID0gW107CiAgICAgIGFjdHVhbFR5cGVzID0gW107CiAgICB9CiAgICBpZiAoaW5mZXJlbmNlTmVlZGVkKSB7CiAgICAgIGlmIChpc0NvbnN0ICYmIHR5cGVDb250ZXh0ICE9IG51bGwpIHsKICAgICAgICB0eXBlQ29udGV4dCA9CiAgICAgICAgICAgIG5ldyBUeXBlVmFyaWFibGVFbGltaW5hdG9yKGNvcmVUeXBlcykuc3Vic3RpdHV0ZVR5cGUodHlwZUNvbnRleHQpOwogICAgICB9CiAgICAgIGluZmVycmVkVHlwZXMgPSBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKAogICAgICAgICAgY2FsbGVlVHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBjb25zdCBVbmtub3duVHlwZSgpKTsKICAgICAgdHlwZVNjaGVtYUVudmlyb25tZW50LmluZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBlKHJldHVyblR5cGUsCiAgICAgICAgICBjYWxsZWVUeXBlUGFyYW1ldGVycywgbnVsbCwgbnVsbCwgdHlwZUNvbnRleHQsIGluZmVycmVkVHlwZXMpOwogICAgICBzdWJzdGl0dXRpb24gPQogICAgICAgICAgU3Vic3RpdHV0aW9uLmZyb21QYWlycyhjYWxsZWVUeXBlUGFyYW1ldGVycywgaW5mZXJyZWRUeXBlcyk7CiAgICB9IGVsc2UgaWYgKGV4cGxpY2l0VHlwZUFyZ3VtZW50cyAhPSBudWxsICYmCiAgICAgICAgY2FsbGVlVHlwZVBhcmFtZXRlcnMubGVuZ3RoID09IGV4cGxpY2l0VHlwZUFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgc3Vic3RpdHV0aW9uID0KICAgICAgICAgIFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoY2FsbGVlVHlwZVBhcmFtZXRlcnMsIGV4cGxpY2l0VHlwZUFyZ3VtZW50cyk7CiAgICB9IGVsc2UgaWYgKGNhbGxlZVR5cGVQYXJhbWV0ZXJzLmxlbmd0aCAhPSAwKSB7CiAgICAgIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoCiAgICAgICAgICBjYWxsZWVUeXBlUGFyYW1ldGVycywKICAgICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoCiAgICAgICAgICAgICAgY2FsbGVlVHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBjb25zdCBEeW5hbWljVHlwZSgpKSk7CiAgICB9CiAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IGlmIHdlIGFyZSBkb2luZyB0b3AgbGV2ZWwgaW5mZXJlbmNlIGFuZCB0eXBlIGFyZ3VtZW50cwogICAgLy8gd2VyZSBvbWl0dGVkLCByZXBvcnQgYW4gZXJyb3IuCiAgICBpbnQgaSA9IDA7CiAgICBfZm9yRWFjaEFyZ3VtZW50KGFyZ3VtZW50cywgKG5hbWUsIGV4cHJlc3Npb24pIHsKICAgICAgRGFydFR5cGUgZm9ybWFsVHlwZSA9IG5hbWUgIT0gbnVsbAogICAgICAgICAgPyBnZXROYW1lZFBhcmFtZXRlclR5cGUoY2FsbGVlVHlwZSwgbmFtZSkKICAgICAgICAgIDogZ2V0UG9zaXRpb25hbFBhcmFtZXRlclR5cGUoY2FsbGVlVHlwZSwgaSsrKTsKICAgICAgRGFydFR5cGUgaW5mZXJyZWRGb3JtYWxUeXBlID0gc3Vic3RpdHV0aW9uICE9IG51bGwKICAgICAgICAgID8gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGZvcm1hbFR5cGUpCiAgICAgICAgICA6IGZvcm1hbFR5cGU7CiAgICAgIHZhciBleHByZXNzaW9uVHlwZSA9IGluZmVyRXhwcmVzc2lvbigKICAgICAgICAgIGV4cHJlc3Npb24sCiAgICAgICAgICBpbmZlcnJlZEZvcm1hbFR5cGUsCiAgICAgICAgICBpbmZlcmVuY2VOZWVkZWQgfHwKICAgICAgICAgICAgICBpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3IgfHwKICAgICAgICAgICAgICB0eXBlQ2hlY2tzTmVlZGVkKTsKICAgICAgaWYgKGluZmVyZW5jZU5lZWRlZCB8fCB0eXBlQ2hlY2tzTmVlZGVkKSB7CiAgICAgICAgZm9ybWFsVHlwZXMuYWRkKGZvcm1hbFR5cGUpOwogICAgICAgIGFjdHVhbFR5cGVzLmFkZChleHByZXNzaW9uVHlwZSk7CiAgICAgIH0KICAgICAgaWYgKGlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvcikgewogICAgICAgIHJldHVyblR5cGUgPSB0eXBlU2NoZW1hRW52aXJvbm1lbnQuZ2V0VHlwZU9mT3ZlcmxvYWRlZEFyaXRobWV0aWMoCiAgICAgICAgICAgIHJlY2VpdmVyVHlwZSwgZXhwcmVzc2lvblR5cGUpOwogICAgICB9CiAgICB9KTsKCiAgICAvLyBDaGVjayBmb3IgYW5kIHJlbW92ZSBkdXBsaWNhdGVkIG5hbWVkIGFyZ3VtZW50cy4KICAgIHZhciBuYW1lZCA9IGFyZ3VtZW50cy5uYW1lZDsKICAgIGlmIChuYW1lZC5sZW5ndGggPT0gMikgewogICAgICBpZiAobmFtZWRbMF0ubmFtZSA9PSBuYW1lZFsxXS5uYW1lKSB7CiAgICAgICAgdmFyIG5hbWUgPSBuYW1lZFsxXS5uYW1lOwogICAgICAgIHZhciBlcnJvciA9IGhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihoZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWROYW1lZEFyZ3VtZW50LndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICAgIG5hbWVkWzFdLmZpbGVPZmZzZXQsCiAgICAgICAgICAgIG5hbWUubGVuZ3RoKSk7CiAgICAgICAgYXJndW1lbnRzLm5hbWVkID0gW25ldyBrZXJuZWwuTmFtZWRFeHByZXNzaW9uKG5hbWVkWzFdLm5hbWUsIGVycm9yKV07CiAgICAgICAgZm9ybWFsVHlwZXMucmVtb3ZlTGFzdCgpOwogICAgICAgIGFjdHVhbFR5cGVzLnJlbW92ZUxhc3QoKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChuYW1lZC5sZW5ndGggPiAyKSB7CiAgICAgIHZhciBzZWVuTmFtZXMgPSA8U3RyaW5nLCBrZXJuZWwuTmFtZWRFeHByZXNzaW9uPnt9OwogICAgICB2YXIgaGFzUHJvYmxlbSA9IGZhbHNlOwogICAgICB2YXIgbmFtZWRUeXBlSW5kZXggPSBhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGg7CiAgICAgIHZhciB1bmlxdWVOYW1lZCA9IDxrZXJuZWwuTmFtZWRFeHByZXNzaW9uPltdOwogICAgICBmb3IgKHZhciBleHByZXNzaW9uIGluIG5hbWVkKSB7CiAgICAgICAgdmFyIG5hbWUgPSBleHByZXNzaW9uLm5hbWU7CiAgICAgICAgaWYgKHNlZW5OYW1lcy5jb250YWluc0tleShuYW1lKSkgewogICAgICAgICAgaGFzUHJvYmxlbSA9IHRydWU7CiAgICAgICAgICB2YXIgcHJldk5hbWVkRXhwcmVzc2lvbiA9IHNlZW5OYW1lc1tuYW1lXTsKICAgICAgICAgIHByZXZOYW1lZEV4cHJlc3Npb24udmFsdWUgPSBoZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICAgICAgaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkTmFtZWRBcmd1bWVudC53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICAgICAgICBleHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgIG5hbWUubGVuZ3RoKSkKICAgICAgICAgICAgLi5wYXJlbnQgPSBwcmV2TmFtZWRFeHByZXNzaW9uOwogICAgICAgICAgZm9ybWFsVHlwZXMucmVtb3ZlQXQobmFtZWRUeXBlSW5kZXgpOwogICAgICAgICAgYWN0dWFsVHlwZXMucmVtb3ZlQXQobmFtZWRUeXBlSW5kZXgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZWVuTmFtZXNbbmFtZV0gPSBleHByZXNzaW9uOwogICAgICAgICAgdW5pcXVlTmFtZWQuYWRkKGV4cHJlc3Npb24pOwogICAgICAgICAgbmFtZWRUeXBlSW5kZXgrKzsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGhhc1Byb2JsZW0pIHsKICAgICAgICBhcmd1bWVudHMubmFtZWQgPSB1bmlxdWVOYW1lZDsKICAgICAgfQogICAgfQoKICAgIGlmIChpbmZlcmVuY2VOZWVkZWQpIHsKICAgICAgdHlwZVNjaGVtYUVudmlyb25tZW50LmluZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBlKAogICAgICAgICAgcmV0dXJuVHlwZSwKICAgICAgICAgIGNhbGxlZVR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgZm9ybWFsVHlwZXMsCiAgICAgICAgICBhY3R1YWxUeXBlcywKICAgICAgICAgIHR5cGVDb250ZXh0LAogICAgICAgICAgaW5mZXJyZWRUeXBlcyk7CiAgICAgIHN1YnN0aXR1dGlvbiA9CiAgICAgICAgICBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKGNhbGxlZVR5cGVQYXJhbWV0ZXJzLCBpbmZlcnJlZFR5cGVzKTsKICAgICAgaW5zdHJ1bWVudGF0aW9uPy5yZWNvcmQodXJpLCBvZmZzZXQsICd0eXBlQXJncycsCiAgICAgICAgICBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlQXJncyhpbmZlcnJlZFR5cGVzKSk7CiAgICAgIGFyZ3VtZW50cy50eXBlcy5jbGVhcigpOwogICAgICBhcmd1bWVudHMudHlwZXMuYWRkQWxsKGluZmVycmVkVHlwZXMpOwogICAgfQogICAgaWYgKHR5cGVDaGVja3NOZWVkZWQgJiYgIWlkZW50aWNhbChjYWxsZWVUeXBlLCB1bmtub3duRnVuY3Rpb24pKSB7CiAgICAgIExvY2F0ZWRNZXNzYWdlIGFyZ01lc3NhZ2UgPQogICAgICAgICAgaGVscGVyLmNoZWNrQXJndW1lbnRzRm9yVHlwZShjYWxsZWVUeXBlLCBhcmd1bWVudHMsIG9mZnNldCk7CiAgICAgIGlmIChhcmdNZXNzYWdlICE9IG51bGwpIHsKICAgICAgICBoZWxwZXIuYWRkUHJvYmxlbSgKICAgICAgICAgICAgYXJnTWVzc2FnZS5tZXNzYWdlT2JqZWN0LCBhcmdNZXNzYWdlLmNoYXJPZmZzZXQsIGFyZ01lc3NhZ2UubGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBBcmd1bWVudCBjb3VudHMgYW5kIG5hbWVzIG1hdGNoLiBDb21wYXJlIHR5cGVzLgogICAgICAgIGludCBudW1Qb3NpdGlvbmFsQXJncyA9IGFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZvcm1hbFR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICB2YXIgZm9ybWFsVHlwZSA9IGZvcm1hbFR5cGVzW2ldOwogICAgICAgICAgdmFyIGV4cGVjdGVkVHlwZSA9IHN1YnN0aXR1dGlvbiAhPSBudWxsCiAgICAgICAgICAgICAgPyBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoZm9ybWFsVHlwZSkKICAgICAgICAgICAgICA6IGZvcm1hbFR5cGU7CiAgICAgICAgICB2YXIgYWN0dWFsVHlwZSA9IGFjdHVhbFR5cGVzW2ldOwogICAgICAgICAgdmFyIGV4cHJlc3Npb24gPSBpIDwgbnVtUG9zaXRpb25hbEFyZ3MKICAgICAgICAgICAgICA/IGFyZ3VtZW50cy5wb3NpdGlvbmFsW2ldCiAgICAgICAgICAgICAgOiBhcmd1bWVudHMubmFtZWRbaSAtIG51bVBvc2l0aW9uYWxBcmdzXS52YWx1ZTsKICAgICAgICAgIGVuc3VyZUFzc2lnbmFibGUoCiAgICAgICAgICAgICAgZXhwZWN0ZWRUeXBlLCBhY3R1YWxUeXBlLCBleHByZXNzaW9uLCBleHByZXNzaW9uLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgaXNWb2lkQWxsb3dlZDogZXhwZWN0ZWRUeXBlIGlzIFZvaWRUeXBlLAogICAgICAgICAgICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZUFyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgRGFydFR5cGUgaW5mZXJyZWRUeXBlOwogICAgbGFzdEluZmVycmVkU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uOwogICAgbGFzdENhbGxlZVR5cGUgPSBjYWxsZWVUeXBlOwogICAgaW5mZXJyZWRUeXBlID0gc3Vic3RpdHV0aW9uID09IG51bGwKICAgICAgICA/IHJldHVyblR5cGUKICAgICAgICA6IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShyZXR1cm5UeXBlKTsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChudWxsLCBpbmZlcnJlZFR5cGUpOwogIH0KCiAgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdCBpbmZlckxvY2FsRnVuY3Rpb24oRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uLAogICAgICBEYXJ0VHlwZSB0eXBlQ29udGV4dCwgaW50IGZpbGVPZmZzZXQsIERhcnRUeXBlIHJldHVybkNvbnRleHQpIHsKICAgIGJvb2wgaGFzSW1wbGljaXRSZXR1cm5UeXBlID0gZmFsc2U7CiAgICBpZiAocmV0dXJuQ29udGV4dCA9PSBudWxsKSB7CiAgICAgIGhhc0ltcGxpY2l0UmV0dXJuVHlwZSA9IHRydWU7CiAgICAgIHJldHVybkNvbnRleHQgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfQogICAgaWYgKCFpc1RvcExldmVsKSB7CiAgICAgIHZhciBwb3NpdGlvbmFsUGFyYW1ldGVycyA9IGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHBhcmFtZXRlciA9IHBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICAgIGluZmVyTWV0YWRhdGFLZWVwaW5nSGVscGVyKHBhcmFtZXRlci5hbm5vdGF0aW9ucyk7CiAgICAgICAgaWYgKHBhcmFtZXRlci5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICBpbmZlckV4cHJlc3Npb24ocGFyYW1ldGVyLmluaXRpYWxpemVyLCBwYXJhbWV0ZXIudHlwZSwgIWlzVG9wTGV2ZWwpOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKHZhciBwYXJhbWV0ZXIgaW4gZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgICAgaW5mZXJNZXRhZGF0YUtlZXBpbmdIZWxwZXIocGFyYW1ldGVyLmFubm90YXRpb25zKTsKICAgICAgICBpbmZlckV4cHJlc3Npb24ocGFyYW1ldGVyLmluaXRpYWxpemVyLCBwYXJhbWV0ZXIudHlwZSwgIWlzVG9wTGV2ZWwpOwogICAgICB9CiAgICB9CgogICAgLy8gTGV0IGA8VDAsIC4uLiwgVG4+YCBiZSB0aGUgc2V0IG9mIHR5cGUgcGFyYW1ldGVycyBvZiB0aGUgY2xvc3VyZSAod2l0aAogICAgLy8gYG5gPTAgaWYgdGhlcmUgYXJlIG5vIHR5cGUgcGFyYW1ldGVycykuCiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzID0gZnVuY3Rpb24udHlwZVBhcmFtZXRlcnM7CgogICAgLy8gTGV0IGAoUDAgeDAsIC4uLiwgUG0geG0pYCBiZSB0aGUgc2V0IG9mIGZvcm1hbCBwYXJhbWV0ZXJzIG9mIHRoZSBjbG9zdXJlCiAgICAvLyAoaW5jbHVkaW5nIHJlcXVpcmVkLCBwb3NpdGlvbmFsIG9wdGlvbmFsLCBhbmQgbmFtZWQgb3B0aW9uYWwgcGFyYW1ldGVycykuCiAgICAvLyBJZiBhbnkgdHlwZSBgUGlgIGlzIG1pc3NpbmcsIGRlbm90ZSBpdCBhcyBgX2AuCiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IGZvcm1hbHMgPSBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy50b0xpc3QoKQogICAgICAuLmFkZEFsbChmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMpOwoKICAgIC8vIExldCBgQmAgZGVub3RlIHRoZSBjbG9zdXJlIGJvZHkuICBJZiBgQmAgaXMgYW4gZXhwcmVzc2lvbiBmdW5jdGlvbiBib2R5CiAgICAvLyAoYD0+IGVgKSwgdHJlYXQgaXQgYXMgZXF1aXZhbGVudCB0byBhIGJsb2NrIGZ1bmN0aW9uIGJvZHkgY29udGFpbmluZyBhCiAgICAvLyBzaW5nbGUgYHJldHVybmAgc3RhdGVtZW50IChgeyByZXR1cm4gZTsgfWApLgoKICAgIC8vIEF0dGVtcHQgdG8gbWF0Y2ggYEtgIGFzIGEgZnVuY3Rpb24gdHlwZSBjb21wYXRpYmxlIHdpdGggdGhlIGNsb3N1cmUgKHRoYXQKICAgIC8vIGlzLCBvbmUgaGF2aW5nIG4gdHlwZSBwYXJhbWV0ZXJzIGFuZCBhIGNvbXBhdGlibGUgc2V0IG9mIGZvcm1hbAogICAgLy8gcGFyYW1ldGVycykuICBJZiB0aGVyZSBpcyBhIHN1Y2Nlc3NmdWwgbWF0Y2gsIGxldCBgPFMwLCAuLi4sIFNuPmAgYmUgdGhlCiAgICAvLyBzZXQgb2YgbWF0Y2hlZCB0eXBlIHBhcmFtZXRlcnMgYW5kIGAoUTAsIC4uLiwgUW0pYCBiZSB0aGUgc2V0IG9mIG1hdGNoZWQKICAgIC8vIGZvcm1hbCBwYXJhbWV0ZXIgdHlwZXMsIGFuZCBsZXQgYE5gIGJlIHRoZSByZXR1cm4gdHlwZS4KICAgIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb247CiAgICBMaXN0PERhcnRUeXBlPiBmb3JtYWxUeXBlc0Zyb21Db250ZXh0ID0KICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKGZvcm1hbHMubGVuZ3RoLCBudWxsKTsKICAgIGlmICh0eXBlQ29udGV4dCBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb3JtYWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGkgPCBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICAgIGZvcm1hbFR5cGVzRnJvbUNvbnRleHRbaV0gPQogICAgICAgICAgICAgIGdldFBvc2l0aW9uYWxQYXJhbWV0ZXJUeXBlKHR5cGVDb250ZXh0LCBpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9ybWFsVHlwZXNGcm9tQ29udGV4dFtpXSA9CiAgICAgICAgICAgICAgZ2V0TmFtZWRQYXJhbWV0ZXJUeXBlKHR5cGVDb250ZXh0LCBmb3JtYWxzW2ldLm5hbWUpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm5Db250ZXh0ID0gdHlwZUNvbnRleHQucmV0dXJuVHlwZTsKCiAgICAgIC8vIExldCBgW1QvU11gIGRlbm90ZSB0aGUgdHlwZSBzdWJzdGl0dXRpb24gd2hlcmUgZWFjaCBgU2lgIGlzIHJlcGxhY2VkCiAgICAgIC8vIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYFRpYC4KICAgICAgdmFyIHN1YnN0aXR1dGlvbk1hcCA9IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlQ29udGV4dC50eXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgIHN1YnN0aXR1dGlvbk1hcFt0eXBlQ29udGV4dC50eXBlUGFyYW1ldGVyc1tpXV0gPQogICAgICAgICAgICBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoCiAgICAgICAgICAgICAgICA/IG5ldyBUeXBlUGFyYW1ldGVyVHlwZSh0eXBlUGFyYW1ldGVyc1tpXSkKICAgICAgICAgICAgICAgIDogY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgfQogICAgICBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbU1hcChzdWJzdGl0dXRpb25NYXApOwogICAgfSBlbHNlIHsKICAgICAgLy8gSWYgdGhlIG1hdGNoIGlzIG5vdCBzdWNjZXNzZnVsIGJlY2F1c2UgIGBLYCBpcyBgX2AsIGxldCBhbGwgYFNpYCwgYWxsCiAgICAgIC8vIGBRaWAsIGFuZCBgTmAgYWxsIGJlIGBfYC4KCiAgICAgIC8vIElmIHRoZSBtYXRjaCBpcyBub3Qgc3VjY2Vzc2Z1bCBmb3IgYW55IG90aGVyIHJlYXNvbiwgdGhpcyB3aWxsIHJlc3VsdAogICAgICAvLyBpbiBhIHR5cGUgZXJyb3IsIHNvIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBmcmVlIHRvIGNob29zZSB0aGUgYmVzdAogICAgICAvLyBlcnJvciByZWNvdmVyeSBwYXRoLgogICAgICBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZW1wdHk7CiAgICB9CgogICAgLy8gRGVmaW5lIGBSaWAgYXMgZm9sbG93czogaWYgYFBpYCBpcyBub3QgYF9gLCBsZXQgYFJpYCBiZSBgUGlgLgogICAgLy8gT3RoZXJ3aXNlLCBpZiBgUWlgIGlzIG5vdCBgX2AsIGxldCBgUmlgIGJlIHRoZSBncmVhdGVzdCBjbG9zdXJlIG9mCiAgICAvLyBgUWlbVC9TXWAgd2l0aCByZXNwZWN0IHRvIGA/YC4gIE90aGVyd2lzZSwgbGV0IGBSaWAgYmUgYGR5bmFtaWNgLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb3JtYWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudCBmb3JtYWwgPSBmb3JtYWxzW2ldOwogICAgICBpZiAoVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LmlzSW1wbGljaXRseVR5cGVkKGZvcm1hbCkpIHsKICAgICAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGU7CiAgICAgICAgaWYgKGZvcm1hbFR5cGVzRnJvbUNvbnRleHRbaV0gPT0gY29yZVR5cGVzLm51bGxDbGFzcy5yYXdUeXBlKSB7CiAgICAgICAgICBpbmZlcnJlZFR5cGUgPSBjb3JlVHlwZXMub2JqZWN0Q2xhc3MucmF3VHlwZTsKICAgICAgICB9IGVsc2UgaWYgKGZvcm1hbFR5cGVzRnJvbUNvbnRleHRbaV0gIT0gbnVsbCkgewogICAgICAgICAgaW5mZXJyZWRUeXBlID0gZ3JlYXRlc3RDbG9zdXJlKGNvcmVUeXBlcywKICAgICAgICAgICAgICBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoZm9ybWFsVHlwZXNGcm9tQ29udGV4dFtpXSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbmZlcnJlZFR5cGUgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICAgIH0KICAgICAgICBpbnN0cnVtZW50YXRpb24/LnJlY29yZCh1cmksIGZvcm1hbC5maWxlT2Zmc2V0LCAndHlwZScsCiAgICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGUoaW5mZXJyZWRUeXBlKSk7CiAgICAgICAgZm9ybWFsLnR5cGUgPSBpbmZlcnJlZFR5cGU7CiAgICAgIH0KICAgIH0KCiAgICAvLyBMZXQgYE4nYCBiZSBgTltUL1NdYC4gIFRoZSBbQ2xvc3VyZUNvbnRleHRdIGNvbnN0cnVjdG9yIHdpbGwgYWRqdXN0CiAgICAvLyBhY2NvcmRpbmdseSBpZiB0aGUgY2xvc3VyZSBpcyBkZWNsYXJlZCB3aXRoIGBhc3luY2AsIGBhc3luYypgLCBvcgogICAgLy8gYHN5bmMqYC4KICAgIGlmIChyZXR1cm5Db250ZXh0IGlzISBVbmtub3duVHlwZSkgewogICAgICByZXR1cm5Db250ZXh0ID0gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHJldHVybkNvbnRleHQpOwogICAgfQoKICAgIC8vIEFwcGx5IHR5cGUgaW5mZXJlbmNlIHRvIGBCYCBpbiByZXR1cm4gY29udGV4dCBgTuKAmWAsIHdpdGggYW55IHJlZmVyZW5jZXMKICAgIC8vIHRvIGB4aWAgaW4gYEJgIGhhdmluZyB0eXBlIGBQaWAuICBUaGlzIHByb2R1Y2VzIGBC4oCZYC4KICAgIGJvb2wgbmVlZFRvU2V0UmV0dXJuVHlwZSA9IGhhc0ltcGxpY2l0UmV0dXJuVHlwZTsKICAgIENsb3N1cmVDb250ZXh0IG9sZENsb3N1cmVDb250ZXh0ID0gdGhpcy5jbG9zdXJlQ29udGV4dDsKICAgIENsb3N1cmVDb250ZXh0IGNsb3N1cmVDb250ZXh0ID0gbmV3IENsb3N1cmVDb250ZXh0KAogICAgICAgIHRoaXMsIGZ1bmN0aW9uLmFzeW5jTWFya2VyLCByZXR1cm5Db250ZXh0LCBuZWVkVG9TZXRSZXR1cm5UeXBlKTsKICAgIHRoaXMuY2xvc3VyZUNvbnRleHQgPSBjbG9zdXJlQ29udGV4dDsKICAgIGluZmVyU3RhdGVtZW50KGZ1bmN0aW9uLmJvZHkpOwoKICAgIC8vIElmIHRoZSBjbG9zdXJlIGlzIGRlY2xhcmVkIHdpdGggYGFzeW5jKmAgb3IgYHN5bmMqYCwgbGV0IGBNYCBiZSB0aGUKICAgIC8vIGxlYXN0IHVwcGVyIGJvdW5kIG9mIHRoZSB0eXBlcyBvZiB0aGUgYHlpZWxkYCBleHByZXNzaW9ucyBpbiBgQuKAmWAsIG9yCiAgICAvLyBgdm9pZGAgaWYgYELigJlgIGNvbnRhaW5zIG5vIGB5aWVsZGAgZXhwcmVzc2lvbnMuICBPdGhlcndpc2UsIGxldCBgTWAgYmUKICAgIC8vIHRoZSBsZWFzdCB1cHBlciBib3VuZCBvZiB0aGUgdHlwZXMgb2YgdGhlIGByZXR1cm5gIGV4cHJlc3Npb25zIGluIGBC4oCZYCwKICAgIC8vIG9yIGB2b2lkYCBpZiBgQuKAmWAgY29udGFpbnMgbm8gYHJldHVybmAgZXhwcmVzc2lvbnMuCiAgICBEYXJ0VHlwZSBpbmZlcnJlZFJldHVyblR5cGU7CiAgICBpZiAobmVlZFRvU2V0UmV0dXJuVHlwZSkgewogICAgICBpbmZlcnJlZFJldHVyblR5cGUgPSBjbG9zdXJlQ29udGV4dC5pbmZlclJldHVyblR5cGUodGhpcyk7CiAgICB9CgogICAgLy8gVGhlbiB0aGUgcmVzdWx0IG9mIGluZmVyZW5jZSBpcyBgPFQwLCAuLi4sIFRuPihSMCB4MCwgLi4uLCBSbiB4bikgQmAgd2l0aAogICAgLy8gdHlwZSBgPFQwLCAuLi4sIFRuPihSMCwgLi4uLCBSbikgLT4gTeKAmWAgKHdpdGggc29tZSBvZiB0aGUgYFJpYCBhbmQgYHhpYAogICAgLy8gZGVub3RlZCBhcyBvcHRpb25hbCBvciBuYW1lZCBwYXJhbWV0ZXJzLCBpZiBhcHByb3ByaWF0ZSkuCiAgICBpZiAobmVlZFRvU2V0UmV0dXJuVHlwZSkgewogICAgICBpbnN0cnVtZW50YXRpb24/LnJlY29yZCh1cmksIGZpbGVPZmZzZXQsICdyZXR1cm5UeXBlJywKICAgICAgICAgIG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGUoaW5mZXJyZWRSZXR1cm5UeXBlKSk7CiAgICAgIGZ1bmN0aW9uLnJldHVyblR5cGUgPSBpbmZlcnJlZFJldHVyblR5cGU7CiAgICB9CiAgICB0aGlzLmNsb3N1cmVDb250ZXh0ID0gb2xkQ2xvc3VyZUNvbnRleHQ7CiAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQobnVsbCwgZnVuY3Rpb24uZnVuY3Rpb25UeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaW5mZXJNZXRhZGF0YSgKICAgICAgSW5mZXJlbmNlSGVscGVyIGhlbHBlciwgTGlzdDxrZXJuZWwuRXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMpIHsKICAgIGlmIChhbm5vdGF0aW9ucyAhPSBudWxsKSB7CiAgICAgIHRoaXMuaGVscGVyID0gaGVscGVyOwogICAgICBpbmZlck1ldGFkYXRhS2VlcGluZ0hlbHBlcihhbm5vdGF0aW9ucyk7CiAgICAgIHRoaXMuaGVscGVyID0gbnVsbDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaW5mZXJNZXRhZGF0YUtlZXBpbmdIZWxwZXIoTGlzdDxrZXJuZWwuRXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMpIHsKICAgIGlmIChhbm5vdGF0aW9ucyAhPSBudWxsKSB7CiAgICAgIC8vIFBsYWNlIGFubm90YXRpb25zIGluIGEgdGVtcG9yYXJ5IGxpc3QgbGl0ZXJhbCBzbyB0aGF0IHRoZXkgd2lsbCBoYXZlIGEKICAgICAgLy8gcGFyZW50LiAgVGhpcyBpcyBuZWNlc3NhcnkgaW4gY2FzZSBhbnkgb2YgdGhlIGFubm90YXRpb25zIG5lZWQgdG8gZ2V0CiAgICAgIC8vIHJlcGxhY2VkIGR1cmluZyB0eXBlIGluZmVyZW5jZS4KICAgICAgdmFyIHBhcmVudHMgPSBhbm5vdGF0aW9ucy5tYXAoKGUpID0+IGUucGFyZW50KS50b0xpc3QoKTsKICAgICAgbmV3IExpc3RMaXRlcmFsKGFubm90YXRpb25zKTsKICAgICAgZm9yICh2YXIgYW5ub3RhdGlvbiBpbiBhbm5vdGF0aW9ucykgewogICAgICAgIGluZmVyRXhwcmVzc2lvbihhbm5vdGF0aW9uLCBjb25zdCBVbmtub3duVHlwZSgpLCAhaXNUb3BMZXZlbCk7CiAgICAgIH0KICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhbm5vdGF0aW9ucy5sZW5ndGg7ICsraSkgewogICAgICAgIGFubm90YXRpb25zW2ldLnBhcmVudCA9IHBhcmVudHNbaV07CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBQZXJmb3JtcyB0aGUgY29yZSB0eXBlIGluZmVyZW5jZSBhbGdvcml0aG0gZm9yIG1ldGhvZCBpbnZvY2F0aW9ucyAodGhpcwogIC8vLyBoYW5kbGVzIGJvdGggbnVsbC1hd2FyZSBhbmQgbm9uLW51bGwtYXdhcmUgbWV0aG9kIGludm9jYXRpb25zKS4KICBFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0IGluZmVyTWV0aG9kSW52b2NhdGlvbigKICAgICAga2VybmVsLkV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAga2VybmVsLkV4cHJlc3Npb24gcmVjZWl2ZXIsCiAgICAgIGludCBmaWxlT2Zmc2V0LAogICAgICBib29sIGlzSW1wbGljaXRDYWxsLAogICAgICBEYXJ0VHlwZSB0eXBlQ29udGV4dCwKICAgICAge1ZhcmlhYmxlRGVjbGFyYXRpb24gcmVjZWl2ZXJWYXJpYWJsZSwKICAgICAgTWV0aG9kSW52b2NhdGlvbiBkZXN1Z2FyZWRJbnZvY2F0aW9uLAogICAgICBPYmplY3QgaW50ZXJmYWNlTWVtYmVyLAogICAgICBOYW1lIG1ldGhvZE5hbWUsCiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHN9KSB7CiAgICAvLyBGaXJzdCBpbmZlciB0aGUgcmVjZWl2ZXIgc28gd2UgY2FuIGxvb2sgdXAgdGhlIG1ldGhvZCB0aGF0IHdhcyBpbnZva2VkLgogICAgdmFyIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyID09IG51bGwKICAgICAgICA/IHRoaXNUeXBlCiAgICAgICAgOiBpbmZlckV4cHJlc3Npb24ocmVjZWl2ZXIsIGNvbnN0IFVua25vd25UeXBlKCksIHRydWUpOwogICAgcmVjZWl2ZXJWYXJpYWJsZT8udHlwZSA9IHJlY2VpdmVyVHlwZTsKICAgIGlmIChkZXN1Z2FyZWRJbnZvY2F0aW9uICE9IG51bGwpIHsKICAgICAgaW50ZXJmYWNlTWVtYmVyID0KICAgICAgICAgIGZpbmRNZXRob2RJbnZvY2F0aW9uTWVtYmVyKHJlY2VpdmVyVHlwZSwgZGVzdWdhcmVkSW52b2NhdGlvbik7CiAgICAgIG1ldGhvZE5hbWUgPSBkZXN1Z2FyZWRJbnZvY2F0aW9uLm5hbWU7CiAgICAgIGFyZ3VtZW50cyA9IGRlc3VnYXJlZEludm9jYXRpb24uYXJndW1lbnRzOwogICAgfQogICAgYm9vbCBpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3IgPSBpbnRlcmZhY2VNZW1iZXIgaXMgUHJvY2VkdXJlICYmCiAgICAgICAgdHlwZVNjaGVtYUVudmlyb25tZW50LmlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvckFuZFR5cGUoCiAgICAgICAgICAgIGludGVyZmFjZU1lbWJlciwgcmVjZWl2ZXJUeXBlKTsKICAgIHZhciBjYWxsZWVUeXBlID0gZ2V0Q2FsbGVlVHlwZShpbnRlcmZhY2VNZW1iZXIsIHJlY2VpdmVyVHlwZSk7CiAgICB2YXIgZnVuY3Rpb25UeXBlID0gZ2V0Q2FsbGVlRnVuY3Rpb25UeXBlKGNhbGxlZVR5cGUsICFpc0ltcGxpY2l0Q2FsbCk7CgogICAgaWYgKGludGVyZmFjZU1lbWJlciAhPSBudWxsICYmCiAgICAgICAgY2FsbGVlVHlwZSBpcyEgRHluYW1pY1R5cGUgJiYKICAgICAgICBjYWxsZWVUeXBlICE9IGNvcmVUeXBlcy5mdW5jdGlvbkNsYXNzLnJhd1R5cGUgJiYKICAgICAgICBpZGVudGljYWwoZnVuY3Rpb25UeXBlLCB1bmtub3duRnVuY3Rpb24pKSB7CiAgICAgIHZhciBwYXJlbnQgPSBleHByZXNzaW9uLnBhcmVudDsKICAgICAga2VybmVsLkV4cHJlc3Npb24gZXJyb3IgPSBoZWxwZXIud3JhcEluUHJvYmxlbShleHByZXNzaW9uLAogICAgICAgICAgdGVtcGxhdGVJbnZva2VOb25GdW5jdGlvbi53aXRoQXJndW1lbnRzKG1ldGhvZE5hbWUubmFtZSksIG5vTGVuZ3RoKTsKICAgICAgcGFyZW50Py5yZXBsYWNlQ2hpbGQoZXhwcmVzc2lvbiwgZXJyb3IpOwogICAgICByZXR1cm4gbmV3IEV4cHJlc3Npb25JbmZlcmVuY2VSZXN1bHQobnVsbCwgY29uc3QgRHluYW1pY1R5cGUoKSk7CiAgICB9CiAgICB2YXIgY2hlY2tLaW5kID0gcHJlQ2hlY2tJbnZvY2F0aW9uQ29udHJhdmFyaWFuY2UocmVjZWl2ZXIsIHJlY2VpdmVyVHlwZSwKICAgICAgICBpbnRlcmZhY2VNZW1iZXIsIGRlc3VnYXJlZEludm9jYXRpb24sIGFyZ3VtZW50cywgZXhwcmVzc2lvbik7CiAgICB2YXIgaW5mZXJlbmNlUmVzdWx0ID0gaW5mZXJJbnZvY2F0aW9uKHR5cGVDb250ZXh0LCBmaWxlT2Zmc2V0LCBmdW5jdGlvblR5cGUsCiAgICAgICAgZnVuY3Rpb25UeXBlLnJldHVyblR5cGUsIGFyZ3VtZW50cywKICAgICAgICBpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3I6IGlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvciwKICAgICAgICByZWNlaXZlclR5cGU6IHJlY2VpdmVyVHlwZSk7CiAgICB2YXIgaW5mZXJyZWRUeXBlID0gaW5mZXJlbmNlUmVzdWx0LnR5cGU7CiAgICBpZiAobWV0aG9kTmFtZS5uYW1lID09ICc9PScpIHsKICAgICAgaW5mZXJyZWRUeXBlID0gY29yZVR5cGVzLmJvb2xDbGFzcy5yYXdUeXBlOwogICAgfQogICAgaGFuZGxlSW52b2NhdGlvbkNvbnRyYXZhcmlhbmNlKGNoZWNrS2luZCwgZGVzdWdhcmVkSW52b2NhdGlvbiwgYXJndW1lbnRzLAogICAgICAgIGV4cHJlc3Npb24sIGluZmVycmVkVHlwZSwgZnVuY3Rpb25UeXBlLCBmaWxlT2Zmc2V0KTsKICAgIGlmICghaWRlbnRpY2FsKGludGVyZmFjZU1lbWJlciwgJ2NhbGwnKSkgewogICAgICBpZiAoaXNJbXBsaWNpdENhbGwgJiYKICAgICAgICAgIGludGVyZmFjZU1lbWJlciAhPSBudWxsICYmCiAgICAgICAgICAhKGludGVyZmFjZU1lbWJlciBpcyBQcm9jZWR1cmUgJiYKICAgICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLk1ldGhvZCkgJiYKICAgICAgICAgIHJlY2VpdmVyVHlwZSBpcyEgRHluYW1pY1R5cGUgJiYKICAgICAgICAgIHJlY2VpdmVyVHlwZSAhPSB0eXBlU2NoZW1hRW52aXJvbm1lbnQucmF3RnVuY3Rpb25UeXBlKSB7CiAgICAgICAgdmFyIHBhcmVudCA9IGV4cHJlc3Npb24ucGFyZW50OwogICAgICAgIHZhciBlcnJvck5vZGUgPSBoZWxwZXIud3JhcEluUHJvYmxlbSgKICAgICAgICAgICAgZXhwcmVzc2lvbiwKICAgICAgICAgICAgdGVtcGxhdGVJbXBsaWNpdENhbGxPZk5vbk1ldGhvZC53aXRoQXJndW1lbnRzKHJlY2VpdmVyVHlwZSksCiAgICAgICAgICAgIG5vTGVuZ3RoKTsKICAgICAgICBwYXJlbnQ/LnJlcGxhY2VDaGlsZChleHByZXNzaW9uLCBlcnJvck5vZGUpOwogICAgICB9CiAgICB9CgogICAgLy8gSWYgW2FyZ3VtZW50c10gd2VyZSBpbmZlcnJlZCwgY2hlY2sgdGhlbS4KICAgIC8vIFRPRE8oZG1pdHJ5YXMpOiBGaWd1cmUgb3V0IHdoeSBbbGlicmFyeV0gaXMgc29tZXRpbWVzIG51bGwuCiAgICBpZiAobGlicmFyeSAhPSBudWxsKSB7CiAgICAgIC8vIFthY3R1YWxSZWNlaXZlclR5cGVdLCBbaW50ZXJmYWNlVGFyZ2V0XSwgYW5kIFthY3R1YWxNZXRob2ROYW1lXSBiZWxvdwogICAgICAvLyBhcmUgZm9yIGEgd29ya2Fyb3VuZCBmb3IgdGhlIGNhc2VzIGxpa2UgdGhlIGZvbGxvd2luZzoKICAgICAgLy8KICAgICAgLy8gICAgIGNsYXNzIEMxIHsgdmFyIGYgPSBuZXcgQzIoKTsgfQogICAgICAvLyAgICAgY2xhc3MgQzIgeyBpbnQgY2FsbDxYIGV4dGVuZHMgbnVtPihYIHgpID0+IDQyOyB9CiAgICAgIC8vICAgICBtYWluKCkgeyBDMSBjID0gbmV3IEMxKCk7IGMuZigiZm9vYmFyIik7IH0KICAgICAgRGFydFR5cGUgYWN0dWFsUmVjZWl2ZXJUeXBlOwogICAgICBNZW1iZXIgaW50ZXJmYWNlVGFyZ2V0OwogICAgICBOYW1lIGFjdHVhbE1ldGhvZE5hbWU7CiAgICAgIGlmIChjYWxsZWVUeXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICBhY3R1YWxSZWNlaXZlclR5cGUgPSBjYWxsZWVUeXBlOwogICAgICAgIGludGVyZmFjZVRhcmdldCA9IG51bGw7CiAgICAgICAgYWN0dWFsTWV0aG9kTmFtZSA9IGNhbGxOYW1lOwogICAgICB9IGVsc2UgewogICAgICAgIGFjdHVhbFJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyVHlwZTsKICAgICAgICBpbnRlcmZhY2VUYXJnZXQgPSBpbnRlcmZhY2VNZW1iZXIgaXMgTWVtYmVyID8gaW50ZXJmYWNlTWVtYmVyIDogbnVsbDsKICAgICAgICBhY3R1YWxNZXRob2ROYW1lID0gbWV0aG9kTmFtZTsKICAgICAgfQogICAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5NZXRob2RJbnZvY2F0aW9uKAogICAgICAgICAgYWN0dWFsUmVjZWl2ZXJUeXBlLAogICAgICAgICAgdHlwZVNjaGVtYUVudmlyb25tZW50LAogICAgICAgICAgY2xhc3NIaWVyYXJjaHksCiAgICAgICAgICB0aGlzLAogICAgICAgICAgYWN0dWFsTWV0aG9kTmFtZSwKICAgICAgICAgIGludGVyZmFjZVRhcmdldCwKICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgIGhlbHBlci51cmksCiAgICAgICAgICBmaWxlT2Zmc2V0LAogICAgICAgICAgaW5mZXJyZWQ6IGdldEV4cGxpY2l0VHlwZUFyZ3VtZW50cyhhcmd1bWVudHMpID09IG51bGwpOwogICAgfQoKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvbkluZmVyZW5jZVJlc3VsdChudWxsLCBpbmZlcnJlZFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBpbmZlclBhcmFtZXRlckluaXRpYWxpemVyKEluZmVyZW5jZUhlbHBlciBoZWxwZXIsCiAgICAgIGtlcm5lbC5FeHByZXNzaW9uIGluaXRpYWxpemVyLCBEYXJ0VHlwZSBkZWNsYXJlZFR5cGUpIHsKICAgIGFzc2VydChjbG9zdXJlQ29udGV4dCA9PSBudWxsKTsKICAgIHRoaXMuaGVscGVyID0gaGVscGVyOwogICAgYXNzZXJ0KGRlY2xhcmVkVHlwZSAhPSBudWxsKTsKICAgIHZhciBhY3R1YWxUeXBlID0gaW5mZXJFeHByZXNzaW9uKGluaXRpYWxpemVyLCBkZWNsYXJlZFR5cGUsIHRydWUpOwogICAgZW5zdXJlQXNzaWduYWJsZSgKICAgICAgICBkZWNsYXJlZFR5cGUsIGFjdHVhbFR5cGUsIGluaXRpYWxpemVyLCBpbml0aWFsaXplci5maWxlT2Zmc2V0KTsKICAgIHRoaXMuaGVscGVyID0gbnVsbDsKICB9CgogIC8vLyBQZXJmb3JtcyB0aGUgY29yZSB0eXBlIGluZmVyZW5jZSBhbGdvcml0aG0gZm9yIHByb3BlcnR5IGdldHMgKHRoaXMgaGFuZGxlcwogIC8vLyBib3RoIG51bGwtYXdhcmUgYW5kIG5vbi1udWxsLWF3YXJlIHByb3BlcnR5IGdldHMpLgogIHZvaWQgaW5mZXJQcm9wZXJ0eUdldChFeHByZXNzaW9uIGV4cHJlc3Npb24sIEV4cHJlc3Npb24gcmVjZWl2ZXIsCiAgICAgIGludCBmaWxlT2Zmc2V0LCBEYXJ0VHlwZSB0eXBlQ29udGV4dCwKICAgICAge1ZhcmlhYmxlRGVjbGFyYXRpb24gcmVjZWl2ZXJWYXJpYWJsZSwKICAgICAgUHJvcGVydHlHZXQgZGVzdWdhcmVkR2V0LAogICAgICBPYmplY3QgaW50ZXJmYWNlTWVtYmVyLAogICAgICBOYW1lIHByb3BlcnR5TmFtZX0pIHsKICAgIC8vIEZpcnN0IGluZmVyIHRoZSByZWNlaXZlciBzbyB3ZSBjYW4gbG9vayB1cCB0aGUgZ2V0dGVyIHRoYXQgd2FzIGludm9rZWQuCiAgICBEYXJ0VHlwZSByZWNlaXZlclR5cGU7CiAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkgewogICAgICByZWNlaXZlclR5cGUgPSB0aGlzVHlwZTsKICAgIH0gZWxzZSB7CiAgICAgIGluZmVyRXhwcmVzc2lvbihyZWNlaXZlciwgY29uc3QgVW5rbm93blR5cGUoKSwgdHJ1ZSk7CiAgICAgIHJlY2VpdmVyVHlwZSA9IGdldEluZmVycmVkVHlwZShyZWNlaXZlciwgdGhpcyk7CiAgICB9CiAgICByZWNlaXZlclZhcmlhYmxlPy50eXBlID0gcmVjZWl2ZXJUeXBlOwogICAgcHJvcGVydHlOYW1lID8/PSBkZXN1Z2FyZWRHZXQubmFtZTsKICAgIGlmIChkZXN1Z2FyZWRHZXQgIT0gbnVsbCkgewogICAgICBpbnRlcmZhY2VNZW1iZXIgPSBmaW5kSW50ZXJmYWNlTWVtYmVyKAogICAgICAgICAgcmVjZWl2ZXJUeXBlLCBwcm9wZXJ0eU5hbWUsIGZpbGVPZmZzZXQsCiAgICAgICAgICBlcnJvclRlbXBsYXRlOiB0ZW1wbGF0ZVVuZGVmaW5lZEdldHRlciwKICAgICAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24sCiAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIpOwogICAgICBpZiAoaW50ZXJmYWNlTWVtYmVyIGlzIE1lbWJlcikgewogICAgICAgIGlmIChpbnN0cnVtZW50YXRpb24gIT0gbnVsbCAmJiByZWNlaXZlclR5cGUgPT0gY29uc3QgRHluYW1pY1R5cGUoKSkgewogICAgICAgICAgaW5zdHJ1bWVudGF0aW9uLnJlY29yZCh1cmksIGRlc3VnYXJlZEdldC5maWxlT2Zmc2V0LCAndGFyZ2V0JywKICAgICAgICAgICAgICBuZXcgSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JNZW1iZXIoaW50ZXJmYWNlTWVtYmVyKSk7CiAgICAgICAgfQogICAgICAgIGRlc3VnYXJlZEdldC5pbnRlcmZhY2VUYXJnZXQgPSBpbnRlcmZhY2VNZW1iZXI7CiAgICAgIH0KICAgIH0KICAgIHZhciBpbmZlcnJlZFR5cGUgPSBnZXRDYWxsZWVUeXBlKGludGVyZmFjZU1lbWJlciwgcmVjZWl2ZXJUeXBlKTsKICAgIHZhciByZXBsYWNlZEV4cHJlc3Npb24gPSBoYW5kbGVQcm9wZXJ0eUdldENvbnRyYXZhcmlhbmNlKHJlY2VpdmVyLAogICAgICAgIGludGVyZmFjZU1lbWJlciwgZGVzdWdhcmVkR2V0LCBleHByZXNzaW9uLCBpbmZlcnJlZFR5cGUsIGZpbGVPZmZzZXQpOwogICAgaWYgKChpbnRlcmZhY2VNZW1iZXIgaXMgUHJvY2VkdXJlICYmCiAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmtpbmQgPT0gUHJvY2VkdXJlS2luZC5NZXRob2QpKSB7CiAgICAgIGluZmVycmVkVHlwZSA9CiAgICAgICAgICBpbnN0YW50aWF0ZVRlYXJPZmYoaW5mZXJyZWRUeXBlLCB0eXBlQ29udGV4dCwgcmVwbGFjZWRFeHByZXNzaW9uKTsKICAgIH0KICAgIHN0b3JlSW5mZXJyZWRUeXBlKGV4cHJlc3Npb24sIGluZmVycmVkVHlwZSk7CiAgfQoKICAvLy8gTW9kaWZpZXMgYSB0eXBlIGFzIGFwcHJvcHJpYXRlIHdoZW4gaW5mZXJyaW5nIGEgY2xvc3VyZSByZXR1cm4gdHlwZS4KICBEYXJ0VHlwZSBpbmZlclJldHVyblR5cGUoRGFydFR5cGUgcmV0dXJuVHlwZSkgewogICAgcmV0dXJuIHJldHVyblR5cGUgPz8gdHlwZVNjaGVtYUVudmlyb25tZW50Lm51bGxUeXBlOwogIH0KCiAgLy8vIFBlcmZvcm1zIHR5cGUgaW5mZXJlbmNlIG9uIHRoZSBnaXZlbiBbc3RhdGVtZW50XS4KICAvLy8KICAvLy8gRGVyaXZlZCBjbGFzc2VzIHNob3VsZCBvdmVycmlkZSB0aGlzIG1ldGhvZCB3aXRoIGxvZ2ljIHRoYXQgZGlzcGF0Y2hlcyBvbgogIC8vLyB0aGUgc3RhdGVtZW50IHR5cGUgYW5kIGNhbGxzIHRoZSBhcHByb3ByaWF0ZSBzcGVjaWFsaXplZCAiaW5mZXIiIG1ldGhvZC4KICB2b2lkIGluZmVyU3RhdGVtZW50KFN0YXRlbWVudCBzdGF0ZW1lbnQpOwoKICAvLy8gUGVyZm9ybXMgdGhlIHR5cGUgaW5mZXJlbmNlIHN0ZXBzIG5lY2Vzc2FyeSB0byBpbnN0YW50aWF0ZSBhIHRlYXItb2ZmCiAgLy8vIChpZiBuZWNlc3NhcnkpLgogIERhcnRUeXBlIGluc3RhbnRpYXRlVGVhck9mZigKICAgICAgRGFydFR5cGUgdGVhcm9mZlR5cGUsIERhcnRUeXBlIGNvbnRleHQsIEV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgaWYgKHRlYXJvZmZUeXBlIGlzIEZ1bmN0aW9uVHlwZSAmJgogICAgICAgIGNvbnRleHQgaXMgRnVuY3Rpb25UeXBlICYmCiAgICAgICAgY29udGV4dC50eXBlUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgIHZhciB0eXBlUGFyYW1ldGVycyA9IHRlYXJvZmZUeXBlLnR5cGVQYXJhbWV0ZXJzOwogICAgICBpZiAodHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICAgIHZhciBpbmZlcnJlZFR5cGVzID0gbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCgKICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBjb25zdCBVbmtub3duVHlwZSgpKTsKICAgICAgICB2YXIgaW5zdGFudGlhdGVkVHlwZSA9IHRlYXJvZmZUeXBlLndpdGhvdXRUeXBlUGFyYW1ldGVyczsKICAgICAgICB0eXBlU2NoZW1hRW52aXJvbm1lbnQuaW5mZXJHZW5lcmljRnVuY3Rpb25PclR5cGUoCiAgICAgICAgICAgIGluc3RhbnRpYXRlZFR5cGUsIHR5cGVQYXJhbWV0ZXJzLCBbXSwgW10sIGNvbnRleHQsIGluZmVycmVkVHlwZXMpOwogICAgICAgIGlmICghaXNUb3BMZXZlbCkgewogICAgICAgICAgdmFyIHBhcmVudCA9IGV4cHJlc3Npb24ucGFyZW50OwogICAgICAgICAgcGFyZW50LnJlcGxhY2VDaGlsZCgKICAgICAgICAgICAgICBleHByZXNzaW9uLAogICAgICAgICAgICAgIG5ldyBJbnN0YW50aWF0aW9uKGV4cHJlc3Npb24sIGluZmVycmVkVHlwZXMpCiAgICAgICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBleHByZXNzaW9uLmZpbGVPZmZzZXQpOwogICAgICAgIH0KICAgICAgICB2YXIgc3Vic3RpdHV0aW9uID0KICAgICAgICAgICAgU3Vic3RpdHV0aW9uLmZyb21QYWlycyh0eXBlUGFyYW1ldGVycywgaW5mZXJyZWRUeXBlcyk7CiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShpbnN0YW50aWF0ZWRUeXBlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRlYXJvZmZUeXBlOwogIH0KCiAgLy8vIFRydWUgaWYgdGhlIHJldHVybmVkIFt0eXBlXSBoYXMgbm9uLWNvdmFyaWFudCBvY2N1cnJlbmNlcyBvZiBhbnkgb2YKICAvLy8gW2NsYXNzX10ncyB0eXBlIHBhcmFtZXRlcnMuCiAgLy8vCiAgLy8vIEEgbm9uLWNvdmFyaWFudCBvY2N1cnJlbmNlIG9mIGEgdHlwZSBwYXJhbWV0ZXIgaXMgZWl0aGVyIGEgY29udHJhdmFyaWFudAogIC8vLyBvciBhbiBpbnZhcmlhbnQgcG9zaXRpb24uCiAgLy8vCiAgLy8vIEEgY29udHJhdmFyaWFudCBwb3NpdGlvbiBpcyB0byB0aGUgbGVmdCBvZiBhbiBvZGQgbnVtYmVyIG9mIGFycm93cy4gRm9yCiAgLy8vIGV4YW1wbGUsIFQgb2NjdXJzIGNvbnRyYXZhcmlhbnRseSBpbiBUIC0+IFQwLCBUMCAtPiAoVCAtPiBUMSksCiAgLy8vIChUMCAtPiBUKSAtPiBUMSBidXQgbm90IGluIChUIC0+IFQwKSAtPiBUMS4KICAvLy8KICAvLy8gQW4gaW52YXJpYW50IHBvc2l0aW9uIGlzIHdpdGhvdXQgYSBib3VuZCBvZiBhIHR5cGUgcGFyYW1ldGVyLiBGb3IgZXhhbXBsZSwKICAvLy8gVCBvY2N1cnMgaW52YXJpYW50bHkgaW4gYFMgRnVuY3Rpb248UyBleHRlbmRzIFQ+KClgIGFuZAogIC8vLyBgdm9pZCBGdW5jdGlvbjxTIGV4dGVuZHMgQzxUPj4oUylgLgogIHN0YXRpYyBib29sIHJldHVybmVkVHlwZVBhcmFtZXRlcnNPY2N1ck5vbkNvdmFyaWFudGx5KAogICAgICBDbGFzcyBjbGFzc18sIERhcnRUeXBlIHR5cGUpIHsKICAgIGlmIChjbGFzc18udHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgcmV0dXJuIGZhbHNlOwogICAgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5IGNoZWNrZXIgPQogICAgICAgIG5ldyBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHkoY2xhc3NfLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgICAvLyBXZSBhcmUgY2hlY2tpbmcgdGhlIHJldHVybmVkIHR5cGUgKGZpZWxkL2dldHRlciB0eXBlIG9yIHJldHVybgogICAgICAgICAgICAvLyB0eXBlIG9mIGEgbWV0aG9kKSBhbmQgdGhpcyBpcyBhIGNvdmFyaWFudCBwb3NpdGlvbi4KICAgICAgICAgICAgaW5pdGlhbFZhcmlhbmNlOiBWYXJpYW5jZS5jb3ZhcmlhbnQpOwogICAgcmV0dXJuIHR5cGUuYWNjZXB0KGNoZWNrZXIpOwogIH0KCiAgLy8vIERldGVybWluZXMgdGhlIGRpc3BhdGNoIGNhdGVnb3J5IG9mIGEgW01ldGhvZEludm9jYXRpb25dIGFuZCByZXR1cm5zIGEKICAvLy8gYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgYW4gImFzIiBjaGVjayB3aWxsIG5lZWQgdG8gYmUgYWRkZWQgZHVlIHRvCiAgLy8vIGNvbnRyYXZhcmlhbmNlLgogIE1ldGhvZENvbnRyYXZhcmlhbmNlQ2hlY2tLaW5kIHByZUNoZWNrSW52b2NhdGlvbkNvbnRyYXZhcmlhbmNlKAogICAgICBFeHByZXNzaW9uIHJlY2VpdmVyLAogICAgICBEYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIE9iamVjdCBpbnRlcmZhY2VNZW1iZXIsCiAgICAgIE1ldGhvZEludm9jYXRpb24gZGVzdWdhcmVkSW52b2NhdGlvbiwKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICBpZiAoaW50ZXJmYWNlTWVtYmVyIGlzIEZpZWxkIHx8CiAgICAgICAgaW50ZXJmYWNlTWVtYmVyIGlzIFByb2NlZHVyZSAmJgogICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLkdldHRlcikgewogICAgICB2YXIgZ2V0VHlwZSA9IGdldENhbGxlZVR5cGUoaW50ZXJmYWNlTWVtYmVyLCByZWNlaXZlclR5cGUpOwogICAgICBpZiAoZ2V0VHlwZSBpcyBEeW5hbWljVHlwZSkgewogICAgICAgIHJldHVybiBNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZC5ub25lOwogICAgICB9CiAgICAgIGlmIChyZWNlaXZlciAhPSBudWxsICYmIHJlY2VpdmVyIGlzISBUaGlzRXhwcmVzc2lvbikgewogICAgICAgIGlmICgoaW50ZXJmYWNlTWVtYmVyIGlzIEZpZWxkICYmCiAgICAgICAgICAgICAgICByZXR1cm5lZFR5cGVQYXJhbWV0ZXJzT2NjdXJOb25Db3ZhcmlhbnRseSgKICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIuZW5jbG9zaW5nQ2xhc3MsIGludGVyZmFjZU1lbWJlci50eXBlKSkgfHwKICAgICAgICAgICAgKGludGVyZmFjZU1lbWJlciBpcyBQcm9jZWR1cmUgJiYKICAgICAgICAgICAgICAgIHJldHVybmVkVHlwZVBhcmFtZXRlcnNPY2N1ck5vbkNvdmFyaWFudGx5KAogICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcywKICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIuZnVuY3Rpb24ucmV0dXJuVHlwZSkpKSB7CiAgICAgICAgICByZXR1cm4gTWV0aG9kQ29udHJhdmFyaWFuY2VDaGVja0tpbmQuY2hlY2tHZXR0ZXJSZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHJlY2VpdmVyICE9IG51bGwgJiYKICAgICAgICByZWNlaXZlciBpcyEgVGhpc0V4cHJlc3Npb24gJiYKICAgICAgICBpbnRlcmZhY2VNZW1iZXIgaXMgUHJvY2VkdXJlICYmCiAgICAgICAgcmV0dXJuZWRUeXBlUGFyYW1ldGVyc09jY3VyTm9uQ292YXJpYW50bHkoCiAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcywKICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmZ1bmN0aW9uLnJldHVyblR5cGUpKSB7CiAgICAgIHJldHVybiBNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZC5jaGVja01ldGhvZFJldHVybjsKICAgIH0KICAgIHJldHVybiBNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZC5ub25lOwogIH0KCiAgLy8vIElmIHRoZSBnaXZlbiBbdHlwZV0gaXMgYSBbVHlwZVBhcmFtZXRlclR5cGVdLCByZXNvbHZlIGl0IHRvIGl0cyBib3VuZC4KICBEYXJ0VHlwZSByZXNvbHZlVHlwZVBhcmFtZXRlcihEYXJ0VHlwZSB0eXBlKSB7CiAgICBEYXJ0VHlwZSByZXNvbHZlT25lU3RlcChEYXJ0VHlwZSB0eXBlKSB7CiAgICAgIGlmICh0eXBlIGlzIFR5cGVQYXJhbWV0ZXJUeXBlKSB7CiAgICAgICAgcmV0dXJuIHR5cGUuYm91bmQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KCiAgICB2YXIgcmVzb2x2ZWQgPSByZXNvbHZlT25lU3RlcCh0eXBlKTsKICAgIGlmIChyZXNvbHZlZCA9PSBudWxsKSByZXR1cm4gdHlwZTsKCiAgICAvLyBEZXRlY3QgY2lyY3VsYXJpdGllcyB1c2luZyB0aGUgdG9ydG9pc2UtYW5kLWhhcmUgYWxnb3JpdGhtLgogICAgdHlwZSA9IHJlc29sdmVkOwogICAgRGFydFR5cGUgaGFyZSA9IHJlc29sdmVPbmVTdGVwKHR5cGUpOwogICAgaWYgKGhhcmUgPT0gbnVsbCkgcmV0dXJuIHR5cGU7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoaWRlbnRpY2FsKHR5cGUsIGhhcmUpKSB7CiAgICAgICAgLy8gV2UgZm91bmQgYSBjaXJjdWxhcml0eS4gIEdpdmUgdXAgYW5kIHJldHVybiBgZHluYW1pY2AuCiAgICAgICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICAgIH0KCiAgICAgIC8vIEhhcmUgdGFrZXMgdHdvIHN0ZXBzCiAgICAgIHZhciBzdGVwMSA9IHJlc29sdmVPbmVTdGVwKGhhcmUpOwogICAgICBpZiAoc3RlcDEgPT0gbnVsbCkgcmV0dXJuIGhhcmU7CiAgICAgIHZhciBzdGVwMiA9IHJlc29sdmVPbmVTdGVwKHN0ZXAxKTsKICAgICAgaWYgKHN0ZXAyID09IG51bGwpIHJldHVybiBoYXJlOwogICAgICBoYXJlID0gc3RlcDI7CgogICAgICAvLyBUb3J0b2lzZSB0YWtlcyBvbmUgc3RlcAogICAgICB0eXBlID0gcmVzb2x2ZU9uZVN0ZXAodHlwZSk7CiAgICB9CiAgfQoKICBEYXJ0VHlwZSB3cmFwRnV0dXJlT3JUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICBpZGVudGljYWwodHlwZS5jbGFzc05vZGUsIGNvcmVUeXBlcy5mdXR1cmVPckNsYXNzKSkgewogICAgICByZXR1cm4gdHlwZTsKICAgIH0KICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogSWYgW3R5cGVdIGlzIGEgc3VidHlwZSBvZiBgRnV0dXJlYCwgc2hvdWxkIHdlIGp1c3QKICAgIC8vIHJldHVybiBpdCB1bm1vZGlmaWVkPwogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKAogICAgICAgIGNvcmVUeXBlcy5mdXR1cmVPckNsYXNzLCA8RGFydFR5cGU+W3R5cGUgPz8gY29uc3QgRHluYW1pY1R5cGUoKV0pOwogIH0KCiAgRGFydFR5cGUgd3JhcEZ1dHVyZVR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgdmFyIHR5cGVXaXRob3V0RnV0dXJlT3IgPSB0eXBlID8/IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoCiAgICAgICAgY29yZVR5cGVzLmZ1dHVyZUNsYXNzLCA8RGFydFR5cGU+W3R5cGVXaXRob3V0RnV0dXJlT3JdKTsKICB9CgogIERhcnRUeXBlIHdyYXBUeXBlKERhcnRUeXBlIHR5cGUsIENsYXNzIGNsYXNzXykgewogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGNsYXNzXywgPERhcnRUeXBlPlt0eXBlID8/IGNvbnN0IER5bmFtaWNUeXBlKCldKTsKICB9CgogIHZvaWQgX2ZvckVhY2hBcmd1bWVudCgKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywgdm9pZCBjYWxsYmFjayhTdHJpbmcgbmFtZSwgRXhwcmVzc2lvbiBleHByZXNzaW9uKSkgewogICAgZm9yICh2YXIgZXhwcmVzc2lvbiBpbiBhcmd1bWVudHMucG9zaXRpb25hbCkgewogICAgICBjYWxsYmFjayhudWxsLCBleHByZXNzaW9uKTsKICAgIH0KICAgIGZvciAodmFyIG5hbWVkRXhwcmVzc2lvbiBpbiBhcmd1bWVudHMubmFtZWQpIHsKICAgICAgY2FsbGJhY2sobmFtZWRFeHByZXNzaW9uLm5hbWUsIG5hbWVkRXhwcmVzc2lvbi52YWx1ZSk7CiAgICB9CiAgfQoKICBNZW1iZXIgX2dldEludGVyZmFjZU1lbWJlcigKICAgICAgQ2xhc3MgY2xhc3NfLCBOYW1lIG5hbWUsIGJvb2wgc2V0dGVyLCBpbnQgY2hhck9mZnNldCkgewogICAgTWVtYmVyIG1lbWJlciA9IGVuZ2luZS5oaWVyYXJjaHlCdWlsZGVyLmdldENvbWJpbmVkTWVtYmVyU2lnbmF0dXJlS2VybmVsKAogICAgICAgIGNsYXNzXywgbmFtZSwgc2V0dGVyLCBjaGFyT2Zmc2V0LCBsaWJyYXJ5KTsKICAgIGlmIChtZW1iZXIgPT0gbnVsbCAmJiAobGlicmFyeT8uaXNQYXRjaCA/PyBmYWxzZSkpIHsKICAgICAgLy8gVE9ETyhkbWl0cnlhcyk6IEhhY2sgZm9yIHBhcnRzLgogICAgICBtZW1iZXIgPz89CiAgICAgICAgICBjbGFzc0hpZXJhcmNoeS5nZXRJbnRlcmZhY2VNZW1iZXIoY2xhc3NfLCBuYW1lLCBzZXR0ZXI6IHNldHRlcik7CiAgICB9CiAgICByZXR1cm4gVHlwZUluZmVyZW5jZUVuZ2luZS5yZXNvbHZlSW5mZXJlbmNlTm9kZShtZW1iZXIpOwogIH0KCiAgLy8vIERldGVybWluZXMgaWYgdGhlIGdpdmVuIFtleHByZXNzaW9uXSdzIHR5cGUgaXMgcHJlY2lzZWx5IGtub3duIGF0IGNvbXBpbGUKICAvLy8gdGltZS4KICAvLy8KICAvLy8gSWYgaXQgaXMsIGFuIGVycm9yIG1lc3NhZ2UgdGVtcGxhdGUgaXMgcmV0dXJuZWQsIHdoaWNoIGNhbiBiZSB1c2VkIGJ5IHRoZQogIC8vLyBjYWxsZXIgdG8gcmVwb3J0IGFuIGludmFsaWQgY2FzdC4gIE90aGVyd2lzZSwgYG51bGxgIGlzIHJldHVybmVkLgogIFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oRGFydFR5cGUsIERhcnRUeXBlKT4gX2dldFByZWNpc2VUeXBlRXJyb3JUZW1wbGF0ZSgKICAgICAgRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBMaXN0TGl0ZXJhbCkgewogICAgICByZXR1cm4gdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxMaXN0OwogICAgfQogICAgaWYgKGV4cHJlc3Npb24gaXMgTWFwTGl0ZXJhbCkgewogICAgICByZXR1cm4gdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxNYXA7CiAgICB9CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBTZXRMaXRlcmFsKSB7CiAgICAgIHJldHVybiB0ZW1wbGF0ZUludmFsaWRDYXN0TGl0ZXJhbFNldDsKICAgIH0KICAgIGlmIChleHByZXNzaW9uIGlzIEZ1bmN0aW9uRXhwcmVzc2lvbikgewogICAgICByZXR1cm4gdGVtcGxhdGVJbnZhbGlkQ2FzdEZ1bmN0aW9uRXhwcjsKICAgIH0KICAgIGlmIChleHByZXNzaW9uIGlzIENvbnN0cnVjdG9ySW52b2NhdGlvbikgewogICAgICByZXR1cm4gdGVtcGxhdGVJbnZhbGlkQ2FzdE5ld0V4cHI7CiAgICB9CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBTdGF0aWNHZXQpIHsKICAgICAgdmFyIHRhcmdldCA9IGV4cHJlc3Npb24udGFyZ2V0OwogICAgICBpZiAodGFyZ2V0IGlzIFByb2NlZHVyZSAmJiB0YXJnZXQua2luZCA9PSBQcm9jZWR1cmVLaW5kLk1ldGhvZCkgewogICAgICAgIGlmICh0YXJnZXQuZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIHRlbXBsYXRlSW52YWxpZENhc3RTdGF0aWNNZXRob2Q7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB0ZW1wbGF0ZUludmFsaWRDYXN0VG9wTGV2ZWxGdW5jdGlvbjsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBWYXJpYWJsZUdldCkgewogICAgICB2YXIgdmFyaWFibGUgPSBleHByZXNzaW9uLnZhcmlhYmxlOwogICAgICBpZiAodmFyaWFibGUgaXMgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50ICYmCiAgICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQuaXNMb2NhbEZ1bmN0aW9uKHZhcmlhYmxlKSkgewogICAgICAgIHJldHVybiB0ZW1wbGF0ZUludmFsaWRDYXN0TG9jYWxGdW5jdGlvbjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBib29sIF9zaG91bGRUZWFyT2ZmQ2FsbChEYXJ0VHlwZSBleHBlY3RlZFR5cGUsIERhcnRUeXBlIGFjdHVhbFR5cGUpIHsKICAgIGlmIChleHBlY3RlZFR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIGV4cGVjdGVkVHlwZS5jbGFzc05vZGUgPT0gdHlwZVNjaGVtYUVudmlyb25tZW50LmZ1dHVyZU9yQ2xhc3MpIHsKICAgICAgZXhwZWN0ZWRUeXBlID0gKGV4cGVjdGVkVHlwZSBhcyBJbnRlcmZhY2VUeXBlKS50eXBlQXJndW1lbnRzWzBdOwogICAgfQogICAgaWYgKGV4cGVjdGVkVHlwZSBpcyBGdW5jdGlvblR5cGUpIHJldHVybiB0cnVlOwogICAgaWYgKGV4cGVjdGVkVHlwZSA9PSB0eXBlU2NoZW1hRW52aXJvbm1lbnQucmF3RnVuY3Rpb25UeXBlKSB7CiAgICAgIGlmICghdHlwZVNjaGVtYUVudmlyb25tZW50LmlzU3VidHlwZU9mKGFjdHVhbFR5cGUsIGV4cGVjdGVkVHlwZSkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgTWl4aW5JbmZlcnJlciB7CiAgZmluYWwgQ29yZVR5cGVzIGNvcmVUeXBlczsKICBmaW5hbCBUeXBlQ29uc3RyYWludEdhdGhlcmVyIGdhdGhlcmVyOwoKICBNaXhpbkluZmVycmVyKHRoaXMuY29yZVR5cGVzLCB0aGlzLmdhdGhlcmVyKTsKCiAgU3VwZXJ0eXBlIGFzSW5zdGFudGlhdGlvbk9mKFN1cGVydHlwZSB0eXBlLCBDbGFzcyBzdXBlcmNsYXNzKTsKCiAgdm9pZCByZXBvcnRQcm9ibGVtKE1lc3NhZ2UgbWVzc2FnZSwgQ2xhc3MgY2xzKTsKCiAgdm9pZCBnZW5lcmF0ZUNvbnN0cmFpbnRzKAogICAgICBDbGFzcyBtaXhpbkNsYXNzLCBTdXBlcnR5cGUgYmFzZVR5cGUsIFN1cGVydHlwZSBtaXhpblN1cGVydHlwZSkgewogICAgaWYgKG1peGluU3VwZXJ0eXBlLnR5cGVBcmd1bWVudHMuaXNFbXB0eSkgewogICAgICAvLyBUaGUgc3VwZXJ0eXBlIGNvbnN0cmFpbnQgaXNuJ3QgZ2VuZXJpYzsgaXQgZG9lc24ndCBjb25zdHJhaW4gYW55dGhpbmcuCiAgICB9IGVsc2UgaWYgKG1peGluU3VwZXJ0eXBlLmNsYXNzTm9kZS5pc0Fub255bW91c01peGluKSB7CiAgICAgIC8vIFdlIGhhdmUgZWl0aGVyIGEgbWl4aW4gZGVjbGFyYXRpb24gYG1peGluIE08WDAsIC4uLiwgWG4+IG9uIFMwLCBTMWAgb3IKICAgICAgLy8gYSBWTS1zdHlsZSBzdXBlciBtaXhpbiBgYWJzdHJhY3QgY2xhc3MgTTxYMCwgLi4uLCBYbj4gZXh0ZW5kcyBTMCB3aXRoCiAgICAgIC8vIFMxYCB3aGVyZSBTMCBhbmQgUzEgYXJlIHN1cGVyY2xhc3MgY29uc3RyYWludHMgdGhhdCBwb3NzaWJseSBoYXZlIHR5cGUKICAgICAgLy8gYXJndW1lbnRzLgogICAgICAvLwogICAgICAvLyBJdCBoYXMgYmVlbiBjb21waWxlZCBieSBuYW1pbmcgdGhlIHN1cGVyY2xhc3MgdG8gZWl0aGVyOgogICAgICAvLwogICAgICAvLyBhYnN0cmFjdCBjbGFzcyBTMCZTMTwuLi4+IGV4dGVuZHMgT2JqZWN0IGltcGxlbWVudHMgUzAsIFMxIHt9CiAgICAgIC8vIGFic3RyYWN0IGNsYXNzIE08WDAsIC4uLiwgWG4+IGV4dGVuZHMgUzAmUzE8Li4uPiAuLi4KICAgICAgLy8KICAgICAgLy8gZm9yIGEgbWl4aW4gZGVjbGFyYXRpb24sIG9yIGVsc2U6CiAgICAgIC8vCiAgICAgIC8vIGFic3RyYWN0IGNsYXNzIFMwJlMxPC4uLj4gPSBTMCB3aXRoIFMxOwogICAgICAvLyBhYnN0cmFjdCBjbGFzcyBNPFgwLCAuLi4sIFhuPiBleHRlbmRzIFMwJlMxPC4uLj4KICAgICAgLy8KICAgICAgLy8gZm9yIGEgVk0tc3R5bGUgc3VwZXIgbWl4aW4uICBUaGUgdHlwZSBwYXJhbWV0ZXJzIG9mIFMwJlMxIGFyZSB0aGUgWDAsCiAgICAgIC8vIC4uLiwgWG4gdGhhdCBvY2N1cmVkIGZyZWUgaW4gUzAgYW5kIFMxLiAgVHJlYXQgUzAgYW5kIFMxIGFzIHNlcGFyYXRlCiAgICAgIC8vIHN1cGVydHlwZSBjb25zdHJhaW50cyBieSByZWN1cnNpdmVseSBjYWxsaW5nIHRoaXMgYWxnb3JpdGhtLgogICAgICAvLwogICAgICAvLyBJbiB0aGUgRGFydCBWTSB0aGUgbWl4aW4gYXBwbGljYXRpb24gY2xhc3NlcyB0aGVtc2VsdmVzIGFyZSBhbGwKICAgICAgLy8gZWxpbWluYXRlZCBieSB0cmFuc2xhdGluZyB0aGVtIHRvIG5vcm1hbCBjbGFzc2VzLiAgSW4gdGhhdCBjYXNlLCB0aGUKICAgICAgLy8gbWl4aW4gYXBwZWFycyBhcyB0aGUgb25seSBpbnRlcmZhY2UgaW4gdGhlIGludHJvZHVjZWQgY2xhc3MuICBXZQogICAgICAvLyBzdXBwb3J0IHRocmVlIGZvcm1zIGZvciB0aGUgc3VwZXJjbGFzcyBjb25zdHJhaW50czoKICAgICAgLy8KICAgICAgLy8gYWJzdHJhY3QgY2xhc3MgUzAmUzE8Li4uPiBleHRlbmRzIE9iamVjdCBpbXBsZW1lbnRzIFMwLCBTMSB7fQogICAgICAvLyBhYnN0cmFjdCBjbGFzcyBTMCZTMTwuLi4+ID0gUzAgd2l0aCBTMTsKICAgICAgLy8gYWJzdHJhY3QgY2xhc3MgUzAmUzE8Li4uPiBleHRlbmRzIFMwIGltcGxlbWVudHMgUzEge30KICAgICAgdmFyIG1peGluU3VwZXJjbGFzcyA9IG1peGluU3VwZXJ0eXBlLmNsYXNzTm9kZTsKICAgICAgaWYgKG1peGluU3VwZXJjbGFzcy5taXhlZEluVHlwZSA9PSBudWxsICYmCiAgICAgICAgICBtaXhpblN1cGVyY2xhc3MuaW1wbGVtZW50ZWRUeXBlcy5sZW5ndGggIT0gMSAmJgogICAgICAgICAgKG1peGluU3VwZXJjbGFzcy5zdXBlcmNsYXNzICE9IGNvcmVUeXBlcy5vYmplY3RDbGFzcyB8fAogICAgICAgICAgICAgIG1peGluU3VwZXJjbGFzcy5pbXBsZW1lbnRlZFR5cGVzLmxlbmd0aCAhPSAyKSkgewogICAgICAgIHVuZXhwZWN0ZWQoCiAgICAgICAgICAgICdDb21waWxlci1nZW5lcmF0ZWQgbWl4aW4gYXBwbGljYXRpb25zIGhhdmUgYSBtaXhpbiBvciBlbHNlICcKICAgICAgICAgICAgICAgICdpbXBsZW1lbnQgZXhhY3RseSBvbmUgdHlwZScsCiAgICAgICAgICAgICckbWl4aW5TdXBlcmNsYXNzIGltcGxlbWVudHMgJwogICAgICAgICAgICAgICAgJyR7bWl4aW5TdXBlcmNsYXNzLmltcGxlbWVudGVkVHlwZXMubGVuZ3RofSB0eXBlcycsCiAgICAgICAgICAgIG1peGluU3VwZXJjbGFzcy5maWxlT2Zmc2V0LAogICAgICAgICAgICBtaXhpblN1cGVyY2xhc3MuZmlsZVVyaSk7CiAgICAgIH0KICAgICAgdmFyIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tU3VwZXJ0eXBlKG1peGluU3VwZXJ0eXBlKTsKICAgICAgU3VwZXJ0eXBlIHMwLCBzMTsKICAgICAgaWYgKG1peGluU3VwZXJjbGFzcy5pbXBsZW1lbnRlZFR5cGVzLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgczAgPSBtaXhpblN1cGVyY2xhc3MuaW1wbGVtZW50ZWRUeXBlc1swXTsKICAgICAgICBzMSA9IG1peGluU3VwZXJjbGFzcy5pbXBsZW1lbnRlZFR5cGVzWzFdOwogICAgICB9IGVsc2UgaWYgKG1peGluU3VwZXJjbGFzcy5pbXBsZW1lbnRlZFR5cGVzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgczAgPSBtaXhpblN1cGVyY2xhc3Muc3VwZXJ0eXBlOwogICAgICAgIHMxID0gbWl4aW5TdXBlcmNsYXNzLmltcGxlbWVudGVkVHlwZXMuZmlyc3Q7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgczAgPSBtaXhpblN1cGVyY2xhc3Muc3VwZXJ0eXBlOwogICAgICAgIHMxID0gbWl4aW5TdXBlcmNsYXNzLm1peGVkSW5UeXBlOwogICAgICB9CiAgICAgIHMwID0gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVTdXBlcnR5cGUoczApOwogICAgICBzMSA9IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlU3VwZXJ0eXBlKHMxKTsKICAgICAgZ2VuZXJhdGVDb25zdHJhaW50cyhtaXhpbkNsYXNzLCBiYXNlVHlwZSwgczApOwogICAgICBnZW5lcmF0ZUNvbnN0cmFpbnRzKG1peGluQ2xhc3MsIGJhc2VUeXBlLCBzMSk7CiAgICB9IGVsc2UgewogICAgICAvLyBGaW5kIHRoZSB0eXBlIFUwIHdoaWNoIGlzIGJhc2VUeXBlIGFzIGFuIGluc3RhbmNlIG9mIG1peGluU3VwZXJ0eXBlJ3MKICAgICAgLy8gY2xhc3MuCiAgICAgIFN1cGVydHlwZSBzdXBlcnR5cGUgPQogICAgICAgICAgYXNJbnN0YW50aWF0aW9uT2YoYmFzZVR5cGUsIG1peGluU3VwZXJ0eXBlLmNsYXNzTm9kZSk7CiAgICAgIGlmIChzdXBlcnR5cGUgPT0gbnVsbCkgewogICAgICAgIHJlcG9ydFByb2JsZW0oCiAgICAgICAgICAgIHRlbXBsYXRlTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3Mud2l0aEFyZ3VtZW50cyhtaXhpbkNsYXNzLm5hbWUsCiAgICAgICAgICAgICAgICBiYXNlVHlwZS5jbGFzc05vZGUubmFtZSwgbWl4aW5TdXBlcnR5cGUuYXNJbnRlcmZhY2VUeXBlKSwKICAgICAgICAgICAgbWl4aW5DbGFzcyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIEludGVyZmFjZVR5cGUgdTAgPSBTdWJzdGl0dXRpb24uZnJvbVN1cGVydHlwZShiYXNlVHlwZSkKICAgICAgICAgIC5zdWJzdGl0dXRlU3VwZXJ0eXBlKHN1cGVydHlwZSkKICAgICAgICAgIC5hc0ludGVyZmFjZVR5cGU7CiAgICAgIC8vIFdlIHdhbnQgdG8gc29sdmUgVTAgPSBTMCB3aGVyZSBTMCBpcyBtaXhpblN1cGVydHlwZSwgYnV0IHdlIG9ubHkgaGF2ZQogICAgICAvLyBhIHN1YnR5cGUgY29uc3RyYWludHMuICBTb2x2ZSBmb3IgZXF1YWxpdHkgYnkgc29sdmluZwogICAgICAvLyBib3RoIFUwIDw6IFMwIGFuZCBTMCA8OiBVMC4KICAgICAgSW50ZXJmYWNlVHlwZSBzMCA9IG1peGluU3VwZXJ0eXBlLmFzSW50ZXJmYWNlVHlwZTsKICAgICAgZ2F0aGVyZXIudHJ5U3VidHlwZU1hdGNoKHUwLCBzMCk7CiAgICAgIGdhdGhlcmVyLnRyeVN1YnR5cGVNYXRjaChzMCwgdTApOwogICAgfQogIH0KCiAgdm9pZCBpbmZlcihDbGFzcyBjbGFzc05vZGUpIHsKICAgIFN1cGVydHlwZSBtaXhlZEluVHlwZSA9IGNsYXNzTm9kZS5taXhlZEluVHlwZTsKICAgIGFzc2VydChtaXhlZEluVHlwZS50eXBlQXJndW1lbnRzLmV2ZXJ5KCh0KSA9PiB0ID09IGNvbnN0IFVua25vd25UeXBlKCkpKTsKICAgIC8vIE5vdGUgdGhhdCB3ZSBoYXZlIG5vIGFub255bW91cyBtaXhpbiBhcHBsaWNhdGlvbnMsIHRoZXkgaGF2ZSBhbGwKICAgIC8vIGJlZW4gbmFtZWQuICBOb3RlIGFsc28gdGhhdCBtaXhpbiBjb21wb3NpdGlvbiBoYXMgYmVlbiB0cmFuc2xhdGVkCiAgICAvLyBzbyB0aGF0IHdlIG9ubHkgaGF2ZSBtaXhpbiBhcHBsaWNhdGlvbnMgb2YgdGhlIGZvcm0gYFMgd2l0aCBNYC4KICAgIFN1cGVydHlwZSBiYXNlVHlwZSA9IGNsYXNzTm9kZS5zdXBlcnR5cGU7CiAgICBDbGFzcyBtaXhpbkNsYXNzID0gbWl4ZWRJblR5cGUuY2xhc3NOb2RlOwogICAgU3VwZXJ0eXBlIG1peGluU3VwZXJ0eXBlID0gbWl4aW5DbGFzcy5zdXBlcnR5cGU7CiAgICAvLyBHZW5lcmF0ZSBjb25zdHJhaW50cyBiYXNlZCBvbiB0aGUgbWl4aW4ncyBzdXBlcnR5cGUuCiAgICBnZW5lcmF0ZUNvbnN0cmFpbnRzKG1peGluQ2xhc3MsIGJhc2VUeXBlLCBtaXhpblN1cGVydHlwZSk7CiAgICAvLyBTb2x2ZSB0aGVtIHRvIGdldCBhIG1hcCBmcm9tIHR5cGUgcGFyYW1ldGVycyB0byB1cHBlciBhbmQgbG93ZXIKICAgIC8vIGJvdW5kcy4KICAgIHZhciByZXN1bHQgPSBnYXRoZXJlci5jb21wdXRlQ29uc3RyYWludHMoKTsKICAgIC8vIEdlbmVyYXRlIG5ldyB0eXBlIHBhcmFtZXRlcnMgd2l0aCB0aGUgc29sdXRpb24gYXMgYm91bmRzLgogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBwYXJhbWV0ZXJzID0gbWl4aW5DbGFzcy50eXBlUGFyYW1ldGVycy5tYXAoKHApIHsKICAgICAgdmFyIGNvbnN0cmFpbnQgPSByZXN1bHRbcF07CiAgICAgIC8vIEJlY2F1c2Ugd2Ugc29sdmVkIGZvciBlcXVhbGl0eSwgYSB2YWxpZCBzb2x1dGlvbiBoYXMgYSBwYXJhbWV0ZXIKICAgICAgLy8gZWl0aGVyIHVuY29uc3RyYWluZWQgb3IgZWxzZSB3aXRoIGlkZW50aWNhbCB1cHBlciBhbmQgbG93ZXIgYm91bmRzLgogICAgICBpZiAoY29uc3RyYWludCAhPSBudWxsICYmIGNvbnN0cmFpbnQudXBwZXIgIT0gY29uc3RyYWludC5sb3dlcikgewogICAgICAgIHJlcG9ydFByb2JsZW0oCiAgICAgICAgICAgIHRlbXBsYXRlTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3Mud2l0aEFyZ3VtZW50cyhtaXhpbkNsYXNzLm5hbWUsCiAgICAgICAgICAgICAgICBiYXNlVHlwZS5jbGFzc05vZGUubmFtZSwgbWl4aW5TdXBlcnR5cGUuYXNJbnRlcmZhY2VUeXBlKSwKICAgICAgICAgICAgbWl4aW5DbGFzcyk7CiAgICAgICAgcmV0dXJuIHA7CiAgICAgIH0KICAgICAgYXNzZXJ0KGNvbnN0cmFpbnQgPT0gbnVsbCB8fCBjb25zdHJhaW50LnVwcGVyID09IGNvbnN0cmFpbnQubG93ZXIpOwogICAgICBib29sIGV4YWN0ID0KICAgICAgICAgIGNvbnN0cmFpbnQgIT0gbnVsbCAmJiBjb25zdHJhaW50LnVwcGVyICE9IGNvbnN0IFVua25vd25UeXBlKCk7CiAgICAgIHJldHVybiBuZXcgVHlwZVBhcmFtZXRlcigKICAgICAgICAgIHAubmFtZSwgZXhhY3QgPyBjb25zdHJhaW50LnVwcGVyIDogcC5ib3VuZCwgcC5kZWZhdWx0VHlwZSk7CiAgICB9KS50b0xpc3QoKTsKICAgIC8vIEJvdW5kcyBtaWdodCBtZW50aW9uIHRoZSBtaXhpbiBjbGFzcydzIHR5cGUgcGFyYW1ldGVycyBzbyB3ZSBoYXZlIHRvCiAgICAvLyBzdWJzdGl0dXRlIHRoZW0gYmVmb3JlIGNhbGxpbmcgaW5zdGFudGlhdGUgdG8gYm91bmRzLgogICAgdmFyIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMobWl4aW5DbGFzcy50eXBlUGFyYW1ldGVycywKICAgICAgICBwYXJhbWV0ZXJzLm1hcCgocCkgPT4gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKHApKS50b0xpc3QoKSk7CiAgICBmb3IgKHZhciBwIGluIHBhcmFtZXRlcnMpIHsKICAgICAgcC5ib3VuZCA9IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShwLmJvdW5kKTsKICAgIH0KICAgIC8vIFVzZSBpbnN0YW50aWF0ZSB0byBib3VuZHMuCiAgICBMaXN0PERhcnRUeXBlPiBib3VuZHMgPSBjYWxjdWxhdGVCb3VuZHMocGFyYW1ldGVycywgY29yZVR5cGVzLm9iamVjdENsYXNzKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWl4ZWRJblR5cGUudHlwZUFyZ3VtZW50cy5sZW5ndGg7ICsraSkgewogICAgICBtaXhlZEluVHlwZS50eXBlQXJndW1lbnRzW2ldID0gYm91bmRzW2ldOwogICAgfQogIH0KfQoKLy8vIFRoZSByZXN1bHQgb2YgYW4gZXhwcmVzc2lvbiBpbmZl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cy5kYXJ0JyBzaG93IHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtU3RhY2tOb3RFbXB0eTsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyBpbnRlcm5hbFByb2JsZW07CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfc2hhZG93X2FzdC5kYXJ0JyBzaG93IFNoYWRvd1R5cGVQcm9tb3RlcjsKCmltcG9ydCAndHlwZV9zY2hlbWFfZW52aXJvbm1lbnQuZGFydCcgc2hvdyBUeXBlU2NoZW1hRW52aXJvbm1lbnQ7CgovLy8gS2VlcHMgdHJhY2sgb2YgdGhlIHN0YXRlIG5lY2Vzc2FyeSB0byBwZXJmb3JtIHR5cGUgcHJvbW90aW9uLgovLy8KLy8vIFRoZW9yeSBvZiBvcGVyYXRpb246IGR1cmluZyBwYXJzaW5nLCB0aGUgQm9keUJ1aWxkZXIgY2FsbHMgbWV0aG9kcyBpbiB0aGlzCi8vLyBjbGFzcyB0byBpbmZvcm0gaXQgb2Ygc3ludGFjdGljIGNvbnN0cnVjdHMgdGhhdCBhcmUgZW5jb3VudGVyZWQuICBUaG9zZQovLy8gbWV0aG9kcyBtYWludGFpbiBhIGxpbmtlZCBsaXN0IG9mIFtUeXBlUHJvbW90aW9uRmFjdF0gb2JqZWN0cyB0cmFja2luZyB3aGF0Ci8vLyBpcyBrbm93biBhYm91dCB0aGUgc3RhdGUgb2YgZWFjaCB2YXJpYWJsZSBhdCB0aGUgY3VycmVudCBwb2ludCBpbiB0aGUgY29kZSwKLy8vIGFzIHdlbGwgYXMgYSBsaW5rZWQgbGlzdCBvZiBbVHlwZVByb21vdGlvblNjb3BlXSBvYmplY3RzIHRyYWNraW5nIHRoZQovLy8gY29tcG9uZW50J3MgbmVzdGluZyBzdHJ1Y3R1cmUuICBXaGVuZXZlciBhIHZhcmlhYmxlIGlzIHJlYWQsIHRoZSBjdXJyZW50Ci8vLyBbVHlwZVByb21vdGlvbkZhY3RdIGFuZCBbVHlwZVByb21vdGlvblNjb3BlXSBhcmUgcmVjb3JkZWQgZm9yIGxhdGVyIHVzZS4KLy8vCi8vLyBEdXJpbmcgdHlwZSBpbmZlcmVuY2UsIHRoZSBbVHlwZUluZmVycmVyXSBjYWxscyBiYWNrIGludG8gdGhpcyBjbGFzcyB0byBhc2sKLy8vIHdoZXRoZXIgZWFjaCB2YXJpYWJsZSByZWFkIGlzIGEgcHJvbW90ZWQgcmVhZC4gIFRoaXMgaXMgZGV0ZXJtaW5lZCBieQovLy8gZXhhbWluaW5nIHRoZSBbVHlwZVByb21vdGlvblNjb3BlXSBhbmQgW1R5cGVQcm9tb3Rpb25GYWN0XSBvYmplY3RzIHRoYXQgd2VyZQovLy8gcmVjb3JkZWQgYXQgdGhlIHRpbWUgdGhlIHZhcmlhYmxlIHJlYWQgd2FzIHBhcnNlZCwgYXMgd2VsbCBhcyBvdGhlciBzdGF0ZQovLy8gdGhhdCBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgbGF0ZXIgZHVyaW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuCi8vLwovLy8gVGhpcyBjbGFzcyBhYnN0cmFjdHMgYXdheSB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuZGVybHlpbmcgQVNUIHVzaW5nCi8vLyBnZW5lcmljIHBhcmFtZXRlcnMuICBEZXJpdmVkIGNsYXNzZXMgc2hvdWxkIHNldCBFIGFuZCBWIHRvIHRoZSBjbGFzcyB0aGV5Ci8vLyB1c2UgdG8gcmVwcmVzZW50IGV4cHJlc3Npb25zIGFuZCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMsIHJlc3BlY3RpdmVseS4KYWJzdHJhY3QgY2xhc3MgVHlwZVByb21vdGVyIHsKICBUeXBlUHJvbW90ZXIucHJpdmF0ZSgpOwoKICBmYWN0b3J5IFR5cGVQcm9tb3RlcihUeXBlU2NoZW1hRW52aXJvbm1lbnQgdHlwZVNjaGVtYUVudmlyb25tZW50KSA9CiAgICAgIFNoYWRvd1R5cGVQcm9tb3Rlci5wcml2YXRlOwoKICBmYWN0b3J5IFR5cGVQcm9tb3Rlci5kaXNhYmxlZCgpID0gVHlwZVByb21vdGVyRGlzYWJsZWQucHJpdmF0ZTsKCiAgLy8vIFJldHVybnMgdGhlIGN1cnJlbnQgdHlwZSBwcm9tb3Rpb24gc2NvcGUuCiAgVHlwZVByb21vdGlvblNjb3BlIGdldCBjdXJyZW50U2NvcGU7CgogIC8vLyBDb21wdXRlcyB0aGUgcHJvbW90ZWQgdHlwZSBvZiBhIHZhcmlhYmxlIHJlYWQgaGF2aW5nIHRoZSBnaXZlbiBbZmFjdF0gYW5kCiAgLy8vIFtzY29wZV0uICBSZXR1cm5zIGBudWxsYCBpZiB0aGVyZSBpcyBubyBwcm9tb3Rpb24uCiAgLy8vCiAgLy8vIFttdXRhdGVkSW5DbG9zdXJlXSBpbmRpY2F0ZXMgd2hldGhlciB0aGUgdmFyaWFibGUgd2FzIG11dGF0ZWQgaW4gYSBjbG9zdXJlCiAgLy8vIHNvbWV3aGVyZSBpbiB0aGUgbWV0aG9kLgogIERhcnRUeXBlIGNvbXB1dGVQcm9tb3RlZFR5cGUoCiAgICAgIFR5cGVQcm9tb3Rpb25GYWN0IGZhY3QsIFR5cGVQcm9tb3Rpb25TY29wZSBzY29wZSwgYm9vbCBtdXRhdGVkSW5DbG9zdXJlKTsKCiAgLy8vIFVwZGF0ZXMgdGhlIHN0YXRlIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCB3ZSBhcmUgZW50ZXJpbmcgYW4gImVsc2UiCiAgLy8vIGJyYW5jaC4KICB2b2lkIGVudGVyRWxzZSgpOwoKICAvLy8gVXBkYXRlcyB0aGUgc3RhdGUgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHRoZSBMSFMgb2YgYW4gIiYmIiBvciAifHwiCiAgLy8vIGV4cHJlc3Npb24gaGFzIGp1c3QgYmVlbiBwYXJzZWQsIGFuZCB3ZSBhcmUgZW50ZXJpbmcgdGhlIFJIUy4KICB2b2lkIGVudGVyTG9naWNhbEV4cHJlc3Npb24oRXhwcmVzc2lvbiBsaHMsIFN0cmluZyBvcGVyYXRvcik7CgogIC8vLyBVcGRhdGVzIHRoZSBzdGF0ZSB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgdGhlICJjb25kaXRpb24iIHBhcnQgb2YgYW4gImlmIgogIC8vLyBzdGF0ZW1lbnQgb3IgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBoYXMganVzdCBiZWVuIHBhcnNlZCwgYW5kIHdlIGFyZQogIC8vLyBlbnRlcmluZyB0aGUgInRoZW4iIGJyYW5jaC4KICB2b2lkIGVudGVyVGhlbihFeHByZXNzaW9uIGNvbmRpdGlvbik7CgogIC8vLyBVcGRhdGVzIHRoZSBzdGF0ZSB0byByZWZsZWN0IHRoZSBmYWN0IHRoYXQgd2UgaGF2ZSBleGl0ZWQgdGhlICJlbHNlIgogIC8vLyBicmFuY2ggb2YgYW4gImlmIiBzdGF0ZW1lbnQgb3IgY29uZGl0aW9uYWwgZXhwcmVzc2lvbi4KICB2b2lkIGV4aXRDb25kaXRpb25hbCgpOwoKICAvLy8gVXBkYXRlcyB0aGUgc3RhdGUgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgZXhpdGVkIHRoZSBSSFMgb2YgYW4KICAvLy8gIiYmIiBvciAifHwiIGV4cHJlc3Npb24uCiAgdm9pZCBleGl0TG9naWNhbEV4cHJlc3Npb24oRXhwcmVzc2lvbiByaHMsIEV4cHJlc3Npb24gbG9naWNhbEV4cHJlc3Npb24pOwoKICAvLy8gVmVyaWZpZXMgdGhhdCBlbnRlci9leGl0IGNhbGxzIHdlcmUgcHJvcGVybHkgbmVzdGVkLgogIHZvaWQgZmluaXNoZWQoKTsKCiAgLy8vIFJlY29yZHMgdGhhdCB0aGUgZ2l2ZW4gW3ZhcmlhYmxlXSB3YXMgYWNjZXNzZWQgZm9yIHJlYWRpbmcsIGFuZCByZXR1cm5zIGEKICAvLy8gW1R5cGVQcm9tb3Rpb25GYWN0XSBkZXNjcmliaW5nIHRoZSB2YXJpYWJsZSdzIGN1cnJlbnQgdHlwZSBwcm9tb3Rpb24KICAvLy8gc3RhdGUuCiAgLy8vCiAgLy8vIFtmdW5jdGlvbk5lc3RpbmdMZXZlbF0gc2hvdWxkIGJlIHRoZSBjdXJyZW50IG5lc3RpbmcgbGV2ZWwgb2YgY2xvc3VyZXMuCiAgLy8vIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIHZhcmlhYmxlIHdhcyBhY2Nlc3NlZCBpbiBhIGNsb3N1cmUuCiAgVHlwZVByb21vdGlvbkZhY3QgZ2V0RmFjdEZvckFjY2VzcygKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsKTsKCiAgLy8vIFVwZGF0ZXMgdGhlIHN0YXRlIHRvIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCBhbiAiaXMiIGNoZWNrIG9mIGEgbG9jYWwKICAvLy8gdmFyaWFibGUgd2FzIGp1c3QgcGFyc2VkLgogIHZvaWQgaGFuZGxlSXNDaGVjayhFeHByZXNzaW9uIGlzRXhwcmVzc2lvbiwgYm9vbCBpc0ludmVydGVkLAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBEYXJ0VHlwZSB0eXBlLCBpbnQgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwoKICAvLy8gVXBkYXRlcyB0aGUgc3RhdGUgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHRoZSBnaXZlbiBbdmFyaWFibGVdIHdhcwogIC8vLyBtdXRhdGVkLgogIHZvaWQgbXV0YXRlVmFyaWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsKTsKfQoKLy8vIEltcGxlbWVudGF0aW9uIG9mIFtUeXBlUHJvbW90ZXJdIHdoaWNoIGRvZXNuJ3QgZG8gYW55IHR5cGUgcHJvbW90aW9uLgovLy8KLy8vIFRoaXMgaXMgaW50ZW5kZWQgZm9yIHByb2ZpbGluZywgdG8gZW5zdXJlIHRoYXQgdHlwZSBpbmZlcmVuY2UgYW5kIHR5cGUKLy8vIHByb21vdGlvbiBkbyBub3Qgc2xvdyBkb3duIGNvbXBpbGF0aW9uIHRvbyBtdWNoLgpjbGFzcyBUeXBlUHJvbW90ZXJEaXNhYmxlZCBleHRlbmRzIFR5cGVQcm9tb3RlciB7CiAgVHlwZVByb21vdGVyRGlzYWJsZWQucHJpdmF0ZSgpIDogc3VwZXIucHJpdmF0ZSgpOwoKICBAb3ZlcnJpZGUKICBUeXBlUHJvbW90aW9uU2NvcGUgZ2V0IGN1cnJlbnRTY29wZSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBjb21wdXRlUHJvbW90ZWRUeXBlKFR5cGVQcm9tb3Rpb25GYWN0IGZhY3QsIFR5cGVQcm9tb3Rpb25TY29wZSBzY29wZSwKICAgICAgICAgIGJvb2wgbXV0YXRlZEluQ2xvc3VyZSkgPT4KICAgICAgbnVsbDsKCiAgQG92ZXJyaWRlCiAgdm9pZCBlbnRlckVsc2UoKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIGVudGVyTG9naWNhbEV4cHJlc3Npb24oRXhwcmVzc2lvbiBsaHMsIFN0cmluZyBvcGVyYXRvcikge30KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbnRlclRoZW4oRXhwcmVzc2lvbiBjb25kaXRpb24pIHt9CgogIEBvdmVycmlkZQogIHZvaWQgZXhpdENvbmRpdGlvbmFsKCkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCBleGl0TG9naWNhbEV4cHJlc3Npb24oRXhwcmVzc2lvbiByaHMsIEV4cHJlc3Npb24gbG9naWNhbEV4cHJlc3Npb24pIHt9CgogIEBvdmVycmlkZQogIHZvaWQgZmluaXNoZWQoKSB7fQoKICBAb3ZlcnJpZGUKICBUeXBlUHJvbW90aW9uRmFjdCBnZXRGYWN0Rm9yQWNjZXNzKAogICAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsKSA9PgogICAgICBudWxsOwoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUlzQ2hlY2soRXhwcmVzc2lvbiBpc0V4cHJlc3Npb24sIGJvb2wgaXNJbnZlcnRlZCwKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgRGFydFR5cGUgdHlwZSwgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIG11dGF0ZVZhcmlhYmxlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIGludCBmdW5jdGlvbk5lc3RpbmdMZXZlbCkge30KfQoKLy8vIERlcml2ZWQgY2xhc3MgY29udGFpbmluZyBnZW5lcmljIGltcGxlbWVudGF0aW9ucyBvZiBbVHlwZVByb21vdGVyXS4KLy8vCi8vLyBUaGlzIGNsYXNzIGNvbnRhaW5zIGFzIG11Y2ggb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHR5cGUgcHJvbW90aW9uIGFzCi8vLyBwb3NzaWJsZSB3aXRob3V0IG5lZWRpbmcgYWNjZXNzIHRvIHByaXZhdGUgbWVtYmVycyBvZiBzaGFkb3cgb2JqZWN0cy4gIEl0Ci8vLyBkZWZlcnMgdG8gYWJzdHJhY3QgbWV0aG9kcyBmb3IgZXZlcnl0aGluZyBlbHNlLgphYnN0cmFjdCBjbGFzcyBUeXBlUHJvbW90ZXJJbXBsIGV4dGVuZHMgVHlwZVByb21vdGVyIHsKICBmaW5hbCBUeXBlU2NoZW1hRW52aXJvbm1lbnQgdHlwZVNjaGVtYUVudmlyb25tZW50OwoKICAvLy8gW1R5cGVQcm9tb3Rpb25GYWN0XSByZXByZXNlbnRpbmcgdGhlIGluaXRpYWwgc3RhdGUgKG5vIGZhY3RzIGhhdmUgYmVlbgogIC8vLyBkZXRlcm1pbmVkIHlldCkuCiAgLy8vCiAgLy8vIEFsbCBsaW5rZWQgbGlzdHMgb2YgZmFjdHMgdGVybWluYXRlIGluIHRoaXMgb2JqZWN0LgogIGZpbmFsIF9OdWxsRmFjdCBfbnVsbEZhY3RzOwoKICAvLy8gTWFwIGZyb20gdmFyaWFibGUgZGVjbGFyYXRpb24gdG8gdGhlIG1vc3QgcmVjZW50IFtUeXBlUHJvbW90aW9uRmFjdF0KICAvLy8gYXNzb2NpYXRlZCB3aXRoIHRoZSB2YXJpYWJsZS4KICAvLy8KICAvLy8gW1R5cGVQcm9tb3Rpb25GYWN0XXMgdGhhdCBhcmUgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgdmFyaWFibGUgc2hvdyB1cCBpbgogIC8vLyB0aGlzIG1hcCB1bmRlciB0aGUga2V5IGBudWxsYC4KICBmaW5hbCBfZmFjdENhY2hlID0gPFZhcmlhYmxlRGVjbGFyYXRpb24sIFR5cGVQcm9tb3Rpb25GYWN0Pnt9OwoKICAvLy8gTGlua2VkIGxpc3Qgb2YgW1R5cGVQcm9tb3Rpb25GYWN0XXMgdGhhdCB3YXMgY3VycmVudCBhdCB0aGUgdGltZSB0aGUKICAvLy8gW19mYWN0Q2FjaGVdIHdhcyBsYXN0IHVwZGF0ZWQuCiAgVHlwZVByb21vdGlvbkZhY3QgX2ZhY3RDYWNoZVN0YXRlOwoKICAvLy8gTGlua2VkIGxpc3Qgb2YgW1R5cGVQcm9tb3Rpb25GYWN0XXMgZGVzY3JpYmluZyB3aGF0IGlzIGtub3duIHRvIGJlIHRydWUKICAvLy8gYWZ0ZXIgZXhlY3V0aW9uIG9mIHRoZSBleHByZXNzaW9uIG9yIHN0YXRlbWVudCB0aGF0IHdhcyBtb3N0IHJlY2VudGx5CiAgLy8vIHBhcnNlZC4KICBUeXBlUHJvbW90aW9uRmFjdCBfY3VycmVudEZhY3RzOwoKICAvLy8gVGhlIG1vc3QgcmVjZW50bHkgcGFyc2VkIGV4cHJlc3Npb24gd2hvc2Ugb3V0Y29tZSBwb3RlbnRpYWxseSBhZmZlY3RzIHdoYXQKICAvLy8gaXMga25vd24gdG8gYmUgdHJ1ZSAoZS5nLiBhbiAiaXMiIGNoZWNrIG9yIGEgbG9naWNhbCBleHByZXNzaW9uKS4gIE1heSBiZQogIC8vLyBgbnVsbGAgaWYgbm8gc3VjaCBleHByZXNzaW9uIGhhcyBiZWVuIGVuY291bnRlcmVkIHlldC4KICBFeHByZXNzaW9uIF9wcm9tb3Rpb25FeHByZXNzaW9uOwoKICAvLy8gTGlua2VkIGxpc3Qgb2YgW1R5cGVQcm9tb3Rpb25GYWN0XXMgZGVzY3JpYmluZyB3aGF0IGlzIGtub3duIHRvIGJlIHRydWUKICAvLy8gYWZ0ZXIgZXhlY3V0aW9uIG9mIFtfcHJvbW90aW9uRXhwcmVzc2lvbl0sIGFzc3VtaW5nIHRoYXQKICAvLy8gW19wcm9tb3Rpb25FeHByZXNzaW9uXSBldmFsdWF0ZXMgdG8gYHRydWVgLgogIFR5cGVQcm9tb3Rpb25GYWN0IF90cnVlRmFjdHNGb3JQcm9tb3Rpb25FeHByZXNzaW9uOwoKICAvLy8gTGlua2VkIGxpc3Qgb2YgW1R5cGVQcm9tb3Rpb25TY29wZV1zIGRlc2NyaWJpbmcgdGhlIG5lc3Rpbmcgc3RydWN0dXJlIHRoYXQKICAvLy8gY29udGFpbnMgdGhlIGV4cHJlc3NvaW4gb3Igc3RhdGVtZW50IHRoYXQgd2FzIG1vc3QgcmVjZW50bHkgcGFyc2VkLgogIFR5cGVQcm9tb3Rpb25TY29wZSBfY3VycmVudFNjb3BlID0gY29uc3QgX1RvcExldmVsU2NvcGUoKTsKCiAgLy8vIFRoZSBzZXF1ZW5jZSBudW1iZXIgb2YgdGhlIFtUeXBlUHJvbW90aW9uRmFjdF0gdGhhdCB3YXMgbW9zdCByZWNlbnRseQogIC8vLyBjcmVhdGVkLgogIGludCBfbGFzdEZhY3RTZXF1ZW5jZU51bWJlciA9IDA7CgogIFR5cGVQcm9tb3RlckltcGwucHJpdmF0ZShUeXBlU2NoZW1hRW52aXJvbm1lbnQgdHlwZVNjaGVtYUVudmlyb25tZW50KQogICAgICA6IHRoaXMuXyh0eXBlU2NoZW1hRW52aXJvbm1lbnQsIG5ldyBfTnVsbEZhY3QoKSk7CgogIFR5cGVQcm9tb3RlckltcGwuXyh0aGlzLnR5cGVTY2hlbWFFbnZpcm9ubWVudCwgX051bGxGYWN0IHRoaXMuX251bGxGYWN0cykKICAgICAgOiBfZmFjdENhY2hlU3RhdGUgPSBfbnVsbEZhY3RzLAogICAgICAgIF9jdXJyZW50RmFjdHMgPSBfbnVsbEZhY3RzLAogICAgICAgIHN1cGVyLnByaXZhdGUoKSB7CiAgICBfZmFjdENhY2hlW251bGxdID0gX251bGxGYWN0czsKICB9CgogIEBvdmVycmlkZQogIFR5cGVQcm9tb3Rpb25TY29wZSBnZXQgY3VycmVudFNjb3BlID0+IF9jdXJyZW50U2NvcGU7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGNvbXB1dGVQcm9tb3RlZFR5cGUoCiAgICAgIFR5cGVQcm9tb3Rpb25GYWN0IGZhY3QsIFR5cGVQcm9tb3Rpb25TY29wZSBzY29wZSwgYm9vbCBtdXRhdGVkSW5DbG9zdXJlKSB7CiAgICBpZiAobXV0YXRlZEluQ2xvc3VyZSkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gZmFjdD8uX2NvbXB1dGVQcm9tb3RlZFR5cGUodGhpcywgc2NvcGUpOwogIH0KCiAgLy8vIEZvciBpbnRlcm5hbCBkZWJ1Z2dpbmcgdXNlLCBvcHRpb25hbGx5IHByaW50cyB0aGUgY3VycmVudCBzdGF0ZSBmb2xsb3dlZAogIC8vLyBieSB0aGUgZXZlbnQgbmFtZS4gIFVuY29tbWVudCB0aGUgY2FsbCB0byBbX3ByaW50RXZlbnRdIHRvIHNlZSB0aGUKICAvLy8gc2VxdWVuY2Ugb2YgY2FsbHMgaW50byB0aGUgdHlwZSBwcm9tb3RlciBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgc3RhdGVzLgogIHZvaWQgZGVidWdFdmVudChTdHJpbmcgbmFtZSkgewogICAgLy8gX3ByaW50RXZlbnQobmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVudGVyRWxzZSgpIHsKICAgIGRlYnVnRXZlbnQoJ2VudGVyRWxzZScpOwogICAgX0NvbmRpdGlvbmFsU2NvcGUgc2NvcGUgPSBfY3VycmVudFNjb3BlOwogICAgLy8gUmVjb3JkIHRoZSBjdXJyZW50IGZhY3Qgc3RhdGUgc28gdGhhdCBvbmNlIHdlIGV4aXQgdGhlICJlbHNlIiBicmFuY2gsIHdlCiAgICAvLyBjYW4gbWVyZ2UgZmFjdHMgZnJvbSB0aGUgdHdvIGJyYW5jaGVzLgogICAgc2NvcGUuYWZ0ZXJUcnVlID0gX2N1cnJlbnRGYWN0czsKICAgIC8vIFdoaWxlIHByb2Nlc3NpbmcgdGhlICJlbHNlIiBibG9jaywgYXNzdW1lIHRoZSBjb25kaXRpb24gd2FzIGZhbHNlLgogICAgX2N1cnJlbnRGYWN0cyA9IHNjb3BlLmJlZm9yZUVsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVudGVyTG9naWNhbEV4cHJlc3Npb24oRXhwcmVzc2lvbiBsaHMsIFN0cmluZyBvcGVyYXRvcikgewogICAgZGVidWdFdmVudCgnZW50ZXJMb2dpY2FsRXhwcmVzc2lvbicpOwogICAgLy8gRmlndXJlIG91dCB3aGF0IHRoZSBmYWN0cyBhcmUgYmFzZWQgb24gcG9zc2libGUgTEhTIG91dGNvbWVzLgogICAgdmFyIHRydWVGYWN0cyA9IF9mYWN0c1doZW5UcnVlKGxocyk7CiAgICB2YXIgZmFsc2VGYWN0cyA9IF9mYWN0c1doZW5GYWxzZShsaHMpOwogICAgLy8gUmVjb3JkIHRoZSBmYWN0IHRoYXQgd2UgYXJlIGVudGVyaW5nIGEgbmV3IHNjb3BlLCBhbmQgc2F2ZSB0aGUKICAgIC8vIGFwcHJvcHJpYXRlIGZhY3RzIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgZXhwcmVzc2lvbiBnZXRzIHNob3J0LWN1dC4KICAgIGJvb2wgaXNBbmQgPSBpZGVudGljYWwob3BlcmF0b3IsICcmJicpOwogICAgX2N1cnJlbnRTY29wZSA9CiAgICAgICAgbmV3IF9Mb2dpY2FsU2NvcGUoX2N1cnJlbnRTY29wZSwgaXNBbmQsIGlzQW5kID8gZmFsc2VGYWN0cyA6IHRydWVGYWN0cyk7CiAgICAvLyBXaGlsZSBwcm9jZXNzaW5nIHRoZSBSSFMsIGFzc3VtZSB0aGUgY29uZGl0aW9uIHdhcyBmYWxzZSBvciB0cnVlLAogICAgLy8gZGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGxvZ2ljYWwgZXhwcmVzc2lvbi4KICAgIF9jdXJyZW50RmFjdHMgPSBpc0FuZCA/IHRydWVGYWN0cyA6IGZhbHNlRmFjdHM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVudGVyVGhlbihFeHByZXNzaW9uIGNvbmRpdGlvbikgewogICAgZGVidWdFdmVudCgnZW50ZXJUaGVuJyk7CiAgICAvLyBGaWd1cmUgb3V0IHdoYXQgdGhlIGZhY3RzIGFyZSBiYXNlZCBvbiBwb3NzaWJsZSBjb25kaXRpb24gb3V0Y29tZXMuCiAgICB2YXIgdHJ1ZUZhY3RzID0gX2ZhY3RzV2hlblRydWUoY29uZGl0aW9uKTsKICAgIHZhciBmYWxzZUZhY3RzID0gX2ZhY3RzV2hlbkZhbHNlKGNvbmRpdGlvbik7CiAgICAvLyBSZWNvcmQgdGhlIGZhY3QgdGhhdCB3ZSBhcmUgZW50ZXJpbmcgYSBuZXcgc2NvcGUsIGFuZCBzYXZlIHRoZSAiZmFsc2UiCiAgICAvLyBmYWN0cyBmb3Igd2hlbiB3ZSBlbnRlciB0aGUgImVsc2UiIGJyYW5jaC4KICAgIF9jdXJyZW50U2NvcGUgPSBuZXcgX0NvbmRpdGlvbmFsU2NvcGUoX2N1cnJlbnRTY29wZSwgZmFsc2VGYWN0cyk7CiAgICAvLyBXaGlsZSBwcm9jZXNzaW5nIHRoZSAidGhlbiIgYmxvY2ssIGFzc3VtZSB0aGUgY29uZGl0aW9uIHdhcyB0cnVlLgogICAgX2N1cnJlbnRGYWN0cyA9IHRydWVGYWN0czsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZXhpdENvbmRpdGlvbmFsKCkgewogICAgZGVidWdFdmVudCgnZXhpdENvbmRpdGlvbmFsJyk7CiAgICBfQ29uZGl0aW9uYWxTY29wZSBzY29wZSA9IF9jdXJyZW50U2NvcGU7CiAgICBfY3VycmVudFNjb3BlID0gX2N1cnJlbnRTY29wZS5fZW5jbG9zaW5nOwogICAgX2N1cnJlbnRGYWN0cyA9IF9tZXJnZUZhY3RzKHNjb3BlLmFmdGVyVHJ1ZSwgX2N1cnJlbnRGYWN0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGV4aXRMb2dpY2FsRXhwcmVzc2lvbihFeHByZXNzaW9uIHJocywgRXhwcmVzc2lvbiBsb2dpY2FsRXhwcmVzc2lvbikgewogICAgZGVidWdFdmVudCgnZXhpdExvZ2ljYWxFeHByZXNzaW9uJyk7CiAgICBfTG9naWNhbFNjb3BlIHNjb3BlID0gX2N1cnJlbnRTY29wZTsKICAgIF9jdXJyZW50U2NvcGUgPSBfY3VycmVudFNjb3BlLl9lbmNsb3Npbmc7CiAgICBpZiAoc2NvcGUuaXNBbmQpIHsKICAgICAgX3JlY29yZFByb21vdGlvbkV4cHJlc3Npb24obG9naWNhbEV4cHJlc3Npb24sIF9mYWN0c1doZW5UcnVlKHJocyksCiAgICAgICAgICBfbWVyZ2VGYWN0cyhzY29wZS5zaG9ydGN1dEZhY3RzLCBfY3VycmVudEZhY3RzKSk7CiAgICB9IGVsc2UgewogICAgICBfcmVjb3JkUHJvbW90aW9uRXhwcmVzc2lvbigKICAgICAgICAgIGxvZ2ljYWxFeHByZXNzaW9uLAogICAgICAgICAgX21lcmdlRmFjdHMoc2NvcGUuc2hvcnRjdXRGYWN0cywgX2N1cnJlbnRGYWN0cyksCiAgICAgICAgICBfZmFjdHNXaGVuRmFsc2UocmhzKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZpbmlzaGVkKCkgewogICAgZGVidWdFdmVudCgnZmluaXNoZWQnKTsKICAgIGlmIChfY3VycmVudFNjb3BlIGlzISBfVG9wTGV2ZWxTY29wZSkgewogICAgICBpbnRlcm5hbFByb2JsZW0oCiAgICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHkud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAiJHJ1bnRpbWVUeXBlIiwgIiRfY3VycmVudFNjb3BlIiksCiAgICAgICAgICAtMSwKICAgICAgICAgIG51bGwpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZVByb21vdGlvbkZhY3QgZ2V0RmFjdEZvckFjY2VzcygKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsKSB7CiAgICBkZWJ1Z0V2ZW50KCdnZXRGYWN0Rm9yQWNjZXNzJyk7CiAgICB2YXIgZmFjdCA9IF9jb21wdXRlQ3VycmVudEZhY3RNYXAoKVt2YXJpYWJsZV07CiAgICBUeXBlUHJvbW90aW9uRmFjdC5fcmVjb3JkQWNjZXNzZWRJblNjb3BlKAogICAgICAgIGZhY3QsIF9jdXJyZW50U2NvcGUsIGZ1bmN0aW9uTmVzdGluZ0xldmVsKTsKICAgIHJldHVybiBmYWN0OwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG5lc3RpbmcgbGV2ZWwgdGhhdCB3YXMgaW4gZWZmZWN0IHdoZW4gW3ZhcmlhYmxlXSB3YXMgZGVjbGFyZWQuCiAgaW50IGdldFZhcmlhYmxlRnVuY3Rpb25OZXN0aW5nTGV2ZWwoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSk7CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSXNDaGVjayhFeHByZXNzaW9uIGlzRXhwcmVzc2lvbiwgYm9vbCBpc0ludmVydGVkLAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBEYXJ0VHlwZSB0eXBlLCBpbnQgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpIHsKICAgIGRlYnVnRXZlbnQoJ2hhbmRsZUlzQ2hlY2snKTsKICAgIGlmICghaXNQcm9tb3Rpb25DYW5kaWRhdGUodmFyaWFibGUpKSByZXR1cm47CiAgICB2YXIgaXNDaGVjayA9IG5ldyBfSXNDaGVjaygKICAgICAgICArK19sYXN0RmFjdFNlcXVlbmNlTnVtYmVyLAogICAgICAgIHZhcmlhYmxlLAogICAgICAgIF9jdXJyZW50RmFjdHMsCiAgICAgICAgX2NvbXB1dGVDdXJyZW50RmFjdE1hcCgpW3ZhcmlhYmxlXSwKICAgICAgICBmdW5jdGlvbk5lc3RpbmdMZXZlbCwKICAgICAgICB0eXBlKTsKICAgIGlmICghaXNJbnZlcnRlZCkgewogICAgICBfcmVjb3JkUHJvbW90aW9uRXhwcmVzc2lvbihpc0V4cHJlc3Npb24sIGlzQ2hlY2ssIF9jdXJyZW50RmFjdHMpOwogICAgfQogIH0KCiAgLy8vIERldGVybWluZXMgd2hldGhlciB0aGUgZ2l2ZW4gdmFyaWFibGUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIHByb21vdGlvbgogIC8vLyBhdCBhbGwuCiAgLy8vCiAgLy8vIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgaW4ga2VybmVsLCBbVmFyaWFibGVEZWNsYXJhdGlvbl0gb2JqZWN0cyBhcmUKICAvLy8gc29tZXRpbWVzIHVzZWQgdG8gcmVwcmVzZW50IGxvY2FsIGZ1bmN0aW9ucywgd2hpY2ggYXJlIG5vdCBzdWJqZWN0IHRvCiAgLy8vIHByb21vdGlvbi4KICBib29sIGlzUHJvbW90aW9uQ2FuZGlkYXRlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpOwoKICAvLy8gVXBkYXRlcyB0aGUgc3RhdGUgdG8gcmVmbGVjdCB0aGUgZmFjdCB0aGF0IHRoZSBnaXZlbiBbdmFyaWFibGVdIHdhcwogIC8vLyBtdXRhdGVkLgogIHZvaWQgbXV0YXRlVmFyaWFibGUoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsKSB7CiAgICBkZWJ1Z0V2ZW50KCdtdXRhdGVWYXJpYWJsZScpOwogICAgdmFyIGZhY3QgPSBfY29tcHV0ZUN1cnJlbnRGYWN0TWFwKClbdmFyaWFibGVdOwogICAgVHlwZVByb21vdGlvbkZhY3QuX3JlY29yZE11dGF0ZWRJblNjb3BlKGZhY3QsIF9jdXJyZW50U2NvcGUpOwogICAgaWYgKGdldFZhcmlhYmxlRnVuY3Rpb25OZXN0aW5nTGV2ZWwodmFyaWFibGUpIDwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpIHsKICAgICAgc2V0VmFyaWFibGVNdXRhdGVkSW5DbG9zdXJlKHZhcmlhYmxlKTsKICAgIH0KICAgIHNldFZhcmlhYmxlTXV0YXRlZEFueXdoZXJlKHZhcmlhYmxlKTsKICB9CgogIC8vLyBEZXRlcm1pbmVzIHdoZXRoZXIgW2FdIGFuZCBbYl0gcmVwcmVzZW50IHRoZSBzYW1lIGV4cHJlc3Npb24sIGFmdGVyCiAgLy8vIGRyb3BwaW5nIHJlZHVuZGFudCBlbmNsb3NpbmcgcGFyZW50aGVzZXMuCiAgYm9vbCBzYW1lRXhwcmVzc2lvbnMoRXhwcmVzc2lvbiBhLCBFeHByZXNzaW9uIGIpOwoKICAvLy8gUmVjb3JkcyB0aGF0IHRoZSBnaXZlbiB2YXJpYWJsZSB3YXMgbXV0YXRlZCBzb21ld2hlcmUgaW5zaWRlIHRoZSBtZXRob2QuCiAgdm9pZCBzZXRWYXJpYWJsZU11dGF0ZWRBbnl3aGVyZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKTsKCiAgLy8vIFJlY29yZHMgdGhhdCB0aGUgZ2l2ZW4gdmFyaWFibGUgd2FzIG11dGF0ZWQgaW5zaWRlIGEgY2xvc3VyZS4KICB2b2lkIHNldFZhcmlhYmxlTXV0YXRlZEluQ2xvc3VyZShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKTsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIFtzZXRWYXJpYWJsZU11dGF0ZWRBbnl3aGVyZV0gaGFzIGJlZW4gY2FsbGVkIGZvciB0aGUKICAvLy8gZ2l2ZW4gW3ZhcmlhYmxlXS4KICBib29sIHdhc1ZhcmlhYmxlTXV0YXRlZEFueXdoZXJlKFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpOwoKICAvLy8gUmV0dXJucyBhIG1hcCBmcm9tIHZhcmlhYmxlIGRlY2xhcmF0aW9uIHRvIHRoZSBtb3N0IHJlY2VudAogIC8vLyBbVHlwZVByb21vdGlvbkZhY3RdIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFyaWFibGUuCiAgTWFwPFZhcmlhYmxlRGVjbGFyYXRpb24sIFR5cGVQcm9tb3Rpb25GYWN0PiBfY29tcHV0ZUN1cnJlbnRGYWN0TWFwKCkgewogICAgLy8gUm9sbCBiYWNrIGFueSBtYXAgZW50cmllcyBhc3NvY2lhdGVkIHdpdGggZmFjdHMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluCiAgICAvLyBlZmZlY3QsIGFuZCBzZXQgW2NvbW1vbkFuY2VzdG9yXSB0byB0aGUgZmFjdCB0aGF0IGlzIGFuIGFuY2VzdG9yIG9mCiAgICAvLyB0aGUgY3VycmVudCBzdGF0ZSBhbmQgdGhlIHByZXZpb3VzbHkgY2FjaGVkIHN0YXRlLiAgVG8gZG8gdGhpcywgd2Ugc2V0IGEKICAgIC8vIHZhcmlhYmxlIHBvaW50aW5nIHRvIFtfY3VycmVudEZhY3RzXSwgYW5kIHRoZW4gd2FsayBib3RoIGl0IGFuZAogICAgLy8gW19mYWN0Q2FjaGVTdGF0ZV0gYmFjayB0byB0aGVpciBjb21tb24gYW5jZXN0b3IsIHVwZGF0aW5nIFtfZmFjdENhY2hlXSBhcwogICAgLy8gd2UgZ28uCiAgICBUeXBlUHJvbW90aW9uRmFjdCBjb21tb25BbmNlc3RvciA9IF9jdXJyZW50RmFjdHM7CiAgICB3aGlsZSAoY29tbW9uQW5jZXN0b3Iuc2VxdWVuY2VOdW1iZXIgIT0gX2ZhY3RDYWNoZVN0YXRlLnNlcXVlbmNlTnVtYmVyKSB7CiAgICAgIGlmIChjb21tb25BbmNlc3Rvci5zZXF1ZW5jZU51bWJlciA+IF9mYWN0Q2FjaGVTdGF0ZS5zZXF1ZW5jZU51bWJlcikgewogICAgICAgIC8vIFRoZSBjdXJyZW50bHkgY2FjaGVkIHN0YXRlIGlzIG9sZGVyIHRoYW4gdGhlIGNvbW1vbiBhbmNlc3RvciBndWVzcywKICAgICAgICAvLyBzbyB0aGUgY29tbW9uIGFuY2VzdG9yIGd1ZXNzIG5lZWRzIHRvIGJlIHdhbGtlZCBiYWNrLgogICAgICAgIGNvbW1vbkFuY2VzdG9yID0gY29tbW9uQW5jZXN0b3IucHJldmlvdXM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVGhlIGNvbW1vbiBhbmNlc3RvciBndWVzcyBpcyBvbGRlciB0aGFuIHRoZSBjdXJyZW50bHkgY2FjaGVkIHN0YXRlLAogICAgICAgIC8vIHNvIHdlIG5lZWQgdG8gcm9sbCBiYWNrIHRoZSBtYXAgZW50cnkgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50bHkKICAgICAgICAvLyBjYWNoZWQgc3RhdGUuCiAgICAgICAgX2ZhY3RDYWNoZVtfZmFjdENhY2hlU3RhdGUudmFyaWFibGVdID0KICAgICAgICAgICAgX2ZhY3RDYWNoZVN0YXRlLnByZXZpb3VzRm9yVmFyaWFibGU7CiAgICAgICAgX2ZhY3RDYWNoZVN0YXRlID0gX2ZhY3RDYWNoZVN0YXRlLnByZXZpb3VzOwogICAgICB9CiAgICB9CiAgICBhc3NlcnQoaWRlbnRpY2FsKGNvbW1vbkFuY2VzdG9yLCBfZmFjdENhY2hlU3RhdGUpKTsKICAgIC8vIFJvbGwgZm9yd2FyZCBhbnkgbWFwIGVudHJpZXMgYXNzb2NpYXRlZCB3aXRoIGZhY3RzIHRoYXQgYXJlIG5ld2x5IGluCiAgICAvLyBlZmZlY3QuICBTaW5jZSBuZXdlciBmYWN0cyBsaW5rIHRvIG9sZGVyIG9uZXMsIGl0IGlzIGVhc2llc3QgdG8gZG8gcm9sbAogICAgLy8gZm9yd2FyZCB0aGUgbW9zdCByZWNlbnQgZmFjdHMgZmlyc3QuCiAgICBmb3IgKFR5cGVQcm9tb3Rpb25GYWN0IG5ld1N0YXRlID0gX2N1cnJlbnRGYWN0czsKICAgICAgICAhaWRlbnRpY2FsKG5ld1N0YXRlLCBjb21tb25BbmNlc3Rvcik7CiAgICAgICAgbmV3U3RhdGUgPSBuZXdTdGF0ZS5wcmV2aW91cykgewogICAgICB2YXIgY3VycmVudGx5Q2FjaGVkID0gX2ZhY3RDYWNoZVtuZXdTdGF0ZS52YXJpYWJsZV07CiAgICAgIC8vIE5vdGU6IFNpbmNlIHdlIHJvbGwgZm9yd2FyZCB0aGUgbW9zdCByZWNlbnQgZmFjdHMgZmlyc3QsIHdlIG5lZWQgdG8gYmUKICAgICAgLy8gY2FyZWZ1bCBub3Qgd3JpdGUgYW4gb2xkZXIgZmFjdCBvdmVyIGEgbmV3ZXIgb25lLgogICAgICBpZiAoY3VycmVudGx5Q2FjaGVkID09IG51bGwgfHwKICAgICAgICAgIG5ld1N0YXRlLnNlcXVlbmNlTnVtYmVyID4gY3VycmVudGx5Q2FjaGVkLnNlcXVlbmNlTnVtYmVyKSB7CiAgICAgICAgX2ZhY3RDYWNoZVtuZXdTdGF0ZS52YXJpYWJsZV0gPSBuZXdTdGF0ZTsKICAgICAgfQogICAgfQogICAgX2ZhY3RDYWNoZVN0YXRlID0gX2N1cnJlbnRGYWN0czsKICAgIHJldHVybiBfZmFjdENhY2hlOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHNldCBvZiBmYWN0cyBrbm93biB0byBiZSB0cnVlIGFmdGVyIHRoZSBleGVjdXRpb24gb2YgW2VdCiAgLy8vIGFzc3VtaW5nIGl0IGV2YWx1YXRlcyB0byBgZmFsc2VgLgogIC8vLwogIC8vLyBbZV0gbXVzdCBiZSB0aGUgbW9zdCByZXNlbnRseSBwYXJzZWQgZXhwcmVzc2lvbiBvciBzdGF0ZW1lbnQuCiAgVHlwZVByb21vdGlvbkZhY3QgX2ZhY3RzV2hlbkZhbHNlKEV4cHJlc3Npb24gZSkgewogICAgLy8gVHlwZSBwcm9tb3Rpb24gY3VycmVudGx5IG9ubHkgb2NjdXJzIHdoZW4gYW4gImlzIiBvciBsb2dpY2FsIGV4cHJlc3Npb24KICAgIC8vIGV2YWx1YXRlcyB0byBgdHJ1ZWAsIHNvIG5vIHNwZWNpYWwgbG9naWMgaXMgcmVxdWlyZWQ7IHdlIGp1c3QgdXNlCiAgICAvLyBbX2N1cnJlbnRGYWN0c10uCiAgICAvLwogICAgLy8gVE9ETyhwYXVsYmVycnkpOiBleHBlcmltZW50IHdpdGggc3VwcG9ydGluZyBwcm9tb3Rpb24gaW4gY2FzZXMgbGlrZQogICAgLy8gYGlmICh4IGlzISBUKSB7IC4uLiB9IGVsc2UgeyAuLi5hY2Nlc3MgeC4uLiB9YAogICAgcmV0dXJuIF9jdXJyZW50RmFjdHM7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgc2V0IG9mIGZhY3RzIGtub3duIHRvIGJlIHRydWUgYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBvZiBbZV0KICAvLy8gYXNzdW1pbmcgaXQgZXZhbHVhdGVzIHRvIGB0cnVlYC4KICAvLy8KICAvLy8gW2VdIG11c3QgYmUgdGhlIG1vc3QgcmVzZW50bHkgcGFyc2VkIGV4cHJlc3Npb24gb3Igc3RhdGVtZW50LgogIFR5cGVQcm9tb3Rpb25GYWN0IF9mYWN0c1doZW5UcnVlKEV4cHJlc3Npb24gZSkgPT4KICAgICAgc2FtZUV4cHJlc3Npb25zKF9wcm9tb3Rpb25FeHByZXNzaW9uLCBlKQogICAgICAgICAgPyBfdHJ1ZUZhY3RzRm9yUHJvbW90aW9uRXhwcmVzc2lvbgogICAgICAgICAgOiBfY3VycmVudEZhY3RzOwoKICAvLy8gUmV0dXJucyB0aGUgc2V0IG9mIGZhY3RzIGtub3duIHRvIGJlIHRydWUgYWZ0ZXIgdHdvIGJyYW5jaGVzIG9mIGV4ZWN1dGlvbgogIC8vLyByZWpvaW4uCiAgVHlwZVByb21vdGlvbkZhY3QgX21lcmdlRmFjdHMoVHlwZVByb21vdGlvbkZhY3QgYSwgVHlwZVByb21vdGlvbkZhY3QgYikgewogICAgLy8gVHlwZSBwcm9tb3Rpb24gY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9ydCBhbnkgbWVjaGFuaXNtIGZvciBmYWN0cyB0bwogICAgLy8gYWNjdW11bGF0ZSBhbG9uZyBhIHN0cmFpZ2h0LWxpbmUgZXhlY3V0aW9uIHBhdGggKHRoZXkgY2FuIG9ubHkgYWNjdW11bGF0ZQogICAgLy8gd2hlbiBlbnRlcmluZyBhIHNjb3BlKSwgc28gd2UgY2FuIHNpbXBseSBmaW5kIHRoZSBjb21tb24gYW5jZXN0b3IgZmFjdC4KICAgIC8vCiAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IGV4cGVyaW1lbnQgd2l0aCBzdXBwb3J0aW5nIHByb21vdGlvbiBpbiBjYXNlcyBsaWtlOgogICAgLy8gICAgIGlmICguLi4pIHsKICAgIC8vICAgICAgIGlmICh4IGlzISBUKSByZXR1cm47CiAgICAvLyAgICAgfSBlbHNlIHsKICAgIC8vICAgICAgIGlmICh4IGlzISBUKSByZXR1cm47CiAgICAvLyAgICAgfQogICAgLy8gICAgIC4uLmFjY2VzcyB4Li4uCiAgICB3aGlsZSAoYS5zZXF1ZW5jZU51bWJlciAhPSBiLnNlcXVlbmNlTnVtYmVyKSB7CiAgICAgIGlmIChhLnNlcXVlbmNlTnVtYmVyID4gYi5zZXF1ZW5jZU51bWJlcikgewogICAgICAgIGEgPSBhLnByZXZpb3VzOwogICAgICB9IGVsc2UgewogICAgICAgIGIgPSBiLnByZXZpb3VzOwogICAgICB9CiAgICB9CiAgICBhc3NlcnQoaWRlbnRpY2FsKGEsIGIpKTsKICAgIHJldHVybiBhOwogIH0KCiAgLy8vIEZvciBpbnRlcm5hbCBkZWJ1Z2dpbmcgdXNlLCBwcmludHMgdGhlIGN1cnJlbnQgc3RhdGUgZm9sbG93ZWQgYnkgdGhlIGV2ZW50CiAgLy8vIG5hbWUuCiAgdm9pZCBfcHJpbnRFdmVudChTdHJpbmcgbmFtZSkgewogICAgSXRlcmFibGU8VHlwZVByb21vdGlvbkZhY3Q+IGZhY3RDaGFpbihUeXBlUHJvbW90aW9uRmFjdCBmYWN0KSBzeW5jKiB7CiAgICAgIHdoaWxlIChmYWN0ICE9IG51bGwpIHsKICAgICAgICB5aWVsZCBmYWN0OwogICAgICAgIGZhY3QgPSBmYWN0LnByZXZpb3VzRm9yVmFyaWFibGU7CiAgICAgIH0KICAgIH0KCiAgICBfY29tcHV0ZUN1cnJlbnRGYWN0TWFwKCkuZm9yRWFjaCgodmFyaWFibGUsIGZhY3QpIHsKICAgICAgaWYgKGZhY3QgPT0gbnVsbCkgcmV0dXJuOwogICAgICBwcmludCgnICAke3ZhcmlhYmxlID8/ICcobnVsbCknfTogJHtmYWN0Q2hhaW4oZmFjdCkuam9pbignIC0+ICcpfScpOwogICAgfSk7CiAgICBpZiAoX3Byb21vdGlvbkV4cHJlc3Npb24gIT0gbnVsbCkgewogICAgICBwcmludCgnICBfcHJvbW90aW9uRXhwcmVzc2lvbjogJF9wcm9tb3Rpb25FeHByZXNzaW9uJyk7CiAgICAgIGlmICghaWRlbnRpY2FsKF90cnVlRmFjdHNGb3JQcm9tb3Rpb25FeHByZXNzaW9uLCBfY3VycmVudEZhY3RzKSkgewogICAgICAgIHByaW50KCcgICAgaWYgdHJ1ZTogJF90cnVlRmFjdHNGb3JQcm9tb3Rpb25FeHByZXNzaW9uJyk7CiAgICAgIH0KICAgIH0KICAgIHByaW50KG5hbWUpOwogIH0KCiAgLy8vIFJlY29yZHMgdGhhdCBhZnRlciB0aGUgZXZhbHVhdGlvbiBvZiBbZXhwcmVzc2lvbl0sIHRoZSBmYWN0cyB3aWxsIGJlCiAgLy8vIFtpZlRydWVdIG9uIGEgYnJhbmNoIHdoZXJlIHRoZSBleHByZXNzaW9uIGV2YWx1dGVkIHRvIGB0cnVlYCwgYW5kCiAgLy8vIFtpZkZhbHNlXSBvbiBhIGJyYW5jaCB3aGVyZSB0aGUgZXhwcmVzc2lvbiBldmFsdWF0ZWQgdG8gYGZhbHNlYCAob3Igd2hlcmUKICAvLy8gdGhlIHRydXRoIHZhbHVlIG9mIHRoZSBleHByZXNpc29uIGRvZXNuJ3QgbWF0dGVyKS4KICAvLy8KICAvLy8gVE9ETyhwYXVsYmVycnkpOiB3aGVuIHdlIHN0YXJ0IGhhbmRsaW5nIHByb21vdGlvbiBpbiAiZWxzZSIgY2xhdXNlcywgd2UnbGwKICAvLy8gbmVlZCB0byBzcGxpdCBbaWZGYWxzZV0gaW50byB0d28gY2FzZXMsIG9uZSBmb3Igd2hlbiB0aGUgZXhwcmVzc2lvbgogIC8vLyBldmFsdWF0ZWQgdG8gYGZhbHNlYCwgYW5kIG9uZSB3aGVyZSB0aGUgdHJ1dGggdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24KICAvLy8gZG9lc24ndCBtYXR0ZXIuCiAgdm9pZCBfcmVjb3JkUHJvbW90aW9uRXhwcmVzc2lvbihFeHByZXNzaW9uIGV4cHJlc3Npb24sCiAgICAgIFR5cGVQcm9tb3Rpb25GYWN0IGlmVHJ1ZSwgVHlwZVByb21vdGlvbkZhY3QgaWZGYWxzZSkgewogICAgX3Byb21vdGlvbkV4cHJlc3Npb24gPSBleHByZXNzaW9uOwogICAgX3RydWVGYWN0c0ZvclByb21vdGlvbkV4cHJlc3Npb24gPSBpZlRydWU7CiAgICBfY3VycmVudEZhY3RzID0gaWZGYWxzZTsKICB9Cn0KCi8vLyBBIHNpbmdsZSBmYWN0IHdoaWNoIGlzIGtub3duIHRvIHRoZSB0eXBlIHByb21vdGlvbiBlbmdpbmUgYWJvdXQgdGhlIHN0YXRlIG9mCi8vLyBhIHZhcmlhYmxlIChvciBhYm91dCB0aGUgZmxvdyBjb250cm9sIG9mIHRoZSBjb21wb25lbnQpLgovLy8KLy8vIFRoZSB0eXBlIGFyZ3VtZW50IFYgcmVwcmVzZW50cyBpcyB0aGUgY2xhc3Mgd2hpY2ggcmVwcmVzZW50cyBsb2NhbCB2YXJpYWJsZQovLy8gZGVjbGFyYXRpb25zLgovLy8KLy8vIEZhY3RzIGFyZSBsaW5rZWQgdG9nZXRoZXIgaW50byBsaW5rZWQgbGlzdHMgdmlhIHRoZSBbcHJldmlvdXNdIHBvaW50ZXIgaW50bwovLy8gYSBkYXRhIHN0cnVjdHVyZSBjYWxsZWQgYSAiZmFjdCBjaGFpbiIgKG9yIHNvbWV0aW1lcyBhICJmYWN0IHN0YXRlIiksIHdoaWNoCi8vLyByZXByZXNlbnRzIGFsbCBmYWN0cyB0aGF0IGFyZSBrbm93biB0byBob2xkIGF0IGEgY2VydGFpbiBwb2ludCBpbiB0aGUKLy8vIGNvbXBvbmVudC4KLy8vCi8vLyBUaGUgZmFjdCBpcyBzYWlkIHRvICJhcHBseSIgdG8gYSBnaXZlbiBwb2ludCBpbiB0aGUgZXhlY3V0aW9uIG9mIHRoZQovLy8gY29tcG9uZW50IGlmIHRoZSBmYWN0IGlzIHBhcnQgb2YgdGhlIGN1cnJlbnQgZmFjdCBzdGF0ZSBhdCB0aGUgcG9pbnQgdGhlCi8vLyBwYXJzZXIgcmVhY2hlcyB0aGF0IHBvaW50IGluIHRoZSBjb21wb25lbnQuCi8vLwovLy8gTm90ZToganVzdCBiZWNhdXNlIGEgZmFjdCAiYXBwbGllcyIgdG8gYSBnaXZlbiBwb2ludCBpbiB0aGUgZXhlY3V0aW9uIG9mCi8vLyB0aGUgY29tcG9uZW50IGRvZXNuJ3QgbWVhbiBhIHR5cGUgd2lsbCBiZSBwcm9tb3RlZC0taXQgc2ltcGx5IG1lYW5zIHRoYXQKLy8vIHRoZSBmYWN0IHdhcyBkZWR1Y2VkIGF0IGEgcHJldmlvdXMgcG9pbnQgaW4gdGhlIHN0cmFpZ2h0IGxpbmUgZXhlY3V0aW9uIG9mCi8vLyB0aGUgY29kZS4gIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgZmFjdCB3aWxsIGJlIG92ZXJzaGFkb3dlZCBieSBhIGxhdGVyCi8vLyBmYWN0LCBvciBpdHMgZWZmZWN0IHdpbGwgYmUgY2FuY2VsbGVkIGJ5IGEgbGF0ZXIgYXNzaWdubWVudC4gIFRoZSBmaW5hbAovLy8gZGV0ZW1pbmF0aW9uIG9mIHdoZXRoZXIgcHJvbW90aW9uIG9jY3VycyBpcyBsZWZ0IHRvIFtfY29tcHV0ZVByb21vdGVkVHlwZV0uCmFic3RyYWN0IGNsYXNzIFR5cGVQcm9tb3Rpb25GYWN0IHsKICAvLy8gVGhlIHZhcmlhYmxlIHRoaXMgZmFjdCByZWNvcmRzIGluZm9ybWF0aW9uIGFib3V0LCBvciBgbnVsbGAgaWYgdGhpcyBmYWN0CiAgLy8vIHJlY29yZHMgaW5mb3JtYXRpb24gYWJvdXQgZ2VuZXJhbCBmbG93IGNvbnRyb2wuCiAgZmluYWwgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZTsKCiAgLy8vIFRoZSBmYWN0IGNoYWluIHRoYXQgd2FzIGluIGVmZmVjdCBwcmlvciB0byBleGVjdXRpb24gb2YgdGhlIHN0YXRlbWVudCBvcgogIC8vLyBleHByZXNzaW9uIHRoYXQgY2F1c2VkIHRoaXMgZmFjdCB0byBiZSB0cnVlLgogIGZpbmFsIFR5cGVQcm9tb3Rpb25GYWN0IHByZXZpb3VzOwoKICAvLy8gSW50ZWdlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBmYWN0LiAgRWFjaCB0aW1lIGEgZmFjdCBpcyBjcmVhdGVkIGl0IGlzCiAgLy8vIGdpdmVuIGEgc2VxdWVuY2UgbnVtYmVyIG9uZSBncmVhdGVyIHRoYW4gdGhlIHByZXZpb3VzbHkgZ2VuZXJhdGVkIGZhY3QuCiAgLy8vIFRoaXMgc2ltcGxpZmllcyB0aGUgYWxnb3JpdGhtIGZvciBmaW5kaW5nIHRoZSBjb21tb24gYW5jZXN0b3Igb2YgdHdvCiAgLy8vIGZhY3RzOyB3ZSByZXBlYXRlZGx5IHdhbGsgYmFja3dhcmQgdGhlIGZhY3Qgd2l0aCB0aGUgbGFyZ2VyIHNlcXVlbmNlCiAgLy8vIG51bWJlciB1bnRpbCB0aGUgc2VxdWVuY2UgbnVtYmVycyBhcmUgdGhlIHNhbWUuCiAgZmluYWwgaW50IHNlcXVlbmNlTnVtYmVyOwoKICAvLy8gVGhlIG1vc3QgcmVjZW50IGZhY3QgYXBwZWFyaW5nIGluIHRoZSBmYWN0IGNoYWluIFtwcmV2aW91c10gd2hvc2UKICAvLy8gW3ZhcmlhYmxlXSBtYXRjaGVzIHRoaXMgb25lLCBvciBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gc3VjaCBmYWN0LgogIGZpbmFsIFR5cGVQcm9tb3Rpb25GYWN0IHByZXZpb3VzRm9yVmFyaWFibGU7CgogIC8vLyBUaGUgZnVuY3Rpb24gbmVzdGluZyBsZXZlbCBvZiB0aGUgZXhwcmVzc2lvbiB0aGF0IGxlZCB0byB0aGlzIGZhY3QuCiAgZmluYWwgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsOwoKICAvLy8gSWYgdGhpcyBmYWN0J3MgdmFyaWFibGUgd2FzIG11dGF0ZWQgd2l0aGluIGFueSBzY29wZXMgdGhlCiAgLy8vIGZhY3QgYXBwbGllcyB0bywgYSBzZXQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2NvcGVzLiAgT3RoZXJ3aXNlIGBudWxsYC4KICAvLy8KICAvLy8gVE9ETyhwYXVsYmVycnkpOiB0aGUgc2l6ZSBvZiB0aGlzIHNldCBpcyBwcm9iYWJseSB2ZXJ5IHNtYWxsIG1vc3Qgb2YgdGhlCiAgLy8vIHRpbWUuICBXb3VsZCBpdCBiZSBiZXR0ZXIgdG8gdXNlIGEgbGlzdD8KICBTZXQ8VHlwZVByb21vdGlvblNjb3BlPiBfbXV0YXRlZEluU2NvcGVzOwoKICAvLy8gSWYgdGhpcyBmYWN0J3MgdmFyaWFibGUgd2FzIGFjY2Vzc2VkIGluc2lkZSBhIGNsb3N1cmUgd2l0aGluIGFueSBzY29wZXMKICAvLy8gdGhlIGZhY3QgYXBwbGllcyB0bywgYSBzZXQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc2NvcGVzLiAgT3RoZXJ3aXNlIGBudWxsYC4KICAvLy8KICAvLy8gVE9ETyhwYXVsYmVycnkpOiB0aGUgc2l6ZSBvZiB0aGlzIHNldCBpcyBwcm9iYWJseSB2ZXJ5IHNtYWxsIG1vc3Qgb2YgdGhlCiAgLy8vIHRpbWUuICBXb3VsZCBpdCBiZSBiZXR0ZXIgdG8gdXNlIGEgbGlzdD8KICBTZXQ8VHlwZVByb21vdGlvblNjb3BlPiBfYWNjZXNzZWRJbkNsb3N1cmVJblNjb3BlczsKCiAgVHlwZVByb21vdGlvbkZhY3QodGhpcy5zZXF1ZW5jZU51bWJlciwgdGhpcy52YXJpYWJsZSwgdGhpcy5wcmV2aW91cywKICAgICAgdGhpcy5wcmV2aW91c0ZvclZhcmlhYmxlLCB0aGlzLmZ1bmN0aW9uTmVzdGluZ0xldmVsKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBwcm9tb3RlZCB0eXBlIGZvciBbdmFyaWFibGVdIGF0IGEgbG9jYXRpb24gaW4gdGhlIGNvZGUgd2hlcmUKICAvLy8gdGhpcyBmYWN0IGFwcGxpZXMuCiAgLy8vCiAgLy8vIFNob3VsZCBub3QgYmUgY2FsbGVkIHVudGlsIGFmdGVyIHBhcnNpbmcgb2YgdGhlIGVudGlyZSBtZXRob2QgaXMgY29tcGxldGUuCiAgRGFydFR5cGUgX2NvbXB1dGVQcm9tb3RlZFR5cGUoCiAgICAgIFR5cGVQcm9tb3RlckltcGwgcHJvbW90ZXIsIFR5cGVQcm9tb3Rpb25TY29wZSBzY29wZSk7CgogIC8vLyBSZWNvcmRzIHRoZSBmYWN0IHRoYXQgdGhlIHZhcmlhYmxlIHJlZmVyZW5jZWQgYnkgW2ZhY3RdIHdhcyBhY2Nlc3NlZAogIC8vLyB3aXRoaW4gdGhlIGdpdmVuIHNjb3BlLCBhdCB0aGUgZ2l2ZW4gZnVuY3Rpb24gbmVzdGluZyBsZXZlbC4KICAvLy8KICAvLy8gSWYgYG51bGxgIGlzIHBhc3NlZCBpbiBmb3IgW2ZhY3RdLCB0aGVyZSBpcyBubyBlZmZlY3QuCiAgc3RhdGljIHZvaWQgX3JlY29yZEFjY2Vzc2VkSW5TY29wZShUeXBlUHJvbW90aW9uRmFjdCBmYWN0LAogICAgICBUeXBlUHJvbW90aW9uU2NvcGUgc2NvcGUsIGludCBmdW5jdGlvbk5lc3RpbmdMZXZlbCkgewogICAgLy8gVE9ETyhwYXVsYmVycnkpOiBtYWtlIHNvbWUgaW50ZWdyYXRpb24gdGVzdCBjYXNlcyB0aGF0IGV4ZXJjaXNlIHRoZQogICAgLy8gYmVoYXZpb3JzIG9mIHRoaXMgZnVuY3Rpb24uICBJbiBwYXJ0aWN1bGFyIHZlcmlmeSB0aGF0IGl0J3MgY29ycmVjdCB0bwogICAgLy8gdGVzdCBmdW5jdGlvbk5lc3RpbmdMZXZlbCBhZ2FpbnN0IGZhY3QuZnVuY3Rpb25OZXN0aW5nTGV2ZWwgKGFzIG9wcG9zZWQKICAgIC8vIHRvIHRlc3RpbmcgaXQgYWdhaW5zdCBnZXRWYXJpYWJsZUZ1bmN0aW9uTmVzdGluZ0xldmVsKHZhcmlhYmxlKSkuCiAgICB3aGlsZSAoZmFjdCAhPSBudWxsKSB7CiAgICAgIGlmIChmdW5jdGlvbk5lc3RpbmdMZXZlbCA+IGZhY3QuZnVuY3Rpb25OZXN0aW5nTGV2ZWwpIHsKICAgICAgICBmYWN0Ll9hY2Nlc3NlZEluQ2xvc3VyZUluU2NvcGVzID8/PQogICAgICAgICAgICBuZXcgU2V0PFR5cGVQcm9tb3Rpb25TY29wZT4uaWRlbnRpdHkoKTsKICAgICAgICBpZiAoIWZhY3QuX2FjY2Vzc2VkSW5DbG9zdXJlSW5TY29wZXMuYWRkKHNjb3BlKSkgcmV0dXJuOwogICAgICB9CiAgICAgIGZhY3QgPSBmYWN0LnByZXZpb3VzRm9yVmFyaWFibGU7CiAgICB9CiAgfQoKICAvLy8gUmVjb3JkcyB0aGUgZmFjdCB0aGF0IHRoZSB2YXJpYWJsZSByZWZlcmVuY2VkIGJ5IFtmYWN0XSB3YXMgbXV0YXRlZAogIC8vLyB3aXRoaW4gdGhlIGdpdmVuIHNjb3BlLgogIC8vLwogIC8vLyBJZiBgbnVsbGAgaXMgcGFzc2VkIGluIGZvciBbZmFjdF0sIHRoZXJlIGlzIG5vIGVmZmVjdC4KICBzdGF0aWMgdm9pZCBfcmVjb3JkTXV0YXRlZEluU2NvcGUoCiAgICAgIFR5cGVQcm9tb3Rpb25GYWN0IGZhY3QsIFR5cGVQcm9tb3Rpb25TY29wZSBzY29wZSkgewogICAgd2hpbGUgKGZhY3QgIT0gbnVsbCkgewogICAgICBmYWN0Ll9tdXRhdGVkSW5TY29wZXMgPz89IG5ldyBTZXQ8VHlwZVByb21vdGlvblNjb3BlPi5pZGVudGl0eSgpOwogICAgICBpZiAoIWZhY3QuX211dGF0ZWRJblNjb3Blcy5hZGQoc2NvcGUpKSByZXR1cm47CiAgICAgIGZhY3QgPSBmYWN0LnByZXZpb3VzRm9yVmFyaWFibGU7CiAgICB9CiAgfQp9CgovLy8gUmVwcmVzZW50cyBhIGNvbnRpZ3VvdXMgYmxvY2sgb2YgcHJvZ3JhbSB0ZXh0IGluIHdoaWNoIHZhcmlhYmxlcyBtYXkgb3IgbWF5Ci8vLyBub3QgYmUgcHJvbW90ZWQuICBBbHNvIHVzZWQgYXMgYSBzdGFjayB0byBrZWVwIHRyYWNrIG9mIHN0YXRlIHdoaWxlIHRoZQovLy8gbWV0aG9kIGlzIGJlaW5nIHBhcnNlZC4KY2xhc3MgVHlwZVByb21vdGlvblNjb3BlIHsKICAvLy8gVGhlIG5lc3RpbmcgZGVwdGggb2YgdGhpcyBzY29wZS4gIFRoZSBvdXRlcm1vc3Qgc2NvcGUgKHJlcHJlc2VudGluZyB0aGUKICAvLy8gd2hvbGUgbWV0aG9kIGJvZHkpIGhhcyBhIGRlcHRoIG9mIDAuCiAgZmluYWwgaW50IF9kZXB0aDsKCiAgLy8vIFRoZSBbVHlwZVByb21vdGlvblNjb3BlXSByZXByZXNlbnRpbmcgdGhlIHNjb3BlIGVuY2xvc2luZyB0aGlzIG9uZS4KICBmaW5hbCBUeXBlUHJvbW90aW9uU2NvcGUgX2VuY2xvc2luZzsKCiAgVHlwZVByb21vdGlvblNjb3BlKHRoaXMuX2VuY2xvc2luZykgOiBfZGVwdGggPSBfZW5jbG9zaW5nLl9kZXB0aCArIDE7CgogIGNvbnN0IFR5cGVQcm9tb3Rpb25TY29wZS5fdG9wTGV2ZWwoKQogICAgICA6IF9lbmNsb3NpbmcgPSBudWxsLAogICAgICAgIF9kZXB0aCA9IDA7CgogIC8vLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhpcyBzY29wZSBjb21wbGV0ZWx5IGVuY2xvc2VzIChvciBpcyB0aGUgc2FtZSBhcykKICAvLy8gW290aGVyXS4KICBib29sIGNvbnRhaW5zU2NvcGUoVHlwZVByb21vdGlvblNjb3BlIG90aGVyKSB7CiAgICBpZiAodGhpcy5fZGVwdGggPiBvdGhlci5fZGVwdGgpIHsKICAgICAgLy8gV2UgY2FuJ3QgcG9zc2libHkgY29udGFpbiBhIHNjb3BlIGlmIHdlIGFyZSBhdCBncmVhdGVyIG5lc3RpbmcgZGVwdGgKICAgICAgLy8gdGhhbiBpdCBpcy4KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgd2hpbGUgKHRoaXMuX2RlcHRoIDwgb3RoZXIuX2RlcHRoKSB7CiAgICAgIG90aGVyID0gb3RoZXIuX2VuY2xvc2luZzsKICAgIH0KICAgIHJldHVybiBpZGVudGljYWwodGhpcywgb3RoZXIpOwogIH0KfQoKLy8vIFtUeXBlUHJvbW90aW9uU2NvcGVdIHJlcHJlc2VudGluZyB0aGUgInRoZW4iIGFuZCAiZWxzZSIgYm9kaWVzIG9mIGFuICJpZiIKLy8vIHN0YXRlbWVudCBvciBjb25kaXRpb25hbCBleHByZXNzaW9uLgpjbGFzcyBfQ29uZGl0aW9uYWxTY29wZSBleHRlbmRzIFR5cGVQcm9tb3Rpb25TY29wZSB7CiAgLy8vIFRoZSBmYWN0IHN0YXRlIGluIGVmZmVjdCBhdCB0aGUgdG9wIG9mIHRoZSAiZWxzZSIgYmxvY2suCiAgZmluYWwgVHlwZVByb21vdGlvbkZhY3QgYmVmb3JlRWxzZTsKCiAgLy8vIFRoZSBmYWN0IHN0YXRlIHdoaWNoIHdhcyBpbiBlZmZlY3QgYXQgdGhlIGJvdHRvbSBvZiB0aGUgInRoZW4iIGJsb2NrLgogIFR5cGVQcm9tb3Rpb25GYWN0IGFmdGVyVHJ1ZTsKCiAgX0NvbmRpdGlvbmFsU2NvcGUoVHlwZVByb21vdGlvblNjb3BlIGVuY2xvc2luZywgdGhpcy5iZWZvcmVFbHNlKQogICAgICA6IHN1cGVyKGVuY2xvc2luZyk7Cn0KCi8vLyBbVHlwZVByb21vdGlvbkZhY3RdIHJlcHJlc2VudGluZyBhbiAiaXMiIGNoZWNrIHdoaWNoIHN1Y2NlZWRlZC4KY2xhc3MgX0lzQ2hlY2sgZXh0ZW5kcyBUeXBlUHJvbW90aW9uRmFjdCB7CiAgLy8vIFRoZSB0eXBlIGFwcGVhcmluZyBvbiB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mICJpcyIuCiAgZmluYWwgRGFydFR5cGUgY2hlY2tlZFR5cGU7CgogIF9Jc0NoZWNrKAogICAgICBpbnQgc2VxdWVuY2VOdW1iZXIsCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsCiAgICAgIFR5cGVQcm9tb3Rpb25GYWN0IHByZXZpb3VzLAogICAgICBUeXBlUHJvbW90aW9uRmFjdCBwcmV2aW91c0ZvclZhcmlhYmxlLAogICAgICBpbnQgZnVuY3Rpb25OZXN0aW5nTGV2ZWwsCiAgICAgIHRoaXMuY2hlY2tlZFR5cGUpCiAgICAgIDogc3VwZXIoc2VxdWVuY2VOdW1iZXIsIHZhcmlhYmxlLCBwcmV2aW91cywgcHJldmlvdXNGb3JWYXJpYWJsZSwKICAgICAgICAgICAgZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnaXNDaGVjaygkY2hlY2tlZFR5cGUpJzsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgX2NvbXB1dGVQcm9tb3RlZFR5cGUoCiAgICAgIFR5cGVQcm9tb3RlckltcGwgcHJvbW90ZXIsIFR5cGVQcm9tb3Rpb25TY29wZSBzY29wZSkgewogICAgdmFyIHByZXZpb3VzUHJvbW90ZWRUeXBlID0KICAgICAgICBwcmV2aW91c0ZvclZhcmlhYmxlPy5fY29tcHV0ZVByb21vdGVkVHlwZShwcm9tb3Rlciwgc2NvcGUpOwoKICAgIC8vIElmIHRoZSB2YXJpYWJsZSB3YXMgbXV0YXRlZCBzb21ld2hlcmUgaW4gdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwKICAgIC8vIHByb21vdGlvbiwgcHJvbW90aW9uIGRvZXMgbm90IG9jY3VyLgogICAgaWYgKF9tdXRhdGVkSW5TY29wZXMgIT0gbnVsbCkgewogICAgICBmb3IgKHZhciBhc3NpZ25tZW50U2NvcGUgaW4gX211dGF0ZWRJblNjb3BlcykgewogICAgICAgIGlmIChhc3NpZ25tZW50U2NvcGUuY29udGFpbnNTY29wZShzY29wZSkpIHsKICAgICAgICAgIHJldHVybiBwcmV2aW91c1Byb21vdGVkVHlwZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBJZiB0aGUgdmFyaWFibGUgd2FzIG11dGF0ZWQgYW55d2hlcmUsIGFuZCBpdCB3YXMgYWNjZXNzZWQgaW5zaWRlIGEKICAgIC8vIGNsb3N1cmUgc29tZXdoZXJlIGluIHRoZSBzY29wZSBvZiB0aGUgcG90ZW50aWFsIHByb21vdGlvbiwgcHJvbW90aW9uIGRvZXMKICAgIC8vIG5vdCBvY2N1ci4KICAgIGlmIChwcm9tb3Rlci53YXNWYXJpYWJsZU11dGF0ZWRBbnl3aGVyZSh2YXJpYWJsZSkgJiYKICAgICAgICBfYWNjZXNzZWRJbkNsb3N1cmVJblNjb3BlcyAhPSBudWxsKSB7CiAgICAgIGZvciAodmFyIGFjY2Vzc1Njb3BlIGluIF9hY2Nlc3NlZEluQ2xvc3VyZUluU2NvcGVzKSB7CiAgICAgICAgaWYgKGFjY2Vzc1Njb3BlLmNvbnRhaW5zU2NvcGUoc2NvcGUpKSB7CiAgICAgICAgICByZXR1cm4gcHJldmlvdXNQcm9tb3RlZFR5cGU7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gV2hhdCB3ZSBkbyBub3cgZGVwZW5kcyBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlIHByZXZpb3VzIHR5cGUgb2YKICAgIC8vIHRoZSB2YXJpYWJsZSBhbmQgdGhlIHR5cGUgd2UgYXJlIGNoZWNraW5nIGFnYWluc3QuCiAgICB2YXIgcHJldmlvdXNUeXBlID0gcHJldmlvdXNQcm9tb3RlZFR5cGUgPz8gdmFyaWFibGUudHlwZTsKICAgIGlmIChwcm9tb3Rlci50eXBlU2NoZW1hRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YoY2hlY2tlZFR5cGUsIHByZXZpb3VzVHlwZSkpIHsKICAgICAgLy8gVGhlIHR5cGUgd2UgYXJlIGNoZWNraW5nIGFnYWluc3QgaXMgYSBzdWJ0eXBlIG9mIHRoZSBwcmV2aW91cyB0eXBlIG9mCiAgICAgIC8vIHRoZSB2YXJpYWJsZSwgc28gdGhpcyBpcyBhIHJlZmluZW1lbnQ7IHdlIGNhbiBwcm9tb3RlLgogICAgICByZXR1cm4gY2hlY2tlZFR5cGU7CiAgICB9IGVsc2UgaWYgKHByZXZpb3VzVHlwZSBpcyBUeXBlUGFyYW1ldGVyVHlwZSAmJgogICAgICAgIHByb21vdGVyLnR5cGVTY2hlbWFFbnZpcm9ubWVudAogICAgICAgICAgICAuaXNTdWJ0eXBlT2YoY2hlY2tlZFR5cGUsIHByZXZpb3VzVHlwZS5ib3VuZCkpIHsKICAgICAgLy8gVGhlIHR5cGUgd2UgYXJlIGNoZWNraW5nIGFnYWluc3QgaXMgYSBzdWJ0eXBlIG9mIHRoZSBib3VuZCBvZiB0aGUKICAgICAgLy8gcHJldmlvdXMgdHlwZSBvZiB0aGUgdmFyaWFibGU7IHdlIGNhbiBwcm9tb3RlIHRoZSBib3VuZC4KICAgICAgcmV0dXJuIG5ldyBUeXBlUGFyYW1ldGVyVHlwZShwcmV2aW91c1R5cGUucGFyYW1ldGVyLCBjaGVja2VkVHlwZSk7CiAgICB9IGVsc2UgewogICAgICAvLyBUaGUgdHlwZXMgYXJlbid0IHN1ZmZpY2llbnRseSByZWxhdGVkOyB3ZSBjYW4ndCBwcm9tb3RlLgogICAgICByZXR1cm4gcHJldmlvdXNQcm9tb3RlZFR5cGU7CiAgICB9CiAgfQp9CgovLy8gW1R5cGVQcm9tb3Rpb25TY29wZV0gcmVwcmVzZW50aW5nIHRoZSBSSFMgb2YgYSBsb2dpY2FsIGV4cHJlc3Npb24uCmNsYXNzIF9Mb2dpY2FsU2NvcGUgZXh0ZW5kcyBUeXBlUHJvbW90aW9uU2NvcGUgewogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgbG9naWNhbCBvcGVyYXRpb24gaXMgYW4gYCYmYCBvciBhbiBgfHxgLgogIGZpbmFsIGJvb2wgaXNBbmQ7CgogIC8vLyBUaGUgZmFjdCBzdGF0ZSBpbiBlZmZlY3QgaWYgdGhlIGxvZ2ljYWwgZXhwcmVzc2lvbiBnZXRzIHNob3J0LWN1dC4KICBmaW5hbCBUeXBlUHJvbW90aW9uRmFjdCBzaG9ydGN1dEZhY3RzOwoKICBfTG9naWNhbFNjb3BlKFR5cGVQcm9tb3Rpb25TY29wZSBlbmNsb3NpbmcsIHRoaXMuaXNBbmQsIHRoaXMuc2hvcnRjdXRGYWN0cykKICAgICAgOiBzdXBlcihlbmNsb3NpbmcpOwp9CgovLy8gSW5zdGFuY2Ugb2YgW1R5cGVQcm9tb3Rpb25GYWN0XSByZXByZXNlbnRpbmcgdGhlIGZhY3RzIHdoaWNoIGFyZSBrbm93biBvbgovLy8gZW50cnkgdG8gdGhlIG1ldGhvZCAoaS5lLiBub3RoaW5nKS4KY2xhc3MgX051bGxGYWN0IGV4dGVuZHMgVHlwZVByb21vdGlvbkZhY3QgewogIF9OdWxsRmFjdCgpIDogc3VwZXIoMCwgbnVsbCwgbnVsbCwgbnVsbCwgMCk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdudWxsJzsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgX2NvbXB1dGVQcm9tb3RlZFR5cGUoCiAgICAgIFR5cGVQcm9tb3RlciBwcm9tb3RlciwgVHlwZVByb21vdGlvblNjb3BlIHNjb3BlKSB7CiAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcignVHJpZWQgdG8gY3JlYXRlIHByb21vdGVkIHR5cGUgZm9yIG5vIHZhcmlhYmxlJyk7CiAgfQp9CgovLy8gSW5zdGFuY2Ugb2YgW1R5cGVQcm9tb3Rpb25TY29wZV0gcmVwcmVzZW50aW5nIHRoZSBlbnRpcmUgbWV0aG9kIGJvZHkuCmNsYXNzIF9Ub3BMZXZlbFNjb3BlIGV4dGVuZHMgVHlwZVByb21vdGlvblNjb3BlIHsKICBjb25zdCBfVG9wTGV2ZWxTY29wZSgpIDogc3VwZXIuX3RvcExldmVsKCk7Cn0Kgt4ATU4/ASFHAUgBMAFDAUIBQgRPTFBQSk1NBFBKUU5BBE1OSh4aAUYiAUIBMCcBUDkGUR8gUAFLDhQBTERAAVFLIigBSz0aAU4fTAE7EwFQSw0GTksmPwFKID9OAUoPTwIBSgRLNTI0AQwvAQxRJAwBDBYBDEIBDCoBDBwBDE4BDBUBDCZFDAEMP1ABDFECAUgES040NzUBTRcGOh4BSyQGUCVBAUslJQFOTA4jAVFQPSMBTj8yNgFRSj0BTA8jAUg4AUwmJBojBAEMOAEMIFEnNAQBT0lNIRoEAQwVHS1QLiVKJgQBDEEqRSkrRkssFFFJNDQEAQwpHUsvMU4yRkkfBAEMGyMtLkEEAQxNKSkuF0k8DSIdOyEGBAEMFBwsFz4xDhEGBAEMJkAkMy40EQQBUUUBDD9PITEgIxIXLB4PF0gGBAFPDgZKTBE7AUoPUCIzQkwtBioEAUowNAFPQQFEQgFNGEEBQThJTUtQR1EONk5MT0EyD09PGS8xNAgGOExPLDUuKDtQOyVGMggGJRcEAUsoBkQ0T0kYB0s2GgQBSycGRDQvLRsBUA5MS1FPB0wWIhQiDRozMRgPGAgGHQ4EAVEMIkodFCkIBgE4IEsIKD5JQQgGEQQBS0hQOQZRSkwWOT0nLx0EAgFRPQRQEgRQUEoPBElNMARNTU9LTFAjTzYmAU8zJAFMTktLNhwBSEcvAUoiAUBNBk8vLAFOUQZPLzYBRzwBUBkGUSE8AUtDBj09PEtOT0kbPiw0QQgnBgQBSh4GPSU6G0g1JwYEAgFQTBwbTisUAUonAUgBJxsUAUwPMSZOFRQGKSAGIwQCAU4pNT8mAUwfAUMaAgFEKzkeAQwaJCItIBhHIwEMMAEMIT0fRAFLLCQ2NCcKCAYBSlESOS48MCcKCAYBTzo+UU9AGjQnPUtCSQ1CIwYEAgFHMUUUAUkpAU4aAgFOKCwvAQwfAQwhOUsEAgFKMi4CAT5wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9wcm9tb3Rpb24uZGFydDxzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2NvbGxlY3Rpb25zLmRhcnSyAC8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCmxpYnJhcnkgZmFzdGEuY29sbGVjdGlvbnM7CgppbXBvcnQgJ2RhcnQ6Y29yZScgaGlkZSBNYXBFbnRyeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBNYXBFbnRyeSwKICAgICAgICBOdWxsTGl0ZXJhbCwKICAgICAgICBTdGF0ZW1lbnQsCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiwKICAgICAgICBzZXRQYXJlbnRzLAogICAgICAgIHRyYW5zZm9ybUxpc3QsCiAgICAgICAgdmlzaXRMaXN0OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIHNob3cgVHlwZUVudmlyb25tZW50OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC92aXNpdG9yLmRhcnQnCiAgICBzaG93CiAgICAgICAgRXhwcmVzc2lvblZpc2l0b3IsCiAgICAgICAgRXhwcmVzc2lvblZpc2l0b3IxLAogICAgICAgIFRyYW5zZm9ybWVyLAogICAgICAgIFRyZWVWaXNpdG9yLAogICAgICAgIFZpc2l0b3I7CgppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnCiAgICBzaG93IHRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdCwgdGVtcGxhdGVFeHBlY3RlZEJ1dEdvdDsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyBnZXRGaWxlVXJpLCB1bnN1cHBvcnRlZDsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvaW5mZXJlbmNlX2hlbHBlci5kYXJ0JyBzaG93IEluZmVyZW5jZUhlbHBlcjsKCi8vLyBNaXhpbiBmb3Igc3ByZWFkIGFuZCBjb250cm9sLWZsb3cgZWxlbWVudHMuCi8vLwovLy8gU3ByZWFkIGFuZCBjb250cm9sLWZsb3cgZWxlbWVudHMgYXJlIG5vdCB0cnVseSBleHByZXNzaW9ucyBhbmQgdGhleSBjYW5ub3QKLy8vIGFwcGVhciBpbiBhcmJpdHJhcnkgZXhwcmVzc2lvbiBjb250ZXh0cyBpbiB0aGUgS2VybmVsIHByb2dyYW0uICBUaGV5IGNhbgovLy8gb25seSBhcHBlYXIgYXMgZWxlbWVudHMgaW4gbGlzdCBvciBzZXQgbGl0ZXJhbHMuICBUaGV5IGFyZSB0cmFuc2xhdGVkIGludG8KLy8vIGEgbG93ZXItbGV2ZWwgcmVwcmVzZW50YXRpb24gYW5kIG5ldmVyIHNlcmlhbGl6ZWQgdG8gLmRpbGwgZmlsZXMuCm1peGluIENvbnRyb2xGbG93RWxlbWVudCBvbiBFeHByZXNzaW9uIHsKICAvLy8gU3ByZWFkIGFuZCBjb250b2wtZmxvdyBlbGVtZW50cyBhcmUgbm90IGV4cHJlc3Npb25zIGFuZCBkbyBub3QgaGF2ZSBhCiAgLy8vIHN0YXRpYyB0eXBlLgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFN0YXRpY1R5cGUoVHlwZUVudmlyb25tZW50IHR5cGVzKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImdldFN0YXRpY1R5cGUiLCBmaWxlT2Zmc2V0LCBnZXRGaWxlVXJpKHRoaXMpKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChFeHByZXNzaW9uVmlzaXRvcjxPYmplY3Q+IHYpID0+IHYuZGVmYXVsdEV4cHJlc3Npb24odGhpcyk7CgogIEBvdmVycmlkZQogIGFjY2VwdDEoRXhwcmVzc2lvblZpc2l0b3IxPE9iamVjdCwgT2JqZWN0PiB2LCBhcmcpID0+CiAgICAgIHYuZGVmYXVsdEV4cHJlc3Npb24odGhpcywgYXJnKTsKfQoKLy8vIEEgc3ByZWFkIGVsZW1lbnQgaW4gYSBsaXN0IG9yIHNldCBsaXRlcmFsLgpjbGFzcyBTcHJlYWRFbGVtZW50IGV4dGVuZHMgRXhwcmVzc2lvbiB3aXRoIENvbnRyb2xGbG93RWxlbWVudCB7CiAgRXhwcmVzc2lvbiBleHByZXNzaW9uOwogIGJvb2wgaXNOdWxsQXdhcmU7CgogIC8vLyBUaGUgdHlwZSBvZiB0aGUgZWxlbWVudHMgb2YgdGhlIGNvbGxlY3Rpb24gdGhhdCBbZXhwcmVzc2lvbl0gZXZhbHVhdGVzIHRvLgogIC8vLwogIC8vLyBJdCBpcyBzZXQgZHVyaW5nIHR5cGUgaW5mZXJlbmNlIGFuZCBpcyB1c2VkIHRvIGFkZCBhcHByb3ByaWF0ZSB0eXBlIGNhc3RzCiAgLy8vIGR1cmluZyB0aGUgZGVzdWdhcmluZy4KICBEYXJ0VHlwZSBlbGVtZW50VHlwZTsKCiAgU3ByZWFkRWxlbWVudCh0aGlzLmV4cHJlc3Npb24sIHRoaXMuaXNOdWxsQXdhcmUpIHsKICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENoaWxkcmVuKFZpc2l0b3I8T2JqZWN0PiB2KSB7CiAgICBleHByZXNzaW9uPy5hY2NlcHQodik7CiAgfQoKICBAb3ZlcnJpZGUKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoZXhwcmVzc2lvbiAhPSBudWxsKSB7CiAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLmFjY2VwdCh2KTsKICAgICAgZXhwcmVzc2lvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBBbiAnaWYnIGVsZW1lbnQgaW4gYSBsaXN0IG9yIHNldCBsaXRlcmFsLgpjbGFzcyBJZkVsZW1lbnQgZXh0ZW5kcyBFeHByZXNzaW9uIHdpdGggQ29udHJvbEZsb3dFbGVtZW50IHsKICBFeHByZXNzaW9uIGNvbmRpdGlvbjsKICBFeHByZXNzaW9uIHRoZW47CiAgRXhwcmVzc2lvbiBvdGhlcndpc2U7CgogIElmRWxlbWVudCh0aGlzLmNvbmRpdGlvbiwgdGhpcy50aGVuLCB0aGlzLm90aGVyd2lzZSkgewogICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgdGhlbj8ucGFyZW50ID0gdGhpczsKICAgIG90aGVyd2lzZT8ucGFyZW50ID0gdGhpczsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvcjxPYmplY3Q+IHYpIHsKICAgIGNvbmRpdGlvbj8uYWNjZXB0KHYpOwogICAgdGhlbj8uYWNjZXB0KHYpOwogICAgb3RoZXJ3aXNlPy5hY2NlcHQodik7CiAgfQoKICBAb3ZlcnJpZGUKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uLmFjY2VwdCh2KTsKICAgICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKHRoZW4gIT0gbnVsbCkgewogICAgICB0aGVuID0gdGhlbi5hY2NlcHQodik7CiAgICAgIHRoZW4/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAob3RoZXJ3aXNlICE9IG51bGwpIHsKICAgICAgb3RoZXJ3aXNlID0gb3RoZXJ3aXNlLmFjY2VwdCh2KTsKICAgICAgb3RoZXJ3aXNlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEEgJ2ZvcicgZWxlbWVudCBpbiBhIGxpc3Qgb3Igc2V0IGxpdGVyYWwuCmNsYXNzIEZvckVsZW1lbnQgZXh0ZW5kcyBFeHByZXNzaW9uIHdpdGggQ29udHJvbEZsb3dFbGVtZW50IHsKICBmaW5hbCBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlczsgLy8gTWF5IGJlIGVtcHR5LCBidXQgbm90IG51bGwuCiAgRXhwcmVzc2lvbiBjb25kaXRpb247IC8vIE1heSBiZSBudWxsLgogIGZpbmFsIExpc3Q8RXhwcmVzc2lvbj4gdXBkYXRlczsgLy8gTWF5IGJlIGVtcHR5LCBidXQgbm90IG51bGwuCiAgRXhwcmVzc2lvbiBib2R5OwoKICBGb3JFbGVtZW50KHRoaXMudmFyaWFibGVzLCB0aGlzLmNvbmRpdGlvbiwgdGhpcy51cGRhdGVzLCB0aGlzLmJvZHkpIHsKICAgIHNldFBhcmVudHModmFyaWFibGVzLCB0aGlzKTsKICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIHNldFBhcmVudHModXBkYXRlcywgdGhpcyk7CiAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yPE9iamVjdD4gdikgewogICAgdmlzaXRMaXN0KHZhcmlhYmxlcywgdik7CiAgICBjb25kaXRpb24/LmFjY2VwdCh2KTsKICAgIHZpc2l0TGlzdCh1cGRhdGVzLCB2KTsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICB9CgogIEBvdmVycmlkZQogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIHRyYW5zZm9ybUxpc3QodmFyaWFibGVzLCB2LCB0aGlzKTsKICAgIGlmIChjb25kaXRpb24gIT0gbnVsbCkgewogICAgICBjb25kaXRpb24gPSBjb25kaXRpb24uYWNjZXB0KHYpOwogICAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICB0cmFuc2Zvcm1MaXN0KHVwZGF0ZXMsIHYsIHRoaXMpOwogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgovLy8gQSAnZm9yLWluJyBlbGVtZW50IGluIGEgbGlzdCBvciBzZXQgbGl0ZXJhbC4KY2xhc3MgRm9ySW5FbGVtZW50IGV4dGVuZHMgRXhwcmVzc2lvbiB3aXRoIENvbnRyb2xGbG93RWxlbWVudCB7CiAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZTsgLy8gSGFzIG5vIGluaXRpYWxpemVyLgogIEV4cHJlc3Npb24gaXRlcmFibGU7CiAgU3RhdGVtZW50IHByb2xvZ3VlOyAvLyBNYXkgYmUgbnVsbC4KICBFeHByZXNzaW9uIGJvZHk7CiAgRXhwcmVzc2lvbiBwcm9ibGVtOyAvLyBNYXkgYmUgbnVsbC4KICBib29sIGlzQXN5bmM7IC8vIFRydWUgaWYgdGhpcyBpcyBhbiAnYXdhaXQgZm9yJyBsb29wLgoKICBGb3JJbkVsZW1lbnQoCiAgICAgIHRoaXMudmFyaWFibGUsIHRoaXMuaXRlcmFibGUsIHRoaXMucHJvbG9ndWUsIHRoaXMuYm9keSwgdGhpcy5wcm9ibGVtLAogICAgICB7dGhpcy5pc0FzeW5jOiBmYWxzZX0pIHsKICAgIHZhcmlhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgaXRlcmFibGU/LnBhcmVudCA9IHRoaXM7CiAgICBwcm9sb2d1ZT8ucGFyZW50ID0gdGhpczsKICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICBwcm9ibGVtPy5wYXJlbnQgPSB0aGlzOwogIH0KCiAgdmlzaXRDaGlsZHJlbihWaXNpdG9yPE9iamVjdD4gdikgewogICAgdmFyaWFibGU/LmFjY2VwdCh2KTsKICAgIGl0ZXJhYmxlPy5hY2NlcHQodik7CiAgICBwcm9sb2d1ZT8uYWNjZXB0KHYpOwogICAgYm9keT8uYWNjZXB0KHYpOwogICAgcHJvYmxlbT8uYWNjZXB0KHYpOwogIH0KCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKHZhcmlhYmxlICE9IG51bGwpIHsKICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZS5hY2NlcHQodik7CiAgICAgIHZhcmlhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKGl0ZXJhYmxlICE9IG51bGwpIHsKICAgICAgaXRlcmFibGUgPSBpdGVyYWJsZS5hY2NlcHQodik7CiAgICAgIGl0ZXJhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKHByb2xvZ3VlICE9IG51bGwpIHsKICAgICAgcHJvbG9ndWUgPSBwcm9sb2d1ZS5hY2NlcHQodik7CiAgICAgIHByb2xvZ3VlPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBib2R5ID0gYm9keS5hY2NlcHQodik7CiAgICAgIGJvZHk/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgICBpZiAocHJvYmxlbSAhPSBudWxsKSB7CiAgICAgIHByb2JsZW0gPSBwcm9ibGVtLmFjY2VwdCh2KTsKICAgICAgcHJvYmxlbT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCm1peGluIENvbnRyb2xGbG93TWFwRW50cnkgaW1wbGVtZW50cyBNYXBFbnRyeSB7CiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBnZXQga2V5IHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoJ0NvbnRyb2xGbG93TWFwRW50cnkua2V5IGdldHRlcicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXQga2V5KEV4cHJlc3Npb24gZXhwcikgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcignQ29udHJvbEZsb3dNYXBFbnRyeS5rZXkgc2V0dGVyJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGdldCB2YWx1ZSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCdDb250cm9sRmxvd01hcEVudHJ5LnZhbHVlIGdldHRlcicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXQgdmFsdWUoRXhwcmVzc2lvbiBleHByKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCdDb250cm9sRmxvd01hcEVudHJ5LnZhbHVlIHNldHRlcicpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFRyZWVWaXNpdG9yPE9iamVjdD4gdikgPT4gdi5kZWZhdWx0VHJlZU5vZGUodGhpcyk7Cn0KCi8vLyBBIHNwcmVhZCBlbGVtZW50IGluIGEgbWFwIGxpdGVyYWwuCmNsYXNzIFNwcmVhZE1hcEVudHJ5IGV4dGVuZHMgVHJlZU5vZGUgd2l0aCBDb250cm9sRmxvd01hcEVudHJ5IHsKICBFeHByZXNzaW9uIGV4cHJlc3Npb247CiAgYm9vbCBpc051bGxBd2FyZTsKCiAgLy8vIFRoZSB0eXBlIG9mIHRoZSBtYXAgZW50cmllcyBvZiB0aGUgbWFwIHRoYXQgW2V4cHJlc3Npb25dIGV2YWx1YXRlcyB0by4KICAvLy8KICAvLy8gSXQgaXMgc2V0IGR1cmluZyB0eXBlIGluZmVyZW5jZSBhbmQgaXMgdXNlZCB0byBhZGQgYXBwcm9wcmlhdGUgdHlwZSBjYXN0cwogIC8vLyBkdXJpbmcgdGhlIGRlc3VnYXJpbmcuCiAgRGFydFR5cGUgZW50cnlUeXBlOwoKICBTcHJlYWRNYXBFbnRyeSh0aGlzLmV4cHJlc3Npb24sIHRoaXMuaXNOdWxsQXdhcmUpIHsKICAgIGV4cHJlc3Npb24/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENoaWxkcmVuKFZpc2l0b3I8T2JqZWN0PiB2KSB7CiAgICBleHByZXNzaW9uPy5hY2NlcHQodik7CiAgfQoKICBAb3ZlcnJpZGUKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICBpZiAoZXhwcmVzc2lvbiAhPSBudWxsKSB7CiAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLmFjY2VwdCh2KTsKICAgICAgZXhwcmVzc2lvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBBbiAnaWYnIGVsZW1lbnQgaW4gYSBtYXAgbGl0ZXJhbC4KY2xhc3MgSWZNYXBFbnRyeSBleHRlbmRzIFRyZWVOb2RlIHdpdGggQ29udHJvbEZsb3dNYXBFbnRyeSB7CiAgRXhwcmVzc2lvbiBjb25kaXRpb247CiAgTWFwRW50cnkgdGhlbjsKICBNYXBFbnRyeSBvdGhlcndpc2U7CgogIElmTWFwRW50cnkodGhpcy5jb25kaXRpb24sIHRoaXMudGhlbiwgdGhpcy5vdGhlcndpc2UpIHsKICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIHRoZW4/LnBhcmVudCA9IHRoaXM7CiAgICBvdGhlcndpc2U/LnBhcmVudCA9IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENoaWxkcmVuKFZpc2l0b3I8T2JqZWN0PiB2KSB7CiAgICBjb25kaXRpb24/LmFjY2VwdCh2KTsKICAgIHRoZW4/LmFjY2VwdCh2KTsKICAgIG90aGVyd2lzZT8uYWNjZXB0KHYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdHJhbnNmb3JtQ2hpbGRyZW4oVHJhbnNmb3JtZXIgdikgewogICAgaWYgKGNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5hY2NlcHQodik7CiAgICAgIGNvbmRpdGlvbj8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmICh0aGVuICE9IG51bGwpIHsKICAgICAgdGhlbiA9IHRoZW4uYWNjZXB0KHYpOwogICAgICB0aGVuPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKG90aGVyd2lzZSAhPSBudWxsKSB7CiAgICAgIG90aGVyd2lzZSA9IG90aGVyd2lzZS5hY2NlcHQodik7CiAgICAgIG90aGVyd2lzZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICB9Cn0KCi8vLyBBICdmb3InIGVsZW1lbnQgaW4gYSBtYXAgbGl0ZXJhbC4KY2xhc3MgRm9yTWFwRW50cnkgZXh0ZW5kcyBUcmVlTm9kZSB3aXRoIENvbnRyb2xGbG93TWFwRW50cnkgewogIGZpbmFsIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzOyAvLyBNYXkgYmUgZW1wdHksIGJ1dCBub3QgbnVsbC4KICBFeHByZXNzaW9uIGNvbmRpdGlvbjsgLy8gTWF5IGJlIG51bGwuCiAgZmluYWwgTGlzdDxFeHByZXNzaW9uPiB1cGRhdGVzOyAvLyBNYXkgYmUgZW1wdHksIGJ1dCBub3QgbnVsbC4KICBNYXBFbnRyeSBib2R5OwoKICBGb3JNYXBFbnRyeSh0aGlzLnZhcmlhYmxlcywgdGhpcy5jb25kaXRpb24sIHRoaXMudXBkYXRlcywgdGhpcy5ib2R5KSB7CiAgICBzZXRQYXJlbnRzKHZhcmlhYmxlcywgdGhpcyk7CiAgICBjb25kaXRpb24/LnBhcmVudCA9IHRoaXM7CiAgICBzZXRQYXJlbnRzKHVwZGF0ZXMsIHRoaXMpOwogICAgYm9keT8ucGFyZW50ID0gdGhpczsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvcjxPYmplY3Q+IHYpIHsKICAgIHZpc2l0TGlzdCh2YXJpYWJsZXMsIHYpOwogICAgY29uZGl0aW9uPy5hY2NlcHQodik7CiAgICB2aXNpdExpc3QodXBkYXRlcywgdik7CiAgICBib2R5Py5hY2NlcHQodik7CiAgfQoKICBAb3ZlcnJpZGUKICB0cmFuc2Zvcm1DaGlsZHJlbihUcmFuc2Zvcm1lciB2KSB7CiAgICB0cmFuc2Zvcm1MaXN0KHZhcmlhYmxlcywgdiwgdGhpcyk7CiAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgY29uZGl0aW9uID0gY29uZGl0aW9uLmFjY2VwdCh2KTsKICAgICAgY29uZGl0aW9uPy5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgdHJhbnNmb3JtTGlzdCh1cGRhdGVzLCB2LCB0aGlzKTsKICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogIH0KfQoKLy8vIEEgJ2Zvci1pbicgZWxlbWVudCBpbiBhIG1hcCBsaXRlcmFsLgpjbGFzcyBGb3JJbk1hcEVudHJ5IGV4dGVuZHMgVHJlZU5vZGUgd2l0aCBDb250cm9sRmxvd01hcEVudHJ5IHsKICBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlOyAvLyBIYXMgbm8gaW5pdGlhbGl6ZXIuCiAgRXhwcmVzc2lvbiBpdGVyYWJsZTsKICBTdGF0ZW1lbnQgcHJvbG9ndWU7IC8vIE1heSBiZSBudWxsLgogIE1hcEVudHJ5IGJvZHk7CiAgRXhwcmVzc2lvbiBwcm9ibGVtOyAvLyBNYXkgYmUgbnVsbC4KICBib29sIGlzQXN5bmM7IC8vIFRydWUgaWYgdGhpcyBpcyBhbiAnYXdhaXQgZm9yJyBsb29wLgoKICBGb3JJbk1hcEVudHJ5KAogICAgICB0aGlzLnZhcmlhYmxlLCB0aGlzLml0ZXJhYmxlLCB0aGlzLnByb2xvZ3VlLCB0aGlzLmJvZHksIHRoaXMucHJvYmxlbSwKICAgICAge3RoaXMuaXNBc3luYzogZmFsc2V9KSB7CiAgICB2YXJpYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIGl0ZXJhYmxlPy5wYXJlbnQgPSB0aGlzOwogICAgcHJvbG9ndWU/LnBhcmVudCA9IHRoaXM7CiAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgcHJvYmxlbT8ucGFyZW50ID0gdGhpczsKICB9CgogIHZpc2l0Q2hpbGRyZW4oVmlzaXRvcjxPYmplY3Q+IHYpIHsKICAgIHZhcmlhYmxlPy5hY2NlcHQodik7CiAgICBpdGVyYWJsZT8uYWNjZXB0KHYpOwogICAgcHJvbG9ndWU/LmFjY2VwdCh2KTsKICAgIGJvZHk/LmFjY2VwdCh2KTsKICAgIHByb2JsZW0/LmFjY2VwdCh2KTsKICB9CgogIHRyYW5zZm9ybUNoaWxkcmVuKFRyYW5zZm9ybWVyIHYpIHsKICAgIGlmICh2YXJpYWJsZSAhPSBudWxsKSB7CiAgICAgIHZhcmlhYmxlID0gdmFyaWFibGUuYWNjZXB0KHYpOwogICAgICB2YXJpYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChpdGVyYWJsZSAhPSBudWxsKSB7CiAgICAgIGl0ZXJhYmxlID0gaXRlcmFibGUuYWNjZXB0KHYpOwogICAgICBpdGVyYWJsZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChwcm9sb2d1ZSAhPSBudWxsKSB7CiAgICAgIHByb2xvZ3VlID0gcHJvbG9ndWUuYWNjZXB0KHYpOwogICAgICBwcm9sb2d1ZT8ucGFyZW50ID0gdGhpczsKICAgIH0KICAgIGlmIChib2R5ICE9IG51bGwpIHsKICAgICAgYm9keSA9IGJvZHkuYWNjZXB0KHYpOwogICAgICBib2R5Py5wYXJlbnQgPSB0aGlzOwogICAgfQogICAgaWYgKHByb2JsZW0gIT0gbnVsbCkgewogICAgICBwcm9ibGVtID0gcHJvYmxlbS5hY2NlcHQodik7CiAgICAgIHByb2JsZW0/LnBhcmVudCA9IHRoaXM7CiAgICB9CiAgfQp9CgpFeHByZXNzaW9uIGNvbnZlcnRUb0VsZW1lbnQoTWFwRW50cnkgZW50cnksIEluZmVyZW5jZUhlbHBlciBoZWxwZXIpIHsKICBpZiAoZW50cnkgaXMgU3ByZWFkTWFwRW50cnkpIHsKICAgIHJldHVybiBuZXcgU3ByZWFkRWxlbWVudChlbnRyeS5leHByZXNzaW9uLCBlbnRyeS5pc051bGxBd2FyZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gZW50cnkuZXhwcmVzc2lvbi5maWxlT2Zmc2V0OwogIH0KICBpZiAoZW50cnkgaXMgSWZNYXBFbnRyeSkgewogICAgcmV0dXJuIG5ldyBJZkVsZW1lbnQoCiAgICAgICAgZW50cnkuY29uZGl0aW9uLAogICAgICAgIGNvbnZlcnRUb0VsZW1lbnQoZW50cnkudGhlbiwgaGVscGVyKSwKICAgICAgICBlbnRyeS5vdGhlcndpc2UgPT0gbnVsbAogICAgICAgICAgICA/IG51bGwKICAgICAgICAgICAgOiBjb252ZXJ0VG9FbGVtZW50KGVudHJ5Lm90aGVyd2lzZSwgaGVscGVyKSkKICAgICAgLi5maWxlT2Zmc2V0ID0gZW50cnkuZmlsZU9mZnNldDsKICB9CiAgaWYgKGVudHJ5IGlzIEZvck1hcEVudHJ5KSB7CiAgICByZXR1cm4gbmV3IEZvckVsZW1lbnQoZW50cnkudmFyaWFibGVzLCBlbnRyeS5jb25kaXRpb24sIGVudHJ5LnVwZGF0ZXMsCiAgICAgICAgY29udmVydFRvRWxlbWVudChlbnRyeS5ib2R5LCBoZWxwZXIpKQogICAgICAuLmZpbGVPZmZzZXQgPSBlbnRyeS5maWxlT2Zmc2V0OwogIH0KICBpZiAoZW50cnkgaXMgRm9ySW5NYXBFbnRyeSkgewogICAgcmV0dXJuIG5ldyBGb3JJbkVsZW1lbnQoZW50cnkudmFyaWFibGUsIGVudHJ5Lml0ZXJhYmxlLCBlbnRyeS5wcm9sb2d1ZSwKICAgICAgICBjb252ZXJ0VG9FbGVtZW50KGVudHJ5LmJvZHksIGhlbHBlciksIGVudHJ5LnByb2JsZW0sCiAgICAgICAgaXNBc3luYzogZW50cnkuaXNBc3luYykKICAgICAgLi5maWxlT2Zmc2V0ID0gZW50cnkuZmlsZU9mZnNldDsKICB9CiAgcmV0dXJuIGhlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihoZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgdGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCcsJyksCiAgICBlbnRyeS5maWxlT2Zmc2V0LAogICAgMSwKICApKTsKfQoKYm9vbCBpc0NvbnZlcnRpYmxlVG9NYXBFbnRyeShFeHByZXNzaW9uIGVsZW1lbnQpIHsKICBpZiAoZWxlbWVudCBpcyBTcHJlYWRFbGVtZW50KSByZXR1cm4gdHJ1ZTsKICBpZiAoZWxlbWVudCBpcyBJZkVsZW1lbnQpIHsKICAgIHJldHVybiBpc0NvbnZlcnRpYmxlVG9NYXBFbnRyeShlbGVtZW50LnRoZW4pICYmCiAgICAgICAgKGVsZW1lbnQub3RoZXJ3aXNlID09IG51bGwgfHwKICAgICAgICAgICAgaXNDb252ZXJ0aWJsZVRvTWFwRW50cnkoZWxlbWVudC5vdGhlcndpc2UpKTsKICB9CiAgaWYgKGVsZW1lbnQgaXMgRm9yRWxlbWVudCkgewogICAgcmV0dXJuIGlzQ29udmVydGlibGVUb01hcEVudHJ5KGVsZW1lbnQuYm9keSk7CiAgfQogIGlmIChlbGVtZW50IGlzIEZvckluRWxlbWVudCkgewogICAgcmV0dXJuIGlzQ29udmVydGlibGVUb01hcEVudHJ5KGVsZW1lbnQuYm9keSk7CiAgfQogIHJldHVybiBmYWxzZTsKfQoKTWFwRW50cnkgY29udmVydFRvTWFwRW50cnkoRXhwcmVzc2lvbiBlbGVtZW50LCBJbmZlcmVuY2VIZWxwZXIgaGVscGVyKSB7CiAgaWYgKGVsZW1lbnQgaXMgU3ByZWFkRWxlbWVudCkgewogICAgcmV0dXJuIG5ldyBTcHJlYWRNYXBFbnRyeShlbGVtZW50LmV4cHJlc3Npb24sIGVsZW1lbnQuaXNOdWxsQXdhcmUpCiAgICAgIC4uZmlsZU9mZnNldCA9IGVsZW1lbnQuZXhwcmVzc2lvbi5maWxlT2Zmc2V0OwogIH0KICBpZiAoZWxlbWVudCBpcyBJZkVsZW1lbnQpIHsKICAgIHJldHVybiBuZXcgSWZNYXBFbnRyeSgKICAgICAgICBlbGVtZW50LmNvbmRpdGlvbiwKICAgICAgICBjb252ZXJ0VG9NYXBFbnRyeShlbGVtZW50LnRoZW4sIGhlbHBlciksCiAgICAgICAgZWxlbWVudC5vdGhlcndpc2UgPT0gbnVsbAogICAgICAgICAgICA/IG51bGwKICAgICAgICAgICAgOiBjb252ZXJ0VG9NYXBFbnRyeShlbGVtZW50Lm90aGVyd2lzZSwgaGVscGVyKSkKICAgICAgLi5maWxlT2Zmc2V0ID0gZWxlbWVudC5maWxlT2Zmc2V0OwogIH0KICBpZiAoZWxlbWVudCBpcyBGb3JFbGVtZW50KSB7CiAgICByZXR1cm4gbmV3IEZvck1hcEVudHJ5KGVsZW1lbnQudmFyaWFibGVzLCBlbGVtZW50LmNvbmRpdGlvbiwKICAgICAgICBlbGVtZW50LnVwZGF0ZXMsIGNvbnZlcnRUb01hcEVudHJ5KGVsZW1lbnQuYm9keSwgaGVscGVyKSkKICAgICAgLi5maWxlT2Zmc2V0ID0gZWxlbWVudC5maWxlT2Zmc2V0OwogIH0KICBpZiAoZWxlbWVudCBpcyBGb3JJbkVsZW1lbnQpIHsKICAgIHJldHVybiBuZXcgRm9ySW5NYXBFbnRyeSgKICAgICAgICBlbGVtZW50LnZhcmlhYmxlLAogICAgICAgIGVsZW1lbnQuaXRlcmFibGUsCiAgICAgICAgZWxlbWVudC5wcm9sb2d1ZSwKICAgICAgICBjb252ZXJ0VG9NYXBFbnRyeShlbGVtZW50LmJvZHksIGhlbHBlciksCiAgICAgICAgZWxlbWVudC5wcm9ibGVtLAogICAgICAgIGlzQXN5bmM6IGVsZW1lbnQuaXNBc3luYykKICAgICAgLi5maWxlT2Zmc2V0ID0gZWxlbWVudC5maWxlT2Zmc2V0OwogIH0KICByZXR1cm4gbmV3IE1hcEVudHJ5KAogICAgICBoZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICB0ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3Qud2l0aEFyZ3VtZW50cygnOicpLAogICAgICAgIGVsZW1lbnQuZmlsZU9mZnNldCwKICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogd2hhdCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBleHByZXNzaW9uPwogICAgICAgIDEsCiAgICAgICkpLAogICAgICBuZXcgTnVsbExpdGVyYWwoKSk7Cn0Kgd4ATk48GwEiASEJEhQSFRMSHRQXEwFEASUJGxwVFREBGj4BOAFHATAET01PRilMEwwyRwQBDEQBDDgmAgEvQRkUAVEGUB0YATUfBAEMJRsEAQwlHikhBgQCAS49GBMYATkeGR4EAQwlGhUaBAEMJR0nIAYYHRsGHScgBgQCAS4+TChBEwFIIR4fGQQBDCUdGhsVBAEMJScdJyAGJRgdGwYEAgExQDcXJhMmOAEQTB8dHR0ZHAQBJRkZGRUYBAElHCUfBhwlHwYcJR8GGB0bBhsjHgYEAgEwDBc+BAEMIj4EAQwZQAQBDCRABAEMPAIBJ0EZFAFNBlAdFgE2HwQBDCUbBAEMJR4pIQYEAgEmPRgRFgE6HhkeBAEMJRoVGgQBDCUdJyAGGB0bBh0nIAYEAgEmPkwoQREBSSEeHxkEAQwlHRobFQQBDCUnHScgBiUYHRsGBAIBKUA3FyYRJjgBEUwfHR0dGRwEASUZGRkVGAQBJRwlHwYcJR8GHCUfBhgdGwYbIx4GBAIBRiFCMgQdGhkuIBM5JwQeSy4nBCBMPSAnBEAvFgcGAgEzLR40JjkEHzIEITIEEAIBSSJHNAQeGxsxIhM8KQQfQUIpBCEeGhoaMRkiKQQXPTgcQQsKGgIBM3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvY29sbGVjdGlvbnMuZGFydDpzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2NvbnN0bmVzcy5kYXJ0gTIvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5jb25zdG5lc3M7CgplbnVtIENvbnN0bmVzcyB7CiAgZXhwbGljaXRDb25zdCwKICBleHBsaWNpdE5ldywKICBpbXBsaWNpdCwKfQoNAE5OPAEZARERDwwCATFwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2NvbnN0bmVzcy5kYXJ0RXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvZXhwcmVzc2lvbl9nZW5lcmF0b3IuZGFydMABmuwvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIEEgbGlicmFyeSB0byBoZWxwIGdlbmVyYXRlIGV4cHJlc3Npb24uCmxpYnJhcnkgZmFzdGEuZXhwcmVzc2lvbl9nZW5lcmF0b3I7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIENvbnN0cnVjdG9yLAogICAgICAgIEZpZWxkLAogICAgICAgIEludmFsaWRFeHByZXNzaW9uLAogICAgICAgIExldCwKICAgICAgICBOb2RlLAogICAgICAgIFByb3BlcnR5R2V0LAogICAgICAgIFByb3BlcnR5U2V0LAogICAgICAgIFN0YXRpY1NldCwKICAgICAgICBTdXBlck1ldGhvZEludm9jYXRpb24sCiAgICAgICAgU3VwZXJQcm9wZXJ0eVNldCwKICAgICAgICBUcmVlTm9kZSwKICAgICAgICBUeXBlUGFyYW1ldGVyLAogICAgICAgIFZhcmlhYmxlR2V0LAogICAgICAgIFZhcmlhYmxlU2V0OwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL2NvbnN0YW50X2NvbnRleHQuZGFydCcgc2hvdyBDb25zdGFudENvbnRleHQ7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgTWVzc2FnZSwKICAgICAgICBUZW1wbGF0ZSwKICAgICAgICBtZXNzYWdlQ2Fubm90QXNzaWduVG9TdXBlciwKICAgICAgICBtZXNzYWdlQ2Fubm90QXNzaWduVG9QYXJlbnRoZXNpemVkRXhwcmVzc2lvbiwKICAgICAgICBtZXNzYWdlQ2FudFVzZVByZWZpeEFzRXhwcmVzc2lvbiwKICAgICAgICBtZXNzYWdlQ2FudFVzZVByZWZpeFdpdGhOdWxsQXdhcmUsCiAgICAgICAgbWVzc2FnZUlsbGVnYWxBc3NpZ25tZW50VG9Ob25Bc3NpZ25hYmxlLAogICAgICAgIG1lc3NhZ2VJbnZhbGlkSW5pdGlhbGl6ZXIsCiAgICAgICAgbWVzc2FnZUludmFsaWRVc2VPZk51bGxBd2FyZUFjY2VzcywKICAgICAgICBtZXNzYWdlTG9hZExpYnJhcnlUYWtlc05vQXJndW1lbnRzLAogICAgICAgIG1lc3NhZ2VOb3RBQ29uc3RhbnRFeHByZXNzaW9uLAogICAgICAgIG1lc3NhZ2VOb3RBbkx2YWx1ZSwKICAgICAgICBtZXNzYWdlU3VwZXJBc0V4cHJlc3Npb24sCiAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgdGVtcGxhdGVDYW50VXNlRGVmZXJyZWRQcmVmaXhBc0NvbnN0YW50LAogICAgICAgIHRlbXBsYXRlQ29uc3RydWN0b3JOb3RGb3VuZCwKICAgICAgICB0ZW1wbGF0ZURlZmVycmVkVHlwZUFubm90YXRpb24sCiAgICAgICAgdGVtcGxhdGVNaXNzaW5nRXhwbGljaXRUeXBlQXJndW1lbnRzLAogICAgICAgIHRlbXBsYXRlTm90Q29uc3RhbnRFeHByZXNzaW9uLAogICAgICAgIHRlbXBsYXRlTm90QVByZWZpeEluVHlwZUFubm90YXRpb24sCiAgICAgICAgdGVtcGxhdGVOb3RBVHlwZSwKICAgICAgICB0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0NvbnN0cnVjdG9yLAogICAgICAgIHRlbXBsYXRlVGhpc09yU3VwZXJBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXIsCiAgICAgICAgdGVtcGxhdGVVbnJlc29sdmVkUHJlZml4SW5UeXBlQW5ub3RhdGlvbjsKCmltcG9ydCAnLi4vbmFtZXMuZGFydCcKICAgIHNob3cKICAgICAgICBhbXBlcnNhbmROYW1lLAogICAgICAgIGJhck5hbWUsCiAgICAgICAgY2FsbE5hbWUsCiAgICAgICAgY2FyZXROYW1lLAogICAgICAgIGRpdmlzaW9uTmFtZSwKICAgICAgICBlcXVhbHNOYW1lLAogICAgICAgIGluZGV4R2V0TmFtZSwKICAgICAgICBpbmRleFNldE5hbWUsCiAgICAgICAgbGVmdFNoaWZ0TmFtZSwKICAgICAgICBsZW5ndGhOYW1lLAogICAgICAgIG1pbnVzTmFtZSwKICAgICAgICBtdWx0aXBseU5hbWUsCiAgICAgICAgbXVzdGFjaGVOYW1lLAogICAgICAgIHBlcmNlbnROYW1lLAogICAgICAgIHBsdXNOYW1lLAogICAgICAgIHJpZ2h0U2hpZnROYW1lLAogICAgICAgIHRyaXBsZVNoaWZ0TmFtZTsKCmltcG9ydCAnLi4vcGFyc2VyLmRhcnQnIHNob3cgbGVuZ3RoRm9yVG9rZW4sIGxlbmd0aE9mU3Bhbiwgb2Zmc2V0Rm9yVG9rZW47CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5oYW5kbGVkLCB1bnN1cHBvcnRlZDsKCmltcG9ydCAnLi4vc2NvcGUuZGFydCc7CgppbXBvcnQgJ2JvZHlfYnVpbGRlci5kYXJ0JyBzaG93IG5vTG9jYXRpb247CgppbXBvcnQgJ2NvbnN0bmVzcy5kYXJ0JyBzaG93IENvbnN0bmVzczsKCmltcG9ydCAnZXhwcmVzc2lvbl9nZW5lcmF0b3JfaGVscGVyLmRhcnQnIHNob3cgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlcjsKCmltcG9ydCAnZm9yZXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgRm9yZXN0LAogICAgICAgIExvYWRMaWJyYXJ5QnVpbGRlciwKICAgICAgICBQcmVmaXhCdWlsZGVyLAogICAgICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIsCiAgICAgICAgVW5saW5rZWREZWNsYXJhdGlvbjsKCmltcG9ydCAna2VybmVsX2FwaS5kYXJ0JyBzaG93IE5hbWVTeXN0ZW0sIHByaW50Tm9kZU9uLCBwcmludFF1YWxpZmllZE5hbWVPbjsKCmltcG9ydCAna2VybmVsX2FzdF9hcGkuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHMsCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBJbml0aWFsaXplciwKICAgICAgICBNZW1iZXIsCiAgICAgICAgTmFtZSwKICAgICAgICBQcm9jZWR1cmUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbjsKCmltcG9ydCAna2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBBY2Nlc3NFcnJvckJ1aWxkZXIsCiAgICAgICAgRGVjbGFyYXRpb24sCiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIEludmFsaWRUeXBlQnVpbGRlciwKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFVucmVzb2x2ZWRUeXBlOwoKaW1wb3J0ICdrZXJuZWxfc2hhZG93X2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQsCiAgICAgICAgTG9hZExpYnJhcnlUZWFyT2ZmSnVkZ21lbnQsCiAgICAgICAgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50LAogICAgICAgIE51bGxBd2FyZVByb3BlcnR5R2V0SnVkZ21lbnQsCiAgICAgICAgUHJvcGVydHlBc3NpZ25tZW50SnVkZ21lbnQsCiAgICAgICAgU3VwZXJNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQsCiAgICAgICAgU3VwZXJQcm9wZXJ0eUdldEp1ZGdtZW50LAogICAgICAgIFN5bnRoZXRpY1dyYXBwZXIsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LAogICAgICAgIFZhcmlhYmxlR2V0SnVkZ21lbnQ7CgovLy8gQSBnZW5lcmF0b3IgcmVwcmVzZW50cyBhIHN1YmV4cHJlc3Npb24gZm9yIHdoaWNoIHdlIGNhbid0IHlldCBidWlsZCBhbgovLy8gZXhwcmVzc2lvbiBiZWNhdXNlIHdlIGRvbid0IHlldCBrbm93IHRoZSBjb250ZXh0IGluIHdoaWNoIGl0J3MgdXNlZC4KLy8vCi8vLyBPbmNlIHRoZSBjb250ZXh0IGlzIGtub3duLCBhIGdlbmVyYXRvciBjYW4gYmUgY29udmVydGVkIGludG8gYW4gZXhwcmVzc2lvbgovLy8gYnkgY2FsbGluZyBhIGBidWlsZGAgbWV0aG9kLgovLy8KLy8vIEZvciBleGFtcGxlLCB3aGVuIGJ1aWxkaW5nIGEga2VybmVsIHJlcHJlc2VudGF0aW9uIGZvciBgYVt4XSA9IGJgLCBhZnRlcgovLy8gcGFyc2luZyBgYVt4XWAgYnV0IGJlZm9yZSBwYXJzaW5nIGA9IGJgLCB3ZSBkb24ndCB5ZXQga25vdyB3aGV0aGVyIHRvCi8vLyBnZW5lcmF0ZSBhbiBpbnZvY2F0aW9uIG9mIGBvcGVyYXRvcltdYCBvciBgb3BlcmF0b3JbXT1gLCBzbyB3ZSBjcmVhdGUgYQovLy8gW0dlbmVyYXRvcl0gb2JqZWN0LiAgTGF0ZXIsIGFmdGVyIGA9IGJgIGlzIHBhcnNlZCwgW2J1aWxkQXNzaWdubWVudF0gd2lsbAovLy8gYmUgY2FsbGVkLgphYnN0cmFjdCBjbGFzcyBHZW5lcmF0b3IgewogIC8vLyBIZWxwZXIgdGhhdCBwcm92aWRlcyBhY2Nlc3MgdG8gY29udGV4dHVhbCBpbmZvcm1hdGlvbi4KICBmaW5hbCBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIF9oZWxwZXI7CgogIC8vLyBBIHRva2VuIHRoYXQgZGVmaW5lcyBhIHBvc2l0aW9uIHN1YmV4cHJlc3Npb24gdGhhdCBiZWluZyBidWlsdC4KICBmaW5hbCBUb2tlbiB0b2tlbjsKCiAgR2VuZXJhdG9yKHRoaXMuX2hlbHBlciwgdGhpcy50b2tlbik7CgogIC8vLyBFYXN5IGFjY2VzcyB0byB0aGUgW0ZvcmVzdF0gZmFjdG9yeSBvYmplY3QuCiAgRm9yZXN0IGdldCBfZm9yZXN0ID0+IF9oZWxwZXIuZm9yZXN0OwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbXByb3ZlIHRoZSBzZW1hbnRpYyBwcmVjaXNpb24gb2YgdGhpcyBwcm9wZXJ0eSBvcgogIC8vIHJlbW92ZSBpdC4gSXQncyB1bmNsZWFyIGlmIHRoZSBzZW1hbnRpY3MgaXMgaW5jb25zaXN0ZW50LiBJdCdzIGZvciBpbnN0YW5jZQogIC8vIHVzZWQgYm90aCBmb3IgdGhlIG5hbWUgb2YgYSB2YXJpYWJsZSBpbiBbVmFyaWFibGVVc2VHZW5lcmF0b3JdIGFuZCBmb3IKICAvLyBgW11gIGluIFtJbmRleGVkQWNjZXNzR2VuZXJhdG9yXSwgYW5kIHdoaWxlIHRoZSBmb3JtZXIgdGV4dCBvY2N1cnMgaW4gdGhlCiAgLy8gdW5kZXJseWluZyBzb3VyY2UgY29kZSwgdGhlIGxhdHRlciBkb2Vzbid0LgogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQ7CgogIC8vLyBJbnRlcm5hbCBuYW1lIHVzZWQgZm9yIGRlYnVnZ2luZy4KICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWU7CgogIC8vLyBUaGUgc291cmNlIHVyaSBmb3IgdXNlIGluIGVycm9yIG1lc3NhZ2luZy4KICBVcmkgZ2V0IF91cmkgPT4gX2hlbHBlci51cmk7CgogIC8vLyBCdWlsZHMgYSBbRXhwcmVzc2lvbl0gcmVwcmVzZW50aW5nIGEgcmVhZCBmcm9tIHRoZSBnZW5lcmF0b3IuCiAgLy8vCiAgLy8vIFRoZSByZWFkIG9mIHRoaXMgc3ViZXhwcmVzc2lvbiBkb2VzIF9ub3RfIG5lZWQgdG8gc3VwcG9ydCBhIHNpbXVsdGFuZW91cwogIC8vLyB3cml0ZSBvZiB0aGUgc2FtZSBzdWJleHByZXNzaW9uLgogIEV4cHJlc3Npb24gYnVpbGRTaW1wbGVSZWFkKCkgewogICAgcmV0dXJuIF9maW5pc2goX21ha2VTaW1wbGVSZWFkKCksIG51bGwpOwogIH0KCiAgLy8vIEludGVybmFsIGltcGxlbWVudGF0aW9uIGZvciBbYnVpbGRTaW1wbGVSZWFkXS4KICAvLy8KICAvLy8gVGhlIHJlYWQgb2YgdGhlIHRoaXMgc3ViZXhwcmVzc2lvbiBkb2VzIF9ub3RfIG5lZWQgdG8gc3VwcG9ydCBhCiAgLy8vIHNpbXVsdGFuZW91cyB3cml0ZSBvZiB0aGUgc2FtZSBzdWJleHByZXNzaW9uLgogIC8vLwogIC8vLyBUaGlzIGlzIGluIGNvbnRyYXN0IHRvIFtfbWFrZVJlYWRdIHdoaWNoIGlzIHVzZWQgZm9yIGluc3RhbmNlIGluIGNvbXBvdW5kCiAgLy8vIGFzc2lnbm1lbnRzIGxpa2UgYGEuYiArPSBjYCB3aGVyZSBib3RoIGEgcmVhZCBhbmQgYSB3cml0ZSBvZiB0aGUKICAvLy8gc3ViZXhwcmVzc2lvbiBgYS5iYCBvY2N1cnMuCiAgLy8vCiAgLy8vIFN1YmNsYXNzZXMgdGhhdCBjYW4gYmVuZWZpdCBmcm9tIHRoaXMgZGlzdGluY3Rpb24gc2hvdWxkIG92ZXJyaWRlIHRoaXMKICAvLy8gbWV0aG9kLgogIEV4cHJlc3Npb24gX21ha2VTaW1wbGVSZWFkKCkgPT4gX21ha2VSZWFkKG51bGwpOwoKICAvLy8gQnVpbGRzIGEgW0V4cHJlc3Npb25dIHJlcHJlc2VudGluZyBhbiBhc3NpZ25tZW50IHdpdGggdGhlIGdlbmVyYXRvciBvbgogIC8vLyB0aGUgTEhTIGFuZCBbdmFsdWVdIG9uIHRoZSBSSFMuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0aGUgYXNzaWduZWQgdmFsdWUsIHVubGVzcwogIC8vLyBbdm9pZENvbnRleHRdIGlzIHRydWUsIGluIHdoaWNoIGNhc2UgaXQgbWF5IGV2YWx1YXRlIHRvIGFueXRoaW5nLgogIEV4cHJlc3Npb24gYnVpbGRBc3NpZ25tZW50KEV4cHJlc3Npb24gdmFsdWUsIHtib29sIHZvaWRDb250ZXh0OiBmYWxzZX0pIHsKICAgIHZhciBjb21wbGV4QXNzaWdubWVudCA9IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQodmFsdWUpOwogICAgcmV0dXJuIF9maW5pc2goX21ha2VTaW1wbGVXcml0ZSh2YWx1ZSwgdm9pZENvbnRleHQsIGNvbXBsZXhBc3NpZ25tZW50KSwKICAgICAgICBjb21wbGV4QXNzaWdubWVudCk7CiAgfQoKICAvLy8gSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gZm9yIFtidWlsZEFzc2lnbm1lbnRdLgogIEV4cHJlc3Npb24gX21ha2VTaW1wbGVXcml0ZShFeHByZXNzaW9uIHZhbHVlLCBib29sIHZvaWRDb250ZXh0LAogICAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICByZXR1cm4gX21ha2VXcml0ZSh2YWx1ZSwgdm9pZENvbnRleHQsIGNvbXBsZXhBc3NpZ25tZW50KTsKICB9CgogIC8vLyBSZXR1cm5zIGEgW0V4cHJlc3Npb25dIHJlcHJlc2VudGluZyBhIG51bGwtYXdhcmUgYXNzaWdubWVudCAoYD8/PWApIHdpdGgKICAvLy8gdGhlIGdlbmVyYXRvciBvbiB0aGUgTEhTIGFuZCBbdmFsdWVdIG9uIHRoZSBSSFMuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCBleHByZXNzaW9uIGV2YWx1YXRlcyB0byB0aGUgYXNzaWduZWQgdmFsdWUsIHVubGVzcwogIC8vLyBbdm9pZENvbnRleHRdIGlzIHRydWUsIGluIHdoaWNoIGNhc2UgaXQgbWF5IGV2YWx1YXRlIHRvIGFueXRoaW5nLgogIC8vLwogIC8vLyBbdHlwZV0gaXMgdGhlIHN0YXRpYyB0eXBlIG9mIHRoZSBSSFMuCiAgRXhwcmVzc2lvbiBidWlsZE51bGxBd2FyZUFzc2lnbm1lbnQoCiAgICAgIEV4cHJlc3Npb24gdmFsdWUsIERhcnRUeXBlIHR5cGUsIGludCBvZmZzZXQsCiAgICAgIHtib29sIHZvaWRDb250ZXh0OiBmYWxzZX0pIHsKICAgIHZhciBjb21wbGV4QXNzaWdubWVudCA9IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQodmFsdWUpOwogICAgaWYgKHZvaWRDb250ZXh0KSB7CiAgICAgIHZhciBudWxsQXdhcmVDb21iaW5lciA9IF9mb3Jlc3QuY29uZGl0aW9uYWxFeHByZXNzaW9uKAogICAgICAgICAgYnVpbGRJc051bGwoX21ha2VSZWFkKGNvbXBsZXhBc3NpZ25tZW50KSwgb2Zmc2V0LCBfaGVscGVyKSwKICAgICAgICAgIG51bGwsCiAgICAgICAgICBfbWFrZVdyaXRlKHZhbHVlLCBmYWxzZSwgY29tcGxleEFzc2lnbm1lbnQpLAogICAgICAgICAgbnVsbCwKICAgICAgICAgIF9mb3Jlc3QubGl0ZXJhbE51bGwobnVsbCkuLmZpbGVPZmZzZXQgPSBvZmZzZXQpCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgICBjb21wbGV4QXNzaWdubWVudD8ubnVsbEF3YXJlQ29tYmluZXIgPSBudWxsQXdhcmVDb21iaW5lcjsKICAgICAgcmV0dXJuIF9maW5pc2gobnVsbEF3YXJlQ29tYmluZXIsIGNvbXBsZXhBc3NpZ25tZW50KTsKICAgIH0KICAgIHZhciB0bXAgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShfbWFrZVJlYWQoY29tcGxleEFzc2lnbm1lbnQpKTsKICAgIHZhciBudWxsQXdhcmVDb21iaW5lciA9IF9mb3Jlc3QuY29uZGl0aW9uYWxFeHByZXNzaW9uKAogICAgICAgIGJ1aWxkSXNOdWxsKG5ldyBWYXJpYWJsZUdldCh0bXApLCBvZmZzZXQsIF9oZWxwZXIpLAogICAgICAgIG51bGwsCiAgICAgICAgX21ha2VXcml0ZSh2YWx1ZSwgZmFsc2UsIGNvbXBsZXhBc3NpZ25tZW50KSwKICAgICAgICBudWxsLAogICAgICAgIG5ldyBWYXJpYWJsZUdldCh0bXApKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICBjb21wbGV4QXNzaWdubWVudD8ubnVsbEF3YXJlQ29tYmluZXIgPSBudWxsQXdhcmVDb21iaW5lcjsKICAgIHJldHVybiBfZmluaXNoKG1ha2VMZXQodG1wLCBudWxsQXdhcmVDb21iaW5lciksIGNvbXBsZXhBc3NpZ25tZW50KTsKICB9CgogIC8vLyBSZXR1cm5zIGEgW0V4cHJlc3Npb25dIHJlcHJlc2VudGluZyBhIGNvbXBvdW5kIGFzc2lnbm1lbnQgKGUuZy4gYCs9YCkKICAvLy8gd2l0aCB0aGUgZ2VuZXJhdG9yIG9uIHRoZSBMSFMgYW5kIFt2YWx1ZV0gb24gdGhlIFJIUy4KICBFeHByZXNzaW9uIGJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KE5hbWUgYmluYXJ5T3BlcmF0b3IsIEV4cHJlc3Npb24gdmFsdWUsCiAgICAgIHtpbnQgb2Zmc2V0OiBUcmVlTm9kZS5ub09mZnNldCwKICAgICAgYm9vbCB2b2lkQ29udGV4dDogZmFsc2UsCiAgICAgIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXQsCiAgICAgIGJvb2wgaXNQcmVJbmNEZWM6IGZhbHNlLAogICAgICBib29sIGlzUG9zdEluY0RlYzogZmFsc2V9KSB7CiAgICB2YXIgY29tcGxleEFzc2lnbm1lbnQgPSBzdGFydENvbXBsZXhBc3NpZ25tZW50KHZhbHVlKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5pc1ByZUluY0RlYyA9IGlzUHJlSW5jRGVjOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LmlzUG9zdEluY0RlYyA9IGlzUG9zdEluY0RlYzsKICAgIHZhciBjb21iaW5lciA9IG1ha2VCaW5hcnkoX21ha2VSZWFkKGNvbXBsZXhBc3NpZ25tZW50KSwgYmluYXJ5T3BlcmF0b3IsCiAgICAgICAgaW50ZXJmYWNlVGFyZ2V0LCB2YWx1ZSwgX2hlbHBlciwKICAgICAgICBvZmZzZXQ6IG9mZnNldCk7CiAgICBjb21wbGV4QXNzaWdubWVudD8uY29tYmluZXIgPSBjb21iaW5lcjsKICAgIHJldHVybiBfZmluaXNoKF9tYWtlV3JpdGUoY29tYmluZXIsIHZvaWRDb250ZXh0LCBjb21wbGV4QXNzaWdubWVudCksCiAgICAgICAgY29tcGxleEFzc2lnbm1lbnQpOwogIH0KCiAgLy8vIFJldHVybnMgYSBbRXhwcmVzc2lvbl0gcmVwcmVzZW50aW5nIGEgcHJlLWluY3JlbWVudCBvciBwcmUtZGVjcmVtZW50IG9mCiAgLy8vIHRoZSBnZW5lcmF0b3IuCiAgRXhwcmVzc2lvbiBidWlsZFByZWZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgcmV0dXJuIGJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KAogICAgICAgIGJpbmFyeU9wZXJhdG9yLCBfZm9yZXN0LmxpdGVyYWxJbnQoMSwgbnVsbCkuLmZpbGVPZmZzZXQgPSBvZmZzZXQsCiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsCiAgICAgICAgdm9pZENvbnRleHQ6IHZvaWRDb250ZXh0LAogICAgICAgIGludGVyZmFjZVRhcmdldDogaW50ZXJmYWNlVGFyZ2V0LAogICAgICAgIGlzUHJlSW5jRGVjOiB0cnVlKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgW0V4cHJlc3Npb25dIHJlcHJlc2VudGluZyBhIHBvc3QtaW5jcmVtZW50IG9yIHBvc3QtZGVjcmVtZW50IG9mCiAgLy8vIHRoZSBnZW5lcmF0b3IuCiAgRXhwcmVzc2lvbiBidWlsZFBvc3RmaXhJbmNyZW1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldH0pIHsKICAgIGlmICh2b2lkQ29udGV4dCkgewogICAgICByZXR1cm4gYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoCiAgICAgICAgICBiaW5hcnlPcGVyYXRvciwgX2ZvcmVzdC5saXRlcmFsSW50KDEsIG51bGwpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0LAogICAgICAgICAgb2Zmc2V0OiBvZmZzZXQsCiAgICAgICAgICB2b2lkQ29udGV4dDogdm9pZENvbnRleHQsCiAgICAgICAgICBpbnRlcmZhY2VUYXJnZXQ6IGludGVyZmFjZVRhcmdldCwKICAgICAgICAgIGlzUG9zdEluY0RlYzogdHJ1ZSk7CiAgICB9CiAgICB2YXIgcmhzID0gX2ZvcmVzdC5saXRlcmFsSW50KDEsIG51bGwpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogICAgdmFyIGNvbXBsZXhBc3NpZ25tZW50ID0gc3RhcnRDb21wbGV4QXNzaWdubWVudChyaHMpOwogICAgdmFyIHZhbHVlID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoX21ha2VSZWFkKGNvbXBsZXhBc3NpZ25tZW50KSk7CiAgICB2YWx1ZUFjY2VzcygpID0+IG5ldyBWYXJpYWJsZUdldCh2YWx1ZSk7CiAgICB2YXIgY29tYmluZXIgPSBtYWtlQmluYXJ5KAogICAgICAgIHZhbHVlQWNjZXNzKCksIGJpbmFyeU9wZXJhdG9yLCBpbnRlcmZhY2VUYXJnZXQsIHJocywgX2hlbHBlciwKICAgICAgICBvZmZzZXQ6IG9mZnNldCk7CiAgICBjb21wbGV4QXNzaWdubWVudD8uY29tYmluZXIgPSBjb21iaW5lcjsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5pc1Bvc3RJbmNEZWMgPSB0cnVlOwogICAgdmFyIGR1bW15ID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudC5mb3JWYWx1ZSgKICAgICAgICBfbWFrZVdyaXRlKGNvbWJpbmVyLCB0cnVlLCBjb21wbGV4QXNzaWdubWVudCksCiAgICAgICAgX2hlbHBlci5mdW5jdGlvbk5lc3RpbmdMZXZlbCk7CiAgICByZXR1cm4gX2ZpbmlzaCgKICAgICAgICBtYWtlTGV0KHZhbHVlLCBtYWtlTGV0KGR1bW15LCB2YWx1ZUFjY2VzcygpKSksIGNvbXBsZXhBc3NpZ25tZW50KTsKICB9CgogIC8vLyBSZXR1cm5zIGEgW0V4cHJlc3Npb25dIHJlcHJlc2VudGluZyBhIGNvbXBpbGUtdGltZSBlcnJvci4KICAvLy8KICAvLy8gQXQgcnVudGltZSwgYW4gZXhjZXB0aW9uIHdpbGwgYmUgdGhyb3duLgogIEV4cHJlc3Npb24gX21ha2VJbnZhbGlkUmVhZCgpIHsKICAgIHJldHVybiBfaGVscGVyLndyYXBTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgIF9oZWxwZXIudGhyb3dOb1N1Y2hNZXRob2RFcnJvcigKICAgICAgICAgICAgX2ZvcmVzdC5saXRlcmFsTnVsbCh0b2tlbiksCiAgICAgICAgICAgIF9wbGFpbk5hbWVGb3JSZWFkLAogICAgICAgICAgICBfZm9yZXN0LmFyZ3VtZW50c0VtcHR5KG5vTG9jYXRpb24pLAogICAgICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbiksCiAgICAgICAgICAgIGlzR2V0dGVyOiB0cnVlKSwKICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbikpOwogIH0KCiAgLy8vIFJldHVybnMgYSBbRXhwcmVzc2lvbl0gcmVwcmVzZW50aW5nIGEgY29tcGlsZS10aW1lIGVycm9yIHdyYXBwaW5nCiAgLy8vIFt2YWx1ZV0uCiAgLy8vCiAgLy8vIEF0IHJ1bnRpbWUsIFt2YWx1ZV0gd2lsbCBiZSBldmFsdWF0ZWQgYmVmb3JlIHRocm93aW5nIGFuIGV4Y2VwdGlvbi4KICBFeHByZXNzaW9uIF9tYWtlSW52YWxpZFdyaXRlKEV4cHJlc3Npb24gdmFsdWUpIHsKICAgIHJldHVybiBfaGVscGVyLndyYXBTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgIF9oZWxwZXIudGhyb3dOb1N1Y2hNZXRob2RFcnJvcigKICAgICAgICAgICAgX2ZvcmVzdC5saXRlcmFsTnVsbCh0b2tlbiksCiAgICAgICAgICAgIF9wbGFpbk5hbWVGb3JSZWFkLAogICAgICAgICAgICBfZm9yZXN0LmFyZ3VtZW50cyg8RXhwcmVzc2lvbj5bdmFsdWVdLCBub0xvY2F0aW9uKSwKICAgICAgICAgICAgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLAogICAgICAgICAgICBpc1NldHRlcjogdHJ1ZSksCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pKTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIFtFeHByZXNzaW9uXSB0aGUgcmVhZHMgdGhpcyBzdWJleHByZXNzaW9uLgogIC8vLwogIC8vLyBUaGUgY3JlYXRlZCByZWFkIGV4cHJlc3Npb24gbXVzdCBzdXBwb3J0IGEgc2ltdWx0YW5lb3VzIHdyaXRlIG9mIHRoZSBzYW1lCiAgLy8vIGV4cHJlc3Npb24gd2l0aCB2YWxpZCBzZW1hbnRpY3MuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBpbiBgYS5iICs9IGNgLCBib3RoIGEgcmVhZCBhbmQgYSB3cml0ZSBvZiB0aGUgc3ViZXhwcmVzc2lvbgogIC8vLyBgYS5iYCBpcyBjcmVhdGVkLCBidXQgYGFgIG11c3QgX25vdF8gYmUgZXZhbHVhdGVkIHR3aWNlLiBGb3IgdGhpcyByZWFzb24KICAvLy8gW1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yXSBjcmVhdGVzIGEgc3ludGhldGljIGxvY2FsIHZhcmlhYmxlIGZvciBgYWAgYW5kCiAgLy8vIHVzZXMgdGhpcyBmb3IgdGhlIGJvdGggdGhlIFtQcm9wZXJ0eUdldF0gYW5kIFtQcm9wZXJ0eVNldF0gb2YgcHJvcGVydHkKICAvLy8gYGJgLgogIC8vLwogIC8vLyBJZiBbY29tcGxleEFzc2lnbm1lbnRdIGlzIHByb3ZpZGVkLCB0aGUgY3JlYXRlZCBleHByZXNzaW9uIGlzIHJlZ2lzdGVyZWQKICAvLy8gYXMgdGhlIGByZWFkYCBvZiB0aGUgY29tcGxleCBhc3NpZ25tZW50LgogIC8vLwogIC8vLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBjcmVhdGVzIHRoZSBleHByZXNzaW9uIHRocm91Z2gKICAvLy8gW19tYWtlSW52YWxpZFJlYWRdLiBTdWJjbGFzc2VzIHdpdGggdmFsaWQgcmVhZCBvcGVyYXRpb25zIG11c3Qgb3ZlcnJpZGUKICAvLy8gdGhpcyBtZXRob2Qgd2l0aCBhIHZhbGlkIGltcGxlbWVudGF0aW9uLgogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIEV4cHJlc3Npb24gcmVhZCA9IF9tYWtlSW52YWxpZFJlYWQoKTsKICAgIGlmIChjb21wbGV4QXNzaWdubWVudCAhPSBudWxsKSB7CiAgICAgIHJlYWQgPSBfaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKHJlYWQpOwogICAgICBjb21wbGV4QXNzaWdubWVudC5yZWFkID0gcmVhZDsKICAgIH0KICAgIHJldHVybiByZWFkOwogIH0KCiAgLy8vIFJldHVybnMgYW4gW0V4cHJlc3Npb25dIHRoZSB3cml0ZSBbdmFsdWVdIHRvIHRoaXMgc3ViZXhwcmVzc2lvbi4KICAvLy8KICAvLy8gVGhlIGNyZWF0ZWQgcmVhZCBleHByZXNzaW9uIG11c3Qgc3VwcG9ydCBhIHNpbXVsdGFuZW91cyByZWFkIG9mIHRoZSBzYW1lCiAgLy8vIGV4cHJlc3Npb24gd2l0aCB2YWxpZCBzZW1hbnRpY3MuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBpbiBgYS5iICs9IGNgLCBib3RoIGEgcmVhZCBhbmQgYSB3cml0ZSBvZiB0aGUgc3ViZXhwcmVzc2lvbgogIC8vLyBgYS5iYCBpcyBjcmVhdGVkLCBidXQgYGFgIG11c3QgX25vdF8gYmUgZXZhbHVhdGVkIHR3aWNlLiBGb3IgdGhpcyByZWFzb24KICAvLy8gW1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yXSBjcmVhdGVzIGEgc3ludGhldGljIGxvY2FsIHZhcmlhYmxlIGZvciBgYWAgYW5kCiAgLy8vIHVzZXMgdGhpcyBmb3IgdGhlIGJvdGggdGhlIFtQcm9wZXJ0eUdldF0gYW5kIFtQcm9wZXJ0eVNldF0gb2YgcHJvcGVydHkKICAvLy8gYGJgLgogIC8vLwogIC8vLyBJZiBbY29tcGxleEFzc2lnbm1lbnRdIGlzIHByb3ZpZGVkLCB0aGUgY3JlYXRlZCBleHByZXNzaW9uIGlzIHJlZ2lzdGVyZWQKICAvLy8gYXMgdGhlIGB3cml0ZWAgb2YgdGhlIGNvbXBsZXggYXNzaWdubWVudC4KICAvLy8KICAvLy8gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gY3JlYXRlcyB0aGUgZXhwcmVzc2lvbiB0aHJvdWdoCiAgLy8vIFtfbWFrZUludmFsaWRXcml0ZV0uIFN1YmNsYXNzZXMgd2l0aCB2YWxpZCB3cml0ZSBvcGVyYXRpb25zIG11c3Qgb3ZlcnJpZGUKICAvLy8gdGhpcyBtZXRob2Qgd2l0aCBhIHZhbGlkIGltcGxlbWVudGF0aW9uLgogIEV4cHJlc3Npb24gX21ha2VXcml0ZShFeHByZXNzaW9uIHZhbHVlLCBib29sIHZvaWRDb250ZXh0LAogICAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBFeHByZXNzaW9uIHdyaXRlID0gX21ha2VJbnZhbGlkV3JpdGUodmFsdWUpOwogICAgaWYgKGNvbXBsZXhBc3NpZ25tZW50ICE9IG51bGwpIHsKICAgICAgd3JpdGUgPSBfaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKHdyaXRlKTsKICAgICAgY29tcGxleEFzc2lnbm1lbnQud3JpdGUgPSB3cml0ZTsKICAgIH0KICAgIHJldHVybiB3cml0ZTsKICB9CgogIEV4cHJlc3Npb24gX2ZpbmlzaCgKICAgICAgRXhwcmVzc2lvbiBib2R5LCBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBpZiAoIV9oZWxwZXIubGVnYWN5TW9kZSAmJiBjb21wbGV4QXNzaWdubWVudCAhPSBudWxsKSB7CiAgICAgIGNvbXBsZXhBc3NpZ25tZW50LmRlc3VnYXJlZCA9IGJvZHk7CiAgICAgIHJldHVybiBjb21wbGV4QXNzaWdubWVudDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBib2R5OwogICAgfQogIH0KCiAgLy8vIENyZWF0ZXMgYSBkYXRhIHN0cnVjdHVyZSBmb3IgdHJhY2tpbmcgdGhlIGRlc3VnYXJpbmcgb2YgYSBjb21wbGV4CiAgLy8vIGFzc2lnbm1lbnQgZXhwcmVzc2lvbiB3aG9zZSByaWdodCBoYW5kIHNpZGUgaXMgW3Joc10uCiAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBzdGFydENvbXBsZXhBc3NpZ25tZW50KEV4cHJlc3Npb24gcmhzKSA9PgogICAgICBTeW50aGV0aWNXcmFwcGVyLndyYXBJbGxlZ2FsQXNzaWdubWVudChyaHMpOwoKICBFeHByZXNzaW9uIGJ1aWxkRm9yRWZmZWN0KCkgPT4gYnVpbGRTaW1wbGVSZWFkKCk7CgogIEluaXRpYWxpemVyIGJ1aWxkRmllbGRJbml0aWFsaXplcihNYXA8U3RyaW5nLCBpbnQ+IGluaXRpYWxpemVkRmllbGRzKSB7CiAgICBpbnQgb2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRJbnZhbGlkSW5pdGlhbGl6ZXIoCiAgICAgICAgX2hlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihfaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgbWVzc2FnZUludmFsaWRJbml0aWFsaXplciwgb2Zmc2V0LCBsZW5ndGhGb3JUb2tlbih0b2tlbikpKSwKICAgICAgICBvZmZzZXQpOwogIH0KCiAgLy8vIFJldHVybnMgYW4gZXhwcmVzc2lvbiwgZ2VuZXJhdG9yIG9yIGluaXRpYWxpemVyIGZvciBhbiBpbnZvY2F0aW9uIG9mIHRoaXMKICAvLy8gc3ViZXhwcmVzc2lvbiB3aXRoIFthcmd1bWVudHNdIGF0IFtvZmZzZXRdLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2U6CiAgLy8vICogSWYgdGhpcyBpcyBhIFtQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcl0gZm9yIGBhLmJgLCB0aGlzIHdpbGwgY3JlYXRlCiAgLy8vICAgYSBbTWV0aG9kSW52b2NhdGlvbl0gZm9yIGBhLmIoLi4uKWAuCiAgLy8vICogSWYgdGhpcyBpcyBhIFtUaGlzQWNjZXNzR2VuZXJhdG9yXSBmb3IgYHRoaXNgIGluIGFuIGluaXRpYWxpemVyIGxpc3QsCiAgLy8vICAgdGhpcyB3aWxsIGNyZWF0ZSBhIFtSZWRpcmVjdGluZ0luaXRpYWxpemVyXSBmb3IgYHRoaXMoLi4uKWAuCiAgLy8vICogSWYgdGhpcyBpcyBhbiBbSW5jb21wbGV0ZUVycm9yR2VuZXJhdG9yXSwgdGhpcyB3aWxsIHJldHVybiB0aGUgZXJyb3IKICAvLy8gICBnZW5lcmF0b3IgaXRzZWxmLgogIC8vLwogIC8qIEV4cHJlc3Npb24gfCBHZW5lcmF0b3IgfCBJbml0aWFsaXplciAqLyBkb0ludm9jYXRpb24oCiAgICAgIGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpOwoKICAvKiBFeHByZXNzaW9uIHwgR2VuZXJhdG9yICovIGJ1aWxkUHJvcGVydHlBY2Nlc3MoCiAgICAgIEluY29tcGxldGVTZW5kR2VuZXJhdG9yIHNlbmQsIGludCBvcGVyYXRvck9mZnNldCwgYm9vbCBpc051bGxBd2FyZSkgewogICAgaWYgKHNlbmQgaXMgU2VuZEFjY2Vzc0dlbmVyYXRvcikgewogICAgICByZXR1cm4gX2hlbHBlci5idWlsZE1ldGhvZEludm9jYXRpb24oYnVpbGRTaW1wbGVSZWFkKCksIHNlbmQubmFtZSwKICAgICAgICAgIHNlbmQuYXJndW1lbnRzLCBvZmZzZXRGb3JUb2tlbihzZW5kLnRva2VuKSwKICAgICAgICAgIGlzTnVsbEF3YXJlOiBpc051bGxBd2FyZSk7CiAgICB9IGVsc2UgewogICAgICBpZiAoX2hlbHBlci5jb25zdGFudENvbnRleHQgIT0gQ29uc3RhbnRDb250ZXh0Lm5vbmUgJiYKICAgICAgICAgIHNlbmQubmFtZSAhPSBsZW5ndGhOYW1lKSB7CiAgICAgICAgX2hlbHBlci5hZGRQcm9ibGVtKAogICAgICAgICAgICBtZXNzYWdlTm90QUNvbnN0YW50RXhwcmVzc2lvbiwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCB0b2tlbi5sZW5ndGgpOwogICAgICB9CiAgICAgIHJldHVybiBQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvci5tYWtlKF9oZWxwZXIsIHNlbmQudG9rZW4sCiAgICAgICAgICBidWlsZFNpbXBsZVJlYWQoKSwgc2VuZC5uYW1lLCBudWxsLCBudWxsLCBpc051bGxBd2FyZSk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyBhIFtUeXBlQnVpbGRlcl0gZm9yIHRoaXMgc3ViZXhwcmVzc2lvbiBpbnN0YW50aWF0ZWQgd2l0aCB0aGUKICAvLy8gdHlwZSBbYXJndW1lbnRzXS4gSWYgbm8gdHlwZSBhcmd1bWVudHMgYXJlIHByb3ZpZGVkIFthcmd1bWVudHNdIGlzIGBudWxsYC4KICAvLy8KICAvLy8gVGhlIHR5cGUgYXJndW1lbnRzIGhhdmUgbm90IGJlZW4gcmVzb2x2ZWQgYW5kIHNob3VsZCBiZSByZXNvbHZlZCB0bwogIC8vLyBjcmVhdGUgYSBbVHlwZUJ1aWxkZXJdIGZvciBhIHZhbGlkIHR5cGUuCiAgVHlwZUJ1aWxkZXIgYnVpbGRUeXBlV2l0aFJlc29sdmVkQXJndW1lbnRzKExpc3Q8VW5yZXNvbHZlZFR5cGU+IGFyZ3VtZW50cykgewogICAgTmFtZWRUeXBlQnVpbGRlciByZXN1bHQgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcih0b2tlbi5sZXhlbWUsIG51bGwpOwogICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGVOb3RBVHlwZS53aXRoQXJndW1lbnRzKHRva2VuLmxleGVtZSk7CiAgICBfaGVscGVyLmxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICBtZXNzYWdlLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIGxlbmd0aEZvclRva2VuKHRva2VuKSwgX3VyaSk7CiAgICByZXN1bHQuYmluZChyZXN1bHQuYnVpbGRJbnZhbGlkVHlwZShtZXNzYWdlLndpdGhMb2NhdGlvbigKICAgICAgICBfdXJpLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIGxlbmd0aEZvclRva2VuKHRva2VuKSkpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKiBFeHByZXNzaW9uIHwgR2VuZXJhdG9yICovIE9iamVjdCBxdWFsaWZpZWRMb29rdXAoVG9rZW4gbmFtZSkgewogICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkUXVhbGlmaWVkVXNlR2VuZXJhdG9yKF9oZWxwZXIsIG5hbWUsIHRoaXMsIGZhbHNlKTsKICB9CgogIEV4cHJlc3Npb24gaW52b2tlQ29uc3RydWN0b3IoCiAgICAgIExpc3Q8VW5yZXNvbHZlZFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBUb2tlbiBuYW1lVG9rZW4sCiAgICAgIFRva2VuIG5hbWVMYXN0VG9rZW4sCiAgICAgIENvbnN0bmVzcyBjb25zdG5lc3MpIHsKICAgIGlmICh0eXBlQXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KF9mb3Jlc3QuYXJndW1lbnRzVHlwZUFyZ3VtZW50cyhhcmd1bWVudHMpLmlzRW1wdHkpOwogICAgICBfZm9yZXN0LmFyZ3VtZW50c1NldFR5cGVBcmd1bWVudHMoCiAgICAgICAgICBhcmd1bWVudHMsIF9oZWxwZXIuYnVpbGREYXJ0VHlwZUFyZ3VtZW50cyh0eXBlQXJndW1lbnRzKSk7CiAgICB9CiAgICByZXR1cm4gX2hlbHBlci53cmFwSW52YWxpZENvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgICBfaGVscGVyLnRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgICAgICAgIF9mb3Jlc3QubGl0ZXJhbE51bGwodG9rZW4pLAogICAgICAgICAgICBfaGVscGVyLmNvbnN0cnVjdG9yTmFtZUZvckRpYWdub3N0aWNzKG5hbWUsCiAgICAgICAgICAgICAgICBjbGFzc05hbWU6IF9wbGFpbk5hbWVGb3JSZWFkKSwKICAgICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgICBuYW1lVG9rZW4uY2hhck9mZnNldCksCiAgICAgICAgbnVsbCwKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pKTsKICB9CgogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYnVmZmVyLndyaXRlKF9kZWJ1Z05hbWUpOwogICAgYnVmZmVyLndyaXRlKCIob2Zmc2V0OiAiKTsKICAgIGJ1ZmZlci53cml0ZSgiJHtvZmZzZXRGb3JUb2tlbih0b2tlbil9Iik7CiAgICBwcmludE9uKGJ1ZmZlcik7CiAgICBidWZmZXIud3JpdGUoIikiKTsKICAgIHJldHVybiAiJGJ1ZmZlciI7CiAgfQp9CgovLy8gW1ZhcmlhYmxlVXNlR2VuZXJhdG9yXSByZXByZXNlbnRzIHRoZSBzdWJleHByZXNzaW9uIHdob3NlIHByZWZpeCBpcyBhCi8vLyBsb2NhbCB2YXJpYWJsZSBvciBwYXJhbWV0ZXIgbmFtZS4KLy8vCi8vLyBGb3IgaW5zdGFuY2U6Ci8vLwovLy8gICBtZXRob2QoYSkgewovLy8gICAgIHZhciBiOwovLy8gICAgIGE7ICAgICAgICAgLy8gYSBWYXJpYWJsZVVzZUdlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgYWAuCi8vLyAgICAgYiA9IGFbXTsgICAvLyBhIFZhcmlhYmxlVXNlR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBhYCBhbmQgYGJgLgovLy8gICAgIGIoKTsgICAgICAgLy8gYSBWYXJpYWJsZVVzZUdlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgYmAuCi8vLyAgICAgYi5jID0gYS5kOyAvLyBhIFZhcmlhYmxlVXNlR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBhYCBhbmQgYGJgLgovLy8gICB9Ci8vLwovLy8gSWYgdGhlIHZhcmlhYmxlIGlzIGZpbmFsIG9yIHJlYWQtb25seSAobGlrZSBhIHBhcmFtZXRlciBpbiBhIGNhdGNoIGNsYXVzZSkgYQovLy8gW1JlYWRPbmx5QWNjZXNzR2VuZXJhdG9yXSBpcyBjcmVhdGVkIGluc3RlYWQuCmNsYXNzIFZhcmlhYmxlVXNlR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlOwoKICBmaW5hbCBEYXJ0VHlwZSBwcm9tb3RlZFR5cGU7CgogIFZhcmlhYmxlVXNlR2VuZXJhdG9yKAogICAgICBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sIHRoaXMudmFyaWFibGUsCiAgICAgIFt0aGlzLnByb21vdGVkVHlwZV0pCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiVmFyaWFibGVVc2VHZW5lcmF0b3IiOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkID0+IHZhcmlhYmxlLm5hbWU7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIHZhciBmYWN0ID0gX2hlbHBlci50eXBlUHJvbW90ZXIKICAgICAgICA/LmdldEZhY3RGb3JBY2Nlc3ModmFyaWFibGUsIF9oZWxwZXIuZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwogICAgdmFyIHNjb3BlID0gX2hlbHBlci50eXBlUHJvbW90ZXI/LmN1cnJlbnRTY29wZTsKICAgIHZhciByZWFkID0gbmV3IFZhcmlhYmxlR2V0SnVkZ21lbnQodmFyaWFibGUsIGZhY3QsIHNjb3BlKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ucmVhZCA9IHJlYWQ7CiAgICByZXR1cm4gcmVhZDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VXcml0ZShFeHByZXNzaW9uIHZhbHVlLCBib29sIHZvaWRDb250ZXh0LAogICAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBfaGVscGVyLnR5cGVQcm9tb3RlcgogICAgICAgID8ubXV0YXRlVmFyaWFibGUodmFyaWFibGUsIF9oZWxwZXIuZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwogICAgRXhwcmVzc2lvbiB3cml0ZTsKICAgIGlmICh2YXJpYWJsZS5pc0ZpbmFsIHx8IHZhcmlhYmxlLmlzQ29uc3QpIHsKICAgICAgd3JpdGUgPSBfbWFrZUludmFsaWRXcml0ZSh2YWx1ZSk7CiAgICAgIGlmIChjb21wbGV4QXNzaWdubWVudCAhPSBudWxsKSB7CiAgICAgICAgd3JpdGUgPSBfaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKHdyaXRlKTsKICAgICAgICBjb21wbGV4QXNzaWdubWVudC53cml0ZSA9IHdyaXRlOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB3cml0ZSA9IG5ldyBWYXJpYWJsZVNldCh2YXJpYWJsZSwgdmFsdWUpCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIH0KICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkTWV0aG9kSW52b2NhdGlvbihidWlsZFNpbXBsZVJlYWQoKSwgY2FsbE5hbWUsIGFyZ3VtZW50cywKICAgICAgICBhZGp1c3RGb3JJbXBsaWNpdENhbGwoX3BsYWluTmFtZUZvclJlYWQsIG9mZnNldCksCiAgICAgICAgaXNJbXBsaWNpdENhbGw6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBzdGFydENvbXBsZXhBc3NpZ25tZW50KEV4cHJlc3Npb24gcmhzKSB7CiAgICByZXR1cm4gU3ludGhldGljV3JhcHBlci53cmFwVmFyaWFibGVBc3NpZ25tZW50KHJocykKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykgewogICAgTmFtZVN5c3RlbSBzeW50aGV0aWNOYW1lcyA9IG5ldyBOYW1lU3lzdGVtKCk7CiAgICBzaW5rLndyaXRlKCIsIHZhcmlhYmxlOiAiKTsKICAgIHByaW50Tm9kZU9uKHZhcmlhYmxlLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCBwcm9tb3RlZFR5cGU6ICIpOwogICAgcHJpbnROb2RlT24ocHJvbW90ZWRUeXBlLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogIH0KfQoKLy8vIEEgW1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yXSByZXByZXNlbnRzIGEgc3ViZXhwcmVzc2lvbiB3aG9zZSBwcmVmaXggaXMKLy8vIGFuIGV4cGxpY2l0IHByb3BlcnR5IGFjY2Vzcy4KLy8vCi8vLyBGb3IgaW5zdGFuY2UKLy8vCi8vLyAgIG1ldGhvZChhKSB7Ci8vLyAgICAgYS5iOyAgICAgIC8vIGEgUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGEuYmAuCi8vLyAgICAgYS5iKCk7ICAgIC8vIGEgUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGEuYmAuCi8vLyAgICAgYS5iID0gYzsgIC8vIGEgUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGEuYmAuCi8vLyAgICAgYS5iICs9IGM7IC8vIGEgUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGEuYmAuCi8vLyAgIH0KLy8vCi8vLyBJZiB0aGUgcmVjZWl2ZXIgaXMgYHRoaXNgLCBhIFtUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3JdIGlzIGNyZWF0ZWQKLy8vIGluc3RlYWQuIElmIHRoZSBhY2Nlc3MgaXMgbnVsbC1hd2FyZSwgZS5nLiBgYT8uYmAsIGEKLy8vIFtOdWxsQXdhcmVQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcl0gaXMgY3JlYXRlZCBpbnN0ZWFkLgpjbGFzcyBQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgLy8vIFRoZSByZWNlaXZlciBleHByZXNzaW9uLiBgYWAgaW4gdGhlIGV4YW1wbGVzIGluIHRoZSBjbGFzcyBkb2N1bWVudGF0aW9uLgogIGZpbmFsIEV4cHJlc3Npb24gcmVjZWl2ZXI7CgogIC8vLyBUaGUgbmFtZSBmb3IgdGhlIGFjY2Vzc2VkIHByb3BlcnR5LiBgYmAgaW4gdGhlIGV4YW1wbGVzIGluIHRoZSBjbGFzcwogIC8vLyBkb2N1bWVudGF0aW9uLgogIGZpbmFsIE5hbWUgbmFtZTsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIFtnZXR0ZXJdIGFuZCBbc2V0dGVyXT8gVGhlc2UgYXJlIG5ldmVyCiAgLy8gcGFzc2VkLgogIGZpbmFsIE1lbWJlciBnZXR0ZXI7CgogIGZpbmFsIE1lbWJlciBzZXR0ZXI7CgogIC8vLyBTeW50aGV0aWMgdmFyaWFibGUgY3JlYXRlZCBmb3IgW3JlY2VpdmVyXSBpZiBuZWVkLgogIFZhcmlhYmxlRGVjbGFyYXRpb24gX3JlY2VpdmVyVmFyaWFibGU7CgogIFByb3BlcnR5QWNjZXNzR2VuZXJhdG9yKEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwKICAgICAgdGhpcy5yZWNlaXZlciwgdGhpcy5uYW1lLCB0aGlzLmdldHRlciwgdGhpcy5zZXR0ZXIpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IiOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkID0+IG5hbWUubmFtZTsKCiAgcmVjZWl2ZXJBY2Nlc3MoKSB7CiAgICBfcmVjZWl2ZXJWYXJpYWJsZSA/Pz0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUocmVjZWl2ZXIpOwogICAgcmV0dXJuIG5ldyBWYXJpYWJsZUdldChfcmVjZWl2ZXJWYXJpYWJsZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRNZXRob2RJbnZvY2F0aW9uKHJlY2VpdmVyLCBuYW1lLCBhcmd1bWVudHMsIG9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQoRXhwcmVzc2lvbiByaHMpID0+CiAgICAgIFN5bnRoZXRpY1dyYXBwZXIud3JhcFByb3BlcnR5QXNzaWdubWVudChyZWNlaXZlciwgcmhzKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykgewogICAgTmFtZVN5c3RlbSBzeW50aGV0aWNOYW1lcyA9IG5ldyBOYW1lU3lzdGVtKCk7CiAgICBzaW5rLndyaXRlKCIsIF9yZWNlaXZlclZhcmlhYmxlOiAiKTsKICAgIHByaW50Tm9kZU9uKF9yZWNlaXZlclZhcmlhYmxlLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCByZWNlaXZlcjogIik7CiAgICBwcmludE5vZGVPbihyZWNlaXZlciwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgbmFtZTogIik7CiAgICBzaW5rLndyaXRlKG5hbWUubmFtZSk7CiAgICBzaW5rLndyaXRlKCIsIGdldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihnZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHNldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihzZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlU2ltcGxlUmVhZCgpIHsKICAgIHJldHVybiBuZXcgUHJvcGVydHlHZXQocmVjZWl2ZXIsIG5hbWUsIGdldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVNpbXBsZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIHZhciB3cml0ZSA9IG5ldyBQcm9wZXJ0eVNldChyZWNlaXZlciwgbmFtZSwgdmFsdWUsIHNldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LndyaXRlID0gd3JpdGU7CiAgICByZXR1cm4gd3JpdGU7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlUmVhZChDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICB2YXIgcmVhZCA9IG5ldyBQcm9wZXJ0eUdldChyZWNlaXZlckFjY2VzcygpLCBuYW1lLCBnZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5yZWFkID0gcmVhZDsKICAgIHJldHVybiByZWFkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIHZhciB3cml0ZSA9IG5ldyBQcm9wZXJ0eVNldChyZWNlaXZlckFjY2VzcygpLCBuYW1lLCB2YWx1ZSwgc2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX2ZpbmlzaCgKICAgICAgRXhwcmVzc2lvbiBib2R5LCBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICByZXR1cm4gc3VwZXIuX2ZpbmlzaChtYWtlTGV0KF9yZWNlaXZlclZhcmlhYmxlLCBib2R5KSwgY29tcGxleEFzc2lnbm1lbnQpOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBbR2VuZXJhdG9yXSBmb3IgdGhlIGFjY2VzcyBvZiBwcm9wZXJ0eSBbbmFtZV0gb24gW3JlY2VpdmVyXS4KICBzdGF0aWMgR2VuZXJhdG9yIG1ha2UoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLAogICAgICBUb2tlbiB0b2tlbiwKICAgICAgRXhwcmVzc2lvbiByZWNlaXZlciwKICAgICAgTmFtZSBuYW1lLAogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgW2dldHRlcl0gYW5kIFtzZXR0ZXJdPyBUaGVzZSBhcmUgbmV2ZXIKICAgICAgLy8gcGFzc2VkLgogICAgICBNZW1iZXIgZ2V0dGVyLAogICAgICBNZW1iZXIgc2V0dGVyLAogICAgICBib29sIGlzTnVsbEF3YXJlKSB7CiAgICBpZiAoaGVscGVyLmZvcmVzdC5pc1RoaXNFeHByZXNzaW9uKHJlY2VpdmVyKSkgewogICAgICBnZXR0ZXIgPz89IGhlbHBlci5sb29rdXBJbnN0YW5jZU1lbWJlcihuYW1lKTsKICAgICAgc2V0dGVyID8/PSBoZWxwZXIubG9va3VwSW5zdGFuY2VNZW1iZXIobmFtZSwgaXNTZXR0ZXI6IHRydWUpOwogICAgICByZXR1cm4gbmV3IFRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcigKICAgICAgICAgIGhlbHBlciwgdG9rZW4sIG5hbWUsIGdldHRlciwgc2V0dGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBpc051bGxBd2FyZQogICAgICAgICAgPyBuZXcgTnVsbEF3YXJlUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IoCiAgICAgICAgICAgICAgaGVscGVyLCB0b2tlbiwgcmVjZWl2ZXIsIG5hbWUsIGdldHRlciwgc2V0dGVyLCBudWxsKQogICAgICAgICAgOiBuZXcgUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IoCiAgICAgICAgICAgICAgaGVscGVyLCB0b2tlbiwgcmVjZWl2ZXIsIG5hbWUsIGdldHRlciwgc2V0dGVyKTsKICAgIH0KICB9Cn0KCi8vLyBBIFtUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3JdIHJlcHJlc2VudHMgYSBzdWJleHByZXNzaW9uIHdob3NlIHByZWZpeCBpcwovLy8gYW4gaW1wbGljaXQgb3IgZXhwbGljaXQgYWNjZXNzIG9uIGB0aGlzYC4KLy8vCi8vLyBGb3IgaW5zdGFuY2UKLy8vCi8vLyAgIGNsYXNzIEMgewovLy8gICAgIHZhciBiOwovLy8gICAgIG1ldGhvZCgpIHsKLy8vICAgICAgIGI7ICAgICAgICAgICAvLyBhIFRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgYmAuCi8vLyAgICAgICBiKCk7ICAgICAgICAgLy8gYSBUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGJgLgovLy8gICAgICAgYiA9IGM7ICAgICAgIC8vIGEgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBiYC4KLy8vICAgICAgIGIgKz0gYzsgICAgICAvLyBhIFRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgYmAuCi8vLyAgICAgICB0aGlzLmI7ICAgICAgLy8gYSBUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYHRoaXMuYmAuCi8vLyAgICAgICB0aGlzLmIoKTsgICAgLy8gYSBUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYHRoaXMuYmAuCi8vLyAgICAgICB0aGlzLmIgPSBjOyAgLy8gYSBUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYHRoaXMuYmAuCi8vLyAgICAgICB0aGlzLmIgKz0gYzsgLy8gYSBUaGlzUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYHRoaXMuYmAuCi8vLyAgICAgfQovLy8gICB9Ci8vLwovLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBvZiBbUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3JdIHRvIGF2b2lkIGNyZWF0aW5nIGFuCi8vLyBpbmRpcmVjdCBhY2Nlc3MgdG8gJ3RoaXMnIGluIGZvciBpbnN0YW5jZSBgdGhpcy5iICs9IGNgIHdoaWNoIGJ5Ci8vLyBbUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3JdIHdvdWxkIGhhdmUgYmVlbiBjcmVhdGVkIGFzCi8vLwovLy8gICAgIGxldCAjMSA9IHRoaXMgaW4gIy5iID0gIy5iICsgYwovLy8KLy8vIGluc3RlYWQgb2YKLy8vCi8vLyAgICAgdGhpcy5iID0gdGhpcy5iICsgYwovLy8KY2xhc3MgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICAvLy8gVGhlIG5hbWUgZm9yIHRoZSBhY2Nlc3NlZCBwcm9wZXJ0eS4gYGJgIGluIHRoZSBleGFtcGxlcyBpbiB0aGUgY2xhc3MKICAvLy8gZG9jdW1lbnRhdGlvbi4KICBmaW5hbCBOYW1lIG5hbWU7CgogIC8vLyBUaGUgbWVtYmVyIGFjY2Vzc2VkIGlmIHRoaXMgc3ViZXhwcmVzc2lvbiBoYXMgYSByZWFkLgogIC8vLwogIC8vLyBUaGlzIGlzIGBudWxsYCBpZiB0aGUgYHRoaXNgIGNsYXNzIGRvZXMgbm90IGhhdmUgYSByZWFkYWJsZSBwcm9wZXJ0eSBuYW1lZAogIC8vLyBbbmFtZV0uCiAgZmluYWwgTWVtYmVyIGdldHRlcjsKCiAgLy8vIFRoZSBtZW1iZXIgYWNjZXNzZWQgaWYgdGhpcyBzdWJleHByZXNzaW9uIGhhcyBhIHdyaXRlLgogIC8vLwogIC8vLyBUaGlzIGlzIGBudWxsYCBpZiB0aGUgYHRoaXNgIGNsYXNzIGRvZXMgbm90IGhhdmUgYSB3cml0YWJsZSBwcm9wZXJ0eSBuYW1lZAogIC8vLyBbbmFtZV0uCiAgZmluYWwgTWVtYmVyIHNldHRlcjsKCiAgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yKEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwKICAgICAgdGhpcy5uYW1lLCB0aGlzLmdldHRlciwgdGhpcy5zZXR0ZXIpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiBuYW1lLm5hbWU7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGlmIChnZXR0ZXIgPT0gbnVsbCkgewogICAgICBfaGVscGVyLndhcm5VbnJlc29sdmVkR2V0KG5hbWUsIG9mZnNldEZvclRva2VuKHRva2VuKSk7CiAgICB9CiAgICB2YXIgcmVhZCA9IG5ldyBQcm9wZXJ0eUdldChfZm9yZXN0LnRoaXNFeHByZXNzaW9uKHRva2VuKSwgbmFtZSwgZ2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ucmVhZCA9IHJlYWQ7CiAgICByZXR1cm4gcmVhZDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VXcml0ZShFeHByZXNzaW9uIHZhbHVlLCBib29sIHZvaWRDb250ZXh0LAogICAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBpZiAoc2V0dGVyID09IG51bGwpIHsKICAgICAgX2hlbHBlci53YXJuVW5yZXNvbHZlZFNldChuYW1lLCBvZmZzZXRGb3JUb2tlbih0b2tlbikpOwogICAgfQogICAgdmFyIHdyaXRlID0KICAgICAgICBuZXcgUHJvcGVydHlTZXQoX2ZvcmVzdC50aGlzRXhwcmVzc2lvbih0b2tlbiksIG5hbWUsIHZhbHVlLCBzZXR0ZXIpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIE1lbWJlciBpbnRlcmZhY2VUYXJnZXQgPSBnZXR0ZXI7CiAgICBpZiAoaW50ZXJmYWNlVGFyZ2V0ID09IG51bGwpIHsKICAgICAgX2hlbHBlci53YXJuVW5yZXNvbHZlZE1ldGhvZChuYW1lLCBvZmZzZXQpOwogICAgfQogICAgaWYgKGludGVyZmFjZVRhcmdldCBpcyBGaWVsZCkgewogICAgICAvLyBUT0RPKGFoZSk6IEluIHN0cm9uZyBtb2RlIHdlIHNob3VsZCBwcm9iYWJseSByZXdyaXRlIHRoaXMgdG8KICAgICAgLy8gYHRoaXMubmFtZS5jYWxsKGFyZ3VtZW50cylgLgogICAgICBpbnRlcmZhY2VUYXJnZXQgPSBudWxsOwogICAgfQogICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRNZXRob2RJbnZvY2F0aW9uKAogICAgICAgIF9mb3Jlc3QudGhpc0V4cHJlc3Npb24obnVsbCksIG5hbWUsIGFyZ3VtZW50cywgb2Zmc2V0LAogICAgICAgIGludGVyZmFjZVRhcmdldDogaW50ZXJmYWNlVGFyZ2V0KTsKICB9CgogIEBvdmVycmlkZQogIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgc3RhcnRDb21wbGV4QXNzaWdubWVudChFeHByZXNzaW9uIHJocykgPT4KICAgICAgU3ludGhldGljV3JhcHBlci53cmFwUHJvcGVydHlBc3NpZ25tZW50KG51bGwsIHJocyk7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwogICAgc2luay53cml0ZSgiLCBuYW1lOiAiKTsKICAgIHNpbmsud3JpdGUobmFtZS5uYW1lKTsKICAgIHNpbmsud3JpdGUoIiwgZ2V0dGVyOiAiKTsKICAgIHByaW50UXVhbGlmaWVkTmFtZU9uKGdldHRlciwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgc2V0dGVyOiAiKTsKICAgIHByaW50UXVhbGlmaWVkTmFtZU9uKHNldHRlciwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICB9Cn0KCmNsYXNzIE51bGxBd2FyZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBWYXJpYWJsZURlY2xhcmF0aW9uIHJlY2VpdmVyOwoKICBmaW5hbCBFeHByZXNzaW9uIHJlY2VpdmVyRXhwcmVzc2lvbjsKCiAgZmluYWwgTmFtZSBuYW1lOwoKICBmaW5hbCBNZW1iZXIgZ2V0dGVyOwoKICBmaW5hbCBNZW1iZXIgc2V0dGVyOwoKICBmaW5hbCBEYXJ0VHlwZSB0eXBlOwoKICBOdWxsQXdhcmVQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcigKICAgICAgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsCiAgICAgIFRva2VuIHRva2VuLAogICAgICB0aGlzLnJlY2VpdmVyRXhwcmVzc2lvbiwKICAgICAgdGhpcy5uYW1lLAogICAgICB0aGlzLmdldHRlciwKICAgICAgdGhpcy5zZXR0ZXIsCiAgICAgIHRoaXMudHlwZSkKICAgICAgOiB0aGlzLnJlY2VpdmVyID0gbWFrZU9yUmV1c2VWYXJpYWJsZShyZWNlaXZlckV4cHJlc3Npb24pLAogICAgICAgIHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIk51bGxBd2FyZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIjsKCiAgRXhwcmVzc2lvbiByZWNlaXZlckFjY2VzcygpID0+IG5ldyBWYXJpYWJsZUdldChyZWNlaXZlcik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gbmFtZS5uYW1lOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlUmVhZChDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICB2YXIgcmVhZCA9IG5ldyBQcm9wZXJ0eUdldChyZWNlaXZlckFjY2VzcygpLCBuYW1lLCBnZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5yZWFkID0gcmVhZDsKICAgIHJldHVybiByZWFkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIHZhciB3cml0ZSA9IG5ldyBQcm9wZXJ0eVNldChyZWNlaXZlckFjY2VzcygpLCBuYW1lLCB2YWx1ZSwgc2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX2ZpbmlzaCgKICAgICAgRXhwcmVzc2lvbiBib2R5LCBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICB2YXIgb2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgdmFyIG51bGxBd2FyZUd1YXJkID0gX2ZvcmVzdC5jb25kaXRpb25hbEV4cHJlc3Npb24oCiAgICAgICAgYnVpbGRJc051bGwocmVjZWl2ZXJBY2Nlc3MoKSwgb2Zmc2V0LCBfaGVscGVyKSwKICAgICAgICBudWxsLAogICAgICAgIF9mb3Jlc3QubGl0ZXJhbE51bGwobnVsbCkuLmZpbGVPZmZzZXQgPSBvZmZzZXQsCiAgICAgICAgbnVsbCwKICAgICAgICBib2R5KQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICBpZiAoY29tcGxleEFzc2lnbm1lbnQgIT0gbnVsbCkgewogICAgICBib2R5ID0gbWFrZUxldChyZWNlaXZlciwgbnVsbEF3YXJlR3VhcmQpOwogICAgICBpZiAoX2hlbHBlci5sZWdhY3lNb2RlKSByZXR1cm4gYm9keTsKICAgICAgUHJvcGVydHlBc3NpZ25tZW50SnVkZ21lbnQga2VybmVsUHJvcGVydHlBc3NpZ24gPSBjb21wbGV4QXNzaWdubWVudDsKICAgICAga2VybmVsUHJvcGVydHlBc3NpZ24ubnVsbEF3YXJlR3VhcmQgPSBudWxsQXdhcmVHdWFyZDsKICAgICAga2VybmVsUHJvcGVydHlBc3NpZ24uZGVzdWdhcmVkID0gYm9keTsKICAgICAgcmV0dXJuIGtlcm5lbFByb3BlcnR5QXNzaWduOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBOdWxsQXdhcmVQcm9wZXJ0eUdldEp1ZGdtZW50KHJlY2VpdmVyLCBudWxsQXdhcmVHdWFyZCkKICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImRvSW52b2NhdGlvbiIsIG9mZnNldCwgX3VyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQoRXhwcmVzc2lvbiByaHMpID0+CiAgICAgIFN5bnRoZXRpY1dyYXBwZXIud3JhcFByb3BlcnR5QXNzaWdubWVudChyZWNlaXZlckV4cHJlc3Npb24sIHJocyk7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwogICAgc2luay53cml0ZSgiLCByZWNlaXZlcjogIik7CiAgICBwcmludE5vZGVPbihyZWNlaXZlciwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgcmVjZWl2ZXJFeHByZXNzaW9uOiAiKTsKICAgIHByaW50Tm9kZU9uKHJlY2VpdmVyRXhwcmVzc2lvbiwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgbmFtZTogIik7CiAgICBzaW5rLndyaXRlKG5hbWUubmFtZSk7CiAgICBzaW5rLndyaXRlKCIsIGdldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihnZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHNldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihzZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHR5cGU6ICIpOwogICAgcHJpbnROb2RlT24odHlwZSwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICB9Cn0KCmNsYXNzIFN1cGVyUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIGZpbmFsIE5hbWUgbmFtZTsKCiAgZmluYWwgTWVtYmVyIGdldHRlcjsKCiAgZmluYWwgTWVtYmVyIHNldHRlcjsKCiAgU3VwZXJQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sCiAgICAgIHRoaXMubmFtZSwgdGhpcy5nZXR0ZXIsIHRoaXMuc2V0dGVyKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlN1cGVyUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IiOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkID0+IG5hbWUubmFtZTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVJlYWQoQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgaWYgKGdldHRlciA9PSBudWxsKSB7CiAgICAgIF9oZWxwZXIud2FyblVucmVzb2x2ZWRHZXQobmFtZSwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBpc1N1cGVyOiB0cnVlKTsKICAgIH0KICAgIC8vIFRPRE8oYWhlKTogVXNlIFtEaXJlY3RQcm9wZXJ0eUdldF0gd2hlbiBwb3NzaWJsZS4KICAgIHZhciByZWFkID0gbmV3IFN1cGVyUHJvcGVydHlHZXRKdWRnbWVudChuYW1lLCBpbnRlcmZhY2VUYXJnZXQ6IGdldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LnJlYWQgPSByZWFkOwogICAgcmV0dXJuIHJlYWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlV3JpdGUoRXhwcmVzc2lvbiB2YWx1ZSwgYm9vbCB2b2lkQ29udGV4dCwKICAgICAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgaWYgKHNldHRlciA9PSBudWxsKSB7CiAgICAgIF9oZWxwZXIud2FyblVucmVzb2x2ZWRTZXQobmFtZSwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBpc1N1cGVyOiB0cnVlKTsKICAgIH0KICAgIC8vIFRPRE8oYWhlKTogVXNlIFtEaXJlY3RQcm9wZXJ0eVNldF0gd2hlbiBwb3NzaWJsZS4KICAgIHZhciB3cml0ZSA9IG5ldyBTdXBlclByb3BlcnR5U2V0KG5hbWUsIHZhbHVlLCBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgcmV0dXJuIHdyaXRlOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgaWYgKF9oZWxwZXIuY29uc3RhbnRDb250ZXh0ICE9IENvbnN0YW50Q29udGV4dC5ub25lKSB7CiAgICAgIC8vIFRPRE8oYnJpYW53aWxrZXJzb24pIEZpeCB0aGUgbGVuZ3RoCiAgICAgIF9oZWxwZXIuYWRkUHJvYmxlbShtZXNzYWdlTm90QUNvbnN0YW50RXhwcmVzc2lvbiwgb2Zmc2V0LCAxKTsKICAgIH0KICAgIGlmIChnZXR0ZXIgPT0gbnVsbCB8fCBpc0ZpZWxkT3JHZXR0ZXIoZ2V0dGVyKSkgewogICAgICByZXR1cm4gX2hlbHBlci5idWlsZE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgICBidWlsZFNpbXBsZVJlYWQoKSwgY2FsbE5hbWUsIGFyZ3VtZW50cywgb2Zmc2V0LAogICAgICAgICAgLy8gVGhpcyBpc24ndCBhIGNvbnN0YW50IGV4cHJlc3Npb24sIGJ1dCB3ZSBoYXZlIGNoZWNrZWQgaWYgYQogICAgICAgICAgLy8gY29uc3RhbnQgZXhwcmVzc2lvbiBlcnJvciBzaG91bGQgYmUgZW1pdHRlZCBhbHJlYWR5LgogICAgICAgICAgaXNDb25zdGFudEV4cHJlc3Npb246IHRydWUsCiAgICAgICAgICBpc0ltcGxpY2l0Q2FsbDogdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICAvLyBUT0RPKGFoZSk6IFRoaXMgY291bGQgYmUgc29tZXRoaW5nIGxpa2UgInN1cGVyLnByb3BlcnR5KC4uLikiIHdoZXJlCiAgICAgIC8vIHByb3BlcnR5IGlzIGEgc2V0dGVyLgogICAgICByZXR1cm4gdW5oYW5kbGVkKCIke2dldHRlci5ydW50aW1lVHlwZX0iLCAiZG9JbnZvY2F0aW9uIiwgb2Zmc2V0LCBfdXJpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgc3RhcnRDb21wbGV4QXNzaWdubWVudChFeHByZXNzaW9uIHJocykgPT4KICAgICAgU3ludGhldGljV3JhcHBlci53cmFwUHJvcGVydHlBc3NpZ25tZW50KG51bGwsIHJocywgaXNTdXBlcjogdHJ1ZSk7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwogICAgc2luay53cml0ZSgiLCBuYW1lOiAiKTsKICAgIHNpbmsud3JpdGUobmFtZS5uYW1lKTsKICAgIHNpbmsud3JpdGUoIiwgZ2V0dGVyOiAiKTsKICAgIHByaW50UXVhbGlmaWVkTmFtZU9uKGdldHRlciwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgc2V0dGVyOiAiKTsKICAgIHByaW50UXVhbGlmaWVkTmFtZU9uKHNldHRlciwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICB9Cn0KCmNsYXNzIEluZGV4ZWRBY2Nlc3NHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIGZpbmFsIEV4cHJlc3Npb24gcmVjZWl2ZXI7CgogIGZpbmFsIEV4cHJlc3Npb24gaW5kZXg7CgogIGZpbmFsIFByb2NlZHVyZSBnZXR0ZXI7CgogIGZpbmFsIFByb2NlZHVyZSBzZXR0ZXI7CgogIFZhcmlhYmxlRGVjbGFyYXRpb24gcmVjZWl2ZXJWYXJpYWJsZTsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbiBpbmRleFZhcmlhYmxlOwoKICBJbmRleGVkQWNjZXNzR2VuZXJhdG9yKEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwKICAgICAgdGhpcy5yZWNlaXZlciwgdGhpcy5pbmRleCwgdGhpcy5nZXR0ZXIsIHRoaXMuc2V0dGVyKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkID0+ICJbXSI7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiSW5kZXhlZEFjY2Vzc0dlbmVyYXRvciI7CgogIEV4cHJlc3Npb24gaW5kZXhBY2Nlc3MoKSB7CiAgICBpbmRleFZhcmlhYmxlID8/PSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShpbmRleCk7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlR2V0KGluZGV4VmFyaWFibGUpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgRXhwcmVzc2lvbiByZWNlaXZlckFjY2VzcygpIHsKICAgIC8vIFdlIGNhbm5vdCByZXVzZSB0aGUgcmVjZWl2ZXIgaWYgaXQgaXMgYSB2YXJpYWJsZSBzaW5jZSBpdCBtaWdodCBiZQogICAgLy8gcmVhc3NpZ25lZCBpbiB0aGUgaW5kZXggZXhwcmVzc2lvbi4KICAgIHJlY2VpdmVyVmFyaWFibGUgPz89IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKHJlY2VpdmVyKTsKICAgIHJldHVybiBuZXcgVmFyaWFibGVHZXQocmVjZWl2ZXJWYXJpYWJsZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVNpbXBsZVJlYWQoKSB7CiAgICB2YXIgcmVhZCA9IG5ldyBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQocmVjZWl2ZXIsIGluZGV4R2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNhc3RBcmd1bWVudHMoX2ZvcmVzdC5hcmd1bWVudHMoPEV4cHJlc3Npb24+W2luZGV4XSwgdG9rZW4pKSwKICAgICAgICBpbnRlcmZhY2VUYXJnZXQ6IGdldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgcmV0dXJuIHJlYWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlU2ltcGxlV3JpdGUoRXhwcmVzc2lvbiB2YWx1ZSwgYm9vbCB2b2lkQ29udGV4dCwKICAgICAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgaWYgKCF2b2lkQ29udGV4dCkgcmV0dXJuIF9tYWtlV3JpdGVBbmRSZXR1cm4odmFsdWUsIGNvbXBsZXhBc3NpZ25tZW50KTsKICAgIHZhciB3cml0ZSA9IG5ldyBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgICAgcmVjZWl2ZXIsCiAgICAgICAgaW5kZXhTZXROYW1lLAogICAgICAgIF9mb3Jlc3QuY2FzdEFyZ3VtZW50cygKICAgICAgICAgICAgX2ZvcmVzdC5hcmd1bWVudHMoPEV4cHJlc3Npb24+W2luZGV4LCB2YWx1ZV0sIHRva2VuKSksCiAgICAgICAgaW50ZXJmYWNlVGFyZ2V0OiBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgcmV0dXJuIHdyaXRlOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVJlYWQoQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgdmFyIHJlYWQgPSBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgIHJlY2VpdmVyQWNjZXNzKCksCiAgICAgICAgaW5kZXhHZXROYW1lLAogICAgICAgIF9mb3Jlc3QuY2FzdEFyZ3VtZW50cygKICAgICAgICAgICAgX2ZvcmVzdC5hcmd1bWVudHMoPEV4cHJlc3Npb24+W2luZGV4QWNjZXNzKCldLCB0b2tlbikpLAogICAgICAgIGludGVyZmFjZVRhcmdldDogZ2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ucmVhZCA9IHJlYWQ7CiAgICByZXR1cm4gcmVhZDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VXcml0ZShFeHByZXNzaW9uIHZhbHVlLCBib29sIHZvaWRDb250ZXh0LAogICAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBpZiAoIXZvaWRDb250ZXh0KSByZXR1cm4gX21ha2VXcml0ZUFuZFJldHVybih2YWx1ZSwgY29tcGxleEFzc2lnbm1lbnQpOwogICAgdmFyIHdyaXRlID0gbmV3IE1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgICByZWNlaXZlckFjY2VzcygpLAogICAgICAgIGluZGV4U2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNhc3RBcmd1bWVudHMoCiAgICAgICAgICAgIF9mb3Jlc3QuYXJndW1lbnRzKDxFeHByZXNzaW9uPltpbmRleEFjY2VzcygpLCB2YWx1ZV0sIHRva2VuKSksCiAgICAgICAgaW50ZXJmYWNlVGFyZ2V0OiBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgcmV0dXJuIHdyaXRlOwogIH0KCiAgLy8gVE9ETyhkbWl0cnlhcyk6IHJlbW92ZSB0aGlzIG1ldGhvZCBhZnRlciB0aGUgIltdPSIgb3BlcmF0b3Igb2YgdGhlIENvbnRleHQKICAvLyBjbGFzcyBpcyBtYWRlIHRvIHJldHVybiBhIHZhbHVlLgogIEV4cHJlc3Npb24gX21ha2VXcml0ZUFuZFJldHVybigKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSwgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgLy8gVGhlIGNhbGwgdG8gW109IGRvZXMgbm90IHJldHVybiB0aGUgdmFsdWUgbGlrZSBkaXJlY3Qtc3R5bGUgYXNzaWdubWVudHMKICAgIC8vIGRvLiAgV2UgbmVlZCB0byBiaW5kIHRoZSB2YWx1ZSBpbiBhIGxldC4KICAgIHZhciB2YWx1ZVZhcmlhYmxlID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUodmFsdWUpOwogICAgdmFyIHdyaXRlID0gbmV3IE1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgICByZWNlaXZlckFjY2VzcygpLAogICAgICAgIGluZGV4U2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNhc3RBcmd1bWVudHMoX2ZvcmVzdC5hcmd1bWVudHMoCiAgICAgICAgICAgIDxFeHByZXNzaW9uPltpbmRleEFjY2VzcygpLCBuZXcgVmFyaWFibGVHZXQodmFsdWVWYXJpYWJsZSldLAogICAgICAgICAgICB0b2tlbikpLAogICAgICAgIGludGVyZmFjZVRhcmdldDogc2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHZhciBkdW1teSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQuZm9yVmFsdWUoCiAgICAgICAgd3JpdGUsIF9oZWxwZXIuZnVuY3Rpb25OZXN0aW5nTGV2ZWwpOwogICAgcmV0dXJuIG1ha2VMZXQoCiAgICAgICAgdmFsdWVWYXJpYWJsZSwgbWFrZUxldChkdW1teSwgbmV3IFZhcmlhYmxlR2V0KHZhbHVlVmFyaWFibGUpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9maW5pc2goCiAgICAgIEV4cHJlc3Npb24gYm9keSwgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgaW50IG9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIHJldHVybiBzdXBlci5fZmluaXNoKAogICAgICAgIG1ha2VMZXQoCiAgICAgICAgICAgIHJlY2VpdmVyVmFyaWFibGUsIG1ha2VMZXQoaW5kZXhWYXJpYWJsZSwgYm9keSkuLmZpbGVPZmZzZXQgPSBvZmZzZXQpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQsCiAgICAgICAgY29tcGxleEFzc2lnbm1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRNZXRob2RJbnZvY2F0aW9uKAogICAgICAgIGJ1aWxkU2ltcGxlUmVhZCgpLCBjYWxsTmFtZSwgYXJndW1lbnRzLCBfZm9yZXN0LnJlYWRPZmZzZXQoYXJndW1lbnRzKSwKICAgICAgICBpc0ltcGxpY2l0Q2FsbDogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQoRXhwcmVzc2lvbiByaHMpID0+CiAgICAgIFN5bnRoZXRpY1dyYXBwZXIud3JhcEluZGV4QXNzaWdubWVudChyZWNlaXZlciwgaW5kZXgsIHJocyk7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwogICAgc2luay53cml0ZSgiLCByZWNlaXZlcjogIik7CiAgICBwcmludE5vZGVPbihyZWNlaXZlciwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgaW5kZXg6ICIpOwogICAgcHJpbnROb2RlT24oaW5kZXgsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIGdldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihnZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHNldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihzZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHJlY2VpdmVyVmFyaWFibGU6ICIpOwogICAgcHJpbnROb2RlT24ocmVjZWl2ZXJWYXJpYWJsZSwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICAgIHNpbmsud3JpdGUoIiwgaW5kZXhWYXJpYWJsZTogIik7CiAgICBwcmludE5vZGVPbihpbmRleFZhcmlhYmxlLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogIH0KCiAgc3RhdGljIEdlbmVyYXRvciBtYWtlKAogICAgICBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwKICAgICAgVG9rZW4gdG9rZW4sCiAgICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsCiAgICAgIEV4cHJlc3Npb24gaW5kZXgsCiAgICAgIFByb2NlZHVyZSBnZXR0ZXIsCiAgICAgIFByb2NlZHVyZSBzZXR0ZXIpIHsKICAgIGlmIChoZWxwZXIuZm9yZXN0LmlzVGhpc0V4cHJlc3Npb24ocmVjZWl2ZXIpKSB7CiAgICAgIHJldHVybiBuZXcgVGhpc0luZGV4ZWRBY2Nlc3NHZW5lcmF0b3IoCiAgICAgICAgICBoZWxwZXIsIHRva2VuLCBpbmRleCwgZ2V0dGVyLCBzZXR0ZXIpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBJbmRleGVkQWNjZXNzR2VuZXJhdG9yKAogICAgICAgICAgaGVscGVyLCB0b2tlbiwgcmVjZWl2ZXIsIGluZGV4LCBnZXR0ZXIsIHNldHRlcik7CiAgICB9CiAgfQp9CgovLy8gU3BlY2lhbCBjYXNlIG9mIFtJbmRleGVkQWNjZXNzR2VuZXJhdG9yXSB0byBhdm9pZCBjcmVhdGluZyBhbiBpbmRpcmVjdAovLy8gYWNjZXNzIHRvICd0aGlzJy4KY2xhc3MgVGhpc0luZGV4ZWRBY2Nlc3NHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIGZpbmFsIEV4cHJlc3Npb24gaW5kZXg7CgogIGZpbmFsIFByb2NlZHVyZSBnZXR0ZXI7CgogIGZpbmFsIFByb2NlZHVyZSBzZXR0ZXI7CgogIFZhcmlhYmxlRGVjbGFyYXRpb24gaW5kZXhWYXJpYWJsZTsKCiAgVGhpc0luZGV4ZWRBY2Nlc3NHZW5lcmF0b3IoRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLAogICAgICB0aGlzLmluZGV4LCB0aGlzLmdldHRlciwgdGhpcy5zZXR0ZXIpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gIltdIjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJUaGlzSW5kZXhlZEFjY2Vzc0dlbmVyYXRvciI7CgogIEV4cHJlc3Npb24gaW5kZXhBY2Nlc3MoKSB7CiAgICBpbmRleFZhcmlhYmxlID8/PSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZShpbmRleCk7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlR2V0KGluZGV4VmFyaWFibGUpOwogIH0KCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlQW5kUmV0dXJuKAogICAgICBFeHByZXNzaW9uIHZhbHVlLCBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICB2YXIgdmFsdWVWYXJpYWJsZSA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uLmZvclZhbHVlKHZhbHVlKTsKICAgIHZhciB3cml0ZSA9IG5ldyBNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQoCiAgICAgICAgX2ZvcmVzdC50aGlzRXhwcmVzc2lvbih0b2tlbiksCiAgICAgICAgaW5kZXhTZXROYW1lLAogICAgICAgIF9mb3Jlc3QuY2FzdEFyZ3VtZW50cyhfZm9yZXN0LmFyZ3VtZW50cygKICAgICAgICAgICAgPEV4cHJlc3Npb24+W2luZGV4QWNjZXNzKCksIG5ldyBWYXJpYWJsZUdldCh2YWx1ZVZhcmlhYmxlKV0sCiAgICAgICAgICAgIHRva2VuKSksCiAgICAgICAgaW50ZXJmYWNlVGFyZ2V0OiBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgdmFyIGR1bW15ID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUod3JpdGUpOwogICAgcmV0dXJuIG1ha2VMZXQoCiAgICAgICAgdmFsdWVWYXJpYWJsZSwgbWFrZUxldChkdW1teSwgbmV3IFZhcmlhYmxlR2V0KHZhbHVlVmFyaWFibGUpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlU2ltcGxlUmVhZCgpIHsKICAgIHJldHVybiBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgIF9mb3Jlc3QudGhpc0V4cHJlc3Npb24odG9rZW4pLAogICAgICAgIGluZGV4R2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNhc3RBcmd1bWVudHMoX2ZvcmVzdC5hcmd1bWVudHMoPEV4cHJlc3Npb24+W2luZGV4XSwgdG9rZW4pKSwKICAgICAgICBpbnRlcmZhY2VUYXJnZXQ6IGdldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVNpbXBsZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGlmICghdm9pZENvbnRleHQpIHJldHVybiBfbWFrZVdyaXRlQW5kUmV0dXJuKHZhbHVlLCBjb21wbGV4QXNzaWdubWVudCk7CiAgICB2YXIgd3JpdGUgPSBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgIF9mb3Jlc3QudGhpc0V4cHJlc3Npb24odG9rZW4pLAogICAgICAgIGluZGV4U2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNhc3RBcmd1bWVudHMoCiAgICAgICAgICAgIF9mb3Jlc3QuYXJndW1lbnRzKDxFeHByZXNzaW9uPltpbmRleCwgdmFsdWVdLCB0b2tlbikpLAogICAgICAgIGludGVyZmFjZVRhcmdldDogc2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ud3JpdGUgPSB3cml0ZTsKICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIHZhciByZWFkID0gbmV3IE1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgICBfZm9yZXN0LnRoaXNFeHByZXNzaW9uKHRva2VuKSwKICAgICAgICBpbmRleEdldE5hbWUsCiAgICAgICAgX2ZvcmVzdC5jYXN0QXJndW1lbnRzKAogICAgICAgICAgICBfZm9yZXN0LmFyZ3VtZW50cyg8RXhwcmVzc2lvbj5baW5kZXhBY2Nlc3MoKV0sIHRva2VuKSksCiAgICAgICAgaW50ZXJmYWNlVGFyZ2V0OiBnZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5yZWFkID0gcmVhZDsKICAgIHJldHVybiByZWFkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGlmICghdm9pZENvbnRleHQpIHJldHVybiBfbWFrZVdyaXRlQW5kUmV0dXJuKHZhbHVlLCBjb21wbGV4QXNzaWdubWVudCk7CiAgICB2YXIgd3JpdGUgPSBuZXcgTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50KAogICAgICAgIF9mb3Jlc3QudGhpc0V4cHJlc3Npb24odG9rZW4pLAogICAgICAgIGluZGV4U2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNhc3RBcmd1bWVudHMoCiAgICAgICAgICAgIF9mb3Jlc3QuYXJndW1lbnRzKDxFeHByZXNzaW9uPltpbmRleEFjY2VzcygpLCB2YWx1ZV0sIHRva2VuKSksCiAgICAgICAgaW50ZXJmYWNlVGFyZ2V0OiBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgcmV0dXJuIHdyaXRlOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfZmluaXNoKAogICAgICBFeHByZXNzaW9uIGJvZHksIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIHJldHVybiBzdXBlci5fZmluaXNoKG1ha2VMZXQoaW5kZXhWYXJpYWJsZSwgYm9keSksIGNvbXBsZXhBc3NpZ25tZW50KTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkTWV0aG9kSW52b2NhdGlvbigKICAgICAgICBidWlsZFNpbXBsZVJlYWQoKSwgY2FsbE5hbWUsIGFyZ3VtZW50cywgb2Zmc2V0LAogICAgICAgIGlzSW1wbGljaXRDYWxsOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgc3RhcnRDb21wbGV4QXNzaWdubWVudChFeHByZXNzaW9uIHJocykgPT4KICAgICAgU3ludGhldGljV3JhcHBlci53cmFwSW5kZXhBc3NpZ25tZW50KG51bGwsIGluZGV4LCByaHMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBOYW1lU3lzdGVtIHN5bnRoZXRpY05hbWVzID0gbmV3IE5hbWVTeXN0ZW0oKTsKICAgIHNpbmsud3JpdGUoIiwgaW5kZXg6ICIpOwogICAgcHJpbnROb2RlT24oaW5kZXgsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIGdldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihnZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHNldHRlcjogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihzZXR0ZXIsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIGluZGV4VmFyaWFibGU6ICIpOwogICAgcHJpbnROb2RlT24oaW5kZXhWYXJpYWJsZSwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICB9Cn0KCmNsYXNzIFN1cGVySW5kZXhlZEFjY2Vzc0dlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgZmluYWwgRXhwcmVzc2lvbiBpbmRleDsKCiAgZmluYWwgTWVtYmVyIGdldHRlcjsKCiAgZmluYWwgTWVtYmVyIHNldHRlcjsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbiBpbmRleFZhcmlhYmxlOwoKICBTdXBlckluZGV4ZWRBY2Nlc3NHZW5lcmF0b3IoRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLAogICAgICB0aGlzLmluZGV4LCB0aGlzLmdldHRlciwgdGhpcy5zZXR0ZXIpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gIltdIjsKCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJTdXBlckluZGV4ZWRBY2Nlc3NHZW5lcmF0b3IiOwoKICBFeHByZXNzaW9uIGluZGV4QWNjZXNzKCkgewogICAgaW5kZXhWYXJpYWJsZSA/Pz0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoaW5kZXgpOwogICAgcmV0dXJuIG5ldyBWYXJpYWJsZUdldChpbmRleFZhcmlhYmxlKTsKICB9CgogIEV4cHJlc3Npb24gX21ha2VXcml0ZUFuZFJldHVybigKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSwgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgdmFyIHZhbHVlVmFyaWFibGUgPSBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbi5mb3JWYWx1ZSh2YWx1ZSk7CiAgICBpZiAoc2V0dGVyID09IG51bGwpIHsKICAgICAgX2hlbHBlci53YXJuVW5yZXNvbHZlZE1ldGhvZChpbmRleFNldE5hbWUsIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICAgIGlzU3VwZXI6IHRydWUpOwogICAgfQogICAgdmFyIHdyaXRlID0gbmV3IFN1cGVyTWV0aG9kSW52b2NhdGlvbigKICAgICAgICBpbmRleFNldE5hbWUsCiAgICAgICAgX2ZvcmVzdC5jYXN0QXJndW1lbnRzKF9mb3Jlc3QuYXJndW1lbnRzKAogICAgICAgICAgICA8RXhwcmVzc2lvbj5baW5kZXhBY2Nlc3MoKSwgbmV3IFZhcmlhYmxlR2V0KHZhbHVlVmFyaWFibGUpXSwKICAgICAgICAgICAgdG9rZW4pKSwKICAgICAgICBzZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgdmFyIGR1bW15ID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUod3JpdGUpOwogICAgcmV0dXJuIG1ha2VMZXQoCiAgICAgICAgdmFsdWVWYXJpYWJsZSwgbWFrZUxldChkdW1teSwgbmV3IFZhcmlhYmxlR2V0KHZhbHVlVmFyaWFibGUpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlU2ltcGxlUmVhZCgpIHsKICAgIGlmIChnZXR0ZXIgPT0gbnVsbCkgewogICAgICBfaGVscGVyLndhcm5VbnJlc29sdmVkTWV0aG9kKGluZGV4R2V0TmFtZSwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLAogICAgICAgICAgaXNTdXBlcjogdHJ1ZSk7CiAgICB9CiAgICAvLyBUT0RPKGFoZSk6IFVzZSBbRGlyZWN0TWV0aG9kSW52b2NhdGlvbl0gd2hlbiBwb3NzaWJsZS4KICAgIHJldHVybiBuZXcgU3VwZXJNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnQoaW5kZXhHZXROYW1lLAogICAgICAgIF9mb3Jlc3QuY2FzdEFyZ3VtZW50cyhfZm9yZXN0LmFyZ3VtZW50cyg8RXhwcmVzc2lvbj5baW5kZXhdLCB0b2tlbikpLAogICAgICAgIGludGVyZmFjZVRhcmdldDogZ2V0dGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlU2ltcGxlV3JpdGUoRXhwcmVzc2lvbiB2YWx1ZSwgYm9vbCB2b2lkQ29udGV4dCwKICAgICAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgaWYgKCF2b2lkQ29udGV4dCkgcmV0dXJuIF9tYWtlV3JpdGVBbmRSZXR1cm4odmFsdWUsIGNvbXBsZXhBc3NpZ25tZW50KTsKICAgIGlmIChzZXR0ZXIgPT0gbnVsbCkgewogICAgICBfaGVscGVyLndhcm5VbnJlc29sdmVkTWV0aG9kKGluZGV4U2V0TmFtZSwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLAogICAgICAgICAgaXNTdXBlcjogdHJ1ZSk7CiAgICB9CiAgICB2YXIgd3JpdGUgPSBuZXcgU3VwZXJNZXRob2RJbnZvY2F0aW9uKAogICAgICAgIGluZGV4U2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNhc3RBcmd1bWVudHMoCiAgICAgICAgICAgIF9mb3Jlc3QuYXJndW1lbnRzKDxFeHByZXNzaW9uPltpbmRleCwgdmFsdWVdLCB0b2tlbikpLAogICAgICAgIHNldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LndyaXRlID0gd3JpdGU7CiAgICByZXR1cm4gd3JpdGU7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlUmVhZChDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICBpZiAoZ2V0dGVyID09IG51bGwpIHsKICAgICAgX2hlbHBlci53YXJuVW5yZXNvbHZlZE1ldGhvZChpbmRleEdldE5hbWUsIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICAgIGlzU3VwZXI6IHRydWUpOwogICAgfQogICAgdmFyIHJlYWQgPSBuZXcgU3VwZXJNZXRob2RJbnZvY2F0aW9uKAogICAgICAgIGluZGV4R2V0TmFtZSwKICAgICAgICBfZm9yZXN0LmNhc3RBcmd1bWVudHMoCiAgICAgICAgICAgIF9mb3Jlc3QuYXJndW1lbnRzKDxFeHByZXNzaW9uPltpbmRleEFjY2VzcygpXSwgdG9rZW4pKSwKICAgICAgICBnZXR0ZXIpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIGNvbXBsZXhBc3NpZ25tZW50Py5yZWFkID0gcmVhZDsKICAgIHJldHVybiByZWFkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGlmICghdm9pZENvbnRleHQpIHJldHVybiBfbWFrZVdyaXRlQW5kUmV0dXJuKHZhbHVlLCBjb21wbGV4QXNzaWdubWVudCk7CiAgICBpZiAoc2V0dGVyID09IG51bGwpIHsKICAgICAgX2hlbHBlci53YXJuVW5yZXNvbHZlZE1ldGhvZChpbmRleFNldE5hbWUsIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICAgIGlzU3VwZXI6IHRydWUpOwogICAgfQogICAgdmFyIHdyaXRlID0gbmV3IFN1cGVyTWV0aG9kSW52b2NhdGlvbigKICAgICAgICBpbmRleFNldE5hbWUsCiAgICAgICAgX2ZvcmVzdC5jYXN0QXJndW1lbnRzKAogICAgICAgICAgICBfZm9yZXN0LmFyZ3VtZW50cyg8RXhwcmVzc2lvbj5baW5kZXhBY2Nlc3MoKSwgdmFsdWVdLCB0b2tlbikpLAogICAgICAgIHNldHRlcikKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgY29tcGxleEFzc2lnbm1lbnQ/LndyaXRlID0gd3JpdGU7CiAgICByZXR1cm4gd3JpdGU7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9maW5pc2goCiAgICAgIEV4cHJlc3Npb24gYm9keSwgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgcmV0dXJuIHN1cGVyLl9maW5pc2goCiAgICAgICAgbWFrZUxldChpbmRleFZhcmlhYmxlLCBib2R5KS4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICBjb21wbGV4QXNzaWdubWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gX2hlbHBlci5idWlsZE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgYnVpbGRTaW1wbGVSZWFkKCksIGNhbGxOYW1lLCBhcmd1bWVudHMsIG9mZnNldCwKICAgICAgICBpc0ltcGxpY2l0Q2FsbDogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQoRXhwcmVzc2lvbiByaHMpID0+CiAgICAgIFN5bnRoZXRpY1dyYXBwZXIud3JhcEluZGV4QXNzaWdubWVudChudWxsLCBpbmRleCwgcmhzLCBpc1N1cGVyOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykgewogICAgTmFtZVN5c3RlbSBzeW50aGV0aWNOYW1lcyA9IG5ldyBOYW1lU3lzdGVtKCk7CiAgICBzaW5rLndyaXRlKCIsIGluZGV4OiAiKTsKICAgIHByaW50Tm9kZU9uKGluZGV4LCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCBnZXR0ZXI6ICIpOwogICAgcHJpbnRRdWFsaWZpZWROYW1lT24oZ2V0dGVyLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCBzZXR0ZXI6ICIpOwogICAgcHJpbnRRdWFsaWZpZWROYW1lT24oc2V0dGVyLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCBpbmRleFZhcmlhYmxlOiAiKTsKICAgIHByaW50Tm9kZU9uKGluZGV4VmFyaWFibGUsIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgfQp9CgpjbGFzcyBTdGF0aWNBY2Nlc3NHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIGZpbmFsIE1lbWJlciByZWFkVGFyZ2V0OwoKICBmaW5hbCBNZW1iZXIgd3JpdGVUYXJnZXQ7CgogIFN0YXRpY0FjY2Vzc0dlbmVyYXRvcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sCiAgICAgIHRoaXMucmVhZFRhcmdldCwgdGhpcy53cml0ZVRhcmdldCkKICAgICAgOiBhc3NlcnQocmVhZFRhcmdldCAhPSBudWxsIHx8IHdyaXRlVGFyZ2V0ICE9IG51bGwpLAogICAgICAgIHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBmYWN0b3J5IFN0YXRpY0FjY2Vzc0dlbmVyYXRvci5mcm9tQnVpbGRlcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwKICAgICAgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24sIFRva2VuIHRva2VuLCBEZWNsYXJhdGlvbiBidWlsZGVyU2V0dGVyKSB7CiAgICBpZiAoZGVjbGFyYXRpb24gaXMgQWNjZXNzRXJyb3JCdWlsZGVyKSB7CiAgICAgIEFjY2Vzc0Vycm9yQnVpbGRlciBlcnJvciA9IGRlY2xhcmF0aW9uOwogICAgICBkZWNsYXJhdGlvbiA9IGVycm9yLmJ1aWxkZXI7CiAgICAgIC8vIFdlIHNob3VsZCBvbmx5IHNlZSBhbiBhY2Nlc3MgZXJyb3IgaGVyZSBpZiB3ZSd2ZSBsb29rZWQgdXAgYSBzZXR0ZXIKICAgICAgLy8gd2hlbiBub3QgZXhwbGljaXRseSBsb29raW5nIGZvciBhIHNldHRlci4KICAgICAgYXNzZXJ0KGRlY2xhcmF0aW9uLmlzU2V0dGVyKTsKICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24udGFyZ2V0ID09IG51bGwpIHsKICAgICAgcmV0dXJuIHVuaGFuZGxlZCgKICAgICAgICAgICIke2RlY2xhcmF0aW9uLnJ1bnRpbWVUeXBlfSIsCiAgICAgICAgICAiU3RhdGljQWNjZXNzR2VuZXJhdG9yLmZyb21CdWlsZGVyIiwKICAgICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICAgIGhlbHBlci51cmkpOwogICAgfQogICAgTWVtYmVyIGdldHRlciA9IGRlY2xhcmF0aW9uLnRhcmdldC5oYXNHZXR0ZXIgPyBkZWNsYXJhdGlvbi50YXJnZXQgOiBudWxsOwogICAgTWVtYmVyIHNldHRlciA9IGRlY2xhcmF0aW9uLnRhcmdldC5oYXNTZXR0ZXIgPyBkZWNsYXJhdGlvbi50YXJnZXQgOiBudWxsOwogICAgaWYgKHNldHRlciA9PSBudWxsKSB7CiAgICAgIGlmIChidWlsZGVyU2V0dGVyPy50YXJnZXQ/Lmhhc1NldHRlciA/PyBmYWxzZSkgewogICAgICAgIHNldHRlciA9IGJ1aWxkZXJTZXR0ZXIudGFyZ2V0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IFN0YXRpY0FjY2Vzc0dlbmVyYXRvcihoZWxwZXIsIHRva2VuLCBnZXR0ZXIsIHNldHRlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlN0YXRpY0FjY2Vzc0dlbmVyYXRvciI7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gKHJlYWRUYXJnZXQgPz8gd3JpdGVUYXJnZXQpLm5hbWUubmFtZTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVJlYWQoQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgewogICAgRXhwcmVzc2lvbiByZWFkOwogICAgaWYgKHJlYWRUYXJnZXQgPT0gbnVsbCkgewogICAgICByZWFkID0gX21ha2VJbnZhbGlkUmVhZCgpOwogICAgICBpZiAoY29tcGxleEFzc2lnbm1lbnQgIT0gbnVsbCkgewogICAgICAgIHJlYWQgPSBfaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKHJlYWQpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZWFkID0gX2hlbHBlci5tYWtlU3RhdGljR2V0KHJlYWRUYXJnZXQsIHRva2VuKTsKICAgIH0KICAgIGNvbXBsZXhBc3NpZ25tZW50Py5yZWFkID0gcmVhZDsKICAgIHJldHVybiByZWFkOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVdyaXRlKEV4cHJlc3Npb24gdmFsdWUsIGJvb2wgdm9pZENvbnRleHQsCiAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIEV4cHJlc3Npb24gd3JpdGU7CiAgICBpZiAod3JpdGVUYXJnZXQgPT0gbnVsbCkgewogICAgICB3cml0ZSA9IF9tYWtlSW52YWxpZFdyaXRlKHZhbHVlKTsKICAgICAgaWYgKGNvbXBsZXhBc3NpZ25tZW50ICE9IG51bGwpIHsKICAgICAgICB3cml0ZSA9IF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24od3JpdGUpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB3cml0ZSA9IG5ldyBTdGF0aWNTZXQod3JpdGVUYXJnZXQsIHZhbHVlKTsKICAgIH0KICAgIGNvbXBsZXhBc3NpZ25tZW50Py53cml0ZSA9IHdyaXRlOwogICAgd3JpdGUuZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgIHJldHVybiB3cml0ZTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIGlmIChfaGVscGVyLmNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSAmJgogICAgICAgICFfaGVscGVyLmlzSWRlbnRpY2FsKHJlYWRUYXJnZXQpKSB7CiAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlTm90Q29uc3RhbnRFeHByZXNzaW9uLndpdGhBcmd1bWVudHMoJ01ldGhvZCBpbnZvY2F0aW9uJyksCiAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICByZWFkVGFyZ2V0Py5uYW1lPy5uYW1lPy5sZW5ndGggPz8gMCk7CiAgICB9CiAgICBpZiAocmVhZFRhcmdldCA9PSBudWxsIHx8IGlzRmllbGRPckdldHRlcihyZWFkVGFyZ2V0KSkgewogICAgICByZXR1cm4gX2hlbHBlci5idWlsZE1ldGhvZEludm9jYXRpb24oYnVpbGRTaW1wbGVSZWFkKCksIGNhbGxOYW1lLAogICAgICAgICAgYXJndW1lbnRzLCBvZmZzZXQgKyAocmVhZFRhcmdldD8ubmFtZT8ubmFtZT8ubGVuZ3RoID8/IDApLAogICAgICAgICAgLy8gVGhpcyBpc24ndCBhIGNvbnN0YW50IGV4cHJlc3Npb24sIGJ1dCB3ZSBoYXZlIGNoZWNrZWQgaWYgYQogICAgICAgICAgLy8gY29uc3RhbnQgZXhwcmVzc2lvbiBlcnJvciBzaG91bGQgYmUgZW1pdHRlZCBhbHJlYWR5LgogICAgICAgICAgaXNDb25zdGFudEV4cHJlc3Npb246IHRydWUsCiAgICAgICAgICBpc0ltcGxpY2l0Q2FsbDogdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2hlbHBlci5idWlsZFN0YXRpY0ludm9jYXRpb24ocmVhZFRhcmdldCwgYXJndW1lbnRzLAogICAgICAgICAgY2hhck9mZnNldDogb2Zmc2V0KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgc3RhcnRDb21wbGV4QXNzaWdubWVudChFeHByZXNzaW9uIHJocykgPT4KICAgICAgU3ludGhldGljV3JhcHBlci53cmFwU3RhdGljQXNzaWdubWVudChyaHMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBOYW1lU3lzdGVtIHN5bnRoZXRpY05hbWVzID0gbmV3IE5hbWVTeXN0ZW0oKTsKICAgIHNpbmsud3JpdGUoIiwgcmVhZFRhcmdldDogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbihyZWFkVGFyZ2V0LCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogICAgc2luay53cml0ZSgiLCB3cml0ZVRhcmdldDogIik7CiAgICBwcmludFF1YWxpZmllZE5hbWVPbih3cml0ZVRhcmdldCwgc2luaywgc3ludGhldGljTmFtZXM6IHN5bnRoZXRpY05hbWVzKTsKICB9Cn0KCmNsYXNzIExvYWRMaWJyYXJ5R2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBMb2FkTGlicmFyeUJ1aWxkZXIgYnVpbGRlcjsKCiAgTG9hZExpYnJhcnlHZW5lcmF0b3IoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwgdGhpcy5idWlsZGVyKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkID0+ICdsb2FkTGlicmFyeSc7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiTG9hZExpYnJhcnlHZW5lcmF0b3IiOwogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIGJ1aWxkZXIuaW1wb3J0RGVwZW5kZW5jeS50YXJnZXRMaWJyYXJ5OwogICAgdmFyIHJlYWQgPSBuZXcgTG9hZExpYnJhcnlUZWFyT2ZmSnVkZ21lbnQoCiAgICAgICAgYnVpbGRlci5pbXBvcnREZXBlbmRlbmN5LCBidWlsZGVyLmNyZWF0ZVRlYXJvZmZNZXRob2QoX2hlbHBlci5mb3Jlc3QpKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgICBjb21wbGV4QXNzaWdubWVudD8ucmVhZCA9IHJlYWQ7CiAgICByZXR1cm4gcmVhZDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIGlmIChfZm9yZXN0LmFyZ3VtZW50c1Bvc2l0aW9uYWwoYXJndW1lbnRzKS5sZW5ndGggPiAwIHx8CiAgICAgICAgX2ZvcmVzdC5hcmd1bWVudHNOYW1lZChhcmd1bWVudHMpLmxlbmd0aCA+IDApIHsKICAgICAgX2hlbHBlci5hZGRQcm9ibGVtRXJyb3JJZkNvbnN0KAogICAgICAgICAgbWVzc2FnZUxvYWRMaWJyYXJ5VGFrZXNOb0FyZ3VtZW50cywgb2Zmc2V0LCAnbG9hZExpYnJhcnknLmxlbmd0aCk7CiAgICB9CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVMb2FkTGlicmFyeShvZmZzZXQsIF9mb3Jlc3QsIGFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIGJ1aWxkZXI6ICIpOwogICAgc2luay53cml0ZShidWlsZGVyKTsKICB9Cn0KCmNsYXNzIERlZmVycmVkQWNjZXNzR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBQcmVmaXhVc2VHZW5lcmF0b3IgcHJlZml4R2VuZXJhdG9yOwoKICBmaW5hbCBHZW5lcmF0b3Igc3VmZml4R2VuZXJhdG9yOwoKICBEZWZlcnJlZEFjY2Vzc0dlbmVyYXRvcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sCiAgICAgIHRoaXMucHJlZml4R2VuZXJhdG9yLCB0aGlzLnN1ZmZpeEdlbmVyYXRvcikKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVNpbXBsZVJlYWQoKSB7CiAgICByZXR1cm4gX2hlbHBlci53cmFwSW5EZWZlcnJlZENoZWNrKHN1ZmZpeEdlbmVyYXRvci5fbWFrZVNpbXBsZVJlYWQoKSwKICAgICAgICBwcmVmaXhHZW5lcmF0b3IucHJlZml4LCB0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VSZWFkKENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQgY29tcGxleEFzc2lnbm1lbnQpIHsKICAgIHJldHVybiBfaGVscGVyLndyYXBJbkRlZmVycmVkQ2hlY2soCiAgICAgICAgc3VmZml4R2VuZXJhdG9yLl9tYWtlUmVhZChjb21wbGV4QXNzaWdubWVudCksCiAgICAgICAgcHJlZml4R2VuZXJhdG9yLnByZWZpeCwKICAgICAgICB0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VXcml0ZShFeHByZXNzaW9uIHZhbHVlLCBib29sIHZvaWRDb250ZXh0LAogICAgICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICByZXR1cm4gX2hlbHBlci53cmFwSW5EZWZlcnJlZENoZWNrKAogICAgICAgIHN1ZmZpeEdlbmVyYXRvci5fbWFrZVdyaXRlKHZhbHVlLCB2b2lkQ29udGV4dCwgY29tcGxleEFzc2lnbm1lbnQpLAogICAgICAgIHByZWZpeEdlbmVyYXRvci5wcmVmaXgsCiAgICAgICAgdG9rZW4uY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IHN0YXJ0Q29tcGxleEFzc2lnbm1lbnQoRXhwcmVzc2lvbiByaHMpID0+CiAgICAgIFN5bnRoZXRpY1dyYXBwZXIud3JhcFN0YXRpY0Fzc2lnbm1lbnQocmhzKTsKCiAgQG92ZXJyaWRlCiAgYnVpbGRQcm9wZXJ0eUFjY2VzcygKICAgICAgSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3Igc2VuZCwgaW50IG9wZXJhdG9yT2Zmc2V0LCBib29sIGlzTnVsbEF3YXJlKSB7CiAgICBPYmplY3QgcHJvcGVydHlBY2Nlc3MgPQogICAgICAgIHN1ZmZpeEdlbmVyYXRvci5idWlsZFByb3BlcnR5QWNjZXNzKHNlbmQsIG9wZXJhdG9yT2Zmc2V0LCBpc051bGxBd2FyZSk7CiAgICBpZiAocHJvcGVydHlBY2Nlc3MgaXMgR2VuZXJhdG9yKSB7CiAgICAgIHJldHVybiBuZXcgRGVmZXJyZWRBY2Nlc3NHZW5lcmF0b3IoCiAgICAgICAgICBfaGVscGVyLCB0b2tlbiwgcHJlZml4R2VuZXJhdG9yLCBwcm9wZXJ0eUFjY2Vzcyk7CiAgICB9IGVsc2UgewogICAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwcm9wZXJ0eUFjY2VzczsKICAgICAgcmV0dXJuIF9oZWxwZXIud3JhcEluRGVmZXJyZWRDaGVjaygKICAgICAgICAgIGV4cHJlc3Npb24sIHByZWZpeEdlbmVyYXRvci5wcmVmaXgsIHRva2VuLmNoYXJPZmZzZXQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoCiAgICAgICAgImRlZmVycmVkQWNjZXNzb3IucGxhaW5OYW1lRm9yUmVhZCIsIG9mZnNldEZvclRva2VuKHRva2VuKSwgX3VyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIkRlZmVycmVkQWNjZXNzR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgVHlwZUJ1aWxkZXIgYnVpbGRUeXBlV2l0aFJlc29sdmVkQXJndW1lbnRzKExpc3Q8VW5yZXNvbHZlZFR5cGU+IGFyZ3VtZW50cykgewogICAgU3RyaW5nIG5hbWUgPSAiJHtwcmVmaXhHZW5lcmF0b3IuX3BsYWluTmFtZUZvclJlYWR9LiIKICAgICAgICAiJHtzdWZmaXhHZW5lcmF0b3IuX3BsYWluTmFtZUZvclJlYWR9IjsKICAgIFR5cGVCdWlsZGVyIHR5cGUgPQogICAgICAgIHN1ZmZpeEdlbmVyYXRvci5idWlsZFR5cGVXaXRoUmVzb2x2ZWRBcmd1bWVudHMoYXJndW1lbnRzKTsKICAgIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2U7CiAgICBpZiAodHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyICYmIHR5cGUuZGVjbGFyYXRpb24gaXMgSW52YWxpZFR5cGVCdWlsZGVyKSB7CiAgICAgIEludmFsaWRUeXBlQnVpbGRlciBkZWNsYXJhdGlvbiA9IHR5cGUuZGVjbGFyYXRpb247CiAgICAgIG1lc3NhZ2UgPSBkZWNsYXJhdGlvbi5tZXNzYWdlOwogICAgfSBlbHNlIHsKICAgICAgaW50IGNoYXJPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihwcmVmaXhHZW5lcmF0b3IudG9rZW4pOwogICAgICBtZXNzYWdlID0gdGVtcGxhdGVEZWZlcnJlZFR5cGVBbm5vdGF0aW9uCiAgICAgICAgICAud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICBfaGVscGVyLmJ1aWxkRGFydFR5cGUobmV3IFVucmVzb2x2ZWRUeXBlKHR5cGUsIGNoYXJPZmZzZXQsIF91cmkpKSwKICAgICAgICAgICAgICBwcmVmaXhHZW5lcmF0b3IuX3BsYWluTmFtZUZvclJlYWQpCiAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgIF91cmksIGNoYXJPZmZzZXQsIGxlbmd0aE9mU3BhbihwcmVmaXhHZW5lcmF0b3IudG9rZW4sIHRva2VuKSk7CiAgICB9CiAgICBOYW1lZFR5cGVCdWlsZGVyIHJlc3VsdCA9IG5ldyBOYW1lZFR5cGVCdWlsZGVyKG5hbWUsIG51bGwpOwogICAgX2hlbHBlci5saWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgbWVzc2FnZS5tZXNzYWdlT2JqZWN0LCBtZXNzYWdlLmNoYXJPZmZzZXQsIG1lc3NhZ2UubGVuZ3RoLCBtZXNzYWdlLnVyaSk7CiAgICByZXN1bHQuYmluZChyZXN1bHQuYnVpbGRJbnZhbGlkVHlwZShtZXNzYWdlKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIF9oZWxwZXIud3JhcEluRGVmZXJyZWRDaGVjaygKICAgICAgICBzdWZmaXhHZW5lcmF0b3IuZG9JbnZvY2F0aW9uKG9mZnNldCwgYXJndW1lbnRzKSwKICAgICAgICBwcmVmaXhHZW5lcmF0b3IucHJlZml4LAogICAgICAgIHRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBpbnZva2VDb25zdHJ1Y3RvcigKICAgICAgTGlzdDxVbnJlc29sdmVkVHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIFRva2VuIG5hbWVUb2tlbiwKICAgICAgVG9rZW4gbmFtZUxhc3RUb2tlbiwKICAgICAgQ29uc3RuZXNzIGNvbnN0bmVzcykgewogICAgcmV0dXJuIF9oZWxwZXIud3JhcEluRGVmZXJyZWRDaGVjaygKICAgICAgICBzdWZmaXhHZW5lcmF0b3IuaW52b2tlQ29uc3RydWN0b3IodHlwZUFyZ3VtZW50cywgbmFtZSwgYXJndW1lbnRzLAogICAgICAgICAgICBuYW1lVG9rZW4sIG5hbWVMYXN0VG9rZW4sIGNvbnN0bmVzcyksCiAgICAgICAgcHJlZml4R2VuZXJhdG9yLnByZWZpeCwKICAgICAgICBvZmZzZXRGb3JUb2tlbihzdWZmaXhHZW5lcmF0b3IudG9rZW4pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGUoIiwgcHJlZml4R2VuZXJhdG9yOiAiKTsKICAgIHNpbmsud3JpdGUocHJlZml4R2VuZXJhdG9yKTsKICAgIHNpbmsud3JpdGUoIiwgc3VmZml4R2VuZXJhdG9yOiAiKTsKICAgIHNpbmsud3JpdGUoc3VmZml4R2VuZXJhdG9yKTsKICB9Cn0KCi8vLyBbVHlwZVVzZUdlbmVyYXRvcl0gcmVwcmVzZW50cyB0aGUgc3ViZXhwcmVzc2lvbiB3aG9zZSBwcmVmaXggaXMgdGhlIG5hbWUgb2YKLy8vIGEgY2xhc3MsIGVudW0sIHR5cGUgdmFyaWFibGUsIHR5cGVkZWYsIG1peGluIGRlY2xhcmF0aW9uLCBleHRlbnNpb24KLy8vIGRlY2xhcmF0aW9uIG9yIGJ1aWx0LWluIHR5cGUsIGxpa2UgZHluYW1pYyBhbmQgdm9pZC4KLy8vCi8vLyBGb3IgaW5zdGFuY2U6Ci8vLwovLy8gICBjbGFzcyBBPFQ+IHt9Ci8vLyAgIHR5cGVkZWYgQiA9IEZ1bmN0aW9uKCk7Ci8vLyAgIG1peGluIEM8VD4gb24gQTxUPiB7fQovLy8gICBleHRlbnNpb24gRDxUPiBvbiBBPFQ+IHt9Ci8vLwovLy8gICBtZXRob2Q8VD4oKSB7Ci8vLyAgICAgQzxCPiAgICAgICAgLy8gYSBUeXBlVXNlR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBDYCBhbmQgYEJgLgovLy8gICAgIEIgYjsgICAgICAgIC8vIGEgVHlwZVVzZUdlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgQmAuCi8vLyAgICAgRC5mb28oKTsgICAgLy8gYSBUeXBlVXNlR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBEYC4KLy8vICAgICBuZXcgQTxUPigpOyAvLyBhIFR5cGVVc2VHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYEFgIGFuZCBgVGAuCi8vLyAgICAgVCgpOyAgICAgICAgLy8gYSBUeXBlVXNlR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBUYC4KLy8vICAgfQovLy8KY2xhc3MgVHlwZVVzZUdlbmVyYXRvciBleHRlbmRzIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yIHsKICBmaW5hbCBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uOwoKICBUeXBlVXNlR2VuZXJhdG9yKEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwKICAgICAgdGhpcy5kZWNsYXJhdGlvbiwgU3RyaW5nIHBsYWluTmFtZUZvclJlYWQpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbiwgbnVsbCwgcGxhaW5OYW1lRm9yUmVhZCk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiVHlwZVVzZUdlbmVyYXRvciI7CgogIEBvdmVycmlkZQogIFR5cGVCdWlsZGVyIGJ1aWxkVHlwZVdpdGhSZXNvbHZlZEFyZ3VtZW50cyhMaXN0PFVucmVzb2x2ZWRUeXBlPiBhcmd1bWVudHMpIHsKICAgIGlmIChkZWNsYXJhdGlvbi5pc0V4dGVuc2lvbikgewogICAgICAvLyBFeHRlbnNpb24gZGVjbGFyYXRpb25zIGNhbm5vdCBiZSB1c2VkIGFzIHR5cGVzLgogICAgICByZXR1cm4gc3VwZXIuYnVpbGRUeXBlV2l0aFJlc29sdmVkQXJndW1lbnRzKGFyZ3VtZW50cyk7CiAgICB9CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgaW50IGV4cGVjdGVkID0gZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlc0NvdW50OwogICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSBleHBlY3RlZCkgewogICAgICAgIC8vIEJ1aWxkIHRoZSB0eXBlIGFyZ3VtZW50cyB0byByZXBvcnQgYW55IGVycm9ycyB0aGV5IG1heSBoYXZlLgogICAgICAgIF9oZWxwZXIuYnVpbGREYXJ0VHlwZUFyZ3VtZW50cyhhcmd1bWVudHMpOwogICAgICAgIF9oZWxwZXIud2FyblR5cGVBcmd1bWVudHNNaXNtYXRjaCgKICAgICAgICAgICAgZGVjbGFyYXRpb24ubmFtZSwgZXhwZWN0ZWQsIG9mZnNldEZvclRva2VuKHRva2VuKSk7CiAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBwcm92aWRlZCBhcmd1bWVudHMsIHdoaWNoIHdpbGwgaW4gdHVybiByZXR1cm4gdGhlCiAgICAgICAgLy8gcmF3IHR5cGUgYmVsb3cuCiAgICAgICAgLy8gVE9ETyhzaWdtdW5kKTogY2hhbmdlIHRvIHVzZSBhbiBJbnZhbGlkVHlwZSBhbmQgaW5jbHVkZSB0aGUgcmF3IHR5cGUKICAgICAgICAvLyBhcyBhIHJlY292ZXJ5IG5vZGUgb25jZSB0aGUgSVIgY2FuIHJlcHJlc2VudCBpdCAoSXNzdWUgIzI5ODQwKS4KICAgICAgICBhcmd1bWVudHMgPSBudWxsOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXNDb3VudCAhPSAwKSB7CiAgICAgIF9oZWxwZXIuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlTWlzc2luZ0V4cGxpY2l0VHlwZUFyZ3VtZW50cwogICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXNDb3VudCksCiAgICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbiksCiAgICAgICAgICBsZW5ndGhGb3JUb2tlbih0b2tlbikpOwogICAgfQoKICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50QnVpbGRlcnM7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXJndW1lbnRCdWlsZGVycyA9IG5ldyBMaXN0PFR5cGVCdWlsZGVyPihhcmd1bWVudHMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudEJ1aWxkZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgYXJndW1lbnRCdWlsZGVyc1tpXSA9CiAgICAgICAgICAgIF9oZWxwZXIudmFsaWRhdGVUeXBlVXNlKGFyZ3VtZW50c1tpXSwgZmFsc2UpLmJ1aWxkZXI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgTmFtZWRUeXBlQnVpbGRlcihfcGxhaW5OYW1lRm9yUmVhZCwgYXJndW1lbnRCdWlsZGVycykKICAgICAgLi5iaW5kKGRlY2xhcmF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gaW52b2tlQ29uc3RydWN0b3IoCiAgICAgIExpc3Q8VW5yZXNvbHZlZFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICBUb2tlbiBuYW1lVG9rZW4sCiAgICAgIFRva2VuIG5hbWVMYXN0VG9rZW4sCiAgICAgIENvbnN0bmVzcyBjb25zdG5lc3MpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgIGRlY2xhcmF0aW9uLAogICAgICAgIG5hbWVUb2tlbiwKICAgICAgICBuYW1lTGFzdFRva2VuLAogICAgICAgIGFyZ3VtZW50cywKICAgICAgICBuYW1lLAogICAgICAgIHR5cGVBcmd1bWVudHMsCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4obmFtZVRva2VuID8/IHRva2VuKSwKICAgICAgICBjb25zdG5lc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykgewogICAgc2luay53cml0ZSgiLCBkZWNsYXJhdGlvbjogIik7CiAgICBzaW5rLndyaXRlKGRlY2xhcmF0aW9uKTsKICAgIHNpbmsud3JpdGUoIiwgcGxhaW5OYW1lRm9yUmVhZDogIik7CiAgICBzaW5rLndyaXRlKF9wbGFpbk5hbWVGb3JSZWFkKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZ2V0IGV4cHJlc3Npb24gewogICAgaWYgKHN1cGVyLmV4cHJlc3Npb24gPT0gbnVsbCkgewogICAgICBpbnQgb2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgSW52YWxpZFR5cGVCdWlsZGVyKSB7CiAgICAgICAgSW52YWxpZFR5cGVCdWlsZGVyIGRlY2xhcmF0aW9uID0gdGhpcy5kZWNsYXJhdGlvbjsKICAgICAgICBfaGVscGVyLmFkZFByb2JsZW1FcnJvcklmQ29uc3QoCiAgICAgICAgICAgIGRlY2xhcmF0aW9uLm1lc3NhZ2UubWVzc2FnZU9iamVjdCwgb2Zmc2V0LCB0b2tlbi5sZW5ndGgpOwogICAgICAgIHN1cGVyLmV4cHJlc3Npb24gPSBfaGVscGVyLndyYXBTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgICAgICBfZm9yZXN0LnRocm93RXhwcmVzc2lvbigKICAgICAgICAgICAgICAgIG51bGwsIF9mb3Jlc3QubGl0ZXJhbFN0cmluZyhkZWNsYXJhdGlvbi5tZXNzYWdlLm1lc3NhZ2UsIHRva2VuKSkKICAgICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQsCiAgICAgICAgICAgIG9mZnNldCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3VwZXIuZXhwcmVzc2lvbiA9IF9mb3Jlc3QubGl0ZXJhbFR5cGUoCiAgICAgICAgICAgIF9oZWxwZXIuYnVpbGREYXJ0VHlwZSgKICAgICAgICAgICAgICAgIG5ldyBVbnJlc29sdmVkVHlwZSgKICAgICAgICAgICAgICAgICAgICBidWlsZFR5cGVXaXRoUmVzb2x2ZWRBcmd1bWVudHMobnVsbCksIG9mZnNldCwgX3VyaSksCiAgICAgICAgICAgICAgICBub25JbnN0YW5jZUFjY2Vzc0lzRXJyb3I6IHRydWUpLAogICAgICAgICAgICB0b2tlbik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzdXBlci5leHByZXNzaW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZUludmFsaWRXcml0ZShFeHByZXNzaW9uIHZhbHVlKSB7CiAgICByZXR1cm4gX2hlbHBlci53cmFwU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICBfaGVscGVyLnRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgICAgICAgIF9mb3Jlc3QubGl0ZXJhbE51bGwodG9rZW4pLAogICAgICAgICAgICBfcGxhaW5OYW1lRm9yUmVhZCwKICAgICAgICAgICAgX2ZvcmVzdC5hcmd1bWVudHMoPEV4cHJlc3Npb24+W3ZhbHVlXSwgbnVsbCkKICAgICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSB2YWx1ZS5maWxlT2Zmc2V0LAogICAgICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbiksCiAgICAgICAgICAgIGlzU2V0dGVyOiB0cnVlKSwKICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgYnVpbGRQcm9wZXJ0eUFjY2VzcygKICAgICAgSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3Igc2VuZCwgaW50IG9wZXJhdG9yT2Zmc2V0LCBib29sIGlzTnVsbEF3YXJlKSB7CiAgICAvLyBgU29tZVR5cGU/LnRvU3RyaW5nYCBpcyB0aGUgc2FtZSBhcyBgU29tZVR5cGUudG9TdHJpbmdgLCBub3QKICAgIC8vIGAoU29tZVR5cGUpLnRvU3RyaW5nYC4KICAgIGlzTnVsbEF3YXJlID0gZmFsc2U7CgogICAgTmFtZSBuYW1lID0gc2VuZC5uYW1lOwogICAgQXJndW1lbnRzIGFyZ3VtZW50cyA9IHNlbmQuYXJndW1lbnRzOwoKICAgIGlmIChkZWNsYXJhdGlvbiBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgQ2xhc3NCdWlsZGVyIGRlY2xhcmF0aW9uID0gdGhpcy5kZWNsYXJhdGlvbjsKICAgICAgRGVjbGFyYXRpb24gbWVtYmVyID0gZGVjbGFyYXRpb24uZmluZFN0YXRpY0J1aWxkZXIoCiAgICAgICAgICBuYW1lLm5hbWUsIG9mZnNldEZvclRva2VuKHNlbmQudG9rZW4pLCBfdXJpLCBfaGVscGVyLmxpYnJhcnkpOwoKICAgICAgR2VuZXJhdG9yIGdlbmVyYXRvcjsKICAgICAgaWYgKG1lbWJlciA9PSBudWxsKSB7CiAgICAgICAgLy8gSWYgd2UgZmluZCBhIHNldHRlciwgW21lbWJlcl0gaXMgYW4gW0FjY2Vzc0Vycm9yQnVpbGRlcl0sIG5vdCBudWxsLgogICAgICAgIGlmIChzZW5kIGlzIEluY29tcGxldGVQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcikgewogICAgICAgICAgZ2VuZXJhdG9yID0gbmV3IFVucmVzb2x2ZWROYW1lR2VuZXJhdG9yKF9oZWxwZXIsIHNlbmQudG9rZW4sIG5hbWUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gX2hlbHBlci5idWlsZENvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgICAgICAgICBkZWNsYXJhdGlvbiwKICAgICAgICAgICAgICBzZW5kLnRva2VuLAogICAgICAgICAgICAgIHNlbmQudG9rZW4sCiAgICAgICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgICAgIG5hbWUubmFtZSwKICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgIHRva2VuLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgQ29uc3RuZXNzLmltcGxpY2l0KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobWVtYmVyIGlzIEFtYmlndW91c0J1aWxkZXIpIHsKICAgICAgICByZXR1cm4gX2hlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgICAgIG1lbWJlci5tZXNzYWdlLCBtZW1iZXIuY2hhck9mZnNldCwgbmFtZS5uYW1lLmxlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgRGVjbGFyYXRpb24gc2V0dGVyOwogICAgICAgIGlmIChtZW1iZXIuaXNTZXR0ZXIpIHsKICAgICAgICAgIHNldHRlciA9IG1lbWJlcjsKICAgICAgICB9IGVsc2UgaWYgKG1lbWJlci5pc0dldHRlcikgewogICAgICAgICAgc2V0dGVyID0gZGVjbGFyYXRpb24uZmluZFN0YXRpY0J1aWxkZXIoCiAgICAgICAgICAgICAgbmFtZS5uYW1lLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIF91cmksIF9oZWxwZXIubGlicmFyeSwKICAgICAgICAgICAgICBpc1NldHRlcjogdHJ1ZSk7CiAgICAgICAgfSBlbHNlIGlmIChtZW1iZXIuaXNGaWVsZCkgewogICAgICAgICAgaWYgKG1lbWJlci5pc0ZpbmFsIHx8IG1lbWJlci5pc0NvbnN0KSB7CiAgICAgICAgICAgIHNldHRlciA9IGRlY2xhcmF0aW9uLmZpbmRTdGF0aWNCdWlsZGVyKAogICAgICAgICAgICAgICAgbmFtZS5uYW1lLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIF91cmksIF9oZWxwZXIubGlicmFyeSwKICAgICAgICAgICAgICAgIGlzU2V0dGVyOiB0cnVlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNldHRlciA9IG1lbWJlcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZ2VuZXJhdG9yID0gbmV3IFN0YXRpY0FjY2Vzc0dlbmVyYXRvci5mcm9tQnVpbGRlcigKICAgICAgICAgICAgX2hlbHBlciwgbWVtYmVyLCBzZW5kLnRva2VuLCBzZXR0ZXIpOwogICAgICB9CgogICAgICByZXR1cm4gYXJndW1lbnRzID09IG51bGwKICAgICAgICAgID8gZ2VuZXJhdG9yCiAgICAgICAgICA6IGdlbmVyYXRvci5kb0ludm9jYXRpb24ob2Zmc2V0Rm9yVG9rZW4oc2VuZC50b2tlbiksIGFyZ3VtZW50cyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gc3VwZXIuYnVpbGRQcm9wZXJ0eUFjY2VzcyhzZW5kLCBvcGVyYXRvck9mZnNldCwgaXNOdWxsQXdhcmUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRDb25zdHJ1Y3Rvckludm9jYXRpb24oZGVjbGFyYXRpb24sIHRva2VuLCB0b2tlbiwKICAgICAgICBhcmd1bWVudHMsICIiLCBudWxsLCB0b2tlbi5jaGFyT2Zmc2V0LCBDb25zdG5lc3MuaW1wbGljaXQpOwogIH0KfQoKLy8vIFtSZWFkT25seUFjY2Vzc0dlbmVyYXRvcl0gcmVwcmVzZW50cyB0aGUgc3ViZXhwcmVzc2lvbiB3aG9zZSBwcmVmaXggaXMgdGhlCi8vLyBuYW1lIG9mIGZpbmFsIGxvY2FsIHZhcmlhYmxlLCBmaW5hbCBwYXJhbWV0ZXIsIG9yIGNhdGNoIGNsYXVzZSB2YXJpYWJsZSBvcgovLy8gYHRoaXNgIGluIGFuIGluc3RhbmNlIG1ldGhvZCBpbiBhbiBleHRlbnNpb24gZGVjbGFyYXRpb24uCi8vLwovLy8gRm9yIGluc3RhbmNlOgovLy8KLy8vICAgbWV0aG9kKGZpbmFsIGEpIHsKLy8vICAgICBmaW5hbCBiID0gbnVsbDsKLy8vICAgICBhOyAgICAgICAgIC8vIGEgUmVhZE9ubHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGFgLgovLy8gICAgIGFbXTsgICAgICAgLy8gYSBSZWFkT25seUFjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgYWAuCi8vLyAgICAgYigpOyAgICAgICAvLyBhIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGBiYC4KLy8vICAgICBiLmMgPSBhLmQ7IC8vIGEgUmVhZE9ubHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYGFgIGFuZCBgYmAuCi8vLwovLy8gICAgIHRyeSB7Ci8vLyAgICAgfSBjYXRjaCAoYSkgewovLy8gICAgICAgYTsgICAgICAgLy8gYSBSZWFkT25seUFjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgYWAuCi8vLyAgICAgfQovLy8gICB9Ci8vLwovLy8gICBleHRlbnNpb24gb24gRm9vIHsKLy8vICAgICBtZXRob2QoKSB7Ci8vLyAgICAgICB0aGlzOyAgICAgICAgIC8vIGEgUmVhZE9ubHlBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYHRoaXNgLgovLy8gICAgICAgdGhpcy5hOyAgICAgICAvLyBhIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGB0aGlzYC4KLy8vICAgICAgIHRoaXMuYigpOyAgICAgLy8gYSBSZWFkT25seUFjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgdGhpc2AuCi8vLyAgICAgfQovLy8gICB9Ci8vLwpjbGFzcyBSZWFkT25seUFjY2Vzc0dlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIF9wbGFpbk5hbWVGb3JSZWFkOwoKICBFeHByZXNzaW9uIGV4cHJlc3Npb247CgogIFZhcmlhYmxlRGVjbGFyYXRpb24gdmFsdWU7CgogIFJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yKEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwKICAgICAgdGhpcy5leHByZXNzaW9uLCB0aGlzLl9wbGFpbk5hbWVGb3JSZWFkKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlJlYWRPbmx5QWNjZXNzR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZVNpbXBsZVJlYWQoKSA9PiBleHByZXNzaW9uOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlUmVhZChDb21wbGV4QXNzaWdubWVudEp1ZGdtZW50IGNvbXBsZXhBc3NpZ25tZW50KSB7CiAgICB2YWx1ZSA/Pz0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoZXhwcmVzc2lvbik7CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlR2V0KHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX2ZpbmlzaCgKICAgICAgICAgIEV4cHJlc3Npb24gYm9keSwgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBjb21wbGV4QXNzaWdubWVudCkgPT4KICAgICAgc3VwZXIuX2ZpbmlzaChtYWtlTGV0KHZhbHVlLCBib2R5KSwgY29tcGxleEFzc2lnbm1lbnQpOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gX2hlbHBlci5idWlsZE1ldGhvZEludm9jYXRpb24oYnVpbGRTaW1wbGVSZWFkKCksIGNhbGxOYW1lLCBhcmd1bWVudHMsCiAgICAgICAgYWRqdXN0Rm9ySW1wbGljaXRDYWxsKF9wbGFpbk5hbWVGb3JSZWFkLCBvZmZzZXQpLAogICAgICAgIGlzSW1wbGljaXRDYWxsOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIE5hbWVTeXN0ZW0gc3ludGhldGljTmFtZXMgPSBuZXcgTmFtZVN5c3RlbSgpOwogICAgc2luay53cml0ZSgiLCBleHByZXNzaW9uOiAiKTsKICAgIHByaW50Tm9kZU9uKGV4cHJlc3Npb24sIHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcyk7CiAgICBzaW5rLndyaXRlKCIsIHBsYWluTmFtZUZvclJlYWQ6ICIpOwogICAgc2luay53cml0ZShfcGxhaW5OYW1lRm9yUmVhZCk7CiAgICBzaW5rLndyaXRlKCIsIHZhbHVlOiAiKTsKICAgIHByaW50Tm9kZU9uKHZhbHVlLCBzaW5rLCBzeW50aGV0aWNOYW1lczogc3ludGhldGljTmFtZXMpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgRXJyb25lb3VzRXhwcmVzc2lvbkdlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgRXJyb25lb3VzRXhwcmVzc2lvbkdlbmVyYXRvcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4pCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIC8vLyBQYXNzIFthcmd1bWVudHNdIHRoYXQgbXVzdCBiZSBldmFsdWF0ZWQgYmVmb3JlIHRocm93aW5nIGFuIGVycm9yLiAgQXQKICAvLy8gbW9zdCBvbmUgb2YgW2lzR2V0dGVyXSBhbmQgW2lzU2V0dGVyXSBzaG91bGQgYmUgdHJ1ZSBhbmQgdGhleSdyZSBwYXNzZWQKICAvLy8gdG8gW0V4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIudGhyb3dOb1N1Y2hNZXRob2RFcnJvcl0gaWYgaXQgaXMgdXNlZC4KICBFeHByZXNzaW9uIGJ1aWxkRXJyb3IoQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAge2Jvb2wgaXNHZXR0ZXI6IGZhbHNlLCBib29sIGlzU2V0dGVyOiBmYWxzZSwgaW50IG9mZnNldH0pOwoKICBOYW1lIGdldCBuYW1lID0+IHVuc3VwcG9ydGVkKCJuYW1lIiwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBfdXJpKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiBuYW1lLm5hbWU7CgogIHdpdGhSZWNlaXZlcihPYmplY3QgcmVjZWl2ZXIsIGludCBvcGVyYXRvck9mZnNldCwge2Jvb2wgaXNOdWxsQXdhcmV9KSA9PiB0aGlzOwoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplciBidWlsZEZpZWxkSW5pdGlhbGl6ZXIoTWFwPFN0cmluZywgaW50PiBpbml0aWFsaXplZEZpZWxkcykgewogICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRJbnZhbGlkSW5pdGlhbGl6ZXIoX2hlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICBidWlsZEVycm9yKF9mb3Jlc3QuYXJndW1lbnRzRW1wdHkodG9rZW4pLCBpc1NldHRlcjogdHJ1ZSkpKTsKICB9CgogIEBvdmVycmlkZQogIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gYnVpbGRFcnJvcihhcmd1bWVudHMsIG9mZnNldDogb2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIGJ1aWxkUHJvcGVydHlBY2Nlc3MoCiAgICAgIEluY29tcGxldGVTZW5kR2VuZXJhdG9yIHNlbmQsIGludCBvcGVyYXRvck9mZnNldCwgYm9vbCBpc051bGxBd2FyZSkgewogICAgcmV0dXJuIHNlbmQud2l0aFJlY2VpdmVyKGJ1aWxkU2ltcGxlUmVhZCgpLCBvcGVyYXRvck9mZnNldCwKICAgICAgICBpc051bGxBd2FyZTogaXNOdWxsQXdhcmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZEFzc2lnbm1lbnQoRXhwcmVzc2lvbiB2YWx1ZSwge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIGJ1aWxkRXJyb3IoX2ZvcmVzdC5hcmd1bWVudHMoPEV4cHJlc3Npb24+W3ZhbHVlXSwgdG9rZW4pLAogICAgICAgIGlzU2V0dGVyOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwgRXhwcmVzc2lvbiB2YWx1ZSwKICAgICAge2ludCBvZmZzZXQ6IC0xLAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldCwKICAgICAgYm9vbCBpc1ByZUluY0RlYzogZmFsc2UsCiAgICAgIGJvb2wgaXNQb3N0SW5jRGVjOiBmYWxzZX0pIHsKICAgIHJldHVybiBidWlsZEVycm9yKF9mb3Jlc3QuYXJndW1lbnRzKDxFeHByZXNzaW9uPlt2YWx1ZV0sIHRva2VuKSwKICAgICAgICBpc0dldHRlcjogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkUHJlZml4SW5jcmVtZW50KE5hbWUgYmluYXJ5T3BlcmF0b3IsCiAgICAgIHtpbnQgb2Zmc2V0OiAtMSwgYm9vbCB2b2lkQ29udGV4dDogZmFsc2UsIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXR9KSB7CiAgICByZXR1cm4gYnVpbGRFcnJvcigKICAgICAgICBfZm9yZXN0LmFyZ3VtZW50cygKICAgICAgICAgICAgPEV4cHJlc3Npb24+W19mb3Jlc3QubGl0ZXJhbEludCgxLCBudWxsKS4uZmlsZU9mZnNldCA9IG9mZnNldF0sCiAgICAgICAgICAgIHRva2VuKSwKICAgICAgICBpc0dldHRlcjogdHJ1ZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZFBvc3RmaXhJbmNyZW1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwKICAgICAge2ludCBvZmZzZXQ6IC0xLCBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldH0pIHsKICAgIHJldHVybiBidWlsZEVycm9yKAogICAgICAgIF9mb3Jlc3QuYXJndW1lbnRzKAogICAgICAgICAgICA8RXhwcmVzc2lvbj5bX2ZvcmVzdC5saXRlcmFsSW50KDEsIG51bGwpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0XSwKICAgICAgICAgICAgdG9rZW4pLAogICAgICAgIGlzR2V0dGVyOiB0cnVlKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkTnVsbEF3YXJlQXNzaWdubWVudCgKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSwgRGFydFR5cGUgdHlwZSwgaW50IG9mZnNldCwKICAgICAge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIGJ1aWxkRXJyb3IoX2ZvcmVzdC5hcmd1bWVudHMoPEV4cHJlc3Npb24+W3ZhbHVlXSwgdG9rZW4pLAogICAgICAgIGlzU2V0dGVyOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRTaW1wbGVSZWFkKCkgewogICAgcmV0dXJuIGJ1aWxkRXJyb3IoX2ZvcmVzdC5hcmd1bWVudHNFbXB0eSh0b2tlbiksIGlzR2V0dGVyOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gX21ha2VJbnZhbGlkUmVhZCgpIHsKICAgIHJldHVybiBidWlsZEVycm9yKF9mb3Jlc3QuYXJndW1lbnRzRW1wdHkodG9rZW4pLCBpc0dldHRlcjogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlSW52YWxpZFdyaXRlKEV4cHJlc3Npb24gdmFsdWUpIHsKICAgIHJldHVybiBidWlsZEVycm9yKF9mb3Jlc3QuYXJndW1lbnRzKDxFeHByZXNzaW9uPlt2YWx1ZV0sIHRva2VuKSwKICAgICAgICBpc1NldHRlcjogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGludm9rZUNvbnN0cnVjdG9yKAogICAgICBMaXN0PFVucmVzb2x2ZWRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAgVG9rZW4gbmFtZVRva2VuLAogICAgICBUb2tlbiBuYW1lTGFzdFRva2VuLAogICAgICBDb25zdG5lc3MgY29uc3RuZXNzKSB7CiAgICBpZiAodHlwZUFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGFzc2VydChfZm9yZXN0LmFyZ3VtZW50c1R5cGVBcmd1bWVudHMoYXJndW1lbnRzKS5pc0VtcHR5KTsKICAgICAgX2ZvcmVzdC5hcmd1bWVudHNTZXRUeXBlQXJndW1lbnRzKAogICAgICAgICAgYXJndW1lbnRzLCBfaGVscGVyLmJ1aWxkRGFydFR5cGVBcmd1bWVudHModHlwZUFyZ3VtZW50cykpOwogICAgfQogICAgcmV0dXJuIF9oZWxwZXIud3JhcEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgX2hlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihidWlsZEVycm9yKGFyZ3VtZW50cykpLAogICAgICAgIG51bGwsCiAgICAgICAgYXJndW1lbnRzLAogICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSk7CiAgfQp9CgpjbGFzcyBVbnJlc29sdmVkTmFtZUdlbmVyYXRvciBleHRlbmRzIEVycm9uZW91c0V4cHJlc3Npb25HZW5lcmF0b3IgewogIEBvdmVycmlkZQogIGZpbmFsIE5hbWUgbmFtZTsKCiAgZmFjdG9yeSBVbnJlc29sdmVkTmFtZUdlbmVyYXRvcigKICAgICAgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLCBOYW1lIG5hbWUpIHsKICAgIGlmIChuYW1lLm5hbWUuaXNFbXB0eSkgewogICAgICB1bmhhbmRsZWQoImVtcHR5IiwgIm5hbWUiLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIGhlbHBlci51cmkpOwogICAgfQogICAgcmV0dXJuIG5ldyBVbnJlc29sdmVkTmFtZUdlbmVyYXRvci5pbnRlcm5hbChoZWxwZXIsIHRva2VuLCBuYW1lKTsKICB9CgogIFVucmVzb2x2ZWROYW1lR2VuZXJhdG9yLmludGVybmFsKAogICAgICBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sIHRoaXMubmFtZSkKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJVbnJlc29sdmVkTmFtZUdlbmVyYXRvciI7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBjaGFyT2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gX2hlbHBlci53cmFwVW5yZXNvbHZlZFRhcmdldEludm9jYXRpb24oCiAgICAgICAgX2hlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICAgICAgYnVpbGRFcnJvcihhcmd1bWVudHMsIG9mZnNldDogY2hhck9mZnNldCkpLAogICAgICAgIGFyZ3VtZW50cywKICAgICAgICBhcmd1bWVudHMuZmlsZU9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkRXJyb3IoQXJndW1lbnRzIGFyZ3VtZW50cywKICAgICAge2Jvb2wgaXNHZXR0ZXI6IGZhbHNlLCBib29sIGlzU2V0dGVyOiBmYWxzZSwgaW50IG9mZnNldH0pIHsKICAgIG9mZnNldCA/Pz0gb2Zmc2V0Rm9yVG9rZW4odGhpcy50b2tlbik7CiAgICByZXR1cm4gX2hlbHBlci53cmFwU3ludGhldGljRXhwcmVzc2lvbigKICAgICAgICBfaGVscGVyLnRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgICAgICAgIF9mb3Jlc3QubGl0ZXJhbE51bGwobnVsbCkuLmZpbGVPZmZzZXQgPSBvZmZzZXQsCiAgICAgICAgICAgIF9wbGFpbk5hbWVGb3JSZWFkLAogICAgICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgICAgIG9mZnNldCwKICAgICAgICAgICAgaXNHZXR0ZXI6IGlzR2V0dGVyLAogICAgICAgICAgICBpc1NldHRlcjogaXNTZXR0ZXIpLAogICAgICAgIG9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICAvKiBFeHByZXNzaW9uIHwgR2VuZXJhdG9yICovIE9iamVjdCBxdWFsaWZpZWRMb29rdXAoVG9rZW4gbmFtZSkgewogICAgcmV0dXJuIG5ldyBVbmV4cGVjdGVkUXVhbGlmaWVkVXNlR2VuZXJhdG9yKF9oZWxwZXIsIG5hbWUsIHRoaXMsIHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZEFzc2lnbm1lbnQoRXhwcmVzc2lvbiB2YWx1ZSwge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIF9idWlsZFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnQoZmFsc2UsIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwgRXhwcmVzc2lvbiB2YWx1ZSwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldCwKICAgICAgYm9vbCBpc1ByZUluY0RlYzogZmFsc2UsCiAgICAgIGJvb2wgaXNQb3N0SW5jRGVjOiBmYWxzZX0pIHsKICAgIHJldHVybiBfYnVpbGRVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50KHRydWUsIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRTaW1wbGVSZWFkKCkgewogICAgcmV0dXJuIGJ1aWxkRXJyb3IoX2ZvcmVzdC5hcmd1bWVudHNFbXB0eSh0b2tlbiksIGlzR2V0dGVyOiB0cnVlKQogICAgICAuLmZpbGVPZmZzZXQgPSB0b2tlbi5jaGFyT2Zmc2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykgewogICAgc2luay53cml0ZSgiLCBuYW1lOiAiKTsKICAgIHNpbmsud3JpdGUobmFtZS5uYW1lKTsKICB9CgogIEV4cHJlc3Npb24gX2J1aWxkVW5yZXNvbHZlZFZhcmlhYmxlQXNzaWdubWVudCgKICAgICAgYm9vbCBpc0NvbXBvdW5kLCBFeHByZXNzaW9uIHZhbHVlKSB7CiAgICByZXR1cm4gX2hlbHBlci53cmFwVW5yZXNvbHZlZFZhcmlhYmxlQXNzaWdubWVudCgKICAgICAgICBfaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKGJ1aWxkRXJyb3IoCiAgICAgICAgICAgIF9mb3Jlc3QuYXJndW1lbnRzKDxFeHByZXNzaW9uPlt2YWx1ZV0sIHRva2VuKSwKICAgICAgICAgICAgaXNTZXR0ZXI6IHRydWUpKSwKICAgICAgICBpc0NvbXBvdW5kLAogICAgICAgIHZhbHVlLAogICAgICAgIHRva2VuLmNoYXJPZmZzZXQpOwogIH0KfQoKY2xhc3MgVW5saW5rZWRHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIGZpbmFsIFVubGlua2VkRGVjbGFyYXRpb24gZGVjbGFyYXRpb247CgogIGZpbmFsIEV4cHJlc3Npb24gcmVjZWl2ZXI7CgogIGZpbmFsIE5hbWUgbmFtZTsKCiAgVW5saW5rZWRHZW5lcmF0b3IoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwgdGhpcy5kZWNsYXJhdGlvbikKICAgICAgOiBuYW1lID0gbmV3IE5hbWUoZGVjbGFyYXRpb24ubmFtZSwgaGVscGVyLmxpYnJhcnkudGFyZ2V0KSwKICAgICAgICByZWNlaXZlciA9IG5ldyBJbnZhbGlkRXhwcmVzc2lvbihkZWNsYXJhdGlvbi5uYW1lKQogICAgICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLAogICAgICAgIHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkID0+IGRlY2xhcmF0aW9uLm5hbWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiVW5saW5rZWRHZW5lcmF0b3IiOwoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIG5hbWU6ICIpOwogICAgc2luay53cml0ZShkZWNsYXJhdGlvbi5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRBc3NpZ25tZW50KEV4cHJlc3Npb24gdmFsdWUsIHtib29sIHZvaWRDb250ZXh0OiBmYWxzZX0pIHsKICAgIHJldHVybiBuZXcgUHJvcGVydHlTZXQocmVjZWl2ZXIsIG5hbWUsIHZhbHVlKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkU2ltcGxlUmVhZCgpIHsKICAgIHJldHVybiBuZXcgUHJvcGVydHlHZXQocmVjZWl2ZXIsIG5hbWUpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IG9mZnNldCwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJkb0ludm9jYXRpb24iLCBvZmZzZXQsIF91cmkpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgQ29udGV4dEF3YXJlR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBHZW5lcmF0b3IgZ2VuZXJhdG9yOwoKICBDb250ZXh0QXdhcmVHZW5lcmF0b3IoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwgdGhpcy5nZW5lcmF0b3IpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJwbGFpbk5hbWVGb3JSZWFkIiwgdG9rZW4uY2hhck9mZnNldCwgX2hlbHBlci51cmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBkb0ludm9jYXRpb24oaW50IGNoYXJPZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiB1bmhhbmRsZWQoIiR7cnVudGltZVR5cGV9IiwgImRvSW52b2NhdGlvbiIsIGNoYXJPZmZzZXQsIF91cmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZEFzc2lnbm1lbnQoRXhwcmVzc2lvbiB2YWx1ZSwge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIF9tYWtlSW52YWxpZFdyaXRlKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGROdWxsQXdhcmVBc3NpZ25tZW50KAogICAgICBFeHByZXNzaW9uIHZhbHVlLCBEYXJ0VHlwZSB0eXBlLCBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCB2b2lkQ29udGV4dDogZmFsc2V9KSB7CiAgICByZXR1cm4gX21ha2VJbnZhbGlkV3JpdGUodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZENvbXBvdW5kQXNzaWdubWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLCBFeHByZXNzaW9uIHZhbHVlLAogICAgICB7aW50IG9mZnNldDogLTEsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0LAogICAgICBib29sIGlzUHJlSW5jRGVjOiBmYWxzZSwKICAgICAgYm9vbCBpc1Bvc3RJbmNEZWM6IGZhbHNlfSkgewogICAgcmV0dXJuIF9tYWtlSW52YWxpZFdyaXRlKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRQcmVmaXhJbmNyZW1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwKICAgICAge2ludCBvZmZzZXQ6IC0xLCBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldH0pIHsKICAgIHJldHVybiBfbWFrZUludmFsaWRXcml0ZShudWxsKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRQb3N0Zml4SW5jcmVtZW50KE5hbWUgYmluYXJ5T3BlcmF0b3IsCiAgICAgIHtpbnQgb2Zmc2V0OiAtMSwgYm9vbCB2b2lkQ29udGV4dDogZmFsc2UsIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXR9KSB7CiAgICByZXR1cm4gX21ha2VJbnZhbGlkV3JpdGUobnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBfbWFrZUludmFsaWRSZWFkKCkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJtYWtlSW52YWxpZFJlYWQiLCB0b2tlbi5jaGFyT2Zmc2V0LCBfaGVscGVyLnVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlSW52YWxpZFdyaXRlKEV4cHJlc3Npb24gdmFsdWUpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkUHJvYmxlbShtZXNzYWdlSWxsZWdhbEFzc2lnbm1lbnRUb05vbkFzc2lnbmFibGUsCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBsZW5ndGhGb3JUb2tlbih0b2tlbikpOwogIH0KfQoKY2xhc3MgRGVsYXllZEFzc2lnbm1lbnQgZXh0ZW5kcyBDb250ZXh0QXdhcmVHZW5lcmF0b3IgewogIGZpbmFsIEV4cHJlc3Npb24gdmFsdWU7CgogIFN0cmluZyBhc3NpZ25tZW50T3BlcmF0b3I7CgogIERlbGF5ZWRBc3NpZ25tZW50KEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwKICAgICAgR2VuZXJhdG9yIGdlbmVyYXRvciwgdGhpcy52YWx1ZSwgdGhpcy5hc3NpZ25tZW50T3BlcmF0b3IpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbiwgZ2VuZXJhdG9yKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJEZWxheWVkQXNzaWdubWVudCI7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRTaW1wbGVSZWFkKCkgewogICAgcmV0dXJuIGhhbmRsZUFzc2lnbm1lbnQoZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZEZvckVmZmVjdCgpIHsKICAgIHJldHVybiBoYW5kbGVBc3NpZ25tZW50KHRydWUpOwogIH0KCiAgRXhwcmVzc2lvbiBoYW5kbGVBc3NpZ25tZW50KGJvb2wgdm9pZENvbnRleHQpIHsKICAgIGlmIChfaGVscGVyLmNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSkgewogICAgICByZXR1cm4gX2hlbHBlci5idWlsZFByb2JsZW0oCiAgICAgICAgICBtZXNzYWdlTm90QUNvbnN0YW50RXhwcmVzc2lvbiwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCB0b2tlbi5sZW5ndGgpOwogICAgfQogICAgaWYgKGlkZW50aWNhbCgiPSIsIGFzc2lnbm1lbnRPcGVyYXRvcikpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRvci5idWlsZEFzc2lnbm1lbnQodmFsdWUsIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgiKz0iLCBhc3NpZ25tZW50T3BlcmF0b3IpKSB7CiAgICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQocGx1c05hbWUsIHZhbHVlLAogICAgICAgICAgb2Zmc2V0OiBvZmZzZXRGb3JUb2tlbih0b2tlbiksIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgiLT0iLCBhc3NpZ25tZW50T3BlcmF0b3IpKSB7CiAgICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQobWludXNOYW1lLCB2YWx1ZSwKICAgICAgICAgIG9mZnNldDogb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCB2b2lkQ29udGV4dDogdm9pZENvbnRleHQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoIio9IiwgYXNzaWdubWVudE9wZXJhdG9yKSkgewogICAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KG11bHRpcGx5TmFtZSwgdmFsdWUsCiAgICAgICAgICBvZmZzZXQ6IG9mZnNldEZvclRva2VuKHRva2VuKSwgdm9pZENvbnRleHQ6IHZvaWRDb250ZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCIlPSIsIGFzc2lnbm1lbnRPcGVyYXRvcikpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRvci5idWlsZENvbXBvdW5kQXNzaWdubWVudChwZXJjZW50TmFtZSwgdmFsdWUsCiAgICAgICAgICBvZmZzZXQ6IG9mZnNldEZvclRva2VuKHRva2VuKSwgdm9pZENvbnRleHQ6IHZvaWRDb250ZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCImPSIsIGFzc2lnbm1lbnRPcGVyYXRvcikpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRvci5idWlsZENvbXBvdW5kQXNzaWdubWVudChhbXBlcnNhbmROYW1lLCB2YWx1ZSwKICAgICAgICAgIG9mZnNldDogb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCB2b2lkQ29udGV4dDogdm9pZENvbnRleHQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoIi89IiwgYXNzaWdubWVudE9wZXJhdG9yKSkgewogICAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KGRpdmlzaW9uTmFtZSwgdmFsdWUsCiAgICAgICAgICBvZmZzZXQ6IG9mZnNldEZvclRva2VuKHRva2VuKSwgdm9pZENvbnRleHQ6IHZvaWRDb250ZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCI8PD0iLCBhc3NpZ25tZW50T3BlcmF0b3IpKSB7CiAgICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQobGVmdFNoaWZ0TmFtZSwgdmFsdWUsCiAgICAgICAgICBvZmZzZXQ6IG9mZnNldEZvclRva2VuKHRva2VuKSwgdm9pZENvbnRleHQ6IHZvaWRDb250ZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCI+Pj0iLCBhc3NpZ25tZW50T3BlcmF0b3IpKSB7CiAgICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQocmlnaHRTaGlmdE5hbWUsIHZhbHVlLAogICAgICAgICAgb2Zmc2V0OiBvZmZzZXRGb3JUb2tlbih0b2tlbiksIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgiPj4+PSIsIGFzc2lnbm1lbnRPcGVyYXRvcikpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRvci5idWlsZENvbXBvdW5kQXNzaWdubWVudCh0cmlwbGVTaGlmdE5hbWUsIHZhbHVlLAogICAgICAgICAgb2Zmc2V0OiBvZmZzZXRGb3JUb2tlbih0b2tlbiksIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgiPz89IiwgYXNzaWdubWVudE9wZXJhdG9yKSkgewogICAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkTnVsbEF3YXJlQXNzaWdubWVudCgKICAgICAgICAgIHZhbHVlLCBjb25zdCBEeW5hbWljVHlwZSgpLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksCiAgICAgICAgICB2b2lkQ29udGV4dDogdm9pZENvbnRleHQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoIl49IiwgYXNzaWdubWVudE9wZXJhdG9yKSkgewogICAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KGNhcmV0TmFtZSwgdmFsdWUsCiAgICAgICAgICBvZmZzZXQ6IG9mZnNldEZvclRva2VuKHRva2VuKSwgdm9pZENvbnRleHQ6IHZvaWRDb250ZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCJ8PSIsIGFzc2lnbm1lbnRPcGVyYXRvcikpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRvci5idWlsZENvbXBvdW5kQXNzaWdubWVudChiYXJOYW1lLCB2YWx1ZSwKICAgICAgICAgIG9mZnNldDogb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCB2b2lkQ29udGV4dDogdm9pZENvbnRleHQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwoIn4vPSIsIGFzc2lnbm1lbnRPcGVyYXRvcikpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRvci5idWlsZENvbXBvdW5kQXNzaWdubWVudChtdXN0YWNoZU5hbWUsIHZhbHVlLAogICAgICAgICAgb2Zmc2V0OiBvZmZzZXRGb3JUb2tlbih0b2tlbiksIHZvaWRDb250ZXh0OiB2b2lkQ29udGV4dCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdW5oYW5kbGVkKGFzc2lnbm1lbnRPcGVyYXRvciwgImhhbmRsZUFzc2lnbm1lbnQiLCB0b2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgX2hlbHBlci51cmkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXIgYnVpbGRGaWVsZEluaXRpYWxpemVyKE1hcDxTdHJpbmcsIGludD4gaW5pdGlhbGl6ZWRGaWVsZHMpIHsKICAgIGlmICghaWRlbnRpY2FsKCI9IiwgYXNzaWdubWVudE9wZXJhdG9yKSB8fAogICAgICAgIGdlbmVyYXRvciBpcyEgVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yKSB7CiAgICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRGaWVsZEluaXRpYWxpemVyKGluaXRpYWxpemVkRmllbGRzKTsKICAgIH0KICAgIHJldHVybiBfaGVscGVyLmJ1aWxkRmllbGRJbml0aWFsaXplcihmYWxzZSwgZ2VuZXJhdG9yLl9wbGFpbk5hbWVGb3JSZWFkLAogICAgICAgIG9mZnNldEZvclRva2VuKGdlbmVyYXRvci50b2tlbiksIG9mZnNldEZvclRva2VuKHRva2VuKSwgdmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykgewogICAgc2luay53cml0ZSgiLCB2YWx1ZTogIik7CiAgICBwcmludE5vZGVPbih2YWx1ZSwgc2luayk7CiAgICBzaW5rLndyaXRlKCIsIGFzc2lnbm1lbnRPcGVyYXRvcjogIik7CiAgICBzaW5rLndyaXRlKGFzc2lnbm1lbnRPcGVyYXRvcik7CiAgfQp9CgpjbGFzcyBEZWxheWVkUG9zdGZpeEluY3JlbWVudCBleHRlbmRzIENvbnRleHRBd2FyZUdlbmVyYXRvciB7CiAgZmluYWwgTmFtZSBiaW5hcnlPcGVyYXRvcjsKCiAgZmluYWwgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldDsKCiAgRGVsYXllZFBvc3RmaXhJbmNyZW1lbnQoRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLAogICAgICBHZW5lcmF0b3IgZ2VuZXJhdG9yLCB0aGlzLmJpbmFyeU9wZXJhdG9yLCB0aGlzLmludGVyZmFjZVRhcmdldCkKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuLCBnZW5lcmF0b3IpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIkRlbGF5ZWRQb3N0Zml4SW5jcmVtZW50IjsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZFNpbXBsZVJlYWQoKSB7CiAgICByZXR1cm4gZ2VuZXJhdG9yLmJ1aWxkUG9zdGZpeEluY3JlbWVudChiaW5hcnlPcGVyYXRvciwKICAgICAgICBvZmZzZXQ6IG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICB2b2lkQ29udGV4dDogZmFsc2UsCiAgICAgICAgaW50ZXJmYWNlVGFyZ2V0OiBpbnRlcmZhY2VUYXJnZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZEZvckVmZmVjdCgpIHsKICAgIHJldHVybiBnZW5lcmF0b3IuYnVpbGRQb3N0Zml4SW5jcmVtZW50KGJpbmFyeU9wZXJhdG9yLAogICAgICAgIG9mZnNldDogb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLAogICAgICAgIHZvaWRDb250ZXh0OiB0cnVlLAogICAgICAgIGludGVyZmFjZVRhcmdldDogaW50ZXJmYWNlVGFyZ2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGUoIiwgYmluYXJ5T3BlcmF0b3I6ICIpOwogICAgc2luay53cml0ZShiaW5hcnlPcGVyYXRvci5uYW1lKTsKICAgIHNpbmsud3JpdGUoIiwgaW50ZXJmYWNlVGFyZ2V0OiAiKTsKICAgIHByaW50UXVhbGlmaWVkTmFtZU9uKGludGVyZmFjZVRhcmdldCwgc2luayk7CiAgfQp9CgpjbGFzcyBQcmVmaXhVc2VHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIGZpbmFsIFByZWZpeEJ1aWxkZXIgcHJlZml4OwoKICBQcmVmaXhVc2VHZW5lcmF0b3IoRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLCB0aGlzLnByZWZpeCkKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiBwcmVmaXgubmFtZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJQcmVmaXhVc2VHZW5lcmF0b3IiOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkU2ltcGxlUmVhZCgpID0+IF9tYWtlSW52YWxpZFJlYWQoKTsKCiAgQG92ZXJyaWRlCiAgLyogRXhwcmVzc2lvbiB8IEdlbmVyYXRvciAqLyBPYmplY3QgcXVhbGlmaWVkTG9va3VwKFRva2VuIG5hbWUpIHsKICAgIGlmIChfaGVscGVyLmNvbnN0YW50Q29udGV4dCAhPSBDb25zdGFudENvbnRleHQubm9uZSAmJiBwcmVmaXguZGVmZXJyZWQpIHsKICAgICAgX2hlbHBlci5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVDYW50VXNlRGVmZXJyZWRQcmVmaXhBc0NvbnN0YW50LndpdGhBcmd1bWVudHModG9rZW4pLAogICAgICAgICAgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLAogICAgICAgICAgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKTsKICAgIH0KICAgIE9iamVjdCByZXN1bHQgPSBfaGVscGVyLnNjb3BlTG9va3VwKHByZWZpeC5leHBvcnRTY29wZSwgbmFtZS5sZXhlbWUsIG5hbWUsCiAgICAgICAgaXNRdWFsaWZpZWQ6IHRydWUsIHByZWZpeDogcHJlZml4KTsKICAgIGlmIChwcmVmaXguZGVmZXJyZWQpIHsKICAgICAgaWYgKHJlc3VsdCBpcyBHZW5lcmF0b3IpIHsKICAgICAgICBpZiAocmVzdWx0IGlzISBMb2FkTGlicmFyeUdlbmVyYXRvcikgewogICAgICAgICAgcmVzdWx0ID0gbmV3IERlZmVycmVkQWNjZXNzR2VuZXJhdG9yKF9oZWxwZXIsIG5hbWUsIHRoaXMsIHJlc3VsdCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIF9oZWxwZXIud3JhcEluRGVmZXJyZWRDaGVjayhyZXN1bHQsIHByZWZpeCwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIC8qIEV4cHJlc3Npb24gfCBHZW5lcmF0b3IgfCBJbml0aWFsaXplciAqLyBkb0ludm9jYXRpb24oCiAgICAgIGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaGVscGVyLndyYXBJbkxvY2F0ZWRQcm9ibGVtKAogICAgICAgIF9oZWxwZXIuZXZhbHVhdGVBcmd1bWVudHNCZWZvcmUoYXJndW1lbnRzLCBfZm9yZXN0LmxpdGVyYWxOdWxsKHRva2VuKSksCiAgICAgICAgbWVzc2FnZUNhbnRVc2VQcmVmaXhBc0V4cHJlc3Npb24ud2l0aExvY2F0aW9uKAogICAgICAgICAgICBfaGVscGVyLnVyaSwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBsZW5ndGhGb3JUb2tlbih0b2tlbikpKTsKICB9CgogIEBvdmVycmlkZQogIC8qIEV4cHJlc3Npb24gfCBHZW5lcmF0b3IgKi8gYnVpbGRQcm9wZXJ0eUFjY2VzcygKICAgICAgSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3Igc2VuZCwgaW50IG9wZXJhdG9yT2Zmc2V0LCBib29sIGlzTnVsbEF3YXJlKSB7CiAgICBpZiAoc2VuZCBpcyBJbmNvbXBsZXRlU2VuZEdlbmVyYXRvcikgewogICAgICBhc3NlcnQoc2VuZC5uYW1lLm5hbWUgPT0gc2VuZC50b2tlbi5sZXhlbWUsCiAgICAgICAgICAiJyR7c2VuZC5uYW1lLm5hbWV9JyAhPSAke3NlbmQudG9rZW4ubGV4ZW1lfSIpOwogICAgICBPYmplY3QgcmVzdWx0ID0gcXVhbGlmaWVkTG9va3VwKHNlbmQudG9rZW4pOwogICAgICBpZiAoc2VuZCBpcyBTZW5kQWNjZXNzR2VuZXJhdG9yKSB7CiAgICAgICAgcmVzdWx0ID0gX2hlbHBlci5maW5pc2hTZW5kKAogICAgICAgICAgICByZXN1bHQsCiAgICAgICAgICAgIHNlbmQuYXJndW1lbnRzIGFzIGR5bmFtaWMgLyogVE9ETyhhaGUpOiBSZW1vdmUgdGhpcyBjYXN0LiAqLywKICAgICAgICAgICAgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pKTsKICAgICAgfQogICAgICBpZiAoaXNOdWxsQXdhcmUpIHsKICAgICAgICByZXN1bHQgPSBfaGVscGVyLndyYXBJbkxvY2F0ZWRQcm9ibGVtKAogICAgICAgICAgICBfaGVscGVyLnRvVmFsdWUocmVzdWx0KSwKICAgICAgICAgICAgbWVzc2FnZUNhbnRVc2VQcmVmaXhXaXRoTnVsbEF3YXJlLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgIF9oZWxwZXIudXJpLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIGxlbmd0aEZvclRva2VuKHRva2VuKSkpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gYnVpbGRTaW1wbGVSZWFkKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIF9tYWtlSW52YWxpZFJlYWQoKSB7CiAgICByZXR1cm4gX2hlbHBlci5idWlsZFByb2JsZW0obWVzc2FnZUNhbnRVc2VQcmVmaXhBc0V4cHJlc3Npb24sCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBsZW5ndGhGb3JUb2tlbih0b2tlbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBfbWFrZUludmFsaWRXcml0ZShFeHByZXNzaW9uIHZhbHVlKSA9PiBfbWFrZUludmFsaWRSZWFkKCk7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGUoIiwgcHJlZml4OiAiKTsKICAgIHNpbmsud3JpdGUocHJlZml4Lm5hbWUpOwogICAgc2luay53cml0ZSgiLCBkZWZlcnJlZDogIik7CiAgICBzaW5rLndyaXRlKHByZWZpeC5kZWZlcnJlZCk7CiAgfQp9CgpjbGFzcyBVbmV4cGVjdGVkUXVhbGlmaWVkVXNlR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yIHsKICBmaW5hbCBHZW5lcmF0b3IgcHJlZml4R2VuZXJhdG9yOwoKICBmaW5hbCBib29sIGlzVW5yZXNvbHZlZDsKCiAgVW5leHBlY3RlZFF1YWxpZmllZFVzZUdlbmVyYXRvcihFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwgVG9rZW4gdG9rZW4sCiAgICAgIHRoaXMucHJlZml4R2VuZXJhdG9yLCB0aGlzLmlzVW5yZXNvbHZlZCkKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCB7CiAgICByZXR1cm4gIiR7cHJlZml4R2VuZXJhdG9yLl9wbGFpbk5hbWVGb3JSZWFkfS4ke3Rva2VuLmxleGVtZX0iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfZGVidWdOYW1lID0+ICJVbmV4cGVjdGVkUXVhbGlmaWVkVXNlR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBidWlsZFNpbXBsZVJlYWQoKSA9PiBfbWFrZUludmFsaWRSZWFkKCk7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaGVscGVyLndyYXBTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgIF9oZWxwZXIudGhyb3dOb1N1Y2hNZXRob2RFcnJvcigKICAgICAgICAgICAgX2ZvcmVzdC5saXRlcmFsTnVsbChudWxsKS4uZmlsZU9mZnNldCA9IG9mZnNldCwKICAgICAgICAgICAgX3BsYWluTmFtZUZvclJlYWQsCiAgICAgICAgICAgIGFyZ3VtZW50cywKICAgICAgICAgICAgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pKSwKICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUJ1aWxkZXIgYnVpbGRUeXBlV2l0aFJlc29sdmVkQXJndW1lbnRzKExpc3Q8VW5yZXNvbHZlZFR5cGU+IGFyZ3VtZW50cykgewogICAgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcsIFN0cmluZyk+IHRlbXBsYXRlID0gaXNVbnJlc29sdmVkCiAgICAgICAgPyB0ZW1wbGF0ZVVucmVzb2x2ZWRQcmVmaXhJblR5cGVBbm5vdGF0aW9uCiAgICAgICAgOiB0ZW1wbGF0ZU5vdEFQcmVmaXhJblR5cGVBbm5vdGF0aW9uOwogICAgTmFtZWRUeXBlQnVpbGRlciByZXN1bHQgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcihfcGxhaW5OYW1lRm9yUmVhZCwgbnVsbCk7CiAgICBNZXNzYWdlIG1lc3NhZ2UgPQogICAgICAgIHRlbXBsYXRlLndpdGhBcmd1bWVudHMocHJlZml4R2VuZXJhdG9yLnRva2VuLmxleGVtZSwgdG9rZW4ubGV4ZW1lKTsKICAgIF9oZWxwZXIubGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2UsIG9mZnNldEZvclRva2VuKHByZWZpeEdlbmVyYXRvci50b2tlbiksCiAgICAgICAgbGVuZ3RoT2ZTcGFuKHByZWZpeEdlbmVyYXRvci50b2tlbiwgdG9rZW4pLCBfdXJpKTsKICAgIHJlc3VsdC5iaW5kKHJlc3VsdC5idWlsZEludmFsaWRUeXBlKG1lc3NhZ2Uud2l0aExvY2F0aW9uKAogICAgICAgIF91cmksCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4ocHJlZml4R2VuZXJhdG9yLnRva2VuKSwKICAgICAgICBsZW5ndGhPZlNwYW4ocHJlZml4R2VuZXJhdG9yLnRva2VuLCB0b2tlbikpKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykgewogICAgc2luay53cml0ZSgiLCBwcmVmaXhHZW5lcmF0b3I6ICIpOwogICAgcHJlZml4R2VuZXJhdG9yLnByaW50T24oc2luayk7CiAgfQp9CgpjbGFzcyBQYXJzZXJFcnJvckdlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB7CiAgZmluYWwgTWVzc2FnZSBtZXNzYWdlOwoKICBQYXJzZXJFcnJvckdlbmVyYXRvcigKICAgICAgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLCB0aGlzLm1lc3NhZ2UpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gIiNwYXJzZXItZXJyb3IiOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlBhcnNlckVycm9yR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykge30KCiAgRXhwcmVzc2lvbiBidWlsZFByb2JsZW0oKSB7CiAgICByZXR1cm4gX2hlbHBlci5idWlsZFByb2JsZW0obWVzc2FnZSwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBub0xlbmd0aCwKICAgICAgICBzdXBwcmVzc01lc3NhZ2U6IHRydWUpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZFNpbXBsZVJlYWQoKSA9PiBidWlsZFByb2JsZW0oKTsKCiAgRXhwcmVzc2lvbiBidWlsZEFzc2lnbm1lbnQoRXhwcmVzc2lvbiB2YWx1ZSwge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIGJ1aWxkUHJvYmxlbSgpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZE51bGxBd2FyZUFzc2lnbm1lbnQoCiAgICAgIEV4cHJlc3Npb24gdmFsdWUsIERhcnRUeXBlIHR5cGUsIGludCBvZmZzZXQsCiAgICAgIHtib29sIHZvaWRDb250ZXh0OiBmYWxzZX0pIHsKICAgIHJldHVybiBidWlsZFByb2JsZW0oKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGRDb21wb3VuZEFzc2lnbm1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwgRXhwcmVzc2lvbiB2YWx1ZSwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldCwKICAgICAgYm9vbCBpc1ByZUluY0RlYzogZmFsc2UsCiAgICAgIGJvb2wgaXNQb3N0SW5jRGVjOiBmYWxzZX0pIHsKICAgIHJldHVybiBidWlsZFByb2JsZW0oKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGRQcmVmaXhJbmNyZW1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldH0pIHsKICAgIHJldHVybiBidWlsZFByb2JsZW0oKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGRQb3N0Zml4SW5jcmVtZW50KE5hbWUgYmluYXJ5T3BlcmF0b3IsCiAgICAgIHtpbnQgb2Zmc2V0OiBUcmVlTm9kZS5ub09mZnNldCwKICAgICAgYm9vbCB2b2lkQ29udGV4dDogZmFsc2UsCiAgICAgIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXR9KSB7CiAgICByZXR1cm4gYnVpbGRQcm9ibGVtKCk7CiAgfQoKICBFeHByZXNzaW9uIF9tYWtlSW52YWxpZFJlYWQoKSA9PiBidWlsZFByb2JsZW0oKTsKCiAgRXhwcmVzc2lvbiBfbWFrZUludmFsaWRXcml0ZShFeHByZXNzaW9uIHZhbHVlKSA9PiBidWlsZFByb2JsZW0oKTsKCiAgSW5pdGlhbGl6ZXIgYnVpbGRGaWVsZEluaXRpYWxpemVyKE1hcDxTdHJpbmcsIGludD4gaW5pdGlhbGl6ZWRGaWVsZHMpIHsKICAgIHJldHVybiBfaGVscGVyLmJ1aWxkSW52YWxpZEluaXRpYWxpemVyKAogICAgICAgIF9oZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oYnVpbGRQcm9ibGVtKCkpKTsKICB9CgogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBidWlsZFByb2JsZW0oKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGRQcm9wZXJ0eUFjY2VzcygKICAgICAgSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3Igc2VuZCwgaW50IG9wZXJhdG9yT2Zmc2V0LCBib29sIGlzTnVsbEF3YXJlKSB7CiAgICByZXR1cm4gYnVpbGRQcm9ibGVtKCk7CiAgfQoKICBUeXBlQnVpbGRlciBidWlsZFR5cGVXaXRoUmVzb2x2ZWRBcmd1bWVudHMoTGlzdDxVbnJlc29sdmVkVHlwZT4gYXJndW1lbnRzKSB7CiAgICBOYW1lZFR5cGVCdWlsZGVyIHJlc3VsdCA9IG5ldyBOYW1lZFR5cGVCdWlsZGVyKHRva2VuLmxleGVtZSwgbnVsbCk7CiAgICBfaGVscGVyLmxpYnJhcnkuYWRkUHJvYmxlbShtZXNzYWdlLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIG5vTGVuZ3RoLCBfdXJpKTsKICAgIHJlc3VsdC5iaW5kKHJlc3VsdC5idWlsZEludmFsaWRUeXBlKAogICAgICAgIG1lc3NhZ2Uud2l0aExvY2F0aW9uKF91cmksIG9mZnNldEZvclRva2VuKHRva2VuKSwgbm9MZW5ndGgpKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRXhwcmVzc2lvbiBxdWFsaWZpZWRMb29rdXAoVG9rZW4gbmFtZSkgewogICAgcmV0dXJuIGJ1aWxkUHJvYmxlbSgpOwogIH0KCiAgRXhwcmVzc2lvbiBpbnZva2VDb25zdHJ1Y3RvcigKICAgICAgTGlzdDxVbnJlc29sdmVkVHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIFRva2VuIG5hbWVUb2tlbiwKICAgICAgVG9rZW4gbmFtZUxhc3RUb2tlbiwKICAgICAgQ29uc3RuZXNzIGNvbnN0bmVzcykgewogICAgcmV0dXJuIGJ1aWxkUHJvYmxlbSgpOwogIH0KfQoKLy8vIEEgW1RoaXNBY2Nlc3NHZW5lcmF0b3JdIHJlcHJlc2VudHMgYSBzdWJleHByZXNzaW9uIHdob3NlIHByZWZpeCBpcyBgdGhpc2AKLy8vIG9yIGBzdXBlcmAuCi8vLwovLy8gRm9yIGluc3RhbmNlCi8vLwovLy8gICBjbGFzcyBDIHsKLy8vICAgICB2YXIgYiA9IHRoaXMuYzsgLy8gYSBUaGlzQWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGB0aGlzYC4KLy8vICAgICB2YXIgYzsKLy8vICAgICBDKHRoaXMuYykgOiAgICAgLy8gYSBUaGlzQWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGB0aGlzYC4KLy8vICAgICAgIHRoaXMuYiA9IGM7ICAgLy8gYSBUaGlzQWNjZXNzR2VuZXJhdG9yIGlzIGNyZWF0ZWQgZm9yIGB0aGlzYC4KLy8vICAgICBtZXRob2QoKSB7Ci8vLyAgICAgICB0aGlzLmI7ICAgICAgIC8vIGEgVGhpc0FjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgdGhpc2AuCi8vLyAgICAgICBzdXBlci5iKCk7ICAgIC8vIGEgVGhpc0FjY2Vzc0dlbmVyYXRvciBpcyBjcmVhdGVkIGZvciBgc3VwZXJgLgovLy8gICAgICAgdGhpcy5iID0gYzsgICAvLyBhIFRoaXNBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYHRoaXNgLgovLy8gICAgICAgdGhpcy5iICs9IGM7ICAvLyBhIFRoaXNBY2Nlc3NHZW5lcmF0b3IgaXMgY3JlYXRlZCBmb3IgYHRoaXNgLgovLy8gICAgIH0KLy8vICAgfQovLy8KLy8vIElmIHRoaXMgYHRoaXNgIG9jY3VycyBpbiBhbiBpbnN0YW5jZSBtZW1iZXIgb24gYW4gZXh0ZW5zaW9uIGRlY2xhcmF0aW9uLAovLy8gYSBbUmVhZE9ubHlBY2Nlc3NHZW5lcmF0b3JdIGlzIGNyZWF0ZWQgaW5zdGVhZC4KLy8vCmNsYXNzIFRoaXNBY2Nlc3NHZW5lcmF0b3IgZXh0ZW5kcyBHZW5lcmF0b3IgewogIC8vLyBgdHJ1ZWAgaWYgdGhpcyBhY2Nlc3MgaXMgaW4gYW4gaW5pdGlhbGl6ZXIgbGlzdC4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGluIGA8aW5pdD5gIGluCiAgLy8vCiAgLy8vICAgIGNsYXNzIENsYXNzIHsKICAvLy8gICAgICBDbGFzcygpIDogPGluaXQ+OwogIC8vLyAgICB9CiAgLy8vCiAgZmluYWwgYm9vbCBpc0luaXRpYWxpemVyOwoKICAvLy8gYHRydWVgIGlmIHRoaXMgYWNjZXNzIGlzIGluIGEgZmllbGQgaW5pdGlhbGl6ZXIgZWl0aGVyIGRpcmVjdGx5IG9yIHdpdGhpbgogIC8vLyBhbiBpbml0aWFsaXplciBsaXN0LgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgaW4gYDxpbml0PmAgaW4KICAvLy8KICAvLy8gICAgdmFyIGZvbyA9IDxpbml0PjsKICAvLy8gICAgY2xhc3MgQ2xhc3MgewogIC8vLyAgICAgIHZhciBiYXIgPSA8aW5pdD47CiAgLy8vICAgICAgQ2xhc3MoKSA6IDxpbml0PjsKICAvLy8gICAgfQogIC8vLwogIGZpbmFsIGJvb2wgaW5GaWVsZEluaXRpYWxpemVyOwoKICAvLy8gYHRydWVgIGlmIHRoaXMgc3ViZXhwcmVzc2lvbiByZXByZXNlbnRzIGEgYHN1cGVyYCBwcmVmaXguCiAgZmluYWwgYm9vbCBpc1N1cGVyOwoKICBUaGlzQWNjZXNzR2VuZXJhdG9yKEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwKICAgICAgdGhpcy5pc0luaXRpYWxpemVyLCB0aGlzLmluRmllbGRJbml0aWFsaXplciwKICAgICAge3RoaXMuaXNTdXBlcjogZmFsc2V9KQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBTdHJpbmcgZ2V0IF9wbGFpbk5hbWVGb3JSZWFkIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiJHtpc1N1cGVyID8gJ3N1cGVyJyA6ICd0aGlzJ30ucGxhaW5OYW1lRm9yUmVhZCIsCiAgICAgICAgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBfdXJpKTsKICB9CgogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiVGhpc0FjY2Vzc0dlbmVyYXRvciI7CgogIEV4cHJlc3Npb24gYnVpbGRTaW1wbGVSZWFkKCkgewogICAgaWYgKCFpc1N1cGVyKSB7CiAgICAgIGlmIChpbkZpZWxkSW5pdGlhbGl6ZXIpIHsKICAgICAgICByZXR1cm4gYnVpbGRGaWVsZEluaXRpYWxpemVyRXJyb3IobnVsbCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIF9mb3Jlc3QudGhpc0V4cHJlc3Npb24odG9rZW4pOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2hlbHBlci5idWlsZFByb2JsZW0obWVzc2FnZVN1cGVyQXNFeHByZXNzaW9uLAogICAgICAgICAgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBsZW5ndGhGb3JUb2tlbih0b2tlbikpOwogICAgfQogIH0KCiAgRXhwcmVzc2lvbiBidWlsZEZpZWxkSW5pdGlhbGl6ZXJFcnJvcihNYXA8U3RyaW5nLCBpbnQ+IGluaXRpYWxpemVkRmllbGRzKSB7CiAgICBTdHJpbmcga2V5d29yZCA9IGlzU3VwZXIgPyAic3VwZXIiIDogInRoaXMiOwogICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgIHRlbXBsYXRlVGhpc09yU3VwZXJBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXIud2l0aEFyZ3VtZW50cyhrZXl3b3JkKSwKICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbiksCiAgICAgICAga2V5d29yZC5sZW5ndGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXIgYnVpbGRGaWVsZEluaXRpYWxpemVyKE1hcDxTdHJpbmcsIGludD4gaW5pdGlhbGl6ZWRGaWVsZHMpIHsKICAgIEV4cHJlc3Npb24gZXJyb3IgPSBfaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKAogICAgICAgIGJ1aWxkRmllbGRJbml0aWFsaXplckVycm9yKGluaXRpYWxpemVkRmllbGRzKSk7CiAgICByZXR1cm4gX2hlbHBlci5idWlsZEludmFsaWRJbml0aWFsaXplcihlcnJvciwgZXJyb3IuZmlsZU9mZnNldCk7CiAgfQoKICBidWlsZFByb3BlcnR5QWNjZXNzKAogICAgICBJbmNvbXBsZXRlU2VuZEdlbmVyYXRvciBzZW5kLCBpbnQgb3BlcmF0b3JPZmZzZXQsIGJvb2wgaXNOdWxsQXdhcmUpIHsKICAgIE5hbWUgbmFtZSA9IHNlbmQubmFtZTsKICAgIEFyZ3VtZW50cyBhcmd1bWVudHMgPSBzZW5kLmFyZ3VtZW50czsKICAgIGludCBvZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihzZW5kLnRva2VuKTsKICAgIGlmIChpc0luaXRpYWxpemVyICYmIHNlbmQgaXMgU2VuZEFjY2Vzc0dlbmVyYXRvcikgewogICAgICBpZiAoaXNOdWxsQXdhcmUpIHsKICAgICAgICBfaGVscGVyLmFkZFByb2JsZW0oCiAgICAgICAgICAgIG1lc3NhZ2VJbnZhbGlkVXNlT2ZOdWxsQXdhcmVBY2Nlc3MsIG9wZXJhdG9yT2Zmc2V0LCAyKTsKICAgICAgfQogICAgICByZXR1cm4gYnVpbGRDb25zdHJ1Y3RvckluaXRpYWxpemVyKG9mZnNldCwgbmFtZSwgYXJndW1lbnRzKTsKICAgIH0KICAgIGlmIChpbkZpZWxkSW5pdGlhbGl6ZXIgJiYgIWlzSW5pdGlhbGl6ZXIpIHsKICAgICAgcmV0dXJuIGJ1aWxkRmllbGRJbml0aWFsaXplckVycm9yKG51bGwpOwogICAgfQogICAgTWVtYmVyIGdldHRlciA9IF9oZWxwZXIubG9va3VwSW5zdGFuY2VNZW1iZXIobmFtZSwgaXNTdXBlcjogaXNTdXBlcik7CiAgICBpZiAoc2VuZCBpcyBTZW5kQWNjZXNzR2VuZXJhdG9yKSB7CiAgICAgIC8vIE5vdGljZSB0aGF0ICd0aGlzJyBvciAnc3VwZXInIGNhbid0IGJlIG51bGwuIFNvIHdlIGNhbiBpZ25vcmUgdGhlCiAgICAgIC8vIHZhbHVlIG9mIFtpc051bGxBd2FyZV0uCiAgICAgIGlmIChnZXR0ZXIgPT0gbnVsbCkgewogICAgICAgIF9oZWxwZXIud2FyblVucmVzb2x2ZWRNZXRob2QobmFtZSwgb2Zmc2V0Rm9yVG9rZW4oc2VuZC50b2tlbiksCiAgICAgICAgICAgIGlzU3VwZXI6IGlzU3VwZXIpOwogICAgICB9CiAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkTWV0aG9kSW52b2NhdGlvbihfZm9yZXN0LnRoaXNFeHByZXNzaW9uKG51bGwpLCBuYW1lLAogICAgICAgICAgc2VuZC5hcmd1bWVudHMsIG9mZnNldEZvclRva2VuKHNlbmQudG9rZW4pLAogICAgICAgICAgaXNTdXBlcjogaXNTdXBlciwgaW50ZXJmYWNlVGFyZ2V0OiBnZXR0ZXIpOwogICAgfSBlbHNlIHsKICAgICAgTWVtYmVyIHNldHRlciA9CiAgICAgICAgICBfaGVscGVyLmxvb2t1cEluc3RhbmNlTWVtYmVyKG5hbWUsIGlzU3VwZXI6IGlzU3VwZXIsIGlzU2V0dGVyOiB0cnVlKTsKICAgICAgaWYgKGlzU3VwZXIpIHsKICAgICAgICByZXR1cm4gbmV3IFN1cGVyUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IoCiAgICAgICAgICAgIF9oZWxwZXIsCiAgICAgICAgICAgIC8vIFRPRE8oYWhlKTogVGhpcyBpcyBub3QgdGhlICdzdXBlcicgdG9rZW4uCiAgICAgICAgICAgIHNlbmQudG9rZW4sCiAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgIGdldHRlciwKICAgICAgICAgICAgc2V0dGVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IFRoaXNQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcigKICAgICAgICAgICAgX2hlbHBlciwKICAgICAgICAgICAgLy8gVE9ETyhhaGUpOiBUaGlzIGlzIG5vdCB0aGUgJ3RoaXMnIHRva2VuLgogICAgICAgICAgICBzZW5kLnRva2VuLAogICAgICAgICAgICBuYW1lLAogICAgICAgICAgICBnZXR0ZXIsCiAgICAgICAgICAgIHNldHRlcik7CiAgICAgIH0KICAgIH0KICB9CgogIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICBpZiAoaXNJbml0aWFsaXplcikgewogICAgICByZXR1cm4gYnVpbGRDb25zdHJ1Y3RvckluaXRpYWxpemVyKG9mZnNldCwgbmV3IE5hbWUoIiIpLCBhcmd1bWVudHMpOwogICAgfSBlbHNlIGlmIChpc1N1cGVyKSB7CiAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkUHJvYmxlbShtZXNzYWdlU3VwZXJBc0V4cHJlc3Npb24sIG9mZnNldCwgbm9MZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRNZXRob2RJbnZvY2F0aW9uKAogICAgICAgICAgX2ZvcmVzdC50aGlzRXhwcmVzc2lvbihudWxsKSwgY2FsbE5hbWUsIGFyZ3VtZW50cywgb2Zmc2V0LAogICAgICAgICAgaXNJbXBsaWNpdENhbGw6IHRydWUpOwogICAgfQogIH0KCiAgSW5pdGlhbGl6ZXIgYnVpbGRDb25zdHJ1Y3RvckluaXRpYWxpemVyKAogICAgICBpbnQgb2Zmc2V0LCBOYW1lIG5hbWUsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gX2hlbHBlci5sb29rdXBDb25zdHJ1Y3RvcihuYW1lLCBpc1N1cGVyOiBpc1N1cGVyKTsKICAgIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2U7CiAgICBpZiAoY29uc3RydWN0b3IgIT0gbnVsbCkgewogICAgICBtZXNzYWdlID0gX2hlbHBlci5jaGVja0FyZ3VtZW50c0ZvckZ1bmN0aW9uKAogICAgICAgICAgY29uc3RydWN0b3IuZnVuY3Rpb24sIGFyZ3VtZW50cywgb2Zmc2V0LCA8VHlwZVBhcmFtZXRlcj5bXSk7CiAgICB9IGVsc2UgewogICAgICBTdHJpbmcgZnVsbE5hbWUgPQogICAgICAgICAgX2hlbHBlci5jb25zdHJ1Y3Rvck5hbWVGb3JEaWFnbm9zdGljcyhuYW1lLm5hbWUsIGlzU3VwZXI6IGlzU3VwZXIpOwogICAgICBtZXNzYWdlID0gKGlzU3VwZXIKICAgICAgICAgICAgICA/IHRlbXBsYXRlU3VwZXJjbGFzc0hhc05vQ29uc3RydWN0b3IKICAgICAgICAgICAgICA6IHRlbXBsYXRlQ29uc3RydWN0b3JOb3RGb3VuZCkKICAgICAgICAgIC53aXRoQXJndW1lbnRzKGZ1bGxOYW1lKQogICAgICAgICAgLndpdGhMb2NhdGlvbihfdXJpLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIGxlbmd0aEZvclRva2VuKHRva2VuKSk7CiAgICB9CiAgICBpZiAobWVzc2FnZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiBfaGVscGVyLmJ1aWxkSW52YWxpZEluaXRpYWxpemVyKF9oZWxwZXIud3JhcFN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICBfaGVscGVyLnRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgICAgICAgICAgX2ZvcmVzdC5saXRlcmFsTnVsbChudWxsKS4uZmlsZU9mZnNldCA9IG9mZnNldCwKICAgICAgICAgICAgICBfaGVscGVyLmNvbnN0cnVjdG9yTmFtZUZvckRpYWdub3N0aWNzKG5hbWUubmFtZSwKICAgICAgICAgICAgICAgICAgaXNTdXBlcjogaXNTdXBlciksCiAgICAgICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgICAgIG9mZnNldCwKICAgICAgICAgICAgICBpc1N1cGVyOiBpc1N1cGVyLAogICAgICAgICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UpLAogICAgICAgICAgb2Zmc2V0KSk7CiAgICB9IGVsc2UgaWYgKGlzU3VwZXIpIHsKICAgICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRTdXBlckluaXRpYWxpemVyKAogICAgICAgICAgZmFsc2UsIGNvbnN0cnVjdG9yLCBhcmd1bWVudHMsIG9mZnNldCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2hlbHBlci5idWlsZFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoCiAgICAgICAgICBjb25zdHJ1Y3RvciwgYXJndW1lbnRzLCBvZmZzZXQpOwogICAgfQogIH0KCiAgRXhwcmVzc2lvbiBidWlsZEFzc2lnbm1lbnQoRXhwcmVzc2lvbiB2YWx1ZSwge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIGJ1aWxkQXNzaWdubWVudEVycm9yKCk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkTnVsbEF3YXJlQXNzaWdubWVudCgKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSwgRGFydFR5cGUgdHlwZSwgaW50IG9mZnNldCwKICAgICAge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIGJ1aWxkQXNzaWdubWVudEVycm9yKCk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KE5hbWUgYmluYXJ5T3BlcmF0b3IsIEV4cHJlc3Npb24gdmFsdWUsCiAgICAgIHtpbnQgb2Zmc2V0OiBUcmVlTm9kZS5ub09mZnNldCwKICAgICAgYm9vbCB2b2lkQ29udGV4dDogZmFsc2UsCiAgICAgIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXQsCiAgICAgIGJvb2wgaXNQcmVJbmNEZWM6IGZhbHNlLAogICAgICBib29sIGlzUG9zdEluY0RlYzogZmFsc2V9KSB7CiAgICByZXR1cm4gYnVpbGRBc3NpZ25tZW50RXJyb3IoKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGRQcmVmaXhJbmNyZW1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldH0pIHsKICAgIHJldHVybiBidWlsZEFzc2lnbm1lbnRFcnJvcigpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZFBvc3RmaXhJbmNyZW1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldH0pIHsKICAgIHJldHVybiBidWlsZEFzc2lnbm1lbnRFcnJvcigpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZEFzc2lnbm1lbnRFcnJvcigpIHsKICAgIHJldHVybiBfaGVscGVyLmRlc3VnYXJTeW50aGV0aWNFeHByZXNzaW9uKF9oZWxwZXIuYnVpbGRQcm9ibGVtKAogICAgICAgIGlzU3VwZXIgPyBtZXNzYWdlQ2Fubm90QXNzaWduVG9TdXBlciA6IG1lc3NhZ2VOb3RBbkx2YWx1ZSwKICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbiksCiAgICAgICAgdG9rZW4ubGVuZ3RoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIGlzSW5pdGlhbGl6ZXI6ICIpOwogICAgc2luay53cml0ZShpc0luaXRpYWxpemVyKTsKICAgIHNpbmsud3JpdGUoIiwgaW5GaWVsZEluaXRpYWxpemVyOiAiKTsKICAgIHNpbmsud3JpdGUoaW5GaWVsZEluaXRpYWxpemVyKTsKICAgIHNpbmsud3JpdGUoIiwgaXNTdXBlcjogIik7CiAgICBzaW5rLndyaXRlKGlzU3VwZXIpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3IgaW1wbGVtZW50cyBHZW5lcmF0b3IgewogIE5hbWUgZ2V0IG5hbWU7CgogIHdpdGhSZWNlaXZlcihPYmplY3QgcmVjZWl2ZXIsIGludCBvcGVyYXRvck9mZnNldCwge2Jvb2wgaXNOdWxsQXdhcmV9KTsKCiAgQXJndW1lbnRzIGdldCBhcmd1bWVudHMgPT4gbnVsbDsKfQoKY2xhc3MgSW5jb21wbGV0ZUVycm9yR2VuZXJhdG9yIGV4dGVuZHMgRXJyb25lb3VzRXhwcmVzc2lvbkdlbmVyYXRvcgogICAgd2l0aCBJbmNvbXBsZXRlU2VuZEdlbmVyYXRvciB7CiAgZmluYWwgTWVzc2FnZSBtZXNzYWdlOwoKICBJbmNvbXBsZXRlRXJyb3JHZW5lcmF0b3IoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwgdGhpcy5tZXNzYWdlKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4pOwoKICBOYW1lIGdldCBuYW1lID0+IG51bGw7CgogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gdG9rZW4ubGV4ZW1lOwoKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIkluY29tcGxldGVFcnJvckdlbmVyYXRvciI7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gYnVpbGRFcnJvcihBcmd1bWVudHMgYXJndW1lbnRzLAogICAgICB7Ym9vbCBpc0dldHRlcjogZmFsc2UsIGJvb2wgaXNTZXR0ZXI6IGZhbHNlLCBpbnQgb2Zmc2V0fSkgewogICAgaW50IGxlbmd0aCA9IG5vTGVuZ3RoOwogICAgaWYgKG9mZnNldCA9PSBudWxsKSB7CiAgICAgIG9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICAgICAgbGVuZ3RoID0gbGVuZ3RoRm9yVG9rZW4odG9rZW4pOwogICAgfQogICAgcmV0dXJuIF9oZWxwZXIuYnVpbGRQcm9ibGVtKG1lc3NhZ2UsIG9mZnNldCwgbGVuZ3RoKTsKICB9CgogIEBvdmVycmlkZQogIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSA9PiB0aGlzOwoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGJ1aWxkU2ltcGxlUmVhZCgpIHsKICAgIHJldHVybiBidWlsZEVycm9yKF9mb3Jlc3QuYXJndW1lbnRzRW1wdHkodG9rZW4pLCBpc0dldHRlcjogdHJ1ZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcmludE9uKFN0cmluZ1Npbmsgc2luaykgewogICAgc2luay53cml0ZSgiLCBtZXNzYWdlOiAiKTsKICAgIHNpbmsud3JpdGUobWVzc2FnZS5jb2RlLm5hbWUpOwogIH0KfQoKLy8gVE9ETyhhaGUpOiBSZW5hbWUgdG8gU2VuZEdlbmVyYXRvci4KY2xhc3MgU2VuZEFjY2Vzc0dlbmVyYXRvciBleHRlbmRzIEdlbmVyYXRvciB3aXRoIEluY29tcGxldGVTZW5kR2VuZXJhdG9yIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBOYW1lIG5hbWU7CgogIEBvdmVycmlkZQogIGZpbmFsIEFyZ3VtZW50cyBhcmd1bWVudHM7CgogIFNlbmRBY2Nlc3NHZW5lcmF0b3IoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwgdGhpcy5uYW1lLCB0aGlzLmFyZ3VtZW50cykKICAgICAgOiBzdXBlcihoZWxwZXIsIHRva2VuKSB7CiAgICBhc3NlcnQoYXJndW1lbnRzICE9IG51bGwpOwogIH0KCiAgU3RyaW5nIGdldCBfcGxhaW5OYW1lRm9yUmVhZCA9PiBuYW1lLm5hbWU7CgogIFN0cmluZyBnZXQgX2RlYnVnTmFtZSA9PiAiU2VuZEFjY2Vzc0dlbmVyYXRvciI7CgogIEV4cHJlc3Npb24gYnVpbGRTaW1wbGVSZWFkKCkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJidWlsZFNpbXBsZVJlYWQiLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIF91cmkpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZEFzc2lnbm1lbnQoRXhwcmVzc2lvbiB2YWx1ZSwge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJidWlsZEFzc2lnbm1lbnQiLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIF91cmkpOwogIH0KCiAgd2l0aFJlY2VpdmVyKE9iamVjdCByZWNlaXZlciwgaW50IG9wZXJhdG9yT2Zmc2V0LCB7Ym9vbCBpc051bGxBd2FyZTogZmFsc2V9KSB7CiAgICBpZiAocmVjZWl2ZXIgaXMgR2VuZXJhdG9yKSB7CiAgICAgIHJldHVybiByZWNlaXZlci5idWlsZFByb3BlcnR5QWNjZXNzKHRoaXMsIG9wZXJhdG9yT2Zmc2V0LCBpc051bGxBd2FyZSk7CiAgICB9CiAgICByZXR1cm4gX2hlbHBlci5idWlsZE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgX2hlbHBlci50b1ZhbHVlKHJlY2VpdmVyKSwgbmFtZSwgYXJndW1lbnRzLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksCiAgICAgICAgaXNOdWxsQXdhcmU6IGlzTnVsbEF3YXJlKTsKICB9CgogIEV4cHJlc3Npb24gYnVpbGROdWxsQXdhcmVBc3NpZ25tZW50KAogICAgICBFeHByZXNzaW9uIHZhbHVlLCBEYXJ0VHlwZSB0eXBlLCBpbnQgb2Zmc2V0LAogICAgICB7Ym9vbCB2b2lkQ29udGV4dDogZmFsc2V9KSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImJ1aWxkTnVsbEF3YXJlQXNzaWdubWVudCIsIG9mZnNldCwgX3VyaSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkQ29tcG91bmRBc3NpZ25tZW50KE5hbWUgYmluYXJ5T3BlcmF0b3IsIEV4cHJlc3Npb24gdmFsdWUsCiAgICAgIHtpbnQgb2Zmc2V0OiBUcmVlTm9kZS5ub09mZnNldCwKICAgICAgYm9vbCB2b2lkQ29udGV4dDogZmFsc2UsCiAgICAgIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXQsCiAgICAgIGJvb2wgaXNQcmVJbmNEZWM6IGZhbHNlLAogICAgICBib29sIGlzUG9zdEluY0RlYzogZmFsc2V9KSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoCiAgICAgICAgImJ1aWxkQ29tcG91bmRBc3NpZ25tZW50Iiwgb2Zmc2V0ID8/IG9mZnNldEZvclRva2VuKHRva2VuKSwgX3VyaSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkUHJlZml4SW5jcmVtZW50KE5hbWUgYmluYXJ5T3BlcmF0b3IsCiAgICAgIHtpbnQgb2Zmc2V0OiBUcmVlTm9kZS5ub09mZnNldCwKICAgICAgYm9vbCB2b2lkQ29udGV4dDogZmFsc2UsCiAgICAgIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXR9KSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoCiAgICAgICAgImJ1aWxkUHJlZml4SW5jcmVtZW50Iiwgb2Zmc2V0ID8/IG9mZnNldEZvclRva2VuKHRva2VuKSwgX3VyaSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkUG9zdGZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKAogICAgICAgICJidWlsZFBvc3RmaXhJbmNyZW1lbnQiLCBvZmZzZXQgPz8gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pLCBfdXJpKTsKICB9CgogIEV4cHJlc3Npb24gZG9JbnZvY2F0aW9uKGludCBvZmZzZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiZG9JbnZvY2F0aW9uIiwgb2Zmc2V0LCBfdXJpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRPbihTdHJpbmdTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGUoIiwgbmFtZTogIik7CiAgICBzaW5rLndyaXRlKG5hbWUubmFtZSk7CiAgICBzaW5rLndyaXRlKCIsIGFyZ3VtZW50czogIik7CiAgICB2YXIgbm9kZSA9IGFyZ3VtZW50czsKICAgIGlmIChub2RlIGlzIE5vZGUpIHsKICAgICAgcHJpbnROb2RlT24obm9kZSwgc2luayk7CiAgICB9IGVsc2UgewogICAgICBzaW5rLndyaXRlKG5vZGUpOwogICAgfQogIH0KfQoKY2xhc3MgSW5jb21wbGV0ZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9yIGV4dGVuZHMgR2VuZXJhdG9yCiAgICB3aXRoIEluY29tcGxldGVTZW5kR2VuZXJhdG9yIHsKICBmaW5hbCBOYW1lIG5hbWU7CgogIEluY29tcGxldGVQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvcigKICAgICAgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIsIFRva2VuIHRva2VuLCB0aGlzLm5hbWUpCiAgICAgIDogc3VwZXIoaGVscGVyLCB0b2tlbik7CgogIFN0cmluZyBnZXQgX3BsYWluTmFtZUZvclJlYWQgPT4gbmFtZS5uYW1lOwoKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIkluY29tcGxldGVQcm9wZXJ0eUFjY2Vzc0dlbmVyYXRvciI7CgogIEV4cHJlc3Npb24gYnVpbGRTaW1wbGVSZWFkKCkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJidWlsZFNpbXBsZVJlYWQiLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIF91cmkpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZEFzc2lnbm1lbnQoRXhwcmVzc2lvbiB2YWx1ZSwge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJidWlsZEFzc2lnbm1lbnQiLCBvZmZzZXRGb3JUb2tlbih0b2tlbiksIF91cmkpOwogIH0KCiAgd2l0aFJlY2VpdmVyKE9iamVjdCByZWNlaXZlciwgaW50IG9wZXJhdG9yT2Zmc2V0LCB7Ym9vbCBpc051bGxBd2FyZTogZmFsc2V9KSB7CiAgICBpZiAocmVjZWl2ZXIgaXMgR2VuZXJhdG9yKSB7CiAgICAgIHJldHVybiByZWNlaXZlci5idWlsZFByb3BlcnR5QWNjZXNzKHRoaXMsIG9wZXJhdG9yT2Zmc2V0LCBpc051bGxBd2FyZSk7CiAgICB9CiAgICByZXR1cm4gUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3IubWFrZShfaGVscGVyLCB0b2tlbiwKICAgICAgICBfaGVscGVyLnRvVmFsdWUocmVjZWl2ZXIpLCBuYW1lLCBudWxsLCBudWxsLCBpc051bGxBd2FyZSk7CiAgfQoKICBFeHByZXNzaW9uIGJ1aWxkTnVsbEF3YXJlQXNzaWdubWVudCgKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSwgRGFydFR5cGUgdHlwZSwgaW50IG9mZnNldCwKICAgICAge2Jvb2wgdm9pZENvbnRleHQ6IGZhbHNlfSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJidWlsZE51bGxBd2FyZUFzc2lnbm1lbnQiLCBvZmZzZXQsIF91cmkpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZENvbXBvdW5kQXNzaWdubWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLCBFeHByZXNzaW9uIHZhbHVlLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0LAogICAgICBib29sIGlzUHJlSW5jRGVjOiBmYWxzZSwKICAgICAgYm9vbCBpc1Bvc3RJbmNEZWM6IGZhbHNlfSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKAogICAgICAgICJidWlsZENvbXBvdW5kQXNzaWdubWVudCIsIG9mZnNldCA/PyBvZmZzZXRGb3JUb2tlbih0b2tlbiksIF91cmkpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZFByZWZpeEluY3JlbWVudChOYW1lIGJpbmFyeU9wZXJhdG9yLAogICAgICB7aW50IG9mZnNldDogVHJlZU5vZGUubm9PZmZzZXQsCiAgICAgIGJvb2wgdm9pZENvbnRleHQ6IGZhbHNlLAogICAgICBQcm9jZWR1cmUgaW50ZXJmYWNlVGFyZ2V0fSkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKAogICAgICAgICJidWlsZFByZWZpeEluY3JlbWVudCIsIG9mZnNldCA/PyBvZmZzZXRGb3JUb2tlbih0b2tlbiksIF91cmkpOwogIH0KCiAgRXhwcmVzc2lvbiBidWlsZFBvc3RmaXhJbmNyZW1lbnQoTmFtZSBiaW5hcnlPcGVyYXRvciwKICAgICAge2ludCBvZmZzZXQ6IFRyZWVOb2RlLm5vT2Zmc2V0LAogICAgICBib29sIHZvaWRDb250ZXh0OiBmYWxzZSwKICAgICAgUHJvY2VkdXJlIGludGVyZmFjZVRhcmdldH0pIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgKICAgICAgICAiYnVpbGRQb3N0Zml4SW5jcmVtZW50Iiwgb2Zmc2V0ID8/IG9mZnNldEZvclRva2VuKHRva2VuKSwgX3VyaSk7CiAgfQoKICBFeHByZXNzaW9uIGRvSW52b2NhdGlvbihpbnQgb2Zmc2V0LCBBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImRvSW52b2NhdGlvbiIsIG9mZnNldCwgX3VyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50T24oU3RyaW5nU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlKCIsIG5hbWU6ICIpOwogICAgc2luay53cml0ZShuYW1lLm5hbWUpOwogIH0KfQoKY2xhc3MgUGFyZW50aGVzaXplZEV4cHJlc3Npb25HZW5lcmF0b3IgZXh0ZW5kcyBSZWFkT25seUFjY2Vzc0dlbmVyYXRvciB7CiAgUGFyZW50aGVzaXplZEV4cHJlc3Npb25HZW5lcmF0b3IoCiAgICAgIEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXIgaGVscGVyLCBUb2tlbiB0b2tlbiwgRXhwcmVzc2lvbiBleHByZXNzaW9uKQogICAgICA6IHN1cGVyKGhlbHBlciwgdG9rZW4sIGV4cHJlc3Npb24sIG51bGwpOwoKICBTdHJpbmcgZ2V0IF9kZWJ1Z05hbWUgPT4gIlBhcmVudGhlc2l6ZWRFeHByZXNzaW9uR2VuZXJhdG9yIjsKCiAgQG92ZXJyaWRlCiAgQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudCBzdGFydENvbXBsZXhBc3NpZ25tZW50KEV4cHJlc3Npb24gcmhzKSB7CiAgICByZXR1cm4gU3ludGhldGljV3JhcHBlci53cmFwSWxsZWdhbEFzc2lnbm1lbnQocmhzLAogICAgICAgIGFzc2lnbm1lbnRPZmZzZXQ6IG9mZnNldEZvclRva2VuKHRva2VuKSk7CiAgfQoKICBFeHByZXNzaW9uIF9tYWtlSW52YWxpZFdyaXRlKEV4cHJlc3Npb24gdmFsdWUpIHsKICAgIHJldHVybiBfaGVscGVyLndyYXBJbnZhbGlkV3JpdGUoCiAgICAgICAgX2hlbHBlci5kZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihfaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgbWVzc2FnZUNhbm5vdEFzc2lnblRvUGFyZW50aGVzaXplZEV4cHJlc3Npb24sCiAgICAgICAgICAgIG9mZnNldEZvclRva2VuKHRva2VuKSwKICAgICAgICAgICAgbGVuZ3RoRm9yVG9rZW4odG9rZW4pKSksCiAgICAgICAgZXhwcmVzc2lvbiwKICAgICAgICBvZmZzZXRGb3JUb2tlbih0b2tlbikpOwogIH0KfQoKRXhwcmVzc2lvbiBtYWtlTGV0KFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIEV4cHJlc3Npb24gYm9keSkgewogIGlmICh2YXJpYWJsZSA9PSBudWxsKSByZXR1cm4gYm9keTsKICByZXR1cm4gbmV3IExldCh2YXJpYWJsZSwgYm9keSk7Cn0KCkV4cHJlc3Npb24gbWFrZUJpbmFyeShFeHByZXNzaW9uIGxlZnQsIE5hbWUgb3BlcmF0b3IsIFByb2NlZHVyZSBpbnRlcmZhY2VUYXJnZXQsCiAgICBFeHByZXNzaW9uIHJpZ2h0LCBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlciwKICAgIHtpbnQgb2Zmc2V0OiBUcmVlTm9kZS5ub09mZnNldH0pIHsKICByZXR1cm4gbmV3IE1ldGhvZEludm9jYXRpb25KdWRnbWVudCgKICAgICAgbGVmdCwKICAgICAgb3BlcmF0b3IsCiAgICAgIGhlbHBlci5mb3Jlc3QKICAgICAgICAgIC5jYXN0QXJndW1lbnRzKGhlbHBlci5mb3Jlc3QuYXJndW1lbnRzKDxFeHByZXNzaW9uPltyaWdodF0sIG51bGwpKQogICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXQsCiAgICAgIGludGVyZmFjZVRhcmdldDogaW50ZXJmYWNlVGFyZ2V0KQogICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Owp9CgpFeHByZXNzaW9uIGJ1aWxkSXNOdWxsKAogICAgRXhwcmVzc2lvbiB2YWx1ZSwgaW50IG9mZnNldCwgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIpIHsKICByZXR1cm4gbWFrZUJpbmFyeSh2YWx1ZSwgZXF1YWxzTmFtZSwgbnVsbCwKICAgICAgaGVscGVyLmZvcmVzdC5saXRlcmFsTnVsbChudWxsKS4uZmlsZU9mZnNldCA9IG9mZnNldCwgaGVscGVyLAogICAgICBvZmZzZXQ6IG9mZnNldCk7Cn0KClZhcmlhYmxlRGVjbGFyYXRpb24gbWFrZU9yUmV1c2VWYXJpYWJsZShFeHByZXNzaW9uIHZhbHVlKSB7CiAgLy8gVE9ETzogRGV2aXNlIGEgd2F5IHRvIHJlbWVtYmVyIGlmIGEgdmFyaWFibGUgZGVjbGFyYXRpb24gd2FzIHJldXNlZAogIC8vIG9yIGlzIGZyZXNoIChoZW5jZSBuZWVkcyBhIGxldCBiaW5kaW5nKS4KICByZXR1cm4gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUodmFsdWUpOwp9CgppbnQgYWRqdXN0Rm9ySW1wbGljaXRDYWxsKFN0cmluZyBuYW1lLCBpbnQgb2Zmc2V0KSB7CiAgLy8gTm9ybWFsbHkgdGhlIG9mZnNldCBpcyBhdCB0aGUgc3RhcnQgb2YgdGhlIHRva2VuLCBidXQgaW4gdGhpcyBjYXNlLAogIC8vIGJlY2F1c2Ugd2UgaW5zZXJ0IGEgJy5jYWxsJywgd2Ugd2FudCBpdCBhdCB0aGUgZW5kIGluc3RlYWQuCiAgcmV0dXJuIG9m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cyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmV4cHJlc3Npb25fZ2VuZXJhdG9yX2hlbHBlcjsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICcuLi9jb25zdGFudF9jb250ZXh0LmRhcnQnIHNob3cgQ29uc3RhbnRDb250ZXh0OwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IExvY2F0ZWRNZXNzYWdlOwoKaW1wb3J0ICcuLi9tZXNzYWdlcy5kYXJ0JyBzaG93IE1lc3NhZ2U7CgppbXBvcnQgJy4uL3Njb3BlLmRhcnQnIHNob3cgU2NvcGU7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL2luZmVyZW5jZV9oZWxwZXIuZGFydCcgc2hvdyBJbmZlcmVuY2VIZWxwZXI7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfcHJvbW90aW9uLmRhcnQnIHNob3cgVHlwZVByb21vdGVyOwoKaW1wb3J0ICdjb25zdG5lc3MuZGFydCcgc2hvdyBDb25zdG5lc3M7CgppbXBvcnQgJ2ZvcmVzdC5kYXJ0JyBzaG93IEZvcmVzdDsKCmltcG9ydCAna2VybmVsX2J1aWxkZXIuZGFydCcgc2hvdyBEZWNsYXJhdGlvbiwgUHJlZml4QnVpbGRlciwgVW5yZXNvbHZlZFR5cGU7CgppbXBvcnQgJ2tlcm5lbF9hc3RfYXBpLmRhcnQnCiAgICBzaG93CiAgICAgICAgQXJndW1lbnRzLAogICAgICAgIENvbnN0cnVjdG9yLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIEV4cHJlc3Npb24sCiAgICAgICAgRnVuY3Rpb25Ob2RlLAogICAgICAgIEluaXRpYWxpemVyLAogICAgICAgIE1lbWJlciwKICAgICAgICBOYW1lLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBTdGF0aWNHZXQsCiAgICAgICAgVHlwZVBhcmFtZXRlcjsKCmltcG9ydCAna2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cgUHJlZml4QnVpbGRlciwgTGlicmFyeUJ1aWxkZXIsIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXI7CgphYnN0cmFjdCBjbGFzcyBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGltcGxlbWVudHMgSW5mZXJlbmNlSGVscGVyIHsKICBMaWJyYXJ5QnVpbGRlciBnZXQgbGlicmFyeTsKCiAgVHlwZVByb21vdGVyIGdldCB0eXBlUHJvbW90ZXI7CgogIGludCBnZXQgZnVuY3Rpb25OZXN0aW5nTGV2ZWw7CgogIENvbnN0YW50Q29udGV4dCBnZXQgY29uc3RhbnRDb250ZXh0OwoKICBGb3Jlc3QgZ2V0IGZvcmVzdDsKCiAgYm9vbCBnZXQgbGVnYWN5TW9kZTsKCiAgQ29uc3RydWN0b3IgbG9va3VwQ29uc3RydWN0b3IoTmFtZSBuYW1lLCB7Ym9vbCBpc1N1cGVyfSk7CgogIEV4cHJlc3Npb24gdG9WYWx1ZShub2RlKTsKCiAgTWVtYmVyIGxvb2t1cEluc3RhbmNlTWVtYmVyKE5hbWUgbmFtZSwge2Jvb2wgaXNTZXR0ZXIsIGJvb2wgaXNTdXBlcn0pOwoKICBzY29wZUxvb2t1cChTY29wZSBzY29wZSwgU3RyaW5nIG5hbWUsIFRva2VuIHRva2VuLAogICAgICB7Ym9vbCBpc1F1YWxpZmllZDogZmFsc2UsIFByZWZpeEJ1aWxkZXIgcHJlZml4fSk7CgogIGZpbmlzaFNlbmQoT2JqZWN0IHJlY2VpdmVyLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgb2Zmc2V0KTsKCiAgSW5pdGlhbGl6ZXIgYnVpbGRJbnZhbGlkSW5pdGlhbGl6ZXIoRXhwcmVzc2lvbiBleHByZXNzaW9uLCBbaW50IG9mZnNldF0pOwoKICBJbml0aWFsaXplciBidWlsZEZpZWxkSW5pdGlhbGl6ZXIoYm9vbCBpc1N5bnRoZXRpYywgU3RyaW5nIG5hbWUsCiAgICAgIGludCBmaWVsZE5hbWVPZmZzZXQsIGludCBhc3NpZ25tZW50T2Zmc2V0LCBFeHByZXNzaW9uIGV4cHJlc3Npb24sCiAgICAgIHtEYXJ0VHlwZSBmb3JtYWxUeXBlfSk7CgogIEluaXRpYWxpemVyIGJ1aWxkU3VwZXJJbml0aWFsaXplcigKICAgICAgYm9vbCBpc1N5bnRoZXRpYywgQ29uc3RydWN0b3IgY29uc3RydWN0b3IsIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIFtpbnQgb2Zmc2V0XSk7CgogIEluaXRpYWxpemVyIGJ1aWxkUmVkaXJlY3RpbmdJbml0aWFsaXplcigKICAgICAgQ29uc3RydWN0b3IgY29uc3RydWN0b3IsIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIFtpbnQgY2hhck9mZnNldCA9IC0xXSk7CgogIEV4cHJlc3Npb24gYnVpbGRTdGF0aWNJbnZvY2F0aW9uKFByb2NlZHVyZSB0YXJnZXQsIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIHtDb25zdG5lc3MgY29uc3RuZXNzLCBpbnQgY2hhck9mZnNldH0pOwoKICBFeHByZXNzaW9uIHRocm93Tm9TdWNoTWV0aG9kRXJyb3IoCiAgICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsIFN0cmluZyBuYW1lLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgb2Zmc2V0LAogICAgICB7TWVtYmVyIGNhbmRpZGF0ZSwKICAgICAgYm9vbCBpc1N1cGVyLAogICAgICBib29sIGlzR2V0dGVyLAogICAgICBib29sIGlzU2V0dGVyLAogICAgICBib29sIGlzU3RhdGljLAogICAgICBMb2NhdGVkTWVzc2FnZSBtZXNzYWdlfSk7CgogIExvY2F0ZWRNZXNzYWdlIGNoZWNrQXJndW1lbnRzRm9yRnVuY3Rpb24oRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uLAogICAgICBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgb2Zmc2V0LCBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzKTsKCiAgU3RhdGljR2V0IG1ha2VTdGF0aWNHZXQoTWVtYmVyIHJlYWRUYXJnZXQsIFRva2VuIHRva2VuKTsKCiAgRXhwcmVzc2lvbiB3cmFwSW5EZWZlcnJlZENoZWNrKAogICAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24sIFByZWZpeEJ1aWxkZXIgcHJlZml4LCBpbnQgY2hhck9mZnNldCk7CgogIGJvb2wgaXNJZGVudGljYWwoTWVtYmVyIG1lbWJlcik7CgogIEV4cHJlc3Npb24gYnVpbGRNZXRob2RJbnZvY2F0aW9uKAogICAgICBFeHByZXNzaW9uIHJlY2VpdmVyLCBOYW1lIG5hbWUsIEFyZ3VtZW50cyBhcmd1bWVudHMsIGludCBvZmZzZXQsCiAgICAgIHtib29sIGlzQ29uc3RhbnRFeHByZXNzaW9uLAogICAgICBib29sIGlzTnVsbEF3YXJlLAogICAgICBib29sIGlzSW1wbGljaXRDYWxsLAogICAgICBib29sIGlzU3VwZXIsCiAgICAgIE1lbWJlciBpbnRlcmZhY2VUYXJnZXR9KTsKCiAgRXhwcmVzc2lvbiBidWlsZENvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciB0eXBlLAogICAgICBUb2tlbiBuYW1lVG9rZW4sCiAgICAgIFRva2VuIG5hbWVMYXN0VG9rZW4sCiAgICAgIEFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBMaXN0PFVucmVzb2x2ZWRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBpbnQgY2hhck9mZnNldCwKICAgICAgQ29uc3RuZXNzIGNvbnN0bmVzcyk7CgogIFVucmVzb2x2ZWRUeXBlIHZhbGlkYXRlVHlwZVVzZSgKICAgICAgVW5yZXNvbHZlZFR5cGUgdW5yZXNvbHZlZCwgYm9vbCBub25JbnN0YW5jZUFjY2Vzc0lzRXJyb3IpOwoKICB2b2lkIGFkZFByb2JsZW1FcnJvcklmQ29uc3QoTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCk7CgogIE1lc3NhZ2Ugd2FyblVucmVzb2x2ZWRHZXQoTmFtZSBuYW1lLCBpbnQgY2hhck9mZnNldCwge2Jvb2wgaXNTdXBlcn0pOwoKICBNZXNzYWdlIHdhcm5VbnJlc29sdmVkU2V0KE5hbWUgbmFtZSwgaW50IGNoYXJPZmZzZXQsIHtib29sIGlzU3VwZXJ9KTsKCiAgTWVzc2FnZSB3YXJuVW5yZXNvbHZlZE1ldGhvZChOYW1lIG5hbWUsIGludCBjaGFyT2Zmc2V0LCB7Ym9vbCBpc1N1cGVyfSk7CgogIHZvaWQgd2FyblR5cGVBcmd1bWVudHNNaXNtYXRjaChTdHJpbmcgbmFtZSwgaW50IGV4cGVjdGVkLCBpbnQgY2hhck9mZnNldCk7CgogIEV4cHJlc3Npb24gd3JhcEluTG9jYXRlZFByb2JsZW0oRXhwcmVzc2lvbiBleHByZXNzaW9uLCBMb2NhdGVkTWVzc2FnZSBtZXNzYWdlLAogICAgICB7TGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dH0pOwoKICBFeHByZXNzaW9uIGV2YWx1YXRlQXJndW1lbnRzQmVmb3JlKAogICAgICBBcmd1bWVudHMgYXJndW1lbnRzLCBFeHByZXNzaW9uIGV4cHJlc3Npb24pOwoKICBEYXJ0VHlwZSBidWlsZERhcnRUeXBlKFVucmVzb2x2ZWRUeXBlIHVucmVzb2x2ZWRUeXBlLAogICAgICB7Ym9vbCBub25JbnN0YW5jZUFjY2Vzc0lzRXJyb3J9KTsKCiAgTGlzdDxEYXJ0VHlwZT4gYnVpbGREYXJ0VHlwZUFyZ3VtZW50cyhMaXN0PFVucmVzb2x2ZWRUeXBlPiB1bnJlc29sdmVkVHlwZXMpOwoKICB2b2lkIHJlcG9ydER1cGxpY2F0ZWREZWNsYXJhdGlvbigKICAgICAgRGVjbGFyYXRpb24gZXhpc3RpbmcsIFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCk7CgogIEV4cHJlc3Npb24gd3JhcFN5bnRoZXRpY0V4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlLCBpbnQgY2hhck9mZnNldCk7CgogIEV4cHJlc3Npb24gd3JhcEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb24oRXhwcmVzc2lvbiBkZXN1Z2FyZWQsCiAgICAgIE1lbWJlciBjb25zdHJ1Y3RvciwgQXJndW1lbnRzIGFyZ3VtZW50cywgaW50IGNoYXJPZmZzZXQpOwoKICBFeHByZXNzaW9uIHdyYXBJbnZhbGlkV3JpdGUoCiAgICAgIEV4cHJlc3Npb24gZGVzdWdhcmVkLCBFeHByZXNzaW9uIGV4cHJlc3Npb24sIGludCBjaGFyT2Zmc2V0KTsKCiAgRXhwcmVzc2lvbiB3cmFwVW5yZXNvbHZlZFRhcmdldEludm9jYXRpb24oCiAgICAgIEV4cHJlc3Npb24gZGVzdWdhcmVkLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgY2hhck9mZnNldCk7CgogIEV4cHJlc3Npb24gd3JhcFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnQoCiAgICAgIEV4cHJlc3Npb24gZGVzdWdhcmVkLCBib29sIGlzQ29tcG91bmQsIEV4cHJlc3Npb24gcmhzLCBpbnQgY2hhck9mZnNldCk7Cn0KgKQATk48ASsBLgE4ATIBKAEjAUcBQgEoASIBTgEdCRMVEhQWFRAOExMXAR1AAUYeASEBIAEnARUBFwE8ARwBSQE1OAFAAUwBQ0geASVGFQErNB4BSi4BJUkZFBUVFSABQkwBOwEiRAEjASRHIhgbFCABKSMXGxsTKhYcASJBAUwBSAFIAUsBTQFRJwEmMwE4KAFPASQ6AUcBREABH0QBLUIBL04CAUNwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2V4cHJlc3Npb25fZ2VuZXJhdG9yX2hlbHBlci5kYXJ0OHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvZmFuZ29ybi5kYXJ0wABLgS8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmZhbmdvcm47CgppbXBvcnQgJ2RhcnQ6Y29yZScgaGlkZSBNYXBFbnRyeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQXJndW1lbnRzLAogICAgICAgIEFzRXhwcmVzc2lvbiwKICAgICAgICBBc3NlcnRJbml0aWFsaXplciwKICAgICAgICBBd2FpdEV4cHJlc3Npb24sCiAgICAgICAgQmxvY2ssCiAgICAgICAgQm9vbExpdGVyYWwsCiAgICAgICAgQnJlYWtTdGF0ZW1lbnQsCiAgICAgICAgQ2F0Y2gsCiAgICAgICAgQ2hlY2tMaWJyYXJ5SXNMb2FkZWQsCiAgICAgICAgQ29uZGl0aW9uYWxFeHByZXNzaW9uLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIEVtcHR5U3RhdGVtZW50LAogICAgICAgIEV4cHJlc3Npb24sCiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudCwKICAgICAgICBJbnZhbGlkRXhwcmVzc2lvbiwKICAgICAgICBJc0V4cHJlc3Npb24sCiAgICAgICAgTGFiZWxlZFN0YXRlbWVudCwKICAgICAgICBMZXQsCiAgICAgICAgTGlicmFyeURlcGVuZGVuY3ksCiAgICAgICAgTG9naWNhbEV4cHJlc3Npb24sCiAgICAgICAgTWFwRW50cnksCiAgICAgICAgTmFtZWRFeHByZXNzaW9uLAogICAgICAgIE5vdCwKICAgICAgICBOdWxsTGl0ZXJhbCwKICAgICAgICBSZXRocm93LAogICAgICAgIFN0YXRlbWVudCwKICAgICAgICBTdHJpbmdDb25jYXRlbmF0aW9uLAogICAgICAgIFN0cmluZ0xpdGVyYWwsCiAgICAgICAgVGhpc0V4cHJlc3Npb24sCiAgICAgICAgVGhyb3csCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiwKICAgICAgICBzZXRQYXJlbnRzOwoKaW1wb3J0ICcuLi9wYXJzZXIuZGFydCcgc2hvdyBvZmZzZXRGb3JUb2tlbiwgb3B0aW9uYWw7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5zdXBwb3J0ZWQ7CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnYm9keV9idWlsZGVyLmRhcnQnIHNob3cgTGFiZWxUYXJnZXQ7CgppbXBvcnQgJ2NvbGxlY3Rpb25zLmRhcnQnCiAgICBzaG93CiAgICAgICAgRm9yRWxlbWVudCwKICAgICAgICBGb3JJbkVsZW1lbnQsCiAgICAgICAgRm9ySW5NYXBFbnRyeSwKICAgICAgICBGb3JNYXBFbnRyeSwKICAgICAgICBJZkVsZW1lbnQsCiAgICAgICAgSWZNYXBFbnRyeSwKICAgICAgICBTcHJlYWRFbGVtZW50OwoKaW1wb3J0ICdrZXJuZWxfc2hhZG93X2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIEFyZ3VtZW50c0p1ZGdtZW50LAogICAgICAgIEFzc2VydEluaXRpYWxpemVySnVkZ21lbnQsCiAgICAgICAgQXNzZXJ0U3RhdGVtZW50SnVkZ21lbnQsCiAgICAgICAgQmxvY2tKdWRnbWVudCwKICAgICAgICBDYXRjaEp1ZGdtZW50LAogICAgICAgIERvSnVkZ21lbnQsCiAgICAgICAgRG91YmxlSnVkZ21lbnQsCiAgICAgICAgRW1wdHlTdGF0ZW1lbnRKdWRnbWVudCwKICAgICAgICBFeHByZXNzaW9uU3RhdGVtZW50SnVkZ21lbnQsCiAgICAgICAgRm9ySnVkZ21lbnQsCiAgICAgICAgSWZKdWRnbWVudCwKICAgICAgICBJbnRKdWRnbWVudCwKICAgICAgICBMaXN0TGl0ZXJhbEp1ZGdtZW50LAogICAgICAgIExvYWRMaWJyYXJ5SnVkZ21lbnQsCiAgICAgICAgTWFwTGl0ZXJhbEp1ZGdtZW50LAogICAgICAgIFJldHVybkp1ZGdtZW50LAogICAgICAgIFNldExpdGVyYWxKdWRnbWVudCwKICAgICAgICBTaGFkb3dMYXJnZUludExpdGVyYWwsCiAgICAgICAgU3ltYm9sTGl0ZXJhbEp1ZGdtZW50LAogICAgICAgIFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCwKICAgICAgICBUcnlDYXRjaEp1ZGdtZW50LAogICAgICAgIFRyeUZpbmFsbHlKdWRnbWVudCwKICAgICAgICBUeXBlTGl0ZXJhbEp1ZGdtZW50LAogICAgICAgIFdoaWxlSnVkZ21lbnQsCiAgICAgICAgWWllbGRKdWRnbWVudDsKCmltcG9ydCAnZm9yZXN0LmRhcnQnIHNob3cgRm9yZXN0OwoKLy8vIEEgc2hhZG93IHRyZWUgZmFjdG9yeS4KY2xhc3MgRmFuZ29ybiBleHRlbmRzIEZvcmVzdCB7CiAgY29uc3QgRmFuZ29ybigpOwoKICBAb3ZlcnJpZGUKICBBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHMoTGlzdDxFeHByZXNzaW9uPiBwb3NpdGlvbmFsLCBUb2tlbiB0b2tlbiwKICAgICAge0xpc3Q8RGFydFR5cGU+IHR5cGVzLCBMaXN0PE5hbWVkRXhwcmVzc2lvbj4gbmFtZWR9KSB7CiAgICByZXR1cm4gbmV3IEFyZ3VtZW50c0p1ZGdtZW50KHBvc2l0aW9uYWwsIHR5cGVzOiB0eXBlcywgbmFtZWQ6IG5hbWVkKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBBcmd1bWVudHNKdWRnbWVudCBhcmd1bWVudHNFbXB0eShUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIGFyZ3VtZW50cyg8RXhwcmVzc2lvbj5bXSwgdG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxOYW1lZEV4cHJlc3Npb24+IGFyZ3VtZW50c05hbWVkKEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBhcmd1bWVudHMubmFtZWQ7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PEV4cHJlc3Npb24+IGFyZ3VtZW50c1Bvc2l0aW9uYWwoQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIGFyZ3VtZW50cy5wb3NpdGlvbmFsOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzVHlwZUFyZ3VtZW50cyhBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gYXJndW1lbnRzLnR5cGVzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhcmd1bWVudHNTZXRUeXBlQXJndW1lbnRzKEFyZ3VtZW50cyBhcmd1bWVudHMsIExpc3Q8RGFydFR5cGU+IHR5cGVzKSB7CiAgICBBcmd1bWVudHNKdWRnbWVudC5zZXROb25JbmZlcnJhYmxlQXJndW1lbnRUeXBlcyhhcmd1bWVudHMsIHR5cGVzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZ0xpdGVyYWwgYXNMaXRlcmFsU3RyaW5nKEV4cHJlc3Npb24gdmFsdWUpID0+IHZhbHVlOwoKICBAb3ZlcnJpZGUKICBCb29sTGl0ZXJhbCBsaXRlcmFsQm9vbChib29sIHZhbHVlLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBCb29sTGl0ZXJhbCh2YWx1ZSkuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBEb3VibGVKdWRnbWVudCBsaXRlcmFsRG91YmxlKGRvdWJsZSB2YWx1ZSwgVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBuZXcgRG91YmxlSnVkZ21lbnQodmFsdWUpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50SnVkZ21lbnQgbGl0ZXJhbEludChpbnQgdmFsdWUsIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IEludEp1ZGdtZW50KHZhbHVlLCB0b2tlbj8ubGV4ZW1lKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBTaGFkb3dMYXJnZUludExpdGVyYWwgbGl0ZXJhbExhcmdlSW50KFN0cmluZyBsaXRlcmFsLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBTaGFkb3dMYXJnZUludExpdGVyYWwobGl0ZXJhbCwgb2Zmc2V0Rm9yVG9rZW4odG9rZW4pKTsKICB9CgogIEBvdmVycmlkZQogIExpc3RMaXRlcmFsSnVkZ21lbnQgbGl0ZXJhbExpc3QoCiAgICAgIFRva2VuIGNvbnN0S2V5d29yZCwKICAgICAgYm9vbCBpc0NvbnN0LAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50LAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50cywKICAgICAgVG9rZW4gbGVmdEJyYWNrZXQsCiAgICAgIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMsCiAgICAgIFRva2VuIHJpZ2h0QnJhY2tldCkgewogICAgLy8gVE9ETyhicmlhbndpbGtlcnNvbik6IFRoZSBmaWxlIG9mZnNldCBjb21wdXRlZCBiZWxvdyB3aWxsIG5vdCBiZSBjb3JyZWN0CiAgICAvLyBpZiB0aGVyZSBhcmUgdHlwZSBhcmd1bWVudHMgYnV0IG5vIGBjb25zdGAga2V5d29yZC4KICAgIHJldHVybiBuZXcgTGlzdExpdGVyYWxKdWRnbWVudChleHByZXNzaW9ucywKICAgICAgICB0eXBlQXJndW1lbnQ6IHR5cGVBcmd1bWVudCwgaXNDb25zdDogaXNDb25zdCkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4oY29uc3RLZXl3b3JkID8/IGxlZnRCcmFja2V0KTsKICB9CgogIEBvdmVycmlkZQogIFNldExpdGVyYWxKdWRnbWVudCBsaXRlcmFsU2V0KAogICAgICBUb2tlbiBjb25zdEtleXdvcmQsCiAgICAgIGJvb2wgaXNDb25zdCwKICAgICAgT2JqZWN0IHR5cGVBcmd1bWVudCwKICAgICAgT2JqZWN0IHR5cGVBcmd1bWVudHMsCiAgICAgIFRva2VuIGxlZnRCcmFjZSwKICAgICAgTGlzdDxFeHByZXNzaW9uPiBleHByZXNzaW9ucywKICAgICAgVG9rZW4gcmlnaHRCcmFjZSkgewogICAgLy8gVE9ETyhicmlhbndpbGtlcnNvbik6IFRoZSBmaWxlIG9mZnNldCBjb21wdXRlZCBiZWxvdyB3aWxsIG5vdCBiZSBjb3JyZWN0CiAgICAvLyBpZiB0aGVyZSBhcmUgdHlwZSBhcmd1bWVudHMgYnV0IG5vIGBjb25zdGAga2V5d29yZC4KICAgIHJldHVybiBuZXcgU2V0TGl0ZXJhbEp1ZGdtZW50KGV4cHJlc3Npb25zLAogICAgICAgIHR5cGVBcmd1bWVudDogdHlwZUFyZ3VtZW50LCBpc0NvbnN0OiBpc0NvbnN0KQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihjb25zdEtleXdvcmQgPz8gbGVmdEJyYWNlKTsKICB9CgogIEBvdmVycmlkZQogIE1hcExpdGVyYWxKdWRnbWVudCBsaXRlcmFsTWFwKAogICAgICBUb2tlbiBjb25zdEtleXdvcmQsCiAgICAgIGJvb2wgaXNDb25zdCwKICAgICAgRGFydFR5cGUga2V5VHlwZSwKICAgICAgRGFydFR5cGUgdmFsdWVUeXBlLAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50cywKICAgICAgVG9rZW4gbGVmdEJyYWNlLAogICAgICBMaXN0PE1hcEVudHJ5PiBlbnRyaWVzLAogICAgICBUb2tlbiByaWdodEJyYWNlKSB7CiAgICAvLyBUT0RPKGJyaWFud2lsa2Vyc29uKTogVGhlIGZpbGUgb2Zmc2V0IGNvbXB1dGVkIGJlbG93IHdpbGwgbm90IGJlIGNvcnJlY3QKICAgIC8vIGlmIHRoZXJlIGFyZSB0eXBlIGFyZ3VtZW50cyBidXQgbm8gYGNvbnN0YCBrZXl3b3JkLgogICAgcmV0dXJuIG5ldyBNYXBMaXRlcmFsSnVkZ21lbnQoZW50cmllcywKICAgICAgICBrZXlUeXBlOiBrZXlUeXBlLCB2YWx1ZVR5cGU6IHZhbHVlVHlwZSwgaXNDb25zdDogaXNDb25zdCkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4oY29uc3RLZXl3b3JkID8/IGxlZnRCcmFjZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBOdWxsTGl0ZXJhbCBsaXRlcmFsTnVsbChUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBOdWxsTGl0ZXJhbCgpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nTGl0ZXJhbCBsaXRlcmFsU3RyaW5nKFN0cmluZyB2YWx1ZSwgVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBuZXcgU3RyaW5nTGl0ZXJhbCh2YWx1ZSkuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBTeW1ib2xMaXRlcmFsSnVkZ21lbnQgbGl0ZXJhbFN5bWJvbE11bHRpcGxlKFN0cmluZyB2YWx1ZSwgVG9rZW4gaGFzaCwgXykgewogICAgcmV0dXJuIG5ldyBTeW1ib2xMaXRlcmFsSnVkZ21lbnQodmFsdWUpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4oaGFzaCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTeW1ib2xMaXRlcmFsSnVkZ21lbnQgbGl0ZXJhbFN5bWJvbFNpbmdsdWFyKFN0cmluZyB2YWx1ZSwgVG9rZW4gaGFzaCwgXykgewogICAgcmV0dXJuIG5ldyBTeW1ib2xMaXRlcmFsSnVkZ21lbnQodmFsdWUpLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4oaGFzaCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTGl0ZXJhbEp1ZGdtZW50IGxpdGVyYWxUeXBlKERhcnRUeXBlIHR5cGUsIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IFR5cGVMaXRlcmFsSnVkZ21lbnQodHlwZSkuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXBFbnRyeSBtYXBFbnRyeShFeHByZXNzaW9uIGtleSwgVG9rZW4gY29sb24sIEV4cHJlc3Npb24gdmFsdWUpIHsKICAgIHJldHVybiBuZXcgTWFwRW50cnkoa2V5LCB2YWx1ZSkuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihjb2xvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgcmVhZE9mZnNldChUcmVlTm9kZSBub2RlKSA9PiBub2RlLmZpbGVPZmZzZXQ7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gbG9hZExpYnJhcnkoTGlicmFyeURlcGVuZGVuY3kgZGVwZW5kZW5jeSwgQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBMb2FkTGlicmFyeUp1ZGdtZW50KGRlcGVuZGVuY3ksIGFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGNoZWNrTGlicmFyeUlzTG9hZGVkKExpYnJhcnlEZXBlbmRlbmN5IGRlcGVuZGVuY3kpIHsKICAgIHJldHVybiBuZXcgQ2hlY2tMaWJyYXJ5SXNMb2FkZWQoZGVwZW5kZW5jeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGFzRXhwcmVzc2lvbihFeHByZXNzaW9uIGV4cHJlc3Npb24sIERhcnRUeXBlIHR5cGUsIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IEFzRXhwcmVzc2lvbihleHByZXNzaW9uLCB0eXBlKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHNwcmVhZEVsZW1lbnQoRXhwcmVzc2lvbiBleHByZXNzaW9uLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBTcHJlYWRFbGVtZW50KGV4cHJlc3Npb24sIHRva2VuLmxleGVtZSA9PSAnLi4uPycpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gaWZFbGVtZW50KEV4cHJlc3Npb24gY29uZGl0aW9uLCBFeHByZXNzaW9uIHRoZW4sCiAgICAgIEV4cHJlc3Npb24gb3RoZXJ3aXNlLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBJZkVsZW1lbnQoY29uZGl0aW9uLCB0aGVuLCBvdGhlcndpc2UpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIE1hcEVudHJ5IGlmTWFwRW50cnkoCiAgICAgIEV4cHJlc3Npb24gY29uZGl0aW9uLCBNYXBFbnRyeSB0aGVuLCBNYXBFbnRyeSBvdGhlcndpc2UsIFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gbmV3IElmTWFwRW50cnkoY29uZGl0aW9uLCB0aGVuLCBvdGhlcndpc2UpCiAgICAgIC4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZm9yRWxlbWVudCgKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXMsCiAgICAgIEV4cHJlc3Npb24gY29uZGl0aW9uLAogICAgICBMaXN0PEV4cHJlc3Npb24+IHVwZGF0ZXMsCiAgICAgIEV4cHJlc3Npb24gYm9keSwKICAgICAgVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBuZXcgRm9yRWxlbWVudCh2YXJpYWJsZXMsIGNvbmRpdGlvbiwgdXBkYXRlcywgYm9keSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwRW50cnkgZm9yTWFwRW50cnkoCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzLAogICAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiwKICAgICAgTGlzdDxFeHByZXNzaW9uPiB1cGRhdGVzLAogICAgICBNYXBFbnRyeSBib2R5LAogICAgICBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBGb3JNYXBFbnRyeSh2YXJpYWJsZXMsIGNvbmRpdGlvbiwgdXBkYXRlcywgYm9keSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBmb3JJbkVsZW1lbnQoVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgRXhwcmVzc2lvbiBpdGVyYWJsZSwKICAgICAgU3RhdGVtZW50IHByb2xvZ3VlLCBFeHByZXNzaW9uIGJvZHksIEV4cHJlc3Npb24gcHJvYmxlbSwgVG9rZW4gdG9rZW4sCiAgICAgIHtib29sIGlzQXN5bmM6IGZhbHNlfSkgewogICAgcmV0dXJuIG5ldyBGb3JJbkVsZW1lbnQodmFyaWFibGUsIGl0ZXJhYmxlLCBwcm9sb2d1ZSwgYm9keSwgcHJvYmxlbSwKICAgICAgICBpc0FzeW5jOiBpc0FzeW5jKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXBFbnRyeSBmb3JJbk1hcEVudHJ5KFZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUsIEV4cHJlc3Npb24gaXRlcmFibGUsCiAgICAgIFN0YXRlbWVudCBwcm9sb2d1ZSwgTWFwRW50cnkgYm9keSwgRXhwcmVzc2lvbiBwcm9ibGVtLCBUb2tlbiB0b2tlbiwKICAgICAge2Jvb2wgaXNBc3luYzogZmFsc2V9KSB7CiAgICByZXR1cm4gbmV3IEZvckluTWFwRW50cnkodmFyaWFibGUsIGl0ZXJhYmxlLCBwcm9sb2d1ZSwgYm9keSwgcHJvYmxlbSwKICAgICAgICBpc0FzeW5jOiBpc0FzeW5jKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBBc3NlcnRJbml0aWFsaXplciBhc3NlcnRJbml0aWFsaXplcigKICAgICAgVG9rZW4gYXNzZXJ0S2V5d29yZCwKICAgICAgVG9rZW4gbGVmdFBhcmVudGhlc2lzLAogICAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiwKICAgICAgVG9rZW4gY29tbWEsCiAgICAgIEV4cHJlc3Npb24gbWVzc2FnZSkgewogICAgcmV0dXJuIG5ldyBBc3NlcnRJbml0aWFsaXplckp1ZGdtZW50KGFzc2VydFN0YXRlbWVudCgKICAgICAgICBhc3NlcnRLZXl3b3JkLCBsZWZ0UGFyZW50aGVzaXMsIGNvbmRpdGlvbiwgY29tbWEsIG1lc3NhZ2UsIG51bGwpKTsKICB9CgogIEBvdmVycmlkZQogIFN0YXRlbWVudCBhc3NlcnRTdGF0ZW1lbnQoVG9rZW4gYXNzZXJ0S2V5d29yZCwgVG9rZW4gbGVmdFBhcmVudGhlc2lzLAogICAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiwgVG9rZW4gY29tbWEsIEV4cHJlc3Npb24gbWVzc2FnZSwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICAvLyBDb21wdXRlIHN0YXJ0IGFuZCBlbmQgb2Zmc2V0cyBmb3IgdGhlIGNvbmRpdGlvbiBleHByZXNzaW9uLgogICAgLy8gVGhpcyBjb2RlIGlzIGEgdGVtcG9yYXJ5IHdvcmthcm91bmQgYmVjYXVzZSBleHByZXNzaW9ucyBkb24ndCBjYXJyeQogICAgLy8gdGhlaXIgc3RhcnQgYW5kIGVuZCBvZmZzZXRzIGN1cnJlbnRseS4KICAgIC8vCiAgICAvLyBUaGUgdG9rZW4gdGhhdCBmb2xsb3dzIGxlZnRQYXJlbnRoZXNpcyBpcyBjb25zaWRlcmVkIHRvIGJlIHRoZQogICAgLy8gZmlyc3QgdG9rZW4gb2YgdGhlIGNvbmRpdGlvbi4KICAgIC8vIFRPRE8oYWhlKTogdGhpcyByZWFsbHkgc2hvdWxkIGJlIGNvbmRpdGlvbi5maWxlT2Zmc2V0LgogICAgaW50IHN0YXJ0T2Zmc2V0ID0gbGVmdFBhcmVudGhlc2lzLm5leHQub2Zmc2V0OwogICAgaW50IGVuZE9mZnNldDsKICAgIHsKICAgICAgLy8gU2VhcmNoIGZvcndhcmQgZnJvbSBsZWZ0UGFyZW50aGVzaXMgdG8gZmluZCB0aGUgbGFzdCB0b2tlbiBvZgogICAgICAvLyB0aGUgY29uZGl0aW9uIC0gd2hpY2ggaXMgYSB0b2tlbiBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIGNvbW1hVG9rZW4sCiAgICAgIC8vIHJpZ2h0IHBhcmVudGhlc2lzIG9yIGEgdHJhaWxpbmcgY29tbWEuCiAgICAgIFRva2VuIGNvbmRpdGlvbkJvdW5kYXJ5ID0gY29tbWEgPz8gbGVmdFBhcmVudGhlc2lzLmVuZEdyb3VwOwogICAgICBUb2tlbiBjb25kaXRpb25MYXN0VG9rZW4gPSBsZWZ0UGFyZW50aGVzaXM7CiAgICAgIHdoaWxlICghY29uZGl0aW9uTGFzdFRva2VuLmlzRW9mKSB7CiAgICAgICAgVG9rZW4gbmV4dFRva2VuID0gY29uZGl0aW9uTGFzdFRva2VuLm5leHQ7CiAgICAgICAgaWYgKG5leHRUb2tlbiA9PSBjb25kaXRpb25Cb3VuZGFyeSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgnLCcsIG5leHRUb2tlbikgJiYKICAgICAgICAgICAgbmV4dFRva2VuLm5leHQgPT0gY29uZGl0aW9uQm91bmRhcnkpIHsKICAgICAgICAgIC8vIFRoZSBuZXh0IHRva2VuIGlzIHRyYWlsaW5nIGNvbW1hLCB3aGljaCBtZWFucyBjdXJyZW50IHRva2VuIGlzCiAgICAgICAgICAvLyB0aGUgbGFzdCB0b2tlbiBvZiB0aGUgY29uZGl0aW9uLgogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNvbmRpdGlvbkxhc3RUb2tlbiA9IG5leHRUb2tlbjsKICAgICAgfQogICAgICBpZiAoY29uZGl0aW9uTGFzdFRva2VuLmlzRW9mKSB7CiAgICAgICAgZW5kT2Zmc2V0ID0gc3RhcnRPZmZzZXQgPSAtMTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlbmRPZmZzZXQgPSBjb25kaXRpb25MYXN0VG9rZW4ub2Zmc2V0ICsgY29uZGl0aW9uTGFzdFRva2VuLmxlbmd0aDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBBc3NlcnRTdGF0ZW1lbnRKdWRnbWVudChjb25kaXRpb24sCiAgICAgICAgY29uZGl0aW9uU3RhcnRPZmZzZXQ6IHN0YXJ0T2Zmc2V0LAogICAgICAgIGNvbmRpdGlvbkVuZE9mZnNldDogZW5kT2Zmc2V0LAogICAgICAgIG1lc3NhZ2U6IG1lc3NhZ2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBhd2FpdEV4cHJlc3Npb24oRXhwcmVzc2lvbiBvcGVyYW5kLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBBd2FpdEV4cHJlc3Npb24ob3BlcmFuZCkuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdGF0ZW1lbnQgYmxvY2soCiAgICAgIFRva2VuIG9wZW5CcmFjZSwgTGlzdDxTdGF0ZW1lbnQ+IHN0YXRlbWVudHMsIFRva2VuIGNsb3NlQnJhY2UpIHsKICAgIExpc3Q8U3RhdGVtZW50PiBjb3B5OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0ZW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIFN0YXRlbWVudCBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRzW2ldOwogICAgICBpZiAoc3RhdGVtZW50IGlzIF9WYXJpYWJsZXNEZWNsYXJhdGlvbikgewogICAgICAgIGNvcHkgPz89IG5ldyBMaXN0PFN0YXRlbWVudD4uZnJvbShzdGF0ZW1lbnRzLmdldFJhbmdlKDAsIGkpKTsKICAgICAgICBjb3B5LmFkZEFsbChzdGF0ZW1lbnQuZGVjbGFyYXRpb25zKTsKICAgICAgfSBlbHNlIGlmIChjb3B5ICE9IG51bGwpIHsKICAgICAgICBjb3B5LmFkZChzdGF0ZW1lbnQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IEJsb2NrSnVkZ21lbnQoY29weSA/PyBzdGF0ZW1lbnRzKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihvcGVuQnJhY2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RhdGVtZW50IGJyZWFrU3RhdGVtZW50KFRva2VuIGJyZWFrS2V5d29yZCwgT2JqZWN0IGxhYmVsLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIHJldHVybiBuZXcgQnJlYWtTdGF0ZW1lbnQobnVsbCkuLmZpbGVPZmZzZXQgPSBicmVha0tleXdvcmQuY2hhck9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIENhdGNoIGNhdGNoQ2xhdXNlKAogICAgICBUb2tlbiBvbktleXdvcmQsCiAgICAgIERhcnRUeXBlIGV4Y2VwdGlvblR5cGUsCiAgICAgIFRva2VuIGNhdGNoS2V5d29yZCwKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBleGNlcHRpb25QYXJhbWV0ZXIsCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gc3RhY2tUcmFjZVBhcmFtZXRlciwKICAgICAgRGFydFR5cGUgc3RhY2tUcmFjZVR5cGUsCiAgICAgIFN0YXRlbWVudCBib2R5KSB7CiAgICByZXR1cm4gbmV3IENhdGNoSnVkZ21lbnQoZXhjZXB0aW9uUGFyYW1ldGVyLCBib2R5LAogICAgICAgIGd1YXJkOiBleGNlcHRpb25UeXBlLCBzdGFja1RyYWNlOiBzdGFja1RyYWNlUGFyYW1ldGVyKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihvbktleXdvcmQgPz8gY2F0Y2hLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gY29uZGl0aW9uYWxFeHByZXNzaW9uKEV4cHJlc3Npb24gY29uZGl0aW9uLCBUb2tlbiBxdWVzdGlvbiwKICAgICAgRXhwcmVzc2lvbiB0aGVuRXhwcmVzc2lvbiwgVG9rZW4gY29sb24sIEV4cHJlc3Npb24gZWxzZUV4cHJlc3Npb24pIHsKICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxFeHByZXNzaW9uKAogICAgICAgIGNvbmRpdGlvbiwgdGhlbkV4cHJlc3Npb24sIGVsc2VFeHByZXNzaW9uLCBudWxsKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihxdWVzdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdGF0ZW1lbnQgY29udGludWVTdGF0ZW1lbnQoCiAgICAgIFRva2VuIGNvbnRpbnVlS2V5d29yZCwgT2JqZWN0IGxhYmVsLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIHJldHVybiBuZXcgQnJlYWtTdGF0ZW1lbnQobnVsbCkuLmZpbGVPZmZzZXQgPSBjb250aW51ZUtleXdvcmQuY2hhck9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIFN0YXRlbWVudCBkb1N0YXRlbWVudChUb2tlbiBkb0tleXdvcmQsIFN0YXRlbWVudCBib2R5LCBUb2tlbiB3aGlsZUtleXdvcmQsCiAgICAgIEV4cHJlc3Npb24gY29uZGl0aW9uLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIHJldHVybiBuZXcgRG9KdWRnbWVudChib2R5LCBjb25kaXRpb24pLi5maWxlT2Zmc2V0ID0gZG9LZXl3b3JkLmNoYXJPZmZzZXQ7CiAgfQoKICBTdGF0ZW1lbnQgZXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uIGV4cHJlc3Npb24sIFRva2VuIHNlbWljb2xvbikgewogICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uU3RhdGVtZW50SnVkZ21lbnQoZXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdGF0ZW1lbnQgZW1wdHlTdGF0ZW1lbnQoVG9rZW4gc2VtaWNvbG9uKSB7CiAgICByZXR1cm4gbmV3IEVtcHR5U3RhdGVtZW50SnVkZ21lbnQoKTsKICB9CgogIEBvdmVycmlkZQogIFN0YXRlbWVudCBmb3JTdGF0ZW1lbnQoCiAgICAgIFRva2VuIGZvcktleXdvcmQsCiAgICAgIFRva2VuIGxlZnRQYXJlbnRoZXNpcywKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiB2YXJpYWJsZXMsCiAgICAgIFRva2VuIGxlZnRTZXBhcmF0b3IsCiAgICAgIEV4cHJlc3Npb24gY29uZGl0aW9uLAogICAgICBTdGF0ZW1lbnQgY29uZGl0aW9uU3RhdGVtZW50LAogICAgICBMaXN0PEV4cHJlc3Npb24+IHVwZGF0ZXJzLAogICAgICBUb2tlbiByaWdodFBhcmVudGhlc2lzLAogICAgICBTdGF0ZW1lbnQgYm9keSkgewogICAgcmV0dXJuIG5ldyBGb3JKdWRnbWVudCh2YXJpYWJsZXMsIGNvbmRpdGlvbiwgdXBkYXRlcnMsIGJvZHkpCiAgICAgIC4uZmlsZU9mZnNldCA9IGZvcktleXdvcmQuY2hhck9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIFN0YXRlbWVudCBpZlN0YXRlbWVudChUb2tlbiBpZktleXdvcmQsIEV4cHJlc3Npb24gY29uZGl0aW9uLAogICAgICBTdGF0ZW1lbnQgdGhlblN0YXRlbWVudCwgVG9rZW4gZWxzZUtleXdvcmQsIFN0YXRlbWVudCBlbHNlU3RhdGVtZW50KSB7CiAgICByZXR1cm4gbmV3IElmSnVkZ21lbnQoY29uZGl0aW9uLCB0aGVuU3RhdGVtZW50LCBlbHNlU3RhdGVtZW50KQogICAgICAuLmZpbGVPZmZzZXQgPSBpZktleXdvcmQuY2hhck9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gaXNFeHByZXNzaW9uKAogICAgICBFeHByZXNzaW9uIG9wZXJhbmQsIFRva2VuIGlzT3BlcmF0b3IsIFRva2VuIG5vdE9wZXJhdG9yLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBFeHByZXNzaW9uIHJlc3VsdCA9IG5ldyBJc0V4cHJlc3Npb24ob3BlcmFuZCwgdHlwZSkKICAgICAgLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4oaXNPcGVyYXRvcik7CiAgICBpZiAobm90T3BlcmF0b3IgIT0gbnVsbCkgewogICAgICByZXN1bHQgPSBub3RFeHByZXNzaW9uKHJlc3VsdCwgbm90T3BlcmF0b3IsIGZhbHNlKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBTdGF0ZW1lbnQgbGFiZWxlZFN0YXRlbWVudChMYWJlbFRhcmdldCB0YXJnZXQsIFN0YXRlbWVudCBzdGF0ZW1lbnQpID0+CiAgICAgIHN0YXRlbWVudDsKCiAgQG92ZXJyaWRlCiAgRXhwcmVzc2lvbiBsb2dpY2FsRXhwcmVzc2lvbigKICAgICAgRXhwcmVzc2lvbiBsZWZ0T3BlcmFuZCwgVG9rZW4gb3BlcmF0b3IsIEV4cHJlc3Npb24gcmlnaHRPcGVyYW5kKSB7CiAgICByZXR1cm4gbmV3IExvZ2ljYWxFeHByZXNzaW9uKAogICAgICAgIGxlZnRPcGVyYW5kLCBvcGVyYXRvci5zdHJpbmdWYWx1ZSwgcmlnaHRPcGVyYW5kKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihvcGVyYXRvcik7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIG5vdEV4cHJlc3Npb24oRXhwcmVzc2lvbiBvcGVyYW5kLCBUb2tlbiB0b2tlbiwgYm9vbCBpc1N5bnRoZXRpYykgewogICAgcmV0dXJuIG5ldyBOb3Qob3BlcmFuZCkuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHBhcmVudGhlc2l6ZWRDb25kaXRpb24oCiAgICAgIFRva2VuIGxlZnRQYXJlbnRoZXNpcywgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBUb2tlbiByaWdodFBhcmVudGhlc2lzKSB7CiAgICByZXR1cm4gZXhwcmVzc2lvbjsKICB9CgogIEBvdmVycmlkZQogIFN0YXRlbWVudCByZXRocm93U3RhdGVtZW50KFRva2VuIHJldGhyb3dLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIHJldHVybiBuZXcgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50KAogICAgICAgIG5ldyBSZXRocm93KCkuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbihyZXRocm93S2V5d29yZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RhdGVtZW50IHJldHVyblN0YXRlbWVudCgKICAgICAgVG9rZW4gcmV0dXJuS2V5d29yZCwgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIHJldHVybiBuZXcgUmV0dXJuSnVkZ21lbnQocmV0dXJuS2V5d29yZD8ubGV4ZW1lLCBleHByZXNzaW9uKQogICAgICAuLmZpbGVPZmZzZXQgPSByZXR1cm5LZXl3b3JkLmNoYXJPZmZzZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIHN0cmluZ0NvbmNhdGVuYXRpb25FeHByZXNzaW9uKAogICAgICBMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIG5ldyBTdHJpbmdDb25jYXRlbmF0aW9uKGV4cHJlc3Npb25zKQogICAgICAuLmZpbGVPZmZzZXQgPSBvZmZzZXRGb3JUb2tlbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdGF0ZW1lbnQgc3ludGhldGljTGFiZWxlZFN0YXRlbWVudChTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICByZXR1cm4gbmV3IExhYmVsZWRTdGF0ZW1lbnQoc3RhdGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gdGhpc0V4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBuZXcgVGhpc0V4cHJlc3Npb24oKS4uZmlsZU9mZnNldCA9IG9mZnNldEZvclRva2VuKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gdGhyb3dFeHByZXNzaW9uKFRva2VuIHRocm93S2V5d29yZCwgRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICByZXR1cm4gbmV3IFRocm93KGV4cHJlc3Npb24pLi5maWxlT2Zmc2V0ID0gb2Zmc2V0Rm9yVG9rZW4odGhyb3dLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNUaHJvdyhPYmplY3QgbykgPT4gbyBpcyBUaHJvdzsKCiAgQG92ZXJyaWRlCiAgU3RhdGVtZW50IHRyeVN0YXRlbWVudChUb2tlbiB0cnlLZXl3b3JkLCBTdGF0ZW1lbnQgYm9keSwKICAgICAgTGlzdDxDYXRjaD4gY2F0Y2hDbGF1c2VzLCBUb2tlbiBmaW5hbGx5S2V5d29yZCwgU3RhdGVtZW50IGZpbmFsbHlCbG9jaykgewogICAgU3RhdGVtZW50IHJlc3VsdCA9IGJvZHk7CiAgICBpZiAoY2F0Y2hDbGF1c2VzICE9IG51bGwpIHsKICAgICAgcmVzdWx0ID0gbmV3IFRyeUNhdGNoSnVkZ21lbnQocmVzdWx0LCBjYXRjaENsYXVzZXMpOwogICAgfQogICAgaWYgKGZpbmFsbHlCbG9jayAhPSBudWxsKSB7CiAgICAgIHJlc3VsdCA9IG5ldyBUcnlGaW5hbGx5SnVkZ21lbnQocmVzdWx0LCBmaW5hbGx5QmxvY2spOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIF9WYXJpYWJsZXNEZWNsYXJhdGlvbiB2YXJpYWJsZXNEZWNsYXJhdGlvbigKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBkZWNsYXJhdGlvbnMsIFVyaSB1cmkpIHsKICAgIHJldHVybiBuZXcgX1ZhcmlhYmxlc0RlY2xhcmF0aW9uKGRlY2xhcmF0aW9ucywgdXJpKTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzRGVjbGFyYXRpb25FeHRyYWN0RGVjbGFyYXRpb25zKAogICAgICBfVmFyaWFibGVzRGVjbGFyYXRpb24gdmFyaWFibGVzRGVjbGFyYXRpb24pIHsKICAgIHJldHVybiB2YXJpYWJsZXNEZWNsYXJhdGlvbi5kZWNsYXJhdGlvbnM7CiAgfQoKICBAb3ZlcnJpZGUKICBTdGF0ZW1lbnQgd3JhcFZhcmlhYmxlcyhTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICBpZiAoc3RhdGVtZW50IGlzIF9WYXJpYWJsZXNEZWNsYXJhdGlvbikgewogICAgICByZXR1cm4gbmV3IEJsb2NrSnVkZ21lbnQoCiAgICAgICAgICBuZXcgTGlzdDxTdGF0ZW1lbnQ+LmZyb20oc3RhdGVtZW50LmRlY2xhcmF0aW9ucywgZ3Jvd2FibGU6IHRydWUpKQogICAgICAgIC4uZmlsZU9mZnNldCA9IHN0YXRlbWVudC5maWxlT2Zmc2V0OwogICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQgaXMgVmFyaWFibGVEZWNsYXJhdGlvbikgewogICAgICByZXR1cm4gbmV3IEJsb2NrSnVkZ21lbnQoPFN0YXRlbWVudD5bc3RhdGVtZW50XSkKICAgICAgICAuLmZpbGVPZmZzZXQgPSBzdGF0ZW1lbnQuZmlsZU9mZnNldDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBzdGF0ZW1lbnQ7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBTdGF0ZW1lbnQgd2hpbGVTdGF0ZW1lbnQoCiAgICAgIFRva2VuIHdoaWxlS2V5d29yZCwgRXhwcmVzc2lvbiBjb25kaXRpb24sIFN0YXRlbWVudCBib2R5KSB7CiAgICByZXR1cm4gbmV3IFdoaWxlSnVkZ21lbnQoY29uZGl0aW9uLCBib2R5KQogICAgICAuLmZpbGVPZmZzZXQgPSB3aGlsZUtleXdvcmQuY2hhck9mZnNldDsKICB9CgogIEBvdmVycmlkZQogIFN0YXRlbWVudCB5aWVsZFN0YXRlbWVudCgKICAgICAgVG9rZW4geWllbGRLZXl3b3JkLCBUb2tlbiBzdGFyLCBFeHByZXNzaW9uIGV4cHJlc3Npb24sIFRva2VuIHNlbWljb2xvbikgewogICAgcmV0dXJuIG5ldyBZaWVsZEp1ZGdtZW50KHN0YXIgIT0gbnVsbCwgZXhwcmVzc2lvbikKICAgICAgLi5maWxlT2Zmc2V0ID0geWllbGRLZXl3b3JkLmNoYXJPZmZzZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBFeHByZXNzaW9uIGdldEV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvblN0YXRlbWVudChTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICByZXR1cm4gKHN0YXRlbWVudCBhcyBFeHByZXNzaW9uU3RhdGVtZW50KS5leHByZXNzaW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Jsb2NrKE9iamVjdCBub2RlKSA9PiBub2RlIGlzIEJsb2NrOwoKICBAb3ZlcnJpZGUKICBib29sIGlzRW1wdHlTdGF0ZW1lbnQoU3RhdGVtZW50IHN0YXRlbWVudCkgPT4gc3RhdGVtZW50IGlzIEVtcHR5U3RhdGVtZW50OwoKICBAb3ZlcnJpZGUKICBib29sIGlzRXJyb25lb3VzTm9kZShPYmplY3Qgbm9kZSkgewogICAgaWYgKG5vZGUgaXMgRXhwcmVzc2lvblN0YXRlbWVudCkgewogICAgICBFeHByZXNzaW9uU3RhdGVtZW50IHN0YXRlbWVudCA9IG5vZGU7CiAgICAgIG5vZGUgPSBzdGF0ZW1lbnQuZXhwcmVzc2lvbjsKICAgIH0KICAgIGlmIChub2RlIGlzIFZhcmlhYmxlRGVjbGFyYXRpb24pIHsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IG5vZGU7CiAgICAgIG5vZGUgPSB2YXJpYWJsZS5pbml0aWFsaXplcjsKICAgIH0KICAgIGlmIChub2RlIGlzIFN5bnRoZXRpY0V4cHJlc3Npb25KdWRnbWVudCkgewogICAgICBTeW50aGV0aWNFeHByZXNzaW9uSnVkZ21lbnQgc3ludGggPSBub2RlOwogICAgICBub2RlID0gc3ludGguZGVzdWdhcmVkOwogICAgfQogICAgaWYgKG5vZGUgaXMgTGV0KSB7CiAgICAgIExldCBsZXQgPSBub2RlOwogICAgICBub2RlID0gbGV0LnZhcmlhYmxlLmluaXRpYWxpemVyOwogICAgfQogICAgcmV0dXJuIG5vZGUgaXMgSW52YWxpZEV4cHJlc3Npb247CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRXhwcmVzc2lvblN0YXRlbWVudChTdGF0ZW1lbnQgc3RhdGVtZW50KSA9PgogICAgICBzdGF0ZW1lbnQgaXMgRXhwcmVzc2lvblN0YXRlbWVudDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1RoaXNFeHByZXNzaW9uKE9iamVjdCBub2RlKSA9PiBub2RlIGlzIFRoaXNFeHByZXNzaW9uOwoKICBAb3ZlcnJpZGUKICBib29sIGlzVmFyaWFibGVzRGVjbGFyYXRpb24oT2JqZWN0IG5vZGUpID0+IG5vZGUgaXMgX1ZhcmlhYmxlc0RlY2xhcmF0aW9uOwp9CgpjbGFzcyBfVmFyaWFibGVzRGVjbGFyYXRpb24gZXh0ZW5kcyBTdGF0ZW1lbnQgewogIGZpbmFsIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gZGVjbGFyYXRpb25zOwogIGZpbmFsIFVyaSB1cmk7CgogIF9WYXJpYWJsZXNEZWNsYXJhdGlvbih0aGlzLmRlY2xhcmF0aW9ucywgdGhpcy51cmkpIHsKICAgIHNldFBhcmVudHMoZGVjbGFyYXRpb25zLCB0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdCh2KSB7CiAgICB1bnN1cHBvcnRlZCgiYWNjZXB0IiwgZmlsZU9mZnNldCwgdXJpKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdDEodiwgYXJnKSB7CiAgICB1bnN1cHBvcnRlZCgiYWNjZXB0MSIsIGZpbGVPZmZzZXQsIHVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENoaWxkcmVuKHYpIHsKICAgIHVuc3VwcG9ydGVkKCJ2aXNpdENoaWxkcmVuIiwgZmlsZU9mZnNldCwgdXJpKTsKICB9CgogIEBvdmVycmlkZQogIHRyYW5zZm9ybUNoaWxkcmVuKHYpIHsKICAgIHVuc3VwcG9ydGVkKCJ0cmFuc2Zvcm1DaGlsZHJlbiIsIGZpbGVPZmZzZXQsIHVyaSk7CiAgfQp9CoKNAE5OPAEXASIBIQkTFhsZDxUYDx4fEhgUHRsWGg0bGxIZDRUREx0XGA8SHRQBNwEsASUBLQEaCRQWFxUTFBcBIAkbIyEXFxQYICUVFBUdHRwYHB8fJRocHRcXASIBGx8TAQxIPUksBAEMMi0EAQw+HAQBDD4hBAEMPxwEAQxORwQBDDwBDDVHBAEMPEoEAQwzMSwEAQxHRgQBDCMaFBscGSQcUDswNkIEAQwhGhQbHBckGlA7LzZABAEMIRoUGBocFx4aUDsrQkAEAQwpQgQBDDtJBAEMTVAEAQxNUAQBDEBOBAEMRUkEAQw0AQxOOwQBDEIxBAEMTy4sBAEMQUEsBAEMPis1LAQBDBdONiwEAQwZKxwgFxU/LAQBDBgrHCAVFUAsBAEMTUwfSRosBAEMTEofShosBAEMJxsdHBMcOksEAQxIUENLLgdGJT4zEwZHUDBDMiozLhEvM0wuEQooCCYmD0sIBjIrJxsEAQxATQQBDBNHGjIrMEYtIR0IBjEwBAEMUEsEAQwVFx4aLi8fGDc/QAQBDElLJjkvBAEMHz5OBAEMTS9PBAFKOAQBDC4pBAEMGhgdKxscJCEeGEEsBAEMP01DKwQBDBtQODEfOgYTBAEMSREBDCBJIjkvBAEMUEEEAQwlThcEAQxGLEUEAQwdRUEvBAEMLDMwLAQBDD0sBAEMK0UEAQxKTQQBDCgBDDtQHSA7BiA9BhMEAQwuOTkEAQxFNC4EAQwxLiBMLTM3LQ0YBgQBDBxCLi4EAQwcUDcuBAEMSToEAQwuAQxNAQwmJywjBicrIwYvMB4GFxYnBiYEAQw1KAEMQAEMTQIBMDARATckBAEMDiwEAQwULQQBDBUzBAEMGTcEAgEvcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9mYW5nb3JuLmRhcnQ3c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9mb3Jlc3QuZGFydLwNLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZm9yZXN0OwoKaW1wb3J0ICdkYXJ0OmNvcmUnIGhpZGUgTWFwRW50cnk7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIEFyZ3VtZW50cywKICAgICAgICBDYXRjaCwKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIExpYnJhcnlEZXBlbmRlbmN5LAogICAgICAgIE1hcEVudHJ5LAogICAgICAgIE5hbWVkRXhwcmVzc2lvbiwKICAgICAgICBTdGF0ZW1lbnQsCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbjsKCmltcG9ydCAnYm9keV9idWlsZGVyLmRhcnQnIHNob3cgTGFiZWxUYXJnZXQ7CgppbXBvcnQgJ2tlcm5lbF9idWlsZGVyLmRhcnQnIHNob3cgSWRlbnRpZmllcjsKCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JyBzaG93IFRva2VuOwoKZXhwb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IE1lc3NhZ2U7CgpleHBvcnQgJ2JvZHlfYnVpbGRlci5kYXJ0JyBzaG93IE9wZXJhdG9yOwoKZXhwb3J0ICdjb25zdG5lc3MuZGFydCcgc2hvdyBDb25zdG5lc3M7CgpleHBvcnQgJ2V4cHJlc3Npb25fZ2VuZXJhdG9yLmRhcnQnIHNob3cgR2VuZXJhdG9yLCBQcmVmaXhVc2VHZW5lcmF0b3I7CgpleHBvcnQgJ2V4cHJlc3Npb25fZ2VuZXJhdG9yX2hlbHBlci5kYXJ0JyBzaG93IEV4cHJlc3Npb25HZW5lcmF0b3JIZWxwZXI7CgpleHBvcnQgJ2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgSWRlbnRpZmllciwKICAgICAgICBMb2FkTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgUHJlZml4QnVpbGRlciwKICAgICAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyLAogICAgICAgIFVubGlua2VkRGVjbGFyYXRpb247CgovLy8gQSB0cmVlIGZhY3RvcnkuCmFic3RyYWN0IGNsYXNzIEZvcmVzdCB7CiAgY29uc3QgRm9yZXN0KCk7CgogIEFyZ3VtZW50cyBhcmd1bWVudHMoTGlzdDxFeHByZXNzaW9uPiBwb3NpdGlvbmFsLCBUb2tlbiBsb2NhdGlvbiwKICAgICAge0xpc3Q8RGFydFR5cGU+IHR5cGVzLCBMaXN0PE5hbWVkRXhwcmVzc2lvbj4gbmFtZWR9KTsKCiAgQXJndW1lbnRzIGFyZ3VtZW50c0VtcHR5KFRva2VuIGxvY2F0aW9uKTsKCiAgTGlzdDxPYmplY3Q+IGFyZ3VtZW50c05hbWVkKEFyZ3VtZW50cyBhcmd1bWVudHMpOwoKICBMaXN0PEV4cHJlc3Npb24+IGFyZ3VtZW50c1Bvc2l0aW9uYWwoQXJndW1lbnRzIGFyZ3VtZW50cyk7CgogIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50c1R5cGVBcmd1bWVudHMoQXJndW1lbnRzIGFyZ3VtZW50cyk7CgogIHZvaWQgYXJndW1lbnRzU2V0VHlwZUFyZ3VtZW50cyhBcmd1bWVudHMgYXJndW1lbnRzLCBMaXN0PERhcnRUeXBlPiB0eXBlcyk7CgogIEV4cHJlc3Npb24gYXNMaXRlcmFsU3RyaW5nKEV4cHJlc3Npb24gdmFsdWUpOwoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSBib29sZWFuIGxpdGVyYWwgYXQgdGhlIGdpdmVuIFtsb2NhdGlvbl0uIFRoZQogIC8vLyBsaXRlcmFsIGhhcyB0aGUgZ2l2ZW4gW3ZhbHVlXS4KICBFeHByZXNzaW9uIGxpdGVyYWxCb29sKGJvb2wgdmFsdWUsIFRva2VuIGxvY2F0aW9uKTsKCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgZG91YmxlIGxpdGVyYWwgYXQgdGhlIGdpdmVuIFtsb2NhdGlvbl0uIFRoZQogIC8vLyBsaXRlcmFsIGhhcyB0aGUgZ2l2ZW4gW3ZhbHVlXS4KICBFeHByZXNzaW9uIGxpdGVyYWxEb3VibGUoZG91YmxlIHZhbHVlLCBUb2tlbiBsb2NhdGlvbik7CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyIGxpdGVyYWwgYXQgdGhlIGdpdmVuIFtsb2NhdGlvbl0uIFRoZQogIC8vLyBsaXRlcmFsIGhhcyB0aGUgZ2l2ZW4gW3ZhbHVlXS4KICBFeHByZXNzaW9uIGxpdGVyYWxJbnQoaW50IHZhbHVlLCBUb2tlbiBsb2NhdGlvbik7CgogIEV4cHJlc3Npb24gbGl0ZXJhbExhcmdlSW50KFN0cmluZyBsaXRlcmFsLCBUb2tlbiBsb2NhdGlvbik7CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIGxpc3QgbGl0ZXJhbC4gVGhlIFtjb25zdEtleXdvcmRdIGlzIHRoZQogIC8vLyBsb2NhdGlvbiBvZiB0aGUgYGNvbnN0YCBrZXl3b3JkLCBvciBgbnVsbGAgaWYgdGhlcmUgaXMgbm8ga2V5d29yZC4gVGhlCiAgLy8vIFtpc0NvbnN0XSBpcyBgdHJ1ZWAgaWYgdGhlIGxpdGVyYWwgaXMgZWl0aGVyIGV4cGxpY2l0bHkgb3IgaW1wbGljaXRseSBhCiAgLy8vIGNvbnN0YW50LiBUaGUgW3R5cGVBcmd1bWVudF0gaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzaW5nbGUgdmFsaWQKICAvLy8gdHlwZSBhcmd1bWVudCBwcmVjZWRpbmcgdGhlIGxpc3QgbGl0ZXJhbCwgb3IgYG51bGxgIGlmIHRoZXJlIGlzIG5vIHR5cGUKICAvLy8gYXJndW1lbnQsIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgdHlwZSBhcmd1bWVudCwgb3IgaWYgdGhlIHR5cGUgYXJndW1lbnQKICAvLy8gY2Fubm90IGJlIHJlc29sdmVkLiBUaGUgW3R5cGVBcmd1bWVudHNdIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiBhbGwgb2YKICAvLy8gdGhlIHR5cGUgYXJndW1lbnRzIHByZWNlZGluZyB0aGUgbGlzdCBsaXRlcmFsLCBvciBgbnVsbGAgaWYgdGhlcmUgYXJlIG5vCiAgLy8vIHR5cGUgYXJndW1lbnRzLiBUaGUgW2xlZnRCcmFja2V0XSBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGBbYC4gVGhlIGxpc3Qgb2YKICAvLy8gW2V4cHJlc3Npb25zXSBpcyBhIGxpc3Qgb2YgdGhlIHJlcHJlc2VudGF0aW9ucyBvZiB0aGUgbGlzdCBlbGVtZW50cy4gVGhlCiAgLy8vIFtyaWdodEJyYWNrZXRdIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgYF1gLgogIEV4cHJlc3Npb24gbGl0ZXJhbExpc3QoCiAgICAgIFRva2VuIGNvbnN0S2V5d29yZCwKICAgICAgYm9vbCBpc0NvbnN0LAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50LAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50cywKICAgICAgVG9rZW4gbGVmdEJyYWNrZXQsCiAgICAgIExpc3Q8RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMsCiAgICAgIFRva2VuIHJpZ2h0QnJhY2tldCk7CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIHNldCBsaXRlcmFsLiBUaGUgW2NvbnN0S2V5d29yZF0gaXMgdGhlCiAgLy8vIGxvY2F0aW9uIG9mIHRoZSBgY29uc3RgIGtleXdvcmQsIG9yIGBudWxsYCBpZiB0aGVyZSBpcyBubyBrZXl3b3JkLiBUaGUKICAvLy8gW2lzQ29uc3RdIGlzIGB0cnVlYCBpZiB0aGUgbGl0ZXJhbCBpcyBlaXRoZXIgZXhwbGljaXRseSBvciBpbXBsaWNpdGx5IGEKICAvLy8gY29uc3RhbnQuIFRoZSBbdHlwZUFyZ3VtZW50XSBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHNpbmdsZSB2YWxpZAogIC8vLyB0eXBlIGFyZ3VtZW50IHByZWNlZGluZyB0aGUgc2V0IGxpdGVyYWwsIG9yIGBudWxsYCBpZiB0aGVyZSBpcyBubyB0eXBlCiAgLy8vIGFyZ3VtZW50LCB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHR5cGUgYXJndW1lbnQsIG9yIGlmIHRoZSB0eXBlIGFyZ3VtZW50CiAgLy8vIGNhbm5vdCBiZSByZXNvbHZlZC4gVGhlIFt0eXBlQXJndW1lbnRzXSBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgYWxsIG9mCiAgLy8vIHRoZSB0eXBlIGFyZ3VtZW50cyBwcmVjZWRpbmcgdGhlIHNldCBsaXRlcmFsLCBvciBgbnVsbGAgaWYgdGhlcmUgYXJlIG5vCiAgLy8vIHR5cGUgYXJndW1lbnRzLiBUaGUgW2xlZnRCcmFjZV0gaXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBge2AuIFRoZSBsaXN0IG9mCiAgLy8vIFtleHByZXNzaW9uc10gaXMgYSBsaXN0IG9mIHRoZSByZXByZXNlbnRhdGlvbnMgb2YgdGhlIHNldCBlbGVtZW50cy4gVGhlCiAgLy8vIFtyaWdodEJyYWNlXSBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGB9YC4KICBFeHByZXNzaW9uIGxpdGVyYWxTZXQoCiAgICAgIFRva2VuIGNvbnN0S2V5d29yZCwKICAgICAgYm9vbCBpc0NvbnN0LAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50LAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50cywKICAgICAgVG9rZW4gbGVmdEJyYWNlLAogICAgICBMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zLAogICAgICBUb2tlbiByaWdodEJyYWNlKTsKCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgbWFwIGxpdGVyYWwuIFRoZSBbY29uc3RLZXl3b3JkXSBpcyB0aGUKICAvLy8gbG9jYXRpb24gb2YgdGhlIGBjb25zdGAga2V5d29yZCwgb3IgYG51bGxgIGlmIHRoZXJlIGlzIG5vIGtleXdvcmQuIFRoZQogIC8vLyBbaXNDb25zdF0gaXMgYHRydWVgIGlmIHRoZSBsaXRlcmFsIGlzIGVpdGhlciBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHkgYQogIC8vLyBjb25zdGFudC4gVGhlIFtrZXlUeXBlXSBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZpcnN0IHR5cGUgYXJndW1lbnQKICAvLy8gcHJlY2VkaW5nIHRoZSBtYXAgbGl0ZXJhbCwgb3IgYG51bGxgIGlmIHRoZXJlIGFyZSBub3QgZXhhY3RseSB0d28gdHlwZQogIC8vLyBhcmd1bWVudHMgb3IgaWYgdGhlIGZpcnN0IHR5cGUgYXJndW1lbnQgY2Fubm90IGJlIHJlc29sdmVkLiBUaGUKICAvLy8gW3ZhbHVlVHlwZV0gaXMgdGhlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzZWNvbmQgdHlwZSBhcmd1bWVudCBwcmVjZWRpbmcKICAvLy8gdGhlIG1hcCBsaXRlcmFsLCBvciBgbnVsbGAgaWYgdGhlcmUgYXJlIG5vdCBleGFjdGx5IHR3byB0eXBlIGFyZ3VtZW50cyBvcgogIC8vLyBpZiB0aGUgc2Vjb25kIHR5cGUgYXJndW1lbnQgY2Fubm90IGJlIHJlc29sdmVkLiBUaGUgW3R5cGVBcmd1bWVudHNdIGlzIHRoZQogIC8vLyByZXByZXNlbnRhdGlvbiBvZiBhbGwgb2YgdGhlIHR5cGUgYXJndW1lbnRzIHByZWNlZGluZyB0aGUgbWFwIGxpdGVyYWwsIG9yCiAgLy8vIGBudWxsYCBpZiB0aGVyZSBhcmUgbm8gdHlwZSBhcmd1bWVudHMuIFRoZSBbbGVmdEJyYWNlXSBpcyB0aGUgbG9jYXRpb24KICAvLy8gb2YgdGhlIGB7YC4gVGhlIGxpc3Qgb2YgW2VudHJpZXNdIGlzIGEgbGlzdCBvZiB0aGUgcmVwcmVzZW50YXRpb25zIG9mIHRoZQogIC8vLyBtYXAgZW50cmllcy4gVGhlIFtyaWdodEJyYWNlXSBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIGB9YC4KICBFeHByZXNzaW9uIGxpdGVyYWxNYXAoCiAgICAgIFRva2VuIGNvbnN0S2V5d29yZCwKICAgICAgYm9vbCBpc0NvbnN0LAogICAgICBEYXJ0VHlwZSBrZXlUeXBlLAogICAgICBEYXJ0VHlwZSB2YWx1ZVR5cGUsCiAgICAgIE9iamVjdCB0eXBlQXJndW1lbnRzLAogICAgICBUb2tlbiBsZWZ0QnJhY2UsCiAgICAgIExpc3Q8TWFwRW50cnk+IGVudHJpZXMsCiAgICAgIFRva2VuIHJpZ2h0QnJhY2UpOwoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSBudWxsIGxpdGVyYWwgYXQgdGhlIGdpdmVuIFtsb2NhdGlvbl0uCiAgRXhwcmVzc2lvbiBsaXRlcmFsTnVsbChUb2tlbiBsb2NhdGlvbik7CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIHNpbXBsZSBzdHJpbmcgbGl0ZXJhbCBhdCB0aGUgZ2l2ZW4KICAvLy8gW2xvY2F0aW9uXS4gVGhlIGxpdGVyYWwgaGFzIHRoZSBnaXZlbiBbdmFsdWVdLiBUaGlzIGRvZXMgbm90IGluY2x1ZGUKICAvLy8gZWl0aGVyIGFkamFjZW50IHN0cmluZ3Mgb3IgaW50ZXJwb2xhdGVkIHN0cmluZ3MuCiAgRXhwcmVzc2lvbiBsaXRlcmFsU3RyaW5nKFN0cmluZyB2YWx1ZSwgVG9rZW4gbG9jYXRpb24pOwoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSBzeW1ib2wgbGl0ZXJhbCBkZWZpbmVkIGJ5IHRoZSBbaGFzaF0gYW5kIHRoZQogIC8vLyBsaXN0IG9mIFtjb21wb25lbnRzXS4gVGhlIFt2YWx1ZV0gaXMgdGhlIHN0cmluZyB2YWx1ZSBvZiB0aGUgc3ltYm9sLgogIEV4cHJlc3Npb24gbGl0ZXJhbFN5bWJvbE11bHRpcGxlKAogICAgICBTdHJpbmcgdmFsdWUsIFRva2VuIGhhc2gsIExpc3Q8SWRlbnRpZmllcj4gY29tcG9uZW50cyk7CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIHN5bWJvbCBsaXRlcmFsIGRlZmluZWQgYnkgdGhlIFtoYXNoXSBhbmQgdGhlCiAgLy8vIHNpbmdsZSBbY29tcG9uZW50XS4gVGhlIGNvbXBvbmVudCBjYW4gYmUgZWl0aGVyIGFuIFtJZGVudGlmaWVyXSBvciBhbgogIC8vLyBbT3BlcmF0b3JdLiBUaGUgW3ZhbHVlXSBpcyB0aGUgc3RyaW5nIHZhbHVlIG9mIHRoZSBzeW1ib2wuCiAgRXhwcmVzc2lvbiBsaXRlcmFsU3ltYm9sU2luZ2x1YXIoU3RyaW5nIHZhbHVlLCBUb2tlbiBoYXNoLCBPYmplY3QgY29tcG9uZW50KTsKCiAgRXhwcmVzc2lvbiBsaXRlcmFsVHlwZShEYXJ0VHlwZSB0eXBlLCBUb2tlbiBsb2NhdGlvbik7CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIGtleS92YWx1ZSBwYWlyIGluIGEgbGl0ZXJhbCBtYXAuIFRoZSBba2V5XSBpcwogIC8vLyB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGV4cHJlc3Npb24gdXNlZCB0byBjb21wdXRlIHRoZSBrZXkuIFRoZSBbY29sb25dCiAgLy8vIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29sb24gc2VwYXJhdGluZyB0aGUga2V5IGFuZCB0aGUgdmFsdWUuIFRoZSBbdmFsdWVdCiAgLy8vIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiB1c2VkIHRvIGNvbXB1dGUgdGhlIHZhbHVlLgogIE9iamVjdCBtYXBFbnRyeShFeHByZXNzaW9uIGtleSwgVG9rZW4gY29sb24sIEV4cHJlc3Npb24gdmFsdWUpOwoKICBpbnQgcmVhZE9mZnNldChUcmVlTm9kZSBub2RlKTsKCiAgRXhwcmVzc2lvbiBsb2FkTGlicmFyeShMaWJyYXJ5RGVwZW5kZW5jeSBkZXBlbmRlbmN5LCBBcmd1bWVudHMgYXJndW1lbnRzKTsKCiAgRXhwcmVzc2lvbiBjaGVja0xpYnJhcnlJc0xvYWRlZChMaWJyYXJ5RGVwZW5kZW5jeSBkZXBlbmRlbmN5KTsKCiAgRXhwcmVzc2lvbiBhc0V4cHJlc3Npb24oRXhwcmVzc2lvbiBleHByZXNzaW9uLCBEYXJ0VHlwZSB0eXBlLCBUb2tlbiBsb2NhdGlvbik7CgogIEV4cHJlc3Npb24gc3ByZWFkRWxlbWVudChFeHByZXNzaW9uIGV4cHJlc3Npb24sIFRva2VuIHRva2VuKTsKCiAgRXhwcmVzc2lvbiBpZkVsZW1lbnQoCiAgICAgIEV4cHJlc3Npb24gY29uZGl0aW9uLCBFeHByZXNzaW9uIHRoZW4sIEV4cHJlc3Npb24gb3RoZXJ3aXNlLCBUb2tlbiB0b2tlbik7CgogIE1hcEVudHJ5IGlmTWFwRW50cnkoCiAgICAgIEV4cHJlc3Npb24gY29uZGl0aW9uLCBNYXBFbnRyeSB0aGVuLCBNYXBFbnRyeSBvdGhlcndpc2UsIFRva2VuIHRva2VuKTsKCiAgRXhwcmVzc2lvbiBmb3JFbGVtZW50KAogICAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlcywKICAgICAgRXhwcmVzc2lvbiBjb25kaXRpb24sCiAgICAgIExpc3Q8RXhwcmVzc2lvbj4gdXBkYXRlcywKICAgICAgRXhwcmVzc2lvbiBib2R5LAogICAgICBUb2tlbiB0b2tlbik7CgogIE1hcEVudHJ5IGZvck1hcEVudHJ5KAogICAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlcywKICAgICAgRXhwcmVzc2lvbiBjb25kaXRpb24sCiAgICAgIExpc3Q8RXhwcmVzc2lvbj4gdXBkYXRlcywKICAgICAgTWFwRW50cnkgYm9keSwKICAgICAgVG9rZW4gdG9rZW4pOwoKICBFeHByZXNzaW9uIGZvckluRWxlbWVudChWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBFeHByZXNzaW9uIGl0ZXJhYmxlLAogICAgICBTdGF0ZW1lbnQgcHJvbG9ndWUsIEV4cHJlc3Npb24gYm9keSwgRXhwcmVzc2lvbiBwcm9ibGVtLCBUb2tlbiB0b2tlbiwKICAgICAge2Jvb2wgaXNBc3luYzogZmFsc2V9KTsKCiAgTWFwRW50cnkgZm9ySW5NYXBFbnRyeShWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBFeHByZXNzaW9uIGl0ZXJhYmxlLAogICAgICBTdGF0ZW1lbnQgcHJvbG9ndWUsIE1hcEVudHJ5IGJvZHksIEV4cHJlc3Npb24gcHJvYmxlbSwgVG9rZW4gdG9rZW4sCiAgICAgIHtib29sIGlzQXN5bmM6IGZhbHNlfSk7CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhbiBhc3NlcnQgdGhhdCBhcHBlYXJzIGluIGEgY29uc3RydWN0b3IncwogIC8vLyBpbml0aWFsaXplciBsaXN0LgogIE9iamVjdCBhc3NlcnRJbml0aWFsaXplcihUb2tlbiBhc3NlcnRLZXl3b3JkLCBUb2tlbiBsZWZ0UGFyZW50aGVzaXMsCiAgICAgIEV4cHJlc3Npb24gY29uZGl0aW9uLCBUb2tlbiBjb21tYSwgRXhwcmVzc2lvbiBtZXNzYWdlKTsKCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGFuIGFzc2VydCB0aGF0IGFwcGVhcnMgYXMgYSBzdGF0ZW1lbnQuCiAgU3RhdGVtZW50IGFzc2VydFN0YXRlbWVudChUb2tlbiBhc3NlcnRLZXl3b3JkLCBUb2tlbiBsZWZ0UGFyZW50aGVzaXMsCiAgICAgIEV4cHJlc3Npb24gY29uZGl0aW9uLCBUb2tlbiBjb21tYSwgRXhwcmVzc2lvbiBtZXNzYWdlLCBUb2tlbiBzZW1pY29sb24pOwoKICBFeHByZXNzaW9uIGF3YWl0RXhwcmVzc2lvbihFeHByZXNzaW9uIG9wZXJhbmQsIFRva2VuIGxvY2F0aW9uKTsKCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgYmxvY2sgb2YgW3N0YXRlbWVudHNdIGVuY2xvc2VkIGJldHdlZW4gdGhlCiAgLy8vIFtvcGVuQnJhY2tldF0gYW5kIFtjbG9zZUJyYWNrZXRdLgogIFN0YXRlbWVudCBibG9jaygKICAgICAgVG9rZW4gb3BlbkJyYWNlLCBMaXN0PFN0YXRlbWVudD4gc3RhdGVtZW50cywgVG9rZW4gY2xvc2VCcmFjZSk7CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIGJyZWFrIHN0YXRlbWVudC4KICBTdGF0ZW1lbnQgYnJlYWtTdGF0ZW1lbnQoCiAgICAgIFRva2VuIGJyZWFrS2V5d29yZCwgSWRlbnRpZmllciBsYWJlbCwgVG9rZW4gc2VtaWNvbG9uKTsKCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgY2F0Y2ggY2xhdXNlLgogIE9iamVjdCBjYXRjaENsYXVzZSgKICAgICAgVG9rZW4gb25LZXl3b3JkLAogICAgICBEYXJ0VHlwZSBleGNlcHRpb25UeXBlLAogICAgICBUb2tlbiBjYXRjaEtleXdvcmQsCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gZXhjZXB0aW9uUGFyYW1ldGVyLAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHN0YWNrVHJhY2VQYXJhbWV0ZXIsCiAgICAgIERhcnRUeXBlIHN0YWNrVHJhY2VUeXBlLAogICAgICBTdGF0ZW1lbnQgYm9keSk7CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24uIFRoZSBbY29uZGl0aW9uXSBpcwogIC8vLyB0aGUgZXhwcmVzc2lvbiBwcmVjZWRpbmcgdGhlIHF1ZXN0aW9uIG1hcmsuIFRoZSBbcXVlc3Rpb25dIGlzIHRoZSBgP2AuIFRoZQogIC8vLyBbdGhlbkV4cHJlc3Npb25dIGlzIHRoZSBleHByZXNzaW9uIGZvbGxvd2luZyB0aGUgcXVlc3Rpb24gbWFyay4gVGhlCiAgLy8vIFtjb2xvbl0gaXMgdGhlIGA6YC4gVGhlIFtlbHNlRXhwcmVzc2lvbl0gaXMgdGhlIGV4cHJlc3Npb24gZm9sbG93aW5nIHRoZQogIC8vLyBjb2xvbi4KICBFeHByZXNzaW9uIGNvbmRpdGlvbmFsRXhwcmVzc2lvbihFeHByZXNzaW9uIGNvbmRpdGlvbiwgVG9rZW4gcXVlc3Rpb24sCiAgICAgIEV4cHJlc3Npb24gdGhlbkV4cHJlc3Npb24sIFRva2VuIGNvbG9uLCBFeHByZXNzaW9uIGVsc2VFeHByZXNzaW9uKTsKCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgY29udGludWUgc3RhdGVtZW50LgogIFN0YXRlbWVudCBjb250aW51ZVN0YXRlbWVudCgKICAgICAgVG9rZW4gY29udGludWVLZXl3b3JkLCBJZGVudGlmaWVyIGxhYmVsLCBUb2tlbiBzZW1pY29sb24pOwoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSBkbyBzdGF0ZW1lbnQuCiAgU3RhdGVtZW50IGRvU3RhdGVtZW50KFRva2VuIGRvS2V5d29yZCwgU3RhdGVtZW50IGJvZHksIFRva2VuIHdoaWxlS2V5d29yZCwKICAgICAgRXhwcmVzc2lvbiBjb25kaXRpb24sIFRva2VuIHNlbWljb2xvbik7CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhbiBleHByZXNzaW9uIHN0YXRlbWVudCBjb21wb3NlZCBmcm9tIHRoZQogIC8vLyBbZXhwcmVzc2lvbl0gYW5kIFtzZW1pY29sb25dLgogIFN0YXRlbWVudCBleHByZXNzaW9uU3RhdGVtZW50KEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgVG9rZW4gc2VtaWNvbG9uKTsKCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGFuIGVtcHR5IHN0YXRlbWVudCBjb25zaXN0aW5nIG9mIHRoZSBnaXZlbgogIC8vLyBbc2VtaWNvbG9uXS4KICBTdGF0ZW1lbnQgZW1wdHlTdGF0ZW1lbnQoVG9rZW4gc2VtaWNvbG9uKTsKCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgZm9yIHN0YXRlbWVudC4KICBTdGF0ZW1lbnQgZm9yU3RhdGVtZW50KAogICAgICBUb2tlbiBmb3JLZXl3b3JkLAogICAgICBUb2tlbiBsZWZ0UGFyZW50aGVzaXMsCiAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gdmFyaWFibGVzLAogICAgICBUb2tlbiBsZWZ0U2VwYXJhdG9yLAogICAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiwKICAgICAgU3RhdGVtZW50IGNvbmRpdGlvblN0YXRlbWVudCwKICAgICAgTGlzdDxFeHByZXNzaW9uPiB1cGRhdGVycywKICAgICAgVG9rZW4gcmlnaHRQYXJlbnRoZXNpcywKICAgICAgU3RhdGVtZW50IGJvZHkpOwoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYW4gYGlmYCBzdGF0ZW1lbnQuCiAgU3RhdGVtZW50IGlmU3RhdGVtZW50KFRva2VuIGlmS2V5d29yZCwgRXhwcmVzc2lvbiBjb25kaXRpb24sCiAgICAgIFN0YXRlbWVudCB0aGVuU3RhdGVtZW50LCBUb2tlbiBlbHNlS2V5d29yZCwgU3RhdGVtZW50IGVsc2VTdGF0ZW1lbnQpOwoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYW4gYGlzYCBleHByZXNzaW9uLiBUaGUgW29wZXJhbmRdIGlzIHRoZQogIC8vLyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbGVmdCBvcGVyYW5kLiBUaGUgW2lzT3BlcmF0b3JdIGlzIHRoZSBgaXNgIG9wZXJhdG9yLgogIC8vLyBUaGUgW25vdE9wZXJhdG9yXSBpcyBlaXRoZXIgdGhlIGAhYCBvciBgbnVsbGAgaWYgdGhlIHRlc3QgaXMgbm90IG5lZ2F0ZWQuCiAgLy8vIFRoZSBbdHlwZV0gaXMgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHlwZSB0aGF0IGlzIHRoZSByaWdodCBvcGVyYW5kLgogIEV4cHJlc3Npb24gaXNFeHByZXNzaW9uKAogICAgICBFeHByZXNzaW9uIG9wZXJhbmQsIFRva2VuIGlzT3BlcmF0b3IsIFRva2VuIG5vdE9wZXJhdG9yLCBEYXJ0VHlwZSB0eXBlKTsKCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgW3N0YXRlbWVudF0gdGhhdCBoYXMgb25lIG9yIG1vcmUgbGFiZWxzIChmcm9tCiAgLy8vIHRoZSBbdGFyZ2V0XSkgYXNzb2NpYXRlZCB3aXRoIGl0LgogIFN0YXRlbWVudCBsYWJlbGVkU3RhdGVtZW50KExhYmVsVGFyZ2V0IHRhcmdldCwgU3RhdGVtZW50IHN0YXRlbWVudCk7CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIGxvZ2ljYWwgZXhwcmVzc2lvbiBoYXZpbmcgdGhlIFtsZWZ0T3BlcmFuZF0sCiAgLy8vIFtyaWdodE9wZXJhbmRdIGFuZCB0aGUgW29wZXJhdG9yXSAoZWl0aGVyIGAmJmAgb3IgYHx8YCkuCiAgRXhwcmVzc2lvbiBsb2dpY2FsRXhwcmVzc2lvbigKICAgICAgRXhwcmVzc2lvbiBsZWZ0T3BlcmFuZCwgVG9rZW4gb3BlcmF0b3IsIEV4cHJlc3Npb24gcmlnaHRPcGVyYW5kKTsKCiAgRXhwcmVzc2lvbiBub3RFeHByZXNzaW9uKAogICAgICBFeHByZXNzaW9uIG9wZXJhbmQsIFRva2VuIGxvY2F0aW9uLCBib29sIGlzU3ludGhldGljKTsKCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgcGFyZW50aGVzaXplZCBjb25kaXRpb24gY29uc2lzdGluZyBvZiB0aGUKICAvLy8gZ2l2ZW4gW2V4cHJlc3Npb25dIGJldHdlZW4gdGhlIFtsZWZ0UGFyZW50aGVzaXNdIGFuZCBbcmlnaHRQYXJlbnRoZXNpc10uCiAgT2JqZWN0IHBhcmVudGhlc2l6ZWRDb25kaXRpb24oCiAgICAgIFRva2VuIGxlZnRQYXJlbnRoZXNpcywgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBUb2tlbiByaWdodFBhcmVudGhlc2lzKTsKCiAgLy8vIFJldHVybiBhIHJlcHJlc2VudGF0aW9uIG9mIGEgcmV0aHJvdyBzdGF0ZW1lbnQgY29uc2lzdGluZyBvZiB0aGUKICAvLy8gW3JldGhyb3dLZXl3b3JkXSBmb2xsb3dlZCBieSB0aGUgW3NlbWljb2xvbl0uCiAgU3RhdGVtZW50IHJldGhyb3dTdGF0ZW1lbnQoVG9rZW4gcmV0aHJvd0tleXdvcmQsIFRva2VuIHNlbWljb2xvbik7CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIHJldHVybiBzdGF0ZW1lbnQuCiAgU3RhdGVtZW50IHJldHVyblN0YXRlbWVudCgKICAgICAgVG9rZW4gcmV0dXJuS2V5d29yZCwgRXhwcmVzc2lvbiBleHByZXNzaW9uLCBUb2tlbiBzZW1pY29sb24pOwoKICBFeHByZXNzaW9uIHN0cmluZ0NvbmNhdGVuYXRpb25FeHByZXNzaW9uKAogICAgICBMaXN0PEV4cHJlc3Npb24+IGV4cHJlc3Npb25zLCBUb2tlbiBsb2NhdGlvbik7CgogIC8vLyBUaGUgZ2l2ZW4gW3N0YXRlbWVudF0gaXMgYmVpbmcgdXNlZCBhcyB0aGUgdGFyZ2V0IG9mIGVpdGhlciBhIGJyZWFrIG9yCiAgLy8vIGNvbnRpbnVlIHN0YXRlbWVudC4gUmV0dXJuIHRoZSBzdGF0ZW1lbnQgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyB0aGUgYWN0dWFsCiAgLy8vIHRhcmdldC4KICBTdGF0ZW1lbnQgc3ludGhldGljTGFiZWxlZFN0YXRlbWVudChTdGF0ZW1lbnQgc3RhdGVtZW50KTsKCiAgRXhwcmVzc2lvbiB0aGlzRXhwcmVzc2lvbihUb2tlbiBsb2NhdGlvbik7CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIHRocm93IGV4cHJlc3Npb24gY29uc2lzdGluZyBvZiB0aGUKICAvLy8gW3Rocm93S2V5d29yZF0uCiAgRXhwcmVzc2lvbiB0aHJvd0V4cHJlc3Npb24oVG9rZW4gdGhyb3dLZXl3b3JkLCBFeHByZXNzaW9uIGV4cHJlc3Npb24pOwoKICBib29sIGlzVGhyb3coT2JqZWN0IG8pOwoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSB0cnkgc3RhdGVtZW50LiBUaGUgc3RhdGVtZW50IGlzIGludHJvZHVjZWQgYnkKICAvLy8gdGhlIFt0cnlLZXl3b3JkXSBhbmQgdGhlIGdpdmVuIFtib2R5XS4gSWYgY2F0Y2ggY2xhdXNlcyB3ZXJlIGluY2x1ZGVkLAogIC8vLyB0aGVuIHRoZSBbY2F0Y2hDbGF1c2VzXSB3aWxsIHJlcHJlc2VudCB0aGVtLCBvdGhlcndpc2UgaXQgd2lsbCBiZSBgbnVsbGAuCiAgLy8vIFNpbWlsYXJseSwgaWYgYSBmaW5hbGx5IGJsb2NrIHdhcyBpbmNsdWRlZCwgdGhlbiB0aGUgW2ZpbmFsbHlLZXl3b3JkXSBhbmQKICAvLy8gW2ZpbmFsbHlCbG9ja10gd2lsbCBiZSBub24tYG51bGxgLCBvdGhlcndpc2UgYm90aCB3aWxsIGJlIGBudWxsYC4gSWYgdGhlcmUKICAvLy8gd2FzIGFuIGVycm9yIGluIHNvbWUgcGFydCBvZiB0aGUgdHJ5IHN0YXRlbWVudCwgdGhlbiBhbiBbZXJyb3JSZXBsYWNlbWVudF0KICAvLy8gbWlnaHQgYmUgcHJvdmlkZWQsIGluIHdoaWNoIGNhc2UgaXQgY291bGQgYmUgcmV0dXJuZWQgaW5zdGVhZCBvZiB0aGUKICAvLy8gcmVwcmVzZW50YXRpb24gb2YgdGhlIHRyeSBzdGF0ZW1lbnQuCiAgU3RhdGVtZW50IHRyeVN0YXRlbWVudChUb2tlbiB0cnlLZXl3b3JkLCBTdGF0ZW1lbnQgYm9keSwKICAgICAgTGlzdDxDYXRjaD4gY2F0Y2hDbGF1c2VzLCBUb2tlbiBmaW5hbGx5S2V5d29yZCwgU3RhdGVtZW50IGZpbmFsbHlCbG9jayk7CgogIFN0YXRlbWVudCB2YXJpYWJsZXNEZWNsYXJhdGlvbigKICAgICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBkZWNsYXJhdGlvbnMsIFVyaSB1cmkpOwoKICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHZhcmlhYmxlc0RlY2xhcmF0aW9uRXh0cmFjdERlY2xhcmF0aW9ucygKICAgICAgY292YXJpYW50IFN0YXRlbWVudCB2YXJpYWJsZXNEZWNsYXJhdGlvbik7CgogIFN0YXRlbWVudCB3cmFwVmFyaWFibGVzKFN0YXRlbWVudCBzdGF0ZW1lbnQpOwoKICAvLy8gUmV0dXJuIGEgcmVwcmVzZW50YXRpb24gb2YgYSB3aGlsZSBzdGF0ZW1lbnQgaW50cm9kdWNlZCBieSB0aGUKICAvLy8gW3doaWxlS2V5d29yZF0gYW5kIGNvbnNpc3Rpbmcgb2YgdGhlIGdpdmVuIFtjb25kaXRpb25dIGFuZCBbYm9keV0uCiAgU3RhdGVtZW50IHdoaWxlU3RhdGVtZW50KAogICAgICBUb2tlbiB3aGlsZUtleXdvcmQsIEV4cHJlc3Npb24gY29uZGl0aW9uLCBTdGF0ZW1lbnQgYm9keSk7CgogIC8vLyBSZXR1cm4gYSByZXByZXNlbnRhdGlvbiBvZiBhIHlpZWxkIHN0YXRlbWVudCBjb25zaXN0aW5nIG9mIHRoZQogIC8vLyBbeWllbGRLZXl3b3JkXSwgW3N0YXJdLCBbZXhwcmVzc2lvbl0sIGFuZCBbc2VtaWNvbG9uXS4gVGhlIFtzdGFyXSBpcyBudWxsCiAgLy8vIHdoZW4gbm8gc3RhciB3YXMgaW5jbHVkZWQgaW4gdGhlIHNvdXJjZSBjb2RlLgogIFN0YXRlbWVudCB5aWVsZFN0YXRlbWVudCgKICAgICAgVG9rZW4geWllbGRLZXl3b3JkLCBUb2tlbiBzdGFyLCBFeHByZXNzaW9uIGV4cHJlc3Npb24sIFRva2VuIHNlbWljb2xvbik7CgogIC8vLyBSZXR1cm4gdGhlIGV4cHJlc3Npb24gZnJvbSB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBbc3RhdGVtZW50XS4KICBFeHByZXNzaW9uIGdldEV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvblN0YXRlbWVudChTdGF0ZW1lbnQgc3RhdGVtZW50KTsKCiAgYm9vbCBpc0Jsb2NrKE9iamVjdCBub2RlKTsKCiAgLy8vIFJldHVybiBgdHJ1ZWAgaWYgdGhlIGdpdmVuIFtzdGF0ZW1lbnRdIGlzIHRoZSByZXByZXNlbnRhdGlvbiBvZiBhbiBlbXB0eQogIC8vLyBzdGF0ZW1lbnQuCiAgYm9vbCBpc0VtcHR5U3RhdGVtZW50KFN0YXRlbWVudCBzdGF0ZW1lbnQpOwoKICBib29sIGlzRXJyb25lb3VzTm9kZShPYmplY3Qgbm9kZSk7CgogIC8vLyBSZXR1cm4gYHRydWVgIGlmIHRoZSBnaXZlbiBbc3RhdGVtZW50XSBpcyB0aGUgcmVwcmVzZW50YXRpb24gb2YgYW4KICAvLy8gZXhwcmVzc2lvbiBzdGF0ZW1lbnQuCiAgYm9vbCBpc0V4cHJlc3Npb25TdGF0ZW1lbnQoU3RhdGVtZW50IHN0YXRlbWVudCk7CgogIGJvb2wgaXNUaGlzRXhwcmVzc2lvbihPYmplY3Qgbm9kZSk7CgogIGJvb2wgaXNWYXJpYWJsZXNEZWNsYXJhdGlvbihPYmplY3Qgbm9kZSk7CgogIC8vIFRPRE8oYWhlKTogUmVtb3ZlIHRoaXMgbWV0aG9kIHdoZW4gYWxsIHVzZXJzIGFyZSBtb3ZlZCBoZXJlLgogIEFyZ3VtZW50cyBjYXN0QXJndW1lbnRzKEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBhcmd1bWVudHM7CiAgfQp9CoF7AE5OPAEWASIBIQkTDxIUGxIZExIdAS0BLgElASsBKgEoAUcBSgEdCRQcFyAdARQYEgFDPAEsATQBPQE+AU0BMAFQJTYBTyU6AVElNAE+AUtNTk1OTk5PUE8xGhoUGxwZJBsBSk1OTU1OTk5OTi8ZGhQbHBckGQFKTU5PTUZOUFFQTVBAGRoUGBocFx4ZAUkqAUZLNzoBUEskPgFQTEFQATkBUVBRSUIBIQFNAUEBUQFAARhRARdNARkrHCAXFAEYKxwgFRQBTUweAUxKHgFLGEc+AUhITwFCAU4oE0YBNBw+ATEWFx4aLi8fFwFOUUpPDUlKATcfQQExTS4BSyRJAUwTLQEyGhgdKxscJCEeFwE0P0wBSlFQTBtPAVEoRwFQPyBIARw9AU1PIU0BRzRFATUdRAEsNQFNUQ48AS0BRhZJARoBUU1QUFFRSys7TwEiOAFFMQEwAUVJHEEBRVA0HE8BQ0gBHQFPES4BJQFJHDMBJgEsAUIxFgQCAS5wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2ZvcmVzdC5kYXJ0R3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvaW1wbGljaXRfdHlwZV9hcmd1bWVudC5kYXJ0hJgvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLm1kIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmltcGxpY2l0X3R5cGVfYXJndW1lbnQ7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdyBEYXJ0VHlwZSwgRGFydFR5cGVWaXNpdG9yLCBEYXJ0VHlwZVZpc2l0b3IxLCBWaXNpdG9yOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuaGFuZGxlZCwgdW5zdXBwb3J0ZWQ7CgovLy8gTWFya2VyIHR5cGUgdXNlZCBhcyB0eXBlIGFyZ3VtZW50IG9uIGxpc3QsIHNldCBhbmQgbWFwIGxpdGVyYWxzIHdoZW5ldmVyCi8vLyB0eXBlIGFyZ3VtZW50cyBhcmUgb21pdHRlZCBpbiB0aGUgc291cmNlLgovLy8KLy8vIEFsbCBvZiB0aGVzZSB0eXBlcyBhcmUgcmVwbGFjZWQgYnkgdGhlIHR5cGUgaW5mZXJlbmNlLiBJdCBpcyBhbiBpbnRlcm5hbAovLy8gZXJyb3IgaWYgb25lIHN1cnZpdmVzIHRvIHRoZSBmaW5hbCBvdXRwdXQuCmNsYXNzIEltcGxpY2l0VHlwZUFyZ3VtZW50IGV4dGVuZHMgRGFydFR5cGUgewogIGNvbnN0IEltcGxpY2l0VHlwZUFyZ3VtZW50KCk7CgogIEBvdmVycmlkZQogIGdldCBudWxsYWJpbGl0eSA9PiB1bnN1cHBvcnRlZCgibnVsbGFiaWxpdHkiLCAtMSwgbnVsbCk7CgogIEBvdmVycmlkZQogIGFjY2VwdChEYXJ0VHlwZVZpc2l0b3I8T2JqZWN0PiB2KSB7CiAgICB1bmhhbmRsZWQoIiRydW50aW1lVHlwZSIsICIke3YucnVudGltZVR5cGV9IiwgLTEsIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0MShEYXJ0VHlwZVZpc2l0b3IxPE9iamVjdCwgT2JqZWN0PiB2LCBhcmcpIHsKICAgIHVuaGFuZGxlZCgiJHJ1bnRpbWVUeXBlIiwgIiR7di5ydW50aW1lVHlwZX0iLCAtMSwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENoaWxkcmVuKFZpc2l0b3I8T2JqZWN0PiB2KSB7CiAgICB1bmhhbmRsZWQoIiRydW50aW1lVHlwZSIsICIke3YucnVudGltZVR5cGV9IiwgLTEsIG51bGwpOwogIH0KfQonAE1OPwEmASE/ATcBTS4ETS8uIAEMOwEMJj0EAQw1PQQBDCU9BAIBPnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvaW1wbGljaXRfdHlwZV9hcmd1bWVudC5kYXJ0QHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvdHlwZV9hbGdvcml0aG1zLmRhcnTAAH8PLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS5tZCBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBCb3R0b21UeXBlLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIERhcnRUeXBlVmlzaXRvciwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBJbnZhbGlkVHlwZSwKICAgICAgICBOYW1lZFR5cGUsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBUeXBlZGVmVHlwZSwKICAgICAgICBWb2lkVHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIHNob3cgY29udGFpbnNUeXBlVmFyaWFibGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3NyYy9ib3VuZHNfY2hlY2tzLmRhcnQnIHNob3cgVmFyaWFuY2U7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3V0aWwvZ3JhcGguZGFydCcgc2hvdyBHcmFwaCwgY29tcHV0ZVN0cm9uZ0NvbXBvbmVudHM7CgppbXBvcnQgJ2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIsCiAgICAgICAgRnVuY3Rpb25UeXBlQnVpbGRlciwKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVBbGlhc0J1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyOwoKaW1wb3J0ICcuLi9kaWxsL2RpbGxfY2xhc3NfYnVpbGRlci5kYXJ0JyBzaG93IERpbGxDbGFzc0J1aWxkZXI7CgppbXBvcnQgJy4uL2RpbGwvZGlsbF90eXBlX2FsaWFzX2J1aWxkZXIuZGFydCcgc2hvdyBEaWxsVHlwZUFsaWFzQnVpbGRlcjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBMb2NhdGVkTWVzc2FnZSwKICAgICAgICB0ZW1wbGF0ZUJvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHksCiAgICAgICAgdGVtcGxhdGVCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHksCiAgICAgICAgdGVtcGxhdGVCb3VuZElzc3VlVmlhUmF3VHlwZVdpdGhOb25TaW1wbGVCb3VuZHMsCiAgICAgICAgdGVtcGxhdGVOb25TaW1wbGVCb3VuZFZpYVJlZmVyZW5jZSwKICAgICAgICB0ZW1wbGF0ZU5vblNpbXBsZUJvdW5kVmlhVmFyaWFibGU7CgpleHBvcnQgJ3BhY2thZ2U6a2VybmVsL3NyYy9ib3VuZHNfY2hlY2tzLmRhcnQnIHNob3cgVmFyaWFuY2U7CgovLyBDb21wdXRlcyB0aGUgdmFyaWFuY2Ugb2YgYSB2YXJpYWJsZSBpbiBhIHR5cGUuICBUaGUgZnVuY3Rpb24gY2FuIGJlIHJ1bgovLyBiZWZvcmUgdGhlIHR5cGVzIGFyZSByZXNvbHZlZCB0byBjb21wdXRlIHZhcmlhbmNlcyBvZiB0eXBlZGVmcycgdHlwZQovLyB2YXJpYWJsZXMuICBGb3IgdGhhdCBjYXNlIGlmIHRoZSB0eXBlIGhhcyBpdHMgZGVjbGFyYXRpb24gc2V0IHRvIG51bGwgYW5kIGl0cwovLyBuYW1lIG1hdGNoZXMgdGhhdCBvZiB0aGUgdmFyaWFibGUsIGl0J3MgaW50ZXJwcmV0ZWQgYXMgYW4gb2NjdXJyZW5jZSBvZiBhCi8vIHR5cGUgdmFyaWFibGUuCmludCBjb21wdXRlVmFyaWFuY2UoVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSwgVHlwZUJ1aWxkZXIgdHlwZSkgewogIGlmICh0eXBlIGlzIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb24gPSB0eXBlLmRlY2xhcmF0aW9uOwogICAgaWYgKGRlY2xhcmF0aW9uID09IG51bGwgfHwgZGVjbGFyYXRpb24gaXMgVHlwZVZhcmlhYmxlQnVpbGRlcikgewogICAgICBpZiAodHlwZS5uYW1lID09IHZhcmlhYmxlLm5hbWUpIHsKICAgICAgICByZXR1cm4gVmFyaWFuY2UuY292YXJpYW50OwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBWYXJpYW5jZS51bnJlbGF0ZWQ7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChkZWNsYXJhdGlvbiBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgICBpbnQgcmVzdWx0ID0gVmFyaWFuY2UudW5yZWxhdGVkOwogICAgICAgIGlmICh0eXBlLmFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKFR5cGVCdWlsZGVyIGFyZ3VtZW50IGluIHR5cGUuYXJndW1lbnRzKSB7CiAgICAgICAgICAgIHJlc3VsdCA9IFZhcmlhbmNlLm1lZXQocmVzdWx0LCBjb21wdXRlVmFyaWFuY2UodmFyaWFibGUsIGFyZ3VtZW50KSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgVHlwZUFsaWFzQnVpbGRlcikgewogICAgICAgIGludCByZXN1bHQgPSBWYXJpYW5jZS51bnJlbGF0ZWQ7CiAgICAgICAgaWYgKHR5cGUuYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS5hcmd1bWVudHMubGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgcmVzdWx0ID0gVmFyaWFuY2UubWVldCgKICAgICAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgICAgIFZhcmlhbmNlLmNvbWJpbmUoCiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZVZhcmlhbmNlKHZhcmlhYmxlLCB0eXBlLmFyZ3VtZW50c1tpXSksCiAgICAgICAgICAgICAgICAgICAgY29tcHV0ZVZhcmlhbmNlKAogICAgICAgICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzW2ldLCBkZWNsYXJhdGlvbi50eXBlKSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9CiAgfSBlbHNlIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgIGludCByZXN1bHQgPSBWYXJpYW5jZS51bnJlbGF0ZWQ7CiAgICBpZiAodHlwZS5yZXR1cm5UeXBlICE9IG51bGwpIHsKICAgICAgcmVzdWx0ID0KICAgICAgICAgIFZhcmlhbmNlLm1lZXQocmVzdWx0LCBjb21wdXRlVmFyaWFuY2UodmFyaWFibGUsIHR5cGUucmV0dXJuVHlwZSkpOwogICAgfQogICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0eXBlVmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgLy8gSWYgW3ZhcmlhYmxlXSBpcyByZWZlcmVuY2VkIGluIHRoZSBib3VuZCBhdCBhbGwsIGl0IG1ha2VzIHRoZQogICAgICAgIC8vIHZhcmlhbmNlIG9mIFt2YXJpYWJsZV0gaW4gdGhlIGVudGlyZSB0eXBlIGludmFyaWFudC4gIFRoZSBpbnZvY2F0aW9uCiAgICAgICAgLy8gb2YgW2NvbXB1dGVWYXJpYW5jZV0gYmVsb3cgaXMgbWFkZSB0byBzaW1wbHkgZmlndXJlIG91dCBpZiBbdmFyaWFibGVdCiAgICAgICAgLy8gb2NjdXJzIGluIHRoZSBib3VuZC4KICAgICAgICBpZiAodHlwZVZhcmlhYmxlLmJvdW5kICE9IG51bGwgJiYKICAgICAgICAgICAgY29tcHV0ZVZhcmlhbmNlKHZhcmlhYmxlLCB0eXBlVmFyaWFibGUuYm91bmQpICE9CiAgICAgICAgICAgICAgICBWYXJpYW5jZS51bnJlbGF0ZWQpIHsKICAgICAgICAgIHJlc3VsdCA9IFZhcmlhbmNlLmludmFyaWFudDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmICh0eXBlLmZvcm1hbHMgIT0gbnVsbCkgewogICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsIGluIHR5cGUuZm9ybWFscykgewogICAgICAgIHJlc3VsdCA9IFZhcmlhbmNlLm1lZXQoCiAgICAgICAgICAgIHJlc3VsdCwKICAgICAgICAgICAgVmFyaWFuY2UuY29tYmluZShWYXJpYW5jZS5jb250cmF2YXJpYW50LAogICAgICAgICAgICAgICAgY29tcHV0ZVZhcmlhbmNlKHZhcmlhYmxlLCBmb3JtYWwudHlwZSkpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgcmV0dXJuIFZhcmlhbmNlLnVucmVsYXRlZDsKfQoKVHlwZUJ1aWxkZXIgc3Vic3RpdHV0ZVJhbmdlKAogICAgVHlwZUJ1aWxkZXIgdHlwZSwKICAgIE1hcDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj4gdXBwZXJTdWJzdGl0dXRpb24sCiAgICBNYXA8VHlwZVZhcmlhYmxlQnVpbGRlciwgVHlwZUJ1aWxkZXI+IGxvd2VyU3Vic3RpdHV0aW9uLAogICAge2Jvb2wgaXNDb3ZhcmlhbnQgPSB0cnVlfSkgewogIGlmICh0eXBlIGlzIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgIGlmICh0eXBlLmRlY2xhcmF0aW9uIGlzIFR5cGVWYXJpYWJsZUJ1aWxkZXIpIHsKICAgICAgaWYgKGlzQ292YXJpYW50KSB7CiAgICAgICAgcmV0dXJuIHVwcGVyU3Vic3RpdHV0aW9uW3R5cGUuZGVjbGFyYXRpb25dID8/IHR5cGU7CiAgICAgIH0KICAgICAgcmV0dXJuIGxvd2VyU3Vic3RpdHV0aW9uW3R5cGUuZGVjbGFyYXRpb25dID8/IHR5cGU7CiAgICB9CiAgICBpZiAodHlwZS5hcmd1bWVudHMgPT0gbnVsbCB8fCB0eXBlLmFyZ3VtZW50cy5sZW5ndGggPT0gMCkgewogICAgICByZXR1cm4gdHlwZTsKICAgIH0KICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50czsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZS5hcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgVHlwZUJ1aWxkZXIgc3Vic3RpdHV0ZWRBcmd1bWVudCA9IHN1YnN0aXR1dGVSYW5nZSgKICAgICAgICAgIHR5cGUuYXJndW1lbnRzW2ldLCB1cHBlclN1YnN0aXR1dGlvbiwgbG93ZXJTdWJzdGl0dXRpb24sCiAgICAgICAgICBpc0NvdmFyaWFudDogaXNDb3ZhcmlhbnQpOwogICAgICBpZiAoc3Vic3RpdHV0ZWRBcmd1bWVudCAhPSB0eXBlLmFyZ3VtZW50c1tpXSkgewogICAgICAgIGFyZ3VtZW50cyA/Pz0gdHlwZS5hcmd1bWVudHMudG9MaXN0KCk7CiAgICAgICAgYXJndW1lbnRzW2ldID0gc3Vic3RpdHV0ZWRBcmd1bWVudDsKICAgICAgfQogICAgfQogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgTmFtZWRUeXBlQnVpbGRlcih0eXBlLm5hbWUsIGFyZ3VtZW50cykuLmJpbmQodHlwZS5kZWNsYXJhdGlvbik7CiAgICB9CiAgICByZXR1cm4gdHlwZTsKICB9CgogIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdmFyaWFibGVzOwogICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIHZhcmlhYmxlcyA9IG5ldyBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+KHR5cGUudHlwZVZhcmlhYmxlcy5sZW5ndGgpOwogICAgfQogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzOwogICAgaWYgKHR5cGUuZm9ybWFscyAhPSBudWxsKSB7CiAgICAgIGZvcm1hbHMgPSBuZXcgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPih0eXBlLmZvcm1hbHMubGVuZ3RoKTsKICAgIH0KICAgIFR5cGVCdWlsZGVyIHJldHVyblR5cGU7CiAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKCiAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJpYWJsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlID0gdHlwZS50eXBlVmFyaWFibGVzW2ldOwogICAgICAgIFR5cGVCdWlsZGVyIGJvdW5kID0gc3Vic3RpdHV0ZVJhbmdlKAogICAgICAgICAgICB2YXJpYWJsZS5ib3VuZCwgdXBwZXJTdWJzdGl0dXRpb24sIGxvd2VyU3Vic3RpdHV0aW9uLAogICAgICAgICAgICBpc0NvdmFyaWFudDogaXNDb3ZhcmlhbnQpOwogICAgICAgIGlmIChib3VuZCAhPSB2YXJpYWJsZS5ib3VuZCkgewogICAgICAgICAgdmFyaWFibGVzW2ldID0gbmV3IFR5cGVWYXJpYWJsZUJ1aWxkZXIoCiAgICAgICAgICAgICAgdmFyaWFibGUubmFtZSwgdmFyaWFibGUucGFyZW50LCB2YXJpYWJsZS5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgIGJvdW5kOiBib3VuZCk7CiAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyaWFibGVzW2ldID0gdmFyaWFibGU7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKHR5cGUuZm9ybWFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9ybWFscy5sZW5ndGg7IGkrKykgewogICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsID0gdHlwZS5mb3JtYWxzW2ldOwogICAgICAgIFR5cGVCdWlsZGVyIHBhcmFtZXRlclR5cGUgPSBzdWJzdGl0dXRlUmFuZ2UoCiAgICAgICAgICAgIGZvcm1hbC50eXBlLCB1cHBlclN1YnN0aXR1dGlvbiwgbG93ZXJTdWJzdGl0dXRpb24sCiAgICAgICAgICAgIGlzQ292YXJpYW50OiAhaXNDb3ZhcmlhbnQpOwogICAgICAgIGlmIChwYXJhbWV0ZXJUeXBlICE9IGZvcm1hbC50eXBlKSB7CiAgICAgICAgICBmb3JtYWxzW2ldID0gbmV3IEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIoCiAgICAgICAgICAgICAgZm9ybWFsLm1ldGFkYXRhLAogICAgICAgICAgICAgIGZvcm1hbC5tb2RpZmllcnMsCiAgICAgICAgICAgICAgcGFyYW1ldGVyVHlwZSwKICAgICAgICAgICAgICBmb3JtYWwubmFtZSwKICAgICAgICAgICAgICBmb3JtYWwucGFyZW50LAogICAgICAgICAgICAgIGZvcm1hbC5jaGFyT2Zmc2V0KTsKICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3JtYWxzW2ldID0gZm9ybWFsOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVyblR5cGUgPSBzdWJzdGl0dXRlUmFuZ2UoCiAgICAgICAgdHlwZS5yZXR1cm5UeXBlLCB1cHBlclN1YnN0aXR1dGlvbiwgbG93ZXJTdWJzdGl0dXRpb24sCiAgICAgICAgaXNDb3ZhcmlhbnQ6IHRydWUpOwogICAgaWYgKHJldHVyblR5cGUgIT0gdHlwZS5yZXR1cm5UeXBlKSB7CiAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgfQoKICAgIGlmIChjaGFuZ2VkKSB7CiAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlQnVpbGRlcihyZXR1cm5UeXBlLCB2YXJpYWJsZXMsIGZvcm1hbHMpOwogICAgfQoKICAgIHJldHVybiB0eXBlOwogIH0KICByZXR1cm4gdHlwZTsKfQoKVHlwZUJ1aWxkZXIgc3Vic3RpdHV0ZSgKICAgIFR5cGVCdWlsZGVyIHR5cGUsIE1hcDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj4gc3Vic3RpdHV0aW9uKSB7CiAgcmV0dXJuIHN1YnN0aXR1dGVSYW5nZSh0eXBlLCBzdWJzdGl0dXRpb24sIHN1YnN0aXR1dGlvbiwgaXNDb3ZhcmlhbnQ6IHRydWUpOwp9CgovLy8gQ2FsY3VsYXRlcyBib3VuZHMgdG8gYmUgcHJvdmlkZWQgYXMgdHlwZSBhcmd1bWVudHMgaW4gcGxhY2Ugb2YgbWlzc2luZyB0eXBlCi8vLyBhcmd1bWVudHMgb24gcmF3IHR5cGVzIHdpdGggdGhlIGdpdmVuIHR5cGUgcGFyYW1ldGVycy4KLy8vCi8vLyBTZWUgdGhlIFtkZXNjcmlwdGlvbl0KLy8vIChodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9ibG9iL21hc3Rlci9kb2NzL2xhbmd1YWdlL2luZm9ybWFsL2luc3RhbnRpYXRlLXRvLWJvdW5kLm1kKQovLy8gb2YgdGhlIGFsZ29yaXRobSBmb3IgZGV0YWlscy4KTGlzdDxUeXBlQnVpbGRlcj4gY2FsY3VsYXRlQm91bmRzKExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdmFyaWFibGVzLAogICAgVHlwZUJ1aWxkZXIgZHluYW1pY1R5cGUsIFR5cGVCdWlsZGVyIGJvdHRvbVR5cGUsIENsYXNzQnVpbGRlciBvYmplY3RDbGFzcykgewogIExpc3Q8VHlwZUJ1aWxkZXI+IGJvdW5kcyA9IG5ldyBMaXN0PFR5cGVCdWlsZGVyPih2YXJpYWJsZXMubGVuZ3RoKTsKCiAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YXJpYWJsZXMubGVuZ3RoOyBpKyspIHsKICAgIGJvdW5kc1tpXSA9IHZhcmlhYmxlc1tpXS5ib3VuZCA/PyBkeW5hbWljVHlwZTsKICB9CgogIFR5cGVWYXJpYWJsZXNHcmFwaCBncmFwaCA9IG5ldyBUeXBlVmFyaWFibGVzR3JhcGgodmFyaWFibGVzLCBib3VuZHMpOwogIExpc3Q8TGlzdDxpbnQ+PiBzdHJvbmdseUNvbm5lY3RlZCA9IGNvbXB1dGVTdHJvbmdDb21wb25lbnRzKGdyYXBoKTsKICBmb3IgKExpc3Q8aW50PiBjb21wb25lbnQgaW4gc3Ryb25nbHlDb25uZWN0ZWQpIHsKICAgIE1hcDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj4gZHluYW1pY1N1YnN0aXR1dGlvbiA9CiAgICAgICAgPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPnt9OwogICAgTWFwPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPiBudWxsU3Vic3RpdHV0aW9uID0KICAgICAgICA8VHlwZVZhcmlhYmxlQnVpbGRlciwgVHlwZUJ1aWxkZXI+e307CiAgICBmb3IgKGludCB2YXJpYWJsZUluZGV4IGluIGNvbXBvbmVudCkgewogICAgICBkeW5hbWljU3Vic3RpdHV0aW9uW3ZhcmlhYmxlc1t2YXJpYWJsZUluZGV4XV0gPSBkeW5hbWljVHlwZTsKICAgICAgbnVsbFN1YnN0aXR1dGlvblt2YXJpYWJsZXNbdmFyaWFibGVJbmRleF1dID0gYm90dG9tVHlwZTsKICAgIH0KICAgIGZvciAoaW50IHZhcmlhYmxlSW5kZXggaW4gY29tcG9uZW50KSB7CiAgICAgIGJvdW5kc1t2YXJpYWJsZUluZGV4XSA9IHN1YnN0aXR1dGVSYW5nZSgKICAgICAgICAgIGJvdW5kc1t2YXJpYWJsZUluZGV4XSwgZHluYW1pY1N1YnN0aXR1dGlvbiwgbnVsbFN1YnN0aXR1dGlvbiwKICAgICAgICAgIGlzQ292YXJpYW50OiB0cnVlKTsKICAgIH0KICB9CgogIGZvciAoaW50IGkgPSAwOyBpIDwgdmFyaWFibGVzLmxlbmd0aDsgaSsrKSB7CiAgICBNYXA8VHlwZVZhcmlhYmxlQnVpbGRlciwgVHlwZUJ1aWxkZXI+IHN1YnN0aXR1dGlvbiA9CiAgICAgICAgPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPnt9OwogICAgTWFwPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPiBudWxsU3Vic3RpdHV0aW9uID0KICAgICAgICA8VHlwZVZhcmlhYmxlQnVpbGRlciwgVHlwZUJ1aWxkZXI+e307CiAgICBzdWJzdGl0dXRpb25bdmFyaWFibGVzW2ldXSA9IGJvdW5kc1tpXTsKICAgIG51bGxTdWJzdGl0dXRpb25bdmFyaWFibGVzW2ldXSA9IGJvdHRvbVR5cGU7CiAgICBmb3IgKGludCBqID0gMDsgaiA8IHZhcmlhYmxlcy5sZW5ndGg7IGorKykgewogICAgICBib3VuZHNbal0gPSBzdWJzdGl0dXRlUmFuZ2UoYm91bmRzW2pdLCBzdWJzdGl0dXRpb24sIG51bGxTdWJzdGl0dXRpb24sCiAgICAgICAgICBpc0NvdmFyaWFudDogdHJ1ZSk7CiAgICB9CiAgfQoKICByZXR1cm4gYm91bmRzOwp9CgovLy8gR3JhcGggb2YgbXV0dWFsIGRlcGVuZGVuY2llcyBvZiB0eXBlIHZhcmlhYmxlcyBmcm9tIHRoZSBzYW1lIGRlY2xhcmF0aW9uLgovLy8gVHlwZSB2YXJpYWJsZXMgYXJlIHJlcHJlc2VudGVkIGJ5IHRoZWlyIGluZGljZXMgaW4gdGhlIGNvcnJlc3BvbmRpbmcKLy8vIGRlY2xhcmF0aW9uLgpjbGFzcyBUeXBlVmFyaWFibGVzR3JhcGggaW1wbGVtZW50cyBHcmFwaDxpbnQ+IHsKICBMaXN0PGludD4gdmVydGljZXM7CiAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB2YXJpYWJsZXM7CiAgTGlzdDxUeXBlQnVpbGRlcj4gYm91bmRzOwoKICAvLyBgZWRnZXNbaV1gIGlzIHRoZSBsaXN0IG9mIGluZGljZXMgb2YgdHlwZSB2YXJpYWJsZXMgdGhhdCByZWZlcmVuY2UgdGhlIHR5cGUKICAvLyB2YXJpYWJsZSB3aXRoIHRoZSBpbmRleCBgaWAgaW4gdGhlaXIgYm91bmRzLgogIExpc3Q8TGlzdDxpbnQ+PiBlZGdlczsKCiAgVHlwZVZhcmlhYmxlc0dyYXBoKHRoaXMudmFyaWFibGVzLCB0aGlzLmJvdW5kcykgewogICAgYXNzZXJ0KHZhcmlhYmxlcy5sZW5ndGggPT0gYm91bmRzLmxlbmd0aCk7CgogICAgdmVydGljZXMgPSBuZXcgTGlzdDxpbnQ+KHZhcmlhYmxlcy5sZW5ndGgpOwogICAgTWFwPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIGludD4gdmFyaWFibGVJbmRpY2VzID0KICAgICAgICA8VHlwZVZhcmlhYmxlQnVpbGRlciwgaW50Pnt9OwogICAgZWRnZXMgPSBuZXcgTGlzdDxMaXN0PGludD4+KHZhcmlhYmxlcy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykgewogICAgICB2ZXJ0aWNlc1tpXSA9IGk7CiAgICAgIHZhcmlhYmxlSW5kaWNlc1t2YXJpYWJsZXNbaV1dID0gaTsKICAgICAgZWRnZXNbaV0gPSA8aW50PltdOwogICAgfQoKICAgIHZvaWQgY29sbGVjdFJlZmVyZW5jZXNGcm9tKGludCBpbmRleCwgVHlwZUJ1aWxkZXIgdHlwZSkgewogICAgICBpZiAodHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICAgICAgaWYgKHR5cGUuZGVjbGFyYXRpb24gaXMgVHlwZVZhcmlhYmxlQnVpbGRlciAmJgogICAgICAgICAgICB0aGlzLnZhcmlhYmxlcy5jb250YWlucyh0eXBlLmRlY2xhcmF0aW9uKSkgewogICAgICAgICAgZWRnZXNbdmFyaWFibGVJbmRpY2VzW3R5cGUuZGVjbGFyYXRpb25dXS5hZGQoaW5kZXgpOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZS5hcmd1bWVudHMgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChUeXBlQnVpbGRlciBhcmd1bWVudCBpbiB0eXBlLmFyZ3VtZW50cykgewogICAgICAgICAgICBjb2xsZWN0UmVmZXJlbmNlc0Zyb20oaW5kZXgsIGFyZ3VtZW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGVCdWlsZGVyKSB7CiAgICAgICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdHlwZVZhcmlhYmxlIGluIHR5cGUudHlwZVZhcmlhYmxlcykgewogICAgICAgICAgICBjb2xsZWN0UmVmZXJlbmNlc0Zyb20oaW5kZXgsIHR5cGVWYXJpYWJsZS5ib3VuZCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlLmZvcm1hbHMgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIHBhcmFtZXRlciBpbiB0eXBlLmZvcm1hbHMpIHsKICAgICAgICAgICAgY29sbGVjdFJlZmVyZW5jZXNGcm9tKGluZGV4LCBwYXJhbWV0ZXIudHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbGxlY3RSZWZlcmVuY2VzRnJvbShpbmRleCwgdHlwZS5yZXR1cm5UeXBlKTsKICAgICAgfQogICAgfQoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmVydGljZXMubGVuZ3RoOyBpKyspIHsKICAgICAgY29sbGVjdFJlZmVyZW5jZXNGcm9tKGksIGJvdW5kc1tpXSk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyBpbmRpY2VzIG9mIHR5cGUgdmFyaWFibGVzIHRoYXQgZGVwZW5kIG9uIHRoZSB0eXBlIHZhcmlhYmxlIHdpdGgKICAvLy8gW2luZGV4XS4KICBJdGVyYWJsZTxpbnQ+IG5laWdoYm9yc09mKGludCBpbmRleCkgewogICAgcmV0dXJuIGVkZ2VzW2luZGV4XTsKICB9Cn0KCi8vLyBGaW5kcyBhbGwgdHlwZSBidWlsZGVycyBmb3IgW3ZhcmlhYmxlXSBpbiBbdHlwZV0uCi8vLwovLy8gUmV0dXJucyBsaXN0IG9mIHRoZSBmb3VuZCB0eXBlIGJ1aWxkZXJzLgpMaXN0PE5hbWVkVHlwZUJ1aWxkZXI+IGZpbmRWYXJpYWJsZVVzZXNJblR5cGUoCiAgVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSwKICBUeXBlQnVpbGRlciB0eXBlLAopIHsKICB2YXIgdXNlcyA9IDxOYW1lZFR5cGVCdWlsZGVyPltdOwogIGlmICh0eXBlIGlzIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgIGlmICh0eXBlLmRlY2xhcmF0aW9uID09IHZhcmlhYmxlKSB7CiAgICAgIHVzZXMuYWRkKHR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKHR5cGUuYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgICBmb3IgKFR5cGVCdWlsZGVyIGFyZ3VtZW50IGluIHR5cGUuYXJndW1lbnRzKSB7CiAgICAgICAgICB1c2VzLmFkZEFsbChmaW5kVmFyaWFibGVVc2VzSW5UeXBlKHZhcmlhYmxlLCBhcmd1bWVudCkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0gZWxzZSBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGVCdWlsZGVyKSB7CiAgICB1c2VzLmFkZEFsbChmaW5kVmFyaWFibGVVc2VzSW5UeXBlKHZhcmlhYmxlLCB0eXBlLnJldHVyblR5cGUpKTsKICAgIGlmICh0eXBlLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgZGVwZW5kZW50VmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgaWYgKGRlcGVuZGVudFZhcmlhYmxlLmJvdW5kICE9IG51bGwpIHsKICAgICAgICAgIHVzZXMuYWRkQWxsKAogICAgICAgICAgICAgIGZpbmRWYXJpYWJsZVVzZXNJblR5cGUodmFyaWFibGUsIGRlcGVuZGVudFZhcmlhYmxlLmJvdW5kKSk7CiAgICAgICAgfQogICAgICAgIGlmIChkZXBlbmRlbnRWYXJpYWJsZS5kZWZhdWx0VHlwZSAhPSBudWxsKSB7CiAgICAgICAgICB1c2VzLmFkZEFsbCgKICAgICAgICAgICAgICBmaW5kVmFyaWFibGVVc2VzSW5UeXBlKHZhcmlhYmxlLCBkZXBlbmRlbnRWYXJpYWJsZS5kZWZhdWx0VHlwZSkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKHR5cGUuZm9ybWFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gdHlwZS5mb3JtYWxzKSB7CiAgICAgICAgdXNlcy5hZGRBbGwoZmluZFZhcmlhYmxlVXNlc0luVHlwZSh2YXJpYWJsZSwgZm9ybWFsLnR5cGUpKTsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gdXNlczsKfQoKLy8vIEZpbmRzIHRob3NlIG9mIFt2YXJpYWJsZXNdIHRoYXQgcmVmZXJlbmNlIG90aGVyIFt2YXJpYWJsZXNdIGluIHRoZWlyIGJvdW5kcy4KLy8vCi8vLyBSZXR1cm5zIGZsYXR0ZW5lZCBsaXN0IG9mIHBhaXJzLiAgVGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHBhaXIgaXMgdGhlIHR5cGUKLy8vIHZhcmlhYmxlIGJ1aWxkZXIgZnJvbSBbdmFyaWFibGVzXSB0aGF0IHJlZmVyZW5jZXMgb3RoZXIgW3ZhcmlhYmxlc10gaW4gaXRzCi8vLyBib3VuZC4gIFRoZSBzZWNvbmQgZWxlbWVudCBpbiB0aGUgcGFpciBpcyB0aGUgbGlzdCBvZiBmb3VuZCByZWZlcmVuY2VzCi8vLyByZXByZXNlbnRlZCBhcyB0eXBlIGJ1aWxkZXJzLgpMaXN0PE9iamVjdD4gZmluZEluYm91bmRSZWZlcmVuY2VzKExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdmFyaWFibGVzKSB7CiAgdmFyIHZhcmlhYmxlc0FuZERlcGVuZGVuY2llcyA9IDxPYmplY3Q+W107CiAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIGRlcGVuZGVudCBpbiB2YXJpYWJsZXMpIHsKICAgIHZhciBkZXBlbmRlbmNpZXMgPSA8TmFtZWRUeXBlQnVpbGRlcj5bXTsKICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciBkZXBlbmRlbmNlIGluIHZhcmlhYmxlcykgewogICAgICBMaXN0PE5hbWVkVHlwZUJ1aWxkZXI+IHVzZXMgPQogICAgICAgICAgZmluZFZhcmlhYmxlVXNlc0luVHlwZShkZXBlbmRlbmNlLCBkZXBlbmRlbnQuYm91bmQpOwogICAgICBpZiAodXNlcy5sZW5ndGggIT0gMCkgewogICAgICAgIGRlcGVuZGVuY2llcy5hZGRBbGwodXNlcyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChkZXBlbmRlbmNpZXMubGVuZ3RoICE9IDApIHsKICAgICAgdmFyaWFibGVzQW5kRGVwZW5kZW5jaWVzLmFkZChkZXBlbmRlbnQpOwogICAgICB2YXJpYWJsZXNBbmREZXBlbmRlbmNpZXMuYWRkKGRlcGVuZGVuY2llcyk7CiAgICB9CiAgfQogIHJldHVybiB2YXJpYWJsZXNBbmREZXBlbmRlbmNpZXM7Cn0KCi8vLyBGaW5kcyByYXcgZ2VuZXJpYyB0eXBlcyBpbiBbdHlwZV0gd2l0aCBpbmJvdW5kIHJlZmVyZW5jZXMgaW4gdHlwZSB2YXJpYWJsZXMuCi8vLwovLy8gUmV0dXJucyBmbGF0dGVuZWQgbGlzdCBvZiBwYWlycy4gIFRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBwYWlyIGlzIHRoZSBmb3VuZAovLy8gcmF3IGdlbmVyaWMgdHlwZS4gIFRoZSBzZWNvbmQgZWxlbWVudCBpbiB0aGUgcGFpciBpcyB0aGUgbGlzdCBvZiB0eXBlCi8vLyB2YXJpYWJsZXMgb2YgdGhhdCB0eXBlIHdpdGggaW5ib3VuZCByZWZlcmVuY2VzIGluIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGluCi8vLyBbZmluZEluYm91bmRSZWZlcmVuY2VzXS4KTGlzdDxPYmplY3Q+IGZpbmRSYXdUeXBlc1dpdGhJbmJvdW5kUmVmZXJlbmNlcyhUeXBlQnVpbGRlciB0eXBlKSB7CiAgdmFyIHR5cGVzQW5kRGVwZW5kZW5jaWVzID0gPE9iamVjdD5bXTsKICBpZiAodHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICBpZiAodHlwZS5hcmd1bWVudHMgPT0gbnVsbCkgewogICAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uID0gdHlwZS5kZWNsYXJhdGlvbjsKICAgICAgaWYgKGRlY2xhcmF0aW9uIGlzIERpbGxDbGFzc0J1aWxkZXIpIHsKICAgICAgICBib29sIGhhc0luYm91bmQgPSBmYWxzZTsKICAgICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzID0gZGVjbGFyYXRpb24udGFyZ2V0LnR5cGVQYXJhbWV0ZXJzOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoICYmICFoYXNJbmJvdW5kOyArK2kpIHsKICAgICAgICAgIGlmIChjb250YWluc1R5cGVWYXJpYWJsZSgKICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyc1tpXS5ib3VuZCwgdHlwZVBhcmFtZXRlcnMudG9TZXQoKSkpIHsKICAgICAgICAgICAgaGFzSW5ib3VuZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChoYXNJbmJvdW5kKSB7CiAgICAgICAgICB0eXBlc0FuZERlcGVuZGVuY2llcy5hZGQodHlwZSk7CiAgICAgICAgICB0eXBlc0FuZERlcGVuZGVuY2llcy5hZGQoY29uc3QgPE9iamVjdD5bXSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIERpbGxUeXBlQWxpYXNCdWlsZGVyKSB7CiAgICAgICAgYm9vbCBoYXNJbmJvdW5kID0gZmFsc2U7CiAgICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9IGRlY2xhcmF0aW9uLnRhcmdldC50eXBlUGFyYW1ldGVyczsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJzLmxlbmd0aCAmJiAhaGFzSW5ib3VuZDsgKytpKSB7CiAgICAgICAgICBpZiAoY29udGFpbnNUeXBlVmFyaWFibGUoCiAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnNbaV0uYm91bmQsIHR5cGVQYXJhbWV0ZXJzLnRvU2V0KCkpKSB7CiAgICAgICAgICAgIGhhc0luYm91bmQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaGFzSW5ib3VuZCkgewogICAgICAgICAgdHlwZXNBbmREZXBlbmRlbmNpZXMuYWRkKHR5cGUpOwogICAgICAgICAgdHlwZXNBbmREZXBlbmRlbmNpZXMuYWRkKGNvbnN0IDxPYmplY3Q+W10pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBDbGFzc0J1aWxkZXIgJiYKICAgICAgICAgIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICAgIExpc3Q8T2JqZWN0PiBkZXBlbmRlbmNpZXMgPQogICAgICAgICAgICBmaW5kSW5ib3VuZFJlZmVyZW5jZXMoZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcyk7CiAgICAgICAgaWYgKGRlcGVuZGVuY2llcy5sZW5ndGggIT0gMCkgewogICAgICAgICAgdHlwZXNBbmREZXBlbmRlbmNpZXMuYWRkKHR5cGUpOwogICAgICAgICAgdHlwZXNBbmREZXBlbmRlbmNpZXMuYWRkKGRlcGVuZGVuY2llcyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFR5cGVBbGlhc0J1aWxkZXIpIHsKICAgICAgICBpZiAoZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgICAgICBMaXN0PE9iamVjdD4gZGVwZW5kZW5jaWVzID0KICAgICAgICAgICAgICBmaW5kSW5ib3VuZFJlZmVyZW5jZXMoZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcyk7CiAgICAgICAgICBpZiAoZGVwZW5kZW5jaWVzLmxlbmd0aCAhPSAwKSB7CiAgICAgICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzLmFkZCh0eXBlKTsKICAgICAgICAgICAgdHlwZXNBbmREZXBlbmRlbmNpZXMuYWRkKGRlcGVuZGVuY2llcyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChkZWNsYXJhdGlvbi50eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgICAgICAgIEZ1bmN0aW9uVHlwZUJ1aWxkZXIgdHlwZSA9IGRlY2xhcmF0aW9uLnR5cGU7CiAgICAgICAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICAgICAgTGlzdDxPYmplY3Q+IGRlcGVuZGVuY2llcyA9CiAgICAgICAgICAgICAgICBmaW5kSW5ib3VuZFJlZmVyZW5jZXModHlwZS50eXBlVmFyaWFibGVzKTsKICAgICAgICAgICAgaWYgKGRlcGVuZGVuY2llcy5sZW5ndGggIT0gMCkgewogICAgICAgICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzLmFkZCh0eXBlKTsKICAgICAgICAgICAgICB0eXBlc0FuZERlcGVuZGVuY2llcy5hZGQoZGVwZW5kZW5jaWVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChUeXBlQnVpbGRlciBhcmd1bWVudCBpbiB0eXBlLmFyZ3VtZW50cykgewogICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzCiAgICAgICAgICAgIC5hZGRBbGwoZmluZFJhd1R5cGVzV2l0aEluYm91bmRSZWZlcmVuY2VzKGFyZ3VtZW50KSk7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlQnVpbGRlcikgewogICAgdHlwZXNBbmREZXBlbmRlbmNpZXMKICAgICAgICAuYWRkQWxsKGZpbmRSYXdUeXBlc1dpdGhJbmJvdW5kUmVmZXJlbmNlcyh0eXBlLnJldHVyblR5cGUpKTsKICAgIGlmICh0eXBlLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgaWYgKHZhcmlhYmxlLmJvdW5kICE9IG51bGwpIHsKICAgICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgLmFkZEFsbChmaW5kUmF3VHlwZXNXaXRoSW5ib3VuZFJlZmVyZW5jZXModmFyaWFibGUuYm91bmQpKTsKICAgICAgICB9CiAgICAgICAgaWYgKHZhcmlhYmxlLmRlZmF1bHRUeXBlICE9IG51bGwpIHsKICAgICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzCiAgICAgICAgICAgICAgLmFkZEFsbChmaW5kUmF3VHlwZXNXaXRoSW5ib3VuZFJlZmVyZW5jZXModmFyaWFibGUuZGVmYXVsdFR5cGUpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmICh0eXBlLmZvcm1hbHMgIT0gbnVsbCkgewogICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsIGluIHR5cGUuZm9ybWFscykgewogICAgICAgIHR5cGVzQW5kRGVwZW5kZW5jaWVzCiAgICAgICAgICAgIC5hZGRBbGwoZmluZFJhd1R5cGVzV2l0aEluYm91bmRSZWZlcmVuY2VzKGZvcm1hbC50eXBlKSk7CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIHR5cGVzQW5kRGVwZW5kZW5jaWVzOwp9CgovLy8gRmluZHMgaXNzdWVzIGJ5IHJhdyBnZW5lcmljIHR5cGVzIHdpdGggaW5ib3VuZCByZWZlcmVuY2VzIGluIHR5cGUgdmFyaWFibGVzLgovLy8KLy8vIFJldHVybnMgZmxhdHRlbmVkIGxpc3Qgb2YgdHJpcGxldHMuICBUaGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgdHJpcGxldCBpcyB0aGUKLy8vIFtUeXBlRGVjbGFyYXRpb25CdWlsZGVyXSBmb3IgdGhlIHR5cGUgdmFyaWFibGUgZnJvbSBbdmFyaWFibGVzXSB0aGF0IGhhcyByYXcKLy8vIGdlbmVyaWMgdHlwZXMgd2l0aCBpbmJvdW5kIHJlZmVyZW5jZXMgaW4gaXRzIGJvdW5kLiAgVGhlIHNlY29uZCBlbGVtZW50IG9mCi8vLyB0aGUgdHJpcGxldCBpcyB0aGUgZXJyb3IgbWVzc2FnZS4gIFRoZSB0aGlyZCBlbGVtZW50IGlzIHRoZSBjb250ZXh0LgpMaXN0PE9iamVjdD4gZ2V0SW5ib3VuZFJlZmVyZW5jZUlzc3VlcyhMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHZhcmlhYmxlcykgewogIHZhciBpc3N1ZXMgPSA8T2JqZWN0PltdOwogIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSBpbiB2YXJpYWJsZXMpIHsKICAgIGlmICh2YXJpYWJsZS5ib3VuZCAhPSBudWxsKSB7CiAgICAgIExpc3Q8T2JqZWN0PiByYXdUeXBlc0FuZE11dHVhbERlcGVuZGVuY2llcyA9CiAgICAgICAgICBmaW5kUmF3VHlwZXNXaXRoSW5ib3VuZFJlZmVyZW5jZXModmFyaWFibGUuYm91bmQpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJhd1R5cGVzQW5kTXV0dWFsRGVwZW5kZW5jaWVzLmxlbmd0aDsgaSArPSAyKSB7CiAgICAgICAgTmFtZWRUeXBlQnVpbGRlciB0eXBlID0gcmF3VHlwZXNBbmRNdXR1YWxEZXBlbmRlbmNpZXNbaV07CiAgICAgICAgTGlzdDxPYmplY3Q+IHZhcmlhYmxlc0FuZERlcGVuZGVuY2llcyA9CiAgICAgICAgICAgIHJhd1R5cGVzQW5kTXV0dWFsRGVwZW5kZW5jaWVzW2kgKyAxXTsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHZhcmlhYmxlc0FuZERlcGVuZGVuY2llcy5sZW5ndGg7IGogKz0gMikgewogICAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciBkZXBlbmRlbnQgPSB2YXJpYWJsZXNBbmREZXBlbmRlbmNpZXNbal07CiAgICAgICAgICBMaXN0PE5hbWVkVHlwZUJ1aWxkZXI+IGRlcGVuZGVuY2llcyA9IHZhcmlhYmxlc0FuZERlcGVuZGVuY2llc1tqICsgMV07CiAgICAgICAgICBmb3IgKE5hbWVkVHlwZUJ1aWxkZXIgZGVwZW5kZW5jeSBpbiBkZXBlbmRlbmNpZXMpIHsKICAgICAgICAgICAgaXNzdWVzLmFkZCh2YXJpYWJsZSk7CiAgICAgICAgICAgIGlzc3Vlcy5hZGQodGVtcGxhdGVCb3VuZElzc3VlVmlhUmF3VHlwZVdpdGhOb25TaW1wbGVCb3VuZHMKICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHR5cGUuZGVjbGFyYXRpb24ubmFtZSkpOwogICAgICAgICAgICBpc3N1ZXMuYWRkKDxMb2NhdGVkTWVzc2FnZT5bCiAgICAgICAgICAgICAgdGVtcGxhdGVOb25TaW1wbGVCb3VuZFZpYVZhcmlhYmxlCiAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGRlcGVuZGVuY3kuZGVjbGFyYXRpb24ubmFtZSkKICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihkZXBlbmRlbnQuZmlsZVVyaSwgZGVwZW5kZW50LmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICBkZXBlbmRlbnQubmFtZS5sZW5ndGgpCiAgICAgICAgICAgIF0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodmFyaWFibGVzQW5kRGVwZW5kZW5jaWVzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAvLyBUaGUgaW5ib3VuZCByZWZlcmVuY2VzIGFyZSBpbiBhIGNvbXBpbGVkIGRlY2xhcmF0aW9uIGluIGEgLmRpbGwuCiAgICAgICAgICBpc3N1ZXMuYWRkKHZhcmlhYmxlKTsKICAgICAgICAgIGlzc3Vlcy5hZGQodGVtcGxhdGVCb3VuZElzc3VlVmlhUmF3VHlwZVdpdGhOb25TaW1wbGVCb3VuZHMKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0eXBlLmRlY2xhcmF0aW9uLm5hbWUpKTsKICAgICAgICAgIGlzc3Vlcy5hZGQoY29uc3QgPExvY2F0ZWRNZXNzYWdlPltdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIGlzc3VlczsKfQoKLy8vIEZpbmRzIHJhdyB0eXBlIHBhdGhzIHN0YXJ0aW5nIGZyb20gdGhvc2UgaW4gW3N0YXJ0XSBhbmQgZW5kaW5nIHdpdGggW2VuZF0uCi8vLwovLy8gUmV0dXJucyBsaXN0IG9mIGZvdW5kIHBhdGhzLiAgRWFjaCBwYXRoIGlzIHJlcHJlc2VudGVkIGFzIGEgbGlzdCBvZgovLy8gYWx0ZXJuYXRpbmcgYnVpbGRlcnMgb2YgdGhlIHJhdyBnZW5lcmljIHR5cGVzIGZyb20gdGhlIHBhdGggYW5kIGJ1aWxkZXJzIG9mCi8vLyB0eXBlIHZhcmlhYmxlcyBvZiB0aGUgaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHR5cGVzIHRoYXQgY29udGFpbiB0aGUgcmVmZXJlbmNlCi8vLyB0byB0aGUgbmV4dCByYXcgZ2VuZXJpYyB0eXBlIGluIHRoZSBwYXRoLiAgVGhlIGxpc3QgZW5kcyB3aXRoIHRoZSB0eXBlCi8vLyBidWlsZGVyIGZvciBbZW5kXS4KLy8vCi8vLyBUaGUgcmVhc29uIGZvciBwdXR0aW5nIHRoZSB0eXBlIHZhcmlhYmxlcyBpbnRvIHRoZSBwYXRocyBhcyB3ZWxsIGFzIGZvcgovLy8gdXNpbmcgdHlwZSBmb3IgW3N0YXJ0XSwgYW5kIG5vdCB0aGUgY29ycmVzcG9uZGluZyB0eXBlIGRlY2xhcmF0aW9uLAovLy8gaXMgYmV0dGVyIGVycm9yIHJlcG9ydGluZy4KTGlzdDxMaXN0PE9iamVjdD4+IGZpbmRSYXdUeXBlUGF0aHNUb0RlY2xhcmF0aW9uKAogICAgVHlwZUJ1aWxkZXIgc3RhcnQsIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZW5kLAogICAgW1NldDxUeXBlRGVjbGFyYXRpb25CdWlsZGVyPiB2aXNpdGVkXSkgewogIHZpc2l0ZWQgPz89IG5ldyBTZXQ8VHlwZURlY2xhcmF0aW9uQnVpbGRlcj4uaWRlbnRpdHkoKTsKICB2YXIgcGF0aHMgPSA8TGlzdDxPYmplY3Q+PltdOwogIGlmIChzdGFydCBpcyBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uID0gc3RhcnQuZGVjbGFyYXRpb247CiAgICBpZiAoc3RhcnQuYXJndW1lbnRzID09IG51bGwpIHsKICAgICAgaWYgKHN0YXJ0LmRlY2xhcmF0aW9uID09IGVuZCkgewogICAgICAgIHBhdGhzLmFkZCg8T2JqZWN0PltzdGFydF0pOwogICAgICB9IGVsc2UgaWYgKHZpc2l0ZWQuYWRkKHN0YXJ0LmRlY2xhcmF0aW9uKSkgewogICAgICAgIGlmIChkZWNsYXJhdGlvbiBpcyBDbGFzc0J1aWxkZXIgJiYgZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgaW4gZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcykgewogICAgICAgICAgICBpZiAodmFyaWFibGUuYm91bmQgIT0gbnVsbCkgewogICAgICAgICAgICAgIGZvciAoTGlzdDxPYmplY3Q+IHBhdGggaW4gZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb24oCiAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLmJvdW5kLCBlbmQsIHZpc2l0ZWQpKSB7CiAgICAgICAgICAgICAgICBwYXRocy5hZGQoPE9iamVjdD5bc3RhcnQsIHZhcmlhYmxlXS4uYWRkQWxsKHBhdGgpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFR5cGVBbGlhc0J1aWxkZXIpIHsKICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlIGluIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgICAgICAgICBpZiAodmFyaWFibGUuYm91bmQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgZm9yIChMaXN0PE9iamVjdD4gZGVwZW5kZW5jeVBhdGgKICAgICAgICAgICAgICAgICAgICBpbiBmaW5kUmF3VHlwZVBhdGhzVG9EZWNsYXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuYm91bmQsIGVuZCwgdmlzaXRlZCkpIHsKICAgICAgICAgICAgICAgICAgcGF0aHMuYWRkKDxPYmplY3Q+W3N0YXJ0LCB2YXJpYWJsZV0uLmFkZEFsbChkZXBlbmRlbmN5UGF0aCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLnR5cGUgaXMgRnVuY3Rpb25UeXBlQnVpbGRlcikgewogICAgICAgICAgICBGdW5jdGlvblR5cGVCdWlsZGVyIHR5cGUgPSBkZWNsYXJhdGlvbi50eXBlOwogICAgICAgICAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICAgICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUuYm91bmQgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICBmb3IgKExpc3Q8T2JqZWN0PiBkZXBlbmRlbmN5UGF0aAogICAgICAgICAgICAgICAgICAgICAgaW4gZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUuYm91bmQsIGVuZCwgdmlzaXRlZCkpIHsKICAgICAgICAgICAgICAgICAgICBwYXRocwogICAgICAgICAgICAgICAgICAgICAgICAuYWRkKDxPYmplY3Q+W3N0YXJ0LCB2YXJpYWJsZV0uLmFkZEFsbChkZXBlbmRlbmN5UGF0aCkpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZpc2l0ZWQucmVtb3ZlKHN0YXJ0LmRlY2xhcmF0aW9uKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChUeXBlQnVpbGRlciBhcmd1bWVudCBpbiBzdGFydC5hcmd1bWVudHMpIHsKICAgICAgICBwYXRocy5hZGRBbGwoZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb24oYXJndW1lbnQsIGVuZCwgdmlzaXRlZCkpOwogICAgICB9CiAgICB9CiAgfSBlbHNlIGlmIChzdGFydCBpcyBGdW5jdGlvblR5cGVCdWlsZGVyKSB7CiAgICBwYXRocy5hZGRBbGwoZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb24oc3RhcnQucmV0dXJuVHlwZSwgZW5kLCB2aXNpdGVkKSk7CiAgICBpZiAoc3RhcnQudHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSBpbiBzdGFydC50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgaWYgKHZhcmlhYmxlLmJvdW5kICE9IG51bGwpIHsKICAgICAgICAgIHBhdGhzLmFkZEFsbCgKICAgICAgICAgICAgICBmaW5kUmF3VHlwZVBhdGhzVG9EZWNsYXJhdGlvbih2YXJpYWJsZS5ib3VuZCwgZW5kLCB2aXNpdGVkKSk7CiAgICAgICAgfQogICAgICAgIGlmICh2YXJpYWJsZS5kZWZhdWx0VHlwZSAhPSBudWxsKSB7CiAgICAgICAgICBwYXRocy5hZGRBbGwoZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb24oCiAgICAgICAgICAgICAgdmFyaWFibGUuZGVmYXVsdFR5cGUsIGVuZCwgdmlzaXRlZCkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKHN0YXJ0LmZvcm1hbHMgIT0gbnVsbCkgewogICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsIGluIHN0YXJ0LmZvcm1hbHMpIHsKICAgICAgICBwYXRocy5hZGRBbGwoZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb24oZm9ybWFsLnR5cGUsIGVuZCwgdmlzaXRlZCkpOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBwYXRoczsKfQoKLy8vIEZpbmRzIHJhdyBnZW5lcmljIHR5cGUgY3ljbGVzIGVuZGluZyBhbmQgc3RhcnRpbmcgd2l0aCBbZGVjbGFyYXRpb25dLgovLy8KLy8vIFJldHVybnMgbGlzdCBvZiBmb3VuZCBjeWNsZXMuICBFYWNoIGN5Y2xlIGlzIHJlcHJlc2VudGVkIGFzIGEgbGlzdCBvZgovLy8gYWx0ZXJuYXRpbmcgcmF3IGdlbmVyaWMgdHlwZXMgZnJvbSB0aGUgY3ljbGUgYW5kIHR5cGUgdmFyaWFibGVzIG9mIHRoZQovLy8gaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHR5cGUgdGhhdCByZWZlcmVuY2UgdGhlIG5leHQgdHlwZSBpbiB0aGUgY3ljbGUuICBUaGUKLy8vIGN5Y2xlIHN0YXJ0cyB3aXRoIGEgdHlwZSB2YXJpYWJsZSBmcm9tIFtkZWNsYXJhdGlvbl0gYW5kIGVuZHMgd2l0aCBhIHR5cGUKLy8vIHRoYXQgaGFzIFtkZWNsYXJhdGlvbl0gYXMgaXRzIGRlY2xhcmF0aW9uLgovLy8KLy8vIFRoZSByZWFzb24gZm9yIHB1dHRpbmcgdGhlIHR5cGUgdmFyaWFibGVzIGludG8gdGhlIGN5Y2xlcyBpcyBiZXR0ZXIgZXJyb3IKLy8vIHJlcG9ydGluZy4KTGlzdDxMaXN0PE9iamVjdD4+IGZpbmRSYXdUeXBlQ3ljbGVzKFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb24pIHsKICB2YXIgY3ljbGVzID0gPExpc3Q8T2JqZWN0Pj5bXTsKICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyICYmIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlIGluIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgaWYgKHZhcmlhYmxlLmJvdW5kICE9IG51bGwpIHsKICAgICAgICBmb3IgKExpc3Q8T2JqZWN0PiBwYXRoCiAgICAgICAgICAgIGluIGZpbmRSYXdUeXBlUGF0aHNUb0RlY2xhcmF0aW9uKHZhcmlhYmxlLmJvdW5kLCBkZWNsYXJhdGlvbikpIHsKICAgICAgICAgIGN5Y2xlcy5hZGQoPE9iamVjdD5bdmFyaWFibGVdLi5hZGRBbGwocGF0aCkpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgVHlwZUFsaWFzQnVpbGRlcikgewogICAgaWYgKGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgaW4gZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcykgewogICAgICAgIGlmICh2YXJpYWJsZS5ib3VuZCAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKExpc3Q8T2JqZWN0PiBkZXBlbmRlbmN5UGF0aAogICAgICAgICAgICAgIGluIGZpbmRSYXdUeXBlUGF0aHNUb0RlY2xhcmF0aW9uKHZhcmlhYmxlLmJvdW5kLCBkZWNsYXJhdGlvbikpIHsKICAgICAgICAgICAgY3ljbGVzLmFkZCg8T2JqZWN0Plt2YXJpYWJsZV0uLmFkZEFsbChkZXBlbmRlbmN5UGF0aCkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGRlY2xhcmF0aW9uLnR5cGUgaXMgRnVuY3Rpb25UeXBlQnVpbGRlcikgewogICAgICBGdW5jdGlvblR5cGVCdWlsZGVyIHR5cGUgPSBkZWNsYXJhdGlvbi50eXBlOwogICAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICBmb3IgKFR5cGVWYXJpYWJsZUJ1aWxkZXIgdmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgICBpZiAodmFyaWFibGUuYm91bmQgIT0gbnVsbCkgewogICAgICAgICAgICBmb3IgKExpc3Q8T2JqZWN0PiBkZXBlbmRlbmN5UGF0aAogICAgICAgICAgICAgICAgaW4gZmluZFJhd1R5cGVQYXRoc1RvRGVjbGFyYXRpb24odmFyaWFibGUuYm91bmQsIGRlY2xhcmF0aW9uKSkgewogICAgICAgICAgICAgIGN5Y2xlcy5hZGQoPE9iamVjdD5bdmFyaWFibGVdLi5hZGRBbGwoZGVwZW5kZW5jeVBhdGgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICByZXR1cm4gY3ljbGVzOwp9CgovLy8gQ29udmVydHMgcmF3IGdlbmVyaWMgdHlwZSBbY3ljbGVzXSBmb3IgW2RlY2xhcmF0aW9uXSBpbnRvIHJlcG9ydGFibGUgaXNzdWVzLgovLy8KLy8vIFRoZSBbY3ljbGVzXSBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4gdGhlIGZvcm1hdCBzcGVjaWZpZWQgZm9yIHRoZSByZXR1cm4gdmFsdWUKLy8vIG9mIFtmaW5kUmF3VHlwZUN5Y2xlc10uCi8vLwovLy8gUmV0dXJucyBmbGF0dGVuZWQgbGlzdCBvZiB0cmlwbGV0cy4gIFRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSB0cmlwbGV0IGlzIHRoZQovLy8gW1R5cGVEZWNsYXJhdGlvbkJ1aWxkZXJdIGZvciB0aGUgdHlwZSB2YXJpYWJsZSBmcm9tIFt2YXJpYWJsZXNdIHRoYXQgaGFzIHJhdwovLy8gZ2VuZXJpYyB0eXBlcyB3aXRoIGluYm91bmQgcmVmZXJlbmNlcyBpbiBpdHMgYm91bmQuICBUaGUgc2Vjb25kIGVsZW1lbnQgb2YKLy8vIHRoZSB0cmlwbGV0IGlzIHRoZSBlcnJvciBtZXNzYWdlLiAgVGhlIHRoaXJkIGVsZW1lbnQgaXMgdGhlIGNvbnRleHQuCkxpc3Q8T2JqZWN0PiBjb252ZXJ0UmF3VHlwZUN5Y2xlc0ludG9Jc3N1ZXMoCiAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uLCBMaXN0PExpc3Q8T2JqZWN0Pj4gY3ljbGVzKSB7CiAgTGlzdDxPYmplY3Q+IGlzc3VlcyA9IDxPYmplY3Q+W107CiAgZm9yIChMaXN0PE9iamVjdD4gY3ljbGUgaW4gY3ljbGVzKSB7CiAgICBpZiAoY3ljbGUubGVuZ3RoID09IDIpIHsKICAgICAgLy8gTG9vcC4KICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSA9IGN5Y2xlWzBdOwogICAgICBOYW1lZFR5cGVCdWlsZGVyIHR5cGUgPSBjeWNsZVsxXTsKICAgICAgaXNzdWVzLmFkZCh2YXJpYWJsZSk7CiAgICAgIGlzc3Vlcy5hZGQodGVtcGxhdGVCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHkKICAgICAgICAgIC53aXRoQXJndW1lbnRzKHR5cGUuZGVjbGFyYXRpb24ubmFtZSkpOwogICAgICBpc3N1ZXMuYWRkKG51bGwpOyAvLyBDb250ZXh0LgogICAgfSBlbHNlIHsKICAgICAgdmFyIGNvbnRleHQgPSA8TG9jYXRlZE1lc3NhZ2U+W107CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3ljbGUubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlID0gY3ljbGVbaV07CiAgICAgICAgTmFtZWRUeXBlQnVpbGRlciB0eXBlID0gY3ljbGVbaSArIDFdOwogICAgICAgIGNvbnRleHQuYWRkKHRlbXBsYXRlTm9uU2ltcGxlQm91bmRWaWFSZWZlcmVuY2UKICAgICAgICAgICAgLndpdGhBcmd1bWVudHModHlwZS5kZWNsYXJhdGlvbi5uYW1lKQogICAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgdmFyaWFibGUuZmlsZVVyaSwgdmFyaWFibGUuY2hhck9mZnNldCwgdmFyaWFibGUubmFtZS5sZW5ndGgpKTsKICAgICAgfQogICAgICBOYW1lZFR5cGVCdWlsZGVyIGZpcnN0RW5jb3VudGVyZWRUeXBlID0gY3ljbGVbMV07CgogICAgICBpc3N1ZXMuYWRkKGRlY2xhcmF0aW9uKTsKICAgICAgaXNzdWVzLmFkZCh0ZW1wbGF0ZUJvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHkud2l0aEFyZ3VtZW50cygKICAgICAgICAgIGRlY2xhcmF0aW9uLm5hbWUsIGZpcnN0RW5jb3VudGVyZWRUeXBlLmRlY2xhcmF0aW9uLm5hbWUpKTsKICAgICAgaXNzdWVzLmFkZChjb250ZXh0KTsKICAgIH0KICB9CiAgcmV0dXJuIGlzc3VlczsKfQoKLy8vIEZpbmRzIG5vbi1zaW1wbGljaXR5IGlzc3VlcyBmb3IgdGhlIGdpdmVuIHNldCBvZiBbdmFyaWFibGVzXS4KLy8vCi8vLyBUaGUgaXNzdWVzIGFyZSB0aG9zZSBjYXVzZWQgYnkgcmF3IHR5cGVzIHdpdGggaW5ib3VuZCByZWZlcmVuY2VzIGluIHRoZQovLy8gYm91bmRzIG9mIHRoZWlyIHR5cGUgdmFyaWFibGVzLgovLy8KLy8vIFJldHVybnMgZmxhdHRlbmVkIGxpc3Qgb2YgdHJpcGxldHMsIGVhY2ggdHJpcGxldCByZXByZXNlbnRpbmcgYW4gaXNzdWUuICBUaGUKLy8vIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHRyaXBsZXQgaXMgdGhlIHR5cGUgZGVjbGFyYXRpb24gdGhhdCBoYXMgdGhlIGlzc3VlLgovLy8gVGhlIHNlY29uZCBlbGVtZW50IGluIHRoZSB0cmlwbGV0IGlzIHRoZSBlcnJvciBtZXNzYWdlLiAgVGhlIHRoaXJkIGVsZW1lbnQKLy8vIGluIHRoZSB0cmlwbGV0IGlzIHRoZSBjb250ZXh0LgpMaXN0PE9iamVjdD4gZ2V0Tm9uU2ltcGxpY2l0eUlzc3Vlc0ZvclR5cGVWYXJpYWJsZXMoCiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHZhcmlhYmxlcykgewogIGlmICh2YXJpYWJsZXMgPT0gbnVsbCkgcmV0dXJuIDxPYmplY3Q+W107CiAgcmV0dXJuIGdldEluYm91bmRSZWZlcmVuY2VJc3N1ZXModmFyaWFibGVzKTsKfQoKLy8vIEZpbmRzIG5vbi1zaW1wbGljaXR5IGlzc3VlcyBmb3IgdGhlIGdpdmVuIFtkZWNsYXJhdGlvbl0uCi8vLwovLy8gVGhlIGlzc3VlcyBhcmUgdGhvc2UgY2F1c2VkIGJ5IHJhdyB0eXBlcyB3aXRoIGluYm91bmQgcmVmZXJlbmNlcyBpbiB0aGUKLy8vIGJvdW5kcyBvZiB0eXBlIHZhcmlhYmxlcyBmcm9tIFtkZWNsYXJhdGlvbl0gYW5kIGJ5IGN5Y2xlcyBvZiByYXcgdHlwZXMKLy8vIGNvbnRhaW5pbmcgW2RlY2xhcmF0aW9uXS4KLy8vCi8vLyBSZXR1cm5zIGZsYXR0ZW5lZCBsaXN0IG9mIHRyaXBsZXRzLCBlYWNoIHRyaXBsZXQgcmVwcmVzZW50aW5nIGFuIGlzc3VlLiAgVGhlCi8vLyBmaXJzdCBlbGVtZW50IGluIHRoZSB0cmlwbGV0IGlzIHRoZSB0eXBlIGRlY2xhcmF0aW9uIHRoYXQgaGFzIHRoZSBpc3N1ZS4KLy8vIFRoZSBzZWNvbmQgZWxlbWVudCBpbiB0aGUgdHJpcGxldCBpcyB0aGUgZXJyb3IgbWVzc2FnZS4gIFRoZSB0aGlyZCBlbGVtZW50Ci8vLyBpbiB0aGUgdHJpcGxldCBpcyB0aGUgY29udGV4dC4KTGlzdDxPYmplY3Q+IGdldE5vblNpbXBsaWNpdHlJc3N1ZXNGb3JEZWNsYXJhdGlvbigKICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb24sCiAgICB7Ym9vbCBwZXJmb3JtRXJyb3JSZWNvdmVyeTogdHJ1ZX0pIHsKICB2YXIgaXNzdWVzID0gPE9iamVjdD5bXTsKICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyICYmIGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgaXNzdWVzLmFkZEFsbChnZXRJbmJvdW5kUmVmZXJlbmNlSXNzdWVzKGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXMpKTsKICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIFR5cGVBbGlhc0J1aWxkZXIgJiYKICAgICAgZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICBpc3N1ZXMuYWRkQWxsKGdldEluYm91bmRSZWZlcmVuY2VJc3N1ZXMoZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcykpOwogIH0KICBMaXN0PExpc3Q8T2JqZWN0Pj4gY3ljbGVzVG9SZXBvcnQgPSA8TGlzdDxPYmplY3Q+PltdOwogIGZvciAoTGlzdDxPYmplY3Q+IGN5Y2xlIGluIGZpbmRSYXdUeXBlQ3ljbGVzKGRlY2xhcmF0aW9uKSkgewogICAgLy8gVG8gYXZvaWQgcmVwb3J0aW5nIHRoZSBzYW1lIGVycm9yIGZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIGN5Y2xlLCB3ZSBvbmx5CiAgICAvLyBkbyBzbyBpZiBpdCBjb21lcyB0aGUgZmlyc3QgaW4gdGhlIGxleGljb2dyYXBoaWNhbCBvcmRlci4gIE5vdGUgdGhhdAogICAgLy8gb25lLWVsZW1lbnQgY3ljbGVzIHNob3VsZG4ndCBiZSBjaGVja2VkLCBhcyB0aGV5IGFyZSBsb29wcy4KICAgIGlmIChjeWNsZS5sZW5ndGggPT0gMikgewogICAgICBjeWNsZXNUb1JlcG9ydC5hZGQoY3ljbGUpOwogICAgfSBlbHNlIHsKICAgICAgU3RyaW5nIGRlY2xhcmF0aW9uUGF0aEFuZE5hbWUgPQogICAgICAgICAgIiR7ZGVjbGFyYXRpb24uZmlsZVVyaX06JHtkZWNsYXJhdGlvbi5uYW1lfSI7CiAgICAgIFN0cmluZyBsZXhNaW5QYXRoQW5kTmFtZSA9IG51bGw7CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgY3ljbGUubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyIHR5cGUgPSBjeWNsZVtpXTsKICAgICAgICBTdHJpbmcgcGF0aEFuZE5hbWUgPQogICAgICAgICAgICAiJHt0eXBlLmRlY2xhcmF0aW9uLmZpbGVVcml9OiR7dHlwZS5kZWNsYXJhdGlvbi5uYW1lfSI7CiAgICAgICAgaWYgKGxleE1pblBhdGhBbmROYW1lID09IG51bGwgfHwKICAgICAgICAgICAgbGV4TWluUGF0aEFuZE5hbWUuY29tcGFyZVRvKHBhdGhBbmROYW1lKSA+IDApIHsKICAgICAgICAgIGxleE1pblBhdGhBbmROYW1lID0gcGF0aEFuZE5hbWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChkZWNsYXJhdGlvblBhdGhBbmROYW1lID09IGxleE1pblBhdGhBbmROYW1lKSB7CiAgICAgICAgY3ljbGVzVG9SZXBvcnQuYWRkKGN5Y2xlKTsKICAgICAgfQogICAgfQogIH0KICBMaXN0PE9iamVjdD4gcmF3VHlwZUN5Y2xlc0FzSXNzdWVzID0KICAgICAgY29udmVydFJhd1R5cGVDeWNsZXNJbnRvSXNzdWVzKGRlY2xhcmF0aW9uLCBjeWNsZXNUb1JlcG9ydCk7CiAgaXNzdWVzLmFkZEFsbChyYXdUeXBlQ3ljbGVzQXNJc3N1ZXMpOwoKICBpZiAocGVyZm9ybUVycm9yUmVjb3ZlcnkpIHsKICAgIGJyZWFrQ3ljbGVzKGN5Y2xlc1RvUmVwb3J0KTsKICB9CgogIHJldHVybiBpc3N1ZXM7Cn0KCi8vLyBCcmVhayByYXcgZ2VuZXJpYyB0eXBlIFtjeWNsZXNdIGFzIGVycm9yIHJlY292ZXJ5LgovLy8KLy8vIFRoZSBbY3ljbGVzXSBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4gdGhlIGZvcm1hdCBzcGVjaWZpZWQgZm9yIHRoZSByZXR1cm4gdmFsdWUKLy8vIG9mIFtmaW5kUmF3VHlwZUN5Y2xlc10uCnZvaWQgYnJlYWtDeWNsZXMoTGlzdDxMaXN0PE9iamVjdD4+IGN5Y2xlcykgewogIGZvciAoTGlzdDxPYmplY3Q+IGN5Y2xlIGluIGN5Y2xlcykgewogICAgVHlwZVZhcmlhYmxlQnVpbGRlciB2YXJpYWJsZSA9IGN5Y2xlWzBdOwogICAgdmFyaWFibGUuYm91bmQgPSBudWxsOwogIH0KfQoKdm9pZCBmaW5kR2VuZXJpY0Z1bmN0aW9uVHlwZXMoVHlwZUJ1aWxkZXIgdHlwZSwge0xpc3Q8VHlwZUJ1aWxkZXI+IHJlc3VsdH0pIHsKICByZXN1bHQgPz89IDxUeXBlQnVpbGRlcj5bXTsKICBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGVCdWlsZGVyKSB7CiAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzICE9IG51bGwgJiYgdHlwZS50eXBlVmFyaWFibGVzLmxlbmd0aCA+IDApIHsKICAgICAgcmVzdWx0LmFkZCh0eXBlKTsKCiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0eXBlVmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgZmluZEdlbmVyaWNGdW5jdGlvblR5cGVzKHR5cGVWYXJpYWJsZS5ib3VuZCwgcmVzdWx0OiByZXN1bHQpOwogICAgICAgIGZpbmRHZW5lcmljRnVuY3Rpb25UeXBlcyh0eXBlVmFyaWFibGUuZGVmYXVsdFR5cGUsIHJlc3VsdDogcmVzdWx0KTsKICAgICAgfQogICAgfQogICAgZmluZEdlbmVyaWNGdW5jdGlvblR5cGVzKHR5cGUucmV0dXJuVHlwZSwgcmVzdWx0OiByZXN1bHQpOwogICAgaWYgKHR5cGUuZm9ybWFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gdHlwZS5mb3JtYWxzKSB7CiAgICAgICAgZmluZEdlbmVyaWNGdW5jdGlvblR5cGVzKGZvcm1hbC50eXBlLCByZXN1bHQ6IHJlc3VsdCk7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgaWYgKHR5cGUgaXMgTmFtZWRUeXBlQnVpbGRlciAmJiB0eXBlLmFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICBmb3IgKFR5cGVCdWlsZGVyIGFyZ3VtZW50IGluIHR5cGUuYXJndW1lbnRzKSB7CiAgICAgIGZpbmRHZW5lcmljRnVuY3Rpb25UeXBlcyhhcmd1bWVudCwgcmVzdWx0OiByZXN1bHQpOwogICAgfQogIH0KfQoKLy8vIFJldHVybnMgdHJ1ZSBpZiBbdHlwZV0gY29udGFpbnMgYW55IHR5cGUgdmFyaWFibGVzIHdoYXRzb2V2ZXIuIFRoaXMgc2hvdWxkCi8vLyBvbmx5IGJlIHVzZWQgZm9yIHdvcmtpbmcgYXJvdW5kIHRyYW5zaXRpb25hbCBpc3N1ZXMuCi8vIFRPRE8oYWhlKTogUmVtb3ZlIHRoaXMgbWV0aG9kLgpib29sIGhhc0FueVR5cGVWYXJpYWJsZXMoRGFydFR5cGUgdHlwZSkgewogIHJldHVybiB0eXBlLmFjY2VwdChjb25zdCBUeXBlVmFyaWFibGVTZWFyY2goKSk7Cn0KCi8vLyBEb24ndCB1c2UgdGhpcyBkaXJlY3RseSwgdXNlIFtoYXNBbnlUeXBlVmFyaWFibGVzXSBpbnN0ZWFkLiBCdXQgZG9uJ3QgdXNlCi8vLyB0aGF0IGVpdGhlci4KLy8gVE9ETyhhaGUpOiBSZW1vdmUgdGhpcyBjbGFzcy4KY2xhc3MgVHlwZVZhcmlhYmxlU2VhcmNoIGltcGxlbWVudHMgRGFydFR5cGVWaXNpdG9yPGJvb2w+IHsKICBjb25zdCBUeXBlVmFyaWFibGVTZWFyY2goKTsKCiAgYm9vbCBkZWZhdWx0RGFydFR5cGUoRGFydFR5cGUgbm9kZSkgPT4gdGhyb3cgInVuc3VwcG9ydGVkIjsKCiAgYm9vbCBhbnlUeXBlVmFyaWFibGVzKExpc3Q8RGFydFR5cGU+IHR5cGVzKSB7CiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAgaWYgKHR5cGUuYWNjZXB0KHRoaXMpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKSA9PiBmYWxzZTsKCiAgYm9vbCB2aXNpdER5bmFtaWNUeXBlKER5bmFtaWNUeXBlIG5vZGUpID0+IGZhbHNlOwoKICBib29sIHZpc2l0Vm9pZFR5cGUoVm9pZFR5cGUgbm9kZSkgPT4gZmFsc2U7CgogIGJvb2wgdmlzaXRCb3R0b21UeXBlKEJvdHRvbVR5cGUgbm9kZSkgPT4gZmFsc2U7CgogIGJvb2wgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgcmV0dXJuIGFueVR5cGVWYXJpYWJsZXMobm9kZS50eXBlQXJndW1lbnRzKTsKICB9CgogIGJvb2wgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIGlmIChhbnlUeXBlVmFyaWFibGVzKG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpKSByZXR1cm4gdHJ1ZTsKICAgIGZvciAoVHlwZVBhcmFtZXRlciB2YXJpYWJsZSBpbiBub2RlLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIGlmICh2YXJpYWJsZS5ib3VuZC5hY2NlcHQodGhpcykpIHJldHVybiB0cnVlOwogICAgfQogICAgZm9yIChOYW1lZFR5cGUgdHlwZSBpbiBub2RlLm5hbWVkUGFyYW1ldGVycykgewogICAgICBpZiAodHlwZS50eXBlLmFjY2VwdCh0aGlzKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoVHlwZVBhcmFtZXRlclR5cGUgbm9kZSkgPT4gdHJ1ZTsKCiAgYm9vbCB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIG5vZGUpIHsKICAgIHJldHVybiBhbnlUeXBlVmFyaWFibGVzKG5vZGUudHlwZUFyZ3VtZW50cyk7CiAgfQp9CoNwAE1OPwEhCRQSGRUWFxUTFxsVEgFFAT4BTQEdCRYgHRoaFSAdAUABSQEdCRgxMDksKwE+AUtIUU0SRiI7RSgjDyMIDSkpJjlRDAoXNCkmPCQYIkIlSwwKFwgGLCUjD00GJkVJUFEgKj0mJwoIBiA8IBQ1OggGEwQdAgEdFj09ISIzGTwIOgZAEwYhNjlDJTYvLAgGHVEGEQQBJSkmTAYqIEcGHBoBJjM+LUInJzJDHRoRIwoIBgEgMTk1PygsMx8gHRsdIhoRHwoIBgEiPxwpFgYBE0YGAREEDwIBGExPAgFQOwQaYiJHUUYBLzMEAUhGM0AuPS4rQz8GKy9IHgYEAS85Lj0uLDExTR4GBAERAgFOSRExFiccAVEyGQE0LwEwNCYzMBcpGgYBPiY3OT8KJjk0DAowKkk+DAokQzoMCjcIBgEwKwYEAU4PKRkEAgE2BC0vIBQEIyIoFg0kN0MKCAYsRCZKLxdKCjUXUAoIBiA8RAgGBA8CAVEEUE9LIkotNS04JD8eIwgGJC8yBgQjAgFRBFFKTh1DKSIiPS0hUEkkQh8MChoqNgo4IVBJJEIfDAoaKjYKMC8kPigqMgo0MSZAKiw0DAo3NywoOywuNg4MCggNNR1CCAYsGUUmQSYfSgosH1AKCAYgPB1FCAYEHwIBUQRRUU9JThs0IjM9SkIwMkdHUT4iRzgpMD5JLRAMCjROIEU2MAoIBgQRAgFPBEhQUUsXBExIHzIzLTogIzwjJiQzUEwqRzNEEA4MNjNOLDE2OVASEA4MOTkuSS4zODsaURQSEA4MCisIDTZNCAYtUSdCJhhMCiw2NAoIBiE9UAgGBBACAUoESktPTi8ETg9LIUpGJB9NOAoIBjAtSCYrT0QMCggGMzMoQygtUUYODAoIBgQRAgFRBFEcBFFRT0ktRSQnHQ8vKBw4MiQNKDIxLjcyG08IOAEfSEUbBgQRAgFCBEwkBFFNTyM1KywvAgE9BExLHgRRTU8jMygpG0pJMCtJBDg/UExDHSENJjgnMiodRCk8KwoIOSMIBgQnQygBHiEEARECATcEURwuJy0bBAIBTh4lRxgBRUZMCAY/IDw/CAZDMzoGBAIBTzkiKjICAU4RITweAT4BMCMqBhIEATQBNAEuATIBMDEEAS5COjQGMy8GEgQBPwEsMQQCATdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3R5cGVfYWxnb3JpdGhtcy5kYXJ0O3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2FwaS5kYXJ0hswvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIFRoaXMgbGlicmFyeSBleHBvcnRzIGFsbCBBUEkgZnJvbSBLZXJuZWwgdGhhdCBjYW4gYmUgdXNlZCB0aHJvdWdob3V0IGZhc3RhLgpsaWJyYXJ5IGZhc3RhLmtlcm5lbF9hcGk7CgpleHBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBzaG93IFN1YnN0aXR1dGlvbiwgc3Vic3RpdHV0ZTsKCmV4cG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIHNob3cgQ2xhc3NIaWVyYXJjaHk7CgpleHBvcnQgJ3BhY2thZ2U6a2VybmVsL2Nsb25lLmRhcnQnIHNob3cgQ2xvbmVWaXNpdG9yOwoKZXhwb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKZXhwb3J0ICdwYWNrYWdlOmtlcm5lbC90cmFuc2Zvcm1hdGlvbnMvZmxhZ3MuZGFydCcgc2hvdyBUcmFuc2Zvcm1lckZsYWc7CgpleHBvcnQgJ3BhY2thZ2U6a2VybmVsL3RleHQvYXN0X3RvX3RleHQuZGFydCcgc2hvdyBOYW1lU3lzdGVtOwoKZXhwb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIHNob3cgVHlwZUVudmlyb25tZW50OwoKZXhwb3J0ICdwYWNrYWdlOmtlcm5lbC9zcmMvYm91bmRzX2NoZWNrcy5kYXJ0JyBzaG93IGluc3RhbnRpYXRlVG9Cb3VuZHM7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3RleHQvYXN0X3RvX3RleHQuZGFydCcgc2hvdyBOYW1lU3lzdGVtLCBQcmludGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBDbGFzcywgTWVtYmVyLCBOb2RlOwoKdm9pZCBwcmludE5vZGVPbihOb2RlIG5vZGUsIFN0cmluZ1Npbmsgc2luaywge05hbWVTeXN0ZW0gc3ludGhldGljTmFtZXN9KSB7CiAgaWYgKG5vZGUgPT0gbnVsbCkgewogICAgc2luay53cml0ZSgibnVsbCIpOwogIH0gZWxzZSB7CiAgICBzeW50aGV0aWNOYW1lcyA/Pz0gbmV3IE5hbWVTeXN0ZW0oKTsKICAgIG5ldyBQcmludGVyKHNpbmssIHN5bnRoZXRpY05hbWVzOiBzeW50aGV0aWNOYW1lcykud3JpdGVOb2RlKG5vZGUpOwogIH0KfQoKdm9pZCBwcmludFF1YWxpZmllZE5hbWVPbihNZW1iZXIgbWVtYmVyLCBTdHJpbmdTaW5rIHNpbmssCiAgICB7TmFtZVN5c3RlbSBzeW50aGV0aWNOYW1lc30pIHsKICBpZiAobWVtYmVyID09IG51bGwpIHsKICAgIHNpbmsud3JpdGUoIm51bGwiKTsKICB9IGVsc2UgewogICAgc3ludGhldGljTmFtZXMgPz89IG5ldyBOYW1lU3lzdGVtKCk7CiAgICBzaW5rLndyaXRlKG1lbWJlci5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaSk7CiAgICBzaW5rLndyaXRlKCI6OiIpOwogICAgQ2xhc3MgY2xzID0gbWVtYmVyLmVuY2xvc2luZ0NsYXNzOwogICAgaWYgKGNscyAhPSBudWxsKSB7CiAgICAgIHNpbmsud3JpdGUoY2xzLm5hbWUgPz8gc3ludGhldGljTmFtZXMubmFtZUNsYXNzKGNscykpOwogICAgICBzaW5rLndyaXRlKCI6OiIpOwogICAgfQogICAgc2luay53cml0ZShtZW1iZXIubmFtZT8ubmFtZSA/PyBzeW50aGV0aWNOYW1lcy5uYW1lTWVtYmVyKG1lbWJlcikpOwogIH0KfQo2AE5OPAFQGgFJAUIBNgE4AUkBPwFEAUkBSAE7AUwWGAspRwQCATojGBgLKTMWJxc9GAZIBAIBMnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2FwaS5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2FzdF9hcGkuZGFydIxOLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBUaGlzIGxpYnJhcnkgZXhwb3J0cyBhbGwgQVBJIGZyb20gS2VybmVsJ3MgYXN0LmRhcnQgdGhhdCBjYW4gYmUgdXNlZAovLy8gdGhyb3VnaG91dCBmYXN0YS4KbGlicmFyeSBmYXN0YS5rZXJuZWxfYXN0X2FwaTsKCmV4cG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQXJndW1lbnRzLAogICAgICAgIEFzRXhwcmVzc2lvbiwKICAgICAgICBBc3NlcnRTdGF0ZW1lbnQsCiAgICAgICAgQXN5bmNNYXJrZXIsCiAgICAgICAgQmxvY2ssCiAgICAgICAgQm90dG9tVHlwZSwKICAgICAgICBCcmVha1N0YXRlbWVudCwKICAgICAgICBDYXRjaCwKICAgICAgICBDaGVja0xpYnJhcnlJc0xvYWRlZCwKICAgICAgICBDbGFzcywKICAgICAgICBDb21wb25lbnQsCiAgICAgICAgQ29uc3RydWN0b3IsCiAgICAgICAgQ29uc3RydWN0b3JJbnZvY2F0aW9uLAogICAgICAgIENvbnRpbnVlU3dpdGNoU3RhdGVtZW50LAogICAgICAgIERhcnRUeXBlLAogICAgICAgIER5bmFtaWNUeXBlLAogICAgICAgIEVtcHR5U3RhdGVtZW50LAogICAgICAgIEV4cHJlc3Npb24sCiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudCwKICAgICAgICBGaWVsZCwKICAgICAgICBGb3JJblN0YXRlbWVudCwKICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uLAogICAgICAgIEZ1bmN0aW9uRXhwcmVzc2lvbiwKICAgICAgICBGdW5jdGlvbk5vZGUsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEluaXRpYWxpemVyLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgSW52YWxpZEV4cHJlc3Npb24sCiAgICAgICAgSW52YWxpZFR5cGUsCiAgICAgICAgSXNFeHByZXNzaW9uLAogICAgICAgIExhYmVsZWRTdGF0ZW1lbnQsCiAgICAgICAgTGV0LAogICAgICAgIExpYnJhcnksCiAgICAgICAgTGlicmFyeURlcGVuZGVuY3ksCiAgICAgICAgTGlicmFyeVBhcnQsCiAgICAgICAgTGlzdExpdGVyYWwsCiAgICAgICAgTG9jYWxJbml0aWFsaXplciwKICAgICAgICBMb2NhdGlvbiwKICAgICAgICBNYXBFbnRyeSwKICAgICAgICBNYXBMaXRlcmFsLAogICAgICAgIE1lbWJlciwKICAgICAgICBNZXRob2RJbnZvY2F0aW9uLAogICAgICAgIE5hbWUsCiAgICAgICAgTmFtZWRFeHByZXNzaW9uLAogICAgICAgIE5hbWVkVHlwZSwKICAgICAgICBOb2RlLAogICAgICAgIE51bGxMaXRlcmFsLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFByb3BlcnR5R2V0LAogICAgICAgIFByb3BlcnR5U2V0LAogICAgICAgIFJldGhyb3csCiAgICAgICAgUmV0dXJuU3RhdGVtZW50LAogICAgICAgIFN0YXRlbWVudCwKICAgICAgICBTdGF0aWNHZXQsCiAgICAgICAgU3RhdGljSW52b2NhdGlvbiwKICAgICAgICBTdGF0aWNTZXQsCiAgICAgICAgU3RyaW5nQ29uY2F0ZW5hdGlvbiwKICAgICAgICBTdXBlckluaXRpYWxpemVyLAogICAgICAgIFN1cGVyTWV0aG9kSW52b2NhdGlvbiwKICAgICAgICBTdXBlclByb3BlcnR5U2V0LAogICAgICAgIFN3aXRjaENhc2UsCiAgICAgICAgVGhpc0V4cHJlc3Npb24sCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBUeXBlZGVmLAogICAgICAgIFR5cGVkZWZUeXBlLAogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24sCiAgICAgICAgVmFyaWFibGVHZXQsCiAgICAgICAgVmFyaWFibGVTZXQsCiAgICAgICAgVm9pZFR5cGUsCiAgICAgICAgc2V0UGFyZW50czsKCmV4cG9ydCAna2VybmVsX3NoYWRvd19hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHNKdWRnbWVudCwKICAgICAgICBBc3NlcnRJbml0aWFsaXplckp1ZGdtZW50LAogICAgICAgIEFzc2VydFN0YXRlbWVudEp1ZGdtZW50LAogICAgICAgIEJsb2NrSnVkZ21lbnQsCiAgICAgICAgQ2FzY2FkZUp1ZGdtZW50LAogICAgICAgIENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnQsCiAgICAgICAgQ29udGludWVTd2l0Y2hKdWRnbWVudCwKICAgICAgICBEZWZlcnJlZENoZWNrSnVkZ21lbnQsCiAgICAgICAgRXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50LAogICAgICAgIEZhY3RvcnlDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudCwKICAgICAgICBGdW5jdGlvbkRlY2xhcmF0aW9uSnVkZ21lbnQsCiAgICAgICAgRnVuY3Rpb25Ob2RlSnVkZ21lbnQsCiAgICAgICAgSWZKdWRnbWVudCwKICAgICAgICBJZk51bGxKdWRnbWVudCwKICAgICAgICBJbnZhbGlkU3VwZXJJbml0aWFsaXplckp1ZGdtZW50LAogICAgICAgIExvYWRMaWJyYXJ5VGVhck9mZkp1ZGdtZW50LAogICAgICAgIE1ldGhvZEludm9jYXRpb25KdWRnbWVudCwKICAgICAgICBOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbkp1ZGdtZW50LAogICAgICAgIE51bGxBd2FyZU1ldGhvZEludm9jYXRpb25KdWRnbWVudCwKICAgICAgICBOdWxsQXdhcmVQcm9wZXJ0eUdldEp1ZGdtZW50LAogICAgICAgIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJKdWRnbWVudCwKICAgICAgICBSZXR1cm5KdWRnbWVudCwKICAgICAgICBTaGFkb3dGaWVsZEluaXRpYWxpemVyLAogICAgICAgIFNoYWRvd0ludmFsaWRGaWVsZEluaXRpYWxpemVyLAogICAgICAgIFNoYWRvd0ludmFsaWRJbml0aWFsaXplciwKICAgICAgICBTaGFkb3dMYXJnZUludExpdGVyYWwsCiAgICAgICAgU3VwZXJJbml0aWFsaXplckp1ZGdtZW50LAogICAgICAgIFN1cGVyTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50LAogICAgICAgIFN1cGVyUHJvcGVydHlHZXRKdWRnbWVudCwKICAgICAgICBTd2l0Y2hDYXNlSnVkZ21lbnQsCiAgICAgICAgU3dpdGNoU3RhdGVtZW50SnVkZ21lbnQsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50LAogICAgICAgIFZhcmlhYmxlR2V0SnVkZ21lbnQsCiAgICAgICAgWWllbGRKdWRnbWVudDsKegBOTjwBSRYeASEJExYZFQ8UGA8eDxMVHyESFRgUHQ8YHRwWFhUXGxUWGg0RGxUVGhISFBAaDhkTDhUTFxUVERkTExoTHRofGhQYEhcbERUdFRUSFAEgCRsjIRcZIyAfJS4lHhQYKSQiKSsmKBggJyIfIiciHCElHRcBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2FzdF9hcGkuZGFydE5zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Byb3RvdHlwZS9pbmNyZW1lbnRhbF9rZXJuZWxfZ2VuZXJhdG9yLmRhcnSSzC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgc2hvdyBDbGFzc0hpZXJhcmNoeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwva2VybmVsLmRhcnQnCiAgICBzaG93IENvbXBvbmVudCwgUHJvY2VkdXJlLCBEYXJ0VHlwZSwgVHlwZVBhcmFtZXRlcjsKCmltcG9ydCAnLi4vYmFzZS9wcm9jZXNzZWRfb3B0aW9ucy5kYXJ0JyBzaG93IFByb2Nlc3NlZE9wdGlvbnM7CgppbXBvcnQgJy4uL2Zhc3RhL2NvbXBpbGVyX2NvbnRleHQuZGFydCcgc2hvdyBDb21waWxlckNvbnRleHQ7CgppbXBvcnQgJy4uL2Zhc3RhL2luY3JlbWVudGFsX2NvbXBpbGVyLmRhcnQnIHNob3cgSW5jcmVtZW50YWxDb21waWxlcjsKCmltcG9ydCAnLi4vZmFzdGEvc2Nhbm5lci9zdHJpbmdfc2Nhbm5lci5kYXJ0JyBzaG93IFN0cmluZ1NjYW5uZXI7CgppbXBvcnQgJ2NvbXBpbGVyX29wdGlvbnMuZGFydCcgc2hvdyBDb21waWxlck9wdGlvbnM7CgphYnN0cmFjdCBjbGFzcyBJbmNyZW1lbnRhbEtlcm5lbEdlbmVyYXRvciB7CiAgZmFjdG9yeSBJbmNyZW1lbnRhbEtlcm5lbEdlbmVyYXRvcihDb21waWxlck9wdGlvbnMgb3B0aW9ucywgVXJpIGVudHJ5UG9pbnQsCiAgICAgIFtVcmkgaW5pdGlhbGl6ZUZyb21EaWxsVXJpLCBib29sIG91dGxpbmVPbmx5XSkgewogICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbENvbXBpbGVyKAogICAgICAgIG5ldyBDb21waWxlckNvbnRleHQoCiAgICAgICAgICAgIG5ldyBQcm9jZXNzZWRPcHRpb25zKG9wdGlvbnM6IG9wdGlvbnMsIGlucHV0czogW2VudHJ5UG9pbnRdKSksCiAgICAgICAgaW5pdGlhbGl6ZUZyb21EaWxsVXJpLAogICAgICAgIG91dGxpbmVPbmx5KTsKICB9CgogIC8vLyBJbml0aWFsaXplIHRoZSBpbmNyZW1lbnRhbCBjb21waWxlciBmcm9tIGEgY29tcG9uZW50LgogIC8vLwogIC8vLyBOb3RpY2UgdGhhdCB0aGUgY29tcG9uZW50IGhhcyB0byBpbmNsdWRlIHRoZSBwbGF0Zm9ybSwgYW5kIHRoYXQgbm8gb3RoZXIKICAvLy8gcGxhdGZvcm0gd2lsbCBiZSBsb2FkZWQuCiAgZmFjdG9yeSBJbmNyZW1lbnRhbEtlcm5lbEdlbmVyYXRvci5mcm9tQ29tcG9uZW50KAogICAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucywgVXJpIGVudHJ5UG9pbnQsIENvbXBvbmVudCBjb21wb25lbnQsCiAgICAgIFtib29sIG91dGxpbmVPbmx5XSkgewogICAgcmV0dXJuIG5ldyBJbmNyZW1lbnRhbENvbXBpbGVyLmZyb21Db21wb25lbnQoCiAgICAgICAgbmV3IENvbXBpbGVyQ29udGV4dCgKICAgICAgICAgICAgbmV3IFByb2Nlc3NlZE9wdGlvbnMob3B0aW9uczogb3B0aW9ucywgaW5wdXRzOiBbZW50cnlQb2ludF0pKSwKICAgICAgICBjb21wb25lbnQsCiAgICAgICAgb3V0bGluZU9ubHkpOwogIH0KCiAgLy8vIFJldHVybnMgYSBjb21wb25lbnQgd2hvc2UgbGlicmFyaWVzIGFyZSB0aGUgcmVjb21waWxlZCBsaWJyYXJpZXMsCiAgLy8vIG9yIC0gaW4gdGhlIGNhc2Ugb2YgW2Z1bGxDb21wb25lbnRdIC0gYSBmdWxsIENvbXBvbmVudC4KICBGdXR1cmU8Q29tcG9uZW50PiBjb21wdXRlRGVsdGEoe0xpc3Q8VXJpPiBlbnRyeVBvaW50cywgYm9vbCBmdWxsQ29tcG9uZW50fSk7CgogIC8vLyBSZXR1cm5zIFtDb3JlVHlwZXNdIHVzZWQgZHVyaW5nIGNvbXBpbGF0aW9uLgogIC8vLyBWYWxpZCBhZnRlciBbY29tcHV0ZURlbHRhXSBpcyBjYWxsZWQuCiAgQ29yZVR5cGVzIGdldENvcmVUeXBlcygpOwoKICAvLy8gUmV0dXJucyBbQ2xhc3NIaWVyYXJjaHldIHVzZWQgZHVyaW5nIGNvbXBpbGF0aW9uLgogIC8vLyBWYWxpZCBhZnRlciBbY29tcHV0ZURlbHRhXSBpcyBjYWxsZWQuCiAgQ2xhc3NIaWVyYXJjaHkgZ2V0Q2xhc3NIaWVyYXJjaHkoKTsKCiAgLy8vIFJlbW92ZSB0aGUgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGZpbGUgW3VyaV0gZnJvbSB0aGUgc2V0IG9mCiAgLy8vIHZhbGlkIGZpbGVzLiAgVGhpcyBndWFyYW50ZWVzIHRoYXQgdGhvc2UgZmlsZXMgd2lsbCBiZSByZS1yZWFkIG9uIHRoZQogIC8vLyBuZXh0IGNhbGwgdG8gW2NvbXB1dGVEZWx0YV0pLgogIHZvaWQgaW52YWxpZGF0ZShVcmkgdXJpKTsKCiAgLy8vIEludmFsaWRhdGUgYWxsIGxpYnJhcmllcyB0aGF0IHdlcmUgYnVpbGQgZnJvbSBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoaXMgaXMgZXF1aXZhbGVudCB0byBhIG51bWJlciBvZiBjYWxscyB0byBbaW52YWxpZGF0ZV06IE9uZSBmb3IgZWFjaCBVUkkKICAvLy8gdGhhdCBoYXBwZW5zIHRvIGhhdmUgYmVlbiByZWFkIGZyb20gc291cmNlLgogIC8vLyBTYWlkIGFub3RoZXIgd2F5LCB0aGlzIGludmFsaWRhdGVzIGV2ZXJ5dGhpbmcgbm90IGxvYWRlZCBmcm9tIGRpbGwKICAvLy8gKGF0IHN0YXJ0dXApIG9yIHZpYSBbc2V0TW9kdWxlc1RvTG9hZE9uTmV4dENvbXB1dGVEZWx0YV0uCiAgdm9pZCBpbnZhbGlkYXRlQWxsU291cmNlcygpOwoKICAvLy8gU2V0IHRoZSBnaXZlbiBbY29tcG9uZW50c10gYXMgY29tcG9uZW50cyB0byBsb2FkIG9uIHRoZSBuZXh0IGl0ZXJhdGlvbgogIC8vLyBvZiBbY29tcHV0ZURlbHRhXS4KICAvLy8KICAvLy8gSWYgc3BlY2lmaWVkLCBhbGwgbGlicmFyaWVzIG5vdCBjb21waWxlZCBmcm9tIHNvdXJjZSBhbmQgbm90IGluY2x1ZGVkIGluCiAgLy8vIHRoZXNlIGNvbXBvbmVudHMgd2lsbCBiZSBpbnZhbGlkYXRlZCBhbmQgdGhlIGxpYnJhcmllcyBpbnNpZGUgdGhlc2UKICAvLy8gY29tcG9uZW50cyB3aWxsIGJlIGxvYWRlZCBpbnN0ZWFkLgogIC8vLwogIC8vLyBVc2VmdWwgZm9yLCBmb3IgaW5zdGFuY2UsIG1vZHVsYXIgY29tcGlsYXRpb24sIHdoZXJlIG1vZHVsZXMKICAvLy8gKGNyZWF0ZWQgZXh0ZXJuYWxseSkgdmlhIHRoaXMgZnVuY3Rpb25hbGl0eSBjYW4gYmUgYWRkZWQsIGNoYW5nZWQgb3IKICAvLy8gcmVtb3ZlZC4KICB2b2lkIHNldE1vZHVsZXNUb0xvYWRPbk5leHRDb21wdXRlRGVsdGEoTGlzdDxDb21wb25lbnQ+IGNvbXBvbmVudHMpOwoKICAvLy8gQ29tcGlsZSBbZXhwcmVzc2lvbl0gYXMgYW4gW0V4cHJlc3Npb25dLiBBIGZ1bmN0aW9uIHJldHVybmluZyB0aGF0CiAgLy8vIGV4cHJlc3Npb24gaXMgY29tcGlsZWQuCiAgLy8vCiAgLy8vIFtleHByZXNzaW9uXSBtYXkgdXNlIHRoZSB2YXJpYWJsZXMgc3VwcGxpZWQgaW4gW2RlZmluaXRpb25zXSBhcyBmcmVlCiAgLy8vIHZhcmlhYmxlcyBhbmQgW3R5cGVEZWZpbml0aW9uc10gYXMgZnJlZSB0eXBlIHZhcmlhYmxlcy4gVGhlc2Ugd2lsbCBiZWNvbWUKICAvLy8gcmVxdWlyZWQgcGFyYW1ldGVycyB0byB0aGUgY29tcGlsZWQgZnVuY3Rpb24uIEFsbCBlbGVtZW50cyBvZgogIC8vLyBbZGVmaW5pdGlvbnNdIGFuZCBbdHlwZURlZmluaXRpb25zXSB3aWxsIGJlY29tZSBwYXJhbWV0ZXJzL3R5cGUKICAvLy8gcGFyYW1ldGVycywgd2hldGhlciBvciBub3QgdGhleSBhcHBlYXIgZnJlZSBpbiBbZXhwcmVzc2lvbl0uIFRoZSB0eXBlCiAgLy8vIHBhcmFtZXRlcnMgc2hvdWxkIGhhdmUgYSBudWxsIHBhcmVudCBwb2ludGVyLgogIC8vLwogIC8vLyBbbGlicmFyeVVyaV0gbXVzdCByZWZlciB0byBlaXRoZXIgYSBwcmV2aW91c2x5IGNvbXBpbGVkIGxpYnJhcnkuCiAgLy8vIFtjbGFzc05hbWVdIG1heSBvcHRpb25hbGx5IHJlZmVyIHRvIGEgY2xhc3Mgd2l0aGluIHN1Y2ggbGlicmFyeSB0byB1c2UgZm9yCiAgLy8vIHRoZSBzY29wZSBvZiB0aGUgZXhwcmVzc2lvbi4gSW4gdGhhdCBjYXNlLCBbaXNTdGF0aWNdIGluZGljYXRlcyB3aGV0aGVyCiAgLy8vIHRoZSBzY29wZSBjYW4gYWNjZXNzIFt0aGlzXS4KICAvLy8KICAvLy8gSXQgaXMgaWxsZWdhbCB0byB1c2UgImF3YWl0IiBpbiBbZXhwcmVzc2lvbl0gYW5kIHRoZSBjb21waWxlZCBmdW5jdGlvbgogIC8vLyB3aWxsIGFsd2F5cyBiZSBzeW5jaHJvbm91cy4KICAvLy8KICAvLy8gW2NvbXB1dGVEZWx0YV0gbXVzdCBoYXZlIGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2UgcHJpb3IuCiAgLy8vCiAgLy8vIFtjb21waWxlRXhwcmVzc2lvbl0gd2lsbCByZXR1cm4gW251bGxdIGlmIHRoZSBsaWJyYXJ5IG9yIGNsYXNzIGZvcgogIC8vLyBbZW5jbG9zaW5nTm9kZV0gY291bGQgbm90IGJlIGZvdW5kLiBPdGhlcndpc2UsIGVycm9ycyBhcmUgcmVwb3J0ZWQgaW4gdGhlCiAgLy8vIG5vcm1hbCB3YXkuCiAgRnV0dXJlPFByb2NlZHVyZT4gY29tcGlsZUV4cHJlc3Npb24oCiAgICAgIFN0cmluZyBleHByZXNzaW9uLAogICAgICBNYXA8U3RyaW5nLCBEYXJ0VHlwZT4gZGVmaW5pdGlvbnMsCiAgICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZURlZmluaXRpb25zLAogICAgICBTdHJpbmcgc3ludGhldGljUHJvY2VkdXJlTmFtZSwKICAgICAgVXJpIGxpYnJhcnlVcmksCiAgICAgIFtTdHJpbmcgY2xhc3NOYW1lLAogICAgICBib29sIGlzU3RhdGljID0gZmFsc2VdKTsKfQoKYm9vbCBpc0xlZ2FsSWRlbnRpZmllcihTdHJpbmcgaWRlbnRpZmllcikgewogIHJldHVybiBTdHJpbmdTY2FubmVyLmlzTGVnYWxJZGVudGlmaWVyKGlkZW50aWZpZXIpOwp9CnoATk48ASEBQgE4ASQ4AT8BPgFGAUIBNQEsTjckHUsfFgQBPAZPHzREHDIdSxMWBAFIPk8BMywcATgsJgFLTCQcATwGUDJJQB8BTRkGT0opBkNLD0cBSR4GS1BERkw0BkdRTiMGTSIGQAZJUBInGSkrJRYZHwIBLDYCAUVwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9pbmNyZW1lbnRhbF9rZXJuZWxfZ2VuZXJhdG9yLmRhcnREc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2FwaV9wcm90b3R5cGUvbWVtb3J5X2ZpbGVfc3lzdGVtLmRhcnSPYC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZyb250X2VuZC5tZW1vcnlfZmlsZV9zeXN0ZW07CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCmltcG9ydCAnZmlsZV9zeXN0ZW0uZGFydCc7CgovLy8gQ29uY3JldGUgaW1wbGVtZW50YXRpb24gb2YgW0ZpbGVTeXN0ZW1dIHdoaWNoIHBlcmZvcm1zIGl0cyBvcGVyYXRpb25zIG9uIGFuCi8vLyBpbi1tZW1vcnkgdmlydHVhbCBmaWxlIHN5c3RlbS4KLy8vCi8vLyBOb3QgaW50ZW5kZWQgdG8gYmUgaW1wbGVtZW50ZWQgb3IgZXh0ZW5kZWQgYnkgY2xpZW50cy4KY2xhc3MgTWVtb3J5RmlsZVN5c3RlbSBpbXBsZW1lbnRzIEZpbGVTeXN0ZW0gewogIGZpbmFsIE1hcDxVcmksIFVpbnQ4TGlzdD4gX2ZpbGVzID0ge307CiAgZmluYWwgU2V0PFVyaT4gX2RpcmVjdG9yaWVzID0gbmV3IFNldDxVcmk+KCk7CgogIC8vLyBUaGUgImN1cnJlbnQgZGlyZWN0b3J5IiBpbiB0aGUgaW4tbWVtb3J5IHZpcnR1YWwgZmlsZSBzeXN0ZW0uCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCB0byBjb252ZXJ0IHJlbGF0aXZlIFVSSXMgdG8gYWJzb2x1dGUgVVJJcy4KICAvLy8KICAvLy8gQWx3YXlzIGVuZHMgaW4gYSB0cmFpbGluZyAnLycuCiAgVXJpIGN1cnJlbnREaXJlY3Rvcnk7CgogIE1lbW9yeUZpbGVTeXN0ZW0oVXJpIGN1cnJlbnREaXJlY3RvcnkpCiAgICAgIDogY3VycmVudERpcmVjdG9yeSA9IF9hZGRUcmFpbGluZ1NsYXNoKGN1cnJlbnREaXJlY3RvcnkpOwoKICBAb3ZlcnJpZGUKICBNZW1vcnlGaWxlU3lzdGVtRW50aXR5IGVudGl0eUZvclVyaShVcmkgdXJpKSB7CiAgICByZXR1cm4gbmV3IE1lbW9yeUZpbGVTeXN0ZW1FbnRpdHkuXygKICAgICAgICB0aGlzLCBjdXJyZW50RGlyZWN0b3J5LnJlc29sdmVVcmkodXJpKS5ub3JtYWxpemVQYXRoKCkpOwogIH0KCiAgU3RyaW5nIGdldCBkZWJ1Z1N0cmluZyB7CiAgICB2YXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBfZmlsZXMuZm9yRWFjaCgodXJpLCBfKSA9PiBzYi53cml0ZSgiLSAkdXJpXG4iKSk7CiAgICBfZGlyZWN0b3JpZXMuZm9yRWFjaCgodXJpKSA9PiBzYi53cml0ZSgiLSAkdXJpXG4iKSk7CiAgICByZXR1cm4gJyRzYic7CiAgfQoKICBzdGF0aWMgVXJpIF9hZGRUcmFpbGluZ1NsYXNoKFVyaSB1cmkpIHsKICAgIGlmICghdXJpLnBhdGguZW5kc1dpdGgoJy8nKSkgewogICAgICB1cmkgPSB1cmkucmVwbGFjZShwYXRoOiB1cmkucGF0aCArICcvJyk7CiAgICB9CiAgICByZXR1cm4gdXJpOwogIH0KfQoKLy8vIENvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIFtGaWxlU3lzdGVtRW50aXR5XSBmb3IgdXNlIGJ5Ci8vLyBbTWVtb3J5RmlsZVN5c3RlbV0uCmNsYXNzIE1lbW9yeUZpbGVTeXN0ZW1FbnRpdHkgaW1wbGVtZW50cyBGaWxlU3lzdGVtRW50aXR5IHsKICBmaW5hbCBNZW1vcnlGaWxlU3lzdGVtIF9maWxlU3lzdGVtOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgdXJpOwoKICBNZW1vcnlGaWxlU3lzdGVtRW50aXR5Ll8odGhpcy5fZmlsZVN5c3RlbSwgdGhpcy51cmkpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHVyaS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIE1lbW9yeUZpbGVTeXN0ZW1FbnRpdHkgJiYKICAgICAgb3RoZXIudXJpID09IHVyaSAmJgogICAgICBpZGVudGljYWwob3RoZXIuX2ZpbGVTeXN0ZW0sIF9maWxlU3lzdGVtKTsKCiAgLy8vIENyZWF0ZSBhIGRpcmVjdG9yeSBmb3IgdGhpcyBmaWxlIHN5c3RlbSBlbnRyeS4KICAvLy8KICAvLy8gSWYgdGhlIGVudHJ5IGlzIGFuIGV4aXN0aW5nIGZpbGUsIHRoaXMgaXMgYW4gZXJyb3IuCiAgdm9pZCBjcmVhdGVEaXJlY3RvcnkoKSB7CiAgICBpZiAoX2ZpbGVTeXN0ZW0uX2ZpbGVzW3VyaV0gIT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbih1cmksICdFbnRyeSAkdXJpIGlzIGEgZmlsZS4nKTsKICAgIH0KICAgIF9maWxlU3lzdGVtLl9kaXJlY3Rvcmllcy5hZGQodXJpKTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxib29sPiBleGlzdHMoKSBhc3luYyB7CiAgICByZXR1cm4gX2ZpbGVTeXN0ZW0uX2ZpbGVzW3VyaV0gIT0gbnVsbCB8fAogICAgICAgIF9maWxlU3lzdGVtLl9kaXJlY3Rvcmllcy5jb250YWlucyh1cmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnV0dXJlPExpc3Q8aW50Pj4gcmVhZEFzQnl0ZXMoKSBhc3luYyB7CiAgICBVaW50OExpc3QgY29udGVudHMgPSBfZmlsZVN5c3RlbS5fZmlsZXNbdXJpXTsKICAgIGlmIChjb250ZW50cyA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKHVyaSwgJ0ZpbGUgJHVyaSBkb2VzIG5vdCBleGlzdC4nKTsKICAgIH0KICAgIHJldHVybiBjb250ZW50czsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxTdHJpbmc+IHJlYWRBc1N0cmluZygpIGFzeW5jIHsKICAgIExpc3Q8aW50PiBieXRlcyA9IGF3YWl0IHJlYWRBc0J5dGVzKCk7CiAgICB0cnkgewogICAgICByZXR1cm4gdXRmOC5kZWNvZGUoYnl0ZXMpOwogICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24odXJpLCBlLm1lc3NhZ2UpOwogICAgfQogIH0KCiAgLy8vIFdyaXRlcyB0aGUgZ2l2ZW4gcmF3IGJ5dGVzIHRvIHRoaXMgZmlsZSBzeXN0ZW0gZW50aXR5LgogIC8vLwogIC8vLyBJZiBubyBmaWxlIGV4aXN0cywgb25lIGlzIGNyZWF0ZWQuICBJZiBhIGZpbGUgZXhpc3RzIGFscmVhZHksIGl0IGlzCiAgLy8vIG92ZXJ3cml0dGVuLgogIHZvaWQgd3JpdGVBc0J5dGVzU3luYyhMaXN0PGludD4gYnl0ZXMpIHsKICAgIGlmIChieXRlcyBpcyBVaW50OExpc3QpIHsKICAgICAgX3VwZGF0ZSh1cmksIGJ5dGVzKTsKICAgIH0gZWxzZSB7CiAgICAgIF91cGRhdGUodXJpLCBuZXcgVWludDhMaXN0LmZyb21MaXN0KGJ5dGVzKSk7CiAgICB9CiAgfQoKICAvLy8gV3JpdGVzIHRoZSBnaXZlbiBzdHJpbmcgdG8gdGhpcyBmaWxlIHN5c3RlbSBlbnRpdHkuCiAgLy8vCiAgLy8vIFRoZSBzdHJpbmcgaXMgZW5jb2RlZCBhcyBVVEYtOC4KICAvLy8KICAvLy8gSWYgbm8gZmlsZSBleGlzdHMsIG9uZSBpcyBjcmVhdGVkLiAgSWYgYSBmaWxlIGV4aXN0cyBhbHJlYWR5LCBpdCBpcwogIC8vLyBvdmVyd3JpdHRlbi4KICB2b2lkIHdyaXRlQXNTdHJpbmdTeW5jKFN0cmluZyBzKSB7CiAgICAvLyBOb3RlOiB0aGUgcmV0dXJuIHR5cGUgb2YgdXRmOC5lbmNvZGUgaXMgTGlzdDxpbnQ+LCBidXQgaW4gcHJhY3RpY2UgaXQKICAgIC8vIGFsd2F5cyByZXR1cm5zIFVpbnQ4TGlzdC4gIFdlIHJlbHkgb24gdGhhdCBmb3IgZWZmaWNpZW5jeSwgc28gdGhhdCB3ZQogICAgLy8gZG9uJ3QgaGF2ZSB0byBtYWtlIGFuIGV4dHJhIGNvcHkuCiAgICBfdXBkYXRlKHVyaSwgdXRmOC5lbmNvZGUocykgYXMgVWludDhMaXN0KTsKICB9CgogIHZvaWQgX3VwZGF0ZShVcmkgdXJpLCBVaW50OExpc3QgZGF0YSkgewogICAgaWYgKF9maWxlU3lzdGVtLl9kaXJlY3Rvcmllcy5jb250YWlucyh1cmkpKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKHVyaSwgJ0VudHJ5ICR1cmkgaXMgYSBkaXJlY3RvcnkuJyk7CiAgICB9CiAgICBfZmlsZVN5c3RlbS5fZmlsZXNbdXJpXSA9IGRhdGE7CiAgfQp9CoCLAE5OPAEmARUXGgEbAVAjBDsvKTABRAY+BiUYASlAAQwxKUEEARshNjkSBAEqIy8GEAQCAT0YOyYBDBEBOAEMJAEMJCkaMQE1BjobK0MGJwQBDCAuMAQBDCoyHEcGFQQBDCgrCiElNQYEAT0GShMrHhsNMwYEAToGJgZKEyVNTSkvBAEqMkgGJAQCATtwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9tZW1vcnlfZmlsZV9zeXN0ZW0uZGFydDdzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlcl9ncmFwaC5kYXJ0iF4vLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5idWlsZGVyX2dyYXBoOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9rZXJuZWwuZGFydCcgc2hvdyBMaWJyYXJ5RGVwZW5kZW5jeSwgTGlicmFyeVBhcnQ7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3V0aWwvZ3JhcGguZGFydCcgc2hvdyBHcmFwaDsKCmltcG9ydCAnYnVpbGRlci9idWlsZGVyLmRhcnQnIHNob3cgTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJ2V4cG9ydC5kYXJ0JyBzaG93IEV4cG9ydDsKCmltcG9ydCAnaW1wb3J0LmRhcnQnIHNob3cgSW1wb3J0OwoKaW1wb3J0ICdkaWxsL2RpbGxfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgRGlsbExpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICdzb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKY2xhc3MgQnVpbGRlckdyYXBoIGltcGxlbWVudHMgR3JhcGg8VXJpPiB7CiAgZmluYWwgTWFwPFVyaSwgTGlicmFyeUJ1aWxkZXI+IGJ1aWxkZXJzOwoKICBCdWlsZGVyR3JhcGgodGhpcy5idWlsZGVycyk7CgogIEl0ZXJhYmxlPFVyaT4gZ2V0IHZlcnRpY2VzID0+IGJ1aWxkZXJzLmtleXM7CgogIEl0ZXJhYmxlPFVyaT4gbmVpZ2hib3JzT2YoVXJpIHZlcnRleCkgc3luYyogewogICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGJ1aWxkZXJzW3ZlcnRleF07CiAgICBpZiAobGlicmFyeSA9PSBudWxsKSB7CiAgICAgIHRocm93ICJMaWJyYXJ5IG5vdCBmb3VuZDogJHZlcnRleCI7CiAgICB9CiAgICBpZiAobGlicmFyeSBpcyBTb3VyY2VMaWJyYXJ5QnVpbGRlcikgewogICAgICBmb3IgKEltcG9ydCBpbXBvcnQgaW4gbGlicmFyeS5pbXBvcnRzKSB7CiAgICAgICAgLy8gJ2ltcG9ydGVkJyBjYW4gYmUgbnVsbCBmb3IgZmFrZSBpbXBvcnRzLCBzdWNoIGFzIGRhcnQtZXh0Oi4KICAgICAgICBpZiAoaW1wb3J0LmltcG9ydGVkICE9IG51bGwpIHsKICAgICAgICAgIFVyaSB1cmkgPSBpbXBvcnQuaW1wb3J0ZWQudXJpOwogICAgICAgICAgaWYgKGJ1aWxkZXJzLmNvbnRhaW5zS2V5KHVyaSkpIHsKICAgICAgICAgICAgeWllbGQgdXJpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKEV4cG9ydCBleHBvcnQgaW4gbGlicmFyeS5leHBvcnRzKSB7CiAgICAgICAgVXJpIHVyaSA9IGV4cG9ydC5leHBvcnRlZC51cmk7CiAgICAgICAgaWYgKGJ1aWxkZXJzLmNvbnRhaW5zS2V5KHVyaSkpIHsKICAgICAgICAgIHlpZWxkIHVyaTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yIChTb3VyY2VMaWJyYXJ5QnVpbGRlciBwYXJ0IGluIGxpYnJhcnkucGFydHMpIHsKICAgICAgICBVcmkgdXJpID0gcGFydC51cmk7CiAgICAgICAgaWYgKGJ1aWxkZXJzLmNvbnRhaW5zS2V5KHVyaSkpIHsKICAgICAgICAgIHlpZWxkIHVyaTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobGlicmFyeSBpcyBEaWxsTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgLy8gSW1wb3J0cyBhbmQgZXhwb3J0cwogICAgICBmb3IgKExpYnJhcnlEZXBlbmRlbmN5IGRlcGVuZGVuY3kgaW4gbGlicmFyeS5saWJyYXJ5LmRlcGVuZGVuY2llcykgewogICAgICAgIFVyaSB1cmkgPSBkZXBlbmRlbmN5LnRhcmdldExpYnJhcnkuaW1wb3J0VXJpOwogICAgICAgIGlmIChidWlsZGVycy5jb250YWluc0tleSh1cmkpKSB7CiAgICAgICAgICB5aWVsZCB1cmk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBQYXJ0cwogICAgICBmb3IgKExpYnJhcnlQYXJ0IHBhcnQgaW4gbGlicmFyeS5saWJyYXJ5LnBhcnRzKSB7CiAgICAgICAgVXJpIHVyaSA9IGxpYnJhcnkudXJpLnJlc29sdmUocGFydC5wYXJ0VXJpKTsKICAgICAgICBpZiAoYnVpbGRlcnMuY29udGFpbnNLZXkodXJpKSkgewogICAgICAgICAgeWllbGQgdXJpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfQpLAE5OPAEdAUkBNAEzASIBIgFBAUcBKysBHwEvATAvGyoGKy9HJykrFwwKCC8nKRUKCDkcKRUKCDAdSzYpFQoIAQ84NSkVCggGBAIBLnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyX2dyYXBoLmRhcnQ0c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2NvbWJpbmF0b3IuZGFydIK7Ly8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuY29tYmluYXRvcjsKCmNsYXNzIENvbWJpbmF0b3IgewogIGZpbmFsIGJvb2wgaXNTaG93OwoKICBmaW5hbCBTZXQ8U3RyaW5nPiBuYW1lczsKCiAgQ29tYmluYXRvcih0aGlzLmlzU2hvdywgdGhpcy5uYW1lcywgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKTsKCiAgQ29tYmluYXRvci5zaG93KEl0ZXJhYmxlPFN0cmluZz4gbmFtZXMsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkKICAgICAgOiB0aGlzKHRydWUsIG5ldyBTZXQ8U3RyaW5nPi5mcm9tKG5hbWVzKSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CgogIENvbWJpbmF0b3IuaGlkZShJdGVyYWJsZTxTdHJpbmc+IG5hbWVzLCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpCiAgICAgIDogdGhpcyhmYWxzZSwgbmV3IFNldDxTdHJpbmc+LmZyb20obmFtZXMpLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKCiAgYm9vbCBnZXQgaXNIaWRlID0+ICFpc1Nob3c7Cn0KFwBOTjwBGgETFQEbAUQBR0YBR0cBHgIBK3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jb21iaW5hdG9yLmRhcnRJc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3V0aWwvZXJyb3JfcmVwb3J0ZXJfZmlsZV9jb3BpZXIuZGFydILlLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDppbycgc2hvdyBEaXJlY3RvcnksIEZpbGUsIEdaaXBDb2RlYzsKClVyaSBzYXZlQXNHemlwKExpc3Q8aW50PiBkYXRhLCBTdHJpbmcgZmlsZW5hbWUpIHsKICAvLyBUT0RPKGplbnNqKTogVGhpcyBzaG91bGQgYmUgZG9uZSB2aWEgdGhlIEZpbGVTeXN0ZW0gaW5zdGVhZCwgYnV0IGl0CiAgLy8gY3VycmVudGx5IGRvZXNuJ3Qgc3VwcG9ydCB3cml0aW5nLgogIEdaaXBDb2RlYyBnWmlwQ29kZWMgPSBuZXcgR1ppcENvZGVjKCk7CiAgTGlzdDxpbnQ+IGd6aXBwZWRJbml0aWFsaXplZEZyb21EYXRhID0gZ1ppcENvZGVjLmVuY29kZShkYXRhKTsKICBEaXJlY3RvcnkgdGVtcERpciA9IERpcmVjdG9yeS5zeXN0ZW1UZW1wLmNyZWF0ZVRlbXBTeW5jKCIkZmlsZW5hbWUiKTsKICBGaWxlIGZpbGUgPSBuZXcgRmlsZSgiJHt0ZW1wRGlyLnBhdGh9LyR7ZmlsZW5hbWV9Lmd6Iik7CiAgZmlsZS53cml0ZUFzQnl0ZXNTeW5jKGd6aXBwZWRJbml0aWFsaXplZEZyb21EYXRhKTsKICByZXR1cm4gZmlsZS51cmk7Cn0KEgBOTjwBMgEySSgpQUg6NRMCAUBwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdXRpbC9lcnJvcl9yZXBvcnRlcl9maWxlX2NvcGllci5kYXJ0PHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9oeWJyaWRfZmlsZV9zeXN0ZW0uZGFydIeSLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBBIG1lbW9yeSArIHBoeXNpY2FsIGZpbGUgc3lzdGVtIHVzZWQgdG8gbW9jayBpbnB1dCBmb3IgdGVzdHMgYnV0IHByb3ZpZGUKLy8vIHNkayBzb3VyY2VzIGZyb20gZGlzay4KbGlicmFyeSBmcm9udF9lbmQuc3JjLmh5YnJpZF9maWxlX3N5c3RlbTsKCmltcG9ydCAnZGFydDphc3luYyc7CgppbXBvcnQgJy4uL2FwaV9wcm90b3R5cGUvZmlsZV9zeXN0ZW0uZGFydCc7CmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9tZW1vcnlfZmlsZV9zeXN0ZW0uZGFydCc7CmltcG9ydCAnLi4vYXBpX3Byb3RvdHlwZS9zdGFuZGFyZF9maWxlX3N5c3RlbS5kYXJ0JzsKCi8vLyBBIGZpbGUgc3lzdGVtIHRoYXQgbWl4ZXMgZmlsZXMgZnJvbSBtZW1vcnkgYW5kIGEgcGh5c2ljYWwgZmlsZSBzeXN0ZW0uIEFsbAovLy8gbWVtb3J5IGVudGl0aWVzIHRha2UgcHJpb3RpdHkgb3ZlciBmaWxlIHN5c3RlbSBlbnRpdGllcy4KY2xhc3MgSHlicmlkRmlsZVN5c3RlbSBpbXBsZW1lbnRzIEZpbGVTeXN0ZW0gewogIGZpbmFsIE1lbW9yeUZpbGVTeXN0ZW0gbWVtb3J5OwogIGZpbmFsIEZpbGVTeXN0ZW0gcGh5c2ljYWw7CgogIEh5YnJpZEZpbGVTeXN0ZW0odGhpcy5tZW1vcnksIFtGaWxlU3lzdGVtIF9waHlzaWNhbF0pCiAgICAgIDogcGh5c2ljYWwgPSBfcGh5c2ljYWwgPz8gU3RhbmRhcmRGaWxlU3lzdGVtLmluc3RhbmNlOwoKICBAb3ZlcnJpZGUKICBGaWxlU3lzdGVtRW50aXR5IGVudGl0eUZvclVyaShVcmkgdXJpKSA9PgogICAgICBuZXcgSHlicmlkRmlsZVN5c3RlbUVudGl0eSh1cmksIHRoaXMpOwp9CgovLy8gRW50aXR5IHRoYXQgZGVsZWdhdGVzIHRvIGFuIHVuZGVybHlpbmcgbWVtb3J5IG9yIHBoaXNpY2FsIGZpbGUgc3lzdGVtCi8vLyBlbnRpdHkuCmNsYXNzIEh5YnJpZEZpbGVTeXN0ZW1FbnRpdHkgaW1wbGVtZW50cyBGaWxlU3lzdGVtRW50aXR5IHsKICBmaW5hbCBVcmkgdXJpOwogIEZpbGVTeXN0ZW1FbnRpdHkgX2RlbGVnYXRlOwogIGZpbmFsIEh5YnJpZEZpbGVTeXN0ZW0gX2ZzOwoKICBIeWJyaWRGaWxlU3lzdGVtRW50aXR5KHRoaXMudXJpLCB0aGlzLl9mcyk7CgogIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5PiBnZXQgZGVsZWdhdGUgYXN5bmMgewogICAgaWYgKF9kZWxlZ2F0ZSAhPSBudWxsKSByZXR1cm4gX2RlbGVnYXRlOwogICAgRmlsZVN5c3RlbUVudGl0eSBlbnRpdHkgPSBfZnMubWVtb3J5LmVudGl0eUZvclVyaSh1cmkpOwogICAgaWYgKCgodXJpLnNjaGVtZSAhPSAnZmlsZScgJiYgdXJpLnNjaGVtZSAhPSAnZGF0YScpICYmCiAgICAgICAgICAgIF9mcy5waHlzaWNhbCBpcyBTdGFuZGFyZEZpbGVTeXN0ZW0pIHx8CiAgICAgICAgYXdhaXQgZW50aXR5LmV4aXN0cygpKSB7CiAgICAgIF9kZWxlZ2F0ZSA9IGVudGl0eTsKICAgICAgcmV0dXJuIF9kZWxlZ2F0ZTsKICAgIH0KICAgIHJldHVybiBfZGVsZWdhdGUgPSBfZnMucGh5c2ljYWwuZW50aXR5Rm9yVXJpKHVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8Ym9vbD4gZXhpc3RzKCkgYXN5bmMgPT4gKGF3YWl0IGRlbGVnYXRlKS5leGlzdHMoKTsKCiAgQG92ZXJyaWRlCiAgRnV0dXJlPExpc3Q8aW50Pj4gcmVhZEFzQnl0ZXMoKSBhc3luYyA9PiAoYXdhaXQgZGVsZWdhdGUpLnJlYWRBc0J5dGVzKCk7CgogIEBvdmVycmlkZQogIEZ1dHVyZTxTdHJpbmc+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+IHJlYWRMaXN0PFQgZXh0ZW5kcyBqcy5Ob2RlPih7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICByZXR1cm4gc291cmNlLnJlYWRMaXN0KHJlYWQsIGVtcHR5QXNOdWxsOiBlbXB0eUFzTnVsbCk7CiAgfQp9CgpjbGFzcyBDb2RlZ2VuUmVhZGVySW1wbCBpbXBsZW1lbnRzIENvZGVnZW5SZWFkZXIgewogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKICBmaW5hbCBMaXN0PE1vZHVsYXJOYW1lPiBtb2R1bGFyTmFtZXM7CiAgZmluYWwgTGlzdDxNb2R1bGFyRXhwcmVzc2lvbj4gbW9kdWxhckV4cHJlc3Npb25zOwoKICBDb2RlZ2VuUmVhZGVySW1wbCgKICAgICAgdGhpcy5jbG9zZWRXb3JsZCwgdGhpcy5tb2R1bGFyTmFtZXMsIHRoaXMubW9kdWxhckV4cHJlc3Npb25zKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSByZWFkQWJzdHJhY3RWYWx1ZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAucmVhZEFic3RyYWN0VmFsdWVGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuTm9kZSByZWFkSnNOb2RlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICByZXR1cm4gSnNOb2RlRGVzZXJpYWxpemVyLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICBzb3VyY2UsIG1vZHVsYXJOYW1lcywgbW9kdWxhckV4cHJlc3Npb25zKTsKICB9CgogIEBvdmVycmlkZQogIE91dHB1dFVuaXQgcmVhZE91dHB1dFVuaXRSZWZlcmVuY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0c1tzb3VyY2UucmVhZEludCgpXTsKICB9Cn0KCmNsYXNzIENvZGVnZW5Xcml0ZXJJbXBsIGltcGxlbWVudHMgQ29kZWdlbldyaXRlciB7CiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwoKICBDb2RlZ2VuV3JpdGVySW1wbCh0aGlzLmNsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUFic3RyYWN0VmFsdWUoRGF0YVNpbmsgc2luaywgQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi53cml0ZUFic3RyYWN0VmFsdWVUb0RhdGFTaW5rKHNpbmssIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVKc05vZGUoRGF0YVNpbmsgc2luaywganMuTm9kZSBub2RlKSB7CiAgICBKc05vZGVTZXJpYWxpemVyLndyaXRlVG9EYXRhU2luayhzaW5rLCBub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVPdXRwdXRVbml0UmVmZXJlbmNlKERhdGFTaW5rIHNpbmssIE91dHB1dFVuaXQgdmFsdWUpIHsKICAgIHNpbmsud3JpdGVJbnQoY2xvc2VkV29ybGQub3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdHMuaW5kZXhPZih2YWx1ZSkpOwogIH0KfQqIggBOTjwBIAFAARkiIyAkPjEhKB4lIzwiLhojJFAnQh8cGAEqGQFAKQEoQQQBSy8EATkBPicEASUBQwE+JgE8AToBOgIBTy4BDB1CHTYhJjQpJiYBHwEbEyMhHSUtGigdGiMdGyFJAUEXLyk/HxMnURMjTxMrQB8TRB1FJE9NKxsuNEIzED1JHxM8ORwoSC9QExUoEBUUEhYpFiQZFh8ZFx4EAQwoFR5PGk0aSRpRGk8RIiIZN0MaJi8UIDAxGiVFGjgpPxoTBAEMK1BGShFOBAEvLi0lQAQBDEs0Ky4EASoaHQQBDCZFBAFFOi4EAQw+LyYmBAEiHQQBDDABNjIkBAEMKyE1IQQBSiMvBAEMPUUEAT8dKgQBDDE5BAE3GyIEAQwvJwQBNyEoBAEMLy0EAQwWKiAjATAhIDUIBgFNJ0MbLAYnOS0pNQEaBAIBTEQYMCYlHCgBQkEBDD8BDjhEBAEwLwQBMzEEASorBAE2MwQBLy5NBAE9RwQBKiwEAUU9BAE3NwQBIisEATM2BAE2MwQBSj4EAT85BAE3MQQBLxMWBAFBGSIEASUeSwQCAU8gPSM4AgEwBE42DD8MJS8BTh8BDDkuBAIBKgQuOgw/DCUBLwEeRwEMOSkaF00GEwQCATwWLgEVHiw4ARFLATQGQk9LLBkmNBctRRVOBAEzBkpNKygVIiITBAE5LRsnLREuOREoMxExSBEsOxEtPBEpNBEtOBErOhEtPBEsQxEpOBEuPRE5RBE4QxE6RRFBTBE0PhE4TRElMBEIBj8hOyM7RBE5IzlEETgjOEQROiM6RBEtJTJEETklPUQRCAYEAQwWKiU+IS04ExoEAgEXDBMNFhESDhIQEhEOEx4dHyYZHQoCAT8sAR4SFR4BMQE+F0QRGhQlDzYsNCElEScKDyYnKTcjDy8qKyorLDgkDysmDyc0Dz8qDzIsDzY0LA8jJA8GFTgEASgVGhQlDzYsLSMhESMKDyYnKTcfDy8qKyorLDggDysiDyciKA8/MC4PMiAPNiIoIA8jIA8GEwQBFjcTBAEhHBo8BAEMExwXBAEMFDcYBAEMGTcfBAEMITckBAEMKTEEAQwVQgQBDCMtIx4eIwQBDBdDAgEdGhgXGQwYAgE2ITIBJBUYASsBRBdQERQ5JQ83Iw82NCElEScKDzgkDysmDzckDwYVLgQBKBUaFDkhDzcfDzYtIyERIwoPOCAPKyIPNyAPBhMEAQwcHBMEASccGjwEAQxEAQwpMQQBDBUsBAEMIy0pHhwEAQwWKjQhPA0WBiEaBAIBEgsJEQwVDRQPDw0UFw8RERkPFQwRCg0XEg8LCgoSEQ8aDhsVDRQUFxEOEw8QEhMSFQ8SEhAPEhcJCwIBTxMnLio6MEIyQDY2MkBGNjo6SjZCMDosMkY8Ni4sLDw6Nkw0TkIyQEBGOjQ+Njg8PjxCNjw8ODY8RiouAgE7ORcBIQE9IEAcHgQBNhUkGhsIDRkGBAEsIgQBIkAwQggEAQxHUQQBDENPBAEMQVEEAQxDTwQBDD9NBAEMRVAEAQwnKCQkIhYEAQwjJiIcIBYEAQwzLiokKBYEAQwpKSUWFyMWBAEMOzIuICUsFgQBDCsqJiQWBAEMOTEtHisWBAEMLywoGiYWBAEMIR8uKiIoGCQsKBoYJhgrMy8jLRgNIkMGBAEMPzQwGy4WBAEMLywoJhYEAQwzLioiKBYEAQwzLDg0GDINMCwkKgYWBAEMLywoICYWBAEMNUgEAQw1SAQBDD0lNDAiLhgNIkMGBAEMHyklHBYoIxYEAQwzLioWGigWBAEMLScjGhohFgQBDCsqJiEkFgQBDD80MCEmLhYEAQwhLyspFgQBDC8sKCEmFgQBDCcoJB8aIhYEAQwlJyMfGiEWBAEMJScjHxYXIRYEAQwhLysYHykWBAEMHy4qGB8oFgQBDC8sKBsWGyYWBAEMRTczHSgxFgQBDC0rJx4lFyUWBAEMRzg0IicyFgQBDDsyLiUcLBYEAQwrKiYcIiQWBAEMOTEtISsWBAEMOTEtIhYrFgQBDD80MBYaLhYEAQwnLioWKBYEAQwhKyccFiUWBAEMJTAsFRsqFgQBDCMsKB0WJhYEAQwfLSkWLC4nFgQBDCMvKxwpFgQBDCUwLCgqFgQBDCMvKy4pFgQBDCkyLi4sFgQBDB0sKBYbJhYEAQwjLysbFikWBAEMIy8rHhgWKRYEAQwfLSknLCkWJxYEAQwdLCgbFhsmFgQBDDUvKykWBAEMPzQwHC4WBAEMIyYiICAWBAEMJygkGiIWBAIBQgROMxsbKDQBUQElGSY0IiZMKCARBAE3FSkiBjoSFB8qNCgPHSglJg8lMDouDyArJSYtKQ8pNDMtTTIPISwjKg8oMzMyMQ8jLissDyMuSiccLA8hLCEfLCoPKDM6MQ8rNi0yNA8jLiUsDyUwOi4PJTA6Lg8tOB8zNg8jLjYsDyk0LjozIjIPICswICk2RykPJTAmIjUuDx4pKSk6Jw8hLDYqDys2Ky5LNA8mMR4vDyMuOCwPHyopKS0oDx4pKSksJw8eKSklJi8nDyYxJzQvLw8lMCQ0Ky4PIy4qJSo/LA8uOS08QjcPIi0tLyZEKw8vOkMvPCk4Dyk0LzFEMg8hLCsqNioPKDM9MQ8oMywkNTEPKzYmIjs0DyUwICUuDyItKyAuKw8nMiQyKjAPIy4tIDAsDyQvIDs9OS0PJjErKS8PJzI8JTAPJjE4Ki8PKTQ4LTIPIy4kKissDyYxKiQuLw8mMS0nJDkvDyQvNDk2JDotDyMuKiQpNiwPJjEoLw8rNjM0Dx0oNCkmDx8qLiUoDwYqMjsIJTwGEQQBQzwEAgEzIig0ARVFAQw3KzIEAQwqMjMEAQw6RQQCATMiAScBDEBPBAEMMjIEAQxDSgQCAShwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24vY29kZWdlbi5kYXJ0JnNka3Jvb3Q6L3BrZy9qc19hc3QvbGliL3NyYy9ub2Rlcy5kYXJ0wADsfy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGpzX2FzdDsKCmFic3RyYWN0IGNsYXNzIE5vZGVWaXNpdG9yPFQ+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+CiAgICAgIGV4cHJlc3Npb24uYWNjZXB0MSh2aXNpdG9yLCBhcmcpOwoKICBBd2FpdCBfY2xvbmUoKSA9PiBuZXcgQXdhaXQoZXhwcmVzc2lvbik7Cn0KCi8qKgogKiBBIGNvbW1lbnQuCiAqCiAqIEV4dGVuZHMgW1N0YXRlbWVudF0gc28gd2UgY2FuIGFkZCBjb21tZW50cyBiZWZvcmUgc3RhdGVtZW50cyBpbgogKiBbQmxvY2tdIGFuZCBbUHJvZ3JhbV0uCiAqLwpjbGFzcyBDb21tZW50IGV4dGVuZHMgU3RhdGVtZW50IHsKICBmaW5hbCBTdHJpbmcgY29tbWVudDsKCiAgQ29tbWVudCh0aGlzLmNvbW1lbnQpOwoKICBUIGFjY2VwdDxUPihOb2RlVmlzaXRv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LiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTGlicmFyeSBjb250YWluaW5nIGlkZW50aWZpZXIsIG5hbWVzLCBhbmQgc2VsZWN0b3JzIGNvbW1vbmx5IHVzZWQgdGhyb3VnaAovLy8gdGhlIGNvbXBpbGVyLgpsaWJyYXJ5IGRhcnQyanMuY29tbW9uLm5hbWVzOwoKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JyBzaG93IE5hbWUsIFB1YmxpY05hbWU7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCcgc2hvdyBDYWxsU3RydWN0dXJlOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CgovLy8gW1N0cmluZ11zIGNvbW1vbmx5IHVzZWQuCmNsYXNzIElkZW50aWZpZXJzIHsKICAvLy8gVGhlIG5hbWUgb2YgdGhlIGNhbGwgb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBjYWxsID0gJ2NhbGwnOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBwcm9wZXJ0eSB1c2VkIG9uIGl0ZXJhdG9ycyBpbiBmb3ItZWFjaAogIC8vLyBsb29wcy4KICBzdGF0aWMgY29uc3QgU3RyaW5nIGN1cnJlbnQgPSAnY3VycmVudCc7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgZnJvbSBlbnZpcm9ubWVudCBjb25zdHJ1Y3RvcnMgb24gJ2ludCcsICdib29sJyBhbmQKICAvLy8gJ1N0cmluZycuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBmcm9tRW52aXJvbm1lbnQgPSAnZnJvbUVudmlyb25tZW50JzsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBpdGVyYXRvciBwcm9wZXJ0eSB1c2VkIGluIGZvci1lYWNoIGxvb3BzLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgaXRlcmF0b3IgPSAnaXRlcmF0b3InOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIGBsb2FkTGlicmFyeWAgZ2V0dGVyIGRlZmluZWQgb24gZGVmZXJyZWQgcHJlZml4ZXMuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBsb2FkTGlicmFyeSA9ICdsb2FkTGlicmFyeSc7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgbWFpbiBtZXRob2QuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBtYWluID0gJ21haW4nOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIG5vIHN1Y2ggbWV0aG9kIGhhbmRsZXIgb24gJ09iamVjdCcuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBub1N1Y2hNZXRob2RfID0gJ25vU3VjaE1ldGhvZCc7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgcnVudGltZSB0eXBlIHByb3BlcnR5IG9uICdPYmplY3QnLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgcnVudGltZVR5cGVfID0gJ3J1bnRpbWVUeXBlJzsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBnZXR0ZXIgcmV0dXJuaW5nIHRoZSBzaXplIG9mIGNvbnRhaW5lcnMgYW5kIHN0cmluZ3MuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBsZW5ndGggPSAnbGVuZ3RoJzsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBzaWduYXR1cmUgZnVuY3Rpb24gaW4gY2xvc3VyZSBjbGFzc2VzLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgc2lnbmF0dXJlID0gJzpzaWduYXR1cmUnOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlICdKUycgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTID0gJ0pTJzsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSAnSlNfQlVJTFRJTicgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTX0JVSUxUSU4gPSAnSlNfQlVJTFRJTic7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgJ0pTX0VNQkVEREVEX0dMT0JBTCcgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTX0VNQkVEREVEX0dMT0JBTCA9ICdKU19FTUJFRERFRF9HTE9CQUwnOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlICdKU19JTlRFUkNFUFRPUl9DT05TVEFOVCcgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UID0gJ0pTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UJzsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSAnSlNfU1RSSU5HX0NPTkNBVCcgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTX1NUUklOR19DT05DQVQgPSAnSlNfU1RSSU5HX0NPTkNBVCc7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgJ0RBUlRfQ0xPU1VSRV9UT19KUycgZm9yZWlnbiBmdW5jdGlvbi4KICBzdGF0aWMgY29uc3QgU3RyaW5nIERBUlRfQ0xPU1VSRV9UT19KUyA9ICdEQVJUX0NMT1NVUkVfVE9fSlMnOwp9CgovLy8gW05hbWVdcyBjb21tb25seSB1c2VkLgpjbGFzcyBOYW1lcyB7CiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBjYWxsIG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBOYW1lIGNhbGwgPSBjb25zdCBQdWJsaWNOYW1lKElkZW50aWZpZXJzLmNhbGwpOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBwcm9wZXJ0eSB1c2VkIG9uIGl0ZXJhdG9ycyBpbiBmb3ItZWFjaAogIC8vLyBsb29wcy4KICBzdGF0aWMgY29uc3QgTmFtZSBjdXJyZW50ID0gY29uc3QgUHVibGljTmFtZShJZGVudGlmaWVycy5jdXJyZW50KTsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoZSBkeW5hbWljIHR5cGUuCiAgc3RhdGljIGNvbnN0IE5hbWUgZHluYW1pY18gPSBjb25zdCBQdWJsaWNOYW1lKCdkeW5hbWljJyk7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgaXRlcmF0b3IgcHJvcGVydHkgdXNlZCBpbiBmb3ItZWFjaCBsb29wcy4KICBzdGF0aWMgY29uc3QgTmFtZSBpdGVyYXRvciA9IGNvbnN0IFB1YmxpY05hbWUoSWRlbnRpZmllcnMuaXRlcmF0b3IpOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIG1vdmUgbmV4dCBtZXRob2QgdXNlZCBvbiBpdGVyYXRvcnMgaW4gZm9yLWVhY2ggbG9vcHMuCiAgc3RhdGljIGNvbnN0IE5hbWUgbW92ZU5leHQgPSBjb25zdCBQdWJsaWNOYW1lKCdtb3ZlTmV4dCcpOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhlIG5vIHN1Y2ggbWV0aG9kIGhhbmRsZXIgb24gJ09iamVjdCcuCiAgc3RhdGljIGNvbnN0IE5hbWUgbm9TdWNoTWV0aG9kXyA9IGNvbnN0IFB1YmxpY05hbWUoSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyk7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgdG8tc3RyaW5nIG1ldGhvZCBvbiAnT2JqZWN0Jy4KICBzdGF0aWMgY29uc3QgTmFtZSB0b1N0cmluZ18gPSBjb25zdCBQdWJsaWNOYW1lKCd0b1N0cmluZycpOwoKICBzdGF0aWMgY29uc3QgTmFtZSBJTkRFWF9OQU1FID0gY29uc3QgUHVibGljTmFtZSgiW10iKTsKICBzdGF0aWMgY29uc3QgTmFtZSBJTkRFWF9TRVRfTkFNRSA9IGNvbnN0IFB1YmxpY05hbWUoIltdPSIpOwogIHN0YXRpYyBjb25zdCBOYW1lIENBTExfTkFNRSA9IE5hbWVzLmNhbGw7CgogIHN0YXRpYyBjb25zdCBOYW1lIGxlbmd0aCA9IGNvbnN0IFB1YmxpY05hbWUoSWRlbnRpZmllcnMubGVuZ3RoKTsKCiAgc3RhdGljIGNvbnN0IE5hbWUgcnVudGltZVR5cGVfID0gY29uc3QgUHVibGljTmFtZShJZGVudGlmaWVycy5ydW50aW1lVHlwZV8pOwoKICBzdGF0aWMgY29uc3QgTmFtZSBnZW5lcmljSW5zdGFudGlhdGlvbiA9IGNvbnN0IFB1YmxpY05hbWUoJ2luc3RhbnRpYXRlJyk7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgc2lnbmF0dXJlIGZ1bmN0aW9uIGluIGNsb3N1cmUgY2xhc3Nlcy4KICBzdGF0aWMgY29uc3QgTmFtZSBzaWduYXR1cmUgPSBjb25zdCBQdWJsaWNOYW1lKElkZW50aWZpZXJzLnNpZ25hdHVyZSk7Cn0KCi8vLyBbU2VsZWN0b3JdcyBjb21tb25seSB1c2VkLgpjbGFzcyBTZWxlY3RvcnMgewogIC8vLyBUaGUgc2VsZWN0b3IgZm9yIGNhbGxpbmcgdGhlIGNhbmNlbCBtZXRob2Qgb24gJ1N0cmVhbUl0ZXJhdG9yJy4KICBzdGF0aWMgZmluYWwgU2VsZWN0b3IgY2FuY2VsID0KICAgICAgbmV3IFNlbGVjdG9yLmNhbGwoY29uc3QgUHVibGljTmFtZSgnY2FuY2VsJyksIENhbGxTdHJ1Y3R1cmUuTk9fQVJHUyk7CgogIC8vLyBUaGUgc2VsZWN0b3IgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgZWxlbWVudCBwcm9wZXJ0eSB1c2VkIGluIGZvci1lYWNoCiAgLy8vIGxvb3BzLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBjdXJyZW50ID0gbmV3IFNlbGVjdG9yLmdldHRlcihOYW1lcy5jdXJyZW50KTsKCiAgLy8vIFRoZSBzZWxlY3RvciBmb3IgZ2V0dGluZyB0aGUgaXRlcmF0b3IgcHJvcGVydHkgdXNlZCBpbiBmb3ItZWFjaCBsb29wcy4KICBzdGF0aWMgZmluYWwgU2VsZWN0b3IgaXRlcmF0b3IgPSBuZXcgU2VsZWN0b3IuZ2V0dGVyKE5hbWVzLml0ZXJhdG9yKTsKCiAgLy8vIFRoZSBzZWxlY3RvciBmb3IgY2FsbGluZyB0aGUgbW92ZSBuZXh0IG1ldGhvZCB1c2VkIGluIGZvci1lYWNoIGxvb3BzLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBtb3ZlTmV4dCA9CiAgICAgIG5ldyBTZWxlY3Rvci5jYWxsKE5hbWVzLm1vdmVOZXh0LCBDYWxsU3RydWN0dXJlLk5PX0FSR1MpOwoKICAvLy8gVGhlIHNlbGVjdG9yIGZvciBjYWxsaW5nIHRoZSBubyBzdWNoIG1ldGhvZCBoYW5kbGVyIG9uICdPYmplY3QnLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBub1N1Y2hNZXRob2RfID0KICAgICAgbmV3IFNlbGVjdG9yLmNhbGwoTmFtZXMubm9TdWNoTWV0aG9kXywgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKTsKCiAgLy8vIFRoZSBzZWxlY3RvciBmb3IgdGVhcmluZyBvZmYgbm9TdWNoTWV0aG9kLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBub1N1Y2hNZXRob2RHZXR0ZXIgPQogICAgICBuZXcgU2VsZWN0b3IuZ2V0dGVyKE5hbWVzLm5vU3VjaE1ldGhvZF8pOwoKICAvLy8gVGhlIHNlbGVjdG9yIGZvciBjYWxsaW5nIHRoZSB0by1zdHJpbmcgbWV0aG9kIG9uICdPYmplY3QnLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciB0b1N0cmluZ18gPQogICAgICBuZXcgU2VsZWN0b3IuY2FsbChOYW1lcy50b1N0cmluZ18sIENhbGxTdHJ1Y3R1cmUuTk9fQVJHUyk7CgogIC8vLyBUaGUgc2VsZWN0b3IgZm9yIHRlYXJpbmcgb2ZmIHRvU3RyaW5nLgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciB0b1N0cmluZ0dldHRlciA9IG5ldyBTZWxlY3Rvci5nZXR0ZXIoTmFtZXMudG9TdHJpbmdfKTsKCiAgc3RhdGljIGZpbmFsIFNlbGVjdG9yIGhhc2hDb2RlXyA9CiAgICAgIG5ldyBTZWxlY3Rvci5nZXR0ZXIoY29uc3QgUHVibGljTmFtZSgnaGFzaENvZGUnKSk7CgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBjb21wYXJlVG8gPQogICAgICBuZXcgU2VsZWN0b3IuY2FsbChjb25zdCBQdWJsaWNOYW1lKCJjb21wYXJlVG8iKSwgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKTsKCiAgc3RhdGljIGZpbmFsIFNlbGVjdG9yIGVxdWFscyA9IG5ldyBTZWxlY3Rvci5iaW5hcnlPcGVyYXRvcignPT0nKTsKCiAgc3RhdGljIGZpbmFsIFNlbGVjdG9yIGxlbmd0aCA9IG5ldyBTZWxlY3Rvci5nZXR0ZXIoTmFtZXMubGVuZ3RoKTsKCiAgc3RhdGljIGZpbmFsIFNlbGVjdG9yIGNvZGVVbml0QXQgPQogICAgICBuZXcgU2VsZWN0b3IuY2FsbChjb25zdCBQdWJsaWNOYW1lKCdjb2RlVW5pdEF0JyksIENhbGxTdHJ1Y3R1cmUuT05FX0FSRyk7CgogIHN0YXRpYyBmaW5hbCBTZWxlY3RvciBpbmRleCA9IG5ldyBTZWxlY3Rvci5pbmRleCgpOwoKICBzdGF0aWMgZmluYWwgU2VsZWN0b3IgcnVudGltZVR5cGVfID0gbmV3IFNlbGVjdG9yLmdldHRlcihOYW1lcy5ydW50aW1lVHlwZV8pOwoKICAvLy8gTGlzdCBvZiBhbGwgdGhlIHNlbGVjdG9ycyBoZWxkIGluIHN0YXRpYyBmaWVsZHMuCiAgLy8vCiAgLy8vIFRoZXNlIG9iamVjdHMgYXJlIHNoYXJlZCBiZXR3ZWVuIGRpZmZlcmVudCBydW5zIGluIGJhdGNoLW1vZGUgYW5kIG11c3QKICAvLy8gdGh1cyByZW1haW4gaW4gdGhlIFtTZWxlY3Rvci5jYW5vbmljYWxpemVkVmFsdWVzXSBtYXAuCiAgc3RhdGljIGZpbmFsIExpc3Q8U2VsZWN0b3I+IEFMTCA9IDxTZWxlY3Rvcj5bCiAgICBjYW5jZWwsCiAgICBjdXJyZW50LAogICAgaXRlcmF0b3IsCiAgICBtb3ZlTmV4dCwKICAgIG5vU3VjaE1ldGhvZF8sCiAgICBub1N1Y2hNZXRob2RHZXR0ZXIsCiAgICB0b1N0cmluZ18sCiAgICB0b1N0cmluZ0dldHRlciwKICAgIGhhc2hDb2RlXywKICAgIGNvbXBhcmVUbywKICAgIGVxdWFscywKICAgIGxlbmd0aCwKICAgIGNvZGVVbml0QXQsCiAgICBpbmRleCwKICAgIHJ1bnRpbWVUeXBlXwogIF07Cn0KCi8vLyBbVXJpXXMgY29tbW9ubHkgdXNlZC4KY2xhc3MgVXJpcyB7CiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OmFzeW5jJy4KICBzdGF0aWMgZmluYWwgVXJpIGRhcnRfYXN5bmMgPSBuZXcgVXJpKHNjaGVtZTogJ2RhcnQnLCBwYXRoOiAnYXN5bmMnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OmNvbGxlY3Rpb24nLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9jb2xsZWN0aW9uID0KICAgICAgbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ2NvbGxlY3Rpb24nKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OmNvcmUnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9jb3JlID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ2NvcmUnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Omh0bWwnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9odG1sID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ2h0bWwnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Omh0bWxfY29tbW9uJy4KICBzdGF0aWMgZmluYWwgVXJpIGRhcnRfaHRtbF9jb21tb24gPQogICAgICBuZXcgVXJpKHNjaGVtZTogJ2RhcnQnLCBwYXRoOiAnaHRtbF9jb21tb24nKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OmluZGV4ZWRfZGInLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9pbmRleGVkX2RiID0KICAgICAgbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ2luZGV4ZWRfZGInKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Omlzb2xhdGUnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9pc29sYXRlID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ2lzb2xhdGUnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Om1hdGgnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9tYXRoID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ21hdGgnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Om1pcnJvcnMnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9taXJyb3JzID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ21pcnJvcnMnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9pbnRlcm5hbCcuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X19pbnRlcm5hbCA9IG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdfaW50ZXJuYWwnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9uYXRpdmVfdHlwZWRfZGF0YScuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X19uYXRpdmVfdHlwZWRfZGF0YSA9CiAgICAgIG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdfbmF0aXZlX3R5cGVkX2RhdGEnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OnR5cGVkX2RhdGEnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF90eXBlZF9kYXRhID0KICAgICAgbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ3R5cGVkX2RhdGEnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OnN2ZycuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X3N2ZyA9IG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdzdmcnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OndlYl9hdWRpbycuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X3dlYl9hdWRpbyA9IG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICd3ZWJfYXVkaW8nKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OndlYl9nbCcuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X3dlYl9nbCA9IG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICd3ZWJfZ2wnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0OndlYl9zcWwnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF93ZWJfc3FsID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ3dlYl9zcWwnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9qc19oZWxwZXInLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9fanNfaGVscGVyID0KICAgICAgbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ19qc19oZWxwZXInKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9ydGknLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9fcnRpID0gbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ19ydGknKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9pbnRlcmNlcHRvcnMnLgogIHN0YXRpYyBmaW5hbCBVcmkgZGFydF9faW50ZXJjZXB0b3JzID0KICAgICAgbmV3IFVyaShzY2hlbWU6ICdkYXJ0JywgcGF0aDogJ19pbnRlcmNlcHRvcnMnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9mb3JlaWduX2hlbHBlcicuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X19mb3JlaWduX2hlbHBlciA9CiAgICAgIG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdfZm9yZWlnbl9oZWxwZXInKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9qc19uYW1lcycuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X19qc19uYW1lcyA9IG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdfanNfbmFtZXMnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdkYXJ0Ol9qc19lbWJlZGRlZF9uYW1lcycuCiAgc3RhdGljIGZpbmFsIFVyaSBkYXJ0X19qc19lbWJlZGRlZF9uYW1lcyA9CiAgICAgIG5ldyBVcmkoc2NoZW1lOiAnZGFydCcsIHBhdGg6ICdfanNfZW1iZWRkZWRfbmFtZXMnKTsKCiAgLy8vIFRoZSBVUkkgZm9yICdwYWNrYWdlOmpzJy4KICBzdGF0aWMgZmluYWwgVXJpIHBhY2thZ2VfanMgPSBuZXcgVXJpKHNjaGVtZTogJ3BhY2thZ2UnLCBwYXRoOiAnanMvanMuZGFydCcpOwoKICAvLy8gVGhlIFVSSSBmb3IgJ3BhY2thZ2U6bWV0YS9kYXJ0MmpzLmRhcnQnLgogIHN0YXRpYyBmaW5hbCBVcmkgcGFja2FnZV9tZXRhX2RhcnQyanMgPQogICAgICBuZXcgVXJpKHNjaGVtZTogJ3BhY2thZ2UnLCBwYXRoOiAnbWV0YS9kYXJ0MmpzLmRhcnQnKTsKfQqBBQBOTjwBThIeATc9MgEdFCUlAU0NKwFJEDsBQC0BSTMBIyUBOjYBOTQBSykBPTABLSEBNTEBPUEBQksBOz0BPUECARsOJT8BTQ1FASQ8AUBHAUw9ATpRATQ+ATk+LAFDAU8BTAE9SQIBHxJGIUwBTQ1GAU1IAUwjQAFHKEUBMS0wAUEkQQEtTwEkOQEkTwFEAUQBJVABNgFQATcGTT0wDA0ODhMYDxQPDwwMEAsRBQIBGg0gSAElJTMBH0YBH0YBJiY0ASUlMwEiTAEfRgEiTAEkUAEtLTsBJSUzAR5EASRQASFKASJMASUlMwEfRgEoKDYBKio4ASRQAS0tOwEgUAEvKj0CASZwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24vbmFtZXMuZGFydC5zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21tb24vd29yay5kYXJ0geMvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmNvbW1vbi53b3JrOwoKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JyBzaG93IE1lbWJlckVudGl0eTsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcgc2hvdyBXb3JsZEltcGFjdDsKCmFic3RyYWN0IGNsYXNzIFdvcmtJdGVtIHsKICAvLy8gRWxlbWVudCBvbiB3aGljaCB0aGUgd29yayB3aWxsIGJlIGRvbmUuCiAgTWVtYmVyRW50aXR5IGdldCBlbGVtZW50OwoKICBXb3JsZEltcGFjdCBydW4oKTsKfQoRAE5OPAEdATY5ARouHAEVAgElcGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uL3dvcmsuZGFydDJzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21tb25fZWxlbWVudHMuZGFydMABIIkvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gVE9ETyhzaWdtdW5kKTogcmVuYW1lIGFuZCBtb3ZlIHRvIGNvbW1vbi9lbGVtZW50cy5kYXJ0CmxpYnJhcnkgZGFydDJqcy50eXBlX3N5c3RlbTsKCmltcG9ydCAnY29tbW9uLmRhcnQnOwppbXBvcnQgJ2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IElkZW50aWZpZXJzLCBVcmlzOwppbXBvcnQgJ2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJ2NvbnN0YW50cy9leHByZXNzaW9ucy5kYXJ0JyBzaG93IENvbnN0YW50RXhwcmVzc2lvbjsKaW1wb3J0ICdjb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJ2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICdqc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnIHNob3cgTmF0aXZlQmFzaWNEYXRhOwppbXBvcnQgJ2pzX21vZGVsL2xvY2Fscy5kYXJ0JzsKaW1wb3J0ICdrZXJuZWwvZGFydDJqc190YXJnZXQuZGFydCc7CmltcG9ydCAnb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwoKLy8vIFRoZSBjb21tb24gZWxlbWVudHMgYW5kIHR5cGVzIGluIERhcnQuCmFic3RyYWN0IGNsYXNzIENvbW1vbkVsZW1lbnRzIHsKICAvLy8gVGhlIGBPYmplY3RgIGNsYXNzIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScuCiAgQ2xhc3NFbnRpdHkgZ2V0IG9iamVjdENsYXNzOwoKICAvLy8gVGhlIGBib29sYCBjbGFzcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIENsYXNzRW50aXR5IGdldCBib29sQ2xhc3M7CgogIC8vLyBUaGUgYG51bWAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBDbGFzc0VudGl0eSBnZXQgbnVtQ2xhc3M7CgogIC8vLyBUaGUgYGludGAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBDbGFzc0VudGl0eSBnZXQgaW50Q2xhc3M7CgogIC8vLyBUaGUgYGRvdWJsZWAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBDbGFzc0VudGl0eSBnZXQgZG91YmxlQ2xhc3M7CgogIC8vLyBUaGUgYFN0cmluZ2AgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBDbGFzc0VudGl0eSBnZXQgc3RyaW5nQ2xhc3M7CgogIC8vLyBUaGUgYEZ1bmN0aW9uYCBjbGFzcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIENsYXNzRW50aXR5IGdldCBmdW5jdGlvbkNsYXNzOwoKICAvLy8gVGhlIGBSZXNvdXJjZWAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBDbGFzc0VudGl0eSBnZXQgcmVzb3VyY2VDbGFzczsKCiAgLy8vIFRoZSBgU3ltYm9sYCBjbGFzcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIENsYXNzRW50aXR5IGdldCBzeW1ib2xDbGFzczsKCiAgLy8vIFRoZSBgTnVsbGAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBDbGFzc0VudGl0eSBnZXQgbnVsbENsYXNzOwoKICAvLy8gVGhlIGBUeXBlYCBjbGFzcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIENsYXNzRW50aXR5IGdldCB0eXBlQ2xhc3M7CgogIC8vLyBUaGUgYFN0YWNrVHJhY2VgIGNsYXNzIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZSc7CiAgQ2xhc3NFbnRpdHkgZ2V0IHN0YWNrVHJhY2VDbGFzczsKCiAgLy8vIFRoZSBgTGlzdGAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJzsKICBDbGFzc0VudGl0eSBnZXQgbGlzdENsYXNzOwoKICAvLy8gVGhlIGBTZXRgIGNsYXNzIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZSc7CiAgQ2xhc3NFbnRpdHkgZ2V0IHNldENsYXNzOwoKICAvLy8gVGhlIGBNYXBgIGNsYXNzIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZSc7CiAgQ2xhc3NFbnRpdHkgZ2V0IG1hcENsYXNzOwoKICAvLy8gVGhlIGBTZXRgIGNsYXNzIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZSc7CiAgQ2xhc3NFbnRpdHkgZ2V0IHVubW9kaWZpYWJsZVNldENsYXNzOwoKICAvLy8gVGhlIGBJdGVyYWJsZWAgY2xhc3MgZGVmaW5lZCBpbiAnZGFydDpjb3JlJzsKICBDbGFzc0VudGl0eSBnZXQgaXRlcmFibGVDbGFzczsKCiAgLy8vIFRoZSBgRnV0dXJlYCBjbGFzcyBkZWZpbmVkIGluICdhc3luYyc7LgogIENsYXNzRW50aXR5IGdldCBmdXR1cmVDbGFzczsKCiAgLy8vIFRoZSBgU3RyZWFtYCBjbGFzcyBkZWZpbmVkIGluICdhc3luYyc7CiAgQ2xhc3NFbnRpdHkgZ2V0IHN0cmVhbUNsYXNzOwoKICAvLy8gVGhlIGRhcnQ6Y29yZSBsaWJyYXJ5LgogIExpYnJhcnlFbnRpdHkgZ2V0IGNvcmVMaWJyYXJ5OwoKICAvLy8gVGhlIGRhcnQ6YXN5bmMgbGlicmFyeS4KICBMaWJyYXJ5RW50aXR5IGdldCBhc3luY0xpYnJhcnk7CgogIC8vLyBUaGUgZGFydDptaXJyb3JzIGxpYnJhcnkuCiAgTGlicmFyeUVudGl0eSBnZXQgbWlycm9yc0xpYnJhcnk7CgogIC8vLyBUaGUgZGFydDp0eXBlZF9kYXRhIGxpYnJhcnkuCiAgTGlicmFyeUVudGl0eSBnZXQgdHlwZWREYXRhTGlicmFyeTsKCiAgLy8vIFRoZSBkYXJ0Ol9qc19oZWxwZXIgbGlicmFyeS4KICBMaWJyYXJ5RW50aXR5IGdldCBqc0hlbHBlckxpYnJhcnk7CgogIC8vLyBUaGUgZGFydDpfaW50ZXJjZXB0b3JzIGxpYnJhcnkuCiAgTGlicmFyeUVudGl0eSBnZXQgaW50ZXJjZXB0b3JzTGlicmFyeTsKCiAgLy8vIFRoZSBkYXJ0Ol9mb3JlaWduX2hlbHBlciBsaWJyYXJ5LgogIExpYnJhcnlFbnRpdHkgZ2V0IGZvcmVpZ25MaWJyYXJ5OwoKICAvLy8gVGhlIGRhcnQ6X2ludGVybmFsIGxpYnJhcnkuCiAgTGlicmFyeUVudGl0eSBnZXQgcnRpTGlicmFyeTsKCiAgLy8vIFRoZSBkYXJ0Ol9pbnRlcm5hbCBsaWJyYXJ5LgogIExpYnJhcnlFbnRpdHkgZ2V0IGludGVybmFsTGlicmFyeTsKCiAgLy8vIFRoZSBgTmF0aXZlVHlwZWREYXRhYCBjbGFzcyBmcm9tIGRhcnQ6dHlwZWRfZGF0YS4KICBDbGFzc0VudGl0eSBnZXQgdHlwZWREYXRhQ2xhc3M7CgogIC8vLyBDb25zdHJ1Y3RvciBvZiB0aGUgYFN5bWJvbGAgY2xhc3MgaW4gZGFydDppbnRlcm5hbC4KICAvLy8KICAvLy8gVGhpcyBnZXR0ZXIgd2lsbCBlbnN1cmUgdGhhdCBgU3ltYm9sYCBpcyByZXNvbHZlZCBhbmQgbG9va3VwIHRoZQogIC8vLyBjb25zdHJ1Y3RvciBvbiBkZW1hbmQuCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IHN5bWJvbENvbnN0cnVjdG9yVGFyZ2V0OwoKICAvLy8gV2hldGhlciBbZWxlbWVudF0gaXMgdGhlIHNhbWUgYXMgW3N5bWJvbENvbnN0cnVjdG9yXS4KICAvLy8KICAvLy8gVXNlZCB0byBjaGVjayBmb3IgdGhlIGNvbnN0cnVjdG9yIHdpdGhvdXQgY29tcHV0aW5nIGl0IHVudGlsIGl0IGlzIGxpa2VseQogIC8vLyB0byBiZSBzZWVuLgogIGJvb2wgaXNTeW1ib2xDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFRoZSBmdW5jdGlvbiBgaWRlbnRpY2FsYCBpbiBkYXJ0OmNvcmUuCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGlkZW50aWNhbEZ1bmN0aW9uOwoKICAvLy8gV2hldGhlciBbZWxlbWVudF0gaXMgdGhlIGBGdW5jdGlvbi5hcHBseWAgbWV0aG9kLgogIC8vLwogIC8vLyBUaGlzIHdpbGwgbm90IHJlc29sdmUgdGhlIGFwcGx5IG1ldGhvZCBpZiBpdCBoYXNuJ3QgYmVlbiBzZWVuIHlldCBkdXJpbmcKICAvLy8gY29tcGlsYXRpb24uCiAgYm9vbCBpc0Z1bmN0aW9uQXBwbHlNZXRob2QoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gVGhlIGBkeW5hbWljYCB0eXBlLgogIER5bmFtaWNUeXBlIGdldCBkeW5hbWljVHlwZTsKCiAgLy8vIFRoZSBgT2JqZWN0YCB0eXBlIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScuCiAgSW50ZXJmYWNlVHlwZSBnZXQgb2JqZWN0VHlwZTsKCiAgLy8vIFRoZSBgYm9vbGAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIEludGVyZmFjZVR5cGUgZ2V0IGJvb2xUeXBlOwoKICAvLy8gVGhlIGBudW1gIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBJbnRlcmZhY2VUeXBlIGdldCBudW1UeXBlOwoKICAvLy8gVGhlIGBpbnRgIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBJbnRlcmZhY2VUeXBlIGdldCBpbnRUeXBlOwoKICAvLy8gVGhlIGBkb3VibGVgIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBJbnRlcmZhY2VUeXBlIGdldCBkb3VibGVUeXBlOwoKICAvLy8gVGhlIGBTdHJpbmdgIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBJbnRlcmZhY2VUeXBlIGdldCBzdHJpbmdUeXBlOwoKICAvLy8gVGhlIGBTeW1ib2xgIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBJbnRlcmZhY2VUeXBlIGdldCBzeW1ib2xUeXBlOwoKICAvLy8gVGhlIGBGdW5jdGlvbmAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIEludGVyZmFjZVR5cGUgZ2V0IGZ1bmN0aW9uVHlwZTsKCiAgLy8vIFRoZSBgTnVsbGAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIEludGVyZmFjZVR5cGUgZ2V0IG51bGxUeXBlOwoKICAvLy8gVGhlIGBUeXBlYCB0eXBlIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScuCiAgSW50ZXJmYWNlVHlwZSBnZXQgdHlwZVR5cGU7CgogIEludGVyZmFjZVR5cGUgZ2V0IHR5cGVMaXRlcmFsVHlwZTsKCiAgLy8vIFRoZSBgU3RhY2tUcmFjZWAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnOwogIEludGVyZmFjZVR5cGUgZ2V0IHN0YWNrVHJhY2VUeXBlOwoKICAvLy8gUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgYExpc3RgIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJyB3aXRoCiAgLy8vIFtlbGVtZW50VHlwZV0gYXMgaXRzIHR5cGUgYXJndW1lbnQuCiAgLy8vCiAgLy8vIElmIG5vIHR5cGUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoZSBjYW5vbmljYWwgcmF3IHR5cGUgaXMgcmV0dXJuZWQuCiAgSW50ZXJmYWNlVHlwZSBsaXN0VHlwZShbRGFydFR5cGUgZWxlbWVudFR5cGVdKTsKCiAgLy8vIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIGBTZXRgIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJyB3aXRoCiAgLy8vIFtlbGVtZW50VHlwZV0gYXMgaXRzIHR5cGUgYXJndW1lbnQuCiAgLy8vCiAgLy8vIElmIG5vIHR5cGUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoZSBjYW5vbmljYWwgcmF3IHR5cGUgaXMgcmV0dXJuZWQuCiAgSW50ZXJmYWNlVHlwZSBzZXRUeXBlKFtEYXJ0VHlwZSBlbGVtZW50VHlwZV0pOwoKICAvLy8gUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgYE1hcGAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmNvcmUnIHdpdGgKICAvLy8gW2tleVR5cGVdIGFuZCBbdmFsdWVUeXBlXSBhcyBpdHMgdHlwZSBhcmd1bWVudHMuCiAgLy8vCiAgLy8vIElmIG5vIHR5cGUgYXJndW1lbnRzIGFyZSBwcm92aWRlZCwgdGhlIGNhbm9uaWNhbCByYXcgdHlwZSBpcyByZXR1cm5lZC4KICBJbnRlcmZhY2VUeXBlIG1hcFR5cGUoW0RhcnRUeXBlIGtleVR5cGUsIERhcnRUeXBlIHZhbHVlVHlwZV0pOwoKICAvLy8gUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgYEl0ZXJhYmxlYCB0eXBlIGRlZmluZWQgaW4gJ2RhcnQ6Y29yZScgd2l0aAogIC8vLyBbZWxlbWVudFR5cGVdIGFzIGl0cyB0eXBlIGFyZ3VtZW50LgogIC8vLwogIC8vLyBJZiBubyB0eXBlIGFyZ3VtZW50IGlzIHByb3ZpZGVkLCB0aGUgY2Fub25pY2FsIHJhdyB0eXBlIGlzIHJldHVybmVkLgogIEludGVyZmFjZVR5cGUgaXRlcmFibGVUeXBlKFtEYXJ0VHlwZSBlbGVtZW50VHlwZV0pOwoKICAvLy8gUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgYEZ1dHVyZWAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmFzeW5jJyB3aXRoCiAgLy8vIFtlbGVtZW50VHlwZV0gYXMgaXRzIHR5cGUgYXJndW1lbnQuCiAgLy8vCiAgLy8vIElmIG5vIHR5cGUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoZSBjYW5vbmljYWwgcmF3IHR5cGUgaXMgcmV0dXJuZWQuCiAgSW50ZXJmYWNlVHlwZSBmdXR1cmVUeXBlKFtEYXJ0VHlwZSBlbGVtZW50VHlwZV0pOwoKICAvLy8gUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgYFN0cmVhbWAgdHlwZSBkZWZpbmVkIGluICdkYXJ0OmFzeW5jJyB3aXRoCiAgLy8vIFtlbGVtZW50VHlwZV0gYXMgaXRzIHR5cGUgYXJndW1lbnQuCiAgLy8vCiAgLy8vIElmIG5vIHR5cGUgYXJndW1lbnQgaXMgcHJvdmlkZWQsIHRoZSBjYW5vbmljYWwgcmF3IHR5cGUgaXMgcmV0dXJuZWQuCiAgSW50ZXJmYWNlVHlwZSBzdHJlYW1UeXBlKFtEYXJ0VHlwZSBlbGVtZW50VHlwZV0pOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2VsZW1lbnRdIGlzIGEgc3VwZXJjbGFzcyBvZiBgU3RyaW5nYCBvciBgbnVtYC4KICBib29sIGlzTnVtYmVyT3JTdHJpbmdTdXBlcnR5cGUoQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaXMgYSBzdXBlcmNsYXNzIG9mIGBTdHJpbmdgLgogIGJvb2wgaXNTdHJpbmdPbmx5U3VwZXJ0eXBlKENsYXNzRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2VsZW1lbnRdIGlzIGEgc3VwZXJjbGFzcyBvZiBgTGlzdGAuCiAgYm9vbCBpc0xpc3RTdXBlcnR5cGUoQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIEludGVyZmFjZVR5cGUgZ2V0Q29uc3RhbnRNYXBUeXBlRm9yKEludGVyZmFjZVR5cGUgc291cmNlVHlwZSwKICAgICAge2Jvb2wgaGFzUHJvdG9LZXk6IGZhbHNlLCBib29sIG9ubHlTdHJpbmdLZXlzOiBmYWxzZX0pOwoKICBJbnRlcmZhY2VUeXBlIGdldENvbnN0YW50U2V0VHlwZUZvcihJbnRlcmZhY2VUeXBlIHNvdXJjZVR5cGUpOwoKICBGaWVsZEVudGl0eSBnZXQgc3ltYm9sRmllbGQ7CgogIEludGVyZmFjZVR5cGUgZ2V0IHN5bWJvbEltcGxlbWVudGF0aW9uVHlwZTsKCiAgLy8gRnJvbSBkYXJ0OmNvcmUKICBDbGFzc0VudGl0eSBnZXQgbWFwTGl0ZXJhbENsYXNzOwogIENvbnN0cnVjdG9yRW50aXR5IGdldCBtYXBMaXRlcmFsQ29uc3RydWN0b3I7CiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IG1hcExpdGVyYWxDb25zdHJ1Y3RvckVtcHR5OwogIEZ1bmN0aW9uRW50aXR5IGdldCBtYXBMaXRlcmFsVW50eXBlZE1ha2VyOwogIEZ1bmN0aW9uRW50aXR5IGdldCBtYXBMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXI7CgogIENsYXNzRW50aXR5IGdldCBzZXRMaXRlcmFsQ2xhc3M7CiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IHNldExpdGVyYWxDb25zdHJ1Y3RvcjsKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgc2V0TGl0ZXJhbENvbnN0cnVjdG9yRW1wdHk7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNldExpdGVyYWxVbnR5cGVkTWFrZXI7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNldExpdGVyYWxVbnR5cGVkRW1wdHlNYWtlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IG9iamVjdE5vU3VjaE1ldGhvZDsKCiAgYm9vbCBpc0RlZmF1bHROb1N1Y2hNZXRob2RJbXBsZW1lbnRhdGlvbihGdW5jdGlvbkVudGl0eSBlbGVtZW50KTsKCiAgLy8gRnJvbSBkYXJ0OmFzeW5jCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGFzeW5jSGVscGVyU3RhcnRTeW5jOwogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3luY0hlbHBlckF3YWl0OwogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3luY0hlbHBlclJldHVybjsKICBGdW5jdGlvbkVudGl0eSBnZXQgYXN5bmNIZWxwZXJSZXRocm93OwoKICBGdW5jdGlvbkVudGl0eSBnZXQgd3JhcEJvZHk7CgogIEZ1bmN0aW9uRW50aXR5IGdldCB5aWVsZFN0YXI7CgogIEZ1bmN0aW9uRW50aXR5IGdldCB5aWVsZFNpbmdsZTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHN5bmNTdGFyVW5jYXVnaHRFcnJvcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGFzeW5jU3RhckhlbHBlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHN0cmVhbU9mQ29udHJvbGxlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGVuZE9mSXRlcmF0aW9uOwoKICBDbGFzc0VudGl0eSBnZXQgc3luY1N0YXJJdGVyYWJsZTsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGZ1dHVyZUltcGxlbWVudGF0aW9uOwoKICBDbGFzc0VudGl0eSBnZXQgY29udHJvbGxlclN0cmVhbTsKCiAgQ2xhc3NFbnRpdHkgZ2V0IHN0cmVhbUl0ZXJhdG9yOwoKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgc3RyZWFtSXRlcmF0b3JDb25zdHJ1Y3RvcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHN5bmNTdGFySXRlcmFibGVGYWN0b3J5OwoKICBGdW5jdGlvbkVudGl0eSBnZXQgYXN5bmNBd2FpdENvbXBsZXRlckZhY3Rvcnk7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3luY1N0YXJTdHJlYW1Db250cm9sbGVyRmFjdG9yeTsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzSW50ZXJjZXB0b3JDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzU3RyaW5nQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc0FycmF5Q2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc051bWJlckNsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQganNJbnRDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzRG91YmxlQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc051bGxDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzQm9vbENsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQganNQbGFpbkphdmFTY3JpcHRPYmplY3RDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzVW5rbm93bkphdmFTY3JpcHRPYmplY3RDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzSmF2YVNjcmlwdEZ1bmN0aW9uQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc0phdmFTY3JpcHRPYmplY3RDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzSW5kZXhhYmxlQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc011dGFibGVJbmRleGFibGVDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzTXV0YWJsZUFycmF5Q2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc0ZpeGVkQXJyYXlDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzRXh0ZW5kYWJsZUFycmF5Q2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc1VubW9kaWZpYWJsZUFycmF5Q2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc1Bvc2l0aXZlSW50Q2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc1VJbnQzMkNsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQganNVSW50MzFDbGFzczsKCiAgLy8vIFJldHVybnMgYHRydWVgIG1lbWJlciBpcyB0aGUgJ2ZpbmRJbmRleEZvck5hdGl2ZVN1YmNsYXNzVHlwZScgbWV0aG9kCiAgLy8vIGRlY2xhcmVkIGluIGBkYXJ0Ol9pbnRlcmNlcHRvcnNgLgogIGJvb2wgaXNGaW5kSW5kZXhGb3JOYXRpdmVTdWJjbGFzc1R5cGUoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBnZXROYXRpdmVJbnRlcmNlcHRvck1ldGhvZDsKCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IGpzQXJyYXlUeXBlZENvbnN0cnVjdG9yOwoKICAvLyBGcm9tIGRhcnQ6X2pzX2hlbHBlcgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRoZSBuZWVkIGZvciB0aGlzIChmcm9tIFtDaGVja2VkTW9kZUhlbHBlcl0pLgogIEZ1bmN0aW9uRW50aXR5IGZpbmRIZWxwZXJGdW5jdGlvbihTdHJpbmcgbmFtZSk7CgogIENsYXNzRW50aXR5IGdldCBjbG9zdXJlQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBib3VuZENsb3N1cmVDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IHR5cGVMaXRlcmFsQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBjb25zdE1hcExpdGVyYWxDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGNvbnN0U2V0TGl0ZXJhbENsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQgdHlwZVZhcmlhYmxlQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBqc0ludm9jYXRpb25NaXJyb3JDbGFzczsKCiAgTWVtYmVyRW50aXR5IGdldCBpbnZvY2F0aW9uVHlwZUFyZ3VtZW50R2V0dGVyOwoKICAvLy8gSW50ZXJmYWNlIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGFuIG9iamVjdCBoYXMgdGhlIEphdmFTY3JpcHQKICAvLy8gaW5kZXhpbmcgYmVoYXZpb3IuIFRoZSBpbnRlcmZhY2UgaXMgb25seSB2aXNpYmxlIHRvIHNwZWNpZmljIGxpYnJhcmllcy4KICBDbGFzc0VudGl0eSBnZXQganNJbmRleGluZ0JlaGF2aW9ySW50ZXJmYWNlOwoKICBDbGFzc0VudGl0eSBnZXQgc3RhY2tUcmFjZUhlbHBlckNsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQgY29uc3RhbnRNYXBDbGFzczsKICBDbGFzc0VudGl0eSBnZXQgY29uc3RhbnRTdHJpbmdNYXBDbGFzczsKICBDbGFzc0VudGl0eSBnZXQgY29uc3RhbnRQcm90b01hcENsYXNzOwogIENsYXNzRW50aXR5IGdldCBnZW5lcmFsQ29uc3RhbnRNYXBDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IGFubm90YXRpb25DcmVhdGVzQ2xhc3M7CgogIENsYXNzRW50aXR5IGdldCBhbm5vdGF0aW9uUmV0dXJuc0NsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQgYW5ub3RhdGlvbkpTTmFtZUNsYXNzOwoKICAvLy8gVGhlIGNsYXNzIGZvciBuYXRpdmUgYW5ub3RhdGlvbnMgZGVmaW5lZCBpbiBkYXJ0Ol9qc19oZWxwZXIuCiAgQ2xhc3NFbnRpdHkgZ2V0IG5hdGl2ZUFubm90YXRpb25DbGFzczsKCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IHR5cGVWYXJpYWJsZUNvbnN0cnVjdG9yOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgYXNzZXJ0VGVzdDsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGFzc2VydFRocm93OwoKICBGdW5jdGlvbkVudGl0eSBnZXQgYXNzZXJ0SGVscGVyOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgYXNzZXJ0VW5yZWFjaGFibGVNZXRob2Q7CgogIC8vLyBIb2xkcyB0aGUgbWV0aG9kICJnZXRJc29sYXRlQWZmaW5pdHlUYWciIHdoZW4gZGFydDpfanNfaGVscGVyIGhhcyBiZWVuCiAgLy8vIGxvYWRlZC4KICBGdW5jdGlvbkVudGl0eSBnZXQgZ2V0SXNvbGF0ZUFmZmluaXR5VGFnTWFya2VyOwoKICAvLy8gSG9sZHMgdGhlIG1ldGhvZCAicmVxdWlyZXNQcmVhbWJsZSIgaW4gX2pzX2hlbHBlci4KICBGdW5jdGlvbkVudGl0eSBnZXQgcmVxdWlyZXNQcmVhbWJsZU1hcmtlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGxvYWRMaWJyYXJ5V3JhcHBlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGxvYWREZWZlcnJlZExpYnJhcnk7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBib29sQ29udmVyc2lvbkNoZWNrOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgdHJhY2VIZWxwZXI7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBjbG9zdXJlRnJvbVRlYXJPZmY7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBpc0pzSW5kZXhhYmxlOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgdGhyb3dJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb247CgogIEZ1bmN0aW9uRW50aXR5IGdldCB0aHJvd0luZGV4T3V0T2ZSYW5nZUV4Y2VwdGlvbjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGV4Y2VwdGlvblVud3JhcHBlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHRocm93UnVudGltZUVycm9yOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgdGhyb3dVbnN1cHBvcnRlZEVycm9yOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgdGhyb3dUeXBlRXJyb3I7CgogIEZ1bmN0aW9uRW50aXR5IGdldCB0aHJvd0Fic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3I7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBjaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHRocm93Q29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgc3RyaW5nSW50ZXJwb2xhdGlvbkhlbHBlcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHdyYXBFeGNlcHRpb25IZWxwZXI7CgogIEZ1bmN0aW9uRW50aXR5IGdldCB0aHJvd0V4cHJlc3Npb25IZWxwZXI7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBjbG9zdXJlQ29udmVydGVyOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgdHJhY2VGcm9tRXhjZXB0aW9uOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgc2V0UnVudGltZVR5cGVJbmZvOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgZ2V0UnVudGltZVR5cGVJbmZvOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgZ2V0VHlwZUFyZ3VtZW50QnlJbmRleDsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNvbXB1dGVTaWduYXR1cmU7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBnZXRSdW50aW1lVHlwZUFyZ3VtZW50czsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdldFJ1bnRpbWVUeXBlQXJndW1lbnQ7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBnZXRSdW50aW1lVHlwZUFyZ3VtZW50SW50ZXJjZXB0ZWQ7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3NlcnRJc1N1YnR5cGU7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBjaGVja1N1YnR5cGU7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBhc3NlcnRTdWJ0eXBlOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgc3VidHlwZUNhc3Q7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBmdW5jdGlvblR5cGVUZXN0OwoKICBGdW5jdGlvbkVudGl0eSBnZXQgZnV0dXJlT3JUZXN0OwoKICBGdW5jdGlvbkVudGl0eSBnZXQgY2hlY2tTdWJ0eXBlT2ZSdW50aW1lVHlwZTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGFzc2VydFN1YnR5cGVPZlJ1bnRpbWVUeXBlOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgc3VidHlwZU9mUnVudGltZVR5cGVDYXN0OwoKICBGdW5jdGlvbkVudGl0eSBnZXQgY2hlY2tEZWZlcnJlZElzTG9hZGVkOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgdGhyb3dOb1N1Y2hNZXRob2Q7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBjcmVhdGVSdW50aW1lVHlwZTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGZhbGxUaHJvdWdoRXJyb3I7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBjcmVhdGVJbnZvY2F0aW9uTWlycm9yOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgY3JlYXRlVW5tYW5nbGVkSW52b2NhdGlvbk1pcnJvcjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGN5Y2xpY1Rocm93SGVscGVyOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgZGVmaW5lUHJvcGVydHk7CgogIGJvb2wgaXNFeHRyYWN0VHlwZUFyZ3VtZW50cyhGdW5jdGlvbkVudGl0eSBtZW1iZXIpOwoKICBDbGFzc0VudGl0eSBnZXRJbnN0YW50aWF0aW9uQ2xhc3MoaW50IHR5cGVBcmd1bWVudENvdW50KTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0SW5zdGFudGlhdGVGdW5jdGlvbihpbnQgdHlwZUFyZ3VtZW50Q291bnQpOwoKICBGdW5jdGlvbkVudGl0eSBnZXQgaW5zdGFudGlhdGVkR2VuZXJpY0Z1bmN0aW9uVHlwZTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGV4dHJhY3RGdW5jdGlvblR5cGVPYmplY3RGcm9tSW50ZXJuYWw7CgogIC8vIEZyb20gZGFydDpfcnRpCgogIEZ1bmN0aW9uRW50aXR5IGdldCBmaW5kVHlwZTsKICBGdW5jdGlvbkVudGl0eSBnZXQgaW5zdGFuY2VUeXBlOwogIEZ1bmN0aW9uRW50aXR5IGdldCB0eXBlTGl0ZXJhbE1ha2VyOwogIEZ1bmN0aW9uRW50aXR5IGdldCBjaGVja1R5cGVCb3VuZDsKICBGaWVsZEVudGl0eSBnZXQgcnRpQXNGaWVsZDsKICBGaWVsZEVudGl0eSBnZXQgcnRpQ2hlY2tGaWVsZDsKICBGaWVsZEVudGl0eSBnZXQgcnRpSXNGaWVsZDsKICBGdW5jdGlvbkVudGl0eSBnZXQgcnRpRXZhbE1ldGhvZDsKICBGdW5jdGlvbkVudGl0eSBnZXQgcnRpQmluZE1ldGhvZDsKICBGdW5jdGlvbkVudGl0eSBnZXQgcnRpQWRkUnVsZXNNZXRob2Q7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBnZW5lcmFsSXNUZXN0SW1wbGVtZW50YXRpb247CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdlbmVyYWxBc0NoZWNrSW1wbGVtZW50YXRpb247CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdlbmVyYWxUeXBlQ2hlY2tJbXBsZW1lbnRhdGlvbjsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkSXNCb29sOwogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZEFzQm9vbE51bGxhYmxlOwogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZENoZWNrQm9vbE51bGxhYmxlOwogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZEFzRG91YmxlTnVsbGFibGU7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQ2hlY2tEb3VibGVOdWxsYWJsZTsKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRJc0ludDsKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRBc0ludE51bGxhYmxlOwogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZENoZWNrSW50TnVsbGFibGU7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkSXNOdW07CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQXNOdW1OdWxsYWJsZTsKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRDaGVja051bU51bGxhYmxlOwogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZElzU3RyaW5nOwogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZEFzU3RyaW5nTnVsbGFibGU7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQ2hlY2tTdHJpbmdOdWxsYWJsZTsKCiAgLy8gRnJvbSBkYXJ0Ol9pbnRlcm5hbAoKICBDbGFzc0VudGl0eSBnZXQgc3ltYm9sSW1wbGVtZW50YXRpb25DbGFzczsKCiAgLy8vIFVzZWQgdG8gYW5ub3RhdGUgaXRlbXMgdGhhdCBoYXZlIHRoZSBrZXl3b3JkICJuYXRpdmUiLgogIENsYXNzRW50aXR5IGdldCBleHRlcm5hbE5hbWVDbGFzczsKCiAgSW50ZXJmYWNlVHlwZSBnZXQgZXh0ZXJuYWxOYW1lVHlwZTsKCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IHN5bWJvbFZhbGlkYXRlZENvbnN0cnVjdG9yOwoKICAvLyBGcm9tIGRhcnQ6X2pzX2VtYmVkZGVkX25hbWVzCgogIC8vLyBIb2xkcyB0aGUgY2xhc3MgZm9yIHRoZSBbSnNHZXROYW1lXSBlbnVtLgogIENsYXNzRW50aXR5IGdldCBqc0dldE5hbWVFbnVtOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW21lbWJlcl0gaXMgYSAiZm9yZWlnbiBoZWxwZXIiLCB0aGF0IGlzLCBhIG1lbWJlciB3aG9zZQogIC8vLyBzZW1hbnRpY3MgaXMgZGVmaW5lZCBzeW50aGV0aWNhbGx5IGFuZCBub3QgdGhyb3VnaCBEYXJ0IGNvZGUuCiAgLy8vCiAgLy8vIE1vc3QgZm9yZWlnbiBoZWxwZXJzIGFyZSBsb2NhdGVkIGluIHRoZSBgZGFydDpfZm9yZWlnbl9oZWxwZXJgIGxpYnJhcnkuCiAgYm9vbCBpc0ZvcmVpZ25IZWxwZXIoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIENsYXNzRW50aXR5IGdldERlZmF1bHRTdXBlcmNsYXNzKAogICAgICBDbGFzc0VudGl0eSBjbHMsIE5hdGl2ZUJhc2ljRGF0YSBuYXRpdmVCYXNpY0RhdGEpOwp9CgphYnN0cmFjdCBjbGFzcyBLQ29tbW9uRWxlbWVudHMgaW1wbGVtZW50cyBDb21tb25FbGVtZW50cyB7CiAgLy8gRnJvbSBwYWNrYWdlOmpzCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzQW5ub3RhdGlvbkNsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQganNBbm9ueW1vdXNDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IHByYWdtYUNsYXNzOwogIEZpZWxkRW50aXR5IGdldCBwcmFnbWFDbGFzc05hbWVGaWVsZDsKICBGaWVsZEVudGl0eSBnZXQgcHJhZ21hQ2xhc3NPcHRpb25zRmllbGQ7CgogIGJvb2wgaXNDcmVhdGVJbnZvY2F0aW9uTWlycm9ySGVscGVyKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICBib29sIGlzU3ltYm9sVmFsaWRhdGVkQ29uc3RydWN0b3IoQ29uc3RydWN0b3JFbnRpdHkgZWxlbWVudCk7CgogIENsYXNzRW50aXR5IGdldCBtZXRhTm9JbmxpbmVDbGFzczsKCiAgQ2xhc3NFbnRpdHkgZ2V0IG1ldGFUcnlJbmxpbmVDbGFzczsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtmdW5jdGlvbl0gaXMgYWxsb3dlZCB0byBiZSBleHRlcm5hbC4KICAvLy8KICAvLy8gVGhpcyByZXR1cm5zIGB0cnVlYCBmb3IgZm9yZWlnbiBoZWxwZXJzLCBmcm9tIGVudmlyb25tZW50IGNvbnN0cnVjdG9ycyBhbmQKICAvLy8gbWVtYmVycyBvZiBsaWJyYXJpZXMgdGhhdCBzdXBwb3J0IG5hdGl2ZS4KICAvLy8KICAvLy8gVGhpcyByZXR1cm5zIGBmYWxzZWAgZm9yIEpTIGludGVyb3AgbWVtYmVycyB3aGljaCB0aGVyZWZvcmUgbXVzdCBiZQogIC8vLyBhbGxvd2VkIHRvIGJlIGV4dGVybmFsIHRocm91Z2ggdGhlIEpTIGludGVyb3AgYW5ub3RhdGlvbiBoYW5kbGluZy4KICBib29sIGlzRXh0ZXJuYWxBbGxvd2VkKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKTsKfQoKYWJzdHJhY3QgY2xhc3MgSkNvbW1vbkVsZW1lbnRzIGltcGxlbWVudHMgQ29tbW9uRWxlbWVudHMgewogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaXMgdGhlIHVubmFtZWQgY29uc3RydWN0b3Igb2YgYExpc3RgLgogIC8vLwogIC8vLyBUaGlzIHdpbGwgbm90IHJlc29sdmUgdGhlIGNvbnN0cnVjdG9yIGlmIGl0IGhhc24ndCBiZWVuIHNlZW4geWV0IGR1cmluZwogIC8vLyBjb21waWxhdGlvbi4KICBib29sIGlzVW5uYW1lZExpc3RDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBpcyB0aGUgJ2ZpbGxlZCcgY29uc3RydWN0b3Igb2YgYExpc3RgLgogIC8vLwogIC8vLyBUaGlzIHdpbGwgbm90IHJlc29sdmUgdGhlIGNvbnN0cnVjdG9yIGlmIGl0IGhhc24ndCBiZWVuIHNlZW4geWV0IGR1cmluZwogIC8vLyBjb21waWxhdGlvbi4KICBib29sIGlzRmlsbGVkTGlzdENvbnN0cnVjdG9yKENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQpOwoKICBib29sIGlzRGVmYXVsdEVxdWFsaXR5SW1wbGVtZW50YXRpb24oTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3NlbGVjdG9yXSBhcHBsaWVzIHRvIGBKU0luZGV4YWJsZS5sZW5ndGhgLgogIGJvb2wgYXBwbGllc1RvSnNJbmRleGFibGVMZW5ndGgoU2VsZWN0b3Igc2VsZWN0b3IpOwoKICBGdW5jdGlvbkVudGl0eSBnZXQganNBcnJheVJlbW92ZUxhc3Q7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBqc0FycmF5QWRkOwoKICBib29sIGlzSnNTdHJpbmdTcGxpdChNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtzZWxlY3Rvcl0gYXBwbGllcyB0byBgSlNTdHJpbmcuc3BsaXRgIG9uIFtyZWNlaXZlcl0KICAvLy8gaW4gdGhlIGdpdmVuIFt3b3JsZF0uCiAgLy8vCiAgLy8vIFJldHVybnMgYGZhbHNlYCBpZiBgSlNTdHJpbmcuc3BsaXRgIGlzIG5vdCBhdmFpbGFibGUuCiAgYm9vbCBhcHBsaWVzVG9Kc1N0cmluZ1NwbGl0KFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyLAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pOwoKICBGdW5jdGlvbkVudGl0eSBnZXQganNTdHJpbmdTcGxpdDsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGpzU3RyaW5nVG9TdHJpbmc7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBqc1N0cmluZ09wZXJhdG9yQWRkOwoKICBDbGFzc0VudGl0eSBnZXQganNDb25zdENsYXNzOwoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiBbbWVtYmVyXSBpcyB0aGUgJ2NoZWNrSW50JyBmdW5jdGlvbiBkZWZpbmVkIGluCiAgLy8vIGRhcnQ6X2pzX2hlbHBlcnMuCiAgYm9vbCBpc0NoZWNrSW50KE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiBbbWVtYmVyXSBpcyB0aGUgJ2NoZWNrTnVtJyBmdW5jdGlvbiBkZWZpbmVkIGluCiAgLy8vIGRhcnQ6X2pzX2hlbHBlcnMuCiAgYm9vbCBpc0NoZWNrTnVtKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJuIGB0cnVlYCBpZiBbbWVtYmVyXSBpcyB0aGUgJ2NoZWNrU3RyaW5nJyBmdW5jdGlvbiBkZWZpbmVkIGluCiAgLy8vIGRhcnQ6X2pzX2hlbHBlcnMuCiAgYm9vbCBpc0NoZWNrU3RyaW5nKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICBib29sIGlzSW5zdGFudGlhdGlvbkNsYXNzKENsYXNzRW50aXR5IGNscyk7CgogIC8vIEZyb20gZGFydDpfbmF0aXZlX3R5cGVkX2RhdGEKCiAgQ2xhc3NFbnRpdHkgZ2V0IHR5cGVkQXJyYXlPZkludENsYXNzOwoKICBDbGFzc0VudGl0eSBnZXQgdHlwZWRBcnJheU9mRG91YmxlQ2xhc3M7CgogIC8vLyBIb2xkcyB0aGUgY2xhc3MgZm9yIHRoZSBbSnNCdWlsdGluc10gZW51bS4KICBDbGFzc0VudGl0eSBnZXQganNCdWlsdGluRW51bTsKCiAgYm9vbCBpc0ZvcmVpZ24oTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSAnb3BlcmF0b3IgPT0nIFtmdW5jdGlvbl0gaXMKICAvLy8ga25vd24gdG8gaGFuZGxlIGBudWxsYCBhcyBhcmd1bWVudC4KICBib29sIG9wZXJhdG9yRXFIYW5kbGVzTnVsbEFyZ3VtZW50KEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKTsKfQoKY2xhc3MgQ29tbW9uRWxlbWVudHNJbXBsCiAgICBpbXBsZW1lbnRzIENvbW1vbkVsZW1lbnRzLCBLQ29tbW9uRWxlbWVudHMsIEpDb21tb25FbGVtZW50cyB7CiAgZmluYWwgRWxlbWVudEVudmlyb25tZW50IF9lbnY7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwoKICBDb21tb25FbGVtZW50c0ltcGwodGhpcy5fZW52LCB0aGlzLl9vcHRpb25zKTsKCiAgQ2xhc3NFbnRpdHkgX29iamVjdENsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBvYmplY3RDbGFzcyA9PgogICAgICBfb2JqZWN0Q2xhc3MgPz89IF9maW5kQ2xhc3MoY29yZUxpYnJhcnksICdPYmplY3QnKTsKCiAgQ2xhc3NFbnRpdHkgX2Jvb2xDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgYm9vbENsYXNzID0+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/PQogICAgICBfZW52Lmxvb2t1cExpYnJhcnkoVXJpcy5kYXJ0X19pbnRlcm5hbCwgcmVxdWlyZWQ6IHRydWUpOwoKICBDbGFzc0VudGl0eSBfdHlwZWREYXRhQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHR5cGVkRGF0YUNsYXNzID0+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/Pz0gX2ZpbmRDbGFzcyhmb3JlaWduTGlicmFyeSwgJ0pTX0NPTlNUJyk7CgogIC8vIEZyb20gcGFja2FnZTpqcwogIENsYXNzRW50aXR5IF9qc0Fubm90YXRpb25DbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNBbm5vdGF0aW9uQ2xhc3MgewogICAgaWYgKF9qc0Fubm90YXRpb25DbGFzcyA9PSBudWxsKSB7CiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSA9IF9lbnYubG9va3VwTGlicmFyeShVcmlzLnBhY2thZ2VfanMpOwogICAgICBpZiAobGlicmFyeSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgX2pzQW5ub3RhdGlvbkNsYXNzID0gX2ZpbmRDbGFzcyhsaWJyYXJ5LCAnSlMnKTsKICAgIH0KICAgIHJldHVybiBfanNBbm5vdGF0aW9uQ2xhc3M7CiAgfQoKICBDbGFzc0VudGl0eSBfanNBbm9ueW1vdXNDbGFzczsKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQganNBbm9ueW1vdXNDbGFzcyB7CiAgICBpZiAoX2pzQW5vbnltb3VzQ2xhc3MgPT0gbnVsbCkgewogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnkgPSBfZW52Lmxvb2t1cExpYnJhcnkoVXJpcy5wYWNrYWdlX2pzKTsKICAgICAgaWYgKGxpYnJhcnkgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIF9qc0Fub255bW91c0NsYXNzID0gX2ZpbmRDbGFzcyhsaWJyYXJ5LCAnX0Fub255bW91cycpOwogICAgfQogICAgcmV0dXJuIF9qc0Fub255bW91c0NsYXNzOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZmluZEhlbHBlckZ1bmN0aW9uKFN0cmluZyBuYW1lKSA9PiBfZmluZEhlbHBlckZ1bmN0aW9uKG5hbWUpOwoKICBGdW5jdGlvbkVudGl0eSBfZmluZEhlbHBlckZ1bmN0aW9uKFN0cmluZyBuYW1lKSA9PgogICAgICBfZmluZExpYnJhcnlNZW1iZXIoanNIZWxwZXJMaWJyYXJ5LCBuYW1lKTsKCiAgQ2xhc3NFbnRpdHkgX2ZpbmRIZWxwZXJDbGFzcyhTdHJpbmcgbmFtZSkgPT4KICAgICAgX2ZpbmRDbGFzcyhqc0hlbHBlckxpYnJhcnksIG5hbWUpOwoKICBDbGFzc0VudGl0eSBfY2xvc3VyZUNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBjbG9zdXJlQ2xhc3MgPT4gX2Nsb3N1cmVDbGFzcyA/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+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ3Rocm93Tm9TdWNoTWV0aG9kJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBjcmVhdGVSdW50aW1lVHlwZSA9PiBfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpCiAgICAgID8gX2ZpbmRSdGlGdW5jdGlvbignX2NyZWF0ZVJ1bnRpbWVUeXBlJykKICAgICAgOiBfZmluZEhlbHBlckZ1bmN0aW9uKCdjcmVhdGVSdW50aW1lVHlwZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgZmFsbFRocm91Z2hFcnJvciA9PgogICAgICBfZmluZEhlbHBlckZ1bmN0aW9uKCJnZXRGYWxsVGhyb3VnaEVycm9yIik7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBjcmVhdGVJbnZvY2F0aW9uTWlycm9yID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ2NyZWF0ZUludm9jYXRpb25NaXJyb3InKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NyZWF0ZUludm9jYXRpb25NaXJyb3JIZWxwZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIG1lbWJlci5pc1RvcExldmVsICYmCiAgICAgICAgbWVtYmVyLm5hbWUgPT0gJ19jcmVhdGVJbnZvY2F0aW9uTWlycm9yJyAmJgogICAgICAgIG1lbWJlci5saWJyYXJ5ID09IGNvcmVMaWJyYXJ5OwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNyZWF0ZVVubWFuZ2xlZEludm9jYXRpb25NaXJyb3IgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbignY3JlYXRlVW5tYW5nbGVkSW52b2NhdGlvbk1pcnJvcicpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgY3ljbGljVGhyb3dIZWxwZXIgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbigidGhyb3dDeWNsaWNJbml0Iik7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBkZWZpbmVQcm9wZXJ0eSA9PiBfZmluZEhlbHBlckZ1bmN0aW9uKCdkZWZpbmVQcm9wZXJ0eScpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzRXh0cmFjdFR5cGVBcmd1bWVudHMoRnVuY3Rpb25FbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gbWVtYmVyLm5hbWUgPT0gJ2V4dHJhY3RUeXBlQXJndW1lbnRzJyAmJgogICAgICAgIG1lbWJlci5saWJyYXJ5ID09IGludGVybmFsTGlicmFyeTsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcixzcmEpOiBTdXBwb3J0IGFyYml0cmFyeSB0eXBlIGFyZ3VtZW50IGNvdW50LgogIHZvaWQgX2NoZWNrVHlwZUFyZ3VtZW50Q291bnQoaW50IHR5cGVBcmd1bWVudENvdW50KSB7CiAgICBhc3NlcnQodHlwZUFyZ3VtZW50Q291bnQgPiAwKTsKICAgIGlmICh0eXBlQXJndW1lbnRDb3VudCA+IDIwKSB7CiAgICAgIGZhaWxlZEF0KAogICAgICAgICAgTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgIlVuc3VwcG9ydGVkIGluc3RhbnRpYXRpb24gYXJndW1lbnQgY291bnQ6ICIKICAgICAgICAgICIke3R5cGVBcmd1bWVudENvdW50fSIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0SW5zdGFudGlhdGlvbkNsYXNzKGludCB0eXBlQXJndW1lbnRDb3VudCkgewogICAgX2NoZWNrVHlwZUFyZ3VtZW50Q291bnQodHlwZUFyZ3VtZW50Q291bnQpOwogICAgcmV0dXJuIF9maW5kSGVscGVyQ2xhc3MoJ0luc3RhbnRpYXRpb24kdHlwZUFyZ3VtZW50Q291bnQnKTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldEluc3RhbnRpYXRlRnVuY3Rpb24oaW50IHR5cGVBcmd1bWVudENvdW50KSB7CiAgICBfY2hlY2tUeXBlQXJndW1lbnRDb3VudCh0eXBlQXJndW1lbnRDb3VudCk7CiAgICByZXR1cm4gX2ZpbmRIZWxwZXJGdW5jdGlvbignaW5zdGFudGlhdGUkdHlwZUFyZ3VtZW50Q291bnQnKTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBpbnN0YW50aWF0ZWRHZW5lcmljRnVuY3Rpb25UeXBlID0+CiAgICAgIF9maW5kSGVscGVyRnVuY3Rpb24oJ2luc3RhbnRpYXRlZEdlbmVyaWNGdW5jdGlvblR5cGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGV4dHJhY3RGdW5jdGlvblR5cGVPYmplY3RGcm9tSW50ZXJuYWwgPT4KICAgICAgX2ZpbmRIZWxwZXJGdW5jdGlvbignZXh0cmFjdEZ1bmN0aW9uVHlwZU9iamVjdEZyb21JbnRlcm5hbCcpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSW5zdGFudGlhdGlvbkNsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGNscy5saWJyYXJ5ID09IF9qc0hlbHBlckxpYnJhcnkgJiYKICAgICAgICBjbHMubmFtZSAhPSAnSW5zdGFudGlhdGlvbicgJiYKICAgICAgICBjbHMubmFtZS5zdGFydHNXaXRoKCdJbnN0YW50aWF0aW9uJyk7CiAgfQoKICAvLyBGcm9tIGRhcnQ6X3J0aQoKICBDbGFzc0VudGl0eSBfZmluZFJ0aUNsYXNzKFN0cmluZyBuYW1lKSA9PiBfZmluZENsYXNzKHJ0aUxpYnJhcnksIG5hbWUpOwoKICBGdW5jdGlvbkVudGl0eSBfZmluZFJ0aUZ1bmN0aW9uKFN0cmluZyBuYW1lKSA9PgogICAgICBfZmluZExpYnJhcnlNZW1iZXIocnRpTGlicmFyeSwgbmFtZSk7CgogIEZ1bmN0aW9uRW50aXR5IF9maW5kVHlwZTsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgZmluZFR5cGUgPT4gX2ZpbmRUeXBlID8/PSBfZmluZFJ0aUZ1bmN0aW9uKCdmaW5kVHlwZScpOwoKICBGdW5jdGlvbkVudGl0eSBfaW5zdGFuY2VUeXBlOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBpbnN0YW5jZVR5cGUgPT4KICAgICAgX2luc3RhbmNlVHlwZSA/Pz0gX2ZpbmRSdGlGdW5jdGlvbignaW5zdGFuY2VUeXBlJyk7CgogIEZ1bmN0aW9uRW50aXR5IF90eXBlTGl0ZXJhbE1ha2VyOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCB0eXBlTGl0ZXJhbE1ha2VyID0+CiAgICAgIF90eXBlTGl0ZXJhbE1ha2VyID8/PSBfZmluZFJ0aUZ1bmN0aW9uKCd0eXBlTGl0ZXJhbCcpOwoKICBGdW5jdGlvbkVudGl0eSBfY2hlY2tUeXBlQm91bmQ7CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNoZWNrVHlwZUJvdW5kID0+CiAgICAgIF9jaGVja1R5cGVCb3VuZCA/Pz0gX2ZpbmRSdGlGdW5jdGlvbignY2hlY2tUeXBlQm91bmQnKTsKCiAgQ2xhc3NFbnRpdHkgZ2V0IF9ydGlJbXBsQ2xhc3MgPT4gX2ZpbmRDbGFzcyhydGlMaWJyYXJ5LCAnUnRpJyk7CiAgQ2xhc3NFbnRpdHkgZ2V0IF9ydGlVbml2ZXJzZUNsYXNzID0+IF9maW5kQ2xhc3MocnRpTGlicmFyeSwgJ19Vbml2ZXJzZScpOwogIEZpZWxkRW50aXR5IF9maW5kUnRpQ2xhc3NGaWVsZChTdHJpbmcgbmFtZSkgPT4KICAgICAgX2ZpbmRDbGFzc01lbWJlcihfcnRpSW1wbENsYXNzLCBuYW1lKTsKCiAgRmllbGRFbnRpdHkgX3J0aUFzRmllbGQ7CiAgQG92ZXJyaWRlCiAgRmllbGRFbnRpdHkgZ2V0IHJ0aUFzRmllbGQgPT4gX3J0aUFzRmllbGQgPz89IF9maW5kUnRpQ2xhc3NGaWVsZCgnX2FzJyk7CgogIEZpZWxkRW50aXR5IF9ydGlJc0ZpZWxkOwogIEBvdmVycmlkZQogIEZpZWxkRW50aXR5IGdldCBydGlJc0ZpZWxkID0+IF9ydGlJc0ZpZWxkID8/PSBfZmluZFJ0aUNsYXNzRmllbGQoJ19pcycpOwoKICBGaWVsZEVudGl0eSBfcnRpQ2hlY2tGaWVsZDsKICBAb3ZlcnJpZGUKICBGaWVsZEVudGl0eSBnZXQgcnRpQ2hlY2tGaWVsZCA9PgogICAgICBfcnRpQ2hlY2tGaWVsZCA/Pz0gX2ZpbmRSdGlDbGFzc0ZpZWxkKCdfY2hlY2snKTsKCiAgRnVuY3Rpb25FbnRpdHkgX3J0aUV2YWxNZXRob2Q7CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHJ0aUV2YWxNZXRob2QgPT4KICAgICAgX3J0aUV2YWxNZXRob2QgPz89IF9maW5kQ2xhc3NNZW1iZXIoX3J0aUltcGxDbGFzcywgJ19ldmFsJyk7CgogIEZ1bmN0aW9uRW50aXR5IF9ydGlCaW5kTWV0aG9kOwogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBydGlCaW5kTWV0aG9kID0+CiAgICAgIF9ydGlCaW5kTWV0aG9kID8/PSBfZmluZENsYXNzTWVtYmVyKF9ydGlJbXBsQ2xhc3MsICdfYmluZCcpOwoKICBGdW5jdGlvbkVudGl0eSBfcnRpQWRkUnVsZXNNZXRob2Q7CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHJ0aUFkZFJ1bGVzTWV0aG9kID0+CiAgICAgIF9ydGlBZGRSdWxlc01ldGhvZCA/Pz0gX2ZpbmRDbGFzc01lbWJlcihfcnRpVW5pdmVyc2VDbGFzcywgJ2FkZFJ1bGVzJyk7CgogIEZ1bmN0aW9uRW50aXR5IF9nZW5lcmFsSXNUZXN0SW1wbGVtZW50YXRpb247CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdlbmVyYWxJc1Rlc3RJbXBsZW1lbnRhdGlvbiA9PgogICAgICBfZ2VuZXJhbElzVGVzdEltcGxlbWVudGF0aW9uID8/PQogICAgICAgICAgX2ZpbmRSdGlGdW5jdGlvbignX2dlbmVyYWxJc1Rlc3RJbXBsZW1lbnRhdGlvbicpOwoKICBGdW5jdGlvbkVudGl0eSBfZ2VuZXJhbEFzQ2hlY2tJbXBsZW1lbnRhdGlvbjsKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgZ2VuZXJhbEFzQ2hlY2tJbXBsZW1lbnRhdGlvbiA9PgogICAgICBfZ2VuZXJhbEFzQ2hlY2tJbXBsZW1lbnRhdGlvbiA/Pz0KICAgICAgICAgIF9maW5kUnRpRnVuY3Rpb24oJ19nZW5lcmFsQXNDaGVja0ltcGxlbWVudGF0aW9uJyk7CgogIEZ1bmN0aW9uRW50aXR5IF9nZW5lcmFsVHlwZUNoZWNrSW1wbGVtZW50YXRpb247CiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGdlbmVyYWxUeXBlQ2hlY2tJbXBsZW1lbnRhdGlvbiA9PgogICAgICBfZ2VuZXJhbFR5cGVDaGVja0ltcGxlbWVudGF0aW9uID8/PQogICAgICAgICAgX2ZpbmRSdGlGdW5jdGlvbignX2dlbmVyYWxUeXBlQ2hlY2tJbXBsZW1lbnRhdGlvbicpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRJc0Jvb2wgPT4gX2ZpbmRSdGlGdW5jdGlvbignX2lzQm9vbCcpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRBc0Jvb2xOdWxsYWJsZSA9PgogICAgICBfZmluZFJ0aUZ1bmN0aW9uKCdfYXNCb29sTnVsbGFibGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQ2hlY2tCb29sTnVsbGFibGUgPT4KICAgICAgX2ZpbmRSdGlGdW5jdGlvbignX2NoZWNrQm9vbE51bGxhYmxlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZEFzRG91YmxlTnVsbGFibGUgPT4KICAgICAgX2ZpbmRSdGlGdW5jdGlvbignX2FzRG91YmxlTnVsbGFibGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQ2hlY2tEb3VibGVOdWxsYWJsZSA9PgogICAgICBfZmluZFJ0aUZ1bmN0aW9uKCdfY2hlY2tEb3VibGVOdWxsYWJsZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRJc0ludCA9PiBfZmluZFJ0aUZ1bmN0aW9uKCdfaXNJbnQnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQXNJbnROdWxsYWJsZSA9PgogICAgICBfZmluZFJ0aUZ1bmN0aW9uKCdfYXNJbnROdWxsYWJsZScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRDaGVja0ludE51bGxhYmxlID0+CiAgICAgIF9maW5kUnRpRnVuY3Rpb24oJ19jaGVja0ludE51bGxhYmxlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZElzTnVtID0+IF9maW5kUnRpRnVuY3Rpb24oJ19pc051bScpOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBnZXQgc3BlY2lhbGl6ZWRBc051bU51bGxhYmxlID0+CiAgICAgIF9maW5kUnRpRnVuY3Rpb24oJ19hc051bU51bGxhYmxlJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZENoZWNrTnVtTnVsbGFibGUgPT4KICAgICAgX2ZpbmRSdGlGdW5jdGlvbignX2NoZWNrTnVtTnVsbGFibGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkSXNTdHJpbmcgPT4gX2ZpbmRSdGlGdW5jdGlvbignX2lzU3RyaW5nJyk7CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldCBzcGVjaWFsaXplZEFzU3RyaW5nTnVsbGFibGUgPT4KICAgICAgX2ZpbmRSdGlGdW5jdGlvbignX2FzU3RyaW5nTnVsbGFibGUnKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNwZWNpYWxpemVkQ2hlY2tTdHJpbmdOdWxsYWJsZSA9PgogICAgICBfZmluZFJ0aUZ1bmN0aW9uKCdfY2hlY2tTdHJpbmdOdWxsYWJsZScpOwoKICAvLyBGcm9tIGRhcnQ6X2ludGVybmFsCgogIENsYXNzRW50aXR5IF9zeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzOwogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBzeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzID0+CiAgICAgIF9zeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzID8/PSBfZmluZENsYXNzKGludGVybmFsTGlicmFyeSwgJ1N5bWJvbCcpOwoKICBDbGFzc0VudGl0eSBfZXh0ZXJuYWxOYW1lQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGV4dGVybmFsTmFtZUNsYXNzID0+CiAgICAgIF9leHRlcm5hbE5hbWVDbGFzcyA/Pz0gX2ZpbmRDbGFzcyhpbnRlcm5hbExpYnJhcnksICdFeHRlcm5hbE5hbWUnKTsKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCBleHRlcm5hbE5hbWVUeXBlID0+IF9nZXRSYXdUeXBlKGV4dGVybmFsTmFtZUNsYXNzKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IHN5bWJvbFZhbGlkYXRlZENvbnN0cnVjdG9yID0+CiAgICAgIF9zeW1ib2xWYWxpZGF0ZWRDb25zdHJ1Y3RvciA/Pz0KICAgICAgICAgIF9maW5kQ29uc3RydWN0b3Ioc3ltYm9sSW1wbGVtZW50YXRpb25DbGFzcywgJ3ZhbGlkYXRlZCcpOwoKICAvLy8gUmV0dXJucyB0aGUgZmllbGQgdGhhdCBob2xkcyB0aGUgaW50ZXJuYWwgbmFtZSBpbiB0aGUgaW1wbGVtZW50YXRpb24gY2xhc3MKICAvLy8gZm9yIGBTeW1ib2xgLgogIEZpZWxkRW50aXR5IF9zeW1ib2xJbXBsZW1lbnRhdGlvbkZpZWxkOwogIEZpZWxkRW50aXR5IGdldCBzeW1ib2xJbXBsZW1lbnRhdGlvbkZpZWxkID0+IF9zeW1ib2xJbXBsZW1lbnRhdGlvbkZpZWxkID8/PQogICAgICBfZW52Lmxvb2t1cExvY2FsQ2xhc3NNZW1iZXIoc3ltYm9sSW1wbGVtZW50YXRpb25DbGFzcywgJ19uYW1lJywKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlKTsKCiAgQ29uc3RydWN0b3JFbnRpdHkgX3N5bWJvbFZhbGlkYXRlZENvbnN0cnVjdG9yOwogIEBvdmVycmlkZQogIGJvb2wgaXNTeW1ib2xWYWxpZGF0ZWRDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoX3N5bWJvbFZhbGlkYXRlZENvbnN0cnVjdG9yICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQgPT0gX3N5bWJvbFZhbGlkYXRlZENvbnN0cnVjdG9yOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gRnJvbSBkYXJ0Ol9uYXRpdmVfdHlwZWRfZGF0YQoKICBDbGFzc0VudGl0eSBfdHlwZWRBcnJheU9mSW50Q2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHR5cGVkQXJyYXlPZkludENsYXNzID0+IF90eXBlZEFycmF5T2ZJbnRDbGFzcyA/Pz0gX2ZpbmRDbGFzcygKICAgICAgX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMuZGFydF9fbmF0aXZlX3R5cGVkX2RhdGEsIHJlcXVpcmVkOiB0cnVlKSwKICAgICAgJ05hdGl2ZVR5cGVkQXJyYXlPZkludCcpOwoKICBDbGFzc0VudGl0eSBfdHlwZWRBcnJheU9mRG91YmxlQ2xhc3M7CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IHR5cGVkQXJyYXlPZkRvdWJsZUNsYXNzID0+CiAgICAgIF90eXBlZEFycmF5T2ZEb3VibGVDbGFzcyA/Pz0gX2ZpbmRDbGFzcygKICAgICAgICAgIF9lbnYubG9va3VwTGlicmFyeShVcmlzLmRhcnRfX25hdGl2ZV90eXBlZF9kYXRhLCByZXF1aXJlZDogdHJ1ZSksCiAgICAgICAgICAnTmF0aXZlVHlwZWRBcnJheU9mRG91YmxlJyk7CgogIC8vIEZyb20gZGFydDpfanNfZW1iZWRkZWRfbmFtZXMKCiAgQ2xhc3NFbnRpdHkgX2pzR2V0TmFtZUVudW07CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzR2V0TmFtZUVudW0gPT4gX2pzR2V0TmFtZUVudW0gPz89IF9maW5kQ2xhc3MoCiAgICAgIF9lbnYubG9va3VwTGlicmFyeShVcmlzLmRhcnRfX2pzX2VtYmVkZGVkX25hbWVzLCByZXF1aXJlZDogdHJ1ZSksCiAgICAgICdKc0dldE5hbWUnKTsKCiAgQ2xhc3NFbnRpdHkgX2pzQnVpbHRpbkVudW07CiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGpzQnVpbHRpbkVudW0gPT4gX2pzQnVpbHRpbkVudW0gPz89IF9maW5kQ2xhc3MoCiAgICAgIF9lbnYubG9va3VwTGlicmFyeShVcmlzLmRhcnRfX2pzX2VtYmVkZGVkX25hbWVzLCByZXF1aXJlZDogdHJ1ZSksCiAgICAgICdKc0J1aWx0aW4nKTsKCiAgYm9vbCBfbWV0YUFubm90YXRpb25DaGVja2VkID0gZmFsc2U7CiAgQ2xhc3NFbnRpdHkgX21ldGFOb0lubGluZUNsYXNzOwogIENsYXNzRW50aXR5IF9tZXRhVHJ5SW5saW5lQ2xhc3M7CgogIHZvaWQgX2Vuc3VyZU1ldGFBbm5vdGF0aW9ucygpIHsKICAgIGlmICghX21ldGFBbm5vdGF0aW9uQ2hlY2tlZCkgewogICAgICBfbWV0YUFubm90YXRpb25DaGVja2VkID0gdHJ1ZTsKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5ID0gX2Vudi5sb29rdXBMaWJyYXJ5KFVyaXMucGFja2FnZV9tZXRhX2RhcnQyanMpOwogICAgICBpZiAobGlicmFyeSAhPSBudWxsKSB7CiAgICAgICAgX21ldGFOb0lubGluZUNsYXNzID0gX2Vudi5sb29rdXBDbGFzcyhsaWJyYXJ5LCAnX05vSW5saW5lJyk7CiAgICAgICAgX21ldGFUcnlJbmxpbmVDbGFzcyA9IF9lbnYubG9va3VwQ2xhc3MobGlicmFyeSwgJ19UcnlJbmxpbmUnKTsKICAgICAgICBpZiAoX21ldGFOb0lubGluZUNsYXNzID09IG51bGwgfHwgX21ldGFUcnlJbmxpbmVDbGFzcyA9PSBudWxsKSB7CiAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgcGFja2FnZSB5b3UncmUgbG9va2luZyBmb3IuCiAgICAgICAgICBfbWV0YU5vSW5saW5lQ2xhc3MgPSBudWxsOwogICAgICAgICAgX21ldGFUcnlJbmxpbmVDbGFzcyA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXQgbWV0YU5vSW5saW5lQ2xhc3MgewogICAgX2Vuc3VyZU1ldGFBbm5vdGF0aW9ucygpOwogICAgcmV0dXJuIF9tZXRhTm9JbmxpbmVDbGFzczsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldCBtZXRhVHJ5SW5saW5lQ2xhc3MgewogICAgX2Vuc3VyZU1ldGFBbm5vdGF0aW9ucygpOwogICAgcmV0dXJuIF9tZXRhVHJ5SW5saW5lQ2xhc3M7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRm9yZWlnbihNZW1iZXJFbnRpdHkgZWxlbWVudCkgPT4gZWxlbWVudC5saWJyYXJ5ID09IGZvcmVpZ25MaWJyYXJ5OwoKICBAb3ZlcnJpZGUKICBib29sIGlzRm9yZWlnbkhlbHBlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gbWVtYmVyLmxpYnJhcnkgPT0gZm9yZWlnbkxpYnJhcnkgfHwKICAgICAgICBpc0NyZWF0ZUludm9jYXRpb25NaXJyb3JIZWxwZXIobWVtYmVyKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNFeHRlcm5hbEFsbG93ZWQoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIHJldHVybiBpc0ZvcmVpZ25IZWxwZXIoZnVuY3Rpb24pIHx8CiAgICAgICAgKGZ1bmN0aW9uIGlzIENvbnN0cnVjdG9yRW50aXR5ICYmCiAgICAgICAgICAgIGZ1bmN0aW9uLmlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3IpIHx8CiAgICAgICAgbWF5YmVFbmFibGVOYXRpdmUoZnVuY3Rpb24ubGlicmFyeS5jYW5vbmljYWxVcmkpIHx8CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiBpbXBvcnRpbmcgZGFydDptaXJyb3JzIGlzCiAgICAgICAgLy8gYSBjb21waWxlLXRpbWUgZXJyb3IuCiAgICAgICAgZnVuY3Rpb24ubGlicmFyeS5jYW5vbmljYWxVcmkgPT0gVXJpcy5kYXJ0X21pcnJvcnM7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yRXFIYW5kbGVzTnVsbEFyZ3VtZW50KEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICBhc3NlcnQoZnVuY3Rpb24ubmFtZSA9PSAnPT0nLAogICAgICAgIGZhaWxlZEF0KGZ1bmN0aW9uLCAiVW5leHBlY3RlZCBmdW5jdGlvbiAkZnVuY3Rpb24uIikpOwogICAgQ2xhc3NFbnRpdHkgY2xzID0gZnVuY3Rpb24uZW5jbG9zaW5nQ2xhc3M7CiAgICByZXR1cm4gY2xzID09IG9iamVjdENsYXNzIHx8CiAgICAgICAgY2xzID09IGpzSW50ZXJjZXB0b3JDbGFzcyB8fAogICAgICAgIGNscyA9PSBqc051bGxDbGFzczsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldERlZmF1bHRTdXBlcmNsYXNzKAogICAgICBDbGFzc0VudGl0eSBjbHMsIE5hdGl2ZUJhc2ljRGF0YSBuYXRpdmVCYXNpY0RhdGEpIHsKICAgIGlmIChuYXRpdmVCYXNpY0RhdGEuaXNKc0ludGVyb3BDbGFzcyhjbHMpKSB7CiAgICAgIHJldHVybiBqc0phdmFTY3JpcHRPYmplY3RDbGFzczsKICAgIH0KICAgIC8vIE5hdGl2ZSBjbGFzc2VzIGluaGVyaXQgZnJvbSBJbnRlcmNlcHRvci4KICAgIHJldHVybiBuYXRpdmVCYXNpY0RhdGEuaXNOYXRpdmVDbGFzcyhjbHMpCiAgICAgICAgPyBqc0ludGVyY2VwdG9yQ2xhc3MKICAgICAgICA6IG9iamVjdENsYXNzOwogIH0KfQoKLy8vIEludGVyZmFjZSBmb3IgYWNjZXNzaW5nIGxpYnJhcmllcywgY2xhc3NlcyBhbmQgbWVtYmVycy4KLy8vCi8vLyBUaGUgZWxlbWVudCBlbnZpcm9ubWVudCBtYWtlcyBwcml2YXRlIGFuZCBpbmplY3RlZCBtZW1iZXJzIGRpcmVjdGx5Ci8vLyBhdmFpbGFibGUgYW5kIHNob3VsZCB0aGVyZWZvcmUgbm90IGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHNjb3Blcy4KLy8vCi8vLyBUaGUgcHJvcGVydGllcyBleHBvc2VkIGFyZSBEYXJ0LWNlbnRyaWMgYW5kIHNob3VsZCB0aGVyZWZvcmUsIGxvbmctdGVybSwgbm90Ci8vLyBiZSB1c2VkIGR1cmluZyBjb2RlZ2VuLCBleHBlY3QgZm9yIG1pcnJvcnMuCi8vIFRPRE8oam9obm5pd2ludGhlcik6IFNwbGl0IHRoaXMgaW50byBhbiBlbGVtZW50IGVudmlyb25tZW50IGFuZCBhIHR5cGUgcXVlcnkKLy8gaW50ZXJmYWNlLCB0aGUgZmlyc3Qgc2hvdWxkIG9ubHkgYmUgdXNlZCBkdXJpbmcgcmVzb2x1dGlvbiBhbmQgdGhlIGxhdHRlciBpbgovLyBib3RoIHJlc29sdXRpb24gYW5kIGNvZGVnZW4uCmFic3RyYWN0IGNsYXNzIEVsZW1lbnRFbnZpcm9ubWVudCB7CiAgLy8vIFJldHVybnMgdGhlIG1haW4gbGlicmFyeSBmb3IgdGhlIGNvbXBpbGF0aW9uLgogIExpYnJhcnlFbnRpdHkgZ2V0IG1haW5MaWJyYXJ5OwoKICAvLy8gUmV0dXJucyB0aGUgbWFpbiBtZXRob2QgZm9yIHRoZSBjb21waWxhdGlvbi4KICBGdW5jdGlvbkVudGl0eSBnZXQgbWFpbkZ1bmN0aW9uOwoKICAvLy8gUmV0dXJucyBhbGwga25vd24gbGlicmFyaWVzLgogIEl0ZXJhYmxlPExpYnJhcnlFbnRpdHk+IGdldCBsaWJyYXJpZXM7CgogIC8vLyBSZXR1cm5zIHRoZSBsaWJyYXJ5IG5hbWUgb2YgW2xpYnJhcnldIG9yICcnIGlmIHRoZSBsaWJyYXJ5IGlzIHVubmFtZWQuCiAgU3RyaW5nIGdldExpYnJhcnlOYW1lKExpYnJhcnlFbnRpdHkgbGlicmFyeSk7CgogIC8vLyBMb29rdXAgdGhlIGxpYnJhcnkgd2l0aCB0aGUgY2Fub25pY2FsIFt1cmldLCBmYWlsIGlmIHRoZSBsaWJyYXJ5IGlzCiAgLy8vIG1pc3NpbmcgYW5kIFtyZXF1aXJlZF07CiAgTGlicmFyeUVudGl0eSBsb29rdXBMaWJyYXJ5KFVyaSB1cmksIHtib29sIHJlcXVpcmVkOiBmYWxzZX0pOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBldmVyeSBjbGFzcyBkZWNsYXJlZCBpbiBbbGlicmFyeV0uCiAgdm9pZCBmb3JFYWNoQ2xhc3MoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCB2b2lkIGYoQ2xhc3NFbnRpdHkgY2xzKSk7CgogIC8vLyBMb29rdXAgdGhlIGNsYXNzIFtuYW1lXSBpbiBbbGlicmFyeV0sIGZhaWwgaWYgdGhlIGNsYXNzIGlzIG1pc3NpbmcgYW5kCiAgLy8vIFtyZXF1aXJlZF0uCiAgQ2xhc3NFbnRpdHkgbG9va3VwQ2xhc3MoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgcmVxdWlyZWQ6IGZhbHNlfSk7CgogIC8vLyBDYWxscyBbZl0gZm9yIGV2ZXJ5IHRvcCBsZXZlbCBtZW1iZXIgaW4gW2xpYnJhcnldLgogIHZvaWQgZm9yRWFjaExpYnJhcnlNZW1iZXIoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCB2b2lkIGYoTWVtYmVyRW50aXR5IG1lbWJlcikpOwoKICAvLy8gTG9va3VwIHRoZSBtZW1iZXIgW25hbWVdIGluIFtsaWJyYXJ5XSwgZmFpbCBpZiB0aGUgY2xhc3MgaXMgbWlzc2luZyBhbmQKICAvLy8gW3JlcXVpcmVkXS4KICBNZW1iZXJFbnRpdHkgbG9va3VwTGlicmFyeU1lbWJlcihMaWJyYXJ5RW50aXR5IGxpYnJhcnksIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlLCBib29sIHJlcXVpcmVkOiBmYWxzZX0pOwoKICAvLy8gTG9va3VwIHRoZSBtZW1iZXIgW25hbWVdIGluIFtjbHNdLCBmYWlsIGlmIHRoZSBjbGFzcyBpcyBtaXNzaW5nIGFuZAogIC8vLyBbcmVxdWlyZWRdLgogIE1lbWJlckVudGl0eSBsb29rdXBMb2NhbENsYXNzTWVtYmVyKENsYXNzRW50aXR5IGNscywgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2UsIGJvb2wgcmVxdWlyZWQ6IGZhbHNlfSk7CgogIC8vLyBMb29rdXAgdGhlIG1lbWJlciBbbmFtZV0gaW4gW2Nsc10gYW5kIGl0cyBzdXBlcmNsYXNzZXMuCiAgLy8vCiAgLy8vIFJldHVybiBgbnVsbGAgaWYgdGhlIG1lbWJlciBpcyBub3QgZm91bmQgaW4gdGhlIGNsYXNzIG9yIGFueSBzdXBlcmNsYXNzLgogIE1lbWJlckVudGl0eSBsb29rdXBDbGFzc01lbWJlcihDbGFzc0VudGl0eSBjbHMsIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgdmFyIGVudGl0eSA9IGxvb2t1cExvY2FsQ2xhc3NNZW1iZXIoY2xzLCBuYW1lLCBzZXR0ZXI6IHNldHRlcik7CiAgICBpZiAoZW50aXR5ICE9IG51bGwpIHJldHVybiBlbnRpdHk7CgogICAgdmFyIHN1cGVyY2xhc3MgPSBnZXRTdXBlckNsYXNzKGNscyk7CiAgICBpZiAoc3VwZXJjbGFzcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKCiAgICByZXR1cm4gbG9va3VwQ2xhc3NNZW1iZXIoc3VwZXJjbGFzcywgbmFtZSwgc2V0dGVyOiBzZXR0ZXIpOwogIH0KCiAgLy8vIExvb2t1cCB0aGUgY29uc3RydWN0b3IgW25hbWVdIGluIFtjbHNdLCBmYWlsIGlmIHRoZSBjbGFzcyBpcyBtaXNzaW5nIGFuZAogIC8vLyBbcmVxdWlyZWRdLgogIENvbnN0cnVjdG9yRW50aXR5IGxvb2t1cENvbnN0cnVjdG9yKENsYXNzRW50aXR5IGNscywgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHJlcXVpcmVkOiBmYWxzZX0pOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGNsYXNzIG1lbWJlciBkZWNsYXJlZCBpbiBbY2xzXS4KICB2b2lkIGZvckVhY2hMb2NhbENsYXNzTWVtYmVyKENsYXNzRW50aXR5IGNscywgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKTsKCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBjbGFzcyBtZW1iZXIgZGVjbGFyZWQgb3IgaW5oZXJpdGVkIGluIFtjbHNdIHRvZ2V0aGVyCiAgLy8vIHdpdGggdGhlIGNsYXNzIHRoYXQgZGVjbGFyZWQgdGhlIG1lbWJlci4KICAvLy8KICAvLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBzaG91bGQgbm90IGluY2x1ZGUgc3RhdGljIG1lbWJlcnMgb2YKICAvLy8gc3VwZXJjbGFzc2VzLgogIHZvaWQgZm9yRWFjaENsYXNzTWVtYmVyKAogICAgICBDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihDbGFzc0VudGl0eSBkZWNsYXJlciwgTWVtYmVyRW50aXR5IG1lbWJlcikpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBldmVyeSBjb25zdHJ1Y3RvciBkZWNsYXJlZCBpbiBbY2xzXS4KICAvLy8KICAvLy8gV2lsbCBlbnN1cmUgdGhhdCB0aGUgY2xhc3MgYW5kIGFsbCBjb25zdHJ1Y3RvcnMgYXJlIHJlc29sdmVkIGlmCiAgLy8vIFtlbnN1cmVSZXNvbHZlZF0gaXMgYHRydWVgLgogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yKAogICAgICBDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvcikpOwoKICAvLy8gUmV0dXJucyB0aGUgc3VwZXJjbGFzcyBvZiBbY2xzXS4KICAvLy8KICAvLy8gSWYgW3NraXBVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbnNdIGlzIGB0cnVlYCwgdW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbnMKICAvLy8gYXJlIGV4Y2x1ZGVkLCBmb3IgaW5zdGFuY2UgZm9yIHRoZXNlIGNsYXNzZXMKICAvLy8KICAvLy8gICAgIGNsYXNzIFMge30KICAvLy8gICAgIGNsYXNzIE0ge30KICAvLy8gICAgIGNsYXNzIEMgZXh0ZW5kcyBTIHdpdGggTSB7fQogIC8vLwogIC8vLyB0aGUgcmVzdWx0IG9mIGBnZXRTdXBlckNsYXNzKEMpYCBpcyB0aGUgdW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbgogIC8vLyB0eXBpY2FsbHkgbmFtZWQgYFMrTWAgYW5kIGBnZXRTdXBlckNsYXNzKFMrTSlgIGlzIGBTYCwgd2hlcmVhcwogIC8vLyB0aGUgcmVzdWx0IG9mIGBnZXRTdXBlckNsYXNzKEMsIHNraXBVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbnM6IGZhbHNlKWAgaXMKICAvLy8gYFNgLgogIENsYXNzRW50aXR5IGdldFN1cGVyQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzLAogICAgICB7Ym9vbCBza2lwVW5uYW1lZE1peGluQXBwbGljYXRpb25zOiBmYWxzZX0pOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIHN1cGVydHlwZSBvZiBbY2xzXS4KICB2b2lkIGZvckVhY2hTdXBlcnR5cGUoQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUpKTsKCiAgLy8vIENyZWF0ZSB0aGUgaW5zdGFudGlhdGlvbiBvZiBbY2xzXSB3aXRoIHRoZSBnaXZlbiBbdHlwZUFyZ3VtZW50c10uCiAgSW50ZXJmYWNlVHlwZSBjcmVhdGVJbnRlcmZhY2VUeXBlKAogICAgICBDbGFzc0VudGl0eSBjbHMsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpOwoKICAvLy8gUmV0dXJucyB0aGUgYGR5bmFtaWNgIHR5cGUuCiAgRGFydFR5cGUgZ2V0IGR5bmFtaWNUeXBlOwoKICAvLy8gUmV0dXJucyB0aGUgJ3JhdyB0eXBlJyBvZiBbY2xzXS4gVGhhdCBpcywgdGhlIGluc3RhbnRpYXRpb24gb2YgW2Nsc10KICAvLy8gd2hlcmUgYWxsIHR5cGVzIGFyZ3VtZW50cyBhcmUgYGR5bmFtaWNgLgogIEludGVyZmFjZVR5cGUgZ2V0UmF3VHlwZShDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgJ3RoaXMgdHlwZScgb2YgW2Nsc10uIFRoYXQgaXMsIHRoZSBpbnN0YW50aWF0aW9uIG9mIFtjbHNdCiAgLy8vIHdoZXJlIHRoZSB0eXBlIGFyZ3VtZW50cyBhcmUgdGhlIHR5cGUgdmFyaWFibGVzIG9mIFtjbHNdLgogIEludGVyZmFjZVR5cGUgZ2V0VGhpc1R5cGUoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGlzIGdlbmVyaWMuCiAgYm9vbCBpc0dlbmVyaWNDbGFzcyhDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gaXMgYSBtaXhpbiBhcHBsaWNhdGlvbiAobmFtZWQgb3IgdW5uYW1lZCkuCiAgYm9vbCBpc01peGluQXBwbGljYXRpb24oQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGlzIGFuIHVubmFtZWQgbWl4aW4gYXBwbGljYXRpb24uCiAgYm9vbCBpc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBUaGUgdXBwZXIgYm91bmQgb24gdGhlIFt0eXBlVmFyaWFibGVdLiBJZiBub3QgZXhwbGljaXRseSBkZWNsYXJlZCwgdGhpcyBpcwogIC8vLyBgT2JqZWN0YC4KICBEYXJ0VHlwZSBnZXRUeXBlVmFyaWFibGVCb3VuZChUeXBlVmFyaWFibGVFbnRpdHkgdHlwZVZhcmlhYmxlKTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgW2Z1bmN0aW9uXS4KICBGdW5jdGlvblR5cGUgZ2V0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKTsKCiAgLy8vIFJldHVybnMgdGhlIGZ1bmN0aW9uIHR5cGUgdmFyaWFibGVzIGRlZmluZWQgb24gW2Z1bmN0aW9uXS4KICBMaXN0PFR5cGVWYXJpYWJsZVR5cGU+IGdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhGdW5jdGlvbkVudGl0eSBmdW5jdGlvbik7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBbbG9jYWxdIGZ1bmN0aW9uLgogIEZ1bmN0aW9uVHlwZSBnZXRMb2NhbEZ1bmN0aW9uVHlwZShMb2NhbCBsb2NhbCk7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIFtmaWVsZF0uCiAgRGFydFR5cGUgZ2V0RmllbGRUeXBlKEZpZWxkRW50aXR5IGZpZWxkKTsKCiAgLy8vIFJldHVybnMgdGhlICd1bmFsaWFzZWQnIHR5cGUgb2YgW3R5cGVdLiBGb3IgdHlwZWRlZnMgdGhpcyBpcyB0aGUgZnVuY3Rpb24KICAvLy8gdHlwZSBpdCBpcyBhbiBhbGlhcyBvZiwgZm9yIG90aGVyIHR5cGVzIGl0IGlzIHRoZSB0eXBlIGl0c2VsZi4KICAvLy8KICAvLy8gVXNlIHRoaXMgZHVyaW5nIHJlc29sdXRpb24gdG8gZW5zdXJlIHRoYXQgdGhlIGFsaWFzIGhhcyBiZWVuIGNvbXB1dGVkLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gdGhlIHJlc29sdmVyIGlzIHJlbW92ZWQuCiAgRGFydFR5cGUgZ2V0VW5hbGlhc2VkVHlwZShEYXJ0VHlwZSB0eXBlKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGlzIGEgRGFydCBlbnVtIGNsYXNzLgogIGJvb2wgaXNFbnVtQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKTsKfQoKYWJzdHJhY3QgY2xhc3MgS0VsZW1lbnRFbnZpcm9ubWVudCBleHRlbmRzIEVsZW1lbnRFbnZpcm9ubWVudCB7CiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBjbGFzcyB0aGF0IGlzIG1peGVkIGludG8gW2Nsc10gb3Igb25lIG9mIGl0cwogIC8vLyBzdXBlcmNsYXNzZXMuCiAgdm9pZCBmb3JFYWNoTWl4aW4oQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoQ2xhc3NFbnRpdHkgbWl4aW4pKTsKCiAgLy8vIEdldHMgdGhlIGNvbnN0YW50IHZhbHVlIG9mIFtmaWVsZF0sIG9yIGBudWxsYCBpZiBbZmllbGRdIGlzIG5vbi1jb25zdC4KICBDb25zdGFudEV4cHJlc3Npb24gZ2V0RmllbGRDb25zdGFudEZvclRlc3RpbmcoRmllbGRFbnRpdHkgZmllbGQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW21lbWJlcl0gYSB0aGUgc3ludGhldGljIGdldHRlciBgbG9hZExpYnJhcnlgIGluamVjdGVkCiAgLy8vIG9uIGRlZmVycmVkIGxpYnJhcmllcy4KICBib29sIGlzRGVmZXJyZWRMb2FkTGlicmFyeUdldHRlcihNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIFJldHVybnMgdGhlIGltcG9ydHMgc2VlbiBpbiBbbGlicmFyeV0KICBJdGVyYWJsZTxJbXBvcnRFbnRpdHk+IGdldEltcG9ydHMoTGlicmFyeUVudGl0eSBsaWJyYXJ5KTsKCiAgLy8vIFJldHVybnMgdGhlIG1ldGFkYXRhIGNvbnN0YW50cyBkZWNsYXJlZCBvbiBbbGlicmFyeV0uCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0TGlicmFyeU1ldGFkYXRhKExpYnJhcnlFbnRpdHkgbGlicmFyeSk7CgogIC8vLyBSZXR1cm5zIHRoZSBtZXRhZGF0YSBjb25zdGFudHMgZGVjbGFyZWQgb24gW2Nsc10uCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0Q2xhc3NNZXRhZGF0YShDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgbWV0YWRhdGEgY29uc3RhbnRzIGRlY2xhcmVkIG9uIFttZW1iZXJdLgogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldE1lbWJlck1ldGFkYXRhKE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIHtib29sIGluY2x1ZGVQYXJhbWV0ZXJNZXRhZGF0YTogZmFsc2V9KTsKfQoKYWJzdHJhY3QgY2xhc3MgSkVsZW1lbnRFbnZpcm9ubWVudCBleHRlbmRzIEVsZW1lbnRFbnZpcm9ubWVudCB7CiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBjbGFzcyBtZW1iZXIgYWRkZWQgdG8gW2Nsc10gZHVyaW5nIGNvbXBpbGF0aW9uLgogIHZvaWQgZm9yRWFjaEluamVjdGVkQ2xhc3NNZW1iZXIoQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoTWVtYmVyRW50aXR5IG1lbWJlcikpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBldmVyeSBjb25zdHJ1Y3RvciBib2R5IGluIFtjbHNdLgogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yQm9keSgKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoQ29uc3RydWN0b3JCb2R5RW50aXR5IGNvbnN0cnVjdG9yQm9keSkpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIG5lc3RlZCBjbG9zdXJlIGluIFttZW1iZXJdLgogIHZvaWQgZm9yRWFjaE5lc3RlZENsb3N1cmUoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsIHZvaWQgZihGdW5jdGlvbkVudGl0eSBjbG9zdXJlKSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBpcyBhIG1peGluIGFwcGxpY2F0aW9uIHRoYXQgbWl4ZXMgaW4gbWV0aG9kcyB3aXRoCiAgLy8vIHN1cGVyIGNhbGxzLgogIGJvb2wgaXNTdXBlck1peGluQXBwbGljYXRpb24oQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgdGhlICdlZmZlY3RpdmUnIG1peGluIGNsYXNzIGlmIFtjbHNdIGlzIGEgbWl4aW4gYXBwbGljYXRpb24sIGFuZAogIC8vLyBgbnVsbGAgb3RoZXJ3aXNlLgogIC8vLwogIC8vLyBUaGUgJ2VmZmVjdGl2ZScgbWl4aW4gY2xhc3MgaXMgdGhlIGNsYXNzIGZyb20gd2hpY2ggbWVtYmVycyBhcmUgbWl4ZWQgaW4uCiAgLy8vIE5vcm1hbGx5IHRoaXMgaXMgdGhlIG1peGluIGNsYXNzIGl0c2VsZiwgYnV0IG5vdCBpZiB0aGUgbWl4aW4gY2xhc3MgaXRzZWxmCiAgLy8vIGlzIGEgbWl4aW4gYXBwbGljYXRpb24uCiAgLy8vCiAgLy8vIENvbnNpZGVyIHRoaXMgaGllcmFyY2h5OgogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7fQogIC8vLyAgICAgY2xhc3MgQiA9IE9iamVjdCB3aXRoIEEge30KICAvLy8gICAgIGNsYXNzIEMgPSBPYmplY3Qgd2l0aCBCIHt9CiAgLy8vCiAgLy8vIFRoZSBtaXhpbiBjbGFzc2VzIG9mIGBCYCBhbmQgYENgIGFyZSBgQWAgYW5kIGBCYCwgcmVzcGVjdGl2ZWx5LCBidXQgdGhlCiAgLy8vIF9lZmZlY3RpdmVfIG1peGluIGNsYXNzIG9mIGJvdGggaXMgYEFgLgogIENsYXNzRW50aXR5IGdldEVmZmVjdGl2ZU1peGluQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFRoZSBkZWZhdWx0IHR5cGUgb2YgdGhlIFt0eXBlVmFyaWFibGVdLgogIC8vLwogIC8vLyBUaGlzIGlzIHRoZSB0eXBlIHVzZWQgYXMgdGhlIGRlZmF1bHQgdHlwZSBhcmd1bWVudCB3aGVuIG5vIGV4cGxpY2l0IHR5cGUKICAvLy8gYXJndW1lbnQgaXMgcGFzc2VkLgogIERhcnRUeXBlIGdldFR5cGVWYXJpYWJsZURlZmF1bHRUeXBlKFR5cGVWYXJpYWJsZUVudGl0eSB0eXBlVmFyaWFibGUpOwoKICAvLy8gUmV0dXJucyB0aGUgJ2VsZW1lbnQnIHR5cGUgb2YgYSBmdW5jdGlvbiB3aXRoIHRoZSBhc3luYywgYXN5bmMqIG9yIHN5bmMqCiAgLy8vIG1hcmtlciBbbWFya2VyXS4gW3JldHVyblR5cGVdIGlzIHRoZSByZXR1cm4gdHlwZSBtYXJrZWQgZnVuY3Rpb24uCiAgRGFydFR5cGUgZ2V0QXN5bmNPclN5bmNTdGFyRWxlbWVudFR5cGUoCiAgICAgIEFzeW5jTWFya2VyIG1hcmtlciwgRGFydFR5cGUgcmV0dXJuVHlwZSk7CgogIC8vLyBSZXR1cm5zIHRoZSAnZWxlbWVudCcgdHlwZSBvZiBhIGZ1bmN0aW9uIHdpdGggYW4gYXN5bmMsIGFzeW5jKiBvciBzeW5jKgogIC8vLyBtYXJrZXIuIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgbWV0aG9kIGlzIGluc3BlY3RlZCB0byBkZXRlcm1pbmUgdGhlIHR5cGUKICAvLy8gcGFyYW1ldGVyIG9mIHRoZSBGdXR1cmUsIFN0cmVhbSBvciBJdGVyYWJsZS4KICBEYXJ0VHlwZSBnZXRGdW5jdGlvbkFzeW5jT3JTeW5jU3RhckVsZW1lbnRUeXBlKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKTsKCiAgLy8vIENhbGxzIFtmXSB3aXRoIGV2ZXJ5IGluc3RhbmNlIGZpZWxkLCB0b2dldGhlciB3aXRoIGl0cyBkZWNsYXJlciwgaW4gYW4KICAvLy8gaW5zdGFuY2Ugb2YgW2Nsc10uIEFsbCBmaWVsZHMgaW5oZXJpdGVkIGZyb20gc3VwZXJjbGFzc2VzIGFuZCBtaXhpbnMgYXJlCiAgLy8vIGluY2x1ZGVkLgogIC8vLwogIC8vLyBJZiBbaXNFbGlkZWRdIGlzIGB0cnVlYCwgdGhlIGZpZWxkIGlzIG5vdCByZWFkIGFuZCBzaG91bGQgdGhlcmVmb3JlIG5vdAogIC8vLyBiZSBlbWl0dGVkLgogIHZvaWQgZm9yRWFjaEluc3RhbmNlRmllbGQoCiAgICAgIENsYXNzRW50aXR5IGNscywgdm9pZCBmKENsYXNzRW50aXR5IGRlY2xhcmVyLCBGaWVsZEVudGl0eSBmaWVsZCkpOwoKICAvLy8gQ2FsbHMgW2ZdIHdpdGggZXZlcnkgaW5zdGFuY2UgZmllbGQgZGVjbGFyZWQgZGlyZWN0bHkgaW4gY2xhc3MgW2Nsc10KICAvLy8gKGkuZS4gbm8gaW5oZXJpdGVkIGZpZWxkcykuIEZpZWxkcyBhcmUgcHJlc2VudGVkIGluIGluaXRpYWxpemF0aW9uCiAgLy8vIChpLmUuIHRleHR1YWwpIG9yZGVyLgogIC8vLwogIC8vLyBJZiBbaXNFbGlkZWRdIGlzIGB0cnVlYCwgdGhlIGZpZWxkIGlzIG5vdCByZWFkIGFuZCBzaG91bGQgdGhlcmVmb3JlIG5vdAogIC8vLyBiZSBlbWl0dGVkLgogIHZvaWQgZm9yRWFjaERpcmVjdEluc3RhbmNlRmllbGQoQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoRmllbGRFbnRpdHkgZmllbGQpKTsKCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBwYXJhbWV0ZXIgb2YgW2Z1bmN0aW9uXSBwcm92aWRpbmcgdGhlIHR5cGUgYW5kIG5hbWUgb2YKICAvLy8gdGhlIHBhcmFtZXRlciBhbmQgdGhlIFtkZWZhdWx0VmFsdWVdIGlmIHRoZSBwYXJhbWV0ZXIgaXMgb3B0aW9uYWwuCiAgdm9pZCBmb3JFYWNoUGFyYW1ldGVyKGNvdmFyaWFudCBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwKICAgICAgdm9pZCBmKERhcnRUeXBlIHR5cGUsIFN0cmluZyBuYW1lLCBDb25zdGFudFZhbHVlIGRlZmF1bHRWYWx1ZSkpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIHBhcmFtZXRlciAtIGdpdmVuIGFzIGEgW0xvY2FsXSAtIG9mIFtmdW5jdGlvbl0uCiAgdm9pZCBmb3JFYWNoUGFyYW1ldGVyQXNMb2NhbChHbG9iYWxMb2NhbHNNYXAgZ2xvYmFsTG9jYWxzTWFwLAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwgdm9pZCBmKExvY2FsIHBhcmFtZXRlcikpOwp9Cok2AE5OPAE6HQEWMzw9ICEeLjsfJRcvASsgMR8BLx0BLhwBLhwBMR8BMR8BMyEBMyEBMR8BLx0BLx0BNSMBLx0BLhwBLhwBLigBMyEBLh8BLR8BHSEBHiIBICQBIyYBIyUBJikBKCQBIiABIiUBOCIBOgZHHTEBPAZQEjcBLSgBOAZPEzQBGh8BMCABLh4BLR0BLR0BMCABMCABMCABMiIBLh4BLh4BJQE0JAFJKgZLMgFIKgZLMQFINwZNQQFNKgZLNgFMKgZLNAFMKgZLNAFINwE/MwE9LQFAPgFBAR8BLgEUIy80LTIBIy80LTIBKQFEARUrJygpAR8BIAEiASwBJgEpASUBJAEoASQBIgEzAS4BMQE3ASYBIQEgASEBHgEhAR8BHwEwATIBLQErASQBKwEnASUBKgEsASYBIQEhAUsoPgExATEBGk4yASABJQEkASgBKAElASsBMQFCTi8BKQEkKikrASoBKgEpAUMpATEBIQEiASMBLgFNDjIBOS0BKQEqASoBIgEpASQBNAE0ASkBKAEsASUBOwE3ATcBMAEqASwBJwEpASkBKQEtAScBLgEtATgBJgEjASQBIgEnASMBMAExAS8BLAEoASgBJwEtATYBKAElATYBPAFAATYBPAEUAR8jJyUeIR4kJCgBMjM1ASgwMzI1Jy8yJy8yKjI1ARkBLQE9JQEmATQBIgEwIQFQRAZOLQEkOQIBOxUlASQBHygrATwBQAElASYBPgZRMAZKSTMCATtIBk4TPAFJBk4TOwE+AUQ2ASgBIQEtAU0cBjxJMAEkAScBKgEgAUYYKAFGGCgBSRgrAS4BIgEoASsBMSEBKAFOKj8CARlCISIBMAEcDCE6ARoMTwEZDEwBGQxMARwMIToBHAwhOgEeDCM+AR4MIz4BHAwhOgEaDE8BGgxPASAMJUIBGgxPARkMTAEZDEwBJQxEUAEeDCM+ARwMITsBHAwhOwEeDCNLAR8MJD0BIAY3IQwmQQEjDChOASIMJ0UBJgwrTAEhDCZJAR0MIkoBTiIMPD8BHwwkSwEuDDJKSh8oOQQBNzwBMDgzLDAlRAgwI08IBiBJBiAOBi08BAEMOB0sQC0EASUMKksBDDZKAUgGThMMPkVKAUkGThMMPUcBDDMBDDwBDDgBDDYBDDYBDDwBDDwBDDwBDEABDDgBDDgBDEYBDEQBDDMfJQY7BAEMMh8kBjoEAQxCMCQiHSQfBkEEAQw3HykGPwQBDDUfJwY9BAEMNR8nBj0EAQw4TgQBDDRLBAEMSQE9HyZABAFGMyYzLQQBPjMyLQQBQx9CBAEkLyEEAUgmNzkEAQxAPy5JIzwhLA1DBgQBDEMcMiY/AQw8AQwwMgEMPyI3Ki4lBAEUASAMJCRJJidICAYdBAEsMSovJDABHT0iOx5GI0QEAQwwICMEAQw1ICgEAQwuICQEAQwzICkEASAMOk0BLDEqLwEkMAEdPSI7HkYjRAQBDDAgIwQBDDUgKAQBDC4gJAQBDDMgKQQBJgwqI00EAQxFNyouJQQBFTQmATouAQwtMwwpLwwqMAwrMQEMITsBDD8/AQxBQQEMS0MBDCg0AQwrNwEMREQBDCYyAQxMAQwmMgEMTQEMNTIBKwxNOQEuDDMmQAE0DDksRgEdNS0BOzUBIwwoRQEeDCM9AR0MIjsBHgwjPQEbDFEBHgwjPQEcDCE5ARwMITkBLQwyKDsBLww0Kj0BKgxONAEoDC1PASEMJkMBKAwtUQEkDClJASIMJ0UBJwwsTwEpDEw1ASMMKEcBHgwjPQEeDCM9AQw/Ph0vBAEuDDMmPQEMN1AEAS4MM0wBJQwqSwEeDCM9AStJBAEMLiUjMQQBDEkxIhhIJUgwBi8dIFElBAEhDCZDASQMKUkBJwwsRQEdDCJAARUiDCYmQyg2Bh8EASEMJSVDKD0GHgQBDE8BNTEBLykBHQxRASIMJz8BIQwmNiMqASUMKkEBUC0lDCo2ASIMJz8BHAwhOgElDCpHASgMLU0BKAwtSwEuDDMoRgEsDDEnOgEMTAEMJkoMLFEMK1AMP0EBDEkBDEkBDEcBJgwrPQEuDFA1AR4MIzkBHwwkOwEgDCU9ASsMME0BLww0JzgBKgwvSwEMKzIBDCwyAQwsMgEMSAEMKzEBDEwBDDYiAQw2JAEMKy4BDCowAQwuNAEMTgEMPUMBOgw5MkMBDDk/AQwpIB0tIwQBDCkgHS0jBAEMLCAdLSYEAQxMAQwsLAEMLi4BDCk1AQwrNAEMKzEBDCsxAQwvNQEMKS8BDDA2AQwvNQEMOkABDFABDEoBDEwBDEgBDCkvAQxKAQwyOAEMMzkBDDE3AQwuNAEMKjABDEQvMgEMKTIBDC81AQw9IDQnBAEMOD4BDCouAQxOAQw3NCsEAUU4IyIQITcjBgQBDD0wQAQBDEEwQQQBDDg+AQw+RAEMLy4nLgQBFAFKATIsARwMTQEgDCU6ASQMKT0BIgwnPgFCTDEtARsMSwEbDEsBHgwjNwEhDCZDASEMJkMBJQwqTgEvDDQnPAEwDDUoPQEyDDcqPwEMRwEMMisBDDUuAQw0LQEMNzABDEUBDDEqAQw0LQEMRQEMMSoBDDQtAQxLAQw0LQEMNzABGQEqDC9MASIMJ0oMSAEMNiZEAVEUKk5GGwExDEEvNQYSBAEiASUMUEggASgMLS9MJwEiAR4MQkgUAR4MQkgUASciIwEiIyVNHUVHSTklJgoIBgQBDCYeHwQBDCceIAQBDE0BDC4vMAQBDDQoKjY8SyE8BAEMQCI/LyElHAQBDCQ6MSYGMC4dFwQCATwESEQEUTBQUCAkNCEBMyMBIykBTTABSh5AATdFAU0SPh8BOVEBThJHMwFKEkQzAT4GTz8eRCcBKSkBQAQBTxJEHwE5TgFOLwZFFBtLATkGRiIbPwEnBk4zBhUVJgZIRU8LLTMBLUsBSCU2ASIcAUsvLQFMQC4BKigBSSwBPzMBURBCASY5AUFMATAyASMsAVBFBk1ELAE0JQIBQEYUQQFNRAFPHTkBLDwBPEUBOD0BO0EvAgFASVEBNR9HATUdPAFQEzEBTxgGUFEeBh8GFSUlBk4uNwEuBk8aSAFPSCowAU5PM0sBTU8QBk4SHUkBS0kcBk4STwFQSTtHAUlAOQIBKXBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbW1vbl9lbGVtZW50cy5kYXJ0MHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2RlZmVycmVkX2xvYWQuZGFydMABAUIvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkZWZlcnJlZF9sb2FkOwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgUXVldWU7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBhcyBmZTsKCmltcG9ydCAnY29tbW9uL3Rhc2tzLmRhcnQnIHNob3cgQ29tcGlsZXJUYXNrOwppbXBvcnQgJ2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICdjb21tb25fZWxlbWVudHMuZGFydCcKICAgIHNob3cgQ29tbW9uRWxlbWVudHMsIEVsZW1lbnRFbnZpcm9ubWVudCwgS0VsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICdjb21waWxlci5kYXJ0JyBzaG93IENvbXBpbGVyOwppbXBvcnQgJ2NvbnN0YW50cy92YWx1ZXMuZGFydCcKICAgIHNob3cKICAgICAgICBDb25zdGFudFZhbHVlLAogICAgICAgIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSwKICAgICAgICBUeXBlQ29uc3RhbnRWYWx1ZSwKICAgICAgICBEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUsCiAgICAgICAgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWU7CmltcG9ydCAnZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAna2VybmVsL2tlbGVtZW50cy5kYXJ0JyBzaG93IEtMb2NhbEZ1bmN0aW9uOwppbXBvcnQgJ3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICdvcHRpb25zLmRhcnQnOwppbXBvcnQgJ3VuaXZlcnNlL3VzZS5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcKICAgIHNob3cgSW1wYWN0VXNlQ2FzZSwgV29ybGRJbXBhY3QsIFdvcmxkSW1wYWN0VmlzaXRvckltcGw7CmltcG9ydCAndXRpbC91dGlsLmRhcnQnIHNob3cgbWFrZVVuaXF1ZTsKaW1wb3J0ICd3b3JsZC5kYXJ0JyBzaG93IEtDbG9zZWRXb3JsZDsKCi8vLyBBICJodW5rIiBvZiB0aGUgcHJvZ3JhbSB0aGF0IHdpbGwgYmUgbG9hZGVkIHdoZW5ldmVyIG9uZSBvZiBpdHMgW2ltcG9ydHNdCi8vLyBhcmUgbG9hZGVkLgovLy8KLy8vIEVsZW1lbnRzIHRoYXQgYXJlIG9ubHkgdXNlZCBpbiBvbmUgZGVmZXJyZWQgaW1wb3J0LCBpcyBpbiBhbiBPdXRwdXRVbml0IHdpdGgKLy8vIHRoZSBkZWZlcnJlZCBpbXBvcnQgYXMgc2luZ2xlIGVsZW1lbnQgaW4gdGhlIFtpbXBvcnRzXSBzZXQuCi8vLwovLy8gV2hlbmV2ZXIgYSBkZWZlcnJlZCBFbGVtZW50IGlzIHNoYXJlZCBiZXR3ZWVuIHNldmVyYWwgZGVmZXJyZWQgaW1wb3J0cyBpdCBpcwovLy8gaW4gYW4gb3V0cHV0IHVuaXQgd2l0aCB0aG9zZSBpbXBvcnRzIGluIHRoZSBbaW1wb3J0c10gU2V0LgovLy8KLy8vIFdlIG5ldmVyIGNyZWF0ZSB0d28gT3V0cHV0VW5pdHMgc2hhcmluZyB0aGUgc2FtZSBzZXQgb2YgW2ltcG9ydHNdLgpjbGFzcyBPdXRwdXRVbml0IGltcGxlbWVudHMgQ29tcGFyYWJsZTxPdXRwdXRVbml0PiB7CiAgLy8vIGB0cnVlYCBpZiB0aGlzIG91dHB1dCB1bml0IGlzIGZvciB0aGUgbWFpbiBvdXRwdXQgZmlsZS4KICBmaW5hbCBib29sIGlzTWFpbk91dHB1dDsKCiAgLy8vIEEgdW5pcXVlIG5hbWUgcmVwcmVzZW50aW5nIHRoaXMgW091dHB1dFVuaXRdLgogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8gVGhlIGRlZmVycmVkIGltcG9ydHMgdGhhdCB1c2UgdGhlIGVsZW1lbnRzIGluIHRoaXMgb3V0cHV0IHVuaXQuCiAgZmluYWwgU2V0PEltcG9ydEVudGl0eT4gX2ltcG9ydHM7CgogIE91dHB1dFVuaXQodGhpcy5pc01haW5PdXRwdXQsIHRoaXMubmFtZSwgdGhpcy5faW1wb3J0cyk7CgogIEBvdmVycmlkZQogIGludCBjb21wYXJlVG8oT3V0cHV0VW5pdCBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiAwOwogICAgaWYgKGlzTWFpbk91dHB1dCAmJiAhb3RoZXIuaXNNYWluT3V0cHV0KSByZXR1cm4gLTE7CiAgICBpZiAoIWlzTWFpbk91dHB1dCAmJiBvdGhlci5pc01haW5PdXRwdXQpIHJldHVybiAxOwogICAgdmFyIHNpemUgPSBfaW1wb3J0cy5sZW5ndGg7CiAgICB2YXIgb3RoZXJTaXplID0gb3RoZXIuX2ltcG9ydHMubGVuZ3RoOwogICAgaWYgKHNpemUgIT0gb3RoZXJTaXplKSByZXR1cm4gc2l6ZS5jb21wYXJlVG8ob3RoZXJTaXplKTsKICAgIHZhciBpbXBvcnRzID0gX2ltcG9ydHMudG9MaXN0KCk7CiAgICB2YXIgb3RoZXJJbXBvcnRzID0gb3RoZXIuX2ltcG9ydHMudG9MaXN0KCk7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICBpZiAoaW1wb3J0c1tpXSA9PSBvdGhlckltcG9ydHNbaV0pIGNvbnRpbnVlOwogICAgICB2YXIgYSA9IGltcG9ydHNbaV0udXJpLnBhdGg7CiAgICAgIHZhciBiID0gb3RoZXJJbXBvcnRzW2ldLnVyaS5wYXRoOwogICAgICB2YXIgY21wID0gYS5jb21wYXJlVG8oYik7CiAgICAgIGlmIChjbXAgIT0gMCkgcmV0dXJuIGNtcDsKICAgIH0KICAgIC8vIFRPRE8oc2lnbXVuZCk6IG1ha2UgY29tcGFyZSBzdGFibGUuICBJZiB3ZSBoaXQgdGhpcyBwb2ludCwgYWxsIGltcG9ydGVkCiAgICAvLyBsaWJyYXJpZXMgYXJlIHRoZSBzYW1lLCBob3dldmVyIFt0aGlzXSBhbmQgW290aGVyXSB1c2UgZGlmZmVyZW50IGRlZmVycmVkCiAgICAvLyBpbXBvcnRzIGluIHRoZSBwcm9ncmFtLiBXZSBjYW4gbWFrZSB0aGlzIHN0YWJsZSBpZiB3ZSBzb3J0IGJhc2VkIG9uIHRoZQogICAgLy8gZGVmZXJyZWQgaW1wb3J0cyB0aGVtc2VsdmVzIChlLmcuIHRoZWlyIGRlY2xhcmF0aW9uIGxvY2F0aW9uKS4KICAgIHJldHVybiBuYW1lLmNvbXBhcmVUbyhvdGhlci5uYW1lKTsKICB9CgogIFNldDxJbXBvcnRFbnRpdHk+IGdldCBpbXBvcnRzRm9yVGVzdGluZyA9PiBfaW1wb3J0czsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIk91dHB1dFVuaXQoJG5hbWUsICRfaW1wb3J0cykiOwp9CgovLy8gRm9yIGVhY2ggZGVmZXJyZWQgaW1wb3J0LCBmaW5kIGVsZW1lbnRzIGFuZCBjb25zdGFudHMgdG8gYmUgbG9hZGVkIHdoZW4gdGhhdAovLy8gaW1wb3J0IGlzIGxvYWRlZC4gRWxlbWVudHMgdGhhdCBhcmUgdXNlZCBieSBzZXZlcmFsIGRlZmVycmVkIGltcG9ydHMgYXJlIGluCi8vLyBzaGFyZWQgT3V0cHV0VW5pdHMuCmFic3RyYWN0IGNsYXNzIERlZmVycmVkTG9hZFRhc2sgZXh0ZW5kcyBDb21waWxlclRhc2sgewogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiAnRGVmZXJyZWQgTG9hZGluZyc7CgogIC8vLyBUaGUgT3V0cHV0VW5pdCB0aGF0IHdpbGwgYmUgbG9hZGVkIHdoZW4gdGhlIHByb2dyYW0gc3RhcnRzLgogIE91dHB1dFVuaXQgX21haW5PdXRwdXRVbml0OwoKICAvLy8gQSBzZXQgY29udGFpbmluZyAoZXZlbnR1YWxseSkgYWxsIG91dHB1dCB1bml0cyB0aGF0IHdpbGwgcmVzdWx0IGZyb20gdGhlCiAgLy8vIHByb2dyYW0uCiAgZmluYWwgTGlzdDxPdXRwdXRVbml0PiBfYWxsT3V0cHV0VW5pdHMgPSBuZXcgTGlzdDxPdXRwdXRVbml0PigpOwoKICAvLy8gV2lsbCBiZSBgdHJ1ZWAgaWYgdGhlIHByb2dyYW0gY29udGFpbnMgZGVmZXJyZWQgbGlicmFyaWVzLgogIGJvb2wgaXNQcm9ncmFtU3BsaXQgPSBmYWxzZTsKCiAgc3RhdGljIGNvbnN0IEltcGFjdFVzZUNhc2UgSU1QQUNUX1VTRSA9IGNvbnN0IEltcGFjdFVzZUNhc2UoJ0RlZmVycmVkIGxvYWQnKTsKCiAgLy8vIEEgY2FjaGUgb2YgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGBjb21wdXRlSW1wb3J0RGVmZXJOYW1lYCBvbiB0aGUga2V5cyBvZgogIC8vLyB0aGlzIG1hcC4KICBmaW5hbCBNYXA8SW1wb3J0RW50aXR5LCBTdHJpbmc+IF9pbXBvcnREZWZlck5hbWUgPSA8SW1wb3J0RW50aXR5LCBTdHJpbmc+e307CgogIC8vLyBBIG1hcHBpbmcgZnJvbSBjbGFzc2VzIHRvIHRoZWlyIGltcG9ydCBzZXQuCiAgTWFwPENsYXNzRW50aXR5LCBJbXBvcnRTZXQ+IF9jbGFzc1RvU2V0ID0gbmV3IE1hcDxDbGFzc0VudGl0eSwgSW1wb3J0U2V0PigpOwoKICAvLy8gQSBtYXBwaW5nIGZyb20gbWVtYmVycyB0byB0aGVpciBpbXBvcnQgc2V0LgogIE1hcDxNZW1iZXJFbnRpdHksIEltcG9ydFNldD4gX21lbWJlclRvU2V0ID0KICAgICAgbmV3IE1hcDxNZW1iZXJFbnRpdHksIEltcG9ydFNldD4oKTsKCiAgLy8vIEEgbWFwcGluZyBmcm9tIGxvY2FsIGZ1bmN0aW9ucyB0byB0aGVpciBpbXBvcnQgc2V0LgogIE1hcDxMb2NhbCwgSW1wb3J0U2V0PiBfbG9jYWxGdW5jdGlvblRvU2V0ID0gbmV3IE1hcDxMb2NhbCwgSW1wb3J0U2V0PigpOwoKICAvLy8gQSBtYXBwaW5nIGZyb20gY29uc3RhbnRzIHRvIHRoZWlyIGltcG9ydCBzZXQuCiAgTWFwPENvbnN0YW50VmFsdWUsIEltcG9ydFNldD4gX2NvbnN0YW50VG9TZXQgPQogICAgICBuZXcgTWFwPENvbnN0YW50VmFsdWUsIEltcG9ydFNldD4oKTsKCiAgSXRlcmFibGU8SW1wb3J0RW50aXR5PiBnZXQgX2FsbERlZmVycmVkSW1wb3J0cyA9PgogICAgICBfZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnMua2V5czsKCiAgLy8vIEJlY2F1c2UgdGhlIHRva2VuLXN0cmVhbSBpcyBmb3Jnb3R0ZW4gbGF0ZXIgaW4gdGhlIHByb2dyYW0sIHdlIGNhY2hlIGEKICAvLy8gZGVzY3JpcHRpb24gb2YgZWFjaCBkZWZlcnJlZCBpbXBvcnQuCiAgZmluYWwgTWFwPEltcG9ydEVudGl0eSwgSW1wb3J0RGVzY3JpcHRpb24+IF9kZWZlcnJlZEltcG9ydERlc2NyaXB0aW9ucyA9CiAgICAgIDxJbXBvcnRFbnRpdHksIEltcG9ydERlc2NyaXB0aW9uPnt9OwoKICAvLy8gQSBsYXR0aWNlIHRvIGNvbXBhY3RseSByZXByZXNlbnQgbXVsdGlwbGUgc3Vic2V0cyBvZiBpbXBvcnRzLgogIGZpbmFsIEltcG9ydFNldExhdHRpY2UgaW1wb3J0U2V0cyA9IG5ldyBJbXBvcnRTZXRMYXR0aWNlKCk7CgogIGZpbmFsIENvbXBpbGVyIGNvbXBpbGVyOwoKICBib29sIGdldCBkaXNhYmxlUHJvZ3JhbVNwbGl0ID0+IGNvbXBpbGVyLm9wdGlvbnMuZGlzYWJsZVByb2dyYW1TcGxpdDsKICBib29sIGdldCBuZXdEZWZlcnJlZFNwbGl0ID0+IGNvbXBpbGVyLm9wdGlvbnMubmV3RGVmZXJyZWRTcGxpdDsKICBib29sIGdldCByZXBvcnRJbnZhbGlkSW5mZXJyZWREZWZlcnJlZFR5cGVzID0+CiAgICAgIGNvbXBpbGVyLm9wdGlvbnMucmVwb3J0SW52YWxpZEluZmVycmVkRGVmZXJyZWRUeXBlczsKCiAgRGVmZXJyZWRMb2FkVGFzayh0aGlzLmNvbXBpbGVyKSA6IHN1cGVyKGNvbXBpbGVyLm1lYXN1cmVyKSB7CiAgICBfbWFpbk91dHB1dFVuaXQgPSBuZXcgT3V0cHV0VW5pdCh0cnVlLCAnbWFpbicsIG5ldyBTZXQ8SW1wb3J0RW50aXR5PigpKTsKICAgIGltcG9ydFNldHMubWFpblNldC51bml0ID0gX21haW5PdXRwdXRVbml0OwogICAgX2FsbE91dHB1dFVuaXRzLmFkZChfbWFpbk91dHB1dFVuaXQpOwogIH0KCiAgS0VsZW1lbnRFbnZpcm9ubWVudCBnZXQgZWxlbWVudEVudmlyb25tZW50ID0+CiAgICAgIGNvbXBpbGVyLmZyb250ZW5kU3RyYXRlZ3kuZWxlbWVudEVudmlyb25tZW50OwoKICBDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHMgPT4gY29tcGlsZXIuZnJvbnRlbmRTdHJhdGVneS5jb21tb25FbGVtZW50czsKCiAgRGlhZ25vc3RpY1JlcG9ydGVyIGdldCByZXBvcnRlciA9PiBjb21waWxlci5yZXBvcnRlcjsKCiAgLy8vIEdpdmVuIFtpbXBvcnRzXSB0aGF0IHJlZmVyIHRvIGFuIGVsZW1lbnQgZnJvbSBhIGxpYnJhcnksIGRldGVybWluZSB3aGV0aGVyCiAgLy8vIHRoZSBlbGVtZW50IGlzIGV4cGxpY2l0bHkgZGVmZXJyZWQuCiAgc3RhdGljIGJvb2wgX2lzRXhwbGljaXRseURlZmVycmVkKEl0ZXJhYmxlPEltcG9ydEVudGl0eT4gaW1wb3J0cykgewogICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbm90IGltcG9ydGVkIGV4cGxpY2l0bHksIGl0IGlzIGltcGxpY2l0bHkgaW1wb3J0ZWQKICAgIC8vIG5vdCBkZWZlcnJlZC4KICAgIGlmIChpbXBvcnRzLmlzRW1wdHkpIHJldHVybiBmYWxzZTsKICAgIC8vIEFuIGVsZW1lbnQgY291bGQgcG90ZW50aWFsbHkgYmUgbG9hZGVkIGJ5IHNldmVyYWwgaW1wb3J0cy4gSWYgYWxsIG9mIHRoZW0KICAgIC8vIGlzIGV4cGxpY2l0bHkgZGVmZXJyZWQsIHdlIHNheSB0aGUgZWxlbWVudCBpcyBleHBsaWNpdGx5IGRlZmVycmVkLgogICAgLy8gVE9ETyhzaWd1cmRtKTogV2UgbWlnaHQgd2FudCB0byBnaXZlIGEgd2FybmluZyBpZiB0aGUgaW1wb3J0cyBkbyBub3QKICAgIC8vIGFncmVlLgogICAgcmV0dXJuIGltcG9ydHMuZXZlcnkoKEltcG9ydEVudGl0eSBpbXBvcnQpID0+IGltcG9ydC5pc0RlZmVycmVkKTsKICB9CgogIC8vLyBSZXR1cm5zIGV2ZXJ5IFtJbXBvcnRFbnRpdHldIHRoYXQgaW1wb3J0cyBbZWxlbWVudF0gaW50byBbbGlicmFyeV0uCiAgSXRlcmFibGU8SW1wb3J0RW50aXR5PiBjbGFzc0ltcG9ydHNUbygKICAgICAgQ2xhc3NFbnRpdHkgZWxlbWVudCwgTGlicmFyeUVudGl0eSBsaWJyYXJ5KTsKCiAgLy8vIFJldHVybnMgZXZlcnkgW0ltcG9ydEVudGl0eV0gdGhhdCBpbXBvcnRzIFtlbGVtZW50XSBpbnRvIFtsaWJyYXJ5XS4KICBJdGVyYWJsZTxJbXBvcnRFbnRpdHk+IG1lbWJlckltcG9ydHNUbygKICAgICAgTWVtYmVyRW50aXR5IGVsZW1lbnQsIExpYnJhcnlFbnRpdHkgbGlicmFyeSk7CgogIC8vLyBSZXR1cm5zIGV2ZXJ5IFtJbXBvcnRFbnRpdHldIHRoYXQgaW1wb3J0cyBbZWxlbWVudF0gaW50byBbbGlicmFyeV0uCiAgSXRlcmFibGU8SW1wb3J0RW50aXR5PiB0eXBlZGVmSW1wb3J0c1RvKAogICAgICBUeXBlZGVmRW50aXR5IGVsZW1lbnQsIExpYnJhcnlFbnRpdHkgbGlicmFyeSk7CgogIC8vLyBDb2xsZWN0cyBhbGwgZGlyZWN0IGRlcGVuZGVuY2llcyBvZiBbZWxlbWVudF0uCiAgLy8vCiAgLy8vIFRoZSBjb2xsZWN0ZWQgZGVwZW5kZW50IGVsZW1lbnRzIGFuZCBjb25zdGFudHMgYXJlIGFyZSBhZGRlZCB0bwogIC8vLyBbZWxlbWVudHNdIGFuZCBbY29uc3RhbnRzXSByZXNwZWN0aXZlbHkuCiAgdm9pZCBfY29sbGVjdERpcmVjdE1lbWJlckRlcGVuZGVuY2llcyhLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE1lbWJlckVudGl0eSBlbGVtZW50LCBEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzKSB7CiAgICAvLyBUT0RPKHNpZ3VyZG0pOiBXZSB3YW50IHRvIGJlIG1vcmUgc3BlY2lmaWMgYWJvdXQgdGhpcyAtIG5lZWQgYSBiZXR0ZXIKICAgIC8vIHdheSB0byBxdWVyeSAibGl2ZW5lc3MiLgogICAgaWYgKCFjb21waWxlci5yZXNvbHV0aW9uV29ybGRCdWlsZGVyLmlzTWVtYmVyVXNlZChlbGVtZW50KSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBfY29sbGVjdERlcGVuZGVuY2llc0Zyb21JbXBhY3QoY2xvc2VkV29ybGQsIGVsZW1lbnQsIGRlcGVuZGVuY2llcyk7CiAgICBjb2xsZWN0Q29uc3RhbnRzSW5Cb2R5KGVsZW1lbnQsIGRlcGVuZGVuY2llcyk7CiAgfQoKICAvLy8gRmluZHMgYWxsIGVsZW1lbnRzIGFuZCBjb25zdGFudHMgdGhhdCBbZWxlbWVudF0gZGVwZW5kcyBkaXJlY3RseSBvbi4KICAvLy8gKG5vdCB0aGUgdHJhbnNpdGl2ZSBjbG9zdXJlLikKICAvLy8KICAvLy8gQWRkcyB0aGUgcmVzdWx0cyB0byBbZWxlbWVudHNdIGFuZCBbY29uc3RhbnRzXS4KICB2b2lkIF9jb2xsZWN0QWxsRWxlbWVudHNBbmRDb25zdGFudHNSZXNvbHZlZEZyb21DbGFzcygKICAgICAgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBDbGFzc0VudGl0eSBlbGVtZW50LAogICAgICBEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzKSB7CiAgICAvLyBJZiB3ZSBzZWUgYSBjbGFzcywgYWRkIGV2ZXJ5dGhpbmcgaXRzIGxpdmUgaW5zdGFuY2UgbWVtYmVycyByZWZlcgogICAgLy8gdG8uICBTdGF0aWMgbWVtYmVycyBhcmUgbm90IHJlbGV2YW50LCB1bmxlc3Mgd2UgYXJlIHByb2Nlc3NpbmcKICAgIC8vIGV4dHJhIGRlcGVuZGVuY2llcyBkdWUgdG8gbWlycm9ycy4KICAgIHZvaWQgYWRkTGl2ZUluc3RhbmNlTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgaWYgKCFjb21waWxlci5yZXNvbHV0aW9uV29ybGRCdWlsZGVyLmlzTWVtYmVyVXNlZChtZW1iZXIpKSByZXR1cm47CiAgICAgIGlmICghbWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHJldHVybjsKICAgICAgZGVwZW5kZW5jaWVzLmFkZE1lbWJlcihtZW1iZXIpOwogICAgICBfY29sbGVjdERpcmVjdE1lbWJlckRlcGVuZGVuY2llcyhjbG9zZWRXb3JsZCwgbWVtYmVyLCBkZXBlbmRlbmNpZXMpOwogICAgfQoKICAgIENsYXNzRW50aXR5IGNscyA9IGVsZW1lbnQ7CiAgICBlbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaExvY2FsQ2xhc3NNZW1iZXIoY2xzLCBhZGRMaXZlSW5zdGFuY2VNZW1iZXIpOwogICAgZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hTdXBlcnR5cGUoY2xzLCAoSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICAgIF9jb2xsZWN0VHlwZURlcGVuZGVuY2llcyh0eXBlLCBkZXBlbmRlbmNpZXMpOwogICAgfSk7CiAgICBkZXBlbmRlbmNpZXMuYWRkQ2xhc3MoY2xzKTsKICB9CgogIC8vLyBGaW5kcyBhbGwgZWxlbWVudHMgYW5kIGNvbnN0YW50cyB0aGF0IFtlbGVtZW50XSBkZXBlbmRzIGRpcmVjdGx5IG9uLgogIC8vLyAobm90IHRoZSB0cmFuc2l0aXZlIGNsb3N1cmUuKQogIC8vLwogIC8vLyBBZGRzIHRoZSByZXN1bHRzIHRvIFtlbGVtZW50c10gYW5kIFtjb25zdGFudHNdLgogIHZvaWQgX2NvbGxlY3RBbGxFbGVtZW50c0FuZENvbnN0YW50c1Jlc29sdmVkRnJvbU1lbWJlcigKICAgICAgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCwKICAgICAgRGVwZW5kZW5jaWVzIGRlcGVuZGVuY2llcykgewogICAgaWYgKGVsZW1lbnQgaXMgRnVuY3Rpb25FbnRpdHkpIHsKICAgICAgX2NvbGxlY3RUeXBlRGVwZW5kZW5jaWVzKAogICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShlbGVtZW50KSwgZGVwZW5kZW5jaWVzKTsKICAgIH0KICAgIGlmIChlbGVtZW50LmlzU3RhdGljIHx8IGVsZW1lbnQuaXNUb3BMZXZlbCB8fCBlbGVtZW50LmlzQ29uc3RydWN0b3IpIHsKICAgICAgZGVwZW5kZW5jaWVzLmFkZE1lbWJlcihlbGVtZW50KTsKICAgICAgX2NvbGxlY3REaXJlY3RNZW1iZXJEZXBlbmRlbmNpZXMoY2xvc2VkV29ybGQsIGVsZW1lbnQsIGRlcGVuZGVuY2llcyk7CiAgICB9CiAgICBpZiAoZWxlbWVudCBpcyBDb25zdHJ1Y3RvckVudGl0eSAmJiBlbGVtZW50LmlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yKSB7CiAgICAgIC8vIFdoZW4gaW5zdGFudGlhdGluZyBhIGNsYXNzLCB3ZSByZWNvcmQgYSByZWZlcmVuY2UgdG8gdGhlCiAgICAgIC8vIGNvbnN0cnVjdG9yLCBub3QgdGhlIGNsYXNzIGl0c2VsZi4gIFdlIG11c3QgYWRkIGFsbCB0aGUKICAgICAgLy8gaW5zdGFuY2UgbWVtYmVycyBvZiB0aGUgY29uc3RydWN0b3IncyBjbGFzcy4KICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgICAgX2NvbGxlY3RBbGxFbGVtZW50c0FuZENvbnN0YW50c1Jlc29sdmVkRnJvbUNsYXNzKAogICAgICAgICAgY2xvc2VkV29ybGQsIGNscywgZGVwZW5kZW5jaWVzKTsKICAgIH0KCiAgICAvLyBPdGhlciBlbGVtZW50cywgaW4gcGFydGljdWxhciBpbnN0YW5jZSBtZW1iZXJzLCBhcmUgaWdub3JlZCBhcwogICAgLy8gdGhleSBhcmUgcHJvY2Vzc2VkIGFzIHBhcnQgb2YgdGhlIGNsYXNzLgogIH0KCiAgLy8vIEV4dHJhY3QgdGhlIHNldCBvZiBjb25zdGFudHMgdGhhdCBhcmUgdXNlZCBpbiBhbm5vdGF0aW9ucyBvZiBbZWxlbWVudF0uCiAgLy8vCiAgLy8vIElmIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBkb2Vzbid0IHN1cHBvcnQgbWlycm9ycywgdGhlbiBubyBjb25zdGFudHMgYXJlCiAgLy8vIGFkZGVkLgogIHZvaWQgY29sbGVjdENvbnN0YW50c0Zyb21NZXRhZGF0YSgKICAgICAgRW50aXR5IGVsZW1lbnQsIFNldDxDb25zdGFudFZhbHVlPiBjb25zdGFudHMpOwoKICAvLy8gRXh0cmFjdCB0aGUgc2V0IG9mIGNvbnN0YW50cyB0aGF0IGFyZSB1c2VkIGluIHRoZSBib2R5IG9mIFtlbGVtZW50XS4KICB2b2lkIGNvbGxlY3RDb25zdGFudHNJbkJvZHkoTWVtYmVyRW50aXR5IGVsZW1lbnQsIERlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMpOwoKICAvLy8gUmVjdXJzaXZlbHkgY29sbGVjdHMgYWxsIHRoZSBkZXBlbmRlbmNpZXMgb2YgW3R5cGVdLgogIHZvaWQgX2NvbGxlY3RUeXBlRGVwZW5kZW5jaWVzKERhcnRUeXBlIHR5cGUsIERlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMsCiAgICAgIFtJbXBvcnRFbnRpdHkgaW1wb3J0XSkgewogICAgbmV3IFR5cGVEZXBlbmRlbmN5VmlzaXRvcihkZXBlbmRlbmNpZXMsIGltcG9ydCwgY29tbW9uRWxlbWVudHMpLnZpc2l0KHR5cGUpOwogIH0KCiAgdm9pZCBfY29sbGVjdFR5cGVBcmd1bWVudERlcGVuZGVuY2llcygKICAgICAgSXRlcmFibGU8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsIERlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMsCiAgICAgIFtJbXBvcnRFbnRpdHkgaW1wb3J0XSkgewogICAgaWYgKHR5cGVBcmd1bWVudHMgPT0gbnVsbCkgcmV0dXJuOwogICAgbmV3IFR5cGVEZXBlbmRlbmN5VmlzaXRvcihkZXBlbmRlbmNpZXMsIGltcG9ydCwgY29tbW9uRWxlbWVudHMpCiAgICAgICAgLnZpc2l0TGlzdCh0eXBlQXJndW1lbnRzKTsKICB9CgogIC8vLyBFeHRyYWN0IGFueSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUga25vd24gZnJvbSB0aGUgaW1wYWN0IG9mIFtlbGVtZW50XS4KICB2b2lkIF9jb2xsZWN0RGVwZW5kZW5jaWVzRnJvbUltcGFjdChLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE1lbWJlckVudGl0eSBlbGVtZW50LCBEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzKSB7CiAgICBXb3JsZEltcGFjdCB3b3JsZEltcGFjdCA9IGNvbXBpbGVyLmltcGFjdENhY2hlW2VsZW1lbnRdOwogICAgY29tcGlsZXIuaW1wYWN0U3RyYXRlZ3kudmlzaXRJbXBhY3QoCiAgICAgICAgZWxlbWVudCwKICAgICAgICB3b3JsZEltcGFjdCwKICAgICAgICBuZXcgV29ybGRJbXBhY3RWaXNpdG9ySW1wbCgKICAgICAgICAgICAgdmlzaXRTdGF0aWNVc2U6IChNZW1iZXJFbnRpdHkgbWVtYmVyLCBTdGF0aWNVc2Ugc3RhdGljVXNlKSB7CiAgICAgICAgICBFbnRpdHkgdXNlZEVudGl0eSA9IHN0YXRpY1VzZS5lbGVtZW50OwogICAgICAgICAgaWYgKHVzZWRFbnRpdHkgaXMgTWVtYmVyRW50aXR5KSB7CiAgICAgICAgICAgIGRlcGVuZGVuY2llcy5hZGRNZW1iZXIodXNlZEVudGl0eSwgc3RhdGljVXNlLmRlZmVycmVkSW1wb3J0KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGFzc2VydCh1c2VkRW50aXR5IGlzIEtMb2NhbEZ1bmN0aW9uLAogICAgICAgICAgICAgICAgZmFpbGVkQXQodXNlZEVudGl0eSwgIlVuZXhwZWN0ZWQgc3RhdGljIHVzZSAkc3RhdGljVXNlLiIpKTsKICAgICAgICAgICAgS0xvY2FsRnVuY3Rpb24gbG9jYWxGdW5jdGlvbiA9IHVzZWRFbnRpdHk7CiAgICAgICAgICAgIC8vIFRPRE8oc3JhKTogQ29uc3VsdCBLQ2xvc2VkV29ybGQgdG8gc2VlIGlmIHNpZ25hdHVyZSBpcyBuZWVkZWQuCiAgICAgICAgICAgIF9jb2xsZWN0VHlwZURlcGVuZGVuY2llcyhsb2NhbEZ1bmN0aW9uLmZ1bmN0aW9uVHlwZSwgZGVwZW5kZW5jaWVzKTsKICAgICAgICAgICAgZGVwZW5kZW5jaWVzLmxvY2FsRnVuY3Rpb25zLmFkZChsb2NhbEZ1bmN0aW9uKTsKICAgICAgICAgIH0KICAgICAgICAgIHN3aXRjaCAoc3RhdGljVXNlLmtpbmQpIHsKICAgICAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNPTlNUUlVDVE9SX0lOVk9LRToKICAgICAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNPTlNUX0NPTlNUUlVDVE9SX0lOVk9LRToKICAgICAgICAgICAgICAvLyBUaGUgcmVjZWl2ZXIgdHlwZSBvZiBnZW5lcmF0aXZlIGNvbnN0cnVjdG9ycyBpcyBhIGRlcGVuZGVuY3kgb2YKICAgICAgICAgICAgICAvLyB0aGUgY29uc3RydWN0b3IgKGhhbmRsZWQgYnkgYGFkZE1lbWJlcmAgYWJvdmUpIGFuZCBub3QgYQogICAgICAgICAgICAgIC8vIGRlcGVuZGVuY3kgYXQgdGhlIGNhbGwgc2l0ZS4KICAgICAgICAgICAgICAvLyBGYWN0b3J5IG1ldGhvZHMsIG9uIHRoZSBvdGhlciBoYW5kLCBhcmUgbGlrZSBzdGF0aWMgbWV0aG9kcyBzbwogICAgICAgICAgICAgIC8vIHRoZSB0YXJnZXQgdHlwZSBpcyBub3QgcmVsZXZhbnQuCiAgICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHJ0aSBuZWVkIGRhdGEgdG8gc2tpcCB1bm5lZWRlZCB0eXBlCiAgICAgICAgICAgICAgLy8gYXJndW1lbnRzLgogICAgICAgICAgICAgIF9jb2xsZWN0VHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzKAogICAgICAgICAgICAgICAgICBzdGF0aWNVc2UudHlwZS50eXBlQXJndW1lbnRzLCBkZXBlbmRlbmNpZXMpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX0lOVk9LRToKICAgICAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNMT1NVUkVfQ0FMTDoKICAgICAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkRJUkVDVF9JTlZPS0U6CiAgICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHJ0aSBuZWVkIGRhdGEgdG8gc2tpcCB1bm5lZWRlZCB0eXBlCiAgICAgICAgICAgICAgLy8gYXJndW1lbnRzLgogICAgICAgICAgICAgIF9jb2xsZWN0VHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzKAogICAgICAgICAgICAgICAgICBzdGF0aWNVc2UudHlwZUFyZ3VtZW50cywgZGVwZW5kZW5jaWVzKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIH0KICAgICAgICB9LCB2aXNpdFR5cGVVc2U6IChNZW1iZXJFbnRpdHkgbWVtYmVyLCBUeXBlVXNlIHR5cGVVc2UpIHsKICAgICAgICAgIERhcnRUeXBlIHR5cGUgPSB0eXBlVXNlLnR5cGU7CiAgICAgICAgICBzd2l0Y2ggKHR5cGVVc2Uua2luZCkgewogICAgICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLlRZUEVfTElURVJBTDoKICAgICAgICAgICAgICBpZiAodHlwZS5pc0ludGVyZmFjZVR5cGUpIHsKICAgICAgICAgICAgICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlID0gdHlwZTsKICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llcy5hZGRDbGFzcygKICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UuZWxlbWVudCwgdHlwZVVzZS5kZWZlcnJlZEltcG9ydCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLkNPTlNUX0lOU1RBTlRJQVRJT046CiAgICAgICAgICAgICAgX2NvbGxlY3RUeXBlRGVwZW5kZW5jaWVzKAogICAgICAgICAgICAgICAgICB0eXBlLCBkZXBlbmRlbmNpZXMsIHR5cGVVc2UuZGVmZXJyZWRJbXBvcnQpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLklOU1RBTlRJQVRJT046CiAgICAgICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuTkFUSVZFX0lOU1RBTlRJQVRJT046CiAgICAgICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuSVNfQ0hFQ0s6CiAgICAgICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQ0FUQ0hfVFlQRToKICAgICAgICAgICAgICBfY29sbGVjdFR5cGVEZXBlbmRlbmNpZXModHlwZSwgZGVwZW5kZW5jaWVzKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5BU19DQVNUOgogICAgICAgICAgICAgIGlmIChjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgICAgICAgICAgLmdldEV4cGxpY2l0Q2FzdENoZWNrUG9saWN5KGVsZW1lbnQpCiAgICAgICAgICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICAgICAgICAgIF9jb2xsZWN0VHlwZURlcGVuZGVuY2llcyh0eXBlLCBkZXBlbmRlbmNpZXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5JTVBMSUNJVF9DQVNUOgogICAgICAgICAgICAgIGlmIChjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgICAgICAgICAgLmdldEltcGxpY2l0RG93bmNhc3RDaGVja1BvbGljeShlbGVtZW50KQogICAgICAgICAgICAgICAgICAuaXNFbWl0dGVkKSB7CiAgICAgICAgICAgICAgICBfY29sbGVjdFR5cGVEZXBlbmRlbmNpZXModHlwZSwgZGVwZW5kZW5jaWVzKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuUEFSQU1FVEVSX0NIRUNLOgogICAgICAgICAgICAgIGlmIChjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgICAgICAgICAgLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KGVsZW1lbnQpCiAgICAgICAgICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICAgICAgICAgIF9jb2xsZWN0VHlwZURlcGVuZGVuY2llcyh0eXBlLCBkZXBlbmRlbmNpZXMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5SVElfVkFMVUU6CiAgICAgICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuVFlQRV9BUkdVTUVOVDoKICAgICAgICAgICAgICBmYWlsZWRBdChlbGVtZW50LCAiVW5leHBlY3RlZCB0eXBlIHVzZTogJHR5cGVVc2UuIik7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSwgdmlzaXREeW5hbWljVXNlOiAoTWVtYmVyRW50aXR5IG1lbWJlciwgRHluYW1pY1VzZSBkeW5hbWljVXNlKSB7CiAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgcnRpIG5lZWQgZGF0YSB0byBza2lwIHVubmVlZGVkIHR5cGUKICAgICAgICAgIC8vIGFyZ3VtZW50cy4KICAgICAgICAgIF9jb2xsZWN0VHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzKAogICAgICAgICAgICAgIGR5bmFtaWNVc2UudHlwZUFyZ3VtZW50cywgZGVwZW5kZW5jaWVzKTsKICAgICAgICB9KSwKICAgICAgICBEZWZlcnJlZExvYWRUYXNrLklNUEFDVF9VU0UpOwogIH0KCiAgLy8vIFVwZGF0ZSB0aGUgaW1wb3J0IHNldCBvZiBhbGwgY29uc3RhbnRzIHJlYWNoYWJsZSBmcm9tIFtjb25zdGFudF0sIGFzIGxvbmcKICAvLy8gYXMgdGhleSBoYWQgdGhlIFtvbGRTZXRdLiBBcyBzb29uIGFzIHdlIHNlZSBhIGNvbnN0YW50IHdpdGggYSBkaWZmZXJlbnQKICAvLy8gaW1wb3J0IHNldCwgd2Ugc3RvcCBhbmQgZW5xdWV1ZSBhIG5ldyByZWN1cnNpdmUgdXBkYXRlIGluIFtxdWV1ZV0uCiAgLy8vCiAgLy8vIEludmFyaWFudHM6IG9sZFNldCBpcyBlaXRoZXIgbnVsbCBvciBhIHN1YnNldCBvZiBuZXdTZXQuCiAgdm9pZCBfdXBkYXRlQ29uc3RhbnRSZWN1cnNpdmUoCiAgICAgIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwKICAgICAgSW1wb3J0U2V0IG9sZFNldCwKICAgICAgSW1wb3J0U2V0IG5ld1NldCwKICAgICAgV29ya1F1ZXVlIHF1ZXVlKSB7CiAgICBpZiAoY29uc3RhbnQgPT0gbnVsbCkgcmV0dXJuOwogICAgdmFyIGN1cnJlbnRTZXQgPSBfY29uc3RhbnRUb1NldFtjb25zdGFudF07CgogICAgLy8gQWxyZWFkeSB2aXNpdGVkLgogICAgaWYgKGN1cnJlbnRTZXQgPT0gbmV3U2V0KSByZXR1cm47CgogICAgLy8gRWxlbWVudHMgaW4gdGhlIG1haW4gb3V0cHV0IHVuaXQgYWx3YXlzIHJlbWFpbiB0aGVyZS4KICAgIGlmIChjdXJyZW50U2V0ID09IGltcG9ydFNldHMubWFpblNldCkgcmV0dXJuOwoKICAgIGlmIChjdXJyZW50U2V0ID09IG9sZFNldCkgewogICAgICBfY29uc3RhbnRUb1NldFtjb25zdGFudF0gPSBuZXdTZXQ7CiAgICAgIGlmIChjb25zdGFudCBpcyBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUpIHsKICAgICAgICBDbGFzc0VudGl0eSBjbHMgPSBjb25zdGFudC50eXBlLmVsZW1lbnQ7CiAgICAgICAgX3VwZGF0ZUNsYXNzUmVjdXJzaXZlKGNsb3NlZFdvcmxkLCBjbHMsIG9sZFNldCwgbmV3U2V0LCBxdWV1ZSk7CiAgICAgIH0KICAgICAgaWYgKGNvbnN0YW50IGlzIEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlKSB7CiAgICAgICAgZm9yIChEYXJ0VHlwZSB0eXBlIGluIGNvbnN0YW50LnR5cGVBcmd1bWVudHMpIHsKICAgICAgICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICAgICAgX3VwZGF0ZUNsYXNzUmVjdXJzaXZlKAogICAgICAgICAgICAgICAgY2xvc2VkV29ybGQsIHR5cGUuZWxlbWVudCwgb2xkU2V0LCBuZXdTZXQsIHF1ZXVlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3RhbnQuZ2V0RGVwZW5kZW5jaWVzKCkuZm9yRWFjaCgoQ29uc3RhbnRWYWx1ZSBkZXBlbmRlbmN5KSB7CiAgICAgICAgLy8gQ29uc3RhbnRzIGFyZSBub3QgYWxsb3dlZCB0byByZWZlciB0byBkZWZlcnJlZCBjb25zdGFudHMsIHNvCiAgICAgICAgLy8gbm8gbmVlZCB0byBjaGVjayBmb3IgYSBkZWZlcnJlZCB0eXBlIGxpdGVyYWwgaGVyZS4KICAgICAgICBfdXBkYXRlQ29uc3RhbnRSZWN1cnNpdmUoCiAgICAgICAgICAgIGNsb3NlZFdvcmxkLCBkZXBlbmRlbmN5LCBvbGRTZXQsIG5ld1NldCwgcXVldWUpOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydCgKICAgICAgICAgIC8vIEludmFyaWFudDogd2UgbXVzdCBtYXJrIG1haW4gYmVmb3JlIHdlIG1hcmsgYW55IGRlZmVycmVkIGltcG9ydC4KICAgICAgICAgIG5ld1NldCAhPSBpbXBvcnRTZXRzLm1haW5TZXQgfHwgb2xkU2V0ICE9IG51bGwsCiAgICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICAgIlRyaWVkIHRvIGFzc2lnbiAke2NvbnN0YW50LnRvRGFydFRleHQoKX0gdG8gdGhlIG1haW4gb3V0cHV0ICIKICAgICAgICAgICAgICAidW5pdCwgYnV0IGl0IHdhcyBhc3NpZ25lZCB0byAkY3VycmVudFNldC4iKSk7CiAgICAgIHF1ZXVlLmFkZENvbnN0YW50KGNvbnN0YW50LCBuZXdTZXQpOwogICAgfQogIH0KCiAgdm9pZCBfdXBkYXRlQ2xhc3NSZWN1cnNpdmUoS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBDbGFzc0VudGl0eSBlbGVtZW50LAogICAgICBJbXBvcnRTZXQgb2xkU2V0LCBJbXBvcnRTZXQgbmV3U2V0LCBXb3JrUXVldWUgcXVldWUpIHsKICAgIGlmIChlbGVtZW50ID09IG51bGwpIHJldHVybjsKCiAgICBJbXBvcnRTZXQgY3VycmVudFNldCA9IF9jbGFzc1RvU2V0W2VsZW1lbnRdOwoKICAgIC8vIEFscmVhZHkgdmlzaXRlZC4gV2UgbWF5IHZpc2l0IHNvbWUgcm9vdCBub2RlcyBhIHNlY29uZCB0aW1lIHdpdGgKICAgIC8vIFtpc01pcnJvclVzYWdlXSBpbiBvcmRlciB0byBtYXJrIHN0YXRpYyBtZW1iZXJzIHVzZWQgcmVmbGVjdGl2ZWx5LgogICAgaWYgKGN1cnJlbnRTZXQgPT0gbmV3U2V0KSByZXR1cm47CgogICAgLy8gRWxlbWVudHMgaW4gdGhlIG1haW4gb3V0cHV0IHVuaXQgYWx3YXlzIHJlbWFpbiB0aGVyZS4KICAgIGlmIChjdXJyZW50U2V0ID09IGltcG9ydFNldHMubWFpblNldCkgcmV0dXJuOwoKICAgIGlmIChjdXJyZW50U2V0ID09IG9sZFNldCkgewogICAgICAvLyBDb250aW51ZSByZWN1cnNpdmVseSB1cGRhdGluZyBmcm9tIFtvbGRTZXRdIHRvIFtuZXdTZXRdLgogICAgICBfY2xhc3NUb1NldFtlbGVtZW50XSA9IG5ld1NldDsKCiAgICAgIERlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMgPSBuZXcgRGVwZW5kZW5jaWVzKCk7CiAgICAgIF9jb2xsZWN0QWxsRWxlbWVudHNBbmRDb25zdGFudHNSZXNvbHZlZEZyb21DbGFzcygKICAgICAgICAgIGNsb3NlZFdvcmxkLCBlbGVtZW50LCBkZXBlbmRlbmNpZXMpOwogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnkgPSBlbGVtZW50LmxpYnJhcnk7CiAgICAgIF9wcm9jZXNzRGVwZW5kZW5jaWVzKAogICAgICAgICAgY2xvc2VkV29ybGQsIGxpYnJhcnksIGRlcGVuZGVuY2llcywgb2xkU2V0LCBuZXdTZXQsIHF1ZXVlLCBlbGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIHF1ZXVlLmFkZENsYXNzKGVsZW1lbnQsIG5ld1NldCk7CiAgICB9CiAgfQoKICB2b2lkIF91cGRhdGVNZW1iZXJSZWN1cnNpdmUoS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBNZW1iZXJFbnRpdHkgZWxlbWVudCwKICAgICAgSW1wb3J0U2V0IG9sZFNldCwgSW1wb3J0U2V0IG5ld1NldCwgV29ya1F1ZXVlIHF1ZXVlKSB7CiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSByZXR1cm47CgogICAgSW1wb3J0U2V0IGN1cnJlbnRTZXQgPSBfbWVtYmVyVG9TZXRbZWxlbWVudF07CgogICAgLy8gQWxyZWFkeSB2aXNpdGVkLiBXZSBtYXkgdmlzaXQgc29tZSByb290IG5vZGVzIGEgc2Vjb25kIHRpbWUgd2l0aAogICAgLy8gW2lzTWlycm9yVXNhZ2VdIGluIG9yZGVyIHRvIG1hcmsgc3RhdGljIG1lbWJlcnMgdXNlZCByZWZsZWN0aXZlbHkuCiAgICBpZiAoY3VycmVudFNldCA9PSBuZXdTZXQpIHJldHVybjsKCiAgICAvLyBFbGVtZW50cyBpbiB0aGUgbWFpbiBvdXRwdXQgdW5pdCBhbHdheXMgcmVtYWluIHRoZXJlLgogICAgaWYgKGN1cnJlbnRTZXQgPT0gaW1wb3J0U2V0cy5tYWluU2V0KSByZXR1cm47CgogICAgaWYgKGN1cnJlbnRTZXQgPT0gb2xkU2V0KSB7CiAgICAgIC8vIENvbnRpbnVlIHJlY3Vyc2l2ZWx5IHVwZGF0aW5nIGZyb20gW29sZFNldF0gdG8gW25ld1NldF0uCiAgICAgIF9tZW1iZXJUb1NldFtlbGVtZW50XSA9IG5ld1NldDsKCiAgICAgIERlcGVuZGVuY2llcyBkZXBlbmRlbmNpZXMgPSBuZXcgRGVwZW5kZW5jaWVzKCk7CiAgICAgIF9jb2xsZWN0QWxsRWxlbWVudHNBbmRDb25zdGFudHNSZXNvbHZlZEZyb21NZW1iZXIoCiAgICAgICAgICBjbG9zZWRXb3JsZCwgZWxlbWVudCwgZGVwZW5kZW5jaWVzKTsKCiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSA9IGVsZW1lbnQubGlicmFyeTsKICAgICAgX3Byb2Nlc3NEZXBlbmRlbmNpZXMoCiAgICAgICAgICBjbG9zZWRXb3JsZCwgbGlicmFyeSwgZGVwZW5kZW5jaWVzLCBvbGRTZXQsIG5ld1NldCwgcXVldWUsIGVsZW1lbnQpOwogICAgfSBlbHNlIHsKICAgICAgcXVldWUuYWRkTWVtYmVyKGVsZW1lbnQsIG5ld1NldCk7CiAgICB9CiAgfQoKICB2b2lkIF91cGRhdGVMb2NhbEZ1bmN0aW9uKAogICAgICBMb2NhbCBsb2NhbEZ1bmN0aW9uLCBJbXBvcnRTZXQgb2xkU2V0LCBJbXBvcnRTZXQgbmV3U2V0KSB7CiAgICBJbXBvcnRTZXQgY3VycmVudFNldCA9IF9sb2NhbEZ1bmN0aW9uVG9TZXRbbG9jYWxGdW5jdGlvbl07CiAgICBpZiAoY3VycmVudFNldCA9PSBuZXdTZXQpIHJldHVybjsKCiAgICAvLyBFbGVtZW50cyBpbiB0aGUgbWFpbiBvdXRwdXQgdW5pdCBhbHdheXMgcmVtYWluIHRoZXJlLgogICAgaWYgKGN1cnJlbnRTZXQgPT0gaW1wb3J0U2V0cy5tYWluU2V0KSByZXR1cm47CgogICAgaWYgKGN1cnJlbnRTZXQgPT0gb2xkU2V0KSB7CiAgICAgIF9sb2NhbEZ1bmN0aW9uVG9TZXRbbG9jYWxGdW5jdGlvbl0gPSBuZXdTZXQ7CiAgICB9IGVsc2UgewogICAgICBfbG9jYWxGdW5jdGlvblRvU2V0W2xvY2FsRnVuY3Rpb25dID0gaW1wb3J0U2V0cy51bmlvbihjdXJyZW50U2V0LCBuZXdTZXQpOwogICAgfQogICAgLy8gTm90ZTogbG9jYWwgZnVuY3Rpb25zIGFyZSBub3QgdXBkYXRlZCByZWN1cnNpdmVseSBiZWNhdXNlIHRoZQogICAgLy8gZGVwZW5kZW5jaWVzIGFyZSBhbHJlYWR5IHZpc2l0ZWQgYXMgZGVwZW5kZW5jaWVzIG9mIHRoZSBlbmNsb3NpbmcgbWVtYmVyLgogIH0KCiAgLy8vIFdoZXRoZXIgdG8gZW5xdWV1ZSBhIGRlZmVycmVkIGRlcGVuZGVuY3kuCiAgLy8vCiAgLy8vIER1ZSB0byB0aGUgbmF0dXJlIG9mIHRoZSBhbGdvcml0aG0sIHNvbWUgZGVwZW5kZW5jaWVzIG1heSBiZSB2aXNpdGVkIG1vcmUKICAvLy8gdGhhbiBvbmNlLiBIb3dldmVyLCB3ZSBrbm93IHRoYXQgbmV3IGRlZmVycmVkLWltcG9ydHMgYXJlIG9ubHkgZGlzY292ZXJlZAogIC8vLyB3aGVuIHdlIGFyZSB2aXNpdGluZyB0aGUgbWFpbiBvdXRwdXQgdW5pdCAoc2l6ZSA9PSAwKSBvciBjb2RlIHJlYWNoYWJsZQogIC8vLyBmcm9tIGEgZGVmZXJyZWQgaW1wb3J0IChzaXplID09IDEpLiBBZnRlciB0aGF0LCB3ZSBhcmUgcmVkaXNjb3ZlcmluZyB0aGUKICAvLy8gc2FtZSBub2RlcyB3ZSBoYXZlIGFscmVhZHkgc2Vlbi4KICBfc2hvdWxkQWRkRGVmZXJyZWREZXBlbmRlbmN5KEltcG9ydFNldCBuZXdTZXQpID0+IG5ld1NldC5sZW5ndGggPD0gMTsKCiAgdm9pZCBfZml4RGVwZW5kZW5jeUluZm8oRGVwZW5kZW5jeUluZm8gaW5mbywgTGlzdDxJbXBvcnRFbnRpdHk+IGltcG9ydHMsCiAgICAgIFN0cmluZyBwcmVmaXgsIFN0cmluZyBuYW1lLCBTcGFubmFibGUgY29udGV4dCkgewogICAgdmFyIGlzRGVmZXJyZWQgPSBfaXNFeHBsaWNpdGx5RGVmZXJyZWQoaW1wb3J0cyk7CiAgICBpZiAoaXNEZWZlcnJlZCkgewogICAgICBpZiAoIW5ld0RlZmVycmVkU3BsaXQpIHsKICAgICAgICBpbmZvLmlzRGVmZXJyZWQgPSB0cnVlOwogICAgICAgIGluZm8uaW1wb3J0cyA9IGltcG9ydHM7CiAgICAgIH0KICAgICAgaWYgKHJlcG9ydEludmFsaWRJbmZlcnJlZERlZmVycmVkVHlwZXMpIHsKICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoY29udGV4dCwgTWVzc2FnZUtpbmQuR0VORVJJQywgewogICAgICAgICAgJ3RleHQnOiAiJHByZWZpeCAnJG5hbWUnIGlzIGRlZmVycmVkIGJ1dCBhcHBlYXJzIHRvIGJlIGluZmVycmVkIGFzIgogICAgICAgICAgICAgICIgYSByZXR1cm4gdHlwZSBvciBhIHR5cGUgcGFyYW1ldGVyIChkYXJ0YnVnLmNvbS8zNTMxMSkuIgogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgfQoKICAvLyBUaGUgZm9sbG93aW5nIDMgbWV0aG9kcyBhcmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIHRoZSBuZXcgZGVmZXJyZWQgc3BsaXQKICAvLyBhbGdvcml0aG0gYW5kIHRoZSBvbGQgb25lIG1hdGNoLiBCZWNhdXNlIG9mIGEgc291bmRuZXNzIGJ1ZyBpbiB0aGUgb2xkCiAgLy8gYWxnb3JpdGhtIHRoZSBuZXcgYWxnb3JpdGhtIGNhbiBwdWxsIGluIGEgbG90IG9mIGNvZGUgdG8gdGhlIG1haW4gb3V0cHV0CiAgLy8gdW5pdC4gVGhpcyBsb2dpYyBkZXRlY3RzIGl0IGFuZCB3aWxsIG1ha2UgaXQgZWFzaWVyIGZvciB1cyB0byBtaWdyYXRlIGNvZGUKICAvLyBvZmYgaXQgaW5jcmVtZW50YWxseS4KICAvLyBOb3RlOiB3ZSBvbmx5IGV4cGVjdCBkaXNjcmVwYW5jaWVzIG9uIGNsYXNzLWRlcGVuZGVuY3ktaW5mbyBkdWUgdG8gaG93CiAgLy8gaW5mZXJyZWQgdHlwZXMgZXhwb3NlIGRlZmVycmVkIHR5cGVzIGluIHR5cGUtdmFyaWFibGVzIGFuZCByZXR1cm4gdHlwZXMKICAvLyAoSXNzdWUgIzM1MzExKS4gV2UgYWRkZWQgdGhlIG90aGVyIHR3byBtZXRob2RzIHRvIHRlc3Qgb3VyIHRyYW5zaXRpb24sIGJ1dAogIC8vIHdlIGRvbid0IGV4cGVjdCB0byBkZXRlY3QgYW55IG1pc21hdGNoZXMgdGhlcmUuCiAgLy8KICAvLyBUT0RPKHNpZ211bmQpOiBkZWxldGUgb25jZSB0aGUgbmV3IGltcGxlbWVudGF0aW9uIGlzIG9uIGJ5IGRlZmF1bHQuCiAgdm9pZCBfZml4Q2xhc3NEZXBlbmRlbmN5SW5mbyhEZXBlbmRlbmN5SW5mbyBpbmZvLCBDbGFzc0VudGl0eSBjbHMsCiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSwgU3Bhbm5hYmxlIGNvbnRleHQpIHsKICAgIGlmIChpbmZvLmlzRGVmZXJyZWQpIHJldHVybjsKICAgIGlmIChuZXdEZWZlcnJlZFNwbGl0ICYmICFyZXBvcnRJbnZhbGlkSW5mZXJyZWREZWZlcnJlZFR5cGVzKSByZXR1cm47CiAgICB2YXIgaW1wb3J0cyA9IGNsYXNzSW1wb3J0c1RvKGNscywgbGlicmFyeSk7CiAgICBfZml4RGVwZW5kZW5jeUluZm8oaW5mbywgaW1wb3J0cywgIkNsYXNzIiwgY2xzLm5hbWUsIGNvbnRleHQpOwogIH0KCiAgdm9pZCBfZml4TWVtYmVyRGVwZW5kZW5jeUluZm8oRGVwZW5kZW5jeUluZm8gaW5mbywgTWVtYmVyRW50aXR5IG1lbWJlciwKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBTcGFubmFibGUgY29udGV4dCkgewogICAgaWYgKGluZm8uaXNEZWZlcnJlZCB8fCBjb21waWxlci5vcHRpb25zLm5ld0RlZmVycmVkU3BsaXQpIHJldHVybjsKICAgIHZhciBpbXBvcnRzID0gbWVtYmVySW1wb3J0c1RvKG1lbWJlciwgbGlicmFyeSk7CiAgICBfZml4RGVwZW5kZW5jeUluZm8oaW5mbywgaW1wb3J0cywgIk1lbWJlciIsIG1lbWJlci5uYW1lLCBjb250ZXh0KTsKICB9CgogIHZvaWQgX2ZpeENvbnN0YW50RGVwZW5kZW5jeUluZm8oRGVwZW5kZW5jeUluZm8gaW5mbywgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBTcGFubmFibGUgY29udGV4dCkgewogICAgaWYgKGluZm8uaXNEZWZlcnJlZCB8fCBjb21waWxlci5vcHRpb25zLm5ld0RlZmVycmVkU3BsaXQpIHJldHVybjsKICAgIGlmIChjb25zdGFudCBpcyBUeXBlQ29uc3RhbnRWYWx1ZSkgewogICAgICB2YXIgdHlwZSA9IGNvbnN0YW50LnJlcHJlc2VudGVkVHlwZTsKICAgICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgIHZhciBpbXBvcnRzID0gY2xhc3NJbXBvcnRzVG8odHlwZS5lbGVtZW50LCBsaWJyYXJ5KTsKICAgICAgICBfZml4RGVwZW5kZW5jeUluZm8oCiAgICAgICAgICAgIGluZm8sIGltcG9ydHMsICJDbGFzcyAoaW4gY29uc3RhbnQpICIsIHR5cGUuZWxlbWVudC5uYW1lLCBjb250ZXh0KTsKICAgICAgfSBlbHNlIGlmICh0eXBlIGlzIFR5cGVkZWZUeXBlKSB7CiAgICAgICAgdmFyIGltcG9ydHMgPSB0eXBlZGVmSW1wb3J0c1RvKHR5cGUuZWxlbWVudCwgbGlicmFyeSk7CiAgICAgICAgX2ZpeERlcGVuZGVuY3lJbmZvKAogICAgICAgICAgICBpbmZvLCBpbXBvcnRzLCAiVHlwZWRlZiAiLCB0eXBlLmVsZW1lbnQubmFtZSwgY29udGV4dCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX3Byb2Nlc3NEZXBlbmRlbmNpZXMoCiAgICAgIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5LAogICAgICBEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzLAogICAgICBJbXBvcnRTZXQgb2xkU2V0LAogICAgICBJbXBvcnRTZXQgbmV3U2V0LAogICAgICBXb3JrUXVldWUgcXVldWUsCiAgICAgIFNwYW5uYWJsZSBjb250ZXh0KSB7CiAgICBkZXBlbmRlbmNpZXMuY2xhc3Nlcy5mb3JFYWNoKChDbGFzc0VudGl0eSBjbHMsIERlcGVuZGVuY3lJbmZvIGluZm8pIHsKICAgICAgX2ZpeENsYXNzRGVwZW5kZW5jeUluZm8oaW5mbywgY2xzLCBsaWJyYXJ5LCBjb250ZXh0KTsKICAgICAgaWYgKGluZm8uaXNEZWZlcnJlZCkgewogICAgICAgIGlmIChfc2hvdWxkQWRkRGVmZXJyZWREZXBlbmRlbmN5KG5ld1NldCkpIHsKICAgICAgICAgIGZvciAoSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0IGluIGluZm8uaW1wb3J0cykgewogICAgICAgICAgICBxdWV1ZS5hZGRDbGFzcyhjbHMsIGltcG9ydFNldHMuc2luZ2xldG9uKGRlZmVycmVkSW1wb3J0KSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIF91cGRhdGVDbGFzc1JlY3Vyc2l2ZShjbG9zZWRXb3JsZCwgY2xzLCBvbGRTZXQsIG5ld1NldCwgcXVldWUpOwogICAgICB9CiAgICB9KTsKCiAgICBkZXBlbmRlbmNpZXMubWVtYmVycy5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBEZXBlbmRlbmN5SW5mbyBpbmZvKSB7CiAgICAgIF9maXhNZW1iZXJEZXBlbmRlbmN5SW5mbyhpbmZvLCBtZW1iZXIsIGxpYnJhcnksIGNvbnRleHQpOwogICAgICBpZiAoaW5mby5pc0RlZmVycmVkKSB7CiAgICAgICAgaWYgKF9zaG91bGRBZGREZWZlcnJlZERlcGVuZGVuY3kobmV3U2V0KSkgewogICAgICAgICAgZm9yIChJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnQgaW4gaW5mby5pbXBvcnRzKSB7CiAgICAgICAgICAgIHF1ZXVlLmFkZE1lbWJlcihtZW1iZXIsIGltcG9ydFNldHMuc2luZ2xldG9uKGRlZmVycmVkSW1wb3J0KSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIF91cGRhdGVNZW1iZXJSZWN1cnNpdmUoY2xvc2VkV29ybGQsIG1lbWJlciwgb2xkU2V0LCBuZXdTZXQsIHF1ZXVlKTsKICAgICAgfQogICAgfSk7CgogICAgZm9yIChMb2NhbCBsb2NhbEZ1bmN0aW9uIGluIGRlcGVuZGVuY2llcy5sb2NhbEZ1bmN0aW9ucykgewogICAgICBfdXBkYXRlTG9jYWxGdW5jdGlvbihsb2NhbEZ1bmN0aW9uLCBvbGRTZXQsIG5ld1NldCk7CiAgICB9CgogICAgZGVwZW5kZW5jaWVzLmNvbnN0YW50cwogICAgICAgIC5mb3JFYWNoKChDb25zdGFudFZhbHVlIGNvbnN0YW50LCBEZXBlbmRlbmN5SW5mbyBpbmZvKSB7CiAgICAgIF9maXhDb25zdGFudERlcGVuZGVuY3lJbmZvKGluZm8sIGNvbnN0YW50LCBsaWJyYXJ5LCBjb250ZXh0KTsKICAgICAgaWYgKGluZm8uaXNEZWZlcnJlZCkgewogICAgICAgIGlmIChfc2hvdWxkQWRkRGVmZXJyZWREZXBlbmRlbmN5KG5ld1NldCkpIHsKICAgICAgICAgIGZvciAoSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0IGluIGluZm8uaW1wb3J0cykgewogICAgICAgICAgICBxdWV1ZS5hZGRDb25zdGFudChjb25zdGFudCwgaW1wb3J0U2V0cy5zaW5nbGV0b24oZGVmZXJyZWRJbXBvcnQpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3VwZGF0ZUNvbnN0YW50UmVjdXJzaXZlKGNsb3NlZFdvcmxkLCBjb25zdGFudCwgb2xkU2V0LCBuZXdTZXQsIHF1ZXVlKTsKICAgICAgfQogICAgfSk7CiAgfQoKICAvLy8gQ29tcHV0ZXMgYSB1bmlxdWUgc3RyaW5nIGZvciB0aGUgbmFtZSBmaWVsZCBmb3IgZWFjaCBvdXRwdXRVbml0LgogIHZvaWQgX2NyZWF0ZU91dHB1dFVuaXRzKCkgewogICAgaW50IGNvdW50ZXIgPSAxOwogICAgdm9pZCBhZGRVbml0KEltcG9ydFNldCBpbXBvcnRTZXQpIHsKICAgICAgaWYgKGltcG9ydFNldC51bml0ICE9IG51bGwpIHJldHVybjsKICAgICAgdmFyIHVuaXQgPSBuZXcgT3V0cHV0VW5pdChmYWxzZSwgJyRjb3VudGVyJywKICAgICAgICAgIGltcG9ydFNldC5faW1wb3J0cy5tYXAoKGkpID0+IGkuZGVjbGFyYXRpb24pLnRvU2V0KCkpOwogICAgICBjb3VudGVyKys7CiAgICAgIGltcG9ydFNldC51bml0ID0gdW5pdDsKICAgICAgX2FsbE91dHB1dFVuaXRzLmFkZCh1bml0KTsKICAgIH0KCiAgICAvLyBHZW5lcmF0ZSBhbiBvdXRwdXQgdW5pdCBmb3IgYWxsIGltcG9ydCBzZXRzIHRoYXQgYXJlIGFzc29jaWF0ZWQgd2l0aCBhbgogICAgLy8gZWxlbWVudCBvciBjb25zdGFudC4KICAgIF9jbGFzc1RvU2V0LnZhbHVlcy5mb3JFYWNoKGFkZFVuaXQpOwogICAgX21lbWJlclRvU2V0LnZhbHVlcy5mb3JFYWNoKGFkZFVuaXQpOwogICAgX2xvY2FsRnVuY3Rpb25Ub1NldC52YWx1ZXMuZm9yRWFjaChhZGRVbml0KTsKICAgIF9jb25zdGFudFRvU2V0LnZhbHVlcy5mb3JFYWNoKGFkZFVuaXQpOwoKICAgIC8vIFNvcnQgb3V0cHV0IHVuaXRzIHRvIG1ha2UgdGhlIG91dHB1dCBvZiB0aGUgY29tcGlsZXIgbW9yZSBzdGFibGUuCiAgICBfYWxsT3V0cHV0VW5pdHMuc29ydCgpOwogIH0KCiAgTWFwPFN0cmluZywgTGlzdDxPdXRwdXRVbml0Pj4gX3NldHVwSHVua3NUb0xvYWQoKSB7CiAgICBNYXA8U3RyaW5nLCBMaXN0PE91dHB1dFVuaXQ+PiBodW5rc1RvTG9hZCA9IHt9OwogICAgU2V0PFN0cmluZz4gdXNlZEltcG9ydE5hbWVzID0gbmV3IFNldDxTdHJpbmc+KCk7CgogICAgZm9yIChJbXBvcnRFbnRpdHkgaW1wb3J0IGluIF9hbGxEZWZlcnJlZEltcG9ydHMpIHsKICAgICAgU3RyaW5nIHJlc3VsdCA9IGNvbXB1dGVJbXBvcnREZWZlck5hbWUoaW1wb3J0LCBjb21waWxlcik7CiAgICAgIGFzc2VydChyZXN1bHQgIT0gbnVsbCk7CiAgICAgIC8vIE5vdGU6IHRvb2xzIHRoYXQgcHJvY2VzcyB0aGUganNvbiBmaWxlIHRvIGJ1aWxkIG11bHRpLXBhcnQgaW5pdGlhbCBsb2FkCiAgICAgIC8vIGJ1bmRsZXMgZGVwZW5kIG9uIHRoZSBmYWN0IHRoYXQgbWFrZVVuaXF1ZSBhcHBlbmRzIG9ubHkgZGlnaXRzLCBvciBhCiAgICAgIC8vIHBlcmlvZCBmb2xsb3dlZCBieSBkaWdpdHMuCiAgICAgIF9pbXBvcnREZWZlck5hbWVbaW1wb3J0XSA9IG1ha2VVbmlxdWUocmVzdWx0LCB1c2VkSW1wb3J0TmFtZXMsICcuJyk7CiAgICB9CgogICAgLy8gU29ydCB0aGUgb3V0cHV0IHVuaXRzIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgdGhlIG51bWJlciBvZiBpbXBvcnRzIHRoZXkKICAgIC8vIGluY2x1ZGUuCgogICAgLy8gVGhlIGxvYWRpbmcgb2YgdGhlIG91dHB1dCB1bml0cyBtdXN0IGJlIG9yZGVyZWQgYmVjYXVzZSBhIHN1cGVyY2xhc3MKICAgIC8vIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSBpdHMgc3ViY2xhc3MuCiAgICAvLyBCdXQgYSBjbGFzcyBjYW4gb25seSBkZXBlbmQgb24gYW5vdGhlciBjbGFzcyBpbiBhbiBvdXRwdXQgdW5pdCBzaGFyZWQgYnkKICAgIC8vIGEgc3RyaWN0IHN1cGVyc2V0IG9mIHRoZSBpbXBvcnRzOgogICAgLy8gQnkgY29udHJhZGljdGlvbjogQXNzdW1lIGEgY2xhc3MgQyBpbiBvdXRwdXQgdW5pdCBzaGFyZWQgYnkgaW1wb3J0cyBpbgogICAgLy8gdGhlIHNldCBTMSA9IChsaWIxLC4uLCBsaWJfbikgZGVwZW5kcyBvbiBhIGNsYXNzIEQgaW4gYW4gb3V0cHV0IHVuaXQKICAgIC8vIHNoYXJlZCBieSBTMiBzdWNoIHRoYXQgUzIgbm90IGEgc3VwZXJzZXQgb2YgUzEuIExldCBsaWJfcyBiZSBhIGxpYnJhcnkgaW4KICAgIC8vIFMxIG5vdCBpbiBTMi4gbGliX3MgbXVzdCBkZXBlbmQgb24gQywgYW5kIHRoZW4gaW4gdHVybiBvbiBELiBUaGVyZWZvcmUgRAogICAgLy8gaXMgbm90IGluIHRoZSByaWdodCBvdXRwdXQgdW5pdC4KICAgIExpc3Q8T3V0cHV0VW5pdD4gc29ydGVkT3V0cHV0VW5pdHMgPSBfYWxsT3V0cHV0VW5pdHMucmV2ZXJzZWQudG9MaXN0KCk7CgogICAgLy8gRm9yIGVhY2ggZGVmZXJyZWQgaW1wb3J0IHdlIGZpbmQgb3V0IHdoaWNoIG91dHB1dFVuaXRzIHRvIGxvYWQuCiAgICBmb3IgKEltcG9ydEVudGl0eSBpbXBvcnQgaW4gX2FsbERlZmVycmVkSW1wb3J0cykgewogICAgICAvLyBXZSBleHBlY3QgdG8gZmluZCBhbiBlbnRyeSBmb3IgYW55IGNhbGwgdG8gYGxvYWRMaWJyYXJ5YCwgZXZlbiBpZgogICAgICAvLyB0aGVyZSBpcyBubyBjb2RlIHRvIGxvYWQuIEluIHRoYXQgY2FzZSwgdGhlIGVudHJ5IHdpbGwgYmUgYW4gZW1wdHkKICAgICAgLy8gbGlzdC4KICAgICAgaHVua3NUb0xvYWRbX2ltcG9ydERlZmVyTmFtZVtpbXBvcnRdXSA9IG5ldyBMaXN0PE91dHB1dFVuaXQ+KCk7CiAgICAgIGZvciAoT3V0cHV0VW5pdCBvdXRwdXRVbml0IGluIHNvcnRlZE91dHB1dFVuaXRzKSB7CiAgICAgICAgaWYgKG91dHB1dFVuaXQgPT0gX21haW5PdXRwdXRVbml0KSBjb250aW51ZTsKICAgICAgICBpZiAob3V0cHV0VW5pdC5faW1wb3J0cy5jb250YWlucyhpbXBvcnQpKSB7CiAgICAgICAgICBodW5rc1RvTG9hZFtfaW1wb3J0RGVmZXJOYW1lW2ltcG9ydF1dLmFkZChvdXRwdXRVbml0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBodW5rc1RvTG9hZDsKICB9CgogIC8vLyBSZXR1cm5zIGEgbmFtZSBmb3IgYSBkZWZlcnJlZCBpbXBvcnQuCiAgU3RyaW5nIGNvbXB1dGVJbXBvcnREZWZlck5hbWUoSW1wb3J0RW50aXR5IGRlY2xhcmF0aW9uLCBDb21waWxlciBjb21waWxlcikgewogICAgYXNzZXJ0KGRlY2xhcmF0aW9uLmlzRGVmZXJyZWQpOwogICAgaWYgKGRlY2xhcmF0aW9uLm5hbWUgIT0gbnVsbCkgewogICAgICByZXR1cm4gZGVjbGFyYXRpb24ubmFtZTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBkZWZlcnJlZCBpbXBvcnQgaXNuJ3QgZGVjbGFyZWQgd2l0aCBhIHByZWZpeC4KICAgICAgYXNzZXJ0KGNvbXBpbGVyLmNvbXBpbGF0aW9uRmFpbGVkKTsKICAgICAgcmV0dXJuICcnOwogICAgfQogIH0KCiAgLy8vIFBlcmZvcm1zIHRoZSBkZWZlcnJlZCBsb2FkaW5nIGFsZ29yaXRobS4KICAvLy8KICAvLy8gVGhlIGRlZmVycmVkIGxvYWRpbmcgYWxnb3JpdGhtIG1hcHMgZWxlbWVudHMgYW5kIGNvbnN0YW50cyB0byBhbiBvdXRwdXQKICAvLy8gdW5pdC4gRWFjaCBvdXRwdXQgdW5pdCBpcyBpZGVudGlmaWVkIGJ5IGEgc3Vic2V0IG9mIGRlZmVycmVkIGltcG9ydHMgKGFuCiAgLy8vIFtJbXBvcnRTZXRdKSwgYW5kIHRoZXkgd2lsbCBjb250YWluIHRoZSBlbGVtZW50cyB0aGF0IGFyZSBpbmhlcmVudGx5IHVzZWQKICAvLy8gYnkgYWxsIHRob3NlIGRlZmVycmVkIGltcG9ydHMuIEFuIGVsZW1lbnQgaXMgdXNlZCBieSBhIGRlZmVycmVkIGltcG9ydCBpZgogIC8vLyBpdCBpcyBlaXRoZXIgbG9hZGVkIGJ5IHRoYXQgaW1wb3J0IG9yIHRyYW5zaXRpdmVseSBhY2Nlc3NlZCBieSBhbiBlbGVtZW50CiAgLy8vIHRoYXQgdGhlIGltcG9ydCBsb2Fkcy4gIEFuIGVtcHR5IHNldCByZXByZXNlbnRzIHRoZSBtYWluIG91dHB1dCB1bml0LAogIC8vLyB3aGljaCBjb250YWlucyBhbnkgZWxlbWVudHMgdGhhdCBhcmUgYWNjZXNzZWQgZGlyZWN0bHkgYW5kIGFyZSBub3QKICAvLy8gZGVmZXJyZWQuCiAgLy8vCiAgLy8vIFRoZSBhbGdvcml0aG0gdHJhdmVyc2VzIHRoZSBlbGVtZW50IG1vZGVsIHJlY3Vyc2l2ZWx5IGxvb2tpbmcgZm9yCiAgLy8vIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGVsZW1lbnRzLiBUaGVzZSBkZXBlbmRlbmNpZXMgbWF5IGJlIGRlZmVycmVkIG9yCiAgLy8vIG5vbi1kZWZlcnJlZC4gRGVmZXJyZWQgZGVwZW5kZW5jaWVzIGFyZSBtYWlubHkgdXNlZCB0byBkaXNjb3ZlciB0aGUgcm9vdAogIC8vLyBlbGVtZW50cyB0aGF0IGFyZSBsb2FkZWQgZnJvbSBkZWZlcnJlZCBpbXBvcnRzLCB3aGlsZSBub24tZGVmZXJyZWQKICAvLy8gZGVwZW5kZW5jaWVzIGFyZSB1c2VkIHRvIHJlY3Vyc2l2ZWx5IGFzc29jaWF0ZSBtb3JlIGVsZW1lbnRzIHRvIG91dHB1dAogIC8vLyB1bml0cy4KICAvLy8KICAvLy8gTmFpdmVseSwgdGhlIGFsZ29yaXRobSB0cmF2ZXJzZXMgZWFjaCByb290IG9mIGEgZGVmZXJyZWQgaW1wb3J0IGFuZCBtYXJrcwogIC8vLyBldmVyeXRoaW5nIGl0IGNhbiByZWFjaCBhcyBiZWluZyB1c2VkIGJ5IHRoYXQgaW1wb3J0LiBUbyByZWR1Y2UgaG93IG1hbnkKICAvLy8gdGltZXMgd2UgdmlzaXQgYW4gZWxlbWVudCwgd2UgdXNlIGFuIGFsZ29yaXRobSB0aGF0IHdvcmtzIGluIHNlZ21lbnRzOiBpdAogIC8vLyBtYXJrcyBlbGVtZW50cyB3aXRoIGEgc3Vic2V0IG9mIGRlZmVycmVkIGltcG9ydHMgYXQgYSB0aW1lLCB1bnRpbCBpdAogIC8vLyBkZXRlY3RzIGEgbWVyZ2UgcG9pbnQgd2hlcmUgbW9yZSBkZWZlcnJlZCBpbXBvcnRzIGNvdWxkIGJlIGNvbnNpZGVyZWQgYXQKICAvLy8gb25jZS4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRoaXMgZGVwZW5kZW5jeSBncmFwaCAoaWdub3JpbmcgZWxlbWVudHMgaW4gdGhlIG1haW4KICAvLy8gb3V0cHV0IHVuaXQpOgogIC8vLwogIC8vLyAgIGRlZmVycmVkIGltcG9ydCBBOiBhMSAtLS0+IHMxIC0tLT4gczIgIC0+IHMzCiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICBeCiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8CiAgLy8vICAgZGVmZXJyZWQgaW1wb3J0IEI6IGIxIC0tLS0tKyAgICAgICB8CiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgLy8vICAgZGVmZXJyZWQgaW1wb3J0IEM6IGMxIC0tLT4gYzIgLS0tPiBjMwogIC8vLwogIC8vLyBUaGUgYWxnb3JpdGhtIHdpbGwgY29tcHV0ZSBhIHJlc3VsdCB3aXRoIDUgZGVmZXJyZWQgb3V0cHV0IHVuaXRzOgogIC8vCiAgLy8vICAgKiB1bml0IHtBfTogICAgICAgIGNvbnRhaW5zIGExCiAgLy8vICAgKiB1bml0IHtCfTogICAgICAgIGNvbnRhaW5zIGIxCiAgLy8vICAgKiB1bml0IHtDfTogICAgICAgIGNvbnRhaW5zIGMxLCBjMiwgYW5kIGMzCiAgLy8vICAgKiB1bml0IHtBLCBCfTogICAgIGNvbnRhaW5zIHMxCiAgLy8vICAgKiB1bml0IHtBLCBCLCBDfTogIGNvbnRhaW5zIHMyLCBhbmQgczMKICAvLy8KICAvLy8gQWZ0ZXIgbWFya2luZyBldmVyeXRoaW5nIHJlYWNoYWJsZSBmcm9tIG1haW4gYXMgcGFydCBvZiB0aGUgbWFpbiBvdXRwdXQKICAvLy8gdW5pdCwgb3VyIGFsZ29yaXRobSB3aWxsIHdvcmsgYXMgZm9sbG93czoKICAvLy8KICAvLy8gICAqIEluaXRpYWxseSBhbGwgZGVmZXJyZWQgZWxlbWVudHMgaGF2ZSBubyBtYXBwaW5nLgogIC8vLyAgICogV2UgbWFrZSBub3RlIG9mIHdvcmsgdG8gZG8sIGluaXRpYWxseSB0byBtYXJrIHRoZSByb290IG9mIGVhY2gKICAvLy8gICAgIGRlZmVycmVkIGltcG9ydDoKICAvLy8gICAgICAgICogYTEgd2l0aCBBLCBhbmQgcmVjdXJzZSBmcm9tIHRoZXJlLgogIC8vLyAgICAgICAgKiBiMSB3aXRoIEIsIGFuZCByZWN1cnNlIGZyb20gdGhlcmUuCiAgLy8vICAgICAgICAqIGMxIHdpdGggQywgYW5kIHJlY3Vyc2UgZnJvbSB0aGVyZS4KICAvLy8gICAqIHdlIHVwZGF0ZSBhMSwgczEsIHMyLCBzMyBmcm9tIG5vIG1hcHBpbmcgdG8ge0F9CiAgLy8vICAgKiB3ZSB1cGRhdGUgYjEgZnJvbSBubyBtYXBwaW5nIHRvIHtCfSwgYW5kIHdoZW4gd2UgZmluZCBzMSB3ZSBub3RpY2UKICAvLy8gICAgIHRoYXQgczEgaXMgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggYW5vdGhlciBpbXBvcnQgc2V0IHtBfSwgc28gd2UgbWFrZQogIC8vLyAgICAgbm90ZSBvZiBhZGRpdGlvbmFsIHdvcmsgZm9yIGxhdGVyIHRvIG1hcmsgczEgd2l0aCB7QSwgQn0KICAvLy8gICAqIHdlIHVwZGF0ZSBjMSwgYzIsIGMzIHRvIHtDfSwgYW5kIG1ha2UgYSBub3RlIHRvIHVwZGF0ZSBzMiB3aXRoIHtBLCBDfQogIC8vLyAgICogd2UgdXBkYXRlIHMxIHRvIHtBLCBCfSwgYW5kIHVwZGF0ZSB0aGUgZXhpc3Rpbmcgbm90ZSB0byB1cGRhdGUgczIsIG5vdwogIC8vLyAgICAgd2l0aCB7QSwgQiwgQ30KICAvLy8gICAqIGZpbmFsbHkgd2UgdXBkYXRlIHMyIGFuZCBzMyB3aXRoIHtBLCBCLCBDfSBpbiBvbmUgZ28sIHdpdGhvdXQgZXZlcgogIC8vLyAgICAgdXBkYXRpbmcgdGhlbSB0byB0aGUgaW50ZXJtZWRpYXRlIHN0YXRlIHtBLCBDfS4KICAvLy8KICAvLy8gVGhlIGltcGxlbWVudGF0aW9uIGJlbG93IGRvZXMgYXRvbWljIHVwZGF0ZXMgZnJvbSBvbmUgaW1wb3J0LXNldCB0bwogIC8vLyBhbm90aGVyLiAgQXQgZmlyc3Qgd2UgYWRkIG9uZSBkZWZlcnJlZCBpbXBvcnQgYXQgYSB0aW1lLCBidXQgYXMgdGhlCiAgLy8vIGFsZ29yaXRobSBwcm9nZXNzZXMgaXQgbWF5IHVwZGF0ZSBhIHNtYWxsIGltcG9ydC1zZXQgd2l0aCBhIGxhcmdlcgogIC8vLyBpbXBvcnQtc2V0IGluIG9uZSBnby4gVGhlIGtleSBvZiB0aGlzIGFsZ29yaXRobSBpcyB0byBkZXRlY3Qgd2hlbiBzaGFyaW5nCiAgLy8vIGJlZ2lucywgc28gd2UgY2FuIHVwZGF0ZSB0aG9zZSBlbGVtZW50cyBtb3JlIGVmZmljZW50bHkuCiAgLy8vCiAgLy8vIFRvIGRldGVjdCB0aGVzZSBtZXJnZSBwb2ludHMgd2hlcmUgc2hhcmluZyBiZWdpbnMsIHRoZSBpbXBsZW1lbnRhdGlvbgogIC8vLyBiZWxvdyB1c2VzIGBhIHN3YXAgb3BlcmF0aW9uYDogd2UgZmlyc3QgY29tcGFyZSB3aGF0IHRoZSBvbGQgaW1wb3J0LXNldAogIC8vLyBpcywgYW5kIGlmIGl0IG1hdGNoZXMgb3VyIGV4cGVjdGF0aW9uLCB0aGUgc3dhcCBpcyBkb25lIGFuZCB3ZSByZWN1cnNlLAogIC8vLyBvdGhlcndpc2UgYSBtZXJnZSByb290IHdhcyBkZXRlY3RlZCBhbmQgd2UgZW5xdWV1ZSBhIG5ldyBzZWdtZW50IG9mCiAgLy8vIHVwZGF0ZXMgZm9yIGxhdGVyLgogIC8vLwogIC8vLyBUT0RPKHNpZ211bmQpOiBpbnZlc3RpZ2F0ZSBkaWZmZXJlbnQgaGV1cmlzdGljcyBmb3IgaG93IHRvIHNlbGVjdCB0aGUgbmV4dAogIC8vLyB3b3JrIGl0ZW0gKGUuZy4gd2UgbWlnaHQgY29udmVyZ2UgZmFzdGVyIGlmIHdlIHBpY2sgZmlyc3QgdGhlIHVwZGF0ZSB0aGF0CiAgLy8vIGNvbnRhaW5zIGEgYmlnZ2VyIGRlbHRhLikKICBPdXRwdXRVbml0RGF0YSBydW4oRnVuY3Rpb25FbnRpdHkgbWFpbiwgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoIWlzUHJvZ3JhbVNwbGl0IHx8IG1haW4gPT0gbnVsbCB8fCBkaXNhYmxlUHJvZ3JhbVNwbGl0KSB7CiAgICAgIHJldHVybiBfYnVpbGRSZXN1bHQoKTsKICAgIH0KCiAgICB3b3JrKCkgewogICAgICB2YXIgcXVldWUgPSBuZXcgV29ya1F1ZXVlKHRoaXMuaW1wb3J0U2V0cyk7CgogICAgICAvLyBBZGQgYG1haW5gIGFuZCB0aGVpciByZWN1cnNpdmUgZGVwZW5kZW5jaWVzIHRvIHRoZSBtYWluIG91dHB1dCB1bml0LgogICAgICAvLyBXZSBkbyB0aGlzIHVwZnJvbnQgdG8gYXZvaWQgd2FzdGluZyB0aW1lIHZpc2l0aW5nIHRoZXNlIGVsZW1lbnRzIHdoZW4KICAgICAgLy8gYW5hbHl6aW5nIGRlZmVycmVkIGltcG9ydHMuCiAgICAgIHF1ZXVlLmFkZE1lbWJlcihtYWluLCBpbXBvcnRTZXRzLm1haW5TZXQpOwoKICAgICAgLy8gQWxzbyBhZGQgImdsb2JhbCIgZGVwZW5kZW5jaWVzIHRvIHRoZSBtYWluIG91dHB1dCB1bml0LiAgVGhlc2UgYXJlCiAgICAgIC8vIHRoaW5ncyB0aGF0IHRoZSBiYWNrZW5kIG5lZWRzIGJ1dCBjYW5ub3QgYXNzb2NpYXRlIHdpdGggYSBwYXJ0aWN1bGFyCiAgICAgIC8vIGVsZW1lbnQuIFRoaXMgc2V0IGFsc28gY29udGFpbnMgZWxlbWVudHMgZm9yIHdoaWNoIHdlIGxhY2sgcHJlY2lzZQogICAgICAvLyBpbmZvcm1hdGlvbi4KICAgICAgZm9yIChNZW1iZXJFbnRpdHkgZWxlbWVudAogICAgICAgICAgaW4gY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlLmdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzKSB7CiAgICAgICAgcXVldWUuYWRkTWVtYmVyKGVsZW1lbnQsIGltcG9ydFNldHMubWFpblNldCk7CiAgICAgIH0KICAgICAgZm9yIChDbGFzc0VudGl0eSBlbGVtZW50CiAgICAgICAgICBpbiBjbG9zZWRXb3JsZC5iYWNrZW5kVXNhZ2UuZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXMpIHsKICAgICAgICBxdWV1ZS5hZGRDbGFzcyhlbGVtZW50LCBpbXBvcnRTZXRzLm1haW5TZXQpOwogICAgICB9CgogICAgICB2b2lkIGVtcHR5UXVldWUoKSB7CiAgICAgICAgd2hpbGUgKHF1ZXVlLmlzTm90RW1wdHkpIHsKICAgICAgICAgIFdvcmtJdGVtIGl0ZW0gPSBxdWV1ZS5uZXh0SXRlbSgpOwogICAgICAgICAgaXRlbS51cGRhdGUodGhpcywgY2xvc2VkV29ybGQsIHF1ZXVlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGVtcHR5UXVldWUoKTsKICAgIH0KCiAgICByZXBvcnRlci53aXRoQ3VycmVudEVsZW1lbnQobWFpbi5saWJyYXJ5LCAoKSA9PiBtZWFzdXJlKHdvcmspKTsKCiAgICAvLyBOb3RpZnkgdGhhdCB3ZSBubyBsb25nZXIgbmVlZCBpbXBhY3RzIGZvciBkZWZlcnJlZCBsb2FkLCBzbyB0aGV5IGNhbiBiZQogICAgLy8gZGlzY2FyZGVkIGF0IHRoaXMgdGltZS4KICAgIGNvbXBpbGVyLmltcGFjdFN0cmF0ZWd5Lm9uSW1wYWN0VXNlZChEZWZlcnJlZExvYWRUYXNrLklNUEFDVF9VU0UpOwogICAgcmV0dXJuIF9idWlsZFJlc3VsdCgpOwogIH0KCiAgT3V0cHV0VW5pdERhdGEgX2J1aWxkUmVzdWx0KCkgewogICAgX2NyZWF0ZU91dHB1dFVuaXRzKCk7CiAgICBNYXA8U3RyaW5nLCBMaXN0PE91dHB1dFVuaXQ+PiBodW5rc1RvTG9hZCA9IF9zZXR1cEh1bmtzVG9Mb2FkKCk7CiAgICBNYXA8Q2xhc3NFbnRpdHksIE91dHB1dFVuaXQ+IGNsYXNzTWFwID0gPENsYXNzRW50aXR5LCBPdXRwdXRVbml0Pnt9OwogICAgTWFwPE1lbWJlckVudGl0eSwgT3V0cHV0VW5pdD4gbWVtYmVyTWFwID0gPE1lbWJlckVudGl0eSwgT3V0cHV0VW5pdD57fTsKICAgIE1hcDxMb2NhbCwgT3V0cHV0VW5pdD4gbG9jYWxGdW5jdGlvbk1hcCA9IDxMb2NhbCwgT3V0cHV0VW5pdD57fTsKICAgIE1hcDxDb25zdGFudFZhbHVlLCBPdXRwdXRVbml0PiBjb25zdGFudE1hcCA9IDxDb25zdGFudFZhbHVlLCBPdXRwdXRVbml0Pnt9OwogICAgX2NsYXNzVG9TZXQuZm9yRWFjaCgoY2xzLCBzKSA9PiBjbGFzc01hcFtjbHNdID0gcy51bml0KTsKICAgIF9tZW1iZXJUb1NldC5mb3JFYWNoKChtZW1iZXIsIHMpID0+IG1lbWJlck1hcFttZW1iZXJdID0gcy51bml0KTsKICAgIF9sb2NhbEZ1bmN0aW9uVG9TZXQuZm9yRWFjaCgKICAgICAgICAobG9jYWxGdW5jdGlvbiwgcykgPT4gbG9jYWxGdW5jdGlvbk1hcFtsb2NhbEZ1bmN0aW9uXSA9IHMudW5pdCk7CiAgICBfY29uc3RhbnRUb1NldC5mb3JFYWNoKChjb25zdGFudCwgcykgPT4gY29uc3RhbnRNYXBbY29uc3RhbnRdID0gcy51bml0KTsKCiAgICBfY2xhc3NUb1NldCA9IG51bGw7CiAgICBfbWVtYmVyVG9TZXQgPSBudWxsOwogICAgX2xvY2FsRnVuY3Rpb25Ub1NldCA9IG51bGw7CiAgICBfY29uc3RhbnRUb1NldCA9IG51bGw7CiAgICBjbGVhbnVwKCk7CiAgICByZXR1cm4gbmV3IE91dHB1dFVuaXREYXRhKAogICAgICAgIHRoaXMuaXNQcm9ncmFtU3BsaXQgJiYgIWRpc2FibGVQcm9ncmFtU3BsaXQsCiAgICAgICAgdGhpcy5fbWFpbk91dHB1dFVuaXQsCiAgICAgICAgY2xhc3NNYXAsCiAgICAgICAgbWVtYmVyTWFwLAogICAgICAgIGxvY2FsRnVuY3Rpb25NYXAsCiAgICAgICAgY29uc3RhbnRNYXAsCiAgICAgICAgX2FsbE91dHB1dFVuaXRzLAogICAgICAgIF9pbXBvcnREZWZlck5hbWUsCiAgICAgICAgaHVua3NUb0xvYWQsCiAgICAgICAgX2RlZmVycmVkSW1wb3J0RGVzY3JpcHRpb25zKTsKICB9CgogIC8vLyBGcmVlcyB1cCBzdHJhdGVneS1zcGVjaWZpYyB0ZW1wb3JhcnkgZGF0YS4KICB2b2lkIGNsZWFudXAoKSB7fQoKICB2b2lkIGJlZm9yZVJlc29sdXRpb24oVXJpIHJvb3RMaWJyYXJ5VXJpLCBJdGVyYWJsZTxVcmk+IGxpYnJhcmllcykgewogICAgbWVhc3VyZVN1YnRhc2soJ3ByZXBhcmUnLCAoKSB7CiAgICAgIGZvciAoVXJpIHVyaSBpbiBsaWJyYXJpZXMpIHsKICAgICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnkgPSBlbGVtZW50RW52aXJvbm1lbnQubG9va3VwTGlicmFyeSh1cmkpOwogICAgICAgIHJlcG9ydGVyLndpdGhDdXJyZW50RWxlbWVudChsaWJyYXJ5LCAoKSB7CiAgICAgICAgICBjaGVja0ZvckRlZmVycmVkRXJyb3JDYXNlcyhsaWJyYXJ5KTsKICAgICAgICAgIGZvciAoSW1wb3J0RW50aXR5IGltcG9ydCBpbiBlbGVtZW50RW52aXJvbm1lbnQuZ2V0SW1wb3J0cyhsaWJyYXJ5KSkgewogICAgICAgICAgICBpZiAoaW1wb3J0LmlzRGVmZXJyZWQpIHsKICAgICAgICAgICAgICBfZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnNbaW1wb3J0XSA9CiAgICAgICAgICAgICAgICAgIG5ldyBJbXBvcnREZXNjcmlwdGlvbihpbXBvcnQsIGxpYnJhcnksIHJvb3RMaWJyYXJ5VXJpKTsKICAgICAgICAgICAgICBpc1Byb2dyYW1TcGxpdCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfSk7CiAgfQoKICAvLy8gRGV0ZWN0cyBlcnJvcnMgbGlrZSBkdXBsaWNhdGUgdXNlcyBvZiBhIHByZWZpeCBvciB1c2luZyB0aGUgb2xkIGRlZmVycmVkCiAgLy8vIGxvYWRpbmcgc3ludGF4LgogIC8vLwogIC8vLyBUaGVzZSBjaGVja3MgYXJlIGFscmVhZHkgZG9uZSBieSB0aGUgc2hhcmVkIGZyb250LWVuZCwgc28gdGhleSBjYW4gYmUKICAvLy8gc2tpcHBlZCBieSB0aGUgbmV3IGNvbXBpbGVyIHBpcGVsaW5lLgogIHZvaWQgY2hlY2tGb3JEZWZlcnJlZEVycm9yQ2FzZXMoTGlicmFyeUVudGl0eSBsaWJyYXJ5KTsKCiAgYm9vbCBpZ25vcmVFbnRpdHlJbkR1bXAoRW50aXR5IGVsZW1lbnQpID0+IGZhbHNlOwoKICAvLy8gQ3JlYXRlcyBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIG91dHB1dCB1bml0IGNvbnRlbnQuCiAgU3RyaW5nIGR1bXAoKSB7CiAgICBNYXA8T3V0cHV0VW5pdCwgTGlzdDxTdHJpbmc+PiBlbGVtZW50TWFwID0gPE91dHB1dFVuaXQsIExpc3Q8U3RyaW5nPj57fTsKICAgIE1hcDxPdXRwdXRVbml0LCBMaXN0PFN0cmluZz4+IGNvbnN0YW50TWFwID0gPE91dHB1dFVuaXQsIExpc3Q8U3RyaW5nPj57fTsKICAgIF9jbGFzc1RvU2V0LmZvckVhY2goKENsYXNzRW50aXR5IGVsZW1lbnQsIEltcG9ydFNldCBpbXBvcnRTZXQpIHsKICAgICAgaWYgKGlnbm9yZUVudGl0eUluRHVtcChlbGVtZW50KSkgcmV0dXJuOwogICAgICB2YXIgZWxlbWVudHMgPSBlbGVtZW50TWFwLnB1dElmQWJzZW50KGltcG9ydFNldC51bml0LCAoKSA9PiA8U3RyaW5nPltdKTsKICAgICAgdmFyIGlkID0gZWxlbWVudC5uYW1lID8/ICckZWxlbWVudCc7CiAgICAgIGlkID0gJyRpZCBjbHMnOwogICAgICBlbGVtZW50cy5hZGQoaWQpOwogICAgfSk7CiAgICBfbWVtYmVyVG9TZXQuZm9yRWFjaCgoTWVtYmVyRW50aXR5IGVsZW1lbnQsIEltcG9ydFNldCBpbXBvcnRTZXQpIHsKICAgICAgaWYgKGlnbm9yZUVudGl0eUluRHVtcChlbGVtZW50KSkgcmV0dXJuOwogICAgICB2YXIgZWxlbWVudHMgPSBlbGVtZW50TWFwLnB1dElmQWJzZW50KGltcG9ydFNldC51bml0LCAoKSA9PiA8U3RyaW5nPltdKTsKICAgICAgdmFyIGlkID0gZWxlbWVudC5uYW1lID8/ICckZWxlbWVudCc7CiAgICAgIHZhciBjbHMgPSBlbGVtZW50LmVuY2xvc2luZ0NsYXNzPy5uYW1lOwogICAgICBpZiAoY2xzICE9IG51bGwpIGlkID0gJyRjbHMuJGlkJzsKICAgICAgaWYgKGVsZW1lbnQuaXNTZXR0ZXIpIGlkID0gJyRpZD0nOwogICAgICBpZCA9ICckaWQgbWVtYmVyJzsKICAgICAgZWxlbWVudHMuYWRkKGlkKTsKICAgIH0pOwogICAgX2xvY2FsRnVuY3Rpb25Ub1NldC5mb3JFYWNoKChMb2NhbCBlbGVtZW50LCBJbXBvcnRTZXQgaW1wb3J0U2V0KSB7CiAgICAgIGlmIChpZ25vcmVFbnRpdHlJbkR1bXAoZWxlbWVudCkpIHJldHVybjsKICAgICAgdmFyIGVsZW1lbnRzID0gZWxlbWVudE1hcC5wdXRJZkFic2VudChpbXBvcnRTZXQudW5pdCwgKCkgPT4gPFN0cmluZz5bXSk7CiAgICAgIHZhciBpZCA9IGVsZW1lbnQubmFtZSA/PyAnJGVsZW1lbnQnOwogICAgICB2YXIgY29udGV4dCA9IChlbGVtZW50IGFzIGR5bmFtaWMpLm1lbWJlckNvbnRleHQubmFtZTsKICAgICAgaWQgPSBlbGVtZW50Lm5hbWUgPT0gbnVsbCB8fCBlbGVtZW50Lm5hbWUgPT0gJycgPyAnPGFub255bW91cz4nIDogaWQ7CiAgICAgIGlkID0gJyRjb250ZXh0LiRpZCc7CiAgICAgIGlkID0gJyRpZCBsb2NhbCc7CiAgICAgIGVsZW1lbnRzLmFkZChpZCk7CiAgICB9KTsKICAgIF9jb25zdGFudFRvU2V0LmZvckVhY2goKENvbnN0YW50VmFsdWUgdmFsdWUsIEltcG9ydFNldCBpbXBvcnRTZXQpIHsKICAgICAgLy8gU2tpcCBwcmltaXRpdmUgdmFsdWVzOiB0aGV5IGFyZSBub3Qgc3RvcmVkIGluIHRoZSBjb25zdGFudCB0YWJsZXMgYW5kCiAgICAgIC8vIGlmIHRoZXkgYXJlIHNoYXJlZCwgdGhleSBlbmQgdXAgZHVwbGljYXRlZCBhbnl3YXlzIGFjcm9zcyBvdXRwdXQgdW5pdHMuCiAgICAgIGlmICh2YWx1ZS5pc1ByaW1pdGl2ZSkgcmV0dXJuOwogICAgICBjb25zdGFudE1hcAogICAgICAgICAgLnB1dElmQWJzZW50KGltcG9ydFNldC51bml0LCAoKSA9PiA8U3RyaW5nPltdKQogICAgICAgICAgLmFkZCh2YWx1ZS50b1N0cnVjdHVyZWRUZXh0KCkpOwogICAgfSk7CgogICAgTWFwPE91dHB1dFVuaXQsIFN0cmluZz4gdGV4dCA9IHt9OwogICAgZm9yIChPdXRwdXRVbml0IG91dHB1dFVuaXQgaW4gX2FsbE91dHB1dFVuaXRzKSB7CiAgICAgIFN0cmluZ0J1ZmZlciB1bml0VGV4dCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgaWYgKG91dHB1dFVuaXQuaXNNYWluT3V0cHV0KSB7CiAgICAgICAgdW5pdFRleHQud3JpdGUoJyA8TUFJTiBVTklUPicpOwogICAgICB9IGVsc2UgewogICAgICAgIHVuaXRUZXh0LndyaXRlKCcgaW1wb3J0czonKTsKICAgICAgICB2YXIgaW1wb3J0cyA9IG91dHB1dFVuaXQuX2ltcG9ydHMKICAgICAgICAgICAgLm1hcCgoaSkgPT4gJyR7aS5lbmNsb3NpbmdMaWJyYXJ5VXJpLnJlc29sdmVVcmkoaS51cmkpfScpCiAgICAgICAgICAgIC50b0xpc3QoKTsKICAgICAgICBmb3IgKHZhciBpIGluIGltcG9ydHMuLnNvcnQoKSkgewogICAgICAgICAgdW5pdFRleHQud3JpdGUoJ1xuICAgJGk6Jyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIExpc3Q8U3RyaW5nPiBlbGVtZW50cyA9IGVsZW1lbnRNYXBbb3V0cHV0VW5pdF07CiAgICAgIGlmIChlbGVtZW50cyAhPSBudWxsKSB7CiAgICAgICAgdW5pdFRleHQud3JpdGUoJ1xuIGVsZW1lbnRzOicpOwogICAgICAgIGZvciAoU3RyaW5nIGVsZW1lbnQgaW4gZWxlbWVudHMuLnNvcnQoKSkgewogICAgICAgICAgdW5pdFRleHQud3JpdGUoJ1xuICAkZWxlbWVudCcpOwogICAgICAgIH0KICAgICAgfQogICAgICBMaXN0PFN0cmluZz4gY29uc3RhbnRzID0gY29uc3RhbnRNYXBbb3V0cHV0VW5pdF07CiAgICAgIGlmIChjb25zdGFudHMgIT0gbnVsbCkgewogICAgICAgIHVuaXRUZXh0LndyaXRlKCdcbiBjb25zdGFudHM6Jyk7CiAgICAgICAgZm9yIChTdHJpbmcgdmFsdWUgaW4gY29uc3RhbnRzLi5zb3J0KCkpIHsKICAgICAgICAgIHVuaXRUZXh0LndyaXRlKCdcbiAgJHZhbHVlJyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRleHRbb3V0cHV0VW5pdF0gPSAnJHVuaXRUZXh0JzsKICAgIH0KCiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKE91dHB1dFVuaXQgb3V0cHV0VW5pdCBpbiBfYWxsT3V0cHV0VW5pdHMudG9MaXN0KCkKICAgICAgLi5zb3J0KChhLCBiKSA9PiB0ZXh0W2FdLmNvbXBhcmVUbyh0ZXh0W2JdKSkpIHsKICAgICAgc2Iud3JpdGUoJ1xuXG4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4nKTsKICAgICAgc2Iud3JpdGUoJ091dHB1dCB1bml0OiAke291dHB1dFVuaXQubmFtZX0nKTsKICAgICAgc2Iud3JpdGUoJ1xuICR7dGV4dFtvdXRwdXRVbml0XX0nKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKY2xhc3MgSW1wb3J0RGVzY3JpcHRpb24gewogIC8vLyBSZWxhdGl2ZSB1cmkgdG8gdGhlIGltcG9ydGluZyBsaWJyYXJ5LgogIGZpbmFsIFN0cmluZyBpbXBvcnRpbmdVcmk7CgogIC8vLyBUaGUgcHJlZml4IHRoaXMgaW1wb3J0IGlzIGltcG9ydGVkIGFzLgogIGZpbmFsIFN0cmluZyBwcmVmaXg7CgogIGZpbmFsIExpYnJhcnlFbnRpdHkgX2ltcG9ydGluZ0xpYnJhcnk7CgogIEltcG9ydERlc2NyaXB0aW9uLmludGVybmFsKAogICAgICB0aGlzLmltcG9ydGluZ1VyaSwgdGhpcy5wcmVmaXgsIHRoaXMuX2ltcG9ydGluZ0xpYnJhcnkpOwoKICBJbXBvcnREZXNjcmlwdGlvbigKICAgICAgSW1wb3J0RW50aXR5IGltcG9ydCwgTGlicmFyeUVudGl0eSBpbXBvcnRpbmdMaWJyYXJ5LCBVcmkgbWFpbkxpYnJhcnlVcmkpCiAgICAgIDogdGhpcy5pbnRlcm5hbCgKICAgICAgICAgICAgZmUucmVsYXRpdml6ZVVyaSgKICAgICAgICAgICAgICAgIG1haW5MaWJyYXJ5VXJpLCBpbXBvcnRpbmdMaWJyYXJ5LmNhbm9uaWNhbFVyaSwgZmFsc2UpLAogICAgICAgICAgICBpbXBvcnQubmFtZSwKICAgICAgICAgICAgaW1wb3J0aW5nTGlicmFyeSk7Cn0KCi8vLyBJbmRpcmVjdGx5IHJlcHJlc2VudHMgYSBkZWZlcnJlZCBpbXBvcnQgaW4gYW4gW0ltcG9ydFNldF0uCi8vLwovLy8gV2UgY291bGQgZGlyZWN0bHkgc3RvcmUgdGhlIFtkZWNsYXJhdGlvbl0gaW4gW0ltcG9ydFNldF0sIGJ1dCBhZGRpbmcgdGhpcwovLy8gY2xhc3MgbWFrZXMgc29tZSBvZiB0aGUgaW1wb3J0IHNldCBvcGVyYXRpb25zIG1vcmUgZWZmaWNpZW50LgpjbGFzcyBfRGVmZXJyZWRJbXBvcnQgewogIGZpbmFsIEltcG9ydEVudGl0eSBkZWNsYXJhdGlvbjsKCiAgLy8vIENhbm9uaWNhbCBpbmRleCBhc3NvY2lhdGVkIHdpdGggW2RlY2xhcmF0aW9uXS4gVGhpcyBpcyB1c2VkIHRvIGVmZmljaWVudGx5CiAgLy8vIGltcGxlbWVudCBbSW1wb3J0U2V0TGF0dGljZS51bmlvbl0uCiAgZmluYWwgaW50IGluZGV4OwoKICBfRGVmZXJyZWRJbXBvcnQodGhpcy5kZWNsYXJhdGlvbiwgdGhpcy5pbmRleCk7Cn0KCi8vLyBBIGNvbXBhY3QgbGF0dGljZSByZXByZXNlbnRhdGlvbiBvZiBpbXBvcnQgc2V0cyBhbmQgc3Vic2V0cy4KLy8vCi8vLyBXZSB1c2UgYSBncmFwaCBvZiBub2RlcyB0byByZXByZXNlbnQgZWxlbWVudHMgb2YgdGhlIGxhdHRpY2UsIGJ1dCBvbmx5Ci8vLyBjcmVhdGUgbmV3IG5vZGVzIG9uLWRlbWFuZCBhcyB0aGV5IGFyZSBuZWVkZWQgYnkgdGhlIGRlZmVycmVkIGxvYWRpbmcKLy8vIGFsZ29yaXRobS4KLy8vCi8vLyBUaGUgY29uc3RydWN0aW9ucyBvZiBub2RlcyBpcyBjYXJlZnVsbHkgZG9uZSBieSBzdG9yaW5nIGltcG9ydHMgaW4gYQovLy8gc3BlY2lmaWMgb3JkZXIuIFRoaXMgZW5zdXJlcyB0aGF0IHdlIGhhdmUgYSB1bmlxdWUgYW5kIGNhbm9uaWNhbAovLy8gcmVwcmVzZW50YXRpb24gZm9yIGVhY2ggc3Vic2V0LgpjbGFzcyBJbXBvcnRTZXRMYXR0aWNlIHsKICAvLy8gSW5kZXggb2YgZGVmZXJyZWQgaW1wb3J0cyB0aGF0IGRlZmluZXMgdGhlIGNhbm9uaWNhbCBvcmRlciB1c2VkIGJ5IHRoZQogIC8vLyBvcGVyYXRpb25zIGJlbG93LgogIE1hcDxJbXBvcnRFbnRpdHksIF9EZWZlcnJlZEltcG9ydD4gX2ltcG9ydEluZGV4ID0ge307CgogIC8vLyBUaGUgY2Fub25pY2FsIGluc3RhbmNlIHJlcHJlc2VudGluZyB0aGUgZW1wdHkgaW1wb3J0IHNldC4KICBJbXBvcnRTZXQgX2VtcHR5U2V0ID0gbmV3IEltcG9ydFNldCgpOwoKICAvLy8gVGhlIGltcG9ydCBzZXQgcmVwcmVzZW50aW5nIHRoZSBtYWluIG91dHB1dCB1bml0LCB3aGljaCBoYXBwZW5zIHRvIGJlCiAgLy8vIGltcGxlbWVudGVkIGFzIGFuIGVtcHR5IHNldCBpbiBvdXIgYWxnb3JpdGhtLgogIEltcG9ydFNldCBnZXQgbWFpblNldCA9PiBfZW1wdHlTZXQ7CgogIC8vLyBHZXQgdGhlIHNpbmdsZXRvbiBpbXBvcnQgc2V0IHRoYXQgb25seSBjb250YWlucyBbaW1wb3J0XS4KICBJbXBvcnRTZXQgc2luZ2xldG9uKEltcG9ydEVudGl0eSBpbXBvcnQpIHsKICAgIC8vIEVuc3VyZSB3ZSBoYXZlIGltcG9ydCBpbiB0aGUgaW5kZXguCiAgICByZXR1cm4gX2VtcHR5U2V0Ll9hZGQoX3dyYXAoaW1wb3J0KSk7CiAgfQoKICAvLy8gR2V0IHRoZSBpbXBvcnQgc2V0IHRoYXQgaW5jbHVkZXMgdGhlIHVuaW9uIG9mIFthXSBhbmQgW2JdLgogIEltcG9ydFNldCB1bmlvbihJbXBvcnRTZXQgYSwgSW1wb3J0U2V0IGIpIHsKICAgIGlmIChhID09IG51bGwgfHwgYSA9PSBfZW1wdHlTZXQpIHJldHVybiBiOwogICAgaWYgKGIgPT0gbnVsbCB8fCBiID09IF9lbXB0eVNldCkgcmV0dXJuIGE7CgogICAgLy8gV2UgY3JlYXRlIHRoZSB1bmlvbiBieSBtZXJnaW5nIHRoZSBpbXBvcnRzIGluIGNhbm9uaWNhbCBvcmRlciBmaXJzdCwgYW5kCiAgICAvLyB0aGVuIGdldHRpbmcgKG9yIGNyZWF0aW5nKSB0aGUgY2Fub25pY2FsIHNldHMgYnkgYWRkaW5nIGFuIGltcG9ydCBhdCBhCiAgICAvLyB0aW1lLgogICAgTGlzdDxfRGVmZXJyZWRJbXBvcnQ+IGFJbXBvcnRzID0gYS5faW1wb3J0czsKICAgIExpc3Q8X0RlZmVycmVkSW1wb3J0PiBiSW1wb3J0cyA9IGIuX2ltcG9ydHM7CiAgICBpbnQgaSA9IDAsIGogPSAwLCBsYXN0QUluZGV4ID0gMCwgbGFzdEJJbmRleCA9IDA7CiAgICB2YXIgcmVzdWx0ID0gX2VtcHR5U2V0OwogICAgd2hpbGUgKGkgPCBhSW1wb3J0cy5sZW5ndGggJiYgaiA8IGJJbXBvcnRzLmxlbmd0aCkgewogICAgICB2YXIgaW1wb3J0QSA9IGFJbXBvcnRzW2ldOwogICAgICB2YXIgaW1wb3J0QiA9IGJJbXBvcnRzW2pdOwogICAgICBhc3NlcnQobGFzdEFJbmRleCA8PSBpbXBvcnRBLmluZGV4KTsKICAgICAgYXNzZXJ0KGxhc3RCSW5kZXggPD0gaW1wb3J0Qi5pbmRleCk7CiAgICAgIGlmIChpbXBvcnRBLmluZGV4IDwgaW1wb3J0Qi5pbmRleCkgewogICAgICAgIHJlc3VsdCA9IHJlc3VsdC5fYWRkKGltcG9ydEEpOwogICAgICAgIGkrKzsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHQgPSByZXN1bHQuX2FkZChpbXBvcnRCKTsKICAgICAgICBqKys7CiAgICAgIH0KICAgIH0KICAgIGZvciAoOyBpIDwgYUltcG9ydHMubGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0ID0gcmVzdWx0Ll9hZGQoYUltcG9ydHNbaV0pOwogICAgfQogICAgZm9yICg7IGogPCBiSW1wb3J0cy5sZW5ndGg7IGorKykgewogICAgICByZXN1bHQgPSByZXN1bHQuX2FkZChiSW1wb3J0c1tqXSk7CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBHZXQgdGhlIGluZGV4IGZvciBhbiBbaW1wb3J0XSBhY2NvcmRpbmcgdG8gdGhlIGNhbm9uaWNhbCBvcmRlci4KICBfRGVmZXJyZWRJbXBvcnQgX3dyYXAoSW1wb3J0RW50aXR5IGltcG9ydCkgewogICAgcmV0dXJuIF9pbXBvcnRJbmRleC5wdXRJZkFic2VudCgKICAgICAgICBpbXBvcnQsICgpID0+IG5ldyBfRGVmZXJyZWRJbXBvcnQoaW1wb3J0LCBfaW1wb3J0SW5kZXgubGVuZ3RoKSk7CiAgfQp9CgovLy8gQSBjYW5vbmljYWwgc2V0IG9mIGRlZmVycmVkIGltcG9ydHMuCmNsYXNzIEltcG9ydFNldCB7CiAgLy8vIEltcG9ydHMgdGhhdCBhcmUgcGFydCBvZiB0aGlzIHNldC4KICAvLy8KICAvLy8gSW52YXJpYW50OiB0aGUgb3JkZXIgaW4gd2hpY2ggZWxlbWVudHMgYXJlIGFkZGVkIG11c3QgcmVzcGVjdCB0aGUKICAvLy8gY2Fub25pY2FsIG9yZGVyIG9mIGFsbCBpbXBvcnRzIGluIFtJbXBvcnRTZXRMYXR0aWNlXS4KICBmaW5hbCBMaXN0PF9EZWZlcnJlZEltcG9ydD4gX2ltcG9ydHM7CgogIC8vLyBMaW5rcyB0byBvdGhlciBpbXBvcnQgc2V0cyBpbiB0aGUgbGF0dGljZSBieSBhZGRpbmcgb25lIGltcG9ydC4KICBmaW5hbCBNYXA8X0RlZmVycmVkSW1wb3J0LCBJbXBvcnRTZXQ+IF90cmFuc2l0aW9ucyA9CiAgICAgIDxfRGVmZXJyZWRJbXBvcnQsIEltcG9ydFNldD57fTsKCiAgSW1wb3J0U2V0KFt0aGlzLl9pbXBvcnRzID0gY29uc3QgPF9EZWZlcnJlZEltcG9ydD5bXV0pOwoKICAvLy8gVGhlIG91dHB1dCB1bml0IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBzZXQgb2YgaW1wb3J0cywgaWYgYW55LgogIE91dHB1dFVuaXQgdW5pdDsKCiAgaW50IGdldCBsZW5ndGggPT4gX2ltcG9ydHMubGVuZ3RoOwoKICAvLy8gQ3JlYXRlIGFuIGltcG9ydCBzZXQgdGhhdCBhZGRzIFtpbXBvcnRdIHRvIGFsbCB0aGUgaW1wb3J0cyBvbiB0aGlzIHNldC4KICAvLy8gVGhpcyBhc3N1bWVzIHRoYXQgaW1wb3J0J3MgY2Fub25pY2FsIG9yZGVyIGNvbWVzIGFmdGVyIGFsbCBpbXBvcnRzIGluCiAgLy8vIHRoaXMgY3VycmVudCBzZXQuIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20gW0ltcG9ydFNldExhdHRpY2VdLAogIC8vLyBzaW5jZSBpdCBpcyB3aGVyZSB3ZSBwcmVzZXJ2ZSB0aGlzIGludmFyaWFudC4KICBJbXBvcnRTZXQgX2FkZChfRGVmZXJyZWRJbXBvcnQgaW1wb3J0KSB7CiAgICBJbXBvcnRTZXQgcmVzdWx0ID0gX3RyYW5zaXRpb25zW2ltcG9ydF07CiAgICBpZiAocmVzdWx0ID09IG51bGwpIHsKICAgICAgcmVzdWx0ID0gbmV3IEltcG9ydFNldChuZXcgTGlzdC5mcm9tKF9pbXBvcnRzKS4uYWRkKGltcG9ydCkpOwogICAgICByZXN1bHQuX3RyYW5zaXRpb25zW2ltcG9ydF0gPSByZXN1bHQ7CiAgICAgIF90cmFuc2l0aW9uc1tpbXBvcnRdID0gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdJbXBvcnRTZXQoc2l6ZTogJGxlbmd0aCwgJyk7CiAgICBmb3IgKHZhciBpbXBvcnQgaW4gX2ltcG9ydHMpIHsKICAgICAgc2Iud3JpdGUoJyR7aW1wb3J0LmRlY2xhcmF0aW9uLm5hbWV9ICcpOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiAnJHNiJzsKICB9Cn0KCi8vLyBUaGUgYWxnb3JpdGhtIHdvcmsgcXVldWUuCmNsYXNzIFdvcmtRdWV1ZSB7CiAgLy8vIFRoZSBhY3R1YWwgcXVldWUgb2Ygd29yayB0aGF0IG5lZWRzIHRvIGJlIGRvbmUuCiAgZmluYWwgUXVldWU8V29ya0l0ZW0+IHF1ZXVlID0gbmV3IFF1ZXVlPFdvcmtJdGVtPigpOwoKICAvLy8gQW4gaW5kZXggdG8gZmluZCB3b3JrIGl0ZW1zIGluIHRoZSBxdWV1ZSBjb3JyZXNwb25kaW5nIHRvIGEgY2xhc3MuCiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBXb3JrSXRlbT4gcGVuZGluZ0NsYXNzZXMgPSA8Q2xhc3NFbnRpdHksIFdvcmtJdGVtPnt9OwoKICAvLy8gQW4gaW5kZXggdG8gZmluZCB3b3JrIGl0ZW1zIGluIHRoZSBxdWV1ZSBjb3JyZXNwb25kaW5nIHRvIGEgbWVtYmVyLgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIFdvcmtJdGVtPiBwZW5kaW5nTWVtYmVycyA9IDxNZW1iZXJFbnRpdHksIFdvcmtJdGVtPnt9OwoKICAvLy8gQW4gaW5kZXggdG8gZmluZCB3b3JrIGl0ZW1zIGluIHRoZSBxdWV1ZSBjb3JyZXNwb25kaW5nIHRvIGEgY29uc3RhbnQuCiAgZmluYWwgTWFwPENvbnN0YW50VmFsdWUsIFdvcmtJdGVtPiBwZW5kaW5nQ29uc3RhbnRzID0KICAgICAgPENvbnN0YW50VmFsdWUsIFdvcmtJdGVtPnt9OwoKICAvLy8gTGF0dGljZSB1c2VkIHRvIGNvbXB1dGUgdW5pb25zIG9mIFtJbXBvcnRTZXRdcy4KICBmaW5hbCBJbXBvcnRTZXRMYXR0aWNlIF9pbXBvcnRTZXRzOwoKICBXb3JrUXVldWUodGhpcy5faW1wb3J0U2V0cyk7CgogIC8vLyBXaGV0aGVyIHRoZXJlIGFyZSBubyBtb3JlIHdvcmsgaXRlbXMgaW4gdGhlIHF1ZXVlLgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gcXVldWUuaXNOb3RFbXB0eTsKCiAgLy8vIFBvcCB0aGUgbmV4dCBlbGVtZW50IGluIHRoZSBxdWV1ZS4KICBXb3JrSXRlbSBuZXh0SXRlbSgpIHsKICAgIGFzc2VydChpc05vdEVtcHR5KTsKICAgIHJldHVybiBxdWV1ZS5yZW1vdmVGaXJzdCgpOwogIH0KCiAgLy8vIEFkZCB0byB0aGUgcXVldWUgdGhhdCBbZWxlbWVudF0gc2hvdWxkIGJlIHVwZGF0ZWQgdG8gaW5jbHVkZSBhbGwgaW1wb3J0cwogIC8vLyBpbiBbaW1wb3J0U2V0XS4gSWYgdGhlcmUgaXMgYWxyZWFkeSBhIHdvcmsgaXRlbSBpbiB0aGUgcXVldWUgZm9yCiAgLy8vIFtlbGVtZW50XSwgdGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIHdvcmsgaXRlbSBub3cgaW5jbHVkZXMgdGhlIHVuaW9uIG9mCiAgLy8vIFtpbXBvcnRTZXRdIGFuZCB0aGUgZXhpc3Rpbmcgd29yayBpdGVtJ3MgaW1wb3J0IHNldC4KICB2b2lkIGFkZENsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQsIEltcG9ydFNldCBpbXBvcnRTZXQpIHsKICAgIHZhciBpdGVtID0gcGVuZGluZ0NsYXNzZXNbZWxlbWVudF07CiAgICBpZiAoaXRlbSA9PSBudWxsKSB7CiAgICAgIGl0ZW0gPSBuZXcgQ2xhc3NXb3JrSXRlbShlbGVtZW50LCBpbXBvcnRTZXQpOwogICAgICBwZW5kaW5nQ2xhc3Nlc1tlbGVtZW50XSA9IGl0ZW07CiAgICAgIHF1ZXVlLmFkZChpdGVtKTsKICAgIH0gZWxzZSB7CiAgICAgIGl0ZW0uaW1wb3J0c1RvQWRkID0gX2ltcG9ydFNldHMudW5pb24oaXRlbS5pbXBvcnRzVG9BZGQsIGltcG9ydFNldCk7CiAgICB9CiAgfQoKICAvLy8gQWRkIHRvIHRoZSBxdWV1ZSB0aGF0IFtlbGVtZW50XSBzaG91bGQgYmUgdXBkYXRlZCB0byBpbmNsdWRlIGFsbCBpbXBvcnRzCiAgLy8vIGluIFtpbXBvcnRTZXRdLiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgd29yayBpdGVtIGluIHRoZSBxdWV1ZSBmb3IKICAvLy8gW2VsZW1lbnRdLCB0aGlzIG1ha2VzIHN1cmUgdGhhdCB0aGUgd29yayBpdGVtIG5vdyBpbmNsdWRlcyB0aGUgdW5pb24gb2YKICAvLy8gW2ltcG9ydFNldF0gYW5kIHRoZSBleGlzdGluZyB3b3JrIGl0ZW0ncyBpbXBvcnQgc2V0LgogIHZvaWQgYWRkTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50LCBJbXBvcnRTZXQgaW1wb3J0U2V0KSB7CiAgICB2YXIgaXRlbSA9IHBlbmRpbmdNZW1iZXJzW2VsZW1lbnRdOwogICAgaWYgKGl0ZW0gPT0gbnVsbCkgewogICAgICBpdGVtID0gbmV3IE1lbWJlcldvcmtJdGVtKGVsZW1lbnQsIGltcG9ydFNldCk7CiAgICAgIHBlbmRpbmdNZW1iZXJzW2VsZW1lbnRdID0gaXRlbTsKICAgICAgcXVldWUuYWRkKGl0ZW0pOwogICAgfSBlbHNlIHsKICAgICAgaXRlbS5pbXBvcnRzVG9BZGQgPSBfaW1wb3J0U2V0cy51bmlvbihpdGVtLmltcG9ydHNUb0FkZCwgaW1wb3J0U2V0KTsKICAgIH0KICB9CgogIC8vLyBBZGQgdG8gdGhlIHF1ZXVlIHRoYXQgW2NvbnN0YW50XSBzaG91bGQgYmUgdXBkYXRlZCB0byBpbmNsdWRlIGFsbCBpbXBvcnRzCiAgLy8vIGluIFtpbXBvcnRTZXRdLiBJZiB0aGVyZSBpcyBhbHJlYWR5IGEgd29yayBpdGVtIGluIHRoZSBxdWV1ZSBmb3IKICAvLy8gW2NvbnN0YW50XSwgdGhpcyBtYWtlcyBzdXJlIHRoYXQgdGhlIHdvcmsgaXRlbSBub3cgaW5jbHVkZXMgdGhlIHVuaW9uIG9mCiAgLy8vIFtpbXBvcnRTZXRdIGFuZCB0aGUgZXhpc3Rpbmcgd29yayBpdGVtJ3MgaW1wb3J0IHNldC4KICB2b2lkIGFkZENvbnN0YW50KENvbnN0YW50VmFsdWUgY29uc3RhbnQsIEltcG9ydFNldCBpbXBvcnRTZXQpIHsKICAgIHZhciBpdGVtID0gcGVuZGluZ0NvbnN0YW50c1tjb25zdGFudF07CiAgICBpZiAoaXRlbSA9PSBudWxsKSB7CiAgICAgIGl0ZW0gPSBuZXcgQ29uc3RhbnRXb3JrSXRlbShjb25zdGFudCwgaW1wb3J0U2V0KTsKICAgICAgcGVuZGluZ0NvbnN0YW50c1tjb25zdGFudF0gPSBpdGVtOwogICAgICBxdWV1ZS5hZGQoaXRlbSk7CiAgICB9IGVsc2UgewogICAgICBpdGVtLmltcG9ydHNUb0FkZCA9IF9pbXBvcnRTZXRzLnVuaW9uKGl0ZW0uaW1wb3J0c1RvQWRkLCBpbXBvcnRTZXQpOwogICAgfQogIH0KfQoKLy8vIFN1bW1hcnkgb2YgdGhlIHdvcmsgdGhhdCBuZWVkcyB0byBiZSBkb25lIG9uIGEgY2xhc3MsIG1lbWJlciwgb3IgY29uc3RhbnQuCmFic3RyYWN0IGNsYXNzIFdvcmtJdGVtIHsKICAvLy8gQWRkaXRpb25hbCBpbXBvcnRzIHRoYXQgdXNlIFtlbGVtZW50XSBvciBbdmFsdWVdIGFuZCBuZWVkIHRvIGJlIGFkZGVkIGJ5CiAgLy8vIHRoZSBhbGdvcml0aG0uCiAgLy8vCiAgLy8vIFRoaXMgaXMgbm9uLWZpbmFsIGluIGNhc2Ugd2UgYWRkIG1vcmUgZGVmZXJyZWQgaW1wb3J0cyB0byB0aGUgc2V0IGJlZm9yZQogIC8vLyB0aGUgd29yayBpdGVtIGlzIGFwcGxpZWQgKHNlZSBbV29ya1F1ZXVlLmFkZEVsZW1lbnRdIGFuZAogIC8vLyBbV29ya1F1ZXVlLmFkZENvbnN0YW50XSkuCiAgSW1wb3J0U2V0IGltcG9ydHNUb0FkZDsKCiAgV29ya0l0ZW0odGhpcy5pbXBvcnRzVG9BZGQpOwoKICB2b2lkIHVwZGF0ZShEZWZlcnJlZExvYWRUYXNrIHRhc2ssIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgV29ya1F1ZXVlIHF1ZXVlKTsKfQoKLy8vIFN1bW1hcnkgb2YgdGhlIHdvcmsgdGhhdCBuZWVkcyB0byBiZSBkb25lIG9uIGEgY2xhc3MuCmNsYXNzIENsYXNzV29ya0l0ZW0gZXh0ZW5kcyBXb3JrSXRlbSB7CiAgLy8vIENsYXNzIHRvIGJlIHJlY3Vyc2l2ZWx5IHVwZGF0ZWQuCiAgZmluYWwgQ2xhc3NFbnRpdHkgY2xzOwoKICBDbGFzc1dvcmtJdGVtKHRoaXMuY2xzLCBJbXBvcnRTZXQgbmV3U2V0KSA6IHN1cGVyKG5ld1NldCk7CgogIEBvdmVycmlkZQogIHZvaWQgdXBkYXRlKAogICAgICBEZWZlcnJlZExvYWRUYXNrIHRhc2ssIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgV29ya1F1ZXVlIHF1ZXVlKSB7CiAgICBxdWV1ZS5wZW5kaW5nQ2xhc3Nlcy5yZW1vdmUoY2xzKTsKICAgIEltcG9ydFNldCBvbGRTZXQgPSB0YXNrLl9jbGFzc1RvU2V0W2Nsc107CiAgICBJbXBvcnRTZXQgbmV3U2V0ID0gdGFzay5pbXBvcnRTZXRzLnVuaW9uKG9sZFNldCwgaW1wb3J0c1RvQWRkKTsKICAgIHRhc2suX3VwZGF0ZUNsYXNzUmVjdXJzaXZlKGNsb3NlZFdvcmxkLCBjbHMsIG9sZFNldCwgbmV3U2V0LCBxdWV1ZSk7CiAgfQp9CgovLy8gU3VtbWFyeSBvZiB0aGUgd29yayB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgb24gYSBtZW1iZXIuCmNsYXNzIE1lbWJlcldvcmtJdGVtIGV4dGVuZHMgV29ya0l0ZW0gewogIC8vLyBNZW1iZXIgdG8gYmUgcmVjdXJzaXZlbHkgdXBkYXRlZC4KICBmaW5hbCBNZW1iZXJFbnRpdHkgbWVtYmVyOwoKICBNZW1iZXJXb3JrSXRlbSh0aGlzLm1lbWJlciwgSW1wb3J0U2V0IG5ld1NldCkgOiBzdXBlcihuZXdTZXQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHVwZGF0ZSgKICAgICAgRGVmZXJyZWRMb2FkVGFzayB0YXNrLCBLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIFdvcmtRdWV1ZSBxdWV1ZSkgewogICAgcXVldWUucGVuZGluZ01lbWJlcnMucmVtb3ZlKG1lbWJlcik7CiAgICBJbXBvcnRTZXQgb2xkU2V0ID0gdGFzay5fbWVtYmVyVG9TZXRbbWVtYmVyXTsKICAgIEltcG9ydFNldCBuZXdTZXQgPSB0YXNrLmltcG9ydFNldHMudW5pb24ob2xkU2V0LCBpbXBvcnRzVG9BZGQpOwogICAgdGFzay5fdXBkYXRlTWVtYmVyUmVjdXJzaXZlKGNsb3NlZFdvcmxkLCBtZW1iZXIsIG9sZFNldCwgbmV3U2V0LCBxdWV1ZSk7CiAgfQp9CgovLy8gU3VtbWFyeSBvZiB0aGUgd29yayB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgb24gYSBjb25zdGFudC4KY2xhc3MgQ29uc3RhbnRXb3JrSXRlbSBleHRlbmRzIFdvcmtJdGVtIHsKICAvLy8gQ29uc3RhbnQgdG8gYmUgcmVjdXJzaXZlbHkgdXBkYXRlZC4KICBmaW5hbCBDb25zdGFudFZhbHVlIGNvbnN0YW50OwoKICBDb25zdGFudFdvcmtJdGVtKHRoaXMuY29uc3RhbnQsIEltcG9ydFNldCBuZXdTZXQpIDogc3VwZXIobmV3U2V0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB1cGRhdGUoCiAgICAgIERlZmVycmVkTG9hZFRhc2sgdGFzaywgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBXb3JrUXVldWUgcXVldWUpIHsKICAgIHF1ZXVlLnBlbmRpbmdDb25zdGFudHMucmVtb3ZlKGNvbnN0YW50KTsKICAgIEltcG9ydFNldCBvbGRTZXQgPSB0YXNrLl9jb25zdGFudFRvU2V0W2NvbnN0YW50XTsKICAgIEltcG9ydFNldCBuZXdTZXQgPSB0YXNrLmltcG9ydFNldHMudW5pb24ob2xkU2V0LCBpbXBvcnRzVG9BZGQpOwogICAgdGFzay5fdXBkYXRlQ29uc3RhbnRSZWN1cnNpdmUoY2xvc2VkV29ybGQsIGNvbnN0YW50LCBvbGRTZXQsIG5ld1NldCwgcXVldWUpOwogIH0KfQoKLy8vIEludGVyZmFjZSBmb3IgdXBkYXRpbmcgYW4gW091dHB1dFVuaXREYXRhXSBvYmplY3Qgd2l0aCBkYXRhIGZvciBsYXRlCi8vLyBtZW1iZXJzLCB0aGF0IGlzLCBtZW1iZXJzIGNyZWF0ZWQgb24gZGVtYW5kIGR1cmluZyBjb2RlIGdlbmVyYXRpb24uCmNsYXNzIExhdGVPdXRwdXRVbml0RGF0YUJ1aWxkZXIgewogIGZpbmFsIE91dHB1dFVuaXREYXRhIF9vdXRwdXRVbml0RGF0YTsKCiAgTGF0ZU91dHB1dFVuaXREYXRhQnVpbGRlcih0aGlzLl9vdXRwdXRVbml0RGF0YSk7CgogIC8vLyBSZWdpc3RlcnMgW25ld0VudGl0eV0gdG8gYmUgZW1pdHRlZCBpbiB0aGUgc2FtZSBvdXRwdXQgdW5pdCBhcwogIC8vLyBbZXhpc3RpbmdFbnRpdHldOwogIHZvaWQgcmVnaXN0ZXJDb2xvY2F0ZWRNZW1iZXJzKAogICAgICBNZW1iZXJFbnRpdHkgZXhpc3RpbmdFbnRpdHksIE1lbWJlckVudGl0eSBuZXdFbnRpdHkpIHsKICAgIGFzc2VydChfb3V0cHV0VW5pdERhdGEuX21lbWJlclRvVW5pdFtuZXdFbnRpdHldID09IG51bGwpOwogICAgX291dHB1dFVuaXREYXRhLl9tZW1iZXJUb1VuaXRbbmV3RW50aXR5XSA9CiAgICAgICAgX291dHB1dFVuaXREYXRhLm91dHB1dFVuaXRGb3JNZW1iZXIoZXhpc3RpbmdFbnRpdHkpOwogIH0KfQoKLy8vIFJlc3VsdHMgb2YgdGhlIGRlZmVycmVkIGxvYWRpbmcgYWxnb3JpdGhtLgovLy8KLy8vIFByb3ZpZGVzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvdXRwdXQgdW5pdCBhc3NvY2lhdGVkIHdpdGggZW50aXRpZXMgYW5kCi8vLyBjb25zdGFudHMsIGFzIHdlbGwgYXMgb3RoZXIgaGVscGVyIG1ldGhvZHMuCi8vIFRPRE8oc2lnbXVuZCk6IGNvbnNpZGVyIG1vdmluZyBoZXJlIGV2ZXJ5IHBpZWNlIG9mIGRhdGEgdXNlZCBhcyBhIHJlc3VsdCBvZgovLyBkZWZlcnJlZCBsb2FkaW5nIChpbmNsdWRpbmcgaHVua3NUb0xvYWQsIGV0YykuCmNsYXNzIE91dHB1dFVuaXREYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW091dHB1dFVuaXREYXRhXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ291dHB1dC11bml0LWRhdGEnOwoKICBmaW5hbCBib29sIGlzUHJvZ3JhbVNwbGl0OwogIGZpbmFsIE91dHB1dFVuaXQgbWFpbk91dHB1dFVuaXQ7CiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBPdXRwdXRVbml0PiBfY2xhc3NUb1VuaXQ7CiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwgT3V0cHV0VW5pdD4gX21lbWJlclRvVW5pdDsKICBmaW5hbCBNYXA8TG9jYWwsIE91dHB1dFVuaXQ+IF9sb2NhbEZ1bmN0aW9uVG9Vbml0OwogIGZpbmFsIE1hcDxDb25zdGFudFZhbHVlLCBPdXRwdXRVbml0PiBfY29uc3RhbnRUb1VuaXQ7CiAgZmluYWwgTGlzdDxPdXRwdXRVbml0PiBvdXRwdXRVbml0czsKICBmaW5hbCBNYXA8SW1wb3J0RW50aXR5LCBTdHJpbmc+IF9pbXBvcnREZWZlck5hbWU7CgogIC8vLyBBIG1hcHBpbmcgZnJvbSB0aGUgbmFtZSBvZiBhIGRlZmVyIGltcG9ydCB0byBhbGwgdGhlIG91dHB1dCB1bml0cyBpdAogIC8vLyBkZXBlbmRzIG9uIGluIGEgbGlzdCBvZiBsaXN0cyB0byBiZSBsb2FkZWQgaW4gdGhlIG9yZGVyIHRoZXkgYXBwZWFyLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSB7ImxpYjEiOiBbW2xpYjFfbGliMl9saWIzXSwgW2xpYjFfbGliMiwgbGliMV9saWIzXSwKICAvLy8gW2xpYjFdXX0gd291bGQgbWVhbiB0aGF0IGluIG9yZGVyIHRvIGxvYWQgImxpYjEiIGZpcnN0IHRoZSBodW5rCiAgLy8vIGxpYjFfbGliMl9saWIyIHNob3VsZCBiZSBsb2FkZWQsIHRoZW4gdGhlIGh1bmtzIGxpYjFfbGliMiBhbmQgbGliMV9saWIzCiAgLy8vIGNhbiBiZSBsb2FkZWQgaW4gcGFyYWxsZWwuIEFuZCBmaW5hbGx5IGxpYjEgY2FuIGJlIGxvYWRlZC4KICBmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PE91dHB1dFVuaXQ+PiBodW5rc1RvTG9hZDsKCiAgLy8vIEJlY2F1c2UgdGhlIHRva2VuLXN0cmVhbSBpcyBmb3Jnb3R0ZW4gbGF0ZXIgaW4gdGhlIHByb2dyYW0sIHdlIGNhY2hlIGEKICAvLy8gZGVzY3JpcHRpb24gb2YgZWFjaCBkZWZlcnJlZCBpbXBvcnQuCiAgZmluYWwgTWFwPEltcG9ydEVudGl0eSwgSW1wb3J0RGVzY3JpcHRpb24+IF9kZWZlcnJlZEltcG9ydERlc2NyaXB0aW9uczsKCiAgT3V0cHV0VW5pdERhdGEoCiAgICAgIHRoaXMuaXNQcm9ncmFtU3BsaXQsCiAgICAgIHRoaXMubWFpbk91dHB1dFVuaXQsCiAgICAgIHRoaXMuX2NsYXNzVG9Vbml0LAogICAgICB0aGlzLl9tZW1iZXJUb1VuaXQsCiAgICAgIHRoaXMuX2xvY2FsRnVuY3Rpb25Ub1VuaXQsCiAgICAgIHRoaXMuX2NvbnN0YW50VG9Vbml0LAogICAgICB0aGlzLm91dHB1dFVuaXRzLAogICAgICB0aGlzLl9pbXBvcnREZWZlck5hbWUsCiAgICAgIHRoaXMuaHVua3NUb0xvYWQsCiAgICAgIHRoaXMuX2RlZmVycmVkSW1wb3J0RGVzY3JpcHRpb25zKTsKCiAgLy8gQ3JlYXRlcyBKLXdvcmxkIGRhdGEgZnJvbSB0aGUgSy13b3JsZCBkYXRhLgogIGZhY3RvcnkgT3V0cHV0VW5pdERhdGEuZnJvbSgKICAgICAgT3V0cHV0VW5pdERhdGEgb3RoZXIsCiAgICAgIExpYnJhcnlFbnRpdHkgY29udmVydExpYnJhcnkoTGlicmFyeUVudGl0eSBsaWJyYXJ5KSwKICAgICAgTWFwPENsYXNzRW50aXR5LCBPdXRwdXRVbml0PiBGdW5jdGlvbigKICAgICAgICAgICAgICBNYXA8Q2xhc3NFbnRpdHksIE91dHB1dFVuaXQ+LCBNYXA8TG9jYWwsIE91dHB1dFVuaXQ+KQogICAgICAgICAgY29udmVydENsYXNzTWFwLAogICAgICBNYXA8TWVtYmVyRW50aXR5LCBPdXRwdXRVbml0PiBGdW5jdGlvbigKICAgICAgICAgICAgICBNYXA8TWVtYmVyRW50aXR5LCBPdXRwdXRVbml0PiwgTWFwPExvY2FsLCBPdXRwdXRVbml0PikKICAgICAgICAgIGNvbnZlcnRNZW1iZXJNYXAsCiAgICAgIE1hcDxDb25zdGFudFZhbHVlLCBPdXRwdXRVbml0PiBGdW5jdGlvbihNYXA8Q29uc3RhbnRWYWx1ZSwgT3V0cHV0VW5pdD4pCiAgICAgICAgICBjb252ZXJ0Q29uc3RhbnRNYXApIHsKICAgIE1hcDxDbGFzc0VudGl0eSwgT3V0cHV0VW5pdD4gY2xhc3NUb1VuaXQgPQogICAgICAgIGNvbnZlcnRDbGFzc01hcChvdGhlci5fY2xhc3NUb1VuaXQsIG90aGVyLl9sb2NhbEZ1bmN0aW9uVG9Vbml0KTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIE91dHB1dFVuaXQ+IG1lbWJlclRvVW5pdCA9CiAgICAgICAgY29udmVydE1lbWJlck1hcChvdGhlci5fbWVtYmVyVG9Vbml0LCBvdGhlci5fbG9jYWxGdW5jdGlvblRvVW5pdCk7CiAgICBNYXA8Q29uc3RhbnRWYWx1ZSwgT3V0cHV0VW5pdD4gY29uc3RhbnRUb1VuaXQgPQogICAgICAgIGNvbnZlcnRDb25zdGFudE1hcChvdGhlci5fY29uc3RhbnRUb1VuaXQpOwogICAgTWFwPEltcG9ydEVudGl0eSwgSW1wb3J0RGVzY3JpcHRpb24+IGRlZmVycmVkSW1wb3J0RGVzY3JpcHRpb25zID0ge307CiAgICBvdGhlci5fZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnMKICAgICAgICAuZm9yRWFjaCgoSW1wb3J0RW50aXR5IGltcG9ydCwgSW1wb3J0RGVzY3JpcHRpb24gZGVzY3JpcHRpb24pIHsKICAgICAgZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnNbaW1wb3J0XSA9IG5ldyBJbXBvcnREZXNjcmlwdGlvbi5pbnRlcm5hbCgKICAgICAgICAgIGRlc2NyaXB0aW9uLmltcG9ydGluZ1VyaSwKICAgICAgICAgIGRlc2NyaXB0aW9uLnByZWZpeCwKICAgICAgICAgIGNvbnZlcnRMaWJyYXJ5KGRlc2NyaXB0aW9uLl9pbXBvcnRpbmdMaWJyYXJ5KSk7CiAgICB9KTsKCiAgICByZXR1cm4gbmV3IE91dHB1dFVuaXREYXRhKAogICAgICAgIG90aGVyLmlzUHJvZ3JhbVNwbGl0LAogICAgICAgIG90aGVyLm1haW5PdXRwdXRVbml0LAogICAgICAgIGNsYXNzVG9Vbml0LAogICAgICAgIG1lbWJlclRvVW5pdCwKICAgICAgICAvLyBMb2NhbCBmdW5jdGlvbnMgb25seSBtYWtlIHNlbnNlIGluIHRoZSBLLXdvcmxkIG1vZGVsLgogICAgICAgIGNvbnN0IDxMb2NhbCwgT3V0cHV0VW5pdD57fSwKICAgICAgICBjb25zdGFudFRvVW5pdCwKICAgICAgICBvdGhlci5vdXRwdXRVbml0cywKICAgICAgICBvdGhlci5faW1wb3J0RGVmZXJOYW1lLAogICAgICAgIG90aGVyLmh1bmtzVG9Mb2FkLAogICAgICAgIGRlZmVycmVkSW1wb3J0RGVzY3JpcHRpb25zKTsKICB9CgogIC8vLyBEZXNlcmlhbGl6ZXMgYW4gW091dHB1dFVuaXREYXRhXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IE91dHB1dFVuaXREYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBib29sIGlzUHJvZ3JhbVNwbGl0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBMaXN0PE91dHB1dFVuaXQ+IG91dHB1dFVuaXRzID0gc291cmNlLnJlYWRMaXN0KCgpIHsKICAgICAgYm9vbCBpc01haW5PdXRwdXQgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICBTZXQ8SW1wb3J0RW50aXR5PiBpbXBvcnRTZXQgPSBzb3VyY2UucmVhZEltcG9ydHMoKS50b1NldCgpOwogICAgICByZXR1cm4gbmV3IE91dHB1dFVuaXQoaXNNYWluT3V0cHV0LCBuYW1lLCBpbXBvcnRTZXQpOwogICAgfSk7CiAgICBPdXRwdXRVbml0IG1haW5PdXRwdXRVbml0ID0gb3V0cHV0VW5pdHNbc291cmNlLnJlYWRJbnQoKV07CgogICAgTWFwPENsYXNzRW50aXR5LCBPdXRwdXRVbml0PiBjbGFzc1RvVW5pdCA9IHNvdXJjZS5yZWFkQ2xhc3NNYXAoKCkgewogICAgICByZXR1cm4gb3V0cHV0VW5pdHNbc291cmNlLnJlYWRJbnQoKV07CiAgICB9KTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIE91dHB1dFVuaXQ+IG1lbWJlclRvVW5pdCA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJNYXAoKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgcmV0dXJuIG91dHB1dFVuaXRzW3NvdXJjZS5yZWFkSW50KCldOwogICAgfSk7CiAgICBNYXA8Q29uc3RhbnRWYWx1ZSwgT3V0cHV0VW5pdD4gY29uc3RhbnRUb1VuaXQgPSBzb3VyY2UucmVhZENvbnN0YW50TWFwKCgpIHsKICAgICAgcmV0dXJuIG91dHB1dFVuaXRzW3NvdXJjZS5yZWFkSW50KCldOwogICAgfSk7CiAgICBNYXA8SW1wb3J0RW50aXR5LCBTdHJpbmc+IGltcG9ydERlZmVyTmFtZSA9CiAgICAgICAgc291cmNlLnJlYWRJbXBvcnRNYXAoc291cmNlLnJlYWRTdHJpbmcpOwogICAgTWFwPFN0cmluZywgTGlzdDxPdXRwdXRVbml0Pj4gaHVua3NUb0xvYWQgPSBzb3VyY2UucmVhZFN0cmluZ01hcCgoKSB7CiAgICAgIHJldHVybiBzb3VyY2UucmVhZExpc3QoKCkgewogICAgICAgIHJldHVybiBvdXRwdXRVbml0c1tzb3VyY2UucmVhZEludCgpXTsKICAgICAgfSk7CiAgICB9KTsKICAgIE1hcDxJbXBvcnRFbnRpdHksIEltcG9ydERlc2NyaXB0aW9uPiBkZWZlcnJlZEltcG9ydERlc2NyaXB0aW9ucyA9CiAgICAgICAgc291cmNlLnJlYWRJbXBvcnRNYXAoKCkgewogICAgICBTdHJpbmcgaW1wb3J0aW5nVXJpID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgICAgU3RyaW5nIHByZWZpeCA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgIExpYnJhcnlFbnRpdHkgaW1wb3J0aW5nTGlicmFyeSA9IHNvdXJjZS5yZWFkTGlicmFyeSgpOwogICAgICByZXR1cm4gbmV3IEltcG9ydERlc2NyaXB0aW9uLmludGVybmFsKAogICAgICAgICAgaW1wb3J0aW5nVXJpLCBwcmVmaXgsIGltcG9ydGluZ0xpYnJhcnkpOwogICAgfSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IE91dHB1dFVuaXREYXRhKAogICAgICAgIGlzUHJvZ3JhbVNwbGl0LAogICAgICAgIG1haW5PdXRwdXRVbml0LAogICAgICAgIGNsYXNzVG9Vbml0LAogICAgICAgIG1lbWJlclRvVW5pdCwKICAgICAgICAvLyBMb2NhbCBmdW5jdGlvbnMgb25seSBtYWtlIHNlbnNlIGluIHRoZSBLLXdvcmxkIG1vZGVsLgogICAgICAgIGNvbnN0IDxMb2NhbCwgT3V0cHV0VW5pdD57fSwKICAgICAgICBjb25zdGFudFRvVW5pdCwKICAgICAgICBvdXRwdXRVbml0cywKICAgICAgICBpbXBvcnREZWZlck5hbWUsCiAgICAgICAgaHVua3NUb0xvYWQsCiAgICAgICAgZGVmZXJyZWRJbXBvcnREZXNjcmlwdGlvbnMpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbT3V0cHV0VW5pdERhdGFdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQm9vbChpc1Byb2dyYW1TcGxpdCk7CiAgICBNYXA8T3V0cHV0VW5pdCwgaW50PiBvdXRwdXRVbml0SW5kaWNlcyA9IHt9OwogICAgc2luay53cml0ZUxpc3Qob3V0cHV0VW5pdHMsIChPdXRwdXRVbml0IG91dHB1dFVuaXQpIHsKICAgICAgb3V0cHV0VW5pdEluZGljZXNbb3V0cHV0VW5pdF0gPSBvdXRwdXRVbml0SW5kaWNlcy5sZW5ndGg7CiAgICAgIHNpbmsud3JpdGVCb29sKG91dHB1dFVuaXQuaXNNYWluT3V0cHV0KTsKICAgICAgc2luay53cml0ZVN0cmluZyhvdXRwdXRVbml0Lm5hbWUpOwogICAgICBzaW5rLndyaXRlSW1wb3J0cyhvdXRwdXRVbml0Ll9pbXBvcnRzKTsKICAgIH0pOwogICAgc2luay53cml0ZUludChvdXRwdXRVbml0SW5kaWNlc1ttYWluT3V0cHV0VW5pdF0pOwogICAgc2luay53cml0ZUNsYXNzTWFwKF9jbGFzc1RvVW5pdCwgKE91dHB1dFVuaXQgb3V0cHV0VW5pdCkgewogICAgICBzaW5rLndyaXRlSW50KG91dHB1dFVuaXRJbmRpY2VzW291dHB1dFVuaXRdKTsKICAgIH0pOwogICAgc2luay53cml0ZU1lbWJlck1hcChfbWVtYmVyVG9Vbml0LAogICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyLCBPdXRwdXRVbml0IG91dHB1dFVuaXQpIHsKICAgICAgc2luay53cml0ZUludChvdXRwdXRVbml0SW5kaWNlc1tvdXRwdXRVbml0XSk7CiAgICB9KTsKICAgIHNpbmsud3JpdGVDb25zdGFudE1hcChfY29uc3RhbnRUb1VuaXQsIChPdXRwdXRVbml0IG91dHB1dFVuaXQpIHsKICAgICAgc2luay53cml0ZUludChvdXRwdXRVbml0SW5kaWNlc1tvdXRwdXRVbml0XSk7CiAgICB9KTsKICAgIHNpbmsud3JpdGVJbXBvcnRNYXAoX2ltcG9ydERlZmVyTmFtZSwgc2luay53cml0ZVN0cmluZyk7CiAgICBzaW5rLndyaXRlU3RyaW5nTWFwKGh1bmtzVG9Mb2FkLCAoTGlzdDxPdXRwdXRVbml0PiBvdXRwdXRVbml0cykgewogICAgICBzaW5rLndyaXRlTGlzdCgKICAgICAgICAgIG91dHB1dFVuaXRzLAogICAgICAgICAgKE91dHB1dFVuaXQgb3V0cHV0VW5pdCkgPT4KICAgICAgICAgICAgICBzaW5rLndyaXRlSW50KG91dHB1dFVuaXRJbmRpY2VzW291dHB1dFVuaXRdKSk7CiAgICB9KTsKICAgIHNpbmsud3JpdGVJbXBvcnRNYXAoX2RlZmVycmVkSW1wb3J0RGVzY3JpcHRpb25zLAogICAgICAgIChJbXBvcnREZXNjcmlwdGlvbiBpbXBvcnREZXNjcmlwdGlvbikgewogICAgICBzaW5rLndyaXRlU3RyaW5nKGltcG9ydERlc2NyaXB0aW9uLmltcG9ydGluZ1VyaSk7CiAgICAgIHNpbmsud3JpdGVTdHJpbmcoaW1wb3J0RGVzY3JpcHRpb24ucHJlZml4KTsKICAgICAgc2luay53cml0ZUxpYnJhcnkoaW1wb3J0RGVzY3JpcHRpb24uX2ltcG9ydGluZ0xpYnJhcnkpOwogICAgfSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtPdXRwdXRVbml0XSB3aGVyZSBbY2xzXSBiZWxvbmdzLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGUgbmVlZCBmb3IgW2FsbG93TnVsbF0uIER1bXAtaW5mbyBjdXJyZW50bHkKICAvLyBuZWVkcyBpdC4KICBPdXRwdXRVbml0IG91dHB1dFVuaXRGb3JDbGFzcyhDbGFzc0VudGl0eSBjbHMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAoIWlzUHJvZ3JhbVNwbGl0KSByZXR1cm4gbWFpbk91dHB1dFVuaXQ7CiAgICBPdXRwdXRVbml0IHVuaXQgPSBfY2xhc3NUb1VuaXRbY2xzXTsKICAgIGFzc2VydChhbGxvd051bGwgfHwgdW5pdCAhPSBudWxsLCAnTm8gb3V0cHV0IHVuaXQgZm9yIGNsYXNzICRjbHMnKTsKICAgIHJldHVybiB1bml0ID8/IG1haW5PdXRwdXRVbml0OwogIH0KCiAgT3V0cHV0VW5pdCBvdXRwdXRVbml0Rm9yQ2xhc3NGb3JUZXN0aW5nKENsYXNzRW50aXR5IGNscykgPT4gX2NsYXNzVG9Vbml0W2Nsc107CgogIC8vLyBSZXR1cm5zIHRoZSBbT3V0cHV0VW5pdF0gd2hlcmUgW21lbWJlcl0gYmVsb25ncy4KICBPdXRwdXRVbml0IG91dHB1dFVuaXRGb3JNZW1iZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgaWYgKCFpc1Byb2dyYW1TcGxpdCkgcmV0dXJuIG1haW5PdXRwdXRVbml0OwogICAgT3V0cHV0VW5pdCB1bml0ID0gX21lbWJlclRvVW5pdFttZW1iZXJdOwogICAgYXNzZXJ0KHVuaXQgIT0gbnVsbCwgJ05vIG91dHB1dCB1bml0IGZvciBtZW1iZXIgJG1lbWJlcicpOwogICAgcmV0dXJuIHVuaXQgPz8gbWFpbk91dHB1dFVuaXQ7CiAgfQoKICBPdXRwdXRVbml0IG91dHB1dFVuaXRGb3JNZW1iZXJGb3JUZXN0aW5nKE1lbWJlckVudGl0eSBtZW1iZXIpID0+CiAgICAgIF9tZW1iZXJUb1VuaXRbbWVtYmVyXTsKCiAgLy8vIERpcmVjdCBhY2Nlc3MgdG8gdGhlIG91dHB1dC11bml0IHRvIGNvbnN0YW50cyBtYXAgdXNlZCBmb3IgdGVzdGluZy4KICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBnZXQgY29uc3RhbnRzRm9yVGVzdGluZyA9PiBfY29uc3RhbnRUb1VuaXQua2V5czsKCiAgLy8vIFJldHVybnMgdGhlIFtPdXRwdXRVbml0XSB3aGVyZSBbY29uc3RhbnRdIGJlbG9uZ3MuCiAgT3V0cHV0VW5pdCBvdXRwdXRVbml0Rm9yQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgaWYgKCFpc1Byb2dyYW1TcGxpdCkgcmV0dXJuIG1haW5PdXRwdXRVbml0OwogICAgcmV0dXJuIF9jb25zdGFudFRvVW5pdFtjb25zdGFudF07CiAgfQoKICBPdXRwdXRVbml0IG91dHB1dFVuaXRGb3JDb25zdGFudEZvclRlc3RpbmcoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgPT4KICAgICAgX2NvbnN0YW50VG9Vbml0W2NvbnN0YW50XTsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIFtlbGVtZW50XSBpcyBkZWZlcnJlZC4KICBib29sIGlzRGVmZXJyZWRDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gb3V0cHV0VW5pdEZvckNsYXNzKGVsZW1lbnQpICE9IG1haW5PdXRwdXRVbml0OwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGVsZW1lbnQgW3RvXSBpcyByZWFjaGFibGUgZnJvbSBlbGVtZW50IFtmcm9tXSB3aXRob3V0CiAgLy8vIGNyb3NzaW5nIGEgZGVmZXJyZWQgaW1wb3J0LgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgaWYgd2UgaGF2ZSB0d28gZGVmZXJyZWQgbGlicmFyaWVzIGBBYCBhbmQgYEJgIHRoYXQgYm90aAogIC8vLyBpbXBvcnQgYSBsaWJyYXJ5IGBDYCwgdGhlbiBldmVuIHRob3VnaCBlbGVtZW50cyBmcm9tIGBBYCBhbmQgYENgIGVuZCB1cCBpbgogIC8vLyBkaWZmZXJlbnQgb3V0cHV0IHVuaXRzLCB0aGVyZSBpcyBhIG5vbi1kZWZlcnJlZCBwYXRoIGJldHdlZW4gYEFgIGFuZCBgQ2AuCiAgYm9vbCBoYXNPbmx5Tm9uRGVmZXJyZWRJbXBvcnRQYXRocyhNZW1iZXJFbnRpdHkgZnJvbSwgTWVtYmVyRW50aXR5IHRvKSB7CiAgICBPdXRwdXRVbml0IG91dHB1dFVuaXRGcm9tID0gb3V0cHV0VW5pdEZvck1lbWJlcihmcm9tKTsKICAgIE91dHB1dFVuaXQgb3V0cHV0VW5pdFRvID0gb3V0cHV0VW5pdEZvck1lbWJlcih0byk7CiAgICBpZiAob3V0cHV0VW5pdFRvID09IG1haW5PdXRwdXRVbml0KSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdXRwdXRVbml0RnJvbSA9PSBtYWluT3V0cHV0VW5pdCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIG91dHB1dFVuaXRUby5faW1wb3J0cy5jb250YWluc0FsbChvdXRwdXRVbml0RnJvbS5faW1wb3J0cyk7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgY29uc3RhbnQgW3RvXSBpcyByZWFjaGFibGUgZnJvbSBlbGVtZW50IFtmcm9tXSB3aXRob3V0CiAgLy8vIGNyb3NzaW5nIGEgZGVmZXJyZWQgaW1wb3J0LgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgaWYgd2UgaGF2ZSB0d28gZGVmZXJyZWQgbGlicmFyaWVzIGBBYCBhbmQgYEJgIHRoYXQgYm90aAogIC8vLyBpbXBvcnQgYSBsaWJyYXJ5IGBDYCwgdGhlbiBldmVuIHRob3VnaCBlbGVtZW50cyBmcm9tIGBBYCBhbmQgYENgIGVuZCB1cCBpbgogIC8vLyBkaWZmZXJlbnQgb3V0cHV0IHVuaXRzLCB0aGVyZSBpcyBhIG5vbi1kZWZlcnJlZCBwYXRoIGJldHdlZW4gYEFgIGFuZCBgQ2AuCiAgYm9vbCBoYXNPbmx5Tm9uRGVmZXJyZWRJbXBvcnRQYXRoc1RvQ29uc3RhbnQoCiAgICAgIE1lbWJlckVudGl0eSBmcm9tLCBDb25zdGFudFZhbHVlIHRvKSB7CiAgICBPdXRwdXRVbml0IG91dHB1dFVuaXRGcm9tID0gb3V0cHV0VW5pdEZvck1lbWJlcihmcm9tKTsKICAgIE91dHB1dFVuaXQgb3V0cHV0VW5pdFRvID0gb3V0cHV0VW5pdEZvckNvbnN0YW50KHRvKTsKICAgIGlmIChvdXRwdXRVbml0VG8gPT0gbWFpbk91dHB1dFVuaXQpIHJldHVybiB0cnVlOwogICAgaWYgKG91dHB1dFVuaXRGcm9tID09IG1haW5PdXRwdXRVbml0KSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gb3V0cHV0VW5pdFRvLl9pbXBvcnRzLmNvbnRhaW5zQWxsKG91dHB1dFVuaXRGcm9tLl9pbXBvcnRzKTsKICB9CgogIC8vLyBSZWdpc3RlcnMgdGhhdCBhIGNvbnN0YW50IGlzIHVzZWQgaW4gdGhlIHNhbWUgZGVmZXJyZWQgb3V0cHV0IHVuaXQgYXMKICAvLy8gW2ZpZWxkXS4KICB2b2lkIHJlZ2lzdGVyQ29uc3RhbnREZWZlcnJlZFVzZShEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIGlmICghaXNQcm9ncmFtU3BsaXQpIHJldHVybjsKICAgIE91dHB1dFVuaXQgdW5pdCA9IGNvbnN0YW50LnVuaXQ7CiAgICBhc3NlcnQoCiAgICAgICAgX2NvbnN0YW50VG9Vbml0W2NvbnN0YW50XSA9PSBudWxsIHx8IF9jb25zdGFudFRvVW5pdFtjb25zdGFudF0gPT0gdW5pdCk7CiAgICBfY29uc3RhbnRUb1VuaXRbY29uc3RhbnRdID0gdW5pdDsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSB1bmlxdWUgbmFtZSBmb3IgdGhlIGdpdmVuIGRlZmVycmVkIFtpbXBvcnRdLgogIFN0cmluZyBnZXRJbXBvcnREZWZlck5hbWUoU3Bhbm5hYmxlIG5vZGUsIEltcG9ydEVudGl0eSBpbXBvcnQpIHsKICAgIFN0cmluZyBuYW1lID0gX2ltcG9ydERlZmVyTmFtZVtpbXBvcnRdOwogICAgaWYgKG5hbWUgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgU3Bhbm5hYmxlQXNzZXJ0aW9uRmFpbHVyZSgKICAgICAgICAgIG5vZGUsICJObyBkZWZlcnJlZCBuYW1lIGZvciAkaW1wb3J0LiIpOwogICAgfQogICAgcmV0dXJuIG5hbWU7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbmFtZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggZGVmZXJyZWQgaW1wb3J0IGluIFt1bml0XS4KICBJdGVyYWJsZTxTdHJpbmc+IGdldEltcG9ydE5hbWVzKE91dHB1dFVuaXQgdW5pdCkgewogICAgcmV0dXJuIHVuaXQuX2ltcG9ydHMubWFwKChpKSA9PiBfaW1wb3J0RGVmZXJOYW1lW2ldKTsKICB9CgogIC8vLyBSZXR1cm5zIGEganNvbi1zdHlsZSBtYXAgZm9yIGRlc2NyaWJpbmcgd2hhdCBmaWxlcyB0aGF0IGFyZSBsb2FkZWQgYnkgYQogIC8vLyBnaXZlbiBkZWZlcnJlZCBpbXBvcnQuCiAgLy8vIFRoZSBtYXBwaW5nIGlzIHN0cnVjdHVyZWQgYXM6CiAgLy8vIGxpYnJhcnkgdXJpIC0+IHsibmFtZSI6IGxpYnJhcnkgbmFtZSwgImZpbGVzIjogKHByZWZpeCAtPiBsaXN0IG9mIGZpbGVzKX0KICAvLy8gV2hlcmUKICAvLy8KICAvLy8gLSA8bGlicmFyeSB1cmk+IGlzIHRoZSByZWxhdGl2ZSB1cmkgb2YgdGhlIGxpYnJhcnkgbWFraW5nIGEgZGVmZXJyZWQKICAvLy8gICBpbXBvcnQuCiAgLy8vIC0gPGxpYnJhcnkgbmFtZT4gaXMgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yICI8dW5uYW1lZD4iIGlmIGl0IGlzCiAgLy8vICAgdW5uYW1lZC4KICAvLy8gLSA8cHJlZml4PiBpcyB0aGUgYGFzYCBwcmVmaXggdXNlZCBmb3IgYSBnaXZlbiBkZWZlcnJlZCBpbXBvcnQuCiAgLy8vIC0gPGxpc3Qgb2YgZmlsZXM+IGlzIGEgbGlzdCBvZiB0aGUgZmlsZW5hbWVzIHRoZSBtdXN0IGJlIGxvYWRlZCB3aGVuIHRoYXQKICAvLy8gICBpbXBvcnQgaXMgbG9hZGVkLgogIE1hcDxTdHJpbmcsIE1hcDxTdHJpbmcsIGR5bmFtaWM+PiBjb21wdXRlRGVmZXJyZWRNYXAoCiAgICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLCBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LAogICAgICB7U2V0PE91dHB1dFVuaXQ+IG9taXR0ZWRVbml0c30pIHsKICAgIG9taXR0ZWRVbml0cyA/Pz0gU2V0KCk7CiAgICBNYXA8U3RyaW5nLCBNYXA8U3RyaW5nLCBkeW5hbWljPj4gbWFwcGluZyA9IHt9OwoKICAgIF9kZWZlcnJlZEltcG9ydERlc2NyaXB0aW9ucy5rZXlzLmZvckVhY2goKEltcG9ydEVudGl0eSBpbXBvcnQpIHsKICAgICAgTGlzdDxPdXRwdXRVbml0PiBvdXRwdXRVbml0cyA9IGh1bmtzVG9Mb2FkW19pbXBvcnREZWZlck5hbWVbaW1wb3J0XV07CiAgICAgIEltcG9ydERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gX2RlZmVycmVkSW1wb3J0RGVzY3JpcHRpb25zW2ltcG9ydF07CiAgICAgIFN0cmluZyBnZXROYW1lKExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgICAgIHZhciBuYW1lID0gZWxlbWVudEVudmlyb25tZW50LmdldExpYnJhcnlOYW1lKGxpYnJhcnkpOwogICAgICAgIHJldHVybiBuYW1lID09ICcnID8gJzx1bm5hbWVkPicgOiBuYW1lOwogICAgICB9CgogICAgICBNYXA8U3RyaW5nLCBkeW5hbWljPiBsaWJyYXJ5TWFwID0gbWFwcGluZy5wdXRJZkFic2VudCgKICAgICAgICAgIGRlc2NyaXB0aW9uLmltcG9ydGluZ1VyaSwKICAgICAgICAgICgpID0+IDxTdHJpbmcsIGR5bmFtaWM+ewogICAgICAgICAgICAgICAgIm5hbWUiOiBnZXROYW1lKGRlc2NyaXB0aW9uLl9pbXBvcnRpbmdMaWJyYXJ5KSwKICAgICAgICAgICAgICAgICJpbXBvcnRzIjogPFN0cmluZywgTGlzdDxTdHJpbmc+Pnt9CiAgICAgICAgICAgICAgfSk7CgogICAgICBMaXN0PFN0cmluZz4gcGFydEZpbGVOYW1lcyA9IG91dHB1dFVuaXRzCiAgICAgICAgICAud2hlcmUoKG91dHB1dFVuaXQpID0+ICFvbWl0dGVkVW5pdHMuY29udGFpbnMob3V0cHV0VW5pdCkpCiAgICAgICAgICAubWFwKChvdXRwdXRVbml0KSA9PiBkZWZlcnJlZFBhcnRGaWxlTmFtZShvcHRpb25zLCBvdXRwdXRVbml0Lm5hbWUpKQogICAgICAgICAgLnRvTGlzdCgpOwogICAgICBsaWJyYXJ5TWFwWyJpbXBvcnRzIl1bX2ltcG9ydERlZmVyTmFtZVtpbXBvcnRdXSA9IHBhcnRGaWxlTmFtZXM7CiAgICB9KTsKICAgIHJldHVybiBtYXBwaW5nOwogIH0KfQoKLy8vIFJldHVybnMgdGhlIGZpbGVuYW1lIGZvciB0aGUgb3V0cHV0LXVuaXQgbmFtZWQgW25hbWVdLgovLy8KLy8vIFRoZSBmaWxlbmFtZSBpcyBvZiB0aGUgZm9ybSAiPG1haW4gb3V0cHV0IGZpbGU+XzxuYW1lPi5wYXJ0LmpzIi4KLy8vIElmIFthZGRFeHRlbnNpb25dIGlzIGZhbHNlLCB0aGUgIi5wYXJ0LmpzIiBzdWZmaXggaXMgbGVmdCBvdXQuClN0cmluZyBkZWZlcnJlZFBhcnRGaWxlTmFtZShDb21waWxlck9wdGlvbnMgb3B0aW9ucywgU3RyaW5nIG5hbWUsCiAgICB7Ym9vbCBhZGRFeHRlbnNpb246IHRydWV9KSB7CiAgYXNzZXJ0KG5hbWUgIT0gIiIpOwogIFN0cmluZyBvdXRQYXRoID0gb3B0aW9ucy5vdXRwdXRVcmkgIT0gbnVsbCA/IG9wdGlvbnMub3V0cHV0VXJpLnBhdGggOiAib3V0IjsKICBTdHJpbmcgb3V0TmFtZSA9IG91dFBhdGguc3Vic3RyaW5nKG91dFBhdGgubGFzdEluZGV4T2YoJy8nKSArIDEpOwogIFN0cmluZyBleHRlbnNpb24gPSBhZGRFeHRlbnNpb24gPyAiLnBhcnQuanMiIDogIiI7CiAgcmV0dXJuICIke291dE5hbWV9XyRuYW1lJGV4dGVuc2lvbiI7Cn0KCmNsYXNzIERlcGVuZGVuY2llcyB7CiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBEZXBlbmRlbmN5SW5mbz4gY2xhc3NlcyA9IHt9OwogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIERlcGVuZGVuY3lJbmZvPiBtZW1iZXJzID0ge307CiAgZmluYWwgU2V0PExvY2FsPiBsb2NhbEZ1bmN0aW9ucyA9IG5ldyBTZXQ8TG9jYWw+KCk7CiAgZmluYWwgTWFwPENvbnN0YW50VmFsdWUsIERlcGVuZGVuY3lJbmZvPiBjb25zdGFudHMgPSB7fTsKCiAgdm9pZCBhZGRDbGFzcyhDbGFzc0VudGl0eSBjbHMsIFtJbXBvcnRFbnRpdHkgaW1wb3J0XSkgewogICAgKGNsYXNzZXNbY2xzXSA/Pz0gbmV3IERlcGVuZGVuY3lJbmZvKCkpLnJlZ2lzdGVySW1wb3J0KGltcG9ydCk7CiAgfQoKICB2b2lkIGFkZE1lbWJlcihNZW1iZXJFbnRpdHkgbSwgW0ltcG9ydEVudGl0eSBpbXBvcnRdKSB7CiAgICAobWVtYmVyc1ttXSA/Pz0gbmV3IERlcGVuZGVuY3lJbmZvKCkpLnJlZ2lzdGVySW1wb3J0KGltcG9ydCk7CiAgfQoKICB2b2lkIGFkZENvbnN0YW50KENvbnN0YW50VmFsdWUgYywgW0ltcG9ydEVudGl0eSBpbXBvcnRdKSB7CiAgICAoY29uc3RhbnRzW2NdID8/PSBuZXcgRGVwZW5kZW5jeUluZm8oKSkucmVnaXN0ZXJJbXBvcnQoaW1wb3J0KTsKICB9Cn0KCmNsYXNzIERlcGVuZGVuY3lJbmZvIHsKICBib29sIGlzRGVmZXJyZWQgPSB0cnVlOwogIExpc3Q8SW1wb3J0RW50aXR5PiBpbXBvcnRzOwoKICByZWdpc3RlckltcG9ydChJbXBvcnRFbnRpdHkgaW1wb3J0KSB7CiAgICBpZiAoIWlzRGVmZXJyZWQpIHJldHVybjsKICAgIC8vIEEgbnVsbCBpbXBvcnQgcmVwcmVzZW50cyBhIGRpcmVjdCBub24tZGVmZXJyZWQgZGVwZW5kZW5jeS4KICAgIGlmIChpbXBvcnQgIT0gbnVsbCkgewogICAgICAoaW1wb3J0cyA/Pz0gW10pLmFkZChpbXBvcnQpOwogICAgfSBlbHNlIHsKICAgICAgaW1wb3J0cyA9IG51bGw7CiAgICAgIGlzRGVmZXJyZWQgPSBmYWxzZTsKICAgIH0KICB9Cn0KCmNsYXNzIFR5cGVEZXBlbmRlbmN5VmlzaXRvciBpbXBsZW1lbnRzIERhcnRUeXBlVmlzaXRvcjx2b2lkLCBOdWxsPiB7CiAgZmluYWwgRGVwZW5kZW5jaWVzIF9kZXBlbmRlbmNpZXM7CiAgZmluYWwgSW1wb3J0RW50aXR5IF9pbXBvcnQ7CiAgZmluYWwgQ29tbW9uRWxlbWVudHMgX2NvbW1vbkVsZW1lbnRzOwoKICBUeXBlRGVwZW5kZW5jeVZpc2l0b3IodGhpcy5fZGVwZW5kZW5jaWVzLCB0aGlzLl9pbXBvcnQsIHRoaXMuX2NvbW1vbkVsZW1lbnRzKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdChEYXJ0VHlwZSB0eXBlLCBbX10pIHsKICAgIHR5cGUuYWNjZXB0KHRoaXMsIG51bGwpOwogIH0KCiAgdm9pZCB2aXNpdExpc3QoTGlzdDxEYXJ0VHlwZT4gdHlwZXMpIHsKICAgIHR5cGVzLmZvckVhY2godmlzaXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1dHVyZU9yVHlwZShGdXR1cmVPclR5cGUgdHlwZSwgTnVsbCBhcmd1bWVudCkgewogICAgX2RlcGVuZGVuY2llcy5hZGRDbGFzcyhfY29tbW9uRWxlbWVudHMuZnV0dXJlQ2xhc3MpOwogICAgdmlzaXQodHlwZS50eXBlQXJndW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdER5bmFtaWNUeXBlKER5bmFtaWNUeXBlIHR5cGUsIE51bGwgYXJndW1lbnQpIHsKICAgIC8vIE5vdGhpbmcgdG8gYWRkLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIHR5cGUsIE51bGwgYXJndW1lbnQpIHsKICAgIHZpc2l0TGlzdCh0eXBlLnR5cGVBcmd1bWVudHMpOwogICAgdmlzaXQodHlwZS51bmFsaWFzZWQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlLCBOdWxsIGFyZ3VtZW50KSB7CiAgICB2aXNpdExpc3QodHlwZS50eXBlQXJndW1lbnRzKTsKICAgIC8vIFRPRE8oc2lnbXVuZCk6IHdoZW4gd2UgYXJlIGFibGUgdG8gc3BsaXQgY2xhc3NlcyBmcm9tIHR5cGVzIGluIG91cgogICAgLy8gcnVudGltZS10eXBlIHJlcHJlc2VudGF0aW9uLCB0aGlzIHNob3VsZCB0cmFjayB0eXBlLmVsZW1lbnQgYXMgYSB0eXBlCiAgICAvLyBkZXBlbmRlbmN5IGluc3RlYWQuCiAgICBfZGVwZW5kZW5jaWVzLmFkZENsYXNzKHR5cGUuZWxlbWVudCwgX2ltcG9ydCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSB0eXBlLCBOdWxsIGFyZ3VtZW50KSB7CiAgICBmb3IgKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSBpbiB0eXBlLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgdmlzaXQodHlwZVZhcmlhYmxlLmJvdW5kKTsKICAgIH0KICAgIHZpc2l0TGlzdCh0eXBlLnBhcmFtZXRlclR5cGVzKTsKICAgIHZpc2l0TGlzdCh0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMpOwogICAgdmlzaXRMaXN0KHR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcyk7CiAgICB2aXNpdCh0eXBlLnJldHVyblR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uVHlwZVZhcmlhYmxlKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGUsIE51bGwgYXJndW1lbnQpIHsKICAgIC8vIE5vdGhpbmcgdG8gYWRkLiBIYW5kbGVkIGluIFt2aXNpdEZ1bmN0aW9uVHlwZV0uCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZVZhcmlhYmxlVHlwZShUeXBlVmFyaWFibGVUeXBlIHR5cGUsIE51bGwgYXJndW1lbnQpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IERvIHdlIG5lZWQgdG8gY29sbGVjdCB0aGUgYm91bmQ/CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lk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ZWZlcnJlZF9sb2FkLmRhcnQ8c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvZGlhZ25vc3RpY3MvY29kZV9sb2NhdGlvbi5kYXJ0ig4vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmRpYWdub3N0aWNzLmNvZGVfbG9jYXRpb247CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBhcyBmZTsKCi8vLyBbQ29kZUxvY2F0aW9uXSBkaXZpZGVzIHVyaXMgaW50byBkaWZmZXJlbnQgY2xhc3Nlcy4KLy8vCi8vLyBUaGVzZSBhcmUgdXNlZCB0byBncm91cCB1cmlzIGZyb20gdXNlciBjb2RlLCBwbGF0Zm9ybSBsaWJyYXJpZXMgYW5kCi8vLyBwYWNrYWdlcy4KYWJzdHJhY3QgY2xhc3MgQ29kZUxvY2F0aW9uIHsKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3VyaV0gaXMgaW4gdGhpcyBjb2RlIGxvY2F0aW9uLgogIGJvb2wgaW5TYW1lTG9jYXRpb24oVXJpIHVyaSk7CgogIC8vLyBSZXR1cm5zIHRoZSB1cmkgb2YgdGhpcyBsb2NhdGlvbiByZWxhdGl2ZSB0byBbYmFzZVVyaV0uCiAgU3RyaW5nIHJlbGF0aXZpemUoVXJpIGJhc2VVcmkpOwoKICBmYWN0b3J5IENvZGVMb2NhdGlvbihVcmkgdXJpKSB7CiAgICBpZiAodXJpLnNjaGVtZSA9PSAncGFja2FnZScpIHsKICAgICAgaW50IHNsYXNoUG9zID0gdXJpLnBhdGguaW5kZXhPZignLycpOwogICAgICBpZiAoc2xhc2hQb3MgIT0gLTEpIHsKICAgICAgICBTdHJpbmcgcGFja2FnZU5hbWUgPSB1cmkucGF0aC5zdWJzdHJpbmcoMCwgc2xhc2hQb3MpOwogICAgICAgIHJldHVybiBuZXcgUGFja2FnZUxvY2F0aW9uKHBhY2thZ2VOYW1lKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IFVyaUxvY2F0aW9uKHVyaSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgU2NoZW1lTG9jYXRpb24odXJpKTsKICAgIH0KICB9Cn0KCi8vLyBBIGNvZGUgbG9jYXRpb24gZGVmaW5lZCBieSB0aGUgc2NoZW1lIG9mIHRoZSB1cmkuCi8vLwovLy8gVXNlZCBmb3Igbm9uLXBhY2thZ2UgdXJpcywgc3VjaCBhcyAnZGFydCcsICdmaWxlJywgYW5kICdodHRwJy4KY2xhc3MgU2NoZW1lTG9jYXRpb24gaW1wbGVtZW50cyBDb2RlTG9jYXRpb24gewogIGZpbmFsIFVyaSB1cmk7CgogIFNjaGVtZUxvY2F0aW9uKHRoaXMudXJpKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpblNhbWVMb2NhdGlvbihVcmkgdXJpKSB7CiAgICByZXR1cm4gdGhpcy51cmkuc2NoZW1lID09IHVyaS5zY2hlbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgcmVsYXRpdml6ZShVcmkgYmFzZVVyaSkgewogICAgcmV0dXJuIGZlLnJlbGF0aXZpemVVcmkoYmFzZVVyaSwgdXJpLCBmYWxzZSk7CiAgfQp9CgovLy8gQSBjb2RlIGxvY2F0aW9uIGRlZmluZWQgYnkgdGhlIHBhY2thZ2UgbmFtZS4KLy8vCi8vLyBVc2VkIGZvciBwYWNrYWdlIHVyaXMsIHNlcGFyYXRlZCBieSB0aGVpciBgcGFja2FnZSBuYW1lc2AsIHRoYXQgaXMsIHRoZQovLy8gJ2Zvbycgb2YgJ3BhY2thZ2U6Zm9vL2Jhci5kYXJ0Jy4KY2xhc3MgUGFja2FnZUxvY2F0aW9uIGltcGxlbWVudHMgQ29kZUxvY2F0aW9uIHsKICBmaW5hbCBTdHJpbmcgcGFja2FnZU5hbWU7CgogIFBhY2thZ2VMb2NhdGlvbih0aGlzLnBhY2thZ2VOYW1lKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpblNhbWVMb2NhdGlvbihVcmkgdXJpKSB7CiAgICByZXR1cm4gdXJpLnNjaGVtZSA9PSAncGFja2FnZScgJiYgdXJpLnBhdGguc3RhcnRzV2l0aCgnJHBhY2thZ2VOYW1lLycpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHJlbGF0aXZpemUoVXJpIGJhc2VVcmkpID0+ICdwYWNrYWdlOiRwYWNrYWdlTmFtZSc7Cn0KCi8vLyBBIGNvZGUgbG9jYXRpb24gZGVmaW5lZCBieSB0aGUgd2hvbGUgdXJpLgovLy8KLy8vIFVzZWQgZm9yIHBhY2thZ2UgdXJpcyB3aXRoIG5vIHBhY2thZ2UgbmFtZS4gRm9yIGluc3RhbmNlICdwYWNrYWdlOmZvby5kYXJ0Jy4KY2xhc3MgVXJpTG9jYXRpb24gaW1wbGVtZW50cyBDb2RlTG9jYXRpb24gewogIGZpbmFsIFVyaSB1cmk7CgogIFVyaUxvY2F0aW9uKHRoaXMudXJpKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpblNhbWVMb2NhdGlvbihVcmkgdXJpKSA9PiB0aGlzLnVyaSA9PSB1cmk7CgogIEBvdmVycmlkZQogIFN0cmluZyByZWxhdGl2aXplKFVyaSBiYXNlVXJpKSB7CiAgICByZXR1cm4gZmUucmVsYXRpdml6ZVVyaShiYXNlVXJpLCB1cmksIGZhbHNlKTsKICB9Cn0KCi8vLyBBIGNvZGUgbG9jYXRpb24gdGhhdCBjb250YWlucyBhbnkgdXJpLgpjbGFzcyBBbnlMb2NhdGlvbiBpbXBsZW1lbnRzIENvZGVMb2NhdGlvbiB7CiAgY29uc3QgQW55TG9jYXRpb24oKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpblNhbWVMb2NhdGlvbihVcmkgdXJpKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgcmVsYXRpdml6ZShVcmkgYmFzZVVyaSkgPT4gJyRiYXNlVXJpJzsKfQpkAE5OPAErAUABOARIDh44IAE+IgEiIywcPjEPJQgNJgYEAgE2BEMvEQEcAQwhKgQBDCMyBAIBMQRMJTAcASUBDCFMBAEMPAIBLgRRLBEBGQEMMwEMIzIEAgErLBcBDCgBDDACATNwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9jb2RlX2xvY2F0aW9uLmRhcnQsc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvZHVtcF9pbmZvLmRhcnTAAGDOLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZHVtcF9pbmZvOwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnCiAgICBzaG93IENodW5rZWRDb252ZXJzaW9uU2luaywgSnNvbkVuY29kZXIsIFN0cmluZ0NvbnZlcnNpb25TaW5rOwoKaW1wb3J0ICdwYWNrYWdlOmRhcnQyanNfaW5mby9pbmZvLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6ZGFydDJqc19pbmZvL2pzb25faW5mb19jb2RlYy5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmRhcnQyanNfaW5mby9iaW5hcnlfc2VyaWFsaXphdGlvbi5kYXJ0JyBhcyBkdW1wX2luZm87CgppbXBvcnQgJy4uL2NvbXBpbGVyX25ldy5kYXJ0JzsKaW1wb3J0ICdiYWNrZW5kX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJ2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICdjb21tb24vdGFza3MuZGFydCcgc2hvdyBDb21waWxlclRhc2s7CmltcG9ydCAnY29tbW9uLmRhcnQnOwppbXBvcnQgJ2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEpFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnY29tcGlsZXIuZGFydCcgc2hvdyBDb21waWxlcjsKaW1wb3J0ICdjb25zdGFudHMvdmFsdWVzLmRhcnQnIHNob3cgQ29uc3RhbnRWYWx1ZSwgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlOwppbXBvcnQgJ2RlZmVycmVkX2xvYWQuZGFydCcgc2hvdyBPdXRwdXRVbml0LCBkZWZlcnJlZFBhcnRGaWxlTmFtZTsKaW1wb3J0ICdlbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICdpbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnaW5mZXJyZXIvdHlwZXMuZGFydCcKICAgIHNob3cgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCwgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHM7CmltcG9ydCAnanMvanMuZGFydCcgYXMganNBc3Q7CmltcG9ydCAnanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS9jb2RlZ2VuX3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAndW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IEltcGFjdFVzZUNhc2UsIFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdFZpc2l0b3JJbXBsOwppbXBvcnQgJ3V0aWwvc2lua19hZGFwdGVyLmRhcnQnOwppbXBvcnQgJ3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwoKY2xhc3MgRWxlbWVudEluZm9Db2xsZWN0b3IgewogIGZpbmFsIENvbXBpbGVyIGNvbXBpbGVyOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKICBmaW5hbCBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0czsKICBmaW5hbCBEdW1wSW5mb1Rhc2sgZHVtcEluZm9UYXNrOwoKICBKRWxlbWVudEVudmlyb25tZW50IGdldCBlbnZpcm9ubWVudCA9PiBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQ7CiAgQ29kZWdlbldvcmxkQnVpbGRlciBnZXQgY29kZWdlbldvcmxkQnVpbGRlciA9PiBjb21waWxlci5jb2RlZ2VuV29ybGRCdWlsZGVyOwoKICBmaW5hbCBBbGxJbmZvIHJlc3VsdCA9IG5ldyBBbGxJbmZvKCk7CiAgZmluYWwgTWFwPEVudGl0eSwgSW5mbz4gX2VudGl0eVRvSW5mbyA9IDxFbnRpdHksIEluZm8+e307CiAgZmluYWwgTWFwPENvbnN0YW50VmFsdWUsIEluZm8+IF9jb25zdGFudFRvSW5mbyA9IDxDb25zdGFudFZhbHVlLCBJbmZvPnt9OwogIGZpbmFsIE1hcDxPdXRwdXRVbml0LCBPdXRwdXRVbml0SW5mbz4gX291dHB1dFRvSW5mbyA9IHt9OwoKICBFbGVtZW50SW5mb0NvbGxlY3Rvcih0aGlzLmNvbXBpbGVyLCB0aGlzLmR1bXBJbmZvVGFzaywgdGhpcy5jbG9zZWRXb3JsZCwKICAgICAgdGhpcy5fZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyk7CgogIHZvaWQgcnVuKCkgewogICAgZHVtcEluZm9UYXNrLl9jb25zdGFudFRvTm9kZS5mb3JFYWNoKChjb25zdGFudCwgbm9kZSkgewogICAgICAvLyBUT0RPKHNpZ211bmQpOiBhZGQgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGNvbnN0YW50cwogICAgICB2YXIgc3BhbiA9IGR1bXBJbmZvVGFzay5fbm9kZURhdGFbbm9kZV07CiAgICAgIHZhciBpbmZvID0gbmV3IENvbnN0YW50SW5mbygKICAgICAgICAgIHNpemU6IHNwYW4uZW5kIC0gc3Bhbi5zdGFydCwKICAgICAgICAgIGNvZGU6IFtzcGFuXSwKICAgICAgICAgIG91dHB1dFVuaXQ6IF91bml0SW5mb0ZvckNvbnN0YW50KGNvbnN0YW50KSk7CiAgICAgIF9jb25zdGFudFRvSW5mb1tjb25zdGFudF0gPSBpbmZvOwogICAgICByZXN1bHQuY29uc3RhbnRzLmFkZChpbmZvKTsKICAgIH0pOwogICAgZW52aXJvbm1lbnQubGlicmFyaWVzLmZvckVhY2godmlzaXRMaWJyYXJ5KTsKICB9CgogIC8vLyBXaGV0aGVyIHRvIGVtaXQgaW5mb3JtYXRpb24gYWJvdXQgW2VudGl0eV0uCiAgLy8vCiAgLy8vIEJ5IGRlZmF1bHQgd2UgZW1pdCBpbmZvcm1hdGlvbiBmb3IgYW55IGVudGl0eSB0aGF0IGNvbnRyaWJ1dGVzIHRvIHRoZQogIC8vLyBvdXRwdXQgc2l6ZS4gRWl0aGVyIGJlY2F1c2UgaXQgaXMgYSBmdW5jdGlvbiBiZWluZyBlbWl0dGVkIG9yIGlubGluZWQsCiAgLy8vIG9yIGJlY2F1c2UgaXQgaXMgYW4gZW50aXR5IHRoYXQgaG9sZHMgZGVwZW5kZW5jaWVzIHRvIG90aGVyIGVudGl0aWVzLgogIGJvb2wgc2hvdWxkS2VlcChFbnRpdHkgZW50aXR5KSB7CiAgICByZXR1cm4gZHVtcEluZm9UYXNrLmltcGFjdHMuY29udGFpbnNLZXkoZW50aXR5KSB8fAogICAgICAgIGR1bXBJbmZvVGFzay5pbmxpbmVDb3VudC5jb250YWluc0tleShlbnRpdHkpOwogIH0KCiAgTGlicmFyeUluZm8gdmlzaXRMaWJyYXJ5KExpYnJhcnlFbnRpdHkgbGliKSB7CiAgICBTdHJpbmcgbGlibmFtZSA9IGVudmlyb25tZW50LmdldExpYnJhcnlOYW1lKGxpYik7CiAgICBpZiAobGlibmFtZS5pc0VtcHR5KSB7CiAgICAgIGxpYm5hbWUgPSAnPHVubmFtZWQ+JzsKICAgIH0KICAgIGludCBzaXplID0gZHVtcEluZm9UYXNrLnNpemVPZihsaWIpOwogICAgTGlicmFyeUluZm8gaW5mbyA9IG5ldyBMaWJyYXJ5SW5mbyhsaWJuYW1lLCBsaWIuY2Fub25pY2FsVXJpLCBudWxsLCBzaXplKTsKICAgIF9lbnRpdHlUb0luZm9bbGliXSA9IGluZm87CgogICAgZW52aXJvbm1lbnQuZm9yRWFjaExpYnJhcnlNZW1iZXIobGliLCAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICBpZiAobWVtYmVyLmlzRnVuY3Rpb24gfHwgbWVtYmVyLmlzR2V0dGVyIHx8IG1lbWJlci5pc1NldHRlcikgewogICAgICAgIEZ1bmN0aW9uSW5mbyBmdW5jdGlvbkluZm8gPSB2aXNpdEZ1bmN0aW9uKG1lbWJlcik7CiAgICAgICAgaWYgKGZ1bmN0aW9uSW5mbyAhPSBudWxsKSB7CiAgICAgICAgICBpbmZvLnRvcExldmVsRnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZm8pOwogICAgICAgICAgZnVuY3Rpb25JbmZvLnBhcmVudCA9IGluZm87CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgRmllbGRJbmZvIGZpZWxkSW5mbyA9IHZpc2l0RmllbGQobWVtYmVyKTsKICAgICAgICBpZiAoZmllbGRJbmZvICE9IG51bGwpIHsKICAgICAgICAgIGluZm8udG9wTGV2ZWxWYXJpYWJsZXMuYWRkKGZpZWxkSW5mbyk7CiAgICAgICAgICBmaWVsZEluZm8ucGFyZW50ID0gaW5mbzsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwoKICAgIGVudmlyb25tZW50LmZvckVhY2hDbGFzcyhsaWIsIChDbGFzc0VudGl0eSBjbGF6eikgewogICAgICBDbGFzc0luZm8gY2xhc3NJbmZvID0gdmlzaXRDbGFzcyhjbGF6eik7CiAgICAgIGlmIChjbGFzc0luZm8gIT0gbnVsbCkgewogICAgICAgIGluZm8uY2xhc3Nlcy5hZGQoY2xhc3NJbmZvKTsKICAgICAgICBjbGFzc0luZm8ucGFyZW50ID0gaW5mbzsKICAgICAgfQogICAgfSk7CgogICAgaWYgKGluZm8uaXNFbXB0eSAmJiAhc2hvdWxkS2VlcChsaWIpKSByZXR1cm4gbnVsbDsKICAgIHJlc3VsdC5saWJyYXJpZXMuYWRkKGluZm8pOwogICAgcmV0dXJuIGluZm87CiAgfQoKICBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0IF9yZXN1bHRPZk1lbWJlcihNZW1iZXJFbnRpdHkgZSkgPT4KICAgICAgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMucmVzdWx0T2ZNZW1iZXIoZSk7CgogIEFic3RyYWN0VmFsdWUgX3Jlc3VsdE9mUGFyYW1ldGVyKExvY2FsIGUpID0+CiAgICAgIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzLnJlc3VsdE9mUGFyYW1ldGVyKGUpOwoKICBGaWVsZEluZm8gdmlzaXRGaWVsZChGaWVsZEVudGl0eSBmaWVsZCwge0NsYXNzRW50aXR5IGNvbnRhaW5pbmdDbGFzc30pIHsKICAgIEFic3RyYWN0VmFsdWUgaW5mZXJyZWRUeXBlID0gX3Jlc3VsdE9mTWVtYmVyKGZpZWxkKS50eXBlOwogICAgLy8gSWYgYSBmaWVsZCBoYXMgYW4gZW1wdHkgaW5mZXJyZWQgdHlwZSBpdCBpcyBuZXZlciB1c2VkLgogICAgaWYgKGluZmVycmVkVHlwZSA9PSBudWxsIHx8CiAgICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgICAuaXNFbXB0eShpbmZlcnJlZFR5cGUpCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGludCBzaXplID0gZHVtcEluZm9UYXNrLnNpemVPZihmaWVsZCk7CiAgICBMaXN0PENvZGVTcGFuPiBjb2RlID0gZHVtcEluZm9UYXNrLmNvZGVPZihmaWVsZCk7CgogICAgLy8gVE9ETyhoZXQpOiBXaHkgZG9lc24ndCBgc2l6ZWAgYWNjb3VudCBmb3IgdGhlIGNvZGUgc2l6ZSBhbHJlYWR5PwogICAgaWYgKGNvZGUgIT0gbnVsbCkgc2l6ZSArPSBjb2RlLmxlbmd0aDsKCiAgICBGaWVsZEluZm8gaW5mbyA9IG5ldyBGaWVsZEluZm8oCiAgICAgICAgbmFtZTogZmllbGQubmFtZSwKICAgICAgICB0eXBlOiAnJHtlbnZpcm9ubWVudC5nZXRGaWVsZFR5cGUoZmllbGQpfScsCiAgICAgICAgaW5mZXJyZWRUeXBlOiAnJGluZmVycmVkVHlwZScsCiAgICAgICAgY29kZTogY29kZSwKICAgICAgICBvdXRwdXRVbml0OiBfdW5pdEluZm9Gb3JNZW1iZXIoZmllbGQpLAogICAgICAgIGlzQ29uc3Q6IGZpZWxkLmlzQ29uc3QpOwogICAgX2VudGl0eVRvSW5mb1tmaWVsZF0gPSBpbmZvOwogICAgRmllbGRBbmFseXNpc0RhdGEgZmllbGREYXRhID0gY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpOwogICAgaWYgKGZpZWxkRGF0YS5pbml0aWFsVmFsdWUgIT0gbnVsbCkgewogICAgICBpbmZvLmluaXRpYWxpemVyID0gX2NvbnN0YW50VG9JbmZvW2ZpZWxkRGF0YS5pbml0aWFsVmFsdWVdOwogICAgfQoKICAgIGlmIChjb21waWxlci5vcHRpb25zLmV4cGVyaW1lbnRDYWxsSW5zdHJ1bWVudGF0aW9uKSB7CiAgICAgIC8vIFdlIHVzZSBmaWVsZC5oYXNoQ29kZSBiZWNhdXNlIGl0IGlzIGdsb2JhbGx5IHVuaXF1ZSBhbmQgaXQgaXMKICAgICAgLy8gYXZhaWxhYmxlIHdoaWxlIHdlIGFyZSBkb2luZyBjb2RlZ2VuLgogICAgICBpbmZvLmNvdmVyYWdlSWQgPSAnJHtmaWVsZC5oYXNoQ29kZX0nOwogICAgfQoKICAgIGludCBjbG9zdXJlU2l6ZSA9IF9hZGRDbG9zdXJlSW5mbyhpbmZvLCBmaWVsZCk7CiAgICBpbmZvLnNpemUgPSBzaXplICsgY2xvc3VyZVNpemU7CgogICAgcmVzdWx0LmZpZWxkcy5hZGQoaW5mbyk7CiAgICByZXR1cm4gaW5mbzsKICB9CgogIENsYXNzSW5mbyB2aXNpdENsYXNzKENsYXNzRW50aXR5IGNsYXp6KSB7CiAgICAvLyBPbWl0IGNsYXNzIGlmIGl0IGlzIG5vdCBuZWVkZWQuCiAgICBDbGFzc0luZm8gY2xhc3NJbmZvID0gbmV3IENsYXNzSW5mbygKICAgICAgICBuYW1lOiBjbGF6ei5uYW1lLAogICAgICAgIGlzQWJzdHJhY3Q6IGNsYXp6LmlzQWJzdHJhY3QsCiAgICAgICAgb3V0cHV0VW5pdDogX3VuaXRJbmZvRm9yQ2xhc3MoY2xhenopKTsKICAgIF9lbnRpdHlUb0luZm9bY2xhenpdID0gY2xhc3NJbmZvOwoKICAgIGludCBzaXplID0gZHVtcEluZm9UYXNrLnNpemVPZihjbGF6eik7CiAgICBlbnZpcm9ubWVudC5mb3JFYWNoTG9jYWxDbGFzc01lbWJlcihjbGF6eiwgKG1lbWJlcikgewogICAgICBpZiAobWVtYmVyLmlzRnVuY3Rpb24gfHwgbWVtYmVyLmlzR2V0dGVyIHx8IG1lbWJlci5pc1NldHRlcikgewogICAgICAgIEZ1bmN0aW9uSW5mbyBmdW5jdGlvbkluZm8gPSB2aXNpdEZ1bmN0aW9uKG1lbWJlcik7CiAgICAgICAgaWYgKGZ1bmN0aW9uSW5mbyAhPSBudWxsKSB7CiAgICAgICAgICBjbGFzc0luZm8uZnVuY3Rpb25zLmFkZChmdW5jdGlvbkluZm8pOwogICAgICAgICAgZnVuY3Rpb25JbmZvLnBhcmVudCA9IGNsYXNzSW5mbzsKICAgICAgICAgIGZvciAodmFyIGNsb3N1cmVJbmZvIGluIGZ1bmN0aW9uSW5mby5jbG9zdXJlcykgewogICAgICAgICAgICBzaXplICs9IGNsb3N1cmVJbmZvLnNpemU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgRmllbGRJbmZvIGZpZWxkSW5mbyA9IHZpc2l0RmllbGQobWVtYmVyLCBjb250YWluaW5nQ2xhc3M6IGNsYXp6KTsKICAgICAgICBpZiAoZmllbGRJbmZvICE9IG51bGwpIHsKICAgICAgICAgIGNsYXNzSW5mby5maWVsZHMuYWRkKGZpZWxkSW5mbyk7CiAgICAgICAgICBmaWVsZEluZm8ucGFyZW50ID0gY2xhc3NJbmZvOwogICAgICAgICAgZm9yICh2YXIgY2xvc3VyZUluZm8gaW4gZmllbGRJbmZvLmNsb3N1cmVzKSB7CiAgICAgICAgICAgIHNpemUgKz0gY2xvc3VyZUluZm8uc2l6ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoJ0NsYXNzIG1lbWJlciBub3QgYSBmdW5jdGlvbiBvciBmaWVsZCcpOwogICAgICB9CiAgICB9KTsKICAgIGVudmlyb25tZW50LmZvckVhY2hDb25zdHJ1Y3RvcihjbGF6eiwgKGNvbnN0cnVjdG9yKSB7CiAgICAgIEZ1bmN0aW9uSW5mbyBmdW5jdGlvbkluZm8gPSB2aXNpdEZ1bmN0aW9uKGNvbnN0cnVjdG9yKTsKICAgICAgaWYgKGZ1bmN0aW9uSW5mbyAhPSBudWxsKSB7CiAgICAgICAgY2xhc3NJbmZvLmZ1bmN0aW9ucy5hZGQoZnVuY3Rpb25JbmZvKTsKICAgICAgICBmdW5jdGlvbkluZm8ucGFyZW50ID0gY2xhc3NJbmZvOwogICAgICAgIGZvciAodmFyIGNsb3N1cmVJbmZvIGluIGZ1bmN0aW9uSW5mby5jbG9zdXJlcykgewogICAgICAgICAgc2l6ZSArPSBjbG9zdXJlSW5mby5zaXplOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CgogICAgY2xhc3NJbmZvLnNpemUgPSBzaXplOwoKICAgIGlmICghY29tcGlsZXIuYmFja2VuZFN0cmF0ZWd5LmVtaXR0ZXJUYXNrLm5lZWRlZENsYXNzZXMuY29udGFpbnMoY2xhenopICYmCiAgICAgICAgY2xhc3NJbmZvLmZpZWxkcy5pc0VtcHR5ICYmCiAgICAgICAgY2xhc3NJbmZvLmZ1bmN0aW9ucy5pc0VtcHR5KSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHJlc3VsdC5jbGFzc2VzLmFkZChjbGFzc0luZm8pOwogICAgcmV0dXJuIGNsYXNzSW5mbzsKICB9CgogIENsb3N1cmVJbmZvIHZpc2l0Q2xvc3VyZUNsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIENsb3N1cmVJbmZvIGNsb3N1cmVJbmZvID0gbmV3IENsb3N1cmVJbmZvKAogICAgICAgIG5hbWU6IGVsZW1lbnQubmFtZSwKICAgICAgICBvdXRwdXRVbml0OiBfdW5pdEluZm9Gb3JDbGFzcyhlbGVtZW50KSwKICAgICAgICBzaXplOiBkdW1wSW5mb1Rhc2suc2l6ZU9mKGVsZW1lbnQpKTsKICAgIF9lbnRpdHlUb0luZm9bZWxlbWVudF0gPSBjbG9zdXJlSW5mbzsKCiAgICBGdW5jdGlvbkVudGl0eSBjYWxsTWV0aG9kID0gY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgLmxvb2t1cENsYXNzTWVtYmVyKGVsZW1lbnQsIElkZW50aWZpZXJzLmNhbGwpOwoKICAgIEZ1bmN0aW9uSW5mbyBmdW5jdGlvbkluZm8gPSB2aXNpdEZ1bmN0aW9uKGNhbGxNZXRob2QpOwogICAgaWYgKGZ1bmN0aW9uSW5mbyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGNsb3N1cmVJbmZvLmZ1bmN0aW9uID0gZnVuY3Rpb25JbmZvOwogICAgZnVuY3Rpb25JbmZvLnBhcmVudCA9IGNsb3N1cmVJbmZvOwoKICAgIHJlc3VsdC5jbG9zdXJlcy5hZGQoY2xvc3VyZUluZm8pOwogICAgcmV0dXJuIGNsb3N1cmVJbmZvOwogIH0KCiAgRnVuY3Rpb25JbmZvIHZpc2l0RnVuY3Rpb24oRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIGludCBzaXplID0gZHVtcEluZm9UYXNrLnNpemVPZihmdW5jdGlvbik7CiAgICAvLyBUT0RPKHNpZ211bmQpOiBjb25zaWRlciBhZGRpbmcgYSBzbWFsbCBpbmZvIHRvIHJlcHJlc2VudCB1bnJlYWNoYWJsZQogICAgLy8gY29kZSBoZXJlLgogICAgaWYgKHNpemUgPT0gMCAmJiAhc2hvdWxkS2VlcChmdW5jdGlvbikpIHJldHVybiBudWxsOwoKICAgIC8vIFRPRE8oaGV0KTogdXNlICd0b1N0cmluZycgaW5zdGVhZCBvZiAndGV4dCc/IEl0IHdpbGwgYWRkICc9JyBmb3Igc2V0dGVycwogICAgU3RyaW5nIG5hbWUgPSBmdW5jdGlvbi5tZW1iZXJOYW1lLnRleHQ7CiAgICBpbnQga2luZDsKICAgIGlmIChmdW5jdGlvbi5pc1N0YXRpYyB8fCBmdW5jdGlvbi5pc1RvcExldmVsKSB7CiAgICAgIGtpbmQgPSBGdW5jdGlvbkluZm8uVE9QX0xFVkVMX0ZVTkNUSU9OX0tJTkQ7CiAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAga2luZCA9IEZ1bmN0aW9uSW5mby5NRVRIT0RfRlVOQ1RJT05fS0lORDsKICAgIH0KCiAgICBpZiAoZnVuY3Rpb24uaXNDb25zdHJ1Y3RvcikgewogICAgICBuYW1lID0gbmFtZSA9PSAiIgogICAgICAgICAgPyAiJHtmdW5jdGlvbi5lbmNsb3NpbmdDbGFzcy5uYW1lfSIKICAgICAgICAgIDogIiR7ZnVuY3Rpb24uZW5jbG9zaW5nQ2xhc3MubmFtZX0uJHtmdW5jdGlvbi5uYW1lfSI7CiAgICAgIGtpbmQgPSBGdW5jdGlvbkluZm8uQ09OU1RSVUNUT1JfRlVOQ1RJT05fS0lORDsKICAgIH0KCiAgICBhc3NlcnQoa2luZCAhPSBudWxsKTsKCiAgICBGdW5jdGlvbk1vZGlmaWVycyBtb2RpZmllcnMgPSBuZXcgRnVuY3Rpb25Nb2RpZmllcnMoCiAgICAgIGlzU3RhdGljOiBmdW5jdGlvbi5pc1N0YXRpYywKICAgICAgaXNDb25zdDogZnVuY3Rpb24uaXNDb25zdCwKICAgICAgaXNGYWN0b3J5OiBmdW5jdGlvbi5pc0NvbnN0cnVjdG9yCiAgICAgICAgICA/IChmdW5jdGlvbiBhcyBDb25zdHJ1Y3RvckVudGl0eSkuaXNGYWN0b3J5Q29uc3RydWN0b3IKICAgICAgICAgIDogZmFsc2UsCiAgICAgIGlzRXh0ZXJuYWw6IGZ1bmN0aW9uLmlzRXh0ZXJuYWwsCiAgICApOwogICAgTGlzdDxDb2RlU3Bhbj4gY29kZSA9IGR1bXBJbmZvVGFzay5jb2RlT2YoZnVuY3Rpb24pOwoKICAgIExpc3Q8UGFyYW1ldGVySW5mbz4gcGFyYW1ldGVycyA9IDxQYXJhbWV0ZXJJbmZvPltdOwogICAgTGlzdDxTdHJpbmc+IGluZmVycmVkUGFyYW1ldGVyVHlwZXMgPSA8U3RyaW5nPltdOwoKICAgIGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoUGFyYW1ldGVyQXNMb2NhbCgKICAgICAgICBjbG9zZWRXb3JsZC5nbG9iYWxMb2NhbHNNYXAsIGZ1bmN0aW9uLCAocGFyYW1ldGVyKSB7CiAgICAgIGluZmVycmVkUGFyYW1ldGVyVHlwZXMuYWRkKCcke19yZXN1bHRPZlBhcmFtZXRlcihwYXJhbWV0ZXIpfScpOwogICAgfSk7CiAgICBpbnQgcGFyYW1ldGVySW5kZXggPSAwOwogICAgY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hQYXJhbWV0ZXIoZnVuY3Rpb24sICh0eXBlLCBuYW1lLCBfKSB7CiAgICAgIHBhcmFtZXRlcnMuYWRkKG5ldyBQYXJhbWV0ZXJJbmZvKAogICAgICAgICAgbmFtZSwgaW5mZXJyZWRQYXJhbWV0ZXJUeXBlc1twYXJhbWV0ZXJJbmRleCsrXSwgJyR0eXBlJykpOwogICAgfSk7CgogICAgdmFyIGZ1bmN0aW9uVHlwZSA9IGVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShmdW5jdGlvbik7CiAgICBTdHJpbmcgcmV0dXJuVHlwZSA9ICcke2Z1bmN0aW9uVHlwZS5yZXR1cm5UeXBlfSc7CgogICAgU3RyaW5nIGluZmVycmVkUmV0dXJuVHlwZSA9ICcke19yZXN1bHRPZk1lbWJlcihmdW5jdGlvbikucmV0dXJuVHlwZX0nOwogICAgU3RyaW5nIHNpZGVFZmZlY3RzID0KICAgICAgICAnJHtfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cy5pbmZlcnJlZERhdGEuZ2V0U2lkZUVmZmVjdHNPZkVsZW1lbnQoZnVuY3Rpb24pfSc7CgogICAgaW50IGlubGluZWRDb3VudCA9IGR1bXBJbmZvVGFzay5pbmxpbmVDb3VudFtmdW5jdGlvbl07CiAgICBpZiAoaW5saW5lZENvdW50ID09IG51bGwpIGlubGluZWRDb3VudCA9IDA7CgogICAgRnVuY3Rpb25JbmZvIGluZm8gPSBuZXcgRnVuY3Rpb25JbmZvKAogICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgZnVuY3Rpb25LaW5kOiBraW5kLAogICAgICAgIG1vZGlmaWVyczogbW9kaWZpZXJzLAogICAgICAgIHJldHVyblR5cGU6IHJldHVyblR5cGUsCiAgICAgICAgaW5mZXJyZWRSZXR1cm5UeXBlOiBpbmZlcnJlZFJldHVyblR5cGUsCiAgICAgICAgcGFyYW1ldGVyczogcGFyYW1ldGVycywKICAgICAgICBzaWRlRWZmZWN0czogc2lkZUVmZmVjdHMsCiAgICAgICAgaW5saW5lZENvdW50OiBpbmxpbmVkQ291bnQsCiAgICAgICAgY29kZTogY29kZSwKICAgICAgICB0eXBlOiBmdW5jdGlvblR5cGUudG9TdHJpbmcoKSwKICAgICAgICBvdXRwdXRVbml0OiBfdW5pdEluZm9Gb3JNZW1iZXIoZnVuY3Rpb24pKTsKICAgIF9lbnRpdHlUb0luZm9bZnVuY3Rpb25dID0gaW5mbzsKCiAgICBpbnQgY2xvc3VyZVNpemUgPSBfYWRkQ2xvc3VyZUluZm8oaW5mbywgZnVuY3Rpb24pOwogICAgc2l6ZSArPSBjbG9zdXJlU2l6ZTsKCiAgICBpZiAoY29tcGlsZXIub3B0aW9ucy5leHBlcmltZW50Q2FsbEluc3RydW1lbnRhdGlvbikgewogICAgICAvLyBXZSB1c2UgZnVuY3Rpb24uaGFzaENvZGUgYmVjYXVzZSBpdCBpcyBnbG9iYWxseSB1bmlxdWUgYW5kIGl0IGlzCiAgICAgIC8vIGF2YWlsYWJsZSB3aGlsZSB3ZSBhcmUgZG9pbmcgY29kZWdlbi4KICAgICAgaW5mby5jb3ZlcmFnZUlkID0gJyR7ZnVuY3Rpb24uaGFzaENvZGV9JzsKICAgIH0KCiAgICBpbmZvLnNpemUgPSBzaXplOwoKICAgIHJlc3VsdC5mdW5jdGlvbnMuYWRkKGluZm8pOwogICAgcmV0dXJuIGluZm87CiAgfQoKICAvLy8gQWRkcyBjbG9zdXJlIGluZm9ybWF0aW9uIHRvIFtpbmZvXSwgdXNpbmcgYWxsIG5lc3RlZCBjbG9zdXJlcyBpbiBbbWVtYmVyXS4KICAvLy8KICAvLy8gUmV0dXJucyB0aGUgdG90YWwgc2l6ZSBvZiB0aGUgbmVzdGVkIGNsb3N1cmVzLCB0byBhZGQgdG8gdGhlIGluZm8gc2l6ZS4KICBpbnQgX2FkZENsb3N1cmVJbmZvKEluZm8gaW5mbywgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgYXNzZXJ0KGluZm8gaXMgRnVuY3Rpb25JbmZvIHx8IGluZm8gaXMgRmllbGRJbmZvKTsKICAgIGludCBzaXplID0gMDsKICAgIExpc3Q8Q2xvc3VyZUluZm8+IG5lc3RlZENsb3N1cmVzID0gPENsb3N1cmVJbmZvPltdOwogICAgZW52aXJvbm1lbnQuZm9yRWFjaE5lc3RlZENsb3N1cmUobWVtYmVyLCAoY2xvc3VyZSkgewogICAgICBDbG9zdXJlSW5mbyBjbG9zdXJlSW5mbyA9IHZpc2l0Q2xvc3VyZUNsYXNzKGNsb3N1cmUuZW5jbG9zaW5nQ2xhc3MpOwogICAgICBpZiAoY2xvc3VyZUluZm8gIT0gbnVsbCkgewogICAgICAgIGNsb3N1cmVJbmZvLnBhcmVudCA9IGluZm87CiAgICAgICAgbmVzdGVkQ2xvc3VyZXMuYWRkKGNsb3N1cmVJbmZvKTsKICAgICAgICBzaXplICs9IGNsb3N1cmVJbmZvLnNpemU7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKGluZm8gaXMgRnVuY3Rpb25JbmZvKSBpbmZvLmNsb3N1cmVzID0gbmVzdGVkQ2xvc3VyZXM7CiAgICBpZiAoaW5mbyBpcyBGaWVsZEluZm8pIGluZm8uY2xvc3VyZXMgPSBuZXN0ZWRDbG9zdXJlczsKCiAgICByZXR1cm4gc2l6ZTsKICB9CgogIE91dHB1dFVuaXRJbmZvIF9pbmZvRnJvbU91dHB1dFVuaXQoT3V0cHV0VW5pdCBvdXRwdXRVbml0KSB7CiAgICByZXR1cm4gX291dHB1dFRvSW5mby5wdXRJZkFic2VudChvdXRwdXRVbml0LCAoKSB7CiAgICAgIC8vIER1bXAtaW5mbyBjdXJyZW50bHkgb25seSB3b3JrcyB3aXRoIHRoZSBmdWxsIGVtaXR0ZXIuIElmIGFub3RoZXIKICAgICAgLy8gZW1pdHRlciBpcyB1c2VkIGl0IHdpbGwgZmFpbCBoZXJlLgogICAgICBCYWNrZW5kU3RyYXRlZ3kgYmFja2VuZFN0cmF0ZWd5ID0gY29tcGlsZXIuYmFja2VuZFN0cmF0ZWd5OwogICAgICBhc3NlcnQob3V0cHV0VW5pdC5uYW1lICE9IG51bGwgfHwgb3V0cHV0VW5pdC5pc01haW5PdXRwdXQpOwogICAgICB2YXIgZmlsZW5hbWUgPSBvdXRwdXRVbml0LmlzTWFpbk91dHB1dAogICAgICAgICAgPyBjb21waWxlci5vcHRpb25zLm91dHB1dFVyaS5wYXRoU2VnbWVudHMubGFzdAogICAgICAgICAgOiBkZWZlcnJlZFBhcnRGaWxlTmFtZShjb21waWxlci5vcHRpb25zLCBvdXRwdXRVbml0Lm5hbWUpOwogICAgICBPdXRwdXRVbml0SW5mbyBpbmZvID0gbmV3IE91dHB1dFVuaXRJbmZvKGZpbGVuYW1lLCBvdXRwdXRVbml0Lm5hbWUsCiAgICAgICAgICBiYWNrZW5kU3RyYXRlZ3kuZW1pdHRlclRhc2suZW1pdHRlci5nZW5lcmF0ZWRTaXplKG91dHB1dFVuaXQpKTsKICAgICAgaW5mby5pbXBvcnRzCiAgICAgICAgICAuYWRkQWxsKGNsb3NlZFdvcmxkLm91dHB1dFVuaXREYXRhLmdldEltcG9ydE5hbWVzKG91dHB1dFVuaXQpKTsKICAgICAgcmVzdWx0Lm91dHB1dFVuaXRzLmFkZChpbmZvKTsKICAgICAgcmV0dXJuIGluZm87CiAgICB9KTsKICB9CgogIE91dHB1dFVuaXRJbmZvIF91bml0SW5mb0Zvck1lbWJlcihNZW1iZXJFbnRpdHkgZW50aXR5KSB7CiAgICByZXR1cm4gX2luZm9Gcm9tT3V0cHV0VW5pdCgKICAgICAgICBjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0Rm9yTWVtYmVyKGVudGl0eSkpOwogIH0KCiAgT3V0cHV0VW5pdEluZm8gX3VuaXRJbmZvRm9yQ2xhc3MoQ2xhc3NFbnRpdHkgZW50aXR5KSB7CiAgICByZXR1cm4gX2luZm9Gcm9tT3V0cHV0VW5pdCgKICAgICAgICBjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0Rm9yQ2xhc3MoZW50aXR5LCBhbGxvd051bGw6IHRydWUpKTsKICB9CgogIE91dHB1dFVuaXRJbmZvIF91bml0SW5mb0ZvckNvbnN0YW50KENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIE91dHB1dFVuaXQgb3V0cHV0VW5pdCA9CiAgICAgICAgY2xvc2VkV29ybGQub3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvckNvbnN0YW50KGNvbnN0YW50KTsKICAgIGlmIChvdXRwdXRVbml0ID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGNvbnN0YW50IGlzIEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIF9pbmZvRnJvbU91dHB1dFVuaXQob3V0cHV0VW5pdCk7CiAgfQp9CgpjbGFzcyBTZWxlY3Rpb24gewogIGZpbmFsIEVudGl0eSBzZWxlY3RlZEVudGl0eTsKICBmaW5hbCBPYmplY3QgcmVjZWl2ZXJDb25zdHJhaW50OwogIFNlbGVjdGlvbih0aGlzLnNlbGVjdGVkRW50aXR5LCB0aGlzLnJlY2VpdmVyQ29uc3RyYWludCk7Cn0KCi8vLyBJbnRlcmZhY2UgdXNlZCB0byByZWNvcmQgaW5mb3JtYXRpb24gZnJvbSBkaWZmZXJlbnQgcGFydHMgb2YgdGhlIGNvbXBpbGVyIHNvCi8vLyB3ZSBjYW4gZW1pdCB0aGVtIGluIHRoZSBkdW1wLWluZm8gdGFzay4KLy8gVE9ETyhzaWdtdW5kLGhldCk6IG1vdmUgbW9yZSBmZWF0dXJlcyBoZXJlLiBJZGVhbGx5IHRoZSBkdW1wLWluZm8gdGFzawovLyBzaG91bGRuJ3QgcmVhY2ggaW50byBpbnRlcm5hbHMgb2Ygb3RoZXIgcGFydHMgb2YgdGhlIGNvbXBpbGVyLiBGb3IgZXhhbXBsZSwKLy8gd2UgY3VycmVudGx5IHJlYWNoIGludG8gdGhlIGZ1bGwgZW1pdHRlciBhbmQgYXMgYSByZXN1bHQgd2UgZG9uJ3Qgc3VwcG9ydAovLyBkdW1wLWluZm8gd2hlbiB1c2luZyB0aGUgc3RhcnR1cC1lbWl0dGVyIChpc3N1ZSAjMjQxOTApLgphYnN0cmFjdCBjbGFzcyBJbmZvUmVwb3J0ZXIgewogIHZvaWQgcmVwb3J0SW5saW5lZChGdW5jdGlvbkVudGl0eSBlbGVtZW50LCBNZW1iZXJFbnRpdHkgaW5saW5lZEZyb20pOwp9CgpjbGFzcyBEdW1wSW5mb1Rhc2sgZXh0ZW5kcyBDb21waWxlclRhc2sgaW1wbGVtZW50cyBJbmZvUmVwb3J0ZXIgewogIHN0YXRpYyBjb25zdCBJbXBhY3RVc2VDYXNlIElNUEFDVF9VU0UgPSBjb25zdCBJbXBhY3RVc2VDYXNlKCdEdW1wIGluZm8nKTsKICBmaW5hbCBDb21waWxlciBjb21waWxlcjsKICBmaW5hbCBib29sIHVzZUJpbmFyeUZvcm1hdDsKCiAgRHVtcEluZm9UYXNrKHRoaXMuY29tcGlsZXIpCiAgICAgIDogdXNlQmluYXJ5Rm9ybWF0ID0gY29tcGlsZXIub3B0aW9ucy51c2VEdW1wSW5mb0JpbmFyeUZvcm1hdCwKICAgICAgICBzdXBlcihjb21waWxlci5tZWFzdXJlcik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiAiRHVtcCBJbmZvIjsKCiAgRWxlbWVudEluZm9Db2xsZWN0b3IgaW5mb0NvbGxlY3RvcjsKCiAgLy8vIFRoZSBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgb3V0cHV0LgogIGludCBfcHJvZ3JhbVNpemU7CgogIC8vLyBEYXRhIGFzc29jaWF0ZWQgd2l0aCBqYXZhc2NyaXB0IEFTVCBub2Rlcy4gVGhlIG1hcCBvbmx5IGNvbnRhaW5zIGtleXMgZm9yCiAgLy8vIG5vZGVzIHRoYXQgd2UgY2FyZSBhYm91dC4gIEtleXMgYXJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbgogIC8vLyBbcmVnaXN0ZXJFbnRpdHlBc3RdIGlzIGNhbGxlZC4KICBmaW5hbCBNYXA8anNBc3QuTm9kZSwgQ29kZVNwYW4+IF9ub2RlRGF0YSA9IDxqc0FzdC5Ob2RlLCBDb2RlU3Bhbj57fTsKCiAgLy8gQSBtYXBwaW5nIGZyb20gRGFydCBFbnRpdGllcyB0byBKYXZhc2NyaXB0IEFTVCBOb2Rlcy4KICBmaW5hbCBNYXA8RW50aXR5LCBMaXN0PGpzQXN0Lk5vZGU+PiBfZW50aXR5VG9Ob2RlcyA9CiAgICAgIDxFbnRpdHksIExpc3Q8anNBc3QuTm9kZT4+e307CiAgZmluYWwgTWFwPENvbnN0YW50VmFsdWUsIGpzQXN0Lk5vZGU+IF9jb25zdGFudFRvTm9kZSA9CiAgICAgIDxDb25zdGFudFZhbHVlLCBqc0FzdC5Ob2RlPnt9OwoKICBmaW5hbCBNYXA8RW50aXR5LCBpbnQ+IGlubGluZUNvdW50ID0gPEVudGl0eSwgaW50Pnt9OwoKICAvLyBBIG1hcHBpbmcgZnJvbSBhbiBlbnRpdHkgdG8gYSBsaXN0IG9mIGVudGl0aWVzIHRoYXQgYXJlCiAgLy8gaW5saW5lZCBpbnNpZGUgb2YgaXQuCiAgZmluYWwgTWFwPEVudGl0eSwgTGlzdDxFbnRpdHk+PiBpbmxpbmVNYXAgPSA8RW50aXR5LCBMaXN0PEVudGl0eT4+e307CgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIFdvcmxkSW1wYWN0PiBpbXBhY3RzID0gPE1lbWJlckVudGl0eSwgV29ybGRJbXBhY3Q+e307CgogIC8vLyBSZWdpc3RlciB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJhdGVkIG91dHB1dC4KICB2b2lkIHJlcG9ydFNpemUoaW50IHByb2dyYW1TaXplKSB7CiAgICBfcHJvZ3JhbVNpemUgPSBwcm9ncmFtU2l6ZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVwb3J0SW5saW5lZChGdW5jdGlvbkVudGl0eSBlbGVtZW50LCBNZW1iZXJFbnRpdHkgaW5saW5lZEZyb20pIHsKICAgIGlubGluZUNvdW50LnB1dElmQWJzZW50KGVsZW1lbnQsICgpID0+IDApOwogICAgaW5saW5lQ291bnRbZWxlbWVudF0gKz0gMTsKICAgIGlubGluZU1hcC5wdXRJZkFic2VudChpbmxpbmVkRnJvbSwgKCkgPT4gbmV3IExpc3Q8RW50aXR5PigpKTsKICAgIGlubGluZU1hcFtpbmxpbmVkRnJvbV0uYWRkKGVsZW1lbnQpOwogIH0KCiAgdm9pZCByZWdpc3RlckltcGFjdChNZW1iZXJFbnRpdHkgbWVtYmVyLCBXb3JsZEltcGFjdCBpbXBhY3QpIHsKICAgIGlmIChjb21waWxlci5vcHRpb25zLmR1bXBJbmZvKSB7CiAgICAgIGltcGFjdHNbbWVtYmVyXSA9IGltcGFjdDsKICAgIH0KICB9CgogIHZvaWQgdW5yZWdpc3RlckltcGFjdCh2YXIgaW1wYWN0U291cmNlKSB7CiAgICBpbXBhY3RzLnJlbW92ZShpbXBhY3RTb3VyY2UpOwogIH0KCiAgLy8vIFJldHVybnMgYW4gaXRlcmFibGUgb2YgW1NlbGVjdGlvbl1zIHRoYXQgYXJlIHVzZWQgYnkgW2VudGl0eV0uIEVhY2gKICAvLy8gW1NlbGVjdGlvbl0gY29udGFpbnMgYW4gZW50aXR5IHRoYXQgaXMgdXNlZCBhbmQgdGhlIHNlbGVjdG9yIHRoYXQKICAvLy8gc2VsZWN0ZWQgdGhlIGVudGl0eS4KICBJdGVyYWJsZTxTZWxlY3Rpb24+IGdldFJldGFpbmluZyhFbnRpdHkgZW50aXR5LCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIFdvcmxkSW1wYWN0IGltcGFjdCA9IGltcGFjdHNbZW50aXR5XTsKICAgIGlmIChpbXBhY3QgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IDxTZWxlY3Rpb24+W107CgogICAgdmFyIHNlbGVjdGlvbnMgPSA8U2VsZWN0aW9uPltdOwogICAgY29tcGlsZXIuaW1wYWN0U3RyYXRlZ3kudmlzaXRJbXBhY3QoCiAgICAgICAgZW50aXR5LAogICAgICAgIGltcGFjdCwKICAgICAgICBuZXcgV29ybGRJbXBhY3RWaXNpdG9ySW1wbCh2aXNpdER5bmFtaWNVc2U6IChtZW1iZXIsIGR5bmFtaWNVc2UpIHsKICAgICAgICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IGR5bmFtaWNVc2UucmVjZWl2ZXJDb25zdHJhaW50OwogICAgICAgICAgc2VsZWN0aW9ucy5hZGRBbGwoY2xvc2VkV29ybGQKICAgICAgICAgICAgICAvLyBUT0RPKGhldCk6IEhhbmRsZSBgY2FsbGAgb24gYENsb3N1cmVgIHRocm91Z2gKICAgICAgICAgICAgICAvLyBgd29ybGQuaW5jbHVkZXNDbG9zdXJlQ2FsbGAuCiAgICAgICAgICAgICAgLmxvY2F0ZU1lbWJlcnMoZHluYW1pY1VzZS5zZWxlY3RvciwgbWFzaykKICAgICAgICAgICAgICAubWFwKChNZW1iZXJFbnRpdHkgZSkgPT4gbmV3IFNlbGVjdGlvbihlLCBtYXNrKSkpOwogICAgICAgIH0sIHZpc2l0U3RhdGljVXNlOiAobWVtYmVyLCBzdGF0aWNVc2UpIHsKICAgICAgICAgIHNlbGVjdGlvbnMuYWRkKG5ldyBTZWxlY3Rpb24oc3RhdGljVXNlLmVsZW1lbnQsIG51bGwpKTsKICAgICAgICB9KSwKICAgICAgICBJTVBBQ1RfVVNFKTsKICAgIHJldHVybiBzZWxlY3Rpb25zOwogIH0KCiAgLy8vIFJlZ2lzdGVycyB0aGF0IGEgamF2YXNjcmlwdCBBU1Qgbm9kZSBbY29kZV0gd2FzIHByb2R1Y2VkIGJ5IHRoZSBkYXJ0CiAgLy8vIEVudGl0eSBbZW50aXR5XS4KICB2b2lkIHJlZ2lzdGVyRW50aXR5QXN0KEVudGl0eSBlbnRpdHksIGpzQXN0Lk5vZGUgY29kZSwKICAgICAge0xpYnJhcnlFbnRpdHkgbGlicmFyeX0pIHsKICAgIGlmIChjb21waWxlci5vcHRpb25zLmR1bXBJbmZvKSB7CiAgICAgIF9lbnRpdHlUb05vZGVzCiAgICAgICAgICAucHV0SWZBYnNlbnQoZW50aXR5LCAoKSA9PiBuZXcgTGlzdDxqc0FzdC5Ob2RlPigpKQogICAgICAgICAgLmFkZChjb2RlKTsKICAgICAgX25vZGVEYXRhW2NvZGVdID8/PSB1c2VCaW5hcnlGb3JtYXQgPyBuZXcgQ29kZVNwYW4oKSA6IG5ldyBfQ29kZURhdGEoKTsKICAgIH0KICB9CgogIHZvaWQgcmVnaXN0ZXJDb25zdGFudEFzdChDb25zdGFudFZhbHVlIGNvbnN0YW50LCBqc0FzdC5Ob2RlIGNvZGUpIHsKICAgIGlmIChjb21waWxlci5vcHRpb25zLmR1bXBJbmZvKSB7CiAgICAgIGFzc2VydChfY29uc3RhbnRUb05vZGVbY29uc3RhbnRdID09IG51bGwgfHwKICAgICAgICAgIF9jb25zdGFudFRvTm9kZVtjb25zdGFudF0gPT0gY29kZSk7CiAgICAgIF9jb25zdGFudFRvTm9kZVtjb25zdGFudF0gPSBjb2RlOwogICAgICBfbm9kZURhdGFbY29kZV0gPz89IHVzZUJpbmFyeUZvcm1hdCA/IG5ldyBDb2RlU3BhbigpIDogbmV3IF9Db2RlRGF0YSgpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgc2hvdWxkRW1pdFRleHQgPT4gIXVzZUJpbmFyeUZvcm1hdDsKICAvLyBUT0RPKHNpZ211bmQpOiBkZWxldGUgdGhlIHN0YWNrIG9uY2Ugd2Ugc3RvcCBlbWl0dGluZyB0aGUgc291cmNlIHRleHQuCiAgTGlzdDxfQ29kZURhdGE+IF9zdGFjayA9IFtdOwogIHZvaWQgZW50ZXJOb2RlKGpzQXN0Lk5vZGUgbm9kZSwgaW50IHN0YXJ0KSB7CiAgICB2YXIgZGF0YSA9IF9ub2RlRGF0YVtub2RlXTsKICAgIGRhdGE/LnN0YXJ0ID0gc3RhcnQ7CgogICAgaWYgKHNob3VsZEVtaXRUZXh0ICYmIGRhdGEgIT0gbnVsbCkgewogICAgICBfc3RhY2suYWRkKGRhdGEpOwogICAgfQogIH0KCiAgdm9pZCBlbWl0KFN0cmluZyBzdHJpbmcpIHsKICAgIGlmIChzaG91bGRFbWl0VGV4dCkgewogICAgICAvLyBOb3RlOiBoaXN0b3JpY2FsbHkgd2UgZW1pdHRlZCB0aGUgZnVsbCBib2R5IG9mIGNsYXNzZXMgYW5kIG1ldGhvZHMsIHNvCiAgICAgIC8vIGluc3RhbmNlIG1ldGhvZHMgZW5kZWQgdXAgZW1pdHRlZCB0d2ljZS4gIE9uY2Ugd2UgdXNlIGEgZGlmZmVyZW50CiAgICAgIC8vIGVuY29kaW5nIG9mIGR1bXAgaW5mbywgd2UgYWxzbyBwbGFuIHRvIHJlbW92ZSB0aGlzIGR1cGxpY2F0aW9uLgogICAgICBfc3RhY2suZm9yRWFjaCgoZikgPT4gZi5fdGV4dC53cml0ZShzdHJpbmcpKTsKICAgIH0KICB9CgogIHZvaWQgZXhpdE5vZGUoanNBc3QuTm9kZSBub2RlLCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBjbG9zaW5nKSB7CiAgICB2YXIgZGF0YSA9IF9ub2RlRGF0YVtub2RlXTsKICAgIGRhdGE/LmVuZCA9IGVuZDsKICAgIGlmIChzaG91bGRFbWl0VGV4dCAmJiBkYXRhICE9IG51bGwpIHsKICAgICAgdmFyIGxhc3QgPSBfc3RhY2sucmVtb3ZlTGFzdCgpOwogICAgICBhc3NlcnQoZGF0YSA9PSBsYXN0KTsKICAgICAgYXNzZXJ0KGRhdGEuc3RhcnQgPT0gc3RhcnQpOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHNvdXJjZSBjb2RlIHRoYXQgd2FzIGdlbmVyYXRlZCBmb3IgYW4gZW50aXR5LgogIC8vLyBJZiBubyBzb3VyY2UgY29kZSB3YXMgcHJvZHVjZWQsIHJldHVybiAwLgogIGludCBzaXplT2YoRW50aXR5IGVudGl0eSkgewogICAgaWYgKF9lbnRpdHlUb05vZGVzLmNvbnRhaW5zS2V5KGVudGl0eSkpIHsKICAgICAgcmV0dXJuIF9lbnRpdHlUb05vZGVzW2VudGl0eV0ubWFwKHNpemVPZk5vZGUpLmZvbGQoMCwgKGEsIGIpID0+IGEgKyBiKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAwOwogICAgfQogIH0KCiAgaW50IHNpemVPZk5vZGUoanNBc3QuTm9kZSBub2RlKSB7CiAgICBDb2RlU3BhbiBzcGFuID0gX25vZGVEYXRhW25vZGVdOwogICAgaWYgKHNwYW4gPT0gbnVsbCkgcmV0dXJuIDA7CiAgICByZXR1cm4gc3Bhbi5lbmQgLSBzcGFuLnN0YXJ0OwogIH0KCiAgTGlzdDxDb2RlU3Bhbj4gY29kZU9mKE1lbWJlckVudGl0eSBlbnRpdHkpIHsKICAgIExpc3Q8anNBc3QuTm9kZT4gY29kZSA9IF9lbnRpdHlUb05vZGVzW2VudGl0eV07CiAgICBpZiAoY29kZSA9PSBudWxsKSByZXR1cm4gY29uc3QgW107CiAgICByZXR1cm4gY29kZS5tYXAoKGFzdCkgPT4gX25vZGVEYXRhW2FzdF0pLnRvTGlzdCgpOwogIH0KCiAgdm9pZCBkdW1wSW5mbyhKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMpIHsKICAgIG1lYXN1cmUoKCkgewogICAgICBpbmZvQ29sbGVjdG9yID0gbmV3IEVsZW1lbnRJbmZvQ29sbGVjdG9yKAogICAgICAgICAgY29tcGlsZXIsIHRoaXMsIGNsb3NlZFdvcmxkLCBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzKQogICAgICAgIC4ucnVuKCk7CgogICAgICB2YXIgYWxsSW5mbyA9IGJ1aWxkRHVtcEluZm9EYXRhKGNsb3NlZFdvcmxkKTsKICAgICAgaWYgKHVzZUJpbmFyeUZvcm1hdCkgewogICAgICAgIGR1bXBJbmZvQmluYXJ5KGFsbEluZm8pOwogICAgICB9IGVsc2UgewogICAgICAgIGR1bXBJbmZvSnNvbihhbGxJbmZvKTsKICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIGR1bXBJbmZvSnNvbihBbGxJbmZvIGRhdGEpIHsKICAgIFN0cmluZ0J1ZmZlciBqc29uQnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgSnNvbkVuY29kZXIgZW5jb2RlciA9IGNvbnN0IEpzb25FbmNvZGVyLndpdGhJbmRlbnQoJyAgJyk7CiAgICBDaHVua2VkQ29udmVyc2lvblNpbms8T2JqZWN0PiBzaW5rID0gZW5jb2Rlci5zdGFydENodW5rZWRDb252ZXJzaW9uKAogICAgICAgIG5ldyBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tU3RyaW5nU2luayhqc29uQnVmZmVyKSk7CiAgICBzaW5rLmFkZChuZXcgQWxsSW5mb0pzb25Db2RlYyhpc0JhY2t3YXJkQ29tcGF0aWJsZTogdHJ1ZSkuZW5jb2RlKGRhdGEpKTsKICAgIGNvbXBpbGVyLm91dHB1dFByb3ZpZGVyLmNyZWF0ZU91dHB1dFNpbmsoCiAgICAgICAgY29tcGlsZXIub3B0aW9ucy5vdXRwdXRVcmkucGF0aFNlZ21lbnRzLmxhc3QsCiAgICAgICAgJ2luZm8uanNvbicsCiAgICAgICAgT3V0cHV0VHlwZS5kdW1wSW5mbykKICAgICAgLi5hZGQoanNvbkJ1ZmZlci50b1N0cmluZygpKQogICAgICAuLmNsb3NlKCk7CiAgICBjb21waWxlci5yZXBvcnRlci5yZXBvcnRJbmZvKE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwgTWVzc2FnZUtpbmQuR0VORVJJQywgewogICAgICAndGV4dCc6ICJWaWV3IHRoZSBkdW1wZWQgLmluZm8uanNvbiBmaWxlIGF0ICIKICAgICAgICAgICJodHRwczovL2RhcnQtbGFuZy5naXRodWIuaW8vZHVtcC1pbmZvLXZpc3VhbGl6ZXIiCiAgICB9KTsKICB9CgogIHZvaWQgZHVtcEluZm9CaW5hcnkoQWxsSW5mbyBkYXRhKSB7CiAgICB2YXIgbmFtZSA9IGNvbXBpbGVyLm9wdGlvbnMub3V0cHV0VXJpLnBhdGhTZWdtZW50cy5sYXN0ICsgIi5pbmZvLmRhdGEiOwogICAgU2luazxMaXN0PGludD4+IHNpbmsgPSBuZXcgQmluYXJ5T3V0cHV0U2lua0FkYXB0ZXIoY29tcGlsZXIub3V0cHV0UHJvdmlkZXIKICAgICAgICAuY3JlYXRlQmluYXJ5U2luayhjb21waWxlci5vcHRpb25zLm91dHB1dFVyaS5yZXNvbHZlKG5hbWUpKSk7CiAgICBkdW1wX2luZm8uZW5jb2RlKGRhdGEsIHNpbmspOwogICAgY29tcGlsZXIucmVwb3J0ZXIucmVwb3J0SW5mbyhOT19MT0NBVElPTl9TUEFOTkFCTEUsIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsKICAgICAgJ3RleHQnOiAiVXNlIGBwYWNrYWdlOmRhcnQyanNfaW5mb2AgdG8gcGFyc2UgYW5kIHByb2Nlc3MgdGhlIGR1bXBlZCAiCiAgICAgICAgICAiLmluZm8uZGF0YSBmaWxlLiIKICAgIH0pOwogIH0KCiAgQWxsSW5mbyBidWlsZER1bXBJbmZvRGF0YShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIFN0b3B3YXRjaCBzdG9wd2F0Y2ggPSBuZXcgU3RvcHdhdGNoKCk7CiAgICBzdG9wd2F0Y2guc3RhcnQoKTsKCiAgICBBbGxJbmZvIHJlc3VsdCA9IGluZm9Db2xsZWN0b3IucmVzdWx0OwoKICAgIC8vIFJlY3Vyc2l2ZWx5IGJ1aWxkIGxpbmtzIHRvIGZ1bmN0aW9uIHVzZXMKICAgIEl0ZXJhYmxlPEVudGl0eT4gZnVuY3Rpb25FbnRpdGllcyA9CiAgICAgICAgaW5mb0NvbGxlY3Rvci5fZW50aXR5VG9JbmZvLmtleXMud2hlcmUoKGspID0+IGsgaXMgRnVuY3Rpb25FbnRpdHkpOwogICAgZm9yIChGdW5jdGlvbkVudGl0eSBlbnRpdHkgaW4gZnVuY3Rpb25FbnRpdGllcykgewogICAgICBGdW5jdGlvbkluZm8gaW5mbyA9IGluZm9Db2xsZWN0b3IuX2VudGl0eVRvSW5mb1tlbnRpdHldOwogICAgICBJdGVyYWJsZTxTZWxlY3Rpb24+IHVzZXMgPSBnZXRSZXRhaW5pbmcoZW50aXR5LCBjbG9zZWRXb3JsZCk7CiAgICAgIC8vIERvbid0IGJvdGhlciByZWNvcmRpbmcgYW4gZW1wdHkgbGlzdCBvZiBkZXBlbmRlbmNpZXMuCiAgICAgIGZvciAoU2VsZWN0aW9uIHNlbGVjdGlvbiBpbiB1c2VzKSB7CiAgICAgICAgLy8gRG9uJ3QgcmVnaXN0ZXIgZGFydDJqcyBidWlsdGluIGZ1bmN0aW9ucyB0aGF0IGFyZSBub3QgcmVjb3JkZWQuCiAgICAgICAgSW5mbyB1c2VJbmZvID0gaW5mb0NvbGxlY3Rvci5fZW50aXR5VG9JbmZvW3NlbGVjdGlvbi5zZWxlY3RlZEVudGl0eV07CiAgICAgICAgaWYgKHVzZUluZm8gPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgaW5mby51c2VzLmFkZChuZXcgRGVwZW5kZW5jeUluZm8oCiAgICAgICAgICAgIHVzZUluZm8sIHNlbGVjdGlvbi5yZWNlaXZlckNvbnN0cmFpbnQ/LnRvU3RyaW5nKCkpKTsKICAgICAgfQogICAgfQoKICAgIC8vIFJlY3Vyc2l2ZWx5IGJ1aWxkIGxpbmtzIHRvIGZpZWxkIHVzZXMKICAgIEl0ZXJhYmxlPEVudGl0eT4gZmllbGRFbnRpdHkgPQogICAgICAgIGluZm9Db2xsZWN0b3IuX2VudGl0eVRvSW5mby5rZXlzLndoZXJlKChrKSA9PiBrIGlzIEZpZWxkRW50aXR5KTsKICAgIGZvciAoRmllbGRFbnRpdHkgZW50aXR5IGluIGZpZWxkRW50aXR5KSB7CiAgICAgIEZpZWxkSW5mbyBpbmZvID0gaW5mb0NvbGxlY3Rvci5fZW50aXR5VG9JbmZvW2VudGl0eV07CiAgICAgIEl0ZXJhYmxlPFNlbGVjdGlvbj4gdXNlcyA9IGdldFJldGFpbmluZyhlbnRpdHksIGNsb3NlZFdvcmxkKTsKICAgICAgLy8gRG9uJ3QgYm90aGVyIHJlY29yZGluZyBhbiBlbXB0eSBsaXN0IG9mIGRlcGVuZGVuY2llcy4KICAgICAgZm9yIChTZWxlY3Rpb24gc2VsZWN0aW9uIGluIHVzZXMpIHsKICAgICAgICBJbmZvIHVzZUluZm8gPSBpbmZvQ29sbGVjdG9yLl9lbnRpdHlUb0luZm9bc2VsZWN0aW9uLnNlbGVjdGVkRW50aXR5XTsKICAgICAgICBpZiAodXNlSW5mbyA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICBpbmZvLnVzZXMuYWRkKG5ldyBEZXBlbmRlbmN5SW5mbygKICAgICAgICAgICAgdXNlSW5mbywgc2VsZWN0aW9uLnJlY2VpdmVyQ29uc3RyYWludD8udG9TdHJpbmcoKSkpOwogICAgICB9CiAgICB9CgogICAgLy8gTm90aWZ5IHRoZSBpbXBhY3Qgc3RyYXRlZ3kgaW1wYWN0cyBhcmUgbm8gbG9uZ2VyIG5lZWRlZCBmb3IgZHVtcCBpbmZvLgogICAgY29tcGlsZXIuaW1wYWN0U3RyYXRlZ3kub25JbXBhY3RVc2VkKElNUEFDVF9VU0UpOwoKICAgIC8vIFRyYWNrIGRlcGVuZGVuY2llcyB0aGF0IGNvbWUgZnJvbSBpbmxpbmluZy4KICAgIGZvciAoRW50aXR5IGVudGl0eSBpbiBpbmxpbmVNYXAua2V5cykgewogICAgICBDb2RlSW5mbyBvdXRlckluZm8gPSBpbmZvQ29sbGVjdG9yLl9lbnRpdHlUb0luZm9bZW50aXR5XTsKICAgICAgaWYgKG91dGVySW5mbyA9PSBudWxsKSBjb250aW51ZTsKICAgICAgZm9yIChFbnRpdHkgaW5saW5lZCBpbiBpbmxpbmVNYXBbZW50aXR5XSkgewogICAgICAgIEluZm8gaW5saW5lZEluZm8gPSBpbmZvQ29sbGVjdG9yLl9lbnRpdHlUb0luZm9baW5saW5lZF07CiAgICAgICAgaWYgKGlubGluZWRJbmZvID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgIG91dGVySW5mby51c2VzLmFkZChuZXcgRGVwZW5kZW5jeUluZm8oaW5saW5lZEluZm8sICdpbmxpbmVkJykpOwogICAgICB9CiAgICB9CgogICAgcmVzdWx0LmRlZmVycmVkRmlsZXMgPSBjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YQogICAgICAgIC5jb21wdXRlRGVmZXJyZWRNYXAoY29tcGlsZXIub3B0aW9ucywgY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50KTsKICAgIHN0b3B3YXRjaC5zdG9wKCk7CgogICAgcmVzdWx0LnByb2dyYW0gPSBuZXcgUHJvZ3JhbUluZm8oCiAgICAgICAgZW50cnlwb2ludDogaW5mb0NvbGxlY3RvcgogICAgICAgICAgICAuX2VudGl0eVRvSW5mb1tjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQubWFpbkZ1bmN0aW9uXSwKICAgICAgICBzaXplOiBfcHJvZ3JhbVNpemUsCiAgICAgICAgZGFydDJqc1ZlcnNpb246CiAgICAgICAgICAgIGNvbXBpbGVyLm9wdGlvbnMuaGFzQnVpbGRJZCA/IGNvbXBpbGVyLm9wdGlvbnMuYnVpbGRJZCA6IG51bGwsCiAgICAgICAgY29tcGlsYXRpb25Nb21lbnQ6IG5ldyBEYXRlVGltZS5ub3coKSwKICAgICAgICBjb21waWxhdGlvbkR1cmF0aW9uOiBjb21waWxlci5tZWFzdXJlci5lbGFwc2VkV2FsbENsb2NrLAogICAgICAgIHRvSnNvbkR1cmF0aW9uOgogICAgICAgICAgICBuZXcgRHVyYXRpb24obWlsbGlzZWNvbmRzOiBzdG9wd2F0Y2guZWxhcHNlZE1pbGxpc2Vjb25kcyksCiAgICAgICAgZHVtcEluZm9EdXJhdGlvbjogbmV3IER1cmF0aW9uKG1pbGxpc2Vjb25kczogdGhpcy50aW1pbmcpLAogICAgICAgIG5vU3VjaE1ldGhvZEVuYWJsZWQ6IGNsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZS5pc05vU3VjaE1ldGhvZFVzZWQsCiAgICAgICAgaXNSdW50aW1lVHlwZVVzZWQ6IGNsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZS5pc1J1bnRpbWVUeXBlVXNlZCwKICAgICAgICBpc0lzb2xhdGVJblVzZTogZmFsc2UsCiAgICAgICAgaXNGdW5jdGlvbkFwcGx5VXNlZDogY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlLmlzRnVuY3Rpb25BcHBseVVzZWQsCiAgICAgICAgaXNNaXJyb3JzVXNlZDogY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlLmlzTWlycm9yc1VzZWQsCiAgICAgICAgbWluaWZpZWQ6IGNvbXBpbGVyLm9wdGlvbnMuZW5hYmxlTWluaWZpY2F0aW9uKTsKCiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKLy8vIEhlbHBlciBjbGFzcyB0byBzdG9yZSB3aGF0IGR1bXAtaW5mbyB3aWxsIHNob3cgZm9yIGEgcGllY2Ugb2YgY29kZS4KLy8gVE9ETyhzaWdtdW5kKTogZGVsZXRlIG9uY2Ugd2Ugbm8gbG9uZ2VyIGVtaXQgdGV4dCBieSBkZWZhdWx0LgpjbGFzcyBfQ29kZURhdGEgZXh0ZW5kcyBDb2RlU3BhbiB7CiAgU3RyaW5nQnVmZmVyIF90ZXh0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgdGV4dCA9PiAnJF90ZXh0JzsKICBpbnQgZ2V0IGxlbmd0aCA9PiBlbmQgLSBzdGFydDsKfQqCrwBOTjwBEwEWQwEpNEYBHyAcLhY4Jk1DIS4dRh4pLiQ9IScBHRsiPCMBSU8BKDxMPAFLJQEPPDwvIycYNygiCDEEATIGTE1MIzc2BAEwNhsdBilPHwFCRTskNCYKIzIhMSMKCAgBOC8fJSEICAE3IBEEAUUxAS80AUs+PyAoIyETBgErNgFIKwEkGjQnFC8hIVEqQgYBOkcvLQYBNCQBHREEASwnKRomLyYBKzpFOyQxKzsmDAojSiErKDgmDAoPRggIOj4iLyk5JAoICAEbAU8kJxMGASMWBAE3LxwwLSoBPzcBOyspJwEmGAQBOC5MEjkBUCwONDMyMAYBIhguQDUGARoBOSMhKEETJwc5ATg2ATw9RggcUChFCAE+NgFLGVUBOzABKhQcHiAwICIkFCczJAE3GQE6Si8wBgEWASARBAFRBk44NxI4OUshIykiCAg+OwERBAE+NkosQkItOUVKShNKJBMIBAE7IEEEATkgUQQBQBxEHjQTBiwEAgESHyM7AgFRLEpPTTweSAIBQkwbHgEeRCIBDCIBJgEoFAFQQyVIATs3JDklATgBPRtIAVABMSUgBAEMSS8fQikEAUElIAYEASwiBAFKSBtOKjQBJCkQEEs+KD8uOEExQgwVFwQBSxc5ISUVPRZOBgQBRiUyLihOBgQBL0wfLyAZASoYBgQBHRpQS0k0BgQBRCAVKiYcIwYEAUwwHi5ODRAGBAEkJSAiBAEvNCc3BAEqOxEwPxEBNB0hDx8ICAQBJDI+ST5NLjYVHSMRTzQ9CAQBJkxPRiJPTB0IBAE4KxcBKwEwKEw2P0Q/KktOJypBCAYBLSNJLjxEPypOJypBCAYBTjYBMyxAJzJBK0gIBgE2TxYBJiJJHBhLL0EYR0NKRx9LPzgBEwQCAUhBIysMHyECASNwYWNrYWdlOmNvbXBpbGVyL3NyYy9kdW1wX2luZm8uZGFydDRzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9lbGVtZW50cy9lbnRpdGllcy5kYXJ0soMvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBlbnRpdGllczsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIHNob3cgQXN5bmNNb2RpZmllcjsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwppbXBvcnQgJ25hbWVzLmRhcnQnOwppbXBvcnQgJ3R5cGVzLmRhcnQnOwoKLy8vIEFic3RyYWN0IGludGVyZmFjZSBmb3IgZW50aXRpZXMuCi8vLwovLy8gSW1wbGVtZW50IHRoaXMgZGlyZWN0bHkgaWYgdGhlIGVudGl0eSBpcyBub3QgYSBEYXJ0IGxhbmd1YWdlIGVudGl0eS4KLy8vIEVudGl0aWVzIGRlZmluZWQgd2l0aGluIHRoZSBEYXJ0IGxhbmd1YWdlIHNob3VsZCBpbXBsZW1lbnQgW0VsZW1lbnRdLgovLy8KLy8vIEZvciBpbnN0YW5jZSwgdGhlIEphdmFTY3JpcHQgYmFja2VuZCBuZWVkIHRvIGNyZWF0ZSBzeW50aGV0aWMgdmFyaWFibGVzIGZvcgovLy8gY2FsbGluZyBpbnRlcmNlcHRlZCBjbGFzc2VzIGFuZCBzdWNoIHZhcmlhYmxlcyBkbyBub3QgY29ycmVzcG9uZCB0byBhbgovLy8gZW50aXR5IGluIHRoZSBEYXJ0IHNvdXJjZSBjb2RlIG5vciBpbiB0aGUgdGVybWlub2xvZ3kgb2YgdGhlIERhcnQgbGFuZ3VhZ2UKLy8vIGFuZCBzaG91bGQgdGhlcmVmb3JlIGltcGxlbWVudCBbRW50aXR5XSBkaXJlY3RseS4KYWJzdHJhY3QgY2xhc3MgRW50aXR5IGltcGxlbWVudHMgU3Bhbm5hYmxlIHsKICBTdHJpbmcgZ2V0IG5hbWU7Cn0KCi8vLyBTdHJpcHBlZCBkb3duIHN1cGVyIGludGVyZmFjZSBmb3IgbGlicmFyeSBsaWtlIGVudGl0aWVzLgovLy8KLy8vIEN1cnJlbnRseSBvbmx5IFtMaWJyYXJ5RWxlbWVudF0gYnV0IGxhdGVyIGFsc28ga2VybmVsIGJhc2VkIERhcnQgY2xhc3NlcwovLy8gYW5kL29yIERhcnQtaW4tSlMgY2xhc3Nlcy4KYWJzdHJhY3QgY2xhc3MgTGlicmFyeUVudGl0eSBleHRlbmRzIEVudGl0eSB7CiAgLy8vIFJldHVybiB0aGUgY2Fub25pY2FsIHVyaSB0aGF0IGlkZW50aWZpZXMgdGhpcyBsaWJyYXJ5LgogIFVyaSBnZXQgY2Fub25pY2FsVXJpOwp9CgovLy8gU3RyaXBwZWQgZG93biBzdXBlciBpbnRlcmZhY2UgZm9yIGltcG9ydCBlbnRpdGllcy4KLy8vCi8vLyBUaGUgW25hbWVdIHByb3BlcnR5IGNvcnJlc3BvbmRzIHRvIHRoZSBwcmVmaXggbmFtZSwgaWYgYW55LgpjbGFzcyBJbXBvcnRFbnRpdHkgewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8gVGhlIGNhbm9uaWNhbCBVUkkgb2YgdGhlIGxpYnJhcnkgd2hlcmUgdGhpcyBpbXBvcnQgb2NjdXJzCiAgLy8vICh3aGVyZSB0aGUgaW1wb3J0IGlzIGRlY2xhcmVkKS4KICBmaW5hbCBVcmkgZW5jbG9zaW5nTGlicmFyeVVyaTsKCiAgLy8vIFdoZXRoZXIgdGhlIGltcG9ydCBpcyBhIGRlZmVycmVkIGltcG9ydC4KICBmaW5hbCBib29sIGlzRGVmZXJyZWQ7CgogIC8vLyBUaGUgdGFyZ2V0IGltcG9ydCBVUkkuCiAgZmluYWwgVXJpIHVyaTsKCiAgSW1wb3J0RW50aXR5KHRoaXMuaXNEZWZlcnJlZCwgdGhpcy5uYW1lLCB0aGlzLnVyaSwgdGhpcy5lbmNsb3NpbmdMaWJyYXJ5VXJpKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ2ltcG9ydCgkbmFtZToke2lzRGVmZXJyZWQgPyAnIGRlZmVycmVkJyA6ICcnfSknOwp9CgovLy8gU3RyaXBwZWQgZG93biBzdXBlciBpbnRlcmZhY2UgZm9yIGNsYXNzIGxpa2UgZW50aXRpZXMuCi8vLwovLy8gQ3VycmVudGx5IG9ubHkgW0NsYXNzRWxlbWVudF0gYnV0IGxhdGVyIGFsc28ga2VybmVsIGJhc2VkIERhcnQgY2xhc3NlcwovLy8gYW5kL29yIERhcnQtaW4tSlMgY2xhc3Nlcy4KYWJzdHJhY3QgY2xhc3MgQ2xhc3NFbnRpdHkgZXh0ZW5kcyBFbnRpdHkgewogIC8vLyBJZiB0aGlzIGlzIGEgbm9ybWFsIGNsYXNzLCB0aGUgZW5jbG9zaW5nIGxpYnJhcnkgZm9yIHRoaXMgY2xhc3MuIElmIHRoaXMKICAvLy8gaXMgYSBjbG9zdXJlIGNsYXNzLCB0aGUgZW5jbG9zaW5nIGNsYXNzIG9mIHRoZSBjbG9zdXJlIGZvciB3aGljaCBpdCB3YXMKICAvLy8gY3JlYXRlZC4KICBMaWJyYXJ5RW50aXR5IGdldCBsaWJyYXJ5OwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGEgc3ludGhlc2l6ZWQgY2xhc3MgZm9yIGEgY2xvc3VyaXplZCBtZXRob2Qgb3IgbG9jYWwKICAvLy8gZnVuY3Rpb24uCiAgYm9vbCBnZXQgaXNDbG9zdXJlOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGFuIGFic3RyYWN0IGNsYXNzLgogIGJvb2wgZ2V0IGlzQWJzdHJhY3Q7Cn0KCmFic3RyYWN0IGNsYXNzIFR5cGVkZWZFbnRpdHkgZXh0ZW5kcyBFbnRpdHkgewogIC8vLyBUaGUgbGlicmFyeSBpbiB3aGljaCB0aGUgdHlwZWRlZiB3YXMgZGVjbGFyZWQuCiAgTGlicmFyeUVudGl0eSBnZXQgbGlicmFyeTsKfQoKYWJzdHJhY3QgY2xhc3MgVHlwZVZhcmlhYmxlRW50aXR5IGV4dGVuZHMgRW50aXR5IHsKICAvLy8gVGhlIGNsYXNzIG9yIGdlbmVyaWMgbWV0aG9kIHRoYXQgZGVjbGFyZWQgdGhpcyB0eXBlIHZhcmlhYmxlLgogIEVudGl0eSBnZXQgdHlwZURlY2xhcmF0aW9uOwoKICAvLy8gVGhlIGluZGV4IG9mIHRoaXMgdHlwZSB2YXJpYWJsZSBpbiB0aGUgdHlwZSB2YXJpYWJsZXMgb2YgaXRzCiAgLy8vIFt0eXBlRGVjbGFyYXRpb25dLgogIGludCBnZXQgaW5kZXg7Cn0KCi8vLyBTdHJpcHBlZCBkb3duIHN1cGVyIGludGVyZmFjZSBmb3IgbWVtYmVyIGxpa2UgZW50aXRpZXMsIHRoYXQgaXMsCi8vLyBjb25zdHJ1Y3RvcnMsIG1ldGhvZHMsIGZpZWxkcyBldGMuCi8vLwovLy8gQ3VycmVudGx5IG9ubHkgW01lbWJlckVsZW1lbnRdIGJ1dCBsYXRlciBhbHNvIGtlcm5lbCBiYXNlZCBEYXJ0IG1lbWJlcnMKLy8vIGFuZC9vciBEYXJ0LWluLUpTIHByb3BlcnRpZXMuCmFic3RyYWN0IGNsYXNzIE1lbWJlckVudGl0eSBleHRlbmRzIEVudGl0eSB7CiAgLy8vIFRoZSBbTmFtZV0gb2YgbWVtYmVyIHdoaWNoIHRha2VzIHByaXZhY3kgYW5kIGdldHRlci9zZXR0ZXIgbmFtaW5nIGludG8KICAvLy8gYWNjb3VudC4KICBOYW1lIGdldCBtZW1iZXJOYW1lOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGEgbWVtYmVyIG9mIGEgbGlicmFyeS4KICBib29sIGdldCBpc1RvcExldmVsOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGEgc3RhdGljIG1lbWJlciBvZiBhIGNsYXNzLgogIGJvb2wgZ2V0IGlzU3RhdGljOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGFuIGluc3RhbmNlIG1lbWJlciBvZiBhIGNsYXNzLgogIGJvb2wgZ2V0IGlzSW5zdGFuY2VNZW1iZXI7CgogIC8vLyBXaGV0aGVyIHRoaXMgaXMgYSBjb25zdHJ1Y3Rvci4KICBib29sIGdldCBpc0NvbnN0cnVjdG9yOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGEgZmllbGQuCiAgYm9vbCBnZXQgaXNGaWVsZDsKCiAgLy8vIFdoZXRoZXIgdGhpcyBpcyBhIG5vcm1hbCBtZXRob2QgKG5laXRoZXIgY29uc3RydWN0b3IsIGdldHRlciBvciBzZXR0ZXIpCiAgLy8vIG9yIG9wZXJhdG9yIG1ldGhvZC4KICBib29sIGdldCBpc0Z1bmN0aW9uOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGEgZ2V0dGVyLgogIGJvb2wgZ2V0IGlzR2V0dGVyOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGEgc2V0dGVyLgogIGJvb2wgZ2V0IGlzU2V0dGVyOwoKICAvLy8gV2hldGhlciB0aGlzIG1lbWJlciBpcyBhc3NpZ25hYmxlLCBpLmUuIGEgbm9uLWZpbmFsLCBub24tY29uc3QgZmllbGQuCiAgYm9vbCBnZXQgaXNBc3NpZ25hYmxlOwoKICAvLy8gV2hldGhlciB0aGlzIG1lbWJlciBpcyBjb25zdGFudCwgaS5lLiBhIGNvbnN0YW50IGZpZWxkIG9yIGNvbnN0cnVjdG9yLgogIGJvb2wgZ2V0IGlzQ29uc3Q7CgogIC8vLyBXaGV0aGVyIHRoaXMgbWVtYmVyIGlzIGFic3RyYWN0LCBpLmUuIGFuIGFic3RyYWN0IG1ldGhvZCwgZ2V0dGVyIG9yCiAgLy8vIHNldHRlci4KICBib29sIGdldCBpc0Fic3RyYWN0OwoKICAvLy8gVGhlIGVuY2xvc2luZyBjbGFzcyBpZiB0aGlzIGlzIGEgY29uc3RydWN0b3IsIGluc3RhbmNlIG1lbWJlciBvcgogIC8vLyBzdGF0aWMgbWVtYmVyIG9mIGEgY2xhc3MuCiAgQ2xhc3NFbnRpdHkgZ2V0IGVuY2xvc2luZ0NsYXNzOwoKICAvLy8gVGhlIGVuY2xvc2luZyBsaWJyYXJ5IGlmIHRoaXMgaXMgYSBsaWJyYXJ5IG1lbWJlciwgb3RoZXJ3aXNlIHRoZQogIC8vLyBlbmNsb3NpbmcgbGlicmFyeSBvZiB0aGUgW2VuY2xvc2luZ0NsYXNzXS4KICBMaWJyYXJ5RW50aXR5IGdldCBsaWJyYXJ5Owp9CgovLy8gU3RyaXBwZWQgZG93biBzdXBlciBpbnRlcmZhY2UgZm9yIGZpZWxkIGxpa2UgZW50aXRpZXMuCi8vLwovLy8gQ3VycmVudGx5IG9ubHkgW0ZpZWxkRWxlbWVudF0gYnV0IGxhdGVyIGFsc28ga2VybmVsIGJhc2VkIERhcnQgZmllbGRzCi8vLyBhbmQvb3IgRGFydC1pbi1KUyBmaWVsZC1saWtlIHByb3BlcnRpZXMuCmFic3RyYWN0IGNsYXNzIEZpZWxkRW50aXR5IGV4dGVuZHMgTWVtYmVyRW50aXR5IHt9CgovLy8gU3RyaXBwZWQgZG93biBzdXBlciBpbnRlcmZhY2UgZm9yIGZ1bmN0aW9uIGxpa2UgZW50aXRpZXMuCi8vLwovLy8gQ3VycmVudGx5IG9ubHkgW01ldGhvZEVsZW1lbnRdIGJ1dCBsYXRlciBhbHNvIGtlcm5lbCBiYXNlZCBEYXJ0IGNvbnN0cnVjdG9ycwovLy8gYW5kIG1ldGhvZHMgYW5kL29yIERhcnQtaW4tSlMgZnVuY3Rpb24tbGlrZSBwcm9wZXJ0aWVzLgphYnN0cmFjdCBjbGFzcyBGdW5jdGlvbkVudGl0eSBleHRlbmRzIE1lbWJlckVudGl0eSB7CiAgLy8vIFdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyBleHRlcm5hbCwgaS5lLiB0aGUgYm9keSBpcyBub3QgZGVmaW5lZCBpbiB0ZXJtcwogIC8vLyBvZiBEYXJ0IGNvZGUuCiAgYm9vbCBnZXQgaXNFeHRlcm5hbDsKCiAgLy8vIFRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGZ1bmN0aW9uIHBhcmFtZXRlcnMuCiAgUGFyYW1ldGVyU3RydWN0dXJlIGdldCBwYXJhbWV0ZXJTdHJ1Y3R1cmU7CgogIC8vLyBUaGUgc3luY2hyb25vdXMvYXN5bmNocm9ub3VzIG1hcmtlciBvbiB0aGlzIGZ1bmN0aW9uLgogIEFzeW5jTWFya2VyIGdldCBhc3luY01hcmtlcjsKfQoKLy8vIEVudW0gZm9yIHRoZSBzeW5jaHJvbm91cy9hc3luY2hyb25vdXMgZnVuY3Rpb24gYm9keSBtb2RpZmllcnMuCmNsYXNzIEFzeW5jTWFya2VyIHsKICAvLy8gVGhlIGRlZmF1bHQgZnVuY3Rpb24gYm9keSBtYXJrZXIuCiAgc3RhdGljIGNvbnN0IEFzeW5jTWFya2VyIFNZTkMgPSBjb25zdCBBc3luY01hcmtlci5fKEFzeW5jTW9kaWZpZXIuU3luYyk7CgogIC8vLyBUaGUgYHN5bmMqYCBmdW5jdGlvbiBib2R5IG1hcmtlci4KICBzdGF0aWMgY29uc3QgQXN5bmNNYXJrZXIgU1lOQ19TVEFSID0KICAgICAgY29uc3QgQXN5bmNNYXJrZXIuXyhBc3luY01vZGlmaWVyLlN5bmNTdGFyLCBpc1lpZWxkaW5nOiB0cnVlKTsKCiAgLy8vIFRoZSBgYXN5bmNgIGZ1bmN0aW9uIGJvZHkgbWFya2VyLgogIHN0YXRpYyBjb25zdCBBc3luY01hcmtlciBBU1lOQyA9CiAgICAgIGNvbnN0IEFzeW5jTWFya2VyLl8oQXN5bmNNb2RpZmllci5Bc3luYywgaXNBc3luYzogdHJ1ZSk7CgogIC8vLyBUaGUgYGFzeW5jKmAgZnVuY3Rpb24gYm9keSBtYXJrZXIuCiAgc3RhdGljIGNvbnN0IEFzeW5jTWFya2VyIEFTWU5DX1NUQVIgPSBjb25zdCBBc3luY01hcmtlci5fKAogICAgICBBc3luY01vZGlmaWVyLkFzeW5jU3RhciwKICAgICAgaXNBc3luYzogdHJ1ZSwKICAgICAgaXNZaWVsZGluZzogdHJ1ZSk7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyBtYXJrZXIgZGVmaW5lcyB0aGUgZnVuY3Rpb24gYm9keSB0byBoYXZlIGFuCiAgLy8vIGFzeW5jaHJvbm91cyByZXN1bHQsIHRoYXQgaXMsIGVpdGhlciBhIFtGdXR1cmVdIG9yIGEgW1N0cmVhbV0uCiAgZmluYWwgYm9vbCBpc0FzeW5jOwoKICAvLy8gSXMgYHRydWVgIGlmIHRoaXMgbWFya2VyIGRlZmluZXMgdGhlIGZ1bmN0aW9uIGJvZHkgdG8gaGF2ZSBhIHBsdXJhbAogIC8vLyByZXN1bHQsIHRoYXQgaXMsIGVpdGhlciBhbiBbSXRlcmFibGVdIG9yIGEgW1N0cmVhbV0uCiAgZmluYWwgYm9vbCBpc1lpZWxkaW5nOwoKICBmaW5hbCBBc3luY01vZGlmaWVyIGFzeW5jUGFyc2VyU3RhdGU7CgogIGNvbnN0IEFzeW5jTWFya2VyLl8odGhpcy5hc3luY1BhcnNlclN0YXRlLAogICAgICB7dGhpcy5pc0FzeW5jOiBmYWxzZSwgdGhpcy5pc1lpZWxkaW5nOiBmYWxzZX0pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJyR7aXNBc3luYyA/ICdhc3luYycgOiAnc3luYyd9JHtpc1lpZWxkaW5nID8gJyonIDogJyd9JzsKICB9CgogIC8vLyBDYW5vbmljYWwgbGlzdCBvZiBtYXJrZXIgdmFsdWVzLgogIC8vLwogIC8vLyBBZGRlZCB0byBtYWtlIFtBc3luY01hcmtlcl0gZW51bS1saWtlLgogIHN0YXRpYyBjb25zdCBMaXN0PEFzeW5jTWFya2VyPiB2YWx1ZXMgPSBjb25zdCA8QXN5bmNNYXJrZXI+WwogICAgU1lOQywKICAgIFNZTkNfU1RBUiwKICAgIEFTWU5DLAogICAgQVNZTkNfU1RBUgogIF07CgogIC8vLyBJbmRleCB0byB0aGlzIG1hcmtlciB3aXRoaW4gW3ZhbHVlc10uCiAgLy8vCiAgLy8vIEFkZGVkIHRvIG1ha2UgW0FzeW5jTWFya2VyXSBlbnVtLWxpa2UuCiAgaW50IGdldCBpbmRleCA9PiB2YWx1ZXMuaW5kZXhPZih0aGlzKTsKfQoKLy8vIFN0cmlwcGVkIGRvd24gc3VwZXIgaW50ZXJmYWNlIGZvciBjb25zdHJ1Y3RvciBsaWtlIGVudGl0aWVzLgovLy8KLy8vIEN1cnJlbnRseSBvbmx5IFtDb25zdHJ1Y3RvckVsZW1lbnRdIGJ1dCBsYXRlciBhbHNvIGtlcm5lbCBiYXNlZCBEYXJ0Ci8vLyBjb25zdHJ1Y3RvcnMgYW5kL29yIERhcnQtaW4tSlMgY29uc3RydWN0b3ItbGlrZSBwcm9wZXJ0aWVzLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgZmFjdG9yeSBjb25zdHJ1Y3RvcnMgZnJvbSB0aGUgc2V0IG9mCi8vIGNvbnN0cnVjdG9ycy4KYWJzdHJhY3QgY2xhc3MgQ29uc3RydWN0b3JFbnRpdHkgZXh0ZW5kcyBGdW5jdGlvbkVudGl0eSB7CiAgLy8vIFdoZXRoZXIgdGhpcyBpcyBhIGdlbmVyYXRpdmUgY29uc3RydWN0b3IsIHBvc3NpYmx5IHJlZGlyZWN0aW5nLgogIGJvb2wgZ2V0IGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yOwoKICAvLy8gV2hldGhlciB0aGlzIGlzIGEgZmFjdG9yeSBjb25zdHJ1Y3RvciwgcG9zc2libHkgcmVkaXJlY3RpbmcuCiAgYm9vbCBnZXQgaXNGYWN0b3J5Q29uc3RydWN0b3I7CgogIC8vLyBXaGV0aGVyIHRoaXMgaXMgYSBgZnJvbUVudmlyb25tZW50YCBjb25zdCBjb25zdHJ1Y3RvciBpbiBgaW50YCwgYGJvb2xgIG9yCiAgLy8vIGBTdHJpbmdgLgogIGJvb2wgZ2V0IGlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3I7Cn0KCi8vLyBUaGUgY29uc3RydWN0b3IgYm9keSBmb3IgYSBbQ29uc3RydWN0b3JFbnRpdHldLgovLy8KLy8vIFRoaXMgaXMgdXNlZCBvbmx5IGluIHRoZSBiYWNrZW5kIHRvIHNwbGl0IGVuY29kaW5nIG9mIGEgRGFydCBjb25zdHJ1Y3RvcgovLy8gaW50byB0d28gSmF2YVNjcmlwdCBmdW5jdGlvbnM7IHRoZSBjb25zdHJ1Y3RvciBhbmQgdGhlIGNvbnN0cnVjdG9yIGJvZHkuCi8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gbW9kZWx4IGlzIHJlbW92ZWQuIENvbnN0cnVjdG9yIGJvZGllcwovLyBzaG91bGQgdGhlbiBiZSBjcmVhdGVkIGRpcmVjdGx5IHdpdGggdGhlIEotbW9kZWwuCmFic3RyYWN0IGNsYXNzIENvbnN0cnVjdG9yQm9keUVudGl0eSBleHRlbmRzIEZ1bmN0aW9uRW50aXR5IHsKICAvLy8gVGhlIGNvbnN0cnVjdG9yIGZvciB3aGljaCB0aGlzIGNvbnN0cnVjdG9yIGJvZHkgd2FzIGNyZWF0ZWQuCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IGNvbnN0cnVjdG9yOwp9CgovLy8gQW4gZW50aXR5IHRoYXQgZGVmaW5lcyBhIGxvY2FsIGVudGl0eSAobWVtb3J5IHNsb3QpIGluIGdlbmVyYXRlZCBjb2RlLgovLy8KLy8vIFBhcmFtZXRlcnMsIGxvY2FsIHZhcmlhYmxlcyBhbmQgbG9jYWwgZnVuY3Rpb25zIChjYW4pIGRlZmluZSBsb2NhbCBlbnRpdHkKLy8vIGFuZCB0aHVzIGltcGxlbWVudCBbTG9jYWxdIHRocm91Z2ggW0xvY2FsRWxlbWVudF0uIEZvciBub24tZWxlbWVudCBsb2NhbHMsCi8vLyBsaWtlIGB0aGlzYCBhbmQgYm94ZXMsIHNwZWNpYWxpemVkIFtMb2NhbF0gY2xhc3NlcyBhcmUgY3JlYXRlZC4KLy8vCi8vLyBUeXBlIHZhcmlhYmxlcyBjYW4gaW50cm9kdWNlIGxvY2FscyBpbiBmYWN0b3JpZXMgYW5kIGNvbnN0cnVjdG9ycwovLy8gYnV0IHNpbmNlIG9uZSB0eXBlIHZhcmlhYmxlIGNhbiBpbnRyb2R1Y2UgZGlmZmVyZW50IGxvY2FscyBpbiBkaWZmZXJlbnQKLy8vIGZhY3RvcmllcyBhbmQgY29uc3RydWN0b3JzIGl0IGlzIG5vdCBpdHNlbGYgYSBbTG9jYWxdIGJ1dCBpbnN0ZWFkCi8vLyBhIG5vbi1lbGVtZW50IFtMb2NhbF0gaXMgY3JlYXRlZCB0aHJvdWdoIGEgc3BlY2lhbGl6ZWQgY2xhc3MuCmFic3RyYWN0IGNsYXNzIExvY2FsIGV4dGVuZHMgRW50aXR5IHt9CgovLy8gVGhlIHN0cnVjdHVyZSBvZiBmdW5jdGlvbiBwYXJhbWV0ZXJzLgpjbGFzcyBQYXJhbWV0ZXJTdHJ1Y3R1cmUgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbUGFyYW1ldGVyU3RydWN0dXJlXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3BhcmFtZXRlci1zdHJ1Y3R1cmUnOwoKICAvLy8gVGhlIG51bWJlciBvZiByZXF1aXJlZCAocG9zaXRpb25hbCkgcGFyYW1ldGVycy4KICBmaW5hbCBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJzOwoKICAvLy8gVGhlIG51bWJlciBvZiBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAgZmluYWwgaW50IHBvc2l0aW9uYWxQYXJhbWV0ZXJzOwoKICAvLy8gVGhlIG5hbWVkIHBhcmFtZXRlcnMgc29ydGVkIGFscGhhYmV0aWNhbGx5LgogIGZpbmFsIExpc3Q8U3RyaW5nPiBuYW1lZFBhcmFtZXRlcnM7CgogIC8vLyBUaGUgbnVtYmVyIG9mIHR5cGUgcGFyYW1ldGVycy4KICBmaW5hbCBpbnQgdHlwZVBhcmFtZXRlcnM7CgogIGNvbnN0IFBhcmFtZXRlclN0cnVjdHVyZSh0aGlzLnJlcXVpcmVkUGFyYW1ldGVycywgdGhpcy5wb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgdGhpcy5uYW1lZFBhcmFtZXRlcnMsIHRoaXMudHlwZVBhcmFtZXRlcnMpOwoKICBjb25zdCBQYXJhbWV0ZXJTdHJ1Y3R1cmUuZ2V0dGVyKCkgOiB0aGlzKDAsIDAsIGNvbnN0IDxTdHJpbmc+W10sIDApOwoKICBjb25zdCBQYXJhbWV0ZXJTdHJ1Y3R1cmUuc2V0dGVyKCkgOiB0aGlzKDEsIDEsIGNvbnN0IDxTdHJpbmc+W10sIDApOwoKICBmYWN0b3J5IFBhcmFtZXRlclN0cnVjdHVyZS5mcm9tVHlwZShGdW5jdGlvblR5cGUgdHlwZSkgewogICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJTdHJ1Y3R1cmUoCiAgICAgICAgdHlwZS5wYXJhbWV0ZXJUeXBlcy5sZW5ndGgsCiAgICAgICAgdHlwZS5wYXJhbWV0ZXJUeXBlcy5sZW5ndGggKyB0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMubGVuZ3RoLAogICAgICAgIHR5cGUubmFtZWRQYXJhbWV0ZXJzLAogICAgICAgIHR5cGUudHlwZVZhcmlhYmxlcy5sZW5ndGgpOwogIH0KCiAgLy8vIERlc2VyaWFsaXplcyBhIFtQYXJhbWV0ZXJTdHJ1Y3R1cmVdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgUGFyYW1ldGVyU3RydWN0dXJlLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJzID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGludCBwb3NpdGlvbmFsUGFyYW1ldGVycyA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBMaXN0PFN0cmluZz4gbmFtZWRQYXJhbWV0ZXJzID0gc291cmNlLnJlYWRTdHJpbmdzKCk7CiAgICBpbnQgdHlwZVBhcmFtZXRlcnMgPSBzb3VyY2UucmVhZEludCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJTdHJ1Y3R1cmUocmVxdWlyZWRQYXJhbWV0ZXJzLCBwb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgICBuYW1lZFBhcmFtZXRlcnMsIHR5cGVQYXJhbWV0ZXJzKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW1BhcmFtZXRlclN0cnVjdHVyZV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVJbnQocmVxdWlyZWRQYXJhbWV0ZXJzKTsKICAgIHNpbmsud3JpdGVJbnQocG9zaXRpb25hbFBhcmFtZXRlcnMpOwogICAgc2luay53cml0ZVN0cmluZ3MobmFtZWRQYXJhbWV0ZXJzKTsKICAgIHNpbmsud3JpdGVJbnQodHlwZVBhcmFtZXRlcnMpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIC8vLyBUaGUgbnVtYmVyIG9mIG9wdGlvbmFsIHBhcmFtZXRlcnMgKHBvc2l0aW9uYWwgb3IgbmFtZWQpLgogIGludCBnZXQgb3B0aW9uYWxQYXJhbWV0ZXJzID0+CiAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzIC0gcmVxdWlyZWRQYXJhbWV0ZXJzICsgbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsKCiAgLy8vIFRoZSB0b3RhbCBudW1iZXIgb2YgcGFyYW1ldGVycyAocmVxdWlyZWQgb3Igb3B0aW9uYWwpLgogIGludCBnZXQgdG90YWxQYXJhbWV0ZXJzID0+IHBvc2l0aW9uYWxQYXJhbWV0ZXJzICsgbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsKCiAgLy8vIFJldHVybnMgdGhlIFtDYWxsU3RydWN0dXJlXSBjb3JyZXNwb25kaW5nIHRvIGEgY2FsbCBzaXRlIHBhc3NpbmcgYWxsCiAgLy8vIHBhcmFtZXRlcnMgYm90aCByZXF1aXJlZCBhbmQgb3B0aW9uYWwuCiAgQ2FsbFN0cnVjdHVyZSBnZXQgY2FsbFN0cnVjdHVyZSB7CiAgICByZXR1cm4gbmV3IENhbGxTdHJ1Y3R1cmUocG9zaXRpb25hbFBhcmFtZXRlcnMgKyBuYW1lZFBhcmFtZXRlcnMubGVuZ3RoLAogICAgICAgIG5hbWVkUGFyYW1ldGVycywgdHlwZVBhcmFtZXRlcnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBIYXNoaW5nLmxpc3RIYXNoKAogICAgICBuYW1lZFBhcmFtZXRlcnMsCiAgICAgIEhhc2hpbmcub2JqZWN0SGFzaCgKICAgICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgICAgSGFzaGluZy5vYmplY3RIYXNoKAogICAgICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVycywgSGFzaGluZy5vYmplY3RIYXNoKHR5cGVQYXJhbWV0ZXJzKSkpKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBQYXJhbWV0ZXJTdHJ1Y3R1cmUpIHJldHVybiBmYWxzZTsKICAgIGlmIChyZXF1aXJlZFBhcmFtZXRlcnMgIT0gb3RoZXIucmVxdWlyZWRQYXJhbWV0ZXJzIHx8CiAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnMgIT0gb3RoZXIucG9zaXRpb25hbFBhcmFtZXRlcnMgfHwKICAgICAgICB0eXBlUGFyYW1ldGVycyAhPSBvdGhlci50eXBlUGFyYW1ldGVycyB8fAogICAgICAgIG5hbWVkUGFyYW1ldGVycy5sZW5ndGggIT0gb3RoZXIubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWVkUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICBpZiAobmFtZWRQYXJhbWV0ZXJzW2ldICE9IG90aGVyLm5hbWVkUGFyYW1ldGVyc1tpXSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLy8gU2hvcnQgdGV4dHVhbCByZXByZXNlbnRhdGlvbiB1c2UgZm9yIHRlc3RpbmcuCiAgU3RyaW5nIGdldCBzaG9ydFRleHQgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgaWYgKHR5cGVQYXJhbWV0ZXJzICE9IDApIHsKICAgICAgc2Iud3JpdGUoJzwnKTsKICAgICAgc2Iud3JpdGUodHlwZVBhcmFtZXRlcnMpOwogICAgICBzYi53cml0ZSgnPicpOwogICAgfQogICAgc2Iud3JpdGUoJygnKTsKICAgIHNiLndyaXRlKHBvc2l0aW9uYWxQYXJhbWV0ZXJzKTsKICAgIGlmIChuYW1lZFBhcmFtZXRlcnMubGVuZ3RoID4gMCkgewogICAgICBzYi53cml0ZSgnLCcpOwogICAgICBzYi53cml0ZShuYW1lZFBhcmFtZXRlcnMuam9pbignLCcpKTsKICAgIH0KICAgIHNiLndyaXRlKCcpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdQYXJhbWV0ZXJTdHJ1Y3R1cmUoJyk7CiAgICBzYi53cml0ZSgncmVxdWlyZWRQYXJhbWV0ZXJzPSRyZXF1aXJlZFBhcmFtZXRlcnMsJyk7CiAgICBzYi53cml0ZSgncG9zaXRpb25hbFBhcmFtZXRlcnM9JHBvc2l0aW9uYWxQYXJhbWV0ZXJzLCcpOwogICAgc2Iud3JpdGUoJ25hbWVkUGFyYW1ldGVycz17JHtuYW1lZFBhcmFtZXRlcnMuam9pbignLCcpfX0sJyk7CiAgICBzYi53cml0ZSgndHlwZVBhcmFtZXRlcnM9JHR5cGVQYXJhbWV0ZXJzKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBpbnQgZ2V0IHNpemUgPT4KICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnMgKyB0eXBlUGFyYW1ldGVycyArIG5hbWVkUGFyYW1ldGVycy5sZW5ndGg7Cn0KgYYATk48ARIBTQEZLj0cFRUBJQRJSgRQS082LRMCAT0ETR8uPRgCATcEQBUVAUAmIQEvGQEdEQFQAQxJAgE7BEsfLE9ODx0BSxAWASkXAgEuNR0CATNEHgFDGRECAUUnBEwiLU0PFwEtFwEyFQE1HQElGgEfFAFOGhcBIBUBIBUBTBkBTRQBSg4XAUcgIgFHMR0CATsESi0zAT4EUTw1TxQXATAtATwfAgFDFChLASgnRQEoIz8BKT0fFRkBREUWAUo7GQEoAS02AQwWRAQBJwYtPwoPCw8FASwGLSkCAUEESUBEETpGJAFDIQFQECkCATQETU1PNT5DJQIBSwROT0QERkxGQicBKhtMHTMBNiABKyIBMiYBJRwBTzIBRwFHATsjJEkeJAQBQEUXLzE5KxVMKgQBNigVJykoIxMEAT8gSgE9TAFLLSRMKgQBDCgXGiAeSQEMHC00Oj4yQhQGNzwWCAYRBAE0GSofFSAVBhMkJhUrBhMaBAEMFiolOT1BMRoEARJGAgErcGFja2FnZTpjb21waWxlci9zcmMvZWxlbWVudHMvZW50aXRpZXMuZGFydCpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9lbnF1ZXVlLmRhcnTAAEh4Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5lbnF1ZXVlOwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgUXVldWU7CgppbXBvcnQgJ2NvbW1vbi9jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJ2NvbW1vbi90YXNrcy5kYXJ0JyBzaG93IENvbXBpbGVyVGFzazsKaW1wb3J0ICdjb21tb24vd29yay5kYXJ0JyBzaG93IFdvcmtJdGVtOwppbXBvcnQgJ2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICdjb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICdjb21waWxlci5kYXJ0JyBzaG93IENvbXBpbGVyOwppbXBvcnQgJ2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJ2luZmVycmVyL3R5cGVzLmRhcnQnOwppbXBvcnQgJ2pzX2JhY2tlbmQvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnanNfYmFja2VuZC9iYWNrZW5kLmRhcnQnIHNob3cgQ29kZWdlbklucHV0czsKaW1wb3J0ICdqc19iYWNrZW5kL2VucXVldWVyLmRhcnQnOwppbXBvcnQgJ3VuaXZlcnNlL21lbWJlcl91c2FnZS5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS9yZXNvbHV0aW9uX3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAndW5pdmVyc2Uvd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS91c2UuZGFydCcKICAgIHNob3cKICAgICAgICBDb25zdGFudFVzZSwKICAgICAgICBEeW5hbWljVXNlLAogICAgICAgIFN0YXRpY1VzZSwKICAgICAgICBTdGF0aWNVc2VLaW5kLAogICAgICAgIFR5cGVVc2UsCiAgICAgICAgVHlwZVVzZUtpbmQ7CmltcG9ydCAndW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IEltcGFjdFN0cmF0ZWd5LCBJbXBhY3RVc2VDYXNlLCBXb3JsZEltcGFjdCwgV29ybGRJbXBhY3RWaXNpdG9yOwppbXBvcnQgJ3V0aWwvZW51bXNldC5kYXJ0JzsKaW1wb3J0ICd1dGlsL3V0aWwuZGFydCcgc2hvdyBTZXRsZXQ7CmltcG9ydCAnd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CgpjbGFzcyBFbnF1ZXVlVGFzayBleHRlbmRzIENvbXBpbGVyVGFzayB7CiAgUmVzb2x1dGlvbkVucXVldWVyIF9yZXNvbHV0aW9uOwogIENvZGVnZW5FbnF1ZXVlciBjb2RlZ2VuRW5xdWV1ZXJGb3JUZXN0aW5nOwogIGZpbmFsIENvbXBpbGVyIGNvbXBpbGVyOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ0VucXVldWUnOwoKICBFbnF1ZXVlVGFzayhDb21waWxlciBjb21waWxlcikKICAgICAgOiB0aGlzLmNvbXBpbGVyID0gY29tcGlsZXIsCiAgICAgICAgc3VwZXIoY29tcGlsZXIubWVhc3VyZXIpOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhlIG5lZWQgZm9yIHRoaXMuCiAgYm9vbCBnZXQgaGFzUmVzb2x1dGlvbiA9PiBfcmVzb2x1dGlvbiAhPSBudWxsOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhlIG5lZWQgZm9yIHRoaXMuCiAgUmVzb2x1dGlvbkVucXVldWVyIGdldCByZXNvbHV0aW9uIHsKICAgIGFzc2VydCgKICAgICAgICBfcmVzb2x1dGlvbiAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgIlJlc29sdXRpb25FbnF1ZXVlciBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXQuIikpOwogICAgcmV0dXJuIF9yZXNvbHV0aW9uOwogIH0KCiAgUmVzb2x1dGlvbkVucXVldWVyIGNyZWF0ZVJlc29sdXRpb25FbnF1ZXVlcigpIHsKICAgIHJldHVybiBfcmVzb2x1dGlvbiA/Pz0gY29tcGlsZXIuZnJvbnRlbmRTdHJhdGVneQogICAgICAgIC5jcmVhdGVSZXNvbHV0aW9uRW5xdWV1ZXIodGhpcywgY29tcGlsZXIpCiAgICAgICAgICAuLm9uRW1wdHlGb3JUZXN0aW5nID0gY29tcGlsZXIub25SZXNvbHV0aW9uUXVldWVFbXB0eUZvclRlc3Rpbmc7CiAgfQoKICBFbnF1ZXVlciBjcmVhdGVDb2RlZ2VuRW5xdWV1ZXIoCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuSW5wdXRzLAogICAgICBDb2RlZ2VuUmVzdWx0cyBjb2RlZ2VuUmVzdWx0cykgewogICAgRW5xdWV1ZXIgZW5xdWV1ZXIgPSBjb21waWxlci5iYWNrZW5kU3RyYXRlZ3kuY3JlYXRlQ29kZWdlbkVucXVldWVyKHRoaXMsCiAgICAgICAgY2xvc2VkV29ybGQsIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsIGNvZGVnZW5JbnB1dHMsIGNvZGVnZW5SZXN1bHRzKQogICAgICAuLm9uRW1wdHlGb3JUZXN0aW5nID0gY29tcGlsZXIub25Db2RlZ2VuUXVldWVFbXB0eUZvclRlc3Rpbmc7CiAgICBpZiAocmV0YWluRGF0YUZvclRlc3RpbmcpIHsKICAgICAgY29kZWdlbkVucXVldWVyRm9yVGVzdGluZyA9IGVucXVldWVyOwogICAgfQogICAgcmV0dXJuIGVucXVldWVyOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgRW5xdWV1ZXIgewogIC8vLyBJZiBgdHJ1ZWAgdGhlIGNoZWNraW5nIGZvciB1bmVucXVldWVkIG1lbWJlcnMgaXMgc2tpcHBlZC4gVGhlIGN1cnJlbnQKICAvLy8gaW1wbGVtZW50YXRpb24gcmVnaXN0ZXJzIHBhcmFtZXRlciB1c2FnZXMgYXMgYSBzaWRlLWVmZmVjdCBzbyB1bml0CiAgLy8vIHRlc3Rpbmcgb2YgbWVtYmVyIHVzYWdlIHdlIG5lZWQgdG8gdGVzdCBib3RoIHdpdGggYW5kIHdpdGhvdXQgdGhlCiAgLy8vIGVucXVldWVyIGNoZWNrLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFtjaGVja0VucXVldWVyQ29uc2lzdGVuY3ldIHNob3VsZCBub3QgaGF2ZQogIC8vIHNpZGUtZWZmZWN0cy4KICBzdGF0aWMgYm9vbCBza2lwRW5xdWV1ZXJDaGVja0ZvclRlc3RpbmcgPSBmYWxzZTsKCiAgV29ybGRCdWlsZGVyIGdldCB3b3JsZEJ1aWxkZXI7CgogIHZvaWQgb3BlbihJbXBhY3RTdHJhdGVneSBpbXBhY3RTdHJhdGVneSwgRnVuY3Rpb25FbnRpdHkgbWFpbk1ldGhvZCwKICAgICAgSXRlcmFibGU8VXJpPiBsaWJyYXJpZXMpOwogIHZvaWQgY2xvc2UoKTsKCiAgLy8vIFJldHVybnMgWzp0cnVlOl0gaWYgdGhpcyBlbnF1ZXVlciBpcyB0aGUgcmVzb2x1dGlvbiBlbnF1ZXVlci4KICBib29sIGdldCBpc1Jlc29sdXRpb25RdWV1ZTsKCiAgYm9vbCBxdWV1ZUlzQ2xvc2VkOwoKICBib29sIGdldCBxdWV1ZUlzRW1wdHk7CgogIEltcGFjdFVzZUNhc2UgZ2V0IGltcGFjdFVzZTsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihXb3JrSXRlbSB3b3JrKSk7CgogIC8vLyBBcHBseSB0aGUgW3dvcmxkSW1wYWN0XSB0byB0aGlzIGVucXVldWVyLiBJZiB0aGUgW2ltcGFjdFNvdXJjZV0gaXMKICAvLy8gcHJvdmlkZWQgdGhlIGltcGFjdCBzdHJhdGVneSB3aWxsIHJlbW92ZSBpdCBmcm9tIHRoZSBlbGVtZW50IGltcGFjdCBjYWNoZSwKICAvLy8gaWYgaXQgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KICB2b2lkIGFwcGx5SW1wYWN0KFdvcmxkSW1wYWN0IHdvcmxkSW1wYWN0LCB7dmFyIGltcGFjdFNvdXJjZX0pOwogIGJvb2wgY2hlY2tOb0VucXVldWVkSW52b2tlZEluc3RhbmNlTWV0aG9kcygKICAgICAgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCk7CgogIC8vLyBDaGVjayB0aGUgZW5xdWV1ZXIgcXVldWUgaXMgZW1wdHkgb3IgZmFpbCBvdGhlcndpc2UuCiAgdm9pZCBjaGVja1F1ZXVlSXNFbXB0eSgpOwogIHZvaWQgbG9nU3VtbWFyeSh2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSkpOwoKICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGdldCBwcm9jZXNzZWRFbnRpdGllczsKCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBwcm9jZXNzZWRDbGFzc2VzOwp9CgphYnN0cmFjdCBjbGFzcyBFbnF1ZXVlckxpc3RlbmVyIHsKICAvLy8gQ2FsbGVkIHRvIGluc3RydWN0IHRvIHRoZSBiYWNrZW5kIHRoYXQgW3R5cGVdIGhhcyBiZWVuIGluc3RhbnRpYXRlZC4KICB2b2lkIHJlZ2lzdGVySW5zdGFudGlhdGVkVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUsCiAgICAgIHtib29sIGlzR2xvYmFsOiBmYWxzZSwgYm9vbCBuYXRpdmVVc2FnZTogZmFsc2V9KTsKCiAgLy8vIENhbGxlZCB0byBub3RpZnkgdG8gdGhlIGJhY2tlbmQgdGhhdCBhIGNsYXNzIGlzIGJlaW5nIGluc3RhbnRpYXRlZC4gQW55CiAgLy8vIGJhY2tlbmQgc3BlY2lmaWMgW1dvcmxkSW1wYWN0XSBvZiB0aGlzIGlzIHJldHVybmVkLgogIFdvcmxkSW1wYWN0IHJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIENhbGxlZCB0byBub3RpZnkgdG8gdGhlIGJhY2tlbmQgdGhhdCBhIGNsYXNzIGlzIGltcGxlbWVudGVkIGJ5IGFuCiAgLy8vIGluc3RhbnRpYXRlZCBjbGFzcy4gQW55IGJhY2tlbmQgc3BlY2lmaWMgW1dvcmxkSW1wYWN0XSBvZiB0aGlzIGlzCiAgLy8vIHJldHVybmVkLgogIFdvcmxkSW1wYWN0IHJlZ2lzdGVySW1wbGVtZW50ZWRDbGFzcyhDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gQ2FsbGVkIHRvIHJlZ2lzdGVyIHRoYXQgYSBzdGF0aWMgZnVuY3Rpb24gaGFzIGJlZW4gY2xvc3VyaXplZC4gQW55IGJhY2tlbmQKICAvLy8gc3BlY2lmaWMgW1dvcmxkSW1wYWN0XSBvZiB0aGlzIGlzIHJldHVybmVkLgogIFdvcmxkSW1wYWN0IHJlZ2lzdGVyR2V0T2ZTdGF0aWNGdW5jdGlvbigpOwoKICAvLy8gQ2FsbGVkIHRvIHJlZ2lzdGVyIHRoYXQgW2Z1bmN0aW9uXSBoYXMgYmVlbiBjbG9zdXJpemVkLiBBbnkgYmFja2VuZAogIC8vLyBzcGVjaWZpYyBbV29ybGRJbXBhY3RdIG9mIHRoaXMgaXMgcmV0dXJuZWQuCiAgV29ybGRJbXBhY3QgcmVnaXN0ZXJDbG9zdXJpemVkTWVtYmVyKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKTsKCiAgLy8vIENhbGxlZCB0byByZWdpc3RlciB0aGF0IFtlbGVtZW50XSBpcyBzdGF0aWNhbGx5IGtub3duIHRvIGJlIHVzZWQuIEFueQogIC8vLyBiYWNrZW5kIHNwZWNpZmljIFtXb3JsZEltcGFjdF0gb2YgdGhpcyBpcyByZXR1cm5lZC4KICBXb3JsZEltcGFjdCByZWdpc3RlclVzZWRFbGVtZW50KE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gQ2FsbGVkIHRvIHJlZ2lzdGVyIHRoYXQgW3ZhbHVlXSBpcyBzdGF0aWNhbGx5IGtub3duIHRvIGJlIHVzZWQuIEFueQogIC8vLyBiYWNrZW5kIHNwZWNpZmljIFtXb3JsZEltcGFjdF0gb2YgdGhpcyBpcyByZXR1cm5lZC4KICBXb3JsZEltcGFjdCByZWdpc3RlclVzZWRDb25zdGFudChDb25zdGFudFZhbHVlIHZhbHVlKTsKCiAgdm9pZCBvblF1ZXVlT3BlbigKICAgICAgRW5xdWV1ZXIgZW5xdWV1ZXIsIEZ1bmN0aW9uRW50aXR5IG1haW5NZXRob2QsIEl0ZXJhYmxlPFVyaT4gbGlicmFyaWVzKTsKCiAgLy8vIENhbGxlZCB3aGVuIFtlbnF1ZXVlcl0ncyBxdWV1ZSBpcyBlbXB0eSwgYnV0IGJlZm9yZSBpdCBpcyBjbG9zZWQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCwgZm9yIGV4YW1wbGUsIGJ5IHRoZSBKUyBiYWNrZW5kIHRvIGVucXVldWUgYWRkaXRpb25hbAogIC8vLyBlbGVtZW50cyBuZWVkZWQgZm9yIHJlZmxlY3Rpb24uIFtyZWNlbnRDbGFzc2VzXSBpcyBhIGNvbGxlY3Rpb24gb2YKICAvLy8gYWxsIGNsYXNzZXMgc2VlbiBmb3IgdGhlIGZpcnN0IHRpbWUgYnkgdGhlIFtlbnF1ZXVlcl0gc2luY2UgdGhlIGxhc3QgY2FsbAogIC8vLyB0byBbb25RdWV1ZUVtcHR5XS4KICAvLy8KICAvLy8gQSByZXR1cm4gdmFsdWUgb2YgYHRydWVgIGluZGljYXRlcyB0aGF0IFtyZWNlbnRDbGFzc2VzXSBoYXMgYmVlbgogIC8vLyBwcm9jZXNzZWQgYW5kIGl0cyBlbGVtZW50cyBkbyBub3QgbmVlZCB0byBiZSBzZWVuIGluIHRoZSBuZXh0IHJvdW5kLiBXaGVuCiAgLy8vIGBmYWxzZWAgaXMgcmV0dXJuZWQsIFtvblF1ZXVlRW1wdHldIHdpbGwgYmUgY2FsbGVkIGFnYWluIG9uY2UgdGhlCiAgLy8vIHJlc29sdXRpb24gcXVldWUgaGFzIGRyYWluZWQgYW5kIFtyZWNlbnRDbGFzc2VzXSB3aWxsIGJlIGEgc3VwZXJzZXQgb2YgdGhlCiAgLy8vIGN1cnJlbnQgdmFsdWUuCiAgLy8vCiAgLy8vIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGEgY2xhc3MgaXMgb25seSBwcmVzZW50IG9uY2UgaW4KICAvLy8gW3JlY2VudENsYXNzZXNdLCBidXQgZXZlcnkgY2xhc3Mgc2VlbiBieSB0aGUgW2VucXVldWVyXSB3aWxsIGJlIHByZXNlbnQgaW4KICAvLy8gW3JlY2VudENsYXNzZXNdIGF0IGxlYXN0IG9uY2UuCiAgYm9vbCBvblF1ZXVlRW1wdHkoRW5xdWV1ZXIgZW5xdWV1ZXIsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiByZWNlbnRDbGFzc2VzKTsKCiAgLy8vIENhbGxlZCB3aGVuIHRvIHRoZSBxdWV1ZSBoYXMgYmVlbiBjbG9zZWQuCiAgdm9pZCBvblF1ZXVlQ2xvc2VkKCk7CgogIC8vLyBDYWxsZWQgYWZ0ZXIgdGhlIHF1ZXVlIGhhcyBiZWVuIGVtcHRpZWQuCiAgdm9pZCBsb2dTdW1tYXJ5KHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlKSk7Cn0KCmFic3RyYWN0IGNsYXNzIEVucXVldWVySW1wbCBleHRlbmRzIEVucXVldWVyIHsKICBDb21waWxlclRhc2sgZ2V0IHRhc2s7CiAgdm9pZCBjaGVja0NsYXNzKENsYXNzRW50aXR5IGNscyk7CiAgdm9pZCBwcm9jZXNzU3RhdGljVXNlKE1lbWJlckVudGl0eSBtZW1iZXIsIFN0YXRpY1VzZSBzdGF0aWNVc2UpOwogIHZvaWQgcHJvY2Vzc1R5cGVVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgVHlwZVVzZSB0eXBlVXNlKTsKICB2b2lkIHByb2Nlc3NEeW5hbWljVXNlKER5bmFtaWNVc2UgZHluYW1pY1VzZSk7CiAgdm9pZCBwcm9jZXNzQ29uc3RhbnRVc2UoQ29uc3RhbnRVc2UgY29uc3RhbnRVc2UpOwogIEVucXVldWVyTGlzdGVuZXIgZ2V0IGxpc3RlbmVyOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbml0aWFsaXplIFtfaW1wYWN0U3RyYXRlZ3ldIHRvIGBudWxsYC4KICBJbXBhY3RTdHJhdGVneSBfaW1wYWN0U3RyYXRlZ3kgPSBjb25zdCBJbXBhY3RTdHJhdGVneSgpOwoKICBJbXBhY3RTdHJhdGVneSBnZXQgaW1wYWN0U3RyYXRlZ3kgPT4gX2ltcGFjdFN0cmF0ZWd5OwoKICBAb3ZlcnJpZGUKICB2b2lkIG9wZW4oSW1wYWN0U3RyYXRlZ3kgaW1wYWN0U3RyYXRlZ3ksIEZ1bmN0aW9uRW50aXR5IG1haW5NZXRob2QsCiAgICAgIEl0ZXJhYmxlPFVyaT4gbGlicmFyaWVzKSB7CiAgICBfaW1wYWN0U3RyYXRlZ3kgPSBpbXBhY3RTdHJhdGVneTsKICAgIGxpc3RlbmVyLm9uUXVldWVPcGVuKHRoaXMsIG1haW5NZXRob2QsIGxpYnJhcmllcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU2V0IFtfaW1wYWN0U3RyYXRlZ3ldIHRvIGBudWxsYCBhbmQgW3F1ZXVlSXNDbG9zZWRdCiAgICAvLyB0byBgdHJ1ZWAgaGVyZS4KICAgIF9pbXBhY3RTdHJhdGVneSA9IGNvbnN0IEltcGFjdFN0cmF0ZWd5KCk7CiAgICBsaXN0ZW5lci5vblF1ZXVlQ2xvc2VkKCk7CiAgfQoKICAvLy8gQ2hlY2sgZW5xdWV1ZXIgY29uc2lzdGVuY3kgYWZ0ZXIgdGhlIHF1ZXVlIGhhcyBiZWVuIGNsb3NlZC4KICBib29sIGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeShFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50KSB7CiAgICB0YXNrLm1lYXN1cmVTdWJ0YXNrKCdyZXNvbHV0aW9uLmNoZWNrJywgKCkgewogICAgICAvLyBSdW4gdGhyb3VnaCB0aGUgY2xhc3NlcyBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gZW5xdWV1ZSBtb3JlIG1ldGhvZHMuCiAgICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50CiAgICAgICAgICBpbiB3b3JsZEJ1aWxkZXIuZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzKSB7CiAgICAgICAgZm9yIChDbGFzc0VudGl0eSBjdXJyZW50Q2xhc3MgPSBjbGFzc0VsZW1lbnQ7CiAgICAgICAgICAgIGN1cnJlbnRDbGFzcyAhPSBudWxsOwogICAgICAgICAgICBjdXJyZW50Q2xhc3MgPSBlbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjdXJyZW50Q2xhc3MpKSB7CiAgICAgICAgICBjaGVja0NsYXNzKGN1cnJlbnRDbGFzcyk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKLy8vIFtFbnF1ZXVlcl0gd2hpY2ggaXMgc3BlY2lmaWMgdG8gcmVzb2x1dGlvbi4KY2xhc3MgUmVzb2x1dGlvbkVucXVldWVyIGV4dGVuZHMgRW5xdWV1ZXJJbXBsIHsKICBzdGF0aWMgY29uc3QgSW1wYWN0VXNlQ2FzZSBJTVBBQ1RfVVNFID0KICAgICAgY29uc3QgSW1wYWN0VXNlQ2FzZSgnUmVzb2x1dGlvbkVucXVldWVyJyk7CgogIEBvdmVycmlkZQogIGZpbmFsIENvbXBpbGVyVGFzayB0YXNrOwogIGZpbmFsIFN0cmluZyBuYW1lOwogIEBvdmVycmlkZQogIGZpbmFsIEVucXVldWVyTGlzdGVuZXIgbGlzdGVuZXI7CgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX3JlY2VudENsYXNzZXMgPSBuZXcgU2V0bGV0PENsYXNzRW50aXR5PigpOwogIGJvb2wgX3JlY2VudENvbnN0YW50cyA9IGZhbHNlOwogIGZpbmFsIFJlc29sdXRpb25FbnF1ZXVlcldvcmxkQnVpbGRlciBfd29ybGRCdWlsZGVyOwogIGZpbmFsIFdvcmtJdGVtQnVpbGRlciBfd29ya0l0ZW1CdWlsZGVyOwogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciBfcmVwb3J0ZXI7CiAgZmluYWwgQW5ub3RhdGlvbnNEYXRhIF9hbm5vdGF0aW9uc0RhdGE7CgogIEBvdmVycmlkZQogIGJvb2wgcXVldWVJc0Nsb3NlZCA9IGZhbHNlOwoKICBXb3JsZEltcGFjdFZpc2l0b3IgX2ltcGFjdFZpc2l0b3I7CgogIGZpbmFsIFF1ZXVlPFdvcmtJdGVtPiBfcXVldWUgPSBuZXcgUXVldWU8V29ya0l0ZW0+KCk7CgogIC8vIElmIG5vdCBgbnVsbGAgdGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgcXVldWUgaGFzIGJlZW4gZW1wdGllZC4gSXQgYWxsb3dzIGZvcgogIC8vIGFwcGx5aW5nIGFkZGl0aW9uYWwgaW1wYWN0cyBiZWZvcmUgcmUtZW1wdHlpbmcgdGhlIHF1ZXVlLgogIHZvaWQgRnVuY3Rpb24oKSBvbkVtcHR5Rm9yVGVzdGluZzsKCiAgUmVzb2x1dGlvbkVucXVldWVyKHRoaXMudGFzaywgdGhpcy5fcmVwb3J0ZXIsIHRoaXMubGlzdGVuZXIsCiAgICAgIHRoaXMuX3dvcmxkQnVpbGRlciwgdGhpcy5fd29ya0l0ZW1CdWlsZGVyLCB0aGlzLl9hbm5vdGF0aW9uc0RhdGEsCiAgICAgIFt0aGlzLm5hbWUgPSAncmVzb2x1dGlvbiBlbnF1ZXVlciddKSB7CiAgICBfaW1wYWN0VmlzaXRvciA9IG5ldyBFbnF1ZXVlckltcGxJbXBhY3RWaXNpdG9yKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmVzb2x1dGlvbldvcmxkQnVpbGRlciBnZXQgd29ybGRCdWlsZGVyID0+IF93b3JsZEJ1aWxkZXI7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IHF1ZXVlSXNFbXB0eSA9PiBfcXVldWUuaXNFbXB0eTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBjaGVja1F1ZXVlSXNFbXB0eSgpIHsKICAgIGlmIChfcXVldWUuaXNOb3RFbXB0eSkgewogICAgICBmYWlsZWRBdChfcXVldWUuZmlyc3QuZWxlbWVudCwgIiRuYW1lIHF1ZXVlIGlzIG5vdCBlbXB0eS4iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgcHJvY2Vzc2VkQ2xhc3NlcyA9PiBfd29ybGRCdWlsZGVyLnByb2Nlc3NlZENsYXNzZXM7CgogIEBvdmVycmlkZQogIHZvaWQgYXBwbHlJbXBhY3QoV29ybGRJbXBhY3Qgd29ybGRJbXBhY3QsIHt2YXIgaW1wYWN0U291cmNlfSkgewogICAgaWYgKHdvcmxkSW1wYWN0LmlzRW1wdHkpIHJldHVybjsKICAgIGltcGFjdFN0cmF0ZWd5LnZpc2l0SW1wYWN0KAogICAgICAgIGltcGFjdFNvdXJjZSwgd29ybGRJbXBhY3QsIF9pbXBhY3RWaXNpdG9yLCBpbXBhY3RVc2UpOwogIH0KCiAgdm9pZCBfcmVnaXN0ZXJJbnN0YW50aWF0ZWRUeXBlKEludGVyZmFjZVR5cGUgdHlwZSwKICAgICAge0NvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yLAogICAgICBib29sIG5hdGl2ZVVzYWdlOiBmYWxzZSwKICAgICAgYm9vbCBnbG9iYWxEZXBlbmRlbmN5OiBmYWxzZX0pIHsKICAgIHRhc2subWVhc3VyZVN1YnRhc2soJ3Jlc29sdXRpb24udHlwZVVzZScsICgpIHsKICAgICAgX3dvcmxkQnVpbGRlci5yZWdpc3RlclR5cGVJbnN0YW50aWF0aW9uKHR5cGUsIF9hcHBseUNsYXNzVXNlLAogICAgICAgICAgY29uc3RydWN0b3I6IGNvbnN0cnVjdG9yKTsKICAgICAgbGlzdGVuZXIucmVnaXN0ZXJJbnN0YW50aWF0ZWRUeXBlKHR5cGUsCiAgICAgICAgICBpc0dsb2JhbDogZ2xvYmFsRGVwZW5kZW5jeSwgbmF0aXZlVXNhZ2U6IG5hdGl2ZVVzYWdlKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjaGVja05vRW5xdWV1ZWRJbnZva2VkSW5zdGFuY2VNZXRob2RzKAogICAgICBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50KSB7CiAgICBpZiAoRW5xdWV1ZXIuc2tpcEVucXVldWVyQ2hlY2tGb3JUZXN0aW5nKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBjaGVja0VucXVldWVyQ29uc2lzdGVuY3koZWxlbWVudEVudmlyb25tZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2hlY2tDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIF93b3JsZEJ1aWxkZXIucHJvY2Vzc0NsYXNzTWVtYmVycyhjbHMsCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIEVudW1TZXQ8TWVtYmVyVXNlPiB1c2VTZXQpIHsKICAgICAgaWYgKHVzZVNldC5pc05vdEVtcHR5KSB7CiAgICAgICAgX3JlcG9ydGVyLmludGVybmFsRXJyb3IobWVtYmVyLAogICAgICAgICAgICAnVW5lbnF1ZXVlZCB1c2Ugb2YgJG1lbWJlcjogJHt1c2VTZXQuaXRlcmFibGUoTWVtYmVyVXNlLnZhbHVlcyl9Jyk7CiAgICAgIH0KICAgIH0sIGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeTogdHJ1ZSk7CiAgfQoKICAvLy8gQ2FsbGJhY2sgZm9yIGFwcGx5aW5nIHRoZSB1c2Ugb2YgYSBbbWVtYmVyXS4KICB2b2lkIF9hcHBseU1lbWJlclVzZShFbnRpdHkgbWVtYmVyLCBFbnVtU2V0PE1lbWJlclVzZT4gdXNlU2V0KSB7CiAgICBpZiAodXNlU2V0LmNvbnRhaW5zKE1lbWJlclVzZS5OT1JNQUwpKSB7CiAgICAgIF9hZGRUb1dvcmtMaXN0KG1lbWJlcik7CiAgICB9CiAgICBpZiAodXNlU2V0LmNvbnRhaW5zKE1lbWJlclVzZS5DTE9TVVJJWkVfSU5TVEFOQ0UpKSB7CiAgICAgIF9yZWdpc3RlckNsb3N1cml6ZWRNZW1iZXIobWVtYmVyKTsKICAgIH0KICAgIGlmICh1c2VTZXQuY29udGFpbnMoTWVtYmVyVXNlLkNMT1NVUklaRV9TVEFUSUMpKSB7CiAgICAgIGFwcGx5SW1wYWN0KGxpc3RlbmVyLnJlZ2lzdGVyR2V0T2ZTdGF0aWNGdW5jdGlvbigpLAogICAgICAgICAgaW1wYWN0U291cmNlOiAnZ2V0IG9mIHN0YXRpYyBmdW5jdGlvbicpOwogICAgfQogIH0KCiAgLy8vIENhbGxiYWNrIGZvciBhcHBseWluZyB0aGUgdXNlIG9mIGEgW2Nsc10uCiAgdm9pZCBfYXBwbHlDbGFzc1VzZShDbGFzc0VudGl0eSBjbHMsIEVudW1TZXQ8Q2xhc3NVc2U+IHVzZVNldCkgewogICAgaWYgKHVzZVNldC5jb250YWlucyhDbGFzc1VzZS5JTlNUQU5USUFURUQpKSB7CiAgICAgIF9yZWNlbnRDbGFzc2VzLmFkZChjbHMpOwogICAgICBfd29ybGRCdWlsZGVyLnByb2Nlc3NDbGFzc01lbWJlcnMoY2xzLCBfYXBwbHlNZW1iZXJVc2UpOwogICAgICAvLyBXZSBvbmx5IHRlbGwgdGhlIGJhY2tlbmQgb25jZSB0aGF0IFtjbHNdIHdhcyBpbnN0YW50aWF0ZWQsIHNvCiAgICAgIC8vIGFueSBhZGRpdGlvbmFsIGRlcGVuZGVuY2llcyBtdXN0IGJlIHRyZWF0ZWQgYXMgZ2xvYmFsCiAgICAgIC8vIGRlcGVuZGVuY2llcy4KICAgICAgYXBwbHlJbXBhY3QobGlzdGVuZXIucmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzcyhjbHMpLAogICAgICAgICAgaW1wYWN0U291cmNlOiAnaW5zdGFudGlhdGVkIGNsYXNzJyk7CiAgICB9CiAgICBpZiAodXNlU2V0LmNvbnRhaW5zKENsYXNzVXNlLklNUExFTUVOVEVEKSkgewogICAgICBhcHBseUltcGFjdChsaXN0ZW5lci5yZWdpc3RlckltcGxlbWVudGVkQ2xhc3MoY2xzKSwKICAgICAgICAgIGltcGFjdFNvdXJjZTogJ2ltcGxlbWVudGVkIGNsYXNzJyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByb2Nlc3NEeW5hbWljVXNlKER5bmFtaWNVc2UgZHluYW1pY1VzZSkgewogICAgdGFzay5tZWFzdXJlU3VidGFzaygncmVzb2x1dGlvbi5keW5hbWljVXNlJywgKCkgewogICAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZShkeW5hbWljVXNlLCBfYXBwbHlNZW1iZXJVc2UpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByb2Nlc3NDb25zdGFudFVzZShDb25zdGFudFVzZSBjb25zdGFudFVzZSkgewogICAgdGFzay5tZWFzdXJlU3VidGFzaygncmVzb2x1dGlvbi5jb25zdGFudFVzZScsICgpIHsKICAgICAgaWYgKF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJDb25zdGFudFVzZShjb25zdGFudFVzZSkpIHsKICAgICAgICBhcHBseUltcGFjdChsaXN0ZW5lci5yZWdpc3RlclVzZWRDb25zdGFudChjb25zdGFudFVzZS52YWx1ZSksCiAgICAgICAgICAgIGltcGFjdFNvdXJjZTogJ2NvbnN0YW50IHVzZScpOwogICAgICAgIF9yZWNlbnRDb25zdGFudHMgPSB0cnVlOwogICAgICB9CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJvY2Vzc1N0YXRpY1VzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBTdGF0aWNVc2Ugc3RhdGljVXNlKSB7CiAgICB0YXNrLm1lYXN1cmVTdWJ0YXNrKCdyZXNvbHV0aW9uLnN0YXRpY1VzZScsICgpIHsKICAgICAgX3dvcmxkQnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShzdGF0aWNVc2UsIF9hcHBseU1lbWJlclVzZSk7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEFkZCBgUmVzb2x1dGlvbldvcmxkQnVpbGRlci5yZWdpc3RlckNvbnN0cnVjdG9yVXNlYAogICAgICAvLyBmb3IgdGhlc2U6CiAgICAgIHN3aXRjaCAoc3RhdGljVXNlLmtpbmQpIHsKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ09OU1RSVUNUT1JfSU5WT0tFOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DT05TVF9DT05TVFJVQ1RPUl9JTlZPS0U6CiAgICAgICAgICBfcmVnaXN0ZXJJbnN0YW50aWF0ZWRUeXBlKHN0YXRpY1VzZS50eXBlLAogICAgICAgICAgICAgIGNvbnN0cnVjdG9yOiBzdGF0aWNVc2UuZWxlbWVudCwgZ2xvYmFsRGVwZW5kZW5jeTogZmFsc2UpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJvY2Vzc1R5cGVVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgVHlwZVVzZSB0eXBlVXNlKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gdHlwZVVzZS50eXBlOwogICAgc3dpdGNoICh0eXBlVXNlLmtpbmQpIHsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5JTlNUQU5USUFUSU9OOgogICAgICBjYXNlIFR5cGVVc2VLaW5kLkNPTlNUX0lOU1RBTlRJQVRJT046CiAgICAgICAgX3JlZ2lzdGVySW5zdGFudGlhdGVkVHlwZSh0eXBlLCBnbG9iYWxEZXBlbmRlbmN5OiBmYWxzZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuTkFUSVZFX0lOU1RBTlRJQVRJT046CiAgICAgICAgX3JlZ2lzdGVySW5zdGFudGlhdGVkVHlwZSh0eXBlLAogICAgICAgICAgICBuYXRpdmVVc2FnZTogdHJ1ZSwgZ2xvYmFsRGVwZW5kZW5jeTogdHJ1ZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuSVNfQ0hFQ0s6CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQ0FUQ0hfVFlQRToKICAgICAgICBfcmVnaXN0ZXJJc0NoZWNrKHR5cGUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLkFTX0NBU1Q6CiAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEuZ2V0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3kobWVtYmVyKS5pc0VtaXR0ZWQpIHsKICAgICAgICAgIF9yZWdpc3RlcklzQ2hlY2sodHlwZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLklNUExJQ0lUX0NBU1Q6CiAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEuZ2V0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5KG1lbWJlcikuaXNFbWl0dGVkKSB7CiAgICAgICAgICBfcmVnaXN0ZXJJc0NoZWNrKHR5cGUpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5QQVJBTUVURVJfQ0hFQ0s6CiAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3kobWVtYmVyKS5pc0VtaXR0ZWQpIHsKICAgICAgICAgIF9yZWdpc3RlcklzQ2hlY2sodHlwZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLlRZUEVfTElURVJBTDoKICAgICAgICBpZiAodHlwZSBpcyBUeXBlVmFyaWFibGVUeXBlKSB7CiAgICAgICAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyVHlwZVZhcmlhYmxlVHlwZUxpdGVyYWwodHlwZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLlJUSV9WQUxVRToKICAgICAgY2FzZSBUeXBlVXNlS2luZC5UWVBFX0FSR1VNRU5UOgogICAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICJVbmV4cGVjdGVkIHR5cGUgdXNlOiAkdHlwZVVzZS4iKTsKICAgICAgICBicmVhazsKICAgIH0KICB9CgogIHZvaWQgX3JlZ2lzdGVySXNDaGVjayhEYXJ0VHlwZSB0eXBlKSB7CiAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVySXNDaGVjayh0eXBlKTsKICB9CgogIHZvaWQgX3JlZ2lzdGVyQ2xvc3VyaXplZE1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlcik7CiAgICBhcHBseUltcGFjdChsaXN0ZW5lci5yZWdpc3RlckNsb3N1cml6ZWRNZW1iZXIoZWxlbWVudCksCiAgICAgICAgaW1wYWN0U291cmNlOiAnY2xvc3VyaXplZCBtZW1iZXInKTsKICAgIF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJDbG9zdXJpemVkTWVtYmVyKGVsZW1lbnQpOwogIH0KCiAgdm9pZCBfZm9yRWFjaCh2b2lkIGYoV29ya0l0ZW0gd29yaykpIHsKICAgIGRvIHsKICAgICAgd2hpbGUgKF9xdWV1ZS5pc05vdEVtcHR5KSB7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogRmluZCBhbiBvcHRpbWFsIHByb2Nlc3Mgb3JkZXIuCiAgICAgICAgV29ya0l0ZW0gd29yayA9IF9xdWV1ZS5yZW1vdmVMYXN0KCk7CiAgICAgICAgaWYgKCFfd29ybGRCdWlsZGVyLmlzTWVtYmVyUHJvY2Vzc2VkKHdvcmsuZWxlbWVudCkpIHsKICAgICAgICAgIGYod29yayk7CiAgICAgICAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyUHJvY2Vzc2VkTWVtYmVyKHdvcmsuZWxlbWVudCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIExpc3Q8Q2xhc3NFbnRpdHk+IHJlY2VudHMgPSBfcmVjZW50Q2xhc3Nlcy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgX3JlY2VudENsYXNzZXMuY2xlYXIoKTsKICAgICAgX3JlY2VudENvbnN0YW50cyA9IGZhbHNlOwogICAgICBpZiAoIV9vblF1ZXVlRW1wdHkocmVjZW50cykpIHsKICAgICAgICBfcmVjZW50Q2xhc3Nlcy5hZGRBbGwocmVjZW50cyk7CiAgICAgIH0KICAgIH0gd2hpbGUgKAogICAgICAgIF9xdWV1ZS5pc05vdEVtcHR5IHx8IF9yZWNlbnRDbGFzc2VzLmlzTm90RW1wdHkgfHwgX3JlY2VudENvbnN0YW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2godm9pZCBmKFdvcmtJdGVtIHdvcmspKSB7CiAgICBfZm9yRWFjaChmKTsKICAgIGlmIChvbkVtcHR5Rm9yVGVzdGluZyAhPSBudWxsKSB7CiAgICAgIG9uRW1wdHlGb3JUZXN0aW5nKCk7CiAgICAgIF9mb3JFYWNoKGYpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBsb2dTdW1tYXJ5KHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlKSkgewogICAgbG9nKCdSZXNvbHZlZCAke3Byb2Nlc3NlZEVudGl0aWVzLmxlbmd0aH0gZWxlbWVudHMuJyk7CiAgICBsaXN0ZW5lci5sb2dTdW1tYXJ5KGxvZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnRW5xdWV1ZXIoJG5hbWUpJzsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXQgcHJvY2Vzc2VkRW50aXRpZXMgPT4KICAgICAgX3dvcmxkQnVpbGRlci5wcm9jZXNzZWRNZW1iZXJzOwoKICBAb3ZlcnJpZGUKICBJbXBhY3RVc2VDYXNlIGdldCBpbXBhY3RVc2UgPT4gSU1QQUNUX1VTRTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNSZXNvbHV0aW9uUXVldWUgPT4gdHJ1ZTsKCiAgLy8vIFJlZ2lzdGVycyBbZW50aXR5XSBhcyBwcm9jZXNzZWQgYnkgdGhlIHJlc29sdXRpb24gZW5xdWV1ZXIuIFVzZWQgb25seSBmb3IKICAvLy8gdGVzdGluZy4KICB2b2lkIHJlZ2lzdGVyUHJvY2Vzc2VkRWxlbWVudEludGVybmFsKE1lbWJlckVudGl0eSBlbnRpdHkpIHsKICAgIF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJQcm9jZXNzZWRNZW1iZXIoZW50aXR5KTsKICB9CgogIC8vLyBDcmVhdGUgYSBbV29ya0l0ZW1dIGZvciBbZW50aXR5XSBhbmQgYWRkIGl0IHRvIHRoZSB3b3JrIGxpc3QgaWYgaXQgaGFzIG5vdAogIC8vLyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkLgogIHZvaWQgX2FkZFRvV29ya0xpc3QoTWVtYmVyRW50aXR5IGVudGl0eSkgewogICAgaWYgKF93b3JsZEJ1aWxkZXIuaXNNZW1iZXJQcm9jZXNzZWQoZW50aXR5KSkgcmV0dXJuOwogICAgV29ya0l0ZW0gd29ya0l0ZW0gPSBfd29ya0l0ZW1CdWlsZGVyLmNyZWF0ZVdvcmtJdGVtKGVudGl0eSk7CiAgICBpZiAod29ya0l0ZW0gPT0gbnVsbCkgcmV0dXJuOwoKICAgIGlmIChxdWV1ZUlzQ2xvc2VkKSB7CiAgICAgIGZhaWxlZEF0KAogICAgICAgICAgZW50aXR5LCAiUmVzb2x1dGlvbiB3b3JrIGxpc3QgaXMgY2xvc2VkLiBUcnlpbmcgdG8gYWRkICRlbnRpdHkuIik7CiAgICB9CgogICAgYXBwbHlJbXBhY3QobGlzdGVuZXIucmVnaXN0ZXJVc2VkRWxlbWVudChlbnRpdHkpLAogICAgICAgIGltcGFjdFNvdXJjZTogJ3VzZWQgZWxlbWVudCcpOwogICAgX3dvcmxkQnVpbGRlci5yZWdpc3RlclVzZWRFbGVtZW50KGVudGl0eSk7CiAgICBfcXVldWUuYWRkKHdvcmtJdGVtKTsKICB9CgogIC8vLyBbX29uUXVldWVFbXB0eV0gaXMgY2FsbGVkIHdoZW5ldmVyIHRoZSBxdWV1ZSBpcyBkcmFpbmVkLiBbcmVjZW50Q2xhc3Nlc10KICAvLy8gY29udGFpbnMgdGhlIHNldCBvZiBhbGwgY2xhc3NlcyBzZWVuIGZvciB0aGUgZmlyc3QgdGltZSBzaW5jZQogIC8vLyBbX29uUXVldWVFbXB0eV0gd2FzIGNhbGxlZCBsYXN0LiBBIHJldHVybiB2YWx1ZSBvZiBbdHJ1ZV0gaW5kaWNhdGVzIHRoYXQKICAvLy8gdGhlIFtyZWNlbnRDbGFzc2VzXSBoYXZlIGJlZW4gcHJvY2Vzc2VkIGFuZCBtYXkgYmUgY2xlYXJlZC4gSWYgW2ZhbHNlXSBpcwogIC8vLyByZXR1cm5lZCwgW19vblF1ZXVlRW1wdHldIHdpbGwgYmUgY2FsbGVkIG9uY2UgdGhlIHF1ZXVlIGlzIGVtcHR5IGFnYWluIChvcgogIC8vLyBzdGlsbCBlbXB0eSkgYW5kIFtyZWNlbnRDbGFzc2VzXSB3aWxsIGJlIGEgc3VwZXJzZXQgb2YgdGhlIGN1cnJlbnQgdmFsdWUuCiAgYm9vbCBfb25RdWV1ZUVtcHR5KEl0ZXJhYmxlPENsYXNzRW50aXR5PiByZWNlbnRDbGFzc2VzKSB7CiAgICByZXR1cm4gbGlzdGVuZXIub25RdWV1ZUVtcHR5KHRoaXMsIHJlY2VudENsYXNzZXMpOwogIH0KfQoKY2xhc3MgRW5xdWV1ZXJJbXBsSW1wYWN0VmlzaXRvciBpbXBsZW1lbnRzIFdvcmxkSW1wYWN0VmlzaXRvciB7CiAgZmluYWwgRW5xdWV1ZXJJbXBsIGVucXVldWVyOwoKICBFbnF1ZXVlckltcGxJbXBhY3RWaXNpdG9yKHRoaXMuZW5xdWV1ZXIpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RHluYW1pY1VzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBEeW5hbWljVXNlIGR5bmFtaWNVc2UpIHsKICAgIGVucXVldWVyLnByb2Nlc3NEeW5hbWljVXNlKGR5bmFtaWNVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0YXRpY1VzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBTdGF0aWNVc2Ugc3RhdGljVXNlKSB7CiAgICBlbnF1ZXVlci5wcm9jZXNzU3RhdGljVXNlKG1lbWJlciwgc3RhdGljVXNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlVXNlKE1lbWJlckVudGl0eSBtZW1iZXIsIFR5cGVVc2UgdHlwZVVzZSkgewogICAgZW5xdWV1ZXIucHJvY2Vzc1R5cGVVc2UobWVtYmVyLCB0eXBlVXNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25zdGFudFVzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBDb25zdGFudFVzZSBjb25zdGFudFVzZSkgewogICAgZW5xdWV1ZXIucHJvY2Vzc0NvbnN0YW50VXNlKGNvbnN0YW50VXNlKTsKICB9Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIGNyZWF0aW5nIHdvcmsgaXRlbXMgZm9yIGVucXVldWVkIG1lbWJlciBlbnRpdGllcy4KYWJzdHJhY3QgY2xhc3MgV29ya0l0ZW1CdWlsZGVyIHsKICBXb3JrSXRlbSBjcmVhdGVXb3JrSXRlbShjb3ZhcmlhbnQgTWVtYmVyRW50aXR5IGVudGl0eSk7Cn0KgikATk48ARkBJQEeLikWNyAmIR4eJjUjJTEmGwkVFBMXERUkSRwlJwEpIi0bAQwgASEiIgE0MQE0JgwdKD4YBAEyNTJLBAEiIDkjJ01MRCAsBhUEAgEaTElIFkUTMwEhAUYgEAFEHgEWARkBHwEnAUlRIUEuLgE7HC0BMAEuAgEiSzQ4AU46OgFISBA5AVEyLQFKMkEBTDo4AUo6OQEUTgFIBklJUBkGR1BIURUGQVElTQEwGAEvLQIBLxkkQz0xNCEBQjsBOAEMRiEmNwQBDBFQFy4eBAFCSTFNJDk2Ik0kCggIEQQCATAwKjEBDBsVDCMBRSE2KiYqAQweASUBOAFRPyUBP0gtOgQBDDwBDCsBDB0dQwYEAQxQAQxCJSA/BAE1Jh8nM0QlLkEIBAEMLi87OQQBDCUrOx8oUAgoBAEzQy0eBjkpBjc6MwYEATBDMh8/Rz8XOy8GMTouBgQBDDI2RQgEAQw1NzxGKyEICAQBDEQ1Q1IUIC81NEgREREICAQBDD4iHCYsQg8tKDgPISMgDyBNIgoPJlEiCg8oSiIKDyUoPwoPIiZPDwYEASkpBAE5JjwsNQQBKQkiPy0+Ez8KCEoeICUoCA5NBAEMKBElGxMGBAEMLjseBAEMKgEMMiYBDC0BDCYBUA8/MwQBUR4tOUEiARkQTQYBNicvGgQBT0RPUFFQPDcEAgFAHwEsAQxFLAQBDEIyBAEMPC4EAQxILgQCAUQhOgIBIXBhY2thZ2U6Y29tcGlsZXIvc3JjL2VucXVldWUuZGFydDRzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9mcm9udGVuZF9zdHJhdGVneS5kYXJ0i50vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmZyb250ZW5kX3N0cmF0ZWd5OwoKaW1wb3J0ICdjb21tb24uZGFydCc7CmltcG9ydCAnY29tbW9uL3Rhc2tzLmRhcnQnOwppbXBvcnQgJ2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICdjb21waWxlci5kYXJ0JyBzaG93IENvbXBpbGVyOwppbXBvcnQgJ2RlZmVycmVkX2xvYWQuZGFydCcgc2hvdyBEZWZlcnJlZExvYWRUYXNrOwppbXBvcnQgJ2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJ2VucXVldWUuZGFydCc7CmltcG9ydCAnanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICdqc19iYWNrZW5kL25vX3N1Y2hfbWV0aG9kX3JlZ2lzdHJ5LmRhcnQnOwppbXBvcnQgJ2tlcm5lbC9sb2FkZXIuZGFydCc7CmltcG9ydCAndW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnOwoKLy8vIFN0cmF0ZWd5IHBhdHRlcm4gdGhhdCBkZWZpbmVzIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGlucHV0IGZvcm1hdCBhbmQKLy8vIHRoZSByZXNvbHZlZCBlbGVtZW50IG1vZGVsLgphYnN0cmFjdCBjbGFzcyBGcm9udGVuZFN0cmF0ZWd5IHsKICAvLy8gUmVnaXN0ZXJzIGEgc2V0IG9mIGxvYWRlZCBsaWJyYXJpZXMgd2l0aCB0aGlzIHN0cmF0ZWd5LgogIHZvaWQgcmVnaXN0ZXJMb2FkZWRMaWJyYXJpZXMoS2VybmVsUmVzdWx0IHJlc3VsdCk7CgogIC8vLyBSZXR1cm5zIHRoZSBbRWxlbWVudEVudmlyb25tZW50XSBmb3IgdGhlIGVsZW1lbnQgbW9kZWwgdXNlZCBpbiB0aGlzCiAgLy8vIHN0cmF0ZWd5LgogIEVsZW1lbnRFbnZpcm9ubWVudCBnZXQgZWxlbWVudEVudmlyb25tZW50OwoKICAvLy8gUmV0dXJucyB0aGUgW0NvbW1vbkVsZW1lbnRzXSBmb3IgdGhlIGVsZW1lbnQgbW9kZWwgdXNlZCBpbiB0aGlzCiAgLy8vIHN0cmF0ZWd5LgogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50czsKCiAgTmF0aXZlQmFzaWNEYXRhIGdldCBuYXRpdmVCYXNpY0RhdGE7CgogIC8vLyBDcmVhdGVzIGEgW0RlZmVycmVkTG9hZFRhc2tdIGZvciB0aGUgZWxlbWVudCBtb2RlbCB1c2VkIGluIHRoaXMgc3RyYXRlZ3kuCiAgRGVmZXJyZWRMb2FkVGFzayBjcmVhdGVEZWZlcnJlZExvYWRUYXNrKENvbXBpbGVyIGNvbXBpbGVyKTsKCiAgLy8vIFN1cHBvcnQgZm9yIGNsYXNzaWZ5aW5nIGBub1N1Y2hNZXRob2RgIGltcGxlbWVudGF0aW9ucy4KICBOb1N1Y2hNZXRob2RSZWdpc3RyeSBnZXQgbm9TdWNoTWV0aG9kUmVnaXN0cnk7CgogIC8vLyBDYWxsZWQgYmVmb3JlIHByb2Nlc3Npbmcgb2YgdGhlIHJlc29sdXRpb24gcXVldWUgaXMgc3RhcnRlZC4KICB2b2lkIG9uUmVzb2x1dGlvblN0YXJ0KCk7CgogIFJlc29sdXRpb25FbnF1ZXVlciBjcmVhdGVSZXNvbHV0aW9uRW5xdWV1ZXIoCiAgICAgIENvbXBpbGVyVGFzayB0YXNrLCBDb21waWxlciBjb21waWxlcik7CgogIC8vLyBDYWxsZWQgd2hlbiB0aGUgcmVzb2x1dGlvbiBxdWV1ZSBoYXMgYmVlbiBjbG9zZWQuCiAgdm9pZCBvblJlc29sdXRpb25FbmQoKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBtYWluIGZ1bmN0aW9uIGZyb20gW21haW5MaWJyYXJ5XSBhZGRpbmcgYWRkaXRpb25hbCB3b3JsZAogIC8vLyBpbXBhY3QgdG8gW2ltcGFjdEJ1aWxkZXJdLgogIEZ1bmN0aW9uRW50aXR5IGNvbXB1dGVNYWluKFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyKTsKCiAgLy8vIENyZWF0ZXMgYSBbU291cmNlU3Bhbl0gZnJvbSBbc3Bhbm5hYmxlXSBpbiBjb250ZXh0IG9mIFtjdXJyZW50RWxlbWVudF0uCiAgU291cmNlU3BhbiBzcGFuRnJvbVNwYW5uYWJsZShTcGFubmFibGUgc3Bhbm5hYmxlLCBFbnRpdHkgY3VycmVudEVsZW1lbnQpOwp9CgovLy8gQ2xhc3MgdGhhdCBwZXJmb3JtcyB0aGUgbWVjaGFuaWNzIHRvIGludmVzdGlnYXRlIGFubm90YXRpb25zIGluIHRoZSBjb2RlLgphYnN0cmFjdCBjbGFzcyBBbm5vdGF0aW9uUHJvY2Vzc29yIHsKICB2b2lkIGV4dHJhY3ROYXRpdmVBbm5vdGF0aW9ucyhMaWJyYXJ5RW50aXR5IGxpYnJhcnkpOwoKICB2b2lkIGV4dHJhY3RKc0ludGVyb3BBbm5vdGF0aW9ucyhMaWJyYXJ5RW50aXR5IGxpYnJhcnkpOwoKICB2b2lkIHByb2Nlc3NKc0ludGVyb3BBbm5vdGF0aW9ucygKICAgICAgTmF0aXZlQmFzaWNEYXRhIG5hdGl2ZUJhc2ljRGF0YSwgTmF0aXZlRGF0YUJ1aWxkZXIgbmF0aXZlRGF0YUJ1aWxkZXIpOwp9CgovLy8gQ2xhc3MgdGhhdCBkZWxldGVzIHRoZSBjb250ZW50cyBvZiBhbiBbV29ybGRJbXBhY3RdIGNhY2hlLgovLyBUT0RPKHJlZGVtcHRpb24pOiB0aGlzIGNhbiBiZSBkZWxldGVkIHdoZW4gd2Ugc3Vuc2V0IHRoZSBvbGQgZnJvbnQgZW5kLgphYnN0cmFjdCBjbGFzcyBJbXBhY3RDYWNoZURlbGV0ZXIgewogIC8vLyBSZW1vdmVzIHRoZSBbV29ybGRJbXBhY3RdIGZvciBbZWxlbWVudF0gZnJvbSB0aGUgcmVzb2x1dGlvbiBjYWNoZS4gTGF0ZXIKICAvLy8gY2FsbHMgdG8gW2dldFdvcmxkSW1wYWN0XSBvciBbY29tcHV0ZVdvcmxkSW1wYWN0XSByZXR1cm5zIGFuIGVtcHR5IGltcGFjdC4KICB2b2lkIHVuY2FjaGVXb3JsZEltcGFjdChFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZW1vdmVzIHRoZSBbV29ybGRJbXBhY3RdcyBmb3IgYWxsIFtFbGVtZW50XXMgaW4gdGhlIHJlc29sdXRpb24gY2FjaGUuICwKICAvLy8gTGF0ZXIgY2FsbHMgdG8gW2dldFdvcmxkSW1wYWN0XSBvciBbY29tcHV0ZVdvcmxkSW1wYWN0XSByZXR1cm5zIGFuIGVtcHR5CiAgLy8vIGltcGFjdC4KICB2b2lkIGVtcHR5Q2FjaGUoKTsKfQpRAE5OPAEjARYcHyYzIRcmMh0lAU4gIj41AUoQLQFGECUBJwFQPgE+MQFDHAEvLQE4GgFMIUABTkwCAU4lOAE7ASRNAgE/SyRPUSsBT08OFQIBK3BhY2thZ2U6Y29tcGlsZXIvc3JjL2Zyb250ZW5kX3N0cmF0ZWd5LmRhcnRBc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnTAAGF4Ly8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5hYnN0cmFjdF92YWx1ZV9kb21haW47CgppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCcgc2hvdyBDb25zdGFudFZhbHVlLCBQcmltaXRpdmVDb25zdGFudFZhbHVlOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnIHNob3cgRGFydFR5cGU7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGUuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CgovLy8gRW51bS1saWtlIHZhbHVlcyB1c2VkIGZvciByZXBvcnRpbmcga25vd24gYW5kIHVua25vd24gdHJ1dGggdmFsdWVzLgpjbGFzcyBBYnN0cmFjdEJvb2wgewogIGZpbmFsIGJvb2wgX3ZhbHVlOwoKICBjb25zdCBBYnN0cmFjdEJvb2wuXyh0aGlzLl92YWx1ZSk7CgogIGJvb2wgZ2V0IGlzRGVmaW5pdGVseVRydWUgPT4gX3ZhbHVlID09IHRydWU7CgogIGJvb2wgZ2V0IGlzUG90ZW50aWFsbHlUcnVlID0+IF92YWx1ZSAhPSBmYWxzZTsKCiAgYm9vbCBnZXQgaXNEZWZpbml0ZWx5RmFsc2UgPT4gX3ZhbHVlID09IGZhbHNlOwoKICBib29sIGdldCBpc1BvdGVudGlhbGx5RmFsc2UgPT4gX3ZhbHVlICE9IHRydWU7CgogIC8vLyBBIHZhbHVlIG9mIGBBYnN0cmFjdC5UcnVlYCBpcyB1c2VkIHdoZW4gdGhlIHByb3BlcnR5IGlzIGtub3duIF9hbHdheXNfIHRvCiAgLy8vIGJlIHRydWUuCiAgc3RhdGljIGNvbnN0IEFic3RyYWN0Qm9vbCBUcnVlID0gY29uc3QgQWJzdHJhY3RCb29sLl8odHJ1ZSk7CgogIC8vLyBBIHZhbHVlIG9mIGBBYnN0cmFjdC5GYWxzZWAgaXMgdXNlZCB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBrbm93biBfbmV2ZXJfIHRvCiAgLy8vIGJlIHRydWUuCiAgc3RhdGljIGNvbnN0IEFic3RyYWN0Qm9vbCBGYWxzZSA9IGNvbnN0IEFic3RyYWN0Qm9vbC5fKGZhbHNlKTsKCiAgLy8vIEEgdmFsdWUgb2YgYEFic3RyYWN0Lk1heWJlYCBpcyB1c2VkIHdoZW4gdGhlIHByb3BlcnR5IG1pZ2h0IG9yIG1pZ2h0IG5vdAogIC8vLyBiZSB0cnVlLgogIHN0YXRpYyBjb25zdCBBYnN0cmFjdEJvb2wgTWF5YmUgPSBjb25zdCBBYnN0cmFjdEJvb2wuXyhudWxsKTsKCiAgc3RhdGljIEFic3RyYWN0Qm9vbCB0cnVlT3JNYXliZShib29sIHZhbHVlKSA9PiB2YWx1ZSA/IFRydWUgOiBNYXliZTsKCiAgc3RhdGljIEFic3RyYWN0Qm9vbCB0cnVlT3JGYWxzZShib29sIHZhbHVlKSA9PiB2YWx1ZSA/IFRydWUgOiBGYWxzZTsKCiAgc3RhdGljIEFic3RyYWN0Qm9vbCBtYXliZU9yRmFsc2UoYm9vbCB2YWx1ZSkgPT4gdmFsdWUgPyBNYXliZSA6IEZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAnQWJzdHJhY3RCb29sLiR7X3ZhbHVlID09IG51bGwgPyAnTWF5YmUnIDogKF92YWx1ZSA/ICdUcnVlJyA6ICdGYWxzZScpfSc7Cn0KCi8vLyBTdHJhdGVneSBmb3IgdGhlIGFic3RyYWN0aW9uIG9mIHJ1bnRpbWUgdmFsdWVzIHVzZWQgYnkgdGhlIGdsb2JhbCB0eXBlCi8vLyBpbmZlcmVuY2UuCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0VmFsdWVTdHJhdGVneSB7CiAgLy8vIENyZWF0ZXMgdGhlIGFic3RyYWN0IHZhbHVlIGRvbWFpbiBmb3IgW2Nsb3NlZFdvcmxkXS4KICBBYnN0cmFjdFZhbHVlRG9tYWluIGNyZWF0ZURvbWFpbihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwoKICAvLy8gQ3JlYXRlcyB0aGUgW1NlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneV0gdXNlZCBieSB0aGUgYmFja2VuZCBlbnF1ZXVlci4KICBTZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3kgY3JlYXRlU2VsZWN0b3JTdHJhdGVneSgpOwp9CgovLy8gQSB2YWx1ZSBpbiBhbiBhYnN0cmFjdGlvbiBvZiBydW50aW1lIHZhbHVlcy4KYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RWYWx1ZSB7fQoKLy8vIEEgcGFpciBvZiBhbiBBYnN0cmFjdFZhbHVlIGFuZCBhIHByZWNpc2lvbiBmbGFnLiBTZWUKLy8vIFtBYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZUZyb21TdGF0aWNUeXBlXSBmb3Igc2VtYW50aWNzIG9mIFtpc1ByZWNpc2VdLgpjbGFzcyBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbiB7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZSBhYnN0cmFjdFZhbHVlOwogIGZpbmFsIGJvb2wgaXNQcmVjaXNlOwoKICBjb25zdCBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbih0aGlzLmFic3RyYWN0VmFsdWUsIHRoaXMuaXNQcmVjaXNlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ0Fic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uKCRhYnN0cmFjdFZhbHVlLCBpc1ByZWNpc2U6ICRpc1ByZWNpc2UpJzsKfQoKLy8vIEEgc3lzdGVtIHRoYXQgaW1wbGVtZW50cyBhbiBhYnN0cmFjdGlvbiBvdmVyIHJ1bnRpbWUgdmFsdWVzLgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFZhbHVlRG9tYWluIHsKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYW4gdW5rbm93biBydW50aW1lIHZhbHVlLgogIEFic3RyYWN0VmFsdWUgZ2V0IGR5bmFtaWNUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBzdWJ0eXBlIG9mIGBUeXBlYCBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IHR5cGVUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBzdWJ0eXBlIG9mIGBGdW5jdGlvbmAgYXQKICAvLy8gcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCBmdW5jdGlvblR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIHN1YnR5cGUgb2YgYGJvb2xgIGF0CiAgLy8vIHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgYm9vbFR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIHN1YnR5cGUgb2YgYGludGAgYXQKICAvLy8gcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCBpbnRUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBzdWJ0eXBlIG9mIGBkb3VibGVgIGF0CiAgLy8vIHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgZG91YmxlVHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgc3VidHlwZSBvZiBgbnVtYCBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IG51bVR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIHN1YnR5cGUgb2YgYFN0cmluZ2AgYXQKICAvLy8gcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCBzdHJpbmdUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBzdWJ0eXBlIG9mIGBMaXN0YCBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IGxpc3RUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBzdWJ0eXBlIG9mIGBTZXRgIGF0CiAgLy8vIHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgc2V0VHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgc3VidHlwZSBvZiBgTWFwYCBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IG1hcFR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIHZhbHVlIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgbm9uTnVsbFR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyB0aGUgYG51bGxgIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgbnVsbFR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIGdyb3dhYmxlIEphdmFTY3JpcHQgYXJyYXkKICAvLy8gYXQgcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCBncm93YWJsZUxpc3RUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCBmaXhlZCBzaXplIEphdmFTY3JpcHQgYXJyYXkKICAvLy8gYXQgcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCBmaXhlZExpc3RUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgYSBub24tbnVsbCAzMS1iaXQgdW5zaWduZWQgaW50ZWdlciBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IHVpbnQzMVR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyIGF0CiAgLy8vIHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgdWludDMyVHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgdW5zaWduZWQgaW50ZWdlciBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0VmFsdWUgZ2V0IHBvc2l0aXZlSW50VHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgY29uc3RhbnQgbGlzdCBsaXRlcmFsIGF0CiAgLy8vIHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgY29uc3RMaXN0VHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgY29uc3RhbnQgc2V0IGxpdGVyYWwgYXQKICAvLy8gcnVudGltZS4KICBBYnN0cmFjdFZhbHVlIGdldCBjb25zdFNldFR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIGNvbnN0YW50IG1hcCBsaXRlcmFsIGF0CiAgLy8vIHJ1bnRpbWUuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgY29uc3RNYXBUeXBlOwoKICAvLy8gVGhlIFtBYnN0cmFjdFZhbHVlXSB0aGF0IHJlcHJlc2VudHMgdGhlIGVtcHR5IHNldCBvZiBydW50aW1lIHZhbHVlcy4KICBBYnN0cmFjdFZhbHVlIGdldCBlbXB0eVR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIGluc3RhbmNlIGF0IHJ1bnRpbWUgb2YgdGhlCiAgLy8vIGBJdGVyYWJsZWAgY2xhc3MgdXNlZCBmb3IgdGhlIGBzeW5jKmAgaW1wbGVtZW50YXRpb24uCiAgQWJzdHJhY3RWYWx1ZSBnZXQgc3luY1N0YXJJdGVyYWJsZVR5cGU7CgogIC8vLyBUaGUgW0Fic3RyYWN0VmFsdWVdIHRoYXQgcmVwcmVzZW50cyBhIG5vbi1udWxsIGluc3RhbmNlIGF0IHJ1bnRpbWUgb2YgdGhlCiAgLy8vIGBGdXR1cmVgIGNsYXNzIHVzZWQgZm9yIHRoZSBgYXN5bmNgIGltcGxlbWVudGF0aW9uLgogIEFic3RyYWN0VmFsdWUgZ2V0IGFzeW5jRnV0dXJlVHlwZTsKCiAgLy8vIFRoZSBbQWJzdHJhY3RWYWx1ZV0gdGhhdCByZXByZXNlbnRzIGEgbm9uLW51bGwgaW5zdGFuY2UgYXQgcnVudGltZSBvZiB0aGUKICAvLy8gYFN0cmVhbWAgY2xhc3MgdXNlZCBmb3IgdGhlIGBhc3luYypgIGltcGxlbWVudGF0aW9uLgogIEFic3RyYWN0VmFsdWUgZ2V0IGFzeW5jU3RhclN0cmVhbVR5cGU7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdFZhbHVlXSBhbmQgYSBwcmVjaXNpb24gZmxhZy4KICAvLy8KICAvLy8gQ3JlYXRlcyBhbiBbQWJzdHJhY3RWYWx1ZV0gY29ycmVzcG9uZGluZyB0byBhbiBleHByZXNzaW9uIG9mIHRoZSBnaXZlbgogIC8vLyBzdGF0aWMgW3R5cGVdIGFuZCBbY2xhc3NSZWxhdGlvbl0sIGFuZCBhbiBgaXNQcmVjaXNlYCBmbGFnIHRoYXQgaXMgYHRydWVgCiAgLy8vIGlmIHRoZSBbQWJzdHJhY3RWYWx1ZV0gcHJlY2lzZWx5IHJlcHJlc2VudHMgdGhlIFt0eXBlXSwgb3IgYGZhbHNlYCBpZiB0aGUKICAvLy8gW0Fic3RyYWN0VmFsdWVdIGlzIGFuIGFwcHJveGltYXRpb24uCiAgLy8vCiAgLy8vIElmIGBpc1ByZWNpc2VgIGlzIGB0cnVlYCwgdGhlbiB0aGUgYWJzdHJhY3QgdmFsdWUgaXMgZXF1aXZhbGVudCB0byBbdHlwZV0uCiAgLy8vCiAgLy8vIElmIGBpc1ByZWNpc2VgIGlzIGBmYWxzZWAgdGhlbiB0aGUgYWJzdHJhY3QgdmFsdWUgY29udGFpbnMgYWxsIHR5cGVzIGluCiAgLy8vIFt0eXBlXSBidXQgbWlnaHQgY29udGFpbiBtb3JlLiBUd28gZGlmZmVyZW50IERhcnQgdHlwZXMgY2FuIGhhdmUgdGhlIHNhbWUKICAvLy8gYXBwcm94aW1hdGlvbiwgc28gY2FyZSBtdXN0IGJlIHRha2VuIG5vdCB0byBtYWtlIHN1YnR5cGUganVkZ2VtZW50cyBmcm9tCiAgLy8vIGltcHJlY2lzZSBhYnN0cmFjdCB2YWx1ZXMuCiAgLy8vCiAgLy8vIFRoZSB0eXBlIGBUYCB3aGVyZSBgVGAgaXMgYSB0eXBlIHBhcmFtZXRlciB3b3VsZCBiZSBtb2RlbGxlZCBieSBhbgogIC8vLyBpbXByZWNpc2UgYWJzdHJhY3QgdmFsdWUgdHlwZSBzaW5jZSB3ZSBkb24ndCBrbm93IGhvdyBgVGAgaXMKICAvLy8gaW5zdGFudGlhdGVkLiBJdCBtaWdodCBiZSBhcHByb3hpbWF0ZWQgYnkgdGhlIGJvdW5kIG9mIGBUYC4gIGBMaXN0PFQ+YAogIC8vLyB3aGVyZSBgVGAgaXMgYSB0eXBlIHBhcmFtZXRlciB3b3VsZCBiZSBtb2RlbGxlZCBhcyBpbXByZWNpc2UgZm9yIHRoZSBzYW1lCiAgLy8vIHJlYXNvbi4KICAvLy8KICAvLy8gSWYgdGhlIGFic3RyYWN0IHZhbHVlIGRvbWFpbiBkb2VzIG5vdCB0cmFjayBnZW5lcmljIHR5cGUgcGFyYW1ldGVycyAoZS5nLgogIC8vLyB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0eXBlLW1hc2tzKSwgdGhlbiBgTGlzdDxpbnQ+YCB3b3VsZCBuZWVkIHRvCiAgLy8vIGJlIG1vZGVsbGVkIGJ5IGFuIGltcHJlY2lzZSBhYnN0cmFjdCB2YWx1ZS4gYExpc3Q8ZHluYW1pYz5gIG1pZ2h0IGJlIHRoZQogIC8vLyBpbXByZWNpc2UgYXBwcm94aW1hdGlvbi4KICAvLy8KICAvLy8gSW4gdGhlIGNvbnRleHQgb2YgYSBydW4tdGltZSB0eXBlIGNoZWNrLCBhbiBpbXByZWNpc2UgYWJzdHJhY3QgdmFsdWUgY2FuCiAgLy8vIGJlIHVzZWQgdG8gY29tcHV0ZSBhbiBvdXRwdXQgdHlwZSBieSBuYXJyb3dpbmcgdGhlIGlucHV0IHR5cGUsIGJ1dCBvbmx5IGEKICAvLy8gcHJlY2lzZSBhYnN0cmFjdCB2YWx1ZSBjb3VsZCBiZSB1c2VkIHRvIHJlbW92ZSB0aGUgY2hlY2sgb24gdGhlIGJhc2lzIG9mCiAgLy8vIHRoZSBpbnB1dCdzIGFic3RyYWN0IHR5cGUuIFRoZSBjaGVjayBjYW4gb25seSBiZSByZW1vdmVkIHdpdGggYWRkaXRpb25hbAogIC8vLyByZWFzb25pbmcsIGZvciBleGFtcGxlLCB0aGF0IGEgZG9taW5hdGluZyBjaGVjayB1c2VzIHRoZSBzYW1lIHR5cGUKICAvLy8gZXhwcmVzc2lvbi4KICBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbiBjcmVhdGVGcm9tU3RhdGljVHlwZShEYXJ0VHlwZSB0eXBlLAogICAgICBbQ2xhc3NSZWxhdGlvbiBjbGFzc1JlbGF0aW9uID0gQ2xhc3NSZWxhdGlvbi5zdWJ0eXBlXSk7CgogIC8vLyBDcmVhdGVzIGFuIFtBYnN0cmFjdFZhbHVlXSBmb3IgYSBub24tbnVsbCBleGFjdCBpbnN0YW5jZSBvZiBbY2xzXS4KICBBYnN0cmFjdFZhbHVlIGNyZWF0ZU5vbk51bGxFeGFjdChDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gQ3JlYXRlcyBhbiBbQWJzdHJhY3RWYWx1ZV0gZm9yIGEgcG90ZW50aWFsbHkgbnVsbCBleGFjdCBpbnN0YW5jZSBvZiBbY2xzXS4KICBBYnN0cmFjdFZhbHVlIGNyZWF0ZU51bGxhYmxlRXhhY3QoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIENyZWF0ZXMgYW4gW0Fic3RyYWN0VmFsdWVdIGZvciBhIG5vbi1udWxsIGluc3RhbmNlIHRoYXQgZXh0ZW5kcyBbY2xzXS4KICBBYnN0cmFjdFZhbHVlIGNyZWF0ZU5vbk51bGxTdWJjbGFzcyhDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gQ3JlYXRlcyBhbiBbQWJzdHJhY3RWYWx1ZV0gZm9yIGEgbm9uLW51bGwgaW5zdGFuY2UgdGhhdCBpbXBsZW1lbnRzIFtjbHNdLgogIEFic3RyYWN0VmFsdWUgY3JlYXRlTm9uTnVsbFN1YnR5cGUoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIENyZWF0ZXMgYW4gW0Fic3RyYWN0VmFsdWVdIGZvciBhIHBvdGVudGlhbGx5IG51bGwgaW5zdGFuY2UgdGhhdCBpbXBsZW1lbnRzCiAgLy8vIFtjbHNdLgogIEFic3RyYWN0VmFsdWUgY3JlYXRlTnVsbGFibGVTdWJ0eXBlKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIG5hdGl2ZSB0eXBlZAogIC8vLyBhcnJheSBvciBgbnVsbGAgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNUeXBlZEFycmF5KGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGNvdWxkIGJlIGEgbmF0aXZlCiAgLy8vIHR5cGVkIGFycmF5IGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGNvdWxkQmVUeXBlZEFycmF5KGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgdGhlIHZlcnNpb24gb2YgdGhlIGFic3RyYWN0IFt2YWx1ZV0gdGhhdCBleGNsdWRlcyBgbnVsbGAuCiAgQWJzdHJhY3RWYWx1ZSBleGNsdWRlTnVsbChjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIHRoZSB2ZXJzaW9uIG9mIHRoZSBhYnN0cmFjdCBbdmFsdWVdIHRoYXQgaW5jbHVkZXMgYG51bGxgLgogIEFic3RyYWN0VmFsdWUgaW5jbHVkZU51bGwoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gY29udGFpbnMKICAvLy8gaW5zdGFuY2VzIG9mIFtjbHNdIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGNvbnRhaW5zVHlwZShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSwgQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIG9ubHkgY29udGFpbnMKICAvLy8gc3VidHlwZXMgb2YgW2Nsc10gb3IgYG51bGxgIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGNvbnRhaW5zT25seVR5cGUoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUsIENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhbiBpbnN0YW5jZSBvZgogIC8vLyBbY2xzXSBvciBgbnVsbGAgYXQgcnVudGltZS4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNZXJnZSB0aGlzIHdpdGggW2lzSW5zdGFuY2VPZl0uCiAgQWJzdHJhY3RCb29sIGlzSW5zdGFuY2VPZk9yTnVsbCgKICAgICAgY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUsIENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBrbm93biB0byBiZSBhbgogIC8vLyBpbnN0YW5jZSBvZiBbY2xzXSBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0luc3RhbmNlT2YoQWJzdHJhY3RWYWx1ZSB2YWx1ZSwgQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGVtcHR5IHNldCBvZgogIC8vLyBydW50aW1lIHZhbHVlcy4KICBBYnN0cmFjdEJvb2wgaXNFbXB0eShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIG5vbi1udWxsCiAgLy8vIGV4YWN0IGNsYXNzIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzRXhhY3QoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYW4gZXhhY3QgY2xhc3MKICAvLy8gb3IgYG51bGxgIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzRXhhY3RPck51bGwoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NsYXNzRW50aXR5XSBpZiB0aGlzIFt2YWx1ZV0gaXMgYSBub24tbnVsbCBpbnN0YW5jZSBvZiBhbgogIC8vLyBleGFjdCBjbGFzcyBhdCBydW50aW1lLCBhbmQgYG51bGxgIG90aGVyd2lzZS4KICBDbGFzc0VudGl0eSBnZXRFeGFjdENsYXNzKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGBudWxsYCBhdAogIC8vLyBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc051bGwoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIGJvb2wsIG51bWJlciwgc3RyaW5nLCBhcnJheSBvciBgbnVsbGAgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmUoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIG51bWJlciBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZU51bWJlcihjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIEphdmFTY3JpcHQKICAvLy8gYm9vbCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZUJvb2xlYW4oY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIGFycmF5IGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlQXJyYXkoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIHN0cmluZywgYXJyYXksIG5hdGl2ZSBIVE1MIGxpc3Qgb3IgYG51bGxgIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzSW5kZXhhYmxlUHJpbWl0aXZlKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgZml4ZWQtc2l6ZQogIC8vLyBvciBjb25zdGFudCBKYXZhU2NyaXB0IGFycmF5IG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0ZpeGVkQXJyYXkoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBncm93YWJsZQogIC8vLyBKYXZhU2NyaXB0IGFycmF5IG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0V4dGVuZGFibGVBcnJheShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIG11dGFibGUKICAvLy8gSmF2YVNjcmlwdCBhcnJheSBvciBgbnVsbGAgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNNdXRhYmxlQXJyYXkoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBtdXRhYmxlCiAgLy8vIEphdmFTY3JpcHQgYXJyYXksIG5hdGl2ZSBIVE1MIGxpc3Qgb3IgYG51bGxgIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzTXV0YWJsZUluZGV4YWJsZShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIEphdmFTY3JpcHQKICAvLy8gYXJyYXkgb3IgYG51bGxgIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzQXJyYXkoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIHN0cmluZyBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZVN0cmluZyhjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhbiBpbnRlcmNlcHRvcgogIC8vLyBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0ludGVyY2VwdG9yKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgbm9uLW51bGwKICAvLy8gaW50ZWdlciB2YWx1ZSBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0ludGVnZXIoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBub24tbnVsbCAzMgogIC8vLyBiaXQgdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1VJbnQzMihjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIG5vbi1udWxsIDMxCiAgLy8vIGJpdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlIGF0IHJ1bnRpbWUuCiAgQWJzdHJhY3RCb29sIGlzVUludDMxKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgbm9uLW51bGwKICAvLy8gdW5zaWduZWQgaW50ZWdlciB2YWx1ZSBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1Bvc2l0aXZlSW50ZWdlcihjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhbiB1bnNpZ25lZAogIC8vLyBpbnRlZ2VyIHZhbHVlIG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1Bvc2l0aXZlSW50ZWdlck9yTnVsbChjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhbiBpbnRlZ2VyCiAgLy8vIHZhbHVlIG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0ludGVnZXJPck51bGwoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBub24tbnVsbAogIC8vLyBKYXZhU2NyaXB0IG51bWJlciBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc051bWJlcihjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIEphdmFTY3JpcHQKICAvLy8gbnVtYmVyIG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc051bWJlck9yTnVsbChjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIG5vbi1pbnRlZ2VyCiAgLy8vIG51bWJlciBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0RvdWJsZShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIG5vbi1pbnRlZ2VyCiAgLy8vIG51bWJlciBvciBgbnVsbGAgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNEb3VibGVPck51bGwoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIGJvb2wgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNCb29sZWFuKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbdmFsdWVdIGlzIGEgSmF2YVNjcmlwdAogIC8vLyBib29sIG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc0Jvb2xlYW5Pck51bGwoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFt2YWx1ZV0gaXMgYSBKYXZhU2NyaXB0CiAgLy8vIHN0cmluZyBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1N0cmluZyhjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBpcyBhIEphdmFTY3JpcHQKICAvLy8gc3RyaW5nIG9yIGBudWxsYCBhdCBydW50aW1lLgogIEFic3RyYWN0Qm9vbCBpc1N0cmluZ09yTnVsbChjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3ZhbHVlXSBhIEphdmFTY3JpcHQKICAvLy8gcHJpbWl0aXZlLCBwb3NzaWJsZSBgbnVsbGAuCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlT3JOdWxsKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgW0Fic3RyYWN0VmFsdWVdIGZvciB0aGUgcnVudGltZSB2YWx1ZXMgY29udGFpbmVkIGluIGVpdGhlciBbYV0gb3IKICAvLy8gW2JdLgogIEFic3RyYWN0VmFsdWUgdW5pb24oY292YXJpYW50IEFic3RyYWN0VmFsdWUgYSwgY292YXJpYW50IEFic3RyYWN0VmFsdWUgYik7CgogIC8vLyBSZXR1cm5zIFtBYnN0cmFjdFZhbHVlXSBmb3IgdGhlIHJ1bnRpbWUgdmFsdWVzIGNvbnRhaW5lZCBpbiBhdCBsZWFzdCBvbmUKICAvLy8gb2YgW3ZhbHVlc10uCiAgQWJzdHJhY3RWYWx1ZSB1bmlvbk9mTWFueShJdGVyYWJsZTxBYnN0cmFjdFZhbHVlPiB2YWx1ZXMpOwoKICAvLy8gUmV0dXJucyBbQWJzdHJhY3RWYWx1ZV0gZm9yIHRoZSBydW50aW1lIHZhbHVlcyB0aGF0IFthXSBhbmQgW2JdIGhhdmUgaW4KICAvLy8gY29tbW9uLgogIEFic3RyYWN0VmFsdWUgaW50ZXJzZWN0aW9uKAogICAgICBjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSBhLCBjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSBiKTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgd2hldGhlciBbYV0gYW5kIFtiXSBoYXZlIG5vCiAgLy8vIHJ1bnRpbWUgdmFsdWVzIGluIGNvbW1vbi4KICBBYnN0cmFjdEJvb2wgYXJlRGlzam9pbnQoCiAgICAgIGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIGEsIGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIGIpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFthXSBjb250YWlucyBhbGwgbm9uLW51bGwKICAvLy8gcnVudGltZSB2YWx1ZXMuCiAgQWJzdHJhY3RCb29sIGNvbnRhaW5zQWxsKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIGEpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIFtBYnN0cmFjdFZhbHVlXSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjb25zdGFudCBbdmFsdWVdLgogIEFic3RyYWN0VmFsdWUgY29tcHV0ZUFic3RyYWN0VmFsdWVGb3JDb25zdGFudChDb25zdGFudFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFt2YWx1ZV0gcmVwcmVzZW50cyBhIGNvbnRhaW5lciB2YWx1ZSBhdCBydW50aW1lLgogIGJvb2wgaXNDb250YWluZXIoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gQ3JlYXRlcyBhIGNvbnRhaW5lciB2YWx1ZSBzcGVjaWFsaXphdGlvbiBvZiBbb3JpZ2luYWxWYWx1ZV0gd2l0aCB0aGUKICAvLy8gaW5mZXJyZWQgW2VsZW1lbnRdIHJ1bnRpbWUgdmFsdWUgYW5kIGluZmVycmVkIHJ1bnRpbWUgW2xlbmd0aF0uCiAgLy8vCiAgLy8vIFRoZSBbYWxsb2NhdGlvbk5vZGVdIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhpcyBwYXJ0aWN1bGFyIG1hcCBhbGxvY2F0aW9uLgogIC8vLyBUaGUgW2FsbG9jYXRpb25FbGVtZW50XSBpcyB1c2VkIG9ubHkgZm9yIGRlYnVnZ2luZy4KICBBYnN0cmFjdFZhbHVlIGNyZWF0ZUNvbnRhaW5lclZhbHVlKAogICAgICBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUsCiAgICAgIE9iamVjdCBhbGxvY2F0aW9uTm9kZSwKICAgICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50LAogICAgICBBYnN0cmFjdFZhbHVlIGVsZW1lbnRUeXBlLAogICAgICBpbnQgbGVuZ3RoKTsKCiAgLy8vIFJldHVybnMgdGhlIGVsZW1lbnQgdHlwZSBvZiBbdmFsdWVdIGlmIGl0IHJlcHJlc2VudHMgYSBjb250YWluZXIgdmFsdWUKICAvLy8gYXQgcnVudGltZS4gUmV0dXJucyBbZHluYW1pY1R5cGVdIG90aGVyd2lzZS4KICBBYnN0cmFjdFZhbHVlIGdldENvbnRhaW5lckVsZW1lbnRUeXBlKEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJuIHRoZSBrbm93biBsZW5ndGggb2YgW3ZhbHVlXSBpZiBpdCByZXByZXNlbnRzIGEgY29udGFpbmVyIHZhbHVlCiAgLy8vIGF0IHJ1bnRpbWUuIFJldHVybnMgYG51bGxgIGlmIHRoZSBsZW5ndGggaXMgdW5rbm93biBvciBpZiBbdmFsdWVdIGRvZXNuJ3QKICAvLy8gcmVwcmVzZW50IGEgY29udGFpbmVyIHZhbHVlIGF0IHJ1bnRpbWUuCiAgaW50IGdldENvbnRhaW5lckxlbmd0aChBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFt2YWx1ZV0gcmVwcmVzZW50cyBhIHNldCB2YWx1ZSBhdCBydW50aW1lLgogIGJvb2wgaXNTZXQoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gQ3JlYXRlcyBhIHNldCB2YWx1ZSBzcGVjaWFsaXphdGlvbiBvZiBbb3JpZ2luYWxWYWx1ZV0gd2l0aCB0aGUgaW5mZXJyZWQKICAvLy8gW2VsZW1lbnRUeXBlXSBydW50aW1lIHZhbHVlLgogIC8vLwogIC8vLyBUaGUgW2FsbG9jYXRpb25Ob2RlXSBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgcGFydGljdWxhciBzZXQgYWxsb2NhdGlvbi4KICAvLy8gVGhlIFthbGxvY2F0aW9uRWxlbWVudF0gaXMgdXNlZCBvbmx5IGZvciBkZWJ1Z2dpbmcuCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVTZXRWYWx1ZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBvcmlnaW5hbFZhbHVlLAogICAgICBPYmplY3QgYWxsb2NhdGlvbk5vZGUsCiAgICAgIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudCwKICAgICAgQWJzdHJhY3RWYWx1ZSBlbGVtZW50VHlwZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBlbGVtZW50IHR5cGUgb2YgW3ZhbHVlXSBpZiBpdCByZXByZXNlbnRzIGEgc2V0IHZhbHVlIGF0CiAgLy8vIHJ1bnRpbWUuIFJldHVybnMgW2R5bmFtaWNUeXBlXSBvdGhlcndpc2UuCiAgQWJzdHJhY3RWYWx1ZSBnZXRTZXRFbGVtZW50VHlwZShBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFt2YWx1ZV0gcmVwcmVzZW50cyBhIG1hcCB2YWx1ZSBhdCBydW50aW1lLgogIGJvb2wgaXNNYXAoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gQ3JlYXRlcyBhIG1hcCB2YWx1ZSBzcGVjaWFsaXphdGlvbiBvZiBbb3JpZ2luYWxWYWx1ZV0gd2l0aCB0aGUgaW5mZXJyZWQKICAvLy8gW2tleV0gYW5kIFt2YWx1ZV0gcnVudGltZSB2YWx1ZXMuCiAgLy8vCiAgLy8vIFRoZSBbYWxsb2NhdGlvbk5vZGVdIGlzIHVzZWQgdG8gaWRlbnRpZnkgdGhpcyBwYXJ0aWN1bGFyIG1hcCBhbGxvY2F0aW9uLgogIC8vLyBUaGUgW2FsbG9jYXRpb25FbGVtZW50XSBpcyB1c2VkIG9ubHkgZm9yIGRlYnVnZ2luZy4KICBBYnN0cmFjdFZhbHVlIGNyZWF0ZU1hcFZhbHVlKAogICAgICBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVmFsdWUsCiAgICAgIE9iamVjdCBhbGxvY2F0aW9uTm9kZSwKICAgICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50LAogICAgICBBYnN0cmFjdFZhbHVlIGtleSwKICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBrZXkgdHlwZSBvZiBbdmFsdWVdIGlmIGl0IHJlcHJlc2VudHMgYSBtYXAgdmFsdWUgYXQgcnVudGltZS4KICAvLy8gUmV0dXJucyBbZHluYW1pY1R5cGVdIG90aGVyd2lzZS4KICBBYnN0cmFjdFZhbHVlIGdldE1hcEtleVR5cGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIHRoZSB2YWx1ZSB0eXBlIG9mIFt2YWx1ZV0gaWYgaXQgcmVwcmVzZW50cyBhIG1hcCB2YWx1ZSBhdCBydW50aW1lLgogIC8vLyBSZXR1cm5zIFtkeW5hbWljVHlwZV0gb3RoZXJ3aXNlLgogIEFic3RyYWN0VmFsdWUgZ2V0TWFwVmFsdWVUeXBlKEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3ZhbHVlXSByZXByZXNlbnRzIGEgZGljdGlvbmFyeSB2YWx1ZSwgdGhhdCBpcywgYSBtYXAKICAvLy8gd2l0aCBzdHJpbmdzIGFzIGtleXMsIGF0IHJ1bnRpbWUuCiAgYm9vbCBpc0RpY3Rpb25hcnkoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gQ3JlYXRlcyBhIGRpY3Rpb25hcnkgdmFsdWUgc3BlY2lhbGl6YXRpb24gb2YgW29yaWdpbmFsVmFsdWVdIHdpdGggdGhlCiAgLy8vIGluZmVycmVkIFtrZXldIGFuZCBbdmFsdWVdIHJ1bnRpbWUgdmFsdWVzLgogIC8vLwogIC8vLyBUaGUgW2FsbG9jYXRpb25Ob2RlXSBpcyB1c2VkIHRvIGlkZW50aWZ5IHRoaXMgcGFydGljdWxhciBtYXAgYWxsb2NhdGlvbi4KICAvLy8gVGhlIFthbGxvY2F0aW9uRWxlbWVudF0gaXMgdXNlZCBvbmx5IGZvciBkZWJ1Z2dpbmcuCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVEaWN0aW9uYXJ5VmFsdWUoCiAgICAgIEFic3RyYWN0VmFsdWUgb3JpZ2luYWxWYWx1ZSwKICAgICAgT2JqZWN0IGFsbG9jYXRpb25Ob2RlLAogICAgICBNZW1iZXJFbnRpdHkgYWxsb2NhdGlvbkVsZW1lbnQsCiAgICAgIEFic3RyYWN0VmFsdWUga2V5LAogICAgICBBYnN0cmFjdFZhbHVlIHZhbHVlLAogICAgICBNYXA8U3RyaW5nLCBBYnN0cmFjdFZhbHVlPiBtYXBwaW5ncyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbdmFsdWVdIGlzIGEgZGljdGlvbmFyeSB2YWx1ZSB3aGljaCBjb250YWlucyBba2V5XSBhcwogIC8vLyBhIGtleS4KICBib29sIGNvbnRhaW5zRGljdGlvbmFyeUtleShBYnN0cmFjdFZhbHVlIHZhbHVlLCBTdHJpbmcga2V5KTsKCiAgLy8vIFJldHVybnMgdGhlIHZhbHVlIHR5cGUgZm9yIFtrZXldIGluIFt2YWx1ZV0gaWYgaXQgcmVwcmVzZW50cyBhIGRpY3Rpb25hcnkKICAvLy8gdmFsdWUgYXQgcnVudGltZS4gUmV0dXJucyBbZHluYW1pY1R5cGVdIG90aGVyd2lzZS4KICBBYnN0cmFjdFZhbHVlIGdldERpY3Rpb25hcnlWYWx1ZUZvcktleShBYnN0cmFjdFZhbHVlIHZhbHVlLCBTdHJpbmcga2V5KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtzcGVjaWFsaXphdGlvbl0gaXMgYSBzcGVjaWFsaXphdGlvbiBvZgogIC8vLyBbZ2VuZXJhbGl6YXRpb25dLgogIC8vLwogIC8vLyBTcGVjaWFsaXphdGlvbnMgYXJlIGNyZWF0ZWQgdGhyb3VnaCBbY3JlYXRlUHJpbWl0aXZlVmFsdWVdLAogIC8vLyBbY3JlYXRlTWFwVmFsdWVdLCBbY3JlYXRlRGljdGlvbmFyeVZhbHVlXSBhbmQgW2NyZWF0ZUNvbnRhaW5lclZhbHVlXS4KICBib29sIGlzU3BlY2lhbGl6YXRpb25PZigKICAgICAgQWJzdHJhY3RWYWx1ZSBzcGVjaWFsaXphdGlvbiwgQWJzdHJhY3RWYWx1ZSBnZW5lcmFsaXphdGlvbik7CgogIC8vLyBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB3aGljaCBbdmFsdWVdIGlzIGEgc3BlY2lhbGl6YXRpb24uIFJldHVybiBgbnVsbGAgaWYKICAvLy8gW3ZhbHVlXSBpcyBub3QgYSBzcGVjaWFsaXphdGlvbi4KICAvLy8KICAvLy8gU3BlY2lhbGl6YXRpb25zIGFyZSBjcmVhdGVkIHRocm91Z2ggW2NyZWF0ZVByaW1pdGl2ZVZhbHVlXSwKICAvLy8gW2NyZWF0ZU1hcFZhbHVlXSwgW2NyZWF0ZURpY3Rpb25hcnlWYWx1ZV0gYW5kIFtjcmVhdGVDb250YWluZXJWYWx1ZV0uCiAgQWJzdHJhY3RWYWx1ZSBnZXRHZW5lcmFsaXphdGlvbihBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybiB0aGUgb2JqZWN0IGlkZW50aWZ5aW5nIHRoZSBhbGxvY2F0aW9uIG9mIFt2YWx1ZV0gaWYgaXQgaXMgYW4KICAvLy8gYWxsb2NhdGlvbiBiYXNlZCBzcGVjaWFsaXphdGlvbi4gT3RoZXJ3aXNlIHJldHVybnMgYG51bGxgLgogIC8vLwogIC8vLyBBbGxvY2F0aW9uIGJhc2VkIHNwZWNpYWxpemF0aW9ucyBhcmUgY3JlYXRlZCB0aHJvdWdoIFtjcmVhdGVNYXBWYWx1ZV0sCiAgLy8vIFtjcmVhdGVEaWN0aW9uYXJ5VmFsdWVdIGFuZCBbY3JlYXRlQ29udGFpbmVyVmFsdWVdCiAgT2JqZWN0IGdldEFsbG9jYXRpb25Ob2RlKEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gUmV0dXJuIHRoZSBhbGxvY2F0aW9uIGVsZW1lbnQgb2YgW3ZhbHVlXSBpZiBpdCBpcyBhbiBhbGxvY2F0aW9uIGJhc2VkCiAgLy8vIHNwZWNpYWxpemF0aW9uLiBPdGhlcndpc2UgcmV0dXJucyBgbnVsbGAuCiAgLy8vCiAgLy8vIEFsbG9jYXRpb24gYmFzZWQgc3BlY2lhbGl6YXRpb25zIGFyZSBjcmVhdGVkIHRocm91Z2ggW2NyZWF0ZU1hcFZhbHVlXSwKICAvLy8gW2NyZWF0ZURpY3Rpb25hcnlWYWx1ZV0gYW5kIFtjcmVhdGVDb250YWluZXJWYWx1ZV0KICBNZW1iZXJFbnRpdHkgZ2V0QWxsb2NhdGlvbkVsZW1lbnQoQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbdmFsdWVdIGEga25vd24gcHJpbWl0aXZlIEphdmFTY3JpcHQgdmFsdWUgYXQgcnVudGltZS4KICBib29sIGlzUHJpbWl0aXZlVmFsdWUoY292YXJpYW50IEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gQ3JlYXRlcyBhIHByaW1pdGl2ZSB2YWx1ZSBzcGVjaWFsaXphdGlvbiBvZiBbb3JpZ2luYWxWYWx1ZV0gd2l0aCB0aGUKICAvLy8gaW5mZXJyZWQgcHJpbWl0aXZlIGNvbnN0YW50IFt2YWx1ZV0uCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVQcmltaXRpdmVWYWx1ZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBvcmlnaW5hbFZhbHVlLCBQcmltaXRpdmVDb25zdGFudFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgdGhlIHByaW1pdGl2ZSBKYXZhU2NyaXB0IHZhbHVlIG9mIFt2YWx1ZV0gaWYgaXQgcmVwcmVzZW50cyBhCiAgLy8vIHByaW1pdGl2ZSBKYXZhU2NyaXB0IHZhbHVlIGF0IHJ1bnRpbWUsIHZhbHVlIGF0IHJ1bnRpbWUuIFJldHVybnMgYG51bGxgCiAgLy8vIG90aGVyd2lzZS4KICBQcmltaXRpdmVDb25zdGFudFZhbHVlIGdldFByaW1pdGl2ZVZhbHVlKGNvdmFyaWFudCBBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIENvbXB1dGUgdGhlIHR5cGUgb2YgYWxsIHBvdGVudGlhbCByZWNlaXZlcnMgb2YgdGhlIHNldCBvZiBsaXZlIFttZW1iZXJzXS4KICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVSZWNlaXZlcihJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IG1lbWJlcnMpOwoKICAvLy8gUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyB3aGV0aGVyIFttZW1iZXJdIGlzIGEgcG90ZW50aWFsCiAgLy8vIHRhcmdldCB3aGVuIGJlaW5nIGludm9rZWQgb24gYSBbcmVjZWl2ZXJdLiBbbmFtZV0gaXMgdXNlZCB0byBlbnN1cmUKICAvLy8gbGlicmFyeSBwcml2YWN5IGlzIHRha2VuIGludG8gYWNjb3VudC4KICBBYnN0cmFjdEJvb2wgaXNUYXJnZXRpbmdNZW1iZXIoCiAgICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIsIE1lbWJlckVudGl0eSBtZW1iZXIsIE5hbWUgbmFtZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIHdoZXRoZXIgW3NlbGVjdG9yXSBpbnZva2VkIG9uIGEKICAvLy8gW3JlY2VpdmVyXSBjYW4gaGl0IGEgW25vU3VjaE1ldGhvZF0uCiAgQWJzdHJhY3RCb29sIG5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoCiAgICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIsIFNlbGVjdG9yIHNlbGVjdG9yKTsKCiAgLy8vIFJldHVybnMgdGhlIFtBYnN0cmFjdFZhbHVlXSBmb3IgdGhlIFtwYXJhbWV0ZXJUeXBlXSBvZiBhIG5hdGl2ZQogIC8vLyBtZXRob2QuIE1heSByZXR1cm4gYG51bGxgLCBmb3IgZXhhbXBsZSwgaWYgW3BhcmFtZXRlclR5cGVdIGlzIG5vdCBtb2RlbGxlZAogIC8vLyBwcmVjaXNlbHkgYnkgYW4gW0Fic3RyYWN0VmFsdWVdLgogIEFic3RyYWN0VmFsdWUgZ2V0QWJzdHJhY3RWYWx1ZUZvck5hdGl2ZU1ldGhvZFBhcmFtZXRlclR5cGUoRGFydFR5cGUgdHlwZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIGlmIHRoZSBzZXQgb2YgcnVudGltZSB2YWx1ZXMgb2YKICAvLy8gW3N1YnNldF0gYXJlIGtub3duIHRvIGFsbCBiZSBpbiB0aGUgc2V0IG9mIHJ1bnRpbWUgdmFsdWVzIG9mIFtzdXBlcnNldF0uCiAgQWJzdHJhY3RCb29sIGNvbnRhaW5zKEFic3RyYWN0VmFsdWUgc3VwZXJzZXQsIEFic3RyYWN0VmFsdWUgc3Vic2V0KTsKCiAgLy8vIFJldHVybnMgYW4gW0Fic3RyYWN0Qm9vbF0gdGhhdCBkZXNjcmliZXMgaWYgdGhlIHNldCBvZiBydW50aW1lIHZhbHVlcyBvZgogIC8vLyBbc3Vic2V0XSBhcmUga25vd24gdG8gYWxsIGJlIGluIHRoZSBzZXQgb2YgcnVudGltZSB2YWx1ZXMgb2YgW3N1cGVyc2V0XS4KICBBYnN0cmFjdEJvb2wgaXNJbihBYnN0cmFjdFZhbHVlIHN1YnNldCwgQWJzdHJhY3RWYWx1ZSBzdXBlcnNldCk7CgogIC8vLyBSZXR1cm5zIHRoZSBbTWVtYmVyRW50aXR5XSB0aGF0IGlzIGtub3duIHRvIGFsd2F5cyBiZSBoaXQgYXQgcnVudGltZQogIC8vLyBbcmVjZWl2ZXJdLgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiAwIG9yIG1vcmUgdGhhbiAxIG1lbWJlciBjYW4gYmUgaGl0IGF0IHJ1bnRpbWUuCiAgTWVtYmVyRW50aXR5IGxvY2F0ZVNpbmdsZU1lbWJlcihBYnN0cmFjdFZhbHVlIHJlY2VpdmVyLCBTZWxlY3RvciBzZWxlY3Rvcik7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIGlmIFt2YWx1ZV0gaXMga25vd24gdG8gYmUgYW4KICAvLy8gaW5kZXhhYmxlIEphdmFTY3JpcHQgdmFsdWUgYXQgcnVudGltZS4KICBBYnN0cmFjdEJvb2wgaXNKc0luZGV4YWJsZShjb3ZhcmlhbnQgQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSUmV0dXJucyBhbiBbQWJzdHJhY3RCb29sXSB0aGF0IGRlc2NyaWJlcyBpZiBbdmFsdWVdIGlzIGtub3duIHRvIGJlIGFuCiAgLy8vIGluZGV4YWJsZSBvciBpdGVyYWJsZSBKYXZhU2NyaXB0IHZhbHVlIGF0IHJ1bnRpbWUuCiAgLy8vCiAgLy8vIEphdmFTY3JpcHQgYXJyYXlzIGFyZSBib3RoIGluZGV4YWJsZSBhbmQgaXRlcmFibGUgd2hlcmVhcyBKYXZhU2NyaXB0CiAgLy8vIHN0cmluZ3MgYXJlIGluZGV4YWJsZSBidXQgbm90IGl0ZXJhYmxlLgogIEFic3RyYWN0Qm9vbCBpc0pzSW5kZXhhYmxlQW5kSXRlcmFibGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSk7CgogIC8vLyBSZXR1cm5zIGFuIFtBYnN0cmFjdEJvb2xdIHRoYXQgZGVzY3JpYmVzIGlmIFt2YWx1ZV0gaXMga25vd24gdG8gYmUgYQogIC8vLyBKYXZhU2NyaXB0IGluZGV4YWJsZSBvZiBmaXhlZCBsZW5ndGguCiAgQWJzdHJhY3RCb29sIGlzRml4ZWRMZW5ndGhKc0luZGV4YWJsZShBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIFJldHVybnMgY29tcGFjdCBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gZm9yIFt2YWx1ZV0gdXNlZCBmb3IgZGVidWdnaW5nLgogIFN0cmluZyBnZXRDb21wYWN0VGV4dChBYnN0cmFjdFZhbHVlIHZhbHVlKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhbiBbQWJzdHJhY3RWYWx1ZV0gZm9yIHRoaXMgZG9tYWluIGZyb20gW3NvdXJjZV0uCiAgQWJzdHJhY3RWYWx1ZSByZWFkQWJzdHJhY3RWYWx1ZUZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKTsKCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbdmFsdWVdIGZvciB0aGlzIGRvbWFpbiB0byBbc2lua10uCiAgdm9pZCB3cml0ZUFic3RyYWN0VmFsdWVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIEFic3RyYWN0VmFsdWUgdmFsdWUpOwp9CoJbAE5OPAEnAU4kIS8hLiQpGAFIFRUBJQEvATEBMQExAVAPPwFQD0EBTw9AAUcBRwFJAQwXUAIBSw8nOz4BTjgCATEgATlNIyUYAUgBDBdLAgFBJUQhAUoPHgFODyIBSg8eAUkPHQFMDyABSQ8dAUwPIAFKDx4BSQ8dAUkPHQFHIQFBHgFPEiYBURIjAVAPIAFQDyABSQ8lAU4PIwFNDyIBTQ8iAUsfAVA8KgFQOiUBUDspATcGTVBQKwZRBk5QTyEGSUNNUA4GUFBPHwZPUE9PSRJBPgFJNQFRNgFNOAFQNwFRDTgBUSI8AVEeQQFIPAFIPAFIJU0BTS5RAVEiOiM3AVEkQwFPFjcBTR43AVEcPQFNNDwBTA82AU84OwFPGUEBTxdCAU8YQAFPPEQBTzk8AU0tQQFMLT4BTD9CAU8iNwFPGUEBURI9AU0gOQFQLTgBUC04AU0pQQFOKkcBTSI/AU0kOAFPIz4BUBk4AVAjPgFPFzkBTyE/AU8ZOAFPIz4BTCJBAVALTQFPEz0BTg4ePQFLIBw9AVEWNwFKRgFJMwFLRgZPOiYjHSYhEwFNMz4BTFAuLwFDLQFOIwZPOiAjHSYiAUowOAFDLQFOKAZPOiAjHSYZHAFPJzQBUSc2AU4oNAFMMQZPOicjHSYZGywBTg0/AVA5SwFAGAZCTBtDAU8nBkJMOAFKQQZNOTEBTDAGTTk6AU84AUsrJkIBS04RSwFQQQFPSi0iPwFPKyoyAUZRJ00BT09HAU9PQwFLEgZHTgFMLT0BTTkGSy4+AUssPgFPLgFFRAE5SQIBOHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0M3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL3RyaXZpYWwuZGFydLTcLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JyBzaG93IENvbnN0YW50VmFsdWUsIFByaW1pdGl2ZUNvbnN0YW50VmFsdWU7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCcgc2hvdyBEYXJ0VHlwZTsKaW1wb3J0ICcuLi9pci9zdGF0aWNfdHlwZS5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS91c2UuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CmltcG9ydCAnYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwoKY2xhc3MgVHJpdmlhbEFic3RyYWN0VmFsdWUgaW1wbGVtZW50cyBBYnN0cmFjdFZhbHVlIHsKICBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnPyc7Cn0KCmNsYXNzIFRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluIGltcGxlbWVudHMgQWJzdHJhY3RWYWx1ZURvbWFpbiB7CiAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWVEb21haW4oKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgZHluYW1pY1R5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUFic3RyYWN0VmFsdWVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIEFic3RyYWN0VmFsdWUgdmFsdWUpIHt9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgcmVhZEFic3RyYWN0VmFsdWVGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldENvbXBhY3RUZXh0KEFic3RyYWN0VmFsdWUgdmFsdWUpID0+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+CiAgICAgIGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY3JlYXRlTm9uTnVsbFN1YmNsYXNzKENsYXNzRW50aXR5IGNscykgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVOdWxsYWJsZUV4YWN0KENsYXNzRW50aXR5IGNscykgPT4KICAgICAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVOb25OdWxsRXhhY3QoQ2xhc3NFbnRpdHkgY2xzKSA9PgogICAgICBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbiBjcmVhdGVGcm9tU3RhdGljVHlwZShEYXJ0VHlwZSB0eXBlLAogICAgICAgICAgW0NsYXNzUmVsYXRpb24gY2xhc3NSZWxhdGlvbiA9IENsYXNzUmVsYXRpb24uc3VidHlwZV0pID0+CiAgICAgIGNvbnN0IEFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uKGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCksIGZhbHNlKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgYXN5bmNTdGFyU3RyZWFtVHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBhc3luY0Z1dHVyZVR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgc3luY1N0YXJJdGVyYWJsZVR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgZW1wdHlUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IGNvbnN0TWFwVHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBjb25zdFNldFR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgY29uc3RMaXN0VHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBwb3NpdGl2ZUludFR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgdWludDMyVHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCB1aW50MzFUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IGZpeGVkTGlzdFR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgZ3Jvd2FibGVMaXN0VHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBudWxsVHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBub25OdWxsVHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBtYXBUeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IHNldFR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgbGlzdFR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgc3RyaW5nVHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBudW1UeXBlID0+IGNvbnN0IFRyaXZpYWxBYnN0cmFjdFZhbHVlKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IGRvdWJsZVR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgaW50VHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBib29sVHlwZSA9PiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCBmdW5jdGlvblR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgdHlwZVR5cGUgPT4gY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWUoKTsKfQoKY2xhc3MgVHJpdmlhbEFic3RyYWN0VmFsdWVTdHJhdGVneSBpbXBsZW1lbnRzIEFic3RyYWN0VmFsdWVTdHJhdGVneSB7CiAgY29uc3QgVHJpdmlhbEFic3RyYWN0VmFsdWVTdHJhdGVneSgpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlRG9tYWluIGNyZWF0ZURvbWFpbihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBjb25zdCBUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgU2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5IGNyZWF0ZVNlbGVjdG9yU3RyYXRlZ3koKSB7CiAgICByZXR1cm4gY29uc3QgVHJpdmlhbFNlbGVjdG9yU3RyYXRlZ3koKTsKICB9Cn0KCmNsYXNzIFRyaXZpYWxTZWxlY3RvclN0cmF0ZWd5IGltcGxlbWVudHMgU2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5IHsKICBjb25zdCBUcml2aWFsU2VsZWN0b3JTdHJhdGVneSgpOwoKICBAb3ZlcnJpZGUKICBVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHMgY3JlYXRlU2VsZWN0b3JDb25zdHJhaW50cygKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIE9iamVjdCBpbml0aWFsQ29uc3RyYWludCkgewogICAgcmV0dXJuIGNvbnN0IFRyaXZpYWxVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHMoKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgYXBwbGllZFVubmFtZWQoRHluYW1pY1VzZSBkeW5hbWljVXNlLCBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICBjb3ZhcmlhbnQgSkNsb3NlZFdvcmxkIHdvcmxkKSB7CiAgICByZXR1cm4gZHluYW1pY1VzZS5zZWxlY3Rvci5hcHBsaWVzVW5uYW1lZChtZW1iZXIpOwogIH0KfQoKY2xhc3MgVHJpdmlhbFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50cwogICAgaW1wbGVtZW50cyBVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHMgewogIGNvbnN0IFRyaXZpYWxVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHMoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBhZGRSZWNlaXZlckNvbnN0cmFpbnQoT2JqZWN0IGNvbnN0cmFpbnQpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIG5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoU2VsZWN0b3Igc2VsZWN0b3IsIFdvcmxkIHdvcmxkKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGNhbkhpdChNZW1iZXJFbnRpdHkgZWxlbWVudCwgTmFtZSBuYW1lLCBXb3JsZCB3b3JsZCkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1RyaXZpYWxVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHM6JGhhc2hDb2RlJzsKfQqB5gBOTjwBTiQhLyEuJCkfGCUBNiABDBwCAUImAQxBAQxLAQxGJAEMNQEMQBoBDEAaAQxJAQxQDAEMRRoBDEkaAQwqOBoBDCJFGgEMQyQBDEkBDCZIJAEMNwEMQgEMOQEMOiQBDBtJDQEMTCBABAEMQCA9BAEMJychKh0fMiQBDDMBDDdOBAEMNUwEAQwgJyEqHSIkAQwsAQw5UAQBDCAnISooJAEMLAEMNwEMPyA/BAEMJichKiUZJAEMMgEMSCQBDE8MAQxDAQxAGgEMQiQBDD8kAQw7JAEMTQEMSgEMRAEMSwEMRQEMSgEMRAEMSgEMRAEMSwEMPxoBDE0BDEQBDEQBDEUBDEkBDE0BDEMBDE4BDEoBDE0BDEgBDFABDEwBDE4BDE0BDEcBDEIBDDoBDEkBDEMBDEMBDEUaAQxLGgEMSRoBDEUaAQw0JAEMNCQBDE0BDEgBDDokAQw5JAEMOiQBDDgkAQw3JAEMQURNAQxJAQxFAQxKAQw/AQxCAQxCAQxDAQxFAQxAAQxAAQxDAQxGAQw+AQxBAQw9AQw9AQw+AQxAAQw9AQxAAQw9AQw+AQxCAQw+AgFGKAEMPy8EAQw5LAQCAUcjAQw5NTcEAQxCJjcEAgEpLS4BDDoBDEoBDEUBDEcCASpwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90cml2aWFsLmRhcnQ7c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL21hc2tzLmRhcnTAAHQ0Ly8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgbWFza3M7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uLy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzOwppbXBvcnQgJy4uLy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vLi4vZWxlbWVudHMvbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vLi4vaXIvc3RhdGljX3R5cGUuZGFydCc7CmltcG9ydCAnLi4vLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uLy4uL3VuaXZlcnNlL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JzsKaW1wb3J0ICcuLi8uLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJy4uLy4uL3VuaXZlcnNlL3VzZS5kYXJ0JyBzaG93IER5bmFtaWNVc2U7CmltcG9ydCAnLi4vLi4vdW5pdmVyc2Uvd29ybGRfYnVpbGRlci5kYXJ0JwogICAgc2hvdyBVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHMsIFNlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneTsKaW1wb3J0ICcuLi8uLi91dGlsL3V0aWwuZGFydCc7CmltcG9ydCAnLi4vLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CmltcG9ydCAnLi4vYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL3R5cGVfZ3JhcGhfaW5mZXJyZXIuZGFydCcgc2hvdyBUeXBlR3JhcGhJbmZlcnJlcjsKaW1wb3J0ICdjb25zdGFudHMuZGFydCc7CgpwYXJ0ICdjb250YWluZXJfdHlwZV9tYXNrLmRhcnQnOwpwYXJ0ICdkaWN0aW9uYXJ5X3R5cGVfbWFzay5kYXJ0JzsKcGFydCAnZmxhdF90eXBlX21hc2suZGFydCc7CnBhcnQgJ2ZvcndhcmRpbmdfdHlwZV9tYXNrLmRhcnQnOwpwYXJ0ICdtYXBfdHlwZV9tYXNrLmRhcnQnOwpwYXJ0ICdzZXRfdHlwZV9tYXNrLmRhcnQnOwpwYXJ0ICd0eXBlX21hc2suZGFydCc7CnBhcnQgJ3VuaW9uX3R5cGVfbWFzay5kYXJ0JzsKcGFydCAndmFsdWVfdHlwZV9tYXNrLmRhcnQnOwoKY2xhc3MgQ29tbW9uTWFza3MgaW1wbGVtZW50cyBBYnN0cmFjdFZhbHVlRG9tYWluIHsKICAvLyBUT0RPKHNpZ211bmQpOiBvbmNlIHdlIHNwbGl0IG91dCB0aGUgYmFja2VuZCBjb21tb24gZWxlbWVudHMsIGRlcGVuZAogIC8vIGRpcmVjdGx5IG9uIHRob3NlIGluc3RlYWQuCiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKCiAgQ29tbW9uTWFza3ModGhpcy5fY2xvc2VkV29ybGQpOwoKICBDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHMgPT4gX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwoKICBUeXBlTWFzayBfZHluYW1pY1R5cGU7CiAgVHlwZU1hc2sgX25vbk51bGxUeXBlOwogIFR5cGVNYXNrIF9udWxsVHlwZTsKICBUeXBlTWFzayBfaW50VHlwZTsKICBUeXBlTWFzayBfdWludDMyVHlwZTsKICBUeXBlTWFzayBfdWludDMxVHlwZTsKICBUeXBlTWFzayBfcG9zaXRpdmVJbnRUeXBlOwogIFR5cGVNYXNrIF9kb3VibGVUeXBlOwogIFR5cGVNYXNrIF9udW1UeXBlOwogIFR5cGVNYXNrIF9ib29sVHlwZTsKICBUeXBlTWFzayBfZnVuY3Rpb25UeXBlOwogIFR5cGVNYXNrIF9saXN0VHlwZTsKICBUeXBlTWFzayBfY29uc3RMaXN0VHlwZTsKICBUeXBlTWFzayBfZml4ZWRMaXN0VHlwZTsKICBUeXBlTWFzayBfZ3Jvd2FibGVMaXN0VHlwZTsKICBUeXBlTWFzayBfc2V0VHlwZTsKICBUeXBlTWFzayBfY29uc3RTZXRUeXBlOwogIFR5cGVNYXNrIF9tYXBUeXBlOwogIFR5cGVNYXNrIF9jb25zdE1hcFR5cGU7CiAgVHlwZU1hc2sgX3N0cmluZ1R5cGU7CiAgVHlwZU1hc2sgX3R5cGVUeXBlOwogIFR5cGVNYXNrIF9zeW5jU3Rhckl0ZXJhYmxlVHlwZTsKICBUeXBlTWFzayBfYXN5bmNGdXR1cmVUeXBlOwogIFR5cGVNYXNrIF9hc3luY1N0YXJTdHJlYW1UeXBlOwogIFR5cGVNYXNrIF9pbmRleGFibGVQcmltaXRpdmVUeXBlOwogIFR5cGVNYXNrIF9yZWFkYWJsZUFycmF5VHlwZTsKICBUeXBlTWFzayBfbXV0YWJsZUFycmF5VHlwZTsKICBUeXBlTWFzayBfdW5tb2RpZmlhYmxlQXJyYXlUeXBlOwogIFR5cGVNYXNrIF9pbnRlcmNlcHRvclR5cGU7CgogIC8vLyBDYWNoZSBvZiBbRmxhdFR5cGVNYXNrXXMgZ3JvdXBlZCBieSB0aGUgOCBwb3NzaWJsZSB2YWx1ZXMgb2YgdGhlCiAgLy8vIGBGbGF0VHlwZU1hc2suZmxhZ3NgIHByb3BlcnR5LgogIGZpbmFsIExpc3Q8TWFwPENsYXNzRW50aXR5LCBUeXBlTWFzaz4+IF9jYW5vbmljYWxpemVkVHlwZU1hc2tzID0KICAgICAgbmV3IExpc3Q8TWFwPENsYXNzRW50aXR5LCBUeXBlTWFzaz4+LmZpbGxlZCg4LCBudWxsKTsKCiAgLy8vIFJldHVybiB0aGUgY2FjaGVkIG1hc2sgZm9yIFtiYXNlXSB3aXRoIHRoZSBnaXZlbiBmbGFncywgb3IKICAvLy8gY2FsbHMgW2NyZWF0ZU1hc2tdIHRvIGNyZWF0ZSB0aGUgbWFzayBhbmQgY2FjaGUgaXQuCiAgVHlwZU1hc2sgZ2V0Q2FjaGVkTWFzayhDbGFzc0VudGl0eSBiYXNlLCBpbnQgZmxhZ3MsIFR5cGVNYXNrIGNyZWF0ZU1hc2soKSkgewogICAgTWFwPENsYXNzRW50aXR5LCBUeXBlTWFzaz4gY2FjaGVkTWFza3MgPQogICAgICAgIF9jYW5vbmljYWxpemVkVHlwZU1hc2tzW2ZsYWdzXSA/Pz0gPENsYXNzRW50aXR5LCBUeXBlTWFzaz57fTsKICAgIHJldHVybiBjYWNoZWRNYXNrcy5wdXRJZkFic2VudChiYXNlLCBjcmVhdGVNYXNrKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBkeW5hbWljVHlwZSA9PiBfZHluYW1pY1R5cGUgPz89IG5ldyBUeXBlTWFzay5zdWJjbGFzcygKICAgICAgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgbm9uTnVsbFR5cGUgPT4gX25vbk51bGxUeXBlID8/PSBuZXcgVHlwZU1hc2subm9uTnVsbFN1YmNsYXNzKAogICAgICBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBpbnRUeXBlID0+IF9pbnRUeXBlID8/PQogICAgICBuZXcgVHlwZU1hc2subm9uTnVsbFN1YmNsYXNzKGNvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCB1aW50MzJUeXBlID0+IF91aW50MzJUeXBlID8/PQogICAgICBuZXcgVHlwZU1hc2subm9uTnVsbFN1YmNsYXNzKGNvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCB1aW50MzFUeXBlID0+IF91aW50MzFUeXBlID8/PQogICAgICBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KGNvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBwb3NpdGl2ZUludFR5cGUgPT4KICAgICAgX3Bvc2l0aXZlSW50VHlwZSA/Pz0gbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJjbGFzcygKICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IGRvdWJsZVR5cGUgPT4gX2RvdWJsZVR5cGUgPz89CiAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QoY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IG51bVR5cGUgPT4gX251bVR5cGUgPz89CiAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsU3ViY2xhc3MoY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IGJvb2xUeXBlID0+IF9ib29sVHlwZSA/Pz0KICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdChjb21tb25FbGVtZW50cy5qc0Jvb2xDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IGZ1bmN0aW9uVHlwZSA9PiBfZnVuY3Rpb25UeXBlID8/PQogICAgICBuZXcgVHlwZU1hc2subm9uTnVsbFN1YnR5cGUoY29tbW9uRWxlbWVudHMuZnVuY3Rpb25DbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IGxpc3RUeXBlID0+IF9saXN0VHlwZSA/Pz0KICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdChjb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBjb25zdExpc3RUeXBlID0+IF9jb25zdExpc3RUeXBlID8/PSBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KAogICAgICBjb21tb25FbGVtZW50cy5qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBmaXhlZExpc3RUeXBlID0+IF9maXhlZExpc3RUeXBlID8/PQogICAgICBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KGNvbW1vbkVsZW1lbnRzLmpzRml4ZWRBcnJheUNsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgZ3Jvd2FibGVMaXN0VHlwZSA9PgogICAgICBfZ3Jvd2FibGVMaXN0VHlwZSA/Pz0gbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdCgKICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLmpzRXh0ZW5kYWJsZUFycmF5Q2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBzZXRUeXBlID0+IF9zZXRUeXBlID8/PQogICAgICBuZXcgVHlwZU1hc2subm9uTnVsbFN1YnR5cGUoY29tbW9uRWxlbWVudHMuc2V0TGl0ZXJhbENsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgY29uc3RTZXRUeXBlID0+IF9jb25zdFNldFR5cGUgPz89IG5ldyBUeXBlTWFzay5ub25OdWxsU3VidHlwZSgKICAgICAgY29tbW9uRWxlbWVudHMuY29uc3RTZXRMaXRlcmFsQ2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBtYXBUeXBlID0+IF9tYXBUeXBlID8/PQogICAgICBuZXcgVHlwZU1hc2subm9uTnVsbFN1YnR5cGUoY29tbW9uRWxlbWVudHMubWFwTGl0ZXJhbENsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgY29uc3RNYXBUeXBlID0+IF9jb25zdE1hcFR5cGUgPz89IG5ldyBUeXBlTWFzay5ub25OdWxsU3VidHlwZSgKICAgICAgY29tbW9uRWxlbWVudHMuY29uc3RNYXBMaXRlcmFsQ2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCBzdHJpbmdUeXBlID0+IF9zdHJpbmdUeXBlID8/PQogICAgICBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KGNvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGdldCB0eXBlVHlwZSA9PiBfdHlwZVR5cGUgPz89CiAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QoY29tbW9uRWxlbWVudHMudHlwZUxpdGVyYWxDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IHN5bmNTdGFySXRlcmFibGVUeXBlID0+IF9zeW5jU3Rhckl0ZXJhYmxlVHlwZSA/Pz0KICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxFeGFjdChjb21tb25FbGVtZW50cy5zeW5jU3Rhckl0ZXJhYmxlLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgYXN5bmNGdXR1cmVUeXBlID0+CiAgICAgIF9hc3luY0Z1dHVyZVR5cGUgPz89IG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QoCiAgICAgICAgICBjb21tb25FbGVtZW50cy5mdXR1cmVJbXBsZW1lbnRhdGlvbiwgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgZ2V0IGFzeW5jU3RhclN0cmVhbVR5cGUgPT4gX2FzeW5jU3RhclN0cmVhbVR5cGUgPz89CiAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QoY29tbW9uRWxlbWVudHMuY29udHJvbGxlclN0cmVhbSwgX2Nsb3NlZFdvcmxkKTsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXNzZXJ0IHRoYXQgdGhlIG51bGwgdHlwZSBoYXMgYmVlbiByZXNvbHZlZC4KICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgbnVsbFR5cGUgPT4gX251bGxUeXBlID8/PSBjb25zdCBUeXBlTWFzay5lbXB0eSgpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBnZXQgZW1wdHlUeXBlID0+IGNvbnN0IFR5cGVNYXNrLm5vbk51bGxFbXB0eSgpOwoKICBUeXBlTWFzayBnZXQgaW5kZXhhYmxlUHJpbWl0aXZlVHlwZSA9PgogICAgICBfaW5kZXhhYmxlUHJpbWl0aXZlVHlwZSA/Pz0gbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJ0eXBlKAogICAgICAgICAgY29tbW9uRWxlbWVudHMuanNJbmRleGFibGVDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgVHlwZU1hc2sgZ2V0IHJlYWRhYmxlQXJyYXlUeXBlID0+IF9yZWFkYWJsZUFycmF5VHlwZSA/Pz0KICAgICAgbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJjbGFzcyhjb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIFR5cGVNYXNrIGdldCBtdXRhYmxlQXJyYXlUeXBlID0+CiAgICAgIF9tdXRhYmxlQXJyYXlUeXBlID8/PSBuZXcgVHlwZU1hc2subm9uTnVsbFN1YmNsYXNzKAogICAgICAgICAgY29tbW9uRWxlbWVudHMuanNNdXRhYmxlQXJyYXlDbGFzcywgX2Nsb3NlZFdvcmxkKTsKCiAgVHlwZU1hc2sgZ2V0IHVubW9kaWZpYWJsZUFycmF5VHlwZSA9PgogICAgICBfdW5tb2RpZmlhYmxlQXJyYXlUeXBlID8/PSBuZXcgVHlwZU1hc2subm9uTnVsbEV4YWN0KAogICAgICAgICAgY29tbW9uRWxlbWVudHMuanNVbm1vZGlmaWFibGVBcnJheUNsYXNzLCBfY2xvc2VkV29ybGQpOwoKICBUeXBlTWFzayBnZXQgaW50ZXJjZXB0b3JUeXBlID0+CiAgICAgIF9pbnRlcmNlcHRvclR5cGUgPz89IG5ldyBUeXBlTWFzay5ub25OdWxsU3ViY2xhc3MoCiAgICAgICAgICBjb21tb25FbGVtZW50cy5qc0ludGVyY2VwdG9yQ2xhc3MsIF9jbG9zZWRXb3JsZCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1R5cGVkQXJyYXkoVHlwZU1hc2sgbWFzaykgewogICAgLy8gSnVzdCBjaGVja2luZyBmb3IgYFR5cGVkRGF0YWAgaXMgbm90IHN1ZmZpY2llbnQsIGFzIGl0IGlzIGFuIGFic3RyYWN0CiAgICAvLyBjbGFzcyBhbnkgdXNlci1kZWZpbmVkIGNsYXNzIGNhbiBpbXBsZW1lbnQuIFNvIHdlIGFsc28gY2hlY2sgZm9yIHRoZQogICAgLy8gaW50ZXJmYWNlIGBKYXZhU2NyaXB0SW5kZXhpbmdCZWhhdmlvcmAuCiAgICBDbGFzc0VudGl0eSB0eXBlZERhdGFDbGFzcyA9IF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy50eXBlZERhdGFDbGFzczsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUodHlwZWREYXRhQ2xhc3MgIT0gbnVsbCAmJgogICAgICAgIF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZCh0eXBlZERhdGFDbGFzcykgJiYKICAgICAgICBtYXNrLnNhdGlzZmllcyh0eXBlZERhdGFDbGFzcywgX2Nsb3NlZFdvcmxkKSAmJgogICAgICAgIG1hc2suc2F0aXNmaWVzKF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc0luZGV4aW5nQmVoYXZpb3JJbnRlcmZhY2UsCiAgICAgICAgICAgIF9jbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGNvdWxkQmVUeXBlZEFycmF5KFR5cGVNYXNrIG1hc2spIHsKICAgIGJvb2wgaW50ZXJzZWN0cyhUeXBlTWFzayB0eXBlMSwgVHlwZU1hc2sgdHlwZTIpID0+CiAgICAgICAgIXR5cGUxLmludGVyc2VjdGlvbih0eXBlMiwgX2Nsb3NlZFdvcmxkKS5pc0VtcHR5OwogICAgLy8gVE9ETyhoZXJodXQpOiBNYXliZSBjYWNoZSB0aGUgVHlwZU1hc2sgZm9yIHR5cGVkRGF0YUNsYXNzIGFuZAogICAgLy8gICAgICAgICAgICAgICBqc0luZGV4aW5nQmVoYXZpb3VySW50ZXJmYWNlLgogICAgQ2xhc3NFbnRpdHkgdHlwZWREYXRhQ2xhc3MgPSBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMudHlwZWREYXRhQ2xhc3M7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLm1heWJlT3JGYWxzZSh0eXBlZERhdGFDbGFzcyAhPSBudWxsICYmCiAgICAgICAgX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKHR5cGVkRGF0YUNsYXNzKSAmJgogICAgICAgIGludGVyc2VjdHMobWFzaywgbmV3IFR5cGVNYXNrLnN1YnR5cGUodHlwZWREYXRhQ2xhc3MsIF9jbG9zZWRXb3JsZCkpICYmCiAgICAgICAgaW50ZXJzZWN0cygKICAgICAgICAgICAgbWFzaywKICAgICAgICAgICAgbmV3IFR5cGVNYXNrLnN1YnR5cGUoCiAgICAgICAgICAgICAgICBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNJbmRleGluZ0JlaGF2aW9ySW50ZXJmYWNlLAogICAgICAgICAgICAgICAgX2Nsb3NlZFdvcmxkKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgY3JlYXRlTm9uTnVsbEV4YWN0KENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QoY2xzLCBfY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgY3JlYXRlTnVsbGFibGVFeGFjdChDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBuZXcgVHlwZU1hc2suZXhhY3QoY2xzLCBfY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgY3JlYXRlTm9uTnVsbFN1YmNsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIG5ldyBUeXBlTWFzay5ub25OdWxsU3ViY2xhc3MoY2xzLCBfY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgY3JlYXRlTm9uTnVsbFN1YnR5cGUoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gbmV3IFR5cGVNYXNrLm5vbk51bGxTdWJ0eXBlKGNscywgX2Nsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGNyZWF0ZU51bGxhYmxlU3VidHlwZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBuZXcgVHlwZU1hc2suc3VidHlwZShjbHMsIF9jbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbiBjcmVhdGVGcm9tU3RhdGljVHlwZShEYXJ0VHlwZSB0eXBlLAogICAgICBbQ2xhc3NSZWxhdGlvbiBjbGFzc1JlbGF0aW9uID0gQ2xhc3NSZWxhdGlvbi5zdWJ0eXBlXSkgewogICAgYm9vbCBpc1ByZWNpc2UgPSB0cnVlOwogICAgd2hpbGUgKHR5cGUgaXMgVHlwZVZhcmlhYmxlVHlwZSkgewogICAgICBUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSA9IHR5cGU7CiAgICAgIHR5cGUgPSBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgICAuZ2V0VHlwZVZhcmlhYmxlQm91bmQodHlwZVZhcmlhYmxlLmVsZW1lbnQpOwogICAgICBjbGFzc1JlbGF0aW9uID0gQ2xhc3NSZWxhdGlvbi5zdWJ0eXBlOwogICAgICBpc1ByZWNpc2UgPSBmYWxzZTsKICAgIH0KICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgaWYgKGlzUHJlY2lzZSkgewogICAgICAgIC8vIFRPRE8oc3JhKTogQ291bGQgYmUgcHJlY2lzZSBpZiBpbnN0YW50aWF0ZWQtdG8tYm91bmRzLgogICAgICAgIGZvciAoRGFydFR5cGUgYXJndW1lbnQgaW4gdHlwZS50eXBlQXJndW1lbnRzKSB7CiAgICAgICAgICBpZiAoYXJndW1lbnQgaXMgRHluYW1pY1R5cGUpIGNvbnRpbnVlOwogICAgICAgICAgaXNQcmVjaXNlID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN3aXRjaCAoY2xhc3NSZWxhdGlvbikgewogICAgICAgIGNhc2UgQ2xhc3NSZWxhdGlvbi5leGFjdDoKICAgICAgICAgIHJldHVybiBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbigKICAgICAgICAgICAgICBUeXBlTWFzay5leGFjdCh0eXBlLmVsZW1lbnQsIF9jbG9zZWRXb3JsZCksIGlzUHJlY2lzZSk7CiAgICAgICAgY2FzZSBDbGFzc1JlbGF0aW9uLnRoaXNFeHByZXNzaW9uOgogICAgICAgICAgaWYgKCFfY2xvc2VkV29ybGQuaXNVc2VkQXNNaXhpbih0eXBlLmVsZW1lbnQpKSB7CiAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbigKICAgICAgICAgICAgICAgIFR5cGVNYXNrLnN1YmNsYXNzKHR5cGUuZWxlbWVudCwgX2Nsb3NlZFdvcmxkKSwgaXNQcmVjaXNlKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQ2xhc3NSZWxhdGlvbi5zdWJ0eXBlOgogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcmV0dXJuIEFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uKAogICAgICAgICAgVHlwZU1hc2suc3VidHlwZSh0eXBlLmVsZW1lbnQsIF9jbG9zZWRXb3JsZCksIGlzUHJlY2lzZSk7CiAgICB9IGVsc2UgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgIHJldHVybiBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbigKICAgICAgICAgIFR5cGVNYXNrLnN1YnR5cGUoY29tbW9uRWxlbWVudHMuZnVuY3Rpb25DbGFzcywgX2Nsb3NlZFdvcmxkKSwgZmFsc2UpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIEFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uKGR5bmFtaWNUeXBlLCBmYWxzZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBleGNsdWRlTnVsbChUeXBlTWFzayBtYXNrKSA9PiBtYXNrLm5vbk51bGxhYmxlKCk7CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGluY2x1ZGVOdWxsKFR5cGVNYXNrIG1hc2spID0+IG1hc2subnVsbGFibGUoKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGNvbnRhaW5zVHlwZShUeXBlTWFzayB0eXBlTWFzaywgQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKF9jb250YWluc1R5cGUodHlwZU1hc2ssIGNscykpOwogIH0KCiAgYm9vbCBfY29udGFpbnNUeXBlKFR5cGVNYXNrIHR5cGVNYXNrLCBDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNJbnN0YW50aWF0ZWQoY2xzKSAmJgogICAgICAgIHR5cGVNYXNrLmNvbnRhaW5zKGNscywgX2Nsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBjb250YWluc09ubHlUeXBlKFR5cGVNYXNrIHR5cGVNYXNrLCBDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoX2NvbnRhaW5zT25seVR5cGUodHlwZU1hc2ssIGNscykpOwogIH0KCiAgYm9vbCBfY29udGFpbnNPbmx5VHlwZShUeXBlTWFzayB0eXBlTWFzaywgQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKGNscykgJiYKICAgICAgICB0eXBlTWFzay5jb250YWluc09ubHkoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0luc3RhbmNlT2ZPck51bGwoVHlwZU1hc2sgdHlwZU1hc2ssIENsYXNzRW50aXR5IGNscykgPT4KICAgICAgQWJzdHJhY3RCb29sLnRydWVPck1heWJlKF9pc0luc3RhbmNlT2ZPck51bGwodHlwZU1hc2ssIGNscykpOwoKICBib29sIF9pc0luc3RhbmNlT2ZPck51bGwoVHlwZU1hc2sgdHlwZU1hc2ssIENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIF9jbG9zZWRXb3JsZC5pc0ltcGxlbWVudGVkKGNscykgJiYKICAgICAgICB0eXBlTWFzay5zYXRpc2ZpZXMoY2xzLCBfY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzSW5zdGFuY2VPZigKICAgICAgY292YXJpYW50IFR5cGVNYXNrIGV4cHJlc3Npb25NYXNrLCBDbGFzc0VudGl0eSBjbHMpIHsKICAgIEFic3RyYWN0VmFsdWUgdHlwZU1hc2sgPSAoY2xzID09IGNvbW1vbkVsZW1lbnRzLm51bGxDbGFzcykKICAgICAgICA/IGNyZWF0ZU51bGxhYmxlU3VidHlwZShjbHMpCiAgICAgICAgOiBjcmVhdGVOb25OdWxsU3VidHlwZShjbHMpOwogICAgaWYgKGV4cHJlc3Npb25NYXNrLnVuaW9uKHR5cGVNYXNrLCBfY2xvc2VkV29ybGQpID09IHR5cGVNYXNrKSB7CiAgICAgIHJldHVybiBBYnN0cmFjdEJvb2wuVHJ1ZTsKICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbk1hc2suaXNEaXNqb2ludCh0eXBlTWFzaywgX2Nsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gQWJzdHJhY3RCb29sLkZhbHNlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIEFic3RyYWN0Qm9vbC5NYXliZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0VtcHR5KFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUodmFsdWUuaXNFbXB0eSk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0V4YWN0KFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUodmFsdWUuaXNFeGFjdCAmJiAhdmFsdWUuaXNOdWxsYWJsZSk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0V4YWN0T3JOdWxsKFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUodmFsdWUuaXNFeGFjdCB8fCBfaXNOdWxsKHZhbHVlKSk7CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldEV4YWN0Q2xhc3MoVHlwZU1hc2sgbWFzaykgewogICAgcmV0dXJuIG1hc2suc2luZ2xlQ2xhc3MoX2Nsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNQcmltaXRpdmVWYWx1ZShUeXBlTWFzayB2YWx1ZSkgPT4gdmFsdWUuaXNWYWx1ZTsKCiAgQG92ZXJyaWRlCiAgUHJpbWl0aXZlQ29uc3RhbnRWYWx1ZSBnZXRQcmltaXRpdmVWYWx1ZShUeXBlTWFzayBtYXNrKSB7CiAgICBpZiAobWFzay5pc1ZhbHVlKSB7CiAgICAgIFZhbHVlVHlwZU1hc2sgdmFsdWVNYXNrID0gbWFzazsKICAgICAgcmV0dXJuIHZhbHVlTWFzay52YWx1ZTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVQcmltaXRpdmVWYWx1ZSgKICAgICAgY292YXJpYW50IFR5cGVNYXNrIG9yaWdpbmFsVmFsdWUsIFByaW1pdGl2ZUNvbnN0YW50VmFsdWUgdmFsdWUpIHsKICAgIHJldHVybiBuZXcgVmFsdWVUeXBlTWFzayhvcmlnaW5hbFZhbHVlLCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNOdWxsKFR5cGVNYXNrIHZhbHVlKSB7CiAgICBpZiAodmFsdWUuaXNOdWxsKSB7CiAgICAgIHJldHVybiBBYnN0cmFjdEJvb2wuVHJ1ZTsKICAgIH0gZWxzZSBpZiAodmFsdWUuaXNOdWxsYWJsZSkgewogICAgICByZXR1cm4gQWJzdHJhY3RCb29sLk1heWJlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIEFic3RyYWN0Qm9vbC5GYWxzZTsKICAgIH0KICB9CgogIGJvb2wgX2lzTnVsbChUeXBlTWFzayB2YWx1ZSkgPT4gdmFsdWUuaXNOdWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmUoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wubWF5YmVPckZhbHNlKF9jYW5CZVByaW1pdGl2ZU51bWJlcih2YWx1ZSkgfHwKICAgICAgICBfY2FuQmVQcmltaXRpdmVBcnJheSh2YWx1ZSkgfHwKICAgICAgICBfY2FuQmVQcmltaXRpdmVCb29sZWFuKHZhbHVlKSB8fAogICAgICAgIF9jYW5CZVByaW1pdGl2ZVN0cmluZyh2YWx1ZSkgfHwKICAgICAgICBfaXNOdWxsKHZhbHVlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmVOdW1iZXIoVHlwZU1hc2sgdmFsdWUpID0+CiAgICAgIEFic3RyYWN0Qm9vbC5tYXliZU9yRmFsc2UoX2NhbkJlUHJpbWl0aXZlTnVtYmVyKHZhbHVlKSk7CgogIGJvb2wgX2NhbkJlUHJpbWl0aXZlTnVtYmVyKFR5cGVNYXNrIHZhbHVlKSB7CiAgICAvLyBUT0RPKHNyYSk6IEl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB0ZXN0IG9ubHkganNEb3VibGVDbGFzcyBhbmQKICAgIC8vIGpzVUludDMxQ2xhc3MsIHNpbmNlIGFsbCBvdGhlcnMgYXJlIHN1cGVyY2xhc3NlcyBvZiB0aGVzZSB0d28uCiAgICByZXR1cm4gX2NvbnRhaW5zVHlwZSh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcykgfHwKICAgICAgICBfY29udGFpbnNUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc0ludENsYXNzKSB8fAogICAgICAgIF9jb250YWluc1R5cGUodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcykgfHwKICAgICAgICBfY29udGFpbnNUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc1VJbnQzMkNsYXNzKSB8fAogICAgICAgIF9jb250YWluc1R5cGUodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MpIHx8CiAgICAgICAgX2NvbnRhaW5zVHlwZSh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmVCb29sZWFuKFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wubWF5YmVPckZhbHNlKF9jYW5CZVByaW1pdGl2ZUJvb2xlYW4odmFsdWUpKTsKCiAgYm9vbCBfY2FuQmVQcmltaXRpdmVCb29sZWFuKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gX2NvbnRhaW5zVHlwZSh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNCb29sQ2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlQXJyYXkoVHlwZU1hc2sgdmFsdWUpID0+CiAgICAgIEFic3RyYWN0Qm9vbC5tYXliZU9yRmFsc2UoX2NhbkJlUHJpbWl0aXZlQXJyYXkodmFsdWUpKTsKCiAgYm9vbCBfY2FuQmVQcmltaXRpdmVBcnJheShUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIF9jb250YWluc1R5cGUodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcykgfHwKICAgICAgICBfY29udGFpbnNUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc0ZpeGVkQXJyYXlDbGFzcykgfHwKICAgICAgICBfY29udGFpbnNUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc0V4dGVuZGFibGVBcnJheUNsYXNzKSB8fAogICAgICAgIF9jb250YWluc1R5cGUodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNJbmRleGFibGVQcmltaXRpdmUoVHlwZU1hc2sgdmFsdWUpID0+CiAgICAgIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZShfaXNJbmRleGFibGVQcmltaXRpdmUodmFsdWUpKTsKCiAgYm9vbCBfaXNJbmRleGFibGVQcmltaXRpdmUoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZS5jb250YWluc09ubHlTdHJpbmcoX2Nsb3NlZFdvcmxkKSB8fAogICAgICAgIF9pc0luc3RhbmNlT2ZPck51bGwodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzSW5kZXhhYmxlQ2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzRml4ZWRBcnJheShUeXBlTWFzayB2YWx1ZSkgewogICAgLy8gVE9ETyhzcmEpOiBSZWNvZ25pemUgdGhlIHVuaW9uIG9mIHRoZXNlIHR5cGVzIGFzIHdlbGwuCiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKAogICAgICAgIF9jb250YWluc09ubHlUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc0ZpeGVkQXJyYXlDbGFzcykgfHwKICAgICAgICAgICAgX2NvbnRhaW5zT25seVR5cGUodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzRXh0ZW5kYWJsZUFycmF5KFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKAogICAgICAgIF9jb250YWluc09ubHlUeXBlKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc0V4dGVuZGFibGVBcnJheUNsYXNzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNNdXRhYmxlQXJyYXkoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoCiAgICAgICAgX2lzSW5zdGFuY2VPZk9yTnVsbCh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNNdXRhYmxlQXJyYXlDbGFzcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzTXV0YWJsZUluZGV4YWJsZShUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSgKICAgICAgICBfaXNJbnN0YW5jZU9mT3JOdWxsKHZhbHVlLCBjb21tb25FbGVtZW50cy5qc011dGFibGVJbmRleGFibGVDbGFzcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzQXJyYXkoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoCiAgICAgICAgX2lzSW5zdGFuY2VPZk9yTnVsbCh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmVTdHJpbmcoVHlwZU1hc2sgdmFsdWUpID0+CiAgICAgIEFic3RyYWN0Qm9vbC5tYXliZU9yRmFsc2UoX2NhbkJlUHJpbWl0aXZlU3RyaW5nKHZhbHVlKSk7CgogIGJvb2wgX2NhbkJlUHJpbWl0aXZlU3RyaW5nKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gX2NvbnRhaW5zVHlwZSh2YWx1ZSwgY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNJbnRlZ2VyKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKAogICAgICAgIHZhbHVlLmNvbnRhaW5zT25seUludChfY2xvc2VkV29ybGQpICYmICF2YWx1ZS5pc051bGxhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1VJbnQzMihUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSghdmFsdWUuaXNOdWxsYWJsZSAmJgogICAgICAgIF9pc0luc3RhbmNlT2ZPck51bGwodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3MpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1VJbnQzMShUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSghdmFsdWUuaXNOdWxsYWJsZSAmJgogICAgICAgIF9pc0luc3RhbmNlT2ZPck51bGwodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1Bvc2l0aXZlSW50ZWdlcihUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSghdmFsdWUuaXNOdWxsYWJsZSAmJgogICAgICAgIF9pc0luc3RhbmNlT2ZPck51bGwodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzUG9zaXRpdmVJbnRlZ2VyT3JOdWxsKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKAogICAgICAgIF9pc0luc3RhbmNlT2ZPck51bGwodmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzSW50ZWdlck9yTnVsbChUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSh2YWx1ZS5jb250YWluc09ubHlJbnQoX2Nsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNOdW1iZXIoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoCiAgICAgICAgdmFsdWUuY29udGFpbnNPbmx5TnVtKF9jbG9zZWRXb3JsZCkgJiYgIXZhbHVlLmlzTnVsbGFibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzTnVtYmVyT3JOdWxsKFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoX2lzTnVtYmVyT3JOdWxsKHZhbHVlKSk7CgogIGJvb2wgX2lzTnVtYmVyT3JOdWxsKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUuY29udGFpbnNPbmx5TnVtKF9jbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNEb3VibGUoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoCiAgICAgICAgdmFsdWUuY29udGFpbnNPbmx5RG91YmxlKF9jbG9zZWRXb3JsZCkgJiYgIXZhbHVlLmlzTnVsbGFibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzRG91YmxlT3JOdWxsKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKHZhbHVlLmNvbnRhaW5zT25seURvdWJsZShfY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0Jvb2xlYW4oVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoCiAgICAgICAgdmFsdWUuY29udGFpbnNPbmx5Qm9vbChfY2xvc2VkV29ybGQpICYmICF2YWx1ZS5pc051bGxhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0Jvb2xlYW5Pck51bGwoVHlwZU1hc2sgdmFsdWUpID0+CiAgICAgIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZShfaXNCb29sZWFuT3JOdWxsKHZhbHVlKSk7CgogIGJvb2wgX2lzQm9vbGVhbk9yTnVsbChUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlLmNvbnRhaW5zT25seUJvb2woX2Nsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1N0cmluZyhUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZSgKICAgICAgICB2YWx1ZS5jb250YWluc09ubHlTdHJpbmcoX2Nsb3NlZFdvcmxkKSAmJiAhdmFsdWUuaXNOdWxsYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNTdHJpbmdPck51bGwoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUodmFsdWUuY29udGFpbnNPbmx5U3RyaW5nKF9jbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlT3JOdWxsKFR5cGVNYXNrIHZhbHVlKSA9PgogICAgICBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoX2lzUHJpbWl0aXZlT3JOdWxsKHZhbHVlKSk7CgogIGJvb2wgX2lzUHJpbWl0aXZlT3JOdWxsKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gX2lzSW5kZXhhYmxlUHJpbWl0aXZlKHZhbHVlKSB8fAogICAgICAgIF9pc051bWJlck9yTnVsbCh2YWx1ZSkgfHwKICAgICAgICBfaXNCb29sZWFuT3JOdWxsKHZhbHVlKSB8fAogICAgICAgIF9pc051bGwodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdW5pb24oVHlwZU1hc2sgYSwgVHlwZU1hc2sgYikgPT4gYS51bmlvbihiLCBfY2xvc2VkV29ybGQpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBpbnRlcnNlY3Rpb24oVHlwZU1hc2sgYSwgVHlwZU1hc2sgYikgPT4KICAgICAgYS5pbnRlcnNlY3Rpb24oYiwgX2Nsb3NlZFdvcmxkKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGFyZURpc2pvaW50KFR5cGVNYXNrIGEsIFR5cGVNYXNrIGIpID0+CiAgICAgIEFic3RyYWN0Qm9vbC50cnVlT3JNYXliZShhLmlzRGlzam9pbnQoYiwgX2Nsb3NlZFdvcmxkKSk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBjb250YWluc0FsbChUeXBlTWFzayBhKSA9PgogICAgICBBYnN0cmFjdEJvb2wubWF5YmVPckZhbHNlKGEuY29udGFpbnNBbGwoX2Nsb3NlZFdvcmxkKSk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZUFic3RyYWN0VmFsdWVGb3JDb25zdGFudChDb25zdGFudFZhbHVlIHZhbHVlKSB7CiAgICByZXR1cm4gY29tcHV0ZVR5cGVNYXNrKF9jbG9zZWRXb3JsZCwgdmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXRNYXBLZXlUeXBlKEFic3RyYWN0VmFsdWUgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSBpcyBNYXBUeXBlTWFzaykgewogICAgICByZXR1cm4gdmFsdWUua2V5VHlwZTsKICAgIH0KICAgIHJldHVybiBkeW5hbWljVHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0TWFwVmFsdWVUeXBlKEFic3RyYWN0VmFsdWUgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSBpcyBNYXBUeXBlTWFzaykgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBc3NlcnQgdGhlIGB2YWx1ZS52YWx1ZVR5cGVgIGlzIG5vdCBudWxsLgogICAgICByZXR1cm4gdmFsdWUudmFsdWVUeXBlID8/IGR5bmFtaWNUeXBlOwogICAgfQogICAgcmV0dXJuIGR5bmFtaWNUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXRDb250YWluZXJFbGVtZW50VHlwZShBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgQ29udGFpbmVyVHlwZU1hc2spIHsKICAgICAgcmV0dXJuIHZhbHVlLmVsZW1lbnRUeXBlID8/IGR5bmFtaWNUeXBlOwogICAgfQogICAgcmV0dXJuIGR5bmFtaWNUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldENvbnRhaW5lckxlbmd0aChBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUgaXMgQ29udGFpbmVyVHlwZU1hc2sgPyB2YWx1ZS5sZW5ndGggOiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjcmVhdGVDb250YWluZXJWYWx1ZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBmb3J3YXJkVG8sCiAgICAgIE9iamVjdCBhbGxvY2F0aW9uTm9kZSwKICAgICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50LAogICAgICBBYnN0cmFjdFZhbHVlIGVsZW1lbnRUeXBlLAogICAgICBpbnQgbGVuZ3RoKSB7CiAgICByZXR1cm4gbmV3IENvbnRhaW5lclR5cGVNYXNrKAogICAgICAgIGZvcndhcmRUbywgYWxsb2NhdGlvbk5vZGUsIGFsbG9jYXRpb25FbGVtZW50LCBlbGVtZW50VHlwZSwgbGVuZ3RoKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdW5pb25PZk1hbnkoSXRlcmFibGU8QWJzdHJhY3RWYWx1ZT4gdmFsdWVzKSB7CiAgICBUeXBlTWFzayByZXN1bHQgPSBjb25zdCBUeXBlTWFzay5ub25OdWxsRW1wdHkoKTsKICAgIGZvciAoVHlwZU1hc2sgdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgIHJlc3VsdCA9IHJlc3VsdC51bmlvbih2YWx1ZSwgX2Nsb3NlZFdvcmxkKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVSZWNlaXZlcihJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IG1lbWJlcnMpIHsKICAgIGFzc2VydChfY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkKICAgICAgICAuaGFzQW55U3RyaWN0U3ViY2xhc3MoX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKSk7CiAgICByZXR1cm4gbmV3IFR5cGVNYXNrLnVuaW9uT2YoCiAgICAgICAgbWVtYmVycy5leHBhbmQoKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAgICAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50LmVuY2xvc2luZ0NsYXNzOwogICAgICAgICAgcmV0dXJuIFtjbHNdLi5hZGRBbGwoX2Nsb3NlZFdvcmxkLm1peGluVXNlc09mKGNscykpOwogICAgICAgIH0pLm1hcCgoY2xzKSB7CiAgICAgICAgICBpZiAoX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzTnVsbENsYXNzID09IGNscykgewogICAgICAgICAgICByZXR1cm4gY29uc3QgVHlwZU1hc2suZW1wdHkoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKGNscykpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlTWFzay5ub25OdWxsU3ViY2xhc3MoY2xzLCBfY2xvc2VkV29ybGQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhlIG5lZWQgZm9yIHRoaXMgY2FzZS4KICAgICAgICAgICAgcmV0dXJuIGNvbnN0IFR5cGVNYXNrLmVtcHR5KCk7CiAgICAgICAgICB9CiAgICAgICAgfSksCiAgICAgICAgX2Nsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc1RhcmdldGluZ01lbWJlcigKICAgICAgY292YXJpYW50IFR5cGVNYXNrIHJlY2VpdmVyLCBNZW1iZXJFbnRpdHkgbWVtYmVyLCBOYW1lIG5hbWUpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wubWF5YmVPckZhbHNlKAogICAgICAgIHJlY2VpdmVyLmNhbkhpdChtZW1iZXIsIG5hbWUsIF9jbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIG5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoCiAgICAgIGNvdmFyaWFudCBUeXBlTWFzayByZWNlaXZlciwgU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yRmFsc2UoCiAgICAgICAgcmVjZWl2ZXIubmVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZyhzZWxlY3RvciwgX2Nsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgY29udGFpbnMoCiAgICAgIGNvdmFyaWFudCBUeXBlTWFzayBzdXBlcnNldCwgY292YXJpYW50IFR5cGVNYXNrIHN1YnNldCkgewogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC5tYXliZU9yRmFsc2UoCiAgICAgICAgc3VwZXJzZXQuY29udGFpbnNNYXNrKHN1YnNldCwgX2Nsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNJbihjb3ZhcmlhbnQgVHlwZU1hc2sgc3Vic2V0LCBjb3ZhcmlhbnQgVHlwZU1hc2sgc3VwZXJzZXQpIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUoc3Vic2V0LmlzSW5NYXNrKHN1cGVyc2V0LCBfY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBsb2NhdGVTaW5nbGVNZW1iZXIoCiAgICAgIGNvdmFyaWFudCBUeXBlTWFzayByZWNlaXZlciwgU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIHJldHVybiByZWNlaXZlci5sb2NhdGVTaW5nbGVNZW1iZXIoc2VsZWN0b3IsIF9jbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdEJvb2wgaXNKc0luZGV4YWJsZShUeXBlTWFzayBtYXNrKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLnRydWVPck1heWJlKG1hc2suc2F0aXNmaWVzKAogICAgICAgIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc0luZGV4YWJsZUNsYXNzLCBfY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0pzSW5kZXhhYmxlQW5kSXRlcmFibGUoY292YXJpYW50IFR5cGVNYXNrIG1hc2spIHsKICAgIHJldHVybiBBYnN0cmFjdEJvb2wudHJ1ZU9yTWF5YmUobWFzayAhPSBudWxsICYmCiAgICAgICAgbWFzay5zYXRpc2ZpZXMoCiAgICAgICAgICAgIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc0luZGV4YWJsZUNsYXNzLCBfY2xvc2VkV29ybGQpICYmCiAgICAgICAgLy8gU3RyaW5nIGlzIGluZGV4YWJsZSBidXQgbm90IGl0ZXJhYmxlLgogICAgICAgICFtYXNrLnNhdGlzZmllcygKICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MsIF9jbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RCb29sIGlzRml4ZWRMZW5ndGhKc0luZGV4YWJsZShjb3ZhcmlhbnQgVHlwZU1hc2sgbWFzaykgewogICAgaWYgKG1hc2suaXNDb250YWluZXIgJiYgKG1hc2sgYXMgQ29udGFpbmVyVHlwZU1hc2spLmxlbmd0aCAhPSBudWxsKSB7CiAgICAgIC8vIEEgY29udGFpbmVyIG9uIHdoaWNoIHdlIGhhdmUgaW5mZXJyZWQgdGhlIGxlbmd0aC4KICAgICAgcmV0dXJuIEFic3RyYWN0Qm9vbC5UcnVlOwogICAgfQogICAgLy8gVE9ETyhzcmEpOiBSZWNvZ25pemUgYW55IGNvbWJpbmF0aW9uIG9mIGZpeGVkIGxlbmd0aCBpbmRleGFibGVzLgogICAgaWYgKG1hc2suY29udGFpbnNPbmx5KF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc0ZpeGVkQXJyYXlDbGFzcykgfHwKICAgICAgICBtYXNrLmNvbnRhaW5zT25seSgKICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcykgfHwKICAgICAgICBtYXNrLmNvbnRhaW5zT25seVN0cmluZyhfY2xvc2VkV29ybGQpIHx8CiAgICAgICAgX2Nsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uaXNUeXBlZEFycmF5KG1hc2spLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIEFic3RyYWN0Qm9vbC5UcnVlOwogICAgfQogICAgcmV0dXJuIEFic3RyYWN0Qm9vbC5NYXliZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0Qm9vbCBpc0ludGVyY2VwdG9yKFR5cGVNYXNrIHZhbHVlKSB7CiAgICByZXR1cm4gQWJzdHJhY3RCb29sLm1heWJlT3JGYWxzZSgKICAgICAgICAhaW50ZXJjZXB0b3JUeXBlLmlzRGlzam9pbnQodmFsdWUsIF9jbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc01hcChUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlLmlzTWFwOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1NldChUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlLmlzU2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnRhaW5lcihUeXBlTWFzayB2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlLmlzQ29udGFpbmVyOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0RpY3Rpb25hcnkoVHlwZU1hc2sgdmFsdWUpIHsKICAgIHJldHVybiB2YWx1ZS5pc0RpY3Rpb25hcnk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zRGljdGlvbmFyeUtleShBYnN0cmFjdFZhbHVlIHZhbHVlLCBTdHJpbmcga2V5KSB7CiAgICByZXR1cm4gdmFsdWUgaXMgRGljdGlvbmFyeVR5cGVNYXNrICYmIHZhbHVlLmNvbnRhaW5zS2V5KGtleSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldERpY3Rpb25hcnlWYWx1ZUZvcktleShBYnN0cmFjdFZhbHVlIHZhbHVlLCBTdHJpbmcga2V5KSB7CiAgICBpZiAodmFsdWUgaXMgRGljdGlvbmFyeVR5cGVNYXNrKSByZXR1cm4gdmFsdWUuZ2V0VmFsdWVGb3JLZXkoa2V5KTsKICAgIHJldHVybiBkeW5hbWljVHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY3JlYXRlTWFwVmFsdWUoQWJzdHJhY3RWYWx1ZSBmb3J3YXJkVG8sIE9iamVjdCBhbGxvY2F0aW9uTm9kZSwKICAgICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50LCBBYnN0cmFjdFZhbHVlIGtleSwgQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgcmV0dXJuIG5ldyBNYXBUeXBlTWFzaygKICAgICAgICBmb3J3YXJkVG8sIGFsbG9jYXRpb25Ob2RlLCBhbGxvY2F0aW9uRWxlbWVudCwga2V5LCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNyZWF0ZURpY3Rpb25hcnlWYWx1ZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBmb3J3YXJkVG8sCiAgICAgIE9iamVjdCBhbGxvY2F0aW9uTm9kZSwKICAgICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50LAogICAgICBBYnN0cmFjdFZhbHVlIGtleSwKICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZSwKICAgICAgTWFwPFN0cmluZywgQWJzdHJhY3RWYWx1ZT4gbWFwcGluZ3MpIHsKICAgIHJldHVybiBuZXcgRGljdGlvbmFyeVR5cGVNYXNrKAogICAgICAgIGZvcndhcmRUbywgYWxsb2NhdGlvbk5vZGUsIGFsbG9jYXRpb25FbGVtZW50LCBrZXksIHZhbHVlLCBtYXBwaW5ncyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNyZWF0ZVNldFZhbHVlKEFic3RyYWN0VmFsdWUgZm9yd2FyZFRvLCBPYmplY3QgYWxsb2NhdGlvbk5vZGUsCiAgICAgIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudCwgQWJzdHJhY3RWYWx1ZSBlbGVtZW50VHlwZSkgewogICAgcmV0dXJuIG5ldyBTZXRUeXBlTWFzaygKICAgICAgICBmb3J3YXJkVG8sIGFsbG9jYXRpb25Ob2RlLCBhbGxvY2F0aW9uRWxlbWVudCwgZWxlbWVudFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXRTZXRFbGVtZW50VHlwZShBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgU2V0VHlwZU1hc2spIHsKICAgICAgcmV0dXJuIHZhbHVlLmVsZW1lbnRUeXBlID8/IGR5bmFtaWNUeXBlOwogICAgfQogICAgcmV0dXJuIGR5bmFtaWNUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1NwZWNpYWxpemF0aW9uT2YoCiAgICAgIEFic3RyYWN0VmFsdWUgc3BlY2lhbGl6YXRpb24sIEFic3RyYWN0VmFsdWUgZ2VuZXJhbGl6YXRpb24pIHsKICAgIHJldHVybiBzcGVjaWFsaXphdGlvbiBpcyBGb3J3YXJkaW5nVHlwZU1hc2sgJiYKICAgICAgICBzcGVjaWFsaXphdGlvbi5mb3J3YXJkVG8gPT0gZ2VuZXJhbGl6YXRpb247CiAgfQoKICBAb3ZlcnJpZGUKICBPYmplY3QgZ2V0QWxsb2NhdGlvbk5vZGUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIEFsbG9jYXRpb25UeXBlTWFzaykgewogICAgICByZXR1cm4gdmFsdWUuYWxsb2NhdGlvbk5vZGU7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBnZXRBbGxvY2F0aW9uRWxlbWVudChBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgQWxsb2NhdGlvblR5cGVNYXNrKSB7CiAgICAgIHJldHVybiB2YWx1ZS5hbGxvY2F0aW9uRWxlbWVudDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXRHZW5lcmFsaXphdGlvbihBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgQWxsb2NhdGlvblR5cGVNYXNrKSB7CiAgICAgIHJldHVybiB2YWx1ZS5mb3J3YXJkVG87CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0QWJzdHJhY3RWYWx1ZUZvck5hdGl2ZU1ldGhvZFBhcmFtZXRlclR5cGUoRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBpZiAodHlwZS50eXBlQXJndW1lbnRzLmlzTm90RW1wdHkpIHJldHVybiBudWxsOwogICAgICAvLyBUT0RPKHNyYSk6IENvbnNpZGVyIHVzaW5nIGEgc3RyZW5ndGhlbmVkIHR5cGUgY2hlY2sgdG8gYXZvaWQgcGFzc2luZwogICAgICAvLyBgbnVsbGAgdG8gcHJpbWl0aXZlIHR5cGVzIHNpbmNlIHRoZSBuYXRpdmUgbWV0aG9kcyB1c3VhbGx5IGhhdmUKICAgICAgLy8gbm9uLW51bGxhYmxlIHByaW1pdGl2ZSBwYXJhbWV0ZXIgdHlwZXMuCiAgICAgIHJldHVybiBjcmVhdGVOdWxsYWJsZVN1YnR5cGUodHlwZS5lbGVtZW50KTsKICAgIH0KICAgIGlmICh0eXBlIGlzIER5bmFtaWNUeXBlKSByZXR1cm4gZHluYW1pY1R5cGU7CiAgICAvLyBUT0RPKHNyYSk6IENvbnZlcnQgb3RoZXIgW0RhcnRUeXBlXXMgdG8gW0Fic3RyYWN0VmFsdWVdcwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0Q29tcGFjdFRleHQoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgcmV0dXJuIGZvcm1hdFR5cGUodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgcmVhZEFic3RyYWN0VmFsdWVGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgcmV0dXJuIHNvdXJjZS5yZWFkQ2FjaGVkPFR5cGVNYXNrPigKICAgICAgICAoKSA9PiBuZXcgVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgX2Nsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQWJzdHJhY3RWYWx1ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgY292YXJpYW50IFR5cGVNYXNrIHZhbHVlKSB7CiAgICBzaW5rLndyaXRlQ2FjaGVkPFR5cGVNYXNrPigKICAgICAgICB2YWx1ZSwgKFR5cGVNYXNrIHZhbHVlKSA9PiB2YWx1ZS53cml0ZVRvRGF0YVNpbmsoc2luaykpOwogIH0KfQoKLy8vIENvbnZlcnQgdGhlIGdpdmVuIFR5cGVNYXNrIHRvIGEgY29tcGFjdCBzdHJpbmcgZm9ybWF0LgovLy8KLy8vIFRoZSBkZWZhdWx0IGZvcm1hdCBpcyB0b28gdmVyYm9zZSBmb3IgdGhlIGdyYXBoIGZvcm1hdCBzaW5jZSBsb25nIHN0cmluZ3MKLy8vIGNyZWF0ZSBvYmxvbmcgbm9kZXMgdGhhdCBvYnN0cnVjdCB0aGUgZ3JhcGggbGF5b3V0LgpTdHJpbmcgZm9ybWF0VHlwZShUeXBlTWFzayB0eXBlKSB7CiAgaWYgKHR5cGUgaXMgRmxhdFR5cGVNYXNrKSB7CiAgICAvLyBUT0RPKGFzZ2VyZik6IERpc2FtYmlndWF0ZSBjbGFzc2VzIHdob3NlIG5hbWUgaXMgbm90IHVuaXF1ZS4gVXNpbmcgdGhlCiAgICAvLyAgICAgbGlicmFyeSBuYW1lIGZvciBhbGwgY2xhc3NlcyBpcyBub3QgYSBnb29kIGlkZWEsIHNpbmNlIGxpYnJhcnkgbmFtZXMKICAgIC8vICAgICBjYW4gYmUgcmVhbGx5IGxvbmcgYW5kIG1lc3MgdXAgdGhlIGxheW91dC4KICAgIC8vIENhcGl0YWxpemUgTnVsbCB0byBlbXBoYXNpemUgdGhhdCBpdCdzIHRoZSBudWxsIHR5cGUgbWFzayBhbmQgbm90CiAgICAvLyBhIG51bGwgdmFsdWUgd2UgYWNjaWRlbnRhbGx5IHByaW50ZWQgb3V0LgogICAgaWYgKHR5cGUuaXNFbXB0eU9yTnVsbCkgcmV0dXJuIHR5cGUuaXNOdWxsYWJsZSA/ICdOdWxsJyA6ICdFbXB0eSc7CiAgICBTdHJpbmcgbnVsbEZsYWcgPSB0eXBlLmlzTnVsbGFibGUgPyAnPycgOiAnJzsKICAgIFN0cmluZyBzdWJGbGFnID0gdHlwZS5pc0V4YWN0ID8gJycgOiB0eXBlLmlzU3ViY2xhc3MgPyAnKycgOiAnKic7CiAgICByZXR1cm4gJyR7dHlwZS5iYXNlLm5hbWV9JG51bGxGbGFnJHN1YkZsYWcnOwogIH0KICBpZiAodHlwZSBpcyBVbmlvblR5cGVNYXNrKSB7CiAgICByZXR1cm4gdHlwZS5kaXNqb2ludE1hc2tzLm1hcChmb3JtYXRUeXBlKS5qb2luKCcgfCAnKTsKICB9CiAgaWYgKHR5cGUgaXMgQ29udGFpbmVyVHlwZU1hc2spIHsKICAgIFN0cmluZyBjb250YWluZXIgPSBmb3JtYXRUeXBlKHR5cGUuZm9yd2Fy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IGZpbGUuCgpwYXJ0IG9mIG1hc2tzOwoKLy8vIEEgW1R5cGVNYXNrXSBmb3IgYSBzcGVjaWZpYyBhbGxvY2F0aW9uIHNpdGUgb2YgYSBjb250YWluZXIgKGN1cnJlbnRseSBvbmx5Ci8vLyBMaXN0KSB0aGF0IHdpbGwgZ2V0IHNwZWNpYWxpemVkIG9uY2UgdGhlIFtUeXBlR3JhcGhJbmZlcnJlcl0gcGhhc2UgZmluZHMgYW4KLy8vIGVsZW1lbnQgdHlwZSBmb3IgaXQuCmNsYXNzIENvbnRhaW5lclR5cGVNYXNrIGV4dGVuZHMgQWxsb2NhdGlvblR5cGVNYXNrIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0NvbnRhaW5lclR5cGVNYXNrXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NvbnRhaW5lci10eXBlLW1hc2snOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBUeXBlTWFzayBmb3J3YXJkVG87CgogIEBvdmVycmlkZQogIGZpbmFsIGlyLk5vZGUgYWxsb2NhdGlvbk5vZGU7CgogIEBvdmVycmlkZQogIGZpbmFsIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudDsKCiAgLy8gVGhlIGVsZW1lbnQgdHlwZSBvZiB0aGlzIGNvbnRhaW5lci4KICBmaW5hbCBUeXBlTWFzayBlbGVtZW50VHlwZTsKCiAgLy8gVGhlIGxlbmd0aCBvZiB0aGUgY29udGFpbmVyLgogIGZpbmFsIGludCBsZW5ndGg7CgogIENvbnRhaW5lclR5cGVNYXNrKHRoaXMuZm9yd2FyZFRvLCB0aGlzLmFsbG9jYXRpb25Ob2RlLCB0aGlzLmFsbG9jYXRpb25FbGVtZW50LAogICAgICB0aGlzLmVsZW1lbnRUeXBlLCB0aGlzLmxlbmd0aCk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbQ29udGFpbmVyVHlwZU1hc2tdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgQ29udGFpbmVyVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIFR5cGVNYXNrIGZvcndhcmRUbyA9IG5ldyBUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICBpci5UcmVlTm9kZSBhbGxvY2F0aW9uTm9kZSA9IHNvdXJjZS5yZWFkVHJlZU5vZGVPck51bGwoKTsKICAgIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudCA9IHNvdXJjZS5yZWFkTWVtYmVyT3JOdWxsKCk7CiAgICBUeXBlTWFzayBlbGVtZW50VHlwZSA9IG5ldyBUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICBpbnQgbGVuZ3RoID0gc291cmNlLnJlYWRJbnRPck51bGwoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgQ29udGFpbmVyVHlwZU1hc2soCiAgICAgICAgZm9yd2FyZFRvLCBhbGxvY2F0aW9uTm9kZSwgYWxsb2NhdGlvbkVsZW1lbnQsIGVsZW1lbnRUeXBlLCBsZW5ndGgpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbQ29udGFpbmVyVHlwZU1hc2tdIHRvIFtzaW5rXS4KICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShUeXBlTWFza0tpbmQuY29udGFpbmVyKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGZvcndhcmRUby53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlVHJlZU5vZGVPck51bGwoYWxsb2NhdGlvbk5vZGUpOwogICAgc2luay53cml0ZU1lbWJlck9yTnVsbChhbGxvY2F0aW9uRWxlbWVudCk7CiAgICBlbGVtZW50VHlwZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlSW50T3JOdWxsKGxlbmd0aCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgbnVsbGFibGUoKSB7CiAgICByZXR1cm4gaXNOdWxsYWJsZQogICAgICAgID8gdGhpcwogICAgICAgIDogbmV3IENvbnRhaW5lclR5cGVNYXNrKGZvcndhcmRUby5udWxsYWJsZSgpLCBhbGxvY2F0aW9uTm9kZSwKICAgICAgICAgICAgYWxsb2NhdGlvbkVsZW1lbnQsIGVsZW1lbnRUeXBlLCBsZW5ndGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgbm9uTnVsbGFibGUoKSB7CiAgICByZXR1cm4gaXNOdWxsYWJsZQogICAgICAgID8gbmV3IENvbnRhaW5lclR5cGVNYXNrKGZvcndhcmRUby5ub25OdWxsYWJsZSgpLCBhbGxvY2F0aW9uTm9kZSwKICAgICAgICAgICAgYWxsb2NhdGlvbkVsZW1lbnQsIGVsZW1lbnRUeXBlLCBsZW5ndGgpCiAgICAgICAgOiB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDb250YWluZXIgPT4gdHJ1ZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0V4YWN0ID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZXF1YWxzRGlzcmVnYXJkTnVsbChvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBDb250YWluZXJUeXBlTWFzaykgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHN1cGVyLmVxdWFsc0Rpc3JlZ2FyZE51bGwob3RoZXIpICYmCiAgICAgICAgYWxsb2NhdGlvbk5vZGUgPT0gb3RoZXIuYWxsb2NhdGlvbk5vZGUgJiYKICAgICAgICBlbGVtZW50VHlwZSA9PSBvdGhlci5lbGVtZW50VHlwZSAmJgogICAgICAgIGxlbmd0aCA9PSBvdGhlci5sZW5ndGg7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBpbnRlcnNlY3Rpb24oVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgVHlwZU1hc2sgZm9yd2FyZEludGVyc2VjdGlvbiA9IGZvcndhcmRUby5pbnRlcnNlY3Rpb24ob3RoZXIsIGNsb3NlZFdvcmxkKTsKICAgIGlmIChmb3J3YXJkSW50ZXJzZWN0aW9uLmlzRW1wdHlPck51bGwpIHJldHVybiBmb3J3YXJkSW50ZXJzZWN0aW9uOwogICAgcmV0dXJuIGZvcndhcmRJbnRlcnNlY3Rpb24uaXNOdWxsYWJsZSA/IG51bGxhYmxlKCkgOiBub25OdWxsYWJsZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgdW5pb24oZHluYW1pYyBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAodGhpcyA9PSBvdGhlcikgewogICAgICByZXR1cm4gdGhpczsKICAgIH0gZWxzZSBpZiAoZXF1YWxzRGlzcmVnYXJkTnVsbChvdGhlcikpIHsKICAgICAgcmV0dXJuIG90aGVyLmlzTnVsbGFibGUgPyBvdGhlciA6IHRoaXM7CiAgICB9IGVsc2UgaWYgKG90aGVyLmlzRW1wdHlPck51bGwpIHsKICAgICAgcmV0dXJuIG90aGVyLmlzTnVsbGFibGUgPyB0aGlzLm51bGxhYmxlKCkgOiB0aGlzOwogICAgfSBlbHNlIGlmIChvdGhlci5pc0NvbnRhaW5lciAmJgogICAgICAgIGVsZW1lbnRUeXBlICE9IG51bGwgJiYKICAgICAgICBvdGhlci5lbGVtZW50VHlwZSAhPSBudWxsKSB7CiAgICAgIFR5cGVNYXNrIG5ld0VsZW1lbnRUeXBlID0KICAgICAgICAgIGVsZW1lbnRUeXBlLnVuaW9uKG90aGVyLmVsZW1lbnRUeXBlLCBjbG9zZWRXb3JsZCk7CiAgICAgIGludCBuZXdMZW5ndGggPSAobGVuZ3RoID09IG90aGVyLmxlbmd0aCkgPyBsZW5ndGggOiBudWxsOwogICAgICBUeXBlTWFzayBuZXdGb3J3YXJkVG8gPSBmb3J3YXJkVG8udW5pb24ob3RoZXIuZm9yd2FyZFRvLCBjbG9zZWRXb3JsZCk7CiAgICAgIHJldHVybiBuZXcgQ29udGFpbmVyVHlwZU1hc2soCiAgICAgICAgICBuZXdGb3J3YXJkVG8sCiAgICAgICAgICBhbGxvY2F0aW9uTm9kZSA9PSBvdGhlci5hbGxvY2F0aW9uTm9kZSA/IGFsbG9jYXRpb25Ob2RlIDogbnVsbCwKICAgICAgICAgIGFsbG9jYXRpb25FbGVtZW50ID09IG90aGVyLmFsbG9jYXRpb25FbGVtZW50CiAgICAgICAgICAgICAgPyBhbGxvY2F0aW9uRWxlbWVudAogICAgICAgICAgICAgIDogbnVsbCwKICAgICAgICAgIG5ld0VsZW1lbnRUeXBlLAogICAgICAgICAgbmV3TGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmb3J3YXJkVG8udW5pb24ob3RoZXIsIGNsb3NlZFdvcmxkKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpID0+IHN1cGVyID09IG90aGVyOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBjb21wdXRlSGFzaENvZGUoCiAgICAgICAgYWxsb2NhdGlvbk5vZGUsIGlzTnVsbGFibGUsIGVsZW1lbnRUeXBlLCBsZW5ndGgsIGZvcndhcmRUbyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ0NvbnRhaW5lcigkZm9yd2FyZFRvLCBlbGVtZW50OiAkZWxlbWVudFR5cGUsIGxlbmd0aDogJGxlbmd0aCknOwogIH0KfQqAjABOTjwBDwFPUBk1Sx0zAQwcAQwgAQwoASkeASIUAVEmAT8wNRdPPkBRKRUiTAQBNQwoLBUlLi8nIRMEAQwYFg9GNQQBDBsWSTQQBAEMIAwcAQwkMy8yLCAEAQxET0dIBAEMPBkTLS4mOCQfJSA9QE0kGEo3IhYaFg0yBgQBDC0BDBUcRQQBDBZMBAIBQHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy9jb250YWluZXJfdHlwZV9tYXNrLmRhcnRKc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL2RpY3Rpb25hcnlfdHlwZV9tYXNrLmRhcnSWuy8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIG1hc2tzOwoKLy8vIEEgW0RpY3Rpb25hcnlUeXBlTWFza10gaXMgYSBbVHlwZU1hc2tdIGZvciBhIHNwZWNpZmljIGFsbG9jYXRpb24KLy8vIHNpdGUgb2YgYSBtYXAgKGN1cnJlbnRseSBvbmx5IGludGVybmFsIE1hcCBjbGFzcykgdGhhdCBpcyB1c2VkIGFzCi8vLyBhIGRpY3Rpb25hcnksIGkuZS4gYSBtYXBwaW5nIGZyb20gYSBzZXQgb2Ygc3RhdGljYWxseSBrbm93biBzdHJpbmdzCi8vLyB0byB2YWx1ZXMuIFRoZXNlIHR5cGVtYXNrcyBvbmx5IGNvbWUgaW50byBleGlzdGVuY2UgYWZ0ZXIgdGhlCi8vLyBbVHlwZUdyYXBoSW5mZXJyZXJdIGhhcyBzdWNjZXNzZnVsbHkgaWRlbnRpZmllZCBzdWNoIGEgdXNhZ2UuIE90aGVyd2lzZSwKLy8vIHRoZSBtb3JlIGdlbmVyYWwgW01hcFR5cGVNYXNrXSBpcyB1c2VkLgpjbGFzcyBEaWN0aW9uYXJ5VHlwZU1hc2sgZXh0ZW5kcyBNYXBUeXBlTWFzayB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtEaWN0aW9uYXJ5VHlwZU1hc2tdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZGljdGlvbmFyeS10eXBlLW1hc2snOwoKICAvLyBUaGUgdW5kZXJseWluZyBrZXkvdmFsdWUgbWFwIG9mIHRoaXMgZGljdGlvbmFyeS4KICBmaW5hbCBNYXA8U3RyaW5nLCBBYnN0cmFjdFZhbHVlPiBfdHlwZU1hcDsKCiAgRGljdGlvbmFyeVR5cGVNYXNrKAogICAgICBUeXBlTWFzayBmb3J3YXJkVG8sCiAgICAgIGlyLk5vZGUgYWxsb2NhdGlvbk5vZGUsCiAgICAgIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudCwKICAgICAgVHlwZU1hc2sga2V5VHlwZSwKICAgICAgVHlwZU1hc2sgdmFsdWVUeXBlLAogICAgICB0aGlzLl90eXBlTWFwKQogICAgICA6IHN1cGVyKGZvcndhcmRUbywgYWxsb2NhdGlvbk5vZGUsIGFsbG9jYXRpb25FbGVtZW50LCBrZXlUeXBlLCB2YWx1ZVR5cGUpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0RpY3Rpb25hcnlUeXBlTWFza10gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBEaWN0aW9uYXJ5VHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIFR5cGVNYXNrIGZvcndhcmRUbyA9IG5ldyBUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICBpci5UcmVlTm9kZSBhbGxvY2F0aW9uTm9kZSA9IHNvdXJjZS5yZWFkVHJlZU5vZGVPck51bGwoKTsKICAgIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudCA9IHNvdXJjZS5yZWFkTWVtYmVyT3JOdWxsKCk7CiAgICBUeXBlTWFzayBrZXlUeXBlID0gbmV3IFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgIFR5cGVNYXNrIHZhbHVlVHlwZSA9IG5ldyBUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICBNYXA8U3RyaW5nLCBBYnN0cmFjdFZhbHVlPiB0eXBlTWFwID0gc291cmNlLnJlYWRTdHJpbmdNYXAoCiAgICAgICAgKCkgPT4gbmV3IFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IERpY3Rpb25hcnlUeXBlTWFzayhmb3J3YXJkVG8sIGFsbG9jYXRpb25Ob2RlLCBhbGxvY2F0aW9uRWxlbWVudCwKICAgICAgICBrZXlUeXBlLCB2YWx1ZVR5cGUsIHR5cGVNYXApOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbRGljdGlvbmFyeVR5cGVNYXNrXSB0byBbc2lua10uCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oVHlwZU1hc2tLaW5kLmRpY3Rpb25hcnkpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgZm9yd2FyZFRvLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVUcmVlTm9kZU9yTnVsbChhbGxvY2F0aW9uTm9kZSk7CiAgICBzaW5rLndyaXRlTWVtYmVyT3JOdWxsKGFsbG9jYXRpb25FbGVtZW50KTsKICAgIGtleVR5cGUud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgdmFsdWVUeXBlLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVTdHJpbmdNYXAoX3R5cGVNYXAsIChBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICAgIFR5cGVNYXNrIHR5cGVNYXNrID0gdmFsdWU7CiAgICAgIHR5cGVNYXNrLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIH0pOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIG51bGxhYmxlKCkgewogICAgcmV0dXJuIGlzTnVsbGFibGUKICAgICAgICA/IHRoaXMKICAgICAgICA6IG5ldyBEaWN0aW9uYXJ5VHlwZU1hc2soZm9yd2FyZFRvLm51bGxhYmxlKCksIGFsbG9jYXRpb25Ob2RlLAogICAgICAgICAgICBhbGxvY2F0aW9uRWxlbWVudCwga2V5VHlwZSwgdmFsdWVUeXBlLCBfdHlwZU1hcCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBub25OdWxsYWJsZSgpIHsKICAgIHJldHVybiBpc051bGxhYmxlCiAgICAgICAgPyBuZXcgRGljdGlvbmFyeVR5cGVNYXNrKGZvcndhcmRUby5ub25OdWxsYWJsZSgpLCBhbGxvY2F0aW9uTm9kZSwKICAgICAgICAgICAgYWxsb2NhdGlvbkVsZW1lbnQsIGtleVR5cGUsIHZhbHVlVHlwZSwgX3R5cGVNYXApCiAgICAgICAgOiB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNEaWN0aW9uYXJ5ID0+IHRydWU7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFeGFjdCA9PiB0cnVlOwoKICBib29sIGNvbnRhaW5zS2V5KFN0cmluZyBrZXkpID0+IF90eXBlTWFwLmNvbnRhaW5zS2V5KGtleSk7CgogIFR5cGVNYXNrIGdldFZhbHVlRm9yS2V5KFN0cmluZyBrZXkpID0+IF90eXBlTWFwW2tleV07CgogIEBvdmVycmlkZQogIGJvb2wgZXF1YWxzRGlzcmVnYXJkTnVsbChvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBEaWN0aW9uYXJ5VHlwZU1hc2spIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBhbGxvY2F0aW9uTm9kZSA9PSBvdGhlci5hbGxvY2F0aW9uTm9kZSAmJgogICAgICAgIGtleVR5cGUgPT0gb3RoZXIua2V5VHlwZSAmJgogICAgICAgIHZhbHVlVHlwZSA9PSBvdGhlci52YWx1ZVR5cGUgJiYKICAgICAgICBfdHlwZU1hcC5rZXlzLmV2ZXJ5KChrKSA9PiBvdGhlci5fdHlwZU1hcC5jb250YWluc0tleShrKSkgJiYKICAgICAgICBvdGhlci5fdHlwZU1hcC5rZXlzLmV2ZXJ5KAogICAgICAgICAgICAoaykgPT4gX3R5cGVNYXAuY29udGFpbnNLZXkoaykgJiYgX3R5cGVNYXBba10gPT0gb3RoZXIuX3R5cGVNYXBba10pOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgaW50ZXJzZWN0aW9uKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIFR5cGVNYXNrIGZvcndhcmRJbnRlcnNlY3Rpb24gPSBmb3J3YXJkVG8uaW50ZXJzZWN0aW9uKG90aGVyLCBjbG9zZWRXb3JsZCk7CiAgICBpZiAoZm9yd2FyZEludGVyc2VjdGlvbi5pc0VtcHR5T3JOdWxsKSByZXR1cm4gZm9yd2FyZEludGVyc2VjdGlvbjsKICAgIHJldHVybiBmb3J3YXJkSW50ZXJzZWN0aW9uLmlzTnVsbGFibGUgPyBudWxsYWJsZSgpIDogbm9uTnVsbGFibGUoKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHVuaW9uKGR5bmFtaWMgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKHRoaXMgPT0gb3RoZXIpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UgaWYgKGVxdWFsc0Rpc3JlZ2FyZE51bGwob3RoZXIpKSB7CiAgICAgIHJldHVybiBvdGhlci5pc051bGxhYmxlID8gb3RoZXIgOiB0aGlzOwogICAgfSBlbHNlIGlmIChvdGhlci5pc0VtcHR5T3JOdWxsKSB7CiAgICAgIHJldHVybiBvdGhlci5pc051bGxhYmxlID8gdGhpcy5udWxsYWJsZSgpIDogdGhpczsKICAgIH0gZWxzZSBpZiAob3RoZXIuaXNEaWN0aW9uYXJ5KSB7CiAgICAgIFR5cGVNYXNrIG5ld0ZvcndhcmRUbyA9IGZvcndhcmRUby51bmlvbihvdGhlci5mb3J3YXJkVG8sIGNsb3NlZFdvcmxkKTsKICAgICAgVHlwZU1hc2sgbmV3S2V5VHlwZSA9IGtleVR5cGUudW5pb24ob3RoZXIua2V5VHlwZSwgY2xvc2VkV29ybGQpOwogICAgICBUeXBlTWFzayBuZXdWYWx1ZVR5cGUgPSB2YWx1ZVR5cGUudW5pb24ob3RoZXIudmFsdWVUeXBlLCBjbG9zZWRXb3JsZCk7CiAgICAgIE1hcDxTdHJpbmcsIFR5cGVNYXNrPiBtYXBwaW5ncyA9IDxTdHJpbmcsIFR5cGVNYXNrPnt9OwogICAgICBfdHlwZU1hcC5mb3JFYWNoKChrLCBkeW5hbWljIHYpIHsKICAgICAgICBpZiAoIW90aGVyLl90eXBlTWFwLmNvbnRhaW5zS2V5KGspKSB7CiAgICAgICAgICBtYXBwaW5nc1trXSA9IHYubnVsbGFibGUoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBvdGhlci5fdHlwZU1hcC5mb3JFYWNoKChrLCB2KSB7CiAgICAgICAgaWYgKF90eXBlTWFwLmNvbnRhaW5zS2V5KGspKSB7CiAgICAgICAgICBtYXBwaW5nc1trXSA9IHYudW5pb24oX3R5cGVNYXBba10sIGNsb3NlZFdvcmxkKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWFwcGluZ3Nba10gPSB2Lm51bGxhYmxlKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIG5ldyBEaWN0aW9uYXJ5VHlwZU1hc2soCiAgICAgICAgICBuZXdGb3J3YXJkVG8sIG51bGwsIG51bGwsIG5ld0tleVR5cGUsIG5ld1ZhbHVlVHlwZSwgbWFwcGluZ3MpOwogICAgfSBlbHNlIGlmIChvdGhlci5pc01hcCAmJgogICAgICAgIChvdGhlci5rZXlUeXBlICE9IG51bGwpICYmCiAgICAgICAgKG90aGVyLnZhbHVlVHlwZSAhPSBudWxsKSkgewogICAgICBUeXBlTWFzayBuZXdGb3J3YXJkVG8gPSBmb3J3YXJkVG8udW5pb24ob3RoZXIuZm9yd2FyZFRvLCBjbG9zZWRXb3JsZCk7CiAgICAgIFR5cGVNYXNrIG5ld0tleVR5cGUgPSBrZXlUeXBlLnVuaW9uKG90aGVyLmtleVR5cGUsIGNsb3NlZFdvcmxkKTsKICAgICAgVHlwZU1hc2sgbmV3VmFsdWVUeXBlID0gdmFsdWVUeXBlLnVuaW9uKG90aGVyLnZhbHVlVHlwZSwgY2xvc2VkV29ybGQpOwogICAgICByZXR1cm4gbmV3IE1hcFR5cGVNYXNrKAogICAgICAgICAgbmV3Rm9yd2FyZFRvLCBudWxsLCBudWxsLCBuZXdLZXlUeXBlLCBuZXdWYWx1ZVR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZvcndhcmRUby51bmlvbihvdGhlciwgY2xvc2VkV29ybGQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgPT4gc3VwZXIgPT0gb3RoZXI7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIGNvbXB1dGVIYXNoQ29kZShhbGxvY2F0aW9uTm9kZSwgaXNOdWxsYWJsZSwgX3R5cGVNYXAsIGZvcndhcmRUbyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ0RpY3Rpb25hcnkoJGZvcndhcmRUbywga2V5OiAka2V5VHlwZSwgJwogICAgICAgICd2YWx1ZTogJHZhbHVlVHlwZSwgbWFwOiAkX3R5cGVNYXApJzsKICB9Cn0KgKEATk48AQ8BRUZIQk0sL0wdNAE2LQEWGh4mGBoVUQFAMTUXTz5ATU8/RRVQJgQBNgwoLRUlLi8jJTohJggTBAEMGBYPRz4EAQwbFko9EAQBDCEMHAE9ATgBDCQ0NSQoRSNRBAEMRE9HSAQBDDwZEy0uJjglTUdNPSguJgoKJic7ESYKCiVJHiMlTUdNHj8NMgYEAQwtAQwVTQQBDBY0LgQCAUFwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlbWFza3MvZGljdGlvbmFyeV90eXBlX21hc2suZGFydERzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci90eXBlbWFza3MvZmxhdF90eXBlX21hc2suZGFydMAAXrMvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBtYXNrczsKCi8vLyBBIGZsYXQgdHlwZSBtYXNrIGlzIGEgdHlwZSBtYXNrIHRoYXQgaGFzIGJlZW4gZmxhdHRlbmVkIHRvIGNvbnRhaW4gYQovLy8gYmFzZSB0eXBlLgpjbGFzcyBGbGF0VHlwZU1hc2sgaW1wbGVtZW50cyBUeXBlTWFzayB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtGbGF0VHlwZU1hc2tdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZmxhdC10eXBlLW1hc2snOwoKICBzdGF0aWMgY29uc3QgaW50IEVNUFRZID0gMDsKICBzdGF0aWMgY29uc3QgaW50IEVYQUNUID0gMTsKICBzdGF0aWMgY29uc3QgaW50IFNVQkNMQVNTID0gMjsKICBzdGF0aWMgY29uc3QgaW50IFNVQlRZUEUgPSAzOwoKICBmaW5hbCBDbGFzc0VudGl0eSBiYXNlOwogIGZpbmFsIGludCBmbGFnczsKCiAgRmxhdFR5cGVNYXNrKENsYXNzRW50aXR5IGJhc2UsIGludCBraW5kLCBib29sIGlzTnVsbGFibGUpCiAgICAgIDogdGhpcy5pbnRlcm5hbChiYXNlLCAoa2luZCA8PCAxKSB8IChpc051bGxhYmxlID8gMSA6IDApKTsKCiAgRmxhdFR5cGVNYXNrLmV4YWN0KENsYXNzRW50aXR5IGJhc2UpIDogdGhpcy5pbnRlcm5hbChiYXNlLCAoRVhBQ1QgPDwgMSkgfCAxKTsKICBGbGF0VHlwZU1hc2suc3ViY2xhc3MoQ2xhc3NFbnRpdHkgYmFzZSkKICAgICAgOiB0aGlzLmludGVybmFsKGJhc2UsIChTVUJDTEFTUyA8PCAxKSB8IDEpOwogIEZsYXRUeXBlTWFzay5zdWJ0eXBlKENsYXNzRW50aXR5IGJhc2UpCiAgICAgIDogdGhpcy5pbnRlcm5hbChiYXNlLCAoU1VCVFlQRSA8PCAxKSB8IDEpOwoKICBjb25zdCBGbGF0VHlwZU1hc2subm9uTnVsbEVtcHR5KCkKICAgICAgOiBiYXNlID0gbnVsbCwKICAgICAgICBmbGFncyA9IDA7CiAgY29uc3QgRmxhdFR5cGVNYXNrLmVtcHR5KCkKICAgICAgOiBiYXNlID0gbnVsbCwKICAgICAgICBmbGFncyA9IDE7CgogIEZsYXRUeXBlTWFzay5ub25OdWxsRXhhY3QoQ2xhc3NFbnRpdHkgYmFzZSkgOiB0aGlzLmludGVybmFsKGJhc2UsIEVYQUNUIDw8IDEpOwogIEZsYXRUeXBlTWFzay5ub25OdWxsU3ViY2xhc3MoQ2xhc3NFbnRpdHkgYmFzZSkKICAgICAgOiB0aGlzLmludGVybmFsKGJhc2UsIFNVQkNMQVNTIDw8IDEpOwogIEZsYXRUeXBlTWFzay5ub25OdWxsU3VidHlwZShDbGFzc0VudGl0eSBiYXNlKQogICAgICA6IHRoaXMuaW50ZXJuYWwoYmFzZSwgU1VCVFlQRSA8PCAxKTsKCiAgRmxhdFR5cGVNYXNrLmludGVybmFsKHRoaXMuYmFzZSwgdGhpcy5mbGFncyk7CgogIC8vLyBFbnN1cmVzIHRoYXQgdGhlIGdlbmVyYXRlZCBtYXNrIGlzIG5vcm1hbGl6ZWQsIGkuZS4sIGEgY2FsbCB0bwogIC8vLyBbVHlwZU1hc2suYXNzZXJ0SXNOb3JtYWxpemVkXSB3aXRoIHRoZSBmYWN0b3J5J3MgcmVzdWx0IHJldHVybnMgYHRydWVgLgogIGZhY3RvcnkgRmxhdFR5cGVNYXNrLm5vcm1hbGl6ZWQoCiAgICAgIENsYXNzRW50aXR5IGJhc2UsIGludCBmbGFncywgSkNsb3NlZFdvcmxkIHdvcmxkKSB7CiAgICBpZiAoKGZsYWdzID4+IDEpID09IEVNUFRZIHx8ICgoZmxhZ3MgPj4gMSkgPT0gRVhBQ1QpKSB7CiAgICAgIHJldHVybiBuZXcgRmxhdFR5cGVNYXNrLmludGVybmFsKGJhc2UsIGZsYWdzKTsKICAgIH0KICAgIGlmICgoZmxhZ3MgPj4gMSkgPT0gU1VCVFlQRSkgewogICAgICBpZiAoIXdvcmxkLmNsYXNzSGllcmFyY2h5Lmhhc0FueVN0cmljdFN1YnR5cGUoYmFzZSkgfHwKICAgICAgICAgIHdvcmxkLmNsYXNzSGllcmFyY2h5Lmhhc09ubHlTdWJjbGFzc2VzKGJhc2UpKSB7CiAgICAgICAgZmxhZ3MgPSAoZmxhZ3MgJiAweDEpIHwgKFNVQkNMQVNTIDw8IDEpOwogICAgICB9CiAgICB9CiAgICBpZiAoKChmbGFncyA+PiAxKSA9PSBTVUJDTEFTUykgJiYKICAgICAgICAhd29ybGQuY2xhc3NIaWVyYXJjaHkuaGFzQW55U3RyaWN0U3ViY2xhc3MoYmFzZSkpIHsKICAgICAgZmxhZ3MgPSAoZmxhZ3MgJiAweDEpIHwgKEVYQUNUIDw8IDEpOwogICAgfQogICAgQ29tbW9uTWFza3MgY29tbW9uTWFza3MgPSB3b3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgcmV0dXJuIGNvbW1vbk1hc2tzLmdldENhY2hlZE1hc2soCiAgICAgICAgYmFzZSwgZmxhZ3MsICgpID0+IG5ldyBGbGF0VHlwZU1hc2suaW50ZXJuYWwoYmFzZSwgZmxhZ3MpKTsKICB9CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbRmxhdFR5cGVNYXNrXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEZsYXRUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgQ2xhc3NFbnRpdHkgYmFzZSA9IHNvdXJjZS5yZWFkQ2xhc3NPck51bGwoKTsKICAgIGludCBmbGFncyA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICBDb21tb25NYXNrcyBjb21tb25NYXNrcyA9IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CiAgICByZXR1cm4gY29tbW9uTWFza3MuZ2V0Q2FjaGVkTWFzaygKICAgICAgICBiYXNlLCBmbGFncywgKCkgPT4gbmV3IEZsYXRUeXBlTWFzay5pbnRlcm5hbChiYXNlLCBmbGFncykpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbRmxhdFR5cGVNYXNrXSB0byBbc2lua10uCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oVHlwZU1hc2tLaW5kLmZsYXQpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUNsYXNzT3JOdWxsKGJhc2UpOwogICAgc2luay53cml0ZUludChmbGFncyk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQ2xhc3NRdWVyeSBnZXQgX2NsYXNzUXVlcnkgPT4gaXNFeGFjdAogICAgICA/IENsYXNzUXVlcnkuRVhBQ1QKICAgICAgOiAoaXNTdWJjbGFzcyA/IENsYXNzUXVlcnkuU1VCQ0xBU1MgOiBDbGFzc1F1ZXJ5LlNVQlRZUEUpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5ID0+IGlzRW1wdHlPck51bGwgJiYgIWlzTnVsbGFibGU7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOdWxsID0+IGlzRW1wdHlPck51bGwgJiYgaXNOdWxsYWJsZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5T3JOdWxsID0+IChmbGFncyA+PiAxKSA9PSBFTVBUWTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0V4YWN0ID0+IChmbGFncyA+PiAxKSA9PSBFWEFDVDsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc051bGxhYmxlID0+IChmbGFncyAmIDEpICE9IDA7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVW5pb24gPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDb250YWluZXIgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTZXQgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNYXAgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNEaWN0aW9uYXJ5ID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRm9yd2FyZGluZyA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1ZhbHVlID0+IGZhbHNlOwoKICAvLyBUT0RPKGthc3BlcmwpOiBHZXQgcmlkIG9mIHRoZXNlLiBUaGV5IHNob3VsZCBub3QgYmUgYSB2aXNpYmxlCiAgLy8gcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gYmVjYXVzZSB0aGV5IG1ha2UgaXQgaGFyZCB0byBhZGQKICAvLyBwcm9wZXIgdW5pb24gdHlwZXMgaWYgd2UgZXZlciB3YW50IHRvLgogIGJvb2wgZ2V0IGlzU3ViY2xhc3MgPT4gKGZsYWdzID4+IDEpID09IFNVQkNMQVNTOwogIGJvb2wgZ2V0IGlzU3VidHlwZSA9PiAoZmxhZ3MgPj4gMSkgPT0gU1VCVFlQRTsKCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgbnVsbGFibGUoKSB7CiAgICByZXR1cm4gaXNOdWxsYWJsZSA/IHRoaXMgOiBuZXcgRmxhdFR5cGVNYXNrLmludGVybmFsKGJhc2UsIGZsYWdzIHwgMSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBub25OdWxsYWJsZSgpIHsKICAgIHJldHVybiBpc051bGxhYmxlID8gbmV3IEZsYXRUeXBlTWFzay5pbnRlcm5hbChiYXNlLCBmbGFncyAmIH4xKSA6IHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zKENsYXNzRW50aXR5IG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChpc0VtcHR5T3JOdWxsKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKGJhc2UsIG90aGVyKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSBpZiAoaXNFeGFjdCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGVsc2UgaWYgKGlzU3ViY2xhc3MpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3ViY2xhc3NPZihvdGhlciwgYmFzZSk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoaXNTdWJ0eXBlKTsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3VidHlwZU9mKG90aGVyLCBiYXNlKTsKICAgIH0KICB9CgogIGJvb2wgaXNTaW5nbGVJbXBsZW1lbnRhdGlvbk9mKENsYXNzRW50aXR5IGNscywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICAvLyBTcGVjaWFsIGNhc2UgYmFzaWMgdHlwZXMgc28gdGhhdCwgZm9yIGV4YW1wbGUsIEpTU3RyaW5nIGlzIHRoZQogICAgLy8gc2luZ2xlIGltcGxlbWVudGF0aW9uIG9mIFN0cmluZy4KICAgIC8vIFRoZSBnZW5lcmFsIG9wdGltaXphdGlvbiBpcyB0byByZWFsaXplIHRoZXJlIGlzIG9ubHkgb25lIGNsYXNzIHRoYXQKICAgIC8vIGltcGxlbWVudHMgW2Jhc2VdIGFuZCBbYmFzZV0gaXMgbm90IGluc3RhbnRpYXRlZC4gV2UgaG93ZXZlciBkbwogICAgLy8gbm90IHRyYWNrIGNvcnJlY3RseSB0aGUgbGlzdCBvZiB0cnVseSBpbnN0YW50aWF0ZWQgY2xhc3Nlcy4KICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzID0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CiAgICBpZiAoY29udGFpbnNPbmx5U3RyaW5nKGNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gY2xzID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzIHx8CiAgICAgICAgICBjbHMgPT0gY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzczsKICAgIH0KICAgIGlmIChjb250YWluc09ubHlCb29sKGNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gY2xzID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmJvb2xDbGFzcyB8fAogICAgICAgICAgY2xzID09IGNvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzOwogICAgfQogICAgaWYgKGNvbnRhaW5zT25seUludChjbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIGNscyA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5pbnRDbGFzcyB8fAogICAgICAgICAgY2xzID09IGNvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MgfHwKICAgICAgICAgIGNscyA9PSBjb21tb25FbGVtZW50cy5qc1Bvc2l0aXZlSW50Q2xhc3MgfHwKICAgICAgICAgIGNscyA9PSBjb21tb25FbGVtZW50cy5qc1VJbnQzMkNsYXNzIHx8CiAgICAgICAgICBjbHMgPT0gY29tbW9uRWxlbWVudHMuanNVSW50MzFDbGFzczsKICAgIH0KICAgIGlmIChjb250YWluc09ubHlEb3VibGUoY2xvc2VkV29ybGQpKSB7CiAgICAgIHJldHVybiBjbHMgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuZG91YmxlQ2xhc3MgfHwKICAgICAgICAgIGNscyA9PSBjb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0luTWFzayhUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoaXNFbXB0eU9yTnVsbCkgcmV0dXJuIGlzTnVsbGFibGUgPyBvdGhlci5pc051bGxhYmxlIDogdHJ1ZTsKICAgIC8vIFRoZSBlbXB0eSB0eXBlIGNvbnRhaW5zIG5vIGNsYXNzZXMuCiAgICBpZiAob3RoZXIuaXNFbXB0eU9yTnVsbCkgcmV0dXJuIGZhbHNlOwogICAgLy8gUXVpY2sgY2hlY2sgd2hldGhlciB0byBoYW5kbGUgbnVsbC4KICAgIGlmIChpc051bGxhYmxlICYmICFvdGhlci5pc051bGxhYmxlKSByZXR1cm4gZmFsc2U7CiAgICBvdGhlciA9IFR5cGVNYXNrLm5vbkZvcndhcmRpbmdNYXNrKG90aGVyKTsKICAgIC8vIElmIG90aGVyIGlzIHVuaW9uLCBkZWxlZ2F0ZSB0byBVbmlvblR5cGVNYXNrLmNvbnRhaW5zTWFzay4KICAgIGlmIChvdGhlciBpcyEgRmxhdFR5cGVNYXNrKSByZXR1cm4gb3RoZXIuY29udGFpbnNNYXNrKHRoaXMsIGNsb3NlZFdvcmxkKTsKICAgIC8vIFRoZSBvdGhlciBtdXN0IGJlIGZsYXQsIHNvIGNvbXBhcmUgYmFzZSBhbmQgZmxhZ3MuCiAgICBGbGF0VHlwZU1hc2sgZmxhdE90aGVyID0gb3RoZXI7CiAgICBDbGFzc0VudGl0eSBvdGhlckJhc2UgPSBmbGF0T3RoZXIuYmFzZTsKICAgIC8vIElmIG90aGVyIGlzIGV4YWN0LCBpdCBvbmx5IGNvbnRhaW5zIGl0cyBiYXNlLgogICAgLy8gVE9ETyhoZXJodXQpOiBHZXQgcmlkIG9mIGlzU2luZ2xlSW1wbGVtZW50YXRpb25PZi4KICAgIGlmIChmbGF0T3RoZXIuaXNFeGFjdCkgewogICAgICByZXR1cm4gKGlzRXhhY3QgJiYgYmFzZSA9PSBvdGhlckJhc2UpIHx8CiAgICAgICAgICBpc1NpbmdsZUltcGxlbWVudGF0aW9uT2Yob3RoZXJCYXNlLCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgICAvLyBJZiBvdGhlciBpcyBzdWJjbGFzcywgdGhpcyBoYXMgdG8gYmUgc3ViY2xhc3MsIGFzIHdlbGwuIFVubGVzcwogICAgLy8gZmxhdE90aGVyLmJhc2UgY292ZXJzIGFsbCBzdWJ0eXBlcyBvZiB0aGlzLiBDdXJyZW50bHksIHdlIG9ubHkKICAgIC8vIGNvbnNpZGVyIG9iamVjdCB0byBiZWhhdmUgdGhhdCB3YXkuCiAgICAvLyBUT0RPKGhlcmh1dCk6IEFkZCBjaGVjayB3aGV0aGVyIGZsYXRPdGhlci5iYXNlIGlzIHN1cGVyY2xhc3Mgb2YKICAgIC8vICAgICAgICAgICAgICAgYWxsIHN1YmNsYXNzZXMgb2YgdGhpcy5iYXNlLgogICAgaWYgKGZsYXRPdGhlci5pc1N1YmNsYXNzKSB7CiAgICAgIGlmIChpc1N1YnR5cGUpCiAgICAgICAgcmV0dXJuIChvdGhlckJhc2UgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpOwogICAgICByZXR1cm4gY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJjbGFzc09mKGJhc2UsIG90aGVyQmFzZSk7CiAgICB9CiAgICBhc3NlcnQoZmxhdE90aGVyLmlzU3VidHlwZSk7CiAgICAvLyBDaGVjayB3aGV0aGVyIHRoaXMgVHlwZU1hc2sgc2F0aXNmaWVzIG90aGVyQmFzZSdzIGludGVyZmFjZS4KICAgIHJldHVybiBzYXRpc2ZpZXMob3RoZXJCYXNlLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zTWFzayhUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gb3RoZXIuaXNJbk1hc2sodGhpcywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHlJbnQoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cyA9IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwogICAgcmV0dXJuIGJhc2UgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuaW50Q2xhc3MgfHwKICAgICAgICBiYXNlID09IGNvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MgfHwKICAgICAgICBiYXNlID09IGNvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcyB8fAogICAgICAgIGJhc2UgPT0gY29tbW9uRWxlbWVudHMuanNVSW50MzFDbGFzcyB8fAogICAgICAgIGJhc2UgPT0gY29tbW9uRWxlbWVudHMuanNVSW50MzJDbGFzczsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5RG91YmxlKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGJhc2UgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuZG91YmxlQ2xhc3MgfHwKICAgICAgICBiYXNlID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3M7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seU51bShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBjb250YWluc09ubHlJbnQoY2xvc2VkV29ybGQpIHx8CiAgICAgICAgY29udGFpbnNPbmx5RG91YmxlKGNsb3NlZFdvcmxkKSB8fAogICAgICAgIGJhc2UgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMubnVtQ2xhc3MgfHwKICAgICAgICBiYXNlID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3M7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seUJvb2woSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gYmFzZSA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5ib29sQ2xhc3MgfHwKICAgICAgICBiYXNlID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHlTdHJpbmcoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gYmFzZSA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5zdHJpbmdDbGFzcyB8fAogICAgICAgIGJhc2UgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzczsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5KENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGJhc2UgPT0gY2xzOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBzYXRpc2ZpZXMoQ2xhc3NFbnRpdHkgY2xzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChpc0VtcHR5T3JOdWxsKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJ0eXBlT2YoYmFzZSwgY2xzKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBzaW5nbGVDbGFzcyhKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmIChpc0VtcHR5T3JOdWxsKSByZXR1cm4gbnVsbDsKICAgIGlmIChpc051bGxhYmxlKSByZXR1cm4gbnVsbDsgLy8gSXQgaXMgTnVsbCBhbmQgc29tZSBvdGhlciBjbGFzcy4KICAgIGlmIChpc0V4YWN0KSB7CiAgICAgIHJldHVybiBiYXNlOwogICAgfSBlbHNlIGlmIChpc1N1YmNsYXNzKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5oYXNBbnlTdHJpY3RTdWJjbGFzcyhiYXNlKQogICAgICAgICAgPyBudWxsCiAgICAgICAgICA6IGJhc2U7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoaXNTdWJ0eXBlKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zQWxsKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKGlzRW1wdHlPck51bGwgfHwgaXNFeGFjdCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGlkZW50aWNhbChiYXNlLCBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB1bmlvbihUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBhc3NlcnQob3RoZXIgIT0gbnVsbCk7CiAgICBhc3NlcnQoVHlwZU1hc2suYXNzZXJ0SXNOb3JtYWxpemVkKHRoaXMsIGNsb3NlZFdvcmxkKSk7CiAgICBhc3NlcnQoVHlwZU1hc2suYXNzZXJ0SXNOb3JtYWxpemVkKG90aGVyLCBjbG9zZWRXb3JsZCkpOwogICAgaWYgKG90aGVyIGlzISBGbGF0VHlwZU1hc2spIHJldHVybiBvdGhlci51bmlvbih0aGlzLCBjbG9zZWRXb3JsZCk7CiAgICBGbGF0VHlwZU1hc2sgZmxhdE90aGVyID0gb3RoZXI7CiAgICBpZiAoaXNFbXB0eU9yTnVsbCkgewogICAgICByZXR1cm4gaXNOdWxsYWJsZSA/IGZsYXRPdGhlci5udWxsYWJsZSgpIDogZmxhdE90aGVyOwogICAgfSBlbHNlIGlmIChmbGF0T3RoZXIuaXNFbXB0eU9yTnVsbCkgewogICAgICByZXR1cm4gZmxhdE90aGVyLmlzTnVsbGFibGUgPyBudWxsYWJsZSgpIDogdGhpczsKICAgIH0gZWxzZSBpZiAoYmFzZSA9PSBmbGF0T3RoZXIuYmFzZSkgewogICAgICByZXR1cm4gdW5pb25TYW1lKGZsYXRPdGhlciwgY2xvc2VkV29ybGQpOwogICAgfSBlbHNlIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YmNsYXNzT2YoZmxhdE90aGVyLmJhc2UsIGJhc2UpKSB7CiAgICAgIHJldHVybiB1bmlvblN0cmljdFN1YmNsYXNzKGZsYXRPdGhlciwgY2xvc2VkV29ybGQpOwogICAgfSBlbHNlIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YmNsYXNzT2YoYmFzZSwgZmxhdE90aGVyLmJhc2UpKSB7CiAgICAgIHJldHVybiBmbGF0T3RoZXIudW5pb25TdHJpY3RTdWJjbGFzcyh0aGlzLCBjbG9zZWRXb3JsZCk7CiAgICB9IGVsc2UgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3VidHlwZU9mKGZsYXRPdGhlci5iYXNlLCBiYXNlKSkgewogICAgICByZXR1cm4gdW5pb25TdHJpY3RTdWJ0eXBlKGZsYXRPdGhlciwgY2xvc2VkV29ybGQpOwogICAgfSBlbHNlIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YnR5cGVPZihiYXNlLCBmbGF0T3RoZXIuYmFzZSkpIHsKICAgICAgcmV0dXJuIGZsYXRPdGhlci51bmlvblN0cmljdFN1YnR5cGUodGhpcywgY2xvc2VkV29ybGQpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBVbmlvblR5cGVNYXNrLl9pbnRlcm5hbCg8RmxhdFR5cGVNYXNrPlt0aGlzLCBmbGF0T3RoZXJdKTsKICAgIH0KICB9CgogIFR5cGVNYXNrIHVuaW9uU2FtZShGbGF0VHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgYXNzZXJ0KGJhc2UgPT0gb3RoZXIuYmFzZSk7CiAgICBhc3NlcnQoVHlwZU1hc2suYXNzZXJ0SXNOb3JtYWxpemVkKHRoaXMsIGNsb3NlZFdvcmxkKSk7CiAgICBhc3NlcnQoVHlwZU1hc2suYXNzZXJ0SXNOb3JtYWxpemVkKG90aGVyLCBjbG9zZWRXb3JsZCkpOwogICAgLy8gVGhlIHR3byBtYXNrcyBzaGFyZSB0aGUgYmFzZSB0eXBlLCBzbyB3ZSBtdXN0IGNob3NlIHRoZSBsZWFzdAogICAgLy8gY29uc3RyYWluaW5nIGtpbmQgKHRoZSBoaWdoZXN0KSBvZiB0aGUgdHdvLiBJZiBlaXRoZXIgb25lIG9mCiAgICAvLyB0aGUgbWFza3MgYXJlIG51bGxhYmxlIHRoZSByZXN1bHQgc2hvdWxkIGJlIG51bGxhYmxlIHRvby4KICAgIC8vIEFzIGJvdGggbWFza3MgYXJlIG5vcm1hbGl6ZWQsIHRoZSByZXN1bHQgd2lsbCBiZSwgdG9vLgogICAgaW50IGNvbWJpbmVkID0gKGZsYWdzID4gb3RoZXIuZmxhZ3MpCiAgICAgICAgPyBmbGFncyB8IChvdGhlci5mbGFncyAmIDEpCiAgICAgICAgOiBvdGhlci5mbGFncyB8IChmbGFncyAmIDEpOwogICAgaWYgKGZsYWdzID09IGNvbWJpbmVkKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlIGlmIChvdGhlci5mbGFncyA9PSBjb21iaW5lZCkgewogICAgICByZXR1cm4gb3RoZXI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IEZsYXRUeXBlTWFzay5ub3JtYWxpemVkKGJhc2UsIGNvbWJpbmVkLCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgfQoKICBUeXBlTWFzayB1bmlvblN0cmljdFN1YmNsYXNzKEZsYXRUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBhc3NlcnQoYmFzZSAhPSBvdGhlci5iYXNlKTsKICAgIGFzc2VydChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YmNsYXNzT2Yob3RoZXIuYmFzZSwgYmFzZSkpOwogICAgYXNzZXJ0KFR5cGVNYXNrLmFzc2VydElzTm9ybWFsaXplZCh0aGlzLCBjbG9zZWRXb3JsZCkpOwogICAgYXNzZXJ0KFR5cGVNYXNrLmFzc2VydElzTm9ybWFsaXplZChvdGhlciwgY2xvc2VkV29ybGQpKTsKICAgIGludCBjb21iaW5lZDsKICAgIGlmICgoaXNFeGFjdCAmJiBvdGhlci5pc0V4YWN0KSB8fAogICAgICAgIGJhc2UgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpIHsKICAgICAgLy8gU2luY2UgdGhlIG90aGVyIG1hc2sgaXMgYSBzdWJjbGFzcyBvZiB0aGlzIG1hc2ssIHdlIG5lZWQgdGhlCiAgICAgIC8vIHJlc3VsdGluZyB1bmlvbiB0byBiZSBhIHN1YmNsYXNzIHRvby4gSWYgZWl0aGVyIG9uZSBvZiB0aGUKICAgICAgLy8gbWFza3MgYXJlIG51bGxhYmxlIHRoZSByZXN1bHQgc2hvdWxkIGJlIG51bGxhYmxlIHRvby4KICAgICAgY29tYmluZWQgPSAoU1VCQ0xBU1MgPDwgMSkgfCAoKGZsYWdzIHwgb3RoZXIuZmxhZ3MpICYgMSk7CiAgICB9IGVsc2UgewogICAgICAvLyBCb3RoIG1hc2tzIGFyZSBhdCBsZWFzdCBzdWJjbGFzcyBtYXNrcywgc28gd2UgcGljayB0aGUgbGVhc3QKICAgICAgLy8gY29uc3RyYWluaW5nIGtpbmQgKHRoZSBoaWdoZXN0KSBvZiB0aGUgdHdvLiBJZiBlaXRoZXIgb25lIG9mCiAgICAgIC8vIHRoZSBtYXNrcyBhcmUgbnVsbGFibGUgdGhlIHJlc3VsdCBzaG91bGQgYmUgbnVsbGFibGUgdG9vLgogICAgICBjb21iaW5lZCA9IChmbGFncyA+IG90aGVyLmZsYWdzKQogICAgICAgICAgPyBmbGFncyB8IChvdGhlci5mbGFncyAmIDEpCiAgICAgICAgICA6IG90aGVyLmZsYWdzIHwgKGZsYWdzICYgMSk7CiAgICB9CiAgICAvLyBJZiB3ZSB3ZWFrZW4gdGhlIGNvbnN0cmFpbnQgb24gdGhpcyB0eXBlLCB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGF0CiAgICAvLyB0aGUgcmVzdWx0IGlzIG5vcm1hbGl6ZWQuCiAgICByZXR1cm4gKGZsYWdzICE9IGNvbWJpbmVkKQogICAgICAgID8gbmV3IEZsYXRUeXBlTWFzay5ub3JtYWxpemVkKGJhc2UsIGNvbWJpbmVkLCBjbG9zZWRXb3JsZCkKICAgICAgICA6IHRoaXM7CiAgfQoKICBUeXBlTWFzayB1bmlvblN0cmljdFN1YnR5cGUoRmxhdFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGFzc2VydChiYXNlICE9IG90aGVyLmJhc2UpOwogICAgYXNzZXJ0KCFjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YmNsYXNzT2Yob3RoZXIuYmFzZSwgYmFzZSkpOwogICAgYXNzZXJ0KGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3VidHlwZU9mKG90aGVyLmJhc2UsIGJhc2UpKTsKICAgIGFzc2VydChUeXBlTWFzay5hc3NlcnRJc05vcm1hbGl6ZWQodGhpcywgY2xvc2VkV29ybGQpKTsKICAgIGFzc2VydChUeXBlTWFzay5hc3NlcnRJc05vcm1hbGl6ZWQob3RoZXIsIGNsb3NlZFdvcmxkKSk7CiAgICAvLyBTaW5jZSB0aGUgb3RoZXIgbWFzayBpcyBhIHN1YnR5cGUgb2YgdGhpcyBtYXNrLCB3ZSBuZWVkIHRoZQogICAgLy8gcmVzdWx0aW5nIHVuaW9uIHRvIGJlIGEgc3VidHlwZSB0b28uIElmIGVpdGhlciBvbmUgb2YgdGhlIG1hc2tzCiAgICAvLyBhcmUgbnVsbGFibGUgdGhlIHJlc3VsdCBzaG91bGQgYmUgbnVsbGFibGUgdG9vLgogICAgaW50IGNvbWJpbmVkID0gKFNVQlRZUEUgPDwgMSkgfCAoKGZsYWdzIHwgb3RoZXIuZmxhZ3MpICYgMSk7CiAgICAvLyBXZSBrbm93IHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBzdWJ0eXBlLCBbb3RoZXIuYmFzZV0sIHNvIG5vIG5lZWQKICAgIC8vIHRvIG5vcm1hbGl6ZS4KICAgIHJldHVybiAoZmxhZ3MgIT0gY29tYmluZWQpCiAgICAgICAgPyBuZXcgRmxhdFR5cGVNYXNrLm5vcm1hbGl6ZWQoYmFzZSwgY29tYmluZWQsIGNsb3NlZFdvcmxkKQogICAgICAgIDogdGhpczsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGludGVyc2VjdGlvbihUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBhc3NlcnQob3RoZXIgIT0gbnVsbCk7CiAgICBpZiAob3RoZXIgaXMhIEZsYXRUeXBlTWFzaykgcmV0dXJuIG90aGVyLmludGVyc2VjdGlvbih0aGlzLCBjbG9zZWRXb3JsZCk7CiAgICBhc3NlcnQoVHlwZU1hc2suYXNzZXJ0SXNOb3JtYWxpemVkKHRoaXMsIGNsb3NlZFdvcmxkKSk7CiAgICBhc3NlcnQoVHlwZU1hc2suYXNzZXJ0SXNOb3JtYWxpemVkKG90aGVyLCBjbG9zZWRXb3JsZCkpOwogICAgRmxhdFR5cGVNYXNrIGZsYXRPdGhlciA9IG90aGVyOwoKICAgIENsYXNzRW50aXR5IG90aGVyQmFzZSA9IGZsYXRPdGhlci5iYXNlOwoKICAgIGJvb2wgaW5jbHVkZU51bGwgPSBpc051bGxhYmxlICYmIGZsYXRPdGhlci5pc051bGxhYmxlOwoKICAgIGlmIChpc0VtcHR5T3JOdWxsKSB7CiAgICAgIHJldHVybiBpbmNsdWRlTnVsbCA/IHRoaXMgOiBub25OdWxsYWJsZSgpOwogICAgfSBlbHNlIGlmIChmbGF0T3RoZXIuaXNFbXB0eU9yTnVsbCkgewogICAgICByZXR1cm4gaW5jbHVkZU51bGwgPyBvdGhlciA6IG90aGVyLm5vbk51bGxhYmxlKCk7CiAgICB9CgogICAgU3ViY2xhc3NSZXN1bHQgcmVzdWx0ID0gY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkKICAgICAgICAuY29tbW9uU3ViY2xhc3NlcyhiYXNlLCBfY2xhc3NRdWVyeSwgb3RoZXJCYXNlLCBmbGF0T3RoZXIuX2NsYXNzUXVlcnkpOwoKICAgIHN3aXRjaCAocmVzdWx0LmtpbmQpIHsKICAgICAgY2FzZSBTdWJjbGFzc1Jlc3VsdEtpbmQuRU1QVFk6CiAgICAgICAgcmV0dXJuIGluY2x1ZGVOdWxsCiAgICAgICAgICAgID8gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5udWxsVHlwZQogICAgICAgICAgICA6IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlOwogICAgICBjYXNlIFN1YmNsYXNzUmVzdWx0S2luZC5FWEFDVDE6CiAgICAgICAgYXNzZXJ0KGlzRXhhY3QpOwogICAgICAgIHJldHVybiBpbmNsdWRlTnVsbCA/IHRoaXMgOiBub25OdWxsYWJsZSgpOwogICAgICBjYXNlIFN1YmNsYXNzUmVzdWx0S2luZC5FWEFDVDI6CiAgICAgICAgYXNzZXJ0KG90aGVyLmlzRXhhY3QpOwogICAgICAgIHJldHVybiBpbmNsdWRlTnVsbCA/IG90aGVyIDogb3RoZXIubm9uTnVsbGFibGUoKTsKICAgICAgY2FzZSBTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCQ0xBU1MxOgogICAgICAgIGFzc2VydChpc1N1YmNsYXNzKTsKICAgICAgICByZXR1cm4gaW5jbHVkZU51bGwgPyB0aGlzIDogbm9uTnVsbGFibGUoKTsKICAgICAgY2FzZSBTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCQ0xBU1MyOgogICAgICAgIGFzc2VydChmbGF0T3RoZXIuaXNTdWJjbGFzcyk7CiAgICAgICAgcmV0dXJuIGluY2x1ZGVOdWxsID8gb3RoZXIgOiBvdGhlci5ub25OdWxsYWJsZSgpOwogICAgICBjYXNlIFN1YmNsYXNzUmVzdWx0S2luZC5TVUJUWVBFMToKICAgICAgICBhc3NlcnQoaXNTdWJ0eXBlKTsKICAgICAgICByZXR1cm4gaW5jbHVkZU51bGwgPyB0aGlzIDogbm9uTnVsbGFibGUoKTsKICAgICAgY2FzZSBTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCVFlQRTI6CiAgICAgICAgYXNzZXJ0KGZsYXRPdGhlci5pc1N1YnR5cGUpOwogICAgICAgIHJldHVybiBpbmNsdWRlTnVsbCA/IG90aGVyIDogb3RoZXIubm9uTnVsbGFibGUoKTsKICAgICAgY2FzZSBTdWJjbGFzc1Jlc3VsdEtpbmQuU0VUOgogICAgICBkZWZhdWx0OgogICAgICAgIGlmIChyZXN1bHQuY2xhc3Nlcy5pc0VtcHR5KSB7CiAgICAgICAgICByZXR1cm4gaW5jbHVkZU51bGwKICAgICAgICAgICAgICA/IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4ubnVsbFR5cGUKICAgICAgICAgICAgICA6IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlOwogICAgICAgIH0gZWxzZSBpZiAocmVzdWx0LmNsYXNzZXMubGVuZ3RoID09IDEpIHsKICAgICAgICAgIENsYXNzRW50aXR5IGNscyA9IHJlc3VsdC5jbGFzc2VzLmZpcnN0OwogICAgICAgICAgcmV0dXJuIGluY2x1ZGVOdWxsCiAgICAgICAgICAgICAgPyBuZXcgVHlwZU1hc2suc3ViY2xhc3MoY2xzLCBjbG9zZWRXb3JsZCkKICAgICAgICAgICAgICA6IG5ldyBUeXBlTWFzay5ub25OdWxsU3ViY2xhc3MoY2xzLCBjbG9zZWRXb3JsZCk7CiAgICAgICAgfQoKICAgICAgICBMaXN0PEZsYXRUeXBlTWFzaz4gbWFza3MgPSA8RmxhdFR5cGVNYXNrPltdOwogICAgICAgIGlmIChpbmNsdWRlTnVsbCkgewogICAgICAgICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gcmVzdWx0LmNsYXNzZXMpIHsKICAgICAgICAgICAgbWFza3MuYWRkKG5ldyBUeXBlTWFzay5zdWJjbGFzcyhjbHMsIGNsb3NlZFdvcmxkKSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIHJlc3VsdC5jbGFzc2VzKSB7CiAgICAgICAgICAgIG1hc2tzLmFkZChuZXcgVHlwZU1hc2subm9uTnVsbFN1YmNsYXNzKGNscywgY2xvc2VkV29ybGQpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG1hc2tzLmxlbmd0aCA+IFVuaW9uVHlwZU1hc2suTUFYX1VOSU9OX0xFTkdUSCkgewogICAgICAgICAgcmV0dXJuIFVuaW9uVHlwZU1hc2suZmxhdHRlbihtYXNrcywgY2xvc2VkV29ybGQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IFVuaW9uVHlwZU1hc2suX2ludGVybmFsKG1hc2tzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNEaXNqb2ludChUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAob3RoZXIgaXMhIEZsYXRUeXBlTWFzaykgcmV0dXJuIG90aGVyLmlzRGlzam9pbnQodGhpcywgY2xvc2VkV29ybGQpOwogICAgRmxhdFR5cGVNYXNrIGZsYXRPdGhlciA9IG90aGVyOwoKICAgIGlmIChpc051bGxhYmxlICYmIGZsYXRPdGhlci5pc051bGxhYmxlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoaXNFbXB0eU9yTnVsbCB8fCBmbGF0T3RoZXIuaXNFbXB0eU9yTnVsbCkgcmV0dXJuIHRydWU7CiAgICBpZiAoYmFzZSA9PSBmbGF0T3RoZXIuYmFzZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGlzRXhhY3QgJiYgZmxhdE90aGVyLmlzRXhhY3QpIHJldHVybiB0cnVlOwoKICAgIGlmIChpc0V4YWN0KSByZXR1cm4gIWZsYXRPdGhlci5jb250YWlucyhiYXNlLCBjbG9zZWRXb3JsZCk7CiAgICBpZiAoZmxhdE90aGVyLmlzRXhhY3QpIHJldHVybiAhY29udGFpbnMoZmxhdE90aGVyLmJhc2UsIGNsb3NlZFdvcmxkKTsKCiAgICAvLyBOb3JtYWxpemF0aW9uIGd1YXJhbnRlZXMgdGhhdCBpc0V4YWN0ID09PSAhaXNTdWJjbGFzcyAmJiAhaXNTdWJ0eXBlLgogICAgLy8gQm90aCBhcmUgc3ViY2xhc3Mgb3Igc3VidHlwZSBtYXNrcywgc28gaWYgdGhlcmUgaXMgYSBzdWJjbGFzcwogICAgLy8gcmVsYXRpb25zaGlwLCB0aGV5IGFyZSBub3QgZGlzam9pbnQuCiAgICBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJjbGFzc09mKGZsYXRPdGhlci5iYXNlLCBiYXNlKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJjbGFzc09mKGJhc2UsIGZsYXRPdGhlci5iYXNlKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLy8gVHdvIGRpZmZlcmVudCBiYXNlIGNsYXNzZXMgaGF2ZSBubyBjb21tb24gc3ViY2xhc3MgdW5sZXNzIG9uZSBpcyBhCiAgICAvLyBzdWJjbGFzcyBvZiB0aGUgb3RoZXIgKGNoZWNrZWQgYWJvdmUpLgogICAgaWYgKGlzU3ViY2xhc3MgJiYgZmxhdE90aGVyLmlzU3ViY2xhc3MpIHJldHVybiB0cnVlOwoKICAgIHJldHVybiBfaXNEaXNqb2ludEhlbHBlcih0aGlzLCBmbGF0T3RoZXIsIGNsb3NlZFdvcmxkKTsKICB9CgogIHN0YXRpYyBib29sIF9pc0Rpc2pvaW50SGVscGVyKAogICAgICBGbGF0VHlwZU1hc2sgYSwgRmxhdFR5cGVNYXNrIGIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKCFhLmlzU3ViY2xhc3MgJiYgYi5pc1N1YmNsYXNzKSB7CiAgICAgIHJldHVybiBfaXNEaXNqb2ludEhlbHBlcihiLCBhLCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgICBhc3NlcnQoYS5pc1N1YmNsYXNzIHx8IGEuaXNTdWJ0eXBlKTsKICAgIGFzc2VydChiLmlzU3VidHlwZSk7CiAgICB2YXIgZWxlbWVudHMgPSBhLmlzU3ViY2xhc3MKICAgICAgICA/IGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LnN0cmljdFN1YmNsYXNzZXNPZihhLmJhc2UpCiAgICAgICAgOiBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5zdHJpY3RTdWJ0eXBlc09mKGEuYmFzZSk7CiAgICBmb3IgKHZhciBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YnR5cGVPZihlbGVtZW50LCBiLmJhc2UpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIFR5cGVNYXNrIGludGVyc2VjdGlvblNhbWUoRmxhdFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGFzc2VydChiYXNlID09IG90aGVyLmJhc2UpOwogICAgLy8gVGhlIHR3byBtYXNrcyBzaGFyZSB0aGUgYmFzZSB0eXBlLCBzbyB3ZSBtdXN0IGNob3NlIHRoZSBtb3N0CiAgICAvLyBjb25zdHJhaW5pbmcga2luZCAodGhlIGxvd2VzdCkgb2YgdGhlIHR3by4gT25seSBpZiBib3RoIG1hc2tzCiAgICAvLyBhcmUgbnVsbGFibGUsIHdpbGwgdGhlIHJlc3VsdCBiZSBudWxsYWJsZSB0b28uCiAgICAvLyBUaGUgcmVzdWx0IHdpbGwgYmUgbm9ybWFsaXplZCwgYXMgdGhlIHR3byBpbnB1dHMgYXJlIG5vcm1hbGl6ZWQsIHRvby4KICAgIGludCBjb21iaW5lZCA9IChmbGFncyA8IG90aGVyLmZsYWdzKQogICAgICAgID8gZmxhZ3MgJiAoKG90aGVyLmZsYWdzICYgMSkgfCB+MSkKICAgICAgICA6IG90aGVyLmZsYWdzICYgKChmbGFncyAmIDEpIHwgfjEpOwogICAgaWYgKGZsYWdzID09IGNvbWJpbmVkKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlIGlmIChvdGhlci5mbGFncyA9PSBjb21iaW5lZCkgewogICAgICByZXR1cm4gb3RoZXI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IEZsYXRUeXBlTWFzay5ub3JtYWxpemVkKGJhc2UsIGNvbWJpbmVkLCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgfQoKICBUeXBlTWFzayBpbnRlcnNlY3Rpb25TdHJpY3RTdWJjbGFzcygKICAgICAgRmxhdFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGFzc2VydChiYXNlICE9IG90aGVyLmJhc2UpOwogICAgYXNzZXJ0KGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3ViY2xhc3NPZihvdGhlci5iYXNlLCBiYXNlKSk7CiAgICAvLyBJZiB0aGlzIG1hc2sgaXNuJ3QgYXQgbGVhc3QgYSBzdWJjbGFzcyBtYXNrLCB0aGVuIHRoZQogICAgLy8gaW50ZXJzZWN0aW9uIHdpdGggdGhlIG90aGVyIG1hc2sgaXMgZW1wdHkuCiAgICBpZiAoaXNFeGFjdCkgcmV0dXJuIGludGVyc2VjdGlvbkVtcHR5KG90aGVyKTsKICAgIC8vIE9ubHkgdGhlIG90aGVyIG1hc2sgcHV0cyBjb25zdHJhaW50cyBvbiB0aGUgaW50ZXJzZWN0aW9uIG1hc2ssCiAgICAvLyBzbyBiYXNlIHRoZSBjb21iaW5lZCBmbGFncyBvbiB0aGUgb3RoZXIgbWFzay4gT25seSBpZiBib3RoCiAgICAvLyBtYXNrcyBhcmUgbnVsbGFibGUsIHdpbGwgdGhlIHJlc3VsdCBiZSBudWxsYWJsZSB0b28uCiAgICAvLyBUaGUgcmVzdWx0IGlzIGd1YXJhbnRlZWQgdG8gYmUgbm9ybWFsaXplZCwgYXMgdGhlIG90aGVyIHR5cGUKICAgIC8vIHdhcyBub3JtYWxpemVkLgogICAgaW50IGNvbWJpbmVkID0gb3RoZXIuZmxhZ3MgJiAoKGZsYWdzICYgMSkgfCB+MSk7CiAgICBpZiAob3RoZXIuZmxhZ3MgPT0gY29tYmluZWQpIHsKICAgICAgcmV0dXJuIG90aGVyOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBGbGF0VHlwZU1hc2subm9ybWFsaXplZChvdGhlci5iYXNlLCBjb21iaW5lZCwgY2xvc2VkV29ybGQpOwogICAgfQogIH0KCiAgVHlwZU1hc2sgaW50ZXJzZWN0aW9uRW1wdHkoRmxhdFR5cGVNYXNrIG90aGVyKSB7CiAgICByZXR1cm4gaXNOdWxsYWJsZSAmJiBvdGhlci5pc051bGxhYmxlCiAgICAgICAgPyBuZXcgVHlwZU1hc2suZW1wdHkoKQogICAgICAgIDogbmV3IFR5cGVNYXNrLm5vbk51bGxFbXB0eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5IaXQoTWVtYmVyRW50aXR5IGVsZW1lbnQsIE5hbWUgbmFtZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cyA9IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwogICAgYXNzZXJ0KGVsZW1lbnQubmFtZSA9PSBuYW1lLnRleHQpOwogICAgaWYgKGlzRW1wdHkpIHJldHVybiBmYWxzZTsKICAgIGlmIChpc051bGwpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmhhc0VsZW1lbnRJbigKICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLmpzTnVsbENsYXNzLCBuYW1lLCBlbGVtZW50KTsKICAgIH0KCiAgICBDbGFzc0VudGl0eSBvdGhlciA9IGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3M7CiAgICBpZiAob3RoZXIgPT0gY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MpIHsKICAgICAgcmV0dXJuIGlzTnVsbGFibGU7CiAgICB9IGVsc2UgaWYgKGlzRXhhY3QpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmhhc0VsZW1lbnRJbihiYXNlLCBuYW1lLCBlbGVtZW50KTsKICAgIH0gZWxzZSBpZiAoaXNTdWJjbGFzcykgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuaGFzRWxlbWVudEluKGJhc2UsIG5hbWUsIGVsZW1lbnQpIHx8CiAgICAgICAgICBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YmNsYXNzT2Yob3RoZXIsIGJhc2UpIHx8CiAgICAgICAgICBjbG9zZWRXb3JsZC5oYXNBbnlTdWJjbGFzc1RoYXRNaXhlcyhiYXNlLCBvdGhlcik7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoaXNTdWJ0eXBlKTsKICAgICAgYm9vbCByZXN1bHQgPSBjbG9zZWRXb3JsZC5oYXNFbGVtZW50SW4oYmFzZSwgbmFtZSwgZWxlbWVudCkgfHwKICAgICAgICAgIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3VidHlwZU9mKG90aGVyLCBiYXNlKSB8fAogICAgICAgICAgY2xvc2VkV29ybGQuaGFzQW55U3ViY2xhc3NUaGF0SW1wbGVtZW50cyhvdGhlciwgYmFzZSkgfHwKICAgICAgICAgIGNsb3NlZFdvcmxkLmhhc0FueVN1YmNsYXNzT2ZNaXhpblVzZVRoYXRJbXBsZW1lbnRzKG90aGVyLCBiYXNlKTsKICAgICAgaWYgKHJlc3VsdCkgcmV0dXJuIHRydWU7CiAgICAgIC8vIElmIHRoZSBjbGFzcyBpcyB1c2VkIGFzIGEgbWl4aW4sIHdlIGhhdmUgdG8gY2hlY2sgaWYgdGhlIGVsZW1lbnQKICAgICAgLy8gY2FuIGJlIGhpdCBmcm9tIGFueSBvZiB0aGUgbWl4aW4gYXBwbGljYXRpb25zLgogICAgICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gbWl4aW5Vc2VzID0gY2xvc2VkV29ybGQubWl4aW5Vc2VzT2YoYmFzZSk7CiAgICAgIHJldHVybiBtaXhpblVzZXMuYW55KChtaXhpbkFwcGxpY2F0aW9uKSA9PgogICAgICAgICAgY2xvc2VkV29ybGQuaGFzRWxlbWVudEluKG1peGluQXBwbGljYXRpb24sIG5hbWUsIGVsZW1lbnQpIHx8CiAgICAgICAgICBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YmNsYXNzT2Yob3RoZXIsIG1peGluQXBwbGljYXRpb24pIHx8CiAgICAgICAgICBjbG9zZWRXb3JsZC5oYXNBbnlTdWJjbGFzc1RoYXRNaXhlcyhtaXhpbkFwcGxpY2F0aW9uLCBvdGhlcikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBuZWVkc05vU3VjaE1ldGhvZEhhbmRsaW5nKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgY292YXJpYW50IEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgLy8gQSBjYWxsIG9uIGFuIGVtcHR5IHR5cGUgbWFzayBpcyBlaXRoZXIgZGVhZCBjb2RlLCBvciBhIGNhbGwgb24KICAgIC8vIGBudWxsYC4KICAgIGlmIChpc0VtcHR5T3JOdWxsKSByZXR1cm4gZmFsc2U7CiAgICAvLyBBIGNhbGwgb24gYW4gZXhhY3QgbWFzayBmb3IgYW4gYWJzdHJhY3QgY2xhc3MgaXMgZGVhZCBjb2RlLgogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQSB0eXBlIG1hc2sgY2Fubm90IGJlIGFic3RyYWN0LiBSZW1vdmUgdGhlIG5lZWQKICAgIC8vIGZvciB0aGlzIG5vaXNlIChjdXJyZW50bHkgdXNlZCBmb3Igc3VwZXItY2FsbHMgaW4gaW5mZXJlbmNlIGFuZCBtaXJyb3IKICAgIC8vIHVzYWdlKS4KICAgIGlmIChpc0V4YWN0ICYmIGJhc2UuaXNBYnN0cmFjdCkgcmV0dXJuIGZhbHNlOwoKICAgIHJldHVybiBjbG9zZWRXb3JsZC5uZWVkc05vU3VjaE1ldGhvZChiYXNlLCBzZWxlY3RvciwgX2NsYXNzUXVlcnkpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGxvY2F0ZVNpbmdsZU1lbWJlcihTZWxlY3RvciBzZWxlY3RvciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoaXNFbXB0eU9yTnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoY2xvc2VkV29ybGQuaW5jbHVkZXNDbG9zdXJlQ2FsbChzZWxlY3RvciwgdGhpcykpIHJldHVybiBudWxsOwogICAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiB0YXJnZXRzID0gY2xvc2VkV29ybGQubG9jYXRlTWVtYmVycyhzZWxlY3RvciwgdGhpcyk7CiAgICBpZiAodGFyZ2V0cy5sZW5ndGggIT0gMSkgcmV0dXJuIG51bGw7CiAgICBNZW1iZXJFbnRpdHkgcmVzdWx0ID0gdGFyZ2V0cy5maXJzdDsKICAgIENsYXNzRW50aXR5IGVuY2xvc2luZyA9IHJlc3VsdC5lbmNsb3NpbmdDbGFzczsKICAgIC8vIFdlIG9ubHkgcmV0dXJuIHRoZSBmb3VuZCBlbGVtZW50IGlmIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgaW1wbGVtZW50ZWQgb24KICAgIC8vIGFsbCBjbGFzc2VzIGluIHRoZSByZWNlaXZlciB0eXBlIFt0aGlzXS4gSXQgY291bGQgYmUgZm91bmQgb25seSBpbiBhCiAgICAvLyBzdWJjbGFzcyBvciBpbiBhbiBpbmhlcml0YW5jZS13aXNlIHVucmVsYXRlZCBjbGFzcyBpbiBjYXNlIG9mIHN1YnR5cGUKICAgIC8vIHNlbGVjdG9ycy4KICAgIGlmIChpc1N1YnR5cGUpIHsKICAgICAgLy8gaWYgKGNsb3NlZFdvcmxkLmlzVXNlZEFzTWl4aW4oZW5jbG9zaW5nKSkgewogICAgICBpZiAoY2xvc2VkV29ybGQuZXZlcnlTdWJ0eXBlSXNTdWJjbGFzc09mT3JNaXhpblVzZU9mKGJhc2UsIGVuY2xvc2luZykpIHsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIC8vfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YmNsYXNzT2YoYmFzZSwgZW5jbG9zaW5nKSkgewogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgaWYgKGNsb3NlZFdvcmxkLmlzU3ViY2xhc3NPZk1peGluVXNlT2YoYmFzZSwgZW5jbG9zaW5nKSkgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIp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byBpdC4KYWJzdHJhY3QgY2xhc3MgRm9yd2FyZGluZ1R5cGVNYXNrIGltcGxlbWVudHMgVHlwZU1hc2sgewogIFR5cGVNYXNrIGdldCBmb3J3YXJkVG87CgogIEZvcndhcmRpbmdUeXBlTWFzaygpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5T3JOdWxsID0+IGZvcndhcmRUby5pc0VtcHR5T3JOdWxsOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gZm9yd2FyZFRvLmlzRW1wdHk7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOdWxsYWJsZSA9PiBmb3J3YXJkVG8uaXNOdWxsYWJsZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc051bGwgPT4gZm9yd2FyZFRvLmlzTnVsbDsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0V4YWN0ID0+IGZvcndhcmRUby5pc0V4YWN0OwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1VuaW9uID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ29udGFpbmVyID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU2V0ID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTWFwID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRGljdGlvbmFyeSA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1ZhbHVlID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRm9yd2FyZGluZyA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSW5NYXNrKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBmb3J3YXJkVG8uaXNJbk1hc2sob3RoZXIsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNNYXNrKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBmb3J3YXJkVG8uY29udGFpbnNNYXNrKG90aGVyLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seUludChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBmb3J3YXJkVG8uY29udGFpbnNPbmx5SW50KGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5RG91YmxlKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGZvcndhcmRUby5jb250YWluc09ubHlEb3VibGUoY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHlOdW0oSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLmNvbnRhaW5zT25seU51bShjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seUJvb2woSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLmNvbnRhaW5zT25seUJvb2woY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHlTdHJpbmcoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLmNvbnRhaW5zT25seVN0cmluZyhjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBmb3J3YXJkVG8uY29udGFpbnNPbmx5KGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHNhdGlzZmllcyhDbGFzc0VudGl0eSBjbHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGZvcndhcmRUby5zYXRpc2ZpZXMoY2xzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zKENsYXNzRW50aXR5IGNscywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLmNvbnRhaW5zKGNscywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0FsbChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBmb3J3YXJkVG8uY29udGFpbnNBbGwoY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgc2luZ2xlQ2xhc3MoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLnNpbmdsZUNsYXNzKGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHVuaW9uKG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmICh0aGlzID09IG90aGVyKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlIGlmIChlcXVhbHNEaXNyZWdhcmROdWxsKG90aGVyKSkgewogICAgICByZXR1cm4gb3RoZXIuaXNOdWxsYWJsZSA/IG90aGVyIDogdGhpczsKICAgIH0gZWxzZSBpZiAob3RoZXIuaXNFbXB0eU9yTnVsbCkgewogICAgICByZXR1cm4gb3RoZXIuaXNOdWxsYWJsZSA/IHRoaXMubnVsbGFibGUoKSA6IHRoaXM7CiAgICB9CiAgICByZXR1cm4gZm9yd2FyZFRvLnVuaW9uKG90aGVyLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRGlzam9pbnQoVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGZvcndhcmRUby5pc0Rpc2pvaW50KG90aGVyLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBpbnRlcnNlY3Rpb24oVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGZvcndhcmRUby5pbnRlcnNlY3Rpb24ob3RoZXIsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgbmVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZygKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIGNvdmFyaWFudCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBmb3J3YXJkVG8ubmVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZyhzZWxlY3RvciwgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5IaXQoTWVtYmVyRW50aXR5IGVsZW1lbnQsIE5hbWUgbmFtZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZm9yd2FyZFRvLmNhbkhpdChlbGVtZW50LCBuYW1lLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgbG9jYXRlU2luZ2xlTWVtYmVyKFNlbGVjdG9yIHNlbGVjdG9yLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBmb3J3YXJkVG8ubG9jYXRlU2luZ2xlTWVtYmVyKHNlbGVjdG9yLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBib29sIGVxdWFsc0Rpc3JlZ2FyZE51bGwob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgRm9yd2FyZGluZ1R5cGVNYXNrKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZm9yd2FyZFRvLmlzTnVsbGFibGUpIHsKICAgICAgcmV0dXJuIGZvcndhcmRUbyA9PSBvdGhlci5mb3J3YXJkVG8ubnVsbGFibGUoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmb3J3YXJkVG8gPT0gb3RoZXIuZm9yd2FyZFRvLm5vbk51bGxhYmxlKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gZXF1YWxzRGlzcmVnYXJkTnVsbChvdGhlcikgJiYgaXNOdWxsYWJsZSA9PSBvdGhlci5pc051bGxhYmxlOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0aHJvdyAiU3ViY2xhc3Mgc2hvdWxkIGltcGxlbWVudCBoYXNoQ29kZSBnZXR0ZXIiOwp9CgphYnN0cmFjdCBjbGFzcyBBbGxvY2F0aW9uVHlwZU1hc2sgZXh0ZW5kcyBGb3J3YXJkaW5nVHlwZU1hc2sgewogIC8vIFRoZSBbaXIuTm9kZV0gd2hlcmUgdGhpcyB0eXBlIG1hc2sgd2FzIGNyZWF0ZWQuCiAgaXIuTm9kZSBnZXQgYWxsb2NhdGlvbk5vZGU7CgogIC8vIFRoZSBbRW50aXR5XSB3aGVyZSB0aGlzIHR5cGUgbWFzayB3YXMgY3JlYXRlZC4KICBNZW1iZXJFbnRpdHkgZ2V0IGFsbG9jYXRpb25FbGVtZW50Owp9CoCkAE5OPAEPAT4iOBoBGAEMNQwpDC8MJwwpAQwdDCEMGwwbDCIMHQwhAQw8MwQBDEA3BAEMMzMEAQw2NgQBDDMzBAEMNDQEAQw2NgQBDCcoBAEMPjIEAQw9MQQBDC8vBAEMNi8EAQw0GRMtLiY4BjAEAQw+NQQBDEQ3BAEMIj9HBAEMSzkEAQxRQAQBJDQgNg05BgQBDBxJBAEMSQIBPzUeATQmAgFBcGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL2ZvcndhcmRpbmdfdHlwZV9tYXNrLmRhcnRDc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL21hcF90eXBlX21hc2suZGFydJRALy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgbWFza3M7CgovLy8gQSBbTWFwVHlwZU1hc2tdIGlzIGEgW1R5cGVNYXNrXSBmb3IgYSBzcGVjaWZpYyBhbGxvY2F0aW9uCi8vLyBzaXRlIG9mIGEgbWFwIChjdXJyZW50bHkgb25seSBpbnRlcm5hbCBNYXAgY2xhc3MpIHRoYXQgd2lsbCBnZXQgc3BlY2lhbGl6ZWQKLy8vIG9uY2UgdGhlIFtUeXBlR3JhcGhJbmZlcnJlcl0gcGhhc2UgZmluZHMgYSBrZXkgYW5kL29yIHZhbHVlIHR5cGUgZm9yIGl0LgpjbGFzcyBNYXBUeXBlTWFzayBleHRlbmRzIEFsbG9jYXRpb25UeXBlTWFzayB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtNYXBUeXBlTWFza10gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdtYXAtdHlwZS1tYXNrJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgVHlwZU1hc2sgZm9yd2FyZFRvOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBpci5Ob2RlIGFsbG9jYXRpb25Ob2RlOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBNZW1iZXJFbnRpdHkgYWxsb2NhdGlvbkVsZW1lbnQ7CgogIC8vIFRoZSB2YWx1ZSB0eXBlIG9mIHRoaXMgbWFwLgogIGZpbmFsIFR5cGVNYXNrIHZhbHVlVHlwZTsKCiAgLy8gVGhlIGtleSB0eXBlIG9mIHRoaXMgbWFwLgogIGZpbmFsIFR5cGVNYXNrIGtleVR5cGU7CgogIE1hcFR5cGVNYXNrKHRoaXMuZm9yd2FyZFRvLCB0aGlzLmFsbG9jYXRpb25Ob2RlLCB0aGlzLmFsbG9jYXRpb25FbGVtZW50LAogICAgICB0aGlzLmtleVR5cGUsIHRoaXMudmFsdWVUeXBlKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtNYXBUeXBlTWFza10gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBNYXBUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgVHlwZU1hc2sgZm9yd2FyZFRvID0gbmV3IFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgIGlyLlRyZWVOb2RlIGFsbG9jYXRpb25Ob2RlID0gc291cmNlLnJlYWRUcmVlTm9kZU9yTnVsbCgpOwogICAgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50ID0gc291cmNlLnJlYWRNZW1iZXJPck51bGwoKTsKICAgIFR5cGVNYXNrIGtleVR5cGUgPSBuZXcgVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgVHlwZU1hc2sgdmFsdWVUeXBlID0gbmV3IFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgTWFwVHlwZU1hc2soCiAgICAgICAgZm9yd2FyZFRvLCBhbGxvY2F0aW9uTm9kZSwgYWxsb2NhdGlvbkVsZW1lbnQsIGtleVR5cGUsIHZhbHVlVHlwZSk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtNYXBUeXBlTWFza10gdG8gW3NpbmtdLgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKFR5cGVNYXNrS2luZC5tYXApOwogICAgc2luay5iZWdpbih0YWcpOwogICAgZm9yd2FyZFRvLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVUcmVlTm9kZU9yTnVsbChhbGxvY2F0aW9uTm9kZSk7CiAgICBzaW5rLndyaXRlTWVtYmVyT3JOdWxsKGFsbG9jYXRpb25FbGVtZW50KTsKICAgIGtleVR5cGUud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgdmFsdWVUeXBlLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBudWxsYWJsZSgpIHsKICAgIHJldHVybiBpc051bGxhYmxlCiAgICAgICAgPyB0aGlzCiAgICAgICAgOiBuZXcgTWFwVHlwZU1hc2soZm9yd2FyZFRvLm51bGxhYmxlKCksIGFsbG9jYXRpb25Ob2RlLAogICAgICAgICAgICBhbGxvY2F0aW9uRWxlbWVudCwga2V5VHlwZSwgdmFsdWVUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIG5vbk51bGxhYmxlKCkgewogICAgcmV0dXJuIGlzTnVsbGFibGUKICAgICAgICA/IG5ldyBNYXBUeXBlTWFzayhmb3J3YXJkVG8ubm9uTnVsbGFibGUoKSwgYWxsb2NhdGlvbk5vZGUsCiAgICAgICAgICAgIGFsbG9jYXRpb25FbGVtZW50LCBrZXlUeXBlLCB2YWx1ZVR5cGUpCiAgICAgICAgOiB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDb250YWluZXIgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNYXAgPT4gdHJ1ZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0V4YWN0ID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZXF1YWxzRGlzcmVnYXJkTnVsbChvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBNYXBUeXBlTWFzaykgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHN1cGVyLmVxdWFsc0Rpc3JlZ2FyZE51bGwob3RoZXIpICYmCiAgICAgICAgYWxsb2NhdGlvbk5vZGUgPT0gb3RoZXIuYWxsb2NhdGlvbk5vZGUgJiYKICAgICAgICBrZXlUeXBlID09IG90aGVyLmtleVR5cGUgJiYKICAgICAgICB2YWx1ZVR5cGUgPT0gb3RoZXIudmFsdWVUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgaW50ZXJzZWN0aW9uKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIFR5cGVNYXNrIGZvcndhcmRJbnRlcnNlY3Rpb24gPSBmb3J3YXJkVG8uaW50ZXJzZWN0aW9uKG90aGVyLCBjbG9zZWRXb3JsZCk7CiAgICBpZiAoZm9yd2FyZEludGVyc2VjdGlvbi5pc0VtcHR5T3JOdWxsKSByZXR1cm4gZm9yd2FyZEludGVyc2VjdGlvbjsKICAgIHJldHVybiBmb3J3YXJkSW50ZXJzZWN0aW9uLmlzTnVsbGFibGUgPyBudWxsYWJsZSgpIDogbm9uTnVsbGFibGUoKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHVuaW9uKGR5bmFtaWMgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKHRoaXMgPT0gb3RoZXIpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UgaWYgKGVxdWFsc0Rpc3JlZ2FyZE51bGwob3RoZXIpKSB7CiAgICAgIHJldHVybiBvdGhlci5pc051bGxhYmxlID8gb3RoZXIgOiB0aGlzOwogICAgfSBlbHNlIGlmIChvdGhlci5pc0VtcHR5T3JOdWxsKSB7CiAgICAgIHJldHVybiBvdGhlci5pc051bGxhYmxlID8gdGhpcy5udWxsYWJsZSgpIDogdGhpczsKICAgIH0gZWxzZSBpZiAob3RoZXIuaXNNYXAgJiYKICAgICAgICBrZXlUeXBlICE9IG51bGwgJiYKICAgICAgICBvdGhlci5rZXlUeXBlICE9IG51bGwgJiYKICAgICAgICB2YWx1ZVR5cGUgIT0gbnVsbCAmJgogICAgICAgIG90aGVyLnZhbHVlVHlwZSAhPSBudWxsKSB7CiAgICAgIFR5cGVNYXNrIG5ld0tleVR5cGUgPSBrZXlUeXBlLnVuaW9uKG90aGVyLmtleVR5cGUsIGNsb3NlZFdvcmxkKTsKICAgICAgVHlwZU1hc2sgbmV3VmFsdWVUeXBlID0gdmFsdWVUeXBlLnVuaW9uKG90aGVyLnZhbHVlVHlwZSwgY2xvc2VkV29ybGQpOwogICAgICBUeXBlTWFzayBuZXdGb3J3YXJkVG8gPSBmb3J3YXJkVG8udW5pb24ob3RoZXIuZm9yd2FyZFRvLCBjbG9zZWRXb3JsZCk7CiAgICAgIHJldHVybiBuZXcgTWFwVHlwZU1hc2soCiAgICAgICAgICBuZXdGb3J3YXJkVG8sIG51bGwsIG51bGwsIG5ld0tleVR5cGUsIG5ld1ZhbHVlVHlwZSk7CiAgICB9IGVsc2UgaWYgKG90aGVyLmlzRGljdGlvbmFyeSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBGaW5kIGFub3RoZXIgd2F5IHRvIGNoZWNrIHRoaXMgaW52YXJpYW50IHRoYXQKICAgICAgLy8gZG9lc24ndCBuZWVkIHRoZSBjb21waWxlci4KICAgICAgYXNzZXJ0KG90aGVyLmtleVR5cGUgPT0KICAgICAgICAgIG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QoCiAgICAgICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcywgY2xvc2VkV29ybGQpKTsKICAgICAgVHlwZU1hc2sgbmV3S2V5VHlwZSA9IGtleVR5cGUudW5pb24ob3RoZXIua2V5VHlwZSwgY2xvc2VkV29ybGQpOwogICAgICBUeXBlTWFzayBuZXdWYWx1ZVR5cGUgPQogICAgICAgICAgb3RoZXIudHlwZU1hcC52YWx1ZXMuZm9sZChrZXlUeXBlLCAocCwgbikgPT4gcC51bmlvbihuLCBjbG9zZWRXb3JsZCkpOwogICAgICBUeXBlTWFzayBuZXdGb3J3YXJkVG8gPSBmb3J3YXJkVG8udW5pb24ob3RoZXIuZm9yd2FyZFRvLCBjbG9zZWRXb3JsZCk7CiAgICAgIE1hcFR5cGVNYXNrIG5ld01hcFR5cGVNYXNrID0gbmV3IE1hcFR5cGVNYXNrKAogICAgICAgICAgbmV3Rm9yd2FyZFRvLAogICAgICAgICAgYWxsb2NhdGlvbk5vZGUgPT0gb3RoZXIuYWxsb2NhdGlvbk5vZGUgPyBhbGxvY2F0aW9uTm9kZSA6IG51bGwsCiAgICAgICAgICBhbGxvY2F0aW9uRWxlbWVudCA9PSBvdGhlci5hbGxvY2F0aW9uRWxlbWVudAogICAgICAgICAgICAgID8gYWxsb2NhdGlvbkVsZW1lbnQKICAgICAgICAgICAgICA6IG51bGwsCiAgICAgICAgICBuZXdLZXlUeXBlLAogICAgICAgICAgbmV3VmFsdWVUeXBlKTsKICAgICAgcmV0dXJuIG5ld01hcFR5cGVNYXNrOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZvcndhcmRUby51bmlvbihvdGhlciwgY2xvc2VkV29ybGQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgPT4gc3VwZXIgPT0gb3RoZXI7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIGNvbXB1dGVIYXNoQ29kZSgKICAgICAgICBhbGxvY2F0aW9uTm9kZSwgaXNOdWxsYWJsZSwga2V5VHlwZSwgdmFsdWVUeXBlLCBmb3J3YXJkVG8pOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdNYXAoJGZvcndhcmRUbywga2V5OiAka2V5VHlwZSwgdmFsdWU6ICR2YWx1ZVR5cGUpJzsKICB9Cn0KgJwATk48AQ8BPlBNL0UdLQEMHAEMIAEMKAEhHAEfGgFLJQE5KjUXTz5ATU8VHEsEAS8MKCYVJS4vIyUTBAEMGBYPQDQEAQwbFkMzEAQBDCEMGgwcAQwkLS8yJCYEAQxET0dIBAEMPBkTLS4mOB4bIR0jR01NHj8lTCQeJUdHHlFNNBhKNyIWFhkdDTIGBAEMLQEMFRxEBAEMFkAEAgE6cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL21hcF90eXBlX21hc2suZGFydENzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci90eXBlbWFza3Mvc2V0X3R5cGVfbWFzay5kYXJ0jt4vLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBtYXNrczsKCi8vLyBBIFtTZXRUeXBlTWFza10gaXMgYSBbVHlwZU1hc2tdIGZvciBhIHNwZWNpZmljIGFsbG9jYXRpb24gc2l0ZSBvZiBhIHNldAovLy8gKGN1cnJlbnRseSBvbmx5IHRoZSBpbnRlcm5hbCBTZXQgY2xhc3MpIHRoYXQgd2lsbCBnZXQgc3BlY2lhbGl6ZWQgb25jZSB0aGUKLy8vIFtUeXBlR3JhcGhJbmZlcnJlcl0gcGhhc2UgZmluZHMgYW4gZWxlbWVudCB0eXBlIGZvciBpdC4KY2xhc3MgU2V0VHlwZU1hc2sgZXh0ZW5kcyBBbGxvY2F0aW9uVHlwZU1hc2sgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbU2V0VHlwZU1hc2tdIG9iamVjdHMgaW4gYSBkZWJ1Z2dpbmcKICAvLy8gZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnc2V0LXR5cGUtbWFzayc7CgogIEBvdmVycmlkZQogIGZpbmFsIFR5cGVNYXNrIGZvcndhcmRUbzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaXIuTm9kZSBhbGxvY2F0aW9uTm9kZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyRW50aXR5IGFsbG9jYXRpb25FbGVtZW50OwoKICAvLyBUaGUgZWxlbWVudCB0eXBlIG9mIHRoaXMgc2V0LgogIGZpbmFsIFR5cGVNYXNrIGVsZW1lbnRUeXBlOwoKICBTZXRUeXBlTWFzayh0aGlzLmZvcndhcmRUbywgdGhpcy5hbGxvY2F0aW9uTm9kZSwgdGhpcy5hbGxvY2F0aW9uRWxlbWVudCwKICAgICAgdGhpcy5lbGVtZW50VHlwZSk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbU2V0VHlwZU1hc2tdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgU2V0VHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIFR5cGVNYXNrIGZvcndhcmRUbyA9IG5ldyBUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICBpci5UcmVlTm9kZSBhbGxvY2F0aW9uTm9kZSA9IHNvdXJjZS5yZWFkVHJlZU5vZGVPck51bGwoKTsKICAgIE1lbWJlckVudGl0eSBhbGxvY2F0aW9uRWxlbWVudCA9IHNvdXJjZS5yZWFkTWVtYmVyT3JOdWxsKCk7CiAgICBUeXBlTWFzayBlbGVtZW50VHlwZSA9IG5ldyBUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IFNldFR5cGVNYXNrKAogICAgICAgIGZvcndhcmRUbywgYWxsb2NhdGlvbk5vZGUsIGFsbG9jYXRpb25FbGVtZW50LCBlbGVtZW50VHlwZSk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtTZXRUeXBlTWFza10gdG8gW3NpbmtdLgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKFR5cGVNYXNrS2luZC5zZXQpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgZm9yd2FyZFRvLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVUcmVlTm9kZU9yTnVsbChhbGxvY2F0aW9uTm9kZSk7CiAgICBzaW5rLndyaXRlTWVtYmVyT3JOdWxsKGFsbG9jYXRpb25FbGVtZW50KTsKICAgIGVsZW1lbnRUeXBlLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBudWxsYWJsZSgpID0+IGlzTnVsbGFibGUKICAgICAgPyB0aGlzCiAgICAgIDogbmV3IFNldFR5cGVNYXNrKAogICAgICAgICAgZm9yd2FyZFRvLm51bGxhYmxlKCksIGFsbG9jYXRpb25Ob2RlLCBhbGxvY2F0aW9uRWxlbWVudCwgZWxlbWVudFR5cGUpOwoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayBub25OdWxsYWJsZSgpID0+IGlzTnVsbGFibGUKICAgICAgPyBuZXcgU2V0VHlwZU1hc2soZm9yd2FyZFRvLm5vbk51bGxhYmxlKCksIGFsbG9jYXRpb25Ob2RlLAogICAgICAgICAgYWxsb2NhdGlvbkVsZW1lbnQsIGVsZW1lbnRUeXBlKQogICAgICA6IHRoaXM7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU2V0ID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRXhhY3QgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBlcXVhbHNEaXNyZWdhcmROdWxsKG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIFNldFR5cGVNYXNrKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc3VwZXIuZXF1YWxzRGlzcmVnYXJkTnVsbChvdGhlcikgJiYKICAgICAgICBhbGxvY2F0aW9uTm9kZSA9PSBvdGhlci5hbGxvY2F0aW9uTm9kZSAmJgogICAgICAgIGVsZW1lbnRUeXBlID09IG90aGVyLmVsZW1lbnRUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgaW50ZXJzZWN0aW9uKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIFR5cGVNYXNrIGZvcndhcmRJbnRlcnNlY3Rpb24gPSBmb3J3YXJkVG8uaW50ZXJzZWN0aW9uKG90aGVyLCBjbG9zZWRXb3JsZCk7CiAgICBpZiAoZm9yd2FyZEludGVyc2VjdGlvbi5pc0VtcHR5T3JOdWxsKSByZXR1cm4gZm9yd2FyZEludGVyc2VjdGlvbjsKICAgIHJldHVybiBmb3J3YXJkSW50ZXJzZWN0aW9uLmlzTnVsbGFibGUgPyBudWxsYWJsZSgpIDogbm9uTnVsbGFibGUoKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIHVuaW9uKGR5bmFtaWMgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKHRoaXMgPT0gb3RoZXIpIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UgaWYgKGVxdWFsc0Rpc3JlZ2FyZE51bGwob3RoZXIpKSB7CiAgICAgIHJldHVybiBvdGhlci5pc051bGxhYmxlID8gb3RoZXIgOiB0aGlzOwogICAgfSBlbHNlIGlmIChvdGhlci5pc0VtcHR5T3JOdWxsKSB7CiAgICAgIHJldHVybiBvdGhlci5pc051bGxhYmxlID8gdGhpcy5udWxsYWJsZSgpIDogdGhpczsKICAgIH0gZWxzZSBpZiAob3RoZXIuaXNTZXQgJiYKICAgICAgICBlbGVtZW50VHlwZSAhPSBudWxsICYmCiAgICAgICAgb3RoZXIuZWxlbWVudFR5cGUgIT0gbnVsbCkgewogICAgICBUeXBlTWFzayBuZXdFbGVtZW50VHlwZSA9CiAgICAgICAgICBlbGVtZW50VHlwZS51bmlvbihvdGhlci5lbGVtZW50VHlwZSwgY2xvc2VkV29ybGQpOwogICAgICBUeXBlTWFzayBuZXdGb3J3YXJkVG8gPSBmb3J3YXJkVG8udW5pb24ob3RoZXIuZm9yd2FyZFRvLCBjbG9zZWRXb3JsZCk7CiAgICAgIHJldHVybiBuZXcgU2V0VHlwZU1hc2sobmV3Rm9yd2FyZFRvLCBudWxsLCBudWxsLCBuZXdFbGVtZW50VHlwZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZm9yd2FyZFRvLnVuaW9uKG90aGVyLCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSA9PiBzdXBlciA9PSBvdGhlcjsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PgogICAgICBjb21wdXRlSGFzaENvZGUoYWxsb2NhdGlvbk5vZGUsIGlzTnVsbGFibGUsIGVsZW1lbnRUeXBlLCBmb3J3YXJkVG8pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnU2V0KCRmb3J3YXJkVG8sIGVsZW1lbnQ6ICRlbGVtZW50VHlwZSknOwp9CncATk48AQ8BTE88L08TLQEMHAEMIAEMKAEjHgFLGQE5KjUXTz5AURUcRAQBLwwoJhUlLi8nEwQBDCQNGVEBDCdBKg4BDBoBDBwBDCQtLzIqBAEMRE9HSAQBDDwZEy0uJjgeHyUgPU1IDTIGBAEMLQEMFksBDEECATpwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlbWFza3Mvc2V0X3R5cGVfbWFzay5kYXJ0P3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy90eXBlX21hc2suZGFydLlaLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgbWFza3M7CgovLy8gQW4gaW1wbGVtZW50YXRpb24gb2YgYSBbVW5pdmVyc2VTZWxlY3RvckNvbnN0cmFpbnRzXSB0aGF0IGlzIGNvbnNpc3RzIGlmIGFuCi8vLyBvbmx5IGluY3JlYXNpbmcgc2V0IG9mIFtUeXBlTWFza11zLCB0aGF0IGlzLCBvbmNlIGEgbWFzayBpcyBhZGRlZCBpdCBjYW5ub3QKLy8vIGJlIHJlbW92ZWQuCmNsYXNzIEluY3JlYXNpbmdUeXBlTWFza1NldCBleHRlbmRzIFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50cyB7CiAgYm9vbCBpc0FsbCA9IGZhbHNlOwogIFNldDxUeXBlTWFzaz4gX21hc2tzOwoKICBAb3ZlcnJpZGUKICBib29sIGNhbkhpdChNZW1iZXJFbnRpdHkgZWxlbWVudCwgTmFtZSBuYW1lLCBKQ2xvc2VkV29ybGQgd29ybGQpIHsKICAgIGlmIChpc0FsbCkgcmV0dXJuIHRydWU7CiAgICBpZiAoX21hc2tzID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGZvciAoVHlwZU1hc2sgbWFzayBpbiBfbWFza3MpIHsKICAgICAgaWYgKG1hc2suY2FuSGl0KGVsZW1lbnQsIG5hbWUsIHdvcmxkKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoU2VsZWN0b3Igc2VsZWN0b3IsIEpDbG9zZWRXb3JsZCB3b3JsZCkgewogICAgaWYgKGlzQWxsKSB7CiAgICAgIFR5cGVNYXNrIG1hc2sgPQogICAgICAgICAgbmV3IFR5cGVNYXNrLnN1YmNsYXNzKHdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzLCB3b3JsZCk7CiAgICAgIHJldHVybiBtYXNrLm5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoc2VsZWN0b3IsIHdvcmxkKTsKICAgIH0KICAgIGZvciAoVHlwZU1hc2sgbWFzayBpbiBfbWFza3MpIHsKICAgICAgaWYgKG1hc2submVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZyhzZWxlY3Rvciwgd29ybGQpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgYWRkUmVjZWl2ZXJDb25zdHJhaW50KFR5cGVNYXNrIG1hc2spIHsKICAgIGlmIChpc0FsbCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKG1hc2sgPT0gbnVsbCkgewogICAgICBpc0FsbCA9IHRydWU7CiAgICAgIF9tYXNrcyA9IG51bGw7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgX21hc2tzID8/PSBuZXcgU2V0PFR5cGVNYXNrPigpOwogICAgcmV0dXJuIF9tYXNrcy5hZGQobWFzayk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBpZiAoaXNBbGwpIHsKICAgICAgcmV0dXJuICc8YWxsPic7CiAgICB9IGVsc2UgaWYgKF9tYXNrcyAhPSBudWxsKSB7CiAgICAgIHJldHVybiAnJF9tYXNrcyc7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJzxub25lPic7CiAgICB9CiAgfQp9CgpjbGFzcyBUeXBlTWFza1N0cmF0ZWd5IGltcGxlbWVudHMgQWJzdHJhY3RWYWx1ZVN0cmF0ZWd5IHsKICBjb25zdCBUeXBlTWFza1N0cmF0ZWd5KCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWVEb21haW4gY3JlYXRlRG9tYWluKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBDb21tb25NYXNrcyhjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3kgY3JlYXRlU2VsZWN0b3JTdHJhdGVneSgpIHsKICAgIHJldHVybiBuZXcgVHlwZU1hc2tTZWxlY3RvclN0cmF0ZWd5KCk7CiAgfQp9CgpjbGFzcyBUeXBlTWFza1NlbGVjdG9yU3RyYXRlZ3kgaW1wbGVtZW50cyBTZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3kgewogIGNvbnN0IFR5cGVNYXNrU2VsZWN0b3JTdHJhdGVneSgpOwoKICBAb3ZlcnJpZGUKICBVbml2ZXJzZVNlbGVjdG9yQ29uc3RyYWludHMgY3JlYXRlU2VsZWN0b3JDb25zdHJhaW50cygKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIE9iamVjdCBpbml0aWFsQ29uc3RyYWludCkgewogICAgcmV0dXJuIG5ldyBJbmNyZWFzaW5nVHlwZU1hc2tTZXQoKQogICAgICAuLmFkZFJlY2VpdmVyQ29uc3RyYWludChpbml0aWFsQ29uc3RyYWludCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGFwcGxpZWRVbm5hbWVkKER5bmFtaWNVc2UgZHluYW1pY1VzZSwgTWVtYmVyRW50aXR5IG1lbWJlciwKICAgICAgY292YXJpYW50IEpDbG9zZWRXb3JsZCB3b3JsZCkgewogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBkeW5hbWljVXNlLnNlbGVjdG9yOwogICAgVHlwZU1hc2sgbWFzayA9IGR5bmFtaWNVc2UucmVjZWl2ZXJDb25zdHJhaW50OwogICAgcmV0dXJuIHNlbGVjdG9yLmFwcGxpZXNVbm5hbWVkKG1lbWJlcikgJiYKICAgICAgICAobWFzayA9PSBudWxsIHx8IG1hc2suY2FuSGl0KG1lbWJlciwgc2VsZWN0b3IubWVtYmVyTmFtZSwgd29ybGQpKTsKICB9Cn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIFtUeXBlTWFza10gc3ViY2xhc3NlcyBpbiBzZXJpYWxpemF0aW9uLgplbnVtIFR5cGVNYXNrS2luZCB7CiAgZmxhdCwKICB1bmlvbiwKICBjb250YWluZXIsCiAgc2V0LAogIG1hcCwKICBkaWN0aW9uYXJ5LAogIHZhbHVlLAp9CgovLy8gQSB0eXBlIG1hc2sgcmVwcmVzZW50cyBhIHNldCBvZiBjb250YWluZWQgY2xhc3NlcywgYnV0IHRoZQovLy8gb3BlcmF0aW9ucyBvbiBpdCBhcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgcHJlY2lzZSBhbmQgdGhleSBtYXkKLy8vIHlpZWxkIGNvbnNlcnZhdGl2ZSBhbnN3ZXJzIHRoYXQgY29udGFpbiB0b28gbWFueSBjbGFzc2VzLgphYnN0cmFjdCBjbGFzcyBUeXBlTWFzayBpbXBsZW1lbnRzIEFic3RyYWN0VmFsdWUgewogIGZhY3RvcnkgVHlwZU1hc2soCiAgICAgIENsYXNzRW50aXR5IGJhc2UsIGludCBraW5kLCBib29sIGlzTnVsbGFibGUsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBGbGF0VHlwZU1hc2subm9ybWFsaXplZCgKICAgICAgICBiYXNlLCAoa2luZCA8PCAxKSB8IChpc051bGxhYmxlID8gMSA6IDApLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBjb25zdCBmYWN0b3J5IFR5cGVNYXNrLmVtcHR5KCkgPSBGbGF0VHlwZU1hc2suZW1wdHk7CgogIGZhY3RvcnkgVHlwZU1hc2suZXhhY3QoQ2xhc3NFbnRpdHkgYmFzZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBhc3NlcnQoCiAgICAgICAgY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNJbnN0YW50aWF0ZWQoYmFzZSksCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGJhc2UgPz8gQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgIkNhbm5vdCBjcmVhdGUgZXhhY3QgdHlwZSBtYXNrIGZvciB1bmluc3RhbnRpYXRlZCAiCiAgICAgICAgICAgICJjbGFzcyAkYmFzZS5cbiR7Y2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuZHVtcChiYXNlKX0iKSk7CiAgICByZXR1cm4gbmV3IEZsYXRUeXBlTWFzay5leGFjdChiYXNlKTsKICB9CgogIGZhY3RvcnkgVHlwZU1hc2suZXhhY3RPckVtcHR5KENsYXNzRW50aXR5IGJhc2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKGJhc2UpKQogICAgICByZXR1cm4gbmV3IEZsYXRUeXBlTWFzay5leGFjdChiYXNlKTsKICAgIHJldHVybiBjb25zdCBUeXBlTWFzay5lbXB0eSgpOwogIH0KCiAgZmFjdG9yeSBUeXBlTWFzay5zdWJjbGFzcyhDbGFzc0VudGl0eSBiYXNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGFzc2VydCgKICAgICAgICBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZChiYXNlKSwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgYmFzZSA/PyBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgICAiQ2Fubm90IGNyZWF0ZSBzdWJjbGFzcyB0eXBlIG1hc2sgZm9yIHVuaW5zdGFudGlhdGVkICIKICAgICAgICAgICAgImNsYXNzICRiYXNlLlxuJHtjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5kdW1wKGJhc2UpfSIpKTsKICAgIENsYXNzRW50aXR5IHRvcG1vc3QgPSBjbG9zZWRXb3JsZC5nZXRMdWJPZkluc3RhbnRpYXRlZFN1YmNsYXNzZXMoYmFzZSk7CiAgICBpZiAodG9wbW9zdCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgVHlwZU1hc2suZW1wdHkoKTsKICAgIH0gZWxzZSBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaGFzQW55U3RyaWN0U3ViY2xhc3ModG9wbW9zdCkpIHsKICAgICAgcmV0dXJuIG5ldyBGbGF0VHlwZU1hc2suc3ViY2xhc3ModG9wbW9zdCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IFR5cGVNYXNrLmV4YWN0KHRvcG1vc3QsIGNsb3NlZFdvcmxkKTsKICAgIH0KICB9CgogIGZhY3RvcnkgVHlwZU1hc2suc3VidHlwZShDbGFzc0VudGl0eSBiYXNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIENsYXNzRW50aXR5IHRvcG1vc3QgPSBjbG9zZWRXb3JsZC5nZXRMdWJPZkluc3RhbnRpYXRlZFN1YnR5cGVzKGJhc2UpOwogICAgaWYgKHRvcG1vc3QgPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IFR5cGVNYXNrLmVtcHR5KCk7CiAgICB9CiAgICBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaGFzT25seVN1YmNsYXNzZXModG9wbW9zdCkpIHsKICAgICAgcmV0dXJuIG5ldyBUeXBlTWFzay5zdWJjbGFzcyh0b3Btb3N0LCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgICBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaGFzQW55U3RyaWN0U3VidHlwZSh0b3Btb3N0KSkgewogICAgICByZXR1cm4gbmV3IEZsYXRUeXBlTWFzay5zdWJ0eXBlKHRvcG1vc3QpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBUeXBlTWFzay5leGFjdCh0b3Btb3N0LCBjbG9zZWRXb3JsZCk7CiAgICB9CiAgfQoKICBjb25zdCBmYWN0b3J5IFR5cGVNYXNrLm5vbk51bGxFbXB0eSgpID0gRmxhdFR5cGVNYXNrLm5vbk51bGxFbXB0eTsKCiAgZmFjdG9yeSBUeXBlTWFzay5ub25OdWxsRXhhY3QoQ2xhc3NFbnRpdHkgYmFzZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBhc3NlcnQoCiAgICAgICAgY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNJbnN0YW50aWF0ZWQoYmFzZSksCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGJhc2UgPz8gQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgIkNhbm5vdCBjcmVhdGUgZXhhY3QgdHlwZSBtYXNrIGZvciB1bmluc3RhbnRpYXRlZCAiCiAgICAgICAgICAgICJjbGFzcyAkYmFzZS5cbiR7Y2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuZHVtcChiYXNlKX0iKSk7CiAgICByZXR1cm4gbmV3IEZsYXRUeXBlTWFzay5ub25OdWxsRXhhY3QoYmFzZSk7CiAgfQoKICBmYWN0b3J5IFR5cGVNYXNrLm5vbk51bGxFeGFjdE9yRW1wdHkoCiAgICAgIENsYXNzRW50aXR5IGJhc2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKGJhc2UpKSB7CiAgICAgIHJldHVybiBuZXcgRmxhdFR5cGVNYXNrLm5vbk51bGxFeGFjdChiYXNlKTsKICAgIH0KICAgIHJldHVybiBjb25zdCBUeXBlTWFzay5ub25OdWxsRW1wdHkoKTsKICB9CgogIGZhY3RvcnkgVHlwZU1hc2subm9uTnVsbFN1YmNsYXNzKENsYXNzRW50aXR5IGJhc2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgYXNzZXJ0KAogICAgICAgIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKGJhc2UpLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBiYXNlID8/IENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgICJDYW5ub3QgY3JlYXRlIHN1YmNsYXNzIHR5cGUgbWFzayBmb3IgdW5pbnN0YW50aWF0ZWQgIgogICAgICAgICAgICAiY2xhc3MgJGJhc2UuXG4ke2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmR1bXAoYmFzZSl9IikpOwogICAgQ2xhc3NFbnRpdHkgdG9wbW9zdCA9IGNsb3NlZFdvcmxkLmdldEx1Yk9mSW5zdGFudGlhdGVkU3ViY2xhc3NlcyhiYXNlKTsKICAgIGlmICh0b3Btb3N0ID09IG51bGwpIHsKICAgICAgcmV0dXJuIG5ldyBUeXBlTWFzay5ub25OdWxsRW1wdHkoKTsKICAgIH0gZWxzZSBpZiAoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaGFzQW55U3RyaWN0U3ViY2xhc3ModG9wbW9zdCkpIHsKICAgICAgcmV0dXJuIG5ldyBGbGF0VHlwZU1hc2subm9uTnVsbFN1YmNsYXNzKHRvcG1vc3QpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QodG9wbW9zdCwgY2xvc2VkV29ybGQpOwogICAgfQogIH0KCiAgZmFjdG9yeSBUeXBlTWFzay5ub25OdWxsU3VidHlwZShDbGFzc0VudGl0eSBiYXNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIENsYXNzRW50aXR5IHRvcG1vc3QgPSBjbG9zZWRXb3JsZC5nZXRMdWJPZkluc3RhbnRpYXRlZFN1YnR5cGVzKGJhc2UpOwogICAgaWYgKHRvcG1vc3QgPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IFR5cGVNYXNrLm5vbk51bGxFbXB0eSgpOwogICAgfQogICAgaWYgKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5Lmhhc09ubHlTdWJjbGFzc2VzKHRvcG1vc3QpKSB7CiAgICAgIHJldHVybiBuZXcgVHlwZU1hc2subm9uTnVsbFN1YmNsYXNzKHRvcG1vc3QsIGNsb3NlZFdvcmxkKTsKICAgIH0KICAgIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5oYXNBbnlTdHJpY3RTdWJ0eXBlKHRvcG1vc3QpKSB7CiAgICAgIHJldHVybiBuZXcgRmxhdFR5cGVNYXNrLm5vbk51bGxTdWJ0eXBlKHRvcG1vc3QpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBUeXBlTWFzay5ub25OdWxsRXhhY3QodG9wbW9zdCwgY2xvc2VkV29ybGQpOwogICAgfQogIH0KCiAgZmFjdG9yeSBUeXBlTWFzay51bmlvbk9mKEl0ZXJhYmxlPFR5cGVNYXNrPiBtYXNrcywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gVW5pb25UeXBlTWFzay51bmlvbk9mKG1hc2tzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICAvLy8gRGVzZXJpYWxpemVzIGEgW1R5cGVNYXNrXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgVHlwZU1hc2tLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oVHlwZU1hc2tLaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBUeXBlTWFza0tpbmQuZmxhdDoKICAgICAgICByZXR1cm4gbmV3IEZsYXRUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICAgIGNhc2UgVHlwZU1hc2tLaW5kLnVuaW9uOgogICAgICAgIHJldHVybiBuZXcgVW5pb25UeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICAgIGNhc2UgVHlwZU1hc2tLaW5kLmNvbnRhaW5lcjoKICAgICAgICByZXR1cm4gbmV3IENvbnRhaW5lclR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKTsKICAgICAgY2FzZSBUeXBlTWFza0tpbmQuc2V0OgogICAgICAgIHJldHVybiBuZXcgU2V0VHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgICBjYXNlIFR5cGVNYXNrS2luZC5tYXA6CiAgICAgICAgcmV0dXJuIG5ldyBNYXBUeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlLCBjbG9zZWRXb3JsZCk7CiAgICAgIGNhc2UgVHlwZU1hc2tLaW5kLmRpY3Rpb25hcnk6CiAgICAgICAgcmV0dXJuIG5ldyBEaWN0aW9uYXJ5VHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgICBjYXNlIFR5cGVNYXNrS2luZC52YWx1ZToKICAgICAgICByZXR1cm4gbmV3IFZhbHVlVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgVHlwZU1hc2tLaW5kICRraW5kLiIpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbVHlwZU1hc2tdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgLy8vIElmIFttYXNrXSBpcyBmb3J3YXJkaW5nLCByZXR1cm5zIHRoZSBmaXJzdCBub24tZm9yd2FyZGluZyBbVHlwZU1hc2tdIGluCiAgLy8vIFttYXNrXSdzIGZvcndhcmRpbmcgY2hhaW4uCiAgc3RhdGljIFR5cGVNYXNrIG5vbkZvcndhcmRpbmdNYXNrKG1hc2spIHsKICAgIHdoaWxlIChtYXNrLmlzRm9yd2FyZGluZykgewogICAgICBtYXNrID0gbWFzay5mb3J3YXJkVG87CiAgICB9CiAgICByZXR1cm4gbWFzazsKICB9CgogIC8vLyBBc3NlcnRzIHRoYXQgdGhpcyBtYXNrIHVzZXMgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHJlcHJlc2VudGF0aW9uIGZvcgogIC8vLyBpdHMgdHlwZXMuIEN1cnJlbnRseSwgd2Ugbm9ybWFsaXplIHN1YnR5cGUgYW5kIHN1YmNsYXNzIHRvIGV4YWN0IGlmIG5vCiAgLy8vIHN1YnR5cGVzIG9yIHN1YmNsYXNzZXMgYXJlIHByZXNlbnQgYW5kIHN1YnR5cGUgdG8gc3ViY2xhc3MgaWYgb25seQogIC8vLyBzdWJjbGFzc2VzIGV4aXN0LiBXZSBhbHNvIG5vcm1hbGl6ZSBleGFjdCB0byBlbXB0eSBpZiB0aGUgY29ycmVzcG9uZGluZwogIC8vLyBiYXNlY2xhc3Mgd2FzIG5ldmVyIGluc3RhbnRpYXRlZC4KICBzdGF0aWMgYm9vbCBhc3NlcnRJc05vcm1hbGl6ZWQoVHlwZU1hc2sgbWFzaywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBTdHJpbmcgcmVhc29uID0gZ2V0Tm90Tm9ybWFsaXplZFJlYXNvbihtYXNrLCBjbG9zZWRXb3JsZCk7CiAgICBhc3NlcnQocmVhc29uID09IG51bGwsCiAgICAgICAgZmFpbGVkQXQoTk9fTE9DQVRJT05fU1BBTk5BQkxFLCAnJG1hc2sgaXMgbm90IG5vcm1hbGl6ZWQ6ICRyZWFzb24nKSk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHN0YXRpYyBTdHJpbmcgZ2V0Tm90Tm9ybWFsaXplZFJlYXNvbigKICAgICAgVHlwZU1hc2sgbWFzaywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBtYXNrID0gbm9uRm9yd2FyZGluZ01hc2sobWFzayk7CiAgICBpZiAobWFzayBpcyBGbGF0VHlwZU1hc2spIHsKICAgICAgaWYgKG1hc2suaXNFbXB0eU9yTnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIGlmIChtYXNrLmlzRXhhY3QpIHsKICAgICAgICBpZiAoIWNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKG1hc2suYmFzZSkpIHsKICAgICAgICAgIHJldHVybiAnRXhhY3QgJHttYXNrLmJhc2V9IGlzIG5vdCBpbnN0YW50aWF0ZWQuJzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKG1hc2suaXNTdWJjbGFzcykgewogICAgICAgIGlmICghY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaGFzQW55U3RyaWN0U3ViY2xhc3MobWFzay5iYXNlKSkgewogICAgICAgICAgcmV0dXJuICdTdWJjbGFzcyAke21hc2suYmFzZX0gZG9lcyBub3QgaGF2ZSBhbnkgc3ViY2xhc3Nlcy4nOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBhc3NlcnQobWFzay5pc1N1YnR5cGUpOwogICAgICBpZiAoIWNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5Lmhhc0FueVN0cmljdFN1YnR5cGUobWFzay5iYXNlKSkgewogICAgICAgIHJldHVybiAnU3VidHlwZSAke21hc2suYmFzZX0gZG9lcyBub3QgaGF2ZSBhbnkgc3ViY2xhc3Nlcy4nOwogICAgICB9CiAgICAgIGlmIChjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5oYXNPbmx5U3ViY2xhc3NlcyhtYXNrLmJhc2UpKSB7CiAgICAgICAgcmV0dXJuICdTdWJ0eXBlICR7bWFzay5iYXNlfSBvbmx5IGhhcyBzdWJjbGFzc2VzLic7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgaWYgKG1hc2sgaXMgVW5pb25UeXBlTWFzaykgewogICAgICBmb3IgKFR5cGVNYXNrIHN1Ym1hc2sgaW4gbWFzay5kaXNqb2ludE1hc2tzKSB7CiAgICAgICAgU3RyaW5nIHN1Ym1hc2tSZWFzb24gPSBnZXROb3ROb3JtYWxpemVkUmVhc29uKHN1Ym1hc2ssIGNsb3NlZFdvcmxkKTsKICAgICAgICBpZiAoc3VibWFza1JlYXNvbiAhPSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gJ1N1Ym1hc2sgJHN1Ym1hc2sgaW4gJG1hc2s6ICRzdWJtYXNrUmVhc29uLic7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuICdVbmtub3duIHR5cGUgbWFzayAkbWFzay4nOwogIH0KCiAgLy8vIFJldHVybnMgYSBudWxsYWJsZSB2YXJpYW50IG9mIFt0aGlzXSB0eXBlIG1hc2suCiAgVHlwZU1hc2sgbnVsbGFibGUoKTsKCiAgLy8vIFJldHVybnMgYSBub24tbnVsbGFibGUgdmFyaWFudCBvZiBbdGhpc10gdHlwZSBtYXNrLgogIFR5cGVNYXNrIG5vbk51bGxhYmxlKCk7CgogIC8vLyBXaGV0aGVyIG5vdGhpbmcgbWF0Y2hlcyB0aGlzIG1hc2ssIG5vdCBldmVuIG51bGwuCiAgYm9vbCBnZXQgaXNFbXB0eTsKCiAgLy8vIFdoZXRoZXIgbnVsbCBpcyBhIHZhbGlkIHZhbHVlIG9mIHRoaXMgbWFzay4KICBib29sIGdldCBpc051bGxhYmxlOwoKICAvLy8gV2hldGhlciB0aGUgb25seSBwb3NzaWJsZSB2YWx1ZSBpbiB0aGlzIG1hc2sgaXMgTnVsbC4KICBib29sIGdldCBpc051bGw7CgogIC8vLyBXaGV0aGVyIFtpc0VtcHR5XSBvciBbaXNOdWxsXSBpcyB0cnVlLgogIGJvb2wgZ2V0IGlzRW1wdHlPck51bGw7CgogIC8vLyBXaGV0aGVyIHRoaXMgbWFzayBvbmx5IGluY2x1ZGVzIGluc3RhbmNlcyBvZiBhbiBleGFjdCBjbGFzcywgYW5kIG5vbmUgb2YKICAvLy8gaXQncyBzdWJjbGFzc2VzIG9yIHN1YnR5cGVzLgogIGJvb2wgZ2V0IGlzRXhhY3Q7CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBtYXNrIGlzIGEgdW5pb24gdHlwZS4KICBib29sIGdldCBpc1VuaW9uOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBtYXNrIGlzIGEgW0NvbnRhaW5lclR5cGVNYXNrXS4KICBib29sIGdldCBpc0NvbnRhaW5lcjsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgbWFzayBpcyBhIFtTZXRUeXBlTWFza10uCiAgYm9vbCBnZXQgaXNTZXQ7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGlzIG1hc2sgaXMgYSBbTWFwVHlwZU1hc2tdLgogIGJvb2wgZ2V0IGlzTWFwOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBtYXNrIGlzIGEgW01hcFR5cGVNYXNrXSBpbiBkaWN0aW9uYXJ5IG1vZGUsIGkuZS4sCiAgLy8vIGFsbCBrZXlzIGFyZSBrbm93biBzdHJpbmcgdmFsdWVzIGFuZCB3ZSBoYXZlIHNwZWNpZmljIHR5cGUgaW5mb3JtYXRpb24gZm9yCiAgLy8vIGNvcnJlc3BvbmRpbmcgdmFsdWVzLgogIGJvb2wgZ2V0IGlzRGljdGlvbmFyeTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgbWFzayBpcyB3cmFwcGluZyBhbm90aGVyIG1hc2sgZm9yIHRoZSBwdXJwb3NlIG9mCiAgLy8vIHRyYWNpbmcuCiAgYm9vbCBnZXQgaXNGb3J3YXJkaW5nOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBtYXNrIGhvbGRzIGVuY29kZXMgYW4gZXhhY3QgdmFsdWUgd2l0aGluIGEgdHlwZS4KICBib29sIGdldCBpc1ZhbHVlOwoKICBib29sIGNvbnRhaW5zT25seUludChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwogIGJvb2wgY29udGFpbnNPbmx5RG91YmxlKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CiAgYm9vbCBjb250YWluc09ubHlOdW0oSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKICBib29sIGNvbnRhaW5zT25seUJvb2woSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKICBib29sIGNvbnRhaW5zT25seVN0cmluZyhKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwogIGJvb2wgY29udGFpbnNPbmx5KENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBDb21wYXJlcyB0d28gW1R5cGVNYXNrXSBvYmplY3RzIGZvciBzdHJ1Y3R1cmFsIGVxdWFsaXR5LgogIC8vLwogIC8vLyBOb3RlOiBUaGlzIG1heSBkaWZmZXIgZnJvbSBzZW1hbnRpYyBlcXVhbGl0eSBpbiB0aGUgc2V0IGNvbnRhaW5tZW50IHNlbnNlLgogIC8vLyAgIFVzZSBbY29udGFpbnNNYXNrXSBhbmQgW2lzSW5NYXNrXSBmb3IgdGhhdCwgaW5zdGVhZC4KICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKTsKCiAgLy8vIElmIHRoaXMgcmV0dXJucyBgdHJ1ZWAsIFtvdGhlcl0gaXMgZ3VhcmFudGVlZCB0byBiZSBhIHN1cGVydHlwZSBvZiB0aGlzCiAgLy8vIG1hc2ssIGkuZS4sIHRoaXMgbWFzayBpcyBpbiBbb3RoZXJdLiBIb3dldmVyLCB0aGUgaW52ZXJzZSBkb2VzIG5vdCBob2xkLgogIC8vLyBFbmFibGUgW1VuaW9uVHlwZU1hc2suUEVSRk9STV9FWFRSQV9DT05UQUlOU19DSEVDS10gdG8gYmUgbm90aWZpZWQgb2YKICAvLy8gZmFsc2UgbmVnYXRpdmVzLgogIGJvb2wgaXNJbk1hc2soVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CgogIC8vLyBJZiB0aGlzIHJldHVybnMgYHRydWVgLCBbb3RoZXJdIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBzdWJ0eXBlIG9mIHRoaXMKICAvLy8gbWFzaywgaS5lLiB0aGlzIG1hc2sgY29udGFpbnMgW290aGVyXS4gSG93ZXZlciwgdGhlIGludmVyc2UgZG9lcyBub3QgaG9sZC4KICAvLy8gRW5hYmxlIFtVbmlvblR5cGVNYXNrLlBFUkZPUk1fRVhUUkFfQ09OVEFJTlNfQ0hFQ0tdIHRvIGJlIG5vdGlmaWVkIG9mCiAgLy8vIGZhbHNlIG5lZ2F0aXZlcy4KICBib29sIGNvbnRhaW5zTWFzayhUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGlzIHR5cGUgbWFzayBpcyBhbiBpbnN0YW5jZSBvZiBbY2xzXS4KICBib29sIHNhdGlzZmllcyhDbGFzc0VudGl0eSBjbHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoaXMgdHlwZSBtYXNrIGNvbnRhaW5zIHRoZSBnaXZlbiBjbGFzcyBbY2xzXS4KICBib29sIGNvbnRhaW5zKENsYXNzRW50aXR5IGNscywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKCiAgLy8vIFJldHVybnMgd2hldGhlciBvciBub3QgdGhpcyB0eXBlIG1hc2sgY29udGFpbnMgYWxsIHR5cGVzLgogIGJvb2wgY29udGFpbnNBbGwoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKCiAgLy8vIFJldHVybnMgdGhlIFtDbGFzc0VudGl0eV0gaWYgdGhpcyB0eXBlIHJlcHJlc2VudHMgYSBzaW5nbGUgY2xhc3MsCiAgLy8vIG90aGVyd2lzZSByZXR1cm5zIGBudWxsYC4gIFRoaXMgbWV0aG9kIGlzIGNvbnNlcnZhdGl2ZS4KICBDbGFzc0VudGl0eSBzaW5nbGVDbGFzcyhKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwoKICAvLy8gUmV0dXJucyBhIHR5cGUgbWFzayByZXByZXNlbnRpbmcgdGhlIHVuaW9uIG9mIFt0aGlzXSBhbmQgW290aGVyXS4KICBUeXBlTWFzayB1bmlvbihUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoaXMgYW5kIFtvdGhlcl0gaXMgZW1wdHkuCiAgYm9vbCBpc0Rpc2pvaW50KFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwoKICAvLy8gUmV0dXJucyBhIHR5cGUgbWFzayByZXByZXNlbnRpbmcgdGhlIGludGVyc2VjdGlvbiBvZiBbdGhpc10gYW5kIFtvdGhlcl0uCiAgVHlwZU1hc2sgaW50ZXJzZWN0aW9uKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIFtlbGVtZW50XSBpcyBhIHBvdGVudGlhbCB0YXJnZXQgd2hlbiBiZWluZyBpbnZva2VkIG9uIHRoaXMKICAvLy8gdHlwZSBtYXNrLgogIC8vLwogIC8vLwogIC8vLyBbbmFtZV0gaXMgdXNlZCB0byBlbnN1cmUgbGlicmFyeSBwcml2YWN5IGlzIHRha2VuIGludG8gYWNjb3VudC4KICBib29sIGNhbkhpdChNZW1iZXJFbnRpdHkgZWxlbWVudCwgTmFtZSBuYW1lLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIHRoaXMgW1R5cGVNYXNrXSBhcHBsaWVkIHRvIFtzZWxlY3Rvcl0gY2FuIGhpdCBhCiAgLy8vIFtub1N1Y2hNZXRob2RdLgogIGJvb2wgbmVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZyhTZWxlY3RvciBzZWxlY3RvciwgSkNsb3NlZFdvcmxkIHdvcmxkKTsKCiAgLy8vIFJldHVybnMgdGhlIFtlbGVtZW50XSB0aGF0IGlzIGtub3duIHRvIGFsd2F5cyBiZSBoaXQgYXQgcnVudGltZQogIC8vLyBvbiB0aGlzIG1hc2suIFJldHVybnMgbnVsbCBpZiB0aGVyZSBpcyBub25lLgogIE1lbWJlckVudGl0eSBsb2NhdGVTaW5nbGVNZW1iZXIoU2VsZWN0b3Igc2VsZWN0b3IsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7Cn0KgaIATk48AQ8BUFAQQhYYAQxFHCYkOgYSBAEMShEWSj4GJD0VCAYSBAEMLh0YFBUTBiQdBAEMFhEWIRgNFwYEAgE6HAEMPykEAQw5KwQCAUgkAQw5NScyBAEMQiYtMy5LBAIBRhQICQ0HBw4JAgE/Qz4zFE8oQAQBNwFHDDkSL0BIKQQBTjkrIwQBSgw5Ei9DSEwbI0sxDTcGBAFJShsjBkE6BkMwDTcGBAFFAU4MORIvQEgwBAEoNDsyBioEAVEMORIvQ0hMGypLOA0+BgQBUEobKgZBQQZDNw0+BgQBUTYEATYnNT4UHkkfSiNOHUgdSCRPH0oGQgQBLCcBTiEsIB0GEQQBS01JTihMPxtOEQQBKDEkICsaRTwKFQgdS0gKFQgeSEUIRTwIEyg1TSU/CggTBicEATYXAToaATgUATIXATwTAS0aAU8jFAExFAE8GAE2EgE2EgFPURwZAU4PGQFOFAEyNTIzNSYBPwZRPQwbAU5PTBc7AUxRTBc/AT49AUw8AUAuAUg+NQFIPAFFPQFPQwFREQYGRkoBRhZJAUYzUAIBNnBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy90eXBlX21hc2suZGFydEVzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci90eXBlbWFza3MvdW5pb25fdHlwZV9tYXNrLmRhcnS8gS8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIG1hc2tzOwoKY2xhc3MgVW5pb25UeXBlTWFzayBpbXBsZW1lbnRzIFR5cGVNYXNrIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW1VuaW9uVHlwZU1hc2tdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAndW5pb24tdHlwZS1tYXNrJzsKCiAgc3RhdGljIGNvbnN0IGludCBNQVhfVU5JT05fTEVOR1RIID0gNDsKCiAgLy8gU2V0IHRoaXMgZmxhZyB0byBgdHJ1ZWAgdG8gcGVyZm9ybSBhIHNldC1tZW1iZXJzaGlwIGJhc2VkIGNvbnRhaW5tZW50IGNoZWNrCiAgLy8gaW5zdGVhZCBvZiByZWx5aW5nIG9uIG5vcm1hbGl6ZWQgdHlwZXMuIFRoaXMgaXMgcXVpdGUgc2xvdyBidXQgY2FuIGJlCiAgLy8gaGVscGZ1bCBpbiBkZWJ1Z2dpbmcuCiAgc3RhdGljIGNvbnN0IGJvb2wgUEVSRk9STV9FWFRSQV9DT05UQUlOU19DSEVDSyA9IGZhbHNlOwoKICBmaW5hbCBMaXN0PEZsYXRUeXBlTWFzaz4gZGlzam9pbnRNYXNrczsKCiAgVW5pb25UeXBlTWFzay5faW50ZXJuYWwodGhpcy5kaXNqb2ludE1hc2tzKSB7CiAgICBhc3NlcnQoZGlzam9pbnRNYXNrcy5sZW5ndGggPiAxKTsKICAgIGFzc2VydChkaXNqb2ludE1hc2tzLmV2ZXJ5KChUeXBlTWFzayBtYXNrKSA9PiAhbWFzay5pc1VuaW9uKSk7CiAgfQoKICAvLy8gRGVzZXJpYWxpemVzIGEgW1VuaW9uVHlwZU1hc2tdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgVW5pb25UeXBlTWFzay5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgTGlzdDxGbGF0VHlwZU1hc2s+IGRpc2pvaW50TWFza3MgPSBzb3VyY2UKICAgICAgICAucmVhZExpc3QoKCkgPT4gbmV3IFR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsb3NlZFdvcmxkKSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IFVuaW9uVHlwZU1hc2suX2ludGVybmFsKGRpc2pvaW50TWFza3MpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbVW5pb25UeXBlTWFza10gdG8gW3NpbmtdLgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKFR5cGVNYXNrS2luZC51bmlvbik7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTGlzdCgKICAgICAgICBkaXNqb2ludE1hc2tzLCAoRmxhdFR5cGVNYXNrIG1hc2spID0+IG1hc2sud3JpdGVUb0RhdGFTaW5rKHNpbmspKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBzdGF0aWMgVHlwZU1hc2sgdW5pb25PZihJdGVyYWJsZTxUeXBlTWFzaz4gbWFza3MsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgYXNzZXJ0KAogICAgICAgIG1hc2tzLmV2ZXJ5KChtYXNrKSA9PiBUeXBlTWFzay5hc3NlcnRJc05vcm1hbGl6ZWQobWFzaywgY2xvc2VkV29ybGQpKSk7CiAgICBMaXN0PEZsYXRUeXBlTWFzaz4gZGlzam9pbnQgPSA8RmxhdFR5cGVNYXNrPltdOwogICAgdW5pb25PZkhlbHBlcihtYXNrcywgZGlzam9pbnQsIGNsb3NlZFdvcmxkKTsKICAgIGlmIChkaXNqb2ludC5pc0VtcHR5KSByZXR1cm4gbmV3IFR5cGVNYXNrLm5vbk51bGxFbXB0eSgpOwogICAgaWYgKGRpc2pvaW50Lmxlbmd0aCA+IE1BWF9VTklPTl9MRU5HVEgpIHsKICAgICAgcmV0dXJuIGZsYXR0ZW4oZGlzam9pbnQsIGNsb3NlZFdvcmxkKTsKICAgIH0KICAgIGlmIChkaXNqb2ludC5sZW5ndGggPT0gMSkgcmV0dXJuIGRpc2pvaW50WzBdOwogICAgVW5pb25UeXBlTWFzayB1bmlvbiA9IG5ldyBVbmlvblR5cGVNYXNrLl9pbnRlcm5hbChkaXNqb2ludCk7CiAgICBhc3NlcnQoVHlwZU1hc2suYXNzZXJ0SXNOb3JtYWxpemVkKHVuaW9uLCBjbG9zZWRXb3JsZCkpOwogICAgcmV0dXJuIHVuaW9uOwogIH0KCiAgc3RhdGljIHZvaWQgdW5pb25PZkhlbHBlcihJdGVyYWJsZTxUeXBlTWFzaz4gbWFza3MsCiAgICAgIExpc3Q8RmxhdFR5cGVNYXNrPiBkaXNqb2ludCwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbXBvc2UgYW4gb3JkZXIgb24gdGhlIG1hc2sgdG8gZW5zdXJlIHN1YmNsYXNzIG1hc2tzCiAgICAvLyBhcmUgcHJlZmVycmVkIHRvIHN1YnR5cGUgbWFza3MuCiAgICBmb3IgKFR5cGVNYXNrIG1hc2sgaW4gbWFza3MpIHsKICAgICAgbWFzayA9IFR5cGVNYXNrLm5vbkZvcndhcmRpbmdNYXNrKG1hc2spOwogICAgICBpZiAobWFzay5pc1VuaW9uKSB7CiAgICAgICAgVW5pb25UeXBlTWFzayB1bmlvbiA9IG1hc2s7CiAgICAgICAgdW5pb25PZkhlbHBlcih1bmlvbi5kaXNqb2ludE1hc2tzLCBkaXNqb2ludCwgY2xvc2VkV29ybGQpOwogICAgICB9IGVsc2UgaWYgKG1hc2suaXNFbXB0eSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9IGVsc2UgewogICAgICAgIEZsYXRUeXBlTWFzayBmbGF0TWFzayA9IG1hc2s7CiAgICAgICAgaW50IGluTGlzdEluZGV4ID0gLTE7CiAgICAgICAgYm9vbCBjb3ZlcmVkID0gZmFsc2U7CgogICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBbZGlzam9pbnRdIHRvIGZpbmQgb3V0IGlmIG9uZSBvZiB0aGUgbWFzawogICAgICAgIC8vIGFscmVhZHkgY292ZXJzIFttYXNrXS4KICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRpc2pvaW50Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBGbGF0VHlwZU1hc2sgY3VycmVudCA9IGRpc2pvaW50W2ldOwogICAgICAgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkgY29udGludWU7CiAgICAgICAgICBUeXBlTWFzayBuZXdNYXNrID0gZmxhdE1hc2sudW5pb24oY3VycmVudCwgY2xvc2VkV29ybGQpOwogICAgICAgICAgLy8gSWYgd2UgaGF2ZSBmb3VuZCBhIGRpc2pvaW50IHVuaW9uLCBjb250aW51ZSBpdGVyYXRpbmcuCiAgICAgICAgICBpZiAobmV3TWFzay5pc1VuaW9uKSBjb250aW51ZTsKICAgICAgICAgIGNvdmVyZWQgPSB0cnVlOwogICAgICAgICAgLy8gV2UgZm91bmQgYSBtYXNrIHRoYXQgaXMgZWl0aGVyIGVxdWFsIHRvIFttYXNrXSBvciBpcyBhCiAgICAgICAgICAvLyBzdXBlcnR5cGUgb2YgW21hc2tdLgogICAgICAgICAgaWYgKGN1cnJlbnQgPT0gbmV3TWFzaykgYnJlYWs7CgogICAgICAgICAgLy8gW21hc2tdIGlzIGEgc3VwZXJ0eXBlIG9mIFtjdXJyZW50XSwgcmVwbGFjZSB0aGUgW2Rpc2pvaW50XQogICAgICAgICAgLy8gbGlzdCB3aXRoIFtuZXdNYXNrXSBpbnN0ZWFkIG9mIFtjdXJyZW50XS4gTm90ZSB0aGF0CiAgICAgICAgICAvLyBbbmV3TWFza10gbWF5IGNvbnRhaW4gZGlmZmVyZW50IGluZm9ybWF0aW9uIHRoYW4gW21hc2tdLAogICAgICAgICAgLy8gbGlrZSBudWxsYWJpbGl0eS4KICAgICAgICAgIGRpc2pvaW50W2ldID0gbmV3TWFzazsKICAgICAgICAgIGZsYXRNYXNrID0gbmV3TWFzazsKCiAgICAgICAgICBpZiAoaW5MaXN0SW5kZXggIT0gLTEpIHsKICAgICAgICAgICAgLy8gSWYgdGhlIG1hc2sgd2FzIGFscmVhZHkgY292ZXJlZCwgd2UgcmVtb3ZlIHRoZSBwcmV2aW91cwogICAgICAgICAgICAvLyBwbGFjZSB3aGVyZSBpdCB3YXMgaW5zZXJ0ZWQuIFRoaXMgbmV3IG1hc2sgc3Vic3VtZXMgdGhlCiAgICAgICAgICAgIC8vIHByZXZpb3VzbHkgY292ZXJlZCBvbmUuCiAgICAgICAgICAgIGRpc2pvaW50LnJlbW92ZUF0KGluTGlzdEluZGV4KTsKICAgICAgICAgICAgaS0tOwogICAgICAgICAgfQogICAgICAgICAgLy8gUmVjb3JkIHdoZXJlIHRoZSBtYXNrIHdhcyBpbnNlcnRlZC4KICAgICAgICAgIGluTGlzdEluZGV4ID0gaTsKICAgICAgICB9CiAgICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgbWFza3MgaW4gW2Rpc2pvaW50XSBjb3ZlcnMgW21hc2tdLCB3ZSBqdXN0CiAgICAgICAgLy8gYWRkIFttYXNrXSB0byB0aGUgbGlzdC4KICAgICAgICBpZiAoIWNvdmVyZWQpIGRpc2pvaW50LmFkZChmbGF0TWFzayk7CiAgICAgIH0KICAgIH0KICB9CgogIHN0YXRpYyBUeXBlTWFzayBmbGF0dGVuKExpc3Q8RmxhdFR5cGVNYXNrPiBtYXNrcywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNb3ZlIHRoaXMgY29tcHV0YXRpb24gdG8gW0Nsb3NlZFdvcmxkXSBhbmQgdXNlIHRoZQogICAgLy8gY2xhc3Mgc2V0IHN0cnVjdHVyZXMuCiAgICBpZiAobWFza3MuaXNFbXB0eSkgdGhyb3cgQXJndW1lbnRFcnJvci52YWx1ZShtYXNrcywgJ21hc2tzJyk7CiAgICAvLyBJZiBlaXRoZXIgdHlwZSBtYXNrIGlzIGEgc3VidHlwZSB0eXBlIG1hc2ssIHdlIGNhbm5vdCB1c2UgYQogICAgLy8gc3ViY2xhc3MgdHlwZSBtYXNrIHRvIHJlcHJlc2VudCB0aGVpciB1bmlvbi4KICAgIGJvb2wgdXNlU3ViY2xhc3MgPSBtYXNrcy5ldmVyeSgoZSkgPT4gIWUuaXNTdWJ0eXBlKTsKICAgIGJvb2wgaXNOdWxsYWJsZSA9IG1hc2tzLmFueSgoZSkgPT4gZS5pc051bGxhYmxlKTsKCiAgICBMaXN0PENsYXNzRW50aXR5PiBtYXNrc0Jhc2VzID0gbWFza3MubWFwKChtYXNrKSA9PiBtYXNrLmJhc2UpLnRvTGlzdCgpOwogICAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGNhbmRpZGF0ZXMgPQogICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vblN1cGVydHlwZXNPZihtYXNrc0Jhc2VzKTsKCiAgICAvLyBDb21wdXRlIHRoZSBiZXN0IGNhbmRpZGF0ZSBhbmQgaXRzIGtpbmQuCiAgICBDbGFzc0VudGl0eSBiZXN0RWxlbWVudDsKICAgIGludCBiZXN0S2luZDsKICAgIGludCBiZXN0U2l6ZTsKICAgIGZvciAoQ2xhc3NFbnRpdHkgY2FuZGlkYXRlIGluIGNhbmRpZGF0ZXMpIHsKICAgICAgYm9vbCBpc0luc3RhbnRpYXRlZFN0cmljdFN1YmNsYXNzKGNscykgPT4KICAgICAgICAgIGNscyAhPSBjYW5kaWRhdGUgJiYKICAgICAgICAgIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzRXhwbGljaXRseUluc3RhbnRpYXRlZChjbHMpICYmCiAgICAgICAgICBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc1N1YmNsYXNzT2YoY2xzLCBjYW5kaWRhdGUpOwoKICAgICAgaW50IHNpemU7CiAgICAgIGludCBraW5kOwogICAgICBpZiAodXNlU3ViY2xhc3MgJiYgbWFza3NCYXNlcy5ldmVyeShpc0luc3RhbnRpYXRlZFN0cmljdFN1YmNsYXNzKSkgewogICAgICAgIC8vIElmIGJvdGggW3RoaXNdIGFuZCBbb3RoZXJdIGFyZSBzdWJjbGFzc2VzIG9mIHRoZSBzdXBlcnR5cGUsCiAgICAgICAgLy8gdGhlbiB3ZSBwcmVmZXIgdG8gY29uc3RydWN0IGEgc3ViY2xhc3MgdHlwZSBtYXNrIGJlY2F1c2UgaXQKICAgICAgICAvLyB3aWxsIGFsd2F5cyBiZSBhdCBsZWFzdCBhcyBzbWFsbCBhcyB0aGUgY29ycmVzcG9uZGluZwogICAgICAgIC8vIHN1YnR5cGUgdHlwZSBtYXNrLgogICAgICAgIGtpbmQgPSBGbGF0VHlwZU1hc2suU1VCQ0xBU1M7CiAgICAgICAgLy8gVE9ETyhzaWdtdW5kLCBqb2hubml3aW50aGVyKTogY29tcHV0aW5nIGxlbmd0aCBoZXJlIChhbmQgYmVsb3cpIGlzCiAgICAgICAgLy8gZXhwZW5zaXZlLiBJZiB3ZSBjYW4ndCBwcmV2ZW50IGBmbGF0dGVuYCBmcm9tIGJlaW5nIGNhbGxlZCBhIGxvdCwgaXQKICAgICAgICAvLyBtaWdodCBiZSB3b3J0aCBjYWNoaW5nIHJlc3VsdHMuCiAgICAgICAgc2l6ZSA9IGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LnN0cmljdFN1YmNsYXNzQ291bnQoY2FuZGlkYXRlKTsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgIHNpemUgPD0gY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuc3RyaWN0U3VidHlwZUNvdW50KGNhbmRpZGF0ZSkpOwogICAgICB9IGVsc2UgewogICAgICAgIGtpbmQgPSBGbGF0VHlwZU1hc2suU1VCVFlQRTsKICAgICAgICBzaXplID0gY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuc3RyaWN0U3VidHlwZUNvdW50KGNhbmRpZGF0ZSk7CiAgICAgIH0KICAgICAgLy8gVXBkYXRlIHRoZSBiZXN0IGNhbmRpZGF0ZSBpZiB0aGUgbmV3IG9uZSBpcyBiZXR0ZXIuCiAgICAgIGlmIChiZXN0RWxlbWVudCA9PSBudWxsIHx8IHNpemUgPCBiZXN0U2l6ZSkgewogICAgICAgIGJlc3RFbGVtZW50ID0gY2FuZGlkYXRlOwogICAgICAgIGJlc3RTaXplID0gc2l6ZTsKICAgICAgICBiZXN0S2luZCA9IGtpbmQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgVHlwZU1hc2soYmVzdEVsZW1lbnQsIGJlc3RLaW5kLCBpc051bGxhYmxlLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlTWFzayB1bmlvbihkeW5hbWljIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIG90aGVyID0gVHlwZU1hc2subm9uRm9yd2FyZGluZ01hc2sob3RoZXIpOwogICAgaWYgKCFvdGhlci5pc1VuaW9uICYmIGRpc2pvaW50TWFza3MuY29udGFpbnMob3RoZXIpKSByZXR1cm4gdGhpczsKCiAgICBMaXN0PEZsYXRUeXBlTWFzaz4gbmV3TGlzdCA9IG5ldyBMaXN0PEZsYXRUeXBlTWFzaz4uZnJvbShkaXNqb2ludE1hc2tzKTsKICAgIGlmICghb3RoZXIuaXNVbmlvbikgewogICAgICBuZXdMaXN0LmFkZChvdGhlcik7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQob3RoZXIgaXMgVW5pb25UeXBlTWFzayk7CiAgICAgIG5ld0xpc3QuYWRkQWxsKG90aGVyLmRpc2pvaW50TWFza3MpOwogICAgfQogICAgcmV0dXJuIG5ldyBUeXBlTWFzay51bmlvbk9mKG5ld0xpc3QsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGludGVyc2VjdGlvbihkeW5hbWljIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIG90aGVyID0gVHlwZU1hc2subm9uRm9yd2FyZGluZ01hc2sob3RoZXIpOwogICAgaWYgKCFvdGhlci5pc1VuaW9uICYmIGRpc2pvaW50TWFza3MuY29udGFpbnMob3RoZXIpKSByZXR1cm4gb3RoZXI7CiAgICBpZiAob3RoZXIuaXNVbmlvbiAmJiB0aGlzID09IG90aGVyKSByZXR1cm4gdGhpczsKCiAgICBMaXN0PFR5cGVNYXNrPiBpbnRlcnNlY3Rpb25zID0gPFR5cGVNYXNrPltdOwogICAgZm9yIChUeXBlTWFzayBjdXJyZW50IGluIGRpc2pvaW50TWFza3MpIHsKICAgICAgaWYgKG90aGVyLmlzVW5pb24pIHsKICAgICAgICBpZiAob3RoZXIuZGlzam9pbnRNYXNrcy5jb250YWlucyhjdXJyZW50KSkgewogICAgICAgICAgaW50ZXJzZWN0aW9ucy5hZGQoY3VycmVudCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvciAoRmxhdFR5cGVNYXNrIGZsYXRPdGhlciBpbiBvdGhlci5kaXNqb2ludE1hc2tzKSB7CiAgICAgICAgICAgIGludGVyc2VjdGlvbnMuYWRkKGN1cnJlbnQuaW50ZXJzZWN0aW9uKGZsYXRPdGhlciwgY2xvc2VkV29ybGQpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW50ZXJzZWN0aW9ucy5hZGQoY3VycmVudC5pbnRlcnNlY3Rpb24ob3RoZXIsIGNsb3NlZFdvcmxkKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgVHlwZU1hc2sudW5pb25PZihpbnRlcnNlY3Rpb25zLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRGlzam9pbnQoVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgZm9yICh2YXIgY3VycmVudCBpbiBkaXNqb2ludE1hc2tzKSB7CiAgICAgIGlmICghY3VycmVudC5pc0Rpc2pvaW50KG90aGVyLCBjbG9zZWRXb3JsZCkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgbnVsbGFibGUoKSB7CiAgICBpZiAoaXNOdWxsYWJsZSkgcmV0dXJuIHRoaXM7CiAgICBMaXN0PEZsYXRUeXBlTWFzaz4gbmV3TGlzdCA9IG5ldyBMaXN0PEZsYXRUeXBlTWFzaz4uZnJvbShkaXNqb2ludE1hc2tzKTsKICAgIG5ld0xpc3RbMF0gPSBuZXdMaXN0WzBdLm51bGxhYmxlKCk7CiAgICByZXR1cm4gbmV3IFVuaW9uVHlwZU1hc2suX2ludGVybmFsKG5ld0xpc3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgbm9uTnVsbGFibGUoKSB7CiAgICBpZiAoIWlzTnVsbGFibGUpIHJldHVybiB0aGlzOwogICAgSXRlcmFibGU8RmxhdFR5cGVNYXNrPiBuZXdJdGVyYWJsZSA9IGRpc2pvaW50TWFza3MubWFwKChlKSB7CiAgICAgIEZsYXRUeXBlTWFzayByID0gZS5ub25OdWxsYWJsZSgpOwogICAgICByZXR1cm4gcjsKICAgIH0pLnRvTGlzdCgpOwogICAgcmV0dXJuIG5ldyBVbmlvblR5cGVNYXNrLl9pbnRlcm5hbChuZXdJdGVyYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5T3JOdWxsID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOdWxsID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVsbGFibGUgPT4gZGlzam9pbnRNYXNrcy5hbnkoKGUpID0+IGUuaXNOdWxsYWJsZSk7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFeGFjdCA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1VuaW9uID0+IHRydWU7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDb250YWluZXIgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTZXQgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNYXAgPT4gZmFsc2U7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNEaWN0aW9uYXJ5ID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRm9yd2FyZGluZyA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1ZhbHVlID0+IGZhbHNlOwoKICAvLy8gQ2hlY2tzIHdoZXRoZXIgW290aGVyXSBpcyBjb250YWluZWQgaW4gdGhpcyB1bmlvbi4KICAvLy8KICAvLy8gSW52YXJpYW50czoKICAvLy8gLSBbb3RoZXJdIG1heSBub3QgYmUgYSBbVW5pb25UeXBlTWFza10gaXRzZWxmCiAgLy8vIC0gdGhlIGNoZWFwIHRlc3QgbWF0Y2hpbmcgYWdhaW5zdCBpbmRpdmlkdWFsIG1lbWJlcnMgb2YgW2Rpc2pvaW50TWFza3NdCiAgLy8vICAgbXVzdCBoYXZlIGZhaWxlZC4KICBib29sIHNsb3dDb250YWluc0NoZWNrKFR5cGVNYXNrIG90aGVyLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIC8vIFVuaW9ucyBzaG91bGQgbmV2ZXIgbWFrZSBpdCBoZXJlLgogICAgYXNzZXJ0KCFvdGhlci5pc1VuaW9uKTsKICAgIC8vIEVuc3VyZSB0aGUgY2hlYXAgdGVzdCBmYWlscy4KICAgIGFzc2VydCghZGlzam9pbnRNYXNrcy5hbnkoKG1hc2spID0+IG1hc2suY29udGFpbnNNYXNrKG90aGVyLCBjbG9zZWRXb3JsZCkpKTsKICAgIC8vIElmIHdlIGNvdmVyIG9iamVjdCwgd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLgogICAgYXNzZXJ0KCFjb250YWlucyhjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcywgY2xvc2VkV29ybGQpKTsKICAgIC8vIExpa2V3aXNlLCBudWxsbmVzcyBzaG91bGQgYmUgY292ZXJlZC4KICAgIGFzc2VydChpc051bGxhYmxlIHx8ICFvdGhlci5pc051bGxhYmxlKTsKICAgIC8vIFRoZSBmYXN0IHRlc3QgaXMgcHJlY2lzZSBmb3IgZXhhY3QgdHlwZXMuCiAgICBpZiAob3RoZXIuaXNFeGFjdCkgcmV0dXJuIGZhbHNlOwogICAgLy8gV2UgY2Fubm90IGNvbnRhaW4gb2JqZWN0LgogICAgaWYgKG90aGVyLmNvbnRhaW5zKGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzLCBjbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgRmxhdFR5cGVNYXNrIGZsYXQgPSBUeXBlTWFzay5ub25Gb3J3YXJkaW5nTWFzayhvdGhlcik7CiAgICAvLyBDaGVjayB3ZSBjb3ZlciB0aGUgYmFzZSBjbGFzcy4KICAgIGlmICghY29udGFpbnMoZmxhdC5iYXNlLCBjbG9zZWRXb3JsZCkpIHJldHVybiBmYWxzZTsKICAgIC8vIENoZWNrIGZvciBvdGhlciBtZW1iZXJzLgogICAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IG1lbWJlcnM7CiAgICBpZiAoZmxhdC5pc1N1YmNsYXNzKSB7CiAgICAgIG1lbWJlcnMgPSBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5zdHJpY3RTdWJjbGFzc2VzT2YoZmxhdC5iYXNlKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChmbGF0LmlzU3VidHlwZSk7CiAgICAgIG1lbWJlcnMgPSBjbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5zdHJpY3RTdWJ0eXBlc09mKGZsYXQuYmFzZSk7CiAgICB9CiAgICByZXR1cm4gbWVtYmVycy5ldmVyeSgoQ2xhc3NFbnRpdHkgY2xzKSA9PiB0aGlzLmNvbnRhaW5zKGNscywgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbk1hc2soVHlwZU1hc2sgb3RoZXIsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgb3RoZXIgPSBUeXBlTWFzay5ub25Gb3J3YXJkaW5nTWFzayhvdGhlcik7CiAgICBpZiAoaXNOdWxsYWJsZSAmJiAhb3RoZXIuaXNOdWxsYWJsZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKG90aGVyLmlzVW5pb24pIHsKICAgICAgVW5pb25UeXBlTWFzayB1bmlvbiA9IG90aGVyOwogICAgICBib29sIGNvbnRhaW5lZEluQW55T2YoRmxhdFR5cGVNYXNrIG1hc2ssIEl0ZXJhYmxlPEZsYXRUeXBlTWFzaz4gbWFza3MpIHsKICAgICAgICAvLyBudWxsIGlzIG5vdCBjYW5vbmljYWxpemVkIGZvciB0aGUgdW5pb24gYnV0IHN0b3JlZCBvbmx5IG9uIHNvbWUKICAgICAgICAvLyBtYXNrcyBpbiBbZGlzam9pbnRNYXNrXS4gSXQgaGFzIGJlZW4gY2hlY2tlZCBpbiB0aGUgc3Vycm91bmRpbmcKICAgICAgICAvLyBjb250ZXh0LCBzbyB3ZSBjYW4gc2FmZWx5IGlnbm9yZSBpdCBoZXJlLgogICAgICAgIEZsYXRUeXBlTWFzayBtYXNrRGlzcmVnYXJkTnVsbCA9IG1hc2subm9uTnVsbGFibGUoKTsKICAgICAgICByZXR1cm4gbWFza3MuYW55KChGbGF0VHlwZU1hc2sgb3RoZXIpIHsKICAgICAgICAgIHJldHVybiBvdGhlci5jb250YWluc01hc2sobWFza0Rpc3JlZ2FyZE51bGwsIGNsb3NlZFdvcmxkKTsKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgcmV0dXJuIGRpc2pvaW50TWFza3MuZXZlcnkoKEZsYXRUeXBlTWFzayBkaXNqb2ludE1hc2spIHsKICAgICAgICBib29sIGNvbnRhaW5lZCA9IGNvbnRhaW5lZEluQW55T2YoZGlzam9pbnRNYXNrLCB1bmlvbi5kaXNqb2ludE1hc2tzKTsKICAgICAgICBpZiAoUEVSRk9STV9FWFRSQV9DT05UQUlOU19DSEVDSyAmJgogICAgICAgICAgICAhY29udGFpbmVkICYmCiAgICAgICAgICAgIHVuaW9uLnNsb3dDb250YWluc0NoZWNrKGRpc2pvaW50TWFzaywgY2xvc2VkV29ybGQpKSB7CiAgICAgICAgICB0aHJvdyAiVHlwZU1hc2sgYmFzZWQgY29udGFpbm1lbnQgY2hlY2sgZmFpbGVkIGZvciAkdGhpcyBhbmQgJG90aGVyLiI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBjb250YWluZWQ7CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIGRpc2pvaW50TWFza3MuZXZlcnkoKG1hc2spID0+IG1hc2suaXNJbk1hc2sob3RoZXIsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zTWFzayhUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBvdGhlciA9IFR5cGVNYXNrLm5vbkZvcndhcmRpbmdNYXNrKG90aGVyKTsKICAgIGlmIChvdGhlci5pc051bGxhYmxlICYmICFpc051bGxhYmxlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAob3RoZXIuaXNVbmlvbikgcmV0dXJuIG90aGVyLmlzSW5NYXNrKHRoaXMsIGNsb3NlZFdvcmxkKTsKICAgIG90aGVyID0gb3RoZXIubm9uTnVsbGFibGUoKTsgLy8gbnVsbGFibGUgaXMgbm90IGNhbm9uaWNhbGl6ZWQsIHNvIGRyb3AgaXQuCiAgICBib29sIGNvbnRhaW5lZCA9CiAgICAgICAgZGlzam9pbnRNYXNrcy5hbnkoKG1hc2spID0+IG1hc2suY29udGFpbnNNYXNrKG90aGVyLCBjbG9zZWRXb3JsZCkpOwogICAgaWYgKFBFUkZPUk1fRVhUUkFfQ09OVEFJTlNfQ0hFQ0sgJiYKICAgICAgICAhY29udGFpbmVkICYmCiAgICAgICAgc2xvd0NvbnRhaW5zQ2hlY2sob3RoZXIsIGNsb3NlZFdvcmxkKSkgewogICAgICB0aHJvdyAiVHlwZU1hc2sgYmFzZWQgY29udGFpbm1lbnQgY2hlY2sgZmFpbGVkIGZvciAkdGhpcyBhbmQgJG90aGVyLiI7CiAgICB9CiAgICByZXR1cm4gY29udGFpbmVkOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc09ubHlJbnQoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZGlzam9pbnRNYXNrcy5ldmVyeSgobWFzaykgPT4gbWFzay5jb250YWluc09ubHlJbnQoY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5RG91YmxlKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGRpc2pvaW50TWFza3MuZXZlcnkoKG1hc2spID0+IG1hc2suY29udGFpbnNPbmx5RG91YmxlKGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seU51bShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBkaXNqb2ludE1hc2tzLmV2ZXJ5KChtYXNrKSB7CiAgICAgIHJldHVybiBtYXNrLmNvbnRhaW5zT25seU51bShjbG9zZWRXb3JsZCk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5Qm9vbChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBkaXNqb2ludE1hc2tzLmV2ZXJ5KChtYXNrKSA9PiBtYXNrLmNvbnRhaW5zT25seUJvb2woY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNPbmx5U3RyaW5nKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGRpc2pvaW50TWFza3MuZXZlcnkoKG1hc2spID0+IG1hc2suY29udGFpbnNPbmx5U3RyaW5nKGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zT25seShDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gZGlzam9pbnRNYXNrcy5ldmVyeSgobWFzaykgPT4gbWFzay5jb250YWluc09ubHkoZWxlbWVudCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBzYXRpc2ZpZXMoQ2xhc3NFbnRpdHkgY2xzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBkaXNqb2ludE1hc2tzLmV2ZXJ5KChtYXNrKSA9PiBtYXNrLnNhdGlzZmllcyhjbHMsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zKENsYXNzRW50aXR5IGNscywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gZGlzam9pbnRNYXNrcy5hbnkoKGUpID0+IGUuY29udGFpbnMoY2xzLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0FsbChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBkaXNqb2ludE1hc2tzLmFueSgobWFzaykgPT4gbWFzay5jb250YWluc0FsbChjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgc2luZ2xlQ2xhc3MoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBib29sIG5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoU2VsZWN0b3Igc2VsZWN0b3IsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGRpc2pvaW50TWFza3MKICAgICAgICAuYW55KChlKSA9PiBlLm5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoc2VsZWN0b3IsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNhbkhpdChNZW1iZXJFbnRpdHkgZWxlbWVudCwgTmFtZSBuYW1lLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBkaXNqb2ludE1hc2tzLmFueSgoZSkgPT4gZS5jYW5IaXQoZWxlbWVudCwgbmFtZSwgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBsb2NhdGVTaW5nbGVNZW1iZXIoU2VsZWN0b3Igc2VsZWN0b3IsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgTWVtYmVyRW50aXR5IGNhbmRpZGF0ZTsKICAgIGZvciAoRmxhdFR5cGVNYXNrIG1hc2sgaW4gZGlzam9pbnRNYXNrcykgewogICAgICBNZW1iZXJFbnRpdHkgY3VycmVudCA9IG1hc2subG9jYXRlU2luZ2xlTWVtYmVyKHNlbGVjdG9yLCBjbG9zZWRXb3JsZCk7CiAgICAgIGlmIChjdXJyZW50ID09IG51bGwpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfSBlbHNlIGlmIChjYW5kaWRhdGUgPT0gbnVsbCkgewogICAgICAgIGNhbmRpZGF0ZSA9IGN1cnJlbnQ7CiAgICAgIH0gZWxzZSBpZiAoY2FuZGlkYXRlICE9IGN1cnJlbnQpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNhbmRpZGF0ZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZyBtYXNrc1N0cmluZyA9CiAgICAgICAgKGRpc2pvaW50TWFza3MubWFwKChUeXBlTWFzayBtYXNrKSA9PiBtYXNrLnRvU3RyaW5nKCkpLnRvTGlzdCgpLi5zb3J0KCkpCiAgICAgICAgICAgIC5qb2luKCIsICIpOwogICAgcmV0dXJuICdVbmlvbigkbWFza3NTdHJpbmcpJzsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKCiAgICBib29sIGNvbnRhaW5zQWxsKCkgewogICAgICByZXR1cm4gb3RoZXIuZGlzam9pbnRNYXNrcy5ldmVyeSgoZSkgewogICAgICAgIHZhciBtYXAgPSBkaXNqb2ludE1hc2tzLm1hcCgoZSkgPT4gZS5ub25OdWxsYWJsZSgpKTsKICAgICAgICByZXR1cm4gbWFwLmNvbnRhaW5zKGUubm9uTnVsbGFibGUoKSk7CiAgICAgIH0pOwogICAgfQoKICAgIHJldHVybiBvdGhlciBpcyBVbmlvblR5cGVNYXNrICYmCiAgICAgICAgb3RoZXIuaXNOdWxsYWJsZSA9PSBpc051bGxhYmxlICYmCiAgICAgICAgb3RoZXIuZGlzam9pbnRNYXNrcy5sZW5ndGggPT0gZGlzam9pbnRNYXNrcy5sZW5ndGggJiYKICAgICAgICBjb250YWluc0FsbCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICBpbnQgaGFzaENvZGUgPSBpc051bGxhYmxlID8gODYgOiA0MzsKICAgIC8vIFRoZSBvcmRlciBvZiB0aGUgbWFza3MgaW4gW2Rpc2pvaW50TWFza3NdIG11c3Qgbm90IGFmZmVjdCB0aGUKICAgIC8vIGhhc2hDb2RlLgogICAgZm9yICh2YXIgbWFzayBpbiBkaXNqb2ludE1hc2tzKSB7CiAgICAgIGhhc2hDb2RlID0gKGhhc2hDb2RlIF4gbWFzay5ub25OdWxsYWJsZSgpLmhhc2hDb2RlKSAmIDB4M2ZmZmZmZmY7CiAgICB9CiAgICByZXR1cm4gaGFzaENvZGU7CiAgfQp9CoHAAE5OPAEPASpHHS8BKQFRSxs6ASoBMCZDBAE7LDUXLk8VNwQBMQwoKBUUSxMEAVAMUDQxPi4tBjJBPRIEATY/UScjLxokQyESDyYeHgFCIjQuKUNEKRpEIikBSEFGHyEeASNHRycsEQwxGwpFIy4IBgQBUE8dQkM0OTYBTCc0ATAdEhIwMB5GQwEQEEtHR0EeJk5QK0oQTw8lSQg9NCEZGQgGSQQBDDwvRgFNGhoNJisGNwQBDEMvRzUBMS4bNSYRQE0MCg9FCAY9BAEMPilBBhEEAQwYIU0oMQQBDBsiQSgQETUEAQwjDB0MHAxBDB0MHAwhDBsMGwwiDCIMHQE5BhI0ThpFKRwkUTVMLS0xJSFPFAY7JjkgIxtKDR5IBlAEAQw8LzcZI09LSzU9MEUMCAE/TiwaQlEKGgoGTQQBDEAvN0FPFUwoFjFNBhYEAQwzTQQBDDZQBAEMMygwCAQBDDROBAEMNlAEAQwrRgQBDD5MBAEMPUMEAQwvRwQBDD0BDFAZSQQBDEtLBAEMURwvTR0VJh0pFQgGFgQBDBYZURkiBAEMHC0BGS09LgoGASUqPhcEAQwVKUURJkgGFQQCATxwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlbWFza3MvdW5pb25fdHlwZV9tYXNrLmRhcnRFc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvdHlwZW1hc2tzL3ZhbHVlX3R5cGVfbWFzay5kYXJ0iLcvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBtYXNrczsKCmNsYXNzIFZhbHVlVHlwZU1hc2sgZXh0ZW5kcyBGb3J3YXJkaW5nVHlwZU1hc2sgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbVmFsdWVUeXBlTWFza10gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICd2YWx1ZS10eXBlLW1hc2snOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBUeXBlTWFzayBmb3J3YXJkVG87CiAgZmluYWwgUHJpbWl0aXZlQ29uc3RhbnRWYWx1ZSB2YWx1ZTsKCiAgVmFsdWVUeXBlTWFzayh0aGlzLmZvcndhcmRUbywgdGhpcy52YWx1ZSk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbVmFsdWVUeXBlTWFza10gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBWYWx1ZVR5cGVNYXNrLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBUeXBlTWFzayBmb3J3YXJkVG8gPSBuZXcgVHlwZU1hc2sucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IHNvdXJjZS5yZWFkQ29uc3RhbnQoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgVmFsdWVUeXBlTWFzayhmb3J3YXJkVG8sIGNvbnN0YW50KTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW1ZhbHVlVHlwZU1hc2tdIHRvIFtzaW5rXS4KICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShUeXBlTWFza0tpbmQudmFsdWUpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgZm9yd2FyZFRvLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVDb25zdGFudCh2YWx1ZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgbnVsbGFibGUoKSB7CiAgICByZXR1cm4gaXNOdWxsYWJsZSA/IHRoaXMgOiBuZXcgVmFsdWVUeXBlTWFzayhmb3J3YXJkVG8ubnVsbGFibGUoKSwgdmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZU1hc2sgbm9uTnVsbGFibGUoKSB7CiAgICByZXR1cm4gaXNOdWxsYWJsZQogICAgICAgID8gbmV3IFZhbHVlVHlwZU1hc2soZm9yd2FyZFRvLm5vbk51bGxhYmxlKCksIHZhbHVlKQogICAgICAgIDogdGhpczsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVmFsdWUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBlcXVhbHNEaXNyZWdhcmROdWxsKG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIFZhbHVlVHlwZU1hc2spIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzdXBlci5lcXVhbHNEaXNyZWdhcmROdWxsKG90aGVyKSAmJiB2YWx1ZSA9PSBvdGhlci52YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVNYXNrIGludGVyc2VjdGlvbihUeXBlTWFzayBvdGhlciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBUeXBlTWFzayBmb3J3YXJkSW50ZXJzZWN0aW9uID0gZm9yd2FyZFRvLmludGVyc2VjdGlvbihvdGhlciwgY2xvc2VkV29ybGQpOwogICAgaWYgKGZvcndhcmRJbnRlcnNlY3Rpb24uaXNFbXB0eU9yTnVsbCkgcmV0dXJuIGZvcndhcmRJbnRlcnNlY3Rpb247CiAgICByZXR1cm4gZm9yd2FyZEludGVyc2VjdGlvbi5pc051bGxhYmxlID8gbnVsbGFibGUoKSA6IG5vbk51bGxhYmxlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSA9PiBzdXBlciA9PSBvdGhlcjsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gY29tcHV0ZUhhc2hDb2RlKHZhbHVlLCBpc051bGxhYmxlLCBmb3J3YXJkVG8pOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdWYWx1ZSgkZm9yd2FyZFRvLCB2YWx1ZTogJHt2YWx1ZS50b0RhcnRUZXh0KCl9KSc7CiAgfQp9ClAATk48AQ8BMUcdLwEMHCYBLQE7LDUXTzQVMwQBMQwoKBUlHxMEAQwYTwQBDBsWPBAEAQwcAQwkL0UEAQxET0dIBAEMLQEMFToEAQwWPgQCATxwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlbWFza3MvdmFsdWVfdHlwZV9tYXNrLmRhcnQxc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvdHlwZXMuZGFydMAAV4QvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSB0eXBlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JyBzaG93IGZhaWxlZEF0LCByZXRhaW5EYXRhRm9yVGVzdGluZzsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL3Rhc2tzLmRhcnQnIHNob3cgQ29tcGlsZXJUYXNrOwppbXBvcnQgJy4uL2NvbXBpbGVyLmRhcnQnIHNob3cgQ29tcGlsZXI7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL3R5cGVfZ3JhcGhfaW5mZXJyZXIuZGFydCcgc2hvdyBUeXBlR3JhcGhJbmZlcnJlcjsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICdhYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvaW5mZXJyZXJfZW5naW5lLmRhcnQnOwoKLy8vIFJlc3VsdHMgYWJvdXQgYSBzaW5nbGUgZWxlbWVudCAoZS5nLiBhIG1ldGhvZCwgcGFyYW1ldGVyLCBvciBmaWVsZCkKLy8vIHByb2R1Y2VkIGJ5IHRoZSBnbG9iYWwgdHlwZS1pbmZlcmVuY2UgYWxnb3JpdGhtLgovLy8KLy8vIEFsbCBxdWVyaWVzIGluIHRoaXMgY2xhc3MgbWF5IGNvbnRhaW4gcmVzdWx0cyB0aGF0IGFzc3VtZSB3aG9sZS1wcm9ncmFtCi8vLyBjbG9zZWQtd29ybGQgc2VtYW50aWNzLiBBbnkgW1R5cGVNYXNrXSBmb3IgYW4gZWxlbWVudCBvciBub2RlIHRoYXQgd2UgcmV0dXJuCi8vLyB3YXMgaW5mZXJyZWQgdG8gYmUgYSAiZ3VhcmFudGVlZCB0eXBlIiwgdGhhdCBtZWFucywgaXQgaXMgYSB0eXBlIHRoYXQgd2UKLy8vIGNhbiBwcm92ZSB0byBiZSBjb3JyZWN0IGZvciBhbGwgZXhlY3V0aW9ucyBvZiB0aGUgcHJvZ3JhbS4gIEEgdHJpdmlhbAovLy8gaW1wbGVtZW50YXRpb24gd291bGQgcmV0dXJuIGZhbHNlIG9uIGFsbCBib29sZWFuIHByb3BlcnRpZXMgKGdpdmluZyBubwovLy8gZ3VhcmFudGVlcykgYW5kIHRoZSBgc3ViY2xhc3Mgb2YgT2JqZWN0IG9yIG51bGxgIHR5cGUgbWFzayBmb3IgdGhlIHR5cGUKLy8vIGJhc2VkIHF1ZXJpZXMgKHRoZSBydW50aW1lIHZhbHVlIGNvdWxkIGJlIGFueXRoaW5nKS4KYWJzdHJhY3QgY2xhc3MgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCB7CiAgLy8vIERlc2VyaWFsaXplcyBhIFtHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0XSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlLAogICAgICAgICAgaXIuTWVtYmVyIGNvbnRleHQsIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbikgPQogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0SW1wbC5yZWFkRnJvbURhdGFTb3VyY2U7CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0dsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHRdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBpci5NZW1iZXIgY29udGV4dCwKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluKTsKCiAgLy8vIFRoZSBpbmZlcnJlZCB0eXBlIHdoZW4gdGhpcyByZXN1bHQgYmVsb25ncyB0byBhIGZpZWxkLCBudWxsIG90aGVyd2lzZS4KICBBYnN0cmFjdFZhbHVlIGdldCB0eXBlOwoKICAvLy8gV2hldGhlciB0aGUgbWVtYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlc3VsdCBpcyBvbmx5IGNhbGxlZCBvbmNlIGluIG9uZQogIC8vLyBsb2NhdGlvbiBpbiB0aGUgZW50aXJlIHByb2dyYW0uCiAgYm9vbCBnZXQgaXNDYWxsZWRPbmNlOwoKICAvLy8gV2hldGhlciB0aGUgbWV0aG9kIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVzdWx0IGFsd2F5cyB0aHJvd3MuCiAgYm9vbCBnZXQgdGhyb3dzQWx3YXlzOwoKICAvLy8gVGhlIGluZmVycmVkIHJldHVybiB0eXBlIHdoZW4gdGhpcyByZXN1bHQgYmVsb25ncyB0byBhIGZ1bmN0aW9uIGVsZW1lbnQuCiAgQWJzdHJhY3RWYWx1ZSBnZXQgcmV0dXJuVHlwZTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgYSBzZW5kIFtub2RlXS4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW5hbWUgdGhpcy4KICBBYnN0cmFjdFZhbHVlIHR5cGVPZlNlbmQoaXIuVHJlZU5vZGUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBnZXR0ZXIgaW4gYSBjb21wbGV4IHNlbmQtc2V0IFtub2RlXSwgZm9yIGV4YW1wbGUsCiAgLy8vIHRoZSB0eXBlIG9mIHRoZSBgYS5mYCBnZXR0ZXIgaW4gYGEuZiArPSBiYC4KICBBYnN0cmFjdFZhbHVlIHR5cGVPZkdldHRlcihpci5UcmVlTm9kZSBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGl0ZXJhdG9yIGluIGEgW2xvb3BdLgogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3IoaXIuVHJlZU5vZGUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBgbW92ZU5leHRgIGNhbGwgb2YgYW4gaXRlcmF0b3IgaW4gYSBbbG9vcF0uCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvck1vdmVOZXh0KGlyLlRyZWVOb2RlIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgYGN1cnJlbnRgIGdldHRlciBvZiBhbiBpdGVyYXRvciBpbiBhIFtsb29wXS4KICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yQ3VycmVudChpci5UcmVlTm9kZSBub2RlKTsKfQoKLy8vIEludGVybmFsIGRhdGEgdXNlZCBkdXJpbmcgdHlwZS1pbmZlcmVuY2UgdG8gc3RvcmUgaW50ZXJtZWRpYXRlIHJlc3VsdHMgYWJvdXQKLy8vIGEgc2luZ2xlIGVsZW1lbnQuCmFic3RyYWN0IGNsYXNzIEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YSB7CiAgLy8vIERlc2VyaWFsaXplcyBhIFtHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGFdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSwKICAgICAgICAgIGlyLk1lbWJlciBjb250ZXh0LCBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pID0KICAgICAgS2VybmVsR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhLnJlYWRGcm9tRGF0YVNvdXJjZTsKCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgaXIuTWVtYmVyIGNvbnRleHQsCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbik7CgogIC8vLyBDb21wcmVzc2VzIHRoZSBpbm5lciByZXByZXNlbnRhdGlvbiBieSByZW1vdmluZyBbQWJzdHJhY3RWYWx1ZV0gbWFwcGluZ3MKICAvLy8gdG8gYG51bGxgLiBSZXR1cm5zIHRoZSBkYXRhIG9iamVjdCBpdHNlbGYgb3IgYG51bGxgIGlmIHRoZSBkYXRhIG9iamVjdAogIC8vLyB3YXMgZW1wdHkgYWZ0ZXIgY29tcHJlc3Npb24uCiAgR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhIGNvbXByZXNzKCk7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzLiBNYXliZSBzcGxpdCBieSBhY2Nlc3MvaW52b2tlLgogIEFic3RyYWN0VmFsdWUgdHlwZU9mU2VuZChpci5UcmVlTm9kZSBub2RlKTsKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkdldHRlcihpci5UcmVlTm9kZSBub2RlKTsKCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvcihpci5UcmVlTm9kZSBub2RlKTsKCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvck1vdmVOZXh0KGlyLlRyZWVOb2RlIG5vZGUpOwoKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yQ3VycmVudChpci5UcmVlTm9kZSBub2RlKTsKfQoKLy8vIEFQSSB0byBpbnRlcmFjdCB3aXRoIHRoZSBnbG9iYWwgdHlwZS1pbmZlcmVuY2UgZW5naW5lLgphYnN0cmFjdCBjbGFzcyBUeXBlc0luZmVycmVyIHsKICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBhbmFseXplTWFpbihGdW5jdGlvbkVudGl0eSBlbGVtZW50KTsKfQoKLy8vIFJlc3VsdHMgcHJvZHVjZWQgYnkgdGhlIGdsb2JhbCB0eXBlLWluZmVyZW5jZSBhbGdvcml0aG0uCi8vLwovLy8gQWxsIHF1ZXJpZXMgaW4gdGhpcyBjbGFzcyBtYXkgY29udGFpbiByZXN1bHRzIHRoYXQgYXNzdW1lIHdob2xlLXByb2dyYW0KLy8vIGNsb3NlZC13b3JsZCBzZW1hbnRpY3MuIEFueSBbQWJzdHJhY3RWYWx1ZV0gZm9yIGFuIGVsZW1lbnQgb3Igbm9kZSB0aGF0IHdlCi8vLyByZXR1cm4gd2FzIGluZmVycmVkIHRvIGJlIGEgImd1YXJhbnRlZWQgdHlwZSIsIHRoYXQgbWVhbnMsIGl0IGlzIGEgdHlwZSB0aGF0Ci8vLyB3ZSBjYW4gcHJvdmUgdG8gYmUgY29ycmVjdCBmb3IgYWxsIGV4ZWN1dGlvbnMgb2YgdGhlIHByb2dyYW0uCmFic3RyYWN0IGNsYXNzIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW0dsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsCiAgICAgIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgSW5mZXJyZWREYXRhIGluZmVycmVkRGF0YSkgewogICAgYm9vbCBpc1RyaXZpYWwgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGlmIChpc1RyaXZpYWwpIHsKICAgICAgcmV0dXJuIG5ldyBUcml2aWFsR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMoY2xvc2VkV29ybGQpOwogICAgfQogICAgcmV0dXJuIG5ldyBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0c0ltcGwucmVhZEZyb21EYXRhU291cmNlKAogICAgICAgIHNvdXJjZSwgZWxlbWVudE1hcCwgY2xvc2VkV29ybGQsIGluZmVycmVkRGF0YSk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0c10gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApOwoKICBKQ2xvc2VkV29ybGQgZ2V0IGNsb3NlZFdvcmxkOwoKICBJbmZlcnJlZERhdGEgZ2V0IGluZmVycmVkRGF0YTsKCiAgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCByZXN1bHRPZk1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgQWJzdHJhY3RWYWx1ZSByZXN1bHRPZlBhcmFtZXRlcihMb2NhbCBwYXJhbWV0ZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIFtzZWxlY3Rvcl0gdG8gYSByZWNlaXZlciB3aXRoCiAgLy8vIHRoZSBnaXZlbiBbcmVjZWl2ZXJdIHR5cGUuCiAgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlT2ZTZWxlY3RvcihTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlcik7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgYSBmaXhlZC1sZW5ndGggY29uc3RydWN0b3IgY2FsbCBnb2VzIHRocm91Z2ggYSBncm93YWJsZQogIC8vLyBjaGVjay4KICBib29sIGlzRml4ZWRBcnJheUNoZWNrZWRGb3JHcm93YWJsZShpci5UcmVlTm9kZSBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgYSBsaXN0IG5ldyBleHByZXNzaW9uIFtub2RlXS4KICBBYnN0cmFjdFZhbHVlIHR5cGVPZk5ld0xpc3QoaXIuVHJlZU5vZGUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIGEgbGlzdCBsaXRlcmFsIFtub2RlXS4KICBBYnN0cmFjdFZhbHVlIHR5cGVPZkxpc3RMaXRlcmFsKGlyLlRyZWVOb2RlIG5vZGUpOwp9CgovLy8gR2xvYmFsIGFuYWx5c2lzIHRoYXQgaW5mZXJzIGNvbmNyZXRlIHR5cGVzLgpjbGFzcyBHbG9iYWxUeXBlSW5mZXJlbmNlVGFzayBleHRlbmRzIENvbXBpbGVyVGFzayB7CiAgLy8gVE9ETyhzaWdtdW5kKTogcmVuYW1lIGF0IHRoZSBzYW1lIHRpbWUgYXMgb3VyIGJlbmNobWFya2luZyB0b29scy4KICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICdUeXBlIGluZmVyZW5jZSc7CgogIGZpbmFsIENvbXBpbGVyIGNvbXBpbGVyOwoKICAvLy8gVGhlIFtUeXBlR3JhcGhJbmZlcnJlcl0gdXNlZCBieSB0aGUgZ2xvYmFsIHR5cGUgaW5mZXJlbmNlLiBUaGlzIHNob3VsZCBieQogIC8vLyBhY2Nlc3NlZCBmcm9tIG91dHNpZGUgdGhpcyBjbGFzcyBmb3IgdGVzdGluZyBvbmx5LgogIFR5cGVHcmFwaEluZmVycmVyIHR5cGVzSW5mZXJyZXJJbnRlcm5hbDsKCiAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0c0ZvclRlc3Rpbmc7CgogIEdsb2JhbFR5cGVJbmZlcmVuY2VUYXNrKENvbXBpbGVyIGNvbXBpbGVyKQogICAgICA6IGNvbXBpbGVyID0gY29tcGlsZXIsCiAgICAgICAgc3VwZXIoY29tcGlsZXIubWVhc3VyZXIpOwoKICAvLy8gUnVucyB0aGUgZ2xvYmFsIHR5cGUtaW5mZXJlbmNlIGFsZ29yaXRobSBvbmNlLgogIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJ1bkdsb2JhbFR5cGVJbmZlcmVuY2UoRnVuY3Rpb25FbnRpdHkgbWFpbkVsZW1lbnQsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgSW5mZXJyZWREYXRhQnVpbGRlciBpbmZlcnJlZERhdGFCdWlsZGVyKSB7CiAgICByZXR1cm4gbWVhc3VyZSgoKSB7CiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHM7CiAgICAgIGlmIChjb21waWxlci5kaXNhYmxlVHlwZUluZmVyZW5jZSkgewogICAgICAgIHJlc3VsdHMgPSBuZXcgVHJpdmlhbEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzKGNsb3NlZFdvcmxkKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0eXBlc0luZmVycmVySW50ZXJuYWwgPz89IGNvbXBpbGVyLmJhY2tlbmRTdHJhdGVneQogICAgICAgICAgICAuY3JlYXRlVHlwZXNJbmZlcnJlcihjbG9zZWRXb3JsZCwgaW5mZXJyZWREYXRhQnVpbGRlcik7CiAgICAgICAgcmVzdWx0cyA9IHR5cGVzSW5mZXJyZXJJbnRlcm5hbC5hbmFseXplTWFpbihtYWluRWxlbWVudCk7CiAgICAgIH0KICAgICAgY2xvc2VkV29ybGQubm9TdWNoTWV0aG9kRGF0YS5jYXRlZ29yaXplQ29tcGxleEltcGxlbWVudGF0aW9ucyhyZXN1bHRzKTsKICAgICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSB7CiAgICAgICAgcmVzdWx0c0ZvclRlc3RpbmcgPSByZXN1bHRzOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHRzOwogICAgfSk7CiAgfQp9CgpjbGFzcyBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0c0ltcGwgaW1wbGVtZW50cyBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0c10gb2JqZWN0cwogIC8vLyBpbiBhIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdnbG9iYWwtdHlwZS1pbmZlcmVuY2UtcmVzdWx0cyc7CgogIEBvdmVycmlkZQogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKICBAb3ZlcnJpZGUKICBmaW5hbCBJbmZlcnJlZERhdGEgaW5mZXJyZWREYXRhOwogIGZpbmFsIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQgX2RlYWRGaWVsZFJlc3VsdDsKICBmaW5hbCBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0IF9kZWFkTWV0aG9kUmVzdWx0OwogIGZpbmFsIEFic3RyYWN0VmFsdWUgX3RyaXZpYWxQYXJhbWV0ZXJSZXN1bHQ7CgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQ+IG1lbWJlclJlc3VsdHM7CiAgZmluYWwgTWFwPExvY2FsLCBBYnN0cmFjdFZhbHVlPiBwYXJhbWV0ZXJSZXN1bHRzOwogIGZpbmFsIFNldDxpci5UcmVlTm9kZT4gY2hlY2tlZEZvckdyb3dhYmxlTGlzdHM7CiAgZmluYWwgU2V0PFNlbGVjdG9yPiByZXR1cm5zTGlzdEVsZW1lbnRUeXBlU2V0OwogIGZpbmFsIE1hcDxpci5UcmVlTm9kZSwgQWJzdHJhY3RWYWx1ZT4gX2FsbG9jYXRlZExpc3RzOwoKICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0c0ltcGwoCiAgICAgIHRoaXMuY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuaW5mZXJyZWREYXRhLAogICAgICB0aGlzLm1lbWJlclJlc3VsdHMsCiAgICAgIHRoaXMucGFyYW1ldGVyUmVzdWx0cywKICAgICAgdGhpcy5jaGVja2VkRm9yR3Jvd2FibGVMaXN0cywKICAgICAgdGhpcy5yZXR1cm5zTGlzdEVsZW1lbnRUeXBlU2V0LAogICAgICB0aGlzLl9hbGxvY2F0ZWRMaXN0cykKICAgICAgOiBfZGVhZEZpZWxkUmVzdWx0ID0gbmV3IERlYWRGaWVsZEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHQoCiAgICAgICAgICAgIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLAogICAgICAgIF9kZWFkTWV0aG9kUmVzdWx0ID0gbmV3IERlYWRNZXRob2RHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0KAogICAgICAgICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKSwKICAgICAgICBfdHJpdmlhbFBhcmFtZXRlclJlc3VsdCA9IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CgogIGZhY3RvcnkgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHNJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsCiAgICAgIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgSW5mZXJyZWREYXRhIGluZmVycmVkRGF0YSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBNYXA8TWVtYmVyRW50aXR5LCBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0PiBtZW1iZXJSZXN1bHRzID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlck1hcCgoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4KICAgICAgICAgICAgbmV3IEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQucmVhZEZyb21EYXRhU291cmNlKAogICAgICAgICAgICAgICAgc291cmNlLAogICAgICAgICAgICAgICAgZWxlbWVudE1hcC5nZXRNZW1iZXJDb250ZXh0Tm9kZShtZW1iZXIpLAogICAgICAgICAgICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikpOwogICAgTWFwPExvY2FsLCBBYnN0cmFjdFZhbHVlPiBwYXJhbWV0ZXJSZXN1bHRzID0gc291cmNlLnJlYWRMb2NhbE1hcCgoKSA9PgogICAgICAgIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgICAgLnJlYWRBYnN0cmFjdFZhbHVlRnJvbURhdGFTb3VyY2Uoc291cmNlKSk7CiAgICBTZXQ8aXIuVHJlZU5vZGU+IGNoZWNrZWRGb3JHcm93YWJsZUxpc3RzID0gc291cmNlLnJlYWRUcmVlTm9kZXMoKS50b1NldCgpOwogICAgU2V0PFNlbGVjdG9yPiByZXR1cm5zTGlzdEVsZW1lbnRUeXBlU2V0ID0KICAgICAgICBzb3VyY2UucmVhZExpc3QoKCkgPT4gbmV3IFNlbGVjdG9yLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpKS50b1NldCgpOwogICAgTWFwPGlyLlRyZWVOb2RlLCBBYnN0cmFjdFZhbHVlPiBhbGxvY2F0ZWRMaXN0cyA9IHNvdXJjZS5yZWFkVHJlZU5vZGVNYXAoCiAgICAgICAgKCkgPT4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgICAucmVhZEFic3RyYWN0VmFsdWVGcm9tRGF0YVNvdXJjZShzb3VyY2UpKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHNJbXBsKAogICAgICAgIGNsb3NlZFdvcmxkLAogICAgICAgIGluZmVycmVkRGF0YSwKICAgICAgICBtZW1iZXJSZXN1bHRzLAogICAgICAgIHBhcmFtZXRlclJlc3VsdHMsCiAgICAgICAgY2hlY2tlZEZvckdyb3dhYmxlTGlzdHMsCiAgICAgICAgcmV0dXJuc0xpc3RFbGVtZW50VHlwZVNldCwKICAgICAgICBhbGxvY2F0ZWRMaXN0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICBzaW5rLndyaXRlQm9vbChmYWxzZSk7IC8vIElzIF9ub3RfIHRyaXZpYWwuCiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyTWFwKAogICAgICAgIG1lbWJlclJlc3VsdHMsCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQgcmVzdWx0KSA9PgogICAgICAgICAgICByZXN1bHQud3JpdGVUb0RhdGFTaW5rKAogICAgICAgICAgICAgICAgc2luaywKICAgICAgICAgICAgICAgIGVsZW1lbnRNYXAuZ2V0TWVtYmVyQ29udGV4dE5vZGUobWVtYmVyKSwKICAgICAgICAgICAgICAgIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pKTsKICAgIHNpbmsud3JpdGVMb2NhbE1hcCgKICAgICAgICBwYXJhbWV0ZXJSZXN1bHRzLAogICAgICAgIChBYnN0cmFjdFZhbHVlIHZhbHVlKSA9PiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgIC53cml0ZUFic3RyYWN0VmFsdWVUb0RhdGFTaW5rKHNpbmssIHZhbHVlKSk7CiAgICBzaW5rLndyaXRlVHJlZU5vZGVzKGNoZWNrZWRGb3JHcm93YWJsZUxpc3RzKTsKICAgIHNpbmsud3JpdGVMaXN0KHJldHVybnNMaXN0RWxlbWVudFR5cGVTZXQsCiAgICAgICAgKFNlbGVjdG9yIHNlbGVjdG9yKSA9PiBzZWxlY3Rvci53cml0ZVRvRGF0YVNpbmsoc2luaykpOwogICAgc2luay53cml0ZVRyZWVOb2RlTWFwKAogICAgICAgIF9hbGxvY2F0ZWRMaXN0cywKICAgICAgICAoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgPT4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgICAud3JpdGVBYnN0cmFjdFZhbHVlVG9EYXRhU2luayhzaW5rLCB2YWx1ZSkpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQgcmVzdWx0T2ZNZW1iZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgYXNzZXJ0KAogICAgICAgIG1lbWJlciBpcyEgQ29uc3RydWN0b3JCb2R5RW50aXR5LAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBtZW1iZXIsCiAgICAgICAgICAgICJ1bmV4cGVjdGVkIGlucHV0OiBDb25zdHJ1Y3RvckJvZHlFbGVtZW50cyBhcmUgY3JlYXRlZCIKICAgICAgICAgICAgIiBhZnRlciBnbG9iYWwgdHlwZSBpbmZlcmVuY2UsIG5vIGRhdGEgaXMgYXZhaWFibGUgZm9yIHRoZW0uIikpOwogICAgLy8gVE9ETyhzaWdtdW5kLGpvaG5uaXdpbnRoZXIpOiBNYWtlIGl0IGFuIGVycm9yIHRvIHF1ZXJ5IGZvciByZXN1bHRzIHRoYXQKICAgIC8vIGRvbid0IGV4aXN0Li4KICAgIC8qYXNzZXJ0KG1lbWJlclJlc3VsdHMuY29udGFpbnNLZXkobWVtYmVyKSB8fCBtZW1iZXIgaXMgSlNpZ25hdHVyZU1ldGhvZCwKICAgICAgICAiTm8gaW5mZXJlbmNlIHJlc3VsdCBmb3IgbWVtYmVyICRtZW1iZXIiKTsqLwogICAgcmV0dXJuIG1lbWJlclJlc3VsdHNbbWVtYmVyXSA/PwogICAgICAgIChtZW1iZXIgaXMgRnVuY3Rpb25FbnRpdHkgPyBfZGVhZE1ldGhvZFJlc3VsdCA6IF9kZWFkRmllbGRSZXN1bHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSByZXN1bHRPZlBhcmFtZXRlcihMb2NhbCBwYXJhbWV0ZXIpIHsKICAgIC8vIFRPRE8oc2lnbXVuZCxqb2hubml3aW50aGVyKTogTWFrZSBpdCBhbiBlcnJvciB0byBxdWVyeSBmb3IgcmVzdWx0cyB0aGF0CiAgICAvLyBkb24ndCBleGlzdC4KICAgIC8qYXNzZXJ0KHBhcmFtZXRlclJlc3VsdHMuY29udGFpbnNLZXkocGFyYW1ldGVyKSwKICAgICAgICAiTm8gaW5mZXJlbmNlIHJlc3VsdCBmb3IgcGFyYW1ldGVyICRwYXJhbWV0ZXIiKTsqLwogICAgcmV0dXJuIHBhcmFtZXRlclJlc3VsdHNbcGFyYW1ldGVyXSA/PyBfdHJpdmlhbFBhcmFtZXRlclJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZU9mU2VsZWN0b3IoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyKSB7CiAgICAvLyBCYWlsb3V0IGZvciBjbG9zdXJlIGNhbGxzLiBXZSdyZSBub3QgdHJhY2tpbmcgdHlwZXMgb2YKICAgIC8vIGNsb3N1cmVzLgogICAgaWYgKHNlbGVjdG9yLmlzQ2xvc3VyZUNhbGwpCiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogICAgaWYgKHNlbGVjdG9yLmlzU2V0dGVyIHx8IHNlbGVjdG9yLmlzSW5kZXhTZXQpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgICB9CiAgICBpZiAocmV0dXJuc0xpc3RFbGVtZW50VHlwZShzZWxlY3RvciwgcmVjZWl2ZXIpKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmdldENvbnRhaW5lckVsZW1lbnRUeXBlKHJlY2VpdmVyKTsKICAgIH0KICAgIGlmIChyZXR1cm5zTWFwVmFsdWVUeXBlKHNlbGVjdG9yLCByZWNlaXZlcikpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZ2V0TWFwVmFsdWVUeXBlKHJlY2VpdmVyKTsKICAgIH0KCiAgICBpZiAoY2xvc2VkV29ybGQuaW5jbHVkZXNDbG9zdXJlQ2FsbChzZWxlY3RvciwgcmVjZWl2ZXIpKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogICAgfSBlbHNlIHsKICAgICAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBlbGVtZW50cyA9CiAgICAgICAgICBjbG9zZWRXb3JsZC5sb2NhdGVNZW1iZXJzKHNlbGVjdG9yLCByZWNlaXZlcik7CiAgICAgIExpc3Q8QWJzdHJhY3RWYWx1ZT4gdHlwZXMgPSA8QWJzdHJhY3RWYWx1ZT5bXTsKICAgICAgZm9yIChNZW1iZXJFbnRpdHkgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSA9IHR5cGVPZk1lbWJlcldpdGhTZWxlY3RvcihlbGVtZW50LCBzZWxlY3Rvcik7CiAgICAgICAgdHlwZXMuYWRkKHR5cGUpOwogICAgICB9CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnVuaW9uT2ZNYW55KHR5cGVzKTsKICAgIH0KICB9CgogIGJvb2wgcmV0dXJuc0xpc3RFbGVtZW50VHlwZShTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICByZXR1cm4gbWFzayAhPSBudWxsICYmCiAgICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0NvbnRhaW5lcihtYXNrKSAmJgogICAgICAgIHJldHVybnNMaXN0RWxlbWVudFR5cGVTZXQuY29udGFpbnMoc2VsZWN0b3IpOwogIH0KCiAgYm9vbCByZXR1cm5zTWFwVmFsdWVUeXBlKFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIHJldHVybiBtYXNrICE9IG51bGwgJiYKICAgICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmlzTWFwKG1hc2spICYmCiAgICAgICAgc2VsZWN0b3IuaXNJbmRleDsKICB9CgogIEFic3RyYWN0VmFsdWUgdHlwZU9mTWVtYmVyV2l0aFNlbGVjdG9yKAogICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCwgU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIGlmIChlbGVtZW50Lm5hbWUgPT0gSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyAmJgogICAgICAgIHNlbGVjdG9yLm5hbWUgIT0gZWxlbWVudC5uYW1lKSB7CiAgICAgIC8vIEFuIGludm9jYXRpb24gY2FuIHJlc29sdmUgdG8gYSBbbm9TdWNoTWV0aG9kXSwgaW4gd2hpY2ggY2FzZQogICAgICAvLyB3ZSBnZXQgdGhlIHJldHVybiB0eXBlIG9mIFtub1N1Y2hNZXRob2RdLgogICAgICByZXR1cm4gcmVzdWx0T2ZNZW1iZXIoZWxlbWVudCkucmV0dXJuVHlwZTsKICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNHZXR0ZXIpIHsKICAgICAgaWYgKGVsZW1lbnQuaXNGdW5jdGlvbikgewogICAgICAgIC8vIFtmdW5jdGlvblR5cGVdIGlzIG51bGwgaWYgdGhlIGluZmVycmVyIGRpZCBub3QgcnVuLgogICAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmZ1bmN0aW9uVHlwZTsKICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmlzRmllbGQpIHsKICAgICAgICByZXR1cm4gcmVzdWx0T2ZNZW1iZXIoZWxlbWVudCkudHlwZTsKICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmlzR2V0dGVyKSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdE9mTWVtYmVyKGVsZW1lbnQpLnJldHVyblR5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KGZhbHNlLCBmYWlsZWRBdChlbGVtZW50LCAiVW5leHBlY3RlZCBtZW1iZXIgJGVsZW1lbnQiKSk7CiAgICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZWxlbWVudC5pc0dldHRlciB8fCBlbGVtZW50LmlzRmllbGQpIHsKICAgICAgYXNzZXJ0KHNlbGVjdG9yLmlzQ2FsbCB8fCBzZWxlY3Rvci5pc1NldHRlcik7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHJlc3VsdE9mTWVtYmVyKGVsZW1lbnQpLnJldHVyblR5cGU7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB3aGV0aGVyIGEgZml4ZWQtbGVuZ3RoIGNvbnN0cnVjdG9yIGNhbGwgZ29lcyB0aHJvdWdoIGEgZ3Jvd2FibGUKICAvLy8gY2hlY2suCiAgLy8gVE9ETyhzaWdtdW5kKTogbW92ZSBpbnRvIHRoZSByZXN1bHQgb2YgdGhlIGVsZW1lbnQgY29udGFpbmluZyBzdWNoCiAgLy8gY29uc3RydWN0b3IgY2FsbC4KICBAb3ZlcnJpZGUKICBib29sIGlzRml4ZWRBcnJheUNoZWNrZWRGb3JHcm93YWJsZShpci5Ob2RlIGN0b3JDYWxsKSA9PgogICAgICBjaGVja2VkRm9yR3Jvd2FibGVMaXN0cy5jb250YWlucyhjdG9yQ2FsbCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mTmV3TGlzdChpci5Ob2RlIG5vZGUpID0+IF9hbGxvY2F0ZWRMaXN0c1tub2RlXTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZMaXN0TGl0ZXJhbChpci5Ob2RlIG5vZGUpID0+IF9hbGxvY2F0ZWRMaXN0c1tub2RlXTsKfQoKY2xhc3MgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdEltcGwKICAgIGltcGxlbWVudHMgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0XQogIC8vLyBvYmplY3RzIGluIGEgZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2dsb2JhbC10eXBlLWluZmVyZW5jZS1tZW1iZXItcmVzdWx0JzsKCiAgZmluYWwgR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhIF9kYXRhOwogIEBvdmVycmlkZQogIGZpbmFsIEFic3RyYWN0VmFsdWUgcmV0dXJuVHlwZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBBYnN0cmFjdFZhbHVlIHR5cGU7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCB0aHJvd3NBbHdheXM7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0NhbGxlZE9uY2U7CgogIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHRJbXBsKHRoaXMuX2RhdGEsIHRoaXMucmV0dXJuVHlwZSwgdGhpcy50eXBlLAogICAgICB7dGhpcy50aHJvd3NBbHdheXMsIHRoaXMuaXNDYWxsZWRPbmNlfSk7CgogIGZhY3RvcnkgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdEltcGwucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwKICAgICAgaXIuTWVtYmVyIGNvbnRleHQsCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbikgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEgZGF0YSA9IHNvdXJjZS5yZWFkVmFsdWVPck51bGwoKCkgewogICAgICByZXR1cm4gbmV3IEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgICAgICBzb3VyY2UsIGNvbnRleHQsIGFic3RyYWN0VmFsdWVEb21haW4pOwogICAgfSk7CiAgICBBYnN0cmFjdFZhbHVlIHJldHVyblR5cGUgPQogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4ucmVhZEFic3RyYWN0VmFsdWVGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgQWJzdHJhY3RWYWx1ZSB0eXBlID0KICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLnJlYWRBYnN0cmFjdFZhbHVlRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIGJvb2wgdGhyb3dzQWx3YXlzID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzQ2FsbGVkT25jZSA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0SW1wbChkYXRhLCByZXR1cm5UeXBlLCB0eXBlLAogICAgICAgIHRocm93c0Fsd2F5czogdGhyb3dzQWx3YXlzLCBpc0NhbGxlZE9uY2U6IGlzQ2FsbGVkT25jZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBpci5NZW1iZXIgY29udGV4dCwKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlVmFsdWVPck51bGwoX2RhdGEsIChHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGEgZGF0YSkgewogICAgICBkYXRhLndyaXRlVG9EYXRhU2luayhzaW5rLCBjb250ZXh0LCBhYnN0cmFjdFZhbHVlRG9tYWluKTsKICAgIH0pOwogICAgYWJzdHJhY3RWYWx1ZURvbWFpbi53cml0ZUFic3RyYWN0VmFsdWVUb0RhdGFTaW5rKHNpbmssIHJldHVyblR5cGUpOwogICAgYWJzdHJhY3RWYWx1ZURvbWFpbi53cml0ZUFic3RyYWN0VmFsdWVUb0RhdGFTaW5rKHNpbmssIHR5cGUpOwogICAgc2luay53cml0ZUJvb2wodGhyb3dzQWx3YXlzKTsKICAgIHNpbmsud3JpdGVCb29sKGlzQ2FsbGVkT25jZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZTZW5kKGlyLk5vZGUgbm9kZSkgPT4gX2RhdGE/LnR5cGVPZlNlbmQobm9kZSk7CiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZHZXR0ZXIoaXIuTm9kZSBub2RlKSA9PiBfZGF0YT8udHlwZU9mR2V0dGVyKG5vZGUpOwogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3IoaXIuTm9kZSBub2RlKSA9PiBfZGF0YT8udHlwZU9mSXRlcmF0b3Iobm9kZSk7CiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvck1vdmVOZXh0KGlyLk5vZGUgbm9kZSkgPT4KICAgICAgX2RhdGE/LnR5cGVPZkl0ZXJhdG9yTW92ZU5leHQobm9kZSk7CiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvckN1cnJlbnQoaXIuTm9kZSBub2RlKSA9PgogICAgICBfZGF0YT8udHlwZU9mSXRlcmF0b3JDdXJyZW50KG5vZGUpOwp9CgpjbGFzcyBUcml2aWFsR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgaW1wbGVtZW50cyBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyB7CiAgQG92ZXJyaWRlCiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwogIGZpbmFsIFRyaXZpYWxHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0IF90cml2aWFsTWVtYmVyUmVzdWx0OwogIGZpbmFsIEFic3RyYWN0VmFsdWUgX3RyaXZpYWxQYXJhbWV0ZXJSZXN1bHQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgSW5mZXJyZWREYXRhIGluZmVycmVkRGF0YSA9IG5ldyBUcml2aWFsSW5mZXJyZWREYXRhKCk7CgogIFRyaXZpYWxHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyh0aGlzLmNsb3NlZFdvcmxkKQogICAgICA6IF90cml2aWFsTWVtYmVyUmVzdWx0ID0gbmV3IFRyaXZpYWxHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0KAogICAgICAgICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKSwKICAgICAgICBfdHJpdmlhbFBhcmFtZXRlclJlc3VsdCA9IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGU7CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICAgIHNpbmsud3JpdGVCb29sKHRydWUpOyAvLyBJcyB0cml2aWFsLgogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ZpeGVkQXJyYXlDaGVja2VkRm9yR3Jvd2FibGUoaXIuTm9kZSBub2RlKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlT2ZTZWxlY3RvcihTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgcmVzdWx0T2ZQYXJhbWV0ZXIoTG9jYWwgcGFyYW1ldGVyKSB7CiAgICByZXR1cm4gX3RyaXZpYWxQYXJhbWV0ZXJSZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0IHJlc3VsdE9mTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBfdHJpdmlhbE1lbWJlclJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mTGlzdExpdGVyYWwoaXIuVHJlZU5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZOZXdMaXN0KGlyLlRyZWVOb2RlIG5vZGUpID0+IG51bGw7Cn0KCmNsYXNzIFRyaXZpYWxHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0CiAgICBpbXBsZW1lbnRzIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQgewogIGZpbmFsIEFic3RyYWN0VmFsdWUgZHluYW1pY1R5cGU7CgogIFRyaXZpYWxHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0KHRoaXMuZHluYW1pY1R5cGUpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCB0eXBlID0+IGR5bmFtaWNUeXBlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCByZXR1cm5UeXBlID0+IGR5bmFtaWNUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCB0aHJvd3NBbHdheXMgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JDdXJyZW50KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvck1vdmVOZXh0KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvcihpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mR2V0dGVyKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZTZW5kKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDYWxsZWRPbmNlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBpci5NZW1iZXIgY29udGV4dCwKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiVHJpdmlhbEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQud3JpdGVUb0RhdGFTaW5rIik7CiAgfQp9CgpjbGFzcyBEZWFkRmllbGRHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0CiAgICBpbXBsZW1lbnRzIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQgewogIGZpbmFsIEFic3RyYWN0VmFsdWUgZHluYW1pY1R5cGU7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZSBlbXB0eVR5cGU7CgogIERlYWRGaWVsZEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHQoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pCiAgICAgIDogdGhpcy5keW5hbWljVHlwZSA9IGRvbWFpbi5keW5hbWljVHlwZSwKICAgICAgICB0aGlzLmVtcHR5VHlwZSA9IGRvbWFpbi5lbXB0eVR5cGU7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0IHR5cGUgPT4gZW1wdHlUeXBlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCByZXR1cm5UeXBlID0+IGR5bmFtaWNUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCB0aHJvd3NBbHdheXMgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mSXRlcmF0b3JDdXJyZW50KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvck1vdmVOZXh0KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvcihpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mR2V0dGVyKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZTZW5kKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDYWxsZWRPbmNlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBpci5NZW1iZXIgY29udGV4dCwKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiRGVhZEZpZWxkR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdC53cml0ZVRvRGF0YVNpbmsiKTsKICB9Cn0KCmNsYXNzIERlYWRNZXRob2RHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0CiAgICBpbXBsZW1lbnRzIEdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHQgewogIGZpbmFsIEFic3RyYWN0VmFsdWUgZW1wdHlUeXBlOwogIGZpbmFsIEFic3RyYWN0VmFsdWUgZnVuY3Rpb25UeXBlOwoKICBEZWFkTWV0aG9kR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikKICAgICAgOiB0aGlzLmZ1bmN0aW9uVHlwZSA9IGRvbWFpbi5mdW5jdGlvblR5cGUsCiAgICAgICAgdGhpcy5lbXB0eVR5cGUgPSBkb21haW4uZW1wdHlUeXBlOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGdldCB0eXBlID0+IGZ1bmN0aW9uVHlwZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXQgcmV0dXJuVHlwZSA9PiBlbXB0eVR5cGU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IHRocm93c0Fsd2F5cyA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvckN1cnJlbnQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yTW92ZU5leHQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZHZXR0ZXIoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZlNlbmQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NhbGxlZE9uY2UgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIGlyLk1lbWJlciBjb250ZXh0LAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJEZWFkRmllbGRHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0LndyaXRlVG9EYXRhU2luayIpOwogIH0KfQqCdwBOTjwBDwEoPR8xKSQrJ0YuMiolKwFINQRMUU1KS0w5MU1QSD4BQzkwAU0aAVAmGQFMGQFPIAEpJy4BUDIwATQyAUo6AUs5AgFRFjBMT0g/AUI5MAFPTSMtAUUuMAEyAToBOQIBOx9CAgE9BExPUUIsSDkZISAjKBVBBkI4BAE+QgEgASEBRwE0AU8hUQFODTkBODEBMTUCATA1RwwoARsBUDkrATABLR0iATVQSxgqK0YPO0RCCE4iJQgWCAQCAU1PIj0BDCIMIzo7LwFKNDIxOQEiGBkaHSQmHEMuRS5PAT0ZISAjF0c2RBg5M0soN08uUE0uNxUvFRYXGiEjGQQBDEMwFRkXSSQWOTMYGkE5Mi5AGxlBORMEAQxIDCoSFERNTxVONSRLBAEMNU8UNjtDBAEMJjM+ESA6NDoGNlAGM0gGAT86DSg5NS9KGQhBBgQBRxs9NgQBRBs3GgQBKjE1KUYzMSQgPz0kLSUzD0g8CDY0Og0xBgQBTg1IFww7MgEMRgEMSgIBKjFMKkMBLgwiDBwMGwwbAU4vAUIZGTEXRkQxCB9FGUUrKxVLQQQBDDkxFUlACEhCIiITBAEMRQxJDE0MOCsMNyoCAVAMIkUvDD8BNks6TwEMQykEAQw+AQxOOAQBDDUkBAEMSCEEAQw9AQw5AgEtMSMBPAEMKQEMLwEMIgEMPQEMPgEMNgEMNAEMMgEMIgEMOTEgQwQCASkxIyEBQS8rAQwnAQwvAQwiAQw9AQw+AQw2AQw0AQwyAQwiAQw5MSA/BAIBKjEhJAFCMSsBDCoBDC0BDCIBDD0BDD4BDDYBDDQBDDIBDCIBDDkxID8EAgEocGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZXMuZGFydDhzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydMAAQF0vLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLnNvdXJjZV9pbmZvcm1hdGlvbjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBzaG93IEphdmFTY3JpcHROb2RlU291cmNlSW5mb3JtYXRpb247CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnOwppbXBvcnQgJ3NvdXJjZV9maWxlLmRhcnQnOwppbXBvcnQgJ3Bvc2l0aW9uX2luZm9ybWF0aW9uLmRhcnQnOwoKLy8vIEludGVyZmFjZSBmb3IgcGFzc2luZyBzb3VyY2UgaW5mb3JtYXRpb24sIGZvciBpbnN0YW5jZSBmb3IgdXNlIGluIHNvdXJjZQovLy8gbWFwcywgdGhyb3VnaCB0aGUgYmFja2VuZC4KYWJzdHJhY3QgY2xhc3MgU291cmNlSW5mb3JtYXRpb24gZXh0ZW5kcyBKYXZhU2NyaXB0Tm9kZVNvdXJjZUluZm9ybWF0aW9uIHsKICBjb25zdCBTb3VyY2VJbmZvcm1hdGlvbigpOwoKICBzdGF0aWMgU291cmNlSW5mb3JtYXRpb24gcmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBpbnQgaGFzU291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2UucmVhZEludCgpOwogICAgaWYgKGhhc1NvdXJjZUluZm9ybWF0aW9uID09IDApIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgaWYgKGhhc1NvdXJjZUluZm9ybWF0aW9uID09IDEpIHsKICAgICAgcmV0dXJuIGNvbnN0IFNvdXJjZU1hcHBlZE1hcmtlcigpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGhhc1NvdXJjZUluZm9ybWF0aW9uID09IDIpOwogICAgICByZXR1cm4gUG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvbi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIH0KICB9CgogIHN0YXRpYyB2b2lkIHdyaXRlVG9EYXRhU2luaygKICAgICAgRGF0YVNpbmsgc2luaywgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGlmIChzb3VyY2VJbmZvcm1hdGlvbiA9PSBudWxsKSB7CiAgICAgIHNpbmsud3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgaWYgKHNvdXJjZUluZm9ybWF0aW9uIGlzIFNvdXJjZU1hcHBlZE1hcmtlcikgewogICAgICBzaW5rLndyaXRlSW50KDEpOwogICAgfSBlbHNlIHsKICAgICAgc2luay53cml0ZUludCgyKTsKICAgICAgUG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvbiBwb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICAgIHBvc2l0aW9uU291cmNlSW5mb3JtYXRpb24ud3JpdGVUb0RhdGFTaW5rSW50ZXJuYWwoc2luayk7CiAgICB9CiAgfQoKICBTb3VyY2VTcGFuIGdldCBzb3VyY2VTcGFuOwoKICAvLy8gVGhlIHNvdXJjZSBsb2NhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHN0YXJ0IG9mIHRoZSBKUyBub2RlLgogIFNvdXJjZUxvY2F0aW9uIGdldCBzdGFydFBvc2l0aW9uID0+IG51bGw7CgogIC8vLyBUaGUgc291cmNlIGxvY2F0aW9uIGFzc29jaWF0ZWQgd2l0aCBhbiBpbm5lciBvZiB0aGUgSlMgbm9kZS4KICAvLy8KICAvLy8gVGhlIGlubmVyIHBvc2l0aW9uIGlzIGZvciBpbnN0YW5jZSBgZm9vKClgIGluIGBvLmZvbygpYC4KICBTb3VyY2VMb2NhdGlvbiBnZXQgaW5uZXJQb3NpdGlvbiA9PiBudWxsOwoKICAvLy8gVGhlIHNvdXJjZSBsb2NhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGVuZCBvZiB0aGUgSlMgbm9kZS4KICBTb3VyY2VMb2NhdGlvbiBnZXQgZW5kUG9zaXRpb24gPT4gbnVsbDsKCiAgLy8vIEEgbGlzdCBjb250YWluaW5nIHN0YXJ0LCBpbm5lciwgYW5kIGVuZCBwb3NpdGlvbnMuCiAgTGlzdDxTb3VyY2VMb2NhdGlvbj4gZ2V0IHNvdXJjZUxvY2F0aW9uczsKCiAgLy8vIEEgbGlzdCBvZiBpbmxpbmluZyBjb250ZXh0IGxvY2F0aW9ucy4KICBMaXN0PEZyYW1lQ29udGV4dD4gZ2V0IGlubGluaW5nQ29udGV4dCA9PiBudWxsOwoKICAvLy8gUmV0dXJuIGEgc2hvcnQgdGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgc291cmNlIGxvY2F0aW9uLgogIFN0cmluZyBnZXQgc2hvcnRUZXh0Owp9CgovLy8gQ29udGV4dCBpbmZvcm1hdGlvbiBhYm91dCBpbmxpbmVkIGNhbGxzLgovLy8KLy8vIFRoaXMgaXMgYXNzb2NpYXRlZCB3aXRoIFNvdXJjZUluZm9ybWF0aW9uIG9iamVjdHMgdG8gYmUgYWJsZSB0byBlbWl0Ci8vLyBwcmVjaXNlIGRhdGEgYWJvdXQgaW5saW5pbmcgdGhhdCBjYW4gdGhlbiBiZSB1c2VkIGJ5IGRlZm9idXNjYXRpb24gdG9vbHMKLy8vIHdoZW4gcmVjb25zdHJ1Y3RpbmcgYSBzb3VyY2Ugc3RhY2sgZnJvbSBhIHByb2R1Y3Rpb24gc3RhY2sgdHJhY2UuCmNsYXNzIEZyYW1lQ29udGV4dCB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZnJhbWUtY29udGV4dCc7CgogIC8vLyBMb2NhdGlvbiBvZiB0aGUgY2FsbCB0aGF0IHdhcyBpbmxpbmVkLgogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uIGNhbGxJbmZvcm1hdGlvbjsKCiAgLy8vIE5hbWUgb2YgdGhlIG1ldGhvZCB0aGF0IHdhcyBpbmxpbmVkLgogIGZpbmFsIFN0cmluZyBpbmxpbmVkTWV0aG9kTmFtZTsKCiAgRnJhbWVDb250ZXh0KHRoaXMuY2FsbEluZm9ybWF0aW9uLCB0aGlzLmlubGluZWRNZXRob2ROYW1lKTsKCiAgZmFjdG9yeSBGcmFtZUNvbnRleHQucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIFNvdXJjZUluZm9ybWF0aW9uIGNhbGxJbmZvcm1hdGlvbiA9IHNvdXJjZS5yZWFkQ2FjaGVkPFNvdXJjZUluZm9ybWF0aW9uPigKICAgICAgICAoKSA9PiBTb3VyY2VJbmZvcm1hdGlvbi5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSk7CiAgICBTdHJpbmcgaW5saW5lZE1ldGhvZE5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBGcmFtZUNvbnRleHQoY2FsbEluZm9ybWF0aW9uLCBpbmxpbmVkTWV0aG9kTmFtZSk7CiAgfQoKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2FjaGVkPFNvdXJjZUluZm9ybWF0aW9uPigKICAgICAgICBjYWxsSW5mb3JtYXRpb24sCiAgICAgICAgKFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSA9PgogICAgICAgICAgICBTb3VyY2VJbmZvcm1hdGlvbi53cml0ZVRvRGF0YVNpbmsoc2luaywgc291cmNlSW5mb3JtYXRpb24pKTsKICAgIHNpbmsud3JpdGVTdHJpbmcoaW5saW5lZE1ldGhvZE5hbWUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICIoRnJhbWVDb250ZXh0OiAkY2FsbEluZm9ybWF0aW9uLCAkaW5saW5lZE1ldGhvZE5hbWUpIjsKfQoKLy8vIFN0cmF0ZWd5IGZvciBjcmVhdGluZywgcHJvY2Vzc2luZyBhbmQgYXBwbHlpbmcgW1NvdXJjZUluZm9ybWF0aW9uXS4KY2xhc3MgU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSB7CiAgY29uc3QgU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSgpOwoKICAvLy8gQ3JlYXRlIGEgW1NvdXJjZUluZm9ybWF0aW9uQnVpbGRlcl0gZm9yIFttZW1iZXJdLgogIFNvdXJjZUluZm9ybWF0aW9uQnVpbGRlciBjcmVhdGVCdWlsZGVyRm9yQ29udGV4dCgKICAgICAgY292YXJpYW50IE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBuZXcgU291cmNlSW5mb3JtYXRpb25CdWlsZGVyKCk7CiAgfQoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBtYXJrZXIgZm9yIG5vbi1wcmVhbWJsZSBjb2RlLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkU291cmNlTWFwcGVkTWFya2VyKCkgPT4gbnVsbDsKCiAgLy8vIENhbGxlZCB3aGVuIGNvbXBpbGF0aW9uIGhhcyBjb21wbGV0ZWQuCiAgdm9pZCBvbkNvbXBsZXRlKCkge30KfQoKLy8vIEludGVyZmFjZSBmb3IgZ2VuZXJhdGluZyBbU291cmNlSW5mb3JtYXRpb25dLgpjbGFzcyBTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIgewogIGNvbnN0IFNvdXJjZUluZm9ybWF0aW9uQnVpbGRlcigpOwoKICAvLy8gQ3JlYXRlIGEgW1NvdXJjZUluZm9ybWF0aW9uQnVpbGRlcl0gZm9yIFttZW1iZXJdIHdpdGggYWRkaXRpb25hbCBpbmxpbmluZwogIC8vLyBbY29udGV4dF0uCiAgU291cmNlSW5mb3JtYXRpb25CdWlsZGVyIGZvckNvbnRleHQoCiAgICAgICAgICBjb3ZhcmlhbnQgTWVtYmVyRW50aXR5IG1lbWJlciwgU291cmNlSW5mb3JtYXRpb24gY29udGV4dCkgPT4KICAgICAgdGhpczsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgW21lbWJlcl0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGREZWNsYXJhdGlvbihjb3ZhcmlhbnQgTWVtYmVyRW50aXR5IG1lbWJlcikgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBzdHViIG9mIFtjYWxsU3RydWN0dXJlXSBmb3IgW21lbWJlcl0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRTdHViKAogICAgICAgICAgY292YXJpYW50IEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpID0+CiAgICAgIG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgZ2VuZXJpYyBbbm9kZV0uCiAgQGRlcHJlY2F0ZWQKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEdlbmVyaWMoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgYW4gaW5zdGFudGlhdGlvbiBvZiBhIGNsYXNzIHVzaW5nIFtub2RlXQogIC8vLyBmb3IgdGhlIHNvdXJjZSBwb3NpdGlvbi4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZENyZWF0ZShpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgcmV0dXJuIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFJldHVybihpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciBhbiBpbXBsaWNpdCByZXR1cm4gaW4gW2VsZW1lbnRdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkSW1wbGljaXRSZXR1cm4oY292YXJpYW50IE1lbWJlckVudGl0eSBlbGVtZW50KSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGxvb3AgW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkTG9vcChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciBhIHJlYWQgYWNjZXNzIGxpa2UgYGEuYmAuCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRHZXQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgYSB3cml0ZSBhY2Nlc3MgbGlrZSBgYS5iID0gM2AuCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRTZXQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgYSBjYWxsIGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZENhbGwoaXIuTm9kZSByZWNlaXZlciwgaXIuTm9kZSBjYWxsKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGlmIHN0YXRlbWVudCBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRJZihpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgY29uc3RydWN0b3IgaW52b2NhdGlvbiBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGROZXcoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIHRocm93IGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFRocm93KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBhc3NlcnQgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQXNzZXJ0KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBhc3NpZ25tZW50IGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEFzc2lnbm1lbnQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGluc2VydGVkIGFzCiAgLy8vIGZpcnN0IHN0YXRlbWVudCBvZiBhIGZ1bmN0aW9uLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkVmFyaWFibGVEZWNsYXJhdGlvbigpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgYXdhaXQgW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQXdhaXQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIHlpZWxkIG9yIHlpZWxkKiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRZaWVsZChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciBhc3luYy9hd2FpdCBib2lsZXIgcGxhdGUgY29kZS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEFzeW5jQm9keSgpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciBleGl0aW5nIGFzeW5jL2F3YWl0IGNvZGUuCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRBc3luY0V4aXQoKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgYW4gaW52b2NhdGlvbiBvZiBhIGZvcmVpZ24gbWV0aG9kLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkRm9yZWlnbkNvZGUoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgYSBzdHJpbmcgaW50ZXJwb2xhdGlvbiBvZiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRTdHJpbmdJbnRlcnBvbGF0aW9uKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBmb3ItaW4gYGl0ZXJhdG9yYCBhY2Nlc3MgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkRm9ySW5JdGVyYXRvcihpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgZm9yLWluIGBtb3ZlTmV4dGAgY2FsbCBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRGb3JJbk1vdmVOZXh0KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBmb3ItaW4gYGN1cnJlbnRgIGFjY2VzcyBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRGb3JJbkN1cnJlbnQoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIGZvci1pbiB2YXJpYWJsZSBhc3NpZ25tZW50IGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEZvckluU2V0KGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBvcGVyYXRvciBgW11gIGFjY2VzcyBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRJbmRleChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgb3BlcmF0b3IgYFtdPWAgYXNzaWdubWVudCBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRJbmRleFNldChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgYmluYXJ5IG9wZXJhdGlvbiBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRCaW5hcnkoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIHVuYXJ5IG9wZXJhdGlvbiBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRVbmFyeShpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgdHJ5IHN0YXRlbWVudCBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRUcnkoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICAvLy8gR2VuZXJhdGUgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgdGhlIHVuYXJ5IG9wZXJhdG9yIGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZENhdGNoKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBpcy10ZXN0IGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZElzKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBhcy1jYXN0IGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEFzKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBzd2l0Y2ggc3RhdGVtZW50IFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFN3aXRjaChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgc3dpdGNoIGNhc2UgaW4gW25vZGVdLgogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkU3dpdGNoQ2FzZShpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIC8vLyBHZW5lcmF0ZSBbU291cmNlSW5mb3JtYXRpb25dIGZvciB0aGUgbGlzdCBsaXRlcmFsIGluIFtub2RlXS4KICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZExpc3RMaXRlcmFsKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgLy8vIEdlbmVyYXRlIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIHRoZSBicmVhay9jb250aW51ZSBpbiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRHb3RvKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKfQoKLy8vIEEgbG9jYXRpb24gaW4gYSBzb3VyY2UgZmlsZS4KYWJzdHJhY3QgY2xhc3MgU291cmNlTG9jYXRpb24gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3NvdXJjZS1sb2NhdGlvbic7CgogIGNvbnN0IFNvdXJjZUxvY2F0aW9uKCk7CgogIC8vLyBUaGUgYWJzb2x1dGUgVVJJIG9mIHRoZSBzb3VyY2UgZmlsZSBvZiB0aGlzIHNvdXJjZSBsb2NhdGlvbi4KICBVcmkgZ2V0IHNvdXJjZVVyaTsKCiAgLy8vIFRoZSBjaGFyYWN0ZXIgb2Zmc2V0IG9mIHRoZSB0aGlzIHNvdXJjZSBsb2NhdGlvbiBpbnRvIHRoZSBzb3VyY2UgZmlsZS4KICBpbnQgZ2V0IG9mZnNldDsKCiAgLy8vIFRoZSAxLWJhc2VkIGxpbmUgbnVtYmVyIG9mIHRoZSBbb2Zmc2V0XS4KICBpbnQgZ2V0IGxpbmU7CgogIC8vLyBUaGUgMS1iYXNlZCBjb2x1bW4gbnVtYmVyIG9mIHRoZSBbb2Zmc2V0XSB3aXRoIGl0cyBsaW5lLgogIGludCBnZXQgY29sdW1uOwoKICAvLy8gVGhlIG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgc291cmNlIGxvY2F0aW9uLCBpZiBhbnkuCiAgU3RyaW5nIGdldCBzb3VyY2VOYW1lOwoKICBzdGF0aWMgU291cmNlTG9jYXRpb24gcmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBpbnQgaGFzU291cmNlTG9jYXRpb24gPSBzb3VyY2UucmVhZEludCgpOwogICAgaWYgKGhhc1NvdXJjZUxvY2F0aW9uID09IDApIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgaWYgKGhhc1NvdXJjZUxvY2F0aW9uID09IDEpIHsKICAgICAgcmV0dXJuIGNvbnN0IE5vU291cmNlTG9jYXRpb25NYXJrZXIoKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChoYXNTb3VyY2VMb2NhdGlvbiA9PSAyKTsKICAgICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICAgIFVyaSBzb3VyY2VVcmkgPSBzb3VyY2UucmVhZFVyaSgpOwogICAgICBpbnQgb2Zmc2V0ID0gc291cmNlLnJlYWRJbnQoKTsKICAgICAgaW50IGxpbmUgPSBzb3VyY2UucmVhZEludCgpOwogICAgICBpbnQgY29sdW1uID0gc291cmNlLnJlYWRJbnQoKTsKICAgICAgU3RyaW5nIHNvdXJjZU5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICAgIHJldHVybiBuZXcgRGlyZWN0U291cmNlTG9jYXRpb24oCiAgICAgICAgICBzb3VyY2VVcmksIG9mZnNldCwgbGluZSwgY29sdW1uLCBzb3VyY2VOYW1lKTsKICAgIH0KICB9CgogIHN0YXRpYyB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbikgewogICAgaWYgKHNvdXJjZUxvY2F0aW9uID09IG51bGwpIHsKICAgICAgc2luay53cml0ZUludCgwKTsKICAgIH0gZWxzZSBpZiAoc291cmNlTG9jYXRpb24gaXMgTm9Tb3VyY2VMb2NhdGlvbk1hcmtlcikgewogICAgICBzaW5rLndyaXRlSW50KDEpOwogICAgfSBlbHNlIHsKICAgICAgc2luay53cml0ZUludCgyKTsKICAgICAgc2luay5iZWdpbih0YWcpOwogICAgICBzaW5rLndyaXRlVXJpKHNvdXJjZUxvY2F0aW9uLnNvdXJjZVVyaSk7CiAgICAgIHNpbmsud3JpdGVJbnQoc291cmNlTG9jYXRpb24ub2Zmc2V0KTsKICAgICAgc2luay53cml0ZUludChzb3VyY2VMb2NhdGlvbi5saW5lKTsKICAgICAgc2luay53cml0ZUludChzb3VyY2VMb2NhdGlvbi5jb2x1bW4pOwogICAgICBzaW5rLndyaXRlU3RyaW5nKHNvdXJjZUxvY2F0aW9uLnNvdXJjZU5hbWUpOwogICAgICBzaW5rLmVuZCh0YWcpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gc291cmNlVXJpLmhhc2hDb2RlICogMTcgKwogICAgICAgIG9mZnNldC5oYXNoQ29kZSAqIDE5ICsKICAgICAgICBzb3VyY2VOYW1lLmhhc2hDb2RlICogMjM7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gb3RoZXIgaXMgU291cmNlTG9jYXRpb24gJiYKICAgICAgICBzb3VyY2VVcmkgPT0gb3RoZXIuc291cmNlVXJpICYmCiAgICAgICAgb2Zmc2V0ID09IG90aGVyLm9mZnNldCAmJgogICAgICAgIHNvdXJjZU5hbWUgPT0gb3RoZXIuc291cmNlTmFtZTsKICB9CgogIFN0cmluZyBnZXQgc2hvcnRUZXh0ID0+ICcke3NvdXJjZVVyaT8ucGF0aFNlZ21lbnRzPy5sYXN0fTpbJGxpbmUsJGNvbHVtbl0nOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtzb3VyY2VVcml9Olske2xpbmV9LCR7Y29sdW1ufV0nOwp9CgpjbGFzcyBEaXJlY3RTb3VyY2VMb2NhdGlvbiBleHRlbmRzIFNvdXJjZUxvY2F0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgc291cmNlVXJpOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgb2Zmc2V0OwoKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgbGluZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGNvbHVtbjsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIHNvdXJjZU5hbWU7CgogIERpcmVjdFNvdXJjZUxvY2F0aW9uKAogICAgICB0aGlzLnNvdXJjZVVyaSwgdGhpcy5vZmZzZXQsIHRoaXMubGluZSwgdGhpcy5jb2x1bW4sIHRoaXMuc291cmNlTmFtZSk7Cn0KCi8vLyBBIGxvY2F0aW9uIGluIGEgc291cmNlIGZpbGUuCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0U291cmNlTG9jYXRpb24gZXh0ZW5kcyBTb3VyY2VMb2NhdGlvbiB7CiAgZmluYWwgU291cmNlRmlsZSBfc291cmNlRmlsZTsKICBpci5Mb2NhdGlvbiBfbG9jYXRpb247CgogIEFic3RyYWN0U291cmNlTG9jYXRpb24odGhpcy5fc291cmNlRmlsZSkgewogICAgYXNzZXJ0KAogICAgICAgIG9mZnNldCA8IF9zb3VyY2VGaWxlLmxlbmd0aCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgbmV3IFNvdXJjZVNwYW4oc291cmNlVXJpLCAwLCAwKSwKICAgICAgICAgICAgIkludmFsaWQgc291cmNlIGxvY2F0aW9uIGluICR7c291cmNlVXJpfTogIgogICAgICAgICAgICAib2Zmc2V0PSRvZmZzZXQsIGxlbmd0aD0ke19zb3VyY2VGaWxlLmxlbmd0aH0uIikpOwogIH0KCiAgQWJzdHJhY3RTb3VyY2VMb2NhdGlvbi5mcm9tTG9jYXRpb24odGhpcy5fbG9jYXRpb24pIDogX3NvdXJjZUZpbGUgPSBudWxsOwoKICBBYnN0cmFjdFNvdXJjZUxvY2F0aW9uLmZyb21PdGhlcihBYnN0cmFjdFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uKQogICAgICA6IHRoaXMuZnJvbUxvY2F0aW9uKGxvY2F0aW9uLl9sb2NhdGlvbik7CgogIEBvdmVycmlkZQogIFVyaSBnZXQgc291cmNlVXJpID0+IF9zb3VyY2VGaWxlLnVyaTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBvZmZzZXQ7CgogIEBvdmVycmlkZQogIGludCBnZXQgbGluZSA9PiAoX2xvY2F0aW9uID8/PSBfc291cmNlRmlsZS5nZXRMb2NhdGlvbihvZmZzZXQpKS5saW5lOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGNvbHVtbiA9PiAoX2xvY2F0aW9uID8/PSBfc291cmNlRmlsZS5nZXRMb2NhdGlvbihvZmZzZXQpKS5jb2x1bW47CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgc291cmNlTmFtZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBzaG9ydFRleHQgPT4gJyR7c291cmNlVXJpLnBhdGhTZWdtZW50cy5sYXN0fTpbJGxpbmUsJGNvbHVtbl0nOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtzb3VyY2VVcml9OlskbGluZSwkY29sdW1uXSc7Cn0KCmNsYXNzIE9mZnNldFNvdXJjZUxvY2F0aW9uIGV4dGVuZHMgQWJzdHJhY3RTb3VyY2VMb2NhdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IG9mZnNldDsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgc291cmNlTmFtZTsKCiAgT2Zmc2V0U291cmNlTG9jYXRpb24oU291cmNlRmlsZSBzb3VyY2VGaWxlLCB0aGlzLm9mZnNldCwgdGhpcy5zb3VyY2VOYW1lKQogICAgICA6IHN1cGVyKHNvdXJjZUZpbGUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IHNob3J0VGV4dCA9PiAnJHtzdXBlci5zaG9ydFRleHR9OiRzb3VyY2VOYW1lJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7c3VwZXIudG9TdHJpbmcoKX06JHNvdXJjZU5hbWUnOwp9CgovLy8gQ29tcHV0ZSB0aGUgc291cmNlIG1hcCBuYW1lIGZvciBbZWxlbWVudF0uIElmIFtjYWxsU3RydWN0dXJlXSBpcyBub24tbnVsbAovLy8gaXQgaXMgdXNlZCB0byBuYW1lIHRoZSBwYXJhbWV0ZXIgc3R1YiBmb3IgW2VsZW1lbnRdLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNZXJnZSB0aGlzIHdpdGggYGNvbXB1dGVLZXJuZWxFbGVtZW50TmFtZUZvclNvdXJjZU1hcHNgCi8vIHdoZW4gdGhlIG9sZCBmcm9udGVuZCBpcyByZW1vdmVkLgpTdHJpbmcgY29tcHV0ZUVsZW1lbnROYW1lRm9yU291cmNlTWFwcyhFbnRpdHkgZWxlbWVudCwKICAgIFtDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmVdKSB7CiAgaWYgKGVsZW1lbnQgaXMgQ2xhc3NFbnRpdHkpIHsKICAgIHJldHVybiBlbGVtZW50Lm5hbWU7CiAgfSBlbHNlIGlmIChlbGVtZW50IGlzIE1lbWJlckVudGl0eSkgewogICAgU3RyaW5nIHN1ZmZpeCA9IGNvbXB1dGVTdHViU3VmZml4KGNhbGxTdHJ1Y3R1cmUpOwogICAgaWYgKGVsZW1lbnQgaXMgQ29uc3RydWN0b3JFbnRpdHkgfHwgZWxlbWVudCBpcyBDb25zdHJ1Y3RvckJvZHlFbnRpdHkpIHsKICAgICAgU3RyaW5nIGNsYXNzTmFtZSA9IGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MubmFtZTsKICAgICAgaWYgKGVsZW1lbnQubmFtZSA9PSAnJykgewogICAgICAgIHJldHVybiBjbGFzc05hbWU7CiAgICAgIH0KICAgICAgcmV0dXJuICckY2xhc3NOYW1lLiR7ZWxlbWVudC5uYW1lfSRzdWZmaXgnOwogICAgfSBlbHNlIGlmIChlbGVtZW50LmVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAgaWYgKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MuaXNDbG9zdXJlKSB7CiAgICAgICAgcmV0dXJuIGNvbXB1dGVFbGVtZW50TmFtZUZvclNvdXJjZU1hcHMoCiAgICAgICAgICAgIGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MsIGNhbGxTdHJ1Y3R1cmUpOwogICAgICB9CiAgICAgIHJldHVybiAnJHtlbGVtZW50LmVuY2xvc2luZ0NsYXNzLm5hbWV9LiR7ZWxlbWVudC5uYW1lfSRzdWZmaXgnOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICcke2VsZW1lbnQubmFtZX0kc3VmZml4JzsKICAgIH0KICB9CiAgLy8gVE9ETyhyZWRlbXB0aW9uKTogQ3JlYXRlIGVsZW1lbnQgbmFtZXMgZnJvbSBrZXJuZWwgbG9jYWxzIGFuZCBjbG9zdXJlcy4KICByZXR1cm4gZWxlbWVudC5uYW1lOwp9CgovLy8gQ29tcHV0ZSB0aGUgc3VmZml4IHVzZWQgZm9yIGEgcGFyYW1ldGVyIHN0dWIgZm9yIFtjYWxsU3RydWN0dXJlXS4KU3RyaW5nIGNvbXB1dGVTdHViU3VmZml4KENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogIGlmIChjYWxsU3RydWN0dXJlID09IG51bGwpIHJldHVybiAnJzsKICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgc2Iud3JpdGUocidbZnVuY3Rpb24tZW50cnkkJyk7CiAgc2Iud3JpdGUoY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRDb3VudCk7CiAgaWYgKGNhbGxTdHJ1Y3R1cmUubmFtZWRBcmd1bWVudHMuaXNOb3RFbXB0eSkgewogICAgc2Iud3JpdGUocickJyk7CiAgICBzYi53cml0ZShjYWxsU3RydWN0dXJlLmdldE9yZGVyZWROYW1lZEFyZ3VtZW50cygpLmpvaW4ocickJykpOwogIH0KICBzYi53cml0ZSgnXScpOwogIHJldHVybiBzYi50b1N0cmluZygpOwp9CgpjbGFzcyBOb1NvdXJjZUxvY2F0aW9uTWFya2VyIGV4dGVuZHMgU291cmNlTG9jYXRpb24gewogIGNvbnN0IE5vU291cmNlTG9jYXRpb25NYXJrZXIoKTsKCiAgQG92ZXJyaWRlCiAgVXJpIGdldCBzb3VyY2VVcmkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBzb3VyY2VOYW1lID0+IG51bGw7CgogIEBvdmVycmlkZQogIGludCBnZXQgY29sdW1uID0+IG51bGw7CgogIEBvdmVycmlkZQogIGludCBnZXQgbGluZSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IG9mZnNldCA9PiBudWxsOwoKICBTdHJpbmcgZ2V0IHNob3J0TmFtZSA9PiAnPG5vLWxvY2F0aW9uPic7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICc8bm8tbG9jYXRpb24+JzsKfQoKLy8vIEluZm9ybWF0aW9uIHRyYWNrZWQgYWJvdXQgaW5saW5lZCBmcmFtZXMuCi8vLwovLy8gRGFydDJqcyBhZGRzIGFuIGV4dGVuc2lvbiB0byBzb3VyY2UtbWFwIGZpbGVzIHRvIHRyYWNrIHdoZXJlIGNhbGxzIGFyZQovLy8gaW5saW5lZC4gVGhpcyBpbmZvcm1hdGlvbiBpcyB1c2VkIHRvIGltcHJvdmUgdGhlIHByZWNpc2lvbiBvZiB0b29scyB0aGF0Ci8vLyBkZW9iZnVzY2F0ZSBwcm9kdWN0aW9uIHN0YWNrIHRyYWNlcy4KY2xhc3MgRnJhbWVFbnRyeSB7CiAgLy8vIEZvciBwdXNoIG9wZXJhdGlvbnMsIHRoZSBsb2NhdGlvbiBvZiB0aGUgaW5saW5pbmcgY2FsbCwgb3RoZXJ3aXNlIG51bGwuCiAgZmluYWwgU291cmNlTG9jYXRpb24gcHVzaExvY2F0aW9uOwoKICAvLy8gRm9yIHB1c2ggb3BlcmF0aW9ucywgdGhlIGlubGluZWQgbWV0aG9kIG5hbWUsIG90aGVyd2lzZSBudWxsLgogIGZpbmFsIFN0cmluZyBpbmxpbmVkTWV0aG9kTmFtZTsKCiAgLy8vIFdoZXRoZXIgYSBwb3AgaXMgdGhlIGxhc3QgcG9wIHRoYXQgbWFrZXMgdGhlIGlubGluaW5nIHN0YWNrIGVtcHR5LgogIGZpbmFsIGJvb2wgaXNFbXB0eVBvcDsKCiAgRnJhbWVFbnRyeS5wdXNoKHRoaXMucHVzaExvY2F0aW9uLCB0aGlzLmlubGluZWRNZXRob2ROYW1lKQogICAgICA6IGlzRW1wdHlQb3AgPSBmYWxzZTsKCiAgRnJhbWVFbnRyeS5wb3AodGhpcy5pc0VtcHR5UG9wKQogICAgICA6IHB1c2hMb2NhdGlvbiA9IG51bGwsCiAgICAgICAgaW5saW5lZE1ldGhvZE5hbWUgPSBudWxsOwoKICBib29sIGdldCBpc1B1c2ggPT4gcHVzaExvY2F0aW9uICE9IG51bGw7CiAgYm9vbCBnZXQgaXNQb3AgPT4gcHVzaExvY2F0aW9uID09IG51bGw7Cn0KgfoATk48ASQBKBkkPS4qGyQBTR9LHQFDMSUTLCkNKUMGBAEfPCUYOhgNGE8/BgQBHQFELAFDBj8sAUIqATksASwyAUQYAgEtBElNRhUtAS0rASsiAT4BPxdOPTQVQQQBKBUpGTFJKRMEAQxPAgFIIiUBODQnKwQBQTcBLRcCATIhJAFQESdHDAFITQFRH00MATsOOAFQHzcBOjcBSFEBODUBQTQBRjQBOUcBQzMBTTQBPDYBPTcBQTsBTCU4ATk2AUM2AUYuAUEuAUo8AUlEAU8+AU0+AU49AVE5AUs2AVA5AUc3AUY2AUQ0AUU2AT4zAT4zAUQ3AUI7AUM8AUU1AgEhIC8BGgFDFQFNEgEvEAE/EgE9GQFALiITKS0NJhkoJSMlLxcnOAYEAU4iGDsYDRgXLywqLDMVBgQBDBUlHyIEAQwcLSYoIigEAU4BDDsCATQMFwEMFAEMEgEMFAEMGwEYTQIBIT8gGQEtDCUSLTg/BAFMAUQvAQwoAQwSAQxIAQxMAQwZAQxMAQw3AgE8DBQMGwFMGwEMPAEMOgIBTjlQJTclIBkoNkw2IBoIMjEuMDQIRg0nBgRNFwIBRjgoKCEzMRRDBBEYAgE2IgEMHQEMIQEMGgEMGAEMGgErAQwoAgEuBEtNKRNOJQFEIgFJGQE9HAEiHSIBKyoCAS9wYWNrYWdlOmNvbXBpbGVyL3NyYy9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydDVzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL2JhY2tlbmQuZGFydKnLLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5iYWNrZW5kOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL2NvZGVnZW4uZGFydCc7CmltcG9ydCAnLi4vZGVmZXJyZWRfbG9hZC5kYXJ0JyBzaG93IERlZmVycmVkTG9hZFRhc2s7CmltcG9ydCAnLi4vZHVtcF9pbmZvLmRhcnQnIHNob3cgRHVtcEluZm9UYXNrOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VucXVldWUuZGFydCcgc2hvdyBSZXNvbHV0aW9uRW5xdWV1ZXI7CmltcG9ydCAnLi4vZnJvbnRlbmRfc3RyYXRlZ3kuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vdHJhY2VyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0JwogICAgc2hvdyBJbXBhY3RTdHJhdGVneSwgSW1wYWN0VXNlQ2FzZSwgV29ybGRJbXBhY3QsIFdvcmxkSW1wYWN0VmlzaXRvcjsKaW1wb3J0ICdhbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICdjaGVja2VkX21vZGVfaGVscGVycy5kYXJ0JzsKaW1wb3J0ICduYW1lci5kYXJ0JzsKaW1wb3J0ICdydW50aW1lX3R5cGVzLmRhcnQnOwppbXBvcnQgJ3J1bnRpbWVfdHlwZXNfY29kZWdlbi5kYXJ0JzsKaW1wb3J0ICdydW50aW1lX3R5cGVzX25ldy5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIEZ1bmN0aW9uQ29tcGlsZXIgewogIHZvaWQgaW5pdGlhbGl6ZSgKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywgQ29kZWdlbklucHV0cyBjb2RlZ2VuKTsKCiAgLy8vIEdlbmVyYXRlcyBKYXZhU2NyaXB0IGNvZGUgZm9yIFttZW1iZXJdLgogIENvZGVnZW5SZXN1bHQgY29tcGlsZShNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgSXRlcmFibGUgZ2V0IHRhc2tzOwp9CgovKgogKiBJbnZhcmlhbnRzOgogKiAgIGNhbklubGluZShmdW5jdGlvbikgaW1wbGllcyBjYW5JbmxpbmUoZnVuY3Rpb24sIGluc2lkZUxvb3A6dHJ1ZSkKICogICAhY2FuSW5saW5lKGZ1bmN0aW9uLCBpbnNpZGVMb29wOiB0cnVlKSBpbXBsaWVzICFjYW5JbmxpbmUoZnVuY3Rpb24pCiAqLwpjbGFzcyBGdW5jdGlvbklubGluZUNhY2hlIHsKICBzdGF0aWMgY29uc3QgaW50IF91bmtub3duID0gLTE7CiAgc3RhdGljIGNvbnN0IGludCBfbXVzdE5vdElubGluZSA9IDA7CiAgLy8gTWF5LWlubGluZS1pbi1sb29wIG1lYW5zIHRoYXQgdGhlIGZ1bmN0aW9uIG1heSBub3QgYmUgaW5saW5lZCBvdXRzaWRlIGxvb3BzCiAgLy8gYnV0IG1heSBiZSBpbmxpbmVkIGluIGEgbG9vcC4KICBzdGF0aWMgY29uc3QgaW50IF9tYXlJbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZSA9IDE7CiAgLy8gVGhlIGZ1bmN0aW9uIGNhbiBiZSBpbmxpbmVkIGluIGEgbG9vcCwgYnV0IG5vdCBvdXRzaWRlLgogIHN0YXRpYyBjb25zdCBpbnQgX2NhbklubGluZUluTG9vcE11c3ROb3RPdXRzaWRlID0gMjsKICAvLyBNYXktaW5saW5lIG1lYW5zIHRoYXQgd2Uga25vdyB0aGF0IGl0IGNhbiBiZSBpbmxpbmVkIGluc2lkZSBhIGxvb3AsIGJ1dAogIC8vIGRvbid0IGtub3cgYWJvdXQgdGhlIGdlbmVyYWwgY2FzZSB5ZXQuCiAgc3RhdGljIGNvbnN0IGludCBfY2FuSW5saW5lSW5Mb29wTWF5SW5saW5lT3V0c2lkZSA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBfY2FuSW5saW5lID0gNDsKCiAgZmluYWwgTWFwPEZ1bmN0aW9uRW50aXR5LCBpbnQ+IF9jYWNoZWREZWNpc2lvbnMgPQogICAgICBuZXcgTWFwPEZ1bmN0aW9uRW50aXR5LCBpbnQ+KCk7CgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gX25vSW5saW5lRnVuY3Rpb25zID0gbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IF90cnlJbmxpbmVGdW5jdGlvbnMgPSBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwoKICBGdW5jdGlvbklubGluZUNhY2hlKEFubm90YXRpb25zRGF0YSBhbm5vdGF0aW9uc0RhdGEpIHsKICAgIGFubm90YXRpb25zRGF0YS5mb3JFYWNoTm9JbmxpbmUoKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICAgIG1hcmtBc05vSW5saW5lKGZ1bmN0aW9uKTsKICAgIH0pOwogICAgYW5ub3RhdGlvbnNEYXRhLmZvckVhY2hUcnlJbmxpbmUoKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICAgIG1hcmtBc1RyeUlubGluZShmdW5jdGlvbik7CiAgICB9KTsKICB9CgogIC8vLyBDaGVja3MgdGhhdCBbbWV0aG9kXSBpcyB0aGUgY2Fub25pY2FsIHJlcHJlc2VudGF0aXZlIGZvciB0aGlzIG1ldGhvZC4KICAvLy8KICAvLy8gRm9yIGEgW01ldGhvZEVsZW1lbnRdIHRoaXMgbWVhbnMgaXQgbXVzdCBiZSB0aGUgZGVjbGFyYXRpb24gZWxlbWVudC4KICBib29sIGNoZWNrRnVuY3Rpb24oRnVuY3Rpb25FbnRpdHkgbWV0aG9kKSB7CiAgICByZXR1cm4gJyRtZXRob2QnLnN0YXJ0c1dpdGgoanNFbGVtZW50UHJlZml4KTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBjdXJyZW50IGNhY2hlIGRlY2lzaW9uLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIHRlc3RpbmcuCiAgaW50IGdldEN1cnJlbnRDYWNoZURlY2lzaW9uRm9yVGVzdGluZyhGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoY2hlY2tGdW5jdGlvbihlbGVtZW50KSwgZmFpbGVkQXQoZWxlbWVudCkpOwogICAgcmV0dXJuIF9jYWNoZWREZWNpc2lvbnNbZWxlbWVudF07CiAgfQoKICAvLyBSZXR1cm5zIGB0cnVlYC9gZmFsc2VgIGlmIHdlIGhhdmUgYSBjYWNoZWQgZGVjaXNpb24uCiAgLy8gUmV0dXJucyBgbnVsbGAgb3RoZXJ3aXNlLgogIGJvb2wgY2FuSW5saW5lKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIHtib29sIGluc2lkZUxvb3B9KSB7CiAgICBhc3NlcnQoY2hlY2tGdW5jdGlvbihlbGVtZW50KSwgZmFpbGVkQXQoZWxlbWVudCkpOwogICAgaW50IGRlY2lzaW9uID0gX2NhY2hlZERlY2lzaW9uc1tlbGVtZW50XTsKCiAgICBpZiAoZGVjaXNpb24gPT0gbnVsbCkgewogICAgICAvLyBUT0RPKHNyYSk6IEhhdmUgYW5ub3RhdGlvbnMgZm9yIG11c3RJbmxpbmUgLyBub0lubGluZSBmb3IgY29uc3RydWN0b3IKICAgICAgLy8gYm9kaWVzLiAoVGhlcmUgdXNlZCB0byBiZSBzb21lIGxvZ2ljIGhlcmUgdG8gaGF2ZSBjb25zdHJ1Y3RvciBib2RpZXMsCiAgICAgIC8vIGluaGVyaXQgdGhlIHNldHRpbmdzIGZyb20gYW5ub3RhdGlvbnMgb24gdGhlIGdlbmVyYXRpdmUKICAgICAgLy8gY29uc3RydWN0b3IuIFRoaXMgd2FzIGNvbmZsYXRlZCB3aXRoIHRoZSBoZXVyaXN0aWMgZGVjaXNpb25zLCBsZWFkaW5nCiAgICAgIC8vIHRvIGxhY2sgb2YgaW5saW5pbmcgd2hlcmUgaXQgd2FzIGJlbmVmaWNpYWwuKQogICAgICBkZWNpc2lvbiA9IF91bmtub3duOwogICAgfQoKICAgIGlmIChpbnNpZGVMb29wKSB7CiAgICAgIHN3aXRjaCAoZGVjaXNpb24pIHsKICAgICAgICBjYXNlIF9tdXN0Tm90SW5saW5lOgogICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBjYXNlIF91bmtub3duOgogICAgICAgIGNhc2UgX21heUlubGluZUluTG9vcE11c3ROb3RPdXRzaWRlOgogICAgICAgICAgLy8gV2Uga25vdyB3ZSBjYW4ndCBpbmxpbmUgb3V0c2lkZSBhIGxvb3AsIGJ1dCBkb24ndCBrbm93IGZvciB0aGUKICAgICAgICAgIC8vIGxvb3AgY2FzZS4gUmV0dXJuIGBudWxsYCB0byBpbmRpY2F0ZSB0aGF0IHdlIGRvbid0IGtub3cgeWV0LgogICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIGNhc2UgX2NhbklubGluZUluTG9vcE11c3ROb3RPdXRzaWRlOgogICAgICAgIGNhc2UgX2NhbklubGluZUluTG9vcE1heUlubGluZU91dHNpZGU6CiAgICAgICAgY2FzZSBfY2FuSW5saW5lOgogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHN3aXRjaCAoZGVjaXNpb24pIHsKICAgICAgICBjYXNlIF9tdXN0Tm90SW5saW5lOgogICAgICAgIGNhc2UgX21heUlubGluZUluTG9vcE11c3ROb3RPdXRzaWRlOgogICAgICAgIGNhc2UgX2NhbklubGluZUluTG9vcE11c3ROb3RPdXRzaWRlOgogICAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgICBjYXNlIF91bmtub3duOgogICAgICAgIGNhc2UgX2NhbklubGluZUluTG9vcE1heUlubGluZU91dHNpZGU6CiAgICAgICAgICAvLyBXZSBrbm93IHdlIGNhbiBpbmxpbmUgaW5zaWRlIGEgbG9vcCwgYnV0IGRvbid0IGtub3cgZm9yIHRoZQogICAgICAgICAgLy8gbm9uLWxvb3AgY2FzZS4gUmV0dXJuIGBudWxsYCB0byBpbmRpY2F0ZSB0aGF0IHdlIGRvbid0IGtub3cgeWV0LgogICAgICAgICAgcmV0dXJuIG51bGw7CgogICAgICAgIGNhc2UgX2NhbklubGluZToKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CgogICAgLy8gUXVpZXQgc3RhdGljIGNoZWNrZXIuCiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgbWFya0FzSW5saW5hYmxlKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIHtib29sIGluc2lkZUxvb3B9KSB7CiAgICBhc3NlcnQoY2hlY2tGdW5jdGlvbihlbGVtZW50KSwgZmFpbGVkQXQoZWxlbWVudCkpOwogICAgaW50IG9sZERlY2lzaW9uID0gX2NhY2hlZERlY2lzaW9uc1tlbGVtZW50XTsKCiAgICBpZiAob2xkRGVjaXNpb24gPT0gbnVsbCkgewogICAgICBvbGREZWNpc2lvbiA9IF91bmtub3duOwogICAgfQoKICAgIGlmIChpbnNpZGVMb29wKSB7CiAgICAgIHN3aXRjaCAob2xkRGVjaXNpb24pIHsKICAgICAgICBjYXNlIF9tdXN0Tm90SW5saW5lOgogICAgICAgICAgdGhyb3cgZmFpbGVkQXQoCiAgICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgICAiQ2FuJ3QgbWFyayAkZWxlbWVudCBhcyBub24taW5saW5hYmxlIGFuZCBpbmxpbmFibGUgYXQgdGhlICIKICAgICAgICAgICAgICAic2FtZSB0aW1lLiIpOwoKICAgICAgICBjYXNlIF91bmtub3duOgogICAgICAgICAgLy8gV2Uga25vdyB0aGF0IGl0IGNhbiBiZSBpbmxpbmVkIGluIGEgbG9vcCwgYnV0IGRvbid0IGtub3cgYWJvdXQgdGhlCiAgICAgICAgICAvLyBub24tbG9vcCBjYXNlIHlldC4KICAgICAgICAgIF9jYWNoZWREZWNpc2lvbnNbZWxlbWVudF0gPSBfY2FuSW5saW5lSW5Mb29wTWF5SW5saW5lT3V0c2lkZTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9tYXlJbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZToKICAgICAgICAgIF9jYWNoZWREZWNpc2lvbnNbZWxlbWVudF0gPSBfY2FuSW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGU7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfY2FuSW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGU6CiAgICAgICAgY2FzZSBfY2FuSW5saW5lSW5Mb29wTWF5SW5saW5lT3V0c2lkZToKICAgICAgICBjYXNlIF9jYW5JbmxpbmU6CiAgICAgICAgICAvLyBEbyBub3RoaW5nLgogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHN3aXRjaCAob2xkRGVjaXNpb24pIHsKICAgICAgICBjYXNlIF9tdXN0Tm90SW5saW5lOgogICAgICAgIGNhc2UgX21heUlubGluZUluTG9vcE11c3ROb3RPdXRzaWRlOgogICAgICAgIGNhc2UgX2NhbklubGluZUluTG9vcE11c3ROb3RPdXRzaWRlOgogICAgICAgICAgdGhyb3cgZmFpbGVkQXQoCiAgICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgICAiQ2FuJ3QgbWFyayAkZWxlbWVudCBhcyBub24taW5saW5hYmxlIGFuZCBpbmxpbmFibGUgYXQgdGhlICIKICAgICAgICAgICAgICAic2FtZSB0aW1lLiIpOwoKICAgICAgICBjYXNlIF91bmtub3duOgogICAgICAgIGNhc2UgX2NhbklubGluZUluTG9vcE1heUlubGluZU91dHNpZGU6CiAgICAgICAgICBfY2FjaGVkRGVjaXNpb25zW2VsZW1lbnRdID0gX2NhbklubGluZTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9jYW5JbmxpbmU6CiAgICAgICAgICAvLyBEbyBub3RoaW5nLgogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgbWFya0FzTm9uSW5saW5hYmxlKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIHtib29sIGluc2lkZUxvb3A6IHRydWV9KSB7CiAgICBhc3NlcnQoY2hlY2tGdW5jdGlvbihlbGVtZW50KSwgZmFpbGVkQXQoZWxlbWVudCkpOwogICAgaW50IG9sZERlY2lzaW9uID0gX2NhY2hlZERlY2lzaW9uc1tlbGVtZW50XTsKCiAgICBpZiAob2xkRGVjaXNpb24gPT0gbnVsbCkgewogICAgICBvbGREZWNpc2lvbiA9IF91bmtub3duOwogICAgfQoKICAgIGlmIChpbnNpZGVMb29wKSB7CiAgICAgIHN3aXRjaCAob2xkRGVjaXNpb24pIHsKICAgICAgICBjYXNlIF9jYW5JbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZToKICAgICAgICBjYXNlIF9jYW5JbmxpbmVJbkxvb3BNYXlJbmxpbmVPdXRzaWRlOgogICAgICAgIGNhc2UgX2NhbklubGluZToKICAgICAgICAgIHRocm93IGZhaWxlZEF0KAogICAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICAgIkNhbid0IG1hcmsgJGVsZW1lbnQgYXMgbm9uLWlubGluYWJsZSBhbmQgaW5saW5hYmxlIGF0IHRoZSAiCiAgICAgICAgICAgICAgInNhbWUgdGltZS4iKTsKCiAgICAgICAgY2FzZSBfbWF5SW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGU6CiAgICAgICAgY2FzZSBfdW5rbm93bjoKICAgICAgICAgIF9jYWNoZWREZWNpc2lvbnNbZWxlbWVudF0gPSBfbXVzdE5vdElubGluZTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9tdXN0Tm90SW5saW5lOgogICAgICAgICAgLy8gRG8gbm90aGluZy4KICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBzd2l0Y2ggKG9sZERlY2lzaW9uKSB7CiAgICAgICAgY2FzZSBfY2FuSW5saW5lOgogICAgICAgICAgdGhyb3cgZmFpbGVkQXQoCiAgICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgICAiQ2FuJ3QgbWFyayAkZWxlbWVudCBhcyBub24taW5saW5hYmxlIGFuZCBpbmxpbmFibGUgYXQgdGhlICIKICAgICAgICAgICAgICAic2FtZSB0aW1lLiIpOwoKICAgICAgICBjYXNlIF91bmtub3duOgogICAgICAgICAgLy8gV2UgY2FuJ3QgaW5saW5lIG91dHNpZGUgYSBsb29wLCBidXQgd2UgbWlnaHQgc3RpbGwgYmUgYWxsb3dlZCB0byBkbwogICAgICAgICAgLy8gc28gb3V0c2lkZS4KICAgICAgICAgIF9jYWNoZWREZWNpc2lvbnNbZWxlbWVudF0gPSBfbWF5SW5saW5lSW5Mb29wTXVzdE5vdE91dHNpZGU7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfY2FuSW5saW5lSW5Mb29wTWF5SW5saW5lT3V0c2lkZToKICAgICAgICAgIC8vIFdlIGFscmVhZHkga25ldyB0aGF0IHRoZSBmdW5jdGlvbiBjb3VsZCBiZSBpbmxpbmVkIGluc2lkZSBhIGxvb3AsCiAgICAgICAgICAvLyBidXQgZGlkbid0IGhhdmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIG5vbi1sb29wIGNhc2UuIE5vdyB3ZSBrbm93CiAgICAgICAgICAvLyB0aGF0IGl0IGNhbid0IGJlIGlubGluZWQgb3V0c2lkZSBhIGxvb3AuCiAgICAgICAgICBfY2FjaGVkRGVjaXNpb25zW2VsZW1lbnRdID0gX2NhbklubGluZUluTG9vcE11c3ROb3RPdXRzaWRlOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX21heUlubGluZUluTG9vcE11c3ROb3RPdXRzaWRlOgogICAgICAgIGNhc2UgX2NhbklubGluZUluTG9vcE11c3ROb3RPdXRzaWRlOgogICAgICAgIGNhc2UgX211c3ROb3RJbmxpbmU6CiAgICAgICAgICAvLyBEbyBub3RoaW5nLgogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgbWFya0FzTm9JbmxpbmUoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGNoZWNrRnVuY3Rpb24oZWxlbWVudCksIGZhaWxlZEF0KGVsZW1lbnQpKTsKICAgIF9ub0lubGluZUZ1bmN0aW9ucy5hZGQoZWxlbWVudCk7CiAgfQoKICBib29sIG1hcmtlZEFzTm9JbmxpbmUoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGNoZWNrRnVuY3Rpb24oZWxlbWVudCksIGZhaWxlZEF0KGVsZW1lbnQpKTsKICAgIHJldHVybiBfbm9JbmxpbmVGdW5jdGlvbnMuY29udGFpbnMoZWxlbWVudCk7CiAgfQoKICB2b2lkIG1hcmtBc1RyeUlubGluZShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoY2hlY2tGdW5jdGlvbihlbGVtZW50KSwgZmFpbGVkQXQoZWxlbWVudCkpOwogICAgX3RyeUlubGluZUZ1bmN0aW9ucy5hZGQoZWxlbWVudCk7CiAgfQoKICBib29sIG1hcmtlZEFzVHJ5SW5saW5lKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChjaGVja0Z1bmN0aW9uKGVsZW1lbnQpLCBmYWlsZWRBdChlbGVtZW50KSk7CiAgICByZXR1cm4gX3RyeUlubGluZUZ1bmN0aW9ucy5jb250YWlucyhlbGVtZW50KTsKICB9Cn0KCmNsYXNzIEphdmFTY3JpcHRJbXBhY3RTdHJhdGVneSBleHRlbmRzIEltcGFjdFN0cmF0ZWd5IHsKICBmaW5hbCBJbXBhY3RDYWNoZURlbGV0ZXIgaW1wYWN0Q2FjaGVEZWxldGVyOwogIGZpbmFsIER1bXBJbmZvVGFzayBkdW1wSW5mb1Rhc2s7CiAgZmluYWwgYm9vbCBzdXBwb3J0RGVmZXJyZWRMb2FkOwogIGZpbmFsIGJvb2wgc3VwcG9ydER1bXBJbmZvOwoKICBKYXZhU2NyaXB0SW1wYWN0U3RyYXRlZ3kodGhpcy5pbXBhY3RDYWNoZURlbGV0ZXIsIHRoaXMuZHVtcEluZm9UYXNrLAogICAgICB7dGhpcy5zdXBwb3J0RGVmZXJyZWRMb2FkLCB0aGlzLnN1cHBvcnREdW1wSW5mb30pOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW1wYWN0KHZhciBpbXBhY3RTb3VyY2UsIFdvcmxkSW1wYWN0IGltcGFjdCwKICAgICAgV29ybGRJbXBhY3RWaXNpdG9yIHZpc2l0b3IsIEltcGFjdFVzZUNhc2UgaW1wYWN0VXNlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDb21wdXRlIHRoZSBhcHBsaWNhdGlvbiBzdHJhdGVneSBvbmNlIGZvciBlYWNoIHVzZS4KICAgIGlmIChpbXBhY3RVc2UgPT0gUmVzb2x1dGlvbkVucXVldWVyLklNUEFDVF9VU0UpIHsKICAgICAgaWYgKHN1cHBvcnREZWZlcnJlZExvYWQpIHsKICAgICAgICBpbXBhY3QuYXBwbHkodmlzaXRvcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW1wYWN0LmFwcGx5KHZpc2l0b3IpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGltcGFjdFVzZSA9PSBEZWZlcnJlZExvYWRUYXNrLklNUEFDVF9VU0UpIHsKICAgICAgaW1wYWN0LmFwcGx5KHZpc2l0b3IpOwogICAgICAvLyBJbXBhY3RzIGFyZSB1bmNhY2hlZCBnbG9iYWxseSBpbiBbb25JbXBhY3RVc2VkXS4KICAgIH0gZWxzZSBpZiAoaW1wYWN0VXNlID09IER1bXBJbmZvVGFzay5JTVBBQ1RfVVNFKSB7CiAgICAgIGltcGFjdC5hcHBseSh2aXNpdG9yKTsKICAgICAgZHVtcEluZm9UYXNrLnVucmVnaXN0ZXJJbXBhY3QoaW1wYWN0U291cmNlKTsKICAgIH0gZWxzZSB7CiAgICAgIGltcGFjdC5hcHBseSh2aXNpdG9yKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgb25JbXBhY3RVc2VkKEltcGFjdFVzZUNhc2UgaW1wYWN0VXNlKSB7CiAgICBpZiAoaW1wYWN0VXNlID09IERlZmVycmVkTG9hZFRhc2suSU1QQUNUX1VTRSkgewogICAgICBpbXBhY3RDYWNoZURlbGV0ZXIuZW1wdHlDYWNoZSgpOwogICAgfQogIH0KfQoKLy8vIEludGVyZmFjZSBmb3IgcmVzb3VyY2VzIG9ubHkgdXNlZCBkdXJpbmcgY29kZSBnZW5lcmF0aW9uLgphYnN0cmFjdCBjbGFzcyBDb2RlZ2VuSW5wdXRzIHsKICBDaGVja2VkTW9kZUhlbHBlcnMgZ2V0IGNoZWNrZWRNb2RlSGVscGVyczsKICBSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zIGdldCBydGlTdWJzdGl0dXRpb25zOwogIFJ1bnRpbWVUeXBlc0VuY29kZXIgZ2V0IHJ0aUVuY29kZXI7CiAgUmVjaXBlRW5jb2RlciBnZXQgcnRpUmVjaXBlRW5jb2RlcjsKICBUcmFjZXIgZ2V0IHRyYWNlcjsKICBSdW50aW1lVHlwZVRhZ3MgZ2V0IHJ0aVRhZ3M7CiAgRml4ZWROYW1lcyBnZXQgZml4ZWROYW1lczsKfQoKY2xhc3MgQ29kZWdlbklucHV0c0ltcGwgaW1wbGVtZW50cyBDb2RlZ2VuSW5wdXRzIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBDaGVja2VkTW9kZUhlbHBlcnMgY2hlY2tlZE1vZGVIZWxwZXJzID0gbmV3IENoZWNrZWRNb2RlSGVscGVycygpOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zIHJ0aVN1YnN0aXR1dGlvbnM7CgogIEBvdmVycmlkZQogIGZpbmFsIFJ1bnRpbWVUeXBlc0VuY29kZXIgcnRpRW5jb2RlcjsKCiAgQG92ZXJyaWRlCiAgZmluYWwgUmVjaXBlRW5jb2RlciBydGlSZWNpcGVFbmNvZGVyOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBUcmFjZXIgdHJhY2VyOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBSdW50aW1lVHlwZVRhZ3MgcnRpVGFnczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgRml4ZWROYW1lcyBmaXhlZE5hbWVzOwoKICBDb2RlZ2VuSW5wdXRzSW1wbCh0aGlzLnJ0aVN1YnN0aXR1dGlvbnMsIHRoaXMucnRpRW5jb2RlciwKICAgICAgdGhpcy5ydGlSZWNpcGVFbmNvZGVyLCB0aGlzLnRyYWNlciwgdGhpcy5ydGlUYWdzLCB0aGlzLmZpeGVkTmFtZXMpOwp9CoFWAE5OPAEcARkhNi4kMiQhJBknSRskFR0lIQEiE1EBLi4BFgIBAw9GSQQcIidRIzc9N00sOSMBNCYBTE0BOUAgCEEhCAQBTAZLLjIEAVBCNyYEATofPjcuARxPT0FPNxsGARYaHRgBFy1MShcBLS8ZFwgNGh0tLRgBFy9JThcBGRcIBgEdEQQBRDcxAR8eBgEWHR0aF0sdARdQIEgRAS1GEQEtLxkZEQgNHR0tLRoXSx0BFy8yEQEZGREIBgQBTTcxAR8eBgEWHS0vGRoXSx0BLRc2EQEdGREIDR0ZGhdLHQEXURlGEQEvT042RhEBLS0dGREIBgQBMDclBAEyNzEEATE3JgQBMzcyBAIBOC8jIh4BRzkBDDk9UDYhHw8fCDsdOjcdMw0dBgQBDC80JwYEAgE+Hy0yJiYVHx0CATMMSgEMNAEMKAEMKAEMFwEMIQEMHwE8SgIBLHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvYmFja2VuZC5kYXJ0O3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvaW5mZXJyZWRfZGF0YS5kYXJ0reovLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgUXVldWU7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NpZGVfZWZmZWN0cy5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICdhbm5vdGF0aW9ucy5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIEluZmVycmVkRGF0YSB7CiAgLy8vIERlc2VyaWFsaXplcyBhIFtJbmZlcnJlZERhdGFdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgSW5mZXJyZWREYXRhLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgYm9vbCBpc1RyaXZpYWwgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGlmIChpc1RyaXZpYWwpIHsKICAgICAgcmV0dXJuIG5ldyBUcml2aWFsSW5mZXJyZWREYXRhKCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IEluZmVycmVkRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgY2xvc2VkV29ybGQpOwogICAgfQogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbSW5mZXJyZWREYXRhXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luayk7CgogIC8vLyBSZXR1cm5zIHRoZSBzaWRlIGVmZmVjdHMgb2YgZXhlY3V0aW5nIFtlbGVtZW50XS4KICBTaWRlRWZmZWN0cyBnZXRTaWRlRWZmZWN0c09mRWxlbWVudChGdW5jdGlvbkVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIHNpZGUgZWZmZWN0cyBvZiBjYWxsaW5nIFtzZWxlY3Rvcl0gb24gdGhlIFtyZWNlaXZlcl0uCiAgU2lkZUVmZmVjdHMgZ2V0U2lkZUVmZmVjdHNPZlNlbGVjdG9yKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlcik7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaXMgZ3VhcmFudGVlZCBub3QgdG8gdGhyb3cgYW4gZXhjZXB0aW9uLgogIGJvb2wgZ2V0Q2Fubm90VGhyb3coRnVuY3Rpb25FbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaXMgY2FsbGVkIGluIGEgbG9vcC4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJcyB0aGlzICdwb3RlbnRpYWxseSBjYWxsZWQnIG9yICdrbm93biB0byBiZSBjYWxsZWQnPwogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENoYW5nZSBbTWVtYmVyRW50aXR5XSB0byBbRnVuY3Rpb25FbnRpdHldLgogIGJvb2wgaXNDYWxsZWRJbkxvb3AoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2VsZW1lbnRdIG1pZ2h0IGJlIHBhc3NlZCB0byBgRnVuY3Rpb24uYXBwbHlgLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IElzIHRoaXMgJ3Bhc3NlZCBpbnZvY2F0aW9uIHRhcmdldGAgb3IKICAvLyBgcGFzc2VkIGFzIGFyZ3VtZW50YD8KICBib29sIGdldE1pZ2h0QmVQYXNzZWRUb0FwcGx5KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwp9CgphYnN0cmFjdCBjbGFzcyBJbmZlcnJlZERhdGFCdWlsZGVyIHsKICAvLy8gUmVnaXN0ZXJzIHRoZSBleGVjdXRpbmcgb2YgW2VsZW1lbnRdIGFzIHdpdGhvdXQgc2lkZSBlZmZlY3RzLgogIHZvaWQgcmVnaXN0ZXJTaWRlRWZmZWN0c0ZyZWUoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBbU2lkZUVmZmVjdEJ1aWxkZXJdIGFzc29jaWF0ZWQgd2l0aCBbZWxlbWVudF0uCiAgU2lkZUVmZmVjdHNCdWlsZGVyIGdldFNpZGVFZmZlY3RzQnVpbGRlcihGdW5jdGlvbkVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgW2VsZW1lbnRdIG1pZ2h0IGJlIHBhc3NlZCB0byBgRnVuY3Rpb24uYXBwbHlgLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IElzIHRoaXMgJ3Bhc3NlZCBpbnZvY2F0aW9uIHRhcmdldGAgb3IKICAvLyBgcGFzc2VkIGFzIGFyZ3VtZW50YD8KICB2b2lkIHJlZ2lzdGVyTWlnaHRCZVBhc3NlZFRvQXBwbHkoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gbWlnaHQgYmUgcGFzc2VkIHRvIGBGdW5jdGlvbi5hcHBseWAgZ2l2ZW4gdGhlCiAgLy8vIGN1cnJlbnRseSBpbmZlcnJlZCBpbmZvcm1hdGlvbi4KICBib29sIGdldEN1cnJlbnRseUtub3duTWlnaHRCZVBhc3NlZFRvQXBwbHkoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZWdpc3RlcnMgdGhhdCBbZWxlbWVudF0gaXMgY2FsbGVkIGluIGEgbG9vcC4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJcyB0aGlzICdwb3RlbnRpYWxseSBjYWxsZWQnIG9yICdrbm93biB0byBiZSBjYWxsZWQnPwogIHZvaWQgYWRkRnVuY3Rpb25DYWxsZWRJbkxvb3AoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgW2VsZW1lbnRdIGlzIGd1YXJhbnRlZWQgbm90IHRvIHRocm93IGFuIGV4Y2VwdGlvbi4KICB2b2lkIHJlZ2lzdGVyQ2Fubm90VGhyb3coRnVuY3Rpb25FbnRpdHkgZWxlbWVudCk7CgogIC8vLyBDcmVhdGUgYSBbSW5mZXJyZWREYXRhXSBvYmplY3QgZm9yIHRoZSBjb2xsZWN0ZWQgaW5mb3JtYXRpb24uCiAgSW5mZXJyZWREYXRhIGNsb3NlKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCk7Cn0KCmNsYXNzIEluZmVycmVkRGF0YUltcGwgaW1wbGVtZW50cyBJbmZlcnJlZERhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSW5mZXJyZWREYXRhXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2luZmVycmVkLWRhdGEnOwoKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIFNldDxNZW1iZXJFbnRpdHk+IF9mdW5jdGlvbnNDYWxsZWRJbkxvb3A7CiAgZmluYWwgTWFwPEZ1bmN0aW9uRW50aXR5LCBTaWRlRWZmZWN0cz4gX3NpZGVFZmZlY3RzOwoKICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IF9zaWRlRWZmZWN0c0ZyZWVFbGVtZW50czsKCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBfZWxlbWVudHNUaGF0Q2Fubm90VGhyb3c7CgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gX2Z1bmN0aW9uc1RoYXRNaWdodEJlUGFzc2VkVG9BcHBseTsKCiAgSW5mZXJyZWREYXRhSW1wbCgKICAgICAgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuX2Z1bmN0aW9uc0NhbGxlZEluTG9vcCwKICAgICAgdGhpcy5fc2lkZUVmZmVjdHMsCiAgICAgIHRoaXMuX3NpZGVFZmZlY3RzRnJlZUVsZW1lbnRzLAogICAgICB0aGlzLl9lbGVtZW50c1RoYXRDYW5ub3RUaHJvdywKICAgICAgdGhpcy5fZnVuY3Rpb25zVGhhdE1pZ2h0QmVQYXNzZWRUb0FwcGx5KTsKCiAgZmFjdG9yeSBJbmZlcnJlZERhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBTZXQ8TWVtYmVyRW50aXR5PiBmdW5jdGlvbnNDYWxsZWRJbkxvb3AgPSBzb3VyY2UucmVhZE1lbWJlcnMoKS50b1NldCgpOwogICAgTWFwPEZ1bmN0aW9uRW50aXR5LCBTaWRlRWZmZWN0cz4gc2lkZUVmZmVjdHMgPSBzb3VyY2UucmVhZE1lbWJlck1hcCgKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4gbmV3IFNpZGVFZmZlY3RzLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpKTsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gc2lkZUVmZmVjdHNGcmVlRWxlbWVudHMgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyczxGdW5jdGlvbkVudGl0eT4oKS50b1NldCgpOwogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBlbGVtZW50c1RoYXRDYW5ub3RUaHJvdyA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJzPEZ1bmN0aW9uRW50aXR5PigpLnRvU2V0KCk7CiAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IGZ1bmN0aW9uc1RoYXRNaWdodEJlUGFzc2VkVG9BcHBseSA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJzPEZ1bmN0aW9uRW50aXR5PigpLnRvU2V0KCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEluZmVycmVkRGF0YUltcGwoCiAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgZnVuY3Rpb25zQ2FsbGVkSW5Mb29wLAogICAgICAgIHNpZGVFZmZlY3RzLAogICAgICAgIHNpZGVFZmZlY3RzRnJlZUVsZW1lbnRzLAogICAgICAgIGVsZW1lbnRzVGhhdENhbm5vdFRocm93LAogICAgICAgIGZ1bmN0aW9uc1RoYXRNaWdodEJlUGFzc2VkVG9BcHBseSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlQm9vbChmYWxzZSk7IC8vIElzIF9ub3RfIHRyaXZpYWwuCiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVycyhfZnVuY3Rpb25zQ2FsbGVkSW5Mb29wKTsKICAgIHNpbmsud3JpdGVNZW1iZXJNYXAoCiAgICAgICAgX3NpZGVFZmZlY3RzLAogICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyLCBTaWRlRWZmZWN0cyBzaWRlRWZmZWN0cykgPT4KICAgICAgICAgICAgc2lkZUVmZmVjdHMud3JpdGVUb0RhdGFTaW5rKHNpbmspKTsKICAgIHNpbmsud3JpdGVNZW1iZXJzKF9zaWRlRWZmZWN0c0ZyZWVFbGVtZW50cyk7CiAgICBzaW5rLndyaXRlTWVtYmVycyhfZWxlbWVudHNUaGF0Q2Fubm90VGhyb3cpOwogICAgc2luay53cml0ZU1lbWJlcnMoX2Z1bmN0aW9uc1RoYXRNaWdodEJlUGFzc2VkVG9BcHBseSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU2lkZUVmZmVjdHMgZ2V0U2lkZUVmZmVjdHNPZlNlbGVjdG9yKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlcikgewogICAgLy8gV2UncmUgbm90IHRyYWNraW5nIHNpZGUgZWZmZWN0cyBvZiBjbG9zdXJlcy4KICAgIGlmIChzZWxlY3Rvci5pc0Nsb3N1cmVDYWxsIHx8CiAgICAgICAgX2Nsb3NlZFdvcmxkLmluY2x1ZGVzQ2xvc3VyZUNhbGwoc2VsZWN0b3IsIHJlY2VpdmVyKSkgewogICAgICByZXR1cm4gbmV3IFNpZGVFZmZlY3RzKCk7CiAgICB9CiAgICBTaWRlRWZmZWN0cyBzaWRlRWZmZWN0cyA9IG5ldyBTaWRlRWZmZWN0cy5lbXB0eSgpOwogICAgZm9yIChNZW1iZXJFbnRpdHkgZSBpbiBfY2xvc2VkV29ybGQubG9jYXRlTWVtYmVycyhzZWxlY3RvciwgcmVjZWl2ZXIpKSB7CiAgICAgIGlmIChlLmlzRmllbGQpIHsKICAgICAgICBpZiAoc2VsZWN0b3IuaXNHZXR0ZXIpIHsKICAgICAgICAgIGlmICghX2Nsb3NlZFdvcmxkLmZpZWxkTmV2ZXJDaGFuZ2VzKGUpKSB7CiAgICAgICAgICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZSgpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNTZXR0ZXIpIHsKICAgICAgICAgIHNpZGVFZmZlY3RzLnNldENoYW5nZXNJbnN0YW5jZVByb3BlcnR5KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFzc2VydChzZWxlY3Rvci5pc0NhbGwpOwogICAgICAgICAgc2lkZUVmZmVjdHMuc2V0QWxsU2lkZUVmZmVjdHMoKTsKICAgICAgICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPblNvbWV0aGluZygpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBzaWRlRWZmZWN0cy5hZGQoZ2V0U2lkZUVmZmVjdHNPZkVsZW1lbnQoZSkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc2lkZUVmZmVjdHM7CiAgfQoKICBAb3ZlcnJpZGUKICBTaWRlRWZmZWN0cyBnZXRTaWRlRWZmZWN0c09mRWxlbWVudChGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoX3NpZGVFZmZlY3RzICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIlNpZGUgZWZmZWN0cyBoYXZlIG5vdCBiZWVuIGNvbXB1dGVkIHlldC4iKSk7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDaGVjayB0aGF0IFtfbWFrZVNpZGVFZmZlY3RzXSBpcyBvbmx5IGNhbGxlZCBpZgogICAgLy8gdHlwZSBpbmZlcmVuY2UgaGFzIGJlZW4gZGlzYWJsZWQgKGV4cGxpY2l0bHkgb3IgYmVjYXVzZSBvZiBjb21waWxlIHRpbWUKICAgIC8vIGVycm9ycykuCiAgICByZXR1cm4gX3NpZGVFZmZlY3RzLnB1dElmQWJzZW50KGVsZW1lbnQsIF9tYWtlU2lkZUVmZmVjdHMpOwogIH0KCiAgc3RhdGljIFNpZGVFZmZlY3RzIF9tYWtlU2lkZUVmZmVjdHMoKSA9PiBuZXcgU2lkZUVmZmVjdHMoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NhbGxlZEluTG9vcChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIF9mdW5jdGlvbnNDYWxsZWRJbkxvb3AuY29udGFpbnMoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldENhbm5vdFRocm93KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBfZWxlbWVudHNUaGF0Q2Fubm90VGhyb3cuY29udGFpbnMoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldE1pZ2h0QmVQYXNzZWRUb0FwcGx5KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIC8vIFdlIGFzc3VtZSBhbGwgZnVuY3Rpb25zIHJlYWNoIEZ1bmN0aW9uLmFwcGx5IGlmIG5vIGZ1bmN0aW9ucyBhcmUKICAgIC8vIHJlZ2lzdGVyZWQgc28uICBXZSBnZXQgYW4gZW1wdHkgc2V0IGluIHR3byBjaXJjdW1zdGFuY2VzICgxKSBhIHRyaXZpYWwKICAgIC8vIHByb2dyYW0gYW5kICgyKSB3aGVuIGNvbXBpbGluZyB3aXRob3V0IHR5cGUgaW5mZXJlbmNlCiAgICAvLyAoaS5lLiAtLWRpc2FibGUtdHlwZS1pbmZlcmVuY2UpLiBSZXR1cm5pbmcgYHRydWVgIGhhcyBjb25zZXF1ZW5jZXMgKGV4dHJhCiAgICAvLyBtZXRhZGF0YSBmb3IgRnVuY3Rpb24uYXBwbHkpIG9ubHkgd2hlbiBGdW5jdGlvbi5hcHBseSBpcyBhbHNvIHBhcnQgb2YgdGhlCiAgICAvLyBwcm9ncmFtLiBJdCBpcyBhbiB1bnVzdWFsIHRyaXZpYWwgcHJvZ3JhbSB0aGF0IGluY2x1ZGVzIEZ1bmN0aW9uLmFwcGx5CiAgICAvLyBidXQgZG9lcyBub3QgY2FsbCBpdCBvbiBhIGZ1bmN0aW9uLgogICAgLy8KICAgIC8vIFRPRE8oc3JhKTogV2Ugc2hvdWxkIHJldmVyc2UgdGhlIHNlbnNlIG9mIHRoaXMgc2V0IGFuZCByZWdpc3RlciBmdW5jdGlvbnMKICAgIC8vIHRoYXQgd2UgaGF2ZSBwcm92ZW4gZG8gbm90IHJlYWNoIEZ1bmN0aW9uLmFwcGx5LgogICAgaWYgKF9mdW5jdGlvbnNUaGF0TWlnaHRCZVBhc3NlZFRvQXBwbHkuaXNFbXB0eSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gX2Z1bmN0aW9uc1RoYXRNaWdodEJlUGFzc2VkVG9BcHBseS5jb250YWlucyhlbGVtZW50KTsKICB9Cn0KCmNsYXNzIEluZmVycmVkRGF0YUJ1aWxkZXJJbXBsIGltcGxlbWVudHMgSW5mZXJyZWREYXRhQnVpbGRlciB7CiAgZmluYWwgU2V0PE1lbWJlckVudGl0eT4gX2Z1bmN0aW9uc0NhbGxlZEluTG9vcCA9IG5ldyBTZXQ8TWVtYmVyRW50aXR5PigpOwogIE1hcDxNZW1iZXJFbnRpdHksIFNpZGVFZmZlY3RzQnVpbGRlcj4gX3NpZGVFZmZlY3RzQnVpbGRlcnMgPQogICAgICA8TWVtYmVyRW50aXR5LCBTaWRlRWZmZWN0c0J1aWxkZXI+e307CiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBwcmVtYXR1cmVTaWRlRWZmZWN0QWNjZXNzZXMgPQogICAgICBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwoKICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IF9zaWRlRWZmZWN0c0ZyZWVFbGVtZW50cyA9CiAgICAgIG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gX2VsZW1lbnRzVGhhdENhbm5vdFRocm93ID0KICAgICAgbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBfZnVuY3Rpb25zVGhhdE1pZ2h0QmVQYXNzZWRUb0FwcGx5ID0KICAgICAgbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKCiAgSW5mZXJyZWREYXRhQnVpbGRlckltcGwoQW5ub3RhdGlvbnNEYXRhIGFubm90YXRpb25zRGF0YSkgewogICAgYW5ub3RhdGlvbnNEYXRhLmZvckVhY2hOb1Rocm93cyhyZWdpc3RlckNhbm5vdFRocm93KTsKICAgIGFubm90YXRpb25zRGF0YS5mb3JFYWNoTm9TaWRlRWZmZWN0cyhyZWdpc3RlclNpZGVFZmZlY3RzRnJlZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTaWRlRWZmZWN0c0J1aWxkZXIgZ2V0U2lkZUVmZmVjdHNCdWlsZGVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBfc2lkZUVmZmVjdHNCdWlsZGVyc1ttZW1iZXJdID8/PSBuZXcgU2lkZUVmZmVjdHNCdWlsZGVyKG1lbWJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU2lkZUVmZmVjdHNGcmVlKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIF9zaWRlRWZmZWN0c0ZyZWVFbGVtZW50cy5hZGQoZWxlbWVudCk7CiAgICBhc3NlcnQoIV9zaWRlRWZmZWN0c0J1aWxkZXJzLmNvbnRhaW5zS2V5KGVsZW1lbnQpKTsKICAgIF9zaWRlRWZmZWN0c0J1aWxkZXJzW2VsZW1lbnRdID0gbmV3IFNpZGVFZmZlY3RzQnVpbGRlci5mcmVlKGVsZW1lbnQpOwogIH0KCiAgLy8vIENvbXB1dGUgW1NpZGVFZmZlY3RzXSBmb3IgYWxsIHJlZ2lzdGVyZWQgW1NpZGVFZmZlY3RCdWlsZGVyXXMuCiAgQG92ZXJyaWRlCiAgSW5mZXJyZWREYXRhIGNsb3NlKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgYXNzZXJ0KF9zaWRlRWZmZWN0c0J1aWxkZXJzICE9IG51bGwsCiAgICAgICAgIkluZmVycmVkIGRhdGEgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZC4iKTsKICAgIE1hcDxGdW5jdGlvbkVudGl0eSwgU2lkZUVmZmVjdHM+IF9zaWRlRWZmZWN0cyA9CiAgICAgICAgPEZ1bmN0aW9uRW50aXR5LCBTaWRlRWZmZWN0cz57fTsKICAgIEl0ZXJhYmxlPFNpZGVFZmZlY3RzQnVpbGRlcj4gc2lkZUVmZmVjdHNCdWlsZGVycyA9CiAgICAgICAgX3NpZGVFZmZlY3RzQnVpbGRlcnMudmFsdWVzOwogICAgZW1wdHlXb3JrTGlzdChzaWRlRWZmZWN0c0J1aWxkZXJzKTsKICAgIGZvciAoU2lkZUVmZmVjdHNCdWlsZGVyIHNpZGVFZmZlY3RzQnVpbGRlciBpbiBzaWRlRWZmZWN0c0J1aWxkZXJzKSB7CiAgICAgIF9zaWRlRWZmZWN0c1tzaWRlRWZmZWN0c0J1aWxkZXIubWVtYmVyXSA9IHNpZGVFZmZlY3RzQnVpbGRlci5zaWRlRWZmZWN0czsKICAgIH0KICAgIF9zaWRlRWZmZWN0c0J1aWxkZXJzID0gbnVsbDsKCiAgICByZXR1cm4gbmV3IEluZmVycmVkRGF0YUltcGwoCiAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgX2Z1bmN0aW9uc0NhbGxlZEluTG9vcCwKICAgICAgICBfc2lkZUVmZmVjdHMsCiAgICAgICAgX3NpZGVFZmZlY3RzRnJlZUVsZW1lbnRzLAogICAgICAgIF9lbGVtZW50c1RoYXRDYW5ub3RUaHJvdywKICAgICAgICBfZnVuY3Rpb25zVGhhdE1pZ2h0QmVQYXNzZWRUb0FwcGx5KTsKICB9CgogIHN0YXRpYyB2b2lkIGVtcHR5V29ya0xpc3QoSXRlcmFibGU8U2lkZUVmZmVjdHNCdWlsZGVyPiBzaWRlRWZmZWN0c0J1aWxkZXJzKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBPcHRpbWl6ZSB0aGlzIGFsZ29yaXRobS4KICAgIFF1ZXVlPFNpZGVFZmZlY3RzQnVpbGRlcj4gcXVldWUgPSBuZXcgUXVldWU8U2lkZUVmZmVjdHNCdWlsZGVyPigpOwogICAgU2V0PFNpZGVFZmZlY3RzQnVpbGRlcj4gaW5RdWV1ZSA9IG5ldyBTZXQ8U2lkZUVmZmVjdHNCdWlsZGVyPigpOwoKICAgIGZvciAoU2lkZUVmZmVjdHNCdWlsZGVyIGJ1aWxkZXIgaW4gc2lkZUVmZmVjdHNCdWlsZGVycykgewogICAgICBxdWV1ZS5hZGRMYXN0KGJ1aWxkZXIpOwogICAgICBpblF1ZXVlLmFkZChidWlsZGVyKTsKICAgIH0KICAgIHdoaWxlIChxdWV1ZS5pc05vdEVtcHR5KSB7CiAgICAgIFNpZGVFZmZlY3RzQnVpbGRlciBzaWRlRWZmZWN0c0J1aWxkZXIgPSBxdWV1ZS5yZW1vdmVGaXJzdCgpOwogICAgICBpblF1ZXVlLnJlbW92ZShzaWRlRWZmZWN0c0J1aWxkZXIpOwogICAgICBmb3IgKFNpZGVFZmZlY3RzQnVpbGRlciBkZXBlbmRlbnQgaW4gc2lkZUVmZmVjdHNCdWlsZGVyLmRlcGVuZGluZykgewogICAgICAgIGlmIChkZXBlbmRlbnQuYWRkKHNpZGVFZmZlY3RzQnVpbGRlci5zaWRlRWZmZWN0cykpIHsKICAgICAgICAgIGlmIChpblF1ZXVlLmFkZChkZXBlbmRlbnQpKSB7CiAgICAgICAgICAgIHF1ZXVlLmFkZExhc3QoZGVwZW5kZW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkRnVuY3Rpb25DYWxsZWRJbkxvb3AoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIF9mdW5jdGlvbnNDYWxsZWRJbkxvb3AuYWRkKGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNhbm5vdFRocm93KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIF9lbGVtZW50c1RoYXRDYW5ub3RUaHJvdy5hZGQoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTWlnaHRCZVBhc3NlZFRvQXBwbHkoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgX2Z1bmN0aW9uc1RoYXRNaWdodEJlUGFzc2VkVG9BcHBseS5hZGQoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldEN1cnJlbnRseUtub3duTWlnaHRCZVBhc3NlZFRvQXBwbHkoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIF9mdW5jdGlvbnNUaGF0TWlnaHRCZVBhc3NlZFRvQXBwbHkuY29udGFpbnMoZWxlbWVudCk7CiAgfQp9CgpjbGFzcyBUcml2aWFsSW5mZXJyZWREYXRhIGltcGxlbWVudHMgSW5mZXJyZWREYXRhIHsKICBmaW5hbCBTaWRlRWZmZWN0cyBfYWxsU2lkZUVmZmVjdHMgPSBuZXcgU2lkZUVmZmVjdHMoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUJvb2wodHJ1ZSk7IC8vIElzIHRyaXZpYWwuCiAgfQoKICBAb3ZlcnJpZGUKICBTaWRlRWZmZWN0cyBnZXRTaWRlRWZmZWN0c09mRWxlbWVudChGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gX2FsbFNpZGVFZmZlY3RzOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXRNaWdodEJlUGFzc2VkVG9BcHBseShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGlzQ2FsbGVkSW5Mb29wKE1lbWJlckVudGl0eSBlbGVtZW50KSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldENhbm5vdFRocm93KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBTaWRlRWZmZWN0cyBnZXRTaWRlRWZmZWN0c09mU2VsZWN0b3IoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyKSB7CiAgICByZXR1cm4gX2FsbFNpZGVFZmZlY3RzOwogIH0KfQqBUABOTjwBJQEZJDEuJCgYGwEeOis1KBUoDUsGBAEwJwE3PwFIKDIBSy8BN1BFLQFHQBs4AgElRDgBQUMBREAbPQFQJkYBNFA2AUg0AUQwAgExRh0tASMyNwE2ATYBQAEUGSMZJSUwAS81F0xJTjI2MjY8NhUhFR8VISEsBAEMKDAVLxkWOjAxMTsTBAEMKDM0IkAgBjdNFyE0PQwoNBEjKy8KDzUIBhgEAQxAIUhMTxBABAE+AQwuNQQBDDA3BAEMOUhOPVFRTisHUThBQQQCAT9MPyw6IQE3IQE3IQFBIQE9OkMEAQxCTAQBDDkrOEoEAUUMMSk1NCk3JShJUAYhASEVIBYiIi0EAVA1R0UBPh4cBh9DKks9KCYMCggGBAEMNykEAQw1KwQBDD41BAEMR0EEAgE0OQEMKCkEAQxAHAQBDEABDDUBDDgBDCgzHAQCATJwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2luZmVycmVkX2RhdGEuZGFydDdzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19tb2RlbC9qc19zdHJhdGVneS5kYXJ0wABUWi8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfbW9kZWwuc3RyYXRlZ3k7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vYmFja2VuZF9zdHJhdGVneS5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL2NvZGVnZW4uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL3Rhc2tzLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi93b3JrLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzLCBFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vY29tcGlsZXIuZGFydCc7CmltcG9ydCAnLi4vZGVmZXJyZWRfbG9hZC5kYXJ0JyBoaWRlIFdvcmtJdGVtOwppbXBvcnQgJy4uL2R1bXBfaW5mby5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbnF1ZXVlLmRhcnQnOwppbXBvcnQgJy4uL2lvL2tlcm5lbF9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCcKICAgIHNob3cgS2VybmVsU291cmNlSW5mb3JtYXRpb25TdHJhdGVneTsKaW1wb3J0ICcuLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL3R5cGVfZ3JhcGhfaW5mZXJyZXIuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanMvanNfc291cmNlX21hcHBpbmcuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYmFja2VuZF9pbXBhY3QuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9jb2RlZ2VuX2xpc3RlbmVyLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvY3VzdG9tX2VsZW1lbnRzX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvZW5xdWV1ZXIuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbXBhY3RfdHJhbnNmb3JtZXIuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfY29kZWdlbi5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfbmV3LmRhcnQnCiAgICBzaG93IFJlY2lwZUVuY29kZXIsIFJlY2lwZUVuY29kZXJJbXBsOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIvY29kZV9lbWl0dGVyX3Rhc2suZGFydCcgc2hvdyBNb2R1bGFyRW1pdHRlcjsKaW1wb3J0ICcuLi9qc19lbWl0dGVyL2pzX2VtaXR0ZXIuZGFydCcgc2hvdyBDb2RlRW1pdHRlclRhc2s7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9zdHJhdGVneS5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvYmVoYXZpb3IuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2VucXVldWUuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vc3NhL2J1aWxkZXJfa2VybmVsLmRhcnQnOwppbXBvcnQgJy4uL3NzYS9ub2Rlcy5kYXJ0JzsKaW1wb3J0ICcuLi9zc2Evc3NhLmRhcnQnOwppbXBvcnQgJy4uL3NzYS90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi90cmFjZXIuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICdjbG9zdXJlLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRfbWFwX2ltcGwuZGFydCc7CmltcG9ydCAnanNfd29ybGQuZGFydCc7CmltcG9ydCAnanNfd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICdsb2NhbHMuZGFydCc7CgpjbGFzcyBKc0JhY2tlbmRTdHJhdGVneSBpbXBsZW1lbnRzIEJhY2tlbmRTdHJhdGVneSB7CiAgZmluYWwgQ29tcGlsZXIgX2NvbXBpbGVyOwogIEpzS2VybmVsVG9FbGVtZW50TWFwIF9lbGVtZW50TWFwOwoKICAvLy8gQ29kZWdlbiBzdXBwb3J0IGZvciBnZW5lcmF0aW5nIHRhYmxlIG9mIGludGVyY2VwdG9ycyBhbmQKICAvLy8gY29uc3RydWN0b3JzIGZvciBjdXN0b20gZWxlbWVudHMuCiAgQ3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMgX2N1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzOwoKICBOYXRpdmVDb2RlZ2VuRW5xdWV1ZXIgX25hdGl2ZUNvZGVnZW5FbnF1ZXVlcjsKCiAgTmFtZXIgX25hbWVyOwoKICBDb2RlZ2VuSW1wYWN0VHJhbnNmb3JtZXIgX2NvZGVnZW5JbXBhY3RUcmFuc2Zvcm1lcjsKCiAgQ29kZUVtaXR0ZXJUYXNrIF9lbWl0dGVyVGFzazsKCiAgUnVudGltZVR5cGVzQ2hlY2tzQnVpbGRlciBfcnRpQ2hlY2tzQnVpbGRlcjsKCiAgRnVuY3Rpb25Db21waWxlciBfZnVuY3Rpb25Db21waWxlcjsKCiAgU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSBzb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5OwoKICAvLy8gVGhlIGdlbmVyYXRlZCBjb2RlIGFzIGEganMgQVNUIGZvciBjb21waWxlZCBtZXRob2RzLgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIGpzLkV4cHJlc3Npb24+IGdlbmVyYXRlZENvZGUgPQogICAgICA8TWVtYmVyRW50aXR5LCBqcy5FeHByZXNzaW9uPnt9OwoKICBKc0JhY2tlbmRTdHJhdGVneSh0aGlzLl9jb21waWxlcikgewogICAgYm9vbCBnZW5lcmF0ZVNvdXJjZU1hcCA9IF9jb21waWxlci5vcHRpb25zLmdlbmVyYXRlU291cmNlTWFwOwogICAgaWYgKCFnZW5lcmF0ZVNvdXJjZU1hcCkgewogICAgICBzb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5ID0gY29uc3QgSmF2YVNjcmlwdFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3koKTsKICAgIH0gZWxzZSB7CiAgICAgIHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgPSBuZXcgS2VybmVsU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSh0aGlzKTsKICAgIH0KICAgIF9lbWl0dGVyVGFzayA9IG5ldyBDb2RlRW1pdHRlclRhc2soX2NvbXBpbGVyLCBnZW5lcmF0ZVNvdXJjZU1hcCk7CiAgICBfZnVuY3Rpb25Db21waWxlciA9IG5ldyBTc2FGdW5jdGlvbkNvbXBpbGVyKAogICAgICAgIF9jb21waWxlci5vcHRpb25zLAogICAgICAgIF9jb21waWxlci5yZXBvcnRlciwKICAgICAgICB0aGlzLAogICAgICAgIF9jb21waWxlci5tZWFzdXJlciwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5KTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8Q29tcGlsZXJUYXNrPiBnZXQgdGFza3MgewogICAgTGlzdDxDb21waWxlclRhc2s+IHJlc3VsdCA9IGZ1bmN0aW9uQ29tcGlsZXIudGFza3M7CiAgICByZXN1bHQuYWRkKGVtaXR0ZXJUYXNrKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkNvbXBpbGVyIGdldCBmdW5jdGlvbkNvbXBpbGVyID0+IF9mdW5jdGlvbkNvbXBpbGVyOwoKICBAb3ZlcnJpZGUKICBDb2RlRW1pdHRlclRhc2sgZ2V0IGVtaXR0ZXJUYXNrID0+IF9lbWl0dGVyVGFzazsKCiAgTmFtZXIgZ2V0IG5hbWVyRm9yVGVzdGluZyA9PiBfbmFtZXI7CgogIE5hdGl2ZUVucXVldWVyIGdldCBuYXRpdmVDb2RlZ2VuRW5xdWV1ZXIgPT4gX25hdGl2ZUNvZGVnZW5FbnF1ZXVlcjsKCiAgUnVudGltZVR5cGVzQ2hlY2tzQnVpbGRlciBnZXQgcnRpQ2hlY2tzQnVpbGRlckZvclRlc3RpbmcgPT4gX3J0aUNoZWNrc0J1aWxkZXI7CgogIE1hcDxNZW1iZXJFbnRpdHksIFdvcmxkSW1wYWN0PiBjb2RlZ2VuSW1wYWN0c0ZvclRlc3Rpbmc7CgogIFN0cmluZyBnZXRHZW5lcmF0ZWRDb2RlRm9yVGVzdGluZyhNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGpzLnByZXR0eVByaW50KGdlbmVyYXRlZENvZGVbZWxlbWVudF0sCiAgICAgICAgZW5hYmxlTWluaWZpY2F0aW9uOiBfY29tcGlsZXIub3B0aW9ucy5lbmFibGVNaW5pZmljYXRpb24pOwogIH0KCiAgQGRlcHJlY2F0ZWQKICBKc1RvRWxlbWVudE1hcCBnZXQgZWxlbWVudE1hcCB7CiAgICBhc3NlcnQoX2VsZW1lbnRNYXAgIT0gbnVsbCwKICAgICAgICAiSnNCYWNrZW5kU3RyYXRlZ3kuZWxlbWVudE1hcCBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXQuIik7CiAgICByZXR1cm4gX2VsZW1lbnRNYXA7CiAgfQoKICAvLy8gQ29kZWdlbiBzdXBwb3J0IGZvciBnZW5lcmF0aW5nIHRhYmxlIG9mIGludGVyY2VwdG9ycyBhbmQKICAvLy8gY29uc3RydWN0b3JzIGZvciBjdXN0b20gZWxlbWVudHMuCiAgQ3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMgZ2V0IGN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzIHsKICAgIGFzc2VydCgKICAgICAgICBfY3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICJDdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcyBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXQuIikpOwogICAgcmV0dXJuIF9jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpczsKICB9CgogIFJ1bnRpbWVUeXBlc0NoZWNrc0J1aWxkZXIgZ2V0IHJ0aUNoZWNrc0J1aWxkZXIgewogICAgYXNzZXJ0KAogICAgICAgIF9ydGlDaGVja3NCdWlsZGVyICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgICAiUnVudGltZVR5cGVzQ2hlY2tzQnVpbGRlciBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXQuIikpOwogICAgYXNzZXJ0KAogICAgICAgICFfcnRpQ2hlY2tzQnVpbGRlci5ydGlDaGVja3NCdWlsZGVyQ2xvc2VkLAogICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgIlJ1bnRpbWVUeXBlc0NoZWNrcyBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkLiIpKTsKICAgIHJldHVybiBfcnRpQ2hlY2tzQnVpbGRlcjsKICB9CgogIEBvdmVycmlkZQogIEpDbG9zZWRXb3JsZCBjcmVhdGVKQ2xvc2VkV29ybGQoCiAgICAgIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgT3V0cHV0VW5pdERhdGEgb3V0cHV0VW5pdERhdGEpIHsKICAgIEtlcm5lbEZyb250ZW5kU3RyYXRlZ3kgc3RyYXRlZ3kgPSBfY29tcGlsZXIuZnJvbnRlbmRTdHJhdGVneTsKICAgIF9lbGVtZW50TWFwID0gbmV3IEpzS2VybmVsVG9FbGVtZW50TWFwKAogICAgICAgIF9jb21waWxlci5yZXBvcnRlciwKICAgICAgICBfY29tcGlsZXIuZW52aXJvbm1lbnQsCiAgICAgICAgc3RyYXRlZ3kuZWxlbWVudE1hcCwKICAgICAgICBjbG9zZWRXb3JsZC5saXZlTWVtYmVyVXNhZ2UsCiAgICAgICAgY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhKTsKICAgIEdsb2JhbExvY2Fsc01hcCBfZ2xvYmFsTG9jYWxzTWFwID0gbmV3IEdsb2JhbExvY2Fsc01hcCgpOwogICAgQ2xvc3VyZURhdGFCdWlsZGVyIGNsb3N1cmVEYXRhQnVpbGRlciA9IG5ldyBDbG9zdXJlRGF0YUJ1aWxkZXIoCiAgICAgICAgX2VsZW1lbnRNYXAsIF9nbG9iYWxMb2NhbHNNYXAsIGNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YSk7CiAgICBKc0Nsb3NlZFdvcmxkQnVpbGRlciBjbG9zZWRXb3JsZEJ1aWxkZXIgPSBuZXcgSnNDbG9zZWRXb3JsZEJ1aWxkZXIoCiAgICAgICAgX2VsZW1lbnRNYXAsCiAgICAgICAgX2dsb2JhbExvY2Fsc01hcCwKICAgICAgICBjbG9zdXJlRGF0YUJ1aWxkZXIsCiAgICAgICAgX2NvbXBpbGVyLm9wdGlvbnMsCiAgICAgICAgX2NvbXBpbGVyLmFic3RyYWN0VmFsdWVTdHJhdGVneSk7CiAgICBKQ2xvc2VkV29ybGQgakNsb3NlZFdvcmxkID0gY2xvc2VkV29ybGRCdWlsZGVyLmNvbnZlcnRDbG9zZWRXb3JsZCgKICAgICAgICBjbG9zZWRXb3JsZCwgc3RyYXRlZ3kuY2xvc3VyZU1vZGVscywgb3V0cHV0VW5pdERhdGEpOwogICAgX2VsZW1lbnRNYXAubGF0ZU91dHB1dFVuaXREYXRhQnVpbGRlciA9CiAgICAgICAgbmV3IExhdGVPdXRwdXRVbml0RGF0YUJ1aWxkZXIoakNsb3NlZFdvcmxkLm91dHB1dFVuaXREYXRhKTsKICAgIHJldHVybiBqQ2xvc2VkV29ybGQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVySkNsb3NlZFdvcmxkKGNvdmFyaWFudCBKc0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBfZWxlbWVudE1hcCA9IGNsb3NlZFdvcmxkLmVsZW1lbnRNYXA7CiAgfQoKICBAb3ZlcnJpZGUKICBDb2RlZ2VuSW5wdXRzIG9uQ29kZWdlblN0YXJ0KAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cykgewogICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMuY2xvc2VkV29ybGQ7CiAgICBSdW50aW1lVHlwZVRhZ3MgcnRpVGFncyA9IGNvbnN0IFJ1bnRpbWVUeXBlVGFncygpOwogICAgRml4ZWROYW1lcyBmaXhlZE5hbWVzID0gX2NvbXBpbGVyLm9wdGlvbnMuZW5hYmxlTWluaWZpY2F0aW9uCiAgICAgICAgPyBjb25zdCBNaW5pZmllZEZpeGVkTmFtZXMoKQogICAgICAgIDogY29uc3QgRml4ZWROYW1lcygpOwoKICAgIFRyYWNlciB0cmFjZXIgPSBuZXcgVHJhY2VyKGNsb3NlZFdvcmxkLCBfY29tcGlsZXIub3V0cHV0UHJvdmlkZXIpOwogICAgUnVudGltZVR5cGVzRW5jb2RlciBydGlFbmNvZGVyID0gbmV3IFJ1bnRpbWVUeXBlc0VuY29kZXJJbXBsKAogICAgICAgIHJ0aVRhZ3MsCiAgICAgICAgY2xvc2VkV29ybGQubmF0aXZlRGF0YSwKICAgICAgICBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsCiAgICAgICAgY2xvc2VkV29ybGQucnRpTmVlZCk7CgogICAgUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyBydGlTdWJzdGl0dXRpb25zOwogICAgaWYgKF9jb21waWxlci5vcHRpb25zLmRpc2FibGVSdGlPcHRpbWl6YXRpb24pIHsKICAgICAgcnRpU3Vic3RpdHV0aW9ucyA9IG5ldyBUcml2aWFsUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyhjbG9zZWRXb3JsZCk7CiAgICAgIF9ydGlDaGVja3NCdWlsZGVyID0KICAgICAgICAgIG5ldyBUcml2aWFsUnVudGltZVR5cGVzQ2hlY2tzQnVpbGRlcihjbG9zZWRXb3JsZCwgcnRpU3Vic3RpdHV0aW9ucyk7CiAgICB9IGVsc2UgewogICAgICBSdW50aW1lVHlwZXNJbXBsIHJ1bnRpbWVUeXBlc0ltcGwgPSBuZXcgUnVudGltZVR5cGVzSW1wbChjbG9zZWRXb3JsZCk7CiAgICAgIF9ydGlDaGVja3NCdWlsZGVyID0gcnVudGltZVR5cGVzSW1wbDsKICAgICAgcnRpU3Vic3RpdHV0aW9ucyA9IHJ1bnRpbWVUeXBlc0ltcGw7CiAgICB9CgogICAgUmVjaXBlRW5jb2RlciBydGlSZWNpcGVFbmNvZGVyID0gX2NvbXBpbGVyLm9wdGlvbnMuZXhwZXJpbWVudE5ld1J0aQogICAgICAgID8gbmV3IFJlY2lwZUVuY29kZXJJbXBsKAogICAgICAgICAgICBjbG9zZWRXb3JsZCwKICAgICAgICAgICAgcnRpU3Vic3RpdHV0aW9ucywKICAgICAgICAgICAgY2xvc2VkV29ybGQubmF0aXZlRGF0YSwKICAgICAgICAgICAgY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LAogICAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywKICAgICAgICAgICAgY2xvc2VkV29ybGQucnRpTmVlZCkKICAgICAgICA6IG51bGw7CgogICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuID0gbmV3IENvZGVnZW5JbnB1dHNJbXBsKHJ0aVN1YnN0aXR1dGlvbnMsIHJ0aUVuY29kZXIsCiAgICAgICAgcnRpUmVjaXBlRW5jb2RlciwgdHJhY2VyLCBydGlUYWdzLCBmaXhlZE5hbWVzKTsKCiAgICBmdW5jdGlvbkNvbXBpbGVyLmluaXRpYWxpemUoZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMsIGNvZGVnZW4pOwogICAgcmV0dXJuIGNvZGVnZW47CiAgfQoKICBAb3ZlcnJpZGUKICBDb2RlZ2VuRW5xdWV1ZXIgY3JlYXRlQ29kZWdlbkVucXVldWVyKAogICAgICBDb21waWxlclRhc2sgdGFzaywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLAogICAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW4sCiAgICAgIENvZGVnZW5SZXN1bHRzIGNvZGVnZW5SZXN1bHRzKSB7CiAgICBhc3NlcnQoX2VsZW1lbnRNYXAgIT0gbnVsbCwKICAgICAgICAiSnNCYWNrZW5kU3RyYXRlZ3kuZWxlbWVudE1hcCBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXQuIik7CiAgICBPbmVTaG90SW50ZXJjZXB0b3JEYXRhIG9uZVNob3RJbnRlcmNlcHRvckRhdGEgPSBuZXcgT25lU2hvdEludGVyY2VwdG9yRGF0YSgKICAgICAgICBjbG9zZWRXb3JsZC5pbnRlcmNlcHRvckRhdGEsCiAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsCiAgICAgICAgY2xvc2VkV29ybGQubmF0aXZlRGF0YSk7CiAgICBfb25Db2RlZ2VuRW5xdWV1ZXJTdGFydCgKICAgICAgICBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLCBjb2RlZ2VuLCBvbmVTaG90SW50ZXJjZXB0b3JEYXRhKTsKICAgIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQgPSBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQ7CiAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cyA9IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwogICAgQmFja2VuZEltcGFjdHMgaW1wYWN0cyA9CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3RzKGNvbW1vbkVsZW1lbnRzLCBfY29tcGlsZXIub3B0aW9ucy5leHBlcmltZW50TmV3UnRpKTsKICAgIF9jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcyA9IG5ldyBDdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcygKICAgICAgICBjb21tb25FbGVtZW50cywgZWxlbWVudEVudmlyb25tZW50LCBjbG9zZWRXb3JsZC5uYXRpdmVEYXRhKTsKICAgIHJldHVybiBuZXcgQ29kZWdlbkVucXVldWVyKAogICAgICAgIHRhc2ssCiAgICAgICAgbmV3IENvZGVnZW5Xb3JsZEJ1aWxkZXJJbXBsKAogICAgICAgICAgICBjbG9zZWRXb3JsZCwKICAgICAgICAgICAgX2NvbXBpbGVyLmFic3RyYWN0VmFsdWVTdHJhdGVneS5jcmVhdGVTZWxlY3RvclN0cmF0ZWd5KCksCiAgICAgICAgICAgIG9uZVNob3RJbnRlcmNlcHRvckRhdGEpLAogICAgICAgIG5ldyBLZXJuZWxDb2RlZ2VuV29ya0l0ZW1CdWlsZGVyKAogICAgICAgICAgICB0aGlzLAogICAgICAgICAgICBjbG9zZWRXb3JsZCwKICAgICAgICAgICAgY29kZWdlblJlc3VsdHMsCiAgICAgICAgICAgIG5ldyBDbG9zZWRFbnRpdHlMb29rdXAoX2VsZW1lbnRNYXApLAogICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCB0aGUgbmVlZCBmb3IgYSBbQ29tcG9uZW50TG9va3VwXS4gVGhpcwogICAgICAgICAgICAvLyBpcyBjYXVzZWQgYnkgc29tZSB0eXBlIG1hc2tzIGhvbGRpbmcgYSBrZXJuZWwgbm9kZSBmb3IgdXNpbmcgaW4KICAgICAgICAgICAgLy8gdHJhY2luZy4KICAgICAgICAgICAgbmV3IENvbXBvbmVudExvb2t1cChfZWxlbWVudE1hcC5wcm9ncmFtRW52Lm1haW5Db21wb25lbnQpKSwKICAgICAgICBuZXcgQ29kZWdlbkVucXVldWVyTGlzdGVuZXIoCiAgICAgICAgICAgIF9jb21waWxlci5vcHRpb25zLAogICAgICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLAogICAgICAgICAgICBpbXBhY3RzLAogICAgICAgICAgICBjbG9zZWRXb3JsZC5iYWNrZW5kVXNhZ2UsCiAgICAgICAgICAgIGNsb3NlZFdvcmxkLnJ0aU5lZWQsCiAgICAgICAgICAgIGN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzLAogICAgICAgICAgICBuYXRpdmVDb2RlZ2VuRW5xdWV1ZXIpLAogICAgICAgIGNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YSk7CiAgfQoKICAvLy8gQ2FsbGVkIGJlZm9yZSB0aGUgY29tcGlsZXIgc3RhcnRzIHJ1bm5pbmcgdGhlIGNvZGVnZW4gZW5xdWV1ZXIuCiAgdm9pZCBfb25Db2RlZ2VuRW5xdWV1ZXJTdGFydCgKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMsCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgT25lU2hvdEludGVyY2VwdG9yRGF0YSBvbmVTaG90SW50ZXJjZXB0b3JEYXRhKSB7CiAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQgPSBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cy5jbG9zZWRXb3JsZDsKICAgIFJ1bnRpbWVUeXBlVGFncyBydGlUYWdzID0gY29kZWdlbi5ydGlUYWdzOwogICAgRml4ZWROYW1lcyBmaXhlZE5hbWVzID0gY29kZWdlbi5maXhlZE5hbWVzOwogICAgX25hbWVyID0gX2NvbXBpbGVyLm9wdGlvbnMuZW5hYmxlTWluaWZpY2F0aW9uCiAgICAgICAgPyBfY29tcGlsZXIub3B0aW9ucy51c2VGcmVxdWVuY3lOYW1lcgogICAgICAgICAgICA/IG5ldyBGcmVxdWVuY3lCYXNlZE5hbWVyKGNsb3NlZFdvcmxkLCBydGlUYWdzLCBmaXhlZE5hbWVzKQogICAgICAgICAgICA6IG5ldyBNaW5pZnlOYW1lcihjbG9zZWRXb3JsZCwgcnRpVGFncywgZml4ZWROYW1lcykKICAgICAgICA6IG5ldyBOYW1lcihjbG9zZWRXb3JsZCwgcnRpVGFncywgZml4ZWROYW1lcyk7CiAgICBfbmF0aXZlQ29kZWdlbkVucXVldWVyID0gbmV3IE5hdGl2ZUNvZGVnZW5FbnF1ZXVlcigKICAgICAgICBfY29tcGlsZXIub3B0aW9ucywKICAgICAgICBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsCiAgICAgICAgY2xvc2VkV29ybGQuZGFydFR5cGVzLAogICAgICAgIGVtaXR0ZXJUYXNrLAogICAgICAgIGNsb3NlZFdvcmxkLmxpdmVOYXRpdmVDbGFzc2VzLAogICAgICAgIGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEpOwogICAgZW1pdHRlclRhc2suY3JlYXRlRW1pdHRlcihfbmFtZXIsIGNvZGVnZW4sIGNsb3NlZFdvcmxkKTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFNoYXJlIHRoZSBpbXBhY3Qgb2JqZWN0IGNyZWF0ZWQgaW4KICAgIC8vIGNyZWF0ZUNvZGVnZW5FbnF1ZXVlci4KICAgIEJhY2tlbmRJbXBhY3RzIGltcGFjdHMgPSBuZXcgQmFja2VuZEltcGFjdHMoCiAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsIF9jb21waWxlci5vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpOwoKICAgIF9jb2RlZ2VuSW1wYWN0VHJhbnNmb3JtZXIgPSBuZXcgQ29kZWdlbkltcGFjdFRyYW5zZm9ybWVyKAogICAgICAgIGNsb3NlZFdvcmxkLAogICAgICAgIGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywKICAgICAgICBpbXBhY3RzLAogICAgICAgIGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEsCiAgICAgICAgY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlLAogICAgICAgIGNsb3NlZFdvcmxkLnJ0aU5lZWQsCiAgICAgICAgbmF0aXZlQ29kZWdlbkVucXVldWVyLAogICAgICAgIF9uYW1lciwKICAgICAgICBvbmVTaG90SW50ZXJjZXB0b3JEYXRhLAogICAgICAgIHJ0aUNoZWNrc0J1aWxkZXIsCiAgICAgICAgZW1pdHRlclRhc2submF0aXZlRW1pdHRlcik7CiAgfQoKICBXb3JsZEltcGFjdCBnZW5lcmF0ZUNvZGUoCiAgICAgIFdvcmtJdGVtIHdvcmssCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgQ29kZWdlblJlc3VsdHMgY29kZWdlblJlc3VsdHMsCiAgICAgIEVudGl0eUxvb2t1cCBlbnRpdHlMb29rdXAsCiAgICAgIENvbXBvbmVudExvb2t1cCBjb21wb25lbnRMb29rdXApIHsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSB3b3JrLmVsZW1lbnQ7CiAgICBDb2RlZ2VuUmVzdWx0IHJlc3VsdCA9IGNvZGVnZW5SZXN1bHRzLmdldENvZGVnZW5SZXN1bHRzKG1lbWJlcik7CiAgICBpZiAoX2NvbXBpbGVyLm9wdGlvbnMudGVzdE1vZGUpIHsKICAgICAgYm9vbCB1c2VEYXRhS2luZHMgPSB0cnVlOwogICAgICBMaXN0PE9iamVjdD4gZGF0YSA9IFtdOwogICAgICBEYXRhU2luayBzaW5rID0gbmV3IE9iamVjdFNpbmsoZGF0YSwgdXNlRGF0YUtpbmRzOiB1c2VEYXRhS2luZHMpOwogICAgICBzaW5rLnJlZ2lzdGVyQ29kZWdlbldyaXRlcihuZXcgQ29kZWdlbldyaXRlckltcGwoY2xvc2VkV29ybGQpKTsKICAgICAgcmVzdWx0LndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UgPSBuZXcgT2JqZWN0U291cmNlKGRhdGEsIHVzZURhdGFLaW5kczogdXNlRGF0YUtpbmRzKTsKICAgICAgTGlzdDxNb2R1bGFyTmFtZT4gbW9kdWxhck5hbWVzID0gW107CiAgICAgIExpc3Q8TW9kdWxhckV4cHJlc3Npb24+IG1vZHVsYXJFeHByZXNzaW9uID0gW107CiAgICAgIHNvdXJjZS5yZWdpc3RlckNvZGVnZW5SZWFkZXIoCiAgICAgICAgICBuZXcgQ29kZWdlblJlYWRlckltcGwoY2xvc2VkV29ybGQsIG1vZHVsYXJOYW1lcywgbW9kdWxhckV4cHJlc3Npb24pKTsKICAgICAgc291cmNlLnJlZ2lzdGVyRW50aXR5TG9va3VwKGVudGl0eUxvb2t1cCk7CiAgICAgIHNvdXJjZS5yZWdpc3RlckNvbXBvbmVudExvb2t1cChjb21wb25lbnRMb29rdXApOwogICAgICByZXN1bHQgPSBDb2RlZ2VuUmVzdWx0LnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICAgIHNvdXJjZSwgbW9kdWxhck5hbWVzLCBtb2R1bGFyRXhwcmVzc2lvbik7CiAgICB9CiAgICBpZiAocmVzdWx0LmNvZGUgIT0gbnVsbCkgewogICAgICBnZW5lcmF0ZWRDb2RlW21lbWJlcl0gPSByZXN1bHQuY29kZTsKICAgIH0KICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgewogICAgICBjb2RlZ2VuSW1wYWN0c0ZvclRlc3RpbmcgPz89IDxNZW1iZXJFbnRpdHksIFdvcmxkSW1wYWN0Pnt9OwogICAgICBjb2RlZ2VuSW1wYWN0c0ZvclRlc3RpbmdbbWVtYmVyXSA9IHJlc3VsdC5pbXBhY3Q7CiAgICB9CiAgICBXb3JsZEltcGFjdCB3b3JsZEltcGFjdCA9CiAgICAgICAgX2NvZGVnZW5JbXBhY3RUcmFuc2Zvcm1lci50cmFuc2Zvcm1Db2RlZ2VuSW1wYWN0KHJlc3VsdC5pbXBhY3QpOwogICAgX2NvbXBpbGVyLmR1bXBJbmZvVGFzay5yZWdpc3RlckltcGFjdChtZW1iZXIsIHdvcmxkSW1wYWN0KTsKICAgIHJlc3VsdC5hcHBseU1vZHVsYXJTdGF0ZShfbmFtZXIsIGVtaXR0ZXJUYXNrLmVtaXR0ZXIpOwogICAgcmV0dXJuIHdvcmxkSW1wYWN0OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBvbkNvZGVnZW5FbmQoQ29kZWdlbklucHV0cyBjb2RlZ2VuKSB7CiAgICBzb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5Lm9uQ29tcGxldGUoKTsKICAgIGNvZGVnZW4udHJhY2VyLmNsb3NlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgYXNzZW1ibGVQcm9ncmFtKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgSW5mZXJyZWREYXRhIGluZmVycmVkRGF0YSwKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuSW5wdXRzLCBDb2RlZ2VuV29ybGQgY29kZWdlbldvcmxkKSB7CiAgICBpbnQgcHJvZ3JhbVNpemUgPSBlbWl0dGVyVGFzay5hc3NlbWJsZVByb2dyYW0oCiAgICAgICAgX25hbWVyLCBjbG9zZWRXb3JsZCwgaW5mZXJyZWREYXRhLCBjb2RlZ2VuSW5wdXRzLCBjb2RlZ2VuV29ybGQpOwogICAgY2xvc2VkV29ybGQubm9TdWNoTWV0aG9kRGF0YS5lbWl0RGlhZ25vc3RpYyhfY29tcGlsZXIucmVwb3J0ZXIpOwogICAgcmV0dXJuIHByb2dyYW1TaXplOwogIH0KCiAgQG92ZXJyaWRlCiAgU3NhQnVpbGRlciBjcmVhdGVTc2FCdWlsZGVyKAogICAgICBDb21waWxlclRhc2sgdGFzaywgU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSBzb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5KSB7CiAgICByZXR1cm4gbmV3IEtlcm5lbFNzYUJ1aWxkZXIoCiAgICAgICAgdGFzaywKICAgICAgICBfY29tcGlsZXIub3B0aW9ucywKICAgICAgICBfY29tcGlsZXIucmVwb3J0ZXIsCiAgICAgICAgX2NvbXBpbGVyLmR1bXBJbmZvVGFzaywKICAgICAgICAvLyBpZ25vcmU6ZGVwcmVjYXRlZF9tZW1iZXJfdXNlX2Zyb21fc2FtZV9wYWNrYWdlCiAgICAgICAgZWxlbWVudE1hcCwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5KTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZVNwYW4gc3BhbkZyb21TcGFubmFibGUoU3Bhbm5hYmxlIHNwYW5uYWJsZSwgRW50aXR5IGN1cnJlbnRFbGVtZW50KSB7CiAgICByZXR1cm4gX2VsZW1lbnRNYXAuZ2V0U291cmNlU3BhbihzcGFubmFibGUsIGN1cnJlbnRFbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVzSW5mZXJyZXIgY3JlYXRlVHlwZXNJbmZlcnJlcigKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBJbmZlcnJlZERhdGFCdWlsZGVyIGluZmVycmVkRGF0YUJ1aWxkZXIpIHsKICAgIHJldHVybiBuZXcgVHlwZUdyYXBoSW5mZXJyZXIoX2NvbXBpbGVyLCBjbG9zZWRXb3JsZCwgaW5mZXJyZWREYXRhQnVpbGRlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByZXBhcmVDb2RlZ2VuUmVhZGVyKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UucmVnaXN0ZXJFbnRpdHlSZWFkZXIobmV3IENsb3NlZEVudGl0eVJlYWRlcihfZWxlbWVudE1hcCkpOwogICAgc291cmNlLnJlZ2lzdGVyRW50aXR5TG9va3VwKG5ldyBDbG9zZWRFbnRpdHlMb29rdXAoX2VsZW1lbnRNYXApKTsKICAgIHNvdXJjZS5yZWdpc3RlckNvbXBvbmVudExvb2t1cCgKICAgICAgICBuZXcgQ29tcG9uZW50TG9va3VwKF9lbGVtZW50TWFwLnByb2dyYW1FbnYubWFpbkNvbXBvbmVudCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRW50aXR5V3JpdGVyIGZvckVhY2hDb2RlZ2VuTWVtYmVyKHZvaWQgRnVuY3Rpb24oTWVtYmVyRW50aXR5IG1lbWJlcikgZikgewogICAgaW50IGVhcmx5TWVtYmVySW5kZXhMaW1pdCA9IF9lbGVtZW50TWFwLnByZXBhcmVGb3JDb2RlZ2VuU2VyaWFsaXphdGlvbigpOwogICAgQ2xvc2VkRW50aXR5V3JpdGVyIGVudGl0eVdyaXRlciA9CiAgICAgICAgbmV3IENsb3NlZEVudGl0eVdyaXRlcihfZWxlbWVudE1hcCwgZWFybHlNZW1iZXJJbmRleExpbWl0KTsKICAgIGZvciAoaW50IG1lbWJlckluZGV4ID0gMDsKICAgICAgICBtZW1iZXJJbmRleCA8IF9lbGVtZW50TWFwLm1lbWJlcnMubGVuZ3RoOwogICAgICAgIG1lbWJlckluZGV4KyspIHsKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IF9lbGVtZW50TWFwLm1lbWJlcnMuZ2V0RW50aXR5KG1lbWJlckluZGV4KTsKICAgICAgaWYgKG1lbWJlciA9PSBudWxsIHx8IG1lbWJlci5pc0Fic3RyYWN0KSBjb250aW51ZTsKICAgICAgZihtZW1iZXIpOwogICAgfQogICAgcmV0dXJuIGVudGl0eVdyaXRlcjsKICB9Cn0KCmNsYXNzIEtlcm5lbENvZGVnZW5Xb3JrSXRlbUJ1aWxkZXIgaW1wbGVtZW50cyBXb3JrSXRlbUJ1aWxkZXIgewogIGZpbmFsIEpzQmFja2VuZFN0cmF0ZWd5IF9iYWNrZW5kU3RyYXRlZ3k7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBDb2RlZ2VuUmVzdWx0cyBfY29kZWdlblJlc3VsdHM7CiAgZmluYWwgRW50aXR5TG9va3VwIF9lbnRpdHlMb29rdXA7CiAgZmluYWwgQ29tcG9uZW50TG9va3VwIF9jb21wb25lbnRMb29rdXA7CgogIEtlcm5lbENvZGVnZW5Xb3JrSXRlbUJ1aWxkZXIodGhpcy5fYmFja2VuZFN0cmF0ZWd5LCB0aGlzLl9jbG9zZWRXb3JsZCwKICAgICAgdGhpcy5fY29kZWdlblJlc3VsdHMsIHRoaXMuX2VudGl0eUxvb2t1cCwgdGhpcy5fY29tcG9uZW50TG9va3VwKTsKCiAgQG92ZXJyaWRlCiAgV29ya0l0ZW0gY3JlYXRlV29ya0l0ZW0oTWVtYmVyRW50aXR5IGVudGl0eSkgewogICAgaWYgKGVudGl0eS5pc0Fic3RyYWN0KSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuZXcgS2VybmVsQ29kZWdlbldvcmtJdGVtKF9iYWNrZW5kU3RyYXRlZ3ksIF9jbG9zZWRXb3JsZCwKICAgICAgICBfY29kZWdlblJlc3VsdHMsIF9lbnRpdHlMb29rdXAsIF9jb21wb25lbnRMb29rdXAsIGVudGl0eSk7CiAgfQp9CgpjbGFzcyBLZXJuZWxDb2RlZ2VuV29ya0l0ZW0gZXh0ZW5kcyBXb3JrSXRlbSB7CiAgZmluYWwgSnNCYWNrZW5kU3RyYXRlZ3kgX2JhY2tlbmRTdHJhdGVneTsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIENvZGVnZW5SZXN1bHRzIF9jb2RlZ2VuUmVzdWx0czsKICBmaW5hbCBFbnRpdHlMb29rdXAgX2VudGl0eUxvb2t1cDsKICBmaW5hbCBDb21wb25lbnRMb29rdXAgX2NvbXBvbmVudExvb2t1cDsKICBAb3ZlcnJpZGUKICBmaW5hbCBNZW1iZXJFbnRpdHkgZWxlbWVudDsKCiAgS2VybmVsQ29kZWdlbldvcmtJdGVtKAogICAgICB0aGlzLl9iYWNrZW5kU3RyYXRlZ3ksCiAgICAgIHRoaXMuX2Nsb3NlZFdvcmxkLAogICAgICB0aGlzLl9jb2RlZ2VuUmVzdWx0cywKICAgICAgdGhpcy5fZW50aXR5TG9va3VwLAogICAgICB0aGlzLl9jb21wb25lbnRMb29rdXAsCiAgICAgIHRoaXMuZWxlbWVudCk7CgogIEBvdmVycmlkZQogIFdvcmxkSW1wYWN0IHJ1bigpIHsKICAgIHJldHVybiBfYmFja2VuZFN0cmF0ZWd5LmdlbmVyYXRlQ29kZSgKICAgICAgICB0aGlzLCBfY2xvc2VkV29ybGQsIF9jb2RlZ2VuUmVzdWx0cywgX2VudGl0eUxvb2t1cCwgX2NvbXBvbmVudExvb2t1cCk7CiAgfQp9CgovLy8gVGFzayBmb3IgYnVpbGRpbmcgU1NBIGZyb20ga2VybmVsIElSIGxvYWRlZCBmcm9tIC5kaWxsLgpjbGFzcyBLZXJuZWxTc2FCdWlsZGVyIGltcGxlbWVudHMgU3NhQnVpbGRlciB7CiAgZmluYWwgQ29tcGlsZXJUYXNrIF90YXNrOwogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgX3JlcG9ydGVyOwogIGZpbmFsIER1bXBJbmZvVGFzayBfZHVtcEluZm9UYXNrOwogIGZpbmFsIEpzVG9FbGVtZW50TWFwIF9lbGVtZW50TWFwOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3k7CgogIEZ1bmN0aW9uSW5saW5lQ2FjaGUgX2lubGluZUNhY2hlOwogIElubGluZURhdGFDYWNoZSBfaW5saW5lRGF0YUNhY2hlOwoKICBLZXJuZWxTc2FCdWlsZGVyKHRoaXMuX3Rhc2ssIHRoaXMuX29wdGlvbnMsIHRoaXMuX3JlcG9ydGVyLAogICAgICB0aGlzLl9kdW1wSW5mb1Rhc2ssIHRoaXMuX2VsZW1lbnRNYXAsIHRoaXMuX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kpOwoKICBAb3ZlcnJpZGUKICBIR3JhcGggYnVpbGQoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLAogICAgICBDb2RlZ2VuUmVnaXN0cnkgcmVnaXN0cnksCiAgICAgIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlcikgewogICAgX2lubGluZUNhY2hlID8/PSBuZXcgRnVuY3Rpb25JbmxpbmVDYWNoZShjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEpOwogICAgX2lubGluZURhdGFDYWNoZSA/Pz0gbmV3IElubGluZURhdGFDYWNoZSgKICAgICAgICBlbmFibGVVc2VyQXNzZXJ0aW9uczogX29wdGlvbnMuZW5hYmxlVXNlckFzc2VydGlvbnMsCiAgICAgICAgb21pdEltcGxpY2l0Q2FzdHM6IF9vcHRpb25zLm9taXRJbXBsaWNpdENoZWNrcyk7CiAgICByZXR1cm4gX3Rhc2subWVhc3VyZSgoKSB7CiAgICAgIEtlcm5lbFNzYUdyYXBoQnVpbGRlciBidWlsZGVyID0gbmV3IEtlcm5lbFNzYUdyYXBoQnVpbGRlcigKICAgICAgICAgIF9vcHRpb25zLAogICAgICAgICAgX3JlcG9ydGVyLAogICAgICAgICAgbWVtYmVyLAogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0TWVtYmVyVGhpc1R5cGUobWVtYmVyKSwKICAgICAgICAgIF9kdW1wSW5mb1Rhc2ssCiAgICAgICAgICBfZWxlbWVudE1hcCwKICAgICAgICAgIHJlc3VsdHMsCiAgICAgICAgICBjbG9zZWRXb3JsZCwKICAgICAgICAgIHJlZ2lzdHJ5LAogICAgICAgICAgbmFtZXIsCiAgICAgICAgICBlbWl0dGVyLAogICAgICAgICAgY29kZWdlbi50cmFjZXIsCiAgICAgICAgICBjb2RlZ2VuLnJ0aUVuY29kZXIsCiAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSwKICAgICAgICAgIF9pbmxpbmVDYWNoZSwKICAgICAgICAgIF9pbmxpbmVEYXRhQ2FjaGUpOwogICAgICByZXR1cm4gYnVpbGRlci5idWlsZCgpOwogICAgfSk7CiAgfQp9CgpjbGFzcyBLZXJuZWxUb1R5cGVJbmZlcmVuY2VNYXBJbXBsIGltcGxlbWVudHMgS2VybmVsVG9UeXBlSW5mZXJlbmNlTWFwIHsKICBmaW5hbCBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0czsKICBHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0IF90YXJnZXRSZXN1bHRzOwoKICBLZXJuZWxUb1R5cGVJbmZlcmVuY2VNYXBJbXBsKAogICAgICBNZW1iZXJFbnRpdHkgdGFyZ2V0LCB0aGlzLl9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzKSB7CiAgICBfdGFyZ2V0UmVzdWx0cyA9IF9yZXN1bHRPZih0YXJnZXQpOwogIH0KCiAgR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdCBfcmVzdWx0T2YoTWVtYmVyRW50aXR5IGUpID0+CiAgICAgIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzCiAgICAgICAgICAucmVzdWx0T2ZNZW1iZXIoZSBpcyBDb25zdHJ1Y3RvckJvZHlFbnRpdHkgPyBlLmNvbnN0cnVjdG9yIDogZSk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgZ2V0UmV0dXJuVHlwZU9mKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICByZXR1cm4gQWJzdHJhY3RWYWx1ZUZhY3RvcnkuaW5mZXJyZWRSZXR1cm5UeXBlRm9yRWxlbWVudCgKICAgICAgICBmdW5jdGlvbiwgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGVPZkludm9jYXRpb24oCiAgICAgIGlyLk1ldGhvZEludm9jYXRpb24gbm9kZSwgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluKSB7CiAgICByZXR1cm4gX3RhcmdldFJlc3VsdHMudHlwZU9mU2VuZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlT2ZHZXQoaXIuUHJvcGVydHlHZXQgbm9kZSkgewogICAgcmV0dXJuIF90YXJnZXRSZXN1bHRzLnR5cGVPZlNlbmQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZU9mRGlyZWN0R2V0KGlyLkRpcmVjdFByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHJldHVybiBfdGFyZ2V0UmVzdWx0cy50eXBlT2ZTZW5kKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGVPZlNldCgKICAgICAgaXIuUHJvcGVydHlTZXQgbm9kZSwgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluKSB7CiAgICByZXR1cm4gX3RhcmdldFJlc3VsdHMudHlwZU9mU2VuZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdHlwZU9mTGlzdExpdGVyYWwoCiAgICAgIGlyLkxpc3RMaXRlcmFsIGxpc3RMaXRlcmFsLCBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4pIHsKICAgIHJldHVybiBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cy50eXBlT2ZMaXN0TGl0ZXJhbChsaXN0TGl0ZXJhbCkgPz8KICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvcihpci5Gb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gX3RhcmdldFJlc3VsdHMudHlwZU9mSXRlcmF0b3Iobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkl0ZXJhdG9yQ3VycmVudChpci5Gb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gX3RhcmdldFJlc3VsdHMudHlwZU9mSXRlcmF0b3JDdXJyZW50KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlT2ZJdGVyYXRvck1vdmVOZXh0KGlyLkZvckluU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBfdGFyZ2V0UmVzdWx0cy50eXBlT2ZJdGVyYXRvck1vdmVOZXh0KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzSW5kZXhhYmxlSXRlcmF0b3IoCiAgICAgIGlyLkZvckluU3RhdGVtZW50IG5vZGUsIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbikgewogICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0gdHlwZU9mSXRlcmF0b3Iobm9kZSk7CiAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0pzSW5kZXhhYmxlQW5kSXRlcmFibGUobWFzaykuaXNEZWZpbml0ZWx5VHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgaW5mZXJyZWRJbmRleFR5cGUoaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIEFic3RyYWN0VmFsdWVGYWN0b3J5LmluZmVycmVkUmVzdWx0VHlwZUZvclNlbGVjdG9yKAogICAgICAgIG5ldyBTZWxlY3Rvci5pbmRleCgpLCB0eXBlT2ZJdGVyYXRvcihub2RlKSwgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXRJbmZlcnJlZFR5cGVPZihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gQWJzdHJhY3RWYWx1ZUZhY3RvcnkuaW5mZXJyZWRUeXBlRm9yTWVtYmVyKAogICAgICAgIG1lbWJlciwgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBnZXRJbmZlcnJlZFR5cGVPZlBhcmFtZXRlcihMb2NhbCBwYXJhbWV0ZXIpIHsKICAgIHJldHVybiBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFR5cGVGb3JQYXJhbWV0ZXIoCiAgICAgICAgcGFyYW1ldGVyLCBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHJlc3VsdFR5cGVPZlNlbGVjdG9yKFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIHJldHVybiBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFJlc3VsdFR5cGVGb3JTZWxlY3RvcigKICAgICAgICBzZWxlY3RvciwgbWFzaywgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB0eXBlRnJvbU5hdGl2ZUJlaGF2aW9yKAogICAgICBOYXRpdmVCZWhhdmlvciBuYXRpdmVCZWhhdmlvciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gQWJzdHJhY3RWYWx1ZUZhY3RvcnkuZnJvbU5hdGl2ZUJlaGF2aW9yKG5hdGl2ZUJlaGF2aW9yLCBjbG9zZWRXb3JsZCk7CiAgfQp9CoJuAE5OPAEjASgBIxkhHx5KGy4cJBouKigxLyEnJSwuNiYwKy4jKzMuK0M9HikiIRouJRwaHBkxJCgYFxsgGCAWATUcJAE/KEABMAEQATYBIAEvASYBNwE7OScBJkIeTw1NBkYxGxwOHCQEAQwhOB0TBAEMPgEMMwEnAUYBUQE7ATwyQwQBDiIgQxgEAT8oRAwwKEkrBAEzDCMoRQwzKD8eBAEMI0FCLBwfHSUmPkRFSBUaHBsqRz4sRBkEAQxDKgQBDCA/RzdBJR4BR0IRICgkHgEwNEwaTw1NLCsGAUghGR4kLCghEAFQOAFGFAQBDCkZIDkdJyBDUCUkIR1CTEAdUEhFIA4lGUYlKhIZHDFRTxhIJR8gHBUmISskJgQBRiA9HTdHLzAyLkhANzgbKCQfFSchPT8eMUkBPhUoJBEgIh0fECAaJAQBHBUgJSEpKEUmIB5IRiROKzYkUDE3MTQGHysGIEI4Bh5JQDsYBAEMLSwcBAEMS0AzSUUYBAEMH1AhDhscIDoUJAQBDE1BBAEMJUtPBAEMMUZGJEQEAQxMTiZEHjIZSDkRBhkEAgFALCMoJCoBSUgBDDEoRUMEAgEvLCMoJCoMHgEZHRkcGh0VAQwWKk8EAgE8LxwiJiQkPgEkJAE+TgEMEBsgKh0gGiBLLj05HkEUFRIxGRcTFxQRExoeJhgdHggEAgFJPDIBIDsoBAE/HksBDDs+LAQBDCpLLAQBDDksBAEMRSwEAQwjRiwEAQwjTUUpBAEMOTAEAQxANwQBDEE4BAEMHkkvUAQBDDw/TgQBDDk3KgQBDD46LQQBDE4/MgQBDChBUQQCAS5wYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9qc19zdHJhdGVneS5kYXJ0OXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2tlcm5lbC9rZXJuZWxfc3RyYXRlZ3kuZGFydMAAQ+MvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmtlcm5lbC5mcm9udGVuZF9zdHJhdGVneTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL2JhY2tlbmRfYXBpLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IFVyaXM7CmltcG9ydCAnLi4vY29tbW9uL3Jlc29sdXRpb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL3Rhc2tzLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi93b3JrLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21waWxlci5kYXJ0JzsKaW1wb3J0ICcuLi9kZWZlcnJlZF9sb2FkLmRhcnQnIHNob3cgRGVmZXJyZWRMb2FkVGFzazsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbnF1ZXVlLmRhcnQnOwppbXBvcnQgJy4uL2Vudmlyb25tZW50LmRhcnQnIGFzIGVudjsKaW1wb3J0ICcuLi9mcm9udGVuZF9zdHJhdGVneS5kYXJ0JzsKaW1wb3J0ICcuLi9pci9hbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9jbG9zdXJlLmRhcnQnIHNob3cgQ2xvc3VyZVNjb3BlTW9kZWw7CmltcG9ydCAnLi4vaXIvaW1wYWN0LmRhcnQnOwppbXBvcnQgJy4uL2lyL21vZHVsYXIuZGFydCc7CmltcG9ydCAnLi4vaXIvc2NvcGUuZGFydCcgc2hvdyBTY29wZU1vZGVsOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kX2ltcGFjdC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2JhY2tlbmRfdXNhZ2UuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9jdXN0b21fZWxlbWVudHNfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0JyBzaG93IEtGaWVsZEFuYWx5c2lzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW1wYWN0X3RyYW5zZm9ybWVyLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbm9fc3VjaF9tZXRob2RfcmVnaXN0cnkuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9yZXNvbHV0aW9uX2xpc3RlbmVyLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19yZXNvbHV0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2tlcm5lbC9kYXJ0MmpzX3RhcmdldC5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvZW5xdWV1ZS5kYXJ0JyBzaG93IE5hdGl2ZVJlc29sdXRpb25FbnF1ZXVlcjsKaW1wb3J0ICcuLi9uYXRpdmUvcmVzb2x2ZXIuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jbGFzc19oaWVyYXJjaHkuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvcmVzb2x1dGlvbl93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvZW51bXNldC5kYXJ0JzsKaW1wb3J0ICdkZWZlcnJlZF9sb2FkLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRfbWFwX2ltcGwuZGFydCc7CmltcG9ydCAnbG9hZGVyLmRhcnQnOwoKLy8vIEZyb250IGVuZCBzdHJhdGVneSB0aGF0IGxvYWRzICcuZGlsbCcgZmlsZXMgYW5kIGJ1aWxkcyBhIHJlc29sdmVkIGVsZW1lbnQKLy8vIG1vZGVsIGZyb20ga2VybmVsIElSIG5vZGVzLgpjbGFzcyBLZXJuZWxGcm9udGVuZFN0cmF0ZWd5IGV4dGVuZHMgRnJvbnRlbmRTdHJhdGVneSB7CiAgZmluYWwgTmF0aXZlQmFzaWNEYXRhQnVpbGRlckltcGwgbmF0aXZlQmFzaWNEYXRhQnVpbGRlciA9CiAgICAgIG5ldyBOYXRpdmVCYXNpY0RhdGFCdWlsZGVySW1wbCgpOwogIE5hdGl2ZUJhc2ljRGF0YSBfbmF0aXZlQmFzaWNEYXRhOwogIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBDb21waWxlclRhc2sgX2NvbXBpbGVyVGFzazsKICBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIF9lbGVtZW50TWFwOwogIFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyIF9ydW50aW1lVHlwZXNOZWVkQnVpbGRlcjsKCiAgS2VybmVsQW5ub3RhdGlvblByb2Nlc3NvciBfYW5ub3RhdGlvblByb2Nlc3NvcjsKCiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwgQ2xvc3VyZVNjb3BlTW9kZWw+IGNsb3N1cmVNb2RlbHMgPSB7fTsKCiAgTW9kdWxhclN0cmF0ZWd5IF9tb2R1bGFyU3RyYXRlZ3k7CiAgSXJBbm5vdGF0aW9uRGF0YSBfaXJBbm5vdGF0aW9uRGF0YTsKCiAgTmF0aXZlRGF0YUJ1aWxkZXJJbXBsIF9uYXRpdmVEYXRhQnVpbGRlcjsKICBOYXRpdmVEYXRhQnVpbGRlciBnZXQgbmF0aXZlRGF0YUJ1aWxkZXIgPT4gX25hdGl2ZURhdGFCdWlsZGVyOwoKICBCYWNrZW5kVXNhZ2VCdWlsZGVyIF9iYWNrZW5kVXNhZ2VCdWlsZGVyOwoKICBOYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXIgX25hdGl2ZVJlc29sdXRpb25FbnF1ZXVlcjsKCiAgLy8vIFJlc29sdXRpb24gc3VwcG9ydCBmb3IgZ2VuZXJhdGluZyB0YWJsZSBvZiBpbnRlcmNlcHRvcnMgYW5kCiAgLy8vIGNvbnN0cnVjdG9ycyBmb3IgY3VzdG9tIGVsZW1lbnRzLgogIEN1c3RvbUVsZW1lbnRzUmVzb2x1dGlvbkFuYWx5c2lzIF9jdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpczsKCiAgS0ZpZWxkQW5hbHlzaXMgX2ZpZWxkQW5hbHlzaXM7CgogIC8vLyBCYWNrZW5kIHRyYW5zZm9ybWF0aW9uIG1ldGhvZHMgZm9yIHRoZSB3b3JsZCBpbXBhY3RzLgogIEltcGFjdFRyYW5zZm9ybWVyIGltcGFjdFRyYW5zZm9ybWVyOwoKICBAb3ZlcnJpZGUKICBOb1N1Y2hNZXRob2RSZWdpc3RyeSBub1N1Y2hNZXRob2RSZWdpc3RyeTsKCiAgS2VybmVsRnJvbnRlbmRTdHJhdGVneSh0aGlzLl9jb21waWxlclRhc2ssIHRoaXMuX29wdGlvbnMsCiAgICAgIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwgZW52LkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBhc3NlcnQoX2NvbXBpbGVyVGFzayAhPSBudWxsKTsKICAgIF9lbGVtZW50TWFwID0KICAgICAgICBuZXcgS2VybmVsVG9FbGVtZW50TWFwSW1wbChyZXBvcnRlciwgZW52aXJvbm1lbnQsIHRoaXMsIF9vcHRpb25zKTsKICAgIF9tb2R1bGFyU3RyYXRlZ3kgPSBuZXcgS2VybmVsTW9kdWxhclN0cmF0ZWd5KF9jb21waWxlclRhc2ssIF9lbGVtZW50TWFwKTsKICAgIF9iYWNrZW5kVXNhZ2VCdWlsZGVyID0gbmV3IEJhY2tlbmRVc2FnZUJ1aWxkZXJJbXBsKHRoaXMpOwogICAgbm9TdWNoTWV0aG9kUmVnaXN0cnkgPSBuZXcgTm9TdWNoTWV0aG9kUmVnaXN0cnlJbXBsKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLCBuZXcgS2VybmVsTm9TdWNoTWV0aG9kUmVzb2x2ZXIoX2VsZW1lbnRNYXApKTsKICB9CgogIE5hdGl2ZVJlc29sdXRpb25FbnF1ZXVlciBnZXQgbmF0aXZlUmVzb2x1dGlvbkVucXVldWVyRm9yVGVzdGluZyA9PgogICAgICBfbmF0aXZlUmVzb2x1dGlvbkVucXVldWVyOwoKICBLRmllbGRBbmFseXNpcyBnZXQgZmllbGRBbmFseXNpc0ZvclRlc3RpbmcgPT4gX2ZpZWxkQW5hbHlzaXM7CgogIEBvdmVycmlkZQogIHZvaWQgb25SZXNvbHV0aW9uU3RhcnQoKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCB0aGUgY29tcGlsZXIuZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlCiAgICAvLyBjYWxscy4gQ3VycmVudGx5IG5lZWRlZCB0byBlbnN1cmUgcmVzb2x1dGlvbiBvZiB0aGUgY2xhc3NlcyBmb3IgdmFyaW91cwogICAgLy8gcXVlcmllcyBpbiBuYXRpdmUgYmVoYXZpb3IgY29tcHV0YXRpb24sIGluZmVyZW5jZSBhbmQgY29kZWdlbi4KICAgIGVsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MpOwogICAgZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNvbW1vbkVsZW1lbnRzLmpzRXh0ZW5kYWJsZUFycmF5Q2xhc3MpOwoKICAgIF92YWxpZGF0ZUludGVyY2VwdG9ySW1wbGVtZW50c0FsbE9iamVjdE1ldGhvZHMoCiAgICAgICAgY29tbW9uRWxlbWVudHMuanNJbnRlcmNlcHRvckNsYXNzKTsKICAgIC8vIFRoZSBudWxsLWludGVyY2VwdG9yIG11c3QgYWxzbyBpbXBsZW1lbnQgKmFsbCogbWV0aG9kcy4KICAgIF92YWxpZGF0ZUludGVyY2VwdG9ySW1wbGVtZW50c0FsbE9iamVjdE1ldGhvZHMoY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MpOwogIH0KCiAgdm9pZCBfdmFsaWRhdGVJbnRlcmNlcHRvckltcGxlbWVudHNBbGxPYmplY3RNZXRob2RzKAogICAgICBDbGFzc0VudGl0eSBpbnRlcmNlcHRvckNsYXNzKSB7CiAgICBpZiAoaW50ZXJjZXB0b3JDbGFzcyA9PSBudWxsKSByZXR1cm47CiAgICBDbGFzc0VudGl0eSBvYmplY3RDbGFzcyA9IGNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzOwogICAgZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hDbGFzc01lbWJlcihvYmplY3RDbGFzcywKICAgICAgICAoXywgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICBNZW1iZXJFbnRpdHkgaW50ZXJjZXB0b3JNZW1iZXIgPSBlbGVtZW50RW52aXJvbm1lbnQKICAgICAgICAgIC5sb29rdXBMb2NhbENsYXNzTWVtYmVyKGludGVyY2VwdG9yQ2xhc3MsIG1lbWJlci5uYW1lKTsKICAgICAgLy8gSW50ZXJjZXB0b3JzIG11c3Qgb3ZlcnJpZGUgYWxsIE9iamVjdCBtZXRob2RzIGR1ZSB0byBjYWxsaW5nIGNvbnZlbnRpb24KICAgICAgLy8gZGlmZmVyZW5jZXMuCiAgICAgIGFzc2VydCgKICAgICAgICAgIGludGVyY2VwdG9yTWVtYmVyLmVuY2xvc2luZ0NsYXNzID09IGludGVyY2VwdG9yQ2xhc3MsCiAgICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgICBpbnRlcmNlcHRvck1lbWJlciwKICAgICAgICAgICAgICAiTWVtYmVyICR7bWVtYmVyLm5hbWV9IG5vdCBvdmVycmlkZGVuIGluICR7aW50ZXJjZXB0b3JDbGFzc30uICIKICAgICAgICAgICAgICAiRm91bmQgJGludGVyY2VwdG9yTWVtYmVyIGZyb20gIgogICAgICAgICAgICAgICIke2ludGVyY2VwdG9yTWVtYmVyLmVuY2xvc2luZ0NsYXNzfS4iKSk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIFJlc29sdXRpb25FbnF1ZXVlciBjcmVhdGVSZXNvbHV0aW9uRW5xdWV1ZXIoCiAgICAgIENvbXBpbGVyVGFzayB0YXNrLCBDb21waWxlciBjb21waWxlcikgewogICAgUnVudGltZVR5cGVzTmVlZEJ1aWxkZXIgcnRpTmVlZEJ1aWxkZXIgPSBfY3JlYXRlUnVudGltZVR5cGVzTmVlZEJ1aWxkZXIoKTsKICAgIEJhY2tlbmRJbXBhY3RzIGltcGFjdHMgPQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0cyhjb21tb25FbGVtZW50cywgY29tcGlsZXIub3B0aW9ucy5leHBlcmltZW50TmV3UnRpKTsKICAgIF9uYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXIgPSBuZXcgTmF0aXZlUmVzb2x1dGlvbkVucXVldWVyKAogICAgICAgIGNvbXBpbGVyLm9wdGlvbnMsCiAgICAgICAgZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIGNvbW1vbkVsZW1lbnRzLAogICAgICAgIF9lbGVtZW50TWFwLnR5cGVzLAogICAgICAgIG5ldyBCYXNlTmF0aXZlQ2xhc3NGaW5kZXIoZWxlbWVudEVudmlyb25tZW50LCBuYXRpdmVCYXNpY0RhdGEpKTsKICAgIF9uYXRpdmVEYXRhQnVpbGRlciA9IG5ldyBOYXRpdmVEYXRhQnVpbGRlckltcGwobmF0aXZlQmFzaWNEYXRhKTsKICAgIF9jdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpcyA9IG5ldyBDdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpcygKICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgY29tbW9uRWxlbWVudHMsCiAgICAgICAgbmF0aXZlQmFzaWNEYXRhLAogICAgICAgIF9iYWNrZW5kVXNhZ2VCdWlsZGVyKTsKICAgIF9maWVsZEFuYWx5c2lzID0gbmV3IEtGaWVsZEFuYWx5c2lzKHRoaXMpOwogICAgQ2xhc3NRdWVyaWVzIGNsYXNzUXVlcmllcyA9IG5ldyBLZXJuZWxDbGFzc1F1ZXJpZXMoZWxlbWVudE1hcCk7CiAgICBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgY2xhc3NIaWVyYXJjaHlCdWlsZGVyID0KICAgICAgICBuZXcgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyKGNvbW1vbkVsZW1lbnRzLCBjbGFzc1F1ZXJpZXMpOwogICAgQW5ub3RhdGlvbnNEYXRhQnVpbGRlciBhbm5vdGF0aW9uc0RhdGFCdWlsZGVyID0KICAgICAgICBuZXcgQW5ub3RhdGlvbnNEYXRhQnVpbGRlcigpOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBpcyBhIGhhY2suIFRoZSBhbm5vdGF0aW9uIGRhdGEgaXMgYnVpbHQgd2hpbGUKICAgIC8vIHVzaW5nIGl0LiBXaXRoIENGRSBjb25zdGFudHMgdGhlIGFubm90YXRpb25zIGRhdGEgY2FuIGJlIGJ1aWx0IGZ1bGx5CiAgICAvLyBiZWZvcmUgY3JlYXRpbmcgdGhlIHJlc29sdXRpb24gZW5xdWV1ZXIuCiAgICBBbm5vdGF0aW9uc0RhdGEgYW5ub3RhdGlvbnNEYXRhID0gbmV3IEFubm90YXRpb25zRGF0YUltcGwoCiAgICAgICAgY29tcGlsZXIub3B0aW9ucywgYW5ub3RhdGlvbnNEYXRhQnVpbGRlci5wcmFnbWFBbm5vdGF0aW9ucyk7CiAgICBpbXBhY3RUcmFuc2Zvcm1lciA9IG5ldyBKYXZhU2NyaXB0SW1wYWN0VHJhbnNmb3JtZXIoCiAgICAgICAgZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIGNvbW1vbkVsZW1lbnRzLAogICAgICAgIGltcGFjdHMsCiAgICAgICAgbmF0aXZlQmFzaWNEYXRhLAogICAgICAgIF9uYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXIsCiAgICAgICAgX2JhY2tlbmRVc2FnZUJ1aWxkZXIsCiAgICAgICAgX2N1c3RvbUVsZW1lbnRzUmVzb2x1dGlvbkFuYWx5c2lzLAogICAgICAgIHJ0aU5lZWRCdWlsZGVyLAogICAgICAgIGNsYXNzSGllcmFyY2h5QnVpbGRlciwKICAgICAgICBhbm5vdGF0aW9uc0RhdGEpOwogICAgSW50ZXJjZXB0b3JEYXRhQnVpbGRlciBpbnRlcmNlcHRvckRhdGFCdWlsZGVyID0KICAgICAgICBuZXcgSW50ZXJjZXB0b3JEYXRhQnVpbGRlckltcGwoCiAgICAgICAgICAgIG5hdGl2ZUJhc2ljRGF0YSwgZWxlbWVudEVudmlyb25tZW50LCBjb21tb25FbGVtZW50cyk7CiAgICByZXR1cm4gbmV3IFJlc29sdXRpb25FbnF1ZXVlcigKICAgICAgICB0YXNrLAogICAgICAgIGNvbXBpbGVyLnJlcG9ydGVyLAogICAgICAgIG5ldyBSZXNvbHV0aW9uRW5xdWV1ZXJMaXN0ZW5lcigKICAgICAgICAgICAgY29tcGlsZXIub3B0aW9ucywKICAgICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LAogICAgICAgICAgICBjb21tb25FbGVtZW50cywKICAgICAgICAgICAgaW1wYWN0cywKICAgICAgICAgICAgbmF0aXZlQmFzaWNEYXRhLAogICAgICAgICAgICBpbnRlcmNlcHRvckRhdGFCdWlsZGVyLAogICAgICAgICAgICBfYmFja2VuZFVzYWdlQnVpbGRlciwKICAgICAgICAgICAgbm9TdWNoTWV0aG9kUmVnaXN0cnksCiAgICAgICAgICAgIF9jdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpcywKICAgICAgICAgICAgX25hdGl2ZVJlc29sdXRpb25FbnF1ZXVlciwKICAgICAgICAgICAgX2ZpZWxkQW5hbHlzaXMsCiAgICAgICAgICAgIGNvbXBpbGVyLmRlZmVycmVkTG9hZFRhc2spLAogICAgICAgIG5ldyBSZXNvbHV0aW9uV29ybGRCdWlsZGVySW1wbCgKICAgICAgICAgICAgX29wdGlvbnMsCiAgICAgICAgICAgIGVsZW1lbnRNYXAsCiAgICAgICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICAgICAgX2VsZW1lbnRNYXAudHlwZXMsCiAgICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLAogICAgICAgICAgICBuYXRpdmVCYXNpY0RhdGEsCiAgICAgICAgICAgIG5hdGl2ZURhdGFCdWlsZGVyLAogICAgICAgICAgICBpbnRlcmNlcHRvckRhdGFCdWlsZGVyLAogICAgICAgICAgICBfYmFja2VuZFVzYWdlQnVpbGRlciwKICAgICAgICAgICAgcnRpTmVlZEJ1aWxkZXIsCiAgICAgICAgICAgIF9maWVsZEFuYWx5c2lzLAogICAgICAgICAgICBfbmF0aXZlUmVzb2x1dGlvbkVucXVldWVyLAogICAgICAgICAgICBub1N1Y2hNZXRob2RSZWdpc3RyeSwKICAgICAgICAgICAgYW5ub3RhdGlvbnNEYXRhQnVpbGRlciwKICAgICAgICAgICAgY29uc3QgU3Ryb25nTW9kZVdvcmxkU3RyYXRlZ3koKSwKICAgICAgICAgICAgY2xhc3NIaWVyYXJjaHlCdWlsZGVyLAogICAgICAgICAgICBjbGFzc1F1ZXJpZXMpLAogICAgICAgIG5ldyBLZXJuZWxXb3JrSXRlbUJ1aWxkZXIoCiAgICAgICAgICAgIF9jb21waWxlclRhc2ssCiAgICAgICAgICAgIGVsZW1lbnRNYXAsCiAgICAgICAgICAgIG5hdGl2ZUJhc2ljRGF0YSwKICAgICAgICAgICAgbmF0aXZlRGF0YUJ1aWxkZXIsCiAgICAgICAgICAgIGFubm90YXRpb25zRGF0YUJ1aWxkZXIsCiAgICAgICAgICAgIGltcGFjdFRyYW5zZm9ybWVyLAogICAgICAgICAgICBjbG9zdXJlTW9kZWxzLAogICAgICAgICAgICBjb21waWxlci5pbXBhY3RDYWNoZSwKICAgICAgICAgICAgX2ZpZWxkQW5hbHlzaXMsCiAgICAgICAgICAgIF9tb2R1bGFyU3RyYXRlZ3ksCiAgICAgICAgICAgIF9pckFubm90YXRpb25EYXRhKSwKICAgICAgICBhbm5vdGF0aW9uc0RhdGEpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBvblJlc29sdXRpb25FbmQoKSB7CiAgICBhc3NlcnQoX2Fubm90YXRpb25Qcm9jZXNzb3IgIT0gbnVsbCwKICAgICAgICAiQW5ub3RhdGlvblByb2Nlc3NvciBoYXMgbm90IGJlZW4gY3JlYXRlZC4iKTsKICAgIF9hbm5vdGF0aW9uUHJvY2Vzc29yLnByb2Nlc3NKc0ludGVyb3BBbm5vdGF0aW9ucygKICAgICAgICBuYXRpdmVCYXNpY0RhdGEsIG5hdGl2ZURhdGFCdWlsZGVyKTsKICB9CgogIEBvdmVycmlkZQogIE5hdGl2ZUJhc2ljRGF0YSBnZXQgbmF0aXZlQmFzaWNEYXRhIHsKICAgIGlmIChfbmF0aXZlQmFzaWNEYXRhID09IG51bGwpIHsKICAgICAgX25hdGl2ZUJhc2ljRGF0YSA9IG5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIuY2xvc2UoZWxlbWVudEVudmlyb25tZW50KTsKICAgICAgYXNzZXJ0KAogICAgICAgICAgX25hdGl2ZUJhc2ljRGF0YSAhPSBudWxsLAogICAgICAgICAgZmFpbGVkQXQoTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgICAgICJOYXRpdmVCYXNpY0RhdGEgaGFzIG5vdCBiZWVuIGNvbXB1dGVkIHlldC4iKSk7CiAgICB9CiAgICByZXR1cm4gX25hdGl2ZUJhc2ljRGF0YTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJMb2FkZWRMaWJyYXJpZXMoS2VybmVsUmVzdWx0IGtlcm5lbFJlc3VsdCkgewogICAgX2VsZW1lbnRNYXAuYWRkQ29tcG9uZW50KGtlcm5lbFJlc3VsdC5jb21wb25lbnQpOwogICAgaWYgKF9vcHRpb25zLnVzZUNGRUNvbnN0YW50cykgewogICAgICBfaXJBbm5vdGF0aW9uRGF0YSA9IHByb2Nlc3NBbm5vdGF0aW9ucyhuZXcgTW9kdWxhckNvcmUoCiAgICAgICAgICBrZXJuZWxSZXN1bHQuY29tcG9uZW50LCBfZWxlbWVudE1hcC5jb25zdGFudEV2YWx1YXRvcikpOwogICAgfQogICAgX2Fubm90YXRpb25Qcm9jZXNzb3IgPSBuZXcgS2VybmVsQW5ub3RhdGlvblByb2Nlc3NvcigKICAgICAgICBlbGVtZW50TWFwLCBuYXRpdmVCYXNpY0RhdGFCdWlsZGVyLCBfaXJBbm5vdGF0aW9uRGF0YSk7CiAgICBmb3IgKFVyaSB1cmkgaW4ga2VybmVsUmVzdWx0LmxpYnJhcmllcykgewogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnkgPSBlbGVtZW50RW52aXJvbm1lbnQubG9va3VwTGlicmFyeSh1cmkpOwogICAgICBpZiAobWF5YmVFbmFibGVOYXRpdmUobGlicmFyeS5jYW5vbmljYWxVcmkpKSB7CiAgICAgICAgX2Fubm90YXRpb25Qcm9jZXNzb3IuZXh0cmFjdE5hdGl2ZUFubm90YXRpb25zKGxpYnJhcnkpOwogICAgICB9CiAgICAgIF9hbm5vdGF0aW9uUHJvY2Vzc29yLmV4dHJhY3RKc0ludGVyb3BBbm5vdGF0aW9ucyhsaWJyYXJ5KTsKICAgICAgaWYgKHVyaSA9PSBVcmlzLmRhcnRfaHRtbCkgewogICAgICAgIF9iYWNrZW5kVXNhZ2VCdWlsZGVyLnJlZ2lzdGVySHRtbElzTG9hZGVkKCk7CiAgICAgIH0KICAgIH0KICB9CgogIElyQW5ub3RhdGlvbkRhdGEgZ2V0IGlyQW5ub3RhdGlvbkRhdGFGb3JUZXN0aW5nID0+IF9pckFubm90YXRpb25EYXRhOwoKICBNb2R1bGFyU3RyYXRlZ3kgZ2V0IG1vZHVsYXJTdHJhdGVneUZvclRlc3RpbmcgPT4gX21vZHVsYXJTdHJhdGVneTsKCiAgQG92ZXJyaWRlCiAgRWxlbWVudEVudmlyb25tZW50IGdldCBlbGVtZW50RW52aXJvbm1lbnQgPT4gX2VsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50OwoKICBAb3ZlcnJpZGUKICBDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHMgPT4gX2VsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7CgogIEtlcm5lbFRvRWxlbWVudE1hcCBnZXQgZWxlbWVudE1hcCA9PiBfZWxlbWVudE1hcDsKCiAgQG92ZXJyaWRlCiAgRGVmZXJyZWRMb2FkVGFzayBjcmVhdGVEZWZlcnJlZExvYWRUYXNrKENvbXBpbGVyIGNvbXBpbGVyKSA9PgogICAgICBuZXcgS2VybmVsRGVmZXJyZWRMb2FkVGFzayhjb21waWxlciwgX2VsZW1lbnRNYXApOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvbkVudGl0eSBjb21wdXRlTWFpbihXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlcikgewogICAgcmV0dXJuIGVsZW1lbnRFbnZpcm9ubWVudC5tYWluRnVuY3Rpb247CiAgfQoKICBSdW50aW1lVHlwZXNOZWVkQnVpbGRlciBfY3JlYXRlUnVudGltZVR5cGVzTmVlZEJ1aWxkZXIoKSB7CiAgICByZXR1cm4gX3J1bnRpbWVUeXBlc05lZWRCdWlsZGVyID8/PSBfb3B0aW9ucy5kaXNhYmxlUnRpT3B0aW1pemF0aW9uCiAgICAgICAgPyBjb25zdCBUcml2aWFsUnVudGltZVR5cGVzTmVlZEJ1aWxkZXIoKQogICAgICAgIDogbmV3IFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVySW1wbChlbGVtZW50RW52aXJvbm1lbnQpOwogIH0KCiAgUnVudGltZVR5cGVzTmVlZEJ1aWxkZXIgZ2V0IHJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyRm9yVGVzdGluZyA9PgogICAgICBfcnVudGltZVR5cGVzTmVlZEJ1aWxkZXI7CgogIEBvdmVycmlkZQogIFNvdXJjZVNwYW4gc3BhbkZyb21TcGFubmFibGUoU3Bhbm5hYmxlIHNwYW5uYWJsZSwgRW50aXR5IGN1cnJlbnRFbGVtZW50KSB7CiAgICByZXR1cm4gX2VsZW1lbnRNYXAuZ2V0U291cmNlU3BhbihzcGFubmFibGUsIGN1cnJlbnRFbGVtZW50KTsKICB9Cn0KCmNsYXNzIEtlcm5lbFdvcmtJdGVtQnVpbGRlciBpbXBsZW1lbnRzIFdvcmtJdGVtQnVpbGRlciB7CiAgZmluYWwgQ29tcGlsZXJUYXNrIF9jb21waWxlclRhc2s7CiAgZmluYWwgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBfZWxlbWVudE1hcDsKICBmaW5hbCBJbXBhY3RUcmFuc2Zvcm1lciBfaW1wYWN0VHJhbnNmb3JtZXI7CiAgZmluYWwgTmF0aXZlTWVtYmVyUmVzb2x2ZXIgX25hdGl2ZU1lbWJlclJlc29sdmVyOwogIGZpbmFsIEFubm90YXRpb25zRGF0YUJ1aWxkZXIgX2Fubm90YXRpb25zRGF0YUJ1aWxkZXI7CiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwgQ2xvc3VyZVNjb3BlTW9kZWw+IF9jbG9zdXJlTW9kZWxzOwogIGZpbmFsIE1hcDxFbnRpdHksIFdvcmxkSW1wYWN0PiBfaW1wYWN0Q2FjaGU7CiAgZmluYWwgS0ZpZWxkQW5hbHlzaXMgX2ZpZWxkQW5hbHlzaXM7CiAgZmluYWwgTW9kdWxhclN0cmF0ZWd5IF9tb2R1bGFyU3RyYXRlZ3k7CiAgZmluYWwgSXJBbm5vdGF0aW9uRGF0YSBfaXJBbm5vdGF0aW9uRGF0YTsKCiAgS2VybmVsV29ya0l0ZW1CdWlsZGVyKAogICAgICB0aGlzLl9jb21waWxlclRhc2ssCiAgICAgIHRoaXMuX2VsZW1lbnRNYXAsCiAgICAgIE5hdGl2ZUJhc2ljRGF0YSBuYXRpdmVCYXNpY0RhdGEsCiAgICAgIE5hdGl2ZURhdGFCdWlsZGVyIG5hdGl2ZURhdGFCdWlsZGVyLAogICAgICB0aGlzLl9hbm5vdGF0aW9uc0RhdGFCdWlsZGVyLAogICAgICB0aGlzLl9pbXBhY3RUcmFuc2Zvcm1lciwKICAgICAgdGhpcy5fY2xvc3VyZU1vZGVscywKICAgICAgdGhpcy5faW1wYWN0Q2FjaGUsCiAgICAgIHRoaXMuX2ZpZWxkQW5hbHlzaXMsCiAgICAgIHRoaXMuX21vZHVsYXJTdHJhdGVneSwKICAgICAgdGhpcy5faXJBbm5vdGF0aW9uRGF0YSkKICAgICAgOiBfbmF0aXZlTWVtYmVyUmVzb2x2ZXIgPSBuZXcgS2VybmVsTmF0aXZlTWVtYmVyUmVzb2x2ZXIoCiAgICAgICAgICAgIF9lbGVtZW50TWFwLCBuYXRpdmVCYXNpY0RhdGEsIG5hdGl2ZURhdGFCdWlsZGVyKTsKCiAgQG92ZXJyaWRlCiAgV29ya0l0ZW0gY3JlYXRlV29ya0l0ZW0oTWVtYmVyRW50aXR5IGVudGl0eSkgewogICAgcmV0dXJuIG5ldyBLZXJuZWxXb3JrSXRlbSgKICAgICAgICBfY29tcGlsZXJUYXNrLAogICAgICAgIF9lbGVtZW50TWFwLAogICAgICAgIF9pbXBhY3RUcmFuc2Zvcm1lciwKICAgICAgICBfbmF0aXZlTWVtYmVyUmVzb2x2ZXIsCiAgICAgICAgX2Fubm90YXRpb25zRGF0YUJ1aWxkZXIsCiAgICAgICAgZW50aXR5LAogICAgICAgIF9jbG9zdXJlTW9kZWxzLAogICAgICAgIF9pbXBhY3RDYWNoZSwKICAgICAgICBfZmllbGRBbmFseXNpcywKICAgICAgICBfbW9kdWxhclN0cmF0ZWd5LAogICAgICAgIF9pckFubm90YXRpb25EYXRhKTsKICB9Cn0KCmNsYXNzIEtlcm5lbFdvcmtJdGVtIGltcGxlbWVudHMgV29ya0l0ZW0gewogIGZpbmFsIENvbXBpbGVyVGFzayBfY29tcGlsZXJUYXNrOwogIGZpbmFsIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgX2VsZW1lbnRNYXA7CiAgZmluYWwgSW1wYWN0VHJhbnNmb3JtZXIgX2ltcGFjdFRyYW5zZm9ybWVyOwogIGZpbmFsIE5hdGl2ZU1lbWJlclJlc29sdmVyIF9uYXRpdmVNZW1iZXJSZXNvbHZlcjsKICBmaW5hbCBBbm5vdGF0aW9uc0RhdGFCdWlsZGVyIF9hbm5vdGF0aW9uc0RhdGFCdWlsZGVyOwogIEBvdmVycmlkZQogIGZpbmFsIE1lbWJlckVudGl0eSBlbGVtZW50OwogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIENsb3N1cmVTY29wZU1vZGVsPiBfY2xvc3VyZU1vZGVsczsKICBmaW5hbCBNYXA8RW50aXR5LCBXb3JsZEltcGFjdD4gX2ltcGFjdENhY2hlOwogIGZpbmFsIEtGaWVsZEFuYWx5c2lzIF9maWVsZEFuYWx5c2lzOwogIGZpbmFsIE1vZHVsYXJTdHJhdGVneSBfbW9kdWxhclN0cmF0ZWd5OwogIGZpbmFsIElyQW5ub3RhdGlvbkRhdGEgX2lyQW5ub3RhdGlvbkRhdGE7CgogIEtlcm5lbFdvcmtJdGVtKAogICAgICB0aGlzLl9jb21waWxlclRhc2ssCiAgICAgIHRoaXMuX2VsZW1lbnRNYXAsCiAgICAgIHRoaXMuX2ltcGFjdFRyYW5zZm9ybWVyLAogICAgICB0aGlzLl9uYXRpdmVNZW1iZXJSZXNvbHZlciwKICAgICAgdGhpcy5fYW5ub3RhdGlvbnNEYXRhQnVpbGRlciwKICAgICAgdGhpcy5lbGVtZW50LAogICAgICB0aGlzLl9jbG9zdXJlTW9kZWxzLAogICAgICB0aGlzLl9pbXBhY3RDYWNoZSwKICAgICAgdGhpcy5fZmllbGRBbmFseXNpcywKICAgICAgdGhpcy5fbW9kdWxhclN0cmF0ZWd5LAogICAgICB0aGlzLl9pckFubm90YXRpb25EYXRhKTsKCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgcnVuKCkgewogICAgcmV0dXJuIF9jb21waWxlclRhc2subWVhc3VyZSgoKSB7CiAgICAgIGlyLk1lbWJlciBub2RlID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyTm9kZShlbGVtZW50KTsKICAgICAgX25hdGl2ZU1lbWJlclJlc29sdmVyLnJlc29sdmVOYXRpdmVNZW1iZXIobm9kZSwgX2lyQW5ub3RhdGlvbkRhdGEpOwoKICAgICAgTGlzdDxQcmFnbWFBbm5vdGF0aW9uRGF0YT4gcHJhZ21hQW5ub3RhdGlvbkRhdGEgPQogICAgICAgICAgX21vZHVsYXJTdHJhdGVneS5nZXRQcmFnbWFBbm5vdGF0aW9uRGF0YShub2RlKTsKCiAgICAgIEVudW1TZXQ8UHJhZ21hQW5ub3RhdGlvbj4gYW5ub3RhdGlvbnMgPSBwcm9jZXNzTWVtYmVyQW5ub3RhdGlvbnMoCiAgICAgICAgICBfZWxlbWVudE1hcC5vcHRpb25zLAogICAgICAgICAgX2VsZW1lbnRNYXAucmVwb3J0ZXIsCiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRNZW1iZXJOb2RlKGVsZW1lbnQpLAogICAgICAgICAgcHJhZ21hQW5ub3RhdGlvbkRhdGEpOwogICAgICBfYW5ub3RhdGlvbnNEYXRhQnVpbGRlci5yZWdpc3RlclByYWdtYUFubm90YXRpb25zKGVsZW1lbnQsIGFubm90YXRpb25zKTsKCiAgICAgIE1vZHVsYXJNZW1iZXJEYXRhIG1vZHVsYXJNZW1iZXJEYXRhID0KICAgICAgICAgIF9tb2R1bGFyU3RyYXRlZ3kuZ2V0TW9kdWxhck1lbWJlckRhdGEobm9kZSwgYW5ub3RhdGlvbnMpOwogICAgICBTY29wZU1vZGVsIHNjb3BlTW9kZWwgPSBtb2R1bGFyTWVtYmVyRGF0YS5zY29wZU1vZGVsOwogICAgICBpZiAoc2NvcGVNb2RlbC5jbG9zdXJlU2NvcGVNb2RlbCAhPSBudWxsKSB7CiAgICAgICAgX2Nsb3N1cmVNb2RlbHNbZWxlbWVudF0gPSBzY29wZU1vZGVsLmNsb3N1cmVTY29wZU1vZGVsOwogICAgICB9CiAgICAgIGlmIChlbGVtZW50LmlzRmllbGQgJiYgIWVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgIF9maWVsZEFuYWx5c2lzLnJlZ2lzdGVyU3RhdGljRmllbGQoCiAgICAgICAgICAgIGVsZW1lbnQsIHNjb3BlTW9kZWwuaW5pdGlhbGl6ZXJDb21wbGV4aXR5KTsKICAgICAgfQogICAgICBJbXBhY3RCdWlsZGVyRGF0YSBpbXBhY3RCdWlsZGVyRGF0YSA9IG1vZHVsYXJNZW1iZXJEYXRhLmltcGFjdEJ1aWxkZXJEYXRhOwogICAgICByZXR1cm4gX2NvbXBpbGVyVGFzay5tZWFzdXJlU3VidGFzaygnd29ybGRJbXBhY3QnLCAoKSB7CiAgICAgICAgUmVzb2x1dGlvbkltcGFjdCBpbXBhY3QgPSBfZWxlbWVudE1hcC5jb21wdXRlV29ybGRJbXBhY3QoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgIHNjb3BlTW9kZWwudmFyaWFibGVTY29wZU1vZGVsLAogICAgICAgICAgICBuZXcgU2V0PFByYWdtYUFubm90YXRpb24+LmZyb20oCiAgICAgICAgICAgICAgICBhbm5vdGF0aW9ucy5pdGVyYWJsZShQcmFnbWFBbm5vdGF0aW9uLnZhbHVlcykpLAogICAgICAgICAgICBpbXBhY3RCdWlsZGVyRGF0YTogaW1wYWN0QnVpbGRlckRhdGEpOwogICAgICAgIFdvcmxkSW1wYWN0IHdvcmxkSW1wYWN0ID0KICAgICAgICAgICAgX2ltcGFjdFRyYW5zZm9ybWVyLnRyYW5zZm9ybVJlc29sdXRpb25JbXBhY3QoaW1wYWN0KTsKICAgICAgICBpZiAoX2ltcGFjdENhY2hlICE9IG51bGwpIHsKICAgICAgICAgIF9pbXBhY3RDYWNoZVtlbGVtZW50XSA9IHdvcmxkSW1wYWN0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gd29ybGRJbXBhY3Q7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnS2VybmVsV29ya0l0ZW0oJGVsZW1lbnQpJzsKfQoKLy8vIElmIGB0cnVlYCBrZXJuZWwgaW1wYWN0cyBhcmUgY29tcHV0ZWQgYXMgW0ltcGFjdERhdGFdIGRpcmVjdGx5IG9uIGtlcm5lbAovLy8gYW5kIGNvbnZlcnRlZCB0byB0aGUgSyBtb2RlbCBhZnRlcndhcmRzLiBUaGlzIGlzIGEgcHJlLXN0ZXAgdG8gbW9kdWxhcml6aW5nCi8vLyB0aGUgd29ybGQgaW1wYWN0IGNvbXB1dGF0aW9uLgpib29sIHVzZUltcGFjdERhdGFGb3JUZXN0aW5nID0gZmFsc2U7CgpjbGFzcyBLZXJuZWxNb2R1bGFyU3RyYXRlZ3kgZXh0ZW5kcyBNb2R1bGFyU3RyYXRlZ3kgewogIGZpbmFsIENvbXBpbGVyVGFzayBfY29tcGlsZXJUYXNrOwogIGZpbmFsIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgX2VsZW1lbnRNYXA7CgogIEtlcm5lbE1vZHVsYXJTdHJhdGVneSh0aGlzLl9jb21waWxlclRhc2ssIHRoaXMuX2VsZW1lbnRNYXApOwoKICBAb3ZlcnJpZGUKICBMaXN0PFByYWdtYUFubm90YXRpb25EYXRhPiBnZXRQcmFnbWFBbm5vdGF0aW9uRGF0YShpci5NZW1iZXIgbm9kZSkgewogICAgaWYgKF9lbGVtZW50TWFwLm9wdGlvbnMudXNlQ0ZFQ29uc3RhbnRzKSB7CiAgICAgIHJldHVybiBjb21wdXRlUHJhZ21hQW5ub3RhdGlvbkRhdGFGcm9tSXIobm9kZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY29tcHV0ZVByYWdtYUFubm90YXRpb25EYXRhKF9lbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLAogICAgICAgICAgX2VsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50LCBfZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTW9kdWxhck1lbWJlckRhdGEgZ2V0TW9kdWxhck1lbWJlckRhdGEoCiAgICAgIGlyLk1lbWJlciBub2RlLCBFbnVtU2V0PFByYWdtYUFubm90YXRpb24+IGFubm90YXRpb25zKSB7CiAgICBTY29wZU1vZGVsIHNjb3BlTW9kZWwgPSBfY29tcGlsZXJUYXNrLm1lYXN1cmVTdWJ0YXNrKCdjbG9zdXJlcycsCiAgICAgICAgKCkgPT4gbmV3IFNjb3BlTW9kZWwuZnJvbShub2RlLCBfZWxlbWVudE1hcC5jb25zdGFudEV2YWx1YXRvcikpOwogICAgSW1wYWN0QnVpbGRlckRhdGEgaW1wYWN0QnVpbGRlckRhdGE7CiAgICBpZiAodXNlSW1wYWN0RGF0YUZvclRlc3RpbmcpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQWx3YXlzIGNyZWF0ZSBhbmQgdXNlIHRoZSBbSW1wYWN0QnVpbGRlckRhdGFdLgogICAgICAvLyBDdXJyZW50bHkgaXQgaXMgYSBiaXQgaGFsZi1iYWtlZCBzaW5jZSB3ZSBjYW5ub3QgY29tcHV0ZSBkYXRhIHRoYXQKICAgICAgLy8gZGVwZW5kIG9uIG1ldGFkYXRhLCBzbyB0aGVzZSBwYXJ0cyBvZiB0aGUgaW1wYWN0IGRhdGEgbmVlZCB0byBiZQogICAgICAvLyBjb21wdXRlZCBkdXJpbmcgY29udmVyc2lvbiB0byBbUmVzb2x1dGlvbkltcGFjdF0uCiAgICAgIGltcGFjdEJ1aWxkZXJEYXRhID0gX2NvbXBpbGVyVGFzay5tZWFzdXJlU3VidGFzaygnd29ybGRJbXBhY3QnLCAoKSB7CiAgICAgICAgSW1wYWN0QnVpbGRlciBidWlsZGVyID0gbmV3IEltcGFjdEJ1aWxkZXIoX2VsZW1lbnRNYXAudHlwZUVudmlyb25tZW50LAogICAgICAgICAgICBfZWxlbWVudE1hcC5jbGFzc0hpZXJhcmNoeSwgc2NvcGVNb2RlbC52YXJpYWJsZVNjb3BlTW9kZWwsCiAgICAgICAgICAgIHVzZUFzc2VydHM6IF9lbGVtZW50TWFwLm9wdGlvbnMuZW5hYmxlVXNlckFzc2VydGlvbnMsCiAgICAgICAgICAgIGluZmVyRWZmZWN0aXZlbHlGaW5hbFZhcmlhYmxlVHlwZXM6CiAgICAgICAgICAgICAgICAhYW5ub3RhdGlvbnMuY29udGFpbnMoUHJhZ21hQW5ub3RhdGlvbi5kaXNhYmxlRmluYWwpKTsKICAgICAgICByZXR1cm4gYnVpbGRlci5jb21wdXRlSW1wYWN0KG5vZGUpOwogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBuZXcgTW9kdWxhck1lbWJlckRhdGEoc2NvcGVNb2RlbCwgaW1wYWN0QnVpbGRlckRhdGEpOwogIH0KfQqB2ABOTjwBKgEoARklKSQfHiIbNiQaJSQhNBwdKyksKzZAMC4pNTE2KD8iGis0KSgfHRsgFgFOIDg8KCQcHiY0ATIBQQEkJgEsQQEsATYBQihGASEBPCcBDC0BPEIjEktOPjlGBAFFIQFAAQwdTk9GQUsBNCw/UAQBNyYqOjcjOkJRFg5AFCFOLzgIBAEMLy5PHU8+GhwYG0lFThwYGR8vRDJBNCZPTDA/RTkcGBEZIx4rGB8aNChCIw4bKB4gHBUdJCIiLyccKCgWGCAfHB0fJCIcHCciJC0jGyMbGB0fJB8bIhweIBoEAQwbKTY2LQQBDCgkSw4kKj4GHQQBDDw2JD5DBjpALkU1QAhBIzUIBgQBSAFFAQxPAQxDATQBDEA5AQxBLAQBPUgxPwQBQyABDE1BBAIBOSQsLjQ4PS8nKiwBGRoYJyskHxsZGx0eQD4BDDEfFxUcHyEQGBYYGhwEAgErJCwuNDgMHj0vJyosARIaGB8iJBQbGRsdHwEMFiY7SgE4OgFIHyAuIU8BLEQ8MkAIOiw4CFE+QhUrLEAzIkIkLwocCggEAQwzAgFNUCImATYkLAE/AQxHLzYNRUgGBAEMKj9FSSkjTUxKO0tPR0IwRywKBkEEAgEwcGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2tlcm5lbF9zdHJhdGVneS5kYXJ0MHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2tlcm5lbC9sb2FkZXIuZGFydJxILy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5saWJyYXJ5X2xvYWRlcjsKCmltcG9ydCAnZGFydDphc3luYyc7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvdXRpbHMuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2JpbmFyeS9hc3RfZnJvbV9iaW5hcnkuZGFydCcgc2hvdyBCaW5hcnlCdWlsZGVyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2JpbmFyeS9hc3RfdG9fYmluYXJ5LmRhcnQnIHNob3cgQmluYXJ5UHJpbnRlcjsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIGFzIGZlOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2tlcm5lbC5kYXJ0JyBoaWRlIExpYnJhcnlEZXBlbmRlbmN5LCBDb21iaW5hdG9yOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3RhcmdldC90YXJnZXRzLmRhcnQnIGhpZGUgRGlhZ25vc3RpY1JlcG9ydGVyOwoKaW1wb3J0ICcuLi8uLi9jb21waWxlcl9uZXcuZGFydCcgYXMgYXBpOwppbXBvcnQgJy4uL2NvbW1vbi90YXNrcy5kYXJ0JyBzaG93IENvbXBpbGVyVGFzaywgTWVhc3VyZXI7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdXRpbC9zaW5rX2FkYXB0ZXIuZGFydCc7CgppbXBvcnQgJ2Zyb250X2VuZF9hZGFwdGVyLmRhcnQnOwppbXBvcnQgJ2RhcnQyanNfdGFyZ2V0LmRhcnQnIHNob3cgRGFydDJqc1RhcmdldDsKCi8vLyBBIHRhc2sgdGhhdCBwcm9kdWNlcyB0aGUga2VybmVsIElSIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhcHBsaWNhdGlvbi4KLy8vCi8vLyBJdCBzdXBwb3J0cyBsb2FkaW5nIGJvdGggLmRhcnQgc291cmNlIGZpbGVzIG9yIHByZS1jb21waWxlZCAuZGlsbCBmaWxlcy4KLy8vIFdoZW4gZ2l2ZW4gLmRhcnQgc291cmNlIGZpbGVzLCBpdCBpbnZva2VzIHRoZSBjb21tb24gZnJvbnQtZW5kIChDRkUpCi8vLyB0byBwcm9kdWNlIHRoZSBjb3JyZXNwb25kaW5nIGtlcm5lbCBJUiByZXByZXNlbnRhdGlvbi4KY2xhc3MgS2VybmVsTG9hZGVyVGFzayBleHRlbmRzIENvbXBpbGVyVGFzayB7CiAgZmluYWwgRGlhZ25vc3RpY1JlcG9ydGVyIF9yZXBvcnRlcjsKCiAgZmluYWwgYXBpLkNvbXBpbGVySW5wdXQgX2NvbXBpbGVySW5wdXQ7CiAgZmluYWwgYXBpLkNvbXBpbGVyT3V0cHV0IF9jb21waWxlck91dHB1dDsKCiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwoKICAvLy8gU2hhcmVkIHN0YXRlIGJldHdlZW4gY29tcGlsYXRpb25zLgogIGZlLkluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZSBpbml0aWFsaXplZENvbXBpbGVyU3RhdGU7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gIzM0OTQyIGlzIGZpeGVkLgogIC8vLyBGb3JjZSBpbi1tZW1vcnkgc2VyaWFsaXphdGlvbi9kZXNlcmlhbGl6YXRpb24gb2YgdGhlIGxvYWRlZCBjb21wb25lbnQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmb3IgdGVzdGluZy4KICBib29sIGZvcmNlU2VyaWFsaXphdGlvbiA9IGZhbHNlOwoKICBLZXJuZWxMb2FkZXJUYXNrKHRoaXMuX29wdGlvbnMsIHRoaXMuX2NvbXBpbGVySW5wdXQsIHRoaXMuX2NvbXBpbGVyT3V0cHV0LAogICAgICB0aGlzLl9yZXBvcnRlciwgTWVhc3VyZXIgbWVhc3VyZXIpCiAgICAgIDogaW5pdGlhbGl6ZWRDb21waWxlclN0YXRlID0gX29wdGlvbnMua2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRlLAogICAgICAgIHN1cGVyKG1lYXN1cmVyKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+ICdrZXJuZWwgbG9hZGVyJzsKCiAgLy8vIExvYWRzIGFuIGVudGlyZSBLZXJuZWwgW0NvbXBvbmVudF0gZnJvbSBhIGZpbGUgb24gZGlzay4KICBGdXR1cmU8S2VybmVsUmVzdWx0PiBsb2FkKFVyaSByZXNvbHZlZFVyaSkgewogICAgcmV0dXJuIG1lYXN1cmUoKCkgYXN5bmMgewogICAgICBTdHJpbmcgdGFyZ2V0TmFtZSA9CiAgICAgICAgICBfb3B0aW9ucy5jb21waWxlRm9yU2VydmVyID8gImRhcnQyanNfc2VydmVyIiA6ICJkYXJ0MmpzIjsKICAgICAgU3RyaW5nIHBsYXRmb3JtID0gJyR7dGFyZ2V0TmFtZX1fcGxhdGZvcm0uZGlsbCc7CiAgICAgIHZhciBpc0RpbGwgPSByZXNvbHZlZFVyaS5wYXRoLmVuZHNXaXRoKCcuZGlsbCcpOwogICAgICBpci5Db21wb25lbnQgY29tcG9uZW50OwogICAgICBpZiAoaXNEaWxsKSB7CiAgICAgICAgY29tcG9uZW50ID0gbmV3IGlyLkNvbXBvbmVudCgpOwogICAgICAgIEZ1dHVyZTx2b2lkPiByZWFkKFVyaSB1cmkpIGFzeW5jIHsKICAgICAgICAgIGFwaS5JbnB1dCBpbnB1dCA9IGF3YWl0IF9jb21waWxlcklucHV0LnJlYWRGcm9tVXJpKHVyaSwKICAgICAgICAgICAgICBpbnB1dEtpbmQ6IGFwaS5JbnB1dEtpbmQuYmluYXJ5KTsKICAgICAgICAgIG5ldyBCaW5hcnlCdWlsZGVyKGlucHV0LmRhdGEpLnJlYWRDb21wb25lbnQoY29tcG9uZW50KTsKICAgICAgICB9CgogICAgICAgIGF3YWl0IHJlYWQocmVzb2x2ZWRVcmkpOwogICAgICAgIGlmIChfb3B0aW9ucy5kaWxsRGVwZW5kZW5jaWVzICE9IG51bGwpIHsKICAgICAgICAgIC8vIE1vZHVsYXIgY29tcGlsZXMgZG8gbm90IGluY2x1ZGUgdGhlIHBsYXRmb3JtIG9uIHRoZSBpbnB1dCBkaWxsCiAgICAgICAgICAvLyBlaXRoZXIuCiAgICAgICAgICBpZiAoX29wdGlvbnMucGxhdGZvcm1CaW5hcmllcyAhPSBudWxsKSB7CiAgICAgICAgICAgIGF3YWl0IHJlYWQoX29wdGlvbnMucGxhdGZvcm1CaW5hcmllcy5yZXNvbHZlKHBsYXRmb3JtKSk7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKFVyaSBkZXBlbmRlbmN5IGluIF9vcHRpb25zLmRpbGxEZXBlbmRlbmNpZXMpIHsKICAgICAgICAgICAgYXdhaXQgcmVhZChkZXBlbmRlbmN5KTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFRoaXMgaXMgbm90IGV4cGVjdGVkIHRvIGJlIG51bGwgd2hlbiBjcmVhdGluZyBhIHdob2xlLXByb2dyYW0gLmRpbGwKICAgICAgICAvLyBmaWxlLCBidXQgbmVlZHMgdG8gYmUgY2hlY2tlZCBmb3IgbW9kdWxhciBpbnB1dHMuCiAgICAgICAgaWYgKGNvbXBvbmVudC5tYWluTWV0aG9kID09IG51bGwpIHsKICAgICAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IG1vdmUgdGhpcyBzbyB0aGF0IHdlIHVzZSB0aGUgc2FtZSBlcnJvciB0ZW1wbGF0ZQogICAgICAgICAgLy8gZnJvbSB0aGUgQ0ZFLgogICAgICAgICAgX3JlcG9ydGVyLnJlcG9ydEVycm9yKF9yZXBvcnRlci5jcmVhdGVNZXNzYWdlKE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgICBNZXNzYWdlS2luZC5HRU5FUklDLCB7J3RleHQnOiAiTm8gJ21haW4nIG1ldGhvZCBmb3VuZC4ifSkpOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIExpc3Q8VXJpPiBkZXBlbmRlbmNpZXMgPSBbXTsKICAgICAgICBpZiAoX29wdGlvbnMucGxhdGZvcm1CaW5hcmllcyAhPSBudWxsKSB7CiAgICAgICAgICBkZXBlbmRlbmNpZXMuYWRkKF9vcHRpb25zLnBsYXRmb3JtQmluYXJpZXMucmVzb2x2ZShwbGF0Zm9ybSkpOwogICAgICAgIH0KICAgICAgICBpZiAoX29wdGlvbnMuZGlsbERlcGVuZGVuY2llcyAhPSBudWxsKSB7CiAgICAgICAgICBkZXBlbmRlbmNpZXMuYWRkQWxsKF9vcHRpb25zLmRpbGxEZXBlbmRlbmNpZXMpOwogICAgICAgIH0KICAgICAgICBpbml0aWFsaXplZENvbXBpbGVyU3RhdGUgPSBmZS5pbml0aWFsaXplQ29tcGlsZXIoCiAgICAgICAgICAgIGluaXRpYWxpemVkQ29tcGlsZXJTdGF0ZSwKICAgICAgICAgICAgbmV3IERhcnQyanNUYXJnZXQodGFyZ2V0TmFtZSwgbmV3IFRhcmdldEZsYWdzKCkpLAogICAgICAgICAgICBfb3B0aW9ucy5saWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpLAogICAgICAgICAgICBkZXBlbmRlbmNpZXMsCiAgICAgICAgICAgIF9vcHRpb25zLnBhY2thZ2VDb25maWcsCiAgICAgICAgICAgIGV4cGVyaW1lbnRhbEZsYWdzOiBfb3B0aW9ucy5sYW5ndWFnZUV4cGVyaW1lbnRzKTsKICAgICAgICBjb21wb25lbnQgPSBhd2FpdCBmZS5jb21waWxlKAogICAgICAgICAgICBpbml0aWFsaXplZENvbXBpbGVyU3RhdGUsCiAgICAgICAgICAgIGZhbHNlLAogICAgICAgICAgICBuZXcgQ29tcGlsZXJGaWxlU3lzdGVtKF9jb21waWxlcklucHV0KSwKICAgICAgICAgICAgKGUpID0+IHJlcG9ydEZyb250RW5kTWVzc2FnZShfcmVwb3J0ZXIsIGUpLAogICAgICAgICAgICByZXNvbHZlZFVyaSk7CiAgICAgIH0KICAgICAgaWYgKGNvbXBvbmVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKCiAgICAgIGlmIChfb3B0aW9ucy5jZmVPbmx5KSB7CiAgICAgICAgbWVhc3VyZVN1YnRhc2soJ3NlcmlhbGl6ZSBkaWxsJywgKCkgewogICAgICAgICAgX3JlcG9ydGVyLmxvZygnV3JpdGluZyBkaWxsIHRvICR7X29wdGlvbnMub3V0cHV0VXJpfScpOwogICAgICAgICAgYXBpLkJpbmFyeU91dHB1dFNpbmsgZGlsbE91dHB1dCA9CiAgICAgICAgICAgICAgX2NvbXBpbGVyT3V0cHV0LmNyZWF0ZUJpbmFyeVNpbmsoX29wdGlvbnMub3V0cHV0VXJpKTsKICAgICAgICAgIEJpbmFyeU91dHB1dFNpbmtBZGFwdGVyIGlyU2luayA9CiAgICAgICAgICAgICAgbmV3IEJpbmFyeU91dHB1dFNpbmtBZGFwdGVyKGRpbGxPdXRwdXQpOwogICAgICAgICAgQmluYXJ5UHJpbnRlciBwcmludGVyID0gbmV3IEJpbmFyeVByaW50ZXIoaXJTaW5rKTsKICAgICAgICAgIHByaW50ZXIud3JpdGVDb21wb25lbnRGaWxlKGNvbXBvbmVudCk7CiAgICAgICAgICBpclNpbmsuY2xvc2UoKTsKICAgICAgICB9KTsKICAgICAgfQoKICAgICAgaWYgKGZvcmNlU2VyaWFsaXphdGlvbikgewogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gIzM0OTQyIGlzIGZpeGVkLgogICAgICAgIExpc3Q8aW50PiBkYXRhID0gc2VyaWFsaXplQ29tcG9uZW50KGNvbXBvbmVudCk7CiAgICAgICAgY29tcG9uZW50ID0gbmV3IGlyLkNvbXBvbmVudCgpOwogICAgICAgIG5ldyBCaW5hcnlCdWlsZGVyKGRhdGEpLnJlYWRDb21wb25lbnQoY29tcG9uZW50KTsKICAgICAgfQogICAgICByZXR1cm4gX3RvUmVzdWx0KGNvbXBvbmVudCk7CiAgICB9KTsKICB9CgogIEtlcm5lbFJlc3VsdCBfdG9SZXN1bHQoaXIuQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgVXJpIHJvb3RMaWJyYXJ5VXJpID0gbnVsbDsKICAgIEl0ZXJhYmxlPGlyLkxpYnJhcnk+IGxpYnJhcmllcyA9IGNvbXBvbmVudC5saWJyYXJpZXM7CiAgICBpZiAoY29tcG9uZW50Lm1haW5NZXRob2QgIT0gbnVsbCkgewogICAgICB2YXIgcm9vdCA9IGNvbXBvbmVudC5tYWluTWV0aG9kLmVuY2xvc2luZ0xpYnJhcnk7CiAgICAgIHJvb3RMaWJyYXJ5VXJpID0gcm9vdC5pbXBvcnRVcmk7CgogICAgICAvLyBGaWx0ZXIgdW5yZWFjaGFibGUgbGlicmFyaWVzOiBbQ29tcG9uZW50XSB3YXMgYnVpbHQgYnkgbGlua2luZyBpbiB0aGUKICAgICAgLy8gZW50aXJlIFNESyBsaWJyYXJpZXMsIG5vdCBhbGwgb2YgdGhlbSBhcmUgdXNlZC4gV2UgaW5jbHVkZSBhbnl0aGluZwogICAgICAvLyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIGBtYWluYC4gTm90ZSB0aGF0IGFsbCBpbnRlcm5hbCBsaWJyYXJpZXMgdGhhdAogICAgICAvLyB0aGUgY29tcGlsZXIgcmVsaWVzIG9uIGFyZSByZWFjaGFibGUgZnJvbSBgZGFydDpjb3JlYC4KICAgICAgdmFyIHNlZW4gPSBuZXcgU2V0PExpYnJhcnk+KCk7CiAgICAgIHNlYXJjaChpci5MaWJyYXJ5IGN1cnJlbnQpIHsKICAgICAgICBpZiAoIXNlZW4uYWRkKGN1cnJlbnQpKSByZXR1cm47CiAgICAgICAgZm9yIChpci5MaWJyYXJ5RGVwZW5kZW5jeSBkZXAgaW4gY3VycmVudC5kZXBlbmRlbmNpZXMpIHsKICAgICAgICAgIHNlYXJjaChkZXAudGFyZ2V0TGlicmFyeSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBzZWFyY2gocm9vdCk7CgogICAgICAvLyBMaWJyYXJpZXMgZGVwZW5kZW5jaWVzIGRvIG5vdCBzaG93IGltcGxpY2l0IGltcG9ydHMgdG8gYGRhcnQ6Y29yZWAuCiAgICAgIHZhciBkYXJ0Q29yZSA9IGNvbXBvbmVudC5saWJyYXJpZXMuZmlyc3RXaGVyZSgobGliKSB7CiAgICAgICAgcmV0dXJuIGxpYi5pbXBvcnRVcmkuc2NoZW1lID09ICdkYXJ0JyAmJiBsaWIuaW1wb3J0VXJpLnBhdGggPT0gJ2NvcmUnOwogICAgICB9KTsKICAgICAgc2VhcmNoKGRhcnRDb3JlKTsKCiAgICAgIGxpYnJhcmllcyA9IGxpYnJhcmllcy53aGVyZShzZWVuLmNvbnRhaW5zKTsKICAgIH0KICAgIHJldHVybiBuZXcgS2VybmVsUmVzdWx0KGNvbXBvbmVudCwgcm9vdExpYnJhcnlVcmksCiAgICAgICAgbGlicmFyaWVzLm1hcCgobGliKSA9PiBsaWIuaW1wb3J0VXJpKS50b0xpc3QoKSk7CiAgfQp9CgovLy8gUmVzdWx0IG9mIGludm9raW5nIHRoZSBDRkUgdG8gcHJvZHVjZSB0aGUga2VybmVsIElSLgpjbGFzcyBLZXJuZWxSZXN1bHQgewogIGZpbmFsIGlyLkNvbXBvbmVudCBjb21wb25lbnQ7CgogIC8vLyBUaGUgW1VyaV0gb2YgdGhlIHJvb3QgbGlicmFyeSBjb250YWluaW5nIG1haW4uCiAgZmluYWwgVXJpIHJvb3RMaWJyYXJ5VXJpOwoKICAvLy8gUmV0dXJucyB0aGUgW1VyaV1zIG9mIGFsbCBsaWJyYXJpZXMgdGhhdCBoYXZlIGJlZW4gbG9hZGVkIHRoYXQgYXJlCiAgLy8vIHJlYWNoYWJsZSBmcm9tIHRoZSBbcm9vdExpYnJhcnlVcmldLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgW2NvbXBvbmVudF0gbWF5IGNvbnRhaW4gc29tZSBsaWJyYXJpZXMgdGhhdCBhcmUgZXhjbHVkZWQgaGVyZS4KICBmaW5hbCBJdGVyYWJsZTxVcmk+IGxpYnJhcmllczsKCiAgS2VybmVsUmVzdWx0KHRoaXMuY29tcG9uZW50LCB0aGlzLnJvb3RMaWJyYXJ5VXJpLCB0aGlzLmxpYnJhcmllcykgewogICAgYXNzZXJ0KHJvb3RMaWJyYXJ5VXJpICE9IG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ3Jvb3Q9JHJvb3RMaWJyYXJ5VXJpLGxpYnJhcmllcz0ke2xpYnJhcmllc30nOwp9CoDEAE5OPAEgARUBOChIRgFASEUBKTsZGiQBITEBSgRNSTsuJgEqLAEiASk4ATxNBiAjAU0pTBkBDCYBPi8eGkQ3Nx4UKCtCMEIKASExTBUzRQw+JAwKAU89LE0bT0oXCg8lMUkKMToKOiY+MBokPiYmEzQ4GggqAR4uQixEKzc9MRoMCAEgQjgoOggjCAQBMx86KDgnAU9NTkAlIyhBJQoIARQBTTxPChgBMgY3OQQCATkVIAE1HAFJKwZPIQFGJAQBDEYCASdwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwvbG9hZGVyLmRhcnQ1c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc2VyaWFsaXphdGlvbi90YXNrLmRhcnSd8i8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X2Zyb21fYmluYXJ5LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2JpbmFyeS9hc3RfdG9fYmluYXJ5LmRhcnQnIGFzIGlyOwppbXBvcnQgJy4uLy4uL2NvbXBpbGVyX25ldy5kYXJ0JyBhcyBhcGk7CmltcG9ydCAnLi4vYmFja2VuZF9zdHJhdGVneS5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vY29kZWdlbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vdGFza3MuZGFydCc7CmltcG9ydCAnLi4vZGlhZ25vc3RpY3MvZGlhZ25vc3RpY19saXN0ZW5lci5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbnZpcm9ubWVudC5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW5mZXJyZWRfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9qc193b3JsZC5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvc2lua19hZGFwdGVyLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnOwppbXBvcnQgJ3NlcmlhbGl6YXRpb24uZGFydCc7Cgp2b2lkIHNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzKAogICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgRGF0YVNpbmsgc2luaykgewogIEpzQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQgPSByZXN1bHRzLmNsb3NlZFdvcmxkOwogIEluZmVycmVkRGF0YSBpbmZlcnJlZERhdGEgPSByZXN1bHRzLmluZmVycmVkRGF0YTsKICBjbG9zZWRXb3JsZC53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgaW5mZXJyZWREYXRhLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICByZXN1bHRzLndyaXRlVG9EYXRhU2luayhzaW5rLCBjbG9zZWRXb3JsZC5lbGVtZW50TWFwKTsKICBzaW5rLmNsb3NlKCk7Cn0KCkdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGRlc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMoCiAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucywKICAgIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwKICAgIEVudmlyb25tZW50IGVudmlyb25tZW50LAogICAgQWJzdHJhY3RWYWx1ZVN0cmF0ZWd5IGFic3RyYWN0VmFsdWVTdHJhdGVneSwKICAgIGlyLkNvbXBvbmVudCBjb21wb25lbnQsCiAgICBEYXRhU291cmNlIHNvdXJjZSkgewogIEpzQ2xvc2VkV29ybGQgbmV3Q2xvc2VkV29ybGQgPSBuZXcgSnNDbG9zZWRXb3JsZC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIG9wdGlvbnMsIHJlcG9ydGVyLCBlbnZpcm9ubWVudCwgYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5LCBjb21wb25lbnQsIHNvdXJjZSk7CiAgSW5mZXJyZWREYXRhIG5ld0luZmVycmVkRGF0YSA9CiAgICAgIG5ldyBJbmZlcnJlZERhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgbmV3Q2xvc2VkV29ybGQpOwogIHJldHVybiBuZXcgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMucmVhZEZyb21EYXRhU291cmNlKAogICAgICBzb3VyY2UsIG5ld0Nsb3NlZFdvcmxkLmVsZW1lbnRNYXAsIG5ld0Nsb3NlZFdvcmxkLCBuZXdJbmZlcnJlZERhdGEpOwp9CgpjbGFzcyBTZXJpYWxpemF0aW9uVGFzayBleHRlbmRzIENvbXBpbGVyVGFzayB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciBfcmVwb3J0ZXI7CiAgZmluYWwgYXBpLkNvbXBpbGVySW5wdXQgX3Byb3ZpZGVyOwogIGZpbmFsIGFwaS5Db21waWxlck91dHB1dCBfb3V0cHV0UHJvdmlkZXI7CgogIFNlcmlhbGl6YXRpb25UYXNrKHRoaXMuX29wdGlvbnMsIHRoaXMuX3JlcG9ydGVyLCB0aGlzLl9wcm92aWRlciwKICAgICAgdGhpcy5fb3V0cHV0UHJvdmlkZXIsIE1lYXN1cmVyIG1lYXN1cmVyKQogICAgICA6IHN1cGVyKG1lYXN1cmVyKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+ICdTZXJpYWxpemF0aW9uJzsKCiAgdm9pZCBzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlKEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMpIHsKICAgIG1lYXN1cmVTdWJ0YXNrKCdzZXJpYWxpemUgZGlsbCcsICgpIHsKICAgICAgLy8gVE9ETyhzaWdtdW5kKTogcmVtb3ZlIGVudGlyZWx5OiB3ZSB3aWxsIGRvIHRoaXMgaW1tZWRpYXRlbHkgYXMgc29vbiBhcwogICAgICAvLyB3ZSBnZXQgdGhlIGNvbXBvbmVudCBpbiB0aGUga2VybmVsL2xvYWRlci5kYXJ0IHRhc2sgb25jZSB3ZSByZWZhY3RvcgogICAgICAvLyBob3cgd2UgYXBwbHkgb3VyIG1vZHVsYXIga2VybmVsIHRyYW5zZm9ybWF0aW9uIGZvciBzdXBlciBtaXhpbiBjYWxscy4KICAgICAgX3JlcG9ydGVyLmxvZygnV3JpdGluZyBkaWxsIHRvICR7X29wdGlvbnMub3V0cHV0VXJpfScpOwogICAgICBhcGkuQmluYXJ5T3V0cHV0U2luayBkaWxsT3V0cHV0ID0KICAgICAgICAgIF9vdXRwdXRQcm92aWRlci5jcmVhdGVCaW5hcnlTaW5rKF9vcHRpb25zLm91dHB1dFVyaSk7CiAgICAgIEpzQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQgPSByZXN1bHRzLmNsb3NlZFdvcmxkOwogICAgICBpci5Db21wb25lbnQgY29tcG9uZW50ID0gY2xvc2VkV29ybGQuZWxlbWVudE1hcC5wcm9ncmFtRW52Lm1haW5Db21wb25lbnQ7CiAgICAgIEJpbmFyeU91dHB1dFNpbmtBZGFwdGVyIGlyU2luayA9IG5ldyBCaW5hcnlPdXRwdXRTaW5rQWRhcHRlcihkaWxsT3V0cHV0KTsKICAgICAgaXIuQmluYXJ5UHJpbnRlciBwcmludGVyID0gbmV3IGlyLkJpbmFyeVByaW50ZXIoaXJTaW5rKTsKICAgICAgcHJpbnRlci53cml0ZUNvbXBvbmVudEZpbGUoY29tcG9uZW50KTsKICAgICAgaXJTaW5rLmNsb3NlKCk7CiAgICB9KTsKCiAgICBtZWFzdXJlU3VidGFzaygnc2VyaWFsaXplIGRhdGEnLCAoKSB7CiAgICAgIF9yZXBvcnRlci5sb2coJ1dyaXRpbmcgZGF0YSB0byAke19vcHRpb25zLndyaXRlRGF0YVVyaX0nKTsKICAgICAgYXBpLkJpbmFyeU91dHB1dFNpbmsgZGF0YU91dHB1dCA9CiAgICAgICAgICBfb3V0cHV0UHJvdmlkZXIuY3JlYXRlQmluYXJ5U2luayhfb3B0aW9ucy53cml0ZURhdGFVcmkpOwogICAgICBEYXRhU2luayBzaW5rID0gbmV3IEJpbmFyeVNpbmsobmV3IEJpbmFyeU91dHB1dFNpbmtBZGFwdGVyKGRhdGFPdXRwdXQpKTsKICAgICAgc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMocmVzdWx0cywgc2luayk7CiAgICB9KTsKICB9CgogIEZ1dHVyZTxHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cz4gZGVzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlKAogICAgICBFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwKICAgICAgQWJzdHJhY3RWYWx1ZVN0cmF0ZWd5IGFic3RyYWN0VmFsdWVTdHJhdGVneSkgYXN5bmMgewogICAgaXIuQ29tcG9uZW50IGNvbXBvbmVudCA9CiAgICAgICAgYXdhaXQgbWVhc3VyZUlvU3VidGFzaygnZGVzZXJpYWxpemUgZGlsbCcsICgpIGFzeW5jIHsKICAgICAgX3JlcG9ydGVyLmxvZygnUmVhZGluZyBkaWxsIGZyb20gJHtfb3B0aW9ucy5lbnRyeVBvaW50fScpOwogICAgICBhcGkuSW5wdXQ8TGlzdDxpbnQ+PiBkaWxsSW5wdXQgPSBhd2FpdCBfcHJvdmlkZXIKICAgICAgICAgIC5yZWFkRnJvbVVyaShfb3B0aW9ucy5lbnRyeVBvaW50LCBpbnB1dEtpbmQ6IGFwaS5JbnB1dEtpbmQuYmluYXJ5KTsKICAgICAgaXIuQ29tcG9uZW50IGNvbXBvbmVudCA9IG5ldyBpci5Db21wb25lbnQoKTsKICAgICAgbmV3IGlyLkJpbmFyeUJ1aWxkZXIoZGlsbElucHV0LmRhdGEpLnJlYWRDb21wb25lbnQoY29tcG9uZW50KTsKICAgICAgcmV0dXJuIGNvbXBvbmVudDsKICAgIH0pOwoKICAgIHJldHVybiBhd2FpdCBtZWFzdXJlSW9TdWJ0YXNrKCdkZXNlcmlhbGl6ZSBkYXRhJywgKCkgYXN5bmMgewogICAgICBfcmVwb3J0ZXIubG9nKCdSZWFkaW5nIGRhdGEgZnJvbSAke19vcHRpb25zLnJlYWREYXRhVXJpfScpOwogICAgICBhcGkuSW5wdXQ8TGlzdDxpbnQ+PiBkYXRhSW5wdXQgPSBhd2FpdCBfcHJvdmlkZXIKICAgICAgICAgIC5yZWFkRnJvbVVyaShfb3B0aW9ucy5yZWFkRGF0YVVyaSwgaW5wdXRLaW5kOiBhcGkuSW5wdXRLaW5kLmJpbmFyeSk7CiAgICAgIERhdGFTb3VyY2Ugc291cmNlID0gbmV3IEJpbmFyeVNvdXJjZUltcGwoZGF0YUlucHV0LmRhdGEpOwogICAgICByZXR1cm4gZGVzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyhfb3B0aW9ucywgX3JlcG9ydGVyLAogICAgICAgICAgZW52aXJvbm1lbnQsIGFic3RyYWN0VmFsdWVTdHJhdGVneSwgY29tcG9uZW50LCBzb3VyY2UpOwogICAgfSk7CiAgfQoKICB2b2lkIHNlcmlhbGl6ZUNvZGVnZW4oCiAgICAgIEJhY2tlbmRTdHJhdGVneSBiYWNrZW5kU3RyYXRlZ3ksIENvZGVnZW5SZXN1bHRzIGNvZGVnZW5SZXN1bHRzKSB7CiAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyA9CiAgICAgICAgY29kZWdlblJlc3VsdHMuZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHM7CiAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQgPSBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cy5jbG9zZWRXb3JsZDsKICAgIGludCBzaGFyZCA9IF9vcHRpb25zLmNvZGVnZW5TaGFyZDsKICAgIGludCBzaGFyZHMgPSBfb3B0aW9ucy5jb2RlZ2VuU2hhcmRzOwogICAgTWFwPE1lbWJlckVudGl0eSwgQ29kZWdlblJlc3VsdD4gcmVzdWx0cyA9IHt9OwogICAgaW50IGluZGV4ID0gMDsKICAgIEVudGl0eVdyaXRlciBlbnRpdHlXcml0ZXIgPQogICAgICAgIGJhY2tlbmRTdHJhdGVneS5mb3JFYWNoQ29kZWdlbk1lbWJlcigoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICBpZiAoaW5kZXggJSBzaGFyZHMgPT0gc2hhcmQpIHsKICAgICAgICBDb2RlZ2VuUmVzdWx0IGNvZGVnZW5SZXN1bHQgPSBjb2RlZ2VuUmVzdWx0cy5nZXRDb2RlZ2VuUmVzdWx0cyhtZW1iZXIpOwogICAgICAgIHJlc3VsdHNbbWVtYmVyXSA9IGNvZGVnZW5SZXN1bHQ7CiAgICAgIH0KICAgICAgaW5kZXgrKzsKICAgIH0pOwogICAgbWVhc3VyZVN1YnRhc2soJ3NlcmlhbGl6ZSBjb2RlZ2VuJywgKCkgewogICAgICBVcmkgdXJpID0gVXJpLnBhcnNlKCcke19vcHRpb25zLndyaXRlQ29kZWdlblVyaX0kc2hhcmQnKTsKICAgICAgYXBpLkJpbmFyeU91dHB1dFNpbmsgZGF0YU91dHB1dCA9IF9vdXRwdXRQcm92aWRlci5jcmVhdGVCaW5hcnlTaW5rKHVyaSk7CiAgICAgIERhdGFTaW5rIHNpbmsgPSBuZXcgQmluYXJ5U2luayhuZXcgQmluYXJ5T3V0cHV0U2lua0FkYXB0ZXIoZGF0YU91dHB1dCkpOwogICAgICBfcmVwb3J0ZXIubG9nKCdXcml0aW5nIGRhdGEgdG8gJHt1cml9Jyk7CiAgICAgIHNpbmsucmVnaXN0ZXJFbnRpdHlXcml0ZXIoZW50aXR5V3JpdGVyKTsKICAgICAgc2luay5yZWdpc3RlckNvZGVnZW5Xcml0ZXIobmV3IENvZGVnZW5Xcml0ZXJJbXBsKGNsb3NlZFdvcmxkKSk7CiAgICAgIHNpbmsud3JpdGVNZW1iZXJNYXAoCiAgICAgICAgICByZXN1bHRzLAogICAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIENvZGVnZW5SZXN1bHQgcmVzdWx0KSA9PgogICAgICAgICAgICAgIHJlc3VsdC53cml0ZVRvRGF0YVNpbmsoc2luaykpOwogICAgICBzaW5rLmNsb3NlKCk7CiAgICB9KTsKICB9CgogIEZ1dHVyZTxDb2RlZ2VuUmVzdWx0cz4gZGVzZXJpYWxpemVDb2RlZ2VuKAogICAgICBCYWNrZW5kU3RyYXRlZ3kgYmFja2VuZFN0cmF0ZWd5LAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cywKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuSW5wdXRzKSBhc3luYyB7CiAgICBpbnQgc2hhcmRzID0gX29wdGlvbnMuY29kZWdlblNoYXJkczsKICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCA9IGdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzLmNsb3NlZFdvcmxkOwogICAgTWFwPE1lbWJlckVudGl0eSwgQ29kZWdlblJlc3VsdD4gcmVzdWx0cyA9IHt9OwogICAgZm9yIChpbnQgc2hhcmQgPSAwOyBzaGFyZCA8IHNoYXJkczsgc2hhcmQrKykgewogICAgICBVcmkgdXJpID0gVXJpLnBhcnNlKCcke19vcHRpb25zLnJlYWRDb2RlZ2VuVXJpfSRzaGFyZCcpOwogICAgICBhd2FpdCBtZWFzdXJlSW9TdWJ0YXNrKCdkZXNlcmlhbGl6ZSBjb2RlZ2VuJywgKCkgYXN5bmMgewogICAgICAgIF9yZXBvcnRlci5sb2coJ1JlYWRpbmcgZGF0YSBmcm9tICR7dXJpfScpOwogICAgICAgIGFwaS5JbnB1dDxMaXN0PGludD4+IGRhdGFJbnB1dCA9CiAgICAgICAgICAgIGF3YWl0IF9wcm92aWRlci5yZWFkRnJvbVVyaSh1cmksIGlucHV0S2luZDogYXBpLklucHV0S2luZC5iaW5hcnkpOwogICAgICAgIERhdGFTb3VyY2Ugc291cmNlID0gbmV3IEJpbmFyeVNvdXJjZUltcGwoZGF0YUlucHV0LmRhdGEpOwogICAgICAgIGJhY2tlbmRTdHJhdGVneS5wcmVwYXJlQ29kZWdlblJlYWRlcihzb3VyY2UpOwogICAgICAgIE1hcDxNZW1iZXJFbnRpdHksIENvZGVnZW5SZXN1bHQ+IGNvZGVnZW5SZXN1bHRzID0KICAgICAgICAgICAgc291cmNlLnJlYWRNZW1iZXJNYXAoKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgICAgIExpc3Q8TW9kdWxhck5hbWU+IG1vZHVsYXJOYW1lcyA9IFtdOwogICAgICAgICAgTGlzdDxNb2R1bGFyRXhwcmVzc2lvbj4gbW9kdWxhckV4cHJlc3Npb25zID0gW107CiAgICAgICAgICBDb2RlZ2VuUmVhZGVyIHJlYWRlciA9IG5ldyBDb2RlZ2VuUmVhZGVySW1wbCgKICAgICAgICAgICAgICBjbG9zZWRXb3JsZCwgbW9kdWxhck5hbWVzLCBtb2R1bGFyRXhwcmVzc2lvbnMpOwogICAgICAgICAgc291cmNlLnJlZ2lzdGVyQ29kZWdlblJlYWRlcihyZWFkZXIpOwogICAgICAgICAgQ29kZWdlblJlc3VsdCByZXN1bHQgPSBDb2RlZ2VuUmVzdWx0LnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICAgICAgICBzb3VyY2UsIG1vZHVsYXJOYW1lcywgbW9kdWxhckV4cHJlc3Npb25zKTsKICAgICAgICAgIHNvdXJjZS5kZXJlZ2lzdGVyQ29kZWdlblJlYWRlcihyZWFkZXIpOwogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9KTsKICAgICAgICBfcmVwb3J0ZXIubG9nKCdSZWFkICR7Y29kZWdlblJlc3VsdHMubGVuZ3RofSBtZW1iZXJzIGZyb20gJHt1cml9Jyk7CiAgICAgICAgcmVzdWx0cy5hZGRBbGwoY29kZWdlblJlc3VsdHMpOwogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBuZXcgRGVzZXJpYWxpemVkQ29kZWdlblJlc3VsdHMoCiAgICAgICAgZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMsIGNvZGVnZW5JbnB1dHMsIHJlc3VsdHMpOwogIH0KfQqAtABOTjwBFSg7OSkjIR8yJB4xISUrJBokGB0BKjkzNCUmORACAUIdIR0xHBlHUSFDPEsCAS8iJiUsAUMvGQEMJgFKKlBOTz4oQDdQUD8tFggBKkEoQ086CAQBRR87HT5BN04zRRgIAUFCN09ASEIIBAEZSDwzRycpMxMgRSVQKQgPCC1AT08vL0YbEzktFAgEAS0nPSspRzMzPz8zKU9CNjo5Lzs4PjBDOTIZDEwoCgYrPQQCASxwYWNrYWdlOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uL3Rhc2suZGFydDtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zZXJpYWxpemF0aW9uL3N0cmF0ZWdpZXMuZGFydJHdLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDppbyc7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvdXRpbHMuZGFydCcgYXMgaXIKICAgIHNob3cgc2VyaWFsaXplQ29tcG9uZW50OwppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvdXRpbHMuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2JpbmFyeS9hc3RfZnJvbV9iaW5hcnkuZGFydCcgc2hvdyBCaW5hcnlCdWlsZGVyOwoKaW1wb3J0ICcuLi9kaWFnbm9zdGljcy9kaWFnbm9zdGljX2xpc3RlbmVyLmRhcnQnOwppbXBvcnQgJy4uL2Vudmlyb25tZW50LmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9qc193b3JsZC5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3NvdXJjZV9maWxlX3Byb3ZpZGVyLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvc2lua19hZGFwdGVyLmRhcnQnOwppbXBvcnQgJ3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAndGFzay5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIFNlcmlhbGl6YXRpb25TdHJhdGVneTxUPiB7CiAgY29uc3QgU2VyaWFsaXphdGlvblN0cmF0ZWd5KCk7CgogIExpc3Q8aW50PiBzZXJpYWxpemVDb21wb25lbnQoR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cykgewogICAgSnNDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCA9IHJlc3VsdHMuY2xvc2VkV29ybGQ7CiAgICBpci5Db21wb25lbnQgY29tcG9uZW50ID0gY2xvc2VkV29ybGQuZWxlbWVudE1hcC5wcm9ncmFtRW52Lm1haW5Db21wb25lbnQ7CiAgICByZXR1cm4gaXIuc2VyaWFsaXplQ29tcG9uZW50KGNvbXBvbmVudCk7CiAgfQoKICBMaXN0PFQ+IHNlcmlhbGl6ZURhdGEoR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cyk7CgogIGlyLkNvbXBvbmVudCBkZXNlcmlhbGl6ZUNvbXBvbmVudChMaXN0PGludD4gZGF0YSkgewogICAgaXIuQ29tcG9uZW50IGNvbXBvbmVudCA9IG5ldyBpci5Db21wb25lbnQoKTsKICAgIG5ldyBCaW5hcnlCdWlsZGVyKGRhdGEpLnJlYWRDb21wb25lbnQoY29tcG9uZW50KTsKICAgIHJldHVybiBjb21wb25lbnQ7CiAgfQoKICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBkZXNlcmlhbGl6ZURhdGEoCiAgICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsCiAgICAgIEVudmlyb25tZW50IGVudmlyb25tZW50LAogICAgICBBYnN0cmFjdFZhbHVlU3RyYXRlZ3kgYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5LAogICAgICBpci5Db21wb25lbnQgY29tcG9uZW50LAogICAgICBMaXN0PFQ+IGRhdGEpOwp9CgpjbGFzcyBCeXRlc0luTWVtb3J5U2VyaWFsaXphdGlvblN0cmF0ZWd5IGV4dGVuZHMgU2VyaWFsaXphdGlvblN0cmF0ZWd5PGludD4gewogIGZpbmFsIGJvb2wgdXNlRGF0YUtpbmRzOwoKICBjb25zdCBCeXRlc0luTWVtb3J5U2VyaWFsaXphdGlvblN0cmF0ZWd5KHt0aGlzLnVzZURhdGFLaW5kczogZmFsc2V9KTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxpbnQ+IHNlcmlhbGl6ZURhdGEoR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cykgewogICAgQnl0ZVNpbmsgYnl0ZVNpbmsgPSBuZXcgQnl0ZVNpbmsoKTsKICAgIERhdGFTaW5rIHNpbmsgPSBuZXcgQmluYXJ5U2luayhieXRlU2luaywgdXNlRGF0YUtpbmRzOiB1c2VEYXRhS2luZHMpOwogICAgc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMocmVzdWx0cywgc2luayk7CiAgICByZXR1cm4gYnl0ZVNpbmsuYnVpbGRlci50YWtlQnl0ZXMoKTsKICB9CgogIEBvdmVycmlkZQogIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGRlc2VyaWFsaXplRGF0YSgKICAgICAgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMsCiAgICAgIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwKICAgICAgRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIEFic3RyYWN0VmFsdWVTdHJhdGVneSBhYnN0cmFjdFZhbHVlU3RyYXRlZ3ksCiAgICAgIGlyLkNvbXBvbmVudCBjb21wb25lbnQsCiAgICAgIExpc3Q8aW50PiBkYXRhKSB7CiAgICBEYXRhU291cmNlIHNvdXJjZSA9IG5ldyBCaW5hcnlTb3VyY2VJbXBsKGRhdGEsIHVzZURhdGFLaW5kczogdXNlRGF0YUtpbmRzKTsKICAgIHJldHVybiBkZXNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzKG9wdGlvbnMsIHJlcG9ydGVyLCBlbnZpcm9ubWVudCwKICAgICAgICBhYnN0cmFjdFZhbHVlU3RyYXRlZ3ksIGNvbXBvbmVudCwgc291cmNlKTsKICB9Cn0KCmNsYXNzIEJ5dGVzT25EaXNrU2VyaWFsaXphdGlvblN0cmF0ZWd5IGV4dGVuZHMgU2VyaWFsaXphdGlvblN0cmF0ZWd5PGludD4gewogIGZpbmFsIGJvb2wgdXNlRGF0YUtpbmRzOwoKICBjb25zdCBCeXRlc09uRGlza1NlcmlhbGl6YXRpb25TdHJhdGVneSh7dGhpcy51c2VEYXRhS2luZHM6IGZhbHNlfSk7CgogIEBvdmVycmlkZQogIExpc3Q8aW50PiBzZXJpYWxpemVEYXRhKEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMpIHsKICAgIFVyaSB1cmkgPSBVcmkuYmFzZS5yZXNvbHZlKCd3b3JsZC5kYXRhJyk7CiAgICBEYXRhU2luayBzaW5rID0gbmV3IEJpbmFyeVNpbmsoCiAgICAgICAgbmV3IEJpbmFyeU91dHB1dFNpbmtBZGFwdGVyKG5ldyBSYW5kb21BY2Nlc3NCaW5hcnlPdXRwdXRTaW5rKHVyaSkpLAogICAgICAgIHVzZURhdGFLaW5kczogdXNlRGF0YUtpbmRzKTsKICAgIHNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzKHJlc3VsdHMsIHNpbmspOwogICAgcmV0dXJuIG5ldyBGaWxlLmZyb21VcmkodXJpKS5yZWFkQXNCeXRlc1N5bmMoKTsKICB9CgogIEBvdmVycmlkZQogIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGRlc2VyaWFsaXplRGF0YSgKICAgICAgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMsCiAgICAgIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwKICAgICAgRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIEFic3RyYWN0VmFsdWVTdHJhdGVneSBhYnN0cmFjdFZhbHVlU3RyYXRlZ3ksCiAgICAgIGlyLkNvbXBvbmVudCBjb21wb25lbnQsCiAgICAgIExpc3Q8aW50PiBkYXRhKSB7CiAgICBEYXRhU291cmNlIHNvdXJjZSA9IG5ldyBCaW5hcnlTb3VyY2VJbXBsKGRhdGEsIHVzZURhdGFLaW5kczogdXNlRGF0YUtpbmRzKTsKICAgIHJldHVybiBkZXNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzKG9wdGlvbnMsIHJlcG9ydGVyLCBlbnZpcm9ubWVudCwKICAgICAgICBhYnN0cmFjdFZhbHVlU3RyYXRlZ3ksIGNvbXBvbmVudCwgc291cmNlKTsKICB9Cn0KCmNsYXNzIE9iamVjdHNJbk1lbW9yeVNlcmlhbGl6YXRpb25TdHJhdGVneQogICAgZXh0ZW5kcyBTZXJpYWxpemF0aW9uU3RyYXRlZ3k8T2JqZWN0PiB7CiAgZmluYWwgYm9vbCB1c2VEYXRhS2luZHM7CgogIGNvbnN0IE9iamVjdHNJbk1lbW9yeVNlcmlhbGl6YXRpb25TdHJhdGVneSh7dGhpcy51c2VEYXRhS2luZHM6IHRydWV9KTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxPYmplY3Q+IHNlcmlhbGl6ZURhdGEoR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cykgewogICAgTGlzdDxPYmplY3Q+IGRhdGEgPSBbXTsKICAgIERhdGFTaW5rIHNpbmsgPSBuZXcgT2JqZWN0U2luayhkYXRhLCB1c2VEYXRhS2luZHM6IHVzZURhdGFLaW5kcyk7CiAgICBzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyhyZXN1bHRzLCBzaW5rKTsKICAgIHJldHVybiBkYXRhOwogIH0KCiAgQG92ZXJyaWRlCiAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZGVzZXJpYWxpemVEYXRhKAogICAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucywKICAgICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLAogICAgICBFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwKICAgICAgQWJzdHJhY3RWYWx1ZVN0cmF0ZWd5IGFic3RyYWN0VmFsdWVTdHJhdGVneSwKICAgICAgaXIuQ29tcG9uZW50IGNvbXBvbmVudCwKICAgICAgTGlzdDxPYmplY3Q+IGRhdGEpIHsKICAgIERhdGFTb3VyY2Ugc291cmNlID0gbmV3IE9iamVjdFNvdXJjZShkYXRhLCB1c2VEYXRhS2luZHM6IHVzZURhdGFLaW5kcyk7CiAgICByZXR1cm4gZGVzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyhvcHRpb25zLCByZXBvcnRlciwgZW52aXJvbm1lbnQsCiAgICAgICAgYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5LCBjb21wb25lbnQsIHNvdXJjZSk7CiAgfQp9CoCGAE5OPAESAT0dOChIATIeMSEkGickHRQBKiEBRTVOLQQBPQE2MTYWBAEuHyMfMx4VAgFOGwFIAQxAKEo4KQQBDC4fIx8zHhhQUTMEAgFMGwFGAQxALiRMJTg0BAEMLh8jHzMeGFBRMwQCASssGwFJAQxDHEY4EQQBDC4fIx8zHhtMUTMEAgEycGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi9zdHJhdGVnaWVzLmRhcnQsc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL25vZGVzLmRhcnTAAjzALy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIHNob3cgTGluazsKCmltcG9ydCAnLi4vY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0JyBhcyBjb25zdGFudF9zeXN0ZW07CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9qdW1wcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzOwppbXBvcnQgJy4uL2pzX21vZGVsL3R5cGVfcmVjaXBlLmRhcnQnIHNob3cgVHlwZUVudmlyb25tZW50U3RydWN0dXJlLCBUeXBlUmVjaXBlOwppbXBvcnQgJy4uL25hdGl2ZS9iZWhhdmlvci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NpZGVfZWZmZWN0cy5kYXJ0JyBzaG93IFNpZGVFZmZlY3RzOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICdpbnZva2VfZHluYW1pY19zcGVjaWFsaXplcnMuZGFydCc7CmltcG9ydCAndmFsaWRhdGUuZGFydCc7CgphYnN0cmFjdCBjbGFzcyBIVmlzaXRvcjxSPiB7CiAgUiB2aXNpdEFicyhIQWJzIG5vZGUpOwogIFIgdmlzaXRBZGQoSEFkZCBub2RlKTsKICBSIHZpc2l0QXdhaXQoSEF3YWl0IG5vZGUpOwogIFIgdmlzaXRCaXRBbmQoSEJpdEFuZCBub2RlKTsKICBSIHZpc2l0Qml0Tm90KEhCaXROb3Qgbm9kZSk7CiAgUiB2aXNpdEJpdE9yKEhCaXRPciBub2RlKTsKICBSIHZpc2l0Qml0WG9yKEhCaXRYb3Igbm9kZSk7CiAgUiB2aXNpdEJvdW5kc0NoZWNrKEhCb3VuZHNDaGVjayBub2RlKTsKICBSIHZpc2l0QnJlYWsoSEJyZWFrIG5vZGUpOwogIFIgdmlzaXRDb25zdGFudChIQ29uc3RhbnQgbm9kZSk7CiAgUiB2aXNpdENvbnRpbnVlKEhDb250aW51ZSBub2RlKTsKICBSIHZpc2l0Q3JlYXRlKEhDcmVhdGUgbm9kZSk7CiAgUiB2aXNpdENyZWF0ZUJveChIQ3JlYXRlQm94IG5vZGUpOwogIFIgdmlzaXREaXZpZGUoSERpdmlkZSBub2RlKTsKICBSIHZpc2l0RXhpdChIRXhpdCBub2RlKTsKICBSIHZpc2l0RXhpdFRyeShIRXhpdFRyeSBub2RlKTsKICBSIHZpc2l0RmllbGRHZXQoSEZpZWxkR2V0IG5vZGUpOwogIFIgdmlzaXRGaWVsZFNldChIRmllbGRTZXQgbm9kZSk7CiAgUiB2aXNpdEZvcmVpZ25Db2RlKEhGb3JlaWduQ29kZSBub2RlKTsKICBSIHZpc2l0R2V0TGVuZ3RoKEhHZXRMZW5ndGggbm9kZSk7CiAgUiB2aXNpdEdvdG8oSEdvdG8gbm9kZSk7CiAgUiB2aXNpdEdyZWF0ZXIoSEdyZWF0ZXIgbm9kZSk7CiAgUiB2aXNpdEdyZWF0ZXJFcXVhbChIR3JlYXRlckVxdWFsIG5vZGUpOwogIFIgdmlzaXRJZGVudGl0eShISWRlbnRpdHkgbm9kZSk7CiAgUiB2aXNpdElmKEhJZiBub2RlKTsKICBSIHZpc2l0SW5kZXgoSEluZGV4IG5vZGUpOwogIFIgdmlzaXRJbmRleEFzc2lnbihISW5kZXhBc3NpZ24gbm9kZSk7CiAgUiB2aXNpdEludGVyY2VwdG9yKEhJbnRlcmNlcHRvciBub2RlKTsKICBSIHZpc2l0SW52b2tlQ2xvc3VyZShISW52b2tlQ2xvc3VyZSBub2RlKTsKICBSIHZpc2l0SW52b2tlRHluYW1pY0dldHRlcihISW52b2tlRHluYW1pY0dldHRlciBub2RlKTsKICBSIHZpc2l0SW52b2tlRHluYW1pY01ldGhvZChISW52b2tlRHluYW1pY01ldGhvZCBub2RlKTsKICBSIHZpc2l0SW52b2tlRHluYW1pY1NldHRlcihISW52b2tlRHluYW1pY1NldHRlciBub2RlKTsKICBSIHZpc2l0SW52b2tlU3RhdGljKEhJbnZva2VTdGF0aWMgbm9kZSk7CiAgUiB2aXNpdEludm9rZVN1cGVyKEhJbnZva2VTdXBlciBub2RlKTsKICBSIHZpc2l0SW52b2tlQ29uc3RydWN0b3JCb2R5KEhJbnZva2VDb25zdHJ1Y3RvckJvZHkgbm9kZSk7CiAgUiB2aXNpdEludm9rZUdlbmVyYXRvckJvZHkoSEludm9rZUdlbmVyYXRvckJvZHkgbm9kZSk7CiAgUiB2aXNpdElzKEhJcyBub2RlKTsKICBSIHZpc2l0SXNWaWFJbnRlcmNlcHRvcihISXNWaWFJbnRlcmNlcHRvciBub2RlKTsKICBSIHZpc2l0TGF0ZVZhbHVlKEhMYXRlVmFsdWUgbm9kZSk7CiAgUiB2aXNpdExhenlTdGF0aWMoSExhenlTdGF0aWMgbm9kZSk7CiAgUiB2aXNpdExlc3MoSExlc3Mgbm9kZSk7CiAgUiB2aXNpdExlc3NFcXVhbChITGVzc0VxdWFsIG5vZGUpOwogIFIgdmlzaXRMaXRlcmFsTGlzdChITGl0ZXJhbExpc3Qgbm9kZSk7CiAgUiB2aXNpdExvY2FsR2V0KEhMb2NhbEdldCBub2RlKTsKICBSIHZpc2l0TG9jYWxTZXQoSExvY2FsU2V0IG5vZGUpOwogIFIgdmlzaXRMb2NhbFZhbHVlKEhMb2NhbFZhbHVlIG5vZGUpOwogIFIgdmlzaXRMb29wQnJhbmNoKEhMb29wQnJhbmNoIG5vZGUpOwogIFIgdmlzaXRNdWx0aXBseShITXVsdGlwbHkgbm9kZSk7CiAgUiB2aXNpdE5lZ2F0ZShITmVnYXRlIG5vZGUpOwogIFIgdmlzaXROb3QoSE5vdCBub2RlKTsKICBSIHZpc2l0T25lU2hvdEludGVyY2VwdG9yKEhPbmVTaG90SW50ZXJjZXB0b3Igbm9kZSk7CiAgUiB2aXNpdFBhcmFtZXRlclZhbHVlKEhQYXJhbWV0ZXJWYWx1ZSBub2RlKTsKICBSIHZpc2l0UGhpKEhQaGkgbm9kZSk7CiAgUiB2aXNpdFJhbmdlQ29udmVyc2lvbihIUmFuZ2VDb252ZXJzaW9uIG5vZGUpOwogIFIgdmlzaXRSZWFkTW9kaWZ5V3JpdGUoSFJlYWRNb2RpZnlXcml0ZSBub2RlKTsKICBSIHZpc2l0UmVmKEhSZWYgbm9kZSk7CiAgUiB2aXNpdFJlbWFpbmRlcihIUmVtYWluZGVyIG5vZGUpOwogIFIgdmlzaXRSZXR1cm4oSFJldHVybiBub2RlKTsKICBSIHZpc2l0U2hpZnRMZWZ0KEhTaGlmdExlZnQgbm9kZSk7CiAgUiB2aXNpdFNoaWZ0UmlnaHQoSFNoaWZ0UmlnaHQgbm9kZSk7CiAgUiB2aXNpdFN0YXRpYyhIU3RhdGljIG5vZGUpOwogIFIgdmlzaXRTdGF0aWNTdG9yZShIU3RhdGljU3RvcmUgbm9kZSk7CiAgUiB2aXNpdFN0cmluZ0NvbmNhdChIU3RyaW5nQ29uY2F0IG5vZGUpOwogIFIgdmlzaXRTdHJpbmdpZnkoSFN0cmluZ2lmeSBub2RlKTsKICBSIHZpc2l0U3VidHJhY3QoSFN1YnRyYWN0IG5vZGUpOwogIFIgdmlzaXRTd2l0Y2goSFN3aXRjaCBub2RlKTsKICBSIHZpc2l0VGhpcyhIVGhpcyBub2RlKTsKICBSIHZpc2l0VGhyb3coSFRocm93IG5vZGUpOwogIFIgdmlzaXRUaHJvd0V4cHJlc3Npb24oSFRocm93RXhwcmVzc2lvbiBub2RlKTsKICBSIHZpc2l0VHJ1bmNhdGluZ0RpdmlkZShIVHJ1bmNhdGluZ0RpdmlkZSBub2RlKTsKICBSIHZpc2l0VHJ5KEhUcnkgbm9kZSk7CiAgUiB2aXNpdFR5cGVDb252ZXJzaW9uKEhUeXBlQ29udmVyc2lvbiBub2RlKTsKICBSIHZpc2l0UHJpbWl0aXZlQ2hlY2soSFByaW1pdGl2ZUNoZWNrIG5vZGUpOwogIFIgdmlzaXRCb29sQ29udmVyc2lvbihIQm9vbENvbnZlcnNpb24gbm9kZSk7CiAgUiB2aXNpdFR5cGVLbm93bihIVHlwZUtub3duIG5vZGUpOwogIFIgdmlzaXRZaWVsZChIWWllbGQgbm9kZSk7CgogIFIgdmlzaXRUeXBlSW5mb1JlYWRSYXcoSFR5cGVJbmZvUmVhZFJhdyBub2RlKTsKICBSIHZpc2l0VHlwZUluZm9SZWFkVmFyaWFibGUoSFR5cGVJbmZvUmVhZFZhcmlhYmxlIG5vZGUpOwogIFIgdmlzaXRUeXBlSW5mb0V4cHJlc3Npb24oSFR5cGVJbmZvRXhwcmVzc2lvbiBub2RlKTsKCiAgLy8gSW5zdHJ1Y3Rpb25zIGZvciAnZGFydDpfcnRpJy4KICBSIHZpc2l0SXNUZXN0KEhJc1Rlc3Qgbm9kZSk7CiAgUiB2aXNpdEFzQ2hlY2soSEFzQ2hlY2sgbm9kZSk7CiAgUiB2aXNpdEFzQ2hlY2tTaW1wbGUoSEFzQ2hlY2tTaW1wbGUgbm9kZSk7CiAgUiB2aXNpdFN1YnR5cGVDaGVjayhIU3VidHlwZUNoZWNrIG5vZGUpOwogIFIgdmlzaXRMb2FkVHlwZShITG9hZFR5cGUgbm9kZSk7CiAgUiB2aXNpdEluc3RhbmNlRW52aXJvbm1lbnQoSEluc3RhbmNlRW52aXJvbm1lbnQgbm9kZSk7CiAgUiB2aXNpdFR5cGVFdmFsKEhUeXBlRXZhbCBub2RlKTsKICBSIHZpc2l0VHlwZUJpbmQoSFR5cGVCaW5kIG5vZGUpOwp9CgphYnN0cmFjdCBjbGFzcyBIR3JhcGhWaXNpdG9yIHsKICB2aXNpdERvbWluYXRvclRyZWUoSEdyYXBoIGdyYXBoKSB7CiAgICAvLyBSZWN1cnNpb24gZnJlZSB2ZXJzaW9uIG9mOgogICAgLy8KICAgIC8vICAgICB2b2lkIHZpc2l0QmFzaWNCbG9ja0FuZFN1Y2Nlc3NvcnMoSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIC8vICAgICAgIHZpc2l0QmFzaWNCbG9jayhibG9jayk7CiAgICAvLyAgICAgICBMaXN0IGRvbWluYXRlZCA9IGJsb2NrLmRvbWluYXRlZEJsb2NrczsKICAgIC8vICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZG9taW5hdGVkLmxlbmd0aDsgaSsrKSB7CiAgICAvLyAgICAgICAgIHZpc2l0QmFzaWNCbG9ja0FuZFN1Y2Nlc3NvcnMoZG9taW5hdGVkW2ldKTsKICAgIC8vICAgICAgIH0KICAgIC8vICAgICB9CiAgICAvLyAgICAgdmlzaXRCYXNpY0Jsb2NrQW5kU3VjY2Vzc29ycyhncmFwaC5lbnRyeSk7CgogICAgX0ZyYW1lIGZyYW1lID0gbmV3IF9GcmFtZShudWxsKTsKICAgIGZyYW1lLmJsb2NrID0gZ3JhcGguZW50cnk7CiAgICBmcmFtZS5pbmRleCA9IDA7CgogICAgdmlzaXRCYXNpY0Jsb2NrKGZyYW1lLmJsb2NrKTsKCiAgICB3aGlsZSAoZnJhbWUgIT0gbnVsbCkgewogICAgICBIQmFzaWNCbG9jayBibG9jayA9IGZyYW1lLmJsb2NrOwogICAgICBpbnQgaW5kZXggPSBmcmFtZS5pbmRleDsKICAgICAgaWYgKGluZGV4IDwgYmxvY2suZG9taW5hdGVkQmxvY2tzLmxlbmd0aCkgewogICAgICAgIGZyYW1lLmluZGV4ID0gaW5kZXggKyAxOwogICAgICAgIGZyYW1lID0gZnJhbWUubmV4dCA/Pz0gbmV3IF9GcmFtZShmcmFtZSk7CiAgICAgICAgZnJhbWUuYmxvY2sgPSBibG9jay5kb21pbmF0ZWRCbG9ja3NbaW5kZXhdOwogICAgICAgIGZyYW1lLmluZGV4ID0gMDsKICAgICAgICB2aXNpdEJhc2ljQmxvY2soZnJhbWUuYmxvY2spOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGZyYW1lID0gZnJhbWUucHJldmlvdXM7CiAgICB9CiAgfQoKICB2aXNpdFBvc3REb21pbmF0b3JUcmVlKEhHcmFwaCBncmFwaCkgewogICAgLy8gUmVjdXNpb24gZnJlZSB2ZXJzaW9uIG9mOgogICAgLy8KICAgIC8vICAgICB2b2lkIHZpc2l0QmFzaWNCbG9ja0FuZFN1Y2Nlc3NvcnMoSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIC8vICAgICAgIExpc3QgZG9taW5hdGVkID0gYmxvY2suZG9taW5hdGVkQmxvY2tzOwogICAgLy8gICAgICAgZm9yIChpbnQgaSA9IGRvbWluYXRlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgLy8gICAgICAgICB2aXNpdEJhc2ljQmxvY2tBbmRTdWNjZXNzb3JzKGRvbWluYXRlZFtpXSk7CiAgICAvLyAgICAgICB9CiAgICAvLyAgICAgICB2aXNpdEJhc2ljQmxvY2soYmxvY2spOwogICAgLy8gICAgIH0KICAgIC8vICAgICB2aXNpdEJhc2ljQmxvY2tBbmRTdWNjZXNzb3JzKGdyYXBoLmVudHJ5KTsKCiAgICBfRnJhbWUgZnJhbWUgPSBuZXcgX0ZyYW1lKG51bGwpOwogICAgZnJhbWUuYmxvY2sgPSBncmFwaC5lbnRyeTsKICAgIGZyYW1lLmluZGV4ID0gZnJhbWUuYmxvY2suZG9taW5hdGVkQmxvY2tzLmxlbmd0aDsKCiAgICB3aGlsZSAoZnJhbWUgIT0gbnVsbCkgewogICAgICBIQmFzaWNCbG9jayBibG9jayA9IGZyYW1lLmJsb2NrOwogICAgICBpbnQgaW5kZXggPSBmcmFtZS5pbmRleDsKICAgICAgaWYgKGluZGV4ID4gMCkgewogICAgICAgIGZyYW1lLmluZGV4ID0gaW5kZXggLSAxOwogICAgICAgIGZyYW1lID0gZnJhbWUubmV4dCA/Pz0gbmV3IF9GcmFtZShmcmFtZSk7CiAgICAgICAgZnJhbWUuYmxvY2sgPSBibG9jay5kb21pbmF0ZWRCbG9ja3NbaW5kZXggLSAxXTsKICAgICAgICBmcmFtZS5pbmRleCA9IGZyYW1lLmJsb2NrLmRvbWluYXRlZEJsb2Nrcy5sZW5ndGg7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgdmlzaXRCYXNpY0Jsb2NrKGJsb2NrKTsKICAgICAgZnJhbWUgPSBmcmFtZS5wcmV2aW91czsKICAgIH0KICB9CgogIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jayk7Cn0KCmNsYXNzIF9GcmFtZSB7CiAgZmluYWwgX0ZyYW1lIHByZXZpb3VzOwogIF9GcmFtZSBuZXh0OwogIEhCYXNpY0Jsb2NrIGJsb2NrOwogIGludCBpbmRleDsKICBfRnJhbWUodGhpcy5wcmV2aW91cyk7Cn0KCmFic3RyYWN0IGNsYXNzIEhJbnN0cnVjdGlvblZpc2l0b3IgZXh0ZW5kcyBIR3JhcGhWaXNpdG9yIHsKICBIQmFzaWNCbG9jayBjdXJyZW50QmxvY2s7CgogIHZpc2l0SW5zdHJ1Y3Rpb24oSEluc3RydWN0aW9uIG5vZGUpOwoKICBAb3ZlcnJpZGUKICB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgbm9kZSkgewogICAgdm9pZCB2aXNpdEluc3RydWN0aW9uTGlzdChISW5zdHJ1Y3Rpb25MaXN0IGxpc3QpIHsKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gbGlzdC5maXJzdDsKICAgICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgICB2aXNpdEluc3RydWN0aW9uKGluc3RydWN0aW9uKTsKICAgICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLm5leHQ7CiAgICAgICAgYXNzZXJ0KGluc3RydWN0aW9uICE9IGxpc3QuZmlyc3QpOwogICAgICB9CiAgICB9CgogICAgY3VycmVudEJsb2NrID0gbm9kZTsKICAgIHZpc2l0SW5zdHJ1Y3Rpb25MaXN0KG5vZGUpOwogIH0KfQoKY2xhc3MgSEdyYXBoIHsKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYXliZSB0aGlzIHNob3VsZCBiZSBbTWVtYmVyTGlrZV0uCiAgRW50aXR5IGVsZW1lbnQ7IC8vIFVzZWQgZm9yIGRlYnVnIHByaW50aW5nLgogIEhCYXNpY0Jsb2NrIGVudHJ5OwogIEhCYXNpY0Jsb2NrIGV4aXQ7CiAgSFRoaXMgdGhpc0luc3RydWN0aW9uOwoKICAvLy8gYHRydWVgIGlmIHRoaXMgZ3JhcGggc2hvdWxkIGJlIHRyYW5zZm9ybWVkIGJ5IGEgc3luYyovYXN5bmMvYXN5bmMqCiAgLy8vIHJld3JpdGUuCiAgYm9vbCBuZWVkc0FzeW5jUmV3cml0ZSA9IGZhbHNlOwoKICAvLy8gSWYgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyBhbiBhc3luYyByZXdyaXRlLCB0aGlzIGlzIHRoZSBlbGVtZW50IHR5cGUgb2YKICAvLy8gdGhlIGdlbmVyYXRvci4KICBEYXJ0VHlwZSBhc3luY0VsZW1lbnRUeXBlOwoKICAvLy8gUmVjZWl2ZXIgcGFyYW1ldGVyLCBzZXQgZm9yIG1ldGhvZHMgdXNpbmcgaW50ZXJjZXB0b3IgY2FsbGluZyBjb252ZW50aW9uLgogIEhQYXJhbWV0ZXJWYWx1ZSBleHBsaWNpdFJlY2VpdmVyUGFyYW1ldGVyOwogIGJvb2wgaXNSZWN1cnNpdmVNZXRob2QgPSBmYWxzZTsKICBib29sIGNhbGxlZEluTG9vcCA9IGZhbHNlOwoKICBmaW5hbCBMaXN0PEhCYXNpY0Jsb2NrPiBibG9ja3MgPSA8SEJhc2ljQmxvY2s+W107CgogIC8vLyBOb2RlcyBjb250YWluaW5nIGxpc3QgYWxsb2NhdGlvbnMgZm9yIHdoaWNoIHRoZXJlIGlzIGEga25vd24gZml4ZWQgbGVuZ3RoLgogIC8vIFRPRE8oc2lnbXVuZCxzcmEpOiBjb25zaWRlciBub3Qgc3RvcmluZyB0aGlzIGV4cGxpY2l0bHkgaGVyZSAoZS5nLiBtYXliZQogIC8vIHN0b3JlIGl0IG9uIEhJbnN0cnVjdGlvbiwgb3IgbWF5YmUgdGhpcyBjYW4gYmUgY29tcHV0ZWQgb24gZGVtYW5kKS4KICBmaW5hbCBTZXQ8SEluc3RydWN0aW9uPiBhbGxvY2F0ZWRGaXhlZExpc3RzID0gbmV3IFNldDxISW5zdHJ1Y3Rpb24+KCk7CgogIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uOwoKICAvLyBXZSBjYW5vbmljYWxpemUgYWxsIGNvbnN0YW50cyB1c2VkIHdpdGhpbiBhIGdyYXBoIHNvIHdlIGRvIG5vdAogIC8vIGhhdmUgdG8gd29ycnkgYWJvdXQgdGhlbSBmb3IgZ2xvYmFsIHZhbHVlIG51bWJlcmluZy4KICBNYXA8Q29uc3RhbnRWYWx1ZSwgSENvbnN0YW50PiBjb25zdGFudHMgPSBuZXcgTWFwPENvbnN0YW50VmFsdWUsIEhDb25zdGFudD4oKTsKCiAgSEdyYXBoKCkgewogICAgZW50cnkgPSBhZGROZXdCbG9jaygpOwogICAgLy8gVGhlIGV4aXQgYmxvY2sgd2lsbCBiZSBhZGRlZCBsYXRlciwgc28gaXQgaGFzIGFuIGlkIHRoYXQgaXMKICAgIC8vIGFmdGVyIGFsbCBvdGhlcnMgaW4gdGhlIHN5c3RlbS4KICAgIGV4aXQgPSBuZXcgSEJhc2ljQmxvY2soKTsKICB9CgogIHZvaWQgYWRkQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGludCBpZCA9IGJsb2Nrcy5sZW5ndGg7CiAgICBibG9jay5pZCA9IGlkOwogICAgYmxvY2tzLmFkZChibG9jayk7CiAgICBhc3NlcnQoaWRlbnRpY2FsKGJsb2Nrc1tpZF0sIGJsb2NrKSk7CiAgfQoKICBIQmFzaWNCbG9jayBhZGROZXdCbG9jaygpIHsKICAgIEhCYXNpY0Jsb2NrIHJlc3VsdCA9IG5ldyBIQmFzaWNCbG9jaygpOwogICAgYWRkQmxvY2socmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBIQmFzaWNCbG9jayBhZGROZXdMb29wSGVhZGVyQmxvY2soCiAgICAgIEp1bXBUYXJnZXQgdGFyZ2V0LCBMaXN0PExhYmVsRGVmaW5pdGlvbj4gbGFiZWxzKSB7CiAgICBIQmFzaWNCbG9jayByZXN1bHQgPSBhZGROZXdCbG9jaygpOwogICAgcmVzdWx0Lmxvb3BJbmZvcm1hdGlvbiA9IG5ldyBITG9vcEluZm9ybWF0aW9uKHJlc3VsdCwgdGFyZ2V0LCBsYWJlbHMpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEhDb25zdGFudCBhZGRDb25zdGFudChDb25zdGFudFZhbHVlIGNvbnN0YW50LCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIEhDb25zdGFudCByZXN1bHQgPSBjb25zdGFudHNbY29uc3RhbnRdOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBzb3VyY2UgaW5mb3JtYXRpb24gcGVyIGNvbnN0YW50IHJlZmVyZW5jZS4KICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewogICAgICBpZiAoIWNvbnN0YW50LmlzQ29uc3RhbnQpIHsKICAgICAgICAvLyBXZSB1c2UgYG51bGxgIGFzIHRoZSB2YWx1ZSBmb3IgaW52YWxpZCBjb25zdGFudCBleHByZXNzaW9ucy4KICAgICAgICBjb25zdGFudCA9IGNvbnN0IE51bGxDb25zdGFudFZhbHVlKCk7CiAgICAgIH0KICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgLmNvbXB1dGVBYnN0cmFjdFZhbHVlRm9yQ29uc3RhbnQoY29uc3RhbnQpOwogICAgICByZXN1bHQgPSBuZXcgSENvbnN0YW50LmludGVybmFsKGNvbnN0YW50LCB0eXBlKQogICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgZW50cnkuYWRkQXRFeGl0KHJlc3VsdCk7CiAgICAgIGNvbnN0YW50c1tjb25zdGFudF0gPSByZXN1bHQ7CiAgICB9IGVsc2UgaWYgKHJlc3VsdC5ibG9jayA9PSBudWxsKSB7CiAgICAgIC8vIFRoZSBjb25zdGFudCB3YXMgbm90IHVzZWQgYW55bW9yZS4KICAgICAgZW50cnkuYWRkQXRFeGl0KHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgSENvbnN0YW50IGFkZERlZmVycmVkQ29uc3RhbnQoRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlIGNvbnN0YW50LAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gYWRkQ29uc3RhbnQoY29uc3RhbnQsIGNsb3NlZFdvcmxkLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICBIQ29uc3RhbnQgYWRkQ29uc3RhbnRJbnQoaW50IGksIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGFkZENvbnN0YW50KGNvbnN0YW50X3N5c3RlbS5jcmVhdGVJbnRGcm9tSW50KGkpLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBIQ29uc3RhbnQgYWRkQ29uc3RhbnRJbnRBc1Vuc2lnbmVkKGludCBpLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBhZGRDb25zdGFudCgKICAgICAgICBjb25zdGFudF9zeXN0ZW0uY3JlYXRlSW50KG5ldyBCaWdJbnQuZnJvbShpKS50b1Vuc2lnbmVkKDY0KSksCiAgICAgICAgY2xvc2VkV29ybGQpOwogIH0KCiAgSENvbnN0YW50IGFkZENvbnN0YW50RG91YmxlKGRvdWJsZSBkLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBhZGRDb25zdGFudChjb25zdGFudF9zeXN0ZW0uY3JlYXRlRG91YmxlKGQpLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBIQ29uc3RhbnQgYWRkQ29uc3RhbnRTdHJpbmcoU3RyaW5nIHN0ciwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gYWRkQ29uc3RhbnQoY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVN0cmluZyhzdHIpLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBIQ29uc3RhbnQgYWRkQ29uc3RhbnRTdHJpbmdGcm9tTmFtZShqcy5OYW1lIG5hbWUsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGFkZENvbnN0YW50KAogICAgICAgIG5ldyBKc05hbWVDb25zdGFudFZhbHVlKGpzLnF1b3RlTmFtZShuYW1lKSksIGNsb3NlZFdvcmxkKTsKICB9CgogIEhDb25zdGFudCBhZGRDb25zdGFudEJvb2woYm9vbCB2YWx1ZSwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gYWRkQ29uc3RhbnQoY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUJvb2wodmFsdWUpLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBIQ29uc3RhbnQgYWRkQ29uc3RhbnROdWxsKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGFkZENvbnN0YW50KGNvbnN0YW50X3N5c3RlbS5jcmVhdGVOdWxsKCksIGNsb3NlZFdvcmxkKTsKICB9CgogIEhDb25zdGFudCBhZGRDb25zdGFudFVucmVhY2hhYmxlKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgLy8gQSBjb25zdGFudCB3aXRoIGFuIGVtcHR5IHR5cGUgdXNlZCBhcyB0aGUgSEluc3RydWN0aW9uIG9mIGFuIGV4cHJlc3Npb24KICAgIC8vIGluIGFuIHVucmVhY2hhYmxlIGNvbnRleHQuCiAgICByZXR1cm4gYWRkQ29uc3RhbnQoY29uc3QgVW5yZWFjaGFibGVDb25zdGFudFZhbHVlKCksIGNsb3NlZFdvcmxkKTsKICB9CgogIHZvaWQgZmluYWxpemUoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pIHsKICAgIGFkZEJsb2NrKGV4aXQpOwogICAgZXhpdC5vcGVuKCk7CiAgICBleGl0LmNsb3NlKG5ldyBIRXhpdChkb21haW4pKTsKICAgIGFzc2lnbkRvbWluYXRvcnMoKTsKICB9CgogIHZvaWQgYXNzaWduRG9taW5hdG9ycygpIHsKICAgIC8vIFJ1biB0aHJvdWdoIHRoZSBibG9ja3MgaW4gb3JkZXIgb2YgaW5jcmVhc2luZyBpZHMgc28gd2UgYXJlCiAgICAvLyBndWFyYW50ZWVkIHRoYXQgd2UgaGF2ZSBjb21wdXRlZCBkb21pbmF0b3JzIGZvciBhbGwgYmxvY2tzCiAgICAvLyBoaWdoZXIgdXAgaW4gdGhlIGRvbWluYXRvciB0cmVlLgogICAgZm9yIChpbnQgaSA9IDAsIGxlbmd0aCA9IGJsb2Nrcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBIQmFzaWNCbG9jayBibG9jayA9IGJsb2Nrc1tpXTsKICAgICAgTGlzdDxIQmFzaWNCbG9jaz4gcHJlZGVjZXNzb3JzID0gYmxvY2sucHJlZGVjZXNzb3JzOwogICAgICBpZiAoYmxvY2suaXNMb29wSGVhZGVyKCkpIHsKICAgICAgICBibG9jay5hc3NpZ25Db21tb25Eb21pbmF0b3IocHJlZGVjZXNzb3JzWzBdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKGludCBqID0gcHJlZGVjZXNzb3JzLmxlbmd0aCAtIDE7IGogPj0gMDsgai0tKSB7CiAgICAgICAgICBibG9jay5hc3NpZ25Db21tb25Eb21pbmF0b3IocHJlZGVjZXNzb3JzW2pdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzc2lnbkRvbWluYXRvclJhbmdlcygpOwogIH0KCiAgdm9pZCBhc3NpZ25Eb21pbmF0b3JSYW5nZXMoKSB7CiAgICAvLyBERlMgd2FsayBvZiBkb21pbmF0b3IgdHJlZSB0byBhc3NpZ24gZGZzLWluIGFuZCBkZnMtb3V0IG51bWJlcnMgdG8gYmFzaWMKICAgIC8vIGJsb2Nrcy4gQSBkb21pbmF0b3IgaGFzIGEgZGZzLWluLi5kZnMtb3V0IHJhbmdlIHRoYXQgaW5jbHVkZXMgdGhlIHJhbmdlCiAgICAvLyBvZiB0aGUgZG9taW5hdGVkIGJsb2NrLiBTZWUgW0hHcmFwaFZpc2l0b3IudmlzaXREb21pbmF0b3JUcmVlXSBmb3IKICAgIC8vIHJlY3Vyc2lvbi1mcmVlIHNjaGVtYS4KICAgIF9GcmFtZSBmcmFtZSA9IG5ldyBfRnJhbWUobnVsbCk7CiAgICBmcmFtZS5ibG9jayA9IGVudHJ5OwogICAgZnJhbWUuaW5kZXggPSAwOwoKICAgIGludCBkZnNOdW1iZXIgPSAwOwogICAgZnJhbWUuYmxvY2suZG9taW5hdG9yRGZzSW4gPSBkZnNOdW1iZXI7CgogICAgd2hpbGUgKGZyYW1lICE9IG51bGwpIHsKICAgICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBmcmFtZS5ibG9jazsKICAgICAgaW50IGluZGV4ID0gZnJhbWUuaW5kZXg7CiAgICAgIGlmIChpbmRleCA8IGJsb2NrLmRvbWluYXRlZEJsb2Nrcy5sZW5ndGgpIHsKICAgICAgICBmcmFtZS5pbmRleCA9IGluZGV4ICsgMTsKICAgICAgICBmcmFtZSA9IGZyYW1lLm5leHQgPz89IG5ldyBfRnJhbWUoZnJhbWUpOwogICAgICAgIGZyYW1lLmJsb2NrID0gYmxvY2suZG9taW5hdGVkQmxvY2tzW2luZGV4XTsKICAgICAgICBmcmFtZS5pbmRleCA9IDA7CiAgICAgICAgZnJhbWUuYmxvY2suZG9taW5hdG9yRGZzSW4gPSArK2Rmc051bWJlcjsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBibG9jay5kb21pbmF0b3JEZnNPdXQgPSBkZnNOdW1iZXI7CiAgICAgIGZyYW1lID0gZnJhbWUucHJldmlvdXM7CiAgICB9CiAgfQoKICBib29sIGlzVmFsaWQoKSB7CiAgICBIVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBIVmFsaWRhdG9yKCk7CiAgICB2YWxpZGF0b3IudmlzaXRHcmFwaCh0aGlzKTsKICAgIHJldHVybiB2YWxpZGF0b3IuaXNWYWxpZDsKICB9CgogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ0hHcmFwaCgkZWxlbWVudCknOwp9CgpjbGFzcyBIQmFzZVZpc2l0b3IgZXh0ZW5kcyBIR3JhcGhWaXNpdG9yIGltcGxlbWVudHMgSFZpc2l0b3IgewogIEhCYXNpY0Jsb2NrIGN1cnJlbnRCbG9jazsKCiAgQG92ZXJyaWRlCiAgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIG5vZGUpIHsKICAgIGN1cnJlbnRCbG9jayA9IG5vZGU7CgogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gbm9kZS5maXJzdDsKICAgIHdoaWxlIChpbnN0cnVjdGlvbiAhPSBudWxsKSB7CiAgICAgIGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgfQogIH0KCiAgdmlzaXRJbnN0cnVjdGlvbihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHt9CgogIHZpc2l0QmluYXJ5QXJpdGhtZXRpYyhIQmluYXJ5QXJpdGhtZXRpYyBub2RlKSA9PiB2aXNpdEludm9rZUJpbmFyeShub2RlKTsKICB2aXNpdEJpbmFyeUJpdE9wKEhCaW5hcnlCaXRPcCBub2RlKSA9PiB2aXNpdEludm9rZUJpbmFyeShub2RlKTsKICB2aXNpdEludm9rZShISW52b2tlIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgdmlzaXRJbnZva2VCaW5hcnkoSEludm9rZUJpbmFyeSBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIHZpc2l0SW52b2tlRHluYW1pYyhISW52b2tlRHluYW1pYyBub2RlKSA9PiB2aXNpdEludm9rZShub2RlKTsKICB2aXNpdEludm9rZUR5bmFtaWNGaWVsZChISW52b2tlRHluYW1pY0ZpZWxkIG5vZGUpID0+IHZpc2l0SW52b2tlRHluYW1pYyhub2RlKTsKICB2aXNpdEludm9rZVVuYXJ5KEhJbnZva2VVbmFyeSBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIHZpc2l0Q29uZGl0aW9uYWxCcmFuY2goSENvbmRpdGlvbmFsQnJhbmNoIG5vZGUpID0+IHZpc2l0Q29udHJvbEZsb3cobm9kZSk7CiAgdmlzaXRDb250cm9sRmxvdyhIQ29udHJvbEZsb3cgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICB2aXNpdEZpZWxkQWNjZXNzKEhGaWVsZEFjY2VzcyBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIHZpc2l0UmVsYXRpb25hbChIUmVsYXRpb25hbCBub2RlKSA9PiB2aXNpdEludm9rZUJpbmFyeShub2RlKTsKCiAgQG92ZXJyaWRlCiAgdmlzaXRBYnMoSEFicyBub2RlKSA9PiB2aXNpdEludm9rZVVuYXJ5KG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0QWRkKEhBZGQgbm9kZSkgPT4gdmlzaXRCaW5hcnlBcml0aG1ldGljKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0Qml0QW5kKEhCaXRBbmQgbm9kZSkgPT4gdmlzaXRCaW5hcnlCaXRPcChub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEJpdE5vdChIQml0Tm90IG5vZGUpID0+IHZpc2l0SW52b2tlVW5hcnkobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRCaXRPcihIQml0T3Igbm9kZSkgPT4gdmlzaXRCaW5hcnlCaXRPcChub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEJpdFhvcihIQml0WG9yIG5vZGUpID0+IHZpc2l0QmluYXJ5Qml0T3Aobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRCb3VuZHNDaGVjayhIQm91bmRzQ2hlY2sgbm9kZSkgPT4gdmlzaXRDaGVjayhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEJyZWFrKEhCcmVhayBub2RlKSA9PiB2aXNpdEp1bXAobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRDb250aW51ZShIQ29udGludWUgbm9kZSkgPT4gdmlzaXRKdW1wKG5vZGUpOwogIHZpc2l0Q2hlY2soSENoZWNrIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRDb25zdGFudChIQ29uc3RhbnQgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdENyZWF0ZShIQ3JlYXRlIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRDcmVhdGVCb3goSENyZWF0ZUJveCBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0RGl2aWRlKEhEaXZpZGUgbm9kZSkgPT4gdmlzaXRCaW5hcnlBcml0aG1ldGljKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0RXhpdChIRXhpdCBub2RlKSA9PiB2aXNpdENvbnRyb2xGbG93KG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0RXhpdFRyeShIRXhpdFRyeSBub2RlKSA9PiB2aXNpdENvbnRyb2xGbG93KG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0RmllbGRHZXQoSEZpZWxkR2V0IG5vZGUpID0+IHZpc2l0RmllbGRBY2Nlc3Mobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRGaWVsZFNldChIRmllbGRTZXQgbm9kZSkgPT4gdmlzaXRGaWVsZEFjY2Vzcyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEZvcmVpZ25Db2RlKEhGb3JlaWduQ29kZSBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0R2V0TGVuZ3RoKEhHZXRMZW5ndGggbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEdvdG8oSEdvdG8gbm9kZSkgPT4gdmlzaXRDb250cm9sRmxvdyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEdyZWF0ZXIoSEdyZWF0ZXIgbm9kZSkgPT4gdmlzaXRSZWxhdGlvbmFsKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0R3JlYXRlckVxdWFsKEhHcmVhdGVyRXF1YWwgbm9kZSkgPT4gdmlzaXRSZWxhdGlvbmFsKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0SWRlbnRpdHkoSElkZW50aXR5IG5vZGUpID0+IHZpc2l0UmVsYXRpb25hbChub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdElmKEhJZiBub2RlKSA9PiB2aXNpdENvbmRpdGlvbmFsQnJhbmNoKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0SW5kZXgoSEluZGV4IG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRJbmRleEFzc2lnbihISW5kZXhBc3NpZ24gbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEludGVyY2VwdG9yKEhJbnRlcmNlcHRvciBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0SW52b2tlQ2xvc3VyZShISW52b2tlQ2xvc3VyZSBub2RlKSA9PiB2aXNpdEludm9rZUR5bmFtaWMobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRJbnZva2VDb25zdHJ1Y3RvckJvZHkoSEludm9rZUNvbnN0cnVjdG9yQm9keSBub2RlKSA9PgogICAgICB2aXNpdEludm9rZVN0YXRpYyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEludm9rZUdlbmVyYXRvckJvZHkoSEludm9rZUdlbmVyYXRvckJvZHkgbm9kZSkgPT4KICAgICAgdmlzaXRJbnZva2VTdGF0aWMobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRJbnZva2VEeW5hbWljTWV0aG9kKEhJbnZva2VEeW5hbWljTWV0aG9kIG5vZGUpID0+CiAgICAgIHZpc2l0SW52b2tlRHluYW1pYyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEludm9rZUR5bmFtaWNHZXR0ZXIoSEludm9rZUR5bmFtaWNHZXR0ZXIgbm9kZSkgPT4KICAgICAgdmlzaXRJbnZva2VEeW5hbWljRmllbGQobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRJbnZva2VEeW5hbWljU2V0dGVyKEhJbnZva2VEeW5hbWljU2V0dGVyIG5vZGUpID0+CiAgICAgIHZpc2l0SW52b2tlRHluYW1pY0ZpZWxkKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0SW52b2tlU3RhdGljKEhJbnZva2VTdGF0aWMgbm9kZSkgPT4gdmlzaXRJbnZva2Uobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRJbnZva2VTdXBlcihISW52b2tlU3VwZXIgbm9kZSkgPT4gdmlzaXRJbnZva2VTdGF0aWMobm9kZSk7CiAgdmlzaXRKdW1wKEhKdW1wIG5vZGUpID0+IHZpc2l0Q29udHJvbEZsb3cobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRMYXp5U3RhdGljKEhMYXp5U3RhdGljIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRMZXNzKEhMZXNzIG5vZGUpID0+IHZpc2l0UmVsYXRpb25hbChub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdExlc3NFcXVhbChITGVzc0VxdWFsIG5vZGUpID0+IHZpc2l0UmVsYXRpb25hbChub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdExpdGVyYWxMaXN0KEhMaXRlcmFsTGlzdCBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIHZpc2l0TG9jYWxBY2Nlc3MoSExvY2FsQWNjZXNzIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRMb2NhbEdldChITG9jYWxHZXQgbm9kZSkgPT4gdmlzaXRMb2NhbEFjY2Vzcyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdExvY2FsU2V0KEhMb2NhbFNldCBub2RlKSA9PiB2aXNpdExvY2FsQWNjZXNzKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0TG9jYWxWYWx1ZShITG9jYWxWYWx1ZSBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0TG9vcEJyYW5jaChITG9vcEJyYW5jaCBub2RlKSA9PiB2aXNpdENvbmRpdGlvbmFsQnJhbmNoKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0TmVnYXRlKEhOZWdhdGUgbm9kZSkgPT4gdmlzaXRJbnZva2VVbmFyeShub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdE5vdChITm90IG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRPbmVTaG90SW50ZXJjZXB0b3IoSE9uZVNob3RJbnRlcmNlcHRvciBub2RlKSA9PiB2aXNpdEludm9rZUR5bmFtaWMobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRQaGkoSFBoaSBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0TXVsdGlwbHkoSE11bHRpcGx5IG5vZGUpID0+IHZpc2l0QmluYXJ5QXJpdGhtZXRpYyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFBhcmFtZXRlclZhbHVlKEhQYXJhbWV0ZXJWYWx1ZSBub2RlKSA9PiB2aXNpdExvY2FsVmFsdWUobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRSYW5nZUNvbnZlcnNpb24oSFJhbmdlQ29udmVyc2lvbiBub2RlKSA9PiB2aXNpdENoZWNrKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0UmVhZE1vZGlmeVdyaXRlKEhSZWFkTW9kaWZ5V3JpdGUgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFJlZihIUmVmIG5vZGUpID0+IG5vZGUudmFsdWUuYWNjZXB0KHRoaXMpOwogIEBvdmVycmlkZQogIHZpc2l0UmVtYWluZGVyKEhSZW1haW5kZXIgbm9kZSkgPT4gdmlzaXRCaW5hcnlBcml0aG1ldGljKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0UmV0dXJuKEhSZXR1cm4gbm9kZSkgPT4gdmlzaXRDb250cm9sRmxvdyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFNoaWZ0TGVmdChIU2hpZnRMZWZ0IG5vZGUpID0+IHZpc2l0QmluYXJ5Qml0T3Aobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRTaGlmdFJpZ2h0KEhTaGlmdFJpZ2h0IG5vZGUpID0+IHZpc2l0QmluYXJ5Qml0T3Aobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRTdWJ0cmFjdChIU3VidHJhY3Qgbm9kZSkgPT4gdmlzaXRCaW5hcnlBcml0aG1ldGljKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0U3dpdGNoKEhTd2l0Y2ggbm9kZSkgPT4gdmlzaXRDb250cm9sRmxvdyhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFN0YXRpYyhIU3RhdGljIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRTdGF0aWNTdG9yZShIU3RhdGljU3RvcmUgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFN0cmluZ0NvbmNhdChIU3RyaW5nQ29uY2F0IG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRTdHJpbmdpZnkoSFN0cmluZ2lmeSBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0VGhpcyhIVGhpcyBub2RlKSA9PiB2aXNpdFBhcmFtZXRlclZhbHVlKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0VGhyb3coSFRocm93IG5vZGUpID0+IHZpc2l0Q29udHJvbEZsb3cobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRUaHJvd0V4cHJlc3Npb24oSFRocm93RXhwcmVzc2lvbiBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0VHJ1bmNhdGluZ0RpdmlkZShIVHJ1bmNhdGluZ0RpdmlkZSBub2RlKSA9PiB2aXNpdEJpbmFyeUFyaXRobWV0aWMobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRUcnkoSFRyeSBub2RlKSA9PiB2aXNpdENvbnRyb2xGbG93KG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0SXMoSElzIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRMYXRlVmFsdWUoSExhdGVWYWx1ZSBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0SXNWaWFJbnRlcmNlcHRvcihISXNWaWFJbnRlcmNlcHRvciBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0VHlwZUNvbnZlcnNpb24oSFR5cGVDb252ZXJzaW9uIG5vZGUpID0+IHZpc2l0Q2hlY2sobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRCb29sQ29udmVyc2lvbihIQm9vbENvbnZlcnNpb24gbm9kZSkgPT4gdmlzaXRDaGVjayhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFByaW1pdGl2ZUNoZWNrKEhQcmltaXRpdmVDaGVjayBub2RlKSA9PiB2aXNpdENoZWNrKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0VHlwZUtub3duKEhUeXBlS25vd24gbm9kZSkgPT4gdmlzaXRDaGVjayhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEF3YWl0KEhBd2FpdCBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0WWllbGQoSFlpZWxkIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CgogIEBvdmVycmlkZQogIHZpc2l0VHlwZUluZm9SZWFkUmF3KEhUeXBlSW5mb1JlYWRSYXcgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFR5cGVJbmZvUmVhZFZhcmlhYmxlKEhUeXBlSW5mb1JlYWRWYXJpYWJsZSBub2RlKSA9PgogICAgICB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwoKICBAb3ZlcnJpZGUKICB2aXNpdFR5cGVJbmZvRXhwcmVzc2lvbihIVHlwZUluZm9FeHByZXNzaW9uIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7CgogIEBvdmVycmlkZQogIHZpc2l0SXNUZXN0KEhJc1Rlc3Qgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEFzQ2hlY2soSEFzQ2hlY2sgbm9kZSkgPT4gdmlzaXRDaGVjayhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEFzQ2hlY2tTaW1wbGUoSEFzQ2hlY2tTaW1wbGUgbm9kZSkgPT4gdmlzaXRDaGVjayhub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFN1YnR5cGVDaGVjayhIU3VidHlwZUNoZWNrIG5vZGUpID0+IHZpc2l0Q2hlY2sobm9kZSk7CiAgQG92ZXJyaWRlCiAgdmlzaXRMb2FkVHlwZShITG9hZFR5cGUgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdEluc3RhbmNlRW52aXJvbm1lbnQoSEluc3RhbmNlRW52aXJvbm1lbnQgbm9kZSkgPT4gdmlzaXRJbnN0cnVjdGlvbihub2RlKTsKICBAb3ZlcnJpZGUKICB2aXNpdFR5cGVFdmFsKEhUeXBlRXZhbCBub2RlKSA9PiB2aXNpdEluc3RydWN0aW9uKG5vZGUpOwogIEBvdmVycmlkZQogIHZpc2l0VHlwZUJpbmQoSFR5cGVCaW5kIG5vZGUpID0+IHZpc2l0SW5zdHJ1Y3Rpb24obm9kZSk7Cn0KCmNsYXNzIFN1YkdyYXBoIHsKICAvLyBUaGUgZmlyc3QgYW5kIGxhc3QgYmxvY2sgb2YgdGhlIHN1Yi1ncmFwaC4KICBmaW5hbCBIQmFzaWNCbG9jayBzdGFydDsKICBmaW5hbCBIQmFzaWNCbG9jayBlbmQ7CgogIGNvbnN0IFN1YkdyYXBoKHRoaXMuc3RhcnQsIHRoaXMuZW5kKTsKCiAgYm9vbCBjb250YWlucyhIQmFzaWNCbG9jayBibG9jaykgewogICAgYXNzZXJ0KHN0YXJ0ICE9IG51bGwpOwogICAgYXNzZXJ0KGVuZCAhPSBudWxsKTsKICAgIGFzc2VydChibG9jayAhPSBudWxsKTsKICAgIHJldHVybiBzdGFydC5pZCA8PSBibG9jay5pZCAmJiBibG9jay5pZCA8PSBlbmQuaWQ7CiAgfQp9CgpjbGFzcyBTdWJFeHByZXNzaW9uIGV4dGVuZHMgU3ViR3JhcGggewogIGNvbnN0IFN1YkV4cHJlc3Npb24oSEJhc2ljQmxvY2sgc3RhcnQsIEhCYXNpY0Jsb2NrIGVuZCkgOiBzdXBlcihzdGFydCwgZW5kKTsKCiAgLy8vIEZpbmQgdGhlIGNvbmRpdGlvbiBleHByZXNzaW9uIGlmIHRoaXMgc3ViLWV4cHJlc3Npb24gaXMgYSBjb25kaXRpb24uCiAgSEluc3RydWN0aW9uIGdldCBjb25kaXRpb25FeHByZXNzaW9uIHsKICAgIEhJbnN0cnVjdGlvbiBsYXN0ID0gZW5kLmxhc3Q7CiAgICBpZiAobGFzdCBpcyBIQ29uZGl0aW9uYWxCcmFuY2ggfHwgbGFzdCBpcyBIU3dpdGNoKSByZXR1cm4gbGFzdC5pbnB1dHNbMF07CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmNsYXNzIEhJbnN0cnVjdGlvbkxpc3QgewogIEhJbnN0cnVjdGlvbiBmaXJzdCA9IG51bGw7CiAgSEluc3RydWN0aW9uIGxhc3QgPSBudWxsOwoKICBib29sIGdldCBpc0VtcHR5IHsKICAgIHJldHVybiBmaXJzdCA9PSBudWxsOwogIH0KCiAgdm9pZCBpbnRlcm5hbEFkZEFmdGVyKEhJbnN0cnVjdGlvbiBjdXJzb3IsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgaWYgKGN1cnNvciA9PSBudWxsKSB7CiAgICAgIGFzc2VydChpc0VtcHR5KTsKICAgICAgZmlyc3QgPSBsYXN0ID0gaW5zdHJ1Y3Rpb247CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChjdXJzb3IsIGxhc3QpKSB7CiAgICAgIGxhc3QubmV4dCA9IGluc3RydWN0aW9uOwogICAgICBpbnN0cnVjdGlvbi5wcmV2aW91cyA9IGxhc3Q7CiAgICAgIGxhc3QgPSBpbnN0cnVjdGlvbjsKICAgIH0gZWxzZSB7CiAgICAgIGluc3RydWN0aW9uLnByZXZpb3VzID0gY3Vyc29yOwogICAgICBpbnN0cnVjdGlvbi5uZXh0ID0gY3Vyc29yLm5leHQ7CiAgICAgIGN1cnNvci5uZXh0LnByZXZpb3VzID0gaW5zdHJ1Y3Rpb247CiAgICAgIGN1cnNvci5uZXh0ID0gaW5zdHJ1Y3Rpb247CiAgICB9CiAgfQoKICB2b2lkIGludGVybmFsQWRkQmVmb3JlKEhJbnN0cnVjdGlvbiBjdXJzb3IsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgaWYgKGN1cnNvciA9PSBudWxsKSB7CiAgICAgIGFzc2VydChpc0VtcHR5KTsKICAgICAgZmlyc3QgPSBsYXN0ID0gaW5zdHJ1Y3Rpb247CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChjdXJzb3IsIGZpcnN0KSkgewogICAgICBmaXJzdC5wcmV2aW91cyA9IGluc3RydWN0aW9uOwogICAgICBpbnN0cnVjdGlvbi5uZXh0ID0gZmlyc3Q7CiAgICAgIGZpcnN0ID0gaW5zdHJ1Y3Rpb247CiAgICB9IGVsc2UgewogICAgICBpbnN0cnVjdGlvbi5uZXh0ID0gY3Vyc29yOwogICAgICBpbnN0cnVjdGlvbi5wcmV2aW91cyA9IGN1cnNvci5wcmV2aW91czsKICAgICAgY3Vyc29yLnByZXZpb3VzLm5leHQgPSBpbnN0cnVjdGlvbjsKICAgICAgY3Vyc29yLnByZXZpb3VzID0gaW5zdHJ1Y3Rpb247CiAgICB9CiAgfQoKICB2b2lkIGRldGFjaChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydChfdHJ1bmNhdGVkQ29udGFpbnNGb3JBc3NlcnQoaW5zdHJ1Y3Rpb24pKTsKICAgIGFzc2VydChpbnN0cnVjdGlvbi5pc0luQmFzaWNCbG9jaygpKTsKICAgIGlmIChpbnN0cnVjdGlvbi5wcmV2aW91cyA9PSBudWxsKSB7CiAgICAgIGZpcnN0ID0gaW5zdHJ1Y3Rpb24ubmV4dDsKICAgIH0gZWxzZSB7CiAgICAgIGluc3RydWN0aW9uLnByZXZpb3VzLm5leHQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgfQogICAgaWYgKGluc3RydWN0aW9uLm5leHQgPT0gbnVsbCkgewogICAgICBsYXN0ID0gaW5zdHJ1Y3Rpb24ucHJldmlvdXM7CiAgICB9IGVsc2UgewogICAgICBpbnN0cnVjdGlvbi5uZXh0LnByZXZpb3VzID0gaW5zdHJ1Y3Rpb24ucHJldmlvdXM7CiAgICB9CiAgICBpbnN0cnVjdGlvbi5wcmV2aW91cyA9IG51bGw7CiAgICBpbnN0cnVjdGlvbi5uZXh0ID0gbnVsbDsKICB9CgogIHZvaWQgcmVtb3ZlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgYXNzZXJ0KGluc3RydWN0aW9uLnVzZWRCeS5pc0VtcHR5KTsKICAgIGRldGFjaChpbnN0cnVjdGlvbik7CiAgfQoKICAvLy8gTGluZWFyIHNlYXJjaCBmb3IgW2luc3RydWN0aW9uXS4KICBib29sIGNvbnRhaW5zKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGN1cnNvciA9IGZpcnN0OwogICAgd2hpbGUgKGN1cnNvciAhPSBudWxsKSB7CiAgICAgIGlmIChpZGVudGljYWwoY3Vyc29yLCBpbnN0cnVjdGlvbikpIHJldHVybiB0cnVlOwogICAgICBjdXJzb3IgPSBjdXJzb3IubmV4dDsKICAgIH0KCiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gTGluZWFyIHNlYXJjaCBmb3IgW2luc3RydWN0aW9uXSwgdXAgdG8gYSBsaW1pdCBvZiAxMDAuIFJldHVybnMgd2hldGhlcgogIC8vLyB0aGUgaW5zdHJ1Y3Rpb24gaXMgZm91bmQgb3IgdGhlIGxpc3QgaXMgdG9vIGJpZy4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGZvciBhc3NlcnRpb25zIG9ubHk6IHNvbWUgdGVzdHMgaGF2ZSBwYXRob2xvZ2ljYWwgY2FzZXMgd2hlcmUKICAvLy8gdGhlIGJhc2ljIGJsb2NrcyBhcmUgaHVnZSAoNTBLIG5vZGVzISksIGFuZCB3ZSBmb3VuZCB0aGF0IGNoZWNraW5nIGZvcgogIC8vLyBbY29udGFpbnNdIHdpdGhpbiBvdXIgYXNzZXJ0aW9ucyBtYWRlIGNvbXBpbGF0aW9uIHJlYWxseSBzbG93LgogIGJvb2wgX3RydW5jYXRlZENvbnRhaW5zRm9yQXNzZXJ0KEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGN1cnNvciA9IGZpcnN0OwogICAgaW50IGNvdW50ID0gMDsKICAgIHdoaWxlIChjdXJzb3IgIT0gbnVsbCkgewogICAgICBjb3VudCsrOwogICAgICBpZiAoY291bnQgPiAxMDApIHJldHVybiB0cnVlOwogICAgICBpZiAoaWRlbnRpY2FsKGN1cnNvciwgaW5zdHJ1Y3Rpb24pKSByZXR1cm4gdHJ1ZTsKICAgICAgY3Vyc29yID0gY3Vyc29yLm5leHQ7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKY2xhc3MgSEJhc2ljQmxvY2sgZXh0ZW5kcyBISW5zdHJ1Y3Rpb25MaXN0IHsKICAvLyBUaGUgW2lkXSBtdXN0IGJlIHN1Y2ggdGhhdCBhbnkgc3VjY2Vzc29yJ3MgaWQgaXMgZ3JlYXRlciB0aGFuCiAgLy8gdGhpcyBbaWRdLiBUaGUgZXhjZXB0aW9uIGFyZSBiYWNrLWVkZ2VzLgogIGludCBpZDsKCiAgc3RhdGljIGNvbnN0IGludCBTVEFUVVNfTkVXID0gMDsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRVU19PUEVOID0gMTsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRVU19DTE9TRUQgPSAyOwogIGludCBzdGF0dXMgPSBTVEFUVVNfTkVXOwoKICBISW5zdHJ1Y3Rpb25MaXN0IHBoaXM7CgogIEhMb29wSW5mb3JtYXRpb24gbG9vcEluZm9ybWF0aW9uID0gbnVsbDsKICBIQmxvY2tGbG93IGJsb2NrRmxvdyA9IG51bGw7CiAgSEJhc2ljQmxvY2sgcGFyZW50TG9vcEhlYWRlciA9IG51bGw7CiAgYm9vbCBpc0xpdmUgPSB0cnVlOwoKICBmaW5hbCBMaXN0PEhCYXNpY0Jsb2NrPiBwcmVkZWNlc3NvcnM7CiAgTGlzdDxIQmFzaWNCbG9jaz4gc3VjY2Vzc29yczsKCiAgSEJhc2ljQmxvY2sgZG9taW5hdG9yID0gbnVsbDsKICBmaW5hbCBMaXN0PEhCYXNpY0Jsb2NrPiBkb21pbmF0ZWRCbG9ja3M7CiAgaW50IGRvbWluYXRvckRmc0luOwogIGludCBkb21pbmF0b3JEZnNPdXQ7CgogIEhCYXNpY0Jsb2NrKCkgOiB0aGlzLndpdGhJZChudWxsKTsKICBIQmFzaWNCbG9jay53aXRoSWQodGhpcy5pZCkKICAgICAgOiBwaGlzID0gbmV3IEhJbnN0cnVjdGlvbkxpc3QoKSwKICAgICAgICBwcmVkZWNlc3NvcnMgPSA8SEJhc2ljQmxvY2s+W10sCiAgICAgICAgc3VjY2Vzc29ycyA9IGNvbnN0IDxIQmFzaWNCbG9jaz5bXSwKICAgICAgICBkb21pbmF0ZWRCbG9ja3MgPSA8SEJhc2ljQmxvY2s+W107CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gaWQ7CgogIGJvb2wgaXNOZXcoKSA9PiBzdGF0dXMgPT0gU1RBVFVTX05FVzsKICBib29sIGlzT3BlbigpID0+IHN0YXR1cyA9PSBTVEFUVVNfT1BFTjsKICBib29sIGlzQ2xvc2VkKCkgPT4gc3RhdHVzID09IFNUQVRVU19DTE9TRUQ7CgogIGJvb2wgaXNMb29wSGVhZGVyKCkgewogICAgcmV0dXJuIGxvb3BJbmZvcm1hdGlvbiAhPSBudWxsOwogIH0KCiAgdm9pZCBzZXRCbG9ja0Zsb3coSEJsb2NrSW5mb3JtYXRpb24gYmxvY2tJbmZvLCBIQmFzaWNCbG9jayBjb250aW51YXRpb24pIHsKICAgIGJsb2NrRmxvdyA9IG5ldyBIQmxvY2tGbG93KGJsb2NrSW5mbywgY29udGludWF0aW9uKTsKICB9CgogIGJvb2wgaXNMYWJlbGVkQmxvY2soKSA9PgogICAgICBibG9ja0Zsb3cgIT0gbnVsbCAmJiBibG9ja0Zsb3cuYm9keSBpcyBITGFiZWxlZEJsb2NrSW5mb3JtYXRpb247CgogIEhCYXNpY0Jsb2NrIGdldCBlbmNsb3NpbmdMb29wSGVhZGVyIHsKICAgIGlmIChpc0xvb3BIZWFkZXIoKSkgcmV0dXJuIHRoaXM7CiAgICByZXR1cm4gcGFyZW50TG9vcEhlYWRlcjsKICB9CgogIHZvaWQgb3BlbigpIHsKICAgIGFzc2VydChpc05ldygpKTsKICAgIHN0YXR1cyA9IFNUQVRVU19PUEVOOwogIH0KCiAgdm9pZCBjbG9zZShIQ29udHJvbEZsb3cgZW5kKSB7CiAgICBhc3NlcnQoaXNPcGVuKCkpOwogICAgYWRkQWZ0ZXIobGFzdCwgZW5kKTsKICAgIHN0YXR1cyA9IFNUQVRVU19DTE9TRUQ7CiAgfQoKICB2b2lkIGFkZEF0RW50cnkoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24gaXMhIEhQaGkpOwogICAgaW50ZXJuYWxBZGRCZWZvcmUoZmlyc3QsIGluc3RydWN0aW9uKTsKICAgIGluc3RydWN0aW9uLm5vdGlmeUFkZGVkVG9CbG9jayh0aGlzKTsKICB9CgogIHZvaWQgYWRkQXRFeGl0KEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgYXNzZXJ0KGlzQ2xvc2VkKCkpOwogICAgYXNzZXJ0KGxhc3QgaXMgSENvbnRyb2xGbG93KTsKICAgIGFzc2VydChpbnN0cnVjdGlvbiBpcyEgSFBoaSk7CiAgICBpbnRlcm5hbEFkZEJlZm9yZShsYXN0LCBpbnN0cnVjdGlvbik7CiAgICBpbnN0cnVjdGlvbi5ub3RpZnlBZGRlZFRvQmxvY2sodGhpcyk7CiAgfQoKICB2b2lkIG1vdmVBdEV4aXQoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24gaXMhIEhQaGkpOwogICAgYXNzZXJ0KGluc3RydWN0aW9uLmlzSW5CYXNpY0Jsb2NrKCkpOwogICAgYXNzZXJ0KGlzQ2xvc2VkKCkpOwogICAgYXNzZXJ0KGxhc3QgaXMgSENvbnRyb2xGbG93KTsKICAgIGludGVybmFsQWRkQmVmb3JlKGxhc3QsIGluc3RydWN0aW9uKTsKICAgIGluc3RydWN0aW9uLmJsb2NrID0gdGhpczsKICAgIGFzc2VydChpc1ZhbGlkKCkpOwogIH0KCiAgdm9pZCBhZGQoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24gaXMhIEhDb250cm9sRmxvdyk7CiAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24gaXMhIEhQaGkpOwogICAgaW50ZXJuYWxBZGRBZnRlcihsYXN0LCBpbnN0cnVjdGlvbik7CiAgICBpbnN0cnVjdGlvbi5ub3RpZnlBZGRlZFRvQmxvY2sodGhpcyk7CiAgfQoKICB2b2lkIGFkZFBoaShIUGhpIHBoaSkgewogICAgYXNzZXJ0KHBoaS5pbnB1dHMubGVuZ3RoID09IDAgfHwgcGhpLmlucHV0cy5sZW5ndGggPT0gcHJlZGVjZXNzb3JzLmxlbmd0aCk7CiAgICBhc3NlcnQocGhpLmJsb2NrID09IG51bGwpOwogICAgcGhpcy5pbnRlcm5hbEFkZEFmdGVyKHBoaXMubGFzdCwgcGhpKTsKICAgIHBoaS5ub3RpZnlBZGRlZFRvQmxvY2sodGhpcyk7CiAgfQoKICB2b2lkIHJlbW92ZVBoaShIUGhpIHBoaSkgewogICAgcGhpcy5yZW1vdmUocGhpKTsKICAgIGFzc2VydChwaGkuYmxvY2sgPT0gdGhpcyk7CiAgICBwaGkubm90aWZ5UmVtb3ZlZEZyb21CbG9jaygpOwogIH0KCiAgdm9pZCBhZGRBZnRlcihISW5zdHJ1Y3Rpb24gY3Vyc29yLCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydChjdXJzb3IgaXMhIEhQaGkpOwogICAgYXNzZXJ0KGluc3RydWN0aW9uIGlzISBIUGhpKTsKICAgIGFzc2VydChpc09wZW4oKSB8fCBpc0Nsb3NlZCgpKTsKICAgIGludGVybmFsQWRkQWZ0ZXIoY3Vyc29yLCBpbnN0cnVjdGlvbik7CiAgICBpbnN0cnVjdGlvbi5ub3RpZnlBZGRlZFRvQmxvY2sodGhpcyk7CiAgfQoKICB2b2lkIGFkZEJlZm9yZShISW5zdHJ1Y3Rpb24gY3Vyc29yLCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydChjdXJzb3IgaXMhIEhQaGkpOwogICAgYXNzZXJ0KGluc3RydWN0aW9uIGlzISBIUGhpKTsKICAgIGFzc2VydChpc09wZW4oKSB8fCBpc0Nsb3NlZCgpKTsKICAgIGludGVybmFsQWRkQmVmb3JlKGN1cnNvciwgaW5zdHJ1Y3Rpb24pOwogICAgaW5zdHJ1Y3Rpb24ubm90aWZ5QWRkZWRUb0Jsb2NrKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBhc3NlcnQoaXNPcGVuKCkgfHwgaXNDbG9zZWQoKSk7CiAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24gaXMhIEhQaGkpOwogICAgc3VwZXIucmVtb3ZlKGluc3RydWN0aW9uKTsKICAgIGFzc2VydChpbnN0cnVjdGlvbi5ibG9jayA9PSB0aGlzKTsKICAgIGluc3RydWN0aW9uLm5vdGlmeVJlbW92ZWRGcm9tQmxvY2soKTsKICB9CgogIHZvaWQgYWRkU3VjY2Vzc29yKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBpZiAoc3VjY2Vzc29ycy5pc0VtcHR5KSB7CiAgICAgIHN1Y2Nlc3NvcnMgPSBbYmxvY2tdOwogICAgfSBlbHNlIHsKICAgICAgc3VjY2Vzc29ycy5hZGQoYmxvY2spOwogICAgfQogICAgYmxvY2sucHJlZGVjZXNzb3JzLmFkZCh0aGlzKTsKICB9CgogIHZvaWQgcG9zdFByb2Nlc3NMb29wSGVhZGVyKCkgewogICAgYXNzZXJ0KGlzTG9vcEhlYWRlcigpKTsKICAgIC8vIE9ubHkgdGhlIGZpcnN0IGVudHJ5IGludG8gdGhlIGxvb3AgaXMgZnJvbSBvdXRzaWRlIHRoZQogICAgLy8gbG9vcC4gQWxsIG90aGVyIGVudHJpZXMgbXVzdCBiZSBiYWNrIGVkZ2VzLgogICAgZm9yIChpbnQgaSA9IDEsIGxlbmd0aCA9IHByZWRlY2Vzc29ycy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBsb29wSW5mb3JtYXRpb24uYWRkQmFja0VkZ2UocHJlZGVjZXNzb3JzW2ldKTsKICAgIH0KICB9CgogIC8vLyBSZXdyaXRlcyBhbGwgdXNlcyBvZiB0aGUgW2Zyb21dIGluc3RydWN0aW9uIHRvIHVzaW5nIHRoZSBbdG9dCiAgLy8vIGluc3RydWN0aW9uIGluc3RlYWQuCiAgdm9pZCByZXdyaXRlKEhJbnN0cnVjdGlvbiBmcm9tLCBISW5zdHJ1Y3Rpb24gdG8pIHsKICAgIGZvciAoSEluc3RydWN0aW9uIHVzZSBpbiBmcm9tLnVzZWRCeSkgewogICAgICB1c2UucmV3cml0ZUlucHV0KGZyb20sIHRvKTsKICAgIH0KICAgIHRvLnVzZWRCeS5hZGRBbGwoZnJvbS51c2VkQnkpOwogICAgZnJvbS51c2VkQnkuY2xlYXIoKTsKICB9CgogIC8vLyBSZXdyaXRlcyBhbGwgdXNlcyBvZiB0aGUgW2Zyb21dIGluc3RydWN0aW9uIHRvIHVzaW5nIGVpdGhlciB0aGUKICAvLy8gW3RvXSBpbnN0cnVjdGlvbiwgb3IgYSBbSENoZWNrXSBpbnN0cnVjdGlvbiB0aGF0IGhhcyBiZXR0ZXIgdHlwZQogIC8vLyBpbmZvcm1hdGlvbiBvbiBbdG9dLCBhbmQgdGhhdCBkb21pbmF0ZXMgdGhlIHVzZXIuCiAgdm9pZCByZXdyaXRlV2l0aEJldHRlclVzZXIoSEluc3RydWN0aW9uIGZyb20sIEhJbnN0cnVjdGlvbiB0bykgewogICAgLy8gQlVHKDExODQxKTogVHVybiB0aGlzIG1ldGhvZCBpbnRvIGEgcGhhc2UgdG8gYmUgcnVuIGFmdGVyIEdWTiBwaGFzZXMuCiAgICBMaW5rPEhDaGVjaz4gYmV0dGVyID0gY29uc3QgTGluazxIQ2hlY2s+KCk7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIHRvLnVzZWRCeSkgewogICAgICBpZiAodXNlciA9PSBmcm9tIHx8IHVzZXIgaXMhIEhDaGVjaykgY29udGludWU7CiAgICAgIEhDaGVjayBjaGVjayA9IHVzZXI7CiAgICAgIGlmIChjaGVjay5jaGVja2VkSW5wdXQgPT0gdG8pIHsKICAgICAgICBiZXR0ZXIgPSBiZXR0ZXIucHJlcGVuZCh1c2VyKTsKICAgICAgfQogICAgfQoKICAgIGlmIChiZXR0ZXIuaXNFbXB0eSkgcmV0dXJuIHJld3JpdGUoZnJvbSwgdG8pOwoKICAgIEwxOgogICAgZm9yIChISW5zdHJ1Y3Rpb24gdXNlciBpbiBmcm9tLnVzZWRCeSkgewogICAgICBmb3IgKEhDaGVjayBjaGVjayBpbiBiZXR0ZXIpIHsKICAgICAgICBpZiAoY2hlY2suZG9taW5hdGVzKHVzZXIpKSB7CiAgICAgICAgICB1c2VyLnJld3JpdGVJbnB1dChmcm9tLCBjaGVjayk7CiAgICAgICAgICBjaGVjay51c2VkQnkuYWRkKHVzZXIpOwogICAgICAgICAgY29udGludWUgTDE7CiAgICAgICAgfQogICAgICB9CiAgICAgIHVzZXIucmV3cml0ZUlucHV0KGZyb20sIHRvKTsKICAgICAgdG8udXNlZEJ5LmFkZCh1c2VyKTsKICAgIH0KICAgIGZyb20udXNlZEJ5LmNsZWFyKCk7CiAgfQoKICBib29sIGlzRXhpdEJsb2NrKCkgewogICAgcmV0dXJuIGlkZW50aWNhbChmaXJzdCwgbGFzdCkgJiYgZmlyc3QgaXMgSEV4aXQ7CiAgfQoKICB2b2lkIGFkZERvbWluYXRlZEJsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBhc3NlcnQoaXNDbG9zZWQoKSk7CiAgICBhc3NlcnQoaWQgIT0gbnVsbCAmJiBibG9jay5pZCAhPSBudWxsKTsKICAgIGFzc2VydChkb21pbmF0ZWRCbG9ja3MuaW5kZXhPZihibG9jaykgPCAwKTsKICAgIC8vIEtlZXAgdGhlIGxpc3Qgb2YgZG9taW5hdGVkIGJsb2NrcyBzb3J0ZWQgc3VjaCB0aGF0IGlmIHRoZXJlIGFyZSB0d28KICAgIC8vIHN1Y2NlZWRpbmcgYmxvY2tzIGluIHRoZSBsaXN0LCB0aGUgcHJlZGVjZXNzb3IgaXMgYmVmb3JlIHRoZSBzdWNjZXNzb3IuCiAgICAvLyBBc3N1bWUgdGhhdCB3ZSBhZGQgdGhlIGRvbWluYXRlZCBibG9ja3MgaW4gdGhlIHJpZ2h0IG9yZGVyLgogICAgaW50IGluZGV4ID0gZG9taW5hdGVkQmxvY2tzLmxlbmd0aDsKICAgIHdoaWxlIChpbmRleCA+IDAgJiYgZG9taW5hdGVkQmxvY2tzW2luZGV4IC0gMV0uaWQgPiBibG9jay5pZCkgewogICAgICBpbmRleC0tOwogICAgfQogICAgaWYgKGluZGV4ID09IGRvbWluYXRlZEJsb2Nrcy5sZW5ndGgpIHsKICAgICAgZG9taW5hdGVkQmxvY2tzLmFkZChibG9jayk7CiAgICB9IGVsc2UgewogICAgICBkb21pbmF0ZWRCbG9ja3MuaW5zZXJ0KGluZGV4LCBibG9jayk7CiAgICB9CiAgICBhc3NlcnQoYmxvY2suZG9taW5hdG9yID09IG51bGwpOwogICAgYmxvY2suZG9taW5hdG9yID0gdGhpczsKICB9CgogIHZvaWQgcmVtb3ZlRG9taW5hdGVkQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGFzc2VydChpc0Nsb3NlZCgpKTsKICAgIGFzc2VydChpZCAhPSBudWxsICYmIGJsb2NrLmlkICE9IG51bGwpOwogICAgaW50IGluZGV4ID0gZG9taW5hdGVkQmxvY2tzLmluZGV4T2YoYmxvY2spOwogICAgYXNzZXJ0KGluZGV4ID49IDApOwogICAgaWYgKGluZGV4ID09IGRvbWluYXRlZEJsb2Nrcy5sZW5ndGggLSAxKSB7CiAgICAgIGRvbWluYXRlZEJsb2Nrcy5yZW1vdmVMYXN0KCk7CiAgICB9IGVsc2UgewogICAgICBkb21pbmF0ZWRCbG9ja3MucmVtb3ZlUmFuZ2UoaW5kZXgsIGluZGV4ICsgMSk7CiAgICB9CiAgICBhc3NlcnQoaWRlbnRpY2FsKGJsb2NrLmRvbWluYXRvciwgdGhpcykpOwogICAgYmxvY2suZG9taW5hdG9yID0gbnVsbDsKICB9CgogIHZvaWQgYXNzaWduQ29tbW9uRG9taW5hdG9yKEhCYXNpY0Jsb2NrIHByZWRlY2Vzc29yKSB7CiAgICBhc3NlcnQoaXNDbG9zZWQoKSk7CiAgICBpZiAoZG9taW5hdG9yID09IG51bGwpIHsKICAgICAgLy8gSWYgdGhpcyBiYXNpYyBibG9jayBkb2Vzbid0IGhhdmUgYSBkb21pbmF0b3IgeWV0IHdlIHVzZSB0aGUKICAgICAgLy8gZ2l2ZW4gcHJlZGVjZXNzb3IgYXMgdGhlIGRvbWluYXRvci4KICAgICAgcHJlZGVjZXNzb3IuYWRkRG9taW5hdGVkQmxvY2sodGhpcyk7CiAgICB9IGVsc2UgaWYgKHByZWRlY2Vzc29yLmRvbWluYXRvciAhPSBudWxsKSB7CiAgICAgIC8vIElmIHRoZSBwcmVkZWNlc3NvciBoYXMgYSBkb21pbmF0b3IgYW5kIHRoaXMgYmFzaWMgYmxvY2sgaGFzIGEKICAgICAgLy8gZG9taW5hdG9yLCB3ZSBmaW5kIGEgY29tbW9uIHBhcmVudCBpbiB0aGUgZG9taW5hdG9yIHRyZWUgYW5kCiAgICAgIC8vIHVzZSB0aGF0IGFzIHRoZSBkb21pbmF0b3IuCiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrMCA9IGRvbWluYXRvcjsKICAgICAgSEJhc2ljQmxvY2sgYmxvY2sxID0gcHJlZGVjZXNzb3I7CiAgICAgIHdoaWxlICghaWRlbnRpY2FsKGJsb2NrMCwgYmxvY2sxKSkgewogICAgICAgIGlmIChibG9jazAuaWQgPiBibG9jazEuaWQpIHsKICAgICAgICAgIGJsb2NrMCA9IGJsb2NrMC5kb21pbmF0b3I7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJsb2NrMSA9IGJsb2NrMS5kb21pbmF0b3I7CiAgICAgICAgfQogICAgICAgIGFzc2VydChibG9jazAgIT0gbnVsbCAmJiBibG9jazEgIT0gbnVsbCk7CiAgICAgIH0KICAgICAgaWYgKCFpZGVudGljYWwoZG9taW5hdG9yLCBibG9jazApKSB7CiAgICAgICAgZG9taW5hdG9yLnJlbW92ZURvbWluYXRlZEJsb2NrKHRoaXMpOwogICAgICAgIGJsb2NrMC5hZGREb21pbmF0ZWRCbG9jayh0aGlzKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBmb3JFYWNoUGhpKHZvaWQgZihIUGhpIHBoaSkpIHsKICAgIEhQaGkgY3VycmVudCA9IHBoaXMuZmlyc3Q7CiAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBzYXZlZCA9IGN1cnJlbnQubmV4dDsKICAgICAgZihjdXJyZW50KTsKICAgICAgY3VycmVudCA9IHNhdmVkOwogICAgfQogIH0KCiAgdm9pZCBmb3JFYWNoSW5zdHJ1Y3Rpb24odm9pZCBmKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikpIHsKICAgIEhJbnN0cnVjdGlvbiBjdXJyZW50ID0gZmlyc3Q7CiAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBzYXZlZCA9IGN1cnJlbnQubmV4dDsKICAgICAgZihjdXJyZW50KTsKICAgICAgY3VycmVudCA9IHNhdmVkOwogICAgfQogIH0KCiAgYm9vbCBpc1ZhbGlkKCkgewogICAgYXNzZXJ0KGlzQ2xvc2VkKCkpOwogICAgSFZhbGlkYXRvciB2YWxpZGF0b3IgPSBuZXcgSFZhbGlkYXRvcigpOwogICAgdmFsaWRhdG9yLnZpc2l0QmFzaWNCbG9jayh0aGlzKTsKICAgIHJldHVybiB2YWxpZGF0b3IuaXNWYWxpZDsKICB9CgogIGJvb2wgZG9taW5hdGVzKEhCYXNpY0Jsb2NrIG90aGVyKSB7CiAgICByZXR1cm4gdGhpcy5kb21pbmF0b3JEZnNJbiA8PSBvdGhlci5kb21pbmF0b3JEZnNJbiAmJgogICAgICAgIG90aGVyLmRvbWluYXRvckRmc091dCA8PSB0aGlzLmRvbWluYXRvckRmc091dDsKICB9CgogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ0hCYXNpY0Jsb2NrKCRpZCknOwp9CgphYnN0cmFjdCBjbGFzcyBISW5zdHJ1Y3Rpb24gaW1wbGVtZW50cyBTcGFubmFibGUgewogIEVudGl0eSBzb3VyY2VFbGVtZW50OwogIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uOwoKICBmaW5hbCBpbnQgaWQ7CiAgc3RhdGljIGludCBpZENvdW50ZXI7CgogIGZpbmFsIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHM7CiAgZmluYWwgTGlzdDxISW5zdHJ1Y3Rpb24+IHVzZWRCeTsKCiAgSEJhc2ljQmxvY2sgYmxvY2s7CiAgSEluc3RydWN0aW9uIHByZXZpb3VzID0gbnVsbDsKICBISW5zdHJ1Y3Rpb24gbmV4dCA9IG51bGw7CgogIFNpZGVFZmZlY3RzIHNpZGVFZmZlY3RzID0gbmV3IFNpZGVFZmZlY3RzLmVtcHR5KCk7CiAgYm9vbCBfdXNlR3ZuID0gZmFsc2U7CgogIC8vIFR5cGUgY29kZXMuCiAgc3RhdGljIGNvbnN0IGludCBVTkRFRklORURfVFlQRUNPREUgPSAtMTsKICBzdGF0aWMgY29uc3QgaW50IFRZUEVfR1VBUkRfVFlQRUNPREUgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgQk9VTkRTX0NIRUNLX1RZUEVDT0RFID0gMjsKICBzdGF0aWMgY29uc3QgaW50IElOVEVHRVJfQ0hFQ0tfVFlQRUNPREUgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgSU5URVJDRVBUT1JfVFlQRUNPREUgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgQUREX1RZUEVDT0RFID0gNTsKICBzdGF0aWMgY29uc3QgaW50IERJVklERV9UWVBFQ09ERSA9IDY7CiAgc3RhdGljIGNvbnN0IGludCBNVUxUSVBMWV9UWVBFQ09ERSA9IDc7CiAgc3RhdGljIGNvbnN0IGludCBTVUJUUkFDVF9UWVBFQ09ERSA9IDg7CiAgc3RhdGljIGNvbnN0IGludCBTSElGVF9MRUZUX1RZUEVDT0RFID0gOTsKICBzdGF0aWMgY29uc3QgaW50IEJJVF9PUl9UWVBFQ09ERSA9IDEwOwogIHN0YXRpYyBjb25zdCBpbnQgQklUX0FORF9UWVBFQ09ERSA9IDExOwogIHN0YXRpYyBjb25zdCBpbnQgQklUX1hPUl9UWVBFQ09ERSA9IDEyOwogIHN0YXRpYyBjb25zdCBpbnQgTkVHQVRFX1RZUEVDT0RFID0gMTM7CiAgc3RhdGljIGNvbnN0IGludCBCSVRfTk9UX1RZUEVDT0RFID0gMTQ7CiAgc3RhdGljIGNvbnN0IGludCBOT1RfVFlQRUNPREUgPSAxNTsKICBzdGF0aWMgY29uc3QgaW50IElERU5USVRZX1RZUEVDT0RFID0gMTY7CiAgc3RhdGljIGNvbnN0IGludCBHUkVBVEVSX1RZUEVDT0RFID0gMTc7CiAgc3RhdGljIGNvbnN0IGludCBHUkVBVEVSX0VRVUFMX1RZUEVDT0RFID0gMTg7CiAgc3RhdGljIGNvbnN0IGludCBMRVNTX1RZUEVDT0RFID0gMTk7CiAgc3RhdGljIGNvbnN0IGludCBMRVNTX0VRVUFMX1RZUEVDT0RFID0gMjA7CiAgc3RhdGljIGNvbnN0IGludCBTVEFUSUNfVFlQRUNPREUgPSAyMTsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRJQ19TVE9SRV9UWVBFQ09ERSA9IDIyOwogIHN0YXRpYyBjb25zdCBpbnQgRklFTERfR0VUX1RZUEVDT0RFID0gMjM7CiAgc3RhdGljIGNvbnN0IGludCBUWVBFX0NPTlZFUlNJT05fVFlQRUNPREUgPSAyNDsKICBzdGF0aWMgY29uc3QgaW50IFRZUEVfS05PV05fVFlQRUNPREUgPSAyNTsKICBzdGF0aWMgY29uc3QgaW50IElOVk9LRV9TVEFUSUNfVFlQRUNPREUgPSAyNjsKICBzdGF0aWMgY29uc3QgaW50IElOREVYX1RZUEVDT0RFID0gMjc7CiAgc3RhdGljIGNvbnN0IGludCBJU19UWVBFQ09ERSA9IDI4OwogIHN0YXRpYyBjb25zdCBpbnQgSU5WT0tFX0RZTkFNSUNfVFlQRUNPREUgPSAyOTsKICBzdGF0aWMgY29uc3QgaW50IFNISUZUX1JJR0hUX1RZUEVDT0RFID0gMzA7CgogIHN0YXRpYyBjb25zdCBpbnQgVFJVTkNBVElOR19ESVZJREVfVFlQRUNPREUgPSAzNjsKICBzdGF0aWMgY29uc3QgaW50IElTX1ZJQV9JTlRFUkNFUFRPUl9UWVBFQ09ERSA9IDM3OwoKICBzdGF0aWMgY29uc3QgaW50IFRZUEVfSU5GT19SRUFEX1JBV19UWVBFQ09ERSA9IDM4OwogIHN0YXRpYyBjb25zdCBpbnQgVFlQRV9JTkZPX1JFQURfVkFSSUFCTEVfVFlQRUNPREUgPSAzOTsKICBzdGF0aWMgY29uc3QgaW50IFRZUEVfSU5GT19FWFBSRVNTSU9OX1RZUEVDT0RFID0gNDA7CgogIHN0YXRpYyBjb25zdCBpbnQgRk9SRUlHTl9DT0RFX1RZUEVDT0RFID0gNDE7CiAgc3RhdGljIGNvbnN0IGludCBSRU1BSU5ERVJfVFlQRUNPREUgPSA0MjsKICBzdGF0aWMgY29uc3QgaW50IEdFVF9MRU5HVEhfVFlQRUNPREUgPSA0MzsKICBzdGF0aWMgY29uc3QgaW50IEFCU19UWVBFQ09ERSA9IDQ0OwogIHN0YXRpYyBjb25zdCBpbnQgQk9PTF9DT05WRVJTSU9OX1RZUEVDT0RFID0gNDU7CiAgc3RhdGljIGNvbnN0IGludCBQUklNSVRJVkVfQ0hFQ0tfVFlQRUNPREUgPSA0NjsKCiAgc3RhdGljIGNvbnN0IGludCBJU19URVNUX1RZUEVDT0RFID0gNDc7CiAgc3RhdGljIGNvbnN0IGludCBBU19DSEVDS19UWVBFQ09ERSA9IDQ4OwogIHN0YXRpYyBjb25zdCBpbnQgQVNfQ0hFQ0tfU0lNUExFX1RZUEVDT0RFID0gNDk7CiAgc3RhdGljIGNvbnN0IGludCBTVUJUWVBFX0NIRUNLX1RZUEVDT0RFID0gNTA7CiAgc3RhdGljIGNvbnN0IGludCBMT0FEX1RZUEVfVFlQRUNPREUgPSA1MTsKICBzdGF0aWMgY29uc3QgaW50IElOU1RBTkNFX0VOVklST05NRU5UX1RZUEVDT0RFID0gNTI7CiAgc3RhdGljIGNvbnN0IGludCBUWVBFX0VWQUxfVFlQRUNPREUgPSA1MzsKICBzdGF0aWMgY29uc3QgaW50IFRZUEVfQklORF9UWVBFQ09ERSA9IDU0OwoKICBISW5zdHJ1Y3Rpb24odGhpcy5pbnB1dHMsIHRoaXMuaW5zdHJ1Y3Rpb25UeXBlKQogICAgICA6IGlkID0gaWRDb3VudGVyKyssCiAgICAgICAgdXNlZEJ5ID0gPEhJbnN0cnVjdGlvbj5bXSB7CiAgICBhc3NlcnQoaW5wdXRzLmV2ZXJ5KChlKSA9PiBlICE9IG51bGwpLCAiaW5wdXRzOiAkaW5wdXRzIik7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGlkOwoKICBib29sIHVzZUd2bigpID0+IF91c2VHdm47CiAgdm9pZCBzZXRVc2VHdm4oKSB7CiAgICBfdXNlR3ZuID0gdHJ1ZTsKICB9CgogIGJvb2wgZ2V0IGlzTW92YWJsZSA9PiB1c2VHdm4oKTsKCiAgLy8vIEEgcHVyZSBpbnN0cnVjdGlvbiBpcyBhbiBpbnN0cnVjdGlvbiB0aGF0IGRvZXMgbm90IGhhdmUgYW55IHNpZGUKICAvLy8gZWZmZWN0LCBub3IgYW55IGRlcGVuZGVuY3kuIFRoZXkgY2FuIGJlIG1vdmVkIGFueXdoZXJlIGluIHRoZQogIC8vLyBncmFwaC4KICBib29sIGlzUHVyZShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgewogICAgcmV0dXJuICFzaWRlRWZmZWN0cy5oYXNTaWRlRWZmZWN0cygpICYmCiAgICAgICAgIXNpZGVFZmZlY3RzLmRlcGVuZHNPblNvbWV0aGluZygpICYmCiAgICAgICAgIWNhblRocm93KGRvbWFpbik7CiAgfQoKICAvLy8gQW4gaW5zdHJ1Y3Rpb24gaXMgYW4gJ2FsbG9jYXRpb24nIGlzIGl0IGlzIHRoZSBzb2xlIGFsaWFzIGZvciBhbiBvYmplY3QuCiAgLy8vIFRoaXMgYXBwbGllcyB0byBpbnN0cnVjdGlvbnMgdGhhdCBhbGxvY2F0ZSBuZXcgb2JqZWN0cyBhbmQgY2FuIGJlIGV4dGVuZGVkCiAgLy8vIHRvIG1ldGhvZHMgdGhhdCByZXR1cm4gb3RoZXIgYWxsb2NhdGlvbnMgd2l0aG91dCBlc2NhcGluZyB0aGVtLgogIGJvb2wgaXNBbGxvY2F0aW9uKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiBmYWxzZTsKCiAgLy8vIE92ZXJyaWRkZW4gYnkgW0hDaGVja10gdG8gcmV0dXJuIHRoZSBhY3R1YWwgbm9uLVtIQ2hlY2tdCiAgLy8vIGluc3RydWN0aW9uIGl0IGNoZWNrcyBhZ2FpbnN0LgogIEhJbnN0cnVjdGlvbiBub25DaGVjaygpID0+IHRoaXM7CgogIC8vLyBDYW4gdGhpcyBub2RlIHRocm93IGFuIGV4Y2VwdGlvbj8KICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiBmYWxzZTsKCiAgLy8vIERvZXMgdGhpcyBub2RlIHBvdGVudGlhbGx5IGFmZmVjdCBjb250cm9sIGZsb3cuCiAgYm9vbCBpc0NvbnRyb2xGbG93KCkgPT4gZmFsc2U7CgogIGJvb2wgaXNWYWx1ZShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzUHJpbWl0aXZlVmFsdWUoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzTnVsbChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzTnVsbChpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNDb25mbGljdGluZyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzRW1wdHkoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNQcmltaXRpdmUoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlTnVtYmVyKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNQcmltaXRpdmVOdW1iZXIoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzUHJpbWl0aXZlQm9vbGVhbihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzUHJpbWl0aXZlQm9vbGVhbihpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmVBcnJheShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzUHJpbWl0aXZlQXJyYXkoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzSW5kZXhhYmxlUHJpbWl0aXZlKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNJbmRleGFibGVQcmltaXRpdmUoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzRml4ZWRBcnJheShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzRml4ZWRBcnJheShpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNFeHRlbmRhYmxlQXJyYXkoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc0V4dGVuZGFibGVBcnJheShpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNNdXRhYmxlQXJyYXkoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc011dGFibGVBcnJheShpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNNdXRhYmxlSW5kZXhhYmxlKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNNdXRhYmxlSW5kZXhhYmxlKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc0FycmF5KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNBcnJheShpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNQcmltaXRpdmVTdHJpbmcoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc1ByaW1pdGl2ZVN0cmluZyhpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNJbnRlZ2VyKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNJbnRlZ2VyKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc1VJbnQzMihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzVUludDMyKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc1VJbnQzMShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzVUludDMxKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc1Bvc2l0aXZlSW50ZWdlcihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzUG9zaXRpdmVJbnRlZ2VyKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc1Bvc2l0aXZlSW50ZWdlck9yTnVsbChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzUG9zaXRpdmVJbnRlZ2VyT3JOdWxsKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc0ludGVnZXJPck51bGwoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIGRvbWFpbi5pc0ludGVnZXJPck51bGwoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzTnVtYmVyKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNOdW1iZXIoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzTnVtYmVyT3JOdWxsKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNOdW1iZXJPck51bGwoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzRG91YmxlKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNEb3VibGUoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzRG91YmxlT3JOdWxsKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNEb3VibGVPck51bGwoaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgQWJzdHJhY3RCb29sIGlzQm9vbGVhbihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzQm9vbGVhbihpbnN0cnVjdGlvblR5cGUpOwoKICBBYnN0cmFjdEJvb2wgaXNCb29sZWFuT3JOdWxsKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICBkb21haW4uaXNCb29sZWFuT3JOdWxsKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc1N0cmluZyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzU3RyaW5nKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc1N0cmluZ09yTnVsbChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzU3RyaW5nT3JOdWxsKGluc3RydWN0aW9uVHlwZSk7CgogIEFic3RyYWN0Qm9vbCBpc1ByaW1pdGl2ZU9yTnVsbChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4KICAgICAgZG9tYWluLmlzUHJpbWl0aXZlT3JOdWxsKGluc3RydWN0aW9uVHlwZSk7CgogIC8vLyBUeXBlIG9mIHRoZSBpbnN0cnVjdGlvbi4KICBBYnN0cmFjdFZhbHVlIGluc3RydWN0aW9uVHlwZTsKCiAgU2VsZWN0b3IgZ2V0IHNlbGVjdG9yID0+IG51bGw7CiAgSEluc3RydWN0aW9uIGdldERhcnRSZWNlaXZlcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpID0+IG51bGw7CiAgYm9vbCBvbmx5VGhyb3dzTlNNKCkgPT4gZmFsc2U7CgogIGJvb2wgaXNJbkJhc2ljQmxvY2soKSA9PiBibG9jayAhPSBudWxsOwoKICBib29sIGd2bkVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpIHsKICAgIGFzc2VydCh1c2VHdm4oKSAmJiBvdGhlci51c2VHdm4oKSk7CiAgICAvLyBDaGVjayB0aGF0IHRoZSB0eXBlIGFuZCB0aGUgc2lkZUVmZmVjdHMgbWF0Y2guCiAgICBib29sIGhhc1NhbWVUeXBlID0gdHlwZUVxdWFscyhvdGhlcik7CiAgICBhc3NlcnQoaGFzU2FtZVR5cGUgPT0gKHR5cGVDb2RlKCkgPT0gb3RoZXIudHlwZUNvZGUoKSkpOwogICAgaWYgKCFoYXNTYW1lVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKHNpZGVFZmZlY3RzICE9IG90aGVyLnNpZGVFZmZlY3RzKSByZXR1cm4gZmFsc2U7CiAgICAvLyBDaGVjayB0aGF0IHRoZSBpbnB1dHMgbWF0Y2guCiAgICBmaW5hbCBpbnQgaW5wdXRzTGVuZ3RoID0gaW5wdXRzLmxlbmd0aDsKICAgIGZpbmFsIExpc3Q8SEluc3RydWN0aW9uPiBvdGhlcklucHV0cyA9IG90aGVyLmlucHV0czsKICAgIGlmIChpbnB1dHNMZW5ndGggIT0gb3RoZXJJbnB1dHMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0c0xlbmd0aDsgaSsrKSB7CiAgICAgIGlmICghaWRlbnRpY2FsKGlucHV0c1tpXS5ub25DaGVjaygpLCBvdGhlcklucHV0c1tpXS5ub25DaGVjaygpKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgLy8gQ2hlY2sgdGhhdCB0aGUgZGF0YSBpbiB0aGUgaW5zdHJ1Y3Rpb24gbWF0Y2hlcy4KICAgIHJldHVybiBkYXRhRXF1YWxzKG90aGVyKTsKICB9CgogIGludCBndm5IYXNoQ29kZSgpIHsKICAgIGludCByZXN1bHQgPSB0eXBlQ29kZSgpOwogICAgaW50IGxlbmd0aCA9IGlucHV0cy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdCA9IChyZXN1bHQgKiAxOSkgKyAoaW5wdXRzW2ldLm5vbkNoZWNrKCkuaWQpICsgKHJlc3VsdCA+PiA3KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBUaGVzZSBtZXRob2RzIHNob3VsZCBiZSBvdmVyd3JpdHRlbiBieSBpbnN0cnVjdGlvbnMgdGhhdAogIC8vIHBhcnRpY2lwYXRlIGluIGdsb2JhbCB2YWx1ZSBudW1iZXJpbmcuCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlVOREVGSU5FRF9UWVBFQ09ERTsKICBib29sIHR5cGVFcXVhbHMoY292YXJpYW50IEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gZmFsc2U7CiAgYm9vbCBkYXRhRXF1YWxzKGNvdmFyaWFudCBISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IGZhbHNlOwoKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcik7CgogIHZvaWQgbm90aWZ5QWRkZWRUb0Jsb2NrKEhCYXNpY0Jsb2NrIHRhcmdldEJsb2NrKSB7CiAgICBhc3NlcnQoIWlzSW5CYXNpY0Jsb2NrKCkpOwogICAgYXNzZXJ0KGJsb2NrID09IG51bGwpOwogICAgLy8gQWRkIFt0aGlzXSB0byB0aGUgaW5wdXRzJyB1c2VzLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgYXNzZXJ0KGlucHV0c1tpXS5pc0luQmFzaWNCbG9jaygpKTsKICAgICAgaW5wdXRzW2ldLnVzZWRCeS5hZGQodGhpcyk7CiAgICB9CiAgICBibG9jayA9IHRhcmdldEJsb2NrOwogICAgYXNzZXJ0KGlzVmFsaWQoKSk7CiAgfQoKICB2b2lkIG5vdGlmeVJlbW92ZWRGcm9tQmxvY2soKSB7CiAgICBhc3NlcnQoaXNJbkJhc2ljQmxvY2soKSk7CiAgICBhc3NlcnQodXNlZEJ5LmlzRW1wdHkpOwoKICAgIC8vIFJlbW92ZSBbdGhpc10gZnJvbSB0aGUgaW5wdXRzJyB1c2VzLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgaW5wdXRzW2ldLnJlbW92ZVVzZXIodGhpcyk7CiAgICB9CiAgICB0aGlzLmJsb2NrID0gbnVsbDsKICAgIGFzc2VydChpc1ZhbGlkKCkpOwogIH0KCiAgLy8vIERvIGEgaW4tcGxhY2UgY2hhbmdlIG9mIFtmcm9tXSB0byBbdG9dLiBXYXJuaW5nOiB0aGlzIGZ1bmN0aW9uCiAgLy8vIGRvZXMgbm90IHVwZGF0ZSBbaW5wdXRzXSBhbmQgW3VzZWRCeV0uIFVzZSBbY2hhbmdlVXNlXSBpbnN0ZWFkLgogIHZvaWQgcmV3cml0ZUlucHV0KEhJbnN0cnVjdGlvbiBmcm9tLCBISW5zdHJ1Y3Rpb24gdG8pIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChpZGVudGljYWwoaW5wdXRzW2ldLCBmcm9tKSkgaW5wdXRzW2ldID0gdG87CiAgICB9CiAgfQoKICAvLy8gUmVtb3ZlcyBhbGwgb2NjdXJyZW5jZXMgb2YgW2luc3RydWN0aW9uXSBmcm9tIFtsaXN0XS4KICB2b2lkIHJlbW92ZUZyb21MaXN0KExpc3Q8SEluc3RydWN0aW9uPiBsaXN0LCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGludCBsZW5ndGggPSBsaXN0Lmxlbmd0aDsKICAgIGludCBpID0gMDsKICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7CiAgICAgIGlmIChpbnN0cnVjdGlvbiA9PSBsaXN0W2ldKSB7CiAgICAgICAgbGlzdFtpXSA9IGxpc3RbbGVuZ3RoIC0gMV07CiAgICAgICAgbGVuZ3RoLS07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaSsrOwogICAgICB9CiAgICB9CiAgICBsaXN0Lmxlbmd0aCA9IGxlbmd0aDsKICB9CgogIC8vLyBSZW1vdmVzIGFsbCBvY2N1cnJlbmNlcyBvZiBbdXNlcl0gZnJvbSBbdXNlZEJ5XS4KICB2b2lkIHJlbW92ZVVzZXIoSEluc3RydWN0aW9uIHVzZXIpIHsKICAgIHJlbW92ZUZyb21MaXN0KHVzZWRCeSwgdXNlcik7CiAgfQoKICAvLyBDaGFuZ2UgYWxsIHVzZXMgb2YgW29sZElucHV0XSBieSBbdGhpc10gdG8gW25ld0lucHV0XS4gQWxzbwogIC8vIHVwZGF0ZXMgdGhlIFt1c2VkQnldIG9mIFtvbGRJbnB1dF0gYW5kIFtuZXdJbnB1dF0uCiAgdm9pZCBjaGFuZ2VVc2UoSEluc3RydWN0aW9uIG9sZElucHV0LCBISW5zdHJ1Y3Rpb24gbmV3SW5wdXQpIHsKICAgIGFzc2VydChuZXdJbnB1dCAhPSBudWxsICYmICFpZGVudGljYWwob2xkSW5wdXQsIG5ld0lucHV0KSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaWRlbnRpY2FsKGlucHV0c1tpXSwgb2xkSW5wdXQpKSB7CiAgICAgICAgaW5wdXRzW2ldID0gbmV3SW5wdXQ7CiAgICAgICAgbmV3SW5wdXQudXNlZEJ5LmFkZCh0aGlzKTsKICAgICAgfQogICAgfQogICAgcmVtb3ZlRnJvbUxpc3Qob2xkSW5wdXQudXNlZEJ5LCB0aGlzKTsKICB9CgogIHZvaWQgcmVwbGFjZUFsbFVzZXJzRG9taW5hdGVkQnkoCiAgICAgIEhJbnN0cnVjdGlvbiBjdXJzb3IsIEhJbnN0cnVjdGlvbiBuZXdJbnN0cnVjdGlvbikgewogICAgRG9taW5hdGVkVXNlcy5vZih0aGlzLCBjdXJzb3IpLnJlcGxhY2VXaXRoKG5ld0luc3RydWN0aW9uKTsKICB9CgogIHZvaWQgbW92ZUJlZm9yZShISW5zdHJ1Y3Rpb24gb3RoZXIpIHsKICAgIGFzc2VydCh0aGlzIGlzISBIQ29udHJvbEZsb3cpOwogICAgYXNzZXJ0KHRoaXMgaXMhIEhQaGkpOwogICAgYXNzZXJ0KG90aGVyIGlzISBIUGhpKTsKICAgIGJsb2NrLmRldGFjaCh0aGlzKTsKICAgIG90aGVyLmJsb2NrLmludGVybmFsQWRkQmVmb3JlKG90aGVyLCB0aGlzKTsKICAgIGJsb2NrID0gb3RoZXIuYmxvY2s7CiAgfQoKICBib29sIGlzQ29uc3RhbnQoKSA9PiBmYWxzZTsKICBib29sIGlzQ29uc3RhbnRCb29sZWFuKCkgPT4gZmFsc2U7CiAgYm9vbCBpc0NvbnN0YW50TnVsbCgpID0+IGZhbHNlOwogIGJvb2wgaXNDb25zdGFudE51bWJlcigpID0+IGZhbHNlOwogIGJvb2wgaXNDb25zdGFudEludGVnZXIoKSA9PiBmYWxzZTsKICBib29sIGlzQ29uc3RhbnRTdHJpbmcoKSA9PiBmYWxzZTsKICBib29sIGlzQ29uc3RhbnRMaXN0KCkgPT4gZmFsc2U7CiAgYm9vbCBpc0NvbnN0YW50TWFwKCkgPT4gZmFsc2U7CiAgYm9vbCBpc0NvbnN0YW50RmFsc2UoKSA9PiBmYWxzZTsKICBib29sIGlzQ29uc3RhbnRUcnVlKCkgPT4gZmFsc2U7CgogIGJvb2wgaXNJbnRlcmNlcHRvcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpID0+IGZhbHNlOwoKICBib29sIGlzVmFsaWQoKSB7CiAgICBIVmFsaWRhdG9yIHZhbGlkYXRvciA9IG5ldyBIVmFsaWRhdG9yKCk7CiAgICB2YWxpZGF0b3IuY3VycmVudEJsb2NrID0gYmxvY2s7CiAgICB2YWxpZGF0b3IudmlzaXRJbnN0cnVjdGlvbih0aGlzKTsKICAgIHJldHVybiB2YWxpZGF0b3IuaXNWYWxpZDsKICB9CgogIGJvb2wgaXNDb2RlTW90aW9uSW52YXJpYW50KCkgPT4gZmFsc2U7CgogIGJvb2wgaXNKc1N0YXRlbWVudCgpID0+IGZhbHNlOwoKICBib29sIGRvbWluYXRlcyhISW5zdHJ1Y3Rpb24gb3RoZXIpIHsKICAgIC8vIEFuIGluc3RydWN0aW9uIGRvZXMgbm90IGRvbWluYXRlcyBpdHNlbGYuCiAgICBpZiAodGhpcyA9PSBvdGhlcikgcmV0dXJuIGZhbHNlOwogICAgaWYgKGJsb2NrICE9IG90aGVyLmJsb2NrKSByZXR1cm4gYmxvY2suZG9taW5hdGVzKG90aGVyLmJsb2NrKTsKCiAgICBISW5zdHJ1Y3Rpb24gY3VycmVudCA9IHRoaXMubmV4dDsKICAgIHdoaWxlIChjdXJyZW50ICE9IG51bGwpIHsKICAgICAgaWYgKGN1cnJlbnQgPT0gb3RoZXIpIHJldHVybiB0cnVlOwogICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0OwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgSEluc3RydWN0aW9uIGNvbnZlcnRUeXBlKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgRGFydFR5cGUgdHlwZSwgaW50IGtpbmQpIHsKICAgIGlmICh0eXBlID09IG51bGwpIHJldHVybiB0aGlzOwogICAgdHlwZSA9IHR5cGUudW5hbGlhc2VkOwogICAgLy8gT25seSB0aGUgYnVpbGRlciBrbm93cyBob3cgdG8gY3JlYXRlIFtIVHlwZUNvbnZlcnNpb25dCiAgICAvLyBpbnN0cnVjdGlvbnMgd2l0aCBnZW5lcmljcy4gSXQgaGFzIHRoZSBnZW5lcmljIHR5cGUgY29udGV4dAogICAgLy8gYXZhaWxhYmxlLgogICAgYXNzZXJ0KCF0eXBlLmlzVHlwZVZhcmlhYmxlKTsKICAgIGFzc2VydCh0eXBlLnRyZWF0QXNSYXcgfHwgdHlwZS5pc0Z1bmN0aW9uVHlwZSk7CiAgICBpZiAodHlwZS5pc0R5bmFtaWMpIHJldHVybiB0aGlzOwogICAgaWYgKHR5cGUuaXNWb2lkKSByZXR1cm4gdGhpczsKICAgIGlmICh0eXBlID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGUpIHJldHVybiB0aGlzOwogICAgaWYgKHR5cGUuaXNGdW5jdGlvblR5cGUgfHwgdHlwZS5pc0Z1dHVyZU9yKSB7CiAgICAgIHJldHVybiBuZXcgSFR5cGVDb252ZXJzaW9uKHR5cGUsIGtpbmQsCiAgICAgICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLCB0aGlzLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgICBhc3NlcnQodHlwZS5pc0ludGVyZmFjZVR5cGUpOwogICAgaWYgKGtpbmQgPT0gSFR5cGVDb252ZXJzaW9uLlRZUEVfQ0hFQ0sgJiYgIXR5cGUudHJlYXRBc1JhdykgewogICAgICB0aHJvdyAnY3JlYXRpbmcgY29tcG91bmQgY2hlY2sgdG8gJHR5cGUgKHRoaXMgPSAke3RoaXN9KSc7CiAgICB9IGVsc2UgewogICAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZVR5cGUgPSB0eXBlOwogICAgICBBYnN0cmFjdFZhbHVlIHN1YnR5cGUgPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAuY3JlYXRlTnVsbGFibGVTdWJ0eXBlKGludGVyZmFjZVR5cGUuZWxlbWVudCk7CiAgICAgIHJldHVybiBuZXcgSFR5cGVDb252ZXJzaW9uKHR5cGUsIGtpbmQsIHN1YnR5cGUsIHRoaXMsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm4gd2hldGhlciB0aGUgaW5zdHJ1Y3Rpb25zIGRvIG5vdCBiZWxvbmcgdG8gYSBsb29wIG9yCiAgLy8vIGJlbG9uZyB0byB0aGUgc2FtZSBsb29wLgogIGJvb2wgaGFzU2FtZUxvb3BIZWFkZXJBcyhISW5zdHJ1Y3Rpb24gb3RoZXIpIHsKICAgIHJldHVybiBibG9jay5lbmNsb3NpbmdMb29wSGVhZGVyID09IG90aGVyLmJsb2NrLmVuY2xvc2luZ0xvb3BIZWFkZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHt0aGlzLnJ1bnRpbWVUeXBlfSgpJzsKfQoKLy8vIFRoZSBzZXQgb2YgdXNlcyBvZiBbc291cmNlXSB0aGF0IGFyZSBkb21pbmF0ZWQgYnkgW2RvbWluYXRvcl0uCmNsYXNzIERvbWluYXRlZFVzZXMgewogIGZpbmFsIEhJbnN0cnVjdGlvbiBfc291cmNlOwoKICAvLyBUd28gbGlzdCBvZiBtYXRjaGluZyBsZW5ndGggaG9sZGluZyAoaW5zdHJ1Y3Rpb24sIGlucHV0LWluZGV4KSBwYWlycyBmb3IKICAvLyB0aGUgZG9taW5hdGVkIHVzZXMuCiAgZmluYWwgTGlzdDxISW5zdHJ1Y3Rpb24+IF9pbnN0cnVjdGlvbnMgPSA8SEluc3RydWN0aW9uPltdOwogIGZpbmFsIExpc3Q8aW50PiBfaW5kZXhlcyA9IDxpbnQ+W107CgogIERvbWluYXRlZFVzZXMuXyh0aGlzLl9zb3VyY2UpOwoKICAvLy8gVGhlIHVzZXMgb2YgW3NvdXJjZV0gdGhhdCBhcmUgZG9taW5hdGVkIGJ5IFtkb21pbmF0b3JdLgogIC8vLwogIC8vLyBUaGUgdXNlcyBieSBbZG9taW5hdG9yXSBhcmUgaW5jbHVkZWQgaW4gdGhlIHJlc3VsdCwgdW5sZXNzCiAgLy8vIFtleGNsdWRlRG9taW5hdG9yXSBpcyBgdHJ1ZWAsIHNvIGB0cnVlYCBzZWxlY3RzIHVzZXMgZm9sbG93aW5nCiAgLy8vIFtkb21pbmF0b3JdLgogIC8vLwogIC8vLyBUaGUgdXNlcyBpbmNsdWRlIHRoZSBpbi1lZGdlcyBvZiBhIEhQaGkgbm9kZSB0aGF0IGNvcnJlc3BvbmRzIHRvIGEKICAvLy8gZG9taW5hdGVkIGJsb2NrLiAoVGhlcmUgY2FuIGJlIG1hbnkgc3VjaCBlZGdlcyBvbiBhIHNpbmdsZSBwaGkgYXQgdGhlIGV4aXQKICAvLy8gb2YgYSBsb29wIHdpdGggbWFueSBicmVhayBzdGF0ZW1lbnRzKS4gIElmIFtleGNsdWRlUGhpT3V0RWRnZXNdIGlzIGB0cnVlYAogIC8vLyB0aGVuIHRoZXNlIGVkZ2UgdXNlcyBhcmUgbm90IGluY2x1ZGVkLgogIHN0YXRpYyBEb21pbmF0ZWRVc2VzIG9mKEhJbnN0cnVjdGlvbiBzb3VyY2UsIEhJbnN0cnVjdGlvbiBkb21pbmF0b3IsCiAgICAgIHtib29sIGV4Y2x1ZGVEb21pbmF0b3I6IGZhbHNlLCBib29sIGV4Y2x1ZGVQaGlPdXRFZGdlczogZmFsc2V9KSB7CiAgICByZXR1cm4gbmV3IERvbWluYXRlZFVzZXMuXyhzb3VyY2UpCiAgICAgIC4uX2NvbXB1dGUoc291cmNlLCBkb21pbmF0b3IsIGV4Y2x1ZGVEb21pbmF0b3IsIGV4Y2x1ZGVQaGlPdXRFZGdlcyk7CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+IF9pbnN0cnVjdGlvbnMuaXNFbXB0eTsKICBib29sIGdldCBpc05vdEVtcHR5ID0+ICFpc0VtcHR5OwogIGludCBnZXQgbGVuZ3RoID0+IF9pbnN0cnVjdGlvbnMubGVuZ3RoOwoKICAvLy8gQ2hhbmdlcyBhbGwgdGhlIHVzZXMgaW4gdGhlIHNldCB0byBbbmV3SW5zdHJ1Y3Rpb25dLgogIHZvaWQgcmVwbGFjZVdpdGgoSEluc3RydWN0aW9uIG5ld0luc3RydWN0aW9uKSB7CiAgICBhc3NlcnQoIWlkZW50aWNhbChuZXdJbnN0cnVjdGlvbiwgX3NvdXJjZSkpOwogICAgaWYgKGlzRW1wdHkpIHJldHVybjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2luc3RydWN0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICBISW5zdHJ1Y3Rpb24gdXNlciA9IF9pbnN0cnVjdGlvbnNbaV07CiAgICAgIGludCBpbmRleCA9IF9pbmRleGVzW2ldOwogICAgICBISW5zdHJ1Y3Rpb24gb2xkSW5zdHJ1Y3Rpb24gPSB1c2VyLmlucHV0c1tpbmRleF07CiAgICAgIGFzc2VydCgKICAgICAgICAgIGlkZW50aWNhbChvbGRJbnN0cnVjdGlvbiwgX3NvdXJjZSksCiAgICAgICAgICAnSW5wdXQgJHtpbmRleH0gb2YgJHt1c2VyfSBjaGFuZ2VkLicKICAgICAgICAgICdcbiAgRm91bmQ6ICR7b2xkSW5zdHJ1Y3Rpb259XG4gIEV4cGVjdGVkOiAke19zb3VyY2V9Jyk7CiAgICAgIHVzZXIuaW5wdXRzW2luZGV4XSA9IG5ld0luc3RydWN0aW9uOwogICAgICBvbGRJbnN0cnVjdGlvbi51c2VkQnkucmVtb3ZlKHVzZXIpOwogICAgICBuZXdJbnN0cnVjdGlvbi51c2VkQnkuYWRkKHVzZXIpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgaXNTaW5nbGV0b24gPT4gX2luc3RydWN0aW9ucy5sZW5ndGggPT0gMTsKCiAgSEluc3RydWN0aW9uIGdldCBzaW5nbGUgPT4gX2luc3RydWN0aW9ucy5zaW5nbGU7CgogIEl0ZXJhYmxlPEhJbnN0cnVjdGlvbj4gZ2V0IGluc3RydWN0aW9ucyA9PiBfaW5zdHJ1Y3Rpb25zOwoKICB2b2lkIF9hZGRVc2UoSEluc3RydWN0aW9uIHVzZXIsIGludCBpbnB1dEluZGV4KSB7CiAgICBfaW5zdHJ1Y3Rpb25zLmFkZCh1c2VyKTsKICAgIF9pbmRleGVzLmFkZChpbnB1dEluZGV4KTsKICB9CgogIHZvaWQgX2NvbXB1dGUoSEluc3RydWN0aW9uIHNvdXJjZSwgSEluc3RydWN0aW9uIGRvbWluYXRvciwKICAgICAgYm9vbCBleGNsdWRlRG9taW5hdG9yLCBib29sIGV4Y2x1ZGVQaGlPdXRFZGdlcykgewogICAgLy8gS2VlcCB0cmFjayBvZiBhbGwgaW5zdHJ1Y3Rpb25zIHRoYXQgd2UgaGF2ZSB0byBkZWFsIHdpdGggbGF0ZXIgYW5kIGNvdW50CiAgICAvLyB0aGUgbnVtYmVyIG9mIHRoZW0gdGhhdCBhcmUgaW4gdGhlIGN1cnJlbnQgYmxvY2suCiAgICBTZXQ8SEluc3RydWN0aW9uPiB1c2VycyA9IG5ldyBTZXRsZXQ8SEluc3RydWN0aW9uPigpOwogICAgU2V0PEhJbnN0cnVjdGlvbj4gc2VlbiA9IG5ldyBTZXRsZXQ8SEluc3RydWN0aW9uPigpOwogICAgaW50IHVzZXJzSW5DdXJyZW50QmxvY2sgPSAwOwoKICAgIEhCYXNpY0Jsb2NrIGRvbWluYXRvckJsb2NrID0gZG9taW5hdG9yLmJsb2NrOwoKICAgIC8vIFJ1biB0aHJvdWdoIGFsbCB0aGUgdXNlcnMgYW5kIHNlZSBpZiB0aGV5IGFyZSBkb21pbmF0ZWQsIG9yIHBvdGVudGlhbGx5CiAgICAvLyBkb21pbmF0ZWQsIG9yIHBhcnRpYWxseSBkb21pbmF0ZWQgYnkgW2RvbWluYXRvcl0uIEl0IGlzIGVhc2llciB0bwogICAgLy8gZGUtZHVwbGljYXRlIFt1c2VkQnldIGFuZCBwcm9jZXNzIGFsbCBpbnB1dHMgb2YgYW4gaW5zdHJ1Y3Rpb24gdGhhbiB0bwogICAgLy8gdHJhY2sgdGhlIHJlcGVhdGVkIGVsZW1lbnRzIG9mIHVzZWRCeSBhbmQgbWF0Y2ggdGhlbSB1cCBieSBpbmRleC4KICAgIGZvciAoSEluc3RydWN0aW9uIGN1cnJlbnQgaW4gc291cmNlLnVzZWRCeSkgewogICAgICBpZiAoIXNlZW4uYWRkKGN1cnJlbnQpKSBjb250aW51ZTsKICAgICAgSEJhc2ljQmxvY2sgY3VycmVudEJsb2NrID0gY3VycmVudC5ibG9jazsKICAgICAgaWYgKGRvbWluYXRvckJsb2NrLmRvbWluYXRlcyhjdXJyZW50QmxvY2spKSB7CiAgICAgICAgdXNlcnMuYWRkKGN1cnJlbnQpOwogICAgICAgIGlmIChpZGVudGljYWwoY3VycmVudEJsb2NrLCBkb21pbmF0b3JCbG9jaykpIHVzZXJzSW5DdXJyZW50QmxvY2srKzsKICAgICAgfSBlbHNlIGlmICghZXhjbHVkZVBoaU91dEVkZ2VzICYmIGN1cnJlbnQgaXMgSFBoaSkgewogICAgICAgIC8vIEEgbm9uLWRvbWluYXRlZCBIUGhpLgogICAgICAgIC8vIFNlZSBpZiB0aGVyZSBhIGRvbWluYXRlZCBlZGdlIGludG8gdGhlIHBoaS4gVGhlIGlucHV0IG11c3QgYmUKICAgICAgICAvLyBbc291cmNlXSBhbmQgdGhlIHBvc2l0aW9uIG11c3QgY29ycmVzcG9uZCB0byBhIGRvbWluYXRlZCBibG9jay4KICAgICAgICBMaXN0PEhCYXNpY0Jsb2NrPiBwcmVkZWNlc3NvcnMgPSBjdXJyZW50QmxvY2sucHJlZGVjZXNzb3JzOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBpZiAoY3VycmVudC5pbnB1dHNbaV0gIT0gc291cmNlKSBjb250aW51ZTsKICAgICAgICAgIEhCYXNpY0Jsb2NrIHByZWRlY2Vzc29yID0gcHJlZGVjZXNzb3JzW2ldOwogICAgICAgICAgaWYgKGRvbWluYXRvckJsb2NrLmRvbWluYXRlcyhwcmVkZWNlc3NvcikpIHsKICAgICAgICAgICAgX2FkZFVzZShjdXJyZW50LCBpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBSdW4gdGhyb3VnaCBhbGwgdGhlIHBoaXMgaW4gdGhlIHNhbWUgYmxvY2sgYXMgW2RvbWluYXRvcl0gYW5kIHJlbW92ZSB0aGVtCiAgICAvLyBmcm9tIHRoZSB1c2VycyBzZXQuIFRoZXNlIGNvbWUgYmVmb3JlIFtkb21pbmF0b3JdLgogICAgLy8gVE9ETyhzcmEpOiBDb3VsZCB3ZSBzaW1wbHkgbm90IGFkZCB0aGVtIGluIHRoZSBmaXJzdCBwbGFjZT8KICAgIGlmICh1c2Vyc0luQ3VycmVudEJsb2NrID4gMCkgewogICAgICBmb3IgKEhQaGkgcGhpID0gZG9taW5hdG9yQmxvY2sucGhpcy5maXJzdDsgcGhpICE9IG51bGw7IHBoaSA9IHBoaS5uZXh0KSB7CiAgICAgICAgaWYgKHVzZXJzLnJlbW92ZShwaGkpKSB7CiAgICAgICAgICBpZiAoLS11c2Vyc0luQ3VycmVudEJsb2NrID09IDApIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIFJ1biB0aHJvdWdoIGFsbCB0aGUgaW5zdHJ1Y3Rpb25zIGJlZm9yZSBbZG9taW5hdG9yXSBhbmQgcmVtb3ZlIHRoZW0gZnJvbQogICAgLy8gdGhlIHVzZXJzIHNldC4KICAgIGlmICh1c2Vyc0luQ3VycmVudEJsb2NrID4gMCkgewogICAgICBISW5zdHJ1Y3Rpb24gY3VycmVudCA9IGRvbWluYXRvckJsb2NrLmZpcnN0OwogICAgICB3aGlsZSAoIWlkZW50aWNhbChjdXJyZW50LCBkb21pbmF0b3IpKSB7CiAgICAgICAgaWYgKHVzZXJzLmNvbnRhaW5zKGN1cnJlbnQpKSB7CiAgICAgICAgICAvLyBUT0RPKDI5MzAyKTogVXNlICd1c2VyLnJlbW92ZShjdXJyZW50KScgYXMgdGhlIGNvbmRpdGlvbi4KICAgICAgICAgIHVzZXJzLnJlbW92ZShjdXJyZW50KTsKICAgICAgICAgIGlmICgtLXVzZXJzSW5DdXJyZW50QmxvY2sgPT0gMCkgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7CiAgICAgIH0KICAgICAgaWYgKGV4Y2x1ZGVEb21pbmF0b3IpIHsKICAgICAgICB1c2Vycy5yZW1vdmUoZG9taW5hdG9yKTsKICAgICAgfQogICAgfQoKICAgIC8vIENvbnZlcnQgdXNlcnMgaW50byBhIGxpc3Qgb2YgKHVzZXIsIGlucHV0LWluZGV4KSB1c2VzLgogICAgZm9yIChISW5zdHJ1Y3Rpb24gdXNlciBpbiB1c2VycykgewogICAgICB2YXIgaW5wdXRzID0gdXNlci5pbnB1dHM7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGlucHV0c1tpXSA9PSBzb3VyY2UpIHsKICAgICAgICAgIF9hZGRVc2UodXNlciwgaSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CgovLy8gQSByZWZlcmVuY2UgdG8gYSBbSEluc3RydWN0aW9uXSB0aGF0IGNhbiBob2xkIGl0cyBvd24gc291cmNlIGluZm9ybWF0aW9uLgovLy8KLy8vIFRoaXMgdXNlZCBmb3IgYXR0YWNoaW5nIHNvdXJjZSBpbmZvcm1hdGlvbiB0byByZWFkcyBvZiBsb2NhbHMuCmNsYXNzIEhSZWYgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhSZWYoSEluc3RydWN0aW9uIHZhbHVlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBzdXBlcihbdmFsdWVdLCB2YWx1ZS5pbnN0cnVjdGlvblR5cGUpIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CgogIEhJbnN0cnVjdGlvbiBnZXQgdmFsdWUgPT4gaW5wdXRzWzBdOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gY29udmVydFR5cGUoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBEYXJ0VHlwZSB0eXBlLCBpbnQga2luZCkgewogICAgSEluc3RydWN0aW9uIGNvbnZlcnRlZCA9IHZhbHVlLmNvbnZlcnRUeXBlKGNsb3NlZFdvcmxkLCB0eXBlLCBraW5kKTsKICAgIGlmIChjb252ZXJ0ZWQgPT0gdmFsdWUpIHJldHVybiB0aGlzOwogICAgSFR5cGVDb252ZXJzaW9uIGNvbnZlcnNpb24gPSBjb252ZXJ0ZWQ7CiAgICBjb252ZXJzaW9uLmlucHV0c1swXSA9IHRoaXM7CiAgICByZXR1cm4gY29udmVyc2lvbjsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0UmVmKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSFJlZigke3ZhbHVlfSknOwp9CgovLy8gTGF0ZSBpbnN0cnVjdGlvbnMgYXJlIHVzZWQgYWZ0ZXIgdGhlIG1haW4gb3B0aW1pemF0aW9uIHBoYXNlcy4gIFRoZXkgY2FwdHVyZQovLy8gY29kZWdlbiBkZWNpc2lvbnMganVzdCBwcmlvciB0byBnZW5lcmF0aW5nIEphdmFTY3JpcHQuCmFic3RyYWN0IGNsYXNzIEhMYXRlSW5zdHJ1Y3Rpb24gZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhMYXRlSW5zdHJ1Y3Rpb24oTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGlucHV0cywgdHlwZSk7Cn0KCi8vLyBBIFtIQ2hlY2tdIGluc3RydWN0aW9uIGlzIGFuIGluc3RydWN0aW9uIHRoYXQgbWlnaHQgZG8gYSBkeW5hbWljCi8vLyBjaGVjayBhdCBydW50aW1lIG9uIGFub3RoZXIgaW5zdHJ1Y3Rpb24uIFRvIGhhdmUgcHJvcGVyIGluc3RydWN0aW9uCi8vLyBkZXBlbmRlbmNpZXMgaW4gdGhlIGdyYXBoLCBpbnN0cnVjdGlvbnMgdGhhdCBkZXBlbmQgb24gdGhlIGNoZWNrCi8vLyBiZWluZyBkb25lIHJlZmVyZW5jZSB0aGUgW0hDaGVja10gaW5zdHJ1Y3Rpb24gaW5zdGVhZCBvZiB0aGUKLy8vIGluc3RydWN0aW9uIGl0c2VsZi4KYWJzdHJhY3QgY2xhc3MgSENoZWNrIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBIQ2hlY2soaW5wdXRzLCB0eXBlKSA6IHN1cGVyKGlucHV0cywgdHlwZSkgewogICAgc2V0VXNlR3ZuKCk7CiAgfQogIEhJbnN0cnVjdGlvbiBnZXQgY2hlY2tlZElucHV0ID0+IGlucHV0c1swXTsKICBAb3ZlcnJpZGUKICBib29sIGlzSnNTdGF0ZW1lbnQoKSA9PiB0cnVlOwogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IHRydWU7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBub25DaGVjaygpID0+IGNoZWNrZWRJbnB1dC5ub25DaGVjaygpOwp9CgpjbGFzcyBIQm91bmRzQ2hlY2sgZXh0ZW5kcyBIQ2hlY2sgewogIHN0YXRpYyBjb25zdCBpbnQgQUxXQVlTX0ZBTFNFID0gMDsKICBzdGF0aWMgY29uc3QgaW50IEZVTExfQ0hFQ0sgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgQUxXQVlTX0FCT1ZFX1pFUk8gPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgQUxXQVlTX0JFTE9XX0xFTkdUSCA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBBTFdBWVNfVFJVRSA9IDQ7CgogIC8vLyBEZXRhaWxzIHdoaWNoIHRlc3RzIGhhdmUgYmVlbiBkb25lIHN0YXRpY2FsbHkgZHVyaW5nIGNvbXBpbGF0aW9uLgogIC8vLyBEZWZhdWx0IGlzIHRoYXQgYWxsIGNoZWNrcyBtdXN0IGJlIHBlcmZvcm1lZCBkeW5hbWljYWxseS4KICBpbnQgc3RhdGljQ2hlY2tzID0gRlVMTF9DSEVDSzsKCiAgSEJvdW5kc0NoZWNrKGxlbmd0aCwgaW5kZXgsIGFycmF5LCB0eXBlKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W2xlbmd0aCwgaW5kZXgsIGFycmF5XSwgdHlwZSk7CgogIEhJbnN0cnVjdGlvbiBnZXQgbGVuZ3RoID0+IGlucHV0c1sxXTsKICBISW5zdHJ1Y3Rpb24gZ2V0IGluZGV4ID0+IGlucHV0c1swXTsKICBISW5zdHJ1Y3Rpb24gZ2V0IGFycmF5ID0+IGlucHV0c1syXTsKICAvLyBUaGVyZSBjYW4gYmUgYW4gYWRkaXRpb25hbCBmb3VydGggaW5wdXQgd2hpY2ggaXMgdGhlIGluZGV4IHRvIHJlcG9ydCB0bwogIC8vIFtpb29yZV0uIFRoaXMgaXMgdXNlZCBieSB0aGUgZXhwYW5zaW9uIG9mIFtKU0FycmF5LnJlbW92ZUxhc3RdLgogIEhJbnN0cnVjdGlvbiBnZXQgcmVwb3J0ZWRJbmRleCA9PiBpbnB1dHMubGVuZ3RoID4gMyA/IGlucHV0c1szXSA6IGluZGV4OwogIEBvdmVycmlkZQogIGJvb2wgaXNDb250cm9sRmxvdygpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Qm91bmRzQ2hlY2sodGhpcyk7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkJPVU5EU19DSEVDS19UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhCb3VuZHNDaGVjazsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgphYnN0cmFjdCBjbGFzcyBIQ29uZGl0aW9uYWxCcmFuY2ggZXh0ZW5kcyBIQ29udHJvbEZsb3cgewogIEhDb25kaXRpb25hbEJyYW5jaChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cykKICAgICAgOiBzdXBlcihkb21haW4sIGlucHV0cyk7CiAgSEluc3RydWN0aW9uIGdldCBjb25kaXRpb24gPT4gaW5wdXRzWzBdOwogIEhCYXNpY0Jsb2NrIGdldCB0cnVlQnJhbmNoID0+IGJsb2NrLnN1Y2Nlc3NvcnNbMF07CiAgSEJhc2ljQmxvY2sgZ2V0IGZhbHNlQnJhbmNoID0+IGJsb2NrLnN1Y2Nlc3NvcnNbMV07Cn0KCmFic3RyYWN0IGNsYXNzIEhDb250cm9sRmxvdyBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgSENvbnRyb2xGbG93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzKQogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYXkgb25seSBleHByZXNzaW9uLWxpa2UgW0hJbnN0cnVjdGlvbl1zIHNob3VsZAogICAgICAvLyBoYXZlIGFuIGBpbnN0cnVjdGlvblR5cGVgLCBvciBzdGF0ZW1lbnQtbGlrZSBbSEluc3RydWN0aW9uXXMgc2hvdWxkCiAgICAgIC8vIGhhdmUgYSB0aHJvd2luZyBnZXR0ZXIuCiAgICAgIDogc3VwZXIoaW5wdXRzLCBkb21haW4uZW1wdHlUeXBlKTsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29udHJvbEZsb3coKSA9PiB0cnVlOwogIEBvdmVycmlkZQogIGJvb2wgaXNKc1N0YXRlbWVudCgpID0+IHRydWU7Cn0KCi8vIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgYW4gaW5zdGFuY2UuCmNsYXNzIEhDcmVhdGUgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIGZpbmFsIENsYXNzRW50aXR5IGVsZW1lbnQ7CgogIC8vLyBEb2VzIHRoaXMgaW5zdHJ1Y3Rpb24gaGF2ZSByZWlmaWVkIHR5cGUgaW5mb3JtYXRpb24gYXMgdGhlIGxhc3QgaW5wdXQ/CiAgZmluYWwgYm9vbCBoYXNSdGlJbnB1dDsKCiAgLy8vIElmIHRoaXMgZmllbGQgaXMgbm90IGBudWxsYCwgdGhpcyBjYWxsIGlzIGZyb20gYW4gaW5saW5lZCBjb25zdHJ1Y3RvciBhbmQKICAvLy8gd2UgaGF2ZSB0byByZWdpc3RlciB0aGUgaW5zdGFudGlhdGVkIHR5cGUgaW4gdGhlIGNvZGUgZ2VuZXJhdG9yLiBUaGUKICAvLy8gW2luc3RydWN0aW9uVHlwZV0gb2YgdGhpcyBub2RlIGlzIG5vdCBlbm91Z2gsIGJlY2F1c2Ugd2UgYWxzbyBuZWVkIHRoZQogIC8vLyB0eXBlIGFyZ3VtZW50cy4gU2VlIGFsc28gW1NzYUZyb21Bc3RNaXhpbi5jdXJyZW50SW5saW5lZEluc3RhbnRpYXRpb25zXS4KICBMaXN0PEludGVyZmFjZVR5cGU+IGluc3RhbnRpYXRlZFR5cGVzOwoKICAvLy8gSWYgdGhpcyBub2RlIGNyZWF0ZXMgYSBjbG9zdXJlIGNsYXNzLCBbY2FsbE1ldGhvZF0gaXMgdGhlIGNhbGwgbWV0aG9kIG9mCiAgLy8vIHRoZSBjbG9zdXJlIGNsYXNzLgogIEZ1bmN0aW9uRW50aXR5IGNhbGxNZXRob2Q7CgogIEhDcmVhdGUodGhpcy5lbGVtZW50LCBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLCBBYnN0cmFjdFZhbHVlIHR5cGUsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICB7dGhpcy5pbnN0YW50aWF0ZWRUeXBlcywgdGhpcy5oYXNSdGlJbnB1dDogZmFsc2UsIHRoaXMuY2FsbE1ldGhvZH0pCiAgICAgIDogc3VwZXIoaW5wdXRzLCB0eXBlKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzQWxsb2NhdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gdHJ1ZTsKCiAgSEluc3RydWN0aW9uIGdldCBydGlJbnB1dCB7CiAgICBhc3NlcnQoaGFzUnRpSW5wdXQpOwogICAgcmV0dXJuIGlucHV0cy5sYXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRDcmVhdGUodGhpcyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdIQ3JlYXRlKCRlbGVtZW50LCAke2luc3RhbnRpYXRlZFR5cGVzfSknOwp9CgovLyBBbGxvY2F0ZXMgYSBib3ggdG8gaG9sZCBtdXRhdGVkIGNhcHR1cmVkIHZhcmlhYmxlcy4KY2xhc3MgSENyZWF0ZUJveCBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgSENyZWF0ZUJveChBYnN0cmFjdFZhbHVlIHR5cGUpIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bXSwgdHlwZSk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNBbGxvY2F0aW9uKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdENyZWF0ZUJveCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0hDcmVhdGVCb3goKSc7Cn0KCmFic3RyYWN0IGNsYXNzIEhJbnZva2UgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIGJvb2wgX2lzQWxsb2NhdGlvbiA9IGZhbHNlOwoKICAvLy8gW2lzSW50ZXJjZXB0ZWRDYWxsXSBpcyB0cnVlIGlmIHRoaXMgaW52b2NhdGlvbiB1c2VzIHRoZSBpbnRlcmNlcHRvcgogIC8vLyBjYWxsaW5nIGNvbnZlbnRpb24gd2hlcmUgdGhlIGZpcnN0IGlucHV0IGlzIHRoZSBtZXRob2RzIGFuZCB0aGUgc2Vjb25kCiAgLy8vIGlucHV0IGlzIHRoZSBEYXJ0IHJlY2VpdmVyLgogIGJvb2wgaXNJbnRlcmNlcHRlZENhbGwgPSBmYWxzZTsKCiAgSEludm9rZShMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLCBBYnN0cmFjdFZhbHVlIHJlc3VsdFR5cGUpCiAgICAgIDogc3VwZXIoaW5wdXRzLCByZXN1bHRUeXBlKSB7CiAgICBzaWRlRWZmZWN0cy5zZXRBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uU29tZXRoaW5nKCk7CiAgfQogIHN0YXRpYyBjb25zdCBpbnQgQVJHVU1FTlRTX09GRlNFVCA9IDE7CgogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgaXNBbGxvY2F0aW9uKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiBfaXNBbGxvY2F0aW9uOwoKICB2b2lkIHNldEFsbG9jYXRpb24oYm9vbCB2YWx1ZSkgewogICAgX2lzQWxsb2NhdGlvbiA9IHZhbHVlOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgSEludm9rZUR5bmFtaWMgZXh0ZW5kcyBISW52b2tlIHsKICBmaW5hbCBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIgc3BlY2lhbGl6ZXI7CiAgQG92ZXJyaWRlCiAgU2VsZWN0b3Igc2VsZWN0b3I7CiAgQWJzdHJhY3RWYWx1ZSBfcmVjZWl2ZXJUeXBlOwogIGZpbmFsIEFic3RyYWN0VmFsdWUgX29yaWdpbmFsUmVjZWl2ZXJUeXBlOwogIE1lbWJlckVudGl0eSBlbGVtZW50OwoKICBISW52b2tlRHluYW1pYyhTZWxlY3RvciBzZWxlY3RvciwgdGhpcy5fcmVjZWl2ZXJUeXBlLCB0aGlzLmVsZW1lbnQsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsIGJvb2wgaXNJbnRlcmNlcHRlZCwgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlKQogICAgICA6IHRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvciwKICAgICAgICB0aGlzLl9vcmlnaW5hbFJlY2VpdmVyVHlwZSA9IF9yZWNlaXZlclR5cGUsCiAgICAgICAgc3BlY2lhbGl6ZXIgPSBpc0ludGVyY2VwdGVkCiAgICAgICAgICAgID8gSW52b2tlRHluYW1pY1NwZWNpYWxpemVyLmxvb2t1cFNwZWNpYWxpemVyKHNlbGVjdG9yKQogICAgICAgICAgICA6IGNvbnN0IEludm9rZUR5bmFtaWNTcGVjaWFsaXplcigpLAogICAgICAgIHN1cGVyKGlucHV0cywgcmVzdWx0VHlwZSkgewogICAgYXNzZXJ0KGlzSW50ZXJjZXB0ZWQgIT0gbnVsbCk7CiAgICBhc3NlcnQoX3JlY2VpdmVyVHlwZSAhPSBudWxsKTsKICAgIGlzSW50ZXJjZXB0ZWRDYWxsID0gaXNJbnRlcmNlcHRlZDsKICB9CgogIEFic3RyYWN0VmFsdWUgZ2V0IHJlY2VpdmVyVHlwZSA9PiBfcmVjZWl2ZXJUeXBlOwoKICB2b2lkIHVwZGF0ZVJlY2VpdmVyVHlwZSgKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLCBBYnN0cmFjdFZhbHVlIHZhbHVlKSB7CiAgICBfcmVjZWl2ZXJUeXBlID0KICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmludGVyc2VjdGlvbihfb3JpZ2luYWxSZWNlaXZlclR5cGUsIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdpbnZva2UgZHluYW1pYzogc2VsZWN0b3I9JHNlbGVjdG9yLCBtYXNrPSRyZWNlaXZlclR5cGUnOwoKICBISW5zdHJ1Y3Rpb24gZ2V0IHJlY2VpdmVyID0+IGlucHV0c1swXTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIGdldERhcnRSZWNlaXZlcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBpc0NhbGxPbkludGVyY2VwdG9yKGNsb3NlZFdvcmxkKSA/IGlucHV0c1sxXSA6IGlucHV0c1swXTsKICB9CgogIC8vLyBUaGUgdHlwZSBhcmd1bWVudHMgcGFzc2VkIGluIHRoaXMgZHluYW1pYyBpbnZvY2F0aW9uLgogIExpc3Q8RGFydFR5cGU+IGdldCB0eXBlQXJndW1lbnRzOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIHRoaXMgY2FsbCBpcyBvbiBhbiBpbnRlcmNlcHRvciBvYmplY3QuCiAgYm9vbCBpc0NhbGxPbkludGVyY2VwdG9yKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGlzSW50ZXJjZXB0ZWRDYWxsICYmIHJlY2VpdmVyLmlzSW50ZXJjZXB0b3IoY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLklOVk9LRV9EWU5BTUlDX1RZUEVDT0RFOwoKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhJbnZva2VEeW5hbWljOwoKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEludm9rZUR5bmFtaWMgb3RoZXIpIHsKICAgIC8vIFVzZSB0aGUgbmFtZSBhbmQgdGhlIGtpbmQgaW5zdGVhZCBvZiBbU2VsZWN0b3Iub3BlcmF0b3I9PV0KICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byBjaGVjayB0aGUgYXJpdHkgKGFscmVhZHkgY2hlY2tlZCBpbgogICAgLy8gW2d2bkVxdWFsc10pLCBhbmQgdGhlIHJlY2VpdmVyIHR5cGVzIG1heSBub3QgYmUgaW4gc3luYy4KICAgIHJldHVybiBzZWxlY3Rvci5uYW1lID09IG90aGVyLnNlbGVjdG9yLm5hbWUgJiYKICAgICAgICBzZWxlY3Rvci5raW5kID09IG90aGVyLnNlbGVjdG9yLmtpbmQ7CiAgfQp9CgpjbGFzcyBISW52b2tlQ2xvc3VyZSBleHRlbmRzIEhJbnZva2VEeW5hbWljIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwoKICBISW52b2tlQ2xvc3VyZShTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZSwgdGhpcy50eXBlQXJndW1lbnRzKQogICAgICA6IHN1cGVyKHNlbGVjdG9yLCByZWNlaXZlclR5cGUsIG51bGwsIGlucHV0cywgZmFsc2UsIHJlc3VsdFR5cGUpIHsKICAgIGFzc2VydChzZWxlY3Rvci5pc0Nsb3N1cmVDYWxsKTsKICAgIGFzc2VydChzZWxlY3Rvci5jYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudENvdW50ID09IHR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgIGFzc2VydCghaXNJbnRlcmNlcHRlZENhbGwpOwogIH0KICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEludm9rZUNsb3N1cmUodGhpcyk7Cn0KCmNsYXNzIEhJbnZva2VEeW5hbWljTWV0aG9kIGV4dGVuZHMgSEludm9rZUR5bmFtaWMgewogIEBvdmVycmlkZQogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIEhJbnZva2VEeW5hbWljTWV0aG9kKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsCiAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZSwKICAgICAgdGhpcy50eXBlQXJndW1lbnRzLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge2Jvb2wgaXNJbnRlcmNlcHRlZDogZmFsc2V9KQogICAgICA6IHN1cGVyKHNlbGVjdG9yLCByZWNlaXZlclR5cGUsIG51bGwsIGlucHV0cywgaXNJbnRlcmNlcHRlZCwgcmVzdWx0VHlwZSkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgYXNzZXJ0KHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnQgPT0gdHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ2ludm9rZSBkeW5hbWljIG1ldGhvZDogc2VsZWN0b3I9JHNlbGVjdG9yLCBtYXNrPSRyZWNlaXZlclR5cGUnOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0SW52b2tlRHluYW1pY01ldGhvZCh0aGlzKTsKfQoKYWJzdHJhY3QgY2xhc3MgSEludm9rZUR5bmFtaWNGaWVsZCBleHRlbmRzIEhJbnZva2VEeW5hbWljIHsKICBISW52b2tlRHluYW1pY0ZpZWxkKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUsCiAgICAgIE1lbWJlckVudGl0eSBlbGVtZW50LAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLAogICAgICBib29sIGlzSW50ZXJjZXB0ZWQsCiAgICAgIEFic3RyYWN0VmFsdWUgcmVzdWx0VHlwZSkKICAgICAgOiBzdXBlcigKICAgICAgICAgICAgc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSwgZWxlbWVudCwgaW5wdXRzLCBpc0ludGVyY2VwdGVkLCByZXN1bHRUeXBlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ2ludm9rZSBkeW5hbWljIGZpZWxkOiBzZWxlY3Rvcj0kc2VsZWN0b3IsIG1hc2s9JHJlY2VpdmVyVHlwZSc7Cn0KCmNsYXNzIEhJbnZva2VEeW5hbWljR2V0dGVyIGV4dGVuZHMgSEludm9rZUR5bmFtaWNGaWVsZCB7CiAgSEludm9rZUR5bmFtaWNHZXR0ZXIoCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSwKICAgICAgTWVtYmVyRW50aXR5IGVsZW1lbnQsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsCiAgICAgIGJvb2wgaXNJbnRlcmNlcHRlZCwKICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBzdXBlcihzZWxlY3RvciwgcmVjZWl2ZXJUeXBlLCBlbGVtZW50LCBpbnB1dHMsIGlzSW50ZXJjZXB0ZWQsCiAgICAgICAgICAgIHJlc3VsdFR5cGUpIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0SW52b2tlRHluYW1pY0dldHRlcih0aGlzKTsKCiAgYm9vbCBnZXQgaXNUZWFyT2ZmID0+IGVsZW1lbnQgIT0gbnVsbCAmJiBlbGVtZW50LmlzRnVuY3Rpb247CgogIEBvdmVycmlkZQogIExpc3Q8RGFydFR5cGU+IGdldCB0eXBlQXJndW1lbnRzID0+IGNvbnN0IDxEYXJ0VHlwZT5bXTsKCiAgLy8gVGhlcmUgbWlnaHQgYmUgYW4gaW50ZXJjZXB0b3IgaW5wdXQsIHNvIGBpbnB1dHMubGFzdGAgaXMgdGhlIGRhcnQgcmVjZWl2ZXIuCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gaXNUZWFyT2ZmCiAgICAgID8gaW5wdXRzLmxhc3QuaXNOdWxsKGRvbWFpbikuaXNQb3RlbnRpYWxseVRydWUKICAgICAgOiBzdXBlci5jYW5UaHJvdyhkb21haW4pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAnaW52b2tlIGR5bmFtaWMgZ2V0dGVyOiBzZWxlY3Rvcj0kc2VsZWN0b3IsIG1hc2s9JHJlY2VpdmVyVHlwZSc7Cn0KCmNsYXNzIEhJbnZva2VEeW5hbWljU2V0dGVyIGV4dGVuZHMgSEludm9rZUR5bmFtaWNGaWVsZCB7CiAgLy8vIElmIGB0cnVlYCBhIGNhbGwgdG8gdGhlIHNldHRlciBpcyBuZWVkZWQgZm9yIGNoZWNraW5nIHRoZSB0eXBlIGV2ZW4KICAvLy8gdGhvdWdoIHRoZSB0YXJnZXQgZmllbGQgaXMga25vd24uCiAgYm9vbCBuZWVkc0NoZWNrID0gZmFsc2U7CgogIEhJbnZva2VEeW5hbWljU2V0dGVyKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUsCiAgICAgIE1lbWJlckVudGl0eSBlbGVtZW50LAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLAogICAgICBib29sIGlzSW50ZXJjZXB0ZWQsCiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoZSByZXN1bHQgdHlwZSBmb3IgYSBzZXR0ZXIgc2hvdWxkIGJlIHRoZSBlbXB0eQogICAgICAvLyB0eXBlLgogICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdFR5cGUsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHN1cGVyKHNlbGVjdG9yLCByZWNlaXZlclR5cGUsIGVsZW1lbnQsIGlucHV0cywgaXNJbnRlcmNlcHRlZCwKICAgICAgICAgICAgcmVzdWx0VHlwZSkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJbnZva2VEeW5hbWljU2V0dGVyKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBMaXN0PERhcnRUeXBlPiBnZXQgdHlwZUFyZ3VtZW50cyA9PiBjb25zdCA8RGFydFR5cGU+W107CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICdpbnZva2UgZHluYW1pYyBzZXR0ZXI6IHNlbGVjdG9yPSRzZWxlY3RvciwgbWFzaz0kcmVjZWl2ZXJUeXBlLCBlbGVtZW50PSRlbGVtZW50JzsKfQoKY2xhc3MgSEludm9rZVN0YXRpYyBleHRlbmRzIEhJbnZva2UgewogIGZpbmFsIE1lbWJlckVudGl0eSBlbGVtZW50OwoKICAvLy8gVGhlIHR5cGUgYXJndW1lbnRzIHBhc3NlZCBpbiB0aGlzIHN0YXRpYyBpbnZvY2F0aW9uLgogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIGZpbmFsIGJvb2wgdGFyZ2V0Q2FuVGhyb3c7CgogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IHRhcmdldENhblRocm93OwoKICAvLy8gSWYgdGhpcyBpbnN0cnVjdGlvbiBpcyBhIGNhbGwgdG8gYSBjb25zdHJ1Y3RvciwgW2luc3RhbnRpYXRlZFR5cGVzXQogIC8vLyBjb250YWlucyB0aGUgdHlwZShzKSB1c2VkIGluIHRoZSAoRGFydCkgYE5ld2AgZXhwcmVzc2lvbihzKS4gVGhlCiAgLy8vIFtpbnN0cnVjdGlvblR5cGVdIG9mIHRoaXMgbm9kZSBpcyBub3QgZW5vdWdoLCBiZWNhdXNlIHdlIGFsc28gbmVlZCB0aGUKICAvLy8gdHlwZSBhcmd1bWVudHMuIFNlZSBhbHNvIFtTc2FGcm9tQXN0TWl4aW4uY3VycmVudElubGluZWRJbnN0YW50aWF0aW9uc10uCiAgTGlzdDxJbnRlcmZhY2VUeXBlPiBpbnN0YW50aWF0ZWRUeXBlczsKCiAgLy8vIFRoZSBmaXJzdCBpbnB1dCBtdXN0IGJlIHRoZSB0YXJnZXQuCiAgSEludm9rZVN0YXRpYyh0aGlzLmVsZW1lbnQsIGlucHV0cywgQWJzdHJhY3RWYWx1ZSB0eXBlLCB0aGlzLnR5cGVBcmd1bWVudHMsCiAgICAgIHt0aGlzLnRhcmdldENhblRocm93OiB0cnVlLCBib29sIGlzSW50ZXJjZXB0ZWQ6IGZhbHNlfSkKICAgICAgOiBzdXBlcihpbnB1dHMsIHR5cGUpIHsKICAgIGlzSW50ZXJjZXB0ZWRDYWxsID0gaXNJbnRlcmNlcHRlZDsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0SW52b2tlU3RhdGljKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uSU5WT0tFX1NUQVRJQ19UWVBFQ09ERTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ2ludm9rZSBzdGF0aWM6ICRlbGVtZW50JzsKfQoKY2xhc3MgSEludm9rZVN1cGVyIGV4dGVuZHMgSEludm9rZVN0YXRpYyB7CiAgLy8vIFRoZSBjbGFzcyB3aGVyZSB0aGUgY2FsbCB0byBzdXBlciBpcyBiZWluZyBkb25lLgogIGZpbmFsIENsYXNzRW50aXR5IGNhbGxlcjsKICBmaW5hbCBib29sIGlzU2V0dGVyOwogIEBvdmVycmlkZQogIGZpbmFsIFNlbGVjdG9yIHNlbGVjdG9yOwoKICBISW52b2tlU3VwZXIoCiAgICAgIE1lbWJlckVudGl0eSBlbGVtZW50LAogICAgICB0aGlzLmNhbGxlciwKICAgICAgdGhpcy5zZWxlY3RvciwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywKICAgICAgYm9vbCBpc0ludGVyY2VwdGVkLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUsCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICB7dGhpcy5pc1NldHRlcn0pCiAgICAgIDogc3VwZXIoZWxlbWVudCwgaW5wdXRzLCB0eXBlLCB0eXBlQXJndW1lbnRzLAogICAgICAgICAgICBpc0ludGVyY2VwdGVkOiBpc0ludGVyY2VwdGVkKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQoKICBISW5zdHJ1Y3Rpb24gZ2V0IHJlY2VpdmVyID0+IGlucHV0c1swXTsKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gZ2V0RGFydFJlY2VpdmVyKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGlzQ2FsbE9uSW50ZXJjZXB0b3IoY2xvc2VkV29ybGQpID8gaW5wdXRzWzFdIDogaW5wdXRzWzBdOwogIH0KCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGlzIGNhbGwgaXMgb24gYW4gaW50ZXJjZXB0b3Igb2JqZWN0LgogIGJvb2wgaXNDYWxsT25JbnRlcmNlcHRvcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBpc0ludGVyY2VwdGVkQ2FsbCAmJiByZWNlaXZlci5pc0ludGVyY2VwdG9yKGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ2ludm9rZSBzdXBlcjogJGVsZW1lbnQnOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0SW52b2tlU3VwZXIodGhpcyk7CgogIEhJbnN0cnVjdGlvbiBnZXQgdmFsdWUgewogICAgYXNzZXJ0KGlzU2V0dGVyKTsKICAgIC8vIFRoZSAnaW5wdXRzJyBhcmUgW3JlY2VpdmVyLCB2YWx1ZV0gb3IgW2ludGVyY2VwdG9yLCByZWNlaXZlciwgdmFsdWVdLgogICAgcmV0dXJuIGlucHV0cy5sYXN0OwogIH0KfQoKY2xhc3MgSEludm9rZUNvbnN0cnVjdG9yQm9keSBleHRlbmRzIEhJbnZva2VTdGF0aWMgewogIC8vIFRoZSAnaW5wdXRzJyBhcmUKICAvLyAgICAgW3JlY2VpdmVyLCBhcmcxLCAuLi4sIGFyZ05dIG9yCiAgLy8gICAgIFtpbnRlcmNlcHRvciwgcmVjZWl2ZXIsIGFyZzEsIC4uLiBhcmdOXS4KICBISW52b2tlQ29uc3RydWN0b3JCb2R5KAogICAgICBDb25zdHJ1Y3RvckJvZHlFbnRpdHkgZWxlbWVudCwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBzdXBlcihlbGVtZW50LCBpbnB1dHMsIHR5cGUsIGNvbnN0IDxEYXJ0VHlwZT5bXSkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ2ludm9rZSBjb25zdHJ1Y3RvciBib2R5OiAke2VsZW1lbnQubmFtZX0nOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0SW52b2tlQ29uc3RydWN0b3JCb2R5KHRoaXMpOwp9CgpjbGFzcyBISW52b2tlR2VuZXJhdG9yQm9keSBleHRlbmRzIEhJbnZva2VTdGF0aWMgewogIC8vIERpcmVjdGx5IGNhbGwgdGhlIEpHZW5lcmF0b3JCb2R5IG1ldGhvZC4gVGhlIGdlbmVyYXRvciBib2R5IGNhbiBiZSBhIHN0YXRpYwogIC8vIG1ldGhvZCBvciBhIG1lbWJlci4gVGhlIHRhcmdldCBpcyBkaXJlY3RseSBjYWxsZWQuCiAgLy8gVGhlICdpbnB1dHMnIGFyZQogIC8vICAgICBbYXJnMSwgLi4uLCBhcmdOXSBvcgogIC8vICAgICBbcmVjZWl2ZXIsIGFyZzEsIC4uLiwgYXJnTl0gb3IKICAvLyAgICAgW2ludGVyY2VwdG9yLCByZWNlaXZlciwgYXJnMSwgLi4uIGFyZ05dLgogIC8vIFRoZSAnaW5wdXRzJyBtYXkgb3IgbWF5IG5vdCBoYXZlIGFuIGFkZGl0aW9uYWwgdHlwZSBhcmd1bWVudCB1c2VkIGZvcgogIC8vIGNyZWF0aW5nIHRoZSBnZW5lcmF0b3IgKFQgZm9yIG5ldyBDb21wbGV0ZXI8VD4oKSBpbnNpZGUgdGhlIGJvZHkpLgogIEhJbnZva2VHZW5lcmF0b3JCb2R5KEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogc3VwZXIoZWxlbWVudCwgaW5wdXRzLCB0eXBlLCBjb25zdCA8RGFydFR5cGU+W10pIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdISW52b2tlR2VuZXJhdG9yQm9keSgke2VsZW1lbnQubmFtZX0pJzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEludm9rZUdlbmVyYXRvckJvZHkodGhpcyk7Cn0KCmFic3RyYWN0IGNsYXNzIEhGaWVsZEFjY2VzcyBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgZmluYWwgRmllbGRFbnRpdHkgZWxlbWVudDsKCiAgSEZpZWxkQWNjZXNzKHRoaXMuZWxlbWVudCwgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGlucHV0cywgdHlwZSk7CgogIEhJbnN0cnVjdGlvbiBnZXQgcmVjZWl2ZXIgPT4gaW5wdXRzWzBdOwp9CgpjbGFzcyBIRmllbGRHZXQgZXh0ZW5kcyBIRmllbGRBY2Nlc3MgewogIGZpbmFsIGJvb2wgaXNBc3NpZ25hYmxlOwoKICBIRmllbGRHZXQoRmllbGRFbnRpdHkgZWxlbWVudCwgSEluc3RydWN0aW9uIHJlY2VpdmVyLCBBYnN0cmFjdFZhbHVlIHR5cGUsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICB7Ym9vbCBpc0Fzc2lnbmFibGV9KQogICAgICA6IHRoaXMuaXNBc3NpZ25hYmxlID0KICAgICAgICAgICAgKGlzQXNzaWduYWJsZSAhPSBudWxsKSA/IGlzQXNzaWduYWJsZSA6IGVsZW1lbnQuaXNBc3NpZ25hYmxlLAogICAgICAgIHN1cGVyKGVsZW1lbnQsIDxISW5zdHJ1Y3Rpb24+W3JlY2VpdmVyXSwgdHlwZSkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgIHNldFVzZUd2bigpOwogICAgaWYgKHRoaXMuaXNBc3NpZ25hYmxlKSB7CiAgICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZSgpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ludGVyY2VwdG9yKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKHNvdXJjZUVsZW1lbnQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgLy8gSW4gY2FzZSBvZiBhIGNsb3N1cmUgaW5zaWRlIGFuIGludGVyY2VwdG9yIGNsYXNzLCBbOnRoaXM6XSBpcwogICAgLy8gc3RvcmVkIGluIHRoZSBnZW5lcmF0ZWQgY2xvc3VyZSBjbGFzcywgYW5kIGFjY2Vzc2VkIHRocm91Z2ggYQogICAgLy8gW0hGaWVsZEdldF0uCiAgICBpZiAoc291cmNlRWxlbWVudCBpcyBUaGlzTG9jYWwpIHsKICAgICAgVGhpc0xvY2FsIHRoaXNMb2NhbCA9IHNvdXJjZUVsZW1lbnQ7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5pbnRlcmNlcHRvckRhdGEKICAgICAgICAgIC5pc0ludGVyY2VwdGVkQ2xhc3ModGhpc0xvY2FsLmVuY2xvc2luZ0NsYXNzKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIHJlY2VpdmVyLmlzTnVsbChkb21haW4pLmlzUG90ZW50aWFsbHlUcnVlOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gZ2V0RGFydFJlY2VpdmVyKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgPT4gcmVjZWl2ZXI7CiAgQG92ZXJyaWRlCiAgYm9vbCBvbmx5VGhyb3dzTlNNKCkgPT4gdHJ1ZTsKICBib29sIGdldCBpc051bGxDaGVjayA9PiBlbGVtZW50ID09IG51bGw7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0RmllbGRHZXQodGhpcyk7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5GSUVMRF9HRVRfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIRmllbGRHZXQ7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhGaWVsZEdldCBvdGhlcikgPT4gZWxlbWVudCA9PSBvdGhlci5lbGVtZW50OwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICJGaWVsZEdldChlbGVtZW50PSRlbGVtZW50LHR5cGU9JGluc3RydWN0aW9uVHlwZSkiOwp9CgpjbGFzcyBIRmllbGRTZXQgZXh0ZW5kcyBIRmllbGRBY2Nlc3MgewogIEhGaWVsZFNldChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgRmllbGRFbnRpdHkgZWxlbWVudCwKICAgICAgSEluc3RydWN0aW9uIHJlY2VpdmVyLCBISW5zdHJ1Y3Rpb24gdmFsdWUpCiAgICAgIDogc3VwZXIoZWxlbWVudCwgPEhJbnN0cnVjdGlvbj5bcmVjZWl2ZXIsIHZhbHVlXSwgZG9tYWluLmVtcHR5VHlwZSkgewogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgIHNpZGVFZmZlY3RzLnNldENoYW5nZXNJbnN0YW5jZVByb3BlcnR5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICByZWNlaXZlci5pc051bGwoZG9tYWluKS5pc1BvdGVudGlhbGx5VHJ1ZTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIGdldERhcnRSZWNlaXZlcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpID0+IHJlY2VpdmVyOwogIEBvdmVycmlkZQogIGJvb2wgb25seVRocm93c05TTSgpID0+IHRydWU7CgogIEhJbnN0cnVjdGlvbiBnZXQgdmFsdWUgPT4gaW5wdXRzWzFdOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0RmllbGRTZXQodGhpcyk7CgogIC8vIEhGaWVsZFNldCBpcyBhbiBleHByZXNzaW9uIGlmIGl0IGhhcyBhIHVzZXIuCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzU3RhdGVtZW50KCkgPT4gdXNlZEJ5LmlzRW1wdHk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICJGaWVsZFNldChlbGVtZW50PSRlbGVtZW50LHR5cGU9JGluc3RydWN0aW9uVHlwZSkiOwp9CgpjbGFzcyBIR2V0TGVuZ3RoIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBmaW5hbCBib29sIGlzQXNzaWduYWJsZTsKICBIR2V0TGVuZ3RoKEhJbnN0cnVjdGlvbiByZWNlaXZlciwgQWJzdHJhY3RWYWx1ZSB0eXBlLAogICAgICB7Ym9vbCB0aGlzLmlzQXNzaWduYWJsZX0pCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bcmVjZWl2ZXJdLCB0eXBlKSB7CiAgICBhc3NlcnQoaXNBc3NpZ25hYmxlICE9IG51bGwpOwogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgIHNldFVzZUd2bigpOwogICAgaWYgKHRoaXMuaXNBc3NpZ25hYmxlKSB7CiAgICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZSgpOwogICAgfQogIH0KCiAgSEluc3RydWN0aW9uIGdldCByZWNlaXZlciA9PiBpbnB1dHMuc2luZ2xlOwoKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICByZWNlaXZlci5pc051bGwoZG9tYWluKS5pc1BvdGVudGlhbGx5VHJ1ZTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIGdldERhcnRSZWNlaXZlcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpID0+IHJlY2VpdmVyOwogIEBvdmVycmlkZQogIGJvb2wgb25seVRocm93c05TTSgpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0R2V0TGVuZ3RoKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uR0VUX0xFTkdUSF9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhHZXRMZW5ndGg7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhHZXRMZW5ndGggb3RoZXIpID0+IHRydWU7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkdldExlbmd0aCgpIjsKfQoKLy8vIEhSZWFkTW9kaWZ5V3JpdGUgaXMgYSBsYXRlIHN0YWdlIGluc3RydWN0aW9uIGZvciBhIGZpZWxkIChwcm9wZXJ0eSkgdXBkYXRlCi8vLyB2aWEgYW4gYXNzaWdubWVudCBvcGVyYXRpb24gb3IgcHJlLSBvciBwb3N0LWluY3JlbWVudC4KY2xhc3MgSFJlYWRNb2RpZnlXcml0ZSBleHRlbmRzIEhMYXRlSW5zdHJ1Y3Rpb24gewogIHN0YXRpYyBjb25zdCBBU1NJR05fT1AgPSAwOwogIHN0YXRpYyBjb25zdCBQUkVfT1AgPSAxOwogIHN0YXRpYyBjb25zdCBQT1NUX09QID0gMjsKICBmaW5hbCBGaWVsZEVudGl0eSBlbGVtZW50OwogIGZpbmFsIFN0cmluZyBqc09wOwogIGZpbmFsIGludCBvcEtpbmQ7CgogIEhSZWFkTW9kaWZ5V3JpdGUuXyh0aGlzLmVsZW1lbnQsIHRoaXMuanNPcCwgdGhpcy5vcEtpbmQsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihpbnB1dHMsIHR5cGUpIHsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsRGVwZW5kZW5jaWVzKCk7CiAgICBzaWRlRWZmZWN0cy5zZXRDaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eSgpOwogICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uSW5zdGFuY2VQcm9wZXJ0eVN0b3JlKCk7CiAgfQoKICBIUmVhZE1vZGlmeVdyaXRlLmFzc2lnbk9wKEZpZWxkRW50aXR5IGVsZW1lbnQsIFN0cmluZyBqc09wLAogICAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEhJbnN0cnVjdGlvbiBvcGVyYW5kLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogdGhpcy5fKAogICAgICAgICAgICBlbGVtZW50LCBqc09wLCBBU1NJR05fT1AsIDxISW5zdHJ1Y3Rpb24+W3JlY2VpdmVyLCBvcGVyYW5kXSwgdHlwZSk7CgogIEhSZWFkTW9kaWZ5V3JpdGUucHJlT3AoRmllbGRFbnRpdHkgZWxlbWVudCwgU3RyaW5nIGpzT3AsCiAgICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHRoaXMuXyhlbGVtZW50LCBqc09wLCBQUkVfT1AsIDxISW5zdHJ1Y3Rpb24+W3JlY2VpdmVyXSwgdHlwZSk7CgogIEhSZWFkTW9kaWZ5V3JpdGUucG9zdE9wKEZpZWxkRW50aXR5IGVsZW1lbnQsIFN0cmluZyBqc09wLAogICAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiB0aGlzLl8oZWxlbWVudCwganNPcCwgUE9TVF9PUCwgPEhJbnN0cnVjdGlvbj5bcmVjZWl2ZXJdLCB0eXBlKTsKCiAgSEluc3RydWN0aW9uIGdldCByZWNlaXZlciA9PiBpbnB1dHNbMF07CgogIGJvb2wgZ2V0IGlzUHJlT3AgPT4gb3BLaW5kID09IFBSRV9PUDsKICBib29sIGdldCBpc1Bvc3RPcCA9PiBvcEtpbmQgPT0gUE9TVF9PUDsKICBib29sIGdldCBpc0Fzc2lnbk9wID0+IG9wS2luZCA9PSBBU1NJR05fT1A7CgogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIHJlY2VpdmVyLmlzTnVsbChkb21haW4pLmlzUG90ZW50aWFsbHlUcnVlOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gZ2V0RGFydFJlY2VpdmVyKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgPT4gcmVjZWl2ZXI7CiAgQG92ZXJyaWRlCiAgYm9vbCBvbmx5VGhyb3dzTlNNKCkgPT4gdHJ1ZTsKCiAgSEluc3RydWN0aW9uIGdldCB2YWx1ZSA9PiBpbnB1dHNbMV07CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRSZWFkTW9kaWZ5V3JpdGUodGhpcyk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc1N0YXRlbWVudCgpID0+IGlzQXNzaWduT3A7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlJlYWRNb2RpZnlXcml0ZSAkanNPcCAkb3BLaW5kICRlbGVtZW50IjsKfQoKYWJzdHJhY3QgY2xhc3MgSExvY2FsQWNjZXNzIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBmaW5hbCBMb2NhbCB2YXJpYWJsZTsKCiAgSExvY2FsQWNjZXNzKHRoaXMudmFyaWFibGUsIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihpbnB1dHMsIHR5cGUpOwoKICBISW5zdHJ1Y3Rpb24gZ2V0IHJlY2VpdmVyID0+IGlucHV0c1swXTsKfQoKY2xhc3MgSExvY2FsR2V0IGV4dGVuZHMgSExvY2FsQWNjZXNzIHsKICAvLyBObyBuZWVkIHRvIHVzZSBHVk4gZm9yIGEgW0hMb2NhbEdldF0sIGl0IGlzIGp1c3QgYSBsb2NhbAogIC8vIGFjY2Vzcy4KICBITG9jYWxHZXQoTG9jYWwgdmFyaWFibGUsIEhMb2NhbFZhbHVlIGxvY2FsLCBBYnN0cmFjdFZhbHVlIHR5cGUsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHN1cGVyKHZhcmlhYmxlLCA8SEluc3RydWN0aW9uPltsb2NhbF0sIHR5cGUpIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TG9jYWxHZXQodGhpcyk7CgogIEhMb2NhbFZhbHVlIGdldCBsb2NhbCA9PiBpbnB1dHNbMF07Cn0KCmNsYXNzIEhMb2NhbFNldCBleHRlbmRzIEhMb2NhbEFjY2VzcyB7CiAgSExvY2FsU2V0KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBMb2NhbCB2YXJpYWJsZSwgSExvY2FsVmFsdWUgbG9jYWwsCiAgICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSkKICAgICAgOiBzdXBlcih2YXJpYWJsZSwgPEhJbnN0cnVjdGlvbj5bbG9jYWwsIHZhbHVlXSwgZG9tYWluLmVtcHR5VHlwZSk7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TG9jYWxTZXQodGhpcyk7CgogIEhMb2NhbFZhbHVlIGdldCBsb2NhbCA9PiBpbnB1dHNbMF07CiAgSEluc3RydWN0aW9uIGdldCB2YWx1ZSA9PiBpbnB1dHNbMV07CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzU3RhdGVtZW50KCkgPT4gdHJ1ZTsKfQoKYWJzdHJhY3QgY2xhc3MgSEZvcmVpZ24gZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhGb3JlaWduKEFic3RyYWN0VmFsdWUgdHlwZSwgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cykgOiBzdXBlcihpbnB1dHMsIHR5cGUpOwoKICBib29sIGdldCBpc1N0YXRlbWVudCA9PiBmYWxzZTsKICBOYXRpdmVCZWhhdmlvciBnZXQgbmF0aXZlQmVoYXZpb3IgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgewogICAgcmV0dXJuIHNpZGVFZmZlY3RzLmhhc1NpZGVFZmZlY3RzKCkgfHwgc2lkZUVmZmVjdHMuZGVwZW5kc09uU29tZXRoaW5nKCk7CiAgfQp9CgpjbGFzcyBIRm9yZWlnbkNvZGUgZXh0ZW5kcyBIRm9yZWlnbiB7CiAgZmluYWwganMuVGVtcGxhdGUgY29kZVRlbXBsYXRlOwogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNTdGF0ZW1lbnQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3I7CiAgTmF0aXZlVGhyb3dCZWhhdmlvciB0aHJvd0JlaGF2aW9yOwogIGZpbmFsIEZ1bmN0aW9uRW50aXR5IGZvcmVpZ25GdW5jdGlvbjsKCiAgSEZvcmVpZ25Db2RlKHRoaXMuY29kZVRlbXBsYXRlLCBBYnN0cmFjdFZhbHVlIHR5cGUsIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMsCiAgICAgIHt0aGlzLmlzU3RhdGVtZW50OiBmYWxzZSwKICAgICAgU2lkZUVmZmVjdHMgZWZmZWN0cywKICAgICAgTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IsCiAgICAgIE5hdGl2ZVRocm93QmVoYXZpb3IgdGhyb3dCZWhhdmlvciwKICAgICAgdGhpcy5mb3JlaWduRnVuY3Rpb259KQogICAgICA6IHRoaXMubmF0aXZlQmVoYXZpb3IgPSBuYXRpdmVCZWhhdmlvciwKICAgICAgICB0aGlzLnRocm93QmVoYXZpb3IgPSB0aHJvd0JlaGF2aW9yLAogICAgICAgIHN1cGVyKHR5cGUsIGlucHV0cykgewogICAgYXNzZXJ0KGNvZGVUZW1wbGF0ZSAhPSBudWxsKTsKICAgIGlmIChlZmZlY3RzID09IG51bGwgJiYgbmF0aXZlQmVoYXZpb3IgIT0gbnVsbCkgewogICAgICBlZmZlY3RzID0gbmF0aXZlQmVoYXZpb3Iuc2lkZUVmZmVjdHM7CiAgICB9CiAgICBpZiAodGhpcy50aHJvd0JlaGF2aW9yID09IG51bGwpIHsKICAgICAgdGhpcy50aHJvd0JlaGF2aW9yID0gKG5hdGl2ZUJlaGF2aW9yID09IG51bGwpCiAgICAgICAgICA/IE5hdGl2ZVRocm93QmVoYXZpb3IuTUFZCiAgICAgICAgICA6IG5hdGl2ZUJlaGF2aW9yLnRocm93QmVoYXZpb3I7CiAgICB9CiAgICBhc3NlcnQodGhpcy50aHJvd0JlaGF2aW9yICE9IG51bGwpOwoKICAgIGlmIChlZmZlY3RzICE9IG51bGwpIHNpZGVFZmZlY3RzLmFkZChlZmZlY3RzKTsKICAgIGlmIChuYXRpdmVCZWhhdmlvciAhPSBudWxsICYmIG5hdGl2ZUJlaGF2aW9yLnVzZUd2bikgewogICAgICBzZXRVc2VHdm4oKTsKICAgIH0KICB9CgogIEhGb3JlaWduQ29kZS5zdGF0ZW1lbnQoanMuVGVtcGxhdGUgY29kZVRlbXBsYXRlLCBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLAogICAgICBTaWRlRWZmZWN0cyBlZmZlY3RzLCBOYXRpdmVCZWhhdmlvciBuYXRpdmVCZWhhdmlvciwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHRoaXMoY29kZVRlbXBsYXRlLCB0eXBlLCBpbnB1dHMsCiAgICAgICAgICAgIGlzU3RhdGVtZW50OiB0cnVlLAogICAgICAgICAgICBlZmZlY3RzOiBlZmZlY3RzLAogICAgICAgICAgICBuYXRpdmVCZWhhdmlvcjogbmF0aXZlQmVoYXZpb3IpOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEZvcmVpZ25Db2RlKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNTdGF0ZW1lbnQoKSA9PiBpc1N0YXRlbWVudDsKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSB7CiAgICBpZiAoaW5wdXRzLmxlbmd0aCA+IDApIHsKICAgICAgcmV0dXJuIGlucHV0cy5maXJzdC5pc051bGwoZG9tYWluKS5pc1BvdGVudGlhbGx5VHJ1ZQogICAgICAgICAgPyB0aHJvd0JlaGF2aW9yLmNhblRocm93CiAgICAgICAgICA6IHRocm93QmVoYXZpb3Iub25Ob25OdWxsLmNhblRocm93OwogICAgfQogICAgcmV0dXJuIHRocm93QmVoYXZpb3IuY2FuVGhyb3c7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9ubHlUaHJvd3NOU00oKSA9PiB0aHJvd0JlaGF2aW9yLmlzT25seU51bGxOU01HdWFyZDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0FsbG9jYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+CiAgICAgIG5hdGl2ZUJlaGF2aW9yICE9IG51bGwgJiYKICAgICAgbmF0aXZlQmVoYXZpb3IuaXNBbGxvY2F0aW9uICYmCiAgICAgIGlzTnVsbChkb21haW4pLmlzRGVmaW5pdGVseUZhbHNlOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uRk9SRUlHTl9DT0RFX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSEZvcmVpZ25Db2RlOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIRm9yZWlnbkNvZGUgb3RoZXIpIHsKICAgIHJldHVybiBjb2RlVGVtcGxhdGUuc291cmNlICE9IG51bGwgJiYKICAgICAgICBjb2RlVGVtcGxhdGUuc291cmNlID09IG90aGVyLmNvZGVUZW1wbGF0ZS5zb3VyY2U7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSEZvcmVpZ25Db2RlKCIke2NvZGVUZW1wbGF0ZS5zb3VyY2V9IiknOwp9CgphYnN0cmFjdCBjbGFzcyBISW52b2tlQmluYXJ5IGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTZWxlY3RvciBzZWxlY3RvcjsKICBISW52b2tlQmluYXJ5KAogICAgICBISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0LCB0aGlzLnNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bbGVmdCwgcmlnaHRdLCB0eXBlKSB7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbERlcGVuZGVuY2llcygpOwogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICBISW5zdHJ1Y3Rpb24gZ2V0IGxlZnQgPT4gaW5wdXRzWzBdOwogIEhJbnN0cnVjdGlvbiBnZXQgcmlnaHQgPT4gaW5wdXRzWzFdOwoKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpOwp9CgphYnN0cmFjdCBjbGFzcyBIQmluYXJ5QXJpdGhtZXRpYyBleHRlbmRzIEhJbnZva2VCaW5hcnkgewogIEhCaW5hcnlBcml0aG1ldGljKEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpOwp9CgpjbGFzcyBIQWRkIGV4dGVuZHMgSEJpbmFyeUFyaXRobWV0aWMgewogIEhBZGQoSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0QWRkKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5hZGQ7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkFERF9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhBZGQ7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSERpdmlkZSBleHRlbmRzIEhCaW5hcnlBcml0aG1ldGljIHsKICBIRGl2aWRlKEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdERpdmlkZSh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0uZGl2aWRlOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5ESVZJREVfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIRGl2aWRlOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhNdWx0aXBseSBleHRlbmRzIEhCaW5hcnlBcml0aG1ldGljIHsKICBITXVsdGlwbHkoSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0TXVsdGlwbHkodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLm11bHRpcGx5OwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5NVUxUSVBMWV9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhNdWx0aXBseTsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBIU3VidHJhY3QgZXh0ZW5kcyBIQmluYXJ5QXJpdGhtZXRpYyB7CiAgSFN1YnRyYWN0KEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFN1YnRyYWN0KHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5zdWJ0cmFjdDsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uU1VCVFJBQ1RfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIU3VidHJhY3Q7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSFRydW5jYXRpbmdEaXZpZGUgZXh0ZW5kcyBIQmluYXJ5QXJpdGhtZXRpYyB7CiAgSFRydW5jYXRpbmdEaXZpZGUoSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0VHJ1bmNhdGluZ0RpdmlkZSh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PgogICAgICBjb25zdGFudF9zeXN0ZW0udHJ1bmNhdGluZ0RpdmlkZTsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uVFJVTkNBVElOR19ESVZJREVfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIVHJ1bmNhdGluZ0RpdmlkZTsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBIUmVtYWluZGVyIGV4dGVuZHMgSEJpbmFyeUFyaXRobWV0aWMgewogIEhSZW1haW5kZXIoSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0UmVtYWluZGVyKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5yZW1haW5kZXI7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlJFTUFJTkRFUl9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhSZW1haW5kZXI7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKLy8vIEFuIFtIU3dpdGNoXSBpbnN0cnVjdGlvbiBoYXMgb25lIGlucHV0IGZvciB0aGUgaW5jb21pbmcKLy8vIHZhbHVlLCBhbmQgb25lIGlucHV0IHBlciBjb25zdGFudCB0aGF0IGl0IGNhbiBzd2l0Y2ggb24uCi8vLyBJdHMgYmxvY2sgaGFzIG9uZSBzdWNjZXNzb3IgcGVyIGNvbnN0YW50LCBhbmQgb25lIGZvciB0aGUgZGVmYXVsdC4KY2xhc3MgSFN3aXRjaCBleHRlbmRzIEhDb250cm9sRmxvdyB7CiAgSFN3aXRjaChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cykKICAgICAgOiBzdXBlcihkb21haW4sIGlucHV0cyk7CgogIEhDb25zdGFudCBjb25zdGFudChpbnQgaW5kZXgpID0+IGlucHV0c1tpbmRleCArIDFdOwogIEhJbnN0cnVjdGlvbiBnZXQgZXhwcmVzc2lvbiA9PiBpbnB1dHNbMF07CgogIC8vLyBQcm92aWRlcyB0aGUgdGFyZ2V0IHRvIGp1bXAgdG8gaWYgbm9uZSBvZiB0aGUgY29uc3RhbnRzIG1hdGNoCiAgLy8vIHRoZSBleHByZXNzaW9uLiBJZiB0aGUgc3dpdGNoIGhhZCBubyBkZWZhdWx0IGNhc2UsIHRoaXMgaXMgdGhlCiAgLy8vIGZvbGxvd2luZyBqb2luLWJsb2NrLgogIEhCYXNpY0Jsb2NrIGdldCBkZWZhdWx0VGFyZ2V0ID0+IGJsb2NrLnN1Y2Nlc3NvcnMubGFzdDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRTd2l0Y2godGhpcyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICJIU3dpdGNoIGNhc2VzID0gJGlucHV0cyI7Cn0KCmFic3RyYWN0IGNsYXNzIEhCaW5hcnlCaXRPcCBleHRlbmRzIEhJbnZva2VCaW5hcnkgewogIEhCaW5hcnlCaXRPcChISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0LCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7Cn0KCmNsYXNzIEhTaGlmdExlZnQgZXh0ZW5kcyBIQmluYXJ5Qml0T3AgewogIEhTaGlmdExlZnQoSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0U2hpZnRMZWZ0KHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5zaGlmdExlZnQ7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlNISUZUX0xFRlRfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIU2hpZnRMZWZ0OwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhTaGlmdFJpZ2h0IGV4dGVuZHMgSEJpbmFyeUJpdE9wIHsKICBIU2hpZnRSaWdodChISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0LCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRTaGlmdFJpZ2h0KHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5zaGlmdFJpZ2h0OwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5TSElGVF9SSUdIVF9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhTaGlmdFJpZ2h0OwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhCaXRPciBleHRlbmRzIEhCaW5hcnlCaXRPcCB7CiAgSEJpdE9yKEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEJpdE9yKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5iaXRPcjsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uQklUX09SX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSEJpdE9yOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhCaXRBbmQgZXh0ZW5kcyBIQmluYXJ5Qml0T3AgewogIEhCaXRBbmQoSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Qml0QW5kKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5iaXRBbmQ7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkJJVF9BTkRfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIQml0QW5kOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhCaXRYb3IgZXh0ZW5kcyBIQmluYXJ5Qml0T3AgewogIEhCaXRYb3IoSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Qml0WG9yKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5iaXRYb3I7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkJJVF9YT1JfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIQml0WG9yOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmFic3RyYWN0IGNsYXNzIEhJbnZva2VVbmFyeSBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU2VsZWN0b3Igc2VsZWN0b3I7CiAgSEludm9rZVVuYXJ5KEhJbnN0cnVjdGlvbiBpbnB1dCwgdGhpcy5zZWxlY3RvciwgdHlwZSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltpbnB1dF0sIHR5cGUpIHsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsRGVwZW5kZW5jaWVzKCk7CiAgICBzZXRVc2VHdm4oKTsKICB9CgogIEhJbnN0cnVjdGlvbiBnZXQgb3BlcmFuZCA9PiBpbnB1dHNbMF07CgogIGNvbnN0YW50X3N5c3RlbS5VbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKTsKfQoKY2xhc3MgSE5lZ2F0ZSBleHRlbmRzIEhJbnZva2VVbmFyeSB7CiAgSE5lZ2F0ZShISW5zdHJ1Y3Rpb24gaW5wdXQsIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoaW5wdXQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdE5lZ2F0ZSh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLlVuYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5uZWdhdGU7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLk5FR0FURV9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhOZWdhdGU7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSEFicyBleHRlbmRzIEhJbnZva2VVbmFyeSB7CiAgSEFicyhISW5zdHJ1Y3Rpb24gaW5wdXQsIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoaW5wdXQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEFicyh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLlVuYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5hYnM7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkFCU19UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhBYnM7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSEJpdE5vdCBleHRlbmRzIEhJbnZva2VVbmFyeSB7CiAgSEJpdE5vdChISW5zdHJ1Y3Rpb24gaW5wdXQsIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoaW5wdXQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEJpdE5vdCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLlVuYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IGNvbnN0YW50X3N5c3RlbS5iaXROb3Q7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkJJVF9OT1RfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIQml0Tm90OwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhFeGl0IGV4dGVuZHMgSENvbnRyb2xGbG93IHsKICBIRXhpdChBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgOiBzdXBlcihkb21haW4sIGNvbnN0IDxISW5zdHJ1Y3Rpb24+W10pOwogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ2V4aXQnOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0RXhpdCh0aGlzKTsKfQoKY2xhc3MgSEdvdG8gZXh0ZW5kcyBIQ29udHJvbEZsb3cgewogIEhHb3RvKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA6IHN1cGVyKGRvbWFpbiwgY29uc3QgPEhJbnN0cnVjdGlvbj5bXSk7CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnZ290byc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRHb3RvKHRoaXMpOwp9CgphYnN0cmFjdCBjbGFzcyBISnVtcCBleHRlbmRzIEhDb250cm9sRmxvdyB7CiAgZmluYWwgSnVtcFRhcmdldCB0YXJnZXQ7CiAgZmluYWwgTGFiZWxEZWZpbml0aW9uIGxhYmVsOwogIEhKdW1wKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCB0aGlzLnRhcmdldCwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogbGFiZWwgPSBudWxsLAogICAgICAgIHN1cGVyKGRvbWFpbiwgY29uc3QgPEhJbnN0cnVjdGlvbj5bXSkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KICBISnVtcC50b0xhYmVsKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBMYWJlbERlZmluaXRpb24gbGFiZWwsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IGxhYmVsID0gbGFiZWwsCiAgICAgICAgdGFyZ2V0ID0gbGFiZWwudGFyZ2V0LAogICAgICAgIHN1cGVyKGRvbWFpbiwgY29uc3QgPEhJbnN0cnVjdGlvbj5bXSkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KfQoKY2xhc3MgSEJyZWFrIGV4dGVuZHMgSEp1bXAgewogIC8vLyBTaWduYWxzIHRoYXQgdGhpcyBpcyBhIHNwZWNpYWwgYnJlYWsgaW5zdHJ1Y3Rpb24gZm9yIHRoZSBzeW50aGV0aWMgbG9vcAogIC8vLyBnZW5lcmF0ZWQgZm9yIGEgc3dpdGNoIHN0YXRlbWVudCB3aXRoIGNvbnRpbnVlIHN0YXRlbWVudHMuIFNlZQogIC8vLyBbU3NhRnJvbUFzdE1peGluLmJ1aWxkQ29tcGxleFN3aXRjaFN0YXRlbWVudF0gZm9yIGRldGFpbC4KICBmaW5hbCBib29sIGJyZWFrU3dpdGNoQ29udGludWVMb29wOwoKICBIQnJlYWsoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIEp1bXBUYXJnZXQgdGFyZ2V0LAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge2Jvb2wgdGhpcy5icmVha1N3aXRjaENvbnRpbnVlTG9vcDogZmFsc2V9KQogICAgICA6IHN1cGVyKGRvbWFpbiwgdGFyZ2V0LCBzb3VyY2VJbmZvcm1hdGlvbik7CgogIEhCcmVhay50b0xhYmVsKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBMYWJlbERlZmluaXRpb24gbGFiZWwsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IGJyZWFrU3dpdGNoQ29udGludWVMb29wID0gZmFsc2UsCiAgICAgICAgc3VwZXIudG9MYWJlbChkb21haW4sIGxhYmVsLCBzb3VyY2VJbmZvcm1hdGlvbik7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IChsYWJlbCAhPSBudWxsKSA/ICdicmVhayAke2xhYmVsLmxhYmVsTmFtZX0nIDogJ2JyZWFrJzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRCcmVhayh0aGlzKTsKfQoKY2xhc3MgSENvbnRpbnVlIGV4dGVuZHMgSEp1bXAgewogIEhDb250aW51ZShBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgSnVtcFRhcmdldCB0YXJnZXQsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHN1cGVyKGRvbWFpbiwgdGFyZ2V0LCBzb3VyY2VJbmZvcm1hdGlvbik7CgogIEhDb250aW51ZS50b0xhYmVsKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBMYWJlbERlZmluaXRpb24gbGFiZWwsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHN1cGVyLnRvTGFiZWwoZG9tYWluLCBsYWJlbCwgc291cmNlSW5mb3JtYXRpb24pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAobGFiZWwgIT0gbnVsbCkgPyAnY29udGludWUgJHtsYWJlbC5sYWJlbE5hbWV9JyA6ICdjb250aW51ZSc7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Q29udGludWUodGhpcyk7Cn0KCmNsYXNzIEhUcnkgZXh0ZW5kcyBIQ29udHJvbEZsb3cgewogIEhMb2NhbFZhbHVlIGV4Y2VwdGlvbjsKICBIQmFzaWNCbG9jayBjYXRjaEJsb2NrOwogIEhCYXNpY0Jsb2NrIGZpbmFsbHlCbG9jazsKICBIVHJ5KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA6IHN1cGVyKGRvbWFpbiwgY29uc3QgPEhJbnN0cnVjdGlvbj5bXSk7CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAndHJ5JzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFRyeSh0aGlzKTsKICBIQmFzaWNCbG9jayBnZXQgam9pbkJsb2NrID0+IHRoaXMuYmxvY2suc3VjY2Vzc29ycy5sYXN0Owp9CgovLyBBbiBbSEV4aXRUcnldIGNvbnRyb2wgZmxvdyBub2RlIGlzIHVzZWQgd2hlbiB0aGUgYm9keSBvZiBhIHRyeSBvcgovLyB0aGUgYm9keSBvZiBhIGNhdGNoIGNvbnRhaW5zIGEgcmV0dXJuLCBicmVhayBvciBjb250aW51ZS4gVG8gYnVpbGQKLy8gdGhlIGNvbnRyb2wgZmxvdyBncmFwaCwgd2UgZXhwbGljaXRseSBtYXJrIHRoZSBib2R5IHRoYXQKLy8gbGVhZHMgdG8gb25lIG9mIHRoaXMgaW5zdHJ1Y3Rpb24gYSBwcmVkZWNlc3NvciBvZiBjYXRjaCBhbmQKLy8gZmluYWxseS4KY2xhc3MgSEV4aXRUcnkgZXh0ZW5kcyBIQ29udHJvbEZsb3cgewogIEhFeGl0VHJ5KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA6IHN1cGVyKGRvbWFpbiwgY29uc3QgPEhJbnN0cnVjdGlvbj5bXSk7CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnZXhpdCB0cnknOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0RXhpdFRyeSh0aGlzKTsKICBIQmFzaWNCbG9jayBnZXQgYm9keVRyeVN1Y2Nlc3NvciA9PiBibG9jay5zdWNjZXNzb3JzWzBdOwp9CgpjbGFzcyBISWYgZXh0ZW5kcyBIQ29uZGl0aW9uYWxCcmFuY2ggewogIEhCbG9ja0Zsb3cgYmxvY2tJbmZvcm1hdGlvbiA9IG51bGw7CiAgSElmKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBISW5zdHJ1Y3Rpb24gY29uZGl0aW9uKQogICAgICA6IHN1cGVyKGRvbWFpbiwgPEhJbnN0cnVjdGlvbj5bY29uZGl0aW9uXSk7CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnaWYnOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0SWYodGhpcyk7CgogIEhCYXNpY0Jsb2NrIGdldCB0aGVuQmxvY2sgewogICAgYXNzZXJ0KGlkZW50aWNhbChibG9jay5kb21pbmF0ZWRCbG9ja3NbMF0sIGJsb2NrLnN1Y2Nlc3NvcnNbMF0pKTsKICAgIHJldHVybiBibG9jay5zdWNjZXNzb3JzWzBdOwogIH0KCiAgSEJhc2ljQmxvY2sgZ2V0IGVsc2VCbG9jayB7CiAgICBhc3NlcnQoaWRlbnRpY2FsKGJsb2NrLmRvbWluYXRlZEJsb2Nrc1sxXSwgYmxvY2suc3VjY2Vzc29yc1sxXSkpOwogICAgcmV0dXJuIGJsb2NrLnN1Y2Nlc3NvcnNbMV07CiAgfQoKICBIQmFzaWNCbG9jayBnZXQgam9pbkJsb2NrID0+IGJsb2NrSW5mb3JtYXRpb24uY29udGludWF0aW9uOwp9CgpjbGFzcyBITG9vcEJyYW5jaCBleHRlbmRzIEhDb25kaXRpb25hbEJyYW5jaCB7CiAgc3RhdGljIGNvbnN0IGludCBDT05ESVRJT05fRklSU1RfTE9PUCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBET19XSElMRV9MT09QID0gMTsKCiAgZmluYWwgaW50IGtpbmQ7CiAgSExvb3BCcmFuY2goQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIEhJbnN0cnVjdGlvbiBjb25kaXRpb24sCiAgICAgIFt0aGlzLmtpbmQgPSBDT05ESVRJT05fRklSU1RfTE9PUF0pCiAgICAgIDogc3VwZXIoZG9tYWluLCA8SEluc3RydWN0aW9uPltjb25kaXRpb25dKTsKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdsb29wLWJyYW5jaCc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMb29wQnJhbmNoKHRoaXMpOwp9CgpjbGFzcyBIQ29uc3RhbnQgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIGZpbmFsIENvbnN0YW50VmFsdWUgY29uc3RhbnQ7CiAgSENvbnN0YW50LmludGVybmFsKHRoaXMuY29uc3RhbnQsIEFic3RyYWN0VmFsdWUgY29uc3RhbnRUeXBlKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W10sIGNvbnN0YW50VHlwZSk7CgogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ2xpdGVyYWw6ICR7Y29uc3RhbnQudG9TdHJ1Y3R1cmVkVGV4dCgpfSc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRDb25zdGFudCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnN0YW50KCkgPT4gdHJ1ZTsKICBAb3ZlcnJpZGUKICBib29sIGlzQ29uc3RhbnRCb29sZWFuKCkgPT4gY29uc3RhbnQuaXNCb29sOwogIEBvdmVycmlkZQogIGJvb2wgaXNDb25zdGFudE51bGwoKSA9PiBjb25zdGFudC5pc051bGw7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnN0YW50TnVtYmVyKCkgPT4gY29uc3RhbnQuaXNOdW07CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnN0YW50SW50ZWdlcigpID0+IGNvbnN0YW50LmlzSW50OwogIEBvdmVycmlkZQogIGJvb2wgaXNDb25zdGFudFN0cmluZygpID0+IGNvbnN0YW50LmlzU3RyaW5nOwogIEBvdmVycmlkZQogIGJvb2wgaXNDb25zdGFudExpc3QoKSA9PiBjb25zdGFudC5pc0xpc3Q7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnN0YW50TWFwKCkgPT4gY29uc3RhbnQuaXNNYXA7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnN0YW50RmFsc2UoKSA9PiBjb25zdGFudC5pc0ZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgaXNDb25zdGFudFRydWUoKSA9PiBjb25zdGFudC5pc1RydWU7CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcmNlcHRvcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpID0+IGNvbnN0YW50LmlzSW50ZXJjZXB0b3I7CgogIC8vIE1heWJlIGF2b2lkIHRoaXMgaWYgdGhlIGxpdGVyYWwgaXMgYmlnPwogIEBvdmVycmlkZQogIGJvb2wgaXNDb2RlTW90aW9uSW52YXJpYW50KCkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgc2V0IGluc3RydWN0aW9uVHlwZSh0eXBlKSB7CiAgICAvLyBPbmx5IGxpc3RzIGNhbiBiZSBzcGVjaWFsaXplZC4gVGhlIFNTQSBidWlsZGVyIHVzZXMgdGhlCiAgICAvLyBpbmZlcnJlciBmb3IgZmluZGluZyB0aGUgdHlwZSBvZiBhIGNvbnN0YW50IGxpc3QuIFdlIHNob3VsZAogICAgLy8gaGF2ZSB0aGUgY29uc3RhbnQga25vdyBpdHMgdHlwZSBpbnN0ZWFkLgogICAgaWYgKCFpc0NvbnN0YW50TGlzdCgpKSByZXR1cm47CiAgICBzdXBlci5pbnN0cnVjdGlvblR5cGUgPSB0eXBlOwogIH0KfQoKY2xhc3MgSE5vdCBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgSE5vdChISW5zdHJ1Y3Rpb24gdmFsdWUsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPlt2YWx1ZV0sIHR5cGUpIHsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXROb3QodGhpcyk7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLk5PVF9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhOb3Q7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKLy8vIEFuIFtITG9jYWxWYWx1ZV0gcmVwcmVzZW50cyBhIGxvY2FsLiBVbmxpa2UgW0hQYXJhbWV0ZXJWYWx1ZV1zIGl0cwovLy8gZmlyc3QgdXNlIG11c3QgYmUgaW4gYW4gSExvY2FsU2V0LiBUaGF0IGlzLCBbSFBhcmFtZXRlclZhbHVlXXMgaGF2ZSBhCi8vLyB2YWx1ZSBmcm9tIHRoZSBzdGFydCwgd2hlcmVhcyBbSExvY2FsVmFsdWVdcyBuZWVkIHRvIGJlIGluaXRpYWxpemVkIGZpcnN0LgpjbGFzcyBITG9jYWxWYWx1ZSBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgSExvY2FsVmFsdWUoRW50aXR5IHZhcmlhYmxlLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bXSwgdHlwZSkgewogICAgc291cmNlRWxlbWVudCA9IHZhcmlhYmxlOwogIH0KCiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnbG9jYWwgJHtzb3VyY2VFbGVtZW50Lm5hbWV9JzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdExvY2FsVmFsdWUodGhpcyk7Cn0KCmNsYXNzIEhQYXJhbWV0ZXJWYWx1ZSBleHRlbmRzIEhMb2NhbFZhbHVlIHsKICBIUGFyYW1ldGVyVmFsdWUoRW50aXR5IHZhcmlhYmxlLCBBYnN0cmFjdFZhbHVlIHR5cGUpIDogc3VwZXIodmFyaWFibGUsIHR5cGUpOwoKICAvLyBbSFBhcmFtZXRlclZhbHVlXXMgYXJlIGVpdGhlciB0aGUgdmFsdWUgb2YgdGhlIHBhcmFtZXRlciAoaW4gZnVsbHkgU1NBCiAgLy8gY29udmVydGVkIGNvZGUpLCBvciB0aGUgbXV0YWJsZSB2YXJpYWJsZSBjb250YWluaW5nIHRoZSB2YWx1ZSAoaW4KICAvLyBpbmNvbXBsZXRlbHkgU1NBIGNvbnZlcnRlZCBjb2RlLCBlLmcuIG1ldGhvZHMgY29udGFpbmluZyBleGNlcHRpb25zKS4KICBib29sIHVzZWRBc1ZhcmlhYmxlKCkgewogICAgZm9yIChISW5zdHJ1Y3Rpb24gdXNlciBpbiB1c2VkQnkpIHsKICAgICAgaWYgKHVzZXIgaXMgSExvY2FsR2V0KSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKHVzZXIgaXMgSExvY2FsU2V0ICYmIHVzZXIubG9jYWwgPT0gdGhpcykgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdwYXJhbWV0ZXIgJHtzb3VyY2VFbGVtZW50Lm5hbWV9JzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFBhcmFtZXRlclZhbHVlKHRoaXMpOwp9CgpjbGFzcyBIVGhpcyBleHRlbmRzIEhQYXJhbWV0ZXJWYWx1ZSB7CiAgSFRoaXMoVGhpc0xvY2FsIGVsZW1lbnQsIEFic3RyYWN0VmFsdWUgdHlwZSkgOiBzdXBlcihlbGVtZW50LCB0eXBlKTsKCiAgQG92ZXJyaWRlCiAgVGhpc0xvY2FsIGdldCBzb3VyY2VFbGVtZW50ID0+IHN1cGVyLnNvdXJjZUVsZW1lbnQ7CgogIEBvdmVycmlkZQogIHZvaWQgc2V0IHNvdXJjZUVsZW1lbnQoY292YXJpYW50IFRoaXNMb2NhbCBsb2NhbCkgewogICAgc3VwZXIuc291cmNlRWxlbWVudCA9IGxvY2FsOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUaGlzKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzQ29kZU1vdGlvbkludmFyaWFudCgpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcmNlcHRvcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5pbnRlcmNlcHRvckRhdGEKICAgICAgICAuaXNJbnRlcmNlcHRlZENsYXNzKHNvdXJjZUVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ3RoaXMnOwp9CgpjbGFzcyBIUGhpIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBzdGF0aWMgY29uc3QgSVNfTk9UX0xPR0lDQUxfT1BFUkFUT1IgPSAwOwogIHN0YXRpYyBjb25zdCBJU19BTkQgPSAxOwogIHN0YXRpYyBjb25zdCBJU19PUiA9IDI7CgogIGludCBsb2dpY2FsT3BlcmF0b3JUeXBlID0gSVNfTk9UX0xPR0lDQUxfT1BFUkFUT1I7CgogIC8vIFRoZSBvcmRlciBvZiB0aGUgW2lucHV0c10gbXVzdCBjb3JyZXNwb25kIHRvIHRoZSBvcmRlciBvZiB0aGUKICAvLyBwcmVkZWNlc3Nvci1lZGdlcy4gVGhhdCBpcyBpZiBhbiBpbnB1dCBjb21lcyBmcm9tIHRoZSBmaXJzdCBwcmVkZWNlc3NvcgogIC8vIG9mIHRoZSBzdXJyb3VuZGluZyBibG9jaywgdGhlbiB0aGUgaW5wdXQgbXVzdCBiZSB0aGUgZmlyc3QgaW4gdGhlIFtIUGhpXS4KICBIUGhpKExvY2FsIHZhcmlhYmxlLCBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoaW5wdXRzLCB0eXBlKSB7CiAgICBzb3VyY2VFbGVtZW50ID0gdmFyaWFibGU7CiAgfQogIEhQaGkubm9JbnB1dHMoTG9jYWwgdmFyaWFibGUsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiB0aGlzKHZhcmlhYmxlLCA8SEluc3RydWN0aW9uPltdLCB0eXBlKTsKICBIUGhpLnNpbmdsZUlucHV0KExvY2FsIHZhcmlhYmxlLCBISW5zdHJ1Y3Rpb24gaW5wdXQsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiB0aGlzKHZhcmlhYmxlLCA8SEluc3RydWN0aW9uPltpbnB1dF0sIHR5cGUpOwogIEhQaGkubWFueUlucHV0cyhMb2NhbCB2YXJpYWJsZSwgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHRoaXModmFyaWFibGUsIGlucHV0cywgdHlwZSk7CgogIHZvaWQgYWRkSW5wdXQoSEluc3RydWN0aW9uIGlucHV0KSB7CiAgICBhc3NlcnQoaXNJbkJhc2ljQmxvY2soKSk7CiAgICBpbnB1dHMuYWRkKGlucHV0KTsKICAgIGFzc2VydChpbnB1dHMubGVuZ3RoIDw9IGJsb2NrLnByZWRlY2Vzc29ycy5sZW5ndGgpOwogICAgaW5wdXQudXNlZEJ5LmFkZCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ3BoaSAkaWQnOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0UGhpKHRoaXMpOwp9CgphYnN0cmFjdCBjbGFzcyBIUmVsYXRpb25hbCBleHRlbmRzIEhJbnZva2VCaW5hcnkgewogIGJvb2wgdXNlc0Jvb2xpZmllZEludGVyY2VwdG9yID0gZmFsc2U7CiAgSFJlbGF0aW9uYWwobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKSA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7Cn0KCmNsYXNzIEhJZGVudGl0eSBleHRlbmRzIEhSZWxhdGlvbmFsIHsKICAvLyBDYWNoZWQgY29kZWdlbiBkZWNpc2lvbi4KICBTdHJpbmcgc2luZ2xlQ29tcGFyaXNvbk9wOyAvLyBudWxsLCAnPT09JywgJz09JwoKICBISWRlbnRpdHkobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKSA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJZGVudGl0eSh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0uaWRlbnRpdHk7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLklERU5USVRZX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSElkZW50aXR5OwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhHcmVhdGVyIGV4dGVuZHMgSFJlbGF0aW9uYWwgewogIEhHcmVhdGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSkgOiBzdXBlcihsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0R3JlYXRlcih0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0uZ3JlYXRlcjsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uR1JFQVRFUl9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhHcmVhdGVyOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IHRydWU7Cn0KCmNsYXNzIEhHcmVhdGVyRXF1YWwgZXh0ZW5kcyBIUmVsYXRpb25hbCB7CiAgSEdyZWF0ZXJFcXVhbChsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpCiAgICAgIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEdyZWF0ZXJFcXVhbCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSA9PiBjb25zdGFudF9zeXN0ZW0uZ3JlYXRlckVxdWFsOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5HUkVBVEVSX0VRVUFMX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSEdyZWF0ZXJFcXVhbDsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBITGVzcyBleHRlbmRzIEhSZWxhdGlvbmFsIHsKICBITGVzcyhsZWZ0LCByaWdodCwgc2VsZWN0b3IsIHR5cGUpIDogc3VwZXIobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKTsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdExlc3ModGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLmxlc3M7CiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLkxFU1NfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBITGVzczsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiB0cnVlOwp9CgpjbGFzcyBITGVzc0VxdWFsIGV4dGVuZHMgSFJlbGF0aW9uYWwgewogIEhMZXNzRXF1YWwobGVmdCwgcmlnaHQsIHNlbGVjdG9yLCB0eXBlKSA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBzZWxlY3RvciwgdHlwZSk7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMZXNzRXF1YWwodGhpcyk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgPT4gY29uc3RhbnRfc3lzdGVtLmxlc3NFcXVhbDsKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uTEVTU19FUVVBTF9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMob3RoZXIpID0+IG90aGVyIGlzIEhMZXNzRXF1YWw7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKY2xhc3MgSFJldHVybiBleHRlbmRzIEhDb250cm9sRmxvdyB7CiAgSFJldHVybihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgSEluc3RydWN0aW9uIHZhbHVlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBzdXBlcihkb21haW4sIDxISW5zdHJ1Y3Rpb24+W3ZhbHVlXSkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdyZXR1cm4nOwogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0UmV0dXJuKHRoaXMpOwp9CgpjbGFzcyBIVGhyb3dFeHByZXNzaW9uIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBIVGhyb3dFeHByZXNzaW9uKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBISW5zdHJ1Y3Rpb24gdmFsdWUsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W3ZhbHVlXSwgZG9tYWluLmVtcHR5VHlwZSkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICd0aHJvdyBleHByZXNzaW9uJzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFRocm93RXhwcmVzc2lvbih0aGlzKTsKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiB0cnVlOwp9CgpjbGFzcyBIQXdhaXQgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhBd2FpdChISW5zdHJ1Y3Rpb24gdmFsdWUsIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPlt2YWx1ZV0sIHR5cGUpOwogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ2F3YWl0JzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEF3YWl0KHRoaXMpOwogIC8vIEFuIGF3YWl0IHdpbGwgdGhyb3cgaWYgaXRzIGFyZ3VtZW50IGlzIG5vdCBhIHJlYWwgZnV0dXJlLgogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IHRydWU7CiAgQG92ZXJyaWRlCiAgU2lkZUVmZmVjdHMgc2lkZUVmZmVjdHMgPSBuZXcgU2lkZUVmZmVjdHMoKTsKfQoKY2xhc3MgSFlpZWxkIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBIWWllbGQoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4sIEhJbnN0cnVjdGlvbiB2YWx1ZSwgdGhpcy5oYXNTdGFyLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPlt2YWx1ZV0sIGRvbWFpbi5lbXB0eVR5cGUpIHsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CiAgYm9vbCBoYXNTdGFyOwogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ3lpZWxkJzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFlpZWxkKHRoaXMpOwogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IGZhbHNlOwogIEBvdmVycmlkZQogIFNpZGVFZmZlY3RzIHNpZGVFZmZlY3RzID0gbmV3IFNpZGVFZmZlY3RzKCk7Cn0KCmNsYXNzIEhUaHJvdyBleHRlbmRzIEhDb250cm9sRmxvdyB7CiAgZmluYWwgYm9vbCBpc1JldGhyb3c7CiAgSFRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCBISW5zdHJ1Y3Rpb24gdmFsdWUsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICB7dGhpcy5pc1JldGhyb3c6IGZhbHNlfSkKICAgICAgOiBzdXBlcihkb21haW4sIDxISW5zdHJ1Y3Rpb24+W3ZhbHVlXSkgewogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICd0aHJvdyc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUaHJvdyh0aGlzKTsKfQoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2hhbmdlIHRoaXMgdG8gYSAiSFN0YXRpY0xvYWQiIG9mIGEgZmllbGQgd2hlbiB3ZSB1c2UKLy8gQ0ZFIGNvbnN0YW50cy4gSXQgaGFzIGJlZW4gdXNlZCBmb3Igc3RhdGljIHRlYXItb2ZmcyBldmVuIHRob3VnaCB0aGVzZSBzaG91bGQKLy8gaGF2ZSBiZWVuIGNvbnN0YW50cy4KY2xhc3MgSFN0YXRpYyBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgZmluYWwgTWVtYmVyRW50aXR5IGVsZW1lbnQ7CgogIEhTdGF0aWModGhpcy5lbGVtZW50LCBBYnN0cmFjdFZhbHVlIHR5cGUsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W10sIHR5cGUpIHsKICAgIGFzc2VydChlbGVtZW50ICE9IG51bGwpOwogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgIGlmIChlbGVtZW50LmlzQXNzaWduYWJsZSkgewogICAgICBzaWRlRWZmZWN0cy5zZXREZXBlbmRzT25TdGF0aWNQcm9wZXJ0eVN0b3JlKCk7CiAgICB9CiAgICBzZXRVc2VHdm4oKTsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnc3RhdGljICR7ZWxlbWVudC5uYW1lfSc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRTdGF0aWModGhpcyk7CgogIEBvdmVycmlkZQogIGludCBndm5IYXNoQ29kZSgpID0+IHN1cGVyLmd2bkhhc2hDb2RlKCkgXiBlbGVtZW50Lmhhc2hDb2RlOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5TVEFUSUNfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKG90aGVyKSA9PiBvdGhlciBpcyBIU3RhdGljOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIU3RhdGljIG90aGVyKSA9PiBlbGVtZW50ID09IG90aGVyLmVsZW1lbnQ7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvZGVNb3Rpb25JbnZhcmlhbnQoKSA9PiAhZWxlbWVudC5pc0Fzc2lnbmFibGU7Cn0KCmNsYXNzIEhJbnRlcmNlcHRvciBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgLy8gVGhpcyBmaWVsZCBzaG91bGQgb3JpZ2luYWxseSBiZSBudWxsIHRvIGFsbG93IEdWTidpbmcgYWxsCiAgLy8gW0hJbnRlcmNlcHRvcl0gb24gdGhlIHNhbWUgaW5wdXQuCiAgU2V0PENsYXNzRW50aXR5PiBpbnRlcmNlcHRlZENsYXNzZXM7CgogIC8vIGlucHV0c1swXSBpcyBpbml0aWFsbHkgdGhlIG9ubHkgaW5wdXQsIHRoZSByZWNlaXZlci4KCiAgLy8gaW5wdXRzWzFdIGlzIGEgY29uc3RhbnQgaW50ZXJjZXB0b3Igd2hlbiB0aGUgaW50ZXJjZXB0b3IgaXMgYSBjb25zdGFudAogIC8vIGV4Y2VwdCBmb3IgYSBgbnVsbGAgcmVjZWl2ZXIuICBUaGlzIGlzIHVzZWQgd2hlbiB0aGUgcmVjZWl2ZXIgY2FuJ3QgYmUKICAvLyBmYWxzeSwgZXhjZXB0IGZvciBgbnVsbGAsIGFsbG93aW5nIHRoZSBnZW5lcmF0aW9uIG9mIGNvZGUgbGlrZQogIC8vCiAgLy8gICAgIChhICYmIEMuSlNBcnJheV9tZXRob2RzKS5nZXQkZmlyc3QoYSkKICAvLwoKICBISW50ZXJjZXB0b3IoSEluc3RydWN0aW9uIHJlY2VpdmVyLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bcmVjZWl2ZXJdLCB0eXBlKSB7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gcmVjZWl2ZXIuc291cmNlSW5mb3JtYXRpb247CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5jbGVhckFsbERlcGVuZGVuY2llcygpOwogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnaW50ZXJjZXB0b3Igb24gJGludGVyY2VwdGVkQ2xhc3Nlcyc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJbnRlcmNlcHRvcih0aGlzKTsKICBISW5zdHJ1Y3Rpb24gZ2V0IHJlY2VpdmVyID0+IGlucHV0c1swXTsKCiAgYm9vbCBnZXQgaXNDb25kaXRpb25hbENvbnN0YW50SW50ZXJjZXB0b3IgPT4gaW5wdXRzLmxlbmd0aCA9PSAyOwogIEhJbnN0cnVjdGlvbiBnZXQgY29uZGl0aW9uYWxDb25zdGFudEludGVyY2VwdG9yID0+IGlucHV0c1sxXTsKICB2b2lkIHNldCBjb25kaXRpb25hbENvbnN0YW50SW50ZXJjZXB0b3IoSENvbnN0YW50IGNvbnN0YW50KSB7CiAgICBhc3NlcnQoIWlzQ29uZGl0aW9uYWxDb25zdGFudEludGVyY2VwdG9yKTsKICAgIGlucHV0cy5hZGQoY29uc3RhbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ludGVyY2VwdG9yKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLklOVEVSQ0VQVE9SX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSEludGVyY2VwdG9yOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW50ZXJjZXB0b3Igb3RoZXIpIHsKICAgIHJldHVybiBpbnRlcmNlcHRlZENsYXNzZXMgPT0gb3RoZXIuaW50ZXJjZXB0ZWRDbGFzc2VzIHx8CiAgICAgICAgKGludGVyY2VwdGVkQ2xhc3Nlcy5sZW5ndGggPT0gb3RoZXIuaW50ZXJjZXB0ZWRDbGFzc2VzLmxlbmd0aCAmJgogICAgICAgICAgICBpbnRlcmNlcHRlZENsYXNzZXMuY29udGFpbnNBbGwob3RoZXIuaW50ZXJjZXB0ZWRDbGFzc2VzKSk7CiAgfQp9CgovLy8gQSAib25lLXNob3QiIGludGVyY2VwdG9yIGlzIGEgY2FsbCB0byBhIHN5bnRoZXRpemVkIG1ldGhvZCB0aGF0Ci8vLyB3aWxsIGZldGNoIHRoZSBpbnRlcmNlcHRvciBvZiBpdHMgZmlyc3QgcGFyYW1ldGVyLCBhbmQgbWFrZSBhIGNhbGwKLy8vIG9uIGEgZ2l2ZW4gc2VsZWN0b3Igd2l0aCB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMuCi8vLwovLy8gSW4gb3JkZXIgdG8gc2hhcmUgdGhlIHNhbWUgb3B0aW1pemF0aW9ucyB3aXRoIHJlZ3VsYXIgaW50ZXJjZXB0b3IKLy8vIGNhbGxzLCB0aGlzIGNsYXNzIGV4dGVuZHMgW0hJbnZva2VEeW5hbWljXSBhbmQgYWxzbyBoYXMgdGhlIG51bGwKLy8vIGNvbnN0YW50IGFzIHRoZSBmaXJzdCBpbnB1dC4KY2xhc3MgSE9uZVNob3RJbnRlcmNlcHRvciBleHRlbmRzIEhJbnZva2VEeW5hbWljIHsKICBAb3ZlcnJpZGUKICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwogIFNldDxDbGFzc0VudGl0eT4gaW50ZXJjZXB0ZWRDbGFzc2VzOwoKICBIT25lU2hvdEludGVyY2VwdG9yKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlLAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLAogICAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdFR5cGUsCiAgICAgIHRoaXMudHlwZUFyZ3VtZW50cywKICAgICAgdGhpcy5pbnRlcmNlcHRlZENsYXNzZXMpCiAgICAgIDogc3VwZXIoc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSwgbnVsbCwgaW5wdXRzLCB0cnVlLCByZXN1bHRUeXBlKSB7CiAgICBhc3NlcnQoaW5wdXRzWzBdIGlzIEhDb25zdGFudCk7CiAgICBhc3NlcnQoaW5wdXRzWzBdLmluc3RydWN0aW9uVHlwZSA9PSBkb21haW4ubnVsbFR5cGUpOwogICAgYXNzZXJ0KHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnQgPT0gdHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogIH0KICBAb3ZlcnJpZGUKICBib29sIGlzQ2FsbE9uSW50ZXJjZXB0b3IoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAnb25lIHNob3QgaW50ZXJjZXB0b3I6IHNlbGVjdG9yPSRzZWxlY3RvciwgbWFzaz0kcmVjZWl2ZXJUeXBlJzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdE9uZVNob3RJbnRlcmNlcHRvcih0aGlzKTsKfQoKLy8vIEFuIFtITGF6eVN0YXRpY10gaXMgYSBzdGF0aWMgdGhhdCBpcyBpbml0aWFsaXplZCBsYXppbHkgYXQgZmlyc3QgcmVhZC4KY2xhc3MgSExhenlTdGF0aWMgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIGZpbmFsIEZpZWxkRW50aXR5IGVsZW1lbnQ7CgogIEhMYXp5U3RhdGljKAogICAgICB0aGlzLmVsZW1lbnQsIEFic3RyYWN0VmFsdWUgdHlwZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bXSwgdHlwZSkgewogICAgLy8gVE9ETyg0OTMxKTogVGhlIGZpcnN0IGFjY2VzcyBoYXMgc2lkZS1lZmZlY3RzLCBidXQgd2UgYWZ0ZXJ3YXJkcyB3ZQogICAgLy8gc2hvdWxkIGJlIGFibGUgdG8gR1ZOLgogICAgc2lkZUVmZmVjdHMuc2V0QWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPblNvbWV0aGluZygpOwogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnbGF6eSBzdGF0aWMgJHtlbGVtZW50Lm5hbWV9JzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdExhenlTdGF0aWModGhpcyk7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IDMwOwogIC8vIFRPRE8oNDkzMSk6IGNhbiB3ZSBkbyBiZXR0ZXIgaGVyZT8KICBAb3ZlcnJpZGUKICBib29sIGlzQ29kZU1vdGlvbkludmFyaWFudCgpID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IHRydWU7Cn0KCmNsYXNzIEhTdGF0aWNTdG9yZSBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgTWVtYmVyRW50aXR5IGVsZW1lbnQ7CiAgSFN0YXRpY1N0b3JlKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluLCB0aGlzLmVsZW1lbnQsIEhJbnN0cnVjdGlvbiB2YWx1ZSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPlt2YWx1ZV0sIGRvbWFpbi5lbXB0eVR5cGUpIHsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLmNsZWFyQWxsRGVwZW5kZW5jaWVzKCk7CiAgICBzaWRlRWZmZWN0cy5zZXRDaGFuZ2VzU3RhdGljUHJvcGVydHkoKTsKICB9CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnc3RhdGljIHN0b3JlICR7ZWxlbWVudC5uYW1lfSc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRTdGF0aWNTdG9yZSh0aGlzKTsKCiAgSEluc3RydWN0aW9uIGdldCB2YWx1ZSA9PiBpbnB1dHMuc2luZ2xlOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uU1RBVElDX1NUT1JFX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhvdGhlcikgPT4gb3RoZXIgaXMgSFN0YXRpY1N0b3JlOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIU3RhdGljU3RvcmUgb3RoZXIpID0+IGVsZW1lbnQgPT0gb3RoZXIuZWxlbWVudDsKICBAb3ZlcnJpZGUKICBib29sIGlzSnNTdGF0ZW1lbnQoKSA9PiB1c2VkQnkuaXNFbXB0eTsKfQoKY2xhc3MgSExpdGVyYWxMaXN0IGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBITGl0ZXJhbExpc3QoTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKGlucHV0cywgdHlwZSk7CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnbGl0ZXJhbCBsaXN0JzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdExpdGVyYWxMaXN0KHRoaXMpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzQWxsb2NhdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gdHJ1ZTsKfQoKLy8vIFRoZSBwcmltaXRpdmUgYXJyYXkgaW5kZXhpbmcgb3BlcmF0aW9uLiBOb3RlIHRoYXQgdGhpcyBpbnN0cnVjdGlvbgovLy8gZG9lcyBub3QgdGhyb3cgYmVjYXVzZSB3ZSBnZW5lcmF0ZSB0aGUgY2hlY2tzIGV4cGxpY2l0bHkuCmNsYXNzIEhJbmRleCBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU2VsZWN0b3Igc2VsZWN0b3I7CiAgSEluZGV4KEhJbnN0cnVjdGlvbiByZWNlaXZlciwgSEluc3RydWN0aW9uIGluZGV4LCB0aGlzLnNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5bcmVjZWl2ZXIsIGluZGV4XSwgdHlwZSkgewogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPbkluZGV4U3RvcmUoKTsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ2luZGV4IG9wZXJhdG9yJzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEluZGV4KHRoaXMpOwoKICBISW5zdHJ1Y3Rpb24gZ2V0IHJlY2VpdmVyID0+IGlucHV0c1swXTsKICBISW5zdHJ1Y3Rpb24gZ2V0IGluZGV4ID0+IGlucHV0c1sxXTsKCiAgLy8gSW1wbGljaXQgZGVwZW5kZW5jeSBvbiBIQm91bmRzQ2hlY2sgb3IgY29uc3RyYWludHMgb24gaW5kZXguCiAgLy8gVE9ETygyNzI3Mik6IE1ha2UgSEluZGV4IGRlcGVuZGVudCBvbiBib3VuZHMgY2hlY2tpbmcuCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNb3ZhYmxlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gZ2V0RGFydFJlY2VpdmVyKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgPT4gcmVjZWl2ZXI7CiAgQG92ZXJyaWRlCiAgYm9vbCBvbmx5VGhyb3dzTlNNKCkgPT4gdHJ1ZTsKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICByZWNlaXZlci5pc051bGwoZG9tYWluKS5pc1BvdGVudGlhbGx5VHJ1ZTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLklOREVYX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhJbmRleDsKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSEluZGV4IG90aGVyKSA9PiB0cnVlOwp9CgovLy8gVGhlIHByaW1pdGl2ZSBhcnJheSBhc3NpZ25tZW50IG9wZXJhdGlvbi4gTm90ZSB0aGF0IHRoaXMgaW5zdHJ1Y3Rpb24KLy8vIGRvZXMgbm90IHRocm93IGJlY2F1c2Ugd2UgZ2VuZXJhdGUgdGhlIGNoZWNrcyBleHBsaWNpdGx5LgpjbGFzcyBISW5kZXhBc3NpZ24gZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFNlbGVjdG9yIHNlbGVjdG9yOwogIEhJbmRleEFzc2lnbihBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwgSEluc3RydWN0aW9uIHJlY2VpdmVyLAogICAgICBISW5zdHJ1Y3Rpb24gaW5kZXgsIEhJbnN0cnVjdGlvbiB2YWx1ZSwgdGhpcy5zZWxlY3RvcikKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltyZWNlaXZlciwgaW5kZXgsIHZhbHVlXSwgZG9tYWluLmVtcHR5VHlwZSkgewogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgIHNpZGVFZmZlY3RzLnNldENoYW5nZXNJbmRleCgpOwogIH0KICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnaW5kZXggYXNzaWduIG9wZXJhdG9yJzsKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEluZGV4QXNzaWduKHRoaXMpOwoKICBISW5zdHJ1Y3Rpb24gZ2V0IHJlY2VpdmVyID0+IGlucHV0c1swXTsKICBISW5zdHJ1Y3Rpb24gZ2V0IGluZGV4ID0+IGlucHV0c1sxXTsKICBISW5zdHJ1Y3Rpb24gZ2V0IHZhbHVlID0+IGlucHV0c1syXTsKCiAgLy8gSW1wbGljaXQgZGVwZW5kZW5jeSBvbiBIQm91bmRzQ2hlY2sgb3IgY29uc3RyYWludHMgb24gaW5kZXguCiAgLy8gVE9ETygyNzI3Mik6IE1ha2UgSEluZGV4IGRlcGVuZGVudCBvbiBib3VuZHMgY2hlY2tpbmcuCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNb3ZhYmxlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gZ2V0RGFydFJlY2VpdmVyKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgPT4gcmVjZWl2ZXI7CiAgQG92ZXJyaWRlCiAgYm9vbCBvbmx5VGhyb3dzTlNNKCkgPT4gdHJ1ZTsKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PgogICAgICByZWNlaXZlci5pc051bGwoZG9tYWluKS5pc1BvdGVudGlhbGx5VHJ1ZTsKfQoKLy8vIElzLXRlc3QgdXNpbmcgbGVnYWN5IGNvbnN0cnVjdG9yIGJhc2VkIHR5cCByZXByZXNlbnRhdGlvbi4KY2xhc3MgSElzIGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICAvLy8gQSBjaGVjayBhZ2FpbnN0IGEgcmF3IHR5cGU6ICdvIGlzIGludCcsICdvIGlzIEEnLgogIHN0YXRpYyBjb25zdCBpbnQgUkFXX0NIRUNLID0gMDsKCiAgLy8vIEEgY2hlY2sgYWdhaW5zdCBhIHR5cGUgd2l0aCB0eXBlIGFyZ3VtZW50czogJ28gaXMgTGlzdDxpbnQ+JywgJ28gaXMgQzxUPicuCiAgc3RhdGljIGNvbnN0IGludCBDT01QT1VORF9DSEVDSyA9IDE7CgogIC8vLyBBIGNoZWNrIGFnYWluc3QgYSBzaW5nbGUgdHlwZSB2YXJpYWJsZTogJ28gaXMgVCcuCiAgc3RhdGljIGNvbnN0IGludCBWQVJJQUJMRV9DSEVDSyA9IDI7CgogIGZpbmFsIERhcnRUeXBlIHR5cGVFeHByZXNzaW9uOwogIGZpbmFsIGludCBraW5kOwogIGZpbmFsIGJvb2wgdXNlSW5zdGFuY2VPZjsKCiAgSElzLmRpcmVjdChEYXJ0VHlwZSB0eXBlRXhwcmVzc2lvbiwgSEluc3RydWN0aW9uIGV4cHJlc3Npb24sCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pCiAgICAgIDogdGhpcy5pbnRlcm5hbCgKICAgICAgICAgICAgdHlwZUV4cHJlc3Npb24sIFtleHByZXNzaW9uXSwgUkFXX0NIRUNLLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbik7CgogIC8vIFByZS12ZXJpZmllZCB0aGF0IHRoZSBjaGVjayBjYW4gYmUgZG9uZSB1c2luZyAnaW5zdGFuY2VvZicuCiAgSElzLmluc3RhbmNlT2YoRGFydFR5cGUgdHlwZUV4cHJlc3Npb24sIEhJbnN0cnVjdGlvbiBleHByZXNzaW9uLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IHRoaXMuaW50ZXJuYWwoCiAgICAgICAgICAgIHR5cGVFeHByZXNzaW9uLCBbZXhwcmVzc2lvbl0sIFJBV19DSEVDSywgdHlwZSwgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgICAgIHVzZUluc3RhbmNlT2Y6IHRydWUpOwoKICBmYWN0b3J5IEhJcy5yYXcoCiAgICAgIERhcnRUeXBlIHR5cGVFeHByZXNzaW9uLAogICAgICBISW5zdHJ1Y3Rpb24gZXhwcmVzc2lvbiwKICAgICAgSEludGVyY2VwdG9yIGludGVyY2VwdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICAvLyBUT0RPKHNpZ211bmQpOiByZS1hZGQgYCYmIHR5cGVFeHByZXNzaW9uLnRyZWF0QXNSYXdgIG9yIHNvbWV0aGluZwogICAgLy8gZXF1aXZhbGVudCAod2hpY2ggc3RhcnRlZCBmYWlsaW5nIG9uY2Ugd2UgYWxsb3dlZCB0eXBlRXhwcmVzc2lvbnMgdGhhdAogICAgLy8gY29udGFpbiB0eXBlIHBhcmFtZXRlcnMgbWF0Y2hpbmcgdGhlIG9yaWdpbmFsIGJvdW5kcyBvZiB0aGUgdHlwZSkuCiAgICBhc3NlcnQoKHR5cGVFeHByZXNzaW9uLmlzRnVuY3Rpb25UeXBlIHx8IHR5cGVFeHByZXNzaW9uLmlzSW50ZXJmYWNlVHlwZSksCiAgICAgICAgIlVuZXhwZWN0ZWQgcmF3IGlzLXRlc3QgdHlwZTogJHR5cGVFeHByZXNzaW9uIik7CiAgICByZXR1cm4gbmV3IEhJcy5pbnRlcm5hbCh0eXBlRXhwcmVzc2lvbiwgW2V4cHJlc3Npb24sIGludGVyY2VwdG9yXSwKICAgICAgICBSQVdfQ0hFQ0ssIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIEhJcy5jb21wb3VuZCgKICAgICAgRGFydFR5cGUgdHlwZUV4cHJlc3Npb24sCiAgICAgIEhJbnN0cnVjdGlvbiBleHByZXNzaW9uLAogICAgICBISW5zdHJ1Y3Rpb24gY2FsbCwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiB0aGlzLmludGVybmFsKHR5cGVFeHByZXNzaW9uLCBbZXhwcmVzc2lvbiwgY2FsbF0sIENPTVBPVU5EX0NIRUNLLCB0eXBlLAogICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CgogIEhJcy52YXJpYWJsZSgKICAgICAgRGFydFR5cGUgdHlwZUV4cHJlc3Npb24sCiAgICAgIEhJbnN0cnVjdGlvbiBleHByZXNzaW9uLAogICAgICBISW5zdHJ1Y3Rpb24gY2FsbCwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikKICAgICAgOiB0aGlzLmludGVybmFsKHR5cGVFeHByZXNzaW9uLCBbZXhwcmVzc2lvbiwgY2FsbF0sIFZBUklBQkxFX0NIRUNLLCB0eXBlLAogICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CgogIEhJcy5pbnRlcm5hbCh0aGlzLnR5cGVFeHByZXNzaW9uLCBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLCB0aGlzLmtpbmQsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIHRoaXMudXNlSW5zdGFuY2VPZjogZmFsc2V9KQogICAgICA6IHN1cGVyKGlucHV0cywgdHlwZSkgewogICAgYXNzZXJ0KGtpbmQgPj0gUkFXX0NIRUNLICYmIGtpbmQgPD0gVkFSSUFCTEVfQ0hFQ0spOwogICAgc2V0VXNlR3ZuKCk7CiAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgfQoKICBISW5zdHJ1Y3Rpb24gZ2V0IGV4cHJlc3Npb24gPT4gaW5wdXRzWzBdOwoKICBISW5zdHJ1Y3Rpb24gZ2V0IGludGVyY2VwdG9yIHsKICAgIGFzc2VydChraW5kID09IFJBV19DSEVDSyk7CiAgICByZXR1cm4gaW5wdXRzLmxlbmd0aCA+IDEgPyBpbnB1dHNbMV0gOiBudWxsOwogIH0KCiAgSEluc3RydWN0aW9uIGdldCBjaGVja0NhbGwgewogICAgYXNzZXJ0KGtpbmQgPT0gVkFSSUFCTEVfQ0hFQ0sgfHwga2luZCA9PSBDT01QT1VORF9DSEVDSyk7CiAgICByZXR1cm4gaW5wdXRzWzFdOwogIH0KCiAgYm9vbCBnZXQgaXNSYXdDaGVjayA9PiBraW5kID09IFJBV19DSEVDSzsKICBib29sIGdldCBpc1ZhcmlhYmxlQ2hlY2sgPT4ga2luZCA9PSBWQVJJQUJMRV9DSEVDSzsKICBib29sIGdldCBpc0NvbXBvdW5kQ2hlY2sgPT4ga2luZCA9PSBDT01QT1VORF9DSEVDSzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJcyh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAiJGV4cHJlc3Npb24gaXMgJHR5cGVFeHByZXNzaW9uIjsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLklTX1RZUEVDT0RFOwoKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBISXM7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISXMgb3RoZXIpIHsKICAgIHJldHVybiB0eXBlRXhwcmVzc2lvbiA9PSBvdGhlci50eXBlRXhwcmVzc2lvbiAmJiBraW5kID09IG90aGVyLmtpbmQ7CiAgfQp9CgovLy8gSElzVmlhSW50ZXJjZXB0b3IgaXMgYSBsYXRlLXN0YWdlIGluc3RydWN0aW9uIGZvciBhIHR5cGUgdGVzdCB0aGF0IGNhbiBiZQovLy8gZG9uZSBlbnRpcmVseSBvbiBhbiBpbnRlcmNlcHRvci4gIEl0IGlzIG5vdCBhIEhDaGVjayBiZWNhdXNlIHRoZSBjaGVja2VkCi8vLyBpbnB1dCBpcyBub3Qgb25lIG9mIHRoZSBpbnB1dHMuCmNsYXNzIEhJc1ZpYUludGVyY2VwdG9yIGV4dGVuZHMgSExhdGVJbnN0cnVjdGlvbiB7CiAgZmluYWwgRGFydFR5cGUgdHlwZUV4cHJlc3Npb247CiAgSElzVmlhSW50ZXJjZXB0b3IoCiAgICAgIHRoaXMudHlwZUV4cHJlc3Npb24sIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRvciwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W2ludGVyY2VwdG9yXSwgdHlwZSkgewogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICBISW5zdHJ1Y3Rpb24gZ2V0IGludGVyY2VwdG9yID0+IGlucHV0c1swXTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRJc1ZpYUludGVyY2VwdG9yKHRoaXMpOwogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gIiRpbnRlcmNlcHRvciBpcyAkdHlwZUV4cHJlc3Npb24iOwogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5JU19WSUFfSU5URVJDRVBUT1JfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSElzVmlhSW50ZXJjZXB0b3I7CiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhJcyBvdGhlcikgewogICAgcmV0dXJuIHR5cGVFeHByZXNzaW9uID09IG90aGVyLnR5cGVFeHByZXNzaW9uOwogIH0KfQoKLy8vIEhMYXRlVmFsdWUgaXMgYSBsYXRlLXN0YWdlIGluc3RydWN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gZm9yY2UgYSB2YWx1ZQovLy8gaW50byBhIHRlbXBvcmFyeS4KLy8vCi8vLyBITGF0ZVZhbHVlIGlzIHVzZWZ1bCBmb3IgbmFtaW5nIHZhbHVlcyB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBnZW5lcmF0ZWQgYXQKLy8vIHVzZSBzaXRlLCBmb3IgZXhhbXBsZSwgaWYgJ3RoaXMnIGlzIHVzZWQgbWFueSB0aW1lcywgcmVwbGFjaW5nIHVzZXMgb2YKLy8vICd0aGlzJyB3aXRoIEhMYXRlVmFsdWUoSFRoaXMpIHdpbGwgaGF2ZSB0aGUgZWZmZWN0IG9mIGNvcHlpbmcgJ3RoaXMnIHRvIGEKLy8vIHRlbXBvcmFyeSB3aWxsIHJlZHVjZSB0aGUgc2l6ZSBvZiBtaW5pZmllZCBjb2RlLgpjbGFzcyBITGF0ZVZhbHVlIGV4dGVuZHMgSExhdGVJbnN0cnVjdGlvbiB7CiAgSExhdGVWYWx1ZShISW5zdHJ1Y3Rpb24gdGFyZ2V0KSA6IHN1cGVyKFt0YXJnZXRdLCB0YXJnZXQuaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgSEluc3RydWN0aW9uIGdldCB0YXJnZXQgPT4gaW5wdXRzLnNpbmdsZTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRMYXRlVmFsdWUodGhpcyk7CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnSExhdGVWYWx1ZSgkdGFyZ2V0KSc7Cn0KCi8vLyBUeXBlIGNoZWNrIG9yIGNhc3QgdXNpbmcgbGVnYWN5IGNvbnN0cnVjdG9yLWJhc2VkIHR5cGUgcmVwcmVzZW50YXRpb24uCmNsYXNzIEhUeXBlQ29udmVyc2lvbiBleHRlbmRzIEhDaGVjayB7CiAgLy8gVmFsdWVzIGZvciBba2luZF0uCiAgc3RhdGljIGNvbnN0IGludCBUWVBFX0NIRUNLID0gMDsKICBzdGF0aWMgY29uc3QgaW50IENBU1RfQ0hFQ0sgPSAxOwoKICBmaW5hbCBEYXJ0VHlwZSB0eXBlRXhwcmVzc2lvbjsKICBmaW5hbCBpbnQga2luZDsKCiAgQWJzdHJhY3RWYWx1ZSBjaGVja2VkVHlwZTsgLy8gTm90IGZpbmFsIGJlY2F1c2Ugd2UgcmVmaW5lIGl0LgogIEFic3RyYWN0VmFsdWUKICAgICAgaW5wdXRUeXBlOyAvLyBIb2xkcyBpbnB1dCB0eXBlIGZvciBjb2RlZ2VuIGFmdGVyIEhUeXBlS25vd24gcmVtb3ZhbC4KCiAgSFR5cGVDb252ZXJzaW9uKHRoaXMudHlwZUV4cHJlc3Npb24sIHRoaXMua2luZCwgQWJzdHJhY3RWYWx1ZSB0eXBlLAogICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKQogICAgICA6IGNoZWNrZWRUeXBlID0gdHlwZSwKICAgICAgICBzdXBlcig8SEluc3RydWN0aW9uPltpbnB1dF0sIHR5cGUpIHsKICAgIGFzc2VydCh0eXBlRXhwcmVzc2lvbiA9PSBudWxsIHx8ICF0eXBlRXhwcmVzc2lvbi5pc1R5cGVkZWYpOwogICAgdGhpcy5zb3VyY2VFbGVtZW50ID0gaW5wdXQuc291cmNlRWxlbWVudDsKICAgIHRoaXMuc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9CgogIEhUeXBlQ29udmVyc2lvbi53aXRoVHlwZVJlcHJlc2VudGF0aW9uKHRoaXMudHlwZUV4cHJlc3Npb24sIHRoaXMua2luZCwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlLCBISW5zdHJ1Y3Rpb24gaW5wdXQsIEhJbnN0cnVjdGlvbiB0eXBlUmVwcmVzZW50YXRpb24pCiAgICAgIDogY2hlY2tlZFR5cGUgPSB0eXBlLAogICAgICAgIHN1cGVyKDxISW5zdHJ1Y3Rpb24+W2lucHV0LCB0eXBlUmVwcmVzZW50YXRpb25dLCB0eXBlKSB7CiAgICBhc3NlcnQoIXR5cGVFeHByZXNzaW9uLmlzVHlwZWRlZik7CiAgICBzb3VyY2VFbGVtZW50ID0gaW5wdXQuc291cmNlRWxlbWVudDsKICB9CgogIGJvb2wgZ2V0IGhhc1R5cGVSZXByZXNlbnRhdGlvbiB7CiAgICByZXR1cm4gdHlwZUV4cHJlc3Npb24gIT0gbnVsbCAmJgogICAgICAgIHR5cGVFeHByZXNzaW9uLmlzSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIGlucHV0cy5sZW5ndGggPiAxOwogIH0KCiAgSEluc3RydWN0aW9uIGdldCB0eXBlUmVwcmVzZW50YXRpb24gPT4gaW5wdXRzWzFdOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gZ2V0IGNoZWNrZWRJbnB1dCA9PiBzdXBlci5jaGVja2VkSW5wdXQ7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBjb252ZXJ0VHlwZShKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIERhcnRUeXBlIHR5cGUsIGludCBraW5kKSB7CiAgICBpZiAodHlwZUV4cHJlc3Npb24gPT0gdHlwZSkgewogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb252ZXJ0VHlwZShjbG9zZWRXb3JsZCwgdHlwZSwga2luZCk7CiAgfQoKICBib29sIGdldCBpc1R5cGVDaGVjayA9PiBraW5kID09IFRZUEVfQ0hFQ0s7CiAgYm9vbCBnZXQgaXNDYXN0Q2hlY2sgPT4ga2luZCA9PSBDQVNUX0NIRUNLOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFR5cGVDb252ZXJzaW9uKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNTdGF0ZW1lbnQoKSA9PiBpc0NvbnRyb2xGbG93KCk7CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0NvbnRyb2xGbG93KCkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5UWVBFX0NPTlZFUlNJT05fVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSFR5cGVDb252ZXJzaW9uOwogIEBvdmVycmlkZQogIGJvb2wgaXNDb2RlTW90aW9uSW52YXJpYW50KCkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIVHlwZUNvbnZlcnNpb24gb3RoZXIpIHsKICAgIHJldHVybiBraW5kID09IG90aGVyLmtpbmQgJiYKICAgICAgICB0eXBlRXhwcmVzc2lvbiA9PSBvdGhlci50eXBlRXhwcmVzc2lvbiAmJgogICAgICAgIGNoZWNrZWRUeXBlID09IG90aGVyLmNoZWNrZWRUeXBlOwogIH0KCiAgYm9vbCBpc1JlZHVuZGFudChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CiAgICBEYXJ0VHlwZSB0eXBlID0gdHlwZUV4cHJlc3Npb247CiAgICBpZiAodHlwZSAhPSBudWxsKSB7CiAgICAgIGlmICh0eXBlLmlzVHlwZVZhcmlhYmxlKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmICh0eXBlLmlzRnV0dXJlT3IpIHsKICAgICAgICAvLyBgbnVsbGAgYWx3YXlzIHBhc3NlcyB0eXBlIGNvbnZlcnNpb24uCiAgICAgICAgaWYgKGNoZWNrZWRJbnB1dC5pc051bGwoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE9wdGltaXplIEZ1dHVyZU9yIHR5cGUgY29udmVyc2lvbnMuCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmICghdHlwZS50cmVhdEFzUmF3KSB7CiAgICAgICAgLy8gYG51bGxgIGFsd2F5cyBwYXNzZXMgdHlwZSBjb252ZXJzaW9uLgogICAgICAgIGlmIChjaGVja2VkSW5wdXQuaXNOdWxsKGFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKHR5cGUuaXNGdW5jdGlvblR5cGUpIHsKICAgICAgICAvLyBgbnVsbGAgYWx3YXlzIHBhc3NlcyB0eXBlIGNvbnZlcnNpb24uCiAgICAgICAgaWYgKGNoZWNrZWRJbnB1dC5pc051bGwoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE9wdGltaXplIGZ1bmN0aW9uIHR5cGUgY29udmVyc2lvbnMuCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICAvLyBUeXBlIGlzIHJlZmluZWQgZnJvbSBgZHluYW1pY2AsIHNvIGl0IG1pZ2h0IGJlY29tZSBub24tcmVkdW5kYW50LgogICAgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uY29udGFpbnNBbGwoY2hlY2tlZFR5cGUpLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIEFic3RyYWN0VmFsdWUgaW5wdXRUeXBlID0gY2hlY2tlZElucHV0Lmluc3RydWN0aW9uVHlwZTsKICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmlzSW4oaW5wdXRUeXBlLCBjaGVja2VkVHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdIVHlwZUNvbnZlcnNpb24odHlwZT0kdHlwZUV4cHJlc3Npb24sIGtpbmQ9JGtpbmQsICcKICAgICAgJyR7aGFzVHlwZVJlcHJlc2VudGF0aW9uID8gJ3JlcHJlc2VudGF0aW9uPSR0eXBlUmVwcmVzZW50YXRpb24sICcgOiAnJ30nCiAgICAgICdjaGVja2VkSW5wdXQ9JGNoZWNrZWRJbnB1dCknOwp9CgovLy8gQ2hlY2sgZm9yIHJlY2VpdmVyIG9yIGFyZ3VtZW50IHR5cGUgd2hlbiBsb3dlcmluZyBvcGVyYXRpb24gdG8gYSBwcmltaXRpdmUsCi8vLyBlLmcuIGxvd2VyaW5nIGArYCB0byBbSEFkZF0uCi8vLwovLy8gQWZ0ZXIgTk5CRCwgYGEgKyBiYCB3aWxsIHJlcXVpcmUgYGFgIGFuZCBgYmAgYXJlIG5vbi1udWxsYWJsZSBhbmQgdGhlc2UKLy8vIGNoZWNrcyB3aWxsIGJlY29tZSBleHBsaWNpdCBpbiB0aGUgc291cmNlIChlLmcuIGBhISArIGIhYCkuIEF0IHRoYXQgdGltZSwKLy8vIHRoaXMgY2hlY2sgc2hvdWxkIGJlIHJlbW92ZWQuICBJZiBuZWVkZWQsIHRoZSBgIWAgY2hlY2sgY2FuIGJlIG9wdGltaXplZAovLy8gZ2l2ZSB0aGUgc2FtZSBzaWduYWxzIHRvIHRoZSBKYXZhU2NyaXB0IFZNLgpjbGFzcyBIUHJpbWl0aXZlQ2hlY2sgZXh0ZW5kcyBIQ2hlY2sgewogIC8vIFZhbHVlcyBmb3IgW2tpbmRdLgogIHN0YXRpYyBjb25zdCBpbnQgQVJHVU1FTlRfVFlQRV9DSEVDSyA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBSRUNFSVZFUl9UWVBFX0NIRUNLID0gMzsKCiAgZmluYWwgRGFydFR5cGUgdHlwZUV4cHJlc3Npb247CiAgZmluYWwgaW50IGtpbmQ7CgogIC8vIFtyZWNlaXZlclR5cGVDaGVja1NlbGVjdG9yXSBpcyB0aGUgc2VsZWN0b3IgdXNlZCBmb3IgYSByZWNlaXZlciB0eXBlIGNoZWNrCiAgLy8gb24gb3Blbi1jb2RlZCBvcGVyYXRvcnMsIGUuZy4gdGhlIG5vdC1udWxsIGNoZWNrIG9uIGB4YCBpbiBgeCArIDFgIHdvdWxkIGJlCiAgLy8gY29tcGlsZWQgdG8gdGhlIGZvbGxvd2luZywgZm9yIHdoaWNoIHdlIG5lZWQgdGhlIHNlbGVjdG9yIGAkYWRkYC4KICAvLwogIC8vICAgICBpZiAodHlwZW9mIHggIT0gIm51bWJlciIpIHguJGFkZCgpOwogIC8vCiAgZmluYWwgU2VsZWN0b3IgcmVjZWl2ZXJUeXBlQ2hlY2tTZWxlY3RvcjsKCiAgQWJzdHJhY3RWYWx1ZSBjaGVja2VkVHlwZTsgLy8gTm90IGZpbmFsIGJlY2F1c2Ugd2UgcmVmaW5lIGl0LgogIEFic3RyYWN0VmFsdWUKICAgICAgaW5wdXRUeXBlOyAvLyBIb2xkcyBpbnB1dCB0eXBlIGZvciBjb2RlZ2VuIGFmdGVyIEhUeXBlS25vd24gcmVtb3ZhbC4KCiAgSFByaW1pdGl2ZUNoZWNrKHRoaXMudHlwZUV4cHJlc3Npb24sIHRoaXMua2luZCwgQWJzdHJhY3RWYWx1ZSB0eXBlLAogICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICB7dGhpcy5yZWNlaXZlclR5cGVDaGVja1NlbGVjdG9yfSkKICAgICAgOiBjaGVja2VkVHlwZSA9IHR5cGUsCiAgICAgICAgc3VwZXIoPEhJbnN0cnVjdGlvbj5baW5wdXRdLCB0eXBlKSB7CiAgICBhc3NlcnQoaXNSZWNlaXZlclR5cGVDaGVjayA9PSAocmVjZWl2ZXJUeXBlQ2hlY2tTZWxlY3RvciAhPSBudWxsKSk7CiAgICB0aGlzLnNvdXJjZUVsZW1lbnQgPSBpbnB1dC5zb3VyY2VFbGVtZW50OwogICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIGNvbnZlcnRUeXBlKEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgRGFydFR5cGUgdHlwZSwgaW50IGtpbmQpIHsKICAgIGlmICh0eXBlRXhwcmVzc2lvbiA9PSB0eXBlKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbnZlcnRUeXBlKGNsb3NlZFdvcmxkLCB0eXBlLCBraW5kKTsKICB9CgogIGJvb2wgZ2V0IGlzQXJndW1lbnRUeXBlQ2hlY2sgPT4ga2luZCA9PSBBUkdVTUVOVF9UWVBFX0NIRUNLOwogIGJvb2wgZ2V0IGlzUmVjZWl2ZXJUeXBlQ2hlY2sgPT4ga2luZCA9PSBSRUNFSVZFUl9UWVBFX0NIRUNLOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFByaW1pdGl2ZUNoZWNrKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNTdGF0ZW1lbnQoKSA9PiB0cnVlOwogIEBvdmVycmlkZQogIGJvb2wgaXNDb250cm9sRmxvdygpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5QUklNSVRJVkVfQ0hFQ0tfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSFByaW1pdGl2ZUNoZWNrOwogIEBvdmVycmlkZQogIGJvb2wgaXNDb2RlTW90aW9uSW52YXJpYW50KCkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIUHJpbWl0aXZlQ2hlY2sgb3RoZXIpIHsKICAgIHJldHVybiBraW5kID09IG90aGVyLmtpbmQgJiYKICAgICAgICBjaGVja2VkVHlwZSA9PSBvdGhlci5jaGVja2VkVHlwZSAmJgogICAgICAgIHJlY2VpdmVyVHlwZUNoZWNrU2VsZWN0b3IgPT0gb3RoZXIucmVjZWl2ZXJUeXBlQ2hlY2tTZWxlY3RvcjsKICB9CgogIGJvb2wgaXNSZWR1bmRhbnQoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgLy8gVHlwZSBpcyByZWZpbmVkIGZyb20gYGR5bmFtaWNgLCBzbyBpdCBtaWdodCBiZWNvbWUgbm9uLXJlZHVuZGFudC4KICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmNvbnRhaW5zQWxsKGNoZWNrZWRUeXBlKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBBYnN0cmFjdFZhbHVlIGlucHV0VHlwZSA9IGNoZWNrZWRJbnB1dC5pbnN0cnVjdGlvblR5cGU7CiAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0luKGlucHV0VHlwZSwgY2hlY2tlZFR5cGUpLmlzRGVmaW5pdGVseVRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSFByaW1pdGl2ZUNoZWNrKGNoZWNrZWRUeXBlPSRjaGVja2VkVHlwZSwga2luZD0ka2luZCwgJwogICAgICAnY2hlY2tlZElucHV0PSRjaGVja2VkSW5wdXQpJzsKfQoKLy8vIEEgY2hlY2sgdGhhdCB0aGUgaW5wdXQgdG8gYSBjb25kaXRpb24gKGlmLCA/Oiwgd2hpbGUsIGV0YykgaXMgbm9uLW51bGwuIFRoZQovLy8gZnJvbnQtZW5kIGdlbmVyYXRlcyAnYXMgYm9vbCcgY2hlY2tzLCBidXQgdW50aWwgdGhlIHRyYW5zaXRpb24gdG8gTk5CRCBpcwovLy8gY29tcGxldGUsIHRoaXMgYWxsb3dzIGBudWxsYCB0byBiZSBwYXNzZWQgdG8gdGhlIGNvbmRpdGlvbi4KLy8vCi8vIFRPRE8oc3JhKTogT25jZSBOTkRCIGlzIGZhciBlbm91Z2ggYWxvbmcgdGhhdCB0aGUgZnJvbnQtZW5kIGNhbiBnZW5lcmF0ZSBgYXMKLy8gYm9vbCFgIGNoZWNrcyBhbmQgdGhlIGJhY2tlbmQgY2hlY2tzIHRoZW0gY29ycmVjdGx5LCB0aGlzIGluc3RydWN0aW9uIHdpbGwKLy8gYmVjb21lIHVubmVjZXNzYXJ5IGFuZCBzaG91bGQgYmUgcmVtb3ZlZC4KY2xhc3MgSEJvb2xDb252ZXJzaW9uIGV4dGVuZHMgSENoZWNrIHsKICBIQm9vbENvbnZlcnNpb24oSEluc3RydWN0aW9uIGlucHV0LCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5baW5wdXRdLCB0eXBlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzU3RhdGVtZW50KCkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgaXNDb2RlTW90aW9uSW52YXJpYW50KCkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0Qm9vbENvbnZlcnNpb24odGhpcyk7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5CT09MX0NPTlZFUlNJT05fVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSEJvb2xDb252ZXJzaW9uOwogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIQm9vbENvbnZlcnNpb24gb3RoZXIpID0+IHRydWU7CgogIGJvb2wgaXNSZWR1bmRhbnQoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgQWJzdHJhY3RWYWx1ZSBpbnB1dFR5cGUgPSBjaGVja2VkSW5wdXQuaW5zdHJ1Y3Rpb25UeXBlOwogICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuaXNJbihpbnB1dFR5cGUsIGluc3RydWN0aW9uVHlwZSkKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIHRvU3RyaW5nKCkgPT4gJ0hCb29sQ29udmVyc2lvbigkY2hlY2tlZElucHV0KSc7Cn0KCi8vLyBUaGUgW0hUeXBlS25vd25dIGluc3RydWN0aW9uIG1hcmtzIGEgdmFsdWUgd2l0aCBhIHJlZmluZWQgdHlwZS4KY2xhc3MgSFR5cGVLbm93biBleHRlbmRzIEhDaGVjayB7CiAgQWJzdHJhY3RWYWx1ZSBrbm93blR5cGU7CiAgZmluYWwgYm9vbCBfaXNNb3ZhYmxlOwoKICBIVHlwZUtub3duLnBpbm5lZChBYnN0cmFjdFZhbHVlIGtub3duVHlwZSwgSEluc3RydWN0aW9uIGlucHV0KQogICAgICA6IHRoaXMua25vd25UeXBlID0ga25vd25UeXBlLAogICAgICAgIHRoaXMuX2lzTW92YWJsZSA9IGZhbHNlLAogICAgICAgIHN1cGVyKDxISW5zdHJ1Y3Rpb24+W2lucHV0XSwga25vd25UeXBlKTsKCiAgSFR5cGVLbm93bi53aXRuZXNzZWQoCiAgICAgIEFic3RyYWN0VmFsdWUga25vd25UeXBlLCBISW5zdHJ1Y3Rpb24gaW5wdXQsIEhJbnN0cnVjdGlvbiB3aXRuZXNzKQogICAgICA6IHRoaXMua25vd25UeXBlID0ga25vd25UeXBlLAogICAgICAgIHRoaXMuX2lzTW92YWJsZSA9IHRydWUsCiAgICAgICAgc3VwZXIoPEhJbnN0cnVjdGlvbj5baW5wdXQsIHdpdG5lc3NdLCBrbm93blR5cGUpOwoKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICdUeXBlS25vd24gJGtub3duVHlwZSc7CiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUeXBlS25vd24odGhpcyk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc1N0YXRlbWVudCgpID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgaXNDb250cm9sRmxvdygpID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IGZhbHNlOwoKICBib29sIGdldCBpc1Bpbm5lZCA9PiBpbnB1dHMubGVuZ3RoID09IDE7CgogIEhJbnN0cnVjdGlvbiBnZXQgd2l0bmVzcyA9PiBpbnB1dHMubGVuZ3RoID09IDIgPyBpbnB1dHNbMV0gOiBudWxsOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uVFlQRV9LTk9XTl9UWVBFQ09ERTsKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBIVHlwZUtub3duOwogIEBvdmVycmlkZQogIGJvb2wgaXNDb2RlTW90aW9uSW52YXJpYW50KCkgPT4gdHJ1ZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc01vdmFibGUgPT4gX2lzTW92YWJsZSAmJiB1c2VHdm4oKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhUeXBlS25vd24gb3RoZXIpIHsKICAgIHJldHVybiBrbm93blR5cGUgPT0gb3RoZXIua25vd25UeXBlICYmCiAgICAgICAgaW5zdHJ1Y3Rpb25UeXBlID09IG90aGVyLmluc3RydWN0aW9uVHlwZTsKICB9CgogIGJvb2wgaXNSZWR1bmRhbnQoSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uY29udGFpbnNBbGwoa25vd25UeXBlKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBBYnN0cmFjdFZhbHVlIGlucHV0VHlwZSA9IGNoZWNrZWRJbnB1dC5pbnN0cnVjdGlvblR5cGU7CiAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0luKGlucHV0VHlwZSwga25vd25UeXBlKS5pc0RlZmluaXRlbHlUcnVlOwogIH0KfQoKY2xhc3MgSFJhbmdlQ29udmVyc2lvbiBleHRlbmRzIEhDaGVjayB7CiAgSFJhbmdlQ29udmVyc2lvbihISW5zdHJ1Y3Rpb24gaW5wdXQsIHR5cGUpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5baW5wdXRdLCB0eXBlKSB7CiAgICBzb3VyY2VFbGVtZW50ID0gaW5wdXQuc291cmNlRWxlbWVudDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTW92YWJsZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRSYW5nZUNvbnZlcnNpb24odGhpcyk7Cn0KCmNsYXNzIEhTdHJpbmdDb25jYXQgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhTdHJpbmdDb25jYXQoSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCwgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKDxISW5zdHJ1Y3Rpb24+W2xlZnQsIHJpZ2h0XSwgdHlwZSkgewogICAgLy8gVE9ETyhzcmEpOiBVbnRpbCBJc3N1ZSA5MjkzIGlzIGZpeGVkLCB0aGlzIGZhbHNlIGRlcGVuZGVuY3kga2VlcHMgdGhlCiAgICAvLyBjb25jYXRzIGJ1bmNoZWQgd2l0aCBzdHJpbmdpZmllZCBpbnB1dHMgZm9yIG11Y2ggYmV0dGVyIGxvb2tpbmcgY29kZSB3aXRoCiAgICAvLyBmZXdlciB0ZW1wcy4KICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPblNvbWV0aGluZygpOwogIH0KCiAgSEluc3RydWN0aW9uIGdldCBsZWZ0ID0+IGlucHV0c1swXTsKICBISW5zdHJ1Y3Rpb24gZ2V0IHJpZ2h0ID0+IGlucHV0c1sxXTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRTdHJpbmdDb25jYXQodGhpcyk7CiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAic3RyaW5nIGNvbmNhdCI7Cn0KCi8vLyBUaGUgcGFydCBvZiBzdHJpbmcgaW50ZXJwb2xhdGlvbiB3aGljaCBjb252ZXJ0cyBhbmQgaW50ZXJwb2xhdGVkIGV4cHJlc3Npb24KLy8vIGludG8gYSBTdHJpbmcgdmFsdWUuCmNsYXNzIEhTdHJpbmdpZnkgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhTdHJpbmdpZnkoSEluc3RydWN0aW9uIGlucHV0LCBBYnN0cmFjdFZhbHVlIHJlc3VsdFR5cGUpCiAgICAgIDogc3VwZXIoPEhJbnN0cnVjdGlvbj5baW5wdXRdLCByZXN1bHRUeXBlKSB7CiAgICBzaWRlRWZmZWN0cy5zZXRBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uU29tZXRoaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFN0cmluZ2lmeSh0aGlzKTsKICBAb3ZlcnJpZGUKICB0b1N0cmluZygpID0+ICJzdHJpbmdpZnkiOwp9CgovLy8gTm9uLWJsb2NrLWJhc2VkIChha2EuIHRyYWRpdGlvbmFsKSBsb29wIGluZm9ybWF0aW9uLgpjbGFzcyBITG9vcEluZm9ybWF0aW9uIHsKICBmaW5hbCBIQmFzaWNCbG9jayBoZWFkZXI7CiAgZmluYWwgTGlzdDxIQmFzaWNCbG9jaz4gYmxvY2tzOwogIGZpbmFsIExpc3Q8SEJhc2ljQmxvY2s+IGJhY2tFZGdlczsKICBmaW5hbCBMaXN0PExhYmVsRGVmaW5pdGlvbj4gbGFiZWxzOwogIGZpbmFsIEp1bXBUYXJnZXQgdGFyZ2V0OwoKICAvLy8gQ29ycmVzcG9uZGluZyBibG9jayBpbmZvcm1hdGlvbiBmb3IgdGhlIGxvb3AuCiAgSExvb3BCbG9ja0luZm9ybWF0aW9uIGxvb3BCbG9ja0luZm9ybWF0aW9uOwoKICBITG9vcEluZm9ybWF0aW9uKHRoaXMuaGVhZGVyLCB0aGlzLnRhcmdldCwgdGhpcy5sYWJlbHMpCiAgICAgIDogYmxvY2tzID0gbmV3IExpc3Q8SEJhc2ljQmxvY2s+KCksCiAgICAgICAgYmFja0VkZ2VzID0gbmV3IExpc3Q8SEJhc2ljQmxvY2s+KCk7CgogIHZvaWQgYWRkQmFja0VkZ2UoSEJhc2ljQmxvY2sgcHJlZGVjZXNzb3IpIHsKICAgIGJhY2tFZGdlcy5hZGQocHJlZGVjZXNzb3IpOwogICAgTGlzdDxIQmFzaWNCbG9jaz4gd29ya1F1ZXVlID0gPEhCYXNpY0Jsb2NrPltwcmVkZWNlc3Nvcl07CiAgICBkbyB7CiAgICAgIEhCYXNpY0Jsb2NrIGN1cnJlbnQgPSB3b3JrUXVldWUucmVtb3ZlTGFzdCgpOwogICAgICBhZGRCbG9jayhjdXJyZW50LCB3b3JrUXVldWUpOwogICAgfSB3aGlsZSAoIXdvcmtRdWV1ZS5pc0VtcHR5KTsKICB9CgogIC8vIEFkZHMgYSBibG9jayBhbmQgdHJhbnNpdGl2ZWx5IGFsbCBpdHMgcHJlZGVjZXNzb3JzIGluIHRoZSBsb29wIGFzCiAgLy8gbG9vcCBibG9ja3MuCiAgdm9pZCBhZGRCbG9jayhIQmFzaWNCbG9jayBibG9jaywgTGlzdDxIQmFzaWNCbG9jaz4gd29ya1F1ZXVlKSB7CiAgICBpZiAoaWRlbnRpY2FsKGJsb2NrLCBoZWFkZXIpKSByZXR1cm47CiAgICBIQmFzaWNCbG9jayBwYXJlbnRIZWFkZXIgPSBibG9jay5wYXJlbnRMb29wSGVhZGVyOwogICAgaWYgKGlkZW50aWNhbChwYXJlbnRIZWFkZXIsIGhlYWRlcikpIHsKICAgICAgLy8gTm90aGluZyB0byBkbyBpbiB0aGlzIGNhc2UuCiAgICB9IGVsc2UgaWYgKHBhcmVudEhlYWRlciAhPSBudWxsKSB7CiAgICAgIHdvcmtRdWV1ZS5hZGQocGFyZW50SGVhZGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIGJsb2NrLnBhcmVudExvb3BIZWFkZXIgPSBoZWFkZXI7CiAgICAgIGJsb2Nrcy5hZGQoYmxvY2spOwogICAgICB3b3JrUXVldWUuYWRkQWxsKGJsb2NrLnByZWRlY2Vzc29ycyk7CiAgICB9CiAgfQp9CgovLy8gRW1iZWRkaW5nIG9mIGEgW0hCbG9ja0luZm9ybWF0aW9uXSBmb3IgYmxvY2stc3RydWN0dXJlIGJhc2VkIHRyYXZlcnNhbAovLy8gaW4gYSBkb21pbmF0b3IgYmFzZWQgZmxvdyB0cmF2ZXJzYWwgYnkgYXR0YWNoaW5nIGl0IHRvIGEgYmFzaWMgYmxvY2suCi8vLyBUbyBnbyBiYWNrIHRvIGRvbWluYXRvci1iYXNlZCB0cmF2ZXJzYWwsIGEgW0hTdWJHcmFwaEJsb2NrSW5mb3JtYXRpb25dCi8vLyBzdHJ1Y3R1cmUgY2FuIGJlIGFkZGVkIGluIHRoZSBibG9jayBzdHJ1Y3R1cmUuCmNsYXNzIEhCbG9ja0Zsb3cgewogIGZpbmFsIEhCbG9ja0luZm9ybWF0aW9uIGJvZHk7CiAgZmluYWwgSEJhc2ljQmxvY2sgY29udGludWF0aW9uOwogIEhCbG9ja0Zsb3codGhpcy5ib2R5LCB0aGlzLmNvbnRpbnVhdGlvbik7Cn0KCi8vLyBJbmZvcm1hdGlvbiBhYm91dCBhIHN5bnRhY3RpYy1saWtlIHN0cnVjdHVyZS4KYWJzdHJhY3QgY2xhc3MgSEJsb2NrSW5mb3JtYXRpb24gewogIEhCYXNpY0Jsb2NrIGdldCBzdGFydDsKICBIQmFzaWNCbG9jayBnZXQgZW5kOwogIGJvb2wgYWNjZXB0KEhCbG9ja0luZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKTsKfQoKLy8vIEluZm9ybWF0aW9uIGFib3V0IGEgc3RhdGVtZW50LWxpa2Ugc3RydWN0dXJlLgphYnN0cmFjdCBjbGFzcyBIU3RhdGVtZW50SW5mb3JtYXRpb24gZXh0ZW5kcyBIQmxvY2tJbmZvcm1hdGlvbiB7CiAgQG92ZXJyaWRlCiAgYm9vbCBhY2NlcHQoSFN0YXRlbWVudEluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKTsKfQoKLy8vIEluZm9ybWF0aW9uIGFib3V0IGFuIGV4cHJlc3Npb24tbGlrZSBzdHJ1Y3R1cmUuCmFic3RyYWN0IGNsYXNzIEhFeHByZXNzaW9uSW5mb3JtYXRpb24gZXh0ZW5kcyBIQmxvY2tJbmZvcm1hdGlvbiB7CiAgQG92ZXJyaWRlCiAgYm9vbCBhY2NlcHQoSEV4cHJlc3Npb25JbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcik7CiAgSEluc3RydWN0aW9uIGdldCBjb25kaXRpb25FeHByZXNzaW9uOwp9CgphYnN0cmFjdCBjbGFzcyBIU3RhdGVtZW50SW5mb3JtYXRpb25WaXNpdG9yIHsKICBib29sIHZpc2l0TGFiZWxlZEJsb2NrSW5mbyhITGFiZWxlZEJsb2NrSW5mb3JtYXRpb24gaW5mbyk7CiAgYm9vbCB2aXNpdExvb3BJbmZvKEhMb29wQmxvY2tJbmZvcm1hdGlvbiBpbmZvKTsKICBib29sIHZpc2l0SWZJbmZvKEhJZkJsb2NrSW5mb3JtYXRpb24gaW5mbyk7CiAgYm9vbCB2aXNpdFRyeUluZm8oSFRyeUJsb2NrSW5mb3JtYXRpb24gaW5mbyk7CiAgYm9vbCB2aXNpdFN3aXRjaEluZm8oSFN3aXRjaEJsb2NrSW5mb3JtYXRpb24gaW5mbyk7CiAgYm9vbCB2aXNpdFNlcXVlbmNlSW5mbyhIU3RhdGVtZW50U2VxdWVuY2VJbmZvcm1hdGlvbiBpbmZvKTsKICAvLyBQc2V1ZG8tc3RydWN0dXJlIGVtYmVkZGluZyBhIGRvbWluYXRvci1iYXNlZCB0cmF2ZXJzYWwgaW50bwogIC8vIHRoZSBibG9jay1zdHJ1Y3R1cmUgdHJhdmVyc2FsLiBUaGlzIHdpbGwgZXZlbnR1YWxseSBnbyBhd2F5LgogIGJvb2wgdmlzaXRTdWJHcmFwaEluZm8oSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbiBpbmZvKTsKfQoKYWJzdHJhY3QgY2xhc3MgSEV4cHJlc3Npb25JbmZvcm1hdGlvblZpc2l0b3IgewogIGJvb2wgdmlzaXRBbmRPckluZm8oSEFuZE9yQmxvY2tJbmZvcm1hdGlvbiBpbmZvKTsKICBib29sIHZpc2l0U3ViRXhwcmVzc2lvbkluZm8oSFN1YkV4cHJlc3Npb25CbG9ja0luZm9ybWF0aW9uIGluZm8pOwp9CgphYnN0cmFjdCBjbGFzcyBIQmxvY2tJbmZvcm1hdGlvblZpc2l0b3IKICAgIGltcGxlbWVudHMgSFN0YXRlbWVudEluZm9ybWF0aW9uVmlzaXRvciwgSEV4cHJlc3Npb25JbmZvcm1hdGlvblZpc2l0b3Ige30KCi8vLyBHZW5lcmljIGNsYXNzIHdyYXBwaW5nIGEgW1N1YkdyYXBoXSBhcyBhIGJsb2NrLWluZm9ybWF0aW9uIHVudGlsCi8vLyBhbGwgc3RydWN0dXJlcyBhcmUgaGFuZGxlZCBwcm9wZXJseS4KY2xhc3MgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbiBpbXBsZW1lbnRzIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbiB7CiAgZmluYWwgU3ViR3JhcGggc3ViR3JhcGg7CiAgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbih0aGlzLnN1YkdyYXBoKTsKCiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IHN0YXJ0ID0+IHN1YkdyYXBoLnN0YXJ0OwogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBlbmQgPT4gc3ViR3JhcGguZW5kOwoKICBAb3ZlcnJpZGUKICBib29sIGFjY2VwdChIU3RhdGVtZW50SW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpID0+CiAgICAgIHZpc2l0b3IudmlzaXRTdWJHcmFwaEluZm8odGhpcyk7Cn0KCi8vLyBHZW5lcmljIGNsYXNzIHdyYXBwaW5nIGEgW1N1YkV4cHJlc3Npb25dIGFzIGEgYmxvY2staW5mb3JtYXRpb24gdW50aWwKLy8vIGV4cHJlc3Npb25zIHN0cnVjdHVyZXMgYXJlIGhhbmRsZWQgcHJvcGVybHkuCmNsYXNzIEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbiBpbXBsZW1lbnRzIEhFeHByZXNzaW9uSW5mb3JtYXRpb24gewogIGZpbmFsIFN1YkV4cHJlc3Npb24gc3ViRXhwcmVzc2lvbjsKICBIU3ViRXhwcmVzc2lvbkJsb2NrSW5mb3JtYXRpb24odGhpcy5zdWJFeHByZXNzaW9uKTsKCiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IHN0YXJ0ID0+IHN1YkV4cHJlc3Npb24uc3RhcnQ7CiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IGVuZCA9PiBzdWJFeHByZXNzaW9uLmVuZDsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIGdldCBjb25kaXRpb25FeHByZXNzaW9uID0+IHN1YkV4cHJlc3Npb24uY29uZGl0aW9uRXhwcmVzc2lvbjsKCiAgQG92ZXJyaWRlCiAgYm9vbCBhY2NlcHQoSEV4cHJlc3Npb25JbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgPT4KICAgICAgdmlzaXRvci52aXNpdFN1YkV4cHJlc3Npb25JbmZvKHRoaXMpOwp9CgovLy8gQSBzZXF1ZW5jZSBvZiBzZXBhcmF0ZSBzdGF0ZW1lbnRzLgpjbGFzcyBIU3RhdGVtZW50U2VxdWVuY2VJbmZvcm1hdGlvbiBpbXBsZW1lbnRzIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbiB7CiAgZmluYWwgTGlzdDxIU3RhdGVtZW50SW5mb3JtYXRpb24+IHN0YXRlbWVudHM7CiAgSFN0YXRlbWVudFNlcXVlbmNlSW5mb3JtYXRpb24odGhpcy5zdGF0ZW1lbnRzKTsKCiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IHN0YXJ0ID0+IHN0YXRlbWVudHNbMF0uc3RhcnQ7CiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IGVuZCA9PiBzdGF0ZW1lbnRzLmxhc3QuZW5kOwoKICBAb3ZlcnJpZGUKICBib29sIGFjY2VwdChIU3RhdGVtZW50SW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpID0+CiAgICAgIHZpc2l0b3IudmlzaXRTZXF1ZW5jZUluZm8odGhpcyk7Cn0KCmNsYXNzIEhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbiBpbXBsZW1lbnRzIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbiB7CiAgZmluYWwgSFN0YXRlbWVudEluZm9ybWF0aW9uIGJvZHk7CiAgZmluYWwgTGlzdDxMYWJlbERlZmluaXRpb24+IGxhYmVsczsKICBmaW5hbCBKdW1wVGFyZ2V0IHRhcmdldDsKICBmaW5hbCBib29sIGlzQ29udGludWU7CgogIEhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbih0aGlzLmJvZHksIExpc3Q8TGFiZWxEZWZpbml0aW9uPiBsYWJlbHMsCiAgICAgIHt0aGlzLmlzQ29udGludWU6IGZhbHNlfSkKICAgICAgOiB0aGlzLmxhYmVscyA9IGxhYmVscywKICAgICAgICB0aGlzLnRhcmdldCA9IGxhYmVsc1swXS50YXJnZXQ7CgogIEhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbi5pbXBsaWNpdCh0aGlzLmJvZHksIHRoaXMudGFyZ2V0LAogICAgICB7dGhpcy5pc0NvbnRpbnVlOiBmYWxzZX0pCiAgICAgIDogdGhpcy5sYWJlbHMgPSBjb25zdCA8TGFiZWxEZWZpbml0aW9uPltdOwoKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgc3RhcnQgPT4gYm9keS5zdGFydDsKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgZW5kID0+IGJvZHkuZW5kOwoKICBAb3ZlcnJpZGUKICBib29sIGFjY2VwdChIU3RhdGVtZW50SW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpID0+CiAgICAgIHZpc2l0b3IudmlzaXRMYWJlbGVkQmxvY2tJbmZvKHRoaXMpOwp9CgpjbGFzcyBITG9vcEJsb2NrSW5mb3JtYXRpb24gaW1wbGVtZW50cyBIU3RhdGVtZW50SW5mb3JtYXRpb24gewogIHN0YXRpYyBjb25zdCBpbnQgV0hJTEVfTE9PUCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBGT1JfTE9PUCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBET19XSElMRV9MT09QID0gMjsKICBzdGF0aWMgY29uc3QgaW50IEZPUl9JTl9MT09QID0gMzsKICBzdGF0aWMgY29uc3QgaW50IFNXSVRDSF9DT05USU5VRV9MT09QID0gNDsKICBzdGF0aWMgY29uc3QgaW50IE5PVF9BX0xPT1AgPSAtMTsKCiAgZmluYWwgaW50IGtpbmQ7CiAgZmluYWwgSEV4cHJlc3Npb25JbmZvcm1hdGlvbiBpbml0aWFsaXplcjsKICBmaW5hbCBIRXhwcmVzc2lvbkluZm9ybWF0aW9uIGNvbmRpdGlvbjsKICBmaW5hbCBIU3RhdGVtZW50SW5mb3JtYXRpb24gYm9keTsKICBmaW5hbCBIRXhwcmVzc2lvbkluZm9ybWF0aW9uIHVwZGF0ZXM7CiAgZmluYWwgSnVtcFRhcmdldCB0YXJnZXQ7CiAgZmluYWwgTGlzdDxMYWJlbERlZmluaXRpb24+IGxhYmVsczsKICBmaW5hbCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbjsKCiAgSExvb3BCbG9ja0luZm9ybWF0aW9uKHRoaXMua2luZCwgdGhpcy5pbml0aWFsaXplciwgdGhpcy5jb25kaXRpb24sIHRoaXMuYm9keSwKICAgICAgdGhpcy51cGRhdGVzLCB0aGlzLnRhcmdldCwgdGhpcy5sYWJlbHMsIHRoaXMuc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGFzc2VydCgKICAgICAgICAoa2luZCA9PSBET19XSElMRV9MT09QID8gYm9keS5zdGFydCA6IGNvbmRpdGlvbi5zdGFydCkuaXNMb29wSGVhZGVyKCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IHN0YXJ0IHsKICAgIGlmIChpbml0aWFsaXplciAhPSBudWxsKSByZXR1cm4gaW5pdGlhbGl6ZXIuc3RhcnQ7CiAgICBpZiAoa2luZCA9PSBET19XSElMRV9MT09QKSB7CiAgICAgIHJldHVybiBib2R5LnN0YXJ0OwogICAgfQogICAgcmV0dXJuIGNvbmRpdGlvbi5zdGFydDsKICB9CgogIEhCYXNpY0Jsb2NrIGdldCBsb29wSGVhZGVyIHsKICAgIHJldHVybiBraW5kID09IERPX1dISUxFX0xPT1AgPyBib2R5LnN0YXJ0IDogY29uZGl0aW9uLnN0YXJ0OwogIH0KCiAgQG92ZXJyaWRlCiAgSEJhc2ljQmxvY2sgZ2V0IGVuZCB7CiAgICBpZiAodXBkYXRlcyAhPSBudWxsKSByZXR1cm4gdXBkYXRlcy5lbmQ7CiAgICBpZiAoa2luZCA9PSBET19XSElMRV9MT09QICYmIGNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgIHJldHVybiBjb25kaXRpb24uZW5kOwogICAgfQogICAgcmV0dXJuIGJvZHkuZW5kOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBhY2NlcHQoSFN0YXRlbWVudEluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSA9PgogICAgICB2aXNpdG9yLnZpc2l0TG9vcEluZm8odGhpcyk7Cn0KCmNsYXNzIEhJZkJsb2NrSW5mb3JtYXRpb24gaW1wbGVtZW50cyBIU3RhdGVtZW50SW5mb3JtYXRpb24gewogIGZpbmFsIEhFeHByZXNzaW9uSW5mb3JtYXRpb24gY29uZGl0aW9uOwogIGZpbmFsIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbiB0aGVuR3JhcGg7CiAgZmluYWwgSFN0YXRlbWVudEluZm9ybWF0aW9uIGVsc2VHcmFwaDsKICBISWZCbG9ja0luZm9ybWF0aW9uKHRoaXMuY29uZGl0aW9uLCB0aGlzLnRoZW5HcmFwaCwgdGhpcy5lbHNlR3JhcGgpOwoKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgc3RhcnQgPT4gY29uZGl0aW9uLnN0YXJ0OwogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBlbmQgPT4gZWxzZUdyYXBoID09IG51bGwgPyB0aGVuR3JhcGguZW5kIDogZWxzZUdyYXBoLmVuZDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBhY2NlcHQoSFN0YXRlbWVudEluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSA9PgogICAgICB2aXNpdG9yLnZpc2l0SWZJbmZvKHRoaXMpOwp9CgpjbGFzcyBIQW5kT3JCbG9ja0luZm9ybWF0aW9uIGltcGxlbWVudHMgSEV4cHJlc3Npb25JbmZvcm1hdGlvbiB7CiAgZmluYWwgYm9vbCBpc0FuZDsKICBmaW5hbCBIRXhwcmVzc2lvbkluZm9ybWF0aW9uIGxlZnQ7CiAgZmluYWwgSEV4cHJlc3Npb25JbmZvcm1hdGlvbiByaWdodDsKICBIQW5kT3JCbG9ja0luZm9ybWF0aW9uKHRoaXMuaXNBbmQsIHRoaXMubGVmdCwgdGhpcy5yaWdodCk7CgogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBzdGFydCA9PiBsZWZ0LnN0YXJ0OwogIEBvdmVycmlkZQogIEhCYXNpY0Jsb2NrIGdldCBlbmQgPT4gcmlnaHQuZW5kOwoKICAvLyBXZSBkb24ndCBjdXJyZW50bHkgdXNlIEhBbmRPckJsb2NrSW5mb3JtYXRpb24uCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIGdldCBjb25kaXRpb25FeHByZXNzaW9uIHsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBhY2NlcHQoSEV4cHJlc3Npb25JbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgPT4KICAgICAgdmlzaXRvci52aXNpdEFuZE9ySW5mbyh0aGlzKTsKfQoKY2xhc3MgSFRyeUJsb2NrSW5mb3JtYXRpb24gaW1wbGVtZW50cyBIU3RhdGVtZW50SW5mb3JtYXRpb24gewogIGZpbmFsIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbiBib2R5OwogIGZpbmFsIEhMb2NhbFZhbHVlIGNhdGNoVmFyaWFibGU7CiAgZmluYWwgSFN0YXRlbWVudEluZm9ybWF0aW9uIGNhdGNoQmxvY2s7CiAgZmluYWwgSFN0YXRlbWVudEluZm9ybWF0aW9uIGZpbmFsbHlCbG9jazsKICBIVHJ5QmxvY2tJbmZvcm1hdGlvbigKICAgICAgdGhpcy5ib2R5LCB0aGlzLmNhdGNoVmFyaWFibGUsIHRoaXMuY2F0Y2hCbG9jaywgdGhpcy5maW5hbGx5QmxvY2spOwoKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgc3RhcnQgPT4gYm9keS5zdGFydDsKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgZW5kID0+CiAgICAgIGZpbmFsbHlCbG9jayA9PSBudWxsID8gY2F0Y2hCbG9jay5lbmQgOiBmaW5hbGx5QmxvY2suZW5kOwoKICBAb3ZlcnJpZGUKICBib29sIGFjY2VwdChIU3RhdGVtZW50SW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpID0+CiAgICAgIHZpc2l0b3IudmlzaXRUcnlJbmZvKHRoaXMpOwp9CgpjbGFzcyBIU3dpdGNoQmxvY2tJbmZvcm1hdGlvbiBpbXBsZW1lbnRzIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbiB7CiAgZmluYWwgSEV4cHJlc3Npb25JbmZvcm1hdGlvbiBleHByZXNzaW9uOwogIGZpbmFsIExpc3Q8SFN0YXRlbWVudEluZm9ybWF0aW9uPiBzdGF0ZW1lbnRzOwogIGZpbmFsIEp1bXBUYXJnZXQgdGFyZ2V0OwogIGZpbmFsIExpc3Q8TGFiZWxEZWZpbml0aW9uPiBsYWJlbHM7CiAgZmluYWwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb247CgogIEhTd2l0Y2hCbG9ja0luZm9ybWF0aW9uKHRoaXMuZXhwcmVzc2lvbiwgdGhpcy5zdGF0ZW1lbnRzLCB0aGlzLnRhcmdldCwKICAgICAgdGhpcy5sYWJlbHMsIHRoaXMuc291cmNlSW5mb3JtYXRpb24pOwoKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgc3RhcnQgPT4gZXhwcmVzc2lvbi5zdGFydDsKICBAb3ZlcnJpZGUKICBIQmFzaWNCbG9jayBnZXQgZW5kIHsKICAgIC8vIFdlIGRvbid0IGNyZWF0ZSBhIHN3aXRjaCBibG9jayBpZiB0aGVyZSBhcmUgbm8gY2FzZXMuCiAgICBhc3NlcnQoIXN0YXRlbWVudHMuaXNFbXB0eSk7CiAgICByZXR1cm4gc3RhdGVtZW50cy5sYXN0LmVuZDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgYWNjZXB0KEhTdGF0ZW1lbnRJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgPT4KICAgICAgdmlzaXRvci52aXNpdFN3aXRjaEluZm8odGhpcyk7Cn0KCi8vLyBSZWFkcyByYXcgcmVpZmllZCB0eXBlIGluZm8gZnJvbSBhbiBvYmplY3QuCmNsYXNzIEhUeXBlSW5mb1JlYWRSYXcgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhUeXBlSW5mb1JlYWRSYXcoSEluc3RydWN0aW9uIHJlY2VpdmVyLCBBYnN0cmFjdFZhbHVlIGluc3RydWN0aW9uVHlwZSkKICAgICAgOiBzdXBlcig8SEluc3RydWN0aW9uPltyZWNlaXZlcl0sIGluc3RydWN0aW9uVHlwZSkgewogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFR5cGVJbmZvUmVhZFJhdyh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjYW5UaHJvdyhBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5UWVBFX0lORk9fUkVBRF9SQVdfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSFR5cGVJbmZvUmVhZFJhdzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhUeXBlSW5mb1JlYWRSYXcgb3RoZXIpIHsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKLy8vIFJlYWRzIGEgdHlwZSB2YXJpYWJsZSBmcm9tIGFuIG9iamVjdC4gVGhlIHJlYWQgbWF5IGJlIGEgc2ltcGxlIGluZGV4aW5nIG9mCi8vLyB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9yIGl0IG1heSByZXF1aXJlICdzdWJzdGl0dXRpb24nLiBUaGVyZSBtYXkgYmUgYW4KLy8vIGludGVyY2VwdG9yIGFyZ3VtZW50IHRvIGFjY2VzcyB0aGUgc3Vic3RpdHV0aW9uIG9mIG5hdGl2ZSBjbGFzc2VzLgpjbGFzcyBIVHlwZUluZm9SZWFkVmFyaWFibGUgZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIC8vLyBUaGUgdHlwZSB2YXJpYWJsZSBiZWluZyByZWFkLgogIGZpbmFsIFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGU7CiAgZmluYWwgYm9vbCBpc0ludGVyY2VwdGVkOwoKICBIVHlwZUluZm9SZWFkVmFyaWFibGUuaW50ZXJjZXB0ZWQodGhpcy52YXJpYWJsZSwgSEluc3RydWN0aW9uIGludGVyY2VwdG9yLAogICAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEFic3RyYWN0VmFsdWUgaW5zdHJ1Y3Rpb25UeXBlKQogICAgICA6IGlzSW50ZXJjZXB0ZWQgPSB0cnVlLAogICAgICAgIHN1cGVyKDxISW5zdHJ1Y3Rpb24+W2ludGVyY2VwdG9yLCByZWNlaXZlcl0sIGluc3RydWN0aW9uVHlwZSkgewogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICBIVHlwZUluZm9SZWFkVmFyaWFibGUubm9JbnRlcmNlcHRvcigKICAgICAgdGhpcy52YXJpYWJsZSwgSEluc3RydWN0aW9uIHJlY2VpdmVyLCBBYnN0cmFjdFZhbHVlIGluc3RydWN0aW9uVHlwZSkKICAgICAgOiBpc0ludGVyY2VwdGVkID0gZmFsc2UsCiAgICAgICAgc3VwZXIoPEhJbnN0cnVjdGlvbj5bcmVjZWl2ZXJdLCBpbnN0cnVjdGlvblR5cGUpIHsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgSEluc3RydWN0aW9uIGdldCBpbnRlcmNlcHRvciB7CiAgICBhc3NlcnQoaXNJbnRlcmNlcHRlZCk7CiAgICByZXR1cm4gaW5wdXRzLmZpcnN0OwogIH0KCiAgSEluc3RydWN0aW9uIGdldCBvYmplY3QgPT4gaW5wdXRzLmxhc3Q7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0VHlwZUluZm9SZWFkVmFyaWFibGUodGhpcyk7CgogIEBvdmVycmlkZQogIGJvb2wgY2FuVGhyb3coQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uVFlQRV9JTkZPX1JFQURfVkFSSUFCTEVfVFlQRUNPREU7CiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSFR5cGVJbmZvUmVhZFZhcmlhYmxlOwoKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSFR5cGVJbmZvUmVhZFZhcmlhYmxlIG90aGVyKSB7CiAgICByZXR1cm4gdmFyaWFibGUgPT0gb3RoZXIudmFyaWFibGU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSFR5cGVJbmZvUmVhZFZhcmlhYmxlKCR2YXJpYWJsZSknOwp9CgplbnVtIFR5cGVJbmZvRXhwcmVzc2lvbktpbmQgeyBDT01QTEVURSwgSU5TVEFOQ0UgfQoKLy8vIENvbnN0cnVjdHMgYSByZXByZXNlbnRhdGlvbiBvZiBhIGNsb3NlZCBvciBncm91bmQtdGVybSB0eXBlICh0aGF0IGlzLCBhIHR5cGUKLy8vIHdpdGhvdXQgdHlwZSB2YXJpYWJsZXMpLgovLy8KLy8vIFRoZXJlIGFyZSB0d28gZm9ybXM6Ci8vLwovLy8gLSBDT01QTEVURTogQSBjb21wbGV0ZSBmb3JtIHRoYXQgaXMgc2VsZiBjb250YWluZWQsIHVzZWQgZm9yIHRoZSB2YWx1ZXMgb2YKLy8vICAgdHlwZSBwYXJhbWV0ZXJzIGFuZCBub24tcmF3IGlzLWNoZWNrcy4KLy8vCi8vLyAtIElOU1RBTkNFOiBBIGhlYWRsZXNzIGZsYXQgZm9ybSBmb3IgcmVwcmVzZW50aW5nIHRoZSBzZXF1ZW5jZSBvZiB2YWx1ZXMgb2YKLy8vICAgdGhlIHR5cGUgcGFyYW1ldGVycyBvZiBhbiBpbnN0YW5jZSBvZiBhIGdlbmVyaWMgdHlwZS4KLy8vCi8vLyBUaGUgQ09NUExFVEUgZm9ybSB2YWx1ZSBpcyBjb25zdHJ1Y3RlZCBmcm9tIFtkYXJ0VHlwZV0gYnkgcmVwbGFjaW5nIHRoZSB0eXBlCi8vLyB2YXJpYWJsZXMgd2l0aCBjb25zZWN1dGl2ZSB2YWx1ZXMgZnJvbSBbaW5wdXRzXSwgaW4gdGhlIG9yZGVyIGdlbmVyYXRlZCBieQovLy8gW0RhcnRUeXBlLmZvckVhY2hUeXBlVmFyaWFibGVdLiAgVGhlIHR5cGUgdmFyaWFibGVzIGluIFtkYXJ0VHlwZV0gYXJlCi8vLyB0cmVhdGVkIGFzICdob2xlcycgaW4gdGhlIHRlcm0sIHdoaWNoIG1lYW5zIHRoYXQgaXQgbXVzdCBiZSBlbnN1cmVkIGF0Ci8vLyBjb25zdHJ1Y3Rpb24sIHRoYXQgZHVwbGljYXRlIG9jY3VyZW5jZXMgb2YgYSB0eXBlIHZhcmlhYmxlIGluIFtkYXJ0VHlwZV0gYXJlCi8vLyBhc3NpZ25lZCB0aGUgc2FtZSB2YWx1ZS4KLy8vCi8vLyBUaGUgSU5TVEFOQ0UgZm9ybSBpcyBjb25zdHJ1Y3RlZCBhcyBhIGxpc3Qgb2YgW2lucHV0c10uIFRoaXMgaXMgdGhlIHNhbWUgYXMKLy8vIHRoZSBDT01QTEVURSBmb3JtIGZvciB0aGUgJ3RoaXNUeXBlJywgZXhjZXB0IHRoZSByb290IHRlcm0ncyB0eXBlIGlzCi8vLyBtaXNzaW5nOyB0aGlzIGlzIGltcGxpY2l0IGFzIHRoZSByYXcgdHlwZSBvZiBpbnN0YW5jZS4gIFRoZSBbZGFydFR5cGVdIG9mCi8vLyB0aGUgSU5TVEFOQ0UgZm9ybSBtdXN0IGJlIHRoZSB0aGlzVHlwZSBvZiBzb21lIGNsYXNzLgovLy8KLy8vIFdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBjb25zdHJhaW5zIG9uIHRoZSBJTlNUQU5DRSBmb3JtLiBJbiB0aGUgbWVhbnRpbWUgd2UKLy8vIGdldCBieSB3aXRoIGEgdHJlZSBvZiBUeXBlRXhwcmVzc2lvbnMuICBDb25zaWRlcjoKLy8vCi8vLyAgICAgY2xhc3MgRm9vPFQ+IHsKLy8vICAgICAgIC4uLiBuZXcgU2V0PExpc3Q8VD4+KCkKLy8vICAgICB9Ci8vLyAgICAgY2xhc3MgU2V0PEUxPiB7Ci8vLyAgICAgICBmYWN0b3J5IFNldCgpID0+IG5ldyBfTGlua2VkSGFzaFNldDxFMT4oKTsKLy8vICAgICB9Ci8vLyAgICAgY2xhc3MgTGlzdDxFMj4geyAuLi4gfQovLy8gICAgIGNsYXNzIF9MaW5rZWRIYXNoU2V0PEUzPiB7IC4uLiB9Ci8vLwovLy8gQWZ0ZXIgaW5saW5pbmcgdGhlIGZhY3RvcnkgY29uc3RydWN0b3IgZm9yIGBTZXQ8RTE+YCwgdGhlIEhDcmVhdGUgc2hvdWxkCi8vLyBoYXZlIHR5cGUgYF9MaW5rZWRIYXNoU2V0PExpc3Q8VD4+YCBhbmQgdGhlIFR5cGVFeHByZXNzaW9uIHNob3VsZCBiZSBhIHRyZWU6Ci8vLwovLy8gICAgSENyZWF0ZShkYXJ0VHlwZTogX0xpbmtlZEhhc2hTZXQ8TGlzdDxUPj4sCi8vLyAgICAgICAgW10sIC8vIE5vIGFyZ3VtZW50cwovLy8gICAgICAgIEhUeXBlSW5mb0V4cHJlc3Npb24oSU5TVEFOQ0UsCi8vLyAgICAgICAgICAgIGRhcnRUeXBlOiBfTGlua2VkSGFzaFNldDxFMz4sIC8vIF9MaW5rZWRIYXNoU2V0J3MgdGhpc1R5cGUKLy8vICAgICAgICAgICAgSFR5cGVJbmZvRXhwcmVzc2lvbihDT01QTEVURSwgIC8vIEUzID0gTGlzdDxUPgovLy8gICAgICAgICAgICAgICAgZGFydFR5cGU6IExpc3Q8RTI+LAovLy8gICAgICAgICAgICAgICAgSFR5cGVJbmZvUmVhZFZhcmlhYmxlKHRoaXMsIFQpKSkpIC8vIEUyID0gVAoKLy8gVE9ETyhzcmEpOiBUaGUgSU5TVEFOQ0UgZm9ybSByZXF1aXJlcyB0aGUgYWN0dWFsIGluc3RhbmNlIGZvciBmdWxsCi8vIGludGVycHJldGF0aW9uLiBJZiB0aGUgQ09NUExFVEUgZm9ybSB3YXMgdXNlZCBvbiBpbnN0YW5jZXMsIHRoZW4gd2UgY291bGQKLy8gc2ltcGxpZnkgSFR5cGVJbmZvUmVhZFZhcmlhYmxlIHdpdGhvdXQgYW4gb2JqZWN0LgoKY2xhc3MgSFR5cGVJbmZvRXhwcmVzc2lvbiBleHRlbmRzIEhJbnN0cnVjdGlvbiB7CiAgZmluYWwgVHlwZUluZm9FeHByZXNzaW9uS2luZCBraW5kOwogIGZpbmFsIERhcnRUeXBlIGRhcnRUeXBlOwoKICAvLy8gYHRydWVgIGlmIHRoaXMKICBmaW5hbCBib29sIGlzVHlwZVZhcmlhYmxlUmVwbGFjZW1lbnQ7CgogIEhUeXBlSW5mb0V4cHJlc3Npb24odGhpcy5raW5kLCB0aGlzLmRhcnRUeXBlLCBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLAogICAgICBBYnN0cmFjdFZhbHVlIGluc3RydWN0aW9uVHlwZSwKICAgICAge3RoaXMuaXNUeXBlVmFyaWFibGVSZXBsYWNlbWVudDogZmFsc2V9KQogICAgICA6IHN1cGVyKGlucHV0cywgaW5zdHJ1Y3Rpb25UeXBlKSB7CiAgICBzZXRVc2VHdm4oKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0VHlwZUluZm9FeHByZXNzaW9uKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBib29sIGNhblRocm93KEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlRZUEVfSU5GT19FWFBSRVNTSU9OX1RZUEVDT0RFOwogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhUeXBlSW5mb0V4cHJlc3Npb247CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIVHlwZUluZm9FeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4ga2luZCA9PSBvdGhlci5raW5kICYmIGRhcnRUeXBlID09IG90aGVyLmRhcnRUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0hUeXBlSW5mb0V4cHJlc3Npb24oJGtpbmRBc1N0cmluZywgJGRhcnRUeXBlKSc7CgogIC8vIGlnbm9yZTogTUlTU0lOR19SRVRVUk4KICBTdHJpbmcgZ2V0IGtpbmRBc1N0cmluZyB7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBUeXBlSW5mb0V4cHJlc3Npb25LaW5kLkNPTVBMRVRFOgogICAgICAgIHJldHVybiAnQ09NUExFVEUnOwogICAgICBjYXNlIFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuSU5TVEFOQ0U6CiAgICAgICAgcmV0dXJuICdJTlNUQU5DRSc7CiAgICB9CiAgfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8vIElzLXRlc3QgdXNpbmcgUnRpIGZvcm0gb2YgdHlwZSBleHByZXNzaW9uLgovLy8KLy8vIFRoaXMgaW5zdHJ1Y3Rpb24gY2FuIGJlIHVzZWQgZm9yIGFueSB0eXBlLiBUZXN0cyBmb3Igc2ltcGxlIHR5cGVzIGFyZQovLy8gbG93ZXJlZCB0byBvdGhlciBpbnN0cnVjdGlvbnMsIHNvIHRoaXMgaW5zdHJ1Y3Rpb24gcmVtYWlucyBmb3IgdHlwZXMgdGhhdAovLy8gZGVwZW5kIG9uIHR5cGUgdmFyaWFibGVzIGFuZCBjb21wbGV4IHR5cGVzLgpjbGFzcyBISXNUZXN0IGV4dGVuZHMgSEluc3RydWN0aW9uIHsKICBmaW5hbCBEYXJ0VHlwZSBkYXJ0VHlwZTsKCiAgSElzVGVzdCgKICAgICAgdGhpcy5kYXJ0VHlwZSwgSEluc3RydWN0aW9uIGNoZWNrZWQsIEhJbnN0cnVjdGlvbiBydGksIEFic3RyYWN0VmFsdWUgdHlwZSkKICAgICAgOiBzdXBlcihbcnRpLCBjaGVja2VkXSwgdHlwZSkgewogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICAvLyBUaGUgdHlwZSBpbnB1dCBpcyBmaXJzdCB0byBmYWNpbGl0YXRlIHRoZSBgdHlwZS5pcyh2YWx1ZSlgIGNvZGVnZW4gcGF0dGVybi4KICBISW5zdHJ1Y3Rpb24gZ2V0IHR5cGVJbnB1dCA9PiBpbnB1dHNbMF07CiAgSEluc3RydWN0aW9uIGdldCBjaGVja2VkSW5wdXQgPT4gaW5wdXRzWzFdOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdElzVGVzdCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLklTX1RFU1RfVFlQRUNPREU7CgogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhJc1Rlc3Q7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISXNUZXN0IG90aGVyKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSElzVGVzdCgpJzsKfQoKLy8vIFR5cGUgY2FzdCBvciB0eXBlIGNoZWNrIHVzaW5nIFJ0aSBmb3JtIG9mIHR5cGUgZXhwcmVzc2lvbi4KY2xhc3MgSEFzQ2hlY2sgZXh0ZW5kcyBIQ2hlY2sgewogIGZpbmFsIEFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uIGNoZWNrZWRUeXBlOwogIGZpbmFsIERhcnRUeXBlIGNoZWNrZWRUeXBlRXhwcmVzc2lvbjsKICBmaW5hbCBib29sIGlzVHlwZUVycm9yOwoKICBIQXNDaGVjaygKICAgICAgSEluc3RydWN0aW9uIGNoZWNrZWQsCiAgICAgIEhJbnN0cnVjdGlvbiBydGksCiAgICAgIHRoaXMuY2hlY2tlZFR5cGUsCiAgICAgIHRoaXMuY2hlY2tlZFR5cGVFeHByZXNzaW9uLAogICAgICB0aGlzLmlzVHlwZUVycm9yLAogICAgICBBYnN0cmFjdFZhbHVlIGluc3RydWN0aW9uVHlwZSkKICAgICAgOiBhc3NlcnQoaXNUeXBlRXJyb3IgIT0gbnVsbCksCiAgICAgICAgc3VwZXIoW3J0aSwgY2hlY2tlZF0sIGluc3RydWN0aW9uVHlwZSk7CgogIC8vIFRoZSB0eXBlIGlucHV0IGlzIGZpcnN0IHRvIGZhY2lsaXRhdGUgdGhlIGB0eXBlLmFzKHZhbHVlKWAgY29kZWdlbiBwYXR0ZXJuLgogIEhJbnN0cnVjdGlvbiBnZXQgdHlwZUlucHV0ID0+IGlucHV0c1swXTsKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gZ2V0IGNoZWNrZWRJbnB1dCA9PiBpbnB1dHNbMV07CgogIEBvdmVycmlkZQogIGJvb2wgaXNKc1N0YXRlbWVudCgpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEFzQ2hlY2sodGhpcyk7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5BU19DSEVDS19UWVBFQ09ERTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSEFzQ2hlY2s7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIQXNDaGVjayBvdGhlcikgewogICAgcmV0dXJuIGlzVHlwZUVycm9yID09IG90aGVyLmlzVHlwZUVycm9yOwogIH0KCiAgYm9vbCBpc1JlZHVuZGFudChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmICghY2hlY2tlZFR5cGUuaXNQcmVjaXNlKSByZXR1cm4gZmFsc2U7CiAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgQWJzdHJhY3RWYWx1ZSBpbnB1dFR5cGUgPSBjaGVja2VkSW5wdXQuaW5zdHJ1Y3Rpb25UeXBlOwogICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuaXNJbihpbnB1dFR5cGUsIGNoZWNrZWRUeXBlLmFic3RyYWN0VmFsdWUpCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmcgZXJyb3IgPSBpc1R5cGVFcnJvciA/ICdUeXBlRXJyb3InIDogJ0Nhc3RFcnJvcic7CiAgICByZXR1cm4gJ0hBc0NoZWNrKCRlcnJvciknOwogIH0KfQoKLy8vIFR5cGUgY2FzdCBvciB0eXBlIGNoZWNrIGZvciBzaW1wbGUga25vd24gdHlwZXMgdGhhdCBhcmUgYWNoaWV2ZWQgdmlhIGEKLy8vIHNpbXBsZSBzdGF0aWMgY2FsbC4KY2xhc3MgSEFzQ2hlY2tTaW1wbGUgZXh0ZW5kcyBIQ2hlY2sgewogIGZpbmFsIERhcnRUeXBlIGRhcnRUeXBlOwogIGZpbmFsIEFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uIGNoZWNrZWRUeXBlOwogIGZpbmFsIGJvb2wgaXNUeXBlRXJyb3I7CiAgZmluYWwgTWVtYmVyRW50aXR5IG1ldGhvZDsKCiAgSEFzQ2hlY2tTaW1wbGUoSEluc3RydWN0aW9uIGNoZWNrZWQsIHRoaXMuZGFydFR5cGUsIHRoaXMuY2hlY2tlZFR5cGUsCiAgICAgIHRoaXMuaXNUeXBlRXJyb3IsIHRoaXMubWV0aG9kLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogYXNzZXJ0KGlzVHlwZUVycm9yICE9IG51bGwpLAogICAgICAgIHN1cGVyKFtjaGVja2VkXSwgdHlwZSk7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBnZXQgY2hlY2tlZElucHV0ID0+IGlucHV0c1swXTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzU3RhdGVtZW50KCkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGFjY2VwdChIVmlzaXRvciB2aXNpdG9yKSA9PiB2aXNpdG9yLnZpc2l0QXNDaGVja1NpbXBsZSh0aGlzKTsKCiAgYm9vbCBpc1JlZHVuZGFudChKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIGlmICghY2hlY2tlZFR5cGUuaXNQcmVjaXNlKSByZXR1cm4gZmFsc2U7CiAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgQWJzdHJhY3RWYWx1ZSBpbnB1dFR5cGUgPSBjaGVja2VkSW5wdXQuaW5zdHJ1Y3Rpb25UeXBlOwogICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuaXNJbihpbnB1dFR5cGUsIGNoZWNrZWRUeXBlLmFic3RyYWN0VmFsdWUpCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uQVNfQ0hFQ0tfU0lNUExFX1RZUEVDT0RFOwoKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBIQXNDaGVja1NpbXBsZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBkYXRhRXF1YWxzKEhBc0NoZWNrU2ltcGxlIG90aGVyKSB7CiAgICByZXR1cm4gaXNUeXBlRXJyb3IgPT0gb3RoZXIuaXNUeXBlRXJyb3IgJiYgZGFydFR5cGUgPT0gb3RoZXIuZGFydFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmcgZXJyb3IgPSBpc1R5cGVFcnJvciA/ICdUeXBlRXJyb3InIDogJ0Nhc3RFcnJvcic7CiAgICByZXR1cm4gJ0hBc0NoZWNrKCRlcnJvciknOwogIH0KfQoKLy8vIFN1YnR5cGUgY2hlY2sgY29tcGFyaW5nIHR3byBSdGkgdHlwZXMuCmNsYXNzIEhTdWJ0eXBlQ2hlY2sgZXh0ZW5kcyBIQ2hlY2sgewogIEhTdWJ0eXBlQ2hlY2soCiAgICAgIEhJbnN0cnVjdGlvbiBzdWJ0eXBlLCBISW5zdHJ1Y3Rpb24gc3VwZXJ0eXBlLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoW3N1YnR5cGUsIHN1cGVydHlwZV0sIHR5cGUpIHsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgSEluc3RydWN0aW9uIGdldCB0eXBlSW5wdXQgPT4gaW5wdXRzWzFdOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdFN1YnR5cGVDaGVjayh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlNVQlRZUEVfQ0hFQ0tfVFlQRUNPREU7CgogIEBvdmVycmlkZQogIGJvb2wgdHlwZUVxdWFscyhISW5zdHJ1Y3Rpb24gb3RoZXIpID0+IG90aGVyIGlzIEhTdWJ0eXBlQ2hlY2s7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhIU3VidHlwZUNoZWNrIG90aGVyKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnSFN1YnR5cGVDaGVjaygpJzsKfQoKLy8vIENvbW1vbiBzdXBlcmNsYXNzIGZvciBpbnN0cnVjdGlvbnMgdGhhdCBnZW5lcmF0ZSBSdGkgdmFsdWVzLgphYnN0cmFjdCBjbGFzcyBIUnRpSW5zdHJ1Y3Rpb24gZXh0ZW5kcyBISW5zdHJ1Y3Rpb24gewogIEhSdGlJbnN0cnVjdGlvbihMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoaW5wdXRzLCB0eXBlKTsKfQoKLy8vIEV2YWx1YXRlcyBhbiBSdGkgdHlwZSByZWNpcGUgaW4gdGhlIGdsb2JhbCBlbnZpcm9ubWVudC4KY2xhc3MgSExvYWRUeXBlIGV4dGVuZHMgSFJ0aUluc3RydWN0aW9uIHsKICBEYXJ0VHlwZSB0eXBlRXhwcmVzc2lvbjsgLy8gVE9ETyhzcmEpOiBBbGxvdyBhIHR5cGUgZW52aXJvbm1lbnQgZXhwcmVzc2lvbi4KCiAgSExvYWRUeXBlKHRoaXMudHlwZUV4cHJlc3Npb24sIEFic3RyYWN0VmFsdWUgdHlwZSkgOiBzdXBlcihbXSwgdHlwZSkgewogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdExvYWRUeXBlKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUNvZGUoKSA9PiBISW5zdHJ1Y3Rpb24uTE9BRF9UWVBFX1RZUEVDT0RFOwoKICBAb3ZlcnJpZGUKICBib29sIHR5cGVFcXVhbHMoSEluc3RydWN0aW9uIG90aGVyKSA9PiBvdGhlciBpcyBITG9hZFR5cGU7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhITG9hZFR5cGUgb3RoZXIpIHsKICAgIHJldHVybiB0eXBlRXhwcmVzc2lvbiA9PSBvdGhlci50eXBlRXhwcmVzc2lvbjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdITG9hZFR5cGUoJHR5cGVFeHByZXNzaW9uKSc7Cn0KCi8vLyBUaGUgcmVpZmllZCBSdGkgZW52aXJvbm1lbnQgc3RvcmVkIG9uIGEgY2xhc3MgaW5zdGFuY2UuCi8vLwovLy8gQ2xhc3NlcyB3aXRoIHJlaWZpZWQgdHlwZSBhcmd1bWVudHMgaGF2ZSB0aGUgdHlwZSBlbnZpcm9ubWVudCBzdG9yZWQgb24gdGhlCi8vLyBpbnN0YW5jZS4gVGhlIHJlaWZpZWQgZW52aXJvbm1lbnQgaXMgdHlwaWNhbGx5IHN0b3JlZCBhcyB0aGUgaW5zdGFuY2UgdHlwZSwKLy8vIGUuZy4gIlVubW9kaWZpYWJsZUxpc3RWaWV3PGludD4iLgpjbGFzcyBISW5zdGFuY2VFbnZpcm9ubWVudCBleHRlbmRzIEhSdGlJbnN0cnVjdGlvbiB7CiAgSEluc3RhbmNlRW52aXJvbm1lbnQoSEluc3RydWN0aW9uIGluc3RhbmNlLCBBYnN0cmFjdFZhbHVlIHR5cGUpCiAgICAgIDogc3VwZXIoW2luc3RhbmNlXSwgdHlwZSkgewogICAgc2V0VXNlR3ZuKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoSFZpc2l0b3IgdmlzaXRvcikgPT4gdmlzaXRvci52aXNpdEluc3RhbmNlRW52aXJvbm1lbnQodGhpcyk7CgogIEBvdmVycmlkZQogIGludCB0eXBlQ29kZSgpID0+IEhJbnN0cnVjdGlvbi5JTlNUQU5DRV9FTlZJUk9OTUVOVF9UWVBFQ09ERTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSEluc3RhbmNlRW52aXJvbm1lbnQ7CgogIEBvdmVycmlkZQogIGJvb2wgZGF0YUVxdWFscyhISW5zdGFuY2VFbnZpcm9ubWVudCBvdGhlcikgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0hJbnN0YW5jZUVudmlyb25tZW50KCknOwp9CgovLy8gRXZhbHVhdGVzIGFuIFJ0aSB0eXBlIHJlY2lwZSBpbiBhbiBSdGkgZW52aXJvbm1lbnQuCmNsYXNzIEhUeXBlRXZhbCBleHRlbmRzIEhSdGlJbnN0cnVjdGlvbiB7CiAgVHlwZUVudmlyb25tZW50U3RydWN0dXJlIGVudlN0cnVjdHVyZTsKICBUeXBlUmVjaXBlIHR5cGVFeHByZXNzaW9uOwoKICBIVHlwZUV2YWwoSEluc3RydWN0aW9uIGVudmlyb25tZW50LCB0aGlzLmVudlN0cnVjdHVyZSwgdGhpcy50eXBlRXhwcmVzc2lvbiwKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlKQogICAgICA6IHN1cGVyKFtlbnZpcm9ubWVudF0sIHR5cGUpIHsKICAgIHNldFVzZUd2bigpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KEhWaXNpdG9yIHZpc2l0b3IpID0+IHZpc2l0b3IudmlzaXRUeXBlRXZhbCh0aGlzKTsKCiAgQG92ZXJyaWRlCiAgaW50IHR5cGVDb2RlKCkgPT4gSEluc3RydWN0aW9uLlRZUEVfRVZBTF9UWVBFQ09ERTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB0eXBlRXF1YWxzKEhJbnN0cnVjdGlvbiBvdGhlcikgPT4gb3RoZXIgaXMgSFR5cGVFdmFsOwoKICBAb3ZlcnJpZGUKICBib29sIGRhdGFFcXVhbHMoSFR5cGVFdmFsIG90aGVyKSB7CiAgICByZXR1cm4gVHlwZVJlY2lwZS55aWVsZHNTYW1lVHlwZSgKICAgICAgICB0eXBlRXhwcmVzc2lvbiwgZW52U3RydWN0dXJlLCBvdGhlci50eXBlRXhwcmVzc2lvbiwgb3RoZXIuZW52U3RydWN0dXJlKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdIVHlwZUV2YWwoJHR5cGVFeHByZXNzaW9u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IGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuc2VsZWN0b3I7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBOYW1lczsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdHlfdXRpbHMuZGFydCcgYXMgdXRpbHM7CmltcG9ydCAnLi4vZWxlbWVudHMvbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvb3BlcmF0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2tlcm5lbC9pbnZvY2F0aW9uX21pcnJvcl9jb25zdGFudHMuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JyBzaG93IEhhc2hpbmc7CmltcG9ydCAnY2FsbF9zdHJ1Y3R1cmUuZGFydCcgc2hvdyBDYWxsU3RydWN0dXJlOwoKY2xhc3MgU2VsZWN0b3JLaW5kIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGU7CiAgY29uc3QgU2VsZWN0b3JLaW5kKHRoaXMubmFtZSwgdGhpcy5oYXNoQ29kZSk7CgogIHN0YXRpYyBjb25zdCBTZWxlY3RvcktpbmQgR0VUVEVSID0gY29uc3QgU2VsZWN0b3JLaW5kKCdnZXR0ZXInLCAwKTsKICBzdGF0aWMgY29uc3QgU2VsZWN0b3JLaW5kIFNFVFRFUiA9IGNvbnN0IFNlbGVjdG9yS2luZCgnc2V0dGVyJywgMSk7CiAgc3RhdGljIGNvbnN0IFNlbGVjdG9yS2luZCBDQUxMID0gY29uc3QgU2VsZWN0b3JLaW5kKCdjYWxsJywgMik7CiAgc3RhdGljIGNvbnN0IFNlbGVjdG9yS2luZCBPUEVSQVRPUiA9IGNvbnN0IFNlbGVjdG9yS2luZCgnb3BlcmF0b3InLCAzKTsKICBzdGF0aWMgY29uc3QgU2VsZWN0b3JLaW5kIElOREVYID0gY29uc3QgU2VsZWN0b3JLaW5kKCdpbmRleCcsIDQpOwogIHN0YXRpYyBjb25zdCBTZWxlY3RvcktpbmQgU1BFQ0lBTCA9IGNvbnN0IFNlbGVjdG9yS2luZCgnc3BlY2lhbCcsIDUpOwoKICBpbnQgZ2V0IGluZGV4ID0+IGhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBuYW1lOwoKICBzdGF0aWMgTGlzdDxTZWxlY3RvcktpbmQ+IHZhbHVlcyA9IGNvbnN0IDxTZWxlY3RvcktpbmQ+WwogICAgR0VUVEVSLAogICAgU0VUVEVSLAogICAgQ0FMTCwKICAgIE9QRVJBVE9SLAogICAgSU5ERVgsCiAgICBTUEVDSUFMCiAgXTsKfQoKY2xhc3MgU2VsZWN0b3IgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbU2VsZWN0b3JdIG9iamVjdHMgaW4gYSBkZWJ1Z2dpbmcKICAvLy8gZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnc2VsZWN0b3InOwoKICBmaW5hbCBTZWxlY3RvcktpbmQga2luZDsKICBmaW5hbCBOYW1lIG1lbWJlck5hbWU7CiAgZmluYWwgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGU7CgogIGludCBnZXQgYXJndW1lbnRDb3VudCA9PiBjYWxsU3RydWN0dXJlLmFyZ3VtZW50Q291bnQ7CiAgaW50IGdldCBuYW1lZEFyZ3VtZW50Q291bnQgPT4gY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50Q291bnQ7CiAgaW50IGdldCBwb3NpdGlvbmFsQXJndW1lbnRDb3VudCA9PiBjYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudENvdW50OwogIGludCBnZXQgdHlwZUFyZ3VtZW50Q291bnQgPT4gY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudDsKICBMaXN0PFN0cmluZz4gZ2V0IG5hbWVkQXJndW1lbnRzID0+IGNhbGxTdHJ1Y3R1cmUubmFtZWRBcmd1bWVudHM7CgogIFN0cmluZyBnZXQgbmFtZSA9PiBtZW1iZXJOYW1lLnRleHQ7CgogIExpYnJhcnlFbnRpdHkgZ2V0IGxpYnJhcnkgPT4gbWVtYmVyTmFtZS5saWJyYXJ5OwoKICBzdGF0aWMgYm9vbCBpc09wZXJhdG9yTmFtZShTdHJpbmcgbmFtZSkgewogICAgaWYgKG5hbWUgPT0gTmFtZXMuSU5ERVhfU0VUX05BTUUudGV4dCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSBVbmFyeU9wZXJhdG9yLk5FR0FURS5zZWxlY3Rvck5hbWUpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gVW5hcnlPcGVyYXRvci5DT01QTEVNRU5ULnNlbGVjdG9yTmFtZSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBCaW5hcnlPcGVyYXRvci5wYXJzZVVzZXJEZWZpbmFibGUobmFtZSkgIT0gbnVsbDsKICAgIH0KICB9CgogIFNlbGVjdG9yLmludGVybmFsKAogICAgICB0aGlzLmtpbmQsIHRoaXMubWVtYmVyTmFtZSwgdGhpcy5jYWxsU3RydWN0dXJlLCB0aGlzLmhhc2hDb2RlKSB7CiAgICBhc3NlcnQoCiAgICAgICAga2luZCA9PSBTZWxlY3RvcktpbmQuSU5ERVggfHwKICAgICAgICAgICAgKG1lbWJlck5hbWUgIT0gTmFtZXMuSU5ERVhfTkFNRSAmJgogICAgICAgICAgICAgICAgbWVtYmVyTmFtZSAhPSBOYW1lcy5JTkRFWF9TRVRfTkFNRSksCiAgICAgICAgZmFpbGVkQXQoTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgICAia2luZD0ka2luZCxtZW1iZXJOYW1lPSRtZW1iZXJOYW1lLGNhbGxTdHJ1Y3R1cmU6JGNhbGxTdHJ1Y3R1cmUiKSk7CiAgICBhc3NlcnQoCiAgICAgICAga2luZCA9PSBTZWxlY3RvcktpbmQuT1BFUkFUT1IgfHwKICAgICAgICAgICAga2luZCA9PSBTZWxlY3RvcktpbmQuSU5ERVggfHwKICAgICAgICAgICAgIWlzT3BlcmF0b3JOYW1lKG1lbWJlck5hbWUudGV4dCkgfHwKICAgICAgICAgICAgbWVtYmVyTmFtZS50ZXh0ID09ICc/PycsCiAgICAgICAgZmFpbGVkQXQoTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgICAia2luZD0ka2luZCxtZW1iZXJOYW1lPSRtZW1iZXJOYW1lLGNhbGxTdHJ1Y3R1cmU6JGNhbGxTdHJ1Y3R1cmUiKSk7CiAgICBhc3NlcnQoCiAgICAgICAga2luZCA9PSBTZWxlY3RvcktpbmQuQ0FMTCB8fAogICAgICAgICAgICBraW5kID09IFNlbGVjdG9yS2luZC5HRVRURVIgfHwKICAgICAgICAgICAga2luZCA9PSBTZWxlY3RvcktpbmQuU0VUVEVSIHx8CiAgICAgICAgICAgIGlzT3BlcmF0b3JOYW1lKG1lbWJlck5hbWUudGV4dCkgfHwKICAgICAgICAgICAgbWVtYmVyTmFtZS50ZXh0ID09ICc/PycsCiAgICAgICAgZmFpbGVkQXQoTk9fTE9DQVRJT05fU1BBTk5BQkxFLAogICAgICAgICAgICAia2luZD0ka2luZCxtZW1iZXJOYW1lPSRtZW1iZXJOYW1lLGNhbGxTdHJ1Y3R1cmU6JGNhbGxTdHJ1Y3R1cmUiKSk7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBFeHRyYWN0IGNhY2hpbmcuCiAgc3RhdGljIE1hcDxpbnQsIExpc3Q8U2VsZWN0b3I+PiBjYW5vbmljYWxpemVkVmFsdWVzID0KICAgICAgbmV3IE1hcDxpbnQsIExpc3Q8U2VsZWN0b3I+PigpOwoKICBmYWN0b3J5IFNlbGVjdG9yKFNlbGVjdG9yS2luZCBraW5kLCBOYW1lIG5hbWUsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWF5YmUgdXNlIGVxdWFsaXR5IGluc3RlYWQgb2YgaW1wbGljaXQgaGFzaGluZy4KICAgIGludCBoYXNoQ29kZSA9IGNvbXB1dGVIYXNoQ29kZShraW5kLCBuYW1lLCBjYWxsU3RydWN0dXJlKTsKICAgIExpc3Q8U2VsZWN0b3I+IGxpc3QgPQogICAgICAgIGNhbm9uaWNhbGl6ZWRWYWx1ZXMucHV0SWZBYnNlbnQoaGFzaENvZGUsICgpID0+IDxTZWxlY3Rvcj5bXSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgU2VsZWN0b3IgZXhpc3RpbmcgPSBsaXN0W2ldOwogICAgICBpZiAoZXhpc3RpbmcubWF0Y2goa2luZCwgbmFtZSwgY2FsbFN0cnVjdHVyZSkpIHsKICAgICAgICBhc3NlcnQoZXhpc3RpbmcuaGFzaENvZGUgPT0gaGFzaENvZGUpOwogICAgICAgIHJldHVybiBleGlzdGluZzsKICAgICAgfQogICAgfQogICAgU2VsZWN0b3IgcmVzdWx0ID0KICAgICAgICBuZXcgU2VsZWN0b3IuaW50ZXJuYWwoa2luZCwgbmFtZSwgY2FsbFN0cnVjdHVyZSwgaGFzaENvZGUpOwogICAgbGlzdC5hZGQocmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBmYWN0b3J5IFNlbGVjdG9yLmZyb21FbGVtZW50KE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBOYW1lIG5hbWUgPSBlbGVtZW50Lm1lbWJlck5hbWU7CiAgICBpZiAoZWxlbWVudC5pc0Z1bmN0aW9uKSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gZWxlbWVudDsKICAgICAgaWYgKG5hbWUgPT0gTmFtZXMuSU5ERVhfTkFNRSkgewogICAgICAgIHJldHVybiBuZXcgU2VsZWN0b3IuaW5kZXgoKTsKICAgICAgfSBlbHNlIGlmIChuYW1lID09IE5hbWVzLklOREVYX1NFVF9OQU1FKSB7CiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rvci5pbmRleFNldCgpOwogICAgICB9CiAgICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZS5jYWxsU3RydWN0dXJlOwogICAgICBpZiAoaXNPcGVyYXRvck5hbWUoZWxlbWVudC5uYW1lKSkgewogICAgICAgIC8vIE9wZXJhdG9ycyBjYW5ub3QgaGF2ZSBuYW1lZCBhcmd1bWVudHMsIGhvd2V2ZXIsIHRoYXQgZG9lc24ndCBwcmV2ZW50CiAgICAgICAgLy8gYSB1c2VyIGZyb20gZGVjbGFyaW5nIHN1Y2ggYW4gb3BlcmF0b3IuCiAgICAgICAgcmV0dXJuIG5ldyBTZWxlY3RvcihTZWxlY3RvcktpbmQuT1BFUkFUT1IsIG5hbWUsIGNhbGxTdHJ1Y3R1cmUpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBuZXcgU2VsZWN0b3IuY2FsbChuYW1lLCBjYWxsU3RydWN0dXJlKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChlbGVtZW50LmlzU2V0dGVyKSB7CiAgICAgIHJldHVybiBuZXcgU2VsZWN0b3Iuc2V0dGVyKG5hbWUpOwogICAgfSBlbHNlIGlmIChlbGVtZW50LmlzR2V0dGVyKSB7CiAgICAgIHJldHVybiBuZXcgU2VsZWN0b3IuZ2V0dGVyKG5hbWUpOwogICAgfSBlbHNlIGlmIChlbGVtZW50LmlzRmllbGQpIHsKICAgICAgcmV0dXJuIG5ldyBTZWxlY3Rvci5nZXR0ZXIobmFtZSk7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNDb25zdHJ1Y3RvcikgewogICAgICByZXR1cm4gbmV3IFNlbGVjdG9yLmNhbGxDb25zdHJ1Y3RvcihuYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IGZhaWxlZEF0KGVsZW1lbnQsICJDYW4ndCBnZXQgc2VsZWN0b3IgZnJvbSAkZWxlbWVudCIpOwogICAgfQogIH0KCiAgZmFjdG9yeSBTZWxlY3Rvci5nZXR0ZXIoTmFtZSBuYW1lKSA9PgogICAgICBuZXcgU2VsZWN0b3IoU2VsZWN0b3JLaW5kLkdFVFRFUiwgbmFtZS5nZXR0ZXIsIENhbGxTdHJ1Y3R1cmUuTk9fQVJHUyk7CgogIGZhY3RvcnkgU2VsZWN0b3Iuc2V0dGVyKE5hbWUgbmFtZSkgPT4KICAgICAgbmV3IFNlbGVjdG9yKFNlbGVjdG9yS2luZC5TRVRURVIsIG5hbWUuc2V0dGVyLCBDYWxsU3RydWN0dXJlLk9ORV9BUkcpOwoKICBmYWN0b3J5IFNlbGVjdG9yLnVuYXJ5T3BlcmF0b3IoU3RyaW5nIG5hbWUpID0+IG5ldyBTZWxlY3RvcigKICAgICAgU2VsZWN0b3JLaW5kLk9QRVJBVE9SLAogICAgICBuZXcgUHVibGljTmFtZSh1dGlscy5jb25zdHJ1Y3RPcGVyYXRvck5hbWUobmFtZSwgdHJ1ZSkpLAogICAgICBDYWxsU3RydWN0dXJlLk5PX0FSR1MpOwoKICBmYWN0b3J5IFNlbGVjdG9yLmJpbmFyeU9wZXJhdG9yKFN0cmluZyBuYW1lKSA9PiBuZXcgU2VsZWN0b3IoCiAgICAgIFNlbGVjdG9yS2luZC5PUEVSQVRPUiwKICAgICAgbmV3IFB1YmxpY05hbWUodXRpbHMuY29uc3RydWN0T3BlcmF0b3JOYW1lKG5hbWUsIGZhbHNlKSksCiAgICAgIENhbGxTdHJ1Y3R1cmUuT05FX0FSRyk7CgogIGZhY3RvcnkgU2VsZWN0b3IuaW5kZXgoKSA9PgogICAgICBuZXcgU2VsZWN0b3IoU2VsZWN0b3JLaW5kLklOREVYLCBOYW1lcy5JTkRFWF9OQU1FLCBDYWxsU3RydWN0dXJlLk9ORV9BUkcpOwoKICBmYWN0b3J5IFNlbGVjdG9yLmluZGV4U2V0KCkgPT4gbmV3IFNlbGVjdG9yKAogICAgICBTZWxlY3RvcktpbmQuSU5ERVgsIE5hbWVzLklOREVYX1NFVF9OQU1FLCBDYWxsU3RydWN0dXJlLlRXT19BUkdTKTsKCiAgZmFjdG9yeSBTZWxlY3Rvci5jYWxsKE5hbWUgbmFtZSwgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSA9PgogICAgICBuZXcgU2VsZWN0b3IoU2VsZWN0b3JLaW5kLkNBTEwsIG5hbWUsIGNhbGxTdHJ1Y3R1cmUpOwoKICBmYWN0b3J5IFNlbGVjdG9yLmNhbGxDbG9zdXJlKGludCBhcml0eSwKICAgICAgICAgIFtMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsIGludCB0eXBlQXJndW1lbnRDb3VudCA9IDBdKSA9PgogICAgICBuZXcgU2VsZWN0b3IoU2VsZWN0b3JLaW5kLkNBTEwsIE5hbWVzLmNhbGwsCiAgICAgICAgICBuZXcgQ2FsbFN0cnVjdHVyZShhcml0eSwgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudENvdW50KSk7CgogIGZhY3RvcnkgU2VsZWN0b3IuY2FsbENsb3N1cmVGcm9tKFNlbGVjdG9yIHNlbGVjdG9yKSA9PgogICAgICBuZXcgU2VsZWN0b3IoU2VsZWN0b3JLaW5kLkNBTEwsIE5hbWVzLmNhbGwsIHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUpOwoKICBmYWN0b3J5IFNlbGVjdG9yLmNhbGxDb25zdHJ1Y3RvcihOYW1lIG5hbWUsCiAgICAgICAgICBbaW50IGFyaXR5ID0gMCwgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzXSkgPT4KICAgICAgbmV3IFNlbGVjdG9yKAogICAgICAgICAgU2VsZWN0b3JLaW5kLkNBTEwsIG5hbWUsIG5ldyBDYWxsU3RydWN0dXJlKGFyaXR5LCBuYW1lZEFyZ3VtZW50cykpOwoKICBmYWN0b3J5IFNlbGVjdG9yLmNhbGxEZWZhdWx0Q29uc3RydWN0b3IoKSA9PiBuZXcgU2VsZWN0b3IoCiAgICAgIFNlbGVjdG9yS2luZC5DQUxMLCBjb25zdCBQdWJsaWNOYW1lKCcnKSwgQ2FsbFN0cnVjdHVyZS5OT19BUkdTKTsKCiAgLy8gVE9ETygzMTk1Myk6IFJlbW92ZSB0aGlzIGlmIHdlIGNhbiBpbXBsZW1lbnQgdmlhIHN0YXRpYyBjYWxscy4KICBmYWN0b3J5IFNlbGVjdG9yLmdlbmVyaWNJbnN0YW50aWF0aW9uKGludCB0eXBlQXJndW1lbnRzKSA9PiBuZXcgU2VsZWN0b3IoCiAgICAgIFNlbGVjdG9yS2luZC5TUEVDSUFMLAogICAgICBOYW1lcy5nZW5lcmljSW5zdGFudGlhdGlvbiwKICAgICAgbmV3IENhbGxTdHJ1Y3R1cmUoMCwgbnVsbCwgdHlwZUFyZ3VtZW50cykpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW1NlbGVjdG9yXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IFNlbGVjdG9yLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBTZWxlY3RvcktpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShTZWxlY3RvcktpbmQudmFsdWVzKTsKICAgIGJvb2wgaXNTZXR0ZXIgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSA9IHNvdXJjZS5yZWFkTGlicmFyeU9yTnVsbCgpOwogICAgU3RyaW5nIHRleHQgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IENhbGxTdHJ1Y3R1cmUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IFNlbGVjdG9yKAogICAgICAgIGtpbmQsIG5ldyBOYW1lKHRleHQsIGxpYnJhcnksIGlzU2V0dGVyOiBpc1NldHRlciksIGNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbU2VsZWN0b3JdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRW51bShraW5kKTsKICAgIHNpbmsud3JpdGVCb29sKG1lbWJlck5hbWUuaXNTZXR0ZXIpOwogICAgc2luay53cml0ZUxpYnJhcnlPck51bGwobWVtYmVyTmFtZS5saWJyYXJ5KTsKICAgIHNpbmsud3JpdGVTdHJpbmcobWVtYmVyTmFtZS50ZXh0KTsKICAgIGNhbGxTdHJ1Y3R1cmUud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIGJvb2wgZ2V0IGlzR2V0dGVyID0+IGtpbmQgPT0gU2VsZWN0b3JLaW5kLkdFVFRFUjsKICBib29sIGdldCBpc1NldHRlciA9PiBraW5kID09IFNlbGVjdG9yS2luZC5TRVRURVI7CiAgYm9vbCBnZXQgaXNDYWxsID0+IGtpbmQgPT0gU2VsZWN0b3JLaW5kLkNBTEw7CiAgYm9vbCBnZXQgaXNDbG9zdXJlQ2FsbCA9PiBpc0NhbGwgJiYgbWVtYmVyTmFtZSA9PSBOYW1lcy5DQUxMX05BTUU7CgogIGJvb2wgZ2V0IGlzSW5kZXggPT4ga2luZCA9PSBTZWxlY3RvcktpbmQuSU5ERVggJiYgYXJndW1lbnRDb3VudCA9PSAxOwogIGJvb2wgZ2V0IGlzSW5kZXhTZXQgPT4ga2luZCA9PSBTZWxlY3RvcktpbmQuSU5ERVggJiYgYXJndW1lbnRDb3VudCA9PSAyOwoKICBib29sIGdldCBpc09wZXJhdG9yID0+IGtpbmQgPT0gU2VsZWN0b3JLaW5kLk9QRVJBVE9SOwogIGJvb2wgZ2V0IGlzVW5hcnlPcGVyYXRvciA9PiBpc09wZXJhdG9yICYmIGFyZ3VtZW50Q291bnQgPT0gMDsKCiAgLy8vIFRoZSBtZW1iZXIgbmFtZSBmb3IgaW52b2NhdGlvbiBtaXJyb3JzIGNyZWF0ZWQgZnJvbSB0aGlzIHNlbGVjdG9yLgogIFN0cmluZyBnZXQgaW52b2NhdGlvbk1pcnJvck1lbWJlck5hbWUgPT4gaXNTZXR0ZXIgPyAnJG5hbWU9JyA6IG5hbWU7CgogIGludCBnZXQgaW52b2NhdGlvbk1pcnJvcktpbmQgewogICAgaW50IGtpbmQgPSBpbnZvY2F0aW9uTWlycm9yTWV0aG9kS2luZDsKICAgIGlmIChpc0dldHRlcikgewogICAgICBraW5kID0gaW52b2NhdGlvbk1pcnJvckdldHRlcktpbmQ7CiAgICB9IGVsc2UgaWYgKGlzU2V0dGVyKSB7CiAgICAgIGtpbmQgPSBpbnZvY2F0aW9uTWlycm9yU2V0dGVyS2luZDsKICAgIH0KICAgIHJldHVybiBraW5kOwogIH0KCiAgYm9vbCBhcHBsaWVzVW5uYW1lZChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KG5hbWUgPT0gZWxlbWVudC5uYW1lKTsKICAgIGlmIChtZW1iZXJOYW1lLmlzUHJpdmF0ZSAmJiBtZW1iZXJOYW1lLmxpYnJhcnkgIT0gZWxlbWVudC5saWJyYXJ5KSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1heWJlIHRoaXMgc2hvdWxkIGJlCiAgICAgIC8vIGBtZW1iZXJOYW1lICE9IGVsZW1lbnQubWVtYmVyTmFtZWAuCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChlbGVtZW50LmlzU2V0dGVyKSByZXR1cm4gaXNTZXR0ZXI7CiAgICBpZiAoZWxlbWVudC5pc0dldHRlcikgcmV0dXJuIGlzR2V0dGVyIHx8IGlzQ2FsbDsKICAgIGlmIChlbGVtZW50LmlzRmllbGQpIHsKICAgICAgcmV0dXJuIGlzU2V0dGVyID8gZWxlbWVudC5pc0Fzc2lnbmFibGUgOiBpc0dldHRlciB8fCBpc0NhbGw7CiAgICB9CiAgICBpZiAoaXNHZXR0ZXIpIHJldHVybiB0cnVlOwogICAgaWYgKGlzU2V0dGVyKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc2lnbmF0dXJlQXBwbGllcyhlbGVtZW50KTsKICB9CgogIC8vLyBXaGV0aGVyIFt0aGlzXSBjb3VsZCBiZSBhIHZhbGlkIHNlbGVjdG9yIG9uIGBOdWxsYCB3aXRob3V0IHRocm93aW5nLgogIGJvb2wgYXBwbGllc1RvTnVsbFdpdGhvdXRUaHJvdygpIHsKICAgIHZhciBuYW1lID0gdGhpcy5uYW1lOwogICAgaWYgKGlzT3BlcmF0b3IgJiYgbmFtZSA9PSAiPT0iKSByZXR1cm4gdHJ1ZTsKICAgIC8vIEtub3duIGdldHRlcnMgYW5kIHZhbGlkIHRlYXItb2Zmcy4KICAgIGlmIChpc0dldHRlciAmJgogICAgICAgIChuYW1lID09ICJoYXNoQ29kZSIgfHwKICAgICAgICAgICAgbmFtZSA9PSAicnVudGltZVR5cGUiIHx8CiAgICAgICAgICAgIG5hbWUgPT0gInRvU3RyaW5nIiB8fAogICAgICAgICAgICBuYW1lID09ICJub1N1Y2hNZXRob2QiKSkgcmV0dXJuIHRydWU7CiAgICAvLyBDYWxsaW5nIHRvU3RyaW5nIGFsd2F5cyBzdWNjZWVkcywgY2FsbHMgdG8gYG5vU3VjaE1ldGhvZGAgKGV2ZW4gd2VsbAogICAgLy8gZm9ybWVkIGNhbGxzKSBhbHdheXMgdGhyb3cuCiAgICBpZiAoaXNDYWxsICYmCiAgICAgICAgbmFtZSA9PSAidG9TdHJpbmciICYmCiAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50Q291bnQgPT0gMCAmJgogICAgICAgIG5hbWVkQXJndW1lbnRDb3VudCA9PSAwKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgYm9vbCBzaWduYXR1cmVBcHBsaWVzKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICByZXR1cm4gY2FsbFN0cnVjdHVyZS5zaWduYXR1cmVBcHBsaWVzKGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZSk7CiAgfQoKICBib29sIGFwcGxpZXMoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChuYW1lICE9IGVsZW1lbnQubmFtZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGFwcGxpZXNVbm5hbWVkKGVsZW1lbnQpOwogIH0KCiAgYm9vbCBtYXRjaChTZWxlY3RvcktpbmQga2luZCwgTmFtZSBtZW1iZXJOYW1lLCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpIHsKICAgIHJldHVybiB0aGlzLmtpbmQgPT0ga2luZCAmJgogICAgICAgIHRoaXMubWVtYmVyTmFtZSA9PSBtZW1iZXJOYW1lICYmCiAgICAgICAgdGhpcy5jYWxsU3RydWN0dXJlLm1hdGNoKGNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgc3RhdGljIGludCBjb21wdXRlSGFzaENvZGUoCiAgICAgIFNlbGVjdG9yS2luZCBraW5kLCBOYW1lIG5hbWUsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgLy8gQWRkIGJpdHMgZnJvbSBuYW1lIGFuZCBraW5kLgogICAgaW50IGhhc2ggPSBIYXNoaW5nLm1peEhhc2hDb2RlQml0cyhuYW1lLmhhc2hDb2RlLCBraW5kLmhhc2hDb2RlKTsKICAgIC8vIEFkZCBiaXRzIGZyb20gdGhlIGNhbGwgc3RydWN0dXJlLgogICAgcmV0dXJuIEhhc2hpbmcubWl4SGFzaENvZGVCaXRzKGhhc2gsIGNhbGxTdHJ1Y3R1cmUuaGFzaENvZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdTZWxlY3Rvcigka2luZCwgJG5hbWUsICR7Y2FsbFN0cnVjdHVyZS5zdHJ1Y3R1cmVUb1N0cmluZygpfSknOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG5vcm1hbGl6ZWQgdmVyc2lvbiBvZiB0aGlzIHNlbGVjdG9yLgogIC8vLwogIC8vLyBBIHNlbGVjdG9yIGlzIG5vcm1hbGl6ZWQgaWYgaXRzIGNhbGwgc3RydWN0dXJlIGlzIG5vcm1hbGl6ZWQuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIG5vcm1hbGl6ZWQgc2VsZWN0b3JzIGFzIG11Y2ggYXMgcG9zc2libGUsCiAgLy8gZXNwZWNpYWxseSB3aGVyZSBzZWxlY3RvcnMgYXJlIHVzZWQgaW4gc2V0cyBvciBhcyBrZXlzIGluIG1hcHMuCiAgU2VsZWN0b3IgdG9Ob3JtYWxpemVkKCkgPT4gY2FsbFN0cnVjdHVyZS5pc05vcm1hbGl6ZWQKICAgICAgPyB0aGlzCiAgICAgIDogbmV3IFNlbGVjdG9yKGtpbmQsIG1lbWJlck5hbWUsIGNhbGxTdHJ1Y3R1cmUudG9Ob3JtYWxpemVkKCkpOwoKICBTZWxlY3RvciB0b0NhbGxTZWxlY3RvcigpID0+IG5ldyBTZWxlY3Rvci5jYWxsQ2xvc3VyZUZyb20odGhpcyk7CgogIC8vLyBSZXR1cm5zIHRoZSBub24tZ2VuZXJpYyBbU2VsZWN0b3JdIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBzZWxlY3Rvci4KICBTZWxlY3RvciB0b05vbkdlbmVyaWMoKSB7CiAgICByZXR1cm4gY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCA+IDAKICAgICAgICA/IG5ldyBTZWxlY3RvcihraW5kLCBtZW1iZXJOYW1lLCBjYWxsU3RydWN0dXJlLm5vbkdlbmVyaWMpCiAgICAgICAgOiB0aGlzOwogIH0KfQqBUQBOTjwBGgEZKiQxISU1LikxARUVDBYwAUZGQkpESAEdAQwdATsMDAoOCwwFAgERTBMoARsZJQEMFgE4QkxAQwEmATMBLC0TPBNAEw0+BgQBFUcMJi81KFAMKSowJShQDCUrKy8lKFAEASs4JgFQTD8aRywjNy8ZCAYWRBYTBAE3JB4pJiUxKAhPKlAzSQ83CCMoIygiKCgxDUMGBAEoTQEoTQE/HT8eAUAdQB4BHlEBL0kBQzwBKkcySAE5SwEuOxROAT1HAURMHCIyATY7Fz4nOCdQFRlLBAEsKBUaKTEnKRMEATQ0MEUBSEsBOEABSUcBISsUKRspBhEEAS4iSTMtFAYrNRtDBh8gJgQBSyUaMSoUHyUiMkwjEh4oIxMGEgQBM0gEAScsJAQBUCApMQQBHkMkRilCBAEMFksEATcGREhFOA1GAUMBSRwvQxAEAgErcGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2Uvc2VsZWN0b3IuZGFydEFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91bml2ZXJzZS9jb2RlZ2VuX3dvcmxkX2J1aWxkZXIuZGFydMAAe8YvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgSWRlbnRpZmllcnM7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnIHNob3cgT25lU2hvdEludGVyY2VwdG9yRGF0YTsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnIHNob3cgTmF0aXZlQmFzaWNEYXRhOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvZW51bXNldC5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CmltcG9ydCAnY2FsbF9zdHJ1Y3R1cmUuZGFydCc7CmltcG9ydCAnbWVtYmVyX3VzYWdlLmRhcnQnOwppbXBvcnQgJ3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAndXNlLmRhcnQnCiAgICBzaG93IENvbnN0YW50VXNlLCBEeW5hbWljVXNlLCBEeW5hbWljVXNlS2luZCwgU3RhdGljVXNlLCBTdGF0aWNVc2VLaW5kOwppbXBvcnQgJ3dvcmxkX2J1aWxkZXIuZGFydCc7CgovLy8gV29ybGQgYnVpbGRlciBzcGVjaWZpYyB0byBjb2RlZ2VuLgovLy8KLy8vIFRoaXMgYWRkcyBhZGRpdGlvbmFsIGFjY2VzcyB0byBsaXZlbmVzcyBvZiBzZWxlY3RvcnMgYW5kIGVsZW1lbnRzLgphYnN0cmFjdCBjbGFzcyBDb2RlZ2VuV29ybGRCdWlsZGVyIGltcGxlbWVudHMgV29ybGRCdWlsZGVyIHsKICAvLy8gUmVnaXN0ZXIgW2NvbnN0YW50XSBhcyBuZWVkZWQgZm9yIGVtaXNzaW9uLgogIHZvaWQgYWRkQ29tcGlsZVRpbWVDb25zdGFudEZvckVtaXNzaW9uKENvbnN0YW50VmFsdWUgY29uc3RhbnQpOwoKICAvLy8gQ2xvc2UgdGhlIGNvZGVnZW4gd29ybGQgYnVpbGRlciBhbmQgcmV0dXJuIHRoZSBpbW11dGFibGUgW0NvZGVnZW5Xb3JsZF0KICAvLy8gYXMgdGhlIHJlc3VsdC4KICBDb2RlZ2VuV29ybGQgY2xvc2UoKTsKfQoKLy8gVGhlIGltbXV0YWJsZSByZXN1bHQgb2YgdGhlIFtDb2RlZ2VuV29ybGRCdWlsZGVyXS4KYWJzdHJhY3QgY2xhc3MgQ29kZWdlbldvcmxkIGV4dGVuZHMgQnVpbHRXb3JsZCB7CiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBnZW5lcmljIGNhbGwgbWV0aG9kIG9uIGEgbGl2ZSBjbG9zdXJlIGNsYXNzLgogIHZvaWQgZm9yRWFjaEdlbmVyaWNDbG9zdXJlQ2FsbE1ldGhvZCh2b2lkIEZ1bmN0aW9uKEZ1bmN0aW9uRW50aXR5KSBmKTsKCiAgYm9vbCBoYXNJbnZva2VkR2V0dGVyKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW21lbWJlcl0gaXMgaW52b2tlZCBhcyBhIHNldHRlci4KICBib29sIGhhc0ludm9rZWRTZXR0ZXIoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gaW52b2NhdGlvbnNCeU5hbWUoU3RyaW5nIG5hbWUpOwoKICBJdGVyYWJsZTxTZWxlY3Rvcj4gZ2V0dGVySW52b2NhdGlvbnNCeU5hbWUoU3RyaW5nIG5hbWUpOwoKICBJdGVyYWJsZTxTZWxlY3Rvcj4gc2V0dGVySW52b2NhdGlvbnNCeU5hbWUoU3RyaW5nIG5hbWUpOwoKICB2b2lkIGZvckVhY2hJbnZva2VkTmFtZSgKICAgICAgZihTdHJpbmcgbmFtZSwgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBzZWxlY3RvcnMpKTsKCiAgdm9pZCBmb3JFYWNoSW52b2tlZEdldHRlcigKICAgICAgZihTdHJpbmcgbmFtZSwgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBzZWxlY3RvcnMpKTsKCiAgdm9pZCBmb3JFYWNoSW52b2tlZFNldHRlcigKICAgICAgZihTdHJpbmcgbmFtZSwgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBzZWxlY3RvcnMpKTsKCiAgLy8vIEFsbCBkaXJlY3RseSBpbnN0YW50aWF0ZWQgY2xhc3NlcywgdGhhdCBpcywgY2xhc3NlcyB3aXRoIGEgZ2VuZXJhdGl2ZQogIC8vLyBjb25zdHJ1Y3RvciB0aGF0IGhhcyBiZWVuIGNhbGxlZCBkaXJlY3RseSBhbmQgbm90IG9ubHkgdGhyb3VnaCBhCiAgLy8vIHN1cGVyLWNhbGwuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW1wcm92ZSBzZW1hbnRpYyBwcmVjaXNpb24uCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBkaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXM7CgogIC8vLyBBbGwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbnN0YW50aWF0ZWQgY2xhc3Nlcy4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGluc3RhbnRpYXRlZENsYXNzZXM7CgogIGJvb2wgbWV0aG9kc05lZWRzU3VwZXJHZXR0ZXIoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pOwoKICAvLy8gVGhlIGNhbGxzIFtmXSBmb3IgYWxsIHN0YXRpYyBmaWVsZHMuCiAgdm9pZCBmb3JFYWNoU3RhdGljRmllbGQodm9pZCBGdW5jdGlvbihGaWVsZEVudGl0eSkgZik7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlcyB0aGF0IGFyZSBsaXZlIGFzIGNvbnN0YW50IHR5cGUgbGl0ZXJhbHMuCiAgSXRlcmFibGU8RGFydFR5cGU+IGdldCBjb25zdFR5cGVMaXRlcmFsczsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGVzIHRoYXQgYXJlIGxpdmUgYXMgY29uc3RhbnQgdHlwZSBhcmd1bWVudHMuCiAgSXRlcmFibGU8RGFydFR5cGU+IGdldCBsaXZlVHlwZUFyZ3VtZW50czsKCiAgLy8vIFJldHVybnMgYSBsaXN0IG9mIGNvbnN0YW50cyB0b3BvbG9naWNhbGx5IHNvcnRlZCBzbyB0aGF0IGRlcGVuZGVuY2llcwogIC8vLyBhcHBlYXIgYmVmb3JlIHRoZSBkZXBlbmRlbnQgY29uc3RhbnQuCiAgLy8vCiAgLy8vIFtwcmVTb3J0Q29tcGFyZV0gaXMgYSBjb21wYXJhdG9yIGZ1bmN0aW9uIHRoYXQgZ2l2ZXMgdGhlIGNvbnN0YW50cyBhCiAgLy8vIGNvbnNpc3RlbnQgb3JkZXIgcHJpb3IgdG8gdGhlIHRvcG9sb2dpY2FsIHNvcnQgd2hpY2ggZ2l2ZXMgdGhlIGNvbnN0YW50cwogIC8vLyBhbiBvcmRlcmluZyB0aGF0IGlzIGxlc3Mgc2Vuc2l0aXZlIHRvIHBlcnR1cmJhdGlvbnMgaW4gdGhlIHNvdXJjZSBjb2RlLgogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldENvbnN0YW50c0ZvckVtaXNzaW9uKAogICAgICBbQ29tcGFyYXRvcjxDb25zdGFudFZhbHVlPiBwcmVTb3J0Q29tcGFyZV0pOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW21lbWJlcl0gaXMgY2FsbGVkIGZyb20gYSBzdWJjbGFzcyB2aWEgYHN1cGVyYC4KICBib29sIGlzQWxpYXNlZFN1cGVyTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICBPbmVTaG90SW50ZXJjZXB0b3JEYXRhIGdldCBvbmVTaG90SW50ZXJjZXB0b3JEYXRhOwp9CgpjbGFzcyBDb2RlZ2VuV29ybGRCdWlsZGVySW1wbCBleHRlbmRzIFdvcmxkQnVpbGRlckJhc2UKICAgIGltcGxlbWVudHMgQ29kZWdlbldvcmxkQnVpbGRlciB7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBPbmVTaG90SW50ZXJjZXB0b3JEYXRhIF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhOwoKICAvLy8gVGhlIHNldCBvZiBhbGwgZGlyZWN0bHkgaW5zdGFudGlhdGVkIGNsYXNzZXMsIHRoYXQgaXMsIGNsYXNzZXMgd2l0aCBhCiAgLy8vIGdlbmVyYXRpdmUgY29uc3RydWN0b3IgdGhhdCBoYXMgYmVlbiBjYWxsZWQgZGlyZWN0bHkgYW5kIG5vdCBvbmx5IHRocm91Z2gKICAvLy8gYSBzdXBlci1jYWxsLgogIC8vLwogIC8vLyBJbnZhcmlhbnQ6IEVsZW1lbnRzIGFyZSBkZWNsYXJhdGlvbiBlbGVtZW50cy4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBbX2RpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3Nlc10gYW5kCiAgLy8gW19pbnN0YW50aWF0ZWRUeXBlc10gc2V0cyBzaG91bGQgYmUgbWVyZ2VkLgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX2RpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogIC8vLyBUaGUgc2V0IG9mIGFsbCBkaXJlY3RseSBpbnN0YW50aWF0ZWQgdHlwZXMsIHRoYXQgaXMsIHRoZSB0eXBlcyBvZiB0aGUKICAvLy8gZGlyZWN0bHkgaW5zdGFudGlhdGVkIGNsYXNzZXMuCiAgLy8vCiAgLy8vIFNlZSBbX2RpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3Nlc10uCiAgZmluYWwgU2V0PEludGVyZmFjZVR5cGU+IF9pbnN0YW50aWF0ZWRUeXBlcyA9IG5ldyBTZXQ8SW50ZXJmYWNlVHlwZT4oKTsKCiAgLy8vIENsYXNzZXMgaW1wbGVtZW50ZWQgYnkgZGlyZWN0bHkgaW5zdGFudGlhdGVkIGNsYXNzZXMuCiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBfaW1wbGVtZW50ZWRDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgZmluYWwgTWFwPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj4gX2ludm9rZWROYW1lcyA9CiAgICAgIDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+e307CiAgZmluYWwgTWFwPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj4gX2ludm9rZWRHZXR0ZXJzID0KICAgICAgPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj57fTsKICBmaW5hbCBNYXA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+PiBfaW52b2tlZFNldHRlcnMgPQogICAgICA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+Pnt9OwoKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIENsYXNzVXNhZ2U+IF9wcm9jZXNzZWRDbGFzc2VzID0KICAgICAgPENsYXNzRW50aXR5LCBDbGFzc1VzYWdlPnt9OwoKICBNYXA8Q2xhc3NFbnRpdHksIENsYXNzVXNhZ2U+IGdldCBjbGFzc1VzYWdlRm9yVGVzdGluZyA9PiBfcHJvY2Vzc2VkQ2xhc3NlczsKCiAgLy8vIE1hcCBvZiByZWdpc3RlcmVkIHVzYWdlIG9mIHN0YXRpYyBhbmQgaW5zdGFuY2UgbWVtYmVycy4KICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBNZW1iZXJVc2FnZT4gX21lbWJlclVzYWdlID0KICAgICAgPE1lbWJlckVudGl0eSwgTWVtYmVyVXNhZ2U+e307CgogIC8vLyBNYXAgY29udGFpbmluZyBpbnN0YW5jZSBtZW1iZXJzIG9mIGxpdmUgY2xhc3NlcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuCiAgLy8vIGZ1bGx5IGludm9rZWQgZHluYW1pY2FsbHkuCiAgLy8vCiAgLy8vIEEgbWV0aG9kIGlzIGZ1bGx5IGludm9rZWQgaWYgYWxsIGlzIG9wdGlvbmFsIHBhcmFtZXRlciBoYXZlIGJlZW4gcGFzc2VkCiAgLy8vIGluIHNvbWUgaW52b2NhdGlvbi4KICBmaW5hbCBNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+PiBfaW52b2thYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lID0KICAgICAgPFN0cmluZywgU2V0PE1lbWJlclVzYWdlPj57fTsKCiAgLy8vIE1hcCBjb250YWluaW5nIGluc3RhbmNlIG1lbWJlcnMgb2YgbGl2ZSBjbGFzc2VzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4KICAvLy8gcmVhZCBmcm9tIGR5bmFtaWNhbGx5LgogIGZpbmFsIE1hcDxTdHJpbmcsIFNldDxNZW1iZXJVc2FnZT4+IF9yZWFkYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZSA9CiAgICAgIDxTdHJpbmcsIFNldDxNZW1iZXJVc2FnZT4+e307CgogIC8vLyBNYXAgY29udGFpbmluZyBpbnN0YW5jZSBtZW1iZXJzIG9mIGxpdmUgY2xhc3NlcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuCiAgLy8vIHdyaXR0ZW4gdG8gZHluYW1pY2FsbHkuCiAgZmluYWwgTWFwPFN0cmluZywgU2V0PE1lbWJlclVzYWdlPj4gX3dyaXRhYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lID0KICAgICAgPFN0cmluZywgU2V0PE1lbWJlclVzYWdlPj57fTsKCiAgZmluYWwgU2V0PERhcnRUeXBlPiBfaXNDaGVja3MgPSBuZXcgU2V0PERhcnRUeXBlPigpOwoKICBmaW5hbCBTZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3kgX3NlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneTsKCiAgZmluYWwgU2V0PENvbnN0YW50VmFsdWU+IF9jb25zdGFudFZhbHVlcyA9IG5ldyBTZXQ8Q29uc3RhbnRWYWx1ZT4oKTsKCiAgZmluYWwgU2V0PERhcnRUeXBlPiBfY29uc3RUeXBlTGl0ZXJhbHMgPSBuZXcgU2V0PERhcnRUeXBlPigpOwogIGZpbmFsIFNldDxEYXJ0VHlwZT4gX2xpdmVUeXBlQXJndW1lbnRzID0gbmV3IFNldDxEYXJ0VHlwZT4oKTsKCiAgQ29kZWdlbldvcmxkQnVpbGRlckltcGwodGhpcy5fY2xvc2VkV29ybGQsIHRoaXMuX3NlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneSwKICAgICAgdGhpcy5fb25lU2hvdEludGVyY2VwdG9yRGF0YSk7CgogIEVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PiBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50OwoKICBOYXRpdmVCYXNpY0RhdGEgZ2V0IF9uYXRpdmVCYXNpY0RhdGEgPT4gX2Nsb3NlZFdvcmxkLm5hdGl2ZURhdGE7CgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgaW5zdGFudGlhdGVkQ2xhc3NlcyA9PiBfcHJvY2Vzc2VkQ2xhc3Nlcy5rZXlzCiAgICAgIC53aGVyZSgoY2xzKSA9PiBfcHJvY2Vzc2VkQ2xhc3Nlc1tjbHNdLmlzSW5zdGFudGlhdGVkKTsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW1wcm92ZSBzZW1hbnRpYyBwcmVjaXNpb24uCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBkaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXMgewogICAgcmV0dXJuIF9kaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXM7CiAgfQoKICAvLy8gUmVnaXN0ZXIgW3R5cGVdIGFzIChkaXJlY3RseSkgaW5zdGFudGlhdGVkLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEZ1bGx5IGVuZm9yY2UgdGhlIHNlcGFyYXRpb24gYmV0d2VlbiBleGFjdCwgdGhyb3VnaAogIC8vIHN1YmNsYXNzIGFuZCB0aHJvdWdoIHN1YnR5cGUgaW5zdGFudGlhdGVkIHR5cGVzL2NsYXNzZXMuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCB1bmtub3duIHR5cGUgYXJndW1lbnRzIGZvciBnZW5lcmljIHR5cGVzLgogIHZvaWQgcmVnaXN0ZXJUeXBlSW5zdGFudGlhdGlvbigKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLCBDbGFzc1VzZWRDYWxsYmFjayBjbGFzc1VzZWQpIHsKICAgIENsYXNzRW50aXR5IGNscyA9IHR5cGUuZWxlbWVudDsKICAgIGJvb2wgaXNOYXRpdmUgPSBfbmF0aXZlQmFzaWNEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKTsKICAgIF9pbnN0YW50aWF0ZWRUeXBlcy5hZGQodHlwZSk7CiAgICAvLyBXZSBjYW4ndCB1c2UgdGhlIGNsb3NlZC13b3JsZCBhc3N1bXB0aW9uIHdpdGggbmF0aXZlIGFic3RyYWN0CiAgICAvLyBjbGFzc2VzOyBhIG5hdGl2ZSBhYnN0cmFjdCBjbGFzcyBtYXkgaGF2ZSBub24tYWJzdHJhY3Qgc3ViY2xhc3NlcwogICAgLy8gbm90IGRlY2xhcmVkIHRvIHRoZSBwcm9ncmFtLiAgSW5zdGFuY2VzIG9mIHRoZXNlIGNsYXNzZXMgYXJlCiAgICAvLyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIHRoZSBhYnN0cmFjdCBjbGFzcy4KICAgIGlmICghY2xzLmlzQWJzdHJhY3QgfHwgaXNOYXRpdmUpIHsKICAgICAgX2RpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3Nlcy5hZGQoY2xzKTsKICAgICAgX3Byb2Nlc3NJbnN0YW50aWF0ZWRDbGFzcyhjbHMsIGNsYXNzVXNlZCk7CiAgICB9CgogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVwbGFjZSB0aGlzIGJ5IHNlcGFyYXRlIG1vcmUgc3BlY2lmaWMgbWFwcGluZ3MgdGhhdAogICAgLy8gaW5jbHVkZSB0aGUgdHlwZSBhcmd1bWVudHMuCiAgICBpZiAoX2ltcGxlbWVudGVkQ2xhc3Nlcy5hZGQoY2xzKSkgewogICAgICBjbGFzc1VzZWQoY2xzLCBfZ2V0Q2xhc3NVc2FnZShjbHMpLmltcGxlbWVudCgpKTsKICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoU3VwZXJ0eXBlKGNscywgKEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlKSB7CiAgICAgICAgaWYgKF9pbXBsZW1lbnRlZENsYXNzZXMuYWRkKHN1cGVydHlwZS5lbGVtZW50KSkgewogICAgICAgICAgY2xhc3NVc2VkKAogICAgICAgICAgICAgIHN1cGVydHlwZS5lbGVtZW50LCBfZ2V0Q2xhc3NVc2FnZShzdXBlcnR5cGUuZWxlbWVudCkuaW1wbGVtZW50KCkpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQoKICBib29sIF9oYXNNYXRjaGluZ1NlbGVjdG9yKE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzLAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLCBKQ2xvc2VkV29ybGQgd29ybGQpIHsKICAgIGlmIChzZWxlY3RvcnMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChTZWxlY3RvciBzZWxlY3RvciBpbiBzZWxlY3RvcnMua2V5cykgewogICAgICBpZiAoc2VsZWN0b3IuYXBwbGllc1VubmFtZWQobWVtYmVyKSkgewogICAgICAgIFNlbGVjdG9yQ29uc3RyYWludHMgbWFza3MgPSBzZWxlY3RvcnNbc2VsZWN0b3JdOwogICAgICAgIGlmIChtYXNrcy5jYW5IaXQobWVtYmVyLCBzZWxlY3Rvci5tZW1iZXJOYW1lLCB3b3JsZCkpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgSXRlcmFibGU8Q2FsbFN0cnVjdHVyZT4gX2dldE1hdGNoaW5nQ2FsbFN0cnVjdHVyZXMoCiAgICAgIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBpZiAoc2VsZWN0b3JzID09IG51bGwpIHJldHVybiBjb25zdCA8Q2FsbFN0cnVjdHVyZT5bXTsKICAgIFNldDxDYWxsU3RydWN0dXJlPiBjYWxsU3RydWN0dXJlczsKICAgIGZvciAoU2VsZWN0b3Igc2VsZWN0b3IgaW4gc2VsZWN0b3JzLmtleXMpIHsKICAgICAgaWYgKHNlbGVjdG9yLmFwcGxpZXNVbm5hbWVkKG1lbWJlcikpIHsKICAgICAgICBTZWxlY3RvckNvbnN0cmFpbnRzIG1hc2tzID0gc2VsZWN0b3JzW3NlbGVjdG9yXTsKICAgICAgICBpZiAobWFza3MuY2FuSGl0KG1lbWJlciwgc2VsZWN0b3IubWVtYmVyTmFtZSwgX2Nsb3NlZFdvcmxkKSkgewogICAgICAgICAgY2FsbFN0cnVjdHVyZXMgPz89IG5ldyBTZXQ8Q2FsbFN0cnVjdHVyZT4oKTsKICAgICAgICAgIGNhbGxTdHJ1Y3R1cmVzLmFkZChzZWxlY3Rvci5jYWxsU3RydWN0dXJlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjYWxsU3RydWN0dXJlcyA/PyBjb25zdCA8Q2FsbFN0cnVjdHVyZT5bXTsKICB9CgogIEl0ZXJhYmxlPENhbGxTdHJ1Y3R1cmU+IF9nZXRJbnZvY2F0aW9uQ2FsbFN0cnVjdHVyZXMoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF9nZXRNYXRjaGluZ0NhbGxTdHJ1Y3R1cmVzKF9pbnZva2VkTmFtZXNbbWVtYmVyLm5hbWVdLCBtZW1iZXIpOwogIH0KCiAgYm9vbCBfaGFzSW52b2tlZEdldHRlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gX2hhc01hdGNoaW5nU2VsZWN0b3IoCiAgICAgICAgX2ludm9rZWRHZXR0ZXJzW21lbWJlci5uYW1lXSwgbWVtYmVyLCBfY2xvc2VkV29ybGQpOwogIH0KCiAgYm9vbCBfaGFzSW52b2tlZFNldHRlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICByZXR1cm4gX2hhc01hdGNoaW5nU2VsZWN0b3IoCiAgICAgICAgX2ludm9rZWRTZXR0ZXJzW21lbWJlci5uYW1lXSwgbWVtYmVyLCBfY2xvc2VkV29ybGQpOwogIH0KCiAgdm9pZCByZWdpc3RlckR5bmFtaWNVc2UoCiAgICAgIER5bmFtaWNVc2UgZHluYW1pY1VzZSwgTWVtYmVyVXNlZENhbGxiYWNrIG1lbWJlclVzZWQpIHsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gZHluYW1pY1VzZS5zZWxlY3RvcjsKICAgIFN0cmluZyBtZXRob2ROYW1lID0gc2VsZWN0b3IubmFtZTsKCiAgICB2b2lkIF9wcm9jZXNzKAogICAgICAgIE1hcDxTdHJpbmcsIFNldDxNZW1iZXJVc2FnZT4+IG1lbWJlck1hcCwKICAgICAgICBFbnVtU2V0PE1lbWJlclVzZT4gYWN0aW9uKE1lbWJlclVzYWdlIHVzYWdlKSwKICAgICAgICBib29sIHNob3VsZEJlUmVtb3ZlZChNZW1iZXJVc2FnZSB1c2FnZSkpIHsKICAgICAgX3Byb2Nlc3NTZXQobWVtYmVyTWFwLCBtZXRob2ROYW1lLCAoTWVtYmVyVXNhZ2UgdXNhZ2UpIHsKICAgICAgICBpZiAoc2VsZWN0b3IuYXBwbGllc1VubmFtZWQodXNhZ2UuZW50aXR5KSAmJgogICAgICAgICAgICBfc2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5LmFwcGxpZWRVbm5hbWVkKAogICAgICAgICAgICAgICAgZHluYW1pY1VzZSwgdXNhZ2UuZW50aXR5LCBfY2xvc2VkV29ybGQpKSB7CiAgICAgICAgICBtZW1iZXJVc2VkKHVzYWdlLmVudGl0eSwgYWN0aW9uKHVzYWdlKSk7CiAgICAgICAgICByZXR1cm4gc2hvdWxkQmVSZW1vdmVkKHVzYWdlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9KTsKICAgIH0KCiAgICBzd2l0Y2ggKGR5bmFtaWNVc2Uua2luZCkgewogICAgICBjYXNlIER5bmFtaWNVc2VLaW5kLklOVk9LRToKICAgICAgICByZWdpc3RlckR5bmFtaWNJbnZvY2F0aW9uKAogICAgICAgICAgICBkeW5hbWljVXNlLnNlbGVjdG9yLCBkeW5hbWljVXNlLnR5cGVBcmd1bWVudHMpOwogICAgICAgIGlmIChfcmVnaXN0ZXJOZXdTZWxlY3RvcihkeW5hbWljVXNlLCBfaW52b2tlZE5hbWVzKSkgewogICAgICAgICAgX3Byb2Nlc3MoCiAgICAgICAgICAgICAgX2ludm9rYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZSwKICAgICAgICAgICAgICAobSkgPT4gbS5pbnZva2UoQWNjZXNzZXMuZHluYW1pY0FjY2Vzcywgc2VsZWN0b3IuY2FsbFN0cnVjdHVyZSksCiAgICAgICAgICAgICAgLy8gSWYgbm90IGFsbCBvcHRpb25hbCBwYXJhbWV0ZXJzIGhhdmUgYmVlbiBwYXNzZWQgaW4gaW52b2NhdGlvbnMKICAgICAgICAgICAgICAvLyB3ZSBtdXN0IGtlZXAgdGhlIG1lbWJlciBpbiBbX2ludm9rYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZV0uCiAgICAgICAgICAgICAgKHUpID0+ICF1Lmhhc1BlbmRpbmdEeW5hbWljSW52b2tlKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRHluYW1pY1VzZUtpbmQuR0VUOgogICAgICAgIGlmIChfcmVnaXN0ZXJOZXdTZWxlY3RvcihkeW5hbWljVXNlLCBfaW52b2tlZEdldHRlcnMpKSB7CiAgICAgICAgICBfcHJvY2VzcygKICAgICAgICAgICAgICBfcmVhZGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUsCiAgICAgICAgICAgICAgKG0pID0+IG0ucmVhZChBY2Nlc3Nlcy5keW5hbWljQWNjZXNzKSwKICAgICAgICAgICAgICAodSkgPT4gIXUuaGFzUGVuZGluZ0R5bmFtaWNSZWFkKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRHluYW1pY1VzZUtpbmQuU0VUOgogICAgICAgIGlmIChfcmVnaXN0ZXJOZXdTZWxlY3RvcihkeW5hbWljVXNlLCBfaW52b2tlZFNldHRlcnMpKSB7CiAgICAgICAgICBfcHJvY2VzcygKICAgICAgICAgICAgICBfd3JpdGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUsCiAgICAgICAgICAgICAgKG0pID0+IG0ud3JpdGUoQWNjZXNzZXMuZHluYW1pY0FjY2VzcyksCiAgICAgICAgICAgICAgKHUpID0+ICF1Lmhhc1BlbmRpbmdEeW5hbWljV3JpdGUpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgIH0KICB9CgogIGJvb2wgX3JlZ2lzdGVyTmV3U2VsZWN0b3IoRHluYW1pY1VzZSBkeW5hbWljVXNlLAogICAgICBNYXA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+PiBzZWxlY3Rvck1hcCkgewogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBkeW5hbWljVXNlLnNlbGVjdG9yOwogICAgU3RyaW5nIG5hbWUgPSBzZWxlY3Rvci5uYW1lOwogICAgT2JqZWN0IGNvbnN0cmFpbnQgPSBkeW5hbWljVXNlLnJlY2VpdmVyQ29uc3RyYWludDsKICAgIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzID0KICAgICAgICBzZWxlY3Rvck1hcFtuYW1lXSA/Pz0gbmV3IE1hcGxldDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4oKTsKICAgIFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50cyBjb25zdHJhaW50cyA9IHNlbGVjdG9yc1tzZWxlY3Rvcl07CiAgICBpZiAoY29uc3RyYWludHMgPT0gbnVsbCkgewogICAgICBzZWxlY3RvcnNbc2VsZWN0b3JdID0gX3NlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneQogICAgICAgICAgLmNyZWF0ZVNlbGVjdG9yQ29uc3RyYWludHMoc2VsZWN0b3IsIGNvbnN0cmFpbnQpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBjb25zdHJhaW50cy5hZGRSZWNlaXZlckNvbnN0cmFpbnQoY29uc3RyYWludCk7CiAgfQoKICB2b2lkIHJlZ2lzdGVySXNDaGVjayhjb3ZhcmlhbnQgRGFydFR5cGUgdHlwZSkgewogICAgX2lzQ2hlY2tzLmFkZCh0eXBlLnVuYWxpYXNlZCk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyU3RhdGljVXNlKFN0YXRpY1VzZSBzdGF0aWNVc2UsIE1lbWJlclVzZWRDYWxsYmFjayBtZW1iZXJVc2VkKSB7CiAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCA9IHN0YXRpY1VzZS5lbGVtZW50OwogICAgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCA9IG5ldyBFbnVtU2V0PE1lbWJlclVzZT4oKTsKICAgIE1lbWJlclVzYWdlIHVzYWdlID0gX2dldE1lbWJlclVzYWdlKGVsZW1lbnQsIHVzZVNldCk7CiAgICBzd2l0Y2ggKHN0YXRpY1VzZS5raW5kKSB7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVEFUSUNfVEVBUl9PRkY6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5yZWFkKEFjY2Vzc2VzLnN0YXRpY0FjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuSU5TVEFOQ0VfRklFTERfR0VUOgogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuSU5TVEFOQ0VfRklFTERfU0VUOgogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ0FMTF9NRVRIT0Q6CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhpcy4gQ3VycmVudGx5IFtGSUVMRF9HRVRdIGFuZAogICAgICAgIC8vIFtGSUVMRF9TRVRdIGNvbnRhaW5zIFtCb3hGaWVsZEVsZW1lbnRdcyB3aGljaCB3ZSBjYW5ub3QgZW5xdWV1ZS4KICAgICAgICAvLyBBbHNvIFtDTE9TVVJFXSBjb250YWlucyBbTG9jYWxGdW5jdGlvbkVsZW1lbnRdIHdoaWNoIHdlIGNhbm5vdAogICAgICAgIC8vIGVucXVldWUuCiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9JTlZPS0U6CiAgICAgICAgcmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uKHN0YXRpY1VzZSk7CiAgICAgICAgdXNlU2V0LmFkZEFsbCgKICAgICAgICAgICAgdXNhZ2UuaW52b2tlKEFjY2Vzc2VzLnN1cGVyQWNjZXNzLCBzdGF0aWNVc2UuY2FsbFN0cnVjdHVyZSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX0lOVk9LRToKICAgICAgICByZWdpc3RlclN0YXRpY0ludm9jYXRpb24oc3RhdGljVXNlKTsKICAgICAgICB1c2VTZXQuYWRkQWxsKAogICAgICAgICAgICB1c2FnZS5pbnZva2UoQWNjZXNzZXMuc3RhdGljQWNjZXNzLCBzdGF0aWNVc2UuY2FsbFN0cnVjdHVyZSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfRklFTERfU0VUOgogICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2Uud3JpdGUoQWNjZXNzZXMuc3VwZXJBY2Nlc3MpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNVUEVSX1NFVFRFUl9TRVQ6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS53cml0ZShBY2Nlc3Nlcy5zdXBlckFjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX1NFVDoKICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLndyaXRlKEFjY2Vzc2VzLnN0YXRpY0FjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfVEVBUl9PRkY6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5yZWFkKEFjY2Vzc2VzLnN1cGVyQWNjZXNzKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9HRVQ6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5yZWFkKEFjY2Vzc2VzLnN1cGVyQWNjZXNzKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVEFUSUNfR0VUOgogICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UucmVhZChBY2Nlc3Nlcy5zdGF0aWNBY2Nlc3MpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkZJRUxEX0lOSVQ6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5pbml0KCkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuRklFTERfQ09OU1RBTlRfSU5JVDoKICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLmNvbnN0YW50SW5pdChzdGF0aWNVc2UuY29uc3RhbnQpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNPTlNUUlVDVE9SX0lOVk9LRToKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNPTlNUX0NPTlNUUlVDVE9SX0lOVk9LRToKICAgICAgICAvLyBXZSBkb24ndCB0cmFjayBwYXJhbWV0ZXJzIGluIHRoZSBjb2RlZ2VuIHdvcmxkIGJ1aWxkZXIsIHNvIHdlCiAgICAgICAgLy8gcGFzcyBgbnVsbGAgaW5zdGVhZCBvZiB0aGUgY29uY3JldGUgY2FsbCBzdHJ1Y3R1cmUuCiAgICAgICAgdXNlU2V0LmFkZEFsbCgKICAgICAgICAgICAgdXNhZ2UuaW52b2tlKEFjY2Vzc2VzLnN0YXRpY0FjY2Vzcywgc3RhdGljVXNlLmNhbGxTdHJ1Y3R1cmUpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkRJUkVDVF9JTlZPS0U6CiAgICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IHN0YXRpY1VzZS5lbGVtZW50OwogICAgICAgIC8vIFdlIGRvbid0IHRyYWNrIHBhcmFtZXRlcnMgaW4gdGhlIGNvZGVnZW4gd29ybGQgYnVpbGRlciwgc28gd2UKICAgICAgICAvLyBwYXNzIGBudWxsYCBpbnN0ZWFkIG9mIHRoZSBjb25jcmV0ZSBjYWxsIHN0cnVjdHVyZS4KICAgICAgICB1c2VTZXQuYWRkQWxsKAogICAgICAgICAgICB1c2FnZS5pbnZva2UoQWNjZXNzZXMuc3RhdGljQWNjZXNzLCBzdGF0aWNVc2UuY2FsbFN0cnVjdHVyZSkpOwogICAgICAgIGlmIChzdGF0aWNVc2UudHlwZUFyZ3VtZW50cz8uaXNOb3RFbXB0eSA/PyBmYWxzZSkgewogICAgICAgICAgcmVnaXN0ZXJEeW5hbWljSW52b2NhdGlvbigKICAgICAgICAgICAgICBuZXcgU2VsZWN0b3IuY2FsbChtZW1iZXIubWVtYmVyTmFtZSwgc3RhdGljVXNlLmNhbGxTdHJ1Y3R1cmUpLAogICAgICAgICAgICAgIHN0YXRpY1VzZS50eXBlQXJndW1lbnRzKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5JTkxJTklORzoKICAgICAgICByZWdpc3RlclN0YXRpY0ludm9jYXRpb24oc3RhdGljVXNlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNMT1NVUkU6CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DTE9TVVJFX0NBTEw6CiAgICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgIlN0YXRpYyB1c2UgJHtzdGF0aWNVc2Uua2luZH0gaXMgbm90IHN1cHBvcnRlZCBkdXJpbmcgY29kZWdlbi4iKTsKICAgIH0KICAgIGlmICh1c2VTZXQuaXNOb3RFbXB0eSkgewogICAgICBtZW1iZXJVc2VkKHVzYWdlLmVudGl0eSwgdXNlU2V0KTsKICAgIH0KICB9CgogIHZvaWQgcHJvY2Vzc0NsYXNzTWVtYmVycyhDbGFzc0VudGl0eSBjbHMsIE1lbWJlclVzZWRDYWxsYmFjayBtZW1iZXJVc2VkLAogICAgICB7Ym9vbCBjaGVja0VucXVldWVyQ29uc2lzdGVuY3k6IGZhbHNlfSkgewogICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoQ2xhc3NNZW1iZXIoY2xzLAogICAgICAgIChDbGFzc0VudGl0eSBjbHMsIE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgX3Byb2Nlc3NJbnN0YW50aWF0ZWRDbGFzc01lbWJlcihjbHMsIG1lbWJlciwgbWVtYmVyVXNlZCwKICAgICAgICAgIGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeTogY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5KTsKICAgIH0pOwogIH0KCiAgdm9pZCBfcHJvY2Vzc0luc3RhbnRpYXRlZENsYXNzTWVtYmVyKAogICAgICBDbGFzc0VudGl0eSBjbHMsIE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclVzZWRDYWxsYmFjayBtZW1iZXJVc2VkLAogICAgICB7Ym9vbCBjaGVja0VucXVldWVyQ29uc2lzdGVuY3k6IGZhbHNlfSkgewogICAgaWYgKCFtZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuOwogICAgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCA9IG5ldyBFbnVtU2V0PE1lbWJlclVzZT4oKTsKICAgIE1lbWJlclVzYWdlIHVzYWdlID0gX2dldE1lbWJlclVzYWdlKG1lbWJlciwgdXNlU2V0KTsKICAgIGlmICh1c2VTZXQuaXNOb3RFbXB0eSkgewogICAgICBpZiAoY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5KSB7CiAgICAgICAgdGhyb3cgbmV3IFNwYW5uYWJsZUFzc2VydGlvbkZhaWx1cmUobWVtYmVyLAogICAgICAgICAgICAnVW5lbnF1ZXVlZCB1c2FnZSBvZiAkbWVtYmVyOiBcbmJlZm9yZTogPG5vbmU+XG5hZnRlciA6ICR1c2FnZScpOwogICAgICB9IGVsc2UgewogICAgICAgIG1lbWJlclVzZWQobWVtYmVyLCB1c2VTZXQpOwogICAgICB9CiAgICB9CiAgfQoKICBNZW1iZXJVc2FnZSBfZ2V0TWVtYmVyVXNhZ2UoTWVtYmVyRW50aXR5IG1lbWJlciwgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCwKICAgICAge2Jvb2wgY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5OiBmYWxzZX0pIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENoYW5nZSBbVHlwZU1hc2tdIHRvIG5vdCBhcHBseSB0byBhIHN1cGVyY2xhc3MKICAgIC8vIG1lbWJlciB1bmxlc3MgdGhlIGNsYXNzIGhhcyBiZWVuIGluc3RhbnRpYXRlZC4gU2ltaWxhciB0bwogICAgLy8gW1N0cm9uZ01vZGVDb25zdHJhaW50XS4KICAgIE1lbWJlclVzYWdlIHVzYWdlID0gX21lbWJlclVzYWdlW21lbWJlcl07CiAgICBpZiAodXNhZ2UgPT0gbnVsbCkgewogICAgICBNZW1iZXJBY2Nlc3MgcG90ZW50aWFsQWNjZXNzID0gX2Nsb3NlZFdvcmxkLmdldE1lbWJlckFjY2VzcyhtZW1iZXIpOwogICAgICBpZiAobWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICBTdHJpbmcgbWVtYmVyTmFtZSA9IG1lbWJlci5uYW1lOwogICAgICAgIENsYXNzRW50aXR5IGNscyA9IG1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgICAgICBib29sIGlzTmF0aXZlID0gX25hdGl2ZUJhc2ljRGF0YS5pc05hdGl2ZUNsYXNzKGNscyk7CiAgICAgICAgdXNhZ2UgPSBuZXcgTWVtYmVyVXNhZ2UobWVtYmVyLCBwb3RlbnRpYWxBY2Nlc3M6IHBvdGVudGlhbEFjY2Vzcyk7CiAgICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkICYmICFpc05hdGl2ZSkgewogICAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5pbml0KCkpOwogICAgICAgIH0KICAgICAgICBpZiAobWVtYmVyIGlzIEpTaWduYXR1cmVNZXRob2QpIHsKICAgICAgICAgIC8vIFdlIG1hcmsgc2lnbmF0dXJlIG1ldGhvZHMgYXMgImFsd2F5cyB1c2VkIiB0byBwcmV2ZW50IHRoZW0gZnJvbQogICAgICAgICAgLy8gYmVpbmcgb3B0aW1pemVkIGF3YXkuCiAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYWtlIHRoaXMgYSBwYXJ0IG9mIHRoZSByZWd1bGFyIGVucXVldWVpbmcuCiAgICAgICAgICB1c2VTZXQuYWRkQWxsKAogICAgICAgICAgICAgIHVzYWdlLmludm9rZShBY2Nlc3Nlcy5keW5hbWljQWNjZXNzLCBDYWxsU3RydWN0dXJlLk5PX0FSR1MpKTsKICAgICAgICB9CgogICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY1JlYWQgJiYgX2hhc0ludm9rZWRHZXR0ZXIobWVtYmVyKSkgewogICAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5yZWFkKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MpKTsKICAgICAgICB9CiAgICAgICAgaWYgKHVzYWdlLmhhc1BlbmRpbmdEeW5hbWljV3JpdGUgJiYgX2hhc0ludm9rZWRTZXR0ZXIobWVtYmVyKSkgewogICAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS53cml0ZShBY2Nlc3Nlcy5keW5hbWljQWNjZXNzKSk7CiAgICAgICAgfQogICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSkgewogICAgICAgICAgSXRlcmFibGU8Q2FsbFN0cnVjdHVyZT4gY2FsbFN0cnVjdHVyZXMgPQogICAgICAgICAgICAgIF9nZXRJbnZvY2F0aW9uQ2FsbFN0cnVjdHVyZXMobWVtYmVyKTsKICAgICAgICAgIGZvciAoQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlIGluIGNhbGxTdHJ1Y3R1cmVzKSB7CiAgICAgICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UuaW52b2tlKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MsIGNhbGxTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgaWYgKCF1c2FnZS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeSkgewogICAgICAgICAgaWYgKHVzYWdlLmhhc1BlbmRpbmdEeW5hbWljSW52b2tlKSB7CiAgICAgICAgICAgIF9pbnZva2FibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUKICAgICAgICAgICAgICAgIC5wdXRJZkFic2VudChtZW1iZXJOYW1lLCAoKSA9PiB7fSkKICAgICAgICAgICAgICAgIC5hZGQodXNhZ2UpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHVzYWdlLmhhc1BlbmRpbmdEeW5hbWljUmVhZCkgewogICAgICAgICAgICBfcmVhZGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUKICAgICAgICAgICAgICAgIC5wdXRJZkFic2VudChtZW1iZXJOYW1lLCAoKSA9PiB7fSkKICAgICAgICAgICAgICAgIC5hZGQodXNhZ2UpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHVzYWdlLmhhc1BlbmRpbmdEeW5hbWljV3JpdGUpIHsKICAgICAgICAgICAgX3dyaXRhYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lCiAgICAgICAgICAgICAgICAucHV0SWZBYnNlbnQobWVtYmVyTmFtZSwgKCkgPT4ge30pCiAgICAgICAgICAgICAgICAuYWRkKHVzYWdlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdXNhZ2UgPSBuZXcgTWVtYmVyVXNhZ2UobWVtYmVyLCBwb3RlbnRpYWxBY2Nlc3M6IHBvdGVudGlhbEFjY2Vzcyk7CiAgICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLmluaXQoKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5KSB7CiAgICAgICAgX21lbWJlclVzYWdlW21lbWJlcl0gPSB1c2FnZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeSkgewogICAgICAgIHVzYWdlID0gdXNhZ2UuY2xvbmUoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHVzYWdlOwogIH0KCiAgdm9pZCBfcHJvY2Vzc1NldChNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+PiBtYXAsIFN0cmluZyBtZW1iZXJOYW1lLAogICAgICBib29sIGYoTWVtYmVyVXNhZ2UgZSkpIHsKICAgIFNldDxNZW1iZXJVc2FnZT4gbWVtYmVycyA9IG1hcFttZW1iZXJOYW1lXTsKICAgIGlmIChtZW1iZXJzID09IG51bGwpIHJldHVybjsKICAgIC8vIFtmXSBtaWdodCBhZGQgZWxlbWVudHMgdG8gWzogbWFwW21lbWJlck5hbWVdIDpdIGR1cmluZyB0aGUgbG9vcCBiZWxvdwogICAgLy8gc28gd2UgY3JlYXRlIGEgbmV3IGxpc3QgZm9yIFs6IG1hcFttZW1iZXJOYW1lXSA6XSBhbmQgcHJlcGVuZCB0aGUKICAgIC8vIFtyZW1haW5pbmddIG1lbWJlcnMgYWZ0ZXIgdGhlIGxvb3AuCiAgICBtYXBbbWVtYmVyTmFtZV0gPSBuZXcgU2V0PE1lbWJlclVzYWdlPigpOwogICAgU2V0PE1lbWJlclVzYWdlPiByZW1haW5pbmcgPSBuZXcgU2V0PE1lbWJlclVzYWdlPigpOwogICAgZm9yIChNZW1iZXJVc2FnZSBtZW1iZXIgaW4gbWVtYmVycykgewogICAgICBpZiAoIWYobWVtYmVyKSkgcmVtYWluaW5nLmFkZChtZW1iZXIpOwogICAgfQogICAgbWFwW21lbWJlck5hbWVdLmFkZEFsbChyZW1haW5pbmcpOwogIH0KCiAgLy8vIFJldHVybiB0aGUgY2Fub25pY2FsIFtDbGFzc1VzYWdlXSBmb3IgW2Nsc10uCiAgQ2xhc3NVc2FnZSBfZ2V0Q2xhc3NVc2FnZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfcHJvY2Vzc2VkQ2xhc3Nlcy5wdXRJZkFic2VudChjbHMsICgpID0+IG5ldyBDbGFzc1VzYWdlKGNscykpOwogIH0KCiAgdm9pZCBfcHJvY2Vzc0luc3RhbnRpYXRlZENsYXNzKENsYXNzRW50aXR5IGNscywgQ2xhc3NVc2VkQ2FsbGJhY2sgY2xhc3NVc2VkKSB7CiAgICAvLyBSZWdpc3RlcnMgW3N1cGVyY2xhc3NdIGFzIGluc3RhbnRpYXRlZC4gUmV0dXJucyBgdHJ1ZWAgaWYgaXQgd2Fzbid0CiAgICAvLyBhbHJlYWR5IGluc3RhbnRpYXRlZCBhbmQgd2UgdGhlcmVmb3JlIGhhdmUgdG8gcHJvY2VzcyBpdHMgc3VwZXJjbGFzcyBhcwogICAgLy8gd2VsbC4KICAgIGJvb2wgcHJvY2Vzc0NsYXNzKENsYXNzRW50aXR5IHN1cGVyY2xhc3MpIHsKICAgICAgQ2xhc3NVc2FnZSB1c2FnZSA9IF9nZXRDbGFzc1VzYWdlKHN1cGVyY2xhc3MpOwogICAgICBpZiAoIXVzYWdlLmlzSW5zdGFudGlhdGVkKSB7CiAgICAgICAgY2xhc3NVc2VkKHVzYWdlLmNscywgdXNhZ2UuaW5zdGFudGlhdGUoKSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHdoaWxlIChjbHMgIT0gbnVsbCAmJiBwcm9jZXNzQ2xhc3MoY2xzKSkgewogICAgICBjbHMgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoY2xzKTsKICAgIH0KICB9CgogIC8vLyBTZXQgb2YgYWxsIHJlZ2lzdGVyZWQgY29tcGlsZWQgY29uc3RhbnRzLgogIGZpbmFsIFNldDxDb25zdGFudFZhbHVlPiBfY29tcGlsZWRDb25zdGFudHMgPSBuZXcgU2V0PENvbnN0YW50VmFsdWU+KCk7CgogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldCBjb21waWxlZENvbnN0YW50c0ZvclRlc3RpbmcgPT4gX2NvbXBpbGVkQ29uc3RhbnRzOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZENvbXBpbGVUaW1lQ29uc3RhbnRGb3JFbWlzc2lvbihDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICBfY29tcGlsZWRDb25zdGFudHMuYWRkKGNvbnN0YW50KTsKICB9CgogIC8vLyBSZWdpc3RlciB0aGUgY29uc3RhbnQgW3VzZV0gd2l0aCB0aGlzIHdvcmxkIGJ1aWxkZXIuIFJldHVybnMgYHRydWVgIGlmCiAgLy8vIHRoZSBjb25zdGFudCB1c2Ugd2FzIG5ldyB0byB0aGUgd29ybGQuCiAgYm9vbCByZWdpc3RlckNvbnN0YW50VXNlKENvbnN0YW50VXNlIHVzZSkgewogICAgYWRkQ29tcGlsZVRpbWVDb25zdGFudEZvckVtaXNzaW9uKHVzZS52YWx1ZSk7CiAgICByZXR1cm4gX2NvbnN0YW50VmFsdWVzLmFkZCh1c2UudmFsdWUpOwogIH0KCiAgdm9pZCByZWdpc3RlckNvbnN0VHlwZUxpdGVyYWwoRGFydFR5cGUgdHlwZSkgewogICAgX2NvbnN0VHlwZUxpdGVyYWxzLmFkZCh0eXBlKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJUeXBlQXJndW1lbnQoRGFydFR5cGUgdHlwZSkgewogICAgX2xpdmVUeXBlQXJndW1lbnRzLmFkZCh0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIENvZGVnZW5Xb3JsZCBjbG9zZSgpIHsKICAgIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPiBsaXZlTWVtYmVyVXNhZ2UgPSB7fTsKICAgIF9tZW1iZXJVc2FnZS5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2FnZSB1c2FnZSkgewogICAgICBpZiAodXNhZ2UuaGFzVXNlKSB7CiAgICAgICAgbGl2ZU1lbWJlclVzYWdlW21lbWJlcl0gPSB1c2FnZTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gbmV3IENvZGVnZW5Xb3JsZEltcGwoX2Nsb3NlZFdvcmxkLCBsaXZlTWVtYmVyVXNhZ2UsCiAgICAgICAgY29uc3RUeXBlTGl0ZXJhbHM6IF9jb25zdFR5cGVMaXRlcmFscywKICAgICAgICBkaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXM6IGRpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3NlcywKICAgICAgICB0eXBlVmFyaWFibGVUeXBlTGl0ZXJhbHM6IHR5cGVWYXJpYWJsZVR5cGVMaXRlcmFscywKICAgICAgICBpbnN0YW50aWF0ZWRDbGFzc2VzOiBpbnN0YW50aWF0ZWRDbGFzc2VzLAogICAgICAgIGlzQ2hlY2tzOiBfaXNDaGVja3MsCiAgICAgICAgaW5zdGFudGlhdGVkVHlwZXM6IF9pbnN0YW50aWF0ZWRUeXBlcywKICAgICAgICBsaXZlVHlwZUFyZ3VtZW50czogX2xpdmVUeXBlQXJndW1lbnRzLAogICAgICAgIGNvbXBpbGVkQ29uc3RhbnRzOiBfY29tcGlsZWRDb25zdGFudHMsCiAgICAgICAgaW52b2tlZE5hbWVzOiBfaW52b2tlZE5hbWVzLAogICAgICAgIGludm9rZWRHZXR0ZXJzOiBfaW52b2tlZEdldHRlcnMsCiAgICAgICAgaW52b2tlZFNldHRlcnM6IF9pbnZva2VkU2V0dGVycywKICAgICAgICBzdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXM6IHN0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcywKICAgICAgICBkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzOiBkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzLAogICAgICAgIG9uZVNob3RJbnRlcmNlcHRvckRhdGE6IF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhKTsKICB9Cn0KCmNsYXNzIENvZGVnZW5Xb3JsZEltcGwgaW1wbGVtZW50cyBDb2RlZ2VuV29ybGQgewogIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPiBfbGl2ZU1lbWJlclVzYWdlOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBJdGVyYWJsZTxEYXJ0VHlwZT4gY29uc3RUeXBlTGl0ZXJhbHM7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBkaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPFR5cGVWYXJpYWJsZVR5cGU+IHR5cGVWYXJpYWJsZVR5cGVMaXRlcmFsczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGluc3RhbnRpYXRlZENsYXNzZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPERhcnRUeXBlPiBpc0NoZWNrczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gaW5zdGFudGlhdGVkVHlwZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPERhcnRUeXBlPiBsaXZlVHlwZUFyZ3VtZW50czsKCiAgZmluYWwgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gX2NvbXBpbGVkQ29uc3RhbnRzOwoKICBmaW5hbCBNYXA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+PiBfaW52b2tlZE5hbWVzOwoKICBmaW5hbCBNYXA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+PiBfaW52b2tlZEdldHRlcnM7CgogIGZpbmFsIE1hcDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+IF9pbnZva2VkU2V0dGVyczsKCiAgZmluYWwgTWFwPEVudGl0eSwgU2V0PERhcnRUeXBlPj4gX3N0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY2llczsKCiAgZmluYWwgTWFwPFNlbGVjdG9yLCBTZXQ8RGFydFR5cGU+PiBfZHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY2llczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgT25lU2hvdEludGVyY2VwdG9yRGF0YSBvbmVTaG90SW50ZXJjZXB0b3JEYXRhOwoKICBDb2RlZ2VuV29ybGRJbXBsKHRoaXMuX2Nsb3NlZFdvcmxkLCB0aGlzLl9saXZlTWVtYmVyVXNhZ2UsCiAgICAgIHt0aGlzLmNvbnN0VHlwZUxpdGVyYWxzLAogICAgICB0aGlzLmRpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3NlcywKICAgICAgdGhpcy50eXBlVmFyaWFibGVUeXBlTGl0ZXJhbHMsCiAgICAgIHRoaXMuaW5zdGFudGlhdGVkQ2xhc3NlcywKICAgICAgdGhpcy5pc0NoZWNrcywKICAgICAgdGhpcy5pbnN0YW50aWF0ZWRUeXBlcywKICAgICAgdGhpcy5saXZlVHlwZUFyZ3VtZW50cywKICAgICAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gY29tcGlsZWRDb25zdGFudHMsCiAgICAgIE1hcDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+IGludm9rZWROYW1lcywKICAgICAgTWFwPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj4gaW52b2tlZEdldHRlcnMsCiAgICAgIE1hcDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+IGludm9rZWRTZXR0ZXJzLAogICAgICBNYXA8RW50aXR5LCBTZXQ8RGFydFR5cGU+PiBzdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMsCiAgICAgIE1hcDxTZWxlY3RvciwgU2V0PERhcnRUeXBlPj4gZHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcywKICAgICAgdGhpcy5vbmVTaG90SW50ZXJjZXB0b3JEYXRhfSkKICAgICAgOiBfY29tcGlsZWRDb25zdGFudHMgPSBjb21waWxlZENvbnN0YW50cywKICAgICAgICBfaW52b2tlZE5hbWVzID0gaW52b2tlZE5hbWVzLAogICAgICAgIF9pbnZva2VkR2V0dGVycyA9IGludm9rZWRHZXR0ZXJzLAogICAgICAgIF9pbnZva2VkU2V0dGVycyA9IGludm9rZWRTZXR0ZXJzLAogICAgICAgIF9zdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMgPSBzdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMsCiAgICAgICAgX2R5bmFtaWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMgPSBkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzOwoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hTdGF0aWNGaWVsZCh2b2lkIEZ1bmN0aW9uKEZpZWxkRW50aXR5KSBmKSB7CiAgICBib29sIGZhaWx1cmUgPSBmYWxzZTsKICAgIF9saXZlTWVtYmVyVXNhZ2UuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNhZ2UgdXNhZ2UpIHsKICAgICAgaWYgKG1lbWJlciBpcyBGaWVsZEVudGl0eSAmJiAobWVtYmVyLmlzU3RhdGljIHx8IG1lbWJlci5pc1RvcExldmVsKSkgewogICAgICAgIGYobWVtYmVyKTsKICAgICAgfQogICAgfSk7CiAgICBpZiAoZmFpbHVyZSkgdGhyb3cgJ2ZhaWx1cmUnOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoR2VuZXJpY01ldGhvZChGdW5jdGlvbiBmKSB7CiAgICBfbGl2ZU1lbWJlclVzYWdlLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclVzYWdlIHVzYWdlKSB7CiAgICAgIGlmIChtZW1iZXIgaXMgRnVuY3Rpb25FbnRpdHkgJiYKICAgICAgICAgIF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQKICAgICAgICAgICAgICAuZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKG1lbWJlcikKICAgICAgICAgICAgICAuaXNOb3RFbXB0eSkgewogICAgICAgIGYobWVtYmVyKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hHZW5lcmljSW5zdGFuY2VNZXRob2QoRnVuY3Rpb24gZikgewogICAgX2xpdmVNZW1iZXJVc2FnZS5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2FnZSB1c2FnZSkgewogICAgICBpZiAobWVtYmVyIGlzIEZ1bmN0aW9uRW50aXR5ICYmCiAgICAgICAgICBtZW1iZXIuaXNJbnN0YW5jZU1lbWJlciAmJgogICAgICAgICAgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudAogICAgICAgICAgICAgIC5nZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMobWVtYmVyKQogICAgICAgICAgICAgIC5pc05vdEVtcHR5KSB7CiAgICAgICAgZihtZW1iZXIpOwogICAgICB9CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaEdlbmVyaWNDbG9zdXJlQ2FsbE1ldGhvZChGdW5jdGlvbiBmKSB7CiAgICBfbGl2ZU1lbWJlclVzYWdlLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclVzYWdlIHVzYWdlKSB7CiAgICAgIGlmIChtZW1iZXIubmFtZSA9PSBJZGVudGlmaWVycy5jYWxsICYmCiAgICAgICAgICBtZW1iZXIuaXNJbnN0YW5jZU1lbWJlciAmJgogICAgICAgICAgbWVtYmVyLmVuY2xvc2luZ0NsYXNzLmlzQ2xvc3VyZSAmJgogICAgICAgICAgbWVtYmVyIGlzIEZ1bmN0aW9uRW50aXR5ICYmCiAgICAgICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgICAgICAgLmdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhtZW1iZXIpCiAgICAgICAgICAgICAgLmlzTm90RW1wdHkpIHsKICAgICAgICBmKG1lbWJlcik7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgTGlzdDxGdW5jdGlvbkVudGl0eT4gX3VzZXJOb1N1Y2hNZXRob2RzQ2FjaGU7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBnZXQgdXNlck5vU3VjaE1ldGhvZHMgewogICAgaWYgKF91c2VyTm9TdWNoTWV0aG9kc0NhY2hlID09IG51bGwpIHsKICAgICAgX3VzZXJOb1N1Y2hNZXRob2RzQ2FjaGUgPSA8RnVuY3Rpb25FbnRpdHk+W107CgogICAgICBfbGl2ZU1lbWJlclVzYWdlLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclVzYWdlIG1lbWJlclVzYWdlKSB7CiAgICAgICAgaWYgKG1lbWJlciBpcyBGdW5jdGlvbkVudGl0eSkgewogICAgICAgICAgaWYgKG1lbWJlci5pc0luc3RhbmNlTWVtYmVyICYmCiAgICAgICAgICAgICAgbWVtYmVyLm5hbWUgPT0gSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyAmJgogICAgICAgICAgICAgICFfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMKICAgICAgICAgICAgICAgICAgLmlzRGVmYXVsdE5vU3VjaE1ldGhvZEltcGxlbWVudGF0aW9uKG1lbWJlcikpIHsKICAgICAgICAgICAgX3VzZXJOb1N1Y2hNZXRob2RzQ2FjaGUuYWRkKG1lbWJlcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICByZXR1cm4gX3VzZXJOb1N1Y2hNZXRob2RzQ2FjaGU7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxMb2NhbD4gZ2V0IGdlbmVyaWNMb2NhbEZ1bmN0aW9ucyA9PiBjb25zdCBbXTsKCiAgU2V0PEZ1bmN0aW9uRW50aXR5PiBfY2xvc3VyaXplZE1lbWJlcnNDYWNoZTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGdldCBjbG9zdXJpemVkTWVtYmVycyB7CiAgICBpZiAoX2Nsb3N1cml6ZWRNZW1iZXJzQ2FjaGUgPT0gbnVsbCkgewogICAgICBfY2xvc3VyaXplZE1lbWJlcnNDYWNoZSA9IHt9OwogICAgICBfbGl2ZU1lbWJlclVzYWdlLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclVzYWdlIHVzYWdlKSB7CiAgICAgICAgaWYgKChtZW1iZXIuaXNGdW5jdGlvbiB8fCBtZW1iZXIgaXMgSkdlbmVyYXRvckJvZHkpICYmCiAgICAgICAgICAgIG1lbWJlci5pc0luc3RhbmNlTWVtYmVyICYmCiAgICAgICAgICAgIHVzYWdlLmhhc1JlYWQpIHsKICAgICAgICAgIF9jbG9zdXJpemVkTWVtYmVyc0NhY2hlLmFkZChtZW1iZXIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gX2Nsb3N1cml6ZWRNZW1iZXJzQ2FjaGU7CiAgfQoKICBTZXQ8RnVuY3Rpb25FbnRpdHk+IF9jbG9zdXJpemVkU3RhdGljc0NhY2hlOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxGdW5jdGlvbkVudGl0eT4gZ2V0IGNsb3N1cml6ZWRTdGF0aWNzIHsKICAgIGlmIChfY2xvc3VyaXplZFN0YXRpY3NDYWNoZSA9PSBudWxsKSB7CiAgICAgIF9jbG9zdXJpemVkU3RhdGljc0NhY2hlID0ge307CiAgICAgIF9saXZlTWVtYmVyVXNhZ2UuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNhZ2UgdXNhZ2UpIHsKICAgICAgICBpZiAobWVtYmVyLmlzRnVuY3Rpb24gJiYKICAgICAgICAgICAgKG1lbWJlci5pc1N0YXRpYyB8fCBtZW1iZXIuaXNUb3BMZXZlbCkgJiYKICAgICAgICAgICAgdXNhZ2UuaGFzUmVhZCkgewogICAgICAgICAgX2Nsb3N1cml6ZWRTdGF0aWNzQ2FjaGUuYWRkKG1lbWJlcik7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBfY2xvc3VyaXplZFN0YXRpY3NDYWNoZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFN0YXRpY1R5cGVBcmd1bWVudCgKICAgICAgdm9pZCBmKEVudGl0eSBmdW5jdGlvbiwgU2V0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSkgewogICAgX3N0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcy5mb3JFYWNoKGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoRHluYW1pY1R5cGVBcmd1bWVudCgKICAgICAgdm9pZCBmKFNlbGVjdG9yIHNlbGVjdG9yLCBTZXQ8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpKSB7CiAgICBfZHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcy5mb3JFYWNoKGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoSW52b2tlZE5hbWUoCiAgICAgIGYoU3RyaW5nIG5hbWUsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzKSkgewogICAgX2ludm9rZWROYW1lcy5mb3JFYWNoKGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoSW52b2tlZEdldHRlcigKICAgICAgZihTdHJpbmcgbmFtZSwgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBzZWxlY3RvcnMpKSB7CiAgICBfaW52b2tlZEdldHRlcnMuZm9yRWFjaChmKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaEludm9rZWRTZXR0ZXIoCiAgICAgIGYoU3RyaW5nIG5hbWUsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzKSkgewogICAgX2ludm9rZWRTZXR0ZXJzLmZvckVhY2goZik7CiAgfQoKICBib29sIF9oYXNNYXRjaGluZ1NlbGVjdG9yKE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gc2VsZWN0b3JzLAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLCBKQ2xvc2VkV29ybGQgd29ybGQpIHsKICAgIGlmIChzZWxlY3RvcnMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChTZWxlY3RvciBzZWxlY3RvciBpbiBzZWxlY3RvcnMua2V5cykgewogICAgICBpZiAoc2VsZWN0b3IuYXBwbGllc1VubmFtZWQobWVtYmVyKSkgewogICAgICAgIFNlbGVjdG9yQ29uc3RyYWludHMgbWFza3MgPSBzZWxlY3RvcnNbc2VsZWN0b3JdOwogICAgICAgIGlmIChtYXNrcy5jYW5IaXQobWVtYmVyLCBzZWxlY3Rvci5tZW1iZXJOYW1lLCB3b3JsZCkpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNJbnZva2VkR2V0dGVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIE1lbWJlclVzYWdlIG1lbWJlclVzYWdlID0gX2xpdmVNZW1iZXJVc2FnZVttZW1iZXJdOwogICAgaWYgKG1lbWJlclVzYWdlID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBtZW1iZXJVc2FnZS5yZWFkcy5jb250YWlucyhBY2Nlc3MuZHluYW1pY0FjY2Vzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG1ldGhvZHNOZWVkc1N1cGVyR2V0dGVyKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uKSB7CiAgICBNZW1iZXJVc2FnZSBtZW1iZXJVc2FnZSA9IF9saXZlTWVtYmVyVXNhZ2VbZnVuY3Rpb25dOwogICAgaWYgKG1lbWJlclVzYWdlID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBtZW1iZXJVc2FnZS5yZWFkcy5jb250YWlucyhBY2Nlc3Muc3VwZXJBY2Nlc3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNJbnZva2VkU2V0dGVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIE1lbWJlclVzYWdlIG1lbWJlclVzYWdlID0gX2xpdmVNZW1iZXJVc2FnZVttZW1iZXJdOwogICAgaWYgKG1lbWJlclVzYWdlID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBtZW1iZXJVc2FnZS53cml0ZXMuY29udGFpbnMoQWNjZXNzLmR5bmFtaWNBY2Nlc3MpOwogIH0KCiAgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBfYXNVbm1vZGlmaWFibGUoCiAgICAgIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4gbWFwKSB7CiAgICBpZiAobWFwID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIG5ldyBVbm1vZGlmaWFibGVNYXBWaWV3KG1hcCk7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IGludm9jYXRpb25zQnlOYW1lKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gX2FzVW5tb2RpZmlhYmxlKF9pbnZva2VkTmFtZXNbbmFtZV0pOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8U2VsZWN0b3I+IGdldHRlckludm9jYXRpb25zQnlOYW1lKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gX2ludm9rZWRHZXR0ZXJzW25hbWVdPy5rZXlzOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8U2VsZWN0b3I+IHNldHRlckludm9jYXRpb25zQnlOYW1lKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gX2ludm9rZWRTZXR0ZXJzW25hbWVdPy5rZXlzOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0Q29uc3RhbnRzRm9yRW1pc3Npb24oCiAgICAgIFtDb21wYXJhdG9yPENvbnN0YW50VmFsdWU+IHByZVNvcnRDb21wYXJlXSkgewogICAgLy8gV2UgbXVzdCBlbWl0IGRlcGVuZGVuY2llcyBiZWZvcmUgdGhlaXIgdXNlcy4KICAgIFNldDxDb25zdGFudFZhbHVlPiBzZWVuQ29uc3RhbnRzID0gbmV3IFNldDxDb25zdGFudFZhbHVlPigpOwogICAgTGlzdDxDb25zdGFudFZhbHVlPiByZXN1bHQgPSBuZXcgTGlzdDxDb25zdGFudFZhbHVlPigpOwoKICAgIHZvaWQgYWRkQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgICBpZiAoIXNlZW5Db25zdGFudHMuY29udGFpbnMoY29uc3RhbnQpKSB7CiAgICAgICAgY29uc3RhbnQuZ2V0RGVwZW5kZW5jaWVzKCkuZm9yRWFjaChhZGRDb25zdGFudCk7CiAgICAgICAgYXNzZXJ0KCFzZWVuQ29uc3RhbnRzLmNvbnRhaW5zKGNvbnN0YW50KSk7CiAgICAgICAgcmVzdWx0LmFkZChjb25zdGFudCk7CiAgICAgICAgc2VlbkNvbnN0YW50cy5hZGQoY29uc3RhbnQpOwogICAgICB9CiAgICB9CgogICAgaWYgKHByZVNvcnRDb21wYXJlICE9IG51bGwpIHsKICAgICAgTGlzdDxDb25zdGFudFZhbHVlPiBzb3J0ZWQgPSBfY29tcGlsZWRDb25zdGFudHMudG9MaXN0KCk7CiAgICAgIHNvcnRlZC5zb3J0KHByZVNvcnRDb21wYXJlKTsKICAgICAgc29ydGVkLmZvckVhY2goYWRkQ29uc3RhbnQpOwogICAgfSBlbHNlIHsKICAgICAgX2NvbXBpbGVkQ29uc3RhbnRzLmZvckVhY2goYWRkQ29uc3RhbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNBbGlhc2VkU3VwZXJNZW1iZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgTWVtYmVyVXNhZ2UgdXNhZ2UgPSBfbGl2ZU1lbWJlclVzYWdlW21lbWJlcl07CiAgICBpZiAodXNhZ2UgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHVzYWdlLmludm9rZXMuY29udGFpbnMoQWNjZXNzLnN1cGVyQWNjZXNzKSB8fAogICAgICAgIHVzYWdlLndyaXRlcy5jb250YWlucyhBY2Nlc3Muc3VwZXJBY2Nlc3MpOwogIH0KfQqDfABOTjwBGgEZMCIjJCFKPiQfHBgeHCYSTB0BJwRHPTJCAU4VGAIBNjFGSQEuATkuAUUBOwE7ARtFAR1FAR1FAUxHEjY5ATcxATkBKzkBQSwBQiwBTCwGS09OMzMBSDIBNQIBNyUjOAFMUBQGND0xUAFMJQYqSgE8RwFINko2SjYBOSMBTgE+NiUBTSEGThpIJAFNHUckAU0eRyQBNwFCAUcBQEABUCUBUQFDAUo+ATYMOikEATJOPkwiOSQ5IkVJRDInLTEGAVEjKDdMOhVRCgoGBAFKMSkwLTlAFwoIBhIEATZLOycwLTlHNzYKCAY2BAFOSwQBMCE9BAEwIT0EARs+LScBEzE2Mz81OTszKQoWCgYBHyIjPD8UL09QTzIKDx9BFC41MAoPH0EULjYxCg8GBAEzRS0hNzNLQx85PBMGOgQBMiMEAU8uOjoeKjoPLS0mRkxKFA8nLRdKDygtF0sPKjoPKzoPJTsPKTkPJDkPJToPJSUPLj8PLTNJPxdLDygxST8XSzwlTSgKDyMtDyInLE4GHSgGBAFLMDAxPz8IBAEoSzAqOjkdJjRODyQIBgQBTjBLQR8uGUslKTE9SysnCipNI04ZTAoBSD0KST4KLTM0QFAyFQ4MCgEpLywzHQwtKzMdDC4rMx0MCg9LHicKCCcmCA0mHwgGEgQBSR8wIU1JKy45Ki0GJwQBMy9KBAFRS08NMDUjMxUIFAYBLzQGBAEwSgFRAQxDJgQBTS0uMisEATEiBAEtIgQBDBk5RBopCAg/L0I8Mh0vLy8lKSlISjoEAgExHQE5AQwuAQw7AQw9AQwzAQwlAQwzAQwuATQBRwFJAUkBRAFHAQw3AT0fKCUgFR4eMURGRkFEJDAmKipKTAEMOhpITRMICCIEAQwqSCYqMB0TCAgEAQwySCYlKjAdEwgIBAEMNUgtJS0mKjAdEwgIBAEwAQwzKzQBUCgpOitCMQwKCgYBJAQBDDkBLwEMMyskSj8nHS8KCgYkBAEvAQwzKyRKITYdLwoKBiQEAQwiPjAEAQwjQDEEAQwbRh4EAQwdRiAEAQwdRiAEAUoxKTAtOUAXCggGEgQBDC84Kz0EAQw6Ois7BAEMLzgrPgQBNjAiKQQBDEYxBAEMPCgEAQw8KAQBDDM0NEE8AS8vOTMeJQgGASJAIyMNLwYTBAEMMzIlOTMEAgE4cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnREc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvdW5pdmVyc2UvcmVzb2x1dGlvbl93b3JsZF9idWlsZGVyLmRhcnTAAJqvLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IElkZW50aWZpZXJzLCBOYW1lczsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9zdGF0aWNfdHlwZS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydCcgc2hvdyBLRmllbGRBbmFseXNpczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2JhY2tlbmRfdXNhZ2UuZGFydCcKICAgIHNob3cgQmFja2VuZFVzYWdlLCBCYWNrZW5kVXNhZ2VCdWlsZGVyOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JyBzaG93IEludGVyY2VwdG9yRGF0YUJ1aWxkZXI7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JyBzaG93IE5hdGl2ZUJhc2ljRGF0YSwgTmF0aXZlRGF0YUJ1aWxkZXI7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ub19zdWNoX21ldGhvZF9yZWdpc3RyeS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwvZWxlbWVudF9tYXBfaW1wbC5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX3dvcmxkLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9lbnF1ZXVlLmRhcnQnIHNob3cgTmF0aXZlUmVzb2x1dGlvbkVucXVldWVyOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdXRpbC9lbnVtc2V0LmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEtDbG9zZWRXb3JsZCwgT3BlbldvcmxkOwppbXBvcnQgJ2NhbGxfc3RydWN0dXJlLmRhcnQnOwppbXBvcnQgJ2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5QnVpbGRlciwgQ2xhc3NRdWVyaWVzOwppbXBvcnQgJ2NsYXNzX3NldC5kYXJ0JzsKaW1wb3J0ICdtZW1iZXJfdXNhZ2UuZGFydCc7CmltcG9ydCAnc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICd1c2UuZGFydCcKICAgIHNob3cgQ29uc3RhbnRVc2UsIER5bmFtaWNVc2UsIER5bmFtaWNVc2VLaW5kLCBTdGF0aWNVc2UsIFN0YXRpY1VzZUtpbmQ7CmltcG9ydCAnd29ybGRfYnVpbGRlci5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIFJlc29sdXRpb25Xb3JsZEJ1aWxkZXIgaW1wbGVtZW50cyBXb3JsZEJ1aWxkZXIsIE9wZW5Xb3JsZCB7CiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFttZW1iZXJdIGhhcyBiZWVuIG1hcmtlZCBhcyB1c2VkIChjYWxsZWQsIHJlYWQsIGV0Yy4pIGluCiAgLy8vIHRoaXMgd29ybGQgYnVpbGRlci4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYXliZSB0aGlzIHNob3VsZCBiZSBwYXJ0IG9mIFtDbG9zZWRXb3JsZF0gKGluc3RlYWQpLgogIGJvb2wgaXNNZW1iZXJVc2VkKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gVGhlIGNsb3NlZCB3b3JsZCBjb21wdXRlZCBieSB0aGlzIHdvcmxkIGJ1aWxkZXIuCiAgLy8vCiAgLy8vIFRoaXMgaXMgb25seSBhdmFpbGFibGUgYWZ0ZXIgdGhlIHdvcmxkIGJ1aWxkZXIgaGFzIGJlZW4gY2xvc2VkLgogIEtDbG9zZWRXb3JsZCBnZXQgY2xvc2VkV29ybGRGb3JUZXN0aW5nOwoKICB2b2lkIHJlZ2lzdGVyQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKTsKfQoKLy8vIEV4dGVuZGVkIFtSZXNvbHV0aW9uV29ybGRCdWlsZGVyXSBpbnRlcmZhY2UgdXNlZCBieSB0aGUKLy8vIFtSZXNvbHV0aW9uRW5xdWV1ZXJdLgphYnN0cmFjdCBjbGFzcyBSZXNvbHV0aW9uRW5xdWV1ZXJXb3JsZEJ1aWxkZXIgZXh0ZW5kcyBSZXNvbHV0aW9uV29ybGRCdWlsZGVyIHsKICAvLy8gUmV0dXJucyB0aGUgY2xhc3NlcyByZWdpc3RlcmVkIGFzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5zdGFudGlhdGVkLgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgcHJvY2Vzc2VkQ2xhc3NlczsKCiAgLy8vIFJlZ2lzdGVycyB0aGF0IFtlbGVtZW50XSBoYXMgYmVlbiBjbG9zdXJpemVkLgogIHZvaWQgcmVnaXN0ZXJDbG9zdXJpemVkTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJlZ2lzdGVyIFt0eXBlXSBhcyAoZGlyZWN0bHkpIGluc3RhbnRpYXRlZC4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBGdWxseSBlbmZvcmNlIHRoZSBzZXBhcmF0aW9uIGJldHdlZW4gZXhhY3QsIHRocm91Z2gKICAvLyBzdWJjbGFzcyBhbmQgdGhyb3VnaCBzdWJ0eXBlIGluc3RhbnRpYXRlZCB0eXBlcy9jbGFzc2VzLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgdW5rbm93biB0eXBlIGFyZ3VtZW50cyBmb3IgZ2VuZXJpYyB0eXBlcy4KICB2b2lkIHJlZ2lzdGVyVHlwZUluc3RhbnRpYXRpb24oCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3NVc2VkQ2FsbGJhY2sgY2xhc3NVc2VkLAogICAgICB7Q29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3J9KTsKCiAgLy8vIENvbXB1dGVzIHVzYWdlIGZvciBhbGwgbWVtYmVycyBkZWNsYXJlZCBieSBbY2xzXS4gQ2FsbHMgW21lbWJlcnNVc2VkXSB3aXRoCiAgLy8vIHRoZSB1c2FnZSBjaGFuZ2VzIGZvciBlYWNoIG1lbWJlci4KICAvLy8KICAvLy8gSWYgW2NoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeV0gaXMgYHRydWVgIHdlIGNoZWNrIHRoYXQgbm8gbmV3IG1lbWJlcgogIC8vLyB1c2FnZSBjYW4gYmUgZm91bmQuIFRoaXMgY2hlY2sgaXMgcGVyZm9ybWVkIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGFscmVhZHkKICAvLy8gY29sbGVjdGVkIG1lbWJlciB1c2FnZS4KICB2b2lkIHByb2Nlc3NDbGFzc01lbWJlcnMoQ2xhc3NFbnRpdHkgY2xzLCBNZW1iZXJVc2VkQ2FsbGJhY2sgbWVtYmVyVXNlZCwKICAgICAge2Jvb2wgY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5OiBmYWxzZX0pOwoKICAvLy8gQXBwbGllcyB0aGUgW2R5bmFtaWNVc2VdIHRvIGFwcGxpY2FibGUgaW5zdGFuY2UgbWVtYmVycy4gQ2FsbHMKICAvLy8gW21lbWJlcnNVc2VkXSB3aXRoIHRoZSB1c2FnZSBjaGFuZ2VzIGZvciBlYWNoIG1lbWJlci4KICB2b2lkIHJlZ2lzdGVyRHluYW1pY1VzZShEeW5hbWljVXNlIGR5bmFtaWNVc2UsIE1lbWJlclVzZWRDYWxsYmFjayBtZW1iZXJVc2VkKTsKCiAgLy8vIEFwcGxpZXMgdGhlIFtzdGF0aWNVc2VdIHRvIGFwcGxpY2FibGUgbWVtYmVycy4gQ2FsbHMgW21lbWJlcnNVc2VkXSB3aXRoCiAgLy8vIHRoZSB1c2FnZSBjaGFuZ2VzIGZvciBlYWNoIG1lbWJlci4KICB2b2lkIHJlZ2lzdGVyU3RhdGljVXNlKFN0YXRpY1VzZSBzdGF0aWNVc2UsIE1lbWJlclVzZWRDYWxsYmFjayBtZW1iZXJVc2VkKTsKCiAgLy8vIFJlZ2lzdGVyIHRoZSBjb25zdGFudCBbdXNlXSB3aXRoIHRoaXMgd29ybGQgYnVpbGRlci4gUmV0dXJucyBgdHJ1ZWAgaWYKICAvLy8gdGhlIGNvbnN0YW50IHVzZSB3YXMgbmV3IHRvIHRoZSB3b3JsZC4KICBib29sIHJlZ2lzdGVyQ29uc3RhbnRVc2UoQ29uc3RhbnRVc2UgdXNlKTsKCiAgYm9vbCBpc01lbWJlclByb2Nlc3NlZChNZW1iZXJFbnRpdHkgbWVtYmVyKTsKICB2b2lkIHJlZ2lzdGVyUHJvY2Vzc2VkTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpOwogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IHByb2Nlc3NlZE1lbWJlcnM7CgogIC8vLyBSZWdpc3RlcnMgdGhhdCBbdHlwZV0gaXMgY2hlY2tlZCBpbiB0aGlzIHdvcmxkIGJ1aWxkZXIuIFRoZSB1bmFsaWFzZWQgdHlwZQogIC8vLyBpcyByZXR1cm5lZC4KICB2b2lkIHJlZ2lzdGVySXNDaGVjayhEYXJ0VHlwZSB0eXBlKTsKCiAgdm9pZCByZWdpc3RlclR5cGVWYXJpYWJsZVR5cGVMaXRlcmFsKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlKTsKfQoKLy8vIFRoZSB0eXBlIGFuZCBraW5kIG9mIGFuIGluc3RhbnRpYXRpb24gcmVnaXN0ZXJlZCB0aHJvdWdoCi8vLyBgUmVzb2x1dGlvbldvcmxkQnVpbGRlci5yZWdpc3RlclR5cGVJbnN0YW50aWF0aW9uYC4KY2xhc3MgSW5zdGFuY2UgewogIGZpbmFsIEludGVyZmFjZVR5cGUgdHlwZTsKICBmaW5hbCBJbnN0YW50aWF0aW9uIGtpbmQ7CgogIEluc3RhbmNlKHRoaXMudHlwZSwgdGhpcy5raW5kKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gSGFzaGluZy5vYmplY3RIYXNoKHR5cGUsIEhhc2hpbmcub2JqZWN0SGFzaChraW5kKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIEluc3RhbmNlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHlwZSA9PSBvdGhlci50eXBlICYmIGtpbmQgPT0gb3RoZXIua2luZDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKHR5cGUpOwogICAgaWYgKGtpbmQgPT0gSW5zdGFudGlhdGlvbi5ESVJFQ1RMWV9JTlNUQU5USUFURUQpIHsKICAgICAgc2Iud3JpdGUoJyBkaXJlY3RseScpOwogICAgfSBlbHNlIGlmIChraW5kID09IEluc3RhbnRpYXRpb24uQUJTVFJBQ1RMWV9JTlNUQU5USUFURUQpIHsKICAgICAgc2Iud3JpdGUoJyBhYnN0cmFjdGx5Jyk7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gSW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRCkgewogICAgICBzYi53cml0ZSgnIG5vbmUnKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIEluZm9ybWF0aW9uIGFib3V0IGluc3RhbnRpYXRpb25zIG9mIGEgY2xhc3MuCmNsYXNzIEluc3RhbnRpYXRpb25JbmZvIHsKICAvLy8gQSBtYXAgZnJvbSBjb25zdHJ1Y3RvciBvZiB0aGUgY2xhc3MgdG8gdGhlaXIgaW5zdGFudGlhdGVkIHR5cGVzLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UKICAvLy8KICAvLy8gICAgaW1wb3J0ICdkYXJ0Omh0bWwnOwogIC8vLwogIC8vLyAgICBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENsYXNzPFM+IHsKICAvLy8gICAgICBmYWN0b3J5IEFic3RyYWN0Q2xhc3MuYSgpID0gQ2xhc3M8Uz4uYTsKICAvLy8gICAgICBmYWN0b3J5IEFic3RyYWN0Q2xhc3MuYigpID0+IG5ldyBDbGFzczxTPi5iKCk7CiAgLy8vICAgIH0KICAvLy8gICAgY2xhc3MgQ2xhc3M8VD4gaW1wbGVtZW50cyBBYnN0cmFjdENsYXNzPFQ+IHsKICAvLy8gICAgICBDbGFzcy5hKCk7CiAgLy8vICAgICAgQ2xhc3MuYigpOwogIC8vLyAgICAgIGZhY3RvcnkgQ2xhc3MuYygpID0gQ2xhc3MuYjxUPjsKICAvLy8gICAgfQogIC8vLwogIC8vLwogIC8vLyAgICBtYWluKCkgewogIC8vLyAgICAgIG5ldyBDbGFzcy5hKCk7CiAgLy8vICAgICAgbmV3IENsYXNzPGludD4uYSgpOwogIC8vLyAgICAgIG5ldyBDbGFzczxTdHJpbmc+LmIoKTsKICAvLy8gICAgICBuZXcgQ2xhc3M8bnVtPi5jKCk7CiAgLy8vICAgICAgbmV3IEFic3RyYWN0Q2xhc3M8ZG91YmxlPi5hKCk7CiAgLy8vICAgICAgbmV3IEFic3RyYWN0Q2xhc3M8Ym9vbD4uYigpOwogIC8vLyAgICAgIG5ldyBEaXZFbGVtZW50KCk7IC8vIG5hdGl2ZSBpbnN0YW50aWF0aW9uCiAgLy8vICAgIH0KICAvLy8KICAvLy8gd2lsbCBnZW5lcmF0ZSB0aGUgbWFwcGluZ3MKICAvLy8KICAvLy8gICAgQWJzdHJhY3RDbGFzczogewogIC8vLyAgICAgIEFic3RyYWN0Q2xhc3MuYTogewogIC8vLyAgICAgICAgQWJzdHJhY3RDbGFzczxkb3VibGU+IG5vbmUsIC8vIGZyb20gYG5ldyBBYnN0cmFjdENsYXNzPGRvdWJsZT4uYSgpYAogIC8vLyAgICAgIH0sCiAgLy8vICAgICAgQWJzdHJhY3RDbGFzcy5iOiB7CiAgLy8vICAgICAgICBBYnN0cmFjdENsYXNzPGJvb2w+IG5vbmUsIC8vIGZyb20gYG5ldyBBYnN0cmFjdENsYXNzPGJvb2w+LmIoKWAKICAvLy8gICAgICB9LAogIC8vLyAgICB9LAogIC8vLyAgICBDbGFzczogewogIC8vLyAgICAgIENsYXNzLmE6IHsKICAvLy8gICAgICAgIENsYXNzIGRpcmVjdGx5LCAvLyBmcm9tIGBuZXcgQ2xhc3MuYSgpYAogIC8vLyAgICAgICAgQ2xhc3M8aW50PiBkaXJlY3RseSwgLy8gZnJvbSBgbmV3IENsYXNzPGludD4uYSgpYAogIC8vLyAgICAgICAgQ2xhc3M8Uz4gZGlyZWN0bHkgcmVkaXJlY3QsIC8vIGZyb20gYGZhY3RvcnkgQWJzdHJhY3RDbGFzcy5hYAogIC8vLyAgICAgIH0sCiAgLy8vICAgICAgQ2xhc3MuYjogewogIC8vLyAgICAgICAgQ2xhc3M8U3RyaW5nPiBkaXJlY3RseSwgLy8gZnJvbSBgbmV3IENsYXNzPFN0cmluZz4uYigpYAogIC8vLyAgICAgICAgQ2xhc3M8VD4gZGlyZWN0bHkgcmVkaXJlY3QsIC8vIGZyb20gYGZhY3RvcnkgQ2xhc3MuY2AKICAvLy8gICAgICAgIENsYXNzPFM+IGRpcmVjdGx5LCAvLyBmcm9tIGBmYWN0b3J5IEFic3RyYWN0Q2xhc3MuYmAKICAvLy8gICAgICB9LAogIC8vLyAgICAgIENsYXNzLmM6IHsKICAvLy8gICAgICAgIENsYXNzPG51bT4gZGlyZWN0bHksIC8vIGZyb20gYG5ldyBDbGFzczxudW0+LmMoKWAKICAvLy8gICAgICB9LAogIC8vLyAgICB9LAogIC8vLyAgICBEaXZFbGVtZW50OiB7CiAgLy8vICAgICAgRGl2RWxlbWVudDogewogIC8vLyAgICAgICAgRGl2RWxlbWVudCBhYnN0cmFjdGx5LCAvLyBmcm9tIGBuZXcgRGl2RWxlbWVudCgpYAogIC8vLyAgICAgIH0sCiAgLy8vICAgIH0KICAvLy8KICAvLy8gSWYgdGhlIGNvbnN0cnVjdG9yIGlzIHVua25vd24sIGZvciBpbnN0YW5jZSBmb3IgbmF0aXZlIG9yIG1pcnJvciB1c2FnZSwKICAvLy8gYG51bGxgIGlzIHVzZWQgYXMga2V5LgogIE1hcDxDb25zdHJ1Y3RvckVudGl0eSwgU2V0PEluc3RhbmNlPj4gaW5zdGFudGlhdGlvbk1hcDsKCiAgLy8vIFJlZ2lzdGVyIFt0eXBlXSBhcyB0aGUgaW5zdGFudGlhdGlvbiBba2luZF0gdXNpbmcgW2NvbnN0cnVjdG9yXS4KICB2b2lkIGFkZEluc3RhbnRpYXRpb24oCiAgICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yLCBJbnRlcmZhY2VUeXBlIHR5cGUsIEluc3RhbnRpYXRpb24ga2luZCkgewogICAgaW5zdGFudGlhdGlvbk1hcCA/Pz0gPENvbnN0cnVjdG9yRW50aXR5LCBTZXQ8SW5zdGFuY2U+Pnt9OwogICAgaW5zdGFudGlhdGlvbk1hcAogICAgICAgIC5wdXRJZkFic2VudChjb25zdHJ1Y3RvciwgKCkgPT4gbmV3IFNldDxJbnN0YW5jZT4oKSkKICAgICAgICAuYWRkKG5ldyBJbnN0YW5jZSh0eXBlLCBraW5kKSk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBJbnN0YW50aWF0aW9uLkRJUkVDVExZX0lOU1RBTlRJQVRFRDoKICAgICAgICBpc0RpcmVjdGx5SW5zdGFudGlhdGVkID0gdHJ1ZTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBJbnN0YW50aWF0aW9uLkFCU1RSQUNUTFlfSU5TVEFOVElBVEVEOgogICAgICAgIGlzQWJzdHJhY3RseUluc3RhbnRpYXRlZCA9IHRydWU7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRDoKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiSW5zdGFudGlhdGlvbiAka2luZCBpcyBub3QgYWxsb3dlZC4iKTsKICAgIH0KICB9CgogIC8vLyBgdHJ1ZWAgaWYgdGhlIGNsYXNzIGlzIGVpdGhlciBkaXJlY3RseSBvciBhYnN0cmFjdGx5IGluc3RhbnRpYXRlZC4KICBib29sIGdldCBoYXNJbnN0YW50aWF0aW9uID0+CiAgICAgIGlzRGlyZWN0bHlJbnN0YW50aWF0ZWQgfHwgaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkOwoKICAvLy8gYHRydWVgIGlmIHRoZSBjbGFzcyBpcyBkaXJlY3RseSBpbnN0YW50aWF0ZWQuCiAgYm9vbCBpc0RpcmVjdGx5SW5zdGFudGlhdGVkID0gZmFsc2U7CgogIC8vLyBgdHJ1ZWAgaWYgdGhlIGNsYXNzIGlzIGFic3RyYWN0bHkgaW5zdGFudGlhdGVkLgogIGJvb2wgaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkID0gZmFsc2U7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdJbnN0YW50aWF0aW9uSW5mb1snKTsKICAgIGlmIChpbnN0YW50aWF0aW9uTWFwICE9IG51bGwpIHsKICAgICAgYm9vbCBuZWVkc0NvbW1hID0gZmFsc2U7CiAgICAgIGluc3RhbnRpYXRpb25NYXAKICAgICAgICAgIC5mb3JFYWNoKChDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciwgU2V0PEluc3RhbmNlPiBzZXQpIHsKICAgICAgICBpZiAobmVlZHNDb21tYSkgewogICAgICAgICAgc2Iud3JpdGUoJywgJyk7CiAgICAgICAgfQogICAgICAgIGlmIChjb25zdHJ1Y3RvciAhPSBudWxsKSB7CiAgICAgICAgICBzYi53cml0ZShjb25zdHJ1Y3Rvcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNiLndyaXRlKCc8dW5rbm93bj4nKTsKICAgICAgICB9CiAgICAgICAgc2Iud3JpdGUoJzogJyk7CiAgICAgICAgc2Iud3JpdGUoc2V0KTsKICAgICAgICBuZWVkc0NvbW1hID0gdHJ1ZTsKICAgICAgfSk7CiAgICB9CiAgICBzYi53cml0ZSgnXScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLy8gSW1wbGVtZW50YXRpb24gb2YgW1Jlc29sdXRpb25FbnF1ZXVlcldvcmxkQnVpbGRlcl0uCmNsYXNzIFJlc29sdXRpb25Xb3JsZEJ1aWxkZXJJbXBsIGV4dGVuZHMgV29ybGRCdWlsZGVyQmFzZQogICAgaW1wbGVtZW50cyBSZXNvbHV0aW9uRW5xdWV1ZXJXb3JsZEJ1aWxkZXIgewogIC8vLyBJbnN0YW50aWF0aW9uIGluZm9ybWF0aW9uIGZvciBhbGwgY2xhc3NlcyB3aXRoIGluc3RhbnRpYXRlZCB0eXBlcy4KICAvLy8KICAvLy8gSW52YXJpYW50OiBFbGVtZW50cyBhcmUgZGVjbGFyYXRpb24gZWxlbWVudHMuCiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBJbnN0YW50aWF0aW9uSW5mbz4gX2luc3RhbnRpYXRpb25JbmZvID0KICAgICAgPENsYXNzRW50aXR5LCBJbnN0YW50aWF0aW9uSW5mbz57fTsKCiAgLy8vIENsYXNzZXMgaW1wbGVtZW50ZWQgYnkgZGlyZWN0bHkgaW5zdGFudGlhdGVkIGNsYXNzZXMuCiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBfaW1wbGVtZW50ZWRDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgLy8vIFRoZSBzZXQgb2YgYWxsIHJlZmVyZW5jZWQgc3RhdGljIGZpZWxkcy4KICAvLy8KICAvLy8gSW52YXJpYW50OiBFbGVtZW50cyBhcmUgZGVjbGFyYXRpb24gZWxlbWVudHMuCiAgZmluYWwgU2V0PEZpZWxkRW50aXR5PiBfYWxsUmVmZXJlbmNlZFN0YXRpY0ZpZWxkcyA9IG5ldyBTZXQ8RmllbGRFbnRpdHk+KCk7CgogIC8vLyBEb2N1bWVudGF0aW9uIHdhbnRlZCAtLSBqb2hubml3aW50aGVyCiAgLy8vCiAgLy8vIEludmFyaWFudDogRWxlbWVudHMgYXJlIGRlY2xhcmF0aW9uIGVsZW1lbnRzLgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gX21ldGhvZHNOZWVkaW5nU3VwZXJHZXR0ZXIgPQogICAgICBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwogIGZpbmFsIE1hcDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+IF9pbnZva2VkTmFtZXMgPQogICAgICA8U3RyaW5nLCBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+Pnt9OwogIGZpbmFsIE1hcDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+IF9pbnZva2VkR2V0dGVycyA9CiAgICAgIDxTdHJpbmcsIE1hcDxTZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cz4+e307CiAgZmluYWwgTWFwPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj4gX2ludm9rZWRTZXR0ZXJzID0KICAgICAgPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj57fTsKCiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBDbGFzc1VzYWdlPiBfcHJvY2Vzc2VkQ2xhc3NlcyA9CiAgICAgIDxDbGFzc0VudGl0eSwgQ2xhc3NVc2FnZT57fTsKCiAgTWFwPENsYXNzRW50aXR5LCBDbGFzc1VzYWdlPiBnZXQgY2xhc3NVc2FnZUZvclRlc3RpbmcgPT4gX3Byb2Nlc3NlZENsYXNzZXM7CgogIC8vLyBNYXAgb2YgcmVnaXN0ZXJlZCB1c2FnZSBvZiBtZW1iZXJzIG9mIGxpdmUgY2xhc3Nlcy4KICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBNZW1iZXJVc2FnZT4gX21lbWJlclVzYWdlID0KICAgICAgPE1lbWJlckVudGl0eSwgTWVtYmVyVXNhZ2U+e307CgogIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPiBnZXQgbWVtYmVyVXNhZ2VGb3JUZXN0aW5nID0+IF9tZW1iZXJVc2FnZTsKCiAgLy8vIE1hcCBjb250YWluaW5nIGluc3RhbmNlIG1lbWJlcnMgb2YgbGl2ZSBjbGFzc2VzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4KICAvLy8gZnVsbHkgaW52b2tlZCBkeW5hbWljYWxseS4KICAvLy8KICAvLy8gQSBtZXRob2QgaXMgZnVsbHkgaW52b2tlZCBpZiBhbGwgaXMgb3B0aW9uYWwgcGFyYW1ldGVyIGhhdmUgYmVlbiBwYXNzZWQKICAvLy8gaW4gc29tZSBpbnZvY2F0aW9uLgogIGZpbmFsIE1hcDxTdHJpbmcsIFNldDxNZW1iZXJVc2FnZT4+IF9pbnZva2FibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUgPQogICAgICA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+Pnt9OwoKICAvLy8gTWFwIGNvbnRhaW5pbmcgaW5zdGFuY2UgbWVtYmVycyBvZiBsaXZlIGNsYXNzZXMgdGhhdCBoYXZlIG5vdCB5ZXQgYmVlbgogIC8vLyByZWFkIGZyb20gZHluYW1pY2FsbHkuCiAgZmluYWwgTWFwPFN0cmluZywgU2V0PE1lbWJlclVzYWdlPj4gX3JlYWRhYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lID0KICAgICAgPFN0cmluZywgU2V0PE1lbWJlclVzYWdlPj57fTsKCiAgLy8vIE1hcCBjb250YWluaW5nIGluc3RhbmNlIG1lbWJlcnMgb2YgbGl2ZSBjbGFzc2VzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4KICAvLy8gd3JpdHRlbiB0byBkeW5hbWljYWxseS4KICBmaW5hbCBNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+PiBfd3JpdGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUgPQogICAgICA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+Pnt9OwoKICBmaW5hbCBTZXQ8RmllbGRFbnRpdHk+IF9maWVsZFNldHRlcnMgPSBuZXcgU2V0PEZpZWxkRW50aXR5PigpOwoKICBmaW5hbCBTZXQ8RGFydFR5cGU+IF9pc0NoZWNrcyA9IG5ldyBTZXQ8RGFydFR5cGU+KCk7CgogIC8vLyBTZXQgb2YgYWxsIGNsb3N1cmVzIGluIHRoZSBwcm9ncmFtLiBVc2VkIGJ5IHRoZSBtaXJyb3IgdHJhY2tpbmcgc3lzdGVtCiAgLy8vIHRvIGZpbmQgYWxsIGxpdmUgY2xvc3VyZSBpbnN0YW5jZXMuCiAgZmluYWwgU2V0PExvY2FsPiBfbG9jYWxGdW5jdGlvbnMgPSBuZXcgU2V0PExvY2FsPigpOwoKICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IF9jbG9zdXJpemVkTWVtYmVyc1dpdGhGcmVlVHlwZVZhcmlhYmxlcyA9CiAgICAgIG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CgogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBmaW5hbCBFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKICBmaW5hbCBEYXJ0VHlwZXMgX2RhcnRUeXBlczsKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CgogIGZpbmFsIE5hdGl2ZUJhc2ljRGF0YSBfbmF0aXZlQmFzaWNEYXRhOwogIGZpbmFsIE5hdGl2ZURhdGFCdWlsZGVyIF9uYXRpdmVEYXRhQnVpbGRlcjsKICBmaW5hbCBJbnRlcmNlcHRvckRhdGFCdWlsZGVyIF9pbnRlcmNlcHRvckRhdGFCdWlsZGVyOwogIGZpbmFsIEJhY2tlbmRVc2FnZUJ1aWxkZXIgX2JhY2tlbmRVc2FnZUJ1aWxkZXI7CiAgZmluYWwgUnVudGltZVR5cGVzTmVlZEJ1aWxkZXIgX3J0aU5lZWRCdWlsZGVyOwogIGZpbmFsIEtGaWVsZEFuYWx5c2lzIF9hbGxvY2F0b3JBbmFseXNpczsKICBmaW5hbCBOYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXIgX25hdGl2ZVJlc29sdXRpb25FbnF1ZXVlcjsKICBmaW5hbCBOb1N1Y2hNZXRob2RSZWdpc3RyeSBfbm9TdWNoTWV0aG9kUmVnaXN0cnk7CiAgZmluYWwgQW5ub3RhdGlvbnNEYXRhQnVpbGRlciBfYW5ub3RhdGlvbnNEYXRhQnVpbGRlcjsKCiAgZmluYWwgU2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5IF9zZWxlY3RvckNvbnN0cmFpbnRzU3RyYXRlZ3k7CiAgZmluYWwgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIF9jbGFzc0hpZXJhcmNoeUJ1aWxkZXI7CiAgZmluYWwgQ2xhc3NRdWVyaWVzIF9jbGFzc1F1ZXJpZXM7CgogIGJvb2wgX2Nsb3NlZCA9IGZhbHNlOwogIEtDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGRDYWNoZTsKICBmaW5hbCBTZXQ8TWVtYmVyRW50aXR5PiBfbGl2ZUluc3RhbmNlTWVtYmVycyA9IG5ldyBTZXQ8TWVtYmVyRW50aXR5PigpOwoKICBmaW5hbCBTZXQ8Q29uc3RhbnRWYWx1ZT4gX2NvbnN0YW50VmFsdWVzID0gbmV3IFNldDxDb25zdGFudFZhbHVlPigpOwoKICBmaW5hbCBTZXQ8TG9jYWw+IF9nZW5lcmljTG9jYWxGdW5jdGlvbnMgPSBuZXcgU2V0PExvY2FsPigpOwoKICBTZXQ8TWVtYmVyRW50aXR5PiBfcHJvY2Vzc2VkTWVtYmVycyA9IG5ldyBTZXQ8TWVtYmVyRW50aXR5PigpOwoKICBib29sIGdldCBpc0Nsb3NlZCA9PiBfY2xvc2VkOwoKICBmaW5hbCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIF9lbGVtZW50TWFwOwoKICBSZXNvbHV0aW9uV29ybGRCdWlsZGVySW1wbCgKICAgICAgdGhpcy5fb3B0aW9ucywKICAgICAgdGhpcy5fZWxlbWVudE1hcCwKICAgICAgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LAogICAgICB0aGlzLl9kYXJ0VHlwZXMsCiAgICAgIHRoaXMuX2NvbW1vbkVsZW1lbnRzLAogICAgICB0aGlzLl9uYXRpdmVCYXNpY0RhdGEsCiAgICAgIHRoaXMuX25hdGl2ZURhdGFCdWlsZGVyLAogICAgICB0aGlzLl9pbnRlcmNlcHRvckRhdGFCdWlsZGVyLAogICAgICB0aGlzLl9iYWNrZW5kVXNhZ2VCdWlsZGVyLAogICAgICB0aGlzLl9ydGlOZWVkQnVpbGRlciwKICAgICAgdGhpcy5fYWxsb2NhdG9yQW5hbHlzaXMsCiAgICAgIHRoaXMuX25hdGl2ZVJlc29sdXRpb25FbnF1ZXVlciwKICAgICAgdGhpcy5fbm9TdWNoTWV0aG9kUmVnaXN0cnksCiAgICAgIHRoaXMuX2Fubm90YXRpb25zRGF0YUJ1aWxkZXIsCiAgICAgIHRoaXMuX3NlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneSwKICAgICAgdGhpcy5fY2xhc3NIaWVyYXJjaHlCdWlsZGVyLAogICAgICB0aGlzLl9jbGFzc1F1ZXJpZXMpOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IHByb2Nlc3NlZENsYXNzZXMgPT4gX3Byb2Nlc3NlZENsYXNzZXMua2V5cwogICAgICAud2hlcmUoKGNscykgPT4gX3Byb2Nlc3NlZENsYXNzZXNbY2xzXS5pc0luc3RhbnRpYXRlZCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNNZW1iZXJQcm9jZXNzZWQoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4KICAgICAgX3Byb2Nlc3NlZE1lbWJlcnMuY29udGFpbnMobWVtYmVyKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclByb2Nlc3NlZE1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBfcHJvY2Vzc2VkTWVtYmVycy5hZGQobWVtYmVyKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IHByb2Nlc3NlZE1lbWJlcnMgPT4gX3Byb2Nlc3NlZE1lbWJlcnM7CgogIEBvdmVycmlkZQogIEtDbG9zZWRXb3JsZCBnZXQgY2xvc2VkV29ybGRGb3JUZXN0aW5nIHsKICAgIGlmICghX2Nsb3NlZCkgewogICAgICBmYWlsZWRBdCgKICAgICAgICAgIE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwgIlRoZSB3b3JsZCBidWlsZGVyIGhhcyBub3QgeWV0IGJlZW4gY2xvc2VkLiIpOwogICAgfQogICAgcmV0dXJuIF9jbG9zZWRXb3JsZENhY2hlOwogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW1wcm92ZSBzZW1hbnRpYyBwcmVjaXNpb24uCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBkaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXMgewogICAgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgIGdldEluc3RhbnRpYXRpb25NYXAoKS5mb3JFYWNoKChDbGFzc0VudGl0eSBjbHMsIEluc3RhbnRpYXRpb25JbmZvIGluZm8pIHsKICAgICAgaWYgKGluZm8uaGFzSW5zdGFudGlhdGlvbikgewogICAgICAgIGNsYXNzZXMuYWRkKGNscyk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIGNsYXNzZXM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ2xvc3VyaXplZE1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgRnVuY3Rpb25UeXBlIHR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShlbGVtZW50KTsKICAgIGlmICh0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcykgewogICAgICBfY2xvc3VyaXplZE1lbWJlcnNXaXRoRnJlZVR5cGVWYXJpYWJsZXMuYWRkKGVsZW1lbnQpOwogICAgfQogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogRnVsbHkgZW5mb3JjZSB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGV4YWN0LCB0aHJvdWdoCiAgLy8gc3ViY2xhc3MgYW5kIHRocm91Z2ggc3VidHlwZSBpbnN0YW50aWF0ZWQgdHlwZXMvY2xhc3Nlcy4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IHVua25vd24gdHlwZSBhcmd1bWVudHMgZm9yIGdlbmVyaWMgdHlwZXMuCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclR5cGVJbnN0YW50aWF0aW9uKAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUsIENsYXNzVXNlZENhbGxiYWNrIGNsYXNzVXNlZCwKICAgICAge0NvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yfSkgewogICAgQ2xhc3NFbnRpdHkgY2xzID0gdHlwZS5lbGVtZW50OwogICAgSW5zdGFudGlhdGlvbkluZm8gaW5mbyA9CiAgICAgICAgX2luc3RhbnRpYXRpb25JbmZvLnB1dElmQWJzZW50KGNscywgKCkgPT4gbmV3IEluc3RhbnRpYXRpb25JbmZvKCkpOwogICAgSW5zdGFudGlhdGlvbiBraW5kID0gSW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRDsKICAgIGJvb2wgaXNOYXRpdmUgPSBfbmF0aXZlQmFzaWNEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKTsKICAgIC8vIFdlIGNhbid0IHVzZSB0aGUgY2xvc2VkLXdvcmxkIGFzc3VtcHRpb24gd2l0aCBuYXRpdmUgYWJzdHJhY3QKICAgIC8vIGNsYXNzZXM7IGEgbmF0aXZlIGFic3RyYWN0IGNsYXNzIG1heSBoYXZlIG5vbi1hYnN0cmFjdCBzdWJjbGFzc2VzCiAgICAvLyBub3QgZGVjbGFyZWQgdG8gdGhlIHByb2dyYW0uICBJbnN0YW5jZXMgb2YgdGhlc2UgY2xhc3NlcyBhcmUKICAgIC8vIGluZGlzdGluZ3Vpc2hhYmxlIGZyb20gdGhlIGFic3RyYWN0IGNsYXNzLgogICAgaWYgKCFjbHMuaXNBYnN0cmFjdCB8fCBpc05hdGl2ZSkgewogICAgICBpZiAoaXNOYXRpdmUpIHsKICAgICAgICBraW5kID0gSW5zdGFudGlhdGlvbi5BQlNUUkFDVExZX0lOU1RBTlRJQVRFRDsKICAgICAgfSBlbHNlIHsKICAgICAgICBraW5kID0gSW5zdGFudGlhdGlvbi5ESVJFQ1RMWV9JTlNUQU5USUFURUQ7CiAgICAgIH0KICAgIH0KICAgIGluZm8uYWRkSW5zdGFudGlhdGlvbihjb25zdHJ1Y3RvciwgdHlwZSwga2luZCk7CiAgICBpZiAoa2luZCAhPSBJbnN0YW50aWF0aW9uLlVOSU5TVEFOVElBVEVEKSB7CiAgICAgIF9jbGFzc0hpZXJhcmNoeUJ1aWxkZXIudXBkYXRlQ2xhc3NIaWVyYXJjaHlOb2RlRm9yQ2xhc3MoY2xzLAogICAgICAgICAgZGlyZWN0bHlJbnN0YW50aWF0ZWQ6IGluZm8uaXNEaXJlY3RseUluc3RhbnRpYXRlZCwKICAgICAgICAgIGFic3RyYWN0bHlJbnN0YW50aWF0ZWQ6IGluZm8uaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkKTsKICAgICAgX3Byb2Nlc3NJbnN0YW50aWF0ZWRDbGFzcyhjbHMsIGNsYXNzVXNlZCk7CiAgICB9CgogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIFtfaW5zdGFudGlhdGlvbkluZm9dIHRvIGNvbXB1dGUgdGhpcyBpbmZvcm1hdGlvbgogICAgLy8gaW5zdGVhZC4KICAgIGlmIChfaW1wbGVtZW50ZWRDbGFzc2VzLmFkZChjbHMpKSB7CiAgICAgIGNsYXNzVXNlZChjbHMsIF9nZXRDbGFzc1VzYWdlKGNscykuaW1wbGVtZW50KCkpOwogICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hTdXBlcnR5cGUoY2xzLCAoSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUpIHsKICAgICAgICBpZiAoX2ltcGxlbWVudGVkQ2xhc3Nlcy5hZGQoc3VwZXJ0eXBlLmVsZW1lbnQpKSB7CiAgICAgICAgICBjbGFzc1VzZWQoCiAgICAgICAgICAgICAgc3VwZXJ0eXBlLmVsZW1lbnQsIF9nZXRDbGFzc1VzYWdlKHN1cGVydHlwZS5lbGVtZW50KS5pbXBsZW1lbnQoKSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICB9CgogIEl0ZXJhYmxlPENhbGxTdHJ1Y3R1cmU+IF9nZXRNYXRjaGluZ0NhbGxTdHJ1Y3R1cmVzKAogICAgICBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycywgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgaWYgKHNlbGVjdG9ycyA9PSBudWxsKSByZXR1cm4gY29uc3QgPENhbGxTdHJ1Y3R1cmU+W107CiAgICBTZXQ8Q2FsbFN0cnVjdHVyZT4gY2FsbFN0cnVjdHVyZXM7CiAgICBmb3IgKFNlbGVjdG9yIHNlbGVjdG9yIGluIHNlbGVjdG9ycy5rZXlzKSB7CiAgICAgIGlmIChzZWxlY3Rvci5hcHBsaWVzVW5uYW1lZChtZW1iZXIpKSB7CiAgICAgICAgU2VsZWN0b3JDb25zdHJhaW50cyBtYXNrcyA9IHNlbGVjdG9yc1tzZWxlY3Rvcl07CiAgICAgICAgaWYgKG1hc2tzLmNhbkhpdChtZW1iZXIsIHNlbGVjdG9yLm1lbWJlck5hbWUsIHRoaXMpKSB7CiAgICAgICAgICBjYWxsU3RydWN0dXJlcyA/Pz0gbmV3IFNldDxDYWxsU3RydWN0dXJlPigpOwogICAgICAgICAgY2FsbFN0cnVjdHVyZXMuYWRkKHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGNhbGxTdHJ1Y3R1cmVzID8/IGNvbnN0IDxDYWxsU3RydWN0dXJlPltdOwogIH0KCiAgYm9vbCBfaGFzTWF0Y2hpbmdTZWxlY3RvcigKICAgICAgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBzZWxlY3RvcnMsIE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIGlmIChzZWxlY3RvcnMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChTZWxlY3RvciBzZWxlY3RvciBpbiBzZWxlY3RvcnMua2V5cykgewogICAgICBpZiAoc2VsZWN0b3IuYXBwbGllc1VubmFtZWQobWVtYmVyKSkgewogICAgICAgIFNlbGVjdG9yQ29uc3RyYWludHMgbWFza3MgPSBzZWxlY3RvcnNbc2VsZWN0b3JdOwogICAgICAgIGlmIChtYXNrcy5jYW5IaXQobWVtYmVyLCBzZWxlY3Rvci5tZW1iZXJOYW1lLCB0aGlzKSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgaW5zdGFudGlhdGlvbiBtYXAgdXNlZCBmb3IgY29tcHV0aW5nIHRoZSBjbG9zZWQgd29ybGQuCiAgTWFwPENsYXNzRW50aXR5LCBJbnN0YW50aWF0aW9uSW5mbz4gZ2V0SW5zdGFudGlhdGlvbk1hcCgpIHsKICAgIHJldHVybiBfaW5zdGFudGlhdGlvbkluZm87CiAgfQoKICBJdGVyYWJsZTxDYWxsU3RydWN0dXJlPiBfZ2V0SW52b2NhdGlvbkNhbGxTdHJ1Y3R1cmVzKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBfZ2V0TWF0Y2hpbmdDYWxsU3RydWN0dXJlcyhfaW52b2tlZE5hbWVzW21lbWJlci5uYW1lXSwgbWVtYmVyKTsKICB9CgogIGJvb2wgX2hhc0ludm9rZWRHZXR0ZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF9oYXNNYXRjaGluZ1NlbGVjdG9yKF9pbnZva2VkR2V0dGVyc1ttZW1iZXIubmFtZV0sIG1lbWJlcik7CiAgfQoKICBib29sIF9oYXNJbnZva2VkU2V0dGVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIHJldHVybiBfaGFzTWF0Y2hpbmdTZWxlY3RvcihfaW52b2tlZFNldHRlcnNbbWVtYmVyLm5hbWVdLCBtZW1iZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckR5bmFtaWNVc2UoCiAgICAgIER5bmFtaWNVc2UgZHluYW1pY1VzZSwgTWVtYmVyVXNlZENhbGxiYWNrIG1lbWJlclVzZWQpIHsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gZHluYW1pY1VzZS5zZWxlY3RvcjsKICAgIFN0cmluZyBtZXRob2ROYW1lID0gc2VsZWN0b3IubmFtZTsKCiAgICB2b2lkIF9wcm9jZXNzKAogICAgICAgIE1hcDxTdHJpbmcsIFNldDxNZW1iZXJVc2FnZT4+IG1lbWJlck1hcCwKICAgICAgICBFbnVtU2V0PE1lbWJlclVzZT4gYWN0aW9uKE1lbWJlclVzYWdlIHVzYWdlKSwKICAgICAgICBib29sIHNob3VsZEJlUmVtb3ZlZChNZW1iZXJVc2FnZSB1c2FnZSkpIHsKICAgICAgX3Byb2Nlc3NTZXQobWVtYmVyTWFwLCBtZXRob2ROYW1lLCAoTWVtYmVyVXNhZ2UgdXNhZ2UpIHsKICAgICAgICBpZiAoc2VsZWN0b3IuYXBwbGllc1VubmFtZWQodXNhZ2UuZW50aXR5KSAmJgogICAgICAgICAgICBfc2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5LmFwcGxpZWRVbm5hbWVkKAogICAgICAgICAgICAgICAgZHluYW1pY1VzZSwgdXNhZ2UuZW50aXR5LCB0aGlzKSkgewogICAgICAgICAgbWVtYmVyVXNlZCh1c2FnZS5lbnRpdHksIGFjdGlvbih1c2FnZSkpOwogICAgICAgICAgcmV0dXJuIHNob3VsZEJlUmVtb3ZlZCh1c2FnZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSk7CiAgICB9CgogICAgc3dpdGNoIChkeW5hbWljVXNlLmtpbmQpIHsKICAgICAgY2FzZSBEeW5hbWljVXNlS2luZC5JTlZPS0U6CiAgICAgICAgcmVnaXN0ZXJEeW5hbWljSW52b2NhdGlvbigKICAgICAgICAgICAgZHluYW1pY1VzZS5zZWxlY3RvciwgZHluYW1pY1VzZS50eXBlQXJndW1lbnRzKTsKICAgICAgICBpZiAoX3JlZ2lzdGVyTmV3U2VsZWN0b3IoZHluYW1pY1VzZSwgX2ludm9rZWROYW1lcykpIHsKICAgICAgICAgIF9wcm9jZXNzKAogICAgICAgICAgICAgIF9pbnZva2FibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUsCiAgICAgICAgICAgICAgKG0pID0+IG0uaW52b2tlKAogICAgICAgICAgICAgICAgICBBY2Nlc3Nlcy5keW5hbWljQWNjZXNzLCBkeW5hbWljVXNlLnNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUpLAogICAgICAgICAgICAgIC8vIElmIG5vdCBhbGwgb3B0aW9uYWwgcGFyYW1ldGVycyBoYXZlIGJlZW4gcGFzc2VkIGluIGludm9jYXRpb25zCiAgICAgICAgICAgICAgLy8gd2UgbXVzdCBrZWVwIHRoZSBtZW1iZXIgaW4gW19pbnZva2FibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWVdLgogICAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEFsc28gcmVtb3ZlIGZyb20KICAgICAgICAgICAgICAvLyBbX3JlYWRhYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lXSBpbiBjYXNlIG9mIGdldHRlcnMvc2V0dGVycy4KICAgICAgICAgICAgICAodSkgPT4gIXUuaGFzUGVuZGluZ0R5bmFtaWNJbnZva2UpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBEeW5hbWljVXNlS2luZC5HRVQ6CiAgICAgICAgaWYgKF9yZWdpc3Rlck5ld1NlbGVjdG9yKGR5bmFtaWNVc2UsIF9pbnZva2VkR2V0dGVycykpIHsKICAgICAgICAgIF9wcm9jZXNzKAogICAgICAgICAgICAgIF9yZWFkYWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZSwKICAgICAgICAgICAgICAobSkgPT4gbS5yZWFkKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MpLAogICAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1lbWJlcnMgY2Fubm90IGJlIHBhcnRpYWxseSByZWFkIHNvCiAgICAgICAgICAgICAgLy8gd2Ugc2hvdWxkIGFsd2F5cyByZW1vdmUgdGhlbS4KICAgICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBbHNvIHJlbW92ZSBmcm9tCiAgICAgICAgICAgICAgLy8gW19pbnZva2FibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWVdIGluIGNhc2Ugb2YgbWV0aG9kcy4KICAgICAgICAgICAgICAodSkgPT4gIXUuaGFzUGVuZGluZ0R5bmFtaWNSZWFkKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRHluYW1pY1VzZUtpbmQuU0VUOgogICAgICAgIGlmIChfcmVnaXN0ZXJOZXdTZWxlY3RvcihkeW5hbWljVXNlLCBfaW52b2tlZFNldHRlcnMpKSB7CiAgICAgICAgICBfcHJvY2VzcygKICAgICAgICAgICAgICBfd3JpdGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWUsCiAgICAgICAgICAgICAgKG0pID0+IG0ud3JpdGUoQWNjZXNzZXMuZHluYW1pY0FjY2VzcyksCiAgICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWVtYmVycyBjYW5ub3QgYmUgcGFydGlhbGx5IHdyaXR0ZW4gc28KICAgICAgICAgICAgICAvLyB3ZSBzaG91bGQgYWx3YXlzIHJlbW92ZSB0aGVtLgogICAgICAgICAgICAgICh1KSA9PiAhdS5oYXNQZW5kaW5nRHluYW1pY1dyaXRlKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICBib29sIF9yZWdpc3Rlck5ld1NlbGVjdG9yKER5bmFtaWNVc2UgZHluYW1pY1VzZSwKICAgICAgTWFwPFN0cmluZywgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPj4gc2VsZWN0b3JNYXApIHsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gZHluYW1pY1VzZS5zZWxlY3RvcjsKICAgIFN0cmluZyBuYW1lID0gc2VsZWN0b3IubmFtZTsKICAgIE9iamVjdCBjb25zdHJhaW50ID0gZHluYW1pY1VzZS5yZWNlaXZlckNvbnN0cmFpbnQ7CiAgICBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycyA9IHNlbGVjdG9yTWFwLnB1dElmQWJzZW50KAogICAgICAgIG5hbWUsICgpID0+IG5ldyBNYXBsZXQ8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+KCkpOwogICAgVW5pdmVyc2VTZWxlY3RvckNvbnN0cmFpbnRzIGNvbnN0cmFpbnRzID0gc2VsZWN0b3JzW3NlbGVjdG9yXTsKICAgIGlmIChjb25zdHJhaW50cyA9PSBudWxsKSB7CiAgICAgIHNlbGVjdG9yc1tzZWxlY3Rvcl0gPSBfc2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5CiAgICAgICAgICAuY3JlYXRlU2VsZWN0b3JDb25zdHJhaW50cyhzZWxlY3RvciwgY29uc3RyYWludCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGNvbnN0cmFpbnRzLmFkZFJlY2VpdmVyQ29uc3RyYWludChjb25zdHJhaW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJJc0NoZWNrKGNvdmFyaWFudCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBfaXNDaGVja3MuYWRkKHR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCByZWdpc3RlckNvbnN0YW50VXNlKENvbnN0YW50VXNlIHVzZSkgewogICAgcmV0dXJuIF9jb25zdGFudFZhbHVlcy5hZGQodXNlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGF0aWNVc2UoU3RhdGljVXNlIHN0YXRpY1VzZSwgTWVtYmVyVXNlZENhbGxiYWNrIG1lbWJlclVzZWQpIHsKICAgIGlmIChzdGF0aWNVc2Uua2luZCA9PSBTdGF0aWNVc2VLaW5kLkNMT1NVUkUpIHsKICAgICAgTG9jYWwgbG9jYWxGdW5jdGlvbiA9IHN0YXRpY1VzZS5lbGVtZW50OwogICAgICBGdW5jdGlvblR5cGUgdHlwZSA9CiAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldExvY2FsRnVuY3Rpb25UeXBlKGxvY2FsRnVuY3Rpb24pOwogICAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzLmlzTm90RW1wdHkpIHsKICAgICAgICBfZ2VuZXJpY0xvY2FsRnVuY3Rpb25zLmFkZChsb2NhbEZ1bmN0aW9uKTsKICAgICAgfQogICAgICBfbG9jYWxGdW5jdGlvbnMuYWRkKHN0YXRpY1VzZS5lbGVtZW50KTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmIChzdGF0aWNVc2Uua2luZCA9PSBTdGF0aWNVc2VLaW5kLkNMT1NVUkVfQ0FMTCkgewogICAgICBpZiAoc3RhdGljVXNlLnR5cGVBcmd1bWVudHM/LmlzTm90RW1wdHkgPz8gZmFsc2UpIHsKICAgICAgICByZWdpc3RlckR5bmFtaWNJbnZvY2F0aW9uKAogICAgICAgICAgICBuZXcgU2VsZWN0b3IuY2FsbChOYW1lcy5jYWxsLCBzdGF0aWNVc2UuY2FsbFN0cnVjdHVyZSksCiAgICAgICAgICAgIHN0YXRpY1VzZS50eXBlQXJndW1lbnRzKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CgogICAgTWVtYmVyRW50aXR5IGVsZW1lbnQgPSBzdGF0aWNVc2UuZWxlbWVudDsKICAgIEVudW1TZXQ8TWVtYmVyVXNlPiB1c2VTZXQgPSBuZXcgRW51bVNldDxNZW1iZXJVc2U+KCk7CiAgICBNZW1iZXJVc2FnZSB1c2FnZSA9IF9nZXRNZW1iZXJVc2FnZShlbGVtZW50LCB1c2VTZXQpOwoKICAgIGlmICgoZWxlbWVudC5pc1N0YXRpYyB8fCBlbGVtZW50LmlzVG9wTGV2ZWwpICYmIGVsZW1lbnQuaXNGaWVsZCkgewogICAgICBfYWxsUmVmZXJlbmNlZFN0YXRpY0ZpZWxkcy5hZGQoc3RhdGljVXNlLmVsZW1lbnQpOwogICAgfQogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhpcy4gQ3VycmVudGx5IFtGSUVMRF9HRVRdIGFuZAogICAgLy8gW0ZJRUxEX1NFVF0gY29udGFpbnMgW0JveEZpZWxkRWxlbWVudF1zIHdoaWNoIHdlIGNhbm5vdCBlbnF1ZXVlLgogICAgLy8gQWxzbyBbQ0xPU1VSRV0gY29udGFpbnMgW0xvY2FsRnVuY3Rpb25FbGVtZW50XSB3aGljaCB3ZSBjYW5ub3QKICAgIC8vIGVucXVldWUuCgogICAgc3dpdGNoIChzdGF0aWNVc2Uua2luZCkgewogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuSU5TVEFOQ0VfRklFTERfR0VUOgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuSU5TVEFOQ0VfRklFTERfU0VUOgogICAgICAgIF9maWVsZFNldHRlcnMuYWRkKHN0YXRpY1VzZS5lbGVtZW50KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNMT1NVUkU6CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DTE9TVVJFX0NBTEw6CiAgICAgICAgLy8gQWxyZWFkeSBoYW5kbGVkIGFib3ZlLgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfVEVBUl9PRkY6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5yZWFkKEFjY2Vzc2VzLnN1cGVyQWNjZXNzKSk7CiAgICAgICAgX21ldGhvZHNOZWVkaW5nU3VwZXJHZXR0ZXIuYWRkKHN0YXRpY1VzZS5lbGVtZW50KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNVUEVSX0ZJRUxEX1NFVDoKICAgICAgICBfZmllbGRTZXR0ZXJzLmFkZChzdGF0aWNVc2UuZWxlbWVudCk7CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS53cml0ZShBY2Nlc3Nlcy5zdXBlckFjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfR0VUOgogICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UucmVhZChBY2Nlc3Nlcy5zdXBlckFjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX0dFVDoKICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLnJlYWQoQWNjZXNzZXMuc3RhdGljQWNjZXNzKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVEFUSUNfVEVBUl9PRkY6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5yZWFkKEFjY2Vzc2VzLnN0YXRpY0FjY2VzcykpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfU0VUVEVSX1NFVDoKICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLndyaXRlKEFjY2Vzc2VzLnN1cGVyQWNjZXNzKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVEFUSUNfU0VUOgogICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2Uud3JpdGUoQWNjZXNzZXMuc3RhdGljQWNjZXNzKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5GSUVMRF9JTklUOgogICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UuaW5pdCgpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkZJRUxEX0NPTlNUQU5UX0lOSVQ6CiAgICAgICAgdXNlU2V0LmFkZEFsbCh1c2FnZS5jb25zdGFudEluaXQoc3RhdGljVXNlLmNvbnN0YW50KSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9JTlZPS0U6CiAgICAgICAgcmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uKHN0YXRpY1VzZSk7CiAgICAgICAgdXNlU2V0LmFkZEFsbCgKICAgICAgICAgICAgdXNhZ2UuaW52b2tlKEFjY2Vzc2VzLnN1cGVyQWNjZXNzLCBzdGF0aWNVc2UuY2FsbFN0cnVjdHVyZSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX0lOVk9LRToKICAgICAgICByZWdpc3RlclN0YXRpY0ludm9jYXRpb24oc3RhdGljVXNlKTsKICAgICAgICB1c2VTZXQuYWRkQWxsKAogICAgICAgICAgICB1c2FnZS5pbnZva2UoQWNjZXNzZXMuc3RhdGljQWNjZXNzLCBzdGF0aWNVc2UuY2FsbFN0cnVjdHVyZSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ09OU1RSVUNUT1JfSU5WT0tFOgogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ09OU1RfQ09OU1RSVUNUT1JfSU5WT0tFOgogICAgICAgIHVzZVNldC5hZGRBbGwoCiAgICAgICAgICAgIHVzYWdlLmludm9rZShBY2Nlc3Nlcy5zdGF0aWNBY2Nlc3MsIHN0YXRpY1VzZS5jYWxsU3RydWN0dXJlKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5ESVJFQ1RfSU5WT0tFOgogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsICdEaXJlY3Qgc3RhdGljIHVzZSBpcyBub3Qgc3VwcG9ydGVkIGZvciByZXNvbHV0aW9uLicpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuSU5MSU5JTkc6CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DQUxMX01FVEhPRDoKICAgICAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgICAiU3RhdGljIHVzZSAke3N0YXRpY1VzZS5raW5kfSBpcyBub3Qgc3VwcG9ydGVkIGR1cmluZyByZXNvbHV0aW9uLiIpOwogICAgfQogICAgaWYgKHVzZVNldC5pc05vdEVtcHR5KSB7CiAgICAgIG1lbWJlclVzZWQodXNhZ2UuZW50aXR5LCB1c2VTZXQpOwogICAgfQogIH0KCiAgLy8vIENhbGxlZCB0byBjcmVhdGUgYSBbQ2xhc3NVc2FnZV0gZm9yIFtjbHNdLgogIC8vLwogIC8vLyBTdWJjbGFzc2VzIG92ZXJyaWRlIHRoaXMgdG8gZW5zdXJlIG5lZWRlZCBpbnZhcmlhbnRzIG9uIFtjbHNdLgogIENsYXNzVXNhZ2UgX2NyZWF0ZUNsYXNzVXNhZ2UoY292YXJpYW50IENsYXNzRW50aXR5IGNscykgPT4KICAgICAgbmV3IENsYXNzVXNhZ2UoY2xzKTsKCiAgLy8vIFJldHVybiB0aGUgY2Fub25pY2FsIFtDbGFzc1VzYWdlXSBmb3IgW2Nsc10uCiAgQ2xhc3NVc2FnZSBfZ2V0Q2xhc3NVc2FnZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfcHJvY2Vzc2VkQ2xhc3Nlcy5wdXRJZkFic2VudChjbHMsICgpIHsKICAgICAgcmV0dXJuIF9jcmVhdGVDbGFzc1VzYWdlKGNscyk7CiAgICB9KTsKICB9CgogIC8vLyBSZWdpc3RlciBbY2xzXSBhbmQgYWxsIGl0cyBzdXBlcmNsYXNzZXMgYXMgaW5zdGFudGlhdGVkLgogIHZvaWQgX3Byb2Nlc3NJbnN0YW50aWF0ZWRDbGFzcyhDbGFzc0VudGl0eSBjbHMsIENsYXNzVXNlZENhbGxiYWNrIGNsYXNzVXNlZCkgewogICAgLy8gUmVnaXN0ZXJzIFtzdXBlcmNsYXNzXSBhcyBpbnN0YW50aWF0ZWQuIFJldHVybnMgYHRydWVgIGlmIGl0IHdhc24ndAogICAgLy8gYWxyZWFkeSBpbnN0YW50aWF0ZWQgYW5kIHdlIHRoZXJlZm9yZSBoYXZlIHRvIHByb2Nlc3MgaXRzIHN1cGVyY2xhc3MgYXMKICAgIC8vIHdlbGwuCiAgICBib29sIHByb2Nlc3NDbGFzcyhDbGFzc0VudGl0eSBzdXBlcmNsYXNzKSB7CiAgICAgIENsYXNzVXNhZ2UgdXNhZ2UgPSBfZ2V0Q2xhc3NVc2FnZShzdXBlcmNsYXNzKTsKICAgICAgaWYgKCF1c2FnZS5pc0luc3RhbnRpYXRlZCkgewogICAgICAgIGNsYXNzVXNlZCh1c2FnZS5jbHMsIHVzYWdlLmluc3RhbnRpYXRlKCkpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB3aGlsZSAoY2xzICE9IG51bGwgJiYgcHJvY2Vzc0NsYXNzKGNscykpIHsKICAgICAgY2xzID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByb2Nlc3NDbGFzc01lbWJlcnMoQ2xhc3NFbnRpdHkgY2xzLCBNZW1iZXJVc2VkQ2FsbGJhY2sgbWVtYmVyVXNlZCwKICAgICAge2Jvb2wgY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5OiBmYWxzZX0pIHsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENsYXNzTWVtYmVyKGNscywKICAgICAgICAoQ2xhc3NFbnRpdHkgY2xzLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIF9wcm9jZXNzSW5zdGFudGlhdGVkQ2xhc3NNZW1iZXIoY2xzLCBtZW1iZXIsIG1lbWJlclVzZWQsCiAgICAgICAgICBjaGVja0VucXVldWVyQ29uc2lzdGVuY3k6IGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeSk7CiAgICB9KTsKICB9CgogIC8vLyBDYWxsIFt1cGRhdGVVc2FnZV0gb24gYWxsIFtNZW1iZXJVc2FnZV1zIGluIHRoZSBzZXQgaW4gW21hcF0gZm9yCiAgLy8vIFttZW1iZXJOYW1lXS4gSWYgW3VwZGF0ZVVzYWdlXSByZXR1cm5zIGB0cnVlYCB0aGUgdXNhZ2UgaXMgcmVtb3ZlZCBmcm9tCiAgLy8vIHRoZSBzZXQuCiAgdm9pZCBfcHJvY2Vzc1NldChNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyVXNhZ2U+PiBtYXAsIFN0cmluZyBtZW1iZXJOYW1lLAogICAgICBib29sIHVwZGF0ZVVzYWdlKE1lbWJlclVzYWdlIGUpKSB7CiAgICBTZXQ8TWVtYmVyVXNhZ2U+IG1lbWJlcnMgPSBtYXBbbWVtYmVyTmFtZV07CiAgICBpZiAobWVtYmVycyA9PSBudWxsKSByZXR1cm47CiAgICAvLyBbZl0gbWlnaHQgYWRkIGVsZW1lbnRzIHRvIFs6IG1hcFttZW1iZXJOYW1lXSA6XSBkdXJpbmcgdGhlIGxvb3AgYmVsb3cKICAgIC8vIHNvIHdlIGNyZWF0ZSBhIG5ldyBsaXN0IGZvciBbOiBtYXBbbWVtYmVyTmFtZV0gOl0gYW5kIHByZXBlbmQgdGhlCiAgICAvLyBbcmVtYWluaW5nXSBtZW1iZXJzIGFmdGVyIHRoZSBsb29wLgogICAgbWFwW21lbWJlck5hbWVdID0gbmV3IFNldDxNZW1iZXJVc2FnZT4oKTsKICAgIFNldDxNZW1iZXJVc2FnZT4gcmVtYWluaW5nID0gbmV3IFNldDxNZW1iZXJVc2FnZT4oKTsKICAgIGZvciAoTWVtYmVyVXNhZ2UgdXNhZ2UgaW4gbWVtYmVycykgewogICAgICBpZiAoIXVwZGF0ZVVzYWdlKHVzYWdlKSkgewogICAgICAgIHJlbWFpbmluZy5hZGQodXNhZ2UpOwogICAgICB9CiAgICB9CiAgICBtYXBbbWVtYmVyTmFtZV0uYWRkQWxsKHJlbWFpbmluZyk7CiAgfQoKICBNZW1iZXJVc2FnZSBfZ2V0TWVtYmVyVXNhZ2UoTWVtYmVyRW50aXR5IG1lbWJlciwgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCwKICAgICAge2Jvb2wgY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5OiBmYWxzZX0pIHsKICAgIE1lbWJlclVzYWdlIHVzYWdlID0gX21lbWJlclVzYWdlW21lbWJlcl07CiAgICBpZiAodXNhZ2UgPT0gbnVsbCkgewogICAgICBpZiAobWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICBTdHJpbmcgbWVtYmVyTmFtZSA9IG1lbWJlci5uYW1lOwogICAgICAgIENsYXNzRW50aXR5IGNscyA9IG1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDaGFuZ2UgdGhpcyB0byB1c2UgaXNOYXRpdmVNZW1iZXIgd2hlbiB3ZSB1c2UKICAgICAgICAvLyBDRkUgY29uc3RhbnRzLgogICAgICAgIC8vIFRoZSBvYnZpb3VzIHRoaW5nIHRvIHRlc3QgaGVyZSB3b3VsZCBiZSAibWVtYmVyLmlzTmF0aXZlIiwKICAgICAgICAvLyBob3dldmVyLCB0aGF0IG9ubHkgd29ya3MgYWZ0ZXIgbWV0YWRhdGEgaGFzIGJlZW4gcGFyc2VkL2FuYWx5emVkLAogICAgICAgIC8vIGFuZCB0aGF0IG1heSBub3QgaGF2ZSBoYXBwZW5lZCB5ZXQuCiAgICAgICAgLy8gU28gaW5zdGVhZCB3ZSB1c2UgdGhlIGVuY2xvc2luZyBjbGFzcywgd2hpY2ggd2Uga25vdyBoYXZlIGhhZAogICAgICAgIC8vIGl0cyBtZXRhZGF0YSBwYXJzZWQgYW5kIGFuYWx5emVkLgogICAgICAgIC8vIE5vdGU6IHRoaXMgYXNzdW1lcyB0aGF0IHRoZXJlIGFyZSBubyBub24tbmF0aXZlIGZpZWxkcyBvbiBuYXRpdmUKICAgICAgICAvLyBjbGFzc2VzLCB3aGljaCBtYXkgbm90IGJlIHRoZSBjYXNlIHdoZW4gYSBuYXRpdmUgY2xhc3MgaXMgc3ViY2xhc3NlZC4KICAgICAgICBib29sIGlzTmF0aXZlID0gX25hdGl2ZUJhc2ljRGF0YS5pc05hdGl2ZUNsYXNzKGNscyk7CiAgICAgICAgdXNhZ2UgPSBuZXcgTWVtYmVyVXNhZ2UobWVtYmVyKTsKICAgICAgICBpZiAobWVtYmVyLmlzRmllbGQgJiYgIWlzTmF0aXZlKSB7CiAgICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLmluaXQoKSk7CiAgICAgICAgfQogICAgICAgIGlmICghY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5KSB7CiAgICAgICAgICBpZiAobWVtYmVyLmlzRmllbGQgJiYgaXNOYXRpdmUpIHsKICAgICAgICAgICAgcmVnaXN0ZXJVc2VkRWxlbWVudChtZW1iZXIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG1lbWJlci5pc0Z1bmN0aW9uICYmCiAgICAgICAgICAgICAgbWVtYmVyLm5hbWUgPT0gSWRlbnRpZmllcnMuY2FsbCAmJgogICAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuaXNHZW5lcmljQ2xhc3MoY2xzKSkgewogICAgICAgICAgICBfY2xvc3VyaXplZE1lbWJlcnNXaXRoRnJlZVR5cGVWYXJpYWJsZXMuYWRkKG1lbWJlcik7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAodXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNSZWFkICYmIF9oYXNJbnZva2VkR2V0dGVyKG1lbWJlcikpIHsKICAgICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UucmVhZChBY2Nlc3Nlcy5keW5hbWljQWNjZXNzKSk7CiAgICAgICAgfQogICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSkgewogICAgICAgICAgSXRlcmFibGU8Q2FsbFN0cnVjdHVyZT4gY2FsbFN0cnVjdHVyZXMgPQogICAgICAgICAgICAgIF9nZXRJbnZvY2F0aW9uQ2FsbFN0cnVjdHVyZXMobWVtYmVyKTsKICAgICAgICAgIGZvciAoQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlIGluIGNhbGxTdHJ1Y3R1cmVzKSB7CiAgICAgICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UuaW52b2tlKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MsIGNhbGxTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgaWYgKCF1c2FnZS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY1dyaXRlICYmIF9oYXNJbnZva2VkU2V0dGVyKG1lbWJlcikpIHsKICAgICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2Uud3JpdGUoQWNjZXNzZXMuZHluYW1pY0FjY2VzcykpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFjaGVja0VucXVldWVyQ29uc2lzdGVuY3kpIHsKICAgICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSkgewogICAgICAgICAgICBfaW52b2thYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lCiAgICAgICAgICAgICAgICAucHV0SWZBYnNlbnQobWVtYmVyTmFtZSwgKCkgPT4ge30pCiAgICAgICAgICAgICAgICAuYWRkKHVzYWdlKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY1JlYWQpIHsKICAgICAgICAgICAgX3JlYWRhYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lCiAgICAgICAgICAgICAgICAucHV0SWZBYnNlbnQobWVtYmVyTmFtZSwgKCkgPT4ge30pCiAgICAgICAgICAgICAgICAuYWRkKHVzYWdlKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY1dyaXRlKSB7CiAgICAgICAgICAgIF93cml0YWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZQogICAgICAgICAgICAgICAgLnB1dElmQWJzZW50KG1lbWJlck5hbWUsICgpID0+IHt9KQogICAgICAgICAgICAgICAgLmFkZCh1c2FnZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHVzYWdlID0gbmV3IE1lbWJlclVzYWdlKG1lbWJlcik7CiAgICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgICAgICB1c2VTZXQuYWRkQWxsKHVzYWdlLmluaXQoKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghY2hlY2tFbnF1ZXVlckNvbnNpc3RlbmN5KSB7CiAgICAgICAgX21lbWJlclVzYWdlW21lbWJlcl0gPSB1c2FnZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHVzYWdlOwogIH0KCiAgdm9pZCBfcHJvY2Vzc0luc3RhbnRpYXRlZENsYXNzTWVtYmVyKAogICAgICBDbGFzc0VudGl0eSBjbHMsIE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclVzZWRDYWxsYmFjayBtZW1iZXJVc2VkLAogICAgICB7Ym9vbCBjaGVja0VucXVldWVyQ29uc2lzdGVuY3k6IGZhbHNlfSkgewogICAgaWYgKCFtZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuOwogICAgU3RyaW5nIG1lbWJlck5hbWUgPSBtZW1iZXIubmFtZTsKCiAgICBNZW1iZXJVc2FnZSB1c2FnZSA9IF9tZW1iZXJVc2FnZVttZW1iZXJdOwogICAgaWYgKHVzYWdlID09IG51bGwpIHsKICAgICAgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCA9IG5ldyBFbnVtU2V0PE1lbWJlclVzZT4oKTsKICAgICAgdXNhZ2UgPSBfZ2V0TWVtYmVyVXNhZ2UobWVtYmVyLCB1c2VTZXQsCiAgICAgICAgICBjaGVja0VucXVldWVyQ29uc2lzdGVuY3k6IGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeSk7CiAgICAgIGlmICh1c2VTZXQuaXNOb3RFbXB0eSkgewogICAgICAgIGlmIChjaGVja0VucXVldWVyQ29uc2lzdGVuY3kpIHsKICAgICAgICAgIHRocm93IG5ldyBTcGFubmFibGVBc3NlcnRpb25GYWlsdXJlKG1lbWJlciwKICAgICAgICAgICAgICAnVW5lbnF1ZXVlZCB1c2FnZSBvZiAkbWVtYmVyOiBcbmJlZm9yZTogPG5vbmU+XG5hZnRlciA6ICR1c2FnZScpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtZW1iZXJVc2VkKHVzYWdlLmVudGl0eSwgdXNlU2V0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIE1lbWJlclVzYWdlIG9yaWdpbmFsID0gdXNhZ2U7CiAgICAgIGlmIChjaGVja0VucXVldWVyQ29uc2lzdGVuY3kpIHsKICAgICAgICB1c2FnZSA9IHVzYWdlLmNsb25lKCk7CiAgICAgIH0KICAgICAgaWYgKHVzYWdlLmhhc1BlbmRpbmdEeW5hbWljVXNlKSB7CiAgICAgICAgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCA9IG5ldyBFbnVtU2V0PE1lbWJlclVzZT4oKTsKICAgICAgICBpZiAodXNhZ2UuaGFzUGVuZGluZ0R5bmFtaWNSZWFkICYmIF9oYXNJbnZva2VkR2V0dGVyKG1lbWJlcikpIHsKICAgICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UucmVhZChBY2Nlc3Nlcy5keW5hbWljQWNjZXNzKSk7CiAgICAgICAgfQogICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSkgewogICAgICAgICAgSXRlcmFibGU8Q2FsbFN0cnVjdHVyZT4gY2FsbFN0cnVjdHVyZXMgPQogICAgICAgICAgICAgIF9nZXRJbnZvY2F0aW9uQ2FsbFN0cnVjdHVyZXMobWVtYmVyKTsKICAgICAgICAgIGZvciAoQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlIGluIGNhbGxTdHJ1Y3R1cmVzKSB7CiAgICAgICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2UuaW52b2tlKEFjY2Vzc2VzLmR5bmFtaWNBY2Nlc3MsIGNhbGxTdHJ1Y3R1cmUpKTsKICAgICAgICAgICAgaWYgKCF1c2FnZS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSkgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh1c2FnZS5oYXNQZW5kaW5nRHluYW1pY1dyaXRlICYmIF9oYXNJbnZva2VkU2V0dGVyKG1lbWJlcikpIHsKICAgICAgICAgIHVzZVNldC5hZGRBbGwodXNhZ2Uud3JpdGUoQWNjZXNzZXMuZHluYW1pY0FjY2VzcykpOwogICAgICAgIH0KICAgICAgICBpZiAoIWNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeSkgewogICAgICAgICAgaWYgKCF1c2FnZS5oYXNQZW5kaW5nRHluYW1pY1JlYWQpIHsKICAgICAgICAgICAgX3JlYWRhYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lW21lbWJlck5hbWVdPy5yZW1vdmUodXNhZ2UpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCF1c2FnZS5oYXNQZW5kaW5nRHluYW1pY0ludm9rZSkgewogICAgICAgICAgICBfaW52b2thYmxlSW5zdGFuY2VNZW1iZXJzQnlOYW1lW21lbWJlck5hbWVdPy5yZW1vdmUodXNhZ2UpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCF1c2FnZS5oYXNQZW5kaW5nRHluYW1pY1dyaXRlKSB7CiAgICAgICAgICAgIF93cml0YWJsZUluc3RhbmNlTWVtYmVyc0J5TmFtZVttZW1iZXJOYW1lXT8ucmVtb3ZlKHVzYWdlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeSAmJiAhb3JpZ2luYWwuZGF0YUVxdWFscyh1c2FnZSkpIHsKICAgICAgICAgIF9lbGVtZW50TWFwLnJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICAgICAgbWVtYmVyLAogICAgICAgICAgICAgICdVbmVucXVldWVkIHVzYWdlIG9mICRtZW1iZXI6IFxuJwogICAgICAgICAgICAgICdiZWZvcmU6ICRvcmlnaW5hbFxuYWZ0ZXIgOiAkdXNhZ2UnKTsKICAgICAgICB9CiAgICAgICAgbWVtYmVyVXNlZCh1c2FnZS5lbnRpdHksIHVzZVNldCk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBhbGxNaXhpblVzZXNPZihDbGFzc0VudGl0eSBjbHMpIHsKICAgIEl0ZXJhYmxlPENsYXNzRW50aXR5PiB1c2VzID0gX2NsYXNzSGllcmFyY2h5QnVpbGRlci5taXhpblVzZXNbY2xzXTsKICAgIHJldHVybiB1c2VzICE9IG51bGwgPyB1c2VzIDogY29uc3QgPENsYXNzRW50aXR5PltdOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclVzZWRFbGVtZW50KE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyICYmICFlbGVtZW50LmlzQWJzdHJhY3QpIHsKICAgICAgX2xpdmVJbnN0YW5jZU1lbWJlcnMuYWRkKGVsZW1lbnQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc01lbWJlclVzZWQoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF9tZW1iZXJVc2FnZVttZW1iZXJdPy5oYXNVc2UgPz8gZmFsc2U7CiAgfQoKICBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IHBvcHVsYXRlSGllcmFyY2h5Tm9kZXMoKSB7CiAgICBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IHR5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXMgPQogICAgICAgIG5ldyBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+KCk7CgogICAgLy8gVXBkYXRlcyB0aGUgYGlzRGlyZWN0bHlJbnN0YW50aWF0ZWRgIGFuZCBgaXNJbmRpcmVjdGx5SW5zdGFudGlhdGVkYAogICAgLy8gcHJvcGVydGllcyBvZiB0aGUgW0NsYXNzSGllcmFyY2h5Tm9kZV0gZm9yIFtjbHNdLgoKICAgIHZvaWQgYWRkU3VidHlwZXMoQ2xhc3NFbnRpdHkgY2xzLCBJbnN0YW50aWF0aW9uSW5mbyBpbmZvKSB7CiAgICAgIGlmICghaW5mby5oYXNJbnN0YW50aWF0aW9uKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9jbGFzc0hpZXJhcmNoeUJ1aWxkZXIudXBkYXRlQ2xhc3NIaWVyYXJjaHlOb2RlRm9yQ2xhc3MoY2xzLAogICAgICAgICAgZGlyZWN0bHlJbnN0YW50aWF0ZWQ6IGluZm8uaXNEaXJlY3RseUluc3RhbnRpYXRlZCwKICAgICAgICAgIGFic3RyYWN0bHlJbnN0YW50aWF0ZWQ6IGluZm8uaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkKTsKCiAgICAgIC8vIFdhbGsgdGhyb3VnaCB0aGUgc3VwZXJjbGFzc2VzLCBhbmQgcmVjb3JkIHRoZSB0eXBlcwogICAgICAvLyBpbXBsZW1lbnRlZCBieSB0aGF0IHR5cGUgb24gdGhlIHN1cGVyY2xhc3Nlcy4KICAgICAgQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcyA9IF9jbGFzc1F1ZXJpZXMuZ2V0U3VwZXJDbGFzcyhjbHMpOwogICAgICB3aGlsZSAoc3VwZXJjbGFzcyAhPSBudWxsKSB7CiAgICAgICAgU2V0PENsYXNzRW50aXR5PiB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzT2ZDbHMgPQogICAgICAgICAgICB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzLnB1dElmQWJzZW50KAogICAgICAgICAgICAgICAgc3VwZXJjbGFzcywgKCkgPT4gbmV3IFNldDxDbGFzc0VudGl0eT4oKSk7CiAgICAgICAgZm9yIChJbnRlcmZhY2VUeXBlIGN1cnJlbnQgaW4gX2NsYXNzUXVlcmllcy5nZXRTdXBlcnR5cGVzKGNscykpIHsKICAgICAgICAgIHR5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXNPZkNscy5hZGQoY3VycmVudC5lbGVtZW50KTsKICAgICAgICB9CiAgICAgICAgc3VwZXJjbGFzcyA9IF9jbGFzc1F1ZXJpZXMuZ2V0U3VwZXJDbGFzcyhzdXBlcmNsYXNzKTsKICAgICAgfQogICAgfQoKICAgIC8vIFVzZSB0aGUgWzpzZWVuQ2xhc3NlczpdIHNldCB0byBpbmNsdWRlIG5vbi1pbnN0YW50aWF0ZWQKICAgIC8vIGNsYXNzZXM6IGlmIHRoZSBzdXBlcmNsYXNzIG9mIHRoZXNlIGNsYXNzZXMgcmVxdWlyZSBSVEksIHRoZW4KICAgIC8vIHRoZXkgYWxzbyBuZWVkIFJUSSwgc28gdGhhdCBhIGNvbnN0cnVjdG9yIHBhc3NlcyB0aGUgdHlwZQogICAgLy8gdmFyaWFibGVzIHRvIHRoZSBzdXBlciBjb25zdHJ1Y3Rvci4KICAgIGdldEluc3RhbnRpYXRpb25NYXAoKS5mb3JFYWNoKGFkZFN1YnR5cGVzKTsKCiAgICByZXR1cm4gdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3NlczsKICB9CgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gY29tcHV0ZUFzc2lnbmVkSW5zdGFuY2VNZW1iZXJzKCkgewogICAgU2V0PE1lbWJlckVudGl0eT4gYXNzaWduZWRJbnN0YW5jZU1lbWJlcnMgPSBuZXcgU2V0PE1lbWJlckVudGl0eT4oKTsKICAgIGZvciAoTWVtYmVyRW50aXR5IGluc3RhbmNlTWVtYmVyIGluIF9saXZlSW5zdGFuY2VNZW1iZXJzKSB7CiAgICAgIGlmIChfaGFzSW52b2tlZFNldHRlcihpbnN0YW5jZU1lbWJlcikpIHsKICAgICAgICBhc3NpZ25lZEluc3RhbmNlTWVtYmVycy5hZGQoaW5zdGFuY2VNZW1iZXIpOwogICAgICB9CiAgICB9CiAgICBhc3NpZ25lZEluc3RhbmNlTWVtYmVycy5hZGRBbGwoX2ZpZWxkU2V0dGVycyk7CiAgICByZXR1cm4gYXNzaWduZWRJbnN0YW5jZU1lbWJlcnM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBfY2xhc3NIaWVyYXJjaHlCdWlsZGVyLnJlZ2lzdGVyQ2xhc3MoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbmhlcml0ZWRJbigKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciwgQ2xhc3NFbnRpdHkgdHlwZSwgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbikgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHRoZSBbbWVtYmVyXSBpdHNlbGYgdG8gYXZvaWQgZW5xdWV1ZWluZyBtZW1iZXJzCiAgICAvLyB0aGF0IGFyZSBvdmVycmlkZGVuLgogICAgcmV0dXJuIGlzSW5oZXJpdGVkSW5DbGFzcyhtZW1iZXIuZW5jbG9zaW5nQ2xhc3MsIHR5cGUsIHJlbGF0aW9uKTsKICB9CgogIGJvb2wgaXNJbmhlcml0ZWRJbkNsYXNzKENsYXNzRW50aXR5IG1lbWJlckhvbGRpbmdDbGFzcywgQ2xhc3NFbnRpdHkgdHlwZSwKICAgICAgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbikgewogICAgc3dpdGNoIChyZWxhdGlvbikgewogICAgICBjYXNlIENsYXNzUmVsYXRpb24uZXhhY3Q6CiAgICAgICAgcmV0dXJuIF9jbGFzc0hpZXJhcmNoeUJ1aWxkZXIuaXNJbmhlcml0ZWRJbkV4YWN0Q2xhc3MoCiAgICAgICAgICAgIG1lbWJlckhvbGRpbmdDbGFzcywgdHlwZSk7CiAgICAgIGNhc2UgQ2xhc3NSZWxhdGlvbi50aGlzRXhwcmVzc2lvbjoKICAgICAgICByZXR1cm4gX2NsYXNzSGllcmFyY2h5QnVpbGRlci5pc0luaGVyaXRlZEluVGhpc0NsYXNzKAogICAgICAgICAgICBtZW1iZXJIb2xkaW5nQ2xhc3MsIHR5cGUpOwogICAgICBjYXNlIENsYXNzUmVsYXRpb24uc3VidHlwZToKICAgICAgICBpZiAobWVtYmVySG9sZGluZ0NsYXNzID09IF9jb21tb25FbGVtZW50cy5udWxsQ2xhc3MgfHwKICAgICAgICAgICAgbWVtYmVySG9sZGluZ0NsYXNzID09IF9jb21tb25FbGVtZW50cy5qc051bGxDbGFzcykgewogICAgICAgICAgLy8gTWVtYmVycyBvZiBgTnVsbGAgYW5kIGBKU051bGxgIGFyZSBhbHdheXMgcG90ZW50aWFsIHRhcmdldHMuCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9jbGFzc0hpZXJhcmNoeUJ1aWxkZXIuaXNJbmhlcml0ZWRJblN1YnR5cGVPZigKICAgICAgICAgICAgbWVtYmVySG9sZGluZ0NsYXNzLCB0eXBlKTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIENsYXNzUmVsYXRpb24gJHJlbGF0aW9uLiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgS0Nsb3NlZFdvcmxkIGNsb3NlV29ybGQoRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyKSB7CiAgICBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IHR5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXMgPQogICAgICAgIHBvcHVsYXRlSGllcmFyY2h5Tm9kZXMoKTsKCiAgICBCYWNrZW5kVXNhZ2UgYmFja2VuZFVzYWdlID0gX2JhY2tlbmRVc2FnZUJ1aWxkZXIuY2xvc2UoKTsKICAgIF9jbG9zZWQgPSB0cnVlOwoKICAgIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPiBsaXZlTWVtYmVyVXNhZ2UgPSB7fTsKICAgIF9tZW1iZXJVc2FnZS5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2FnZSBtZW1iZXJVc2FnZSkgewogICAgICBpZiAobWVtYmVyVXNhZ2UuaGFzVXNlKSB7CiAgICAgICAgbGl2ZU1lbWJlclVzYWdlW21lbWJlcl0gPSBtZW1iZXJVc2FnZTsKICAgICAgICBhc3NlcnQoX3Byb2Nlc3NlZE1lbWJlcnMuY29udGFpbnMobWVtYmVyKSwKICAgICAgICAgICAgIk1lbWJlciAkbWVtYmVyIGlzIHVzZWQgYnV0IG5vdCBwcm9jZXNzZWQ6ICRtZW1iZXJVc2FnZS4iKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoIV9wcm9jZXNzZWRNZW1iZXJzLmNvbnRhaW5zKG1lbWJlciksCiAgICAgICAgICAgICJNZW1iZXIgJG1lbWJlciBpcyBwcm9jZXNzZWQgYnV0IG5vdCB1c2VkOiAkbWVtYmVyVXNhZ2UuIik7CiAgICAgIH0KICAgIH0pOwogICAgZm9yIChNZW1iZXJFbnRpdHkgbWVtYmVyIGluIF9wcm9jZXNzZWRNZW1iZXJzKSB7CiAgICAgIGFzc2VydChfbWVtYmVyVXNhZ2UuY29udGFpbnNLZXkobWVtYmVyKSwKICAgICAgICAgICJNZW1iZXIgJG1lbWJlciBpcyBwcm9jZXNzZWQgYnV0IGhhcyBub3QgdXNhZ2UuIik7CiAgICB9CgogICAgU2V0PEludGVyZmFjZVR5cGU+IGluc3RhbnRpYXRlZFR5cGVzID0gbmV3IFNldDxJbnRlcmZhY2VUeXBlPigpOwogICAgZ2V0SW5zdGFudGlhdGlvbk1hcCgpLmZvckVhY2goKF8sIEluc3RhbnRpYXRpb25JbmZvIGluZm8pIHsKICAgICAgaWYgKGluZm8uaW5zdGFudGlhdGlvbk1hcCAhPSBudWxsKSB7CiAgICAgICAgZm9yIChTZXQ8SW5zdGFuY2U+IGluc3RhbmNlcyBpbiBpbmZvLmluc3RhbnRpYXRpb25NYXAudmFsdWVzKSB7CiAgICAgICAgICBmb3IgKEluc3RhbmNlIGluc3RhbmNlIGluIGluc3RhbmNlcykgewogICAgICAgICAgICBpbnN0YW50aWF0ZWRUeXBlcy5hZGQoaW5zdGFuY2UudHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICBLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQgPSBuZXcgS0Nsb3NlZFdvcmxkSW1wbChfZWxlbWVudE1hcCwKICAgICAgICBvcHRpb25zOiBfb3B0aW9ucywKICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQ6IF9lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgZGFydFR5cGVzOiBfZGFydFR5cGVzLAogICAgICAgIGNvbW1vbkVsZW1lbnRzOiBfY29tbW9uRWxlbWVudHMsCiAgICAgICAgbmF0aXZlRGF0YTogX25hdGl2ZURhdGFCdWlsZGVyLmNsb3NlKCksCiAgICAgICAgaW50ZXJjZXB0b3JEYXRhOiBfaW50ZXJjZXB0b3JEYXRhQnVpbGRlci5jbG9zZSgpLAogICAgICAgIGJhY2tlbmRVc2FnZTogYmFja2VuZFVzYWdlLAogICAgICAgIG5vU3VjaE1ldGhvZERhdGE6IF9ub1N1Y2hNZXRob2RSZWdpc3RyeS5jbG9zZSgpLAogICAgICAgIHJ0aU5lZWRCdWlsZGVyOiBfcnRpTmVlZEJ1aWxkZXIsCiAgICAgICAgZmllbGRBbmFseXNpczogX2FsbG9jYXRvckFuYWx5c2lzLAogICAgICAgIGltcGxlbWVudGVkQ2xhc3NlczogX2ltcGxlbWVudGVkQ2xhc3NlcywKICAgICAgICBsaXZlTmF0aXZlQ2xhc3NlczogX25hdGl2ZVJlc29sdXRpb25FbnF1ZXVlci5saXZlTmF0aXZlQ2xhc3NlcywKICAgICAgICBsaXZlSW5zdGFuY2VNZW1iZXJzOiBfbGl2ZUluc3RhbmNlTWVtYmVycywKICAgICAgICBhc3NpZ25lZEluc3RhbmNlTWVtYmVyczogY29tcHV0ZUFzc2lnbmVkSW5zdGFuY2VNZW1iZXJzKCksCiAgICAgICAgbGl2ZU1lbWJlclVzYWdlOiBsaXZlTWVtYmVyVXNhZ2UsCiAgICAgICAgbWl4aW5Vc2VzOiBfY2xhc3NIaWVyYXJjaHlCdWlsZGVyLm1peGluVXNlcywKICAgICAgICB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzOiB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzLAogICAgICAgIGNsYXNzSGllcmFyY2h5OiBfY2xhc3NIaWVyYXJjaHlCdWlsZGVyLmNsb3NlKCksCiAgICAgICAgYW5ub3RhdGlvbnNEYXRhOiBfYW5ub3RhdGlvbnNEYXRhQnVpbGRlci5jbG9zZShfb3B0aW9ucyksCiAgICAgICAgaXNDaGVja3M6IF9pc0NoZWNrcywKICAgICAgICBzdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXM6IHN0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcywKICAgICAgICBkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzOiBkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzLAogICAgICAgIHR5cGVWYXJpYWJsZVR5cGVMaXRlcmFsczogdHlwZVZhcmlhYmxlVHlwZUxpdGVyYWxzLAogICAgICAgIGdlbmVyaWNMb2NhbEZ1bmN0aW9uczogX2dlbmVyaWNMb2NhbEZ1bmN0aW9ucywKICAgICAgICBjbG9zdXJpemVkTWVtYmVyc1dpdGhGcmVlVHlwZVZhcmlhYmxlczoKICAgICAgICAgICAgX2Nsb3N1cml6ZWRNZW1iZXJzV2l0aEZyZWVUeXBlVmFyaWFibGVzLAogICAgICAgIGxvY2FsRnVuY3Rpb25zOiBfbG9jYWxGdW5jdGlvbnMsCiAgICAgICAgaW5zdGFudGlhdGVkVHlwZXM6IGluc3RhbnRpYXRlZFR5cGVzKTsKICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgewogICAgICBfY2xvc2VkV29ybGRDYWNoZSA9IGNsb3NlZFdvcmxkOwogICAgfQogICAgcmV0dXJuIGNsb3NlZFdvcmxkOwogIH0KfQqENABOTjwBGTciIyQhISlAKixKUTU2KiY/Gh8cNR5IGRwmEkwdAUtRGlAqATcGRioBJwIBPBpPTS4BNDcBMk4+TCI3KAFRKQZKTx5LLwFFPFEBTilOAU0tLQEvNS8BURMnAUcCAT04ERwcASIBDBU/BAEMHC0qNQQBDBYqFDcdQB83GQYaBAIBMRpHBhMGHQYrMzoLNhYWKwsGBhIaHyIfKig1CwYhBhoeUQ4eTQ4MEhY1P0sOFkVDQg4WPw4MFxk/DgsGTh06AUcZTz8VPSgUMCcPMikPKQ8PRQYEAUkfOgE0JwE2KQEMFiokJB8XSBoaCiMhESEKGBcbCgYTGgQCATg6MEkGNEEqATxHAS8GNE4BLAY0OSFINko2SjYBOSMBTgE6NiUBTAFNIQZOGkgkAU0dRyQBTR5HJAFBATcBTSo3AUYhASIwHigBKi44MjErPDQ4AUI2JAEYIkoBRwE+AUEBIAEsAR4VGCAXHB0fJCEcHyYiJCkjGwEMRz4BDDEqAQw2IwQBDEQBDCsUEFAGHgQBNgw6N04jGggIFAQBDDhGJjwGBAFOPkwMIjcpJB1MNzlFSUQyJxY2DzQIBjQwQz1CMQYBURAoN0w6FVEKCgYEATZLOycwLTk/NzYKCAY2BAEdSykwLTk/FwoIBhIEAUk+HwQBTksEATBHBAEwRwQBDBs+LScBEzE2Mz81OTMzKQoWCgYBHyIjPD8ULx9OUE83TjIKDx9BFC41Si83RzAKDx9BFC42TS8xCg8GBAEzRS0hN0xCQx85PBMGOgQBDDIZBAEMLisEAQxPMy8aQyszCC4OPzojRCYIDgYBLjo6AUc5BkJIRhABHi0PLS4PIiciDyk5Ow8qLjoPJDkPJToPKjoPKzoPJTsPJSUPLj8PJy0XSg8oLRdLDy0zF0sPKFEPIyYsUQYdKAYEATEGRT0bATMvMyUIBAE/UUtPDTA1IzMVCBQGAS80BgQBDEswMDE/PwgEAUdOD0kpMCFNSSsuOSkhHggGJwQBTjAuGSUpMU4aRk0vSS1MUT0pKycKKSwpDCMxOUEMCgFIPQotMzRAUDIVDgwKST4KASkvLDMdDC0rMx0MLiszHQwKDykeJwoIJyYIBhIEAShLMColAS4ZPC4/Hyg2UBEsCggNJCYfCCg+SD0KLTM0QFAyFQ4MCkk+CikuRwwwSAwvRwwKRy4WMDQKKggGBAEMOkg4BAEMMzspBgQBDCsyBAFARjIBSzkBQCQQCEM9QgE9N0EjPTY7SkIKPggGAT9FQSswASkEATxJQC81CAYzJAQBDCgvBAEMFkdQHEYEAUwgGCA/Jyk+JyI/QUoXCj4nBkcEAQw5RiIBPhQBOUogLzNIDzRICAg1Lz0GAUVAK0gxMgwKCAgBQRsxHykwOiQ5KSsxSDNDKjVEOEIdSEo8NzA1KS8gJwYYBAIBO3BhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL3Jlc29sdXRpb25fd29ybGRfYnVpbGRlci5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0rfUvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLnVuaXZlcnNlLndvcmxkX2ltcGFjdDsKCmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgU2V0bGV0OwppbXBvcnQgJ3VzZS5kYXJ0JzsKCi8vLyBEZXNjcmliZXMgaG93IGFuIGVsZW1lbnQgKGUuZy4gYSBtZXRob2QpIGltcGFjdHMgdGhlIGNsb3NlZC13b3JsZAovLy8gc2VtYW50aWNzIG9mIGEgcHJvZ3JhbS4KLy8vCi8vLyBBIFtXb3JsZEltcGFjdF0gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgaG93IGEgcHJvZ3JhbSBlbGVtZW50IGFmZmVjdHMgb3VyCi8vLyB1bmRlcnN0YW5kaW5nIG9mIHdoYXQncyBsaXZlIGluIGEgcHJvZ3JhbS4gRm9yIGV4YW1wbGUsIGl0IGNhbiBpbmRpY2F0ZQovLy8gdGhhdCBhIG1ldGhvZCB1c2VzIGEgY2VydGFpbiBmZWF0dXJlLCBvciBhbGxvY2F0ZXMgYSBzcGVjaWZpYyB0eXBlLgovLy8KLy8vIFRoZSBpbXBhY3Qgb2JqZWN0IGNhbiBiZSBjb21wdXRlZCBsb2NhbGx5IGJ5IGluc3BlY3RpbmcganVzdCB0aGUgcmVzb2x1dGlvbgovLy8gaW5mb3JtYXRpb24gb2YgdGhhdCBlbGVtZW50IGFsb25lLiBUaGUgY29tcGlsZXIgdXNlcyBbVW5pdmVyc2VdIGFuZAovLy8gW1dvcmxkXSB0byBjb21iaW5lIHRoZSBpbmZvcm1hdGlvbiBkaXNjb3ZlcmVkIGluIHRoZSBpbXBhY3Qgb2JqZWN0cyBvZgovLy8gYWxsIGVsZW1lbnRzIHJlYWNoYWJsZSBpbiBhbiBhcHBsaWNhdGlvbi4KY2xhc3MgV29ybGRJbXBhY3QgewogIGNvbnN0IFdvcmxkSW1wYWN0KCk7CgogIE1lbWJlckVudGl0eSBnZXQgbWVtYmVyID0+IG51bGw7CgogIEl0ZXJhYmxlPER5bmFtaWNVc2U+IGdldCBkeW5hbWljVXNlcyA9PiBjb25zdCA8RHluYW1pY1VzZT5bXTsKCiAgSXRlcmFibGU8U3RhdGljVXNlPiBnZXQgc3RhdGljVXNlcyA9PiBjb25zdCA8U3RhdGljVXNlPltdOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZXBsYWNlIHRoaXMgYnkgY2FsbGVkIGNvbnN0cnVjdG9ycyB3aXRoIHR5cGUKICAvLyBhcmd1bWVudHMuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ29sbGVjdCBhbGwgY2hlY2tlZCB0eXBlcyBmb3IgY2hlY2tlZCBtb2RlIHNlcGFyYXRlbHkKICAvLyB0byBzdXBwb3J0IHNlcmlhbGl6YXRpb24uCgogIEl0ZXJhYmxlPFR5cGVVc2U+IGdldCB0eXBlVXNlcyA9PiBjb25zdCA8VHlwZVVzZT5bXTsKCiAgSXRlcmFibGU8Q29uc3RhbnRVc2U+IGdldCBjb25zdGFudFVzZXMgPT4gY29uc3QgPENvbnN0YW50VXNlPltdOwoKICBib29sIGdldCBpc0VtcHR5ID0+IHRydWU7CgogIHZvaWQgYXBwbHkoV29ybGRJbXBhY3RWaXNpdG9yIHZpc2l0b3IpIHsKICAgIHN0YXRpY1VzZXMuZm9yRWFjaCgoU3RhdGljVXNlIHVzZSkgPT4gdmlzaXRvci52aXNpdFN0YXRpY1VzZShtZW1iZXIsIHVzZSkpOwogICAgZHluYW1pY1VzZXMKICAgICAgICAuZm9yRWFjaCgoRHluYW1pY1VzZSB1c2UpID0+IHZpc2l0b3IudmlzaXREeW5hbWljVXNlKG1lbWJlciwgdXNlKSk7CiAgICB0eXBlVXNlcy5mb3JFYWNoKChUeXBlVXNlIHVzZSkgPT4gdmlzaXRvci52aXNpdFR5cGVVc2UobWVtYmVyLCB1c2UpKTsKICAgIGNvbnN0YW50VXNlcwogICAgICAgIC5mb3JFYWNoKChDb25zdGFudFVzZSB1c2UpID0+IHZpc2l0b3IudmlzaXRDb25zdGFudFVzZShtZW1iZXIsIHVzZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gZHVtcCh0aGlzKTsKCiAgc3RhdGljIFN0cmluZyBkdW1wKFdvcmxkSW1wYWN0IHdvcmxkSW1wYWN0KSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBwcmludE9uKHNiLCB3b3JsZEltcGFjdCk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIHN0YXRpYyB2b2lkIHByaW50T24oU3RyaW5nQnVmZmVyIHNiLCBXb3JsZEltcGFjdCB3b3JsZEltcGFjdCkgewogICAgc2Iud3JpdGUoJ21lbWJlcjogJHt3b3JsZEltcGFjdC5tZW1iZXJ9Jyk7CgogICAgdm9pZCBhZGQoU3RyaW5nIHRpdGxlLCBJdGVyYWJsZSBpdGVyYWJsZSkgewogICAgICBpZiAoaXRlcmFibGUuaXNOb3RFbXB0eSkgewogICAgICAgIHNiLndyaXRlKCdcbiAkdGl0bGU6Jyk7CiAgICAgICAgaXRlcmFibGUuZm9yRWFjaCgoZSkgPT4gc2Iud3JpdGUoJ1xuICAkZScpKTsKICAgICAgfQogICAgfQoKICAgIGFkZCgnZHluYW1pYyB1c2VzJywgd29ybGRJbXBhY3QuZHluYW1pY1VzZXMpOwogICAgYWRkKCdzdGF0aWMgdXNlcycsIHdvcmxkSW1wYWN0LnN0YXRpY1VzZXMpOwogICAgYWRkKCd0eXBlIHVzZXMnLCB3b3JsZEltcGFjdC50eXBlVXNlcyk7CiAgICBhZGQoJ2NvbnN0YW50IHVzZXMnLCB3b3JsZEltcGFjdC5jb25zdGFudFVzZXMpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgV29ybGRJbXBhY3RCdWlsZGVyIHsKICB2b2lkIHJlZ2lzdGVyRHluYW1pY1VzZShEeW5hbWljVXNlIGR5bmFtaWNVc2UpOwogIHZvaWQgcmVnaXN0ZXJUeXBlVXNlKFR5cGVVc2UgdHlwZVVzZSk7CiAgdm9pZCByZWdpc3RlclN0YXRpY1VzZShTdGF0aWNVc2Ugc3RhdGljVXNlKTsKICB2b2lkIHJlZ2lzdGVyQ29uc3RhbnRVc2UoQ29uc3RhbnRVc2UgY29uc3RhbnRVc2UpOwp9CgpjbGFzcyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIGV4dGVuZHMgV29ybGRJbXBhY3QgaW1wbGVtZW50cyBXb3JsZEltcGFjdEJ1aWxkZXIgewogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IERvIHdlIGJlbmVmaXQgZnJvbSBsYXp5IGluaXRpYWxpemF0aW9uIG9mIHRoZQogIC8vIFtTZXRsZXRdcz8KICBTZXQ8RHluYW1pY1VzZT4gX2R5bmFtaWNVc2VzOwogIFNldDxTdGF0aWNVc2U+IF9zdGF0aWNVc2VzOwogIFNldDxUeXBlVXNlPiBfdHlwZVVzZXM7CiAgU2V0PENvbnN0YW50VXNlPiBfY29uc3RhbnRVc2VzOwoKICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CgogIFdvcmxkSW1wYWN0QnVpbGRlckltcGwuaW50ZXJuYWwoCiAgICAgIHRoaXMuX2R5bmFtaWNVc2VzLCB0aGlzLl9zdGF0aWNVc2VzLCB0aGlzLl90eXBlVXNlcywgdGhpcy5fY29uc3RhbnRVc2VzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eSA9PgogICAgICBfZHluYW1pY1VzZXMgPT0gbnVsbCAmJgogICAgICBfc3RhdGljVXNlcyA9PSBudWxsICYmCiAgICAgIF90eXBlVXNlcyA9PSBudWxsICYmCiAgICAgIF9jb25zdGFudFVzZXMgPT0gbnVsbDsKCiAgLy8vIENvcHkgdXNlcyBpbiBbaW1wYWN0XSB0byB0aGlzIGltcGFjdCBidWlsZGVyLgogIHZvaWQgYWRkSW1wYWN0KFdvcmxkSW1wYWN0IGltcGFjdCkgewogICAgaWYgKGltcGFjdC5pc0VtcHR5KSByZXR1cm47CiAgICBpbXBhY3QuZHluYW1pY1VzZXMuZm9yRWFjaChyZWdpc3RlckR5bmFtaWNVc2UpOwogICAgaW1wYWN0LnN0YXRpY1VzZXMuZm9yRWFjaChyZWdpc3RlclN0YXRpY1VzZSk7CiAgICBpbXBhY3QudHlwZVVzZXMuZm9yRWFjaChyZWdpc3RlclR5cGVVc2UpOwogICAgaW1wYWN0LmNvbnN0YW50VXNlcy5mb3JFYWNoKHJlZ2lzdGVyQ29uc3RhbnRVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckR5bmFtaWNVc2UoRHluYW1pY1VzZSBkeW5hbWljVXNlKSB7CiAgICBhc3NlcnQoZHluYW1pY1VzZSAhPSBudWxsKTsKICAgIF9keW5hbWljVXNlcyA/Pz0gbmV3IFNldGxldDxEeW5hbWljVXNlPigpOwogICAgX2R5bmFtaWNVc2VzLmFkZChkeW5hbWljVXNlKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPER5bmFtaWNVc2U+IGdldCBkeW5hbWljVXNlcyB7CiAgICByZXR1cm4gX2R5bmFtaWNVc2VzICE9IG51bGwgPyBfZHluYW1pY1VzZXMgOiBjb25zdCA8RHluYW1pY1VzZT5bXTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJUeXBlVXNlKFR5cGVVc2UgdHlwZVVzZSkgewogICAgYXNzZXJ0KHR5cGVVc2UgIT0gbnVsbCk7CiAgICBfdHlwZVVzZXMgPz89IG5ldyBTZXRsZXQ8VHlwZVVzZT4oKTsKICAgIF90eXBlVXNlcy5hZGQodHlwZVVzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxUeXBlVXNlPiBnZXQgdHlwZVVzZXMgewogICAgcmV0dXJuIF90eXBlVXNlcyAhPSBudWxsID8gX3R5cGVVc2VzIDogY29uc3QgPFR5cGVVc2U+W107CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhdGljVXNlKFN0YXRpY1VzZSBzdGF0aWNVc2UpIHsKICAgIGFzc2VydChzdGF0aWNVc2UgIT0gbnVsbCk7CiAgICBfc3RhdGljVXNlcyA/Pz0gbmV3IFNldGxldDxTdGF0aWNVc2U+KCk7CiAgICBfc3RhdGljVXNlcy5hZGQoc3RhdGljVXNlKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFN0YXRpY1VzZT4gZ2V0IHN0YXRpY1VzZXMgewogICAgcmV0dXJuIF9zdGF0aWNVc2VzICE9IG51bGwgPyBfc3RhdGljVXNlcyA6IGNvbnN0IDxTdGF0aWNVc2U+W107CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ29uc3RhbnRVc2UoQ29uc3RhbnRVc2UgY29uc3RhbnRVc2UpIHsKICAgIGFzc2VydChjb25zdGFudFVzZSAhPSBudWxsKTsKICAgIF9jb25zdGFudFVzZXMgPz89IG5ldyBTZXRsZXQ8Q29uc3RhbnRVc2U+KCk7CiAgICBfY29uc3RhbnRVc2VzLmFkZChjb25zdGFudFVzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDb25zdGFudFVzZT4gZ2V0IGNvbnN0YW50VXNlcyB7CiAgICByZXR1cm4gX2NvbnN0YW50VXNlcyAhPSBudWxsID8gX2NvbnN0YW50VXNlcyA6IGNvbnN0IDxDb25zdGFudFVzZT5bXTsKICB9Cn0KCi8vLyBbV29ybGRJbXBhY3RCdWlsZGVyXSB0aGF0IGNhbiBjcmVhdGUgYW5kIGNvbGxlY3QgYSBzZXF1ZW5jZSBvZgovLy8gW1dvcmxkSW1wYWN0XXMuCmNsYXNzIFN0YWdlZFdvcmxkSW1wYWN0QnVpbGRlciBpbXBsZW1lbnRzIFdvcmxkSW1wYWN0QnVpbGRlciB7CiAgZmluYWwgYm9vbCBjb2xsZWN0SW1wYWN0czsKICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIF9jdXJyZW50QnVpbGRlcjsKICBMaXN0PFdvcmxkSW1wYWN0QnVpbGRlckltcGw+IF9idWlsZGVycyA9IDxXb3JsZEltcGFjdEJ1aWxkZXJJbXBsPltdOwoKICBTdGFnZWRXb3JsZEltcGFjdEJ1aWxkZXIoe3RoaXMuY29sbGVjdEltcGFjdHM6IGZhbHNlfSk7CgogIHZvaWQgX2Vuc3VyZUJ1aWxkZXIoKSB7CiAgICBpZiAoX2N1cnJlbnRCdWlsZGVyID09IG51bGwpIHsKICAgICAgX2N1cnJlbnRCdWlsZGVyID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgICAgaWYgKGNvbGxlY3RJbXBhY3RzKSB7CiAgICAgICAgX2J1aWxkZXJzLmFkZChfY3VycmVudEJ1aWxkZXIpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyVHlwZVVzZShUeXBlVXNlIHR5cGVVc2UpIHsKICAgIF9lbnN1cmVCdWlsZGVyKCk7CiAgICBfY3VycmVudEJ1aWxkZXIucmVnaXN0ZXJUeXBlVXNlKHR5cGVVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckR5bmFtaWNVc2UoRHluYW1pY1VzZSBkeW5hbWljVXNlKSB7CiAgICBfZW5zdXJlQnVpbGRlcigpOwogICAgX2N1cnJlbnRCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZShkeW5hbWljVXNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGF0aWNVc2UoU3RhdGljVXNlIHN0YXRpY1VzZSkgewogICAgX2Vuc3VyZUJ1aWxkZXIoKTsKICAgIF9jdXJyZW50QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShzdGF0aWNVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNvbnN0YW50VXNlKENvbnN0YW50VXNlIGNvbnN0YW50VXNlKSB7CiAgICBfZW5zdXJlQnVpbGRlcigpOwogICAgX2N1cnJlbnRCdWlsZGVyLnJlZ2lzdGVyQ29uc3RhbnRVc2UoY29uc3RhbnRVc2UpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtXb3JsZEltcGFjdF0gYnVpbHQgc28gZmFyIHdpdGggdGhpcyBidWlsZGVyLiBUaGUgYnVpbGRlcgogIC8vLyBpcyByZXNldCwgYW5kIGlmIFtjb2xsZWN0SW1wYWN0c10gaXMgYHRydWVgIHRoZSBpbXBhY3QgaXMgY2FjaGVkIGZvcgogIC8vLyBbd29ybGRJbXBhY3RzXS4KICBXb3JsZEltcGFjdCBmbHVzaCgpIHsKICAgIGlmIChfY3VycmVudEJ1aWxkZXIgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IFdvcmxkSW1wYWN0KCk7CiAgICBXb3JsZEltcGFjdCB3b3JsZEltcGFjdCA9IF9jdXJyZW50QnVpbGRlcjsKICAgIF9jdXJyZW50QnVpbGRlciA9IG51bGw7CiAgICByZXR1cm4gd29ybGRJbXBhY3Q7CiAgfQoKICAvLy8gSWYgW2NvbGxlY3RJbXBhY3RzXSBpcyBgdHJ1ZWAgdGhpcyByZXR1cm5zIGFsbCBbV29ybGRJbXBhY3RdcyBidWlsdCB3aXRoCiAgLy8vIHRoaXMgYnVpbGRlci4KICBJdGVyYWJsZTxXb3JsZEltcGFjdD4gZ2V0IHdvcmxkSW1wYWN0cyA9PiBfYnVpbGRlcnM7Cn0KCi8vLyBNdXRhYmxlIGltcGxlbWVudGF0aW9uIG9mIFtXb3JsZEltcGFjdF0gdXNlZCB0byB0cmFuc2Zvcm0KLy8vIFtSZXNvbHV0aW9uSW1wYWN0XSBvciBbQ29kZWdlbkltcGFjdF0gdG8gW1dvcmxkSW1wYWN0XS4KY2xhc3MgVHJhbnNmb3JtZWRXb3JsZEltcGFjdCBpbXBsZW1lbnRzIFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdEJ1aWxkZXIgewogIGZpbmFsIFdvcmxkSW1wYWN0IHdvcmxkSW1wYWN0OwoKICBTZXRsZXQ8U3RhdGljVXNlPiBfc3RhdGljVXNlczsKICBTZXRsZXQ8VHlwZVVzZT4gX3R5cGVVc2VzOwogIFNldGxldDxEeW5hbWljVXNlPiBfZHluYW1pY1VzZXM7CiAgU2V0bGV0PENvbnN0YW50VXNlPiBfY29uc3RhbnRVc2VzOwoKICBUcmFuc2Zvcm1lZFdvcmxkSW1wYWN0KHRoaXMud29ybGRJbXBhY3QpOwoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgZ2V0IG1lbWJlciA9PiB3b3JsZEltcGFjdC5tZW1iZXI7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW1wdHkgewogICAgcmV0dXJuIHdvcmxkSW1wYWN0LmlzRW1wdHkgJiYKICAgICAgICBfc3RhdGljVXNlcyA9PSBudWxsICYmCiAgICAgICAgX3R5cGVVc2VzID09IG51bGwgJiYKICAgICAgICBfZHluYW1pY1VzZXMgPT0gbnVsbCAmJgogICAgICAgIF9jb25zdGFudFVzZXMgPT0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPER5bmFtaWNVc2U+IGdldCBkeW5hbWljVXNlcyB7CiAgICByZXR1cm4gX2R5bmFtaWNVc2VzICE9IG51bGwgPyBfZHluYW1pY1VzZXMgOiB3b3JsZEltcGFjdC5keW5hbWljVXNlczsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJEeW5hbWljVXNlKER5bmFtaWNVc2UgZHluYW1pY1VzZSkgewogICAgaWYgKF9keW5hbWljVXNlcyA9PSBudWxsKSB7CiAgICAgIF9keW5hbWljVXNlcyA9IG5ldyBTZXRsZXQ8RHluYW1pY1VzZT4oKTsKICAgICAgX2R5bmFtaWNVc2VzLmFkZEFsbCh3b3JsZEltcGFjdC5keW5hbWljVXNlcyk7CiAgICB9CiAgICBfZHluYW1pY1VzZXMuYWRkKGR5bmFtaWNVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclR5cGVVc2UoVHlwZVVzZSB0eXBlVXNlKSB7CiAgICBpZiAoX3R5cGVVc2VzID09IG51bGwpIHsKICAgICAgX3R5cGVVc2VzID0gbmV3IFNldGxldDxUeXBlVXNlPigpOwogICAgICBfdHlwZVVzZXMuYWRkQWxsKHdvcmxkSW1wYWN0LnR5cGVVc2VzKTsKICAgIH0KICAgIF90eXBlVXNlcy5hZGQodHlwZVVzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxUeXBlVXNlPiBnZXQgdHlwZVVzZXMgewogICAgcmV0dXJuIF90eXBlVXNlcyAhPSBudWxsID8gX3R5cGVVc2VzIDogd29ybGRJbXBhY3QudHlwZVVzZXM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhdGljVXNlKFN0YXRpY1VzZSBzdGF0aWNVc2UpIHsKICAgIGlmIChfc3RhdGljVXNlcyA9PSBudWxsKSB7CiAgICAgIF9zdGF0aWNVc2VzID0gbmV3IFNldGxldDxTdGF0aWNVc2U+KCk7CiAgICAgIF9zdGF0aWNVc2VzLmFkZEFsbCh3b3JsZEltcGFjdC5zdGF0aWNVc2VzKTsKICAgIH0KICAgIF9zdGF0aWNVc2VzLmFkZChzdGF0aWNVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8U3RhdGljVXNlPiBnZXQgc3RhdGljVXNlcyB7CiAgICByZXR1cm4gX3N0YXRpY1VzZXMgIT0gbnVsbCA/IF9zdGF0aWNVc2VzIDogd29ybGRJbXBhY3Quc3RhdGljVXNlczsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENvbnN0YW50VXNlPiBnZXQgY29uc3RhbnRVc2VzIHsKICAgIHJldHVybiBfY29uc3RhbnRVc2VzICE9IG51bGwgPyBfY29uc3RhbnRVc2VzIDogd29ybGRJbXBhY3QuY29uc3RhbnRVc2VzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNvbnN0YW50VXNlKENvbnN0YW50VXNlIGNvbnN0YW50VXNlKSB7CiAgICBpZiAoX2NvbnN0YW50VXNlcyA9PSBudWxsKSB7CiAgICAgIF9jb25zdGFudFVzZXMgPSBuZXcgU2V0bGV0PENvbnN0YW50VXNlPigpOwogICAgICBfY29uc3RhbnRVc2VzLmFkZEFsbCh3b3JsZEltcGFjdC5jb25zdGFudFVzZXMpOwogICAgfQogICAgX2NvbnN0YW50VXNlcy5hZGQoY29uc3RhbnRVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhcHBseShXb3JsZEltcGFjdFZpc2l0b3IgdmlzaXRvcikgewogICAgc3RhdGljVXNlcy5mb3JFYWNoKChTdGF0aWNVc2UgdXNlKSA9PiB2aXNpdG9yLnZpc2l0U3RhdGljVXNlKG1lbWJlciwgdXNlKSk7CiAgICBkeW5hbWljVXNlcwogICAgICAgIC5mb3JFYWNoKChEeW5hbWljVXNlIHVzZSkgPT4gdmlzaXRvci52aXNpdER5bmFtaWNVc2UobWVtYmVyLCB1c2UpKTsKICAgIHR5cGVVc2VzLmZvckVhY2goKFR5cGVVc2UgdXNlKSA9PiB2aXNpdG9yLnZpc2l0VHlwZVVzZShtZW1iZXIsIHVzZSkpOwogICAgY29uc3RhbnRVc2VzCiAgICAgICAgLmZvckVhY2goKENvbnN0YW50VXNlIHVzZSkgPT4gdmlzaXRvci52aXNpdENvbnN0YW50VXNlKG1lbWJlciwgdXNlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnVHJhbnNmb3JtZWRXb3JsZEltcGFjdCgkd29ybGRJbXBhY3QpJyk7CiAgICBXb3JsZEltcGFjdC5wcmludE9uKHNiLCB0aGlzKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIENvbnN0YW50IHVzZWQgdG8gZGVub3RlIGEgc3BlY2lmaWMgdXNlIG9mIGEgW1dvcmxkSW1wYWN0XS4KY2xhc3MgSW1wYWN0VXNlQ2FzZSB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIGNvbnN0IEltcGFjdFVzZUNhc2UodGhpcy5uYW1lKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0ltcGFjdFVzZUNhc2UoJG5hbWUpJzsKfQoKLy8vIFN0cmF0ZWd5IHVzZWQgZm9yIHByb2Nlc3NpbmcgW1dvcmxkSW1wYWN0XSBvYmplY3QgaW4gdmFyaW91cyB1c2UgY2FzZXMuCmNsYXNzIEltcGFjdFN0cmF0ZWd5IHsKICBjb25zdCBJbXBhY3RTdHJhdGVneSgpOwoKICAvLy8gQXBwbGllcyBbaW1wYWN0XSB0byBbdmlzaXRvcl0gZm9yIHRoZSBbaW1wYWN0VXNlQ2FzZV0gb2YgW2ltcGFjdFNvdXJjZV0uCiAgdm9pZCB2aXNpdEltcGFjdCh2YXIgaW1wYWN0U291cmNlLCBXb3JsZEltcGFjdCBpbXBhY3QsCiAgICAgIFdvcmxkSW1wYWN0VmlzaXRvciB2aXNpdG9yLCBJbXBhY3RVc2VDYXNlIGltcGFjdFVzZUNhc2UpIHsKICAgIC8vIEFwcGx5IHVuY29uZGl0aW9uYWxseS4KICAgIGltcGFjdC5hcHBseSh2aXNpdG9yKTsKICB9CgogIC8vLyBOb3RpZmllcyB0aGUgc3RyYXRlZ3kgdGhhdCBubyBtb3JlIGltcGFjdHMgb2YgW2ltcGFjdFVzZUNhc2VdIHdpbGwgYmUKICAvLy8gYXBwbGllZC4KICB2b2lkIG9uSW1wYWN0VXNlZChJbXBhY3RVc2VDYXNlIGltcGFjdFVzZUNhc2UpIHsKICAgIC8vIERvIG5vdGhpbmcuCiAgfQp9CgovLy8gVmlzaXRvciB1c2VkIHRvIHByb2Nlc3MgdGhlIHVzZXMgb2YgYSBbV29ybGRJbXBhY3RdLgphYnN0cmFjdCBjbGFzcyBXb3JsZEltcGFjdFZpc2l0b3IgewogIHZvaWQgdmlzaXRTdGF0aWNVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgU3RhdGljVXNlIHN0YXRpY1VzZSk7CiAgdm9pZCB2aXNpdER5bmFtaWNVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgRHluYW1pY1VzZSBkeW5hbWljVXNlKTsKICB2b2lkIHZpc2l0VHlwZVVzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBUeXBlVXNlIHR5cGVVc2UpOwogIHZvaWQgdmlzaXRDb25zdGFudFVzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBDb25zdGFudFVzZSB0eXBlVXNlKTsKfQoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoZXNlIHdoZW4gd2UgZ2V0IGFub255bW91cyBsb2NhbCBjbGFzc2VzLgp0eXBlZGVmIHZvaWQgVmlzaXRVc2U8VT4oTWVtYmVyRW50aXR5IG1lbWJlciwgVSB1c2UpOwoKY2xhc3MgV29ybGRJbXBhY3RWaXNpdG9ySW1wbCBpbXBsZW1lbnRzIFdvcmxkSW1wYWN0VmlzaXRvciB7CiAgZmluYWwgVmlzaXRVc2U8U3RhdGljVXNlPiBfdmlzaXRTdGF0aWNVc2U7CiAgZmluYWwgVmlzaXRVc2U8RHluYW1pY1VzZT4gX3Zpc2l0RHluYW1pY1VzZTsKICBmaW5hbCBWaXNpdFVzZTxUeXBlVXNlPiBfdmlzaXRUeXBlVXNlOwogIGZpbmFsIFZpc2l0VXNlPENvbnN0YW50VXNlPiBfdmlzaXRDb25zdGFudFVzZTsKCiAgV29ybGRJbXBhY3RWaXNpdG9ySW1wbCgKICAgICAge1Zpc2l0VXNlPFN0YXRpY1VzZT4gdmlzaXRTdGF0aWNVc2UsCiAgICAgIFZpc2l0VXNlPER5bmFtaWNVc2U+IHZpc2l0RHluYW1pY1VzZSwKICAgICAgVmlzaXRVc2U8VHlwZVVzZT4gdmlzaXRUeXBlVXNlLAogICAgICBWaXNpdFVzZTxDb25zdGFudFVzZT4gdmlzaXRDb25zdGFudFVzZX0pCiAgICAgIDogX3Zpc2l0U3RhdGljVXNlID0gdmlzaXRTdGF0aWNVc2UsCiAgICAgICAgX3Zpc2l0RHluYW1pY1VzZSA9IHZpc2l0RHluYW1pY1VzZSwKICAgICAgICBfdmlzaXRUeXBlVXNlID0gdmlzaXRUeXBlVXNlLAogICAgICAgIF92aXNpdENvbnN0YW50VXNlID0gdmlzaXRDb25zdGFudFVzZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0YXRpY1VzZShNZW1iZXJFbnRpdHkgbWVtYmVyLCBTdGF0aWNVc2UgdXNlKSB7CiAgICBpZiAoX3Zpc2l0U3RhdGljVXNlICE9IG51bGwpIHsKICAgICAgX3Zpc2l0U3RhdGljVXNlKG1lbWJlciwgdXNlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREeW5hbWljVXNlKE1lbWJlckVudGl0eSBtZW1iZXIsIER5bmFtaWNVc2UgdXNlKSB7CiAgICBpZiAoX3Zpc2l0RHluYW1pY1VzZSAhPSBudWxsKSB7CiAgICAgIF92aXNpdER5bmFtaWNVc2UobWVtYmVyLCB1c2UpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgVHlwZVVzZSB1c2UpIHsKICAgIGlmIChfdmlzaXRUeXBlVXNlICE9IG51bGwpIHsKICAgICAgX3Zpc2l0VHlwZVVzZShtZW1iZXIsIHVzZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uc3RhbnRVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgQ29uc3RhbnRVc2UgdXNlKSB7CiAgICBpZiAoX3Zpc2l0Q29uc3RhbnRVc2UgIT0gbnVsbCkgewogICAgICBfdmlzaXRDb25zdGFudFVzZShtZW1iZXIsIHVzZSk7CiAgICB9CiAgfQp9CoGSAE5OPAEnASQoEwFGHARRTEgEUEhLLhQXASMBQAE9AUgQUB8BNwFDARwBK1AQTEoRTgQBDCMBMCoeGgQBQi8BMCEgNQgGATIwLDQEAgEkMikvNQIBUUgQIB4aIgEcASNQAQwWHh0bHQE0JyA0Mi42BAEMMyAvIgQBDClHBAEMKh0pHAQBDCM+BAEMMB8tIAQBDCdEBAEMNiExJAQBDCtKBAIBQxQ/HSpHAToBGiM2HCgIBgQBDCoWLgQBDDMWNAQBDDAWMgQBDDYWNgQBTEsWGD0vHBgEAU8UNwIBPjxKIQEhHSMlASwBDDEBDBUiHx0gHwQBDClKBAEMMyAvNAYiBAEMKh0pLgYcBAEMI0EEAQwwHy0yBiAEAQwnRwQBDCtNBAEMNiExNgYkBAEMK1AQTEoRTgQBDBYqNiMaBAIBPxYVASIBDC8CAUwXGgFPOUEeGwQBTA8zEwQCATkkQUQ7QwIBSjYBPS0vKTEBGissJi8qLCYuAQw8IyQGBAEMPiQlBgQBDDghIgYEAQxAJSYGBAIBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0KHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3dvcmxkLmRhcnSyLy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMud29ybGQ7CgppbXBvcnQgJ2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnY29tbW9uLmRhcnQnOwppbXBvcnQgJ2NvbW1vbl9lbGVtZW50cy5kYXJ0JwogICAgc2hvdwogICAgICAgIEpDb21tb25FbGVtZW50cywKICAgICAgICBKRWxlbWVudEVudmlyb25tZW50LAogICAgICAgIEtDb21tb25FbGVtZW50cywKICAgICAgICBLRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJ2RlZmVycmVkX2xvYWQuZGFydCc7CmltcG9ydCAnZGlhZ25vc3RpY3MvZGlhZ25vc3RpY19saXN0ZW5lci5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICdpbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnaXIvc3RhdGljX3R5cGUuZGFydCc7CmltcG9ydCAnanNfYmFja2VuZC9hbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICdqc19iYWNrZW5kL2ZpZWxkX2FuYWx5c2lzLmRhcnQnIHNob3cgSkZpZWxkQW5hbHlzaXMsIEtGaWVsZEFuYWx5c2lzOwppbXBvcnQgJ2pzX2JhY2tlbmQvYmFja2VuZF91c2FnZS5kYXJ0JyBzaG93IEJhY2tlbmRVc2FnZTsKaW1wb3J0ICdqc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCcgc2hvdyBJbnRlcmNlcHRvckRhdGE7CmltcG9ydCAnanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JyBzaG93IE5hdGl2ZURhdGE7CmltcG9ydCAnanNfYmFja2VuZC9ub19zdWNoX21ldGhvZF9yZWdpc3RyeS5kYXJ0JyBzaG93IE5vU3VjaE1ldGhvZERhdGE7CmltcG9ydCAnanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX3Jlc29sdXRpb24uZGFydCcgc2hvdyBSdW50aW1lVHlwZXNOZWVkOwppbXBvcnQgJ2pzX21vZGVsL2xvY2Fscy5kYXJ0JzsKaW1wb3J0ICdqc19lbWl0dGVyL3NvcnRlci5kYXJ0JzsKaW1wb3J0ICd1bml2ZXJzZS9jbGFzc19oaWVyYXJjaHkuZGFydCc7CmltcG9ydCAndW5pdmVyc2UvbWVtYmVyX3VzYWdlLmRhcnQnOwppbXBvcnQgJ3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CgovLy8gQ29tbW9uIHN1cGVyaW50ZXJmYWNlIGZvciBbT3BlbldvcmxkXSBhbmQgW0pDbG9zZWRXb3JsZF0uCmFic3RyYWN0IGNsYXNzIFdvcmxkIHt9CgovLy8gVGhlIFtKQ2xvc2VkV29ybGRdIHJlcHJlc2VudHMgdGhlIGluZm9ybWF0aW9uIGtub3duIGFib3V0IGEgcHJvZ3JhbSB3aGVuCi8vLyBjb21waWxpbmcgd2l0aCBjbG9zZWQtd29ybGQgc2VtYW50aWNzLgovLy8KLy8vIEdpdmVuIHRoZSBlbnRyeXBvaW50IG9mIGFuIGFwcGxpY2F0aW9uLCB3ZSBjYW4gdHJhY2sgd2hhdCdzIHJlYWNoYWJsZSBmcm9tCi8vLyBpdCwgd2hhdCBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgd2hhdCBjbGFzc2VzIGFyZSBhbGxvY2F0ZWQsIHdoaWNoIG5hdGl2ZQovLy8gSmF2YVNjcmlwdCB0eXBlcyBhcmUgdG91Y2hlZCwgd2hhdCBsYW5ndWFnZSBmZWF0dXJlcyBhcmUgdXNlZCwgYW5kIHNvIG9uLgovLy8gVGhpcyBwcmVjaXNlIGtub3dsZWRnZSBhYm91dCB3aGF0J3MgbGl2ZSBpbiB0aGUgcHJvZ3JhbSBpcyBsYXRlciB1c2VkIGluCi8vLyBvcHRpbWl6YXRpb25zIGFuZCBvdGhlciBjb21waWxlciBkZWNpc2lvbnMgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbi4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWF5YmUgdGhpcyBzaG91bGQganVzdCBiZSBjYWxsZWQgdGhlIEpXb3JsZC4KYWJzdHJhY3QgY2xhc3MgSkNsb3NlZFdvcmxkIGltcGxlbWVudHMgV29ybGQgewogIEpGaWVsZEFuYWx5c2lzIGdldCBmaWVsZEFuYWx5c2lzOwoKICBCYWNrZW5kVXNhZ2UgZ2V0IGJhY2tlbmRVc2FnZTsKCiAgTmF0aXZlRGF0YSBnZXQgbmF0aXZlRGF0YTsKCiAgSW50ZXJjZXB0b3JEYXRhIGdldCBpbnRlcmNlcHRvckRhdGE7CgogIEpFbGVtZW50RW52aXJvbm1lbnQgZ2V0IGVsZW1lbnRFbnZpcm9ubWVudDsKCiAgRGFydFR5cGVzIGdldCBkYXJ0VHlwZXM7CgogIEpDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHM7CgogIC8vLyBSZXR1cm5zIHRoZSBbQWJzdHJhY3RWYWx1ZURvbWFpbl0gdXNlZCBpbiB0aGUgZ2xvYmFsIHR5cGUgaW5mZXJlbmNlLgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IGFic3RyYWN0VmFsdWVEb21haW47CgogIFJ1bnRpbWVUeXBlc05lZWQgZ2V0IHJ0aU5lZWQ7CgogIE5vU3VjaE1ldGhvZERhdGEgZ2V0IG5vU3VjaE1ldGhvZERhdGE7CgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgbGl2ZU5hdGl2ZUNsYXNzZXM7CgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IHByb2Nlc3NlZE1lbWJlcnM7CgogIENsYXNzSGllcmFyY2h5IGdldCBjbGFzc0hpZXJhcmNoeTsKCiAgQW5ub3RhdGlvbnNEYXRhIGdldCBhbm5vdGF0aW9uc0RhdGE7CgogIEdsb2JhbExvY2Fsc01hcCBnZXQgZ2xvYmFsTG9jYWxzTWFwOwogIENsb3N1cmVEYXRhIGdldCBjbG9zdXJlRGF0YUxvb2t1cDsKCiAgT3V0cHV0VW5pdERhdGEgZ2V0IG91dHB1dFVuaXREYXRhOwoKICAvLy8gVGhlIFtTb3J0ZXJdIHVzZWQgZm9yIHNvcnRpbmcgZWxlbWVudHMgaW4gdGhlIGdlbmVyYXRlZCBjb2RlLgogIFNvcnRlciBnZXQgc29ydGVyOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gaXMgaW1wbGVtZW50ZWQgYnkgYW4gaW5zdGFudGlhdGVkIGNsYXNzLgogIGJvb2wgaXNJbXBsZW1lbnRlZChDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgbW9zdCBzcGVjaWZpYyBzdWJjbGFzcyBvZiBbY2xzXSAoaW5jbHVkaW5nIFtjbHNdKSB0aGF0IGlzCiAgLy8vIGRpcmVjdGx5IGluc3RhbnRpYXRlZCBvciBhIHN1cGVyY2xhc3Mgb2YgYWxsIGRpcmVjdGx5IGluc3RhbnRpYXRlZAogIC8vLyBzdWJjbGFzc2VzLiBJZiBbY2xzXSBpcyBub3QgaW5zdGFudGlhdGVkLCBgbnVsbGAgaXMgcmV0dXJuZWQuCiAgQ2xhc3NFbnRpdHkgZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJjbGFzc2VzKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIHRoZSBtb3N0IHNwZWNpZmljIHN1YnR5cGUgb2YgW2Nsc10gKGluY2x1ZGluZyBbY2xzXSkgdGhhdCBpcwogIC8vLyBkaXJlY3RseSBpbnN0YW50aWF0ZWQgb3IgYSBzdXBlcmNsYXNzIG9mIGFsbCBkaXJlY3RseSBpbnN0YW50aWF0ZWQKICAvLy8gc3VidHlwZXMuIElmIG5vIHN1YnR5cGVzIG9mIFtjbHNdIGFyZSBpbnN0YW50aWF0ZWQsIGBudWxsYCBpcyByZXR1cm5lZC4KICBDbGFzc0VudGl0eSBnZXRMdWJPZkluc3RhbnRpYXRlZFN1YnR5cGVzKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFuIGl0ZXJhYmxlIG92ZXIgdGhlIGNvbW1vbiBzdXBlcnR5cGVzIG9mIHRoZSBbY2xhc3Nlc10uCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGNvbW1vblN1cGVydHlwZXNPZihJdGVyYWJsZTxDbGFzc0VudGl0eT4gY2xhc3Nlcyk7CgogIC8vLyBSZXR1cm5zIGFuIGl0ZXJhYmxlIG92ZXIgdGhlIGxpdmUgbWl4aW4gYXBwbGljYXRpb25zIHRoYXQgbWl4aW4gW2Nsc10uCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IG1peGluVXNlc09mKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBpcyBtaXhlZCBpbnRvIGEgbGl2ZSBjbGFzcy4KICBib29sIGlzVXNlZEFzTWl4aW4oQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGFueSBsaXZlIGNsYXNzIHRoYXQgbWl4ZXMgaW4gW2Nsc10gaW1wbGVtZW50cyBbdHlwZV0uCiAgYm9vbCBoYXNBbnlTdWJjbGFzc09mTWl4aW5Vc2VUaGF0SW1wbGVtZW50cygKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBDbGFzc0VudGl0eSB0eXBlKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGFueSBsaXZlIGNsYXNzIHRoYXQgbWl4ZXMgaW4gW21peGluXSBpcyBhbHNvIGEgc3ViY2xhc3MKICAvLy8gb2YgW3N1cGVyY2xhc3NdLgogIGJvb2wgaGFzQW55U3ViY2xhc3NUaGF0TWl4ZXMoQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcywgQ2xhc3NFbnRpdHkgbWl4aW4pOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gb3IgYW55IHN1cGVyY2xhc3MgbWl4ZXMgaW4gW21peGluXS4KICBib29sIGlzU3ViY2xhc3NPZk1peGluVXNlT2YoQ2xhc3NFbnRpdHkgY2xzLCBDbGFzc0VudGl0eSBtaXhpbik7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBldmVyeSBzdWJ0eXBlIG9mIFt4XSBpcyBhIHN1YmNsYXNzIG9mIFt5XSBvciBhIHN1YmNsYXNzCiAgLy8vIG9mIGEgbWl4aW4gYXBwbGljYXRpb24gb2YgW3ldLgogIGJvb2wgZXZlcnlTdWJ0eXBlSXNTdWJjbGFzc09mT3JNaXhpblVzZU9mKENsYXNzRW50aXR5IHgsIENsYXNzRW50aXR5IHkpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IHN1YmNsYXNzIG9mIFtzdXBlcmNsYXNzXSBpbXBsZW1lbnRzIFt0eXBlXS4KICBib29sIGhhc0FueVN1YmNsYXNzVGhhdEltcGxlbWVudHMoQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcywgQ2xhc3NFbnRpdHkgdHlwZSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBhIGNhbGwgb2YgW3NlbGVjdG9yXSBvbiBbY2xzXSBhbmQvb3Igc3ViY2xhc3Nlcy9zdWJ0eXBlcwogIC8vLyBuZWVkIG5vU3VjaE1ldGhvZCBoYW5kbGluZy4KICAvLy8KICAvLy8gSWYgdGhlIHJlY2VpdmVyIGlzIGd1YXJhbnRlZWQgdG8gaGF2ZSBhIG1lbWJlciB0aGF0IG1hdGNoZXMgd2hhdCB3ZSdyZQogIC8vLyBsb29raW5nIGZvciwgdGhlcmUncyBubyBuZWVkIHRvIGludHJvZHVjZSBhIG5vU3VjaE1ldGhvZCBoYW5kbGVyLiBJdCB3aWxsCiAgLy8vIG5ldmVyIGJlIGNhbGxlZC4KICAvLy8KICAvLy8gQXMgYW4gZXhhbXBsZSwgY29uc2lkZXIgdGhpcyBjbGFzcyBoaWVyYXJjaHk6CiAgLy8vCiAgLy8vICAgICAgICAgICAgICAgICAgIEEgICAgPC0tIG5vU3VjaE1ldGhvZAogIC8vLyAgICAgICAgICAgICAgICAgIC8gXAogIC8vLyAgICAgICAgICAgICAgICAgQyAgIEIgIDwtLSBmb28KICAvLy8KICAvLy8gSWYgd2Uga25vdyB3ZSdyZSBjYWxsaW5nIGZvbyBvbiBhbiBvYmplY3Qgb2YgdHlwZSBCIHdlIGRvbid0IGhhdmUgdG8gd29ycnkKICAvLy8gYWJvdXQgdGhlIG5vU3VjaE1ldGhvZCBtZXRob2QgaW4gQSBiZWNhdXNlIG9iamVjdHMgb2YgdHlwZSBCIGltcGxlbWVudAogIC8vLyBmb28uIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB3ZSBlbmQgdXAgY2FsbGluZyBmb28gb24gc29tZXRoaW5nIG9mIHR5cGUgQyB3ZQogIC8vLyBoYXZlIHRvIGFkZCBhIGhhbmRsZXIgZm9yIGl0LgogIC8vLwogIC8vLyBJZiB0aGUgaG9sZGVycyBvZiBhbGwgdXNlci1kZWZpbmVkIG5vU3VjaE1ldGhvZCBpbXBsZW1lbnRhdGlvbnMgdGhhdCBtaWdodAogIC8vLyBiZSBhcHBsaWNhYmxlIHRvIHRoZSByZWNlaXZlciB0eXBlIGhhdmUgYSBtYXRjaGluZyBtZW1iZXIgZm9yIHRoZSBjdXJyZW50CiAgLy8vIG5hbWUgYW5kIHNlbGVjdG9yLCB3ZSBhdm9pZCBpbnRyb2R1Y2luZyBhIG5vU3VjaE1ldGhvZCBoYW5kbGVyLgogIC8vLwogIC8vLyBBcyBhbiBleGFtcGxlLCBjb25zaWRlciB0aGlzIGNsYXNzIGhpZXJhcmNoeToKICAvLy8KICAvLy8gICAgICAgICAgICAgICAgICAgICAgICBBICAgIDwtLSBmb28KICAvLy8gICAgICAgICAgICAgICAgICAgICAgIC8gXAogIC8vLyAgICBub1N1Y2hNZXRob2QgLS0+ICBCICAgQyAgPC0tIGJhcgogIC8vLyAgICAgICAgICAgICAgICAgICAgICB8ICAgfAogIC8vLyAgICAgICAgICAgICAgICAgICAgICBDICAgRCAgPC0tIG5vU3VjaE1ldGhvZAogIC8vLwogIC8vLyBXaGVuIGNhbGxpbmcgZm9vIG9uIGFuIG9iamVjdCBvZiB0eXBlIEEsIHdlIGtub3cgdGhhdCB0aGUgaW1wbGVtZW50YXRpb25zCiAgLy8vIG9mIG5vU3VjaE1ldGhvZCBhcmUgaW4gdGhlIGNsYXNzZXMgQiBhbmQgRCB0aGF0IGFsc28gKGluZGlyZWN0bHkpCiAgLy8vIGltcGxlbWVudCBmb28sIHNvIHdlIGRvIG5vdCBuZWVkIGEgaGFuZGxlciBmb3IgaXQuCiAgLy8vCiAgLy8vIElmIHdlJ3JlIGNhbGxpbmcgYmFyIG9uIGFuIG9iamVjdCBvZiB0eXBlIEQsIHdlIGRvbid0IG5lZWQgdGhlIGhhbmRsZXIKICAvLy8gZWl0aGVyIGJlY2F1c2UgYWxsIG9iamVjdHMgb2YgdHlwZSBEIGltcGxlbWVudCBiYXIgdGhyb3VnaCBpbmhlcml0YW5jZS4KICAvLy8KICAvLy8gSWYgd2UncmUgY2FsbGluZyBiYXIgb24gYW4gb2JqZWN0IG9mIHR5cGUgQSB3ZSBkbyBuZWVkIHRoZSBoYW5kbGVyIGJlY2F1c2UKICAvLy8gd2UgbWF5IGhhdmUgdG8gY2FsbCBCLm5vU3VjaE1ldGhvZCBzaW5jZSBCIGRvZXMgbm90IGltcGxlbWVudCBiYXIuCiAgYm9vbCBuZWVkc05vU3VjaE1ldGhvZChDbGFzc0VudGl0eSBjbHMsIFNlbGVjdG9yIHNlbGVjdG9yLCBDbGFzc1F1ZXJ5IHF1ZXJ5KTsKCiAgLy8vIFJldHVybnMgd2hldGhlciBbZWxlbWVudF0gd2lsbCBiZSB0aGUgb25lIHVzZWQgYXQgcnVudGltZSB3aGVuIGJlaW5nCiAgLy8vIGludm9rZWQgb24gYW4gaW5zdGFuY2Ugb2YgW2Nsc10uIFtuYW1lXSBpcyB1c2VkIHRvIGVuc3VyZSBsaWJyYXJ5CiAgLy8vIHByaXZhY3kgaXMgdGFrZW4gaW50byBhY2NvdW50LgogIGJvb2wgaGFzRWxlbWVudEluKENsYXNzRW50aXR5IGNscywgTmFtZSBuYW1lLCBNZW1iZXJFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZmllbGQgW2VsZW1lbnRdIGlzIGtub3duIHRvIGJlIGVmZmVjdGl2ZWx5IGZpbmFsLgogIGJvb2wgZmllbGROZXZlckNoYW5nZXMoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3NlbGVjdG9yXSBvbiBbcmVjZWl2ZXJdIGNhbiBoaXQgYSBgY2FsbGAgbWV0aG9kIG9uIGEKICAvLy8gc3ViY2xhc3Mgb2YgYENsb3N1cmVgLgogIC8vLwogIC8vLyBFdmVyeSBpbXBsZW1lbnRhdGlvbiBvZiBgQ2xvc3VyZWAgaGFzIGEgJ2NhbGwnIG1ldGhvZCB3aXRoIGl0cyBvd24KICAvLy8gc2lnbmF0dXJlIHNvIGl0IGNhbm5vdCBiZSBtb2RlbGxlZCBieSBhIFtGdW5jdGlvbkVudGl0eV0uIEFsc28sCiAgLy8vIGNhbGwtbWV0aG9kcyBmb3IgdGVhci1vZmYgYXJlIG5vdCBwYXJ0IG9mIHRoZSBlbGVtZW50IG1vZGVsLgogIGJvb2wgaW5jbHVkZXNDbG9zdXJlQ2FsbChTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlcik7CgogIC8vLyBSZXR1cm5zIHRoZSBtYXNrIGZvciB0aGUgcG90ZW50aWFsIHJlY2VpdmVycyBvZiBhIGR5bmFtaWMgY2FsbCB0bwogIC8vLyBbc2VsZWN0b3JdIG9uIFtyZWNlaXZlcl0uCiAgLy8vCiAgLy8vIFRoaXMgd2lsbCBuYXJyb3cgdGhlIGNvbnN0cmFpbnRzIG9mIFtyZWNlaXZlcl0gdG8gYW4gW0Fic3RyYWN0VmFsdWVdIG9mCiAgLy8vIHRoZSBzZXQgb2YgY2xhc3NlcyB0aGF0IGFjdHVhbGx5IGltcGxlbWVudCB0aGUgc2VsZWN0ZWQgbWVtYmVyIG9yCiAgLy8vIGltcGxlbWVudCB0aGUgaGFuZGxpbmcgJ25vU3VjaE1ldGhvZCcgd2hlcmUgdGhlIHNlbGVjdGVkIG1lbWJlciBpcwogIC8vLyB1bmltcGxlbWVudGVkLgogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVJlY2VpdmVyVHlwZShTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlcik7CgogIC8vLyBSZXR1cm5zIGFsbCB0aGUgaW5zdGFuY2UgbWVtYmVycyB0aGF0IG1heSBiZSBpbnZva2VkIHdpdGggdGhlIFtzZWxlY3Rvcl0KICAvLy8gb24gdGhlIGdpdmVuIFtyZWNlaXZlcl0uIFRoZSByZXR1cm5lZCBlbGVtZW50cyBtYXkgaW5jbHVkZSBub1N1Y2hNZXRob2QKICAvLy8gaGFuZGxlcnMgdGhhdCBhcmUgcG90ZW50aWFsIHRhcmdldHMgaW5kaXJlY3RseSB0aHJvdWdoIHRoZSBub1N1Y2hNZXRob2QKICAvLy8gbWVjaGFuaXNtLgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gbG9jYXRlTWVtYmVycygKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgc2luZ2xlIFtNZW1iZXJFbnRpdHldIHRoYXQgbWF0Y2hlcyBhIGNhbGwgdG8gW3NlbGVjdG9yXSBvbiB0aGUKICAvLy8gW3JlY2VpdmVyXS4gSWYgbXVsdGlwbGUgdGFyZ2V0cyBleGlzdCwgYG51bGxgIGlzIHJldHVybmVkLgogIE1lbWJlckVudGl0eSBsb2NhdGVTaW5nbGVNZW1iZXIoU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIpOwoKICAvLy8gUmV0dXJucyB0aGUgc2V0IG9mIHJlYWQsIHdyaXRlLCBhbmQgaW52b2NhdGlvbiBhY2Nlc3NlcyBmb3VuZCBvbiBbbWVtYmVyXQogIC8vLyBkdXJpbmcgdGhlIGNsb3NlZCB3b3JsZCBjb21wdXRhdGlvbi4KICBNZW1iZXJBY2Nlc3MgZ2V0TWVtYmVyQWNjZXNzKE1lbWJlckVudGl0eSBtZW1iZXIpOwp9CgphYnN0cmFjdCBjbGFzcyBPcGVuV29ybGQgaW1wbGVtZW50cyBXb3JsZCB7CiAgdm9pZCByZWdpc3RlclVzZWRFbGVtZW50KE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgS0Nsb3NlZFdvcmxkIGNsb3NlV29ybGQoRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyKTsKCiAgLy8vIFJldHVybnMgYW4gaXRlcmFibGUgb3ZlciBhbGwgbWl4aW4gYXBwbGljYXRpb25zIHRoYXQgbWl4aW4gW2Nsc10uCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGFsbE1peGluVXNlc09mKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbWVtYmVyXSBpcyBpbmhlcml0ZWQgaW50byBhIHN1YnR5cGUgb2YgW3R5cGVdLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2U6CiAgLy8vCiAgLy8vICAgICBjbGFzcyBBIHsgbSgpIHt9IH0KICAvLy8gICAgIGNsYXNzIEIgZXh0ZW5kcyBBIGltcGxlbWVudHMgSSB7fQogIC8vLyAgICAgY2xhc3MgQyBleHRlbmRzIE9iamVjdCB3aXRoIEEgaW1wbGVtZW50cyBJIHt9CiAgLy8vICAgICBhYnN0cmFjdCBjbGFzcyBJIHsgbSgpOyB9CiAgLy8vICAgICBhYnN0cmFjdCBjbGFzcyBKIGltcGxlbWVudHMgQSB7IH0KICAvLy8KICAvLy8gSGVyZSBgQS5tYCBpcyBpbmhlcml0ZWQgaW50byBgQWAsIGBCYCwgYW5kIGBDYC4gQmVjYXVzZSBgQmAgYW5kCiAgLy8vIGBDYCBpbXBsZW1lbnQgYElgLCBgaXNJbmhlcml0ZWRJblN1YnR5cGVPZihBLm0sIEkpYCBpcyB0cnVlLCBidXQKICAvLy8gYGlzSW5oZXJpdGVkSW5TdWJ0eXBlT2YoQS5tLCBKKWAgaXMgZmFsc2UuCiAgYm9vbCBpc0luaGVyaXRlZEluKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLCBDbGFzc0VudGl0eSB0eXBlLCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uKTsKfQoKLy8vIEEgW0J1aWx0V29ybGRdIGlzIGFuIGltbXV0YWJsZSByZXN1bHQgb2YgYSBbV29ybGRCdWlsZGVyXS4KYWJzdHJhY3QgY2xhc3MgQnVpbHRXb3JsZCB7CiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBsaXZlIGdlbmVyaWMgbWV0aG9kLgogIHZvaWQgZm9yRWFjaEdlbmVyaWNNZXRob2Qodm9pZCBGdW5jdGlvbihGdW5jdGlvbkVudGl0eSkgZik7CgogIC8vLyBBbGwgdHlwZXMgdGhhdCBhcmUgY2hlY2tlZCBlaXRoZXIgdGhyb3VnaCBpcywgYXMgb3IgY2hlY2tlZCBtb2RlIGNoZWNrcy4KICBJdGVyYWJsZTxEYXJ0VHlwZT4gZ2V0IGlzQ2hlY2tzOwoKICAvLy8gQWxsIGRpcmVjdGx5IGluc3RhbnRpYXRlZCB0eXBlcywgdGhhdCBpcywgdGhlIHR5cGVzIG9mCiAgLy8vIFtkaXJlY3RseUluc3RhbnRpYXRlZENsYXNzZXNdLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEltcHJvdmUgc2VtYW50aWMgcHJlY2lzaW9uLgogIEl0ZXJhYmxlPEludGVyZmFjZVR5cGU+IGdldCBpbnN0YW50aWF0ZWRUeXBlczsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2xlYW4gdXAgdGhlc2UgZ2V0dGVycy4KICAvLy8gTWV0aG9kcyBpbiBpbnN0YW50aWF0ZWQgY2xhc3NlcyB0aGF0IGFyZSBwb3RlbnRpYWxseSBjbG9zdXJpemVkLgogIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBnZXQgY2xvc3VyaXplZE1lbWJlcnM7CgogIC8vLyBTdGF0aWMgb3IgdG9wIGxldmVsIG1ldGhvZHMgdGhhdCBhcmUgY2xvc3VyaXplZC4KICBJdGVyYWJsZTxGdW5jdGlvbkVudGl0eT4gZ2V0IGNsb3N1cml6ZWRTdGF0aWNzOwoKICAvLy8gVHlwZSB2YXJpYWJsZXMgdXNlZCBhcyB0eXBlIGxpdGVyYWxzLgogIEl0ZXJhYmxlPFR5cGVWYXJpYWJsZVR5cGU+IGdldCB0eXBlVmFyaWFibGVUeXBlTGl0ZXJhbHM7CgogIC8vLyBMaXZlIHVzZXItZGVmaW5lZCAnbm9TdWNoTWV0aG9kJyBpbXBsZW1lbnRhdGlvbnMuCiAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGdldCB1c2VyTm9TdWNoTWV0aG9kczsKCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBsaXZlIGdlbmVyaWMgaW5zdGFuY2UgbWV0aG9kcy4KICB2b2lkIGZvckVhY2hHZW5lcmljSW5zdGFuY2VNZXRob2Qodm9pZCBGdW5jdGlvbihGdW5jdGlvbkVudGl0eSkgZik7CgogIC8vLyBMaXZlIGdlbmVyaWMgbG9jYWwgZnVuY3Rpb25zLgogIEl0ZXJhYmxlPExvY2FsPiBnZXQgZ2VuZXJpY0xvY2FsRnVuY3Rpb25zOwoKICAvLy8gQ2FsbCBbZl0gZm9yIGVhY2ggZ2VuZXJpYyBbZnVuY3Rpb25dIHdpdGggdGhlIHR5cGUgYXJndW1lbnRzIHBhc3NlZAogIC8vLyB0aHJvdWdoIHN0YXRpYyBjYWxscyB0byBbZnVuY3Rpb25dLgogIHZvaWQgZm9yRWFjaFN0YXRpY1R5cGVBcmd1bWVudCgKICAgICAgdm9pZCBmKEVudGl0eSBmdW5jdGlvbiwgU2V0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSk7CgogIC8vLyBDYWxsIFtmXSBmb3IgZWFjaCBnZW5lcmljIFtzZWxlY3Rvcl0gd2l0aCB0aGUgdHlwZSBhcmd1bWVudHMgcGFzc2VkCiAgLy8vIHRocm91Z2ggZHluYW1pYyBjYWxscyB0byBbc2VsZWN0b3JdLgogIHZvaWQgZm9yRWFjaER5bmFtaWNUeXBlQXJndW1lbnQoCiAgICAgIHZvaWQgZihTZWxlY3RvciBzZWxlY3RvciwgU2V0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSk7Cn0KCi8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbmFtZSB0aGlzIHRvIGBSZXNvbHV0aW9uV29ybGRgIG9yIGBLV29ybGRgPwovLyBUaGUgaW1tdXRhYmxlIHJlc3VsdCBvZiB0aGUgW1Jlc29sdXRpb25Xb3JsZEJ1aWxkZXJdLgphYnN0cmFjdCBjbGFzcyBLQ2xvc2VkV29ybGQgaW1wbGVtZW50cyBCdWlsdFdvcmxkIHsKICBEYXJ0VHlwZXMgZ2V0IGRhcnRUeXBlczsKICBLRmllbGRBbmFseXNpcyBnZXQgZmllbGRBbmFseXNpczsKICBCYWNrZW5kVXNhZ2UgZ2V0IGJhY2tlbmRVc2FnZTsKICBOYXRpdmVEYXRhIGdldCBuYXRpdmVEYXRhOwogIEludGVyY2VwdG9yRGF0YSBnZXQgaW50ZXJjZXB0b3JEYXRhOwogIEtFbGVtZW50RW52aXJvbm1lbnQgZ2V0IGVsZW1lbnRFbnZpcm9ubWVudDsKICBLQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzOwogIENsYXNzSGllcmFyY2h5IGdldCBjbGFzc0hpZXJhcmNoeTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGlzIGltcGxlbWVudGVkIGJ5IGFuIGluc3RhbnRpYXRlZCBjbGFzcy4KICBib29sIGlzSW1wbGVtZW50ZWQoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBnZXQgbGl2ZUluc3RhbmNlTWVtYmVyczsKICBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IGdldCBtaXhpblVzZXM7CiAgTWFwPENsYXNzRW50aXR5LCBTZXQ8Q2xhc3NFbnRpdHk+PiBnZXQgdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3NlczsKCiAgLy8vIE1lbWJlcnMgdGhhdCBhcmUgd3JpdHRlbiBlaXRoZXIgZGlyZWN0bHkgb3IgdGhyb3VnaCBhIHNldHRlciBzZWxlY3Rvci4KICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGdldCBhc3NpZ25lZEluc3RhbmNlTWVtYmVyczsKCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBsaXZlTmF0aXZlQ2xhc3NlczsKICBNYXA8TWVtYmVyRW50aXR5LCBNZW1iZXJVc2FnZT4gZ2V0IGxpdmVNZW1iZXJVc2FnZTsKICBSdW50aW1lVHlwZXNOZWVkIGdldCBydGlOZWVkOwogIE5vU3VjaE1ldGhvZERhdGEgZ2V0IG5vU3VjaE1ldGhvZERhdGE7CgogIEFubm90YXRpb25zRGF0YSBnZXQgYW5ub3RhdGlvbnNEYXRhOwoKICAvLy8gU2V0IG9mIGxpdmUgY2xvc3VyaXplZCBtZW1iZXJzIHdob3NlIHNpZ25hdHVyZXMgcmVmZXJlbmNlIHR5cGUgdmFyaWFibGVzLgogIC8vLwogIC8vLyBBIGNsb3N1cml6ZWQgbWV0aG9kIGlzIGNvbnNpZGVyZWQgbGl2ZSBpZiB0aGUgZW5jbG9zaW5nIGNsYXNzIGhhcyBiZWVuCiAgLy8vIGluc3RhbnRpYXRlZC4KICBJdGVyYWJsZTxGdW5jdGlvbkVudGl0eT4gZ2V0IGNsb3N1cml6ZWRNZW1iZXJzV2l0aEZyZWVUeXBlVmFyaWFibGVzOwoKICAvLy8gU2V0IG9mIChsaXZlKSBsb2NhbCBmdW5jdGlvbnMgKGNsb3N1cmVzKS4KICAvLy8KICAvLy8gQSBsaXZlIGZ1bmN0aW9uIGlzIG9uZSB3aG9zZSBlbmNsb3NpbmcgbWVtYmVyIGZ1bmN0aW9uIGhhcyBiZWVuIGVucXVldWVkLgogIEl0ZXJhYmxlPExvY2FsPiBnZXQgbG9jYWxGdW5jdGlvbnM7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbWVtYmVyXSBoYXMgYmVlbiBtYXJrZWQgYXMgdXNlZCAoY2FsbGVkLCByZWFkLCBldGMuKSBpbgogIC8vLyB0aGlzIHdvcmxkIGJ1aWxkZXIuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWF5YmUgdGhpcyBzaG91bGQgYmUgcGFydCBvZiBbQ2xvc2VkV29ybGRdIChpbnN0ZWFkKS4KICBib29sIGlzTWVtYmVyVXNlZChNZW1iZXJFbnRpdHkgbWVtYmVyKTsKfQqBQQBOTjwBFwEXFh4JGR0ZHR0vIR4eLh4mTTpANkhJHyEoJS8BPhgBTSsET0xOTUdFLyQBIQEdAScBLgEbASYBSy8BIAEpAS8BLwElAScBJyUBJQFEFQFHJwFMSUQ/AUtJTj0BR0sBTTYBOicBTi8qAVAXSwFCQwFQJUsBSE8BUSIGTVAXBjQGLhslBlFNUSQGUVBGBjQGKiAqITMGUEg5Bk1OBlFJUAFLSCVHAU4wAU4dBklGQ0cBSCAGTkhJFVABT05OESgyAVFBTgFQKzUCASwyATgBSDkBSAYUBh0sOCQsBkZHMRZGAgE/HC4+AU8jAT0lNjEBMkcyATcyASw7ATgyAThGASQtAUoqIj0BSisjPwIBRjk0GyQhHScuJiUBRycBMjRHAU02AS82ICkBJwFQBk0URwEwBlAmAVEaUCoCAR9wYWNrYWdlOmNvbXBpbGVyL3NyYy93b3JsZC5kYXJ0SHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2RpYWdub3N0aWNzL2dlbmVyYXRlZC9zaGFyZWRfbWVzc2FnZXMuZGFydKCtLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KLyoKRE9OJ1QgRURJVC4gR0VORVJBVEVELiBET04nVCBFRElULgpUaGlzIGZpbGUgaGFzIGJlZW4gZ2VuZXJhdGVkIGJ5ICdwdWJsaXNoLmRhcnQnIGluIHRoZSBkYXJ0X21lc3NhZ2VzIHBhY2thZ2UuCgpNZXNzYWdlcyBhcmUgbWFpbnRhaW5lZCBpbiBgbGliL3NoYXJlZF9tZXNzYWdlcy5kYXJ0YCBvZiB0aGF0IHNhbWUgcGFja2FnZS4KQWZ0ZXIgYW55IGNoYW5nZSB0byB0aGF0IGZpbGUsIHJ1biBgYmluL3B1Ymxpc2guZGFydGAgdG8gZ2VuZXJhdGUgYSBuZXcgdmVyc2lvbgpvZiB0aGUganNvbiwgZGFydDJqcyBhbmQgYW5hbHl6ZXIgcmVwcmVzZW50YXRpb25zLgoqLwppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnIHNob3cgTWVzc2FnZUtpbmQsIE1lc3NhZ2VUZW1wbGF0ZTsKCmNvbnN0IE1hcDxNZXNzYWdlS2luZCwgTWVzc2FnZVRlbXBsYXRlPiBURU1QTEFURVMgPQogICAgY29uc3QgPE1lc3NhZ2VLaW5kLCBNZXNzYWdlVGVtcGxhdGU+ewogIE1lc3NhZ2VLaW5kLkNPTlNUX0NPTlNUUlVDVE9SX1dJVEhfQk9EWTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5DT05TVF9DT05TVFJVQ1RPUl9XSVRIX0JPRFksCiAgICAgICJDb25zdCBjb25zdHJ1Y3RvciBjYW4ndCBoYXZlIGEgYm9keS4iLAogICAgICBob3dUb0ZpeDogIlRyeSByZW1vdmluZyB0aGUgJ2NvbnN0JyBrZXl3b3JkIG9yIHRoZSBib2R5LiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgciIiIgogICAgICAgICBjbGFzcyBDIHsKICAgICAgICAgICBjb25zdCBDKCkge30KICAgICAgICAgfQoKICAgICAgICAgbWFpbigpID0+IG5ldyBDKCk7IiIiLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLkNPTlNUX0ZBQ1RPUlk6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZShNZXNzYWdlS2luZC5DT05TVF9GQUNUT1JZLAogICAgICAiT25seSByZWRpcmVjdGluZyBmYWN0b3J5IGNvbnN0cnVjdG9ycyBjYW4gYmUgZGVjbGFyZWQgdG8gYmUgJ2NvbnN0Jy4iLAogICAgICBob3dUb0ZpeDoKICAgICAgICAgICJUcnkgcmVtb3ZpbmcgdGhlICdjb25zdCcga2V5d29yZCBvciByZXBsYWNpbmcgdGhlIGJvZHkgd2l0aCAnPScgZm9sbG93ZWQgYnkgYSB2YWxpZCB0YXJnZXQuIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICByIiIiCiAgICAgICAgIGNsYXNzIEMgewogICAgICAgICAgIGNvbnN0IGZhY3RvcnkgQygpIHt9CiAgICAgICAgIH0KCiAgICAgICAgIG1haW4oKSA9PiBuZXcgQygpOyIiIiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5FWFRSQU5FT1VTX01PRElGSUVSOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLkVYVFJBTkVPVVNfTU9ESUZJRVIsCiAgICAgICJDYW4ndCBoYXZlIG1vZGlmaWVyICcje21vZGlmaWVyfScgaGVyZS4iLAogICAgICBob3dUb0ZpeDogIlRyeSByZW1vdmluZyAnI3ttb2RpZmllcn0nLiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgInZhciBTdHJpbmcgZm9vOyBtYWluKCl7fSIsCiAgICAgICAgInZhciBmaW5hbCBmb287IG1haW4oKXt9IiwKICAgICAgICAidmFyIHZhciBmb287IG1haW4oKXt9IiwKICAgICAgICAidmFyIGNvbnN0IGZvbzsgbWFpbigpe30iLAogICAgICAgICJ2YXIgYWJzdHJhY3QgZm9vOyBtYWluKCl7fSIsCiAgICAgICAgInZhciBzdGF0aWMgZm9vOyBtYWluKCl7fSIsCiAgICAgICAgInZhciBleHRlcm5hbCBmb287IG1haW4oKXt9IiwKICAgICAgICAiZmluYWwgdmFyIGZvbzsgbWFpbigpe30iLAogICAgICAgICJ2YXIgdmFyIGZvbzsgbWFpbigpe30iLAogICAgICAgICJjb25zdCB2YXIgZm9vOyBtYWluKCl7fSIsCiAgICAgICAgImFic3RyYWN0IHZhciBmb287IG1haW4oKXt9IiwKICAgICAgICAic3RhdGljIHZhciBmb287IG1haW4oKXt9IiwKICAgICAgICAiZXh0ZXJuYWwgdmFyIGZvbzsgbWFpbigpe30iLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLkVYVFJBTkVPVVNfTU9ESUZJRVJfUkVQTEFDRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5FWFRSQU5FT1VTX01PRElGSUVSX1JFUExBQ0UsCiAgICAgICJDYW4ndCBoYXZlIG1vZGlmaWVyICcje21vZGlmaWVyfScgaGVyZS4iLAogICAgICBob3dUb0ZpeDoKICAgICAgICAgICJUcnkgcmVwbGFjaW5nIG1vZGlmaWVyICcje21vZGlmaWVyfScgd2l0aCAndmFyJywgJ2ZpbmFsJywgb3IgYSB0eXBlLiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgInNldCBmb287IG1haW4oKXt9IiwKICAgICAgICAiYWJzdHJhY3QgZm9vOyBtYWluKCl7fSIsCiAgICAgICAgInN0YXRpYyBmb287IG1haW4oKXt9IiwKICAgICAgICAiZXh0ZXJuYWwgZm9vOyBtYWluKCl7fSIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuQ09OU1RSVUNUT1JfV0lUSF9SRVRVUk5fVFlQRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5DT05TVFJVQ1RPUl9XSVRIX1JFVFVSTl9UWVBFLAogICAgICAiQ29uc3RydWN0b3JzIGNhbid0IGhhdmUgYSByZXR1cm4gdHlwZS4iLAogICAgICBob3dUb0ZpeDogIlRyeSByZW1vdmluZyB0aGUgcmV0dXJuIHR5cGUuIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAiY2xhc3MgQSB7IGludCBBKCkge30gfSBtYWluKCkgeyBuZXcgQSgpOyB9IiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5NSVNTSU5HX0VYUFJFU1NJT05fSU5fVEhST1c6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuTUlTU0lOR19FWFBSRVNTSU9OX0lOX1RIUk9XLAogICAgICAiTWlzc2luZyBleHByZXNzaW9uIGFmdGVyICd0aHJvdycuIiwKICAgICAgaG93VG9GaXg6ICJEaWQgeW91IG1lYW4gJ3JldGhyb3cnPyIpLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuUkVUSFJPV19PVVRTSURFX0NBVENIOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLlJFVEhST1dfT1VUU0lERV9DQVRDSCwKICAgICAgIlJldGhyb3cgbXVzdCBiZSBpbnNpZGUgb2YgY2F0Y2ggY2xhdXNlLiIsCiAgICAgIGhvd1RvRml4OgogICAgICAgICAgIlRyeSBtb3ZpbmcgdGhlIGV4cHJlc3Npb24gaW50byBhIGNhdGNoIGNsYXVzZSwgb3IgdXNpbmcgYSAndGhyb3cnIGV4cHJlc3Npb24uIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAibWFpbigpIHsgcmV0aHJvdzsgfSIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuUkVUVVJOX0lOX0dFTkVSQVRJVkVfQ09OU1RSVUNUT1I6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuUkVUVVJOX0lOX0dFTkVSQVRJVkVfQ09OU1RSVUNUT1IsCiAgICAgICJDb25zdHJ1Y3RvcnMgY2FuJ3QgcmV0dXJuIHZhbHVlcy4iLAogICAgICBob3dUb0ZpeDoKICAgICAgICAgICJUcnkgcmVtb3ZpbmcgdGhlIHJldHVybiBzdGF0ZW1lbnQgb3IgdXNpbmcgYSBmYWN0b3J5IGNvbnN0cnVjdG9yLiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgciIiIgogICAgICAgIGNsYXNzIEMgewogICAgICAgICAgQygpIHsKICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBtYWluKCkgPT4gbmV3IEMoKTsiIiIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuUkVUVVJOX0lOX0dFTkVSQVRPUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5SRVRVUk5fSU5fR0VORVJBVE9SLAogICAgICAiQ2FuJ3QgcmV0dXJuIGEgdmFsdWUgZnJvbSBhIGdlbmVyYXRvciBmdW5jdGlvbiAodXNpbmcgdGhlICcje21vZGlmaWVyfScgbW9kaWZpZXIpLiIsCiAgICAgIGhvd1RvRml4OgogICAgICAgICAgIlRyeSByZW1vdmluZyB0aGUgdmFsdWUsIHJlcGxhY2luZyAncmV0dXJuJyB3aXRoICd5aWVsZCcgb3IgY2hhbmdpbmcgdGhlIG1ldGhvZCBib2R5IG1vZGlmaWVyLiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgciIiIgogICAgICAgIGZvbygpIGFzeW5jKiB7IHJldHVybiAwOyB9CiAgICAgICAgbWFpbigpID0+IGZvbygpOwogICAgICAgICIiIiwKICAgICAgICByIiIiCiAgICAgICAgZm9vKCkgc3luYyogeyByZXR1cm4gMDsgfQogICAgICAgIG1haW4oKSA9PiBmb28oKTsKICAgICAgICAiIiIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuTk9UX0FTU0lHTkFCTEU6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZShNZXNzYWdlS2luZC5OT1RfQVNTSUdOQUJMRSwKICAgICAgIicje2Zyb21UeXBlfScgaXMgbm90IGFzc2lnbmFibGUgdG8gJyN7dG9UeXBlfScuIiksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5GT1JJTl9OT1RfQVNTSUdOQUJMRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5GT1JJTl9OT1RfQVNTSUdOQUJMRSwKICAgICAgIlRoZSBlbGVtZW50IHR5cGUgJyN7Y3VycmVudFR5cGV9JyBvZiAnI3tleHByZXNzaW9uVHlwZX0nIGlzIG5vdCBhc3NpZ25hYmxlIHRvICcje2VsZW1lbnRUeXBlfScuIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICByIiIiCiAgICAgICAgbWFpbigpIHsKICAgICAgICAgIExpc3Q8aW50PiBsaXN0ID0gPGludD5bMSwgMl07CiAgICAgICAgICBmb3IgKFN0cmluZyB4IGluIGxpc3QpIHg7CiAgICAgICAgfQogICAgICAgICIiIiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5DQU5OT1RfUkVTT0xWRTogY29uc3QgTWVzc2FnZVRlbXBsYXRlKE1lc3NhZ2VLaW5kLkNBTk5PVF9SRVNPTFZFLAogICAgICAiQ2FuJ3QgcmVzb2x2ZSAnI3tuYW1lfScuIiksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5VTkRFRklORURfTUVUSE9EOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9NRVRIT0QsCiAgICAgICJUaGUgbWV0aG9kICcje21lbWJlck5hbWV9JyBpcyBub3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcje2NsYXNzTmFtZX0nLiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgciIiIgogICAgICAgIGNsYXNzIEEgewogICAgICAgICAgZm9vKCkgeyBiYXIoKTsgfQogICAgICAgIH0KICAgICAgICBtYWluKCkgeyBuZXcgQSgpLmZvbygpOyB9CiAgICAgICAgIiIiLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9HRVRURVI6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX0dFVFRFUiwKICAgICAgIlRoZSBnZXR0ZXIgJyN7bWVtYmVyTmFtZX0nIGlzIG5vdCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyN7Y2xhc3NOYW1lfScuIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAiY2xhc3MgQSB7fSBtYWluKCkgeyBuZXcgQSgpLng7IH0iLAogICAgICAgICJjbGFzcyBBIHt9IG1haW4oKSB7IEEueDsgfSIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX0lOU1RBTkNFX0dFVFRFUl9CVVRfU0VUVEVSOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9JTlNUQU5DRV9HRVRURVJfQlVUX1NFVFRFUiwKICAgICAgIlRoZSBzZXR0ZXIgJyN7bWVtYmVyTmFtZX0nIGluIGNsYXNzICcje2NsYXNzTmFtZX0nIGNhbiBub3QgYmUgdXNlZCBhcyBhIGdldHRlci4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICJjbGFzcyBBIHsgc2V0IHgoeSkge30gfSBtYWluKCkgeyBuZXcgQSgpLng7IH0iLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9PUEVSQVRPUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5VTkRFRklORURfT1BFUkFUT1IsCiAgICAgICJUaGUgb3BlcmF0b3IgJyN7bWVtYmVyTmFtZX0nIGlzIG5vdCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyN7Y2xhc3NOYW1lfScuIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAiY2xhc3MgQSB7fSBtYWluKCkgeyBuZXcgQSgpICsgMzsgfSIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX1NFVFRFUjogY29uc3QgTWVzc2FnZVRlbXBsYXRlKAogICAgICBNZXNzYWdlS2luZC5VTkRFRklORURfU0VUVEVSLAogICAgICAiVGhlIHNldHRlciAnI3ttZW1iZXJOYW1lfScgaXMgbm90IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnI3tjbGFzc05hbWV9Jy4iLAogICAgICBleGFtcGxlczogY29uc3QgWwogICAgICAgICJjbGFzcyBBIHt9IG1haW4oKSB7IG5ldyBBKCkueCA9IDQ5OTsgfSIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCiAgTWVzc2FnZUtpbmQuTk9fU1VDSF9TVVBFUl9NRU1CRVI6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuTk9fU1VDSF9TVVBFUl9NRU1CRVIsCiAgICAgICJDYW4ndCByZXNvbHZlICcje21lbWJlck5hbWV9JyBpbiBhIHN1cGVyY2xhc3Mgb2YgJyN7Y2xhc3NOYW1lfScuIiksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5VTkRFRklORURfU1VQRVJfU0VUVEVSOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9TVVBFUl9TRVRURVIsCiAgICAgICJUaGUgc2V0dGVyICcje21lbWJlck5hbWV9JyBpcyBub3QgZGVmaW5lZCBpbiBhIHN1cGVyY2xhc3Mgb2YgJyN7Y2xhc3NOYW1lfScuIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICByIiIiCiAgICAgICAgY2xhc3MgQSB7fQogICAgICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHsKICAgICAgICAgIGZvbygpIHsgc3VwZXIueCA9IDQ5OTsgfQogICAgICAgIH0KICAgICAgICBtYWluKCkgeyBuZXcgQigpLmZvbygpOyB9CiAgICAgICAgIiIiLAogICAgICBdKSwgLy8gR2VuZXJhdGVkLiBEb24ndCBlZGl0LgogIE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9TVEFUSUNfR0VUVEVSX0JVVF9TRVRURVI6IGNvbnN0IE1lc3NhZ2VUZW1wbGF0ZSgKICAgICAgTWVzc2FnZUtpbmQuVU5ERUZJTkVEX1NUQVRJQ19HRVRURVJfQlVUX1NFVFRFUiwKICAgICAgIkNhbm5vdCByZXNvbHZlIGdldHRlciAnI3tuYW1lfScuIiwKICAgICAgZXhhbXBsZXM6IGNvbnN0IFsKICAgICAgICAic2V0IGZvbyh4KSB7fSAgbWFpbigpIHsgZm9vOyB9IiwKICAgICAgXSksIC8vIEdlbmVyYXRlZC4gRG9uJ3QgZWRpdC4KICBNZXNzYWdlS2luZC5VTkRFRklORURfU1RBVElDX1NFVFRFUl9CVVRfR0VUVEVSOiBjb25zdCBNZXNzYWdlVGVtcGxhdGUoCiAgICAgIE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9TVEFUSUNfU0VUVEVSX0JVVF9HRVRURVIsCiAgICAgICJDYW5ub3QgcmVzb2x2ZSBzZXR0ZXIgJyN7bmFtZX0nLiIsCiAgICAgIGV4YW1wbGVzOiBjb25zdCBbCiAgICAgICAgciIiIgogICAgICAgIG1haW4oKSB7CiAgICAgICAgICBmaW5hbCB4ID0gMTsKICAgICAgICAgIHggPSAyOwogICAgICAgIH0iIiIsCiAgICAgICAgciIiIgogICAgICAgIG1haW4oKSB7CiAgICAgICAgICBjb25zdCB4ID0gMTsKICAgICAgICAgIHggPSAyOwogICAgICAgIH0KICAgICAgICAiIiIsCiAgICAgICAgciIiIgogICAgICAgIGZpbmFsIHggPSAxOwogICAgICAgIG1haW4oKSB7IHggPSAzOyB9CiAgICAgICAgIiIiLAogICAgICAgIHIiIiIKICAgICAgICBjb25zdCB4ID0gMTsKICAgICAgICBtYWluKCkgeyB4ID0gMzsgfQogICAgICAgICIiIiwKICAgICAgICAiZ2V0IGZvbyA9PiBudWxsICBtYWluKCkgeyBmb28gPSA1OyB9IiwKICAgICAgICAiY29uc3QgZm9vID0gMCAgbWFpbigpIHsgZm9vID0gNTsgfSIsCiAgICAgIF0pLCAvLyBHZW5lcmF0ZWQuIERvbid0IGVkaXQuCn07CoDbAE5OPAMjTQFMUDMDPQE0KkIvLkEYDRMYCwEgJE5OEGkYDRMgCwEgJDonMS8YJCMhIyYkJiMhIyYkJiRCLzEQUhgdIiAiJEMwMDEYNiRCLytGPCkxEFsYHyRHNCsQTxgNEhAWDAoBHyQ6J1wQaxgNIxkNDSIZDSRQVDsoaRgNESgkCg0kUD03JFEYDRIbCiINJDckURgsJiRLOFkYOSQ5JlMYLiQ3JFEYMiQ7KGU9KlYYDRMcIwoiDSRJNioYKiRJNioYDREXEQ4NERcRCg0NFRoNDRUaDTAuJAMBP3BhY2thZ2U6Y29tcGlsZXIvc3JjL2RpYWdub3N0aWNzL2dlbmVyYXRlZC9zaGFyZWRfbWVzc2FnZXMuZGFydDhzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydMABJ7IvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmNvbnN0YW50cy5leHByZXNzaW9uczsKCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RhbnRfc3lzdGVtLmRhcnQnIGFzIGNvbnN0YW50X3N5c3RlbTsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9vcGVyYXRvcnMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCcgc2hvdyBDYWxsU3RydWN0dXJlOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JzsKaW1wb3J0ICdjb25zdHJ1Y3RvcnMuZGFydCc7CmltcG9ydCAnZXZhbHVhdGlvbi5kYXJ0JzsKaW1wb3J0ICd2YWx1ZXMuZGFydCc7CgplbnVtIENvbnN0YW50RXhwcmVzc2lvbktpbmQgewogIEFTLAogIEJJTkFSWSwKICBCT09MLAogIEJPT0xfRlJPTV9FTlZJUk9OTUVOVCwKICBDT05DQVRFTkFURSwKICBDT05ESVRJT05BTCwKICBDT05TVFJVQ1RFRCwKICBET1VCTEUsCiAgRVJST05FT1VTLAogIEZVTkNUSU9OLAogIEZJRUxELAogIElERU5USUNBTCwKICBJTlQsCiAgSU5UX0ZST01fRU5WSVJPTk1FTlQsCiAgTElTVCwKICBTRVQsCiAgTUFQLAogIE5VTEwsCiAgU1RSSU5HLAogIFNUUklOR19GUk9NX0VOVklST05NRU5ULAogIFNUUklOR19MRU5HVEgsCiAgU1lNQk9MLAogIFRZUEUsCiAgVU5BUlksCiAgTE9DQUxfVkFSSUFCTEUsCiAgUE9TSVRJT05BTF9SRUZFUkVOQ0UsCiAgTkFNRURfUkVGRVJFTkNFLAogIEFTU0VSVCwKICBJTlNUQU5USUFUSU9OLAp9CgovLy8gQW4gZXhwcmVzc2lvbiB0aGF0IGlzIGEgY29tcGlsZS10aW1lIGNvbnN0YW50LgovLy8KLy8vIFdoZXJlYXMgW0NvbnN0YW50VmFsdWVdIHJlcHJlc2VudCBhIGNvbXBpbGUtdGltZSB2YWx1ZSwgYQovLy8gW0NvbnN0YW50RXhwcmVzc2lvbl0gcmVwcmVzZW50cyBhbiBleHByZXNzaW9uIGZvciBjcmVhdGluZyBhIGNvbnN0YW50LgovLy8KLy8vIFRoZXJlIGlzIG5vIG9uZS10by1vbmUgbWFwcGluZyBiZXR3ZWVuIFtDb25zdGFudEV4cHJlc3Npb25dIGFuZAovLy8gW0NvbnN0YW50VmFsdWVdLCBiZWNhdXNlIGRpZmZlcmVudCBleHByZXNzaW9ucyBjYW4gZGVub3RlIHRoZSBzYW1lIGNvbnN0YW50LgovLy8gRm9yIGluc3RhbmNlLCBtdWx0aXBsZSBgY29uc3RgIGNvbnN0cnVjdG9ycyBtYXkgYmUgdXNlZCB0byBjcmVhdGUgdGhlIHNhbWUKLy8vIG9iamVjdCwgYW5kIGRpZmZlcmVudCBgY29uc3RgIHZhcmlhYmxlcyBtYXkgaG9sZCB0aGUgc2FtZSB2YWx1ZS4KYWJzdHJhY3QgY2xhc3MgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBpbnQgX2hhc2hDb2RlOwoKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVbmlmeSBwcmVjZWRlbmNlIGhhbmRsZWQgYmV0d2VlbiBjb25zdGFudHMsIGZyb250LWVuZAogIC8vIGFuZCBiYWNrLWVuZC4KICBpbnQgZ2V0IHByZWNlZGVuY2UgPT4gMTY7CgogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSk7CgogIC8vLyBTdWJzdGl0dXRlIGZyZWUgdmFyaWFibGVzIHVzaW5nIGFyZ3VtZW50cy4KICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpID0+IHRoaXM7CgogIC8vLyBDb21wdXRlIHRoZSBbQ29uc3RhbnRWYWx1ZV0gZm9yIHRoaXMgZXhwcmVzc2lvbiB1c2luZyB0aGUgW2Vudmlyb25tZW50XS4KICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoaXMgY29uc3RhbnQgZXhwcmVzc2lvbiwgaWYgaXQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlCiAgLy8vIGVudmlyb25tZW50IHZhbHVlcy4KICBEYXJ0VHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+IG51bGw7CgogIC8vLyBSZXR1cm5zIGEgdGV4dCBzdHJpbmcgcmVzZW1ibGluZyB0aGUgRGFydCBjb2RlIGNyZWF0aW5nIHRoaXMgY29uc3RhbnQuCiAgU3RyaW5nIHRvRGFydFRleHQoKSB7CiAgICBDb25zdEV4cFByaW50ZXIgcHJpbnRlciA9IG5ldyBDb25zdEV4cFByaW50ZXIoKTsKICAgIGFjY2VwdChwcmludGVyKTsKICAgIHJldHVybiBwcmludGVyLnRvU3RyaW5nKCk7CiAgfQoKICAvLy8gUmV0dXJucyBhIHRleHQgc3RyaW5nIHNob3dpbmcgdGhlIHN0cnVjdHVyZSBvZiB0aGlzIGNvbnN0YW50LgogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgLy8vIFdyaXRlcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb25zdGFudCBpbnRvIFtzYl0uCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKTsKCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBfaGFzaENvZGUgPz89IF9jb21wdXRlSGFzaENvZGUoKTsKCiAgYm9vbCBfZXF1YWxzKGNvdmFyaWFudCBDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIENvbnN0YW50RXhwcmVzc2lvbikgcmV0dXJuIGZhbHNlOwogICAgaWYgKGtpbmQgIT0gb3RoZXIua2luZCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGhhc2hDb2RlICE9IG90aGVyLmhhc2hDb2RlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX2VxdWFscyhvdGhlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBhc3NlcnREZWJ1Z01vZGUoJ1VzZSBDb25zdGFudEV4cHJlc3Npb24udG9EYXJ0VGV4dCgpIG9yICcKICAgICAgICAnQ29uc3RhbnRFeHByZXNzaW9uLnRvU3RydWN0dXJlZFRleHQoKSBpbnN0ZWFkIG9mICcKICAgICAgICAnQ29uc3RhbnRFeHByZXNzaW9uLnRvU3RyaW5nKCknKTsKICAgIHJldHVybiB0b0RhcnRUZXh0KCk7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBleHByZXNzaW9uIGlzIGltcGxpY2l0bHkgY29uc3RhbnQsIHRoYXQgaXMsIHRoYXQKICAvLy8gaXQgZG9lc24ndCBkZWNsYXJlIGl0cyBjb25zdG5lc3Mgd2l0aCB0aGUgJ2NvbnN0JyBrZXl3b3JkLgogIC8vLwogIC8vLyBJbXBsaWNpdCBjb25zdGFudHMgYXJlIHNpbXBsZSBsaXRlcmFscywgbGlrZSBib29sLCBpbnQgYW5kIHN0cmluZwogIC8vLyBsaXRlcmFscywgY29uc3RhbnQgcmVmZXJlbmNlcyBhbmQgY29tcG9zaXRpb25zIG9mIGltcGxpY2l0IGNvbnN0YW50cy4KICAvLy8gRXhwbGljaXQgY29uc3RhbnRzIGFyZSBjb25zdHJ1Y3RvciBjb25zdGFudHMsIGFuZCBjb25zdGFudCBtYXAgYW5kIGxpc3QKICAvLy8gbGl0ZXJhbHMuCiAgYm9vbCBnZXQgaXNJbXBsaWNpdCA9PiB0cnVlOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBleHByZXNzaW9uIGlzIG9ubHkgcG90ZW50aWFsbHkgY29uc3RhbnQsIHRoYXQgaXMsCiAgLy8vIGlmIGl0IGNvbnRhaW5zIHBvc2l0aW9uYWwgb3IgbmFtZWQgcmVmZXJlbmNlcywgdXNlZCB0byBkZWZpbmUgY29uc3RhbnQKICAvLy8gY29uc3RydWN0b3JzLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1heWJlIG1ha2UgdGhpcyBmaW5hbCBpZiB3ZSB1c2UgaXQgb3V0c2lkZSBhc3NlcnRpb25zLgogIGJvb2wgZ2V0IGlzUG90ZW50aWFsID0+IGZhbHNlOwp9CgovLy8gQSBzeW50aGV0aWMgY29uc3RhbnQgdXNlZCB0byByZWNvdmVyIGZyb20gZXJyb3JzLgpjbGFzcyBFcnJvbmVvdXNDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5FUlJPTkVPVVM7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgLy8gRG8gbm90aGluZy4gVGhpcyBpcyBhbiBlcnJvci4KICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2Ugbm9uLWNvbnN0YW50IHZhbHVlcyBmb3IgZXJyb3JzLgogICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdFcnJvbmVvdXMoKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSA9PiAxMzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKEVycm9uZW91c0NvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgPT4gdHJ1ZTsKfQoKLy8vIEJvb2xlYW4gbGl0ZXJhbCBjb25zdGFudC4KY2xhc3MgQm9vbENvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgYm9vbCBib29sVmFsdWU7CgogIEJvb2xDb25zdGFudEV4cHJlc3Npb24odGhpcy5ib29sVmFsdWUpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuQk9PTDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEJvb2wodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdCb29sKHZhbHVlPSR7Ym9vbFZhbHVlfSknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUJvb2woYm9vbFZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgPT4gMTMgKiBib29sVmFsdWUuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhCb29sQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gYm9vbFZhbHVlID09IG90aGVyLmJvb2xWYWx1ZTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PgogICAgICBjb21tb25FbGVtZW50cy5ib29sVHlwZTsKfQoKLy8vIEludGVnZXIgbGl0ZXJhbCBjb25zdGFudC4KY2xhc3MgSW50Q29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBCaWdJbnQgaW50VmFsdWU7CgogIEludENvbnN0YW50RXhwcmVzc2lvbih0aGlzLmludFZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLklOVDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEludCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ0ludCh2YWx1ZT0ke2ludFZhbHVlfSknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludChpbnRWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpID0+IDE3ICogaW50VmFsdWUuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhJbnRDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBpbnRWYWx1ZSA9PSBvdGhlci5pbnRWYWx1ZTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PgogICAgICBjb21tb25FbGVtZW50cy5pbnRUeXBlOwp9CgovLy8gRG91YmxlIGxpdGVyYWwgY29uc3RhbnQuCmNsYXNzIERvdWJsZUNvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgZG91YmxlIGRvdWJsZVZhbHVlOwoKICBEb3VibGVDb25zdGFudEV4cHJlc3Npb24odGhpcy5kb3VibGVWYWx1ZSk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5ET1VCTEU7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXREb3VibGUodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdEb3VibGUodmFsdWU9JHtkb3VibGVWYWx1ZX0pJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVEb3VibGUoZG91YmxlVmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSA9PiAxOSAqIGRvdWJsZVZhbHVlLmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRG91YmxlQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gZG91YmxlVmFsdWUgPT0gb3RoZXIuZG91YmxlVmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4KICAgICAgY29tbW9uRWxlbWVudHMuZG91YmxlVHlwZTsKfQoKLy8vIFN0cmluZyBsaXRlcmFsIGNvbnN0YW50LgpjbGFzcyBTdHJpbmdDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIFN0cmluZyBzdHJpbmdWYWx1ZTsKCiAgU3RyaW5nQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMuc3RyaW5nVmFsdWUpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuU1RSSU5HOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U3RyaW5nKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnU3RyaW5nKHZhbHVlPSR7c3RyaW5nVmFsdWV9KScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlU3RyaW5nKHN0cmluZ1ZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgPT4gMjMgKiBzdHJpbmdWYWx1ZS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKFN0cmluZ0NvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIHN0cmluZ1ZhbHVlID09IG90aGVyLnN0cmluZ1ZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+CiAgICAgIGNvbW1vbkVsZW1lbnRzLnN0cmluZ1R5cGU7Cn0KCi8vLyBOdWxsIGxpdGVyYWwgY29uc3RhbnQuCmNsYXNzIE51bGxDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIE51bGxDb25zdGFudEV4cHJlc3Npb24oKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLk5VTEw7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXROdWxsKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnTnVsbCgpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVOdWxsKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpID0+IDI5OwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoTnVsbENvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+CiAgICAgIGNvbW1vbkVsZW1lbnRzLm51bGxUeXBlOwp9CgovLy8gTGl0ZXJhbCBsaXN0IGNvbnN0YW50LgpjbGFzcyBMaXN0Q29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBJbnRlcmZhY2VUeXBlIHR5cGU7CiAgZmluYWwgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IHZhbHVlczsKCiAgTGlzdENvbnN0YW50RXhwcmVzc2lvbih0aGlzLnR5cGUsIHRoaXMudmFsdWVzKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLkxJU1Q7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRMaXN0KHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnTGlzdCh0eXBlPSR0eXBlLHZhbHVlcz1bJyk7CiAgICBTdHJpbmcgZGVsaW1pdGVyID0gJyc7CiAgICBmb3IgKENvbnN0YW50RXhwcmVzc2lvbiB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgc2Iud3JpdGUoZGVsaW1pdGVyKTsKICAgICAgdmFsdWUuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgICAgZGVsaW1pdGVyID0gJywnOwogICAgfQogICAgc2Iud3JpdGUoJ10pJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVMaXN0KAogICAgICAgIHR5cGUsIHZhbHVlcy5tYXAoKHYpID0+IHYuZXZhbHVhdGUoZW52aXJvbm1lbnQpKS50b0xpc3QoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgTGlzdENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgICB0eXBlLCB2YWx1ZXMubWFwKCh2KSA9PiB2LmFwcGx5KGFyZ3VtZW50cykpLnRvTGlzdCgpKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgewogICAgaW50IGhhc2hDb2RlID0gMTMgKiB0eXBlLmhhc2hDb2RlICsgMTcgKiB2YWx1ZXMubGVuZ3RoOwogICAgZm9yIChDb25zdGFudEV4cHJlc3Npb24gdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgIGhhc2hDb2RlIF49IDE5ICogdmFsdWUuaGFzaENvZGU7CiAgICB9CiAgICByZXR1cm4gaGFzaENvZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoTGlzdENvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgaWYgKHR5cGUgIT0gb3RoZXIudHlwZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKHZhbHVlcy5sZW5ndGggIT0gb3RoZXIudmFsdWVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHZhbHVlc1tpXSAhPSBvdGhlci52YWx1ZXNbaV0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PiB0eXBlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ltcGxpY2l0ID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1BvdGVudGlhbCA9PiB2YWx1ZXMuYW55KChlKSA9PiBlLmlzUG90ZW50aWFsKTsKfQoKLy8vIExpdGVyYWwgc2V0IGNvbnN0YW50LgpjbGFzcyBTZXRDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIEludGVyZmFjZVR5cGUgdHlwZTsKICBmaW5hbCBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gdmFsdWVzOwoKICBTZXRDb25zdGFudEV4cHJlc3Npb24odGhpcy50eXBlLCB0aGlzLnZhbHVlcyk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5TRVQ7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTZXQodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpID0+CiAgICAgIG5ldyBTZXRDb25zdGFudEV4cHJlc3Npb24oCiAgICAgICAgICB0eXBlLCB2YWx1ZXMubWFwKCh2KSA9PiB2LmFwcGx5KGFyZ3VtZW50cykpLnRvTGlzdCgpKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIC8vIFRPRE8oZmlzaHl0aGVmaXNoKTogRGVsZXRlIG9uY2UgdGhlIENGRSBwcm92aWRlcyB0aGVzZSBlcnJvciBtZXNzYWdlcy4KICAgIFNldDxDb25zdGFudFZhbHVlPiBzZXQgPSBuZXcgTGlua2VkSGFzaFNldDxDb25zdGFudFZhbHVlPigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IHZhbHVlc1tpXS5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICAgIGlmICghdmFsdWUuaXNDb25zdGFudCkgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgICAgIGlmICghc2V0LmFkZCh2YWx1ZSkpIHsKICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcih2YWx1ZXNbaV0sIE1lc3NhZ2VLaW5kLkVRVUFMX1NFVF9FTlRSWSwge30pOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVTZXQoCiAgICAgICAgZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMsIHR5cGUsIHNldC50b0xpc3QoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+IHR5cGU7CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ1NldCh0eXBlPSR0eXBlLHZhbHVlcz1bJyk7CiAgICBTdHJpbmcgZGVsaW1pdGVyID0gJyc7CiAgICBmb3IgKENvbnN0YW50RXhwcmVzc2lvbiB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgc2Iud3JpdGUoZGVsaW1pdGVyKTsKICAgICAgdmFsdWUuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgICAgZGVsaW1pdGVyID0gJywnOwogICAgfQogICAgc2Iud3JpdGUoJ10pJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpID0+IEhhc2hpbmcubGlzdEhhc2godmFsdWVzLCBIYXNoaW5nLm9iamVjdEhhc2godHlwZSkpOwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoU2V0Q29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICBpZiAodHlwZSAhPSBvdGhlci50eXBlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAodmFsdWVzLmxlbmd0aCAhPSBvdGhlci52YWx1ZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodmFsdWVzW2ldICE9IG90aGVyLnZhbHVlc1tpXSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ltcGxpY2l0ID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1BvdGVudGlhbCA9PiB2YWx1ZXMuYW55KCh2KSA9PiB2LmlzUG90ZW50aWFsKTsKfQoKLy8vIExpdGVyYWwgbWFwIGNvbnN0YW50LgpjbGFzcyBNYXBDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIEludGVyZmFjZVR5cGUgdHlwZTsKICBmaW5hbCBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4ga2V5czsKICBmaW5hbCBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gdmFsdWVzOwoKICBNYXBDb25zdGFudEV4cHJlc3Npb24odGhpcy50eXBlLCB0aGlzLmtleXMsIHRoaXMudmFsdWVzKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLk1BUDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdE1hcCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ01hcCh0eXBlPSR0eXBlLGVudHJpZXM9WycpOwogICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGtleXMubGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgIGlmIChpbmRleCA+IDApIHsKICAgICAgICBzYi53cml0ZSgnLCcpOwogICAgICB9CiAgICAgIGtleXNbaW5kZXhdLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICAgIHNiLndyaXRlKCctPicpOwogICAgICB2YWx1ZXNbaW5kZXhdLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICB9CiAgICBzYi53cml0ZSgnXSknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICAvLyBUT0RPKHNpZ211bmQpOiBkZWxldGUgb25jZSB0aGUgQ0ZFIHByb3ZpZGVzIHRoZXNlIGVycm9yIG1lc3NhZ2VzLgogICAgcmV0dXJuIGVudmlyb25tZW50LmV2YWx1YXRlTWFwQm9keSgoKSB7CiAgICAgIE1hcDxDb25zdGFudFZhbHVlLCBDb25zdGFudFZhbHVlPiBtYXAgPSA8Q29uc3RhbnRWYWx1ZSwgQ29uc3RhbnRWYWx1ZT57fTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSBrZXkgPSBrZXlzW2ldLmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgICAgICBpZiAoIWtleS5pc0NvbnN0YW50KSB7CiAgICAgICAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICAgICAgICB9CiAgICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IHZhbHVlc1tpXS5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICAgICAgaWYgKCF2YWx1ZS5pc0NvbnN0YW50KSB7CiAgICAgICAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICAgICAgICB9CiAgICAgICAgaWYgKG1hcC5jb250YWluc0tleShrZXkpKSB7CiAgICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcihrZXlzW2ldLCBNZXNzYWdlS2luZC5FUVVBTF9NQVBfRU5UUllfS0VZLCB7fSk7CiAgICAgICAgfQogICAgICAgIG1hcFtrZXldID0gdmFsdWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVNYXAoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMsIHR5cGUsCiAgICAgICAgICBtYXAua2V5cy50b0xpc3QoKSwgbWFwLnZhbHVlcy50b0xpc3QoKSk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBNYXBDb25zdGFudEV4cHJlc3Npb24oCiAgICAgICAgdHlwZSwKICAgICAgICBrZXlzLm1hcCgoaykgPT4gay5hcHBseShhcmd1bWVudHMpKS50b0xpc3QoKSwKICAgICAgICB2YWx1ZXMubWFwKCh2KSA9PiB2LmFwcGx5KGFyZ3VtZW50cykpLnRvTGlzdCgpKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgewogICAgaW50IGhhc2hDb2RlID0gMTMgKiB0eXBlLmhhc2hDb2RlICsgMTcgKiB2YWx1ZXMubGVuZ3RoOwogICAgZm9yIChDb25zdGFudEV4cHJlc3Npb24gdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgIGhhc2hDb2RlIF49IDE5ICogdmFsdWUuaGFzaENvZGU7CiAgICB9CiAgICByZXR1cm4gaGFzaENvZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoTWFwQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICBpZiAodHlwZSAhPSBvdGhlci50eXBlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAodmFsdWVzLmxlbmd0aCAhPSBvdGhlci52YWx1ZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoa2V5c1tpXSAhPSBvdGhlci5rZXlzW2ldKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmICh2YWx1ZXNbaV0gIT0gb3RoZXIudmFsdWVzW2ldKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4gdHlwZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNJbXBsaWNpdCA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3RlbnRpYWwgewogICAgcmV0dXJuIGtleXMuYW55KChlKSA9PiBlLmlzUG90ZW50aWFsKSB8fCB2YWx1ZXMuYW55KChlKSA9PiBlLmlzUG90ZW50aWFsKTsKICB9Cn0KCi8vLyBJbnZvY2F0aW9uIG9mIGEgY29uc3QgY29uc3RydWN0b3IuCmNsYXNzIENvbnN0cnVjdGVkQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBJbnRlcmZhY2VUeXBlIHR5cGU7CiAgZmluYWwgQ29uc3RydWN0b3JFbnRpdHkgdGFyZ2V0OwogIGZpbmFsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZTsKICBmaW5hbCBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gYXJndW1lbnRzOwoKICBDb25zdHJ1Y3RlZENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgdGhpcy50eXBlLCB0aGlzLnRhcmdldCwgdGhpcy5jYWxsU3RydWN0dXJlLCB0aGlzLmFyZ3VtZW50cykgewogICAgYXNzZXJ0KHR5cGUuZWxlbWVudCA9PSB0YXJnZXQuZW5jbG9zaW5nQ2xhc3MpOwogICAgYXNzZXJ0KCFhcmd1bWVudHMuY29udGFpbnMobnVsbCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLkNPTlNUUlVDVEVEOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q29uc3RydWN0ZWQodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdDb25zdHJ1Y3RlZCh0eXBlPSR0eXBlLGNvbnN0cnVjdG9yPSR0YXJnZXQsJwogICAgICAgICdjYWxsU3RydWN0dXJlPSRjYWxsU3RydWN0dXJlLGFyZ3VtZW50cz1bJyk7CiAgICBTdHJpbmcgZGVsaW1pdGVyID0gJyc7CiAgICBmb3IgKENvbnN0YW50RXhwcmVzc2lvbiB2YWx1ZSBpbiBhcmd1bWVudHMpIHsKICAgICAgc2Iud3JpdGUoZGVsaW1pdGVyKTsKICAgICAgdmFsdWUuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgICAgZGVsaW1pdGVyID0gJywnOwogICAgfQogICAgc2Iud3JpdGUoJ10pJyk7CiAgfQoKICBJbnN0YW5jZURhdGEgY29tcHV0ZUluc3RhbmNlRGF0YShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIENvbnN0YW50Q29uc3RydWN0b3IgY29uc3RhbnRDb25zdHJ1Y3RvciA9CiAgICAgICAgZW52aXJvbm1lbnQuZ2V0Q29uc3RydWN0b3JDb25zdGFudCh0YXJnZXQpOwogICAgYXNzZXJ0KGNvbnN0YW50Q29uc3RydWN0b3IgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdCh0YXJnZXQsICJObyBjb25zdGFudCBjb25zdHJ1Y3RvciBjb21wdXRlZCBmb3IgJHRhcmdldC4iKSk7CiAgICByZXR1cm4gY29uc3RhbnRDb25zdHJ1Y3Rvci5jb21wdXRlSW5zdGFuY2VEYXRhKAogICAgICAgIGVudmlyb25tZW50LCBhcmd1bWVudHMsIGNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgSW50ZXJmYWNlVHlwZSBjb21wdXRlSW5zdGFuY2VUeXBlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgcmV0dXJuIGVudmlyb25tZW50CiAgICAgICAgLmdldENvbnN0cnVjdG9yQ29uc3RhbnQodGFyZ2V0KQogICAgICAgIC5jb21wdXRlSW5zdGFuY2VUeXBlKGVudmlyb25tZW50LCB0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0cnVjdGVkQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IENvbnN0cnVjdGVkQ29uc3RhbnRFeHByZXNzaW9uKHR5cGUsIHRhcmdldCwgY2FsbFN0cnVjdHVyZSwKICAgICAgICB0aGlzLmFyZ3VtZW50cy5tYXAoKGEpID0+IGEuYXBwbHkoYXJndW1lbnRzKSkudG9MaXN0KCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIEludGVyZmFjZVR5cGUgaW5zdGFuY2VUeXBlID0gY29tcHV0ZUluc3RhbmNlVHlwZShlbnZpcm9ubWVudCk7CiAgICByZXR1cm4gZW52aXJvbm1lbnQuZXZhbHVhdGVDb25zdHJ1Y3Rvcih0YXJnZXQsIGluc3RhbmNlVHlwZSwgKCkgewogICAgICBJbnN0YW5jZURhdGEgaW5zdGFuY2VEYXRhID0gY29tcHV0ZUluc3RhbmNlRGF0YShlbnZpcm9ubWVudCk7CiAgICAgIGlmIChpbnN0YW5jZURhdGEgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogICAgICB9CiAgICAgIGJvb2wgaXNWYWxpZEFzQ29uc3RhbnQgPSB0cnVlOwogICAgICBNYXA8RmllbGRFbnRpdHksIENvbnN0YW50VmFsdWU+IGZpZWxkVmFsdWVzID0KICAgICAgICAgIDxGaWVsZEVudGl0eSwgQ29uc3RhbnRWYWx1ZT57fTsKICAgICAgaW5zdGFuY2VEYXRhLmZpZWxkTWFwCiAgICAgICAgICAuZm9yRWFjaCgoRmllbGRFbnRpdHkgZmllbGQsIENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCkgewogICAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBjb25zdGFudC5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICB2YWx1ZSAhPSBudWxsLAogICAgICAgICAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgICAgICAgIk5vIHZhbHVlIGNvbXB1dGVkIGZvciAke2NvbnN0YW50LnRvU3RydWN0dXJlZFRleHQoKX0uIikpOwogICAgICAgIGlmICh2YWx1ZS5pc0NvbnN0YW50KSB7CiAgICAgICAgICBmaWVsZFZhbHVlc1tmaWVsZF0gPSB2YWx1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaXNWYWxpZEFzQ29uc3RhbnQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBmb3IgKEFzc2VydENvbnN0YW50RXhwcmVzc2lvbiBhc3NlcnRpb24gaW4gaW5zdGFuY2VEYXRhLmFzc2VydGlvbnMpIHsKICAgICAgICBpZiAoIWFzc2VydGlvbi5ldmFsdWF0ZShlbnZpcm9ubWVudCkuaXNDb25zdGFudCkgewogICAgICAgICAgaXNWYWxpZEFzQ29uc3RhbnQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGlzVmFsaWRBc0NvbnN0YW50KSB7CiAgICAgICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUoaW5zdGFuY2VUeXBlLCBmaWVsZFZhbHVlcyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSB7CiAgICBpbnQgaGFzaENvZGUgPQogICAgICAgIDEzICogdHlwZS5oYXNoQ29kZSArIDE3ICogdGFyZ2V0Lmhhc2hDb2RlICsgMTkgKiBjYWxsU3RydWN0dXJlLmhhc2hDb2RlOwogICAgZm9yIChDb25zdGFudEV4cHJlc3Npb24gdmFsdWUgaW4gYXJndW1lbnRzKSB7CiAgICAgIGhhc2hDb2RlIF49IDIzICogdmFsdWUuaGFzaENvZGU7CiAgICB9CiAgICByZXR1cm4gaGFzaENvZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoQ29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIGlmICh0eXBlICE9IG90aGVyLnR5cGUpIHJldHVybiBmYWxzZTsKICAgIGlmICh0YXJnZXQgIT0gb3RoZXIudGFyZ2V0KSByZXR1cm4gZmFsc2U7CiAgICBpZiAoY2FsbFN0cnVjdHVyZSAhPSBvdGhlci5jYWxsU3RydWN0dXJlKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoYXJndW1lbnRzW2ldICE9IG90aGVyLmFyZ3VtZW50c1tpXSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ltcGxpY2l0ID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1BvdGVudGlhbCB7CiAgICByZXR1cm4gYXJndW1lbnRzLmFueSgoZSkgPT4gZS5pc1BvdGVudGlhbCk7CiAgfQp9CgovLy8gU3RyaW5nIGxpdGVyYWwgd2l0aCBqdXh0YXBvc2l0aW9uIGFuZC9vciBpbnRlcnBvbGF0aW9ucy4KY2xhc3MgQ29uY2F0ZW5hdGVDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBleHByZXNzaW9uczsKCiAgQ29uY2F0ZW5hdGVDb25zdGFudEV4cHJlc3Npb24odGhpcy5leHByZXNzaW9ucyk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5DT05DQVRFTkFURTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdENvbmNhdGVuYXRlKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnQ29uY2F0ZW5hdGUoZXhwcmVzc2lvbnM9WycpOwogICAgU3RyaW5nIGRlbGltaXRlciA9ICcnOwogICAgZm9yIChDb25zdGFudEV4cHJlc3Npb24gdmFsdWUgaW4gZXhwcmVzc2lvbnMpIHsKICAgICAgc2Iud3JpdGUoZGVsaW1pdGVyKTsKICAgICAgdmFsdWUuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgICAgZGVsaW1pdGVyID0gJywnOwogICAgfQogICAgc2Iud3JpdGUoJ10pJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgQ29uY2F0ZW5hdGVDb25zdGFudEV4cHJlc3Npb24oCiAgICAgICAgZXhwcmVzc2lvbnMubWFwKChhKSA9PiBhLmFwcGx5KGFyZ3VtZW50cykpLnRvTGlzdCgpKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBib29sIGlzVmFsaWQgPSB0cnVlOwogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgZm9yIChDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBleHByZXNzaW9ucykgewogICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gZXhwcmVzc2lvbi5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICAgIGlmICghdmFsdWUuaXNDb25zdGFudCkgewogICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICAvLyBVc2UgYGNvbnRpbnVlYCBpbnN0ZWFkIG9mIGByZXR1cm5gIGhlcmUgdG8gcmVwb3J0IGFsbCBlcnJvcnMgaW4gdGhlCiAgICAgICAgLy8gZXhwcmVzc2lvbiBhbmQgbm90IGp1c3QgdGhlIGZpcnN0LgogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmICh2YWx1ZS5pc1ByaW1pdGl2ZSkgewogICAgICAgIGlmICh2YWx1ZSBpcyBTdHJpbmdDb25zdGFudFZhbHVlKSB7CiAgICAgICAgICBzYi53cml0ZSh2YWx1ZS5zdHJpbmdWYWx1ZSk7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBJbnRDb25zdGFudFZhbHVlKSB7CiAgICAgICAgICBzYi53cml0ZSh2YWx1ZS5pbnRWYWx1ZSk7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBEb3VibGVDb25zdGFudFZhbHVlKSB7CiAgICAgICAgICBzYi53cml0ZSh2YWx1ZS5kb3VibGVWYWx1ZSk7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBCb29sQ29uc3RhbnRWYWx1ZSkgewogICAgICAgICAgc2Iud3JpdGUodmFsdWUuYm9vbFZhbHVlKTsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIE51bGxDb25zdGFudFZhbHVlKSB7CiAgICAgICAgICBzYi53cml0ZShudWxsKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoCiAgICAgICAgICAgIGV4cHJlc3Npb24sIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfSU5URVJQT0xBVElPTl9UWVBFLCB7CiAgICAgICAgICAnY29uc3RhbnQnOiBleHByZXNzaW9uLAogICAgICAgICAgJ3R5cGUnOiB2YWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKQogICAgICAgIH0pOwogICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICAvLyBVc2UgYGNvbnRpbnVlYCBpbnN0ZWFkIG9mIGByZXR1cm5gIGhlcmUgdG8gcmVwb3J0IGFsbCBlcnJvcnMgaW4gdGhlCiAgICAgICAgLy8gZXhwcmVzc2lvbiBhbmQgbm90IGp1c3QgdGhlIGZpcnN0LgogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICB9CiAgICBpZiAoaXNWYWxpZCkgewogICAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVN0cmluZyhzYi50b1N0cmluZygpKTsKICAgIH0KICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSB7CiAgICBpbnQgaGFzaENvZGUgPSAxNyAqIGV4cHJlc3Npb25zLmxlbmd0aDsKICAgIGZvciAoQ29uc3RhbnRFeHByZXNzaW9uIHZhbHVlIGluIGV4cHJlc3Npb25zKSB7CiAgICAgIGhhc2hDb2RlIF49IDE5ICogdmFsdWUuaGFzaENvZGU7CiAgICB9CiAgICByZXR1cm4gaGFzaENvZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoQ29uY2F0ZW5hdGVDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIGlmIChleHByZXNzaW9ucy5sZW5ndGggIT0gb3RoZXIuZXhwcmVzc2lvbnMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cHJlc3Npb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChleHByZXNzaW9uc1tpXSAhPSBvdGhlci5leHByZXNzaW9uc1tpXSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4KICAgICAgY29tbW9uRWxlbWVudHMuc3RyaW5nVHlwZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3RlbnRpYWwgewogICAgcmV0dXJuIGV4cHJlc3Npb25zLmFueSgoZSkgPT4gZS5pc1BvdGVudGlhbCk7CiAgfQp9CgovLy8gU3ltYm9sIGxpdGVyYWwuCmNsYXNzIFN5bWJvbENvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIFN5bWJvbENvbnN0YW50RXhwcmVzc2lvbih0aGlzLm5hbWUpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuU1lNQk9MOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0U3ltYm9sKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnU3ltYm9sKG5hbWU9JG5hbWUpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpID0+IDEzICogbmFtZS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKFN5bWJvbENvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIG5hbWUgPT0gb3RoZXIubmFtZTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVN5bWJvbChlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cywgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4KICAgICAgY29tbW9uRWxlbWVudHMuc3ltYm9sVHlwZTsKfQoKLy8vIFR5cGUgbGl0ZXJhbC4KY2xhc3MgVHlwZUNvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgLy8vIEVpdGhlciBbRHluYW1pY1R5cGVdIG9yIGEgcmF3IFtHZW5lcmljVHlwZV0uCiAgZmluYWwgRGFydFR5cGUgdHlwZTsKICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgVHlwZUNvbnN0YW50RXhwcmVzc2lvbih0aGlzLnR5cGUsIHRoaXMubmFtZSkgewogICAgYXNzZXJ0KHR5cGUuaXNJbnRlcmZhY2VUeXBlIHx8IHR5cGUuaXNUeXBlZGVmIHx8IHR5cGUuaXNEeW5hbWljLAogICAgICAgICJVbmV4cGVjdGVkIHR5cGUgY29uc3RhbnQgdHlwZTogJHR5cGUiKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5UWVBFOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0VHlwZSh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ1R5cGUodHlwZT0kdHlwZSknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMsIHR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSA9PiAxMyAqIHR5cGUuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhUeXBlQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gdHlwZSA9PSBvdGhlci50eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+CiAgICAgIGNvbW1vbkVsZW1lbnRzLnR5cGVUeXBlOwp9CgovLy8gQ2FzdCBleHByZXNzaW9uczogdGhlc2UgbWF5IGJlIGZyb20gZWl0aGVyIGV4cGxpY2l0IG9yIGltcGxpY2l0IGBhc2AKLy8vIGNoZWNrcy4KY2xhc3MgQXNDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uOwogIGZpbmFsIERhcnRUeXBlIHR5cGU7CgogIEFzQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMuZXhwcmVzc2lvbiwgdGhpcy50eXBlKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLkFTOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0QXModGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdBcyh2YWx1ZT0nKTsKICAgIGV4cHJlc3Npb24uX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIHNiLndyaXRlKCcsdHlwZT0kdHlwZSknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICAvLyBSdW5uaW5nIGV4YW1wbGUgZm9yIGNvbW1lbnRzOgogICAgLy8KICAgIC8vICAgICBjbGFzcyBBPFQ+IHsKICAgIC8vICAgICAgIGZpbmFsIFQgdDsKICAgIC8vICAgICAgIGNvbnN0IEEoZHluYW1pYyB0KSA6IHRoaXMudCA9IHQ7IC8vIGltcGxpY2l0bHkgYHQgYXMgQS5UYAogICAgLy8gICAgIH0KICAgIC8vICAgICBjbGFzcyBCPFM+IGV4dGVuZHMgQTxTPiB7CiAgICAvLyAgICAgICBjb25zdCBCKGR5bmFtaWMgcykgOiBzdXBlcihzKTsKICAgIC8vICAgICB9CiAgICAvLyAgICAgbWFpbigpID0+IGNvbnN0IEI8bnVtPigwKTsKICAgIC8vCiAgICAvLyBXZSB2aXNpdCBgdCBhcyBBLlRgIHdoaWxlIGV2YWx1YXRpbmcgYGNvbnN0IEI8bnVtPigwKWAuCgogICAgLy8gVGhlIGV4cHJlc3Npb24gdmFsdWUgaXMgYDBgLgogICAgQ29uc3RhbnRWYWx1ZSBleHByZXNzaW9uVmFsdWUgPSBleHByZXNzaW9uLmV2YWx1YXRlKGVudmlyb25tZW50KTsKCiAgICBpZiAoIWVudmlyb25tZW50LmNoZWNrQ2FzdHMpIHJldHVybiBleHByZXNzaW9uVmFsdWU7CgogICAgLy8gVGhlIGV4cHJlc3Npb24gdHlwZSBpcyBgaW50YC4KICAgIERhcnRUeXBlIGV4cHJlc3Npb25UeXBlID0KICAgICAgICBleHByZXNzaW9uVmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cyk7CgogICAgLy8gVGhlIGBhc2AgdHlwZSBgQS5UYCBpbiB0aGUgY29udGV4dCBvZiBgQjxudW0+YCBpcyBgbnVtYC4KICAgIERhcnRUeXBlIHR5cGVJbkNvbnRleHQgPSBlbnZpcm9ubWVudC5nZXRUeXBlSW5Db250ZXh0KHR5cGUpOwoKICAgIC8vIENoZWNrIHRoYXQgdGhlIGV4cHJlc3Npb24gdHlwZSwgYGludGAsIGlzIGEgc3VidHlwZSBvZiB0aGUgdHlwZSBpbgogICAgLy8gY29udGV4dCwgYG51bWAuCiAgICBpZiAoIWNvbnN0YW50X3N5c3RlbS5pc1N1YnR5cGUoCiAgICAgICAgZW52aXJvbm1lbnQudHlwZXMsIGV4cHJlc3Npb25UeXBlLCB0eXBlSW5Db250ZXh0KSkgewogICAgICAvLyBUT0RPKHNpZ211bmQpOiBjb25zaWRlciByZXBvcnRpbmcgZGlmZmVyZW50IG1lc3NhZ2VzIGFuZCBlcnJvcgogICAgICAvLyBsb2NhdGlvbnMgZm9yIGltcGxpY2l0IHZzIGV4cGxpY2l0IGNhc3RzLgogICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcihleHByZXNzaW9uLCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NBU1QsCiAgICAgICAgICB7J2NvbnN0YW50JzogZXhwcmVzc2lvbiwgJ3R5cGUnOiBleHByZXNzaW9uVHlwZSwgJ2Nhc3RUeXBlJzogdHlwZX0pOwogICAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICAgIH0KICAgIHJldHVybiBleHByZXNzaW9uVmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgQXNDb25zdGFudEV4cHJlc3Npb24oZXhwcmVzc2lvbi5hcHBseShhcmd1bWVudHMpLCB0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgPT4gMTMgKiB0eXBlLmhhc2hDb2RlICsgMTcgKiBleHByZXNzaW9uLmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoQXNDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBleHByZXNzaW9uID09IG90aGVyLmV4cHJlc3Npb24gJiYgdHlwZSA9PSBvdGhlci50eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+CiAgICAgIGV4cHJlc3Npb24uZ2V0S25vd25UeXBlKGNvbW1vbkVsZW1lbnRzKTsKfQoKLy8vIFJlZmVyZW5jZSB0byBhIGNvbnN0YW50IHRvcC1sZXZlbCBvciBzdGF0aWMgZmllbGQuCmNsYXNzIEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBGaWVsZEVudGl0eSBlbGVtZW50OwoKICBGaWVsZENvbnN0YW50RXhwcmVzc2lvbih0aGlzLmVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuRklFTEQ7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRGaWVsZCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ0ZpZWxkKGVsZW1lbnQ9JGVsZW1lbnQpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgcmV0dXJuIGVudmlyb25tZW50LmV2YWx1YXRlRmllbGQoZWxlbWVudCwgKCkgewogICAgICBDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQgPSBlbnZpcm9ubWVudC5nZXRGaWVsZENvbnN0YW50KGVsZW1lbnQpOwogICAgICByZXR1cm4gY29uc3RhbnQuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpID0+IDEzICogZWxlbWVudC5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gZWxlbWVudCA9PSBvdGhlci5lbGVtZW50OwogIH0KfQoKLy8vIFJlZmVyZW5jZSB0byBhIGNvbnN0YW50IGxvY2FsIHZhcmlhYmxlLgpjbGFzcyBMb2NhbFZhcmlhYmxlQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBMb2NhbCBlbGVtZW50OwoKICBMb2NhbFZhcmlhYmxlQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMuZWxlbWVudCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5MT0NBTF9WQVJJQUJMRTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdExvY2FsVmFyaWFibGUodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdMb2NhbFZhcmlhYmxlKGVsZW1lbnQ9JGVsZW1lbnQpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50ID0gZW52aXJvbm1lbnQuZ2V0TG9jYWxDb25zdGFudChlbGVtZW50KTsKICAgIHJldHVybiBjb25zdGFudC5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpID0+IDEzICogZWxlbWVudC5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKExvY2FsVmFyaWFibGVDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBlbGVtZW50ID09IG90aGVyLmVsZW1lbnQ7CiAgfQp9CgovLy8gUmVmZXJlbmNlIHRvIGEgdG9wLWxldmVsIG9yIHN0YXRpYyBmdW5jdGlvbi4KY2xhc3MgRnVuY3Rpb25Db25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQ7CiAgZmluYWwgRnVuY3Rpb25UeXBlIHR5cGU7CgogIEZ1bmN0aW9uQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMuZWxlbWVudCwgdGhpcy50eXBlKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLkZVTkNUSU9OOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0RnVuY3Rpb24odGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdGdW5jdGlvbihlbGVtZW50PSRlbGVtZW50KScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBuZXcgRnVuY3Rpb25Db25zdGFudFZhbHVlKGVsZW1lbnQsIHR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSA9PiAxMyAqIGVsZW1lbnQuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhGdW5jdGlvbkNvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIGVsZW1lbnQgPT0gb3RoZXIuZWxlbWVudDsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PgogICAgICBjb21tb25FbGVtZW50cy5mdW5jdGlvblR5cGU7Cn0KCi8vLyBBIGNvbnN0YW50IGJpbmFyeSBleHByZXNzaW9uIGxpa2UgYGEgKiBiYC4KY2xhc3MgQmluYXJ5Q29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBDb25zdGFudEV4cHJlc3Npb24gbGVmdDsKICBmaW5hbCBCaW5hcnlPcGVyYXRvciBvcGVyYXRvcjsKICBmaW5hbCBDb25zdGFudEV4cHJlc3Npb24gcmlnaHQ7CgogIEJpbmFyeUNvbnN0YW50RXhwcmVzc2lvbih0aGlzLmxlZnQsIHRoaXMub3BlcmF0b3IsIHRoaXMucmlnaHQpIHsKICAgIGFzc2VydChQUkVDRURFTkNFX01BUFtvcGVyYXRvci5raW5kXSAhPSBudWxsLAogICAgICAgICJNaXNzaW5nIHByZWNlbmRlbmNlIGZvciBiaW5hcnkgb3BlcmF0b3I6ICckb3BlcmF0b3InLiIpOwogIH0KCiAgc3RhdGljIGJvb2wgcG90ZW50aWFsT3BlcmF0b3IoQmluYXJ5T3BlcmF0b3Igb3BlcmF0b3IpID0+CiAgICAgIFBSRUNFREVOQ0VfTUFQW29wZXJhdG9yLmtpbmRdICE9IG51bGw7CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5CSU5BUlk7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRCaW5hcnkodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdCaW5hcnkobGVmdD0nKTsKICAgIGxlZnQuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIHNiLndyaXRlKCcsb3A9JG9wZXJhdG9yLHJpZ2h0PScpOwogICAgcmlnaHQuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgQ29uc3RhbnRWYWx1ZSBsZWZ0VmFsdWUgPSBsZWZ0LmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIGlmICghbGVmdFZhbHVlLmlzQ29uc3RhbnQpIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogICAgQ29uc3RhbnRWYWx1ZSByaWdodFZhbHVlOwogICAgLy8gU2hvcnQtY2lyY3VpdCAmJiBhbmQgfHwgb3BlcmF0b3JzLgogICAgc3dpdGNoIChvcGVyYXRvci5raW5kKSB7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxPR0lDQUxfQU5EOgogICAgICAgIGlmIChsZWZ0VmFsdWUuaXNCb29sICYmIGxlZnRWYWx1ZS5pc0ZhbHNlKSB7CiAgICAgICAgICByaWdodFZhbHVlID0gbmV3IEZhbHNlQ29uc3RhbnRWYWx1ZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByaWdodFZhbHVlID0gcmlnaHQuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgICAgIH0KICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxPR0lDQUxfT1I6CiAgICAgICAgaWYgKGxlZnRWYWx1ZS5pc0Jvb2wgJiYgbGVmdFZhbHVlLmlzVHJ1ZSkgewogICAgICAgICAgcmlnaHRWYWx1ZSA9IG5ldyBUcnVlQ29uc3RhbnRWYWx1ZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByaWdodFZhbHVlID0gcmlnaHQuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICByaWdodFZhbHVlID0gcmlnaHQuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgfQoKICAgIGlmICghcmlnaHRWYWx1ZS5pc0NvbnN0YW50KSByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7CiAgICBzd2l0Y2ggKG9wZXJhdG9yLmtpbmQpIHsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuRVE6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLk5PVF9FUToKICAgICAgICBpZiAoIWxlZnRWYWx1ZS5pc1ByaW1pdGl2ZSkgewogICAgICAgICAgaWYgKCFyaWdodFZhbHVlLmlzTnVsbCkgewogICAgICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcigKICAgICAgICAgICAgICAgIGxlZnQsIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQklOQVJZX1BSSU1JVElWRV9UWVBFLCB7CiAgICAgICAgICAgICAgJ2NvbnN0YW50JzogbGVmdCwKICAgICAgICAgICAgICAndHlwZSc6IGxlZnRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKSwKICAgICAgICAgICAgICAnb3BlcmF0b3InOiBvcGVyYXRvcgogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIXJpZ2h0VmFsdWUuaXNQcmltaXRpdmUpIHsKICAgICAgICAgIGlmICghbGVmdFZhbHVlLmlzTnVsbCkgewogICAgICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcigKICAgICAgICAgICAgICAgIHJpZ2h0LCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9QUklNSVRJVkVfVFlQRSwgewogICAgICAgICAgICAgICdjb25zdGFudCc6IHJpZ2h0LAogICAgICAgICAgICAgICd0eXBlJzogcmlnaHRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKSwKICAgICAgICAgICAgICAnb3BlcmF0b3InOiBvcGVyYXRvcgogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuQUREOgogICAgICAgIGlmIChsZWZ0VmFsdWUuaXNTdHJpbmcpIHsKICAgICAgICAgIGlmICghcmlnaHRWYWx1ZS5pc1N0cmluZykgewogICAgICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcigKICAgICAgICAgICAgICAgIHJpZ2h0LCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX1NUUklOR19BRERfVFlQRSwgewogICAgICAgICAgICAgICdjb25zdGFudCc6IHJpZ2h0LAogICAgICAgICAgICAgICd0eXBlJzogcmlnaHRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAobGVmdFZhbHVlLmlzTnVtKSB7CiAgICAgICAgICBpZiAoIXJpZ2h0VmFsdWUuaXNOdW0pIHsKICAgICAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgICByaWdodCwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9OVU1fQUREX1RZUEUsIHsKICAgICAgICAgICAgICAnY29uc3RhbnQnOiByaWdodCwKICAgICAgICAgICAgICAndHlwZSc6IHJpZ2h0VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cykKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHJpZ2h0VmFsdWUuaXNTdHJpbmcpIHsKICAgICAgICAgIGlmICghbGVmdFZhbHVlLmlzU3RyaW5nKSB7CiAgICAgICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKAogICAgICAgICAgICAgICAgbGVmdCwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9TVFJJTkdfQUREX1RZUEUsIHsKICAgICAgICAgICAgICAnY29uc3RhbnQnOiBsZWZ0LAogICAgICAgICAgICAgICd0eXBlJzogbGVmdFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChyaWdodFZhbHVlLmlzTnVtKSB7CiAgICAgICAgICBpZiAoIWxlZnRWYWx1ZS5pc051bSkgewogICAgICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcigKICAgICAgICAgICAgICAgIGxlZnQsIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfTlVNX0FERF9UWVBFLCB7CiAgICAgICAgICAgICAgJ2NvbnN0YW50JzogbGVmdCwKICAgICAgICAgICAgICAndHlwZSc6IGxlZnRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBlbnZpcm9ubWVudAogICAgICAgICAgICAgIC5yZXBvcnRFcnJvcih0aGlzLCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0FERF9UWVBFUywgewogICAgICAgICAgICAnbGVmdENvbnN0YW50JzogbGVmdCwKICAgICAgICAgICAgJ2xlZnRUeXBlJzogbGVmdFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpLAogICAgICAgICAgICAncmlnaHRDb25zdGFudCc6IHJpZ2h0LAogICAgICAgICAgICAncmlnaHRUeXBlJzogcmlnaHRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKQogICAgICAgICAgfSk7CiAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5TVUI6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLk1VTDoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuRElWOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5JRElWOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5NT0Q6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkdURVE6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkdUOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MVEVROgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MVDoKICAgICAgICBpZiAoIWxlZnRWYWx1ZS5pc051bSkgewogICAgICAgICAgZW52aXJvbm1lbnQKICAgICAgICAgICAgICAucmVwb3J0RXJyb3IobGVmdCwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfTlVNX1RZUEUsIHsKICAgICAgICAgICAgJ2NvbnN0YW50JzogbGVmdCwKICAgICAgICAgICAgJ3R5cGUnOiBsZWZ0VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cyksCiAgICAgICAgICAgICdvcGVyYXRvcic6IG9wZXJhdG9yCiAgICAgICAgICB9KTsKICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFyaWdodFZhbHVlLmlzTnVtKSB7CiAgICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcigKICAgICAgICAgICAgICByaWdodCwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfTlVNX1RZUEUsIHsKICAgICAgICAgICAgJ2NvbnN0YW50JzogcmlnaHQsCiAgICAgICAgICAgICd0eXBlJzogcmlnaHRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKSwKICAgICAgICAgICAgJ29wZXJhdG9yJzogb3BlcmF0b3IKICAgICAgICAgIH0pOwogICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoaXNWYWxpZCAmJgogICAgICAgICAgICAob3BlcmF0b3Iua2luZCA9PSBCaW5hcnlPcGVyYXRvcktpbmQuSURJViB8fAogICAgICAgICAgICAgICAgb3BlcmF0b3Iua2luZCA9PSBCaW5hcnlPcGVyYXRvcktpbmQuTU9EKSkgewogICAgICAgICAgaWYgKHJpZ2h0VmFsdWUuaXNaZXJvKSB7CiAgICAgICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKHJpZ2h0LCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0RJViwKICAgICAgICAgICAgICAgIHsnbGVmdCc6IGxlZnQsICdyaWdodCc6IHJpZ2h0LCAnb3BlcmF0b3InOiBvcGVyYXRvcn0pOwogICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5TSEw6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlNIUjoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuU0hSVToKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuQU5EOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5PUjoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuWE9SOgogICAgICAgIGlmICghbGVmdFZhbHVlLmlzSW50KSB7CiAgICAgICAgICBlbnZpcm9ubWVudAogICAgICAgICAgICAgIC5yZXBvcnRFcnJvcihsZWZ0LCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9JTlRfVFlQRSwgewogICAgICAgICAgICAnY29uc3RhbnQnOiBsZWZ0LAogICAgICAgICAgICAndHlwZSc6IGxlZnRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKSwKICAgICAgICAgICAgJ29wZXJhdG9yJzogb3BlcmF0b3IKICAgICAgICAgIH0pOwogICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoIXJpZ2h0VmFsdWUuaXNJbnQpIHsKICAgICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKAogICAgICAgICAgICAgIHJpZ2h0LCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9JTlRfVFlQRSwgewogICAgICAgICAgICAnY29uc3RhbnQnOiByaWdodCwKICAgICAgICAgICAgJ3R5cGUnOiByaWdodFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpLAogICAgICAgICAgICAnb3BlcmF0b3InOiBvcGVyYXRvcgogICAgICAgICAgfSk7CiAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChpc1ZhbGlkICYmCiAgICAgICAgICAgIChvcGVyYXRvci5raW5kID09IEJpbmFyeU9wZXJhdG9yS2luZC5TSEwgfHwKICAgICAgICAgICAgICAgIG9wZXJhdG9yLmtpbmQgPT0gQmluYXJ5T3BlcmF0b3JLaW5kLlNIUiB8fAogICAgICAgICAgICAgICAgb3BlcmF0b3Iua2luZCA9PSBCaW5hcnlPcGVyYXRvcktpbmQuU0hSVSkpIHsKICAgICAgICAgIEludENvbnN0YW50VmFsdWUgc2hpZnQgPSByaWdodFZhbHVlOwogICAgICAgICAgaWYgKHNoaWZ0LmludFZhbHVlIDwgQmlnSW50Lnplcm8pIHsKICAgICAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IocmlnaHQsIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfU0hJRlQsCiAgICAgICAgICAgICAgICB7J2xlZnQnOiBsZWZ0LCAncmlnaHQnOiByaWdodCwgJ29wZXJhdG9yJzogb3BlcmF0b3J9KTsKICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTE9HSUNBTF9BTkQ6CiAgICAgICAgaWYgKCFsZWZ0VmFsdWUuaXNCb29sKSB7CiAgICAgICAgICBlbnZpcm9ubWVudAogICAgICAgICAgICAgIC5yZXBvcnRFcnJvcihsZWZ0LCBNZXNzYWdlS2luZC5JTlZBTElEX0xPR0lDQUxfQU5EX09QRVJBTkRfVFlQRSwgewogICAgICAgICAgICAnY29uc3RhbnQnOiBsZWZ0LAogICAgICAgICAgICAndHlwZSc6IGxlZnRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKSwKICAgICAgICAgICAgJ29wZXJhdG9yJzogb3BlcmF0b3IKICAgICAgICAgIH0pOwogICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoIXJpZ2h0VmFsdWUuaXNCb29sKSB7CiAgICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcigKICAgICAgICAgICAgICByaWdodCwgTWVzc2FnZUtpbmQuSU5WQUxJRF9MT0dJQ0FMX0FORF9PUEVSQU5EX1RZUEUsIHsKICAgICAgICAgICAgJ2NvbnN0YW50JzogcmlnaHQsCiAgICAgICAgICAgICd0eXBlJzogcmlnaHRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKSwKICAgICAgICAgICAgJ29wZXJhdG9yJzogb3BlcmF0b3IKICAgICAgICAgIH0pOwogICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTE9HSUNBTF9PUjoKICAgICAgICBpZiAoIWxlZnRWYWx1ZS5pc0Jvb2wpIHsKICAgICAgICAgIGVudmlyb25tZW50CiAgICAgICAgICAgICAgLnJlcG9ydEVycm9yKGxlZnQsIE1lc3NhZ2VLaW5kLklOVkFMSURfTE9HSUNBTF9PUl9PUEVSQU5EX1RZUEUsIHsKICAgICAgICAgICAgJ2NvbnN0YW50JzogbGVmdCwKICAgICAgICAgICAgJ3R5cGUnOiBsZWZ0VmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cyksCiAgICAgICAgICAgICdvcGVyYXRvcic6IG9wZXJhdG9yCiAgICAgICAgICB9KTsKICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFyaWdodFZhbHVlLmlzQm9vbCkgewogICAgICAgICAgZW52aXJvbm1lbnQKICAgICAgICAgICAgICAucmVwb3J0RXJyb3IocmlnaHQsIE1lc3NhZ2VLaW5kLklOVkFMSURfTE9HSUNBTF9PUl9PUEVSQU5EX1RZUEUsIHsKICAgICAgICAgICAgJ2NvbnN0YW50JzogcmlnaHQsCiAgICAgICAgICAgICd0eXBlJzogcmlnaHRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKSwKICAgICAgICAgICAgJ29wZXJhdG9yJzogb3BlcmF0b3IKICAgICAgICAgIH0pOwogICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuSU5ERVg6CiAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IodGhpcywgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9JTkRFWCwge30pOwogICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuSUZfTlVMTDoKICAgICAgICAvLyBWYWxpZCBzaW5jZSBbbGVmdFZhbHVlXSBhbmQgW3JpZ2h0VmFsdWVdIGFyZSBjb25zdGFudHMuCiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoaXNWYWxpZCkgewogICAgICBzd2l0Y2ggKG9wZXJhdG9yLmtpbmQpIHsKICAgICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5OT1RfRVE6CiAgICAgICAgICBCb29sQ29uc3RhbnRWYWx1ZSBlcXVhbHMgPQogICAgICAgICAgICAgIGNvbnN0YW50X3N5c3RlbS5lcXVhbC5mb2xkKGxlZnRWYWx1ZSwgcmlnaHRWYWx1ZSk7CiAgICAgICAgICByZXR1cm4gZXF1YWxzLm5lZ2F0ZSgpOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gY29uc3RhbnRfc3lzdGVtCiAgICAgICAgICAgICAgLmxvb2t1cEJpbmFyeShvcGVyYXRvcikKICAgICAgICAgICAgICAuZm9sZChsZWZ0VmFsdWUsIHJpZ2h0VmFsdWUpOwogICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICAgICAgfQogICAgICAgICAgZW52aXJvbm1lbnQKICAgICAgICAgICAgICAucmVwb3J0RXJyb3IodGhpcywgTWVzc2FnZUtpbmQuTk9UX0FfQ09NUElMRV9USU1FX0NPTlNUQU5ULCB7fSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEJpbmFyeUNvbnN0YW50RXhwcmVzc2lvbigKICAgICAgICBsZWZ0LmFwcGx5KGFyZ3VtZW50cyksIG9wZXJhdG9yLCByaWdodC5hcHBseShhcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIC8vIGlnbm9yZTogTUlTU0lOR19SRVRVUk4KICBJbnRlcmZhY2VUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgewogICAgRGFydFR5cGUga25vd25MZWZ0VHlwZSA9IGxlZnQuZ2V0S25vd25UeXBlKGNvbW1vbkVsZW1lbnRzKTsKICAgIERhcnRUeXBlIGtub3duUmlnaHRUeXBlID0gcmlnaHQuZ2V0S25vd25UeXBlKGNvbW1vbkVsZW1lbnRzKTsKICAgIHN3aXRjaCAob3BlcmF0b3Iua2luZCkgewogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5FUToKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTk9UX0VROgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MT0dJQ0FMX0FORDoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTE9HSUNBTF9PUjoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuR1Q6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxUOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5HVEVROgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MVEVROgogICAgICAgIHJldHVybiBjb21tb25FbGVtZW50cy5ib29sVHlwZTsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuQUREOgogICAgICAgIGlmIChrbm93bkxlZnRUeXBlID09IGNvbW1vbkVsZW1lbnRzLnN0cmluZ1R5cGUpIHsKICAgICAgICAgIGFzc2VydChrbm93blJpZ2h0VHlwZSA9PSBjb21tb25FbGVtZW50cy5zdHJpbmdUeXBlKTsKICAgICAgICAgIHJldHVybiBjb21tb25FbGVtZW50cy5zdHJpbmdUeXBlOwogICAgICAgIH0gZWxzZSBpZiAoa25vd25MZWZ0VHlwZSA9PSBjb21tb25FbGVtZW50cy5pbnRUeXBlICYmCiAgICAgICAgICAgIGtub3duUmlnaHRUeXBlID09IGNvbW1vbkVsZW1lbnRzLmludFR5cGUpIHsKICAgICAgICAgIHJldHVybiBjb21tb25FbGVtZW50cy5pbnRUeXBlOwogICAgICAgIH0KICAgICAgICBhc3NlcnQoa25vd25MZWZ0VHlwZSA9PSBjb21tb25FbGVtZW50cy5kb3VibGVUeXBlIHx8CiAgICAgICAgICAgIGtub3duUmlnaHRUeXBlID09IGNvbW1vbkVsZW1lbnRzLmRvdWJsZVR5cGUpOwogICAgICAgIHJldHVybiBjb21tb25FbGVtZW50cy5kb3VibGVUeXBlOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5TVUI6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLk1VTDoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuTU9EOgogICAgICAgIGlmIChrbm93bkxlZnRUeXBlID09IGNvbW1vbkVsZW1lbnRzLmludFR5cGUgJiYKICAgICAgICAgICAga25vd25SaWdodFR5cGUgPT0gY29tbW9uRWxlbWVudHMuaW50VHlwZSkgewogICAgICAgICAgcmV0dXJuIGNvbW1vbkVsZW1lbnRzLmludFR5cGU7CiAgICAgICAgfQogICAgICAgIGFzc2VydChrbm93bkxlZnRUeXBlID09IGNvbW1vbkVsZW1lbnRzLmRvdWJsZVR5cGUgfHwKICAgICAgICAgICAga25vd25SaWdodFR5cGUgPT0gY29tbW9uRWxlbWVudHMuZG91YmxlVHlwZSk7CiAgICAgICAgcmV0dXJuIGNvbW1vbkVsZW1lbnRzLmRvdWJsZVR5cGU7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkRJVjoKICAgICAgICByZXR1cm4gY29tbW9uRWxlbWVudHMuZG91YmxlVHlwZTsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuSURJVjoKICAgICAgICByZXR1cm4gY29tbW9uRWxlbWVudHMuaW50VHlwZTsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuQU5EOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5PUjoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuWE9SOgogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5TSEw6CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlNIUjoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuU0hSVToKICAgICAgICByZXR1cm4gY29tbW9uRWxlbWVudHMuaW50VHlwZTsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuSUZfTlVMTDoKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuSU5ERVg6CiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAgICdVbmV4cGVjdGVkIGNvbnN0YW50IGJpbmFyeSBvcGVyYXRvcjogJG9wZXJhdG9yJyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IHByZWNlZGVuY2UgPT4gUFJFQ0VERU5DRV9NQVBbb3BlcmF0b3Iua2luZF07CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgewogICAgcmV0dXJuIDEzICogb3BlcmF0b3IuaGFzaENvZGUgKyAxNyAqIGxlZnQuaGFzaENvZGUgKyAxOSAqIHJpZ2h0Lmhhc2hDb2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKEJpbmFyeUNvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIG9wZXJhdG9yID09IG90aGVyLm9wZXJhdG9yICYmCiAgICAgICAgbGVmdCA9PSBvdGhlci5sZWZ0ICYmCiAgICAgICAgcmlnaHQgPT0gb3RoZXIucmlnaHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1BvdGVudGlhbCB7CiAgICByZXR1cm4gbGVmdC5pc1BvdGVudGlhbCB8fCByaWdodC5pc1BvdGVudGlhbDsKICB9CgogIHN0YXRpYyBjb25zdCBNYXA8QmluYXJ5T3BlcmF0b3JLaW5kLCBpbnQ+IFBSRUNFREVOQ0VfTUFQID0gY29uc3QgewogICAgQmluYXJ5T3BlcmF0b3JLaW5kLkVROiA2LAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLk5PVF9FUTogNiwKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5MT0dJQ0FMX0FORDogNSwKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5MT0dJQ0FMX09SOiA0LAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLlhPUjogOSwKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5BTkQ6IDEwLAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLk9SOiA4LAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLlNITDogMTEsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuU0hSOiAxMSwKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5TSFJVOiAxMSwKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5BREQ6IDEyLAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLlNVQjogMTIsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuTVVMOiAxMywKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5ESVY6IDEzLAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLklESVY6IDEzLAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLkdUOiA3LAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLkxUOiA3LAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLkdURVE6IDcsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuTFRFUTogNywKICAgIEJpbmFyeU9wZXJhdG9yS2luZC5NT0Q6IDEzLAogICAgQmluYXJ5T3BlcmF0b3JLaW5kLklGX05VTEw6IDMsCiAgICBCaW5hcnlPcGVyYXRvcktpbmQuSU5ERVg6IDMsCiAgfTsKfQoKLy8vIEEgY29uc3RhbnQgaWRlbnRpY2FsIGludm9jYXRpb24gbGlrZSBgaWRlbnRpY2FsKGEsIGIpYC4KY2xhc3MgSWRlbnRpY2FsQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBDb25zdGFudEV4cHJlc3Npb24gbGVmdDsKICBmaW5hbCBDb25zdGFudEV4cHJlc3Npb24gcmlnaHQ7CgogIElkZW50aWNhbENvbnN0YW50RXhwcmVzc2lvbih0aGlzLmxlZnQsIHRoaXMucmlnaHQpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuSURFTlRJQ0FMOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0SWRlbnRpY2FsKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnSWRlbnRpY2FsKGxlZnQ9Jyk7CiAgICBsZWZ0Ll9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICBzYi53cml0ZSgnLHJpZ2h0PScpOwogICAgcmlnaHQuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgQ29uc3RhbnRWYWx1ZSBsZWZ0VmFsdWUgPSBsZWZ0LmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIENvbnN0YW50VmFsdWUgcmlnaHRWYWx1ZSA9IHJpZ2h0LmV2YWx1YXRlKGVudmlyb25tZW50KTsKICAgIGlmIChsZWZ0VmFsdWUuaXNDb25zdGFudCAmJiByaWdodFZhbHVlLmlzQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5pZGVudGl0eS5mb2xkKGxlZnRWYWx1ZSwgcmlnaHRWYWx1ZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBJZGVudGljYWxDb25zdGFudEV4cHJlc3Npb24oCiAgICAgICAgbGVmdC5hcHBseShhcmd1bWVudHMpLCByaWdodC5hcHBseShhcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgcHJlY2VkZW5jZSA9PiAxNTsKCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSB7CiAgICByZXR1cm4gMTcgKiBsZWZ0Lmhhc2hDb2RlICsgMTkgKiByaWdodC5oYXNoQ29kZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhJZGVudGljYWxDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBsZWZ0ID09IG90aGVyLmxlZnQgJiYgcmlnaHQgPT0gb3RoZXIucmlnaHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4KICAgICAgY29tbW9uRWxlbWVudHMuYm9vbFR5cGU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG90ZW50aWFsIHsKICAgIHJldHVybiBsZWZ0LmlzUG90ZW50aWFsIHx8IHJpZ2h0LmlzUG90ZW50aWFsOwogIH0KfQoKLy8vIEEgdW5hcnkgY29uc3RhbnQgZXhwcmVzc2lvbiBsaWtlIGAtYWAuCmNsYXNzIFVuYXJ5Q29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBVbmFyeU9wZXJhdG9yIG9wZXJhdG9yOwogIGZpbmFsIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uOwoKICBVbmFyeUNvbnN0YW50RXhwcmVzc2lvbih0aGlzLm9wZXJhdG9yLCB0aGlzLmV4cHJlc3Npb24pIHsKICAgIGFzc2VydChQUkVDRURFTkNFX01BUFtvcGVyYXRvci5raW5kXSAhPSBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbktpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5VTkFSWTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFVuYXJ5KHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnVW5hcnkob3A9JG9wZXJhdG9yLGV4cHJlc3Npb249Jyk7CiAgICBleHByZXNzaW9uLl9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChzYik7CiAgICBzYi53cml0ZSgnKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIENvbnN0YW50VmFsdWUgZXhwcmVzc2lvblZhbHVlID0gZXhwcmVzc2lvbi5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICBib29sIGlzVmFsaWQgPSB0cnVlOwogICAgc3dpdGNoIChvcGVyYXRvci5raW5kKSB7CiAgICAgIGNhc2UgVW5hcnlPcGVyYXRvcktpbmQuTk9UOgogICAgICAgIGlmICghZXhwcmVzc2lvblZhbHVlLmlzQm9vbCkgewogICAgICAgICAgZW52aXJvbm1lbnQKICAgICAgICAgICAgICAucmVwb3J0RXJyb3IoZXhwcmVzc2lvbiwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9OT1RfVFlQRSwgewogICAgICAgICAgICAnY29uc3RhbnQnOiBleHByZXNzaW9uLAogICAgICAgICAgICAndHlwZSc6IGV4cHJlc3Npb25WYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKSwKICAgICAgICAgICAgJ29wZXJhdG9yJzogb3BlcmF0b3IKICAgICAgICAgIH0pOwogICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBVbmFyeU9wZXJhdG9yS2luZC5ORUdBVEU6CiAgICAgICAgaWYgKCFleHByZXNzaW9uVmFsdWUuaXNOdW0pIHsKICAgICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKAogICAgICAgICAgICAgIGV4cHJlc3Npb24sIE1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfTkVHQVRFX1RZUEUsIHsKICAgICAgICAgICAgJ2NvbnN0YW50JzogZXhwcmVzc2lvbiwKICAgICAgICAgICAgJ3R5cGUnOiBleHByZXNzaW9uVmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cyksCiAgICAgICAgICAgICdvcGVyYXRvcic6IG9wZXJhdG9yCiAgICAgICAgICB9KTsKICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVW5hcnlPcGVyYXRvcktpbmQuQ09NUExFTUVOVDoKICAgICAgICBpZiAoIWV4cHJlc3Npb25WYWx1ZS5pc0ludCkgewogICAgICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgZXhwcmVzc2lvbiwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9DT01QTEVNRU5UX1RZUEUsIHsKICAgICAgICAgICAgJ2NvbnN0YW50JzogZXhwcmVzc2lvbiwKICAgICAgICAgICAgJ3R5cGUnOiBleHByZXNzaW9uVmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cyksCiAgICAgICAgICAgICdvcGVyYXRvcic6IG9wZXJhdG9yCiAgICAgICAgICB9KTsKICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoaXNWYWxpZCkgewogICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0KICAgICAgICAgIGNvbnN0YW50X3N5c3RlbS5sb29rdXBVbmFyeShvcGVyYXRvcikuZm9sZChleHByZXNzaW9uVmFsdWUpOwogICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgVW5hcnlDb25zdGFudEV4cHJlc3Npb24ob3BlcmF0b3IsIGV4cHJlc3Npb24uYXBwbHkoYXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IHByZWNlZGVuY2UgPT4gUFJFQ0VERU5DRV9NQVBbb3BlcmF0b3Iua2luZF07CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgewogICAgcmV0dXJuIDEzICogb3BlcmF0b3IuaGFzaENvZGUgKyAxNyAqIGV4cHJlc3Npb24uaGFzaENvZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoVW5hcnlDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBvcGVyYXRvciA9PSBvdGhlci5vcGVyYXRvciAmJiBleHByZXNzaW9uID09IG90aGVyLmV4cHJlc3Npb247CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpIHsKICAgIHJldHVybiBleHByZXNzaW9uLmdldEtub3duVHlwZShjb21tb25FbGVtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1BvdGVudGlhbCB7CiAgICByZXR1cm4gZXhwcmVzc2lvbi5pc1BvdGVudGlhbDsKICB9CgogIHN0YXRpYyBjb25zdCBNYXA8VW5hcnlPcGVyYXRvcktpbmQsIGludD4gUFJFQ0VERU5DRV9NQVAgPSBjb25zdCB7CiAgICBVbmFyeU9wZXJhdG9yS2luZC5OT1Q6IDE0LAogICAgVW5hcnlPcGVyYXRvcktpbmQuQ09NUExFTUVOVDogMTQsCiAgICBVbmFyeU9wZXJhdG9yS2luZC5ORUdBVEU6IDE0LAogIH07Cn0KCi8vLyBBIHN0cmluZyBsZW5ndGggY29uc3RhbnQgZXhwcmVzc2lvbiBsaWtlIGBhLmxlbmd0aGAuCmNsYXNzIFN0cmluZ0xlbmd0aENvbnN0YW50RXhwcmVzc2lvbiBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb247CgogIFN0cmluZ0xlbmd0aENvbnN0YW50RXhwcmVzc2lvbih0aGlzLmV4cHJlc3Npb24pOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kID0+IENvbnN0YW50RXhwcmVzc2lvbktpbmQuU1RSSU5HX0xFTkdUSDsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFN0cmluZ0xlbmd0aCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ1N0cmluZ0xlbmd0aChleHByZXNzaW9uPScpOwogICAgZXhwcmVzc2lvbi5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgc2Iud3JpdGUoJyknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gZXhwcmVzc2lvbi5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICBpZiAoIXZhbHVlLmlzU3RyaW5nKSB7CiAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKAogICAgICAgICAgZXhwcmVzc2lvbiwgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9TVFJJTkdfTEVOR1RIX1RZUEUsIHsKICAgICAgICAnY29uc3RhbnQnOiBleHByZXNzaW9uLAogICAgICAgICd0eXBlJzogdmFsdWUuZ2V0VHlwZShlbnZpcm9ubWVudC5jb21tb25FbGVtZW50cykKICAgICAgfSk7CiAgICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogICAgfSBlbHNlIHsKICAgICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBzdHJpbmdWYWx1ZSA9IHZhbHVlOwogICAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtCiAgICAgICAgICAuY3JlYXRlSW50KG5ldyBCaWdJbnQuZnJvbShzdHJpbmdWYWx1ZS5zdHJpbmdWYWx1ZS5sZW5ndGgpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBTdHJpbmdMZW5ndGhDb25zdGFudEV4cHJlc3Npb24oZXhwcmVzc2lvbi5hcHBseShhcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgcHJlY2VkZW5jZSA9PiAxNTsKCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSB7CiAgICByZXR1cm4gMjMgKiBleHByZXNzaW9uLmhhc2hDb2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKFN0cmluZ0xlbmd0aENvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIGV4cHJlc3Npb24gPT0gb3RoZXIuZXhwcmVzc2lvbjsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PgogICAgICBjb21tb25FbGVtZW50cy5pbnRUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1BvdGVudGlhbCB7CiAgICByZXR1cm4gZXhwcmVzc2lvbi5pc1BvdGVudGlhbDsKICB9Cn0KCi8vLyBBIGNvbnN0YW50IGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gbGlrZSBgYSA/IGIgOiBjYC4KY2xhc3MgQ29uZGl0aW9uYWxDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIENvbnN0YW50RXhwcmVzc2lvbiBjb25kaXRpb247CiAgZmluYWwgQ29uc3RhbnRFeHByZXNzaW9uIHRydWVFeHA7CiAgZmluYWwgQ29uc3RhbnRFeHByZXNzaW9uIGZhbHNlRXhwOwoKICBDb25kaXRpb25hbENvbnN0YW50RXhwcmVzc2lvbih0aGlzLmNvbmRpdGlvbiwgdGhpcy50cnVlRXhwLCB0aGlzLmZhbHNlRXhwKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLkNPTkRJVElPTkFMOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Q29uZGl0aW9uYWwodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdDb25kaXRpb25hbChjb25kaXRpb249Jyk7CiAgICBjb25kaXRpb24uX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIHNiLndyaXRlKCcsdHJ1ZT0nKTsKICAgIHRydWVFeHAuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIHNiLndyaXRlKCcsZmFsc2U9Jyk7CiAgICBmYWxzZUV4cC5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgc2Iud3JpdGUoJyknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbENvbnN0YW50RXhwcmVzc2lvbihjb25kaXRpb24uYXBwbHkoYXJndW1lbnRzKSwKICAgICAgICB0cnVlRXhwLmFwcGx5KGFyZ3VtZW50cyksIGZhbHNlRXhwLmFwcGx5KGFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBwcmVjZWRlbmNlID0+IDM7CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgewogICAgcmV0dXJuIDEzICogY29uZGl0aW9uLmhhc2hDb2RlICsKICAgICAgICAxNyAqIHRydWVFeHAuaGFzaENvZGUgKwogICAgICAgIDE5ICogZmFsc2VFeHAuaGFzaENvZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoQ29uZGl0aW9uYWxDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBjb25kaXRpb24gPT0gb3RoZXIuY29uZGl0aW9uICYmCiAgICAgICAgdHJ1ZUV4cCA9PSBvdGhlci50cnVlRXhwICYmCiAgICAgICAgZmFsc2VFeHAgPT0gb3RoZXIuZmFsc2VFeHA7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgQ29uc3RhbnRWYWx1ZSBjb25kaXRpb25WYWx1ZSA9IGNvbmRpdGlvbi5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICBDb25zdGFudFZhbHVlIHRydWVWYWx1ZSA9IHRydWVFeHAuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgQ29uc3RhbnRWYWx1ZSBmYWxzZVZhbHVlID0gZmFsc2VFeHAuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKICAgIGlmICghY29uZGl0aW9uVmFsdWUuaXNCb29sKSB7CiAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKAogICAgICAgICAgY29uZGl0aW9uLCBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NPTkRJVElPTkFMX1RZUEUsIHsKICAgICAgICAnY29uc3RhbnQnOiBjb25kaXRpb24sCiAgICAgICAgJ3R5cGUnOiBjb25kaXRpb25WYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKQogICAgICB9KTsKICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgfQogICAgaWYgKGlzVmFsaWQpIHsKICAgICAgaWYgKGNvbmRpdGlvblZhbHVlLmlzVHJ1ZSkgewogICAgICAgIHJldHVybiB0cnVlVmFsdWU7CiAgICAgIH0gZWxzZSBpZiAoY29uZGl0aW9uVmFsdWUuaXNGYWxzZSkgewogICAgICAgIHJldHVybiBmYWxzZVZhbHVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgewogICAgRGFydFR5cGUgdHJ1ZVR5cGUgPSB0cnVlRXhwLmdldEtub3duVHlwZShjb21tb25FbGVtZW50cyk7CiAgICBEYXJ0VHlwZSBmYWxzZVR5cGUgPSBmYWxzZUV4cC5nZXRLbm93blR5cGUoY29tbW9uRWxlbWVudHMpOwogICAgaWYgKHRydWVUeXBlID09IGZhbHNlVHlwZSkgewogICAgICByZXR1cm4gdHJ1ZVR5cGU7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG90ZW50aWFsIHsKICAgIHJldHVybiBjb25kaXRpb24uaXNQb3RlbnRpYWwgfHwgdHJ1ZUV4cC5pc1BvdGVudGlhbCB8fCBmYWxzZUV4cC5pc1BvdGVudGlhbDsKICB9Cn0KCi8vLyBBIHJlZmVyZW5jZSB0byBhIHBvc2l0aW9uIHBhcmFtZXRlci4KY2xhc3MgUG9zaXRpb25hbEFyZ3VtZW50UmVmZXJlbmNlIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBpbnQgaW5kZXg7CgogIFBvc2l0aW9uYWxBcmd1bWVudFJlZmVyZW5jZSh0aGlzLmluZGV4KTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCB7CiAgICByZXR1cm4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5QT1NJVElPTkFMX1JFRkVSRU5DRTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRQb3NpdGlvbmFsKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnUG9zaXRpb25hbChpbmRleD0kaW5kZXgpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gYXBwbHkoTm9ybWFsaXplZEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBhcmd1bWVudHMuZ2V0UG9zaXRpb25hbEFyZ3VtZW50KGluZGV4KTsKICB9CgogIEBvdmVycmlkZQogIGludCBfY29tcHV0ZUhhc2hDb2RlKCkgPT4gMTMgKiBpbmRleC5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKFBvc2l0aW9uYWxBcmd1bWVudFJlZmVyZW5jZSBvdGhlcikgPT4gaW5kZXggPT0gb3RoZXIuaW5kZXg7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG90ZW50aWFsID0+IHRydWU7Cn0KCi8vLyBBIHJlZmVyZW5jZSB0byBhIG5hbWVkIHBhcmFtZXRlci4KY2xhc3MgTmFtZWRBcmd1bWVudFJlZmVyZW5jZSBleHRlbmRzIENvbnN0YW50RXhwcmVzc2lvbiB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIE5hbWVkQXJndW1lbnRSZWZlcmVuY2UodGhpcy5uYW1lKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCB7CiAgICByZXR1cm4gQ29uc3RhbnRFeHByZXNzaW9uS2luZC5OQU1FRF9SRUZFUkVOQ0U7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TmFtZWQodGhpcywgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdOYW1lZChuYW1lPSRuYW1lKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gYXJndW1lbnRzLmdldE5hbWVkQXJndW1lbnQobmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpID0+IDEzICogbmFtZS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKE5hbWVkQXJndW1lbnRSZWZlcmVuY2Ugb3RoZXIpID0+IG5hbWUgPT0gb3RoZXIubmFtZTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3RlbnRpYWwgPT4gdHJ1ZTsKfQoKYWJzdHJhY3QgY2xhc3MgRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBDb25zdGFudEV4cHJlc3Npb24gbmFtZTsKICBmaW5hbCBDb25zdGFudEV4cHJlc3Npb24gZGVmYXVsdFZhbHVlOwoKICBGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24odGhpcy5uYW1lLCB0aGlzLmRlZmF1bHRWYWx1ZSk7CgogIGJvb2wgX2NoZWNrTmFtZUZyb21FbnZpcm9ubWVudChFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBuYW1lLCBDb25zdGFudFZhbHVlIG5hbWVWYWx1ZSkgewogICAgaWYgKCFuYW1lVmFsdWUuaXNTdHJpbmcpIHsKICAgICAgZW52aXJvbm1lbnQucmVwb3J0RXJyb3IoCiAgICAgICAgICBuYW1lLCBNZXNzYWdlS2luZC5JTlZBTElEX0ZST01fRU5WSVJPTk1FTlRfTkFNRV9UWVBFLCB7CiAgICAgICAgJ2NvbnN0YW50JzogbmFtZSwKICAgICAgICAndHlwZSc6IG5hbWVWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKQogICAgICB9KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX2NvbXB1dGVIYXNoQ29kZSgpIHsKICAgIHJldHVybiAxMyAqIG5hbWUuaGFzaENvZGUgKyAxNyAqIGRlZmF1bHRWYWx1ZS5oYXNoQ29kZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24gb3RoZXIpIHsKICAgIHJldHVybiBuYW1lID09IG90aGVyLm5hbWUgJiYgZGVmYXVsdFZhbHVlID09IG90aGVyLmRlZmF1bHRWYWx1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzSW1wbGljaXQgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3RlbnRpYWwgewogICAgcmV0dXJuIG5hbWUuaXNQb3RlbnRpYWwgfHwKICAgICAgICAoZGVmYXVsdFZhbHVlICE9IG51bGwgJiYgZGVmYXVsdFZhbHVlLmlzUG90ZW50aWFsKTsKICB9Cn0KCi8vLyBBIGBjb25zdCBib29sLmZyb21FbnZpcm9ubWVudGAgY29uc3RhbnQuCmNsYXNzIEJvb2xGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24KICAgIGV4dGVuZHMgRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uIHsKICBCb29sRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uKAogICAgICBDb25zdGFudEV4cHJlc3Npb24gbmFtZSwgQ29uc3RhbnRFeHByZXNzaW9uIGRlZmF1bHRWYWx1ZSkKICAgICAgOiBzdXBlcihuYW1lLCBkZWZhdWx0VmFsdWUpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kIHsKICAgIHJldHVybiBDb25zdGFudEV4cHJlc3Npb25LaW5kLkJPT0xfRlJPTV9FTlZJUk9OTUVOVDsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRCb29sRnJvbUVudmlyb25tZW50KHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfY3JlYXRlU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBzYi53cml0ZSgnYm9vbC5mcm9tRW52aXJvbm1lbnQobmFtZT0nKTsKICAgIG5hbWUuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIHNiLndyaXRlKCcsZGVmYXVsdFZhbHVlPScpOwogICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7CiAgICAgIGRlZmF1bHRWYWx1ZS5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgfSBlbHNlIHsKICAgICAgc2Iud3JpdGUoJ251bGwnKTsKICAgIH0KICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgQ29uc3RhbnRWYWx1ZSBuYW1lQ29uc3RhbnRWYWx1ZSA9IG5hbWUuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0Q29uc3RhbnRWYWx1ZTsKICAgIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkgewogICAgICBkZWZhdWx0Q29uc3RhbnRWYWx1ZSA9IGRlZmF1bHRWYWx1ZS5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICB9IGVsc2UgewogICAgICBkZWZhdWx0Q29uc3RhbnRWYWx1ZSA9IGNvbnN0YW50X3N5c3RlbS5jcmVhdGVCb29sKGZhbHNlKTsKICAgIH0KICAgIGlmICghbmFtZUNvbnN0YW50VmFsdWUuaXNDb25zdGFudCB8fCAhZGVmYXVsdENvbnN0YW50VmFsdWUuaXNDb25zdGFudCkgewogICAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICAgIH0KICAgIGJvb2wgaXNWYWxpZCA9CiAgICAgICAgX2NoZWNrTmFtZUZyb21FbnZpcm9ubWVudChlbnZpcm9ubWVudCwgbmFtZSwgbmFtZUNvbnN0YW50VmFsdWUpOwogICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7CiAgICAgIGlmICghZGVmYXVsdENvbnN0YW50VmFsdWUuaXNCb29sICYmICFkZWZhdWx0Q29uc3RhbnRWYWx1ZS5pc051bGwpIHsKICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcihkZWZhdWx0VmFsdWUsCiAgICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfQk9PTF9GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRSwgewogICAgICAgICAgJ2NvbnN0YW50JzogZGVmYXVsdFZhbHVlLAogICAgICAgICAgJ3R5cGUnOiBkZWZhdWx0Q29uc3RhbnRWYWx1ZS5nZXRUeXBlKGVudmlyb25tZW50LmNvbW1vbkVsZW1lbnRzKQogICAgICAgIH0pOwogICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKGlzVmFsaWQpIHsKICAgICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBuYW1lU3RyaW5nQ29uc3RhbnRWYWx1ZSA9IG5hbWVDb25zdGFudFZhbHVlOwogICAgICBTdHJpbmcgdGV4dCA9CiAgICAgICAgICBlbnZpcm9ubWVudC5yZWFkRnJvbUVudmlyb25tZW50KG5hbWVTdHJpbmdDb25zdGFudFZhbHVlLnN0cmluZ1ZhbHVlKTsKICAgICAgaWYgKHRleHQgPT0gJ3RydWUnKSB7CiAgICAgICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVCb29sKHRydWUpOwogICAgICB9IGVsc2UgaWYgKHRleHQgPT0gJ2ZhbHNlJykgewogICAgICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlQm9vbChmYWxzZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGRlZmF1bHRDb25zdGFudFZhbHVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBCb29sRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uKG5hbWUuYXBwbHkoYXJndW1lbnRzKSwKICAgICAgICBkZWZhdWx0VmFsdWUgIT0gbnVsbCA/IGRlZmF1bHRWYWx1ZS5hcHBseShhcmd1bWVudHMpIDogbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEtub3duVHlwZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgPT4KICAgICAgY29tbW9uRWxlbWVudHMuYm9vbFR5cGU7Cn0KCi8vLyBBIGBjb25zdCBpbnQuZnJvbUVudmlyb25tZW50YCBjb25zdGFudC4KY2xhc3MgSW50RnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uCiAgICBleHRlbmRzIEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbiB7CiAgSW50RnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uKAogICAgICBDb25zdGFudEV4cHJlc3Npb24gbmFtZSwgQ29uc3RhbnRFeHByZXNzaW9uIGRlZmF1bHRWYWx1ZSkKICAgICAgOiBzdXBlcihuYW1lLCBkZWZhdWx0VmFsdWUpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kIHsKICAgIHJldHVybiBDb25zdGFudEV4cHJlc3Npb25LaW5kLklOVF9GUk9NX0VOVklST05NRU5UOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEludEZyb21FbnZpcm9ubWVudCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ2ludC5mcm9tRW52aXJvbm1lbnQobmFtZT0nKTsKICAgIG5hbWUuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIHNiLndyaXRlKCcsZGVmYXVsdFZhbHVlPScpOwogICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7CiAgICAgIGRlZmF1bHRWYWx1ZS5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgfSBlbHNlIHsKICAgICAgc2Iud3JpdGUoJ251bGwnKTsKICAgIH0KICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgQ29uc3RhbnRWYWx1ZSBuYW1lQ29uc3RhbnRWYWx1ZSA9IG5hbWUuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0Q29uc3RhbnRWYWx1ZTsKICAgIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkgewogICAgICBkZWZhdWx0Q29uc3RhbnRWYWx1ZSA9IGRlZmF1bHRWYWx1ZS5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICB9IGVsc2UgewogICAgICBkZWZhdWx0Q29uc3RhbnRWYWx1ZSA9IGNvbnN0YW50X3N5c3RlbS5jcmVhdGVOdWxsKCk7CiAgICB9CiAgICBpZiAoIW5hbWVDb25zdGFudFZhbHVlLmlzQ29uc3RhbnQgfHwgIWRlZmF1bHRDb25zdGFudFZhbHVlLmlzQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgICB9CiAgICBib29sIGlzVmFsaWQgPQogICAgICAgIF9jaGVja05hbWVGcm9tRW52aXJvbm1lbnQoZW52aXJvbm1lbnQsIG5hbWUsIG5hbWVDb25zdGFudFZhbHVlKTsKICAgIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkgewogICAgICBpZiAoIWRlZmF1bHRDb25zdGFudFZhbHVlLmlzSW50ICYmICFkZWZhdWx0Q29uc3RhbnRWYWx1ZS5pc051bGwpIHsKICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcihkZWZhdWx0VmFsdWUsCiAgICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfSU5UX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFLCB7CiAgICAgICAgICAnY29uc3RhbnQnOiBkZWZhdWx0VmFsdWUsCiAgICAgICAgICAndHlwZSc6IGRlZmF1bHRDb25zdGFudFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpCiAgICAgICAgfSk7CiAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpZiAoaXNWYWxpZCkgewogICAgICBTdHJpbmdDb25zdGFudFZhbHVlIG5hbWVTdHJpbmdDb25zdGFudFZhbHVlID0gbmFtZUNvbnN0YW50VmFsdWU7CiAgICAgIFN0cmluZyB0ZXh0ID0KICAgICAgICAgIGVudmlyb25tZW50LnJlYWRGcm9tRW52aXJvbm1lbnQobmFtZVN0cmluZ0NvbnN0YW50VmFsdWUuc3RyaW5nVmFsdWUpOwogICAgICBCaWdJbnQgdmFsdWU7CiAgICAgIGlmICh0ZXh0ICE9IG51bGwpIHsKICAgICAgICB2YWx1ZSA9IEJpZ0ludC50cnlQYXJzZSh0ZXh0KTsKICAgICAgfQogICAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBkZWZhdWx0Q29uc3RhbnRWYWx1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludCh2YWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgTm9uQ29uc3RhbnRWYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEludEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbihuYW1lLmFwcGx5KGFyZ3VtZW50cyksCiAgICAgICAgZGVmYXVsdFZhbHVlICE9IG51bGwgPyBkZWZhdWx0VmFsdWUuYXBwbHkoYXJndW1lbnRzKSA6IG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRLbm93blR5cGUoQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0+CiAgICAgIGNvbW1vbkVsZW1lbnRzLmludFR5cGU7Cn0KCi8vLyBBIGBjb25zdCBTdHJpbmcuZnJvbUVudmlyb25tZW50YCBjb25zdGFudC4KY2xhc3MgU3RyaW5nRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uCiAgICBleHRlbmRzIEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbiB7CiAgU3RyaW5nRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uKAogICAgICBDb25zdGFudEV4cHJlc3Npb24gbmFtZSwgQ29uc3RhbnRFeHByZXNzaW9uIGRlZmF1bHRWYWx1ZSkKICAgICAgOiBzdXBlcihuYW1lLCBkZWZhdWx0VmFsdWUpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb25LaW5kIGdldCBraW5kIHsKICAgIHJldHVybiBDb25zdGFudEV4cHJlc3Npb25LaW5kLlNUUklOR19GUk9NX0VOVklST05NRU5UOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3IgdmlzaXRvciwgW2NvbnRleHRdKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFN0cmluZ0Zyb21FbnZpcm9ubWVudCh0aGlzLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ1N0cmluZy5mcm9tRW52aXJvbm1lbnQobmFtZT0nKTsKICAgIG5hbWUuX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIHNiLndyaXRlKCcsZGVmYXVsdFZhbHVlPScpOwogICAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7CiAgICAgIGRlZmF1bHRWYWx1ZS5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgfSBlbHNlIHsKICAgICAgc2Iud3JpdGUoJ251bGwnKTsKICAgIH0KICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgQ29uc3RhbnRWYWx1ZSBuYW1lQ29uc3RhbnRWYWx1ZSA9IG5hbWUuZXZhbHVhdGUoZW52aXJvbm1lbnQpOwogICAgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0Q29uc3RhbnRWYWx1ZTsKICAgIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkgewogICAgICBkZWZhdWx0Q29uc3RhbnRWYWx1ZSA9IGRlZmF1bHRWYWx1ZS5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICB9IGVsc2UgewogICAgICBkZWZhdWx0Q29uc3RhbnRWYWx1ZSA9IGNvbnN0YW50X3N5c3RlbS5jcmVhdGVOdWxsKCk7CiAgICB9CiAgICBpZiAoIW5hbWVDb25zdGFudFZhbHVlLmlzQ29uc3RhbnQgfHwgIWRlZmF1bHRDb25zdGFudFZhbHVlLmlzQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuIG5ldyBOb25Db25zdGFudFZhbHVlKCk7CiAgICB9CiAgICBib29sIGlzVmFsaWQgPQogICAgICAgIF9jaGVja05hbWVGcm9tRW52aXJvbm1lbnQoZW52aXJvbm1lbnQsIG5hbWUsIG5hbWVDb25zdGFudFZhbHVlKTsKICAgIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkgewogICAgICBpZiAoIWRlZmF1bHRDb25zdGFudFZhbHVlLmlzU3RyaW5nICYmICFkZWZhdWx0Q29uc3RhbnRWYWx1ZS5pc051bGwpIHsKICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcihkZWZhdWx0VmFsdWUsCiAgICAgICAgICAgIE1lc3NhZ2VLaW5kLklOVkFMSURfU1RSSU5HX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFLCB7CiAgICAgICAgICAnY29uc3RhbnQnOiBkZWZhdWx0VmFsdWUsCiAgICAgICAgICAndHlwZSc6IGRlZmF1bHRDb25zdGFudFZhbHVlLmdldFR5cGUoZW52aXJvbm1lbnQuY29tbW9uRWxlbWVudHMpCiAgICAgICAgfSk7CiAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpZiAoaXNWYWxpZCkgewogICAgICBTdHJpbmdDb25zdGFudFZhbHVlIG5hbWVTdHJpbmdDb25zdGFudFZhbHVlID0gbmFtZUNvbnN0YW50VmFsdWU7CiAgICAgIFN0cmluZyB0ZXh0ID0KICAgICAgICAgIGVudmlyb25tZW50LnJlYWRGcm9tRW52aXJvbm1lbnQobmFtZVN0cmluZ0NvbnN0YW50VmFsdWUuc3RyaW5nVmFsdWUpOwogICAgICBpZiAodGV4dCA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGRlZmF1bHRDb25zdGFudFZhbHVlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlU3RyaW5nKHRleHQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBhcHBseShOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBTdHJpbmdGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24obmFtZS5hcHBseShhcmd1bWVudHMpLAogICAgICAgIGRlZmF1bHRWYWx1ZSAhPSBudWxsID8gZGVmYXVsdFZhbHVlLmFwcGx5KGFyZ3VtZW50cykgOiBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0S25vd25UeXBlKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSA9PgogICAgICBjb21tb25FbGVtZW50cy5zdHJpbmdUeXBlOwp9CgpjbGFzcyBBc3NlcnRDb25zdGFudEV4cHJlc3Npb24gZXh0ZW5kcyBDb25zdGFudEV4cHJlc3Npb24gewogIGZpbmFsIENvbnN0YW50RXhwcmVzc2lvbiBjb25kaXRpb247CiAgZmluYWwgQ29uc3RhbnRFeHByZXNzaW9uIG1lc3NhZ2U7CgogIEFzc2VydENvbnN0YW50RXhwcmVzc2lvbih0aGlzLmNvbmRpdGlvbiwgdGhpcy5tZXNzYWdlKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLkFTU0VSVDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKEFzc2VydENvbnN0YW50RXhwcmVzc2lvbiBvdGhlcikgewogICAgcmV0dXJuIGNvbmRpdGlvbiA9PSBvdGhlci5jb25kaXRpb24gJiYgbWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSB7CiAgICByZXR1cm4gMTMgKiBjb25kaXRpb24uaGFzaENvZGUgKyAxNyAqIG1lc3NhZ2UuaGFzaENvZGU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF9jcmVhdGVTdHJ1Y3R1cmVkVGV4dChTdHJpbmdCdWZmZXIgc2IpIHsKICAgIHNiLndyaXRlKCdhc3NlcnQoJyk7CiAgICBjb25kaXRpb24uX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KHNiKTsKICAgIHNiLndyaXRlKCcsbWVzc2FnZT0nKTsKICAgIGlmIChtZXNzYWdlICE9IG51bGwpIHsKICAgICAgbWVzc2FnZS5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgfSBlbHNlIHsKICAgICAgc2Iud3JpdGUoJ251bGwnKTsKICAgIH0KICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgQ29uc3RhbnRWYWx1ZSBjb25kaXRpb25WYWx1ZSA9IGNvbmRpdGlvbi5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICBib29sIHZhbGlkQXNzZXJ0OwogICAgaWYgKGVudmlyb25tZW50LmVuYWJsZUFzc2VydGlvbnMpIHsKICAgICAgLy8gQm9vbGVhbiBjb252ZXJzaW9uOgogICAgICB2YWxpZEFzc2VydCA9CiAgICAgICAgICBjb25kaXRpb25WYWx1ZSBpcyBCb29sQ29uc3RhbnRWYWx1ZSAmJiBjb25kaXRpb25WYWx1ZS5ib29sVmFsdWU7CiAgICB9IGVsc2UgewogICAgICB2YWxpZEFzc2VydCA9IHRydWU7CiAgICB9CiAgICBpZiAoIXZhbGlkQXNzZXJ0KSB7CiAgICAgIGlmIChtZXNzYWdlICE9IG51bGwpIHsKICAgICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gbWVzc2FnZS5ldmFsdWF0ZShlbnZpcm9ubWVudCk7CiAgICAgICAgaWYgKHZhbHVlIGlzIFN0cmluZ0NvbnN0YW50VmFsdWUpIHsKICAgICAgICAgIFN0cmluZyB0ZXh0ID0gJyR7dmFsdWUuc3RyaW5nVmFsdWV9JzsKICAgICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKHRoaXMsCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9BU1NFUlRfVkFMVUVfTUVTU0FHRSwgeydtZXNzYWdlJzogdGV4dH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBlbnZpcm9ubWVudC5yZXBvcnRFcnJvcih0aGlzLCBNZXNzYWdlS2luZC5JTlZBTElEX0FTU0VSVF9WQUxVRSwKICAgICAgICAgICAgICB7J2Fzc2VydGlvbic6IGNvbmRpdGlvbi50b0RhcnRUZXh0KCl9KTsKICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlcG9ydCBpbnZhbGlkIGNvbnN0YW50IG1lc3NhZ2U/CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGVudmlyb25tZW50LnJlcG9ydEVycm9yKHRoaXMsIE1lc3NhZ2VLaW5kLklOVkFMSURfQVNTRVJUX1ZBTFVFLAogICAgICAgICAgICB7J2Fzc2VydGlvbic6IGNvbmRpdGlvbi50b0RhcnRUZXh0KCl9KTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICAgIH0KCiAgICAvLyBSZXR1cm4gYSB2YWxpZCBjb25zdGFudCB2YWx1ZSB0byBzaWduYWwgdGhhdCBhc3NlcnRpb24gZGlkbid0IGZhaWwuCiAgICByZXR1cm4gbmV3IE51bGxDb25zdGFudFZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB2aXNpdG9yLCBbY29udGV4dF0pIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0QXNzZXJ0KHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEFzc2VydENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgICBjb25kaXRpb24uYXBwbHkoYXJndW1lbnRzKSwgbWVzc2FnZT8uYXBwbHkoYXJndW1lbnRzKSk7CiAgfQp9CgpjbGFzcyBJbnN0YW50aWF0aW9uQ29uc3RhbnRFeHByZXNzaW9uIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uIHsKICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwogIGZpbmFsIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uOwoKICBJbnN0YW50aWF0aW9uQ29uc3RhbnRFeHByZXNzaW9uKHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5leHByZXNzaW9uKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uS2luZCBnZXQga2luZCA9PiBDb25zdGFudEV4cHJlc3Npb25LaW5kLklOU1RBTlRJQVRJT047CgogIEBvdmVycmlkZQogIHZvaWQgX2NyZWF0ZVN0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYikgewogICAgc2Iud3JpdGUoJ0luc3RhbnRpYXRpb24odHlwZUFyZ3VtZW50cz0kdHlwZUFyZ3VtZW50cyxleHByZXNzaW9uPScpOwogICAgZXhwcmVzc2lvbi5fY3JlYXRlU3RydWN0dXJlZFRleHQoc2IpOwogICAgc2Iud3JpdGUoJyknKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzSW5Db250ZXh0ID0KICAgICAgICB0eXBlQXJndW1lbnRzLm1hcChlbnZpcm9ubWVudC5nZXRUeXBlSW5Db250ZXh0KS50b0xpc3QoKTsKICAgIHJldHVybiBuZXcgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUoCiAgICAgICAgdHlwZUFyZ3VtZW50c0luQ29udGV4dCwgZXhwcmVzc2lvbi5ldmFsdWF0ZShlbnZpcm9ubWVudCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9jb21wdXRlSGFzaENvZGUoKSB7CiAgICByZXR1cm4gSGFzaGluZy5vYmplY3RIYXNoKGV4cHJlc3Npb24sIEhhc2hpbmcubGlzdEhhc2godHlwZUFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGFwcGx5KE5vcm1hbGl6ZWRBcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IEluc3RhbnRpYXRpb25Db25zdGFudEV4cHJlc3Npb24oCiAgICAgICAgdHlwZUFyZ3VtZW50cywgZXhwcmVzc2lvbi5hcHBseShhcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhJbnN0YW50aWF0aW9uQ29uc3RhbnRFeHByZXNzaW9uIG90aGVyKSB7CiAgICByZXR1cm4gZXF1YWxFbGVtZW50cyh0eXBlQXJndW1lbnRzLCBvdGhlci50eXBlQXJndW1lbnRzKSAmJgogICAgICAgIGV4cHJlc3Npb24gPT0gb3RoZXIuZXhwcmVzc2lvbjsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yIHZpc2l0b3IsIFtjb250ZXh0XSkgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRJbnN0YW50aWF0aW9uKHRoaXMsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3RlbnRpYWwgewogICAgcmV0dXJuIGV4cHJlc3Npb24uaXNQb3RlbnRpYWw7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yPFIsIEE+IHsKICBjb25zdCBDb25zdGFudEV4cHJlc3Npb25WaXNpdG9yKCk7CgogIFIgdmlzaXQoQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50LCBBIGNvbnRleHQpIHsKICAgIHJldHVybiBjb25zdGFudC5hY2NlcHQodGhpcywgY29udGV4dCk7CiAgfQoKICBSIHZpc2l0QXMoQXNDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRCb29sKEJvb2xDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRJbnQoSW50Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0RG91YmxlKERvdWJsZUNvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdFN0cmluZyhTdHJpbmdDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXROdWxsKE51bGxDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRMaXN0KExpc3RDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRTZXQoU2V0Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0TWFwKE1hcENvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdENvbnN0cnVjdGVkKENvbnN0cnVjdGVkQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0Q29uY2F0ZW5hdGUoQ29uY2F0ZW5hdGVDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRTeW1ib2woU3ltYm9sQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0VHlwZShUeXBlQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0TG9jYWxWYXJpYWJsZShMb2NhbFZhcmlhYmxlQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0RmllbGQoRmllbGRDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRGdW5jdGlvbihGdW5jdGlvbkNvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdEJpbmFyeShCaW5hcnlDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRJZGVudGljYWwoSWRlbnRpY2FsQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0VW5hcnkoVW5hcnlDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRTdHJpbmdMZW5ndGgoU3RyaW5nTGVuZ3RoQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0Q29uZGl0aW9uYWwoQ29uZGl0aW9uYWxDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRCb29sRnJvbUVudmlyb25tZW50KAogICAgICBCb29sRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwgQSBjb250ZXh0KTsKICBSIHZpc2l0SW50RnJvbUVudmlyb25tZW50KAogICAgICBJbnRGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRTdHJpbmdGcm9tRW52aXJvbm1lbnQoCiAgICAgIFN0cmluZ0Zyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbiBleHAsIEEgY29udGV4dCk7CiAgUiB2aXNpdEFzc2VydChBc3NlcnRDb25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXRJbnN0YW50aWF0aW9uKEluc3RhbnRpYXRpb25Db25zdGFudEV4cHJlc3Npb24gZXhwLCBBIGNvbnRleHQpOwoKICBSIHZpc2l0UG9zaXRpb25hbChQb3NpdGlvbmFsQXJndW1lbnRSZWZlcmVuY2UgZXhwLCBBIGNvbnRleHQpOwogIFIgdmlzaXROYW1lZChOYW1lZEFyZ3VtZW50UmVmZXJlbmNlIGV4cCwgQSBjb250ZXh0KTsKfQoKY2xhc3MgQ29uc3RFeHBQcmludGVyIGV4dGVuZHMgQ29uc3RhbnRFeHByZXNzaW9uVmlzaXRvciB7CiAgZmluYWwgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwoKICB2b2lkIHdyaXRlKENvbnN0YW50RXhwcmVzc2lvbiBwYXJlbnQsIENvbnN0YW50RXhwcmVzc2lvbiBjaGlsZCwKICAgICAge2Jvb2wgbGVmdEFzc29jaWF0aXZlOiB0cnVlfSkgewogICAgaWYgKGNoaWxkLnByZWNlZGVuY2UgPCBwYXJlbnQucHJlY2VkZW5jZSB8fAogICAgICAgICFsZWZ0QXNzb2NpYXRpdmUgJiYgY2hpbGQucHJlY2VkZW5jZSA9PSBwYXJlbnQucHJlY2VkZW5jZSkgewogICAgICBzYi53cml0ZSgnKCcpOwogICAgICBjaGlsZC5hY2NlcHQodGhpcyk7CiAgICAgIHNiLndyaXRlKCcpJyk7CiAgICB9IGVsc2UgewogICAgICBjaGlsZC5hY2NlcHQodGhpcyk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlVHlwZUFyZ3VtZW50cyhJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlLnRyZWF0QXNSYXcpIHJldHVybjsKICAgIHNiLndyaXRlKCc8Jyk7CiAgICBib29sIG5lZWRzQ29tbWEgPSBmYWxzZTsKICAgIGZvciAoRGFydFR5cGUgdmFsdWUgaW4gdHlwZS50eXBlQXJndW1lbnRzKSB7CiAgICAgIGlmIChuZWVkc0NvbW1hKSB7CiAgICAgICAgc2Iud3JpdGUoJywgJyk7CiAgICAgIH0KICAgICAgc2Iud3JpdGUodmFsdWUpOwogICAgICBuZWVkc0NvbW1hID0gdHJ1ZTsKICAgIH0KICAgIHNiLndyaXRlKCc+Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0KENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCwgW19dKSB7CiAgICByZXR1cm4gY29uc3RhbnQuYWNjZXB0KHRoaXMsIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFzKEFzQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICB2aXNpdChleHAuZXhwcmVzc2lvbik7CiAgICBzYi53cml0ZSgnIGFzICcpOwogICAgc2Iud3JpdGUoZXhwLnR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvb2woQm9vbENvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgc2Iud3JpdGUoZXhwLmJvb2xWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RG91YmxlKERvdWJsZUNvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgc2Iud3JpdGUoZXhwLmRvdWJsZVZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnQoSW50Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBzYi53cml0ZShleHAuaW50VmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE51bGwoTnVsbENvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgc2Iud3JpdGUobnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nKFN0cmluZ0NvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogRW5zdXJlIGNvcnJlY3QgZXNjYXBpbmcuCiAgICBzYi53cml0ZSgnIiR7ZXhwLnN0cmluZ1ZhbHVlfSInKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXN0KExpc3RDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHNiLndyaXRlKCdjb25zdCAnKTsKICAgIHdyaXRlVHlwZUFyZ3VtZW50cyhleHAudHlwZSk7CiAgICBzYi53cml0ZSgnWycpOwogICAgYm9vbCBuZWVkc0NvbW1hID0gZmFsc2U7CiAgICBmb3IgKENvbnN0YW50RXhwcmVzc2lvbiB2YWx1ZSBpbiBleHAudmFsdWVzKSB7CiAgICAgIGlmIChuZWVkc0NvbW1hKSB7CiAgICAgICAgc2Iud3JpdGUoJywgJyk7CiAgICAgIH0KICAgICAgdmlzaXQodmFsdWUpOwogICAgICBuZWVkc0NvbW1hID0gdHJ1ZTsKICAgIH0KICAgIHNiLndyaXRlKCddJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U2V0KFNldENvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgc2Iud3JpdGUoJ2NvbnN0ICcpOwogICAgd3JpdGVUeXBlQXJndW1lbnRzKGV4cC50eXBlKTsKICAgIHNiLndyaXRlKCd7Jyk7CiAgICBzYi53cml0ZUFsbChleHAudmFsdWVzLCAnLCAnKTsKICAgIHNiLndyaXRlKCd9Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwKE1hcENvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgc2Iud3JpdGUoJ2NvbnN0ICcpOwogICAgd3JpdGVUeXBlQXJndW1lbnRzKGV4cC50eXBlKTsKICAgIHNiLndyaXRlKCd7Jyk7CiAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgZXhwLmtleXMubGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgIGlmIChpbmRleCA+IDApIHsKICAgICAgICBzYi53cml0ZSgnLCAnKTsKICAgICAgfQogICAgICB2aXNpdChleHAua2V5c1tpbmRleF0pOwogICAgICBzYi53cml0ZSgnOiAnKTsKICAgICAgdmlzaXQoZXhwLnZhbHVlc1tpbmRleF0pOwogICAgfQogICAgc2Iud3JpdGUoJ30nKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25zdHJ1Y3RlZChDb25zdHJ1Y3RlZENvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgc2Iud3JpdGUoJ2NvbnN0ICcpOwogICAgc2Iud3JpdGUoZXhwLnRhcmdldC5lbmNsb3NpbmdDbGFzcy5uYW1lKTsKICAgIHdyaXRlVHlwZUFyZ3VtZW50cyhleHAudHlwZSk7CiAgICBpZiAoZXhwLnRhcmdldC5uYW1lICE9ICcnKSB7CiAgICAgIHNiLndyaXRlKCcuJyk7CiAgICAgIHNiLndyaXRlKGV4cC50YXJnZXQubmFtZSk7CiAgICB9CiAgICBzYi53cml0ZSgnKCcpOwogICAgYm9vbCBuZWVkc0NvbW1hID0gZmFsc2U7CgogICAgaW50IG5hbWVkT2Zmc2V0ID0gZXhwLmNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50Q291bnQ7CiAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbmFtZWRPZmZzZXQ7IGluZGV4KyspIHsKICAgICAgaWYgKG5lZWRzQ29tbWEpIHsKICAgICAgICBzYi53cml0ZSgnLCAnKTsKICAgICAgfQogICAgICB2aXNpdChleHAuYXJndW1lbnRzW2luZGV4XSk7CiAgICAgIG5lZWRzQ29tbWEgPSB0cnVlOwogICAgfQogICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGV4cC5jYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRDb3VudDsgaW5kZXgrKykgewogICAgICBpZiAobmVlZHNDb21tYSkgewogICAgICAgIHNiLndyaXRlKCcsICcpOwogICAgICB9CiAgICAgIHNiLndyaXRlKGV4cC5jYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRzW2luZGV4XSk7CiAgICAgIHNiLndyaXRlKCc6ICcpOwogICAgICB2aXNpdChleHAuYXJndW1lbnRzW25hbWVkT2Zmc2V0ICsgaW5kZXhdKTsKICAgICAgbmVlZHNDb21tYSA9IHRydWU7CiAgICB9CiAgICBzYi53cml0ZSgnKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbmNhdGVuYXRlKENvbmNhdGVuYXRlQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBzYi53cml0ZSgnIicpOwogICAgZm9yIChDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBleHAuZXhwcmVzc2lvbnMpIHsKICAgICAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBDb25zdGFudEV4cHJlc3Npb25LaW5kLlNUUklORykgewogICAgICAgIFN0cmluZ0NvbnN0YW50RXhwcmVzc2lvbiBzdHJpbmcgPSBleHByZXNzaW9uOwogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEVuc3VyZSBjb3JyZWN0IGVzY2FwaW5nLgogICAgICAgIHNiLndyaXRlKCcke3N0cmluZy5zdHJpbmdWYWx1ZX0nKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzYi53cml0ZShyIiR7Iik7CiAgICAgICAgdmlzaXQoZXhwcmVzc2lvbik7CiAgICAgICAgc2Iud3JpdGUoIn0iKTsKICAgICAgfQogICAgfQogICAgc2Iud3JpdGUoJyInKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTeW1ib2woU3ltYm9sQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBzYi53cml0ZSgnIycpOwogICAgc2Iud3JpdGUoZXhwLm5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGUoVHlwZUNvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgc2Iud3JpdGUoZXhwLm5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZpZWxkKEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBpZiAoZXhwLmVsZW1lbnQuaXNTdGF0aWMpIHsKICAgICAgc2Iud3JpdGUoZXhwLmVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MubmFtZSk7CiAgICAgIHNiLndyaXRlKCcuJyk7CiAgICB9CiAgICBzYi53cml0ZShleHAuZWxlbWVudC5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMb2NhbFZhcmlhYmxlKExvY2FsVmFyaWFibGVDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHNiLndyaXRlKGV4cC5lbGVtZW50Lm5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uKEZ1bmN0aW9uQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBpZiAoZXhwLmVsZW1lbnQuaXNTdGF0aWMpIHsKICAgICAgc2Iud3JpdGUoZXhwLmVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MubmFtZSk7CiAgICAgIHNiLndyaXRlKCcuJyk7CiAgICB9CiAgICBzYi53cml0ZShleHAuZWxlbWVudC5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCaW5hcnkoQmluYXJ5Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICB3cml0ZShleHAsIGV4cC5sZWZ0KTsKICAgIHNiLndyaXRlKCcgJyk7CiAgICBzYi53cml0ZShleHAub3BlcmF0b3IubmFtZSk7CiAgICBzYi53cml0ZSgnICcpOwogICAgd3JpdGUoZXhwLCBleHAucmlnaHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdElkZW50aWNhbChJZGVudGljYWxDb25zdGFudEV4cHJlc3Npb24gZXhwLCBbX10pIHsKICAgIHNiLndyaXRlKCdpZGVudGljYWwoJyk7CiAgICB2aXNpdChleHAubGVmdCk7CiAgICBzYi53cml0ZSgnLCAnKTsKICAgIHZpc2l0KGV4cC5yaWdodCk7CiAgICBzYi53cml0ZSgnKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFVuYXJ5KFVuYXJ5Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBzYi53cml0ZShleHAub3BlcmF0b3IpOwogICAgd3JpdGUoZXhwLCBleHAuZXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nTGVuZ3RoKFN0cmluZ0xlbmd0aENvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgd3JpdGUoZXhwLCBleHAuZXhwcmVzc2lvbiwgbGVmdEFzc29jaWF0aXZlOiBmYWxzZSk7CiAgICBzYi53cml0ZSgnLmxlbmd0aCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbmRpdGlvbmFsKENvbmRpdGlvbmFsQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICB3cml0ZShleHAsIGV4cC5jb25kaXRpb24sIGxlZnRBc3NvY2lhdGl2ZTogZmFsc2UpOwogICAgc2Iud3JpdGUoJyA/ICcpOwogICAgd3JpdGUoZXhwLCBleHAudHJ1ZUV4cCk7CiAgICBzYi53cml0ZSgnIDogJyk7CiAgICB3cml0ZShleHAsIGV4cC5mYWxzZUV4cCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UG9zaXRpb25hbChQb3NpdGlvbmFsQXJndW1lbnRSZWZlcmVuY2UgZXhwLCBbX10pIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1heWJlIHRoaXMgc2hvdWxkIHRocm93LgogICAgc2Iud3JpdGUoJ2FyZ3NbJHtleHAuaW5kZXh9XScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5hbWVkKE5hbWVkQXJndW1lbnRSZWZlcmVuY2UgZXhwLCBbX10pIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1heWJlIHRoaXMgc2hvdWxkIHRocm93LgogICAgc2Iud3JpdGUoJ2FyZ3NbJHtleHAubmFtZX1dJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm9vbEZyb21FbnZpcm9ubWVudChCb29sRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwKICAgICAgW19dKSB7CiAgICBzYi53cml0ZSgnY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoJyk7CiAgICB2aXNpdChleHAubmFtZSk7CiAgICBpZiAoZXhwLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCcsIGRlZmF1bHRWYWx1ZTogJyk7CiAgICAgIHZpc2l0KGV4cC5kZWZhdWx0VmFsdWUpOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRGcm9tRW52aXJvbm1lbnQoSW50RnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBzYi53cml0ZSgnY29uc3QgaW50LmZyb21FbnZpcm9ubWVudCgnKTsKICAgIHZpc2l0KGV4cC5uYW1lKTsKICAgIGlmIChleHAuZGVmYXVsdFZhbHVlICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJywgZGVmYXVsdFZhbHVlOiAnKTsKICAgICAgdmlzaXQoZXhwLmRlZmF1bHRWYWx1ZSk7CiAgICB9CiAgICBzYi53cml0ZSgnKScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0Zyb21FbnZpcm9ubWVudChTdHJpbmdGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24gZXhwLAogICAgICBbX10pIHsKICAgIHNiLndyaXRlKCdjb25zdCBTdHJpbmcuZnJvbUVudmlyb25tZW50KCcpOwogICAgdmlzaXQoZXhwLm5hbWUpOwogICAgaWYgKGV4cC5kZWZhdWx0VmFsdWUgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnLCBkZWZhdWx0VmFsdWU6ICcpOwogICAgICB2aXNpdChleHAuZGVmYXVsdFZhbHVlKTsKICAgIH0KICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXNzZXJ0KEFzc2VydENvbnN0YW50RXhwcmVzc2lvbiBleHAsIFtfXSkgewogICAgc2Iud3JpdGUoJ2Fzc2VydCgnKTsKICAgIHZpc2l0KGV4cC5jb25kaXRpb24pOwogICAgaWYgKGV4cC5tZXNzYWdlICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJywgJyk7CiAgICAgIHZpc2l0KGV4cC5tZXNzYWdlKTsKICAgIH0KICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5zdGFudGlhdGlvbihJbnN0YW50aWF0aW9uQ29uc3RhbnRFeHByZXNzaW9uIGV4cCwgW19dKSB7CiAgICBzYi53cml0ZSgnPCcpOwogICAgc2Iud3JpdGUoZXhwLnR5cGVBcmd1bWVudHMuam9pbignLCAnKSk7CiAgICBzYi53cml0ZSgnPignKTsKICAgIHZpc2l0KGV4cC5leHByZXNzaW9uKTsKICAgIHNiLndyaXRlKCcpJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBzYi50b1N0cmluZygpOwp9Coo4AE5OPAEnARoBGSI/JCUhPRwcGhYBHgYKCBkPDw8KDQwJDQcYCAcHCAobEQoICRIYEwoRAgEzBD5LBERRT0UkEQEjAVATHAE4ATFDAU89AVAaQAFNGDUVHwQBRB4qHxoEATYvARoBDDgBNAEMHC00KjIbBAEMFj48KhkEAU5BBkhMThAfAU9NFFEhAgE2PwxHAQw5JQQBDD5AIwQBDDAdBAEMIAEMOwIBHjoYASoBDEIBDDktBAEMMCoEAQw+MgQBDDUBDC8pBAEMPx8CAR45GQEoAQxBAQw5LAQBDDAoBAEMPjAEAQw0AQwuJwQBDD8eAgEdPBwBLgEMRAEMOS8EAQwwLgQBDD42BAEMNwEMMS0EAQw/IQIBHTwcAS4BDEQBDDkvBAEMMC4EAQw+NgQBDDcBDDEtBAEMPyECARs6HAEMQgEMOS0EAQwwGAQBDD4pBAEMIAEMNgEMPx8CARs6HCkBMgEMQgEMOS0EAQwwKhsvGycXBhQEAQw+J0QEAQw8Jz8EAQwbPC8nBhUEAQwvKjwuNgYRBAEMQAEMIAEMPAIBGjkcKQExAQxBAQw5LAQBDD0hQQEMPk5BLj08HU0IBgEmOQQBDEABDDApGy8bJxcGFAQBDFABDC4qPC42BhEEAQwgAQw8AgEaORwnKQE8AQxBAQw5LAQBDDAqOBcXCC0WLwYUBAEMPkksUC47HykKPyEpCiRRChoISTMIBAEMPCYONjkEAQwbPC8nBhUEAQwuKjwuMjYGEQQBDEABDCABDBlPBAIBJ0EcIiUsASFEMycEAQxJAQw5NAQBDDA7NRsyGycXBhQEAUguNChMNDAEAUkXKDEEAQxHSkEEAQw+Q0ZEIicIJTQqHEY+EBswSyAmESUKCkw7JQoIH0gPJwgIBAEMGxNRMicGFQQBDDYqLjwxPAYRBAEMIAEMGTAEAgE9QS4BMwEMSQEMOTQEAQwwKxs0GycXBhQEAQw8Lj4EAQw+GSo5Ph8ZTy4SCB8sJzAkMycxJTEaCg8hSyI8DBlPLhIIBhM6BiMEAQwbLDQnBhUEAQw2RjNABhEEAQw/IQEMGTIEAgEUPBUBJwEMRAEMOS8EAQwwJAQBDDABDDEfBAEMPksEAQw/IQIBEjozFxUBMUUxBAEMQgEMOS0EAQwwIgQBDD5JBAEMMAEMLx8EAQw/HwIBSQw4JxcBNAEMQAEMOSsEAQwwGyoeBAEMPiUHGBhHDSUsDSYHPwEkRgE5ASUePQFAQQFKFyQ9SDNNTyUGHAQBDDxIBAEMSwEMLUEEAQw/LwIBNzsdASkBDEMBDDkuBAEMMCkEAQw+M0stCAQBDDMBDDAlBAIBLEMXATEBDEwBDDk2BAEMMDEEAQw+SSsEAQwzAQw4JQQCATE+IBsBNwEMRgEMOTEEAQwwLAQBDD41BAEMMwEMMyUEAQw/IwIBLzwhISIBQzJCBAE8LQEMRAEMOS8EAQwwHiQmJRMEAQw+Oj4eKh0rNTERNAoPASo0MBE0Cg8PMgYBPxkdIiYmJCVMIEUjEB0MCicjJU0hRiMQHQwKDyMiJiVHIUUQHQwmIyVEIUUQHQwqJSVGIEQQHQwnIiVDIEQQHQwRFksiRyRIDhsKDyMjIyQjJCIkIiAWUR5DIQ4bCiEjRR9EIQ4bChc5PCNNRx0MCg8jIyQjIiMgFlEeQyEOGwohI0UfRCEOGwoXODs9Ly5PRx0MCg8rIRZRHkMhDhsKIiNFH0QhDhsKDyohFlAeQyEOGwoiFlEfRCEOGwoPJU8ZDydDDwYTHyglQSIRMCYsHxoMFk8IBiMEAQw8KUIEAQwcPkBCHSImKyoiIiQkKCM6Pyw+OCkKPToqIyMjNzgpCj06KiMqJCcjIiMjIyQnJyUkPwYEAQw3AQwbTgQBDDEpHh4EAQwZMgQBRR4iJyYfIB4gICEgICAgIR4eICAgIyEFAgE8PyEiATYBDEcBDDkyBAEMMCEkGSUTBAEMPjo8OUMGIwQBDDwsOAQBDBwBDBs1BAEMNDcEAQw/HwEMGTIEAgErOyAnATwzBAEMQwEMOS4EAQwwMCoTBAEMPkYZHSInFlAkSSEOGwoPJSYjRiRJIQ4bCg8pJiNKJEkhDhsKDwYTHEcbFggGIwQBDDxPBAEMNwEMGz4EAQwwSQQBDDk0BAEMGSMEAUQfJiIFAgE5QicBMwEMSwEMOTUEAQwwKioTBAEMPjwbH0kgOgolDS8dRwYEAQw8TAQBDBwBDBslBAEMNysEAQw/HgEMGSMEAgE4QSYkJQFOAQxJAQw5NAQBDDAoKRgnGSgTBAEMPEk+BAEMGwEMGyUgIAQBDDYrJCQEAQw+RD0/GSIfRh9DChcGEyMaKxsIBiMEAQw5PkAhFwYRBAEMGVEEAgEpPxMBKwEMJDgEAQw5MwQBDDAqBAEMPDMEAQwxAQxLAQw+IwQBDCACASY6FQElAQwkMwQBDDkuBAEMMCMEAQw8LQQBDDABDEQBDD4jBAEMIAIBTiEpAUMBRDofH0IaPgoUBhEEAQwbPAQBDDpFBAEMGBIEAQwZHzwEAgEtLDApQCMBDCQ5BAEMOTwEAQwwLCQgIC4NGAYTBAEMPkIoIEENQAZNJQYTSSBKLkwkSwwZCAYTRxRQHDEkMg8lCAYjBAEMPExGBAEMPx8CASwrMChAIwEMJDgEAQw5OwQBDDArJCAgLg0YBhMEAQw+QiggQQ07Bk0lBhNJIEkuSyRLDBkIBhNHFFAUGicIGyUPMQgGIwQBDDxLRgQBDD8eAgEvLjArQCMBDCQ7BAEMOT4EAQwwLiQgIC4NGAYTBAEMPkIoIEENOwZNJQYTSSBMLk4kSwwZCAYTRxRQGiUPMwgGIwQBDDxORgQBDD8hAgE8JiQBOgEMRAEMMUUEAQwbPAQBDDAZKRsbKQ0YBhMEAQw+RBYoHRRLDRoGGB09LDAoTBFKNkMKD0g0CCUGAUskBAEMOS8EAQw8KUAEAgFDJicBSAEMSwEMMEgqEwQBDD4sQitDBAEMG0wEAQw8MDUEAQw4QCgEAQw5NgQBDBkjBAIBMSUBNCsEATI2NDo6NjY0NEREOjZIOD46QDhGRB49HTwgPzpIAUE3AgE6LgFCJjBFFRoVDRoGBAEwIRMdMRgYCBcZBhMEAQwxKAQBDDAbFhgEAQw0HQQBDDgfBAEMMhwEAQw0FAQBDDg1JgQBDDQYIhMdMxgYCBQZBhMEAQwyGCITIxMEAQwyGCITPBcYCB4WIAYTBAEMQhguIiEVIQYTHQFBOBgYCCMZBlEYGAg5FjEZBhMEAQxCEz0+NjkrDxkbFwgGEwQBDDgTGAQBDDQYBAEMNiAxFQYgBAEMRiAEAQw8IDEVBiAEAQw4GhMhExsEAQw+HBUUFhMEAQw2HCAEAQxEOBkEAQxCNxUdFR4EAQw/NSQEAQw1NSMEAQxLDS0VJCQfBhMEAQxQLBUkJB8GEwQBDE8NLxUkJB8GEwQBDDgZGh8WGgYTBAEMRhMsFBsTBAEMJgIBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbnN0YW50cy9leHByZXNzaW9ucy5kYXJ0MXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lvL2NvZGVfb3V0cHV0LmRhcnSb0C8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY29kZV9vdXRwdXQ7CgppbXBvcnQgJy4uLy4uL2NvbXBpbGVyX25ldy5kYXJ0JzsKaW1wb3J0ICdzb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CgovLy8gTGlzdGVuZXIgaW50ZXJmYWNlIGZvciBbQ29kZU91dHB1dF0gYWN0aXZpdHkuCmFic3RyYWN0IGNsYXNzIENvZGVPdXRwdXRMaXN0ZW5lciB7CiAgLy8vIENhbGxlZCB3aGVuIFt0ZXh0XSBpcyBhZGRlZCB0byB0aGUgb3V0cHV0LgogIHZvaWQgb25UZXh0KFN0cmluZyB0ZXh0KTsKCiAgLy8vIENhbGxlZCB3aGVuIHRoZSBvdXRwdXQgaXMgY2xvc2VkIHdpdGggYSBmaW5hbCBsZW5ndGggb2YgW2xlbmd0aF0uCiAgdm9pZCBvbkRvbmUoaW50IGxlbmd0aCk7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIGEgbWFwcGluZyBvZiB0YXJnZXQgb2Zmc2V0cyB0byBzb3VyY2UgbG9jYXRpb25zIGFuZCBmb3IKLy8vIHRyYWNraW5nIGlubGluaW5nIGZyYW1lIGRhdGEuCi8vLwovLy8gU291cmNlLWxvY2F0aW9uIG1hcHBpbmcgaXMgdXNlZCB0byBidWlsZCBzdGFuZGFyZCBzb3VyY2UtbWFwcyBmaWxlcy4KLy8vIElubGluaW5nIGZyYW1lcyBpcyB1c2VkIHRvIGF0dGFjaCBhbiBleHRlbnNpb24gdG8gc291cmNlLW1hcCBmaWxlcyB0bwovLy8gaW1wcm92ZSBkZW9iZnVzY2F0aW9uIG9mIHByb2R1Y3Rpb24gc3RhY2sgdHJhY2VzLgphYnN0cmFjdCBjbGFzcyBTb3VyY2VMb2NhdGlvbnMgewogIC8vLyBUaGUgbmFtZSBpZGVudGlmeWluZyB0aGlzIHNvdXJjZSBtYXBwaW5nLgogIFN0cmluZyBnZXQgbmFtZTsKCiAgLy8vIEFkZHMgYSBbc291cmNlTG9jYXRpb25dIGF0IHRoZSBzcGVjaWZpZWQgW3RhcmdldE9mZnNldF0uCiAgdm9pZCBhZGRTb3VyY2VMb2NhdGlvbihpbnQgdGFyZ2V0T2Zmc2V0LCBTb3VyY2VMb2NhdGlvbiBzb3VyY2VQb3NpdGlvbik7CgogIC8vLyBSZWNvcmQgYW4gaW5saW5pbmcgY2FsbCBhdCB0aGUgW3RhcmdldE9mZnNldF0uCiAgLy8vCiAgLy8vIFRoZSBpbmxpbmluZyBjYWxsLXNpdGUgd2FzIG1hZGUgZnJvbSBbcHVzaExvY2F0aW9uXSBhbmQgY2FsbHMKICAvLy8gW2lubGluZWRNZXRob2ROYW1lXS4KICB2b2lkIGFkZFB1c2goCiAgICAgIGludCB0YXJnZXRPZmZzZXQsIFNvdXJjZUxvY2F0aW9uIHB1c2hQb3NpdGlvbiwgU3RyaW5nIGlubGluZWRNZXRob2ROYW1lKTsKCiAgLy8vIFJlY29yZCBhIHJldHVybiBvZiBhbiBpbmxpbmluZyBjYWxsIGF0IHRoZSBbdGFyZ2V0T2Zmc2V0XS4KICAvLy8KICAvLy8gW2lzRW1wdHldIGluZGljYXRlcyB0aGF0IHRoaXMgcmV0dXJuIGFsc28gbWFrZXMgdGhlIGlubGluaW5nIHN0YWNrIGVtcHR5LgogIHZvaWQgYWRkUG9wKGludCB0YXJnZXRPZmZzZXQsIGJvb2wgaXNFbXB0eSk7CgogIC8vLyBBcHBsaWVzIFtmXSB0byBldmVyeSB0YXJnZXQgb2Zmc2V0IGFuZCBhc3NvY2lhdGVkIHNvdXJjZSBsb2NhdGlvbi4KICB2b2lkIGZvckVhY2hTb3VyY2VMb2NhdGlvbigKICAgICAgdm9pZCBmKGludCB0YXJnZXRPZmZzZXQsIFNvdXJjZUxvY2F0aW9uIHNvdXJjZUxvY2F0aW9uKSk7CgogIC8vLyBSZWNvcmRlZCBpbmxpbmluZyBkYXRhIHBlciB0YXJnZXQtb2Zmc2V0LgogIE1hcDxpbnQsIExpc3Q8RnJhbWVFbnRyeT4+IGdldCBmcmFtZU1hcmtlcnM7Cn0KCmNsYXNzIF9Tb3VyY2VMb2NhdGlvbnNJbXBsIGltcGxlbWVudHMgU291cmNlTG9jYXRpb25zIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBBYnN0cmFjdENvZGVPdXRwdXQgY29kZU91dHB1dDsKICBNYXA8aW50LCBMaXN0PFNvdXJjZUxvY2F0aW9uPj4gbWFya2VycyA9IDxpbnQsIExpc3Q8U291cmNlTG9jYXRpb24+Pnt9OwogIEBvdmVycmlkZQogIE1hcDxpbnQsIExpc3Q8RnJhbWVFbnRyeT4+IGZyYW1lTWFya2VycyA9IDxpbnQsIExpc3Q8RnJhbWVFbnRyeT4+e307CgogIF9Tb3VyY2VMb2NhdGlvbnNJbXBsKHRoaXMubmFtZSwgdGhpcy5jb2RlT3V0cHV0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRTb3VyY2VMb2NhdGlvbihpbnQgdGFyZ2V0T2Zmc2V0LCBTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbikgewogICAgYXNzZXJ0KHRhcmdldE9mZnNldCA8PSBjb2RlT3V0cHV0Lmxlbmd0aCk7CiAgICBMaXN0PFNvdXJjZUxvY2F0aW9uPiBzb3VyY2VMb2NhdGlvbnMgPQogICAgICAgIG1hcmtlcnMucHV0SWZBYnNlbnQodGFyZ2V0T2Zmc2V0LCAoKSA9PiA8U291cmNlTG9jYXRpb24+W10pOwogICAgc291cmNlTG9jYXRpb25zLmFkZChzb3VyY2VMb2NhdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFB1c2goaW50IHRhcmdldE9mZnNldCwgU291cmNlTG9jYXRpb24gc291cmNlTG9jYXRpb24sCiAgICAgIFN0cmluZyBpbmxpbmVkTWV0aG9kTmFtZSkgewogICAgYXNzZXJ0KHRhcmdldE9mZnNldCA8PSBjb2RlT3V0cHV0Lmxlbmd0aCk7CiAgICBMaXN0PEZyYW1lRW50cnk+IGZyYW1lcyA9IGZyYW1lTWFya2Vyc1t0YXJnZXRPZmZzZXRdID8/PSBbXTsKICAgIGZyYW1lcy5hZGQobmV3IEZyYW1lRW50cnkucHVzaChzb3VyY2VMb2NhdGlvbiwgaW5saW5lZE1ldGhvZE5hbWUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkUG9wKGludCB0YXJnZXRPZmZzZXQsIGJvb2wgaXNFbXB0eSkgewogICAgYXNzZXJ0KHRhcmdldE9mZnNldCA8PSBjb2RlT3V0cHV0Lmxlbmd0aCk7CiAgICBMaXN0PEZyYW1lRW50cnk+IGZyYW1lcyA9IGZyYW1lTWFya2Vyc1t0YXJnZXRPZmZzZXRdID8/PSBbXTsKICAgIGZyYW1lcy5hZGQobmV3IEZyYW1lRW50cnkucG9wKGlzRW1wdHkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFNvdXJjZUxvY2F0aW9uKAogICAgICB2b2lkIGYoaW50IHRhcmdldE9mZnNldCwgU291cmNlTG9jYXRpb24gc291cmNlTG9jYXRpb24pKSB7CiAgICBtYXJrZXJzLmZvckVhY2goKGludCB0YXJnZXRPZmZzZXQsIExpc3Q8U291cmNlTG9jYXRpb24+IHNvdXJjZUxvY2F0aW9ucykgewogICAgICBmb3IgKFNvdXJjZUxvY2F0aW9uIHNvdXJjZUxvY2F0aW9uIGluIHNvdXJjZUxvY2F0aW9ucykgewogICAgICAgIGYodGFyZ2V0T2Zmc2V0LCBzb3VyY2VMb2NhdGlvbik7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdm9pZCBfbWVyZ2UoX1NvdXJjZUxvY2F0aW9uc0ltcGwgb3RoZXIpIHsKICAgIGFzc2VydChuYW1lID09IG90aGVyLm5hbWUpOwogICAgaW50IGxlbmd0aCA9IGNvZGVPdXRwdXQubGVuZ3RoOwogICAgaWYgKG90aGVyLm1hcmtlcnMubGVuZ3RoID4gMCkgewogICAgICBvdGhlci5tYXJrZXJzCiAgICAgICAgICAuZm9yRWFjaCgoaW50IHRhcmdldE9mZnNldCwgTGlzdDxTb3VyY2VMb2NhdGlvbj4gc291cmNlTG9jYXRpb25zKSB7CiAgICAgICAgKG1hcmtlcnNbbGVuZ3RoICsgdGFyZ2V0T2Zmc2V0XSA/Pz0gPFNvdXJjZUxvY2F0aW9uPltdKQogICAgICAgICAgICAuYWRkQWxsKHNvdXJjZUxvY2F0aW9ucyk7CiAgICAgIH0pOwogICAgfQoKICAgIGlmIChvdGhlci5mcmFtZU1hcmtlcnMubGVuZ3RoID4gMCkgewogICAgICBvdGhlci5mcmFtZU1hcmtlcnMuZm9yRWFjaCgoaW50IHRhcmdldE9mZnNldCwgTGlzdDxGcmFtZUVudHJ5PiBmcmFtZXMpIHsKICAgICAgICAoZnJhbWVNYXJrZXJzW2xlbmd0aCArIHRhcmdldE9mZnNldF0gPz89IDxGcmFtZUVudHJ5PltdKS5hZGRBbGwoZnJhbWVzKTsKICAgICAgfSk7CiAgICB9CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBTb3VyY2VMb2NhdGlvbnNQcm92aWRlciB7CiAgLy8vIENyZWF0ZXMgYSBbU291cmNlTG9jYXRpb25zXSBtYXBwaW5nIGlkZW50aWZpZWQgYnkgW25hbWVdIGFuZCBhc3NvY2lhdGVzCiAgLy8vIGl0IHdpdGggdGhpcyBjb2RlIG91dHB1dC4KICBTb3VyY2VMb2NhdGlvbnMgY3JlYXRlU291cmNlTG9jYXRpb25zKFN0cmluZyBuYW1lKTsKCiAgLy8vIFJldHVybnMgdGhlIHNvdXJjZSBsb2NhdGlvbiBtYXBwaW5ncyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb2RlIG91dHB1dC4KICBJdGVyYWJsZTxTb3VyY2VMb2NhdGlvbnM+IGdldCBzb3VyY2VMb2NhdGlvbnM7Cn0KCmFic3RyYWN0IGNsYXNzIENvZGVPdXRwdXQgaW1wbGVtZW50cyBTb3VyY2VMb2NhdGlvbnNQcm92aWRlciB7CiAgLy8vIFdyaXRlIFt0ZXh0XSB0byB0aGlzIG91dHB1dC4KICAvLy8KICAvLy8gSWYgdGhlIG91dHB1dCBpcyBjbG9zZWQsIGEgW1N0YXRlRXJyb3JdIGlzIHRocm93bi4KICB2b2lkIGFkZChTdHJpbmcgdGV4dCk7CgogIC8vLyBBZGRzIHRoZSBjb250ZW50IG9mIFtidWZmZXJdIHRvIHRoZSBvdXRwdXQgYW5kIGFkZHMgaXRzIG1hcmtlcnMgdG8KICAvLy8gW21hcmtlcnNdLgogIC8vLwogIC8vLyBJZiB0aGUgb3V0cHV0IGlzIGNsb3NlZCwgYSBbU3RhdGVFcnJvcl0gaXMgdGhyb3duLgogIHZvaWQgYWRkQnVmZmVyKENvZGVCdWZmZXIgYnVmZmVyKTsKCiAgLy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGN1cnJlbnRseSB3cml0dGVuIHRvIHRoaXMgb3V0cHV0LgogIGludCBnZXQgbGVuZ3RoOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyBvdXRwdXQgaGFzIGJlZW4gY2xvc2VkLgogIGJvb2wgZ2V0IGlzQ2xvc2VkOwoKICAvLy8gQ2xvc2VzIHRoZSBvdXRwdXQuIEZ1cnRoZXIgd3JpdGVzIHdpbGwgY2F1c2UgYSBbU3RhdGVFcnJvcl0uCiAgdm9pZCBjbG9zZSgpOwp9CgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENvZGVPdXRwdXQgZXh0ZW5kcyBDb2RlT3V0cHV0IHsKICBNYXA8U3RyaW5nLCBfU291cmNlTG9jYXRpb25zSW1wbD4gc291cmNlTG9jYXRpb25zTWFwID0KICAgICAgPFN0cmluZywgX1NvdXJjZUxvY2F0aW9uc0ltcGw+e307CiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Nsb3NlZCA9IGZhbHNlOwoKICB2b2lkIF9hZGRJbnRlcm5hbChTdHJpbmcgdGV4dCk7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkKFN0cmluZyB0ZXh0KSB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkNvZGUgb3V0cHV0IGlzIGNsb3NlZC4gVHJ5aW5nIHRvIHdyaXRlICckdGV4dCcuIik7CiAgICB9CiAgICBfYWRkSW50ZXJuYWwodGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEJ1ZmZlcihDb2RlQnVmZmVyIG90aGVyKSB7CiAgICBvdGhlci5zb3VyY2VMb2NhdGlvbnNNYXAuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIF9Tb3VyY2VMb2NhdGlvbnNJbXBsIG90aGVyKSB7CiAgICAgIGNyZWF0ZVNvdXJjZUxvY2F0aW9ucyhuYW1lKS5fbWVyZ2Uob3RoZXIpOwogICAgfSk7CiAgICBpZiAoIW90aGVyLmlzQ2xvc2VkKSB7CiAgICAgIG90aGVyLmNsb3NlKCk7CiAgICB9CiAgICBfYWRkSW50ZXJuYWwob3RoZXIuZ2V0VGV4dCgpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xvc2UoKSB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkNvZGUgb3V0cHV0IGlzIGFscmVhZHkgY2xvc2VkLiIpOwogICAgfQogICAgaXNDbG9zZWQgPSB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8U291cmNlTG9jYXRpb25zPiBnZXQgc291cmNlTG9jYXRpb25zID0+IHNvdXJjZUxvY2F0aW9uc01hcC52YWx1ZXM7CgogIEBvdmVycmlkZQogIF9Tb3VyY2VMb2NhdGlvbnNJbXBsIGNyZWF0ZVNvdXJjZUxvY2F0aW9ucyhTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIHNvdXJjZUxvY2F0aW9uc01hcFtuYW1lXSA/Pz0gbmV3IF9Tb3VyY2VMb2NhdGlvbnNJbXBsKG5hbWUsIHRoaXMpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgQnVmZmVyZWRDb2RlT3V0cHV0IHsKICBTdHJpbmcgZ2V0VGV4dCgpOwp9CgovLy8gW0NvZGVPdXRwdXRdIHVzaW5nIGEgW1N0cmluZ0J1ZmZlcl0gYXMgYmFja2VuZC4KY2xhc3MgQ29kZUJ1ZmZlciBleHRlbmRzIEFic3RyYWN0Q29kZU91dHB1dCBpbXBsZW1lbnRzIEJ1ZmZlcmVkQ29kZU91dHB1dCB7CiAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBfYWRkSW50ZXJuYWwoU3RyaW5nIHRleHQpIHsKICAgIGJ1ZmZlci53cml0ZSh0ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IGJ1ZmZlci5sZW5ndGg7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXRUZXh0KCkgewogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgdGhyb3cgIkRvbid0IHVzZSBDb2RlQnVmZmVyLnRvU3RyaW5nKCkgc2luY2UgaXQgZHJvcHMgc291cmNlbWFwIGRhdGEuIjsKICB9Cn0KCi8vLyBbQ29kZU91dHB1dF0gdXNpbmcgYSBbQ29tcGlsYXRpb25PdXRwdXRdIGFzIGJhY2tlbmQuCmNsYXNzIFN0cmVhbUNvZGVPdXRwdXQgZXh0ZW5kcyBBYnN0cmFjdENvZGVPdXRwdXQgewogIEBvdmVycmlkZQogIGludCBsZW5ndGggPSAwOwogIGZpbmFsIE91dHB1dFNpbmsgb3V0cHV0OwogIGZpbmFsIExpc3Q8Q29kZU91dHB1dExpc3RlbmVyPiBfbGlzdGVuZXJzOwoKICBTdHJlYW1Db2RlT3V0cHV0KHRoaXMub3V0cHV0LCBbdGhpcy5fbGlzdGVuZXJzXSk7CgogIEBvdmVycmlkZQogIHZvaWQgX2FkZEludGVybmFsKFN0cmluZyB0ZXh0KSB7CiAgICBvdXRwdXQuYWRkKHRleHQpOwogICAgbGVuZ3RoICs9IHRleHQubGVuZ3RoOwogICAgaWYgKF9saXN0ZW5lcnMgIT0gbnVsbCkgewogICAgICBfbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lci5vblRleHQodGV4dCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpIHsKICAgIG91dHB1dC5jbG9zZSgpOwogICAgc3VwZXIuY2xvc2UoKTsKICAgIGlmIChfbGlzdGVuZXJzICE9IG51bGwpIHsKICAgICAgX2xpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIub25Eb25lKGxlbmd0aCkpOwogICAgfQogIH0KfQqA9ABOTjwBHQEiIgEyJDEcAUgbAgFKIgRJSjYhMBMBP0sBNQZEGxBQAUEGUC8BSR5AATAvAgE4DBUnSgxHATQBDEwvK0UpBAEMQCIvQUgEAQwwL0EtBAEMHkFPPykICAQBLCAkJBROQCYKBgEpT1EKBgQCASlOIDYBTTECAT8jBjkZAUkRBjklAUkSATUVAUMQAgE3OSgMGQEiAQwaFE8GGAQBDCVRMQgbFQYjBAEMERQ+BhUEAQxOAQw8TgQCASQUAgE0TCwBDCMYBAEMIwEMFR4EAQwWTAQCATk0DBIbLQE0AQwjFhsePwYEAQwRFBMeQQYEAgEocGFja2FnZTpjb21waWxlci9zcmMvaW8vY29kZV9vdXRwdXQuZGFydDRzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvc2Nhbm5lci9pbnRlcm5lci5kYXJ0guEvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLyoqCiAqIFRoZSBpbnRlcmZhY2UgYEludGVybmVyYCBkZWZpbmVzIHRoZSBiZWhhdmlvciBvZiBvYmplY3RzIHRoYXQgY2FuIGludGVybgogKiBzdHJpbmdzLgogKi8KYWJzdHJhY3QgY2xhc3MgSW50ZXJuZXIgewogIC8qKgogICAqIFJldHVybiBhIHN0cmluZyB0aGF0IGlzIGlkZW50aWNhbCB0byBhbGwgb2YgdGhlIG90aGVyIHN0cmluZ3MgdGhhdCBoYXZlCiAgICogYmVlbiBpbnRlcm5lZCB0aGF0IGFyZSBlcXVhbCB0byB0aGUgZ2l2ZW4gW3N0cmluZ10uCiAgICovCiAgU3RyaW5nIGludGVybihTdHJpbmcgc3RyaW5nKTsKfQoKLyoqCiAqIFRoZSBjbGFzcyBgTnVsbEludGVybmVyYCBpbXBsZW1lbnRzIGFuIGludGVybmVyIHRoYXQgZG9lcyBub3RoaW5nIChkb2VzIG5vdAogKiBhY3R1YWxseSBpbnRlcm4gYW55IHN0cmluZ3MpLgogKi8KY2xhc3MgTnVsbEludGVybmVyIGltcGxlbWVudHMgSW50ZXJuZXIgewogIEBvdmVycmlkZQogIFN0cmluZyBpbnRlcm4oU3RyaW5nIHN0cmluZykgPT4gc3RyaW5nOwp9ChoATk48AQRMDAQaBk05BiACAQRPIQQpDCoCAStwYWNrYWdlOmZyb250X2VuZC9zcmMvc2Nhbm5lci9pbnRlcm5lci5kYXJ0SHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvY2xhc3NfaGllcmFyY2h5X2J1aWxkZXIuZGFydMABXrAvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5jbGFzc19oaWVyYXJjaHlfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3MsCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRmllbGQsCiAgICAgICAgRnVuY3Rpb25Ob2RlLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgSW52YWxpZFR5cGUsCiAgICAgICAgTWVtYmVyLAogICAgICAgIE5hbWUsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFByb2NlZHVyZUtpbmQsCiAgICAgICAgU3VwZXJ0eXBlLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIHNob3cgQ2xhc3NIaWVyYXJjaHk7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgc2hvdyBDb3JlVHlwZXM7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBzaG93IFN1YnN0aXR1dGlvbjsKCmltcG9ydCAnLi4vZGlsbC9kaWxsX21lbWJlcl9idWlsZGVyLmRhcnQnIHNob3cgRGlsbE1lbWJlckJ1aWxkZXI7CgppbXBvcnQgJy4uL2xvYWRlci5kYXJ0JyBzaG93IExvYWRlcjsKCmltcG9ydCAnLi4vbWVzc2FnZXMuZGFydCcKICAgIHNob3cKICAgICAgICBMb2NhdGVkTWVzc2FnZSwKICAgICAgICBNZXNzYWdlLAogICAgICAgIG1lc3NhZ2VEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXIsCiAgICAgICAgbWVzc2FnZURlY2xhcmVkTWVtYmVyQ29uZmxpY3RzV2l0aEluaGVyaXRlZE1lbWJlckNhdXNlLAogICAgICAgIG1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3QsCiAgICAgICAgbWVzc2FnZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMSwKICAgICAgICBtZXNzYWdlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Q2F1c2UyLAogICAgICAgIG1lc3NhZ2VTdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0LAogICAgICAgIG1lc3NhZ2VTdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0Q2F1c2UsCiAgICAgICAgdGVtcGxhdGVDYW50SW5mZXJSZXR1cm5UeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMsCiAgICAgICAgdGVtcGxhdGVDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXMsCiAgICAgICAgdGVtcGxhdGVDb21iaW5lZE1lbWJlclNpZ25hdHVyZUZhaWxlZCwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbiwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbkNhdXNlLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uVXNlLAogICAgICAgIHRlbXBsYXRlTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2UsCiAgICAgICAgdGVtcGxhdGVNaXNzaW5nSW1wbGVtZW50YXRpb25Ob3RBYnN0cmFjdDsKCmltcG9ydCAnLi4vbmFtZXMuZGFydCcgc2hvdyBub1N1Y2hNZXRob2ROYW1lOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuaGFuZGxlZDsKCmltcG9ydCAnLi4vc2NvcGUuZGFydCcgc2hvdyBTY29wZTsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9sb2FkZXIuZGFydCcgc2hvdyBTb3VyY2VMb2FkZXI7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3N0YW5kYXJkX2JvdW5kcy5kYXJ0JyBzaG93IFN0YW5kYXJkQm91bmRzOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX2NvbnN0cmFpbnRfZ2F0aGVyZXIuZGFydCcKICAgIHNob3cgVHlwZUNvbnN0cmFpbnRHYXRoZXJlcjsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9pbmZlcnJlci5kYXJ0JyBzaG93IE1peGluSW5mZXJyZXI7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hLmRhcnQnIHNob3cgVW5rbm93blR5cGU7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hX2Vudmlyb25tZW50LmRhcnQnIHNob3cgVHlwZUNvbnN0cmFpbnQ7CgppbXBvcnQgJ2ZvcndhcmRpbmdfbm9kZS5kYXJ0JyBzaG93IEZvcndhcmRpbmdOb2RlOwoKaW1wb3J0ICdrZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIERlY2xhcmF0aW9uLAogICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIsCiAgICAgICAgSW1wbGljaXRGaWVsZFR5cGUsCiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIEZpZWxkQnVpbGRlciwKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyLAogICAgICAgIFByb2NlZHVyZUJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTWVtYmVyQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyOwoKaW1wb3J0ICd0eXBlcy5kYXJ0JyBzaG93IFR5cGVzOwoKY29uc3QgRGVidWdMb2dnZXIgZGVidWcgPQogICAgY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoImRlYnVnLmhpZXJhcmNoeSIpID8gY29uc3QgRGVidWdMb2dnZXIoKSA6IG51bGw7CgpjbGFzcyBEZWJ1Z0xvZ2dlciB7CiAgY29uc3QgRGVidWdMb2dnZXIoKTsKICB2b2lkIGxvZyhPYmplY3QgbWVzc2FnZSkgPT4gcHJpbnQobWVzc2FnZSk7Cn0KCmludCBjb21wYXJlRGVjbGFyYXRpb25zKERlY2xhcmF0aW9uIGEsIERlY2xhcmF0aW9uIGIpIHsKICByZXR1cm4gQ2xhc3NIaWVyYXJjaHkuY29tcGFyZU1lbWJlcnMoYS50YXJnZXQsIGIudGFyZ2V0KTsKfQoKUHJvY2VkdXJlS2luZCBtZW1iZXJLaW5kKE1lbWJlciBtZW1iZXIpIHsKICByZXR1cm4gbWVtYmVyIGlzIFByb2NlZHVyZSA/IG1lbWJlci5raW5kIDogbnVsbDsKfQoKYm9vbCBpc05hbWVWaXNpYmxlSW4oTmFtZSBuYW1lLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgcmV0dXJuICFuYW1lLmlzUHJpdmF0ZSB8fCBuYW1lLmxpYnJhcnkgPT0gbGlicmFyeS50YXJnZXQ7Cn0KCi8vLyBSZXR1cm5zIHRydWUgaWYgW2FdIGlzIGEgY2xhc3MgbWVtYmVyIGNvbmZsaWN0IHdpdGggW2JdLiAgW2FdIGlzIGFzc3VtZWQgdG8KLy8vIGJlIGRlY2xhcmVkIGluIHRoZSBjbGFzcywgW2JdIGlzIGFzc3VtZWQgdG8gYmUgaW5oZXJpdGVkLgovLy8KLy8vIFNlZSB0aGUgc2VjdGlvbiBuYW1lZCAiQ2xhc3MgTWVtYmVyIENvbmZsaWN0cyIgaW4gW0RhcnQgUHJvZ3JhbW1pbmcKLy8vIExhbmd1YWdlIFNwZWNpZmljYXRpb25dKAovLy8gLi4vLi4vLi4vLi4vLi4vLi4vZG9jcy9sYW5ndWFnZS9kYXJ0TGFuZ1NwZWMudGV4I2NsYXNzTWVtYmVyQ29uZmxpY3RzKS4KYm9vbCBpc0luaGVyaXRhbmNlQ29uZmxpY3QoRGVjbGFyYXRpb24gYSwgRGVjbGFyYXRpb24gYikgewogIGlmIChhLmlzU3RhdGljKSByZXR1cm4gdHJ1ZTsKICBpZiAobWVtYmVyS2luZChhLnRhcmdldCkgPT0gbWVtYmVyS2luZChiLnRhcmdldCkpIHJldHVybiBmYWxzZTsKICBpZiAoYS5pc0ZpZWxkKSByZXR1cm4gIShiLmlzRmllbGQgfHwgYi5pc0dldHRlciB8fCBiLmlzU2V0dGVyKTsKICBpZiAoYi5pc0ZpZWxkKSByZXR1cm4gIShhLmlzRmllbGQgfHwgYS5pc0dldHRlciB8fCBhLmlzU2V0dGVyKTsKICBpZiAoYS5pc1NldHRlcikgcmV0dXJuICEoYi5pc0dldHRlciB8fCBiLmlzU2V0dGVyKTsKICBpZiAoYi5pc1NldHRlcikgcmV0dXJuICEoYS5pc0dldHRlciB8fCBhLmlzU2V0dGVyKTsKICBpZiAoYSBpcyBJbnRlcmZhY2VDb25mbGljdCB8fCBiIGlzIEludGVyZmFjZUNvbmZsaWN0KSByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgaW1wbGllc1NldHRlcihEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbikgewogIHJldHVybiBkZWNsYXJhdGlvbi5pc0ZpZWxkICYmICEoZGVjbGFyYXRpb24uaXNGaW5hbCB8fCBkZWNsYXJhdGlvbi5pc0NvbnN0KTsKfQoKYm9vbCBoYXNTYW1lU2lnbmF0dXJlKEZ1bmN0aW9uTm9kZSBhLCBGdW5jdGlvbk5vZGUgYikgewogIExpc3Q8VHlwZVBhcmFtZXRlcj4gYVR5cGVQYXJhbWV0ZXJzID0gYS50eXBlUGFyYW1ldGVyczsKICBMaXN0PFR5cGVQYXJhbWV0ZXI+IGJUeXBlUGFyYW1ldGVycyA9IGIudHlwZVBhcmFtZXRlcnM7CiAgaW50IHR5cGVQYXJhbWV0ZXJDb3VudCA9IGFUeXBlUGFyYW1ldGVycy5sZW5ndGg7CiAgaWYgKHR5cGVQYXJhbWV0ZXJDb3VudCAhPSBiVHlwZVBhcmFtZXRlcnMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbjsKICBpZiAodHlwZVBhcmFtZXRlckNvdW50ICE9IDApIHsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVzID0gbmV3IExpc3Q8RGFydFR5cGU+KHR5cGVQYXJhbWV0ZXJDb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJDb3VudDsgaSsrKSB7CiAgICAgIHR5cGVzW2ldID0gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKGFUeXBlUGFyYW1ldGVyc1tpXSk7CiAgICB9CiAgICBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKGJUeXBlUGFyYW1ldGVycywgdHlwZXMpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVyQ291bnQ7IGkrKykgewogICAgICBEYXJ0VHlwZSBhQm91bmQgPSBhVHlwZVBhcmFtZXRlcnNbaV0uYm91bmQ7CiAgICAgIERhcnRUeXBlIGJCb3VuZCA9IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShiVHlwZVBhcmFtZXRlcnNbaV0uYm91bmQpOwogICAgICBpZiAoYUJvdW5kICE9IGJCb3VuZCkgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgaWYgKGEucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCAhPSBiLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHJldHVybiBmYWxzZTsKICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IGFQb3NpdGlvbmFsUGFyYW1ldGVycyA9IGEucG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBiUG9zaXRpb25hbFBhcmFtZXRlcnMgPSBiLnBvc2l0aW9uYWxQYXJhbWV0ZXJzOwogIGlmIChhUG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoICE9IGJQb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBhUG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gYVBhcmFtZXRlciA9IGFQb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gYlBhcmFtZXRlciA9IGJQb3NpdGlvbmFsUGFyYW1ldGVyc1tpXTsKICAgIGlmIChhUGFyYW1ldGVyLmlzQ292YXJpYW50ICE9IGJQYXJhbWV0ZXIuaXNDb3ZhcmlhbnQpIHJldHVybiBmYWxzZTsKICAgIERhcnRUeXBlIGFUeXBlID0gYVBhcmFtZXRlci50eXBlOwogICAgRGFydFR5cGUgYlR5cGUgPSBiUGFyYW1ldGVyLnR5cGU7CiAgICBpZiAoc3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgYlR5cGUgPSBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoYlR5cGUpOwogICAgfQogICAgaWYgKGFUeXBlICE9IGJUeXBlKSByZXR1cm4gZmFsc2U7CiAgfQoKICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IGFOYW1lZFBhcmFtZXRlcnMgPSBhLm5hbWVkUGFyYW1ldGVyczsKICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IGJOYW1lZFBhcmFtZXRlcnMgPSBiLm5hbWVkUGFyYW1ldGVyczsKICBpZiAoYU5hbWVkUGFyYW1ldGVycy5sZW5ndGggIT0gYk5hbWVkUGFyYW1ldGVycy5sZW5ndGgpIHJldHVybiBmYWxzZTsKICBmb3IgKGludCBpID0gMDsgaSA8IGFOYW1lZFBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gYVBhcmFtZXRlciA9IGFOYW1lZFBhcmFtZXRlcnNbaV07CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGJQYXJhbWV0ZXIgPSBiTmFtZWRQYXJhbWV0ZXJzW2ldOwogICAgaWYgKGFQYXJhbWV0ZXIuaXNDb3ZhcmlhbnQgIT0gYlBhcmFtZXRlci5pc0NvdmFyaWFudCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGFQYXJhbWV0ZXIubmFtZSAhPSBiUGFyYW1ldGVyLm5hbWUpIHJldHVybiBmYWxzZTsKICAgIERhcnRUeXBlIGFUeXBlID0gYVBhcmFtZXRlci50eXBlOwogICAgRGFydFR5cGUgYlR5cGUgPSBiUGFyYW1ldGVyLnR5cGU7CiAgICBpZiAoc3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgYlR5cGUgPSBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoYlR5cGUpOwogICAgfQogICAgaWYgKGFUeXBlICE9IGJUeXBlKSByZXR1cm4gZmFsc2U7CiAgfQoKICBEYXJ0VHlwZSBhUmV0dXJuVHlwZSA9IGEucmV0dXJuVHlwZTsKICBEYXJ0VHlwZSBiUmV0dXJuVHlwZSA9IGIucmV0dXJuVHlwZTsKICBpZiAoc3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgIGJSZXR1cm5UeXBlID0gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGJSZXR1cm5UeXBlKTsKICB9CgogIHJldHVybiBhUmV0dXJuVHlwZSA9PSBiUmV0dXJuVHlwZTsKfQoKY2xhc3MgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIHsKICBmaW5hbCBNYXA8Q2xhc3MsIENsYXNzSGllcmFyY2h5Tm9kZT4gbm9kZXMgPSA8Q2xhc3MsIENsYXNzSGllcmFyY2h5Tm9kZT57fTsKCiAgZmluYWwgQ2xhc3NCdWlsZGVyIG9iamVjdENsYXNzOwoKICBmaW5hbCBMb2FkZXIgbG9hZGVyOwoKICBmaW5hbCBDbGFzcyBvYmplY3RLZXJuZWxDbGFzczsKCiAgZmluYWwgQ2xhc3MgZnV0dXJlS2VybmVsQ2xhc3M7CgogIGZpbmFsIENsYXNzIGZ1dHVyZU9yS2VybmVsQ2xhc3M7CgogIGZpbmFsIENsYXNzIGZ1bmN0aW9uS2VybmVsQ2xhc3M7CgogIGZpbmFsIENsYXNzIG51bGxLZXJuZWxDbGFzczsKCiAgZmluYWwgTGlzdDxEZWxheWVkT3ZlcnJpZGVDaGVjaz4gb3ZlcnJpZGVDaGVja3MgPSA8RGVsYXllZE92ZXJyaWRlQ2hlY2s+W107CgogIGZpbmFsIExpc3Q8RGVsYXllZE1lbWJlcj4gZGVsYXllZE1lbWJlckNoZWNrcyA9IDxEZWxheWVkTWVtYmVyPltdOwoKICAvLyBUT0RPKGFoZSk6IFJlbW92ZSB0aGlzLgogIGZpbmFsIENvcmVUeXBlcyBjb3JlVHlwZXM7CgogIFR5cGVzIHR5cGVzOwoKICBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIodGhpcy5vYmplY3RDbGFzcywgdGhpcy5sb2FkZXIsIHRoaXMuY29yZVR5cGVzKQogICAgICA6IG9iamVjdEtlcm5lbENsYXNzID0gb2JqZWN0Q2xhc3MudGFyZ2V0LAogICAgICAgIGZ1dHVyZUtlcm5lbENsYXNzID0gY29yZVR5cGVzLmZ1dHVyZUNsYXNzLAogICAgICAgIGZ1dHVyZU9yS2VybmVsQ2xhc3MgPSBjb3JlVHlwZXMuZnV0dXJlT3JDbGFzcywKICAgICAgICBmdW5jdGlvbktlcm5lbENsYXNzID0gY29yZVR5cGVzLmZ1bmN0aW9uQ2xhc3MsCiAgICAgICAgbnVsbEtlcm5lbENsYXNzID0gY29yZVR5cGVzLm51bGxDbGFzcyB7CiAgICB0eXBlcyA9IG5ldyBUeXBlcyh0aGlzKTsKICB9CgogIENsYXNzSGllcmFyY2h5Tm9kZSBnZXROb2RlRnJvbUNsYXNzKENsYXNzQnVpbGRlciBjbHMpIHsKICAgIHJldHVybiBub2Rlc1tjbHMudGFyZ2V0XSA/Pz0KICAgICAgICBuZXcgQ2xhc3NIaWVyYXJjaHlOb2RlQnVpbGRlcih0aGlzLCBjbHMpLmJ1aWxkKCk7CiAgfQoKICBDbGFzc0hpZXJhcmNoeU5vZGUgZ2V0Tm9kZUZyb21UeXBlKFR5cGVCdWlsZGVyIHR5cGUpIHsKICAgIENsYXNzQnVpbGRlciBjbHMgPSBnZXRDbGFzcyh0eXBlKTsKICAgIHJldHVybiBjbHMgPT0gbnVsbCA/IG51bGwgOiBnZXROb2RlRnJvbUNsYXNzKGNscyk7CiAgfQoKICBDbGFzc0hpZXJhcmNoeU5vZGUgZ2V0Tm9kZUZyb21LZXJuZWxDbGFzcyhDbGFzcyBjbHMpIHsKICAgIHJldHVybiBub2Rlc1tjbHNdID8/CiAgICAgICAgZ2V0Tm9kZUZyb21DbGFzcyhsb2FkZXIuY29tcHV0ZUNsYXNzQnVpbGRlckZyb21UYXJnZXRDbGFzcyhjbHMpKTsKICB9CgogIFR5cGVCdWlsZGVyIGFzU3VwZXJ0eXBlT2YoQ2xhc3MgY2xzLCBDbGFzcyBzdXBlcnR5cGUpIHsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBjbHNOb2RlID0gZ2V0Tm9kZUZyb21LZXJuZWxDbGFzcyhjbHMpOwogICAgaWYgKGNscyA9PSBzdXBlcnR5cGUpIHsKICAgICAgcmV0dXJuIG5ldyBOYW1lZFR5cGVCdWlsZGVyKGNsc05vZGUuY2xzLm5hbWUsIG51bGwpLi5iaW5kKGNsc05vZGUuY2xzKTsKICAgIH0KICAgIENsYXNzSGllcmFyY2h5Tm9kZSBzdXBlcnR5cGVOb2RlID0gZ2V0Tm9kZUZyb21LZXJuZWxDbGFzcyhzdXBlcnR5cGUpOwogICAgTGlzdDxUeXBlQnVpbGRlcj4gc3VwZXJ0eXBlcyA9IGNsc05vZGUuc3VwZXJjbGFzc2VzOwogICAgaW50IGRlcHRoID0gc3VwZXJ0eXBlTm9kZS5kZXB0aDsKICAgIERlY2xhcmF0aW9uIHN1cGVydHlwZURlY2xhcmF0aW9uID0gc3VwZXJ0eXBlTm9kZS5jbHM7CiAgICBpZiAoZGVwdGggPCBzdXBlcnR5cGVzLmxlbmd0aCkgewogICAgICBUeXBlQnVpbGRlciBhc1N1cGVydHlwZU9mID0gc3VwZXJ0eXBlc1tkZXB0aF07CiAgICAgIGlmIChhc1N1cGVydHlwZU9mLmRlY2xhcmF0aW9uID09IHN1cGVydHlwZURlY2xhcmF0aW9uKQogICAgICAgIHJldHVybiBhc1N1cGVydHlwZU9mOwogICAgfQogICAgc3VwZXJ0eXBlcyA9IGNsc05vZGUuaW50ZXJmYWNlczsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3VwZXJ0eXBlcy5sZW5ndGg7IGkrKykgewogICAgICBUeXBlQnVpbGRlciB0eXBlID0gc3VwZXJ0eXBlc1tpXTsKICAgICAgaWYgKHR5cGUuZGVjbGFyYXRpb24gPT0gc3VwZXJ0eXBlRGVjbGFyYXRpb24pIHJldHVybiB0eXBlOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBJbnRlcmZhY2VUeXBlIGdldEtlcm5lbFR5cGVBc0luc3RhbmNlT2YoCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgQ2xhc3Mga2VybmVsQ2xhc3MgPSB0eXBlLmNsYXNzTm9kZTsKICAgIGlmIChrZXJuZWxDbGFzcyA9PSBzdXBlcmNsYXNzKSByZXR1cm4gdHlwZTsKICAgIGlmIChrZXJuZWxDbGFzcyA9PSBudWxsS2VybmVsQ2xhc3MpIHsKICAgICAgaWYgKHN1cGVyY2xhc3MudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICAgIHJldHVybiBzdXBlcmNsYXNzLnJhd1R5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVGhpcyBpcyBhIHNhZmUgZmFsbC1iYWNrIGZvciBkZWFsaW5nIHdpdGggYE51bGxgLiBJdCB3aWxsIGxpa2VseSBiZQogICAgICAgIC8vIGZhc3RlciB0byBjaGVjayBmb3IgYE51bGxgIGJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kLgogICAgICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZSgKICAgICAgICAgICAgc3VwZXJjbGFzcywKICAgICAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCgKICAgICAgICAgICAgICAgIHN1cGVyY2xhc3MudHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBudWxsS2VybmVsQ2xhc3MucmF3VHlwZSkpOwogICAgICB9CiAgICB9CiAgICBOYW1lZFR5cGVCdWlsZGVyIHN1cGVydHlwZSA9IGFzU3VwZXJ0eXBlT2Yoa2VybmVsQ2xhc3MsIHN1cGVyY2xhc3MpOwogICAgaWYgKHN1cGVydHlwZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmIChzdXBlcnR5cGUuYXJndW1lbnRzID09IG51bGwgJiYgc3VwZXJjbGFzcy50eXBlUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgIHJldHVybiBzdXBlcmNsYXNzLnJhd1R5cGU7CiAgICB9CiAgICByZXR1cm4gU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKHR5cGUpCiAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHN1cGVydHlwZS5idWlsZChudWxsKSk7CiAgfQoKICBJbnRlcmZhY2VUeXBlIGdldEtlcm5lbExlZ2FjeUxlYXN0VXBwZXJCb3VuZCgKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlMSwgSW50ZXJmYWNlVHlwZSB0eXBlMikgewogICAgaWYgKHR5cGUxID09IHR5cGUyKSByZXR1cm4gdHlwZTE7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZTEgPSBnZXROb2RlRnJvbUtlcm5lbENsYXNzKHR5cGUxLmNsYXNzTm9kZSk7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZTIgPSBnZXROb2RlRnJvbUtlcm5lbENsYXNzKHR5cGUyLmNsYXNzTm9kZSk7CiAgICBTZXQ8Q2xhc3NIaWVyYXJjaHlOb2RlPiBub2RlczEgPSBub2RlMS5jb21wdXRlQWxsU3VwZXJOb2Rlcyh0aGlzKS50b1NldCgpOwogICAgTGlzdDxDbGFzc0hpZXJhcmNoeU5vZGU+IG5vZGVzMiA9IG5vZGUyLmNvbXB1dGVBbGxTdXBlck5vZGVzKHRoaXMpOwogICAgTGlzdDxDbGFzc0hpZXJhcmNoeU5vZGU+IGNvbW1vbiA9IDxDbGFzc0hpZXJhcmNoeU5vZGU+W107CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlczIubGVuZ3RoOyBpKyspIHsKICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUgPSBub2RlczJbaV07CiAgICAgIGlmIChub2RlID09IG51bGwpIGNvbnRpbnVlOwogICAgICBpZiAobm9kZXMxLmNvbnRhaW5zKG5vZGUpKSB7CiAgICAgICAgRGFydFR5cGUgY2FuZGlkYXRlMSA9IGdldEtlcm5lbFR5cGVBc0luc3RhbmNlT2YodHlwZTEsIG5vZGUuY2xzLnRhcmdldCk7CiAgICAgICAgRGFydFR5cGUgY2FuZGlkYXRlMiA9IGdldEtlcm5lbFR5cGVBc0luc3RhbmNlT2YodHlwZTIsIG5vZGUuY2xzLnRhcmdldCk7CiAgICAgICAgaWYgKGNhbmRpZGF0ZTEgPT0gY2FuZGlkYXRlMikgewogICAgICAgICAgY29tbW9uLmFkZChub2RlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBpZiAoY29tbW9uLmxlbmd0aCA9PSAxKSByZXR1cm4gb2JqZWN0S2VybmVsQ2xhc3MucmF3VHlwZTsKICAgIGNvbW1vbi5zb3J0KENsYXNzSGllcmFyY2h5Tm9kZS5jb21wYXJlTWF4SW5oZXJpdGFuY2VQYXRoKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbW1vbi5sZW5ndGggLSAxOyBpKyspIHsKICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUgPSBjb21tb25baV07CiAgICAgIGlmIChub2RlLm1heEluaGVyaXRhbmNlUGF0aCAhPSBjb21tb25baSArIDFdLm1heEluaGVyaXRhbmNlUGF0aCkgewogICAgICAgIHJldHVybiBnZXRLZXJuZWxUeXBlQXNJbnN0YW5jZU9mKHR5cGUxLCBub2RlLmNscy50YXJnZXQpOwogICAgICB9IGVsc2UgewogICAgICAgIGRvIHsKICAgICAgICAgIGkrKzsKICAgICAgICB9IHdoaWxlIChub2RlLm1heEluaGVyaXRhbmNlUGF0aCA9PSBjb21tb25baSArIDFdLm1heEluaGVyaXRhbmNlUGF0aCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBvYmplY3RLZXJuZWxDbGFzcy5yYXdUeXBlOwogIH0KCiAgTWVtYmVyIGdldEludGVyZmFjZU1lbWJlcktlcm5lbChDbGFzcyBjbHMsIE5hbWUgbmFtZSwgYm9vbCBpc1NldHRlcikgewogICAgcmV0dXJuIGdldE5vZGVGcm9tS2VybmVsQ2xhc3MoY2xzKQogICAgICAgIC5nZXRJbnRlcmZhY2VNZW1iZXIobmFtZSwgaXNTZXR0ZXIpCiAgICAgICAgPy50YXJnZXQ7CiAgfQoKICBNZW1iZXIgZ2V0RGlzcGF0Y2hUYXJnZXRLZXJuZWwoQ2xhc3MgY2xzLCBOYW1lIG5hbWUsIGJvb2wgaXNTZXR0ZXIpIHsKICAgIHJldHVybiBnZXROb2RlRnJvbUtlcm5lbENsYXNzKGNscykKICAgICAgICAuZ2V0RGlzcGF0Y2hUYXJnZXQobmFtZSwgaXNTZXR0ZXIpCiAgICAgICAgPy50YXJnZXQ7CiAgfQoKICBNZW1iZXIgZ2V0Q29tYmluZWRNZW1iZXJTaWduYXR1cmVLZXJuZWwoQ2xhc3MgY2xzLCBOYW1lIG5hbWUsIGJvb2wgaXNTZXR0ZXIsCiAgICAgIGludCBjaGFyT2Zmc2V0LCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICBEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiA9CiAgICAgICAgZ2V0Tm9kZUZyb21LZXJuZWxDbGFzcyhjbHMpLmdldEludGVyZmFjZU1lbWJlcihuYW1lLCBpc1NldHRlcik7CiAgICBpZiAoZGVjbGFyYXRpb24/LmlzU3RhdGljID8/IHRydWUpIHJldHVybiBudWxsOwogICAgaWYgKGRlY2xhcmF0aW9uLm5leHQgIT0gbnVsbCkgewogICAgICBsaWJyYXJ5Py5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2Uud2l0aEFyZ3VtZW50cyhuYW1lLm5hbWUpLAogICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgIG5hbWUubmFtZS5sZW5ndGgsCiAgICAgICAgICBsaWJyYXJ5LmZpbGVVcmkpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChkZWNsYXJhdGlvbiBpcyBEZWxheWVkTWVtYmVyKSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi5jaGVjayh0aGlzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi50YXJnZXQ7CiAgICB9CiAgfQoKICBzdGF0aWMgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGJ1aWxkKENsYXNzQnVpbGRlciBvYmplY3RDbGFzcywKICAgICAgTGlzdDxDbGFzc0J1aWxkZXI+IGNsYXNzZXMsIFNvdXJjZUxvYWRlciBsb2FkZXIsIENvcmVUeXBlcyBjb3JlVHlwZXMpIHsKICAgIENsYXNzSGllcmFyY2h5QnVpbGRlciBoaWVyYXJjaHkgPQogICAgICAgIG5ldyBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIob2JqZWN0Q2xhc3MsIGxvYWRlciwgY29yZVR5cGVzKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewogICAgICBDbGFzc0J1aWxkZXIgY2xzID0gY2xhc3Nlc1tpXTsKICAgICAgaWYgKCFjbHMuaXNQYXRjaCkgewogICAgICAgIGhpZXJhcmNoeS5ub2Rlc1tjbHMudGFyZ2V0XSA9CiAgICAgICAgICAgIG5ldyBDbGFzc0hpZXJhcmNoeU5vZGVCdWlsZGVyKGhpZXJhcmNoeSwgY2xzKS5idWlsZCgpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRPRE8oYWhlKTogTWVyZ2UgdGhlIGluamVjdGVkIG1lbWJlcnMgb2YgcGF0Y2ggaW50byB0aGUgaGllcmFyY2h5CiAgICAgICAgLy8gbm9kZSBvZiBgY2xzLm9yaWdpbmAuCiAgICAgIH0KICAgIH0KICAgIHJldHVybiBoaWVyYXJjaHk7CiAgfQp9CgpjbGFzcyBDbGFzc0hpZXJhcmNoeU5vZGVCdWlsZGVyIHsKICBmaW5hbCBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5OwoKICBmaW5hbCBDbGFzc0J1aWxkZXIgY2xzOwoKICBib29sIGhhc05vU3VjaE1ldGhvZCA9IGZhbHNlOwoKICBMaXN0PERlY2xhcmF0aW9uPiBhYnN0cmFjdE1lbWJlcnMgPSBudWxsOwoKICBDbGFzc0hpZXJhcmNoeU5vZGVCdWlsZGVyKHRoaXMuaGllcmFyY2h5LCB0aGlzLmNscyk7CgogIENsYXNzQnVpbGRlciBnZXQgb2JqZWN0Q2xhc3MgPT4gaGllcmFyY2h5Lm9iamVjdENsYXNzOwoKICBmaW5hbCBNYXA8Q2xhc3MsIFN1YnN0aXR1dGlvbj4gc3Vic3RpdHV0aW9ucyA9IDxDbGFzcywgU3Vic3RpdHV0aW9uPnt9OwoKICAvLy8gV2hlbiBtZXJnaW5nIGBhTGlzdGAgYW5kIGBiTGlzdGAsIFthXSAoZnJvbSBgYUxpc3RgKSBhbmQgW2JdIChmcm9tCiAgLy8vIGBiTGlzdGApIGVhY2ggaGF2ZSB0aGUgc2FtZSBuYW1lLgogIC8vLwogIC8vLyBJZiBbbWVyZ2VLaW5kXSBpcyBgTWVyZ2VLaW5kLnN1cGVyY2xhc3NgLCBbYV0gc2hvdWxkIG92ZXJyaWRlIFtiXS4KICAvLy8KICAvLy8gSWYgW21lcmdlS2luZF0gaXMgYE1lcmdlS2luZC5pbnRlcmZhY2VzYCwgd2UgbmVlZCB0byByZWNvcmQgdGhlbSBhbmQKICAvLy8gc29sdmUgdGhlIGNvbmZsaWN0IGxhdGVyLgogIC8vLwogIC8vLyBJZiBbbWVyZ2VLaW5kXSBpcyBgTWVyZ2VLaW5kLnN1cGVydHlwZXNgLCBbYV0gc2hvdWxkIGltcGxlbWVudCBbYl0sIGFuZAogIC8vLyBbYl0gaXMgaW1wbGljaXRseSBhYnN0cmFjdC4KICBEZWNsYXJhdGlvbiBoYW5kbGVNZXJnZUNvbmZsaWN0KAogICAgICBEZWNsYXJhdGlvbiBhLCBEZWNsYXJhdGlvbiBiLCBNZXJnZUtpbmQgbWVyZ2VLaW5kKSB7CiAgICBkZWJ1Zz8ubG9nKAogICAgICAgICJoYW5kbGVNZXJnZUNvbmZsaWN0OiAke2Z1bGxOYW1lKGEpfSAke2Z1bGxOYW1lKGIpfSAke21lcmdlS2luZH0iKTsKICAgIC8vIFRPRE8oYWhlKTogRW5hYmxlIHRoaXMgb3B0aW1pemF0aW9uLCBidXQgYmUgY2FyZWZ1bCBhYm91dCBhYnN0cmFjdAogICAgLy8gbWV0aG9kcyBvdmVycmlkaW5nIGNvbmNyZXRlIG1ldGhvZHMuCiAgICAvLyBpZiAoY2xzIGlzIERpbGxDbGFzc0J1aWxkZXIpIHJldHVybiBhOwogICAgaWYgKGEgPT0gYikgcmV0dXJuIGE7CiAgICBpZiAoYS5uZXh0ICE9IG51bGwgfHwgYi5uZXh0ICE9IG51bGwpIHsKICAgICAgLy8gRG9uJ3QgY2hlY2sgb3ZlcnJpZGVzIGludm9sdmluZyBkdXBsaWNhdGVkIG1lbWJlcnMuCiAgICAgIHJldHVybiBhOwogICAgfQogICAgRGVjbGFyYXRpb24gcmVzdWx0ID0gY2hlY2tJbmhlcml0YW5jZUNvbmZsaWN0KGEsIGIpOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSByZXR1cm4gcmVzdWx0OwogICAgcmVzdWx0ID0gYTsKICAgIHN3aXRjaCAobWVyZ2VLaW5kKSB7CiAgICAgIGNhc2UgTWVyZ2VLaW5kLnN1cGVyY2xhc3NNZW1iZXJzOgogICAgICBjYXNlIE1lcmdlS2luZC5zdXBlcmNsYXNzU2V0dGVyczoKICAgICAgICAvLyBbYV0gaXMgYSBtZXRob2QgZGVjbGFyZWQgaW4gW2Nsc10uIFRoaXMgbWVhbnMgaXQgZGVmaW5lcyB0aGUKICAgICAgICAvLyBpbnRlcmZhY2Ugb2YgdGhpcyBjbGFzcyByZWdhcmRsZXNzIGlmIGl0cyBhYnN0cmFjdC4KICAgICAgICBkZWJ1Zz8ubG9nKAogICAgICAgICAgICAic3VwZXJjbGFzczogY2hlY2tWYWxpZE92ZXJyaWRlKCR7Y2xzLmZ1bGxOYW1lRm9yRXJyb3JzfSwgJHtmdWxsTmFtZShhKX0sICR7ZnVsbE5hbWUoYil9KSIpOwogICAgICAgIGNoZWNrVmFsaWRPdmVycmlkZSgKICAgICAgICAgICAgYSwgQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb24uc2VsZWN0QWJzdHJhY3QoYikpOwoKICAgICAgICBpZiAoaXNBYnN0cmFjdChhKSkgewogICAgICAgICAgaWYgKGlzQWJzdHJhY3QoYikpIHsKICAgICAgICAgICAgcmVjb3JkQWJzdHJhY3RNZW1iZXIoYSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIWNscy5pc0Fic3RyYWN0KSB7CiAgICAgICAgICAgICAgLy8gVGhlIGludGVyZmFjZSBvZiB0aGlzIGNsYXNzIGlzIFthXS4gQnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcwogICAgICAgICAgICAgIC8vIFtiXS4gU28gW2JdIG11c3QgaW1wbGVtZW50IFthXSwgdW5sZXNzIFtjbHNdIGlzIGFic3RyYWN0LgogICAgICAgICAgICAgIGNoZWNrVmFsaWRPdmVycmlkZShiLCBhKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXN1bHQgPSBuZXcgQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb24oCiAgICAgICAgICAgICAgICBjbHMsCiAgICAgICAgICAgICAgICBhLAogICAgICAgICAgICAgICAgQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb24uc2VsZWN0Q29uY3JldGUoYiksCiAgICAgICAgICAgICAgICBtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLnN1cGVyY2xhc3NTZXR0ZXJzLAogICAgICAgICAgICAgICAgY2xzLmxpYnJhcnkubG9hZGVyID09IGhpZXJhcmNoeS5sb2FkZXIpOwogICAgICAgICAgICBoaWVyYXJjaHkuZGVsYXllZE1lbWJlckNoZWNrcy5hZGQocmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGNscy5pc01peGluQXBwbGljYXRpb24gJiYgYS5wYXJlbnQgIT0gY2xzKSB7CiAgICAgICAgICByZXN1bHQgPSBJbmhlcml0ZWRJbXBsZW1lbnRhdGlvbkludGVyZmFjZUNvbmZsaWN0LmNvbWJpbmVkKAogICAgICAgICAgICAgIGNscywKICAgICAgICAgICAgICBhLAogICAgICAgICAgICAgIGIsCiAgICAgICAgICAgICAgbWVyZ2VLaW5kID09IE1lcmdlS2luZC5zdXBlcmNsYXNzU2V0dGVycywKICAgICAgICAgICAgICBjbHMubGlicmFyeS5sb2FkZXIgPT0gaGllcmFyY2h5LmxvYWRlciwKICAgICAgICAgICAgICBpc0luaGVyaXRhYmxlQ29uZmxpY3Q6IGZhbHNlKTsKICAgICAgICAgIGlmIChyZXN1bHQgaXMgRGVsYXllZE1lbWJlcikgewogICAgICAgICAgICBoaWVyYXJjaHkuZGVsYXllZE1lbWJlckNoZWNrcy5hZGQocmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIE1lbWJlciB0YXJnZXQgPSByZXN1bHQudGFyZ2V0OwogICAgICAgIGlmICh0YXJnZXQuZW5jbG9zaW5nQ2xhc3MgIT0gb2JqZWN0Q2xhc3MuY2xzICYmCiAgICAgICAgICAgIHRhcmdldC5uYW1lID09IG5vU3VjaE1ldGhvZE5hbWUpIHsKICAgICAgICAgIGhhc05vU3VjaE1ldGhvZCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBNZXJnZUtpbmQubWVtYmVyc1dpdGhTZXR0ZXJzOgogICAgICBjYXNlIE1lcmdlS2luZC5zZXR0ZXJzV2l0aE1lbWJlcnM6CiAgICAgICAgaWYgKGEucGFyZW50ID09IGNscyAmJiBiLnBhcmVudCAhPSBjbHMpIHsKICAgICAgICAgIGlmIChhIGlzIEZpZWxkQnVpbGRlcikgewogICAgICAgICAgICBpZiAoYS5pc0ZpbmFsICYmIGIuaXNTZXR0ZXIpIHsKICAgICAgICAgICAgICBoaWVyYXJjaHkub3ZlcnJpZGVDaGVja3MuYWRkKG5ldyBEZWxheWVkT3ZlcnJpZGVDaGVjayhjbHMsIGEsIGIpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBpZiAoIWluZmVyRmllbGRUeXBlcyhhLCBiKSkgewogICAgICAgICAgICAgICAgaGllcmFyY2h5Lm92ZXJyaWRlQ2hlY2tzCiAgICAgICAgICAgICAgICAgICAgLmFkZChuZXcgRGVsYXllZE92ZXJyaWRlQ2hlY2soY2xzLCBhLCBiKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGEgaXMgUHJvY2VkdXJlQnVpbGRlcikgewogICAgICAgICAgICBpZiAoIWluZmVyTWV0aG9kVHlwZXMoYSwgYikpIHsKICAgICAgICAgICAgICBoaWVyYXJjaHkub3ZlcnJpZGVDaGVja3MuYWRkKG5ldyBEZWxheWVkT3ZlcnJpZGVDaGVjayhjbHMsIGEsIGIpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgTWVyZ2VLaW5kLmludGVyZmFjZXNNZW1iZXJzOgogICAgICAgIHJlc3VsdCA9IEludGVyZmFjZUNvbmZsaWN0LmNvbWJpbmVkKAogICAgICAgICAgICBjbHMsIGEsIGIsIGZhbHNlLCBjbHMubGlicmFyeS5sb2FkZXIgPT0gaGllcmFyY2h5LmxvYWRlcik7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIE1lcmdlS2luZC5pbnRlcmZhY2VzU2V0dGVyczoKICAgICAgICByZXN1bHQgPSBJbnRlcmZhY2VDb25mbGljdC5jb21iaW5lZCgKICAgICAgICAgICAgY2xzLCBhLCBiLCB0cnVlLCBjbHMubGlicmFyeS5sb2FkZXIgPT0gaGllcmFyY2h5LmxvYWRlcik7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIE1lcmdlS2luZC5zdXBlcnR5cGVzTWVtYmVyczoKICAgICAgY2FzZSBNZXJnZUtpbmQuc3VwZXJ0eXBlc1NldHRlcnM6CiAgICAgICAgLy8gW2JdIGlzIGluaGVyaXRlZCBmcm9tIGFuIGludGVyZmFjZSBzbyBpdCBpcyBpbXBsaWNpdGx5IGFic3RyYWN0LgoKICAgICAgICBhID0gQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb24uc2VsZWN0QWJzdHJhY3QoYSk7CiAgICAgICAgYiA9IEFic3RyYWN0TWVtYmVyT3ZlcnJpZGluZ0ltcGxlbWVudGF0aW9uLnNlbGVjdEFic3RyYWN0KGIpOwoKICAgICAgICAvLyBJZiBbYV0gaXMgZGVjbGFyZWQgaW4gdGhpcyBjbGFzcywgaXQgZGVmaW5lcyB0aGUgaW50ZXJmYWNlLgogICAgICAgIGlmIChhLnBhcmVudCA9PSBjbHMpIHsKICAgICAgICAgIGRlYnVnPy5sb2coCiAgICAgICAgICAgICAgInN1cGVydHlwZXM6IGNoZWNrVmFsaWRPdmVycmlkZSgke2Nscy5mdWxsTmFtZUZvckVycm9yc30sICR7ZnVsbE5hbWUoYSl9LCAke2Z1bGxOYW1lKGIpfSkiKTsKICAgICAgICAgIGNoZWNrVmFsaWRPdmVycmlkZShhLCBiKTsKICAgICAgICAgIGlmIChhIGlzIERlbGF5ZWRNZW1iZXIgJiYgIWEuaXNJbmhlcml0YWJsZUNvbmZsaWN0KSB7CiAgICAgICAgICAgIGlmIChiIGlzIERlbGF5ZWRNZW1iZXIpIHsKICAgICAgICAgICAgICBiLmFkZEFsbERlY2xhcmF0aW9uc1RvKGEuZGVjbGFyYXRpb25zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBhZGREZWNsYXJhdGlvbklmRGlmZmVyZW50KGIsIGEuZGVjbGFyYXRpb25zKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaXNBYnN0cmFjdChhKSkgewogICAgICAgICAgICByZXN1bHQgPSBJbnRlcmZhY2VDb25mbGljdC5jb21iaW5lZCgKICAgICAgICAgICAgICAgIGNscywKICAgICAgICAgICAgICAgIGEsCiAgICAgICAgICAgICAgICBiLAogICAgICAgICAgICAgICAgbWVyZ2VLaW5kID09IE1lcmdlS2luZC5zdXBlcnR5cGVzU2V0dGVycywKICAgICAgICAgICAgICAgIGNscy5saWJyYXJ5LmxvYWRlciA9PSBoaWVyYXJjaHkubG9hZGVyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdCA9IEluaGVyaXRlZEltcGxlbWVudGF0aW9uSW50ZXJmYWNlQ29uZmxpY3QuY29tYmluZWQoCiAgICAgICAgICAgICAgICBjbHMsCiAgICAgICAgICAgICAgICBhLAogICAgICAgICAgICAgICAgYiwKICAgICAgICAgICAgICAgIG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuc3VwZXJ0eXBlc1NldHRlcnMsCiAgICAgICAgICAgICAgICBjbHMubGlicmFyeS5sb2FkZXIgPT0gaGllcmFyY2h5LmxvYWRlcik7CiAgICAgICAgICB9CiAgICAgICAgICBkZWJ1Zz8ubG9nKCJzdXBlcnR5cGVzOiAke3Jlc3VsdH0iKTsKICAgICAgICAgIGlmIChyZXN1bHQgaXMgRGVsYXllZE1lbWJlcikgewogICAgICAgICAgICBoaWVyYXJjaHkuZGVsYXllZE1lbWJlckNoZWNrcy5hZGQocmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIERlY2xhcmF0aW9uIGNoZWNrSW5oZXJpdGFuY2VDb25mbGljdChEZWNsYXJhdGlvbiBhLCBEZWNsYXJhdGlvbiBiKSB7CiAgICBpZiAoYSBpcyBEZWxheWVkTWVtYmVyKSB7CiAgICAgIERlY2xhcmF0aW9uIHJlc3VsdDsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLmRlY2xhcmF0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgIERlY2xhcmF0aW9uIGQgPSBjaGVja0luaGVyaXRhbmNlQ29uZmxpY3QoYS5kZWNsYXJhdGlvbnNbaV0sIGIpOwogICAgICAgIHJlc3VsdCA/Pz0gZDsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgaWYgKGIgaXMgRGVsYXllZE1lbWJlcikgewogICAgICBEZWNsYXJhdGlvbiByZXN1bHQ7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYi5kZWNsYXJhdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICBEZWNsYXJhdGlvbiBkID0gY2hlY2tJbmhlcml0YW5jZUNvbmZsaWN0KGEsIGIuZGVjbGFyYXRpb25zW2ldKTsKICAgICAgICByZXN1bHQgPz89IGQ7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGlmIChpc0luaGVyaXRhbmNlQ29uZmxpY3QoYSwgYikpIHsKICAgICAgcmVwb3J0SW5oZXJpdGFuY2VDb25mbGljdChhLCBiKTsKICAgICAgcmV0dXJuIGE7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGJvb2wgaW5mZXJNZXRob2RUeXBlcyhQcm9jZWR1cmVCdWlsZGVyIGEsIERlY2xhcmF0aW9uIGIpIHsKICAgIGRlYnVnPy5sb2coCiAgICAgICAgIlRyeWluZyB0byBpbmZlciB0eXBlcyBmb3IgJHtmdWxsTmFtZShhKX0gYmFzZWQgb24gJHtmdWxsTmFtZShiKX0iKTsKICAgIGlmIChiIGlzIERlbGF5ZWRNZW1iZXIpIHsKICAgICAgYm9vbCBoYXNTYW1lU2lnbmF0dXJlID0gdHJ1ZTsKICAgICAgTGlzdDxEZWNsYXJhdGlvbj4gZGVjbGFyYXRpb25zID0gYi5kZWNsYXJhdGlvbnM7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVjbGFyYXRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKCFpbmZlck1ldGhvZFR5cGVzKGEsIGRlY2xhcmF0aW9uc1tpXSkpIHsKICAgICAgICAgIGhhc1NhbWVTaWduYXR1cmUgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGhhc1NhbWVTaWduYXR1cmU7CiAgICB9CiAgICBpZiAoYS5pc0dldHRlcikgewogICAgICByZXR1cm4gaW5mZXJHZXR0ZXJUeXBlKGEsIGIpOwogICAgfSBlbHNlIGlmIChhLmlzU2V0dGVyKSB7CiAgICAgIHJldHVybiBpbmZlclNldHRlclR5cGUoYSwgYik7CiAgICB9CiAgICBib29sIGhhZFR5cGVzSW5mZXJyZWQgPSBhLmhhZFR5cGVzSW5mZXJyZWQ7CiAgICBDbGFzc0J1aWxkZXIgYUNscyA9IGEucGFyZW50OwogICAgU3Vic3RpdHV0aW9uIGFTdWJzdGl0dXRpb247CiAgICBpZiAoY2xzICE9IGFDbHMpIHsKICAgICAgYXNzZXJ0KHN1YnN0aXR1dGlvbnMuY29udGFpbnNLZXkoYUNscy50YXJnZXQpLAogICAgICAgICAgIiR7Y2xzLmZ1bGxOYW1lRm9yRXJyb3JzfSAke2FDbHMuZnVsbE5hbWVGb3JFcnJvcnN9Iik7CiAgICAgIGFTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zW2FDbHMudGFyZ2V0XTsKICAgICAgZGVidWc/LmxvZygKICAgICAgICAgICIke2Nscy5mdWxsTmFtZUZvckVycm9yc30gLT4gJHthQ2xzLmZ1bGxOYW1lRm9yRXJyb3JzfSAkYVN1YnN0aXR1dGlvbiIpOwogICAgfQogICAgQ2xhc3NCdWlsZGVyIGJDbHMgPSBiLnBhcmVudDsKICAgIFN1YnN0aXR1dGlvbiBiU3Vic3RpdHV0aW9uOwogICAgaWYgKGNscyAhPSBiQ2xzKSB7CiAgICAgIGFzc2VydChzdWJzdGl0dXRpb25zLmNvbnRhaW5zS2V5KGJDbHMudGFyZ2V0KSwKICAgICAgICAgICIke2Nscy5mdWxsTmFtZUZvckVycm9yc30gJHtiQ2xzLmZ1bGxOYW1lRm9yRXJyb3JzfSIpOwogICAgICBiU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uc1tiQ2xzLnRhcmdldF07CiAgICAgIGRlYnVnPy5sb2coCiAgICAgICAgICAiJHtjbHMuZnVsbE5hbWVGb3JFcnJvcnN9IC0+ICR7YkNscy5mdWxsTmFtZUZvckVycm9yc30gJGJTdWJzdGl0dXRpb24iKTsKICAgIH0KICAgIFByb2NlZHVyZSBhUHJvY2VkdXJlID0gYS50YXJnZXQ7CiAgICBpZiAoYi50YXJnZXQgaXMhIFByb2NlZHVyZSkgewogICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgMSIpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBQcm9jZWR1cmUgYlByb2NlZHVyZSA9IGIudGFyZ2V0OwogICAgRnVuY3Rpb25Ob2RlIGFGdW5jdGlvbiA9IGFQcm9jZWR1cmUuZnVuY3Rpb247CiAgICBGdW5jdGlvbk5vZGUgYkZ1bmN0aW9uID0gYlByb2NlZHVyZS5mdW5jdGlvbjsKCiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IGFUeXBlUGFyYW1ldGVycyA9IGFGdW5jdGlvbi50eXBlUGFyYW1ldGVyczsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gYlR5cGVQYXJhbWV0ZXJzID0gYkZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzOwogICAgaW50IHR5cGVQYXJhbWV0ZXJDb3VudCA9IGFUeXBlUGFyYW1ldGVycy5sZW5ndGg7CiAgICBpZiAodHlwZVBhcmFtZXRlckNvdW50ICE9IGJUeXBlUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIDIiKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbjsKICAgIGlmICh0eXBlUGFyYW1ldGVyQ291bnQgIT0gMCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJDb3VudDsgaSsrKSB7CiAgICAgICAgY29weVR5cGVQYXJhbWV0ZXJDb3ZhcmlhbmNlKAogICAgICAgICAgICBhLnBhcmVudCwgYVR5cGVQYXJhbWV0ZXJzW2ldLCBiVHlwZVBhcmFtZXRlcnNbaV0pOwogICAgICB9CiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVzID0gbmV3IExpc3Q8RGFydFR5cGU+KHR5cGVQYXJhbWV0ZXJDb3VudCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlckNvdW50OyBpKyspIHsKICAgICAgICB0eXBlc1tpXSA9IG5ldyBUeXBlUGFyYW1ldGVyVHlwZShhVHlwZVBhcmFtZXRlcnNbaV0pOwogICAgICB9CiAgICAgIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoYlR5cGVQYXJhbWV0ZXJzLCB0eXBlcyk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlckNvdW50OyBpKyspIHsKICAgICAgICBEYXJ0VHlwZSBhQm91bmQgPSBhVHlwZVBhcmFtZXRlcnNbaV0uYm91bmQ7CiAgICAgICAgRGFydFR5cGUgYkJvdW5kID0gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGJUeXBlUGFyYW1ldGVyc1tpXS5ib3VuZCk7CiAgICAgICAgaWYgKGFCb3VuZCAhPSBiQm91bmQpIHsKICAgICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCAzIik7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgRGFydFR5cGUgYVJldHVyblR5cGUgPSBhRnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgIGlmIChhU3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgYVJldHVyblR5cGUgPSBhU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGFSZXR1cm5UeXBlKTsKICAgIH0KICAgIERhcnRUeXBlIGJSZXR1cm5UeXBlID0gYkZ1bmN0aW9uLnJldHVyblR5cGU7CiAgICBpZiAoYlN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgIGJSZXR1cm5UeXBlID0gYlN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShiUmV0dXJuVHlwZSk7CiAgICB9CiAgICBpZiAoc3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgYlJldHVyblR5cGUgPSBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoYlJldHVyblR5cGUpOwogICAgfQogICAgYm9vbCByZXN1bHQgPSB0cnVlOwogICAgaWYgKGFGdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50ID4gYkZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHsKICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIDQiKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBhUG9zaXRpb25hbCA9IGFGdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyczsKICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gYlBvc2l0aW9uYWwgPSBiRnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgICBpZiAoYVBvc2l0aW9uYWwubGVuZ3RoIDwgYlBvc2l0aW9uYWwubGVuZ3RoKSB7CiAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCA1Iik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoYVJldHVyblR5cGUgIT0gYlJldHVyblR5cGUpIHsKICAgICAgaWYgKGEucGFyZW50ID09IGNscyAmJiBhLnJldHVyblR5cGUgPT0gbnVsbCkgewogICAgICAgIHJlc3VsdCA9CiAgICAgICAgICAgIGluZmVyUmV0dXJuVHlwZShjbHMsIGEsIGJSZXR1cm5UeXBlLCBoYWRUeXBlc0luZmVycmVkLCBoaWVyYXJjaHkpOwogICAgICB9IGVsc2UgewogICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCA2Iik7CiAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGJQb3NpdGlvbmFsLmxlbmd0aDsgaSsrKSB7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gYVBhcmFtZXRlciA9IGFQb3NpdGlvbmFsW2ldOwogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGJQYXJhbWV0ZXIgPSBiUG9zaXRpb25hbFtpXTsKICAgICAgY29weVBhcmFtZXRlckNvdmFyaWFuY2UoYS5wYXJlbnQsIGFQYXJhbWV0ZXIsIGJQYXJhbWV0ZXIpOwogICAgICBEYXJ0VHlwZSBhVHlwZSA9IGFQYXJhbWV0ZXIudHlwZTsKICAgICAgaWYgKGFTdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgIGFUeXBlID0gYVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShhVHlwZSk7CiAgICAgIH0KICAgICAgRGFydFR5cGUgYlR5cGUgPSBiUGFyYW1ldGVyLnR5cGU7CiAgICAgIGlmIChiU3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgICBiVHlwZSA9IGJTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoYlR5cGUpOwogICAgICB9CiAgICAgIGlmIChzdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgIGJUeXBlID0gc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGJUeXBlKTsKICAgICAgfQogICAgICBpZiAoYVR5cGUgIT0gYlR5cGUpIHsKICAgICAgICBpZiAoYS5wYXJlbnQgPT0gY2xzICYmIGEuZm9ybWFsc1tpXS50eXBlID09IG51bGwpIHsKICAgICAgICAgIHJlc3VsdCA9IGluZmVyUGFyYW1ldGVyVHlwZSgKICAgICAgICAgICAgICBjbHMsIGEsIGEuZm9ybWFsc1tpXSwgYlR5cGUsIGhhZFR5cGVzSW5mZXJyZWQsIGhpZXJhcmNoeSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCA4Iik7CiAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IGFOYW1lZCA9IGFGdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnM7CiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IGJOYW1lZCA9IGJGdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnM7CiAgICBuYW1lZDoKICAgIGlmIChhTmFtZWQuaXNOb3RFbXB0eSB8fCBiTmFtZWQuaXNOb3RFbXB0eSkgewogICAgICBpZiAoYVBvc2l0aW9uYWwubGVuZ3RoICE9IGJQb3NpdGlvbmFsLmxlbmd0aCkgewogICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCA5Iik7CiAgICAgICAgcmVzdWx0ID0gZmFsc2U7CiAgICAgICAgYnJlYWsgbmFtZWQ7CiAgICAgIH0KICAgICAgaWYgKGFGdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50ICE9CiAgICAgICAgICBiRnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgewogICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCAxMCIpOwogICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgIGJyZWFrIG5hbWVkOwogICAgICB9CgogICAgICBhTmFtZWQgPSBhTmFtZWQudG9MaXN0KCkuLnNvcnQoY29tcGFyZU5hbWVkUGFyYW1ldGVycyk7CiAgICAgIGJOYW1lZCA9IGJOYW1lZC50b0xpc3QoKS4uc29ydChjb21wYXJlTmFtZWRQYXJhbWV0ZXJzKTsKICAgICAgaW50IGFDb3VudCA9IDA7CiAgICAgIGZvciAoaW50IGJDb3VudCA9IDA7IGJDb3VudCA8IGJOYW1lZC5sZW5ndGg7IGJDb3VudCsrKSB7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBiTmFtZWRbYkNvdW50XS5uYW1lOwogICAgICAgIGZvciAoOyBhQ291bnQgPCBhTmFtZWQubGVuZ3RoOyBhQ291bnQrKykgewogICAgICAgICAgaWYgKGFOYW1lZFthQ291bnRdLm5hbWUgPT0gbmFtZSkgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChhQ291bnQgPT0gYU5hbWVkLmxlbmd0aCkgewogICAgICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIDExIik7CiAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgIGJyZWFrIG5hbWVkOwogICAgICAgIH0KICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGFQYXJhbWV0ZXIgPSBhTmFtZWRbYUNvdW50XTsKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGJQYXJhbWV0ZXIgPSBiTmFtZWRbYkNvdW50XTsKICAgICAgICBjb3B5UGFyYW1ldGVyQ292YXJpYW5jZShhLnBhcmVudCwgYVBhcmFtZXRlciwgYlBhcmFtZXRlcik7CiAgICAgICAgRGFydFR5cGUgYVR5cGUgPSBhUGFyYW1ldGVyLnR5cGU7CiAgICAgICAgaWYgKGFTdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgICAgYVR5cGUgPSBhU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGFUeXBlKTsKICAgICAgICB9CiAgICAgICAgRGFydFR5cGUgYlR5cGUgPSBiUGFyYW1ldGVyLnR5cGU7CiAgICAgICAgaWYgKGJTdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgICAgYlR5cGUgPSBiU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGJUeXBlKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgICAgICBiVHlwZSA9IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShiVHlwZSk7CiAgICAgICAgfQogICAgICAgIGlmIChhVHlwZSAhPSBiVHlwZSkgewogICAgICAgICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBwYXJhbWV0ZXI7CiAgICAgICAgICBmb3IgKGludCBpID0gYVBvc2l0aW9uYWwubGVuZ3RoOyBpIDwgYS5mb3JtYWxzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIGlmIChhLmZvcm1hbHNbaV0ubmFtZSA9PSBuYW1lKSB7CiAgICAgICAgICAgICAgcGFyYW1ldGVyID0gYS5mb3JtYWxzW2ldOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYS5wYXJlbnQgPT0gY2xzICYmIHBhcmFtZXRlci50eXBlID09IG51bGwpIHsKICAgICAgICAgICAgcmVzdWx0ID0gaW5mZXJQYXJhbWV0ZXJUeXBlKAogICAgICAgICAgICAgICAgY2xzLCBhLCBwYXJhbWV0ZXIsIGJUeXBlLCBoYWRUeXBlc0luZmVycmVkLCBoaWVyYXJjaHkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIDEyIik7CiAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZGVidWc/LmxvZygiSW5mZXJyaW5nIHR5cGVzIGZvciAke2Z1bGxOYW1lKGEpfSBiYXNlZCBvbiAke2Z1bGxOYW1lKGIpfSAiICsKICAgICAgICAocmVzdWx0ID8gInN1Y2NlZWRlZC4iIDogImZhaWxlZC4iKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgYm9vbCBpbmZlckdldHRlclR5cGUoUHJvY2VkdXJlQnVpbGRlciBhLCBEZWNsYXJhdGlvbiBiKSB7CiAgICBkZWJ1Zz8ubG9nKAogICAgICAgICJJbmZlcnJpbmcgZ2V0dGVyIHR5cGVzIGZvciAke2Z1bGxOYW1lKGEpfSBiYXNlZCBvbiAke2Z1bGxOYW1lKGIpfSIpOwogICAgTWVtYmVyIGJUYXJnZXQgPSBiLnRhcmdldDsKICAgIERhcnRUeXBlIGJUeXBlOwogICAgaWYgKGJUYXJnZXQgaXMgRmllbGQpIHsKICAgICAgYlR5cGUgPSBiVGFyZ2V0LnR5cGU7CiAgICB9IGVsc2UgaWYgKGJUYXJnZXQgaXMgUHJvY2VkdXJlKSB7CiAgICAgIGlmIChiLmlzU2V0dGVyKSB7CiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBiUGFyYW1ldGVyID0KICAgICAgICAgICAgYlRhcmdldC5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5zaW5nbGU7CiAgICAgICAgYlR5cGUgPSBiUGFyYW1ldGVyLnR5cGU7CiAgICAgICAgaWYgKCFoYXNFeHBsaWNpdGx5VHlwZWRGb3JtYWxQYXJhbWV0ZXIoYiwgMCkpIHsKICAgICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCAodHlwZSBtYXkgYmUgaW5mZXJyZWQpIik7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGIuaXNHZXR0ZXIpIHsKICAgICAgICBiVHlwZSA9IGJUYXJnZXQuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgICAgICBpZiAoIWhhc0V4cGxpY2l0UmV0dXJuVHlwZShiKSkgewogICAgICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIChyZXR1cm4gdHlwZSBtYXkgYmUgaW5mZXJyZWQpIik7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCAobm90IGFjY2Vzc29yOiAke2JUYXJnZXQua2luZH0pIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgKG5vdCBmaWVsZC9wcm9jZWR1cmU6ICR7YlRhcmdldC5ydW50aW1lVHlwZX0pIik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiBhLnRhcmdldC5mdW5jdGlvbi5yZXR1cm5UeXBlID09IGJUeXBlOwogIH0KCiAgYm9vbCBpbmZlclNldHRlclR5cGUoUHJvY2VkdXJlQnVpbGRlciBhLCBEZWNsYXJhdGlvbiBiKSB7CiAgICBkZWJ1Zz8ubG9nKAogICAgICAgICJJbmZlcnJpbmcgc2V0dGVyIHR5cGVzIGZvciAke2Z1bGxOYW1lKGEpfSBiYXNlZCBvbiAke2Z1bGxOYW1lKGIpfSIpOwogICAgTWVtYmVyIGJUYXJnZXQgPSBiLnRhcmdldDsKICAgIFByb2NlZHVyZSBhUHJvY2VkdXJlID0gYS50YXJnZXQ7CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGFQYXJhbWV0ZXIgPQogICAgICAgIGFQcm9jZWR1cmUuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMuc2luZ2xlOwogICAgRGFydFR5cGUgYlR5cGU7CiAgICBpZiAoYlRhcmdldCBpcyBGaWVsZCkgewogICAgICBiVHlwZSA9IGJUYXJnZXQudHlwZTsKICAgICAgY29weVBhcmFtZXRlckNvdmFyaWFuY2VGcm9tRmllbGQoYS5wYXJlbnQsIGFQYXJhbWV0ZXIsIGJUYXJnZXQpOwogICAgfQogICAgaWYgKGJUYXJnZXQgaXMgUHJvY2VkdXJlKSB7CiAgICAgIGlmIChiLmlzU2V0dGVyKSB7CiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBiUGFyYW1ldGVyID0KICAgICAgICAgICAgYlRhcmdldC5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5zaW5nbGU7CiAgICAgICAgYlR5cGUgPSBiUGFyYW1ldGVyLnR5cGU7CiAgICAgICAgY29weVBhcmFtZXRlckNvdmFyaWFuY2UoYS5wYXJlbnQsIGFQYXJhbWV0ZXIsIGJQYXJhbWV0ZXIpOwogICAgICAgIGlmICghaGFzRXhwbGljaXRseVR5cGVkRm9ybWFsUGFyYW1ldGVyKGIsIDApIHx8CiAgICAgICAgICAgICFoYXNFeHBsaWNpdGx5VHlwZWRGb3JtYWxQYXJhbWV0ZXIoYSwgMCkpIHsKICAgICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCAodHlwZSBtYXkgYmUgaW5mZXJyZWQpIik7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGIuaXNHZXR0ZXIpIHsKICAgICAgICBiVHlwZSA9IGJUYXJnZXQuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgICAgICBpZiAoIWhhc0V4cGxpY2l0UmV0dXJuVHlwZShiKSkgewogICAgICAgICAgZGVidWc/LmxvZygiR2l2aW5nIHVwIChyZXR1cm4gdHlwZSBtYXkgYmUgaW5mZXJyZWQpIik7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGRlYnVnPy5sb2coIkdpdmluZyB1cCAobm90IGFjY2Vzc29yOiAke2JUYXJnZXQua2luZH0pIik7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgKG5vdCBmaWVsZC9wcm9jZWR1cmU6ICR7YlRhcmdldC5ydW50aW1lVHlwZX0pIik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiBhUGFyYW1ldGVyLnR5cGUgPT0gYlR5cGU7CiAgfQoKICB2b2lkIGNoZWNrVmFsaWRPdmVycmlkZShEZWNsYXJhdGlvbiBhLCBEZWNsYXJhdGlvbiBiKSB7CiAgICBkZWJ1Zz8ubG9nKAogICAgICAgICJjaGVja1ZhbGlkT3ZlcnJpZGUoJHtmdWxsTmFtZShhKX0sICR7ZnVsbE5hbWUoYil9KSAke2EucnVudGltZVR5cGV9Iik7CiAgICBpZiAoYSBpcyBQcm9jZWR1cmVCdWlsZGVyKSB7CiAgICAgIGlmIChpbmZlck1ldGhvZFR5cGVzKGEsIGIpKSByZXR1cm47CiAgICB9IGVsc2UgaWYgKGEuaXNGaWVsZCkgewogICAgICBpZiAoaW5mZXJGaWVsZFR5cGVzKGEsIGIpKSByZXR1cm47CiAgICB9CiAgICBNZW1iZXIgYVRhcmdldCA9IGEudGFyZ2V0OwogICAgTWVtYmVyIGJUYXJnZXQgPSBiLnRhcmdldDsKICAgIGlmIChhVGFyZ2V0IGlzIFByb2NlZHVyZSAmJiAhYVRhcmdldC5pc0FjY2Vzc29yICYmIGJUYXJnZXQgaXMgUHJvY2VkdXJlKSB7CiAgICAgIGlmIChoYXNTYW1lU2lnbmF0dXJlKGFUYXJnZXQuZnVuY3Rpb24sIGJUYXJnZXQuZnVuY3Rpb24pKSByZXR1cm47CiAgICB9CgogICAgaWYgKGIgaXMgRGVsYXllZE1lbWJlcikgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGIuZGVjbGFyYXRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaGllcmFyY2h5Lm92ZXJyaWRlQ2hlY2tzCiAgICAgICAgICAgIC5hZGQobmV3IERlbGF5ZWRPdmVycmlkZUNoZWNrKGNscywgYSwgYi5kZWNsYXJhdGlvbnNbaV0pKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaGllcmFyY2h5Lm92ZXJyaWRlQ2hlY2tzLmFkZChuZXcgRGVsYXllZE92ZXJyaWRlQ2hlY2soY2xzLCBhLCBiKSk7CiAgICB9CiAgfQoKICBib29sIGluZmVyRmllbGRUeXBlcyhNZW1iZXJCdWlsZGVyIGEsIERlY2xhcmF0aW9uIGIpIHsKICAgIGRlYnVnPy5sb2coCiAgICAgICAgIlRyeWluZyB0byBpbmZlciBmaWVsZCB0eXBlcyBmb3IgJHtmdWxsTmFtZShhKX0gYmFzZWQgb24gJHtmdWxsTmFtZShiKX0iKTsKICAgIGlmIChiIGlzIERlbGF5ZWRNZW1iZXIpIHsKICAgICAgYm9vbCBoYXNTYW1lU2lnbmF0dXJlID0gdHJ1ZTsKICAgICAgTGlzdDxEZWNsYXJhdGlvbj4gZGVjbGFyYXRpb25zID0gYi5kZWNsYXJhdGlvbnM7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVjbGFyYXRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKCFpbmZlckZpZWxkVHlwZXMoYSwgZGVjbGFyYXRpb25zW2ldKSkgewogICAgICAgICAgaGFzU2FtZVNpZ25hdHVyZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gaGFzU2FtZVNpZ25hdHVyZTsKICAgIH0KICAgIE1lbWJlciBiVGFyZ2V0ID0gYi50YXJnZXQ7CiAgICBEYXJ0VHlwZSBpbmhlcml0ZWRUeXBlOwogICAgaWYgKGJUYXJnZXQgaXMgUHJvY2VkdXJlKSB7CiAgICAgIGlmIChiVGFyZ2V0LmlzU2V0dGVyKSB7CiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgPQogICAgICAgICAgICBiVGFyZ2V0LmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLnNpbmdsZTsKICAgICAgICAvLyBpbmhlcml0ZWRUeXBlID0gcGFyYW1ldGVyLnR5cGU7CiAgICAgICAgY29weUZpZWxkQ292YXJpYW5jZUZyb21QYXJhbWV0ZXIoYS5wYXJlbnQsIGEudGFyZ2V0LCBwYXJhbWV0ZXIpOwogICAgICAgIGlmICghaGFzRXhwbGljaXRseVR5cGVkRm9ybWFsUGFyYW1ldGVyKGIsIDApKSB7CiAgICAgICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgKHR5cGUgbWF5IGJlIGluZmVycmVkKSIpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChiVGFyZ2V0LmlzR2V0dGVyKSB7CiAgICAgICAgaWYgKCFoYXNFeHBsaWNpdFJldHVyblR5cGUoYikpIHJldHVybiBmYWxzZTsKICAgICAgICBpbmhlcml0ZWRUeXBlID0gYlRhcmdldC5mdW5jdGlvbi5yZXR1cm5UeXBlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGJUYXJnZXQgaXMgRmllbGQpIHsKICAgICAgY29weUZpZWxkQ292YXJpYW5jZShhLnBhcmVudCwgYS50YXJnZXQsIGJUYXJnZXQpOwogICAgICBpbmhlcml0ZWRUeXBlID0gYlRhcmdldC50eXBlOwogICAgfQogICAgaWYgKGluaGVyaXRlZFR5cGUgPT0gbnVsbCkgewogICAgICBkZWJ1Zz8ubG9nKCJHaXZpbmcgdXAgKGluaGVyaXRlZFR5cGUgPT0gbnVsbClcbiR7U3RhY2tUcmFjZS5jdXJyZW50fSIpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBDbGFzc0J1aWxkZXIgYUNscyA9IGEucGFyZW50OwogICAgU3Vic3RpdHV0aW9uIGFTdWJzdGl0dXRpb247CiAgICBpZiAoY2xzICE9IGFDbHMpIHsKICAgICAgYXNzZXJ0KHN1YnN0aXR1dGlvbnMuY29udGFpbnNLZXkoYUNscy50YXJnZXQpLAogICAgICAgICAgIiR7Y2xzLmZ1bGxOYW1lRm9yRXJyb3JzfSAke2FDbHMuZnVsbE5hbWVGb3JFcnJvcnN9Iik7CiAgICAgIGFTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zW2FDbHMudGFyZ2V0XTsKICAgICAgZGVidWc/LmxvZygKICAgICAgICAgICIke2Nscy5mdWxsTmFtZUZvckVycm9yc30gLT4gJHthQ2xzLmZ1bGxOYW1lRm9yRXJyb3JzfSAkYVN1YnN0aXR1dGlvbiIpOwogICAgfQogICAgQ2xhc3NCdWlsZGVyIGJDbHMgPSBiLnBhcmVudDsKICAgIFN1YnN0aXR1dGlvbiBiU3Vic3RpdHV0aW9uOwogICAgaWYgKGNscyAhPSBiQ2xzKSB7CiAgICAgIGFzc2VydChzdWJzdGl0dXRpb25zLmNvbnRhaW5zS2V5KGJDbHMudGFyZ2V0KSwKICAgICAgICAgICIke2Nscy5mdWxsTmFtZUZvckVycm9yc30gJHtiQ2xzLmZ1bGxOYW1lRm9yRXJyb3JzfSIpOwogICAgICBiU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uc1tiQ2xzLnRhcmdldF07CiAgICAgIGRlYnVnPy5sb2coCiAgICAgICAgICAiJHtjbHMuZnVsbE5hbWVGb3JFcnJvcnN9IC0+ICR7YkNscy5mdWxsTmFtZUZvckVycm9yc30gJGJTdWJzdGl0dXRpb24iKTsKICAgIH0KICAgIGlmIChiU3Vic3RpdHV0aW9uICE9IG51bGwgJiYgaW5oZXJpdGVkVHlwZSBpcyEgSW1wbGljaXRGaWVsZFR5cGUpIHsKICAgICAgaW5oZXJpdGVkVHlwZSA9IGJTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoaW5oZXJpdGVkVHlwZSk7CiAgICB9CgogICAgRGFydFR5cGUgZGVjbGFyZWRUeXBlID0gYS50YXJnZXQudHlwZTsKICAgIGlmIChhU3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgZGVjbGFyZWRUeXBlID0gYVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShkZWNsYXJlZFR5cGUpOwogICAgfQogICAgaWYgKGRlY2xhcmVkVHlwZSA9PSBpbmhlcml0ZWRUeXBlKSByZXR1cm4gdHJ1ZTsKCiAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgaWYgKGEgaXMgRmllbGRCdWlsZGVyKSB7CiAgICAgIGlmIChhLnBhcmVudCA9PSBjbHMgJiYgYS50eXBlID09IG51bGwpIHsKICAgICAgICBpZiAoYS5oYWRUeXBlc0luZmVycmVkKSB7CiAgICAgICAgICByZXBvcnRDYW50SW5mZXJGaWVsZFR5cGUoY2xzLCBhKTsKICAgICAgICAgIGluaGVyaXRlZFR5cGUgPSBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXN1bHQgPSB0cnVlOwogICAgICAgICAgYS5oYWRUeXBlc0luZmVycmVkID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGluaGVyaXRlZFR5cGUgaXMgSW1wbGljaXRGaWVsZFR5cGUpIHsKICAgICAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPSBjbHMubGlicmFyeTsKICAgICAgICAgIChsaWJyYXJ5LmltcGxpY2l0bHlUeXBlZEZpZWxkcyA/Pz0gPEZpZWxkQnVpbGRlcj5bXSkuYWRkKGEpOwogICAgICAgIH0KICAgICAgICBhLnRhcmdldC50eXBlID0gaW5oZXJpdGVkVHlwZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgY29weVBhcmFtZXRlckNvdmFyaWFuY2UoRGVjbGFyYXRpb24gcGFyZW50LAogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGFQYXJhbWV0ZXIsIFZhcmlhYmxlRGVjbGFyYXRpb24gYlBhcmFtZXRlcikgewogICAgaWYgKHBhcmVudCA9PSBjbHMpIHsKICAgICAgaWYgKGJQYXJhbWV0ZXIuaXNDb3ZhcmlhbnQpIHsKICAgICAgICBhUGFyYW1ldGVyLmlzQ292YXJpYW50ID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoYlBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKSB7CiAgICAgICAgYVBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gdHJ1ZTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBjb3B5UGFyYW1ldGVyQ292YXJpYW5jZUZyb21GaWVsZCgKICAgICAgRGVjbGFyYXRpb24gcGFyZW50LCBWYXJpYWJsZURlY2xhcmF0aW9uIGFQYXJhbWV0ZXIsIEZpZWxkIGJGaWVsZCkgewogICAgaWYgKHBhcmVudCA9PSBjbHMpIHsKICAgICAgaWYgKGJGaWVsZC5pc0NvdmFyaWFudCkgewogICAgICAgIGFQYXJhbWV0ZXIuaXNDb3ZhcmlhbnQgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChiRmllbGQuaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgIGFQYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgY29weUZpZWxkQ292YXJpYW5jZShEZWNsYXJhdGlvbiBwYXJlbnQsIEZpZWxkIGFGaWVsZCwgRmllbGQgYkZpZWxkKSB7CiAgICBpZiAocGFyZW50ID09IGNscykgewogICAgICBpZiAoYkZpZWxkLmlzQ292YXJpYW50KSB7CiAgICAgICAgYUZpZWxkLmlzQ292YXJpYW50ID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoYkZpZWxkLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICBhRmllbGQuaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgY29weUZpZWxkQ292YXJpYW5jZUZyb21QYXJhbWV0ZXIoCiAgICAgIERlY2xhcmF0aW9uIHBhcmVudCwgRmllbGQgYUZpZWxkLCBWYXJpYWJsZURlY2xhcmF0aW9uIGJQYXJhbWV0ZXIpIHsKICAgIGlmIChwYXJlbnQgPT0gY2xzKSB7CiAgICAgIGlmIChiUGFyYW1ldGVyLmlzQ292YXJpYW50KSB7CiAgICAgICAgYUZpZWxkLmlzQ292YXJpYW50ID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoYlBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKSB7CiAgICAgICAgYUZpZWxkLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGNvcHlUeXBlUGFyYW1ldGVyQ292YXJpYW5jZSgKICAgICAgRGVjbGFyYXRpb24gcGFyZW50LCBUeXBlUGFyYW1ldGVyIGFQYXJhbWV0ZXIsIFR5cGVQYXJhbWV0ZXIgYlBhcmFtZXRlcikgewogICAgaWYgKHBhcmVudCA9PSBjbHMpIHsKICAgICAgaWYgKGJQYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgIGFQYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgcmVwb3J0SW5oZXJpdGFuY2VDb25mbGljdChEZWNsYXJhdGlvbiBhLCBEZWNsYXJhdGlvbiBiKSB7CiAgICBTdHJpbmcgbmFtZSA9IGEuZnVsbE5hbWVGb3JFcnJvcnM7CiAgICBpZiAoYS5wYXJlbnQgIT0gYi5wYXJlbnQpIHsKICAgICAgaWYgKGEucGFyZW50ID09IGNscykgewogICAgICAgIGNscy5hZGRQcm9ibGVtKG1lc3NhZ2VEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXIsCiAgICAgICAgICAgIGEuY2hhck9mZnNldCwgbmFtZS5sZW5ndGgsCiAgICAgICAgICAgIGNvbnRleHQ6IDxMb2NhdGVkTWVzc2FnZT5bCiAgICAgICAgICAgICAgbWVzc2FnZURlY2xhcmVkTWVtYmVyQ29uZmxpY3RzV2l0aEluaGVyaXRlZE1lbWJlckNhdXNlCiAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oYi5maWxlVXJpLCBiLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKQogICAgICAgICAgICBdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjbHMuYWRkUHJvYmxlbShtZXNzYWdlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0LCBjbHMuY2hhck9mZnNldCwKICAgICAgICAgICAgY2xzLmZ1bGxOYW1lRm9yRXJyb3JzLmxlbmd0aCwKICAgICAgICAgICAgY29udGV4dDogaW5oZXJpdGVkQ29uZmxpY3RDb250ZXh0KGEsIGIpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChhLmlzU3RhdGljICE9IGIuaXNTdGF0aWMpIHsKICAgICAgRGVjbGFyYXRpb24gc3RhdGljTWVtYmVyOwogICAgICBEZWNsYXJhdGlvbiBpbnN0YW5jZU1lbWJlcjsKICAgICAgaWYgKGEuaXNTdGF0aWMpIHsKICAgICAgICBzdGF0aWNNZW1iZXIgPSBhOwogICAgICAgIGluc3RhbmNlTWVtYmVyID0gYjsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdGF0aWNNZW1iZXIgPSBiOwogICAgICAgIGluc3RhbmNlTWVtYmVyID0gYTsKICAgICAgfQogICAgICBjbHMubGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2VTdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0LAogICAgICAgICAgc3RhdGljTWVtYmVyLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoLCBzdGF0aWNNZW1iZXIuZmlsZVVyaSwKICAgICAgICAgIGNvbnRleHQ6IDxMb2NhdGVkTWVzc2FnZT5bCiAgICAgICAgICAgIG1lc3NhZ2VTdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0Q2F1c2Uud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgaW5zdGFuY2VNZW1iZXIuZmlsZVVyaSwgaW5zdGFuY2VNZW1iZXIuY2hhck9mZnNldCwgbmFtZS5sZW5ndGgpCiAgICAgICAgICBdKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRoaXMgbWVzc2FnZSBjYW4gYmUgcmVwb3J0ZWQgdHdpY2UgKHdoZW4gbWVyZ2luZyBsb2NhbE1lbWJlcnMgd2l0aAogICAgICAvLyBjbGFzc1NldHRlcnMsIG9yIGxvY2FsU2V0dGVycyB3aXRoIGNsYXNzTWVtYmVycykuIEJ5IGVuc3VyaW5nIHRoYXQKICAgICAgLy8gd2UgYWx3YXlzIHJlcG9ydCB0aGUgb25lIHdpdGggaGlnaGVyIGNoYXJPZmZzZXQgYXMgdGhlIGR1cGxpY2F0ZSwKICAgICAgLy8gdGhlIG1lc3NhZ2UgZHVwbGljYXRpb24gbG9naWMgZW5zdXJlcyB0aGF0IHdlIG9ubHkgcmVwb3J0IHRoaXMKICAgICAgLy8gcHJvYmxlbSBvbmNlLgogICAgICBEZWNsYXJhdGlvbiBleGlzdGluZzsKICAgICAgRGVjbGFyYXRpb24gZHVwbGljYXRlOwogICAgICBhc3NlcnQoYS5maWxlVXJpID09IGIuZmlsZVVyaSk7CiAgICAgIGlmIChhLmNoYXJPZmZzZXQgPCBiLmNoYXJPZmZzZXQpIHsKICAgICAgICBleGlzdGluZyA9IGE7CiAgICAgICAgZHVwbGljYXRlID0gYjsKICAgICAgfSBlbHNlIHsKICAgICAgICBleGlzdGluZyA9IGI7CiAgICAgICAgZHVwbGljYXRlID0gYTsKICAgICAgfQogICAgICBjbHMubGlicmFyeS5hZGRQcm9ibGVtKHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBkdXBsaWNhdGUuY2hhck9mZnNldCwgbmFtZS5sZW5ndGgsIGR1cGxpY2F0ZS5maWxlVXJpLAogICAgICAgICAgY29udGV4dDogPExvY2F0ZWRNZXNzYWdlPlsKICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZS53aXRoQXJndW1lbnRzKG5hbWUpLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgIGV4aXN0aW5nLmZpbGVVcmksIGV4aXN0aW5nLmNoYXJPZmZzZXQsIG5hbWUubGVuZ3RoKQogICAgICAgICAgXSk7CiAgICB9CiAgfQoKICAvLy8gV2hlbiBtZXJnaW5nIGBhTGlzdGAgYW5kIGBiTGlzdGAsIFttZW1iZXJdIHdhcyBvbmx5IGZvdW5kIGluIGBhTGlzdGAuCiAgLy8vCiAgLy8vIElmIFttZXJnZUtpbmRdIGlzIGBNZXJnZUtpbmQuc3VwZXJjbGFzc2AgW21lbWJlcl0gaXMgZGVjbGFyZWQgaW4gY3VycmVudAogIC8vLyBjbGFzcywgYW5kIGlzbid0IG92ZXJyaWRpbmcgYSBtZXRob2QgZnJvbSB0aGUgc3VwZXJjbGFzcy4KICAvLy8KICAvLy8gSWYgW21lcmdlS2luZF0gaXMgYE1lcmdlS2luZC5pbnRlcmZhY2VzYCwgW21lbWJlcl0gaXMgaWdub3JlZCBmb3Igbm93LgogIC8vLwogIC8vLyBJZiBbbWVyZ2VLaW5kXSBpcyBgTWVyZ2VLaW5kLnN1cGVydHlwZXNgLCBbbWVtYmVyXSBpc24ndAogIC8vLyBpbXBsZW1lbnRpbmcvb3ZlcnJpZGluZyBhbnl0aGluZy4KICB2b2lkIGhhbmRsZU9ubHlBKERlY2xhcmF0aW9uIG1lbWJlciwgTWVyZ2VLaW5kIG1lcmdlS2luZCkgewogICAgaWYgKG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuaW50ZXJmYWNlc01lbWJlcnMgfHwKICAgICAgICBtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLmludGVyZmFjZXNTZXR0ZXJzKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFRPRE8oYWhlKTogRW5hYmxlIHRoaXMgb3B0aW1pemF0aW9uOgogICAgLy8gaWYgKGNscyBpcyBEaWxsQ2xhc3NCdWlsZGVyKSByZXR1cm47CiAgICAvLyBhc3NlcnQobWVyZ2VLaW5kID09IE1lcmdlS2luZC5pbnRlcmZhY2VzIHx8IG1lbWJlciBpcyEgSW50ZXJmYWNlQ29uZmxpY3QpOwogICAgaWYgKChtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLnN1cGVyY2xhc3NNZW1iZXJzIHx8CiAgICAgICAgICAgIG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuc3VwZXJjbGFzc1NldHRlcnMpICYmCiAgICAgICAgaXNBYnN0cmFjdChtZW1iZXIpKSB7CiAgICAgIHJlY29yZEFic3RyYWN0TWVtYmVyKG1lbWJlcik7CiAgICB9CiAgfQoKICAvLy8gV2hlbiBtZXJnaW5nIGBhTGlzdGAgYW5kIGBiTGlzdGAsIFttZW1iZXJdIHdhcyBvbmx5IGZvdW5kIGluIGBiTGlzdGAuCiAgLy8vCiAgLy8vIElmIFttZXJnZUtpbmRdIGlzIGBNZXJnZUtpbmQuc3VwZXJjbGFzc2AgW21lbWJlcl0gaXMgYmVpbmcgaW5oZXJpdGVkIGZyb20KICAvLy8gYSBzdXBlcmNsYXNzLgogIC8vLwogIC8vLyBJZiBbbWVyZ2VLaW5kXSBpcyBgTWVyZ2VLaW5kLmludGVyZmFjZXNgLCBbbWVtYmVyXSBpcyBpZ25vcmVkIGZvciBub3cuCiAgLy8vCiAgLy8vIElmIFttZXJnZUtpbmRdIGlzIGBNZXJnZUtpbmQuc3VwZXJ0eXBlc2AsIFttZW1iZXJdIGlzIGltcGxpY2l0bHkKICAvLy8gYWJzdHJhY3QsIGFuZCBub3QgaW1wbGVtZW50ZWQuCiAgRGVjbGFyYXRpb24gaGFuZGxlT25seUIoRGVjbGFyYXRpb24gbWVtYmVyLCBNZXJnZUtpbmQgbWVyZ2VLaW5kKSB7CiAgICBpZiAobWVyZ2VLaW5kID09IE1lcmdlS2luZC5pbnRlcmZhY2VzTWVtYmVycyB8fAogICAgICAgIG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuaW50ZXJmYWNlc1NldHRlcnMpIHsKICAgICAgcmV0dXJuIG1lbWJlcjsKICAgIH0KICAgIC8vIFRPRE8oYWhlKTogRW5hYmxlIHRoaXMgb3B0aW1pemF0aW9uOgogICAgLy8gaWYgKGNscyBpcyBEaWxsQ2xhc3NCdWlsZGVyKSByZXR1cm4gbWVtYmVyOwogICAgTWVtYmVyIHRhcmdldCA9IG1lbWJlci50YXJnZXQ7CiAgICBpZiAoKG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuc3VwZXJ0eXBlc01lbWJlcnMgfHwKICAgICAgICAgICAgbWVyZ2VLaW5kID09IE1lcmdlS2luZC5zdXBlcnR5cGVzU2V0dGVycykgfHwKICAgICAgICAoKG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuc3VwZXJjbGFzc01lbWJlcnMgfHwKICAgICAgICAgICAgICAgIG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuc3VwZXJjbGFzc1NldHRlcnMpICYmCiAgICAgICAgICAgIHRhcmdldC5pc0Fic3RyYWN0KSkgewogICAgICBpZiAoaXNOYW1lVmlzaWJsZUluKHRhcmdldC5uYW1lLCBjbHMubGlicmFyeSkpIHsKICAgICAgICByZWNvcmRBYnN0cmFjdE1lbWJlcihtZW1iZXIpOwogICAgICB9CiAgICB9CiAgICBpZiAobWVyZ2VLaW5kID09IE1lcmdlS2luZC5zdXBlcmNsYXNzTWVtYmVycyAmJgogICAgICAgIHRhcmdldC5lbmNsb3NpbmdDbGFzcyAhPSBvYmplY3RDbGFzcy5jbHMgJiYKICAgICAgICB0YXJnZXQubmFtZSA9PSBub1N1Y2hNZXRob2ROYW1lKSB7CiAgICAgIGhhc05vU3VjaE1ldGhvZCA9IHRydWU7CiAgICB9CiAgICBpZiAobWVyZ2VLaW5kICE9IE1lcmdlS2luZC5tZW1iZXJzV2l0aFNldHRlcnMgJiYKICAgICAgICBtZXJnZUtpbmQgIT0gTWVyZ2VLaW5kLnNldHRlcnNXaXRoTWVtYmVycyAmJgogICAgICAgIG1lbWJlciBpcyBEZWxheWVkTWVtYmVyICYmCiAgICAgICAgbWVtYmVyLmlzSW5oZXJpdGFibGVDb25mbGljdCkgewogICAgICBoaWVyYXJjaHkuZGVsYXllZE1lbWJlckNoZWNrcy5hZGQobWVtYmVyLndpdGhQYXJlbnQoY2xzKSk7CiAgICB9CiAgICByZXR1cm4gbWVtYmVyOwogIH0KCiAgdm9pZCByZWNvcmRBYnN0cmFjdE1lbWJlcihEZWNsYXJhdGlvbiBtZW1iZXIpIHsKICAgIGFic3RyYWN0TWVtYmVycyA/Pz0gPERlY2xhcmF0aW9uPltdOwogICAgaWYgKG1lbWJlciBpcyBEZWxheWVkTWVtYmVyKSB7CiAgICAgIGFic3RyYWN0TWVtYmVycy5hZGRBbGwobWVtYmVyLmRlY2xhcmF0aW9ucyk7CiAgICB9IGVsc2UgewogICAgICBhYnN0cmFjdE1lbWJlcnMuYWRkKG1lbWJlcik7CiAgICB9CiAgfQoKICBDbGFzc0hpZXJhcmNoeU5vZGUgYnVpbGQoKSB7CiAgICBhc3NlcnQoIWNscy5pc1BhdGNoKTsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBzdXBlcm5vZGU7CiAgICBpZiAob2JqZWN0Q2xhc3MgIT0gY2xzLm9yaWdpbikgewogICAgICBzdXBlcm5vZGUgPSBoaWVyYXJjaHkuZ2V0Tm9kZUZyb21UeXBlKGNscy5zdXBlcnR5cGUpOwogICAgICBpZiAoc3VwZXJub2RlID09IG51bGwpIHsKICAgICAgICBzdXBlcm5vZGUgPSBoaWVyYXJjaHkuZ2V0Tm9kZUZyb21DbGFzcyhvYmplY3RDbGFzcyk7CiAgICAgIH0KICAgICAgYXNzZXJ0KHN1cGVybm9kZSAhPSBudWxsKTsKICAgIH0KCiAgICBTY29wZSBzY29wZSA9IGNscy5zY29wZTsKICAgIGlmIChjbHMuaXNNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgIERlY2xhcmF0aW9uIG1peGluID0gY2xzLm1peGVkSW5UeXBlLmRlY2xhcmF0aW9uOwogICAgICBpbmZlck1peGluQXBwbGljYXRpb24oKTsKICAgICAgLy8gcmVjb3JkU3VwZXJ0eXBlKGNscy5taXhlZEluVHlwZSk7CiAgICAgIHdoaWxlIChtaXhpbi5pc05hbWVkTWl4aW5BcHBsaWNhdGlvbikgewogICAgICAgIENsYXNzQnVpbGRlciBuYW1lZCA9IG1peGluOwogICAgICAgIC8vIHJlY29yZFN1cGVydHlwZShuYW1lZC5taXhlZEluVHlwZSk7CiAgICAgICAgbWl4aW4gPSBuYW1lZC5taXhlZEluVHlwZS5kZWNsYXJhdGlvbjsKICAgICAgfQogICAgICBpZiAobWl4aW4gaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgc2NvcGUgPSBtaXhpbi5zY29wZS5jb21wdXRlTWl4aW5TY29wZSgpOwogICAgICB9CiAgICB9CgogICAgLy8vIE1lbWJlcnMgKGV4Y2x1ZGluZyBzZXR0ZXJzKSBkZWNsYXJlZCBpbiBbY2xzXS4KICAgIExpc3Q8RGVjbGFyYXRpb24+IGxvY2FsTWVtYmVycyA9CiAgICAgICAgbmV3IExpc3Q8RGVjbGFyYXRpb24+LmZyb20oc2NvcGUubG9jYWwudmFsdWVzKQogICAgICAgICAgLi5zb3J0KGNvbXBhcmVEZWNsYXJhdGlvbnMpOwoKICAgIC8vLyBTZXR0ZXJzIGRlY2xhcmVkIGluIFtjbHNdLgogICAgTGlzdDxEZWNsYXJhdGlvbj4gbG9jYWxTZXR0ZXJzID0KICAgICAgICBuZXcgTGlzdDxEZWNsYXJhdGlvbj4uZnJvbShzY29wZS5zZXR0ZXJzLnZhbHVlcykKICAgICAgICAgIC4uc29ydChjb21wYXJlRGVjbGFyYXRpb25zKTsKCiAgICAvLyBBZGQgaW1wbGllZCBzZXR0ZXJzIGZyb20gZmllbGRzIGluIFtsb2NhbE1lbWJlcnNdLgogICAgbG9jYWxTZXR0ZXJzID0gbWVyZ2VBY2Nlc3NvcnMobG9jYWxNZW1iZXJzLCBsb2NhbFNldHRlcnMpOwoKICAgIC8vLyBNZW1iZXJzIChleGNsdWRpbmcgc2V0dGVycykgZGVjbGFyZWQgaW4gW2Nsc10gb3IgaXRzIHN1cGVyY2xhc3Nlcy4gVGhpcwogICAgLy8vIGluY2x1ZGVzIHN0YXRpYyBtZXRob2RzIG9mIFtjbHNdLCBidXQgbm90IGl0cyBzdXBlcmNsYXNzZXMuCiAgICBMaXN0PERlY2xhcmF0aW9uPiBjbGFzc01lbWJlcnM7CgogICAgLy8vIFNldHRlcnMgZGVjbGFyZWQgaW4gW2Nsc10gb3IgaXRzIHN1cGVyY2xhc3Nlcy4gVGhpcyBpbmNsdWRlcyBzdGF0aWMKICAgIC8vLyBzZXR0ZXJzIG9mIFtjbHNdLCBidXQgbm90IGl0cyBzdXBlcmNsYXNzZXMuCiAgICBMaXN0PERlY2xhcmF0aW9uPiBjbGFzc1NldHRlcnM7CgogICAgLy8vIE1lbWJlcnMgKGV4Y2x1ZGluZyBzZXR0ZXJzKSBpbmhlcml0ZWQgZnJvbSBpbnRlcmZhY2VzLiBUaGlzIGNvbnRhaW5zIG5vIHN0YXRpYwogICAgLy8vIG1lbWJlcnMuIElzIG51bGwgaWYgbm8gaW50ZXJmYWNlcyBhcmUgaW1wbGVtZW50ZWQgYnkgdGhpcyBjbGFzcyBvciBpdHMKICAgIC8vLyBzdXBlcmNsYXNzZXMuCiAgICBMaXN0PERlY2xhcmF0aW9uPiBpbnRlcmZhY2VNZW1iZXJzOwoKICAgIC8vLyBTZXR0ZXJzIGluaGVyaXRlZCBmcm9tIGludGVyZmFjZXMuIFRoaXMgY29udGFpbnMgbm8gc3RhdGljIHNldHRlcnMuIElzCiAgICAvLy8gbnVsbCBpZiBubyBpbnRlcmZhY2VzIGFyZSBpbXBsZW1lbnRlZCBieSB0aGlzIGNsYXNzIG9yIGl0cwogICAgLy8vIHN1cGVyY2xhc3Nlcy4KICAgIExpc3Q8RGVjbGFyYXRpb24+IGludGVyZmFjZVNldHRlcnM7CgogICAgTGlzdDxUeXBlQnVpbGRlcj4gc3VwZXJjbGFzc2VzOwoKICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXM7CgogICAgaW50IG1heEluaGVyaXRhbmNlUGF0aDsKCiAgICBpZiAoc3VwZXJub2RlID09IG51bGwpIHsKICAgICAgLy8gVGhpcyBzaG91bGQgYmUgT2JqZWN0LgogICAgICBjbGFzc01lbWJlcnMgPSBsb2NhbE1lbWJlcnM7CiAgICAgIGNsYXNzU2V0dGVycyA9IGxvY2FsU2V0dGVyczsKICAgICAgc3VwZXJjbGFzc2VzID0gbmV3IExpc3Q8VHlwZUJ1aWxkZXI+KDApOwogICAgICBpbnRlcmZhY2VzID0gbmV3IExpc3Q8VHlwZUJ1aWxkZXI+KDApOwogICAgICBtYXhJbmhlcml0YW5jZVBhdGggPSAwOwogICAgfSBlbHNlIHsKICAgICAgbWF4SW5oZXJpdGFuY2VQYXRoID0gc3VwZXJub2RlLm1heEluaGVyaXRhbmNlUGF0aCArIDE7CiAgICAgIHN1cGVyY2xhc3NlcyA9IG5ldyBMaXN0PFR5cGVCdWlsZGVyPihzdXBlcm5vZGUuc3VwZXJjbGFzc2VzLmxlbmd0aCArIDEpOwogICAgICBzdXBlcmNsYXNzZXMuc2V0UmFuZ2UoMCwgc3VwZXJjbGFzc2VzLmxlbmd0aCAtIDEsCiAgICAgICAgICBzdWJzdFN1cGVydHlwZXMoY2xzLnN1cGVydHlwZSwgc3VwZXJub2RlLnN1cGVyY2xhc3NlcykpOwogICAgICBzdXBlcmNsYXNzZXNbc3VwZXJjbGFzc2VzLmxlbmd0aCAtIDFdID0gcmVjb3JkU3VwZXJ0eXBlKGNscy5zdXBlcnR5cGUpOwoKICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gZGlyZWN0SW50ZXJmYWNlcyA9IGlnbm9yZUZ1bmN0aW9uKGNscy5pbnRlcmZhY2VzKTsKICAgICAgaWYgKGNscy5pc01peGluQXBwbGljYXRpb24pIHsKICAgICAgICBpZiAoZGlyZWN0SW50ZXJmYWNlcyA9PSBudWxsKSB7CiAgICAgICAgICBkaXJlY3RJbnRlcmZhY2VzID0gPFR5cGVCdWlsZGVyPltjbHMubWl4ZWRJblR5cGVdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkaXJlY3RJbnRlcmZhY2VzID0gPFR5cGVCdWlsZGVyPltjbHMubWl4ZWRJblR5cGVdCiAgICAgICAgICAgIC4uYWRkQWxsKGRpcmVjdEludGVyZmFjZXMpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZGlyZWN0SW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaXJlY3RJbnRlcmZhY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICByZWNvcmRTdXBlcnR5cGUoZGlyZWN0SW50ZXJmYWNlc1tpXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IHN1cGVyY2xhc3NJbnRlcmZhY2VzID0gc3VwZXJub2RlLmludGVyZmFjZXM7CiAgICAgIGlmIChzdXBlcmNsYXNzSW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgICAgc3VwZXJjbGFzc0ludGVyZmFjZXMgPQogICAgICAgICAgICBzdWJzdFN1cGVydHlwZXMoY2xzLnN1cGVydHlwZSwgc3VwZXJjbGFzc0ludGVyZmFjZXMpOwogICAgICB9CgogICAgICBjbGFzc01lbWJlcnMgPSBtZXJnZSgKICAgICAgICAgIGxvY2FsTWVtYmVycywgc3VwZXJub2RlLmNsYXNzTWVtYmVycywgTWVyZ2VLaW5kLnN1cGVyY2xhc3NNZW1iZXJzKTsKICAgICAgY2xhc3NTZXR0ZXJzID0gbWVyZ2UoCiAgICAgICAgICBsb2NhbFNldHRlcnMsIHN1cGVybm9kZS5jbGFzc1NldHRlcnMsIE1lcmdlS2luZC5zdXBlcmNsYXNzU2V0dGVycyk7CgogICAgICBpZiAoZGlyZWN0SW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgICAgTWVyZ2VSZXN1bHQgcmVzdWx0ID0gbWVyZ2VJbnRlcmZhY2VzKHN1cGVybm9kZSwgZGlyZWN0SW50ZXJmYWNlcyk7CiAgICAgICAgaW50ZXJmYWNlTWVtYmVycyA9IHJlc3VsdC5tZXJnZWRNZW1iZXJzOwogICAgICAgIGludGVyZmFjZVNldHRlcnMgPSByZXN1bHQubWVyZ2VkU2V0dGVyczsKICAgICAgICBpbnRlcmZhY2VzID0gPFR5cGVCdWlsZGVyPltdOwogICAgICAgIGlmIChzdXBlcmNsYXNzSW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1cGVyY2xhc3NJbnRlcmZhY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGFkZEludGVyZmFjZShpbnRlcmZhY2VzLCBzdXBlcmNsYXNzZXMsIHN1cGVyY2xhc3NJbnRlcmZhY2VzW2ldKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkaXJlY3RJbnRlcmZhY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBUeXBlQnVpbGRlciBkaXJlY3RJbnRlcmZhY2UgPSBkaXJlY3RJbnRlcmZhY2VzW2ldOwogICAgICAgICAgYWRkSW50ZXJmYWNlKGludGVyZmFjZXMsIHN1cGVyY2xhc3NlcywgZGlyZWN0SW50ZXJmYWNlKTsKICAgICAgICAgIENsYXNzSGllcmFyY2h5Tm9kZSBpbnRlcmZhY2VOb2RlID0KICAgICAgICAgICAgICBoaWVyYXJjaHkuZ2V0Tm9kZUZyb21UeXBlKGRpcmVjdEludGVyZmFjZSk7CiAgICAgICAgICBpZiAoaW50ZXJmYWNlTm9kZSAhPSBudWxsKSB7CiAgICAgICAgICAgIGlmIChtYXhJbmhlcml0YW5jZVBhdGggPCBpbnRlcmZhY2VOb2RlLm1heEluaGVyaXRhbmNlUGF0aCArIDEpIHsKICAgICAgICAgICAgICBtYXhJbmhlcml0YW5jZVBhdGggPSBpbnRlcmZhY2VOb2RlLm1heEluaGVyaXRhbmNlUGF0aCArIDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgTGlzdDxUeXBlQnVpbGRlcj4gdHlwZXMgPQogICAgICAgICAgICAgICAgc3Vic3RTdXBlcnR5cGVzKGRpcmVjdEludGVyZmFjZSwgaW50ZXJmYWNlTm9kZS5zdXBlcmNsYXNzZXMpOwogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgYWRkSW50ZXJmYWNlKGludGVyZmFjZXMsIHN1cGVyY2xhc3NlcywgdHlwZXNbaV0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaW50ZXJmYWNlTm9kZS5pbnRlcmZhY2VzICE9IG51bGwpIHsKICAgICAgICAgICAgICBMaXN0PFR5cGVCdWlsZGVyPiB0eXBlcyA9CiAgICAgICAgICAgICAgICAgIHN1YnN0U3VwZXJ0eXBlcyhkaXJlY3RJbnRlcmZhY2UsIGludGVyZmFjZU5vZGUuaW50ZXJmYWNlcyk7CiAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgYWRkSW50ZXJmYWNlKGludGVyZmFjZXMsIHN1cGVyY2xhc3NlcywgdHlwZXNbaV0pOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpbnRlcmZhY2VNZW1iZXJzID0gc3VwZXJub2RlLmludGVyZmFjZU1lbWJlcnM7CiAgICAgICAgaW50ZXJmYWNlU2V0dGVycyA9IHN1cGVybm9kZS5pbnRlcmZhY2VTZXR0ZXJzOwogICAgICAgIGludGVyZmFjZXMgPSBzdXBlcmNsYXNzSW50ZXJmYWNlczsKICAgICAgfQoKICAgICAgLy8gQ2hlY2sgaWYgbG9jYWwgbWVtYmVycyBjb25mbGljdCB3aXRoIGluaGVyaXRlZCBzZXR0ZXJzLiBUaGlzIGNoZWNrIGhhcwogICAgICAvLyBhbHJlYWR5IGJlZW4gcGVyZm9ybWVkIGluIHRoZSBzdXBlcmNsYXNzLCBzbyB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgdGhlCiAgICAgIC8vIGxvY2FsIG1lbWJlcnMuIFRoZXNlIGNoZWNrcyBoYXZlIHRvIG9jY3VyIGxhdGUgdG8gZW5hYmxlIGluZmVycmluZwogICAgICAvLyB0eXBlcyBiZXR3ZWVuIHNldHRlcnMgYW5kIGdldHRlcnMsIG9yIGZyb20gYSBzZXR0ZXIgdG8gYSBmaW5hbCBmaWVsZC4KICAgICAgbWVyZ2UobG9jYWxNZW1iZXJzLCBjbGFzc1NldHRlcnMsIE1lcmdlS2luZC5tZW1iZXJzV2l0aFNldHRlcnMpOwoKICAgICAgLy8gQ2hlY2sgaWYgbG9jYWwgc2V0dGVycyBjb25mbGljdCB3aXRoIGluaGVyaXRlZCBtZW1iZXJzLiBBcyBhYm92ZSwgd2UKICAgICAgLy8gb25seSBuZWVkIHRvIGNoZWNrIHRoZSBsb2NhbCBzZXR0ZXJzLgogICAgICBtZXJnZShsb2NhbFNldHRlcnMsIGNsYXNzTWVtYmVycywgTWVyZ2VLaW5kLnNldHRlcnNXaXRoTWVtYmVycyk7CgogICAgICBpZiAoaW50ZXJmYWNlTWVtYmVycyAhPSBudWxsKSB7CiAgICAgICAgaW50ZXJmYWNlTWVtYmVycyA9CiAgICAgICAgICAgIG1lcmdlKGNsYXNzTWVtYmVycywgaW50ZXJmYWNlTWVtYmVycywgTWVyZ2VLaW5kLnN1cGVydHlwZXNNZW1iZXJzKTsKCiAgICAgICAgLy8gQ2hlY2sgaWYgY2xhc3Mgc2V0dGVycyBjb25mbGljdCB3aXRoIG1lbWJlcnMgaW5oZXJpdGVkIGZyb20KICAgICAgICAvLyBpbnRlcmZhY2VzLgogICAgICAgIG1lcmdlKGNsYXNzU2V0dGVycywgaW50ZXJmYWNlTWVtYmVycywgTWVyZ2VLaW5kLnNldHRlcnNXaXRoTWVtYmVycyk7CiAgICAgIH0KICAgICAgaWYgKGludGVyZmFjZVNldHRlcnMgIT0gbnVsbCkgewogICAgICAgIGludGVyZmFjZVNldHRlcnMgPQogICAgICAgICAgICBtZXJnZShjbGFzc1NldHRlcnMsIGludGVyZmFjZVNldHRlcnMsIE1lcmdlS2luZC5zdXBlcnR5cGVzU2V0dGVycyk7CgogICAgICAgIC8vIENoZWNrIGlmIGNsYXNzIG1lbWJlcnMgY29uZmxpY3Qgd2l0aCBzZXR0ZXJzIGluaGVyaXRlZCBmcm9tCiAgICAgICAgLy8gaW50ZXJmYWNlcy4KICAgICAgICBtZXJnZShjbGFzc01lbWJlcnMsIGludGVyZmFjZVNldHRlcnMsIE1lcmdlS2luZC5tZW1iZXJzV2l0aFNldHRlcnMpOwogICAgICB9CiAgICB9CiAgICBpZiAoYWJzdHJhY3RNZW1iZXJzICE9IG51bGwgJiYgIWNscy5pc0Fic3RyYWN0KSB7CiAgICAgIGlmICghaGFzTm9TdWNoTWV0aG9kKSB7CiAgICAgICAgcmVwb3J0TWlzc2luZ01lbWJlcnMoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbnN0YWxsTnNtSGFuZGxlcnMoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBDbGFzc0hpZXJhcmNoeU5vZGUoCiAgICAgIGNscywKICAgICAgY2xhc3NNZW1iZXJzLAogICAgICBjbGFzc1NldHRlcnMsCiAgICAgIGludGVyZmFjZU1lbWJlcnMsCiAgICAgIGludGVyZmFjZVNldHRlcnMsCiAgICAgIHN1cGVyY2xhc3NlcywKICAgICAgaW50ZXJmYWNlcywKICAgICAgbWF4SW5oZXJpdGFuY2VQYXRoLAogICAgICBoYXNOb1N1Y2hNZXRob2QsCiAgICApOwogIH0KCiAgVHlwZUJ1aWxkZXIgcmVjb3JkU3VwZXJ0eXBlKFR5cGVCdWlsZGVyIHN1cGVydHlwZSkgewogICAgaWYgKHN1cGVydHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICAgIGRlYnVnPy5sb2coCiAgICAgICAgICAiSW4gJHt0aGlzLmNscy5mdWxsTmFtZUZvckVycm9yc30gcmVjb3JkU3VwZXJ0eXBlKCR7c3VwZXJ0eXBlLmZ1bGxOYW1lRm9yRXJyb3JzfSkiKTsKICAgICAgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSBzdXBlcnR5cGUuZGVjbGFyYXRpb247CiAgICAgIGlmIChkZWNsYXJhdGlvbiBpcyEgQ2xhc3NCdWlsZGVyKSByZXR1cm4gc3VwZXJ0eXBlOwogICAgICBDbGFzc0J1aWxkZXIgY2xzID0gZGVjbGFyYXRpb247CiAgICAgIGlmIChjbHMuaXNNaXhpbkFwcGxpY2F0aW9uKSB7CiAgICAgICAgcmVjb3JkU3VwZXJ0eXBlKGNscy5taXhlZEluVHlwZSk7CiAgICAgIH0KICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gY2xzLnR5cGVWYXJpYWJsZXM7CiAgICAgIGlmICh0eXBlVmFyaWFibGVzID09IG51bGwpIHsKICAgICAgICBzdWJzdGl0dXRpb25zW2Nscy50YXJnZXRdID0gU3Vic3RpdHV0aW9uLmVtcHR5OwogICAgICAgIGFzc2VydChjbHMudGFyZ2V0LnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpOwogICAgICB9IGVsc2UgewogICAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cyA9CiAgICAgICAgICAgIHN1cGVydHlwZS5hcmd1bWVudHMgPz8gY29tcHV0ZURlZmF1bHRUeXBlQXJndW1lbnRzKHN1cGVydHlwZSk7CiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT0gdHlwZVZhcmlhYmxlcy5sZW5ndGgpIHsKICAgICAgICAgIGFyZ3VtZW50cyA9IGNvbXB1dGVEZWZhdWx0VHlwZUFyZ3VtZW50cyhzdXBlcnR5cGUpOwogICAgICAgIH0KICAgICAgICBMaXN0PERhcnRUeXBlPiBrZXJuZWxBcmd1bWVudHMgPSBuZXcgTGlzdDxEYXJ0VHlwZT4oYXJndW1lbnRzLmxlbmd0aCk7CiAgICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBrZXJuZWxQYXJhbWV0ZXJzID0KICAgICAgICAgICAgbmV3IExpc3Q8VHlwZVBhcmFtZXRlcj4oYXJndW1lbnRzLmxlbmd0aCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGtlcm5lbFBhcmFtZXRlcnNbaV0gPSB0eXBlVmFyaWFibGVzW2ldLnRhcmdldDsKICAgICAgICAgIGtlcm5lbEFyZ3VtZW50c1tpXSA9IGFyZ3VtZW50c1tpXS5idWlsZCh0aGlzLmNscy5wYXJlbnQpOwogICAgICAgIH0KICAgICAgICBzdWJzdGl0dXRpb25zW2Nscy50YXJnZXRdID0KICAgICAgICAgICAgU3Vic3RpdHV0aW9uLmZyb21QYWlycyhrZXJuZWxQYXJhbWV0ZXJzLCBrZXJuZWxBcmd1bWVudHMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VwZXJ0eXBlOwogIH0KCiAgTGlzdDxUeXBlQnVpbGRlcj4gc3Vic3RTdXBlcnR5cGVzKAogICAgICBOYW1lZFR5cGVCdWlsZGVyIHN1cGVydHlwZSwgTGlzdDxUeXBlQnVpbGRlcj4gc3VwZXJ0eXBlcykgewogICAgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSBzdXBlcnR5cGUuZGVjbGFyYXRpb247CiAgICBpZiAoZGVjbGFyYXRpb24gaXMhIENsYXNzQnVpbGRlcikgcmV0dXJuIHN1cGVydHlwZXM7CiAgICBDbGFzc0J1aWxkZXIgY2xzID0gZGVjbGFyYXRpb247CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBjbHMudHlwZVZhcmlhYmxlczsKICAgIGlmICh0eXBlVmFyaWFibGVzID09IG51bGwpIHsKICAgICAgZGVidWc/LmxvZygiSW4gJHt0aGlzLmNscy5mdWxsTmFtZUZvckVycm9yc30gJHN1cGVydHlwZXMgYXJlbid0IHN1YnN0ZWQiKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdXBlcnR5cGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgcmVjb3JkU3VwZXJ0eXBlKHN1cGVydHlwZXNbaV0pOwogICAgICB9CiAgICAgIHJldHVybiBzdXBlcnR5cGVzOwogICAgfQogICAgTWFwPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPiBzdWJzdGl0dXRpb24gPQogICAgICAgIDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj57fTsKICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cyA9CiAgICAgICAgc3VwZXJ0eXBlLmFyZ3VtZW50cyA/PyBjb21wdXRlRGVmYXVsdFR5cGVBcmd1bWVudHMoc3VwZXJ0eXBlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVZhcmlhYmxlcy5sZW5ndGg7IGkrKykgewogICAgICBzdWJzdGl0dXRpb25bdHlwZVZhcmlhYmxlc1tpXV0gPSBhcmd1bWVudHNbaV07CiAgICB9CiAgICBMaXN0PFR5cGVCdWlsZGVyPiByZXN1bHQ7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1cGVydHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlID0gc3VwZXJ0eXBlc1tpXTsKICAgICAgVHlwZUJ1aWxkZXIgc3Vic3RlZCA9IHJlY29yZFN1cGVydHlwZShzdXBlcnR5cGUuc3Vic3Qoc3Vic3RpdHV0aW9uKSk7CiAgICAgIGlmIChzdXBlcnR5cGUgIT0gc3Vic3RlZCkgewogICAgICAgIGRlYnVnPy5sb2coIkluICR7dGhpcy5jbHMuZnVsbE5hbWVGb3JFcnJvcnN9ICRzdXBlcnR5cGUgLT4gJHN1YnN0ZWQiKTsKICAgICAgICByZXN1bHQgPz89IHN1cGVydHlwZXMudG9MaXN0KCk7CiAgICAgICAgcmVzdWx0W2ldID0gc3Vic3RlZDsKICAgICAgfSBlbHNlIHsKICAgICAgICBkZWJ1Zz8ubG9nKCJJbiAke3RoaXMuY2xzLmZ1bGxOYW1lRm9yRXJyb3JzfSAkc3VwZXJ0eXBlIGlzbid0IHN1YnN0ZWQiKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdCA/PyBzdXBlcnR5cGVzOwogIH0KCiAgTGlzdDxUeXBlQnVpbGRlcj4gY29tcHV0ZURlZmF1bHRUeXBlQXJndW1lbnRzKFR5cGVCdWlsZGVyIHR5cGUpIHsKICAgIENsYXNzQnVpbGRlciBjbHMgPSB0eXBlLmRlY2xhcmF0aW9uOwogICAgTGlzdDxUeXBlQnVpbGRlcj4gcmVzdWx0ID0gbmV3IExpc3Q8VHlwZUJ1aWxkZXI+KGNscy50eXBlVmFyaWFibGVzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7ICsraSkgewogICAgICBUeXBlVmFyaWFibGVCdWlsZGVyIHR2ID0gY2xzLnR5cGVWYXJpYWJsZXNbaV07CiAgICAgIHJlc3VsdFtpXSA9IHR2LmRlZmF1bHRUeXBlID8/CiAgICAgICAgICBjbHMubGlicmFyeS5sb2FkZXIuY29tcHV0ZVR5cGVCdWlsZGVyKHR2LnRhcmdldC5kZWZhdWx0VHlwZSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgVHlwZUJ1aWxkZXIgYWRkSW50ZXJmYWNlKExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXMsCiAgICAgIExpc3Q8VHlwZUJ1aWxkZXI+IHN1cGVyY2xhc3NlcywgVHlwZUJ1aWxkZXIgdHlwZSkgewogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUgPSBoaWVyYXJjaHkuZ2V0Tm9kZUZyb21UeXBlKHR5cGUpOwogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpbnQgZGVwdGggPSBub2RlLmRlcHRoOwogICAgaW50IG15RGVwdGggPSBzdXBlcmNsYXNzZXMubGVuZ3RoOwogICAgaWYgKGRlcHRoIDwgbXlEZXB0aCAmJiBzdXBlcmNsYXNzZXNbZGVwdGhdLmRlY2xhcmF0aW9uID09IG5vZGUuY2xzKSB7CiAgICAgIC8vIFRoaXMgaXMgYSBwb3RlbnRpYWwgY29uZmxpY3QuCiAgICAgIHJldHVybiBzdXBlcmNsYXNzZXNbZGVwdGhdOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgLy8gVGhpcyBpcyBhIHF1YWRyYXRpYyBhbGdvcml0aG0sIGJ1dCBub3JtYWxseSwgdGhlIG51bWJlciBvZgogICAgICAgIC8vIGludGVyZmFjZXMgaXMgcmVhbGx5IHNtYWxsLgogICAgICAgIGlmIChpbnRlcmZhY2VzW2ldLmRlY2xhcmF0aW9uID09IHR5cGUuZGVjbGFyYXRpb24pIHsKICAgICAgICAgIC8vIFRoaXMgaXMgYSBwb3RlbnRpYWwgY29uZmxpY3QuCiAgICAgICAgICByZXR1cm4gaW50ZXJmYWNlc1tpXTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGludGVyZmFjZXMuYWRkKHR5cGUpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBNZXJnZVJlc3VsdCBtZXJnZUludGVyZmFjZXMoCiAgICAgIENsYXNzSGllcmFyY2h5Tm9kZSBzdXBlcm5vZGUsIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXMpIHsKICAgIGRlYnVnPy5sb2coCiAgICAgICAgIm1lcmdlSW50ZXJmYWNlcygkY2xzICgke3RoaXMuY2xzfSkgJHtzdXBlcm5vZGUuaW50ZXJmYWNlc30gJHtpbnRlcmZhY2VzfSIpOwogICAgTGlzdDxMaXN0PERlY2xhcmF0aW9uPj4gbWVtYmVyTGlzdHMgPQogICAgICAgIG5ldyBMaXN0PExpc3Q8RGVjbGFyYXRpb24+PihpbnRlcmZhY2VzLmxlbmd0aCArIDEpOwogICAgTGlzdDxMaXN0PERlY2xhcmF0aW9uPj4gc2V0dGVyTGlzdHMgPQogICAgICAgIG5ldyBMaXN0PExpc3Q8RGVjbGFyYXRpb24+PihpbnRlcmZhY2VzLmxlbmd0aCArIDEpOwogICAgbWVtYmVyTGlzdHNbMF0gPSBzdXBlcm5vZGUuaW50ZXJmYWNlTWVtYmVyczsKICAgIHNldHRlckxpc3RzWzBdID0gc3VwZXJub2RlLmludGVyZmFjZVNldHRlcnM7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGludGVyZmFjZXMubGVuZ3RoOyBpKyspIHsKICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIGludGVyZmFjZU5vZGUgPQogICAgICAgICAgaGllcmFyY2h5LmdldE5vZGVGcm9tVHlwZShpbnRlcmZhY2VzW2ldKTsKICAgICAgaWYgKGludGVyZmFjZU5vZGUgPT0gbnVsbCkgewogICAgICAgIG1lbWJlckxpc3RzW2kgKyAxXSA9IG51bGw7CiAgICAgICAgc2V0dGVyTGlzdHNbaSArIDFdID0gbnVsbDsKICAgICAgfSBlbHNlIHsKICAgICAgICBtZW1iZXJMaXN0c1tpICsgMV0gPQogICAgICAgICAgICBpbnRlcmZhY2VOb2RlLmludGVyZmFjZU1lbWJlcnMgPz8gaW50ZXJmYWNlTm9kZS5jbGFzc01lbWJlcnM7CiAgICAgICAgc2V0dGVyTGlzdHNbaSArIDFdID0KICAgICAgICAgICAgaW50ZXJmYWNlTm9kZS5pbnRlcmZhY2VTZXR0ZXJzID8/IGludGVyZmFjZU5vZGUuY2xhc3NTZXR0ZXJzOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IE1lcmdlUmVzdWx0KG1lcmdlTGlzdHMobWVtYmVyTGlzdHMsIE1lcmdlS2luZC5pbnRlcmZhY2VzTWVtYmVycyksCiAgICAgICAgbWVyZ2VMaXN0cyhzZXR0ZXJMaXN0cywgTWVyZ2VLaW5kLmludGVyZmFjZXNTZXR0ZXJzKSk7CiAgfQoKICBMaXN0PERlY2xhcmF0aW9uPiBtZXJnZUxpc3RzKAogICAgICBMaXN0PExpc3Q8RGVjbGFyYXRpb24+PiBpbnB1dCwgTWVyZ2VLaW5kIG1lcmdlS2luZCkgewogICAgLy8gVGhpcyBpcyBhIGstd2F5IG1lcmdlIHNvcnQgKHdoZXJlIGsgaXMgYGlucHV0Lmxlbmd0aCArIDFgKS4gV2UgbWVyZ2UgdGhlCiAgICAvLyBsaXN0cyBwYWlyd2lzZSwgd2hpY2ggcmVkdWNlcyB0aGUgbnVtYmVyIG9mIGxpc3RzIHRvIG1lcmdlIGJ5IGhhbGYgb24KICAgIC8vIGVhY2ggaXRlcmF0aW9uLiBDb25zZXF1ZW50bHksIHdlIHBlcmZvcm0gTyhsb2cgaykgbWVyZ2VzLgogICAgd2hpbGUgKGlucHV0Lmxlbmd0aCA+IDEpIHsKICAgICAgTGlzdDxMaXN0PERlY2xhcmF0aW9uPj4gb3V0cHV0ID0gPExpc3Q8RGVjbGFyYXRpb24+PltdOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aCAtIDE7IGkgKz0gMikgewogICAgICAgIExpc3Q8RGVjbGFyYXRpb24+IGZpcnN0ID0gaW5wdXRbaV07CiAgICAgICAgTGlzdDxEZWNsYXJhdGlvbj4gc2Vjb25kID0gaW5wdXRbaSArIDFdOwogICAgICAgIGlmIChmaXJzdCA9PSBudWxsKSB7CiAgICAgICAgICBvdXRwdXQuYWRkKHNlY29uZCk7CiAgICAgICAgfSBlbHNlIGlmIChzZWNvbmQgPT0gbnVsbCkgewogICAgICAgICAgb3V0cHV0LmFkZChmaXJzdCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG91dHB1dC5hZGQobWVyZ2UoZmlyc3QsIHNlY29uZCwgbWVyZ2VLaW5kKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpbnB1dC5sZW5ndGguaXNPZGQpIHsKICAgICAgICBvdXRwdXQuYWRkKGlucHV0Lmxhc3QpOwogICAgICB9CiAgICAgIGlucHV0ID0gb3V0cHV0OwogICAgfQogICAgcmV0dXJuIGlucHV0LnNpbmdsZTsKICB9CgogIC8vLyBNZXJnZSBbYW5kIGNoZWNrXSBhY2Nlc3NvcnMuIFRoaXMgZW50YWlscyBjb3B5aW5nIG11dGFibGUgZmllbGRzIHRvCiAgLy8vIHNldHRlcnMgdG8gc2ltdWxhdGUgaW1wbGllZCBzZXR0ZXJzLCBhbmQgY2hlY2tpbmcgdGhhdCBzZXR0ZXJzIGRvbid0CiAgLy8vIG92ZXJyaWRlIHJlZ3VsYXIgbWV0aG9kcy4KICBMaXN0PERlY2xhcmF0aW9uPiBtZXJnZUFjY2Vzc29ycygKICAgICAgTGlzdDxEZWNsYXJhdGlvbj4gbWVtYmVycywgTGlzdDxEZWNsYXJhdGlvbj4gc2V0dGVycykgewogICAgZmluYWwgTGlzdDxEZWNsYXJhdGlvbj4gbWVyZ2VkU2V0dGVycyA9IG5ldyBMaXN0PERlY2xhcmF0aW9uPi5maWxsZWQoCiAgICAgICAgbWVtYmVycy5sZW5ndGggKyBzZXR0ZXJzLmxlbmd0aCwgbnVsbCwKICAgICAgICBncm93YWJsZTogdHJ1ZSk7CiAgICBpbnQgc3RvcmVJbmRleCA9IDA7CiAgICBpbnQgaSA9IDA7CiAgICBpbnQgaiA9IDA7CiAgICB3aGlsZSAoaSA8IG1lbWJlcnMubGVuZ3RoICYmIGogPCBzZXR0ZXJzLmxlbmd0aCkgewogICAgICBmaW5hbCBEZWNsYXJhdGlvbiBtZW1iZXIgPSBtZW1iZXJzW2ldOwogICAgICBmaW5hbCBEZWNsYXJhdGlvbiBzZXR0ZXIgPSBzZXR0ZXJzW2pdOwogICAgICBmaW5hbCBpbnQgY29tcGFyZSA9IGNvbXBhcmVEZWNsYXJhdGlvbnMobWVtYmVyLCBzZXR0ZXIpOwogICAgICBpZiAoY29tcGFyZSA9PSAwKSB7CiAgICAgICAgbWVyZ2VkU2V0dGVyc1tzdG9yZUluZGV4KytdID0gc2V0dGVyOwogICAgICAgIGkrKzsKICAgICAgICBqKys7CiAgICAgIH0gZWxzZSBpZiAoY29tcGFyZSA8IDApIHsKICAgICAgICBpZiAoaW1wbGllc1NldHRlcihtZW1iZXIpKSB7CiAgICAgICAgICBtZXJnZWRTZXR0ZXJzW3N0b3JlSW5kZXgrK10gPSBtZW1iZXI7CiAgICAgICAgfQogICAgICAgIGkrKzsKICAgICAgfSBlbHNlIHsKICAgICAgICBtZXJnZWRTZXR0ZXJzW3N0b3JlSW5kZXgrK10gPSBzZXR0ZXJzW2pdOwogICAgICAgIGorKzsKICAgICAgfQogICAgfQogICAgd2hpbGUgKGkgPCBtZW1iZXJzLmxlbmd0aCkgewogICAgICBmaW5hbCBEZWNsYXJhdGlvbiBtZW1iZXIgPSBtZW1iZXJzW2ldOwogICAgICBpZiAoaW1wbGllc1NldHRlcihtZW1iZXIpKSB7CiAgICAgICAgbWVyZ2VkU2V0dGVyc1tzdG9yZUluZGV4KytdID0gbWVtYmVyOwogICAgICB9CiAgICAgIGkrKzsKICAgIH0KICAgIHdoaWxlIChqIDwgc2V0dGVycy5sZW5ndGgpIHsKICAgICAgbWVyZ2VkU2V0dGVyc1tzdG9yZUluZGV4KytdID0gc2V0dGVyc1tqXTsKICAgICAgaisrOwogICAgfQoKICAgIGlmIChzdG9yZUluZGV4ID09IGopIHsKICAgICAgcmV0dXJuIHNldHRlcnM7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbWVyZ2VkU2V0dGVycy4ubGVuZ3RoID0gc3RvcmVJbmRleDsKICAgIH0KICB9CgogIHZvaWQgcmVwb3J0TWlzc2luZ01lbWJlcnMoKSB7CiAgICBNYXA8U3RyaW5nLCBMb2NhdGVkTWVzc2FnZT4gY29udGV4dE1hcCA9IDxTdHJpbmcsIExvY2F0ZWRNZXNzYWdlPnt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYnN0cmFjdE1lbWJlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSBhYnN0cmFjdE1lbWJlcnNbaV07CiAgICAgIE1lbWJlciB0YXJnZXQgPSBkZWNsYXJhdGlvbi50YXJnZXQ7CiAgICAgIGlmIChpc05hbWVWaXNpYmxlSW4odGFyZ2V0Lm5hbWUsIGNscy5saWJyYXJ5KSkgewogICAgICAgIFN0cmluZyBuYW1lID0gZGVjbGFyYXRpb24uZnVsbE5hbWVGb3JFcnJvcnM7CiAgICAgICAgU3RyaW5nIHBhcmVudE5hbWUgPSBkZWNsYXJhdGlvbi5wYXJlbnQuZnVsbE5hbWVGb3JFcnJvcnM7CiAgICAgICAgU3RyaW5nIGRpc3BsYXlOYW1lID0KICAgICAgICAgICAgZGVjbGFyYXRpb24uaXNTZXR0ZXIgPyAiJHBhcmVudE5hbWUuJG5hbWU9IiA6ICIkcGFyZW50TmFtZS4kbmFtZSI7CiAgICAgICAgY29udGV4dE1hcFtkaXNwbGF5TmFtZV0gPSB0ZW1wbGF0ZU1pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlCiAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGRpc3BsYXlOYW1lKQogICAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgZGVjbGFyYXRpb24uZmlsZVVyaSwgZGVjbGFyYXRpb24uY2hhck9mZnNldCwgbmFtZS5sZW5ndGgpOwogICAgICB9CiAgICB9CiAgICBpZiAoY29udGV4dE1hcC5pc0VtcHR5KSByZXR1cm47CiAgICBMaXN0PFN0cmluZz4gbmFtZXMgPSBuZXcgTGlzdDxTdHJpbmc+LmZyb20oY29udGV4dE1hcC5rZXlzKS4uc29ydCgpOwogICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCA9IDxMb2NhdGVkTWVzc2FnZT5bXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHsKICAgICAgY29udGV4dC5hZGQoY29udGV4dE1hcFtuYW1lc1tpXV0pOwogICAgfQogICAgY2xzLmFkZFByb2JsZW0oCiAgICAgICAgdGVtcGxhdGVNaXNzaW5nSW1wbGVtZW50YXRpb25Ob3RBYnN0cmFjdC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICBjbHMuZnVsbE5hbWVGb3JFcnJvcnMsIG5hbWVzKSwKICAgICAgICBjbHMuY2hhck9mZnNldCwKICAgICAgICBjbHMuZnVsbE5hbWVGb3JFcnJvcnMubGVuZ3RoLAogICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogIH0KCiAgdm9pZCBpbnN0YWxsTnNtSGFuZGxlcnMoKSB7CiAgICAvLyBUT09EKGFoZSk6IEltcGxlbWVudCB0aGlzLgogIH0KCiAgTGlzdDxEZWNsYXJhdGlvbj4gbWVyZ2UoCiAgICAgIExpc3Q8RGVjbGFyYXRpb24+IGFMaXN0LCBMaXN0PERlY2xhcmF0aW9uPiBiTGlzdCwgTWVyZ2VLaW5kIG1lcmdlS2luZCkgewogICAgZmluYWwgTGlzdDxEZWNsYXJhdGlvbj4gcmVzdWx0ID0gbmV3IExpc3Q8RGVjbGFyYXRpb24+LmZpbGxlZCgKICAgICAgICBhTGlzdC5sZW5ndGggKyBiTGlzdC5sZW5ndGgsIG51bGwsCiAgICAgICAgZ3Jvd2FibGU6IHRydWUpOwogICAgaW50IHN0b3JlSW5kZXggPSAwOwogICAgaW50IGkgPSAwOwogICAgaW50IGogPSAwOwogICAgd2hpbGUgKGkgPCBhTGlzdC5sZW5ndGggJiYgaiA8IGJMaXN0Lmxlbmd0aCkgewogICAgICBmaW5hbCBEZWNsYXJhdGlvbiBhID0gYUxpc3RbaV07CiAgICAgIGZpbmFsIERlY2xhcmF0aW9uIGIgPSBiTGlzdFtqXTsKICAgICAgaWYgKChtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLmludGVyZmFjZXNNZW1iZXJzIHx8CiAgICAgICAgICAgICAgbWVyZ2VLaW5kID09IE1lcmdlS2luZC5pbnRlcmZhY2VzU2V0dGVycykgJiYKICAgICAgICAgIGEuaXNTdGF0aWMpIHsKICAgICAgICBpKys7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGIuaXNTdGF0aWMpIHsKICAgICAgICBqKys7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgZmluYWwgaW50IGNvbXBhcmUgPSBjb21wYXJlRGVjbGFyYXRpb25zKGEsIGIpOwogICAgICBpZiAoY29tcGFyZSA9PSAwKSB7CiAgICAgICAgcmVzdWx0W3N0b3JlSW5kZXgrK10gPSBoYW5kbGVNZXJnZUNvbmZsaWN0KGEsIGIsIG1lcmdlS2luZCk7CiAgICAgICAgaSsrOwogICAgICAgIGorKzsKICAgICAgfSBlbHNlIGlmIChjb21wYXJlIDwgMCkgewogICAgICAgIGhhbmRsZU9ubHlBKGEsIG1lcmdlS2luZCk7CiAgICAgICAgcmVzdWx0W3N0b3JlSW5kZXgrK10gPSBhOwogICAgICAgIGkrKzsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHRbc3RvcmVJbmRleCsrXSA9IGhhbmRsZU9ubHlCKGIsIG1lcmdlS2luZCk7CiAgICAgICAgaisrOwogICAgICB9CiAgICB9CiAgICB3aGlsZSAoaSA8IGFMaXN0Lmxlbmd0aCkgewogICAgICBmaW5hbCBEZWNsYXJhdGlvbiBhID0gYUxpc3RbaV07CiAgICAgIGlmICghKG1lcmdlS2luZCA9PSBNZXJnZUtpbmQuaW50ZXJmYWNlc01lbWJlcnMgfHwKICAgICAgICAgICAgICBtZXJnZUtpbmQgPT0gTWVyZ2VLaW5kLmludGVyZmFjZXNTZXR0ZXJzKSB8fAogICAgICAgICAgIWEuaXNTdGF0aWMpIHsKICAgICAgICBoYW5kbGVPbmx5QShhLCBtZXJnZUtpbmQpOwogICAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gYTsKICAgICAgfQogICAgICBpKys7CiAgICB9CiAgICB3aGlsZSAoaiA8IGJMaXN0Lmxlbmd0aCkgewogICAgICBmaW5hbCBEZWNsYXJhdGlvbiBiID0gYkxpc3Rbal07CiAgICAgIGlmICghYi5pc1N0YXRpYykgewogICAgICAgIHJlc3VsdFtzdG9yZUluZGV4KytdID0gaGFuZGxlT25seUIoYiwgbWVyZ2VLaW5kKTsKICAgICAgfQogICAgICBqKys7CiAgICB9CiAgICBpZiAoYUxpc3QuaXNFbXB0eSAmJiBzdG9yZUluZGV4ID09IGJMaXN0Lmxlbmd0aCkgcmV0dXJuIGJMaXN0OwogICAgaWYgKGJMaXN0LmlzRW1wdHkgJiYgc3RvcmVJbmRleCA9PSBhTGlzdC5sZW5ndGgpIHJldHVybiBhTGlzdDsKICAgIHJldHVybiByZXN1bHQuLmxlbmd0aCA9IHN0b3JlSW5kZXg7CiAgfQoKICB2b2lkIGluZmVyTWl4aW5BcHBsaWNhdGlvbigpIHsKICAgIENsYXNzIGtlcm5lbENsYXNzID0gY2xzLnRhcmdldDsKICAgIFN1cGVydHlwZSBrZXJuZWxNaXhlZEluVHlwZSA9IGtlcm5lbENsYXNzLm1peGVkSW5UeXBlOwogICAgaWYgKGtlcm5lbE1peGVkSW5UeXBlID09IG51bGwpIHJldHVybjsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSBrZXJuZWxNaXhlZEluVHlwZS50eXBlQXJndW1lbnRzOwogICAgaWYgKHR5cGVBcmd1bWVudHMuaXNFbXB0eSB8fCB0eXBlQXJndW1lbnRzLmZpcnN0IGlzISBVbmtub3duVHlwZSkgcmV0dXJuOwogICAgbmV3IEJ1aWxkZXJNaXhpbkluZmVycmVyKAogICAgICAgICAgICBjbHMsCiAgICAgICAgICAgIGhpZXJhcmNoeS5jb3JlVHlwZXMsCiAgICAgICAgICAgIG5ldyBUeXBlQnVpbGRlckNvbnN0cmFpbnRHYXRoZXJlcigKICAgICAgICAgICAgICAgIGhpZXJhcmNoeSwga2VybmVsTWl4ZWRJblR5cGUuY2xhc3NOb2RlLnR5cGVQYXJhbWV0ZXJzKSkKICAgICAgICAuaW5mZXIoa2VybmVsQ2xhc3MpOwogICAgTGlzdDxUeXBlQnVpbGRlcj4gaW5mZXJyZWRBcmd1bWVudHMgPQogICAgICAgIG5ldyBMaXN0PFR5cGVCdWlsZGVyPih0eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgaW5mZXJyZWRBcmd1bWVudHNbaV0gPQogICAgICAgICAgaGllcmFyY2h5LmxvYWRlci5jb21wdXRlVHlwZUJ1aWxkZXIodHlwZUFyZ3VtZW50c1tpXSk7CiAgICB9CiAgICBOYW1lZFR5cGVCdWlsZGVyIG1peGVkSW5UeXBlID0gY2xzLm1peGVkSW5UeXBlOwogICAgbWl4ZWRJblR5cGUuYXJndW1lbnRzID0gaW5mZXJyZWRBcmd1bWVudHM7CiAgfQoKICAvLy8gVGhlIGNsYXNzIEZ1bmN0aW9uIGZyb20gZGFydDpjb3JlIGlzIHN1cHBvc2VkIHRvIGJlIGlnbm9yZWQgd2hlbiB1c2VkIGFzCiAgLy8vIGFuIGludGVyZmFjZS4KICBMaXN0PFR5cGVCdWlsZGVyPiBpZ25vcmVGdW5jdGlvbihMaXN0PFR5cGVCdWlsZGVyPiBpbnRlcmZhY2VzKSB7CiAgICBpZiAoaW50ZXJmYWNlcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW50ZXJmYWNlcy5sZW5ndGg7IGkrKykgewogICAgICBDbGFzc0J1aWxkZXIgY2xzID0gZ2V0Q2xhc3MoaW50ZXJmYWNlc1tpXSk7CiAgICAgIGlmIChjbHMgIT0gbnVsbCAmJiBjbHMudGFyZ2V0ID09IGhpZXJhcmNoeS5mdW5jdGlvbktlcm5lbENsYXNzKSB7CiAgICAgICAgaWYgKGludGVyZmFjZXMubGVuZ3RoID09IDEpIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbnRlcmZhY2VzID0gaW50ZXJmYWNlcy50b0xpc3QoKTsKICAgICAgICAgIGludGVyZmFjZXMucmVtb3ZlQXQoaSk7CiAgICAgICAgICByZXR1cm4gaWdub3JlRnVuY3Rpb24oaW50ZXJmYWNlcyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gaW50ZXJmYWNlczsKICB9Cn0KCmNsYXNzIENsYXNzSGllcmFyY2h5Tm9kZSB7CiAgLy8vIFRoZSBjbGFzcyBjb3JyZXNwb25kaW5nIHRvIHRoaXMgaGllcmFyY2h5IG5vZGUuCiAgZmluYWwgQ2xhc3NCdWlsZGVyIGNsczsKCiAgLy8vIEFsbCB0aGUgbWVtYmVycyBvZiB0aGlzIGNsYXNzIGluY2x1ZGluZyBbY2xhc3NNZW1iZXJzXSBvZiBpdHMKICAvLy8gc3VwZXJjbGFzc2VzLiBUaGUgbWVtYmVycyBhcmUgc29ydGVkIGJ5IFtjb21wYXJlRGVjbGFyYXRpb25zXS4KICBmaW5hbCBMaXN0PERlY2xhcmF0aW9uPiBjbGFzc01lbWJlcnM7CgogIC8vLyBTaW1pbGFyIHRvIFtjbGFzc01lbWJlcnNdIGJ1dCBmb3Igc2V0dGVycy4KICBmaW5hbCBMaXN0PERlY2xhcmF0aW9uPiBjbGFzc1NldHRlcnM7CgogIC8vLyBBbGwgdGhlIGludGVyZmFjZSBtZW1iZXJzIG9mIHRoaXMgY2xhc3MgaW5jbHVkaW5nIFtpbnRlcmZhY2VNZW1iZXJzXSBvZgogIC8vLyBpdHMgc3VwZXJ0eXBlcy4gVGhlIG1lbWJlcnMgYXJlIHNvcnRlZCBieSBbY29tcGFyZURlY2xhcmF0aW9uc10uCiAgLy8vCiAgLy8vIEluIGFkZGl0aW9uIHRvIHRoZSBtZW1iZXJzIG9mIFtjbGFzc01lbWJlcnNdIHRoaXMgYWxzbyBjb250YWlucyBtZW1iZXJzCiAgLy8vIGZyb20gaW50ZXJmYWNlcy4KICAvLy8KICAvLy8gVGhpcyBtYXkgYmUgbnVsbCwgaW4gd2hpY2ggY2FzZSBbY2xhc3NNZW1iZXJzXSBpcyB0aGUgaW50ZXJmYWNlIG1lbWJlcnMuCiAgZmluYWwgTGlzdDxEZWNsYXJhdGlvbj4gaW50ZXJmYWNlTWVtYmVyczsKCiAgLy8vIFNpbWlsYXIgdG8gW2ludGVyZmFjZU1lbWJlcnNdIGJ1dCBmb3Igc2V0dGVycy4KICAvLy8KICAvLy8gVGhpcyBtYXkgYmUgbnVsbCwgaW4gd2hpY2ggY2FzZSBbY2xhc3NTZXR0ZXJzXSBpcyB0aGUgaW50ZXJmYWNlIHNldHRlcnMuCiAgZmluYWwgTGlzdDxEZWNsYXJhdGlvbj4gaW50ZXJmYWNlU2V0dGVyczsKCiAgLy8vIEFsbCBzdXBlcmNsYXNzZXMgb2YgW2Nsc10gZXhjbHVkaW5nIGl0c2VsZi4gVGhlIGNsYXNzZXMgYXJlIHNvcnRlZCBieQogIC8vLyBkZXB0aCBmcm9tIHRoZSByb290IChPYmplY3QpIGluIGFzY2VuZGluZyBvcmRlci4KICBmaW5hbCBMaXN0PFR5cGVCdWlsZGVyPiBzdXBlcmNsYXNzZXM7CgogIC8vLyBUaGUgbGlzdCBvZiBhbGwgY2xhc3NlcyBpbXBsZW1lbnRlZCBieSBbY2xzXSBhbmQgaXRzIHN1cGVydHlwZXMgZXhjbHVkaW5nCiAgLy8vIGFueSBjbGFzc2VzIGZyb20gW3N1cGVyY2xhc3Nlc10uCiAgZmluYWwgTGlzdDxUeXBlQnVpbGRlcj4gaW50ZXJmYWNlczsKCiAgLy8vIFRoZSBsb25nZXN0IGluaGVyaXRhbmNlIHBhdGggZnJvbSBbY2xzXSB0byBgT2JqZWN0YC4KICBmaW5hbCBpbnQgbWF4SW5oZXJpdGFuY2VQYXRoOwoKICBpbnQgZ2V0IGRlcHRoID0+IHN1cGVyY2xhc3Nlcy5sZW5ndGg7CgogIGZpbmFsIGJvb2wgaGFzTm9TdWNoTWV0aG9kOwoKICBDbGFzc0hpZXJhcmNoeU5vZGUoCiAgICAgIHRoaXMuY2xzLAogICAgICB0aGlzLmNsYXNzTWVtYmVycywKICAgICAgdGhpcy5jbGFzc1NldHRlcnMsCiAgICAgIHRoaXMuaW50ZXJmYWNlTWVtYmVycywKICAgICAgdGhpcy5pbnRlcmZhY2VTZXR0ZXJzLAogICAgICB0aGlzLnN1cGVyY2xhc3NlcywKICAgICAgdGhpcy5pbnRlcmZhY2VzLAogICAgICB0aGlzLm1heEluaGVyaXRhbmNlUGF0aCwKICAgICAgdGhpcy5oYXNOb1N1Y2hNZXRob2QpOwoKICAvLy8gUmV0dXJucyBhIGxpc3Qgb2YgYWxsIHN1cGVydHlwZXMgb2YgW2Nsc10sIGluY2x1ZGluZyB0aGlzIG5vZGUuCiAgTGlzdDxDbGFzc0hpZXJhcmNoeU5vZGU+IGNvbXB1dGVBbGxTdXBlck5vZGVzKAogICAgICBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5KSB7CiAgICBMaXN0PENsYXNzSGllcmFyY2h5Tm9kZT4gcmVzdWx0ID0gbmV3IExpc3Q8Q2xhc3NIaWVyYXJjaHlOb2RlPigKICAgICAgICAxICsgc3VwZXJjbGFzc2VzLmxlbmd0aCArIGludGVyZmFjZXMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3VwZXJjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgIERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gc3VwZXJjbGFzc2VzW2ldLmRlY2xhcmF0aW9uOwogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgcmVzdWx0W2ldID0gaGllcmFyY2h5LmdldE5vZGVGcm9tQ2xhc3MoZGVjbGFyYXRpb24pOwogICAgICB9CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGludGVyZmFjZXMubGVuZ3RoOyBpKyspIHsKICAgICAgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSBpbnRlcmZhY2VzW2ldLmRlY2xhcmF0aW9uOwogICAgICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgcmVzdWx0W2kgKyBzdXBlcmNsYXNzZXMubGVuZ3RoXSA9CiAgICAgICAgICAgIGhpZXJhcmNoeS5nZXROb2RlRnJvbUNsYXNzKGRlY2xhcmF0aW9uKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdC4ubGFzdCA9IHRoaXM7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoW1N0cmluZ0J1ZmZlciBzYl0pIHsKICAgIHNiID8/PSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYgogICAgICAuLndyaXRlKGNscy5mdWxsTmFtZUZvckVycm9ycykKICAgICAgLi53cml0ZWxuKCI6Iik7CiAgICBpZiAobWF4SW5oZXJpdGFuY2VQYXRoICE9IHRoaXMuZGVwdGgpIHsKICAgICAgc2IKICAgICAgICAuLndyaXRlKCIgIExvbmdlc3QgcGF0aCB0byBPYmplY3Q6ICIpCiAgICAgICAgLi53cml0ZWxuKG1heEluaGVyaXRhbmNlUGF0aCk7CiAgICB9CiAgICBzYi4ud3JpdGVsbigiICBzdXBlcmNsYXNzZXM6Iik7CiAgICBpbnQgZGVwdGggPSAwOwogICAgZm9yIChUeXBlQnVpbGRlciBzdXBlcmNsYXNzIGluIHN1cGVyY2xhc3NlcykgewogICAgICBzYi53cml0ZSgiICAiICogKGRlcHRoICsgMikpOwogICAgICBpZiAoZGVwdGggIT0gMCkgc2Iud3JpdGUoIi0+ICIpOwogICAgICBzdXBlcmNsYXNzLnByaW50T24oc2IpOwogICAgICBzYi53cml0ZWxuKCk7CiAgICAgIGRlcHRoKys7CiAgICB9CiAgICBpZiAoaW50ZXJmYWNlcyAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCIgIGludGVyZmFjZXM6Iik7CiAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgICBmb3IgKFR5cGVCdWlsZGVyIGkgaW4gaW50ZXJmYWNlcykgewogICAgICAgIGlmICghZmlyc3QpIHNiLndyaXRlKCIsIik7CiAgICAgICAgc2Iud3JpdGUoIiAiKTsKICAgICAgICBpLnByaW50T24oc2IpOwogICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgIH0KICAgICAgc2Iud3JpdGVsbigpOwogICAgfQogICAgcHJpbnRNZW1iZXJzKGNsYXNzTWVtYmVycywgc2IsICJjbGFzc01lbWJlcnMiKTsKICAgIHByaW50TWVtYmVycyhjbGFzc1NldHRlcnMsIHNiLCAiY2xhc3NTZXR0ZXJzIik7CiAgICBpZiAoaW50ZXJmYWNlTWVtYmVycyAhPSBudWxsKSB7CiAgICAgIHByaW50TWVtYmVycyhpbnRlcmZhY2VNZW1iZXJzLCBzYiwgImludGVyZmFjZU1lbWJlcnMiKTsKICAgIH0KICAgIGlmIChpbnRlcmZhY2VTZXR0ZXJzICE9IG51bGwpIHsKICAgICAgcHJpbnRNZW1iZXJzKGludGVyZmFjZVNldHRlcnMsIHNiLCAiaW50ZXJmYWNlU2V0dGVycyIpOwogICAgfQogICAgcmV0dXJuICIkc2IiOwogIH0KCiAgdm9pZCBwcmludE1lbWJlcnMoCiAgICAgIExpc3Q8RGVjbGFyYXRpb24+IG1lbWJlcnMsIFN0cmluZ0J1ZmZlciBzYiwgU3RyaW5nIGhlYWRpbmcpIHsKICAgIHNiLndyaXRlKCIgICIpOwogICAgc2Iud3JpdGUoaGVhZGluZyk7CiAgICBzYi53cml0ZWxuKCI6Iik7CiAgICBmb3IgKERlY2xhcmF0aW9uIG1lbWJlciBpbiBtZW1iZXJzKSB7CiAgICAgIHNiCiAgICAgICAgLi53cml0ZSgiICAgICIpCiAgICAgICAgLi53cml0ZShtZW1iZXIucGFyZW50LmZ1bGxOYW1lRm9yRXJyb3JzKQogICAgICAgIC4ud3JpdGUoIi4iKQogICAgICAgIC4ud3JpdGUobWVtYmVyLmZ1bGxOYW1lRm9yRXJyb3JzKQogICAgICAgIC4ud3JpdGVsbigpOwogICAgfQogIH0KCiAgRGVjbGFyYXRpb24gZ2V0SW50ZXJmYWNlTWVtYmVyKE5hbWUgbmFtZSwgYm9vbCBpc1NldHRlcikgewogICAgcmV0dXJuIGZpbmRNZW1iZXIoCiAgICAgICAgbmFtZSwKICAgICAgICBpc1NldHRlcgogICAgICAgICAgICA/IGludGVyZmFjZVNldHRlcnMgPz8gY2xhc3NTZXR0ZXJzCiAgICAgICAgICAgIDogaW50ZXJmYWNlTWVtYmVycyA/PyBjbGFzc01lbWJlcnMpOwogIH0KCiAgRGVjbGFyYXRpb24gZmluZE1lbWJlcihOYW1lIG5hbWUsIExpc3Q8RGVjbGFyYXRpb24+IGRlY2xhcmF0aW9ucykgewogICAgLy8gVE9ETyhhaGUpOiBDb25zaWRlciBjcmVhdGluZyBhIG1hcCBvciBzY29wZS4gVGhlIG9idmlvdXMgY2hvaWNlIHdvdWxkIGJlCiAgICAvLyB0byB1c2Ugc2NvcGVzLCBidXQgdGhleSBkb24ndCBoYW5kbGUgcHJpdmF0ZSBuYW1lcyBjb3JyZWN0bHkuCgogICAgLy8gVGhpcyBpcyBhIGNvcHkgb2YgYENsYXNzSGllcmFyY2h5LmZpbmRNZW1iZXJCeU5hbWVgLgogICAgaW50IGxvdyA9IDAsIGhpZ2ggPSBkZWNsYXJhdGlvbnMubGVuZ3RoIC0gMTsKICAgIHdoaWxlIChsb3cgPD0gaGlnaCkgewogICAgICBpbnQgbWlkID0gbG93ICsgKChoaWdoIC0gbG93KSA+PiAxKTsKICAgICAgRGVjbGFyYXRpb24gcGl2b3QgPSBkZWNsYXJhdGlvbnNbbWlkXTsKICAgICAgaW50IGNvbXBhcmlzb24gPSBDbGFzc0hpZXJhcmNoeS5jb21wYXJlTmFtZXMobmFtZSwgcGl2b3QudGFyZ2V0Lm5hbWUpOwogICAgICBpZiAoY29tcGFyaXNvbiA8IDApIHsKICAgICAgICBoaWdoID0gbWlkIC0gMTsKICAgICAgfSBlbHNlIGlmIChjb21wYXJpc29uID4gMCkgewogICAgICAgIGxvdyA9IG1pZCArIDE7CiAgICAgIH0gZWxzZSBpZiAoaGlnaCAhPSBtaWQpIHsKICAgICAgICAvLyBFbnN1cmUgd2UgZmluZCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgZ2l2ZW4gbmFtZS4KICAgICAgICBoaWdoID0gbWlkOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBwaXZvdDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBEZWNsYXJhdGlvbiBnZXREaXNwYXRjaFRhcmdldChOYW1lIG5hbWUsIGJvb2wgaXNTZXR0ZXIpIHsKICAgIHJldHVybiBmaW5kTWVtYmVyKG5hbWUsIGlzU2V0dGVyID8gY2xhc3NTZXR0ZXJzIDogY2xhc3NNZW1iZXJzKTsKICB9CgogIHN0YXRpYyBpbnQgY29tcGFyZU1heEluaGVyaXRhbmNlUGF0aCgKICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIGEsIENsYXNzSGllcmFyY2h5Tm9kZSBiKSB7CiAgICByZXR1cm4gYi5tYXhJbmhlcml0YW5jZVBhdGguY29tcGFyZVRvKGEubWF4SW5oZXJpdGFuY2VQYXRoKTsKICB9Cn0KCmNsYXNzIE1lcmdlUmVzdWx0IHsKICBmaW5hbCBMaXN0PERlY2xhcmF0aW9uPiBtZXJnZWRNZW1iZXJzOwoKICBmaW5hbCBMaXN0PERlY2xhcmF0aW9uPiBtZXJnZWRTZXR0ZXJzOwoKICBNZXJnZVJlc3VsdCh0aGlzLm1lcmdlZE1lbWJlcnMsIHRoaXMubWVyZ2VkU2V0dGVycyk7Cn0KCmVudW0gTWVyZ2VLaW5kIHsKICAvLy8gTWVyZ2luZyBzdXBlcmNsYXNzIG1lbWJlcnMgd2l0aCB0aGUgY3VycmVudCBjbGFzcy4KICBzdXBlcmNsYXNzTWVtYmVycywKCiAgLy8vIE1lcmdpbmcgc3VwZXJjbGFzcyBzZXR0ZXJzIHdpdGggdGhlIGN1cnJlbnQgY2xhc3MuCiAgc3VwZXJjbGFzc1NldHRlcnMsCgogIC8vLyBNZXJnaW5nIG1lbWJlcnMgb2YgdHdvIGludGVyZmFjZXMuCiAgaW50ZXJmYWNlc01lbWJlcnMsCgogIC8vLyBNZXJnaW5nIHNldHRlcnMgb2YgdHdvIGludGVyZmFjZXMuCiAgaW50ZXJmYWNlc1NldHRlcnMsCgogIC8vLyBNZXJnaW5nIGNsYXNzIG1lbWJlcnMgd2l0aCBpbnRlcmZhY2UgbWVtYmVycy4KICBzdXBlcnR5cGVzTWVtYmVycywKCiAgLy8vIE1lcmdpbmcgY2xhc3Mgc2V0dGVycyB3aXRoIGludGVyZmFjZSBzZXR0ZXJzLgogIHN1cGVydHlwZXNTZXR0ZXJzLAoKICAvLy8gTWVyZ2luZyBtZW1iZXJzIHdpdGggaW5oZXJpdGVkIHNldHRlcnMuCiAgbWVtYmVyc1dpdGhTZXR0ZXJzLAoKICAvLy8gTWVyZ2luZyBzZXR0ZXJzIHdpdGggaW5oZXJpdGVkIG1lbWJlcnMuCiAgc2V0dGVyc1dpdGhNZW1iZXJzLAp9CgpMaXN0PExvY2F0ZWRNZXNzYWdlPiBpbmhlcml0ZWRDb25mbGljdENvbnRleHQoRGVjbGFyYXRpb24gYSwgRGVjbGFyYXRpb24gYikgewogIHJldHVybiBpbmhlcml0ZWRDb25mbGljdENvbnRleHRLZXJuZWwoCiAgICAgIGEudGFyZ2V0LCBiLnRhcmdldCwgYS5mdWxsTmFtZUZvckVycm9ycy5sZW5ndGgpOwp9CgpMaXN0PExvY2F0ZWRNZXNzYWdlPiBpbmhlcml0ZWRDb25mbGljdENvbnRleHRLZXJuZWwoCiAgICBNZW1iZXIgYSwgTWVtYmVyIGIsIGludCBsZW5ndGgpIHsKICAvLyBUT0RPKGFoZSk6IERlbGV0ZSB0aGlzIG1ldGhvZCB3aGVuIGl0IGlzbid0IHVzZWQgYnkgW0ludGVyZmFjZVJlc29sdmVyXS4KICBpbnQgY29tcGFyZSA9ICIke2EuZmlsZVVyaX0iLmNvbXBhcmVUbygiJHtiLmZpbGVVcml9Iik7CiAgaWYgKGNvbXBhcmUgPT0gMCkgewogICAgY29tcGFyZSA9IGEuZmlsZU9mZnNldC5jb21wYXJlVG8oYi5maWxlT2Zmc2V0KTsKICB9CiAgTWVtYmVyIGZpcnN0OwogIE1lbWJlciBzZWNvbmQ7CiAgaWYgKGNvbXBhcmUgPCAwKSB7CiAgICBmaXJzdCA9IGE7CiAgICBzZWNvbmQgPSBiOwogIH0gZWxzZSB7CiAgICBmaXJzdCA9IGI7CiAgICBzZWNvbmQgPSBhOwogIH0KICByZXR1cm4gPExvY2F0ZWRNZXNzYWdlPlsKICAgIG1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTEud2l0aExvY2F0aW9uKAogICAgICAgIGZpcnN0LmZpbGVVcmksIGZpcnN0LmZpbGVPZmZzZXQsIGxlbmd0aCksCiAgICBtZXNzYWdlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Q2F1c2UyLndpdGhMb2NhdGlvbigKICAgICAgICBzZWNvbmQuZmlsZVVyaSwgc2Vjb25kLmZpbGVPZmZzZXQsIGxlbmd0aCksCiAgXTsKfQoKY2xhc3MgQnVpbGRlck1peGluSW5mZXJyZXIgZXh0ZW5kcyBNaXhpbkluZmVycmVyIHsKICBmaW5hbCBDbGFzc0J1aWxkZXIgY2xzOwoKICBCdWlsZGVyTWl4aW5JbmZlcnJlcigKICAgICAgdGhpcy5jbHMsIENvcmVUeXBlcyBjb3JlVHlwZXMsIFR5cGVCdWlsZGVyQ29uc3RyYWludEdhdGhlcmVyIGdhdGhlcmVyKQogICAgICA6IHN1cGVyKGNvcmVUeXBlcywgZ2F0aGVyZXIpOwoKICBTdXBlcnR5cGUgYXNJbnN0YW50aWF0aW9uT2YoU3VwZXJ0eXBlIHR5cGUsIENsYXNzIHN1cGVyY2xhc3MpIHsKICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9CiAgICAgICAgZ2F0aGVyZXIuZ2V0VHlwZUFzSW5zdGFuY2VPZih0eXBlLmFzSW50ZXJmYWNlVHlwZSwgc3VwZXJjbGFzcyk7CiAgICBpZiAoaW50ZXJmYWNlVHlwZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuZXcgU3VwZXJ0eXBlKGludGVyZmFjZVR5cGUuY2xhc3NOb2RlLCBpbnRlcmZhY2VUeXBlLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgdm9pZCByZXBvcnRQcm9ibGVtKE1lc3NhZ2UgbWVzc2FnZSwgQ2xhc3Mga2VybmVsQ2xhc3MpIHsKICAgIGludCBsZW5ndGggPSBjbHMuaXNNaXhpbkFwcGxpY2F0aW9uID8gMSA6IGNscy5mdWxsTmFtZUZvckVycm9ycy5sZW5ndGg7CiAgICBjbHMuYWRkUHJvYmxlbShtZXNzYWdlLCBjbHMuY2hhck9mZnNldCwgbGVuZ3RoKTsKICB9Cn0KCmNsYXNzIFR5cGVCdWlsZGVyQ29uc3RyYWludEdhdGhlcmVyIGV4dGVuZHMgVHlwZUNvbnN0cmFpbnRHYXRoZXJlcgogICAgd2l0aCBTdGFuZGFyZEJvdW5kcyB7CiAgZmluYWwgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGhpZXJhcmNoeTsKCiAgVHlwZUJ1aWxkZXJDb25zdHJhaW50R2F0aGVyZXIoCiAgICAgIHRoaXMuaGllcmFyY2h5LCBJdGVyYWJsZTxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycykKICAgICAgOiBzdXBlci5zdWJjbGFzc2luZyh0eXBlUGFyYW1ldGVycyk7CgogIEBvdmVycmlkZQogIENsYXNzIGdldCBvYmplY3RDbGFzcyA9PiBoaWVyYXJjaHkub2JqZWN0S2VybmVsQ2xhc3M7CgogIEBvdmVycmlkZQogIENsYXNzIGdldCBmdW5jdGlvbkNsYXNzID0+IGhpZXJhcmNoeS5mdW5jdGlvbktlcm5lbENsYXNzOwoKICBAb3ZlcnJpZGUKICBDbGFzcyBnZXQgZnV0dXJlT3JDbGFzcyA9PiBoaWVyYXJjaHkuZnV0dXJlT3JLZXJuZWxDbGFzczsKCiAgQG92ZXJyaWRlCiAgQ2xhc3MgZ2V0IG51bGxDbGFzcyA9PiBoaWVyYXJjaHkubnVsbEtlcm5lbENsYXNzOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCBudWxsVHlwZSA9PiBudWxsQ2xhc3MucmF3VHlwZTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXQgb2JqZWN0VHlwZSA9PiBvYmplY3RDbGFzcy5yYXdUeXBlOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldCByYXdGdW5jdGlvblR5cGUgPT4gZnVuY3Rpb25DbGFzcy5yYXdUeXBlOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZExvd2VyQm91bmQoVHlwZUNvbnN0cmFpbnQgY29uc3RyYWludCwgRGFydFR5cGUgbG93ZXIpIHsKICAgIGNvbnN0cmFpbnQubG93ZXIgPSBnZXRTdGFuZGFyZFVwcGVyQm91bmQoY29uc3RyYWludC5sb3dlciwgbG93ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRVcHBlckJvdW5kKFR5cGVDb25zdHJhaW50IGNvbnN0cmFpbnQsIERhcnRUeXBlIHVwcGVyKSB7CiAgICBjb25zdHJhaW50LnVwcGVyID0gZ2V0U3RhbmRhcmRMb3dlckJvdW5kKGNvbnN0cmFpbnQudXBwZXIsIHVwcGVyKTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlciBnZXRJbnRlcmZhY2VNZW1iZXIoQ2xhc3MgY2xhc3NfLCBOYW1lIG5hbWUsIHtib29sIHNldHRlcjogZmFsc2V9KSB7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0VHlwZUFzSW5zdGFuY2VPZihJbnRlcmZhY2VUeXBlIHR5cGUsIENsYXNzIHN1cGVyY2xhc3MpIHsKICAgIHJldHVybiBoaWVyYXJjaHkuZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZih0eXBlLCBzdXBlcmNsYXNzKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZnV0dXJlVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoaGllcmFyY2h5LmZ1dHVyZUtlcm5lbENsYXNzLCA8RGFydFR5cGU+W3R5cGVdKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNTdWJ0eXBlT2YoRGFydFR5cGUgc3VidHlwZSwgRGFydFR5cGUgc3VwZXJ0eXBlKSB7CiAgICByZXR1cm4gaGllcmFyY2h5LnR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHN1YnR5cGUsIHN1cGVydHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldExlZ2FjeUxlYXN0VXBwZXJCb3VuZCgKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlMSwgSW50ZXJmYWNlVHlwZSB0eXBlMikgewogICAgcmV0dXJuIGhpZXJhcmNoeS5nZXRLZXJuZWxMZWdhY3lMZWFzdFVwcGVyQm91bmQodHlwZTEsIHR5cGUyKTsKICB9Cn0KCmNsYXNzIERlbGF5ZWRPdmVycmlkZUNoZWNrIHsKICBmaW5hbCBDbGFzc0J1aWxkZXIgY2xzOwogIGZpbmFsIERlY2xhcmF0aW9uIGE7CiAgZmluYWwgRGVjbGFyYXRpb24gYjsKCiAgY29uc3QgRGVsYXllZE92ZXJyaWRlQ2hlY2sodGhpcy5jbHMsIHRoaXMuYSwgdGhpcy5iKTsKCiAgdm9pZCBjaGVjayhDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5KSB7CiAgICB2b2lkIGNhbGxiYWNrKAogICAgICAgIE1lbWJlciBkZWNsYXJlZE1lbWJlciwgTWVtYmVyIGludGVyZmFjZU1lbWJlciwgYm9vbCBpc1NldHRlcikgewogICAgICBjbHMuY2hlY2tPdmVycmlkZSgKICAgICAgICAgIGhpZXJhcmNoeS50eXBlcywgZGVjbGFyZWRNZW1iZXIsIGludGVyZmFjZU1lbWJlciwgaXNTZXR0ZXIsIGNhbGxiYWNrLAogICAgICAgICAgaXNJbnRlcmZhY2VDaGVjazogIWNscy5pc01peGluQXBwbGljYXRpb24pOwogICAgfQoKICAgIERlY2xhcmF0aW9uIGEgPSB0aGlzLmE7CiAgICBkZWJ1Zz8ubG9nKAogICAgICAgICJEZWxheWVkIG92ZXJyaWRlIGNoZWNrIG9mICR7ZnVsbE5hbWUoYSl9ICR7ZnVsbE5hbWUoYil9IHdydC4gJHtjbHMuZnVsbE5hbWVGb3JFcnJvcnN9Iik7CiAgICBpZiAoY2xzID09IGEucGFyZW50KSB7CiAgICAgIGlmIChhIGlzIFByb2NlZHVyZUJ1aWxkZXIpIHsKICAgICAgICBpZiAoYS5pc0dldHRlciAmJiAhaGFzRXhwbGljaXRSZXR1cm5UeXBlKGEpKSB7CiAgICAgICAgICBEYXJ0VHlwZSB0eXBlOwogICAgICAgICAgaWYgKGIuaXNHZXR0ZXIpIHsKICAgICAgICAgICAgUHJvY2VkdXJlIGJUYXJnZXQgPSBiLnRhcmdldDsKICAgICAgICAgICAgdHlwZSA9IGJUYXJnZXQuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgICAgICAgIH0gZWxzZSBpZiAoYi5pc1NldHRlcikgewogICAgICAgICAgICBQcm9jZWR1cmUgYlRhcmdldCA9IGIudGFyZ2V0OwogICAgICAgICAgICB0eXBlID0gYlRhcmdldC5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5zaW5nbGUudHlwZTsKICAgICAgICAgIH0gZWxzZSBpZiAoYi5pc0ZpZWxkKSB7CiAgICAgICAgICAgIEZpZWxkIGJUYXJnZXQgPSBiLnRhcmdldDsKICAgICAgICAgICAgdHlwZSA9IGJUYXJnZXQudHlwZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlICE9IG51bGwpIHsKICAgICAgICAgICAgdHlwZSA9IFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZSgKICAgICAgICAgICAgICAgICAgICBoaWVyYXJjaHkuZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZigKICAgICAgICAgICAgICAgICAgICAgICAgY2xzLmNscy50aGlzVHlwZSwgYi50YXJnZXQuZW5jbG9zaW5nQ2xhc3MpKQogICAgICAgICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHR5cGUpOwogICAgICAgICAgICBpZiAoIWEuaGFkVHlwZXNJbmZlcnJlZCB8fCAhYi5pc1NldHRlcikgewogICAgICAgICAgICAgIGluZmVyUmV0dXJuVHlwZShjbHMsIGEsIHR5cGUsIGEuaGFkVHlwZXNJbmZlcnJlZCwgaGllcmFyY2h5KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoYS5pc1NldHRlciAmJiAhaGFzRXhwbGljaXRseVR5cGVkRm9ybWFsUGFyYW1ldGVyKGEsIDApKSB7CiAgICAgICAgICBEYXJ0VHlwZSB0eXBlOwogICAgICAgICAgaWYgKGIuaXNHZXR0ZXIpIHsKICAgICAgICAgICAgUHJvY2VkdXJlIGJUYXJnZXQgPSBiLnRhcmdldDsKICAgICAgICAgICAgdHlwZSA9IGJUYXJnZXQuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgICAgICAgIH0gZWxzZSBpZiAoYi5pc1NldHRlcikgewogICAgICAgICAgICBQcm9jZWR1cmUgYlRhcmdldCA9IGIudGFyZ2V0OwogICAgICAgICAgICB0eXBlID0gYlRhcmdldC5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5zaW5nbGUudHlwZTsKICAgICAgICAgIH0gZWxzZSBpZiAoYi5pc0ZpZWxkKSB7CiAgICAgICAgICAgIEZpZWxkIGJUYXJnZXQgPSBiLnRhcmdldDsKICAgICAgICAgICAgdHlwZSA9IGJUYXJnZXQudHlwZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlICE9IG51bGwpIHsKICAgICAgICAgICAgdHlwZSA9IFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZSgKICAgICAgICAgICAgICAgICAgICBoaWVyYXJjaHkuZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZigKICAgICAgICAgICAgICAgICAgICAgICAgY2xzLmNscy50aGlzVHlwZSwgYi50YXJnZXQuZW5jbG9zaW5nQ2xhc3MpKQogICAgICAgICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHR5cGUpOwogICAgICAgICAgICBpZiAoIWEuaGFkVHlwZXNJbmZlcnJlZCB8fCAhYi5pc0dldHRlcikgewogICAgICAgICAgICAgIGluZmVyUGFyYW1ldGVyVHlwZShjbHMsIGEsIGEuZm9ybWFscy5zaW5nbGUsIHR5cGUsCiAgICAgICAgICAgICAgICAgIGEuaGFkVHlwZXNJbmZlcnJlZCwgaGllcmFyY2h5KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhLmhhZFR5cGVzSW5mZXJyZWQgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKGEgaXMgRmllbGRCdWlsZGVyICYmIGEudHlwZSA9PSBudWxsKSB7CiAgICAgICAgRGFydFR5cGUgdHlwZTsKICAgICAgICBpZiAoYi5pc0dldHRlcikgewogICAgICAgICAgUHJvY2VkdXJlIGJUYXJnZXQgPSBiLnRhcmdldDsKICAgICAgICAgIHR5cGUgPSBiVGFyZ2V0LmZ1bmN0aW9uLnJldHVyblR5cGU7CiAgICAgICAgfSBlbHNlIGlmIChiLmlzU2V0dGVyKSB7CiAgICAgICAgICBQcm9jZWR1cmUgYlRhcmdldCA9IGIudGFyZ2V0OwogICAgICAgICAgdHlwZSA9IGJUYXJnZXQuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMuc2luZ2xlLnR5cGU7CiAgICAgICAgfSBlbHNlIGlmIChiLmlzRmllbGQpIHsKICAgICAgICAgIEZpZWxkIGJUYXJnZXQgPSBiLnRhcmdldDsKICAgICAgICAgIHR5cGUgPSBiVGFyZ2V0LnR5cGU7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlICE9IG51bGwpIHsKICAgICAgICAgIHR5cGUgPSBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUoCiAgICAgICAgICAgICAgICAgIGhpZXJhcmNoeS5nZXRLZXJuZWxUeXBlQXNJbnN0YW5jZU9mKAogICAgICAgICAgICAgICAgICAgICAgY2xzLmNscy50aGlzVHlwZSwgYi50YXJnZXQuZW5jbG9zaW5nQ2xhc3MpKQogICAgICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZSh0eXBlKTsKICAgICAgICAgIGlmICh0eXBlICE9IGEudGFyZ2V0LnR5cGUpIHsKICAgICAgICAgICAgaWYgKGEuaGFkVHlwZXNJbmZlcnJlZCkgewogICAgICAgICAgICAgIGlmIChiLmlzU2V0dGVyICYmCiAgICAgICAgICAgICAgICAgICghaW1wbGllc1NldHRlcihhKSB8fAogICAgICAgICAgICAgICAgICAgICAgaGllcmFyY2h5LnR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHR5cGUsIGEudGFyZ2V0LnR5cGUpKSkgewogICAgICAgICAgICAgICAgdHlwZSA9IGEudGFyZ2V0LnR5cGU7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJlcG9ydENhbnRJbmZlckZpZWxkVHlwZShjbHMsIGEpOwogICAgICAgICAgICAgICAgdHlwZSA9IGNvbnN0IEludmFsaWRUeXBlKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGRlYnVnPy5sb2coIkluZmVycmVkIHR5cGUgJHt0eXBlfSBmb3IgJHtmdWxsTmFtZShhKX0iKTsKICAgICAgICAgICAgYS50YXJnZXQudHlwZSA9IHR5cGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGEuaGFkVHlwZXNJbmZlcnJlZCA9IHRydWU7CiAgICAgIH0KICAgIH0KCiAgICBjYWxsYmFjayhhLnRhcmdldCwgYi50YXJnZXQsIGEuaXNTZXR0ZXIpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgRGVsYXllZE1lbWJlciBleHRlbmRzIERlY2xhcmF0aW9uIHsKICAvLy8gVGhlIGNsYXNzIHdoaWNoIGhhcyBpbmhlcml0ZWQgW2RlY2xhcmF0aW9uc10uCiAgQG92ZXJyaWRlCiAgZmluYWwgQ2xhc3NCdWlsZGVyIHBhcmVudDsKCiAgLy8vIENvbmZsaWN0aW5nIGRlY2xhcmF0aW9ucy4KICBmaW5hbCBMaXN0PERlY2xhcmF0aW9uPiBkZWNsYXJhdGlvbnM7CgogIGZpbmFsIGlzU2V0dGVyOwoKICBmaW5hbCBib29sIG1vZGlmeUtlcm5lbDsKCiAgRGVsYXllZE1lbWJlcigKICAgICAgdGhpcy5wYXJlbnQsIHRoaXMuZGVjbGFyYXRpb25zLCB0aGlzLmlzU2V0dGVyLCB0aGlzLm1vZGlmeUtlcm5lbCk7CgogIHZvaWQgYWRkQWxsRGVjbGFyYXRpb25zVG8oTGlzdDxEZWNsYXJhdGlvbj4gZGVjbGFyYXRpb25zKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMuZGVjbGFyYXRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgIGFkZERlY2xhcmF0aW9uSWZEaWZmZXJlbnQodGhpcy5kZWNsYXJhdGlvbnNbaV0sIGRlY2xhcmF0aW9ucyk7CiAgICB9CiAgICBhc3NlcnQoZGVjbGFyYXRpb25zLnRvU2V0KCkubGVuZ3RoID09IGRlY2xhcmF0aW9ucy5sZW5ndGgpOwogIH0KCiAgTWVtYmVyIGNoZWNrKENsYXNzSGllcmFyY2h5QnVpbGRlciBoaWVyYXJjaHkpOwoKICBEZWxheWVkTWVtYmVyIHdpdGhQYXJlbnQoQ2xhc3NCdWlsZGVyIHBhcmVudCk7CgogIEBvdmVycmlkZQogIFVyaSBnZXQgZmlsZVVyaSA9PiBwYXJlbnQuZmlsZVVyaTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBjaGFyT2Zmc2V0ID0+IHBhcmVudC5jaGFyT2Zmc2V0OwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzID0+IGRlY2xhcmF0aW9ucy5tYXAoZnVsbE5hbWUpLmpvaW4oIiUiKTsKCiAgYm9vbCBnZXQgaXNJbmhlcml0YWJsZUNvbmZsaWN0ID0+IHRydWU7CgogIEBvdmVycmlkZQogIE1lbWJlciBnZXQgdGFyZ2V0ID0+IGRlY2xhcmF0aW9ucy5maXJzdC50YXJnZXQ7Cn0KCi8vLyBUaGlzIHJlcHJlc2VudHMgYSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBpbmhlcml0ZWQgZnJvbSBhIHN1cGVyY2xhc3MgdGhhdAovLy8gaGFzIGNvbmZsaWN0cyB3aXRoIG1ldGhvZHMgaW5oZXJpdGVkIGZyb20gYW4gaW50ZXJmYWNlLiBUaGUgY29uY3JldGUKLy8vIGltcGxlbWVudGF0aW9uIGlzIHRoZSBmaXJzdCBlbGVtZW50IG9mIFtkZWNsYXJhdGlvbnNdLgpjbGFzcyBJbmhlcml0ZWRJbXBsZW1lbnRhdGlvbkludGVyZmFjZUNvbmZsaWN0IGV4dGVuZHMgRGVsYXllZE1lbWJlciB7CiAgTWVtYmVyIGNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlUmVzdWx0OwoKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzSW5oZXJpdGFibGVDb25mbGljdDsKCiAgSW5oZXJpdGVkSW1wbGVtZW50YXRpb25JbnRlcmZhY2VDb25mbGljdChDbGFzc0J1aWxkZXIgcGFyZW50LAogICAgICBMaXN0PERlY2xhcmF0aW9uPiBkZWNsYXJhdGlvbnMsIGJvb2wgaXNTZXR0ZXIsIGJvb2wgbW9kaWZ5S2VybmVsLAogICAgICB7dGhpcy5pc0luaGVyaXRhYmxlQ29uZmxpY3QgPSB0cnVlfSkKICAgICAgOiBzdXBlcihwYXJlbnQsIGRlY2xhcmF0aW9ucywgaXNTZXR0ZXIsIG1vZGlmeUtlcm5lbCk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAiSW5oZXJpdGVkSW1wbGVtZW50YXRpb25JbnRlcmZhY2VDb25mbGljdCgiCiAgICAgICAgIiR7cGFyZW50LmZ1bGxOYW1lRm9yRXJyb3JzfSwgIgogICAgICAgICJbJHtkZWNsYXJhdGlvbnMubWFwKGZ1bGxOYW1lKS5qb2luKCcsICcpfV0pIjsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlciBjaGVjayhDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5KSB7CiAgICBpZiAoY29tYmluZWRNZW1iZXJTaWduYXR1cmVSZXN1bHQgIT0gbnVsbCkgewogICAgICByZXR1cm4gY29tYmluZWRNZW1iZXJTaWduYXR1cmVSZXN1bHQ7CiAgICB9CiAgICBpZiAoIXBhcmVudC5pc0Fic3RyYWN0KSB7CiAgICAgIERlY2xhcmF0aW9uIGNvbmNyZXRlSW1wbGVtZW50YXRpb24gPSBkZWNsYXJhdGlvbnMuZmlyc3Q7CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgZGVjbGFyYXRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgbmV3IERlbGF5ZWRPdmVycmlkZUNoZWNrKAogICAgICAgICAgICAgICAgcGFyZW50LCBjb25jcmV0ZUltcGxlbWVudGF0aW9uLCBkZWNsYXJhdGlvbnNbaV0pCiAgICAgICAgICAgIC5jaGVjayhoaWVyYXJjaHkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY29tYmluZWRNZW1iZXJTaWduYXR1cmVSZXN1bHQgPQogICAgICAgIG5ldyBJbnRlcmZhY2VDb25mbGljdChwYXJlbnQsIGRlY2xhcmF0aW9ucywgaXNTZXR0ZXIsIG1vZGlmeUtlcm5lbCkKICAgICAgICAgICAgLmNoZWNrKGhpZXJhcmNoeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEZWxheWVkTWVtYmVyIHdpdGhQYXJlbnQoQ2xhc3NCdWlsZGVyIHBhcmVudCkgewogICAgcmV0dXJuIHBhcmVudCA9PSB0aGlzLnBhcmVudAogICAgICAgID8gdGhpcwogICAgICAgIDogbmV3IEluaGVyaXRlZEltcGxlbWVudGF0aW9uSW50ZXJmYWNlQ29uZmxpY3QoCiAgICAgICAgICAgIHBhcmVudCwgZGVjbGFyYXRpb25zLCBpc1NldHRlciwgbW9kaWZ5S2VybmVsKTsKICB9CgogIHN0YXRpYyBEZWNsYXJhdGlvbiBjb21iaW5lZCgKICAgICAgQ2xhc3NCdWlsZGVyIHBhcmVudCwKICAgICAgRGVjbGFyYXRpb24gY29uY3JldGVJbXBsZW1lbnRhdGlvbiwKICAgICAgRGVjbGFyYXRpb24gb3RoZXIsCiAgICAgIGJvb2wgaXNTZXR0ZXIsCiAgICAgIGJvb2wgY3JlYXRlRm9yd2FyZGVycywKICAgICAge2Jvb2wgaXNJbmhlcml0YWJsZUNvbmZsaWN0ID0gdHJ1ZX0pIHsKICAgIExpc3Q8RGVjbGFyYXRpb24+IGRlY2xhcmF0aW9ucyA9IDxEZWNsYXJhdGlvbj5bXTsKICAgIGlmIChjb25jcmV0ZUltcGxlbWVudGF0aW9uIGlzIERlbGF5ZWRNZW1iZXIpIHsKICAgICAgY29uY3JldGVJbXBsZW1lbnRhdGlvbi5hZGRBbGxEZWNsYXJhdGlvbnNUbyhkZWNsYXJhdGlvbnMpOwogICAgfSBlbHNlIHsKICAgICAgZGVjbGFyYXRpb25zLmFkZChjb25jcmV0ZUltcGxlbWVudGF0aW9uKTsKICAgIH0KICAgIGlmIChvdGhlciBpcyBEZWxheWVkTWVtYmVyKSB7CiAgICAgIG90aGVyLmFkZEFsbERlY2xhcmF0aW9uc1RvKGRlY2xhcmF0aW9ucyk7CiAgICB9IGVsc2UgewogICAgICBhZGREZWNsYXJhdGlvbklmRGlmZmVyZW50KG90aGVyLCBkZWNsYXJhdGlvbnMpOwogICAgfQogICAgaWYgKGRlY2xhcmF0aW9ucy5sZW5ndGggPT0gMSkgewogICAgICByZXR1cm4gZGVjbGFyYXRpb25zLnNpbmdsZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgSW5oZXJpdGVkSW1wbGVtZW50YXRpb25JbnRlcmZhY2VDb25mbGljdCgKICAgICAgICAgIHBhcmVudCwgZGVjbGFyYXRpb25zLCBpc1NldHRlciwgY3JlYXRlRm9yd2FyZGVycywKICAgICAgICAgIGlzSW5oZXJpdGFibGVDb25mbGljdDogaXNJbmhlcml0YWJsZUNvbmZsaWN0KTsKICAgIH0KICB9Cn0KCmNsYXNzIEludGVyZmFjZUNvbmZsaWN0IGV4dGVuZHMgRGVsYXllZE1lbWJlciB7CiAgSW50ZXJmYWNlQ29uZmxpY3QoQ2xhc3NCdWlsZGVyIHBhcmVudCwgTGlzdDxEZWNsYXJhdGlvbj4gZGVjbGFyYXRpb25zLAogICAgICBib29sIGlzU2V0dGVyLCBib29sIG1vZGlmeUtlcm5lbCkKICAgICAgOiBzdXBlcihwYXJlbnQsIGRlY2xhcmF0aW9ucywgaXNTZXR0ZXIsIG1vZGlmeUtlcm5lbCk7CgogIE1lbWJlciBjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICJJbnRlcmZhY2VDb25mbGljdCgke3BhcmVudC5mdWxsTmFtZUZvckVycm9yc30sICIKICAgICAgICAiWyR7ZGVjbGFyYXRpb25zLm1hcChmdWxsTmFtZSkuam9pbignLCAnKX1dKSI7CiAgfQoKICBEYXJ0VHlwZSBjb21wdXRlTWVtYmVyVHlwZSgKICAgICAgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGhpZXJhcmNoeSwgRGFydFR5cGUgdGhpc1R5cGUsIE1lbWJlciBtZW1iZXIpIHsKICAgIERhcnRUeXBlIHR5cGU7CiAgICBpZiAobWVtYmVyIGlzIFByb2NlZHVyZSkgewogICAgICBpZiAobWVtYmVyLmlzR2V0dGVyKSB7CiAgICAgICAgdHlwZSA9IG1lbWJlci5nZXR0ZXJUeXBlOwogICAgICB9IGVsc2UgaWYgKG1lbWJlci5pc1NldHRlcikgewogICAgICAgIHR5cGUgPSBtZW1iZXIuc2V0dGVyVHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0eXBlID0gbWVtYmVyLmZ1bmN0aW9uLmZ1bmN0aW9uVHlwZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChtZW1iZXIgaXMgRmllbGQpIHsKICAgICAgdHlwZSA9IG1lbWJlci50eXBlOwogICAgfSBlbHNlIHsKICAgICAgdW5oYW5kbGVkKCIke21lbWJlci5ydW50aW1lVHlwZX0iLCAiJG1lbWJlciIsIHBhcmVudC5jaGFyT2Zmc2V0LAogICAgICAgICAgcGFyZW50LmZpbGVVcmkpOwogICAgfQogICAgcmV0dXJuIFN1YnN0aXR1dGlvbi5mcm9tSW50ZXJmYWNlVHlwZShoaWVyYXJjaHkuZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZigKICAgICAgICAgICAgdGhpc1R5cGUsIG1lbWJlci5lbmNsb3NpbmdDbGFzcykpCiAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHR5cGUpOwogIH0KCiAgYm9vbCBpc01vcmVTcGVjaWZpYyhDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5LCBEYXJ0VHlwZSBhLCBEYXJ0VHlwZSBiKSB7CiAgICBpZiAoaXNTZXR0ZXIpIHsKICAgICAgcmV0dXJuIGhpZXJhcmNoeS50eXBlcy5pc1N1YnR5cGVPZktlcm5lbChiLCBhKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBoaWVyYXJjaHkudHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoYSwgYik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXIgY2hlY2soQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGhpZXJhcmNoeSkgewogICAgaWYgKGNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlUmVzdWx0ICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlUmVzdWx0OwogICAgfQogICAgaWYgKHBhcmVudC5saWJyYXJ5IGlzISBTb3VyY2VMaWJyYXJ5QnVpbGRlcikgewogICAgICByZXR1cm4gY29tYmluZWRNZW1iZXJTaWduYXR1cmVSZXN1bHQgPSBkZWNsYXJhdGlvbnMuZmlyc3QudGFyZ2V0OwogICAgfQogICAgRGFydFR5cGUgdGhpc1R5cGUgPSBwYXJlbnQuY2xzLnRoaXNUeXBlOwogICAgRGVjbGFyYXRpb24gYmVzdFNvRmFyOwogICAgRGFydFR5cGUgYmVzdFR5cGVTb0ZhcjsKICAgIGZvciAoaW50IGkgPSBkZWNsYXJhdGlvbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgRGVjbGFyYXRpb24gY2FuZGlkYXRlID0gZGVjbGFyYXRpb25zW2ldOwogICAgICBNZW1iZXIgdGFyZ2V0ID0gY2FuZGlkYXRlLnRhcmdldDsKICAgICAgRGFydFR5cGUgY2FuZGlkYXRlVHlwZSA9IGNvbXB1dGVNZW1iZXJUeXBlKGhpZXJhcmNoeSwgdGhpc1R5cGUsIHRhcmdldCk7CiAgICAgIGlmIChiZXN0U29GYXIgPT0gbnVsbCkgewogICAgICAgIGJlc3RTb0ZhciA9IGNhbmRpZGF0ZTsKICAgICAgICBiZXN0VHlwZVNvRmFyID0gY2FuZGlkYXRlVHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoaXNNb3JlU3BlY2lmaWMoaGllcmFyY2h5LCBjYW5kaWRhdGVUeXBlLCBiZXN0VHlwZVNvRmFyKSkgewogICAgICAgICAgZGVidWc/LmxvZygKICAgICAgICAgICAgICAiQ29tYmluZWQgTWVtYmVyIFNpZ25hdHVyZTogJHtmdWxsTmFtZShjYW5kaWRhdGUpfSAke2NhbmRpZGF0ZVR5cGV9IDw6ICR7ZnVsbE5hbWUoYmVzdFNvRmFyKX0gJHtiZXN0VHlwZVNvRmFyfSIpOwogICAgICAgICAgYmVzdFNvRmFyID0gY2FuZGlkYXRlOwogICAgICAgICAgYmVzdFR5cGVTb0ZhciA9IGNhbmRpZGF0ZVR5cGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRlYnVnPy5sb2coCiAgICAgICAgICAgICAgIkNvbWJpbmVkIE1lbWJlciBTaWduYXR1cmU6ICR7ZnVsbE5hbWUoY2FuZGlkYXRlKX0gITw6ICR7ZnVsbE5hbWUoYmVzdFNvRmFyKX0iKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChiZXN0U29GYXIgIT0gbnVsbCkgewogICAgICBkZWJ1Zz8ubG9nKCJDb21iaW5lZCBNZW1iZXIgU2lnbmF0dXJlIGJlc3RTb0ZhcjogJHtmdWxsTmFtZShiZXN0U29GYXIpfSIpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlY2xhcmF0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICAgIERlY2xhcmF0aW9uIGNhbmRpZGF0ZSA9IGRlY2xhcmF0aW9uc1tpXTsKICAgICAgICBNZW1iZXIgdGFyZ2V0ID0gY2FuZGlkYXRlLnRhcmdldDsKICAgICAgICBEYXJ0VHlwZSBjYW5kaWRhdGVUeXBlID0gY29tcHV0ZU1lbWJlclR5cGUoaGllcmFyY2h5LCB0aGlzVHlwZSwgdGFyZ2V0KTsKICAgICAgICBpZiAoIWlzTW9yZVNwZWNpZmljKGhpZXJhcmNoeSwgYmVzdFR5cGVTb0ZhciwgY2FuZGlkYXRlVHlwZSkpIHsKICAgICAgICAgIGRlYnVnPy5sb2coCiAgICAgICAgICAgICAgIkNvbWJpbmVkIE1lbWJlciBTaWduYXR1cmU6ICR7ZnVsbE5hbWUoYmVzdFNvRmFyKX0gITw6ICR7ZnVsbE5hbWUoY2FuZGlkYXRlKX0iKTsKCiAgICAgICAgICBTdHJpbmcgdXJpID0gJyR7cGFyZW50LmxpYnJhcnkudXJpfSc7CiAgICAgICAgICBpZiAodXJpID09ICdkYXJ0OmpzJyAmJgogICAgICAgICAgICAgICAgICBwYXJlbnQuZmlsZVVyaS5wYXRoU2VnbWVudHMubGFzdCA9PSAnanNfZGFydDJqcy5kYXJ0JyB8fAogICAgICAgICAgICAgIHVyaSA9PSAnZGFydDpfaW50ZXJjZXB0b3JzJyAmJgogICAgICAgICAgICAgICAgICBwYXJlbnQuZmlsZVVyaS5wYXRoU2VnbWVudHMubGFzdCA9PSAnanNfbnVtYmVyLmRhcnQnKSB7CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEZpeCB0aGUgZGFydDJqcyBsaWJyYXJpZXMgYW5kIHJlbW92ZSB0aGUKICAgICAgICAgICAgLy8gYWJvdmUgVVJJcy4KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGJlc3RTb0ZhciA9IG51bGw7CiAgICAgICAgICAgIGJlc3RUeXBlU29GYXIgPSBudWxsOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoYmVzdFNvRmFyID09IG51bGwpIHsKICAgICAgU3RyaW5nIG5hbWUgPSBwYXJlbnQuZnVsbE5hbWVGb3JFcnJvcnM7CiAgICAgIGludCBsZW5ndGggPSBwYXJlbnQuaXNBbm9ueW1vdXNNaXhpbkFwcGxpY2F0aW9uID8gMSA6IG5hbWUubGVuZ3RoOwogICAgICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0ID0gZGVjbGFyYXRpb25zLm1hcCgoRGVjbGFyYXRpb24gZCkgewogICAgICAgIHJldHVybiBtZXNzYWdlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyQ2F1c2UKICAgICAgICAgICAgLndpdGhMb2NhdGlvbihkLmZpbGVVcmksIGQuY2hhck9mZnNldCwgZC5mdWxsTmFtZUZvckVycm9ycy5sZW5ndGgpOwogICAgICB9KS50b0xpc3QoKTsKCiAgICAgIHBhcmVudC5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVDb21iaW5lZE1lbWJlclNpZ25hdHVyZUZhaWxlZC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgIHBhcmVudC5mdWxsTmFtZUZvckVycm9ycywgZGVjbGFyYXRpb25zLmZpcnN0LmZ1bGxOYW1lRm9yRXJyb3JzKSwKICAgICAgICAgIHBhcmVudC5jaGFyT2Zmc2V0LAogICAgICAgICAgbGVuZ3RoLAogICAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgZGVidWc/LmxvZygKICAgICAgICAiQ29tYmluZWQgTWVtYmVyIFNpZ25hdHVyZSBvZiAke2Z1bGxOYW1lRm9yRXJyb3JzfTogJHtmdWxsTmFtZShiZXN0U29GYXIpfSIpOwoKICAgIFByb2NlZHVyZUtpbmQga2luZCA9IFByb2NlZHVyZUtpbmQuTWV0aG9kOwogICAgaWYgKGJlc3RTb0Zhci5pc0ZpZWxkIHx8IGJlc3RTb0Zhci5pc1NldHRlciB8fCBiZXN0U29GYXIuaXNHZXR0ZXIpIHsKICAgICAga2luZCA9IGlzU2V0dGVyID8gUHJvY2VkdXJlS2luZC5TZXR0ZXIgOiBQcm9jZWR1cmVLaW5kLkdldHRlcjsKICAgIH0gZWxzZSBpZiAoYmVzdFNvRmFyLnRhcmdldCBpcyBQcm9jZWR1cmUgJiYKICAgICAgICBiZXN0U29GYXIudGFyZ2V0LmtpbmQgPT0gUHJvY2VkdXJlS2luZC5PcGVyYXRvcikgewogICAgICBraW5kID0gUHJvY2VkdXJlS2luZC5PcGVyYXRvcjsKICAgIH0KCiAgICBpZiAobW9kaWZ5S2VybmVsKSB7CiAgICAgIGRlYnVnPy5sb2coCiAgICAgICAgICAiQ29tYmluZWQgTWVtYmVyIFNpZ25hdHVyZSBvZiAke2Z1bGxOYW1lRm9yRXJyb3JzfTogbmV3IEZvcndhcmRpbmdOb2RlKCRwYXJlbnQsICRiZXN0U29GYXIsICRkZWNsYXJhdGlvbnMsICRraW5kKSIpOwogICAgICBNZW1iZXIgc3R1YiA9CiAgICAgICAgICBuZXcgRm9yd2FyZGluZ05vZGUoaGllcmFyY2h5LCBwYXJlbnQsIGJlc3RTb0ZhciwgZGVjbGFyYXRpb25zLCBraW5kKQogICAgICAgICAgICAgIC5maW5hbGl6ZSgpOwogICAgICBpZiAocGFyZW50LmNscyA9PSBzdHViLmVuY2xvc2luZ0NsYXNzKSB7CiAgICAgICAgcGFyZW50LmNscy5hZGRNZW1iZXIoc3R1Yik7CiAgICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IHBhcmVudC5saWJyYXJ5OwogICAgICAgIGlmIChiZXN0U29GYXIudGFyZ2V0IGlzIFByb2NlZHVyZSkgewogICAgICAgICAgbGlicmFyeS5mb3J3YXJkZXJzT3JpZ2lucy4uYWRkKHN0dWIpLi5hZGQoYmVzdFNvRmFyLnRhcmdldCk7CiAgICAgICAgfQogICAgICAgIGRlYnVnPy5sb2coCiAgICAgICAgICAgICJDb21iaW5lZCBNZW1iZXIgU2lnbmF0dXJlIG9mICR7ZnVsbE5hbWVGb3JFcnJvcnN9OiBhZGRlZCBzdHViICRzdHViIik7CiAgICAgICAgaWYgKHBhcmVudC5pc01peGluQXBwbGljYXRpb24pIHsKICAgICAgICAgIHJldHVybiBjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdCA9IGJlc3RTb0Zhci50YXJnZXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdCA9IHN0dWI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZGVidWc/LmxvZygKICAgICAgICAiQ29tYmluZWQgTWVtYmVyIFNpZ25hdHVyZSBvZiAke2Z1bGxOYW1lRm9yRXJyb3JzfTogcGlja2VkIGJlc3RTb0ZhciIpOwogICAgcmV0dXJuIGNvbWJpbmVkTWVtYmVyU2lnbmF0dXJlUmVzdWx0ID0gYmVzdFNvRmFyLnRhcmdldDsKICB9CgogIEBvdmVycmlkZQogIERlbGF5ZWRNZW1iZXIgd2l0aFBhcmVudChDbGFzc0J1aWxkZXIgcGFyZW50KSB7CiAgICByZXR1cm4gcGFyZW50ID09IHRoaXMucGFyZW50CiAgICAgICAgPyB0aGlzCiAgICAgICAgOiBuZXcgSW50ZXJmYWNlQ29uZmxpY3QocGFyZW50LCBkZWNsYXJhdGlvbnMsIGlzU2V0dGVyLCBtb2RpZnlLZXJuZWwpOwogIH0KCiAgc3RhdGljIERlY2xhcmF0aW9uIGNvbWJpbmVkKENsYXNzQnVpbGRlciBwYXJlbnQsIERlY2xhcmF0aW9uIGEsIERlY2xhcmF0aW9uIGIsCiAgICAgIGJvb2wgaXNTZXR0ZXIsIGJvb2wgY3JlYXRlRm9yd2FyZGVycykgewogICAgTGlzdDxEZWNsYXJhdGlvbj4gZGVjbGFyYXRpb25zID0gPERlY2xhcmF0aW9uPltdOwogICAgaWYgKGEgaXMgRGVsYXllZE1lbWJlcikgewogICAgICBhLmFkZEFsbERlY2xhcmF0aW9uc1RvKGRlY2xhcmF0aW9ucyk7CiAgICB9IGVsc2UgewogICAgICBkZWNsYXJhdGlvbnMuYWRkKGEpOwogICAgfQogICAgaWYgKGIgaXMgRGVsYXllZE1lbWJlcikgewogICAgICBiLmFkZEFsbERlY2xhcmF0aW9uc1RvKGRlY2xhcmF0aW9ucyk7CiAgICB9IGVsc2UgewogICAgICBhZGREZWNsYXJhdGlvbklmRGlmZmVyZW50KGIsIGRlY2xhcmF0aW9ucyk7CiAgICB9CiAgICBpZiAoZGVjbGFyYXRpb25zLmxlbmd0aCA9PSAxKSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbnMuc2luZ2xlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VDb25mbGljdCgKICAgICAgICAgIHBhcmVudCwgZGVjbGFyYXRpb25zLCBpc1NldHRlciwgY3JlYXRlRm9yd2FyZGVycyk7CiAgICB9CiAgfQp9CgpjbGFzcyBBYnN0cmFjdE1lbWJlck92ZXJyaWRpbmdJbXBsZW1lbnRhdGlvbiBleHRlbmRzIERlbGF5ZWRNZW1iZXIgewogIEFic3RyYWN0TWVtYmVyT3ZlcnJpZGluZ0ltcGxlbWVudGF0aW9uKAogICAgICBDbGFzc0J1aWxkZXIgcGFyZW50LAogICAgICBEZWNsYXJhdGlvbiBhYnN0cmFjdE1lbWJlciwKICAgICAgRGVjbGFyYXRpb24gY29uY3JldGVJbXBsZW1lbnRhdGlvbiwKICAgICAgYm9vbCBpc1NldHRlciwKICAgICAgYm9vbCBtb2RpZnlLZXJuZWwpCiAgICAgIDogc3VwZXIocGFyZW50LCA8RGVjbGFyYXRpb24+W2NvbmNyZXRlSW1wbGVtZW50YXRpb24sIGFic3RyYWN0TWVtYmVyXSwKICAgICAgICAgICAgaXNTZXR0ZXIsIG1vZGlmeUtlcm5lbCk7CgogIERlY2xhcmF0aW9uIGdldCBjb25jcmV0ZUltcGxlbWVudGF0aW9uID0+IGRlY2xhcmF0aW9uc1swXTsKCiAgRGVjbGFyYXRpb24gZ2V0IGFic3RyYWN0TWVtYmVyID0+IGRlY2xhcmF0aW9uc1sxXTsKCiAgTWVtYmVyIGNoZWNrKENsYXNzSGllcmFyY2h5QnVpbGRlciBoaWVyYXJjaHkpIHsKICAgIGlmICghcGFyZW50LmlzQWJzdHJhY3QgJiYgIWhpZXJhcmNoeS5ub2Rlc1twYXJlbnQuY2xzXS5oYXNOb1N1Y2hNZXRob2QpIHsKICAgICAgbmV3IERlbGF5ZWRPdmVycmlkZUNoZWNrKHBhcmVudCwgY29uY3JldGVJbXBsZW1lbnRhdGlvbiwgYWJzdHJhY3RNZW1iZXIpCiAgICAgICAgICAuY2hlY2soaGllcmFyY2h5KTsKICAgIH0KCiAgICBQcm9jZWR1cmVLaW5kIGtpbmQgPSBQcm9jZWR1cmVLaW5kLk1ldGhvZDsKICAgIGlmIChhYnN0cmFjdE1lbWJlci5pc1NldHRlciB8fCBhYnN0cmFjdE1lbWJlci5pc0dldHRlcikgewogICAgICBraW5kID0gaXNTZXR0ZXIgPyBQcm9jZWR1cmVLaW5kLlNldHRlciA6IFByb2NlZHVyZUtpbmQuR2V0dGVyOwogICAgfQogICAgaWYgKG1vZGlmeUtlcm5lbCkgewogICAgICAvLyBUaGlzIGNhbGwgd2lsbCBhZGQgYSBib2R5IHRvIHRoZSBhYnN0cmFjdCBtZXRob2QgaWYgbmVlZGVkIGZvcgogICAgICAvLyBpc0dlbmVyaWNDb3ZhcmlhbnRJbXBsIGNoZWNrcy4KICAgICAgbmV3IEZvcndhcmRpbmdOb2RlKGhpZXJhcmNoeSwgcGFyZW50LCBhYnN0cmFjdE1lbWJlciwgZGVjbGFyYXRpb25zLCBraW5kKQogICAgICAgICAgLmZpbmFsaXplKCk7CiAgICB9CiAgICByZXR1cm4gYWJzdHJhY3RNZW1iZXIudGFyZ2V0OwogIH0KCiAgQG92ZXJyaWRlCiAgRGVsYXllZE1lbWJlciB3aXRoUGFyZW50KENsYXNzQnVpbGRlciBwYXJlbnQpIHsKICAgIHJldHVybiBwYXJlbnQgPT0gdGhpcy5wYXJlbnQKICAgICAgICA/IHRoaXMKICAgICAgICA6IG5ldyBBYnN0cmFjdE1lbWJlck92ZXJyaWRpbmdJbXBsZW1lbnRhdGlvbihwYXJlbnQsIGFic3RyYWN0TWVtYmVyLAogICAgICAgICAgICBjb25jcmV0ZUltcGxlbWVudGF0aW9uLCBpc1NldHRlciwgbW9kaWZ5S2VybmVsKTsKICB9CgogIHN0YXRpYyBEZWNsYXJhdGlvbiBzZWxlY3RBYnN0cmFjdChEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbikgewogICAgaWYgKGRlY2xhcmF0aW9uIGlzIEFic3RyYWN0TWVtYmVyT3ZlcnJpZGluZ0ltcGxlbWVudGF0aW9uKSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi5hYnN0cmFjdE1lbWJlcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICAgIH0KICB9CgogIHN0YXRpYyBEZWNsYXJhdGlvbiBzZWxlY3RDb25jcmV0ZShEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbikgewogICAgaWYgKGRlY2xhcmF0aW9uIGlzIEFic3RyYWN0TWVtYmVyT3ZlcnJpZGluZ0ltcGxlbWVudGF0aW9uKSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi5jb25jcmV0ZUltcGxlbWVudGF0aW9uOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogICAgfQogIH0KfQoKdm9pZCBhZGREZWNsYXJhdGlvbklmRGlmZmVyZW50KAogICAgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24sIExpc3Q8RGVjbGFyYXRpb24+IGRlY2xhcmF0aW9ucykgewogIE1lbWJlciB0YXJnZXQgPSBkZWNsYXJhdGlvbi50YXJnZXQ7CiAgaWYgKHRhcmdldCBpcyBQcm9jZWR1cmUpIHsKICAgIEZ1bmN0aW9uTm9kZSBmdW5jdGlvbiA9IHRhcmdldC5mdW5jdGlvbjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVjbGFyYXRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgIE1lbWJlciBvdGhlciA9IGRlY2xhcmF0aW9uc1tpXS50YXJnZXQ7CiAgICAgIGlmIChvdGhlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgICBpZiAoaGFzU2FtZVNpZ25hdHVyZShmdW5jdGlvbiwgb3RoZXIuZnVuY3Rpb24pKSByZXR1cm47CiAgICAgIH0KICAgIH0KICB9IGVsc2UgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWNsYXJhdGlvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGRlY2xhcmF0aW9uID09IGRlY2xhcmF0aW9uc1tpXSkgcmV0dXJuOwogICAgfQogIH0KICBkZWNsYXJhdGlvbnMuYWRkKGRlY2xhcmF0aW9uKTsKfQoKU3RyaW5nIGZ1bGxOYW1lKERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uKSB7CiAgU3RyaW5nIHN1ZmZpeCA9IGRlY2xhcmF0aW9uLmlzU2V0dGVyID8gIj0iIDogIiI7CiAgaWYgKGRlY2xhcmF0aW9uIGlzIERlbGF5ZWRNZW1iZXIpIHsKICAgIHJldHVybiAiJHtkZWNsYXJhdGlvbi5mdWxsTmFtZUZvckVycm9yc30kc3VmZml4IjsKICB9CiAgRGVjbGFyYXRpb24gcGFyZW50ID0gZGVjbGFyYXRpb24ucGFyZW50OwogIHJldHVybiBwYXJlbnQgPT0gbnVsbAogICAgICA/ICIke2RlY2xhcmF0aW9uLmZ1bGxOYW1lRm9yRXJyb3JzfSRzdWZmaXgiCiAgICAgIDogIiR7cGFyZW50LmZ1bGxOYW1lRm9yRXJyb3JzfS4ke2RlY2xhcmF0aW9uLmZ1bGxOYW1lRm9yRXJyb3JzfSRzdWZmaXgiOwp9CgppbnQgY29tcGFyZU5hbWVkUGFyYW1ldGVycyhWYXJpYWJsZURlY2xhcmF0aW9uIGEsIFZhcmlhYmxlRGVjbGFyYXRpb24gYikgewogIHJldHVybiBhLm5hbWUuY29tcGFyZVRvKGIubmFtZSk7Cn0KCmJvb2wgaXNBYnN0cmFjdChEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbikgewogIHJldHVybiBkZWNsYXJhdGlvbi50YXJnZXQuaXNBYnN0cmFjdCB8fCBkZWNsYXJhdGlvbiBpcyBJbnRlcmZhY2VDb25mbGljdDsKfQoKYm9vbCBpbmZlclBhcmFtZXRlclR5cGUoCiAgICBDbGFzc0J1aWxkZXIgY2xzLAogICAgUHJvY2VkdXJlQnVpbGRlciBtZW1iZXIsCiAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIHBhcmFtZXRlciwKICAgIERhcnRUeXBlIHR5cGUsCiAgICBib29sIGhhZFR5cGVzSW5mZXJyZWQsCiAgICBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5KSB7CiAgZGVidWc/LmxvZygiSW5mZXJyZWQgdHlwZSAke3R5cGV9IGZvciAke3BhcmFtZXRlcn0iKTsKICBpZiAodHlwZSA9PSBwYXJhbWV0ZXIudGFyZ2V0LnR5cGUpIHJldHVybiB0cnVlOwogIGJvb2wgcmVzdWx0ID0gdHJ1ZTsKICBpZiAoaGFkVHlwZXNJbmZlcnJlZCkgewogICAgcmVwb3J0Q2FudEluZmVyUGFyYW1ldGVyVHlwZShjbHMsIG1lbWJlciwgcGFyYW1ldGVyLCBoaWVyYXJjaHkpOwogICAgdHlwZSA9IGNvbnN0IEludmFsaWRUeXBlKCk7CiAgICByZXN1bHQgPSBmYWxzZTsKICB9CiAgcGFyYW1ldGVyLnRhcmdldC50eXBlID0gdHlwZTsKICBtZW1iZXIuaGFkVHlwZXNJbmZlcnJlZCA9IHRydWU7CiAgcmV0dXJuIHJlc3VsdDsKfQoKdm9pZCByZXBvcnRDYW50SW5mZXJQYXJhbWV0ZXJUeXBlKENsYXNzQnVpbGRlciBjbHMsIE1lbWJlckJ1aWxkZXIgbWVtYmVyLAogICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBwYXJhbWV0ZXIsIENsYXNzSGllcmFyY2h5QnVpbGRlciBoaWVyYXJjaHkpIHsKICBTdHJpbmcgbmFtZSA9IHBhcmFtZXRlci5uYW1lOwogIGNscy5hZGRQcm9ibGVtKAogICAgICB0ZW1wbGF0ZUNhbnRJbmZlclR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlcy53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICBwYXJhbWV0ZXIuY2hhck9mZnNldCwKICAgICAgbmFtZS5sZW5ndGgsCiAgICAgIHdhc0hhbmRsZWQ6IHRydWUpOwp9Cgpib29sIGluZmVyUmV0dXJuVHlwZShDbGFzc0J1aWxkZXIgY2xzLCBQcm9jZWR1cmVCdWlsZGVyIG1lbWJlciwgRGFydFR5cGUgdHlwZSwKICAgIGJvb2wgaGFkVHlwZXNJbmZlcnJlZCwgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGhpZXJhcmNoeSkgewogIGlmICh0eXBlID09IG1lbWJlci50YXJnZXQuZnVuY3Rpb24ucmV0dXJuVHlwZSkgcmV0dXJuIHRydWU7CiAgYm9vbCByZXN1bHQgPSB0cnVlOwogIGlmIChoYWRUeXBlc0luZmVycmVkKSB7CiAgICByZXBvcnRDYW50SW5mZXJSZXR1cm5UeXBlKGNscywgbWVtYmVyLCBoaWVyYXJjaHkpOwogICAgdHlwZSA9IGNvbnN0IEludmFsaWRUeXBlKCk7CiAgICByZXN1bHQgPSBmYWxzZTsKICB9IGVsc2UgewogICAgbWVtYmVyLmhhZFR5cGVzSW5mZXJyZWQgPSB0cnVlOwogIH0KICBtZW1iZXIudGFyZ2V0LmZ1bmN0aW9uLnJldHVyblR5cGUgPSB0eXBlOwogIHJldHVybiByZXN1bHQ7Cn0KCnZvaWQgcmVwb3J0Q2FudEluZmVyUmV0dXJuVHlwZSgKICAgIENsYXNzQnVpbGRlciBjbHMsIE1lbWJlckJ1aWxkZXIgbWVtYmVyLCBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5KSB7CiAgU3RyaW5nIG5hbWUgPSBtZW1iZXIuZnVsbE5hbWVGb3JFcnJvcnM7CiAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dDsKICAvLyAvLyBUT0RPKGFoZSk6IFRoZSBmb2xsb3dpbmcgaXMgZm9yIGRlYnVnZ2luZywgYnV0IGNvdWxkIGJlIGNsZWFuZWQgdXAgYW5kCiAgLy8gLy8gdXNlZCB0byBpbXByb3ZlIHRoaXMgZXJyb3IgbWVzc2FnZSBpbiBnZW5lcmFsLgogIC8vCiAgLy8gY29udGV4dCA9IDxMb2NhdGVkTWVzc2FnZT5bXTsKICAvLyBDbGFzc0hpZXJhcmNoeU5vZGUgc3VwZXJub2RlID0gaGllcmFyY2h5LmdldE5vZGVGcm9tVHlwZShjbHMuc3VwZXJ0eXBlKTsKICAvLyAvLyBUT0RPKGFoZSk6IFdyb25nIHRlbXBsYXRlLgogIC8vIFRlbXBsYXRlPE1lc3NhZ2UgRnVuY3Rpb24oU3RyaW5nKT4gdGVtcGxhdGUgPQogIC8vICAgICB0ZW1wbGF0ZU1pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNlOwogIC8vIGlmIChzdXBlcm5vZGUgIT0gbnVsbCkgewogIC8vICAgRGVjbGFyYXRpb24gc3VwZXJNZW1iZXIgPQogIC8vICAgICAgIHN1cGVybm9kZS5nZXRJbnRlcmZhY2VNZW1iZXIobmV3IE5hbWUobmFtZSksIGZhbHNlKTsKICAvLyAgIGlmIChzdXBlck1lbWJlciAhPSBudWxsKSB7CiAgLy8gICAgIGNvbnRleHQuYWRkKHRlbXBsYXRlCiAgLy8gICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lKQogIC8vICAgICAgICAgLndpdGhMb2NhdGlvbigKICAvLyAgICAgICAgICAgICBzdXBlck1lbWJlci5maWxlVXJpLCBzdXBlck1lbWJlci5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCkpOwogIC8vICAgfQogIC8vICAgc3VwZXJNZW1iZXIgPSBzdXBlcm5vZGUuZ2V0SW50ZXJmYWNlTWVtYmVyKG5ldyBOYW1lKG5hbWUpLCB0cnVlKTsKICAvLyAgIGlmIChzdXBlck1lbWJlciAhPSBudWxsKSB7CiAgLy8gICAgIGNvbnRleHQuYWRkKHRlbXBsYXRlCiAgLy8gICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lKQogIC8vICAgICAgICAgLndpdGhMb2NhdGlvbigKICAvLyAgICAgICAgICAgICBzdXBlck1lbWJlci5maWxlVXJpLCBzdXBlck1lbWJlci5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCkpOwogIC8vICAgfQogIC8vIH0KICAvLyBMaXN0PFR5cGVCdWlsZGVyPiBkaXJlY3RJbnRlcmZhY2VzID0gY2xzLmludGVyZmFjZXM7CiAgLy8gZm9yIChpbnQgaSA9IDA7IGkgPCBkaXJlY3RJbnRlcmZhY2VzLmxlbmd0aDsgaSsrKSB7CiAgLy8gICBDbGFzc0hpZXJhcmNoeU5vZGUgc3VwZXJub2RlID0KICAvLyAgICAgICBoaWVyYXJjaHkuZ2V0Tm9kZUZyb21UeXBlKGRpcmVjdEludGVyZmFjZXNbaV0pOwogIC8vICAgaWYgKHN1cGVybm9kZSAhPSBudWxsKSB7CiAgLy8gICAgIERlY2xhcmF0aW9uIHN1cGVyTWVtYmVyID0KICAvLyAgICAgICAgIHN1cGVybm9kZS5nZXRJbnRlcmZhY2VNZW1iZXIobmV3IE5hbWUobmFtZSksIGZhbHNlKTsKICAvLyAgICAgaWYgKHN1cGVyTWVtYmVyICE9IG51bGwpIHsKICAvLyAgICAgICBjb250ZXh0LmFkZCh0ZW1wbGF0ZQogIC8vICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lKQogIC8vICAgICAgICAgICAud2l0aExvY2F0aW9uKAogIC8vICAgICAgICAgICAgICAgc3VwZXJNZW1iZXIuZmlsZVVyaSwgc3VwZXJNZW1iZXIuY2hhck9mZnNldCwgbmFtZS5sZW5ndGgpKTsKICAvLyAgICAgfQogIC8vICAgICBzdXBlck1lbWJlciA9IHN1cGVybm9kZS5nZXRJbnRlcmZhY2VNZW1iZXIobmV3IE5hbWUobmFtZSksIHRydWUpOwogIC8vICAgICBpZiAoc3VwZXJNZW1iZXIgIT0gbnVsbCkgewogIC8vICAgICAgIGNvbnRleHQuYWRkKHRlbXBsYXRlCiAgLy8gICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpCiAgLy8gICAgICAgICAgIC53aXRoTG9jYXRpb24oCiAgLy8gICAgICAgICAgICAgICBzdXBlck1lbWJlci5maWxlVXJpLCBzdXBlck1lbWJlci5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCkpOwogIC8vICAgICB9CiAgLy8gICB9CiAgLy8gfQogIGNscy5hZGRQcm9ibGVtKAogICAgICB0ZW1wbGF0ZUNhbnRJbmZlclJldHVyblR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlcy53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICBtZW1iZXIuY2hhck9mZnNldCwKICAgICAgbmFtZS5sZW5ndGgsCiAgICAgIHdhc0hhbmRsZWQ6IHRydWUsCiAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwp9Cgp2b2lkIHJlcG9ydENhbnRJbmZlckZpZWxkVHlwZShDbGFzc0J1aWxkZXIgY2xzLCBGaWVsZEJ1aWxkZXIgbWVtYmVyKSB7CiAgU3RyaW5nIG5hbWUgPSBtZW1iZXIuZnVsbE5hbWVGb3JFcnJvcnM7CiAgY2xzLmFkZFByb2JsZW0oCiAgICAgIHRlbXBsYXRlQ2FudEluZmVyVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgIG1lbWJlci5jaGFyT2Zmc2V0LAogICAgICBuYW1lLmxlbmd0aCwKICAgICAgd2FzSGFuZGxlZDogdHJ1ZSk7Cn0KCkNsYXNzQnVpbGRlciBnZXRDbGFzcyhUeXBlQnVpbGRlciB0eXBlKSB7CiAgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSB0eXBlLmRlY2xhcmF0aW9uOwogIHJldHVybiBkZWNsYXJhdGlvbiBpcyBDbGFzc0J1aWxkZXIgPyBkZWNsYXJhdGlvbiA6IG51bGw7Cn0KCmJvb2wgaGFzRXhwbGljaXRSZXR1cm5UeXBlKERlY2xhcmF0aW9uIGRlY2xh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ICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgSW52YWxpZFR5cGUsCiAgICAgICAgTmFtZWRUeXBlLAogICAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlLAogICAgICAgIFZvaWRUeXBlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgc2hvdyBTdWJzdGl0dXRpb247CgppbXBvcnQgJ3R5cGVfc2NoZW1hLmRhcnQnIHNob3cgVW5rbm93blR5cGU7CgphYnN0cmFjdCBjbGFzcyBTdGFuZGFyZEJvdW5kcyB7CiAgQ2xhc3MgZ2V0IGZ1bmN0aW9uQ2xhc3M7CiAgSW50ZXJmYWNlVHlwZSBnZXQgbnVsbFR5cGU7CiAgSW50ZXJmYWNlVHlwZSBnZXQgb2JqZWN0VHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCByYXdGdW5jdGlvblR5cGU7CgogIGJvb2wgaXNTdWJ0eXBlT2YoRGFydFR5cGUgc3VidHlwZSwgRGFydFR5cGUgc3VwZXJ0eXBlKTsKCiAgSW50ZXJmYWNlVHlwZSBnZXRMZWdhY3lMZWFzdFVwcGVyQm91bmQoCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZTEsIEludGVyZmFjZVR5cGUgdHlwZTIpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIHN0YW5kYXJkIGxvd2VyIGJvdW5kIG9mIFt0eXBlMV0gYW5kIFt0eXBlMl0uCiAgLy8vCiAgLy8vIFN0YW5kYXJkIGxvd2VyIGJvdW5kIGlzIGEgbG93ZXIgYm91bmQgZnVuY3Rpb24gdGhhdCBpbXBvc2VzIGFuCiAgLy8vIG9yZGVyaW5nIG9uIHRoZSB0b3AgdHlwZXMgYHZvaWRgLCBgZHluYW1pY2AsIGFuZCBgb2JqZWN0YC4gIFRoaXMgZnVuY3Rpb24KICAvLy8gYWRkaXRpb25hbGx5IGhhbmRsZXMgdGhlIHVua25vd24gdHlwZSB0aGF0IGFwcGVhcnMgZHVyaW5nIHR5cGUgaW5mZXJlbmNlLgogIERhcnRUeXBlIGdldFN0YW5kYXJkTG93ZXJCb3VuZChEYXJ0VHlwZSB0eXBlMSwgRGFydFR5cGUgdHlwZTIpIHsKICAgIC8vIEZvciBhbGwgdHlwZXMgVCwgU0xCKFQsVCkgPSBULiAgTm90ZSB0aGF0IHdlIGRvbid0IHRlc3QgZm9yIGVxdWFsaXR5CiAgICAvLyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gbWFrZSB0aGUgYWxnb3JpdGhtIHF1YWRyYXRpYy4gIFRoaXMgaXMgb2sKICAgIC8vIGJlY2F1c2UgdGhlIGNoZWNrIGlzIG5vdCBuZWVkZWQgZm9yIGNvcnJlY3RuZXNzOyBpdCdzIGp1c3QgYSBzcGVlZAogICAgLy8gb3B0aW1pemF0aW9uLgogICAgaWYgKGlkZW50aWNhbCh0eXBlMSwgdHlwZTIpKSB7CiAgICAgIHJldHVybiB0eXBlMTsKICAgIH0KCiAgICAvLyBGb3IgYW55IHR5cGUgVCwgU0xCKD8sIFQpID0gU0xCKFQsID8pID0gVC4KICAgIGlmICh0eXBlMSBpcyBVbmtub3duVHlwZSkgewogICAgICByZXR1cm4gdHlwZTI7CiAgICB9CiAgICBpZiAodHlwZTIgaXMgVW5rbm93blR5cGUpIHsKICAgICAgcmV0dXJuIHR5cGUxOwogICAgfQoKICAgIC8vIFNMQih2b2lkLCBUKSA9IFNMQihULCB2b2lkKSA9IFQuCiAgICBpZiAodHlwZTEgaXMgVm9pZFR5cGUpIHsKICAgICAgcmV0dXJuIHR5cGUyOwogICAgfQogICAgaWYgKHR5cGUyIGlzIFZvaWRUeXBlKSB7CiAgICAgIHJldHVybiB0eXBlMTsKICAgIH0KCiAgICAvLyBTTEIoZHluYW1pYywgVCkgPSBTTEIoVCwgZHluYW1pYykgPSBUIGlmIFQgaXMgbm90IHZvaWQuCiAgICBpZiAodHlwZTEgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgcmV0dXJuIHR5cGUyOwogICAgfQogICAgaWYgKHR5cGUyIGlzIER5bmFtaWNUeXBlKSB7CiAgICAgIHJldHVybiB0eXBlMTsKICAgIH0KCiAgICAvLyBTTEIoT2JqZWN0LCBUKSA9IFNMQihULCBPYmplY3QpID0gVCBpZiBUIGlzIG5vdCB2b2lkIG9yIGR5bmFtaWMuCiAgICBpZiAodHlwZTEgPT0gb2JqZWN0VHlwZSkgewogICAgICByZXR1cm4gdHlwZTI7CiAgICB9CiAgICBpZiAodHlwZTIgPT0gb2JqZWN0VHlwZSkgewogICAgICByZXR1cm4gdHlwZTE7CiAgICB9CgogICAgLy8gU0xCKGJvdHRvbSwgVCkgPSBTTEIoVCwgYm90dG9tKSA9IGJvdHRvbS4KICAgIGlmICh0eXBlMSBpcyBCb3R0b21UeXBlKSByZXR1cm4gdHlwZTE7CiAgICBpZiAodHlwZTIgaXMgQm90dG9tVHlwZSkgcmV0dXJuIHR5cGUyOwogICAgaWYgKHR5cGUxID09IG51bGxUeXBlKSByZXR1cm4gdHlwZTE7CiAgICBpZiAodHlwZTIgPT0gbnVsbFR5cGUpIHJldHVybiB0eXBlMjsKCiAgICAvLyBGdW5jdGlvbiB0eXBlcyBoYXZlIHN0cnVjdHVyYWwgbG93ZXIgYm91bmRzLgogICAgaWYgKHR5cGUxIGlzIEZ1bmN0aW9uVHlwZSAmJiB0eXBlMiBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgcmV0dXJuIF9mdW5jdGlvblN0YW5kYXJkTG93ZXJCb3VuZCh0eXBlMSwgdHlwZTIpOwogICAgfQoKICAgIC8vIE90aGVyd2lzZSwgdGhlIGxvd2VyIGJvdW5kcyAgb2YgdHdvIHR5cGVzIGlzIG9uZSBvZiB0aGVtIGl0IGlmIGl0IGlzIGEKICAgIC8vIHN1YnR5cGUgb2YgdGhlIG90aGVyLgogICAgaWYgKGlzU3VidHlwZU9mKHR5cGUxLCB0eXBlMikpIHsKICAgICAgcmV0dXJuIHR5cGUxOwogICAgfQoKICAgIGlmIChpc1N1YnR5cGVPZih0eXBlMiwgdHlwZTEpKSB7CiAgICAgIHJldHVybiB0eXBlMjsKICAgIH0KCiAgICAvLyBObyBzdWJ0eXBlIHJlbGF0aW9uLCBzbyB0aGUgbG93ZXIgYm91bmQgaXMgYm90dG9tLgogICAgcmV0dXJuIGNvbnN0IEJvdHRvbVR5cGUoKTsKICB9CgogIC8vLyBDb21wdXRlcyB0aGUgc3RhbmRhcmQgdXBwZXIgYm91bmQgb2YgdHdvIHR5cGVzLgogIC8vLwogIC8vLyBTdGFuZGFyZCB1cHBlciBib3VuZCBpcyBhbiB1cHBlciBib3VuZCBmdW5jdGlvbiB0aGF0IGltcG9zZXMgYW4gb3JkZXJpbmcKICAvLy8gb24gdGhlIHRvcCB0eXBlcyAndm9pZCcsICdkeW5hbWljJywgYW5kIGBvYmplY3RgLiAgVGhpcyBmdW5jdGlvbgogIC8vLyBhZGRpdGlvbmFsbHkgaGFuZGxlcyB0aGUgdW5rbm93biB0eXBlIHRoYXQgYXBwZWFycyBkdXJpbmcgdHlwZSBpbmZlcmVuY2UuCiAgRGFydFR5cGUgZ2V0U3RhbmRhcmRVcHBlckJvdW5kKERhcnRUeXBlIHR5cGUxLCBEYXJ0VHlwZSB0eXBlMikgewogICAgLy8gRm9yIGFsbCB0eXBlcyBULCBTVUIoVCxUKSA9IFQuICBOb3RlIHRoYXQgd2UgZG9uJ3QgdGVzdCBmb3IgZXF1YWxpdHkKICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBtYWtlIHRoZSBhbGdvcml0aG0gcXVhZHJhdGljLiAgVGhpcyBpcyBvawogICAgLy8gYmVjYXVzZSB0aGUgY2hlY2sgaXMgbm90IG5lZWRlZCBmb3IgY29ycmVjdG5lc3M7IGl0J3MganVzdCBhIHNwZWVkCiAgICAvLyBvcHRpbWl6YXRpb24uCiAgICBpZiAoaWRlbnRpY2FsKHR5cGUxLCB0eXBlMikpIHsKICAgICAgcmV0dXJuIHR5cGUxOwogICAgfQoKICAgIC8vIEZvciBhbnkgdHlwZSBULCBTVUIoPywgVCkgPSBTVUIoVCwgPykgPSBULgogICAgaWYgKHR5cGUxIGlzIFVua25vd25UeXBlKSB7CiAgICAgIHJldHVybiB0eXBlMjsKICAgIH0KICAgIGlmICh0eXBlMiBpcyBVbmtub3duVHlwZSkgewogICAgICByZXR1cm4gdHlwZTE7CiAgICB9CgogICAgLy8gU1VCKHZvaWQsIFQpID0gU1VCKFQsIHZvaWQpID0gdm9pZC4KICAgIGlmICh0eXBlMSBpcyBWb2lkVHlwZSkgewogICAgICByZXR1cm4gdHlwZTE7CiAgICB9CiAgICBpZiAodHlwZTIgaXMgVm9pZFR5cGUpIHsKICAgICAgcmV0dXJuIHR5cGUyOwogICAgfQoKICAgIC8vIFNVQihkeW5hbWljLCBUKSA9IFNVQihULCBkeW5hbWljKSA9IGR5bmFtaWMgaWYgVCBpcyBub3Qgdm9pZC4KICAgIGlmICh0eXBlMSBpcyBEeW5hbWljVHlwZSkgewogICAgICByZXR1cm4gdHlwZTE7CiAgICB9CiAgICBpZiAodHlwZTIgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgcmV0dXJuIHR5cGUyOwogICAgfQoKICAgIC8vIFNVQihPYmVjdCwgVCkgPSBTVUIoVCwgT2JqZWN0KSA9IE9iamVjdCBpZiBUIGlzIG5vdCB2b2lkIG9yIGR5bmFtaWMuCiAgICBpZiAodHlwZTEgPT0gb2JqZWN0VHlwZSkgewogICAgICByZXR1cm4gdHlwZTE7CiAgICB9CiAgICBpZiAodHlwZTIgPT0gb2JqZWN0VHlwZSkgewogICAgICByZXR1cm4gdHlwZTI7CiAgICB9CgogICAgLy8gU1VCKGJvdHRvbSwgVCkgPSBTVUIoVCwgYm90dG9tKSA9IFQuCiAgICBpZiAodHlwZTEgaXMgQm90dG9tVHlwZSkgcmV0dXJuIHR5cGUyOwogICAgaWYgKHR5cGUyIGlzIEJvdHRvbVR5cGUpIHJldHVybiB0eXBlMTsKICAgIGlmICh0eXBlMSA9PSBudWxsVHlwZSkgcmV0dXJuIHR5cGUyOwogICAgaWYgKHR5cGUyID09IG51bGxUeXBlKSByZXR1cm4gdHlwZTE7CgogICAgaWYgKHR5cGUxIGlzIFR5cGVQYXJhbWV0ZXJUeXBlIHx8IHR5cGUyIGlzIFR5cGVQYXJhbWV0ZXJUeXBlKSB7CiAgICAgIHJldHVybiBfdHlwZVBhcmFtZXRlclN0YW5kYXJkVXBwZXJCb3VuZCh0eXBlMSwgdHlwZTIpOwogICAgfQoKICAgIC8vIFRoZSBzdGFuZGFyZCB1cHBlciBib3VuZCBvZiBhIGZ1bmN0aW9uIHR5cGUgYW5kIGFuIGludGVyZmFjZSB0eXBlIFQgaXMKICAgIC8vIHRoZSBzdGFuZGFyZCB1cHBlciBib3VuZCBvZiBGdW5jdGlvbiBhbmQgVC4KICAgIGlmICh0eXBlMSBpcyBGdW5jdGlvblR5cGUgJiYgdHlwZTIgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICB0eXBlMSA9IHJhd0Z1bmN0aW9uVHlwZTsKICAgIH0KICAgIGlmICh0eXBlMiBpcyBGdW5jdGlvblR5cGUgJiYgdHlwZTEgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICB0eXBlMiA9IHJhd0Z1bmN0aW9uVHlwZTsKICAgIH0KCiAgICAvLyBBdCB0aGlzIHBvaW50IHR5cGUxIGFuZCB0eXBlMiBzaG91bGQgYm90aCBlaXRoZXIgYmUgaW50ZXJmYWNlIHR5cGVzIG9yCiAgICAvLyBmdW5jdGlvbiB0eXBlcy4KICAgIGlmICh0eXBlMSBpcyBJbnRlcmZhY2VUeXBlICYmIHR5cGUyIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgcmV0dXJuIF9pbnRlcmZhY2VTdGFuZGFyZFVwcGVyQm91bmQodHlwZTEsIHR5cGUyKTsKICAgIH0KCiAgICBpZiAodHlwZTEgaXMgRnVuY3Rpb25UeXBlICYmIHR5cGUyIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICByZXR1cm4gX2Z1bmN0aW9uU3RhbmRhcmRVcHBlckJvdW5kKHR5cGUxLCB0eXBlMik7CiAgICB9CgogICAgaWYgKHR5cGUxIGlzIEludmFsaWRUeXBlIHx8IHR5cGUyIGlzIEludmFsaWRUeXBlKSB7CiAgICAgIHJldHVybiBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgfQoKICAgIC8vIFNob3VsZCBuZXZlciBoYXBwZW4uIEFzIGEgZGVmZW5zaXZlIG1lYXN1cmUsIHJldHVybiB0aGUgZHluYW1pYyB0eXBlLgogICAgYXNzZXJ0KGZhbHNlLCAidHlwZTEgPSAkdHlwZTE7IHR5cGUyID0gJHR5cGUyIik7CiAgICByZXR1cm4gY29uc3QgRHluYW1pY1R5cGUoKTsKICB9CgogIC8vLyBDb21wdXRlIHRoZSBzdGFuZGFyZCBsb3dlciBib3VuZCBvZiBmdW5jdGlvbiB0eXBlcyBbZl0gYW5kIFtnXS4KICAvLy8KICAvLy8gVGhlIHNwZWMgcnVsZXMgZm9yIFNMQiBvbiBmdW5jdGlvbiB0eXBlcywgaW5mb3JtYWxseSwgYXJlIHByZXR0eSBzaW1wbGU6CiAgLy8vCiAgLy8vIC0gSWYgYSBwYXJhbWV0ZXIgaXMgcmVxdWlyZWQgaW4gYm90aCwgaXQgc3RheXMgcmVxdWlyZWQuCiAgLy8vCiAgLy8vIC0gSWYgYSBwb3NpdGlvbmFsIHBhcmFtZXRlciBpcyBvcHRpb25hbCBvciBtaXNzaW5nIGluIG9uZSwgaXQgYmVjb21lcwogIC8vLyAgIG9wdGlvbmFsLiAgKFRoaXMgaXMgYmVjYXVzZSB3ZSdyZSB0cnlpbmcgdG8gYnVpbGQgYSBmdW5jdGlvbiB0eXBlIHdoaWNoCiAgLy8vICAgaXMgYSBzdWJ0eXBlIG9mIGJvdGggW2ZdIGFuZCBbZ10sIG1lYW5pbmcgaXQgYWNjZXB0cyBhbGwgcG9zc2libGUgaW5wdXRzCiAgLy8vICAgdGhhdCBbZl0gYW5kIFtnXSBhY2NlcHQuKQogIC8vLwogIC8vLyAtIE5hbWVkIHBhcmFtZXRlcnMgYXJlIHVuaW9uZWQgdG9nZXRoZXIuCiAgLy8vCiAgLy8vIC0gRm9yIGFueSBwYXJhbWV0ZXIgdGhhdCBleGlzdHMgaW4gYm90aCBmdW5jdGlvbnMsIHVzZSB0aGUgU1VCIG9mIHRoZW0gYXMKICAvLy8gICB0aGUgcmVzdWx0aW5nIHBhcmFtZXRlciB0eXBlLgogIC8vLwogIC8vLyAtIFVzZSB0aGUgU0xCIG9mIHRoZWlyIHJldHVybiB0eXBlcy4KICBEYXJ0VHlwZSBfZnVuY3Rpb25TdGFuZGFyZExvd2VyQm91bmQoRnVuY3Rpb25UeXBlIGYsIEZ1bmN0aW9uVHlwZSBnKSB7CiAgICAvLyBUT0RPKHJueXN0cm9tLHBhdWxiZXJyeSk6IFJpZ2h0IG5vdywgdGhpcyBhc3N1bWVzIGYgYW5kIGcgZG8gbm90IGhhdmUgYW55CiAgICAvLyB0eXBlIHBhcmFtZXRlcnMuIFJldmlzaXQgdGhhdCBpbiB0aGUgcHJlc2VuY2Ugb2YgZ2VuZXJpYyBtZXRob2RzLgoKICAgIC8vIENhbGN1bGF0ZSB0aGUgU1VCIG9mIGVhY2ggY29ycmVzcG9uZGluZyBwYWlyIG9mIHBhcmFtZXRlcnMuCiAgICBpbnQgdG90YWxQb3NpdGlvbmFsID0KICAgICAgICBtYXRoLm1heChmLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCwgZy5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpOwogICAgdmFyIHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gbmV3IExpc3Q8RGFydFR5cGU+KHRvdGFsUG9zaXRpb25hbCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsUG9zaXRpb25hbDsgaSsrKSB7CiAgICAgIGlmIChpIDwgZi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICB2YXIgZlR5cGUgPSBmLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICAgIGlmIChpIDwgZy5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICAgIHZhciBnVHlwZSA9IGcucG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSA9IGdldFN0YW5kYXJkVXBwZXJCb3VuZChmVHlwZSwgZ1R5cGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSA9IGZUeXBlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSA9IGcucG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICAgIH0KICAgIH0KCiAgICAvLyBQYXJhbWV0ZXJzIHRoYXQgYXJlIHJlcXVpcmVkIGluIGJvdGggZnVuY3Rpb25zIGFyZSByZXF1aXJlZCBpbiB0aGUKICAgIC8vIHJlc3VsdC4gIFBhcmFtZXRlcnMgdGhhdCBhcmUgb3B0aW9uYWwgb3IgbWlzc2luZyBpbiBlaXRoZXIgZW5kIHVwCiAgICAvLyBvcHRpb25hbC4KICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50ID0KICAgICAgICBtYXRoLm1pbihmLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIGcucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICBib29sIGhhc1Bvc2l0aW9uYWwgPSByZXF1aXJlZFBhcmFtZXRlckNvdW50IDwgdG90YWxQb3NpdGlvbmFsOwoKICAgIC8vIFVuaW9uIHRoZSBuYW1lZCBwYXJhbWV0ZXJzIHRvZ2V0aGVyLgogICAgTGlzdDxOYW1lZFR5cGU+IG5hbWVkUGFyYW1ldGVycyA9IFtdOwogICAgewogICAgICBpbnQgaSA9IDA7CiAgICAgIGludCBqID0gMDsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoaSA8IGYubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICAgICAgaWYgKGogPCBnLm5hbWVkUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICAgICAgdmFyIGZOYW1lID0gZi5uYW1lZFBhcmFtZXRlcnNbaV0ubmFtZTsKICAgICAgICAgICAgdmFyIGdOYW1lID0gZy5uYW1lZFBhcmFtZXRlcnNbal0ubmFtZTsKICAgICAgICAgICAgaW50IG9yZGVyID0gZk5hbWUuY29tcGFyZVRvKGdOYW1lKTsKICAgICAgICAgICAgaWYgKG9yZGVyIDwgMCkgewogICAgICAgICAgICAgIG5hbWVkUGFyYW1ldGVycy5hZGQoZi5uYW1lZFBhcmFtZXRlcnNbaSsrXSk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAob3JkZXIgPiAwKSB7CiAgICAgICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLmFkZChnLm5hbWVkUGFyYW1ldGVyc1tqKytdKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBuYW1lZFBhcmFtZXRlcnMuYWRkKG5ldyBOYW1lZFR5cGUoCiAgICAgICAgICAgICAgICAgIGZOYW1lLAogICAgICAgICAgICAgICAgICBnZXRTdGFuZGFyZFVwcGVyQm91bmQoZi5uYW1lZFBhcmFtZXRlcnNbaSsrXS50eXBlLAogICAgICAgICAgICAgICAgICAgICAgZy5uYW1lZFBhcmFtZXRlcnNbaisrXS50eXBlKSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBuYW1lZFBhcmFtZXRlcnMuYWRkQWxsKGYubmFtZWRQYXJhbWV0ZXJzLnNraXAoaSkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLmFkZEFsbChnLm5hbWVkUGFyYW1ldGVycy5za2lwKGopKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYm9vbCBoYXNOYW1lZCA9IG5hbWVkUGFyYW1ldGVycy5pc05vdEVtcHR5OwoKICAgIC8vIEVkZ2UgY2FzZS4gRGFydCBkb2VzIG5vdCBzdXBwb3J0IGZ1bmN0aW9ucyB3aXRoIGJvdGggb3B0aW9uYWwgcG9zaXRpb25hbAogICAgLy8gYW5kIG5hbWVkIHBhcmFtZXRlcnMuIElmIHdlIHdvdWxkIHN5bnRoZXNpemUgdGhhdCwgZ2l2ZSB1cC4KICAgIGlmIChoYXNQb3NpdGlvbmFsICYmIGhhc05hbWVkKSByZXR1cm4gY29uc3QgQm90dG9tVHlwZSgpOwoKICAgIC8vIENhbGN1bGF0ZSB0aGUgU0xCIG9mIHRoZSByZXR1cm4gdHlwZS4KICAgIERhcnRUeXBlIHJldHVyblR5cGUgPSBnZXRTdGFuZGFyZExvd2VyQm91bmQoZi5yZXR1cm5UeXBlLCBnLnJldHVyblR5cGUpOwogICAgcmV0dXJuIG5ldyBGdW5jdGlvblR5cGUocG9zaXRpb25hbFBhcmFtZXRlcnMsIHJldHVyblR5cGUsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgfQoKICAvLy8gQ29tcHV0ZSB0aGUgc3RhbmRhcmQgdXBwZXIgYm91bmQgb2YgZnVuY3Rpb24gdHlwZXMgW2ZdIGFuZCBbZ10uCiAgLy8vCiAgLy8vIFRoZSBydWxlcyBmb3IgU1VCIG9uIGZ1bmN0aW9uIHR5cGVzLCBpbmZvcm1hbGx5LCBhcmUgcHJldHR5IHNpbXBsZToKICAvLy8KICAvLy8gLSBJZiB0aGUgZnVuY3Rpb25zIGRvbid0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIHJlcXVpcmVkIHBhcmFtZXRlcnMsCiAgLy8vICAgYWx3YXlzIHJldHVybiBgRnVuY3Rpb25gLgogIC8vLwogIC8vLyAtIERpc2NhcmQgYW55IG9wdGlvbmFsIG5hbWVkIG9yIHBvc2l0aW9uYWwgcGFyYW1ldGVycyB0aGUgdHdvIHR5cGVzIGRvIG5vdAogIC8vLyAgIGhhdmUgaW4gY29tbW9uLgogIC8vLwogIC8vLyAtIENvbXB1dGUgdGhlIFNMQiBvZiBlYWNoIGNvcnJlc3BvbmRpbmcgcGFpciBvZiBwYXJhbWV0ZXIgdHlwZXMsIGFuZCB0aGUKICAvLy8gICBTVUIgb2YgdGhlIHJldHVybiB0eXBlcy4gIFJldHVybiBhIGZ1bmN0aW9uIHR5cGUgd2l0aCB0aG9zZSB0eXBlcy4KICBEYXJ0VHlwZSBfZnVuY3Rpb25TdGFuZGFyZFVwcGVyQm91bmQoRnVuY3Rpb25UeXBlIGYsIEZ1bmN0aW9uVHlwZSBnKSB7CiAgICAvLyBUT0RPKHJueXN0cm9tKTogUmlnaHQgbm93LCB0aGlzIGFzc3VtZXMgZiBhbmQgZyBkbyBub3QgaGF2ZSBhbnkgdHlwZQogICAgLy8gcGFyYW1ldGVycy4gUmV2aXNpdCB0aGF0IGluIHRoZSBwcmVzZW5jZSBvZiBnZW5lcmljIG1ldGhvZHMuCgogICAgLy8gSWYgRiBhbmQgRyBkaWZmZXIgaW4gdGhlaXIgbnVtYmVyIG9mIHJlcXVpcmVkIHBhcmFtZXRlcnMsIHRoZW4gdGhlCiAgICAvLyBzdGFuZGFyZCB1cHBlciBib3VuZCBvZiBGIGFuZCBHIGlzIEZ1bmN0aW9uLgogICAgLy8gVE9ETyhwYXVsYmVycnkpOiBXZSBjb3VsZCBkbyBiZXR0ZXIgaGVyZSwgZS5nLjoKICAgIC8vICAgU1VCKChbaW50XSkgLT4gdm9pZCwgKGludCkgLT4gdm9pZCkgPSAoaW50KSAtPiB2b2lkCiAgICBpZiAoZi5yZXF1aXJlZFBhcmFtZXRlckNvdW50ICE9IGcucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgewogICAgICByZXR1cm4gZnVuY3Rpb25DbGFzcy5yYXdUeXBlOwogICAgfQogICAgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPSBmLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CgogICAgLy8gQ2FsY3VsYXRlIHRoZSBTTEIgb2YgZWFjaCBjb3JyZXNwb25kaW5nIHBhaXIgb2YgcGFyYW1ldGVycy4KICAgIC8vIElnbm9yZSBhbnkgZXh0cmEgb3B0aW9uYWwgcG9zaXRpb25hbCBwYXJhbWV0ZXJzIGlmIG9uZSBoYXMgbW9yZSB0aGFuIHRoZQogICAgLy8gb3RoZXIuCiAgICBpbnQgdG90YWxQb3NpdGlvbmFsID0KICAgICAgICBtYXRoLm1pbihmLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCwgZy5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpOwogICAgdmFyIHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gbmV3IExpc3Q8RGFydFR5cGU+KHRvdGFsUG9zaXRpb25hbCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsUG9zaXRpb25hbDsgaSsrKSB7CiAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldID0gZ2V0U3RhbmRhcmRMb3dlckJvdW5kKAogICAgICAgICAgZi5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSwgZy5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXSk7CiAgICB9CgogICAgLy8gSW50ZXJzZWN0IHRoZSBuYW1lZCBwYXJhbWV0ZXJzLgogICAgTGlzdDxOYW1lZFR5cGU+IG5hbWVkUGFyYW1ldGVycyA9IFtdOwogICAgewogICAgICBpbnQgaSA9IDA7CiAgICAgIGludCBqID0gMDsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpZiAoaSA8IGYubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICAgICAgaWYgKGogPCBnLm5hbWVkUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgICAgICAgdmFyIGZOYW1lID0gZi5uYW1lZFBhcmFtZXRlcnNbaV0ubmFtZTsKICAgICAgICAgICAgdmFyIGdOYW1lID0gZy5uYW1lZFBhcmFtZXRlcnNbal0ubmFtZTsKICAgICAgICAgICAgaW50IG9yZGVyID0gZk5hbWUuY29tcGFyZVRvKGdOYW1lKTsKICAgICAgICAgICAgaWYgKG9yZGVyIDwgMCkgewogICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgfSBlbHNlIGlmIChvcmRlciA+IDApIHsKICAgICAgICAgICAgICBqKys7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLmFkZChuZXcgTmFtZWRUeXBlKAogICAgICAgICAgICAgICAgICBmTmFtZSwKICAgICAgICAgICAgICAgICAgZ2V0U3RhbmRhcmRMb3dlckJvdW5kKGYubmFtZWRQYXJhbWV0ZXJzW2krK10udHlwZSwKICAgICAgICAgICAgICAgICAgICAgIGcubmFtZWRQYXJhbWV0ZXJzW2orK10udHlwZSkpKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIENhbGN1bGF0ZSB0aGUgU1VCIG9mIHRoZSByZXR1cm4gdHlwZS4KICAgIERhcnRUeXBlIHJldHVyblR5cGUgPSBnZXRTdGFuZGFyZFVwcGVyQm91bmQoZi5yZXR1cm5UeXBlLCBnLnJldHVyblR5cGUpOwogICAgcmV0dXJuIG5ldyBGdW5jdGlvblR5cGUocG9zaXRpb25hbFBhcmFtZXRlcnMsIHJldHVyblR5cGUsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgfQoKICBEYXJ0VHlwZSBfaW50ZXJmYWNlU3RhbmRhcmRVcHBlckJvdW5kKAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUxLCBJbnRlcmZhY2VUeXBlIHR5cGUyKSB7CiAgICAvLyBUaGlzIGN1cnJlbnRseSBkb2VzIG5vdCBpbXBsZW1lbnQgYSB2ZXJ5IGNvbXBsZXRlIHN0YW5kYXJkIHVwcGVyIGJvdW5kCiAgICAvLyBhbGdvcml0aG0sIGJ1dCBoYW5kbGVzIGEgY291cGxlIG9mIHRoZSB2ZXJ5IGNvbW1vbiBjYXNlcyB0aGF0IGFyZQogICAgLy8gY2F1c2luZyBwYWluIGluIHJlYWwgY29kZS4gIFRoZSBjdXJyZW50IGFsZ29yaXRobSBpczoKICAgIC8vIDEuIElmIGVpdGhlciBvZiB0aGUgdHlwZXMgaXMgYSBzdXBlcnR5cGUgb2YgdGhlIG90aGVyLCByZXR1cm4gaXQuCiAgICAvLyAgICBUaGlzIGlzIGluIGZhY3QgdGhlIGJlc3QgcmVzdWx0IGluIHRoaXMgY2FzZS4KICAgIC8vIDIuIElmIHRoZSB0d28gdHlwZXMgaGF2ZSB0aGUgc2FtZSBjbGFzcyBlbGVtZW50LCB0aGVuIHRha2UgdGhlCiAgICAvLyAgICBwb2ludHdpc2Ugc3RhbmRhcmQgdXBwZXIgYm91bmQgb2YgdGhlIHR5cGUgYXJndW1lbnRzLiAgVGhpcyBpcyBhZ2FpbgogICAgLy8gICAgdGhlIGJlc3QgcmVzdWx0LCBleGNlcHQgdGhhdCB0aGUgcmVjdXJzaXZlIGNhbGxzIG1heSBub3QgcmV0dXJuCiAgICAvLyAgICB0aGUgdHJ1ZSBzdGFuZGFyZCB1cHBlciBib3VuZHMuICBUaGUgcmVzdWx0IGlzIGd1YXJhbnRlZWQgdG8gYmUgYQogICAgLy8gICAgd2VsbC1mb3JtZWQgdHlwZSB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBpbnB1dCB0eXBlcyB3ZXJlCiAgICAvLyAgICB3ZWxsLWZvcm1lZCAoYW5kIGFzc3VtaW5nIHRoYXQgdGhlIHJlY3Vyc2l2ZSBjYWxscyByZXR1cm4KICAgIC8vICAgIHdlbGwtZm9ybWVkIHR5cGVzKS4KICAgIC8vIDMuIE90aGVyd2lzZSByZXR1cm4gdGhlIHNwZWMtZGVmaW5lZCBzdGFuZGFyZCB1cHBlciBib3VuZC4gIFRoaXMgd2lsbAogICAgLy8gICAgYmUgYW4gdXBwZXIgYm91bmQsIG1pZ2h0IChvciBtaWdodCBub3QpIGJlIGxlYXN0LCBhbmQgbWlnaHQKICAgIC8vICAgIChvciBtaWdodCBub3QpIGJlIGEgd2VsbC1mb3JtZWQgdHlwZS4KICAgIGlmIChpc1N1YnR5cGVPZih0eXBlMSwgdHlwZTIpKSB7CiAgICAgIHJldHVybiB0eXBlMjsKICAgIH0KICAgIGlmIChpc1N1YnR5cGVPZih0eXBlMiwgdHlwZTEpKSB7CiAgICAgIHJldHVybiB0eXBlMTsKICAgIH0KICAgIGlmICh0eXBlMSBpcyBJbnRlcmZhY2VUeXBlICYmCiAgICAgICAgdHlwZTIgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIGlkZW50aWNhbCh0eXBlMS5jbGFzc05vZGUsIHR5cGUyLmNsYXNzTm9kZSkpIHsKICAgICAgTGlzdDxEYXJ0VHlwZT4gdEFyZ3MxID0gdHlwZTEudHlwZUFyZ3VtZW50czsKICAgICAgTGlzdDxEYXJ0VHlwZT4gdEFyZ3MyID0gdHlwZTIudHlwZUFyZ3VtZW50czsKCiAgICAgIGFzc2VydCh0QXJnczEubGVuZ3RoID09IHRBcmdzMi5sZW5ndGgpOwogICAgICBMaXN0PERhcnRUeXBlPiB0QXJncyA9IG5ldyBMaXN0KHRBcmdzMS5sZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRBcmdzMS5sZW5ndGg7IGkrKykgewogICAgICAgIHRBcmdzW2ldID0gZ2V0U3RhbmRhcmRVcHBlckJvdW5kKHRBcmdzMVtpXSwgdEFyZ3MyW2ldKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUodHlwZTEuY2xhc3NOb2RlLCB0QXJncyk7CiAgICB9CiAgICByZXR1cm4gZ2V0TGVnYWN5TGVhc3RVcHBlckJvdW5kKHR5cGUxLCB0eXBlMik7CiAgfQoKICBEYXJ0VHlwZSBfdHlwZVBhcmFtZXRlclN0YW5kYXJkVXBwZXJCb3VuZChEYXJ0VHlwZSB0eXBlMSwgRGFydFR5cGUgdHlwZTIpIHsKICAgIC8vIFRoaXMgY3VycmVudGx5IGp1c3QgaW1wbGVtZW50cyBhIHNpbXBsZSBzdGFuZGFyZCB1cHBlciBib3VuZCB0bwogICAgLy8gaGFuZGxlIHNvbWUgY29tbW9uIGNhc2VzLiAgSXQgYWxzbyBhdm9pZHMgc29tZSB0ZXJtaW5hdGlvbiBpc3N1ZXMKICAgIC8vIHdpdGggdGhlIG5haXZlIHNwZWMgYWxnb3JpdGhtLiAgVGhlIHN0YW5kYXJkIHVwcGVyIGJvdW5kIG9mIHR3byB0eXBlcwogICAgLy8gKGF0IGxlYXN0IG9uZSBvZiB3aGljaCBpcyBhIHR5cGUgcGFyYW1ldGVyKSBpcyBjb21wdXRlZCBoZXJlIGFzOgogICAgLy8gMS4gSWYgZWl0aGVyIHR5cGUgaXMgYSBzdXBlcnR5cGUgb2YgdGhlIG90aGVyLCByZXR1cm4gaXQuCiAgICAvLyAyLiBJZiB0aGUgZmlyc3QgdHlwZSBpcyBhIHR5cGUgcGFyYW1ldGVyLCByZXBsYWNlIGl0IHdpdGggaXRzIGJvdW5kLAogICAgLy8gICAgd2l0aCByZWN1cnNpdmUgb2NjdXJyZW5jZXMgb2YgaXRzZWxmIHJlcGxhY2VkIHdpdGggT2JqZWN0LgogICAgLy8gICAgVGhlIHNlY29uZCBwYXJ0IG9mIHRoaXMgc2hvdWxkIGVuc3VyZSB0ZXJtaW5hdGlvbi4gIEluZm9ybWFsbHksCiAgICAvLyAgICBlYWNoIHR5cGUgdmFyaWFibGUgaW5zdGFudGlhdGlvbiBpbiBvbmUgb2YgdGhlIGFyZ3VtZW50cyB0byB0aGUKICAgIC8vICAgIHN0YW5kYXJkIHVwcGVyIGJvdW5kIGFsZ29yaXRobSBub3cgc3RyaWN0bHkgcmVkdWNlcyB0aGUgbnVtYmVyCiAgICAvLyAgICBvZiBib3VuZCB2YXJpYWJsZXMgaW4gc2NvcGUgaW4gdGhhdCBhcmd1bWVudCBwb3NpdGlvbi4KICAgIC8vIDMuIElmIHRoZSBzZWNvbmQgdHlwZSBpcyBhIHR5cGUgcGFyYW1ldGVyLCBkbyB0aGUgc3ltbWV0cmljIG9wZXJhdGlvbgogICAgLy8gICAgdG8gIzIuCiAgICAvLwogICAgLy8gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB3aHkgdGhpcyBpcyBzeW1tZXRyaWMgaW4gdGhlIGNhc2UgdGhhdCBib3RoCiAgICAvLyBvZiB0aGVtIGFyZSB0eXBlIHBhcmFtZXRlcnMuICBGb3IgIzEsIHN5bW1ldHJ5IGhvbGRzIHNpbmNlIHN1YnR5cGUKICAgIC8vIGlzIGFudGlzeW1tZXRyaWMuICBGb3IgIzIsIGl0J3MgY2xlYXJseSBub3Qgc3ltbWV0cmljIGlmIHVwcGVyIGJvdW5kcyBvZgogICAgLy8gYm90dG9tIGFyZSBhbGxvd2VkLiAgSWdub3JpbmcgdGhpcyAoZm9yIHZhcmlvdXMgcmVhc29ucywgbm90IGxlYXN0CiAgICAvLyBvZiB3aGljaCB0aGF0IHRoZXJlJ3Mgbm8gd2F5IHRvIHdyaXRlIGl0KSwgdGhlcmUncyBhbiBpbmZvcm1hbAogICAgLy8gYXJndW1lbnQgKHRoYXQgbWlnaHQgZXZlbiBiZSByaWdodCkgdGhhdCB5b3Ugd2lsbCBhbHdheXMgZWl0aGVyCiAgICAvLyBlbmQgdXAgZXhwYW5kaW5nIGJvdGggb2YgdGhlbSBvciBlbHNlIHJldHVybmluZyB0aGUgc2FtZSByZXN1bHQgbm8gbWF0dGVyCiAgICAvLyB3aGljaCBvcmRlciB5b3UgZXhwYW5kIHRoZW0gaW4uICBBIGtleSBvYnNlcnZhdGlvbiBpcyB0aGF0CiAgICAvLyBpZGVudGljYWwoZXhwYW5kKHR5cGUxKSwgdHlwZTIpID0+IHN1YnR5cGUodHlwZTEsIHR5cGUyKQogICAgLy8gYW5kIGhlbmNlIHRoZSBjb250cmEtcG9zaXRpdmUuCiAgICAvLwogICAgLy8gVE9ETyhsZWFmcCk6IFRoaW5rIHRoaXMgdGhyb3VnaCBhbmQgZmlndXJlIG91dCB3aGF0J3MgdGhlIHJpZ2h0CiAgICAvLyBkZWZpbml0aW9uLiAgQmUgY2FyZWZ1bCBhYm91dCB0ZXJtaW5hdGlvbi4KICAgIC8vCiAgICAvLyBJIHN1c3BlY3QgaW4gZ2VuZXJhbCBhIHJlYXNvbmFibGUgYWxnb3JpdGhtIGlzIHRvIGV4cGFuZCB0aGUgaW5uZXJtb3N0CiAgICAvLyB0eXBlIHZhcmlhYmxlIGZpcnN0LiAgQWx0ZXJuYXRpdmVseSwgeW91IGNvdWxkIHByb2JhYmx5IGNob29zZSB0byB0cmVhdAogICAgLy8gaXQgYXMganVzdCBhbiBpbnN0YW5jZSBvZiB0aGUgaW50ZXJmYWNlIHR5cGUgdXBwZXIgYm91bmQgcHJvYmxlbSwgd2l0aAogICAgLy8gdGhlICJpbmhlcml0YW5jZSIgY2hhaW4gZXh0ZW5kZWQgYnkgdGhlIGJvdW5kcyBwbGFjZWQgb24gdGhlIHZhcmlhYmxlcy4KICAgIGlmIChpc1N1YnR5cGVPZih0eXBlMSwgdHlwZTIpKSB7CiAgICAgIHJldHVybiB0eXBlMjsKICAgIH0KICAgIGlmIChpc1N1YnR5cGVPZih0eXBlMiwgdHlwZTEpKSB7CiAgICAgIHJldHVybiB0eXBlMTsKICAgIH0KICAgIGlmICh0eXBlMSBpcyBUeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IEFuYWx5emVyIGNvbGxhcHNlcyBzaW1wbGUgYm91bmRzIGluIG9uZSBzdGVwLCBpLmUuIGZvcgogICAgICAvLyBDPFQgZXh0ZW5kcyBVLCBVIGV4dGVuZHMgTGlzdD4sIFQgZ2V0cyByZXNvbHZlZCBkaXJlY3RseSB0byBMaXN0LiAgRG8KICAgICAgLy8gd2UgbmVlZCB0byByZXBsaWNhdGUgdGhhdCBiZWhhdmlvcj8KICAgICAgcmV0dXJuIGdldFN0YW5kYXJkVXBwZXJCb3VuZCgKICAgICAgICAgIFN1YnN0aXR1dGlvbi5mcm9tTWFwKHt0eXBlMS5wYXJhbWV0ZXI6IG9iamVjdFR5cGV9KQogICAgICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZSh0eXBlMS5wYXJhbWV0ZXIuYm91bmQpLAogICAgICAgICAgdHlwZTIpOwogICAgfSBlbHNlIGlmICh0eXBlMiBpcyBUeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICByZXR1cm4gZ2V0U3RhbmRhcmRVcHBlckJvdW5kKAogICAgICAgICAgdHlwZTEsCiAgICAgICAgICBTdWJzdGl0dXRpb24uZnJvbU1hcCh7dHlwZTIucGFyYW1ldGVyOiBvYmplY3RUeXBlfSkKICAgICAgICAgICAgICAuc3Vic3RpdHV0ZVR5cGUodHlwZTIucGFyYW1ldGVyLmJvdW5kKSk7CiAgICB9IGVsc2UgewogICAgICAvLyBXZSBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBhdCBsZWFzdCBvbmUgb2YgdGhlIHR5cGVzIGlzIGEKICAgICAgLy8gVHlwZVBhcmFtZXRlclR5cGUKICAgICAgYXNzZXJ0KGZhbHNlKTsKICAgICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICB9CiAgfQp9CoHFAE1OPwEcASEJFA8SFRYXFRMbEgE9ASwBIBseICUBOgEqMQFABkVQUENMSkoVIxQGATIgFAYgFAYBKB0UBh0UBgE/IBQGIBQGAUgfFAYfFAYBMSsrKSkBNDo4BgFOHSUUBgElFAYBOh8EATYGT0dQQ0xKShUjFAYBMiAUBiAUBgErHRQGHRQGAUUgFAYgFAYBTB8UBh8UBgEsKyspKQFEPQYBTjM7HwY7HwYBThc8OQYBOjgGATgiBgFNNSAEAUYGTwY/BkxQUSIGLwZQJgYrSVFJAUMaUEQwLy8xMUkRKwoPPQgGAUpJESFGQwEsKgYRERUsLjMzMB07JDsVMRlFNg4TPxMMET0RCggGMAFQQz4BLU0+KjkEAUYGSgZMIgZRGAZPS0lMRAFKNDc9QCQGOwFDUA4aUEQwN0EGAScqBhERFSwuMzMwHRMkExUxGUU2DhMTDBERCggGAS1NPio5BAEpMk5JPUk4Rk9KTEpEHk1GMCUUBiUUBiIiNzMzAS42MEAIOAYzBAFOR0lNSEFMRUpKSUFNEQdQSlBKRkdRQkAmB0cyB05PTk8lFAYlFAYmUU8tJD42Ei0kET43DUYbFSIGBAIBP3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS9zdGFuZGFyZF9ib3VuZHMuZGFydERzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL2ltcGxpY2l0X2ZpZWxkX3R5cGUuZGFydIRLLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuaW1wbGljaXRfdHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93IERhcnRUeXBlLCBEYXJ0VHlwZVZpc2l0b3IsIERhcnRUeXBlVmlzaXRvcjEsIFZpc2l0b3I7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bnN1cHBvcnRlZDsKCmltcG9ydCAna2VybmVsX2J1aWxkZXIuZGFydCcgc2hvdyBNZW1iZXJCdWlsZGVyOwoKY2xhc3MgSW1wbGljaXRGaWVsZFR5cGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgZmluYWwgTWVtYmVyQnVpbGRlciBtZW1iZXI7CiAgVG9rZW4gaW5pdGlhbGl6ZXJUb2tlbjsKICBib29sIGlzU3RhcnRlZCA9IGZhbHNlOwoKICBnZXQgbnVsbGFiaWxpdHkgPT4KICAgICAgdW5zdXBwb3J0ZWQoIm51bGxhYmlsaXR5IiwgbWVtYmVyLmNoYXJPZmZzZXQsIG1lbWJlci5maWxlVXJpKTsKCiAgSW1wbGljaXRGaWVsZFR5cGUodGhpcy5tZW1iZXIsIHRoaXMuaW5pdGlhbGl6ZXJUb2tlbik7CgogIGFjY2VwdChEYXJ0VHlwZVZpc2l0b3I8T2JqZWN0PiB2KSB7CiAgICB1bnN1cHBvcnRlZCgiYWNjZXB0IiwgbWVtYmVyLmNoYXJPZmZzZXQsIG1lbWJlci5maWxlVXJpKTsKICB9CgogIGFjY2VwdDEoRGFydFR5cGVWaXNpdG9yMTxPYmplY3QsIE9iamVjdD4gdiwgYXJnKSB7CiAgICB1bnN1cHBvcnRlZCgiYWNjZXB0MSIsIG1lbWJlci5jaGFyT2Zmc2V0LCBtZW1iZXIuZmlsZVVyaSk7CiAgfQoKICB2aXNpdENoaWxkcmVuKFZpc2l0b3I8T2JqZWN0PiB2KSB7CiAgICB1bnN1cHBvcnRlZCgidmlzaXRDaGlsZHJlbiIsIG1lbWJlci5jaGFyT2Zmc2V0LCBtZW1iZXIuZmlsZVVyaSk7CiAgfQp9CicATk48AR0BIT8BLgEsATEBKx4aGgEVRQE5ASY+BAE1PwQBJUUEAgE7cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9pbXBsaWNpdF9maWVsZF90eXBlLmRhcnRIc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9rZXJuZWxfdmFyaWFibGVfYnVpbGRlci5kYXJ0g28vLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5rZXJuZWxfdmFyaWFibGVfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgVmFyaWFibGVEZWNsYXJhdGlvbjsKCmltcG9ydCAna2VybmVsX2J1aWxkZXIuZGFydCcgc2hvdyBEZWNsYXJhdGlvbjsKCmNsYXNzIFZhcmlhYmxlQnVpbGRlciBleHRlbmRzIERlY2xhcmF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBEZWNsYXJhdGlvbiBwYXJlbnQ7CgogIEBvdmVycmlkZQogIGZpbmFsIFVyaSBmaWxlVXJpOwoKICBmaW5hbCBWYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlOwoKICBWYXJpYWJsZUJ1aWxkZXIodGhpcy52YXJpYWJsZSwgdGhpcy5wYXJlbnQsIHRoaXMuZmlsZVVyaSk7CgogIEBvdmVycmlkZQogIGludCBnZXQgY2hhck9mZnNldCA9PiB2YXJpYWJsZS5maWxlT2Zmc2V0OwoKICBib29sIGdldCBpc0xvY2FsID0+IHRydWU7CgogIGJvb2wgZ2V0IGlzQ29uc3QgPT4gdmFyaWFibGUuaXNDb25zdDsKCiAgYm9vbCBnZXQgaXNGaW5hbCA9PiB2YXJpYWJsZS5pc0ZpbmFsOwoKICBWYXJpYWJsZURlY2xhcmF0aW9uIGdldCB0YXJnZXQgPT4gdmFyaWFibGU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZnVsbE5hbWVGb3JFcnJvcnMgPT4gdmFyaWFibGUubmFtZSA/PyAiPHVubmFtZWQ+IjsKfQolAE5OPAEnATsBLwEsDBwBDBUBJgE9AQwtARwBKAEoAS4BDEACAT9wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF92YXJpYWJsZV9idWlsZGVyLmRhcnRFc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2tlcm5lbC9sb2FkX2xpYnJhcnlfYnVpbGRlci5kYXJ0iGAvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHMsCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRnVuY3Rpb25Ob2RlLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgTGlicmFyeURlcGVuZGVuY3ksCiAgICAgICAgTG9hZExpYnJhcnksCiAgICAgICAgTWVtYmVyLAogICAgICAgIE5hbWUsCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFByb2NlZHVyZUtpbmQsCiAgICAgICAgUmV0dXJuU3RhdGVtZW50OwoKaW1wb3J0ICcuLi9zb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICdrZXJuZWxfYnVpbGRlci5kYXJ0JyBzaG93IERlY2xhcmF0aW9uOwoKaW1wb3J0ICdmb3Jlc3QuZGFydCcgc2hvdyBGb3Jlc3Q7CgovLy8gQnVpbGRlciB0byByZXByZXNlbnQgdGhlIGBkZWZlckxpYnJhcnkubG9hZExpYnJhcnlgIGNhbGxzIGFuZCB0ZWFyLW9mZnMuCmNsYXNzIExvYWRMaWJyYXJ5QnVpbGRlciBleHRlbmRzIERlY2xhcmF0aW9uIHsKICBmaW5hbCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBwYXJlbnQ7CgogIGZpbmFsIExpYnJhcnlEZXBlbmRlbmN5IGltcG9ydERlcGVuZGVuY3k7CgogIC8vLyBPZmZzZXQgb2YgdGhlIGltcG9ydCBwcmVmaXguCiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIC8vLyBTeW50aGV0aWMgc3RhdGljIG1ldGhvZCB0byByZXByZXNlbnQgdGhlIHRlYXItb2ZmIG9mICdsb2FkTGlicmFyeScuICBJZgogIC8vLyBudWxsLCBubyB0ZWFyLW9mZnMgd2VyZSBzZWVuIGluIHRoZSBjb2RlIGFuZCBubyBtZXRob2QgaXMgZ2VuZXJhdGVkLgogIE1lbWJlciB0ZWFyb2ZmOwoKICBMb2FkTGlicmFyeUJ1aWxkZXIodGhpcy5wYXJlbnQsIHRoaXMuaW1wb3J0RGVwZW5kZW5jeSwgdGhpcy5jaGFyT2Zmc2V0KTsKCiAgVXJpIGdldCBmaWxlVXJpID0+IHBhcmVudC5maWxlVXJpOwoKICBMb2FkTGlicmFyeSBjcmVhdGVMb2FkTGlicmFyeSgKICAgICAgaW50IGNoYXJPZmZzZXQsIEZvcmVzdCBmb3Jlc3QsIEFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBmb3Jlc3QubG9hZExpYnJhcnkoaW1wb3J0RGVwZW5kZW5jeSwgYXJndW1lbnRzKQogICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0OwogIH0KCiAgUHJvY2VkdXJlIGNyZWF0ZVRlYXJvZmZNZXRob2QoRm9yZXN0IGZvcmVzdCkgewogICAgaWYgKHRlYXJvZmYgIT0gbnVsbCkgcmV0dXJuIHRlYXJvZmY7CiAgICBMb2FkTGlicmFyeSBleHByZXNzaW9uID0gY3JlYXRlTG9hZExpYnJhcnkoY2hhck9mZnNldCwgZm9yZXN0LCBudWxsKTsKICAgIFN0cmluZyBwcmVmaXggPSBleHByZXNzaW9uLmltcG9ydC5uYW1lOwogICAgdGVhcm9mZiA9IG5ldyBQcm9jZWR1cmUoCiAgICAgICAgbmV3IE5hbWUoJ19fbG9hZExpYnJhcnlfJHByZWZpeCcsIHBhcmVudC50YXJnZXQpLAogICAgICAgIFByb2NlZHVyZUtpbmQuTWV0aG9kLAogICAgICAgIG5ldyBGdW5jdGlvbk5vZGUobmV3IFJldHVyblN0YXRlbWVudChleHByZXNzaW9uKSwKICAgICAgICAgICAgcmV0dXJuVHlwZTogbmV3IEludGVyZmFjZVR5cGUocGFyZW50LmxvYWRlci5jb3JlVHlwZXMuZnV0dXJlQ2xhc3MsCiAgICAgICAgICAgICAgICA8RGFydFR5cGU+W2NvbnN0IER5bmFtaWNUeXBlKCldKSksCiAgICAgICAgZmlsZVVyaTogcGFyZW50LnRhcmdldC5maWxlVXJpLAogICAgICAgIGlzU3RhdGljOiB0cnVlKQogICAgICAuLnN0YXJ0RmlsZU9mZnNldCA9IGNoYXJPZmZzZXQKICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgIHJldHVybiB0ZWFyb2ZmOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBmdWxsTmFtZUZvckVycm9ycyA9PiAnbG9hZExpYnJhcnknOwp9CkYATk48ASEJExIVFhcbFRAOExcZAUoBLwEiAU0vJQEsASMYAU5LEgFLASUBITw7IQQBMSlKLB06HjpPMygYJSEUBAEMMQIBPHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvbG9hZF9saWJyYXJ5X2J1aWxkZXIuZGFydD9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL3VubGlua2VkX3Njb3BlLmRhcnSEbi8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2tlcm5lbF9idWlsZGVyLmRhcnQnIHNob3cgRGVjbGFyYXRpb24sIFNjb3BlOwoKLy8vIFNjb3BlIHRoYXQgcmV0dXJucyBhbiBbVW5saW5rZWREZWNsYXJhdGlvbl0gaWYgYSBuYW1lIGNhbid0IGJlIHJlc29sdmVkLgovLy8gVGhpcyBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGFzIHRoZSBgZW5jbG9zaW5nU2NvcGVgIGluIGBCb2R5QnVpbGRlcmAgdG8KLy8vIGNyZWF0ZSBBU1RzIHdpdGggYnVpbGRpbmcgb3V0bGluZXMuCmNsYXNzIFVubGlua2VkU2NvcGUgZXh0ZW5kcyBTY29wZSB7CiAgVW5saW5rZWRTY29wZSgpIDogc3VwZXIudG9wKGlzTW9kaWZpYWJsZTogZmFsc2UpOwoKICBEZWNsYXJhdGlvbiBsb29rdXBJbihTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpLAogICAgICBNYXA8U3RyaW5nLCBEZWNsYXJhdGlvbj4gbWFwLCBib29sIGlzSW5zdGFuY2VTY29wZSkgewogICAgcmV0dXJuIG5ldyBVbmxpbmtlZERlY2xhcmF0aW9uKG5hbWUsIGlzSW5zdGFuY2VTY29wZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQp9CgpjbGFzcyBVbmxpbmtlZERlY2xhcmF0aW9uIGV4dGVuZHMgRGVjbGFyYXRpb24gewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBmaW5hbCBib29sIGlzSW5zdGFuY2VTY29wZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIEBvdmVycmlkZQogIGZpbmFsIFVyaSBmaWxlVXJpOwoKICBVbmxpbmtlZERlY2xhcmF0aW9uKAogICAgICB0aGlzLm5hbWUsIHRoaXMuaXNJbnN0YW5jZVNjb3BlLCB0aGlzLmNoYXJPZmZzZXQsIHRoaXMuZmlsZVVyaSk7CgogIEBvdmVycmlkZQogIERlY2xhcmF0aW9uIGdldCBwYXJlbnQgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBmdWxsTmFtZUZvckVycm9ycyA9PiBuYW1lOwp9CigATk48ATYBTUwoJDQBQTxQBAIBMBUBHgEMGAEMFQEXRwEMIgEMKAIBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvdW5saW5rZWRfc2NvcGUuZGFydDpzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcmV3cml0ZV9zZXZlcml0eS5kYXJ0hR4vLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdzZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICdtZXNzYWdlcy5kYXJ0JyBhcyBtc2c7CgpTZXZlcml0eSByZXdyaXRlU2V2ZXJpdHkoCiAgICBTZXZlcml0eSBzZXZlcml0eSwgbXNnLkNvZGU8T2JqZWN0PiBjb2RlLCBVcmkgZmlsZVVyaSkgewogIGlmIChzZXZlcml0eSAhPSBTZXZlcml0eS5pZ25vcmVkKSB7CiAgICByZXR1cm4gc2V2ZXJpdHk7CiAgfQoKICBTdHJpbmcgcGF0aCA9IGZpbGVVcmkucGF0aDsKICBTdHJpbmcgZmFzdGFQYXRoID0gIi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvIjsKICBpbnQgaW5kZXggPSBwYXRoLmluZGV4T2YoZmFzdGFQYXRoKTsKICBpZiAoaW5kZXggPT0gLTEpIHsKICAgIGZhc3RhUGF0aCA9ICIvcGtnL2Zyb250X2VuZC90b29sL19mYXN0YS8iOwogICAgaW5kZXggPSBwYXRoLmluZGV4T2YoZmFzdGFQYXRoKTsKICAgIGlmIChpbmRleCA9PSAtMSkgcmV0dXJuIHNldmVyaXR5OwogIH0KICBpZiAoY29kZSA9PSBtc2cuY29kZVVzZU9mRGVwcmVjYXRlZElkZW50aWZpZXIpIHsKICAgIC8vIFRPRE8oYWhlKTogUmVtb3ZlIHRoZSBleGNlcHRpb25zIGJlbG93LgogICAgLy8gV2UgcGxhbiB0byByZW1vdmUgYWxsIHVzZXMgb2YgZGVwcmVjYXRlZCBpZGVudGlmaWVycyBmcm9tIEZhc3RhLiBUaGUKICAgIC8vIHN0cmF0ZWd5IGlzIHRvIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBsaXN0IGJlbG93IG9uZSBieSBvbmUuIFRvIGdldAogICAgLy8gc3RhcnRlZCBvbiBjbGVhbmluZyB1cCBhIGdpdmVuIGZpbGUsIHNpbXBseSByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdAogICAgLy8gYmVsb3cgYW5kIGNvbXBpbGUgRmFzdGEgd2l0aCBpdHNlbGYgdG8gZ2V0IGEgbGlzdCBvZiByZW1haW5pbmcgY2FsbAogICAgLy8gc2l0ZXMuCiAgICBzd2l0Y2ggKHBhdGguc3Vic3RyaW5nKGZhc3RhUGF0aC5sZW5ndGggKyBpbmRleCkpIHsKICAgICAgY2FzZSAiY29tbWFuZF9saW5lLmRhcnQiOgogICAgICBjYXNlICJrZXJuZWwvYm9keV9idWlsZGVyLmRhcnQiOgogICAgICAgIHJldHVybiBzZXZlcml0eTsKICAgIH0KICB9CiAgcmV0dXJuIFNldmVyaXR5LmVycm9yOwp9CicATk48ASYBHwEaPSYVBAEeNicVLyUmBDMvTEpLSw44ICcZBgQZAgExcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3Jld3JpdGVfc2V2ZXJpdHkuZGFydDBzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvdGFyZ2V0LmRhcnSDLi8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnRhcmdldDsKCmltcG9ydCAnZGFydDphc3luYycgc2hvdyBGdXR1cmU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IENvbXBvbmVudDsKCmltcG9ydCAndGlja2VyLmRhcnQnIHNob3cgVGlja2VyOwoKLy8vIEEgY29tcGlsYXRpb24gdGFyZ2V0LgovLy8KLy8vIEEgdGFyZ2V0IHJlYWRzIHNvdXJjZSBmaWxlcyB3aXRoIFtyZWFkXSwgYnVpbGRzIG91dGxpbmVzIHdoZW4KLy8vIFtidWlsZE91dGxpbmVzXSBpcyBjYWxsZWQgYW5kIGJ1aWxkcyB0aGUgZnVsbCBjb21wb25lbnQgd2hlbgovLy8gW2J1aWxkQ29tcG9uZW50XSBpcyBjYWxsZWQuCmFic3RyYWN0IGNsYXNzIFRhcmdldCB7CiAgZmluYWwgVGlja2VyIHRpY2tlcjsKCiAgVGFyZ2V0KHRoaXMudGlja2VyKTsKCiAgLy8vIEJ1aWxkIGFuZCByZXR1cm4gb3V0bGluZXMgZm9yIGFsbCBsaWJyYXJpZXMuCiAgRnV0dXJlPENvbXBvbmVudD4gYnVpbGRPdXRsaW5lcygpOwoKICAvLy8gQnVpbGQgYW5kIHJldHVybiB0aGUgZnVsbCBjb21wb25lbnQgZm9yIGFsbCBsaWJyYXJpZXMuCiAgRnV0dXJlPENvbXBvbmVudD4gYnVpbGRDb21wb25lbnQoKTsKfQoeAE5OPAEWASEBMQEiARoEQkEgGBcBFwEzJQE9JgIBJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90YXJnZXQuZGFydEFzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvZGlsbC9kaWxsX2NsYXNzX2J1aWxkZXIuZGFydJMPLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZGlsbF9jbGFzc19idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cgQ2xhc3MsIERhcnRUeXBlLCBNZW1iZXIsIFN1cGVydHlwZSwgVHlwZVBhcmFtZXRlcjsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bmltcGxlbWVudGVkOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzc0J1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTWVtYmVyQnVpbGRlciwKICAgICAgICBTY29wZSwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyOwoKaW1wb3J0ICcuLi9tb2RpZmllci5kYXJ0JyBzaG93IGFic3RyYWN0TWFzazsKCmltcG9ydCAnZGlsbF9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBEaWxsTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJ2RpbGxfbWVtYmVyX2J1aWxkZXIuZGFydCcgc2hvdyBEaWxsTWVtYmVyQnVpbGRlcjsKCmNsYXNzIERpbGxDbGFzc0J1aWxkZXIgZXh0ZW5kcyBDbGFzc0J1aWxkZXIgewogIGZpbmFsIENsYXNzIGNsczsKCiAgRGlsbENsYXNzQnVpbGRlcihDbGFzcyBjbHMsIERpbGxMaWJyYXJ5QnVpbGRlciBwYXJlbnQpCiAgICAgIDogY2xzID0gY2xzLAogICAgICAgIHN1cGVyKAogICAgICAgICAgICBudWxsLAogICAgICAgICAgICBjb21wdXRlTW9kaWZpZXJzKGNscyksCiAgICAgICAgICAgIGNscy5uYW1lLAogICAgICAgICAgICBudWxsLAogICAgICAgICAgICBudWxsLAogICAgICAgICAgICBudWxsLAogICAgICAgICAgICBudWxsLAogICAgICAgICAgICBuZXcgU2NvcGUoPFN0cmluZywgTWVtYmVyQnVpbGRlcj57fSwgPFN0cmluZywgTWVtYmVyQnVpbGRlcj57fSwKICAgICAgICAgICAgICAgIHBhcmVudC5zY29wZSwgImNsYXNzICR7Y2xzLm5hbWV9IiwgaXNNb2RpZmlhYmxlOiBmYWxzZSksCiAgICAgICAgICAgIG5ldyBTY29wZSg8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPnt9LCBudWxsLCBudWxsLCBjbHMubmFtZSwKICAgICAgICAgICAgICAgIGlzTW9kaWZpYWJsZTogZmFsc2UpLAogICAgICAgICAgICBwYXJlbnQsCiAgICAgICAgICAgIGNscy5maWxlT2Zmc2V0KTsKCiAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiBnZXQgdHlwZVZhcmlhYmxlcyB7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBzdXBlci50eXBlVmFyaWFibGVzOwogICAgaWYgKHR5cGVWYXJpYWJsZXMgPT0gbnVsbCAmJiBjbHMudHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICB0eXBlVmFyaWFibGVzID0gc3VwZXIudHlwZVZhcmlhYmxlcyA9CiAgICAgICAgICBjb21wdXRlVHlwZVZhcmlhYmxlQnVpbGRlcnMobGlicmFyeSwgY2xzLnR5cGVQYXJhbWV0ZXJzKTsKICAgIH0KICAgIHJldHVybiB0eXBlVmFyaWFibGVzOwogIH0KCiAgVXJpIGdldCBmaWxlVXJpID0+IGNscy5maWxlVXJpOwoKICBUeXBlQnVpbGRlciBnZXQgc3VwZXJ0eXBlIHsKICAgIFR5cGVCdWlsZGVyIHN1cGVydHlwZSA9IHN1cGVyLnN1cGVydHlwZTsKICAgIGlmIChzdXBlcnR5cGUgPT0gbnVsbCkgewogICAgICBTdXBlcnR5cGUgdGFyZ2V0U3VwZXJ0eXBlID0gY2xzLnN1cGVydHlwZTsKICAgICAgaWYgKHRhcmdldFN1cGVydHlwZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgc3VwZXIuc3VwZXJ0eXBlID0KICAgICAgICAgIHN1cGVydHlwZSA9IGNvbXB1dGVUeXBlQnVpbGRlcihsaWJyYXJ5LCB0YXJnZXRTdXBlcnR5cGUpOwogICAgfQogICAgcmV0dXJuIHN1cGVydHlwZTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzIGdldCBhY3R1YWxDbHMgPT4gY2xzOwoKICB2b2lkIGFkZE1lbWJlcihNZW1iZXIgbWVtYmVyKSB7CiAgICBEaWxsTWVtYmVyQnVpbGRlciBidWlsZGVyID0gbmV3IERpbGxNZW1iZXJCdWlsZGVyKG1lbWJlciwgdGhpcyk7CiAgICBTdHJpbmcgbmFtZSA9IG1lbWJlci5uYW1lLm5hbWU7CiAgICBpZiAoYnVpbGRlci5pc0NvbnN0cnVjdG9yIHx8IGJ1aWxkZXIuaXNGYWN0b3J5KSB7CiAgICAgIGNvbnN0cnVjdG9yU2NvcGVCdWlsZGVyLmFkZE1lbWJlcihuYW1lLCBidWlsZGVyKTsKICAgIH0gZWxzZSBpZiAoYnVpbGRlci5pc1NldHRlcikgewogICAgICBzY29wZUJ1aWxkZXIuYWRkU2V0dGVyKG5hbWUsIGJ1aWxkZXIpOwogICAgfSBlbHNlIHsKICAgICAgc2NvcGVCdWlsZGVyLmFkZE1lbWJlcihuYW1lLCBidWlsZGVyKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgdHlwZVZhcmlhYmxlc0NvdW50ID0+IGNscy50eXBlUGFyYW1ldGVycy5sZW5ndGg7CgogIEBvdmVycmlkZQogIExpc3Q8RGFydFR5cGU+IGJ1aWxkVHlwZUFyZ3VtZW50cygKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxUeXBlQnVpbGRlcj4gYXJndW1lbnRzKSB7CiAgICAvLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgW3R5cGVWYXJpYWJsZXNdIGFyZW4ndCByZXN0b3JlZCBmcm9tIFt0YXJnZXRdLgogICAgLy8gU28sIGlmIFthcmd1bWVudHNdIGlzIG51bGwsIHRoZSBkZWZhdWx0IHR5cGVzIHNob3VsZCBiZSByZXRyaWV2ZWQgZnJvbQogICAgLy8gW2Nscy50eXBlUGFyYW1ldGVyc10uCiAgICBpZiAoYXJndW1lbnRzID09IG51bGwpIHsKICAgICAgTGlzdDxEYXJ0VHlwZT4gcmVzdWx0ID0gbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCgKICAgICAgICAgIGNscy50eXBlUGFyYW1ldGVycy5sZW5ndGgsIG51bGwsCiAgICAgICAgICBncm93YWJsZTogdHJ1ZSk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgKytpKSB7CiAgICAgICAgcmVzdWx0W2ldID0gY2xzLnR5cGVQYXJhbWV0ZXJzW2ldLmRlZmF1bHRUeXBlOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgLy8gW2FyZ3VtZW50c10gIT0gbnVsbAogICAgTGlzdDxEYXJ0VHlwZT4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKGFyZ3VtZW50cy5sZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IGFyZ3VtZW50c1tpXS5idWlsZChsaWJyYXJ5KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgY2xhc3MgaXMgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhIG1peGluIHRvIGl0cwogIC8vLyBzdXBlcmNsYXNzLgogIGJvb2wgZ2V0IGlzTWl4aW5BcHBsaWNhdGlvbiA9PiBjbHMuaXNNaXhpbkFwcGxpY2F0aW9uOwoKICBUeXBlQnVpbGRlciBnZXQgbWl4ZWRJblR5cGUgewogICAgcmV0dXJuIGNvbXB1dGVUeXBlQnVpbGRlcihsaWJyYXJ5LCBjbHMubWl4ZWRJblR5cGUpOwogIH0KCiAgTGlzdDxUeXBlQnVpbGRlcj4gZ2V0IGludGVyZmFjZXMgewogICAgaWYgKGNscy5pbXBsZW1lbnRlZFR5cGVzLmlzRW1wdHkpIHJldHVybiBudWxsOwogICAgaWYgKHN1cGVyLmludGVyZmFjZXMgPT0gbnVsbCkgewogICAgICBMaXN0PFR5cGVCdWlsZGVyPiByZXN1bHQgPQogICAgICAgICAgbmV3IExpc3Q8VHlwZUJ1aWxkZXI+KGNscy5pbXBsZW1lbnRlZFR5cGVzLmxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgcmVzdWx0W2ldID0gY29tcHV0ZVR5cGVCdWlsZGVyKGxpYnJhcnksIGNscy5pbXBsZW1lbnRlZFR5cGVzW2ldKTsKICAgICAgfQogICAgICBzdXBlci5pbnRlcmZhY2VzID0gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIHN1cGVyLmludGVyZmFjZXM7CiAgfQoKICB2b2lkIHNldCBtaXhlZEluVHlwZShUeXBlQnVpbGRlciBtaXhpbikgewogICAgdW5pbXBsZW1lbnRlZCgibWl4ZWRJblR5cGU9IiwgLTEsIG51bGwpOwogIH0KfQoKaW50IGNvbXB1dGVNb2RpZmllcnMoQ2xhc3MgY2xzKSB7CiAgcmV0dXJuIGNscy5pc0Fic3RyYWN0ID8gYWJzdHJhY3RNYXNrIDogMDsKfQoKVHlwZUJ1aWxkZXIgY29tcHV0ZVR5cGVCdWlsZGVyKAogICAgRGlsbExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIFN1cGVydHlwZSBzdXBlcnR5cGUpIHsKICByZXR1cm4gc3VwZXJ0eXBlID09IG51bGwKICAgICAgPyBudWxsCiAgICAgIDogbGlicmFyeS5sb2FkZXIuY29tcHV0ZVR5cGVCdWlsZGVyKHN1cGVydHlwZS5hc0ludGVyZmFjZVR5cGUpOwp9CgpMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IGNvbXB1dGVUeXBlVmFyaWFibGVCdWlsZGVycygKICAgIERpbGxMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzKSB7CiAgaWYgKHR5cGVQYXJhbWV0ZXJzID09IG51bGwgfHwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoID09IDApIHJldHVybiBudWxsOwogIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gcmVzdWx0ID0KICAgICAgbmV3IExpc3QuZmlsbGVkKHR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwgbnVsbCk7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHsKICAgIHJlc3VsdFtpXSA9IG5ldyBUeXBlVmFyaWFibGVCdWlsZGVyLmZyb21LZXJuZWwodHlwZVBhcmFtZXRlcnNbaV0sIGxpYnJhcnkpOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CoCgAE5OPAEiASE8AS4BJwkWFRgXDx0BLQE8AToBLhMBORMPEiMWEhISEkxJRyYUHQEwQ0IsRAYaBAEiAR4tHTEwGEQGFgQBDB4BIkUkNjgjLQ0tBgQBDDsBDCU9T04dHTkrGzA3CBUGARscSy4vBhMEAUoSOQEgOQQBJTMkIT4wSgghBh0EASwtBAIBIiwCASA3Gw1GAgE3RkklNCxQBBECAThwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZGlsbC9kaWxsX2NsYXNzX2J1aWxkZXIuZGFydEZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvZGlsbC9kaWxsX3R5cGVfYWxpYXNfYnVpbGRlci5kYXJ0h+0vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5kaWxsX3R5cGVkZWZfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgRGFydFR5cGUsIFR5cGVkZWY7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIFR5cGVBbGlhc0J1aWxkZXIsCiAgICAgICAgRnVuY3Rpb25UeXBlQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXI7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5pbXBsZW1lbnRlZDsKCmltcG9ydCAnZGlsbF9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBEaWxsTGlicmFyeUJ1aWxkZXI7CgpjbGFzcyBEaWxsVHlwZUFsaWFzQnVpbGRlciBleHRlbmRzIFR5cGVBbGlhc0J1aWxkZXIgewogIERpbGxUeXBlQWxpYXNCdWlsZGVyKFR5cGVkZWYgdHlwZWRlZiwgRGlsbExpYnJhcnlCdWlsZGVyIHBhcmVudCkKICAgICAgOiBzdXBlcihudWxsLCB0eXBlZGVmLm5hbWUsIG51bGwsIG51bGwsIHBhcmVudCwgdHlwZWRlZi5maWxlT2Zmc2V0LAogICAgICAgICAgICB0eXBlZGVmKTsKCiAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IGdldCBtZXRhZGF0YSB7CiAgICByZXR1cm4gdW5pbXBsZW1lbnRlZCgibWV0YWRhdGEiLCAtMSwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IHR5cGVWYXJpYWJsZXNDb3VudCA9PiB0YXJnZXQudHlwZVBhcmFtZXRlcnMubGVuZ3RoOwoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGVCdWlsZGVyIGdldCB0eXBlIHsKICAgIHJldHVybiB1bmltcGxlbWVudGVkKCJ0eXBlIiwgLTEsIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgYnVpbGRUaGlzVHlwZShMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICByZXR1cm4gdGhpc1R5cGUgPz89IHRhcmdldC50eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxEYXJ0VHlwZT4gYnVpbGRUeXBlQXJndW1lbnRzKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMpIHsKICAgIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBbdHlwZVZhcmlhYmxlc10gYXJlbid0IHJlc3RvcmVkIGZyb20gW3RhcmdldF0uCiAgICAvLyBTbywgaWYgW2FyZ3VtZW50c10gaXMgbnVsbCwgdGhlIGRlZmF1bHQgdHlwZXMgc2hvdWxkIGJlIHJldHJpZXZlZCBmcm9tCiAgICAvLyBbY2xzLnR5cGVQYXJhbWV0ZXJzXS4KICAgIGlmIChhcmd1bWVudHMgPT0gbnVsbCkgewogICAgICBMaXN0PERhcnRUeXBlPiByZXN1bHQgPSBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKAogICAgICAgICAgdGFyZ2V0LnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwgbnVsbCwKICAgICAgICAgIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyArK2kpIHsKICAgICAgICByZXN1bHRbaV0gPSB0YXJnZXQudHlwZVBhcmFtZXRlcnNbaV0uZGVmYXVsdFR5cGU7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICAvLyBbYXJndW1lbnRzXSAhPSBudWxsCiAgICBMaXN0PERhcnRUeXBlPiByZXN1bHQgPQogICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoYXJndW1lbnRzLmxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyArK2kpIHsKICAgICAgcmVzdWx0W2ldID0gYXJndW1lbnRzW2ldLmJ1aWxkKGxpYnJhcnkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KRQBOTjwBJAE5AScJGh0VGBkBLgE8ATZDShYBJzAEAQw+AQwhLAQBDDMlBAEMJT1PTh0dOS4bMDoIFQYBGxxLLi8GEwQCAT1wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZGlsbC9kaWxsX3R5cGVfYWxpYXNfYnVpbGRlci5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvdHlwZV9idWlsZGVyX2NvbXB1dGVyLmRhcnSQPS8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnR5cGVfYnVpbGRlcl9jb21wdXRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQm90dG9tVHlwZSwKICAgICAgICBDbGFzcywKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEYXJ0VHlwZVZpc2l0b3IsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgSW52YWxpZFR5cGUsCiAgICAgICAgTGlicmFyeSwKICAgICAgICBOYW1lZFR5cGUsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBUeXBlZGVmVHlwZSwKICAgICAgICBWb2lkVHlwZTsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgRHluYW1pY1R5cGVCdWlsZGVyLAogICAgICAgIEZ1bmN0aW9uVHlwZUJ1aWxkZXIsCiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIsCiAgICAgICAgTmFtZWRUeXBlQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFZvaWRUeXBlQnVpbGRlcjsKCmltcG9ydCAnLi4vbG9hZGVyLmRhcnQnIHNob3cgTG9hZGVyOwoKaW1wb3J0ICcuLi9wYXJzZXIuZGFydCcgc2hvdyBGb3JtYWxQYXJhbWV0ZXJLaW5kOwoKY2xhc3MgVHlwZUJ1aWxkZXJDb21wdXRlciBpbXBsZW1lbnRzIERhcnRUeXBlVmlzaXRvcjxUeXBlQnVpbGRlcj4gewogIGZpbmFsIExvYWRlciBsb2FkZXI7CgogIGNvbnN0IFR5cGVCdWlsZGVyQ29tcHV0ZXIodGhpcy5sb2FkZXIpOwoKICBUeXBlQnVpbGRlciBkZWZhdWx0RGFydFR5cGUoRGFydFR5cGUgbm9kZSkgewogICAgdGhyb3cgIlVuc3VwcG9ydGVkIjsKICB9CgogIFR5cGVCdWlsZGVyIHZpc2l0SW52YWxpZFR5cGUoSW52YWxpZFR5cGUgbm9kZSkgewogICAgdGhyb3cgIk5vdCBpbXBsZW1lbnRlZCI7CiAgfQoKICBUeXBlQnVpbGRlciB2aXNpdER5bmFtaWNUeXBlKER5bmFtaWNUeXBlIG5vZGUpIHsKICAgIHJldHVybiBuZXcgTmFtZWRUeXBlQnVpbGRlcigiZHluYW1pYyIsIG51bGwpCiAgICAgIC4uYmluZCgKICAgICAgICAgIG5ldyBEeW5hbWljVHlwZUJ1aWxkZXIoY29uc3QgRHluYW1pY1R5cGUoKSwgbG9hZGVyLmNvcmVMaWJyYXJ5LCAtMSkpOwogIH0KCiAgVHlwZUJ1aWxkZXIgdmlzaXRWb2lkVHlwZShWb2lkVHlwZSBub2RlKSB7CiAgICByZXR1cm4gbmV3IE5hbWVkVHlwZUJ1aWxkZXIoInZvaWQiLCBudWxsKQogICAgICAuLmJpbmQobmV3IFZvaWRUeXBlQnVpbGRlcihjb25zdCBWb2lkVHlwZSgpLCBsb2FkZXIuY29yZUxpYnJhcnksIC0xKSk7CiAgfQoKICBUeXBlQnVpbGRlciB2aXNpdEJvdHRvbVR5cGUoQm90dG9tVHlwZSBub2RlKSB7CiAgICB0aHJvdyAiTm90IGltcGxlbWVudGVkIjsKICB9CgogIFR5cGVCdWlsZGVyIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIG5vZGUpIHsKICAgIENsYXNzQnVpbGRlciBjbHMgPQogICAgICAgIGxvYWRlci5jb21wdXRlQ2xhc3NCdWlsZGVyRnJvbVRhcmdldENsYXNzKG5vZGUuY2xhc3NOb2RlKTsKICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50czsKICAgIExpc3Q8RGFydFR5cGU+IGtlcm5lbEFyZ3VtZW50cyA9IG5vZGUudHlwZUFyZ3VtZW50czsKICAgIGlmIChrZXJuZWxBcmd1bWVudHMuaXNOb3RFbXB0eSkgewogICAgICBhcmd1bWVudHMgPSBuZXcgTGlzdDxUeXBlQnVpbGRlcj4oa2VybmVsQXJndW1lbnRzLmxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2VybmVsQXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgYXJndW1lbnRzW2ldID0ga2VybmVsQXJndW1lbnRzW2ldLmFjY2VwdCh0aGlzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBOYW1lZFR5cGVCdWlsZGVyKGNscy5uYW1lLCBhcmd1bWVudHMpLi5iaW5kKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlQnVpbGRlciB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgbm9kZSkgewogICAgVHlwZUJ1aWxkZXIgcmV0dXJuVHlwZSA9IG5vZGUucmV0dXJuVHlwZS5hY2NlcHQodGhpcyk7CiAgICAvLyBXZSBjb3VsZCBjb21wdXRlIHRoZSB0eXBlIHZhcmlhYmxlcyBoZXJlLiBIb3dldmVyLCB0aGUgY3VycmVudAogICAgLy8gaW1wbGVtZW50YXRpb24gb2YgW3Zpc2l0VHlwZVBhcmFtZXRlclR5cGVdIGlzIHN1ZmZpZW50LgogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gbnVsbDsKICAgIExpc3Q8RGFydFR5cGU+IHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVyczsKICAgIExpc3Q8TmFtZWRUeXBlPiBuYW1lZFBhcmFtZXRlcnMgPSBub2RlLm5hbWVkUGFyYW1ldGVyczsKICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFscyA9IG5ldyBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+KAogICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCArIG5hbWVkUGFyYW1ldGVycy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICBUeXBlQnVpbGRlciB0eXBlID0gcG9zaXRpb25hbFBhcmFtZXRlcnNbaV0uYWNjZXB0KHRoaXMpOwogICAgICBGb3JtYWxQYXJhbWV0ZXJLaW5kIGtpbmQgPSBGb3JtYWxQYXJhbWV0ZXJLaW5kLm1hbmRhdG9yeTsKICAgICAgaWYgKGkgPj0gbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgICAga2luZCA9IEZvcm1hbFBhcmFtZXRlcktpbmQub3B0aW9uYWxQb3NpdGlvbmFsOwogICAgICB9CiAgICAgIGZvcm1hbHNbaV0gPSBuZXcgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcihudWxsLCAwLCB0eXBlLCBudWxsLCBudWxsLCAtMSkKICAgICAgICAuLmtpbmQgPSBraW5kOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lZFBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgTmFtZWRUeXBlIHBhcmFtZXRlciA9IG5hbWVkUGFyYW1ldGVyc1tpXTsKICAgICAgVHlwZUJ1aWxkZXIgdHlwZSA9IHBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldLmFjY2VwdCh0aGlzKTsKICAgICAgZm9ybWFsc1tpICsgcG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoXSA9CiAgICAgICAgICBuZXcgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcihudWxsLCAwLCB0eXBlLCBwYXJhbWV0ZXIubmFtZSwgbnVsbCwgLTEpCiAgICAgICAgICAgIC4ua2luZCA9IEZvcm1hbFBhcmFtZXRlcktpbmQub3B0aW9uYWxOYW1lZDsKICAgIH0KCiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZUJ1aWxkZXIocmV0dXJuVHlwZSwgdHlwZVZhcmlhYmxlcywgZm9ybWFscyk7CiAgfQoKICBUeXBlQnVpbGRlciB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyID0gbm9kZS5wYXJhbWV0ZXI7CiAgICBDbGFzcyBrZXJuZWxDbGFzcyA9IHBhcmFtZXRlci5wYXJlbnQ7CiAgICBMaWJyYXJ5IGtlcm5lbExpYnJhcnkgPSBrZXJuZWxDbGFzcy5lbmNsb3NpbmdMaWJyYXJ5OwogICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IGxvYWRlci5idWlsZGVyc1trZXJuZWxMaWJyYXJ5LmltcG9ydFVyaV07CiAgICByZXR1cm4gbmV3IE5hbWVkVHlwZUJ1aWxkZXIocGFyYW1ldGVyLm5hbWUsIG51bGwpCiAgICAgIC4uYmluZChuZXcgVHlwZVZhcmlhYmxlQnVpbGRlci5mcm9tS2VybmVsKHBhcmFtZXRlciwgbGlicmFyeSkpOwogIH0KCiAgVHlwZUJ1aWxkZXIgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSBub2RlKSB7CiAgICB0aHJvdyAiTm90IGltcGxlbWVudGVkIjsKICB9Cn0KfgBOTjwBJQEhCRQPEhkVFhcVERMXGxUSAScJHB0WIBodGBUZASUBMgFEFwEqAS8ZBAEzHQQBMzEOUAQBLS5NBAExHQQBNxdDITkmQTk4CAZBBAEMNTtGPzRFPE0/PD9ALjcITRcGNzA/MU44BgFIBAE/Lio6RzZGBAEzHQQCAT1wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3R5cGVfYnVpbGRlcl9jb21wdXRlci5kYXJ0LnNka3Jvb3Q6L3BrZy9rZXJuZWwvbGliL3NyYy9ib3VuZHNfY2hlY2tzLmRhcnTAAEpVLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQm90dG9tVHlwZSwKICAgICAgICBDbGFzcywKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBJbnZhbGlkVHlwZSwKICAgICAgICBOYW1lZFR5cGUsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBUeXBlZGVmVHlwZSwKICAgICAgICBWb2lkVHlwZTsKCmltcG9ydCAnLi4vdHlwZV9hbGdlYnJhLmRhcnQnIHNob3cgU3Vic3RpdHV0aW9uLCBzdWJzdGl0dXRlOwoKaW1wb3J0ICcuLi90eXBlX2Vudmlyb25tZW50LmRhcnQnIHNob3cgVHlwZUVudmlyb25tZW50OwoKaW1wb3J0ICcuLi91dGlsL2dyYXBoLmRhcnQnIHNob3cgR3JhcGgsIGNvbXB1dGVTdHJvbmdDb21wb25lbnRzOwoKaW1wb3J0ICcuLi92aXNpdG9yLmRhcnQnIHNob3cgRGFydFR5cGVWaXNpdG9yOwoKY2xhc3MgVHlwZVZhcmlhYmxlR3JhcGggZXh0ZW5kcyBHcmFwaDxpbnQ+IHsKICBMaXN0PGludD4gdmVydGljZXM7CiAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyczsKICBMaXN0PERhcnRUeXBlPiBib3VuZHM7CgogIC8vIGBlZGdlc1tpXWAgaXMgdGhlIGxpc3Qgb2YgaW5kaWNlcyBvZiB0eXBlIHZhcmlhYmxlcyB0aGF0IHJlZmVyZW5jZSB0aGUgdHlwZQogIC8vIHZhcmlhYmxlIHdpdGggdGhlIGluZGV4IGBpYCBpbiB0aGVpciBib3VuZHMuCiAgTGlzdDxMaXN0PGludD4+IGVkZ2VzOwoKICBUeXBlVmFyaWFibGVHcmFwaCh0aGlzLnR5cGVQYXJhbWV0ZXJzLCB0aGlzLmJvdW5kcykgewogICAgYXNzZXJ0KHR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA9PSBib3VuZHMubGVuZ3RoKTsKCiAgICB2ZXJ0aWNlcyA9IG5ldyBMaXN0PGludD4odHlwZVBhcmFtZXRlcnMubGVuZ3RoKTsKICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBpbnQ+IHR5cGVQYXJhbWV0ZXJJbmRpY2VzID0gPFR5cGVQYXJhbWV0ZXIsIGludD57fTsKICAgIGVkZ2VzID0gbmV3IExpc3Q8TGlzdDxpbnQ+Pih0eXBlUGFyYW1ldGVycy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykgewogICAgICB2ZXJ0aWNlc1tpXSA9IGk7CiAgICAgIHR5cGVQYXJhbWV0ZXJJbmRpY2VzW3R5cGVQYXJhbWV0ZXJzW2ldXSA9IGk7CiAgICAgIGVkZ2VzW2ldID0gPGludD5bXTsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgIE9jY3VycmVuY2VDb2xsZWN0b3JWaXNpdG9yIGNvbGxlY3RvciA9CiAgICAgICAgICBuZXcgT2NjdXJyZW5jZUNvbGxlY3RvclZpc2l0b3IodHlwZVBhcmFtZXRlcnMudG9TZXQoKSk7CiAgICAgIGNvbGxlY3Rvci52aXNpdChib3VuZHNbaV0pOwogICAgICBmb3IgKFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciBpbiBjb2xsZWN0b3Iub2NjdXJyZWQpIHsKICAgICAgICBlZGdlc1t0eXBlUGFyYW1ldGVySW5kaWNlc1t0eXBlUGFyYW1ldGVyXV0uYWRkKGkpOwogICAgICB9CiAgICB9CiAgfQoKICBJdGVyYWJsZTxpbnQ+IG5laWdoYm9yc09mKGludCBpbmRleCkgewogICAgcmV0dXJuIGVkZ2VzW2luZGV4XTsKICB9Cn0KCmNsYXNzIE9jY3VycmVuY2VDb2xsZWN0b3JWaXNpdG9yIGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yIHsKICBmaW5hbCBTZXQ8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnM7CiAgU2V0PFR5cGVQYXJhbWV0ZXI+IG9jY3VycmVkID0gbmV3IFNldDxUeXBlUGFyYW1ldGVyPigpOwoKICBPY2N1cnJlbmNlQ29sbGVjdG9yVmlzaXRvcih0aGlzLnR5cGVQYXJhbWV0ZXJzKTsKCiAgdmlzaXQoRGFydFR5cGUgbm9kZSkgPT4gbm9kZS5hY2NlcHQodGhpcyk7CgogIHZpc2l0TmFtZWRUeXBlKE5hbWVkVHlwZSBub2RlKSB7CiAgICBub2RlLnR5cGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgdmlzaXRJbnZhbGlkVHlwZShJbnZhbGlkVHlwZSBub2RlKTsKICB2aXNpdER5bmFtaWNUeXBlKER5bmFtaWNUeXBlIG5vZGUpOwogIHZpc2l0Vm9pZFR5cGUoVm9pZFR5cGUgbm9kZSk7CgogIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIG5vZGUpIHsKICAgIGZvciAoRGFydFR5cGUgYXJndW1lbnQgaW4gbm9kZS50eXBlQXJndW1lbnRzKSB7CiAgICAgIGFyZ3VtZW50LmFjY2VwdCh0aGlzKTsKICAgIH0KICB9CgogIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgbm9kZSkgewogICAgZm9yIChEYXJ0VHlwZSBhcmd1bWVudCBpbiBub2RlLnR5cGVBcmd1bWVudHMpIHsKICAgICAgYXJndW1lbnQuYWNjZXB0KHRoaXMpOwogICAgfQogIH0KCiAgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIGZvciAoVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyIGluIG5vZGUudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgdHlwZVBhcmFtZXRlci5ib3VuZC5hY2NlcHQodGhpcyk7CiAgICAgIHR5cGVQYXJhbWV0ZXIuZGVmYXVsdFR5cGU/LmFjY2VwdCh0aGlzKTsKICAgIH0KICAgIGZvciAoRGFydFR5cGUgcGFyYW1ldGVyIGluIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgcGFyYW1ldGVyLmFjY2VwdCh0aGlzKTsKICAgIH0KICAgIGZvciAoTmFtZWRUeXBlIG5hbWVkUGFyYW1ldGVyIGluIG5vZGUubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIG5hbWVkUGFyYW1ldGVyLnR5cGUuYWNjZXB0KHRoaXMpOwogICAgfQogICAgbm9kZS5yZXR1cm5UeXBlLmFjY2VwdCh0aGlzKTsKICB9CgogIHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoVHlwZVBhcmFtZXRlclR5cGUgbm9kZSkgewogICAgaWYgKHR5cGVQYXJhbWV0ZXJzLmNvbnRhaW5zKG5vZGUucGFyYW1ldGVyKSkgewogICAgICBvY2N1cnJlZC5hZGQobm9kZS5wYXJhbWV0ZXIpOwogICAgfQogIH0KfQoKRGFydFR5cGUgaW5zdGFudGlhdGVUb0JvdW5kcyhEYXJ0VHlwZSB0eXBlLCBDbGFzcyBvYmplY3QpIHsKICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICBmb3IgKHZhciB0eXBlQXJndW1lbnQgaW4gdHlwZS50eXBlQXJndW1lbnRzKSB7CiAgICAgIC8vIElmIGF0IGxlYXN0IG9uZSBvZiB0aGUgYXJndW1lbnRzIGlzIG5vdCBkeW5hbWljLCB3ZSBhc3N1bWUgdGhhdCB0aGUKICAgICAgLy8gdHlwZSBpcyBub3QgcmF3IGFuZCBkb2VzIG5vdCBuZWVkIGluc3RhbnRpYXRpb24gb2YgaXRzIHR5cGUgcGFyYW1ldGVycwogICAgICAvLyB0byB0aGVpciBib3VuZHMuCiAgICAgIGlmICh0eXBlQXJndW1lbnQgaXMhIER5bmFtaWNUeXBlKSB7CiAgICAgICAgcmV0dXJuIHR5cGU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZS5ieVJlZmVyZW5jZSgKICAgICAgICB0eXBlLmNsYXNzTmFtZSwgY2FsY3VsYXRlQm91bmRzKHR5cGUuY2xhc3NOb2RlLnR5cGVQYXJhbWV0ZXJzLCBvYmplY3QpKTsKICB9CiAgaWYgKHR5cGUgaXMgVHlwZWRlZlR5cGUpIHsKICAgIGZvciAodmFyIHR5cGVBcmd1bWVudCBpbiB0eXBlLnR5cGVBcmd1bWVudHMpIHsKICAgICAgaWYgKHR5cGVBcmd1bWVudCBpcyEgRHluYW1pY1R5cGUpIHsKICAgICAgICByZXR1cm4gdHlwZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBUeXBlZGVmVHlwZS5ieVJlZmVyZW5jZSh0eXBlLnR5cGVkZWZSZWZlcmVuY2UsCiAgICAgICAgY2FsY3VsYXRlQm91bmRzKHR5cGUudHlwZWRlZk5vZGUudHlwZVBhcmFtZXRlcnMsIG9iamVjdCkpOwogIH0KICByZXR1cm4gdHlwZTsKfQoKLy8vIENhbGN1bGF0ZXMgYm91bmRzIHRvIGJlIHByb3ZpZGVkIGFzIHR5cGUgYXJndW1lbnRzIGluIHBsYWNlIG9mIG1pc3NpbmcgdHlwZQovLy8gYXJndW1lbnRzIG9uIHJhdyB0eXBlcyB3aXRoIHRoZSBnaXZlbiB0eXBlIHBhcmFtZXRlcnMuCi8vLwovLy8gU2VlIHRoZSBbZGVzY3JpcHRpb25dCi8vLyAoaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvYmxvYi9tYXN0ZXIvZG9jcy9sYW5ndWFnZS9pbmZvcm1hbC9pbnN0YW50aWF0ZS10by1ib3VuZC5tZCkKLy8vIG9mIHRoZSBhbGdvcml0aG0gZm9yIGRldGFpbHMuCkxpc3Q8RGFydFR5cGU+IGNhbGN1bGF0ZUJvdW5kcygKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMsIENsYXNzIG9iamVjdCkgewogIExpc3Q8RGFydFR5cGU+IGJvdW5kcyA9IG5ldyBMaXN0PERhcnRUeXBlPih0eXBlUGFyYW1ldGVycy5sZW5ndGgpOwogIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgIERhcnRUeXBlIGJvdW5kID0gdHlwZVBhcmFtZXRlcnNbaV0uYm91bmQ7CiAgICBpZiAoYm91bmQgPT0gbnVsbCkgewogICAgICBib3VuZCA9IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICB9IGVsc2UgaWYgKGJvdW5kIGlzIEludGVyZmFjZVR5cGUgJiYgYm91bmQuY2xhc3NOb2RlID09IG9iamVjdCkgewogICAgICBEYXJ0VHlwZSBkZWZhdWx0VHlwZSA9IHR5cGVQYXJhbWV0ZXJzW2ldLmRlZmF1bHRUeXBlOwogICAgICBpZiAoIShkZWZhdWx0VHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmIGRlZmF1bHRUeXBlLmNsYXNzTm9kZSA9PSBvYmplY3QpKSB7CiAgICAgICAgYm91bmQgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICB9CiAgICB9CiAgICBib3VuZHNbaV0gPSBib3VuZDsKICB9CgogIFR5cGVWYXJpYWJsZUdyYXBoIGdyYXBoID0gbmV3IFR5cGVWYXJpYWJsZUdyYXBoKHR5cGVQYXJhbWV0ZXJzLCBib3VuZHMpOwogIExpc3Q8TGlzdDxpbnQ+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+YCBpcyBbaW52YXJpYW50XS4KICBzdGF0aWMgaW50IGNvbWJpbmUoaW50IGEsIGludCBiKSB7CiAgICBpZiAoYSA9PSB1bnJlbGF0ZWQgfHwgYiA9PSB1bnJlbGF0ZWQpIHJldHVybiB1bnJlbGF0ZWQ7CiAgICBpZiAoYSA9PSBpbnZhcmlhbnQgfHwgYiA9PSBpbnZhcmlhbnQpIHJldHVybiBpbnZhcmlhbnQ7CiAgICByZXR1cm4gYSA9PSBiID8gY292YXJpYW50IDogY29udHJhdmFyaWFudDsKICB9Cn0KggIATk48ARUJFA8SFRYXFRMXGxUSAT0BOAFBAS8BLRYmGQFRMhkBODQBNUs4MBczGgYBMC1CIkA7CAYEASkZBAIBOys6ATMBLQEjHAQBJiYgASs0HQYEASc0HQYEASk/KC8GPB4GPSgGIgQBMzMkBgQCATwfM01QGioVCAYqUQQdMyoVCAY+QwQPAgFQOwQaYiIgOEU0LhkjRjxQJQgGFwQBS0YzTEwwTUwGIEgwI0MGBAE0TEwwOSBINjoGBAERAgEaMBsBOiUBTSABTAIBUTAwNCghHCwBOkpIOWUmLEQ3NUUcRyIlBAEfLyQkMSQlPDtNKigGOUQqKAY0SCooBksoJisLEQQBJgEiKwExTC8mSkkoRy1GKEcGAT0jIhoxJgYEISYkBCImJQQBICMpARFFOR8vJCQxJAQUTC8mSkkoDVEtRigNUQYEISYkBCImJQQRAgFRMD0kHiVBMSI1LzMELyZLKEhRSShILUcoSAYBPSMiGigdBgQRAgErHyAkIgQaAgFPThMuNCEeHi4VH0YWJ08rNz1GMiUGRU8rNz1GMiUGRSVCKiMnPkRNOSYGIjo/MigvPSsGTjItPSgEDwIBQCI+AgE+IjwCAUIRKyIBSCIBSCYBTB4iAU5KTE5GKgFLBSYFUU8FUFAFSU8VBSYFJAVMQQUmBScFTEUlPDwvBAIBJXBhY2thZ2U6a2VybmVsL3NyYy9ib3VuZHNfY2hlY2tzLmRhcnQ9c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Jhc2UvcmVzb2x2ZV9yZWxhdGl2ZV91cmkuZGFydIO8Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8qKgogKiBSZXNvbHZlIHRoZSBbY29udGFpbmVkVXJpXSBhZ2FpbnN0IFtiYXNlVXJpXSB1c2luZyBEYXJ0IHJ1bGVzLgogKgogKiBUaGlzIGZ1bmN0aW9uIGJlaGF2ZXMgc2ltaWxhcmx5IHRvIFtVcmkucmVzb2x2ZVVyaV0sIGV4Y2VwdCB0aGF0IGl0IHByb3Blcmx5CiAqIGhhbmRsZXMgc2l0dWF0aW9ucyBsaWtlIHRoZSBmb2xsb3dpbmc6CiAqCiAqICAgICByZXNvbHZlUmVsYXRpdmVVcmkoZGFydDpjb3JlLCBib29sLmRhcnQpIC0+IGRhcnQ6Y29yZS9ib29sLmRhcnQKICogICAgIHJlc29sdmVSZWxhdGl2ZVVyaShwYWNrYWdlOmEvYi5kYXJ0LCAuLi9jLmRhcnQpIC0+IHBhY2thZ2U6YS9jLmRhcnQKICovClVyaSByZXNvbHZlUmVsYXRpdmVVcmkoVXJpIGJhc2VVcmksIFVyaSBjb250YWluZWRVcmkpIHsKICBpZiAoY29udGFpbmVkVXJpLmlzQWJzb2x1dGUpIHsKICAgIHJldHVybiBjb250YWluZWRVcmk7CiAgfQogIFN0cmluZyBzY2hlbWUgPSBiYXNlVXJpLnNjaGVtZTsKICAvLyBkYXJ0OmNvcmUgPT4gZGFydDpjb3JlL2NvcmUuZGFydAogIGlmIChzY2hlbWUgPT0gJ2RhcnQnKSB7CiAgICBTdHJpbmcgcGFydCA9IGJhc2VVcmkucGF0aDsKICAgIGlmIChwYXJ0LmluZGV4T2YoJy8nKSA8IDApIHsKICAgICAgYmFzZVVyaSA9IFVyaS5wYXJzZSgnJHNjaGVtZTokcGFydC8kcGFydC5kYXJ0Jyk7CiAgICB9CiAgfQogIHJldHVybiBiYXNlVXJpLnJlc29sdmVVcmkoY29udGFpbmVkVXJpKTsKfQodAE5OPAEEQgNQKgNHSwQ4IRkEIiYaICE3BgQrAgE0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Jhc2UvcmVzb2x2ZV9yZWxhdGl2ZV91cmkuZGFydDdzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvY29uZmlndXJhdGlvbi5kYXJ0gdAvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5jb25maWd1cmF0aW9uOwoKY2xhc3MgQ29uZmlndXJhdGlvbiB7CiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CiAgZmluYWwgU3RyaW5nIGRvdHRlZE5hbWU7CiAgZmluYWwgU3RyaW5nIGNvbmRpdGlvbjsKICBmaW5hbCBTdHJpbmcgaW1wb3J0VXJpOwogIENvbmZpZ3VyYXRpb24oCiAgICAgIHRoaXMuY2hhck9mZnNldCwgdGhpcy5kb3R0ZWROYW1lLCB0aGlzLmNvbmRpdGlvbiwgdGhpcy5pbXBvcnRVcmkpOwp9ChAATk48AR0BFhgbGhoRSQIBLnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jb25maWd1cmF0aW9uLmRhcnQwc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2V4cG9ydC5kYXJ0hDcvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5leHBvcnQ7CgppbXBvcnQgJ2J1aWxkZXIvYnVpbGRlci5kYXJ0JyBzaG93IERlY2xhcmF0aW9uLCBMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnY29tYmluYXRvci5kYXJ0JyBzaG93IENvbWJpbmF0b3I7CgpjbGFzcyBFeHBvcnQgewogIC8vLyBUaGUgbGlicmFyeSB0aGF0IGlzIGV4cG9ydGluZyBbZXhwb3J0ZWRdOwogIGZpbmFsIExpYnJhcnlCdWlsZGVyIGV4cG9ydGVyOwoKICAvLy8gVGhlIGxpYnJhcnkgYmVpbmcgZXhwb3J0ZWQuCiAgZmluYWwgTGlicmFyeUJ1aWxkZXIgZXhwb3J0ZWQ7CgogIGZpbmFsIExpc3Q8Q29tYmluYXRvcj4gY29tYmluYXRvcnM7CgogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwoKICBFeHBvcnQodGhpcy5leHBvcnRlciwgdGhpcy5leHBvcnRlZCwgdGhpcy5jb21iaW5hdG9ycywgdGhpcy5jaGFyT2Zmc2V0KTsKCiAgVXJpIGdldCBmaWxlVXJpID0+IGV4cG9ydGVyLmZpbGVVcmk7CgogIGJvb2wgYWRkVG9FeHBvcnRTY29wZShTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gbWVtYmVyKSB7CiAgICBpZiAoY29tYmluYXRvcnMgIT0gbnVsbCkgewogICAgICBmb3IgKENvbWJpbmF0b3IgY29tYmluYXRvciBpbiBjb21iaW5hdG9ycykgewogICAgICAgIGlmIChjb21iaW5hdG9yLmlzU2hvdyAmJiAhY29tYmluYXRvci5uYW1lcy5jb250YWlucyhuYW1lKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChjb21iaW5hdG9yLmlzSGlkZSAmJiBjb21iaW5hdG9yLm5hbWVzLmNvbnRhaW5zKG5hbWUpKSByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBleHBvcnRlci5hZGRUb0V4cG9ydFNjb3BlKG5hbWUsIG1lbWJlciwgY2hhck9mZnNldCk7CiAgfQp9CiUATk48ARYBQAEqAQ8wIQEiIQEmARgBSwEnATsfM1FQCAZABAIBJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9leHBvcnQuZGFydDBzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvaW1wb3J0LmRhcnSMiC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmltcG9ydDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgTGlicmFyeURlcGVuZGVuY3k7CgppbXBvcnQgJ2J1aWxkZXIvYnVpbGRlci5kYXJ0JyBzaG93IERlY2xhcmF0aW9uLCBMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnYnVpbGRlci9wcmVmaXhfYnVpbGRlci5kYXJ0JyBzaG93IFByZWZpeEJ1aWxkZXI7CgppbXBvcnQgJ2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JyBzaG93IHRvS2VybmVsQ29tYmluYXRvcnM7CgppbXBvcnQgJ2NvbWJpbmF0b3IuZGFydCcgc2hvdyBDb21iaW5hdG9yOwoKaW1wb3J0ICdjb25maWd1cmF0aW9uLmRhcnQnIHNob3cgQ29uZmlndXJhdGlvbjsKCmNsYXNzIEltcG9ydCB7CiAgLy8vIFRoZSBsaWJyYXJ5IHRoYXQgaXMgaW1wb3J0aW5nIFtpbXBvcnRlZF07CiAgZmluYWwgTGlicmFyeUJ1aWxkZXIgaW1wb3J0ZXI7CgogIC8vLyBUaGUgbGlicmFyeSBiZWluZyBpbXBvcnRlZC4KICBmaW5hbCBMaWJyYXJ5QnVpbGRlciBpbXBvcnRlZDsKCiAgZmluYWwgUHJlZml4QnVpbGRlciBwcmVmaXhCdWlsZGVyOwoKICBmaW5hbCBib29sIGRlZmVycmVkOwoKICBmaW5hbCBTdHJpbmcgcHJlZml4OwoKICBmaW5hbCBMaXN0PENvbWJpbmF0b3I+IGNvbWJpbmF0b3JzOwoKICBmaW5hbCBMaXN0PENvbmZpZ3VyYXRpb24+IGNvbmZpZ3VyYXRpb25zOwoKICBmaW5hbCBpbnQgY2hhck9mZnNldDsKCiAgZmluYWwgaW50IHByZWZpeENoYXJPZmZzZXQ7CgogIC8vIFRoZSBMaWJyYXJ5QnVpbGRlciBmb3IgdGhlIGltcG9ydGVkIGxpYnJhcnkgKCdpbXBvcnRlZCcpIG1heSBiZSBudWxsIHdoZW4KICAvLyB0aGlzIGZpZWxkIGlzIHNldC4KICBmaW5hbCBTdHJpbmcgbmF0aXZlSW1wb3J0UGF0aDsKCiAgSW1wb3J0KAogICAgICB0aGlzLmltcG9ydGVyLAogICAgICB0aGlzLmltcG9ydGVkLAogICAgICB0aGlzLmRlZmVycmVkLAogICAgICB0aGlzLnByZWZpeCwKICAgICAgdGhpcy5jb21iaW5hdG9ycywKICAgICAgdGhpcy5jb25maWd1cmF0aW9ucywKICAgICAgdGhpcy5jaGFyT2Zmc2V0LAogICAgICB0aGlzLnByZWZpeENoYXJPZmZzZXQsCiAgICAgIGludCBpbXBvcnRJbmRleCwKICAgICAge3RoaXMubmF0aXZlSW1wb3J0UGF0aH0pCiAgICAgIDogcHJlZml4QnVpbGRlciA9IGNyZWF0ZVByZWZpeEJ1aWxkZXIocHJlZml4LCBpbXBvcnRlciwgaW1wb3J0ZWQsCiAgICAgICAgICAgIGNvbWJpbmF0b3JzLCBkZWZlcnJlZCwgY2hhck9mZnNldCwgcHJlZml4Q2hhck9mZnNldCwgaW1wb3J0SW5kZXgpOwoKICBVcmkgZ2V0IGZpbGVVcmkgPT4gaW1wb3J0ZXIuZmlsZVVyaTsKCiAgdm9pZCBmaW5hbGl6ZUltcG9ydHMoTGlicmFyeUJ1aWxkZXIgaW1wb3J0ZXIpIHsKICAgIGlmIChuYXRpdmVJbXBvcnRQYXRoICE9IG51bGwpIHJldHVybjsKICAgIHZvaWQgRnVuY3Rpb24oU3RyaW5nLCBEZWNsYXJhdGlvbikgYWRkOwogICAgaWYgKHByZWZpeEJ1aWxkZXIgPT0gbnVsbCkgewogICAgICBhZGQgPSAoU3RyaW5nIG5hbWUsIERlY2xhcmF0aW9uIG1lbWJlcikgewogICAgICAgIGltcG9ydGVyLmFkZFRvU2NvcGUobmFtZSwgbWVtYmVyLCBjaGFyT2Zmc2V0LCB0cnVlKTsKICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZCA9IChTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gbWVtYmVyKSB7CiAgICAgICAgcHJlZml4QnVpbGRlci5hZGRUb0V4cG9ydFNjb3BlKG5hbWUsIG1lbWJlciwgY2hhck9mZnNldCk7CiAgICAgIH07CiAgICB9CiAgICBpbXBvcnRlZC5leHBvcnRTY29wZS5mb3JFYWNoKChTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gbWVtYmVyKSB7CiAgICAgIGlmIChjb21iaW5hdG9ycyAhPSBudWxsKSB7CiAgICAgICAgZm9yIChDb21iaW5hdG9yIGNvbWJpbmF0b3IgaW4gY29tYmluYXRvcnMpIHsKICAgICAgICAgIGlmIChjb21iaW5hdG9yLmlzU2hvdyAmJiAhY29tYmluYXRvci5uYW1lcy5jb250YWlucyhuYW1lKSkgcmV0dXJuOwogICAgICAgICAgaWYgKGNvbWJpbmF0b3IuaXNIaWRlICYmIGNvbWJpbmF0b3IubmFtZXMuY29udGFpbnMobmFtZSkpIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgYWRkKG5hbWUsIG1lbWJlcik7CiAgICB9KTsKICAgIGlmIChwcmVmaXhCdWlsZGVyICE9IG51bGwpIHsKICAgICAgRGVjbGFyYXRpb24gZXhpc3RpbmcgPQogICAgICAgICAgaW1wb3J0ZXIuYWRkQnVpbGRlcihwcmVmaXgsIHByZWZpeEJ1aWxkZXIsIHByZWZpeENoYXJPZmZzZXQpOwogICAgICBpZiAoZXhpc3RpbmcgPT0gcHJlZml4QnVpbGRlcikgewogICAgICAgIGltcG9ydGVyLmFkZFRvU2NvcGUocHJlZml4LCBwcmVmaXhCdWlsZGVyLCBwcmVmaXhDaGFyT2Zmc2V0LCB0cnVlKTsKICAgICAgfQogICAgfQogIH0KfQoKUHJlZml4QnVpbGRlciBjcmVhdGVQcmVmaXhCdWlsZGVyKAogICAgU3RyaW5nIHByZWZpeCwKICAgIExpYnJhcnlCdWlsZGVyIGltcG9ydGVyLAogICAgTGlicmFyeUJ1aWxkZXIgaW1wb3J0ZWQsCiAgICBMaXN0PENvbWJpbmF0b3I+IGNvbWJpbmF0b3JzLAogICAgYm9vbCBkZWZlcnJlZCwKICAgIGludCBjaGFyT2Zmc2V0LAogICAgaW50IHByZWZpeENoYXJPZmZzZXQsCiAgICBpbnQgaW1wb3J0SW5kZXgpIHsKICBpZiAocHJlZml4ID09IG51bGwpIHJldHVybiBudWxsOwogIExpYnJhcnlEZXBlbmRlbmN5IGRlcGVuZGVuY3kgPSBudWxsOwogIGlmIChkZWZlcnJlZCkgewogICAgZGVwZW5kZW5jeSA9IG5ldyBMaWJyYXJ5RGVwZW5kZW5jeS5kZWZlcnJlZEltcG9ydChpbXBvcnRlZC50YXJnZXQsIHByZWZpeCwKICAgICAgICBjb21iaW5hdG9yczogdG9LZXJuZWxDb21iaW5hdG9ycyhjb21iaW5hdG9ycykpCiAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgfQogIHJldHVybiBuZXcgUHJlZml4QnVpbGRlcigKICAgICAgcHJlZml4LCBkZWZlcnJlZCwgaW1wb3J0ZXIsIGRlcGVuZGVuY3ksIHByZWZpeENoYXJPZmZzZXQsIGltcG9ydEluZGV4KTsKfQpvAE5OPAEWATkBQAE5AT4BKgEwAQ8wIQEiIQElARcBFwEmASwBGAEeAU8YIQEKFRUVExgbFx0XH0hPAScBMiosITA9CQ0wQgkGRSE1TUwKCBkIIR1IJ0wIBgQCASMTHR0iExQaFyMnEk83IQQcTgIBJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9pbXBvcnQuZGFydDhzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYmFzZS9pbnN0cnVtZW50YXRpb24uZGFydIrGLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgRGFydFR5cGUsIE1lbWJlcjsKCi8vLyBDb252ZXJ0ICfihpInIHRvICctPicgYmVjYXVzZSAn4oaSJyBkb2Vzbid0IHNob3cgdXAgaW4gc29tZSB0ZXJtaW5hbHMuCi8vLyBSZW1vdmUgcHJlZml4ZXMgdGhhdCBhcmUgdXNlZCB2ZXJ5IG9mdGVuIGluIHRlc3RzLgpTdHJpbmcgX3Nob3J0ZW5JbnN0cnVtZW50YXRpb25TdHJpbmcoU3RyaW5nIHMpID0+IHMKICAgIC5yZXBsYWNlQWxsKCfihpInLCAnLT4nKQogICAgLnJlcGxhY2VBbGwoJ2RhcnQuY29yZTo6JywgJycpCiAgICAucmVwbGFjZUFsbCgnZGFydC5hc3luYzo6JywgJycpCiAgICAucmVwbGFjZUFsbCgndGVzdDo6JywgJycpOwoKLy8vIEludGVyZmFjZSBwcm92aWRpbmcgdGhlIGFiaWxpdHkgdG8gcmVjb3JkIHByb3BlcnR5L3ZhbHVlIHBhaXJzIGFzc29jaWF0ZWQKLy8vIHdpdGggc291cmNlIGZpbGUgbG9jYXRpb25zLiAgSW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0ZXN0aW5nLgphYnN0cmFjdCBjbGFzcyBJbnN0cnVtZW50YXRpb24gewogIC8vLyBSZWNvcmRzIGEgcHJvcGVydHkvdmFsdWUgcGFpciBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIFVSSSBhbmQgb2Zmc2V0LgogIHZvaWQgcmVjb3JkKFVyaSB1cmksIGludCBvZmZzZXQsIFN0cmluZyBwcm9wZXJ0eSwgSW5zdHJ1bWVudGF0aW9uVmFsdWUgdmFsdWUpOwp9CgovLy8gSW50ZXJmYWNlIGZvciB2YWx1ZXMgcmVjb3JkZWQgYnkgW0luc3RydW1lbnRhdGlvbl0uCmFic3RyYWN0IGNsYXNzIEluc3RydW1lbnRhdGlvblZhbHVlIHsKICBjb25zdCBJbnN0cnVtZW50YXRpb25WYWx1ZSgpOwoKICAvLy8gQ2hlY2tzIGlmIHRoZSBnaXZlbiBTdHJpbmcgaXMgYW4gYWNjdXJhdGUgZGVzY3JpcHRpb24gb2YgdGhpcyB2YWx1ZS4KICAvLy8KICAvLy8gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24ganVzdCBjaGVja3MgZm9yIGVxdWFsaXR5IHdpdGggdGhlIHJldHVybiB2YWx1ZQogIC8vLyBvZiBbdG9TdHJpbmddLCBob3dldmVyIGRlcml2ZWQgY2xhc3NlcyBtYXkgd2FudCBhIG1vcmUgc29waGlzdGljYXRlZAogIC8vLyBpbXBsZW1lbnRhdGlvbiAoZS5nLiB0byBhbGxvdyBhYmJyZXZpYXRpb25zIGluIHRoZSBkZXNjcmlwdGlvbikuCiAgLy8vCiAgLy8vIERlcml2ZWQgY2xhc3NlcyBzaG91bGQgZW5zdXJlIHRoYXQgdGhlIGludmFyaWFudCBob2xkczoKICAvLy8gYHRoaXMubWF0Y2hlcyh0aGlzLnRvU3RyaW5nKCkpYCBzaG91bGQgYWx3YXlzIHJldHVybiBgdHJ1ZWAuCiAgYm9vbCBtYXRjaGVzKFN0cmluZyBkZXNjcmlwdGlvbikgPT4gZGVzY3JpcHRpb24gPT0gdG9TdHJpbmcoKTsKfQoKLy8vIEluc3RhbmNlIG9mIFtJbnN0cnVtZW50YXRpb25WYWx1ZV0gZGVzY3JpYmluZyBhIFtNZW1iZXJdLgpjbGFzcyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvck1lbWJlciBleHRlbmRzIEluc3RydW1lbnRhdGlvblZhbHVlIHsKICBmaW5hbCBNZW1iZXIgbWVtYmVyOwoKICBJbnN0cnVtZW50YXRpb25WYWx1ZUZvck1lbWJlcih0aGlzLm1lbWJlcik7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IF9zaG9ydGVuSW5zdHJ1bWVudGF0aW9uU3RyaW5nKG1lbWJlci50b1N0cmluZygpKTsKfQoKLy8vIEluc3RhbmNlIG9mIFtJbnN0cnVtZW50YXRpb25WYWx1ZV0gZGVzY3JpYmluZyBhIFtEYXJ0VHlwZV0uCmNsYXNzIEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZSBleHRlbmRzIEluc3RydW1lbnRhdGlvblZhbHVlIHsKICBmaW5hbCBEYXJ0VHlwZSB0eXBlOwoKICBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGUodGhpcy50eXBlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX3Nob3J0ZW5JbnN0cnVtZW50YXRpb25TdHJpbmcodHlwZS50b1N0cmluZygpKTsKfQoKLy8vIEluc3RhbmNlIG9mIFtJbnN0cnVtZW50YXRpb25WYWx1ZV0gZGVzY3JpYmluZyBhIGxpc3Qgb2YgW0RhcnRUeXBlXXMuCmNsYXNzIEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZUFyZ3MgZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25WYWx1ZSB7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gdHlwZXM7CgogIEluc3RydW1lbnRhdGlvblZhbHVlRm9yVHlwZUFyZ3ModGhpcy50eXBlcyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IHR5cGVzCiAgICAgIC5tYXAoKHR5cGUpID0+IG5ldyBJbnN0cnVtZW50YXRpb25WYWx1ZUZvclR5cGUodHlwZSkudG9TdHJpbmcoKSkKICAgICAgLmpvaW4oJywgJyk7Cn0KCi8vLyBJbnN0YW5jZSBvZiBbSW5zdHJ1bWVudGF0aW9uVmFsdWVdIHdoaWNoIG9ubHkgbWF0Y2hlcyB0aGUgZ2l2ZW4gbGl0ZXJhbAovLy8gc3RyaW5nLgpjbGFzcyBJbnN0cnVtZW50YXRpb25WYWx1ZUxpdGVyYWwgZXh0ZW5kcyBJbnN0cnVtZW50YXRpb25WYWx1ZSB7CiAgZmluYWwgU3RyaW5nIHZhbHVlOwoKICBjb25zdCBJbnN0cnVtZW50YXRpb25WYWx1ZUxpdGVyYWwodGhpcy52YWx1ZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IHZhbHVlOwp9ClAATk48ATgBRzc0GyMkHwFOQSFOUQIBOCYgAUsGUEtHBj5DQQIBPkMXAS4BDEkCAUBBFwEqAQxHAgFJRR4BLwEMHUcTAgFMDEEWATEBDB4CAS9wYWNrYWdlOmZyb250X2VuZC9zcmMvYmFzZS9pbnN0cnVtZW50YXRpb24uZGFydEZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL3RyYW5zZm9ybV9jb2xsZWN0aW9ucy5kYXJ0wABcwC8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnRyYW5zZm9ybV9jb2xsZWN0aW9uczsKCmltcG9ydCAnZGFydDpjb3JlJyBoaWRlIE1hcEVudHJ5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHMsCiAgICAgICAgQXNFeHByZXNzaW9uLAogICAgICAgIEJsb2NrLAogICAgICAgIEJsb2NrRXhwcmVzc2lvbiwKICAgICAgICBDbGFzcywKICAgICAgICBDb25kaXRpb25hbEV4cHJlc3Npb24sCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBFeHByZXNzaW9uU3RhdGVtZW50LAogICAgICAgIEZpZWxkLAogICAgICAgIEZvckluU3RhdGVtZW50LAogICAgICAgIEZvclN0YXRlbWVudCwKICAgICAgICBJZlN0YXRlbWVudCwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIExldCwKICAgICAgICBMaXN0Q29uY2F0ZW5hdGlvbiwKICAgICAgICBMaXN0TGl0ZXJhbCwKICAgICAgICBNYXBDb25jYXRlbmF0aW9uLAogICAgICAgIE1hcEVudHJ5LAogICAgICAgIE1hcExpdGVyYWwsCiAgICAgICAgTWV0aG9kSW52b2NhdGlvbiwKICAgICAgICBOYW1lLAogICAgICAgIE5vdCwKICAgICAgICBOdWxsTGl0ZXJhbCwKICAgICAgICBQcm9jZWR1cmUsCiAgICAgICAgUHJvcGVydHlHZXQsCiAgICAgICAgU2V0Q29uY2F0ZW5hdGlvbiwKICAgICAgICBTZXRMaXRlcmFsLAogICAgICAgIFN0YXRlbWVudCwKICAgICAgICBTdGF0aWNJbnZvY2F0aW9uLAogICAgICAgIHRyYW5zZm9ybUxpc3QsCiAgICAgICAgVHJlZU5vZGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiwKICAgICAgICBWYXJpYWJsZUdldDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBzaG93IFR5cGVFbnZpcm9ubWVudDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdmlzaXRvci5kYXJ0JyBzaG93IFRyYW5zZm9ybWVyOwoKaW1wb3J0ICdjb2xsZWN0aW9ucy5kYXJ0JwogICAgc2hvdwogICAgICAgIENvbnRyb2xGbG93RWxlbWVudCwKICAgICAgICBDb250cm9sRmxvd01hcEVudHJ5LAogICAgICAgIEZvckVsZW1lbnQsCiAgICAgICAgRm9ySW5FbGVtZW50LAogICAgICAgIEZvckluTWFwRW50cnksCiAgICAgICAgRm9yTWFwRW50cnksCiAgICAgICAgSWZFbGVtZW50LAogICAgICAgIElmTWFwRW50cnksCiAgICAgICAgU3ByZWFkRWxlbWVudCwKICAgICAgICBTcHJlYWRNYXBFbnRyeTsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyBnZXRGaWxlVXJpLCB1bmhhbmRsZWQ7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbG9hZGVyLmRhcnQnIHNob3cgU291cmNlTG9hZGVyOwoKaW1wb3J0ICdyZWRpcmVjdGluZ19mYWN0b3J5X2JvZHkuZGFydCcgc2hvdyBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5OwoKY2xhc3MgQ29sbGVjdGlvblRyYW5zZm9ybWVyIGV4dGVuZHMgVHJhbnNmb3JtZXIgewogIGZpbmFsIENvcmVUeXBlcyBjb3JlVHlwZXM7CiAgZmluYWwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudDsKICBmaW5hbCBQcm9jZWR1cmUgbGlzdEFkZDsKICBmaW5hbCBQcm9jZWR1cmUgc2V0RmFjdG9yeTsKICBmaW5hbCBQcm9jZWR1cmUgc2V0QWRkOwogIGZpbmFsIFByb2NlZHVyZSBvYmplY3RFcXVhbHM7CiAgZmluYWwgUHJvY2VkdXJlIG1hcEVudHJpZXM7CiAgZmluYWwgUHJvY2VkdXJlIG1hcFB1dDsKICBmaW5hbCBDbGFzcyBtYXBFbnRyeUNsYXNzOwogIGZpbmFsIEZpZWxkIG1hcEVudHJ5S2V5OwogIGZpbmFsIEZpZWxkIG1hcEVudHJ5VmFsdWU7CgogIHN0YXRpYyBQcm9jZWR1cmUgX2ZpbmRTZXRGYWN0b3J5KENvcmVUeXBlcyBjb3JlVHlwZXMpIHsKICAgIFByb2NlZHVyZSBmYWN0b3J5ID0gY29yZVR5cGVzLmluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ1NldCcsICcnKTsKICAgIFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkgYm9keSA9IGZhY3Rvcnk/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/Qx1AMg8mLQgGHysGJzsEAgE9cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC90cmFuc2Zvcm1fY29sbGVjdGlvbnMuZGFydEdzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEva2VybmVsL3RyYW5zZm9ybV9zZXRfbGl0ZXJhbHMuZGFydJGzLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudHJhbnNmb3JtX3NldF9saXRlcmFsczsKCmltcG9ydCAnZGFydDpjb3JlJyBoaWRlIE1hcEVudHJ5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBcmd1bWVudHMsCiAgICAgICAgQ2xhc3MsCiAgICAgICAgQ29uc3RydWN0b3IsCiAgICAgICAgQ29uc3RydWN0b3JJbnZvY2F0aW9uLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIEV4cHJlc3Npb24sCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBMZXQsCiAgICAgICAgTGlicmFyeSwKICAgICAgICBNYXBFbnRyeSwKICAgICAgICBNYXBMaXRlcmFsLAogICAgICAgIE1ldGhvZEludm9jYXRpb24sCiAgICAgICAgTmFtZSwKICAgICAgICBOdWxsTGl0ZXJhbCwKICAgICAgICBQcm9jZWR1cmUsCiAgICAgICAgU2V0TGl0ZXJhbCwKICAgICAgICBTdGF0aWNJbnZvY2F0aW9uLAogICAgICAgIFRyZWVOb2RlLAogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24sCiAgICAgICAgVmFyaWFibGVHZXQ7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgc2hvdyBDb3JlVHlwZXM7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3Zpc2l0b3IuZGFydCcgc2hvdyBUcmFuc2Zvcm1lcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9sb2FkZXIuZGFydCcgc2hvdyBTb3VyY2VMb2FkZXI7CgppbXBvcnQgJ3JlZGlyZWN0aW5nX2ZhY3RvcnlfYm9keS5kYXJ0JyBzaG93IFJlZGlyZWN0aW5nRmFjdG9yeUJvZHk7CgovLyBUT0RPKGFza2VzYyk6IERlbGV0ZSB0aGlzIGNsYXNzIHdoZW4gYWxsIGJhY2tlbmRzIHN1cHBvcnQgc2V0IGxpdGVyYWxzLgpjbGFzcyBTZXRMaXRlcmFsVHJhbnNmb3JtZXIgZXh0ZW5kcyBUcmFuc2Zvcm1lciB7CiAgZmluYWwgQ29yZVR5cGVzIGNvcmVUeXBlczsKICBmaW5hbCBEYXJ0VHlwZSBudWxsVHlwZTsKICBmaW5hbCBQcm9jZWR1cmUgc2V0RmFjdG9yeTsKICBmaW5hbCBQcm9jZWR1cmUgYWRkTWV0aG9kOwogIGZpbmFsIENvbnN0cnVjdG9yIHVubW9kaWZpYWJsZVNldENvbnN0cnVjdG9yOwogIGZpbmFsIGJvb2wgdHJhbnNmb3JtQ29uc3Q7CgogIHN0YXRpYyBQcm9jZWR1cmUgX2ZpbmRTZXRGYWN0b3J5KENvcmVUeXBlcyBjb3JlVHlwZXMpIHsKICAgIFByb2NlZHVyZSBmYWN0b3J5ID0gY29yZVR5cGVzLmluZGV4LmdldE1lbWJlcignZGFydDpjb3JlJywgJ1NldCcsICcnKTsKICAgIFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkgYm9keSA9IGZhY3Rvcnk/LmZ1bmN0aW9uPy5ib2R5OwogICAgcmV0dXJuIGJvZHk/LnRhcmdldDsKICB9CgogIHN0YXRpYyBQcm9jZWR1cmUgX2ZpbmRBZGRNZXRob2QoQ29yZVR5cGVzIGNvcmVUeXBlcykgewogICAgcmV0dXJuIGNvcmVUeXBlcy5pbmRleC5nZXRNZW1iZXIoJ2RhcnQ6Y29yZScsICdTZXQnLCAnYWRkJyk7CiAgfQoKICBzdGF0aWMgQ29uc3RydWN0b3IgX2ZpbmRVbm1vZGlmaWFibGVTZXRDb25zdHJ1Y3RvcihTb3VyY2VMb2FkZXIgbG9hZGVyKSB7CiAgICAvLyBXZSBzaG91bGQgbm90IGdlbmVyYWxseSBkaWcgaW50byBsaWJyYXJpZXMgbGlrZSB0aGlzLCBhbmQgd2Ugc2hvdWxkCiAgICAvLyBhdm9pZCBkZXBlbmRlbmNpZXMgb24gbGlicmFyaWVzIG90aGVyIHRoYW4gdGhlIG9uZXMgaW5kZXhlZCBieQogICAgLy8gQ29yZVR5cGVzLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHNvbHV0aW9uIHVudGlsIGFsbCBiYWNrZW5kcyBoYXZlCiAgICAvLyBpbXBsZW1lbnRlZCBzdXBwb3J0IGZvciBzZXQgbGl0ZXJhbHMuCiAgICBVcmkgY29sbGVjdGlvblVyaSA9IFVyaS5wYXJzZSgiZGFydDpjb2xsZWN0aW9uIik7CiAgICBMaWJyYXJ5IGNvbGxlY3Rpb25MaWJyYXJ5ID0gbG9hZGVyLmJ1aWxkZXJzW2NvbGxlY3Rpb25VcmldLnRhcmdldDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sbGVjdGlvbkxpYnJhcnkuY2xhc3Nlcy5sZW5ndGg7IGkrKykgewogICAgICBDbGFzcyBjbGFzc05vZGUgPSBjb2xsZWN0aW9uTGlicmFyeS5jbGFzc2VzW2ldOwogICAgICBpZiAoY2xhc3NOb2RlLm5hbWUgPT0gIl9Vbm1vZGlmaWFibGVTZXQiKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjb2xsZWN0aW9uTGlicmFyeS5jbGFzc2VzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICBDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IGNsYXNzTm9kZS5jb25zdHJ1Y3RvcnNbal07CiAgICAgICAgICBpZiAoY29uc3RydWN0b3IubmFtZS5uYW1lLmlzRW1wdHkpIHsKICAgICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBTZXRMaXRlcmFsVHJhbnNmb3JtZXIoU291cmNlTG9hZGVyIGxvYWRlciwge3RoaXMudHJhbnNmb3JtQ29uc3Q6IHRydWV9KQogICAgICA6IGNvcmVUeXBlcyA9IGxvYWRlci5jb3JlVHlwZXMsCiAgICAgICAgbnVsbFR5cGUgPSBuZXcgSW50ZXJmYWNlVHlwZShsb2FkZXIuY29yZVR5cGVzLm51bGxDbGFzcywgW10pLAogICAgICAgIHNldEZhY3RvcnkgPSBfZmluZFNldEZhY3RvcnkobG9hZGVyLmNvcmVUeXBlcyksCiAgICAgICAgYWRkTWV0aG9kID0gX2ZpbmRBZGRNZXRob2QobG9hZGVyLmNvcmVUeXBlcyksCiAgICAgICAgdW5tb2RpZmlhYmxlU2V0Q29uc3RydWN0b3IgPSBfZmluZFVubW9kaWZpYWJsZVNldENvbnN0cnVjdG9yKGxvYWRlcik7CgogIFRyZWVOb2RlIHZpc2l0U2V0TGl0ZXJhbChTZXRMaXRlcmFsIG5vZGUpIHsKICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgaWYgKCF0cmFuc2Zvcm1Db25zdCkgcmV0dXJuIG5vZGU7CiAgICAgIExpc3Q8TWFwRW50cnk+IGVudHJpZXMgPSBuZXcgTGlzdDxNYXBFbnRyeT4obm9kZS5leHByZXNzaW9ucy5sZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAvLyBleHByZXNzaW9uX2k6IG51bGwKICAgICAgICBFeHByZXNzaW9uIGVudHJ5ID0gbm9kZS5leHByZXNzaW9uc1tpXS5hY2NlcHQodGhpcyk7CiAgICAgICAgZW50cmllc1tpXSA9IG5ldyBNYXBFbnRyeShlbnRyeSwgbmV3IE51bGxMaXRlcmFsKCkpOwogICAgICB9CiAgICAgIEV4cHJlc3Npb24gbWFwRXhwID0gbmV3IE1hcExpdGVyYWwoZW50cmllcywKICAgICAgICAgIGtleVR5cGU6IG5vZGUudHlwZUFyZ3VtZW50LCB2YWx1ZVR5cGU6IG51bGxUeXBlLCBpc0NvbnN0OiB0cnVlKTsKICAgICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvckludm9jYXRpb24odW5tb2RpZmlhYmxlU2V0Q29uc3RydWN0b3IsCiAgICAgICAgICBuZXcgQXJndW1lbnRzKFttYXBFeHBdLCB0eXBlczogW25vZGUudHlwZUFyZ3VtZW50XSksCiAgICAgICAgICBpc0NvbnN0OiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIE91dGVybW9zdCBkZWNsYXJhdGlvbiBvZiBsZXQgY2hhaW46IFNldDxFPiBzZXRWYXIgPSBuZXcgU2V0PEU+KCk7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gc2V0VmFyID0gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUoCiAgICAgICAgICBuZXcgU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgICAgICBzZXRGYWN0b3J5LCBuZXcgQXJndW1lbnRzKFtdLCB0eXBlczogW25vZGUudHlwZUFyZ3VtZW50XSkpLAogICAgICAgICAgdHlwZTogbmV3IEludGVyZmFjZVR5cGUoY29yZVR5cGVzLnNldENsYXNzLCBbbm9kZS50eXBlQXJndW1lbnRdKSk7CiAgICAgIC8vIElubmVybW9zdCBib2R5IG9mIGxldCBjaGFpbjogc2V0VmFyCiAgICAgIEV4cHJlc3Npb24gc2V0RXhwID0gbmV3IFZhcmlhYmxlR2V0KHNldFZhcik7CiAgICAgIGZvciAoaW50IGkgPSBub2RlLmV4cHJlc3Npb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgICAgLy8gbGV0IF8gPSBzZXRWYXIuYWRkKGV4cHJlc3Npb24pIGluIHJlc3QKICAgICAgICBFeHByZXNzaW9uIGVudHJ5ID0gbm9kZS5leHByZXNzaW9uc1tpXS5hY2NlcHQodGhpcyk7CiAgICAgICAgc2V0RXhwID0gbmV3IExldCgKICAgICAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24uZm9yVmFsdWUobmV3IE1ldGhvZEludm9jYXRpb24oCiAgICAgICAgICAgICAgICBuZXcgVmFyaWFibGVHZXQoc2V0VmFyKSwKICAgICAgICAgICAgICAgIG5ldyBOYW1lKCJhZGQiKSwKICAgICAgICAgICAgICAgIG5ldyBBcmd1bWVudHMoW2VudHJ5XSksCiAgICAgICAgICAgICAgICBhZGRNZXRob2QpKSwKICAgICAgICAgICAgc2V0RXhwKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IExldChzZXRWYXIsIHNldEV4cCk7CiAgICB9CiAgfQp9Cn0ATk48ASYBIgEhCRMPFR8SFBcNERIUGg4VExQaEh0VATgBNwE5AUQBSzIdGx4dMB0BOks7GQQBOUEEAUxLRkctNkdBNjJFPy8gDAoIBhEEAUomRjg2TgEuGChMOh49PQgyS0M/Gg1LRSBKTS0zPzI9GkMpISgdFQgmBgQCAT5wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3RyYW5zZm9ybV9zZXRfbGl0ZXJhbHMuZGFydERzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL2NsYXNzX21lbWJlcl9wYXJzZXIuZGFydIemLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucGFyc2VyLmNsYXNzX21lbWJlcl9wYXJzZXI7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnZXJyb3JfZGVsZWdhdGlvbl9saXN0ZW5lci5kYXJ0JyBzaG93IEVycm9yRGVsZWdhdGlvbkxpc3RlbmVyOwoKaW1wb3J0ICdsaXN0ZW5lci5kYXJ0JyBzaG93IExpc3RlbmVyOwoKaW1wb3J0ICdwYXJzZXIuZGFydCcgc2hvdyBQYXJzZXI7CgovLy8gUGFyc2VyIHNpbWlsYXIgdG8gW1RvcExldmVsUGFyc2VyXSBidXQgYWxzbyBwYXJzZXMgY2xhc3MgbWVtYmVycyAoZXhjbHVkaW5nCi8vLyB0aGVpciBib2RpZXMpLgpjbGFzcyBDbGFzc01lbWJlclBhcnNlciBleHRlbmRzIFBhcnNlciB7CiAgUGFyc2VyIHNraXBQYXJzZXI7CgogIENsYXNzTWVtYmVyUGFyc2VyKExpc3RlbmVyIGxpc3RlbmVyKSA6IHN1cGVyKGxpc3RlbmVyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gc2tpcEV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VJZGVudGlmaWVyRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIHRva2VuLm5leHQ7CiAgfQoKICBUb2tlbiBza2lwRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgLy8gVE9ETyhhc2tlc2MpOiBXZSBsaXN0ZW4gdG8gZXJyb3JzIG9jY3VycmluZyBkdXJpbmcgZXhwcmVzc2lvbiBwYXJzaW5nLAogICAgLy8gc2luY2UgdGhlIHBhcnNlciBtYXkgcmV3cml0ZSB0aGUgdG9rZW4gc3RyZWFtIHN1Y2ggdGhhdCB0aGUgZXJyb3IgaXMKICAgIC8vIG5vdCB0cmlnZ2VyZWQgZHVyaW5nIHRoZSBzZWNvbmQgcGFyc2UuCiAgICAvLyBXaGVuIHRoZSBwYXJzZXIgc3VwcG9ydHMgbm90IGRvaW5nIHRva2VuIHN0cmVhbSByZXdyaXRpbmcsIHVzZSB0aGF0CiAgICAvLyBmZWF0dXJlIHRvZ2V0aGVyIHdpdGggYSBuby1vcCBsaXN0ZW5lciBpbnN0ZWFkLgogICAgc2tpcFBhcnNlciA/Pz0gbmV3IFBhcnNlcihuZXcgRXJyb3JEZWxlZ2F0aW9uTGlzdGVuZXIobGlzdGVuZXIpKTsKICAgIHNraXBQYXJzZXIubWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zOwogICAgc2tpcFBhcnNlci5hc3luY1N0YXRlID0gYXN5bmNTdGF0ZTsKICAgIHNraXBQYXJzZXIubG9vcFN0YXRlID0gbG9vcFN0YXRlOwogICAgcmV0dXJuIHNraXBQYXJzZXIucGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICB9CgogIC8vIFRoaXMgbWV0aG9kIGlzIG92ZXJyaWRkZW4gZm9yIHR3byByZWFzb25zOgogIC8vIDEuIEF2b2lkIGdlbmVyYXRpbmcgZXZlbnRzIGZvciBhcmd1bWVudHMuCiAgLy8gMi4gQXZvaWQgY2FsbGluZyBza2lwIGV4cHJlc3Npb24gZm9yIGVhY2ggYXJndW1lbnQgKHdoaWNoIGRvZXNuJ3Qgd29yaykuCiAgVG9rZW4gcGFyc2VBcmd1bWVudHNPcHQoVG9rZW4gdG9rZW4pID0+IHNraXBBcmd1bWVudHNPcHQodG9rZW4pOwoKICBUb2tlbiBwYXJzZUZ1bmN0aW9uQm9keShUb2tlbiB0b2tlbiwgYm9vbCBpc0V4cHJlc3Npb24sIGJvb2wgYWxsb3dBYnN0cmFjdCkgewogICAgcmV0dXJuIHNraXBGdW5jdGlvbkJvZHkodG9rZW4sIGlzRXhwcmVzc2lvbiwgYWxsb3dBYnN0cmFjdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZUludmFsaWRCbG9jayhUb2tlbiB0b2tlbikgPT4gc2tpcEJsb2NrKHRva2VuKTsKfQo6AE5OPAEqAS4BRgEmASIBUBMpFQE6AQwnIgQBDDEXBAEmTkwuSzdGSigmLgQBMC9OQwFQQQQBDDwCATtwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2NsYXNzX21lbWJlcl9wYXJzZXIuZGFydD5zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvc291cmNlL2RpZXRfbGlzdGVuZXIuZGFydMAAdm8vLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5kaWV0X2xpc3RlbmVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBBc3luY01hcmtlciwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgTGlicmFyeSwKICAgICAgICBMaWJyYXJ5RGVwZW5kZW5jeSwKICAgICAgICBMaWJyYXJ5UGFydCwKICAgICAgICBUcmVlTm9kZSwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgc2hvdyBDbGFzc0hpZXJhcmNoeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICcuLi9idWlsZGVyL2J1aWxkZXIuZGFydCc7CgppbXBvcnQgJy4uL2NvbnN0YW50X2NvbnRleHQuZGFydCcgc2hvdyBDb25zdGFudENvbnRleHQ7CgppbXBvcnQgJy4uL2NyYXNoLmRhcnQnIHNob3cgQ3Jhc2g7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ29kZSwKICAgICAgICBMb2NhdGVkTWVzc2FnZSwKICAgICAgICBNZXNzYWdlLAogICAgICAgIG1lc3NhZ2VFeHBlY3RlZEJsb2NrVG9Ta2lwLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmQ7CgppbXBvcnQgJy4uL2lnbm9yZWRfcGFyc2VyX2Vycm9ycy5kYXJ0JyBzaG93IGlzSWdub3JlZFBhcnNlckVycm9yOwoKaW1wb3J0ICcuLi9rZXJuZWwvYm9keV9idWlsZGVyLmRhcnQnIHNob3cgQm9keUJ1aWxkZXI7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdyBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyLCBUeXBlQWxpYXNCdWlsZGVyLCBUeXBlQnVpbGRlcjsKCmltcG9ydCAnLi4vcGFyc2VyLmRhcnQnIHNob3cgQXNzZXJ0LCBDbGFzc0tpbmQsIE1lbWJlcktpbmQsIFBhcnNlciwgb3B0aW9uYWw7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnCiAgICBzaG93IERlYnVnQWJvcnQsIGludGVybmFsUHJvYmxlbSwgdW5leHBlY3RlZCwgdW5oYW5kbGVkOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX2luZmVyZW5jZV9lbmdpbmUuZGFydCcgc2hvdyBUeXBlSW5mZXJlbmNlRW5naW5lOwoKaW1wb3J0ICdzb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgU291cmNlTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJ3N0YWNrX2xpc3RlbmVyLmRhcnQnCiAgICBzaG93IEZpeGVkTnVsbGFibGVMaXN0LCBOdWxsVmFsdWUsIFBhcnNlclJlY292ZXJ5LCBTdGFja0xpc3RlbmVyOwoKaW1wb3J0ICcuLi9zb3VyY2UvdmFsdWVfa2luZHMuZGFydCc7CgppbXBvcnQgJy4uL3F1b3RlLmRhcnQnIHNob3cgdW5lc2NhcGVTdHJpbmc7CgpjbGFzcyBEaWV0TGlzdGVuZXIgZXh0ZW5kcyBTdGFja0xpc3RlbmVyIHsKICBmaW5hbCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5OwoKICBmaW5hbCBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHk7CgogIGZpbmFsIENvcmVUeXBlcyBjb3JlVHlwZXM7CgogIGZpbmFsIGJvb2wgZW5hYmxlTmF0aXZlOwoKICBmaW5hbCBib29sIHN0cmluZ0V4cGVjdGVkQWZ0ZXJOYXRpdmU7CgogIGZpbmFsIFR5cGVJbmZlcmVuY2VFbmdpbmUgdHlwZUluZmVyZW5jZUVuZ2luZTsKCiAgaW50IGltcG9ydEV4cG9ydERpcmVjdGl2ZUluZGV4ID0gMDsKICBpbnQgcGFydERpcmVjdGl2ZUluZGV4ID0gMDsKCiAgQ2xhc3NCdWlsZGVyIGN1cnJlbnRDbGFzczsKCiAgYm9vbCBjdXJyZW50Q2xhc3NJc1BhcnNlclJlY292ZXJ5ID0gZmFsc2U7CgogIC8vLyBDb3VudGVyIHVzZWQgZm9yIG5hbWluZyB1bm5hbWVkIGV4dGVuc2lvbiBkZWNsYXJhdGlvbnMuCiAgaW50IHVubmFtZWRFeHRlbnNpb25Db3VudGVyID0gMDsKCiAgLy8vIEZvciB0b3AtbGV2ZWwgZGVjbGFyYXRpb25zLCB0aGlzIGlzIHRoZSBsaWJyYXJ5IHNjb3BlLiBGb3IgY2xhc3MgbWVtYmVycywKICAvLy8gdGhpcyBpcyB0aGUgaW5zdGFuY2Ugc2NvcGUgb2YgW2N1cnJlbnRDbGFzc10uCiAgU2NvcGUgbWVtYmVyU2NvcGU7CgogIEBvdmVycmlkZQogIFVyaSB1cmk7CgogIERpZXRMaXN0ZW5lcihTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCB0aGlzLmhpZXJhcmNoeSwgdGhpcy5jb3JlVHlwZXMsCiAgICAgIHRoaXMudHlwZUluZmVyZW5jZUVuZ2luZSkKICAgICAgOiBsaWJyYXJ5ID0gbGlicmFyeSwKICAgICAgICB1cmkgPSBsaWJyYXJ5LmZpbGVVcmksCiAgICAgICAgbWVtYmVyU2NvcGUgPSBsaWJyYXJ5LnNjb3BlLAogICAgICAgIGVuYWJsZU5hdGl2ZSA9CiAgICAgICAgICAgIGxpYnJhcnkubG9hZGVyLnRhcmdldC5iYWNrZW5kVGFyZ2V0LmVuYWJsZU5hdGl2ZShsaWJyYXJ5LnVyaSksCiAgICAgICAgc3RyaW5nRXhwZWN0ZWRBZnRlck5hdGl2ZSA9CiAgICAgICAgICAgIGxpYnJhcnkubG9hZGVyLnRhcmdldC5iYWNrZW5kVGFyZ2V0Lm5hdGl2ZUV4dGVuc2lvbkV4cGVjdHNTdHJpbmc7CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWV0YWRhdGFTdGFyKGludCBjb3VudCkgewogICAgYXNzZXJ0KGNoZWNrU3RhdGUobnVsbCwgcmVwZWF0ZWRLaW5kcyhWYWx1ZUtpbmQuVG9rZW4sIGNvdW50KSkpOwogICAgZGVidWdFdmVudCgiTWV0YWRhdGFTdGFyIik7CiAgICBpZiAoY291bnQgPiAwKSB7CiAgICAgIGRpc2NhcmQoY291bnQgLSAxKTsKICAgICAgcHVzaChwb3AoTnVsbFZhbHVlLlRva2VuKSA/PyBOdWxsVmFsdWUuVG9rZW4pOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChOdWxsVmFsdWUuVG9rZW4pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRNZXRhZGF0YShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBwZXJpb2RCZWZvcmVOYW1lLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiTWV0YWRhdGEiKTsKICAgIGRpc2NhcmQocGVyaW9kQmVmb3JlTmFtZSA9PSBudWxsID8gMSA6IDIpOwogICAgcHVzaChiZWdpblRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kUGFydE9mKAogICAgICBUb2tlbiBwYXJ0S2V5d29yZCwgVG9rZW4gb2ZLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24sIGJvb2wgaGFzTmFtZSkgewogICAgZGVidWdFdmVudCgiUGFydE9mIik7CiAgICBpZiAoaGFzTmFtZSkgZGlzY2FyZCgxKTsKICAgIGRpc2NhcmQoMSk7IC8vIE1ldGFkYXRhLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbihUb2tlbiBiZWdpblRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbiIpOwogICAgcG9wKCk7IC8vIG1ldGFkYXRhIHN0YXIKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9Bcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vQXJndW1lbnRzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9UeXBlQXJndW1lbnRzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9UeXBlKFRva2VuIGxhc3RDb25zdW1lZCkgewogICAgZGVidWdFdmVudCgiTm9UeXBlIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVR5cGUoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gcXVlc3Rpb25NYXJrKSB7CiAgICBkZWJ1Z0V2ZW50KCJUeXBlIik7CiAgICBkaXNjYXJkKDEpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUeXBlTGlzdChpbnQgY291bnQpIHsKICAgIGRlYnVnRXZlbnQoIlR5cGVMaXN0Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hbWVkTWl4aW5BcHBsaWNhdGlvbldpdGhDbGF1c2UoVG9rZW4gd2l0aEtleXdvcmQpIHsKICAgIGRlYnVnRXZlbnQoIk5hbWVkTWl4aW5BcHBsaWNhdGlvbldpdGhDbGF1c2UiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NXaXRoQ2xhdXNlKFRva2VuIHdpdGhLZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJDbGFzc1dpdGhDbGF1c2UiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NOb1dpdGhDbGF1c2UoKSB7CiAgICBkZWJ1Z0V2ZW50KCJDbGFzc05vV2l0aENsYXVzZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUeXBlQXJndW1lbnRzKGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlR5cGVBcmd1bWVudHMiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZFR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkludmFsaWRUeXBlQXJndW1lbnRzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZpZWxkSW5pdGlhbGl6ZXIoVG9rZW4gYXNzaWdubWVudE9wZXJhdG9yLCBUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiRmllbGRJbml0aWFsaXplciIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0ZpZWxkSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vRmllbGRJbml0aWFsaXplciIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb1R5cGVWYXJpYWJsZXMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vVHlwZVZhcmlhYmxlcyIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JtYWxQYXJhbWV0ZXJzKAogICAgICBpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIGRlYnVnRXZlbnQoIkZvcm1hbFBhcmFtZXRlcnMiKTsKICAgIGFzc2VydChjb3VudCA9PSAwKTsgLy8gQ291bnQgaXMgYWx3YXlzIDAgYXMgdGhlIGRpZXQgcGFyc2VyIHNraXBzIGZvcm1hbHMuCiAgICBpZiAoa2luZCAhPSBNZW1iZXJLaW5kLkdlbmVyYWxpemVkRnVuY3Rpb25UeXBlICYmCiAgICAgICAgaWRlbnRpY2FsKHBlZWsoKSwgIi0iKSAmJgogICAgICAgIGlkZW50aWNhbChiZWdpblRva2VuLm5leHQsIGVuZFRva2VuKSkgewogICAgICBwb3AoKTsKICAgICAgcHVzaCgidW5hcnktIik7CiAgICB9CiAgICBwdXNoKGJlZ2luVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0Zvcm1hbFBhcmFtZXRlcnMoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgZGVidWdFdmVudCgiTm9Gb3JtYWxQYXJhbWV0ZXJzIik7CiAgICBpZiAoaWRlbnRpY2FsKHBlZWsoKSwgIi0iKSkgewogICAgICBwb3AoKTsKICAgICAgcHVzaCgidW5hcnktIik7CiAgICB9CiAgICBwdXNoKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25UeXBlKFRva2VuIGZ1bmN0aW9uVG9rZW4sIFRva2VuIHF1ZXN0aW9uTWFyaykgewogICAgZGVidWdFdmVudCgiRnVuY3Rpb25UeXBlIik7CiAgICBkaXNjYXJkKDEpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGdW5jdGlvblR5cGVBbGlhcygKICAgICAgVG9rZW4gdHlwZWRlZktleXdvcmQsIFRva2VuIGVxdWFscywgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZ1bmN0aW9uVHlwZUFsaWFzIik7CgogICAgaWYgKGVxdWFscyA9PSBudWxsKSBwb3AoKTsgLy8gZW5kVG9rZW4KICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBUb2tlbiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eSh0eXBlZGVmS2V5d29yZC5jaGFyT2Zmc2V0KTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSByZXR1cm47CgogICAgRGVjbGFyYXRpb24gdHlwZWRlZkJ1aWxkZXIgPSBsb29rdXBCdWlsZGVyKHR5cGVkZWZLZXl3b3JkLCBudWxsLCBuYW1lKTsKICAgIHBhcnNlTWV0YWRhdGEodHlwZWRlZkJ1aWxkZXIsIG1ldGFkYXRhLCB0eXBlZGVmQnVpbGRlci50YXJnZXQpOwogICAgaWYgKHR5cGVkZWZCdWlsZGVyIGlzIFR5cGVBbGlhc0J1aWxkZXIpIHsKICAgICAgVHlwZUJ1aWxkZXIgdHlwZSA9IHR5cGVkZWZCdWlsZGVyLnR5cGU7CiAgICAgIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgICAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMgPSB0eXBlLmZvcm1hbHM7CiAgICAgICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb3JtYWxzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsID0gZm9ybWFsc1tpXTsKICAgICAgICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gZm9ybWFsLm1ldGFkYXRhOwogICAgICAgICAgICBpZiAobWV0YWRhdGEgIT0gbnVsbCAmJiBtZXRhZGF0YS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgLy8gW3BhcnNlTWV0YWRhdGFdIGlzIHVzaW5nIFtQYXJzZXIucGFyc2VNZXRhZGF0YVN0YXJdIHVuZGVyIHRoZQogICAgICAgICAgICAgIC8vIGhvb2QsIHNvIHdlIG9ubHkgbmVlZCB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBhbm5vdGF0aW9uLgogICAgICAgICAgICAgIFRva2VuIG1ldGFkYXRhVG9rZW4gPSB0b2tlbkZvck9mZnNldCgKICAgICAgICAgICAgICAgICAgdHlwZWRlZktleXdvcmQsIGVuZFRva2VuLCBtZXRhZGF0YVswXS5jaGFyT2Zmc2V0KTsKICAgICAgICAgICAgICBMaXN0PEV4cHJlc3Npb24+IGFubm90YXRpb25zID0KICAgICAgICAgICAgICAgICAgcGFyc2VNZXRhZGF0YSh0eXBlZGVmQnVpbGRlciwgbWV0YWRhdGFUb2tlbiwgbnVsbCk7CiAgICAgICAgICAgICAgaWYgKGZvcm1hbC5pc1Bvc2l0aW9uYWwpIHsKICAgICAgICAgICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyID0KICAgICAgICAgICAgICAgICAgICB0eXBlZGVmQnVpbGRlci50YXJnZXQucG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICAgICAgICAgICAgICBmb3IgKEV4cHJlc3Npb24gYW5ub3RhdGlvbiBpbiBhbm5vdGF0aW9ucykgewogICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIuYWRkQW5ub3RhdGlvbihhbm5vdGF0aW9uKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIG5hbWVkCiAgICAgICAgICAgICAgICAgICAgaW4gdHlwZWRlZkJ1aWxkZXIudGFyZ2V0Lm5hbWVkUGFyYW1ldGVycykgewogICAgICAgICAgICAgICAgICBpZiAobmFtZWQubmFtZSA9PSBmb3JtYWwubmFtZSkgewogICAgICAgICAgICAgICAgICAgIGZvciAoRXhwcmVzc2lvbiBhbm5vdGF0aW9uIGluIGFubm90YXRpb25zKSB7CiAgICAgICAgICAgICAgICAgICAgICBuYW1lZC5hZGRBbm5vdGF0aW9uKGFubm90YXRpb24pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmICh0eXBlZGVmQnVpbGRlciAhPSBudWxsKSB7CiAgICAgIHVuaGFuZGxlZCgiJHt0eXBlZGVmQnVpbGRlci5mdWxsTmFtZUZvckVycm9yc30iLCAiZW5kRnVuY3Rpb25UeXBlQWxpYXMiLAogICAgICAgICAgdHlwZWRlZktleXdvcmQuY2hhck9mZnNldCwgdXJpKTsKICAgIH0KCiAgICBjaGVja0VtcHR5KHR5cGVkZWZLZXl3b3JkLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGaWVsZHMoVG9rZW4gc3RhdGljVG9rZW4sIFRva2VuIGNvdmFyaWFudFRva2VuLCBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiRmllbGRzIik7CiAgICBidWlsZEZpZWxkcyhjb3VudCwgYmVnaW5Ub2tlbiwgZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVBc3luY01vZGlmaWVyKFRva2VuIGFzeW5jVG9rZW4sIFRva2VuIHN0YXJ0VG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkFzeW5jTW9kaWZpZXIiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVG9wTGV2ZWxNZXRob2QoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZ2V0T3JTZXQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJUb3BMZXZlbE1ldGhvZCIpOwogICAgVG9rZW4gYm9keVRva2VuID0gcG9wKCk7CiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgVG9rZW4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGNoZWNrRW1wdHkoYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0KTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSByZXR1cm47CgogICAgZmluYWwgU3RhY2tMaXN0ZW5lciBsaXN0ZW5lciA9CiAgICAgICAgY3JlYXRlRnVuY3Rpb25MaXN0ZW5lcihsb29rdXBCdWlsZGVyKGJlZ2luVG9rZW4sIGdldE9yU2V0LCBuYW1lKSk7CiAgICBidWlsZEZ1bmN0aW9uQm9keShsaXN0ZW5lciwgYm9keVRva2VuLCBtZXRhZGF0YSwgTWVtYmVyS2luZC5Ub3BMZXZlbE1ldGhvZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vRnVuY3Rpb25Cb2R5KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb0Z1bmN0aW9uQm9keSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUb3BMZXZlbEZpZWxkcygKICAgICAgVG9rZW4gc3RhdGljVG9rZW4sCiAgICAgIFRva2VuIGNvdmFyaWFudFRva2VuLAogICAgICBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwKICAgICAgaW50IGNvdW50LAogICAgICBUb2tlbiBiZWdpblRva2VuLAogICAgICBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiVG9wTGV2ZWxGaWVsZHMiKTsKICAgIGJ1aWxkRmllbGRzKGNvdW50LCBiZWdpblRva2VuLCB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVm9pZEtleXdvcmQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlZvaWRLZXl3b3JkIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vSW5pdGlhbGl6ZXJzKCkgewogICAgZGVidWdFdmVudCgiTm9Jbml0aWFsaXplcnMiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW5pdGlhbGl6ZXJzKGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkluaXRpYWxpemVycyIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVRdWFsaWZpZWQoVG9rZW4gcGVyaW9kKSB7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVRdWFsaWZpZWQiKTsKICAgIE9iamVjdCBzdWZmaXggPSBwb3AoKTsKICAgIE9iamVjdCBwcmVmaXggPSBwb3AoKTsKICAgIGlmIChwcmVmaXggaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChwcmVmaXgpOwogICAgfSBlbHNlIGlmIChzdWZmaXggaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChzdWZmaXgpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGlkZW50aWNhbChzdWZmaXgsIHBlcmlvZC5uZXh0LmxleGVtZSkpOwogICAgICBwdXNoKG5ldyBRdWFsaWZpZWROYW1lKHByZWZpeCwgcGVyaW9kLm5leHQpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTGlicmFyeU5hbWUoVG9rZW4gbGlicmFyeUtleXdvcmQsIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiZW5kTGlicmFyeU5hbWUiKTsKICAgIHBvcCgpOyAvLyBOYW1lLgogICAgcG9wKCk7IC8vIEFubm90YXRpb25zLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkxpdGVyYWxTdHJpbmcoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luTGl0ZXJhbFN0cmluZyIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTdHJpbmdQYXJ0KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJTdHJpbmdQYXJ0Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZExpdGVyYWxTdHJpbmcoaW50IGludGVycG9sYXRpb25Db3VudCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZExpdGVyYWxTdHJpbmciKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmF0aXZlQ2xhdXNlKFRva2VuIG5hdGl2ZVRva2VuLCBib29sIGhhc05hbWUpIHsKICAgIGRlYnVnRXZlbnQoIk5hdGl2ZUNsYXVzZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTY3JpcHQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlNjcmlwdCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTdHJpbmdKdXh0YXBvc2l0aW9uKGludCBsaXRlcmFsQ291bnQpIHsKICAgIGRlYnVnRXZlbnQoIlN0cmluZ0p1eHRhcG9zaXRpb24iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRG90dGVkTmFtZShpbnQgY291bnQsIFRva2VuIGZpcnN0SWRlbnRpZmllcikgewogICAgZGVidWdFdmVudCgiRG90dGVkTmFtZSIpOwogICAgZGlzY2FyZChjb3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbmRpdGlvbmFsVXJpKFRva2VuIGlmS2V5d29yZCwgVG9rZW4gbGVmdFBhcmVuLCBUb2tlbiBlcXVhbFNpZ24pIHsKICAgIGRlYnVnRXZlbnQoIkNvbmRpdGlvbmFsVXJpIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbmRpdGlvbmFsVXJpcyhpbnQgY291bnQpIHsKICAgIGRlYnVnRXZlbnQoIkNvbmRpdGlvbmFsVXJpcyIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVPcGVyYXRvck5hbWUoVG9rZW4gb3BlcmF0b3JLZXl3b3JkLCBUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiT3BlcmF0b3JOYW1lIik7CiAgICBwdXNoKHRva2VuLnN0cmluZ1ZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZE9wZXJhdG9yTmFtZShUb2tlbiBvcGVyYXRvcktleXdvcmQsIFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJJbnZhbGlkT3BlcmF0b3JOYW1lIik7CiAgICBwdXNoKCdpbnZhbGlkJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUlkZW50aWZpZXJMaXN0KGludCBjb3VudCkgewogICAgZGVidWdFdmVudCgiSWRlbnRpZmllckxpc3QiKTsKICAgIGRpc2NhcmQoY291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRTaG93KFRva2VuIHNob3dLZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJTaG93Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEhpZGUoVG9rZW4gaGlkZUtleXdvcmQpIHsKICAgIGRlYnVnRXZlbnQoIkhpZGUiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29tYmluYXRvcnMoaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJDb21iaW5hdG9ycyIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbXBvcnRQcmVmaXgoVG9rZW4gZGVmZXJyZWRLZXl3b3JkLCBUb2tlbiBhc0tleXdvcmQpIHsKICAgIGRlYnVnRXZlbnQoIkltcG9ydFByZWZpeCIpOwogICAgcHVzaElmTnVsbChhc0tleXdvcmQsIE51bGxWYWx1ZS5QcmVmaXgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJbXBvcnQoVG9rZW4gaW1wb3J0S2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJJbXBvcnQiKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKE51bGxWYWx1ZS5QcmVmaXgpOwoKICAgIFRva2VuIG1ldGFkYXRhID0gcG9wKCk7CiAgICBjaGVja0VtcHR5KGltcG9ydEtleXdvcmQuY2hhck9mZnNldCk7CiAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgcmV0dXJuOwoKICAgIC8vIE5hdGl2ZSBpbXBvcnRzIG11c3QgYmUgc2tpcHBlZCBiZWNhdXNlIHRoZXkgYXJlbid0IGFzc2lnbmVkIGNvcnJlc3BvbmRpbmcKICAgIC8vIExpYnJhcnlEZXBlbmRlbmN5IG5vZGVzLgogICAgVG9rZW4gaW1wb3J0VXJpVG9rZW4gPSBpbXBvcnRLZXl3b3JkLm5leHQ7CiAgICBTdHJpbmcgaW1wb3J0VXJpID0KICAgICAgICB1bmVzY2FwZVN0cmluZyhpbXBvcnRVcmlUb2tlbi5sZXhlbWUsIGltcG9ydFVyaVRva2VuLCB0aGlzKTsKICAgIGlmIChpbXBvcnRVcmkuc3RhcnRzV2l0aCgiZGFydC1leHQ6IikpIHJldHVybjsKCiAgICBMaWJyYXJ5IGxpYnJhcnlOb2RlID0gbGlicmFyeS50YXJnZXQ7CiAgICBMaWJyYXJ5RGVwZW5kZW5jeSBkZXBlbmRlbmN5ID0KICAgICAgICBsaWJyYXJ5Tm9kZS5kZXBlbmRlbmNpZXNbaW1wb3J0RXhwb3J0RGlyZWN0aXZlSW5kZXgrK107CiAgICBwYXJzZU1ldGFkYXRhKGxpYnJhcnksIG1ldGFkYXRhLCBkZXBlbmRlbmN5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUmVjb3ZlckltcG9ydChUb2tlbiBzZW1pY29sb24pIHsKICAgIHBvcChOdWxsVmFsdWUuUHJlZml4KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRXhwb3J0KFRva2VuIGV4cG9ydEtleXdvcmQsIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiRXhwb3J0Iik7CgogICAgVG9rZW4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIExpYnJhcnkgbGlicmFyeU5vZGUgPSBsaWJyYXJ5LnRhcmdldDsKICAgIExpYnJhcnlEZXBlbmRlbmN5IGRlcGVuZGVuY3kgPQogICAgICAgIGxpYnJhcnlOb2RlLmRlcGVuZGVuY2llc1tpbXBvcnRFeHBvcnREaXJlY3RpdmVJbmRleCsrXTsKICAgIHBhcnNlTWV0YWRhdGEobGlicmFyeSwgbWV0YWRhdGEsIGRlcGVuZGVuY3kpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRQYXJ0KFRva2VuIHBhcnRLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIlBhcnQiKTsKCiAgICBUb2tlbiBtZXRhZGF0YSA9IHBvcCgpOwogICAgTGlicmFyeSBsaWJyYXJ5Tm9kZSA9IGxpYnJhcnkudGFyZ2V0OwogICAgaWYgKGxpYnJhcnlOb2RlLnBhcnRzLmxlbmd0aCA+IHBhcnREaXJlY3RpdmVJbmRleCkgewogICAgICAvLyBJZiBwYXJ0RGlyZWN0aXZlSW5kZXggPj0gbGlicmFyeU5vZGUucGFydHMubGVuZ3RoIHdlIGFyZSBpbiBhIGNhc2Ugb2YKICAgICAgLy8gb24gcGFydCBoYXZpbmcgb3RoZXIgcGFydHMuIEFuIGVycm9yIGhhcyBhbHJlYWR5IGJlZW4gaXNzdWVkLgogICAgICAvLyBEb24ndCB0cnkgdG8gcGFyc2UgbWV0YWRhdGEgaW50byBvdGhlciBwYXJ0cyB0aGF0IGhhdmUgbm90aGluZyB0byBkbwogICAgICAvLyB3aXRoIHRoZSBvbmUgdGhpcyBrZXl3b3JkIGlzIHRhbGtpbmcgYWJvdXQuCiAgICAgIExpYnJhcnlQYXJ0IHBhcnQgPSBsaWJyYXJ5Tm9kZS5wYXJ0c1twYXJ0RGlyZWN0aXZlSW5kZXgrK107CiAgICAgIHBhcnNlTWV0YWRhdGEobGlicmFyeSwgbWV0YWRhdGEsIHBhcnQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblR5cGVWYXJpYWJsZShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5UeXBlVmFyaWFibGUiKTsKICAgIGRpc2NhcmQoMik7IC8vIE5hbWUgYW5kIG1ldGFkYXRhLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUeXBlVmFyaWFibGUoVG9rZW4gdG9rZW4sIGludCBpbmRleCwgVG9rZW4gZXh0ZW5kc09yU3VwZXIpIHsKICAgIGRlYnVnRXZlbnQoImVuZFR5cGVWYXJpYWJsZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUeXBlVmFyaWFibGVzKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJUeXBlVmFyaWFibGVzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbnN0cnVjdG9yUmVmZXJlbmNlKAogICAgICBUb2tlbiBzdGFydCwgVG9rZW4gcGVyaW9kQmVmb3JlTmFtZSwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkNvbnN0cnVjdG9yUmVmZXJlbmNlIik7CiAgICBwb3BJZk5vdE51bGwocGVyaW9kQmVmb3JlTmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZhY3RvcnlNZXRob2QoCiAgICAgIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGZhY3RvcnlLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiRmFjdG9yeU1ldGhvZCIpOwogICAgVG9rZW4gYm9keVRva2VuID0gcG9wKCk7CiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgVG9rZW4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGNoZWNrRW1wdHkoYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0KTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5IHx8IGN1cnJlbnRDbGFzc0lzUGFyc2VyUmVjb3ZlcnkpIHJldHVybjsKCiAgICBGdW5jdGlvbkJ1aWxkZXIgYnVpbGRlciA9IGxvb2t1cENvbnN0cnVjdG9yKGJlZ2luVG9rZW4sIG5hbWUpOwogICAgaWYgKGJvZHlUb2tlbiA9PSBudWxsIHx8IG9wdGlvbmFsKCI9IiwgYm9keVRva2VuLmVuZEdyb3VwLm5leHQpKSB7CiAgICAgIGJ1aWxkUmVkaXJlY3RpbmdGYWN0b3J5TWV0aG9kKAogICAgICAgICAgYm9keVRva2VuLCBidWlsZGVyLCBNZW1iZXJLaW5kLkZhY3RvcnksIG1ldGFkYXRhKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1aWxkRnVuY3Rpb25Cb2R5KGNyZWF0ZUZ1bmN0aW9uTGlzdGVuZXIoYnVpbGRlciksIGJvZHlUb2tlbiwgbWV0YWRhdGEsCiAgICAgICAgICBNZW1iZXJLaW5kLkZhY3RvcnkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5Iik7CiAgICBkaXNjYXJkKDEpOyAvLyBDb25zdHJ1Y3RvclJlZmVyZW5jZS4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5KFRva2VuIG5hdGl2ZVRva2VuLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIk5hdGl2ZUZ1bmN0aW9uQm9keSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlJZ25vcmVkKFRva2VuIG5hdGl2ZVRva2VuLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIk5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWQiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5U2tpcHBlZChUb2tlbiBuYXRpdmVUb2tlbiwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYXRpdmVGdW5jdGlvbkJvZHlTa2lwcGVkIik7CiAgICBpZiAoIWVuYWJsZU5hdGl2ZSkgewogICAgICBzdXBlci5oYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgbWVzc2FnZUV4cGVjdGVkQmxvY2tUb1NraXAsIG5hdGl2ZVRva2VuLCBuYXRpdmVUb2tlbik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE1ldGhvZChUb2tlbiBnZXRPclNldCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gYmVnaW5QYXJhbSwKICAgICAgVG9rZW4gYmVnaW5Jbml0aWFsaXplcnMsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJNZXRob2QiKTsKICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciByZW1vdmluZyB0aGUgYmVnaW5QYXJhbSBwYXJhbWV0ZXIKICAgIC8vIGFuZCB1c2luZyBib2R5VG9rZW4sIGJ1dCBwdXNoaW5nIGEgTnVsbFZhbHVlIG9uIHRoZSBzdGFjawogICAgLy8gaW4gaGFuZGxlTm9Gb3JtYWxQYXJhbWV0ZXJzIHJhdGhlciB0aGFuIHRoZSBzdXBwbGllZCB0b2tlbi4KICAgIHBvcCgpOyAvLyBib2R5VG9rZW4KICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBUb2tlbiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eShiZWdpblRva2VuLmNoYXJPZmZzZXQpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkgfHwgY3VycmVudENsYXNzSXNQYXJzZXJSZWNvdmVyeSkgcmV0dXJuOwogICAgRnVuY3Rpb25CdWlsZGVyIGJ1aWxkZXI7CiAgICBpZiAobmFtZSBpcyBRdWFsaWZpZWROYW1lIHx8CiAgICAgICAgKGdldE9yU2V0ID09IG51bGwgJiYgbmFtZSA9PSBjdXJyZW50Q2xhc3MubmFtZSkpIHsKICAgICAgYnVpbGRlciA9IGxvb2t1cENvbnN0cnVjdG9yKGJlZ2luVG9rZW4sIG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgYnVpbGRlciA9IGxvb2t1cEJ1aWxkZXIoYmVnaW5Ub2tlbiwgZ2V0T3JTZXQsIG5hbWUpOwogICAgfQogICAgYnVpbGRGdW5jdGlvbkJvZHkoCiAgICAgICAgY3JlYXRlRnVuY3Rpb25MaXN0ZW5lcihidWlsZGVyKSwKICAgICAgICBiZWdpblBhcmFtLAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIGJ1aWxkZXIuaXNTdGF0aWMKICAgICAgICAgICAgPyBNZW1iZXJLaW5kLlN0YXRpY01ldGhvZAogICAgICAgICAgICA6IE1lbWJlcktpbmQuTm9uU3RhdGljTWV0aG9kKTsKICB9CgogIFN0YWNrTGlzdGVuZXIgY3JlYXRlTGlzdGVuZXIoCiAgICAgIE1vZGlmaWVyQnVpbGRlciBidWlsZGVyLCBTY29wZSBtZW1iZXJTY29wZSwgYm9vbCBpc0luc3RhbmNlTWVtYmVyLAogICAgICB7VmFyaWFibGVEZWNsYXJhdGlvbiBleHRlbnNpb25UaGlzLCBTY29wZSBmb3JtYWxQYXJhbWV0ZXJTY29wZX0pIHsKICAgIC8vIE5vdGU6IHdlIHNldCB0aGlzVHlwZSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIGEgc3RhdGljCiAgICAvLyBtZW1iZXIsIHNpbmNlIHRoYXQgcHJvdmlkZXMgYmV0dGVyIGVycm9yIHJlY292ZXJ5LgogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUHJvdmlkZSBhIGR1bW15IHRoaXMgb24gc3RhdGljIGV4dGVuc2lvbiBtZXRob2RzCiAgICAvLyBmb3IgYmV0dGVyIGVycm9yIHJlY292ZXJ5PwogICAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSA9CiAgICAgICAgZXh0ZW5zaW9uVGhpcyA9PSBudWxsID8gY3VycmVudENsYXNzPy50YXJnZXQ/LnRoaXNUeXBlIDogbnVsbDsKICAgIHZhciB0eXBlSW5mZXJyZXIgPQogICAgICAgIHR5cGVJbmZlcmVuY2VFbmdpbmU/LmNyZWF0ZUxvY2FsVHlwZUluZmVycmVyKHVyaSwgdGhpc1R5cGUsIGxpYnJhcnkpOwogICAgQ29uc3RhbnRDb250ZXh0IGNvbnN0YW50Q29udGV4dCA9IGJ1aWxkZXIuaXNDb25zdHJ1Y3RvciAmJiBidWlsZGVyLmlzQ29uc3QKICAgICAgICA/IENvbnN0YW50Q29udGV4dC5pbmZlcnJlZAogICAgICAgIDogQ29uc3RhbnRDb250ZXh0Lm5vbmU7CiAgICByZXR1cm4gbmV3IEJvZHlCdWlsZGVyKAogICAgICAgIGxpYnJhcnksCiAgICAgICAgYnVpbGRlciwKICAgICAgICBtZW1iZXJTY29wZSwKICAgICAgICBmb3JtYWxQYXJhbWV0ZXJTY29wZSwKICAgICAgICBoaWVyYXJjaHksCiAgICAgICAgY29yZVR5cGVzLAogICAgICAgIGN1cnJlbnRDbGFzcywKICAgICAgICBpc0luc3RhbmNlTWVtYmVyLAogICAgICAgIGV4dGVuc2lvblRoaXMsCiAgICAgICAgdXJpLAogICAgICAgIHR5cGVJbmZlcnJlcikKICAgICAgLi5jb25zdGFudENvbnRleHQgPSBjb25zdGFudENvbnRleHQ7CiAgfQoKICBTdGFja0xpc3RlbmVyIGNyZWF0ZUZ1bmN0aW9uTGlzdGVuZXIoRnVuY3Rpb25CdWlsZGVyIGJ1aWxkZXIpIHsKICAgIGZpbmFsIFNjb3BlIHR5cGVQYXJhbWV0ZXJTY29wZSA9CiAgICAgICAgYnVpbGRlci5jb21wdXRlVHlwZVBhcmFtZXRlclNjb3BlKG1lbWJlclNjb3BlKTsKICAgIGZpbmFsIFNjb3BlIGZvcm1hbFBhcmFtZXRlclNjb3BlID0KICAgICAgICBidWlsZGVyLmNvbXB1dGVGb3JtYWxQYXJhbWV0ZXJTY29wZSh0eXBlUGFyYW1ldGVyU2NvcGUpOwogICAgYXNzZXJ0KHR5cGVQYXJhbWV0ZXJTY29wZSAhPSBudWxsKTsKICAgIGFzc2VydChmb3JtYWxQYXJhbWV0ZXJTY29wZSAhPSBudWxsKTsKICAgIHJldHVybiBjcmVhdGVMaXN0ZW5lcihidWlsZGVyLCB0eXBlUGFyYW1ldGVyU2NvcGUsIGJ1aWxkZXIuaXNJbnN0YW5jZU1lbWJlciwKICAgICAgICBleHRlbnNpb25UaGlzOiBidWlsZGVyLmV4dGVuc2lvblRoaXMsCiAgICAgICAgZm9ybWFsUGFyYW1ldGVyU2NvcGU6IGZvcm1hbFBhcmFtZXRlclNjb3BlKTsKICB9CgogIHZvaWQgYnVpbGRSZWRpcmVjdGluZ0ZhY3RvcnlNZXRob2QoCiAgICAgIFRva2VuIHRva2VuLCBGdW5jdGlvbkJ1aWxkZXIgYnVpbGRlciwgTWVtYmVyS2luZCBraW5kLCBUb2tlbiBtZXRhZGF0YSkgewogICAgZmluYWwgU3RhY2tMaXN0ZW5lciBsaXN0ZW5lciA9IGNyZWF0ZUZ1bmN0aW9uTGlzdGVuZXIoYnVpbGRlcik7CiAgICB0cnkgewogICAgICBQYXJzZXIgcGFyc2VyID0gbmV3IFBhcnNlcihsaXN0ZW5lcik7CiAgICAgIGlmIChtZXRhZGF0YSAhPSBudWxsKSB7CiAgICAgICAgcGFyc2VyLnBhcnNlTWV0YWRhdGFTdGFyKHBhcnNlci5zeW50aGV0aWNQcmV2aW91c1Rva2VuKG1ldGFkYXRhKSk7CiAgICAgICAgbGlzdGVuZXIucG9wKCk7IC8vIFBvcHMgbWV0YWRhdGEgY29uc3RhbnRzLgogICAgICB9CgogICAgICB0b2tlbiA9IHBhcnNlci5wYXJzZUZvcm1hbFBhcmFtZXRlcnNPcHQoCiAgICAgICAgICBwYXJzZXIuc3ludGhldGljUHJldmlvdXNUb2tlbih0b2tlbiksIE1lbWJlcktpbmQuRmFjdG9yeSk7CiAgICAgIGxpc3RlbmVyLnBvcCgpOyAvLyBQb3BzIGZvcm1hbCBwYXJhbWV0ZXJzLgogICAgICBsaXN0ZW5lci5jaGVja0VtcHR5KHRva2VuLm5leHQuY2hhck9mZnNldCk7CiAgICB9IG9uIERlYnVnQWJvcnQgewogICAgICByZXRocm93OwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICB0aHJvdyBuZXcgQ3Jhc2godXJpLCB0b2tlbi5jaGFyT2Zmc2V0LCBlLCBzKTsKICAgIH0KICB9CgogIHZvaWQgYnVpbGRGaWVsZHMoaW50IGNvdW50LCBUb2tlbiB0b2tlbiwgYm9vbCBpc1RvcExldmVsKSB7CiAgICBMaXN0PFN0cmluZz4gbmFtZXMgPSBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxTdHJpbmc+KCkucG9wKHN0YWNrLCBjb3VudCk7CiAgICBUb2tlbiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eSh0b2tlbi5jaGFyT2Zmc2V0KTsKICAgIGlmIChuYW1lcyA9PSBudWxsIHx8IGN1cnJlbnRDbGFzc0lzUGFyc2VyUmVjb3ZlcnkpIHJldHVybjsKCiAgICBEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiA9IGxvb2t1cEJ1aWxkZXIodG9rZW4sIG51bGwsIG5hbWVzLmZpcnN0KTsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogZG9uJ3QgcmUtcGFyc2UgdGhlIGZpZWxkIGlmIHdlJ3ZlIGFscmVhZHkgcGFyc2VkIGl0CiAgICAvLyBmb3IgdHlwZSBpbmZlcmVuY2UuCiAgICBwYXJzZUZpZWxkcygKICAgICAgICBjcmVhdGVMaXN0ZW5lcihkZWNsYXJhdGlvbiwgbWVtYmVyU2NvcGUsIGRlY2xhcmF0aW9uLmlzSW5zdGFuY2VNZW1iZXIpLAogICAgICAgIHRva2VuLAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIGlzVG9wTGV2ZWwpOwogICAgY2hlY2tFbXB0eSh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZE1lbWJlcihUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiSW52YWxpZE1lbWJlciIpOwogICAgcG9wKCk7IC8vIG1ldGFkYXRhIHN0YXIKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWVtYmVyKCkgewogICAgZGVidWdFdmVudCgiTWVtYmVyIik7CiAgICBjaGVja0VtcHR5KC0xKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQXNzZXJ0KFRva2VuIGFzc2VydEtleXdvcmQsIEFzc2VydCBraW5kLCBUb2tlbiBsZWZ0UGFyZW50aGVzaXMsCiAgICAgIFRva2VuIGNvbW1hVG9rZW4sIFRva2VuIHNlbWljb2xvblRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJBc3NlcnQiKTsKICAgIC8vIERvIG5vdGhpbmcKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5DbGFzc09yTWl4aW5Cb2R5KENsYXNzS2luZCBraW5kLCBUb2tlbiB0b2tlbikgewogICAgYXNzZXJ0KGNoZWNrU3RhdGUodG9rZW4sIFsKICAgICAgVmFsdWVLaW5kLlRva2VuLAogICAgICBWYWx1ZUtpbmQuTmFtZU9yUGFyc2VyUmVjb3ZlcnksCiAgICAgIFZhbHVlS2luZC5Ub2tlbk9yTnVsbAogICAgXSkpOwogICAgZGVidWdFdmVudCgiYmVnaW5DbGFzc09yTWl4aW5Cb2R5Iik7CiAgICBUb2tlbiBiZWdpblRva2VuID0gcG9wKCk7CiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgcG9wKCk7IC8vIEFubm90YXRpb24gYmVnaW4gdG9rZW4uCiAgICBhc3NlcnQoY3VycmVudENsYXNzID09IG51bGwpOwogICAgYXNzZXJ0KG1lbWJlclNjb3BlID09IGxpYnJhcnkuc2NvcGUpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgY3VycmVudENsYXNzSXNQYXJzZXJSZWNvdmVyeSA9IHRydWU7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGN1cnJlbnRDbGFzcyA9IGxvb2t1cEJ1aWxkZXIoYmVnaW5Ub2tlbiwgbnVsbCwgbmFtZSk7CiAgICBtZW1iZXJTY29wZSA9IGN1cnJlbnRDbGFzcy5zY29wZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2xhc3NPck1peGluQm9keSgKICAgICAgQ2xhc3NLaW5kIGtpbmQsIGludCBtZW1iZXJDb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkNsYXNzT3JNaXhpbkJvZHkiKTsKICAgIGN1cnJlbnRDbGFzcyA9IG51bGw7CiAgICBjdXJyZW50Q2xhc3NJc1BhcnNlclJlY292ZXJ5ID0gZmFsc2U7CiAgICBtZW1iZXJTY29wZSA9IGxpYnJhcnkuc2NvcGU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2xhc3NEZWNsYXJhdGlvbihUb2tlbiBiZWdpbiwgVG9rZW4gYWJzdHJhY3RUb2tlbiwgVG9rZW4gbmFtZSkgewogICAgZGVidWdFdmVudCgiYmVnaW5DbGFzc0RlY2xhcmF0aW9uIik7CiAgICBwdXNoKGJlZ2luKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2xhc3NEZWNsYXJhdGlvbihUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiZW5kQ2xhc3NEZWNsYXJhdGlvbiIpOwogICAgY2hlY2tFbXB0eShiZWdpblRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk1peGluRGVjbGFyYXRpb24oVG9rZW4gbWl4aW5LZXl3b3JkLCBUb2tlbiBuYW1lKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbk1peGluRGVjbGFyYXRpb24iKTsKICAgIHB1c2gobWl4aW5LZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWl4aW5EZWNsYXJhdGlvbihUb2tlbiBtaXhpbktleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRNaXhpbkRlY2xhcmF0aW9uIik7CiAgICBjaGVja0VtcHR5KG1peGluS2V5d29yZC5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5FeHRlbnNpb25EZWNsYXJhdGlvbihUb2tlbiBleHRlbnNpb25LZXl3b3JkLCBUb2tlbiBuYW1lVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luRXh0ZW5zaW9uRGVjbGFyYXRpb24iKTsKICAgIFN0cmluZyBuYW1lID0gbmFtZVRva2VuPy5sZXhlbWUgPz8KICAgICAgICAvLyBTeW50aGVzaXplZCBuYW1lIHVzZWQgaW50ZXJuYWxseS4KICAgICAgICAnZXh0ZW5zaW9uIyR7dW5uYW1lZEV4dGVuc2lvbkNvdW50ZXIrK30nOwogICAgcHVzaChuYW1lKTsKICAgIHB1c2goZXh0ZW5zaW9uS2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEV4dGVuc2lvbkRlY2xhcmF0aW9uKAogICAgICBUb2tlbiBleHRlbnNpb25LZXl3b3JkLCBUb2tlbiBvbktleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRFeHRlbnNpb25EZWNsYXJhdGlvbiIpOwogICAgY2hlY2tFbXB0eShleHRlbnNpb25LZXl3b3JkLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRFbnVtKFRva2VuIGVudW1LZXl3b3JkLCBUb2tlbiBsZWZ0QnJhY2UsIGludCBjb3VudCkgewogICAgZGVidWdFdmVudCgiRW51bSIpOwogICAgY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8T2JqZWN0PigpLnBvcChzdGFjaywgY291bnQgKiAyKTsKICAgIHBvcCgpOyAvLyBOYW1lLgogICAgcG9wKCk7IC8vIEFubm90YXRpb25zIGJlZ2luIHRva2VuLgogICAgY2hlY2tFbXB0eShlbnVtS2V5d29yZC5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTmFtZWRNaXhpbkFwcGxpY2F0aW9uKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGNsYXNzS2V5d29yZCwKICAgICAgVG9rZW4gZXF1YWxzLCBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5hbWVkTWl4aW5BcHBsaWNhdGlvbiIpOwoKICAgIHBvcCgpOyAvLyBOYW1lLgogICAgcG9wKCk7IC8vIEFubm90YXRpb25zIGJlZ2luIHRva2VuLgogICAgY2hlY2tFbXB0eShiZWdpblRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQXN5bmNNYXJrZXIgZ2V0QXN5bmNNYXJrZXIoU3RhY2tMaXN0ZW5lciBsaXN0ZW5lcikgPT4gbGlzdGVuZXIucG9wKCk7CgogIC8vLyBJbnZva2VzIHRoZSBsaXN0ZW5lcidzIFtmaW5pc2hGdW5jdGlvbl0gbWV0aG9kLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgc2VwYXJhdGUgbWV0aG9kIHNvIHRoYXQgaXQgbWF5IGJlIG92ZXJyaWRkZW4gYnkgYSBkZXJpdmVkIGNsYXNzCiAgLy8vIGlmIG1vcmUgY29tcHV0YXRpb24gbXVzdCBiZSBkb25lIGJlZm9yZSBmaW5pc2hpbmcgdGhlIGZ1bmN0aW9uLgogIHZvaWQgbGlzdGVuZXJGaW5pc2hGdW5jdGlvbigKICAgICAgU3RhY2tMaXN0ZW5lciBsaXN0ZW5lciwKICAgICAgVG9rZW4gdG9rZW4sCiAgICAgIE1lbWJlcktpbmQga2luZCwKICAgICAgZHluYW1pYyBmb3JtYWxzLAogICAgICBBc3luY01hcmtlciBhc3luY01vZGlmaWVyLAogICAgICBkeW5hbWljIGJvZHkpIHsKICAgIGxpc3RlbmVyLmZpbmlzaEZ1bmN0aW9uKGZvcm1hbHMsIGFzeW5jTW9kaWZpZXIsIGJvZHkpOwogIH0KCiAgLy8vIEludm9rZXMgdGhlIGxpc3RlbmVyJ3MgW2ZpbmlzaEZpZWxkc10gbWV0aG9kLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgc2VwYXJhdGUgbWV0aG9kIHNvIHRoYXQgaXQgbWF5IGJlIG92ZXJyaWRkZW4gYnkgYSBkZXJpdmVkIGNsYXNzCiAgLy8vIGlmIG1vcmUgY29tcHV0YXRpb24gbXVzdCBiZSBkb25lIGJlZm9yZSBmaW5pc2hpbmcgdGhlIGZ1bmN0aW9uLgogIHZvaWQgbGlzdGVuZXJGaW5pc2hGaWVsZHMoU3RhY2tMaXN0ZW5lciBsaXN0ZW5lciwgVG9rZW4gc3RhcnRUb2tlbiwKICAgICAgVG9rZW4gbWV0YWRhdGEsIGJvb2wgaXNUb3BMZXZlbCkgewogICAgbGlzdGVuZXIuZmluaXNoRmllbGRzKCk7CiAgfQoKICB2b2lkIGJ1aWxkRnVuY3Rpb25Cb2R5KFN0YWNrTGlzdGVuZXIgbGlzdGVuZXIsIFRva2VuIHN0YXJ0VG9rZW4sCiAgICAgIFRva2VuIG1ldGFkYXRhLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIFRva2VuIHRva2VuID0gc3RhcnRUb2tlbjsKICAgIHRyeSB7CiAgICAgIFBhcnNlciBwYXJzZXIgPSBuZXcgUGFyc2VyKGxpc3RlbmVyKTsKICAgICAgaWYgKG1ldGFkYXRhICE9IG51bGwpIHsKICAgICAgICBwYXJzZXIucGFyc2VNZXRhZGF0YVN0YXIocGFyc2VyLnN5bnRoZXRpY1ByZXZpb3VzVG9rZW4obWV0YWRhdGEpKTsKICAgICAgICBsaXN0ZW5lci5wb3AoKTsgLy8gQW5ub3RhdGlvbnMuCiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZXIucGFyc2VGb3JtYWxQYXJhbWV0ZXJzT3B0KAogICAgICAgICAgcGFyc2VyLnN5bnRoZXRpY1ByZXZpb3VzVG9rZW4odG9rZW4pLCBraW5kKTsKICAgICAgdmFyIGZvcm1hbHMgPSBsaXN0ZW5lci5wb3AoKTsKICAgICAgbGlzdGVuZXIuY2hlY2tFbXB0eSh0b2tlbi5uZXh0LmNoYXJPZmZzZXQpOwogICAgICB0b2tlbiA9IHBhcnNlci5wYXJzZUluaXRpYWxpemVyc09wdCh0b2tlbik7CiAgICAgIHRva2VuID0gcGFyc2VyLnBhcnNlQXN5bmNNb2RpZmllck9wdCh0b2tlbik7CiAgICAgIEFzeW5jTWFya2VyIGFzeW5jTW9kaWZpZXIgPSBnZXRBc3luY01hcmtlcihsaXN0ZW5lcikgPz8gQXN5bmNNYXJrZXIuU3luYzsKICAgICAgYm9vbCBpc0V4cHJlc3Npb24gPSBmYWxzZTsKICAgICAgYm9vbCBhbGxvd0Fic3RyYWN0ID0gYXN5bmNNb2RpZmllciA9PSBBc3luY01hcmtlci5TeW5jOwogICAgICBwYXJzZXIucGFyc2VGdW5jdGlvbkJvZHkodG9rZW4sIGlzRXhwcmVzc2lvbiwgYWxsb3dBYnN0cmFjdCk7CiAgICAgIHZhciBib2R5ID0gbGlzdGVuZXIucG9wKCk7CiAgICAgIGxpc3RlbmVyLmNoZWNrRW1wdHkodG9rZW4uY2hhck9mZnNldCk7CiAgICAgIGxpc3RlbmVyRmluaXNoRnVuY3Rpb24oCiAgICAgICAgICBsaXN0ZW5lciwgc3RhcnRUb2tlbiwga2luZCwgZm9ybWFscywgYXN5bmNNb2RpZmllciwgYm9keSk7CiAgICB9IG9uIERlYnVnQWJvcnQgewogICAgICByZXRocm93OwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICB0aHJvdyBuZXcgQ3Jhc2godXJpLCB0b2tlbi5jaGFyT2Zmc2V0LCBlLCBzKTsKICAgIH0KICB9CgogIHZvaWQgcGFyc2VGaWVsZHMoU3RhY2tMaXN0ZW5lciBsaXN0ZW5lciwgVG9rZW4gc3RhcnRUb2tlbiwgVG9rZW4gbWV0YWRhdGEsCiAgICAgIGJvb2wgaXNUb3BMZXZlbCkgewogICAgVG9rZW4gdG9rZW4gPSBzdGFydFRva2VuOwogICAgUGFyc2VyIHBhcnNlciA9IG5ldyBQYXJzZXIobGlzdGVuZXIpOwogICAgaWYgKGlzVG9wTGV2ZWwpIHsKICAgICAgdG9rZW4gPSBwYXJzZXIucGFyc2VUb3BMZXZlbE1lbWJlcihtZXRhZGF0YSA/PyB0b2tlbik7CiAgICB9IGVsc2UgewogICAgICB0b2tlbiA9IHBhcnNlci5wYXJzZUNsYXNzT3JNaXhpbk1lbWJlcihtZXRhZGF0YSA/PyB0b2tlbikubmV4dDsKICAgIH0KICAgIGxpc3RlbmVyRmluaXNoRmllbGRzKGxpc3RlbmVyLCBzdGFydFRva2VuLCBtZXRhZGF0YSwgaXNUb3BMZXZlbCk7CiAgICBsaXN0ZW5lci5jaGVja0VtcHR5KHRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgRGVjbGFyYXRpb24gbG9va3VwQnVpbGRlcihUb2tlbiB0b2tlbiwgVG9rZW4gZ2V0T3JTZXQsIFN0cmluZyBuYW1lKSB7CiAgICAvLyBUT0RPKGFoZSk6IENhbiBJIG1vdmUgdGhpcyB0byBTY29wZSBvciBTY29wZUJ1aWxkZXI/CiAgICBEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbjsKICAgIGlmIChjdXJyZW50Q2xhc3MgIT0gbnVsbCkgewogICAgICBpZiAodXJpICE9IGN1cnJlbnRDbGFzcy5maWxlVXJpKSB7CiAgICAgICAgdW5leHBlY3RlZCgiJHVyaSIsICIke2N1cnJlbnRDbGFzcy5maWxlVXJpfSIsIGN1cnJlbnRDbGFzcy5jaGFyT2Zmc2V0LAogICAgICAgICAgICBjdXJyZW50Q2xhc3MuZmlsZVVyaSk7CiAgICAgIH0KCiAgICAgIGlmIChnZXRPclNldCAhPSBudWxsICYmIG9wdGlvbmFsKCJzZXQiLCBnZXRPclNldCkpIHsKICAgICAgICBkZWNsYXJhdGlvbiA9IGN1cnJlbnRDbGFzcy5zY29wZS5zZXR0ZXJzW25hbWVdOwogICAgICB9IGVsc2UgewogICAgICAgIGRlY2xhcmF0aW9uID0gY3VycmVudENsYXNzLnNjb3BlLmxvY2FsW25hbWVdOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGdldE9yU2V0ICE9IG51bGwgJiYgb3B0aW9uYWwoInNldCIsIGdldE9yU2V0KSkgewogICAgICBkZWNsYXJhdGlvbiA9IGxpYnJhcnkuc2NvcGUuc2V0dGVyc1tuYW1lXTsKICAgIH0gZWxzZSB7CiAgICAgIGRlY2xhcmF0aW9uID0gbGlicmFyeS5zY29wZUJ1aWxkZXJbbmFtZV07CiAgICB9CiAgICBkZWNsYXJhdGlvbiA9IGhhbmRsZUR1cGxpY2F0ZWROYW1lKGRlY2xhcmF0aW9uLCB0b2tlbik7CiAgICBjaGVja0J1aWxkZXIodG9rZW4sIGRlY2xhcmF0aW9uLCBuYW1lKTsKICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICB9CgogIERlY2xhcmF0aW9uIGxvb2t1cENvbnN0cnVjdG9yKFRva2VuIHRva2VuLCBPYmplY3QgbmFtZU9yUXVhbGlmaWVkKSB7CiAgICBhc3NlcnQoY3VycmVudENsYXNzICE9IG51bGwpOwogICAgRGVjbGFyYXRpb24gZGVjbGFyYXRpb247CiAgICBTdHJpbmcgc3VmZml4OwogICAgaWYgKG5hbWVPclF1YWxpZmllZCBpcyBRdWFsaWZpZWROYW1lKSB7CiAgICAgIHN1ZmZpeCA9IG5hbWVPclF1YWxpZmllZC5uYW1lOwogICAgfSBlbHNlIHsKICAgICAgc3VmZml4ID0gbmFtZU9yUXVhbGlmaWVkID09IGN1cnJlbnRDbGFzcy5uYW1lID8gIiIgOiBuYW1lT3JRdWFsaWZpZWQ7CiAgICB9CiAgICBkZWNsYXJhdGlvbiA9IGN1cnJlbnRDbGFzcy5jb25zdHJ1Y3RvcnMubG9jYWxbc3VmZml4XTsKICAgIGRlY2xhcmF0aW9uID0gaGFuZGxlRHVwbGljYXRlZE5hbWUoZGVjbGFyYXRpb24sIHRva2VuKTsKICAgIGNoZWNrQnVpbGRlcih0b2tlbiwgZGVjbGFyYXRpb24sIG5hbWVPclF1YWxpZmllZCk7CiAgICByZXR1cm4gZGVjbGFyYXRpb247CiAgfQoKICBEZWNsYXJhdGlvbiBoYW5kbGVEdXBsaWNhdGVkTmFtZShEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiwgVG9rZW4gdG9rZW4pIHsKICAgIGludCBvZmZzZXQgPSB0b2tlbi5jaGFyT2Zmc2V0OwogICAgaWYgKGRlY2xhcmF0aW9uPy5uZXh0ID09IG51bGwpIHsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogICAgfSBlbHNlIHsKICAgICAgRGVjbGFyYXRpb24gbmVhcmVzdERlY2xhcmF0aW9uOwogICAgICBpbnQgbWluRGlzdGFuY2UgPSAtMTsKICAgICAgZG8gewogICAgICAgIC8vIE9ubHkgbG9vayBhdCBkZWNsYXJhdGlvbnMgZnJvbSB0aGlzIGZpbGUgKHBhcnQpLgogICAgICAgIGlmICh1cmkgPT0gZGVjbGFyYXRpb24uZmlsZVVyaSkgewogICAgICAgICAgLy8gW2Rpc3RhbmNlXSB3aWxsIGFsd2F5cyBiZSBub24tbmVnYXRpdmUgYXMgd2UgZW5zdXJlIFt0b2tlbl0gaXMKICAgICAgICAgIC8vIGFsd2F5cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZWNsYXJhdGlvbi4gVGhlIG1pbmltdW0gZGlzdGFuY2UKICAgICAgICAgIC8vIHdpbGwgb2Z0ZW4gYmUgbGFyZ2VyIHRoYW4gMCwgZm9yIGV4YW1wbGUsIGluIGEgY2xhc3MgZGVjbGFyYXRpb24KICAgICAgICAgIC8vIHdoZXJlIFt0b2tlbl0gd2lsbCBwb2ludCB0byBgYWJzdHJhY3RgIG9yIGBjbGFzc2AsIGJ1dCB0aGUKICAgICAgICAgIC8vIGRlY2xhcmF0aW9uJ3Mgb2Zmc2V0IHBvaW50cyB0byB0aGUgbmFtZSBvZiB0aGUgY2xhc3MuCiAgICAgICAgICBpbnQgZGlzdGFuY2UgPSBkZWNsYXJhdGlvbi5jaGFyT2Zmc2V0IC0gb2Zmc2V0OwogICAgICAgICAgaWYgKGRpc3RhbmNlID49IDApIHsKICAgICAgICAgICAgaWYgKG1pbkRpc3RhbmNlID09IC0xIHx8IGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHsKICAgICAgICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlOwogICAgICAgICAgICAgIG5lYXJlc3REZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb24ubmV4dDsKICAgICAgfSB3aGlsZSAoZGVjbGFyYXRpb24gIT0gbnVsbCk7CiAgICAgIHJldHVybiBuZWFyZXN0RGVjbGFyYXRpb247CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrQnVpbGRlcihUb2tlbiB0b2tlbiwgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24sIE9iamVjdCBuYW1lKSB7CiAgICBpZiAoZGVjbGFyYXRpb24gPT0gbnVsbCkgewogICAgICBpbnRlcm5hbFByb2JsZW0odGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZC53aXRoQXJndW1lbnRzKCIkbmFtZSIpLAogICAgICAgICAgdG9rZW4uY2hhck9mZnNldCwgdXJpKTsKICAgIH0KICAgIGlmICh1cmkgIT0gZGVjbGFyYXRpb24uZmlsZVVyaSkgewogICAgICB1bmV4cGVjdGVkKCIkdXJpIiwgIiR7ZGVjbGFyYXRpb24uZmlsZVVyaX0iLCBkZWNsYXJhdGlvbi5jaGFyT2Zmc2V0LAogICAgICAgICAgZGVjbGFyYXRpb24uZmlsZVVyaSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFByb2JsZW0oTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwKICAgICAge2Jvb2wgd2FzSGFuZGxlZDogZmFsc2UsIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLCB1cmksCiAgICAgICAgd2FzSGFuZGxlZDogd2FzSGFuZGxlZCwgY29udGV4dDogY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlYnVnRXZlbnQoU3RyaW5nIG5hbWUpIHsKICAgIC8vIHByaW50RXZlbnQoJ0RpZXRMaXN0ZW5lcjogJG5hbWUnKTsKICB9CgogIC8vLyBJZiB0aGUgW21ldGFkYXRhXSBpcyBub3QgYG51bGxgLCByZXR1cm4gdGhlIHBhcnNlZCBtZXRhZGF0YSBbRXhwcmVzc2lvbl1zLgogIC8vLyBPdGhlcndpc2UsIHJldHVybiBgbnVsbGAuCiAgTGlzdDxFeHByZXNzaW9uPiBwYXJzZU1ldGFkYXRhKAogICAgICBNb2RpZmllckJ1aWxkZXIgYnVpbGRlciwgVG9rZW4gbWV0YWRhdGEsIFRyZWVOb2RlIHBhcmVudCkgewogICAgaWYgKG1ldGFkYXRhICE9IG51bGwpIHsKICAgICAgdmFyIGxpc3RlbmVyID0gY3JlYXRlTGlzdGVuZXIoYnVpbGRlciwgbWVtYmVyU2NvcGUsIGZhbHNlKTsKICAgICAgdmFyIHBhcnNlciA9IG5ldyBQYXJzZXIobGlzdGVuZXIpOwogICAgICBwYXJzZXIucGFyc2VNZXRhZGF0YVN0YXIocGFyc2VyLnN5bnRoZXRpY1ByZXZpb3VzVG9rZW4obWV0YWRhdGEpKTsKICAgICAgcmV0dXJuIGxpc3RlbmVyLmZpbmlzaE1ldGFkYXRhKHBhcmVudCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBSZXR1cm5zIFtUb2tlbl0gZm91bmQgYmV0d2VlbiBbc3RhcnRdIChpbmNsdXNpdmUpIGFuZCBbZW5kXQogIC8vLyAobm9uLWluY2x1c2l2ZSkgdGhhdCBoYXMgaXRzIFtUb2tlbi5jaGFyT2Zmc2V0XSBlcXVhbCB0byBbb2Zmc2V0XS4gIElmCiAgLy8vIHRoZXJlIGlzIG5vIHN1Y2ggdG9rZW4sIG51bGwgaXMgcmV0dXJuZWQuCiAgVG9rZW4gdG9rZW5Gb3JPZmZzZXQoVG9rZW4gc3RhcnQsIFRva2VuIGVuZCwgaW50IG9mZnNldCkgewogICAgaWYgKG9mZnNldCA8IHN0YXJ0LmNoYXJPZmZzZXQgfHwgb2Zmc2V0ID49IGVuZC5jaGFyT2Zmc2V0KSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgd2hpbGUgKHN0YXJ0ICE9IGVuZCkgewogICAgICBpZiAob2Zmc2V0ID09IHN0YXJ0LmNoYXJPZmZzZXQpIHsKICAgICAgICByZXR1cm4gc3RhcnQ7CiAgICAgIH0KICAgICAgc3RhcnQgPSBzdGFydC5uZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gUmV0dXJucyBsaXN0IG9mIFtUb2tlbl1zIGZvdW5kIGJldHdlZW4gW3N0YXJ0XSAoaW5jbHVzaXZlKSBhbmQgW2VuZF0KICAvLy8gKG5vbi1pbmNsdXNpdmUpIHRoYXQgY29ycmVzcG9uZCB0byBbb2Zmc2V0c10uICBJZiB0aGVyZSdzIG5vIHRva2VuIGJldHdlZW4KICAvLy8gW3N0YXJ0XSBhbmQgW2VuZF0gZm9yIHRoZSBnaXZlbiBvZmZzZXQsIHRoZSBjb3JyZXNwb25kaW5nIGl0ZW0gaW4gdGhlCiAgLy8vIHJlc3VsdGluZyBsaXN0IGlzIHNldCB0byBudWxsLiAgW29mZnNldHNdIGFyZSBhc3N1bWVkIHRvIGJlIGluIGFzY2VuZGluZwogIC8vLyBvcmRlci4KICBMaXN0PFRva2VuPiB0b2tlbnNGb3JPZmZzZXRzKFRva2VuIHN0YXJ0LCBUb2tlbiBlbmQsIExpc3Q8aW50PiBvZmZzZXRzKSB7CiAgICBMaXN0PFRva2VuPiByZXN1bHQgPQogICAgICAgIG5ldyBMaXN0PFRva2VuPi5maWxsZWQob2Zmc2V0cy5sZW5ndGgsIG51bGwsIGdyb3dhYmxlOiBmYWxzZSk7CiAgICBmb3IgKGludCBpID0gMDsgc3RhcnQgIT0gZW5kICYmIGkgPCBvZmZzZXRzLmxlbmd0aDspIHsKICAgICAgaW50IG9mZnNldCA9IG9mZnNldHNbaV07CiAgICAgIGlmIChvZmZzZXQgPCBzdGFydC5jaGFyT2Zmc2V0KSB7CiAgICAgICAgKytpOwogICAgICB9IGVsc2UgaWYgKG9mZnNldCA9PSBzdGFydC5jaGFyT2Zmc2V0KSB7CiAgICAgICAgcmVzdWx0W2ldID0gc3RhcnQ7CiAgICAgICAgc3RhcnQgPSBzdGFydC5uZXh0OwogICAgICB9IGVsc2UgewogICAgICAgIHN0YXJ0ID0gc3RhcnQubmV4dDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJZ25vcmVkRXJyb3IoQ29kZTxkeW5hbWljPiBjb2RlLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIGlzSWdub3JlZFBhcnNlckVycm9yKGNvZGUsIHRva2VuKSB8fAogICAgICAgIHN1cGVyLmlzSWdub3JlZEVycm9yKGNvZGUsIHRva2VuKTsKICB9Cn0Kg/QATk48AR0BIQkVFBcRGxUSHQFCATgBLgEiATgBIwEdCQ4YESQpAUIBNwEnQAFOARo9AVABQAEdRgElASwBKyYBIgEdARsBKAExASYeAR0BLQE+IwFQNBUBDAsBTSAbHyUXSyROAQwkRSAVGjUNHQYEAQxPHC8WBAEMEksaHR0EAQw8LhwEAQwoHwQBDCwjBAEMUUgEAQwqGgQBDDoYEAQBDCAcBAEMQjMEAQwyIwQBDCMlBAEMRyEEAQwxKAQBDEQkBAEMLyYEAQwsIwQBDBxGJE82IjANFgYWBAEMQCYiDRYGEQQBDEIgEAQBDB08JQErGRwrKAFMRC4uKT0fNTg+O09LNEUtRikwQz03EhcvQDNBNxYUEhAODAoIKU8rBgErBAEMS0waKwQBDEEhBAEMTSIdGRwnKAEjS1EEAQwrIgQBDBoZHBcdERgYIioEAQwoHwQBDCAiBAEMRiAEAQwnIxsbJBQrFA01NAYEAQw/IhQbBAEMKSYEAQwnHgQBDEIkBAEMPSAEAQwjGgQBDDUnBAEMPB4UBAEMTiIEAQwnIwQBDEAgHQQBDEcnFQQBDCkiFAQBDCQYBAEMJBgEAQwjHwQBDEQgLQQBDDkaKQEcKigBUSAvF0UzASojQDIEAQwuGwQBDDkaARwqI0AyBAEMNRgBHCo5T0dONUIuBgQBDCglJgQBDEcjBAEMPCEEAQwgPSgkBAEMGUAhHRkcJ0gBQ0clPQ1OHwYEAQxFKikEAQxGJgQBDE0tBAEMTS0ZJEEGBAEMRTEaQkFDGBkcJ0gdITs1DTsGFykUEhkmKwQBIElJTDpNIh1HF05PIyAcEREVHhMTFhoXDRYrBAFCJTgnQSgqUS41BAEmT0QKLB5LNAgBL0UxMhYPFTQGBAE+ThwiPwFHTBsRUA8SFSIEAQwtIRwEAQwVGhQEAQxKMBoSBAEMPB8XJhwJKR4ZJiIqIisOBjomBAEMHEskGSohBAEMTSkRBAEMPycnBAEMPykYBAEMQScpBAEMTC0nLTIQHAQBDCBBKy0EAQxAGD0UJygEAQxGPykBFCcnBAFIATYGUEYfHhMXFyEWOwQBNAZQRkYpHQQBQykeCiweSygILzckMjIzUCE+RCEtHkUWDxU0BgQBTRkeKhY9DUYGRisEAUg8HSApTyMIATs4DzYIQDENMAY8LBgEAUciHRMsJQ1MBjs8NxgEAUsjJRoNJhwLPCpMTk5IQzofPyYwDgwKKCUhBgQBSR9OIgYmSyAGBAEMP0A5MwQBDCEqBAFRICJCHEIpSS4GEQQBQk0wPUETBhsoFggaBhEEAUtRTE8NTBlHOx8nDS8bHA8cCAYTBAEMOTArBAIBNXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zb3VyY2UvZGlldF9saXN0ZW5lci5kYXJ0PHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9zb3VyY2UvZGlldF9wYXJzZXIuZGFydIJxLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZGlldF9wYXJzZXI7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnLi4vcGFyc2VyLmRhcnQnIHNob3cgQ2xhc3NNZW1iZXJQYXJzZXIsIExpc3RlbmVyLCBNZW1iZXJLaW5kOwoKLy8gVE9ETyhhaGUpOiBNb3ZlIHRoaXMgdG8gcGFyc2VyIHBhY2thZ2UuCmNsYXNzIERpZXRQYXJzZXIgZXh0ZW5kcyBDbGFzc01lbWJlclBhcnNlciB7CiAgRGlldFBhcnNlcihMaXN0ZW5lciBsaXN0ZW5lcikgOiBzdXBlcihsaXN0ZW5lcik7CgogIFRva2VuIHBhcnNlRm9ybWFsUGFyYW1ldGVyc1Jlc3QoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgcmV0dXJuIHNraXBGb3JtYWxQYXJhbWV0ZXJzUmVzdCh0b2tlbiwga2luZCk7CiAgfQp9ChQATk48ARsBLgFGASstMwFCMgQCATNwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL2RpZXRfcGFyc2VyLmRhcnRAc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NvdXJjZS9vdXRsaW5lX2J1aWxkZXIuZGFydMAA5TgvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5vdXRsaW5lX2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IFByb2NlZHVyZUtpbmQ7CgppbXBvcnQgJy4uL2J1aWxkZXIvYnVpbGRlci5kYXJ0JzsKCmltcG9ydCAnLi4vY29tYmluYXRvci5kYXJ0JyBzaG93IENvbWJpbmF0b3I7CgppbXBvcnQgJy4uL2NvbmZpZ3VyYXRpb24uZGFydCcgc2hvdyBDb25maWd1cmF0aW9uOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIENvZGUsCiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgTWVzc2FnZSwKICAgICAgICBtZXNzYWdlQ29uc3RDb25zdHJ1Y3RvcldpdGhCb2R5LAogICAgICAgIG1lc3NhZ2VDb25zdEluc3RhbmNlRmllbGQsCiAgICAgICAgbWVzc2FnZUNvbnN0TWV0aG9kLAogICAgICAgIG1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhSZXR1cm5UeXBlLAogICAgICAgIG1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhUeXBlUGFyYW1ldGVycywKICAgICAgICBtZXNzYWdlRXhwZWN0ZWRCbG9ja1RvU2tpcCwKICAgICAgICBtZXNzYWdlSW50ZXJwb2xhdGlvbkluVXJpLAogICAgICAgIG1lc3NhZ2VPcGVyYXRvcldpdGhPcHRpb25hbEZvcm1hbHMsCiAgICAgICAgbWVzc2FnZVN0YXRpY0NvbnN0cnVjdG9yLAogICAgICAgIG1lc3NhZ2VUeXBlZGVmTm90RnVuY3Rpb24sCiAgICAgICAgdGVtcGxhdGVDeWNsZUluVHlwZVZhcmlhYmxlcywKICAgICAgICB0ZW1wbGF0ZURpcmVjdEN5Y2xlSW5UeXBlVmFyaWFibGVzLAogICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZFBhcmFtZXRlck5hbWUsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlLAogICAgICAgIHRlbXBsYXRlT3BlcmF0b3JNaW51c1BhcmFtZXRlck1pc21hdGNoLAogICAgICAgIHRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDAsCiAgICAgICAgdGVtcGxhdGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMSwKICAgICAgICB0ZW1wbGF0ZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gyOwoKaW1wb3J0ICcuLi9pZ25vcmVkX3BhcnNlcl9lcnJvcnMuZGFydCcgc2hvdyBpc0lnbm9yZWRQYXJzZXJFcnJvcjsKCi8vIFRPRE8oYWhlKTogVGhlIG91dGxpbmUgaXNuJ3Qgc3VwcG9zZWQgdG8gaW1wb3J0IGtlcm5lbC1zcGVjaWZpYyBidWlsZGVycy4KaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBNZXRhZGF0YUJ1aWxkZXIsCiAgICAgICAgTWl4aW5BcHBsaWNhdGlvbkJ1aWxkZXIsCiAgICAgICAgTmFtZWRUeXBlQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlcjsKCmltcG9ydCAnLi4vbW9kaWZpZXIuZGFydCcKICAgIHNob3cKICAgICAgICBDb25zdCwKICAgICAgICBDb3ZhcmlhbnQsCiAgICAgICAgRXh0ZXJuYWwsCiAgICAgICAgRmluYWwsCiAgICAgICAgTW9kaWZpZXIsCiAgICAgICAgU3RhdGljLAogICAgICAgIFZhciwKICAgICAgICBhYnN0cmFjdE1hc2ssCiAgICAgICAgY29uc3RNYXNrLAogICAgICAgIGNvdmFyaWFudE1hc2ssCiAgICAgICAgZXh0ZW5zaW9uRGVjbGFyYXRpb25NYXNrLAogICAgICAgIGV4dGVybmFsTWFzaywKICAgICAgICBmaW5hbE1hc2ssCiAgICAgICAgbWl4aW5EZWNsYXJhdGlvbk1hc2ssCiAgICAgICAgc3RhdGljTWFzazsKCmltcG9ydCAnLi4vb3BlcmF0b3IuZGFydCcKICAgIHNob3cKICAgICAgICBPcGVyYXRvciwKICAgICAgICBvcGVyYXRvckZyb21TdHJpbmcsCiAgICAgICAgb3BlcmF0b3JUb1N0cmluZywKICAgICAgICBvcGVyYXRvclJlcXVpcmVkQXJndW1lbnRDb3VudDsKCmltcG9ydCAnLi4vcGFyc2VyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQXNzZXJ0LAogICAgICAgIENsYXNzS2luZCwKICAgICAgICBGb3JtYWxQYXJhbWV0ZXJLaW5kLAogICAgICAgIElkZW50aWZpZXJDb250ZXh0LAogICAgICAgIGxlbmd0aE9mU3BhbiwKICAgICAgICBNZW1iZXJLaW5kLAogICAgICAgIG9mZnNldEZvclRva2VuLAogICAgICAgIG9wdGlvbmFsOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuaGFuZGxlZDsKCmltcG9ydCAnLi4vcXVvdGUuZGFydCcgc2hvdyB1bmVzY2FwZVN0cmluZzsKCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICdzb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnQnCiAgICBzaG93IERlY2xhcmF0aW9uQnVpbGRlciwgRGVjbGFyYXRpb25LaW5kLCBGaWVsZEluZm8sIFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICdzdGFja19saXN0ZW5lci5kYXJ0JwogICAgc2hvdyBGaXhlZE51bGxhYmxlTGlzdCwgTnVsbFZhbHVlLCBQYXJzZXJSZWNvdmVyeSwgU3RhY2tMaXN0ZW5lcjsKCmltcG9ydCAndmFsdWVfa2luZHMuZGFydCc7CgplbnVtIE1ldGhvZEJvZHkgewogIEFic3RyYWN0LAogIFJlZ3VsYXIsCiAgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSwKfQoKY2xhc3MgT3V0bGluZUJ1aWxkZXIgZXh0ZW5kcyBTdGFja0xpc3RlbmVyIHsKICBmaW5hbCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5OwoKICBmaW5hbCBib29sIGVuYWJsZU5hdGl2ZTsKICBmaW5hbCBib29sIHN0cmluZ0V4cGVjdGVkQWZ0ZXJOYXRpdmU7CiAgYm9vbCBpbkNvbnN0cnVjdG9yID0gZmFsc2U7CiAgYm9vbCBpbkNvbnN0cnVjdG9yTmFtZSA9IGZhbHNlOwogIGludCBpbXBvcnRJbmRleCA9IDA7CgogIFN0cmluZyBuYXRpdmVNZXRob2ROYW1lOwoKICAvLy8gQ291bnRlciB1c2VkIGZvciBuYW1pbmcgdW5uYW1lZCBleHRlbnNpb24gZGVjbGFyYXRpb25zLgogIGludCB1bm5hbWVkRXh0ZW5zaW9uQ291bnRlciA9IDA7CgogIE91dGxpbmVCdWlsZGVyKFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpCiAgICAgIDogbGlicmFyeSA9IGxpYnJhcnksCiAgICAgICAgZW5hYmxlTmF0aXZlID0KICAgICAgICAgICAgbGlicmFyeS5sb2FkZXIudGFyZ2V0LmJhY2tlbmRUYXJnZXQuZW5hYmxlTmF0aXZlKGxpYnJhcnkudXJpKSwKICAgICAgICBzdHJpbmdFeHBlY3RlZEFmdGVyTmF0aXZlID0KICAgICAgICAgICAgbGlicmFyeS5sb2FkZXIudGFyZ2V0LmJhY2tlbmRUYXJnZXQubmF0aXZlRXh0ZW5zaW9uRXhwZWN0c1N0cmluZzsKCiAgQG92ZXJyaWRlCiAgVXJpIGdldCB1cmkgPT4gbGlicmFyeS5maWxlVXJpOwoKICBpbnQgcG9wQ2hhck9mZnNldCgpID0+IHBvcCgpOwoKICBMaXN0PFN0cmluZz4gcG9wSWRlbnRpZmllckxpc3QoaW50IGNvdW50KSB7CiAgICBpZiAoY291bnQgPT0gMCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PFN0cmluZz4gbGlzdCA9IG5ldyBMaXN0PFN0cmluZz4oY291bnQpOwogICAgYm9vbCBpc1BhcnNlclJlY292ZXJ5ID0gZmFsc2U7CiAgICBmb3IgKGludCBpID0gY291bnQgLSAxOyBpID49IDA7IGktLSkgewogICAgICBwb3BDaGFyT2Zmc2V0KCk7CiAgICAgIE9iamVjdCBpZGVudGlmaWVyID0gcG9wKCk7CiAgICAgIGlmIChpZGVudGlmaWVyIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgICAgaXNQYXJzZXJSZWNvdmVyeSA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGlzdFtpXSA9IGlkZW50aWZpZXI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpc1BhcnNlclJlY292ZXJ5ID8gbnVsbCA6IGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE1ldGFkYXRhKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIHBlcmlvZEJlZm9yZU5hbWUsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJNZXRhZGF0YSIpOwogICAgcG9wKCk7IC8vIGFyZ3VtZW50cwogICAgaWYgKHBlcmlvZEJlZm9yZU5hbWUgIT0gbnVsbCkgewogICAgICBwb3AoKTsgLy8gb2Zmc2V0CiAgICAgIHBvcCgpOyAvLyBjb25zdHJ1Y3RvciBuYW1lCiAgICB9CiAgICBwb3AoKTsgLy8gdHlwZSBhcmd1bWVudHMKICAgIHBvcCgpOyAvLyBvZmZzZXQKICAgIE9iamVjdCBzZW50aW5lbCA9IHBvcCgpOyAvLyBwcmVmaXggb3IgY29uc3RydWN0b3IKICAgIHB1c2goc2VudGluZWwgaXMgUGFyc2VyUmVjb3ZlcnkKICAgICAgICA/IHNlbnRpbmVsCiAgICAgICAgOiBuZXcgTWV0YWRhdGFCdWlsZGVyKGJlZ2luVG9rZW4pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWV0YWRhdGFTdGFyKGludCBjb3VudCkgewogICAgZGVidWdFdmVudCgiTWV0YWRhdGFTdGFyIik7CiAgICBwdXNoKGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PE1ldGFkYXRhQnVpbGRlcj4oKS5wb3Aoc3RhY2ssIGNvdW50KSA/PwogICAgICAgIE51bGxWYWx1ZS5NZXRhZGF0YSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRUb3BMZXZlbERlY2xhcmF0aW9uKFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbiIpOwogICAgcG9wKCk7IC8vIG1ldGFkYXRhIHN0YXIKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSGlkZShUb2tlbiBoaWRlS2V5d29yZCkgewogICAgZGVidWdFdmVudCgiSGlkZSIpOwogICAgT2JqZWN0IG5hbWVzID0gcG9wKCk7CiAgICBpZiAobmFtZXMgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChuYW1lcyk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKG5ldyBDb21iaW5hdG9yLmhpZGUobmFtZXMsIGhpZGVLZXl3b3JkLmNoYXJPZmZzZXQsIGxpYnJhcnkuZmlsZVVyaSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRTaG93KFRva2VuIHNob3dLZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJTaG93Iik7CiAgICBPYmplY3QgbmFtZXMgPSBwb3AoKTsKICAgIGlmIChuYW1lcyBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKG5hbWVzKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobmV3IENvbWJpbmF0b3Iuc2hvdyhuYW1lcywgc2hvd0tleXdvcmQuY2hhck9mZnNldCwgbGlicmFyeS5maWxlVXJpKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbWJpbmF0b3JzKGludCBjb3VudCkgewogICAgZGVidWdFdmVudCgiQ29tYmluYXRvcnMiKTsKICAgIHB1c2goY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8Q29tYmluYXRvcj4oKS5wb3Aoc3RhY2ssIGNvdW50KSA/PwogICAgICAgIE51bGxWYWx1ZS5Db21iaW5hdG9ycyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEV4cG9ydChUb2tlbiBleHBvcnRLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIkV4cG9ydCIpOwogICAgTGlzdDxDb21iaW5hdG9yPiBjb21iaW5hdG9ycyA9IHBvcCgpOwogICAgTGlzdDxDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9ucyA9IHBvcCgpOwogICAgaW50IHVyaU9mZnNldCA9IHBvcENoYXJPZmZzZXQoKTsKICAgIFN0cmluZyB1cmkgPSBwb3AoKTsKICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcCgpOwogICAgbGlicmFyeS5hZGRFeHBvcnQobWV0YWRhdGEsIHVyaSwgY29uZmlndXJhdGlvbnMsIGNvbWJpbmF0b3JzLAogICAgICAgIGV4cG9ydEtleXdvcmQuY2hhck9mZnNldCwgdXJpT2Zmc2V0KTsKICAgIGNoZWNrRW1wdHkoZXhwb3J0S2V5d29yZC5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW1wb3J0UHJlZml4KFRva2VuIGRlZmVycmVkS2V5d29yZCwgVG9rZW4gYXNLZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJJbXBvcnRQcmVmaXgiKTsKICAgIGlmIChhc0tleXdvcmQgPT0gbnVsbCkgewogICAgICAvLyBJZiBhc0tleXdvcmQgaXMgbnVsbCwgdGhlbiBubyBwcmVmaXggaGFzIGJlZW4gcHVzaGVkIG9uIHRoZSBzdGFjay4KICAgICAgLy8gUHVzaCBhIHBsYWNlaG9sZGVyIGluZGljYXRpbmcgdGhhdCB0aGVyZSBpcyBubyBwcmVmaXguCiAgICAgIHB1c2goTnVsbFZhbHVlLlByZWZpeCk7CiAgICAgIHB1c2goLTEpOwogICAgfQogICAgcHVzaChkZWZlcnJlZEtleXdvcmQgIT0gbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEltcG9ydChUb2tlbiBpbXBvcnRLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIkVuZEltcG9ydCIpOwogICAgTGlzdDxDb21iaW5hdG9yPiBjb21iaW5hdG9ycyA9IHBvcCgpOwogICAgYm9vbCBpc0RlZmVycmVkID0gcG9wKCk7CiAgICBpbnQgcHJlZml4T2Zmc2V0ID0gcG9wKCk7CiAgICBPYmplY3QgcHJlZml4ID0gcG9wKE51bGxWYWx1ZS5QcmVmaXgpOwogICAgTGlzdDxDb25maWd1cmF0aW9uPiBjb25maWd1cmF0aW9ucyA9IHBvcCgpOwogICAgaW50IHVyaU9mZnNldCA9IHBvcENoYXJPZmZzZXQoKTsKICAgIFN0cmluZyB1cmkgPSBwb3AoKTsgLy8gRm9yIGEgY29uZGl0aW9uYWwgaW1wb3J0LCB0aGlzIGlzIHRoZSBkZWZhdWx0IFVSSS4KICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eShpbXBvcnRLZXl3b3JkLmNoYXJPZmZzZXQpOwogICAgaWYgKHByZWZpeCBpcyBQYXJzZXJSZWNvdmVyeSkgcmV0dXJuOwogICAgbGlicmFyeS5hZGRJbXBvcnQoCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgdXJpLAogICAgICAgIGNvbmZpZ3VyYXRpb25zLAogICAgICAgIHByZWZpeCwKICAgICAgICBjb21iaW5hdG9ycywKICAgICAgICBpc0RlZmVycmVkLAogICAgICAgIGltcG9ydEtleXdvcmQuY2hhck9mZnNldCwKICAgICAgICBwcmVmaXhPZmZzZXQsCiAgICAgICAgdXJpT2Zmc2V0LAogICAgICAgIGltcG9ydEluZGV4KyspOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25kaXRpb25hbFVyaXMoaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJFbmRDb25kaXRpb25hbFVyaXMiKTsKICAgIHB1c2goY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8Q29uZmlndXJhdGlvbj4oKS5wb3Aoc3RhY2ssIGNvdW50KSA/PwogICAgICAgIE51bGxWYWx1ZS5Db25kaXRpb25hbFVyaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25kaXRpb25hbFVyaShUb2tlbiBpZktleXdvcmQsIFRva2VuIGxlZnRQYXJlbiwgVG9rZW4gZXF1YWxTaWduKSB7CiAgICBkZWJ1Z0V2ZW50KCJFbmRDb25kaXRpb25hbFVyaSIpOwogICAgaW50IGNoYXJPZmZzZXQgPSBwb3BDaGFyT2Zmc2V0KCk7CiAgICBTdHJpbmcgdXJpID0gcG9wKCk7CiAgICBpZiAoZXF1YWxTaWduICE9IG51bGwpIHBvcENoYXJPZmZzZXQoKTsKICAgIFN0cmluZyBjb25kaXRpb24gPSBwb3BJZk5vdE51bGwoZXF1YWxTaWduKSA/PyAidHJ1ZSI7CiAgICBPYmplY3QgZG90dGVkTmFtZSA9IHBvcCgpOwogICAgaWYgKGRvdHRlZE5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgcHVzaChkb3R0ZWROYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobmV3IENvbmZpZ3VyYXRpb24oY2hhck9mZnNldCwgZG90dGVkTmFtZSwgY29uZGl0aW9uLCB1cmkpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRG90dGVkTmFtZShpbnQgY291bnQsIFRva2VuIGZpcnN0SWRlbnRpZmllcikgewogICAgZGVidWdFdmVudCgiRG90dGVkTmFtZSIpOwogICAgTGlzdDxTdHJpbmc+IG5hbWVzID0gcG9wSWRlbnRpZmllckxpc3QoY291bnQpOwogICAgaWYgKG5hbWVzID09IG51bGwpIHsKICAgICAgcHVzaChuZXcgUGFyc2VyUmVjb3ZlcnkoZmlyc3RJZGVudGlmaWVyLmNoYXJPZmZzZXQpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobmFtZXMuam9pbignLicpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUmVjb3ZlckltcG9ydChUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIlJlY292ZXJJbXBvcnQiKTsKICAgIHBvcCgpOyAvLyBjb21iaW5hdG9ycwogICAgcG9wKE51bGxWYWx1ZS5EZWZlcnJlZCk7IC8vIGRlZmVycmVkS2V5d29yZAogICAgcG9wKCk7IC8vIHByZWZpeE9mZnNldAogICAgcG9wKE51bGxWYWx1ZS5QcmVmaXgpOyAvLyBwcmVmaXgKICAgIHBvcCgpOyAvLyBjb25kaXRpb25hbFVyaXMKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kUGFydChUb2tlbiBwYXJ0S2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJQYXJ0Iik7CiAgICBpbnQgY2hhck9mZnNldCA9IHBvcENoYXJPZmZzZXQoKTsKICAgIFN0cmluZyB1cmkgPSBwb3AoKTsKICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcCgpOwogICAgbGlicmFyeS5hZGRQYXJ0KG1ldGFkYXRhLCB1cmksIGNoYXJPZmZzZXQpOwogICAgY2hlY2tFbXB0eShwYXJ0S2V5d29yZC5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlT3BlcmF0b3JOYW1lKFRva2VuIG9wZXJhdG9yS2V5d29yZCwgVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk9wZXJhdG9yTmFtZSIpOwogICAgcHVzaChvcGVyYXRvckZyb21TdHJpbmcodG9rZW4uc3RyaW5nVmFsdWUpKTsKICAgIHB1c2godG9rZW4uY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRPcGVyYXRvck5hbWUoVG9rZW4gb3BlcmF0b3JLZXl3b3JkLCBUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiSW52YWxpZE9wZXJhdG9yTmFtZSIpOwogICAgcHVzaCgnaW52YWxpZCcpOwogICAgcHVzaCh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgaWYgKGNvbnRleHQgPT0gSWRlbnRpZmllckNvbnRleHQuZW51bVZhbHVlRGVjbGFyYXRpb24pIHsKICAgICAgZGVidWdFdmVudCgiaGFuZGxlSWRlbnRpZmllciIpOwogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoKTsKICAgICAgaWYgKHRva2VuLmlzU3ludGhldGljKSB7CiAgICAgICAgcHVzaChuZXcgUGFyc2VyUmVjb3ZlcnkodG9rZW4uY2hhck9mZnNldCkpOwogICAgICB9IGVsc2UgewogICAgICAgIHB1c2gobmV3IEVudW1Db25zdGFudEluZm8obWV0YWRhdGEsIHRva2VuLmxleGVtZSwgdG9rZW4uY2hhck9mZnNldCwKICAgICAgICAgICAgZ2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQodG9rZW4pKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHN1cGVyLmhhbmRsZUlkZW50aWZpZXIodG9rZW4sIGNvbnRleHQpOwogICAgICBwdXNoKHRva2VuLmNoYXJPZmZzZXQpOwogICAgfQogICAgaWYgKGluQ29uc3RydWN0b3IgJiYgY29udGV4dCA9PSBJZGVudGlmaWVyQ29udGV4dC5tZXRob2REZWNsYXJhdGlvbikgewogICAgICBpbkNvbnN0cnVjdG9yTmFtZSA9IHRydWU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vTmFtZShUb2tlbiB0b2tlbikgewogICAgc3VwZXIuaGFuZGxlTm9OYW1lKHRva2VuKTsKICAgIHB1c2godG9rZW4uY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN0cmluZ1BhcnQoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlN0cmluZ1BhcnQiKTsKICAgIC8vIElnbm9yZSBzdHJpbmcgcGFydHMgLSByZXBvcnQgZXJyb3IgbGF0ZXIuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZExpdGVyYWxTdHJpbmcoaW50IGludGVycG9sYXRpb25Db3VudCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZExpdGVyYWxTdHJpbmciKTsKICAgIGlmIChpbnRlcnBvbGF0aW9uQ291bnQgPT0gMCkgewogICAgICBUb2tlbiB0b2tlbiA9IHBvcCgpOwogICAgICBwdXNoKHVuZXNjYXBlU3RyaW5nKHRva2VuLmxleGVtZSwgdG9rZW4sIHRoaXMpKTsKICAgICAgcHVzaCh0b2tlbi5jaGFyT2Zmc2V0KTsKICAgIH0gZWxzZSB7CiAgICAgIFRva2VuIGJlZ2luVG9rZW4gPSBwb3AoKTsKICAgICAgaW50IGNoYXJPZmZzZXQgPSBiZWdpblRva2VuLmNoYXJPZmZzZXQ7CiAgICAgIHB1c2goIiR7U291cmNlTGlicmFyeUJ1aWxkZXIuTUFMRk9STUVEX1VSSV9TQ0hFTUV9OmJhZCR7Y2hhck9mZnNldH0iKTsKICAgICAgcHVzaChjaGFyT2Zmc2V0KTsKICAgICAgLy8gUG9pbnQgdG8gZG9sbGFyIHNpZ24KICAgICAgaW50IGludGVycG9sYXRpb25PZmZzZXQgPSBjaGFyT2Zmc2V0ICsgYmVnaW5Ub2tlbi5sZXhlbWUubGVuZ3RoOwogICAgICBhZGRQcm9ibGVtKG1lc3NhZ2VJbnRlcnBvbGF0aW9uSW5VcmksIGludGVycG9sYXRpb25PZmZzZXQsIDEpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYXRpdmVDbGF1c2UoVG9rZW4gbmF0aXZlVG9rZW4sIGJvb2wgaGFzTmFtZSkgewogICAgZGVidWdFdmVudCgiTmF0aXZlQ2xhdXNlIik7CiAgICBpZiAoaGFzTmFtZSkgewogICAgICAvLyBQb3AgdGhlIG5hdGl2ZSBjbGF1c2Ugd2hpY2ggaW4gdGhpcyBjYXNlIGlzIGEgU3RyaW5nTGl0ZXJhbC4KICAgICAgcG9wKCk7IC8vIENoYXIgb2Zmc2V0LgogICAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICAgIG5hdGl2ZU1ldGhvZE5hbWUgPSAnJzsKICAgICAgfSBlbHNlIHsKICAgICAgICBuYXRpdmVNZXRob2ROYW1lID0gbmFtZTsgLy8gU3RyaW5nLgogICAgICB9CiAgICB9IGVsc2UgewogICAgICBuYXRpdmVNZXRob2ROYW1lID0gJyc7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN0cmluZ0p1eHRhcG9zaXRpb24oaW50IGxpdGVyYWxDb3VudCkgewogICAgZGVidWdFdmVudCgiU3RyaW5nSnV4dGFwb3NpdGlvbiIpOwogICAgTGlzdDxTdHJpbmc+IGxpc3QgPSBuZXcgTGlzdDxTdHJpbmc+KGxpdGVyYWxDb3VudCk7CiAgICBpbnQgY2hhck9mZnNldCA9IC0xOwogICAgZm9yIChpbnQgaSA9IGxpdGVyYWxDb3VudCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIGNoYXJPZmZzZXQgPSBwb3AoKTsKICAgICAgbGlzdFtpXSA9IHBvcCgpOwogICAgfQogICAgcHVzaChsaXN0LmpvaW4oIiIpKTsKICAgIHB1c2goY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUlkZW50aWZpZXJMaXN0KGludCBjb3VudCkgewogICAgZGVidWdFdmVudCgiZW5kSWRlbnRpZmllckxpc3QiKTsKICAgIHB1c2gocG9wSWRlbnRpZmllckxpc3QoY291bnQpID8/CiAgICAgICAgKGNvdW50ID09IDAgPyBOdWxsVmFsdWUuSWRlbnRpZmllckxpc3QgOiBuZXcgUGFyc2VyUmVjb3ZlcnkoLTEpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVF1YWxpZmllZChUb2tlbiBwZXJpb2QpIHsKICAgIGRlYnVnRXZlbnQoImhhbmRsZVF1YWxpZmllZCIpOwogICAgaW50IHN1ZmZpeE9mZnNldCA9IHBvcCgpOwogICAgT2JqZWN0IHN1ZmZpeCA9IHBvcCgpOwogICAgaW50IG9mZnNldCA9IHBvcCgpOwogICAgT2JqZWN0IHByZWZpeCA9IHBvcCgpOwogICAgaWYgKHByZWZpeCBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKHByZWZpeCk7CiAgICB9IGVsc2UgaWYgKHN1ZmZpeCBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKHN1ZmZpeCk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoaWRlbnRpY2FsKHN1ZmZpeCwgcGVyaW9kLm5leHQubGV4ZW1lKSk7CiAgICAgIGFzc2VydChzdWZmaXhPZmZzZXQgPT0gcGVyaW9kLm5leHQuY2hhck9mZnNldCk7CiAgICAgIHB1c2gobmV3IFF1YWxpZmllZE5hbWUocHJlZml4LCBwZXJpb2QubmV4dCkpOwogICAgfQogICAgcHVzaChvZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRMaWJyYXJ5TmFtZShUb2tlbiBsaWJyYXJ5S2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRMaWJyYXJ5TmFtZSIpOwogICAgcG9wQ2hhck9mZnNldCgpOwogICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50ID0gZ2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQobGlicmFyeUtleXdvcmQpOwogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcCgpOwogICAgbGlicmFyeS5kb2N1bWVudGF0aW9uQ29tbWVudCA9IGRvY3VtZW50YXRpb25Db21tZW50OwogICAgaWYgKG5hbWUgaXMhIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIGxpYnJhcnkubmFtZSA9IGZsYXR0ZW5OYW1lKG5hbWUsIG9mZnNldEZvclRva2VuKGxpYnJhcnlLZXl3b3JkKSwgdXJpKTsKICAgIH0KICAgIGxpYnJhcnkubWV0YWRhdGEgPSBtZXRhZGF0YTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5DbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkNsYXNzT3JOYW1lZE1peGluQXBwbGljYXRpb24iKTsKICAgIGxpYnJhcnkuYmVnaW5OZXN0ZWREZWNsYXJhdGlvbihEZWNsYXJhdGlvbktpbmQuY2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbiwKICAgICAgICAiY2xhc3Mgb3IgbWl4aW4gYXBwbGljYXRpb24iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5DbGFzc0RlY2xhcmF0aW9uKFRva2VuIGJlZ2luLCBUb2tlbiBhYnN0cmFjdFRva2VuLCBUb2tlbiBuYW1lKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkNsYXNzRGVjbGFyYXRpb24iKTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IHBvcCgpOwogICAgcHVzaCh0eXBlVmFyaWFibGVzID8/IE51bGxWYWx1ZS5UeXBlVmFyaWFibGVzKTsKICAgIGxpYnJhcnkuY3VycmVudERlY2xhcmF0aW9uCiAgICAgICAgLnJlZ2lzdGVyQ2xhc3NEZWNsYXJhdGlvbihuYW1lLmxleGVtZSwgbmFtZS5jaGFyT2Zmc2V0LCB0eXBlVmFyaWFibGVzKTsKICAgIHB1c2goYWJzdHJhY3RUb2tlbiAhPSBudWxsID8gYWJzdHJhY3RNYXNrIDogMCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTWl4aW5EZWNsYXJhdGlvbihUb2tlbiBtaXhpbktleXdvcmQsIFRva2VuIG5hbWUpIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luTWl4aW5EZWNsYXJhdGlvbiIpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcG9wKCk7CiAgICBwdXNoKHR5cGVWYXJpYWJsZXMgPz8gTnVsbFZhbHVlLlR5cGVWYXJpYWJsZXMpOwogICAgbGlicmFyeS5jdXJyZW50RGVjbGFyYXRpb24KICAgICAgICAucmVnaXN0ZXJNaXhpbkRlY2xhcmF0aW9uKG5hbWUubGV4ZW1lLCBuYW1lLmNoYXJPZmZzZXQsIHR5cGVWYXJpYWJsZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNsYXNzT3JNaXhpbkJvZHkoQ2xhc3NLaW5kIGtpbmQsIFRva2VuIHRva2VuKSB7CiAgICBpZiAoa2luZCA9PSBDbGFzc0tpbmQuRXh0ZW5zaW9uKSB7CiAgICAgIGFzc2VydChjaGVja1N0YXRlKHRva2VuLCBbVmFsdWVLaW5kLlR5cGVCdWlsZGVyXSkpOwogICAgICBUeXBlQnVpbGRlciBleHRlbnNpb25UaGlzVHlwZSA9IHBlZWsoKTsKICAgICAgbGlicmFyeS5jdXJyZW50RGVjbGFyYXRpb24ucmVnaXN0ZXJFeHRlbnNpb25UaGlzVHlwZShleHRlbnNpb25UaGlzVHlwZSk7CiAgICB9CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkNsYXNzT3JNaXhpbkJvZHkiKTsKICAgIC8vIFJlc29sdmUgdW5yZXNvbHZlZCB0eXBlcyBmcm9tIHRoZSBjbGFzcyBoZWFkZXIgKGkuZS4sIHN1cGVyY2xhc3MsIG1peGlucywKICAgIC8vIGFuZCBpbXBsZW1lbnRlZCB0eXBlcykgYmVmb3JlIGFkZGluZyBtZW1iZXJzIGZyb20gdGhlIGNsYXNzIGJvZHkgd2hpY2gKICAgIC8vIHNob3VsZCBub3Qgc2hhZG93IHRoZXNlIHVucmVzb2x2ZWQgdHlwZXMuCiAgICBsaWJyYXJ5LmN1cnJlbnREZWNsYXJhdGlvbgogICAgICAgIC5yZXNvbHZlVHlwZXMobGlicmFyeS5jdXJyZW50RGVjbGFyYXRpb24udHlwZVZhcmlhYmxlcywgbGlicmFyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTmFtZWRNaXhpbkFwcGxpY2F0aW9uKAogICAgICBUb2tlbiBiZWdpbiwgVG9rZW4gYWJzdHJhY3RUb2tlbiwgVG9rZW4gbmFtZSkgewogICAgZGVidWdFdmVudCgiYmVnaW5OYW1lZE1peGluQXBwbGljYXRpb24iKTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IHBvcCgpOwogICAgcHVzaCh0eXBlVmFyaWFibGVzID8/IE51bGxWYWx1ZS5UeXBlVmFyaWFibGVzKTsKICAgIGxpYnJhcnkuY3VycmVudERlY2xhcmF0aW9uLnJlZ2lzdGVyTmFtZWRNaXhpbkFwcGxpY2F0aW9uKAogICAgICAgIG5hbWUubGV4ZW1lLCBuYW1lLmNoYXJPZmZzZXQsIHR5cGVWYXJpYWJsZXMpOwogICAgcHVzaChhYnN0cmFjdFRva2VuICE9IG51bGwgPyBhYnN0cmFjdE1hc2sgOiAwKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NPck1peGluSW1wbGVtZW50cygKICAgICAgVG9rZW4gaW1wbGVtZW50c0tleXdvcmQsIGludCBpbnRlcmZhY2VzQ291bnQpIHsKICAgIGRlYnVnRXZlbnQoIkNsYXNzT3JNaXhpbkltcGxlbWVudHMiKTsKICAgIHB1c2goY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8TmFtZWRUeXBlQnVpbGRlcj4oKQogICAgICAgICAgICAucG9wKHN0YWNrLCBpbnRlcmZhY2VzQ291bnQpID8/CiAgICAgICAgTnVsbFZhbHVlLlR5cGVCdWlsZGVyTGlzdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVJlY292ZXJDbGFzc0hlYWRlcigpIHsKICAgIGRlYnVnRXZlbnQoImhhbmRsZVJlY292ZXJDbGFzc0hlYWRlciIpOwogICAgcG9wKE51bGxWYWx1ZS5UeXBlQnVpbGRlckxpc3QpOyAvLyBJbnRlcmZhY2VzLgogICAgcG9wKCk7IC8vIFN1cGVydHlwZSBvZmZzZXQuCiAgICBwb3AoKTsgLy8gU3VwZXJ0eXBlLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVSZWNvdmVyTWl4aW5IZWFkZXIoKSB7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVSZWNvdmVyTWl4aW5IZWFkZXIiKTsKICAgIHBvcChOdWxsVmFsdWUuVHlwZUJ1aWxkZXJMaXN0KTsgLy8gSW50ZXJmYWNlcy4KICAgIHBvcChOdWxsVmFsdWUuVHlwZUJ1aWxkZXJMaXN0KTsgLy8gU3VwZXJ0eXBlIGNvbnN0cmFpbnRzLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDbGFzc0V4dGVuZHMoVG9rZW4gZXh0ZW5kc0tleXdvcmQpIHsKICAgIGRlYnVnRXZlbnQoImhhbmRsZUNsYXNzRXh0ZW5kcyIpOwogICAgcHVzaChleHRlbmRzS2V5d29yZD8uY2hhck9mZnNldCA/PyAtMSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU1peGluT24oVG9rZW4gb25LZXl3b3JkLCBpbnQgdHlwZUNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVNaXhpbk9uIik7CiAgICBwdXNoKGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PE5hbWVkVHlwZUJ1aWxkZXI+KCkucG9wKHN0YWNrLCB0eXBlQ291bnQpID8/CiAgICAgICAgbmV3IFBhcnNlclJlY292ZXJ5KG9mZnNldEZvclRva2VuKG9uS2V5d29yZCkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2xhc3NEZWNsYXJhdGlvbihUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiZW5kQ2xhc3NEZWNsYXJhdGlvbiIpOwogICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50ID0gZ2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQoYmVnaW5Ub2tlbik7CiAgICBMaXN0PFR5cGVCdWlsZGVyPiBpbnRlcmZhY2VzID0gcG9wKE51bGxWYWx1ZS5UeXBlQnVpbGRlckxpc3QpOwogICAgaW50IHN1cGVydHlwZU9mZnNldCA9IHBvcCgpOwogICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlID0gbnVsbElmUGFyc2VyUmVjb3ZlcnkocG9wKCkpOwogICAgaW50IG1vZGlmaWVycyA9IHBvcCgpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcG9wKCk7CiAgICBpbnQgbmFtZU9mZnNldCA9IHBvcCgpOwogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIGlmICh0eXBlVmFyaWFibGVzICE9IG51bGwgJiYgc3VwZXJ0eXBlIGlzIE1peGluQXBwbGljYXRpb25CdWlsZGVyKSB7CiAgICAgIHN1cGVydHlwZS50eXBlVmFyaWFibGVzID0gdHlwZVZhcmlhYmxlczsKICAgIH0KICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcCgpOwogICAgY2hlY2tFbXB0eShiZWdpblRva2VuLmNoYXJPZmZzZXQpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgbGlicmFyeS5lbmROZXN0ZWREZWNsYXJhdGlvbigKICAgICAgICAgIERlY2xhcmF0aW9uS2luZC5jbGFzc0RlY2xhcmF0aW9uLCAiPHN5bnRheC1lcnJvcj4iKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGZpbmFsIGludCBzdGFydENoYXJPZmZzZXQgPQogICAgICAgIG1ldGFkYXRhID09IG51bGwgPyBiZWdpblRva2VuLmNoYXJPZmZzZXQgOiBtZXRhZGF0YS5maXJzdC5jaGFyT2Zmc2V0OwoKICAgIGxpYnJhcnkuYWRkQ2xhc3MoCiAgICAgICAgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgbW9kaWZpZXJzLAogICAgICAgIG5hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICBzdXBlcnR5cGUsCiAgICAgICAgaW50ZXJmYWNlcywKICAgICAgICBzdGFydENoYXJPZmZzZXQsCiAgICAgICAgbmFtZU9mZnNldCwKICAgICAgICBlbmRUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgIHN1cGVydHlwZU9mZnNldCk7CiAgfQoKICBPYmplY3QgbnVsbElmUGFyc2VyUmVjb3ZlcnkoT2JqZWN0IG5vZGUpIHsKICAgIHJldHVybiBub2RlIGlzIFBhcnNlclJlY292ZXJ5ID8gbnVsbCA6IG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE1peGluRGVjbGFyYXRpb24oVG9rZW4gbWl4aW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZE1peGluRGVjbGFyYXRpb24iKTsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KG1peGluVG9rZW4pOwogICAgTGlzdDxUeXBlQnVpbGRlcj4gaW50ZXJmYWNlcyA9IHBvcChOdWxsVmFsdWUuVHlwZUJ1aWxkZXJMaXN0KTsKICAgIExpc3Q8VHlwZUJ1aWxkZXI+IHN1cGVydHlwZUNvbnN0cmFpbnRzID0gbnVsbElmUGFyc2VyUmVjb3ZlcnkocG9wKCkpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcG9wKE51bGxWYWx1ZS5UeXBlVmFyaWFibGVzKTsKICAgIGludCBuYW1lT2Zmc2V0ID0gcG9wKCk7CiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKE51bGxWYWx1ZS5NZXRhZGF0YSk7CiAgICBjaGVja0VtcHR5KG1peGluVG9rZW4uY2hhck9mZnNldCk7CiAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBsaWJyYXJ5LmVuZE5lc3RlZERlY2xhcmF0aW9uKAogICAgICAgICAgRGVjbGFyYXRpb25LaW5kLm1peGluRGVjbGFyYXRpb24sICI8c3ludGF4LWVycm9yPiIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgc3RhcnRPZmZzZXQgPQogICAgICAgIG1ldGFkYXRhID09IG51bGwgPyBtaXhpblRva2VuLmNoYXJPZmZzZXQgOiBtZXRhZGF0YS5maXJzdC5jaGFyT2Zmc2V0OwogICAgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlOwogICAgaWYgKHN1cGVydHlwZUNvbnN0cmFpbnRzICE9IG51bGwgJiYgc3VwZXJ0eXBlQ29uc3RyYWludHMuaXNOb3RFbXB0eSkgewogICAgICBpZiAoc3VwZXJ0eXBlQ29uc3RyYWludHMubGVuZ3RoID09IDEpIHsKICAgICAgICBzdXBlcnR5cGUgPSBzdXBlcnR5cGVDb25zdHJhaW50cy5maXJzdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdXBlcnR5cGUgPSBuZXcgTWl4aW5BcHBsaWNhdGlvbkJ1aWxkZXIoCiAgICAgICAgICAgIHN1cGVydHlwZUNvbnN0cmFpbnRzLmZpcnN0LCBzdXBlcnR5cGVDb25zdHJhaW50cy5za2lwKDEpLnRvTGlzdCgpKTsKICAgICAgfQogICAgfQogICAgbGlicmFyeS5hZGRNaXhpbkRlY2xhcmF0aW9uKAogICAgICAgIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIG1peGluRGVjbGFyYXRpb25NYXNrLAogICAgICAgIG5hbWUsCiAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICBzdXBlcnR5cGUsCiAgICAgICAgaW50ZXJmYWNlcywKICAgICAgICBzdGFydE9mZnNldCwKICAgICAgICBuYW1lT2Zmc2V0LAogICAgICAgIGVuZFRva2VuLmNoYXJPZmZzZXQsCiAgICAgICAgLTEpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkV4dGVuc2lvbkRlY2xhcmF0aW9uKFRva2VuIGV4dGVuc2lvbktleXdvcmQsIFRva2VuIG5hbWVUb2tlbikgewogICAgYXNzZXJ0KGNoZWNrU3RhdGUoZXh0ZW5zaW9uS2V5d29yZCwKICAgICAgICBbVmFsdWVLaW5kLlR5cGVWYXJpYWJsZUxpc3RPck51bGwsIFZhbHVlS2luZC5NZXRhZGF0YUxpc3RPck51bGxdKSk7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkV4dGVuc2lvbkRlY2xhcmF0aW9uIik7CiAgICBsaWJyYXJ5LmJlZ2luTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgRGVjbGFyYXRpb25LaW5kLmV4dGVuc2lvbkRlY2xhcmF0aW9uLCAiZXh0ZW5zaW9uIik7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIGludCBvZmZzZXQgPSBuYW1lVG9rZW4/LmNoYXJPZmZzZXQgPz8gZXh0ZW5zaW9uS2V5d29yZC5jaGFyT2Zmc2V0OwogICAgU3RyaW5nIG5hbWUgPSBuYW1lVG9rZW4/LmxleGVtZSA/PwogICAgICAgIC8vIFN5bnRoZXNpemVkIG5hbWUgdXNlZCBpbnRlcm5hbGx5LgogICAgICAgICdleHRlbnNpb24jJHt1bm5hbWVkRXh0ZW5zaW9uQ291bnRlcisrfSc7CiAgICBwdXNoKG5hbWUpOwogICAgcHVzaChvZmZzZXQpOwogICAgcHVzaCh0eXBlVmFyaWFibGVzID8/IE51bGxWYWx1ZS5UeXBlVmFyaWFibGVzKTsKICAgIGxpYnJhcnkuY3VycmVudERlY2xhcmF0aW9uCiAgICAgICAgLnJlZ2lzdGVyRXh0ZW5zaW9uRGVjbGFyYXRpb24obmFtZSwgb2Zmc2V0LCB0eXBlVmFyaWFibGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRXh0ZW5zaW9uRGVjbGFyYXRpb24oCiAgICAgIFRva2VuIGV4dGVuc2lvbktleXdvcmQsIFRva2VuIG9uS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGFzc2VydChjaGVja1N0YXRlKGV4dGVuc2lvbktleXdvcmQsIFsKICAgICAgVmFsdWVLaW5kLlR5cGVCdWlsZGVyLAogICAgICBWYWx1ZUtpbmQuVHlwZVZhcmlhYmxlTGlzdE9yTnVsbCwKICAgICAgVmFsdWVLaW5kLkludGVnZXIsCiAgICAgIFZhbHVlS2luZC5OYW1lT3JOdWxsLAogICAgICBWYWx1ZUtpbmQuTWV0YWRhdGFMaXN0T3JOdWxsCiAgICBdKSk7CiAgICBkZWJ1Z0V2ZW50KCJlbmRFeHRlbnNpb25EZWNsYXJhdGlvbiIpOwogICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50ID0gZ2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQoZXh0ZW5zaW9uS2V5d29yZCk7CiAgICBUeXBlQnVpbGRlciBzdXBlcnR5cGUgPSBwb3AoKTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IHBvcChOdWxsVmFsdWUuVHlwZVZhcmlhYmxlcyk7CiAgICBpbnQgbmFtZU9mZnNldCA9IHBvcCgpOwogICAgU3RyaW5nIG5hbWUgPSBwb3AoTnVsbFZhbHVlLk5hbWUpOwogICAgaWYgKG5hbWUgPT0gbnVsbCkgewogICAgICBuYW1lT2Zmc2V0ID0gZXh0ZW5zaW9uS2V5d29yZC5jaGFyT2Zmc2V0OwogICAgICBuYW1lID0gJyRuYW1lT2Zmc2V0JzsKICAgIH0KICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcChOdWxsVmFsdWUuTWV0YWRhdGEpOwogICAgY2hlY2tFbXB0eShleHRlbnNpb25LZXl3b3JkLmNoYXJPZmZzZXQpOwogICAgaW50IHN0YXJ0T2Zmc2V0ID0gbWV0YWRhdGEgPT0gbnVsbAogICAgICAgID8gZXh0ZW5zaW9uS2V5d29yZC5jaGFyT2Zmc2V0CiAgICAgICAgOiBtZXRhZGF0YS5maXJzdC5jaGFyT2Zmc2V0OwogICAgbGlicmFyeS5hZGRFeHRlbnNpb25EZWNsYXJhdGlvbigKICAgICAgICBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgICBtZXRhZGF0YSwKICAgICAgICBleHRlbnNpb25EZWNsYXJhdGlvbk1hc2ssCiAgICAgICAgbmFtZSwKICAgICAgICB0eXBlVmFyaWFibGVzLAogICAgICAgIHN1cGVydHlwZSwKICAgICAgICBzdGFydE9mZnNldCwKICAgICAgICBuYW1lT2Zmc2V0LAogICAgICAgIGVuZFRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgUHJvY2VkdXJlS2luZCBjb21wdXRlUHJvY2VkdXJlS2luZChUb2tlbiB0b2tlbikgewogICAgaWYgKHRva2VuID09IG51bGwpIHJldHVybiBQcm9jZWR1cmVLaW5kLk1ldGhvZDsKICAgIGlmIChvcHRpb25hbCgiZ2V0IiwgdG9rZW4pKSByZXR1cm4gUHJvY2VkdXJlS2luZC5HZXR0ZXI7CiAgICBpZiAob3B0aW9uYWwoInNldCIsIHRva2VuKSkgcmV0dXJuIFByb2NlZHVyZUtpbmQuU2V0dGVyOwogICAgcmV0dXJuIHVuaGFuZGxlZCgKICAgICAgICB0b2tlbi5sZXhlbWUsICJjb21wdXRlUHJvY2VkdXJlS2luZCIsIHRva2VuLmNoYXJPZmZzZXQsIHVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVG9wTGV2ZWxNZXRob2QoVG9rZW4gbGFzdENvbnN1bWVkLCBUb2tlbiBleHRlcm5hbFRva2VuKSB7CiAgICBsaWJyYXJ5LmJlZ2luTmVzdGVkRGVjbGFyYXRpb24oRGVjbGFyYXRpb25LaW5kLnRvcExldmVsTWV0aG9kLCAiI21ldGhvZCIsCiAgICAgICAgaGFzTWVtYmVyczogZmFsc2UpOwogICAgcHVzaChleHRlcm5hbFRva2VuICE9IG51bGwgPyBleHRlcm5hbE1hc2sgOiAwKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVG9wTGV2ZWxNZXRob2QoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZ2V0T3JTZXQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRUb3BMZXZlbE1ldGhvZCIpOwogICAgTWV0aG9kQm9keSBraW5kID0gcG9wKCk7CiAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMgPSBwb3AoKTsKICAgIGludCBmb3JtYWxzT2Zmc2V0ID0gcG9wKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIGludCBjaGFyT2Zmc2V0ID0gcG9wKCk7CiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgVHlwZUJ1aWxkZXIgcmV0dXJuVHlwZSA9IHBvcCgpOwogICAgYm9vbCBpc0Fic3RyYWN0ID0ga2luZCA9PSBNZXRob2RCb2R5LkFic3RyYWN0OwogICAgaWYgKGdldE9yU2V0ICE9IG51bGwgJiYgb3B0aW9uYWwoInNldCIsIGdldE9yU2V0KSkgewogICAgICBpZiAoZm9ybWFscyA9PSBudWxsIHx8IGZvcm1hbHMubGVuZ3RoICE9IDEpIHsKICAgICAgICAvLyBUaGlzIGlzbid0IGFic3RyYWN0IGFzIHdlJ2xsIGFkZCBhbiBlcnJvci1yZWNvdmVyeSBub2RlIGluCiAgICAgICAgLy8gW0JvZHlCdWlsZGVyLmZpbmlzaEZ1bmN0aW9uXS4KICAgICAgICBpc0Fic3RyYWN0ID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGludCBtb2RpZmllcnMgPSBwb3AoKTsKICAgIGlmIChpc0Fic3RyYWN0KSB7CiAgICAgIG1vZGlmaWVycyB8PSBhYnN0cmFjdE1hc2s7CiAgICB9CiAgICBpZiAobmF0aXZlTWV0aG9kTmFtZSAhPSBudWxsKSB7CiAgICAgIG1vZGlmaWVycyB8PSBleHRlcm5hbE1hc2s7CiAgICB9CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGNoZWNrRW1wdHkoYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0KTsKICAgIGxpYnJhcnkKICAgICAgICAuZW5kTmVzdGVkRGVjbGFyYXRpb24oRGVjbGFyYXRpb25LaW5kLnRvcExldmVsTWV0aG9kLCAiI21ldGhvZCIpCiAgICAgICAgLnJlc29sdmVUeXBlcyh0eXBlVmFyaWFibGVzLCBsaWJyYXJ5KTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSByZXR1cm47CiAgICBmaW5hbCBpbnQgc3RhcnRDaGFyT2Zmc2V0ID0KICAgICAgICBtZXRhZGF0YSA9PSBudWxsID8gYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0IDogbWV0YWRhdGEuZmlyc3QuY2hhck9mZnNldDsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGJlZ2luVG9rZW4pOwogICAgbGlicmFyeS5hZGRQcm9jZWR1cmUoCiAgICAgICAgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgbW9kaWZpZXJzLAogICAgICAgIHJldHVyblR5cGUsCiAgICAgICAgbmFtZSwKICAgICAgICB0eXBlVmFyaWFibGVzLAogICAgICAgIGZvcm1hbHMsCiAgICAgICAgY29tcHV0ZVByb2NlZHVyZUtpbmQoZ2V0T3JTZXQpLAogICAgICAgIHN0YXJ0Q2hhck9mZnNldCwKICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgIGZvcm1hbHNPZmZzZXQsCiAgICAgICAgZW5kVG9rZW4uY2hhck9mZnNldCwKICAgICAgICBuYXRpdmVNZXRob2ROYW1lLAogICAgICAgIGlzVG9wTGV2ZWw6IHRydWUpOwogICAgbmF0aXZlTWV0aG9kTmFtZSA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keShUb2tlbiBuYXRpdmVUb2tlbiwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYXRpdmVGdW5jdGlvbkJvZHkiKTsKICAgIGlmIChuYXRpdmVNZXRob2ROYW1lICE9IG51bGwpIHsKICAgICAgcHVzaChNZXRob2RCb2R5LlJlZ3VsYXIpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChNZXRob2RCb2R5LkFic3RyYWN0KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5SWdub3JlZChUb2tlbiBuYXRpdmVUb2tlbiwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYXRpdmVGdW5jdGlvbkJvZHlJZ25vcmVkIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWQoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgaWYgKCFlbmFibGVOYXRpdmUpIHsKICAgICAgc3VwZXIuaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIG1lc3NhZ2VFeHBlY3RlZEJsb2NrVG9Ta2lwLCBuYXRpdmVUb2tlbiwgbmF0aXZlVG9rZW4pOwogICAgfQogICAgcHVzaChNZXRob2RCb2R5LlJlZ3VsYXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0Z1bmN0aW9uQm9keShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9GdW5jdGlvbkJvZHkiKTsKICAgIGlmIChuYXRpdmVNZXRob2ROYW1lICE9IG51bGwpIHsKICAgICAgcHVzaChNZXRob2RCb2R5LlJlZ3VsYXIpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChNZXRob2RCb2R5LkFic3RyYWN0KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRnVuY3Rpb25Cb2R5U2tpcHBlZChUb2tlbiB0b2tlbiwgYm9vbCBpc0V4cHJlc3Npb25Cb2R5KSB7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVGdW5jdGlvbkJvZHlTa2lwcGVkIik7CiAgICBwdXNoKE1ldGhvZEJvZHkuUmVndWxhcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTWV0aG9kKFRva2VuIGV4dGVybmFsVG9rZW4sIFRva2VuIHN0YXRpY1Rva2VuLCBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwKICAgICAgVG9rZW4gdmFyRmluYWxPckNvbnN0LCBUb2tlbiBnZXRPclNldCwgVG9rZW4gbmFtZSkgewogICAgaW5Db25zdHJ1Y3RvciA9CiAgICAgICAgbmFtZT8ubGV4ZW1lID09IGxpYnJhcnkuY3VycmVudERlY2xhcmF0aW9uLm5hbWUgJiYgZ2V0T3JTZXQgPT0gbnVsbDsKICAgIExpc3Q8TW9kaWZpZXI+IG1vZGlmaWVyczsKICAgIGlmIChleHRlcm5hbFRva2VuICE9IG51bGwpIHsKICAgICAgbW9kaWZpZXJzID8/PSA8TW9kaWZpZXI+W107CiAgICAgIG1vZGlmaWVycy5hZGQoRXh0ZXJuYWwpOwogICAgfQogICAgaWYgKHN0YXRpY1Rva2VuICE9IG51bGwpIHsKICAgICAgaWYgKGluQ29uc3RydWN0b3IpIHsKICAgICAgICBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBtZXNzYWdlU3RhdGljQ29uc3RydWN0b3IsIHN0YXRpY1Rva2VuLCBzdGF0aWNUb2tlbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbW9kaWZpZXJzID8/PSA8TW9kaWZpZXI+W107CiAgICAgICAgbW9kaWZpZXJzLmFkZChTdGF0aWMpOwogICAgICB9CiAgICB9CiAgICBpZiAoY292YXJpYW50VG9rZW4gIT0gbnVsbCkgewogICAgICBtb2RpZmllcnMgPz89IDxNb2RpZmllcj5bXTsKICAgICAgbW9kaWZpZXJzLmFkZChDb3ZhcmlhbnQpOwogICAgfQogICAgaWYgKHZhckZpbmFsT3JDb25zdCAhPSBudWxsKSB7CiAgICAgIFN0cmluZyBsZXhlbWUgPSB2YXJGaW5hbE9yQ29uc3QubGV4ZW1lOwogICAgICBpZiAoaWRlbnRpY2FsKCd2YXInLCBsZXhlbWUpKSB7CiAgICAgICAgbW9kaWZpZXJzID8/PSA8TW9kaWZpZXI+W107CiAgICAgICAgbW9kaWZpZXJzLmFkZChWYXIpOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgnZmluYWwnLCBsZXhlbWUpKSB7CiAgICAgICAgbW9kaWZpZXJzID8/PSA8TW9kaWZpZXI+W107CiAgICAgICAgbW9kaWZpZXJzLmFkZChGaW5hbCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbW9kaWZpZXJzID8/PSA8TW9kaWZpZXI+W107CiAgICAgICAgbW9kaWZpZXJzLmFkZChDb25zdCk7CiAgICAgIH0KICAgIH0KICAgIHB1c2godmFyRmluYWxPckNvbnN0Py5jaGFyT2Zmc2V0ID8/IC0xKTsKICAgIHB1c2gobW9kaWZpZXJzID8/IE51bGxWYWx1ZS5Nb2RpZmllcnMpOwogICAgbGlicmFyeS5iZWdpbk5lc3RlZERlY2xhcmF0aW9uKAogICAgICAgIERlY2xhcmF0aW9uS2luZC5zdGF0aWNPckluc3RhbmNlTWV0aG9kT3JDb25zdHJ1Y3RvciwgIiNtZXRob2QiLAogICAgICAgIGhhc01lbWJlcnM6IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWV0aG9kKFRva2VuIGdldE9yU2V0LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBiZWdpblBhcmFtLAogICAgICBUb2tlbiBiZWdpbkluaXRpYWxpemVycywgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGFzc2VydChjaGVja1N0YXRlKGJlZ2luVG9rZW4sIFtWYWx1ZUtpbmQuTWV0aG9kQm9keV0pKTsKICAgIGRlYnVnRXZlbnQoIk1ldGhvZCIpOwogICAgTWV0aG9kQm9keSBib2R5S2luZCA9IHBvcCgpOwogICAgaWYgKGJvZHlLaW5kID09IE1ldGhvZEJvZHkuUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSkgewogICAgICAvLyBUaGlzIHdpbGwgY2F1c2UgYW4gZXJyb3IgbGF0ZXIuCiAgICAgIHBvcCgpOwogICAgfQogICAgYXNzZXJ0KGNoZWNrU3RhdGUoYmVnaW5Ub2tlbiwgWwogICAgICBWYWx1ZUtpbmQuRm9ybWFsc09yTnVsbCwKICAgICAgVmFsdWVLaW5kLkludGVnZXIsIC8vIGZvcm1hbHMgb2Zmc2V0CiAgICAgIFZhbHVlS2luZC5UeXBlVmFyaWFibGVMaXN0T3JOdWxsLAogICAgICBWYWx1ZUtpbmQuSW50ZWdlciwgLy8gbmFtZSBvZmZzZXQKICAgICAgdW5pb25PZktpbmRzKFsKICAgICAgICBWYWx1ZUtpbmQuTmFtZSwKICAgICAgICBWYWx1ZUtpbmQuUXVhbGlmaWVkTmFtZSwKICAgICAgICBWYWx1ZUtpbmQuT3BlcmF0b3IsCiAgICAgICAgVmFsdWVLaW5kLlBhcnNlclJlY292ZXJ5LAogICAgICBdKSwKICAgICAgVmFsdWVLaW5kLlR5cGVCdWlsZGVyT3JOdWxsLAogICAgICBWYWx1ZUtpbmQuTW9kaWZpZXJzT3JOdWxsLAogICAgICBWYWx1ZUtpbmQuSW50ZWdlciwgLy8gdmFyL2ZpbmFsL2NvbnN0IG9mZnNldAogICAgICBWYWx1ZUtpbmQuTWV0YWRhdGFMaXN0T3JOdWxsLAogICAgXSkpOwogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzID0gcG9wKCk7CiAgICBpbnQgZm9ybWFsc09mZnNldCA9IHBvcCgpOwogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzID0gcG9wKCk7CiAgICBpbnQgY2hhck9mZnNldCA9IHBvcCgpOwogICAgT2JqZWN0IG5hbWVPck9wZXJhdG9yID0gcG9wKCk7CiAgICBpZiAoT3BlcmF0b3Iuc3VidHJhY3QgPT0gbmFtZU9yT3BlcmF0b3IgJiYgZm9ybWFscyA9PSBudWxsKSB7CiAgICAgIG5hbWVPck9wZXJhdG9yID0gT3BlcmF0b3IudW5hcnlNaW51czsKICAgIH0KICAgIE9iamVjdCBuYW1lOwogICAgUHJvY2VkdXJlS2luZCBraW5kOwogICAgaWYgKG5hbWVPck9wZXJhdG9yIGlzIE9wZXJhdG9yKSB7CiAgICAgIG5hbWUgPSBvcGVyYXRvclRvU3RyaW5nKG5hbWVPck9wZXJhdG9yKTsKICAgICAga2luZCA9IFByb2NlZHVyZUtpbmQuT3BlcmF0b3I7CiAgICAgIGludCByZXF1aXJlZEFyZ3VtZW50Q291bnQgPSBvcGVyYXRvclJlcXVpcmVkQXJndW1lbnRDb3VudChuYW1lT3JPcGVyYXRvcik7CiAgICAgIGlmICgoZm9ybWFscz8ubGVuZ3RoID8/IDApICE9IHJlcXVpcmVkQXJndW1lbnRDb3VudCkgewogICAgICAgIHZhciB0ZW1wbGF0ZTsKICAgICAgICBzd2l0Y2ggKHJlcXVpcmVkQXJndW1lbnRDb3VudCkgewogICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDA7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgaWYgKE9wZXJhdG9yLnN1YnRyYWN0ID09IG5hbWVPck9wZXJhdG9yKSB7CiAgICAgICAgICAgICAgdGVtcGxhdGUgPSB0ZW1wbGF0ZU9wZXJhdG9yTWludXNQYXJhbWV0ZXJNaXNtYXRjaDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDE7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDI7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHVuaGFuZGxlZCgiJHJlcXVpcmVkQXJndW1lbnRDb3VudCIsICJvcGVyYXRvclJlcXVpcmVkQXJndW1lbnRDb3VudCIsCiAgICAgICAgICAgICAgICBjaGFyT2Zmc2V0LCB1cmkpOwogICAgICAgIH0KICAgICAgICBTdHJpbmcgc3RyaW5nID0gbmFtZTsKICAgICAgICBhZGRQcm9ibGVtKHRlbXBsYXRlLndpdGhBcmd1bWVudHMobmFtZSksIGNoYXJPZmZzZXQsIHN0cmluZy5sZW5ndGgpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gZm9ybWFscykgewogICAgICAgICAgICBpZiAoIWZvcm1hbC5pc1JlcXVpcmVkKSB7CiAgICAgICAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlT3BlcmF0b3JXaXRoT3B0aW9uYWxGb3JtYWxzLCBmb3JtYWwuY2hhck9mZnNldCwKICAgICAgICAgICAgICAgICAgZm9ybWFsLm5hbWUubGVuZ3RoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgbmFtZSA9IG5hbWVPck9wZXJhdG9yOwogICAgICBraW5kID0gY29tcHV0ZVByb2NlZHVyZUtpbmQoZ2V0T3JTZXQpOwogICAgfQogICAgVHlwZUJ1aWxkZXIgcmV0dXJuVHlwZSA9IHBvcCgpOwogICAgYm9vbCBpc0Fic3RyYWN0ID0gYm9keUtpbmQgPT0gTWV0aG9kQm9keS5BYnN0cmFjdDsKICAgIGlmIChnZXRPclNldCAhPSBudWxsICYmIG9wdGlvbmFsKCJzZXQiLCBnZXRPclNldCkpIHsKICAgICAgaWYgKGZvcm1hbHMgPT0gbnVsbCB8fCBmb3JtYWxzLmxlbmd0aCAhPSAxKSB7CiAgICAgICAgLy8gVGhpcyBpc24ndCBhYnN0cmFjdCBhcyB3ZSdsbCBhZGQgYW4gZXJyb3ItcmVjb3Zlcnkgbm9kZSBpbgogICAgICAgIC8vIFtCb2R5QnVpbGRlci5maW5pc2hGdW5jdGlvbl0uCiAgICAgICAgaXNBYnN0cmFjdCA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpbnQgbW9kaWZpZXJzID0gTW9kaWZpZXIudmFsaWRhdGUocG9wKCksIGlzQWJzdHJhY3Q6IGlzQWJzdHJhY3QpOwogICAgaWYgKG5hdGl2ZU1ldGhvZE5hbWUgIT0gbnVsbCkgewogICAgICBtb2RpZmllcnMgfD0gZXh0ZXJuYWxNYXNrOwogICAgfQogICAgaWYgKChtb2RpZmllcnMgJiBleHRlcm5hbE1hc2spICE9IDApIHsKICAgICAgbW9kaWZpZXJzICY9IH5hYnN0cmFjdE1hc2s7CiAgICB9CiAgICBib29sIGlzQ29uc3QgPSAobW9kaWZpZXJzICYgY29uc3RNYXNrKSAhPSAwOwogICAgaW50IHZhckZpbmFsT3JDb25zdE9mZnNldCA9IHBvcCgpOwogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbkNvbW1lbnQgPSBnZXREb2N1bWVudGF0aW9uQ29tbWVudChiZWdpblRva2VuKTsKCiAgICBEZWNsYXJhdGlvbkJ1aWxkZXIgZGVjbGFyYXRpb25CdWlsZGVyID0gbGlicmFyeS5lbmROZXN0ZWREZWNsYXJhdGlvbigKICAgICAgICBEZWNsYXJhdGlvbktpbmQuc3RhdGljT3JJbnN0YW5jZU1ldGhvZE9yQ29uc3RydWN0b3IsICIjbWV0aG9kIik7CiAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBkZWNsYXJhdGlvbkJ1aWxkZXIucmVzb2x2ZVR5cGVzKHR5cGVWYXJpYWJsZXMsIGxpYnJhcnkpOwogICAgICBuYXRpdmVNZXRob2ROYW1lID0gbnVsbDsKICAgICAgaW5Db25zdHJ1Y3RvciA9IGZhbHNlOwogICAgICBkZWNsYXJhdGlvbkJ1aWxkZXIucmVzb2x2ZVR5cGVzKHR5cGVWYXJpYWJsZXMsIGxpYnJhcnkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgU3RyaW5nIGNvbnN0cnVjdG9yTmFtZSA9CiAgICAgICAga2luZCA9PSBQcm9jZWR1cmVLaW5kLkdldHRlciB8fCBraW5kID09IFByb2NlZHVyZUtpbmQuU2V0dGVyCiAgICAgICAgICAgID8gbnVsbAogICAgICAgICAgICA6IGxpYnJhcnkuY29tcHV0ZUFuZFZhbGlkYXRlQ29uc3RydWN0b3JOYW1lKG5hbWUsIGNoYXJPZmZzZXQpOwogICAgaWYgKGNvbnN0cnVjdG9yTmFtZSA9PSBudWxsICYmCiAgICAgICAgKG1vZGlmaWVycyAmIHN0YXRpY01hc2spID09IDAgJiYKICAgICAgICBsaWJyYXJ5LmN1cnJlbnREZWNsYXJhdGlvbi5raW5kID09CiAgICAgICAgICAgIERlY2xhcmF0aW9uS2luZC5leHRlbnNpb25EZWNsYXJhdGlvbikgewogICAgICBEZWNsYXJhdGlvbkJ1aWxkZXIgZXh0ZW5zaW9uID0gbGlicmFyeS5jdXJyZW50RGVjbGFyYXRpb247CiAgICAgIE1hcDxUeXBlVmFyaWFibGVCdWlsZGVyLCBUeXBlQnVpbGRlcj4gc3Vic3RpdHV0aW9uOwogICAgICBpZiAoZXh0ZW5zaW9uLnR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICAgIC8vIFdlIHN5bnRoZXNpemUgdGhlIG5hbWVzIG9mIHRoZSBnZW5lcmF0ZWQgW1R5cGVQYXJhbWV0ZXJdcywgaS5lLgogICAgICAgIC8vIHJlbmFtZSAnVCcgdG8gJyNUJy4gV2UgY2Fubm90IGRvIGl0IG9uIHRoZSBidWlsZGVycyBiZWNhdXNlIHRoZWlyCiAgICAgICAgLy8gbmFtZXMgYXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBzY29wZS4KICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBIYW5kbGUgc2hhZG93aW5nIG9mIGV4dGVuc2lvbiB0eXBlIHZhcmlhYmxlcy4KICAgICAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHN5bnRoZXNpemVkVHlwZVZhcmlhYmxlcyA9IGxpYnJhcnkKICAgICAgICAgICAgLmNvcHlUeXBlVmFyaWFibGVzKGV4dGVuc2lvbi50eXBlVmFyaWFibGVzLCBkZWNsYXJhdGlvbkJ1aWxkZXIsCiAgICAgICAgICAgICAgICBzeW50aGVzaXplVHlwZVBhcmFtZXRlck5hbWVzOiB0cnVlKTsKICAgICAgICBzdWJzdGl0dXRpb24gPSB7fTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN5bnRoZXNpemVkVHlwZVZhcmlhYmxlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgc3Vic3RpdHV0aW9uW2V4dGVuc2lvbi50eXBlVmFyaWFibGVzW2ldXSA9CiAgICAgICAgICAgICAgbmV3IE5hbWVkVHlwZUJ1aWxkZXIuZnJvbVR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIoCiAgICAgICAgICAgICAgICAgIHN5bnRoZXNpemVkVHlwZVZhcmlhYmxlc1tpXSk7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICAgIHR5cGVWYXJpYWJsZXMgPSBzeW50aGVzaXplZFR5cGVWYXJpYWJsZXMuLmFkZEFsbCh0eXBlVmFyaWFibGVzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdHlwZVZhcmlhYmxlcyA9IHN5bnRoZXNpemVkVHlwZVZhcmlhYmxlczsKICAgICAgICB9CiAgICAgIH0KICAgICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBzeW50aGVzaXplZEZvcm1hbHMgPSBbXTsKICAgICAgVHlwZUJ1aWxkZXIgdGhpc1R5cGUgPSBleHRlbnNpb24uZXh0ZW5zaW9uVGhpc1R5cGU7CiAgICAgIGlmIChzdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgIHRoaXNUeXBlID0gdGhpc1R5cGUuc3Vic3Qoc3Vic3RpdHV0aW9uKTsKICAgICAgICBkZWNsYXJhdGlvbkJ1aWxkZXIuYWRkVHlwZShuZXcgVW5yZXNvbHZlZFR5cGUodGhpc1R5cGUsIC0xLCBudWxsKSk7CiAgICAgIH0KICAgICAgc3ludGhlc2l6ZWRGb3JtYWxzLmFkZChuZXcgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcigKICAgICAgICAgIG51bGwsIGZpbmFsTWFzaywgdGhpc1R5cGUsICIjdGhpcyIsIG51bGwsIGNoYXJPZmZzZXQpKTsKICAgICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICAgIHN5bnRoZXNpemVkRm9ybWFscy5hZGRBbGwoZm9ybWFscyk7CiAgICAgIH0KICAgICAgZm9ybWFscyA9IHN5bnRoZXNpemVkRm9ybWFsczsKICAgIH0KCiAgICBkZWNsYXJhdGlvbkJ1aWxkZXIucmVzb2x2ZVR5cGVzKHR5cGVWYXJpYWJsZXMsIGxpYnJhcnkpOwogICAgaWYgKGNvbnN0cnVjdG9yTmFtZSAhPSBudWxsKSB7CiAgICAgIGlmIChpc0NvbnN0ICYmIGJvZHlLaW5kICE9IE1ldGhvZEJvZHkuQWJzdHJhY3QpIHsKICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yV2l0aEJvZHksIHZhckZpbmFsT3JDb25zdE9mZnNldCwgNSk7CiAgICAgICAgbW9kaWZpZXJzICY9IH5jb25zdE1hc2s7CiAgICAgIH0KICAgICAgaWYgKHJldHVyblR5cGUgIT0gbnVsbCkgewogICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBSZXBvcnQgdGhpcyBlcnJvciBvbiB0aGUgcmV0dXJuIHR5cGUKICAgICAgICBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBtZXNzYWdlQ29uc3RydWN0b3JXaXRoUmV0dXJuVHlwZSwgYmVnaW5Ub2tlbiwgYmVnaW5Ub2tlbik7CiAgICAgICAgcmV0dXJuVHlwZSA9IG51bGw7CiAgICAgIH0KICAgICAgZmluYWwgaW50IHN0YXJ0Q2hhck9mZnNldCA9CiAgICAgICAgICBtZXRhZGF0YSA9PSBudWxsID8gYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0IDogbWV0YWRhdGEuZmlyc3QuY2hhck9mZnNldDsKICAgICAgbGlicmFyeS5hZGRDb25zdHJ1Y3RvcigKICAgICAgICAgIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgICBtb2RpZmllcnMsCiAgICAgICAgICByZXR1cm5UeXBlLAogICAgICAgICAgbmFtZSwKICAgICAgICAgIGNvbnN0cnVjdG9yTmFtZSwKICAgICAgICAgIHR5cGVWYXJpYWJsZXMsCiAgICAgICAgICBmb3JtYWxzLAogICAgICAgICAgc3RhcnRDaGFyT2Zmc2V0LAogICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgIGZvcm1hbHNPZmZzZXQsCiAgICAgICAgICBlbmRUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgbmF0aXZlTWV0aG9kTmFtZSwKICAgICAgICAgIGJlZ2luSW5pdGlhbGl6ZXJzOiBiZWdpbkluaXRpYWxpemVycyk7CiAgICB9IGVsc2UgewogICAgICBpZiAoaXNDb25zdCkgewogICAgICAgIGFkZFByb2JsZW0obWVzc2FnZUNvbnN0TWV0aG9kLCB2YXJGaW5hbE9yQ29uc3RPZmZzZXQsIDUpOwogICAgICAgIG1vZGlmaWVycyAmPSB+Y29uc3RNYXNrOwogICAgICB9CiAgICAgIGZpbmFsIGludCBzdGFydENoYXJPZmZzZXQgPQogICAgICAgICAgbWV0YWRhdGEgPT0gbnVsbCA/IGJlZ2luVG9rZW4uY2hhck9mZnNldCA6IG1ldGFkYXRhLmZpcnN0LmNoYXJPZmZzZXQ7CiAgICAgIGxpYnJhcnkuYWRkUHJvY2VkdXJlKAogICAgICAgICAgZG9jdW1lbnRhdGlvbkNvbW1lbnQsCiAgICAgICAgICBtZXRhZGF0YSwKICAgICAgICAgIG1vZGlmaWVycywKICAgICAgICAgIHJldHVyblR5cGUsCiAgICAgICAgICBuYW1lLAogICAgICAgICAgdHlwZVZhcmlhYmxlcywKICAgICAgICAgIGZvcm1hbHMsCiAgICAgICAgICBraW5kLAogICAgICAgICAgc3RhcnRDaGFyT2Zmc2V0LAogICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgIGZvcm1hbHNPZmZzZXQsCiAgICAgICAgICBlbmRUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgICAgbmF0aXZlTWV0aG9kTmFtZSwKICAgICAgICAgIGlzVG9wTGV2ZWw6IGZhbHNlKTsKICAgIH0KICAgIG5hdGl2ZU1ldGhvZE5hbWUgPSBudWxsOwogICAgaW5Db25zdHJ1Y3RvciA9IGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYW1lZE1peGluQXBwbGljYXRpb25XaXRoQ2xhdXNlKFRva2VuIHdpdGhLZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYW1lZE1peGluQXBwbGljYXRpb25XaXRoQ2xhdXNlIik7CiAgICBPYmplY3QgbWl4aW5zID0gcG9wKCk7CiAgICBPYmplY3Qgc3VwZXJ0eXBlID0gcG9wKCk7CiAgICBpZiAobWl4aW5zIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gobWl4aW5zKTsKICAgIH0gZWxzZSBpZiAoc3VwZXJ0eXBlIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2goc3VwZXJ0eXBlKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobGlicmFyeS5hZGRNaXhpbkFwcGxpY2F0aW9uKAogICAgICAgICAgc3VwZXJ0eXBlLCBtaXhpbnMsIHdpdGhLZXl3b3JkLmNoYXJPZmZzZXQpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTmFtZWRNaXhpbkFwcGxpY2F0aW9uKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGNsYXNzS2V5d29yZCwKICAgICAgVG9rZW4gZXF1YWxzLCBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImVuZE5hbWVkTWl4aW5BcHBsaWNhdGlvbiIpOwogICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50ID0gZ2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQoYmVnaW5Ub2tlbik7CiAgICBMaXN0PFR5cGVCdWlsZGVyPiBpbnRlcmZhY2VzID0gcG9wSWZOb3ROdWxsKGltcGxlbWVudHNLZXl3b3JkKTsKICAgIE9iamVjdCBtaXhpbkFwcGxpY2F0aW9uID0gcG9wKCk7CiAgICBpbnQgbW9kaWZpZXJzID0gcG9wKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIGludCBjaGFyT2Zmc2V0ID0gcG9wKCk7CiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBjaGVja0VtcHR5KGJlZ2luVG9rZW4uY2hhck9mZnNldCk7CiAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSB8fCBtaXhpbkFwcGxpY2F0aW9uIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIGxpYnJhcnkuZW5kTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgICBEZWNsYXJhdGlvbktpbmQubmFtZWRNaXhpbkFwcGxpY2F0aW9uLCAiPHN5bnRheC1lcnJvcj4iKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGludCBzdGFydENoYXJPZmZzZXQgPSBiZWdpblRva2VuLmNoYXJPZmZzZXQ7CiAgICBpbnQgY2hhckVuZE9mZnNldCA9IGVuZFRva2VuLmNoYXJPZmZzZXQ7CiAgICBsaWJyYXJ5LmFkZE5hbWVkTWl4aW5BcHBsaWNhdGlvbigKICAgICAgICBkb2N1bWVudGF0aW9uQ29tbWVudCwKICAgICAgICBtZXRhZGF0YSwKICAgICAgICBuYW1lLAogICAgICAgIHR5cGVWYXJpYWJsZXMsCiAgICAgICAgbW9kaWZpZXJzLAogICAgICAgIG1peGluQXBwbGljYXRpb24sCiAgICAgICAgaW50ZXJmYWNlcywKICAgICAgICBzdGFydENoYXJPZmZzZXQsCiAgICAgICAgY2hhck9mZnNldCwKICAgICAgICBjaGFyRW5kT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVHlwZUFyZ3VtZW50cyhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJUeXBlQXJndW1lbnRzIik7CiAgICBwdXNoKGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PFR5cGVCdWlsZGVyPigpLnBvcChzdGFjaywgY291bnQpID8/CiAgICAgICAgTnVsbFZhbHVlLlR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnZhbGlkVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiSW52YWxpZFR5cGVBcmd1bWVudHMiKTsKICAgIHBvcChOdWxsVmFsdWUuVHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVNjcmlwdChUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiU2NyaXB0Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vbk51bGxBc3NlcnRFeHByZXNzaW9uKFRva2VuIGJhbmcpIHsKICAgIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmVuYWJsZU5vbk51bGxhYmxlKSB7CiAgICAgIHJlcG9ydE5vbk51bGxBc3NlcnRFeHByZXNzaW9uTm90RW5hYmxlZChiYW5nKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVHlwZShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBxdWVzdGlvbk1hcmspIHsKICAgIGRlYnVnRXZlbnQoIlR5cGUiKTsKICAgIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmVuYWJsZU5vbk51bGxhYmxlKSB7CiAgICAgIHJlcG9ydEVycm9ySWZOdWxsYWJsZVR5cGUocXVlc3Rpb25NYXJrKTsKICAgIH0KICAgIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cyA9IHBvcCgpOwogICAgaW50IGNoYXJPZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChsaWJyYXJ5LmFkZE5hbWVkVHlwZShuYW1lLCBhcmd1bWVudHMsIGNoYXJPZmZzZXQpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVHlwZUxpc3QoaW50IGNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJUeXBlTGlzdCIpOwogICAgcHVzaChjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxOYW1lZFR5cGVCdWlsZGVyPigpLnBvcChzdGFjaywgY291bnQpID8/CiAgICAgICAgbmV3IFBhcnNlclJlY292ZXJ5KC0xKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vVHlwZVZhcmlhYmxlcyhUb2tlbiB0b2tlbikgewogICAgc3VwZXIuaGFuZGxlTm9UeXBlVmFyaWFibGVzKHRva2VuKTsKICAgIGluQ29uc3RydWN0b3JOYW1lID0gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVZvaWRLZXl3b3JkKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJWb2lkS2V5d29yZCIpOwogICAgcHVzaChsaWJyYXJ5LmFkZFZvaWRUeXBlKHRva2VuLmNoYXJPZmZzZXQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JtYWxQYXJhbWV0ZXIoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCwgVG9rZW4gcmVxdWlyZWRUb2tlbiwKICAgICAgVG9rZW4gY292YXJpYW50VG9rZW4sIFRva2VuIHZhckZpbmFsT3JDb25zdCkgewogICAgLy8gVE9ETyhkYW5ydWJlbCk6IGhhbmRsZSByZXF1aXJlZCB0b2tlbgogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0Tm9uTnVsbGFibGVNb2RpZmllckVycm9yKHJlcXVpcmVkVG9rZW4pOwogICAgfQogICAgcHVzaCgoY292YXJpYW50VG9rZW4gIT0gbnVsbCA/IGNvdmFyaWFudE1hc2sgOiAwKSB8CiAgICAgICAgTW9kaWZpZXIudmFsaWRhdGVWYXJGaW5hbE9yQ29uc3QodmFyRmluYWxPckNvbnN0Py5sZXhlbWUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ybWFsUGFyYW1ldGVyKAogICAgICBUb2tlbiB0aGlzS2V5d29yZCwKICAgICAgVG9rZW4gcGVyaW9kQWZ0ZXJUaGlzLAogICAgICBUb2tlbiBuYW1lVG9rZW4sCiAgICAgIFRva2VuIGluaXRpYWxpemVyU3RhcnQsCiAgICAgIFRva2VuIGluaXRpYWxpemVyRW5kLAogICAgICBGb3JtYWxQYXJhbWV0ZXJLaW5kIGtpbmQsCiAgICAgIE1lbWJlcktpbmQgbWVtYmVyS2luZCkgewogICAgZGVidWdFdmVudCgiRm9ybWFsUGFyYW1ldGVyIik7CiAgICBpbnQgY2hhck9mZnNldCA9IHBvcCgpOwogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIFR5cGVCdWlsZGVyIHR5cGUgPSBudWxsSWZQYXJzZXJSZWNvdmVyeShwb3AoKSk7CiAgICBpbnQgbW9kaWZpZXJzID0gcG9wKCk7CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gobmFtZSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGxpYnJhcnkuYWRkRm9ybWFsUGFyYW1ldGVyKG1ldGFkYXRhLCBtb2RpZmllcnMsIHR5cGUsIG5hbWUsCiAgICAgICAgICB0aGlzS2V5d29yZCAhPSBudWxsLCBjaGFyT2Zmc2V0LCBpbml0aWFsaXplclN0YXJ0KSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbigpIHsKICAgIC8vIElnbm9yZWQgZm9yIG5vdy4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbigpIHsKICAgIGRlYnVnRXZlbnQoIkZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb24iKTsKICAgIC8vIElnbm9yZWQgZm9yIG5vdy4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVmFsdWVkRm9ybWFsUGFyYW1ldGVyKFRva2VuIGVxdWFscywgVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlZhbHVlZEZvcm1hbFBhcmFtZXRlciIpOwogICAgLy8gSWdub3JlZCBmb3Igbm93LgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGb3JtYWxQYXJhbWV0ZXJXaXRob3V0VmFsdWUoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkZvcm1hbFBhcmFtZXRlcldpdGhvdXRWYWx1ZSIpOwogICAgLy8gSWdub3JlZCBmb3Igbm93LgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnMoCiAgICAgIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVycyIpOwogICAgRm9ybWFsUGFyYW1ldGVyS2luZCBraW5kID0gb3B0aW9uYWwoInsiLCBiZWdpblRva2VuKQogICAgICAgID8gRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbE5hbWVkCiAgICAgICAgOiBGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsUG9zaXRpb25hbDsKICAgIC8vIFdoZW4gcmVjb3ZlcmluZyBmcm9tIGFuIGVtcHR5IGxpc3Qgb2Ygb3B0aW9uYWwgYXJndW1lbnRzLCBjb3VudCBtYXkgYmUKICAgIC8vIDAuIEl0IG1pZ2h0IGJlIHNpbXBsZXIgaWYgdGhlIHBhcnNlciBkaWRuJ3QgY2FsbCB0aGlzIG1ldGhvZCBpbiB0aGF0CiAgICAvLyBjYXNlLCBob3dldmVyLCB0aGVuIFtiZWdpbk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVyc10gd291bGRuJ3QgYWx3YXlzIGJlCiAgICAvLyBtYXRjaGVkIGJ5IHRoaXMgbWV0aG9kLgogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBwYXJhbWV0ZXJzID0KICAgICAgICBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPigpLnBvcChzdGFjaywgY291bnQpOwogICAgaWYgKHBhcmFtZXRlcnMgPT0gbnVsbCkgewogICAgICBwdXNoKG5ldyBQYXJzZXJSZWNvdmVyeShvZmZzZXRGb3JUb2tlbihiZWdpblRva2VuKSkpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIHBhcmFtZXRlciBpbiBwYXJhbWV0ZXJzKSB7CiAgICAgICAgcGFyYW1ldGVyLmtpbmQgPSBraW5kOwogICAgICB9CiAgICAgIHB1c2gocGFyYW1ldGVycyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvcm1hbFBhcmFtZXRlcnMoCiAgICAgIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgZGVidWdFdmVudCgiRm9ybWFsUGFyYW1ldGVycyIpOwogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzOwogICAgaWYgKGNvdW50ID09IDEpIHsKICAgICAgT2JqZWN0IGxhc3QgPSBwb3AoKTsKICAgICAgaWYgKGxhc3QgaXMgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPikgewogICAgICAgIGZvcm1hbHMgPSBsYXN0OwogICAgICB9IGVsc2UgaWYgKGxhc3QgaXMhIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgICAgYXNzZXJ0KGxhc3QgIT0gbnVsbCk7CiAgICAgICAgZm9ybWFscyA9IG5ldyBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+KDEpOwogICAgICAgIGZvcm1hbHNbMF0gPSBsYXN0OwogICAgICB9CiAgICB9IGVsc2UgaWYgKGNvdW50ID4gMSkgewogICAgICBPYmplY3QgbGFzdCA9IHBvcCgpOwogICAgICBjb3VudC0tOwogICAgICBpZiAobGFzdCBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICAgIGRpc2NhcmQoY291bnQpOwogICAgICB9IGVsc2UgaWYgKGxhc3QgaXMgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPikgewogICAgICAgIGZvcm1hbHMgPSBjb25zdCBGaXhlZE51bGxhYmxlTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPigpCiAgICAgICAgICAgIC5wb3BQYWRkZWQoc3RhY2ssIGNvdW50LCBsYXN0Lmxlbmd0aCk7CiAgICAgICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICAgICAgZm9ybWFscy5zZXRSYW5nZShjb3VudCwgZm9ybWFscy5sZW5ndGgsIGxhc3QpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBmb3JtYWxzID0gY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4oKQogICAgICAgICAgICAucG9wUGFkZGVkKHN0YWNrLCBjb3VudCwgMSk7CiAgICAgICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICAgICAgZm9ybWFsc1tjb3VudF0gPSBsYXN0OwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICBhc3NlcnQoZm9ybWFscy5pc05vdEVtcHR5KTsKICAgICAgaWYgKGZvcm1hbHMubGVuZ3RoID09IDIpIHsKICAgICAgICAvLyBUaGUgbmFtZSBtYXkgYmUgbnVsbCBmb3IgZ2VuZXJhbGl6ZWQgZnVuY3Rpb24gdHlwZXMuCiAgICAgICAgaWYgKGZvcm1hbHNbMF0ubmFtZSAhPSBudWxsICYmIGZvcm1hbHNbMF0ubmFtZSA9PSBmb3JtYWxzWzFdLm5hbWUpIHsKICAgICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZS53aXRoQXJndW1lbnRzKGZvcm1hbHNbMV0ubmFtZSksCiAgICAgICAgICAgICAgZm9ybWFsc1sxXS5jaGFyT2Zmc2V0LAogICAgICAgICAgICAgIGZvcm1hbHNbMV0ubmFtZS5sZW5ndGgsCiAgICAgICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlCiAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZm9ybWFsc1sxXS5uYW1lKQogICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgIHVyaSwgZm9ybWFsc1swXS5jaGFyT2Zmc2V0LCBmb3JtYWxzWzBdLm5hbWUubGVuZ3RoKQogICAgICAgICAgICAgIF0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChmb3JtYWxzLmxlbmd0aCA+IDIpIHsKICAgICAgICBNYXA8U3RyaW5nLCBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBzZWVuTmFtZXMgPQogICAgICAgICAgICA8U3RyaW5nLCBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPnt9OwogICAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gZm9ybWFscykgewogICAgICAgICAgaWYgKGZvcm1hbC5uYW1lID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgICAgaWYgKHNlZW5OYW1lcy5jb250YWluc0tleShmb3JtYWwubmFtZSkpIHsKICAgICAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZFBhcmFtZXRlck5hbWUud2l0aEFyZ3VtZW50cyhmb3JtYWwubmFtZSksCiAgICAgICAgICAgICAgICBmb3JtYWwuY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGZvcm1hbC5uYW1lLmxlbmd0aCwKICAgICAgICAgICAgICAgIGNvbnRleHQ6IFsKICAgICAgICAgICAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlCiAgICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhmb3JtYWwubmFtZSkKICAgICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24odXJpLCBzZWVuTmFtZXNbZm9ybWFsLm5hbWVdLmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vlbk5hbWVzW2Zvcm1hbC5uYW1lXS5uYW1lLmxlbmd0aCkKICAgICAgICAgICAgICAgIF0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2Vlbk5hbWVzW2Zvcm1hbC5uYW1lXSA9IGZvcm1hbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHB1c2goYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0KTsKICAgIHB1c2goZm9ybWFscyA/PyBOdWxsVmFsdWUuRm9ybWFsUGFyYW1ldGVycyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vRm9ybWFsUGFyYW1ldGVycyhUb2tlbiB0b2tlbiwgTWVtYmVyS2luZCBraW5kKSB7CiAgICBwdXNoKHRva2VuLmNoYXJPZmZzZXQpOwogICAgc3VwZXIuaGFuZGxlTm9Gb3JtYWxQYXJhbWV0ZXJzKHRva2VuLCBraW5kKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQXNzZXJ0KFRva2VuIGFzc2VydEtleXdvcmQsIEFzc2VydCBraW5kLCBUb2tlbiBsZWZ0UGFyZW50aGVzaXMsCiAgICAgIFRva2VuIGNvbW1hVG9rZW4sIFRva2VuIHNlbWljb2xvblRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJBc3NlcnQiKTsKICAgIC8vIERvIG5vdGhpbmcKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRW51bShUb2tlbiBlbnVtS2V5d29yZCwgVG9rZW4gbGVmdEJyYWNlLCBpbnQgY291bnQpIHsKICAgIGRlYnVnRXZlbnQoIkVudW0iKTsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGVudW1LZXl3b3JkKTsKICAgIExpc3Q8RW51bUNvbnN0YW50SW5mbz4gZW51bUNvbnN0YW50SW5mb3MgPQogICAgICAgIGNvbnN0IEZpeGVkTnVsbGFibGVMaXN0PEVudW1Db25zdGFudEluZm8+KCkucG9wKHN0YWNrLCBjb3VudCk7CiAgICBpbnQgY2hhck9mZnNldCA9IHBvcCgpOyAvLyBpZGVudGlmaWVyIGNoYXIgb2Zmc2V0LgogICAgaW50IHN0YXJ0Q2hhck9mZnNldCA9IGVudW1LZXl3b3JkLmNoYXJPZmZzZXQ7CiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gcG9wKCk7CiAgICBjaGVja0VtcHR5KGVudW1LZXl3b3JkLmNoYXJPZmZzZXQpOwogICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHJldHVybjsKICAgIGxpYnJhcnkuYWRkRW51bShkb2N1bWVudGF0aW9uQ29tbWVudCwgbWV0YWRhdGEsIG5hbWUsIGVudW1Db25zdGFudEluZm9zLAogICAgICAgIHN0YXJ0Q2hhck9mZnNldCwgY2hhck9mZnNldCwgbGVmdEJyYWNlPy5lbmRHcm91cD8uY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRnVuY3Rpb25UeXBlQWxpYXMoVG9rZW4gdG9rZW4pIHsKICAgIGxpYnJhcnkuYmVnaW5OZXN0ZWREZWNsYXJhdGlvbihEZWNsYXJhdGlvbktpbmQudHlwZWRlZiwgIiN0eXBlZGVmIiwKICAgICAgICBoYXNNZW1iZXJzOiBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRnVuY3Rpb25UeXBlKFRva2VuIGJlZ2luVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoImJlZ2luRnVuY3Rpb25UeXBlIik7CiAgICBsaWJyYXJ5LmJlZ2luTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgRGVjbGFyYXRpb25LaW5kLmZ1bmN0aW9uVHlwZSwgIiNmdW5jdGlvbl90eXBlIiwKICAgICAgICBoYXNNZW1iZXJzOiBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlcihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5GdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyIik7CiAgICBsaWJyYXJ5LmJlZ2luTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgRGVjbGFyYXRpb25LaW5kLmZ1bmN0aW9uVHlwZSwgIiNmdW5jdGlvbl90eXBlIiwKICAgICAgICBoYXNNZW1iZXJzOiBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZ1bmN0aW9uVHlwZShUb2tlbiBmdW5jdGlvblRva2VuLCBUb2tlbiBxdWVzdGlvbk1hcmspIHsKICAgIGRlYnVnRXZlbnQoIkZ1bmN0aW9uVHlwZSIpOwogICAgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuZW5hYmxlTm9uTnVsbGFibGUpIHsKICAgICAgcmVwb3J0RXJyb3JJZk51bGxhYmxlVHlwZShxdWVzdGlvbk1hcmspOwogICAgfQogICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzID0gcG9wKCk7CiAgICBwb3AoKTsgLy8gZm9ybWFscyBvZmZzZXQKICAgIFR5cGVCdWlsZGVyIHJldHVyblR5cGUgPSBwb3AoKTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcyA9IHBvcCgpOwogICAgcHVzaChsaWJyYXJ5LmFkZEZ1bmN0aW9uVHlwZSgKICAgICAgICByZXR1cm5UeXBlLCB0eXBlVmFyaWFibGVzLCBmb3JtYWxzLCBmdW5jdGlvblRva2VuLmNoYXJPZmZzZXQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlcihUb2tlbiBuYW1lVG9rZW4sIFRva2VuIHF1ZXN0aW9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJGdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyIik7CiAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMgPSBwb3AoKTsKICAgIGludCBmb3JtYWxzT2Zmc2V0ID0gcG9wKCk7CiAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlID0gcG9wKCk7CiAgICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmVuYWJsZU5vbk51bGxhYmxlKSB7CiAgICAgIHJlcG9ydEVycm9ySWZOdWxsYWJsZVR5cGUocXVlc3Rpb24pOwogICAgfQogICAgcHVzaChsaWJyYXJ5LmFkZEZ1bmN0aW9uVHlwZSgKICAgICAgICByZXR1cm5UeXBlLCB0eXBlVmFyaWFibGVzLCBmb3JtYWxzLCBmb3JtYWxzT2Zmc2V0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZ1bmN0aW9uVHlwZUFsaWFzKAogICAgICBUb2tlbiB0eXBlZGVmS2V5d29yZCwgVG9rZW4gZXF1YWxzLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiZW5kRnVuY3Rpb25UeXBlQWxpYXMiKTsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KHR5cGVkZWZLZXl3b3JkKTsKICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlczsKICAgIE9iamVjdCBuYW1lOwogICAgaW50IGNoYXJPZmZzZXQ7CiAgICBGdW5jdGlvblR5cGVCdWlsZGVyIGZ1bmN0aW9uVHlwZTsKICAgIGlmIChlcXVhbHMgPT0gbnVsbCkgewogICAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMgPSBwb3AoKTsKICAgICAgcG9wKCk7IC8vIGZvcm1hbHMgb2Zmc2V0CiAgICAgIHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgICAgY2hhck9mZnNldCA9IHBvcCgpOwogICAgICBuYW1lID0gcG9wKCk7CiAgICAgIFR5cGVCdWlsZGVyIHJldHVyblR5cGUgPSBwb3AoKTsKICAgICAgLy8gQ3JlYXRlIGEgbmVzdGVkIGRlY2xhcmF0aW9uIHRoYXQgaXMgZW5kZWQgYmVsb3cgYnkKICAgICAgLy8gYGxpYnJhcnkuYWRkRnVuY3Rpb25UeXBlYC4KICAgICAgaWYgKG5hbWUgaXMgUGFyc2VyUmVjb3ZlcnkpIHsKICAgICAgICBwb3AoKTsgLy8gTWV0YWRhdGEuCiAgICAgICAgbGlicmFyeS5lbmROZXN0ZWREZWNsYXJhdGlvbihEZWNsYXJhdGlvbktpbmQudHlwZWRlZiwgIjxzeW50YXgtZXJyb3I+Iik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGxpYnJhcnkuYmVnaW5OZXN0ZWREZWNsYXJhdGlvbigKICAgICAgICAgIERlY2xhcmF0aW9uS2luZC5mdW5jdGlvblR5cGUsICIjZnVuY3Rpb25fdHlwZSIsCiAgICAgICAgICBoYXNNZW1iZXJzOiBmYWxzZSk7CiAgICAgIGZ1bmN0aW9uVHlwZSA9CiAgICAgICAgICBsaWJyYXJ5LmFkZEZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCBudWxsLCBmb3JtYWxzLCBjaGFyT2Zmc2V0KTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciB0eXBlID0gcG9wKCk7CiAgICAgIHR5cGVWYXJpYWJsZXMgPSBwb3AoKTsKICAgICAgY2hhck9mZnNldCA9IHBvcCgpOwogICAgICBuYW1lID0gcG9wKCk7CiAgICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgICAgcG9wKCk7IC8vIE1ldGFkYXRhLgogICAgICAgIGxpYnJhcnkuZW5kTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgICAgIERlY2xhcmF0aW9uS2luZC5mdW5jdGlvblR5cGUsICI8c3ludGF4LWVycm9yPiIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodHlwZSBpcyBGdW5jdGlvblR5cGVCdWlsZGVyKSB7CiAgICAgICAgLy8gVE9ETyhhaGUpOiBXZSBuZWVkIHRvIHN0YXJ0IGEgbmVzdGVkIGRlY2xhcmF0aW9uIHdoZW4gcGFyc2luZyB0aGUKICAgICAgICAvLyBmb3JtYWxzIGFuZCByZXR1cm4gdHlwZSBzbyB3ZSBjYW4gY29ycmVjdGx5IGJpbmQKICAgICAgICAvLyBgdHlwZS50eXBlVmFyaWFibGVzYC4gQSB0eXBlZGVmIGNhbiBoYXZlIHR5cGUgdmFyaWFibGVzLCBhbmQgYSBuZXcKICAgICAgICAvLyBmdW5jdGlvbiB0eXBlIGNhbiBhbHNvIGhhdmUgdHlwZSB2YXJpYWJsZXMgKHJlcHJlc2VudGluZyB0aGUgdHlwZSBvZgogICAgICAgIC8vIGEgZ2VuZXJpYyBmdW5jdGlvbikuCiAgICAgICAgZnVuY3Rpb25UeXBlID0gdHlwZTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUT0RPKGFoZSk6IEltcHJvdmUgdGhpcyBlcnJvciBtZXNzYWdlLgogICAgICAgIGFkZFByb2JsZW0obWVzc2FnZVR5cGVkZWZOb3RGdW5jdGlvbiwgZXF1YWxzLmNoYXJPZmZzZXQsIGVxdWFscy5sZW5ndGgpOwogICAgICB9CiAgICB9CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGNoZWNrRW1wdHkodHlwZWRlZktleXdvcmQuY2hhck9mZnNldCk7CiAgICBsaWJyYXJ5LmFkZEZ1bmN0aW9uVHlwZUFsaWFzKGRvY3VtZW50YXRpb25Db21tZW50LCBtZXRhZGF0YSwgbmFtZSwKICAgICAgICB0eXBlVmFyaWFibGVzLCBmdW5jdGlvblR5cGUsIGNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUb3BMZXZlbEZpZWxkcygKICAgICAgVG9rZW4gc3RhdGljVG9rZW4sCiAgICAgIFRva2VuIGNvdmFyaWFudFRva2VuLAogICAgICBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwKICAgICAgaW50IGNvdW50LAogICAgICBUb2tlbiBiZWdpblRva2VuLAogICAgICBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiZW5kVG9wTGV2ZWxGaWVsZHMiKTsKICAgIC8vIFRPRE8oZGFucnViZWwpOiBoYW5kbGUgTk5CRCAnbGF0ZScgbW9kaWZpZXIKICAgIGlmICghbGlicmFyeS5sb2FkZXIudGFyZ2V0LmVuYWJsZU5vbk51bGxhYmxlKSB7CiAgICAgIHJlcG9ydE5vbk51bGxhYmxlTW9kaWZpZXJFcnJvcihsYXRlVG9rZW4pOwogICAgfQogICAgTGlzdDxGaWVsZEluZm8+IGZpZWxkSW5mb3MgPSBwb3BGaWVsZEluZm9zKGNvdW50KTsKICAgIFR5cGVCdWlsZGVyIHR5cGUgPSBudWxsSWZQYXJzZXJSZWNvdmVyeShwb3AoKSk7CiAgICBpbnQgbW9kaWZpZXJzID0gKHN0YXRpY1Rva2VuICE9IG51bGwgPyBzdGF0aWNNYXNrIDogMCkgfAogICAgICAgIChjb3ZhcmlhbnRUb2tlbiAhPSBudWxsID8gY292YXJpYW50TWFzayA6IDApIHwKICAgICAgICBNb2RpZmllci52YWxpZGF0ZVZhckZpbmFsT3JDb25zdCh2YXJGaW5hbE9yQ29uc3Q/LmxleGVtZSk7CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGNoZWNrRW1wdHkoYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0KTsKICAgIGlmIChmaWVsZEluZm9zID09IG51bGwpIHJldHVybjsKICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGJlZ2luVG9rZW4pOwogICAgbGlicmFyeS5hZGRGaWVsZHMoCiAgICAgICAgZG9jdW1lbnRhdGlvbkNvbW1lbnQsIG1ldGFkYXRhLCBtb2RpZmllcnMsIHR5cGUsIGZpZWxkSW5mb3MpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGaWVsZHMoVG9rZW4gc3RhdGljVG9rZW4sIFRva2VuIGNvdmFyaWFudFRva2VuLCBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiRmllbGRzIik7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogaGFuZGxlIE5OQkQgJ2xhdGUnIG1vZGlmaWVyCiAgICBpZiAoIWxpYnJhcnkubG9hZGVyLnRhcmdldC5lbmFibGVOb25OdWxsYWJsZSkgewogICAgICByZXBvcnROb25OdWxsYWJsZU1vZGlmaWVyRXJyb3IobGF0ZVRva2VuKTsKICAgIH0KICAgIExpc3Q8RmllbGRJbmZvPiBmaWVsZEluZm9zID0gcG9wRmllbGRJbmZvcyhjb3VudCk7CiAgICBUeXBlQnVpbGRlciB0eXBlID0gcG9wKCk7CiAgICBpbnQgbW9kaWZpZXJzID0gKHN0YXRpY1Rva2VuICE9IG51bGwgPyBzdGF0aWNNYXNrIDogMCkgfAogICAgICAgIChjb3ZhcmlhbnRUb2tlbiAhPSBudWxsID8gY292YXJpYW50TWFzayA6IDApIHwKICAgICAgICBNb2RpZmllci52YWxpZGF0ZVZhckZpbmFsT3JDb25zdCh2YXJGaW5hbE9yQ29uc3Q/LmxleGVtZSk7CiAgICBpZiAoc3RhdGljVG9rZW4gPT0gbnVsbCAmJiBtb2RpZmllcnMgJiBjb25zdE1hc2sgIT0gMCkgewogICAgICAvLyBJdCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvciBpZiBhbiBpbnN0YW5jZSB2YXJpYWJsZSBpcyBkZWNsYXJlZCB0byBiZQogICAgICAvLyBjb25zdGFudC4KICAgICAgYWRkUHJvYmxlbShtZXNzYWdlQ29uc3RJbnN0YW5jZUZpZWxkLCB2YXJGaW5hbE9yQ29uc3QuY2hhck9mZnNldCwKICAgICAgICAgIHZhckZpbmFsT3JDb25zdC5sZW5ndGgpOwogICAgICBtb2RpZmllcnMgJj0gfmNvbnN0TWFzazsKICAgIH0KICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSA9IHBvcCgpOwogICAgaWYgKGZpZWxkSW5mb3MgPT0gbnVsbCkgcmV0dXJuOwogICAgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50ID0gZ2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQoYmVnaW5Ub2tlbik7CiAgICBsaWJyYXJ5LmFkZEZpZWxkcygKICAgICAgICBkb2N1bWVudGF0aW9uQ29tbWVudCwgbWV0YWRhdGEsIG1vZGlmaWVycywgdHlwZSwgZmllbGRJbmZvcyk7CiAgfQoKICBMaXN0PEZpZWxkSW5mbz4gcG9wRmllbGRJbmZvcyhpbnQgY291bnQpIHsKICAgIGlmIChjb3VudCA9PSAwKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8RmllbGRJbmZvPiBmaWVsZEluZm9zID0gbmV3IExpc3Q8RmllbGRJbmZvPihjb3VudCk7CiAgICBib29sIGlzUGFyc2VyUmVjb3ZlcnkgPSBmYWxzZTsKICAgIGZvciAoaW50IGkgPSBjb3VudCAtIDE7IGkgIT0gLTE7IGktLSkgewogICAgICBpbnQgY2hhckVuZE9mZnNldCA9IHBvcCgpOwogICAgICBUb2tlbiBiZWZvcmVMYXN0ID0gcG9wKCk7CiAgICAgIFRva2VuIGluaXRpYWxpemVyVG9rZW5Gb3JJbmZlcmVuY2UgPSBwb3AoKTsKICAgICAgaW50IGNoYXJPZmZzZXQgPSBwb3AoKTsKICAgICAgT2JqZWN0IG5hbWUgPSBwb3AoTnVsbFZhbHVlLklkZW50aWZpZXIpOwogICAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICAgIGlzUGFyc2VyUmVjb3ZlcnkgPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIGZpZWxkSW5mb3NbaV0gPSBuZXcgRmllbGRJbmZvKG5hbWUsIGNoYXJPZmZzZXQsCiAgICAgICAgICAgIGluaXRpYWxpemVyVG9rZW5Gb3JJbmZlcmVuY2UsIGJlZm9yZUxhc3QsIGNoYXJFbmRPZmZzZXQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaXNQYXJzZXJSZWNvdmVyeSA/IG51bGwgOiBmaWVsZEluZm9zOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblR5cGVWYXJpYWJsZShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiYmVnaW5UeXBlVmFyaWFibGUiKTsKICAgIGludCBjaGFyT2Zmc2V0ID0gcG9wKCk7CiAgICBPYmplY3QgbmFtZSA9IHBvcCgpOwogICAgLy8gVE9ETyhwYXVsYmVycnkpOiB0eXBlIHZhcmlhYmxlIG1ldGFkYXRhIHNob3VsZCBub3QgYmUgaWdub3JlZC4gIFNlZQogICAgLy8gZGFydGJ1Zy5jb20vMjg5ODEuCiAgICAvKiBMaXN0PE1ldGFkYXRhQnVpbGRlcjxUeXBlQnVpbGRlcj4+IG1ldGFkYXRhID0gKi8gcG9wKCk7CiAgICBpZiAobmFtZSBpcyBQYXJzZXJSZWNvdmVyeSkgewogICAgICBwdXNoKG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChsaWJyYXJ5LmFkZFR5cGVWYXJpYWJsZShuYW1lLCBudWxsLCBjaGFyT2Zmc2V0KSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVR5cGVWYXJpYWJsZXNEZWZpbmVkKFRva2VuIHRva2VuLCBpbnQgY291bnQpIHsKICAgIGRlYnVnRXZlbnQoIlR5cGVWYXJpYWJsZXNEZWZpbmVkIik7CiAgICBhc3NlcnQoY291bnQgPiAwKTsKICAgIHB1c2goY29uc3QgRml4ZWROdWxsYWJsZUxpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4oKS5wb3Aoc3RhY2ssIGNvdW50KSA/PwogICAgICAgIE51bGxWYWx1ZS5UeXBlVmFyaWFibGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVHlwZVZhcmlhYmxlKFRva2VuIHRva2VuLCBpbnQgaW5kZXgsIFRva2VuIGV4dGVuZHNPclN1cGVyKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRUeXBlVmFyaWFibGUiKTsKICAgIFR5cGVCdWlsZGVyIGJvdW5kID0gbnVsbElmUGFyc2VyUmVjb3ZlcnkocG9wKCkpOwogICAgLy8gUGVlayB0byBsZWF2ZSB0eXBlIHBhcmFtZXRlcnMgb24gdG9wIG9mIHN0YWNrLgogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlUGFyYW1ldGVycyA9IHBlZWsoKTsKICAgIGlmICh0eXBlUGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgIHR5cGVQYXJhbWV0ZXJzW2luZGV4XS5ib3VuZCA9IGJvdW5kOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUeXBlVmFyaWFibGVzKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRUeXBlVmFyaWFibGVzIik7CgogICAgLy8gUGVlayB0byBsZWF2ZSB0eXBlIHBhcmFtZXRlcnMgb24gdG9wIG9mIHN0YWNrLgogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlUGFyYW1ldGVycyA9IHBlZWsoKTsKCiAgICBNYXA8U3RyaW5nLCBUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzQnlOYW1lOwogICAgaWYgKHR5cGVQYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIGJ1aWxkZXIgaW4gdHlwZVBhcmFtZXRlcnMpIHsKICAgICAgICBpZiAoYnVpbGRlci5ib3VuZCAhPSBudWxsKSB7CiAgICAgICAgICBpZiAodHlwZVZhcmlhYmxlc0J5TmFtZSA9PSBudWxsKSB7CiAgICAgICAgICAgIHR5cGVWYXJpYWJsZXNCeU5hbWUgPSBuZXcgTWFwPFN0cmluZywgVHlwZVZhcmlhYmxlQnVpbGRlcj4oKTsKICAgICAgICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIGJ1aWxkZXIgaW4gdHlwZVBhcmFtZXRlcnMpIHsKICAgICAgICAgICAgICB0eXBlVmFyaWFibGVzQnlOYW1lW2J1aWxkZXIubmFtZV0gPSBidWlsZGVyOwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgLy8gRmluZCBjeWNsZTogSWYgdGhlcmUncyBubyBjeWNsZSB3ZSBjYW4gYXQgbW9zdCBzdGVwIHRocm91Z2ggYWxsCiAgICAgICAgICAvLyBgdHlwZVBhcmFtZXRlcnNgIChhdCB3aGljaCBwb2ludCB0aGUgbGFzdCBidWlsZGVycyBib3VuZCB3aWxsIGJlCiAgICAgICAgICAvLyBudWxsKS4KICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgY3ljbGUgd2l0aCBgYnVpbGRlcmAgJ2luc2lkZScgdGhlIHN0ZXBzIHRvIGdldCBiYWNrIHRvCiAgICAgICAgICAvLyBpdCB3aWxsIGFsc28gYmUgYm91bmQgYnkgYHR5cGVQYXJhbWV0ZXJzLmxlbmd0aGAuCiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGN5Y2xlIHdpdGhvdXQgYGJ1aWxkZXJgICdpbnNpZGUnIHdlIHdpbGwganVzdCBpZ25vcmUgaXQKICAgICAgICAgIC8vIGZvciBub3cuIEl0IHdpbGwgYmUgcmVwb3J0ZWQgd2hlbiBwcm9jZXNzaW5nIG9uZSBvZiB0aGUgYGJ1aWxkZXJgcwogICAgICAgICAgLy8gdGhhdCBpcyBpbiBmYWN0IGBpbnNpZGVgIHRoZSBjeWNsZS4gVGhpcyBtYXRjaGVzIHRoZSBjeWNsaWMgY2xhc3MKICAgICAgICAgIC8vIGhpZXJhcmNoeSBlcnJvci4KICAgICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgYm91bmQgPSBidWlsZGVyOwogICAgICAgICAgZm9yIChpbnQgc3RlcHMgPSAwOwogICAgICAgICAgICAgIGJvdW5kLmJvdW5kICE9IG51bGwgJiYgc3RlcHMgPCB0eXBlUGFyYW1ldGVycy5sZW5ndGg7CiAgICAgICAgICAgICAgKytzdGVwcykgewogICAgICAgICAgICBib3VuZCA9IHR5cGVWYXJpYWJsZXNCeU5hbWVbYm91bmQuYm91bmQubmFtZV07CiAgICAgICAgICAgIGlmIChib3VuZCA9PSBudWxsIHx8IGJvdW5kID09IGJ1aWxkZXIpIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGJvdW5kID09IGJ1aWxkZXIgJiYgYm91bmQuYm91bmQgIT0gbnVsbCkgewogICAgICAgICAgICAvLyBXcml0ZSBvdXQgY3ljbGUuCiAgICAgICAgICAgIExpc3Q8U3RyaW5nPiB2aWEgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICAgICAgICAgIGJvdW5kID0gdHlwZVZhcmlhYmxlc0J5TmFtZVtidWlsZGVyLmJvdW5kLm5hbWVdOwogICAgICAgICAgICB3aGlsZSAoYm91bmQgIT0gYnVpbGRlcikgewogICAgICAgICAgICAgIHZpYS5hZGQoYm91bmQubmFtZSk7CiAgICAgICAgICAgICAgYm91bmQgPSB0eXBlVmFyaWFibGVzQnlOYW1lW2JvdW5kLmJvdW5kLm5hbWVdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHZpYS5pc0VtcHR5CiAgICAgICAgICAgICAgICA/IHRlbXBsYXRlRGlyZWN0Q3ljbGVJblR5cGVWYXJpYWJsZXMud2l0aEFyZ3VtZW50cyhidWlsZGVyLm5hbWUpCiAgICAgICAgICAgICAgICA6IHRlbXBsYXRlQ3ljbGVJblR5cGVWYXJpYWJsZXMud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgICBidWlsZGVyLm5hbWUsIHZpYS5qb2luKCInLCAnIikpOwogICAgICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2UsIGJ1aWxkZXIuY2hhck9mZnNldCwgYnVpbGRlci5uYW1lLmxlbmd0aCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKGluQ29uc3RydWN0b3JOYW1lKSB7CiAgICAgIGFkZFByb2JsZW0obWVzc2FnZUNvbnN0cnVjdG9yV2l0aFR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgb2Zmc2V0Rm9yVG9rZW4oYmVnaW5Ub2tlbiksIGxlbmd0aE9mU3BhbihiZWdpblRva2VuLCBlbmRUb2tlbikpOwogICAgICBpbkNvbnN0cnVjdG9yTmFtZSA9IGZhbHNlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRQYXJ0T2YoCiAgICAgIFRva2VuIHBhcnRLZXl3b3JkLCBUb2tlbiBvZktleXdvcmQsIFRva2VuIHNlbWljb2xvbiwgYm9vbCBoYXNOYW1lKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRQYXJ0T2YiKTsKICAgIGludCBjaGFyT2Zmc2V0ID0gcG9wQ2hhck9mZnNldCgpOwogICAgT2JqZWN0IGNvbnRhaW5pbmdMaWJyYXJ5ID0gcG9wKCk7CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGlmIChoYXNOYW1lKSB7CiAgICAgIGxpYnJhcnkuYWRkUGFydE9mKG1ldGFkYXRhLAogICAgICAgICAgZmxhdHRlbk5hbWUoY29udGFpbmluZ0xpYnJhcnksIGNoYXJPZmZzZXQsIHVyaSksIG51bGwsIGNoYXJPZmZzZXQpOwogICAgfSBlbHNlIHsKICAgICAgbGlicmFyeS5hZGRQYXJ0T2YobWV0YWRhdGEsIG51bGwsIGNvbnRhaW5pbmdMaWJyYXJ5LCBjaGFyT2Zmc2V0KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29uc3RydWN0b3JSZWZlcmVuY2UoCiAgICAgIFRva2VuIHN0YXJ0LCBUb2tlbiBwZXJpb2RCZWZvcmVOYW1lLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiQ29uc3RydWN0b3JSZWZlcmVuY2UiKTsKICAgIHBvcElmTm90TnVsbChwZXJpb2RCZWZvcmVOYW1lKTsgLy8gY2hhck9mZnNldC4KICAgIFN0cmluZyBzdWZmaXggPSBwb3BJZk5vdE51bGwocGVyaW9kQmVmb3JlTmFtZSk7CiAgICBMaXN0PFR5cGVCdWlsZGVyPiB0eXBlQXJndW1lbnRzID0gcG9wKCk7CiAgICBpbnQgY2hhck9mZnNldCA9IHBvcCgpOwogICAgT2JqZWN0IG5hbWUgPSBwb3AoKTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gobmFtZSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoKGxpYnJhcnkuYWRkQ29uc3RydWN0b3JSZWZlcmVuY2UoCiAgICAgICAgICBuYW1lLCB0eXBlQXJndW1lbnRzLCBzdWZmaXgsIGNoYXJPZmZzZXQpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GYWN0b3J5TWV0aG9kKAogICAgICBUb2tlbiBsYXN0Q29uc3VtZWQsIFRva2VuIGV4dGVybmFsVG9rZW4sIFRva2VuIGNvbnN0VG9rZW4pIHsKICAgIGluQ29uc3RydWN0b3IgPSB0cnVlOwogICAgbGlicmFyeS5iZWdpbk5lc3RlZERlY2xhcmF0aW9uKAogICAgICAgIERlY2xhcmF0aW9uS2luZC5mYWN0b3J5TWV0aG9kLCAiI2ZhY3RvcnlfbWV0aG9kIiwKICAgICAgICBoYXNNZW1iZXJzOiBmYWxzZSk7CiAgICBwdXNoKChleHRlcm5hbFRva2VuICE9IG51bGwgPyBleHRlcm5hbE1hc2sgOiAwKSB8CiAgICAgICAgKGNvbnN0VG9rZW4gIT0gbnVsbCA/IGNvbnN0TWFzayA6IDApKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRmFjdG9yeU1ldGhvZCgKICAgICAgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZmFjdG9yeUtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGYWN0b3J5TWV0aG9kIik7CiAgICBNZXRob2RCb2R5IGtpbmQgPSBwb3AoKTsKICAgIENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlciByZWRpcmVjdGlvblRhcmdldDsKICAgIGlmIChraW5kID09IE1ldGhvZEJvZHkuUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSkgewogICAgICByZWRpcmVjdGlvblRhcmdldCA9IG51bGxJZlBhcnNlclJlY292ZXJ5KHBvcCgpKTsKICAgIH0KICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFscyA9IHBvcCgpOwogICAgaW50IGZvcm1hbHNPZmZzZXQgPSBwb3AoKTsKICAgIHBvcCgpOyAvLyB0eXBlIHZhcmlhYmxlcwogICAgaW50IGNoYXJPZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBuYW1lID0gcG9wKCk7CiAgICBpbnQgbW9kaWZpZXJzID0gcG9wKCk7CiAgICBpZiAobmF0aXZlTWV0aG9kTmFtZSAhPSBudWxsKSB7CiAgICAgIG1vZGlmaWVycyB8PSBleHRlcm5hbE1hc2s7CiAgICB9CiAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEgPSBwb3AoKTsKICAgIGlmIChuYW1lIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIGxpYnJhcnkuZW5kTmVzdGVkRGVjbGFyYXRpb24oCiAgICAgICAgICBEZWNsYXJhdGlvbktpbmQuZmFjdG9yeU1ldGhvZCwgIjxzeW50YXgtZXJyb3I+Iik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIFN0cmluZyBkb2N1bWVudGF0aW9uQ29tbWVudCA9IGdldERvY3VtZW50YXRpb25Db21tZW50KGJlZ2luVG9rZW4pOwogICAgbGlicmFyeS5hZGRGYWN0b3J5TWV0aG9kKAogICAgICAgIGRvY3VtZW50YXRpb25Db21tZW50LAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIG1vZGlmaWVycywKICAgICAgICBuYW1lLAogICAgICAgIGZvcm1hbHMsCiAgICAgICAgcmVkaXJlY3Rpb25UYXJnZXQsCiAgICAgICAgYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0LAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgZm9ybWFsc09mZnNldCwKICAgICAgICBlbmRUb2tlbi5jaGFyT2Zmc2V0LAogICAgICAgIG5hdGl2ZU1ldGhvZE5hbWUpOwogICAgbmF0aXZlTWV0aG9kTmFtZSA9IG51bGw7CiAgICBpbkNvbnN0cnVjdG9yID0gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlJlZGlyZWN0aW5nRmFjdG9yeUJvZHkiKTsKICAgIHB1c2goTWV0aG9kQm9keS5SZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRmllbGRJbml0aWFsaXplcihUb2tlbiBhc3NpZ25tZW50T3BlcmF0b3IsIFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJGaWVsZEluaXRpYWxpemVyIik7CiAgICBUb2tlbiBiZWZvcmVMYXN0ID0gYXNzaWdubWVudE9wZXJhdG9yLm5leHQ7CiAgICBUb2tlbiBuZXh0ID0gYmVmb3JlTGFzdC5uZXh0OwogICAgd2hpbGUgKG5leHQgIT0gdG9rZW4gJiYgIW5leHQuaXNFb2YpIHsKICAgICAgLy8gVG8gYXZvaWQgc3RvcmluZyB0aGUgcmVzdCBvZiB0aGUgdG9rZW4gc3RyZWFtLCB3ZSBuZWVkIHRvIGlkZW50aWZ5IHRoZQogICAgICAvLyB0b2tlbiBiZWZvcmUgW3Rva2VuXS4gVGhhdCB0b2tlbiB3aWxsIGJlIHRoZSBsYXN0IHRva2VuIG9mIHRoZQogICAgICAvLyBpbml0aWFsaXplciBleHByZXNzaW9uIGFuZCBieSBzZXR0aW5nIGl0cyB0YWlsIHRvIEVPRiB3ZSBvbmx5IHN0b3JlCiAgICAgIC8vIHRoZSB0b2tlbnMgZm9yIHRoZSBleHByZXNzaW9uLgogICAgICAvLyBUT0RPKGFoZSk6IE1pZ2h0IGJlIGNsZWFyZXIgaWYgdGhpcyBzZWFyY2ggd2FzIG1vdmVkIHRvCiAgICAgIC8vIGBsaWJyYXJ5LmFkZEZpZWxkc2AuCiAgICAgIC8vIFRPRE8oYWhlKTogSSBkb24ndCBldmVuIHRoaW5rIHRoaXMgaXMgbmVjZXNzYXJ5LiBbdG9rZW5dIHBvaW50cyB0byA7CiAgICAgIC8vIG9yICwgYW5kIHdlIGRvbid0IG90aGVyd2lzZSBzdG9yZSB0b2tlbnMuCiAgICAgIGJlZm9yZUxhc3QgPSBuZXh0OwogICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgfQogICAgcHVzaChhc3NpZ25tZW50T3BlcmF0b3IubmV4dCk7CiAgICBwdXNoKGJlZm9yZUxhc3QpOwogICAgcHVzaCh0b2tlbi5jaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9GaWVsZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb0ZpZWxkSW5pdGlhbGl6ZXIiKTsKICAgIHB1c2goTnVsbFZhbHVlLkZpZWxkSW5pdGlhbGl6ZXIpOwogICAgcHVzaChOdWxsVmFsdWUuRmllbGRJbml0aWFsaXplcik7CiAgICBwdXNoKHRva2VuLmNoYXJPZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJbml0aWFsaXplcnMoaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiSW5pdGlhbGl6ZXJzIik7CiAgICAvLyBJZ25vcmVkIGZvciBub3cuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vSW5pdGlhbGl6ZXJzKCkgewogICAgZGVidWdFdmVudCgiTm9Jbml0aWFsaXplcnMiKTsKICAgIC8vIFRoaXMgaXMgYSBjb25zdHJ1Y3RvciBpbml0aWFsaXplciBhbmQgaXQncyBpZ25vcmVkIGZvciBub3cuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRNZW1iZXIoVG9rZW4gZW5kVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkludmFsaWRNZW1iZXIiKTsKICAgIHBvcCgpOyAvLyBtZXRhZGF0YSBzdGFyCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE1lbWJlcigpIHsKICAgIGRlYnVnRXZlbnQoIk1lbWJlciIpOwogICAgYXNzZXJ0KG5hdGl2ZU1ldGhvZE5hbWUgPT0gbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzV2l0aENsYXVzZShUb2tlbiB3aXRoS2V5d29yZCkgewogICAgZGVidWdFdmVudCgiQ2xhc3NXaXRoQ2xhdXNlIik7CgogICAgT2JqZWN0IG1peGlucyA9IHBvcCgpOwogICAgaW50IGV4dGVuZHNPZmZzZXQgPSBwb3AoKTsKICAgIE9iamVjdCBzdXBlcnR5cGUgPSBwb3AoKTsKICAgIGlmIChzdXBlcnR5cGUgaXMgUGFyc2VyUmVjb3ZlcnkgfHwgbWl4aW5zIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgIHB1c2gobmV3IFBhcnNlclJlY292ZXJ5KHdpdGhLZXl3b3JkLmNoYXJPZmZzZXQpKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobGlicmFyeS5hZGRNaXhpbkFwcGxpY2F0aW9uKAogICAgICAgICAgc3VwZXJ0eXBlLCBtaXhpbnMsIHdpdGhLZXl3b3JkLmNoYXJPZmZzZXQpKTsKICAgIH0KICAgIHB1c2goZXh0ZW5kc09mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzTm9XaXRoQ2xhdXNlKCkgewogICAgZGVidWdFdmVudCgiQ2xhc3NOb1dpdGhDbGF1c2UiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NIZWFkZXIoVG9rZW4gYmVnaW4sIFRva2VuIGNsYXNzS2V5d29yZCwgVG9rZW4gbmF0aXZlVG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkNsYXNzSGVhZGVyIik7CiAgICBuYXRpdmVNZXRob2ROYW1lID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTWl4aW5IZWFkZXIoVG9rZW4gbWl4aW5LZXl3b3JkKSB7CiAgICBkZWJ1Z0V2ZW50KCJoYW5kbGVNaXhpbkhlYWRlciIpOwogICAgbmF0aXZlTWV0aG9kTmFtZSA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENsYXNzT3JNaXhpbkJvZHkoCiAgICAgIENsYXNzS2luZCBraW5kLCBpbnQgbWVtYmVyQ291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJDbGFzc09yTWl4aW5Cb2R5Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUFzeW5jTW9kaWZpZXIoVG9rZW4gYXN5bmNUb2tlbiwgVG9rZW4gc3RhclRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJBc3luY01vZGlmaWVyIik7CiAgfQoKICB2b2lkIGFkZFByb2JsZW0oTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwKICAgICAge2Jvb2wgd2FzSGFuZGxlZDogZmFsc2UsIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHR9KSB7CiAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbGVuZ3RoLCB1cmksCiAgICAgICAgd2FzSGFuZGxlZDogd2FzSGFuZGxlZCwgY29udGV4dDogY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSWdub3JlZEVycm9yKENvZGU8ZHluYW1pYz4gY29kZSwgVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBpc0lnbm9yZWRQYXJzZXJFcnJvcihjb2RlLCB0b2tlbikgfHwKICAgICAgICBzdXBlci5pc0lnbm9yZWRFcnJvcihjb2RlLCB0b2tlbik7CiAgfQoKICAvLy8gUmV0dXJuIHRoZSBkb2N1bWVudGF0aW9uIGNvbW1lbnQgZm9yIHRoZSBlbnRpdHkgdGhhdCBzdGFydHMgYXQgdGhlCiAgLy8vIGdpdmVuIFt0b2tlbl0sIG9yIGBudWxsYCBpZiB0aGVyZSBpcyBubyBwcmVjZWRpbmcgZG9jdW1lbnRhdGlvbiBjb21tZW50LgogIHN0YXRpYyBTdHJpbmcgZ2V0RG9jdW1lbnRhdGlvbkNvbW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGRvY1Rva2VuID0gdG9rZW4ucHJlY2VkaW5nQ29tbWVudHM7CiAgICBpZiAoZG9jVG9rZW4gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBib29sIGluU2xhc2ggPSBmYWxzZTsKICAgIHZhciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICB3aGlsZSAoZG9jVG9rZW4gIT0gbnVsbCkgewogICAgICBTdHJpbmcgbGV4ZW1lID0gZG9jVG9rZW4ubGV4ZW1lOwogICAgICBpZiAobGV4ZW1lLnN0YXJ0c1dpdGgoJy8qKicpKSB7CiAgICAgICAgaW5TbGFzaCA9IGZhbHNlOwogICAgICAgIGJ1ZmZlci5jbGVhcigpOwog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b3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IExvY2F0ZWRNZXNzYWdlLCBNZXNzYWdlOwoKYWJzdHJhY3QgY2xhc3MgSW5mZXJlbmNlSGVscGVyIHsKICBDb3JlVHlwZXMgZ2V0IGNvcmVUeXBlczsKCiAgVXJpIGdldCB1cmk7CgogIHNldCB0cmFuc2Zvcm1TZXRMaXRlcmFscyhib29sIHZhbHVlKTsKCiAgRXhwcmVzc2lvbiBidWlsZFByb2JsZW0oTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgaW50IGxlbmd0aCwKICAgICAge0xpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQsIGJvb2wgc3VwcHJlc3NNZXNzYWdlfSk7CgogIExvY2F0ZWRNZXNzYWdlIGNoZWNrQXJndW1lbnRzRm9yVHlwZSgKICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uLCBBcmd1bWVudHMgYXJndW1lbnRzLCBpbnQgb2Zmc2V0KTsKCiAgdm9pZCBhZGRQcm9ibGVtKE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsCiAgICAgIHtMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0LCBib29sIHdhc0hhbmRsZWR9KTsKCiAgRXhwcmVzc2lvbiB3cmFwSW5Qcm9ibGVtKEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgTWVzc2FnZSBtZXNzYWdlLCBpbnQgbGVuZ3RoLAogICAgICB7TGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dH0pOwoKICBTdHJpbmcgY29uc3RydWN0b3JOYW1lRm9yRGlhZ25vc3RpY3MoU3RyaW5nIG5hbWUsCiAgICAgIHtTdHJpbmcgY2xhc3NOYW1lLCBib29sIGlzU3VwZXJ9KTsKCiAgRXhwcmVzc2lvbiBkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbihFeHByZXNzaW9uIG5vZGUpOwp9CiQATk48AUsBOAE7ASEbAQ8BKAFHPQEoPwE/OAFPJwE0KQE6AgFAcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL2luZmVyZW5jZV9oZWxwZXIuZGFydE5zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9pbmZlcmVuY2VfZW5naW5lLmRhcnSaGS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UubWQgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQ29uc3RydWN0b3IsCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRGFydFR5cGVWaXNpdG9yLAogICAgICAgIER5bmFtaWNUeXBlLAogICAgICAgIEZpZWxkLAogICAgICAgIEZ1bmN0aW9uVHlwZSwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIE1lbWJlciwKICAgICAgICBUeXBlUGFyYW1ldGVyLAogICAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlLAogICAgICAgIFR5cGVkZWZUeXBlLAogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb247CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5OwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKaW1wb3J0ICcuLi8uLi9iYXNlL2luc3RydW1lbnRhdGlvbi5kYXJ0JyBzaG93IEluc3RydW1lbnRhdGlvbjsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93IENsYXNzSGllcmFyY2h5QnVpbGRlciwgSW1wbGljaXRGaWVsZFR5cGUsIExpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICcuLi9zb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICd0eXBlX2luZmVycmVyLmRhcnQnIHNob3cgVHlwZUluZmVycmVyOwoKaW1wb3J0ICd0eXBlX3NjaGVtYV9lbnZpcm9ubWVudC5kYXJ0JyBzaG93IFR5cGVTY2hlbWFFbnZpcm9ubWVudDsKCmVudW0gVmFyaWFuY2UgewogIGNvdmFyaWFudCwKICBjb250cmF2YXJpYW50LAogIGludmFyaWFudCwKfQoKVmFyaWFuY2UgaW52ZXJ0VmFyaWFuY2UoVmFyaWFuY2UgdmFyaWFuY2UpIHsKICBzd2l0Y2ggKHZhcmlhbmNlKSB7CiAgICBjYXNlIFZhcmlhbmNlLmNvdmFyaWFudDoKICAgICAgcmV0dXJuIFZhcmlhbmNlLmNvbnRyYXZhcmlhbnQ7CiAgICBjYXNlIFZhcmlhbmNlLmNvbnRyYXZhcmlhbnQ6CiAgICAgIHJldHVybiBWYXJpYW5jZS5jb3ZhcmlhbnQ7CiAgICBjYXNlIFZhcmlhbmNlLmludmFyaWFudDoKICB9CiAgcmV0dXJuIHZhcmlhbmNlOwp9CgovLy8gVmlzaXRvciB0byBjaGVjayB3aGV0aGVyIGEgZ2l2ZW4gdHlwZSBtZW50aW9ucyBhbnkgb2YgYSBjbGFzcydzIHR5cGUKLy8vIHBhcmFtZXRlcnMgaW4gYSBub24tY292YXJpYW50IGZhc2hpb24uCmNsYXNzIEluY2x1ZGVzVHlwZVBhcmFtZXRlcnNOb25Db3ZhcmlhbnRseSBleHRlbmRzIERhcnRUeXBlVmlzaXRvcjxib29sPiB7CiAgVmFyaWFuY2UgX3ZhcmlhbmNlOwoKICBmaW5hbCBMaXN0PFR5cGVQYXJhbWV0ZXI+IF90eXBlUGFyYW1ldGVyc1RvU2VhcmNoRm9yOwoKICBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHkodGhpcy5fdHlwZVBhcmFtZXRlcnNUb1NlYXJjaEZvciwKICAgICAge1ZhcmlhbmNlIGluaXRpYWxWYXJpYW5jZX0pCiAgICAgIDogX3ZhcmlhbmNlID0gaW5pdGlhbFZhcmlhbmNlOwoKICBAb3ZlcnJpZGUKICBib29sIGRlZmF1bHREYXJ0VHlwZShEYXJ0VHlwZSBub2RlKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgbm9kZSkgewogICAgaWYgKG5vZGUucmV0dXJuVHlwZS5hY2NlcHQodGhpcykpIHJldHVybiB0cnVlOwogICAgVmFyaWFuY2Ugb2xkVmFyaWFuY2UgPSBfdmFyaWFuY2U7CiAgICBfdmFyaWFuY2UgPSBWYXJpYW5jZS5pbnZhcmlhbnQ7CiAgICBmb3IgKHZhciBwYXJhbWV0ZXIgaW4gbm9kZS50eXBlUGFyYW1ldGVycykgewogICAgICBpZiAocGFyYW1ldGVyLmJvdW5kLmFjY2VwdCh0aGlzKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICBfdmFyaWFuY2UgPSBpbnZlcnRWYXJpYW5jZShvbGRWYXJpYW5jZSk7CiAgICBmb3IgKHZhciBwYXJhbWV0ZXIgaW4gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICBpZiAocGFyYW1ldGVyLmFjY2VwdCh0aGlzKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmb3IgKHZhciBwYXJhbWV0ZXIgaW4gbm9kZS5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgaWYgKHBhcmFtZXRlci50eXBlLmFjY2VwdCh0aGlzKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICBfdmFyaWFuY2UgPSBvbGRWYXJpYW5jZTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgZm9yICh2YXIgYXJndW1lbnQgaW4gbm9kZS50eXBlQXJndW1lbnRzKSB7CiAgICAgIGlmIChhcmd1bWVudC5hY2NlcHQodGhpcykpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIG5vZGUpIHsKICAgIHJldHVybiBub2RlLnVuYWxpYXMuYWNjZXB0KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKFR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIHJldHVybiBfdmFyaWFuY2UgIT0gVmFyaWFuY2UuY292YXJpYW50ICYmCiAgICAgICAgX3R5cGVQYXJhbWV0ZXJzVG9TZWFyY2hGb3IuY29udGFpbnMobm9kZS5wYXJhbWV0ZXIpOwogIH0KfQoKLy8vIEtlZXBzIHRyYWNrIG9mIHRoZSBnbG9iYWwgc3RhdGUgZm9yIHRoZSB0eXBlIGluZmVyZW5jZSB0aGF0IG9jY3VycyBvdXRzaWRlCi8vLyBvZiBtZXRob2QgYm9kaWVzIGFuZCBpbml0aWFsaXplcnMuCi8vLwovLy8gVGhpcyBjbGFzcyBkZXNjcmliZXMgdGhlIGludGVyZmFjZSBmb3IgdXNlIGJ5IGNsaWVudHMgb2YgdHlwZSBpbmZlcmVuY2UKLy8vIChlLmcuIERpZXRMaXN0ZW5lcikuICBEZXJpdmVkIGNsYXNzZXMgc2hvdWxkIGRlcml2ZSBmcm9tCi8vLyBbVHlwZUluZmVyZW5jZUVuZ2luZUltcGxdLgphYnN0cmFjdCBjbGFzcyBUeXBlSW5mZXJlbmNlRW5naW5lIHsKICBDbGFzc0hpZXJhcmNoeSBjbGFzc0hpZXJhcmNoeTsKCiAgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGhpZXJhcmNoeUJ1aWxkZXI7CgogIENvcmVUeXBlcyBjb3JlVHlwZXM7CgogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgInByZXBhcmUiIHBoYXNlIG9mIHR5cGUgaW5mZXJlbmNlIGlzIGNvbXBsZXRlLgogIGJvb2wgaXNUeXBlSW5mZXJlbmNlUHJlcGFyZWQgPSBmYWxzZTsKCiAgVHlwZVNjaGVtYUVudmlyb25tZW50IHR5cGVTY2hlbWFFbnZpcm9ubWVudDsKCiAgLy8vIEEgbWFwIGNvbnRhaW5pbmcgY29uc3RydWN0b3JzIHdpdGggaW5pdGlhbGl6aW5nIGZvcm1hbHMgd2hvc2UgdHlwZXMKICAvLy8gbmVlZCB0byBiZSBpbmZlcnJlZC4KICAvLy8KICAvLy8gVGhpcyBpcyByZXByZXNlbnRlZCBhcyBhIG1hcCBmcm9tIGEgY29uc3RydWN0b3IgdG8gaXRzIGxpYnJhcnkKICAvLy8gYnVpbGRlciBiZWNhdXNlIHRoZSBidWlsZGVyIGlzIHVzZWQgdG8gcmVwb3J0IGVycm9ycyBkdWUgdG8gY3ljbGljCiAgLy8vIGluZmVyZW5jZSBkZXBlbmRlbmNpZXMuCiAgZmluYWwgTWFwPENvbnN0cnVjdG9yLCBMaWJyYXJ5QnVpbGRlcj4gdG9CZUluZmVycmVkID0ge307CgogIC8vLyBBIG1hcCBjb250YWluaW5nIGNvbnN0cnVjdG9ycyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBpbmZlcnJlZC4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIHRvIGRldGVjdCBjeWNsaWMgaW5mZXJlbmNlIGRlcGVuZGVuY2llcy4gIEl0IGlzIHJlcHJlc2VudGVkCiAgLy8vIGFzIGEgbWFwIGZyb20gYSBjb25zdHJ1Y3RvciB0byBpdHMgbGlicmFyeSBidWlsZGVyIGJlY2F1c2UgdGhlIGJ1aWxkZXIKICAvLy8gaXMgdXNlZCB0byByZXBvcnQgZXJyb3JzLgogIGZpbmFsIE1hcDxDb25zdHJ1Y3RvciwgTGlicmFyeUJ1aWxkZXI+IGJlaW5nSW5mZXJyZWQgPSB7fTsKCiAgZmluYWwgSW5zdHJ1bWVudGF0aW9uIGluc3RydW1lbnRhdGlvbjsKCiAgVHlwZUluZmVyZW5jZUVuZ2luZSh0aGlzLmluc3RydW1lbnRhdGlvbik7CgogIC8vLyBDcmVhdGVzIGEgdHlwZSBpbmZlcnJlciBmb3IgdXNlIGluc2lkZSBvZiBhIG1ldGhvZCBib2R5IGRlY2xhcmVkIGluIGEgZmlsZQogIC8vLyB3aXRoIHRoZSBnaXZlbiBbdXJpXS4KICBUeXBlSW5mZXJyZXIgY3JlYXRlTG9jYWxUeXBlSW5mZXJyZXIoCiAgICAgIFVyaSB1cmksIEludGVyZmFjZVR5cGUgdGhpc1R5cGUsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpOwoKICAvLy8gQ3JlYXRlcyBhIFtUeXBlSW5mZXJyZXJdIG9iamVjdCB3aGljaCBpcyByZWFkeSB0byBwZXJmb3JtIHR5cGUgaW5mZXJlbmNlCiAgLy8vIG9uIHRoZSBnaXZlbiBbZmllbGRdLgogIFR5cGVJbmZlcnJlciBjcmVhdGVUb3BMZXZlbFR5cGVJbmZlcnJlcigKICAgICAgVXJpIHVyaSwgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSwgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSk7CgogIC8vLyBQZXJmb3JtcyB0aGUgdGhpcmQgcGhhc2Ugb2YgdG9wIGxldmVsIGluZmVyZW5jZSwgd2hpY2ggaXMgdG8gdmlzaXQgYWxsCiAgLy8vIGNvbnN0cnVjdG9ycyBzdGlsbCBuZWVkaW5nIGluZmVyZW5jZSBhbmQgaW5mZXIgdGhlIHR5cGVzIG9mIHRoZWlyCiAgLy8vIGluaXRpYWxpemluZyBmb3JtYWxzIGZyb20gdGhlIGNvcnJlc3BvbmRpbmcgZmllbGRzLgogIHZvaWQgZmluaXNoVG9wTGV2ZWxJbml0aWFsaXppbmdGb3JtYWxzKCkgewogICAgLy8gRmllbGQgdHlwZXMgaGF2ZSBhbGwgYmVlbiBpbmZlcnJlZCBzbyB0aGVyZSBjYW5ub3QgYmUgYSBjeWNsaWMKICAgIC8vIGRlcGVuZGVuY3kuCiAgICBmb3IgKENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yIGluIHRvQmVJbmZlcnJlZC5rZXlzKSB7CiAgICAgIGZvciAodmFyIGRlY2xhcmF0aW9uIGluIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgICAgaW5mZXJJbml0aWFsaXppbmdGb3JtYWwoZGVjbGFyYXRpb24sIGNvbnN0cnVjdG9yKTsKICAgICAgfQogICAgICBmb3IgKHZhciBkZWNsYXJhdGlvbiBpbiBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgICBpbmZlckluaXRpYWxpemluZ0Zvcm1hbChkZWNsYXJhdGlvbiwgY29uc3RydWN0b3IpOwogICAgICB9CiAgICB9CiAgICB0b0JlSW5mZXJyZWQuY2xlYXIoKTsKICB9CgogIHZvaWQgaW5mZXJJbml0aWFsaXppbmdGb3JtYWwoVmFyaWFibGVEZWNsYXJhdGlvbiBmb3JtYWwsIENvbnN0cnVjdG9yIHBhcmVudCkgewogICAgaWYgKGZvcm1hbC50eXBlID09IG51bGwpIHsKICAgICAgZm9yIChGaWVsZCBmaWVsZCBpbiBwYXJlbnQuZW5jbG9zaW5nQ2xhc3MuZmllbGRzKSB7CiAgICAgICAgaWYgKGZpZWxkLm5hbWUubmFtZSA9PSBmb3JtYWwubmFtZSkgewogICAgICAgICAgVHlwZUluZmVyZW5jZUVuZ2luZS5yZXNvbHZlSW5mZXJlbmNlTm9kZShmaWVsZCk7CiAgICAgICAgICBmb3JtYWwudHlwZSA9IGZpZWxkLnR5cGU7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIFdlIGRpZCBub3QgZmluZCB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCwgc28gdGhlIHByb2dyYW0gaXMgZXJyb25lb3VzLgogICAgICAvLyBUaGUgZXJyb3Igc2hvdWxkIGhhdmUgYmVlbiByZXBvcnRlZCBlbHNld2hlcmUgYW5kIHR5cGUgaW5mZXJlbmNlCiAgICAgIC8vIHNob3VsZCBjb250aW51ZSBieSBpbmZlcnJpbmcgZHluYW1pYy4KICAgICAgZm9ybWFsLnR5cGUgPSBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfQogIH0KCiAgLy8vIEdldHMgcmVhZHkgdG8gZG8gdG9wIGxldmVsIHR5cGUgaW5mZXJlbmNlIGZvciB0aGUgY29tcG9uZW50IGhhdmluZyB0aGUKICAvLy8gZ2l2ZW4gW2hpZXJhcmNoeV0sIHVzaW5nIHRoZSBnaXZlbiBbY29yZVR5cGVzXS4KICB2b2lkIHByZXBhcmVUb3BMZXZlbChDb3JlVHlwZXMgY29yZVR5cGVzLCBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHkpIHsKICAgIHRoaXMuY29yZVR5cGVzID0gY29yZVR5cGVzOwogICAgdGhpcy5jbGFzc0hpZXJhcmNoeSA9IGhpZXJhcmNoeTsKICAgIHRoaXMudHlwZVNjaGVtYUVudmlyb25tZW50ID0KICAgICAgICBuZXcgVHlwZVNjaGVtYUVudmlyb25tZW50KGNvcmVUeXBlcywgaGllcmFyY2h5KTsKICB9CgogIHN0YXRpYyBNZW1iZXIgcmVzb2x2ZUluZmVyZW5jZU5vZGUoTWVtYmVyIG1lbWJlcikgewogICAgaWYgKG1lbWJlciBpcyBGaWVsZCkgewogICAgICBEYXJ0VHlwZSB0eXBlID0gbWVtYmVyLnR5cGU7CiAgICAgIGlmICh0eXBlIGlzIEltcGxpY2l0RmllbGRUeXBlKSB7CiAgICAgICAgaWYgKHR5cGUubWVtYmVyLnRhcmdldCAhPSBtZW1iZXIpIHsKICAgICAgICAgIHR5cGUubWVtYmVyLmluZmVyQ29waWVkVHlwZShtZW1iZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0eXBlLm1lbWJlci5pbmZlclR5cGUoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBtZW1iZXI7CiAgfQp9CoDRAE1OPwEhCRUSGRUPFhcQFxsVHQFCATgBPwEnQwFKAS8BQgEQDRENAgEtFh0lISEdBBMCAUkrSxYBOAFIIiUBDDABDC4zJiQxNQYtNy8GMjQGHRIEAQwwLy4GEgQBDCwmBAEMOC49BAIBTycETD0fJSEBKgEXAUsoAS8BShsGRUkePAFGBk9NID0BKQEtAVEcKEYBTxwrRgFNSDotRhM5SzsIRjsIBhoEAVEfOi47JBIKCE9KLykGBAFNNkggJSE5BAE2GyMnLC8RIwoIBhMEAgFFcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfaW5mZXJlbmNlX2VuZ2luZS5kYXJ0UHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX3NjaGVtYV9lbGltaW5hdGlvbi5kYXJ0lLwvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLm1kIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdyBEYXJ0VHlwZSwgRHluYW1pY1R5cGUsIEZ1bmN0aW9uVHlwZSwgSW50ZXJmYWNlVHlwZSwgTmFtZWRUeXBlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIHNob3cgQ29yZVR5cGVzOwoKaW1wb3J0ICd0eXBlX3NjaGVtYS5kYXJ0JyBzaG93IFR5cGVTY2hlbWFWaXNpdG9yLCBVbmtub3duVHlwZTsKCi8vLyBSZXR1cm5zIHRoZSBncmVhdGVzdCBjbG9zdXJlIG9mIHRoZSBnaXZlbiB0eXBlIFtzY2hlbWFdIHdpdGggcmVzcGVjdCB0byBgP2AuCi8vLwovLy8gVGhlIGdyZWF0ZXN0IGNsb3N1cmUgb2YgYSB0eXBlIHNjaGVtYSBgUGAgd2l0aCByZXNwZWN0IHRvIGA/YCBpcyBkZWZpbmVkIGFzCi8vLyBgUGAgd2l0aCBldmVyeSBjb3ZhcmlhbnQgb2NjdXJyZW5jZSBvZiBgP2AgcmVwbGFjZWQgd2l0aCBgTnVsbGAsIGFuZCBldmVyeQovLy8gY29udHJhdmFyaWFudCBvY2N1cnJlbmNlIG9mIGA/YCByZXBsYWNlZCB3aXRoIGBPYmplY3RgLgovLy8KLy8vIElmIHRoZSBzY2hlbWEgY29udGFpbnMgbm8gaW5zdGFuY2VzIG9mIGA/YCwgdGhlIG9yaWdpbmFsIHNjaGVtYSBvYmplY3QgaXMKLy8vIHJldHVybmVkIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGFsbG9jYXRpb24uCi8vLwovLy8gTm90ZSB0aGF0IHRoZSBjbG9zdXJlIG9mIGEgdHlwZSBzY2hlbWEgaXMgYSBwcm9wZXIgdHlwZS4KLy8vCi8vLyBOb3RlIHRoYXQgdGhlIGdyZWF0ZXN0IGNsb3N1cmUgb2YgYSB0eXBlIHNjaGVtYSBpcyBhbHdheXMgYSBzdXBlcnR5cGUgb2YgYW55Ci8vLyB0eXBlIHdoaWNoIG1hdGNoZXMgdGhlIHNjaGVtYS4KRGFydFR5cGUgZ3JlYXRlc3RDbG9zdXJlKENvcmVUeXBlcyBjb3JlVHlwZXMsIERhcnRUeXBlIHNjaGVtYSkgPT4KICAgIF9UeXBlU2NoZW1hRWxpbWluYXRpb25WaXNpdG9yLnJ1bihjb3JlVHlwZXMsIGZhbHNlLCBzY2hlbWEpOwoKLy8vIFJldHVybnMgdGhlIGxlYXN0IGNsb3N1cmUgb2YgdGhlIGdpdmVuIHR5cGUgW3NjaGVtYV0gd2l0aCByZXNwZWN0IHRvIGA/YC4KLy8vCi8vLyBUaGUgbGVhc3QgY2xvc3VyZSBvZiBhIHR5cGUgc2NoZW1hIGBQYCB3aXRoIHJlc3BlY3QgdG8gYD9gIGlzIGRlZmluZWQgYXMKLy8vIGBQYCB3aXRoIGV2ZXJ5IGNvdmFyaWFudCBvY2N1cnJlbmNlIG9mIGA/YCByZXBsYWNlZCB3aXRoIGBPYmplY3RgLCBhbmQgZXZlcnkKLy8vIGNvbnRyYXZhcmlhbnQgb2NjdXJyZW5jZSBvZiBgP2AgcmVwbGFjZWQgd2l0aCBgTnVsbGAuCi8vLwovLy8gSWYgdGhlIHNjaGVtYSBjb250YWlucyBubyBpbnN0YW5jZXMgb2YgYD9gLCB0aGUgb3JpZ2luYWwgc2NoZW1hIG9iamVjdCBpcwovLy8gcmV0dXJuZWQgdG8gYXZvaWQgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbi4KLy8vCi8vLyBOb3RlIHRoYXQgdGhlIGNsb3N1cmUgb2YgYSB0eXBlIHNjaGVtYSBpcyBhIHByb3BlciB0eXBlLgovLy8KLy8vIE5vdGUgdGhhdCB0aGUgbGVhc3QgY2xvc3VyZSBvZiBhIHR5cGUgc2NoZW1hIGlzIGFsd2F5cyBhIHN1YnR5cGUgb2YgYW55IHR5cGUKLy8vIHdoaWNoIG1hdGNoZXMgdGhlIHNjaGVtYS4KRGFydFR5cGUgbGVhc3RDbG9zdXJlKENvcmVUeXBlcyBjb3JlVHlwZXMsIERhcnRUeXBlIHNjaGVtYSkgPT4KICAgIF9UeXBlU2NoZW1hRWxpbWluYXRpb25WaXNpdG9yLnJ1bihjb3JlVHlwZXMsIHRydWUsIHNjaGVtYSk7CgovLy8gVmlzaXRvciB0aGF0IGNvbXB1dGVzIGxlYXN0IGFuZCBncmVhdGVzdCBjbG9zdXJlcyBvZiBhIHR5cGUgc2NoZW1hLgovLy8KLy8vIEVhY2ggdmlzaXRvciBtZXRob2QgcmV0dXJucyBgbnVsbGAgaWYgdGhlcmUgYXJlIG5vIGA/YHMgY29udGFpbmVkIGluIHRoZQovLy8gdHlwZSwgb3RoZXJ3aXNlIGl0IHJldHVybnMgdGhlIHJlc3VsdCBvZiBzdWJzdGl0dXRpbmcgYD9gIHdpdGggYE51bGxgIG9yCi8vLyBgT2JqZWN0YCwgYXMgYXBwcm9wcmlhdGUuCmNsYXNzIF9UeXBlU2NoZW1hRWxpbWluYXRpb25WaXNpdG9yIGV4dGVuZHMgVHlwZVNjaGVtYVZpc2l0b3I8RGFydFR5cGU+IHsKICBmaW5hbCBEYXJ0VHlwZSBudWxsVHlwZTsKCiAgYm9vbCBpc0xlYXN0Q2xvc3VyZTsKCiAgX1R5cGVTY2hlbWFFbGltaW5hdGlvblZpc2l0b3IoQ29yZVR5cGVzIGNvcmVUeXBlcywgdGhpcy5pc0xlYXN0Q2xvc3VyZSkKICAgICAgOiBudWxsVHlwZSA9IGNvcmVUeXBlcy5udWxsQ2xhc3MucmF3VHlwZTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIG5vZGUpIHsKICAgIERhcnRUeXBlIG5ld1JldHVyblR5cGUgPSBub2RlLnJldHVyblR5cGUuYWNjZXB0KHRoaXMpOwogICAgaXNMZWFzdENsb3N1cmUgPSAhaXNMZWFzdENsb3N1cmU7CiAgICBMaXN0PERhcnRUeXBlPiBuZXdQb3NpdGlvbmFsUGFyYW1ldGVycyA9IG51bGw7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgRGFydFR5cGUgc3Vic3RpdHV0aW9uID0gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXS5hY2NlcHQodGhpcyk7CiAgICAgIGlmIChzdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgIG5ld1Bvc2l0aW9uYWxQYXJhbWV0ZXJzID8/PQogICAgICAgICAgICBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICAgIG5ld1Bvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldID0gc3Vic3RpdHV0aW9uOwogICAgICB9CiAgICB9CiAgICBMaXN0PE5hbWVkVHlwZT4gbmV3TmFtZWRQYXJhbWV0ZXJzID0gbnVsbDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5uYW1lZFBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgRGFydFR5cGUgc3Vic3RpdHV0aW9uID0gbm9kZS5uYW1lZFBhcmFtZXRlcnNbaV0udHlwZS5hY2NlcHQodGhpcyk7CiAgICAgIGlmIChzdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgIG5ld05hbWVkUGFyYW1ldGVycyA/Pz0gbm9kZS5uYW1lZFBhcmFtZXRlcnMudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICAgICAgbmV3TmFtZWRQYXJhbWV0ZXJzW2ldID0KICAgICAgICAgICAgbmV3IE5hbWVkVHlwZShub2RlLm5hbWVkUGFyYW1ldGVyc1tpXS5uYW1lLCBzdWJzdGl0dXRpb24pOwogICAgICB9CiAgICB9CiAgICBpc0xlYXN0Q2xvc3VyZSA9ICFpc0xlYXN0Q2xvc3VyZTsKICAgIERhcnRUeXBlIHR5cGVkZWZUeXBlID0gbm9kZS50eXBlZGVmVHlwZT8uYWNjZXB0KHRoaXMpOwogICAgaWYgKG5ld1JldHVyblR5cGUgPT0gbnVsbCAmJgogICAgICAgIG5ld1Bvc2l0aW9uYWxQYXJhbWV0ZXJzID09IG51bGwgJiYKICAgICAgICBuZXdOYW1lZFBhcmFtZXRlcnMgPT0gbnVsbCAmJgogICAgICAgIHR5cGVkZWZUeXBlID09IG51bGwpIHsKICAgICAgLy8gTm8gdHlwZXMgaGFkIHRvIGJlIHN1YnN0aXR1dGVkLgogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKAogICAgICAgICAgbmV3UG9zaXRpb25hbFBhcmFtZXRlcnMgPz8gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgICAgIG5ld1JldHVyblR5cGUgPz8gbm9kZS5yZXR1cm5UeXBlLAogICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuZXdOYW1lZFBhcmFtZXRlcnMgPz8gbm9kZS5uYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgICB0eXBlUGFyYW1ldGVyczogbm9kZS50eXBlUGFyYW1ldGVycywKICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICAgIHR5cGVkZWZUeXBlOiB0eXBlZGVmVHlwZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSBub2RlKSB7CiAgICBMaXN0PERhcnRUeXBlPiBuZXdUeXBlQXJndW1lbnRzID0gbnVsbDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIERhcnRUeXBlIHN1YnN0aXR1dGlvbiA9IG5vZGUudHlwZUFyZ3VtZW50c1tpXS5hY2NlcHQodGhpcyk7CiAgICAgIGlmIChzdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICAgIG5ld1R5cGVBcmd1bWVudHMgPz89IG5vZGUudHlwZUFyZ3VtZW50cy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgICBuZXdUeXBlQXJndW1lbnRzW2ldID0gc3Vic3RpdHV0aW9uOwogICAgICB9CiAgICB9CiAgICBpZiAobmV3VHlwZUFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgIC8vIE5vIHR5cGUgYXJndW1lbnRzIG5lZWRlZCB0byBiZSBzdWJzdGl0dXRlZC4KICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUobm9kZS5jbGFzc05vZGUsIG5ld1R5cGVBcmd1bWVudHMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRVbmtub3duVHlwZShVbmtub3duVHlwZSBub2RlKSA9PgogICAgICBpc0xlYXN0Q2xvc3VyZSA/IG51bGxUeXBlIDogY29uc3QgRHluYW1pY1R5cGUoKTsKCiAgLy8vIFJ1bnMgYW4gaW5zdGFuY2Ugb2YgdGhlIHZpc2l0b3Igb24gdGhlIGdpdmVuIFtzY2hlbWFdIGFuZCByZXR1cm5zIHRoZQogIC8vLyByZXN1bHRpbmcgdHlwZS4gIElmIHRoZSBzY2hlbWEgY29udGFpbnMgbm8gaW5zdGFuY2VzIG9mIGA/YCwgdGhlIG9yaWdpbmFsCiAgLy8vIHNjaGVtYSBvYmplY3QgaXMgcmV0dXJuZWQgdG8gYXZvaWQgdW5uZWNlc3NhcnkgYWxsb2NhdGlvbi4KICBzdGF0aWMgRGFydFR5cGUgcnVuKAogICAgICBDb3JlVHlwZXMgY29yZVR5cGVzLCBib29sIGlzTGVhc3RDbG9zdXJlLCBEYXJ0VHlwZSBzY2hlbWEpIHsKICAgIHZhciB2aXNpdG9yID0gbmV3IF9UeXBlU2NoZW1hRWxpbWluYXRpb25WaXNpdG9yKGNvcmVUeXBlcywgaXNMZWFzdENsb3N1cmUpOwogICAgdmFyIHJlc3VsdCA9IHNjaGVtYS5hY2NlcHQodmlzaXRvcik7CiAgICBhc3NlcnQodmlzaXRvci5pc0xlYXN0Q2xvc3VyZSA9PSBpc0xlYXN0Q2xvc3VyZSk7CiAgICByZXR1cm4gcmVzdWx0ID8/IHNjaGVtYTsKICB9Cn0KgIQATU4/ASFIATgBPwFRBFBPPAROLgQ9BFEjQkEBTgRNUToETi4EPQRRHj9AAUgETU0eShsBFwFKMAEMMjsmM0FJIiQ/MwgGLzxJIk0gRwgGJjshKyYfKRMNH0AsRy8/JQYEAQw0LDpCIkksCAYkNRMNQgYEAQwxNwFMUEEXQ1ApNh0EAgFHcGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hX2VsaW1pbmF0aW9uLmRhcnRQc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hX2Vudmlyb25tZW50LmRhcnS8dS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UubWQgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3MsCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEludGVyZmFjZVR5cGUsCiAgICAgICAgTmFtZWRUeXBlLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBUeXBlUGFyYW1ldGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgc2hvdyBDbGFzc0hpZXJhcmNoeTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIHNob3cgU3Vic3RpdHV0aW9uOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9zcmMvaGllcmFyY2h5X2Jhc2VkX3R5cGVfZW52aXJvbm1lbnQuZGFydCcKICAgIHNob3cgSGllcmFyY2h5QmFzZWRUeXBlRW52aXJvbm1lbnQ7CgppbXBvcnQgJ3N0YW5kYXJkX2JvdW5kcy5kYXJ0JyBzaG93IFN0YW5kYXJkQm91bmRzOwoKaW1wb3J0ICd0eXBlX2NvbnN0cmFpbnRfZ2F0aGVyZXIuZGFydCcgc2hvdyBUeXBlQ29uc3RyYWludEdhdGhlcmVyOwoKaW1wb3J0ICd0eXBlX3NjaGVtYS5kYXJ0JyBzaG93IFVua25vd25UeXBlLCB0eXBlU2NoZW1hVG9TdHJpbmcsIGlzS25vd247CgppbXBvcnQgJ3R5cGVfc2NoZW1hX2VsaW1pbmF0aW9uLmRhcnQnIHNob3cgZ3JlYXRlc3RDbG9zdXJlLCBsZWFzdENsb3N1cmU7CgovLyBUT0RPKHBhdWxiZXJyeSk6IHRyeSB0byBwdXNoIHRoaXMgZnVuY3Rpb25hbGl0eSBpbnRvIGtlcm5lbC4KRnVuY3Rpb25UeXBlIHN1YnN0aXR1dGVUeXBlUGFyYW1zKAogICAgRnVuY3Rpb25UeXBlIHR5cGUsCiAgICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHN1YnN0aXR1dGlvbk1hcCwKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gbmV3VHlwZVBhcmFtZXRlcnMpIHsKICB2YXIgc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21NYXAoc3Vic3RpdHV0aW9uTWFwKTsKICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZSgKICAgICAgdHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5tYXAoc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKS50b0xpc3QoKSwKICAgICAgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHR5cGUucmV0dXJuVHlwZSksCiAgICAgIG5hbWVkUGFyYW1ldGVyczogdHlwZS5uYW1lZFBhcmFtZXRlcnMKICAgICAgICAgIC5tYXAoKG5hbWVkKSA9PiBuZXcgTmFtZWRUeXBlKAogICAgICAgICAgICAgIG5hbWVkLm5hbWUsIHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShuYW1lZC50eXBlKSkpCiAgICAgICAgICAudG9MaXN0KCksCiAgICAgIHR5cGVQYXJhbWV0ZXJzOiBuZXdUeXBlUGFyYW1ldGVycywKICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogdHlwZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICB0eXBlZGVmVHlwZTogdHlwZS50eXBlZGVmVHlwZSA9PSBudWxsCiAgICAgICAgICA/IG51bGwKICAgICAgICAgIDogc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHR5cGUudHlwZWRlZlR5cGUpKTsKfQoKLy8vIEdpdmVuIGEgW0Z1bmN0aW9uVHlwZV0sIGdldHMgdGhlIHR5cGUgb2YgdGhlIG5hbWVkIHBhcmFtZXRlciB3aXRoIHRoZSBnaXZlbgovLy8gW25hbWVdLCBvciBgZHluYW1pY2AgaWYgdGhlcmUgaXMgbm8gcGFyYW1ldGVyIHdpdGggdGhlIGdpdmVuIG5hbWUuCkRhcnRUeXBlIGdldE5hbWVkUGFyYW1ldGVyVHlwZShGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlLCBTdHJpbmcgbmFtZSkgewogIHJldHVybiBmdW5jdGlvblR5cGUuZ2V0TmFtZWRQYXJhbWV0ZXIobmFtZSkgPz8gY29uc3QgRHluYW1pY1R5cGUoKTsKfQoKLy8vIEdpdmVuIGEgW0Z1bmN0aW9uVHlwZV0sIGdldHMgdGhlIHR5cGUgb2YgdGhlIFtpXXRoIHBvc2l0aW9uYWwgcGFyYW1ldGVyLCBvcgovLy8gYGR5bmFtaWNgIGlmIHRoZXJlIGlzIG5vIHBhcmFtZXRlciB3aXRoIHRoYXQgaW5kZXguCkRhcnRUeXBlIGdldFBvc2l0aW9uYWxQYXJhbWV0ZXJUeXBlKEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUsIGludCBpKSB7CiAgaWYgKGkgPCBmdW5jdGlvblR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoKSB7CiAgICByZXR1cm4gZnVuY3Rpb25UeXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogIH0gZWxzZSB7CiAgICByZXR1cm4gY29uc3QgRHluYW1pY1R5cGUoKTsKICB9Cn0KCi8vLyBBIGNvbnN0cmFpbnQgb24gYSB0eXBlIHBhcmFtZXRlciB0aGF0IHdlJ3JlIGluZmVycmluZy4KY2xhc3MgVHlwZUNvbnN0cmFpbnQgewogIC8vLyBUaGUgbG93ZXIgYm91bmQgb2YgdGhlIHR5cGUgYmVpbmcgY29uc3RyYWluZWQuICBUaGlzIGJvdW5kIG11c3QgYmUgYQogIC8vLyBzdWJ0eXBlIG9mIHRoZSB0eXBlIGJlaW5nIGNvbnN0cmFpbmVkLgogIERhcnRUeXBlIGxvd2VyOwoKICAvLy8gVGhlIHVwcGVyIGJvdW5kIG9mIHRoZSB0eXBlIGJlaW5nIGNvbnN0cmFpbmVkLiAgVGhlIHR5cGUgYmVpbmcgY29uc3RyYWluZWQKICAvLy8gbXVzdCBiZSBhIHN1YnR5cGUgb2YgdGhpcyBib3VuZC4KICBEYXJ0VHlwZSB1cHBlcjsKCiAgVHlwZUNvbnN0cmFpbnQoKQogICAgICA6IGxvd2VyID0gY29uc3QgVW5rbm93blR5cGUoKSwKICAgICAgICB1cHBlciA9IGNvbnN0IFVua25vd25UeXBlKCk7CgogIFR5cGVDb25zdHJhaW50Ll8odGhpcy5sb3dlciwgdGhpcy51cHBlcik7CgogIFR5cGVDb25zdHJhaW50IGNsb25lKCkgPT4gbmV3IFR5cGVDb25zdHJhaW50Ll8obG93ZXIsIHVwcGVyKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJyR7dHlwZVNjaGVtYVRvU3RyaW5nKGxvd2VyKX0gPDogPHR5cGU+IDw6ICR7dHlwZVNjaGVtYVRvU3RyaW5nKHVwcGVyKX0nOwp9CgpjbGFzcyBUeXBlU2NoZW1hRW52aXJvbm1lbnQgZXh0ZW5kcyBIaWVyYXJjaHlCYXNlZFR5cGVFbnZpcm9ubWVudAogICAgd2l0aCBTdGFuZGFyZEJvdW5kcyB7CiAgVHlwZVNjaGVtYUVudmlyb25tZW50KENvcmVUeXBlcyBjb3JlVHlwZXMsIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSkKICAgICAgOiBzdXBlcihjb3JlVHlwZXMsIGhpZXJhcmNoeSk7CgogIENsYXNzIGdldCBmdW5jdGlvbkNsYXNzID0+IGNvcmVUeXBlcy5mdW5jdGlvbkNsYXNzOwoKICBJbnRlcmZhY2VUeXBlIGdldExlZ2FjeUxlYXN0VXBwZXJCb3VuZCgKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlMSwgSW50ZXJmYWNlVHlwZSB0eXBlMikgewogICAgcmV0dXJuIGhpZXJhcmNoeS5nZXRMZWdhY3lMZWFzdFVwcGVyQm91bmQodHlwZTEsIHR5cGUyKTsKICB9CgogIC8vLyBNb2RpZnkgdGhlIGdpdmVuIFtjb25zdHJhaW50XSdzIGxvd2VyIGJvdW5kIHRvIGluY2x1ZGUgW2xvd2VyXS4KICB2b2lkIGFkZExvd2VyQm91bmQoVHlwZUNvbnN0cmFpbnQgY29uc3RyYWludCwgRGFydFR5cGUgbG93ZXIpIHsKICAgIGNvbnN0cmFpbnQubG93ZXIgPSBnZXRTdGFuZGFyZFVwcGVyQm91bmQoY29uc3RyYWludC5sb3dlciwgbG93ZXIpOwogIH0KCiAgLy8vIE1vZGlmeSB0aGUgZ2l2ZW4gW2NvbnN0cmFpbnRdJ3MgdXBwZXIgYm91bmQgdG8gaW5jbHVkZSBbdXBwZXJdLgogIHZvaWQgYWRkVXBwZXJCb3VuZChUeXBlQ29uc3RyYWludCBjb25zdHJhaW50LCBEYXJ0VHlwZSB1cHBlcikgewogICAgY29uc3RyYWludC51cHBlciA9IGdldFN0YW5kYXJkTG93ZXJCb3VuZChjb25zdHJhaW50LnVwcGVyLCB1cHBlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlT2ZPdmVybG9hZGVkQXJpdGhtZXRpYyhEYXJ0VHlwZSB0eXBlMSwgRGFydFR5cGUgdHlwZTIpIHsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogdGhpcyBtYXRjaGVzIHdoYXQgaXMgZGVmaW5lZCBpbiB0aGUgc3BlYy4gIEl0IHdvdWxkIGJlCiAgICAvLyBuaWNlIGlmIHdlIGNvdWxkIGNoYW5nZSBrZXJuZWwgdG8gbWF0Y2ggdGhlIHNwZWMgYW5kIG5vdCBoYXZlIHRvCiAgICAvLyBvdmVycmlkZS4KICAgIGlmICh0eXBlMSA9PSBpbnRUeXBlKSB7CiAgICAgIGlmICh0eXBlMiA9PSBpbnRUeXBlKSByZXR1cm4gdHlwZTI7CiAgICAgIGlmICh0eXBlMiA9PSBkb3VibGVUeXBlKSByZXR1cm4gdHlwZTI7CiAgICB9CiAgICByZXR1cm4gbnVtVHlwZTsKICB9CgogIC8vLyBJbmZlcnMgYSBnZW5lcmljIHR5cGUsIGZ1bmN0aW9uLCBtZXRob2QsIG9yIGxpc3QvbWFwIGxpdGVyYWwKICAvLy8gaW5zdGFudGlhdGlvbiwgdXNpbmcgdGhlIGRvd253YXJkIGNvbnRleHQgdHlwZSBhcyB3ZWxsIGFzIHRoZSBhcmd1bWVudAogIC8vLyB0eXBlcyBpZiBhdmFpbGFibGUuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBnaXZlbiBhIGZ1bmN0aW9uIHR5cGUgd2l0aCBnZW5lcmljIHR5cGUgcGFyYW1ldGVycywgdGhpcwogIC8vLyBpbmZlcnMgdGhlIHR5cGUgcGFyYW1ldGVycyBmcm9tIHRoZSBhY3R1YWwgYXJndW1lbnQgdHlwZXMuCiAgLy8vCiAgLy8vIENvbmNyZXRlbHksIGdpdmVuIGEgZnVuY3Rpb24gdHlwZSB3aXRoIHBhcmFtZXRlciB0eXBlcyBQMCwgUDEsIC4uLiBQbiwKICAvLy8gcmVzdWx0IHR5cGUgUiwgYW5kIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzIFQwLCBUMSwgLi4uIFRtLCB1c2UgdGhlCiAgLy8vIGFyZ3VtZW50IHR5cGVzIEEwLCBBMSwgLi4uIEFuIHRvIHNvbHZlIGZvciB0aGUgdHlwZSBwYXJhbWV0ZXJzLgogIC8vLwogIC8vLyBGb3IgZWFjaCBwYXJhbWV0ZXIgUGksIHdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgQWkgPDogUGkuIFdlIGNhbiBkbyB0aGlzIGJ5CiAgLy8vIHJ1bm5pbmcgdGhlIHN1YnR5cGUgYWxnb3JpdGhtLCBhbmQgd2hlbiB3ZSByZWFjaCBhIHR5cGUgcGFyYW1ldGVyIFRqLAogIC8vLyByZWNvcmRpbmcgdGhlIGxvd2VyIG9yIHVwcGVyIGJvdW5kIGl0IG11c3Qgc2F0aXNmeS4gQXQgdGhlIGVuZCwgYWxsCiAgLy8vIGNvbnN0cmFpbnRzIGNhbiBiZSBjb21iaW5lZCB0byBkZXRlcm1pbmUgdGhlIHR5cGUuCiAgLy8vCiAgLy8vIEFsbCBjb25zdHJhaW50cyBvbiBlYWNoIHR5cGUgcGFyYW1ldGVyIFRqIGFyZSB0cmFja2VkLCBhcyB3ZWxsIGFzIHdoZXJlCiAgLy8vIHRoZXkgb3JpZ2luYXRlZCwgc28gd2UgY2FuIGlzc3VlIGFuIGVycm9yIG1lc3NhZ2UgdHJhY2luZyBiYWNrIHRvIHRoZQogIC8vLyBhcmd1bWVudCB2YWx1ZXMsIHR5cGUgcGFyYW1ldGVyICJleHRlbmRzIiBjbGF1c2UsIG9yIHRoZSByZXR1cm4gdHlwZQogIC8vLyBjb250ZXh0LgogIC8vLwogIC8vLyBJZiBub24tbnVsbCB2YWx1ZXMgZm9yIFtmb3JtYWxUeXBlc10gYW5kIFthY3R1YWxUeXBlc10gYXJlIHByb3ZpZGVkLCB0aGlzCiAgLy8vIGlzIHVwd2FyZHMgaW5mZXJlbmNlLiAgT3RoZXJ3aXNlIGl0IGlzIGRvd253YXJkIGluZmVyZW5jZS4KICB2b2lkIGluZmVyR2VuZXJpY0Z1bmN0aW9uT3JUeXBlKAogICAgICBEYXJ0VHlwZSBkZWNsYXJlZFJldHVyblR5cGUsCiAgICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnNUb0luZmVyLAogICAgICBMaXN0PERhcnRUeXBlPiBmb3JtYWxUeXBlcywKICAgICAgTGlzdDxEYXJ0VHlwZT4gYWN0dWFsVHlwZXMsCiAgICAgIERhcnRUeXBlIHJldHVybkNvbnRleHRUeXBlLAogICAgICBMaXN0PERhcnRUeXBlPiBpbmZlcnJlZFR5cGVzLAogICAgICB7Ym9vbCBpc0NvbnN0OiBmYWxzZX0pIHsKICAgIGlmICh0eXBlUGFyYW1ldGVyc1RvSW5mZXIuaXNFbXB0eSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gQ3JlYXRlIGEgVHlwZUNvbnN0cmFpbnRHYXRoZXJlciB0aGF0IHdpbGwgYWxsb3cgY2VydGFpbiB0eXBlIHBhcmFtZXRlcnMKICAgIC8vIHRvIGJlIGluZmVycmVkLiBJdCB3aWxsIG9wdGltaXN0aWNhbGx5IGFzc3VtZSB0aGVzZSB0eXBlIHBhcmFtZXRlcnMgY2FuCiAgICAvLyBiZSBzdWJ0eXBlcyAob3Igc3VwZXJ0eXBlcykgYXMgbmVjZXNzYXJ5LCBhbmQgdHJhY2sgdGhlIGNvbnN0cmFpbnRzIHRoYXQKICAgIC8vIGFyZSBpbXBsaWVkIGJ5IHRoaXMuCiAgICB2YXIgZ2F0aGVyZXIgPSBuZXcgVHlwZUNvbnN0cmFpbnRHYXRoZXJlcih0aGlzLCB0eXBlUGFyYW1ldGVyc1RvSW5mZXIpOwoKICAgIGlmICghaXNFbXB0eUNvbnRleHQocmV0dXJuQ29udGV4dFR5cGUpKSB7CiAgICAgIGlmIChpc0NvbnN0KSB7CiAgICAgICAgcmV0dXJuQ29udGV4dFR5cGUgPSBuZXcgVHlwZVZhcmlhYmxlRWxpbWluYXRvcihjb3JlVHlwZXMpCiAgICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZShyZXR1cm5Db250ZXh0VHlwZSk7CiAgICAgIH0KICAgICAgZ2F0aGVyZXIudHJ5U3VidHlwZU1hdGNoKGRlY2xhcmVkUmV0dXJuVHlwZSwgcmV0dXJuQ29udGV4dFR5cGUpOwogICAgfQoKICAgIGlmIChmb3JtYWxUeXBlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9ybWFsVHlwZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAvLyBUcnkgdG8gcGFzcyBlYWNoIGFyZ3VtZW50IHRvIGVhY2ggcGFyYW1ldGVyLCByZWNvcmRpbmcgYW55IHR5cGUKICAgICAgICAvLyBwYXJhbWV0ZXIgYm91bmRzIHRoYXQgd2VyZSBpbXBsaWVkIGJ5IHRoaXMgYXNzaWdubWVudC4KICAgICAgICBnYXRoZXJlci50cnlTdWJ0eXBlTWF0Y2goYWN0dWFsVHlwZXNbaV0sIGZvcm1hbFR5cGVzW2ldKTsKICAgICAgfQogICAgfQoKICAgIGluZmVyVHlwZUZyb21Db25zdHJhaW50cygKICAgICAgICBnYXRoZXJlci5jb21wdXRlQ29uc3RyYWludHMoKSwgdHlwZVBhcmFtZXRlcnNUb0luZmVyLCBpbmZlcnJlZFR5cGVzLAogICAgICAgIGRvd253YXJkc0luZmVyUGhhc2U6IGZvcm1hbFR5cGVzID09IG51bGwpOwogIH0KCiAgYm9vbCBoYXNPbWl0dGVkQm91bmQoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIpIHsKICAgIC8vIElmIHRoZSBib3VuZCB3YXMgb21pdHRlZCBieSB0aGUgcHJvZ3JhbW1lciwgdGhlIEtlcm5lbCByZXByZXNlbnRhdGlvbiBmb3IKICAgIC8vIHRoZSBwYXJhbWV0ZXIgd2lsbCBsb29rIHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzoKICAgIC8vCiAgICAvLyAgICAgVCBleHRlbmRzIE9iamVjdCA9IGR5bmFtaWMKICAgIC8vCiAgICAvLyBOb3RlIHRoYXQgaXQncyBub3QgcG9zc2libGUgdG8gcmVjZWl2ZSBbT2JqZWN0XSBhcyBbVHlwZVBhcmFtZXRlci5ib3VuZF0KICAgIC8vIGFuZCBgZHluYW1pY2AgYXMgW1R5cGVQYXJhbWV0ZXIuZGVmYXVsdFR5cGVdIGZyb20gdGhlIGZyb250IGVuZCBpbiBhbnkKICAgIC8vIG90aGVyIHdheS4KICAgIERhcnRUeXBlIGJvdW5kID0gcGFyYW1ldGVyLmJvdW5kOwogICAgcmV0dXJuIGJvdW5kIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICBpZGVudGljYWwoYm91bmQuY2xhc3NOb2RlLCBjb3JlVHlwZXMub2JqZWN0Q2xhc3MpICYmCiAgICAgICAgcGFyYW1ldGVyLmRlZmF1bHRUeXBlIGlzIER5bmFtaWNUeXBlOwogIH0KCiAgLy8vIFVzZSB0aGUgZ2l2ZW4gW2NvbnN0cmFpbnRzXSB0byBzdWJzdGl0dXRlIGZvciB0eXBlIHZhcmlhYmxlcy4KICAvLy8KICAvLy8gW3R5cGVQYXJhbWV0ZXJzVG9JbmZlcl0gaXMgdGhlIHNldCBvZiB0eXBlIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgYmUKICAvLy8gc3Vic3RpdHV0ZWQgZm9yLiAgW2luZmVycmVkVHlwZXNdIHNob3VsZCBiZSBhIGxpc3Qgb2YgdGhlIHNhbWUgbGVuZ3RoLgogIC8vLwogIC8vLyBJZiBbZG93bndhcmRzSW5mZXJQaGFzZV0gaXMgYHRydWVgLCB0aGVuIHdlIGFyZSBpbiB0aGUgZmlyc3QgcGFzcyBvZgogIC8vLyBpbmZlcmVuY2UsIHB1c2hpbmcgY29udGV4dCB0eXBlcyBkb3duLiAgVGhpcyBtZWFucyB3ZSBhcmUgYWxsb3dlZCB0byBwdXNoCiAgLy8vIGRvd24gYD9gIHRvIHByZWNpc2VseSByZXByZXNlbnQgYW4gdW5rbm93biB0eXBlLiAgW2luZmVycmVkVHlwZXNdIHNob3VsZAogIC8vLyBiZSBpbml0aWFsbHkgcG9wdWxhdGVkIHdpdGggYD9gLiAgVGhlc2UgYD9gcyB3aWxsIGJlIHJlcGxhY2VkLCBpZgogIC8vLyBhcHByb3ByaWF0ZSwgd2l0aCB0aGUgdHlwZXMgdGhhdCB3ZXJlIGluZmVycmVkIGJ5IGRvd253YXJkcyBpbmZlcmVuY2UuCiAgLy8vCiAgLy8vIElmIFtkb3dud2FyZHNJbmZlclBoYXNlXSBpcyBgZmFsc2VgLCB0aGVuIHdlIGFyZSBpbiB0aGUgc2Vjb25kIHBhc3Mgb2YKICAvLy8gaW5mZXJlbmNlLCBhbmQgbXVzdCBub3QgY29uY2x1ZGUgYD9gIGZvciBhbnkgdHlwZSBmb3JtYWwuICBJbiB0aGlzIHBhc3MsCiAgLy8vIFtpbmZlcnJlZFR5cGVzXSBzaG91bGQgY29udGFpbiB0aGUgdmFsdWVzIGZyb20gdGhlIGZpcnN0IHBhc3MuICBUaGV5IHdpbGwKICAvLy8gYmUgcmVwbGFjZWQgd2l0aCB0aGUgZmluYWwgaW5mZXJyZWQgdHlwZXMuCiAgdm9pZCBpbmZlclR5cGVGcm9tQ29uc3RyYWludHMoTWFwPFR5cGVQYXJhbWV0ZXIsIFR5cGVDb25zdHJhaW50PiBjb25zdHJhaW50cywKICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyc1RvSW5mZXIsIExpc3Q8RGFydFR5cGU+IGluZmVycmVkVHlwZXMsCiAgICAgIHtib29sIGRvd253YXJkc0luZmVyUGhhc2U6IGZhbHNlfSkgewogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZXNGcm9tRG93bndhcmRzSW5mZXJlbmNlID0KICAgICAgICBkb3dud2FyZHNJbmZlclBoYXNlID8gbnVsbCA6IGluZmVycmVkVHlwZXMudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVyc1RvSW5mZXIubGVuZ3RoOyBpKyspIHsKICAgICAgVHlwZVBhcmFtZXRlciB0eXBlUGFyYW0gPSB0eXBlUGFyYW1ldGVyc1RvSW5mZXJbaV07CgogICAgICB2YXIgdHlwZVBhcmFtQm91bmQgPSB0eXBlUGFyYW0uYm91bmQ7CiAgICAgIERhcnRUeXBlIGV4dGVuZHNDb25zdHJhaW50OwogICAgICBpZiAoIWhhc09taXR0ZWRCb3VuZCh0eXBlUGFyYW0pKSB7CiAgICAgICAgZXh0ZW5kc0NvbnN0cmFpbnQgPQogICAgICAgICAgICBTdWJzdGl0dXRpb24uZnJvbVBhaXJzKHR5cGVQYXJhbWV0ZXJzVG9JbmZlciwgaW5mZXJyZWRUeXBlcykKICAgICAgICAgICAgICAgIC5zdWJzdGl0dXRlVHlwZSh0eXBlUGFyYW1Cb3VuZCk7CiAgICAgIH0KCiAgICAgIHZhciBjb25zdHJhaW50ID0gY29uc3RyYWludHNbdHlwZVBhcmFtXTsKICAgICAgaWYgKGRvd253YXJkc0luZmVyUGhhc2UpIHsKICAgICAgICBpbmZlcnJlZFR5cGVzW2ldID0KICAgICAgICAgICAgX2luZmVyVHlwZVBhcmFtZXRlckZyb21Db250ZXh0KGNvbnN0cmFpbnQsIGV4dGVuZHNDb25zdHJhaW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbmZlcnJlZFR5cGVzW2ldID0gX2luZmVyVHlwZVBhcmFtZXRlckZyb21BbGwoCiAgICAgICAgICAgIHR5cGVzRnJvbURvd253YXJkc0luZmVyZW5jZVtpXSwgY29uc3RyYWludCwgZXh0ZW5kc0NvbnN0cmFpbnQpOwogICAgICB9CiAgICB9CgogICAgLy8gSWYgdGhlIGRvd253YXJkcyBpbmZlciBwaGFzZSBoYXMgZmFpbGVkLCB3ZSdsbCBjYXRjaCB0aGlzIGluIHRoZSB1cHdhcmRzCiAgICAvLyBwaGFzZSBsYXRlciBvbi4KICAgIGlmIChkb3dud2FyZHNJbmZlclBoYXNlKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAvLyBDaGVjayB0aGUgaW5mZXJyZWQgdHlwZXMgYWdhaW5zdCBhbGwgb2YgdGhlIGNvbnN0cmFpbnRzLgogICAgdmFyIGtub3duVHlwZXMgPSA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVQYXJhbWV0ZXJzVG9JbmZlci5sZW5ndGg7IGkrKykgewogICAgICBUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbSA9IHR5cGVQYXJhbWV0ZXJzVG9JbmZlcltpXTsKICAgICAgdmFyIGNvbnN0cmFpbnQgPSBjb25zdHJhaW50c1t0eXBlUGFyYW1dOwogICAgICB2YXIgdHlwZVBhcmFtQm91bmQgPQogICAgICAgICAgU3Vic3RpdHV0aW9uLmZyb21QYWlycyh0eXBlUGFyYW1ldGVyc1RvSW5mZXIsIGluZmVycmVkVHlwZXMpCiAgICAgICAgICAgICAgLnN1YnN0aXR1dGVUeXBlKHR5cGVQYXJhbS5ib3VuZCk7CgogICAgICB2YXIgaW5mZXJyZWQgPSBpbmZlcnJlZFR5cGVzW2ldOwogICAgICBib29sIHN1Y2Nlc3MgPSB0eXBlU2F0aXNmaWVzQ29uc3RyYWludChpbmZlcnJlZCwgY29uc3RyYWludCk7CiAgICAgIGlmIChzdWNjZXNzICYmICFoYXNPbWl0dGVkQm91bmQodHlwZVBhcmFtKSkgewogICAgICAgIC8vIElmIGV2ZXJ5dGhpbmcgZWxzZSBzdWNjZWVkZWQsIGNoZWNrIHRoZSBgZXh0ZW5kc2AgY29uc3RyYWludC4KICAgICAgICB2YXIgZXh0ZW5kc0NvbnN0cmFpbnQgPSB0eXBlUGFyYW1Cb3VuZDsKICAgICAgICBzdWNjZXNzID0gaXNTdWJ0eXBlT2YoaW5mZXJyZWQsIGV4dGVuZHNDb25zdHJhaW50KTsKICAgICAgfQoKICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgLy8gVE9ETyhwYXVsYmVycnkpOiByZXBvcnQgZXJyb3IuCgogICAgICAgIC8vIEhldXJpc3RpYzogZXZlbiBpZiB3ZSBmYWlsZWQsIGtlZXAgdGhlIGVycm9uZW91cyB0eXBlLgogICAgICAgIC8vIEl0IHNob3VsZCBzYXRpc2Z5IGF0IGxlYXN0IHNvbWUgb2YgdGhlIGNvbnN0cmFpbnRzIChlLmcuIHRoZSByZXR1cm4KICAgICAgICAvLyBjb250ZXh0KS4gSWYgd2UgZmFsbCBiYWNrIHRvIGluc3RhbnRpYXRlVG9Cb3VuZHMsIHdlJ2xsIHR5cGljYWxseSBnZXQKICAgICAgICAvLyBtb3JlIGVycm9ycyAoZS5nLiBiZWNhdXNlIGBkeW5hbWljYCBpcyB0aGUgbW9zdCBjb21tb24gYm91bmQpLgogICAgICB9CgogICAgICBpZiAoaXNLbm93bihpbmZlcnJlZCkpIHsKICAgICAgICBrbm93blR5cGVzW3R5cGVQYXJhbV0gPSBpbmZlcnJlZDsKICAgICAgfQogICAgfQoKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogcmVwb3J0IGFueSBlcnJvcnMgZnJvbSBpbnN0YW50aWF0ZVRvQm91bmRzLgogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1N1YnR5cGVPZihEYXJ0VHlwZSBzdWJ0eXBlLCBEYXJ0VHlwZSBzdXBlcnR5cGUpIHsKICAgIGlmIChzdWJ0eXBlIGlzIFVua25vd25UeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChzdWJ0eXBlID09IE51bGwgJiYgc3VwZXJ0eXBlIGlzIFVua25vd25UeXBlKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBzdXBlci5pc1N1YnR5cGVPZihzdWJ0eXBlLCBzdXBlcnR5cGUpOwogIH0KCiAgYm9vbCBpc0VtcHR5Q29udGV4dChEYXJ0VHlwZSBjb250ZXh0KSB7CiAgICBpZiAoY29udGV4dCBpcyBEeW5hbWljVHlwZSkgewogICAgICAvLyBBbmFseXplciB0cmVhdHMgYSB0eXBlIGNvbnRleHQgb2YgYGR5bmFtaWNgIGFzIGVxdWl2YWxlbnQgdG8gYW4gZW1wdHkKICAgICAgLy8gY29udGV4dC4gIFRPRE8ocGF1bGJlcnJ5KTogdGhpcyBpcyBub3Qgc3BlYydlZCBhbnl3aGVyZTsgZG8gd2Ugc3RpbGwKICAgICAgLy8gd2FudCB0byBkbyB0aGlzPwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBjb250ZXh0ID09IG51bGw7CiAgfQoKICAvLy8gVHJ1ZSBpZiBbbWVtYmVyXSBpcyBhIGJpbmFyeSBvcGVyYXRvciB0aGF0IHJldHVybnMgYW4gYGludGAgaWYgYm90aAogIC8vLyBvcGVyYW5kcyBhcmUgYGludGAsIGFuZCBvdGhlcndpc2UgcmV0dXJucyBgZG91YmxlYC4KICAvLy8KICAvLy8gTm90ZSB0aGF0IHRoaXMgYmVoYXZpb3IgZGVwZW5kcyBvbiB0aGUgcmVjZWl2ZXIgdHlwZSwgc28gd2UgY2FuIG9ubHkgbWFrZQogIC8vLyB0aGlzIGRldGVybWluYXRpb24gaWYgd2Uga25vdyB0aGUgdHlwZSBvZiB0aGUgcmVjZWl2ZXIuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjYXNlIG9mIHR5cGUtYmFzZWQgb3ZlcmxvYWRpbmcsIHdoaWNoIGluIERhcnQgaXMgb25seSBzdXBwb3J0ZWQKICAvLy8gYnkgZ2l2aW5nIHNwZWNpYWwgdHJlYXRtZW50IHRvIGNlcnRhaW4gYXJpdGhtZXRpYyBvcGVyYXRvcnMuCiAgYm9vbCBpc092ZXJsb2FkZWRBcml0aG1ldGljT3BlcmF0b3JBbmRUeXBlKAogICAgICBQcm9jZWR1cmUgbWVtYmVyLCBEYXJ0VHlwZSByZWNlaXZlclR5cGUpIHsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogdGhpcyBtYXRjaGVzIHdoYXQgaXMgZGVmaW5lZCBpbiB0aGUgc3BlYy4gIEl0IHdvdWxkIGJlCiAgICAvLyBuaWNlIGlmIHdlIGNvdWxkIGNoYW5nZSBrZXJuZWwgdG8gbWF0Y2ggdGhlIHNwZWMgYW5kIG5vdCBoYXZlIHRvCiAgICAvLyBvdmVycmlkZS4KICAgIGlmIChtZW1iZXIubmFtZS5uYW1lID09ICdyZW1haW5kZXInKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoIShyZWNlaXZlclR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIGlkZW50aWNhbChyZWNlaXZlclR5cGUuY2xhc3NOb2RlLCBjb3JlVHlwZXMuaW50Q2xhc3MpKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gaXNPdmVybG9hZGVkQXJpdGhtZXRpY09wZXJhdG9yKG1lbWJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVG9wKERhcnRUeXBlIHQpIHsKICAgIGlmICh0IGlzIFVua25vd25UeXBlKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHN1cGVyLmlzVG9wKHQpOwogICAgfQogIH0KCiAgLy8vIENvbXB1dGVzIHRoZSBjb25zdHJhaW50IHNvbHV0aW9uIGZvciBhIHR5cGUgdmFyaWFibGUgYmFzZWQgb24gYSBnaXZlbiBzZXQKICAvLy8gb2YgY29uc3RyYWludHMuCiAgLy8vCiAgLy8vIElmIFtncm91bmRlZF0gaXMgYHRydWVgLCB0aGVuIHRoZSByZXR1cm5lZCB0eXBlIGlzIGd1YXJhbnRlZWQgdG8gYmUgYQogIC8vLyBrbm93biB0eXBlIChpLmUuIGl0IHdpbGwgbm90IGNvbnRhaW4gYW55IGluc3RhbmNlcyBvZiBgP2ApLgogIERhcnRUeXBlIHNvbHZlVHlwZUNvbnN0cmFpbnQoVHlwZUNvbnN0cmFpbnQgY29uc3RyYWludCwKICAgICAge2Jvb2wgZ3JvdW5kZWQ6IGZhbHNlfSkgewogICAgLy8gUHJlZmVyIHRoZSBrbm93biBib3VuZCwgaWYgYW55LgogICAgaWYgKGlzS25vd24oY29uc3RyYWludC5sb3dlcikpIHJldHVybiBjb25zdHJhaW50Lmxvd2VyOwogICAgaWYgKGlzS25vd24oY29uc3RyYWludC51cHBlcikpIHJldHVybiBjb25zdHJhaW50LnVwcGVyOwoKICAgIC8vIE90aGVyd2lzZSB0YWtlIHdoYXRldmVyIGJvdW5kIGhhcyBwYXJ0aWFsIGluZm9ybWF0aW9uLCBlLmcuIGBJdGVyYWJsZTw/PmAKICAgIGlmIChjb25zdHJhaW50Lmxvd2VyIGlzISBVbmtub3duVHlwZSkgewogICAgICByZXR1cm4gZ3JvdW5kZWQKICAgICAgICAgID8gbGVhc3RDbG9zdXJlKGNvcmVUeXBlcywgY29uc3RyYWludC5sb3dlcikKICAgICAgICAgIDogY29uc3RyYWludC5sb3dlcjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBncm91bmRlZAogICAgICAgICAgPyBncmVhdGVzdENsb3N1cmUoY29yZVR5cGVzLCBjb25zdHJhaW50LnVwcGVyKQogICAgICAgICAgOiBjb25zdHJhaW50LnVwcGVyOwogICAgfQogIH0KCiAgLy8vIERldGVybWluZSBpZiB0aGUgZ2l2ZW4gW3R5cGVdIHNhdGlzZmllcyB0aGUgZ2l2ZW4gdHlwZSBbY29uc3RyYWludF0uCiAgYm9vbCB0eXBlU2F0aXNmaWVzQ29uc3RyYWludChEYXJ0VHlwZSB0eXBlLCBUeXBlQ29uc3RyYWludCBjb25zdHJhaW50KSB7CiAgICByZXR1cm4gaXNTdWJ0eXBlT2YoY29uc3RyYWludC5sb3dlciwgdHlwZSkgJiYKICAgICAgICBpc1N1YnR5cGVPZih0eXBlLCBjb25zdHJhaW50LnVwcGVyKTsKICB9CgogIERhcnRUeXBlIF9pbmZlclR5cGVQYXJhbWV0ZXJGcm9tQWxsKERhcnRUeXBlIHR5cGVGcm9tQ29udGV4dEluZmVyZW5jZSwKICAgICAgVHlwZUNvbnN0cmFpbnQgY29uc3RyYWludCwgRGFydFR5cGUgZXh0ZW5kc0NvbnN0cmFpbnQpIHsKICAgIC8vIFNlZSBpZiB3ZSBhbHJlYWR5IGZpeGVkIHRoaXMgdHlwZSBmcm9tIGRvd253YXJkcyBpbmZlcmVuY2UuCiAgICAvLyBJZiBzbywgdGhlbiB3ZSBhcmVuJ3QgYWxsb3dlZCB0byBjaGFuZ2UgaXQgYmFzZWQgb24gYXJndW1lbnQgdHlwZXMuCiAgICBpZiAoaXNLbm93bih0eXBlRnJvbUNvbnRleHRJbmZlcmVuY2UpKSB7CiAgICAgIHJldHVybiB0eXBlRnJvbUNvbnRleHRJbmZlcmVuY2U7CiAgICB9CgogICAgaWYgKGV4dGVuZHNDb25zdHJhaW50ICE9IG51bGwpIHsKICAgICAgY29uc3RyYWludCA9IGNvbnN0cmFpbnQuY2xvbmUoKTsKICAgICAgYWRkVXBwZXJCb3VuZChjb25zdHJhaW50LCBleHRlbmRzQ29uc3RyYWludCk7CiAgICB9CgogICAgcmV0dXJuIHNvbHZlVHlwZUNvbnN0cmFpbnQoY29uc3RyYWludCwgZ3JvdW5kZWQ6IHRydWUpOwogIH0KCiAgRGFydFR5cGUgX2luZmVyVHlwZVBhcmFtZXRlckZyb21Db250ZXh0KAogICAgICBUeXBlQ29uc3RyYWludCBjb25zdHJhaW50LCBEYXJ0VHlwZSBleHRlbmRzQ29uc3RyYWludCkgewogICAgRGFydFR5cGUgdCA9IHNvbHZlVHlwZUNvbnN0cmFpbnQoY29uc3RyYWludCk7CiAgICBpZiAoIWlzS25vd24odCkpIHsKICAgICAgcmV0dXJuIHQ7CiAgICB9CgogICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gbWFrZSBvdXIgZmluYWwgY2hvaWNlLCBhcHBseSB0aGUgZXh0ZW5kcyBjbGF1c2UuCiAgICAvLyBUaGlzIGdpdmVzIHVzIGEgY2hhbmNlIHRvIHJlZmluZSB0aGUgY2hvaWNlLCBpbiBjYXNlIGl0IHdvdWxkIHZpb2xhdGUKICAgIC8vIHRoZSBgZXh0ZW5kc2AgY2xhdXNlLiBGb3IgZXhhbXBsZToKICAgIC8vCiAgICAvLyAgICAgT2JqZWN0IG9iaiA9IG1hdGgubWluLyo8aW5mZXIgT2JqZWN0LCBlcnJvcj4qLygxLCAyKTsKICAgIC8vCiAgICAvLyBJZiB3ZSBjb25zaWRlciB0aGUgYFQgZXh0ZW5kcyBudW1gIHdlIGNvbmNsdWRlIGA8bnVtPmAsIHdoaWNoIHdvcmtzLgogICAgaWYgKGV4dGVuZHNDb25zdHJhaW50ICE9IG51bGwpIHsKICAgICAgY29uc3RyYWludCA9IGNvbnN0cmFpbnQuY2xvbmUoKTsKICAgICAgYWRkVXBwZXJCb3VuZChjb25zdHJhaW50LCBleHRlbmRzQ29uc3RyYWludCk7CiAgICAgIHJldHVybiBzb2x2ZVR5cGVDb25zdHJhaW50KGNvbnN0cmFpbnQpOwogICAgfQogICAgcmV0dXJuIHQ7CiAgfQp9CgpjbGFzcyBUeXBlVmFyaWFibGVFbGltaW5hdG9yIGV4dGVuZHMgU3Vic3RpdHV0aW9uIHsKICBmaW5hbCBDb3JlVHlwZXMgX2NvcmVUeXBlczsKCiAgVHlwZVZhcmlhYmxlRWxpbWluYXRvcih0aGlzLl9jb3JlVHlwZXMpOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRTdWJzdGl0dXRlKFR5cGVQYXJhbWV0ZXIgcGFyYW1ldGVyLCBib29sIHVwcGVyQm91bmQpIHsKICAgIHJldHVybiB1cHBlckJvdW5kCiAgICAgICAgPyBfY29yZVR5cGVzLm51bGxDbGFzcy5yYXdUeXBlCiAgICAgICAgOiBfY29yZVR5cGVzLm9iamVjdENsYXNzLnJhd1R5cGU7CiAgfQp9CoGcAE1OPwEhCQ8SFRYXExMXAUIBOAE9AUIoATMBRAFJAUoBQCMXMi08G0s0LClEFSk7LBE8AgFQR0lGAgFQOEg2MQsgBAIBOxdLLRIBUScSARMlJQEsAUABF1ACAUIaRyUBNgEqMj0EAUZCRwQBRkJHBAEMS09IERwqLQYUBAFDTRoGTEEGTUlGBlBMSjkGTkxLDwZQQSMjMSIiIiQfKQ4GAU9PUBxMAS4VQjAIRwYBHzVLQkIIBgEeTTMEATJROQcmB1BOEiYlPS4EAUQGS00GS1BPSE0GTU9QMVBPKzFMAT06ASwiKRxJMQgBLyEbSw83TAgGAVAXHw4GAUAyPTovG0cwASdENEkwPAgBFioBQk9RSggBHyoIBgFEBAEMOy1CMgQBKiJPThoTBhwEAUo6BlA+BlBDLjFPSBE3K0IUBjMEAQwbHBMNHQYEAVAWBkxCOiAnPDwBUSwWNh4NFjkeBgQBS0syLQQBST9DSy0nBgElJzQGATwEASs/MhcQBgFKTSoHQQdMJSc0LgYOBAIBNB4BKwEMRRYnKgQCAUdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWFfZW52aXJvbm1lbnQuZGFydDVzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvaWRlbnRpZmllcnMuZGFydI9FLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucXVhbGlmaWVkX25hbWU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IEV4cHJlc3Npb247CgppbXBvcnQgJ3Byb2JsZW1zLmRhcnQnIHNob3cgdW5oYW5kbGVkLCB1bnN1cHBvcnRlZDsKCmltcG9ydCAnc2Nhbm5lci5kYXJ0JyBzaG93IFRva2VuOwoKY2xhc3MgSWRlbnRpZmllciB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIElkZW50aWZpZXIoVG9rZW4gdG9rZW4pCiAgICAgIDogbmFtZSA9IHRva2VuLmxleGVtZSwKICAgICAgICBjaGFyT2Zmc2V0ID0gdG9rZW4uY2hhck9mZnNldDsKCiAgSWRlbnRpZmllci5fKHRoaXMubmFtZSwgdGhpcy5jaGFyT2Zmc2V0KTsKCiAgZmFjdG9yeSBJZGVudGlmaWVyLnByZXNlcnZlVG9rZW4oVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBuZXcgX1Rva2VuSWRlbnRpZmllcih0b2tlbik7CiAgfQoKICBFeHByZXNzaW9uIGdldCBpbml0aWFsaXplciA9PiBudWxsOwoKICBpbnQgZ2V0IGVuZENoYXJPZmZzZXQgPT4gY2hhck9mZnNldCArIG5hbWUubGVuZ3RoOwoKICBRdWFsaWZpZWROYW1lIHdpdGhRdWFsaWZpZXIoT2JqZWN0IHF1YWxpZmllcikgewogICAgcmV0dXJuIG5ldyBRdWFsaWZpZWROYW1lLl8ocXVhbGlmaWVyLCBuYW1lLCBjaGFyT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICJpZGVudGlmaWVyKCRuYW1lKSI7Cn0KCmNsYXNzIF9Ub2tlbklkZW50aWZpZXIgaW1wbGVtZW50cyBJZGVudGlmaWVyIHsKICBmaW5hbCBUb2tlbiB0b2tlbjsKCiAgX1Rva2VuSWRlbnRpZmllcih0aGlzLnRva2VuKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+IHRva2VuLmxleGVtZTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBjaGFyT2Zmc2V0ID0+IHRva2VuLmNoYXJPZmZzZXQ7CgogIEBvdmVycmlkZQogIEV4cHJlc3Npb24gZ2V0IGluaXRpYWxpemVyID0+IG51bGw7CgogIEBvdmVycmlkZQogIGludCBnZXQgZW5kQ2hhck9mZnNldCA9PiBjaGFyT2Zmc2V0ICsgbmFtZS5sZW5ndGg7CgogIEBvdmVycmlkZQogIFF1YWxpZmllZE5hbWUgd2l0aFF1YWxpZmllcihPYmplY3QgcXVhbGlmaWVyKSB7CiAgICByZXR1cm4gbmV3IF9Ub2tlblF1YWxpZmllZE5hbWUocXVhbGlmaWVyLCB0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAidG9rZW4taWRlbnRpZmllcigkbmFtZSkiOwp9CgpjbGFzcyBJbml0aWFsaXplZElkZW50aWZpZXIgZXh0ZW5kcyBfVG9rZW5JZGVudGlmaWVyIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBFeHByZXNzaW9uIGluaXRpYWxpemVyOwoKICBJbml0aWFsaXplZElkZW50aWZpZXIoX1Rva2VuSWRlbnRpZmllciBpZGVudGlmaWVyLCB0aGlzLmluaXRpYWxpemVyKQogICAgICA6IHN1cGVyKGlkZW50aWZpZXIudG9rZW4pOwoKICBAb3ZlcnJpZGUKICBRdWFsaWZpZWROYW1lIHdpdGhRdWFsaWZpZXIoT2JqZWN0IHF1YWxpZmllcikgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJ3aXRoUXVhbGlmaWVyIiwgY2hhck9mZnNldCwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiaW5pdGlhbGl6ZWQtaWRlbnRpZmllcigkbmFtZSwgJGluaXRpYWxpemVyKSI7Cn0KCmNsYXNzIFF1YWxpZmllZE5hbWUgZXh0ZW5kcyBJZGVudGlmaWVyIHsKICBmaW5hbCBPYmplY3QgcXVhbGlmaWVyOwoKICBRdWFsaWZpZWROYW1lKHRoaXMucXVhbGlmaWVyLCBUb2tlbiBzdWZmaXgpIDogc3VwZXIoc3VmZml4KTsKCiAgUXVhbGlmaWVkTmFtZS5fKHRoaXMucXVhbGlmaWVyLCBTdHJpbmcgbmFtZSwgaW50IGNoYXJPZmZzZXQpCiAgICAgIDogc3VwZXIuXyhuYW1lLCBjaGFyT2Zmc2V0KTsKCiAgQG92ZXJyaWRlCiAgUXVhbGlmaWVkTmFtZSB3aXRoUXVhbGlmaWVyKE9iamVjdCBxdWFsaWZpZXIpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgid2l0aFF1YWxpZmllciIsIGNoYXJPZmZzZXQsIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gInF1YWxpZmllZC1uYW1lKCRxdWFsaWZpZXIsICRuYW1lKSI7Cn0KCmNsYXNzIF9Ub2tlblF1YWxpZmllZE5hbWUgZXh0ZW5kcyBfVG9rZW5JZGVudGlmaWVyIGltcGxlbWVudHMgUXVhbGlmaWVkTmFtZSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgT2JqZWN0IHF1YWxpZmllcjsKCiAgX1Rva2VuUXVhbGlmaWVkTmFtZSh0aGlzLnF1YWxpZmllciwgVG9rZW4gc3VmZml4KQogICAgICA6IGFzc2VydChxdWFsaWZpZXIgaXMhIElkZW50aWZpZXIgfHwgcXVhbGlmaWVyIGlzIF9Ub2tlbklkZW50aWZpZXIpLAogICAgICAgIHN1cGVyKHN1ZmZpeCk7CgogIEBvdmVycmlkZQogIFF1YWxpZmllZE5hbWUgd2l0aFF1YWxpZmllcihPYmplY3QgcXVhbGlmaWVyKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoIndpdGhRdWFsaWZpZXIiLCBjaGFyT2Zmc2V0LCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICJ0b2tlbi1xdWFsaWZpZWQtbmFtZSgkcXVhbGlmaWVyLCAkbmFtZSkiOwp9Cgp2b2lkIGZsYXR0ZW5RdWFsaWZpZWROYW1lT24oCiAgICBRdWFsaWZpZWROYW1lIG5hbWUsIFN0cmluZ0J1ZmZlciBidWZmZXIsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkgewogIGZpbmFsIE9iamVjdCBxdWFsaWZpZXIgPSBuYW1lLnF1YWxpZmllcjsKICBpZiAocXVhbGlmaWVyIGlzIFF1YWxpZmllZE5hbWUpIHsKICAgIGZsYXR0ZW5RdWFsaWZpZWROYW1lT24ocXVhbGlmaWVyLCBidWZmZXIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogIH0gZWxzZSBpZiAocXVhbGlmaWVyIGlzIElkZW50aWZpZXIpIHsKICAgIGJ1ZmZlci53cml0ZShxdWFsaWZpZXIubmFtZSk7CiAgfSBlbHNlIGlmIChxdWFsaWZpZXIgaXMgU3RyaW5nKSB7CiAgICBidWZmZXIud3JpdGUocXVhbGlmaWVyKTsKICB9IGVsc2UgewogICAgdW5oYW5kbGVkKCIke3F1YWxpZmllci5ydW50aW1lVHlwZX0iLCAiZmxhdHRlblF1YWxpZmllZE5hbWVPbiIsIGNoYXJPZmZzZXQsCiAgICAgICAgZmlsZVVyaSk7CiAgfQogIGJ1ZmZlci53cml0ZSgiLiIpOwogIGJ1ZmZlci53cml0ZShuYW1lLm5hbWUpOwp9CgpTdHJpbmcgZmxhdHRlbk5hbWUoT2JqZWN0IG5hbWUsIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkgewogIGlmIChuYW1lIGlzIFN0cmluZykgewogICAgcmV0dXJuIG5hbWU7CiAgfSBlbHNlIGlmIChuYW1lIGlzIFF1YWxpZmllZE5hbWUpIHsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmbGF0dGVuUXVhbGlmaWVkTmFtZU9uKG5hbWUsIGJ1ZmZlciwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICByZXR1cm4gIiRidWZmZXIiOwogIH0gZWxzZSBpZiAobmFtZSBpcyBJZGVudGlmaWVyKSB7CiAgICByZXR1cm4gbmFtZS5uYW1lOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdW5oYW5kbGVkKCIke25hbWUucnVudGltZVR5cGV9IiwgImZsYXR0ZW5OYW1lIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQp9CgpUb2tlbiBkZXByZWNhdGVkX2V4dHJhY3RUb2tlbihJZGVudGlmaWVyIGlkZW50aWZpZXIpIHsKICBfVG9rZW5JZGVudGlmaWVyIHRva2VuSWRlbnRpZmllciA9IGlkZW50aWZpZXI7CiAgcmV0dXJuIHRva2VuSWRlbnRpZmllcj8udG9rZW47Cn0KgJcATk48AR4BMgE0ASIBExUYARodJwEsATIoBAEmATUBMj0EAQwsAgEvFQEgAQwjAQwqAQwmAQw1AQwyNgQBDDICATcMIAFHIQEMMjsEAQxGAgEpGgE/AT8jAQwyOwQBDDwCAU4MGgE0SxcBDDI7BAEMQgIBHUwrJEQoIiQdC1ASBBUbAgE/GBEmLj8WIxYLUQQCATcxIQIBLHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9pZGVudGlmaWVycy5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL2J1aWx0aW5fdHlwZV9idWlsZGVyLmRhcnSDgC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmJ1aWx0aW5fdHlwZV9idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBEYXJ0VHlwZTsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JyBzaG93IExpYnJhcnlCdWlsZGVyLCBUeXBlQnVpbGRlciwgVHlwZURlY2xhcmF0aW9uQnVpbGRlcjsKCmFic3RyYWN0IGNsYXNzIEJ1aWx0aW5UeXBlQnVpbGRlciBleHRlbmRzIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgewogIGZpbmFsIERhcnRUeXBlIHR5cGU7CgogIEJ1aWx0aW5UeXBlQnVpbGRlcigKICAgICAgU3RyaW5nIG5hbWUsIHRoaXMudHlwZSwgTGlicmFyeUJ1aWxkZXIgY29tcGlsYXRpb25Vbml0LCBpbnQgY2hhck9mZnNldCkKICAgICAgOiBzdXBlcihudWxsLCAwLCBuYW1lLCBjb21waWxhdGlvblVuaXQsIGNoYXJPZmZzZXQpOwoKICBEYXJ0VHlwZSBidWlsZFR5cGUoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxUeXBlQnVpbGRlcj4gYXJndW1lbnRzKSA9PgogICAgICB0eXBlOwoKICBEYXJ0VHlwZSBidWlsZFR5cGVzV2l0aEJ1aWx0QXJndW1lbnRzKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMpIHsKICAgIHJldHVybiB0eXBlOwogIH0KCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIkJ1aWx0aW5UeXBlQnVpbGRlciI7Cn0KHQBOTjwBJAEwAVABQxcBFk47AU0MASk6EQQBMAIBPXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2J1aWx0aW5fdHlwZV9idWlsZGVyLmRhcnQ/c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvY2xhc3NfYnVpbGRlci5kYXJ0wAEPgC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmNsYXNzX2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIEFyZ3VtZW50cywKICAgICAgICBBc0V4cHJlc3Npb24sCiAgICAgICAgQ2xhc3MsCiAgICAgICAgQ29uc3RydWN0b3IsCiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRXhwcmVzc2lvbiwKICAgICAgICBGaWVsZCwKICAgICAgICBGdW5jdGlvbk5vZGUsCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBJbnZhbGlkVHlwZSwKICAgICAgICBMaXN0TGl0ZXJhbCwKICAgICAgICBNZW1iZXIsCiAgICAgICAgTWV0aG9kSW52b2NhdGlvbiwKICAgICAgICBOYW1lLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yLAogICAgICAgIFJldHVyblN0YXRlbWVudCwKICAgICAgICBTdGF0aWNHZXQsCiAgICAgICAgU3VwZXJ0eXBlLAogICAgICAgIFRoaXNFeHByZXNzaW9uLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiwKICAgICAgICBWb2lkVHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgRnVuY3Rpb25UeXBlLCBUeXBlUGFyYW1ldGVyVHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIHNob3cgQ2xhc3NIaWVyYXJjaHk7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2Nsb25lLmRhcnQnIHNob3cgQ2xvbmVXaXRob3V0Qm9keTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvY29yZV90eXBlcy5kYXJ0JyBzaG93IENvcmVUeXBlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvc3JjL2JvdW5kc19jaGVja3MuZGFydCcKICAgIHNob3cgVHlwZUFyZ3VtZW50SXNzdWUsIGZpbmRUeXBlQXJndW1lbnRJc3N1ZXMsIGdldEdlbmVyaWNUeXBlTmFtZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIHNob3cgU3Vic3RpdHV0aW9uLCBzdWJzdGl0dXRlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcgYXMgdHlwZV9hbGdlYnJhCiAgICBzaG93IGdldFN1YnN0aXR1dGlvbk1hcDsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBzaG93IFR5cGVFbnZpcm9ubWVudDsKCmltcG9ydCAnLi4vZGlsbC9kaWxsX21lbWJlcl9idWlsZGVyLmRhcnQnIHNob3cgRGlsbE1lbWJlckJ1aWxkZXI7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIsCiAgICAgICAgRGVjbGFyYXRpb24sCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTWVtYmVyQnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXIsCiAgICAgICAgU2NvcGUsCiAgICAgICAgU2NvcGVCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIsCiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlcjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBMb2NhdGVkTWVzc2FnZSwKICAgICAgICBNZXNzYWdlLAogICAgICAgIG1lc3NhZ2VHZW5lcmljRnVuY3Rpb25UeXBlVXNlZEFzQWN0dWFsVHlwZUFyZ3VtZW50LAogICAgICAgIG1lc3NhZ2VJbXBsZW1lbnRzRnV0dXJlT3IsCiAgICAgICAgbWVzc2FnZVBhdGNoQ2xhc3NPcmlnaW4sCiAgICAgICAgbWVzc2FnZVBhdGNoQ2xhc3NUeXBlVmFyaWFibGVzTWlzbWF0Y2gsCiAgICAgICAgbWVzc2FnZVBhdGNoRGVjbGFyYXRpb25NaXNtYXRjaCwKICAgICAgICBtZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk9yaWdpbiwKICAgICAgICBub0xlbmd0aCwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblVzZSwKICAgICAgICB0ZW1wbGF0ZUdlbmVyaWNGdW5jdGlvblR5cGVJbmZlcnJlZEFzQWN0dWFsVHlwZUFyZ3VtZW50LAogICAgICAgIHRlbXBsYXRlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnMsCiAgICAgICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0NhdXNlLAogICAgICAgIHRlbXBsYXRlSW1wbGVtZW50c1JlcGVhdGVkLAogICAgICAgIHRlbXBsYXRlSW1wbGVtZW50c1N1cGVyQ2xhc3MsCiAgICAgICAgdGVtcGxhdGVJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0LAogICAgICAgIHRlbXBsYXRlSW5jb21wYXRpYmxlUmVkaXJlY3RlZUZ1bmN0aW9uVHlwZSwKICAgICAgICB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudCwKICAgICAgICB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlLAogICAgICAgIHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVJbmZlcnJlZCwKICAgICAgICB0ZW1wbGF0ZUludGVyZmFjZUNoZWNrQ29udGV4dCwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vdEZvdW5kSW4sCiAgICAgICAgdGVtcGxhdGVNaXhpbkFwcGxpY2F0aW9uSW5jb21wYXRpYmxlU3VwZXJ0eXBlLAogICAgICAgIHRlbXBsYXRlTmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dCwKICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRkZW5NZXRob2RDYXVzZSwKICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRlRmV3ZXJOYW1lZEFyZ3VtZW50cywKICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRlRmV3ZXJQb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVNaXNtYXRjaE5hbWVkUGFyYW1ldGVyLAogICAgICAgIHRlbXBsYXRlT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHMsCiAgICAgICAgdGVtcGxhdGVPdmVycmlkZVR5cGVNaXNtYXRjaFBhcmFtZXRlciwKICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRlVHlwZU1pc21hdGNoUmV0dXJuVHlwZSwKICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRlVHlwZVZhcmlhYmxlc01pc21hdGNoLAogICAgICAgIHRlbXBsYXRlUmVkaXJlY3RpbmdGYWN0b3J5SW5jb21wYXRpYmxlVHlwZUFyZ3VtZW50LAogICAgICAgIHRlbXBsYXRlUmVkaXJlY3Rpb25UYXJnZXROb3RGb3VuZCwKICAgICAgICB0ZW1wbGF0ZVR5cGVBcmd1bWVudE1pc21hdGNoOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIsCiAgICAgICAgRGVjbGFyYXRpb24sCiAgICAgICAgRnVuY3Rpb25CdWlsZGVyLAogICAgICAgIE5hbWVkVHlwZUJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTWVtYmVyQnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXIsCiAgICAgICAgUHJvY2VkdXJlQnVpbGRlciwKICAgICAgICBSZWRpcmVjdGluZ0ZhY3RvcnlCdWlsZGVyLAogICAgICAgIFNjb3BlLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXI7CgppbXBvcnQgJy4uL2tlcm5lbC9yZWRpcmVjdGluZ19mYWN0b3J5X2JvZHkuZGFydCcKICAgIHNob3cgZ2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keSwgUmVkaXJlY3RpbmdGYWN0b3J5Qm9keTsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF90YXJnZXQuZGFydCcgc2hvdyBLZXJuZWxUYXJnZXQ7CgppbXBvcnQgJy4uL2tlcm5lbC90eXBlcy5kYXJ0JyBzaG93IFR5cGVzOwoKaW1wb3J0ICcuLi9uYW1lcy5kYXJ0JyBzaG93IG5vU3VjaE1ldGhvZE5hbWU7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnCiAgICBzaG93IGludGVybmFsUHJvYmxlbSwgdW5leHBlY3RlZCwgdW5oYW5kbGVkLCB1bmltcGxlbWVudGVkOwoKaW1wb3J0ICcuLi9zY29wZS5kYXJ0JyBzaG93IEFtYmlndW91c0J1aWxkZXI7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgU291cmNlTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hLmRhcnQnIHNob3cgVW5rbm93blR5cGU7CgphYnN0cmFjdCBjbGFzcyBDbGFzc0J1aWxkZXIgZXh0ZW5kcyBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIHsKICAvLy8gVGhlIHR5cGUgdmFyaWFibGVzIGRlY2xhcmVkIG9uIGEgY2xhc3MsIGV4dGVuc2lvbiBvciBtaXhpbiBkZWNsYXJhdGlvbi4KICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXM7CgogIC8vLyBUaGUgdHlwZSBpbiB0aGUgYGV4dGVuZHNgIGNsYXVzZSBvZiBhIGNsYXNzIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBDdXJyZW50bHkgdGhpcyBhbHNvIGhvbGRzIHRoZSBzeW50aGVzaXplZCBzdXBlciBjbGFzcyBmb3IgYSBtaXhpbgogIC8vLyBkZWNsYXJhdGlvbi4KICBUeXBlQnVpbGRlciBzdXBlcnR5cGU7CgogIC8vLyBUaGUgdHlwZSBpbiB0aGUgYGltcGxlbWVudHNgIGNsYXVzZSBvZiBhIGNsYXNzIG9yIG1peGluIGRlY2xhcmF0aW9uLgogIExpc3Q8VHlwZUJ1aWxkZXI+IGludGVyZmFjZXM7CgogIC8vLyBUaGUgdHlwZXMgaW4gdGhlIGBvbmAgY2xhdXNlIG9mIGFuIGV4dGVuc2lvbiBvciBtaXhpbiBkZWNsYXJhdGlvbi4KICBMaXN0PFR5cGVCdWlsZGVyPiBvblR5cGVzOwoKICBmaW5hbCBTY29wZSBzY29wZTsKCiAgZmluYWwgU2NvcGUgY29uc3RydWN0b3JzOwoKICBmaW5hbCBTY29wZUJ1aWxkZXIgc2NvcGVCdWlsZGVyOwoKICBmaW5hbCBTY29wZUJ1aWxkZXIgY29uc3RydWN0b3JTY29wZUJ1aWxkZXI7CgogIE1hcDxTdHJpbmcsIENvbnN0cnVjdG9yUmVkaXJlY3Rpb24+IHJlZGlyZWN0aW5nQ29uc3RydWN0b3JzOwoKICBDbGFzc0J1aWxkZXIgYWN0dWFsT3JpZ2luOwoKICBDbGFzc0J1aWxkZXIoCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgaW50IG1vZGlmaWVycywKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIHRoaXMudHlwZVZhcmlhYmxlcywKICAgICAgdGhpcy5zdXBlcnR5cGUsCiAgICAgIHRoaXMuaW50ZXJmYWNlcywKICAgICAgdGhpcy5vblR5cGVzLAogICAgICB0aGlzLnNjb3BlLAogICAgICB0aGlzLmNvbnN0cnVjdG9ycywKICAgICAgTGlicmFyeUJ1aWxkZXIgcGFyZW50LAogICAgICBpbnQgY2hhck9mZnNldCkKICAgICAgOiBzY29wZUJ1aWxkZXIgPSBuZXcgU2NvcGVCdWlsZGVyKHNjb3BlKSwKICAgICAgICBjb25zdHJ1Y3RvclNjb3BlQnVpbGRlciA9IG5ldyBTY29wZUJ1aWxkZXIoY29uc3RydWN0b3JzKSwKICAgICAgICBzdXBlcihtZXRhZGF0YSwgbW9kaWZpZXJzLCBuYW1lLCBwYXJlbnQsIGNoYXJPZmZzZXQpOwoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiQ2xhc3NCdWlsZGVyIjsKCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGNsYXNzIGlzIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgYSBtaXhpbiB0byBpdHMKICAvLy8gc3VwZXJjbGFzcy4KICBib29sIGdldCBpc01peGluQXBwbGljYXRpb24gPT4gbWl4ZWRJblR5cGUgIT0gbnVsbDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOYW1lZE1peGluQXBwbGljYXRpb24gewogICAgcmV0dXJuIGlzTWl4aW5BcHBsaWNhdGlvbiAmJiBzdXBlci5pc05hbWVkTWl4aW5BcHBsaWNhdGlvbjsKICB9CgogIFR5cGVCdWlsZGVyIGdldCBtaXhlZEluVHlwZTsKCiAgdm9pZCBzZXQgbWl4ZWRJblR5cGUoVHlwZUJ1aWxkZXIgbWl4aW4pOwoKICBMaXN0PENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlcj4gZ2V0IGNvbnN0cnVjdG9yUmVmZXJlbmNlcyA9PiBudWxsOwoKICBMaWJyYXJ5QnVpbGRlciBnZXQgbGlicmFyeSB7CiAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gcGFyZW50OwogICAgcmV0dXJuIGxpYnJhcnkucGFydE9mTGlicmFyeSA/PyBsaWJyYXJ5OwogIH0KCiAgdm9pZCBidWlsZE91dGxpbmVFeHByZXNzaW9ucyhMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICB2b2lkIGJ1aWxkKFN0cmluZyBpZ25vcmUsIERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uKSB7CiAgICAgIE1lbWJlckJ1aWxkZXIgbWVtYmVyID0gZGVjbGFyYXRpb247CiAgICAgIG1lbWJlci5idWlsZE91dGxpbmVFeHByZXNzaW9ucyhsaWJyYXJ5KTsKICAgIH0KCiAgICBNZXRhZGF0YUJ1aWxkZXIuYnVpbGRBbm5vdGF0aW9ucygKICAgICAgICBpc1BhdGNoID8gb3JpZ2luLnRhcmdldCA6IGNscywgbWV0YWRhdGEsIGxpYnJhcnksIHRoaXMsIG51bGwpOwogICAgY29uc3RydWN0b3JzLmZvckVhY2goYnVpbGQpOwogICAgc2NvcGUuZm9yRWFjaChidWlsZCk7CiAgfQoKICAvLy8gUmVnaXN0ZXJzIGEgY29uc3RydWN0b3IgcmVkaXJlY3Rpb24gZm9yIHRoaXMgY2xhc3MgYW5kIHJldHVybnMgdHJ1ZSBpZgogIC8vLyB0aGlzIHJlZGlyZWN0aW9uIGdpdmVzIHJpc2UgdG8gYSBjeWNsZSB0aGF0IGhhcyBub3QgYmVlbiByZXBvcnRlZCBiZWZvcmUuCiAgYm9vbCBjaGVja0NvbnN0cnVjdG9yQ3ljbGljKFN0cmluZyBzb3VyY2UsIFN0cmluZyB0YXJnZXQpIHsKICAgIENvbnN0cnVjdG9yUmVkaXJlY3Rpb24gcmVkaXJlY3QgPSBuZXcgQ29uc3RydWN0b3JSZWRpcmVjdGlvbih0YXJnZXQpOwogICAgcmVkaXJlY3RpbmdDb25zdHJ1Y3RvcnMgPz89IDxTdHJpbmcsIENvbnN0cnVjdG9yUmVkaXJlY3Rpb24+e307CiAgICByZWRpcmVjdGluZ0NvbnN0cnVjdG9yc1tzb3VyY2VdID0gcmVkaXJlY3Q7CiAgICB3aGlsZSAocmVkaXJlY3QgIT0gbnVsbCkgewogICAgICBpZiAocmVkaXJlY3QuY3ljbGVSZXBvcnRlZCkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAocmVkaXJlY3QudGFyZ2V0ID09IHNvdXJjZSkgewogICAgICAgIHJlZGlyZWN0LmN5Y2xlUmVwb3J0ZWQgPSB0cnVlOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJlZGlyZWN0ID0gcmVkaXJlY3RpbmdDb25zdHJ1Y3RvcnNbcmVkaXJlY3QudGFyZ2V0XTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGludCByZXNvbHZlQ29uc3RydWN0b3JzKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIGlmIChjb25zdHJ1Y3RvclJlZmVyZW5jZXMgPT0gbnVsbCkgcmV0dXJuIDA7CiAgICBmb3IgKENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlciByZWYgaW4gY29uc3RydWN0b3JSZWZlcmVuY2VzKSB7CiAgICAgIHJlZi5yZXNvbHZlSW4oc2NvcGUsIGxpYnJhcnkpOwogICAgfQogICAgaW50IGNvdW50ID0gY29uc3RydWN0b3JSZWZlcmVuY2VzLmxlbmd0aDsKICAgIGlmIChjb3VudCAhPSAwKSB7CiAgICAgIE1hcDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+IGNvbnN0cnVjdG9ycyA9IHRoaXMuY29uc3RydWN0b3JzLmxvY2FsOwogICAgICAvLyBDb3B5IGtleXMgdG8gYXZvaWQgY29uY3VycmVudCBtb2RpZmljYXRpb24gZXJyb3IuCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lcyA9IGNvbnN0cnVjdG9ycy5rZXlzLnRvTGlzdCgpOwogICAgICBmb3IgKFN0cmluZyBuYW1lIGluIG5hbWVzKSB7CiAgICAgICAgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSBjb25zdHJ1Y3RvcnNbbmFtZV07CiAgICAgICAgZG8gewogICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLnBhcmVudCAhPSB0aGlzKSB7CiAgICAgICAgICAgIHVuZXhwZWN0ZWQoIiRmaWxlVXJpIiwgIiR7ZGVjbGFyYXRpb24ucGFyZW50LmZpbGVVcml9IiwgY2hhck9mZnNldCwKICAgICAgICAgICAgICAgIGZpbGVVcmkpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGRlY2xhcmF0aW9uIGlzIFJlZGlyZWN0aW5nRmFjdG9yeUJ1aWxkZXIpIHsKICAgICAgICAgICAgLy8gQ29tcHV0ZSB0aGUgaW1tZWRpYXRlIHJlZGlyZWN0aW9uIHRhcmdldCwgbm90IHRoZSBlZmZlY3RpdmUuCiAgICAgICAgICAgIENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlciByZWRpcmVjdGlvblRhcmdldCA9CiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5yZWRpcmVjdGlvblRhcmdldDsKICAgICAgICAgICAgaWYgKHJlZGlyZWN0aW9uVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgICAgICAgICBEZWNsYXJhdGlvbiB0YXJnZXRCdWlsZGVyID0gcmVkaXJlY3Rpb25UYXJnZXQudGFyZ2V0OwogICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi5uZXh0ID09IG51bGwpIHsKICAgICAgICAgICAgICAgIC8vIE9ubHkgdGhlIGZpcnN0IG9uZSAodGhhdCBpcywgdGhlIGxhc3Qgb24gaW4gdGhlIGxpbmtlZCBsaXN0KQogICAgICAgICAgICAgICAgLy8gaXMgYWN0dWFsbHkgaW4gdGhlIGtlcm5lbCB0cmVlLiBUaGlzIGNhbGwgY3JlYXRlcyBhIFN0YXRpY0dldAogICAgICAgICAgICAgICAgLy8gdG8gW2RlY2xhcmF0aW9uLnRhcmdldF0gaW4gYSBmaWVsZCBgX3JlZGlyZWN0aW5nI2Agd2hpY2ggaXMKICAgICAgICAgICAgICAgIC8vIG9ubHkgbGVnYWwgdG8gZG8gdG8gdGhpbmdzIGluIHRoZSBrZXJuZWwgdHJlZS4KICAgICAgICAgICAgICAgIGFkZFJlZGlyZWN0aW5nQ29uc3RydWN0b3IoZGVjbGFyYXRpb24sIGxpYnJhcnkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodGFyZ2V0QnVpbGRlciBpcyBGdW5jdGlvbkJ1aWxkZXIpIHsKICAgICAgICAgICAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSBkZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzOwogICAgICAgICAgICAgICAgaWYgKHR5cGVBcmd1bWVudHMgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAvLyBUT0RPKDMyMDQ5KSBJZiB0eXBlIGFyZ3VtZW50cyBhcmVuJ3Qgc3BlY2lmaWVkLCB0aGV5IHNob3VsZAogICAgICAgICAgICAgICAgICAvLyBiZSBpbmZlcnJlZC4gIEN1cnJlbnRseSwgdGhlIGluZmVyZW5jZSBpcyBub3QgcGVyZm9ybWVkLgogICAgICAgICAgICAgICAgICAvLyBUaGUgY29kZSBiZWxvdyBpcyBhIHdvcmthcm91bmQuCiAgICAgICAgICAgICAgICAgIHR5cGVBcmd1bWVudHMgPSBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKAogICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QnVpbGRlci50YXJnZXQuZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMubGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgRHluYW1pY1R5cGUoKSwKICAgICAgICAgICAgICAgICAgICAgIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRlY2xhcmF0aW9uLnNldFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0QnVpbGRlci50YXJnZXQsIHR5cGVBcmd1bWVudHMpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0QnVpbGRlciBpcyBEaWxsTWVtYmVyQnVpbGRlcikgewogICAgICAgICAgICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IGRlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHM7CiAgICAgICAgICAgICAgICBpZiAodHlwZUFyZ3VtZW50cyA9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAgIC8vIFRPRE8oMzIwNDkpIElmIHR5cGUgYXJndW1lbnRzIGFyZW4ndCBzcGVjaWZpZWQsIHRoZXkgc2hvdWxkCiAgICAgICAgICAgICAgICAgIC8vIGJlIGluZmVycmVkLiAgQ3VycmVudGx5LCB0aGUgaW5mZXJlbmNlIGlzIG5vdCBwZXJmb3JtZWQuCiAgICAgICAgICAgICAgICAgIC8vIFRoZSBjb2RlIGJlbG93IGlzIGEgd29ya2Fyb3VuZC4KICAgICAgICAgICAgICAgICAgdHlwZUFyZ3VtZW50cyA9IG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoCiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRCdWlsZGVyLnRhcmdldC5lbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVycy5sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBEeW5hbWljVHlwZSgpLAogICAgICAgICAgICAgICAgICAgICAgZ3Jvd2FibGU6IHRydWUpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGVjbGFyYXRpb24uc2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keSgKICAgICAgICAgICAgICAgICAgICB0YXJnZXRCdWlsZGVyLm1lbWJlciwgdHlwZUFyZ3VtZW50cyk7CiAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXRCdWlsZGVyIGlzIEFtYmlndW91c0J1aWxkZXIpIHsKICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uVXNlCiAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMocmVkaXJlY3Rpb25UYXJnZXQuZnVsbE5hbWVGb3JFcnJvcnMpOwogICAgICAgICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLmlzQ29uc3QpIHsKICAgICAgICAgICAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlLCBkZWNsYXJhdGlvbi5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBhZGRQcm9ibGVtKG1lc3NhZ2UsIGRlY2xhcmF0aW9uLmNoYXJPZmZzZXQsIG5vTGVuZ3RoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIENvcmVUeXBlcyBhcmVuJ3QgY29tcHV0ZWQgeWV0LCBhbmQgdGhpcyBpcyB0aGUgb3V0bGluZQogICAgICAgICAgICAgICAgLy8gcGhhc2UuIFNvIHdlIGNhbid0IGFuZCBzaG91bGRuJ3QgY3JlYXRlIGEgbWV0aG9kIGJvZHkuCiAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbi5ib2R5ID0gbmV3IFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkudW5yZXNvbHZlZCgKICAgICAgICAgICAgICAgICAgICByZWRpcmVjdGlvblRhcmdldC5mdWxsTmFtZUZvckVycm9ycyk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9IHRlbXBsYXRlUmVkaXJlY3Rpb25UYXJnZXROb3RGb3VuZAogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKHJlZGlyZWN0aW9uVGFyZ2V0LmZ1bGxOYW1lRm9yRXJyb3JzKTsKICAgICAgICAgICAgICAgIGlmIChkZWNsYXJhdGlvbi5pc0NvbnN0KSB7CiAgICAgICAgICAgICAgICAgIGFkZFByb2JsZW0obWVzc2FnZSwgZGVjbGFyYXRpb24uY2hhck9mZnNldCwgbm9MZW5ndGgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlLCBkZWNsYXJhdGlvbi5jaGFyT2Zmc2V0LCBub0xlbmd0aCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBDb3JlVHlwZXMgYXJlbid0IGNvbXB1dGVkIHlldCwgYW5kIHRoaXMgaXMgdGhlIG91dGxpbmUKICAgICAgICAgICAgICAgIC8vIHBoYXNlLiBTbyB3ZSBjYW4ndCBhbmQgc2hvdWxkbid0IGNyZWF0ZSBhIG1ldGhvZCBib2R5LgogICAgICAgICAgICAgICAgZGVjbGFyYXRpb24uYm9keSA9IG5ldyBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5LnVucmVzb2x2ZWQoCiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3Rpb25UYXJnZXQuZnVsbE5hbWVGb3JFcnJvcnMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZGVjbGFyYXRpb24gPSBkZWNsYXJhdGlvbi5uZXh0OwogICAgICAgIH0gd2hpbGUgKGRlY2xhcmF0aW9uICE9IG51bGwpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gY291bnQ7CiAgfQoKICAvLy8gVXNlZCB0byBsb29rdXAgYSBzdGF0aWMgbWVtYmVyIG9mIHRoaXMgY2xhc3MuCiAgRGVjbGFyYXRpb24gZmluZFN0YXRpY0J1aWxkZXIoCiAgICAgIFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmksIExpYnJhcnlCdWlsZGVyIGFjY2Vzc2luZ0xpYnJhcnksCiAgICAgIHtib29sIGlzU2V0dGVyOiBmYWxzZX0pIHsKICAgIGlmIChhY2Nlc3NpbmdMaWJyYXJ5Lm9yaWdpbiAhPSBsaWJyYXJ5Lm9yaWdpbiAmJiBuYW1lLnN0YXJ0c1dpdGgoIl8iKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gaXNTZXR0ZXIKICAgICAgICA/IHNjb3BlLmxvb2t1cFNldHRlcihuYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpLCBpc0luc3RhbmNlU2NvcGU6IGZhbHNlKQogICAgICAgIDogc2NvcGUubG9va3VwKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmksIGlzSW5zdGFuY2VTY29wZTogZmFsc2UpOwogICAgaWYgKGRlY2xhcmF0aW9uID09IG51bGwgJiYgaXNQYXRjaCkgewogICAgICByZXR1cm4gb3JpZ2luLmZpbmRTdGF0aWNCdWlsZGVyKAogICAgICAgICAgbmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSwgYWNjZXNzaW5nTGlicmFyeSwKICAgICAgICAgIGlzU2V0dGVyOiBpc1NldHRlcik7CiAgICB9CiAgICByZXR1cm4gZGVjbGFyYXRpb247CiAgfQoKICBEZWNsYXJhdGlvbiBmaW5kQ29uc3RydWN0b3JPckZhY3RvcnkoCiAgICAgIFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCwgVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgYWNjZXNzaW5nTGlicmFyeSkgewogICAgaWYgKGFjY2Vzc2luZ0xpYnJhcnkub3JpZ2luICE9IGxpYnJhcnkub3JpZ2luICYmIG5hbWUuc3RhcnRzV2l0aCgiXyIpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSBjb25zdHJ1Y3RvcnMubG9va3VwKG5hbWUsIGNoYXJPZmZzZXQsIHVyaSk7CiAgICBpZiAoZGVjbGFyYXRpb24gPT0gbnVsbCAmJiBpc1BhdGNoKSB7CiAgICAgIHJldHVybiBvcmlnaW4uZmluZENvbnN0cnVjdG9yT3JGYWN0b3J5KAogICAgICAgICAgbmFtZSwgY2hhck9mZnNldCwgdXJpLCBhY2Nlc3NpbmdMaWJyYXJ5KTsKICAgIH0KICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoU3RyaW5nIG5hbWUsIERlY2xhcmF0aW9uIGJ1aWxkZXIpKSB7CiAgICBzY29wZS5mb3JFYWNoKGYpOwogIH0KCiAgLy8vIERvbid0IHVzZSBmb3Igc2NvcGUgbG9va3VwLiBPbmx5IHVzZSB3aGVuIGFuIGVsZW1lbnQgaXMga25vd24gdG8gZXhpc3QKICAvLy8gKGFuZCBpc24ndCBhIHNldHRlcikuCiAgTWVtYmVyQnVpbGRlciBnZXRMb2NhbE1lbWJlcihTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIHNjb3BlLmxvY2FsW25hbWVdID8/CiAgICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vdEZvdW5kSW4ud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgIG5hbWUsIGZ1bGxOYW1lRm9yRXJyb3JzKSwKICAgICAgICAgICAgLTEsCiAgICAgICAgICAgIG51bGwpOwogIH0KCiAgdm9pZCBhZGRQcm9ibGVtKE1lc3NhZ2UgbWVzc2FnZSwgaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsCiAgICAgIHtib29sIHdhc0hhbmRsZWQ6IGZhbHNlLCBMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgbGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIGxlbmd0aCwgZmlsZVVyaSwKICAgICAgICB3YXNIYW5kbGVkOiB3YXNIYW5kbGVkLCBjb250ZXh0OiBjb250ZXh0KTsKICB9CgogIC8vLyBGaW5kIHRoZSBmaXJzdCBtZW1iZXIgb2YgdGhpcyBjbGFzcyB3aXRoIFtuYW1lXS4gVGhpcyBtZXRob2QgaXNuJ3QKICAvLy8gc3VpdGFibGUgZm9yIHNjb3BlIGxvb2t1cHMgYXMgaXQgd2lsbCB0aHJvdyBhbiBlcnJvciBpZiB0aGUgbmFtZSBpc24ndAogIC8vLyBkZWNsYXJlZC4gVGhlIFtzY29wZV0gc2hvdWxkIGJlIHVzZWQgZm9yIHRoYXQuIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8KICAvLy8gZmluZCBhIG1lbWJlciB0aGF0IGlzIGtub3duIHRvIGV4aXN0IGFuZCBpdCB3aWwgcGljayB0aGUgZmlyc3QKICAvLy8gZGVjbGFyYXRpb24gaWYgdGhlIG5hbWUgaXMgYW1iaWd1b3VzLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgdGhpcyBtZXRob2QgaXMgY29udmVuaWVudCBmb3IgdXNlIHdoZW4gYnVpbGRpbmcgc3ludGhldGljCiAgLy8vIG1lbWJlcnMsIHN1Y2ggYXMgdGhvc2Ugb2YgYW4gZW51bS4KICBNZW1iZXJCdWlsZGVyIGZpcnN0TWVtYmVyTmFtZWQoU3RyaW5nIG5hbWUpIHsKICAgIERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0gZ2V0TG9jYWxNZW1iZXIobmFtZSk7CiAgICB3aGlsZSAoZGVjbGFyYXRpb24ubmV4dCAhPSBudWxsKSB7CiAgICAgIGRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb24ubmV4dDsKICAgIH0KICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICB9CgogIENsYXNzIGdldCBjbHM7CgogIENsYXNzIGdldCB0YXJnZXQgPT4gY2xzOwoKICBDbGFzcyBnZXQgYWN0dWFsQ2xzOwoKICBAb3ZlcnJpZGUKICBDbGFzc0J1aWxkZXIgZ2V0IG9yaWdpbiA9PiBhY3R1YWxPcmlnaW4gPz8gdGhpczsKCiAgLy8vIFthcmd1bWVudHNdIGhhdmUgYWxyZWFkeSBiZWVuIGJ1aWx0LgogIEludGVyZmFjZVR5cGUgYnVpbGRUeXBlc1dpdGhCdWlsdEFyZ3VtZW50cygKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzKSB7CiAgICBhc3NlcnQoYXJndW1lbnRzID09IG51bGwgfHwgY2xzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA9PSBhcmd1bWVudHMubGVuZ3RoKTsKICAgIHJldHVybiBhcmd1bWVudHMgPT0gbnVsbCA/IGNscy5yYXdUeXBlIDogbmV3IEludGVyZmFjZVR5cGUoY2xzLCBhcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCB0eXBlVmFyaWFibGVzQ291bnQgPT4gdHlwZVZhcmlhYmxlcz8ubGVuZ3RoID8/IDA7CgogIExpc3Q8RGFydFR5cGU+IGJ1aWxkVHlwZUFyZ3VtZW50cygKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxUeXBlQnVpbGRlcj4gYXJndW1lbnRzKSB7CiAgICBpZiAoYXJndW1lbnRzID09IG51bGwgJiYgdHlwZVZhcmlhYmxlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiA8RGFydFR5cGU+W107CiAgICB9CgogICAgaWYgKGFyZ3VtZW50cyA9PSBudWxsICYmIHR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBMaXN0PERhcnRUeXBlPiByZXN1bHQgPQogICAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCh0eXBlVmFyaWFibGVzLmxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlc3VsdC5sZW5ndGg7ICsraSkgewogICAgICAgIHJlc3VsdFtpXSA9IHR5cGVWYXJpYWJsZXNbaV0uZGVmYXVsdFR5cGUuYnVpbGQobGlicmFyeSk7CiAgICAgIH0KICAgICAgaWYgKGxpYnJhcnkgaXMgU291cmNlTGlicmFyeUJ1aWxkZXIpIHsKICAgICAgICBsaWJyYXJ5LmluZmVycmVkVHlwZXMuYWRkQWxsKHJlc3VsdCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwgJiYgYXJndW1lbnRzLmxlbmd0aCAhPSAodHlwZVZhcmlhYmxlcz8ubGVuZ3RoID8/IDApKSB7CiAgICAgIC8vIFRoYXQgc2hvdWxkIGJlIGNhdWdodCBhbmQgcmVwb3J0ZWQgYXMgYSBjb21waWxlLXRpbWUgZXJyb3IgZWFybGllci4KICAgICAgcmV0dXJuIHVuaGFuZGxlZCgKICAgICAgICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50TWlzbWF0Y2gKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0eXBlVmFyaWFibGVzLmxlbmd0aCkKICAgICAgICAgICAgICAubWVzc2FnZSwKICAgICAgICAgICJidWlsZFR5cGVBcmd1bWVudHMiLAogICAgICAgICAgLTEsCiAgICAgICAgICBudWxsKTsKICAgIH0KCiAgICAvLyBhcmd1bWVudHMubGVuZ3RoID09IHR5cGVWYXJpYWJsZXMubGVuZ3RoCiAgICBMaXN0PERhcnRUeXBlPiByZXN1bHQgPQogICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQoYXJndW1lbnRzLmxlbmd0aCwgbnVsbCwgZ3Jvd2FibGU6IHRydWUpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyArK2kpIHsKICAgICAgcmVzdWx0W2ldID0gYXJndW1lbnRzW2ldLmJ1aWxkKGxpYnJhcnkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBJZiBbYXJndW1lbnRzXSBhcmUgbnVsbCwgdGhlIGRlZmF1bHQgdHlwZXMgZm9yIHRoZSB2YXJpYWJsZXMgYXJlIHVzZWQuCiAgSW50ZXJmYWNlVHlwZSBidWlsZFR5cGUoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxUeXBlQnVpbGRlcj4gYXJndW1lbnRzKSB7CiAgICByZXR1cm4gYnVpbGRUeXBlc1dpdGhCdWlsdEFyZ3VtZW50cygKICAgICAgICBsaWJyYXJ5LCBidWlsZFR5cGVBcmd1bWVudHMobGlicmFyeSwgYXJndW1lbnRzKSk7CiAgfQoKICBTdXBlcnR5cGUgYnVpbGRTdXBlcnR5cGUoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cykgewogICAgQ2xhc3MgY2xzID0gaXNQYXRjaCA/IG9yaWdpbi50YXJnZXQgOiB0aGlzLmNsczsKICAgIHJldHVybiBuZXcgU3VwZXJ0eXBlKGNscywgYnVpbGRUeXBlQXJndW1lbnRzKGxpYnJhcnksIGFyZ3VtZW50cykpOwogIH0KCiAgU3VwZXJ0eXBlIGJ1aWxkTWl4ZWRJblR5cGUoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cykgewogICAgQ2xhc3MgY2xzID0gaXNQYXRjaCA/IG9yaWdpbi50YXJnZXQgOiB0aGlzLmNsczsKICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IFN1cGVydHlwZShjbHMsIGJ1aWxkVHlwZUFyZ3VtZW50cyhsaWJyYXJ5LCBhcmd1bWVudHMpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgU3VwZXJ0eXBlKAogICAgICAgICAgY2xzLAogICAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCgKICAgICAgICAgICAgICBjbHMudHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBjb25zdCBVbmtub3duVHlwZSgpLAogICAgICAgICAgICAgIGdyb3dhYmxlOiB0cnVlKSk7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrU3VwZXJ0eXBlcyhDb3JlVHlwZXMgY29yZVR5cGVzKSB7CiAgICAvLyBUaGlzIG1ldGhvZCBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGNsYXNzICh0aGF0J3MgYmVpbmcgYnVpbHQpIGl0cyBzdXBlcgogICAgLy8gY2xhc3MgYXBwZWFycyBib3RoIGluICdleHRlbmRzJyBhbmQgJ2ltcGxlbWVudHMnIGNsYXVzZXMgYW5kIHdoZXRoZXIgYW55CiAgICAvLyBpbnRlcmZhY2UgYXBwZWFycyBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgJ2ltcGxlbWVudHMnIGNsYXVzZS4KICAgIGlmIChpbnRlcmZhY2VzID09IG51bGwpIHJldHVybjsKCiAgICAvLyBFeHRyYWN0IHN1cGVyIGNsYXNzIChpZiBpdCBleGlzdHMpLgogICAgQ2xhc3NCdWlsZGVyIHN1cGVyQ2xhc3M7CiAgICBUeXBlQnVpbGRlciBzdXBlckNsYXNzVHlwZSA9IHN1cGVydHlwZTsKICAgIGlmIChzdXBlckNsYXNzVHlwZSBpcyBOYW1lZFR5cGVCdWlsZGVyKSB7CiAgICAgIERlY2xhcmF0aW9uIGRlY2wgPSBzdXBlckNsYXNzVHlwZS5kZWNsYXJhdGlvbjsKICAgICAgaWYgKGRlY2wgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgICAgc3VwZXJDbGFzcyA9IGRlY2w7CiAgICAgIH0KICAgIH0KCiAgICAvLyBWYWxpZGF0ZSBpbnRlcmZhY2VzLgogICAgTWFwPENsYXNzQnVpbGRlciwgaW50PiBwcm9ibGVtczsKICAgIE1hcDxDbGFzc0J1aWxkZXIsIGludD4gcHJvYmxlbXNPZmZzZXRzOwogICAgU2V0PENsYXNzQnVpbGRlcj4gaW1wbGVtZW50ZWQgPSBuZXcgU2V0PENsYXNzQnVpbGRlcj4oKTsKICAgIGZvciAoVHlwZUJ1aWxkZXIgdHlwZSBpbiBpbnRlcmZhY2VzKSB7CiAgICAgIGlmICh0eXBlIGlzIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgICAgICBpbnQgY2hhck9mZnNldCA9IC0xOyAvLyBUT0RPKGFoZSk6IEdldCBvZmZzZXQgZnJvbSB0eXBlLgogICAgICAgIERlY2xhcmF0aW9uIGRlY2wgPSB0eXBlLmRlY2xhcmF0aW9uOwogICAgICAgIGlmIChkZWNsIGlzIENsYXNzQnVpbGRlcikgewogICAgICAgICAgQ2xhc3NCdWlsZGVyIGludGVyZmFjZSA9IGRlY2w7CiAgICAgICAgICBpZiAoc3VwZXJDbGFzcyA9PSBpbnRlcmZhY2UpIHsKICAgICAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgICAgIHRlbXBsYXRlSW1wbGVtZW50c1N1cGVyQ2xhc3Mud2l0aEFyZ3VtZW50cyhpbnRlcmZhY2UubmFtZSksCiAgICAgICAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgbm9MZW5ndGgpOwogICAgICAgICAgfSBlbHNlIGlmIChpbXBsZW1lbnRlZC5jb250YWlucyhpbnRlcmZhY2UpKSB7CiAgICAgICAgICAgIC8vIEFnZ3JlZ2F0ZSByZXBldGl0aW9ucy4KICAgICAgICAgICAgcHJvYmxlbXMgPz89IG5ldyBNYXA8Q2xhc3NCdWlsZGVyLCBpbnQ+KCk7CiAgICAgICAgICAgIHByb2JsZW1zW2ludGVyZmFjZV0gPz89IDA7CiAgICAgICAgICAgIHByb2JsZW1zW2ludGVyZmFjZV0gKz0gMTsKCiAgICAgICAgICAgIHByb2JsZW1zT2Zmc2V0cyA/Pz0gbmV3IE1hcDxDbGFzc0J1aWxkZXIsIGludD4oKTsKICAgICAgICAgICAgcHJvYmxlbXNPZmZzZXRzW2ludGVyZmFjZV0gPz89IGNoYXJPZmZzZXQ7CiAgICAgICAgICB9IGVsc2UgaWYgKGludGVyZmFjZS50YXJnZXQgPT0gY29yZVR5cGVzLmZ1dHVyZU9yQ2xhc3MpIHsKICAgICAgICAgICAgYWRkUHJvYmxlbShtZXNzYWdlSW1wbGVtZW50c0Z1dHVyZU9yLCBjaGFyT2Zmc2V0LAogICAgICAgICAgICAgICAgaW50ZXJmYWNlLnRhcmdldC5uYW1lLmxlbmd0aCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpbXBsZW1lbnRlZC5hZGQoaW50ZXJmYWNlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChwcm9ibGVtcyAhPSBudWxsKSB7CiAgICAgIHByb2JsZW1zLmZvckVhY2goKENsYXNzQnVpbGRlciBpbnRlcmZhY2UsIGludCByZXBldGl0aW9ucykgewogICAgICAgIGFkZFByb2JsZW0oCiAgICAgICAgICAgIHRlbXBsYXRlSW1wbGVtZW50c1JlcGVhdGVkLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBpbnRlcmZhY2UubmFtZSwgcmVwZXRpdGlvbnMpLAogICAgICAgICAgICBwcm9ibGVtc09mZnNldHNbaW50ZXJmYWNlXSwKICAgICAgICAgICAgbm9MZW5ndGgpOwogICAgICB9KTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tCb3VuZHNJblN1cGVydHlwZSgKICAgICAgU3VwZXJ0eXBlIHN1cGVydHlwZSwgVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCkgewogICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IHRoaXMubGlicmFyeTsKCiAgICBMaXN0PFR5cGVBcmd1bWVudElzc3VlPiBpc3N1ZXMgPSBmaW5kVHlwZUFyZ3VtZW50SXNzdWVzKAogICAgICAgIG5ldyBJbnRlcmZhY2VUeXBlKHN1cGVydHlwZS5jbGFzc05vZGUsIHN1cGVydHlwZS50eXBlQXJndW1lbnRzKSwKICAgICAgICB0eXBlRW52aXJvbm1lbnQsCiAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IGZhbHNlKTsKICAgIGlmIChpc3N1ZXMgIT0gbnVsbCkgewogICAgICBmb3IgKFR5cGVBcmd1bWVudElzc3VlIGlzc3VlIGluIGlzc3VlcykgewogICAgICAgIE1lc3NhZ2UgbWVzc2FnZTsKICAgICAgICBEYXJ0VHlwZSBhcmd1bWVudCA9IGlzc3VlLmFyZ3VtZW50OwogICAgICAgIFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciA9IGlzc3VlLnR5cGVQYXJhbWV0ZXI7CiAgICAgICAgYm9vbCBpbmZlcnJlZCA9IGxpYnJhcnkuaW5mZXJyZWRUeXBlcy5jb250YWlucyhhcmd1bWVudCk7CiAgICAgICAgaWYgKGFyZ3VtZW50IGlzIEZ1bmN0aW9uVHlwZSAmJiBhcmd1bWVudC50eXBlUGFyYW1ldGVycy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBpZiAoaW5mZXJyZWQpIHsKICAgICAgICAgICAgbWVzc2FnZSA9IHRlbXBsYXRlR2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnQKICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGFyZ3VtZW50KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlR2VuZXJpY0Z1bmN0aW9uVHlwZVVzZWRBc0FjdHVhbFR5cGVBcmd1bWVudDsKICAgICAgICAgIH0KICAgICAgICAgIHR5cGVQYXJhbWV0ZXIgPSBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoaW5mZXJyZWQpIHsKICAgICAgICAgICAgbWVzc2FnZSA9CiAgICAgICAgICAgICAgICB0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlSW5mZXJyZWQud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCwKICAgICAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLmJvdW5kLAogICAgICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIubmFtZSwKICAgICAgICAgICAgICAgICAgICBnZXRHZW5lcmljVHlwZU5hbWUoaXNzdWUuZW5jbG9zaW5nVHlwZSksCiAgICAgICAgICAgICAgICAgICAgc3VwZXJ0eXBlLmNsYXNzTm9kZS5uYW1lLAogICAgICAgICAgICAgICAgICAgIG5hbWUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWVzc2FnZSA9IHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGUud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAgIGFyZ3VtZW50LAogICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlci5ib3VuZCwKICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIubmFtZSwKICAgICAgICAgICAgICAgIGdldEdlbmVyaWNUeXBlTmFtZShpc3N1ZS5lbmNsb3NpbmdUeXBlKSwKICAgICAgICAgICAgICAgIHN1cGVydHlwZS5jbGFzc05vZGUubmFtZSwKICAgICAgICAgICAgICAgIG5hbWUpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbGlicmFyeS5yZXBvcnRUeXBlQXJndW1lbnRJc3N1ZSgKICAgICAgICAgICAgbWVzc2FnZSwgZmlsZVVyaSwgY2hhck9mZnNldCwgdHlwZVBhcmFtZXRlcik7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgY2hlY2tCb3VuZHNJbk91dGxpbmUoVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCkgewogICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IHRoaXMubGlicmFyeTsKCiAgICAvLyBDaGVjayBpbiBib3VuZHMgb2Ygb3duIHR5cGUgdmFyaWFibGVzLgogICAgZm9yIChUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciBpbiBjbHMudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgTGlzdDxUeXBlQXJndW1lbnRJc3N1ZT4gaXNzdWVzID0gZmluZFR5cGVBcmd1bWVudElzc3VlcygKICAgICAgICAgIHBhcmFtZXRlci5ib3VuZCwgdHlwZUVudmlyb25tZW50LAogICAgICAgICAgYWxsb3dTdXBlckJvdW5kZWQ6IHRydWUpOwogICAgICBpZiAoaXNzdWVzICE9IG51bGwpIHsKICAgICAgICBmb3IgKFR5cGVBcmd1bWVudElzc3VlIGlzc3VlIGluIGlzc3VlcykgewogICAgICAgICAgRGFydFR5cGUgYXJndW1lbnQgPSBpc3N1ZS5hcmd1bWVudDsKICAgICAgICAgIFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciA9IGlzc3VlLnR5cGVQYXJhbWV0ZXI7CiAgICAgICAgICBpZiAobGlicmFyeS5pbmZlcnJlZFR5cGVzLmNvbnRhaW5zKGFyZ3VtZW50KSkgewogICAgICAgICAgICAvLyBJbmZlcmVuY2UgaW4gdHlwZSBleHByZXNzaW9ucyBpbiB0aGUgc3VwZXJ0eXBlcyBib2lscyBkb3duIHRvCiAgICAgICAgICAgIC8vIGluc3RhbnRpYXRlLXRvLWJvdW5kIHdoaWNoIHNob3VsZG4ndCBwcm9kdWNlIGFueXRoaW5nIHRoYXQgYnJlYWtzCiAgICAgICAgICAgIC8vIHRoZSBib3VuZHMgYWZ0ZXIgdGhlIG5vbi1zaW1wbGljaXR5IGNoZWNrcyBhcmUgZG9uZS4gIFNvLCBhbnkKICAgICAgICAgICAgLy8gdmlvbGF0aW9uIGhlcmUgaXMgdGhlIHJlc3VsdCBvZiBub24tc2ltcGxlIGJvdW5kcywgYW5kIHRoZSBlcnJvcgogICAgICAgICAgICAvLyBpcyByZXBvcnRlZCBlbHNld2hlcmUuCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQoKICAgICAgICAgIE1lc3NhZ2UgbWVzc2FnZTsKICAgICAgICAgIGlmIChhcmd1bWVudCBpcyBGdW5jdGlvblR5cGUgJiYgYXJndW1lbnQudHlwZVBhcmFtZXRlcnMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBtZXNzYWdlID0gbWVzc2FnZUdlbmVyaWNGdW5jdGlvblR5cGVVc2VkQXNBY3R1YWxUeXBlQXJndW1lbnQ7CiAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIgPSBudWxsOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbWVzc2FnZSA9IHRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50LndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgICBhcmd1bWVudCwKICAgICAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXIuYm91bmQsCiAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLm5hbWUsCiAgICAgICAgICAgICAgICBnZXRHZW5lcmljVHlwZU5hbWUoaXNzdWUuZW5jbG9zaW5nVHlwZSkpOwogICAgICAgICAgfQoKICAgICAgICAgIGxpYnJhcnkucmVwb3J0VHlwZUFyZ3VtZW50SXNzdWUoCiAgICAgICAgICAgICAgbWVzc2FnZSwgZmlsZVVyaSwgcGFyYW1ldGVyLmZpbGVPZmZzZXQsIHR5cGVQYXJhbWV0ZXIpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIENoZWNrIGluIHN1cGVycy4KICAgIGlmIChjbHMuc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgY2hlY2tCb3VuZHNJblN1cGVydHlwZShjbHMuc3VwZXJ0eXBlLCB0eXBlRW52aXJvbm1lbnQpOwogICAgfQogICAgaWYgKGNscy5taXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgIGNoZWNrQm91bmRzSW5TdXBlcnR5cGUoY2xzLm1peGVkSW5UeXBlLCB0eXBlRW52aXJvbm1lbnQpOwogICAgfQogICAgaWYgKGNscy5pbXBsZW1lbnRlZFR5cGVzICE9IG51bGwpIHsKICAgICAgZm9yIChTdXBlcnR5cGUgc3VwZXJ0eXBlIGluIGNscy5pbXBsZW1lbnRlZFR5cGVzKSB7CiAgICAgICAgY2hlY2tCb3VuZHNJblN1cGVydHlwZShzdXBlcnR5cGUsIHR5cGVFbnZpcm9ubWVudCk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBDaGVjayBpbiBtZW1iZXJzLgogICAgZm9yIChGaWVsZCBmaWVsZCBpbiBjbHMuZmllbGRzKSB7CiAgICAgIGxpYnJhcnkuY2hlY2tCb3VuZHNJbkZpZWxkKGZpZWxkLCB0eXBlRW52aXJvbm1lbnQpOwogICAgfQogICAgZm9yIChQcm9jZWR1cmUgcHJvY2VkdXJlIGluIGNscy5wcm9jZWR1cmVzKSB7CiAgICAgIGxpYnJhcnkuY2hlY2tCb3VuZHNJbkZ1bmN0aW9uTm9kZSgKICAgICAgICAgIHByb2NlZHVyZS5mdW5jdGlvbiwgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpKTsKICAgIH0KICAgIGZvciAoQ29uc3RydWN0b3IgY29uc3RydWN0b3IgaW4gY2xzLmNvbnN0cnVjdG9ycykgewogICAgICBsaWJyYXJ5LmNoZWNrQm91bmRzSW5GdW5jdGlvbk5vZGUoCiAgICAgICAgICBjb25zdHJ1Y3Rvci5mdW5jdGlvbiwgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpKTsKICAgIH0KICAgIGZvciAoUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IgcmVkaXJlY3RpbmcKICAgICAgICBpbiBjbHMucmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzKSB7CiAgICAgIGxpYnJhcnkuY2hlY2tCb3VuZHNJbkZ1bmN0aW9uTm9kZVBhcnRzKAogICAgICAgICAgdHlwZUVudmlyb25tZW50LCBmaWxlVXJpLCByZWRpcmVjdGluZy5maWxlT2Zmc2V0LAogICAgICAgICAgdHlwZVBhcmFtZXRlcnM6IHJlZGlyZWN0aW5nLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnM6IHJlZGlyZWN0aW5nLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiByZWRpcmVjdGluZy5uYW1lZFBhcmFtZXRlcnMpOwogICAgfQogIH0KCiAgdm9pZCBhZGRSZWRpcmVjdGluZ0NvbnN0cnVjdG9yKAogICAgICBQcm9jZWR1cmVCdWlsZGVyIGNvbnN0cnVjdG9yLCBTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAvLyBBZGQgYSBuZXcgc3ludGhldGljIGZpZWxkIHRvIHRoaXMgY2xhc3MgZm9yIHJlcHJlc2VudGluZyBmYWN0b3J5CiAgICAvLyBjb25zdHJ1Y3RvcnMuIFRoaXMgaXMgdXNlZCB0byBzdXBwb3J0IHJlc29sdmluZyBzdWNoIGNvbnN0cnVjdG9ycyBpbgogICAgLy8gc291cmNlIGNvZGUuCiAgICAvLwogICAgLy8gVGhlIHN5bnRoZXRpYyBmaWVsZCBsb29rcyBsaWtlIHRoaXM6CiAgICAvLwogICAgLy8gICAgIGZpbmFsIF9yZWRpcmVjdGluZyMgPSBbYzEsIC4uLiwgY25dOwogICAgLy8KICAgIC8vIFdoZXJlIGVhY2ggYzEgLi4uIGNuIGFyZSBhbiBpbnN0YW5jZSBvZiBbU3RhdGljR2V0XSB3aG9zZSB0YXJnZXQgaXMKICAgIC8vIFtjb25zdHJ1Y3Rvci50YXJnZXRdLgogICAgLy8KICAgIC8vIFRPRE8oYWhlKTogQWRkIGEga2VybmVsIG5vZGUgdG8gcmVwcmVzZW50IHJlZGlyZWN0aW5nIGZhY3RvcnkgYm9kaWVzLgogICAgRGlsbE1lbWJlckJ1aWxkZXIgY29uc3RydWN0b3JzRmllbGQgPQogICAgICAgIG9yaWdpbi5zY29wZS5sb2NhbC5wdXRJZkFic2VudCgiX3JlZGlyZWN0aW5nIyIsICgpIHsKICAgICAgTGlzdExpdGVyYWwgbGl0ZXJhbCA9IG5ldyBMaXN0TGl0ZXJhbCg8RXhwcmVzc2lvbj5bXSk7CiAgICAgIE5hbWUgbmFtZSA9IG5ldyBOYW1lKCJfcmVkaXJlY3RpbmcjIiwgbGlicmFyeS5saWJyYXJ5KTsKICAgICAgRmllbGQgZmllbGQgPSBuZXcgRmllbGQobmFtZSwKICAgICAgICAgIGlzU3RhdGljOiB0cnVlLCBpbml0aWFsaXplcjogbGl0ZXJhbCwgZmlsZVVyaTogY2xzLmZpbGVVcmkpCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2xzLmZpbGVPZmZzZXQ7CiAgICAgIGNscy5hZGRNZW1iZXIoZmllbGQpOwogICAgICByZXR1cm4gbmV3IERpbGxNZW1iZXJCdWlsZGVyKGZpZWxkLCB0aGlzKTsKICAgIH0pOwogICAgRmllbGQgZmllbGQgPSBjb25zdHJ1Y3RvcnNGaWVsZC50YXJnZXQ7CiAgICBMaXN0TGl0ZXJhbCBsaXRlcmFsID0gZmllbGQuaW5pdGlhbGl6ZXI7CiAgICBsaXRlcmFsLmV4cHJlc3Npb25zCiAgICAgICAgLmFkZChuZXcgU3RhdGljR2V0KGNvbnN0cnVjdG9yLnRhcmdldCkuLnBhcmVudCA9IGxpdGVyYWwpOwogIH0KCiAgdm9pZCBoYW5kbGVTZWVuQ292YXJpYW50KAogICAgICBUeXBlcyB0eXBlcywKICAgICAgTWVtYmVyIGRlY2xhcmVkTWVtYmVyLAogICAgICBNZW1iZXIgaW50ZXJmYWNlTWVtYmVyLAogICAgICBib29sIGlzU2V0dGVyLAogICAgICBjYWxsYmFjayhNZW1iZXIgZGVjbGFyZWRNZW1iZXIsIE1lbWJlciBpbnRlcmZhY2VNZW1iZXIsIGJvb2wgaXNTZXR0ZXIpKSB7CiAgICAvLyBXaGVuIGEgcGFyYW1ldGVyIGlzIGNvdmFyaWFudCB3ZSBoYXZlIHRvIGNoZWNrIHRoYXQgd2UgYWxzbwogICAgLy8gb3ZlcnJpZGUgdGhlIHNhbWUgbWVtYmVyIGluIGFsbCBwYXJlbnRzLgogICAgZm9yIChTdXBlcnR5cGUgc3VwZXJ0eXBlIGluIGludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcy5zdXBlcnMpIHsKICAgICAgTWVtYmVyIG0gPSB0eXBlcy5oaWVyYXJjaHkuZ2V0SW50ZXJmYWNlTWVtYmVyS2VybmVsKAogICAgICAgICAgc3VwZXJ0eXBlLmNsYXNzTm9kZSwgaW50ZXJmYWNlTWVtYmVyLm5hbWUsIGlzU2V0dGVyKTsKICAgICAgaWYgKG0gIT0gbnVsbCkgewogICAgICAgIGNhbGxiYWNrKGRlY2xhcmVkTWVtYmVyLCBtLCBpc1NldHRlcik7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgY2hlY2tPdmVycmlkZSgKICAgICAgVHlwZXMgdHlwZXMsCiAgICAgIE1lbWJlciBkZWNsYXJlZE1lbWJlciwKICAgICAgTWVtYmVyIGludGVyZmFjZU1lbWJlciwKICAgICAgYm9vbCBpc1NldHRlciwKICAgICAgY2FsbGJhY2soTWVtYmVyIGRlY2xhcmVkTWVtYmVyLCBNZW1iZXIgaW50ZXJmYWNlTWVtYmVyLCBib29sIGlzU2V0dGVyKSwKICAgICAge2Jvb2wgaXNJbnRlcmZhY2VDaGVjayA9IGZhbHNlfSkgewogICAgaWYgKGRlY2xhcmVkTWVtYmVyID09IGludGVyZmFjZU1lbWJlcikgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoZGVjbGFyZWRNZW1iZXIgaXMgQ29uc3RydWN0b3IgfHwgaW50ZXJmYWNlTWVtYmVyIGlzIENvbnN0cnVjdG9yKSB7CiAgICAgIHVuaW1wbGVtZW50ZWQoCiAgICAgICAgICAiQ29uc3RydWN0b3IgaW4gb3ZlcnJpZGUgY2hlY2suIiwgZGVjbGFyZWRNZW1iZXIuZmlsZU9mZnNldCwgZmlsZVVyaSk7CiAgICB9CiAgICBpZiAoZGVjbGFyZWRNZW1iZXIgaXMgUHJvY2VkdXJlICYmIGludGVyZmFjZU1lbWJlciBpcyBQcm9jZWR1cmUpIHsKICAgICAgaWYgKGRlY2xhcmVkTWVtYmVyLmtpbmQgPT0gUHJvY2VkdXJlS2luZC5NZXRob2QgJiYKICAgICAgICAgIGludGVyZmFjZU1lbWJlci5raW5kID09IFByb2NlZHVyZUtpbmQuTWV0aG9kKSB7CiAgICAgICAgYm9vbCBzZWVuQ292YXJpYW50ID0gY2hlY2tNZXRob2RPdmVycmlkZSgKICAgICAgICAgICAgdHlwZXMsIGRlY2xhcmVkTWVtYmVyLCBpbnRlcmZhY2VNZW1iZXIsIGlzSW50ZXJmYWNlQ2hlY2spOwogICAgICAgIGlmIChzZWVuQ292YXJpYW50KSB7CiAgICAgICAgICBoYW5kbGVTZWVuQ292YXJpYW50KAogICAgICAgICAgICAgIHR5cGVzLCBkZWNsYXJlZE1lbWJlciwgaW50ZXJmYWNlTWVtYmVyLCBpc1NldHRlciwgY2FsbGJhY2spOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZGVjbGFyZWRNZW1iZXIua2luZCA9PSBQcm9jZWR1cmVLaW5kLkdldHRlciAmJgogICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmtpbmQgPT0gUHJvY2VkdXJlS2luZC5HZXR0ZXIpIHsKICAgICAgICBjaGVja0dldHRlck92ZXJyaWRlKAogICAgICAgICAgICB0eXBlcywgZGVjbGFyZWRNZW1iZXIsIGludGVyZmFjZU1lbWJlciwgaXNJbnRlcmZhY2VDaGVjayk7CiAgICAgIH0KICAgICAgaWYgKGRlY2xhcmVkTWVtYmVyLmtpbmQgPT0gUHJvY2VkdXJlS2luZC5TZXR0ZXIgJiYKICAgICAgICAgIGludGVyZmFjZU1lbWJlci5raW5kID09IFByb2NlZHVyZUtpbmQuU2V0dGVyKSB7CiAgICAgICAgYm9vbCBzZWVuQ292YXJpYW50ID0gY2hlY2tTZXR0ZXJPdmVycmlkZSgKICAgICAgICAgICAgdHlwZXMsIGRlY2xhcmVkTWVtYmVyLCBpbnRlcmZhY2VNZW1iZXIsIGlzSW50ZXJmYWNlQ2hlY2spOwogICAgICAgIGlmIChzZWVuQ292YXJpYW50KSB7CiAgICAgICAgICBoYW5kbGVTZWVuQ292YXJpYW50KAogICAgICAgICAgICAgIHR5cGVzLCBkZWNsYXJlZE1lbWJlciwgaW50ZXJmYWNlTWVtYmVyLCBpc1NldHRlciwgY2FsbGJhY2spOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYm9vbCBkZWNsYXJlZE1lbWJlckhhc0dldHRlciA9IGRlY2xhcmVkTWVtYmVyIGlzIEZpZWxkIHx8CiAgICAgICAgICBkZWNsYXJlZE1lbWJlciBpcyBQcm9jZWR1cmUgJiYgZGVjbGFyZWRNZW1iZXIuaXNHZXR0ZXI7CiAgICAgIGJvb2wgaW50ZXJmYWNlTWVtYmVySGFzR2V0dGVyID0gaW50ZXJmYWNlTWVtYmVyIGlzIEZpZWxkIHx8CiAgICAgICAgICBpbnRlcmZhY2VNZW1iZXIgaXMgUHJvY2VkdXJlICYmIGludGVyZmFjZU1lbWJlci5pc0dldHRlcjsKICAgICAgYm9vbCBkZWNsYXJlZE1lbWJlckhhc1NldHRlciA9IChkZWNsYXJlZE1lbWJlciBpcyBGaWVsZCAmJgogICAgICAgICAgICAgICFkZWNsYXJlZE1lbWJlci5pc0ZpbmFsICYmCiAgICAgICAgICAgICAgIWRlY2xhcmVkTWVtYmVyLmlzQ29uc3QpIHx8CiAgICAgICAgICBkZWNsYXJlZE1lbWJlciBpcyBQcm9jZWR1cmUgJiYgZGVjbGFyZWRNZW1iZXIuaXNTZXR0ZXI7CiAgICAgIGJvb2wgaW50ZXJmYWNlTWVtYmVySGFzU2V0dGVyID0gKGludGVyZmFjZU1lbWJlciBpcyBGaWVsZCAmJgogICAgICAgICAgICAgICFpbnRlcmZhY2VNZW1iZXIuaXNGaW5hbCAmJgogICAgICAgICAgICAgICFpbnRlcmZhY2VNZW1iZXIuaXNDb25zdCkgfHwKICAgICAgICAgIGludGVyZmFjZU1lbWJlciBpcyBQcm9jZWR1cmUgJiYgaW50ZXJmYWNlTWVtYmVyLmlzU2V0dGVyOwogICAgICBpZiAoZGVjbGFyZWRNZW1iZXJIYXNHZXR0ZXIgJiYgaW50ZXJmYWNlTWVtYmVySGFzR2V0dGVyKSB7CiAgICAgICAgY2hlY2tHZXR0ZXJPdmVycmlkZSgKICAgICAgICAgICAgdHlwZXMsIGRlY2xhcmVkTWVtYmVyLCBpbnRlcmZhY2VNZW1iZXIsIGlzSW50ZXJmYWNlQ2hlY2spOwogICAgICB9CiAgICAgIGlmIChkZWNsYXJlZE1lbWJlckhhc1NldHRlciAmJiBpbnRlcmZhY2VNZW1iZXJIYXNTZXR0ZXIpIHsKICAgICAgICBib29sIHNlZW5Db3ZhcmlhbnQgPSBjaGVja1NldHRlck92ZXJyaWRlKAogICAgICAgICAgICB0eXBlcywgZGVjbGFyZWRNZW1iZXIsIGludGVyZmFjZU1lbWJlciwgaXNJbnRlcmZhY2VDaGVjayk7CiAgICAgICAgaWYgKHNlZW5Db3ZhcmlhbnQpIHsKICAgICAgICAgIGhhbmRsZVNlZW5Db3ZhcmlhbnQoCiAgICAgICAgICAgICAgdHlwZXMsIGRlY2xhcmVkTWVtYmVyLCBpbnRlcmZhY2VNZW1iZXIsIGlzU2V0dGVyLCBjYWxsYmFjayk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvLyBUT0RPKGFoZSk6IEhhbmRsZSBvdGhlciBjYXNlczogYWNjZXNzb3JzLCBvcGVyYXRvcnMsIGFuZCBmaWVsZHMuCiAgfQoKICB2b2lkIGNoZWNrT3ZlcnJpZGVzKAogICAgICBDbGFzc0hpZXJhcmNoeSBoaWVyYXJjaHksIFR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQpIHt9CgogIHZvaWQgY2hlY2tBYnN0cmFjdE1lbWJlcnMoQ29yZVR5cGVzIGNvcmVUeXBlcywgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5LAogICAgICBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7fQoKICBib29sIGhhc1VzZXJEZWZpbmVkTm9TdWNoTWV0aG9kKAogICAgICBDbGFzcyBrbGFzcywgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5LCBDbGFzcyBvYmplY3RDbGFzcykgewogICAgTWVtYmVyIG5vU3VjaE1ldGhvZCA9IGhpZXJhcmNoeS5nZXREaXNwYXRjaFRhcmdldChrbGFzcywgbm9TdWNoTWV0aG9kTmFtZSk7CiAgICByZXR1cm4gbm9TdWNoTWV0aG9kICE9IG51bGwgJiYgbm9TdWNoTWV0aG9kLmVuY2xvc2luZ0NsYXNzICE9IG9iamVjdENsYXNzOwogIH0KCiAgdm9pZCB0cmFuc2Zvcm1Qcm9jZWR1cmVUb05vU3VjaE1ldGhvZEZvcndhcmRlcigKICAgICAgTWVtYmVyIG5vU3VjaE1ldGhvZEludGVyZmFjZSwgS2VybmVsVGFyZ2V0IHRhcmdldCwgUHJvY2VkdXJlIHByb2NlZHVyZSkgewogICAgU3RyaW5nIHByZWZpeCA9CiAgICAgICAgcHJvY2VkdXJlLmlzR2V0dGVyID8gJ2dldDonIDogcHJvY2VkdXJlLmlzU2V0dGVyID8gJ3NldDonIDogJyc7CiAgICBFeHByZXNzaW9uIGludm9jYXRpb24gPSB0YXJnZXQuYmFja2VuZFRhcmdldC5pbnN0YW50aWF0ZUludm9jYXRpb24oCiAgICAgICAgdGFyZ2V0LmxvYWRlci5jb3JlVHlwZXMsCiAgICAgICAgbmV3IFRoaXNFeHByZXNzaW9uKCksCiAgICAgICAgcHJlZml4ICsgcHJvY2VkdXJlLm5hbWUubmFtZSwKICAgICAgICBuZXcgQXJndW1lbnRzLmZvcndhcmRlZChwcm9jZWR1cmUuZnVuY3Rpb24pLAogICAgICAgIHByb2NlZHVyZS5maWxlT2Zmc2V0LAogICAgICAgIC8qaXNTdXBlcj0qLyBmYWxzZSk7CiAgICBFeHByZXNzaW9uIHJlc3VsdCA9IG5ldyBNZXRob2RJbnZvY2F0aW9uKG5ldyBUaGlzRXhwcmVzc2lvbigpLAogICAgICAgIG5vU3VjaE1ldGhvZE5hbWUsIG5ldyBBcmd1bWVudHMoW2ludm9jYXRpb25dKSwgbm9TdWNoTWV0aG9kSW50ZXJmYWNlKQogICAgICAuLmZpbGVPZmZzZXQgPSBwcm9jZWR1cmUuZmlsZU9mZnNldDsKICAgIGlmIChwcm9jZWR1cmUuZnVuY3Rpb24ucmV0dXJuVHlwZSBpcyEgVm9pZFR5cGUpIHsKICAgICAgcmVzdWx0ID0gbmV3IEFzRXhwcmVzc2lvbihyZXN1bHQsIHByb2NlZHVyZS5mdW5jdGlvbi5yZXR1cm5UeXBlKQogICAgICAgIC4uaXNUeXBlRXJyb3IgPSB0cnVlCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gcHJvY2VkdXJlLmZpbGVPZmZzZXQ7CiAgICB9CiAgICBwcm9jZWR1cmUuZnVuY3Rpb24uYm9keSA9IG5ldyBSZXR1cm5TdGF0ZW1lbnQocmVzdWx0KQogICAgICAuLmZpbGVPZmZzZXQgPSBwcm9jZWR1cmUuZmlsZU9mZnNldDsKICAgIHByb2NlZHVyZS5mdW5jdGlvbi5ib2R5LnBhcmVudCA9IHByb2NlZHVyZS5mdW5jdGlvbjsKCiAgICBwcm9jZWR1cmUuaXNBYnN0cmFjdCA9IGZhbHNlOwogICAgcHJvY2VkdXJlLmlzTm9TdWNoTWV0aG9kRm9yd2FyZGVyID0gdHJ1ZTsKICAgIHByb2NlZHVyZS5pc0ZvcndhcmRpbmdTdHViID0gZmFsc2U7CiAgICBwcm9jZWR1cmUuaXNGb3J3YXJkaW5nU2VtaVN0dWIgPSBmYWxzZTsKICB9CgogIHZvaWQgYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVyRm9yUHJvY2VkdXJlKE1lbWJlciBub1N1Y2hNZXRob2QsCiAgICAgIEtlcm5lbFRhcmdldCB0YXJnZXQsIFByb2NlZHVyZSBwcm9jZWR1cmUsIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSkgewogICAgQ2xvbmVXaXRob3V0Qm9keSBjbG9uZXIgPSBuZXcgQ2xvbmVXaXRob3V0Qm9keSgKICAgICAgICB0eXBlU3Vic3RpdHV0aW9uOiB0eXBlX2FsZ2VicmEuZ2V0U3Vic3RpdHV0aW9uTWFwKAogICAgICAgICAgICBoaWVyYXJjaHkuZ2V0Q2xhc3NBc0luc3RhbmNlT2YoY2xzLCBwcm9jZWR1cmUuZW5jbG9zaW5nQ2xhc3MpKSwKICAgICAgICBjbG9uZUFubm90YXRpb25zOiBmYWxzZSk7CiAgICBQcm9jZWR1cmUgY2xvbmVkID0gY2xvbmVyLmNsb25lKHByb2NlZHVyZSkuLmlzRXh0ZXJuYWwgPSBmYWxzZTsKICAgIHRyYW5zZm9ybVByb2NlZHVyZVRvTm9TdWNoTWV0aG9kRm9yd2FyZGVyKG5vU3VjaE1ldGhvZCwgdGFyZ2V0LCBjbG9uZWQpOwogICAgY2xzLnByb2NlZHVyZXMuYWRkKGNsb25lZCk7CiAgICBjbG9uZWQucGFyZW50ID0gY2xzOwoKICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkgPSB0aGlzLmxpYnJhcnk7CiAgICBsaWJyYXJ5LmZvcndhcmRlcnNPcmlnaW5zLmFkZChjbG9uZWQpOwogICAgbGlicmFyeS5mb3J3YXJkZXJzT3JpZ2lucy5hZGQocHJvY2VkdXJlKTsKICB9CgogIHZvaWQgYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVyR2V0dGVyRm9yRmllbGQoTWVtYmVyIG5vU3VjaE1ldGhvZCwKICAgICAgS2VybmVsVGFyZ2V0IHRhcmdldCwgRmllbGQgZmllbGQsIENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSkgewogICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tU3VwZXJ0eXBlKAogICAgICAgIGhpZXJhcmNoeS5nZXRDbGFzc0FzSW5zdGFuY2VPZihjbHMsIGZpZWxkLmVuY2xvc2luZ0NsYXNzKSk7CiAgICBQcm9jZWR1cmUgZ2V0dGVyID0gbmV3IFByb2NlZHVyZSgKICAgICAgICBmaWVsZC5uYW1lLAogICAgICAgIFByb2NlZHVyZUtpbmQuR2V0dGVyLAogICAgICAgIG5ldyBGdW5jdGlvbk5vZGUobnVsbCwKICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnM6IDxUeXBlUGFyYW1ldGVyPltdLAogICAgICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVyczogPFZhcmlhYmxlRGVjbGFyYXRpb24+W10sCiAgICAgICAgICAgIG5hbWVkUGFyYW1ldGVyczogPFZhcmlhYmxlRGVjbGFyYXRpb24+W10sCiAgICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IDAsCiAgICAgICAgICAgIHJldHVyblR5cGU6IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShmaWVsZC50eXBlKSksCiAgICAgICAgZmlsZVVyaTogZmllbGQuZmlsZVVyaSkKICAgICAgLi5maWxlT2Zmc2V0ID0gZmllbGQuZmlsZU9mZnNldDsKICAgIHRyYW5zZm9ybVByb2NlZHVyZVRvTm9TdWNoTWV0aG9kRm9yd2FyZGVyKG5vU3VjaE1ldGhvZCwgdGFyZ2V0LCBnZXR0ZXIpOwogICAgY2xzLnByb2NlZHVyZXMuYWRkKGdldHRlcik7CiAgICBnZXR0ZXIucGFyZW50ID0gY2xzOwogIH0KCiAgdm9pZCBhZGROb1N1Y2hNZXRob2RGb3J3YXJkZXJTZXR0ZXJGb3JGaWVsZChNZW1iZXIgbm9TdWNoTWV0aG9kLAogICAgICBLZXJuZWxUYXJnZXQgdGFyZ2V0LCBGaWVsZCBmaWVsZCwgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5KSB7CiAgICBTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21TdXBlcnR5cGUoCiAgICAgICAgaGllcmFyY2h5LmdldENsYXNzQXNJbnN0YW5jZU9mKGNscywgZmllbGQuZW5jbG9zaW5nQ2xhc3MpKTsKICAgIFByb2NlZHVyZSBzZXR0ZXIgPSBuZXcgUHJvY2VkdXJlKAogICAgICAgIGZpZWxkLm5hbWUsCiAgICAgICAgUHJvY2VkdXJlS2luZC5TZXR0ZXIsCiAgICAgICAgbmV3IEZ1bmN0aW9uTm9kZShudWxsLAogICAgICAgICAgICB0eXBlUGFyYW1ldGVyczogPFR5cGVQYXJhbWV0ZXI+W10sCiAgICAgICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzOiA8VmFyaWFibGVEZWNsYXJhdGlvbj5bCiAgICAgICAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24oInZhbHVlIiwKICAgICAgICAgICAgICAgICAgdHlwZTogc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGZpZWxkLnR5cGUpKQogICAgICAgICAgICBdLAogICAgICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IDxWYXJpYWJsZURlY2xhcmF0aW9uPltdLAogICAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiAxLAogICAgICAgICAgICByZXR1cm5UeXBlOiBjb25zdCBWb2lkVHlwZSgpKSwKICAgICAgICBmaWxlVXJpOiBmaWVsZC5maWxlVXJpKQogICAgICAuLmZpbGVPZmZzZXQgPSBmaWVsZC5maWxlT2Zmc2V0OwogICAgdHJhbnNmb3JtUHJvY2VkdXJlVG9Ob1N1Y2hNZXRob2RGb3J3YXJkZXIobm9TdWNoTWV0aG9kLCB0YXJnZXQsIHNldHRlcik7CiAgICBjbHMucHJvY2VkdXJlcy5hZGQoc2V0dGVyKTsKICAgIHNldHRlci5wYXJlbnQgPSBjbHM7CiAgfQoKICAvLy8gQWRkcyBub1N1Y2hNZXRob2QgZm9yd2FyZGluZyBzdHVicyB0byB0aGlzIGNsYXNzLiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUKICAvLy8gY2xhc3Mgd2FzIG1vZGlmaWVkLgogIGJvb2wgYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVycygKICAgICAgS2VybmVsVGFyZ2V0IHRhcmdldCwgQ2xhc3NIaWVyYXJjaHkgaGllcmFyY2h5KSB7CiAgICBpZiAoY2xzLmlzQWJzdHJhY3QpIHJldHVybiBmYWxzZTsKCiAgICBTZXQ8TmFtZT4gZXhpc3RpbmdGb3J3YXJkZXJzTmFtZXMgPSBuZXcgU2V0PE5hbWU+KCk7CiAgICBTZXQ8TmFtZT4gZXhpc3RpbmdTZXR0ZXJGb3J3YXJkZXJzTmFtZXMgPSBuZXcgU2V0PE5hbWU+KCk7CiAgICBDbGFzcyBsZWFzdENvbmNyZXRlU3VwZXJjbGFzcyA9IGNscy5zdXBlcmNsYXNzOwogICAgd2hpbGUgKAogICAgICAgIGxlYXN0Q29uY3JldGVTdXBlcmNsYXNzICE9IG51bGwgJiYgbGVhc3RDb25jcmV0ZVN1cGVyY2xhc3MuaXNBYnN0cmFjdCkgewogICAgICBsZWFzdENvbmNyZXRlU3VwZXJjbGFzcyA9IGxlYXN0Q29uY3JldGVTdXBlcmNsYXNzLnN1cGVyY2xhc3M7CiAgICB9CiAgICBpZiAobGVhc3RDb25jcmV0ZVN1cGVyY2xhc3MgIT0gbnVsbCkgewogICAgICBib29sIHN1cGVySGFzVXNlckRlZmluZWROb1N1Y2hNZXRob2QgPSBoYXNVc2VyRGVmaW5lZE5vU3VjaE1ldGhvZCgKICAgICAgICAgIGxlYXN0Q29uY3JldGVTdXBlcmNsYXNzLCBoaWVyYXJjaHksIHRhcmdldC5vYmplY3RDbGFzcyk7CiAgICAgIExpc3Q8TWVtYmVyPiBjb25jcmV0ZSA9CiAgICAgICAgICBoaWVyYXJjaHkuZ2V0RGlzcGF0Y2hUYXJnZXRzKGxlYXN0Q29uY3JldGVTdXBlcmNsYXNzKTsKICAgICAgZm9yIChNZW1iZXIgbWVtYmVyCiAgICAgICAgICBpbiBoaWVyYXJjaHkuZ2V0SW50ZXJmYWNlTWVtYmVycyhsZWFzdENvbmNyZXRlU3VwZXJjbGFzcykpIHsKICAgICAgICBpZiAoKHN1cGVySGFzVXNlckRlZmluZWROb1N1Y2hNZXRob2QgfHwKICAgICAgICAgICAgICAgIGxlYXN0Q29uY3JldGVTdXBlcmNsYXNzLmVuY2xvc2luZ0xpYnJhcnkuY29tcGFyZVRvKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtYmVyLmVuY2xvc2luZ0NsYXNzLmVuY2xvc2luZ0xpYnJhcnkpICE9CiAgICAgICAgICAgICAgICAgICAgICAgIDAgJiYKICAgICAgICAgICAgICAgICAgICBtZW1iZXIubmFtZS5pc1ByaXZhdGUpICYmCiAgICAgICAgICAgIENsYXNzSGllcmFyY2h5LmZpbmRNZW1iZXJCeU5hbWUoY29uY3JldGUsIG1lbWJlci5uYW1lKSA9PSBudWxsKSB7CiAgICAgICAgICBleGlzdGluZ0ZvcndhcmRlcnNOYW1lcy5hZGQobWVtYmVyLm5hbWUpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgTGlzdDxNZW1iZXI+IGNvbmNyZXRlU2V0dGVycyA9CiAgICAgICAgICBoaWVyYXJjaHkuZ2V0RGlzcGF0Y2hUYXJnZXRzKGxlYXN0Q29uY3JldGVTdXBlcmNsYXNzLCBzZXR0ZXJzOiB0cnVlKTsKICAgICAgZm9yIChNZW1iZXIgbWVtYmVyIGluIGhpZXJhcmNoeQogICAgICAgICAgLmdldEludGVyZmFjZU1lbWJlcnMobGVhc3RDb25jcmV0ZVN1cGVyY2xhc3MsIHNldHRlcnM6IHRydWUpKSB7CiAgICAgICAgaWYgKENsYXNzSGllcmFyY2h5LmZpbmRNZW1iZXJCeU5hbWUoY29uY3JldGVTZXR0ZXJzLCBtZW1iZXIubmFtZSkgPT0KICAgICAgICAgICAgbnVsbCkgewogICAgICAgICAgZXhpc3RpbmdTZXR0ZXJGb3J3YXJkZXJzTmFtZXMuYWRkKG1lbWJlci5uYW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBNZW1iZXIgbm9TdWNoTWV0aG9kID0gQ2xhc3NIaWVyYXJjaHkuZmluZE1lbWJlckJ5TmFtZSgKICAgICAgICBoaWVyYXJjaHkuZ2V0SW50ZXJmYWNlTWVtYmVycyhjbHMpLCBub1N1Y2hNZXRob2ROYW1lKTsKCiAgICBMaXN0PE1lbWJlcj4gY29uY3JldGUgPSBoaWVyYXJjaHkuZ2V0RGlzcGF0Y2hUYXJnZXRzKGNscyk7CiAgICBMaXN0PE1lbWJlcj4gZGVjbGFyZWQgPSBoaWVyYXJjaHkuZ2V0RGVjbGFyZWRNZW1iZXJzKGNscyk7CgogICAgYm9vbCBjbHNIYXNVc2VyRGVmaW5lZE5vU3VjaE1ldGhvZCA9CiAgICAgICAgaGFzVXNlckRlZmluZWROb1N1Y2hNZXRob2QoY2xzLCBoaWVyYXJjaHksIHRhcmdldC5vYmplY3RDbGFzcyk7CiAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgIGZvciAoTWVtYmVyIG1lbWJlciBpbiBoaWVyYXJjaHkuZ2V0SW50ZXJmYWNlTWVtYmVycyhjbHMpKSB7CiAgICAgIC8vIFdlIGdlbmVyYXRlIGEgbm9TdWNoTWV0aG9kIGZvcndhcmRlciBmb3IgW21lbWJlcl0gaW4gW2Nsc10gaWYgdGhlCiAgICAgIC8vIGZvbGxvd2luZyB0aHJlZSBjb25kaXRpb25zIGFyZSBzYXRpc2ZpZWQgc2ltdWx0YW5lb3VzbHk6CiAgICAgIC8vIDEpIFRoZXJlIGlzIGEgdXNlci1kZWZpbmVkIG5vU3VjaE1ldGhvZCBpbiBbY2xzXSBvciBbbWVtYmVyXSBpcyBwcml2YXRlCiAgICAgIC8vICAgIGFuZCB0aGUgZW5jbG9zaW5nIGxpYnJhcnkgb2YgW21lbWJlcl0gaXMgZGlmZmVyZW50IGZyb20gdGhhdCBvZgogICAgICAvLyAgICBbY2xzXS4KICAgICAgLy8gMikgVGhlcmUgaXMgbm8gaW1wbGVtZW50YXRpb24gb2YgW21lbWJlcl0gaW4gW2Nsc10uCiAgICAgIC8vIDMpIFRoZSBzdXBlcmNsYXNzIG9mIFtjbHNdIGhhcyBubyBmb3J3YXJkZXIgZm9yIFttZW1iZXJdLgogICAgICBpZiAobWVtYmVyIGlzIFByb2NlZHVyZSAmJgogICAgICAgICAgKGNsc0hhc1VzZXJEZWZpbmVkTm9TdWNoTWV0aG9kIHx8CiAgICAgICAgICAgICAgY2xzLmVuY2xvc2luZ0xpYnJhcnkKICAgICAgICAgICAgICAgICAgICAgICAgICAuY29tcGFyZVRvKG1lbWJlci5lbmNsb3NpbmdDbGFzcy5lbmNsb3NpbmdMaWJyYXJ5KSAhPQogICAgICAgICAgICAgICAgICAgICAgMCAmJgogICAgICAgICAgICAgICAgICBtZW1iZXIubmFtZS5pc1ByaXZhdGUpICYmCiAgICAgICAgICBDbGFzc0hpZXJhcmNoeS5maW5kTWVtYmVyQnlOYW1lKGNvbmNyZXRlLCBtZW1iZXIubmFtZSkgPT0gbnVsbCAmJgogICAgICAgICAgIWV4aXN0aW5nRm9yd2FyZGVyc05hbWVzLmNvbnRhaW5zKG1lbWJlci5uYW1lKSkgewogICAgICAgIGlmIChDbGFzc0hpZXJhcmNoeS5maW5kTWVtYmVyQnlOYW1lKGRlY2xhcmVkLCBtZW1iZXIubmFtZSkgIT0gbnVsbCkgewogICAgICAgICAgdHJhbnNmb3JtUHJvY2VkdXJlVG9Ob1N1Y2hNZXRob2RGb3J3YXJkZXIoCiAgICAgICAgICAgICAgbm9TdWNoTWV0aG9kLCB0YXJnZXQsIG1lbWJlcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFkZE5vU3VjaE1ldGhvZEZvcndhcmRlckZvclByb2NlZHVyZSgKICAgICAgICAgICAgICBub1N1Y2hNZXRob2QsIHRhcmdldCwgbWVtYmVyLCBoaWVyYXJjaHkpOwogICAgICAgIH0KICAgICAgICBleGlzdGluZ0ZvcndhcmRlcnNOYW1lcy5hZGQobWVtYmVyLm5hbWUpOwogICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICBpZiAobWVtYmVyIGlzIEZpZWxkICYmCiAgICAgICAgICBDbGFzc0hpZXJhcmNoeS5maW5kTWVtYmVyQnlOYW1lKGNvbmNyZXRlLCBtZW1iZXIubmFtZSkgPT0gbnVsbCAmJgogICAgICAgICAgIWV4aXN0aW5nRm9yd2FyZGVyc05hbWVzLmNvbnRhaW5zKG1lbWJlci5uYW1lKSkgewogICAgICAgIGFkZE5vU3VjaE1ldGhvZEZvcndhcmRlckdldHRlckZvckZpZWxkKAogICAgICAgICAgICBub1N1Y2hNZXRob2QsIHRhcmdldCwgbWVtYmVyLCBoaWVyYXJjaHkpOwogICAgICAgIGV4aXN0aW5nRm9yd2FyZGVyc05hbWVzLmFkZChtZW1iZXIubmFtZSk7CiAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgIH0KICAgIH0KCiAgICBMaXN0PE1lbWJlcj4gY29uY3JldGVTZXR0ZXJzID0KICAgICAgICBoaWVyYXJjaHkuZ2V0RGlzcGF0Y2hUYXJnZXRzKGNscywgc2V0dGVyczogdHJ1ZSk7CiAgICBMaXN0PE1lbWJlcj4gZGVjbGFyZWRTZXR0ZXJzID0KICAgICAgICBoaWVyYXJjaHkuZ2V0RGVjbGFyZWRNZW1iZXJzKGNscywgc2V0dGVyczogdHJ1ZSk7CiAgICBmb3IgKE1lbWJlciBtZW1iZXIgaW4gaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcnMoY2xzLCBzZXR0ZXJzOiB0cnVlKSkgewogICAgICBpZiAobWVtYmVyIGlzIFByb2NlZHVyZSAmJgogICAgICAgICAgQ2xhc3NIaWVyYXJjaHkuZmluZE1lbWJlckJ5TmFtZShjb25jcmV0ZVNldHRlcnMsIG1lbWJlci5uYW1lKSA9PQogICAgICAgICAgICAgIG51bGwgJiYKICAgICAgICAgICFleGlzdGluZ1NldHRlckZvcndhcmRlcnNOYW1lcy5jb250YWlucyhtZW1iZXIubmFtZSkpIHsKICAgICAgICBpZiAoQ2xhc3NIaWVyYXJjaHkuZmluZE1lbWJlckJ5TmFtZShkZWNsYXJlZFNldHRlcnMsIG1lbWJlci5uYW1lKSAhPQogICAgICAgICAgICBudWxsKSB7CiAgICAgICAgICB0cmFuc2Zvcm1Qcm9jZWR1cmVUb05vU3VjaE1ldGhvZEZvcndhcmRlcigKICAgICAgICAgICAgICBub1N1Y2hNZXRob2QsIHRhcmdldCwgbWVtYmVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVyRm9yUHJvY2VkdXJlKAogICAgICAgICAgICAgIG5vU3VjaE1ldGhvZCwgdGFyZ2V0LCBtZW1iZXIsIGhpZXJhcmNoeSk7CiAgICAgICAgfQogICAgICAgIGV4aXN0aW5nU2V0dGVyRm9yd2FyZGVyc05hbWVzLmFkZChtZW1iZXIubmFtZSk7CiAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKG1lbWJlciBpcyBGaWVsZCAmJgogICAgICAgICAgQ2xhc3NIaWVyYXJjaHkuZmluZE1lbWJlckJ5TmFtZShjb25jcmV0ZVNldHRlcnMsIG1lbWJlci5uYW1lKSA9PQogICAgICAgICAgICAgIG51bGwgJiYKICAgICAgICAgICFleGlzdGluZ1NldHRlckZvcndhcmRlcnNOYW1lcy5jb250YWlucyhtZW1iZXIubmFtZSkpIHsKICAgICAgICBhZGROb1N1Y2hNZXRob2RGb3J3YXJkZXJTZXR0ZXJGb3JGaWVsZCgKICAgICAgICAgICAgbm9TdWNoTWV0aG9kLCB0YXJnZXQsIG1lbWJlciwgaGllcmFyY2h5KTsKICAgICAgICBleGlzdGluZ1NldHRlckZvcndhcmRlcnNOYW1lcy5hZGQobWVtYmVyLm5hbWUpOwogICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGNoYW5nZWQ7CiAgfQoKICBVcmkgX2dldE1lbWJlclVyaShNZW1iZXIgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyIGlzIEZpZWxkKSByZXR1cm4gbWVtYmVyLmZpbGVVcmk7CiAgICBpZiAobWVtYmVyIGlzIFByb2NlZHVyZSkgcmV0dXJuIG1lbWJlci5maWxlVXJpOwogICAgLy8gT3RoZXIgbWVtYmVyIHR5cGVzIHdvbid0IGJlIHNlZW4gYmVjYXVzZSBjb25zdHJ1Y3RvcnMgZG9uJ3QgcGFydGljaXBhdGUKICAgIC8vIGluIG92ZXJyaWRlIHJlbGF0aW9uc2hpcHMKICAgIHJldHVybiB1bmhhbmRsZWQoJyR7bWVtYmVyLnJ1bnRpbWVUeXBlfScsICdfZ2V0TWVtYmVyVXJpJywgLTEsIG51bGwpOwogIH0KCiAgU3Vic3RpdHV0aW9uIF9jb21wdXRlSW50ZXJmYWNlU3Vic3RpdHV0aW9uKAogICAgICBUeXBlcyB0eXBlcywKICAgICAgTWVtYmVyIGRlY2xhcmVkTWVtYmVyLAogICAgICBNZW1iZXIgaW50ZXJmYWNlTWVtYmVyLAogICAgICBGdW5jdGlvbk5vZGUgZGVjbGFyZWRGdW5jdGlvbiwKICAgICAgRnVuY3Rpb25Ob2RlIGludGVyZmFjZUZ1bmN0aW9uLAogICAgICBib29sIGlzSW50ZXJmYWNlQ2hlY2spIHsKICAgIFN1YnN0aXR1dGlvbiBpbnRlcmZhY2VTdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZW1wdHk7CiAgICBpZiAoaW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgaW50ZXJmYWNlU3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKHR5cGVzLmhpZXJhcmNoeQogICAgICAgICAgLmdldEtlcm5lbFR5cGVBc0luc3RhbmNlT2YoCiAgICAgICAgICAgICAgY2xzLnRoaXNUeXBlLCBpbnRlcmZhY2VNZW1iZXIuZW5jbG9zaW5nQ2xhc3MpKTsKICAgIH0KICAgIGlmIChkZWNsYXJlZEZ1bmN0aW9uPy50eXBlUGFyYW1ldGVycz8ubGVuZ3RoICE9CiAgICAgICAgaW50ZXJmYWNlRnVuY3Rpb24/LnR5cGVQYXJhbWV0ZXJzPy5sZW5ndGgpIHsKICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVPdmVycmlkZVR5cGVWYXJpYWJsZXNNaXNtYXRjaC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiIKICAgICAgICAgICAgICAgICAgIiR7ZGVjbGFyZWRNZW1iZXIubmFtZS5uYW1lfSIsCiAgICAgICAgICAgICAgIiR7aW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiIKICAgICAgICAgICAgICAgICAgIiR7aW50ZXJmYWNlTWVtYmVyLm5hbWUubmFtZX0iKSwKICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLmZpbGVPZmZzZXQsCiAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRkZW5NZXRob2RDYXVzZQogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGludGVyZmFjZU1lbWJlci5uYW1lLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihfZ2V0TWVtYmVyVXJpKGludGVyZmFjZU1lbWJlciksCiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5maWxlT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICAgICAgICBdICsKICAgICAgICAgICAgICBpbmhlcml0ZWRDb250ZXh0KGlzSW50ZXJmYWNlQ2hlY2ssIGRlY2xhcmVkTWVtYmVyKSk7CiAgICB9IGVsc2UgaWYgKCFsaWJyYXJ5LmxvYWRlci50YXJnZXQuYmFja2VuZFRhcmdldC5sZWdhY3lNb2RlICYmCiAgICAgICAgZGVjbGFyZWRGdW5jdGlvbj8udHlwZVBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHN1YnN0aXR1dGlvbk1hcCA9CiAgICAgICAgICA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVjbGFyZWRGdW5jdGlvbi50eXBlUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICAgIHN1YnN0aXR1dGlvbk1hcFtpbnRlcmZhY2VGdW5jdGlvbi50eXBlUGFyYW1ldGVyc1tpXV0gPQogICAgICAgICAgICBuZXcgVHlwZVBhcmFtZXRlclR5cGUoZGVjbGFyZWRGdW5jdGlvbi50eXBlUGFyYW1ldGVyc1tpXSk7CiAgICAgIH0KICAgICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5mcm9tTWFwKHN1YnN0aXR1dGlvbk1hcCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVjbGFyZWRGdW5jdGlvbi50eXBlUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICAgIFR5cGVQYXJhbWV0ZXIgZGVjbGFyZWRQYXJhbWV0ZXIgPSBkZWNsYXJlZEZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzW2ldOwogICAgICAgIFR5cGVQYXJhbWV0ZXIgaW50ZXJmYWNlUGFyYW1ldGVyID0gaW50ZXJmYWNlRnVuY3Rpb24udHlwZVBhcmFtZXRlcnNbaV07CiAgICAgICAgaWYgKCFpbnRlcmZhY2VQYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgICAgRGFydFR5cGUgZGVjbGFyZWRCb3VuZCA9IGRlY2xhcmVkUGFyYW1ldGVyLmJvdW5kOwogICAgICAgICAgRGFydFR5cGUgaW50ZXJmYWNlQm91bmQgPSBpbnRlcmZhY2VQYXJhbWV0ZXIuYm91bmQ7CiAgICAgICAgICBpZiAoaW50ZXJmYWNlU3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgICAgICAgZGVjbGFyZWRCb3VuZCA9IGludGVyZmFjZVN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShkZWNsYXJlZEJvdW5kKTsKICAgICAgICAgICAgaW50ZXJmYWNlQm91bmQgPQogICAgICAgICAgICAgICAgaW50ZXJmYWNlU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGludGVyZmFjZUJvdW5kKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChkZWNsYXJlZEJvdW5kICE9IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShpbnRlcmZhY2VCb3VuZCkpIHsKICAgICAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgICAgICAgdGVtcGxhdGVPdmVycmlkZVR5cGVWYXJpYWJsZXNNaXNtYXRjaC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiIKICAgICAgICAgICAgICAgICAgICAgICAgIiR7ZGVjbGFyZWRNZW1iZXIubmFtZS5uYW1lfSIsCiAgICAgICAgICAgICAgICAgICAgIiR7aW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiIKICAgICAgICAgICAgICAgICAgICAgICAgIiR7aW50ZXJmYWNlTWVtYmVyLm5hbWUubmFtZX0iKSwKICAgICAgICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLmZpbGVPZmZzZXQsCiAgICAgICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRkZW5NZXRob2RDYXVzZQogICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGludGVyZmFjZU1lbWJlci5uYW1lLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihfZ2V0TWVtYmVyVXJpKGludGVyZmFjZU1lbWJlciksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5maWxlT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICAgICAgICAgICAgICBdICsKICAgICAgICAgICAgICAgICAgICBpbmhlcml0ZWRDb250ZXh0KGlzSW50ZXJmYWNlQ2hlY2ssIGRlY2xhcmVkTWVtYmVyKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGludGVyZmFjZVN1YnN0aXR1dGlvbiA9CiAgICAgICAgICBTdWJzdGl0dXRpb24uY29tYmluZShpbnRlcmZhY2VTdWJzdGl0dXRpb24sIHN1YnN0aXR1dGlvbik7CiAgICB9CiAgICByZXR1cm4gaW50ZXJmYWNlU3Vic3RpdHV0aW9uOwogIH0KCiAgU3Vic3RpdHV0aW9uIF9jb21wdXRlRGVjbGFyZWRTdWJzdGl0dXRpb24oCiAgICAgIFR5cGVzIHR5cGVzLCBNZW1iZXIgZGVjbGFyZWRNZW1iZXIpIHsKICAgIFN1YnN0aXR1dGlvbiBkZWNsYXJlZFN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlvbi5lbXB0eTsKICAgIGlmIChkZWNsYXJlZE1lbWJlci5lbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIGRlY2xhcmVkU3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKHR5cGVzLmhpZXJhcmNoeQogICAgICAgICAgLmdldEtlcm5lbFR5cGVBc0luc3RhbmNlT2YoCiAgICAgICAgICAgICAgY2xzLnRoaXNUeXBlLCBkZWNsYXJlZE1lbWJlci5lbmNsb3NpbmdDbGFzcykpOwogICAgfQogICAgcmV0dXJuIGRlY2xhcmVkU3Vic3RpdHV0aW9uOwogIH0KCiAgdm9pZCBfY2hlY2tUeXBlcygKICAgICAgVHlwZXMgdHlwZXMsCiAgICAgIFN1YnN0aXR1dGlvbiBpbnRlcmZhY2VTdWJzdGl0dXRpb24sCiAgICAgIFN1YnN0aXR1dGlvbiBkZWNsYXJlZFN1YnN0aXR1dGlvbiwKICAgICAgTWVtYmVyIGRlY2xhcmVkTWVtYmVyLAogICAgICBNZW1iZXIgaW50ZXJmYWNlTWVtYmVyLAogICAgICBEYXJ0VHlwZSBkZWNsYXJlZFR5cGUsCiAgICAgIERhcnRUeXBlIGludGVyZmFjZVR5cGUsCiAgICAgIGJvb2wgaXNDb3ZhcmlhbnQsCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gZGVjbGFyZWRQYXJhbWV0ZXIsCiAgICAgIGJvb2wgaXNJbnRlcmZhY2VDaGVjaywKICAgICAge2Jvb2wgYXNJZkRlY2xhcmVkUGFyYW1ldGVyID0gZmFsc2V9KSB7CiAgICBpZiAobGlicmFyeS5sb2FkZXIudGFyZ2V0LmJhY2tlbmRUYXJnZXQubGVnYWN5TW9kZSkgcmV0dXJuOwoKICAgIGlmIChpbnRlcmZhY2VTdWJzdGl0dXRpb24gIT0gbnVsbCkgewogICAgICBpbnRlcmZhY2VUeXBlID0gaW50ZXJmYWNlU3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGludGVyZmFjZVR5cGUpOwogICAgfQogICAgaWYgKGRlY2xhcmVkU3Vic3RpdHV0aW9uICE9IG51bGwpIHsKICAgICAgZGVjbGFyZWRUeXBlID0gZGVjbGFyZWRTdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVR5cGUoZGVjbGFyZWRUeXBlKTsKICAgIH0KCiAgICBib29sIGluUGFyYW1ldGVyID0gZGVjbGFyZWRQYXJhbWV0ZXIgIT0gbnVsbCB8fCBhc0lmRGVjbGFyZWRQYXJhbWV0ZXI7CiAgICBEYXJ0VHlwZSBzdWJ0eXBlID0gaW5QYXJhbWV0ZXIgPyBpbnRlcmZhY2VUeXBlIDogZGVjbGFyZWRUeXBlOwogICAgRGFydFR5cGUgc3VwZXJ0eXBlID0gaW5QYXJhbWV0ZXIgPyBkZWNsYXJlZFR5cGUgOiBpbnRlcmZhY2VUeXBlOwoKICAgIGlmICh0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzdWJ0eXBlLCBzdXBlcnR5cGUpKSB7CiAgICAgIC8vIE5vIHByb2JsZW0tLXRoZSBwcm9wZXIgc3VidHlwaW5nIHJlbGF0aW9uIGlzIHNhdGlzZmllZC4KICAgIH0gZWxzZSBpZiAoaXNDb3ZhcmlhbnQgJiYgdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoc3VwZXJ0eXBlLCBzdWJ0eXBlKSkgewogICAgICAvLyBObyBwcm9ibGVtLS10aGUgb3ZlcnJpZGluZyBwYXJhbWV0ZXIgaXMgbWFya2VkICJjb3ZhcmlhbnQiIGFuZCBoYXMKICAgICAgLy8gYSB0eXBlIHdoaWNoIGlzIGEgc3VidHlwZSBvZiB0aGUgcGFyYW1ldGVyIGl0IG92ZXJyaWRlcy4KICAgIH0gZWxzZSBpZiAoc3VidHlwZSBpcyBJbnZhbGlkVHlwZSB8fCBzdXBlcnR5cGUgaXMgSW52YWxpZFR5cGUpIHsKICAgICAgLy8gRG9uJ3QgcmVwb3J0IGEgcHJvYmxlbSBhcyBzb21ldGhpbmcgZWxzZSBpcyB3cm9uZyB0aGF0IGhhcyBhbHJlYWR5CiAgICAgIC8vIGJlZW4gcmVwb3J0ZWQuCiAgICB9IGVsc2UgewogICAgICAvLyBSZXBvcnQgYW4gZXJyb3IuCiAgICAgIFN0cmluZyBkZWNsYXJlZE1lbWJlck5hbWUgPQogICAgICAgICAgJyR7ZGVjbGFyZWRNZW1iZXIuZW5jbG9zaW5nQ2xhc3MubmFtZX0uJHtkZWNsYXJlZE1lbWJlci5uYW1lLm5hbWV9JzsKICAgICAgU3RyaW5nIGludGVyZmFjZU1lbWJlck5hbWUgPQogICAgICAgICAgJyR7aW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiR7aW50ZXJmYWNlTWVtYmVyLm5hbWUubmFtZX0nOwogICAgICBNZXNzYWdlIG1lc3NhZ2U7CiAgICAgIGludCBmaWxlT2Zmc2V0OwogICAgICBpZiAoZGVjbGFyZWRQYXJhbWV0ZXIgPT0gbnVsbCkgewogICAgICAgIG1lc3NhZ2UgPSB0ZW1wbGF0ZU92ZXJyaWRlVHlwZU1pc21hdGNoUmV0dXJuVHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICBkZWNsYXJlZE1lbWJlck5hbWUsCiAgICAgICAgICAgIGRlY2xhcmVkVHlwZSwKICAgICAgICAgICAgaW50ZXJmYWNlVHlwZSwKICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyTmFtZSk7CiAgICAgICAgZmlsZU9mZnNldCA9IGRlY2xhcmVkTWVtYmVyLmZpbGVPZmZzZXQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWVzc2FnZSA9IHRlbXBsYXRlT3ZlcnJpZGVUeXBlTWlzbWF0Y2hQYXJhbWV0ZXIud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgZGVjbGFyZWRQYXJhbWV0ZXIubmFtZSwKICAgICAgICAgICAgZGVjbGFyZWRNZW1iZXJOYW1lLAogICAgICAgICAgICBkZWNsYXJlZFR5cGUsCiAgICAgICAgICAgIGludGVyZmFjZVR5cGUsCiAgICAgICAgICAgIGludGVyZmFjZU1lbWJlck5hbWUpOwogICAgICAgIGZpbGVPZmZzZXQgPSBkZWNsYXJlZFBhcmFtZXRlci5maWxlT2Zmc2V0OwogICAgICB9CiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbShtZXNzYWdlLCBmaWxlT2Zmc2V0LCBub0xlbmd0aCwgZGVjbGFyZWRNZW1iZXIuZmlsZVVyaSwKICAgICAgICAgIGNvbnRleHQ6IFsKICAgICAgICAgICAgICAgIHRlbXBsYXRlT3ZlcnJpZGRlbk1ldGhvZENhdXNlCiAgICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoaW50ZXJmYWNlTWVtYmVyLm5hbWUubmFtZSkKICAgICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKF9nZXRNZW1iZXJVcmkoaW50ZXJmYWNlTWVtYmVyKSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmZpbGVPZmZzZXQsIG5vTGVuZ3RoKQogICAgICAgICAgICAgIF0gKwogICAgICAgICAgICAgIGluaGVyaXRlZENvbnRleHQoaXNJbnRlcmZhY2VDaGVjaywgZGVjbGFyZWRNZW1iZXIpKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgYSBjb3ZhcmlhbnQgcGFyYW1ldGVyIHdhcyBzZWVuIGFuZCBtb3JlIG1ldGhvZHMgdGh1cyBoYXZlCiAgLy8vIHRvIGJlIGNoZWNrZWQuCiAgYm9vbCBjaGVja01ldGhvZE92ZXJyaWRlKFR5cGVzIHR5cGVzLCBQcm9jZWR1cmUgZGVjbGFyZWRNZW1iZXIsCiAgICAgIFByb2NlZHVyZSBpbnRlcmZhY2VNZW1iZXIsIGJvb2wgaXNJbnRlcmZhY2VDaGVjaykgewogICAgYXNzZXJ0KGRlY2xhcmVkTWVtYmVyLmtpbmQgPT0gUHJvY2VkdXJlS2luZC5NZXRob2QpOwogICAgYXNzZXJ0KGludGVyZmFjZU1lbWJlci5raW5kID09IFByb2NlZHVyZUtpbmQuTWV0aG9kKTsKICAgIGJvb2wgc2VlbkNvdmFyaWFudCA9IGZhbHNlOwogICAgRnVuY3Rpb25Ob2RlIGRlY2xhcmVkRnVuY3Rpb24gPSBkZWNsYXJlZE1lbWJlci5mdW5jdGlvbjsKICAgIEZ1bmN0aW9uTm9kZSBpbnRlcmZhY2VGdW5jdGlvbiA9IGludGVyZmFjZU1lbWJlci5mdW5jdGlvbjsKCiAgICBTdWJzdGl0dXRpb24gaW50ZXJmYWNlU3Vic3RpdHV0aW9uID0gX2NvbXB1dGVJbnRlcmZhY2VTdWJzdGl0dXRpb24oCiAgICAgICAgdHlwZXMsCiAgICAgICAgZGVjbGFyZWRNZW1iZXIsCiAgICAgICAgaW50ZXJmYWNlTWVtYmVyLAogICAgICAgIGRlY2xhcmVkRnVuY3Rpb24sCiAgICAgICAgaW50ZXJmYWNlRnVuY3Rpb24sCiAgICAgICAgaXNJbnRlcmZhY2VDaGVjayk7CgogICAgU3Vic3RpdHV0aW9uIGRlY2xhcmVkU3Vic3RpdHV0aW9uID0KICAgICAgICBfY29tcHV0ZURlY2xhcmVkU3Vic3RpdHV0aW9uKHR5cGVzLCBkZWNsYXJlZE1lbWJlcik7CgogICAgX2NoZWNrVHlwZXMoCiAgICAgICAgdHlwZXMsCiAgICAgICAgaW50ZXJmYWNlU3Vic3RpdHV0aW9uLAogICAgICAgIGRlY2xhcmVkU3Vic3RpdHV0aW9uLAogICAgICAgIGRlY2xhcmVkTWVtYmVyLAogICAgICAgIGludGVyZmFjZU1lbWJlciwKICAgICAgICBkZWNsYXJlZEZ1bmN0aW9uLnJldHVyblR5cGUsCiAgICAgICAgaW50ZXJmYWNlRnVuY3Rpb24ucmV0dXJuVHlwZSwKICAgICAgICBmYWxzZSwKICAgICAgICBudWxsLAogICAgICAgIGlzSW50ZXJmYWNlQ2hlY2spOwogICAgaWYgKGRlY2xhcmVkRnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoIDwKICAgICAgICBpbnRlcmZhY2VGdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVPdmVycmlkZUZld2VyUG9zaXRpb25hbEFyZ3VtZW50cy53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiIKICAgICAgICAgICAgICAgICAgIiR7ZGVjbGFyZWRNZW1iZXIubmFtZS5uYW1lfSIsCiAgICAgICAgICAgICAgIiR7aW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiIKICAgICAgICAgICAgICAgICAgIiR7aW50ZXJmYWNlTWVtYmVyLm5hbWUubmFtZX0iKSwKICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLmZpbGVPZmZzZXQsCiAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRkZW5NZXRob2RDYXVzZQogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGludGVyZmFjZU1lbWJlci5uYW1lLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihpbnRlcmZhY2VNZW1iZXIuZmlsZVVyaSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmZpbGVPZmZzZXQsIG5vTGVuZ3RoKQogICAgICAgICAgICAgIF0gKwogICAgICAgICAgICAgIGluaGVyaXRlZENvbnRleHQoaXNJbnRlcmZhY2VDaGVjaywgZGVjbGFyZWRNZW1iZXIpKTsKICAgIH0KICAgIGlmIChpbnRlcmZhY2VGdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50IDwKICAgICAgICBkZWNsYXJlZEZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHsKICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVPdmVycmlkZU1vcmVSZXF1aXJlZEFyZ3VtZW50cy53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiIKICAgICAgICAgICAgICAgICAgIiR7ZGVjbGFyZWRNZW1iZXIubmFtZS5uYW1lfSIsCiAgICAgICAgICAgICAgIiR7aW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiIKICAgICAgICAgICAgICAgICAgIiR7aW50ZXJmYWNlTWVtYmVyLm5hbWUubmFtZX0iKSwKICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLmZpbGVPZmZzZXQsCiAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRkZW5NZXRob2RDYXVzZQogICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGludGVyZmFjZU1lbWJlci5uYW1lLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihpbnRlcmZhY2VNZW1iZXIuZmlsZVVyaSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmZpbGVPZmZzZXQsIG5vTGVuZ3RoKQogICAgICAgICAgICAgIF0gKwogICAgICAgICAgICAgIGluaGVyaXRlZENvbnRleHQoaXNJbnRlcmZhY2VDaGVjaywgZGVjbGFyZWRNZW1iZXIpKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOwogICAgICAgIGkgPCBkZWNsYXJlZEZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCAmJgogICAgICAgICAgICBpIDwgaW50ZXJmYWNlRnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOwogICAgICAgIGkrKykgewogICAgICB2YXIgZGVjbGFyZWRQYXJhbWV0ZXIgPSBkZWNsYXJlZEZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICB2YXIgaW50ZXJmYWNlUGFyYW1ldGVyID0gaW50ZXJmYWNlRnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICAgIF9jaGVja1R5cGVzKAogICAgICAgICAgdHlwZXMsCiAgICAgICAgICBpbnRlcmZhY2VTdWJzdGl0dXRpb24sCiAgICAgICAgICBkZWNsYXJlZFN1YnN0aXR1dGlvbiwKICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLAogICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLAogICAgICAgICAgZGVjbGFyZWRQYXJhbWV0ZXIudHlwZSwKICAgICAgICAgIGludGVyZmFjZUZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldLnR5cGUsCiAgICAgICAgICBkZWNsYXJlZFBhcmFtZXRlci5pc0NvdmFyaWFudCB8fCBpbnRlcmZhY2VQYXJhbWV0ZXIuaXNDb3ZhcmlhbnQsCiAgICAgICAgICBkZWNsYXJlZFBhcmFtZXRlciwKICAgICAgICAgIGlzSW50ZXJmYWNlQ2hlY2spOwogICAgICBpZiAoZGVjbGFyZWRQYXJhbWV0ZXIuaXNDb3ZhcmlhbnQpIHNlZW5Db3ZhcmlhbnQgPSB0cnVlOwogICAgfQogICAgaWYgKGRlY2xhcmVkRnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzLmlzRW1wdHkgJiYKICAgICAgICBpbnRlcmZhY2VGdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICByZXR1cm4gc2VlbkNvdmFyaWFudDsKICAgIH0KICAgIGlmIChkZWNsYXJlZEZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy5sZW5ndGggPAogICAgICAgIGludGVyZmFjZUZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy5sZW5ndGgpIHsKICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVPdmVycmlkZUZld2VyTmFtZWRBcmd1bWVudHMud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgICAiJHtkZWNsYXJlZE1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICIke2RlY2xhcmVkTWVtYmVyLm5hbWUubmFtZX0iLAogICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5uYW1lLm5hbWV9IiksCiAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlT2Zmc2V0LAogICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlVXJpLAogICAgICAgICAgY29udGV4dDogWwogICAgICAgICAgICAgICAgdGVtcGxhdGVPdmVycmlkZGVuTWV0aG9kQ2F1c2UKICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhpbnRlcmZhY2VNZW1iZXIubmFtZS5uYW1lKQogICAgICAgICAgICAgICAgICAgIC53aXRoTG9jYXRpb24oaW50ZXJmYWNlTWVtYmVyLmZpbGVVcmksCiAgICAgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZU1lbWJlci5maWxlT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICAgICAgICBdICsKICAgICAgICAgICAgICBpbmhlcml0ZWRDb250ZXh0KGlzSW50ZXJmYWNlQ2hlY2ssIGRlY2xhcmVkTWVtYmVyKSk7CiAgICB9CiAgICBpbnQgY29tcGFyZU5hbWVkUGFyYW1ldGVycyhWYXJpYWJsZURlY2xhcmF0aW9uIHAwLCBWYXJpYWJsZURlY2xhcmF0aW9uIHAxKSB7CiAgICAgIHJldHVybiBwMC5uYW1lLmNvbXBhcmVUbyhwMS5uYW1lKTsKICAgIH0KCiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IHNvcnRlZEZyb21EZWNsYXJlZCA9CiAgICAgICAgbmV3IExpc3QuZnJvbShkZWNsYXJlZEZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycykKICAgICAgICAgIC4uc29ydChjb21wYXJlTmFtZWRQYXJhbWV0ZXJzKTsKICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gc29ydGVkRnJvbUludGVyZmFjZSA9CiAgICAgICAgbmV3IExpc3QuZnJvbShpbnRlcmZhY2VGdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMpCiAgICAgICAgICAuLnNvcnQoY29tcGFyZU5hbWVkUGFyYW1ldGVycyk7CiAgICBJdGVyYXRvcjxWYXJpYWJsZURlY2xhcmF0aW9uPiBkZWNsYXJlZE5hbWVkUGFyYW1ldGVycyA9CiAgICAgICAgc29ydGVkRnJvbURlY2xhcmVkLml0ZXJhdG9yOwogICAgSXRlcmF0b3I8VmFyaWFibGVEZWNsYXJhdGlvbj4gaW50ZXJmYWNlTmFtZWRQYXJhbWV0ZXJzID0KICAgICAgICBzb3J0ZWRGcm9tSW50ZXJmYWNlLml0ZXJhdG9yOwogICAgb3V0ZXI6CiAgICB3aGlsZSAoZGVjbGFyZWROYW1lZFBhcmFtZXRlcnMubW92ZU5leHQoKSAmJgogICAgICAgIGludGVyZmFjZU5hbWVkUGFyYW1ldGVycy5tb3ZlTmV4dCgpKSB7CiAgICAgIHdoaWxlIChkZWNsYXJlZE5hbWVkUGFyYW1ldGVycy5jdXJyZW50Lm5hbWUgIT0KICAgICAgICAgIGludGVyZmFjZU5hbWVkUGFyYW1ldGVycy5jdXJyZW50Lm5hbWUpIHsKICAgICAgICBpZiAoIWRlY2xhcmVkTmFtZWRQYXJhbWV0ZXJzLm1vdmVOZXh0KCkpIHsKICAgICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRlTWlzbWF0Y2hOYW1lZFBhcmFtZXRlci53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICAiJHtkZWNsYXJlZE1lbWJlci5lbmNsb3NpbmdDbGFzcy5uYW1lfS4iCiAgICAgICAgICAgICAgICAgICAgICAiJHtkZWNsYXJlZE1lbWJlci5uYW1lLm5hbWV9IiwKICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTmFtZWRQYXJhbWV0ZXJzLmN1cnJlbnQubmFtZSwKICAgICAgICAgICAgICAgICAgIiR7aW50ZXJmYWNlTWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiIKICAgICAgICAgICAgICAgICAgICAgICIke2ludGVyZmFjZU1lbWJlci5uYW1lLm5hbWV9IiksCiAgICAgICAgICAgICAgZGVjbGFyZWRNZW1iZXIuZmlsZU9mZnNldCwKICAgICAgICAgICAgICBub0xlbmd0aCwKICAgICAgICAgICAgICBkZWNsYXJlZE1lbWJlci5maWxlVXJpLAogICAgICAgICAgICAgIGNvbnRleHQ6IFsKICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZU92ZXJyaWRkZW5NZXRob2RDYXVzZQogICAgICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhpbnRlcmZhY2VNZW1iZXIubmFtZS5uYW1lKQogICAgICAgICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKGludGVyZmFjZU1lbWJlci5maWxlVXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLmZpbGVPZmZzZXQsIG5vTGVuZ3RoKQogICAgICAgICAgICAgICAgICBdICsKICAgICAgICAgICAgICAgICAgaW5oZXJpdGVkQ29udGV4dChpc0ludGVyZmFjZUNoZWNrLCBkZWNsYXJlZE1lbWJlcikpOwogICAgICAgICAgYnJlYWsgb3V0ZXI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBkZWNsYXJlZFBhcmFtZXRlciA9IGRlY2xhcmVkTmFtZWRQYXJhbWV0ZXJzLmN1cnJlbnQ7CiAgICAgIF9jaGVja1R5cGVzKAogICAgICAgICAgdHlwZXMsCiAgICAgICAgICBpbnRlcmZhY2VTdWJzdGl0dXRpb24sCiAgICAgICAgICBkZWNsYXJlZFN1YnN0aXR1dGlvbiwKICAgICAgICAgIGRlY2xhcmVkTWVtYmVyLAogICAgICAgICAgaW50ZXJmYWNlTWVtYmVyLAogICAgICAgICAgZGVjbGFyZWRQYXJhbWV0ZXIudHlwZSwKICAgICAgICAgIGludGVyZmFjZU5hbWVkUGFyYW1ldGVycy5jdXJyZW50LnR5cGUsCiAgICAgICAgICBkZWNsYXJlZFBhcmFtZXRlci5pc0NvdmFyaWFudCwKICAgICAgICAgIGRlY2xhcmVkUGFyYW1ldGVyLAogICAgICAgICAgaXNJbnRlcmZhY2VDaGVjayk7CiAgICAgIGlmIChkZWNsYXJlZFBhcmFtZXRlci5pc0NvdmFyaWFudCkgc2VlbkNvdmFyaWFudCA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gc2VlbkNvdmFyaWFudDsKICB9CgogIHZvaWQgY2hlY2tHZXR0ZXJPdmVycmlkZShUeXBlcyB0eXBlcywgTWVtYmVyIGRlY2xhcmVkTWVtYmVyLAogICAgICBNZW1iZXIgaW50ZXJmYWNlTWVtYmVyLCBib29sIGlzSW50ZXJmYWNlQ2hlY2spIHsKICAgIFN1YnN0aXR1dGlvbiBpbnRlcmZhY2VTdWJzdGl0dXRpb24gPSBfY29tcHV0ZUludGVyZmFjZVN1YnN0aXR1dGlvbigKICAgICAgICB0eXBlcywgZGVjbGFyZWRNZW1iZXIsIGludGVyZmFjZU1lbWJlciwgbnVsbCwgbnVsbCwgaXNJbnRlcmZhY2VDaGVjayk7CiAgICBTdWJzdGl0dXRpb24gZGVjbGFyZWRTdWJzdGl0dXRpb24gPQogICAgICAgIF9jb21wdXRlRGVjbGFyZWRTdWJzdGl0dXRpb24odHlwZXMsIGRlY2xhcmVkTWVtYmVyKTsKICAgIHZhciBkZWNsYXJlZFR5cGUgPSBkZWNsYXJlZE1lbWJlci5nZXR0ZXJUeXBlOwogICAgdmFyIGludGVyZmFjZVR5cGUgPSBpbnRlcmZhY2VNZW1iZXIuZ2V0dGVyVHlwZTsKICAgIF9jaGVja1R5cGVzKAogICAgICAgIHR5cGVzLAogICAgICAgIGludGVyZmFjZVN1YnN0aXR1dGlvbiwKICAgICAgICBkZWNsYXJlZFN1YnN0aXR1dGlvbiwKICAgICAgICBkZWNsYXJlZE1lbWJlciwKICAgICAgICBpbnRlcmZhY2VNZW1iZXIsCiAgICAgICAgZGVjbGFyZWRUeXBlLAogICAgICAgIGludGVyZmFjZVR5cGUsCiAgICAgICAgZmFsc2UsCiAgICAgICAgbnVsbCwKICAgICAgICBpc0ludGVyZmFjZUNoZWNrKTsKICB9CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgYSBjb3ZhcmlhbnQgcGFyYW1ldGVyIHdhcyBzZWVuIGFuZCBtb3JlIG1ldGhvZHMgdGh1cyBoYXZlCiAgLy8vIHRvIGJlIGNoZWNrZWQuCiAgYm9vbCBjaGVja1NldHRlck92ZXJyaWRlKFR5cGVzIHR5cGVzLCBNZW1iZXIgZGVjbGFyZWRNZW1iZXIsCiAgICAgIE1lbWJlciBpbnRlcmZhY2VNZW1iZXIsIGJvb2wgaXNJbnRlcmZhY2VDaGVjaykgewogICAgU3Vic3RpdHV0aW9uIGludGVyZmFjZVN1YnN0aXR1dGlvbiA9IF9jb21wdXRlSW50ZXJmYWNlU3Vic3RpdHV0aW9uKAogICAgICAgIHR5cGVzLCBkZWNsYXJlZE1lbWJlciwgaW50ZXJmYWNlTWVtYmVyLCBudWxsLCBudWxsLCBpc0ludGVyZmFjZUNoZWNrKTsKICAgIFN1YnN0aXR1dGlvbiBkZWNsYXJlZFN1YnN0aXR1dGlvbiA9CiAgICAgICAgX2NvbXB1dGVEZWNsYXJlZFN1YnN0aXR1dGlvbih0eXBlcywgZGVjbGFyZWRNZW1iZXIpOwogICAgdmFyIGRlY2xhcmVkVHlwZSA9IGRlY2xhcmVkTWVtYmVyLnNldHRlclR5cGU7CiAgICB2YXIgaW50ZXJmYWNlVHlwZSA9IGludGVyZmFjZU1lbWJlci5zZXR0ZXJUeXBlOwogICAgdmFyIGRlY2xhcmVkUGFyYW1ldGVyID0KICAgICAgICBkZWNsYXJlZE1lbWJlci5mdW5jdGlvbj8ucG9zaXRpb25hbFBhcmFtZXRlcnM/LmVsZW1lbnRBdCgwKTsKICAgIGJvb2wgaXNDb3ZhcmlhbnQgPSBkZWNsYXJlZFBhcmFtZXRlcj8uaXNDb3ZhcmlhbnQgPz8gZmFsc2U7CiAgICBpZiAoIWlzQ292YXJpYW50ICYmIGRlY2xhcmVkTWVtYmVyIGlzIEZpZWxkKSB7CiAgICAgIGlzQ292YXJpYW50ID0gZGVjbGFyZWRNZW1iZXIuaXNDb3ZhcmlhbnQ7CiAgICB9CiAgICBpZiAoIWlzQ292YXJpYW50ICYmIGludGVyZmFjZU1lbWJlciBpcyBGaWVsZCkgewogICAgICBpc0NvdmFyaWFudCA9IGludGVyZmFjZU1lbWJlci5pc0NvdmFyaWFudDsKICAgIH0KICAgIF9jaGVja1R5cGVzKAogICAgICAgIHR5cGVzLAogICAgICAgIGludGVyZmFjZVN1YnN0aXR1dGlvbiwKICAgICAgICBkZWNsYXJlZFN1YnN0aXR1dGlvbiwKICAgICAgICBkZWNsYXJlZE1lbWJlciwKICAgICAgICBpbnRlcmZhY2VNZW1iZXIsCiAgICAgICAgZGVjbGFyZWRUeXBlLAogICAgICAgIGludGVyZmFjZVR5cGUsCiAgICAgICAgaXNDb3ZhcmlhbnQsCiAgICAgICAgZGVjbGFyZWRQYXJhbWV0ZXIsCiAgICAgICAgaXNJbnRlcmZhY2VDaGVjaywKICAgICAgICBhc0lmRGVjbGFyZWRQYXJhbWV0ZXI6IHRydWUpOwogICAgcmV0dXJuIGlzQ292YXJpYW50OwogIH0KCiAgLy8gRXh0cmEgY29udGV4dCBvbiBvdmVycmlkZSBtZXNzYWdlcyB3aGVuIHRoZSBvdmVycmlkaW5nIG1lbWJlciBpcyBpbmhlcml0ZWQKICBMaXN0PExvY2F0ZWRNZXNzYWdlPiBpbmhlcml0ZWRDb250ZXh0KAogICAgICBib29sIGlzSW50ZXJmYWNlQ2hlY2ssIE1lbWJlciBkZWNsYXJlZE1lbWJlcikgewogICAgaWYgKGRlY2xhcmVkTWVtYmVyLmVuY2xvc2luZ0NsYXNzID09IGNscykgewogICAgICAvLyBPcmRpbmFyeSBvdmVycmlkZQogICAgICByZXR1cm4gY29uc3QgW107CiAgICB9CiAgICBpZiAoaXNJbnRlcmZhY2VDaGVjaykgewogICAgICAvLyBJbnRlcmZhY2UgY2hlY2sKICAgICAgcmV0dXJuIFsKICAgICAgICB0ZW1wbGF0ZUludGVyZmFjZUNoZWNrQ29udGV4dAogICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhjbHMubmFtZSkKICAgICAgICAgICAgLndpdGhMb2NhdGlvbihjbHMuZmlsZVVyaSwgY2xzLmZpbGVPZmZzZXQsIGNscy5uYW1lLmxlbmd0aCkKICAgICAgXTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChjbHMuaXNBbm9ueW1vdXNNaXhpbikgewogICAgICAgIC8vIEltcGxpY2l0IG1peGluIGFwcGxpY2F0aW9uIGNsYXNzCiAgICAgICAgU3RyaW5nIGJhc2VOYW1lID0gY2xzLnN1cGVyY2xhc3MuZGVtYW5nbGVkTmFtZTsKICAgICAgICBTdHJpbmcgbWl4aW5OYW1lID0gY2xzLm1peGVkSW5DbGFzcy5uYW1lOwogICAgICAgIGludCBjbGFzc05hbWVMZW5ndGggPSBjbHMubmFtZUFzTWl4aW5BcHBsaWNhdGlvblN1YmNsYXNzLmxlbmd0aDsKICAgICAgICByZXR1cm4gWwogICAgICAgICAgdGVtcGxhdGVJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0CiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobWl4aW5OYW1lLCBiYXNlTmFtZSkKICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKGNscy5maWxlVXJpLCBjbHMuZmlsZU9mZnNldCwgY2xhc3NOYW1lTGVuZ3RoKQogICAgICAgIF07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gTmFtZWQgbWl4aW4gYXBwbGljYXRpb24gY2xhc3MKICAgICAgICByZXR1cm4gWwogICAgICAgICAgdGVtcGxhdGVOYW1lZE1peGluT3ZlcnJpZGVDb250ZXh0CiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoY2xzLm5hbWUpCiAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbihjbHMuZmlsZVVyaSwgY2xzLmZpbGVPZmZzZXQsIGNscy5uYW1lLmxlbmd0aCkKICAgICAgICBdOwogICAgICB9CiAgICB9CiAgfQoKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzIHsKICAgIHJldHVybiBpc01peGluQXBwbGljYXRpb24gJiYgIWlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uCiAgICAgICAgPyAiJHtzdXBlcnR5cGUuZnVsbE5hbWVGb3JFcnJvcnN9IHdpdGggJHttaXhlZEluVHlwZS5mdWxsTmFtZUZvckVycm9yc30iCiAgICAgICAgOiBuYW1lOwogIH0KCiAgdm9pZCBjaGVja01peGluRGVjbGFyYXRpb24oKSB7CiAgICBhc3NlcnQoY2xzLmlzTWl4aW5EZWNsYXJhdGlvbik7CiAgICBmb3IgKERlY2xhcmF0aW9uIGNvbnN0cnVjdG9yeSBpbiBjb25zdHJ1Y3RvcnMubG9jYWwudmFsdWVzKSB7CiAgICAgIGlmICghY29uc3RydWN0b3J5LmlzU3ludGhldGljICYmCiAgICAgICAgICAoY29uc3RydWN0b3J5LmlzRmFjdG9yeSB8fCBjb25zdHJ1Y3RvcnkuaXNDb25zdHJ1Y3RvcikpIHsKICAgICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzCiAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhmdWxsTmFtZUZvckVycm9ycyksCiAgICAgICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgICAgdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0NhdXNlCiAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKGZ1bGxOYW1lRm9yRXJyb3JzKQogICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3J5LmZpbGVVcmksIGNvbnN0cnVjdG9yeS5jaGFyT2Zmc2V0LCBub0xlbmd0aCkKICAgICAgICAgICAgXSk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgY2hlY2tNaXhpbkFwcGxpY2F0aW9uKENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSkgewogICAgLy8gQSBtaXhpbiBkZWNsYXJhdGlvbiBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGEgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIGFsbAogICAgLy8gdGhlIGRlY2xhcmF0aW9uJ3Mgc3VwZXJjbGFzcyBjb25zdHJhaW50cy4KICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlID0gY2xzLnN1cGVydHlwZS5hc0ludGVyZmFjZVR5cGU7CiAgICBTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21TdXBlcnR5cGUoY2xzLm1peGVkSW5UeXBlKTsKICAgIGZvciAoU3VwZXJ0eXBlIGNvbnN0cmFpbnQgaW4gY2xzLm1peGVkSW5DbGFzcy5zdXBlcmNsYXNzQ29uc3RyYWludHMoKSkgewogICAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZSA9CiAgICAgICAgICBzdWJzdGl0dXRpb24uc3Vic3RpdHV0ZVN1cGVydHlwZShjb25zdHJhaW50KS5hc0ludGVyZmFjZVR5cGU7CiAgICAgIGlmIChoaWVyYXJjaHkuZ2V0VHlwZUFzSW5zdGFuY2VPZihzdXBlcnR5cGUsIGludGVyZmFjZS5jbGFzc05vZGUpICE9CiAgICAgICAgICBpbnRlcmZhY2UpIHsKICAgICAgICBsaWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICAgIHRlbXBsYXRlTWl4aW5BcHBsaWNhdGlvbkluY29tcGF0aWJsZVN1cGVydHlwZS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgc3VwZXJ0eXBlLCBpbnRlcmZhY2UsIGNscy5taXhlZEluVHlwZS5hc0ludGVyZmFjZVR5cGUpLAogICAgICAgICAgICBjbHMuZmlsZU9mZnNldCwKICAgICAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgICAgIGNscy5maWxlVXJpKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhcHBseVBhdGNoKERlY2xhcmF0aW9uIHBhdGNoKSB7CiAgICBpZiAocGF0Y2ggaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIHBhdGNoLmFjdHVhbE9yaWdpbiA9IHRoaXM7CiAgICAgIC8vIFRPRE8oYWhlKTogQ29tcGxhaW4gaWYgYHBhdGNoLnN1cGVydHlwZWAgaXNuJ3QgbnVsbC4KICAgICAgc2NvcGUubG9jYWwuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIERlY2xhcmF0aW9uIG1lbWJlcikgewogICAgICAgIERlY2xhcmF0aW9uIG1lbWJlclBhdGNoID0gcGF0Y2guc2NvcGUubG9jYWxbbmFtZV07CiAgICAgICAgaWYgKG1lbWJlclBhdGNoICE9IG51bGwpIHsKICAgICAgICAgIG1lbWJlci5hcHBseVBhdGNoKG1lbWJlclBhdGNoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBzY29wZS5zZXR0ZXJzLmZvckVhY2goKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBtZW1iZXIpIHsKICAgICAgICBEZWNsYXJhdGlvbiBtZW1iZXJQYXRjaCA9IHBhdGNoLnNjb3BlLnNldHRlcnNbbmFtZV07CiAgICAgICAgaWYgKG1lbWJlclBhdGNoICE9IG51bGwpIHsKICAgICAgICAgIG1lbWJlci5hcHBseVBhdGNoKG1lbWJlclBhdGNoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBjb25zdHJ1Y3RvcnMubG9jYWwuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIERlY2xhcmF0aW9uIG1lbWJlcikgewogICAgICAgIERlY2xhcmF0aW9uIG1lbWJlclBhdGNoID0gcGF0Y2guY29uc3RydWN0b3JzLmxvY2FsW25hbWVdOwogICAgICAgIGlmIChtZW1iZXJQYXRjaCAhPSBudWxsKSB7CiAgICAgICAgICBtZW1iZXIuYXBwbHlQYXRjaChtZW1iZXJQYXRjaCk7CiAgICAgICAgfQogICAgICB9KTsKCiAgICAgIGludCBvcmlnaW5MZW5ndGggPSB0eXBlVmFyaWFibGVzPy5sZW5ndGggPz8gMDsKICAgICAgaW50IHBhdGNoTGVuZ3RoID0gcGF0Y2gudHlwZVZhcmlhYmxlcz8ubGVuZ3RoID8/IDA7CiAgICAgIGlmIChvcmlnaW5MZW5ndGggIT0gcGF0Y2hMZW5ndGgpIHsKICAgICAgICBwYXRjaC5hZGRQcm9ibGVtKG1lc3NhZ2VQYXRjaENsYXNzVHlwZVZhcmlhYmxlc01pc21hdGNoLAogICAgICAgICAgICBwYXRjaC5jaGFyT2Zmc2V0LCBub0xlbmd0aCwgY29udGV4dDogWwogICAgICAgICAgbWVzc2FnZVBhdGNoQ2xhc3NPcmlnaW4ud2l0aExvY2F0aW9uKGZpbGVVcmksIGNoYXJPZmZzZXQsIG5vTGVuZ3RoKQogICAgICAgIF0pOwogICAgICB9IGVsc2UgaWYgKHR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICAgIGludCBjb3VudCA9IDA7CiAgICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHQgaW4gcGF0Y2gudHlwZVZhcmlhYmxlcykgewogICAgICAgICAgdHlwZVZhcmlhYmxlc1tjb3VudCsrXS5hcHBseVBhdGNoKHQpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2VQYXRjaERlY2xhcmF0aW9uTWlzbWF0Y2gsIHBhdGNoLmNoYXJPZmZzZXQsCiAgICAgICAgICBub0xlbmd0aCwgcGF0Y2guZmlsZVVyaSwgY29udGV4dDogWwogICAgICAgIG1lc3NhZ2VQYXRjaERlY2xhcmF0aW9uT3JpZ2luLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgZmlsZVVyaSwgY2hhck9mZnNldCwgbm9MZW5ndGgpCiAgICAgIF0pOwogICAgfQogIH0KCiAgLy8gQ29tcHV0ZXMgdGhlIGZ1bmN0aW9uIHR5cGUgb2YgYSBnaXZlbiByZWRpcmVjdGlvbiB0YXJnZXQuIFJldHVybnMgW251bGxdIGlmCiAgLy8gdGhlIHR5cGUgb2YgdGhlIHRhcmdldCBjb3VsZCBub3QgYmUgY29tcHV0ZWQuCiAgRnVuY3Rpb25UeXBlIGNvbXB1dGVSZWRpcmVjdGVlVHlwZSgKICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5QnVpbGRlciBmYWN0b3J5LCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7CiAgICBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIgcmVkaXJlY3Rpb25UYXJnZXQgPSBmYWN0b3J5LnJlZGlyZWN0aW9uVGFyZ2V0OwogICAgRnVuY3Rpb25Ob2RlIHRhcmdldDsKICAgIGlmIChyZWRpcmVjdGlvblRhcmdldC50YXJnZXQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAocmVkaXJlY3Rpb25UYXJnZXQudGFyZ2V0IGlzIEZ1bmN0aW9uQnVpbGRlcikgewogICAgICBGdW5jdGlvbkJ1aWxkZXIgdGFyZ2V0QnVpbGRlciA9IHJlZGlyZWN0aW9uVGFyZ2V0LnRhcmdldDsKICAgICAgdGFyZ2V0ID0gdGFyZ2V0QnVpbGRlci5mdW5jdGlvbjsKICAgIH0gZWxzZSBpZiAocmVkaXJlY3Rpb25UYXJnZXQudGFyZ2V0IGlzIERpbGxNZW1iZXJCdWlsZGVyICYmCiAgICAgICAgKHJlZGlyZWN0aW9uVGFyZ2V0LnRhcmdldC5pc0NvbnN0cnVjdG9yIHx8CiAgICAgICAgICAgIHJlZGlyZWN0aW9uVGFyZ2V0LnRhcmdldC5pc0ZhY3RvcnkpKSB7CiAgICAgIERpbGxNZW1iZXJCdWlsZGVyIHRhcmdldEJ1aWxkZXIgPSByZWRpcmVjdGlvblRhcmdldC50YXJnZXQ7CiAgICAgIC8vIEl0IHNlZW1zIHRoYXQgdGhlIFtyZWRpcmVjdGlvblRhcmdldC50YXJnZXRdIGlzIGFuIGluc3RhbmNlIG9mCiAgICAgIC8vIFtEaWxsTWVtYmVyQnVpbGRlcl0gd2hlbmV2ZXIgdGhlIHJlZGlyZWN0ZWUgaXMgYW4gaW1wbGljaXQgY29uc3RydWN0b3IsCiAgICAgIC8vIGUuZy4KICAgICAgLy8KICAgICAgLy8gICBjbGFzcyBBIHsKICAgICAgLy8gICAgIGZhY3RvcnkgQSgpID0gQjsKICAgICAgLy8gICB9CiAgICAgIC8vICAgY2xhc3MgQiBpbXBsZW1lbnRzIEEge30KICAgICAgLy8KICAgICAgdGFyZ2V0ID0gdGFyZ2V0QnVpbGRlci5tZW1iZXIuZnVuY3Rpb247CiAgICB9IGVsc2UgaWYgKHJlZGlyZWN0aW9uVGFyZ2V0LnRhcmdldCBpcyBBbWJpZ3VvdXNCdWlsZGVyKSB7CiAgICAgIC8vIE11bHRpcGxlIGRlZmluaXRpb25zIHdpdGggdGhlIHNhbWUgbmFtZTogQW4gZXJyb3IgaGFzIGFscmVhZHkgYmVlbgogICAgICAvLyBpc3N1ZWQuCiAgICAgIC8vIFRPRE8oaHR0cDovL2RhcnRidWcuY29tLzM1Mjk0KTogVW5mb3J0dW5hdGUgZXJyb3I7IHNlZSBhbHNvCiAgICAgIC8vIGh0dHBzOi8vZGFydC1yZXZpZXcuZ29vZ2xlc291cmNlLmNvbS9jL3Nkay8rLzg1MzkwLy4KICAgICAgcmV0dXJuIG51bGw7CiAgICB9IGVsc2UgewogICAgICB1bmhhbmRsZWQoIiR7cmVkaXJlY3Rpb25UYXJnZXQudGFyZ2V0fSIsICJjb21wdXRlUmVkaXJlY3RlZVR5cGUiLAogICAgICAgICAgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9CgogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgZ2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keShmYWN0b3J5LnRhcmdldCkudHlwZUFyZ3VtZW50czsKICAgIEZ1bmN0aW9uVHlwZSB0YXJnZXRGdW5jdGlvblR5cGUgPSB0YXJnZXQuZnVuY3Rpb25UeXBlOwogICAgaWYgKHR5cGVBcmd1bWVudHMgIT0gbnVsbCAmJgogICAgICAgIHRhcmdldEZ1bmN0aW9uVHlwZS50eXBlUGFyYW1ldGVycy5sZW5ndGggIT0gdHlwZUFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50TWlzbWF0Y2gKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyh0YXJnZXRGdW5jdGlvblR5cGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoKSwKICAgICAgICAgIHJlZGlyZWN0aW9uVGFyZ2V0LmNoYXJPZmZzZXQsCiAgICAgICAgICBub0xlbmd0aCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIC8vIENvbXB1dGUgdGhlIHN1YnN0aXR1dGlvbiBvZiB0aGUgdGFyZ2V0IGNsYXNzIHR5cGUgcGFyYW1ldGVycyBpZgogICAgLy8gW3JlZGlyZWN0aW9uVGFyZ2V0XSBoYXMgYW55IHR5cGUgYXJndW1lbnRzLgogICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbjsKICAgIGJvb2wgaGFzUHJvYmxlbSA9IGZhbHNlOwogICAgaWYgKHR5cGVBcmd1bWVudHMgIT0gbnVsbCAmJiB0eXBlQXJndW1lbnRzLmxlbmd0aCA+IDApIHsKICAgICAgc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21QYWlycygKICAgICAgICAgIHRhcmdldEZ1bmN0aW9uVHlwZS50eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cyk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGFyZ2V0RnVuY3Rpb25UeXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyID0gdGFyZ2V0RnVuY3Rpb25UeXBlLnR5cGVQYXJhbWV0ZXJzW2ldOwogICAgICAgIERhcnRUeXBlIHR5cGVQYXJhbWV0ZXJCb3VuZCA9CiAgICAgICAgICAgIHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZSh0eXBlUGFyYW1ldGVyLmJvdW5kKTsKICAgICAgICBEYXJ0VHlwZSB0eXBlQXJndW1lbnQgPSB0eXBlQXJndW1lbnRzW2ldOwogICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIFt0eXBlQXJndW1lbnRdIHJlc3BlY3RzIHRoZSBib3VuZHMgb2YgW3R5cGVQYXJhbWV0ZXJdLgogICAgICAgIGlmICghdHlwZUVudmlyb25tZW50LmlzU3VidHlwZU9mKHR5cGVBcmd1bWVudCwgdHlwZVBhcmFtZXRlckJvdW5kKSkgewogICAgICAgICAgYWRkUHJvYmxlbSgKICAgICAgICAgICAgICB0ZW1wbGF0ZVJlZGlyZWN0aW5nRmFjdG9yeUluY29tcGF0aWJsZVR5cGVBcmd1bWVudC53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICAgICB0eXBlQXJndW1lbnQsIHR5cGVQYXJhbWV0ZXJCb3VuZCksCiAgICAgICAgICAgICAgcmVkaXJlY3Rpb25UYXJnZXQuY2hhck9mZnNldCwKICAgICAgICAgICAgICBub0xlbmd0aCk7CiAgICAgICAgICBoYXNQcm9ibGVtID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodHlwZUFyZ3VtZW50cyA9PSBudWxsICYmCiAgICAgICAgdGFyZ2V0RnVuY3Rpb25UeXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHsKICAgICAgLy8gVE9ETyhoaWxsZXJzdHJvbSk6IEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byBwZXJmb3JtIHR5cGUgaW5mZXJlbmNlIG9uCiAgICAgIC8vIHRoZSByZWRpcmVjdGVlIHRvIG9idGFpbiBhY3R1YWwgdHlwZSBhcmd1bWVudHMgd2hpY2ggd291bGQgYWxsb3cgdGhlCiAgICAgIC8vIGZvbGxvd2luZyBwcm9ncmFtIHRvIHR5cGUgY2hlY2s6CiAgICAgIC8vCiAgICAgIC8vICAgIGNsYXNzIEE8VD4gewogICAgICAvLyAgICAgICBmYWN0b3J5IEEoKSA9IEI7CiAgICAgIC8vICAgIH0KICAgICAgLy8gICAgY2xhc3MgQjxUPiBpbXBsZW1lbnRzIEE8VD4gewogICAgICAvLyAgICAgICBCKCk7CiAgICAgIC8vICAgIH0KICAgICAgLy8KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLy8gU3Vic3RpdHV0ZSBpZiBuZWNlc3NhcnkuCiAgICB0YXJnZXRGdW5jdGlvblR5cGUgPSBzdWJzdGl0dXRpb24gPT0gbnVsbAogICAgICAgID8gdGFyZ2V0RnVuY3Rpb25UeXBlCiAgICAgICAgOiAoc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHRhcmdldEZ1bmN0aW9uVHlwZS53aXRob3V0VHlwZVBhcmFtZXRlcnMpCiAgICAgICAgICAgIGFzIEZ1bmN0aW9uVHlwZSk7CgogICAgcmV0dXJuIGhhc1Byb2JsZW0gPyBudWxsIDogdGFyZ2V0RnVuY3Rpb25UeXBlOwogIH0KCiAgU3RyaW5nIGNvbXB1dGVSZWRpcmVjdGVlTmFtZShDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIgcmVkaXJlY3Rpb25UYXJnZXQpIHsKICAgIFN0cmluZyB0YXJnZXROYW1lID0gcmVkaXJlY3Rpb25UYXJnZXQuZnVsbE5hbWVGb3JFcnJvcnM7CiAgICBpZiAodGFyZ2V0TmFtZSA9PSAiIikgewogICAgICByZXR1cm4gcmVkaXJlY3Rpb25UYXJnZXQudGFyZ2V0LnBhcmVudC5mdWxsTmFtZUZvckVycm9yczsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0YXJnZXROYW1lOwogICAgfQogIH0KCiAgdm9pZCBjaGVja1JlZGlyZWN0aW5nRmFjdG9yeSgKICAgICAgUmVkaXJlY3RpbmdGYWN0b3J5QnVpbGRlciBmYWN0b3J5LCBUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7CiAgICAvLyBUaGUgZmFjdG9yeSB0eXBlIGNhbm5vdCBjb250YWluIGFueSB0eXBlIHBhcmFtZXRlcnMgb3RoZXIgdGhhbiB0aG9zZSBvZgogICAgLy8gaXRzIGVuY2xvc2luZyBjbGFzcywgYmVjYXVzZSBjb25zdHJ1Y3RvcnMgY2Fubm90IHNwZWNpZnkgdHlwZSBwYXJhbWV0ZXJzCiAgICAvLyBvZiB0aGVpciBvd24uCiAgICBGdW5jdGlvblR5cGUgZmFjdG9yeVR5cGUgPQogICAgICAgIGZhY3RvcnkucHJvY2VkdXJlLmZ1bmN0aW9uLmZ1bmN0aW9uVHlwZS53aXRob3V0VHlwZVBhcmFtZXRlcnM7CiAgICBGdW5jdGlvblR5cGUgcmVkaXJlY3RlZVR5cGUgPQogICAgICAgIGNvbXB1dGVSZWRpcmVjdGVlVHlwZShmYWN0b3J5LCB0eXBlRW52aXJvbm1lbnQpOwoKICAgIC8vIFRPRE8oaGlsbGVyc3Ryb20pOiBJdCB3b3VsZCBiZSBwcmVmZXJhYmxlIHRvIGtub3cgd2hldGhlciBhIGZhaWx1cmUKICAgIC8vIGhhcHBlbmVkIGR1cmluZyBbX2NvbXB1dGVSZWRpcmVjdGVlVHlwZV0uCiAgICBpZiAocmVkaXJlY3RlZVR5cGUgPT0gbnVsbCkgcmV0dXJuOwoKICAgIC8vIENoZWNrIHdoZXRoZXIgW3JlZGlyZWN0ZWVUeXBlXSA8OiBbZmFjdG9yeVR5cGVdLgogICAgaWYgKCF0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2YocmVkaXJlY3RlZVR5cGUsIGZhY3RvcnlUeXBlKSkgewogICAgICBhZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVJbmNvbXBhdGlibGVSZWRpcmVjdGVlRnVuY3Rpb25UeXBlLndpdGhBcmd1bWVudHMoCiAgICAgICAgICAgICAgcmVkaXJlY3RlZVR5cGUsIGZhY3RvcnlUeXBlKSwKICAgICAgICAgIGZhY3RvcnkucmVkaXJlY3Rpb25UYXJnZXQuY2hhck9mZnNldCwKICAgICAgICAgIG5vTGVuZ3RoKTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tSZWRpcmVjdGluZ0ZhY3RvcmllcyhUeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50KSB7CiAgICBNYXA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPiBjb25zdHJ1Y3RvcnMgPSB0aGlzLmNvbnN0cnVjdG9ycy5sb2NhbDsKICAgIEl0ZXJhYmxlPFN0cmluZz4gbmFtZXMgPSBjb25zdHJ1Y3RvcnMua2V5czsKICAgIGZvciAoU3RyaW5nIG5hbWUgaW4gbmFtZXMpIHsKICAgICAgRGVjbGFyYXRpb24gY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvcnNbbmFtZV07CiAgICAgIGRvIHsKICAgICAgICBpZiAoY29uc3RydWN0b3IgaXMgUmVkaXJlY3RpbmdGYWN0b3J5QnVpbGRlcikgewogICAgICAgICAgY2hlY2tSZWRpcmVjdGluZ0ZhY3RvcnkoY29uc3RydWN0b3IsIHR5cGVFbnZpcm9ubWVudCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0cnVjdG9yID0gY29uc3RydWN0b3IubmV4dDsKICAgICAgfSB3aGlsZSAoY29uc3RydWN0b3IgIT0gbnVsbCk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyBhIG1hcCB3aGljaCBtYXBzIHRoZSB0eXBlIHZhcmlhYmxlcyBvZiBbc3VwZXJjbGFzc10gdG8gdGhlaXIKICAvLy8gcmVzcGVjdGl2ZSB2YWx1ZXMgYXMgZGVmaW5lZCBieSB0aGUgc3VwZXJjbGFzcyBjbGF1c2Ugb2YgdGhpcyBjbGFzcyAoYW5kCiAgLy8vIGl0cyBzdXBlcmNsYXNzZXMpLgogIC8vLwogIC8vLyBJdCdzIGFzc3VtZWQgdGhhdCBbc3VwZXJjbGFzc10gaXMgYSBzdXBlcmNsYXNzIG9mIHRoaXMgY2xhc3MuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCBnaXZlbjoKICAvLy8KICAvLy8gICAgIGNsYXNzIEJveDxUPiB7fQogIC8vLyAgICAgY2xhc3MgQmVhdEJveCBleHRlbmRzIEJveDxCZWF0PiB7fQogIC8vLyAgICAgY2xhc3MgQmVhdCB7fQogIC8vLwogIC8vLyBXZSBoYXZlOgogIC8vLwogIC8vLyAgICAgW1tCZWF0Qm94XV0uZ2V0U3Vic3RpdHV0aW9uTWFwKFtbQm94XV0pIC0+IHtbW0JveDo6VF1dOiBCZWF0XV19LgogIC8vLwogIC8vLyBJdCdzIGFuIGVycm9yIGlmIFtzdXBlcmNsYXNzXSBpc24ndCBhIHN1cGVyY2xhc3MuCiAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBnZXRTdWJzdGl0dXRpb25NYXAoQ2xhc3Mgc3VwZXJjbGFzcykgewogICAgU3VwZXJ0eXBlIHN1cGVydHlwZSA9IHRhcmdldC5zdXBlcnR5cGU7CiAgICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IHN1YnN0aXR1dGlvbk1hcCA9IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50czsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdmFyaWFibGVzOwogICAgQ2xhc3MgY2xhc3NOb2RlOwoKICAgIHdoaWxlIChjbGFzc05vZGUgIT0gc3VwZXJjbGFzcykgewogICAgICBjbGFzc05vZGUgPSBzdXBlcnR5cGUuY2xhc3NOb2RlOwogICAgICBhcmd1bWVudHMgPSBzdXBlcnR5cGUudHlwZUFyZ3VtZW50czsKICAgICAgdmFyaWFibGVzID0gY2xhc3NOb2RlLnR5cGVQYXJhbWV0ZXJzOwogICAgICBzdXBlcnR5cGUgPSBjbGFzc05vZGUuc3VwZXJ0eXBlOwogICAgICBpZiAodmFyaWFibGVzLmlzTm90RW1wdHkpIHsKICAgICAgICBNYXA8VHlwZVBhcmFtZXRlciwgRGFydFR5cGU+IGRpcmVjdFN1YnN0aXR1dGlvbk1hcCA9CiAgICAgICAgICAgIDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhcmlhYmxlcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgRGFydFR5cGUgYXJndW1lbnQgPQogICAgICAgICAgICAgIGkgPCBhcmd1bWVudHMubGVuZ3RoID8gYXJndW1lbnRzW2ldIDogY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25NYXAgIT0gbnVsbCkgewogICAgICAgICAgICAvLyBUT0RPKGFoZSk6IEludmVzdGlnYXRlIGlmIHJlcXVpcmluZyB0aGUgY2FsbGVyIHRvIHVzZQogICAgICAgICAgICAvLyBgc3Vic3RpdHV0ZURlZXBgIGZyb20gYHBhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0YCBpbnN0ZWFkCiAgICAgICAgICAgIC8vIG9mIGBzdWJzdGl0dXRlYCBpcyBmYXN0ZXIuIElmIHNvLCB3ZSBjYW4gc2ltcGx5IHRoaXMgY29kZS4KICAgICAgICAgICAgYXJndW1lbnQgPSBzdWJzdGl0dXRlKGFyZ3VtZW50LCBzdWJzdGl0dXRpb25NYXApOwogICAgICAgICAgfQogICAgICAgICAgZGlyZWN0U3Vic3RpdHV0aW9uTWFwW3ZhcmlhYmxlc1tpXV0gPSBhcmd1bWVudDsKICAgICAgICB9CiAgICAgICAgc3Vic3RpdHV0aW9uTWFwID0gZGlyZWN0U3Vic3RpdHV0aW9uTWFwOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHN1YnN0aXR1dGlvbk1hcDsKICB9CgogIC8vLyBMb29rcyB1cCB0aGUgbWVtYmVyIGJ5IFtuYW1lXSBvbiB0aGUgY2xhc3MgYnVpbHQgYnkgdGhpcyBjbGFzcyBidWlsZGVyLgogIC8vLwogIC8vLyBJZiBbaXNTZXR0ZXJdIGlzIGBmYWxzZWAsIG9ubHkgZmllbGRzLCBtZXRob2RzLCBhbmQgZ2V0dGVycyB3aXRoIHRoYXQgbmFtZQogIC8vLyB3aWxsIGJlIGZvdW5kLiAgSWYgW2lzU2V0dGVyXSBpcyBgdHJ1ZWAsIG9ubHkgbm9uLWZpbmFsIGZpZWxkcyBhbmQgc2V0dGVycwogIC8vLyB3aWxsIGJlIGZvdW5kLgogIC8vLwogIC8vLyBJZiBbaXNTdXBlcl0gaXMgYGZhbHNlYCwgdGhlIG1lbWJlciBpcyBmb3VuZCBhbW9uZyB0aGUgaW50ZXJmYWNlIG1lbWJlcnMKICAvLy8gdGhlIGNsYXNzIGJ1aWx0IGJ5IHRoaXMgY2xhc3MgYnVpbGRlci4gSWYgW2lzU3VwZXJdIGlzIGB0cnVlYCwgdGhlIG1lbWJlcgogIC8vLyBpcyBmb3VuZCBhbW9uZyB0aGUgY2xhc3MgbWVtYmVycyBvZiB0aGUgc3VwZXJjbGFzcy4KICAvLy8KICAvLy8gSWYgdGhpcyBjbGFzcyBidWlsZGVyIGlzIGEgcGF0Y2gsIGludGVyZmFjZSBtZW1iZXJzIGRlY2xhcmVkIGluIHRoaXMKICAvLy8gcGF0Y2ggYXJlIHNlYXJjaGVkIGJlZm9yZSBzZWFyY2hpbmcgdGhlIGludGVyZmFjZSBtZW1iZXJzIGluIHRoZSBvcmlnaW4KICAvLy8gY2xhc3MuCiAgTWVtYmVyIGxvb2t1cEluc3RhbmNlTWVtYmVyKENsYXNzSGllcmFyY2h5IGhpZXJhcmNoeSwgTmFtZSBuYW1lLAogICAgICB7Ym9vbCBpc1NldHRlcjogZmFsc2UsIGJvb2wgaXNTdXBlcjogZmFsc2V9KSB7CiAgICBDbGFzcyBpbnN0YW5jZUNsYXNzID0gY2xzOwogICAgaWYgKGlzUGF0Y2gpIHsKICAgICAgYXNzZXJ0KGlkZW50aWNhbChpbnN0YW5jZUNsYXNzLCBvcmlnaW4uY2xzKSwKICAgICAgICAgICJGb3VuZCAke29yaWdpbi5jbHN9IGV4cGVjdGVkICRpbnN0YW5jZUNsYXNzIik7CiAgICAgIGlmIChpc1N1cGVyKSB7CiAgICAgICAgLy8gVGhlIHN1cGVyIGNsYXNzIGlzIG9ubHkgY29ycmVjdGx5IGZvdW5kIHRocm91Z2ggdGhlIG9yaWdpbiBjbGFzcy4KICAgICAgICBpbnN0YW5jZUNsYXNzID0gb3JpZ2luLmNsczsKICAgICAgfSBlbHNlIHsKICAgICAgICBNZW1iZXIgbWVtYmVyID0KICAgICAgICAgICAgaGllcmFyY2h5LmdldEludGVyZmFjZU1lbWJlcihpbnN0YW5jZUNsYXNzLCBuYW1lLCBzZXR0ZXI6IGlzU2V0dGVyKTsKICAgICAgICBpZiAobWVtYmVyPy5wYXJlbnQgPT0gaW5zdGFuY2VDbGFzcykgewogICAgICAgICAgLy8gT25seSBpZiB0aGUgbWVtYmVyIGlzIGZvdW5kIGluIHRoZSBwYXRjaCBjYW4gd2UgdXNlIGl0LgogICAgICAgICAgcmV0dXJuIG1lbWJlcjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBuZWVkIHRvIGtlZXAgc2VhcmNoaW5nIGluIHRoZSBvcmlnaW4gY2xhc3MuCiAgICAgICAgICBpbnN0YW5jZUNsYXNzID0gb3JpZ2luLmNsczsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBpZiAoaXNTdXBlcikgewogICAgICBpbnN0YW5jZUNsYXNzID0gaW5zdGFuY2VDbGFzcy5zdXBlcmNsYXNzOwogICAgICBpZiAoaW5zdGFuY2VDbGFzcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIH0KICAgIE1lbWJlciB0YXJnZXQgPSBpc1N1cGVyCiAgICAgICAgPyBoaWVyYXJjaHkuZ2V0RGlzcGF0Y2hUYXJnZXQoaW5zdGFuY2VDbGFzcywgbmFtZSwgc2V0dGVyOiBpc1NldHRlcikKICAgICAgICA6IGhpZXJhcmNoeS5nZXRJbnRlcmZhY2VNZW1iZXIoaW5zdGFuY2VDbGFzcywgbmFtZSwgc2V0dGVyOiBpc1NldHRlcik7CiAgICBpZiAoaXNTdXBlciAmJiB0YXJnZXQgPT0gbnVsbCkgewogICAgICBpZiAoY2xzLmlzTWl4aW5EZWNsYXJhdGlvbiB8fAogICAgICAgICAgKGxpYnJhcnkubG9hZGVyLnRhcmdldC5iYWNrZW5kVGFyZ2V0LmVuYWJsZVN1cGVyTWl4aW5zICYmCiAgICAgICAgICAgICAgdGhpcy5pc0Fic3RyYWN0KSkgewogICAgICAgIHRhcmdldCA9CiAgICAgICAgICAgIGhpZXJhcmNoeS5nZXRJbnRlcmZhY2VNZW1iZXIoaW5zdGFuY2VDbGFzcywgbmFtZSwgc2V0dGVyOiBpc1NldHRlcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0YXJnZXQ7CiAgfQoKICAvLy8gTG9va3MgdXAgdGhlIGNvbnN0cnVjdG9yIGJ5IFtuYW1lXSBvbiB0aGUgdGhlIGNsYXNzIGJ1aWx0IGJ5IHRoaXMgY2xhc3MKICAvLy8gYnVpbGRlci4KICAvLy8KICAvLy8gSWYgW2lzU3VwZXJdIGlzIGB0cnVlYCwgY29uc3RydWN0b3JzIGluIHRoZSBzdXBlcmNsYXNzIGFyZSBzZWFyY2hlZC4KICBDb25zdHJ1Y3RvciBsb29rdXBDb25zdHJ1Y3RvcihOYW1lIG5hbWUsIHtib29sIGlzU3VwZXI6IGZhbHNlfSkgewogICAgQ2xhc3MgaW5zdGFuY2VDbGFzcyA9IGNsczsKICAgIGlmIChpc1N1cGVyKSB7CiAgICAgIGluc3RhbmNlQ2xhc3MgPSBpbnN0YW5jZUNsYXNzLnN1cGVyY2xhc3M7CiAgICB9CiAgICBpZiAoaW5zdGFuY2VDbGFzcyAhPSBudWxsKSB7CiAgICAgIGZvciAoQ29uc3RydWN0b3IgY29uc3RydWN0b3IgaW4gaW5zdGFuY2VDbGFzcy5jb25zdHJ1Y3RvcnMpIHsKICAgICAgICBpZiAoY29uc3RydWN0b3IubmFtZSA9PSBuYW1lKSByZXR1cm4gY29uc3RydWN0b3I7CiAgICAgIH0KICAgIH0KCiAgICAvLy8gUGVyZm9ybXMgYSBzaW1pbGFyIGxvb2t1cCB0byBbbG9va3VwQ29uc3RydWN0b3JdLCBidXQgdXNpbmcgYSBzbG93ZXIKICAgIC8vLyBpbXBsZW1lbnRhdGlvbi4KICAgIENvbnN0cnVjdG9yIGxvb2t1cENvbnN0cnVjdG9yV2l0aFBhdGNoZXMoTmFtZSBuYW1lLCBib29sIGlzU3VwZXIpIHsKICAgICAgQ2xhc3NCdWlsZGVyIGJ1aWxkZXIgPSB0aGlzLm9yaWdpbjsKCiAgICAgIENsYXNzQnVpbGRlciBnZXRTdXBlcmNsYXNzKENsYXNzQnVpbGRlciBidWlsZGVyKSB7CiAgICAgICAgLy8gVGhpcyB3YXkgb2YgY29tcHV0aW5nIHRoZSBzdXBlcmNsYXNzIGlzIHNsb3dlciB0aGFuIHVzaW5nIHRoZSBrZXJuZWwKICAgICAgICAvLyBvYmplY3RzIGRpcmVjdGx5LgogICAgICAgIE9iamVjdCBzdXBlcnR5cGUgPSBidWlsZGVyLnN1cGVydHlwZTsKICAgICAgICBpZiAoc3VwZXJ0eXBlIGlzIE5hbWVkVHlwZUJ1aWxkZXIpIHsKICAgICAgICAgIE9iamVjdCBidWlsZGVyID0gc3VwZXJ0eXBlLmRlY2xhcmF0aW9uOwogICAgICAgICAgaWYgKGJ1aWxkZXIgaXMgQ2xhc3NCdWlsZGVyKSByZXR1cm4gYnVpbGRlcjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KCiAgICAgIGlmIChpc1N1cGVyKSB7CiAgICAgICAgYnVpbGRlciA9IGdldFN1cGVyY2xhc3MoYnVpbGRlcik/Lm9yaWdpbjsKICAgICAgfQogICAgICBpZiAoYnVpbGRlciAhPSBudWxsKSB7CiAgICAgICAgQ2xhc3MgdGFyZ2V0ID0gYnVpbGRlci50YXJnZXQ7CiAgICAgICAgZm9yIChDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciBpbiB0YXJnZXQuY29uc3RydWN0b3JzKSB7CiAgICAgICAgICBpZiAoY29uc3RydWN0b3IubmFtZSA9PSBuYW1lKSByZXR1cm4gY29uc3RydWN0b3I7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHJldHVybiBsb29rdXBDb25zdHJ1Y3RvcldpdGhQYXRjaGVzKG5hbWUsIGlzU3VwZXIpOwogIH0KfQoKY2xhc3MgQ29uc3RydWN0b3JSZWRpcmVjdGlvbiB7CiAgU3RyaW5nIHRhcmdldDsKICBib29sIGN5Y2xlUmVwb3J0ZWQ7CgogIENvbnN0cnVjdG9yUmVkaXJl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BhMEAU4PBktEHxMwBiFEOggGAU0YSCoBOVAdLi0yNwoVCAEVMggdJz88CggTBgE4BAIBHxEWAT8CATZwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9jbGFzc19idWlsZGVyLmRhcnRPc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvY29uc3RydWN0b3JfcmVmZXJlbmNlX2J1aWxkZXIuZGFydIj7Ly8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuY29uc3RydWN0b3JfcmVmZXJlbmNlX2J1aWxkZXI7CgppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnIHNob3cgbm9MZW5ndGgsIHRlbXBsYXRlQ29uc3RydWN0b3JOb3RGb3VuZDsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBEZWNsYXJhdGlvbiwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBQcmVmaXhCdWlsZGVyLAogICAgICAgIFF1YWxpZmllZE5hbWUsCiAgICAgICAgU2NvcGUsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgZmxhdHRlbk5hbWU7CgpjbGFzcyBDb25zdHJ1Y3RvclJlZmVyZW5jZUJ1aWxkZXIgewogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwoKICBmaW5hbCBVcmkgZmlsZVVyaTsKCiAgZmluYWwgT2JqZWN0IG5hbWU7CgogIGZpbmFsIExpc3Q8VHlwZUJ1aWxkZXI+IHR5cGVBcmd1bWVudHM7CgogIC8vLyBUaGlzIGlzIHRoZSBuYW1lIG9mIGEgbmFtZWQgY29uc3RydWN0b3IuIEFzIGBiYXJgIGluIGBuZXcgRm9vPFQ+LmJhcigpYC4KICBmaW5hbCBTdHJpbmcgc3VmZml4OwoKICBEZWNsYXJhdGlvbiB0YXJnZXQ7CgogIENvbnN0cnVjdG9yUmVmZXJlbmNlQnVpbGRlcih0aGlzLm5hbWUsIHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5zdWZmaXgsCiAgICAgIERlY2xhcmF0aW9uIHBhcmVudCwgdGhpcy5jaGFyT2Zmc2V0KQogICAgICA6IGZpbGVVcmkgPSBwYXJlbnQuZmlsZVVyaTsKCiAgU3RyaW5nIGdldCBmdWxsTmFtZUZvckVycm9ycyB7CiAgICByZXR1cm4gIiR7ZmxhdHRlbk5hbWUobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSl9IgogICAgICAgICIke3N1ZmZpeCA9PSBudWxsID8gJycgOiAnLiRzdWZmaXgnfSI7CiAgfQoKICB2b2lkIHJlc29sdmVJbihTY29wZSBzY29wZSwgTGlicmFyeUJ1aWxkZXIgYWNjZXNzaW5nTGlicmFyeSkgewogICAgZmluYWwgbmFtZSA9IHRoaXMubmFtZTsKICAgIERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uOwogICAgaWYgKG5hbWUgaXMgUXVhbGlmaWVkTmFtZSkgewogICAgICBTdHJpbmcgcHJlZml4ID0gbmFtZS5xdWFsaWZpZXI7CiAgICAgIFN0cmluZyBtaWRkbGUgPSBuYW1lLm5hbWU7CiAgICAgIGRlY2xhcmF0aW9uID0gc2NvcGUubG9va3VwKHByZWZpeCwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICAgIGlmIChkZWNsYXJhdGlvbiBpcyBQcmVmaXhCdWlsZGVyKSB7CiAgICAgICAgUHJlZml4QnVpbGRlciBwcmVmaXggPSBkZWNsYXJhdGlvbjsKICAgICAgICBkZWNsYXJhdGlvbiA9IHByZWZpeC5sb29rdXAobWlkZGxlLCBuYW1lLmNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgICB9IGVsc2UgaWYgKGRlY2xhcmF0aW9uIGlzIENsYXNzQnVpbGRlcikgewogICAgICAgIENsYXNzQnVpbGRlciBjbHMgPSBkZWNsYXJhdGlvbjsKICAgICAgICBkZWNsYXJhdGlvbiA9IGNscy5maW5kQ29uc3RydWN0b3JPckZhY3RvcnkoCiAgICAgICAgICAgIG1pZGRsZSwgbmFtZS5jaGFyT2Zmc2V0LCBmaWxlVXJpLCBhY2Nlc3NpbmdMaWJyYXJ5KTsKICAgICAgICBpZiAoc3VmZml4ID09IG51bGwpIHsKICAgICAgICAgIHRhcmdldCA9IGRlY2xhcmF0aW9uOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZGVjbGFyYXRpb24gPSBzY29wZS5sb29rdXAobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9CiAgICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIHRhcmdldCA9IGRlY2xhcmF0aW9uLmZpbmRDb25zdHJ1Y3Rvck9yRmFjdG9yeSgKICAgICAgICAgIHN1ZmZpeCA/PyAiIiwgY2hhck9mZnNldCwgZmlsZVVyaSwgYWNjZXNzaW5nTGlicmFyeSk7CiAgICB9CiAgICBpZiAodGFyZ2V0ID09IG51bGwpIHsKICAgICAgYWNjZXNzaW5nTGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVDb25zdHJ1Y3Rvck5vdEZvdW5kLndpdGhBcmd1bWVudHMoZnVsbE5hbWVGb3JFcnJvcnMpLAogICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgIG5vTGVuZ3RoLAogICAgICAgICAgZmlsZVVyaSk7CiAgICB9CiAgfQp9Ck8ATk48AS0BRgEWCRYVGBcXDxUVASQYARUBFQEpAU8XARYBSisiASE3LwQBQRwdISYhPyosRzAoNEEeIBIKCA09Bic1QAYaI0gWFBQGBAIBRnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2NvbnN0cnVjdG9yX3JlZmVyZW5jZV9idWlsZGVyLmRhcnQ9c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvZGVjbGFyYXRpb24uZGFydIgHLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZGVjbGFyYXRpb247CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5zdXBwb3J0ZWQ7CgphYnN0cmFjdCBjbGFzcyBEZWNsYXJhdGlvbiB7CiAgLy8vIFVzZWQgd2hlbiBtdWx0aXBsZSB0aGluZ3Mgd2l0aCB0aGUgc2FtZSBuYW1lIGFyZSBkZWNsYXJlZCB3aXRoaW4gdGhlIHNhbWUKICAvLy8gcGFyZW50LiBPbmx5IHVzZWQgZm9yIHRvcC1sZXZlbCBhbmQgY2xhc3MtbWVtYmVyIGRlY2xhcmF0aW9ucywgbm90IGZvcgogIC8vLyBibG9jayBzY29wZXMuCiAgRGVjbGFyYXRpb24gbmV4dDsKCiAgRGVjbGFyYXRpb24oKTsKCiAgRGVjbGFyYXRpb24gZ2V0IHBhcmVudDsKCiAgVXJpIGdldCBmaWxlVXJpOwoKICBpbnQgZ2V0IGNoYXJPZmZzZXQ7CgogIGdldCB0YXJnZXQgPT4gdW5zdXBwb3J0ZWQoIiR7cnVudGltZVR5cGV9LnRhcmdldCIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwoKICBEZWNsYXJhdGlvbiBnZXQgb3JpZ2luID0+IHRoaXM7CgogIFN0cmluZyBnZXQgZnVsbE5hbWVGb3JFcnJvcnM7CgogIGJvb2wgZ2V0IGhhc1Byb2JsZW0gPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzQ29uc3QgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzQ29uc3RydWN0b3IgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzRmFjdG9yeSA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNGaWVsZCA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNGaW5hbCA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNHZXR0ZXIgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzSW5zdGFuY2VNZW1iZXIgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzTG9jYWwgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzUGF0Y2ggPT4gdGhpcyAhPSBvcmlnaW47CgogIGJvb2wgZ2V0IGlzUmVndWxhck1ldGhvZCA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNTZXR0ZXIgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzU3RhdGljID0+IGZhbHNlOwoKICBib29sIGdldCBpc1N5bnRoZXRpYyA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNUeXBlRGVjbGFyYXRpb24gPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzVHlwZVZhcmlhYmxlID0+IGZhbHNlOwoKICBib29sIGdldCBpc01peGluQXBwbGljYXRpb24gPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzTmFtZWRNaXhpbkFwcGxpY2F0aW9uID0+IGZhbHNlOwoKICBib29sIGdldCBpc0Fub255bW91c01peGluQXBwbGljYXRpb24gewogICAgcmV0dXJuIGlzTWl4aW5BcHBsaWNhdGlvbiAmJiAhaXNOYW1lZE1peGluQXBwbGljYXRpb247CiAgfQoKICAvLy8gQXBwbGllcyBbcGF0Y2hdIHRvIHRoaXMgZGVjbGFyYXRpb24uCiAgdm9pZCBhcHBseVBhdGNoKERlY2xhcmF0aW9uIHBhdGNoKSB7CiAgICB1bnN1cHBvcnRlZCgiJHtydW50aW1lVHlwZX0uYXBwbHlQYXRjaCIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBwYXRjaGVzIHRoYXQgd2FzIGZpbmlzaGVkLgogIGludCBmaW5pc2hQYXRjaCgpIHsKICAgIGlmICghaXNQYXRjaCkgcmV0dXJuIDA7CiAgICB1bnN1cHBvcnRlZCgiJHtydW50aW1lVHlwZX0uZmluaXNoUGF0Y2giLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIHJldHVybiAwOwogIH0KCiAgLy8vIFJlc29sdmUgY29uc3RydWN0b3JzIChsb29rdXAgbmFtZXMgaW4gc2NvcGUpIHJlY29yZGVkIGluIHRoaXMgYnVpbGRlciBhbmQKICAvLy8gcmV0dXJuIHRoZSBudW1iZXIgb2YgY29uc3RydWN0b3JzIHJlc29sdmVkLgogIGludCByZXNvbHZlQ29uc3RydWN0b3JzKGNvdmFyaWFudCBEZWNsYXJhdGlvbiBwYXJlbnQpID0+IDA7Cn0KWABOTjwBGwEsAR1QTRQUAREBGgETARYBSwEiASABIAEdASMBHwEdAR0BHgEmAR0BJgElAR4BHgEhASABJwEkASgBLQEpOwQBKydDBAE3FhxEDgQBUDI+AgE0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvZGVjbGFyYXRpb24uZGFydEZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9keW5hbWljX3R5cGVfYnVpbGRlci5kYXJ0gnAvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5keW5hbWljX3R5cGVfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgRGFydFR5cGU7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcgc2hvdyBMaWJyYXJ5QnVpbGRlciwgQnVpbHRpblR5cGVCdWlsZGVyOwoKY2xhc3MgRHluYW1pY1R5cGVCdWlsZGVyIGV4dGVuZHMgQnVpbHRpblR5cGVCdWlsZGVyIHsKICBEeW5hbWljVHlwZUJ1aWxkZXIoCiAgICAgIERhcnRUeXBlIHR5cGUsIExpYnJhcnlCdWlsZGVyIGNvbXBpbGF0aW9uVW5pdCwgaW50IGNoYXJPZmZzZXQpCiAgICAgIDogc3VwZXIoImR5bmFtaWMiLCB0eXBlLCBjb21waWxhdGlvblVuaXQsIGNoYXJPZmZzZXQpOwoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiRHluYW1pY1R5cGVCdWlsZGVyIjsKfQoTAE5OPAEkATABPwE2FkU9ATACAT1wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9keW5hbWljX3R5cGVfYnVpbGRlci5kYXJ0PnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL2VudW1fYnVpbGRlci5kYXJ0sUovLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5lbnVtX2J1aWxkZXI7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcgc2hvdyBDbGFzc0J1aWxkZXIsIE1ldGFkYXRhQnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQXJndW1lbnRzLAogICAgICAgIENsYXNzLAogICAgICAgIENvbnN0cnVjdG9yLAogICAgICAgIENvbnN0cnVjdG9ySW52b2NhdGlvbiwKICAgICAgICBEaXJlY3RQcm9wZXJ0eUdldCwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEZpZWxkLAogICAgICAgIEZpZWxkSW5pdGlhbGl6ZXIsCiAgICAgICAgSW50TGl0ZXJhbCwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIExpc3RMaXRlcmFsLAogICAgICAgIFByb2NlZHVyZUtpbmQsCiAgICAgICAgUmV0dXJuU3RhdGVtZW50LAogICAgICAgIFN0YXRpY0dldCwKICAgICAgICBTdHJpbmdMaXRlcmFsLAogICAgICAgIFN1cGVySW5pdGlhbGl6ZXIsCiAgICAgICAgVGhpc0V4cHJlc3Npb24sCiAgICAgICAgVmFyaWFibGVHZXQ7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnCiAgICBzaG93CiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgbWVzc2FnZU5vVW5uYW1lZENvbnN0cnVjdG9ySW5PYmplY3QsCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb24sCiAgICAgICAgdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZSwKICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlLAogICAgICAgIHRlbXBsYXRlRW51bUNvbnN0YW50U2FtZU5hbWVBc0VuY2xvc2luZzsKCmltcG9ydCAnLi4vbW9kaWZpZXIuZGFydCcKICAgIHNob3cKICAgICAgICBjb25zdE1hc2ssCiAgICAgICAgZmluYWxNYXNrLAogICAgICAgIGhhc0luaXRpYWxpemVyTWFzaywKICAgICAgICBpbml0aWFsaXppbmdGb3JtYWxNYXNrLAogICAgICAgIHN0YXRpY01hc2s7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfY2xhc3NfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUNsYXNzQnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgRGVjbGFyYXRpb24sCiAgICAgICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciwKICAgICAgICBDbGFzc0J1aWxkZXIsCiAgICAgICAgQ29uc3RydWN0b3JCdWlsZGVyLAogICAgICAgIEZpZWxkQnVpbGRlciwKICAgICAgICBOYW1lZFR5cGVCdWlsZGVyLAogICAgICAgIFByb2NlZHVyZUJ1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTWVtYmVyQnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXIsCiAgICAgICAgU2NvcGU7CgppbXBvcnQgJy4uL2tlcm5lbC9tZXRhZGF0YV9jb2xsZWN0b3IuZGFydCc7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgU291cmNlTGlicmFyeUJ1aWxkZXI7CgpjbGFzcyBFbnVtQnVpbGRlciBleHRlbmRzIFNvdXJjZUNsYXNzQnVpbGRlciB7CiAgZmluYWwgTGlzdDxFbnVtQ29uc3RhbnRJbmZvPiBlbnVtQ29uc3RhbnRJbmZvczsKCiAgZmluYWwgTmFtZWRUeXBlQnVpbGRlciBpbnRUeXBlOwoKICBmaW5hbCBOYW1lZFR5cGVCdWlsZGVyIHN0cmluZ1R5cGU7CgogIGZpbmFsIE5hbWVkVHlwZUJ1aWxkZXIgb2JqZWN0VHlwZTsKCiAgZmluYWwgTmFtZWRUeXBlQnVpbGRlciBsaXN0VHlwZTsKCiAgRW51bUJ1aWxkZXIuaW50ZXJuYWwoCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIFNjb3BlIHNjb3BlLAogICAgICBTY29wZSBjb25zdHJ1Y3RvcnMsCiAgICAgIENsYXNzIGNscywKICAgICAgdGhpcy5lbnVtQ29uc3RhbnRJbmZvcywKICAgICAgdGhpcy5pbnRUeXBlLAogICAgICB0aGlzLmxpc3RUeXBlLAogICAgICB0aGlzLm9iamVjdFR5cGUsCiAgICAgIHRoaXMuc3RyaW5nVHlwZSwKICAgICAgTGlicmFyeUJ1aWxkZXIgcGFyZW50LAogICAgICBpbnQgc3RhcnRDaGFyT2Zmc2V0LAogICAgICBpbnQgY2hhck9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQpCiAgICAgIDogc3VwZXIobWV0YWRhdGEsIDAsIG5hbWUsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIHNjb3BlLCBjb25zdHJ1Y3RvcnMsCiAgICAgICAgICAgIHBhcmVudCwgbnVsbCwgc3RhcnRDaGFyT2Zmc2V0LCBjaGFyT2Zmc2V0LCBjaGFyRW5kT2Zmc2V0LAogICAgICAgICAgICBjbHM6IGNscyk7CgogIGZhY3RvcnkgRW51bUJ1aWxkZXIoCiAgICAgIE1ldGFkYXRhQ29sbGVjdG9yIG1ldGFkYXRhQ29sbGVjdG9yLAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIFN0cmluZyBuYW1lLAogICAgICBMaXN0PEVudW1Db25zdGFudEluZm8+IGVudW1Db25zdGFudEluZm9zLAogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBwYXJlbnQsCiAgICAgIGludCBzdGFydENoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBpbnQgY2hhckVuZE9mZnNldCkgewogICAgYXNzZXJ0KGVudW1Db25zdGFudEluZm9zID09IG51bGwgfHwgZW51bUNvbnN0YW50SW5mb3MuaXNOb3RFbXB0eSk7CiAgICAvLyBUT0RPKGFoZSk6IFRoZXNlIHR5cGVzIHNob3VsZG4ndCBiZSBsb29rZWQgdXAgaW4gc2NvcGUsIHRoZXkgY29tZQogICAgLy8gZGlyZWN0bHkgZnJvbSBkYXJ0OmNvcmUuCiAgICBUeXBlQnVpbGRlciBpbnRUeXBlID0gbmV3IE5hbWVkVHlwZUJ1aWxkZXIoImludCIsIG51bGwpOwogICAgVHlwZUJ1aWxkZXIgc3RyaW5nVHlwZSA9IG5ldyBOYW1lZFR5cGVCdWlsZGVyKCJTdHJpbmciLCBudWxsKTsKICAgIE5hbWVkVHlwZUJ1aWxkZXIgb2JqZWN0VHlwZSA9IG5ldyBOYW1lZFR5cGVCdWlsZGVyKCJPYmplY3QiLCBudWxsKTsKICAgIENsYXNzIGNscyA9IG5ldyBDbGFzcyhuYW1lOiBuYW1lKTsKICAgIE1hcDxTdHJpbmcsIE1lbWJlckJ1aWxkZXI+IG1lbWJlcnMgPSA8U3RyaW5nLCBNZW1iZXJCdWlsZGVyPnt9OwogICAgTWFwPFN0cmluZywgTWVtYmVyQnVpbGRlcj4gY29uc3RydWN0b3JzID0gPFN0cmluZywgTWVtYmVyQnVpbGRlcj57fTsKICAgIE5hbWVkVHlwZUJ1aWxkZXIgc2VsZlR5cGUgPSBuZXcgTmFtZWRUeXBlQnVpbGRlcihuYW1lLCBudWxsKTsKICAgIFR5cGVCdWlsZGVyIGxpc3RUeXBlID0KICAgICAgICBuZXcgTmFtZWRUeXBlQnVpbGRlcigiTGlzdCIsIDxUeXBlQnVpbGRlcj5bc2VsZlR5cGVdKTsKCiAgICAvLy8gbWV0YWRhdGEgY2xhc3MgRSB7CiAgICAvLy8gICBmaW5hbCBpbnQgaW5kZXg7CiAgICAvLy8gICBmaW5hbCBTdHJpbmcgX25hbWU7CiAgICAvLy8gICBjb25zdCBFKHRoaXMuaW5kZXgsIHRoaXMuX25hbWUpOwogICAgLy8vICAgc3RhdGljIGNvbnN0IEUgaWQwID0gY29uc3QgRSgwLCAnRS5pZDAnKTsKICAgIC8vLyAgIC4uLgogICAgLy8vICAgc3RhdGljIGNvbnN0IEUgaWRuLTEgPSBjb25zdCBFKG4gLSAxLCAnRS5pZG4tMScpOwogICAgLy8vICAgc3RhdGljIGNvbnN0IExpc3Q8RT4gdmFsdWVzID0gY29uc3QgPEU+W2lkMCwgLi4uLCBpZG4tMV07CiAgICAvLy8gICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfbmFtZTsKICAgIC8vLyB9CgogICAgbWVtYmVyc1siaW5kZXgiXSA9IG5ldyBGaWVsZEJ1aWxkZXIobnVsbCwgaW50VHlwZSwgImluZGV4IiwKICAgICAgICBmaW5hbE1hc2sgfCBoYXNJbml0aWFsaXplck1hc2ssIHBhcmVudCwgY2hhck9mZnNldCwgY2hhck9mZnNldCk7CiAgICBtZW1iZXJzWyJfbmFtZSJdID0gbmV3IEZpZWxkQnVpbGRlcihudWxsLCBzdHJpbmdUeXBlLCAiX25hbWUiLAogICAgICAgIGZpbmFsTWFzayB8IGhhc0luaXRpYWxpemVyTWFzaywgcGFyZW50LCBjaGFyT2Zmc2V0LCBjaGFyT2Zmc2V0KTsKICAgIENvbnN0cnVjdG9yQnVpbGRlciBjb25zdHJ1Y3RvckJ1aWxkZXIgPSBuZXcgQ29uc3RydWN0b3JCdWlsZGVyKAogICAgICAgIG51bGwsCiAgICAgICAgY29uc3RNYXNrLAogICAgICAgIG51bGwsCiAgICAgICAgIiIsCiAgICAgICAgbnVsbCwKICAgICAgICA8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj5bCiAgICAgICAgICBuZXcgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcihudWxsLCBpbml0aWFsaXppbmdGb3JtYWxNYXNrLCBpbnRUeXBlLAogICAgICAgICAgICAgICJpbmRleCIsIHBhcmVudCwgY2hhck9mZnNldCksCiAgICAgICAgICBuZXcgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcihudWxsLCBpbml0aWFsaXppbmdGb3JtYWxNYXNrLCBzdHJpbmdUeXBlLAogICAgICAgICAgICAgICJfbmFtZSIsIHBhcmVudCwgY2hhck9mZnNldCkKICAgICAgICBdLAogICAgICAgIHBhcmVudCwKICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgY2hhck9mZnNldCwKICAgICAgICBjaGFyRW5kT2Zmc2V0KTsKICAgIGNvbnN0cnVjdG9yc1siIl0gPSBjb25zdHJ1Y3RvckJ1aWxkZXI7CiAgICBGaWVsZEJ1aWxkZXIgdmFsdWVzQnVpbGRlciA9IG5ldyBGaWVsZEJ1aWxkZXIoCiAgICAgICAgbnVsbCwKICAgICAgICBsaXN0VHlwZSwKICAgICAgICAidmFsdWVzIiwKICAgICAgICBjb25zdE1hc2sgfCBzdGF0aWNNYXNrIHwgaGFzSW5pdGlhbGl6ZXJNYXNrLAogICAgICAgIHBhcmVudCwKICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgIGNoYXJPZmZzZXQpOwogICAgbWVtYmVyc1sidmFsdWVzIl0gPSB2YWx1ZXNCdWlsZGVyOwogICAgUHJvY2VkdXJlQnVpbGRlciB0b1N0cmluZ0J1aWxkZXIgPSBuZXcgUHJvY2VkdXJlQnVpbGRlcigKICAgICAgICBudWxsLAogICAgICAgIDAsCiAgICAgICAgc3RyaW5nVHlwZSwKICAgICAgICAidG9TdHJpbmciLAogICAgICAgIG51bGwsCiAgICAgICAgbnVsbCwKICAgICAgICBQcm9jZWR1cmVLaW5kLk1ldGhvZCwKICAgICAgICBwYXJlbnQsCiAgICAgICAgY2hhck9mZnNldCwKICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgY2hhckVuZE9mZnNldCk7CiAgICBtZW1iZXJzWyJ0b1N0cmluZyJdID0gdG9TdHJpbmdCdWlsZGVyOwogICAgU3RyaW5nIGNsYXNzTmFtZSA9IG5hbWU7CiAgICBpZiAoZW51bUNvbnN0YW50SW5mb3MgIT0gbnVsbCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGVudW1Db25zdGFudEluZm9zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgRW51bUNvbnN0YW50SW5mbyBlbnVtQ29uc3RhbnRJbmZvID0gZW51bUNvbnN0YW50SW5mb3NbaV07CiAgICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhID0gZW51bUNvbnN0YW50SW5mby5tZXRhZGF0YTsKICAgICAgICBTdHJpbmcgbmFtZSA9IGVudW1Db25zdGFudEluZm8ubmFtZTsKICAgICAgICBTdHJpbmcgZG9jdW1lbnRhdGlvbkNvbW1lbnQgPSBlbnVtQ29uc3RhbnRJbmZvLmRvY3VtZW50YXRpb25Db21tZW50OwogICAgICAgIE1lbWJlckJ1aWxkZXIgZXhpc3RpbmcgPSBtZW1iZXJzW25hbWVdOwogICAgICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgICAgICAvLyBUaGUgZXhpc3RpbmcgZGVjbGFyYXRpb24gaXMgc3ludGhldGljIGlmIGl0IGhhcyB0aGUgc2FtZQogICAgICAgICAgLy8gY2hhck9mZnNldCBhcyB0aGUgZW5jbG9zaW5nIGVudW0uCiAgICAgICAgICBib29sIGlzU3ludGhldGljID0gZXhpc3RpbmcuY2hhck9mZnNldCA9PSBjaGFyT2Zmc2V0OwogICAgICAgICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dCA9IGlzU3ludGhldGljCiAgICAgICAgICAgICAgPyA8TG9jYXRlZE1lc3NhZ2U+WwogICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlCiAgICAgICAgICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhuYW1lKQogICAgICAgICAgICAgICAgICAgICAgLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQuZmlsZVVyaSwgY2hhck9mZnNldCwgY2xhc3NOYW1lLmxlbmd0aCkKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICA6IDxMb2NhdGVkTWVzc2FnZT5bCiAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uQ2F1c2UKICAgICAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUpCiAgICAgICAgICAgICAgICAgICAgICAud2l0aExvY2F0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5maWxlVXJpLCBleGlzdGluZy5jaGFyT2Zmc2V0LCBuYW1lLmxlbmd0aCkKICAgICAgICAgICAgICAgIF07CiAgICAgICAgICBwYXJlbnQuYWRkUHJvYmxlbSh0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvbi53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICAgIGVudW1Db25zdGFudEluZm8uY2hhck9mZnNldCwgbmFtZS5sZW5ndGgsIHBhcmVudC5maWxlVXJpLAogICAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQpOwogICAgICAgICAgZW51bUNvbnN0YW50SW5mb3NbaV0gPSBudWxsOwogICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSBjbGFzc05hbWUpIHsKICAgICAgICAgIHBhcmVudC5hZGRQcm9ibGVtKAogICAgICAgICAgICAgIHRlbXBsYXRlRW51bUNvbnN0YW50U2FtZU5hbWVBc0VuY2xvc2luZy53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICAgIGVudW1Db25zdGFudEluZm8uY2hhck9mZnNldCwKICAgICAgICAgICAgICBuYW1lLmxlbmd0aCwKICAgICAgICAgICAgICBwYXJlbnQuZmlsZVVyaSk7CiAgICAgICAgfQogICAgICAgIEZpZWxkQnVpbGRlciBmaWVsZEJ1aWxkZXIgPSBuZXcgRmllbGRCdWlsZGVyKAogICAgICAgICAgICBtZXRhZGF0YSwKICAgICAgICAgICAgc2VsZlR5cGUsCiAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgIGNvbnN0TWFzayB8IHN0YXRpY01hc2sgfCBoYXNJbml0aWFsaXplck1hc2ssCiAgICAgICAgICAgIHBhcmVudCwKICAgICAgICAgICAgZW51bUNvbnN0YW50SW5mby5jaGFyT2Zmc2V0LAogICAgICAgICAgICBlbnVtQ29uc3RhbnRJbmZvLmNoYXJPZmZzZXQpOwogICAgICAgIG1ldGFkYXRhQ29sbGVjdG9yPy5zZXREb2N1bWVudGF0aW9uQ29tbWVudCgKICAgICAgICAgICAgZmllbGRCdWlsZGVyLnRhcmdldCwgZG9jdW1lbnRhdGlvbkNvbW1lbnQpOwogICAgICAgIG1lbWJlcnNbbmFtZV0gPSBmaWVsZEJ1aWxkZXIuLm5leHQgPSBleGlzdGluZzsKICAgICAgfQogICAgfQogICAgZmluYWwgaW50IHN0YXJ0Q2hhck9mZnNldENvbXB1dGVkID0KICAgICAgICBtZXRhZGF0YSA9PSBudWxsID8gc3RhcnRDaGFyT2Zmc2V0IDogbWV0YWRhdGEuZmlyc3QuY2hhck9mZnNldDsKICAgIEVudW1CdWlsZGVyIGVudW1CdWlsZGVyID0gbmV3IEVudW1CdWlsZGVyLmludGVybmFsKAogICAgICAgIG1ldGFkYXRhLAogICAgICAgIG5hbWUsCiAgICAgICAgbmV3IFNjb3BlKG1lbWJlcnMsIG51bGwsIHBhcmVudC5zY29wZSwgImVudW0gJG5hbWUiLAogICAgICAgICAgICBpc01vZGlmaWFibGU6IGZhbHNlKSwKICAgICAgICBuZXcgU2NvcGUoY29uc3RydWN0b3JzLCBudWxsLCBudWxsLCBuYW1lLCBpc01vZGlmaWFibGU6IGZhbHNlKSwKICAgICAgICBjbHMsCiAgICAgICAgZW51bUNvbnN0YW50SW5mb3MsCiAgICAgICAgaW50VHlwZSwKICAgICAgICBsaXN0VHlwZSwKICAgICAgICBvYmplY3RUeXBlLAogICAgICAgIHN0cmluZ1R5cGUsCiAgICAgICAgcGFyZW50LAogICAgICAgIHN0YXJ0Q2hhck9mZnNldENvbXB1dGVkLAogICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgY2hhckVuZE9mZnNldCk7CiAgICB2b2lkIHNldFBhcmVudChTdHJpbmcgbmFtZSwgTWVtYmVyQnVpbGRlciBidWlsZGVyKSB7CiAgICAgIGRvIHsKICAgICAgICBidWlsZGVyLnBhcmVudCA9IGVudW1CdWlsZGVyOwogICAgICAgIGJ1aWxkZXIgPSBidWlsZGVyLm5leHQ7CiAgICAgIH0gd2hpbGUgKGJ1aWxkZXIgIT0gbnVsbCk7CiAgICB9CgogICAgbWVtYmVycy5mb3JFYWNoKHNldFBhcmVudCk7CiAgICBjb25zdHJ1Y3RvcnMuZm9yRWFjaChzZXRQYXJlbnQpOwogICAgc2VsZlR5cGUuYmluZChlbnVtQnVpbGRlcik7CiAgICByZXR1cm4gZW51bUJ1aWxkZXI7CiAgfQoKICBUeXBlQnVpbGRlciBnZXQgbWl4ZWRJblR5cGUgPT4gbnVsbDsKCiAgSW50ZXJmYWNlVHlwZSBidWlsZFR5cGUoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxUeXBlQnVpbGRlcj4gYXJndW1lbnRzKSB7CiAgICByZXR1cm4gY2xzLnJhd1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzcyBidWlsZChTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5QnVpbGRlciwgTGlicmFyeUJ1aWxkZXIgY29yZUxpYnJhcnkpIHsKICAgIGNscy5pc0VudW0gPSB0cnVlOwogICAgaW50VHlwZS5yZXNvbHZlSW4oY29yZUxpYnJhcnkuc2NvcGUsIGNoYXJPZmZzZXQsIGZpbGVVcmksIGxpYnJhcnlCdWlsZGVyKTsKICAgIHN0cmluZ1R5cGUucmVzb2x2ZUluKAogICAgICAgIGNvcmVMaWJyYXJ5LnNjb3BlLCBjaGFyT2Zmc2V0LCBmaWxlVXJpLCBsaWJyYXJ5QnVpbGRlcik7CiAgICBvYmplY3RUeXBlLnJlc29sdmVJbigKICAgICAgICBjb3JlTGlicmFyeS5zY29wZSwgY2hhck9mZnNldCwgZmlsZVVyaSwgbGlicmFyeUJ1aWxkZXIpOwogICAgbGlzdFR5cGUucmVzb2x2ZUluKGNvcmVMaWJyYXJ5LnNjb3BlLCBjaGFyT2Zmc2V0LCBmaWxlVXJpLCBsaWJyYXJ5QnVpbGRlcik7CgogICAgRmllbGRCdWlsZGVyIGluZGV4RmllbGRCdWlsZGVyID0gZmlyc3RNZW1iZXJOYW1lZCgiaW5kZXgiKTsKICAgIEZpZWxkIGluZGV4RmllbGQgPSBpbmRleEZpZWxkQnVpbGRlci5idWlsZChsaWJyYXJ5QnVpbGRlcik7CiAgICBGaWVsZEJ1aWxkZXIgbmFtZUZpZWxkQnVpbGRlciA9IGZpcnN0TWVtYmVyTmFtZWQoIl9uYW1lIik7CiAgICBGaWVsZCBuYW1lRmllbGQgPSBuYW1lRmllbGRCdWlsZGVyLmJ1aWxkKGxpYnJhcnlCdWlsZGVyKTsKICAgIFByb2NlZHVyZUJ1aWxkZXIgdG9TdHJpbmdCdWlsZGVyID0gZmlyc3RNZW1iZXJOYW1lZCgidG9TdHJpbmciKTsKICAgIHRvU3RyaW5nQnVpbGRlci5ib2R5ID0gbmV3IFJldHVyblN0YXRlbWVudCgKICAgICAgICBuZXcgRGlyZWN0UHJvcGVydHlHZXQobmV3IFRoaXNFeHByZXNzaW9uKCksIG5hbWVGaWVsZCkpOwogICAgTGlzdDxFeHByZXNzaW9uPiB2YWx1ZXMgPSA8RXhwcmVzc2lvbj5bXTsKICAgIGlmIChlbnVtQ29uc3RhbnRJbmZvcyAhPSBudWxsKSB7CiAgICAgIGZvciAoRW51bUNvbnN0YW50SW5mbyBlbnVtQ29uc3RhbnRJbmZvIGluIGVudW1Db25zdGFudEluZm9zKSB7CiAgICAgICAgaWYgKGVudW1Db25zdGFudEluZm8gIT0gbnVsbCkgewogICAgICAgICAgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24gPSBmaXJzdE1lbWJlck5hbWVkKGVudW1Db25zdGFudEluZm8ubmFtZSk7CiAgICAgICAgICBpZiAoZGVjbGFyYXRpb24uaXNGaWVsZCkgewogICAgICAgICAgICBGaWVsZEJ1aWxkZXIgZmllbGQgPSBkZWNsYXJhdGlvbjsKICAgICAgICAgICAgdmFsdWVzLmFkZChuZXcgU3RhdGljR2V0KGZpZWxkLmJ1aWxkKGxpYnJhcnlCdWlsZGVyKSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgRmllbGRCdWlsZGVyIHZhbHVlc0J1aWxkZXIgPSBmaXJzdE1lbWJlck5hbWVkKCJ2YWx1ZXMiKTsKICAgIHZhbHVlc0J1aWxkZXIuYnVpbGQobGlicmFyeUJ1aWxkZXIpOwogICAgdmFsdWVzQnVpbGRlci5pbml0aWFsaXplciA9CiAgICAgICAgbmV3IExpc3RMaXRlcmFsKHZhbHVlcywgdHlwZUFyZ3VtZW50OiBjbHMucmF3VHlwZSwgaXNDb25zdDogdHJ1ZSk7CiAgICBDb25zdHJ1Y3RvckJ1aWxkZXIgY29uc3RydWN0b3JCdWlsZGVyID0gY29uc3RydWN0b3JTY29wZUJ1aWxkZXJbIiJdOwogICAgQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBjb25zdHJ1Y3RvckJ1aWxkZXIuYnVpbGQobGlicmFyeUJ1aWxkZXIpOwogICAgY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLmluc2VydCgKICAgICAgICAwLAogICAgICAgIG5ldyBGaWVsZEluaXRpYWxpemVyKGluZGV4RmllbGQsCiAgICAgICAgICAgIG5ldyBWYXJpYWJsZUdldChjb25zdHJ1Y3Rvci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyc1swXSkpCiAgICAgICAgICAuLnBhcmVudCA9IGNvbnN0cnVjdG9yKTsKICAgIGNvbnN0cnVjdG9yLmluaXRpYWxpemVycy5pbnNlcnQoCiAgICAgICAgMSwKICAgICAgICBuZXcgRmllbGRJbml0aWFsaXplcihuYW1lRmllbGQsCiAgICAgICAgICAgIG5ldyBWYXJpYWJsZUdldChjb25zdHJ1Y3Rvci5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyc1sxXSkpCiAgICAgICAgICAuLnBhcmVudCA9IGNvbnN0cnVjdG9yKTsKICAgIENsYXNzQnVpbGRlciBvYmplY3RDbGFzcyA9IG9iamVjdFR5cGUuZGVjbGFyYXRpb247CiAgICBNZW1iZXJCdWlsZGVyIHN1cGVyQ29uc3RydWN0b3IgPSBvYmplY3RDbGFzcy5maW5kQ29uc3RydWN0b3JPckZhY3RvcnkoCiAgICAgICAgIiIsIGNoYXJPZmZzZXQsIGZpbGVVcmksIGxpYnJhcnlCdWlsZGVyKTsKICAgIGlmIChzdXBlckNvbnN0cnVjdG9yID09IG51bGwgfHwgIXN1cGVyQ29uc3RydWN0b3IuaXNDb25zdHJ1Y3RvcikgewogICAgICAvLyBUT0RPKGFoZSk6IElkZWFsbHksIHdlIHdvdWxkIGFsc28gd2FudCB0byBjaGVjayB0aGF0IFtPYmplY3RdJ3MKICAgICAgLy8gdW5uYW1lZCBjb25zdHJ1Y3RvciByZXF1aXJlcyBubyBhcmd1bWVudHMuIEJ1dCB0aGF0IGluZm9ybWF0aW9uIGlzbid0CiAgICAgIC8vIGFsd2F5cyBhdmFpbGFibGUgYXQgdGhpcyBwb2ludCwgYW5kIGl0J3Mgbm90IHJlYWxseSBhIHNpdHVhdGlvbiB0aGF0CiAgICAgIC8vIGNhbiBoYXBwZW4gdW5sZXNzIHlvdSBzdGFydCBtb2RpZnlpbmcgdGhlIFNESyBzb3VyY2VzLgogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZU5vVW5uYW1lZENvbnN0cnVjdG9ySW5PYmplY3QsCiAgICAgICAgICBvYmplY3RDbGFzcy5jaGFyT2Zmc2V0LCBvYmplY3RDbGFzcy5uYW1lLmxlbmd0aCwgb2JqZWN0Q2xhc3MuZmlsZVVyaSk7CiAgICB9IGVsc2UgewogICAgICBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMuYWRkKAogICAgICAgICAgbmV3IFN1cGVySW5pdGlhbGl6ZXIoc3VwZXJDb25zdHJ1Y3Rvci50YXJnZXQsIG5ldyBBcmd1bWVudHMuZW1wdHkoKSkKICAgICAgICAgICAgLi5wYXJlbnQgPSBjb25zdHJ1Y3Rvcik7CiAgICB9CiAgICBpbnQgaW5kZXggPSAwOwogICAgaWYgKGVudW1Db25zdGFudEluZm9zICE9IG51bGwpIHsKICAgICAgZm9yIChFbnVtQ29uc3RhbnRJbmZvIGVudW1Db25zdGFudEluZm8gaW4gZW51bUNvbnN0YW50SW5mb3MpIHsKICAgICAgICBpZiAoZW51bUNvbnN0YW50SW5mbyAhPSBudWxsKSB7CiAgICAgICAgICBTdHJpbmcgY29uc3RhbnQgPSBlbnVtQ29uc3RhbnRJbmZvLm5hbWU7CiAgICAgICAgICBEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiA9IGZpcnN0TWVtYmVyTmFtZWQoY29uc3RhbnQpOwogICAgICAgICAgRmllbGRCdWlsZGVyIGZpZWxkOwogICAgICAgICAgaWYgKGRlY2xhcmF0aW9uLmlzRmllbGQpIHsKICAgICAgICAgICAgZmllbGQgPSBkZWNsYXJhdGlvbjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgQXJndW1lbnRzIGFyZ3VtZW50cyA9IG5ldyBBcmd1bWVudHMoPEV4cHJlc3Npb24+WwogICAgICAgICAgICBuZXcgSW50TGl0ZXJhbChpbmRleCsrKSwKICAgICAgICAgICAgbmV3IFN0cmluZ0xpdGVyYWwoIiRuYW1lLiRjb25zdGFudCIpCiAgICAgICAgICBdKTsKICAgICAgICAgIGZpZWxkLmluaXRpYWxpemVyID0KICAgICAgICAgICAgICBuZXcgQ29uc3RydWN0b3JJbnZvY2F0aW9uKGNvbnN0cnVjdG9yLCBhcmd1bWVudHMsIGlzQ29uc3Q6IHRydWUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHN1cGVyLmJ1aWxkKGxpYnJhcnlCdWlsZGVyLCBjb3JlTGlicmFyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEZWNsYXJhdGlvbiBmaW5kQ29uc3RydWN0b3JPckZhY3RvcnkoCiAgICAgIFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCwgVXJpIHVyaSwgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgcmV0dXJuIG51bGw7CiAgfQp9CgpjbGFzcyBFbnVtQ29uc3RhbnRJbmZvIHsKICBmaW5hbCBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGE7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CiAgZmluYWwgU3RyaW5nIGRvY3VtZW50YXRpb25Db21tZW50OwogIGNvbnN0IEVudW1Db25zdGFudEluZm8oCiAgICAgIHRoaXMubWV0YWRhdGEsIHRoaXMubmFtZSwgdGhpcy5jaGFyT2Zmc2V0LCB0aGlzLmRvY3VtZW50YXRpb25Db21tZW50KTsKfQqBagBOTjwBHAE6ASEJEw8VHxsUDxoUFxUXGRMXGhgVAR0JGC0nLDUxARoJExMcIBQBRgEnCRUgFhwWGhoVGBcZDwEsAUoBLzIBIgElASUBIwEYJhMTGhEeFBUXFx0bFhlORhcBFysmEzAjGxYbR0kgPUNIJ0RJQhs/ARsbHis0DjxEJgoBQElDSUQOEw4MDiJMLE8rCxAUFBQYKzMOEhI1EBQVJz0OCxQUDg4eEBQUFBgrHSU7QkQtTTAgRi9ANSI+KyVIEiI1KyVME09IIScoHUsrGx8KNhYWEjkUKSo0ODcIBihIOBIOPSJIDRsREhQUECEUGDkLJiAhBgEgJSAYBAEnAVEYBAEMURdPGkEaQVABQEA/PkUwQS4lRShNJS5EDAoIBj0pIEtJSCULKUsjJQsoSyM3SzJHSU9OQD5RDSRPJQYTJUUoM0AeJSETFgw8JTEOHlAKCAY1BAEMKEYRBAIBGSgVGCUaTQIBNXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2VudW1fYnVpbGRlci5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL2ZpZWxkX2J1aWxkZXIuZGFydJ7qLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZmllbGRfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgRGFydFR5cGUsIEV4cHJlc3Npb247CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcgc2hvdyBMaWJyYXJ5QnVpbGRlciwgTWVtYmVyQnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93IENsYXNzLCBEYXJ0VHlwZSwgRXhwcmVzc2lvbiwgRmllbGQsIEludmFsaWRUeXBlLCBOYW1lLCBOdWxsTGl0ZXJhbDsKCmltcG9ydCAnLi4vY29uc3RhbnRfY29udGV4dC5kYXJ0JyBzaG93IENvbnN0YW50Q29udGV4dDsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cKICAgICAgICBtZXNzYWdlSW50ZXJuYWxQcm9ibGVtQWxyZWFkeUluaXRpYWxpemVkLAogICAgICAgIHRlbXBsYXRlQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHk7CgppbXBvcnQgJy4uL2tlcm5lbC9ib2R5X2J1aWxkZXIuZGFydCcgc2hvdyBCb2R5QnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ2xhc3NCdWlsZGVyLAogICAgICAgIERlY2xhcmF0aW9uLAogICAgICAgIEltcGxpY2l0RmllbGRUeXBlLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1ldGFkYXRhQnVpbGRlcjsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyBpbnRlcm5hbFByb2JsZW07CgppbXBvcnQgJy4uL3NjYW5uZXIuZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnLi4vc2NvcGUuZGFydCcgc2hvdyBTY29wZTsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9sb2FkZXIuZGFydCcgc2hvdyBTb3VyY2VMb2FkZXI7CgppbXBvcnQgJy4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfaW5mZXJlbmNlX2VuZ2luZS5kYXJ0JwogICAgc2hvdyBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHksIFZhcmlhbmNlOwoKaW1wb3J0ICcuLi90eXBlX2luZmVyZW5jZS90eXBlX2luZmVycmVyLmRhcnQnIHNob3cgVHlwZUluZmVycmVySW1wbDsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWEuZGFydCcgc2hvdyBVbmtub3duVHlwZTsKCmNsYXNzIEZpZWxkQnVpbGRlciBleHRlbmRzIE1lbWJlckJ1aWxkZXIgewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBmaW5hbCBpbnQgbW9kaWZpZXJzOwoKICBmaW5hbCBGaWVsZCBmaWVsZDsKICBmaW5hbCBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGE7CiAgZmluYWwgVHlwZUJ1aWxkZXIgdHlwZTsKICBUb2tlbiBjb25zdEluaXRpYWxpemVyVG9rZW47CgogIGJvb2wgaGFkVHlwZXNJbmZlcnJlZCA9IGZhbHNlOwoKICBGaWVsZEJ1aWxkZXIodGhpcy5tZXRhZGF0YSwgdGhpcy50eXBlLCB0aGlzLm5hbWUsIHRoaXMubW9kaWZpZXJzLAogICAgICBEZWNsYXJhdGlvbiBjb21waWxhdGlvblVuaXQsIGludCBjaGFyT2Zmc2V0LCBpbnQgY2hhckVuZE9mZnNldCkKICAgICAgOiBmaWVsZCA9IG5ldyBGaWVsZChudWxsLCBmaWxlVXJpOiBjb21waWxhdGlvblVuaXQ/LmZpbGVVcmkpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0CiAgICAgICAgICAuLmZpbGVFbmRPZmZzZXQgPSBjaGFyRW5kT2Zmc2V0LAogICAgICAgIHN1cGVyKGNvbXBpbGF0aW9uVW5pdCwgY2hhck9mZnNldCk7CgogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICJGaWVsZEJ1aWxkZXIiOwoKICBib29sIGdldCBpc0ZpZWxkID0+IHRydWU7CgogIHZvaWQgc2V0IGluaXRpYWxpemVyKEV4cHJlc3Npb24gdmFsdWUpIHsKICAgIGlmICghaGFzSW5pdGlhbGl6ZXIgJiYgdmFsdWUgaXMhIE51bGxMaXRlcmFsICYmICFpc0NvbnN0ICYmICFpc0ZpbmFsKSB7CiAgICAgIGludGVybmFsUHJvYmxlbSgKICAgICAgICAgIG1lc3NhZ2VJbnRlcm5hbFByb2JsZW1BbHJlYWR5SW5pdGlhbGl6ZWQsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgfQogICAgZmllbGQuaW5pdGlhbGl6ZXIgPSB2YWx1ZS4ucGFyZW50ID0gZmllbGQ7CiAgfQoKICBib29sIGdldCBpc0VsaWdpYmxlRm9ySW5mZXJlbmNlIHsKICAgIHJldHVybiAhbGlicmFyeS5sZWdhY3lNb2RlICYmCiAgICAgICAgdHlwZSA9PSBudWxsICYmCiAgICAgICAgKGhhc0luaXRpYWxpemVyIHx8IGlzSW5zdGFuY2VNZW1iZXIpOwogIH0KCiAgRmllbGQgYnVpbGQoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgZmllbGQubmFtZSA/Pz0gbmV3IE5hbWUobmFtZSwgbGlicmFyeS50YXJnZXQpOwogICAgaWYgKHR5cGUgIT0gbnVsbCkgewogICAgICBmaWVsZC50eXBlID0gdHlwZS5idWlsZChsaWJyYXJ5KTsKCiAgICAgIGlmICghaXNGaW5hbCAmJiAhaXNDb25zdCkgewogICAgICAgIEluY2x1ZGVzVHlwZVBhcmFtZXRlcnNOb25Db3ZhcmlhbnRseSBuZWVkc0NoZWNrVmlzaXRvcjsKICAgICAgICBpZiAocGFyZW50IGlzIENsYXNzQnVpbGRlcikgewogICAgICAgICAgQ2xhc3MgZW5jbG9zaW5nQ2xhc3MgPSBwYXJlbnQudGFyZ2V0OwogICAgICAgICAgaWYgKGVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgICAgICAgbmVlZHNDaGVja1Zpc2l0b3IgPSBuZXcgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5KAogICAgICAgICAgICAgICAgZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMsCiAgICAgICAgICAgICAgICAvLyBXZSBhcmUgY2hlY2tpbmcgdGhlIGZpZWxkIHR5cGUgYXMgaWYgaXQgaXMgdGhlIHR5cGUgb2YgdGhlCiAgICAgICAgICAgICAgICAvLyBwYXJhbWV0ZXIgb2YgdGhlIGltcGxpY2l0IHNldHRlciBhbmQgdGhpcyBpcyBhIGNvbnRyYXZhcmlhbnQKICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9uLgogICAgICAgICAgICAgICAgaW5pdGlhbFZhcmlhbmNlOiBWYXJpYW5jZS5jb250cmF2YXJpYW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKG5lZWRzQ2hlY2tWaXNpdG9yICE9IG51bGwpIHsKICAgICAgICAgIGlmIChmaWVsZC50eXBlLmFjY2VwdChuZWVkc0NoZWNrVmlzaXRvcikpIHsKICAgICAgICAgICAgZmllbGQuaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBib29sIGlzSW5zdGFuY2VNZW1iZXIgPSAhaXNTdGF0aWMgJiYgIWlzVG9wTGV2ZWw7CiAgICBmaWVsZAogICAgICAuLmlzQ292YXJpYW50ID0gaXNDb3ZhcmlhbnQKICAgICAgLi5pc0ZpbmFsID0gaXNGaW5hbAogICAgICAuLmlzQ29uc3QgPSBpc0NvbnN0CiAgICAgIC4uaGFzSW1wbGljaXRHZXR0ZXIgPSBpc0luc3RhbmNlTWVtYmVyCiAgICAgIC4uaGFzSW1wbGljaXRTZXR0ZXIgPSBpc0luc3RhbmNlTWVtYmVyICYmICFpc0NvbnN0ICYmICFpc0ZpbmFsCiAgICAgIC4uaXNTdGF0aWMgPSAhaXNJbnN0YW5jZU1lbWJlcjsKICAgIHJldHVybiBmaWVsZDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnMoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgQ2xhc3NCdWlsZGVyIGNsYXNzQnVpbGRlciA9IGlzQ2xhc3NNZW1iZXIgPyBwYXJlbnQgOiBudWxsOwogICAgTWV0YWRhdGFCdWlsZGVyLmJ1aWxkQW5ub3RhdGlvbnMoCiAgICAgICAgZmllbGQsIG1ldGFkYXRhLCBsaWJyYXJ5LCBjbGFzc0J1aWxkZXIsIHRoaXMpOwoKICAgIC8vIEZvciBtb2R1bGFyIGNvbXBpbGF0aW9uIHdlIG5lZWQgdG8gaW5jbHVkZSBpbml0aWFsaXplcnMgb2YgYWxsIGNvbnN0CiAgICAvLyBmaWVsZHMgYW5kIGFsbCBub24tc3RhdGljIGZpbmFsIGZpZWxkcyBpbiBjbGFzc2VzIHdpdGggY29uc3QgY29uc3RydWN0b3JzCiAgICAvLyBpbnRvIHRoZSBvdXRsaW5lLgogICAgaWYgKChpc0NvbnN0IHx8CiAgICAgICAgICAgIChpc0ZpbmFsICYmCiAgICAgICAgICAgICAgICAhaXNTdGF0aWMgJiYKICAgICAgICAgICAgICAgIGlzQ2xhc3NNZW1iZXIgJiYKICAgICAgICAgICAgICAgIGNsYXNzQnVpbGRlci5oYXNDb25zdENvbnN0cnVjdG9yKSkgJiYKICAgICAgICBjb25zdEluaXRpYWxpemVyVG9rZW4gIT0gbnVsbCkgewogICAgICBTY29wZSBzY29wZSA9IGNsYXNzQnVpbGRlcj8uc2NvcGUgPz8gbGlicmFyeS5zY29wZTsKICAgICAgQm9keUJ1aWxkZXIgYm9keUJ1aWxkZXIgPSBuZXcgQm9keUJ1aWxkZXIuZm9yT3V0bGluZUV4cHJlc3Npb24oCiAgICAgICAgICBsaWJyYXJ5LCBjbGFzc0J1aWxkZXIsIHRoaXMsIHNjb3BlLCBmaWxlVXJpKTsKICAgICAgYm9keUJ1aWxkZXIuY29uc3RhbnRDb250ZXh0ID0KICAgICAgICAgIGlzQ29uc3QgPyBDb25zdGFudENvbnRleHQuaW5mZXJyZWQgOiBDb25zdGFudENvbnRleHQubm9uZTsKICAgICAgaW5pdGlhbGl6ZXIgPSBib2R5QnVpbGRlci5wYXJzZUZpZWxkSW5pdGlhbGl6ZXIoY29uc3RJbml0aWFsaXplclRva2VuKQogICAgICAgIC4ucGFyZW50ID0gZmllbGQ7CiAgICAgIGJvZHlCdWlsZGVyLnR5cGVJbmZlcnJlcgogICAgICAgICAgPy5pbmZlckZpZWxkSW5pdGlhbGl6ZXIoYm9keUJ1aWxkZXIsIGZpZWxkLnR5cGUsIGZpZWxkLmluaXRpYWxpemVyKTsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyIGlzIFNvdXJjZUxvYWRlcikgewogICAgICAgIFNvdXJjZUxvYWRlciBsb2FkZXIgPSBsaWJyYXJ5LmxvYWRlcjsKICAgICAgICBsb2FkZXIudHJhbnNmb3JtUG9zdEluZmVyZW5jZShmaWVsZCwgYm9keUJ1aWxkZXIudHJhbnNmb3JtU2V0TGl0ZXJhbHMsCiAgICAgICAgICAgIGJvZHlCdWlsZGVyLnRyYW5zZm9ybUNvbGxlY3Rpb25zKTsKICAgICAgfQogICAgICBib2R5QnVpbGRlci5yZXNvbHZlUmVkaXJlY3RpbmdGYWN0b3J5VGFyZ2V0cygpOwogICAgfQogICAgY29uc3RJbml0aWFsaXplclRva2VuID0gbnVsbDsKICB9CgogIEZpZWxkIGdldCB0YXJnZXQgPT4gZmllbGQ7CgogIEBvdmVycmlkZQogIHZvaWQgaW5mZXJUeXBlKCkgewogICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSA9IHRoaXMubGlicmFyeTsKICAgIGlmIChmaWVsZC50eXBlIGlzISBJbXBsaWNpdEZpZWxkVHlwZSkgewogICAgICAvLyBXZSBoYXZlIGFscmVhZHkgaW5mZXJyZWQgYSB0eXBlLgogICAgICByZXR1cm47CiAgICB9CiAgICBJbXBsaWNpdEZpZWxkVHlwZSB0eXBlID0gZmllbGQudHlwZTsKICAgIGlmICh0eXBlLm1lbWJlciAhPSB0aGlzKSB7CiAgICAgIC8vIFRoZSBpbXBsaWNpdCB0eXBlIHdhcyBpbmhlcml0ZWQuCiAgICAgIEZpZWxkQnVpbGRlciBvdGhlciA9IHR5cGUubWVtYmVyOwogICAgICBvdGhlci5pbmZlckNvcGllZFR5cGUoZmllbGQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodHlwZS5pc1N0YXJ0ZWQpIHsKICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVDYW50SW5mZXJUeXBlRHVlVG9DaXJjdWxhcml0eS53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgIG5hbWUubGVuZ3RoLAogICAgICAgICAgZmlsZVVyaSk7CiAgICAgIGZpZWxkLnR5cGUgPSBjb25zdCBJbnZhbGlkVHlwZSgpOwogICAgICByZXR1cm47CiAgICB9CiAgICB0eXBlLmlzU3RhcnRlZCA9IHRydWU7CiAgICBUeXBlSW5mZXJyZXJJbXBsIHR5cGVJbmZlcnJlciA9IGxpYnJhcnkubG9hZGVyLnR5cGVJbmZlcmVuY2VFbmdpbmUKICAgICAgICAuY3JlYXRlVG9wTGV2ZWxUeXBlSW5mZXJyZXIoCiAgICAgICAgICAgIGZpbGVVcmksIGZpZWxkLmVuY2xvc2luZ0NsYXNzPy50aGlzVHlwZSwgbnVsbCk7CiAgICBCb2R5QnVpbGRlciBib2R5QnVpbGRlciA9IG5ldyBCb2R5QnVpbGRlci5mb3JGaWVsZCh0aGlzLCB0eXBlSW5mZXJyZXIpOwogICAgYm9keUJ1aWxkZXIuY29uc3RhbnRDb250ZXh0ID0KICAgICAgICBpc0NvbnN0ID8gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkIDogQ29uc3RhbnRDb250ZXh0Lm5vbmU7CiAgICBpbml0aWFsaXplciA9IGJvZHlCdWlsZGVyLnBhcnNlRmllbGRJbml0aWFsaXplcih0eXBlLmluaXRpYWxpemVyVG9rZW4pOwogICAgdHlwZS5pbml0aWFsaXplclRva2VuID0gbnVsbDsKCiAgICBEYXJ0VHlwZSBpbmZlcnJlZFR5cGUgPSB0eXBlSW5mZXJyZXIuaW5mZXJEZWNsYXJhdGlvblR5cGUodHlwZUluZmVycmVyCiAgICAgICAgLmluZmVyRXhwcmVzc2lvbihmaWVsZC5pbml0aWFsaXplciwgY29uc3QgVW5rbm93blR5cGUoKSwgdHJ1ZSwKICAgICAgICAgICAgaXNWb2lkQWxsb3dlZDogdHJ1ZSkpOwoKICAgIGlmIChmaWVsZC50eXBlIGlzIEltcGxpY2l0RmllbGRUeXBlKSB7CiAgICAgIC8vIGBmaWVsZC50eXBlYCBtYXkgaGF2ZSBjaGFuZ2VkIGlmIGEgY2lyY3VsYXJpdHkgd2FzIGRldGVjdGVkIHdoZW4KICAgICAgLy8gW2luZmVycmVkVHlwZV0gd2FzIGNvbXB1dGVkLgogICAgICBmaWVsZC50eXBlID0gaW5mZXJyZWRUeXBlOwoKICAgICAgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5IG5lZWRzQ2hlY2tWaXNpdG9yOwogICAgICBpZiAocGFyZW50IGlzIENsYXNzQnVpbGRlcikgewogICAgICAgIENsYXNzIGVuY2xvc2luZ0NsYXNzID0gcGFyZW50LnRhcmdldDsKICAgICAgICBpZiAoZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICAgICAgbmVlZHNDaGVja1Zpc2l0b3IgPSBuZXcgSW5jbHVkZXNUeXBlUGFyYW1ldGVyc05vbkNvdmFyaWFudGx5KAogICAgICAgICAgICAgIGVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgICAgIC8vIFdlIGFyZSBjaGVja2luZyB0aGUgZmllbGQgdHlwZSBhcyBpZiBpdCBpcyB0aGUgdHlwZSBvZiB0aGUKICAgICAgICAgICAgICAvLyBwYXJhbWV0ZXIgb2YgdGhlIGltcGxpY2l0IHNldHRlciBhbmQgdGhpcyBpcyBhIGNvbnRyYXZhcmlhbnQKICAgICAgICAgICAgICAvLyBwb3NpdGlvbi4KICAgICAgICAgICAgICBpbml0aWFsVmFyaWFuY2U6IFZhcmlhbmNlLmNvbnRyYXZhcmlhbnQpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobmVlZHNDaGVja1Zpc2l0b3IgIT0gbnVsbCkgewogICAgICAgIGlmIChmaWVsZC50eXBlLmFjY2VwdChuZWVkc0NoZWNrVmlzaXRvcikpIHsKICAgICAgICAgIGZpZWxkLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYSBoYWNrLiBUaGUgb3V0bGluZSBzaG91bGQgY29udGFpbiB0aGUgY29tcGlsZWQKICAgIC8vIGluaXRpYWxpemVycywgaG93ZXZlciwgYXMgdG9wLWxldmVsIGluZmVyZW5jZSBpcyBzdWJ0bHkgZGlmZmVyZW50IGZyb20KICAgIC8vIHdlIG5lZWQgdG8gY29tcGlsZSB0aGUgZmllbGQgaW5pdGlhbGl6ZXIgYWdhaW4gd2hlbiBldmVyeXRoaW5nIGVsc2UgaXMKICAgIC8vIGNvbXBpbGVkLgogICAgZmllbGQuaW5pdGlhbGl6ZXIgPSBudWxsOwogIH0KCiAgdm9pZCBpbmZlckNvcGllZFR5cGUoRmllbGQgb3RoZXIpIHsKICAgIGluZmVyVHlwZSgpOwogICAgb3RoZXIudHlwZSA9IGZpZWxkLnR5cGU7CiAgICBvdGhlci5pbml0aWFsaXplciA9IG51bGw7CiAgfQoKICBEYXJ0VHlwZSBnZXQgYnVpbHRUeXBlID0+IGZpZWxkLnR5cGU7Cn0KgOsATk48AR0BPAE6ASFNATgBHQkyLwE3AScJFhUbFRgZATABJQEjAUoBOQE2OQFFAT4BKxUBFwEVKBofASEBREZDJCssASoBHAErTBdKBi8EASQiGC4EAS4zGCgBIkAmMDpKL05QHToMCik2MQwKCAY2CiIaGi1FJhIEAQw5PyY3AUxRGRQYHSE2KTpGOCRFTRofTywuTy8INgYiBAEdAQwVMSwqDgYpHyooJA4GGhpFFhcUKA4GG0clPEwiQ0wiAUtHIwErSiYhAT4kLjhILUxOGzgKCCc0LwoIBgFITk4RHgQBJhEdHgQBKAIBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2ZpZWxkX2J1aWxkZXIuZGFydEpzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9mb3JtYWxfcGFyYW1ldGVyX2J1aWxkZXIuZGFydJblLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuZm9ybWFsX3BhcmFtZXRlcl9idWlsZGVyOwoKaW1wb3J0ICcuLi9wYXJzZXIuZGFydCcgc2hvdyBGb3JtYWxQYXJhbWV0ZXJLaW5kOwoKaW1wb3J0ICcuLi9wYXJzZXIvZm9ybWFsX3BhcmFtZXRlcl9raW5kLmRhcnQnCiAgICBzaG93CiAgICAgICAgaXNNYW5kYXRvcnlGb3JtYWxQYXJhbWV0ZXJLaW5kLAogICAgICAgIGlzT3B0aW9uYWxOYW1lZEZvcm1hbFBhcmFtZXRlcktpbmQsCiAgICAgICAgaXNPcHRpb25hbFBvc2l0aW9uYWxGb3JtYWxQYXJhbWV0ZXJLaW5kOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnCiAgICBzaG93IExpYnJhcnlCdWlsZGVyLCBNZXRhZGF0YUJ1aWxkZXIsIE1vZGlmaWVyQnVpbGRlciwgVHlwZUJ1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IFZhcmlhYmxlRGVjbGFyYXRpb247CgppbXBvcnQgJy4uL2NvbnN0YW50X2NvbnRleHQuZGFydCcgc2hvdyBDb25zdGFudENvbnRleHQ7CgppbXBvcnQgJy4uL21vZGlmaWVyLmRhcnQnIHNob3cgZmluYWxNYXNrLCBpbml0aWFsaXppbmdGb3JtYWxNYXNrOwoKaW1wb3J0ICcuLi9zY2FubmVyLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL3Njb3BlLmRhcnQnIHNob3cgU2NvcGU7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgU291cmNlTGlicmFyeUJ1aWxkZXI7CgppbXBvcnQgJy4uL3NvdXJjZS9zb3VyY2VfbG9hZGVyLmRhcnQnIHNob3cgU291cmNlTG9hZGVyOwoKaW1wb3J0ICcuLi9rZXJuZWwvYm9keV9idWlsZGVyLmRhcnQnIHNob3cgQm9keUJ1aWxkZXI7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzQnVpbGRlciwKICAgICAgICBEZWNsYXJhdGlvbiwKICAgICAgICBDb25zdHJ1Y3RvckJ1aWxkZXIsCiAgICAgICAgRmllbGRCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1ldGFkYXRhQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9zaGFkb3dfYXN0LmRhcnQnIHNob3cgVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50OwoKLy8vIEEgYnVpbGRlciBmb3IgYSBmb3JtYWwgcGFyYW1ldGVyLCBpLmUuIGEgcGFyYW1ldGVyIG9uIGEgbWV0aG9kIG9yCi8vLyBjb25zdHJ1Y3Rvci4KY2xhc3MgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBleHRlbmRzIE1vZGlmaWVyQnVpbGRlciB7CiAgLy8vIExpc3Qgb2YgbWV0YWRhdGEgYnVpbGRlcnMgZm9yIHRoZSBtZXRhZGF0YSBkZWNsYXJlZCBvbiB0aGlzIHBhcmFtZXRlci4KICBmaW5hbCBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGE7CgogIGZpbmFsIGludCBtb2RpZmllcnM7CgogIGZpbmFsIFR5cGVCdWlsZGVyIHR5cGU7CgogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8gVGhlIGtpbmQgb2YgdGhpcyBwYXJhbWV0ZXIsIGkuZS4gaWYgaXQncyByZXF1aXJlZCwgcG9zaXRpb25hbCBvcHRpb25hbCwKICAvLy8gb3IgbmFtZWQgb3B0aW9uYWwuCiAgRm9ybWFsUGFyYW1ldGVyS2luZCBraW5kID0gRm9ybWFsUGFyYW1ldGVyS2luZC5tYW5kYXRvcnk7CgogIC8vLyBUaGUgdmFyaWFibGUgZGVjbGFyYXRpb24gY3JlYXRlZCBmb3IgdGhpcyBmb3JtYWwgcGFyYW1ldGVyLgogIFZhcmlhYmxlRGVjbGFyYXRpb24gZGVjbGFyYXRpb247CgogIC8vLyBUaGUgZmlyc3QgdG9rZW4gb2YgdGhlIGRlZmF1bHQgdmFsdWUsIGlmIGFueS4KICAvLy8KICAvLy8gVGhpcyBpcyBzdG9yZWQgdW50aWwgb3V0bGluZXMgaGF2ZSBiZWVuIGJ1aWx0IHRocm91Z2gKICAvLy8gW2J1aWxkT3V0bGluZUV4cHJlc3Npb25zXS4KICBUb2tlbiBpbml0aWFsaXplclRva2VuOwoKICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyKHRoaXMubWV0YWRhdGEsIHRoaXMubW9kaWZpZXJzLCB0aGlzLnR5cGUsIHRoaXMubmFtZSwKICAgICAgTGlicmFyeUJ1aWxkZXIgY29tcGlsYXRpb25Vbml0LCBpbnQgY2hhck9mZnNldCkKICAgICAgOiBzdXBlcihjb21waWxhdGlvblVuaXQsIGNoYXJPZmZzZXQpOwoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiRm9ybWFsUGFyYW1ldGVyQnVpbGRlciI7CgogIGJvb2wgZ2V0IGlzUmVxdWlyZWQgPT4gaXNNYW5kYXRvcnlGb3JtYWxQYXJhbWV0ZXJLaW5kKGtpbmQpOwoKICBib29sIGdldCBpc1Bvc2l0aW9uYWwgewogICAgcmV0dXJuIGlzT3B0aW9uYWxQb3NpdGlvbmFsRm9ybWFsUGFyYW1ldGVyS2luZChraW5kKSB8fAogICAgICAgIGlzTWFuZGF0b3J5Rm9ybWFsUGFyYW1ldGVyS2luZChraW5kKTsKICB9CgogIGJvb2wgZ2V0IGlzTmFtZWQgPT4gaXNPcHRpb25hbE5hbWVkRm9ybWFsUGFyYW1ldGVyS2luZChraW5kKTsKCiAgYm9vbCBnZXQgaXNPcHRpb25hbCA9PiAhaXNSZXF1aXJlZDsKCiAgYm9vbCBnZXQgaXNMb2NhbCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzID0+IG5hbWU7CgogIFZhcmlhYmxlRGVjbGFyYXRpb24gZ2V0IHRhcmdldCA9PiBkZWNsYXJhdGlvbjsKCiAgVmFyaWFibGVEZWNsYXJhdGlvbiBidWlsZCgKICAgICAgU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgaW50IGZ1bmN0aW9uTmVzdGluZ0xldmVsKSB7CiAgICBpZiAoZGVjbGFyYXRpb24gPT0gbnVsbCkgewogICAgICBkZWNsYXJhdGlvbiA9IG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQobmFtZSwgZnVuY3Rpb25OZXN0aW5nTGV2ZWwsCiAgICAgICAgICB0eXBlOiB0eXBlPy5idWlsZChsaWJyYXJ5KSwKICAgICAgICAgIGlzRmluYWw6IGlzRmluYWwsCiAgICAgICAgICBpc0NvbnN0OiBpc0NvbnN0LAogICAgICAgICAgaXNGaWVsZEZvcm1hbDogaXNJbml0aWFsaXppbmdGb3JtYWwsCiAgICAgICAgICBpc0NvdmFyaWFudDogaXNDb3ZhcmlhbnQpCiAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgIH0KICAgIHJldHVybiBkZWNsYXJhdGlvbjsKICB9CgogIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgY2xvbmUoTGlzdDxUeXBlQnVpbGRlcj4gbmV3VHlwZXMpIHsKICAgIC8vIFRPRE8oZG1pdHJ5YXMpOiAgSXQncyBub3QgY2xlYXIgaG93IFttZXRhZGF0YV0gaXMgdXNlZCBjdXJyZW50bHksIGFuZAogICAgLy8gaG93IGl0IHNob3VsZCBiZSBjbG9uZWQuICBDb25zaWRlciBjbG9uaW5nIGl0IGluc3RlYWQgb2YgcmV1c2luZyBpdC4KICAgIHJldHVybiBuZXcgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcigKICAgICAgICBtZXRhZGF0YSwgbW9kaWZpZXJzLCB0eXBlPy5jbG9uZShuZXdUeXBlcyksIG5hbWUsIHBhcmVudCwgY2hhck9mZnNldCkKICAgICAgLi5raW5kID0ga2luZDsKICB9CgogIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9yRm9ybWFsUGFyYW1ldGVySW5pdGlhbGl6ZXJTY29wZSgpIHsKICAgIGFzc2VydChkZWNsYXJhdGlvbiAhPSBudWxsKTsKICAgIHJldHVybiAhaXNJbml0aWFsaXppbmdGb3JtYWwKICAgICAgICA/IHRoaXMKICAgICAgICA6IChuZXcgRm9ybWFsUGFyYW1ldGVyQnVpbGRlcigKICAgICAgICAgICAgbWV0YWRhdGEsCiAgICAgICAgICAgIG1vZGlmaWVycyB8IGZpbmFsTWFzayB8IGluaXRpYWxpemluZ0Zvcm1hbE1hc2ssCiAgICAgICAgICAgIHR5cGUsCiAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgIG51bGwsCiAgICAgICAgICAgIGNoYXJPZmZzZXQpCiAgICAgICAgICAuLnBhcmVudCA9IHBhcmVudAogICAgICAgICAgLi5kZWNsYXJhdGlvbiA9IGRlY2xhcmF0aW9uKTsKICB9CgogIHZvaWQgZmluYWxpemVJbml0aWFsaXppbmdGb3JtYWwoKSB7CiAgICBPYmplY3QgY2xzID0gcGFyZW50LnBhcmVudDsKICAgIGlmIChjbHMgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIERlY2xhcmF0aW9uIGZpZWxkID0gY2xzLnNjb3BlLmxvb2t1cChuYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgICAgaWYgKGZpZWxkIGlzIEZpZWxkQnVpbGRlcikgewogICAgICAgIHRhcmdldC50eXBlID0gZmllbGQudGFyZ2V0LnR5cGU7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBCdWlsZHMgdGhlIGRlZmF1bHQgdmFsdWUgZnJvbSB0aGlzIFtpbml0aWFsaXplclRva2VuXSBpZiB0aGlzIGlzIGEKICAvLy8gZm9ybWFsIHBhcmFtZXRlciBvbiBhIGNvbnN0IGNvbnN0cnVjdG9yIG9yIGluc3RhbmNlIG1ldGhvZC4KICB2b2lkIGJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIC8vIEZvciBtb2R1bGFyIGNvbXBpbGF0aW9uIHdlIG5lZWQgdG8gaW5jbHVkZSBpbml0aWFsaXplcnMgZm9yIG9wdGlvbmFsCiAgICAvLyBhbmQgbmFtZWQgcGFyYW1ldGVycyBvZiBjb25zdCBjb25zdHJ1Y3RvcnMgaW50byB0aGUgb3V0bGluZSAtIHRvIGVuYWJsZQogICAgLy8gY29uc3RhbnQgZXZhbHVhdGlvbi4gU2ltaWxhcmx5IHdlIG5lZWQgdG8gaW5jbHVkZSBpbml0aWFsaXplcnMgZm9yCiAgICAvLyBvcHRpb25hbCBhbmQgbmFtZWQgcGFyYW1ldGVycyBvZiBpbnN0YW5jZSBtZXRob2RzIGJlY2F1c2UgdGhlc2UgbWlnaHQgYmUKICAgIC8vIG5lZWRlZCB0byBnZW5lcmF0ZWQgbm9TdWNoTWV0aG9kIGZvcndhcmRlcnMuCiAgICBmaW5hbCBib29sIGlzQ29uc3RDb25zdHJ1Y3RvclBhcmFtZXRlciA9CiAgICAgICAgKHBhcmVudCBpcyBDb25zdHJ1Y3RvckJ1aWxkZXIgJiYgcGFyZW50LnRhcmdldC5pc0NvbnN0KTsKICAgIGlmICgoaXNDb25zdENvbnN0cnVjdG9yUGFyYW1ldGVyIHx8IHBhcmVudC5pc0luc3RhbmNlTWVtYmVyKSAmJgogICAgICAgIGluaXRpYWxpemVyVG9rZW4gIT0gbnVsbCkgewogICAgICBmaW5hbCBDbGFzc0J1aWxkZXIgY2xhc3NCdWlsZGVyID0gcGFyZW50LnBhcmVudDsKICAgICAgU2NvcGUgc2NvcGUgPSBjbGFzc0J1aWxkZXIuc2NvcGU7CiAgICAgIEJvZHlCdWlsZGVyIGJvZHlCdWlsZGVyID0gbmV3IEJvZHlCdWlsZGVyLmZvck91dGxpbmVFeHByZXNzaW9uKAogICAgICAgICAgbGlicmFyeSwgY2xhc3NCdWlsZGVyLCB0aGlzLCBzY29wZSwgZmlsZVVyaSk7CiAgICAgIGJvZHlCdWlsZGVyLmNvbnN0YW50Q29udGV4dCA9IENvbnN0YW50Q29udGV4dC5yZXF1aXJlZDsKICAgICAgdGFyZ2V0LmluaXRpYWxpemVyID0gYm9keUJ1aWxkZXIucGFyc2VGaWVsZEluaXRpYWxpemVyKGluaXRpYWxpemVyVG9rZW4pCiAgICAgICAgLi5wYXJlbnQgPSB0YXJnZXQ7CiAgICAgIGJvZHlCdWlsZGVyLnR5cGVJbmZlcnJlcj8uaW5mZXJQYXJhbWV0ZXJJbml0aWFsaXplcigKICAgICAgICAgIGJvZHlCdWlsZGVyLCB0YXJnZXQuaW5pdGlhbGl6ZXIsIHRhcmdldC50eXBlKTsKICAgICAgaWYgKGxpYnJhcnkubG9hZGVyIGlzIFNvdXJjZUxvYWRlcikgewogICAgICAgIFNvdXJjZUxvYWRlciBsb2FkZXIgPSBsaWJyYXJ5LmxvYWRlcjsKICAgICAgICBsb2FkZXIudHJhbnNmb3JtUG9zdEluZmVyZW5jZSh0YXJnZXQsIGJvZHlCdWlsZGVyLnRyYW5zZm9ybVNldExpdGVyYWxzLAogICAgICAgICAgICBib2R5QnVpbGRlci50cmFuc2Zvcm1Db2xsZWN0aW9ucyk7CiAgICAgIH0KICAgICAgYm9keUJ1aWxkZXIucmVzb2x2ZVJlZGlyZWN0aW5nRmFjdG9yeVRhcmdldHMoKTsKICAgIH0KICAgIGluaXRpYWxpemVyVG9rZW4gPSBudWxsOwogIH0KfQqArgBOTjwBKAEyAS4JKCwxARZIATsBOAFCASUBIwFKATkBNwEnCRYVHBYYGRUBTAFGETdNKAEXARoBFQFOGTwBQiMBNAY8IRoBTjYsATQBPwEaPC4EAUABJgEcAQwoATEBHUAfUCYcHC8kIwYYBAE9TUwnThUEAUAhIQ8nFjwSEhIYHCgEASYgH0cjKQgGBAFJQjlMT0pQNC1BRCQ3KEY4Pk8bOzksLlAvCDYGHQQCAUFwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9mb3JtYWxfcGFyYW1ldGVyX2J1aWxkZXIuZGFydENzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9wcm9jZWR1cmVfYnVpbGRlci5kYXJ0wAByNS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnByb2NlZHVyZV9idWlsZGVyOwoKLy8gTm90ZTogd2UncmUgZGVsaWJlcmF0ZWx5IHVzaW5nIEFzeW5jTWFya2VyIGFuZCBQcm9jZWR1cmVLaW5kIGZyb20ga2VybmVsCi8vIG91dHNpZGUgdGhlIGtlcm5lbC1zcGVjaWZpYyBidWlsZGVycy4gVGhpcyBpcyBzaW1wbGVyIHRoYW4gY3JlYXRpbmcKLy8gYWRkaXRpb25hbCBlbnVtcy4KaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cgQXN5bmNNYXJrZXIsIFByb2NlZHVyZUtpbmQsIFZhcmlhYmxlRGVjbGFyYXRpb247CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBzaG93IGNvbnRhaW5zVHlwZVZhcmlhYmxlLCBzdWJzdGl0dXRlOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JzsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIERlY2xhcmF0aW9uLAogICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTWVtYmVyQnVpbGRlciwKICAgICAgICBNZXRhZGF0YUJ1aWxkZXIsCiAgICAgICAgU2NvcGUsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQXJndW1lbnRzLAogICAgICAgIEFzeW5jTWFya2VyLAogICAgICAgIENsYXNzLAogICAgICAgIENvbnN0cnVjdG9yLAogICAgICAgIENvbnN0cnVjdG9ySW52b2NhdGlvbiwKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBFbXB0eVN0YXRlbWVudCwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEZ1bmN0aW9uTm9kZSwKICAgICAgICBJbml0aWFsaXplciwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIE1lbWJlciwKICAgICAgICBOYW1lLAogICAgICAgIFByb2NlZHVyZSwKICAgICAgICBQcm9jZWR1cmVLaW5kLAogICAgICAgIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIsCiAgICAgICAgU3RhdGVtZW50LAogICAgICAgIFN0YXRpY0ludm9jYXRpb24sCiAgICAgICAgU3RyaW5nTGl0ZXJhbCwKICAgICAgICBTdXBlckluaXRpYWxpemVyLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZVBhcmFtZXRlclR5cGUsCiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiwKICAgICAgICBzZXRQYXJlbnRzOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL2NvbnN0YW50X2NvbnRleHQuZGFydCcgc2hvdyBDb25zdGFudENvbnRleHQ7CgppbXBvcnQgJy4uL2tlcm5lbC9ib2R5X2J1aWxkZXIuZGFydCcgc2hvdyBCb2R5QnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2V4cHJlc3Npb25fZ2VuZXJhdG9yX2hlbHBlci5kYXJ0JwogICAgc2hvdyBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzc0J1aWxkZXIsCiAgICAgICAgQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyLAogICAgICAgIERlY2xhcmF0aW9uLAogICAgICAgIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIsCiAgICAgICAgTGlicmFyeUJ1aWxkZXIsCiAgICAgICAgTWV0YWRhdGFCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIsCiAgICAgICAgaXNSZWRpcmVjdGluZ0dlbmVyYXRpdmVDb25zdHJ1Y3RvckltcGxlbWVudGF0aW9uOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX3NoYWRvd19hc3QuZGFydCcgc2hvdyBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQ7CgppbXBvcnQgJy4uL2tlcm5lbC9yZWRpcmVjdGluZ19mYWN0b3J5X2JvZHkuZGFydCcgc2hvdyBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5OwoKaW1wb3J0ICcuLi9sb2FkZXIuZGFydCcgc2hvdyBMb2FkZXI7CgppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnCiAgICBzaG93CiAgICAgICAgTWVzc2FnZSwKICAgICAgICBtZXNzYWdlQ29uc3RGYWN0b3J5UmVkaXJlY3Rpb25Ub05vbkNvbnN0LAogICAgICAgIG1lc3NhZ2VNb3JlVGhhbk9uZVN1cGVyT3JUaGlzSW5pdGlhbGl6ZXIsCiAgICAgICAgbWVzc2FnZU5vbkluc3RhbmNlVHlwZVZhcmlhYmxlVXNlLAogICAgICAgIG1lc3NhZ2VQYXRjaERlY2xhcmF0aW9uTWlzbWF0Y2gsCiAgICAgICAgbWVzc2FnZVBhdGNoRGVjbGFyYXRpb25PcmlnaW4sCiAgICAgICAgbWVzc2FnZVBhdGNoTm9uRXh0ZXJuYWwsCiAgICAgICAgbWVzc2FnZVN1cGVySW5pdGlhbGl6ZXJOb3RMYXN0LAogICAgICAgIG1lc3NhZ2VUaGlzSW5pdGlhbGl6ZXJOb3RBbG9uZSwKICAgICAgICBub0xlbmd0aDsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bmV4cGVjdGVkOwoKaW1wb3J0ICcuLi9zb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICcuLi9zb3VyY2Uvc291cmNlX2xvYWRlci5kYXJ0JyBzaG93IFNvdXJjZUxvYWRlcjsKCmltcG9ydCAnLi4vdHlwZV9pbmZlcmVuY2UvdHlwZV9pbmZlcmVuY2VfZW5naW5lLmRhcnQnCiAgICBzaG93IEluY2x1ZGVzVHlwZVBhcmFtZXRlcnNOb25Db3ZhcmlhbnRseSwgVmFyaWFuY2U7CgovLy8gQ29tbW9uIGJhc2UgY2xhc3MgZm9yIGNvbnN0cnVjdG9yIGFuZCBwcm9jZWR1cmUgYnVpbGRlcnMuCmFic3RyYWN0IGNsYXNzIEZ1bmN0aW9uQnVpbGRlciBleHRlbmRzIE1lbWJlckJ1aWxkZXIgewogIGZpbmFsIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YTsKCiAgZmluYWwgaW50IG1vZGlmaWVyczsKCiAgZmluYWwgVHlwZUJ1aWxkZXIgcmV0dXJuVHlwZTsKCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIGZpbmFsIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlczsKCiAgZmluYWwgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzOwoKICAvLy8gSWYgdGhpcyBwcm9jZWR1cmUgaXMgYW4gaW5zdGFuY2UgbWVtYmVyIGRlY2xhcmVkIGluIGFuIGV4dGVuc2lvbgogIC8vLyBkZWNsYXJhdGlvbiwgW2V4dGVuc2lvblRoaXNdIGhvbGRzIHRoZSBzeW50aGV0aWNhbGx5IGFkZGVkIGB0aGlzYAogIC8vLyBwYXJhbWV0ZXIuCiAgVmFyaWFibGVEZWNsYXJhdGlvbiBleHRlbnNpb25UaGlzOwoKICBGdW5jdGlvbkJ1aWxkZXIoCiAgICAgIHRoaXMubWV0YWRhdGEsCiAgICAgIHRoaXMubW9kaWZpZXJzLAogICAgICB0aGlzLnJldHVyblR5cGUsCiAgICAgIHRoaXMubmFtZSwKICAgICAgdGhpcy50eXBlVmFyaWFibGVzLAogICAgICB0aGlzLmZvcm1hbHMsCiAgICAgIExpYnJhcnlCdWlsZGVyIGNvbXBpbGF0aW9uVW5pdCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIHRoaXMubmF0aXZlTWV0aG9kTmFtZSkKICAgICAgOiBzdXBlcihjb21waWxhdGlvblVuaXQsIGNoYXJPZmZzZXQpIHsKICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb3JtYWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgZm9ybWFsc1tpXS5wYXJlbnQgPSB0aGlzOwogICAgICB9CiAgICB9CiAgfQoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiRnVuY3Rpb25CdWlsZGVyIjsKCiAgQXN5bmNNYXJrZXIgZ2V0IGFzeW5jTW9kaWZpZXI7CgogIFByb2NlZHVyZUtpbmQgZ2V0IGtpbmQ7CgogIGJvb2wgZ2V0IGlzQ29uc3RydWN0b3IgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzUmVndWxhck1ldGhvZCA9PiBpZGVudGljYWwoUHJvY2VkdXJlS2luZC5NZXRob2QsIGtpbmQpOwoKICBib29sIGdldCBpc0dldHRlciA9PiBpZGVudGljYWwoUHJvY2VkdXJlS2luZC5HZXR0ZXIsIGtpbmQpOwoKICBib29sIGdldCBpc1NldHRlciA9PiBpZGVudGljYWwoUHJvY2VkdXJlS2luZC5TZXR0ZXIsIGtpbmQpOwoKICBib29sIGdldCBpc09wZXJhdG9yID0+IGlkZW50aWNhbChQcm9jZWR1cmVLaW5kLk9wZXJhdG9yLCBraW5kKTsKCiAgYm9vbCBnZXQgaXNGYWN0b3J5ID0+IGlkZW50aWNhbChQcm9jZWR1cmVLaW5kLkZhY3RvcnksIGtpbmQpOwoKICAvLy8gVGhpcyBpcyB0aGUgZm9ybWFsIHBhcmFtZXRlciBzY29wZSBhcyBzcGVjaWZpZWQgaW4gdGhlIERhcnQgUHJvZ3JhbW1pbmcKICAvLy8gTGFuZ3VhZ2UgU3BlY2lmaWN0aW9uLCA0dGggZWQsIHNlY3Rpb24gOS4yLgogIFNjb3BlIGNvbXB1dGVGb3JtYWxQYXJhbWV0ZXJTY29wZShTY29wZSBwYXJlbnQpIHsKICAgIGlmIChmb3JtYWxzID09IG51bGwpIHJldHVybiBwYXJlbnQ7CiAgICBNYXA8U3RyaW5nLCBEZWNsYXJhdGlvbj4gbG9jYWwgPSA8U3RyaW5nLCBEZWNsYXJhdGlvbj57fTsKICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gZm9ybWFscykgewogICAgICBpZiAoIWlzQ29uc3RydWN0b3IgfHwgIWZvcm1hbC5pc0luaXRpYWxpemluZ0Zvcm1hbCkgewogICAgICAgIGxvY2FsW2Zvcm1hbC5uYW1lXSA9IGZvcm1hbDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBTY29wZShsb2NhbCwgbnVsbCwgcGFyZW50LCAiZm9ybWFsIHBhcmFtZXRlciIsCiAgICAgICAgaXNNb2RpZmlhYmxlOiBmYWxzZSk7CiAgfQoKICBTY29wZSBjb21wdXRlRm9ybWFsUGFyYW1ldGVySW5pdGlhbGl6ZXJTY29wZShTY29wZSBwYXJlbnQpIHsKICAgIC8vIEZyb20KICAgIC8vIFtkYXJ0TGFuZ1NwZWMudGV4XSguLi8uLi8uLi8uLi8uLi8uLi9kb2NzL2xhbmd1YWdlL2RhcnRMYW5nU3BlYy50ZXgpIGF0CiAgICAvLyByZXZpc2lvbiA5NGIyM2QzYjEyNWU5ZDI0NmUwN2EyYjQzYjYxNzQwNzU5YTBkYWNlOgogICAgLy8KICAgIC8vIFdoZW4gdGhlIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdCBvZiBhIG5vbi1yZWRpcmVjdGluZyBnZW5lcmF0aXZlCiAgICAvLyBjb25zdHJ1Y3RvciBjb250YWlucyBhbnkgaW5pdGlhbGl6aW5nIGZvcm1hbHMsIGEgbmV3IHNjb3BlIGlzCiAgICAvLyBpbnRyb2R1Y2VkLCB0aGUgX2Zvcm1hbCBwYXJhbWV0ZXIgaW5pdGlhbGl6ZXIgc2NvcGVfLCB3aGljaCBpcyB0aGUKICAgIC8vIGN1cnJlbnQgc2NvcGUgb2YgdGhlIGluaXRpYWxpemVyIGxpc3Qgb2YgdGhlIGNvbnN0cnVjdG9yLCBhbmQgd2hpY2ggaXMKICAgIC8vIGVuY2xvc2VkIGluIHRoZSBzY29wZSB3aGVyZSB0aGUgY29uc3RydWN0b3IgaXMgZGVjbGFyZWQuICBFYWNoCiAgICAvLyBpbml0aWFsaXppbmcgZm9ybWFsIGluIHRoZSBmb3JtYWwgcGFyYW1ldGVyIGxpc3QgaW50cm9kdWNlcyBhIGZpbmFsCiAgICAvLyBsb2NhbCB2YXJpYWJsZSBpbnRvIHRoZSBmb3JtYWwgcGFyYW1ldGVyIGluaXRpYWxpemVyIHNjb3BlLCBidXQgbm90IGludG8KICAgIC8vIHRoZSBmb3JtYWwgcGFyYW1ldGVyIHNjb3BlOyBldmVyeSBvdGhlciBmb3JtYWwgcGFyYW1ldGVyIGludHJvZHVjZXMgYQogICAgLy8gbG9jYWwgdmFyaWFibGUgaW50byBib3RoIHRoZSBmb3JtYWwgcGFyYW1ldGVyIHNjb3BlIGFuZCB0aGUgZm9ybWFsCiAgICAvLyBwYXJhbWV0ZXIgaW5pdGlhbGl6ZXIgc2NvcGUuCgogICAgaWYgKGZvcm1hbHMgPT0gbnVsbCkgcmV0dXJuIHBhcmVudDsKICAgIE1hcDxTdHJpbmcsIERlY2xhcmF0aW9uPiBsb2NhbCA9IDxTdHJpbmcsIERlY2xhcmF0aW9uPnt9OwogICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgIGxvY2FsW2Zvcm1hbC5uYW1lXSA9IGZvcm1hbC5mb3JGb3JtYWxQYXJhbWV0ZXJJbml0aWFsaXplclNjb3BlKCk7CiAgICB9CiAgICByZXR1cm4gbmV3IFNjb3BlKGxvY2FsLCBudWxsLCBwYXJlbnQsICJmb3JtYWwgcGFyYW1ldGVyIGluaXRpYWxpemVyIiwKICAgICAgICBpc01vZGlmaWFibGU6IGZhbHNlKTsKICB9CgogIC8vLyBUaGlzIHNjb3BlIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhbnkgc2NvcGUgc3BlY2lmaWVkIGluIHRoZSBEYXJ0CiAgLy8vIFByb2dyYW1taW5nIExhbmd1YWdlIFNwZWNpZmljdGlvbiwgNHRoIGVkLiBJdCdzIGFuIHVuc3BlY2lmaWVkIGV4dGVuc2lvbgogIC8vLyB0byBzdXBwb3J0IGdlbmVyaWMgbWV0aG9kcy4KICBTY29wZSBjb21wdXRlVHlwZVBhcmFtZXRlclNjb3BlKFNjb3BlIHBhcmVudCkgewogICAgaWYgKHR5cGVWYXJpYWJsZXMgPT0gbnVsbCkgcmV0dXJuIHBhcmVudDsKICAgIE1hcDxTdHJpbmcsIERlY2xhcmF0aW9uPiBsb2NhbCA9IDxTdHJpbmcsIERlY2xhcmF0aW9uPnt9OwogICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHZhcmlhYmxlIGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgbG9jYWxbdmFyaWFibGUubmFtZV0gPSB2YXJpYWJsZTsKICAgIH0KICAgIHJldHVybiBuZXcgU2NvcGUobG9jYWwsIG51bGwsIHBhcmVudCwgInR5cGUgcGFyYW1ldGVyIiwKICAgICAgICBpc01vZGlmaWFibGU6IGZhbHNlKTsKICB9CgogIEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZ2V0Rm9ybWFsKFN0cmluZyBuYW1lKSB7CiAgICBpZiAoZm9ybWFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gZm9ybWFscykgewogICAgICAgIGlmIChmb3JtYWwubmFtZSA9PSBuYW1lKSByZXR1cm4gZm9ybWFsOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGZpbmFsIFN0cmluZyBuYXRpdmVNZXRob2ROYW1lOwoKICBGdW5jdGlvbk5vZGUgZnVuY3Rpb247CgogIFN0YXRlbWVudCBhY3R1YWxCb2R5OwoKICBGdW5jdGlvbkJ1aWxkZXIgZ2V0IGFjdHVhbE9yaWdpbjsKCiAgdm9pZCBzZXQgYm9keShTdGF0ZW1lbnQgbmV3Qm9keSkgewovLyAgICBpZiAobmV3Qm9keSAhPSBudWxsKSB7Ci8vICAgICAgaWYgKGlzQWJzdHJhY3QpIHsKLy8gICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBJcyB0aGlzIGNoZWNrIG5lZWRlZD8KLy8gICAgICAgIHJldHVybiBpbnRlcm5hbFByb2JsZW0obWVzc2FnZUludGVybmFsUHJvYmxlbUJvZHlPbkFic3RyYWN0TWV0aG9kLAovLyAgICAgICAgICAgIG5ld0JvZHkuZmlsZU9mZnNldCwgZmlsZVVyaSk7Ci8vICAgICAgfQovLyAgICB9CiAgICBhY3R1YWxCb2R5ID0gbmV3Qm9keTsKICAgIGlmIChmdW5jdGlvbiAhPSBudWxsKSB7CiAgICAgIC8vIEEgZm9yd2FyZGluZyBzZW1pLXN0dWIgaXMgYSBtZXRob2QgdGhhdCBpcyBhYnN0cmFjdCBpbiB0aGUgc291cmNlIGNvZGUsCiAgICAgIC8vIGJ1dCB3aGljaCBuZWVkcyB0byBoYXZlIGEgZm9yd2FyZGluZyBzdHViIGJvZHkgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQKICAgICAgLy8gY292YXJpYW5jZSBjaGVja3Mgb2NjdXIuICBXZSBkb24ndCB3YW50IHRvIHJlcGxhY2UgdGhlIGZvcndhcmRpbmcgc3R1YgogICAgICAvLyBib2R5IHdpdGggbnVsbC4KICAgICAgdmFyIHBhcmVudCA9IGZ1bmN0aW9uLnBhcmVudDsKICAgICAgaWYgKCEobmV3Qm9keSA9PSBudWxsICYmCiAgICAgICAgICBwYXJlbnQgaXMgUHJvY2VkdXJlICYmCiAgICAgICAgICBwYXJlbnQuaXNGb3J3YXJkaW5nU2VtaVN0dWIpKSB7CiAgICAgICAgZnVuY3Rpb24uYm9keSA9IG5ld0JvZHk7CiAgICAgICAgbmV3Qm9keT8ucGFyZW50ID0gZnVuY3Rpb247CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgc2V0UmVkaXJlY3RpbmdGYWN0b3J5Qm9keShNZW1iZXIgdGFyZ2V0LCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBpZiAoYWN0dWFsQm9keSAhPSBudWxsKSB7CiAgICAgIHVuZXhwZWN0ZWQoIm51bGwiLCAiJHthY3R1YWxCb2R5LnJ1bnRpbWVUeXBlfSIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgfQogICAgYWN0dWFsQm9keSA9IG5ldyBSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KHRhcmdldCwgdHlwZUFyZ3VtZW50cyk7CiAgICBmdW5jdGlvbi5ib2R5ID0gYWN0dWFsQm9keTsKICAgIGFjdHVhbEJvZHk/LnBhcmVudCA9IGZ1bmN0aW9uOwogICAgaWYgKGlzUGF0Y2gpIHsKICAgICAgYWN0dWFsT3JpZ2luLnNldFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkodGFyZ2V0LCB0eXBlQXJndW1lbnRzKTsKICAgIH0KICB9CgogIFN0YXRlbWVudCBnZXQgYm9keSA9PiBhY3R1YWxCb2R5ID8/PSBuZXcgRW1wdHlTdGF0ZW1lbnQoKTsKCiAgYm9vbCBnZXQgaXNOYXRpdmUgPT4gbmF0aXZlTWV0aG9kTmFtZSAhPSBudWxsOwoKICBGdW5jdGlvbk5vZGUgYnVpbGRGdW5jdGlvbihMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICBhc3NlcnQoZnVuY3Rpb24gPT0gbnVsbCk7CiAgICBGdW5jdGlvbk5vZGUgcmVzdWx0ID0gbmV3IEZ1bmN0aW9uTm9kZShib2R5LCBhc3luY01hcmtlcjogYXN5bmNNb2RpZmllcik7CiAgICBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHkgbmVlZHNDaGVja1Zpc2l0b3I7CiAgICBpZiAoIWlzQ29uc3RydWN0b3IgJiYgIWlzRmFjdG9yeSAmJiBwYXJlbnQgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIENsYXNzIGVuY2xvc2luZ0NsYXNzID0gcGFyZW50LnRhcmdldDsKICAgICAgaWYgKGVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgICBuZWVkc0NoZWNrVmlzaXRvciA9IG5ldyBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHkoCiAgICAgICAgICAgIGVuY2xvc2luZ0NsYXNzLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgICAvLyBXZSBhcmUgY2hlY2tpbmcgdGhlIHBhcmFtZXRlciB0eXBlcyB3aGljaCBhcmUgaW4gYSBjb250cmF2YXJpYW50IHBvc2l0aW9uLgogICAgICAgICAgICBpbml0aWFsVmFyaWFuY2U6IFZhcmlhbmNlLmNvbnRyYXZhcmlhbnQpOwogICAgICB9CiAgICB9CiAgICBpZiAodHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0IGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgICBUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciA9IHQucGFyYW1ldGVyOwogICAgICAgIHJlc3VsdC50eXBlUGFyYW1ldGVycy5hZGQocGFyYW1ldGVyKTsKICAgICAgICBpZiAobmVlZHNDaGVja1Zpc2l0b3IgIT0gbnVsbCkgewogICAgICAgICAgaWYgKHBhcmFtZXRlci5ib3VuZC5hY2NlcHQobmVlZHNDaGVja1Zpc2l0b3IpKSB7CiAgICAgICAgICAgIHBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0UGFyZW50cyhyZXN1bHQudHlwZVBhcmFtZXRlcnMsIHJlc3VsdCk7CiAgICB9CiAgICBpZiAoZm9ybWFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgaW4gZm9ybWFscykgewogICAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyID0gZm9ybWFsLmJ1aWxkKGxpYnJhcnksIDApOwogICAgICAgIGlmIChuZWVkc0NoZWNrVmlzaXRvciAhPSBudWxsKSB7CiAgICAgICAgICBpZiAocGFyYW1ldGVyLnR5cGUuYWNjZXB0KG5lZWRzQ2hlY2tWaXNpdG9yKSkgewogICAgICAgICAgICBwYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChmb3JtYWwuaXNOYW1lZCkgewogICAgICAgICAgcmVzdWx0Lm5hbWVkUGFyYW1ldGVycy5hZGQocGFyYW1ldGVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzdWx0LnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmFkZChwYXJhbWV0ZXIpOwogICAgICAgIH0KICAgICAgICBwYXJhbWV0ZXIucGFyZW50ID0gcmVzdWx0OwogICAgICAgIGlmIChmb3JtYWwuaXNSZXF1aXJlZCkgewogICAgICAgICAgcmVzdWx0LnJlcXVpcmVkUGFyYW1ldGVyQ291bnQrKzsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChpc1NldHRlciAmJiAoZm9ybWFscz8ubGVuZ3RoICE9IDEgfHwgZm9ybWFsc1swXS5pc09wdGlvbmFsKSkgewogICAgICAvLyBSZXBsYWNlIGlsbGVnYWwgcGFyYW1ldGVycyBieSBzaW5nbGUgZHVtbXkgcGFyYW1ldGVyLgogICAgICAvLyBEbyB0aGlzIGFmdGVyIGJ1aWxkaW5nIHRoZSBwYXJhbWV0ZXJzLCBzaW5jZSB0aGUgZGlldCBsaXN0ZW5lcgogICAgICAvLyBhc3N1bWVzIHRoYXQgcGFyYW1ldGVycyBhcmUgYnVpbHQsIGV2ZW4gaWYgaWxsZWdhbCBpbiBudW1iZXIuCiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyID0KICAgICAgICAgIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uSnVkZ21lbnQoIiNzeW50aGV0aWMiLCAwKTsKICAgICAgcmVzdWx0LnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmNsZWFyKCk7CiAgICAgIHJlc3VsdC5wb3NpdGlvbmFsUGFyYW1ldGVycy5hZGQocGFyYW1ldGVyKTsKICAgICAgcGFyYW1ldGVyLnBhcmVudCA9IHJlc3VsdDsKICAgICAgcmVzdWx0Lm5hbWVkUGFyYW1ldGVycy5jbGVhcigpOwogICAgICByZXN1bHQucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA9IDE7CiAgICB9CiAgICBpZiAocmV0dXJuVHlwZSAhPSBudWxsKSB7CiAgICAgIHJlc3VsdC5yZXR1cm5UeXBlID0gcmV0dXJuVHlwZS5idWlsZChsaWJyYXJ5KTsKICAgIH0KICAgIGlmICghaXNDb25zdHJ1Y3RvciAmJiAhaXNJbnN0YW5jZU1lbWJlciAmJiBwYXJlbnQgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMgPSBwYXJlbnQudGFyZ2V0LnR5cGVQYXJhbWV0ZXJzOwogICAgICBpZiAodHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uOwogICAgICAgIERhcnRUeXBlIHJlbW92ZVR5cGVWYXJpYWJsZXMoRGFydFR5cGUgdHlwZSkgewogICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbiA9PSBudWxsKSB7CiAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgICAgICAgICAgZm9yIChUeXBlUGFyYW1ldGVyIHBhcmFtZXRlciBpbiB0eXBlUGFyYW1ldGVycykgewogICAgICAgICAgICAgIHN1YnN0aXR1dGlvbltwYXJhbWV0ZXJdID0gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgICAgIG1lc3NhZ2VOb25JbnN0YW5jZVR5cGVWYXJpYWJsZVVzZSwgY2hhck9mZnNldCwgbm9MZW5ndGgsIGZpbGVVcmkpOwogICAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGUodHlwZSwgc3Vic3RpdHV0aW9uKTsKICAgICAgICB9CgogICAgICAgIFNldDxUeXBlUGFyYW1ldGVyPiBzZXQgPSB0eXBlUGFyYW1ldGVycy50b1NldCgpOwogICAgICAgIGZvciAoVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgaW4gcmVzdWx0LnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgICAgICBpZiAoY29udGFpbnNUeXBlVmFyaWFibGUocGFyYW1ldGVyLnR5cGUsIHNldCkpIHsKICAgICAgICAgICAgcGFyYW1ldGVyLnR5cGUgPSByZW1vdmVUeXBlVmFyaWFibGVzKHBhcmFtZXRlci50eXBlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yIChWYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciBpbiByZXN1bHQubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgICAgICBpZiAoY29udGFpbnNUeXBlVmFyaWFibGUocGFyYW1ldGVyLnR5cGUsIHNldCkpIHsKICAgICAgICAgICAgcGFyYW1ldGVyLnR5cGUgPSByZW1vdmVUeXBlVmFyaWFibGVzKHBhcmFtZXRlci50eXBlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGNvbnRhaW5zVHlwZVZhcmlhYmxlKHJlc3VsdC5yZXR1cm5UeXBlLCBzZXQpKSB7CiAgICAgICAgICByZXN1bHQucmV0dXJuVHlwZSA9IHJlbW92ZVR5cGVWYXJpYWJsZXMocmVzdWx0LnJldHVyblR5cGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKHBhcmVudCBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgQ2xhc3NCdWlsZGVyIGNscyA9IHBhcmVudDsKICAgICAgaWYgKGNscy5pc0V4dGVuc2lvbiAmJiBpc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgICAgZXh0ZW5zaW9uVGhpcyA9IHJlc3VsdC5wb3NpdGlvbmFsUGFyYW1ldGVycy5maXJzdDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZ1bmN0aW9uID0gcmVzdWx0OwogIH0KCiAgTWVtYmVyIGJ1aWxkKFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnkpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIE1ldGFkYXRhQnVpbGRlci5idWlsZEFubm90YXRpb25zKAogICAgICAgIHRhcmdldCwgbWV0YWRhdGEsIGxpYnJhcnksIGlzQ2xhc3NNZW1iZXIgPyBwYXJlbnQgOiBudWxsLCB0aGlzKTsKCiAgICBpZiAoZm9ybWFscyAhPSBudWxsKSB7CiAgICAgIC8vIEZvciBjb25zdCBjb25zdHJ1Y3RvcnMgd2UgbmVlZCB0byBpbmNsdWRlIGRlZmF1bHQgcGFyYW1ldGVyIHZhbHVlcwogICAgICAvLyBpbnRvIHRoZSBvdXRsaW5lLiBGb3IgYWxsIG90aGVyIGZvcm1hbHMgd2UgbmVlZCB0byBjYWxsCiAgICAgIC8vIGJ1aWxkT3V0bGluZUV4cHJlc3Npb25zIHRvIGNsZWFyIGluaXRpYWxpemVyVG9rZW4gdG8gcHJldmVudAogICAgICAvLyBjb25zdW1pbmcgdG9vIG11Y2ggbWVtb3J5LgogICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsIGluIGZvcm1hbHMpIHsKICAgICAgICBmb3JtYWwuYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnMobGlicmFyeSk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgYmVjb21lTmF0aXZlKExvYWRlciBsb2FkZXIpIHsKICAgIERlY2xhcmF0aW9uIGNvbnN0cnVjdG9yID0gbG9hZGVyLmdldE5hdGl2ZUFubm90YXRpb24oKTsKICAgIEFyZ3VtZW50cyBhcmd1bWVudHMgPQogICAgICAgIG5ldyBBcmd1bWVudHMoPEV4cHJlc3Npb24+W25ldyBTdHJpbmdMaXRlcmFsKG5hdGl2ZU1ldGhvZE5hbWUpXSk7CiAgICBFeHByZXNzaW9uIGFubm90YXRpb247CiAgICBpZiAoY29uc3RydWN0b3IuaXNDb25zdHJ1Y3RvcikgewogICAgICBhbm5vdGF0aW9uID0gbmV3IENvbnN0cnVjdG9ySW52b2NhdGlvbihjb25zdHJ1Y3Rvci50YXJnZXQsIGFyZ3VtZW50cykKICAgICAgICAuLmlzQ29uc3QgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgYW5ub3RhdGlvbiA9IG5ldyBTdGF0aWNJbnZvY2F0aW9uKGNvbnN0cnVjdG9yLnRhcmdldCwgYXJndW1lbnRzKQogICAgICAgIC4uaXNDb25zdCA9IHRydWU7CiAgICB9CiAgICB0YXJnZXQuYWRkQW5ub3RhdGlvbihhbm5vdGF0aW9uKTsKICB9CgogIGJvb2wgY2hlY2tQYXRjaChGdW5jdGlvbkJ1aWxkZXIgcGF0Y2gpIHsKICAgIGlmICghaXNFeHRlcm5hbCkgewogICAgICBwYXRjaC5saWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgICBtZXNzYWdlUGF0Y2hOb25FeHRlcm5hbCwgcGF0Y2guY2hhck9mZnNldCwgbm9MZW5ndGgsIHBhdGNoLmZpbGVVcmksCiAgICAgICAgICBjb250ZXh0OiBbCiAgICAgICAgICAgIG1lc3NhZ2VQYXRjaERlY2xhcmF0aW9uT3JpZ2luLndpdGhMb2NhdGlvbigKICAgICAgICAgICAgICAgIGZpbGVVcmksIGNoYXJPZmZzZXQsIG5vTGVuZ3RoKQogICAgICAgICAgXSk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgdm9pZCByZXBvcnRQYXRjaE1pc21hdGNoKERlY2xhcmF0aW9uIHBhdGNoKSB7CiAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZVBhdGNoRGVjbGFyYXRpb25NaXNtYXRjaCwgcGF0Y2guY2hhck9mZnNldCwKICAgICAgICBub0xlbmd0aCwgcGF0Y2guZmlsZVVyaSwgY29udGV4dDogWwogICAgICBtZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk9yaWdpbi53aXRoTG9jYXRpb24oZmlsZVVyaSwgY2hhck9mZnNldCwgbm9MZW5ndGgpCiAgICBdKTsKICB9Cn0KCmNsYXNzIFByb2NlZHVyZUJ1aWxkZXIgZXh0ZW5kcyBGdW5jdGlvbkJ1aWxkZXIgewogIGZpbmFsIFByb2NlZHVyZSBwcm9jZWR1cmU7CiAgZmluYWwgaW50IGNoYXJPcGVuUGFyZW5PZmZzZXQ7CgogIEFzeW5jTWFya2VyIGFjdHVhbEFzeW5jTW9kaWZpZXIgPSBBc3luY01hcmtlci5TeW5jOwoKICBAb3ZlcnJpZGUKICBQcm9jZWR1cmVCdWlsZGVyIGFjdHVhbE9yaWdpbjsKCiAgYm9vbCBoYWRUeXBlc0luZmVycmVkID0gZmFsc2U7CgogIFByb2NlZHVyZUJ1aWxkZXIoCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgaW50IG1vZGlmaWVycywKICAgICAgVHlwZUJ1aWxkZXIgcmV0dXJuVHlwZSwKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcywKICAgICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzLAogICAgICBQcm9jZWR1cmVLaW5kIGtpbmQsCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGNvbXBpbGF0aW9uVW5pdCwKICAgICAgaW50IHN0YXJ0Q2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIHRoaXMuY2hhck9wZW5QYXJlbk9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQsCiAgICAgIFtTdHJpbmcgbmF0aXZlTWV0aG9kTmFtZV0pCiAgICAgIDogcHJvY2VkdXJlID0KICAgICAgICAgICAgbmV3IFByb2NlZHVyZShudWxsLCBraW5kLCBudWxsLCBmaWxlVXJpOiBjb21waWxhdGlvblVuaXQ/LmZpbGVVcmkpCiAgICAgICAgICAgICAgLi5zdGFydEZpbGVPZmZzZXQgPSBzdGFydENoYXJPZmZzZXQKICAgICAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0CiAgICAgICAgICAgICAgLi5maWxlRW5kT2Zmc2V0ID0gY2hhckVuZE9mZnNldCwKICAgICAgICBzdXBlcihtZXRhZGF0YSwgbW9kaWZpZXJzLCByZXR1cm5UeXBlLCBuYW1lLCB0eXBlVmFyaWFibGVzLCBmb3JtYWxzLAogICAgICAgICAgICBjb21waWxhdGlvblVuaXQsIGNoYXJPZmZzZXQsIG5hdGl2ZU1ldGhvZE5hbWUpOwoKICBAb3ZlcnJpZGUKICBQcm9jZWR1cmVCdWlsZGVyIGdldCBvcmlnaW4gPT4gYWN0dWFsT3JpZ2luID8/IHRoaXM7CgogIFByb2NlZHVyZUtpbmQgZ2V0IGtpbmQgPT4gcHJvY2VkdXJlLmtpbmQ7CgogIEFzeW5jTWFya2VyIGdldCBhc3luY01vZGlmaWVyID0+IGFjdHVhbEFzeW5jTW9kaWZpZXI7CgogIFN0YXRlbWVudCBnZXQgYm9keSB7CiAgICBpZiAoYWN0dWFsQm9keSA9PSBudWxsICYmICFpc0Fic3RyYWN0ICYmICFpc0V4dGVybmFsKSB7CiAgICAgIGFjdHVhbEJvZHkgPSBuZXcgRW1wdHlTdGF0ZW1lbnQoKTsKICAgIH0KICAgIHJldHVybiBhY3R1YWxCb2R5OwogIH0KCiAgdm9pZCBzZXQgYXN5bmNNb2RpZmllcihBc3luY01hcmtlciBuZXdNb2RpZmllcikgewogICAgYWN0dWFsQXN5bmNNb2RpZmllciA9IG5ld01vZGlmaWVyOwogICAgaWYgKGZ1bmN0aW9uICE9IG51bGwpIHsKICAgICAgLy8gTm8gcGFyZW50LCBpdCdzIGFuIGVudW0uCiAgICAgIGZ1bmN0aW9uLmFzeW5jTWFya2VyID0gYWN0dWFsQXN5bmNNb2RpZmllcjsKICAgICAgZnVuY3Rpb24uZGFydEFzeW5jTWFya2VyID0gYWN0dWFsQXN5bmNNb2RpZmllcjsKICAgIH0KICB9CgogIGJvb2wgZ2V0IGlzRWxpZ2libGVGb3JUb3BMZXZlbEluZmVyZW5jZSB7CiAgICBpZiAobGlicmFyeS5sZWdhY3lNb2RlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoaXNJbnN0YW5jZU1lbWJlcikgewogICAgICBpZiAocmV0dXJuVHlwZSA9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICAgIGZvciAodmFyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgICAgICBpZiAoZm9ybWFsLnR5cGUgPT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBQcm9jZWR1cmUgYnVpbGQoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgLy8gVE9ETyhhaGUpOiBJIHRoaW5rIHdlIG1heSBjYWxsIHRoaXMgdHdpY2Ugb24gcGFydHMuIEludmVzdGlnYXRlLgogICAgaWYgKHByb2NlZHVyZS5uYW1lID09IG51bGwpIHsKICAgICAgcHJvY2VkdXJlLmZ1bmN0aW9uID0gYnVpbGRGdW5jdGlvbihsaWJyYXJ5KTsKICAgICAgcHJvY2VkdXJlLmZ1bmN0aW9uLnBhcmVudCA9IHByb2NlZHVyZTsKICAgICAgcHJvY2VkdXJlLmZ1bmN0aW9uLmZpbGVPZmZzZXQgPSBjaGFyT3BlblBhcmVuT2Zmc2V0OwogICAgICBwcm9jZWR1cmUuZnVuY3Rpb24uZmlsZUVuZE9mZnNldCA9IHByb2NlZHVyZS5maWxlRW5kT2Zmc2V0OwogICAgICBwcm9jZWR1cmUuaXNBYnN0cmFjdCA9IGlzQWJzdHJhY3Q7CiAgICAgIHByb2NlZHVyZS5pc1N0YXRpYyA9IGlzU3RhdGljOwogICAgICBwcm9jZWR1cmUuaXNFeHRlcm5hbCA9IGlzRXh0ZXJuYWw7CiAgICAgIHByb2NlZHVyZS5pc0NvbnN0ID0gaXNDb25zdDsKICAgICAgcHJvY2VkdXJlLm5hbWUgPSBuZXcgTmFtZShuYW1lLCBsaWJyYXJ5LnRhcmdldCk7CiAgICB9CiAgICByZXR1cm4gcHJvY2VkdXJlOwogIH0KCiAgUHJvY2VkdXJlIGdldCB0YXJnZXQgPT4gb3JpZ2luLnByb2NlZHVyZTsKCiAgQG92ZXJyaWRlCiAgaW50IGZpbmlzaFBhdGNoKCkgewogICAgaWYgKCFpc1BhdGNoKSByZXR1cm4gMDsKCiAgICAvLyBUT0RPKGFoZSk6IHJlc3RvcmUgZmlsZS1vZmZzZXQgb25jZSB3ZSB0cmFjayBib3RoIG9yaWdpbiBhbmQgcGF0Y2ggZmlsZQogICAgLy8gVVJJcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zMTU3OQogICAgb3JpZ2luLnByb2NlZHVyZS5maWxlVXJpID0gZmlsZVVyaTsKICAgIG9yaWdpbi5wcm9jZWR1cmUuc3RhcnRGaWxlT2Zmc2V0ID0gcHJvY2VkdXJlLnN0YXJ0RmlsZU9mZnNldDsKICAgIG9yaWdpbi5wcm9jZWR1cmUuZmlsZU9mZnNldCA9IHByb2NlZHVyZS5maWxlT2Zmc2V0OwogICAgb3JpZ2luLnByb2NlZHVyZS5maWxlRW5kT2Zmc2V0ID0gcHJvY2VkdXJlLmZpbGVFbmRPZmZzZXQ7CiAgICBvcmlnaW4ucHJvY2VkdXJlLmFubm90YXRpb25zCiAgICAgICAgLmZvckVhY2goKG0pID0+IG0uZmlsZU9mZnNldCA9IHByb2NlZHVyZS5maWxlT2Zmc2V0KTsKCiAgICBvcmlnaW4ucHJvY2VkdXJlLmlzQWJzdHJhY3QgPSBwcm9jZWR1cmUuaXNBYnN0cmFjdDsKICAgIG9yaWdpbi5wcm9jZWR1cmUuaXNFeHRlcm5hbCA9IHByb2NlZHVyZS5pc0V4dGVybmFsOwogICAgb3JpZ2luLnByb2NlZHVyZS5mdW5jdGlvbiA9IHByb2NlZHVyZS5mdW5jdGlvbjsKICAgIG9yaWdpbi5wcm9jZWR1cmUuZnVuY3Rpb24ucGFyZW50ID0gb3JpZ2luLnByb2NlZHVyZTsKICAgIHJldHVybiAxOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWNvbWVOYXRpdmUoTG9hZGVyIGxvYWRlcikgewogICAgcHJvY2VkdXJlLmlzRXh0ZXJuYWwgPSB0cnVlOwogICAgc3VwZXIuYmVjb21lTmF0aXZlKGxvYWRlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFwcGx5UGF0Y2goRGVjbGFyYXRpb24gcGF0Y2gpIHsKICAgIGlmIChwYXRjaCBpcyBQcm9jZWR1cmVCdWlsZGVyKSB7CiAgICAgIGlmIChjaGVja1BhdGNoKHBhdGNoKSkgewogICAgICAgIHBhdGNoLmFjdHVhbE9yaWdpbiA9IHRoaXM7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlcG9ydFBhdGNoTWlzbWF0Y2gocGF0Y2gpOwogICAgfQogIH0KfQoKLy8gVE9ETyhhaGUpOiBNb3ZlIHRoaXMgdG8gb3duIGZpbGU/CmNsYXNzIENvbnN0cnVjdG9yQnVpbGRlciBleHRlbmRzIEZ1bmN0aW9uQnVpbGRlciB7CiAgZmluYWwgQ29uc3RydWN0b3IgY29uc3RydWN0b3I7CgogIGZpbmFsIGludCBjaGFyT3BlblBhcmVuT2Zmc2V0OwoKICBib29sIGhhc01vdmVkU3VwZXJJbml0aWFsaXplciA9IGZhbHNlOwoKICBTdXBlckluaXRpYWxpemVyIHN1cGVySW5pdGlhbGl6ZXI7CgogIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgcmVkaXJlY3RpbmdJbml0aWFsaXplcjsKCiAgVG9rZW4gYmVnaW5Jbml0aWFsaXplcnM7CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yQnVpbGRlciBhY3R1YWxPcmlnaW47CgogIENvbnN0cnVjdG9yQnVpbGRlcigKICAgICAgTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLAogICAgICBpbnQgbW9kaWZpZXJzLAogICAgICBUeXBlQnVpbGRlciByZXR1cm5UeXBlLAogICAgICBTdHJpbmcgbmFtZSwKICAgICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzLAogICAgICBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+IGZvcm1hbHMsCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGNvbXBpbGF0aW9uVW5pdCwKICAgICAgaW50IHN0YXJ0Q2hhck9mZnNldCwKICAgICAgaW50IGNoYXJPZmZzZXQsCiAgICAgIHRoaXMuY2hhck9wZW5QYXJlbk9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQsCiAgICAgIFtTdHJpbmcgbmF0aXZlTWV0aG9kTmFtZV0pCiAgICAgIDogY29uc3RydWN0b3IgPSBuZXcgQ29uc3RydWN0b3IobnVsbCwgZmlsZVVyaTogY29tcGlsYXRpb25Vbml0Py5maWxlVXJpKQogICAgICAgICAgLi5zdGFydEZpbGVPZmZzZXQgPSBzdGFydENoYXJPZmZzZXQKICAgICAgICAgIC4uZmlsZU9mZnNldCA9IGNoYXJPZmZzZXQKICAgICAgICAgIC4uZmlsZUVuZE9mZnNldCA9IGNoYXJFbmRPZmZzZXQsCiAgICAgICAgc3VwZXIobWV0YWRhdGEsIG1vZGlmaWVycywgcmV0dXJuVHlwZSwgbmFtZSwgdHlwZVZhcmlhYmxlcywgZm9ybWFscywKICAgICAgICAgICAgY29tcGlsYXRpb25Vbml0LCBjaGFyT2Zmc2V0LCBuYXRpdmVNZXRob2ROYW1lKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JCdWlsZGVyIGdldCBvcmlnaW4gPT4gYWN0dWFsT3JpZ2luID8/IHRoaXM7CgogIGJvb2wgZ2V0IGlzSW5zdGFuY2VNZW1iZXIgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzQ29uc3RydWN0b3IgPT4gdHJ1ZTsKCiAgQXN5bmNNYXJrZXIgZ2V0IGFzeW5jTW9kaWZpZXIgPT4gQXN5bmNNYXJrZXIuU3luYzsKCiAgUHJvY2VkdXJlS2luZCBnZXQga2luZCA9PiBudWxsOwoKICBib29sIGdldCBpc1JlZGlyZWN0aW5nR2VuZXJhdGl2ZUNvbnN0cnVjdG9yIHsKICAgIHJldHVybiBpc1JlZGlyZWN0aW5nR2VuZXJhdGl2ZUNvbnN0cnVjdG9ySW1wbGVtZW50YXRpb24oY29uc3RydWN0b3IpOwogIH0KCiAgYm9vbCBnZXQgaXNFbGlnaWJsZUZvclRvcExldmVsSW5mZXJlbmNlIHsKICAgIGlmIChsaWJyYXJ5LmxlZ2FjeU1vZGUpIHJldHVybiBmYWxzZTsKICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgZm9yICh2YXIgZm9ybWFsIGluIGZvcm1hbHMpIHsKICAgICAgICBpZiAoZm9ybWFsLnR5cGUgPT0gbnVsbCAmJiBmb3JtYWwuaXNJbml0aWFsaXppbmdGb3JtYWwpIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBDb25zdHJ1Y3RvciBidWlsZChTb3VyY2VMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICBpZiAoY29uc3RydWN0b3IubmFtZSA9PSBudWxsKSB7CiAgICAgIGNvbnN0cnVjdG9yLmZ1bmN0aW9uID0gYnVpbGRGdW5jdGlvbihsaWJyYXJ5KTsKICAgICAgY29uc3RydWN0b3IuZnVuY3Rpb24ucGFyZW50ID0gY29uc3RydWN0b3I7CiAgICAgIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLmZpbGVPZmZzZXQgPSBjaGFyT3BlblBhcmVuT2Zmc2V0OwogICAgICBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5maWxlRW5kT2Zmc2V0ID0gY29uc3RydWN0b3IuZmlsZUVuZE9mZnNldDsKICAgICAgY29uc3RydWN0b3IuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMgPSBjb25zdCA8VHlwZVBhcmFtZXRlcj5bXTsKICAgICAgY29uc3RydWN0b3IuaXNDb25zdCA9IGlzQ29uc3Q7CiAgICAgIGNvbnN0cnVjdG9yLmlzRXh0ZXJuYWwgPSBpc0V4dGVybmFsOwogICAgICBjb25zdHJ1Y3Rvci5uYW1lID0gbmV3IE5hbWUobmFtZSwgbGlicmFyeS50YXJnZXQpOwogICAgfQogICAgaWYgKGlzRWxpZ2libGVGb3JUb3BMZXZlbEluZmVyZW5jZSkgewogICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsIGluIGZvcm1hbHMpIHsKICAgICAgICBpZiAoZm9ybWFsLnR5cGUgPT0gbnVsbCAmJiBmb3JtYWwuaXNJbml0aWFsaXppbmdGb3JtYWwpIHsKICAgICAgICAgIGZvcm1hbC5kZWNsYXJhdGlvbi50eXBlID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGlicmFyeS5sb2FkZXIudHlwZUluZmVyZW5jZUVuZ2luZS50b0JlSW5mZXJyZWRbY29uc3RydWN0b3JdID0gbGlicmFyeTsKICAgIH0KICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnMoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgc3VwZXIuYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnMobGlicmFyeSk7CgogICAgLy8gRm9yIG1vZHVsYXIgY29tcGlsYXRpb24gcHVycG9zZXMgd2UgbmVlZCB0byBpbmNsdWRlIGluaXRpYWxpemVycwogICAgLy8gZm9yIGNvbnN0IGNvbnN0cnVjdG9ycyBpbnRvIHRoZSBvdXRsaW5lLgogICAgaWYgKGlzQ29uc3QgJiYgYmVnaW5Jbml0aWFsaXplcnMgIT0gbnVsbCkgewogICAgICBDbGFzc0J1aWxkZXIgY2xhc3NCdWlsZGVyID0gcGFyZW50OwogICAgICBCb2R5QnVpbGRlciBib2R5QnVpbGRlciA9IG5ldyBCb2R5QnVpbGRlci5mb3JPdXRsaW5lRXhwcmVzc2lvbigKICAgICAgICAgIGxpYnJhcnksIGNsYXNzQnVpbGRlciwgdGhpcywgY2xhc3NCdWlsZGVyLnNjb3BlLCBmaWxlVXJpKTsKICAgICAgYm9keUJ1aWxkZXIuY29uc3RhbnRDb250ZXh0ID0gQ29uc3RhbnRDb250ZXh0LmluZmVycmVkOwogICAgICBib2R5QnVpbGRlci5wYXJzZUluaXRpYWxpemVycyhiZWdpbkluaXRpYWxpemVycyk7CiAgICAgIGlmIChsaWJyYXJ5LmxvYWRlciBpcyBTb3VyY2VMb2FkZXIpIHsKICAgICAgICBTb3VyY2VMb2FkZXIgbG9hZGVyID0gbGlicmFyeS5sb2FkZXI7CiAgICAgICAgbG9hZGVyLnRyYW5zZm9ybVBvc3RJbmZlcmVuY2UodGFyZ2V0LCBib2R5QnVpbGRlci50cmFuc2Zvcm1TZXRMaXRlcmFscywKICAgICAgICAgICAgYm9keUJ1aWxkZXIudHJhbnNmb3JtQ29sbGVjdGlvbnMpOwogICAgICB9CiAgICAgIGJvZHlCdWlsZGVyLnJlc29sdmVSZWRpcmVjdGluZ0ZhY3RvcnlUYXJnZXRzKCk7CiAgICB9CiAgICBiZWdpbkluaXRpYWxpemVycyA9IG51bGw7CiAgfQoKICBGdW5jdGlvbk5vZGUgYnVpbGRGdW5jdGlvbihMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICAvLyBBY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gwqc5LjMgdGhlIHJldHVybiB0eXBlIG9mIGEgY29uc3RydWN0b3IKICAgIC8vIGZ1bmN0aW9uIGlzIGl0cyBlbmNsb3NpbmcgY2xhc3MuCiAgICBGdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlID0gc3VwZXIuYnVpbGRGdW5jdGlvbihsaWJyYXJ5KTsKICAgIENsYXNzQnVpbGRlciBlbmNsb3NpbmdDbGFzcyA9IHBhcmVudDsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVQYXJhbWV0ZXJUeXBlcyA9IG5ldyBMaXN0PERhcnRUeXBlPigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbmNsb3NpbmdDbGFzcy50YXJnZXQudHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyID0gZW5jbG9zaW5nQ2xhc3MudGFyZ2V0LnR5cGVQYXJhbWV0ZXJzW2ldOwogICAgICB0eXBlUGFyYW1ldGVyVHlwZXMuYWRkKG5ldyBUeXBlUGFyYW1ldGVyVHlwZSh0eXBlUGFyYW1ldGVyKSk7CiAgICB9CiAgICBmdW5jdGlvbk5vZGUucmV0dXJuVHlwZSA9CiAgICAgICAgbmV3IEludGVyZmFjZVR5cGUoZW5jbG9zaW5nQ2xhc3MudGFyZ2V0LCB0eXBlUGFyYW1ldGVyVHlwZXMpOwogICAgcmV0dXJuIGZ1bmN0aW9uTm9kZTsKICB9CgogIENvbnN0cnVjdG9yIGdldCB0YXJnZXQgPT4gb3JpZ2luLmNvbnN0cnVjdG9yOwoKICB2b2lkIGluamVjdEludmFsaWRJbml0aWFsaXplcigKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBpbnQgY2hhck9mZnNldCwgRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlciBoZWxwZXIpIHsKICAgIExpc3Q8SW5pdGlhbGl6ZXI+IGluaXRpYWxpemVycyA9IGNvbnN0cnVjdG9yLmluaXRpYWxpemVyczsKICAgIEluaXRpYWxpemVyIGxhc3RJbml0aWFsaXplciA9IGluaXRpYWxpemVycy5yZW1vdmVMYXN0KCk7CiAgICBhc3NlcnQobGFzdEluaXRpYWxpemVyID09IHN1cGVySW5pdGlhbGl6ZXIgfHwKICAgICAgICBsYXN0SW5pdGlhbGl6ZXIgPT0gcmVkaXJlY3RpbmdJbml0aWFsaXplcik7CiAgICBJbml0aWFsaXplciBlcnJvciA9IGhlbHBlci5idWlsZEludmFsaWRJbml0aWFsaXplcigKICAgICAgICBoZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oCiAgICAgICAgICAgIGhlbHBlci5idWlsZFByb2JsZW0obWVzc2FnZSwgY2hhck9mZnNldCwgbm9MZW5ndGgpKSwKICAgICAgICBjaGFyT2Zmc2V0KTsKICAgIGluaXRpYWxpemVycy5hZGQoZXJyb3IuLnBhcmVudCA9IGNvbnN0cnVjdG9yKTsKICAgIGluaXRpYWxpemVycy5hZGQobGFzdEluaXRpYWxpemVyKTsKICB9CgogIHZvaWQgYWRkSW5pdGlhbGl6ZXIoCiAgICAgIEluaXRpYWxpemVyIGluaXRpYWxpemVyLCBFeHByZXNzaW9uR2VuZXJhdG9ySGVscGVyIGhlbHBlcikgewogICAgTGlzdDxJbml0aWFsaXplcj4gaW5pdGlhbGl6ZXJzID0gY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzOwogICAgaWYgKGluaXRpYWxpemVyIGlzIFN1cGVySW5pdGlhbGl6ZXIpIHsKICAgICAgaWYgKHN1cGVySW5pdGlhbGl6ZXIgIT0gbnVsbCB8fCByZWRpcmVjdGluZ0luaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICBpbmplY3RJbnZhbGlkSW5pdGlhbGl6ZXIobWVzc2FnZU1vcmVUaGFuT25lU3VwZXJPclRoaXNJbml0aWFsaXplciwKICAgICAgICAgICAgaW5pdGlhbGl6ZXIuZmlsZU9mZnNldCwgaGVscGVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbml0aWFsaXplcnMuYWRkKGluaXRpYWxpemVyLi5wYXJlbnQgPSBjb25zdHJ1Y3Rvcik7CiAgICAgICAgc3VwZXJJbml0aWFsaXplciA9IGluaXRpYWxpemVyOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGluaXRpYWxpemVyIGlzIFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIpIHsKICAgICAgaWYgKHN1cGVySW5pdGlhbGl6ZXIgIT0gbnVsbCB8fCByZWRpcmVjdGluZ0luaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICBpbmplY3RJbnZhbGlkSW5pdGlhbGl6ZXIobWVzc2FnZU1vcmVUaGFuT25lU3VwZXJPclRoaXNJbml0aWFsaXplciwKICAgICAgICAgICAgaW5pdGlhbGl6ZXIuZmlsZU9mZnNldCwgaGVscGVyKTsKICAgICAgfSBlbHNlIGlmIChjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMuaXNOb3RFbXB0eSkgewogICAgICAgIEluaXRpYWxpemVyIGZpcnN0ID0gY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLmZpcnN0OwogICAgICAgIEluaXRpYWxpemVyIGVycm9yID0gaGVscGVyLmJ1aWxkSW52YWxpZEluaXRpYWxpemVyKAogICAgICAgICAgICBoZWxwZXIuZGVzdWdhclN5bnRoZXRpY0V4cHJlc3Npb24oaGVscGVyLmJ1aWxkUHJvYmxlbSgKICAgICAgICAgICAgICAgIG1lc3NhZ2VUaGlzSW5pdGlhbGl6ZXJOb3RBbG9uZSwgZmlyc3QuZmlsZU9mZnNldCwgbm9MZW5ndGgpKSwKICAgICAgICAgICAgZmlyc3QuZmlsZU9mZnNldCk7CiAgICAgICAgaW5pdGlhbGl6ZXJzLmFkZChlcnJvci4ucGFyZW50ID0gY29uc3RydWN0b3IpOwogICAgICB9IGVsc2UgewogICAgICAgIGluaXRpYWxpemVycy5hZGQoaW5pdGlhbGl6ZXIuLnBhcmVudCA9IGNvbnN0cnVjdG9yKTsKICAgICAgICByZWRpcmVjdGluZ0luaXRpYWxpemVyID0gaW5pdGlhbGl6ZXI7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAocmVkaXJlY3RpbmdJbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgIGluamVjdEludmFsaWRJbml0aWFsaXplcigKICAgICAgICAgIG1lc3NhZ2VUaGlzSW5pdGlhbGl6ZXJOb3RBbG9uZSwgaW5pdGlhbGl6ZXIuZmlsZU9mZnNldCwgaGVscGVyKTsKICAgIH0gZWxzZSBpZiAoc3VwZXJJbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgIGluamVjdEludmFsaWRJbml0aWFsaXplcigKICAgICAgICAgIG1lc3NhZ2VTdXBlckluaXRpYWxpemVyTm90TGFzdCwgc3VwZXJJbml0aWFsaXplci5maWxlT2Zmc2V0LCBoZWxwZXIpOwogICAgfSBlbHNlIHsKICAgICAgaW5pdGlhbGl6ZXJzLmFkZChpbml0aWFsaXplci4ucGFyZW50ID0gY29uc3RydWN0b3IpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGZpbmlzaFBhdGNoKCkgewogICAgaWYgKCFpc1BhdGNoKSByZXR1cm4gMDsKCiAgICAvLyBUT0RPKGFoZSk6IHJlc3RvcmUgZmlsZS1vZmZzZXQgb25jZSB3ZSB0cmFjayBib3RoIG9yaWdpbiBhbmQgcGF0Y2ggZmlsZQogICAgLy8gVVJJcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zMTU3OQogICAgb3JpZ2luLmNvbnN0cnVjdG9yLmZpbGVVcmkgPSBmaWxlVXJpOwogICAgb3JpZ2luLmNvbnN0cnVjdG9yLnN0YXJ0RmlsZU9mZnNldCA9IGNvbnN0cnVjdG9yLnN0YXJ0RmlsZU9mZnNldDsKICAgIG9yaWdpbi5jb25zdHJ1Y3Rvci5maWxlT2Zmc2V0ID0gY29uc3RydWN0b3IuZmlsZU9mZnNldDsKICAgIG9yaWdpbi5jb25zdHJ1Y3Rvci5maWxlRW5kT2Zmc2V0ID0gY29uc3RydWN0b3IuZmlsZUVuZE9mZnNldDsKICAgIG9yaWdpbi5jb25zdHJ1Y3Rvci5hbm5vdGF0aW9ucwogICAgICAgIC5mb3JFYWNoKChtKSA9PiBtLmZpbGVPZmZzZXQgPSBjb25zdHJ1Y3Rvci5maWxlT2Zmc2V0KTsKCiAgICBvcmlnaW4uY29uc3RydWN0b3IuaXNFeHRlcm5hbCA9IGNvbnN0cnVjdG9yLmlzRXh0ZXJuYWw7CiAgICBvcmlnaW4uY29uc3RydWN0b3IuZnVuY3Rpb24gPSBjb25zdHJ1Y3Rvci5mdW5jdGlvbjsKICAgIG9yaWdpbi5jb25zdHJ1Y3Rvci5mdW5jdGlvbi5wYXJlbnQgPSBvcmlnaW4uY29uc3RydWN0b3I7CiAgICBvcmlnaW4uY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzID0gY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzOwogICAgc2V0UGFyZW50cyhvcmlnaW4uY29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzLCBvcmlnaW4uY29uc3RydWN0b3IpOwogICAgcmV0dXJuIDE7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlY29tZU5hdGl2ZShMb2FkZXIgbG9hZGVyKSB7CiAgICBjb25zdHJ1Y3Rvci5pc0V4dGVybmFsID0gdHJ1ZTsKICAgIHN1cGVyLmJlY29tZU5hdGl2ZShsb2FkZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhcHBseVBhdGNoKERlY2xhcmF0aW9uIHBhdGNoKSB7CiAgICBpZiAocGF0Y2ggaXMgQ29uc3RydWN0b3JCdWlsZGVyKSB7CiAgICAgIGlmIChjaGVja1BhdGNoKHBhdGNoKSkgewogICAgICAgIHBhdGNoLmFjdHVhbE9yaWdpbiA9IHRoaXM7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlcG9ydFBhdGNoTWlzbWF0Y2gocGF0Y2gpOwogICAgfQogIH0KCiAgdm9pZCBwcmVwYXJlSW5pdGlhbGl6ZXJzKCkgewogICAgLy8gRm9yIGNvbnN0IGNvbnN0cnVjdG9ycyB3ZSBwYXJzZSBpbml0aWFsaXplcnMgYWxyZWFkeSBhdCB0aGUgb3V0bGluaW5nCiAgICAvLyBzdGFnZSwgdGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gbWFrZSBib2R5IGJ1aWxkaW5nIHN0YWdlIHNraXAgaW5pdGlhbGl6ZXIKICAgIC8vIHBhcnNpbmcsIHNvIHdlIHNpbXBseSBjbGVhciBwYXJzZWQgaW5pdGlhbGl6ZXJzIGFuZCByZWJ1aWxkIHRoZW0KICAgIC8vIGFnYWluLgogICAgLy8gTm90ZTogdGhpcyBtZXRob2QgY2xlYXJzIGJvdGggaW5pdGlhbGl6ZXJzIGZyb20gdGhlIHRhcmdldCBLZXJuZWwgbm9kZQogICAgLy8gYW5kIGludGVybmFsIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBwYXJzaW5nIGluaXRpYWxpemVycy4KICAgIGlmICh0YXJnZXQuaXNDb25zdCkgewogICAgICB0YXJnZXQuaW5pdGlhbGl6ZXJzLmxlbmd0aCA9IDA7CiAgICAgIHJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgPSBudWxsOwogICAgICBzdXBlckluaXRpYWxpemVyID0gbnVsbDsKICAgICAgaGFzTW92ZWRTdXBlckluaXRpYWxpemVyID0gZmFsc2U7CiAgICB9CiAgfQp9CgpjbGFzcyBSZWRpcmVjdGluZ0ZhY3RvcnlCdWlsZGVyIGV4dGVuZHMgUHJvY2VkdXJlQnVpbGRlciB7CiAgZmluYWwgQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyIHJlZGlyZWN0aW9uVGFyZ2V0OwogIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIFJlZGlyZWN0aW5nRmFjdG9yeUJ1aWxkZXIoCiAgICAgIExpc3Q8TWV0YWRhdGFCdWlsZGVyPiBtZXRhZGF0YSwKICAgICAgaW50IG1vZGlmaWVycywKICAgICAgVHlwZUJ1aWxkZXIgcmV0dXJuVHlwZSwKICAgICAgU3RyaW5nIG5hbWUsCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gdHlwZVZhcmlhYmxlcywKICAgICAgTGlzdDxGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyPiBmb3JtYWxzLAogICAgICBTb3VyY2VMaWJyYXJ5QnVpbGRlciBjb21waWxhdGlvblVuaXQsCiAgICAgIGludCBzdGFydENoYXJPZmZzZXQsCiAgICAgIGludCBjaGFyT2Zmc2V0LAogICAgICBpbnQgY2hhck9wZW5QYXJlbk9mZnNldCwKICAgICAgaW50IGNoYXJFbmRPZmZzZXQsCiAgICAgIFtTdHJpbmcgbmF0aXZlTWV0aG9kTmFtZSwKICAgICAgdGhpcy5yZWRpcmVjdGlvblRhcmdldF0pCiAgICAgIDogc3VwZXIoCiAgICAgICAgICAgIG1ldGFkYXRhLAogICAgICAgICAgICBtb2RpZmllcnMsCiAgICAgICAgICAgIHJldHVyblR5cGUsCiAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgIHR5cGVWYXJpYWJsZXMsCiAgICAgICAgICAgIGZvcm1hbHMsCiAgICAgICAgICAgIFByb2NlZHVyZUtpbmQuRmFjdG9yeSwKICAgICAgICAgICAgY29tcGlsYXRpb25Vbml0LAogICAgICAgICAgICBzdGFydENoYXJPZmZzZXQsCiAgICAgICAgICAgIGNoYXJPZmZzZXQsCiAgICAgICAgICAgIGNoYXJPcGVuUGFyZW5PZmZzZXQsCiAgICAgICAgICAgIGNoYXJFbmRPZmZzZXQsCiAgICAgICAgICAgIG5hdGl2ZU1ldGhvZE5hbWUpOwoKICBAb3ZlcnJpZGUKICBTdGF0ZW1lbnQgZ2V0IGJvZHkgPT4gYWN0dWFsQm9keTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KE1lbWJlciB0YXJnZXQsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIGlmIChhY3R1YWxCb2R5ICE9IG51bGwpIHsKICAgICAgdW5leHBlY3RlZCgibnVsbCIsICIke2FjdHVhbEJvZHkucnVudGltZVR5cGV9IiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9CgogICAgLy8gRW5zdXJlIHRoYXQgY29uc3RhbnQgZmFjdG9yaWVzIG9ubHkgaGF2ZSBjb25zdGFudCB0YXJnZXRzL2JvZGllcy4KICAgIGlmIChpc0NvbnN0ICYmICF0YXJnZXQuaXNDb25zdCkgewogICAgICBsaWJyYXJ5LmFkZFByb2JsZW0obWVzc2FnZUNvbnN0RmFjdG9yeVJlZGlyZWN0aW9uVG9Ob25Db25zdCwgY2hhck9mZnNldCwKICAgICAgICAgIG5vTGVuZ3RoLCBmaWxlVXJpKTsKICAgIH0KCiAgICBhY3R1YWxCb2R5ID0gbmV3IFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkodGFyZ2V0LCB0eXBlQXJndW1lbnRzKTsKICAgIGZ1bmN0aW9uLmJvZHkgPSBhY3R1YWxCb2R5OwogICAgYWN0dWFsQm9keT8ucGFyZW50ID0gZnVuY3Rpb247CiAgICBpZiAoaXNQYXRjaCkgewogICAgICBpZiAoZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHN1YnN0aXR1dGlvbltmdW5jdGlvbi50eXBlUGFyYW1ldGVyc1tpXV0gPQogICAgICAgICAgICAgIG5ldyBUeXBlUGFyYW1ldGVyVHlwZShhY3R1YWxPcmlnaW4uZnVuY3Rpb24udHlwZVBhcmFtZXRlcnNbaV0pOwogICAgICAgIH0KICAgICAgICBMaXN0PERhcnRUeXBlPiBuZXdUeXBlQXJndW1lbnRzID0KICAgICAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+KHR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5ld1R5cGVBcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIG5ld1R5cGVBcmd1bWVudHNbaV0gPSBzdWJzdGl0dXRlKHR5cGVBcmd1bWVudHNbaV0sIHN1YnN0aXR1dGlvbik7CiAgICAgICAgfQogICAgICAgIHR5cGVBcmd1bWVudHMgPSBuZXdUeXBlQXJndW1lbnRzOwogICAgICB9CiAgICAgIGFjdHVhbE9yaWdpbi5zZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KHRhcmdldCwgdHlwZUFyZ3VtZW50cyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBQcm9jZWR1cmUgYnVpbGQoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgUHJvY2VkdXJlIHJlc3VsdCA9IHN1cGVyLmJ1aWxkKGxpYnJhcnkpOwogICAgcmVzdWx0LmlzUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3IgPSB0cnVlOwogICAgaWYgKHJlZGlyZWN0aW9uVGFyZ2V0LnR5cGVBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICB0eXBlQXJndW1lbnRzID0KICAgICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPihyZWRpcmVjdGlvblRhcmdldC50eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAg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YWdlOmtlcm5lbC9hc3QuZGFydCcKICAgIHNob3cKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgTmFtZWRUeXBlLAogICAgICAgIFN1cGVydHlwZSwKICAgICAgICBUeXBlUGFyYW1ldGVyLAogICAgICAgIFR5cGVkZWZUeXBlOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdyBMb2NhdGVkTWVzc2FnZSwgbWVzc2FnZVN1cGVydHlwZUlzRnVuY3Rpb24sIG5vTGVuZ3RoOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuc3VwcG9ydGVkOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXI7CgpjbGFzcyBGdW5jdGlvblR5cGVCdWlsZGVyIGV4dGVuZHMgVHlwZUJ1aWxkZXIgewogIGZpbmFsIFR5cGVCdWlsZGVyIHJldHVyblR5cGU7CiAgZmluYWwgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzOwogIGZpbmFsIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gZm9ybWFsczsKCiAgRnVuY3Rpb25UeXBlQnVpbGRlcih0aGlzLnJldHVyblR5cGUsIHRoaXMudHlwZVZhcmlhYmxlcywgdGhpcy5mb3JtYWxzKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+IG51bGw7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICJGdW5jdGlvbiI7CgogIEBvdmVycmlkZQogIFN0cmluZ0J1ZmZlciBwcmludE9uKFN0cmluZ0J1ZmZlciBidWZmZXIpIHsKICAgIGlmICh0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgYnVmZmVyLndyaXRlKCI8Iik7CiAgICAgIGJvb2wgaXNGaXJzdCA9IHRydWU7CiAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0IGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgICBpZiAoIWlzRmlyc3QpIHsKICAgICAgICAgIGJ1ZmZlci53cml0ZSgiLCAiKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaXNGaXJzdCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBidWZmZXIud3JpdGUodC5uYW1lKTsKICAgICAgfQogICAgICBidWZmZXIud3JpdGUoIj4iKTsKICAgIH0KICAgIGJ1ZmZlci53cml0ZSgiKCIpOwogICAgaWYgKGZvcm1hbHMgIT0gbnVsbCkgewogICAgICBib29sIGlzRmlyc3QgPSB0cnVlOwogICAgICBmb3IgKGR5bmFtaWMgdCBpbiBmb3JtYWxzKSB7CiAgICAgICAgaWYgKCFpc0ZpcnN0KSB7CiAgICAgICAgICBidWZmZXIud3JpdGUoIiwgIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlzRmlyc3QgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgYnVmZmVyLndyaXRlKHQ/LmZ1bGxOYW1lRm9yRXJyb3JzKTsKICAgICAgfQogICAgfQogICAgYnVmZmVyLndyaXRlKCIpIC0+ICIpOwogICAgYnVmZmVyLndyaXRlKHJldHVyblR5cGU/LmZ1bGxOYW1lRm9yRXJyb3JzKTsKICAgIHJldHVybiBidWZmZXI7CiAgfQoKICBGdW5jdGlvblR5cGUgYnVpbGQoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgW1R5cGVkZWZUeXBlIG9yaWdpbl0pIHsKICAgIERhcnRUeXBlIGJ1aWx0UmV0dXJuVHlwZSA9CiAgICAgICAgcmV0dXJuVHlwZT8uYnVpbGQobGlicmFyeSkgPz8gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgIExpc3Q8RGFydFR5cGU+IHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0gPERhcnRUeXBlPltdOwogICAgTGlzdDxOYW1lZFR5cGU+IG5hbWVkUGFyYW1ldGVyczsKICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50ID0gMDsKICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyIGZvcm1hbCBpbiBmb3JtYWxzKSB7CiAgICAgICAgRGFydFR5cGUgdHlwZSA9IGZvcm1hbC50eXBlPy5idWlsZChsaWJyYXJ5KSA/PyBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICAgIGlmIChmb3JtYWwuaXNQb3NpdGlvbmFsKSB7CiAgICAgICAgICBwb3NpdGlvbmFsUGFyYW1ldGVycy5hZGQodHlwZSk7CiAgICAgICAgICBpZiAoZm9ybWFsLmlzUmVxdWlyZWQpIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQrKzsKICAgICAgICB9IGVsc2UgaWYgKGZvcm1hbC5pc05hbWVkKSB7CiAgICAgICAgICBuYW1lZFBhcmFtZXRlcnMgPz89IDxOYW1lZFR5cGU+W107CiAgICAgICAgICBuYW1lZFBhcmFtZXRlcnMuYWRkKG5ldyBOYW1lZFR5cGUoZm9ybWFsLm5hbWUsIHR5cGUpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG5hbWVkUGFyYW1ldGVycyAhPSBudWxsKSB7CiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLnNvcnQoKTsKICAgICAgfQogICAgfQogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyczsKICAgIGlmICh0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgdHlwZVBhcmFtZXRlcnMgPSA8VHlwZVBhcmFtZXRlcj5bXTsKICAgICAgZm9yIChUeXBlVmFyaWFibGVCdWlsZGVyIHQgaW4gdHlwZVZhcmlhYmxlcykgewogICAgICAgIHR5cGVQYXJhbWV0ZXJzLmFkZCh0LnBhcmFtZXRlcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgRnVuY3Rpb25UeXBlKHBvc2l0aW9uYWxQYXJhbWV0ZXJzLCBidWlsdFJldHVyblR5cGUsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuYW1lZFBhcmFtZXRlcnMgPz8gY29uc3QgPE5hbWVkVHlwZT5bXSwKICAgICAgICB0eXBlUGFyYW1ldGVyczogdHlwZVBhcmFtZXRlcnMgPz8gY29uc3QgPFR5cGVQYXJhbWV0ZXI+W10sCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICB0eXBlZGVmVHlwZTogb3JpZ2luKTsKICB9CgogIFN1cGVydHlwZSBidWlsZFN1cGVydHlwZSgKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKSB7CiAgICBsaWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgbWVzc2FnZVN1cGVydHlwZUlzRnVuY3Rpb24sIGNoYXJPZmZzZXQsIG5vTGVuZ3RoLCBmaWxlVXJpKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgU3VwZXJ0eXBlIGJ1aWxkTWl4ZWRJblR5cGUoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkgewogICAgcmV0dXJuIGJ1aWxkU3VwZXJ0eXBlKGxpYnJhcnksIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYnVpbGRJbnZhbGlkVHlwZShMb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCB7TGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dH0pIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiYnVpbGRJbnZhbGlkVHlwZSIsIG1lc3NhZ2UuY2hhck9mZnNldCwgbWVzc2FnZS51cmkpOwogIH0KCiAgRnVuY3Rpb25UeXBlQnVpbGRlciBjbG9uZShMaXN0PFR5cGVCdWlsZGVyPiBuZXdUeXBlcykgewogICAgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiBjbG9uZWRUeXBlVmFyaWFibGVzOwogICAgaWYgKHR5cGVWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICBjbG9uZWRUeXBlVmFyaWFibGVzID0gbmV3IExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4odHlwZVZhcmlhYmxlcy5sZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsb25lZFR5cGVWYXJpYWJsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBjbG9uZWRUeXBlVmFyaWFibGVzW2ldID0gdHlwZVZhcmlhYmxlc1tpXS5jbG9uZShuZXdUeXBlcyk7CiAgICAgIH0KICAgIH0KICAgIExpc3Q8Rm9ybWFsUGFyYW1ldGVyQnVpbGRlcj4gY2xvbmVkRm9ybWFsczsKICAgIGlmIChmb3JtYWxzICE9IG51bGwpIHsKICAgICAgY2xvbmVkRm9ybWFscyA9IG5ldyBMaXN0PEZvcm1hbFBhcmFtZXRlckJ1aWxkZXI+KGZvcm1hbHMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbG9uZWRGb3JtYWxzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgRm9ybWFsUGFyYW1ldGVyQnVpbGRlciBmb3JtYWwgPSBmb3JtYWxzW2ldOwogICAgICAgIGNsb25lZEZvcm1hbHNbaV0gPSBmb3JtYWwuY2xvbmUobmV3VHlwZXMpOwogICAgICB9CiAgICB9CiAgICBGdW5jdGlvblR5cGVCdWlsZGVyIG5ld1R5cGUgPSBuZXcgRnVuY3Rpb25UeXBlQnVpbGRlcigKICAgICAgICByZXR1cm5UeXBlPy5jbG9uZShuZXdUeXBlcyksIGNsb25lZFR5cGVWYXJpYWJsZXMsIGNsb25lZEZvcm1hbHMpOwogICAgbmV3VHlwZXMuYWRkKG5ld1R5cGUpOwogICAgcmV0dXJuIG5ld1R5cGU7CiAgfQp9CoCXAE5OPAElAU0BIQkSFRYTExcVAR0/ASwBJwkgGBUdATAgMS4BSgEMGwEMJgEMLiEZGzUYHhEbCh4IGQYXGxsjGB4RGwosCAYbMRMEAUUfOzglJBs3TCMqOyUtQQoIJSAIBighKjUpCAZDQUM4HgQBHD0YRBEEAR49OQQBDE1NBAE6MyFRPUMIBjAbSDc0MwgGO0obFAQCAT5wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9mdW5jdGlvbl90eXBlX2J1aWxkZXIuZGFydEZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9pbnZhbGlkX3R5cGVfYnVpbGRlci5kYXJ0hYwvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5pbnZhbGlkX3R5cGVfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgRGFydFR5cGUsIEludmFsaWRUeXBlOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IExvY2F0ZWRNZXNzYWdlOwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnIHNob3cgVHlwZURlY2xhcmF0aW9uQnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnIHNob3cgVHlwZUJ1aWxkZXIsIExpYnJhcnlCdWlsZGVyOwoKY2xhc3MgSW52YWxpZFR5cGVCdWlsZGVyIGV4dGVuZHMgVHlwZURlY2xhcmF0aW9uQnVpbGRlciB7CiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIkludmFsaWRUeXBlQnVpbGRlciI7CgogIGZpbmFsIExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2U7CgogIGZpbmFsIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQ7CgogIGZpbmFsIGJvb2wgc3VwcHJlc3NNZXNzYWdlOwoKICBJbnZhbGlkVHlwZUJ1aWxkZXIoU3RyaW5nIG5hbWUsIHRoaXMubWVzc2FnZSwKICAgICAge3RoaXMuY29udGV4dCwgdGhpcy5zdXBwcmVzc01lc3NhZ2U6IHRydWV9KQogICAgICA6IHN1cGVyKG51bGwsIDAsIG5hbWUsIG51bGwsIG1lc3NhZ2UuY2hhck9mZnNldCwgbWVzc2FnZS51cmkpOwoKICBAb3ZlcnJpZGUKICBJbnZhbGlkVHlwZSBnZXQgdGFyZ2V0ID0+IGNvbnN0IEludmFsaWRUeXBlKCk7CgogIERhcnRUeXBlIGJ1aWxkVHlwZShMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHMpIHsKICAgIHJldHVybiBidWlsZFR5cGVzV2l0aEJ1aWx0QXJndW1lbnRzKGxpYnJhcnksIG51bGwpOwogIH0KCiAgLy8vIFtBcmd1bWVudHNdIGhhdmUgYWxyZWFkeSBiZWVuIGJ1aWx0LgogIERhcnRUeXBlIGJ1aWxkVHlwZXNXaXRoQnVpbHRBcmd1bWVudHMoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cykgewogICAgaWYgKCFzdXBwcmVzc01lc3NhZ2UpIHsKICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2UubWVzc2FnZU9iamVjdCwgbWVzc2FnZS5jaGFyT2Zmc2V0LAogICAgICAgICAgbWVzc2FnZS5sZW5ndGgsIG1lc3NhZ2UudXJpLAogICAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgICB9CiAgICByZXR1cm4gY29uc3QgSW52YWxpZFR5cGUoKTsKICB9Cn0KLwBOTjwBJAE9ATIBMwFJATowASABJgEeATAyRQEMMQFMOAQBKyk6HEQnHQYgBAIBPXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2ludmFsaWRfdHlwZV9idWlsZGVyLmRhcnRBc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvbGlicmFyeV9idWlsZGVyLmRhcnSiiS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmxpYnJhcnlfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgTGlicmFyeTsKCmltcG9ydCAnLi4vY29tYmluYXRvci5kYXJ0JyBzaG93IENvbWJpbmF0b3I7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgaW50ZXJuYWxQcm9ibGVtLCB1bnN1cHBvcnRlZDsKCmltcG9ydCAnLi4vZXhwb3J0LmRhcnQnIHNob3cgRXhwb3J0OwoKaW1wb3J0ICcuLi9sb2FkZXIuZGFydCcgc2hvdyBMb2FkZXI7CgppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnCiAgICBzaG93CiAgICAgICAgRm9ybWF0dGVkTWVzc2FnZSwKICAgICAgICBMb2NhdGVkTWVzc2FnZSwKICAgICAgICBNZXNzYWdlLAogICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtQ29uc3RydWN0b3JOb3RGb3VuZCwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vdEZvdW5kSW4sCiAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Qcml2YXRlQ29uc3RydWN0b3JBY2Nlc3M7CgppbXBvcnQgJy4uL3NldmVyaXR5LmRhcnQnIHNob3cgU2V2ZXJpdHk7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzc0J1aWxkZXIsCiAgICAgICAgRGVjbGFyYXRpb24sCiAgICAgICAgRmllbGRCdWlsZGVyLAogICAgICAgIE1vZGlmaWVyQnVpbGRlciwKICAgICAgICBOYW1lSXRlcmF0b3IsCiAgICAgICAgUHJlZml4QnVpbGRlciwKICAgICAgICBTY29wZSwKICAgICAgICBTY29wZUJ1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXI7CgphYnN0cmFjdCBjbGFzcyBMaWJyYXJ5QnVpbGRlciBleHRlbmRzIE1vZGlmaWVyQnVpbGRlciB7CiAgZmluYWwgU2NvcGUgc2NvcGU7CgogIGZpbmFsIFNjb3BlIGV4cG9ydFNjb3BlOwoKICBmaW5hbCBTY29wZUJ1aWxkZXIgc2NvcGVCdWlsZGVyOwoKICBmaW5hbCBTY29wZUJ1aWxkZXIgZXhwb3J0U2NvcGVCdWlsZGVyOwoKICBmaW5hbCBMaXN0PEV4cG9ydD4gZXhwb3J0ZXJzID0gPEV4cG9ydD5bXTsKCiAgTGlicmFyeUJ1aWxkZXIgcGFydE9mTGlicmFyeTsKCiAgYm9vbCBtYXlJbXBsZW1lbnRSZXN0cmljdGVkVHlwZXMgPSBmYWxzZTsKCiAgTGlicmFyeUJ1aWxkZXIoVXJpIGZpbGVVcmksIHRoaXMuc2NvcGUsIHRoaXMuZXhwb3J0U2NvcGUpCiAgICAgIDogc2NvcGVCdWlsZGVyID0gbmV3IFNjb3BlQnVpbGRlcihzY29wZSksCiAgICAgICAgZXhwb3J0U2NvcGVCdWlsZGVyID0gbmV3IFNjb3BlQnVpbGRlcihleHBvcnRTY29wZSksCiAgICAgICAgc3VwZXIobnVsbCwgLTEsIGZpbGVVcmkpOwoKICBib29sIGdldCBsZWdhY3lNb2RlID0+IGZhbHNlOwoKICBib29sIGdldCBpc1N5bnRoZXRpYyA9PiBmYWxzZTsKCiAgLy8vIFNldCB0aGUgbGFuZ2F1Z2UgdmVyc2lvbiB0byBhIHNwZWNpZmljIG5vbi1udWxsIG1ham9yIGFuZCBtaW5vciB2ZXJzaW9uLgogIC8vLwogIC8vLyBJZiB0aGUgbGFuZ3VhZ2UgdmVyc2lvbiBoYXMgcHJldmlvdXNseSBiZWVuIGV4cGxpY2l0bHkgc2V0IHNldCAoaS5lLiB3aXRoCiAgLy8vIFtleHBsaWNpdF0gc2V0IHRvIHRydWUoKSwgYW55IHN1YnNlcXVlbnQgY2FsbCApKGV4cGxpY2l0IG9yIG5vdCkgc2hvdWxkIGJlCiAgLy8vIGlnbm9yZWQuCiAgLy8vIE11bHRpcGxlIGNhbGxzIHdpdGggW2V4cGxpY2l0XSBzZXQgdG8gZmFsc2Ugc2hvdWxkIGJlIGFsbG93ZWQgdGhvdWdoLgogIC8vLwogIC8vLyBUaGUgbWFpbiBpZGVhIGlzIHRoYXQgdGhlIC5wYWNrYWdlcyBmaWxlIHNwZWNpZmllcyBhIGRlZmF1bHQgbGFuZ3VhZ2UKICAvLy8gdmVyc2lvbiwgYnV0IHRoYXQgdGhlIGxpYnJhcnkgY2FuIGhhdmUgc291cmNlIGNvZGUgdGhhdCBzcGVpY2llcyBhbm90aGVyCiAgLy8vIG9uZSB3aGljaCBzaG91bGQgYmUgc3VwcG9ydGVkLCBidXQgc3BlY2lmeWluZyBzZXZlcmFsIGluIGNvZGUgc2hvdWxkIG5vdAogIC8vLyBjaGFuZ2UgYW55dGhpbmcuCiAgdm9pZCBzZXRMYW5ndWFnZVZlcnNpb24oaW50IG1ham9yLCBpbnQgbWlub3IsIHtib29sIGV4cGxpY2l0fSk7CgogIEBvdmVycmlkZQogIERlY2xhcmF0aW9uIGdldCBwYXJlbnQgPT4gbnVsbDsKCiAgYm9vbCBnZXQgaXNQYXJ0ID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiTGlicmFyeUJ1aWxkZXIiOwoKICBMb2FkZXIgZ2V0IGxvYWRlcjsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBtb2RpZmllcnMgPT4gMDsKCiAgQG92ZXJyaWRlCiAgTGlicmFyeSBnZXQgdGFyZ2V0OwoKICBVcmkgZ2V0IHVyaTsKCiAgSXRlcmF0b3I8RGVjbGFyYXRpb24+IGdldCBpdGVyYXRvciB7CiAgICByZXR1cm4gTGlicmFyeUxvY2FsRGVjbGFyYXRpb25JdGVyYXRvcih0aGlzKTsKICB9CgogIE5hbWVJdGVyYXRvciBnZXQgbmFtZUl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgTGlicmFyeUxvY2FsRGVjbGFyYXRpb25OYW1lSXRlcmF0b3IodGhpcyk7CiAgfQoKICBEZWNsYXJhdGlvbiBhZGRCdWlsZGVyKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiwgaW50IGNoYXJPZmZzZXQpOwoKICB2b2lkIGFkZEV4cG9ydGVyKAogICAgICBMaWJyYXJ5QnVpbGRlciBleHBvcnRlciwgTGlzdDxDb21iaW5hdG9yPiBjb21iaW5hdG9ycywgaW50IGNoYXJPZmZzZXQpIHsKICAgIGV4cG9ydGVycy5hZGQobmV3IEV4cG9ydChleHBvcnRlciwgdGhpcywgY29tYmluYXRvcnMsIGNoYXJPZmZzZXQpKTsKICB9CgogIC8vLyBBZGQgYSBwcm9ibGVtIHdpdGggYSBzZXZlcml0eSBkZXRlcm1pbmVkIGJ5IHRoZSBzZXZlcml0eSBvZiB0aGUgbWVzc2FnZS4KICAvLy8KICAvLy8gSWYgW2ZpbGVVcmldIGlzIG51bGwsIGl0IGRlZmF1bHRzIHRvIGB0aGlzLmZpbGVVcmlgLgogIC8vLwogIC8vLyBTZWUgYExvYWRlci5hZGRNZXNzYWdlYCBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlCiAgLy8vIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhpcyBtZXRob2QuCiAgRm9ybWF0dGVkTWVzc2FnZSBhZGRQcm9ibGVtKAogICAgICBNZXNzYWdlIG1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LCBpbnQgbGVuZ3RoLCBVcmkgZmlsZVVyaSwKICAgICAge2Jvb2wgd2FzSGFuZGxlZDogZmFsc2UsCiAgICAgIExpc3Q8TG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQsCiAgICAgIFNldmVyaXR5IHNldmVyaXR5LAogICAgICBib29sIHByb2JsZW1PbkxpYnJhcnk6IGZhbHNlfSkgewogICAgZmlsZVVyaSA/Pz0gdGhpcy5maWxlVXJpOwoKICAgIHJldHVybiBsb2FkZXIuYWRkUHJvYmxlbShtZXNzYWdlLCBjaGFyT2Zmc2V0LCBsZW5ndGgsIGZpbGVVcmksCiAgICAgICAgd2FzSGFuZGxlZDogd2FzSGFuZGxlZCwKICAgICAgICBjb250ZXh0OiBjb250ZXh0LAogICAgICAgIHNldmVyaXR5OiBzZXZlcml0eSwKICAgICAgICBwcm9ibGVtT25MaWJyYXJ5OiB0cnVlKTsKICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGV4cG9ydCBzY29wZSB3YXMgbW9kaWZpZWQuCiAgYm9vbCBhZGRUb0V4cG9ydFNjb3BlKFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBtZW1iZXIsCiAgICAgIFtpbnQgY2hhck9mZnNldCA9IC0xXSkgewogICAgaWYgKG5hbWUuc3RhcnRzV2l0aCgiXyIpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAobWVtYmVyIGlzIFByZWZpeEJ1aWxkZXIpIHJldHVybiBmYWxzZTsKICAgIE1hcDxTdHJpbmcsIERlY2xhcmF0aW9uPiBtYXAgPQogICAgICAgIG1lbWJlci5pc1NldHRlciA/IGV4cG9ydFNjb3BlLnNldHRlcnMgOiBleHBvcnRTY29wZS5sb2NhbDsKICAgIERlY2xhcmF0aW9uIGV4aXN0aW5nID0gbWFwW25hbWVdOwogICAgaWYgKGV4aXN0aW5nID09IG1lbWJlcikgcmV0dXJuIGZhbHNlOwogICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKICAgICAgRGVjbGFyYXRpb24gcmVzdWx0ID0gY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uKAogICAgICAgICAgbmFtZSwgZXhpc3RpbmcsIG1lbWJlciwgY2hhck9mZnNldCwKICAgICAgICAgIGlzRXhwb3J0OiB0cnVlKTsKICAgICAgbWFwW25hbWVdID0gcmVzdWx0OwogICAgICByZXR1cm4gcmVzdWx0ICE9IGV4aXN0aW5nOwogICAgfSBlbHNlIHsKICAgICAgbWFwW25hbWVdID0gbWVtYmVyOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIGFkZFRvU2NvcGUoCiAgICAgIFN0cmluZyBuYW1lLCBEZWNsYXJhdGlvbiBtZW1iZXIsIGludCBjaGFyT2Zmc2V0LCBib29sIGlzSW1wb3J0KTsKCiAgRGVjbGFyYXRpb24gY29tcHV0ZUFtYmlndW91c0RlY2xhcmF0aW9uKAogICAgICBTdHJpbmcgbmFtZSwgRGVjbGFyYXRpb24gZGVjbGFyYXRpb24sIERlY2xhcmF0aW9uIG90aGVyLCBpbnQgY2hhck9mZnNldCwKICAgICAge2Jvb2wgaXNFeHBvcnQ6IGZhbHNlLCBib29sIGlzSW1wb3J0OiBmYWxzZX0pOwoKICBpbnQgZmluaXNoRGVmZXJyZWRMb2FkVGVhcm9mZnMoKSA9PiAwOwoKICBpbnQgZmluaXNoRm9yd2FyZGVycygpID0+IDA7CgogIGludCBmaW5pc2hOYXRpdmVNZXRob2RzKCkgPT4gMDsKCiAgaW50IGZpbmlzaFBhdGNoTWV0aG9kcygpID0+IDA7CgogIC8vLyBMb29rcyB1cCBbY29uc3RydWN0b3JOYW1lXSBpbiB0aGUgY2xhc3MgbmFtZWQgW2NsYXNzTmFtZV0uCiAgLy8vCiAgLy8vIFRoZSBjbGFzcyBpcyBsb29rZWQgdXAgaW4gdGhpcyBsaWJyYXJ5J3MgZXhwb3J0IHNjb3BlIHVubGVzcwogIC8vLyBbYnlwYXNzTGlicmFyeVByaXZhY3ldIGlzIHRydWUsIGluIHdoaWNoIGNhc2UgaXQgaXMgbG9va2VkIHVwIGluIHRoZQogIC8vLyBsaWJyYXJ5IHNjb3BlIG9mIHRoaXMgbGlicmFyeS4KICAvLy8KICAvLy8gSXQgaXMgYW4gZXJyb3IgaWYgbm8gc3VjaCBjbGFzcyBpcyBmb3VuZCwgb3IgaWYgdGhlIGNsYXNzIGRvZXNuJ3QgaGF2ZSBhCiAgLy8vIG1hdGNoaW5nIGNvbnN0cnVjdG9yIChvciBmYWN0b3J5KS4KICAvLy8KICAvLy8gSWYgW2NvbnN0cnVjdG9yTmFtZV0gaXMgbnVsbCBvciB0aGUgZW1wdHkgc3RyaW5nLCBpdCdzIGFzc3VtZWQgdG8gYmUgYW4KICAvLy8gdW5uYW1lZCBjb25zdHJ1Y3Rvci4gaXQncyBhbiBlcnJvciBpZiBbY29uc3RydWN0b3JOYW1lXSBzdGFydHMgd2l0aAogIC8vLyBgIl8iYCwgYW5kIFtieXBhc3NMaWJyYXJ5UHJpdmFjeV0gaXMgZmFsc2UuCiAgRGVjbGFyYXRpb24gZ2V0Q29uc3RydWN0b3IoU3RyaW5nIGNsYXNzTmFtZSwKICAgICAge1N0cmluZyBjb25zdHJ1Y3Rvck5hbWUsIGJvb2wgYnlwYXNzTGlicmFyeVByaXZhY3k6IGZhbHNlfSkgewogICAgY29uc3RydWN0b3JOYW1lID8/PSAiIjsKICAgIGlmIChjb25zdHJ1Y3Rvck5hbWUuc3RhcnRzV2l0aCgiXyIpICYmICFieXBhc3NMaWJyYXJ5UHJpdmFjeSkgewogICAgICByZXR1cm4gaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Qcml2YXRlQ29uc3RydWN0b3JBY2Nlc3MKICAgICAgICAgICAgICAud2l0aEFyZ3VtZW50cyhjb25zdHJ1Y3Rvck5hbWUpLAogICAgICAgICAgLTEsCiAgICAgICAgICBudWxsKTsKICAgIH0KICAgIERlY2xhcmF0aW9uIGNscyA9IChieXBhc3NMaWJyYXJ5UHJpdmFjeSA/IHNjb3BlIDogZXhwb3J0U2NvcGUpCiAgICAgICAgLmxvb2t1cChjbGFzc05hbWUsIC0xLCBudWxsKTsKICAgIGlmIChjbHMgaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIC8vIFRPRE8oYWhlKTogVGhpcyBjb2RlIGlzIHNpbWlsYXIgdG8gY29kZSBpbiBgZW5kTmV3RXhwcmVzc2lvbmAgaW4KICAgICAgLy8gYGJvZHlfYnVpbGRlci5kYXJ0YCwgdHJ5IHRvIHNoYXJlIGl0LgogICAgICBEZWNsYXJhdGlvbiBjb25zdHJ1Y3RvciA9CiAgICAgICAgICBjbHMuZmluZENvbnN0cnVjdG9yT3JGYWN0b3J5KGNvbnN0cnVjdG9yTmFtZSwgLTEsIG51bGwsIHRoaXMpOwogICAgICBpZiAoY29uc3RydWN0b3IgPT0gbnVsbCkgewogICAgICAgIC8vIEZhbGwtdGhyb3VnaCB0byBpbnRlcm5hbCBlcnJvciBiZWxvdy4KICAgICAgfSBlbHNlIGlmIChjb25zdHJ1Y3Rvci5pc0NvbnN0cnVjdG9yKSB7CiAgICAgICAgaWYgKCFjbHMuaXNBYnN0cmFjdCkgewogICAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChjb25zdHJ1Y3Rvci5pc0ZhY3RvcnkpIHsKICAgICAgICByZXR1cm4gY29uc3RydWN0b3I7CiAgICAgIH0KICAgIH0KICAgIHRocm93IGludGVybmFsUHJvYmxlbSgKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbUNvbnN0cnVjdG9yTm90Rm91bmQud2l0aEFyZ3VtZW50cygKICAgICAgICAgICAgIiRjbGFzc05hbWUuJGNvbnN0cnVjdG9yTmFtZSIsIHVyaSksCiAgICAgICAgLTEsCiAgICAgICAgbnVsbCk7CiAgfQoKICBpbnQgZmluaXNoVHlwZVZhcmlhYmxlcyhDbGFzc0J1aWxkZXIgb2JqZWN0LCBUeXBlQnVpbGRlciBkeW5hbWljVHlwZSkgPT4gMDsKCiAgLy8vIFRoaXMgbWV0aG9kIGluc3RhbnRpYXRlcyB0eXBlIHBhcmFtZXRlcnMgdG8gdGhlaXIgYm91bmRzIGluIHNvbWUgY2FzZXMKICAvLy8gd2hlcmUgdGhleSB3ZXJlIG9taXR0ZWQgYnkgdGhlIHByb2dyYW1tZXIgYW5kIG5vdCBwcm92aWRlZCBieSB0aGUgdHlwZQogIC8vLyBpbmZlcmVuY2UuICBUaGUgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBkaXN0aW5jdCB0eXBlIHZhcmlhYmxlcwogIC8vLyB0aGF0IHdlcmUgaW5zdGFudGlhdGVkIGluIHRoaXMgbGlicmFyeS4KICBpbnQgY29tcHV0ZURlZmF1bHRUeXBlcyhUeXBlQnVpbGRlciBkeW5hbWljVHlwZSwgVHlwZUJ1aWxkZXIgYm90dG9tVHlwZSwKICAgICAgQ2xhc3NCdWlsZGVyIG9iamVjdENsYXNzKSB7CiAgICByZXR1cm4gMDsKICB9CgogIHZvaWQgYmVjb21lQ29yZUxpYnJhcnkoKSB7CiAgICBpZiAoc2NvcGUubG9jYWxbImR5bmFtaWMiXSA9PSBudWxsKSB7CiAgICAgIGFkZFN5bnRoZXRpY0RlY2xhcmF0aW9uT2ZEeW5hbWljKCk7CiAgICB9CiAgfQoKICB2b2lkIGFkZFN5bnRoZXRpY0RlY2xhcmF0aW9uT2ZEeW5hbWljKCk7CgogIC8vLyBEb24ndCB1c2UgZm9yIHNjb3BlIGxvb2t1cC4gT25seSB1c2Ugd2hlbiBhbiBlbGVtZW50IGlzIGtub3duIHRvIGV4aXN0CiAgLy8vIChhbmQgbm90IGEgc2V0dGVyKS4KICBEZWNsYXJhdGlvbiBnZXRMb2NhbE1lbWJlcihTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIHNjb3BlLmxvY2FsW25hbWVdID8/CiAgICAgICAgaW50ZXJuYWxQcm9ibGVtKAogICAgICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vdEZvdW5kSW4ud2l0aEFyZ3VtZW50cyhuYW1lLCAiJGZpbGVVcmkiKSwKICAgICAgICAgICAgLTEsCiAgICAgICAgICAgIGZpbGVVcmkpOwogIH0KCiAgRGVjbGFyYXRpb24gbG9va3VwKFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpIHsKICAgIHJldHVybiBzY29wZS5sb29rdXAobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQoKICAvLy8gSWYgdGhpcyBpcyBhIHBhdGNoIGxpYnJhcnksIGFwcGx5IGl0cyBwYXRjaGVzIHRvIFtvcmlnaW5dLgogIHZvaWQgYXBwbHlQYXRjaGVzKCkgewogICAgaWYgKCFpc1BhdGNoKSByZXR1cm47CiAgICB1bnN1cHBvcnRlZCgiJHtydW50aW1lVHlwZX0uYXBwbHlQYXRjaGVzIiwgLTEsIGZpbGVVcmkpOwogIH0KCiAgdm9pZCByZWNvcmRBY2Nlc3MoaW50IGNoYXJPZmZzZXQsIGludCBsZW5ndGgsIFVyaSBmaWxlVXJpKSB7fQoKICB2b2lkIGJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKCkge30KCiAgTGlzdDxGaWVsZEJ1aWxkZXI+IHRha2VJbXBsaWNpdGx5VHlwZWRGaWVsZHMoKSA9PiBudWxsOwp9CgpjbGFzcyBMaWJyYXJ5TG9jYWxEZWNsYXJhdGlvbkl0ZXJhdG9yIGltcGxlbWVudHMgSXRlcmF0b3I8RGVjbGFyYXRpb24+IHsKICBmaW5hbCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5OwogIGZpbmFsIEl0ZXJhdG9yPERlY2xhcmF0aW9uPiBpdGVyYXRvcjsKCiAgTGlicmFyeUxvY2FsRGVjbGFyYXRpb25JdGVyYXRvcih0aGlzLmxpYnJhcnkpCiAgICAgIDogaXRlcmF0b3IgPSBsaWJyYXJ5LnNjb3BlLml0ZXJhdG9yOwoKICBEZWNsYXJhdGlvbiBnZXQgY3VycmVudCA9PiBpdGVyYXRvci5jdXJyZW50OwoKICBib29sIG1vdmVOZXh0KCkgewogICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgaWYgKGN1cnJlbnQucGFyZW50ID09IGxpYnJhcnkpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKY2xhc3MgTGlicmFyeUxvY2FsRGVjbGFyYXRpb25OYW1lSXRlcmF0b3IgaW1wbGVtZW50cyBOYW1lSXRlcmF0b3IgewogIGZpbmFsIExpYnJhcnlCdWlsZGVyIGxpYnJhcnk7CiAgZmluYWwgTmFtZUl0ZXJhdG9yIGl0ZXJhdG9yOwoKICBMaWJyYXJ5TG9jYWxEZWNsYXJhdGlvbk5hbWVJdGVyYXRvcih0aGlzLmxpYnJhcnkpCiAgICAgIDogaXRlcmF0b3IgPSBsaWJyYXJ5LnNjb3BlLm5hbWVJdGVyYXRvcjsKCiAgRGVjbGFyYXRpb24gZ2V0IGN1cnJlbnQgPT4gaXRlcmF0b3IuY3VycmVudDsKCiAgU3RyaW5nIGdldCBuYW1lID0+IGl0ZXJhdG9yLm5hbWU7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICBpZiAoY3VycmVudC5wYXJlbnQgPT0gbGlicmFyeSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CoEnAE5OPAEfAS8BLQE9ASUBJQEaCRoYETQrOQEpARYJFhUWGRYXDxYVATgVARsBIwEpAS0BIAEsATwwPCIBIAEhAU8GUFEPTAZMT08XQgEMIgEcAQwsARUBDBoBDBYBDwEnMgQBIjoEAVABFE9IBAFPBjsGOCcfQB8kGSceAUMgGhwhBAE1OR8sLyNDJiocOC4bGiENGgYRBAETRwErTzUBKQEfASIBIQFBBkNLJQZPKQZOSjIvRBxEHjovDhEGQyYfSi8gSSExLh8eCiocCAYbQjEMDwQBTgFNTUsuSyIOBAEdKioGBAErAU0aLCAZTxAWBAFBNAQBQRgaPQQBQAEkAToCAUkgKAEwKwEvARQiMgYSBAIBRCAfATQvAS8BJAEUIjIGEgQCAThwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9saWJyYXJ5X2J1aWxkZXIuZGFydEBzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9tZW1iZXJfYnVpbGRlci5kYXJ0hdovLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5tZW1iZXJfYnVpbGRlcjsKCmltcG9ydCAnLi4vcHJvYmxlbXMuZGFydCcgc2hvdyB1bnN1cHBvcnRlZDsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JwogICAgc2hvdyBDbGFzc0J1aWxkZXIsIERlY2xhcmF0aW9uLCBMaWJyYXJ5QnVpbGRlciwgTW9kaWZpZXJCdWlsZGVyOwoKYWJzdHJhY3QgY2xhc3MgTWVtYmVyQnVpbGRlciBleHRlbmRzIE1vZGlmaWVyQnVpbGRlciB7CiAgLy8vIEZvciB0b3AtbGV2ZWwgbWVtYmVycywgdGhlIHBhcmVudCBpcyBzZXQgY29ycmVjdGx5IGR1cmluZwogIC8vLyBjb25zdHJ1Y3Rpb24uIEhvd2V2ZXIsIGZvciBjbGFzcyBtZW1iZXJzLCB0aGUgcGFyZW50IGlzIGluaXRpYWxseSB0aGUKICAvLy8gbGlicmFyeSBhbmQgdXBkYXRlZCBsYXRlci4KICBEZWNsYXJhdGlvbiBwYXJlbnQ7CgogIFN0cmluZyBnZXQgbmFtZTsKCiAgTWVtYmVyQnVpbGRlcih0aGlzLnBhcmVudCwgaW50IGNoYXJPZmZzZXQpIDogc3VwZXIocGFyZW50LCBjaGFyT2Zmc2V0KTsKCiAgYm9vbCBnZXQgaXNJbnN0YW5jZU1lbWJlciA9PiBpc0NsYXNzTWVtYmVyICYmICFpc1N0YXRpYzsKCiAgYm9vbCBnZXQgaXNDbGFzc01lbWJlciA9PiBwYXJlbnQgaXMgQ2xhc3NCdWlsZGVyOwoKICBib29sIGdldCBpc1RvcExldmVsID0+ICFpc0NsYXNzTWVtYmVyOwoKICBib29sIGdldCBpc05hdGl2ZSA9PiBmYWxzZTsKCiAgYm9vbCBnZXQgaXNSZWRpcmVjdGluZ0dlbmVyYXRpdmVDb25zdHJ1Y3RvciA9PiBmYWxzZTsKCiAgTGlicmFyeUJ1aWxkZXIgZ2V0IGxpYnJhcnkgewogICAgaWYgKHBhcmVudCBpcyBMaWJyYXJ5QnVpbGRlcikgewogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5ID0gcGFyZW50OwogICAgICByZXR1cm4gbGlicmFyeS5wYXJ0T2ZMaWJyYXJ5ID8/IGxpYnJhcnk7CiAgICB9IGVsc2UgewogICAgICBDbGFzc0J1aWxkZXIgY2xzID0gcGFyZW50OwogICAgICByZXR1cm4gY2xzLmxpYnJhcnk7CiAgICB9CiAgfQoKICB2b2lkIGJ1aWxkT3V0bGluZUV4cHJlc3Npb25zKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHt9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZnVsbE5hbWVGb3JFcnJvcnMgPT4gbmFtZTsKCiAgdm9pZCBpbmZlclR5cGUoKSA9PiB1bnN1cHBvcnRlZCgiaW5mZXJUeXBlIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CgogIHZvaWQgaW5mZXJDb3BpZWRUeXBlKGNvdmFyaWFudCBPYmplY3Qgb3RoZXIpIHsKICAgIHVuc3VwcG9ydGVkKCJpbmZlclR5cGUiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9Cn0KNgBOTjwBHgEsARZFATdATCEWARMBSgE7ATQBKQEeATgBHyQnLw0hGgYEAToBDCgBRQExMwQCATdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9tZW1iZXJfYnVpbGRlci5kYXJ0QnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL21ldGFkYXRhX2J1aWxkZXIuZGFydIZRLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEubWV0YWRhdGFfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgQW5ub3RhdGFibGUsIENsYXNzLCBMaWJyYXJ5OwoKaW1wb3J0ICcuLi9rZXJuZWwvYm9keV9idWlsZGVyLmRhcnQnIHNob3cgQm9keUJ1aWxkZXI7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JyBzaG93IENsYXNzQnVpbGRlciwgTWVtYmVyQnVpbGRlcjsKCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICcuLi9zb3VyY2Uvc291cmNlX2xpYnJhcnlfYnVpbGRlci5kYXJ0JyBzaG93IFNvdXJjZUxpYnJhcnlCdWlsZGVyOwoKaW1wb3J0ICcuLi9zY29wZS5kYXJ0JyBzaG93IFNjb3BlOwoKY2xhc3MgTWV0YWRhdGFCdWlsZGVyIHsKICBmaW5hbCBUb2tlbiBiZWdpblRva2VuOwoKICBpbnQgZ2V0IGNoYXJPZmZzZXQgPT4gYmVnaW5Ub2tlbi5jaGFyT2Zmc2V0OwoKICBNZXRhZGF0YUJ1aWxkZXIodGhpcy5iZWdpblRva2VuKTsKCiAgc3RhdGljIHZvaWQgYnVpbGRBbm5vdGF0aW9ucygKICAgICAgQW5ub3RhdGFibGUgcGFyZW50LAogICAgICBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGEsCiAgICAgIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGxpYnJhcnksCiAgICAgIENsYXNzQnVpbGRlciBjbGFzc0J1aWxkZXIsCiAgICAgIE1lbWJlckJ1aWxkZXIgbWVtYmVyKSB7CiAgICBpZiAobWV0YWRhdGEgPT0gbnVsbCkgcmV0dXJuOwogICAgVXJpIGZpbGVVcmkgPSBtZW1iZXI/LmZpbGVVcmkgPz8gY2xhc3NCdWlsZGVyPy5maWxlVXJpID8/IGxpYnJhcnkuZmlsZVVyaTsKICAgIFNjb3BlIHNjb3BlID0gcGFyZW50IGlzIExpYnJhcnkgfHwgcGFyZW50IGlzIENsYXNzIHx8IGNsYXNzQnVpbGRlciA9PSBudWxsCiAgICAgICAgPyBsaWJyYXJ5LnNjb3BlCiAgICAgICAgOiBjbGFzc0J1aWxkZXIuc2NvcGU7CiAgICBCb2R5QnVpbGRlciBib2R5QnVpbGRlciA9IG5ldyBCb2R5QnVpbGRlci5mb3JPdXRsaW5lRXhwcmVzc2lvbigKICAgICAgICBsaWJyYXJ5LCBjbGFzc0J1aWxkZXIsIG1lbWJlciwgc2NvcGUsIGZpbGVVcmkpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtZXRhZGF0YS5sZW5ndGg7ICsraSkgewogICAgICBNZXRhZGF0YUJ1aWxkZXIgYW5ub3RhdGlvbkJ1aWxkZXIgPSBtZXRhZGF0YVtpXTsKICAgICAgcGFyZW50LmFkZEFubm90YXRpb24oCiAgICAgICAgICBib2R5QnVpbGRlci5wYXJzZUFubm90YXRpb24oYW5ub3RhdGlvbkJ1aWxkZXIuYmVnaW5Ub2tlbikpOwogICAgfQogICAgYm9keUJ1aWxkZXIuaW5mZXJBbm5vdGF0aW9ucyhwYXJlbnQuYW5ub3RhdGlvbnMpOwogICAgYm9keUJ1aWxkZXIucmVzb2x2ZVJlZGlyZWN0aW5nRmFjdG9yeVRhcmdldHMoKTsKICB9Cn0KMQBOTjwBIAFDATcBSQElAUoBIwEYGgEvASQBIBomJCEeIk9PGB5EODA3HEYGNjQEAgE5cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbWV0YWRhdGFfYnVpbGRlci5kYXJ0S3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL21peGluX2FwcGxpY2F0aW9uX2J1aWxkZXIuZGFydIgcLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEubWl4aW5fYXBwbGljYXRpb25fYnVpbGRlcjsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JyBzaG93IExpYnJhcnlCdWlsZGVyLCBUeXBlQnVpbGRlciwgVHlwZVZhcmlhYmxlQnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIHNob3cgSW50ZXJmYWNlVHlwZSwgU3VwZXJ0eXBlOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IExvY2F0ZWRNZXNzYWdlOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuc3VwcG9ydGVkOwoKY2xhc3MgTWl4aW5BcHBsaWNhdGlvbkJ1aWxkZXIgZXh0ZW5kcyBUeXBlQnVpbGRlciB7CiAgZmluYWwgVHlwZUJ1aWxkZXIgc3VwZXJ0eXBlOwogIGZpbmFsIExpc3Q8VHlwZUJ1aWxkZXI+IG1peGluczsKICBTdXBlcnR5cGUgYnVpbHRUeXBlOwoKICBMaXN0PFR5cGVWYXJpYWJsZUJ1aWxkZXI+IHR5cGVWYXJpYWJsZXM7CgogIE1peGluQXBwbGljYXRpb25CdWlsZGVyKHRoaXMuc3VwZXJ0eXBlLCB0aGlzLm1peGlucyk7CgogIFN0cmluZyBnZXQgbmFtZSA9PiBudWxsOwoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiTWl4aW5BcHBsaWNhdGlvbkJ1aWxkZXIiOwoKICBTdHJpbmdCdWZmZXIgcHJpbnRPbihTdHJpbmdCdWZmZXIgYnVmZmVyKSB7CiAgICBidWZmZXIud3JpdGUoc3VwZXJ0eXBlKTsKICAgIGJ1ZmZlci53cml0ZSgiIHdpdGggIik7CiAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgIGZvciAoVHlwZUJ1aWxkZXIgdCBpbiBtaXhpbnMpIHsKICAgICAgaWYgKCFmaXJzdCkgYnVmZmVyLndyaXRlKCIsICIpOwogICAgICBmaXJzdCA9IGZhbHNlOwogICAgICB0LnByaW50T24oYnVmZmVyKTsKICAgIH0KICAgIHJldHVybiBidWZmZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGJ1aWxkKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIGludCBjaGFyT2Zmc2V0ID0gLTE7IC8vIFRPRE8oYWhlKTogUHJvdmlkZSB0aGVzZS4KICAgIFVyaSBmaWxlVXJpID0gbnVsbDsgLy8gVE9ETyhhaGUpOiBQcm92aWRlIHRoZXNlLgogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJidWlsZCIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3VwZXJ0eXBlIGJ1aWxkU3VwZXJ0eXBlKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiYnVpbGRTdXBlcnR5cGUiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9CgogIEBvdmVycmlkZQogIFN1cGVydHlwZSBidWlsZE1peGVkSW5UeXBlKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiYnVpbGRNaXhlZEluVHlwZSIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYnVpbGRJbnZhbGlkVHlwZShMb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCB7TGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dH0pIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiYnVpbGRJbnZhbGlkVHlwZSIsIG1lc3NhZ2UuY2hhck9mZnNldCwgbWVzc2FnZS51cmkpOwogIH0KCiAgTWl4aW5BcHBsaWNhdGlvbkJ1aWxkZXIgY2xvbmUoTGlzdDxUeXBlQnVpbGRlcj4gbmV3VHlwZXMpIHsKICAgIGludCBjaGFyT2Zmc2V0ID0gLTE7IC8vIFRPRE8oZG1pdHJ5YXMpOiBQcm92aWRlIHRoZXNlLgogICAgVXJpIGZpbGVVcmkgPSBudWxsOyAvLyBUT0RPKGRtaXRyeWFzKTogUHJvdmlkZSB0aGVzZS4KICAgIHJldHVybiB1bnN1cHBvcnRlZCgiY2xvbmUiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICB9Cn0KRwBOTjwBKQFNAUABMgEsATQfIhcBKwE4ARsBNQEuHRwXJCYVGQYTBAEMMDY1NgQBDBw9PwQBDB49QQQBDE1NBAE+Ozo2BAIBQnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL21peGluX2FwcGxpY2F0aW9uX2J1aWxkZXIuZGFydEJzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9tb2RpZmllcl9idWlsZGVyLmRhcnSHxC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLm1vZGlmaWVyX2J1aWxkZXI7CgppbXBvcnQgJy4uL21vZGlmaWVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgYWJzdHJhY3RNYXNrLAogICAgICAgIGNvbnN0TWFzaywKICAgICAgICBjb3ZhcmlhbnRNYXNrLAogICAgICAgIGV4dGVuc2lvbkRlY2xhcmF0aW9uTWFzaywKICAgICAgICBleHRlcm5hbE1hc2ssCiAgICAgICAgZmluYWxNYXNrLAogICAgICAgIGhhc0NvbnN0Q29uc3RydWN0b3JNYXNrLAogICAgICAgIGhhc0luaXRpYWxpemVyTWFzaywKICAgICAgICBpbml0aWFsaXppbmdGb3JtYWxNYXNrLAogICAgICAgIG1peGluRGVjbGFyYXRpb25NYXNrLAogICAgICAgIG5hbWVkTWl4aW5BcHBsaWNhdGlvbk1hc2ssCiAgICAgICAgc3RhdGljTWFzazsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JyBzaG93IERlY2xhcmF0aW9uOwoKYWJzdHJhY3QgY2xhc3MgTW9kaWZpZXJCdWlsZGVyIGV4dGVuZHMgRGVjbGFyYXRpb24gewogIERlY2xhcmF0aW9uIHBhcmVudDsKCiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIGZpbmFsIFVyaSBmaWxlVXJpOwoKICBNb2RpZmllckJ1aWxkZXIodGhpcy5wYXJlbnQsIHRoaXMuY2hhck9mZnNldCwgW1VyaSBmaWxlVXJpXSkKICAgICAgOiBmaWxlVXJpID0gZmlsZVVyaSA/PyBwYXJlbnQ/LmZpbGVVcmk7CgogIGludCBnZXQgbW9kaWZpZXJzOwoKICBib29sIGdldCBpc0Fic3RyYWN0ID0+IChtb2RpZmllcnMgJiBhYnN0cmFjdE1hc2spICE9IDA7CgogIGJvb2wgZ2V0IGlzQ29uc3QgPT4gKG1vZGlmaWVycyAmIGNvbnN0TWFzaykgIT0gMDsKCiAgYm9vbCBnZXQgaXNDb3ZhcmlhbnQgPT4gKG1vZGlmaWVycyAmIGNvdmFyaWFudE1hc2spICE9IDA7CgogIGJvb2wgZ2V0IGlzRXh0ZXJuYWwgPT4gKG1vZGlmaWVycyAmIGV4dGVybmFsTWFzaykgIT0gMDsKCiAgYm9vbCBnZXQgaXNGaW5hbCA9PiAobW9kaWZpZXJzICYgZmluYWxNYXNrKSAhPSAwOwoKICBib29sIGdldCBpc1N0YXRpYyA9PiAobW9kaWZpZXJzICYgc3RhdGljTWFzaykgIT0gMDsKCiAgYm9vbCBnZXQgaXNOYW1lZE1peGluQXBwbGljYXRpb24gewogICAgcmV0dXJuIChtb2RpZmllcnMgJiBuYW1lZE1peGluQXBwbGljYXRpb25NYXNrKSAhPSAwOwogIH0KCiAgYm9vbCBnZXQgaGFzSW5pdGlhbGl6ZXIgPT4gKG1vZGlmaWVycyAmIGhhc0luaXRpYWxpemVyTWFzaykgIT0gMDsKCiAgYm9vbCBnZXQgaXNJbml0aWFsaXppbmdGb3JtYWwgPT4gKG1vZGlmaWVycyAmIGluaXRpYWxpemluZ0Zvcm1hbE1hc2spICE9IDA7CgogIGJvb2wgZ2V0IGhhc0NvbnN0Q29uc3RydWN0b3IgPT4gKG1vZGlmaWVycyAmIGhhc0NvbnN0Q29uc3RydWN0b3JNYXNrKSAhPSAwOwoKICBib29sIGdldCBpc01peGluID0+IChtb2RpZmllcnMgJiBtaXhpbkRlY2xhcmF0aW9uTWFzaykgIT0gMDsKCiAgYm9vbCBnZXQgaXNFeHRlbnNpb24gPT4gKG1vZGlmaWVycyAmIGV4dGVuc2lvbkRlY2xhcmF0aW9uTWFzaykgIT0gMDsKCiAgYm9vbCBnZXQgaXNDbGFzc01lbWJlciA9PiBmYWxzZTsKCiAgU3RyaW5nIGdldCBuYW1lOwoKICBib29sIGdldCBpc05hdGl2ZSA9PiBmYWxzZTsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWU7CgogIFN0cmluZ0J1ZmZlciBwcmludE9uKFN0cmluZ0J1ZmZlciBidWZmZXIpIHsKICAgIHJldHVybiBidWZmZXIuLndyaXRlKG5hbWUgPz8gZnVsbE5hbWVGb3JFcnJvcnMpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIiRkZWJ1Z05hbWUoJHtwcmludE9uKG5ldyBTdHJpbmdCdWZmZXIoKSl9KSI7Cn0KTQBOTjwBIAEaCRYTFyIWEyEcIB4jFAEoATUWARgBFQE/LgEVAToBNAE8AToBNAE2ASU5BAFEAU4BTgE/AUcBIwETAR4BGAEuNQQBRQIBOXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL21vZGlmaWVyX2J1aWxkZXIuZGFydD9zZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9uYW1lX2l0ZXJhdG9yLmRhcnSBdC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLm5hbWVfaXRlcmF0b3I7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcgc2hvdyBEZWNsYXJhdGlvbjsKCmFic3RyYWN0IGNsYXNzIE5hbWVJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yPERlY2xhcmF0aW9uPiB7CiAgU3RyaW5nIGdldCBuYW1lOwp9Cg0ATk48AR0BKAE/EwIBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL25hbWVfaXRlcmF0b3IuZGFydERzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9uYW1lZF90eXBlX2J1aWxkZXIuZGFydKOmLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEubmFtZWRfdHlwZV9idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBEYXJ0VHlwZSwgU3VwZXJ0eXBlOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIE1lc3NhZ2UsCiAgICAgICAgVGVtcGxhdGUsCiAgICAgICAgbm9MZW5ndGgsCiAgICAgICAgdGVtcGxhdGVNaXNzaW5nRXhwbGljaXRUeXBlQXJndW1lbnRzLAogICAgICAgIG1lc3NhZ2VOb3RBVHlwZUNvbnRleHQsCiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgdGVtcGxhdGVOb3RBVHlwZSwKICAgICAgICB0ZW1wbGF0ZVR5cGVBcmd1bWVudE1pc21hdGNoLAogICAgICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50c09uVHlwZVZhcmlhYmxlLAogICAgICAgIHRlbXBsYXRlVHlwZU5vdEZvdW5kOwoKaW1wb3J0ICcuLi9tZXNzYWdlcy5kYXJ0JwogICAgc2hvdyBub0xlbmd0aCwgdGVtcGxhdGVTdXBlcnR5cGVJc0lsbGVnYWwsIHRlbXBsYXRlU3VwZXJ0eXBlSXNUeXBlVmFyaWFibGU7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnIHNob3cgdW5oYW5kbGVkOwoKaW1wb3J0ICcuLi9zZXZlcml0eS5kYXJ0JyBzaG93IFNldmVyaXR5OwoKaW1wb3J0ICdidWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgRGVjbGFyYXRpb24sCiAgICAgICAgSWRlbnRpZmllciwKICAgICAgICBMaWJyYXJ5QnVpbGRlciwKICAgICAgICBQcmVmaXhCdWlsZGVyLAogICAgICAgIFF1YWxpZmllZE5hbWUsCiAgICAgICAgU2NvcGUsCiAgICAgICAgVHlwZUJ1aWxkZXIsCiAgICAgICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyLAogICAgICAgIGZsYXR0ZW5OYW1lOwoKaW1wb3J0ICcuLi9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzc0J1aWxkZXIsCiAgICAgICAgSW52YWxpZFR5cGVCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIFR5cGVCdWlsZGVyLAogICAgICAgIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIsCiAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlciwKICAgICAgICBmbGF0dGVuTmFtZTsKCmNsYXNzIE5hbWVkVHlwZUJ1aWxkZXIgZXh0ZW5kcyBUeXBlQnVpbGRlciB7CiAgZmluYWwgT2JqZWN0IG5hbWU7CgogIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50czsKCiAgQG92ZXJyaWRlCiAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciBkZWNsYXJhdGlvbjsKCiAgTmFtZWRUeXBlQnVpbGRlcih0aGlzLm5hbWUsIHRoaXMuYXJndW1lbnRzKTsKCiAgTmFtZWRUeXBlQnVpbGRlci5mcm9tVHlwZURlY2xhcmF0aW9uQnVpbGRlcih0aGlzLmRlY2xhcmF0aW9uLAogICAgICBbdGhpcy5hcmd1bWVudHNdKQogICAgICA6IHRoaXMubmFtZSA9IGRlY2xhcmF0aW9uLm5hbWU7CgogIEBvdmVycmlkZQogIHZvaWQgYmluZChUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uKSB7CiAgICB0aGlzLmRlY2xhcmF0aW9uID0gZGVjbGFyYXRpb24/Lm9yaWdpbjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVzb2x2ZUluKAogICAgICBTY29wZSBzY29wZSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICBpZiAoZGVjbGFyYXRpb24gIT0gbnVsbCkgcmV0dXJuOwogICAgZmluYWwgbmFtZSA9IHRoaXMubmFtZTsKICAgIERlY2xhcmF0aW9uIG1lbWJlcjsKICAgIGlmIChuYW1lIGlzIFF1YWxpZmllZE5hbWUpIHsKICAgICAgT2JqZWN0IHF1YWxpZmllciA9IG5hbWUucXVhbGlmaWVyOwogICAgICBTdHJpbmcgcHJlZml4TmFtZSA9IGZsYXR0ZW5OYW1lKHF1YWxpZmllciwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICAgIERlY2xhcmF0aW9uIHByZWZpeCA9IHNjb3BlLmxvb2t1cChwcmVmaXhOYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgICAgaWYgKHByZWZpeCBpcyBQcmVmaXhCdWlsZGVyKSB7CiAgICAgICAgbWVtYmVyID0gcHJlZml4Lmxvb2t1cChuYW1lLm5hbWUsIG5hbWUuY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobmFtZSBpcyBTdHJpbmcpIHsKICAgICAgbWVtYmVyID0gc2NvcGUubG9va3VwKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgfSBlbHNlIHsKICAgICAgdW5oYW5kbGVkKCIke25hbWUucnVudGltZVR5cGV9IiwgInJlc29sdmVJbiIsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgfQogICAgaWYgKG1lbWJlciBpcyBUeXBlVmFyaWFibGVCdWlsZGVyKSB7CiAgICAgIGRlY2xhcmF0aW9uID0gbWVtYmVyLm9yaWdpbjsKICAgICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgICAgU3RyaW5nIHR5cGVOYW1lOwogICAgICAgIGludCB0eXBlTmFtZU9mZnNldDsKICAgICAgICBpZiAobmFtZSBpcyBJZGVudGlmaWVyKSB7CiAgICAgICAgICB0eXBlTmFtZSA9IG5hbWUubmFtZTsKICAgICAgICAgIHR5cGVOYW1lT2Zmc2V0ID0gbmFtZS5jaGFyT2Zmc2V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0eXBlTmFtZSA9IG5hbWU7CiAgICAgICAgICB0eXBlTmFtZU9mZnNldCA9IGNoYXJPZmZzZXQ7CiAgICAgICAgfQogICAgICAgIE1lc3NhZ2UgbWVzc2FnZSA9CiAgICAgICAgICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50c09uVHlwZVZhcmlhYmxlLndpdGhBcmd1bWVudHModHlwZU5hbWUpOwogICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbShtZXNzYWdlLCB0eXBlTmFtZU9mZnNldCwgdHlwZU5hbWUubGVuZ3RoLCBmaWxlVXJpKTsKICAgICAgICBkZWNsYXJhdGlvbiA9IGJ1aWxkSW52YWxpZFR5cGUoCiAgICAgICAgICAgIG1lc3NhZ2Uud2l0aExvY2F0aW9uKGZpbGVVcmksIHR5cGVOYW1lT2Zmc2V0LCB0eXBlTmFtZS5sZW5ndGgpKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKG1lbWJlciBpcyBUeXBlRGVjbGFyYXRpb25CdWlsZGVyKSB7CiAgICAgIGRlY2xhcmF0aW9uID0gbWVtYmVyLm9yaWdpbjsKICAgICAgaWYgKCFkZWNsYXJhdGlvbi5pc0V4dGVuc2lvbikgewogICAgICAgIGlmIChhcmd1bWVudHMgPT0gbnVsbCAmJiBkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzQ291bnQgIT0gMCkgewogICAgICAgICAgU3RyaW5nIHR5cGVOYW1lOwogICAgICAgICAgaW50IHR5cGVOYW1lT2Zmc2V0OwogICAgICAgICAgaWYgKG5hbWUgaXMgSWRlbnRpZmllcikgewogICAgICAgICAgICB0eXBlTmFtZSA9IG5hbWUubmFtZTsKICAgICAgICAgICAgdHlwZU5hbWVPZmZzZXQgPSBuYW1lLmNoYXJPZmZzZXQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0eXBlTmFtZSA9IG5hbWU7CiAgICAgICAgICAgIHR5cGVOYW1lT2Zmc2V0ID0gY2hhck9mZnNldDsKICAgICAgICAgIH0KICAgICAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgICAgICB0ZW1wbGF0ZU1pc3NpbmdFeHBsaWNpdFR5cGVBcmd1bWVudHMKICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlc0NvdW50KSwKICAgICAgICAgICAgICB0eXBlTmFtZU9mZnNldCwKICAgICAgICAgICAgICB0eXBlTmFtZS5sZW5ndGgsCiAgICAgICAgICAgICAgZmlsZVVyaSk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihTdHJpbmcgbmFtZSk+IHRlbXBsYXRlID0KICAgICAgICBtZW1iZXIgPT0gbnVsbCA/IHRlbXBsYXRlVHlwZU5vdEZvdW5kIDogdGVtcGxhdGVOb3RBVHlwZTsKICAgIFN0cmluZyBmbGF0TmFtZSA9IGZsYXR0ZW5OYW1lKG5hbWUsIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dDsKICAgIGlmIChtZW1iZXIgIT0gbnVsbCkgewogICAgICBjb250ZXh0ID0gPExvY2F0ZWRNZXNzYWdlPlsKICAgICAgICBtZXNzYWdlTm90QVR5cGVDb250ZXh0LndpdGhMb2NhdGlvbihtZW1iZXIuZmlsZVVyaSwgbWVtYmVyLmNoYXJPZmZzZXQsCiAgICAgICAgICAgIG5hbWUgaXMgSWRlbnRpZmllciA/IG5hbWUubmFtZS5sZW5ndGggOiAiJG5hbWUiLmxlbmd0aCkKICAgICAgXTsKICAgIH0KICAgIGludCBsZW5ndGggPQogICAgICAgIG5hbWUgaXMgSWRlbnRpZmllciA/IG5hbWUuZW5kQ2hhck9mZnNldCAtIGNoYXJPZmZzZXQgOiBmbGF0TmFtZS5sZW5ndGg7CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSB0ZW1wbGF0ZS53aXRoQXJndW1lbnRzKGZsYXROYW1lKTsKICAgIGxpYnJhcnkuYWRkUHJvYmxlbShtZXNzYWdlLCBjaGFyT2Zmc2V0LCBsZW5ndGgsIGZpbGVVcmksIGNvbnRleHQ6IGNvbnRleHQpOwogICAgZGVjbGFyYXRpb24gPSBidWlsZEludmFsaWRUeXBlKAogICAgICAgIG1lc3NhZ2Uud2l0aExvY2F0aW9uKGZpbGVVcmksIGNoYXJPZmZzZXQsIGxlbmd0aCksCiAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNoZWNrKExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkgewogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsICYmCiAgICAgICAgYXJndW1lbnRzLmxlbmd0aCAhPSBkZWNsYXJhdGlvbi50eXBlVmFyaWFibGVzQ291bnQpIHsKICAgICAgTWVzc2FnZSBtZXNzYWdlID0gdGVtcGxhdGVUeXBlQXJndW1lbnRNaXNtYXRjaAogICAgICAgICAgLndpdGhBcmd1bWVudHMoZGVjbGFyYXRpb24udHlwZVZhcmlhYmxlc0NvdW50KTsKICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKG1lc3NhZ2UsIGNoYXJPZmZzZXQsIG5vTGVuZ3RoLCBmaWxlVXJpKTsKICAgICAgZGVjbGFyYXRpb24gPQogICAgICAgICAgYnVpbGRJbnZhbGlkVHlwZShtZXNzYWdlLndpdGhMb2NhdGlvbihmaWxlVXJpLCBjaGFyT2Zmc2V0LCBub0xlbmd0aCkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBub3JtYWxpemUoaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKSB7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwgJiYKICAgICAgICBhcmd1bWVudHMubGVuZ3RoICE9IGRlY2xhcmF0aW9uLnR5cGVWYXJpYWJsZXNDb3VudCkgewogICAgICAvLyBbYXJndW1lbnRzXSB3aWxsIGJlIG5vcm1hbGl6ZWQgbGF0ZXIgaWYgdGhleSBhcmUgbnVsbC4KICAgICAgYXJndW1lbnRzID0gbnVsbDsKICAgIH0KICB9CgogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICJOYW1lZFR5cGVCdWlsZGVyIjsKCiAgU3RyaW5nQnVmZmVyIHByaW50T24oU3RyaW5nQnVmZmVyIGJ1ZmZlcikgewogICAgYnVmZmVyLndyaXRlKG5hbWUpOwogICAgaWYgKGFyZ3VtZW50cz8uaXNFbXB0eSA/PyB0cnVlKSByZXR1cm4gYnVmZmVyOwogICAgYnVmZmVyLndyaXRlKCI8Iik7CiAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgIGZvciAoVHlwZUJ1aWxkZXIgdCBpbiBhcmd1bWVudHMpIHsKICAgICAgaWYgKCFmaXJzdCkgYnVmZmVyLndyaXRlKCIsICIpOwogICAgICBmaXJzdCA9IGZhbHNlOwogICAgICB0LnByaW50T24oYnVmZmVyKTsKICAgIH0KICAgIGJ1ZmZlci53cml0ZSgiPiIpOwogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CgogIEludmFsaWRUeXBlQnVpbGRlciBidWlsZEludmFsaWRUeXBlKExvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UsCiAgICAgIHtMaXN0PExvY2F0ZWRNZXNzYWdlPiBjb250ZXh0fSkgewogICAgLy8gVE9ETyhhaGUpOiBDb25zaWRlciBpZiBpdCBtYWtlcyBzZW5zZSB0byBwYXNzIGEgUXVhbGlmaWVkTmFtZSB0bwogICAgLy8gSW52YWxpZFR5cGVCdWlsZGVyPwogICAgcmV0dXJuIG5ldyBJbnZhbGlkVHlwZUJ1aWxkZXIoCiAgICAgICAgZmxhdHRlbk5hbWUobmFtZSwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBtZXNzYWdlLnVyaSksIG1lc3NhZ2UsCiAgICAgICAgY29udGV4dDogY29udGV4dCk7CiAgfQoKICBTdXBlcnR5cGUgaGFuZGxlSW52YWxpZFN1cGVydHlwZSgKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKSB7CiAgICB2YXIgdGVtcGxhdGUgPSBkZWNsYXJhdGlvbi5pc1R5cGVWYXJpYWJsZQogICAgICAgID8gdGVtcGxhdGVTdXBlcnR5cGVJc1R5cGVWYXJpYWJsZQogICAgICAgIDogdGVtcGxhdGVTdXBlcnR5cGVJc0lsbGVnYWw7CiAgICBsaWJyYXJ5LmFkZFByb2JsZW0oCiAgICAgICAgdGVtcGxhdGUud2l0aEFyZ3VtZW50cyhmbGF0dGVuTmFtZShuYW1lLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKSksCiAgICAgICAgY2hhck9mZnNldCwKICAgICAgICBub0xlbmd0aCwKICAgICAgICBmaWxlVXJpKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgRGFydFR5cGUgYnVpbGQoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSkgewogICAgYXNzZXJ0KGRlY2xhcmF0aW9uICE9IG51bGwsICJEZWNsYXJhdGlvbiBoYXMgbm90IGJlZW4gcmVzb2x2ZWQgb24gJHRoaXMuIik7CiAgICByZXR1cm4gZGVjbGFyYXRpb24uYnVpbGRUeXBlKGxpYnJhcnksIGFyZ3VtZW50cyk7CiAgfQoKICBTdXBlcnR5cGUgYnVpbGRTdXBlcnR5cGUoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSkgewogICAgVHlwZURlY2xhcmF0aW9uQnVpbGRlciBkZWNsYXJhdGlvbiA9IHRoaXMuZGVjbGFyYXRpb247CiAgICBpZiAoZGVjbGFyYXRpb24gaXMgQ2xhc3NCdWlsZGVyKSB7CiAgICAgIHJldHVybiBkZWNsYXJhdGlvbi5idWlsZFN1cGVydHlwZShsaWJyYXJ5LCBhcmd1bWVudHMpOwogICAgfSBlbHNlIGlmIChkZWNsYXJhdGlvbiBpcyBJbnZhbGlkVHlwZUJ1aWxkZXIpIHsKICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKAogICAgICAgICAgZGVjbGFyYXRpb24ubWVzc2FnZS5tZXNzYWdlT2JqZWN0LAogICAgICAgICAgZGVjbGFyYXRpb24ubWVzc2FnZS5jaGFyT2Zmc2V0LAogICAgICAgICAgZGVjbGFyYXRpb24ubWVzc2FnZS5sZW5ndGgsCiAgICAgICAgICBkZWNsYXJhdGlvbi5tZXNzYWdlLnVyaSwKICAgICAgICAgIHNldmVyaXR5OiBTZXZlcml0eS5lcnJvcik7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGhhbmRsZUludmFsaWRTdXBlcnR5cGUobGlicmFyeSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9CiAgfQoKICBTdXBlcnR5cGUgYnVpbGRNaXhlZEluVHlwZSgKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKSB7CiAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGRlY2xhcmF0aW9uID0gdGhpcy5kZWNsYXJhdGlvbjsKICAgIGlmIChkZWNsYXJhdGlvbiBpcyBDbGFzc0J1aWxkZXIpIHsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uLmJ1aWxkTWl4ZWRJblR5cGUobGlicmFyeSwgYXJndW1lbnRzKTsKICAgIH0gZWxzZSBpZiAoZGVjbGFyYXRpb24gaXMgSW52YWxpZFR5cGVCdWlsZGVyKSB7CiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgIGRlY2xhcmF0aW9uLm1lc3NhZ2UubWVzc2FnZU9iamVjdCwKICAgICAgICAgIGRlY2xhcmF0aW9uLm1lc3NhZ2UuY2hhck9mZnNldCwKICAgICAgICAgIGRlY2xhcmF0aW9uLm1lc3NhZ2UubGVuZ3RoLAogICAgICAgICAgZGVjbGFyYXRpb24ubWVzc2FnZS51cmksCiAgICAgICAgICBzZXZlcml0eTogU2V2ZXJpdHkuZXJyb3IpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBoYW5kbGVJbnZhbGlkU3VwZXJ0eXBlKGxpYnJhcnksIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogICAgfQogIH0KCiAgVHlwZUJ1aWxkZXIgc3Vic3QoTWFwPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPiBzdWJzdGl0dXRpb24pIHsKICAgIFR5cGVCdWlsZGVyIHJlc3VsdCA9IHN1YnN0aXR1dGlvbltkZWNsYXJhdGlvbl07CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KGRlY2xhcmF0aW9uIGlzIFR5cGVWYXJpYWJsZUJ1aWxkZXIpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSBlbHNlIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBMaXN0PFR5cGVCdWlsZGVyPiBhcmd1bWVudHM7CiAgICAgIGludCBpID0gMDsKICAgICAgZm9yIChUeXBlQnVpbGRlciBhcmd1bWVudCBpbiB0aGlzLmFyZ3VtZW50cykgewogICAgICAgIFR5cGVCdWlsZGVyIHR5cGUgPSBhcmd1bWVudC5zdWJzdChzdWJzdGl0dXRpb24pOwogICAgICAgIGlmICh0eXBlICE9IGFyZ3VtZW50KSB7CiAgICAgICAgICBhcmd1bWVudHMgPz89IHRoaXMuYXJndW1lbnRzLnRvTGlzdCgpOwogICAgICAgICAgYXJndW1lbnRzW2ldID0gdHlwZTsKICAgICAgICB9CiAgICAgICAgaSsrOwogICAgICB9CiAgICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICAgIHJldHVybiBuZXcgTmFtZWRUeXBlQnVpbGRlcihuYW1lLCBhcmd1bWVudHMpLi5iaW5kKGRlY2xhcmF0aW9uKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBOYW1lZFR5cGVCdWlsZGVyIGNsb25lKExpc3Q8VHlwZUJ1aWxkZXI+IG5ld1R5cGVzKSB7CiAgICBMaXN0PFR5cGVCdWlsZGVyPiBjbG9uZWRBcmd1bWVudHM7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgY2xvbmVkQXJndW1lbnRzID0gbmV3IExpc3Q8VHlwZUJ1aWxkZXI+KGFyZ3VtZW50cy5sZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNsb25lZEFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIGNsb25lZEFyZ3VtZW50c1tpXSA9IGFyZ3VtZW50c1tpXS5jbG9uZShuZXdUeXBlcyk7CiAgICAgIH0KICAgIH0KICAgIE5hbWVkVHlwZUJ1aWxkZXIgbmV3VHlwZSA9IG5ldyBOYW1lZFR5cGVCdWlsZGVyKG5hbWUsIGNsb25lZEFyZ3VtZW50cyk7CiAgICBuZXdUeXBlcy5hZGQobmV3VHlwZSk7CiAgICByZXR1cm4gbmV3VHlwZTsKICB9Cn0KgR8ATk48ASIBOwEdCRESEi4gGBomLR4BGlABKgEpARYJFRQYFxcPFSAdFQEnCRYcGBUgHRUBLRUBHwEMJgEvAUAYJgEMMiwEAQwSSiUcGCEpR0olRQghOA1KBikjHxkcIiAsERsnChpJTyhNCA4zIyZIGx4kIi4THSkMHjNCHh8YChAIBjdCPiIaIk9ECQYRUDhQJDsbBAEMRB0+NTpCFFEGBAEMMB0+QBgGBAEuAS4YMxcXJyYVGQYXEwQBPihIGyNFGwQBJD0uKiYYSBQSEhEEAStQNgQBHD07Jz00Gi0qJiMlEw1DBgQBHj07Jz80Gi0qJiMlEw1DBgQBSjQaMhUkIxE1OSAxHwoNCB9JCAYRBAE3Jx1BOTsIBkwbFAQCATtwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9uYW1lZF90eXBlX2J1aWxkZXIuZGFydEBzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci9wcmVmaXhfYnVpbGRlci5kYXJ0htwvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5wcmVmaXhfYnVpbGRlcjsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JyBzaG93IERlY2xhcmF0aW9uLCBMaWJyYXJ5QnVpbGRlciwgU2NvcGU7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IExpYnJhcnlEZXBlbmRlbmN5OwoKaW1wb3J0ICcuLi9idWlsZGVyL2J1aWxkZXIuZGFydCcgc2hvdyBMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnLi4va2VybmVsL2xvYWRfbGlicmFyeV9idWlsZGVyLmRhcnQnIHNob3cgTG9hZExpYnJhcnlCdWlsZGVyOwoKY2xhc3MgUHJlZml4QnVpbGRlciBleHRlbmRzIERlY2xhcmF0aW9uIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgZmluYWwgU2NvcGUgZXhwb3J0U2NvcGUgPSBuZXcgU2NvcGUudG9wKCk7CgogIGZpbmFsIExpYnJhcnlCdWlsZGVyIHBhcmVudDsKCiAgZmluYWwgYm9vbCBkZWZlcnJlZDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CgogIGZpbmFsIGludCBpbXBvcnRJbmRleDsKCiAgZmluYWwgTGlicmFyeURlcGVuZGVuY3kgZGVwZW5kZW5jeTsKCiAgTG9hZExpYnJhcnlCdWlsZGVyIGxvYWRMaWJyYXJ5QnVpbGRlcjsKCiAgUHJlZml4QnVpbGRlcih0aGlzLm5hbWUsIHRoaXMuZGVmZXJyZWQsIHRoaXMucGFyZW50LCB0aGlzLmRlcGVuZGVuY3ksCiAgICAgIHRoaXMuY2hhck9mZnNldCwgdGhpcy5pbXBvcnRJbmRleCkgewogICAgaWYgKGRlZmVycmVkKSB7CiAgICAgIGxvYWRMaWJyYXJ5QnVpbGRlciA9CiAgICAgICAgICBuZXcgTG9hZExpYnJhcnlCdWlsZGVyKHBhcmVudCwgZGVwZW5kZW5jeSwgY2hhck9mZnNldCk7CiAgICAgIGFkZFRvRXhwb3J0U2NvcGUoJ2xvYWRMaWJyYXJ5JywgbG9hZExpYnJhcnlCdWlsZGVyLCBjaGFyT2Zmc2V0KTsKICAgIH0KICB9CgogIFVyaSBnZXQgZmlsZVVyaSA9PiBwYXJlbnQuZmlsZVVyaTsKCiAgRGVjbGFyYXRpb24gbG9va3VwKFN0cmluZyBuYW1lLCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpIHsKICAgIHJldHVybiBleHBvcnRTY29wZS5sb29rdXAobmFtZSwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgfQoKICB2b2lkIGFkZFRvRXhwb3J0U2NvcGUoU3RyaW5nIG5hbWUsIERlY2xhcmF0aW9uIG1lbWJlciwgaW50IGNoYXJPZmZzZXQpIHsKICAgIE1hcDxTdHJpbmcsIERlY2xhcmF0aW9uPiBtYXAgPQogICAgICAgIG1lbWJlci5pc1NldHRlciA/IGV4cG9ydFNjb3BlLnNldHRlcnMgOiBleHBvcnRTY29wZS5sb2NhbDsKICAgIERlY2xhcmF0aW9uIGV4aXN0aW5nID0gbWFwW25hbWVdOwogICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKICAgICAgbWFwW25hbWVdID0gcGFyZW50LmNvbXB1dGVBbWJpZ3VvdXNEZWNsYXJhdGlvbigKICAgICAgICAgIG5hbWUsIGV4aXN0aW5nLCBtZW1iZXIsIGNoYXJPZmZzZXQsCiAgICAgICAgICBpc0V4cG9ydDogdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBtYXBbbmFtZV0gPSBtZW1iZXI7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzID0+IG5hbWU7Cn0KQQBOTjwBHgE/ATkBNgFGASoVAS0BHwEXAQwYARkBJgEpAUgrFBtCRwYEASUBQToEAUsjQyYcNi4bDRoGBAEMKAIBN3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL3ByZWZpeF9idWlsZGVyLmRhcnREc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvdHlwZV9hbGlhc19idWlsZGVyLmRhcnSbOC8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmZ1bmN0aW9uX3R5cGVfYWxpYXNfYnVpbGRlcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgRGFydFR5cGUsCiAgICAgICAgRHluYW1pY1R5cGUsCiAgICAgICAgRnVuY3Rpb25UeXBlLAogICAgICAgIEludmFsaWRUeXBlLAogICAgICAgIFR5cGVQYXJhbWV0ZXIsCiAgICAgICAgVHlwZWRlZiwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCcKICAgIHNob3cgRnJlc2hUeXBlUGFyYW1ldGVycywgZ2V0RnJlc2hUeXBlUGFyYW1ldGVycywgc3Vic3RpdHV0ZTsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cgbm9MZW5ndGgsIHRlbXBsYXRlQ3ljbGljVHlwZWRlZiwgdGVtcGxhdGVUeXBlQXJndW1lbnRNaXNtYXRjaDsKCmltcG9ydCAnLi4va2VybmVsL2tlcm5lbF9idWlsZGVyLmRhcnQnCiAgICBzaG93CiAgICAgICAgRnVuY3Rpb25UeXBlQnVpbGRlciwKICAgICAgICBGb3JtYWxQYXJhbWV0ZXJCdWlsZGVyLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1ldGFkYXRhQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBUeXBlVmFyaWFibGVCdWlsZGVyOwoKaW1wb3J0ICcuLi9wcm9ibGVtcy5kYXJ0JyBzaG93IHVuaGFuZGxlZDsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1ldGFkYXRhQnVpbGRlciwKICAgICAgICBUeXBlQnVpbGRlciwKICAgICAgICBUeXBlRGVjbGFyYXRpb25CdWlsZGVyLAogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXI7CgpjbGFzcyBUeXBlQWxpYXNCdWlsZGVyIGV4dGVuZHMgVHlwZURlY2xhcmF0aW9uQnVpbGRlciB7CiAgZmluYWwgVHlwZUJ1aWxkZXIgdHlwZTsKCiAgZmluYWwgTGlzdDxUeXBlVmFyaWFibGVCdWlsZGVyPiB0eXBlVmFyaWFibGVzOwoKICBmaW5hbCBUeXBlZGVmIHRhcmdldDsKCiAgRGFydFR5cGUgdGhpc1R5cGU7CgogIFR5cGVBbGlhc0J1aWxkZXIoTGlzdDxNZXRhZGF0YUJ1aWxkZXI+IG1ldGFkYXRhLCBTdHJpbmcgbmFtZSwKICAgICAgdGhpcy50eXBlVmFyaWFibGVzLCB0aGlzLnR5cGUsIExpYnJhcnlCdWlsZGVyIHBhcmVudCwgaW50IGNoYXJPZmZzZXQsCiAgICAgIFtUeXBlZGVmIHRhcmdldF0pCiAgICAgIDogdGFyZ2V0ID0gdGFyZ2V0ID8/CiAgICAgICAgICAgIChuZXcgVHlwZWRlZihuYW1lLCBudWxsLAogICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlcnM6CiAgICAgICAgICAgICAgICAgICAgVHlwZVZhcmlhYmxlQnVpbGRlci5rZXJuZWxUeXBlUGFyYW1ldGVyc0Zyb21CdWlsZGVycygKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVZhcmlhYmxlcyksCiAgICAgICAgICAgICAgICBmaWxlVXJpOiBwYXJlbnQudGFyZ2V0LmZpbGVVcmkpCiAgICAgICAgICAgICAgLi5maWxlT2Zmc2V0ID0gY2hhck9mZnNldCksCiAgICAgICAgc3VwZXIobWV0YWRhdGEsIDAsIG5hbWUsIHBhcmVudCwgY2hhck9mZnNldCk7CgogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICJUeXBlQWxpYXNCdWlsZGVyIjsKCiAgTGlicmFyeUJ1aWxkZXIgZ2V0IHBhcmVudCA9PiBzdXBlci5wYXJlbnQ7CgogIFR5cGVkZWYgYnVpbGQoU291cmNlTGlicmFyeUJ1aWxkZXIgbGlicmFyeUJ1aWxkZXIpIHsKICAgIHRhcmdldC4udHlwZSA/Pz0gYnVpbGRUaGlzVHlwZShsaWJyYXJ5QnVpbGRlcik7CgogICAgVHlwZUJ1aWxkZXIgdHlwZSA9IHRoaXMudHlwZTsKICAgIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9CiAgICAgICAgICBuZXcgTGlzdDxUeXBlUGFyYW1ldGVyPih0eXBlLnR5cGVWYXJpYWJsZXM/Lmxlbmd0aCA/PyAwKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICAgIFR5cGVWYXJpYWJsZUJ1aWxkZXIgdHlwZVZhcmlhYmxlID0gdHlwZS50eXBlVmFyaWFibGVzW2ldOwogICAgICAgIHR5cGVQYXJhbWV0ZXJzW2ldID0gdHlwZVZhcmlhYmxlLnBhcmFtZXRlcjsKICAgICAgfQogICAgICBGcmVzaFR5cGVQYXJhbWV0ZXJzIGZyZXNoVHlwZVBhcmFtZXRlcnMgPQogICAgICAgICAgZ2V0RnJlc2hUeXBlUGFyYW1ldGVycyh0eXBlUGFyYW1ldGVycyk7CiAgICAgIHRhcmdldC50eXBlUGFyYW1ldGVyc09mRnVuY3Rpb25UeXBlCiAgICAgICAgICAuYWRkQWxsKGZyZXNoVHlwZVBhcmFtZXRlcnMuZnJlc2hUeXBlUGFyYW1ldGVycyk7CgogICAgICBpZiAodHlwZS5mb3JtYWxzICE9IG51bGwpIHsKICAgICAgICBmb3IgKEZvcm1hbFBhcmFtZXRlckJ1aWxkZXIgZm9ybWFsIGluIHR5cGUuZm9ybWFscykgewogICAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgPSBmb3JtYWwuYnVpbGQobGlicmFyeUJ1aWxkZXIsIDApOwogICAgICAgICAgcGFyYW1ldGVyLnR5cGUgPSBmcmVzaFR5cGVQYXJhbWV0ZXJzLnN1YnN0aXR1dGUocGFyYW1ldGVyLnR5cGUpOwogICAgICAgICAgaWYgKGZvcm1hbC5pc05hbWVkKSB7CiAgICAgICAgICAgIHRhcmdldC5uYW1lZFBhcmFtZXRlcnMuYWRkKHBhcmFtZXRlcik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0YXJnZXQucG9zaXRpb25hbFBhcmFtZXRlcnMuYWRkKHBhcmFtZXRlcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHR5cGUgIT0gbnVsbCkgewogICAgICB1bmhhbmRsZWQoIiR7dHlwZS5mdWxsTmFtZUZvckVycm9yc30iLCAiYnVpbGQiLCBjaGFyT2Zmc2V0LCBmaWxlVXJpKTsKICAgIH0KCiAgICByZXR1cm4gdGFyZ2V0OwogIH0KCiAgRGFydFR5cGUgYnVpbGRUaGlzVHlwZShMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7CiAgICBpZiAodGhpc1R5cGUgIT0gbnVsbCkgewogICAgICBpZiAoaWRlbnRpY2FsKHRoaXNUeXBlLCBjeWNsaWNUeXBlQWxpYXNNYXJrZXIpKSB7CiAgICAgICAgbGlicmFyeS5hZGRQcm9ibGVtKHRlbXBsYXRlQ3ljbGljVHlwZWRlZi53aXRoQXJndW1lbnRzKG5hbWUpLAogICAgICAgICAgICBjaGFyT2Zmc2V0LCBub0xlbmd0aCwgZmlsZVVyaSk7CiAgICAgICAgcmV0dXJuIGNvbnN0IEludmFsaWRUeXBlKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXNUeXBlOwogICAgfQogICAgLy8gSXQgaXMgYSBjb21waWxlLXRpbWUgZXJyb3IgZm9yIGFuIGFsaWFzICh0eXBlZGVmKSB0byByZWZlciB0byBpdHNlbGYuIFdlCiAgICAvLyBkZXRlY3QgY3ljbGVzIGJ5IGRldGVjdGluZyByZWN1cnNpdmUgY2FsbHMgdG8gdGhpcyBtZXRob2QgdXNpbmcgYW4KICAgIC8vIGluc3RhbmNlIG9mIEludmFsaWRUeXBlIHRoYXQgaXNuJ3QgaWRlbnRpY2FsIHRvIGBjb25zdCBJbnZhbGlkVHlwZSgpYC4KICAgIHRoaXNUeXBlID0gY3ljbGljVHlwZUFsaWFzTWFya2VyOwogICAgVHlwZUJ1aWxkZXIgdHlwZSA9IHRoaXMudHlwZTsKICAgIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZUJ1aWxkZXIpIHsKICAgICAgRnVuY3Rpb25UeXBlIGJ1aWx0VHlwZSA9IHR5cGU/LmJ1aWxkKGxpYnJhcnksIHRhcmdldC50aGlzVHlwZSk7CiAgICAgIGlmIChidWlsdFR5cGUgIT0gbnVsbCkgewogICAgICAgIGlmICh0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgICAgIGZvciAoVHlwZVZhcmlhYmxlQnVpbGRlciB0diBpbiB0eXBlVmFyaWFibGVzKSB7CiAgICAgICAgICAgIC8vIEZvbGxvdyBib3VuZCBpbiBvcmRlciB0byBmaW5kIGFsbCBjeWNsZXMKICAgICAgICAgICAgdHYuYm91bmQ/LmJ1aWxkKGxpYnJhcnkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpc1R5cGUgPSBidWlsdFR5cGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHRoaXNUeXBlID0gY29uc3QgSW52YWxpZFR5cGUoKTsKICAgICAgfQogICAgfSBlbHNlIGlmICh0eXBlID09IG51bGwpIHsKICAgICAgcmV0dXJuIHRoaXNUeXBlID0gY29uc3QgSW52YWxpZFR5cGUoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB1bmhhbmRsZWQoCiAgICAgICAgICAiJHt0eXBlLmZ1bGxOYW1lRm9yRXJyb3JzfSIsICJidWlsZFRoaXNUeXBlIiwgY2hhck9mZnNldCwgZmlsZVVyaSk7CiAgICB9CiAgfQoKICAvLy8gW2FyZ3VtZW50c10gaGF2ZSBhbHJlYWR5IGJlZW4gYnVpbHQuCiAgRGFydFR5cGUgYnVpbGRUeXBlc1dpdGhCdWlsdEFyZ3VtZW50cygKICAgICAgTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzKSB7CiAgICB2YXIgdGhpc1R5cGUgPSBidWlsZFRoaXNUeXBlKGxpYnJhcnkpOwogICAgaWYgKGNvbnN0IER5bmFtaWNUeXBlKCkgPT0gdGhpc1R5cGUpIHJldHVybiB0aGlzVHlwZTsKICAgIEZ1bmN0aW9uVHlwZSByZXN1bHQgPSB0aGlzVHlwZTsKICAgIGlmICh0YXJnZXQudHlwZVBhcmFtZXRlcnMuaXNFbXB0eSAmJiBhcmd1bWVudHMgPT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YXJnZXQudHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgc3Vic3RpdHV0aW9uW3RhcmdldC50eXBlUGFyYW1ldGVyc1tpXV0gPSBhcmd1bWVudHNbaV07CiAgICB9CiAgICByZXR1cm4gc3Vic3RpdHV0ZShyZXN1bHQsIHN1YnN0aXR1dGlvbik7CiAgfQoKICBMaXN0PERhcnRUeXBlPiBidWlsZFR5cGVBcmd1bWVudHMoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cykgewogICAgaWYgKGFyZ3VtZW50cyA9PSBudWxsICYmIHR5cGVWYXJpYWJsZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gPERhcnRUeXBlPltdOwogICAgfQoKICAgIGlmIChhcmd1bWVudHMgPT0gbnVsbCAmJiB0eXBlVmFyaWFibGVzICE9IG51bGwpIHsKICAgICAgTGlzdDxEYXJ0VHlwZT4gcmVzdWx0ID0KICAgICAgICAgIG5ldyBMaXN0PERhcnRUeXBlPi5maWxsZWQodHlwZVZhcmlhYmxlcy5sZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyArK2kpIHsKICAgICAgICByZXN1bHRbaV0gPSB0eXBlVmFyaWFibGVzW2ldLmRlZmF1bHRUeXBlLmJ1aWxkKGxpYnJhcnkpOwogICAgICB9CiAgICAgIGlmIChsaWJyYXJ5IGlzIFNvdXJjZUxpYnJhcnlCdWlsZGVyKSB7CiAgICAgICAgbGlicmFyeS5pbmZlcnJlZFR5cGVzLmFkZEFsbChyZXN1bHQpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsICYmIGFyZ3VtZW50cy5sZW5ndGggIT0gKHR5cGVWYXJpYWJsZXM/Lmxlbmd0aCA/PyAwKSkgewogICAgICAvLyBUaGF0IHNob3VsZCBiZSBjYXVnaHQgYW5kIHJlcG9ydGVkIGFzIGEgY29tcGlsZS10aW1lIGVycm9yIGVhcmxpZXIuCiAgICAgIHJldHVybiB1bmhhbmRsZWQoCiAgICAgICAgICB0ZW1wbGF0ZVR5cGVBcmd1bWVudE1pc21hdGNoCiAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHModHlwZVZhcmlhYmxlcy5sZW5ndGgpCiAgICAgICAgICAgICAgLm1lc3NhZ2UsCiAgICAgICAgICAiYnVpbGRUeXBlQXJndW1lbnRzIiwKICAgICAgICAgIC0xLAogICAgICAgICAgbnVsbCk7CiAgICB9CgogICAgLy8gYXJndW1lbnRzLmxlbmd0aCA9PSB0eXBlVmFyaWFibGVzLmxlbmd0aAogICAgTGlzdDxEYXJ0VHlwZT4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZmlsbGVkKGFyZ3VtZW50cy5sZW5ndGgsIG51bGwsIGdyb3dhYmxlOiB0cnVlKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgKytpKSB7CiAgICAgIHJlc3VsdFtpXSA9IGFyZ3VtZW50c1tpXS5idWlsZChsaWJyYXJ5KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gSWYgW2FyZ3VtZW50c10gYXJlIG51bGwsIHRoZSBkZWZhdWx0IHR5cGVzIGZvciB0aGUgdmFyaWFibGVzIGFyZSB1c2VkLgogIEBvdmVycmlkZQogIGludCBnZXQgdHlwZVZhcmlhYmxlc0NvdW50ID0+IHR5cGVWYXJpYWJsZXM/Lmxlbmd0aCA/PyAwOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBidWlsZFR5cGUoTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgTGlzdDxUeXBlQnVpbGRlcj4gYXJndW1lbnRzKSB7CiAgICB2YXIgdGhpc1R5cGUgPSBidWlsZFRoaXNUeXBlKGxpYnJhcnkpOwogICAgaWYgKHRoaXNUeXBlIGlzIEludmFsaWRUeXBlKSByZXR1cm4gdGhpc1R5cGU7CiAgICBGdW5jdGlvblR5cGUgcmVzdWx0ID0gdGhpc1R5cGU7CiAgICBpZiAodGFyZ2V0LnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkgJiYgYXJndW1lbnRzID09IG51bGwpIHJldHVybiByZXN1bHQ7CiAgICAvLyBPdGhlcndpc2UsIHN1YnN0aXR1dGUuCiAgICByZXR1cm4gYnVpbGRUeXBlc1dpdGhCdWlsdEFyZ3VtZW50cygKICAgICAgICBsaWJyYXJ5LCBidWlsZFR5cGVBcmd1bWVudHMobGlicmFyeSwgYXJndW1lbnRzKSk7CiAgfQp9CgpmaW5hbCBJbnZhbGlkVHlwZSBjeWNsaWNUeXBlQWxpYXNNYXJrZXIgPSBuZXcgSW52YWxpZFR5cGUoKTsKgNAATk48ASsBIQkSFRYVFxEdASpCAR1IAScJHSAYGRUdASoBSgEWCRgZFSAdATgaATEBGAEVAUBMGBslIEooMCo2AS4BLQE3NAEiJytEOEI0CDAyKjwBIj5LSyAzEzgMCggfTAYBEwQBMxw4RiwkCBcGUEpOJiInRh8lOjgmDAolDy8IHy0NGE4GBAErKTorOiRLTT09Bi0EASU9NhsGATYeUTBBCC0uCBUGAVFNGCczGCAOEQYBMBxLLi8GEwQBTQw8AQxMKzIkSx4pOgQCAT0BO3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL3R5cGVfYWxpYXNfYnVpbGRlci5kYXJ0PnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL3R5cGVfYnVpbGRlci5kYXJ0h08vLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS50eXBlX2J1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IERhcnRUeXBlLCBTdXBlcnR5cGU7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgTG9jYXRlZE1lc3NhZ2U7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcKICAgIHNob3cgTGlicmFyeUJ1aWxkZXIsIFNjb3BlLCBUeXBlRGVjbGFyYXRpb25CdWlsZGVyLCBUeXBlVmFyaWFibGVCdWlsZGVyOwoKYWJzdHJhY3QgY2xhc3MgVHlwZUJ1aWxkZXIgewogIGNvbnN0IFR5cGVCdWlsZGVyKCk7CgogIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIgZ2V0IGRlY2xhcmF0aW9uID0+IG51bGw7CgogIHZvaWQgcmVzb2x2ZUluKAogICAgICBTY29wZSBzY29wZSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpLCBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KSB7fQoKICAvLy8gU2VlIGBVbnJlc29sdmVkVHlwZS5jaGVja1R5cGVgLgogIHZvaWQgY2hlY2soTGlicmFyeUJ1aWxkZXIgbGlicmFyeSwgaW50IGNoYXJPZmZzZXQsIFVyaSBmaWxlVXJpKSB7fQoKICAvLy8gU2VlIGBVbnJlc29sdmVkVHlwZS5ub3JtYWxpemVUeXBlYC4KICB2b2lkIG5vcm1hbGl6ZShpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpIHt9CgogIHZvaWQgYmluZChUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGJ1aWxkZXIpIHt9CgogIC8vLyBNYXkgcmV0dXJuIG51bGwsIGZvciBleGFtcGxlLCBmb3IgbWl4aW4gYXBwbGljYXRpb25zLgogIE9iamVjdCBnZXQgbmFtZTsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWU7CgogIFN0cmluZ0J1ZmZlciBwcmludE9uKFN0cmluZ0J1ZmZlciBidWZmZXIpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiJGRlYnVnTmFtZSgke3ByaW50T24obmV3IFN0cmluZ0J1ZmZlcigpKX0pIjsKCiAgVHlwZUJ1aWxkZXIgc3Vic3QoTWFwPFR5cGVWYXJpYWJsZUJ1aWxkZXIsIFR5cGVCdWlsZGVyPiBzdWJzdGl0dXRpb24pID0+IHRoaXM7CgogIC8vLyBDbG9uZXMgdGhlIHR5cGUgYnVpbGRlciByZWN1cnNpdmVseSB3aXRob3V0IGJpbmRpbmcgdGhlIHN1YnRlcm1zIHRvCiAgLy8vIGV4aXN0aW5nIGRlY2xhcmF0aW9uIG9yIHR5cGUgdmFyaWFibGUgYnVpbGRlcnMuICBBbGwgbmV3bHkgYnVpbHQgdHlwZXMKICAvLy8gYXJlIGFkZGVkIHRvIFtuZXdUeXBlc10sIHNvIHRoYXQgdGhleSBjYW4gYmUgYWRkZWQgdG8gYSBwcm9wZXIgc2NvcGUgYW5kCiAgLy8vIHJlc29sdmVkIGxhdGVyLgogIFR5cGVCdWlsZGVyIGNsb25lKExpc3Q8VHlwZUJ1aWxkZXI+IG5ld1R5cGVzKTsKCiAgYnVpbGRJbnZhbGlkVHlwZShMb2NhdGVkTWVzc2FnZSBtZXNzYWdlLCB7TGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dH0pOwoKICBTdHJpbmcgZ2V0IGZ1bGxOYW1lRm9yRXJyb3JzID0+ICIke3ByaW50T24obmV3IFN0cmluZ0J1ZmZlcigpKX0iOwoKICBEYXJ0VHlwZSBidWlsZChMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5KTsKCiAgU3VwZXJ0eXBlIGJ1aWxkU3VwZXJ0eXBlKExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIGludCBjaGFyT2Zmc2V0LCBVcmkgZmlsZVVyaSk7CgogIFN1cGVydHlwZSBidWlsZE1peGVkSW5UeXBlKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBpbnQgY2hhck9mZnNldCwgVXJpIGZpbGVVcmkpOwp9CjsATk48ARwBOwEyARZNAR0XATIBEksBJkUBKjEBLwE8EwEYAS0BRQFRAUpNTxYxAUwBRAEqAVEBHjwCATVwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci90eXBlX2J1aWxkZXIuZGFydEpzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvYnVpbGRlci90eXBlX2RlY2xhcmF0aW9uX2J1aWxkZXIuZGFydIScLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEudHlwZV9kZWNsYXJhdGlvbl9idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBEYXJ0VHlwZTsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JwogICAgc2hvdwogICAgICAgIERlY2xhcmF0aW9uLAogICAgICAgIExpYnJhcnlCdWlsZGVyLAogICAgICAgIE1ldGFkYXRhQnVpbGRlciwKICAgICAgICBNb2RpZmllckJ1aWxkZXIsCiAgICAgICAgVHlwZUJ1aWxkZXI7CgphYnN0cmFjdCBjbGFzcyBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIGV4dGVuZHMgTW9kaWZpZXJCdWlsZGVyIHsKICBmaW5hbCBMaXN0PE1ldGFkYXRhQnVpbGRlcj4gbWV0YWRhdGE7CgogIGZpbmFsIGludCBtb2RpZmllcnM7CgogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBEZWNsYXJhdGlvbiBwYXJlbnQ7CgogIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIoCiAgICAgIHRoaXMubWV0YWRhdGEsIHRoaXMubW9kaWZpZXJzLCB0aGlzLm5hbWUsIHRoaXMucGFyZW50LCBpbnQgY2hhck9mZnNldCwKICAgICAgW1VyaSBmaWxlVXJpXSkKICAgICAgOiBhc3NlcnQobW9kaWZpZXJzICE9IG51bGwpLAogICAgICAgIHN1cGVyKHBhcmVudCwgY2hhck9mZnNldCwgZmlsZVVyaSk7CgogIGJvb2wgZ2V0IGlzVHlwZURlY2xhcmF0aW9uID0+IHRydWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZnVsbE5hbWVGb3JFcnJvcnMgPT4gbmFtZTsKCiAgaW50IGdldCB0eXBlVmFyaWFibGVzQ291bnQgPT4gMDsKCiAgRGFydFR5cGUgYnVpbGRUeXBlKExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cyk7CgogIC8vLyBbYXJndW1lbnRzXSBoYXZlIGFscmVhZHkgYmVlbiBidWlsdC4KICBEYXJ0VHlwZSBidWlsZFR5cGVzV2l0aEJ1aWx0QXJndW1lbnRzKAogICAgICBMaWJyYXJ5QnVpbGRlciBsaWJyYXJ5LCBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMpOwp9Ci4ATk48ASgBMAEWCRUYGRkVAUAoARcBFQEWARpNFSMsASYBDCgBIwFLASspOQIBQXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL3R5cGVfZGVjbGFyYXRpb25fYnVpbGRlci5kYXJ0R3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL3R5cGVfdmFyaWFibGVfYnVpbGRlci5kYXJ0khEvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS50eXBlX3ZhcmlhYmxlX2J1aWxkZXI7CgppbXBvcnQgJ2J1aWxkZXIuZGFydCcgc2hvdyBMaWJyYXJ5QnVpbGRlciwgVHlwZUJ1aWxkZXIsIFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXI7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdyBEYXJ0VHlwZSwgVHlwZVBhcmFtZXRlciwgVHlwZVBhcmFtZXRlclR5cGU7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgdGVtcGxhdGVUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGU7CgppbXBvcnQgJy4uL2tlcm5lbC9rZXJuZWxfYnVpbGRlci5kYXJ0JwogICAgc2hvdyBDbGFzc0J1aWxkZXIsIE5hbWVkVHlwZUJ1aWxkZXIsIExpYnJhcnlCdWlsZGVyLCBUeXBlQnVpbGRlcjsKCmltcG9ydCAnLi4vc291cmNlL3NvdXJjZV9saWJyYXJ5X2J1aWxkZXIuZGFydCcgc2hvdyBTb3VyY2VMaWJyYXJ5QnVpbGRlcjsKCmNsYXNzIFR5cGVWYXJpYWJsZUJ1aWxkZXIgZXh0ZW5kcyBUeXBlRGVjbGFyYXRpb25CdWlsZGVyIHsKICBUeXBlQnVpbGRlciBib3VuZDsKCiAgVHlwZUJ1aWxkZXIgZGVmYXVsdFR5cGU7CgogIGZpbmFsIFR5cGVQYXJhbWV0ZXIgYWN0dWFsUGFyYW1ldGVyOwoKICBUeXBlVmFyaWFibGVCdWlsZGVyIGFjdHVhbE9yaWdpbjsKCiAgVHlwZVZhcmlhYmxlQnVpbGRlcigKICAgICAgU3RyaW5nIG5hbWUsIFNvdXJjZUxpYnJhcnlCdWlsZGVyIGNvbXBpbGF0aW9uVW5pdCwgaW50IGNoYXJPZmZzZXQsCiAgICAgIHt0aGlzLmJvdW5kLCBib29sIHN5bnRoZXNpemVUeXBlUGFyYW1ldGVyTmFtZTogZmFsc2V9KQogICAgICA6IGFjdHVhbFBhcmFtZXRlciA9IG5ldyBUeXBlUGFyYW1ldGVyKAogICAgICAgICAgICBzeW50aGVzaXplVHlwZVBhcmFtZXRlck5hbWUgPyAnIyRuYW1lJyA6IG5hbWUsIG51bGwpCiAgICAgICAgICAuLmZpbGVPZmZzZXQgPSBjaGFyT2Zmc2V0LAogICAgICAgIHN1cGVyKG51bGwsIDAsIG5hbWUsIGNvbXBpbGF0aW9uVW5pdCwgY2hhck9mZnNldCk7CgogIFR5cGVWYXJpYWJsZUJ1aWxkZXIuZnJvbUtlcm5lbCgKICAgICAgVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIExpYnJhcnlCdWlsZGVyIGNvbXBpbGF0aW9uVW5pdCkKICAgICAgOiBhY3R1YWxQYXJhbWV0ZXIgPSBwYXJhbWV0ZXIsCiAgICAgICAgc3VwZXIobnVsbCwgMCwgcGFyYW1ldGVyLm5hbWUsIGNvbXBpbGF0aW9uVW5pdCwgcGFyYW1ldGVyLmZpbGVPZmZzZXQpOwoKICBib29sIGdldCBpc1R5cGVWYXJpYWJsZSA9PiB0cnVlOwoKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAiVHlwZVZhcmlhYmxlQnVpbGRlciI7CgogIFN0cmluZ0J1ZmZlciBwcmludE9uKFN0cmluZ0J1ZmZlciBidWZmZXIpIHsKICAgIGJ1ZmZlci53cml0ZShuYW1lKTsKICAgIGlmIChib3VuZCAhPSBudWxsKSB7CiAgICAgIGJ1ZmZlci53cml0ZSgiIGV4dGVuZHMgIik7CiAgICAgIGJvdW5kLnByaW50T24oYnVmZmVyKTsKICAgIH0KICAgIHJldHVybiBidWZmZXI7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiJHtwcmludE9uKG5ldyBTdHJpbmdCdWZmZXIoKSl9IjsKCiAgVHlwZVZhcmlhYmxlQnVpbGRlciBnZXQgb3JpZ2luID0+IGFjdHVhbE9yaWdpbiA/PyB0aGlzOwoKICBUeXBlUGFyYW1ldGVyIGdldCBwYXJhbWV0ZXIgPT4gb3JpZ2luLmFjdHVhbFBhcmFtZXRlcjsKCiAgVHlwZVBhcmFtZXRlciBnZXQgdGFyZ2V0ID0+IHBhcmFtZXRlcjsKCiAgRGFydFR5cGUgYnVpbGRUeXBlKExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8VHlwZUJ1aWxkZXI+IGFyZ3VtZW50cykgewogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGludCBjaGFyT2Zmc2V0ID0gLTE7IC8vIFRPRE8oYWhlKTogUHJvdmlkZSB0aGVzZS4KICAgICAgVXJpIGZpbGVVcmkgPSBudWxsOyAvLyBUT0RPKGFoZSk6IFByb3ZpZGUgdGhlc2UuCiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50c09uVHlwZVZhcmlhYmxlLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgbmFtZS5sZW5ndGgsCiAgICAgICAgICBmaWxlVXJpKTsKICAgIH0KICAgIHJldHVybiBuZXcgVHlwZVBhcmFtZXRlclR5cGUocGFyYW1ldGVyKTsKICB9CgogIERhcnRUeXBlIGJ1aWxkVHlwZXNXaXRoQnVpbHRBcmd1bWVudHMoCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cykgewogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGludCBjaGFyT2Zmc2V0ID0gLTE7IC8vIFRPRE8oYWhlKTogUHJvdmlkZSB0aGVzZS4KICAgICAgVXJpIGZpbGVVcmkgPSBudWxsOyAvLyBUT0RPKGFoZSk6IFByb3ZpZGUgdGhlc2UuCiAgICAgIGxpYnJhcnkuYWRkUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlVHlwZUFyZ3VtZW50c09uVHlwZVZhcmlhYmxlLndpdGhBcmd1bWVudHMobmFtZSksCiAgICAgICAgICBjaGFyT2Zmc2V0LAogICAgICAgICAgbmFtZS5sZW5ndGgsCiAgICAgICAgICBmaWxlVXJpKTsKICAgIH0KICAgIHJldHVybiBidWlsZFR5cGUobGlicmFyeSwgbnVsbCk7CiAgfQoKICBUeXBlQnVpbGRlciBhc1R5cGVCdWlsZGVyKCkgewogICAgcmV0dXJuIG5ldyBOYW1lZFR5cGVCdWlsZGVyKG5hbWUsIG51bGwpLi5iaW5kKHRoaXMpOwogIH0KCiAgdm9pZCBmaW5pc2goCiAgICAgIExpYnJhcnlCdWlsZGVyIGxpYnJhcnksIENsYXNzQnVpbGRlciBvYmplY3QsIFR5cGVCdWlsZGVyIGR5bmFtaWNUeXBlKSB7CiAgICBpZiAoaXNQYXRjaCkgcmV0dXJuOwogICAgRGFydFR5cGUgb2JqZWN0VHlwZSA9IG9iamVjdC5idWlsZFR5cGUobGlicmFyeSwgbnVsbCk7CiAgICBwYXJhbWV0ZXIuYm91bmQgPz89IGJvdW5kPy5idWlsZChsaWJyYXJ5KSA/PyBvYmplY3RUeXBlOwogICAgLy8gSWYgZGVmYXVsdFR5cGUgaXMgbm90IHNldCwgaW5pdGlhbGl6ZSBpdCB0byBkeW5hbWljLCB1bmxlc3MgdGhlIGJvdW5kIGlzCiAgICAvLyBleHBsaWNpdGx5IHNwZWNpZmllZCBhcyBPYmplY3QsIGluIHdoaWNoIGNhc2UgZGVmYXVsdFR5cGUgc2hvdWxkIGFsc28gYmUKICAgIC8vIE9iamVjdC4gVGhpcyBtYWtlcyBzdXJlIGluc3RhbnRpYXRpb24gb2YgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlcyB3aXRoIGFuCiAgICAvLyBleHBsaWNpdCBPYmplY3QgYm91bmQgcmVzdWx0cyBpbiBPYmplY3QgYXMgdGhlIGluc3RhbnRpYXRlZCB0eXBlLgogICAgcGFyYW1ldGVyLmRlZmF1bHRUeXBlID8/PSBkZWZhdWx0VHlwZT8uYnVpbGQobGlicmFyeSkgPz8KICAgICAgICAoYm91bmQgIT0gbnVsbCAmJiBwYXJhbWV0ZXIuYm91bmQgPT0gb2JqZWN0VHlwZQogICAgICAgICAgICA/IG9iamVjdFR5cGUKICAgICAgICAgICAgOiBkeW5hbWljVHlwZS5idWlsZChsaWJyYXJ5KSk7CiAgfQoKICB2b2lkIGFwcGx5UGF0Y2goY292YXJpYW50IFR5cGVWYXJpYWJsZUJ1aWxkZXIgcGF0Y2gpIHsKICAgIHBhdGNoLmFjdHVhbE9yaWdpbiA9IHRoaXM7CiAgfQoKICBUeXBlVmFyaWFibGVCdWlsZGVyIGNsb25lKExpc3Q8VHlwZUJ1aWxkZXI+IG5ld1R5cGVzKSB7CiAgICAvLyBUT0RPKGRtaXRyeWFzKTogRmlndXJlIG91dCBpZiB1c2luZyBbY2hhck9mZnNldF0gaGVyZSBpcyBhIGdvb2QgaWRlYS4KICAgIC8vIEFuIGFsdGVybmF0aXZlIGlzIHRvIHVzZSB0aGUgb2Zmc2V0IG9mIHRoZSBub2RlIHRoZSBjbG9uZWQgdHlwZSB2YXJpYWJsZQogICAgLy8gaXMgZGVjbGFyZWQgb24uCiAgICByZXR1cm4gbmV3IFR5cGVWYXJpYWJsZUJ1aWxkZXIobmFtZSwgcGFyZW50LCBjaGFyT2Zmc2V0LAogICAgICAgIGJvdW5kOiBib3VuZC5jbG9uZShuZXdUeXBlcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBUeXBlVmFyaWFibGVCdWlsZGVyICYmIHRhcmdldCA9PSBvdGhlci50YXJnZXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRhcmdldC5oYXNoQ29kZTsKCiAgc3RhdGljIExpc3Q8VHlwZVBhcmFtZXRlcj4ga2VybmVsVHlwZVBhcmFtZXRlcnNGcm9tQnVpbGRlcnMoCiAgICAgIExpc3Q8VHlwZVZhcmlhYmxlQnVpbGRlcj4gYnVpbGRlcnMpIHsKICAgIGlmIChidWlsZGVycyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gcmVzdWx0ID0KICAgICAgICBuZXcgTGlzdDxUeXBlUGFyYW1ldGVyPi5maWxsZWQoYnVpbGRlcnMubGVuZ3RoLCBudWxsLCBncm93YWJsZTogdHJ1ZSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ1aWxkZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdFtpXSA9IGJ1aWxkZXJzW2ldLnRhcmdldDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CoCMAE5OPAElAVABITUBRwEnRgFKATsVARsBJwEkARdJPS1BJTsBIj8lTwEjATEBLhgZIR0GEwQBOQE6ATkBKQFMHTg3GkMWFxQGLQQBKTodODcaQxYXFAYlBAEgOQQBD04ZOz1QUE9JPTgZKwQBOR8EATpNUBc9JwQBDCNDBAEMJwE/LCchTzAmBhMEAgE+cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvdHlwZV92YXJpYWJsZV9idWlsZGVyLmRhcnRBc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL2J1aWxkZXIvdW5yZXNvbHZlZF90eXBlLmRhcnSD+S8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnVucmVzb2x2ZWRfdHlwZTsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JyBzaG93IExpYnJhcnlCdWlsZGVyLCBTY29wZSwgVHlwZUJ1aWxkZXI7CgovLy8gQSB3cmFwcGVyIGFyb3VuZCBhIHR5cGUgdGhhdCBpcyB5ZXQgdG8gYmUgcmVzb2x2ZWQuCmNsYXNzIFVucmVzb2x2ZWRUeXBlIHsKICBmaW5hbCBUeXBlQnVpbGRlciBidWlsZGVyOwogIGZpbmFsIGludCBjaGFyT2Zmc2V0OwogIGZpbmFsIFVyaSBmaWxlVXJpOwoKICBVbnJlc29sdmVkVHlwZSh0aGlzLmJ1aWxkZXIsIHRoaXMuY2hhck9mZnNldCwgdGhpcy5maWxlVXJpKTsKCiAgdm9pZCByZXNvbHZlSW4oU2NvcGUgc2NvcGUsIExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpID0+CiAgICAgIGJ1aWxkZXIucmVzb2x2ZUluKHNjb3BlLCBjaGFyT2Zmc2V0LCBmaWxlVXJpLCBsaWJyYXJ5KTsKCiAgLy8vIFBlcmZvcm1zIGNoZWNrcyBvbiB0aGUgdHlwZSBhZnRlciBpdCdzIHJlc29sdmVkLgogIHZvaWQgY2hlY2tUeXBlKExpYnJhcnlCdWlsZGVyIGxpYnJhcnkpIHsKICAgIHJldHVybiBidWlsZGVyLmNoZWNrKGxpYnJhcnksIGNoYXJPZmZzZXQsIGZpbGVVcmkpOwogIH0KCiAgLy8vIE5vcm1hbGl6ZXMgdGhlIHR5cGUgYXJndW1lbnRzIGluIGFjY29yZGFuY2Ugd2l0aCBEYXJ0IDEgc2VtYW50aWNzLgogIHZvaWQgbm9ybWFsaXplVHlwZSgpID0+IGJ1aWxkZXIubm9ybWFsaXplKGNoYXJPZmZzZXQsIGZpbGVVcmkpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiVW5yZXNvbHZlZFR5cGUoQCRjaGFyT2Zmc2V0LCAkYnVpbGRlcikiOwp9Ch8ATk48AR8BPwE4Fx0YFQE/ATk+ATcrOAQBSUIBQQIBOHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL3VucmVzb2x2ZWRfdHlwZS5kYXJ0Q3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9idWlsZGVyL3ZvaWRfdHlwZV9idWlsZGVyLmRhcnSCWi8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnZvaWRfdHlwZV9idWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgc2hvdyBEYXJ0VHlwZTsKCmltcG9ydCAnYnVpbGRlci5kYXJ0JyBzaG93IEJ1aWx0aW5UeXBlQnVpbGRlciwgTGlicmFyeUJ1aWxkZXI7CgpjbGFzcyBWb2lkVHlwZUJ1aWxkZXIgZXh0ZW5kcyBCdWlsdGluVHlwZUJ1aWxkZXIgewogIFZvaWRUeXBlQnVpbGRlcihEYXJ0VHlwZSB0eXBlLCBMaWJyYXJ5QnVpbGRlciBjb21waWxhdGlvblVuaXQsIGludCBjaGFyT2Zmc2V0KQogICAgICA6IHN1cGVyKCJ2b2lkIiwgdHlwZSwgY29tcGlsYXRpb25Vbml0LCBjaGFyT2Zmc2V0KTsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gIlZvaWRUeXBlQnVpbGRlciI7Cn0KEgBOTjwBIQEwAT8BM1E6AS0CATpwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci92b2lkX3R5cGVfYnVpbGRlci5kYXJ0OXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvbGlzdGVuZXIuZGFydMAAsXcvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5wYXJzZXIubGlzdGVuZXI7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcKICAgIHNob3cgTWVzc2FnZSwgTWVzc2FnZUNvZGUsIHRlbXBsYXRlRXhwZXJpbWVudE5vdEVuYWJsZWQ7CgppbXBvcnQgJy4uL3F1b3RlLmRhcnQnIHNob3cgVW5lc2NhcGVFcnJvckxpc3RlbmVyOwoKaW1wb3J0ICcuLi9zY2FubmVyL2Vycm9yX3Rva2VuLmRhcnQnIHNob3cgRXJyb3JUb2tlbjsKCmltcG9ydCAnYXNzZXJ0LmRhcnQnIHNob3cgQXNzZXJ0OwoKaW1wb3J0ICdmb3JtYWxfcGFyYW1ldGVyX2tpbmQuZGFydCcgc2hvdyBGb3JtYWxQYXJhbWV0ZXJLaW5kOwoKaW1wb3J0ICdpZGVudGlmaWVyX2NvbnRleHQuZGFydCcgc2hvdyBJZGVudGlmaWVyQ29udGV4dDsKCmltcG9ydCAnY2xhc3Nfa2luZC5kYXJ0JyBzaG93IENsYXNzS2luZDsKCmltcG9ydCAnbWVtYmVyX2tpbmQuZGFydCcgc2hvdyBNZW1iZXJLaW5kOwoKaW1wb3J0ICd1dGlsLmRhcnQnIHNob3cgb3B0aW9uYWw7CgovLy8gQSBwYXJzZXIgZXZlbnQgbGlzdGVuZXIgdGhhdCBkb2VzIG5vdGhpbmcgZXhjZXB0IHRocm93IGV4Y2VwdGlvbnMKLy8vIG9uIHBhcnNlciBlcnJvcnMuCi8vLwovLy8gRXZlbnRzIGFyZSBtZXRob2RzIHRoYXQgYmVnaW4gd2l0aCBvbmUgb2Y6IGBiZWdpbmAsIGBlbmRgLCBvciBgaGFuZGxlYC4KLy8vCi8vLyBFdmVudHMgc3RhcnRpbmcgd2l0aCBgYmVnaW5gIGFuZCBgZW5kYCBjb21lIGluIHBhaXJzLiBOb3JtYWxseSwgYQovLy8gYGJlZ2luRm9vYCBldmVudCBpcyBmb2xsb3dlZCBieSBhbiBgZW5kRm9vYCBldmVudC4gVGhlcmUncyBhIGZldyBleGNlcHRpb25zCi8vLyBkb2N1bWVudGVkIGJlbG93LgovLy8KLy8vIEV2ZW50cyBzdGFydGluZyB3aXRoIGBoYW5kbGVgIGFyZSB1c2VkIHdoZW4gaXNuJ3QgcG9zc2libGUgdG8gaGF2ZSBhIGJlZ2luCi8vLyBldmVudC4KY2xhc3MgTGlzdGVuZXIgaW1wbGVtZW50cyBVbmVzY2FwZUVycm9yTGlzdGVuZXIgewogIFVyaSBnZXQgdXJpID0+IG51bGw7CgogIHZvaWQgbG9nRXZlbnQoU3RyaW5nIG5hbWUpIHt9CgogIHNldCBzdXBwcmVzc1BhcnNlRXJyb3JzKGJvb2wgdmFsdWUpIHt9CgogIHZvaWQgYmVnaW5Bcmd1bWVudHMoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kQXJndW1lbnRzKGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJBcmd1bWVudHMiKTsKICB9CgogIC8vLyBIYW5kbGUgYXN5bmMgbW9kaWZpZXJzIGBhc3luY2AsIGBhc3luYypgLCBgc3luY2AuCiAgdm9pZCBoYW5kbGVBc3luY01vZGlmaWVyKFRva2VuIGFzeW5jVG9rZW4sIFRva2VuIHN0YXJUb2tlbikgewogICAgbG9nRXZlbnQoIkFzeW5jTW9kaWZpZXIiKTsKICB9CgogIHZvaWQgYmVnaW5Bd2FpdEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kQXdhaXRFeHByZXNzaW9uKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiQXdhaXRFeHByZXNzaW9uIik7CiAgfQoKICB2b2lkIGVuZEludmFsaWRBd2FpdEV4cHJlc3Npb24oCiAgICAgIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuLCBNZXNzYWdlQ29kZSBlcnJvckNvZGUpIHsKICAgIGxvZ0V2ZW50KCJJbnZhbGlkQXdhaXRFeHByZXNzaW9uIik7CiAgfQoKICB2b2lkIGJlZ2luQmxvY2soVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kQmxvY2soaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkJsb2NrIik7CiAgfQoKICAvLy8gQ2FsbGVkIHRvIGhhbmRsZSBhIGJsb2NrIHRoYXQgaGFzIGJlZW4gcGFyc2VkIGJ1dCBpcyBub3QgYXNzb2NpYXRlZAogIC8vLyB3aXRoIGFueSB0b3AgbGV2ZWwgZnVuY3Rpb24gZGVjbGFyYXRpb24uIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gYmxvY2sKICB2b2lkIGhhbmRsZUludmFsaWRUb3BMZXZlbEJsb2NrKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGJlZ2luQ2FzY2FkZShUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRDYXNjYWRlKCkgewogICAgbG9nRXZlbnQoIkNhc2NhZGUiKTsKICB9CgogIHZvaWQgYmVnaW5DYXNlRXhwcmVzc2lvbihUb2tlbiBjYXNlS2V5d29yZCkge30KCiAgdm9pZCBlbmRDYXNlRXhwcmVzc2lvbihUb2tlbiBjb2xvbikgewogICAgbG9nRXZlbnQoIkNhc2VFeHByZXNzaW9uIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBzdGFydCBvZiB0aGUgYm9keSBvZiBhIGNsYXNzLCBtaXhpbiBvciBleHRlbnNpb24gZGVjbGFyYXRpb24KICAvLy8gYmVnaW5uaW5nIGF0IFt0b2tlbl0uIFRoZSBhY3R1YWwga2luZCBvZiBkZWNsYXJhdGlvbiBpcyBpbmRpY2F0ZWQgYnkKICAvLy8gW2tpbmRdLgogIHZvaWQgYmVnaW5DbGFzc09yTWl4aW5Cb2R5KENsYXNzS2luZCBraW5kLCBUb2tlbiB0b2tlbikge30KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIHRoZSBib2R5IG9mIGEgY2xhc3MsIG1peGluIG9yIGV4dGVuc2lvbiBkZWNsYXJhdGlvbi4KICAvLy8gVGhlIG9ubHkgc3Vic3RydWN0dXJlcyBhcmUgdGhlIGNsYXNzLCBtaXhpbiBvciBleHRlbnNpb24gbWVtYmVycy4KICAvLy8KICAvLy8gVGhlIGFjdHVhbCBraW5kIG9mIGRlY2xhcmF0aW9uIGlzIGluZGljYXRlZCBieSBba2luZF0uCiAgdm9pZCBlbmRDbGFzc09yTWl4aW5Cb2R5KAogICAgICBDbGFzc0tpbmQga2luZCwgaW50IG1lbWJlckNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkNsYXNzT3JNaXhpbkJvZHkiKTsKICB9CgogIC8vLyBDYWxsZWQgYmVmb3JlIHBhcnNpbmcgYSBjbGFzcyBvciBuYW1lZCBtaXhpbiBhcHBsaWNhdGlvbi4KICB2b2lkIGJlZ2luQ2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbihUb2tlbiB0b2tlbikge30KCiAgLy8vIEhhbmRsZSB0aGUgYmVnaW5uaW5nIG9mIGEgY2xhc3MgZGVjbGFyYXRpb24uCiAgLy8vIFtiZWdpbl0gbWF5IGJlIHRoZSBzYW1lIGFzIFtuYW1lXSwgb3IgbWF5IHBvaW50IHRvIG1vZGlmaWVycwogIC8vLyAob3IgZXh0cmFuZW91cyBtb2RpZmllcnMgaW4gdGhlIGNhc2Ugb2YgcmVjb3ZlcnkpIHByZWNlZGluZyBbbmFtZV0uCiAgdm9pZCBiZWdpbkNsYXNzRGVjbGFyYXRpb24oVG9rZW4gYmVnaW4sIFRva2VuIGFic3RyYWN0VG9rZW4sIFRva2VuIG5hbWUpIHt9CgogIC8vLyBIYW5kbGUgYW4gZXh0ZW5kcyBjbGF1c2UgaW4gYSBjbGFzcyBkZWNsYXJhdGlvbi4gU3Vic3RydWN0dXJlczoKICAvLy8gLSBzdXBlcnR5cGUgKG1heSBiZSBhIG1peGluIGFwcGxpY2F0aW9uKQogIHZvaWQgaGFuZGxlQ2xhc3NFeHRlbmRzKFRva2VuIGV4dGVuZHNLZXl3b3JkKSB7CiAgICBsb2dFdmVudCgiQ2xhc3NFeHRlbmRzIik7CiAgfQoKICAvLy8gSGFuZGxlIGFuIGltcGxlbWVudHMgY2xhdXNlIGluIGEgY2xhc3Mgb3IgbWl4aW4gZGVjbGFyYXRpb24uCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gaW1wbGVtZW50ZWQgdHlwZXMKICB2b2lkIGhhbmRsZUNsYXNzT3JNaXhpbkltcGxlbWVudHMoCiAgICAgIFRva2VuIGltcGxlbWVudHNLZXl3b3JkLCBpbnQgaW50ZXJmYWNlc0NvdW50KSB7CiAgICBsb2dFdmVudCgiQ2xhc3NJbXBsZW1lbnRzIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBoZWFkZXIgb2YgYSBjbGFzcyBkZWNsYXJhdGlvbi4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gbWV0YWRhdGEKICAvLy8gLSBtb2RpZmllcnMKICAvLy8gLSBjbGFzcyBuYW1lCiAgLy8vIC0gdHlwZSB2YXJpYWJsZXMKICAvLy8gLSBzdXBlcnR5cGUKICAvLy8gLSB3aXRoIGNsYXVzZQogIC8vLyAtIGltcGxlbWVudGVkIHR5cGVzCiAgLy8vIC0gbmF0aXZlIGNsYXVzZQogIHZvaWQgaGFuZGxlQ2xhc3NIZWFkZXIoVG9rZW4gYmVnaW4sIFRva2VuIGNsYXNzS2V5d29yZCwgVG9rZW4gbmF0aXZlVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJDbGFzc0hlYWRlciIpOwogIH0KCiAgLy8vIEhhbmRsZSByZWNvdmVyeSBhc3NvY2lhdGVkIHdpdGggYSBjbGFzcyBoZWFkZXIuCiAgLy8vIFRoaXMgbWF5IGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBhZnRlciBbaGFuZGxlQ2xhc3NIZWFkZXJdCiAgLy8vIHRvIHJlY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByZXZpb3VzIGNsYXNzIGhlYWRlci4KICAvLy8gVGhlIHN1YnN0cnVjdHVyZXMgYXJlIGEgc3Vic2V0IG9mCiAgLy8vIGFuZCBpbiB0aGUgc2FtZSBvcmRlciBhcyBbaGFuZGxlQ2xhc3NIZWFkZXJdOgogIC8vLyAtIHN1cGVydHlwZQogIC8vLyAtIHdpdGggY2xhdXNlCiAgLy8vIC0gaW1wbGVtZW50ZWQgdHlwZXMKICB2b2lkIGhhbmRsZVJlY292ZXJDbGFzc0hlYWRlcigpIHsKICAgIGxvZ0V2ZW50KCJSZWNvdmVyQ2xhc3NIZWFkZXIiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGNsYXNzIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBjbGFzcyBoZWFkZXIKICAvLy8gLSBjbGFzcyBib2R5CiAgdm9pZCBlbmRDbGFzc0RlY2xhcmF0aW9uKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiQ2xhc3NEZWNsYXJhdGlvbiIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgYmVnaW5uaW5nIG9mIGEgbWl4aW4gZGVjbGFyYXRpb24uCiAgdm9pZCBiZWdpbk1peGluRGVjbGFyYXRpb24oVG9rZW4gbWl4aW5LZXl3b3JkLCBUb2tlbiBuYW1lKSB7fQoKICAvLy8gSGFuZGxlIGFuIG9uIGNsYXVzZSBpbiBhIG1peGluIGRlY2xhcmF0aW9uLiBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIGltcGxlbWVudGVkIHR5cGVzCiAgdm9pZCBoYW5kbGVNaXhpbk9uKFRva2VuIG9uS2V5d29yZCwgaW50IHR5cGVDb3VudCkgewogICAgbG9nRXZlbnQoIk1peGluT24iKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGhlYWRlciBvZiBhIG1peGluIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIC8vLyAtIG1peGluIG5hbWUKICAvLy8gLSB0eXBlIHZhcmlhYmxlcwogIC8vLyAtIG9uIHR5cGVzCiAgLy8vIC0gaW1wbGVtZW50ZWQgdHlwZXMKICB2b2lkIGhhbmRsZU1peGluSGVhZGVyKFRva2VuIG1peGluS2V5d29yZCkgewogICAgbG9nRXZlbnQoIk1peGluSGVhZGVyIik7CiAgfQoKICAvLy8gSGFuZGxlIHJlY292ZXJ5IGFzc29jaWF0ZWQgd2l0aCBhIG1peGluIGhlYWRlci4KICAvLy8gVGhpcyBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGFmdGVyIFtoYW5kbGVNaXhpbkhlYWRlcl0KICAvLy8gdG8gcmVjb3ZlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJldmlvdXMgbWl4aW4gaGVhZGVyLgogIC8vLyBUaGUgc3Vic3RydWN0dXJlcyBhcmUgYSBzdWJzZXQgb2YKICAvLy8gYW5kIGluIHRoZSBzYW1lIG9yZGVyIGFzIFtoYW5kbGVNaXhpbkhlYWRlcl0KICAvLy8gLSBvbiB0eXBlcwogIC8vLyAtIGltcGxlbWVudGVkIHR5cGVzCiAgdm9pZCBoYW5kbGVSZWNvdmVyTWl4aW5IZWFkZXIoKSB7CiAgICBsb2dFdmVudCgiUmVjb3Zlck1peGluSGVhZGVyIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSBtaXhpbiBkZWNsYXJhdGlvbi4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gbWl4aW4gaGVhZGVyCiAgLy8vIC0gY2xhc3Mgb3IgbWl4aW4gYm9keQogIHZvaWQgZW5kTWl4aW5EZWNsYXJhdGlvbihUb2tlbiBtaXhpbktleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiTWl4aW5EZWNsYXJhdGlvbiIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgYmVnaW5uaW5nIG9mIGFuIGV4dGVuc2lvbiBtZXRob2RzIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgdm9pZCBiZWdpbkV4dGVuc2lvbkRlY2xhcmF0aW9uKFRva2VuIGV4dGVuc2lvbktleXdvcmQsIFRva2VuIG5hbWUpIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhbiBleHRlbnNpb24gbWV0aG9kcyBkZWNsYXJhdGlvbi4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gc3Vic3RydWN0dXJlcyBmcm9tIFtiZWdpbkV4dGVuc2lvbkRlY2xhcmF0aW9uXQogIC8vLyAtIG9uIHR5cGUKICAvLy8gLSBib2R5CiAgdm9pZCBlbmRFeHRlbnNpb25EZWNsYXJhdGlvbigKICAgICAgVG9rZW4gZXh0ZW5zaW9uS2V5d29yZCwgVG9rZW4gb25LZXl3b3JkLCBUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoJ0V4dGVuc2lvbkRlY2xhcmF0aW9uJyk7CiAgfQoKICB2b2lkIGJlZ2luQ29tYmluYXRvcnMoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kQ29tYmluYXRvcnMoaW50IGNvdW50KSB7CiAgICBsb2dFdmVudCgiQ29tYmluYXRvcnMiKTsKICB9CgogIHZvaWQgYmVnaW5Db21waWxhdGlvblVuaXQoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBUaGlzIG1ldGhvZCBleGlzdHMgZm9yIGFuYWx5emVyIGNvbXBhdGliaWxpdHkgb25seQogIC8vLyBhbmQgd2lsbCBiZSByZW1vdmVkIG9uY2UgYW5hbHl6ZXIvZmFzdGEgaW50ZWdyYXRpb24gaXMgY29tcGxldGUuCiAgLy8vCiAgLy8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gW3BhcnNlRGlyZWN0aXZlc10gaGFzIHBhcnNlZCBhbGwgZGlyZWN0aXZlcwogIC8vLyBhbmQgaXMgc2tpcHBpbmcgdGhlIHJlbWFpbmRlciBvZiB0aGUgZmlsZS4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gbWV0YWRhdGEKICB2b2lkIGhhbmRsZURpcmVjdGl2ZXNPbmx5KCkge30KCiAgdm9pZCBlbmRDb21waWxhdGlvblVuaXQoaW50IGNvdW50LCBUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkNvbXBpbGF0aW9uVW5pdCIpOwogIH0KCiAgdm9pZCBiZWdpbkNvbnN0TGl0ZXJhbChUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRDb25zdExpdGVyYWwoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJDb25zdExpdGVyYWwiKTsKICB9CgogIHZvaWQgYmVnaW5Db25zdHJ1Y3RvclJlZmVyZW5jZShUb2tlbiBzdGFydCkge30KCiAgdm9pZCBlbmRDb25zdHJ1Y3RvclJlZmVyZW5jZSgKICAgICAgVG9rZW4gc3RhcnQsIFRva2VuIHBlcmlvZEJlZm9yZU5hbWUsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiQ29uc3RydWN0b3JSZWZlcmVuY2UiKTsKICB9CgogIHZvaWQgYmVnaW5Eb1doaWxlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZERvV2hpbGVTdGF0ZW1lbnQoCiAgICAgIFRva2VuIGRvS2V5d29yZCwgVG9rZW4gd2hpbGVLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkRvV2hpbGVTdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgYmVnaW5Eb1doaWxlU3RhdGVtZW50Qm9keShUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmREb1doaWxlU3RhdGVtZW50Qm9keShUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkRvV2hpbGVTdGF0ZW1lbnRCb2R5Iik7CiAgfQoKICB2b2lkIGJlZ2luV2hpbGVTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZFdoaWxlU3RhdGVtZW50Qm9keShUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIldoaWxlU3RhdGVtZW50Qm9keSIpOwogIH0KCiAgdm9pZCBiZWdpbkVudW0oVG9rZW4gZW51bUtleXdvcmQpIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhbiBlbnVtIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBNZXRhZGF0YQogIC8vLyAtIEVudW0gbmFtZSAoaWRlbnRpZmllcikKICAvLy8gLSBbY291bnRdIHRpbWVzOgogIC8vLyAgIC0gRW51bSB2YWx1ZSAoaWRlbnRpZmllcikKICB2b2lkIGVuZEVudW0oVG9rZW4gZW51bUtleXdvcmQsIFRva2VuIGxlZnRCcmFjZSwgaW50IGNvdW50KSB7CiAgICBsb2dFdmVudCgiRW51bSIpOwogIH0KCiAgdm9pZCBiZWdpbkV4cG9ydChUb2tlbiB0b2tlbikge30KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGFuIGV4cG9ydCBkaXJlY3RpdmUuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgLy8vIC0gdXJpCiAgLy8vIC0gY29uZGl0aW9uYWwgdXJpcwogIC8vLyAtIGNvbWJpbmF0b3JzCiAgdm9pZCBlbmRFeHBvcnQoVG9rZW4gZXhwb3J0S2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBsb2dFdmVudCgiRXhwb3J0Iik7CiAgfQoKICAvLy8gQ2FsbGVkIGJ5IFtQYXJzZXJdIGFmdGVyIHBhcnNpbmcgYW4gZXh0cmFuZW91cyBleHByZXNzaW9uIGFzIGVycm9yCiAgLy8vIHJlY292ZXJ5LiBGb3IgYSBzdGFjay1iYXNlZCBsaXN0ZW5lciwgdGhlIHN1Z2dlc3RlZCBhY3Rpb24gaXMgdG8gZGlzY2FyZAogIC8vLyBhbiBleHByZXNzaW9uIGZyb20gdGhlIHN0YWNrLgogIHZvaWQgaGFuZGxlRXh0cmFuZW91c0V4cHJlc3Npb24oVG9rZW4gdG9rZW4sIE1lc3NhZ2UgbWVzc2FnZSkgewogICAgbG9nRXZlbnQoIkV4dHJhbmVvdXNFeHByZXNzaW9uIik7CiAgfQoKICB2b2lkIGhhbmRsZUV4cHJlc3Npb25TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJFeHByZXNzaW9uU3RhdGVtZW50Iik7CiAgfQoKICB2b2lkIGJlZ2luRmFjdG9yeU1ldGhvZCgKICAgICAgVG9rZW4gbGFzdENvbnN1bWVkLCBUb2tlbiBleHRlcm5hbFRva2VuLCBUb2tlbiBjb25zdFRva2VuKSB7fQoKICB2b2lkIGVuZEZhY3RvcnlNZXRob2QoCiAgICAgIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGZhY3RvcnlLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkZhY3RvcnlNZXRob2QiKTsKICB9CgogIHZvaWQgYmVnaW5Gb3JtYWxQYXJhbWV0ZXIoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCwgVG9rZW4gcmVxdWlyZWRUb2tlbiwKICAgICAgVG9rZW4gY292YXJpYW50VG9rZW4sIFRva2VuIHZhckZpbmFsT3JDb25zdCkge30KCiAgdm9pZCBlbmRGb3JtYWxQYXJhbWV0ZXIoCiAgICAgIFRva2VuIHRoaXNLZXl3b3JkLAogICAgICBUb2tlbiBwZXJpb2RBZnRlclRoaXMsCiAgICAgIFRva2VuIG5hbWVUb2tlbiwKICAgICAgVG9rZW4gaW5pdGlhbGl6ZXJTdGFydCwKICAgICAgVG9rZW4gaW5pdGlhbGl6ZXJFbmQsCiAgICAgIEZvcm1hbFBhcmFtZXRlcktpbmQga2luZCwKICAgICAgTWVtYmVyS2luZCBtZW1iZXJLaW5kKSB7CiAgICBsb2dFdmVudCgiRm9ybWFsUGFyYW1ldGVyIik7CiAgfQoKICB2b2lkIGhhbmRsZU5vRm9ybWFsUGFyYW1ldGVycyhUb2tlbiB0b2tlbiwgTWVtYmVyS2luZCBraW5kKSB7CiAgICBsb2dFdmVudCgiTm9Gb3JtYWxQYXJhbWV0ZXJzIik7CiAgfQoKICB2b2lkIGJlZ2luRm9ybWFsUGFyYW1ldGVycyhUb2tlbiB0b2tlbiwgTWVtYmVyS2luZCBraW5kKSB7fQoKICB2b2lkIGVuZEZvcm1hbFBhcmFtZXRlcnMoCiAgICAgIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgbG9nRXZlbnQoIkZvcm1hbFBhcmFtZXRlcnMiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGZpZWxkIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBNZXRhZGF0YQogIC8vLyAtIE1vZGlmaWVycwogIC8vLyAtIFR5cGUKICAvLy8gLSBWYXJpYWJsZSBkZWNsYXJhdGlvbnMgKGNvdW50IHRpbWVzKQogIC8vLwogIC8vLyBEb2Vzbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGJlZ2luIGV2ZW50LCB1c2UgW2JlZ2luTWVtYmVyXSBpbnN0ZWFkLgogIHZvaWQgZW5kRmllbGRzKFRva2VuIHN0YXRpY1Rva2VuLCBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsIGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJGaWVsZHMiKTsKICB9CgogIC8vLyBNYXJrcyB0aGF0IHRoZSBncmFtbWFyIHRlcm0gYGZvckluaXRpYWxpemVyU3RhdGVtZW50YCBoYXMgYmVlbiBwYXJzZWQgYW5kCiAgLy8vIGl0IHdhcyBhbiBlbXB0eSBzdGF0ZW1lbnQuCiAgdm9pZCBoYW5kbGVGb3JJbml0aWFsaXplckVtcHR5U3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRm9ySW5pdGlhbGl6ZXJFbXB0eVN0YXRlbWVudCIpOwogIH0KCiAgLy8vIE1hcmtzIHRoYXQgdGhlIGdyYW1tYXIgdGVybSBgZm9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnRgIGhhcyBiZWVuIHBhcnNlZCBhbmQKICAvLy8gaXQgd2FzIGFuIGV4cHJlc3Npb24gc3RhdGVtZW50LgogIHZvaWQgaGFuZGxlRm9ySW5pdGlhbGl6ZXJFeHByZXNzaW9uU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRm9ySW5pdGlhbGl6ZXJFeHByZXNzaW9uU3RhdGVtZW50Iik7CiAgfQoKICAvLy8gTWFya3MgdGhhdCB0aGUgZ3JhbW1hciB0ZXJtIGBmb3JJbml0aWFsaXplclN0YXRlbWVudGAgaGFzIGJlZW4gcGFyc2VkIGFuZAogIC8vLyBpdCB3YXMgYSBgbG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uYC4KICB2b2lkIGhhbmRsZUZvckluaXRpYWxpemVyTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRm9ySW5pdGlhbGl6ZXJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24iKTsKICB9CgogIC8vLyBNYXJrcyB0aGUgc3RhcnQgb2YgYSBmb3Igc3RhdGVtZW50IHdoaWNoIGlzIGVuZGVkIGJ5IGVpdGhlcgogIC8vLyBbZW5kRm9yU3RhdGVtZW50XSBvciBbZW5kRm9ySW5dLgogIHZvaWQgYmVnaW5Gb3JTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBNYXJrcyB0aGUgZW5kIG9mIHBhcnNpbmcgdGhlIGNvbnRyb2wgc3RydWN0dXJlIG9mIGEgZm9yIHN0YXRlbWVudAogIC8vLyBvciBmb3IgY29udHJvbCBmbG93IGVudHJ5IHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGNsb3NpbmcgcGFyZW50aGVzaXMuCiAgLy8vIGBmb3JgIGAoYCBpbml0aWFsaXphdGlvbiBgO2AgY29uZGl0aW9uIGA7YCB1cGRhdGVycyBgKWAKICB2b2lkIGhhbmRsZUZvckxvb3BQYXJ0cyhUb2tlbiBmb3JLZXl3b3JkLCBUb2tlbiBsZWZ0UGFyZW4sCiAgICAgIFRva2VuIGxlZnRTZXBhcmF0b3IsIGludCB1cGRhdGVFeHByZXNzaW9uQ291bnQpIHt9CgogIHZvaWQgZW5kRm9yU3RhdGVtZW50KFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiRm9yU3RhdGVtZW50Iik7CiAgfQoKICB2b2lkIGJlZ2luRm9yU3RhdGVtZW50Qm9keShUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRGb3JTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRm9yU3RhdGVtZW50Qm9keSIpOwogIH0KCiAgLy8vIE1hcmtzIHRoZSBlbmQgb2YgcGFyc2luZyB0aGUgY29udHJvbCBzdHJ1Y3R1cmUgb2YgYSBmb3ItaW4gc3RhdGVtZW50CiAgLy8vIG9yIGZvciBjb250cm9sIGZsb3cgZW50cnkgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcy4KICAvLy8gYGZvcmAgYChgICh0eXBlKT8gaWRlbnRpZmllciBgaW5gIGl0ZXJhdG9yIGApYAogIHZvaWQgaGFuZGxlRm9ySW5Mb29wUGFydHMoVG9rZW4gYXdhaXRUb2tlbiwgVG9rZW4gZm9yVG9rZW4sCiAgICAgIFRva2VuIGxlZnRQYXJlbnRoZXNpcywgVG9rZW4gaW5LZXl3b3JkKSB7fQoKICAvLyBPbmUgb2YgdGhlIHR3byBwb3NzaWJsZSBjb3JyZXNwb25kaW5nIGVuZCBldmVudHMgZm9yIFtiZWdpbkZvclN0YXRlbWVudF0uCiAgdm9pZCBlbmRGb3JJbihUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkZvckluIik7CiAgfQoKICB2b2lkIGJlZ2luRm9ySW5FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZEZvckluRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkZvckluRXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBiZWdpbkZvckluQm9keShUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRGb3JJbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJGb3JJbkJvZHkiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGJlZ2lubmluZyBvZiBhIG5hbWVkIGZ1bmN0aW9uIGV4cHJlc3Npb24gd2hpY2ggaXNuJ3QgbGVnYWwKICAvLy8gc3ludGF4IGluIERhcnQuICBVc2VmdWwgZm9yIHJlY292ZXJpbmcgZnJvbSBKYXZhc2NyaXB0IGNvZGUgYmVpbmcgcGFzdGVkCiAgLy8vIGludG8gYSBEYXJ0IHByb3JhbSwgYXMgaXQgd2lsbCBpbnRlcnByZXQgYGZ1bmN0aW9uIGZvbygpIHt9YCBhcyBhIG5hbWVkCiAgLy8vIGZ1bmN0aW9uIGV4cHJlc3Npb24gd2l0aCByZXR1cm4gdHlwZSBgZnVuY3Rpb25gIGFuZCBuYW1lIGBmb29gLgogIC8vLwogIC8vLyBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIFR5cGUgdmFyaWFibGVzCiAgdm9pZCBiZWdpbk5hbWVkRnVuY3Rpb25FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7fQoKICAvLy8gQSBuYW1lZCBmdW5jdGlvbiBleHByZXNzaW9uIHdoaWNoIGlzbid0IGxlZ2FsIHN5bnRheCBpbiBEYXJ0LgogIC8vLyBVc2VmdWwgZm9yIHJlY292ZXJpbmcgZnJvbSBKYXZhc2NyaXB0IGNvZGUgYmVpbmcgcGFzdGVkIGludG8gYSBEYXJ0CiAgLy8vIHByb3JhbSwgYXMgaXQgd2lsbCBpbnRlcnByZXQgYGZ1bmN0aW9uIGZvbygpIHt9YCBhcyBhIG5hbWVkIGZ1bmN0aW9uCiAgLy8vIGV4cHJlc3Npb24gd2l0aCByZXR1cm4gdHlwZSBgZnVuY3Rpb25gIGFuZCBuYW1lIGBmb29gLgogIC8vLwogIC8vLyBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIFR5cGUgdmFyaWFibGVzCiAgLy8vIC0gTW9kaWZpZXJzCiAgLy8vIC0gUmV0dXJuIHR5cGUKICAvLy8gLSBOYW1lCiAgLy8vIC0gRm9ybWFscwogIC8vLyAtIEluaXRpYWxpemVycwogIC8vLyAtIEFzeW5jIG1vZGlmaWVyCiAgLy8vIC0gRnVuY3Rpb24gYm9keSAoYmxvY2sgb3IgYXJyb3cgZXhwcmVzc2lvbikuCiAgdm9pZCBlbmROYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIk5hbWVkRnVuY3Rpb25FeHByZXNzaW9uIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBiZWdpbm5pbmcgb2YgYSBsb2NhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gTWV0YWRhdGEKICAvLy8gLSBUeXBlIHZhcmlhYmxlcwogIHZvaWQgYmVnaW5Mb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb24oVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBBIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIE1ldGFkYXRhCiAgLy8vIC0gVHlwZSB2YXJpYWJsZXMKICAvLy8gLSBSZXR1cm4gdHlwZQogIC8vLyAtIE5hbWUKICAvLy8gLSBUeXBlIHZhcmlhYmxlcwogIC8vLyAtIEZvcm1hbHMKICAvLy8gLSBJbml0aWFsaXplcnMKICAvLy8gLSBBc3luYyBtb2RpZmllcgogIC8vLyAtIEZ1bmN0aW9uIGJvZHkgKGJsb2NrIG9yIGFycm93IGV4cHJlc3Npb24pLgogIHZvaWQgZW5kTG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uKFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiRnVuY3Rpb25EZWNsYXJhdGlvbiIpOwogIH0KCiAgLy8vIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgd2hlbiB0aGUgcGFyc2VyIHNlZXMgdGhhdCBhIGZ1bmN0aW9uIGhhcyBhCiAgLy8vIGJsb2NrIGZ1bmN0aW9uIGJvZHkuICBUaGlzIG1ldGhvZCBpcyBub3QgaW52b2tlZCBmb3IgZW1wdHkgb3IgZXhwcmVzc2lvbgogIC8vLyBmdW5jdGlvbiBib2RpZXMsIHNlZSB0aGUgY29ycmVzcG9uZGluZyBtZXRob2RzIFtoYW5kbGVFbXB0eUZ1bmN0aW9uQm9keV0KICAvLy8gYW5kIFtoYW5kbGVFeHByZXNzaW9uRnVuY3Rpb25Cb2R5XS4KICB2b2lkIGJlZ2luQmxvY2tGdW5jdGlvbkJvZHkoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGJ5IHRoZSBwYXJzZXIgYWZ0ZXIgaXQgZmluaXNoZWQgcGFyc2luZyBhIGJsb2NrCiAgLy8vIGZ1bmN0aW9uIGJvZHkuICBUaGlzIG1ldGhvZCBpcyBub3QgaW52b2tlZCBmb3IgZW1wdHkgb3IgZXhwcmVzc2lvbgogIC8vLyBmdW5jdGlvbiBib2RpZXMsIHNlZSB0aGUgY29ycmVzcG9uZGluZyBtZXRob2RzIFtoYW5kbGVFbXB0eUZ1bmN0aW9uQm9keV0KICAvLy8gYW5kIFtoYW5kbGVFeHByZXNzaW9uRnVuY3Rpb25Cb2R5XS4gIFRoZSBbYmVnaW5Ub2tlbl0gaXMgdGhlICd7JyB0b2tlbiwKICAvLy8gYW5kIHRoZSBbZW5kVG9rZW5dIGlzIHRoZSAnfScgdG9rZW4gb2YgdGhlIGJsb2NrLiAgVGhlIG51bWJlciBvZgogIC8vLyBzdGF0ZW1lbnRzIGlzIGdpdmVuIGFzIHRoZSBbY291bnRdIHBhcmFtZXRlci4KICB2b2lkIGVuZEJsb2NrRnVuY3Rpb25Cb2R5KGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJCbG9ja0Z1bmN0aW9uQm9keSIpOwogIH0KCiAgdm9pZCBoYW5kbGVOb0Z1bmN0aW9uQm9keShUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIk5vRnVuY3Rpb25Cb2R5Iik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSBmdW5jdGlvbiBib2R5IHRoYXQgd2FzIHNraXBwZWQgYnkgdGhlIHBhcnNlci4KICAvLy8KICAvLy8gVGhlIGJvb2xlYW4gW2lzRXhwcmVzc2lvbkJvZHldIGluZGljYXRlcyB3aGV0aGVyIHRoZSBmdW5jdGlvbiBib2R5IHRoYXQKICAvLy8gd2FzIHNraXBwZWQgdXNlZCAiPT4iIHN5bnRheC4KICB2b2lkIGhhbmRsZUZ1bmN0aW9uQm9keVNraXBwZWQoVG9rZW4gdG9rZW4sIGJvb2wgaXNFeHByZXNzaW9uQm9keSkge30KCiAgdm9pZCBiZWdpbkZ1bmN0aW9uTmFtZShUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRGdW5jdGlvbk5hbWUoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJGdW5jdGlvbk5hbWUiKTsKICB9CgogIHZvaWQgYmVnaW5GdW5jdGlvblR5cGVBbGlhcyhUb2tlbiB0b2tlbikge30KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgdHlwZWRlZiBkZWNsYXJhdGlvbi4KICAvLy8KICAvLy8gSWYgW2VxdWFsc10gaXMgbnVsbCwgdGhlbiB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgc3Vic3RydWN0dXJlczoKICAvLy8gLSBNZXRhZGF0YQogIC8vLyAtIFJldHVybiB0eXBlCiAgLy8vIC0gTmFtZSAoaWRlbnRpZmllcikKICAvLy8gLSBBbGlhcyB0eXBlIHZhcmlhYmxlcwogIC8vLyAtIEZvcm1hbCBwYXJhbWV0ZXJzCiAgLy8vCiAgLy8vIElmIFtlcXVhbHNdIGlzIG5vdCBudWxsLCB0aGVuIHRoZSBoYXZlIHRoZSBmb2xsb3dpbmcgc3Vic3RydWN0dXJlczoKICAvLy8gLSBNZXRhZGF0YQogIC8vLyAtIE5hbWUgKGlkZW50aWZpZXIpCiAgLy8vIC0gQWxpYXMgdHlwZSB2YXJpYWJsZXMKICAvLy8gLSBUeXBlIChGdW5jdGlvblR5cGVBbm5vdGF0aW9uKQogIHZvaWQgZW5kRnVuY3Rpb25UeXBlQWxpYXMoCiAgICAgIFRva2VuIHR5cGVkZWZLZXl3b3JkLCBUb2tlbiBlcXVhbHMsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiRnVuY3Rpb25UeXBlQWxpYXMiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIHdpdGggY2xhdXNlIChlLmcuICJ3aXRoIEIsIEMiKS4KICAvLy8gU3Vic3RydWN0dXJlczoKICAvLy8gLSBtaXhpbiB0eXBlcyAoVHlwZUxpc3QpCiAgdm9pZCBoYW5kbGVDbGFzc1dpdGhDbGF1c2UoVG9rZW4gd2l0aEtleXdvcmQpIHsKICAgIGxvZ0V2ZW50KCJDbGFzc1dpdGhDbGF1c2UiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGFic2VuY2Ugb2YgYSB3aXRoIGNsYXVzZS4KICB2b2lkIGhhbmRsZUNsYXNzTm9XaXRoQ2xhdXNlKCkgewogICAgbG9nRXZlbnQoIkNsYXNzTm9XaXRoQ2xhdXNlIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBiZWdpbm5pbmcgb2YgYSBuYW1lZCBtaXhpbiBhcHBsaWNhdGlvbi4KICAvLy8gW2JlZ2luVG9rZW5dIG1heSBiZSB0aGUgc2FtZSBhcyBbbmFtZV0sIG9yIG1heSBwb2ludCB0byBtb2RpZmllcnMKICAvLy8gKG9yIGV4dHJhbmVvdXMgbW9kaWZpZXJzIGluIHRoZSBjYXNlIG9mIHJlY292ZXJ5KSBwcmVjZWRpbmcgW25hbWVdLgogIHZvaWQgYmVnaW5OYW1lZE1peGluQXBwbGljYXRpb24oCiAgICAgIFRva2VuIGJlZ2luLCBUb2tlbiBhYnN0cmFjdFRva2VuLCBUb2tlbiBuYW1lKSB7fQoKICAvLy8gSGFuZGxlIGEgbmFtZWQgbWl4aW4gYXBwbGljYXRpb24gd2l0aCBjbGF1c2UgKGUuZy4gIkEgd2l0aCBCLCBDIikuCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gc3VwZXJ0eXBlCiAgLy8vIC0gbWl4aW4gdHlwZXMgKFR5cGVMaXN0KQogIHZvaWQgaGFuZGxlTmFtZWRNaXhpbkFwcGxpY2F0aW9uV2l0aENsYXVzZShUb2tlbiB3aXRoS2V5d29yZCkgewogICAgbG9nRXZlbnQoIk5hbWVkTWl4aW5BcHBsaWNhdGlvbldpdGhDbGF1c2UiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIG5hbWVkIG1peGluIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIC8vLyAtIG1vZGlmaWVycwogIC8vLyAtIGNsYXNzIG5hbWUKICAvLy8gLSB0eXBlIHZhcmlhYmxlcwogIC8vLyAtIHN1cGVydHlwZQogIC8vLyAtIHdpdGggY2xhdXNlCiAgLy8vIC0gaW1wbGVtZW50ZWQgdHlwZXMgKFR5cGVMaXN0KQogIC8vLwogIC8vLyBUT0RPKHBhdWxiZXJyeSxhaGUpOiBpdCBzZWVtcyBpbmNvbnNpc3RlbnQgdGhhdCBmb3IgYSBuYW1lZCBtaXhpbgogIC8vLyBhcHBsaWNhdGlvbiwgdGhlIGltcGxlbWVudGVkIHR5cGVzIGFyZSBhIFR5cGVMaXN0LCB3aGVyZWFzIGZvciBhIGNsYXNzCiAgLy8vIGRlY2xhcmF0aW9uLCBlYWNoIGltcGxlbWVudGVkIHR5cGUgaXMgbGlzdGVkIHNlcGFyYXRlbHkgb24gdGhlIHN0YWNrLCBhbmQKICAvLy8gdGhlIG51bWJlciBvZiBpbXBsZW1lbnRlZCB0eXBlcyBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIuCiAgdm9pZCBlbmROYW1lZE1peGluQXBwbGljYXRpb24oVG9rZW4gYmVnaW4sIFRva2VuIGNsYXNzS2V5d29yZCwgVG9rZW4gZXF1YWxzLAogICAgICBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJOYW1lZE1peGluQXBwbGljYXRpb24iKTsKICB9CgogIHZvaWQgYmVnaW5IaWRlKFRva2VuIGhpZGVLZXl3b3JkKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSAiaGlkZSIgY29tYmluYXRvci4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gaGlkZGVuIG5hbWVzIChJZGVudGlmaWVyTGlzdCkKICB2b2lkIGVuZEhpZGUoVG9rZW4gaGlkZUtleXdvcmQpIHsKICAgIGxvZ0V2ZW50KCJIaWRlIik7CiAgfQoKICB2b2lkIGhhbmRsZUlkZW50aWZpZXJMaXN0KGludCBjb3VudCkgewogICAgbG9nRXZlbnQoIklkZW50aWZpZXJMaXN0Iik7CiAgfQoKICB2b2lkIGJlZ2luVHlwZUxpc3QoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kVHlwZUxpc3QoaW50IGNvdW50KSB7CiAgICBsb2dFdmVudCgiVHlwZUxpc3QiKTsKICB9CgogIHZvaWQgYmVnaW5JZlN0YXRlbWVudChUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRJZlN0YXRlbWVudChUb2tlbiBpZlRva2VuLCBUb2tlbiBlbHNlVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJJZlN0YXRlbWVudCIpOwogIH0KCiAgdm9pZCBiZWdpblRoZW5TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kVGhlblN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIlRoZW5TdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgYmVnaW5FbHNlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZEVsc2VTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJFbHNlU3RhdGVtZW50Iik7CiAgfQoKICB2b2lkIGJlZ2luSW1wb3J0KFRva2VuIGltcG9ydEtleXdvcmQpIHt9CgogIC8vLyBTaWduYWxzIHRoYXQgdGhlIGN1cnJlbnQgaW1wb3J0IGlzIGRlZmVycmVkIGFuZC9vciBoYXMgYSBwcmVmaXgKICAvLy8gZGVwZW5kaW5nIHVwb24gd2hldGhlciBbZGVmZXJyZWRLZXl3b3JkXSBhbmQgW2FzS2V5d29yZF0KICAvLy8gYXJlIG5vdCBgbnVsbGAgcmVzcGVjdGl2ZWx5LiBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIHByZWZpeCBpZGVudGlmaWVyIChvbmx5IGlmIGFzS2V5d29yZCAhPSBudWxsKQogIHZvaWQgaGFuZGxlSW1wb3J0UHJlZml4KFRva2VuIGRlZmVycmVkS2V5d29yZCwgVG9rZW4gYXNLZXl3b3JkKSB7CiAgICBsb2dFdmVudCgiSW1wb3J0UHJlZml4Iik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYW4gaW1wb3J0IGRpcmVjdGl2ZS4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gbWV0YWRhdGEKICAvLy8gLSB1cmkKICAvLy8gLSBjb25kaXRpb25hbCB1cmlzCiAgLy8vIC0gcHJlZml4IGlkZW50aWZpZXIKICAvLy8gLSBjb21iaW5hdG9ycwogIHZvaWQgZW5kSW1wb3J0KFRva2VuIGltcG9ydEtleXdvcmQsIFRva2VuIHNlbWljb2xvbikgewogICAgbG9nRXZlbnQoIkltcG9ydCIpOwogIH0KCiAgLy8vIEhhbmRsZSByZWNvdmVyeSBhc3NvY2lhdGVkIHdpdGggYW4gaW1wb3J0IGRpcmVjdGl2ZS4KICAvLy8gVGhpcyBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGFmdGVyIFtlbmRJbXBvcnRdCiAgLy8vIHRvIHJlY292ZXIgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByZXZpb3VzIGltcG9ydCBkaXJlY3RpdmUuCiAgLy8vIFRoZSBzdWJzdHJ1Y3R1cmVzIGFyZSBhIHN1YnNldCBvZiBhbmQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgW2VuZEltcG9ydF06CiAgLy8vIC0gY29uZGl0aW9uYWwgdXJpcwogIC8vLyAtIHByZWZpeCBpZGVudGlmaWVyCiAgLy8vIC0gY29tYmluYXRvcnMKICB2b2lkIGhhbmRsZVJlY292ZXJJbXBvcnQoVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBsb2dFdmVudCgiSW1wb3J0UmVjb3ZlcnkiKTsKICB9CgogIHZvaWQgYmVnaW5Db25kaXRpb25hbFVyaXMoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kQ29uZGl0aW9uYWxVcmlzKGludCBjb3VudCkgewogICAgbG9nRXZlbnQoIkNvbmRpdGlvbmFsVXJpcyIpOwogIH0KCiAgdm9pZCBiZWdpbkNvbmRpdGlvbmFsVXJpKFRva2VuIGlmS2V5d29yZCkge30KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgY29uZGl0aW9uYWwgVVJJIGNvbnN0cnVjdC4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gRG90dGVkIG5hbWUKICAvLy8gLSBDb25kaXRpb24gKGxpdGVyYWwgc3RyaW5nOyBvbmx5IGlmIFtlcXVhbFNpZ25dICE9IG51bGwpCiAgLy8vIC0gVVJJIChsaXRlcmFsIHN0cmluZykKICB2b2lkIGVuZENvbmRpdGlvbmFsVXJpKFRva2VuIGlmS2V5d29yZCwgVG9rZW4gbGVmdFBhcmVuLCBUb2tlbiBlcXVhbFNpZ24pIHsKICAgIGxvZ0V2ZW50KCJDb25kaXRpb25hbFVyaSIpOwogIH0KCiAgdm9pZCBoYW5kbGVEb3R0ZWROYW1lKGludCBjb3VudCwgVG9rZW4gZmlyc3RJZGVudGlmaWVyKSB7CiAgICBsb2dFdmVudCgiRG90dGVkTmFtZSIpOwogIH0KCiAgdm9pZCBiZWdpbkltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZEltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiSW1wbGljaXRDcmVhdGlvbkV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgYmVnaW5Jbml0aWFsaXplZElkZW50aWZpZXIoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kSW5pdGlhbGl6ZWRJZGVudGlmaWVyKFRva2VuIG5hbWVUb2tlbikgewogICAgbG9nRXZlbnQoIkluaXRpYWxpemVkSWRlbnRpZmllciIpOwogIH0KCiAgdm9pZCBiZWdpbkZpZWxkSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGZpZWxkIGluaXRpYWxpemVyLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBJbml0aWFsaXplciBleHByZXNzaW9uCiAgdm9pZCBlbmRGaWVsZEluaXRpYWxpemVyKFRva2VuIGFzc2lnbm1lbnQsIFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRmllbGRJbml0aWFsaXplciIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgbGFjayBvZiBhIGZpZWxkIGluaXRpYWxpemVyLgogIHZvaWQgaGFuZGxlTm9GaWVsZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTm9GaWVsZEluaXRpYWxpemVyIik7CiAgfQoKICB2b2lkIGJlZ2luVmFyaWFibGVJbml0aWFsaXplcihUb2tlbiB0b2tlbikge30KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgdmFyaWFibGUgaW5pdGlhbGl6ZXIuIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gSW5pdGlhbGl6ZXIgZXhwcmVzc2lvbi4KICB2b2lkIGVuZFZhcmlhYmxlSW5pdGlhbGl6ZXIoVG9rZW4gYXNzaWdubWVudE9wZXJhdG9yKSB7CiAgICBsb2dFdmVudCgiVmFyaWFibGVJbml0aWFsaXplciIpOwogIH0KCiAgLy8vIFVzZWQgd2hlbiBhIHZhcmlhYmxlIGhhcyBubyBpbml0aWFsaXplci4KICB2b2lkIGhhbmRsZU5vVmFyaWFibGVJbml0aWFsaXplcihUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIk5vVmFyaWFibGVJbml0aWFsaXplciIpOwogIH0KCiAgdm9pZCBiZWdpbkluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZEluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiQ29uc3RydWN0b3JJbml0aWFsaXplciIpOwogIH0KCiAgdm9pZCBiZWdpbkluaXRpYWxpemVycyhUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRJbml0aWFsaXplcnMoaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkluaXRpYWxpemVycyIpOwogIH0KCiAgdm9pZCBoYW5kbGVOb0luaXRpYWxpemVycygpIHsKICAgIGxvZ0V2ZW50KCJOb0luaXRpYWxpemVycyIpOwogIH0KCiAgLy8vIENhbGxlZCBhZnRlciB0aGUgbGlzdGVuZXIgaGFzIHJlY292ZXJlZCBmcm9tIGFuIGludmFsaWQgZXhwcmVzc2lvbi4gVGhlCiAgLy8vIHBhcnNlciB3aWxsIHJlc3VtZSBwYXJzaW5nIGZyb20gW3Rva2VuXS4gRXhhY3RseSB3aGVyZSB0aGUgcGFyc2VyIHdpbGwKICAvLy8gcmVzdW1lIHBhcnNpbmcgaXMgdW5zcGVjaWZpZWQuCiAgdm9pZCBoYW5kbGVJbnZhbGlkRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkludmFsaWRFeHByZXNzaW9uIik7CiAgfQoKICAvLy8gQ2FsbGVkIGFmdGVyIHRoZSBsaXN0ZW5lciBoYXMgcmVjb3ZlcmVkIGZyb20gYW4gaW52YWxpZCBmdW5jdGlvbgogIC8vLyBib2R5LiBUaGUgcGFyc2VyIGV4cGVjdGVkIGFuIG9wZW4gY3VybHkgYnJhY2UgYHtgIGFuZCB3aWxsIHJlc3VtZSBwYXJzaW5nCiAgLy8vIGZyb20gW3Rva2VuXSBhcyBpZiBhIGZ1bmN0aW9uIGJvZHkgaGFkIHByZWNlZWRlZCBpdC4KICB2b2lkIGhhbmRsZUludmFsaWRGdW5jdGlvbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJJbnZhbGlkRnVuY3Rpb25Cb2R5Iik7CiAgfQoKICAvLy8gQ2FsbGVkIGFmdGVyIHRoZSBsaXN0ZW5lciBoYXMgcmVjb3ZlcmVkIGZyb20gYW4gaW52YWxpZCB0eXBlLiBUaGUgcGFyc2VyCiAgLy8vIGV4cGVjdGVkIGFuIGlkZW50aWZpZXIsIGFuZCB3aWxsIHJlc3VtZSBwYXJzaW5nIHR5cGUgYXJndW1lbnRzIGZyb20KICAvLy8gW3Rva2VuXS4KICB2b2lkIGhhbmRsZUludmFsaWRUeXBlUmVmZXJlbmNlKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiSW52YWxpZFR5cGVSZWZlcmVuY2UiKTsKICB9CgogIHZvaWQgaGFuZGxlTGFiZWwoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJMYWJlbCIpOwogIH0KCiAgdm9pZCBiZWdpbkxhYmVsZWRTdGF0ZW1lbnQoVG9rZW4gdG9rZW4sIGludCBsYWJlbENvdW50KSB7fQoKICB2b2lkIGVuZExhYmVsZWRTdGF0ZW1lbnQoaW50IGxhYmVsQ291bnQpIHsKICAgIGxvZ0V2ZW50KCJMYWJlbGVkU3RhdGVtZW50Iik7CiAgfQoKICB2b2lkIGJlZ2luTGlicmFyeU5hbWUoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGxpYnJhcnkgZGlyZWN0aXZlLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBNZXRhZGF0YQogIC8vLyAtIExpYnJhcnkgbmFtZSAoYSBxdWFsaWZpZWQgaWRlbnRpZmllcikKICB2b2lkIGVuZExpYnJhcnlOYW1lKFRva2VuIGxpYnJhcnlLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxvZ0V2ZW50KCJMaWJyYXJ5TmFtZSIpOwogIH0KCiAgdm9pZCBoYW5kbGVMaXRlcmFsTWFwRW50cnkoVG9rZW4gY29sb24sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiTGl0ZXJhbE1hcEVudHJ5Iik7CiAgfQoKICB2b2lkIGJlZ2luTGl0ZXJhbFN0cmluZyhUb2tlbiB0b2tlbikge30KCiAgdm9pZCBoYW5kbGVJbnRlcnBvbGF0aW9uRXhwcmVzc2lvbihUb2tlbiBsZWZ0QnJhY2tldCwgVG9rZW4gcmlnaHRCcmFja2V0KSB7fQoKICB2b2lkIGVuZExpdGVyYWxTdHJpbmcoaW50IGludGVycG9sYXRpb25Db3VudCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJMaXRlcmFsU3RyaW5nIik7CiAgfQoKICB2b2lkIGhhbmRsZVN0cmluZ0p1eHRhcG9zaXRpb24oaW50IGxpdGVyYWxDb3VudCkgewogICAgbG9nRXZlbnQoIlN0cmluZ0p1eHRhcG9zaXRpb24iKTsKICB9CgogIHZvaWQgYmVnaW5NZW1iZXIoKSB7fQoKICAvLy8gSGFuZGxlIGFuIGludmFsaWQgbWVtYmVyIGRlY2xhcmF0aW9uLiBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgdm9pZCBoYW5kbGVJbnZhbGlkTWVtYmVyKFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiSW52YWxpZE1lbWJlciIpOwogIH0KCiAgLy8vIFRoaXMgZXZlbnQgaXMgYWRkZWQgZm9yIGNvbnZlbmllbmNlLiBOb3JtYWxseSwgb25lIHNob3VsZCBvdmVycmlkZQogIC8vLyBbZW5kTWV0aG9kXSBvciBbZW5kRmllbGRzXSBpbnN0ZWFkLgogIHZvaWQgZW5kTWVtYmVyKCkgewogICAgbG9nRXZlbnQoIk1lbWJlciIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgYmVnaW5uaW5nIG9mIGEgbWV0aG9kIGRlY2xhcmF0aW9uLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIHZvaWQgYmVnaW5NZXRob2QoVG9rZW4gZXh0ZXJuYWxUb2tlbiwgVG9rZW4gc3RhdGljVG9rZW4sIFRva2VuIGNvdmFyaWFudFRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsIFRva2VuIGdldE9yU2V0LCBUb2tlbiBuYW1lKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSBtZXRob2QgZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgLy8vIC0gcmV0dXJuIHR5cGUKICAvLy8gLSBtZXRob2QgbmFtZSAoaWRlbnRpZmllciwgcG9zc2libHkgcXVhbGlmaWVkKQogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgLy8vIC0gZm9ybWFsIHBhcmFtZXRlcnMKICAvLy8gLSBpbml0aWFsaXplcnMKICAvLy8gLSBhc3luYyBtYXJrZXIKICAvLy8gLSBib2R5CiAgdm9pZCBlbmRNZXRob2QoVG9rZW4gZ2V0T3JTZXQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGJlZ2luUGFyYW0sCiAgICAgIFRva2VuIGJlZ2luSW5pdGlhbGl6ZXJzLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIk1ldGhvZCIpOwogIH0KCiAgdm9pZCBiZWdpbk1ldGFkYXRhU3RhcihUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRNZXRhZGF0YVN0YXIoaW50IGNvdW50KSB7CiAgICBsb2dFdmVudCgiTWV0YWRhdGFTdGFyIik7CiAgfQoKICB2b2lkIGJlZ2luTWV0YWRhdGEoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIG1ldGFkYXRhIGFubm90YXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIElkZW50aWZpZXIKICAvLy8gLSBUeXBlIGFyZ3VtZW50cwogIC8vLyAtIENvbnN0cnVjdG9yIG5hbWUgKG9ubHkgaWYgW3BlcmlvZEJlZm9yZU5hbWVdIGlzIG5vdCBgbnVsbGApCiAgLy8vIC0gQXJndW1lbnRzCiAgdm9pZCBlbmRNZXRhZGF0YShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBwZXJpb2RCZWZvcmVOYW1lLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIk1ldGFkYXRhIik7CiAgfQoKICB2b2lkIGJlZ2luT3B0aW9uYWxGb3JtYWxQYXJhbWV0ZXJzKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZE9wdGlvbmFsRm9ybWFsUGFyYW1ldGVycygKICAgICAgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVycyIpOwogIH0KCiAgdm9pZCBiZWdpblBhcnQoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIHBhcnQgZGlyZWN0aXZlLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIC8vLyAtIHVyaQogIHZvaWQgZW5kUGFydChUb2tlbiBwYXJ0S2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBsb2dFdmVudCgiUGFydCIpOwogIH0KCiAgdm9pZCBiZWdpblBhcnRPZihUb2tlbiB0b2tlbikge30KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgInBhcnQgb2YiIGRpcmVjdGl2ZS4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gTWV0YWRhdGEKICAvLy8gLSBMaWJyYXJ5IG5hbWUgKGEgcXVhbGlmaWVkIGlkZW50aWZpZXIpCiAgLy8vCiAgLy8vIElmIFtoYXNOYW1lXSBpcyB0cnVlLCB0aGlzIHBhcnQgcmVmZXJzIHRvIGl0cyBsaWJyYXJ5IGJ5IG5hbWUsIG90aGVyd2lzZSwKICAvLy8gYnkgVVJJLgogIHZvaWQgZW5kUGFydE9mKAogICAgICBUb2tlbiBwYXJ0S2V5d29yZCwgVG9rZW4gb2ZLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24sIGJvb2wgaGFzTmFtZSkgewogICAgbG9nRXZlbnQoIlBhcnRPZiIpOwogIH0KCiAgdm9pZCBiZWdpblJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kUmVkaXJlY3RpbmdGYWN0b3J5Qm9keShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIlJlZGlyZWN0aW5nRmFjdG9yeUJvZHkiKTsKICB9CgogIHZvaWQgYmVnaW5SZXR1cm5TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGBuYXRpdmVgIGZ1bmN0aW9uLgogIC8vLyBUaGUgW2hhbmRsZU5hdGl2ZUNsYXVzZV0gZXZlbnQgaXMgc2VudCBwcmlvciB0byB0aGlzIGV2ZW50LgogIHZvaWQgaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5KFRva2VuIG5hdGl2ZVRva2VuLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxvZ0V2ZW50KCJOYXRpdmVGdW5jdGlvbkJvZHkiKTsKICB9CgogIC8vLyBDYWxsZWQgYWZ0ZXIgdGhlIFtoYW5kbGVOYXRpdmVDbGF1c2VdIGV2ZW50IHdoZW4gdGhlIHBhcnNlciBkZXRlcm1pbmVzCiAgLy8vIHRoYXQgdGhlIG5hdGl2ZSBjbGF1c2Ugc2hvdWxkIGJlIGRpc2NhcmRlZCAvIGlnbm9yZWQuCiAgLy8vIEZvciBleGFtcGxlLCB0aGlzIG1ldGhvZCBpcyBjYWxsZWQgYSBuYXRpdmUgY2xhdXNlIGlzIGZvbGxvd2VkIGJ5CiAgLy8vIGEgZnVuY3Rpb24gYm9keS4KICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWQoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgbG9nRXZlbnQoIk5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWQiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGBuYXRpdmVgIGZ1bmN0aW9uIHRoYXQgd2FzIHNraXBwZWQgYnkgdGhlIHBhcnNlci4KICAvLy8gVGhlIFtoYW5kbGVOYXRpdmVDbGF1c2VdIGV2ZW50IGlzIHNlbnQgcHJpb3IgdG8gdGhpcyBldmVudC4KICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWQoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgbG9nRXZlbnQoIk5hdGl2ZUZ1bmN0aW9uQm9keVNraXBwZWQiKTsKICB9CgogIC8vLyBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIHdoZW4gYSBmdW5jdGlvbiBoYXMgdGhlIGVtcHR5IGJvZHkuCiAgdm9pZCBoYW5kbGVFbXB0eUZ1bmN0aW9uQm9keShUb2tlbiBzZW1pY29sb24pIHsKICAgIGxvZ0V2ZW50KCJFbXB0eUZ1bmN0aW9uQm9keSIpOwogIH0KCiAgLy8vIFRoaXMgbWV0aG9kIGlzIGludm9rZWQgd2hlbiBwYXJzZXIgZmluaXNoZXMgcGFyc2luZyB0aGUgY29ycmVzcG9uZGluZwogIC8vLyBleHByZXNzaW9uIG9mIHRoZSBleHByZXNzaW9uIGZ1bmN0aW9uIGJvZHkuCiAgdm9pZCBoYW5kbGVFeHByZXNzaW9uRnVuY3Rpb25Cb2R5KFRva2VuIGFycm93VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiRXhwcmVzc2lvbkZ1bmN0aW9uQm9keSIpOwogIH0KCiAgdm9pZCBlbmRSZXR1cm5TdGF0ZW1lbnQoCiAgICAgIGJvb2wgaGFzRXhwcmVzc2lvbiwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJSZXR1cm5TdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgaGFuZGxlU2VuZChUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIlNlbmQiKTsKICB9CgogIHZvaWQgYmVnaW5TaG93KFRva2VuIHNob3dLZXl3b3JkKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSAic2hvdyIgY29tYmluYXRvci4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gc2hvd24gbmFtZXMgKElkZW50aWZpZXJMaXN0KQogIHZvaWQgZW5kU2hvdyhUb2tlbiBzaG93S2V5d29yZCkgewogICAgbG9nRXZlbnQoIlNob3ciKTsKICB9CgogIHZvaWQgYmVnaW5Td2l0Y2hTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kU3dpdGNoU3RhdGVtZW50KFRva2VuIHN3aXRjaEtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiU3dpdGNoU3RhdGVtZW50Iik7CiAgfQoKICB2b2lkIGJlZ2luU3dpdGNoQmxvY2soVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kU3dpdGNoQmxvY2soaW50IGNhc2VDb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJTd2l0Y2hCbG9jayIpOwogIH0KCiAgdm9pZCBiZWdpbkxpdGVyYWxTeW1ib2woVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kTGl0ZXJhbFN5bWJvbChUb2tlbiBoYXNoVG9rZW4sIGludCBpZGVudGlmaWVyQ291bnQpIHsKICAgIGxvZ0V2ZW50KCJMaXRlcmFsU3ltYm9sIik7CiAgfQoKICB2b2lkIGhhbmRsZVRocm93RXhwcmVzc2lvbihUb2tlbiB0aHJvd1Rva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIlRocm93RXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBiZWdpblJldGhyb3dTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kUmV0aHJvd1N0YXRlbWVudChUb2tlbiByZXRocm93VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiUmV0aHJvd1N0YXRlbWVudCIpOwogIH0KCiAgLy8vIFRoaXMgZXZlbnQgaXMgYWRkZWQgZm9yIGNvbnZlbmllbmNlLiBOb3JtYWxseSwgb25lIHNob3VsZCB1c2UKICAvLy8gW2VuZENsYXNzRGVjbGFyYXRpb25dLCBbZW5kTmFtZWRNaXhpbkFwcGxpY2F0aW9uXSwgW2VuZEVudW1dLAogIC8vLyBbZW5kRnVuY3Rpb25UeXBlQWxpYXNdLCBbZW5kTGlicmFyeU5hbWVdLCBbZW5kSW1wb3J0XSwgW2VuZEV4cG9ydF0sCiAgLy8vIFtlbmRQYXJ0XSwgW2VuZFBhcnRPZl0sIFtlbmRUb3BMZXZlbEZpZWxkc10sIG9yIFtlbmRUb3BMZXZlbE1ldGhvZF0uCiAgdm9pZCBlbmRUb3BMZXZlbERlY2xhcmF0aW9uKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiVG9wTGV2ZWxEZWNsYXJhdGlvbiIpOwogIH0KCiAgLy8vIENhbGxlZCBieSB0aGUgW1BhcnNlcl0gd2hlbiBpdCByZWNvdmVycyBmcm9tIGFuIGludmFsaWQgdG9wIGxldmVsCiAgLy8vIGRlY2xhcmF0aW9uLCB3aGVyZSBbZW5kVG9rZW5dIGlzIHRoZSBsYXN0IHRva2VuIGluIHRoZSBkZWNsYXJhdGlvbgogIC8vLyBUaGlzIGlzIGNhbGxlZCBhZnRlciB0aGUgYmVnaW4vZW5kIG1ldGFkYXRhIHN0YXIgZXZlbnRzLAogIC8vLyBhbmQgaXMgZm9sbG93ZWQgYnkgW2VuZFRvcExldmVsRGVjbGFyYXRpb25dLgogIC8vLwogIC8vLyBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIG1ldGFkYXRhCiAgdm9pZCBoYW5kbGVJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbihUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIkludmFsaWRUb3BMZXZlbERlY2xhcmF0aW9uIik7CiAgfQoKICAvLy8gTWFya3MgdGhlIGJlZ2lubmluZyBvZiBhIHRvcCBsZXZlbCBmaWVsZCBvciBtZXRob2QgZGVjbGFyYXRpb24uCiAgLy8vIERvZXNuJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgZW5kIGV2ZW50LgogIC8vLyBTZWUgW2VuZFRvcExldmVsRmllbGRzXSBhbmQgW2VuZFRvcExldmVsTWV0aG9kXS4KICB2b2lkIGJlZ2luVG9wTGV2ZWxNZW1iZXIoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIHRvcCBsZXZlbCB2YXJpYWJsZSBkZWNsYXJhdGlvbi4gIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gTWV0YWRhdGEKICAvLy8gLSBUeXBlCiAgLy8vIC0gUmVwZWF0ZWQgW2NvdW50XSB0aW1lczoKICAvLy8gICAtIFZhcmlhYmxlIG5hbWUgKGlkZW50aWZpZXIpCiAgLy8vICAgLSBGaWVsZCBpbml0aWFsaXplcgogIC8vLyBEb2Vzbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGJlZ2luIGV2ZW50LgogIC8vLyBVc2UgW2JlZ2luVG9wTGV2ZWxNZW1iZXJdIGluc3RlYWQuCiAgdm9pZCBlbmRUb3BMZXZlbEZpZWxkcygKICAgICAgVG9rZW4gc3RhdGljVG9rZW4sCiAgICAgIFRva2VuIGNvdmFyaWFudFRva2VuLAogICAgICBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwKICAgICAgaW50IGNvdW50LAogICAgICBUb2tlbiBiZWdpblRva2VuLAogICAgICBUb2tlbiBlbmRUb2tlbikgewogICAgbG9nRXZlbnQoIlRvcExldmVsRmllbGRzIik7CiAgfQoKICB2b2lkIGJlZ2luVG9wTGV2ZWxNZXRob2QoVG9rZW4gbGFzdENvbnN1bWVkLCBUb2tlbiBleHRlcm5hbFRva2VuKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSB0b3AgbGV2ZWwgbWV0aG9kLiAgU3Vic3RydWN0dXJlczoKICAvLy8gLSBtZXRhZGF0YQogIC8vLyAtIG1vZGlmaWVycwogIC8vLyAtIHJldHVybiB0eXBlCiAgLy8vIC0gaWRlbnRpZmllcgogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgLy8vIC0gZm9ybWFsIHBhcmFtZXRlcnMKICAvLy8gLSBhc3luYyBtYXJrZXIKICAvLy8gLSBib2R5CiAgdm9pZCBlbmRUb3BMZXZlbE1ldGhvZChUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBnZXRPclNldCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJUb3BMZXZlbE1ldGhvZCIpOwogIH0KCiAgdm9pZCBiZWdpblRyeVN0YXRlbWVudChUb2tlbiB0b2tlbikge30KCiAgdm9pZCBoYW5kbGVDYXNlTWF0Y2goVG9rZW4gY2FzZUtleXdvcmQsIFRva2VuIGNvbG9uKSB7CiAgICBsb2dFdmVudCgiQ2FzZU1hdGNoIik7CiAgfQoKICB2b2lkIGJlZ2luQ2F0Y2hDbGF1c2UoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kQ2F0Y2hDbGF1c2UoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJDYXRjaENsYXVzZSIpOwogIH0KCiAgdm9pZCBoYW5kbGVDYXRjaEJsb2NrKFRva2VuIG9uS2V5d29yZCwgVG9rZW4gY2F0Y2hLZXl3b3JkLCBUb2tlbiBjb21tYSkgewogICAgbG9nRXZlbnQoIkNhdGNoQmxvY2siKTsKICB9CgogIHZvaWQgaGFuZGxlRmluYWxseUJsb2NrKFRva2VuIGZpbmFsbHlLZXl3b3JkKSB7CiAgICBsb2dFdmVudCgiRmluYWxseUJsb2NrIik7CiAgfQoKICB2b2lkIGVuZFRyeVN0YXRlbWVudChpbnQgY2F0Y2hDb3VudCwgVG9rZW4gdHJ5S2V5d29yZCwgVG9rZW4gZmluYWxseUtleXdvcmQpIHsKICAgIGxvZ0V2ZW50KCJUcnlTdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgaGFuZGxlVHlwZShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBxdWVzdGlvbk1hcmspIHsKICAgIGxvZ0V2ZW50KCJUeXBlIik7CiAgfQoKICAvLy8gQ2FsbGVkIHdoZW4gcGFyc2VyIGVuY291bnRlcnMgYSAnIScKICAvLy8gdXNlZCBhcyBhIG5vbi1udWxsIHBvc3RmaXggYXNzZXJ0aW9uIGluIGFuIGV4cHJlc3Npb24uCiAgdm9pZCBoYW5kbGVOb25OdWxsQXNzZXJ0RXhwcmVzc2lvbihUb2tlbiBiYW5nKSB7CiAgICBsb2dFdmVudCgiTm9uTnVsbEFzc2VydEV4cHJlc3Npb24iKTsKICB9CgogIC8vIFRPRE8oZGFucnViZWwpOiBSZW1vdmUgdGhpcyBvbmNlIGFsbCBsaXN0ZW5lcnMgaGF2ZSBiZWVuIHVwZGF0ZWQKICAvLyB0byBwcm9wZXJseSBoYW5kbGUgbnVsbGFibGUgdHlwZXMKICB2b2lkIHJlcG9ydEVycm9ySWZOdWxsYWJsZVR5cGUoVG9rZW4gcXVlc3Rpb25NYXJrKSB7CiAgICBpZiAocXVlc3Rpb25NYXJrICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KG9wdGlvbmFsKCc/JywgcXVlc3Rpb25NYXJrKSk7CiAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICB0ZW1wbGF0ZUV4cGVyaW1lbnROb3RFbmFibGVkLndpdGhBcmd1bWVudHMoJ25vbi1udWxsYWJsZScpLAogICAgICAgICAgcXVlc3Rpb25NYXJrLAogICAgICAgICAgcXVlc3Rpb25NYXJrKTsKICAgIH0KICB9CgogIC8vIFRPRE8oZGFucnViZWwpOiBSZW1vdmUgdGhpcyBvbmNlIGFsbCBsaXN0ZW5lcnMgaGF2ZSBiZWVuIHVwZGF0ZWQKICAvLyB0byBwcm9wZXJseSBoYW5kbGUgbnVsbGFibGUgdHlwZXMKICB2b2lkIHJlcG9ydE5vbk51bGxhYmxlTW9kaWZpZXJFcnJvcihUb2tlbiBtb2RpZmllclRva2VuKSB7CiAgICBpZiAobW9kaWZpZXJUb2tlbiAhPSBudWxsKSB7CiAgICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICB0ZW1wbGF0ZUV4cGVyaW1lbnROb3RFbmFibGVkLndpdGhBcmd1bWVudHMoJ25vbi1udWxsYWJsZScpLAogICAgICAgICAgbW9kaWZpZXJUb2tlbiwKICAgICAgICAgIG1vZGlmaWVyVG9rZW4pOwogICAgfQogIH0KCiAgLy8gVE9ETyhkYW5ydWJlbCk6IFJlbW92ZSB0aGlzIG9uY2UgYWxsIGxpc3RlbmVycyBoYXZlIGJlZW4gdXBkYXRlZAogIC8vIHRvIHByb3Blcmx5IGhhbmRsZSBub24tbnVsbCBhc3NlcnQgZXhwcmVzc2lvbnMKICB2b2lkIHJlcG9ydE5vbk51bGxBc3NlcnRFeHByZXNzaW9uTm90RW5hYmxlZChUb2tlbiBiYW5nKSB7CiAgICBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgIHRlbXBsYXRlRXhwZXJpbWVudE5vdEVuYWJsZWQud2l0aEFyZ3VtZW50cygnbm9uLW51bGxhYmxlJyksIGJhbmcsIGJhbmcpOwogIH0KCiAgdm9pZCBoYW5kbGVOb05hbWUoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJOb05hbWUiKTsKICB9CgogIHZvaWQgYmVnaW5GdW5jdGlvblR5cGUoVG9rZW4gYmVnaW5Ub2tlbikge30KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlIGRlY2xhcmF0aW9uLgogIC8vLwogIC8vLyBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIFR5cGUgdmFyaWFibGVzCiAgLy8vIC0gUmV0dXJuIHR5cGUKICAvLy8gLSBGb3JtYWwgcGFyYW1ldGVycwogIHZvaWQgZW5kRnVuY3Rpb25UeXBlKFRva2VuIGZ1bmN0aW9uVG9rZW4sIFRva2VuIHF1ZXN0aW9uTWFyaykgewogICAgbG9nRXZlbnQoIkZ1bmN0aW9uVHlwZSIpOwogIH0KCiAgdm9pZCBiZWdpblR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHt9CgogIHZvaWQgZW5kVHlwZUFyZ3VtZW50cyhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiVHlwZUFyZ3VtZW50cyIpOwogIH0KCiAgLy8vIEFmdGVyIGVuZFR5cGVBcmd1bWVudHMgaGFzIGJlZW4gY2FsbGVkLAogIC8vLyB0aGlzIGV2ZW50IGlzIGNhbGxlZCBpZiB0aG9zZSB0eXBlIGFyZ3VtZW50cyBhcmUgaW52YWxpZC4KICB2b2lkIGhhbmRsZUludmFsaWRUeXBlQXJndW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTm9UeXBlQXJndW1lbnRzIik7CiAgfQoKICB2b2lkIGhhbmRsZU5vVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIk5vVHlwZUFyZ3VtZW50cyIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgYmVnaW4gb2YgYSB0eXBlIGZvcm1hbCBwYXJhbWV0ZXIgKGUuZy4gIlggZXh0ZW5kcyBZIikuCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gTWV0YWRhdGEKICAvLy8gLSBOYW1lIChpZGVudGlmaWVyKQogIHZvaWQgYmVnaW5UeXBlVmFyaWFibGUoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBDYWxsZWQgd2hlbiBbYmVnaW5UeXBlVmFyaWFibGVdIGhhcyBiZWVuIGNhbGxlZCBmb3IgYWxsIG9mIHRoZSB2YXJpYWJsZXMKICAvLy8gaW4gYSBncm91cCwgYW5kIGJlZm9yZSBbZW5kVHlwZVZhcmlhYmxlXSBoYXMgYmVlbiBjYWxsZWQgZm9yIGFueSBvZiB0aGUKICAvLy8gdmFyaWFibGVzIGluIHRoYXQgc2FtZSBncm91cC4KICB2b2lkIGhhbmRsZVR5cGVWYXJpYWJsZXNEZWZpbmVkKFRva2VuIHRva2VuLCBpbnQgY291bnQpIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIHR5cGUgZm9ybWFsIHBhcmFtZXRlciAoZS5nLiAiWCBleHRlbmRzIFkiKQogIC8vLyB3aGVyZSBbaW5kZXhdIGlzIHRoZSBpbmRleCBvZiB0aGUgdHlwZSB2YXJpYWJsZSBpbiB0aGUgbGlzdCBvZgogIC8vLyB0eXBlIHZhcmlhYmxlcyBiZWluZyBkZWNsYXJlZC4KICAvLy8KICAvLy8gU3Vic3RydWN0dXJlczoKICAvLy8gLSBUeXBlIGJvdW5kCiAgLy8vCiAgLy8vIFNlZSBbYmVnaW5UeXBlVmFyaWFibGVdIGZvciBhZGRpdGlvbmFsIHN1YnN0cnVjdHVyZXMuCiAgdm9pZCBlbmRUeXBlVmFyaWFibGUoVG9rZW4gdG9rZW4sIGludCBpbmRleCwgVG9rZW4gZXh0ZW5kc09yU3VwZXIpIHsKICAgIGxvZ0V2ZW50KCJUeXBlVmFyaWFibGUiKTsKICB9CgogIHZvaWQgYmVnaW5UeXBlVmFyaWFibGVzKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZFR5cGVWYXJpYWJsZXMoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJUeXBlVmFyaWFibGVzIik7CiAgfQoKICB2b2lkIGJlZ2luRnVuY3Rpb25FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7fQoKICAvLy8gSGFuZGxlIHRoZSBlbmQgb2YgYSBmdW5jdGlvbiBleHByZXNzaW9uIChlLmcuICIoKSB7IC4uLiB9IikuCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gVHlwZSB2YXJpYWJsZXMKICAvLy8gLSBGb3JtYWwgcGFyYW1ldGVycwogIC8vLyAtIEFzeW5jIG1hcmtlcgogIC8vLyAtIEJvZHkKICB2b2lkIGVuZEZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiBiZWdpblRva2VuLCBUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkZ1bmN0aW9uRXhwcmVzc2lvbiIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgc3RhcnQgb2YgYSB2YXJpYWJsZXMgZGVjbGFyYXRpb24uICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIE1ldGFkYXRhCiAgLy8vIC0gVHlwZQogIHZvaWQgYmVnaW5WYXJpYWJsZXNEZWNsYXJhdGlvbigKICAgICAgVG9rZW4gdG9rZW4sIFRva2VuIGxhdGVUb2tlbiwgVG9rZW4gdmFyRmluYWxPckNvbnN0KSB7fQoKICB2b2lkIGVuZFZhcmlhYmxlc0RlY2xhcmF0aW9uKGludCBjb3VudCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJWYXJpYWJsZXNEZWNsYXJhdGlvbiIpOwogIH0KCiAgdm9pZCBiZWdpbldoaWxlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZFdoaWxlU3RhdGVtZW50KFRva2VuIHdoaWxlS2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJXaGlsZVN0YXRlbWVudCIpOwogIH0KCiAgdm9pZCBoYW5kbGVBc09wZXJhdG9yKFRva2VuIG9wZXJhdG9yKSB7CiAgICBsb2dFdmVudCgiQXNPcGVyYXRvciIpOwogIH0KCiAgdm9pZCBoYW5kbGVBc3NpZ25tZW50RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkFzc2lnbm1lbnRFeHByZXNzaW9uIik7CiAgfQoKICAvLy8gQ2FsbGVkIHdoZW4gdGhlIHBhcnNlciBlbmNvdW50ZXJzIGEgYmluYXJ5IG9wZXJhdG9yLCBpbiBiZXR3ZWVuIHRoZSBMSFMKICAvLy8gYW5kIFJIUyBzdWJleHByZXNzaW9ucy4KICAvLy8KICAvLy8gTm90IGNhbGxlZCB3aGVuIHRoZSBiaW5hcnkgb3BlcmF0b3IgaXMgYC5gLCBgPy5gLCBvciBgLi5gLgogIHZvaWQgYmVnaW5CaW5hcnlFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7fQoKICB2b2lkIGVuZEJpbmFyeUV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJCaW5hcnlFeHByZXNzaW9uIik7CiAgfQoKICAvLy8gQ2FsbGVkIHdoZW4gdGhlIHBhcnNlciBlbmNvdW50ZXJzIGEgYD9gIG9wZXJhdG9yIGFuZCBiZWdpbnMgcGFyc2luZyBhCiAgLy8vIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24uCiAgdm9pZCBiZWdpbkNvbmRpdGlvbmFsRXhwcmVzc2lvbihUb2tlbiBxdWVzdGlvbikge30KCiAgLy8vIENhbGxlZCB3aGVuIHRoZSBwYXJzZXIgZW5jb3VudGVycyBhIGA6YCBvcGVyYXRvciBpbiBhIGNvbmRpdGlvbmFsCiAgLy8vIGV4cHJlc3Npb24uCiAgdm9pZCBoYW5kbGVDb25kaXRpb25hbEV4cHJlc3Npb25Db2xvbigpIHt9CgogIC8vLyBDYWxsZWQgd2hlbiB0aGUgcGFyc2VyIGZpbmlzaGVzIHByb2Nlc3NpbmcgYSBjb25kaXRpb25hbCBleHByZXNzaW9uLgogIHZvaWQgZW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKFRva2VuIHF1ZXN0aW9uLCBUb2tlbiBjb2xvbikgewogICAgbG9nRXZlbnQoIkNvbmRpdGlvbmFsRXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBiZWdpbkNvbnN0RXhwcmVzc2lvbihUb2tlbiBjb25zdEtleXdvcmQpIHt9CgogIHZvaWQgZW5kQ29uc3RFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiQ29uc3RFeHByZXNzaW9uIik7CiAgfQoKICAvLy8gQ2FsbGVkIGJlZm9yZSBwYXJzaW5nIGEgImZvciIgY29udHJvbCBmbG93IGxpc3QsIHNldCwgb3IgbWFwIGVudHJ5LgogIHZvaWQgYmVnaW5Gb3JDb250cm9sRmxvdyhUb2tlbiBhd2FpdFRva2VuLCBUb2tlbiBmb3JUb2tlbikge30KCiAgLy8vIENhbGxlZCBhZnRlciBwYXJzaW5nIGEgImZvciIgY29udHJvbCBmbG93IGxpc3QsIHNldCwgb3IgbWFwIGVudHJ5LgogIHZvaWQgZW5kRm9yQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCdlbmRGb3JDb250cm9sRmxvdycpOwogIH0KCiAgLy8vIENhbGxlZCBhZnRlciBwYXJzaW5nIGEgImZvci1pbiIgY29udHJvbCBmbG93IGxpc3QsIHNldCwgb3IgbWFwIGVudHJ5LgogIHZvaWQgZW5kRm9ySW5Db250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoJ2VuZEZvckluQ29udHJvbEZsb3cnKTsKICB9CgogIC8vLyBDYWxsZWQgYmVmb3JlIHBhcnNpbmcgYW4gYGlmYCBjb250cm9sIGZsb3cgbGlzdCwgc2V0LCBvciBtYXAgZW50cnkuCiAgdm9pZCBiZWdpbklmQ29udHJvbEZsb3coVG9rZW4gaWZUb2tlbikge30KCiAgLy8vIENhbGxlZCBiZWZvcmUgcGFyc2luZyB0aGUgYHRoZW5gIHBvcnRpb24gb2YgYW4gYGlmYCBjb250cm9sIGZsb3cgbGlzdCwKICAvLy8gc2V0LCBvciBtYXAgZW50cnkuCiAgdm9pZCBiZWdpblRoZW5Db250cm9sRmxvdyhUb2tlbiB0b2tlbikge30KCiAgLy8vIENhbGxlZCBiZWZvcmUgcGFyc2luZyB0aGUgYGVsc2VgIHBvcnRpb24gb2YgYW4gYGlmYCBjb250cm9sIGZsb3cgbGlzdCwKICAvLy8gc2V0LCBvciBtYXAgZW50cnkuCiAgdm9pZCBoYW5kbGVFbHNlQ29udHJvbEZsb3coVG9rZW4gZWxzZVRva2VuKSB7CiAgICBsb2dFdmVudCgiRWxzZUNvbnRyb2xGbG93Iik7CiAgfQoKICAvLy8gQ2FsbGVkIGFmdGVyIHBhcnNpbmcgYW4gYGlmYCBjb250cm9sIGZsb3cgbGlzdCwgc2V0LCBvciBtYXAgZW50cnkuCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gaWYgY29uZGl0aW9uYWwgZXhwcmVzc2lvbgogIC8vLyAtIGV4cHJlc3Npb24KICB2b2lkIGVuZElmQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJlbmRJZkNvbnRyb2xGbG93Iik7CiAgfQoKICAvLy8gQ2FsbGVkIGFmdGVyIHBhcnNpbmcgYW4gaWYtZWxzZSBjb250cm9sIGZsb3cgbGlzdCwgc2V0LCBvciBtYXAgZW50cnkuCiAgLy8vIFN1YnN0cnVjdHVyZXM6CiAgLy8vIC0gaWYgY29uZGl0aW9uYWwgZXhwcmVzc2lvbgogIC8vLyAtIHRoZW4gZXhwcmVzc2lvbgogIC8vLyAtIGVsc2UgZXhwcmVzc2lvbgogIHZvaWQgZW5kSWZFbHNlQ29udHJvbEZsb3coVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJlbmRJZkVsc2VDb250cm9sRmxvdyIpOwogIH0KCiAgLy8vIENhbGxlZCBhZnRlciBwYXJzaW5nIGEgbGlzdCwgc2V0LCBvciBtYXAgZW50cnkgdGhhdCBzdGFydHMgd2l0aAogIC8vLyBvbmUgb2YgdGhlIHNwcmVhZCBjb2xsZWN0aW9uIHRva2VucyBgLi4uYCBvciBgLi4uP2AuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIGV4cHJlc3Npb24KICB2b2lkIGhhbmRsZVNwcmVhZEV4cHJlc3Npb24oVG9rZW4gc3ByZWFkVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJTcHJlYWRFeHByZXNzaW9uIik7CiAgfQoKICAvLy8gSGFuZGxlIHRoZSBzdGFydCBvZiBhIGZ1bmN0aW9uIHR5cGVkIGZvcm1hbCBwYXJhbWV0ZXIuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgdm9pZCBiZWdpbkZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIoVG9rZW4gdG9rZW4pIHt9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGZ1bmN0aW9uIHR5cGVkIGZvcm1hbCBwYXJhbWV0ZXIuICBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIHR5cGUgdmFyaWFibGVzCiAgLy8vIC0gcmV0dXJuIHR5cGUKICAvLy8gLSBmb3JtYWwgcGFyYW1ldGVycwogIHZvaWQgZW5kRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlcihUb2tlbiBuYW1lVG9rZW4sIFRva2VuIHF1ZXN0aW9uKSB7CiAgICBsb2dFdmVudCgiRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlciIpOwogIH0KCiAgLy8vIEhhbmRsZSBhbiBpZGVudGlmaWVyIHRva2VuLgogIC8vLwogIC8vLyBbY29udGV4dF0gaW5kaWNhdGVzIHdoYXQga2luZCBvZiBjb25zdHJ1Y3QgdGhlIGlkZW50aWZpZXIgYXBwZWFycyBpbi4KICB2b2lkIGhhbmRsZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIGxvZ0V2ZW50KCJJZGVudGlmaWVyIik7CiAgfQoKICB2b2lkIGhhbmRsZUluZGV4ZWRFeHByZXNzaW9uKAogICAgICBUb2tlbiBvcGVuU3F1YXJlQnJhY2tldCwgVG9rZW4gY2xvc2VTcXVhcmVCcmFja2V0KSB7CiAgICBsb2dFdmVudCgiSW5kZXhlZEV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgaGFuZGxlSXNPcGVyYXRvcihUb2tlbiBpc09wZXJhdG9yLCBUb2tlbiBub3QpIHsKICAgIGxvZ0V2ZW50KCJJc09wZXJhdG9yIik7CiAgfQoKICB2b2lkIGhhbmRsZUxpdGVyYWxCb29sKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTGl0ZXJhbEJvb2wiKTsKICB9CgogIHZvaWQgaGFuZGxlQnJlYWtTdGF0ZW1lbnQoCiAgICAgIGJvb2wgaGFzVGFyZ2V0LCBUb2tlbiBicmVha0tleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiQnJlYWtTdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgaGFuZGxlQ29udGludWVTdGF0ZW1lbnQoCiAgICAgIGJvb2wgaGFzVGFyZ2V0LCBUb2tlbiBjb250aW51ZUtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiQ29udGludWVTdGF0ZW1lbnQiKTsKICB9CgogIHZvaWQgaGFuZGxlRW1wdHlTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJFbXB0eVN0YXRlbWVudCIpOwogIH0KCiAgdm9pZCBiZWdpbkFzc2VydChUb2tlbiBhc3NlcnRLZXl3b3JkLCBBc3NlcnQga2luZCkge30KCiAgdm9pZCBlbmRBc3NlcnQoVG9rZW4gYXNzZXJ0S2V5d29yZCwgQXNzZXJ0IGtpbmQsIFRva2VuIGxlZnRQYXJlbnRoZXNpcywKICAgICAgVG9rZW4gY29tbWFUb2tlbiwgVG9rZW4gc2VtaWNvbG9uVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJBc3NlcnQiKTsKICB9CgogIC8qKiBDYWxsZWQgd2l0aCBlaXRoZXIgdGhlIHRva2VuIGNvbnRhaW5pbmcgYSBkb3VibGUgbGl0ZXJhbCwgb3IKICAgICogYW4gaW1tZWRpYXRlbHkgcHJlY2VkaW5nICJ1bmFyeSBwbHVzIiB0b2tlbi4KICAgICovCiAgdm9pZCBoYW5kbGVMaXRlcmFsRG91YmxlKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTGl0ZXJhbERvdWJsZSIpOwogIH0KCiAgLyoqIENhbGxlZCB3aXRoIGVpdGhlciB0aGUgdG9rZW4gY29udGFpbmluZyBhbiBpbnRlZ2VyIGxpdGVyYWwsCiAgICAqIG9yIGFuIGltbWVkaWF0ZWx5IHByZWNlZGluZyAidW5hcnkgcGx1cyIgdG9rZW4uCiAgICAqLwogIHZvaWQgaGFuZGxlTGl0ZXJhbEludChUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkxpdGVyYWxJbnQiKTsKICB9CgogIHZvaWQgaGFuZGxlTGl0ZXJhbExpc3QoCiAgICAgIGludCBjb3VudCwgVG9rZW4gbGVmdEJyYWNrZXQsIFRva2VuIGNvbnN0S2V5d29yZCwgVG9rZW4gcmlnaHRCcmFja2V0KSB7CiAgICBsb2dFdmVudCgiTGl0ZXJhbExpc3QiKTsKICB9CgogIHZvaWQgaGFuZGxlTGl0ZXJhbFNldE9yTWFwKAogICAgaW50IGNvdW50LAogICAgVG9rZW4gbGVmdEJyYWNlLAogICAgVG9rZW4gY29uc3RLZXl3b3JkLAogICAgVG9rZW4gcmlnaHRCcmFjZSwKICAgIC8vIFRPRE8oZGFucnViZWwpOiBoYXNTZXRFbnRyeSBwYXJhbWV0ZXIgZXhpc3RzIGZvciByZXBsaWNhdGluZyBleGlzdGluZwogICAgLy8gYmVoYXZpb3IgYW5kIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHVuaWZpZWQgY29sbGVjdGlvbiBoYXMgYmVlbiBlbmFibGVkCiAgICBib29sIGhhc1NldEVudHJ5LAogICkgewogICAgbG9nRXZlbnQoJ0xpdGVyYWxTZXRPck1hcCcpOwogIH0KCiAgdm9pZCBoYW5kbGVMaXRlcmFsTnVsbChUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIkxpdGVyYWxOdWxsIik7CiAgfQoKICB2b2lkIGhhbmRsZU5hdGl2ZUNsYXVzZShUb2tlbiBuYXRpdmVUb2tlbiwgYm9vbCBoYXNOYW1lKSB7CiAgICBsb2dFdmVudCgiTmF0aXZlQ2xhdXNlIik7CiAgfQoKICB2b2lkIGhhbmRsZU5hbWVkQXJndW1lbnQoVG9rZW4gY29sb24pIHsKICAgIGxvZ0V2ZW50KCJOYW1lZEFyZ3VtZW50Iik7CiAgfQoKICB2b2lkIGJlZ2luTmV3RXhwcmVzc2lvbihUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmROZXdFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTmV3RXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBoYW5kbGVOb0FyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIk5vQXJndW1lbnRzIik7CiAgfQoKICB2b2lkIGhhbmRsZU5vQ29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJOb0NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzIik7CiAgfQoKICB2b2lkIGhhbmRsZU5vVHlwZShUb2tlbiBsYXN0Q29uc3VtZWQpIHsKICAgIGxvZ0V2ZW50KCJOb1R5cGUiKTsKICB9CgogIHZvaWQgaGFuZGxlTm9UeXBlVmFyaWFibGVzKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiTm9UeXBlVmFyaWFibGVzIik7CiAgfQoKICB2b2lkIGhhbmRsZU9wZXJhdG9yKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiT3BlcmF0b3IiKTsKICB9CgogIHZvaWQgaGFuZGxlU3ltYm9sVm9pZChUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIlN5bWJvbFZvaWQiKTsKICB9CgogIC8vLyBIYW5kbGUgdGhlIGVuZCBvZiBhIGNvbnN0cnVjdCBvZiB0aGUgZm9ybSAib3BlcmF0b3IgPHRva2VuPiIuCiAgdm9pZCBoYW5kbGVPcGVyYXRvck5hbWUoVG9rZW4gb3BlcmF0b3JLZXl3b3JkLCBUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIk9wZXJhdG9yTmFtZSIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgZW5kIG9mIGEgY29uc3RydWN0IG9mIHRoZSBmb3JtICJvcGVyYXRvciA8dG9rZW4+IgogIC8vLyB3aGVyZSA8dG9rZW4+IGlzIG5vdCBhIHZhbGlkIG9wZXJhdG9yIHRva2VuLgogIHZvaWQgaGFuZGxlSW52YWxpZE9wZXJhdG9yTmFtZShUb2tlbiBvcGVyYXRvcktleXdvcmQsIFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiSW52YWxpZE9wZXJhdG9yTmFtZSIpOwogIH0KCiAgLy8vIEhhbmRsZSB0aGUgY29uZGl0aW9uIGluIGEgY29udHJvbCBzdHJ1Y3R1cmU6CiAgLy8vIC0gaWYgc3RhdGVtZW50CiAgLy8vIC0gZG8gd2hpbGUgbG9vcAogIC8vLyAtIHN3aXRjaCBzdGF0ZW1lbnQKICAvLy8gLSB3aGlsZSBsb29wCiAgdm9pZCBoYW5kbGVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiUGFyZW50aGVzaXplZENvbmRpdGlvbiIpOwogIH0KCiAgLy8vIEhhbmRsZSBhIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvbi4KICAvLy8gVGhlc2UgbWF5IGJlIHdpdGhpbiB0aGUgY29uZGl0aW9uIGV4cHJlc3Npb24gb2YgYSBjb250cm9sIHN0cnVjdHVyZQogIC8vLyBidXQgd2lsbCBub3QgYmUgdGhlIGNvbmRpdGlvbiBvZiBhIGNvbnRyb2wgc3RydWN0dXJlLgogIHZvaWQgaGFuZGxlUGFyZW50aGVzaXplZEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJQYXJlbnRoZXNpemVkRXhwcmVzc2lvbiIpOwogIH0KCiAgLy8vIEhhbmRsZSBhIGNvbnN0cnVjdCBvZiB0aGUgZm9ybSAiaWRlbnRpZmllci5pZGVudGlmaWVyIiBvY2N1cnJpbmcgaW4gYSBwYXJ0CiAgLy8vIG9mIHRoZSBncmFtbWFyIHdoZXJlIGV4cHJlc3Npb25zIGluIGdlbmVyYWwgYXJlIG5vdCBhbGxvd2VkLgogIC8vLyBTdWJzdHJ1Y3R1cmVzOgogIC8vLyAtIFF1YWxpZmllZCBpZGVudGlmaWVyIChiZWZvcmUgdGhlIHBlcmlvZCkKICAvLy8gLSBJZGVudGlmaWVyIChhZnRlciB0aGUgcGVyaW9kKQogIHZvaWQgaGFuZGxlUXVhbGlmaWVkKFRva2VuIHBlcmlvZCkgewogICAgbG9nRXZlbnQoIlF1YWxpZmllZCIpOwogIH0KCiAgdm9pZCBoYW5kbGVTdHJpbmdQYXJ0KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiU3RyaW5nUGFydCIpOwogIH0KCiAgdm9pZCBoYW5kbGVTdXBlckV4cHJlc3Npb24oVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIGxvZ0V2ZW50KCJTdXBlckV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgYmVnaW5Td2l0Y2hDYXNlKGludCBsYWJlbENvdW50LCBpbnQgZXhwcmVzc2lvbkNvdW50LCBUb2tlbiBmaXJzdFRva2VuKSB7fQoKICB2b2lkIGVuZFN3aXRjaENhc2UoCiAgICAgIGludCBsYWJlbENvdW50LAogICAgICBpbnQgZXhwcmVzc2lvbkNvdW50LAogICAgICBUb2tlbiBkZWZhdWx0S2V5d29yZCwKICAgICAgVG9rZW4gY29sb25BZnRlckRlZmF1bHQsCiAgICAgIGludCBzdGF0ZW1lbnRDb3VudCwKICAgICAgVG9rZW4gZmlyc3RUb2tlbiwKICAgICAgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJTd2l0Y2hDYXNlIik7CiAgfQoKICB2b2lkIGhhbmRsZVRoaXNFeHByZXNzaW9uKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBsb2dFdmVudCgiVGhpc0V4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgaGFuZGxlVW5hcnlQb3N0Zml4QXNzaWdubWVudEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJVbmFyeVBvc3RmaXhBc3NpZ25tZW50RXhwcmVzc2lvbiIpOwogIH0KCiAgdm9pZCBoYW5kbGVVbmFyeVByZWZpeEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJVbmFyeVByZWZpeEV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgaGFuZGxlVW5hcnlQcmVmaXhBc3NpZ25tZW50RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbG9nRXZlbnQoIlVuYXJ5UHJlZml4QXNzaWdubWVudEV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgYmVnaW5Gb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uKCkge30KCiAgdm9pZCBlbmRGb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uKCkgewogICAgbG9nRXZlbnQoIkZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb24iKTsKICB9CgogIHZvaWQgaGFuZGxlVmFsdWVkRm9ybWFsUGFyYW1ldGVyKFRva2VuIGVxdWFscywgVG9rZW4gdG9rZW4pIHsKICAgIGxvZ0V2ZW50KCJWYWx1ZWRGb3JtYWxQYXJhbWV0ZXIiKTsKICB9CgogIHZvaWQgaGFuZGxlRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlIik7CiAgfQoKICB2b2lkIGhhbmRsZVZvaWRLZXl3b3JkKFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiVm9pZEtleXdvcmQiKTsKICB9CgogIHZvaWQgYmVnaW5ZaWVsZFN0YXRlbWVudChUb2tlbiB0b2tlbikge30KCiAgdm9pZCBlbmRZaWVsZFN0YXRlbWVudChUb2tlbiB5aWVsZFRva2VuLCBUb2tlbiBzdGFyVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsb2dFdmVudCgiWWllbGRTdGF0ZW1lbnQiKTsKICB9CgogIC8vLyBUaGUgcGFyc2VyIG5vdGljZWQgYSBzeW50YXggZXJyb3IsIGJ1dCB3YXMgYWJsZSB0byByZWNvdmVyIGZyb20gaXQuIFRoZQogIC8vLyBlcnJvciBzaG91bGQgYmUgcmVwb3J0ZWQgdXNpbmcgdGhlIFttZXNzYWdlXSwgYW5kIHRoZSBjb2RlIGJldHdlZW4gdGhlCiAgLy8vIGJlZ2lubmluZyBvZiB0aGUgW3N0YXJ0VG9rZW5dIGFuZCB0aGUgZW5kIG9mIHRoZSBbZW5kVG9rZW5dIHNob3VsZCBiZQogIC8vLyBoaWdobGlnaHRlZC4gVGhlIFtzdGFydFRva2VuXSBhbmQgW2VuZFRva2VuXSBjYW4gYmUgdGhlIHNhbWUgdG9rZW4uCiAgdm9pZCBoYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICBNZXNzYWdlIG1lc3NhZ2UsIFRva2VuIHN0YXJ0VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7fQoKICAvLy8gVGhlIHBhcnNlciBlbmNvdW50ZXJlZCBhbiBbRXJyb3JUb2tlbl0gcmVwcmVzZW50aW5nIGFuIGVycm9yCiAgLy8vIGZyb20gdGhlIHNjYW5uZXIgYnV0IHJlY292ZXJlZCBmcm9tIGl0LiBCeSBkZWZhdWx0LCB0aGUgZXJyb3IgaXMgcmVwb3J0ZWQKICAvLy8gYnkgY2FsbGluZyBbaGFuZGxlUmVjb3ZlcmFibGVFcnJvcl0gd2l0aCB0aGUgbWVzc2FnZSBhc3NvY2lhdGVkCiAgLy8vIHdpdGggdGhlIGVycm9yIFt0b2tlbl0uCiAgdm9pZCBoYW5kbGVFcnJvclRva2VuKEVycm9yVG9rZW4gdG9rZW4pIHsKICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IodG9rZW4uYXNzZXJ0aW9uTWVzc2FnZSwgdG9rZW4sIHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVW5lc2NhcGVFcnJvcigKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBUb2tlbiBsb2NhdGlvbiwgaW50IHN0cmluZ09mZnNldCwgaW50IGxlbmd0aCkgewogICAgaGFuZGxlUmVjb3ZlcmFibGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbiwgbG9jYXRpb24pOwogIH0KCiAgLy8vIFNpZ25hbHMgdG8gdGhlIGxpc3RlbmVyIHRoYXQgdGhlIHByZXZpb3VzIHN0YXRlbWVudCBjb250YWluZWQgYSBzZW1hbnRpYwogIC8vLyBlcnJvciAoZGVzY3JpYmVkIGJ5IHRoZSBnaXZlbiBbbWVzc2FnZV0pLiBUaGlzIG1ldGhvZCBjYW4gYWxzbyBiZSBjYWxsZWQKICAvLy8gYWZ0ZXIgW2hhbmRsZUV4cHJlc3Npb25GdW5jdGlvbkJvZHldLCBpbiB3aGljaCBjYXNlIGl0IHNpZ25hbHMgdGhhdCB0aGUKICAvLy8gaW1wbGljaXQgcmV0dXJuIHN0YXRlbWVudCBvZiB0aGUgZnVuY3Rpb24gY29udGFpbmVkIGEgc2VtYW50aWMgZXJyb3IuCiAgdm9pZCBoYW5kbGVJbnZhbGlkU3RhdGVtZW50KFRva2VuIHRva2VuLCBNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIGhhbmRsZVJlY292ZXJhYmxlRXJyb3IobWVzc2FnZSwgdG9rZW4sIHRva2VuKTsKICB9CgogIHZvaWQgaGFuZGxlU2NyaXB0KFRva2VuIHRva2VuKSB7CiAgICBsb2dFdmVudCgiU2NyaXB0Iik7CiAgfQoKICAvLy8gQSB0eXBlIGhhcyBiZWVuIGp1c3QgcGFyc2VkLCBhbmQgdGhlIHBhcnNlciBub3RpY2VkIHRoYXQgdGhlIG5leHQgdG9rZW4KICAvLy8gaGFzIGEgdHlwZSBzdWJzdGl0dXRpb24gY29tbWVudCAvKj1UKi4gU28sIHRoZSB0eXBlIHRoYXQgaGFzIGJlZW4ganVzdAogIC8vLyBwYXJzZWQgc2hvdWxkIGJlIGRpc2NhcmRlZCwgYW5kIGEgbmV3IHR5cGUgc2hvdWxkIGJlIHBhcnNlZCBpbnN0ZWFkLgogIHZvaWQgZGlzY2FyZFR5cGVSZXBsYWNlZFdpdGhDb21tZW50VHlwZUFzc2lnbigpIHt9CgogIC8vLyBBIHNpbmdsZSBjb21tZW50IHJlZmVyZW5jZSBoYXMgYmVlbiBmb3VuZAogIC8vLyB3aGVyZSBbcmVmZXJlbmNlU291cmNlXSBpcyB0aGUgdGV4dCBiZXR3ZWVuIHRoZSBgW2AgYW5kIGBdYAogIC8vLyBhbmQgW3JlZmVyZW5jZU9mZnNldF0gaXMgdGhlIGNoYXJhY3RlciBvZmZzZXQgaW4gdGhlIHRva2VuIHN0cmVhbS4KICAvLy8KICAvLy8gVGhpcyBldmVudCBpcyBnZW5lcmF0ZWQgYnkgdGhlIHBhcnNlciB3aGVuIHRoZSBwYXJzZXIncwogIC8vLyBgcGFyc2VDb21tZW50UmVmZXJlbmNlc2AgbWV0aG9kIGlzIGNhbGxlZC4gRm9yIGZ1cnRoZXIgcHJvY2Vzc2luZywKICAvLy8gYSBsaXN0ZW5lciBtYXkgc2NhbiB0aGUgW3JlZmVyZW5jZVNvdXJjZV0gYW5kIHRoZW4gcGFzcyB0aGUgcmVzdWx0aW5nCiAgLy8vIHRva2VuIHN0cmVhbSB0byB0aGUgcGFyc2VyJ3MgYHBhcnNlT25lQ29tbWVudFJlZmVyZW5jZWAgbWV0aG9kLgogIHZvaWQgaGFuZGxlQ29tbWVudFJlZmVyZW5jZVRleHQoU3RyaW5nIHJlZmVyZW5jZVNvdXJjZSwgaW50IHJlZmVyZW5jZU9mZnNldCkgewogICAgbG9nRXZlbnQoIkNvbW1lbnRSZWZlcmVuY2VUZXh0Iik7CiAgfQoKICAvLy8gQSBzaW5nbGUgY29tbWVudCByZWZlcmVuY2UgaGFzIGJlZW4gcGFyc2VkLgogIC8vLyAqIFtuZXdLZXl3b3JkXSBtYXkgYmUgbnVsbC4KICAvLy8gKiBbcHJlZml4XSBhbmQgW3BlcmlvZF0gYXJlIGVpdGhlciBib3RoIHRva2VucyBvciBib3RoIGBudWxsYC4KICAvLy8gKiBbdG9rZW5dIGNhbiBiZSBhbiBpZGVudGlmaWVyIG9yIGFuIG9wZXJhdG9yLgogIC8vLwogIC8vLyBUaGlzIGV2ZW50IGlzIGdlbmVyYXRlZCBieSB0aGUgcGFyc2VyIHdoZW4gdGhlIHBhcnNlcidzCiAgLy8vIGBwYXJzZU9uZUNv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cmMvZmFzdGEvcGFyc2VyL2xpc3RlbmVyLmRhcnQ3c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9wYXJzZXIuZGFydMADk7QvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5wYXJzZXIucGFyc2VyOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IE1lc3NhZ2UsIFRlbXBsYXRlOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBhcyBmYXN0YTsKCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JyBzaG93IEVycm9yVG9rZW4sIFRva2VuOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnCiAgICBzaG93CiAgICAgICAgQVNTSUdOTUVOVF9QUkVDRURFTkNFLAogICAgICAgIEJlZ2luVG9rZW4sCiAgICAgICAgQ0FTQ0FERV9QUkVDRURFTkNFLAogICAgICAgIEVRVUFMSVRZX1BSRUNFREVOQ0UsCiAgICAgICAgS2V5d29yZCwKICAgICAgICBQT1NURklYX1BSRUNFREVOQ0UsCiAgICAgICAgUkVMQVRJT05BTF9QUkVDRURFTkNFLAogICAgICAgIFNFTEVDVE9SX1BSRUNFREVOQ0UsCiAgICAgICAgU3ludGhldGljQmVnaW5Ub2tlbiwKICAgICAgICBTeW50aGV0aWNLZXl3b3JkVG9rZW4sCiAgICAgICAgU3ludGhldGljU3RyaW5nVG9rZW4sCiAgICAgICAgU3ludGhldGljVG9rZW4sCiAgICAgICAgVG9rZW5UeXBlOwoKaW1wb3J0ICcuLi9zY2FubmVyL3Rva2VuX2NvbnN0YW50cy5kYXJ0JwogICAgc2hvdwogICAgICAgIEJBTkdfRVFfRVFfVE9LRU4sCiAgICAgICAgQ09NTUFfVE9LRU4sCiAgICAgICAgRE9VQkxFX1RPS0VOLAogICAgICAgIEVPRl9UT0tFTiwKICAgICAgICBFUV9FUV9FUV9UT0tFTiwKICAgICAgICBFUV9UT0tFTiwKICAgICAgICBGVU5DVElPTl9UT0tFTiwKICAgICAgICBIQVNIX1RPS0VOLAogICAgICAgIEhFWEFERUNJTUFMX1RPS0VOLAogICAgICAgIElERU5USUZJRVJfVE9LRU4sCiAgICAgICAgSU5UX1RPS0VOLAogICAgICAgIEtFWVdPUkRfVE9LRU4sCiAgICAgICAgTFRfVE9LRU4sCiAgICAgICAgT1BFTl9DVVJMWV9CUkFDS0VUX1RPS0VOLAogICAgICAgIE9QRU5fUEFSRU5fVE9LRU4sCiAgICAgICAgT1BFTl9TUVVBUkVfQlJBQ0tFVF9UT0tFTiwKICAgICAgICBTRU1JQ09MT05fVE9LRU4sCiAgICAgICAgU1RSSU5HX0lOVEVSUE9MQVRJT05fSURFTlRJRklFUl9UT0tFTiwKICAgICAgICBTVFJJTkdfSU5URVJQT0xBVElPTl9UT0tFTiwKICAgICAgICBTVFJJTkdfVE9LRU47CgppbXBvcnQgJ2Fzc2VydC5kYXJ0JyBzaG93IEFzc2VydDsKCmltcG9ydCAnYXN5bmNfbW9kaWZpZXIuZGFydCcgc2hvdyBBc3luY01vZGlmaWVyOwoKaW1wb3J0ICdjbGFzc19raW5kLmRhcnQnIHNob3cgQ2xhc3NLaW5kOwoKaW1wb3J0ICdkaXJlY3RpdmVfY29udGV4dC5kYXJ0JzsKCmltcG9ydCAnZm9ybWFsX3BhcmFtZXRlcl9raW5kLmRhcnQnCiAgICBzaG93CiAgICAgICAgRm9ybWFsUGFyYW1ldGVyS2luZCwKICAgICAgICBpc01hbmRhdG9yeUZvcm1hbFBhcmFtZXRlcktpbmQsCiAgICAgICAgaXNPcHRpb25hbFBvc2l0aW9uYWxGb3JtYWxQYXJhbWV0ZXJLaW5kOwoKaW1wb3J0ICdmb3J3YXJkaW5nX2xpc3RlbmVyLmRhcnQnIHNob3cgRm9yd2FyZGluZ0xpc3RlbmVyOwoKaW1wb3J0ICdpZGVudGlmaWVyX2NvbnRleHQuZGFydCcKICAgIHNob3cgSWRlbnRpZmllckNvbnRleHQsIGxvb2tzTGlrZUV4cHJlc3Npb25TdGFydDsKCmltcG9ydCAnbGlzdGVuZXIuZGFydCcgc2hvdyBMaXN0ZW5lcjsKCmltcG9ydCAnbGl0ZXJhbF9lbnRyeV9pbmZvLmRhcnQnCiAgICBzaG93CiAgICAgICAgTGl0ZXJhbEVudHJ5SW5mbywKICAgICAgICBjb21wdXRlTGl0ZXJhbEVudHJ5LAogICAgICAgIGxvb2tzTGlrZUxpdGVyYWxFbnRyeSwKICAgICAgICBzaW1wbGVFbnRyeTsKCmltcG9ydCAnbG9vcF9zdGF0ZS5kYXJ0JyBzaG93IExvb3BTdGF0ZTsKCmltcG9ydCAnbWVtYmVyX2tpbmQuZGFydCcgc2hvdyBNZW1iZXJLaW5kOwoKaW1wb3J0ICdtb2RpZmllcl9jb250ZXh0LmRhcnQnIHNob3cgTW9kaWZpZXJSZWNvdmVyeUNvbnRleHQsIGlzTW9kaWZpZXI7CgppbXBvcnQgJ3JlY292ZXJ5X2xpc3RlbmVycy5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzSGVhZGVyUmVjb3ZlcnlMaXN0ZW5lciwKICAgICAgICBJbXBvcnRSZWNvdmVyeUxpc3RlbmVyLAogICAgICAgIE1peGluSGVhZGVyUmVjb3ZlcnlMaXN0ZW5lcjsKCmltcG9ydCAndG9rZW5fc3RyZWFtX3Jld3JpdGVyLmRhcnQnIHNob3cgVG9rZW5TdHJlYW1SZXdyaXRlcjsKCmltcG9ydCAndHlwZV9pbmZvLmRhcnQnCiAgICBzaG93CiAgICAgICAgVHlwZUluZm8sCiAgICAgICAgVHlwZVBhcmFtT3JBcmdJbmZvLAogICAgICAgIGNvbXB1dGVNZXRob2RUeXBlQXJndW1lbnRzLAogICAgICAgIGNvbXB1dGVUeXBlLAogICAgICAgIGNvbXB1dGVUeXBlUGFyYW1PckFyZywKICAgICAgICBpc1ZhbGlkVHlwZVJlZmVyZW5jZSwKICAgICAgICBub1R5cGUsCiAgICAgICAgbm9UeXBlUGFyYW1PckFyZzsKCmltcG9ydCAndXRpbC5kYXJ0JwogICAgc2hvdwogICAgICAgIGZpbmROb25aZXJvTGVuZ3RoVG9rZW4sCiAgICAgICAgZmluZFByZXZpb3VzTm9uWmVyb0xlbmd0aFRva2VuLAogICAgICAgIGlzTGV0dGVyLAogICAgICAgIGlzTGV0dGVyT3JEaWdpdCwKICAgICAgICBpc09uZU9mLAogICAgICAgIGlzT25lT2ZPckVvZiwKICAgICAgICBpc1doaXRlc3BhY2UsCiAgICAgICAgb3B0aW9uYWw7CgovLy8gQW4gZXZlbnQgZ2VuZXJhdGluZyBwYXJzZXIgb2YgRGFydCBwcm9ncmFtcy4gVGhpcyBwYXJzZXIgZXhwZWN0cyBhbGwgdG9rZW5zCi8vLyBpbiBhIGxpbmtlZCBsaXN0IChha2EgYSB0b2tlbiBzdHJlYW0pLgovLy8KLy8vIFRoZSBjbGFzcyBbU2Nhbm5lcl0gaXMgdXNlZCB0byBnZW5lcmF0ZSBhIHRva2VuIHN0cmVhbS4gU2VlIHRoZSBmaWxlCi8vLyBbc2Nhbm5lci5kYXJ0XSguLi9zY2FubmVyLmRhcnQpLgovLy8KLy8vIFN1YmNsYXNzZXMgb2YgdGhlIGNsYXNzIFtMaXN0ZW5lcl0gYXJlIHVzZWQgdG8gbGlzdGVuIHRvIGV2ZW50cy4KLy8vCi8vLyBNb3N0IG1ldGhvZHMgb2YgdGhpcyBjbGFzcyBiZWxvbmcgaW4gb25lIG9mIGZvdXIgbWFqb3IgY2F0ZWdvcmllczogcGFyc2UKLy8vIG1ldGhvZHMsIHBlZWsgbWV0aG9kcywgZW5zdXJlIG1ldGhvZHMsIGFuZCBza2lwIG1ldGhvZHMuCi8vLwovLy8gUGFyc2UgbWV0aG9kcyBhbGwgaGF2ZSB0aGUgcHJlZml4IGBwYXJzZWAsIGdlbmVyYXRlIGV2ZW50cwovLy8gKGJ5IGNhbGxpbmcgbWV0aG9kcyBvbiBbbGlzdGVuZXJdKSwgYW5kIHJldHVybiB0aGUgbmV4dCB0b2tlbiB0byBwYXJzZS4KLy8vIFNvbWUgZXhjZXB0aW9ucyB0byB0aGlzIGxhc3QgcG9pbnQgYXJlIG1ldGhvZHMgc3VjaCBhcyBbcGFyc2VGdW5jdGlvbkJvZHldCi8vLyBhbmQgW3BhcnNlQ2xhc3NPck1peGluQm9keV0gd2hpY2ggcmV0dXJuIHRoZSBsYXN0IHRva2VuIHBhcnNlZAovLy8gcmF0aGVyIHRoYW4gdGhlIG5leHQgdG9rZW4gdG8gYmUgcGFyc2VkLgovLy8gUGFyc2UgbWV0aG9kcyBhcmUgZ2VuZXJhbGx5IG5hbWVkIGBwYXJzZUdyYW1tYXJQcm9kdWN0aW9uU3VmZml4YC4KLy8vIFRoZSBzdWZmaXggY2FuIGJlIG9uZSBvZiBgb3B0YCwgb3IgYHN0YXJgLgovLy8gYG9wdGAgbWVhbnMgemVybyBvciBvbmUgbWF0Y2hlcywgYHN0YXJgIG1lYW5zIHplcm8gb3IgbW9yZSBtYXRjaGVzLgovLy8gRm9yIGV4YW1wbGUsIFtwYXJzZU1ldGFkYXRhU3Rhcl0gY29ycmVzcG9uZHMgdG8gdGhpcyBncmFtbWFyIHNuaXBwZXQ6Ci8vLyBgbWV0YWRhdGEqYCwgYW5kIFtwYXJzZUFyZ3VtZW50c09wdF0gY29ycmVzcG9uZHMgdG86IGBhcmd1bWVudHM/YC4KLy8vCi8vLyBQZWVrIG1ldGhvZHMgYWxsIGhhdmUgdGhlIHByZWZpeCBgcGVla2AsIGRvIG5vdCBnZW5lcmF0ZSBldmVudHMKLy8vIChleGNlcHQgZm9yIGVycm9ycykgYW5kIG1heSByZXR1cm4gbnVsbC4KLy8vCi8vLyBFbnN1cmUgbWV0aG9kcyBhbGwgaGF2ZSB0aGUgcHJlZml4IGBlbnN1cmVgIGFuZCBtYXkgZ2VuZXJhdGUgZXZlbnRzLgovLy8gVGhleSByZXR1cm4gdGhlIGN1cnJlbnQgdG9rZW4sIG9yIGluc2VydCBhbmQgcmV0dXJuIGEgc3ludGhldGljIHRva2VuCi8vLyBpZiB0aGUgY3VycmVudCB0b2tlbiBkb2VzIG5vdCBtYXRjaC4gRm9yIGV4YW1wbGUsCi8vLyBbZW5zdXJlU2VtaWNvbG9uXSByZXR1cm5zIHRoZSBjdXJyZW50IHRva2VuIGlmIHRoZSBjdXJyZW50IHRva2VuIGlzIGEKLy8vIHNlbWljb2xvbiwgb3RoZXJ3aXNlIGluc2VydHMgYSBzeW50aGV0aWMgc2VtaWNvbG9uIGluIHRoZSB0b2tlbiBzdHJlYW0KLy8vIGJlZm9yZSB0aGUgY3VycmVudCB0b2tlbiBhbmQgdGhlbiByZXR1cm5zIHRoYXQgbmV3IHN5bnRoZXRpYyB0b2tlbi4KLy8vCi8vLyBTa2lwIG1ldGhvZHMgYXJlIGxpa2UgcGFyc2UgbWV0aG9kcywgYnV0IGFsbCBoYXZlIHRoZSBwcmVmaXggYHNraXBgCi8vLyBhbmQgc2tpcCBvdmVyIHNvbWUgcGFydHMgb2YgdGhlIGZpbGUgYmVpbmcgcGFyc2VkLgovLy8gVHlwaWNhbGx5LCBza2lwIG1ldGhvZHMgZ2VuZXJhdGUgYW4gZXZlbnQgZm9yIHRoZSBzdHJ1Y3R1cmUgYmVpbmcgc2tpcHBlZCwKLy8vIGJ1dCBub3QgZm9yIGl0cyBzdWJzdHJ1Y3R1cmVzLgovLy8KLy8vICMjIEN1cnJlbnQgVG9rZW4KLy8vCi8vLyBUaGUgY3VycmVudCB0b2tlbiBpcyBhbHdheXMgdG8gYmUgZm91bmQgaW4gYSBmb3JtYWwgcGFyYW1ldGVyIG5hbWVkCi8vLyBgdG9rZW5gLiBUaGlzIHBhcmFtZXRlciBzaG91bGQgYmUgdGhlIGZpcnN0IGFzIHRoaXMgaW5jcmVhc2VzIHRoZSBjaGFuY2UKLy8vIHRoYXQgYSBjb21waWxlciB3aWxsIHBsYWNlIGl0IGluIGEgcmVnaXN0ZXIuCi8vLwovLy8gIyMgSW1wbGVtZW50YXRpb24gTm90ZXMKLy8vCi8vLyBUaGUgcGFyc2VyIGFzc3VtZXMgdGhhdCBrZXl3b3JkcywgYnVpbHQtaW4gaWRlbnRpZmllcnMsIGFuZCBvdGhlciBzcGVjaWFsCi8vLyB3b3JkcyAocHNldWRvLWtleXdvcmRzKSBhcmUgYWxsIGNhbm9uaWNhbGl6ZWQuIFRvIGV4dGVuZCB0aGUgcGFyc2VyIHRvCi8vLyByZWNvZ25pemUgYSBuZXcgaWRlbnRpZmllciwgb25lIHNob3VsZCBtb2RpZnkKLy8vIFtrZXl3b3JkLmRhcnRdKC4uL3NjYW5uZXIva2V5d29yZC5kYXJ0KSBhbmQgZW5zdXJlIHRoZSBpZGVudGlmaWVyIGlzIGFkZGVkCi8vLyB0byB0aGUga2V5d29yZCB0YWJsZS4KLy8vCi8vLyBBcyBhIGNvbnNlcXVlbmNlIG9mIHRoaXMsIG9uZSBzaG91bGQgbm90IHVzZSBgPT1gIHRvIGNvbXBhcmUgc3RyaW5ncyBpbiB0aGUKLy8vIHBhcnNlci4gT25lIHNob3VsZCBmYXZvciB0aGUgbWV0aG9kcyBbb3B0aW9uYWxdIGFuZCBbZXhwZWN0XSB0byByZWNvZ25pemUKLy8vIGtleXdvcmRzIG9yIGlkZW50aWZpZXJzLiBJbiBzb21lIGNhc2VzLCBpdCdzIHBvc3NpYmxlIHRvIGNvbXBhcmUgYSB0b2tlbidzCi8vLyBgc3RyaW5nVmFsdWVgIHVzaW5nIFtpZGVudGljYWxdLCBidXQgbm9ybWFsbHkgW29wdGlvbmFsXSB3aWxsIHN1ZmZpY2UuCi8vLwovLy8gSGlzdG9yaWNhbGx5LCB3ZSBvdmVyLXVzZWQgaWRlbnRpY2FsLCBhbmQgd2hlbiBpZGVudGljYWwgaXMgdXNlZCBvbiBvYmplY3RzCi8vLyBvdGhlciB0aGFuIHN0cmluZ3MsIGl0IGNhbiBvZnRlbiBiZSByZXBsYWNlZCBieSBgPT1gLgovLy8KLy8vICMjIEZsZXhpYmlsaXR5LCBFeHRlbnNpYmlsaXR5LCBhbmQgU3BlY2lmaWNhdGlvbgovLy8KLy8vIFRoZSBwYXJzZXIgaXMgZGVzaWduZWQgdG8gYmUgZmxleGlibGUgYW5kIGV4dGVuc2libGUuIEl0cyBtZXRob2RzIGFyZQovLy8gZGVzaWduZWQgdG8gYmUgb3ZlcnJpZGRlbiBpbiBzdWJjbGFzc2VzLCBzbyBpdCBjYW4gYmUgZXh0ZW5kZWQgdG8gaGFuZGxlCi8vLyB1bnNwZWNpZmllZCBsYW5ndWFnZSBleHRlbnNpb24gb3IgZXhwZXJpbWVudHMgd2hpbGUgZXZlcnl0aGluZyBpbiB0aGlzIGZpbGUKLy8vIGF0dGVtcHRzIHRvIGZvbGxvdyB0aGUgc3BlY2lmaWNhdGlvbiAodW5sZXNzIHdoZW4gaXQgaW50ZXJmZXJlcyB3aXRoIGVycm9yCi8vLyByZWNvdmVyeSkuCi8vLwovLy8gV2UgYWNoaWV2ZSBmbGV4aWJpbGl0eSwgZXh0ZW5zaWJsZSwgYW5kIHNwZWNpZmljYXRpb24gY29tcGxpYW5jZSBieQovLy8gZm9sbG93aW5nIGEgZmV3IHJ1bGVzLW9mLXRodW1iOgovLy8KLy8vIDEuIEFsbCBtZXRob2RzIGluIHRoZSBwYXJzZXIgc2hvdWxkIGJlIHB1YmxpYy4KLy8vCi8vLyAyLiBUaGUgbWV0aG9kcyBmb2xsb3cgdGhlIHNwZWNpZmllZCBncmFtbWFyLCBhbmQgZG8gbm90IGltcGxlbWVudCBjdXN0b20KLy8vIGV4dGVuc2lvbnMsIGZvciBleGFtcGxlLCBgbmF0aXZlYC4KLy8vCi8vLyAzLiBUaGUgcGFyc2VyIGRvZXNuJ3QgcmV3cml0ZSB0aGUgdG9rZW4gc3RyZWFtICh3aGVuIGRlYWxpbmcgd2l0aCBgPj5gKS4KLy8vCi8vLyAjIyMgSW1wbGVtZW50aW5nIEV4dGVuc2lvbnMKLy8vCi8vLyBGb3IgdmFyaW91cyByZWFzb25zLCBzb21lIERhcnQgbGFuZ3VhZ2UgaW1wbGVtZW50YXRpb25zIGhhdmUgdXNlZAovLy8gY3VzdG9tL3Vuc3BlY2lmaWVkIGV4dGVuc2lvbnMgdG8gdGhlIERhcnQgZ3JhbW1hci4gRXhhbXBsZXMgb2YgdGhpcwovLy8gaW5jbHVkZXMgZGlldCBwYXJzaW5nLCBwYXRjaCBmaWxlcywgYG5hdGl2ZWAga2V5d29yZCwgYW5kIGdlbmVyaWMKLy8vIGNvbW1lbnRzLiBUaGlzIGNsYXNzIGlzbid0IHN1cHBvc2VkIHRvIGltcGxlbWVudCBhbnkgb2YgdGhlc2UKLy8vIGZlYXR1cmVzLiBJbnN0ZWFkIGl0IHByb3ZpZGVzIGhvb2tzIGZvciB0aG9zZSBleHRlbnNpb25zIHRvIGJlIGltcGxlbWVudGVkCi8vLyBpbiBzdWJjbGFzc2VzIG9yIGxpc3RlbmVycy4gTGV0J3MgZXhhbWluZSBob3cgZGlldCBwYXJzaW5nIGFuZCBgbmF0aXZlYAovLy8ga2V5d29yZCBpcyBjdXJyZW50bHkgc3VwcG9ydGVkIGJ5IEZhc3RhLgovLy8KLy8vICMjIyMgTGVnYWN5IEltcGxlbWVudGF0aW9uIG9mIGBuYXRpdmVgIEtleXdvcmQKLy8vCi8vLyBUT0RPKGFoZSxkYW5ydWJlbCk6IFJlbW92ZSB0aGlzIHNlY3Rpb24uCi8vLwovLy8gQm90aCBkYXJ0MmpzIGFuZCB0aGUgRGFydCBWTSBoYXZlIHVzZWQgdGhlIGBuYXRpdmVgIGtleXdvcmQgdG8gbWFyayBtZXRob2RzCi8vLyB0aGF0IGNvdWxkbid0IGJlIGltcGxlbWVudGVkIGluIHRoZSBEYXJ0IGxhbmd1YWdlIGFuZCBuZWVkZWQgdG8gYmUKLy8vIGltcGxlbWVudGVkIGluIEphdmFTY3JpcHQgb3IgQysrLCByZXNwZWN0aXZlbHkuIEFuIGV4YW1wbGUgb2YgdGhlIHN5bnRheAovLy8gZXh0ZW5zaW9uIHVzZWQgYnkgdGhlIERhcnQgVk0gaXM6Ci8vLwovLy8gICAgIG5hdGl2ZUZ1bmN0aW9uKCkgbmF0aXZlICJOYXRpdmVGdW5jdGlvbiI7Ci8vLwovLy8gV2hlbiBhdHRlbXB0aW5nIHRvIHBhcnNlIHRoaXMgZnVuY3Rpb24sIHRoZSBwYXJzZXIgZXZlbnR1YWxseSBjYWxscwovLy8gW3BhcnNlRnVuY3Rpb25Cb2R5XS4gVGhpcyBtZXRob2Qgd2lsbCByZXBvcnQgYW4gdW5yZWNvdmVyYWJsZSBlcnJvciB0byB0aGUKLy8vIGxpc3RlbmVyIHdpdGggdGhlIGNvZGUgW2Zhc3RhLm1lc3NhZ2VFeHBlY3RlZEZ1bmN0aW9uQm9keV0uIFRoZSBsaXN0ZW5lciBjYW4KLy8vIHRoZW4gbG9vayBhdCB0aGUgZXJyb3IgY29kZSBhbmQgdGhlIHRva2VuIGFuZCB1c2UgdGhlIG1ldGhvZHMgaW4KLy8vIFtuYXRpdmVfc3VwcG9ydC5kYXJ0XShuYXRpdmVfc3VwcG9ydC5kYXJ0KSB0byBwYXJzZSB0aGUgbmF0aXZlIHN5bnRheC4KLy8vCi8vLyAjIyMjIEltcGxlbWVudGF0aW9uIG9mIERpZXQgUGFyc2luZwovLy8KLy8vIFdlIGNhbGwgaXQgX2RpZXRfIF9wYXJzaW5nXyB3aGVuIHRoZSBwYXJzZXIgc2tpcHMgcGFydHMgb2YgYSBmaWxlLiBCb3RoCi8vLyBkYXJ0MmpzIGFuZCB0aGUgRGFydCBWTSBoYXZlIGJlZW4gcmVseWluZyBvbiB0aGlzIGZyb20gZWFybHkgb24gYXMgaXQgYWxsb3dzCi8vLyB0aGVtIHRvIG1vcmUgcXVpY2tseSBjb21waWxlIHNtYWxsIHByb2dyYW1zIHRoYXQgdXNlIHNtYWxsIHBhcnRzIG9mIGJpZwovLy8gbGlicmFyaWVzLiBJdCdzIGFsc28gYmVjb21lIGFuIGludGVncmF0ZWQgcGFydCBvZiBob3cgRmFzdGEgYnVpbGRzIHVwCi8vLyBvdXRsaW5lcyBiZWZvcmUgc3RhcnRpbmcgdG8gcGFyc2UgbWV0aG9kIGJvZGllcy4KLy8vCi8vLyBXaGVuIGxvb2tpbmcgdGhyb3VnaCB0aGlzIHBhcnNlciwgeW91J2xsIGZpbmQgYSBudW1iZXIgb2YgdW51c2VkIG1ldGhvZHMKLy8vIHN0YXJ0aW5nIHdpdGggYHNraXBgLiBUaGVzZSBtZXRob2RzIGFyZSBvbmx5IHVzZWQgYnkgc3ViY2xhc3Nlcywgc3VjaCBhcwovLy8gW0NsYXNzTWVtYmVyUGFyc2VyXShjbGFzc19tZW1iZXJfcGFyc2VyLmRhcnQpIGFuZAovLy8gW1RvcExldmVsUGFyc2VyXSh0b3BfbGV2ZWxfcGFyc2VyLmRhcnQpLiBUaGVzZSBtZXRob2RzIHZpb2xhdGUgdGhlCi8vLyBwcmluY2lwbGUgYWJvdmUgYWJvdXQgZm9sbG93aW5nIHRoZSBzcGVjaWZpZWQgZ3JhbW1hciwgYW5kIG9yaWdpbmFsbHkgbGl2ZWQKLy8vIGluIHN1YmNsYXNzZXMuIEhvd2V2ZXIsIHdlIHJlYWxpemVkIHRoYXQgdGhlc2UgbWV0aG9kcyB3ZXJlIHNvIHdpZGVseSB1c2VkCi8vLyBhbmQgaGFyZCB0byBtYWludGFpbiBpbiBzdWJjbGFzc2VzLCB0aGF0IGl0IG1hZGUgc2Vuc2UgdG8gbW92ZSB0aGVtIGhlcmUuCi8vLwovLy8gIyMjIFNwZWNpZmljYXRpb24gYW5kIEVycm9yIFJlY292ZXJ5Ci8vLwovLy8gVG8gaW1wcm92ZSBlcnJvciByZWNvdmVyeSwgdGhlIHBhcnNlciB3aWxsIGluZm9ybSB0aGUgbGlzdGVuZXIgb2YKLy8vIHJlY292ZXJhYmxlIGVycm9ycyBhbmQgY29udGludWUgdG8gcGFyc2UuICBBbiBleGFtcGxlIG9mIGEgcmVjb3ZlcmFibGUKLy8vIGVycm9yIGlzOgovLy8KLy8vICAgICBFcnJvcjogQXN5bmNocm9ub3VzIGZvci1sb29wIGNhbiBvbmx5IGJlIHVzZWQgaW4gJ2FzeW5jJyBvciAnYXN5bmMqJy4uLgovLy8gICAgIG1haW4oKSB7IGF3YWl0IGZvciAodmFyIHggaW4gW10pIHt9IH0KLy8vICAgICAgICAgICAgICBeXl5eXgovLy8KLy8vICMjIyBMZWdhY3kgRXJyb3IgUmVjb3ZlcnkKLy8vCi8vLyBXaGF0J3MgZGVzY3JpYmVkIGJlbG93IHdpbGwgYmUgcGhhc2VkIG91dCBpbiBwcmVmZXJlbmNlIG9mIHRoZSBwYXJzZXIKLy8vIHJlcG9ydGluZyBhbmQgcmVjb3ZlcmluZyBmcm9tIHN5bnRheCBlcnJvcnMuIFRoZSBtb3RpdmF0aW9uIGZvciB0aGlzIGlzCi8vLyB0aGF0IHdlIGhhdmUgbXVsdGlwbGUgbGlzdGVuZXJzIHRoYXQgdXNlIHRoZSBwYXJzZXIsIGFuZCB0aGlzIHdpbGwgZW5zdXJlCi8vLyBjb25zaXN0ZW5jeS4KLy8vCi8vLyBGb3IgdW5yZWNvdmVyYWJsZSBlcnJvcnMsIHRoZSBwYXJzZXIgd2lsbCBhc2sgdGhlIGxpc3RlbmVyIGZvciBoZWxwIHRvCi8vLyByZWNvdmVyIGZyb20gdGhlIGVycm9yLiBXZSBoYXZlbid0IG1hZGUgbXVjaCBwcm9ncmVzcyBvbiB0aGVzZSBraW5kcyBvZgovLy8gZXJyb3JzLCBzbyBpbiBtb3N0IGNhc2VzLCB0aGUgcGFyc2VyIGFib3J0cyBieSBza2lwcGluZyB0byB0aGUgZW5kIG9mIGZpbGUuCi8vLwovLy8gSGlzdG9yaWNhbGx5LCB0aGlzIHBhcnNlciBoYXMgYmVlbiByYXRoZXIgbGF4IGluIHdoYXQgaXQgYWxsb3dzLCBhbmQKLy8vIGRlZmVycmVkIHRoZSBlbmZvcmNlbWVudCBvZiBzb21lIHN5bnRhY3RpY2FsIHJ1bGVzIHRvIHN1YnNlcXVlbnQgcGhhc2VzLiBJdAovLy8gZG9lc24ndCBtYXR0ZXIgaG93IHdlIGdvdCB0aGVyZSwgb25seSB0aGF0IHdlJ3ZlIGlkZW50aWZpZWQgdGhhdCBpdCdzCi8vLyBlYXNpZXIgaWYgdGhlIHBhcnNlciByZXBvcnRzIGFzIG1hbnkgZXJyb3JzIGl0IGNhbiwgYnV0IGluZm9ybXMgdGhlCi8vLyBsaXN0ZW5lciBpZiB0aGUgZXJyb3IgaXMgcmVjb3ZlcmFibGUgb3Igbm90LgpjbGFzcyBQYXJzZXIgewogIExpc3RlbmVyIGxpc3RlbmVyOwoKICBVcmkgZ2V0IHVyaSA9PiBsaXN0ZW5lci51cmk7CgogIGJvb2wgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gdHJ1ZTsKCiAgLy8vIFJlcHJlc2VudHMgcGFyc2VyIHN0YXRlOiB3aGF0IGFzeW5jaHJvbm91cyBzeW50YXggaXMgYWxsb3dlZCBpbiB0aGUKICAvLy8gZnVuY3Rpb24gYmVpbmcgY3VycmVudGx5IHBhcnNlZC4gSW4gcmFyZSBzaXR1YXRpb25zLCB0aGlzIGNhbiBiZSBzZXQgYnkKICAvLy8gZXh0ZXJuYWwgY2xpZW50cywgZm9yIGV4YW1wbGUsIHRvIHBhcnNlIGFuIGV4cHJlc3Npb24gb3V0c2lkZSBhIGZ1bmN0aW9uLgogIEFzeW5jTW9kaWZpZXIgYXN5bmNTdGF0ZSA9IEFzeW5jTW9kaWZpZXIuU3luYzsKCiAgLy8gVE9ETyhkYW5ydWJlbCk6IFRoZSBbbG9vcFN0YXRlXSBhbmQgYXNzb2NpYXRlZCBmdW5jdGlvbmFsaXR5IGluIHRoZQogIC8vIFtQYXJzZXJdIGR1cGxpY2F0ZXMgd29yayB0aGF0IHRoZSByZXNvbHZlciBuZWVkcyB0byBkbyB3aGVuIHJlc29sdmluZwogIC8vIGJyZWFrL2NvbnRpbnVlIHRhcmdldHMuIExvbmcgdGVybSwgdGhpcyBzdGF0ZSBhbmQgZnVuY3Rpb25hbGl0eSB3aWxsIGJlCiAgLy8gcmVtb3ZlZCBmcm9tIHRoZSBbUGFyc2VyXSBjbGFzcyBhbmQgdGhlIHJlc29sdmVyIHdpbGwgYmUgcmVzcG9uc2libGUKICAvLyBmb3IgZ2VuZXJhdGluZyBhbGwgYnJlYWsvY29udGludWUgZXJyb3IgbWVzc2FnZXMuCgogIC8vLyBSZXByZXNlbnRzIHBhcnNlciBzdGF0ZTogd2hldGhlciBwYXJzaW5nIG91dHNpZGUgYSBsb29wLAogIC8vLyBpbnNpZGUgYSBsb29wLCBvciBpbnNpZGUgYSBzd2l0Y2guIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlcgogIC8vLyBicmVhayBhbmQgY29udGludWUgc3RhdGVtZW50cyBhcmUgYWxsb3dlZC4KICBMb29wU3RhdGUgbG9vcFN0YXRlID0gTG9vcFN0YXRlLk91dHNpZGVMb29wOwoKICAvLy8gQSByZXdyaXRlciBmb3IgaW5zZXJ0aW5nIHN5bnRoZXRpYyB0b2tlbnMuCiAgLy8vIEFjY2VzcyB1c2luZyBbcmV3cml0ZXJdIGZvciBsYXp5IGluaXRpYWxpemF0aW9uLgogIFRva2VuU3RyZWFtUmV3cml0ZXIgY2FjaGVkUmV3cml0ZXI7CgogIFRva2VuU3RyZWFtUmV3cml0ZXIgZ2V0IHJld3JpdGVyIHsKICAgIGNhY2hlZFJld3JpdGVyID8/PSBuZXcgVG9rZW5TdHJlYW1SZXdyaXRlcigpOwogICAgcmV0dXJuIGNhY2hlZFJld3JpdGVyOwogIH0KCiAgUGFyc2VyKHRoaXMubGlzdGVuZXIpOwoKICBib29sIGdldCBpbkdlbmVyYXRvciB7CiAgICByZXR1cm4gYXN5bmNTdGF0ZSA9PSBBc3luY01vZGlmaWVyLkFzeW5jU3RhciB8fAogICAgICAgIGFzeW5jU3RhdGUgPT0gQXN5bmNNb2RpZmllci5TeW5jU3RhcjsKICB9CgogIGJvb2wgZ2V0IGluQXN5bmMgewogICAgcmV0dXJuIGFzeW5jU3RhdGUgPT0gQXN5bmNNb2RpZmllci5Bc3luYyB8fAogICAgICAgIGFzeW5jU3RhdGUgPT0gQXN5bmNNb2RpZmllci5Bc3luY1N0YXI7CiAgfQoKICBib29sIGdldCBpblBsYWluU3luYyA9PiBhc3luY1N0YXRlID09IEFzeW5jTW9kaWZpZXIuU3luYzsKCiAgYm9vbCBnZXQgaXNCcmVha0FsbG93ZWQgPT4gbG9vcFN0YXRlICE9IExvb3BTdGF0ZS5PdXRzaWRlTG9vcDsKCiAgYm9vbCBnZXQgaXNDb250aW51ZUFsbG93ZWQgPT4gbG9vcFN0YXRlID09IExvb3BTdGF0ZS5JbnNpZGVMb29wOwoKICBib29sIGdldCBpc0NvbnRpbnVlV2l0aExhYmVsQWxsb3dlZCA9PiBsb29wU3RhdGUgIT0gTG9vcFN0YXRlLk91dHNpZGVMb29wOwoKICAvLy8gUGFyc2UgYSBjb21waWxhdGlvbiB1bml0LgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBvbmx5IGludm9rZWQgZnJvbSBvdXRzaWRlIHRoZSBwYXJzZXIuIEFzIGEgcmVzdWx0LCB0aGlzCiAgLy8vIG1ldGhvZCB0YWtlcyB0aGUgbmV4dCB0b2tlbiB0byBiZSBjb25zdW1lZCByYXRoZXIgdGhhbiB0aGUgbGFzdCBjb25zdW1lZAogIC8vLyB0b2tlbiBhbmQgcmV0dXJucyB0aGUgdG9rZW4gYWZ0ZXIgdGhlIGxhc3QgY29uc3VtZWQgdG9rZW4gcmF0aGVyIHRoYW4gdGhlCiAgLy8vIGxhc3QgY29uc3VtZWQgdG9rZW4uCiAgLy8vCiAgLy8vIGBgYAogIC8vLyBsaWJyYXJ5RGVmaW5pdGlvbjoKICAvLy8gICBzY3JpcHRUYWc/CiAgLy8vICAgbGlicmFyeU5hbWU/CiAgLy8vICAgaW1wb3J0T3JFeHBvcnQqCiAgLy8vICAgcGFydERpcmVjdGl2ZSoKICAvLy8gICB0b3BMZXZlbERlZmluaXRpb24qCiAgLy8vIDsKICAvLy8KICAvLy8gcGFydERlY2xhcmF0aW9uOgogIC8vLyAgIHBhcnRIZWFkZXIgdG9wTGV2ZWxEZWZpbml0aW9uKgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlVW5pdChUb2tlbiB0b2tlbikgewogICAgLy8gU2tpcCBvdmVyIGVycm9yIHRva2VucyBhbmQgcmVwb3J0IHRoZW0gYXQgdGhlIGVuZAogICAgLy8gc28gdGhhdCB0aGUgcGFyc2VyIGhhcyB0aGUgY2hhbmNlIHRvIGFkanVzdCB0aGUgZXJyb3IgbG9jYXRpb24uCiAgICBUb2tlbiBlcnJvclRva2VuID0gdG9rZW47CiAgICB0b2tlbiA9IHNraXBFcnJvclRva2VucyhlcnJvclRva2VuKTsKCiAgICBsaXN0ZW5lci5iZWdpbkNvbXBpbGF0aW9uVW5pdCh0b2tlbik7CiAgICBpbnQgY291bnQgPSAwOwogICAgRGlyZWN0aXZlQ29udGV4dCBkaXJlY3RpdmVTdGF0ZSA9IG5ldyBEaXJlY3RpdmVDb250ZXh0KCk7CiAgICB0b2tlbiA9IHN5bnRoZXRpY1ByZXZpb3VzVG9rZW4odG9rZW4pOwogICAgaWYgKGlkZW50aWNhbCh0b2tlbi5uZXh0LnR5cGUsIFRva2VuVHlwZS5TQ1JJUFRfVEFHKSkgewogICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tTY3JpcHRUYWcodGhpcywgdG9rZW4ubmV4dCk7CiAgICAgIHRva2VuID0gcGFyc2VTY3JpcHQodG9rZW4pOwogICAgfQogICAgd2hpbGUgKCF0b2tlbi5uZXh0LmlzRW9mKSB7CiAgICAgIGZpbmFsIFRva2VuIHN0YXJ0ID0gdG9rZW4ubmV4dDsKICAgICAgdG9rZW4gPSBwYXJzZVRvcExldmVsRGVjbGFyYXRpb25JbXBsKHRva2VuLCBkaXJlY3RpdmVTdGF0ZSk7CiAgICAgIGxpc3RlbmVyLmVuZFRvcExldmVsRGVjbGFyYXRpb24odG9rZW4ubmV4dCk7CiAgICAgIGNvdW50Kys7CiAgICAgIGlmIChzdGFydCA9PSB0b2tlbi5uZXh0KSB7CiAgICAgICAgLy8gUmVjb3Zlcnk6CiAgICAgICAgLy8gSWYgcHJvZ3Jlc3MgaGFzIG5vdCBiZWVuIG1hZGUgcmVhY2hpbmcgdGhlIGVuZCBvZiB0aGUgdG9rZW4gc3RyZWFtLAogICAgICAgIC8vIHRoZW4gcmVwb3J0IGFuIGVycm9yIGFuZCBza2lwIHRoZSBjdXJyZW50IHRva2VuLgogICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgICBsaXN0ZW5lci5iZWdpbk1ldGFkYXRhU3Rhcih0b2tlbik7CiAgICAgICAgbGlzdGVuZXIuZW5kTWV0YWRhdGFTdGFyKDApOwogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICAgIHRva2VuLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkRGVjbGFyYXRpb24pOwogICAgICAgIGxpc3RlbmVyLmhhbmRsZUludmFsaWRUb3BMZXZlbERlY2xhcmF0aW9uKHRva2VuKTsKICAgICAgICBsaXN0ZW5lci5lbmRUb3BMZXZlbERlY2xhcmF0aW9uKHRva2VuLm5leHQpOwogICAgICAgIGNvdW50Kys7CiAgICAgIH0KICAgIH0KICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIHJlcG9ydEFsbEVycm9yVG9rZW5zKGVycm9yVG9rZW4pOwogICAgbGlzdGVuZXIuZW5kQ29tcGlsYXRpb25Vbml0KGNvdW50LCB0b2tlbik7CiAgICAvLyBDbGVhciBmaWVsZHMgdGhhdCBjb3VsZCBsZWFkIHRvIG1lbW9yeSBsZWFrLgogICAgY2FjaGVkUmV3cml0ZXIgPSBudWxsOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFRoaXMgbWV0aG9kIGV4aXN0cyBmb3IgYW5hbHl6ZXIgY29tcGF0aWJpbGl0eSBvbmx5CiAgLy8vIGFuZCB3aWxsIGJlIHJlbW92ZWQgb25jZSBhbmFseXplci9mYXN0YSBpbnRlZ3JhdGlvbiBpcyBjb21wbGV0ZS4KICAvLy8KICAvLy8gU2ltaWxhciB0byBbcGFyc2VVbml0XSwgdGhpcyBtZXRob2QgcGFyc2VzIGEgY29tcGlsYXRpb24gdW5pdCwKICAvLy8gYnV0IHN0b3BzIHdoZW4gaXQgcmVhY2hlcyB0aGUgZmlyc3QgZGVjbGFyYXRpb24gb3IgRU9GLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBvbmx5IGludm9rZWQgZnJvbSBvdXRzaWRlIHRoZSBwYXJzZXIuIEFzIGEgcmVzdWx0LCB0aGlzCiAgLy8vIG1ldGhvZCB0YWtlcyB0aGUgbmV4dCB0b2tlbiB0byBiZSBjb25zdW1lZCByYXRoZXIgdGhhbiB0aGUgbGFzdCBjb25zdW1lZAogIC8vLyB0b2tlbiBhbmQgcmV0dXJucyB0aGUgdG9rZW4gYWZ0ZXIgdGhlIGxhc3QgY29uc3VtZWQgdG9rZW4gcmF0aGVyIHRoYW4gdGhlCiAgLy8vIGxhc3QgY29uc3VtZWQgdG9rZW4uCiAgVG9rZW4gcGFyc2VEaXJlY3RpdmVzKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lci5iZWdpbkNvbXBpbGF0aW9uVW5pdCh0b2tlbik7CiAgICBpbnQgY291bnQgPSAwOwogICAgRGlyZWN0aXZlQ29udGV4dCBkaXJlY3RpdmVTdGF0ZSA9IG5ldyBEaXJlY3RpdmVDb250ZXh0KCk7CiAgICB0b2tlbiA9IHN5bnRoZXRpY1ByZXZpb3VzVG9rZW4odG9rZW4pOwogICAgd2hpbGUgKCF0b2tlbi5uZXh0LmlzRW9mKSB7CiAgICAgIGZpbmFsIFRva2VuIHN0YXJ0ID0gdG9rZW4ubmV4dDsKICAgICAgZmluYWwgU3RyaW5nIG5leHRWYWx1ZSA9IHN0YXJ0Lm5leHQuc3RyaW5nVmFsdWU7CgogICAgICAvLyBJZiBhIGJ1aWx0LWluIGtleXdvcmQgaXMgYmVpbmcgdXNlZCBhcyBmdW5jdGlvbiBuYW1lLCB0aGVuIHN0b3AuCiAgICAgIGlmIChpZGVudGljYWwobmV4dFZhbHVlLCAnLicpIHx8CiAgICAgICAgICBpZGVudGljYWwobmV4dFZhbHVlLCAnPCcpIHx8CiAgICAgICAgICBpZGVudGljYWwobmV4dFZhbHVlLCAnKCcpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgIGlmIChpZGVudGljYWwodG9rZW4ubmV4dC50eXBlLCBUb2tlblR5cGUuU0NSSVBUX1RBRykpIHsKICAgICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tTY3JpcHRUYWcodGhpcywgdG9rZW4ubmV4dCk7CiAgICAgICAgdG9rZW4gPSBwYXJzZVNjcmlwdCh0b2tlbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG9rZW4gPSBwYXJzZU1ldGFkYXRhU3Rhcih0b2tlbik7CiAgICAgICAgVG9rZW4ga2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICAgICAgZmluYWwgU3RyaW5nIHZhbHVlID0ga2V5d29yZC5zdHJpbmdWYWx1ZTsKICAgICAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnaW1wb3J0JykpIHsKICAgICAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja0ltcG9ydCh0aGlzLCBrZXl3b3JkKTsKICAgICAgICAgIHRva2VuID0gcGFyc2VJbXBvcnQoa2V5d29yZCk7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdleHBvcnQnKSkgewogICAgICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrRXhwb3J0KHRoaXMsIGtleXdvcmQpOwogICAgICAgICAgdG9rZW4gPSBwYXJzZUV4cG9ydChrZXl3b3JkKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2xpYnJhcnknKSkgewogICAgICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrTGlicmFyeSh0aGlzLCBrZXl3b3JkKTsKICAgICAgICAgIHRva2VuID0gcGFyc2VMaWJyYXJ5TmFtZShrZXl3b3JkKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ3BhcnQnKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZVBhcnRPclBhcnRPZihrZXl3b3JkLCBkaXJlY3RpdmVTdGF0ZSk7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICc7JykpIHsKICAgICAgICAgIHRva2VuID0gc3RhcnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZURpcmVjdGl2ZXNPbmx5KCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGlzdGVuZXIuZW5kVG9wTGV2ZWxEZWNsYXJhdGlvbih0b2tlbi5uZXh0KTsKICAgIH0KICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGxpc3RlbmVyLmVuZENvbXBpbGF0aW9uVW5pdChjb3VudCwgdG9rZW4pOwogICAgLy8gQ2xlYXIgZmllbGRzIHRoYXQgY291bGQgbGVhZCB0byBtZW1vcnkgbGVhay4KICAgIGNhY2hlZFJld3JpdGVyID0gbnVsbDsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBQYXJzZSBhIHRvcC1sZXZlbCBkZWNsYXJhdGlvbi4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgaXMgb25seSBpbnZva2VkIGZyb20gb3V0c2lkZSB0aGUgcGFyc2VyLiBBcyBhIHJlc3VsdCwgdGhpcwogIC8vLyBtZXRob2QgdGFrZXMgdGhlIG5leHQgdG9rZW4gdG8gYmUgY29uc3VtZWQgcmF0aGVyIHRoYW4gdGhlIGxhc3QgY29uc3VtZWQKICAvLy8gdG9rZW4gYW5kIHJldHVybnMgdGhlIHRva2VuIGFmdGVyIHRoZSBsYXN0IGNvbnN1bWVkIHRva2VuIHJhdGhlciB0aGFuIHRoZQogIC8vLyBsYXN0IGNvbnN1bWVkIHRva2VuLgogIFRva2VuIHBhcnNlVG9wTGV2ZWxEZWNsYXJhdGlvbihUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPQogICAgICAgIHBhcnNlVG9wTGV2ZWxEZWNsYXJhdGlvbkltcGwoc3ludGhldGljUHJldmlvdXNUb2tlbih0b2tlbiksIG51bGwpLm5leHQ7CiAgICBsaXN0ZW5lci5lbmRUb3BMZXZlbERlY2xhcmF0aW9uKHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gdG9wTGV2ZWxEZWZpbml0aW9uOgogIC8vLyAgIGNsYXNzRGVmaW5pdGlvbiB8CiAgLy8vICAgZW51bVR5cGUgfAogIC8vLyAgIHR5cGVBbGlhcyB8CiAgLy8vICAgJ2V4dGVybmFsJz8gZnVuY3Rpb25TaWduYXR1cmUgJzsnIHwKICAvLy8gICAnZXh0ZXJuYWwnPyBnZXR0ZXJTaWduYXR1cmUgJzsnIHwKICAvLy8gICAnZXh0ZXJuYWwnJz8gc2V0dGVyU2lnbmF0dXJlICc7JyB8CiAgLy8vICAgZnVuY3Rpb25TaWduYXR1cmUgZnVuY3Rpb25Cb2R5IHwKICAvLy8gICByZXR1cm5UeXBlPyAnZ2V0JyBpZGVudGlmaWVyIGZ1bmN0aW9uQm9keSB8CiAgLy8vICAgcmV0dXJuVHlwZT8gJ3NldCcgaWRlbnRpZmllciBmb3JtYWxQYXJhbWV0ZXJMaXN0IGZ1bmN0aW9uQm9keSB8CiAgLy8vICAgKCdmaW5hbCcgfCAnY29uc3QnKSB0eXBlPyBzdGF0aWNGaW5hbERlY2xhcmF0aW9uTGlzdCAnOycgfAogIC8vLyAgIHZhcmlhYmxlRGVjbGFyYXRpb24gJzsnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VUb3BMZXZlbERlY2xhcmF0aW9uSW1wbCgKICAgICAgVG9rZW4gdG9rZW4sIERpcmVjdGl2ZUNvbnRleHQgZGlyZWN0aXZlU3RhdGUpIHsKICAgIHRva2VuID0gcGFyc2VNZXRhZGF0YVN0YXIodG9rZW4pOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAobmV4dC5pc1RvcExldmVsS2V5d29yZCkgewogICAgICByZXR1cm4gcGFyc2VUb3BMZXZlbEtleXdvcmREZWNsYXJhdGlvbih0b2tlbiwgbmV4dCwgZGlyZWN0aXZlU3RhdGUpOwogICAgfQogICAgVG9rZW4gc3RhcnQgPSB0b2tlbjsKICAgIC8vIFNraXAgbW9kaWZpZXJzIHRvIGZpbmQgYSB0b3AgbGV2ZWwga2V5d29yZCBvciBpZGVudGlmaWVyCiAgICBpZiAobmV4dC5pc01vZGlmaWVyKSB7CiAgICAgIGlmIChvcHRpb25hbCgndmFyJywgbmV4dCkgfHwKICAgICAgICAgIG9wdGlvbmFsKCdsYXRlJywgbmV4dCkgfHwKICAgICAgICAgICgob3B0aW9uYWwoJ2NvbnN0JywgbmV4dCkgfHwgb3B0aW9uYWwoJ2ZpbmFsJywgbmV4dCkpICYmCiAgICAgICAgICAgICAgLy8gSWdub3JlIGBjb25zdCBjbGFzc2AgYW5kIGBmaW5hbCBjbGFzc2Agc28gdGhhdCBpdCBpcyByZXBvcnRlZAogICAgICAgICAgICAgIC8vIGJlbG93IGFzIGFuIGludmFsaWQgbW9kaWZpZXIgb24gYSBjbGFzcy4KICAgICAgICAgICAgICAhb3B0aW9uYWwoJ2NsYXNzJywgbmV4dC5uZXh0KSkpIHsKICAgICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tEZWNsYXJhdGlvbigpOwogICAgICAgIHJldHVybiBwYXJzZVRvcExldmVsTWVtYmVySW1wbCh0b2tlbik7CiAgICAgIH0KICAgICAgd2hpbGUgKHRva2VuLm5leHQuaXNNb2RpZmllcikgewogICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgfQogICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAobmV4dC5pc1RvcExldmVsS2V5d29yZCkgewogICAgICByZXR1cm4gcGFyc2VUb3BMZXZlbEtleXdvcmREZWNsYXJhdGlvbihzdGFydCwgbmV4dCwgZGlyZWN0aXZlU3RhdGUpOwogICAgfSBlbHNlIGlmIChuZXh0LmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogaW1wcm92ZSBwYXJzZVRvcExldmVsTWVtYmVyCiAgICAgIC8vIHNvIHRoYXQgd2UgZG9uJ3QgcGFyc2UgbW9kaWZpZXJzIHR3aWNlLgogICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tEZWNsYXJhdGlvbigpOwogICAgICByZXR1cm4gcGFyc2VUb3BMZXZlbE1lbWJlckltcGwoc3RhcnQpOwogICAgfSBlbHNlIGlmIChzdGFydC5uZXh0ICE9IG5leHQpIHsKICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrRGVjbGFyYXRpb24oKTsKICAgICAgLy8gSGFuZGxlIHRoZSBlZGdlIGNhc2Ugd2hlcmUgYSBtb2RpZmllciBpcyBiZWluZyB1c2VkIGFzIGFuIGlkZW50aWZpZXIKICAgICAgcmV0dXJuIHBhcnNlVG9wTGV2ZWxNZW1iZXJJbXBsKHN0YXJ0KTsKICAgIH0KICAgIC8vIFJlY292ZXJ5CiAgICBpZiAobmV4dC5pc09wZXJhdG9yICYmIG9wdGlvbmFsKCcoJywgbmV4dC5uZXh0KSkgewogICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgYSB0b3AgbGV2ZWwgb3BlcmF0b3IgZGVjbGFyYXRpb24sIHdoaWNoIGlzIGludmFsaWQuCiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZVRvcExldmVsT3BlcmF0b3IpOwogICAgICAvLyBJbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllcgogICAgICAvLyBhbmQgY29udGludWUgcGFyc2luZyBhcyBhIHRvcCBsZXZlbCBmdW5jdGlvbi4KICAgICAgcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcigKICAgICAgICAgIG5leHQsICcjc3ludGhldGljX2Z1bmN0aW9uXyR7bmV4dC5jaGFyT2Zmc2V0fScpOwogICAgICByZXR1cm4gcGFyc2VUb3BMZXZlbE1lbWJlckltcGwobmV4dCk7CiAgICB9CiAgICAvLyBJZ25vcmUgYW55IHByZWNlZGluZyBtb2RpZmllcnMgYW5kIGp1c3QgcmVwb3J0IHRoZSB1bmV4cGVjdGVkIHRva2VuCiAgICBsaXN0ZW5lci5iZWdpblRvcExldmVsTWVtYmVyKG5leHQpOwogICAgcmV0dXJuIHBhcnNlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb24odG9rZW4pOwogIH0KCiAgLy8vIFBhcnNlIHRoZSBtb2RpZmllcnMgYmVmb3JlIHRoZSBgY2xhc3NgIGtleXdvcmQuCiAgLy8vIFJldHVybiB0aGUgZmlyc3QgYGFic3RyYWN0YCBtb2RpZmllciBvciBgbnVsbGAgaWYgbm90IGZvdW5kLgogIFRva2VuIHBhcnNlQ2xhc3NEZWNsYXJhdGlvbk1vZGlmaWVycyhUb2tlbiBzdGFydCwgVG9rZW4ga2V5d29yZCkgewogICAgVG9rZW4gbW9kaWZpZXIgPSBzdGFydC5uZXh0OwogICAgd2hpbGUgKG1vZGlmaWVyICE9IGtleXdvcmQpIHsKICAgICAgaWYgKG9wdGlvbmFsKCdhYnN0cmFjdCcsIG1vZGlmaWVyKSkgewogICAgICAgIHBhcnNlVG9wTGV2ZWxLZXl3b3JkTW9kaWZpZXJzKG1vZGlmaWVyLCBrZXl3b3JkKTsKICAgICAgICByZXR1cm4gbW9kaWZpZXI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICByZXBvcnRUb3BMZXZlbE1vZGlmaWVyRXJyb3IobW9kaWZpZXIsIGtleXdvcmQpOwogICAgICB9CiAgICAgIG1vZGlmaWVyID0gbW9kaWZpZXIubmV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIFJlcG9ydCBlcnJvcnMgb24gYW55IG1vZGlmaWVycyBiZWZvcmUgdGhlIHNwZWNpZmllZCBrZXl3b3JkLgogIHZvaWQgcGFyc2VUb3BMZXZlbEtleXdvcmRNb2RpZmllcnMoVG9rZW4gc3RhcnQsIFRva2VuIGtleXdvcmQpIHsKICAgIFRva2VuIG1vZGlmaWVyID0gc3RhcnQubmV4dDsKICAgIHdoaWxlIChtb2RpZmllciAhPSBrZXl3b3JkKSB7CiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIHJlcG9ydFRvcExldmVsTW9kaWZpZXJFcnJvcihtb2RpZmllciwga2V5d29yZCk7CiAgICAgIG1vZGlmaWVyID0gbW9kaWZpZXIubmV4dDsKICAgIH0KICB9CgogIC8vIFJlcG9ydCBhbiBlcnJvciBmb3IgdGhlIGdpdmVuIG1vZGlmaWVyIHByZWNlZGluZyBhIHRvcCBsZXZlbCBrZXl3b3JkCiAgLy8gc3VjaCBhcyBgaW1wb3J0YCBvciBgY2xhc3NgLgogIHZvaWQgcmVwb3J0VG9wTGV2ZWxNb2RpZmllckVycm9yKFRva2VuIG1vZGlmaWVyLCBUb2tlbiBhZnRlck1vZGlmaWVycykgewogICAgaWYgKG9wdGlvbmFsKCdjb25zdCcsIG1vZGlmaWVyKSAmJiBvcHRpb25hbCgnY2xhc3MnLCBhZnRlck1vZGlmaWVycykpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihtb2RpZmllciwgZmFzdGEubWVzc2FnZUNvbnN0Q2xhc3MpOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnZXh0ZXJuYWwnLCBtb2RpZmllcikpIHsKICAgICAgaWYgKG9wdGlvbmFsKCdjbGFzcycsIGFmdGVyTW9kaWZpZXJzKSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobW9kaWZpZXIsIGZhc3RhLm1lc3NhZ2VFeHRlcm5hbENsYXNzKTsKICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgnZW51bScsIGFmdGVyTW9kaWZpZXJzKSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobW9kaWZpZXIsIGZhc3RhLm1lc3NhZ2VFeHRlcm5hbEVudW0pOwogICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCd0eXBlZGVmJywgYWZ0ZXJNb2RpZmllcnMpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihtb2RpZmllciwgZmFzdGEubWVzc2FnZUV4dGVybmFsVHlwZWRlZik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgbW9kaWZpZXIsIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIG1vZGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllcik7CiAgICB9CiAgfQoKICAvLy8gUGFyc2UgYW55IHRvcC1sZXZlbCBkZWNsYXJhdGlvbiB0aGF0IGJlZ2lucyB3aXRoIGEga2V5d29yZC4KICAvLy8gW3N0YXJ0XSBpcyB0aGUgdG9rZW4gYmVmb3JlIGFueSBtb2RpZmllcnMgcHJlY2VkaW5nIFtrZXl3b3JkXS4KICBUb2tlbiBwYXJzZVRvcExldmVsS2V5d29yZERlY2xhcmF0aW9uKAogICAgICBUb2tlbiBzdGFydCwgVG9rZW4ga2V5d29yZCwgRGlyZWN0aXZlQ29udGV4dCBkaXJlY3RpdmVTdGF0ZSkgewogICAgYXNzZXJ0KGtleXdvcmQuaXNUb3BMZXZlbEtleXdvcmQpOwogICAgZmluYWwgU3RyaW5nIHZhbHVlID0ga2V5d29yZC5zdHJpbmdWYWx1ZTsKICAgIGlmIChpZGVudGljYWwodmFsdWUsICdjbGFzcycpKSB7CiAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja0RlY2xhcmF0aW9uKCk7CiAgICAgIFRva2VuIGFic3RyYWN0VG9rZW4gPSBwYXJzZUNsYXNzRGVjbGFyYXRpb25Nb2RpZmllcnMoc3RhcnQsIGtleXdvcmQpOwogICAgICByZXR1cm4gcGFyc2VDbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uKGFic3RyYWN0VG9rZW4sIGtleXdvcmQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdlbnVtJykpIHsKICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrRGVjbGFyYXRpb24oKTsKICAgICAgcGFyc2VUb3BMZXZlbEtleXdvcmRNb2RpZmllcnMoc3RhcnQsIGtleXdvcmQpOwogICAgICByZXR1cm4gcGFyc2VFbnVtKGtleXdvcmQpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVGhlIHJlbWFpbmluZyB0b3AgbGV2ZWwga2V5d29yZHMgYXJlIGJ1aWx0LWluIGtleXdvcmRzCiAgICAgIC8vIGFuZCBjYW4gYmUgdXNlZCBpbiBhIHRvcCBsZXZlbCBkZWNsYXJhdGlvbgogICAgICAvLyBhcyBhbiBpZGVudGlmaWVyIHN1Y2ggYXMgImFic3RyYWN0PFQ+KCkgPT4gMDsiCiAgICAgIC8vIG9yIGFzIGEgcHJlZml4IHN1Y2ggYXMgImFic3RyYWN0LkEgYigpID0+IDA7Ii4KICAgICAgU3RyaW5nIG5leHRWYWx1ZSA9IGtleXdvcmQubmV4dC5zdHJpbmdWYWx1ZTsKICAgICAgaWYgKGlkZW50aWNhbChuZXh0VmFsdWUsICcoJykgfHwgaWRlbnRpY2FsKG5leHRWYWx1ZSwgJy4nKSkgewogICAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja0RlY2xhcmF0aW9uKCk7CiAgICAgICAgcmV0dXJuIHBhcnNlVG9wTGV2ZWxNZW1iZXJJbXBsKHN0YXJ0KTsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwobmV4dFZhbHVlLCAnPCcpKSB7CiAgICAgICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2V4dGVuc2lvbicpKSB7CiAgICAgICAgICAvLyBUaGUgbmVhbWUgaW4gYW4gZXh0ZW5zaW9uIGRlY2xhcmF0aW9uIGlzIG9wdGlvbmFsOgogICAgICAgICAgLy8gYGV4dGVuc2lvbjxUPiBvbiAuLi5gCiAgICAgICAgICBUb2tlbiBlbmRHcm91cCA9IGtleXdvcmQubmV4dC5lbmRHcm91cDsKICAgICAgICAgIGlmIChlbmRHcm91cCAhPSBudWxsICYmIG9wdGlvbmFsKCdvbicsIGVuZEdyb3VwLm5leHQpKSB7CiAgICAgICAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja0RlY2xhcmF0aW9uKCk7CiAgICAgICAgICAgIHJldHVybiBwYXJzZUV4dGVuc2lvbihrZXl3b3JkKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrRGVjbGFyYXRpb24oKTsKICAgICAgICByZXR1cm4gcGFyc2VUb3BMZXZlbE1lbWJlckltcGwoc3RhcnQpOwogICAgICB9IGVsc2UgewogICAgICAgIHBhcnNlVG9wTGV2ZWxLZXl3b3JkTW9kaWZpZXJzKHN0YXJ0LCBrZXl3b3JkKTsKICAgICAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnaW1wb3J0JykpIHsKICAgICAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja0ltcG9ydCh0aGlzLCBrZXl3b3JkKTsKICAgICAgICAgIHJldHVybiBwYXJzZUltcG9ydChrZXl3b3JkKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2V4cG9ydCcpKSB7CiAgICAgICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tFeHBvcnQodGhpcywga2V5d29yZCk7CiAgICAgICAgICByZXR1cm4gcGFyc2VFeHBvcnQoa2V5d29yZCk7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICd0eXBlZGVmJykpIHsKICAgICAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja0RlY2xhcmF0aW9uKCk7CiAgICAgICAgICByZXR1cm4gcGFyc2VUeXBlZGVmKGtleXdvcmQpOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnbWl4aW4nKSkgewogICAgICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrRGVjbGFyYXRpb24oKTsKICAgICAgICAgIHJldHVybiBwYXJzZU1peGluKGtleXdvcmQpOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnZXh0ZW5zaW9uJykpIHsKICAgICAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja0RlY2xhcmF0aW9uKCk7CiAgICAgICAgICByZXR1cm4gcGFyc2VFeHRlbnNpb24oa2V5d29yZCk7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdwYXJ0JykpIHsKICAgICAgICAgIHJldHVybiBwYXJzZVBhcnRPclBhcnRPZihrZXl3b3JkLCBkaXJlY3RpdmVTdGF0ZSk7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdsaWJyYXJ5JykpIHsKICAgICAgICAgIGRpcmVjdGl2ZVN0YXRlPy5jaGVja0xpYnJhcnkodGhpcywga2V5d29yZCk7CiAgICAgICAgICByZXR1cm4gcGFyc2VMaWJyYXJ5TmFtZShrZXl3b3JkKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICB0aHJvdyAiSW50ZXJuYWwgZXJyb3I6IFVuaGFuZGxlZCB0b3AgbGV2ZWwga2V5d29yZCAnJHZhbHVlJy4iOwogIH0KCiAgLy8vIGBgYAogIC8vLyBsaWJyYXJ5RGlyZWN0aXZlOgogIC8vLyAgICdsaWJyYXJ5JyBxdWFsaWZpZWQgJzsnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VMaWJyYXJ5TmFtZShUb2tlbiBsaWJyYXJ5S2V5d29yZCkgewogICAgYXNzZXJ0KG9wdGlvbmFsKCdsaWJyYXJ5JywgbGlicmFyeUtleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luTGlicmFyeU5hbWUobGlicmFyeUtleXdvcmQpOwogICAgVG9rZW4gdG9rZW4gPSBwYXJzZVF1YWxpZmllZChsaWJyYXJ5S2V5d29yZCwgSWRlbnRpZmllckNvbnRleHQubGlicmFyeU5hbWUsCiAgICAgICAgSWRlbnRpZmllckNvbnRleHQubGlicmFyeU5hbWVDb250aW51YXRpb24pOwogICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuZW5kTGlicmFyeU5hbWUobGlicmFyeUtleXdvcmQsIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gaW1wb3J0UHJlZml4OgogIC8vLyAgICdkZWZlcnJlZCc/ICdhcycgaWRlbnRpZmllcgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlSW1wb3J0UHJlZml4T3B0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnZGVmZXJyZWQnLCBuZXh0KSAmJiBvcHRpb25hbCgnYXMnLCBuZXh0Lm5leHQpKSB7CiAgICAgIFRva2VuIGRlZmVycmVkVG9rZW4gPSBuZXh0OwogICAgICBUb2tlbiBhc0tleXdvcmQgPSBuZXh0Lm5leHQ7CiAgICAgIHRva2VuID0gZW5zdXJlSWRlbnRpZmllcigKICAgICAgICAgIGFzS2V5d29yZCwgSWRlbnRpZmllckNvbnRleHQuaW1wb3J0UHJlZml4RGVjbGFyYXRpb24pOwogICAgICBsaXN0ZW5lci5oYW5kbGVJbXBvcnRQcmVmaXgoZGVmZXJyZWRUb2tlbiwgYXNLZXl3b3JkKTsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2FzJywgbmV4dCkpIHsKICAgICAgVG9rZW4gYXNLZXl3b3JkID0gbmV4dDsKICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKG5leHQsIElkZW50aWZpZXJDb250ZXh0LmltcG9ydFByZWZpeERlY2xhcmF0aW9uKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlSW1wb3J0UHJlZml4KG51bGwsIGFzS2V5d29yZCk7CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lci5oYW5kbGVJbXBvcnRQcmVmaXgobnVsbCwgbnVsbCk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGltcG9ydERpcmVjdGl2ZToKICAvLy8gICAnaW1wb3J0JyB1cmkgKCdpZicgJygnIHRlc3QgJyknIHVyaSkqIGltcG9ydFByZWZpeD8gY29tYmluYXRvciogJzsnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VJbXBvcnQoVG9rZW4gaW1wb3J0S2V5d29yZCkgewogICAgYXNzZXJ0KG9wdGlvbmFsKCdpbXBvcnQnLCBpbXBvcnRLZXl3b3JkKSk7CiAgICBsaXN0ZW5lci5iZWdpbkltcG9ydChpbXBvcnRLZXl3b3JkKTsKICAgIFRva2VuIHRva2VuID0gZW5zdXJlTGl0ZXJhbFN0cmluZyhpbXBvcnRLZXl3b3JkKTsKICAgIFRva2VuIHVyaSA9IHRva2VuOwogICAgdG9rZW4gPSBwYXJzZUNvbmRpdGlvbmFsVXJpU3Rhcih0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlSW1wb3J0UHJlZml4T3B0KHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VDb21iaW5hdG9yU3Rhcih0b2tlbikubmV4dDsKICAgIGlmIChvcHRpb25hbCgnOycsIHRva2VuKSkgewogICAgICBsaXN0ZW5lci5lbmRJbXBvcnQoaW1wb3J0S2V5d29yZCwgdG9rZW4pOwogICAgICByZXR1cm4gdG9rZW47CiAgICB9IGVsc2UgewogICAgICAvLyBSZWNvdmVyeQogICAgICBsaXN0ZW5lci5lbmRJbXBvcnQoaW1wb3J0S2V5d29yZCwgbnVsbCk7CiAgICAgIHJldHVybiBwYXJzZUltcG9ydFJlY292ZXJ5KHVyaSk7CiAgICB9CiAgfQoKICAvLy8gUmVjb3ZlciBnaXZlbiBvdXQtb2Ytb3JkZXIgY2xhdXNlcyBpbiBhbiBpbXBvcnQgZGlyZWN0aXZlIHdoZXJlIFt0b2tlbl0gaXMKICAvLy8gdGhlIGltcG9ydCBrZXl3b3JkLgogIFRva2VuIHBhcnNlSW1wb3J0UmVjb3ZlcnkoVG9rZW4gdG9rZW4pIHsKICAgIGZpbmFsIHByaW1hcnlMaXN0ZW5lciA9IGxpc3RlbmVyOwogICAgZmluYWwgcmVjb3ZlcnlMaXN0ZW5lciA9IG5ldyBJbXBvcnRSZWNvdmVyeUxpc3RlbmVyKCk7CgogICAgLy8gUmVwYXJzZSB0byBkZXRlcm1pbmUgd2hpY2ggY2xhdXNlcyBoYXZlIGFscmVhZHkgYmVlbiBwYXJzZWQKICAgIC8vIGJ1dCBpbnRlcmNlcHQgdGhlIGV2ZW50cyBzbyB0aGV5IGFyZSBub3Qgc2VudCB0byB0aGUgcHJpbWFyeSBsaXN0ZW5lcgogICAgbGlzdGVuZXIgPSByZWNvdmVyeUxpc3RlbmVyOwogICAgdG9rZW4gPSBwYXJzZUNvbmRpdGlvbmFsVXJpU3Rhcih0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlSW1wb3J0UHJlZml4T3B0KHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VDb21iaW5hdG9yU3Rhcih0b2tlbik7CgogICAgVG9rZW4gZmlyc3REZWZlcnJlZEtleXdvcmQgPSByZWNvdmVyeUxpc3RlbmVyLmRlZmVycmVkS2V5d29yZDsKICAgIGJvb2wgaGFzUHJlZml4ID0gcmVjb3ZlcnlMaXN0ZW5lci5hc0tleXdvcmQgIT0gbnVsbDsKICAgIGJvb2wgaGFzQ29tYmluYXRvciA9IHJlY292ZXJ5TGlzdGVuZXIuaGFzQ29tYmluYXRvcjsKCiAgICAvLyBVcGRhdGUgdGhlIHJlY292ZXJ5IGxpc3RlbmVyIHRvIGZvcndhcmQgc3Vic2VxdWVudCBldmVudHMKICAgIC8vIHRvIHRoZSBwcmltYXJ5IGxpc3RlbmVyCiAgICByZWNvdmVyeUxpc3RlbmVyLmxpc3RlbmVyID0gcHJpbWFyeUxpc3RlbmVyOwoKICAgIC8vIFBhcnNlIGFkZGl0aW9uYWwgb3V0LW9mLW9yZGVyIGNsYXVzZXMuCiAgICBUb2tlbiBzZW1pY29sb247CiAgICBkbyB7CiAgICAgIFRva2VuIHN0YXJ0ID0gdG9rZW4ubmV4dDsKCiAgICAgIC8vIENoZWNrIGZvciBleHRyYW5lb3VzIHRva2VuIGluIHRoZSBtaWRkbGUgb2YgYW4gaW1wb3J0IHN0YXRlbWVudC4KICAgICAgdG9rZW4gPSBza2lwVW5leHBlY3RlZFRva2VuT3B0KAogICAgICAgICAgdG9rZW4sIGNvbnN0IDxTdHJpbmc+WydpZicsICdkZWZlcnJlZCcsICdhcycsICdoaWRlJywgJ3Nob3cnLCAnOyddKTsKCiAgICAgIC8vIER1cmluZyByZWNvdmVyeSwgY2xhdXNlcyBhcmUgcGFyc2VkIGluIHRoZSBzYW1lIG9yZGVyCiAgICAgIC8vIGFuZCBnZW5lcmF0ZSB0aGUgc2FtZSBldmVudHMgYXMgaW4gdGhlIHBhcnNlSW1wb3J0IG1ldGhvZCBhYm92ZS4KICAgICAgcmVjb3ZlcnlMaXN0ZW5lci5jbGVhcigpOwogICAgICB0b2tlbiA9IHBhcnNlQ29uZGl0aW9uYWxVcmlTdGFyKHRva2VuKTsKICAgICAgaWYgKHJlY292ZXJ5TGlzdGVuZXIuaWZLZXl3b3JkICE9IG51bGwpIHsKICAgICAgICBpZiAoZmlyc3REZWZlcnJlZEtleXdvcmQgIT0gbnVsbCkgewogICAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IHJlcG9ydCBlcnJvciBpbmRpY2F0aW5nIGNvbmRpdGlvbmFsIHNob3VsZAogICAgICAgICAgLy8gYmUgbW92ZWQgYmVmb3JlIGRlZmVycmVkIGtleXdvcmQKICAgICAgICB9IGVsc2UgaWYgKGhhc1ByZWZpeCkgewogICAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IHJlcG9ydCBlcnJvciBpbmRpY2F0aW5nIGNvbmRpdGlvbmFsIHNob3VsZAogICAgICAgICAgLy8gYmUgbW92ZWQgYmVmb3JlIHByZWZpeCBjbGF1c2UKICAgICAgICB9IGVsc2UgaWYgKGhhc0NvbWJpbmF0b3IpIHsKICAgICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiByZXBvcnQgZXJyb3IgaW5kaWNhdGluZyBjb25kaXRpb25hbCBzaG91bGQKICAgICAgICAgIC8vIGJlIG1vdmVkIGJlZm9yZSBjb21iaW5hdG9ycwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKG9wdGlvbmFsKCdkZWZlcnJlZCcsIHRva2VuLm5leHQpICYmCiAgICAgICAgICAhb3B0aW9uYWwoJ2FzJywgdG9rZW4ubmV4dC5uZXh0KSkgewogICAgICAgIGxpc3RlbmVyLmhhbmRsZUltcG9ydFByZWZpeCh0b2tlbi5uZXh0LCBudWxsKTsKICAgICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG9rZW4gPSBwYXJzZUltcG9ydFByZWZpeE9wdCh0b2tlbik7CiAgICAgIH0KICAgICAgaWYgKHJlY292ZXJ5TGlzdGVuZXIuZGVmZXJyZWRLZXl3b3JkICE9IG51bGwpIHsKICAgICAgICBpZiAoZmlyc3REZWZlcnJlZEtleXdvcmQgIT0gbnVsbCkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICByZWNvdmVyeUxpc3RlbmVyLmRlZmVycmVkS2V5d29yZCwgZmFzdGEubWVzc2FnZUR1cGxpY2F0ZURlZmVycmVkKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGhhc1ByZWZpeCkgewogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHJlY292ZXJ5TGlzdGVuZXIuZGVmZXJyZWRLZXl3b3JkLAogICAgICAgICAgICAgICAgZmFzdGEubWVzc2FnZURlZmVycmVkQWZ0ZXJQcmVmaXgpOwogICAgICAgICAgfQogICAgICAgICAgZmlyc3REZWZlcnJlZEtleXdvcmQgPSByZWNvdmVyeUxpc3RlbmVyLmRlZmVycmVkS2V5d29yZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHJlY292ZXJ5TGlzdGVuZXIuYXNLZXl3b3JkICE9IG51bGwpIHsKICAgICAgICBpZiAoaGFzUHJlZml4KSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgIHJlY292ZXJ5TGlzdGVuZXIuYXNLZXl3b3JkLCBmYXN0YS5tZXNzYWdlRHVwbGljYXRlUHJlZml4KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGhhc0NvbWJpbmF0b3IpIHsKICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICAgIHJlY292ZXJ5TGlzdGVuZXIuYXNLZXl3b3JkLCBmYXN0YS5tZXNzYWdlUHJlZml4QWZ0ZXJDb21iaW5hdG9yKTsKICAgICAgICAgIH0KICAgICAgICAgIGhhc1ByZWZpeCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CgogICAgICB0b2tlbiA9IHBhcnNlQ29tYmluYXRvclN0YXIodG9rZW4pOwogICAgICBoYXNDb21iaW5hdG9yID0gaGFzQ29tYmluYXRvciB8fCByZWNvdmVyeUxpc3RlbmVyLmhhc0NvbWJpbmF0b3I7CgogICAgICBpZiAob3B0aW9uYWwoJzsnLCB0b2tlbi5uZXh0KSkgewogICAgICAgIHNlbWljb2xvbiA9IHRva2VuLm5leHQ7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHN0YXJ0LCB0b2tlbi5uZXh0KSkgewogICAgICAgIC8vIElmIG5vIGZvcndhcmQgcHJvZ3Jlc3Mgd2FzIG1hZGUsIGluc2VydCAnOycgc28gdGhhdCB3ZSBleGl0IGxvb3AuCiAgICAgICAgc2VtaWNvbG9uID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgICAgfQogICAgICBsaXN0ZW5lci5oYW5kbGVSZWNvdmVySW1wb3J0KHNlbWljb2xvbik7CiAgICB9IHdoaWxlIChzZW1pY29sb24gPT0gbnVsbCk7CgogICAgaWYgKGZpcnN0RGVmZXJyZWRLZXl3b3JkICE9IG51bGwgJiYgIWhhc1ByZWZpeCkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgZmlyc3REZWZlcnJlZEtleXdvcmQsIGZhc3RhLm1lc3NhZ2VNaXNzaW5nUHJlZml4SW5EZWZlcnJlZEltcG9ydCk7CiAgICB9CgogICAgcmV0dXJuIHNlbWljb2xvbjsKICB9CgogIC8vLyBgYGAKICAvLy8gY29uZGl0aW9uYWxVcmlzOgogIC8vLyAgIGNvbmRpdGlvbmFsVXJpKgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQ29uZGl0aW9uYWxVcmlTdGFyKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lci5iZWdpbkNvbmRpdGlvbmFsVXJpcyh0b2tlbi5uZXh0KTsKICAgIGludCBjb3VudCA9IDA7CiAgICB3aGlsZSAob3B0aW9uYWwoJ2lmJywgdG9rZW4ubmV4dCkpIHsKICAgICAgY291bnQrKzsKICAgICAgdG9rZW4gPSBwYXJzZUNvbmRpdGlvbmFsVXJpKHRva2VuKTsKICAgIH0KICAgIGxpc3RlbmVyLmVuZENvbmRpdGlvbmFsVXJpcyhjb3VudCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGNvbmRpdGlvbmFsVXJpOgogIC8vLyAgICdpZicgJygnIGRvdHRlZE5hbWUgKCc9PScgbGl0ZXJhbFN0cmluZyk/ICcpJyB1cmkKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUNvbmRpdGlvbmFsVXJpKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBpZktleXdvcmQgPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2lmJywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luQ29uZGl0aW9uYWxVcmkodG9rZW4pOwogICAgVG9rZW4gbGVmdFBhcmVuID0gdG9rZW4ubmV4dDsKICAgIGlmICghb3B0aW9uYWwoJygnLCBsZWZ0UGFyZW4pKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBsZWZ0UGFyZW4sIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnKCcpKTsKICAgICAgbGVmdFBhcmVuID0gcmV3cml0ZXIuaW5zZXJ0UGFyZW5zKHRva2VuLCB0cnVlKTsKICAgIH0KICAgIHRva2VuID0gcGFyc2VEb3R0ZWROYW1lKGxlZnRQYXJlbik7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIFRva2VuIGVxdWFsaXR5U2lnbjsKICAgIGlmIChvcHRpb25hbCgnPT0nLCBuZXh0KSkgewogICAgICBlcXVhbGl0eVNpZ24gPSBuZXh0OwogICAgICB0b2tlbiA9IGVuc3VyZUxpdGVyYWxTdHJpbmcobmV4dCk7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgfQogICAgaWYgKG5leHQgIT0gbGVmdFBhcmVuLmVuZEdyb3VwKSB7CiAgICAgIFRva2VuIGVuZEdyb3VwID0gbGVmdFBhcmVuLmVuZEdyb3VwOwogICAgICBpZiAoZW5kR3JvdXAuaXNTeW50aGV0aWMpIHsKICAgICAgICAvLyBUaGUgc2Nhbm5lciBkaWQgbm90IHBsYWNlIHRoZSBzeW50aGV0aWMgJyknIGNvcnJlY3RseSwgc28gbW92ZSBpdC4KICAgICAgICBuZXh0ID0gcmV3cml0ZXIubW92ZVN5bnRoZXRpYyh0b2tlbiwgZW5kR3JvdXApOwogICAgICB9IGVsc2UgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4obmV4dCwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgICAgIG5leHQgPSBlbmRHcm91cDsKICAgICAgfQogICAgfQogICAgdG9rZW4gPSBuZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCcpJywgdG9rZW4pKTsKCiAgICB0b2tlbiA9IGVuc3VyZUxpdGVyYWxTdHJpbmcodG9rZW4pOwogICAgbGlzdGVuZXIuZW5kQ29uZGl0aW9uYWxVcmkoaWZLZXl3b3JkLCBsZWZ0UGFyZW4sIGVxdWFsaXR5U2lnbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGRvdHRlZE5hbWU6CiAgLy8vICAgaWRlbnRpZmllciAoJy4nIGlkZW50aWZpZXIpKgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlRG90dGVkTmFtZShUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5kb3R0ZWROYW1lKTsKICAgIFRva2VuIGZpcnN0SWRlbnRpZmllciA9IHRva2VuOwogICAgaW50IGNvdW50ID0gMTsKICAgIHdoaWxlIChvcHRpb25hbCgnLicsIHRva2VuLm5leHQpKSB7CiAgICAgIHRva2VuID0gZW5zdXJlSWRlbnRpZmllcigKICAgICAgICAgIHRva2VuLm5leHQsIElkZW50aWZpZXJDb250ZXh0LmRvdHRlZE5hbWVDb250aW51YXRpb24pOwogICAgICBjb3VudCsrOwogICAgfQogICAgbGlzdGVuZXIuaGFuZGxlRG90dGVkTmFtZShjb3VudCwgZmlyc3RJZGVudGlmaWVyKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gZXhwb3J0RGlyZWN0aXZlOgogIC8vLyAgICdleHBvcnQnIHVyaSBjb25kaXRpb25hbC11cmlzKiBjb21iaW5hdG9yKiAnOycKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUV4cG9ydChUb2tlbiBleHBvcnRLZXl3b3JkKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2V4cG9ydCcsIGV4cG9ydEtleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luRXhwb3J0KGV4cG9ydEtleXdvcmQpOwogICAgVG9rZW4gdG9rZW4gPSBlbnN1cmVMaXRlcmFsU3RyaW5nKGV4cG9ydEtleXdvcmQpOwogICAgdG9rZW4gPSBwYXJzZUNvbmRpdGlvbmFsVXJpU3Rhcih0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlQ29tYmluYXRvclN0YXIodG9rZW4pOwogICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuZW5kRXhwb3J0KGV4cG9ydEtleXdvcmQsIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gY29tYmluYXRvcnM6CiAgLy8vICAgKGhpZGVDb21iaW5hdG9yIHwgc2hvd0NvbWJpbmF0b3IpKgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQ29tYmluYXRvclN0YXIoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgbGlzdGVuZXIuYmVnaW5Db21iaW5hdG9ycyhuZXh0KTsKICAgIGludCBjb3VudCA9IDA7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBTdHJpbmcgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwogICAgICBpZiAoaWRlbnRpY2FsKCdoaWRlJywgdmFsdWUpKSB7CiAgICAgICAgdG9rZW4gPSBwYXJzZUhpZGUodG9rZW4pOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgnc2hvdycsIHZhbHVlKSkgewogICAgICAgIHRva2VuID0gcGFyc2VTaG93KHRva2VuKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsaXN0ZW5lci5lbmRDb21iaW5hdG9ycyhjb3VudCk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGNvdW50Kys7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGhpZGVDb21iaW5hdG9yOgogIC8vLyAgICdoaWRlJyBpZGVudGlmaWVyTGlzdAogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlSGlkZShUb2tlbiB0b2tlbikgewogICAgVG9rZW4gaGlkZUtleXdvcmQgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdoaWRlJywgaGlkZUtleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luSGlkZShoaWRlS2V5d29yZCk7CiAgICB0b2tlbiA9IHBhcnNlSWRlbnRpZmllckxpc3QoaGlkZUtleXdvcmQpOwogICAgbGlzdGVuZXIuZW5kSGlkZShoaWRlS2V5d29yZCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHNob3dDb21iaW5hdG9yOgogIC8vLyAgICdzaG93JyBpZGVudGlmaWVyTGlzdAogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlU2hvdyhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gc2hvd0tleXdvcmQgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdzaG93Jywgc2hvd0tleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luU2hvdyhzaG93S2V5d29yZCk7CiAgICB0b2tlbiA9IHBhcnNlSWRlbnRpZmllckxpc3Qoc2hvd0tleXdvcmQpOwogICAgbGlzdGVuZXIuZW5kU2hvdyhzaG93S2V5d29yZCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGlkZW50aWZpZXJMaXN0OgogIC8vLyAgIGlkZW50aWZpZXIgKCcsJyBpZGVudGlmaWVyKSoKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUlkZW50aWZpZXJMaXN0KFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmNvbWJpbmF0b3IpOwogICAgaW50IGNvdW50ID0gMTsKICAgIHdoaWxlIChvcHRpb25hbCgnLCcsIHRva2VuLm5leHQpKSB7CiAgICAgIHRva2VuID0gZW5zdXJlSWRlbnRpZmllcih0b2tlbi5uZXh0LCBJZGVudGlmaWVyQ29udGV4dC5jb21iaW5hdG9yKTsKICAgICAgY291bnQrKzsKICAgIH0KICAgIGxpc3RlbmVyLmhhbmRsZUlkZW50aWZpZXJMaXN0KGNvdW50KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gdHlwZUxpc3Q6CiAgLy8vICAgdHlwZSAoJywnIHR5cGUpKgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlVHlwZUxpc3QoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyLmJlZ2luVHlwZUxpc3QodG9rZW4ubmV4dCk7CiAgICB0b2tlbiA9IGNvbXB1dGVUeXBlKHRva2VuLCB0cnVlKS5lbnN1cmVUeXBlT3JWb2lkKHRva2VuLCB0aGlzKTsKICAgIGludCBjb3VudCA9IDE7CiAgICB3aGlsZSAob3B0aW9uYWwoJywnLCB0b2tlbi5uZXh0KSkgewogICAgICB0b2tlbiA9IGNvbXB1dGVUeXBlKHRva2VuLm5leHQsIHRydWUpLmVuc3VyZVR5cGVPclZvaWQodG9rZW4ubmV4dCwgdGhpcyk7CiAgICAgIGNvdW50Kys7CiAgICB9CiAgICBsaXN0ZW5lci5lbmRUeXBlTGlzdChjb3VudCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVBhcnRPclBhcnRPZihUb2tlbiBwYXJ0S2V5d29yZCwgRGlyZWN0aXZlQ29udGV4dCBkaXJlY3RpdmVTdGF0ZSkgewogICAgYXNzZXJ0KG9wdGlvbmFsKCdwYXJ0JywgcGFydEtleXdvcmQpKTsKICAgIGlmIChvcHRpb25hbCgnb2YnLCBwYXJ0S2V5d29yZC5uZXh0KSkgewogICAgICBkaXJlY3RpdmVTdGF0ZT8uY2hlY2tQYXJ0T2YodGhpcywgcGFydEtleXdvcmQpOwogICAgICByZXR1cm4gcGFyc2VQYXJ0T2YocGFydEtleXdvcmQpOwogICAgfSBlbHNlIHsKICAgICAgZGlyZWN0aXZlU3RhdGU/LmNoZWNrUGFydCh0aGlzLCBwYXJ0S2V5d29yZCk7CiAgICAgIHJldHVybiBwYXJzZVBhcnQocGFydEtleXdvcmQpOwogICAgfQogIH0KCiAgLy8vIGBgYAogIC8vLyBwYXJ0RGlyZWN0aXZlOgogIC8vLyAgICdwYXJ0JyB1cmkgJzsnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VQYXJ0KFRva2VuIHBhcnRLZXl3b3JkKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3BhcnQnLCBwYXJ0S2V5d29yZCkpOwogICAgbGlzdGVuZXIuYmVnaW5QYXJ0KHBhcnRLZXl3b3JkKTsKICAgIFRva2VuIHRva2VuID0gZW5zdXJlTGl0ZXJhbFN0cmluZyhwYXJ0S2V5d29yZCk7CiAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRQYXJ0KHBhcnRLZXl3b3JkLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHBhcnRPZkRpcmVjdGl2ZToKICAvLy8gICAncGFydCcgJ29mJyAocXVhbGlmaWVkIHwgdXJpKSAnOycKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVBhcnRPZihUb2tlbiBwYXJ0S2V5d29yZCkgewogICAgVG9rZW4gb2ZLZXl3b3JkID0gcGFydEtleXdvcmQubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgncGFydCcsIHBhcnRLZXl3b3JkKSk7CiAgICBhc3NlcnQob3B0aW9uYWwoJ29mJywgb2ZLZXl3b3JkKSk7CiAgICBsaXN0ZW5lci5iZWdpblBhcnRPZihwYXJ0S2V5d29yZCk7CiAgICBib29sIGhhc05hbWUgPSBvZktleXdvcmQubmV4dC5pc0lkZW50aWZpZXI7CiAgICBUb2tlbiB0b2tlbjsKICAgIGlmIChoYXNOYW1lKSB7CiAgICAgIHRva2VuID0gcGFyc2VRdWFsaWZpZWQob2ZLZXl3b3JkLCBJZGVudGlmaWVyQ29udGV4dC5wYXJ0TmFtZSwKICAgICAgICAgIElkZW50aWZpZXJDb250ZXh0LnBhcnROYW1lQ29udGludWF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHRva2VuID0gZW5zdXJlTGl0ZXJhbFN0cmluZyhvZktleXdvcmQpOwogICAgfQogICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuZW5kUGFydE9mKHBhcnRLZXl3b3JkLCBvZktleXdvcmQsIHRva2VuLCBoYXNOYW1lKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gbWV0YWRhdGE6CiAgLy8vICAgYW5ub3RhdGlvbioKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZU1ldGFkYXRhU3RhcihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXIuYmVnaW5NZXRhZGF0YVN0YXIodG9rZW4ubmV4dCk7CiAgICBpbnQgY291bnQgPSAwOwogICAgd2hpbGUgKG9wdGlvbmFsKCdAJywgdG9rZW4ubmV4dCkpIHsKICAgICAgdG9rZW4gPSBwYXJzZU1ldGFkYXRhKHRva2VuKTsKICAgICAgY291bnQrKzsKICAgIH0KICAgIGxpc3RlbmVyLmVuZE1ldGFkYXRhU3Rhcihjb3VudCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGFubm90YXRpb246CiAgLy8vICAgJ0AnIHF1YWxpZmllZCAoJy4nIGlkZW50aWZpZXIpPyBhcmd1bWVudHM/CiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VNZXRhZGF0YShUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYXRUb2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ0AnLCBhdFRva2VuKSk7CiAgICBsaXN0ZW5lci5iZWdpbk1ldGFkYXRhKGF0VG9rZW4pOwogICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKGF0VG9rZW4sIElkZW50aWZpZXJDb250ZXh0Lm1ldGFkYXRhUmVmZXJlbmNlKTsKICAgIHRva2VuID0KICAgICAgICBwYXJzZVF1YWxpZmllZFJlc3RPcHQodG9rZW4sIElkZW50aWZpZXJDb250ZXh0Lm1ldGFkYXRhQ29udGludWF0aW9uKTsKICAgIGlmIChvcHRpb25hbCgiPCIsIHRva2VuLm5leHQpKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4ubmV4dCwgZmFzdGEubWVzc2FnZU1ldGFkYXRhVHlwZUFyZ3VtZW50cyk7CiAgICB9CiAgICB0b2tlbiA9IGNvbXB1dGVUeXBlUGFyYW1PckFyZyh0b2tlbikucGFyc2VBcmd1bWVudHModG9rZW4sIHRoaXMpOwogICAgVG9rZW4gcGVyaW9kID0gbnVsbDsKICAgIGlmIChvcHRpb25hbCgnLicsIHRva2VuLm5leHQpKSB7CiAgICAgIHBlcmlvZCA9IHRva2VuLm5leHQ7CiAgICAgIHRva2VuID0gZW5zdXJlSWRlbnRpZmllcigKICAgICAgICAgIHBlcmlvZCwgSWRlbnRpZmllckNvbnRleHQubWV0YWRhdGFDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMpOwogICAgfQogICAgdG9rZW4gPSBwYXJzZUFyZ3VtZW50c09wdCh0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRNZXRhZGF0YShhdFRva2VuLCBwZXJpb2QsIHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBzY3JpcHRUYWc6CiAgLy8vICAgJyMhJyAoy5xORVdMSU5FKSogTkVXTElORQogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlU2NyaXB0KFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpY2FsKHRva2VuLnR5cGUsIFRva2VuVHlwZS5TQ1JJUFRfVEFHKSk7CiAgICBsaXN0ZW5lci5oYW5kbGVTY3JpcHQodG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyB0eXBlQWxpYXM6CiAgLy8vICAgbWV0YWRhdGEgJ3R5cGVkZWYnIHR5cGVBbGlhc0JvZHkgfAogIC8vLyAgIG1ldGFkYXRhICd0eXBlZGVmJyBpZGVudGlmaWVyIHR5cGVQYXJhbWV0ZXJzPyAnPScgZnVuY3Rpb25UeXBlICc7JwogIC8vLyA7CiAgLy8vCiAgLy8vIGZ1bmN0aW9uVHlwZToKICAvLy8gICByZXR1cm5UeXBlPyAnRnVuY3Rpb24nIHR5cGVQYXJhbWV0ZXJzPyBwYXJhbWV0ZXJUeXBlTGlzdAogIC8vLwogIC8vLyB0eXBlQWxpYXNCb2R5OgogIC8vLyAgIGZ1bmN0aW9uVHlwZUFsaWFzCiAgLy8vIDsKICAvLy8KICAvLy8gZnVuY3Rpb25UeXBlQWxpYXM6CiAgLy8vICAgZnVuY3Rpb25QcmVmaXggdHlwZVBhcmFtZXRlcnM/IGZvcm1hbFBhcmFtZXRlckxpc3Qg4oCYO+KAmQogIC8vLyA7CiAgLy8vCiAgLy8vIGZ1bmN0aW9uUHJlZml4OgogIC8vLyAgIHJldHVyblR5cGU/IGlkZW50aWZpZXIKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVR5cGVkZWYoVG9rZW4gdHlwZWRlZktleXdvcmQpIHsKICAgIGFzc2VydChvcHRpb25hbCgndHlwZWRlZicsIHR5cGVkZWZLZXl3b3JkKSk7CiAgICBsaXN0ZW5lci5iZWdpbkZ1bmN0aW9uVHlwZUFsaWFzKHR5cGVkZWZLZXl3b3JkKTsKICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gY29tcHV0ZVR5cGUodHlwZWRlZktleXdvcmQsIGZhbHNlKTsKICAgIFRva2VuIHRva2VuID0gdHlwZUluZm8uc2tpcFR5cGUodHlwZWRlZktleXdvcmQpLm5leHQ7CiAgICBUb2tlbiBlcXVhbHM7CiAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZVBhcmFtID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuLCB0cnVlKTsKICAgIGlmICh0eXBlSW5mbyA9PSBub1R5cGUgJiYKICAgICAgICAodG9rZW4ua2luZCA9PSBJREVOVElGSUVSX1RPS0VOIHx8IHRva2VuLnR5cGUuaXNQc2V1ZG8pICYmCiAgICAgICAgb3B0aW9uYWwoJz0nLCB0eXBlUGFyYW0uc2tpcCh0b2tlbikubmV4dCkpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQudHlwZWRlZkRlY2xhcmF0aW9uKTsKICAgICAgZXF1YWxzID0gdHlwZVBhcmFtLnBhcnNlVmFyaWFibGVzKHRva2VuLCB0aGlzKS5uZXh0OwogICAgICBhc3NlcnQob3B0aW9uYWwoJz0nLCBlcXVhbHMpKTsKICAgICAgdG9rZW4gPSBjb21wdXRlVHlwZShlcXVhbHMsIHRydWUpLmVuc3VyZVR5cGVPclZvaWQoZXF1YWxzLCB0aGlzKTsKICAgIH0gZWxzZSB7CiAgICAgIHRva2VuID0gdHlwZUluZm8ucGFyc2VUeXBlKHR5cGVkZWZLZXl3b3JkLCB0aGlzKTsKICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC50eXBlZGVmRGVjbGFyYXRpb24pOwogICAgICB0b2tlbiA9IHR5cGVQYXJhbS5wYXJzZVZhcmlhYmxlcyh0b2tlbiwgdGhpcyk7CiAgICAgIHRva2VuID0KICAgICAgICAgIHBhcnNlRm9ybWFsUGFyYW1ldGVyc1JlcXVpcmVkT3B0KHRva2VuLCBNZW1iZXJLaW5kLkZ1bmN0aW9uVHlwZUFsaWFzKTsKICAgIH0KICAgIHRva2VuID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZEZ1bmN0aW9uVHlwZUFsaWFzKHR5cGVkZWZLZXl3b3JkLCBlcXVhbHMsIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBQYXJzZSBhIG1peGluIGFwcGxpY2F0aW9uIHN0YXJ0aW5nIGZyb20gYHdpdGhgLiBBc3N1bWVzIHRoYXQgdGhlIGZpcnN0CiAgLy8vIHR5cGUgaGFzIGFscmVhZHkgYmVlbiBwYXJzZWQuCiAgVG9rZW4gcGFyc2VNaXhpbkFwcGxpY2F0aW9uUmVzdChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gd2l0aEtleXdvcmQgPSB0b2tlbi5uZXh0OwogICAgaWYgKCFvcHRpb25hbCgnd2l0aCcsIHdpdGhLZXl3b3JkKSkgewogICAgICAvLyBSZWNvdmVyeTogUmVwb3J0IGFuIGVycm9yIGFuZCBpbnNlcnQgc3ludGhldGljIGB3aXRoYCBjbGF1c2UuCiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICB3aXRoS2V5d29yZCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCd3aXRoJykpOwogICAgICB3aXRoS2V5d29yZCA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0tleXdvcmQodG9rZW4sIEtleXdvcmQuV0lUSCk7CiAgICAgIGlmICghaXNWYWxpZFR5cGVSZWZlcmVuY2Uod2l0aEtleXdvcmQubmV4dCkpIHsKICAgICAgICByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHdpdGhLZXl3b3JkKTsKICAgICAgfQogICAgfQogICAgdG9rZW4gPSBwYXJzZVR5cGVMaXN0KHdpdGhLZXl3b3JkKTsKICAgIGxpc3RlbmVyLmhhbmRsZU5hbWVkTWl4aW5BcHBsaWNhdGlvbldpdGhDbGF1c2Uod2l0aEtleXdvcmQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VXaXRoQ2xhdXNlT3B0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiB3aXRoS2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJ3dpdGgnLCB3aXRoS2V5d29yZCkpIHsKICAgICAgdG9rZW4gPSBwYXJzZVR5cGVMaXN0KHdpdGhLZXl3b3JkKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlQ2xhc3NXaXRoQ2xhdXNlKHdpdGhLZXl3b3JkKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUNsYXNzTm9XaXRoQ2xhdXNlKCk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUGFyc2UgdGhlIGZvcm1hbCBwYXJhbWV0ZXJzIG9mIGEgZ2V0dGVyICh3aGljaCBzaG91bGRuJ3QgaGF2ZSBwYXJhbWV0ZXJzKQogIC8vLyBvciBmdW5jdGlvbiBvciBtZXRob2QuCiAgVG9rZW4gcGFyc2VHZXR0ZXJPckZvcm1hbFBhcmFtZXRlcnMoCiAgICAgIFRva2VuIHRva2VuLCBUb2tlbiBuYW1lLCBib29sIGlzR2V0dGVyLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCIoIiwgbmV4dCkpIHsKICAgICAgaWYgKGlzR2V0dGVyKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlR2V0dGVyV2l0aEZvcm1hbHMpOwogICAgICB9CiAgICAgIHRva2VuID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzKHRva2VuLCBraW5kKTsKICAgIH0gZWxzZSBpZiAoaXNHZXR0ZXIpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlTm9Gb3JtYWxQYXJhbWV0ZXJzKG5leHQsIGtpbmQpOwogICAgfSBlbHNlIHsKICAgICAgLy8gUmVjb3ZlcnkKICAgICAgaWYgKG9wdGlvbmFsKCdvcGVyYXRvcicsIG5hbWUpKSB7CiAgICAgICAgVG9rZW4gbmV4dCA9IG5hbWUubmV4dDsKICAgICAgICBpZiAobmV4dC5pc09wZXJhdG9yKSB7CiAgICAgICAgICBuYW1lID0gbmV4dDsKICAgICAgICB9IGVsc2UgaWYgKGlzVW5hcnlNaW51cyhuZXh0KSkgewogICAgICAgICAgbmFtZSA9IG5leHQubmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuYW1lLCBtaXNzaW5nUGFyYW1ldGVyTWVzc2FnZShraW5kKSk7CiAgICAgIHRva2VuID0gcmV3cml0ZXIuaW5zZXJ0UGFyZW5zKHRva2VuLCBmYWxzZSk7CiAgICAgIHRva2VuID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzUmVzdCh0b2tlbiwga2luZCk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUZvcm1hbFBhcmFtZXRlcnNPcHQoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJygnLCBuZXh0KSkgewogICAgICB0b2tlbiA9IHBhcnNlRm9ybWFsUGFyYW1ldGVycyh0b2tlbiwga2luZCk7CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lci5oYW5kbGVOb0Zvcm1hbFBhcmFtZXRlcnMobmV4dCwga2luZCk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBza2lwRm9ybWFsUGFyYW1ldGVycyhUb2tlbiB0b2tlbiwgTWVtYmVyS2luZCBraW5kKSB7CiAgICByZXR1cm4gc2tpcEZvcm1hbFBhcmFtZXRlcnNSZXN0KHRva2VuLm5leHQsIGtpbmQpOwogIH0KCiAgVG9rZW4gc2tpcEZvcm1hbFBhcmFtZXRlcnNSZXN0KFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIGFzc2VydChvcHRpb25hbCgnKCcsIHRva2VuKSk7CiAgICAvLyBUT0RPKGFoZSk6IFNob3VsZG4ndCB0aGlzIGJlIGBiZWdpbkZvcm1hbFBhcmFtZXRlcnNgPwogICAgbGlzdGVuZXIuYmVnaW5PcHRpb25hbEZvcm1hbFBhcmFtZXRlcnModG9rZW4pOwogICAgVG9rZW4gY2xvc2VCcmFjZSA9IHRva2VuLmVuZEdyb3VwOwogICAgYXNzZXJ0KG9wdGlvbmFsKCcpJywgY2xvc2VCcmFjZSkpOwogICAgbGlzdGVuZXIuZW5kRm9ybWFsUGFyYW1ldGVycygwLCB0b2tlbiwgY2xvc2VCcmFjZSwga2luZCk7CiAgICByZXR1cm4gY2xvc2VCcmFjZTsKICB9CgogIC8vLyBQYXJzZXMgdGhlIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdCBvZiBhIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBJZiBga2luZCA9PSBNZW1iZXJLaW5kLkdlbmVyYWxpemVkRnVuY3Rpb25UeXBlYCwgdGhlbiBuYW1lcyBtYXkgYmUKICAvLy8gb21pdHRlZCAoZXhjZXB0IGZvciBuYW1lZCBhcmd1bWVudHMpLiBPdGhlcndpc2UsIHR5cGVzIG1heSBiZSBvbWl0dGVkLgogIFRva2VuIHBhcnNlRm9ybWFsUGFyYW1ldGVyc1JlcXVpcmVkT3B0KFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKCFvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgbWlzc2luZ1BhcmFtZXRlck1lc3NhZ2Uoa2luZCkpOwogICAgICBuZXh0ID0gcmV3cml0ZXIuaW5zZXJ0UGFyZW5zKHRva2VuLCBmYWxzZSk7CiAgICB9CiAgICByZXR1cm4gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzUmVzdChuZXh0LCBraW5kKTsKICB9CgogIC8vLyBQYXJzZXMgdGhlIGZvcm1hbCBwYXJhbWV0ZXIgbGlzdCBvZiBhIGZ1bmN0aW9uIGdpdmVuIHRoYXQgdGhlIGxlZnQKICAvLy8gcGFyZW50aGVzaXMgaXMga25vd24gdG8gZXhpc3QuCiAgLy8vCiAgLy8vIElmIGBraW5kID09IE1lbWJlcktpbmQuR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGVgLCB0aGVuIG5hbWVzIG1heSBiZQogIC8vLyBvbWl0dGVkIChleGNlcHQgZm9yIG5hbWVkIGFyZ3VtZW50cykuIE90aGVyd2lzZSwgdHlwZXMgbWF5IGJlIG9taXR0ZWQuCiAgVG9rZW4gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzKFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIHJldHVybiBwYXJzZUZvcm1hbFBhcmFtZXRlcnNSZXN0KHRva2VuLm5leHQsIGtpbmQpOwogIH0KCiAgLy8vIFBhcnNlcyB0aGUgZm9ybWFsIHBhcmFtZXRlciBsaXN0IG9mIGEgZnVuY3Rpb24gZ2l2ZW4gdGhhdCB0aGUgbGVmdAogIC8vLyBwYXJlbnRoZXNpcyBwYXNzZWQgaW4gYXMgW3Rva2VuXS4KICAvLy8KICAvLy8gSWYgYGtpbmQgPT0gTWVtYmVyS2luZC5HZW5lcmFsaXplZEZ1bmN0aW9uVHlwZWAsIHRoZW4gbmFtZXMgbWF5IGJlCiAgLy8vIG9taXR0ZWQgKGV4Y2VwdCBmb3IgbmFtZWQgYXJndW1lbnRzKS4gT3RoZXJ3aXNlLCB0eXBlcyBtYXkgYmUgb21pdHRlZC4KICBUb2tlbiBwYXJzZUZvcm1hbFBhcmFtZXRlcnNSZXN0KFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIFRva2VuIGJlZ2luID0gdG9rZW47CiAgICBhc3NlcnQob3B0aW9uYWwoJygnLCB0b2tlbikpOwogICAgbGlzdGVuZXIuYmVnaW5Gb3JtYWxQYXJhbWV0ZXJzKGJlZ2luLCBraW5kKTsKICAgIGludCBwYXJhbWV0ZXJDb3VudCA9IDA7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCcpJywgbmV4dCkpIHsKICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgKytwYXJhbWV0ZXJDb3VudDsKICAgICAgU3RyaW5nIHZhbHVlID0gbmV4dC5zdHJpbmdWYWx1ZTsKICAgICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ1snKSkgewogICAgICAgIHRva2VuID0gcGFyc2VPcHRpb25hbFBvc2l0aW9uYWxQYXJhbWV0ZXJzKHRva2VuLCBraW5kKTsKICAgICAgICB0b2tlbiA9IGVuc3VyZUNsb3NlUGFyZW4odG9rZW4sIGJlZ2luKTsKICAgICAgICBicmVhazsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICd7JykpIHsKICAgICAgICB0b2tlbiA9IHBhcnNlT3B0aW9uYWxOYW1lZFBhcmFtZXRlcnModG9rZW4sIGtpbmQpOwogICAgICAgIHRva2VuID0gZW5zdXJlQ2xvc2VQYXJlbih0b2tlbiwgYmVnaW4pOwogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ1tdJykpIHsKICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgIHRva2VuID0gcmV3cml0ZVNxdWFyZUJyYWNrZXRzKHRva2VuKTsKICAgICAgICB0b2tlbiA9IHBhcnNlT3B0aW9uYWxQb3NpdGlvbmFsUGFyYW1ldGVycyh0b2tlbiwga2luZCk7CiAgICAgICAgdG9rZW4gPSBlbnN1cmVDbG9zZVBhcmVuKHRva2VuLCBiZWdpbik7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZUZvcm1hbFBhcmFtZXRlcih0b2tlbiwgRm9ybWFsUGFyYW1ldGVyS2luZC5tYW5kYXRvcnksIGtpbmQpOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKCFvcHRpb25hbCgnLCcsIG5leHQpKSB7CiAgICAgICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgaWYgKG9wdGlvbmFsKCcpJywgbmV4dCkpIHsKICAgICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgIGlmIChiZWdpbi5lbmRHcm91cC5pc1N5bnRoZXRpYykgewogICAgICAgICAgICAvLyBTY2FubmVyIGhhcyBhbHJlYWR5IHJlcG9ydGVkIGEgbWlzc2luZyBgKWAgZXJyb3IsCiAgICAgICAgICAgIC8vIGJ1dCBwbGFjZWQgdGhlIGApYCBpbiB0aGUgd3JvbmcgbG9jYXRpb24sIHNvIG1vdmUgaXQuCiAgICAgICAgICAgIHRva2VuID0gcmV3cml0ZXIubW92ZVN5bnRoZXRpYyh0b2tlbiwgYmVnaW4uZW5kR3JvdXApOwogICAgICAgICAgfSBlbHNlIGlmIChuZXh0LmtpbmQgPT0gSURFTlRJRklFUl9UT0tFTiAmJgogICAgICAgICAgICAgIG5leHQubmV4dC5raW5kID09IElERU5USUZJRVJfVE9LRU4pIHsKICAgICAgICAgICAgLy8gTG9va3MgbGlrZSBhIG1pc3NpbmcgY29tbWEKICAgICAgICAgICAgdG9rZW4gPSByZXdyaXRlQW5kUmVjb3ZlcigKICAgICAgICAgICAgICAgIHRva2VuLAogICAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCcsJyksCiAgICAgICAgICAgICAgICBuZXcgU3ludGhldGljVG9rZW4oVG9rZW5UeXBlLkNPTU1BLCBuZXh0LmNoYXJPZmZzZXQpKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0b2tlbiA9IGVuc3VyZUNsb3NlUGFyZW4odG9rZW4sIGJlZ2luKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdG9rZW4gPSBuZXh0OwogICAgfQogICAgYXNzZXJ0KG9wdGlvbmFsKCcpJywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmVuZEZvcm1hbFBhcmFtZXRlcnMocGFyYW1ldGVyQ291bnQsIGJlZ2luLCB0b2tlbiwga2luZCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUmV0dXJuIHRoZSBtZXNzYWdlIHRoYXQgc2hvdWxkIGJlIHByb2R1Y2VkIHdoZW4gdGhlIGZvcm1hbCBwYXJhbWV0ZXJzIGFyZQogIC8vLyBtaXNzaW5nLgogIE1lc3NhZ2UgbWlzc2luZ1BhcmFtZXRlck1lc3NhZ2UoTWVtYmVyS2luZCBraW5kKSB7CiAgICBpZiAoa2luZCA9PSBNZW1iZXJLaW5kLkZ1bmN0aW9uVHlwZUFsaWFzKSB7CiAgICAgIHJldHVybiBmYXN0YS5tZXNzYWdlTWlzc2luZ1R5cGVkZWZQYXJhbWV0ZXJzOwogICAgfSBlbHNlIGlmIChraW5kID09IE1lbWJlcktpbmQuTm9uU3RhdGljTWV0aG9kIHx8CiAgICAgICAga2luZCA9PSBNZW1iZXJLaW5kLlN0YXRpY01ldGhvZCkgewogICAgICByZXR1cm4gZmFzdGEubWVzc2FnZU1pc3NpbmdNZXRob2RQYXJhbWV0ZXJzOwogICAgfQogICAgcmV0dXJuIGZhc3RhLm1lc3NhZ2VNaXNzaW5nRnVuY3Rpb25QYXJhbWV0ZXJzOwogIH0KCiAgLy8vIGBgYAogIC8vLyBub3JtYWxGb3JtYWxQYXJhbWV0ZXI6CiAgLy8vICAgZnVuY3Rpb25Gb3JtYWxQYXJhbWV0ZXIgfAogIC8vLyAgIGZpZWxkRm9ybWFsUGFyYW1ldGVyIHwKICAvLy8gICBzaW1wbGVGb3JtYWxQYXJhbWV0ZXIKICAvLy8gOwogIC8vLwogIC8vLyBmdW5jdGlvbkZvcm1hbFBhcmFtZXRlcjoKICAvLy8gICBtZXRhZGF0YSAnY292YXJpYW50Jz8gcmV0dXJuVHlwZT8gaWRlbnRpZmllciBmb3JtYWxQYXJhbWV0ZXJMaXN0CiAgLy8vIDsKICAvLy8KICAvLy8gc2ltcGxlRm9ybWFsUGFyYW1ldGVyOgogIC8vLyAgIG1ldGFkYXRhICdjb3ZhcmlhbnQnPyBmaW5hbENvbnN0VmFyT3JUeXBlPyBpZGVudGlmaWVyIHwKICAvLy8gOwogIC8vLwogIC8vLyBmaWVsZEZvcm1hbFBhcmFtZXRlcjoKICAvLy8gICBtZXRhZGF0YSBmaW5hbENvbnN0VmFyT3JUeXBlPyAndGhpcycgJy4nIGlkZW50aWZpZXIgZm9ybWFsUGFyYW1ldGVyTGlzdD8KICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUZvcm1hbFBhcmFtZXRlcigKICAgICAgVG9rZW4gdG9rZW4sIEZvcm1hbFBhcmFtZXRlcktpbmQgcGFyYW1ldGVyS2luZCwgTWVtYmVyS2luZCBtZW1iZXJLaW5kKSB7CiAgICBhc3NlcnQocGFyYW1ldGVyS2luZCAhPSBudWxsKTsKICAgIHRva2VuID0gcGFyc2VNZXRhZGF0YVN0YXIodG9rZW4pOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBUb2tlbiBzdGFydCA9IG5leHQ7CgogICAgZmluYWwgYm9vbCBpbkZ1bmN0aW9uVHlwZSA9CiAgICAgICAgbWVtYmVyS2luZCA9PSBNZW1iZXJLaW5kLkdlbmVyYWxpemVkRnVuY3Rpb25UeXBlOwoKICAgIFRva2VuIHJlcXVpcmVkVG9rZW47CiAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbjsKICAgIFRva2VuIHZhckZpbmFsT3JDb25zdDsKICAgIGlmIChpc01vZGlmaWVyKG5leHQpKSB7CiAgICAgIGlmIChvcHRpb25hbCgncmVxdWlyZWQnLCBuZXh0KSkgewogICAgICAgIGlmIChwYXJhbWV0ZXJLaW5kID09IEZvcm1hbFBhcmFtZXRlcktpbmQub3B0aW9uYWxOYW1lZCkgewogICAgICAgICAgcmVxdWlyZWRUb2tlbiA9IHRva2VuID0gbmV4dDsKICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKGlzTW9kaWZpZXIobmV4dCkpIHsKICAgICAgICBpZiAob3B0aW9uYWwoJ2NvdmFyaWFudCcsIG5leHQpKSB7CiAgICAgICAgICBpZiAobWVtYmVyS2luZCAhPSBNZW1iZXJLaW5kLlN0YXRpY01ldGhvZCAmJgogICAgICAgICAgICAgIG1lbWJlcktpbmQgIT0gTWVtYmVyS2luZC5Ub3BMZXZlbE1ldGhvZCkgewogICAgICAgICAgICBjb3ZhcmlhbnRUb2tlbiA9IHRva2VuID0gbmV4dDsKICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNNb2RpZmllcihuZXh0KSkgewogICAgICAgICAgaWYgKCFpbkZ1bmN0aW9uVHlwZSkgewogICAgICAgICAgICBpZiAob3B0aW9uYWwoJ3ZhcicsIG5leHQpKSB7CiAgICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdmaW5hbCcsIG5leHQpKSB7CiAgICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICB9CgogICAgICAgICAgaWYgKGlzTW9kaWZpZXIobmV4dCkpIHsKICAgICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgICAgTW9kaWZpZXJSZWNvdmVyeUNvbnRleHQgY29udGV4dCA9IG5ldyBNb2RpZmllclJlY292ZXJ5Q29udGV4dCh0aGlzKQogICAgICAgICAgICAgIC4uY292YXJpYW50VG9rZW4gPSBjb3ZhcmlhbnRUb2tlbgogICAgICAgICAgICAgIC4ucmVxdWlyZWRUb2tlbiA9IHJlcXVpcmVkVG9rZW4KICAgICAgICAgICAgICAuLnZhckZpbmFsT3JDb25zdCA9IHZhckZpbmFsT3JDb25zdDsKCiAgICAgICAgICAgIHRva2VuID0gY29udGV4dC5wYXJzZUZvcm1hbFBhcmFtZXRlck1vZGlmaWVycygKICAgICAgICAgICAgICAgIHRva2VuLCBwYXJhbWV0ZXJLaW5kLCBtZW1iZXJLaW5kKTsKICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CgogICAgICAgICAgICBjb3ZhcmlhbnRUb2tlbiA9IGNvbnRleHQuY292YXJpYW50VG9rZW47CiAgICAgICAgICAgIHJlcXVpcmVkVG9rZW4gPSBjb250ZXh0LnJlcXVpcmVkVG9rZW47CiAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCA9IGNvbnRleHQudmFyRmluYWxPckNvbnN0OwoKICAgICAgICAgICAgY29udGV4dCA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgbGlzdGVuZXIuYmVnaW5Gb3JtYWxQYXJhbWV0ZXIoCiAgICAgICAgc3RhcnQsIG1lbWJlcktpbmQsIHJlcXVpcmVkVG9rZW4sIGNvdmFyaWFudFRva2VuLCB2YXJGaW5hbE9yQ29uc3QpOwoKICAgIC8vIFR5cGUgaXMgcmVxdWlyZWQgaW4gYSBnZW5lcmFsaXplZCBmdW5jdGlvbiB0eXBlLCBidXQgb3B0aW9uYWwgb3RoZXJ3aXNlLgogICAgZmluYWwgVG9rZW4gYmVmb3JlVHlwZSA9IHRva2VuOwogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZSh0b2tlbiwgaW5GdW5jdGlvblR5cGUpOwogICAgdG9rZW4gPSB0eXBlSW5mby5za2lwVHlwZSh0b2tlbik7CiAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmICh0eXBlSW5mbyA9PSBub1R5cGUgJiYKICAgICAgICAob3B0aW9uYWwoJy4nLCBuZXh0KSB8fAogICAgICAgICAgICAobmV4dC5pc0lkZW50aWZpZXIgJiYgb3B0aW9uYWwoJy4nLCBuZXh0Lm5leHQpKSkpIHsKICAgICAgLy8gUmVjb3Zlcnk6IE1hbGZvcm1lZCB0eXBlIHJlZmVyZW5jZS4KICAgICAgdHlwZUluZm8gPSBjb21wdXRlVHlwZShiZWZvcmVUeXBlLCB0cnVlKTsKICAgICAgdG9rZW4gPSB0eXBlSW5mby5za2lwVHlwZShiZWZvcmVUeXBlKTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICB9CgogICAgZmluYWwgYm9vbCBpc05hbWVkUGFyYW1ldGVyID0KICAgICAgICBwYXJhbWV0ZXJLaW5kID09IEZvcm1hbFBhcmFtZXRlcktpbmQub3B0aW9uYWxOYW1lZDsKCiAgICBUb2tlbiB0aGlzS2V5d29yZDsKICAgIFRva2VuIHBlcmlvZEFmdGVyVGhpczsKICAgIElkZW50aWZpZXJDb250ZXh0IG5hbWVDb250ZXh0ID0KICAgICAgICBJZGVudGlmaWVyQ29udGV4dC5mb3JtYWxQYXJhbWV0ZXJEZWNsYXJhdGlvbjsKCiAgICBpZiAoIWluRnVuY3Rpb25UeXBlICYmIG9wdGlvbmFsKCd0aGlzJywgbmV4dCkpIHsKICAgICAgdGhpc0tleXdvcmQgPSB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAoIW9wdGlvbmFsKCcuJywgbmV4dCkpIHsKICAgICAgICAvLyBSZWNvdmVyIGZyb20gYSBtaXNzaW5nIHBlcmlvZCBieSBpbnNlcnRpbmcgb25lLgogICAgICAgIG5leHQgPSByZXdyaXRlQW5kUmVjb3ZlcigKICAgICAgICAgICAgdG9rZW4sCiAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnLicpLAogICAgICAgICAgICBuZXcgU3ludGhldGljVG9rZW4oVG9rZW5UeXBlLlBFUklPRCwgbmV4dC5jaGFyT2Zmc2V0KSk7CiAgICAgIH0KICAgICAgcGVyaW9kQWZ0ZXJUaGlzID0gdG9rZW4gPSBuZXh0OwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgbmFtZUNvbnRleHQgPSBJZGVudGlmaWVyQ29udGV4dC5maWVsZEluaXRpYWxpemVyOwogICAgfQoKICAgIGlmIChuZXh0LmlzSWRlbnRpZmllcikgewogICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgfQogICAgVG9rZW4gYmVmb3JlSW5saW5lRnVuY3Rpb25UeXBlOwogICAgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVQYXJhbSA9IG5vVHlwZVBhcmFtT3JBcmc7CiAgICBpZiAob3B0aW9uYWwoIjwiLCBuZXh0KSkgewogICAgICB0eXBlUGFyYW0gPSBjb21wdXRlVHlwZVBhcmFtT3JBcmcodG9rZW4pOwogICAgICBpZiAodHlwZVBhcmFtICE9IG5vVHlwZVBhcmFtT3JBcmcpIHsKICAgICAgICBUb2tlbiBjbG9zZXIgPSB0eXBlUGFyYW0uc2tpcCh0b2tlbik7CiAgICAgICAgaWYgKG9wdGlvbmFsKCIoIiwgY2xvc2VyLm5leHQpKSB7CiAgICAgICAgICBpZiAodmFyRmluYWxPckNvbnN0ICE9IG51bGwpIHsKICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwgZmFzdGEubWVzc2FnZUZ1bmN0aW9uVHlwZWRQYXJhbWV0ZXJWYXIpOwogICAgICAgICAgfQogICAgICAgICAgYmVmb3JlSW5saW5lRnVuY3Rpb25UeXBlID0gdG9rZW47CiAgICAgICAgICB0b2tlbiA9IGNsb3Nlci5uZXh0LmVuZEdyb3VwOwogICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCIoIiwgbmV4dCkpIHsKICAgICAgaWYgKHZhckZpbmFsT3JDb25zdCAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0LCBmYXN0YS5tZXNzYWdlRnVuY3Rpb25UeXBlZFBhcmFtZXRlclZhcik7CiAgICAgIH0KICAgICAgYmVmb3JlSW5saW5lRnVuY3Rpb25UeXBlID0gdG9rZW47CiAgICAgIHRva2VuID0gbmV4dC5lbmRHcm91cDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICB9CiAgICBpZiAodHlwZUluZm8gIT0gbm9UeXBlICYmCiAgICAgICAgdmFyRmluYWxPckNvbnN0ICE9IG51bGwgJiYKICAgICAgICBvcHRpb25hbCgndmFyJywgdmFyRmluYWxPckNvbnN0KSkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHZhckZpbmFsT3JDb25zdCwgZmFzdGEubWVzc2FnZVR5cGVBZnRlclZhcik7CiAgICB9CgogICAgVG9rZW4gZW5kSW5saW5lRnVuY3Rpb25UeXBlOwogICAgaWYgKGJlZm9yZUlubGluZUZ1bmN0aW9uVHlwZSAhPSBudWxsKSB7CiAgICAgIGVuZElubGluZUZ1bmN0aW9uVHlwZSA9CiAgICAgICAgICB0eXBlUGFyYW0ucGFyc2VWYXJpYWJsZXMoYmVmb3JlSW5saW5lRnVuY3Rpb25UeXBlLCB0aGlzKTsKICAgICAgbGlzdGVuZXIuYmVnaW5GdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyKGJlZm9yZUlubGluZUZ1bmN0aW9uVHlwZS5uZXh0KTsKICAgICAgdG9rZW4gPSB0eXBlSW5mby5wYXJzZVR5cGUoYmVmb3JlVHlwZSwgdGhpcyk7CiAgICAgIGVuZElubGluZUZ1bmN0aW9uVHlwZSA9IHBhcnNlRm9ybWFsUGFyYW1ldGVyc1JlcXVpcmVkT3B0KAogICAgICAgICAgZW5kSW5saW5lRnVuY3Rpb25UeXBlLCBNZW1iZXJLaW5kLkZ1bmN0aW9uVHlwZWRQYXJhbWV0ZXIpOwogICAgICBUb2tlbiBxdWVzdGlvbjsKICAgICAgaWYgKG9wdGlvbmFsKCc/JywgZW5kSW5saW5lRnVuY3Rpb25UeXBlLm5leHQpKSB7CiAgICAgICAgcXVlc3Rpb24gPSBlbmRJbmxpbmVGdW5jdGlvblR5cGUgPSBlbmRJbmxpbmVGdW5jdGlvblR5cGUubmV4dDsKICAgICAgfQogICAgICBsaXN0ZW5lci5lbmRGdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyKAogICAgICAgICAgYmVmb3JlSW5saW5lRnVuY3Rpb25UeXBlLCBxdWVzdGlvbik7CgogICAgICAvLyBHZW5lcmFsaXplZCBmdW5jdGlvbiB0eXBlcyBkb24ndCBhbGxvdyBpbmxpbmUgZnVuY3Rpb24gdHlwZXMuCiAgICAgIC8vIFRoZSBmb2xsb3dpbmcgaXNuJ3QgYWxsb3dlZDoKICAgICAgLy8gICAgaW50IEZ1bmN0aW9uKGludCBiYXIoU3RyaW5nIHgpKS4KICAgICAgaWYgKGluRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihiZWZvcmVJbmxpbmVGdW5jdGlvblR5cGUubmV4dCwKICAgICAgICAgICAgZmFzdGEubWVzc2FnZUludmFsaWRJbmxpbmVGdW5jdGlvblR5cGUpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGluRnVuY3Rpb25UeXBlKSB7CiAgICAgIHRva2VuID0gdHlwZUluZm8uZW5zdXJlVHlwZU9yVm9pZChiZWZvcmVUeXBlLCB0aGlzKTsKICAgIH0gZWxzZSB7CiAgICAgIHRva2VuID0gdHlwZUluZm8ucGFyc2VUeXBlKGJlZm9yZVR5cGUsIHRoaXMpOwogICAgfQoKICAgIFRva2VuIG5hbWVUb2tlbjsKICAgIGlmIChwZXJpb2RBZnRlclRoaXMgIT0gbnVsbCkgewogICAgICB0b2tlbiA9IHBlcmlvZEFmdGVyVGhpczsKICAgIH0KICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKGluRnVuY3Rpb25UeXBlICYmICFpc05hbWVkUGFyYW1ldGVyICYmICFuZXh0LmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICBuYW1lVG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICBsaXN0ZW5lci5oYW5kbGVOb05hbWUobmFtZVRva2VuKTsKICAgIH0gZWxzZSB7CiAgICAgIG5hbWVUb2tlbiA9IHRva2VuID0gZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgbmFtZUNvbnRleHQpOwogICAgICBpZiAoaXNOYW1lZFBhcmFtZXRlciAmJiBuYW1lVG9rZW4ubGV4ZW1lLnN0YXJ0c1dpdGgoIl8iKSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmFtZVRva2VuLCBmYXN0YS5tZXNzYWdlUHJpdmF0ZU5hbWVkUGFyYW1ldGVyKTsKICAgICAgfQogICAgfQogICAgaWYgKGVuZElubGluZUZ1bmN0aW9uVHlwZSAhPSBudWxsKSB7CiAgICAgIHRva2VuID0gZW5kSW5saW5lRnVuY3Rpb25UeXBlOwogICAgfQogICAgbmV4dCA9IHRva2VuLm5leHQ7CgogICAgU3RyaW5nIHZhbHVlID0gbmV4dC5zdHJpbmdWYWx1ZTsKICAgIFRva2VuIGluaXRpYWxpemVyU3RhcnQsIGluaXRpYWxpemVyRW5kOwogICAgaWYgKChpZGVudGljYWwoJz0nLCB2YWx1ZSkpIHx8IChpZGVudGljYWwoJzonLCB2YWx1ZSkpKSB7CiAgICAgIFRva2VuIGVxdWFsID0gbmV4dDsKICAgICAgaW5pdGlhbGl6ZXJTdGFydCA9IGVxdWFsLm5leHQ7CiAgICAgIGxpc3RlbmVyLmJlZ2luRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbigpOwogICAgICB0b2tlbiA9IGluaXRpYWxpemVyRW5kID0gcGFyc2VFeHByZXNzaW9uKGVxdWFsKTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGxpc3RlbmVyLmVuZEZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb24oKTsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIHJlbW92aW5nIHRoZSBsYXN0IHBhcmFtZXRlciBmcm9tIHRoZQogICAgICAvLyBoYW5kbGVWYWx1ZWRGb3JtYWxQYXJhbWV0ZXIgZXZlbnQuLi4gaXQgYXBwZWFycyB0byBiZSB1bnVzZWQuCiAgICAgIGxpc3RlbmVyLmhhbmRsZVZhbHVlZEZvcm1hbFBhcmFtZXRlcihlcXVhbCwgbmV4dCk7CiAgICAgIGlmIChpc01hbmRhdG9yeUZvcm1hbFBhcmFtZXRlcktpbmQocGFyYW1ldGVyS2luZCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBlcXVhbCwgZmFzdGEubWVzc2FnZVJlcXVpcmVkUGFyYW1ldGVyV2l0aERlZmF1bHQpOwogICAgICB9IGVsc2UgaWYgKGlzT3B0aW9uYWxQb3NpdGlvbmFsRm9ybWFsUGFyYW1ldGVyS2luZChwYXJhbWV0ZXJLaW5kKSAmJgogICAgICAgICAgaWRlbnRpY2FsKCc6JywgdmFsdWUpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgZXF1YWwsIGZhc3RhLm1lc3NhZ2VQb3NpdGlvbmFsUGFyYW1ldGVyV2l0aEVxdWFscyk7CiAgICAgIH0gZWxzZSBpZiAoaW5GdW5jdGlvblR5cGUgfHwKICAgICAgICAgIG1lbWJlcktpbmQgPT0gTWVtYmVyS2luZC5GdW5jdGlvblR5cGVBbGlhcyB8fAogICAgICAgICAgbWVtYmVyS2luZCA9PSBNZW1iZXJLaW5kLkZ1bmN0aW9uVHlwZWRQYXJhbWV0ZXIpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGVxdWFsLCBmYXN0YS5tZXNzYWdlRnVuY3Rpb25UeXBlRGVmYXVsdFZhbHVlKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlKG5leHQpOwogICAgfQogICAgbGlzdGVuZXIuZW5kRm9ybWFsUGFyYW1ldGVyKHRoaXNLZXl3b3JkLCBwZXJpb2RBZnRlclRoaXMsIG5hbWVUb2tlbiwKICAgICAgICBpbml0aWFsaXplclN0YXJ0LCBpbml0aWFsaXplckVuZCwgcGFyYW1ldGVyS2luZCwgbWVtYmVyS2luZCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGRlZmF1bHRGb3JtYWxQYXJhbWV0ZXI6CiAgLy8vICAgbm9ybWFsRm9ybWFsUGFyYW1ldGVyICgnPScgZXhwcmVzc2lvbik/CiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VPcHRpb25hbFBvc2l0aW9uYWxQYXJhbWV0ZXJzKFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIFRva2VuIGJlZ2luID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdbJywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luT3B0aW9uYWxGb3JtYWxQYXJhbWV0ZXJzKGJlZ2luKTsKICAgIGludCBwYXJhbWV0ZXJDb3VudCA9IDA7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCddJywgbmV4dCkpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICB0b2tlbiA9IHBhcnNlRm9ybWFsUGFyYW1ldGVyKAogICAgICAgICAgdG9rZW4sIEZvcm1hbFBhcmFtZXRlcktpbmQub3B0aW9uYWxQb3NpdGlvbmFsLCBraW5kKTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICsrcGFyYW1ldGVyQ291bnQ7CiAgICAgIGlmICghb3B0aW9uYWwoJywnLCBuZXh0KSkgewogICAgICAgIGlmICghb3B0aW9uYWwoJ10nLCBuZXh0KSkgewogICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCddJykpOwogICAgICAgICAgLy8gU2Nhbm5lciBndWFyYW50ZWVzIGEgY2xvc2luZyBicmFja2V0LgogICAgICAgICAgbmV4dCA9IGJlZ2luLmVuZEdyb3VwOwogICAgICAgICAgd2hpbGUgKHRva2VuLm5leHQgIT0gbmV4dCkgewogICAgICAgICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHRva2VuID0gbmV4dDsKICAgIH0KICAgIGlmIChwYXJhbWV0ZXJDb3VudCA9PSAwKSB7CiAgICAgIHJld3JpdGVBbmRSZWNvdmVyKAogICAgICAgICAgdG9rZW4sCiAgICAgICAgICBmYXN0YS5tZXNzYWdlRW1wdHlPcHRpb25hbFBhcmFtZXRlckxpc3QsCiAgICAgICAgICBuZXcgU3ludGhldGljU3RyaW5nVG9rZW4oCiAgICAgICAgICAgICAgVG9rZW5UeXBlLklERU5USUZJRVIsICcnLCB0b2tlbi5uZXh0LmNoYXJPZmZzZXQsIDApKTsKICAgICAgdG9rZW4gPSBwYXJzZUZvcm1hbFBhcmFtZXRlcigKICAgICAgICAgIHRva2VuLCBGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsUG9zaXRpb25hbCwga2luZCk7CiAgICAgICsrcGFyYW1ldGVyQ291bnQ7CiAgICB9CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ10nLCB0b2tlbikpOwogICAgbGlzdGVuZXIuZW5kT3B0aW9uYWxGb3JtYWxQYXJhbWV0ZXJzKHBhcmFtZXRlckNvdW50LCBiZWdpbiwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBkZWZhdWx0TmFtZWRQYXJhbWV0ZXI6CiAgLy8vICAgbm9ybWFsRm9ybWFsUGFyYW1ldGVyICgnPScgZXhwcmVzc2lvbik/IHwKICAvLy8gICBub3JtYWxGb3JtYWxQYXJhbWV0ZXIgKCc6JyBleHByZXNzaW9uKT8KICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZU9wdGlvbmFsTmFtZWRQYXJhbWV0ZXJzKFRva2VuIHRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIFRva2VuIGJlZ2luID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCd7JywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luT3B0aW9uYWxGb3JtYWxQYXJhbWV0ZXJzKGJlZ2luKTsKICAgIGludCBwYXJhbWV0ZXJDb3VudCA9IDA7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCd9JywgbmV4dCkpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICB0b2tlbiA9CiAgICAgICAgICBwYXJzZUZvcm1hbFBhcmFtZXRlcih0b2tlbiwgRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbE5hbWVkLCBraW5kKTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICsrcGFyYW1ldGVyQ291bnQ7CiAgICAgIGlmICghb3B0aW9uYWwoJywnLCBuZXh0KSkgewogICAgICAgIGlmICghb3B0aW9uYWwoJ30nLCBuZXh0KSkgewogICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCd9JykpOwogICAgICAgICAgLy8gU2Nhbm5lciBndWFyYW50ZWVzIGEgY2xvc2luZyBicmFja2V0LgogICAgICAgICAgbmV4dCA9IGJlZ2luLmVuZEdyb3VwOwogICAgICAgICAgd2hpbGUgKHRva2VuLm5leHQgIT0gbmV4dCkgewogICAgICAgICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHRva2VuID0gbmV4dDsKICAgIH0KICAgIGlmIChwYXJhbWV0ZXJDb3VudCA9PSAwKSB7CiAgICAgIHJld3JpdGVBbmRSZWNvdmVyKAogICAgICAgICAgdG9rZW4sCiAgICAgICAgICBmYXN0YS5tZXNzYWdlRW1wdHlOYW1lZFBhcmFtZXRlckxpc3QsCiAgICAgICAgICBuZXcgU3ludGhldGljU3RyaW5nVG9rZW4oCiAgICAgICAgICAgICAgVG9rZW5UeXBlLklERU5USUZJRVIsICcnLCB0b2tlbi5uZXh0LmNoYXJPZmZzZXQsIDApKTsKICAgICAgdG9rZW4gPQogICAgICAgICAgcGFyc2VGb3JtYWxQYXJhbWV0ZXIodG9rZW4sIEZvcm1hbFBhcmFtZXRlcktpbmQub3B0aW9uYWxOYW1lZCwga2luZCk7CiAgICAgICsrcGFyYW1ldGVyQ291bnQ7CiAgICB9CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ30nLCB0b2tlbikpOwogICAgbGlzdGVuZXIuZW5kT3B0aW9uYWxGb3JtYWxQYXJhbWV0ZXJzKHBhcmFtZXRlckNvdW50LCBiZWdpbiwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBxdWFsaWZpZWQ6CiAgLy8vICAgaWRlbnRpZmllciBxdWFsaWZpZWRSZXN0KgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlUXVhbGlmaWVkKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0LAogICAgICBJZGVudGlmaWVyQ29udGV4dCBjb250aW51YXRpb25Db250ZXh0KSB7CiAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIGNvbnRleHQpOwogICAgd2hpbGUgKG9wdGlvbmFsKCcuJywgdG9rZW4ubmV4dCkpIHsKICAgICAgdG9rZW4gPSBwYXJzZVF1YWxpZmllZFJlc3QodG9rZW4sIGNvbnRpbnVhdGlvbkNvbnRleHQpOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBxdWFsaWZpZWRSZXN0T3B0OgogIC8vLyAgIHF1YWxpZmllZFJlc3Q/CiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VRdWFsaWZpZWRSZXN0T3B0KAogICAgICBUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGludWF0aW9uQ29udGV4dCkgewogICAgaWYgKG9wdGlvbmFsKCcuJywgdG9rZW4ubmV4dCkpIHsKICAgICAgcmV0dXJuIHBhcnNlUXVhbGlmaWVkUmVzdCh0b2tlbiwgY29udGludWF0aW9uQ29udGV4dCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdG9rZW47CiAgICB9CiAgfQoKICAvLy8gYGBgCiAgLy8vIHF1YWxpZmllZFJlc3Q6CiAgLy8vICAgJy4nIGlkZW50aWZpZXIKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVF1YWxpZmllZFJlc3QoVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnLicsIHRva2VuKSk7CiAgICBUb2tlbiBwZXJpb2QgPSB0b2tlbjsKICAgIHRva2VuID0gZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgY29udGV4dCk7CiAgICBsaXN0ZW5lci5oYW5kbGVRdWFsaWZpZWQocGVyaW9kKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHNraXBCbG9jayhUb2tlbiB0b2tlbikgewogICAgLy8gVGhlIHNjYW5uZXIgZW5zdXJlcyB0aGF0IGB7YCBhbHdheXMgaGFzIGEgY2xvc2luZyBgfWAuCiAgICByZXR1cm4gZW5zdXJlQmxvY2sodG9rZW4sIG51bGwsIG51bGwpLmVuZEdyb3VwOwogIH0KCiAgLy8vIGBgYAogIC8vLyBlbnVtVHlwZToKICAvLy8gICBtZXRhZGF0YSAnZW51bScgaWQgJ3snIG1ldGFkYXRhIGlkIFsnLCcgbWV0YWRhdGEgaWRdKiBbJywnXSAnfScKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUVudW0oVG9rZW4gZW51bUtleXdvcmQpIHsKICAgIGFzc2VydChvcHRpb25hbCgnZW51bScsIGVudW1LZXl3b3JkKSk7CiAgICBsaXN0ZW5lci5iZWdpbkVudW0oZW51bUtleXdvcmQpOwogICAgVG9rZW4gdG9rZW4gPQogICAgICAgIGVuc3VyZUlkZW50aWZpZXIoZW51bUtleXdvcmQsIElkZW50aWZpZXJDb250ZXh0LmVudW1EZWNsYXJhdGlvbik7CiAgICBUb2tlbiBsZWZ0QnJhY2UgPSB0b2tlbi5uZXh0OwogICAgaW50IGNvdW50ID0gMDsKICAgIGlmIChvcHRpb25hbCgneycsIGxlZnRCcmFjZSkpIHsKICAgICAgdG9rZW4gPSBsZWZ0QnJhY2U7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgaWYgKG9wdGlvbmFsKCd9JywgbmV4dCkpIHsKICAgICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICAgIGlmIChjb3VudCA9PSAwKSB7CiAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIGZhc3RhLm1lc3NhZ2VFbnVtRGVjbGFyYXRpb25FbXB0eSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgdG9rZW4gPSBwYXJzZU1ldGFkYXRhU3Rhcih0b2tlbik7CiAgICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5lbnVtVmFsdWVEZWNsYXJhdGlvbik7CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgY291bnQrKzsKICAgICAgICBpZiAob3B0aW9uYWwoJywnLCBuZXh0KSkgewogICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ30nLCBuZXh0KSkgewogICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgICBUb2tlbiBlbmRHcm91cCA9IGxlZnRCcmFjZS5lbmRHcm91cDsKICAgICAgICAgIGlmIChlbmRHcm91cC5pc1N5bnRoZXRpYykgewogICAgICAgICAgICAvLyBUaGUgc2Nhbm5lciBkaWQgbm90IHBsYWNlIHRoZSBzeW50aGV0aWMgJ30nIGNvcnJlY3RseS4KICAgICAgICAgICAgdG9rZW4gPSByZXdyaXRlci5tb3ZlU3ludGhldGljKHRva2VuLCBlbmRHcm91cCk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfSBlbHNlIGlmIChuZXh0LmlzSWRlbnRpZmllcikgewogICAgICAgICAgICAvLyBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhbiBpZGVudGlmaWVyLCBhc3N1bWUgYSBtaXNzaW5nIGNvbW1hLgogICAgICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogQ29uc2lkZXIgaW1wcm92ZWQgcmVjb3ZlcnkgZm9yIG1pc3NpbmcgYH1gCiAgICAgICAgICAgIC8vIGJvdGggaGVyZSBhbmQgd2hlbiB0aGUgc2Nhbm5lciBpbnNlcnRzIGEgc3ludGhldGljIGB9YAogICAgICAgICAgICAvLyBmb3Igc2l0dWF0aW9ucyBzdWNoIGFzIGBlbnVtIExldHRlciB7YSwgYiAgIExldHRlciBlO2AuCiAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJywnKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBPdGhlcndpc2UgYXNzdW1lIGEgbWlzc2luZyBgfWAgYW5kIGV4aXQgdGhlIGxvb3AKICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnfScpKTsKICAgICAgICAgICAgdG9rZW4gPSBsZWZ0QnJhY2UuZW5kR3JvdXA7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IG1lcmdlIHRoaXMgZXJyb3IgbWVzc2FnZSB3aXRoIG1pc3NpbmcgY2xhc3MvbWl4aW4gYm9keQogICAgICBsZWZ0QnJhY2UgPSBlbnN1cmVCbG9jayh0b2tlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEVudW1Cb2R5LCBudWxsKTsKICAgICAgdG9rZW4gPSBsZWZ0QnJhY2UuZW5kR3JvdXA7CiAgICB9CiAgICBhc3NlcnQob3B0aW9uYWwoJ30nLCB0b2tlbikpOwogICAgbGlzdGVuZXIuZW5kRW51bShlbnVtS2V5d29yZCwgbGVmdEJyYWNlLCBjb3VudCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUNsYXNzT3JOYW1lZE1peGluQXBwbGljYXRpb24oCiAgICAgIFRva2VuIGFic3RyYWN0VG9rZW4sIFRva2VuIGNsYXNzS2V5d29yZCkgewogICAgYXNzZXJ0KG9wdGlvbmFsKCdjbGFzcycsIGNsYXNzS2V5d29yZCkpOwogICAgVG9rZW4gYmVnaW4gPSBhYnN0cmFjdFRva2VuID8/IGNsYXNzS2V5d29yZDsKICAgIGxpc3RlbmVyLmJlZ2luQ2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbihiZWdpbik7CiAgICBUb2tlbiBuYW1lID0gZW5zdXJlSWRlbnRpZmllcigKICAgICAgICBjbGFzc0tleXdvcmQsIElkZW50aWZpZXJDb250ZXh0LmNsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uRGVjbGFyYXRpb24pOwogICAgVG9rZW4gdG9rZW4gPSBjb21wdXRlVHlwZVBhcmFtT3JBcmcobmFtZSwgdHJ1ZSkucGFyc2VWYXJpYWJsZXMobmFtZSwgdGhpcyk7CiAgICBpZiAob3B0aW9uYWwoJz0nLCB0b2tlbi5uZXh0KSkgewogICAgICBsaXN0ZW5lci5iZWdpbk5hbWVkTWl4aW5BcHBsaWNhdGlvbihiZWdpbiwgYWJzdHJhY3RUb2tlbiwgbmFtZSk7CiAgICAgIHJldHVybiBwYXJzZU5hbWVkTWl4aW5BcHBsaWNhdGlvbih0b2tlbiwgYmVnaW4sIGNsYXNzS2V5d29yZCk7CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lci5iZWdpbkNsYXNzRGVjbGFyYXRpb24oYmVnaW4sIGFic3RyYWN0VG9rZW4sIG5hbWUpOwogICAgICByZXR1cm4gcGFyc2VDbGFzcyh0b2tlbiwgYmVnaW4sIGNsYXNzS2V5d29yZCk7CiAgICB9CiAgfQoKICBUb2tlbiBwYXJzZU5hbWVkTWl4aW5BcHBsaWNhdGlvbigKICAgICAgVG9rZW4gdG9rZW4sIFRva2VuIGJlZ2luLCBUb2tlbiBjbGFzc0tleXdvcmQpIHsKICAgIFRva2VuIGVxdWFscyA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnPScsIGVxdWFscykpOwogICAgdG9rZW4gPSBjb21wdXRlVHlwZSh0b2tlbiwgdHJ1ZSkuZW5zdXJlVHlwZU5vdFZvaWQodG9rZW4sIHRoaXMpOwogICAgdG9rZW4gPSBwYXJzZU1peGluQXBwbGljYXRpb25SZXN0KHRva2VuKTsKICAgIFRva2VuIGltcGxlbWVudHNLZXl3b3JkID0gbnVsbDsKICAgIGlmIChvcHRpb25hbCgnaW1wbGVtZW50cycsIHRva2VuLm5leHQpKSB7CiAgICAgIGltcGxlbWVudHNLZXl3b3JkID0gdG9rZW4ubmV4dDsKICAgICAgdG9rZW4gPSBwYXJzZVR5cGVMaXN0KGltcGxlbWVudHNLZXl3b3JkKTsKICAgIH0KICAgIHRva2VuID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZE5hbWVkTWl4aW5BcHBsaWNhdGlvbigKICAgICAgICBiZWdpbiwgY2xhc3NLZXl3b3JkLCBlcXVhbHMsIGltcGxlbWVudHNLZXl3b3JkLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUGFyc2UgdGhlIHBvcnRpb24gb2YgYSBjbGFzcyBkZWNsYXJhdGlvbiAobm90IGEgbWl4aW4gYXBwbGljYXRpb24pIHRoYXQKICAvLy8gZm9sbG93cyB0aGUgZW5kIG9mIHRoZSB0eXBlIHBhcmFtZXRlcnMuCiAgLy8vCiAgLy8vIGBgYAogIC8vLyBjbGFzc0RlZmluaXRpb246CiAgLy8vICAgbWV0YWRhdGEgYWJzdHJhY3Q/ICdjbGFzcycgaWRlbnRpZmllciB0eXBlUGFyYW1ldGVycz8KICAvLy8gICAgICAgKHN1cGVyY2xhc3MgbWl4aW5zPyk/IGludGVyZmFjZXM/CiAgLy8vICAgICAgICd7JyAobWV0YWRhdGEgY2xhc3NNZW1iZXJEZWZpbml0aW9uKSogJ30nIHwKICAvLy8gICBtZXRhZGF0YSBhYnN0cmFjdD8gJ2NsYXNzJyBtaXhpbkFwcGxpY2F0aW9uQ2xhc3MKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUNsYXNzKFRva2VuIHRva2VuLCBUb2tlbiBiZWdpbiwgVG9rZW4gY2xhc3NLZXl3b3JkKSB7CiAgICBUb2tlbiBzdGFydCA9IHRva2VuOwogICAgdG9rZW4gPSBwYXJzZUNsYXNzSGVhZGVyT3B0KHRva2VuLCBiZWdpbiwgY2xhc3NLZXl3b3JkKTsKICAgIGlmICghb3B0aW9uYWwoJ3snLCB0b2tlbi5uZXh0KSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICB0b2tlbiA9IHBhcnNlQ2xhc3NIZWFkZXJSZWNvdmVyeShzdGFydCwgYmVnaW4sIGNsYXNzS2V5d29yZCk7CiAgICAgIGVuc3VyZUJsb2NrKHRva2VuLCBudWxsLCAnY2xhc3MgZGVjbGFyYXRpb24nKTsKICAgIH0KICAgIHRva2VuID0gcGFyc2VDbGFzc09yTWl4aW5Cb2R5KENsYXNzS2luZC5DbGFzcywgdG9rZW4pOwogICAgbGlzdGVuZXIuZW5kQ2xhc3NEZWNsYXJhdGlvbihiZWdpbiwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VDbGFzc0hlYWRlck9wdChUb2tlbiB0b2tlbiwgVG9rZW4gYmVnaW4sIFRva2VuIGNsYXNzS2V5d29yZCkgewogICAgdG9rZW4gPSBwYXJzZUNsYXNzRXh0ZW5kc09wdCh0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlV2l0aENsYXVzZU9wdCh0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlQ2xhc3NPck1peGluSW1wbGVtZW50c09wdCh0b2tlbik7CiAgICBUb2tlbiBuYXRpdmVUb2tlbjsKICAgIGlmIChvcHRpb25hbCgnbmF0aXZlJywgdG9rZW4ubmV4dCkpIHsKICAgICAgbmF0aXZlVG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICB0b2tlbiA9IHBhcnNlTmF0aXZlQ2xhdXNlKHRva2VuKTsKICAgIH0KICAgIGxpc3RlbmVyLmhhbmRsZUNsYXNzSGVhZGVyKGJlZ2luLCBjbGFzc0tleXdvcmQsIG5hdGl2ZVRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBSZWNvdmVyIGdpdmVuIG91dC1vZi1vcmRlciBjbGF1c2VzIGluIGEgY2xhc3MgaGVhZGVyLgogIFRva2VuIHBhcnNlQ2xhc3NIZWFkZXJSZWNvdmVyeShUb2tlbiB0b2tlbiwgVG9rZW4gYmVnaW4sIFRva2VuIGNsYXNzS2V5d29yZCkgewogICAgZmluYWwgcHJpbWFyeUxpc3RlbmVyID0gbGlzdGVuZXI7CiAgICBmaW5hbCByZWNvdmVyeUxpc3RlbmVyID0gbmV3IENsYXNzSGVhZGVyUmVjb3ZlcnlMaXN0ZW5lcigpOwoKICAgIC8vIFJlcGFyc2UgdG8gZGV0ZXJtaW5lIHdoaWNoIGNsYXVzZXMgaGF2ZSBhbHJlYWR5IGJlZW4gcGFyc2VkCiAgICAvLyBidXQgaW50ZXJjZXB0IHRoZSBldmVudHMgc28gdGhleSBhcmUgbm90IHNlbnQgdG8gdGhlIHByaW1hcnkgbGlzdGVuZXIuCiAgICBsaXN0ZW5lciA9IHJlY292ZXJ5TGlzdGVuZXI7CiAgICB0b2tlbiA9IHBhcnNlQ2xhc3NIZWFkZXJPcHQodG9rZW4sIGJlZ2luLCBjbGFzc0tleXdvcmQpOwogICAgYm9vbCBoYXNFeHRlbmRzID0gcmVjb3ZlcnlMaXN0ZW5lci5leHRlbmRzS2V5d29yZCAhPSBudWxsOwogICAgYm9vbCBoYXNJbXBsZW1lbnRzID0gcmVjb3ZlcnlMaXN0ZW5lci5pbXBsZW1lbnRzS2V5d29yZCAhPSBudWxsOwogICAgYm9vbCBoYXNXaXRoID0gcmVjb3ZlcnlMaXN0ZW5lci53aXRoS2V5d29yZCAhPSBudWxsOwoKICAgIC8vIFVwZGF0ZSB0aGUgcmVjb3ZlcnkgbGlzdGVuZXIgdG8gZm9yd2FyZCBzdWJzZXF1ZW50IGV2ZW50cwogICAgLy8gdG8gdGhlIHByaW1hcnkgbGlzdGVuZXIuCiAgICByZWNvdmVyeUxpc3RlbmVyLmxpc3RlbmVyID0gcHJpbWFyeUxpc3RlbmVyOwoKICAgIC8vIFBhcnNlIGFkZGl0aW9uYWwgb3V0LW9mLW9yZGVyIGNsYXVzZXMKICAgIFRva2VuIHN0YXJ0OwogICAgZG8gewogICAgICBzdGFydCA9IHRva2VuOwoKICAgICAgLy8gQ2hlY2sgZm9yIGV4dHJhbmVvdXMgdG9rZW4gaW4gdGhlIG1pZGRsZSBvZiBhIGNsYXNzIGhlYWRlci4KICAgICAgdG9rZW4gPSBza2lwVW5leHBlY3RlZFRva2VuT3B0KAogICAgICAgICAgdG9rZW4sIGNvbnN0IDxTdHJpbmc+WydleHRlbmRzJywgJ3dpdGgnLCAnaW1wbGVtZW50cycsICd7J10pOwoKICAgICAgLy8gRHVyaW5nIHJlY292ZXJ5LCBjbGF1c2VzIGFyZSBwYXJzZWQgaW4gdGhlIHNhbWUgb3JkZXIKICAgICAgLy8gYW5kIGdlbmVyYXRlIHRoZSBzYW1lIGV2ZW50cyBhcyBpbiB0aGUgcGFyc2VDbGFzc0hlYWRlciBtZXRob2QgYWJvdmUuCiAgICAgIHJlY292ZXJ5TGlzdGVuZXIuY2xlYXIoKTsKCiAgICAgIGlmICh0b2tlbi5uZXh0LmlzS2V5d29yZE9ySWRlbnRpZmllciAmJgogICAgICAgICAgY29uc3QgWydleHRlbmQnLCAnb24nXS5jb250YWlucyh0b2tlbi5uZXh0LmxleGVtZSkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICB0b2tlbi5uZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSW5zdGVhZC53aXRoQXJndW1lbnRzKCdleHRlbmRzJykpOwogICAgICAgIFRva2VuIGluY29ycmVjdEV4dGVuZHNLZXl3b3JkID0gdG9rZW4ubmV4dDsKICAgICAgICB0b2tlbiA9IGNvbXB1dGVUeXBlKGluY29ycmVjdEV4dGVuZHNLZXl3b3JkLCB0cnVlKQogICAgICAgICAgICAuZW5zdXJlVHlwZU5vdFZvaWQoaW5jb3JyZWN0RXh0ZW5kc0tleXdvcmQsIHRoaXMpOwogICAgICAgIGxpc3RlbmVyLmhhbmRsZUNsYXNzRXh0ZW5kcyhpbmNvcnJlY3RFeHRlbmRzS2V5d29yZCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG9rZW4gPSBwYXJzZUNsYXNzRXh0ZW5kc09wdCh0b2tlbik7CiAgICAgIH0KCiAgICAgIGlmIChyZWNvdmVyeUxpc3RlbmVyLmV4dGVuZHNLZXl3b3JkICE9IG51bGwpIHsKICAgICAgICBpZiAoaGFzRXh0ZW5kcykgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICByZWNvdmVyeUxpc3RlbmVyLmV4dGVuZHNLZXl3b3JkLCBmYXN0YS5tZXNzYWdlTXVsdGlwbGVFeHRlbmRzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGhhc1dpdGgpIHsKICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihyZWNvdmVyeUxpc3RlbmVyLmV4dGVuZHNLZXl3b3JkLAogICAgICAgICAgICAgICAgZmFzdGEubWVzc2FnZVdpdGhCZWZvcmVFeHRlbmRzKTsKICAgICAgICAgIH0gZWxzZSBpZiAoaGFzSW1wbGVtZW50cykgewogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHJlY292ZXJ5TGlzdGVuZXIuZXh0ZW5kc0tleXdvcmQsCiAgICAgICAgICAgICAgICBmYXN0YS5tZXNzYWdlSW1wbGVtZW50c0JlZm9yZUV4dGVuZHMpOwogICAgICAgICAgfQogICAgICAgICAgaGFzRXh0ZW5kcyA9IHRydWU7CiAgICAgICAgfQogICAgICB9CgogICAgICB0b2tlbiA9IHBhcnNlV2l0aENsYXVzZU9wdCh0b2tlbik7CgogICAgICBpZiAocmVjb3ZlcnlMaXN0ZW5lci53aXRoS2V5d29yZCAhPSBudWxsKSB7CiAgICAgICAgaWYgKGhhc1dpdGgpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgcmVjb3ZlcnlMaXN0ZW5lci53aXRoS2V5d29yZCwgZmFzdGEubWVzc2FnZU11bHRpcGxlV2l0aCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChoYXNJbXBsZW1lbnRzKSB7CiAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IocmVjb3ZlcnlMaXN0ZW5lci53aXRoS2V5d29yZCwKICAgICAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VJbXBsZW1lbnRzQmVmb3JlV2l0aCk7CiAgICAgICAgICB9CiAgICAgICAgICBoYXNXaXRoID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRva2VuID0gcGFyc2VDbGFzc09yTWl4aW5JbXBsZW1lbnRzT3B0KHRva2VuKTsKCiAgICAgIGlmIChyZWNvdmVyeUxpc3RlbmVyLmltcGxlbWVudHNLZXl3b3JkICE9IG51bGwpIHsKICAgICAgICBpZiAoaGFzSW1wbGVtZW50cykgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihyZWNvdmVyeUxpc3RlbmVyLmltcGxlbWVudHNLZXl3b3JkLAogICAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VNdWx0aXBsZUltcGxlbWVudHMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoYXNJbXBsZW1lbnRzID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGxpc3RlbmVyLmhhbmRsZVJlY292ZXJDbGFzc0hlYWRlcigpOwoKICAgICAgLy8gRXhpdCBpZiBhIGNsYXNzIGJvZHkgaXMgZGV0ZWN0ZWQsIG9yIGlmIG5vIHByb2dyZXNzIGhhcyBiZWVuIG1hZGUKICAgIH0gd2hpbGUgKCFvcHRpb25hbCgneycsIHRva2VuLm5leHQpICYmIHN0YXJ0ICE9IHRva2VuKTsKCiAgICBsaXN0ZW5lciA9IHByaW1hcnlMaXN0ZW5lcjsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlQ2xhc3NFeHRlbmRzT3B0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnZXh0ZW5kcycsIG5leHQpKSB7CiAgICAgIFRva2VuIGV4dGVuZHNLZXl3b3JkID0gbmV4dDsKICAgICAgdG9rZW4gPSBjb21wdXRlVHlwZShuZXh0LCB0cnVlKS5lbnN1cmVUeXBlTm90Vm9pZChuZXh0LCB0aGlzKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlQ2xhc3NFeHRlbmRzKGV4dGVuZHNLZXl3b3JkKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZSh0b2tlbik7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUNsYXNzRXh0ZW5kcyhudWxsKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gaW1wbGVtZW50c0NsYXVzZToKICAvLy8gICAnaW1wbGVtZW50cycgdHlwZU5hbWUgKCcsJyB0eXBlTmFtZSkqCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VDbGFzc09yTWl4aW5JbXBsZW1lbnRzT3B0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZDsKICAgIGludCBpbnRlcmZhY2VzQ291bnQgPSAwOwogICAgaWYgKG9wdGlvbmFsKCdpbXBsZW1lbnRzJywgdG9rZW4ubmV4dCkpIHsKICAgICAgaW1wbGVtZW50c0tleXdvcmQgPSB0b2tlbi5uZXh0OwogICAgICBkbyB7CiAgICAgICAgdG9rZW4gPQogICAgICAgICAgICBjb21wdXRlVHlwZSh0b2tlbi5uZXh0LCB0cnVlKS5lbnN1cmVUeXBlTm90Vm9pZCh0b2tlbi5uZXh0LCB0aGlzKTsKICAgICAgICArK2ludGVyZmFjZXNDb3VudDsKICAgICAgfSB3aGlsZSAob3B0aW9uYWwoJywnLCB0b2tlbi5uZXh0KSk7CiAgICB9CiAgICBsaXN0ZW5lci5oYW5kbGVDbGFzc09yTWl4aW5JbXBsZW1lbnRzKGltcGxlbWVudHNLZXl3b3JkLCBpbnRlcmZhY2VzQ291bnQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBhcnNlIGEgbWl4aW4gZGVjbGFyYXRpb24uCiAgLy8vCiAgLy8vIGBgYAogIC8vLyBtaXhpbkRlY2xhcmF0aW9uOgogIC8vLyAgIG1ldGFkYXRhPyAnbWl4aW4nIFtTaW1wbGVJZGVudGlmaWVyXSBbVHlwZVBhcmFtZXRlckxpc3RdPwogIC8vLyAgICAgICAgW09uQ2xhdXNlXT8gW0ltcGxlbWVudHNDbGF1c2VdPyAneycgW0NsYXNzTWVtYmVyXSogJ30nCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VNaXhpbihUb2tlbiBtaXhpbktleXdvcmQpIHsKICAgIGFzc2VydChvcHRpb25hbCgnbWl4aW4nLCBtaXhpbktleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luQ2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbihtaXhpbktleXdvcmQpOwogICAgVG9rZW4gbmFtZSA9IGVuc3VyZUlkZW50aWZpZXIoCiAgICAgICAgbWl4aW5LZXl3b3JkLCBJZGVudGlmaWVyQ29udGV4dC5jbGFzc09yTWl4aW5PckV4dGVuc2lvbkRlY2xhcmF0aW9uKTsKICAgIFRva2VuIGhlYWRlclN0YXJ0ID0KICAgICAgICBjb21wdXRlVHlwZVBhcmFtT3JBcmcobmFtZSwgdHJ1ZSkucGFyc2VWYXJpYWJsZXMobmFtZSwgdGhpcyk7CiAgICBsaXN0ZW5lci5iZWdpbk1peGluRGVjbGFyYXRpb24obWl4aW5LZXl3b3JkLCBuYW1lKTsKICAgIFRva2VuIHRva2VuID0gcGFyc2VNaXhpbkhlYWRlck9wdChoZWFkZXJTdGFydCwgbWl4aW5LZXl3b3JkKTsKICAgIGlmICghb3B0aW9uYWwoJ3snLCB0b2tlbi5uZXh0KSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICB0b2tlbiA9IHBhcnNlTWl4aW5IZWFkZXJSZWNvdmVyeSh0b2tlbiwgbWl4aW5LZXl3b3JkLCBoZWFkZXJTdGFydCk7CiAgICAgIGVuc3VyZUJsb2NrKHRva2VuLCBudWxsLCAnbWl4aW4gZGVjbGFyYXRpb24nKTsKICAgIH0KICAgIHRva2VuID0gcGFyc2VDbGFzc09yTWl4aW5Cb2R5KENsYXNzS2luZC5NaXhpbiwgdG9rZW4pOwogICAgbGlzdGVuZXIuZW5kTWl4aW5EZWNsYXJhdGlvbihtaXhpbktleXdvcmQsIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlTWl4aW5IZWFkZXJPcHQoVG9rZW4gdG9rZW4sIFRva2VuIG1peGluS2V5d29yZCkgewogICAgdG9rZW4gPSBwYXJzZU1peGluT25PcHQodG9rZW4pOwogICAgdG9rZW4gPSBwYXJzZUNsYXNzT3JNaXhpbkltcGxlbWVudHNPcHQodG9rZW4pOwogICAgbGlzdGVuZXIuaGFuZGxlTWl4aW5IZWFkZXIobWl4aW5LZXl3b3JkKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlTWl4aW5IZWFkZXJSZWNvdmVyeSgKICAgICAgVG9rZW4gdG9rZW4sIFRva2VuIG1peGluS2V5d29yZCwgVG9rZW4gaGVhZGVyU3RhcnQpIHsKICAgIGZpbmFsIHByaW1hcnlMaXN0ZW5lciA9IGxpc3RlbmVyOwogICAgZmluYWwgcmVjb3ZlcnlMaXN0ZW5lciA9IG5ldyBNaXhpbkhlYWRlclJlY292ZXJ5TGlzdGVuZXIoKTsKCiAgICAvLyBSZXBhcnNlIHRvIGRldGVybWluZSB3aGljaCBjbGF1c2VzIGhhdmUgYWxyZWFkeSBiZWVuIHBhcnNlZAogICAgLy8gYnV0IGludGVyY2VwdCB0aGUgZXZlbnRzIHNvIHRoZXkgYXJlIG5vdCBzZW50IHRvIHRoZSBwcmltYXJ5IGxpc3RlbmVyLgogICAgbGlzdGVuZXIgPSByZWNvdmVyeUxpc3RlbmVyOwogICAgdG9rZW4gPSBwYXJzZU1peGluSGVhZGVyT3B0KGhlYWRlclN0YXJ0LCBtaXhpbktleXdvcmQpOwogICAgYm9vbCBoYXNPbiA9IHJlY292ZXJ5TGlzdGVuZXIub25LZXl3b3JkICE9IG51bGw7CiAgICBib29sIGhhc0ltcGxlbWVudHMgPSByZWNvdmVyeUxpc3RlbmVyLmltcGxlbWVudHNLZXl3b3JkICE9IG51bGw7CgogICAgLy8gVXBkYXRlIHRoZSByZWNvdmVyeSBsaXN0ZW5lciB0byBmb3J3YXJkIHN1YnNlcXVlbnQgZXZlbnRzCiAgICAvLyB0byB0aGUgcHJpbWFyeSBsaXN0ZW5lci4KICAgIHJlY292ZXJ5TGlzdGVuZXIubGlzdGVuZXIgPSBwcmltYXJ5TGlzdGVuZXI7CgogICAgLy8gUGFyc2UgYWRkaXRpb25hbCBvdXQtb2Ytb3JkZXIgY2xhdXNlcwogICAgVG9rZW4gc3RhcnQ7CiAgICBkbyB7CiAgICAgIHN0YXJ0ID0gdG9rZW47CgogICAgICAvLyBDaGVjayBmb3IgZXh0cmFuZW91cyB0b2tlbiBpbiB0aGUgbWlkZGxlIG9mIGEgY2xhc3MgaGVhZGVyLgogICAgICB0b2tlbiA9IHNraXBVbmV4cGVjdGVkVG9rZW5PcHQoCiAgICAgICAgICB0b2tlbiwgY29uc3QgPFN0cmluZz5bJ29uJywgJ2ltcGxlbWVudHMnLCAneyddKTsKCiAgICAgIC8vIER1cmluZyByZWNvdmVyeSwgY2xhdXNlcyBhcmUgcGFyc2VkIGluIHRoZSBzYW1lIG9yZGVyIGFuZAogICAgICAvLyBnZW5lcmF0ZSB0aGUgc2FtZSBldmVudHMgYXMgaW4gdGhlIHBhcnNlTWl4aW5IZWFkZXJPcHQgbWV0aG9kIGFib3ZlLgogICAgICByZWNvdmVyeUxpc3RlbmVyLmNsZWFyKCk7CgogICAgICBpZiAodG9rZW4ubmV4dC5pc0tleXdvcmRPcklkZW50aWZpZXIgJiYKICAgICAgICAgIGNvbnN0IFsnZXh0ZW5kJywgJ2V4dGVuZHMnXS5jb250YWlucyh0b2tlbi5uZXh0LmxleGVtZSkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICB0b2tlbi5uZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSW5zdGVhZC53aXRoQXJndW1lbnRzKCdvbicpKTsKICAgICAgICB0b2tlbiA9IHBhcnNlTWl4aW5Pbih0b2tlbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG9rZW4gPSBwYXJzZU1peGluT25PcHQodG9rZW4pOwogICAgICB9CgogICAgICBpZiAocmVjb3ZlcnlMaXN0ZW5lci5vbktleXdvcmQgIT0gbnVsbCkgewogICAgICAgIGlmIChoYXNPbikgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICByZWNvdmVyeUxpc3RlbmVyLm9uS2V5d29yZCwgZmFzdGEubWVzc2FnZU11bHRpcGxlT25DbGF1c2VzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGhhc0ltcGxlbWVudHMpIHsKICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICAgIHJlY292ZXJ5TGlzdGVuZXIub25LZXl3b3JkLCBmYXN0YS5tZXNzYWdlSW1wbGVtZW50c0JlZm9yZU9uKTsKICAgICAgICAgIH0KICAgICAgICAgIGhhc09uID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHRva2VuID0gcGFyc2VDbGFzc09yTWl4aW5JbXBsZW1lbnRzT3B0KHRva2VuKTsKCiAgICAgIGlmIChyZWNvdmVyeUxpc3RlbmVyLmltcGxlbWVudHNLZXl3b3JkICE9IG51bGwpIHsKICAgICAgICBpZiAoaGFzSW1wbGVtZW50cykgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihyZWNvdmVyeUxpc3RlbmVyLmltcGxlbWVudHNLZXl3b3JkLAogICAgICAgICAgICAgIGZhc3RhLm1lc3NhZ2VNdWx0aXBsZUltcGxlbWVudHMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoYXNJbXBsZW1lbnRzID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGxpc3RlbmVyLmhhbmRsZVJlY292ZXJNaXhpbkhlYWRlcigpOwoKICAgICAgLy8gRXhpdCBpZiBhIG1peGluIGJvZHkgaXMgZGV0ZWN0ZWQsIG9yIGlmIG5vIHByb2dyZXNzIGhhcyBiZWVuIG1hZGUKICAgIH0gd2hpbGUgKCFvcHRpb25hbCgneycsIHRva2VuLm5leHQpICYmIHN0YXJ0ICE9IHRva2VuKTsKCiAgICBsaXN0ZW5lciA9IHByaW1hcnlMaXN0ZW5lcjsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gb25DbGF1c2U6CiAgLy8vICAgJ29uJyB0eXBlTmFtZSAoJywnIHR5cGVOYW1lKSoKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZU1peGluT25PcHQoVG9rZW4gdG9rZW4pIHsKICAgIGlmICghb3B0aW9uYWwoJ29uJywgdG9rZW4ubmV4dCkpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlTWl4aW5PbihudWxsLCAwKTsKICAgICAgcmV0dXJuIHRva2VuOwogICAgfQogICAgcmV0dXJuIHBhcnNlTWl4aW5Pbih0b2tlbik7CiAgfQoKICBUb2tlbiBwYXJzZU1peGluT24oVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG9uS2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICAvLyBEdXJpbmcgcmVjb3ZlcnksIHRoZSBbb25LZXl3b3JkXSBjYW4gYmUgImV4dGVuZCIgb3IgImV4dGVuZHMiCiAgICBhc3NlcnQob3B0aW9uYWwoJ29uJywgb25LZXl3b3JkKSB8fAogICAgICAgIG9wdGlvbmFsKCdleHRlbmRzJywgb25LZXl3b3JkKSB8fAogICAgICAgIG9uS2V5d29yZC5sZXhlbWUgPT0gJ2V4dGVuZCcpOwogICAgaW50IHR5cGVDb3VudCA9IDA7CiAgICBkbyB7CiAgICAgIHRva2VuID0gY29tcHV0ZVR5cGUodG9rZW4ubmV4dCwgdHJ1ZSkuZW5zdXJlVHlwZU5vdFZvaWQodG9rZW4ubmV4dCwgdGhpcyk7CiAgICAgICsrdHlwZUNvdW50OwogICAgfSB3aGlsZSAob3B0aW9uYWwoJywnLCB0b2tlbi5uZXh0KSk7CiAgICBsaXN0ZW5lci5oYW5kbGVNaXhpbk9uKG9uS2V5d29yZCwgdHlwZUNvdW50KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gJ2V4dGVuc2lvbicgPGlkZW50aWZpZXI+PyA8dHlwZVBhcmFtZXRlcnM+PyAnb24nIDx0eXBlPiAnPyc/CiAgLy8gICBgeycKICAvLyAgICAgPG1lbWJlckRlY2xhcmF0aW9uPioKICAvLyAgIGB9JwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUV4dGVuc2lvbihUb2tlbiBleHRlbnNpb25LZXl3b3JkKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2V4dGVuc2lvbicsIGV4dGVuc2lvbktleXdvcmQpKTsKICAgIFRva2VuIHRva2VuID0gZXh0ZW5zaW9uS2V5d29yZDsKICAgIFRva2VuIG5hbWUgPSB0b2tlbi5uZXh0OwogICAgaWYgKG5hbWUuaXNJZGVudGlmaWVyICYmICFvcHRpb25hbCgnb24nLCBuYW1lKSkgewogICAgICB0b2tlbiA9IG5hbWU7CiAgICB9IGVsc2UgewogICAgICBuYW1lID0gbnVsbDsKICAgIH0KICAgIHRva2VuID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuLCB0cnVlKS5wYXJzZVZhcmlhYmxlcyh0b2tlbiwgdGhpcyk7CiAgICBsaXN0ZW5lci5iZWdpbkV4dGVuc2lvbkRlY2xhcmF0aW9uKGV4dGVuc2lvbktleXdvcmQsIG5hbWUpOwogICAgVG9rZW4gb25LZXl3b3JkID0gdG9rZW4ubmV4dDsKICAgIGlmICghb3B0aW9uYWwoJ29uJywgb25LZXl3b3JkKSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICBpZiAob3B0aW9uYWwoJ2V4dGVuZHMnLCBvbktleXdvcmQpIHx8CiAgICAgICAgICBvcHRpb25hbCgnaW1wbGVtZW50cycsIG9uS2V5d29yZCkgfHwKICAgICAgICAgIG9wdGlvbmFsKCd3aXRoJywgb25LZXl3b3JkKSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIG9uS2V5d29yZCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEluc3RlYWQud2l0aEFyZ3VtZW50cygnb24nKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgdG9rZW4sIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdC53aXRoQXJndW1lbnRzKCdvbicpKTsKICAgICAgICBvbktleXdvcmQgPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNLZXl3b3JkKHRva2VuLCBLZXl3b3JkLk9OKTsKICAgICAgfQogICAgfQogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZShvbktleXdvcmQsIHRydWUpOwogICAgdG9rZW4gPSB0eXBlSW5mby5lbnN1cmVUeXBlT3JWb2lkKG9uS2V5d29yZCwgdGhpcyk7CiAgICBpZiAoIW9wdGlvbmFsKCd7JywgdG9rZW4ubmV4dCkpIHsKICAgICAgLy8gUmVjb3ZlcnkKICAgICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIHdoaWxlICghbmV4dC5pc0VvZikgewogICAgICAgIGlmIChvcHRpb25hbCgnLCcsIG5leHQpIHx8CiAgICAgICAgICAgIG9wdGlvbmFsKCdleHRlbmRzJywgbmV4dCkgfHwKICAgICAgICAgICAgb3B0aW9uYWwoJ2ltcGxlbWVudHMnLCBuZXh0KSB8fAogICAgICAgICAgICBvcHRpb25hbCgnb24nLCBuZXh0KSB8fAogICAgICAgICAgICBvcHRpb25hbCgnd2l0aCcsIG5leHQpKSB7CiAgICAgICAgICAvLyBSZXBvcnQgYW4gZXJyb3IgYW5kIHNraXAgYCxgIG9yIHNwZWNpZmljIGtleXdvcmQKICAgICAgICAgIC8vIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgYW4gaWRlbnRpZmllcgogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbihuZXh0LCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbik7CiAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICAgIGlmIChuZXh0LmlzSWRlbnRpZmllcikgewogICAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgZW5zdXJlQmxvY2sodG9rZW4sIG51bGwsICdleHRlbnNpb24gZGVjbGFyYXRpb24nKTsKICAgIH0KICAgIC8vIFRPRE8oZGFucnViZWwpOiBEbyBub3QgYWxsb3cgZmllbGRzIG9yIGNvbnN0cnVjdG9ycwogICAgdG9rZW4gPSBwYXJzZUNsYXNzT3JNaXhpbkJvZHkoQ2xhc3NLaW5kLkV4dGVuc2lvbiwgdG9rZW4pOwogICAgbGlzdGVuZXIuZW5kRXh0ZW5zaW9uRGVjbGFyYXRpb24oZXh0ZW5zaW9uS2V5d29yZCwgb25LZXl3b3JkLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVN0cmluZ1BhcnQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG5leHQua2luZCAhPSBTVFJJTkdfVE9LRU4pIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbihuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkU3RyaW5nKTsKICAgICAgbmV4dCA9IHJld3JpdGVyLmluc2VydFRva2VuKHRva2VuLAogICAgICAgICAgbmV3IFN5bnRoZXRpY1N0cmluZ1Rva2VuKFRva2VuVHlwZS5TVFJJTkcsICcnLCBuZXh0LmNoYXJPZmZzZXQpKTsKICAgIH0KICAgIGxpc3RlbmVyLmhhbmRsZVN0cmluZ1BhcnQobmV4dCk7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIC8vLyBJbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciBhZnRlciB0aGUgZ2l2ZW4gW3Rva2VuXSBhbmQgY3JlYXRlIGFuIGVycm9yCiAgLy8vIG1lc3NhZ2UgYmFzZWQgb24gdGhlIGdpdmVuIFtjb250ZXh0XS4gUmV0dXJuIHRoZSBzeW50aGV0aWMgaWRlbnRpZmllciB0aGF0CiAgLy8vIHdhcyBpbnNlcnRlZC4KICBUb2tlbiBpbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0LAogICAgICB7TWVzc2FnZSBtZXNzYWdlLCBUb2tlbiBtZXNzYWdlT25Ub2tlbn0pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihtZXNzYWdlT25Ub2tlbiA/PyBuZXh0LAogICAgICAgIG1lc3NhZ2UgPz8gY29udGV4dC5yZWNvdmVyeVRlbXBsYXRlLndpdGhBcmd1bWVudHMobmV4dCkpOwogICAgcmV0dXJuIHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4pOwogIH0KCiAgLy8vIFBhcnNlIGEgc2ltcGxlIGlkZW50aWZpZXIgYXQgdGhlIGdpdmVuIFt0b2tlbl0sIGFuZCByZXR1cm4gdGhlIGlkZW50aWZpZXIKICAvLy8gdGhhdCB3YXMgcGFyc2VkLgogIC8vLwogIC8vLyBJZiB0aGUgdG9rZW4gaXMgbm90IGFuIGlkZW50aWZpZXIsIG9yIGlzIG5vdCBhcHByb3ByaWF0ZSBmb3IgdXNlIGFzIGFuCiAgLy8vIGlkZW50aWZpZXIgaW4gdGhlIGdpdmVuIFtjb250ZXh0XSwgY3JlYXRlIGEgc3ludGhldGljIGlkZW50aWZpZXIsIHJlcG9ydAogIC8vLyBhbiBlcnJvciwgYW5kIHJldHVybiB0aGUgc3ludGhldGljIGlkZW50aWZpZXIuCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgYXNzZXJ0KGNvbnRleHQgIT0gbnVsbCk7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGlmIChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTikgewogICAgICBpZGVudGlmaWVyID0gY29udGV4dC5lbnN1cmVJZGVudGlmaWVyKHRva2VuLCB0aGlzKTsKICAgICAgYXNzZXJ0KGlkZW50aWZpZXIgIT0gbnVsbCk7CiAgICAgIGFzc2VydChpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcik7CiAgICB9CiAgICBsaXN0ZW5lci5oYW5kbGVJZGVudGlmaWVyKGlkZW50aWZpZXIsIGNvbnRleHQpOwogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQoKICBib29sIG5vdEVvZk9yVmFsdWUoU3RyaW5nIHZhbHVlLCBUb2tlbiB0b2tlbikgewogICAgcmV0dXJuICFpZGVudGljYWwodG9rZW4ua2luZCwgRU9GX1RPS0VOKSAmJgogICAgICAgICFpZGVudGljYWwodmFsdWUsIHRva2VuLnN0cmluZ1ZhbHVlKTsKICB9CgogIFRva2VuIHBhcnNlVHlwZVZhcmlhYmxlc09wdChUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIGNvbXB1dGVUeXBlUGFyYW1PckFyZyh0b2tlbiwgdHJ1ZSkucGFyc2VWYXJpYWJsZXModG9rZW4sIHRoaXMpOwogIH0KCiAgLy8vIFBhcnNlIGEgdG9wIGxldmVsIGZpZWxkIG9yIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBvbmx5IGludm9rZWQgZnJvbSBvdXRzaWRlIHRoZSBwYXJzZXIuIEFzIGEgcmVzdWx0LCB0aGlzCiAgLy8vIG1ldGhvZCB0YWtlcyB0aGUgbmV4dCB0b2tlbiB0byBiZSBjb25zdW1lZCByYXRoZXIgdGhhbiB0aGUgbGFzdCBjb25zdW1lZAogIC8vLyB0b2tlbiBhbmQgcmV0dXJucyB0aGUgdG9rZW4gYWZ0ZXIgdGhlIGxhc3QgY29uc3VtZWQgdG9rZW4gcmF0aGVyIHRoYW4gdGhlCiAgLy8vIGxhc3QgY29uc3VtZWQgdG9rZW4uCiAgVG9rZW4gcGFyc2VUb3BMZXZlbE1lbWJlcihUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSBwYXJzZU1ldGFkYXRhU3RhcihzeW50aGV0aWNQcmV2aW91c1Rva2VuKHRva2VuKSk7CiAgICByZXR1cm4gcGFyc2VUb3BMZXZlbE1lbWJlckltcGwodG9rZW4pLm5leHQ7CiAgfQoKICBUb2tlbiBwYXJzZVRvcExldmVsTWVtYmVySW1wbChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYmVmb3JlU3RhcnQgPSB0b2tlbjsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgbGlzdGVuZXIuYmVnaW5Ub3BMZXZlbE1lbWJlcihuZXh0KTsKCiAgICBUb2tlbiBleHRlcm5hbFRva2VuOwogICAgVG9rZW4gbGF0ZVRva2VuOwogICAgVG9rZW4gdmFyRmluYWxPckNvbnN0OwoKICAgIGlmIChpc01vZGlmaWVyKG5leHQpKSB7CiAgICAgIGlmIChvcHRpb25hbCgnZXh0ZXJuYWwnLCBuZXh0KSkgewogICAgICAgIGV4dGVybmFsVG9rZW4gPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIH0KICAgICAgaWYgKGlzTW9kaWZpZXIobmV4dCkpIHsKICAgICAgICBpZiAob3B0aW9uYWwoJ2ZpbmFsJywgbmV4dCkpIHsKICAgICAgICAgIHZhckZpbmFsT3JDb25zdCA9IHRva2VuID0gbmV4dDsKICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ3ZhcicsIG5leHQpKSB7CiAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdjb25zdCcsIG5leHQpKSB7CiAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdsYXRlJywgbmV4dCkpIHsKICAgICAgICAgIGxhdGVUb2tlbiA9IHRva2VuID0gbmV4dDsKICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgaWYgKGlzTW9kaWZpZXIobmV4dCkgJiYgb3B0aW9uYWwoJ2ZpbmFsJywgbmV4dCkpIHsKICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGlzTW9kaWZpZXIobmV4dCkpIHsKICAgICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgICBpZiAodmFyRmluYWxPckNvbnN0ICE9IG51bGwgJiYKICAgICAgICAgICAgICAob3B0aW9uYWwoJ2ZpbmFsJywgbmV4dCkgfHwKICAgICAgICAgICAgICAgICAgb3B0aW9uYWwoJ3ZhcicsIG5leHQpIHx8CiAgICAgICAgICAgICAgICAgIG9wdGlvbmFsKCdjb25zdCcsIG5leHQpKSkgewogICAgICAgICAgICAvLyBJZiBhbm90aGVyIGB2YXJgLCBgZmluYWxgLCBvciBgY29uc3RgIHRoZW4gZmFsbCB0aHJvdWdoCiAgICAgICAgICAgIC8vIHRvIHBhcnNlIHRoYXQgYXMgcGFydCBvZiB0aGUgbmV4dCB0b3AgbGV2ZWwgZGVjbGFyYXRpb24uCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBNb2RpZmllclJlY292ZXJ5Q29udGV4dCBjb250ZXh0ID0gbmV3IE1vZGlmaWVyUmVjb3ZlcnlDb250ZXh0KHRoaXMpCiAgICAgICAgICAgICAgLi5leHRlcm5hbFRva2VuID0gZXh0ZXJuYWxUb2tlbgogICAgICAgICAgICAgIC4ubGF0ZVRva2VuID0gbGF0ZVRva2VuCiAgICAgICAgICAgICAgLi52YXJGaW5hbE9yQ29uc3QgPSB2YXJGaW5hbE9yQ29uc3Q7CgogICAgICAgICAgICB0b2tlbiA9IGNvbnRleHQucGFyc2VUb3BMZXZlbE1vZGlmaWVycyh0b2tlbik7CiAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwoKICAgICAgICAgICAgZXh0ZXJuYWxUb2tlbiA9IGNvbnRleHQuZXh0ZXJuYWxUb2tlbjsKICAgICAgICAgICAgbGF0ZVRva2VuID0gY29udGV4dC5sYXRlVG9rZW47CiAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCA9IGNvbnRleHQudmFyRmluYWxPckNvbnN0OwoKICAgICAgICAgICAgY29udGV4dCA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgVG9rZW4gYmVmb3JlVHlwZSA9IHRva2VuOwogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZSh0b2tlbiwgZmFsc2UsIHRydWUpOwogICAgdG9rZW4gPSB0eXBlSW5mby5za2lwVHlwZSh0b2tlbik7CiAgICBuZXh0ID0gdG9rZW4ubmV4dDsKCiAgICBUb2tlbiBnZXRPclNldDsKICAgIFN0cmluZyB2YWx1ZSA9IG5leHQuc3RyaW5nVmFsdWU7CiAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnZ2V0JykgfHwgaWRlbnRpY2FsKHZhbHVlLCAnc2V0JykpIHsKICAgICAgaWYgKG5leHQubmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgICBnZXRPclNldCA9IHRva2VuID0gbmV4dDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgfQoKICAgIGlmIChuZXh0LnR5cGUgIT0gVG9rZW5UeXBlLklERU5USUZJRVIpIHsKICAgICAgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwogICAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnZmFjdG9yeScpIHx8IGlkZW50aWNhbCh2YWx1ZSwgJ29wZXJhdG9yJykpIHsKICAgICAgICAvLyBgZmFjdG9yeWAgYW5kIGBvcGVyYXRvcmAgY2FuIGJlIHVzZWQgYXMgYW4gaWRlbnRpZmllci4KICAgICAgICB2YWx1ZSA9IG5leHQubmV4dC5zdHJpbmdWYWx1ZTsKICAgICAgICBpZiAoZ2V0T3JTZXQgPT0gbnVsbCAmJgogICAgICAgICAgICAhaWRlbnRpY2FsKHZhbHVlLCAnKCcpICYmCiAgICAgICAgICAgICFpZGVudGljYWwodmFsdWUsICd7JykgJiYKICAgICAgICAgICAgIWlkZW50aWNhbCh2YWx1ZSwgJzwnKSAmJgogICAgICAgICAgICAhaWRlbnRpY2FsKHZhbHVlLCAnPT4nKSAmJgogICAgICAgICAgICAhaWRlbnRpY2FsKHZhbHVlLCAnPScpICYmCiAgICAgICAgICAgICFpZGVudGljYWwodmFsdWUsICc7JykgJiYKICAgICAgICAgICAgIWlkZW50aWNhbCh2YWx1ZSwgJywnKSkgewogICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgIHZhbHVlID0gbmV4dC5zdHJpbmdWYWx1ZTsKICAgICAgICAgIGlmIChpZGVudGljYWwodmFsdWUsICdmYWN0b3J5JykpIHsKICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICAgIG5leHQsIGZhc3RhLm1lc3NhZ2VGYWN0b3J5VG9wTGV2ZWxEZWNsYXJhdGlvbik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VUb3BMZXZlbE9wZXJhdG9yKTsKICAgICAgICAgICAgaWYgKG5leHQubmV4dC5pc09wZXJhdG9yKSB7CiAgICAgICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgICAgIGlmIChvcHRpb25hbCgnKCcsIG5leHQubmV4dCkpIHsKICAgICAgICAgICAgICAgIHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoCiAgICAgICAgICAgICAgICAgICAgbmV4dCwgJyNzeW50aGV0aWNfaWRlbnRpZmllcl8ke25leHQuY2hhck9mZnNldH0nKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZUludmFsaWRUb3BMZXZlbERlY2xhcmF0aW9uKG5leHQpOwogICAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgICAgfQogICAgICAgIC8vIEZhbGwgdGhyb3VnaCBhbmQgY29udGludWUgcGFyc2luZwogICAgICB9IGVsc2UgaWYgKCFuZXh0LmlzSWRlbnRpZmllcikgewogICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgaWYgKG5leHQuaXNLZXl3b3JkKSB7CiAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gcGFyc2UgdGhlIGtleXdvcmQgYXMgdGhlIGlkZW50aWZpZXIuCiAgICAgICAgICAvLyBlbnN1cmVJZGVudGlmaWVyIHdpbGwgcmVwb3J0IHRoZSBlcnJvci4KICAgICAgICB9IGVsc2UgaWYgKHRva2VuID09IGJlZm9yZVN0YXJ0KSB7CiAgICAgICAgICAvLyBFbnN1cmUgd2UgbWFrZSBwcm9ncmVzcy4KICAgICAgICAgIHJldHVybiBwYXJzZUludmFsaWRUb3BMZXZlbERlY2xhcmF0aW9uKHRva2VuKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gTG9va3MgbGlrZSBhIGRlY2xhcmF0aW9uIG1pc3NpbmcgYW4gaWRlbnRpZmllci4KICAgICAgICAgIC8vIEluc2VydCBzeW50aGV0aWMgaWRlbnRpZmllciBhbmQgZmFsbCB0aHJvdWdoLgogICAgICAgICAgaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQubWV0aG9kRGVjbGFyYXRpb24pOwogICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvLyBBdCB0aGlzIHBvaW50LCBgdG9rZW5gIGlzIGJlZm9yZU5hbWUuCgogICAgbmV4dCA9IG5leHQubmV4dDsKICAgIHZhbHVlID0gbmV4dC5zdHJpbmdWYWx1ZTsKICAgIGlmIChnZXRPclNldCAhPSBudWxsIHx8CiAgICAgICAgaWRlbnRpY2FsKHZhbHVlLCAnKCcpIHx8CiAgICAgICAgaWRlbnRpY2FsKHZhbHVlLCAneycpIHx8CiAgICAgICAgaWRlbnRpY2FsKHZhbHVlLCAnPCcpIHx8CiAgICAgICAgaWRlbnRpY2FsKHZhbHVlLCAnLicpIHx8CiAgICAgICAgaWRlbnRpY2FsKHZhbHVlLCAnPT4nKSkgewogICAgICBpZiAodmFyRmluYWxPckNvbnN0ICE9IG51bGwpIHsKICAgICAgICBpZiAob3B0aW9uYWwoJ3ZhcicsIHZhckZpbmFsT3JDb25zdCkpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodmFyRmluYWxPckNvbnN0LCBmYXN0YS5tZXNzYWdlVmFyUmV0dXJuVHlwZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0LCBmYXN0YS50ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllcik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGxhdGVUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgbGF0ZVRva2VuLCBmYXN0YS50ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllcik7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhcnNlVG9wTGV2ZWxNZXRob2QoYmVmb3JlU3RhcnQsIGV4dGVybmFsVG9rZW4sIGJlZm9yZVR5cGUsCiAgICAgICAgICB0eXBlSW5mbywgZ2V0T3JTZXQsIHRva2VuLm5leHQpOwogICAgfQoKICAgIGlmIChnZXRPclNldCAhPSBudWxsKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBnZXRPclNldCwgZmFzdGEudGVtcGxhdGVFeHRyYW5lb3VzTW9kaWZpZXIpOwogICAgfQogICAgcmV0dXJuIHBhcnNlRmllbGRzKGJlZm9yZVN0YXJ0LCBleHRlcm5hbFRva2VuLCBudWxsLCBudWxsLCBsYXRlVG9rZW4sCiAgICAgICAgdmFyRmluYWxPckNvbnN0LCBiZWZvcmVUeXBlLCB0eXBlSW5mbywgdG9rZW4ubmV4dCwgdHJ1ZSk7CiAgfQoKICBUb2tlbiBwYXJzZUZpZWxkcygKICAgICAgVG9rZW4gYmVmb3JlU3RhcnQsCiAgICAgIFRva2VuIGV4dGVybmFsVG9rZW4sCiAgICAgIFRva2VuIHN0YXRpY1Rva2VuLAogICAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwKICAgICAgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsCiAgICAgIFRva2VuIGJlZm9yZVR5cGUsCiAgICAgIFR5cGVJbmZvIHR5cGVJbmZvLAogICAgICBUb2tlbiBuYW1lLAogICAgICBib29sIGlzVG9wTGV2ZWwpIHsKICAgIGlmIChleHRlcm5hbFRva2VuICE9IG51bGwpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihleHRlcm5hbFRva2VuLCBmYXN0YS5tZXNzYWdlRXh0ZXJuYWxGaWVsZCk7CiAgICB9CiAgICBpZiAoY292YXJpYW50VG9rZW4gIT0gbnVsbCkgewogICAgICBpZiAodmFyRmluYWxPckNvbnN0ICE9IG51bGwgJiYgb3B0aW9uYWwoJ2ZpbmFsJywgdmFyRmluYWxPckNvbnN0KSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoY292YXJpYW50VG9rZW4sIGZhc3RhLm1lc3NhZ2VGaW5hbEFuZENvdmFyaWFudCk7CiAgICAgICAgY292YXJpYW50VG9rZW4gPSBudWxsOwogICAgICB9CiAgICB9CiAgICBpZiAodHlwZUluZm8gPT0gbm9UeXBlKSB7CiAgICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgPT0gbnVsbCAmJiBsYXRlVG9rZW4gPT0gbnVsbCkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmFtZSwgZmFzdGEubWVzc2FnZU1pc3NpbmdDb25zdEZpbmFsVmFyT3JUeXBlKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKHZhckZpbmFsT3JDb25zdCAhPSBudWxsICYmIG9wdGlvbmFsKCd2YXInLCB2YXJGaW5hbE9yQ29uc3QpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLm1lc3NhZ2VUeXBlQWZ0ZXJWYXIpOwogICAgICB9CiAgICB9CgogICAgVG9rZW4gdG9rZW4gPSB0eXBlSW5mby5wYXJzZVR5cGUoYmVmb3JlVHlwZSwgdGhpcyk7CiAgICBhc3NlcnQodG9rZW4ubmV4dCA9PSBuYW1lKTsKCiAgICBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0ID0gaXNUb3BMZXZlbAogICAgICAgID8gSWRlbnRpZmllckNvbnRleHQudG9wTGV2ZWxWYXJpYWJsZURlY2xhcmF0aW9uCiAgICAgICAgOiBJZGVudGlmaWVyQ29udGV4dC5maWVsZERlY2xhcmF0aW9uOwogICAgbmFtZSA9IGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIGNvbnRleHQpOwoKICAgIGludCBmaWVsZENvdW50ID0gMTsKICAgIHRva2VuID0gcGFyc2VGaWVsZEluaXRpYWxpemVyT3B0KAogICAgICAgIG5hbWUsIG5hbWUsIGxhdGVUb2tlbiwgdmFyRmluYWxPckNvbnN0LCBpc1RvcExldmVsKTsKICAgIHdoaWxlIChvcHRpb25hbCgnLCcsIHRva2VuLm5leHQpKSB7CiAgICAgIG5hbWUgPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLm5leHQsIGNvbnRleHQpOwogICAgICB0b2tlbiA9IHBhcnNlRmllbGRJbml0aWFsaXplck9wdCgKICAgICAgICAgIG5hbWUsIG5hbWUsIGxhdGVUb2tlbiwgdmFyRmluYWxPckNvbnN0LCBpc1RvcExldmVsKTsKICAgICAgKytmaWVsZENvdW50OwogICAgfQogICAgVG9rZW4gc2VtaWNvbG9uID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnOycsIHNlbWljb2xvbikpIHsKICAgICAgdG9rZW4gPSBzZW1pY29sb247CiAgICB9IGVsc2UgewogICAgICAvLyBSZWNvdmVyeQogICAgICBpZiAoaXNUb3BMZXZlbCAmJgogICAgICAgICAgYmVmb3JlVHlwZS5uZXh0LmlzSWRlbnRpZmllciAmJgogICAgICAgICAgYmVmb3JlVHlwZS5uZXh0LmxleGVtZSA9PSAnZXh0ZW5zaW9uJykgewogICAgICAgIC8vIExvb2tzIGxpa2UgYW4gZXh0ZW5zaW9uIG1ldGhvZAogICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBSZW1vdmUgd2hlbiBleHRlbnNpb24gbWV0aG9kcyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0CiAgICAgICAgLy8gYmVjYXVzZSB0aGVuICdleHRlbnNpb24nIHdpbGwgYmUgaW50ZXJwcmV0ZWQgYXMgYSBidWlsdC1pbgogICAgICAgIC8vIGFuZCB0aGlzIGNvZGUgd2lsbCBuZXZlciBiZSBleGVjdXRlZAogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIGJlZm9yZVR5cGUubmV4dCwKICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVFeHBlcmltZW50Tm90RW5hYmxlZAogICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMoJ2V4dGVuc2lvbi1tZXRob2RzJykpOwogICAgICAgIHRva2VuID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4odG9rZW4sIFRva2VuVHlwZS5TRU1JQ09MT04pOwogICAgICB9IGVsc2UgewogICAgICAgIHRva2VuID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgICAgfQogICAgfQogICAgaWYgKGlzVG9wTGV2ZWwpIHsKICAgICAgbGlzdGVuZXIuZW5kVG9wTGV2ZWxGaWVsZHMoc3RhdGljVG9rZW4sIGNvdmFyaWFudFRva2VuLCBsYXRlVG9rZW4sCiAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsIGZpZWxkQ291bnQsIGJlZm9yZVN0YXJ0Lm5leHQsIHRva2VuKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmVuZEZpZWxkcyhzdGF0aWNUb2tlbiwgY292YXJpYW50VG9rZW4sIGxhdGVUb2tlbiwKICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwgZmllbGRDb3VudCwgYmVmb3JlU3RhcnQubmV4dCwgdG9rZW4pOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VUb3BMZXZlbE1ldGhvZChUb2tlbiBiZWZvcmVTdGFydCwgVG9rZW4gZXh0ZXJuYWxUb2tlbiwKICAgICAgVG9rZW4gYmVmb3JlVHlwZSwgVHlwZUluZm8gdHlwZUluZm8sIFRva2VuIGdldE9yU2V0LCBUb2tlbiBuYW1lKSB7CiAgICBsaXN0ZW5lci5iZWdpblRvcExldmVsTWV0aG9kKGJlZm9yZVN0YXJ0LCBleHRlcm5hbFRva2VuKTsKCiAgICBUb2tlbiB0b2tlbiA9IHR5cGVJbmZvLnBhcnNlVHlwZShiZWZvcmVUeXBlLCB0aGlzKTsKICAgIGFzc2VydCh0b2tlbi5uZXh0ID09IChnZXRPclNldCA/PyBuYW1lKSk7CiAgICBuYW1lID0gZW5zdXJlSWRlbnRpZmllcigKICAgICAgICBnZXRPclNldCA/PyB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQudG9wTGV2ZWxGdW5jdGlvbkRlY2xhcmF0aW9uKTsKCiAgICBib29sIGlzR2V0dGVyID0gZmFsc2U7CiAgICBpZiAoZ2V0T3JTZXQgPT0gbnVsbCkgewogICAgICB0b2tlbiA9IHBhcnNlTWV0aG9kVHlwZVZhcihuYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIGlzR2V0dGVyID0gb3B0aW9uYWwoImdldCIsIGdldE9yU2V0KTsKICAgICAgdG9rZW4gPSBuYW1lOwogICAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGVWYXJpYWJsZXModG9rZW4ubmV4dCk7CiAgICB9CiAgICB0b2tlbiA9IHBhcnNlR2V0dGVyT3JGb3JtYWxQYXJhbWV0ZXJzKAogICAgICAgIHRva2VuLCBuYW1lLCBpc0dldHRlciwgTWVtYmVyS2luZC5Ub3BMZXZlbE1ldGhvZCk7CiAgICBBc3luY01vZGlmaWVyIHNhdmVkQXN5bmNNb2RpZmllciA9IGFzeW5jU3RhdGU7CiAgICBUb2tlbiBhc3luY1Rva2VuID0gdG9rZW4ubmV4dDsKICAgIHRva2VuID0gcGFyc2VBc3luY01vZGlmaWVyT3B0KHRva2VuKTsKICAgIGlmIChnZXRPclNldCAhPSBudWxsICYmICFpblBsYWluU3luYyAmJiBvcHRpb25hbCgic2V0IiwgZ2V0T3JTZXQpKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoYXN5bmNUb2tlbiwgZmFzdGEubWVzc2FnZVNldHRlck5vdFN5bmMpOwogICAgfQogICAgYm9vbCBpc0V4dGVybmFsID0gZXh0ZXJuYWxUb2tlbiAhPSBudWxsOwogICAgaWYgKGlzRXh0ZXJuYWwgJiYgIW9wdGlvbmFsKCc7JywgdG9rZW4ubmV4dCkpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIGV4dGVybmFsVG9rZW4sIGZhc3RhLm1lc3NhZ2VFeHRlcm5hbE1ldGhvZFdpdGhCb2R5KTsKICAgIH0KICAgIHRva2VuID0gcGFyc2VGdW5jdGlvbkJvZHkodG9rZW4sIGZhbHNlLCBpc0V4dGVybmFsKTsKICAgIGFzeW5jU3RhdGUgPSBzYXZlZEFzeW5jTW9kaWZpZXI7CiAgICBsaXN0ZW5lci5lbmRUb3BMZXZlbE1ldGhvZChiZWZvcmVTdGFydC5uZXh0LCBnZXRPclNldCwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VNZXRob2RUeXBlVmFyKFRva2VuIG5hbWUpIHsKICAgIGlmICghb3B0aW9uYWwoJzwnLCBuYW1lLm5leHQpKSB7CiAgICAgIHJldHVybiBub1R5cGVQYXJhbU9yQXJnLnBhcnNlVmFyaWFibGVzKG5hbWUsIHRoaXMpOwogICAgfQogICAgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVWYXIgPSBjb21wdXRlVHlwZVBhcmFtT3JBcmcobmFtZSwgdHJ1ZSk7CiAgICBUb2tlbiB0b2tlbiA9IHR5cGVWYXIucGFyc2VWYXJpYWJsZXMobmFtZSwgdGhpcyk7CiAgICBpZiAob3B0aW9uYWwoJz0nLCB0b2tlbi5uZXh0KSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4odG9rZW4sIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlRmllbGRJbml0aWFsaXplck9wdChUb2tlbiB0b2tlbiwgVG9rZW4gbmFtZSwgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsIGJvb2wgaXNUb3BMZXZlbCkgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJz0nLCBuZXh0KSkgewogICAgICBUb2tlbiBhc3NpZ25tZW50ID0gbmV4dDsKICAgICAgbGlzdGVuZXIuYmVnaW5GaWVsZEluaXRpYWxpemVyKG5leHQpOwogICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbihuZXh0KTsKICAgICAgbGlzdGVuZXIuZW5kRmllbGRJbml0aWFsaXplcihhc3NpZ25tZW50LCB0b2tlbi5uZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCAmJiAhbmFtZS5pc1N5bnRoZXRpYykgewogICAgICAgIGlmIChvcHRpb25hbCgiY29uc3QiLCB2YXJGaW5hbE9yQ29uc3QpKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgICAgZmFzdGEudGVtcGxhdGVDb25zdEZpZWxkV2l0aG91dEluaXRpYWxpemVyCiAgICAgICAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG5hbWUubGV4ZW1lKSk7CiAgICAgICAgfSBlbHNlIGlmIChpc1RvcExldmVsICYmCiAgICAgICAgICAgIG9wdGlvbmFsKCJmaW5hbCIsIHZhckZpbmFsT3JDb25zdCkgJiYKICAgICAgICAgICAgbGF0ZVRva2VuID09IG51bGwpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgbmFtZSwKICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUZpbmFsRmllbGRXaXRob3V0SW5pdGlhbGl6ZXIKICAgICAgICAgICAgICAgICAgLndpdGhBcmd1bWVudHMobmFtZS5sZXhlbWUpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGlzdGVuZXIuaGFuZGxlTm9GaWVsZEluaXRpYWxpemVyKHRva2VuLm5leHQpOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VWYXJpYWJsZUluaXRpYWxpemVyT3B0KFRva2VuIHRva2VuKSB7CiAgICBpZiAob3B0aW9uYWwoJz0nLCB0b2tlbi5uZXh0KSkgewogICAgICBUb2tlbiBhc3NpZ25tZW50ID0gdG9rZW4ubmV4dDsKICAgICAgbGlzdGVuZXIuYmVnaW5WYXJpYWJsZUluaXRpYWxpemVyKGFzc2lnbm1lbnQpOwogICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbihhc3NpZ25tZW50KTsKICAgICAgbGlzdGVuZXIuZW5kVmFyaWFibGVJbml0aWFsaXplcihhc3NpZ25tZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vVmFyaWFibGVJbml0aWFsaXplcih0b2tlbi5uZXh0KTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlSW5pdGlhbGl6ZXJzT3B0KFRva2VuIHRva2VuKSB7CiAgICBpZiAob3B0aW9uYWwoJzonLCB0b2tlbi5uZXh0KSkgewogICAgICByZXR1cm4gcGFyc2VJbml0aWFsaXplcnModG9rZW4ubmV4dCk7CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lci5oYW5kbGVOb0luaXRpYWxpemVycygpOwogICAgICByZXR1cm4gdG9rZW47CiAgICB9CiAgfQoKICAvLy8gYGBgCiAgLy8vIGluaXRpYWxpemVyczoKICAvLy8gICAnOicgaW5pdGlhbGl6ZXJMaXN0RW50cnkgKCcsJyBpbml0aWFsaXplckxpc3RFbnRyeSkqCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VJbml0aWFsaXplcnMoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGJlZ2luID0gdG9rZW47CiAgICBhc3NlcnQob3B0aW9uYWwoJzonLCBiZWdpbikpOwogICAgbGlzdGVuZXIuYmVnaW5Jbml0aWFsaXplcnMoYmVnaW4pOwogICAgaW50IGNvdW50ID0gMDsKICAgIGJvb2wgb2xkID0gbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zOwogICAgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gZmFsc2U7CiAgICBUb2tlbiBuZXh0ID0gYmVnaW47CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICB0b2tlbiA9IHBhcnNlSW5pdGlhbGl6ZXIobmV4dCk7CiAgICAgICsrY291bnQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAoIW9wdGlvbmFsKCcsJywgbmV4dCkpIHsKICAgICAgICBpZiAoIW5leHQuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgLy8gUmVjb3Zlcnk6IEZvdW5kIGFuIGlkZW50aWZpZXIgd2hpY2ggY291bGQgYmUKICAgICAgICAvLyAxKSBtaXNzaW5nIHByZWNlZGluZyBgLGAgdGh1cyBpdCdzIGFub3RoZXIgaW5pdGlhbGl6ZXIsIG9yCiAgICAgICAgLy8gMikgbWlzc2luZyBwcmVjZWRpbmcgYDtgIHRodXMgaXQncyBhIGNsYXNzIG1lbWJlciwgb3IKICAgICAgICAvLyAzKSBtaXNzaW5nIHByZWNlZGluZyAneycgdGh1cyBpdCdzIGEgc3RhdGVtZW50CiAgICAgICAgaWYgKG9wdGlvbmFsKCdhc3NlcnQnLCBuZXh0KSkgewogICAgICAgICAgbmV4dCA9IG5leHQubmV4dDsKICAgICAgICAgIGlmICghb3B0aW9uYWwoJygnLCBuZXh0KSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIC8vIExvb2tzIGxpa2UgYXNzZXJ0IGV4cHJlc3Npb24gLi4uIGZhbGwgdGhyb3VnaCB0byBpbnNlcnQgY29tbWEKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKG9wdGlvbmFsKCd0aGlzJywgbmV4dCkpIHsKICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDsKICAgICAgICAgICAgaWYgKCFvcHRpb25hbCgnLicsIG5leHQpKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbmV4dCA9IG5leHQubmV4dDsKICAgICAgICAgICAgaWYgKCFuZXh0LmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgICAgICAgaWYgKCFvcHRpb25hbCgnPScsIG5leHQpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgLy8gTG9va3MgbGlrZSBmaWVsZCBhc3NpZ25tZW50Li4uIGZhbGwgdGhyb3VnaCB0byBpbnNlcnQgY29tbWEKICAgICAgICB9CiAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIGVuaGFuY2luZyB0aGlzIHRvIGluZGljYXRlIHRoYXQgd2UgYXJlCiAgICAgICAgLy8gZXhwZWN0aW5nIG9uZSBvZiBgLGAgb3IgYDtgIG9yIGB7YAogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIHRva2VuLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3Qud2l0aEFyZ3VtZW50cygnLCcpKTsKICAgICAgICBuZXh0ID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4odG9rZW4sIFRva2VuVHlwZS5DT01NQSk7CiAgICAgIH0KICAgIH0KICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IG9sZDsKICAgIGxpc3RlbmVyLmVuZEluaXRpYWxpemVycyhjb3VudCwgYmVnaW4sIHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBpbml0aWFsaXplckxpc3RFbnRyeToKICAvLy8gICAnc3VwZXInICgnLicgaWRlbnRpZmllcik/IGFyZ3VtZW50cyB8CiAgLy8vICAgZmllbGRJbml0aWFsaXplciB8CiAgLy8vICAgYXNzZXJ0aW9uCiAgLy8vIDsKICAvLy8KICAvLy8gZmllbGRJbml0aWFsaXplcjoKICAvLy8gICAoJ3RoaXMnICcuJyk/IGlkZW50aWZpZXIgJz0nIGNvbmRpdGlvbmFsRXhwcmVzc2lvbiBjYXNjYWRlU2VjdGlvbioKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUluaXRpYWxpemVyKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGxpc3RlbmVyLmJlZ2luSW5pdGlhbGl6ZXIobmV4dCk7CiAgICBUb2tlbiBiZWZvcmVFeHByZXNzaW9uID0gdG9rZW47CiAgICBpZiAob3B0aW9uYWwoJ2Fzc2VydCcsIG5leHQpKSB7CiAgICAgIHRva2VuID0gcGFyc2VBc3NlcnQodG9rZW4sIEFzc2VydC5Jbml0aWFsaXplcik7CiAgICAgIGxpc3RlbmVyLmVuZEluaXRpYWxpemVyKHRva2VuLm5leHQpOwogICAgICByZXR1cm4gdG9rZW47CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdzdXBlcicsIG5leHQpKSB7CiAgICAgIHJldHVybiBwYXJzZVN1cGVySW5pdGlhbGl6ZXJFeHByZXNzaW9uKHRva2VuKTsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ3RoaXMnLCBuZXh0KSkgewogICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJy4nLCBuZXh0KSkgewogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICBpZiAobmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgIHRva2VuID0gaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcigKICAgICAgICAgICAgICB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQuZmllbGRJbml0aWFsaXplcik7CiAgICAgICAgfQogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIGlmIChvcHRpb25hbCgnPScsIG5leHQpKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VJbml0aWFsaXplckV4cHJlc3Npb25SZXN0KGJlZm9yZUV4cHJlc3Npb24pOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAob3B0aW9uYWwoJygnLCBuZXh0KSkgewogICAgICAgIHRva2VuID0gcGFyc2VJbml0aWFsaXplckV4cHJlc3Npb25SZXN0KGJlZm9yZUV4cHJlc3Npb24pOwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIGlmIChvcHRpb25hbCgneycsIG5leHQpIHx8IG9wdGlvbmFsKCc9PicsIG5leHQpKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgIG5leHQsIGZhc3RhLm1lc3NhZ2VSZWRpcmVjdGluZ0NvbnN0cnVjdG9yV2l0aEJvZHkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgIH0KICAgICAgLy8gUmVjb3ZlcnkKICAgICAgaWYgKG9wdGlvbmFsKCd0aGlzJywgdG9rZW4pKSB7CiAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIGEgYmV0dGVyIGVycm9yIG1lc3NhZ2UgaW5kaWNhdGluZyB0aGF0CiAgICAgICAgLy8gYHRoaXMuPGZpZWxkbmFtZT49YCBpcyBleHBlY3RlZC4KICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJy4nKSk7CiAgICAgICAgcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4odG9rZW4sIFRva2VuVHlwZS5QRVJJT0QpOwogICAgICAgIHRva2VuID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbi5uZXh0KTsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICAvLyBGYWxsIHRocm91Z2ggdG8gcmVjb3ZlcnkKICAgIH0gZWxzZSBpZiAobmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgVG9rZW4gbmV4dDIgPSBuZXh0Lm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnPScsIG5leHQyKSkgewogICAgICAgIHJldHVybiBwYXJzZUluaXRpYWxpemVyRXhwcmVzc2lvblJlc3QodG9rZW4pOwogICAgICB9CiAgICAgIC8vIFJlY292ZXJ5OiBJZiB0aGlzIGxvb2tzIGxpa2UgYW4gZXhwcmVzc2lvbiwKICAgICAgLy8gdGhlbiBmYWxsIHRocm91Z2ggdG8gaW5zZXJ0IHRoZSBMSFMgYW5kIGA9YCBvZiB0aGUgYXNzaWdubWVudCwKICAgICAgLy8gb3RoZXJ3aXNlIGluc2VydCBhbiBgPWAgYW5kIHN5bnRoZXRpYyBpZGVudGlmaWVyLgogICAgICBpZiAoIW5leHQyLmlzT3BlcmF0b3IgJiYgIW9wdGlvbmFsKCcuJywgbmV4dDIpKSB7CiAgICAgICAgdG9rZW4gPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNUb2tlbihuZXh0LCBUb2tlblR5cGUuRVEpOwogICAgICAgIHRva2VuID0gaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQuZXhwcmVzc2lvbiwKICAgICAgICAgICAgbWVzc2FnZTogZmFzdGEubWVzc2FnZU1pc3NpbmdBc3NpZ25tZW50SW5Jbml0aWFsaXplciwKICAgICAgICAgICAgbWVzc2FnZU9uVG9rZW46IG5leHQpOwogICAgICAgIHJldHVybiBwYXJzZUluaXRpYWxpemVyRXhwcmVzc2lvblJlc3QoYmVmb3JlRXhwcmVzc2lvbik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIFJlY292ZXJ5OiBJbnNlcnQgYSBzeW50aGV0aWMgYXNzaWdubWVudC4KICAgICAgdG9rZW4gPSBpbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKAogICAgICAgICAgdG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmZpZWxkSW5pdGlhbGl6ZXIsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS5tZXNzYWdlRXhwZWN0ZWRBbkluaXRpYWxpemVyLCBtZXNzYWdlT25Ub2tlbjogdG9rZW4pOwogICAgICB0b2tlbiA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY1Rva2VuKHRva2VuLCBUb2tlblR5cGUuRVEpOwogICAgICB0b2tlbiA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4pOwogICAgICByZXR1cm4gcGFyc2VJbml0aWFsaXplckV4cHJlc3Npb25SZXN0KGJlZm9yZUV4cHJlc3Npb24pOwogICAgfQogICAgLy8gUmVjb3Zlcnk6CiAgICAvLyBJbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciBhbmQgYXNzaWdubWVudCBvcGVyYXRvcgogICAgLy8gdG8gZW5zdXJlIHRoYXQgdGhlIGV4cHJlc3Npb24gaXMgaW5kZWVkIGFuIGFzc2lnbm1lbnQuCiAgICAvLyBGYWlsaW5nIHRvIGRvIHNvIGNhdXNlcyB0aGlzIHRlc3QgdG8gZmFpbDoKICAgIC8vIHBrZy9mcm9udF9lbmQvdGVzdGNhc2VzL3JlZ3Jlc3MvaXNzdWVfMzExOTIuZGFydAogICAgLy8gVE9ETyhkYW5ydWJlbCk6IEludmVzdGlnYXRlIGJldHRlciByZWNvdmVyeS4KICAgIHRva2VuID0gaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcigKICAgICAgICBiZWZvcmVFeHByZXNzaW9uLCBJZGVudGlmaWVyQ29udGV4dC5maWVsZEluaXRpYWxpemVyLAogICAgICAgIG1lc3NhZ2U6IGZhc3RhLm1lc3NhZ2VNaXNzaW5nQXNzaWdubWVudEluSW5pdGlhbGl6ZXIpOwogICAgcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4odG9rZW4sIFRva2VuVHlwZS5FUSk7CiAgICByZXR1cm4gcGFyc2VJbml0aWFsaXplckV4cHJlc3Npb25SZXN0KGJlZm9yZUV4cHJlc3Npb24pOwogIH0KCiAgLy8vIFBhcnNlIHRoZSBgc3VwZXJgIGluaXRpYWxpemVyOgogIC8vLyBgYGAKICAvLy8gICAnc3VwZXInICgnLicgaWRlbnRpZmllcik/IGFyZ3VtZW50cyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlU3VwZXJJbml0aWFsaXplckV4cHJlc3Npb24oZmluYWwgVG9rZW4gc3RhcnQpIHsKICAgIFRva2VuIHRva2VuID0gc3RhcnQubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnc3VwZXInLCB0b2tlbikpOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJy4nLCBuZXh0KSkgewogICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAobmV4dC5raW5kICE9IElERU5USUZJRVJfVE9LRU4pIHsKICAgICAgICBuZXh0ID0gSWRlbnRpZmllckNvbnRleHQuZXhwcmVzc2lvbkNvbnRpbnVhdGlvbgogICAgICAgICAgICAuZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgdGhpcyk7CiAgICAgIH0KICAgICAgdG9rZW4gPSBuZXh0OwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIGlmICghb3B0aW9uYWwoJygnLCBuZXh0KSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICBpZiAob3B0aW9uYWwoJz8uJywgbmV4dCkpIHsKICAgICAgICAvLyBBbiBlcnJvciBmb3IgYHN1cGVyPy5gIGlzIHJlcG9ydGVkIGluIHBhcnNlU3VwZXJFeHByZXNzaW9uLgogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICBpZiAoIW5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgICAgICAvLyBJbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciBidXQgZG9uJ3QgcmVwb3J0IGFub3RoZXIgZXJyb3IuCiAgICAgICAgICBuZXh0ID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgICAgICAgfQogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICBpZiAob3B0aW9uYWwoJz0nLCBuZXh0KSkgewogICAgICAgIGlmIChvcHRpb25hbCgnc3VwZXInLCB0b2tlbikpIHsKICAgICAgICAgIC8vIHBhcnNlRXhwcmVzc2lvbiB3aWxsIHJlcG9ydCBlcnJvciBvbiBhc3NpZ25tZW50IHRvIHN1cGVyCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgdG9rZW4sIGZhc3RhLm1lc3NhZ2VGaWVsZEluaXRpYWxpemVkT3V0c2lkZURlY2xhcmluZ0NsYXNzKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3Qud2l0aEFyZ3VtZW50cygnKCcpKTsKICAgICAgICByZXdyaXRlci5pbnNlcnRQYXJlbnModG9rZW4sIGZhbHNlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHBhcnNlSW5pdGlhbGl6ZXJFeHByZXNzaW9uUmVzdChzdGFydCk7CiAgfQoKICBUb2tlbiBwYXJzZUluaXRpYWxpemVyRXhwcmVzc2lvblJlc3QoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZEluaXRpYWxpemVyKHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIElmIHRoZSBuZXh0IHRva2VuIGlzIGFuIG9wZW5pbmcgY3VybHkgYnJhY2UsIHJldHVybiBpdC4gT3RoZXJ3aXNlLCB1c2UgdGhlCiAgLy8vIGdpdmVuIFt0ZW1wbGF0ZV0gb3IgW2Jsb2NrS2luZF0gdG8gcmVwb3J0IGFuIGVycm9yLCBpbnNlcnQgYW4gb3BlbmluZyBhbmQKICAvLy8gYSBjbG9zaW5nIGN1cmx5IGJyYWNlLCBhbmQgcmV0dXJuIHRoZSBuZXdseSBpbnNlcnRlZCBvcGVuaW5nIGN1cmx5IGJyYWNlLgogIC8vLyBJZiAgW3RlbXBsYXRlXSBhbmQgW2Jsb2NrS2luZF0gYXJlIGBudWxsYCwgdGhlbiB1c2UKICAvLy8gYSBkZWZhdWx0IGVycm9yIG1lc3NhZ2UgaW5zdGVhZC4KICBUb2tlbiBlbnN1cmVCbG9jayhUb2tlbiB0b2tlbiwKICAgICAgVGVtcGxhdGU8TWVzc2FnZSBGdW5jdGlvbihUb2tlbiB0b2tlbik+IHRlbXBsYXRlLCBTdHJpbmcgYmxvY2tLaW5kKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgneycsIG5leHQpKSByZXR1cm4gbmV4dDsKICAgIGlmICh0ZW1wbGF0ZSA9PSBudWxsKSB7CiAgICAgIGlmIChibG9ja0tpbmQgPT0gbnVsbCkgewogICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiByZW5hbWUgRXhwZWN0ZWRCdXRHb3QgdG8gRXhwZWN0ZWRCZWZvcmUKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJ3snKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IHJlbmFtZSBFeHBlY3RlZENsYXNzT3JNaXhpbkJvZHkKICAgICAgICAvLyAgdG8gRXhwZWN0ZWREZWNsYXJhdGlvbk9yQ2xhdXNlQm9keQogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sCiAgICAgICAgICAgIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRDbGFzc09yTWl4aW5Cb2R5LndpdGhBcmd1bWVudHMoYmxvY2tLaW5kKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgdGVtcGxhdGUud2l0aEFyZ3VtZW50cyhuZXh0KSk7CiAgICB9CiAgICByZXR1cm4gaW5zZXJ0QmxvY2sodG9rZW4pOwogIH0KCiAgVG9rZW4gaW5zZXJ0QmxvY2soVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgQmVnaW5Ub2tlbiBiZWdpbkdyb3VwID0gcmV3cml0ZXIuaW5zZXJ0VG9rZW4odG9rZW4sCiAgICAgICAgbmV3IFN5bnRoZXRpY0JlZ2luVG9rZW4oVG9rZW5UeXBlLk9QRU5fQ1VSTFlfQlJBQ0tFVCwgbmV4dC5vZmZzZXQpKTsKICAgIFRva2VuIGVuZEdyb3VwID0gcmV3cml0ZXIuaW5zZXJ0VG9rZW4oYmVnaW5Hcm91cCwKICAgICAgICBuZXcgU3ludGhldGljVG9rZW4oVG9rZW5UeXBlLkNMT1NFX0NVUkxZX0JSQUNLRVQsIG5leHQub2Zmc2V0KSk7CiAgICBiZWdpbkdyb3VwLmVuZEdyb3VwID0gZW5kR3JvdXA7CiAgICByZXR1cm4gYmVnaW5Hcm91cDsKICB9CgogIC8vLyBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIGNsb3NpbmcgcGFyZW50aGVzaXMsIHJldHVybiBpdC4KICAvLy8gT3RoZXJ3aXNlLCByZXBvcnQgYW4gZXJyb3IgYW5kIHJldHVybiB0aGUgY2xvc2luZyBwYXJlbnRoZXNpcwogIC8vLyBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZCBvcGVuIHBhcmVudGhlc2lzLgogIFRva2VuIGVuc3VyZUNsb3NlUGFyZW4oVG9rZW4gdG9rZW4sIFRva2VuIG9wZW5QYXJlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJyknLCBuZXh0KSkgewogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICAgIGlmIChvcGVuUGFyZW4uZW5kR3JvdXAuaXNTeW50aGV0aWMpIHsKICAgICAgLy8gU2Nhbm5lciBoYXMgYWxyZWFkeSByZXBvcnRlZCBhIG1pc3NpbmcgYClgIGVycm9yLAogICAgICAvLyBidXQgcGxhY2VkIHRoZSBgKWAgaW4gdGhlIHdyb25nIGxvY2F0aW9uLCBzbyBtb3ZlIGl0LgogICAgICByZXR1cm4gcmV3cml0ZXIubW92ZVN5bnRoZXRpYyh0b2tlbiwgb3BlblBhcmVuLmVuZEdyb3VwKTsKICAgIH0KCiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogUGFzcyBpbiBjb250ZXh0IGZvciBiZXR0ZXIgZXJyb3IgbWVzc2FnZS4KICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCcpJykpOwoKICAgIC8vIFNjYW5uZXIgZ3VhcmFudGVlcyBhIGNsb3NpbmcgcGFyZW50aGVzaXMKICAgIC8vIFRPRE8oZGFucnViZWwpOiBJbXByb3ZlIHJlY292ZXJ5IGJ5IGhhdmluZyBjYWxsZXJzIHBhcnNlIHRva2VucwogICAgLy8gYmV0d2VlbiBgdG9rZW5gIGFuZCBgb3BlblBhcmVuLmVuZEdyb3VwYC4KICAgIHJldHVybiBvcGVuUGFyZW4uZW5kR3JvdXA7CiAgfQoKICAvLy8gSWYgdGhlIG5leHQgdG9rZW4gaXMgYSBjb2xvbiwgcmV0dXJuIGl0LiBPdGhlcndpc2UsIHJlcG9ydCBhbgogIC8vLyBlcnJvciwgaW5zZXJ0IGEgc3ludGhldGljIGNvbG9uLCBhbmQgcmV0dXJuIHRoZSBpbnNlcnRlZCBjb2xvbi4KICBUb2tlbiBlbnN1cmVDb2xvbihUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJzonLCBuZXh0KSkgcmV0dXJuIG5leHQ7CiAgICBNZXNzYWdlIG1lc3NhZ2UgPSBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJzonKTsKICAgIFRva2VuIG5ld1Rva2VuID0gbmV3IFN5bnRoZXRpY1Rva2VuKFRva2VuVHlwZS5DT0xPTiwgbmV4dC5jaGFyT2Zmc2V0KTsKICAgIHJldHVybiByZXdyaXRlQW5kUmVjb3Zlcih0b2tlbiwgbWVzc2FnZSwgbmV3VG9rZW4pOwogIH0KCiAgLy8vIElmIHRoZSB0b2tlbiBhZnRlciBbdG9rZW5dIGlzIGEgbm90IGxpdGVyYWwgc3RyaW5nLAogIC8vLyB0aGVuIGluc2VydCBhIHN5bnRoZXRpYyBsaXRlcmFsIHN0cmluZy4KICAvLy8gQ2FsbCBgcGFyc2VMaXRlcmFsU3RyaW5nYCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCiAgVG9rZW4gZW5zdXJlTGl0ZXJhbFN0cmluZyhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAoIWlkZW50aWNhbChuZXh0LmtpbmQsIFNUUklOR19UT0tFTikpIHsKICAgICAgTWVzc2FnZSBtZXNzYWdlID0gZmFzdGEudGVtcGxhdGVFeHBlY3RlZFN0cmluZy53aXRoQXJndW1lbnRzKG5leHQpOwogICAgICBUb2tlbiBuZXdUb2tlbiA9CiAgICAgICAgICBuZXcgU3ludGhldGljU3RyaW5nVG9rZW4oVG9rZW5UeXBlLlNUUklORywgJyIiJywgbmV4dC5jaGFyT2Zmc2V0LCAwKTsKICAgICAgcmV3cml0ZUFuZFJlY292ZXIodG9rZW4sIG1lc3NhZ2UsIG5ld1Rva2VuKTsKICAgIH0KICAgIHJldHVybiBwYXJzZUxpdGVyYWxTdHJpbmcodG9rZW4pOwogIH0KCiAgLy8vIElmIHRoZSB0b2tlbiBhZnRlciBbdG9rZW5dIGlzIGEgc2VtaS1jb2xvbiwgcmV0dXJuIGl0LgogIC8vLyBPdGhlcndpc2UsIHJlcG9ydCBhbiBlcnJvciwgaW5zZXJ0IGEgc3ludGhldGljIHNlbWktY29sb24sCiAgLy8vIGFuZCByZXR1cm4gdGhlIGluc2VydGVkIHNlbWktY29sb24uCiAgVG9rZW4gZW5zdXJlU2VtaWNvbG9uKFRva2VuIHRva2VuKSB7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogT25jZSBhbGwgZXhwZWN0KCc7Jy4uLikgY2FsbCBzaXRlcyBoYXZlIGJlZW4gY29udmVydGVkCiAgICAvLyB0byB1c2UgdGhpcyBtZXRob2QsIHJlbW92ZSBzaW1pbGFyIHNlbWljb2xvbiByZWNvdmVyeSBjb2RlCiAgICAvLyBmcm9tIHRoZSBoYW5kbGVFcnJvciBtZXRob2QgaW4gZWxlbWVudF9saXN0ZW5lci5kYXJ0LgogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJzsnLCBuZXh0KSkgcmV0dXJuIG5leHQ7CgogICAgLy8gRmluZCBhIHRva2VuIG9uIHRoZSBzYW1lIGxpbmUgYXMgd2hlcmUgdGhlICc7JyBzaG91bGQgYmUgaW5zZXJ0ZWQuCiAgICAvLyBSZXBvcnRpbmcgdGhlIGVycm9yIG9uIHRoaXMgdG9rZW4gbWFrZXMgaXQgZWFzaWVyCiAgICAvLyBmb3IgdXNlcnMgdG8gdW5kZXJzdGFuZCBhbmQgZml4IHRoZSBlcnJvci4KICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoZmluZFByZXZpb3VzTm9uWmVyb0xlbmd0aFRva2VuKHRva2VuKSwKICAgICAgICBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQWZ0ZXJCdXRHb3Qud2l0aEFyZ3VtZW50cygnOycpKTsKICAgIHJldHVybiByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNUb2tlbih0b2tlbiwgVG9rZW5UeXBlLlNFTUlDT0xPTik7CiAgfQoKICAvLy8gUmVwb3J0IGFuIGVycm9yIGF0IHRoZSB0b2tlbiBhZnRlciBbdG9rZW5dIHRoYXQgaGFzIHRoZSBnaXZlbiBbbWVzc2FnZV0uCiAgLy8vIEluc2VydCB0aGUgW25ld1Rva2VuXSBhZnRlciBbdG9rZW5dIGFuZCByZXR1cm4gW25ld1Rva2VuXS4KICBUb2tlbiByZXdyaXRlQW5kUmVjb3ZlcihUb2tlbiB0b2tlbiwgTWVzc2FnZSBtZXNzYWdlLCBUb2tlbiBuZXdUb2tlbikgewogICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbi5uZXh0LCBtZXNzYWdlKTsKICAgIHJldHVybiByZXdyaXRlci5pbnNlcnRUb2tlbih0b2tlbiwgbmV3VG9rZW4pOwogIH0KCiAgLy8vIFJlcGxhY2UgdGhlIHRva2VuIGFmdGVyIFt0b2tlbl0gd2l0aCBgW2AgZm9sbG93ZWQgYnkgYF1gCiAgLy8vIGFuZCByZXR1cm4gW3Rva2VuXS4KICBUb2tlbiByZXdyaXRlU3F1YXJlQnJhY2tldHMoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdbXScsIG5leHQpKTsKICAgIFRva2VuIHJlcGxhY2VtZW50ID0gbGluaygKICAgICAgICBuZXcgQmVnaW5Ub2tlbihUb2tlblR5cGUuT1BFTl9TUVVBUkVfQlJBQ0tFVCwgbmV4dC5vZmZzZXQpLAogICAgICAgIG5ldyBUb2tlbihUb2tlblR5cGUuQ0xPU0VfU1FVQVJFX0JSQUNLRVQsIG5leHQub2Zmc2V0ICsgMSkpOwogICAgcmV3cml0ZXIucmVwbGFjZVRva2VuRm9sbG93aW5nKHRva2VuLCByZXBsYWNlbWVudCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUmVwb3J0IHRoZSBnaXZlbiB0b2tlbiBhcyB1bmV4cGVjdGVkIGFuZCByZXR1cm4gdGhlIG5leHQgdG9rZW4gaWYgdGhlIG5leHQKICAvLy8gdG9rZW4gaXMgb25lIG9mIHRoZSBbZXhwZWN0ZWROZXh0XSwgb3RoZXJ3aXNlIGp1c3QgcmV0dXJuIHRoZSBnaXZlbiB0b2tlbi4KICBUb2tlbiBza2lwVW5leHBlY3RlZFRva2VuT3B0KFRva2VuIHRva2VuLCBMaXN0PFN0cmluZz4gZXhwZWN0ZWROZXh0KSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChuZXh0LmtleXdvcmQgPT0gbnVsbCkgewogICAgICBmaW5hbCBTdHJpbmcgbmV4dFZhbHVlID0gbmV4dC5uZXh0LnN0cmluZ1ZhbHVlOwogICAgICBmb3IgKFN0cmluZyBleHBlY3RlZFZhbHVlIGluIGV4cGVjdGVkTmV4dCkgewogICAgICAgIGlmIChpZGVudGljYWwobmV4dFZhbHVlLCBleHBlY3RlZFZhbHVlKSkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbihuZXh0LCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbik7CiAgICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlTmF0aXZlQ2xhdXNlKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuYXRpdmVUb2tlbiA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnbmF0aXZlJywgbmF0aXZlVG9rZW4pKTsKICAgIGJvb2wgaGFzTmFtZSA9IGZhbHNlOwogICAgaWYgKHRva2VuLm5leHQua2luZCA9PSBTVFJJTkdfVE9LRU4pIHsKICAgICAgaGFzTmFtZSA9IHRydWU7CiAgICAgIHRva2VuID0gcGFyc2VMaXRlcmFsU3RyaW5nKHRva2VuKTsKICAgIH0KICAgIGxpc3RlbmVyLmhhbmRsZU5hdGl2ZUNsYXVzZShuYXRpdmVUb2tlbiwgaGFzTmFtZSk7CiAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgIG5hdGl2ZVRva2VuLCBmYXN0YS5tZXNzYWdlTmF0aXZlQ2xhdXNlU2hvdWxkQmVBbm5vdGF0aW9uKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHNraXBDbGFzc09yTWl4aW5Cb2R5KFRva2VuIHRva2VuKSB7CiAgICAvLyBUaGUgc2Nhbm5lciBlbnN1cmVzIHRoYXQgYHtgIGFsd2F5cyBoYXMgYSBjbG9zaW5nIGB9YC4KICAgIHJldHVybiBlbnN1cmVCbG9jayh0b2tlbiwgbnVsbCwgbnVsbCk7CiAgfQoKICAvLy8gYGBgCiAgLy8vIGNsYXNzQm9keToKICAvLy8gICAneycgY2xhc3NNZW1iZXIqICd9JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQ2xhc3NPck1peGluQm9keShDbGFzc0tpbmQga2luZCwgVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGJlZ2luID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCd7JywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luQ2xhc3NPck1peGluQm9keShraW5kLCB0b2tlbik7CiAgICBpbnQgY291bnQgPSAwOwogICAgd2hpbGUgKG5vdEVvZk9yVmFsdWUoJ30nLCB0b2tlbi5uZXh0KSkgewogICAgICB0b2tlbiA9IHBhcnNlQ2xhc3NPck1peGluTWVtYmVySW1wbCh0b2tlbik7CiAgICAgICsrY291bnQ7CiAgICB9CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ30nLCB0b2tlbikpOwogICAgbGlzdGVuZXIuZW5kQ2xhc3NPck1peGluQm9keShraW5kLCBjb3VudCwgYmVnaW4sIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIGJvb2wgaXNVbmFyeU1pbnVzKFRva2VuIHRva2VuKSA9PgogICAgICB0b2tlbi5raW5kID09IElERU5USUZJRVJfVE9LRU4gJiYKICAgICAgdG9rZW4ubGV4ZW1lID09ICd1bmFyeScgJiYKICAgICAgb3B0aW9uYWwoJy0nLCB0b2tlbi5uZXh0KTsKCiAgLy8vIFBhcnNlIGEgY2xhc3Mgb3IgbWl4aW4gbWVtYmVyLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBvbmx5IGludm9rZWQgZnJvbSBvdXRzaWRlIHRoZSBwYXJzZXIuIEFzIGEgcmVzdWx0LCB0aGlzCiAgLy8vIG1ldGhvZCB0YWtlcyB0aGUgbmV4dCB0b2tlbiB0byBiZSBjb25zdW1lZCByYXRoZXIgdGhhbiB0aGUgbGFzdCBjb25zdW1lZAogIC8vLyB0b2tlbiBhbmQgcmV0dXJucyB0aGUgdG9rZW4gYWZ0ZXIgdGhlIGxhc3QgY29uc3VtZWQgdG9rZW4gcmF0aGVyIHRoYW4gdGhlCiAgLy8vIGxhc3QgY29uc3VtZWQgdG9rZW4uCiAgVG9rZW4gcGFyc2VDbGFzc09yTWl4aW5NZW1iZXIoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBwYXJzZUNsYXNzT3JNaXhpbk1lbWJlckltcGwoc3ludGhldGljUHJldmlvdXNUb2tlbih0b2tlbikpLm5leHQ7CiAgfQoKICAvLy8gYGBgCiAgLy8vIGNsYXNzTWVtYmVyOgogIC8vLyAgIGZpZWxkRGVjbGFyYXRpb24gfAogIC8vLyAgIGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gfAogIC8vLyAgIG1ldGhvZERlY2xhcmF0aW9uCiAgLy8vIDsKICAvLy8KICAvLy8gbWl4aW5NZW1iZXI6CiAgLy8vICAgZmllbGREZWNsYXJhdGlvbiB8CiAgLy8vICAgbWV0aG9kRGVjbGFyYXRpb24KICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUNsYXNzT3JNaXhpbk1lbWJlckltcGwoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGJlZm9yZVN0YXJ0ID0gdG9rZW4gPSBwYXJzZU1ldGFkYXRhU3Rhcih0b2tlbik7CgogICAgVG9rZW4gY292YXJpYW50VG9rZW47CiAgICBUb2tlbiBleHRlcm5hbFRva2VuOwogICAgVG9rZW4gbGF0ZVRva2VuOwogICAgVG9rZW4gc3RhdGljVG9rZW47CiAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3Q7CgogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAoaXNNb2RpZmllcihuZXh0KSkgewogICAgICBpZiAob3B0aW9uYWwoJ2V4dGVybmFsJywgbmV4dCkpIHsKICAgICAgICBleHRlcm5hbFRva2VuID0gdG9rZW4gPSBuZXh0OwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICAgIGlmIChpc01vZGlmaWVyKG5leHQpKSB7CiAgICAgICAgaWYgKG9wdGlvbmFsKCdzdGF0aWMnLCBuZXh0KSkgewogICAgICAgICAgc3RhdGljVG9rZW4gPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdjb3ZhcmlhbnQnLCBuZXh0KSkgewogICAgICAgICAgY292YXJpYW50VG9rZW4gPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9CiAgICAgICAgaWYgKGlzTW9kaWZpZXIobmV4dCkpIHsKICAgICAgICAgIGlmIChvcHRpb25hbCgnZmluYWwnLCBuZXh0KSkgewogICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgndmFyJywgbmV4dCkpIHsKICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2NvbnN0JywgbmV4dCkgJiYgY292YXJpYW50VG9rZW4gPT0gbnVsbCkgewogICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgnbGF0ZScsIG5leHQpKSB7CiAgICAgICAgICAgIGxhdGVUb2tlbiA9IHRva2VuID0gbmV4dDsKICAgICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICAgIGlmIChpc01vZGlmaWVyKG5leHQpICYmIG9wdGlvbmFsKCdmaW5hbCcsIG5leHQpKSB7CiAgICAgICAgICAgICAgdmFyRmluYWxPckNvbnN0ID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaXNNb2RpZmllcihuZXh0KSkgewogICAgICAgICAgICBNb2RpZmllclJlY292ZXJ5Q29udGV4dCBjb250ZXh0ID0gbmV3IE1vZGlmaWVyUmVjb3ZlcnlDb250ZXh0KHRoaXMpCiAgICAgICAgICAgICAgLi5jb3ZhcmlhbnRUb2tlbiA9IGNvdmFyaWFudFRva2VuCiAgICAgICAgICAgICAgLi5leHRlcm5hbFRva2VuID0gZXh0ZXJuYWxUb2tlbgogICAgICAgICAgICAgIC4ubGF0ZVRva2VuID0gbGF0ZVRva2VuCiAgICAgICAgICAgICAgLi5zdGF0aWNUb2tlbiA9IHN0YXRpY1Rva2VuCiAgICAgICAgICAgICAgLi52YXJGaW5hbE9yQ29uc3QgPSB2YXJGaW5hbE9yQ29uc3Q7CgogICAgICAgICAgICB0b2tlbiA9IGNvbnRleHQucGFyc2VDbGFzc01lbWJlck1vZGlmaWVycyh0b2tlbik7CiAgICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwoKICAgICAgICAgICAgY292YXJpYW50VG9rZW4gPSBjb250ZXh0LmNvdmFyaWFudFRva2VuOwogICAgICAgICAgICBleHRlcm5hbFRva2VuID0gY29udGV4dC5leHRlcm5hbFRva2VuOwogICAgICAgICAgICBsYXRlVG9rZW4gPSBjb250ZXh0LmxhdGVUb2tlbjsKICAgICAgICAgICAgc3RhdGljVG9rZW4gPSBjb250ZXh0LnN0YXRpY1Rva2VuOwogICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSBjb250ZXh0LnZhckZpbmFsT3JDb25zdDsKCiAgICAgICAgICAgIGNvbnRleHQgPSBudWxsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGxpc3RlbmVyLmJlZ2luTWVtYmVyKCk7CgogICAgVG9rZW4gYmVmb3JlVHlwZSA9IHRva2VuOwogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZSh0b2tlbiwgZmFsc2UsIHRydWUpOwogICAgdG9rZW4gPSB0eXBlSW5mby5za2lwVHlwZSh0b2tlbik7CiAgICBuZXh0ID0gdG9rZW4ubmV4dDsKCiAgICBUb2tlbiBnZXRPclNldDsKICAgIGlmIChuZXh0LnR5cGUgIT0gVG9rZW5UeXBlLklERU5USUZJRVIpIHsKICAgICAgU3RyaW5nIHZhbHVlID0gbmV4dC5zdHJpbmdWYWx1ZTsKICAgICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2dldCcpIHx8IGlkZW50aWNhbCh2YWx1ZSwgJ3NldCcpKSB7CiAgICAgICAgaWYgKG5leHQubmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgICAgIGdldE9yU2V0ID0gdG9rZW4gPSBuZXh0OwogICAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgfQogICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBjb250aW51ZSBwYXJzaW5nIGBnZXRgIG9yIGBzZXRgIGFzIGFuIGlkZW50aWZpZXIuCiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnZmFjdG9yeScpKSB7CiAgICAgICAgVG9rZW4gbmV4dDIgPSBuZXh0Lm5leHQ7CiAgICAgICAgaWYgKG5leHQyLmlzSWRlbnRpZmllciB8fCBuZXh0Mi5pc01vZGlmaWVyKSB7CiAgICAgICAgICBpZiAoYmVmb3JlVHlwZSAhPSB0b2tlbikgewogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBmYXN0YS5tZXNzYWdlVHlwZUJlZm9yZUZhY3RvcnkpOwogICAgICAgICAgfQogICAgICAgICAgdG9rZW4gPSBwYXJzZUZhY3RvcnlNZXRob2QodG9rZW4sIGJlZm9yZVN0YXJ0LCBleHRlcm5hbFRva2VuLAogICAgICAgICAgICAgIHN0YXRpY1Rva2VuID8/IGNvdmFyaWFudFRva2VuLCB2YXJGaW5hbE9yQ29uc3QpOwogICAgICAgICAgbGlzdGVuZXIuZW5kTWVtYmVyKCk7CiAgICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgICAgfQogICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBjb250aW51ZSBwYXJzaW5nIGBmYWN0b3J5YCBhcyBhbiBpZGVudGlmaWVyLgogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ29wZXJhdG9yJykpIHsKICAgICAgICBUb2tlbiBuZXh0MiA9IG5leHQubmV4dDsKICAgICAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZVBhcmFtID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKG5leHQpOwogICAgICAgIC8vIGBvcGVyYXRvcmAgY2FuIGJlIHVzZWQgYXMgYW4gaWRlbnRpZmllciBhcyBpbgogICAgICAgIC8vIGBpbnQgb3BlcmF0b3I8VD4oKWAgb3IgYGludCBvcGVyYXRvciA9IDJgCiAgICAgICAgaWYgKG5leHQyLmlzVXNlckRlZmluYWJsZU9wZXJhdG9yICYmIHR5cGVQYXJhbSA9PSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlTWV0aG9kKAogICAgICAgICAgICAgIGJlZm9yZVN0YXJ0LAogICAgICAgICAgICAgIGV4dGVybmFsVG9rZW4sCiAgICAgICAgICAgICAgc3RhdGljVG9rZW4sCiAgICAgICAgICAgICAgY292YXJpYW50VG9rZW4sCiAgICAgICAgICAgICAgbGF0ZVRva2VuLAogICAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwKICAgICAgICAgICAgICBiZWZvcmVUeXBlLAogICAgICAgICAgICAgIHR5cGVJbmZvLAogICAgICAgICAgICAgIGdldE9yU2V0LAogICAgICAgICAgICAgIHRva2VuLm5leHQpOwogICAgICAgICAgbGlzdGVuZXIuZW5kTWVtYmVyKCk7CiAgICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgnPT09JywgbmV4dDIpIHx8CiAgICAgICAgICAgIG9wdGlvbmFsKCchPT0nLCBuZXh0MikgfHwKICAgICAgICAgICAgKG5leHQyLmlzT3BlcmF0b3IgJiYKICAgICAgICAgICAgICAgICFvcHRpb25hbCgnPScsIG5leHQyKSAmJgogICAgICAgICAgICAgICAgIW9wdGlvbmFsKCc8JywgbmV4dDIpKSkgewogICAgICAgICAgLy8gUmVjb3Zlcnk6IEludmFsaWQgb3BlcmF0b3IKICAgICAgICAgIHJldHVybiBwYXJzZUludmFsaWRPcGVyYXRvckRlY2xhcmF0aW9uKAogICAgICAgICAgICAgIGJlZm9yZVN0YXJ0LAogICAgICAgICAgICAgIGV4dGVybmFsVG9rZW4sCiAgICAgICAgICAgICAgc3RhdGljVG9rZW4sCiAgICAgICAgICAgICAgY292YXJpYW50VG9rZW4sCiAgICAgICAgICAgICAgbGF0ZVRva2VuLAogICAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwKICAgICAgICAgICAgICBiZWZvcmVUeXBlKTsKICAgICAgICB9IGVsc2UgaWYgKGlzVW5hcnlNaW51cyhuZXh0MikpIHsKICAgICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgICB0b2tlbiA9IHBhcnNlTWV0aG9kKAogICAgICAgICAgICAgIGJlZm9yZVN0YXJ0LAogICAgICAgICAgICAgIGV4dGVybmFsVG9rZW4sCiAgICAgICAgICAgICAgc3RhdGljVG9rZW4sCiAgICAgICAgICAgICAgY292YXJpYW50VG9rZW4sCiAgICAgICAgICAgICAgbGF0ZVRva2VuLAogICAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwKICAgICAgICAgICAgICBiZWZvcmVUeXBlLAogICAgICAgICAgICAgIHR5cGVJbmZvLAogICAgICAgICAgICAgIGdldE9yU2V0LAogICAgICAgICAgICAgIHRva2VuLm5leHQpOwogICAgICAgICAgbGlzdGVuZXIuZW5kTWVtYmVyKCk7CiAgICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgICAgfQogICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBjb250aW51ZSBwYXJzaW5nIGBvcGVyYXRvcmAgYXMgYW4gaWRlbnRpZmllci4KICAgICAgfSBlbHNlIGlmICghbmV4dC5pc0lkZW50aWZpZXIgfHwKICAgICAgICAgIChpZGVudGljYWwodmFsdWUsICd0eXBlZGVmJykgJiYKICAgICAgICAgICAgICB0b2tlbiA9PSBiZWZvcmVTdGFydCAmJgogICAgICAgICAgICAgIG5leHQubmV4dC5pc0lkZW50aWZpZXIpKSB7CiAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICByZXR1cm4gcmVjb3ZlckZyb21JbnZhbGlkQ2xhc3NNZW1iZXIoCiAgICAgICAgICAgIHRva2VuLAogICAgICAgICAgICBiZWZvcmVTdGFydCwKICAgICAgICAgICAgZXh0ZXJuYWxUb2tlbiwKICAgICAgICAgICAgc3RhdGljVG9rZW4sCiAgICAgICAgICAgIGNvdmFyaWFudFRva2VuLAogICAgICAgICAgICBsYXRlVG9rZW4sCiAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwKICAgICAgICAgICAgYmVmb3JlVHlwZSwKICAgICAgICAgICAgdHlwZUluZm8sCiAgICAgICAgICAgIGdldE9yU2V0KTsKICAgICAgfQogICAgfSBlbHNlIGlmICh0eXBlSW5mbyA9PSBub1R5cGUgJiYgdmFyRmluYWxPckNvbnN0ID09IG51bGwpIHsKICAgICAgVG9rZW4gbmV4dDIgPSBuZXh0Lm5leHQ7CiAgICAgIGlmIChuZXh0Mi5pc1VzZXJEZWZpbmFibGVPcGVyYXRvciAmJiBuZXh0Mi5lbmRHcm91cCA9PSBudWxsKSB7CiAgICAgICAgU3RyaW5nIHZhbHVlID0gbmV4dDIubmV4dC5zdHJpbmdWYWx1ZTsKICAgICAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnKCcpIHx8CiAgICAgICAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJ3snKSB8fAogICAgICAgICAgICBpZGVudGljYWwodmFsdWUsICc9PicpKSB7CiAgICAgICAgICAvLyBSZWNvdmVyeTogTWlzc2luZyBgb3BlcmF0b3JgIGtleXdvcmQKICAgICAgICAgIHJldHVybiBwYXJzZUludmFsaWRPcGVyYXRvckRlY2xhcmF0aW9uKAogICAgICAgICAgICAgIGJlZm9yZVN0YXJ0LAogICAgICAgICAgICAgIGV4dGVybmFsVG9rZW4sCiAgICAgICAgICAgICAgc3RhdGljVG9rZW4sCiAgICAgICAgICAgICAgY292YXJpYW50VG9rZW4sCiAgICAgICAgICAgICAgbGF0ZVRva2VuLAogICAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwKICAgICAgICAgICAgICBiZWZvcmVUeXBlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBBdCB0aGlzIHBvaW50LCB0b2tlbiBpcyBiZWZvcmUgdGhlIG5hbWUsIGFuZCBuZXh0IGlzIHRoZSBuYW1lCiAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgU3RyaW5nIHZhbHVlID0gbmV4dC5zdHJpbmdWYWx1ZTsKICAgIGlmIChnZXRPclNldCAhPSBudWxsIHx8CiAgICAgICAgaWRlbnRpY2FsKHZhbHVlLCAnKCcpIHx8CiAgICAgICAgaWRlbnRpY2FsKHZhbHVlLCAneycpIHx8CiAgICAgICAgaWRlbnRpY2FsKHZhbHVlLCAnPCcpIHx8CiAgICAgICAgaWRlbnRpY2FsKHZhbHVlLCAnLicpIHx8CiAgICAgICAgaWRlbnRpY2FsKHZhbHVlLCAnPT4nKSkgewogICAgICB0b2tlbiA9IHBhcnNlTWV0aG9kKAogICAgICAgICAgYmVmb3JlU3RhcnQsCiAgICAgICAgICBleHRlcm5hbFRva2VuLAogICAgICAgICAgc3RhdGljVG9rZW4sCiAgICAgICAgICBjb3ZhcmlhbnRUb2tlbiwKICAgICAgICAgIGxhdGVUb2tlbiwKICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwKICAgICAgICAgIGJlZm9yZVR5cGUsCiAgICAgICAgICB0eXBlSW5mbywKICAgICAgICAgIGdldE9yU2V0LAogICAgICAgICAgdG9rZW4ubmV4dCk7CiAgICB9IGVsc2UgewogICAgICBpZiAoZ2V0T3JTZXQgIT0gbnVsbCkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICAgIGdldE9yU2V0LCBmYXN0YS50ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllcik7CiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZUZpZWxkcygKICAgICAgICAgIGJlZm9yZVN0YXJ0LAogICAgICAgICAgZXh0ZXJuYWxUb2tlbiwKICAgICAgICAgIHN0YXRpY1Rva2VuLAogICAgICAgICAgY292YXJpYW50VG9rZW4sCiAgICAgICAgICBsYXRlVG9rZW4sCiAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsCiAgICAgICAgICBiZWZvcmVUeXBlLAogICAgICAgICAgdHlwZUluZm8sCiAgICAgICAgICB0b2tlbi5uZXh0LAogICAgICAgICAgZmFsc2UpOwogICAgfQogICAgbGlzdGVuZXIuZW5kTWVtYmVyKCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZU1ldGhvZCgKICAgICAgVG9rZW4gYmVmb3JlU3RhcnQsCiAgICAgIFRva2VuIGV4dGVybmFsVG9rZW4sCiAgICAgIFRva2VuIHN0YXRpY1Rva2VuLAogICAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwKICAgICAgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsCiAgICAgIFRva2VuIGJlZm9yZVR5cGUsCiAgICAgIFR5cGVJbmZvIHR5cGVJbmZvLAogICAgICBUb2tlbiBnZXRPclNldCwKICAgICAgVG9rZW4gbmFtZSkgewogICAgaWYgKGxhdGVUb2tlbiAhPSBudWxsKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBsYXRlVG9rZW4sIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgIH0KICAgIGJvb2wgaXNPcGVyYXRvciA9IGZhbHNlOwogICAgaWYgKGdldE9yU2V0ID09IG51bGwgJiYgb3B0aW9uYWwoJ29wZXJhdG9yJywgbmFtZSkpIHsKICAgICAgVG9rZW4gb3BlcmF0b3IgPSBuYW1lLm5leHQ7CiAgICAgIGlmIChvcGVyYXRvci5pc09wZXJhdG9yIHx8CiAgICAgICAgICBpZGVudGljYWwob3BlcmF0b3Iua2luZCwgRVFfRVFfRVFfVE9LRU4pIHx8CiAgICAgICAgICBpZGVudGljYWwob3BlcmF0b3Iua2luZCwgQkFOR19FUV9FUV9UT0tFTikgfHwKICAgICAgICAgIGlzVW5hcnlNaW51cyhvcGVyYXRvcikpIHsKICAgICAgICBpc09wZXJhdG9yID0gdHJ1ZTsKICAgICAgfQogICAgfQoKICAgIGlmIChzdGF0aWNUb2tlbiAhPSBudWxsKSB7CiAgICAgIGlmIChpc09wZXJhdG9yKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihzdGF0aWNUb2tlbiwgZmFzdGEubWVzc2FnZVN0YXRpY09wZXJhdG9yKTsKICAgICAgICBzdGF0aWNUb2tlbiA9IG51bGw7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY292YXJpYW50VG9rZW4gIT0gbnVsbCkgewogICAgICBpZiAoZ2V0T3JTZXQgPT0gbnVsbCB8fCBvcHRpb25hbCgnZ2V0JywgZ2V0T3JTZXQpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihjb3ZhcmlhbnRUb2tlbiwgZmFzdGEubWVzc2FnZUNvdmFyaWFudE1lbWJlcik7CiAgICAgICAgY292YXJpYW50VG9rZW4gPSBudWxsOwogICAgICB9CiAgICB9CiAgICBpZiAodmFyRmluYWxPckNvbnN0ICE9IG51bGwpIHsKICAgICAgaWYgKG9wdGlvbmFsKCdjb25zdCcsIHZhckZpbmFsT3JDb25zdCkpIHsKICAgICAgICBpZiAoZ2V0T3JTZXQgIT0gbnVsbCkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgICAgICAgIHZhckZpbmFsT3JDb25zdCA9IG51bGw7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCd2YXInLCB2YXJGaW5hbE9yQ29uc3QpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLm1lc3NhZ2VWYXJSZXR1cm5UeXBlKTsKICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSBudWxsOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChvcHRpb25hbCgnZmluYWwnLCB2YXJGaW5hbE9yQ29uc3QpKTsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSBudWxsOwogICAgICB9CiAgICB9CgogICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIHBhcnNpbmcgdGhlIG5hbWUgYmVmb3JlIGNhbGxpbmcgYmVnaW5NZXRob2QKICAgIC8vIHJhdGhlciB0aGFuIHBhc3NpbmcgdGhlIG5hbWUgdG9rZW4gaW50byBiZWdpbk1ldGhvZC4KICAgIGxpc3RlbmVyLmJlZ2luTWV0aG9kKGV4dGVybmFsVG9rZW4sIHN0YXRpY1Rva2VuLCBjb3ZhcmlhbnRUb2tlbiwKICAgICAgICB2YXJGaW5hbE9yQ29uc3QsIGdldE9yU2V0LCBuYW1lKTsKCiAgICBUb2tlbiB0b2tlbiA9IHR5cGVJbmZvLnBhcnNlVHlwZShiZWZvcmVUeXBlLCB0aGlzKTsKICAgIGFzc2VydCh0b2tlbi5uZXh0ID09IChnZXRPclNldCA/PyBuYW1lKSk7CiAgICB0b2tlbiA9IGdldE9yU2V0ID8/IHRva2VuOwoKICAgIGlmIChpc09wZXJhdG9yKSB7CiAgICAgIHRva2VuID0gcGFyc2VPcGVyYXRvck5hbWUodG9rZW4pOwogICAgfSBlbHNlIHsKICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5tZXRob2REZWNsYXJhdGlvbik7CiAgICAgIGlmIChnZXRPclNldCA9PSBudWxsKSB7CiAgICAgICAgdG9rZW4gPSBwYXJzZVF1YWxpZmllZFJlc3RPcHQoCiAgICAgICAgICAgIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5tZXRob2REZWNsYXJhdGlvbkNvbnRpbnVhdGlvbik7CiAgICAgIH0KICAgIH0KCiAgICBib29sIGlzR2V0dGVyID0gZmFsc2U7CiAgICBpZiAoZ2V0T3JTZXQgPT0gbnVsbCkgewogICAgICB0b2tlbiA9IHBhcnNlTWV0aG9kVHlwZVZhcih0b2tlbik7CiAgICB9IGVsc2UgewogICAgICBpc0dldHRlciA9IG9wdGlvbmFsKCJnZXQiLCBnZXRPclNldCk7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZVZhcmlhYmxlcyh0b2tlbi5uZXh0KTsKICAgIH0KCiAgICBNZW1iZXJLaW5kIGtpbmQgPSBzdGF0aWNUb2tlbiAhPSBudWxsCiAgICAgICAgPyBNZW1iZXJLaW5kLlN0YXRpY01ldGhvZAogICAgICAgIDogTWVtYmVyS2luZC5Ob25TdGF0aWNNZXRob2Q7CiAgICBUb2tlbiBiZWZvcmVQYXJhbSA9IHRva2VuOwogICAgVG9rZW4gYmVmb3JlSW5pdGlhbGl6ZXJzID0KICAgICAgICBwYXJzZUdldHRlck9yRm9ybWFsUGFyYW1ldGVycyh0b2tlbiwgbmFtZSwgaXNHZXR0ZXIsIGtpbmQpOwogICAgdG9rZW4gPSBwYXJzZUluaXRpYWxpemVyc09wdChiZWZvcmVJbml0aWFsaXplcnMpOwogICAgaWYgKHRva2VuID09IGJlZm9yZUluaXRpYWxpemVycykgYmVmb3JlSW5pdGlhbGl6ZXJzID0gbnVsbDsKCiAgICBBc3luY01vZGlmaWVyIHNhdmVkQXN5bmNNb2RpZmllciA9IGFzeW5jU3RhdGU7CiAgICBUb2tlbiBhc3luY1Rva2VuID0gdG9rZW4ubmV4dDsKICAgIHRva2VuID0gcGFyc2VBc3luY01vZGlmaWVyT3B0KHRva2VuKTsKICAgIGlmIChnZXRPclNldCAhPSBudWxsICYmICFpblBsYWluU3luYyAmJiBvcHRpb25hbCgic2V0IiwgZ2V0T3JTZXQpKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoYXN5bmNUb2tlbiwgZmFzdGEubWVzc2FnZVNldHRlck5vdFN5bmMpOwogICAgfQogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAoZXh0ZXJuYWxUb2tlbiAhPSBudWxsKSB7CiAgICAgIGlmICghb3B0aW9uYWwoJzsnLCBuZXh0KSkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZUV4dGVybmFsTWV0aG9kV2l0aEJvZHkpOwogICAgICB9CiAgICB9CiAgICBpZiAob3B0aW9uYWwoJz0nLCBuZXh0KSkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VSZWRpcmVjdGlvbkluTm9uRmFjdG9yeSk7CiAgICAgIHRva2VuID0gcGFyc2VSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KHRva2VuKTsKICAgIH0gZWxzZSB7CiAgICAgIHRva2VuID0gcGFyc2VGdW5jdGlvbkJvZHkodG9rZW4sIGZhbHNlLAogICAgICAgICAgKHN0YXRpY1Rva2VuID09IG51bGwgfHwgZXh0ZXJuYWxUb2tlbiAhPSBudWxsKSAmJiBpblBsYWluU3luYyk7CiAgICB9CiAgICBhc3luY1N0YXRlID0gc2F2ZWRBc3luY01vZGlmaWVyOwogICAgbGlzdGVuZXIuZW5kTWV0aG9kKGdldE9yU2V0LCBiZWZvcmVTdGFydC5uZXh0LCBiZWZvcmVQYXJhbS5uZXh0LAogICAgICAgIGJlZm9yZUluaXRpYWxpemVycz8ubmV4dCwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VGYWN0b3J5TWV0aG9kKFRva2VuIHRva2VuLCBUb2tlbiBiZWZvcmVTdGFydCwgVG9rZW4gZXh0ZXJuYWxUb2tlbiwKICAgICAgVG9rZW4gc3RhdGljT3JDb3ZhcmlhbnQsIFRva2VuIHZhckZpbmFsT3JDb25zdCkgewogICAgVG9rZW4gZmFjdG9yeUtleXdvcmQgPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2ZhY3RvcnknLCBmYWN0b3J5S2V5d29yZCkpOwoKICAgIGlmICghaXNWYWxpZFR5cGVSZWZlcmVuY2UodG9rZW4ubmV4dCkpIHsKICAgICAgLy8gUmVjb3ZlcnkKICAgICAgTW9kaWZpZXJSZWNvdmVyeUNvbnRleHQgY29udGV4dCA9IG5ldyBNb2RpZmllclJlY292ZXJ5Q29udGV4dCh0aGlzKQogICAgICAgIC4uZXh0ZXJuYWxUb2tlbiA9IGV4dGVybmFsVG9rZW4KICAgICAgICAuLnN0YXRpY09yQ292YXJpYW50ID0gc3RhdGljT3JDb3ZhcmlhbnQKICAgICAgICAuLnZhckZpbmFsT3JDb25zdCA9IHZhckZpbmFsT3JDb25zdDsKCiAgICAgIHRva2VuID0gY29udGV4dC5wYXJzZU1vZGlmaWVyc0FmdGVyRmFjdG9yeSh0b2tlbik7CgogICAgICBleHRlcm5hbFRva2VuID0gY29udGV4dC5leHRlcm5hbFRva2VuOwogICAgICBzdGF0aWNPckNvdmFyaWFudCA9IGNvbnRleHQuc3RhdGljVG9rZW4gPz8gY29udGV4dC5jb3ZhcmlhbnRUb2tlbjsKICAgICAgdmFyRmluYWxPckNvbnN0ID0gY29udGV4dC52YXJGaW5hbE9yQ29uc3Q7CgogICAgICBjb250ZXh0ID0gbnVsbDsKICAgIH0KCiAgICBpZiAoc3RhdGljT3JDb3ZhcmlhbnQgIT0gbnVsbCkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgc3RhdGljT3JDb3ZhcmlhbnQsIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgIH0KICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCAmJiAhb3B0aW9uYWwoJ2NvbnN0JywgdmFyRmluYWxPckNvbnN0KSkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgdmFyRmluYWxPckNvbnN0LCBmYXN0YS50ZW1wbGF0ZUV4dHJhbmVvdXNNb2RpZmllcik7CiAgICAgIHZhckZpbmFsT3JDb25zdCA9IG51bGw7CiAgICB9CgogICAgbGlzdGVuZXIuYmVnaW5GYWN0b3J5TWV0aG9kKGJlZm9yZVN0YXJ0LCBleHRlcm5hbFRva2VuLCB2YXJGaW5hbE9yQ29uc3QpOwogICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5tZXRob2REZWNsYXJhdGlvbik7CiAgICB0b2tlbiA9IHBhcnNlUXVhbGlmaWVkUmVzdE9wdCgKICAgICAgICB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQubWV0aG9kRGVjbGFyYXRpb25Db250aW51YXRpb24pOwogICAgdG9rZW4gPSBwYXJzZU1ldGhvZFR5cGVWYXIodG9rZW4pOwogICAgdG9rZW4gPSBwYXJzZUZvcm1hbFBhcmFtZXRlcnNSZXF1aXJlZE9wdCh0b2tlbiwgTWVtYmVyS2luZC5GYWN0b3J5KTsKICAgIFRva2VuIGFzeW5jVG9rZW4gPSB0b2tlbi5uZXh0OwogICAgdG9rZW4gPSBwYXJzZUFzeW5jTW9kaWZpZXJPcHQodG9rZW4pOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAoIWluUGxhaW5TeW5jKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoYXN5bmNUb2tlbiwgZmFzdGEubWVzc2FnZUZhY3RvcnlOb3RTeW5jKTsKICAgIH0KICAgIGlmIChvcHRpb25hbCgnPScsIG5leHQpKSB7CiAgICAgIGlmIChleHRlcm5hbFRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VFeHRlcm5hbEZhY3RvcnlSZWRpcmVjdGlvbik7CiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZVJlZGlyZWN0aW5nRmFjdG9yeUJvZHkodG9rZW4pOwogICAgfSBlbHNlIGlmIChleHRlcm5hbFRva2VuICE9IG51bGwpIHsKICAgICAgaWYgKCFvcHRpb25hbCgnOycsIG5leHQpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlRXh0ZXJuYWxGYWN0b3J5V2l0aEJvZHkpOwogICAgICB9CiAgICAgIHRva2VuID0gcGFyc2VGdW5jdGlvbkJvZHkodG9rZW4sIGZhbHNlLCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCAmJiAhb3B0aW9uYWwoJ25hdGl2ZScsIG5leHQpKSB7CiAgICAgICAgaWYgKG9wdGlvbmFsKCdjb25zdCcsIHZhckZpbmFsT3JDb25zdCkpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodmFyRmluYWxPckNvbnN0LCBmYXN0YS5tZXNzYWdlQ29uc3RGYWN0b3J5KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZUZ1bmN0aW9uQm9keSh0b2tlbiwgZmFsc2UsIGZhbHNlKTsKICAgIH0KICAgIGxpc3RlbmVyLmVuZEZhY3RvcnlNZXRob2QoYmVmb3JlU3RhcnQubmV4dCwgZmFjdG9yeUtleXdvcmQsIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlT3BlcmF0b3JOYW1lKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBiZWZvcmVUb2tlbiA9IHRva2VuOwogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdvcGVyYXRvcicsIHRva2VuKSk7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChuZXh0LmlzVXNlckRlZmluYWJsZU9wZXJhdG9yKSB7CiAgICAgIGlmIChjb21wdXRlVHlwZVBhcmFtT3JBcmcodG9rZW4pICE9IG5vVHlwZVBhcmFtT3JBcmcpIHsKICAgICAgICAvLyBgb3BlcmF0b3JgIGlzIGJlaW5nIHVzZWQgYXMgYW4gaWRlbnRpZmllci4KICAgICAgICAvLyBGb3IgZXhhbXBsZTogYGludCBvcGVyYXRvcjxUPihmb28pID0+IDA7YAogICAgICAgIGxpc3RlbmVyLmhhbmRsZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0Lm1ldGhvZERlY2xhcmF0aW9uKTsKICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlT3BlcmF0b3JOYW1lKHRva2VuLCBuZXh0KTsKICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgfQogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgIHJldHVybiBlbnN1cmVJZGVudGlmaWVyKGJlZm9yZVRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5vcGVyYXRvck5hbWUpOwogICAgfSBlbHNlIGlmIChpc1VuYXJ5TWludXMobmV4dCkpIHsKICAgICAgLy8gUmVjb3ZlcnkKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbihuZXh0LCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbik7CiAgICAgIG5leHQgPSBuZXh0Lm5leHQ7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU9wZXJhdG9yTmFtZSh0b2tlbiwgbmV4dCk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfSBlbHNlIHsKICAgICAgLy8gUmVjb3ZlcnkKICAgICAgLy8gU2Nhbm5lciByZXBvcnRzIGFuIGVycm9yIGZvciBgPT09YCBhbmQgYCE9PWAuCiAgICAgIGlmIChuZXh0LnR5cGUgIT0gVG9rZW5UeXBlLkVRX0VRX0VRICYmCiAgICAgICAgICBuZXh0LnR5cGUgIT0gVG9rZW5UeXBlLkJBTkdfRVFfRVEpIHsKICAgICAgICAvLyBUaGUgdXNlciBoYXMgc3BlY2lmaWVkIGFuIGludmFsaWQgb3BlcmF0b3IgbmFtZS4KICAgICAgICAvLyBSZXBvcnQgdGhlIGVycm9yLCBhY2NlcHQgdGhlIGludmFsaWQgb3BlcmF0b3IgbmFtZSwgYW5kIG1vdmUgb24uCiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbihuZXh0LCBmYXN0YS50ZW1wbGF0ZUludmFsaWRPcGVyYXRvcik7CiAgICAgIH0KICAgICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZE9wZXJhdG9yTmFtZSh0b2tlbiwgbmV4dCk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogIH0KCiAgVG9rZW4gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGJlZ2luVG9rZW4gPSB0b2tlbi5uZXh0OwogICAgbGlzdGVuZXIuYmVnaW5GdW5jdGlvbkV4cHJlc3Npb24oYmVnaW5Ub2tlbik7CiAgICB0b2tlbiA9IHBhcnNlRm9ybWFsUGFyYW1ldGVyc1JlcXVpcmVkT3B0KHRva2VuLCBNZW1iZXJLaW5kLkxvY2FsKTsKICAgIHRva2VuID0gcGFyc2VBc3luY09wdEJvZHkodG9rZW4sIHRydWUsIGZhbHNlKTsKICAgIGxpc3RlbmVyLmVuZEZ1bmN0aW9uRXhwcmVzc2lvbihiZWdpblRva2VuLCB0b2tlbi5uZXh0KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlRnVuY3Rpb25MaXRlcmFsKAogICAgICBUb2tlbiBzdGFydCwKICAgICAgVG9rZW4gYmVmb3JlTmFtZSwKICAgICAgVG9rZW4gbmFtZSwKICAgICAgVHlwZUluZm8gdHlwZUluZm8sCiAgICAgIFR5cGVQYXJhbU9yQXJnSW5mbyB0eXBlUGFyYW0sCiAgICAgIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIFRva2VuIGZvcm1hbHMgPSB0eXBlUGFyYW0ucGFyc2VWYXJpYWJsZXMobmFtZSwgdGhpcyk7CiAgICBsaXN0ZW5lci5iZWdpbk5hbWVkRnVuY3Rpb25FeHByZXNzaW9uKHN0YXJ0Lm5leHQpOwogICAgdHlwZUluZm8ucGFyc2VUeXBlKHN0YXJ0LCB0aGlzKTsKICAgIHJldHVybiBwYXJzZU5hbWVkRnVuY3Rpb25SZXN0KGJlZm9yZU5hbWUsIHN0YXJ0Lm5leHQsIGZvcm1hbHMsIHRydWUpOwogIH0KCiAgLy8vIFBhcnNlcyB0aGUgcmVzdCBvZiBhIG5hbWVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHN0YXJ0aW5nIGZyb20gaXRzIFtuYW1lXQogIC8vLyBidXQgdGhlbiBza2lwcyBhbnkgdHlwZSBwYXJhbWV0ZXJzIGFuZCBjb250aW51ZSBwYXJzaW5nIGZyb20gW2Zvcm1hbHNdCiAgLy8vICh0aGUgZm9ybWFsIHBhcmFtZXRlcnMpLgogIC8vLwogIC8vLyBJZiBbaXNGdW5jdGlvbkV4cHJlc3Npb25dIGlzIHRydWUsIHRoaXMgbWV0aG9kIHBhcnNlcyB0aGUgcmVzdCBvZiBuYW1lZAogIC8vLyBmdW5jdGlvbiBleHByZXNzaW9uIHdoaWNoIGlzbid0IGxlZ2FsIHN5bnRheCBpbiBEYXJ0LiAgVXNlZnVsIGZvcgogIC8vLyByZWNvdmVyaW5nIGZyb20gSmF2YXNjcmlwdCBjb2RlIGJlaW5nIHBhc3RlZCBpbnRvIGEgRGFydCBwcm9ncmFtLCBhcyBpdAogIC8vLyB3aWxsIGludGVycHJldCBgZnVuY3Rpb24gZm9vKCkge31gIGFzIGEgbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbiB3aXRoCiAgLy8vIHJldHVybiB0eXBlIGBmdW5jdGlvbmAgYW5kIG5hbWUgYGZvb2AuCiAgLy8vCiAgLy8vIFByZWNvbmRpdGlvbjogdGhlIHBhcnNlciBoYXMgcHJldmlvdXNseSBnZW5lcmF0ZWQgdGhlc2UgZXZlbnRzOgogIC8vLwogIC8vLyAtIFR5cGUgdmFyaWFibGVzLgogIC8vLyAtIGBiZWdpbkxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbmAgaWYgW2lzRnVuY3Rpb25FeHByZXNzaW9uXSBpcyBmYWxzZSwKICAvLy8gICBvdGhlcndpc2UgYGJlZ2luTmFtZWRGdW5jdGlvbkV4cHJlc3Npb25gLgogIC8vLyAtIFJldHVybiB0eXBlLgogIFRva2VuIHBhcnNlTmFtZWRGdW5jdGlvblJlc3QoCiAgICAgIFRva2VuIGJlZm9yZU5hbWUsIFRva2VuIGJlZ2luLCBUb2tlbiBmb3JtYWxzLCBib29sIGlzRnVuY3Rpb25FeHByZXNzaW9uKSB7CiAgICBUb2tlbiB0b2tlbiA9IGJlZm9yZU5hbWUubmV4dDsKICAgIGxpc3RlbmVyLmJlZ2luRnVuY3Rpb25OYW1lKHRva2VuKTsKICAgIHRva2VuID0KICAgICAgICBlbnN1cmVJZGVudGlmaWVyKGJlZm9yZU5hbWUsIElkZW50aWZpZXJDb250ZXh0LmxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbikKICAgICAgICAgICAgLm5leHQ7CiAgICBpZiAoaXNGdW5jdGlvbkV4cHJlc3Npb24pIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIGJlZm9yZU5hbWUubmV4dCwgZmFzdGEubWVzc2FnZU5hbWVkRnVuY3Rpb25FeHByZXNzaW9uKTsKICAgIH0KICAgIGxpc3RlbmVyLmVuZEZ1bmN0aW9uTmFtZShiZWdpbiwgdG9rZW4pOwogICAgdG9rZW4gPSBwYXJzZUZvcm1hbFBhcmFtZXRlcnNSZXF1aXJlZE9wdChmb3JtYWxzLCBNZW1iZXJLaW5kLkxvY2FsKTsKICAgIHRva2VuID0gcGFyc2VJbml0aWFsaXplcnNPcHQodG9rZW4pOwogICAgdG9rZW4gPSBwYXJzZUFzeW5jT3B0Qm9keSh0b2tlbiwgaXNGdW5jdGlvbkV4cHJlc3Npb24sIGZhbHNlKTsKICAgIGlmIChpc0Z1bmN0aW9uRXhwcmVzc2lvbikgewogICAgICBsaXN0ZW5lci5lbmROYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbih0b2tlbik7CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lci5lbmRMb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb24odG9rZW4pOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBhcnNlcyBhIGZ1bmN0aW9uIGJvZHkgb3B0aW9uYWxseSBwcmVjZWRlZCBieSBhbiBhc3luYyBtb2RpZmllciAoc2VlCiAgLy8vIFtwYXJzZUFzeW5jTW9kaWZpZXJPcHRdKS4gIFRoaXMgbWV0aG9kIGlzIHVzZWQgaW4gYm90aCBleHByZXNzaW9uIGNvbnRleHQKICAvLy8gKHdoZW4gW29mRnVuY3Rpb25FeHByZXNzaW9uXSBpcyB0cnVlKSBhbmQgc3RhdGVtZW50IGNvbnRleHQuIEluIHN0YXRlbWVudAogIC8vLyBjb250ZXh0ICh3aGVuIFtvZkZ1bmN0aW9uRXhwcmVzc2lvbl0gaXMgZmFsc2UpLCBhbmQgaWYgdGhlIGZ1bmN0aW9uIGJvZHkKICAvLy8gaXMgb24gdGhlIGZvcm0gYD0+IGV4cHJlc3Npb25gLCBhIHRyYWlsaW5nIHNlbWljb2xvbiBpcyByZXF1aXJlZC4KICAvLy8KICAvLy8gSXQncyBhbiBlcnJvciBpZiB0aGVyZSdzIG5vIGZ1bmN0aW9uIGJvZHkgdW5sZXNzIFthbGxvd0Fic3RyYWN0XSBpcyB0cnVlLgogIFRva2VuIHBhcnNlQXN5bmNPcHRCb2R5KAogICAgICBUb2tlbiB0b2tlbiwgYm9vbCBvZkZ1bmN0aW9uRXhwcmVzc2lvbiwgYm9vbCBhbGxvd0Fic3RyYWN0KSB7CiAgICBBc3luY01vZGlmaWVyIHNhdmVkQXN5bmNNb2RpZmllciA9IGFzeW5jU3RhdGU7CiAgICB0b2tlbiA9IHBhcnNlQXN5bmNNb2RpZmllck9wdCh0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlRnVuY3Rpb25Cb2R5KHRva2VuLCBvZkZ1bmN0aW9uRXhwcmVzc2lvbiwgYWxsb3dBYnN0cmFjdCk7CiAgICBhc3luY1N0YXRlID0gc2F2ZWRBc3luY01vZGlmaWVyOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VDb25zdHJ1Y3RvclJlZmVyZW5jZShUb2tlbiB0b2tlbiwgW1R5cGVQYXJhbU9yQXJnSW5mbyB0eXBlQXJnXSkgewogICAgVG9rZW4gc3RhcnQgPQogICAgICAgIGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmNvbnN0cnVjdG9yUmVmZXJlbmNlKTsKICAgIGxpc3RlbmVyLmJlZ2luQ29uc3RydWN0b3JSZWZlcmVuY2Uoc3RhcnQpOwogICAgdG9rZW4gPSBwYXJzZVF1YWxpZmllZFJlc3RPcHQoCiAgICAgICAgc3RhcnQsIElkZW50aWZpZXJDb250ZXh0LmNvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uKTsKICAgIHR5cGVBcmcgPz89IGNvbXB1dGVUeXBlUGFyYW1PckFyZyh0b2tlbik7CiAgICB0b2tlbiA9IHR5cGVBcmcucGFyc2VBcmd1bWVudHModG9rZW4sIHRoaXMpOwogICAgVG9rZW4gcGVyaW9kID0gbnVsbDsKICAgIGlmIChvcHRpb25hbCgnLicsIHRva2VuLm5leHQpKSB7CiAgICAgIHBlcmlvZCA9IHRva2VuLm5leHQ7CiAgICAgIHRva2VuID0gZW5zdXJlSWRlbnRpZmllcihwZXJpb2QsCiAgICAgICAgICBJZGVudGlmaWVyQ29udGV4dC5jb25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cyk7CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lci5oYW5kbGVOb0NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzKAogICAgICAgICAgdG9rZW4ubmV4dCk7CiAgICB9CiAgICBsaXN0ZW5lci5lbmRDb25zdHJ1Y3RvclJlZmVyZW5jZShzdGFydCwgcGVyaW9kLCB0b2tlbi5uZXh0KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlUmVkaXJlY3RpbmdGYWN0b3J5Qm9keShUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc9JywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luUmVkaXJlY3RpbmdGYWN0b3J5Qm9keSh0b2tlbik7CiAgICBUb2tlbiBlcXVhbHMgPSB0b2tlbjsKICAgIHRva2VuID0gcGFyc2VDb25zdHJ1Y3RvclJlZmVyZW5jZSh0b2tlbik7CiAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KGVxdWFscywgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gc2tpcEZ1bmN0aW9uQm9keShUb2tlbiB0b2tlbiwgYm9vbCBpc0V4cHJlc3Npb24sIGJvb2wgYWxsb3dBYnN0cmFjdCkgewogICAgYXNzZXJ0KCFpc0V4cHJlc3Npb24pOwogICAgdG9rZW4gPSBza2lwQXN5bmNNb2RpZmllcih0b2tlbik7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnbmF0aXZlJywgbmV4dCkpIHsKICAgICAgVG9rZW4gbmF0aXZlVG9rZW4gPSBuZXh0OwogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogc2tpcCB0aGUgbmF0aXZlIGNsYXVzZSByYXRoZXIgdGhhbiBwYXJzaW5nIGl0CiAgICAgIC8vIG9yIHJlbW92ZSB0aGlzIGNvZGUgY29tcGxldGVseSB3aGVuIHdlIHJlbW92ZSBzdXBwb3J0CiAgICAgIC8vIGZvciB0aGUgYG5hdGl2ZWAgY2xhdXNlLgogICAgICB0b2tlbiA9IHBhcnNlTmF0aXZlQ2xhdXNlKHRva2VuKTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnOycsIG5leHQpKSB7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5U2tpcHBlZChuYXRpdmVUb2tlbiwgbmV4dCk7CiAgICAgICAgcmV0dXJuIHRva2VuLm5leHQ7CiAgICAgIH0KICAgICAgbGlzdGVuZXIuaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5SWdub3JlZChuYXRpdmVUb2tlbiwgbmV4dCk7CiAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byByZWNvdmVyIGFuZCBza2lwIGZ1bmN0aW9uIGJvZHkKICAgIH0KICAgIFN0cmluZyB2YWx1ZSA9IG5leHQuc3RyaW5nVmFsdWU7CiAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnOycpKSB7CiAgICAgIHRva2VuID0gbmV4dDsKICAgICAgaWYgKCFhbGxvd0Fic3RyYWN0KSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgZmFzdGEubWVzc2FnZUV4cGVjdGVkQm9keSk7CiAgICAgIH0KICAgICAgbGlzdGVuZXIuaGFuZGxlTm9GdW5jdGlvbkJvZHkodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICc9PicpKSB7CiAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKG5leHQpOwogICAgICAvLyBUaGVyZSBvdWdodCB0byBiZSBhIHNlbWljb2xvbiBmb2xsb3dpbmcgdGhlIGV4cHJlc3Npb24sIGJ1dCB3ZSBjaGVjawogICAgICAvLyBiZWZvcmUgYWR2YW5jaW5nIGluIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgd2F5IHRoZSBtZXRob2QKICAgICAgLy8gW3BhcnNlRnVuY3Rpb25Cb2R5XSByZWNvdmVycyB3aGVuIHRoZSBzZW1pY29sb24gaXMgbWlzc2luZy4KICAgICAgaWYgKG9wdGlvbmFsKCc7JywgdG9rZW4ubmV4dCkpIHsKICAgICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIH0KICAgICAgbGlzdGVuZXIuaGFuZGxlRnVuY3Rpb25Cb2R5U2tpcHBlZCh0b2tlbiwgdHJ1ZSk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJz0nKSkgewogICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIGZhc3RhLm1lc3NhZ2VFeHBlY3RlZEJvZHkpOwogICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbih0b2tlbik7CiAgICAgIC8vIFRoZXJlIG91Z2h0IHRvIGJlIGEgc2VtaWNvbG9uIGZvbGxvd2luZyB0aGUgZXhwcmVzc2lvbiwgYnV0IHdlIGNoZWNrCiAgICAgIC8vIGJlZm9yZSBhZHZhbmNpbmcgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSB3YXkgdGhlIG1ldGhvZAogICAgICAvLyBbcGFyc2VGdW5jdGlvbkJvZHldIHJlY292ZXJzIHdoZW4gdGhlIHNlbWljb2xvbiBpcyBtaXNzaW5nLgogICAgICBpZiAob3B0aW9uYWwoJzsnLCB0b2tlbi5uZXh0KSkgewogICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICBsaXN0ZW5lci5oYW5kbGVGdW5jdGlvbkJvZHlTa2lwcGVkKHRva2VuLCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHRva2VuID0gc2tpcEJsb2NrKHRva2VuKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlRnVuY3Rpb25Cb2R5U2tpcHBlZCh0b2tlbiwgZmFsc2UpOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBhcnNlcyBhIGZ1bmN0aW9uIGJvZHkuICBUaGlzIG1ldGhvZCBpcyB1c2VkIGluIGJvdGggZXhwcmVzc2lvbiBjb250ZXh0CiAgLy8vICh3aGVuIFtvZkZ1bmN0aW9uRXhwcmVzc2lvbl0gaXMgdHJ1ZSkgYW5kIHN0YXRlbWVudCBjb250ZXh0LiBJbiBzdGF0ZW1lbnQKICAvLy8gY29udGV4dCAod2hlbiBbb2ZGdW5jdGlvbkV4cHJlc3Npb25dIGlzIGZhbHNlKSwgYW5kIGlmIHRoZSBmdW5jdGlvbiBib2R5CiAgLy8vIGlzIG9uIHRoZSBmb3JtIGA9PiBleHByZXNzaW9uYCwgYSB0cmFpbGluZyBzZW1pY29sb24gaXMgcmVxdWlyZWQuCiAgLy8vCiAgLy8vIEl0J3MgYW4gZXJyb3IgaWYgdGhlcmUncyBubyBmdW5jdGlvbiBib2R5IHVubGVzcyBbYWxsb3dBYnN0cmFjdF0gaXMgdHJ1ZS4KICBUb2tlbiBwYXJzZUZ1bmN0aW9uQm9keSgKICAgICAgVG9rZW4gdG9rZW4sIGJvb2wgb2ZGdW5jdGlvbkV4cHJlc3Npb24sIGJvb2wgYWxsb3dBYnN0cmFjdCkgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJ25hdGl2ZScsIG5leHQpKSB7CiAgICAgIFRva2VuIG5hdGl2ZVRva2VuID0gbmV4dDsKICAgICAgdG9rZW4gPSBwYXJzZU5hdGl2ZUNsYXVzZSh0b2tlbik7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJzsnLCBuZXh0KSkgewogICAgICAgIGxpc3RlbmVyLmhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keShuYXRpdmVUb2tlbiwgbmV4dCk7CiAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgIH0KICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlRXh0ZXJuYWxNZXRob2RXaXRoQm9keSk7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWQobmF0aXZlVG9rZW4sIG5leHQpOwogICAgICAvLyBJZ25vcmUgdGhlIG5hdGl2ZSBrZXl3b3JkIGFuZCBmYWxsIHRocm91Z2ggdG8gcGFyc2UgdGhlIGJvZHkKICAgIH0KICAgIGlmIChvcHRpb25hbCgnOycsIG5leHQpKSB7CiAgICAgIGlmICghYWxsb3dBYnN0cmFjdCkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZUV4cGVjdGVkQm9keSk7CiAgICAgIH0KICAgICAgbGlzdGVuZXIuaGFuZGxlRW1wdHlGdW5jdGlvbkJvZHkobmV4dCk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnPT4nLCBuZXh0KSkgewogICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uRnVuY3Rpb25Cb2R5KG5leHQsIG9mRnVuY3Rpb25FeHByZXNzaW9uKTsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJz0nLCBuZXh0KSkgewogICAgICAvLyBSZWNvdmVyIGZyb20gYSBiYWQgZmFjdG9yeSBtZXRob2QuCiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZUV4cGVjdGVkQm9keSk7CiAgICAgIG5leHQgPSByZXdyaXRlci5pbnNlcnRUb2tlbigKICAgICAgICAgIG5leHQsIG5ldyBTeW50aGV0aWNUb2tlbihUb2tlblR5cGUuRlVOQ1RJT04sIG5leHQubmV4dC5jaGFyT2Zmc2V0KSk7CiAgICAgIFRva2VuIGJlZ2luID0gbmV4dDsKICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24obmV4dCk7CiAgICAgIGlmICghb2ZGdW5jdGlvbkV4cHJlc3Npb24pIHsKICAgICAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlRXhwcmVzc2lvbkZ1bmN0aW9uQm9keShiZWdpbiwgdG9rZW4pOwogICAgICB9IGVsc2UgewogICAgICAgIGxpc3RlbmVyLmhhbmRsZUV4cHJlc3Npb25GdW5jdGlvbkJvZHkoYmVnaW4sIG51bGwpOwogICAgICB9CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KICAgIFRva2VuIGJlZ2luID0gbmV4dDsKICAgIGludCBzdGF0ZW1lbnRDb3VudCA9IDA7CiAgICBpZiAoIW9wdGlvbmFsKCd7JywgbmV4dCkpIHsKICAgICAgLy8gUmVjb3ZlcnkKICAgICAgLy8gSWYgYHJldHVybmAgdXNlZCBpbnN0ZWFkIG9mIGA9PmAsIHRoZW4gcmVwb3J0IGFuIGVycm9yIGFuZCBjb250aW51ZQogICAgICBpZiAob3B0aW9uYWwoJ3JldHVybicsIG5leHQpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlRXhwZWN0ZWRCb2R5KTsKICAgICAgICBuZXh0ID0gcmV3cml0ZXIuaW5zZXJ0VG9rZW4oCiAgICAgICAgICAgIG5leHQsIG5ldyBTeW50aGV0aWNUb2tlbihUb2tlblR5cGUuRlVOQ1RJT04sIG5leHQubmV4dC5jaGFyT2Zmc2V0KSk7CiAgICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvbkZ1bmN0aW9uQm9keShuZXh0LCBvZkZ1bmN0aW9uRXhwcmVzc2lvbik7CiAgICAgIH0KICAgICAgLy8gSWYgdGhlcmUgaXMgYSBzdHJheSBzaW1wbGUgaWRlbnRpZmllciBpbiB0aGUgZnVuY3Rpb24gZXhwcmVzc2lvbgogICAgICAvLyBiZWNhdXNlIHRoZSB1c2VyIGlzIHR5cGluZyAoZS5nLiBgKCkgYXN5ID0+IG51bGw7YCkKICAgICAgLy8gdGhlbiByZXBvcnQgYW4gZXJyb3IsIHNraXAgdGhlIHRva2VuLCBhbmQgY29udGludWUgcGFyc2luZy4KICAgICAgaWYgKG5leHQuaXNLZXl3b3JkT3JJZGVudGlmaWVyICYmIG9wdGlvbmFsKCc9PicsIG5leHQubmV4dCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uRnVuY3Rpb25Cb2R5KG5leHQubmV4dCwgb2ZGdW5jdGlvbkV4cHJlc3Npb24pOwogICAgICB9CiAgICAgIGlmIChuZXh0LmlzS2V5d29yZE9ySWRlbnRpZmllciAmJiBvcHRpb25hbCgneycsIG5leHQubmV4dCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgYmVnaW4gPSBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gcGFyc2UgdGhlIGJsb2NrLgogICAgICB9IGVsc2UgewogICAgICAgIHRva2VuID0gZW5zdXJlQmxvY2sodG9rZW4sIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRGdW5jdGlvbkJvZHksIG51bGwpOwogICAgICAgIGxpc3RlbmVyLmhhbmRsZUludmFsaWRGdW5jdGlvbkJvZHkodG9rZW4pOwogICAgICAgIHJldHVybiB0b2tlbi5lbmRHcm91cDsKICAgICAgfQogICAgfQoKICAgIExvb3BTdGF0ZSBzYXZlZExvb3BTdGF0ZSA9IGxvb3BTdGF0ZTsKICAgIGxvb3BTdGF0ZSA9IExvb3BTdGF0ZS5PdXRzaWRlTG9vcDsKICAgIGxpc3RlbmVyLmJlZ2luQmxvY2tGdW5jdGlvbkJvZHkoYmVnaW4pOwogICAgdG9rZW4gPSBuZXh0OwogICAgd2hpbGUgKG5vdEVvZk9yVmFsdWUoJ30nLCB0b2tlbi5uZXh0KSkgewogICAgICBUb2tlbiBzdGFydFRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgdG9rZW4gPSBwYXJzZVN0YXRlbWVudCh0b2tlbik7CiAgICAgIGlmIChpZGVudGljYWwodG9rZW4ubmV4dCwgc3RhcnRUb2tlbikpIHsKICAgICAgICAvLyBObyBwcm9ncmVzcyB3YXMgbWFkZSwgc28gd2UgcmVwb3J0IHRoZSBjdXJyZW50IHRva2VuIGFzIGJlaW5nIGludmFsaWQKICAgICAgICAvLyBhbmQgbW92ZSBmb3J3YXJkLgogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIHRva2VuLCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbi53aXRoQXJndW1lbnRzKHRva2VuKSk7CiAgICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICAgICsrc3RhdGVtZW50Q291bnQ7CiAgICB9CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ30nLCB0b2tlbikpOwogICAgbGlzdGVuZXIuZW5kQmxvY2tGdW5jdGlvbkJvZHkoc3RhdGVtZW50Q291bnQsIGJlZ2luLCB0b2tlbik7CiAgICBsb29wU3RhdGUgPSBzYXZlZExvb3BTdGF0ZTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlRXhwcmVzc2lvbkZ1bmN0aW9uQm9keShUb2tlbiB0b2tlbiwgYm9vbCBvZkZ1bmN0aW9uRXhwcmVzc2lvbikgewogICAgYXNzZXJ0KG9wdGlvbmFsKCc9PicsIHRva2VuKSk7CiAgICBUb2tlbiBiZWdpbiA9IHRva2VuOwogICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pOwogICAgaWYgKCFvZkZ1bmN0aW9uRXhwcmVzc2lvbikgewogICAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUV4cHJlc3Npb25GdW5jdGlvbkJvZHkoYmVnaW4sIHRva2VuKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUV4cHJlc3Npb25GdW5jdGlvbkJvZHkoYmVnaW4sIG51bGwpOwogICAgfQogICAgaWYgKGluR2VuZXJhdG9yKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUludmFsaWRTdGF0ZW1lbnQoCiAgICAgICAgICBiZWdpbiwgZmFzdGEubWVzc2FnZUdlbmVyYXRvclJldHVybnNWYWx1ZSk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBza2lwQXN5bmNNb2RpZmllcihUb2tlbiB0b2tlbikgewogICAgU3RyaW5nIHZhbHVlID0gdG9rZW4ubmV4dC5zdHJpbmdWYWx1ZTsKICAgIGlmIChpZGVudGljYWwodmFsdWUsICdhc3luYycpKSB7CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgdmFsdWUgPSB0b2tlbi5uZXh0LnN0cmluZ1ZhbHVlOwoKICAgICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJyonKSkgewogICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdzeW5jJykpIHsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICB2YWx1ZSA9IHRva2VuLm5leHQuc3RyaW5nVmFsdWU7CgogICAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnKicpKSB7CiAgICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUFzeW5jTW9kaWZpZXJPcHQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGFzeW5jOwogICAgVG9rZW4gc3RhcjsKICAgIGFzeW5jU3RhdGUgPSBBc3luY01vZGlmaWVyLlN5bmM7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnYXN5bmMnLCBuZXh0KSkgewogICAgICBhc3luYyA9IHRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnKicsIG5leHQpKSB7CiAgICAgICAgYXN5bmNTdGF0ZSA9IEFzeW5jTW9kaWZpZXIuQXN5bmNTdGFyOwogICAgICAgIHN0YXIgPSBuZXh0OwogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3luY1N0YXRlID0gQXN5bmNNb2RpZmllci5Bc3luYzsKICAgICAgfQogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnc3luYycsIG5leHQpKSB7CiAgICAgIGFzeW5jID0gdG9rZW4gPSBuZXh0OwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCcqJywgbmV4dCkpIHsKICAgICAgICBhc3luY1N0YXRlID0gQXN5bmNNb2RpZmllci5TeW5jU3RhcjsKICAgICAgICBzdGFyID0gbmV4dDsKICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihhc3luYywgZmFzdGEubWVzc2FnZUludmFsaWRTeW5jTW9kaWZpZXIpOwogICAgICB9CiAgICB9CiAgICBsaXN0ZW5lci5oYW5kbGVBc3luY01vZGlmaWVyKGFzeW5jLCBzdGFyKTsKICAgIGlmICghaW5QbGFpblN5bmMgJiYgb3B0aW9uYWwoJzsnLCB0b2tlbi5uZXh0KSkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLm5leHQsIGZhc3RhLm1lc3NhZ2VBYnN0cmFjdE5vdFN5bmMpOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgaW50IHN0YXRlbWVudERlcHRoID0gMDsKICBUb2tlbiBwYXJzZVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgaWYgKHN0YXRlbWVudERlcHRoKysgPiA1MDApIHsKICAgICAgLy8gVGhpcyBoYXBwZW5zIGZvciBkZWdlbmVyYXRlIHByb2dyYW1zLCBmb3IgZXhhbXBsZSwgYSBsb3Qgb2YgbmVzdGVkCiAgICAgIC8vIGlmLXN0YXRlbWVudHMuIFRoZSBsYW5ndWFnZSB0ZXN0IGRlZXBfbmVzdGluZzJfbmVnYXRpdmVfdGVzdCwgZm9yCiAgICAgIC8vIGV4YW1wbGUsIHByb3Zva2VzIHRoaXMuCiAgICAgIHJldHVybiByZWNvdmVyRnJvbVN0YWNrT3ZlcmZsb3codG9rZW4pOwogICAgfQogICAgVG9rZW4gcmVzdWx0ID0gcGFyc2VTdGF0ZW1lbnRYKHRva2VuKTsKICAgIHN0YXRlbWVudERlcHRoLS07CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgVG9rZW4gcGFyc2VTdGF0ZW1lbnRYKFRva2VuIHRva2VuKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRva2VuLm5leHQua2luZCwgSURFTlRJRklFUl9UT0tFTikpIHsKICAgICAgaWYgKG9wdGlvbmFsKCc6JywgdG9rZW4ubmV4dC5uZXh0KSkgewogICAgICAgIHJldHVybiBwYXJzZUxhYmVsZWRTdGF0ZW1lbnQodG9rZW4pOwogICAgICB9CiAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckRlY2xhcmF0aW9uQWZ0ZXJNb2RpZmllcnMoCiAgICAgICAgICB0b2tlbiwgdG9rZW4sIG51bGwsIG51bGwsIG51bGwsIGZhbHNlKTsKICAgIH0KICAgIGZpbmFsIHZhbHVlID0gdG9rZW4ubmV4dC5zdHJpbmdWYWx1ZTsKICAgIGlmIChpZGVudGljYWwodmFsdWUsICd7JykpIHsKICAgICAgLy8gVGhlIHNjYW5uZXIgZW5zdXJlcyB0aGF0IGB7YCBhbHdheXMgaGFzIGEgY2xvc2luZyBgfWAuCiAgICAgIHJldHVybiBwYXJzZUJsb2NrKHRva2VuLCBudWxsKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAncmV0dXJuJykpIHsKICAgICAgcmV0dXJuIHBhcnNlUmV0dXJuU3RhdGVtZW50KHRva2VuKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAndmFyJykgfHwgaWRlbnRpY2FsKHZhbHVlLCAnZmluYWwnKSkgewogICAgICBUb2tlbiB2YXJPckZpbmFsID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKCFpc01vZGlmaWVyKHZhck9yRmluYWwubmV4dCkpIHsKICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbkFmdGVyTW9kaWZpZXJzKAogICAgICAgICAgICB2YXJPckZpbmFsLCB0b2tlbiwgbnVsbCwgdmFyT3JGaW5hbCwgbnVsbCwgZmFsc2UpOwogICAgICB9CiAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckRlY2xhcmF0aW9uKHRva2VuKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnbGF0ZScpKSB7CiAgICAgIFRva2VuIGxhdGVUb2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIGlmICghaXNNb2RpZmllcihsYXRlVG9rZW4ubmV4dCkpIHsKICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbkFmdGVyTW9kaWZpZXJzKAogICAgICAgICAgICBsYXRlVG9rZW4sIHRva2VuLCBsYXRlVG9rZW4sIG51bGwsIG51bGwsIGZhbHNlKTsKICAgICAgfQogICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbih0b2tlbik7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2lmJykpIHsKICAgICAgcmV0dXJuIHBhcnNlSWZTdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdhd2FpdCcpICYmIG9wdGlvbmFsKCdmb3InLCB0b2tlbi5uZXh0Lm5leHQpKSB7CiAgICAgIHJldHVybiBwYXJzZUZvclN0YXRlbWVudCh0b2tlbi5uZXh0LCB0b2tlbi5uZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnZm9yJykpIHsKICAgICAgcmV0dXJuIHBhcnNlRm9yU3RhdGVtZW50KHRva2VuLCBudWxsKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAncmV0aHJvdycpKSB7CiAgICAgIHJldHVybiBwYXJzZVJldGhyb3dTdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICd3aGlsZScpKSB7CiAgICAgIHJldHVybiBwYXJzZVdoaWxlU3RhdGVtZW50KHRva2VuKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnZG8nKSkgewogICAgICByZXR1cm4gcGFyc2VEb1doaWxlU3RhdGVtZW50KHRva2VuKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAndHJ5JykpIHsKICAgICAgcmV0dXJuIHBhcnNlVHJ5U3RhdGVtZW50KHRva2VuKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnc3dpdGNoJykpIHsKICAgICAgcmV0dXJuIHBhcnNlU3dpdGNoU3RhdGVtZW50KHRva2VuKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnYnJlYWsnKSkgewogICAgICByZXR1cm4gcGFyc2VCcmVha1N0YXRlbWVudCh0b2tlbik7CiAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2NvbnRpbnVlJykpIHsKICAgICAgcmV0dXJuIHBhcnNlQ29udGludWVTdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdhc3NlcnQnKSkgewogICAgICByZXR1cm4gcGFyc2VBc3NlcnRTdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICc7JykpIHsKICAgICAgcmV0dXJuIHBhcnNlRW1wdHlTdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICd5aWVsZCcpKSB7CiAgICAgIHN3aXRjaCAoYXN5bmNTdGF0ZSkgewogICAgICAgIGNhc2UgQXN5bmNNb2RpZmllci5TeW5jOgogICAgICAgICAgaWYgKG9wdGlvbmFsKCc6JywgdG9rZW4ubmV4dC5uZXh0KSkgewogICAgICAgICAgICByZXR1cm4gcGFyc2VMYWJlbGVkU3RhdGVtZW50KHRva2VuKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckRlY2xhcmF0aW9uKHRva2VuKTsKCiAgICAgICAgY2FzZSBBc3luY01vZGlmaWVyLlN5bmNTdGFyOgogICAgICAgIGNhc2UgQXN5bmNNb2RpZmllci5Bc3luY1N0YXI6CiAgICAgICAgICByZXR1cm4gcGFyc2VZaWVsZFN0YXRlbWVudCh0b2tlbik7CgogICAgICAgIGNhc2UgQXN5bmNNb2RpZmllci5Bc3luYzoKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4ubmV4dCwgZmFzdGEubWVzc2FnZVlpZWxkTm90R2VuZXJhdG9yKTsKICAgICAgICAgIHJldHVybiBwYXJzZVlpZWxkU3RhdGVtZW50KHRva2VuKTsKICAgICAgfQogICAgICB0aHJvdyAiSW50ZXJuYWwgZXJyb3I6IFVua25vd24gYXN5bmNTdGF0ZTogJyRhc3luY1N0YXRlJy4iOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdjb25zdCcpKSB7CiAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckNvbnN0RGVjbGFyYXRpb24odG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdhd2FpdCcpKSB7CiAgICAgIGlmIChpblBsYWluU3luYykgewogICAgICAgIGlmICghbG9va3NMaWtlQXdhaXRFeHByZXNzaW9uKHRva2VuKSkgewogICAgICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb24odG9rZW4pOwogICAgICAgIH0KICAgICAgICAvLyBSZWNvdmVyeTogbG9va3MgbGlrZSBhbiBleHByZXNzaW9uIHByZWNlZGVkIGJ5IGBhd2FpdGAKICAgICAgICAvLyBidXQgbm90IGluc2lkZSBhbiBhc3luYyBjb250ZXh0LgogICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQKICAgICAgICAvLyBhbmQgcGFyc2VBd2FpdEV4cHJlc3Npb24gd2lsbCByZXBvcnQgdGhlIGVycm9yLgogICAgICB9CiAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdzZXQnKSAmJiB0b2tlbi5uZXh0Lm5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgIC8vIFJlY292ZXJ5OiBpbnZhbGlkIHVzZSBvZiBgc2V0YAogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgdG9rZW4ubmV4dCwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgICByZXR1cm4gcGFyc2VTdGF0ZW1lbnRYKHRva2VuLm5leHQpOwogICAgfSBlbHNlIGlmICh0b2tlbi5uZXh0LmlzSWRlbnRpZmllcikgewogICAgICBpZiAob3B0aW9uYWwoJzonLCB0b2tlbi5uZXh0Lm5leHQpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlTGFiZWxlZFN0YXRlbWVudCh0b2tlbik7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb24odG9rZW4pOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb24odG9rZW4pOwogICAgfQogIH0KCiAgLy8vIGBgYAogIC8vLyB5aWVsZFN0YXRlbWVudDoKICAvLy8gICAneWllbGQnIGV4cHJlc3Npb24/ICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlWWllbGRTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGJlZ2luID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCd5aWVsZCcsIHRva2VuKSk7CiAgICBsaXN0ZW5lci5iZWdpbllpZWxkU3RhdGVtZW50KGJlZ2luKTsKICAgIFRva2VuIHN0YXJUb2tlbjsKICAgIGlmIChvcHRpb25hbCgnKicsIHRva2VuLm5leHQpKSB7CiAgICAgIHN0YXJUb2tlbiA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgIHRva2VuID0gZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZFlpZWxkU3RhdGVtZW50KGJlZ2luLCBzdGFyVG9rZW4sIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gcmV0dXJuU3RhdGVtZW50OgogIC8vLyAgICdyZXR1cm4nIGV4cHJlc3Npb24/ICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlUmV0dXJuU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBiZWdpbiA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgncmV0dXJuJywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luUmV0dXJuU3RhdGVtZW50KGJlZ2luKTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCc7JywgbmV4dCkpIHsKICAgICAgbGlzdGVuZXIuZW5kUmV0dXJuU3RhdGVtZW50KGZhbHNlLCBiZWdpbiwgbmV4dCk7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQogICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pOwogICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuZW5kUmV0dXJuU3RhdGVtZW50KHRydWUsIGJlZ2luLCB0b2tlbik7CiAgICBpZiAoaW5HZW5lcmF0b3IpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZFN0YXRlbWVudCgKICAgICAgICAgIGJlZ2luLCBmYXN0YS5tZXNzYWdlR2VuZXJhdG9yUmV0dXJuc1ZhbHVlKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gbGFiZWw6CiAgLy8vICAgaWRlbnRpZmllciAnOicKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUxhYmVsKFRva2VuIHRva2VuKSB7CiAgICBhc3NlcnQodG9rZW4ubmV4dC5pc0lkZW50aWZpZXIpOwogICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5sYWJlbERlY2xhcmF0aW9uKS5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc6JywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmhhbmRsZUxhYmVsKHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gc3RhdGVtZW50OgogIC8vLyAgIGxhYmVsKiBub25MYWJlbGxlZFN0YXRlbWVudAogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlTGFiZWxlZFN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQobmV4dC5pc0lkZW50aWZpZXIpOwogICAgYXNzZXJ0KG9wdGlvbmFsKCc6JywgbmV4dC5uZXh0KSk7CiAgICBpbnQgbGFiZWxDb3VudCA9IDA7CiAgICBkbyB7CiAgICAgIHRva2VuID0gcGFyc2VMYWJlbCh0b2tlbik7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBsYWJlbENvdW50Kys7CiAgICB9IHdoaWxlIChuZXh0LmlzSWRlbnRpZmllciAmJiBvcHRpb25hbCgnOicsIG5leHQubmV4dCkpOwogICAgbGlzdGVuZXIuYmVnaW5MYWJlbGVkU3RhdGVtZW50KG5leHQsIGxhYmVsQ291bnQpOwogICAgdG9rZW4gPSBwYXJzZVN0YXRlbWVudCh0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRMYWJlbGVkU3RhdGVtZW50KGxhYmVsQ291bnQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBleHByZXNzaW9uU3RhdGVtZW50OgogIC8vLyAgIGV4cHJlc3Npb24/ICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIC8vLwogIC8vLyBOb3RlOiBUaGlzIG1ldGhvZCBjYW4gZmFpbCB0byBtYWtlIHByb2dyZXNzLiBJZiB0aGVyZSBpcyBuZWl0aGVyIGFuCiAgLy8vIGV4cHJlc3Npb24gbm9yIGEgc2VtaS1jb2xvbiwgdGhlbiBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIGFuZCBzeW50aGV0aWMKICAvLy8gc2VtaWNvbG9uIHdpbGwgYmUgaW5zZXJ0ZWQgYmVmb3JlIFt0b2tlbl0gYW5kIHRoZSBzZW1pY29sb24gd2lsbCBiZQogIC8vLyByZXR1cm5lZC4KICBUb2tlbiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIC8vIFRPRE8oYnJpYW53aWxrZXJzb24pOiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBub3QgdGhlIHN0YXJ0IG9mIGEgdmFsaWQKICAgIC8vIGV4cHJlc3Npb24sIHRoZW4gdGhpcyBtZXRob2Qgc2hvdWxkbid0IHJlcG9ydCB0aGF0IHdlIGhhdmUgYW4gZXhwcmVzc2lvbgogICAgLy8gc3RhdGVtZW50LgogICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pOwogICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuaGFuZGxlRXhwcmVzc2lvblN0YXRlbWVudCh0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBpbnQgZXhwcmVzc2lvbkRlcHRoID0gMDsKICBUb2tlbiBwYXJzZUV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGlmIChleHByZXNzaW9uRGVwdGgrKyA+IDUwMCkgewogICAgICAvLyBUaGlzIGhhcHBlbnMgaW4gZGVnZW5lcmF0ZSBwcm9ncmFtcywgZm9yIGV4YW1wbGUsIHdpdGggYSBsb3Qgb2YgbmVzdGVkCiAgICAgIC8vIGxpc3QgbGl0ZXJhbHMuIFRoaXMgaXMgcHJvdm9rZWQgYnksIGZvciBleGFtcGxlLCB0aGUgbGFuZ3VhZ2UgdGVzdAogICAgICAvLyBkZWVwX25lc3RpbmcxX25lZ2F0aXZlX3Rlc3QuCiAgICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VTdGFja092ZXJmbG93KTsKCiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIFRva2VuIGVuZEdyb3VwID0gbmV4dC5lbmRHcm91cDsKICAgICAgaWYgKGVuZEdyb3VwICE9IG51bGwpIHsKICAgICAgICB3aGlsZSAoIW5leHQuaXNFb2YgJiYgIWlkZW50aWNhbChuZXh0LCBlbmRHcm91cCkpIHsKICAgICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB3aGlsZSAoIWlzT25lT2YobmV4dCwgY29uc3QgWycpJywgJ10nLCAnfScsICc7J10pKSB7CiAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCF0b2tlbi5pc0VvZikgewogICAgICAgIHRva2VuID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQuZXhwcmVzc2lvbik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHRva2VuID0gb3B0aW9uYWwoJ3Rocm93JywgdG9rZW4ubmV4dCkKICAgICAgICAgID8gcGFyc2VUaHJvd0V4cHJlc3Npb24odG9rZW4sIHRydWUpCiAgICAgICAgICA6IHBhcnNlUHJlY2VkZW5jZUV4cHJlc3Npb24odG9rZW4sIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgdHJ1ZSk7CiAgICB9CiAgICBleHByZXNzaW9uRGVwdGgtLTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlRXhwcmVzc2lvbldpdGhvdXRDYXNjYWRlKFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gb3B0aW9uYWwoJ3Rocm93JywgdG9rZW4ubmV4dCkKICAgICAgICA/IHBhcnNlVGhyb3dFeHByZXNzaW9uKHRva2VuLCBmYWxzZSkKICAgICAgICA6IHBhcnNlUHJlY2VkZW5jZUV4cHJlc3Npb24odG9rZW4sIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSwgZmFsc2UpOwogIH0KCiAgVG9rZW4gcGFyc2VDb25kaXRpb25hbEV4cHJlc3Npb25SZXN0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBxdWVzdGlvbiA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnPycsIHF1ZXN0aW9uKSk7CiAgICBsaXN0ZW5lci5iZWdpbkNvbmRpdGlvbmFsRXhwcmVzc2lvbih0b2tlbik7CiAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbldpdGhvdXRDYXNjYWRlKHRva2VuKTsKICAgIFRva2VuIGNvbG9uID0gZW5zdXJlQ29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuaGFuZGxlQ29uZGl0aW9uYWxFeHByZXNzaW9uQ29sb24oKTsKICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uV2l0aG91dENhc2NhZGUoY29sb24pOwogICAgbGlzdGVuZXIuZW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKHF1ZXN0aW9uLCBjb2xvbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVByZWNlZGVuY2VFeHByZXNzaW9uKAogICAgICBUb2tlbiB0b2tlbiwgaW50IHByZWNlZGVuY2UsIGJvb2wgYWxsb3dDYXNjYWRlcykgewogICAgYXNzZXJ0KHByZWNlZGVuY2UgPj0gMSk7CiAgICBhc3NlcnQocHJlY2VkZW5jZSA8PSBTRUxFQ1RPUl9QUkVDRURFTkNFKTsKICAgIHRva2VuID0gcGFyc2VVbmFyeUV4cHJlc3Npb24odG9rZW4sIGFsbG93Q2FzY2FkZXMpOwogICAgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVBcmcgPSBjb21wdXRlTWV0aG9kVHlwZUFyZ3VtZW50cyh0b2tlbik7CiAgICBpZiAodHlwZUFyZyAhPSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICAgIC8vIEZvciBleGFtcGxlIGEoYik8VD4oYyksIHdoZXJlIHRva2VuIGlzIGJlZm9yZSAnPCcuCiAgICAgIHRva2VuID0gdHlwZUFyZy5wYXJzZUFyZ3VtZW50cyh0b2tlbiwgdGhpcyk7CiAgICAgIGFzc2VydChvcHRpb25hbCgnKCcsIHRva2VuLm5leHQpKTsKICAgIH0KICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgVG9rZW5UeXBlIHR5cGUgPSBuZXh0LnR5cGU7CiAgICBpbnQgdG9rZW5MZXZlbCA9IF9jb21wdXRlUHJlY2VkZW5jZShuZXh0KTsKICAgIGZvciAoaW50IGxldmVsID0gdG9rZW5MZXZlbDsgbGV2ZWwgPj0gcHJlY2VkZW5jZTsgLS1sZXZlbCkgewogICAgICBpbnQgbGFzdEJpbmFyeUV4cHJlc3Npb25MZXZlbCA9IC0xOwogICAgICB3aGlsZSAoaWRlbnRpY2FsKHRva2VuTGV2ZWwsIGxldmVsKSkgewogICAgICAgIFRva2VuIG9wZXJhdG9yID0gbmV4dDsKICAgICAgICBpZiAoaWRlbnRpY2FsKHRva2VuTGV2ZWwsIENBU0NBREVfUFJFQ0VERU5DRSkpIHsKICAgICAgICAgIGlmICghYWxsb3dDYXNjYWRlcykgewogICAgICAgICAgICByZXR1cm4gdG9rZW47CiAgICAgICAgICB9CiAgICAgICAgICB0b2tlbiA9IHBhcnNlQ2FzY2FkZUV4cHJlc3Npb24odG9rZW4pOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHRva2VuTGV2ZWwsIEFTU0lHTk1FTlRfUFJFQ0VERU5DRSkpIHsKICAgICAgICAgIC8vIFJpZ2h0IGFzc29jaWF0aXZlLCBzbyB3ZSByZWN1cnNlIGF0IHRoZSBzYW1lIHByZWNlZGVuY2UKICAgICAgICAgIC8vIGxldmVsLgogICAgICAgICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgICB0b2tlbiA9IG9wdGlvbmFsKCd0aHJvdycsIG5leHQubmV4dCkKICAgICAgICAgICAgICA/IHBhcnNlVGhyb3dFeHByZXNzaW9uKG5leHQsIGZhbHNlKQogICAgICAgICAgICAgIDogcGFyc2VQcmVjZWRlbmNlRXhwcmVzc2lvbihuZXh0LCBsZXZlbCwgYWxsb3dDYXNjYWRlcyk7CiAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVBc3NpZ25tZW50RXhwcmVzc2lvbihvcGVyYXRvcik7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodG9rZW5MZXZlbCwgUE9TVEZJWF9QUkVDRURFTkNFKSkgewogICAgICAgICAgaWYgKChpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLlBMVVNfUExVUykpIHx8CiAgICAgICAgICAgICAgKGlkZW50aWNhbCh0eXBlLCBUb2tlblR5cGUuTUlOVVNfTUlOVVMpKSkgewogICAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVVbmFyeVBvc3RmaXhBc3NpZ25tZW50RXhwcmVzc2lvbih0b2tlbi5uZXh0KTsKICAgICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLkJBTkcpKSB7CiAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZU5vbk51bGxBc3NlcnRFeHByZXNzaW9uKHRva2VuLm5leHQpOwogICAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodG9rZW5MZXZlbCwgU0VMRUNUT1JfUFJFQ0VERU5DRSkpIHsKICAgICAgICAgIGlmIChpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLlBFUklPRCkgfHwKICAgICAgICAgICAgICBpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLlFVRVNUSU9OX1BFUklPRCkpIHsKICAgICAgICAgICAgLy8gTGVmdCBhc3NvY2lhdGl2ZSwgc28gd2UgcmVjdXJzZSBhdCB0aGUgbmV4dCBoaWdoZXIgcHJlY2VkZW5jZQogICAgICAgICAgICAvLyBsZXZlbC4gSG93ZXZlciwgU0VMRUNUT1JfUFJFQ0VERU5DRSBpcyB0aGUgaGlnaGVzdCBsZXZlbCwgc28gd2UKICAgICAgICAgICAgLy8gc2hvdWxkIGp1c3QgY2FsbCBbcGFyc2VVbmFyeUV4cHJlc3Npb25dIGRpcmVjdGx5LiBIb3dldmVyLCBhCiAgICAgICAgICAgIC8vIHVuYXJ5IGV4cHJlc3Npb24gaXNuJ3QgbGVnYWwgYWZ0ZXIgYSBwZXJpb2QsIHNvIHdlIGNhbGwKICAgICAgICAgICAgLy8gW3BhcnNlUHJpbWFyeV0gaW5zdGVhZC4KICAgICAgICAgICAgdG9rZW4gPSBwYXJzZVByaW1hcnkoCiAgICAgICAgICAgICAgICB0b2tlbi5uZXh0LCBJZGVudGlmaWVyQ29udGV4dC5leHByZXNzaW9uQ29udGludWF0aW9uKTsKICAgICAgICAgICAgbGlzdGVuZXIuZW5kQmluYXJ5RXhwcmVzc2lvbihvcGVyYXRvcik7CiAgICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh0eXBlLCBUb2tlblR5cGUuT1BFTl9QQVJFTikgfHwKICAgICAgICAgICAgICBpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLk9QRU5fU1FVQVJFX0JSQUNLRVQpIHx8CiAgICAgICAgICAgICAgaWRlbnRpY2FsKHR5cGUsIFRva2VuVHlwZS5RVUVTVElPTl9QRVJJT0RfT1BFTl9TUVVBUkVfQlJBQ0tFVCkpIHsKICAgICAgICAgICAgdG9rZW4gPSBwYXJzZUFyZ3VtZW50T3JJbmRleFN0YXIodG9rZW4sIHR5cGVBcmcpOwogICAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLklOREVYKSkgewogICAgICAgICAgICBCZWdpblRva2VuIHJlcGxhY2VtZW50ID0gbGluaygKICAgICAgICAgICAgICAgIG5ldyBCZWdpblRva2VuKFRva2VuVHlwZS5PUEVOX1NRVUFSRV9CUkFDS0VULCBuZXh0LmNoYXJPZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgbmV4dC5wcmVjZWRpbmdDb21tZW50cyksCiAgICAgICAgICAgICAgICBuZXcgVG9rZW4oVG9rZW5UeXBlLkNMT1NFX1NRVUFSRV9CUkFDS0VULCBuZXh0LmNoYXJPZmZzZXQgKyAxKSk7CiAgICAgICAgICAgIHJld3JpdGVyLnJlcGxhY2VUb2tlbkZvbGxvd2luZyh0b2tlbiwgcmVwbGFjZW1lbnQpOwogICAgICAgICAgICByZXBsYWNlbWVudC5lbmRUb2tlbiA9IHJlcGxhY2VtZW50Lm5leHQ7CiAgICAgICAgICAgIHRva2VuID0gcGFyc2VBcmd1bWVudE9ySW5kZXhTdGFyKHRva2VuLCBub1R5cGVQYXJhbU9yQXJnKTsKICAgICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHR5cGUsIFRva2VuVHlwZS5CQU5HKSkgewogICAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVOb25OdWxsQXNzZXJ0RXhwcmVzc2lvbih0b2tlbi5uZXh0KTsKICAgICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgICAgIHRva2VuLm5leHQsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHR5cGUsIFRva2VuVHlwZS5JUykpIHsKICAgICAgICAgIHRva2VuID0gcGFyc2VJc09wZXJhdG9yUmVzdCh0b2tlbik7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLkFTKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZUFzT3BlcmF0b3JSZXN0KHRva2VuKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh0eXBlLCBUb2tlblR5cGUuUVVFU1RJT04pKSB7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uUmVzdCh0b2tlbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChsZXZlbCA9PSBFUVVBTElUWV9QUkVDRURFTkNFIHx8IGxldmVsID09IFJFTEFUSU9OQUxfUFJFQ0VERU5DRSkgewogICAgICAgICAgICAvLyBXZSBkb24ndCBhbGxvdyAoYSA9PSBiID09IGMpIG9yIChhIDwgYiA8IGMpLgogICAgICAgICAgICBpZiAobGFzdEJpbmFyeUV4cHJlc3Npb25MZXZlbCA9PSBsZXZlbCkgewogICAgICAgICAgICAgIC8vIFJlcG9ydCBhbiBlcnJvciwgdGhlbiBjb250aW51ZSBwYXJzaW5nIGFzIGlmIGl0IGlzIGxlZ2FsLgogICAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgICAgIG5leHQsIGZhc3RhLm1lc3NhZ2VFcXVhbGl0eUNhbm5vdEJlRXF1YWxpdHlPcGVyYW5kKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAvLyBTZXQgYSBmbGFnIHRvIGNhdGNoIHN1YnNlcXVlbnQgYmluYXJ5IGV4cHJlc3Npb25zIG9mIHRoaXMgdHlwZS4KICAgICAgICAgICAgICBsYXN0QmluYXJ5RXhwcmVzc2lvbkxldmVsID0gbGV2ZWw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGxpc3RlbmVyLmJlZ2luQmluYXJ5RXhwcmVzc2lvbihuZXh0KTsKICAgICAgICAgIC8vIExlZnQgYXNzb2NpYXRpdmUsIHNvIHdlIHJlY3Vyc2UgYXQgdGhlIG5leHQgaGlnaGVyCiAgICAgICAgICAvLyBwcmVjZWRlbmNlIGxldmVsLgogICAgICAgICAgdG9rZW4gPQogICAgICAgICAgICAgIHBhcnNlUHJlY2VkZW5jZUV4cHJlc3Npb24odG9rZW4ubmV4dCwgbGV2ZWwgKyAxLCBhbGxvd0Nhc2NhZGVzKTsKICAgICAgICAgIGxpc3RlbmVyLmVuZEJpbmFyeUV4cHJlc3Npb24ob3BlcmF0b3IpOwogICAgICAgIH0KICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB0eXBlID0gbmV4dC50eXBlOwogICAgICAgIHRva2VuTGV2ZWwgPSBfY29tcHV0ZVByZWNlZGVuY2UobmV4dCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIGludCBfY29tcHV0ZVByZWNlZGVuY2UoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuVHlwZSB0eXBlID0gdG9rZW4udHlwZTsKICAgIGlmIChpZGVudGljYWwodHlwZSwgVG9rZW5UeXBlLkJBTkcpKSB7CiAgICAgIC8vIFRoZSAnIScgaGFzIHByZWZpeCBwcmVjZWRlbmNlIGJ1dCBoZXJlIGl0J3MgYmVpbmcgdXNlZCBhcyBhCiAgICAgIC8vIHBvc3RmaXggb3BlcmF0b3IgdG8gYXNzZXJ0IHRoZSBleHByZXNzaW9uIGhhcyBhIG5vbi1udWxsIHZhbHVlLgogICAgICBpZiAoaWRlbnRpY2FsKHRva2VuLm5leHQudHlwZSwgVG9rZW5UeXBlLlBFUklPRCkpIHsKICAgICAgICByZXR1cm4gU0VMRUNUT1JfUFJFQ0VERU5DRTsKICAgICAgfQogICAgICByZXR1cm4gUE9TVEZJWF9QUkVDRURFTkNFOwogICAgfQogICAgcmV0dXJuIHR5cGUucHJlY2VkZW5jZTsKICB9CgogIFRva2VuIHBhcnNlQ2FzY2FkZUV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGNhc2NhZGVPcGVyYXRvciA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnLi4nLCBjYXNjYWRlT3BlcmF0b3IpKTsKICAgIGxpc3RlbmVyLmJlZ2luQ2FzY2FkZShjYXNjYWRlT3BlcmF0b3IpOwogICAgaWYgKG9wdGlvbmFsKCdbJywgdG9rZW4ubmV4dCkpIHsKICAgICAgdG9rZW4gPSBwYXJzZUFyZ3VtZW50T3JJbmRleFN0YXIodG9rZW4sIG5vVHlwZVBhcmFtT3JBcmcpOwogICAgfSBlbHNlIHsKICAgICAgdG9rZW4gPSBwYXJzZVNlbmQodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmV4cHJlc3Npb25Db250aW51YXRpb24pOwogICAgICBsaXN0ZW5lci5lbmRCaW5hcnlFeHByZXNzaW9uKGNhc2NhZGVPcGVyYXRvcik7CiAgICB9CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIFRva2VuIG1hcms7CiAgICBkbyB7CiAgICAgIG1hcmsgPSB0b2tlbjsKICAgICAgaWYgKG9wdGlvbmFsKCcuJywgbmV4dCkgfHwgb3B0aW9uYWwoJz8uJywgbmV4dCkpIHsKICAgICAgICBUb2tlbiBwZXJpb2QgPSBuZXh0OwogICAgICAgIHRva2VuID0gcGFyc2VTZW5kKG5leHQsIElkZW50aWZpZXJDb250ZXh0LmV4cHJlc3Npb25Db250aW51YXRpb24pOwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIGxpc3RlbmVyLmVuZEJpbmFyeUV4cHJlc3Npb24ocGVyaW9kKTsKICAgICAgfQogICAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZUFyZyA9IGNvbXB1dGVNZXRob2RUeXBlQXJndW1lbnRzKHRva2VuKTsKICAgICAgaWYgKHR5cGVBcmcgIT0gbm9UeXBlUGFyYW1PckFyZykgewogICAgICAgIC8vIEZvciBleGFtcGxlIGEoYikuLjxUPihjKSwgd2hlcmUgdG9rZW4gaXMgJzwnLgogICAgICAgIHRva2VuID0gdHlwZUFyZy5wYXJzZUFyZ3VtZW50cyh0b2tlbiwgdGhpcyk7CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICAgYXNzZXJ0KG9wdGlvbmFsKCcoJywgbmV4dCkpOwogICAgICB9CiAgICAgIHRva2VuID0gcGFyc2VBcmd1bWVudE9ySW5kZXhTdGFyKHRva2VuLCB0eXBlQXJnKTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICB9IHdoaWxlICghaWRlbnRpY2FsKG1hcmssIHRva2VuKSk7CgogICAgaWYgKGlkZW50aWNhbChuZXh0LnR5cGUucHJlY2VkZW5jZSwgQVNTSUdOTUVOVF9QUkVDRURFTkNFKSkgewogICAgICBUb2tlbiBhc3NpZ25tZW50ID0gbmV4dDsKICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb25XaXRob3V0Q2FzY2FkZShuZXh0KTsKICAgICAgbGlzdGVuZXIuaGFuZGxlQXNzaWdubWVudEV4cHJlc3Npb24oYXNzaWdubWVudCk7CiAgICB9CiAgICBsaXN0ZW5lci5lbmRDYXNjYWRlKCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVVuYXJ5RXhwcmVzc2lvbihUb2tlbiB0b2tlbiwgYm9vbCBhbGxvd0Nhc2NhZGVzKSB7CiAgICBTdHJpbmcgdmFsdWUgPSB0b2tlbi5uZXh0LnN0cmluZ1ZhbHVlOwogICAgLy8gUHJlZml4OgogICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2F3YWl0JykpIHsKICAgICAgaWYgKGluUGxhaW5TeW5jKSB7CiAgICAgICAgaWYgKCFsb29rc0xpa2VBd2FpdEV4cHJlc3Npb24odG9rZW4pKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VQcmltYXJ5KHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5leHByZXNzaW9uKTsKICAgICAgICB9CiAgICAgICAgLy8gUmVjb3Zlcnk6IExvb2tzIGxpa2UgYW4gZXhwcmVzc2lvbiBwcmVjZWRlZCBieSBgYXdhaXRgLgogICAgICAgIC8vIEZhbGwgdGhyb3VnaCBhbmQgbGV0IHBhcnNlQXdhaXRFeHByZXNzaW9uIHJlcG9ydCB0aGUgZXJyb3IuCiAgICAgIH0KICAgICAgcmV0dXJuIHBhcnNlQXdhaXRFeHByZXNzaW9uKHRva2VuLCBhbGxvd0Nhc2NhZGVzKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAnKycpKSB7CiAgICAgIC8vIERhcnQgbm8gbG9uZ2VyIGFsbG93cyBwcmVmaXgtcGx1cy4KICAgICAgcmV3cml0ZUFuZFJlY292ZXIoCiAgICAgICAgICB0b2tlbiwKICAgICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciByZXBvcnRpbmcgIm1pc3NpbmcgaWRlbnRpZmllciIgaW5zdGVhZC4KICAgICAgICAgIGZhc3RhLm1lc3NhZ2VVbnN1cHBvcnRlZFByZWZpeFBsdXMsCiAgICAgICAgICBuZXcgU3ludGhldGljU3RyaW5nVG9rZW4oCiAgICAgICAgICAgICAgVG9rZW5UeXBlLklERU5USUZJRVIsICcnLCB0b2tlbi5uZXh0Lm9mZnNldCkpOwogICAgICByZXR1cm4gcGFyc2VQcmltYXJ5KHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5leHByZXNzaW9uKTsKICAgIH0gZWxzZSBpZiAoKGlkZW50aWNhbCh2YWx1ZSwgJyEnKSkgfHwKICAgICAgICAoaWRlbnRpY2FsKHZhbHVlLCAnLScpKSB8fAogICAgICAgIChpZGVudGljYWwodmFsdWUsICd+JykpKSB7CiAgICAgIFRva2VuIG9wZXJhdG9yID0gdG9rZW4ubmV4dDsKICAgICAgLy8gUmlnaHQgYXNzb2NpYXRpdmUsIHNvIHdlIHJlY3Vyc2UgYXQgdGhlIHNhbWUgcHJlY2VkZW5jZQogICAgICAvLyBsZXZlbC4KICAgICAgdG9rZW4gPSBwYXJzZVByZWNlZGVuY2VFeHByZXNzaW9uKAogICAgICAgICAgdG9rZW4ubmV4dCwgUE9TVEZJWF9QUkVDRURFTkNFLCBhbGxvd0Nhc2NhZGVzKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlVW5hcnlQcmVmaXhFeHByZXNzaW9uKG9wZXJhdG9yKTsKICAgICAgcmV0dXJuIHRva2VuOwogICAgfSBlbHNlIGlmICgoaWRlbnRpY2FsKHZhbHVlLCAnKysnKSkgfHwgaWRlbnRpY2FsKHZhbHVlLCAnLS0nKSkgewogICAgICAvLyBUT0RPKGFoZSk6IFZhbGlkYXRlIHRoaXMgaXMgdXNlZCBjb3JyZWN0bHkuCiAgICAgIFRva2VuIG9wZXJhdG9yID0gdG9rZW4ubmV4dDsKICAgICAgLy8gUmlnaHQgYXNzb2NpYXRpdmUsIHNvIHdlIHJlY3Vyc2UgYXQgdGhlIHNhbWUgcHJlY2VkZW5jZQogICAgICAvLyBsZXZlbC4KICAgICAgdG9rZW4gPSBwYXJzZVByZWNlZGVuY2VFeHByZXNzaW9uKAogICAgICAgICAgdG9rZW4ubmV4dCwgUE9TVEZJWF9QUkVDRURFTkNFLCBhbGxvd0Nhc2NhZGVzKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlVW5hcnlQcmVmaXhBc3NpZ25tZW50RXhwcmVzc2lvbihvcGVyYXRvcik7CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0gZWxzZSBpZiAodG9rZW4ubmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgiLiIsIGlkZW50aWZpZXIubmV4dCkpIHsKICAgICAgICBpZGVudGlmaWVyID0gaWRlbnRpZmllci5uZXh0Lm5leHQ7CiAgICAgIH0KICAgICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gTG9va2luZyBhdCBgaWRlbnRpZmllciAoJy4nIGlkZW50aWZpZXIpP2AuCiAgICAgICAgaWYgKG9wdGlvbmFsKCI8IiwgaWRlbnRpZmllci5uZXh0KSkgewogICAgICAgICAgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVBcmcgPSBjb21wdXRlVHlwZVBhcmFtT3JBcmcoaWRlbnRpZmllcik7CiAgICAgICAgICBpZiAodHlwZUFyZyAhPSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICAgICAgICAgIFRva2VuIGVuZFR5cGVBcmd1bWVudHMgPSB0eXBlQXJnLnNraXAoaWRlbnRpZmllcik7CiAgICAgICAgICAgIGlmIChvcHRpb25hbCgiLiIsIGVuZFR5cGVBcmd1bWVudHMubmV4dCkpIHsKICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbih0b2tlbiwgdHlwZUFyZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBwYXJzZVByaW1hcnkodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmV4cHJlc3Npb24pOwogIH0KCiAgVG9rZW4gcGFyc2VBcmd1bWVudE9ySW5kZXhTdGFyKFRva2VuIHRva2VuLCBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZUFyZykgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBUb2tlbiBiZWdpblRva2VuID0gbmV4dDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChvcHRpb25hbCgnWycsIG5leHQpIHx8IG9wdGlvbmFsKCc/LlsnLCBuZXh0KSkgewogICAgICAgIGFzc2VydCh0eXBlQXJnID09IG5vVHlwZVBhcmFtT3JBcmcpOwogICAgICAgIFRva2VuIG9wZW5TcXVhcmVCcmFja2V0ID0gbmV4dDsKICAgICAgICBib29sIG9sZCA9IG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9uczsKICAgICAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSB0cnVlOwogICAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKG5leHQpOwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IG9sZDsKICAgICAgICBpZiAoIW9wdGlvbmFsKCddJywgbmV4dCkpIHsKICAgICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnXScpKTsKICAgICAgICAgIC8vIFNjYW5uZXIgZW5zdXJlcyBhIGNsb3NpbmcgJ10nCiAgICAgICAgICBUb2tlbiBlbmRHcm91cCA9IG9wZW5TcXVhcmVCcmFja2V0LmVuZEdyb3VwOwogICAgICAgICAgaWYgKGVuZEdyb3VwLmlzU3ludGhldGljKSB7CiAgICAgICAgICAgIC8vIFNjYW5uZXIgaW5zZXJ0ZWQgY2xvc2luZyAnXScgaW4gdGhlIHdyb25nIHBsYWNlLCBzbyBtb3ZlIGl0LgogICAgICAgICAgICBuZXh0ID0gcmV3cml0ZXIubW92ZVN5bnRoZXRpYyh0b2tlbiwgZW5kR3JvdXApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gU2tpcCBvdmVyIHVuZXhwZWN0ZWQgdG9rZW5zIHRvIHdoZXJlIHRoZSB1c2VyIHBsYWNlZCB0aGUgYF1gLgogICAgICAgICAgICBuZXh0ID0gZW5kR3JvdXA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxpc3RlbmVyLmhhbmRsZUluZGV4ZWRFeHByZXNzaW9uKG9wZW5TcXVhcmVCcmFja2V0LCBuZXh0KTsKICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgdHlwZUFyZyA9IGNvbXB1dGVNZXRob2RUeXBlQXJndW1lbnRzKHRva2VuKTsKICAgICAgICBpZiAodHlwZUFyZyAhPSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICAgICAgICAvLyBGb3IgZXhhbXBsZSBhW2JdPFQ+KGMpLCB3aGVyZSB0b2tlbiBpcyBiZWZvcmUgJzwnLgogICAgICAgICAgdG9rZW4gPSB0eXBlQXJnLnBhcnNlQXJndW1lbnRzKHRva2VuLCB0aGlzKTsKICAgICAgICAgIGFzc2VydChvcHRpb25hbCgnKCcsIHRva2VuLm5leHQpKTsKICAgICAgICB9CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJygnLCBuZXh0KSkgewogICAgICAgIGlmICh0eXBlQXJnID09IG5vVHlwZVBhcmFtT3JBcmcpIHsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZUFyZ3VtZW50cyhuZXh0KTsKICAgICAgICB9CiAgICAgICAgdG9rZW4gPSBwYXJzZUFyZ3VtZW50cyh0b2tlbik7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlU2VuZChiZWdpblRva2VuLCB0b2tlbik7CiAgICAgICAgdHlwZUFyZyA9IGNvbXB1dGVNZXRob2RUeXBlQXJndW1lbnRzKHRva2VuKTsKICAgICAgICBpZiAodHlwZUFyZyAhPSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICAgICAgICAvLyBGb3IgZXhhbXBsZSBhKGIpPFQ+KGMpLCB3aGVyZSB0b2tlbiBpcyBiZWZvcmUgJzwnLgogICAgICAgICAgdG9rZW4gPSB0eXBlQXJnLnBhcnNlQXJndW1lbnRzKHRva2VuLCB0aGlzKTsKICAgICAgICAgIGFzc2VydChvcHRpb25hbCgnKCcsIHRva2VuLm5leHQpKTsKICAgICAgICB9CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlUHJpbWFyeShUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgZmluYWwga2luZCA9IHRva2VuLm5leHQua2luZDsKICAgIGlmIChraW5kID09IElERU5USUZJRVJfVE9LRU4pIHsKICAgICAgcmV0dXJuIHBhcnNlU2VuZE9yRnVuY3Rpb25MaXRlcmFsKHRva2VuLCBjb250ZXh0KTsKICAgIH0gZWxzZSBpZiAoa2luZCA9PSBJTlRfVE9LRU4gfHwga2luZCA9PSBIRVhBREVDSU1BTF9UT0tFTikgewogICAgICByZXR1cm4gcGFyc2VMaXRlcmFsSW50KHRva2VuKTsKICAgIH0gZWxzZSBpZiAoa2luZCA9PSBET1VCTEVfVE9LRU4pIHsKICAgICAgcmV0dXJuIHBhcnNlTGl0ZXJhbERvdWJsZSh0b2tlbik7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gU1RSSU5HX1RPS0VOKSB7CiAgICAgIHJldHVybiBwYXJzZUxpdGVyYWxTdHJpbmcodG9rZW4pOwogICAgfSBlbHNlIGlmIChraW5kID09IEhBU0hfVE9LRU4pIHsKICAgICAgcmV0dXJuIHBhcnNlTGl0ZXJhbFN5bWJvbCh0b2tlbik7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gS0VZV09SRF9UT0tFTikgewogICAgICBmaW5hbCBTdHJpbmcgdmFsdWUgPSB0b2tlbi5uZXh0LnN0cmluZ1ZhbHVlOwogICAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAidHJ1ZSIpIHx8IGlkZW50aWNhbCh2YWx1ZSwgImZhbHNlIikpIHsKICAgICAgICByZXR1cm4gcGFyc2VMaXRlcmFsQm9vbCh0b2tlbik7CiAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAibnVsbCIpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlTGl0ZXJhbE51bGwodG9rZW4pOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgInRoaXMiKSkgewogICAgICAgIHJldHVybiBwYXJzZVRoaXNFeHByZXNzaW9uKHRva2VuLCBjb250ZXh0KTsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICJzdXBlciIpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlU3VwZXJFeHByZXNzaW9uKHRva2VuLCBjb250ZXh0KTsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICJuZXciKSkgewogICAgICAgIHJldHVybiBwYXJzZU5ld0V4cHJlc3Npb24odG9rZW4pOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgImNvbnN0IikpIHsKICAgICAgICByZXR1cm4gcGFyc2VDb25zdEV4cHJlc3Npb24odG9rZW4pOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgInZvaWQiKSkgewogICAgICAgIHJldHVybiBwYXJzZVNlbmRPckZ1bmN0aW9uTGl0ZXJhbCh0b2tlbiwgY29udGV4dCk7CiAgICAgIH0gZWxzZSBpZiAoIWluUGxhaW5TeW5jICYmCiAgICAgICAgICAoaWRlbnRpY2FsKHZhbHVlLCAieWllbGQiKSB8fCBpZGVudGljYWwodmFsdWUsICJhc3luYyIpKSkgewogICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byB0aGUgcmVjb3ZlcnkgY29kZS4KICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICJhc3NlcnQiKSkgewogICAgICAgIHJldHVybiBwYXJzZUFzc2VydCh0b2tlbiwgQXNzZXJ0LkV4cHJlc3Npb24pOwogICAgICB9IGVsc2UgaWYgKHRva2VuLm5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlU2VuZE9yRnVuY3Rpb25MaXRlcmFsKHRva2VuLCBjb250ZXh0KTsKICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICJyZXR1cm4iKSkgewogICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4odG9rZW4sIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgICAgICByZXR1cm4gcGFyc2VQcmltYXJ5KHRva2VuLCBjb250ZXh0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gdGhlIHJlY292ZXJ5IGNvZGUuCiAgICAgIH0KICAgIH0gZWxzZSBpZiAoa2luZCA9PSBPUEVOX1BBUkVOX1RPS0VOKSB7CiAgICAgIHJldHVybiBwYXJzZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uT3JGdW5jdGlvbkxpdGVyYWwodG9rZW4pOwogICAgfSBlbHNlIGlmIChraW5kID09IE9QRU5fU1FVQVJFX0JSQUNLRVRfVE9LRU4gfHwKICAgICAgICBvcHRpb25hbCgnW10nLCB0b2tlbi5uZXh0KSkgewogICAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGVBcmd1bWVudHModG9rZW4ubmV4dCk7CiAgICAgIHJldHVybiBwYXJzZUxpdGVyYWxMaXN0U3VmZml4KHRva2VuLCBudWxsKTsKICAgIH0gZWxzZSBpZiAoa2luZCA9PSBPUEVOX0NVUkxZX0JSQUNLRVRfVE9LRU4pIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlQXJndW1lbnRzKHRva2VuLm5leHQpOwogICAgICByZXR1cm4gcGFyc2VMaXRlcmFsU2V0T3JNYXBTdWZmaXgodG9rZW4sIG51bGwpOwogICAgfSBlbHNlIGlmIChraW5kID09IExUX1RPS0VOKSB7CiAgICAgIHJldHVybiBwYXJzZUxpdGVyYWxMaXN0U2V0TWFwT3JGdW5jdGlvbih0b2tlbiwgbnVsbCk7CiAgICB9IGVsc2UgewogICAgICAvLyBGYWxsIHRocm91Z2ggdG8gdGhlIHJlY292ZXJ5IGNvZGUuCiAgICB9CiAgICAvLwogICAgLy8gUmVjb3ZlcnkgY29kZS4KICAgIC8vCiAgICByZXR1cm4gcGFyc2VTZW5kKHRva2VuLCBjb250ZXh0KTsKICB9CgogIFRva2VuIHBhcnNlUGFyZW50aGVzaXplZEV4cHJlc3Npb25PckZ1bmN0aW9uTGl0ZXJhbChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJygnLCBuZXh0KSk7CiAgICBUb2tlbiBuZXh0VG9rZW4gPSBuZXh0LmVuZEdyb3VwLm5leHQ7CiAgICBpbnQga2luZCA9IG5leHRUb2tlbi5raW5kOwogICAgaWYgKG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucykgewogICAgICBpZiAoKGlkZW50aWNhbChraW5kLCBGVU5DVElPTl9UT0tFTikgfHwKICAgICAgICAgIGlkZW50aWNhbChraW5kLCBPUEVOX0NVUkxZX0JSQUNLRVRfVE9LRU4pKSkgewogICAgICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZVZhcmlhYmxlcyhuZXh0KTsKICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24odG9rZW4pOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChraW5kLCBLRVlXT1JEX1RPS0VOKSB8fAogICAgICAgICAgaWRlbnRpY2FsKGtpbmQsIElERU5USUZJRVJfVE9LRU4pKSB7CiAgICAgICAgaWYgKG9wdGlvbmFsKCdhc3luYycsIG5leHRUb2tlbikgfHwgb3B0aW9uYWwoJ3N5bmMnLCBuZXh0VG9rZW4pKSB7CiAgICAgICAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGVWYXJpYWJsZXMobmV4dCk7CiAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkV4cHJlc3Npb24odG9rZW4pOwogICAgICAgIH0KICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgIC8vIElmIHRoZXJlIGlzIGEgc3RyYXkgc2ltcGxlIGlkZW50aWZpZXIgaW4gdGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24KICAgICAgICAvLyBiZWNhdXNlIHRoZSB1c2VyIGlzIHR5cGluZyAoZS5nLiBgKCkgYXN5IHt9YCkgdGhlbiBjb250aW51ZSBwYXJzaW5nCiAgICAgICAgLy8gYW5kIGFsbG93IHBhcnNlRnVuY3Rpb25FeHByZXNzaW9uIHRvIHJlcG9ydCBhbiB1bmV4cGVjdGVkIHRva2VuLgogICAgICAgIGtpbmQgPSBuZXh0VG9rZW4ubmV4dC5raW5kOwogICAgICAgIGlmICgoaWRlbnRpY2FsKGtpbmQsIEZVTkNUSU9OX1RPS0VOKSB8fAogICAgICAgICAgICBpZGVudGljYWwoa2luZCwgT1BFTl9DVVJMWV9CUkFDS0VUX1RPS0VOKSkpIHsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZVZhcmlhYmxlcyhuZXh0KTsKICAgICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbih0b2tlbik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBib29sIG9sZCA9IG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9uczsKICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IHRydWU7CiAgICB0b2tlbiA9IHBhcnNlUGFyZW50aGVzaXplZEV4cHJlc3Npb24odG9rZW4pOwogICAgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gb2xkOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gZW5zdXJlUGFyZW50aGVzaXplZENvbmRpdGlvbihUb2tlbiB0b2tlbikgewogICAgVG9rZW4gb3BlblBhcmVuID0gdG9rZW4ubmV4dDsKICAgIGlmICghb3B0aW9uYWwoJygnLCBvcGVuUGFyZW4pKSB7CiAgICAgIC8vIFJlY292ZXIKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIG9wZW5QYXJlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZFRva2VuLndpdGhBcmd1bWVudHMoJygnKSk7CiAgICAgIG9wZW5QYXJlbiA9IHJld3JpdGVyLmluc2VydFBhcmVucyh0b2tlbiwgZmFsc2UpOwogICAgfQogICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb25JblBhcmVudGhlc2lzUmVzdChvcGVuUGFyZW4pOwogICAgbGlzdGVuZXIuaGFuZGxlUGFyZW50aGVzaXplZENvbmRpdGlvbihvcGVuUGFyZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VQYXJlbnRoZXNpemVkRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbi5uZXh0OwogICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb25JblBhcmVudGhlc2lzKHRva2VuKTsKICAgIGxpc3RlbmVyLmhhbmRsZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKGJlZ2luKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlRXhwcmVzc2lvbkluUGFyZW50aGVzaXMoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25JblBhcmVudGhlc2lzUmVzdCh0b2tlbi5uZXh0KTsKICB9CgogIFRva2VuIHBhcnNlRXhwcmVzc2lvbkluUGFyZW50aGVzaXNSZXN0KFRva2VuIHRva2VuKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJygnLCB0b2tlbikpOwogICAgQmVnaW5Ub2tlbiBiZWdpbiA9IHRva2VuOwogICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pOwogICAgdG9rZW4gPSBlbnN1cmVDbG9zZVBhcmVuKHRva2VuLCBiZWdpbik7CiAgICBhc3NlcnQob3B0aW9uYWwoJyknLCB0b2tlbikpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VUaGlzRXhwcmVzc2lvbihUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgVG9rZW4gdGhpc1Rva2VuID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCd0aGlzJywgdGhpc1Rva2VuKSk7CiAgICBsaXN0ZW5lci5oYW5kbGVUaGlzRXhwcmVzc2lvbih0aGlzVG9rZW4sIGNvbnRleHQpOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJygnLCBuZXh0KSkgewogICAgICAvLyBDb25zdHJ1Y3RvciBmb3J3YXJkaW5nLgogICAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGVBcmd1bWVudHMobmV4dCk7CiAgICAgIHRva2VuID0gcGFyc2VBcmd1bWVudHModG9rZW4pOwogICAgICBsaXN0ZW5lci5oYW5kbGVTZW5kKHRoaXNUb2tlbiwgdG9rZW4ubmV4dCk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVN1cGVyRXhwcmVzc2lvbihUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgVG9rZW4gc3VwZXJUb2tlbiA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnc3VwZXInLCB0b2tlbikpOwogICAgbGlzdGVuZXIuaGFuZGxlU3VwZXJFeHByZXNzaW9uKHN1cGVyVG9rZW4sIGNvbnRleHQpOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJygnLCBuZXh0KSkgewogICAgICAvLyBTdXBlciBjb25zdHJ1Y3Rvci4KICAgICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlQXJndW1lbnRzKG5leHQpOwogICAgICB0b2tlbiA9IHBhcnNlQXJndW1lbnRzKHRva2VuKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlU2VuZChzdXBlclRva2VuLCB0b2tlbi5uZXh0KTsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoIj8uIiwgbmV4dCkpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlU3VwZXJOdWxsQXdhcmUpOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFRoaXMgbWV0aG9kIHBhcnNlcyB0aGUgcG9ydGlvbiBvZiBhIGxpc3QgbGl0ZXJhbCBzdGFydGluZyB3aXRoIHRoZSBsZWZ0CiAgLy8vIHNxdWFyZSBicmFja2V0LgogIC8vLwogIC8vLyBgYGAKICAvLy8gbGlzdExpdGVyYWw6CiAgLy8vICAgJ2NvbnN0Jz8gdHlwZUFyZ3VtZW50cz8gJ1snIChleHByZXNzaW9uTGlzdCAnLCc/KT8gJ10nCiAgLy8vIDsKICAvLy8gYGBgCiAgLy8vCiAgLy8vIFByb3ZpZGUgYSBbY29uc3RLZXl3b3JkXSBpZiB0aGUgbGl0ZXJhbCBpcyBwcmVjZWRlZCBieSAnY29uc3QnLCBvciBgbnVsbGAKICAvLy8gaWYgbm90LiBUaGlzIGlzIGEgc3VmZml4IHBhcnNlciBiZWNhdXNlIGl0IGlzIGFzc3VtZWQgdGhhdCB0eXBlIGFyZ3VtZW50cwogIC8vLyBoYXZlIGJlZW4gcGFyc2VkLCBvciBgbGlzdGVuZXIuaGFuZGxlTm9UeXBlQXJndW1lbnRzYCBoYXMgYmVlbiBleGVjdXRlZC4KICBUb2tlbiBwYXJzZUxpdGVyYWxMaXN0U3VmZml4KFRva2VuIHRva2VuLCBUb2tlbiBjb25zdEtleXdvcmQpIHsKICAgIFRva2VuIGJlZm9yZVRva2VuID0gdG9rZW47CiAgICBUb2tlbiBiZWdpblRva2VuID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdbJywgdG9rZW4pIHx8IG9wdGlvbmFsKCdbXScsIHRva2VuKSk7CiAgICBpbnQgY291bnQgPSAwOwogICAgaWYgKG9wdGlvbmFsKCdbXScsIHRva2VuKSkgewogICAgICB0b2tlbiA9IHJld3JpdGVTcXVhcmVCcmFja2V0cyhiZWZvcmVUb2tlbikubmV4dDsKICAgICAgbGlzdGVuZXIuaGFuZGxlTGl0ZXJhbExpc3QoMCwgdG9rZW4sIGNvbnN0S2V5d29yZCwgdG9rZW4ubmV4dCk7CiAgICAgIHJldHVybiB0b2tlbi5uZXh0OwogICAgfQogICAgYm9vbCBvbGQgPSBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnM7CiAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSB0cnVlOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnXScsIG5leHQpKSB7CiAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGludCBpZkNvdW50ID0gMDsKICAgICAgTGl0ZXJhbEVudHJ5SW5mbyBpbmZvID0gY29tcHV0ZUxpdGVyYWxFbnRyeSh0b2tlbik7CiAgICAgIHdoaWxlIChpbmZvICE9IG51bGwpIHsKICAgICAgICBpZiAoaW5mby5oYXNFbnRyeSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0b2tlbiA9IGluZm8ucGFyc2UodG9rZW4sIHRoaXMpOwogICAgICAgIH0KICAgICAgICBpZkNvdW50ICs9IGluZm8uaWZDb25kaXRpb25EZWx0YTsKICAgICAgICBpbmZvID0gaW5mby5jb21wdXRlTmV4dCh0b2tlbik7CiAgICAgIH0KICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgICsrY291bnQ7CiAgICAgIGlmICghb3B0aW9uYWwoJywnLCBuZXh0KSkgewogICAgICAgIGlmIChvcHRpb25hbCgnXScsIG5leHQpKSB7CiAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgaWYgKCFsb29rc0xpa2VMaXRlcmFsRW50cnkobmV4dCkpIHsKICAgICAgICAgIGlmIChiZWdpblRva2VuLmVuZEdyb3VwLmlzU3ludGhldGljKSB7CiAgICAgICAgICAgIC8vIFRoZSBzY2FubmVyIGhhcyBhbHJlYWR5IHJlcG9ydGVkIGFuIGVycm9yLAogICAgICAgICAgICAvLyBidXQgaW5zZXJ0ZWQgYF1gIGluIHRoZSB3cm9uZyBwbGFjZS4KICAgICAgICAgICAgdG9rZW4gPSByZXdyaXRlci5tb3ZlU3ludGhldGljKHRva2VuLCBiZWdpblRva2VuLmVuZEdyb3VwKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFJlcG9ydCBhbiBlcnJvciBhbmQganVtcCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCddJykpOwogICAgICAgICAgICB0b2tlbiA9IGJlZ2luVG9rZW4uZW5kR3JvdXA7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgLy8gVGhpcyBsb29rcyBsaWtlIHRoZSBzdGFydCBvZiBhbiBleHByZXNzaW9uLgogICAgICAgIC8vIFJlcG9ydCBhbiBlcnJvciwgaW5zZXJ0IHRoZSBjb21tYSwgYW5kIGNvbnRpbnVlIHBhcnNpbmcuCiAgICAgICAgdmFyIGNvbW1hID0gbmV3IFN5bnRoZXRpY1Rva2VuKFRva2VuVHlwZS5DT01NQSwgbmV4dC5vZmZzZXQpOwogICAgICAgIHZhciBtZXNzYWdlID0gaWZDb3VudCA+IDAKICAgICAgICAgICAgPyBmYXN0YS5tZXNzYWdlRXhwZWN0ZWRFbHNlT3JDb21tYQogICAgICAgICAgICA6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnLCcpOwogICAgICAgIG5leHQgPSByZXdyaXRlQW5kUmVjb3Zlcih0b2tlbiwgbWVzc2FnZSwgY29tbWEpOwogICAgICB9CiAgICAgIHRva2VuID0gbmV4dDsKICAgIH0KICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IG9sZDsKICAgIGxpc3RlbmVyLmhhbmRsZUxpdGVyYWxMaXN0KGNvdW50LCBiZWdpblRva2VuLCBjb25zdEtleXdvcmQsIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBUaGlzIG1ldGhvZCBwYXJzZXMgdGhlIHBvcnRpb24gb2YgYSBzZXQgb3IgbWFwIGxpdGVyYWwgdGhhdCBzdGFydHMgd2l0aAogIC8vLyB0aGUgbGVmdCBjdXJseSBicmFjZSB3aGVuIHRoZXJlIGFyZSBubyBsZWFkaW5nIHR5cGUgYXJndW1lbnRzLgogIFRva2VuIHBhcnNlTGl0ZXJhbFNldE9yTWFwU3VmZml4KFRva2VuIHRva2VuLCBUb2tlbiBjb25zdEtleXdvcmQpIHsKICAgIFRva2VuIGxlZnRCcmFjZSA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgneycsIGxlZnRCcmFjZSkpOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJ30nLCBuZXh0KSkgewogICAgICBsaXN0ZW5lci5oYW5kbGVMaXRlcmFsU2V0T3JNYXAoMCwgbGVmdEJyYWNlLCBjb25zdEtleXdvcmQsIG5leHQsIGZhbHNlKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CgogICAgZmluYWwgb2xkID0gbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zOwogICAgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gdHJ1ZTsKICAgIGludCBjb3VudCA9IDA7CiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogaGFzU2V0RW50cnkgcGFyYW1ldGVyIGV4aXN0cyBmb3IgcmVwbGljYXRpbmcgZXhpc3RpbmcKICAgIC8vIGJlaGF2aW9yIGFuZCB3aWxsIGJlIHJlbW92ZWQgb25jZSB1bmlmaWVkIGNvbGxlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZAogICAgYm9vbCBoYXNTZXRFbnRyeTsKCiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpbnQgaWZDb3VudCA9IDA7CiAgICAgIExpdGVyYWxFbnRyeUluZm8gaW5mbyA9IGNvbXB1dGVMaXRlcmFsRW50cnkodG9rZW4pOwogICAgICBpZiAoaW5mbyA9PSBzaW1wbGVFbnRyeSkgewogICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBSZW1vdmUgdGhpcyBzZWN0aW9uIGFuZCB1c2UgdGhlIHdoaWxlIGxvb3AgYmVsb3cKICAgICAgICAvLyBvbmNlIGhhc1NldEVudHJ5IGlzIG5vIGxvbmdlciBuZWVkZWQuCiAgICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pOwogICAgICAgIHZhciBpc01hcEVudHJ5ID0gb3B0aW9uYWwoJzonLCB0b2tlbi5uZXh0KTsKICAgICAgICBoYXNTZXRFbnRyeSA/Pz0gIWlzTWFwRW50cnk7CiAgICAgICAgaWYgKGlzTWFwRW50cnkpIHsKICAgICAgICAgIFRva2VuIGNvbG9uID0gdG9rZW4ubmV4dDsKICAgICAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKGNvbG9uKTsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZUxpdGVyYWxNYXBFbnRyeShjb2xvbiwgdG9rZW4ubmV4dCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHdoaWxlIChpbmZvICE9IG51bGwpIHsKICAgICAgICAgIGlmIChpbmZvLmhhc0VudHJ5KSB7CiAgICAgICAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgICAgICAgICAgaWYgKG9wdGlvbmFsKCc6JywgdG9rZW4ubmV4dCkpIHsKICAgICAgICAgICAgICBUb2tlbiBjb2xvbiA9IHRva2VuLm5leHQ7CiAgICAgICAgICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24oY29sb24pOwogICAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZUxpdGVyYWxNYXBFbnRyeShjb2xvbiwgdG9rZW4ubmV4dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRva2VuID0gaW5mby5wYXJzZSh0b2tlbiwgdGhpcyk7CiAgICAgICAgICB9CiAgICAgICAgICBpZkNvdW50ICs9IGluZm8uaWZDb25kaXRpb25EZWx0YTsKICAgICAgICAgIGluZm8gPSBpbmZvLmNvbXB1dGVOZXh0KHRva2VuKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgKytjb3VudDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CgogICAgICBUb2tlbiBjb21tYTsKICAgICAgaWYgKG9wdGlvbmFsKCcsJywgbmV4dCkpIHsKICAgICAgICBjb21tYSA9IHRva2VuID0gbmV4dDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICBpZiAob3B0aW9uYWwoJ30nLCBuZXh0KSkgewogICAgICAgIGxpc3RlbmVyLmhhbmRsZUxpdGVyYWxTZXRPck1hcCgKICAgICAgICAgICAgY291bnQsIGxlZnRCcmFjZSwgY29uc3RLZXl3b3JkLCBuZXh0LCBoYXNTZXRFbnRyeSA/PyBmYWxzZSk7CiAgICAgICAgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gb2xkOwogICAgICAgIHJldHVybiBuZXh0OwogICAgICB9CgogICAgICBpZiAoY29tbWEgPT0gbnVsbCkgewogICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgaWYgKGxvb2tzTGlrZUxpdGVyYWxFbnRyeShuZXh0KSkgewogICAgICAgICAgLy8gSWYgdGhpcyBsb29rcyBsaWtlIHRoZSBzdGFydCBvZiBhbiBleHByZXNzaW9uLAogICAgICAgICAgLy8gdGhlbiByZXBvcnQgYW4gZXJyb3IsIGluc2VydCB0aGUgY29tbWEsIGFuZCBjb250aW51ZSBwYXJzaW5nLgogICAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIGJldHRlciBlcnJvciBtZXNzYWdlCiAgICAgICAgICB2YXIgY29tbWEgPSBuZXcgU3ludGhldGljVG9rZW4oVG9rZW5UeXBlLkNPTU1BLCBuZXh0Lm9mZnNldCk7CiAgICAgICAgICB2YXIgbWVzc2FnZSA9IGlmQ291bnQgPiAwCiAgICAgICAgICAgICAgPyBmYXN0YS5tZXNzYWdlRXhwZWN0ZWRFbHNlT3JDb21tYQogICAgICAgICAgICAgIDogZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCcsJyk7CiAgICAgICAgICB0b2tlbiA9IHJld3JpdGVBbmRSZWNvdmVyKHRva2VuLCBtZXNzYWdlLCBjb21tYSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCd9JykpOwogICAgICAgICAgLy8gU2Nhbm5lciBndWFyYW50ZWVzIGEgY2xvc2luZyBjdXJseSBicmFja2V0CiAgICAgICAgICBuZXh0ID0gbGVmdEJyYWNlLmVuZEdyb3VwOwogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTGl0ZXJhbFNldE9yTWFwKAogICAgICAgICAgICAgIGNvdW50LCBsZWZ0QnJhY2UsIGNvbnN0S2V5d29yZCwgbmV4dCwgaGFzU2V0RW50cnkgPz8gZmFsc2UpOwogICAgICAgICAgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gb2xkOwogICAgICAgICAgcmV0dXJuIG5leHQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICAvLy8gZm9ybWFsUGFyYW1ldGVyTGlzdCBmdW5jdGlvbkJvZHkuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBzdWZmaXggcGFyc2VyIGJlY2F1c2UgaXQgaXMgYXNzdW1lZCB0aGF0IHR5cGUgYXJndW1lbnRzIGhhdmUKICAvLy8gYmVlbiBwYXJzZWQsIG9yIGBsaXN0ZW5lci5oYW5kbGVOb1R5cGVBcmd1bWVudHMoLi4pYCBoYXMgYmVlbiBleGVjdXRlZC4KICBUb2tlbiBwYXJzZUxpdGVyYWxGdW5jdGlvblN1ZmZpeChUb2tlbiB0b2tlbikgewogICAgYXNzZXJ0KG9wdGlvbmFsKCcoJywgdG9rZW4ubmV4dCkpOwogICAgLy8gU2Nhbm5lciBlbnN1cmVzIGAoYCBoYXMgbWF0Y2hpbmcgYClgLgogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQuZW5kR3JvdXAubmV4dDsKICAgIGludCBraW5kID0gbmV4dC5raW5kOwogICAgaWYgKCFpZGVudGljYWwoa2luZCwgRlVOQ1RJT05fVE9LRU4pICYmCiAgICAgICAgIWlkZW50aWNhbChraW5kLCBPUEVOX0NVUkxZX0JSQUNLRVRfVE9LRU4pICYmCiAgICAgICAgKCFpZGVudGljYWwoa2luZCwgS0VZV09SRF9UT0tFTikgfHwKICAgICAgICAgICAgIW9wdGlvbmFsKCdhc3luYycsIG5leHQpICYmICFvcHRpb25hbCgnc3luYycsIG5leHQpKSkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgIH0KICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICAvLy8gZ2VuZXJpY0xpc3RMaXRlcmFsIHwgZ2VuZXJpY01hcExpdGVyYWwgfCBnZW5lcmljRnVuY3Rpb25MaXRlcmFsLgogIC8vLwogIC8vLyBXaGVyZQogIC8vLyAgIGdlbmVyaWNMaXN0TGl0ZXJhbCA6Oj0gdHlwZUFyZ3VtZW50cyAnWycgKGV4cHJlc3Npb25MaXN0ICcsJz8pPyAnXScKICAvLy8gICBnZW5lcmljTWFwTGl0ZXJhbCA6Oj0KICAvLy8gICAgICAgdHlwZUFyZ3VtZW50cyAneycgKG1hcExpdGVyYWxFbnRyeSAoJywnIG1hcExpdGVyYWxFbnRyeSkqICcsJz8pPyAnfScKICAvLy8gICBnZW5lcmljRnVuY3Rpb25MaXRlcmFsIDo6PQogIC8vLyAgICAgICB0eXBlUGFyYW1ldGVycyBmb3JtYWxQYXJhbWV0ZXJMaXN0IGZ1bmN0aW9uQm9keQogIC8vLyBQcm92aWRlIHRva2VuIGZvciBbY29uc3RLZXl3b3JkXSBpZiBwcmVjZWRlZCBieSAnY29uc3QnLCBudWxsIGlmIG5vdC4KICBUb2tlbiBwYXJzZUxpdGVyYWxMaXN0U2V0TWFwT3JGdW5jdGlvbigKICAgICAgZmluYWwgVG9rZW4gc3RhcnQsIFRva2VuIGNvbnN0S2V5d29yZCkgewogICAgYXNzZXJ0KG9wdGlvbmFsKCc8Jywgc3RhcnQubmV4dCkpOwogICAgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVQYXJhbU9yQXJnID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHN0YXJ0LCB0cnVlKTsKICAgIFRva2VuIHRva2VuID0gdHlwZVBhcmFtT3JBcmcuc2tpcChzdGFydCk7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgIGlmIChjb25zdEtleXdvcmQgIT0gbnVsbCkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICAgIGNvbnN0S2V5d29yZCwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgICB9CiAgICAgIHRva2VuID0gdHlwZVBhcmFtT3JBcmcucGFyc2VWYXJpYWJsZXMoc3RhcnQsIHRoaXMpOwogICAgICByZXR1cm4gcGFyc2VMaXRlcmFsRnVuY3Rpb25TdWZmaXgodG9rZW4pOwogICAgfQogICAgdG9rZW4gPSB0eXBlUGFyYW1PckFyZy5wYXJzZUFyZ3VtZW50cyhzdGFydCwgdGhpcyk7CiAgICBpZiAob3B0aW9uYWwoJ3snLCBuZXh0KSkgewogICAgICBpZiAodHlwZVBhcmFtT3JBcmcudHlwZUFyZ3VtZW50Q291bnQgPiAyKSB7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgZmFzdGEubWVzc2FnZVNldE9yTWFwTGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzLAogICAgICAgICAgICBzdGFydC5uZXh0LAogICAgICAgICAgICB0b2tlbik7CiAgICAgIH0KICAgICAgcmV0dXJuIHBhcnNlTGl0ZXJhbFNldE9yTWFwU3VmZml4KHRva2VuLCBjb25zdEtleXdvcmQpOwogICAgfQogICAgaWYgKCFvcHRpb25hbCgnWycsIG5leHQpICYmICFvcHRpb25hbCgnW10nLCBuZXh0KSkgewogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogSW1wcm92ZSB0aGlzIGVycm9yIG1lc3NhZ2UuCiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJ1snKSk7CiAgICAgIHJld3JpdGVyLmluc2VydFN5bnRoZXRpY1Rva2VuKHRva2VuLCBUb2tlblR5cGUuSU5ERVgpOwogICAgfQogICAgcmV0dXJuIHBhcnNlTGl0ZXJhbExpc3RTdWZmaXgodG9rZW4sIGNvbnN0S2V5d29yZCk7CiAgfQoKICAvLy8gYGBgCiAgLy8vIG1hcExpdGVyYWxFbnRyeToKICAvLy8gICBleHByZXNzaW9uICc6JyBleHByZXNzaW9uIHwKICAvLy8gICAnaWYnICcoJyBleHByZXNzaW9uICcpJyBtYXBMaXRlcmFsRW50cnkgKCAnZWxzZScgbWFwTGl0ZXJhbEVudHJ5ICk/IHwKICAvLy8gICAnYXdhaXQnPyAnZm9yJyAnKCcgZm9yTG9vcFBhcnRzICcpJyBtYXBMaXRlcmFsRW50cnkgfAogIC8vLyAgICggJy4uLicgfCAnLi4uPycgKSBleHByZXNzaW9uCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VNYXBMaXRlcmFsRW50cnkoVG9rZW4gdG9rZW4pIHsKICAgIC8vIEFzc3VtZSB0aGUgbGlzdGVuZXIgcmVqZWN0cyBub24tc3RyaW5nIGtleXMuCiAgICAvLyBUT0RPKGJyaWFud2lsa2Vyc29uKTogQ2hhbmdlIHRoZSBhc3N1bXB0aW9uIGFib3ZlIGJ5IG1vdmluZyBlcnJvcgogICAgLy8gY2hlY2tpbmcgaW50byB0aGUgcGFyc2VyLCBtYWtpbmcgaXQgcG9zc2libGUgdG8gcmVjb3Zlci4KICAgIExpdGVyYWxFbnRyeUluZm8gaW5mbyA9IGNvbXB1dGVMaXRlcmFsRW50cnkodG9rZW4pOwogICAgd2hpbGUgKGluZm8gIT0gbnVsbCkgewogICAgICBpZiAoaW5mby5oYXNFbnRyeSkgewogICAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgICAgICBUb2tlbiBjb2xvbiA9IGVuc3VyZUNvbG9uKHRva2VuKTsKICAgICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbihjb2xvbik7CiAgICAgICAgLy8gVE9ETyByZW1vdmUgdW51c2VkIDJuZCBwYXJhbWV0ZXIKICAgICAgICBsaXN0ZW5lci5oYW5kbGVMaXRlcmFsTWFwRW50cnkoY29sb24sIHRva2VuLm5leHQpOwogICAgICB9IGVsc2UgewogICAgICAgIHRva2VuID0gaW5mby5wYXJzZSh0b2tlbiwgdGhpcyk7CiAgICAgIH0KICAgICAgaW5mbyA9IGluZm8uY29tcHV0ZU5leHQodG9rZW4pOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VTZW5kT3JGdW5jdGlvbkxpdGVyYWwoVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIGlmICghbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zKSB7CiAgICAgIHJldHVybiBwYXJzZVNlbmQodG9rZW4sIGNvbnRleHQpOwogICAgfQogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZSh0b2tlbiwgZmFsc2UpOwogICAgVG9rZW4gYmVmb3JlTmFtZSA9IHR5cGVJbmZvLnNraXBUeXBlKHRva2VuKTsKICAgIFRva2VuIG5hbWUgPSBiZWZvcmVOYW1lLm5leHQ7CiAgICBpZiAobmFtZS5pc0lkZW50aWZpZXIpIHsKICAgICAgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVQYXJhbSA9IGNvbXB1dGVUeXBlUGFyYW1PckFyZyhuYW1lKTsKICAgICAgVG9rZW4gbmV4dCA9IHR5cGVQYXJhbS5za2lwKG5hbWUpLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgICAgaWYgKGxvb2tzTGlrZUZ1bmN0aW9uQm9keShuZXh0LmVuZEdyb3VwLm5leHQpKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VGdW5jdGlvbkxpdGVyYWwoCiAgICAgICAgICAgICAgdG9rZW4sIGJlZm9yZU5hbWUsIG5hbWUsIHR5cGVJbmZvLCB0eXBlUGFyYW0sIGNvbnRleHQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHBhcnNlU2VuZCh0b2tlbiwgY29udGV4dCk7CiAgfQoKICBUb2tlbiBlbnN1cmVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKCFvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICB0b2tlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEFmdGVyQnV0R290LndpdGhBcmd1bWVudHMoJygnKSk7CiAgICAgIG5leHQgPSByZXdyaXRlci5pbnNlcnRQYXJlbnModG9rZW4sIGZhbHNlKTsKICAgIH0KICAgIHJldHVybiBwYXJzZUFyZ3VtZW50c1Jlc3QobmV4dCk7CiAgfQoKICBUb2tlbiBwYXJzZUNvbnN0cnVjdG9ySW52b2NhdGlvbkFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAoIW9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgLy8gUmVjb3Zlcnk6IENoZWNrIGZvciBpbnZhbGlkIHR5cGUgcGFyYW1ldGVycwogICAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZUFyZyA9IGNvbXB1dGVUeXBlUGFyYW1PckFyZyh0b2tlbik7CiAgICAgIGlmICh0eXBlQXJnID09IG5vVHlwZVBhcmFtT3JBcmcpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICB0b2tlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEFmdGVyQnV0R290LndpdGhBcmd1bWVudHMoJygnKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgdG9rZW4sIGZhc3RhLm1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhUeXBlQXJndW1lbnRzKTsKICAgICAgICB0b2tlbiA9IHR5cGVBcmcucGFyc2VBcmd1bWVudHModG9rZW4sIHRoaXMpOwogICAgICAgIGxpc3RlbmVyLmhhbmRsZUludmFsaWRUeXBlQXJndW1lbnRzKHRva2VuKTsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgICBpZiAoIW9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgICBuZXh0ID0gcmV3cml0ZXIuaW5zZXJ0UGFyZW5zKHRva2VuLCBmYWxzZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBwYXJzZUFyZ3VtZW50c1Jlc3QobmV4dCk7CiAgfQoKICAvLy8gYGBgCiAgLy8vIG5ld0V4cHJlc3Npb246CiAgLy8vICAgJ25ldycgdHlwZSAoJy4nIGlkZW50aWZpZXIpPyBhcmd1bWVudHMKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZU5ld0V4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5ld0tleXdvcmQgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCduZXcnLCBuZXdLZXl3b3JkKSk7CiAgICBsaXN0ZW5lci5iZWdpbk5ld0V4cHJlc3Npb24obmV3S2V5d29yZCk7CiAgICB0b2tlbiA9IHBhcnNlQ29uc3RydWN0b3JSZWZlcmVuY2UobmV3S2V5d29yZCk7CiAgICB0b2tlbiA9IHBhcnNlQ29uc3RydWN0b3JJbnZvY2F0aW9uQXJndW1lbnRzKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZE5ld0V4cHJlc3Npb24obmV3S2V5d29yZCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uKAogICAgICBUb2tlbiB0b2tlbiwgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVBcmcpIHsKICAgIFRva2VuIGJlZ2luID0gdG9rZW47CiAgICBsaXN0ZW5lci5iZWdpbkltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uKHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VDb25zdHJ1Y3RvclJlZmVyZW5jZSh0b2tlbiwgdHlwZUFyZyk7CiAgICB0b2tlbiA9IHBhcnNlQ29uc3RydWN0b3JJbnZvY2F0aW9uQXJndW1lbnRzKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZEltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uKGJlZ2luKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBUaGlzIG1ldGhvZCBwYXJzZXMgYSBsaXN0IG9yIG1hcCBsaXRlcmFsIHRoYXQgaXMga25vd24gdG8gc3RhcnQgd2l0aCB0aGUKICAvLy8ga2V5d29yZCAnY29uc3QnLgogIC8vLwogIC8vLyBgYGAKICAvLy8gbGlzdExpdGVyYWw6CiAgLy8vICAgJ2NvbnN0Jz8gdHlwZUFyZ3VtZW50cz8gJ1snIChleHByZXNzaW9uTGlzdCAnLCc/KT8gJ10nCiAgLy8vIDsKICAvLy8KICAvLy8gbWFwTGl0ZXJhbDoKICAvLy8gICAnY29uc3QnPyB0eXBlQXJndW1lbnRzPyAneycgKG1hcExpdGVyYWxFbnRyeSAoJywnIG1hcExpdGVyYWxFbnRyeSkqICcsJz8pPyAnfScKICAvLy8gOwogIC8vLwogIC8vLyBtYXBMaXRlcmFsRW50cnk6CiAgLy8vICAgZXhwcmVzc2lvbiAnOicgZXhwcmVzc2lvbgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQ29uc3RFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBjb25zdEtleXdvcmQgPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2NvbnN0JywgY29uc3RLZXl3b3JkKSk7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGZpbmFsIFN0cmluZyB2YWx1ZSA9IG5leHQuc3RyaW5nVmFsdWU7CiAgICBpZiAoKGlkZW50aWNhbCh2YWx1ZSwgJ1snKSkgfHwgKGlkZW50aWNhbCh2YWx1ZSwgJ1tdJykpKSB7CiAgICAgIGxpc3RlbmVyLmJlZ2luQ29uc3RMaXRlcmFsKG5leHQpOwogICAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGVBcmd1bWVudHMobmV4dCk7CiAgICAgIHRva2VuID0gcGFyc2VMaXRlcmFsTGlzdFN1ZmZpeCh0b2tlbiwgY29uc3RLZXl3b3JkKTsKICAgICAgbGlzdGVuZXIuZW5kQ29uc3RMaXRlcmFsKHRva2VuLm5leHQpOwogICAgICByZXR1cm4gdG9rZW47CiAgICB9CiAgICBpZiAoaWRlbnRpY2FsKHZhbHVlLCAneycpKSB7CiAgICAgIGxpc3RlbmVyLmJlZ2luQ29uc3RMaXRlcmFsKG5leHQpOwogICAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGVBcmd1bWVudHMobmV4dCk7CiAgICAgIHRva2VuID0gcGFyc2VMaXRlcmFsU2V0T3JNYXBTdWZmaXgodG9rZW4sIGNvbnN0S2V5d29yZCk7CiAgICAgIGxpc3RlbmVyLmVuZENvbnN0TGl0ZXJhbCh0b2tlbi5uZXh0KTsKICAgICAgcmV0dXJuIHRva2VuOwogICAgfQogICAgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJzwnKSkgewogICAgICBsaXN0ZW5lci5iZWdpbkNvbnN0TGl0ZXJhbChuZXh0KTsKICAgICAgdG9rZW4gPSBwYXJzZUxpdGVyYWxMaXN0U2V0TWFwT3JGdW5jdGlvbih0b2tlbiwgY29uc3RLZXl3b3JkKTsKICAgICAgbGlzdGVuZXIuZW5kQ29uc3RMaXRlcmFsKHRva2VuLm5leHQpOwogICAgICByZXR1cm4gdG9rZW47CiAgICB9CiAgICBsaXN0ZW5lci5iZWdpbkNvbnN0RXhwcmVzc2lvbihjb25zdEtleXdvcmQpOwogICAgdG9rZW4gPSBwYXJzZUNvbnN0cnVjdG9yUmVmZXJlbmNlKHRva2VuKTsKICAgIHRva2VuID0gcGFyc2VDb25zdHJ1Y3Rvckludm9jYXRpb25Bcmd1bWVudHModG9rZW4pOwogICAgbGlzdGVuZXIuZW5kQ29uc3RFeHByZXNzaW9uKGNvbnN0S2V5d29yZCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGludExpdGVyYWw6CiAgLy8vICAgaW50ZWdlcgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlTGl0ZXJhbEludChUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWNhbCh0b2tlbi5raW5kLCBJTlRfVE9LRU4pIHx8CiAgICAgICAgaWRlbnRpY2FsKHRva2VuLmtpbmQsIEhFWEFERUNJTUFMX1RPS0VOKSk7CiAgICBsaXN0ZW5lci5oYW5kbGVMaXRlcmFsSW50KHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gZG91YmxlTGl0ZXJhbDoKICAvLy8gICBkb3VibGUKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUxpdGVyYWxEb3VibGUoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGljYWwodG9rZW4ua2luZCwgRE9VQkxFX1RPS0VOKSk7CiAgICBsaXN0ZW5lci5oYW5kbGVMaXRlcmFsRG91YmxlKHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gc3RyaW5nTGl0ZXJhbDoKICAvLy8gICAobXVsdGlsaW5lU3RyaW5nIHwgc2luZ2xlTGluZVN0cmluZykrCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VMaXRlcmFsU3RyaW5nKFRva2VuIHRva2VuKSB7CiAgICBhc3NlcnQoaWRlbnRpY2FsKHRva2VuLm5leHQua2luZCwgU1RSSU5HX1RPS0VOKSk7CiAgICBib29sIG9sZCA9IG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9uczsKICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IHRydWU7CiAgICB0b2tlbiA9IHBhcnNlU2luZ2xlTGl0ZXJhbFN0cmluZyh0b2tlbik7CiAgICBpbnQgY291bnQgPSAxOwogICAgd2hpbGUgKGlkZW50aWNhbCh0b2tlbi5uZXh0LmtpbmQsIFNUUklOR19UT0tFTikpIHsKICAgICAgdG9rZW4gPSBwYXJzZVNpbmdsZUxpdGVyYWxTdHJpbmcodG9rZW4pOwogICAgICBjb3VudCsrOwogICAgfQogICAgaWYgKGNvdW50ID4gMSkgewogICAgICBsaXN0ZW5lci5oYW5kbGVTdHJpbmdKdXh0YXBvc2l0aW9uKGNvdW50KTsKICAgIH0KICAgIG1heVBhcnNlRnVuY3Rpb25FeHByZXNzaW9ucyA9IG9sZDsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gc3ltYm9sTGl0ZXJhbDoKICAvLy8gICAnIycgKG9wZXJhdG9yIHwgKGlkZW50aWZpZXIgKCcuJyBpZGVudGlmaWVyKSopKQogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlTGl0ZXJhbFN5bWJvbChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gaGFzaFRva2VuID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCcjJywgaGFzaFRva2VuKSk7CiAgICBsaXN0ZW5lci5iZWdpbkxpdGVyYWxTeW1ib2woaGFzaFRva2VuKTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG5leHQuaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3IpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlT3BlcmF0b3IobmV4dCk7CiAgICAgIGxpc3RlbmVyLmVuZExpdGVyYWxTeW1ib2woaGFzaFRva2VuLCAxKTsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCd2b2lkJywgbmV4dCkpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlU3ltYm9sVm9pZChuZXh0KTsKICAgICAgbGlzdGVuZXIuZW5kTGl0ZXJhbFN5bWJvbChoYXNoVG9rZW4sIDEpOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0gZWxzZSB7CiAgICAgIGludCBjb3VudCA9IDE7CiAgICAgIHRva2VuID0gZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQubGl0ZXJhbFN5bWJvbCk7CiAgICAgIHdoaWxlIChvcHRpb25hbCgnLicsIHRva2VuLm5leHQpKSB7CiAgICAgICAgY291bnQrKzsKICAgICAgICB0b2tlbiA9IGVuc3VyZUlkZW50aWZpZXIoCiAgICAgICAgICAgIHRva2VuLm5leHQsIElkZW50aWZpZXJDb250ZXh0LmxpdGVyYWxTeW1ib2xDb250aW51YXRpb24pOwogICAgICB9CiAgICAgIGxpc3RlbmVyLmVuZExpdGVyYWxTeW1ib2woaGFzaFRva2VuLCBjb3VudCk7CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0KICB9CgogIFRva2VuIHBhcnNlU2luZ2xlTGl0ZXJhbFN0cmluZyhUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWNhbCh0b2tlbi5raW5kLCBTVFJJTkdfVE9LRU4pKTsKICAgIGxpc3RlbmVyLmJlZ2luTGl0ZXJhbFN0cmluZyh0b2tlbik7CiAgICAvLyBQYXJzaW5nIHRoZSBwcmVmaXgsIGZvciBpbnN0YW5jZSAneCBvZiAneCR7aWR9eSR7aWR9eicKICAgIGludCBpbnRlcnBvbGF0aW9uQ291bnQgPSAwOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICB2YXIga2luZCA9IG5leHQua2luZDsKICAgIHdoaWxlIChraW5kICE9IEVPRl9UT0tFTikgewogICAgICBpZiAoaWRlbnRpY2FsKGtpbmQsIFNUUklOR19JTlRFUlBPTEFUSU9OX1RPS0VOKSkgewogICAgICAgIC8vIFBhcnNpbmcgJHtleHByZXNzaW9ufS4KICAgICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbihuZXh0KS5uZXh0OwogICAgICAgIGlmICghb3B0aW9uYWwoJ30nLCB0b2tlbikpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgdG9rZW4sIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRCdXRHb3Qud2l0aEFyZ3VtZW50cygnfScpKTsKICAgICAgICAgIHRva2VuID0gbmV4dC5lbmRHcm91cDsKICAgICAgICB9CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlSW50ZXJwb2xhdGlvbkV4cHJlc3Npb24obmV4dCwgdG9rZW4pOwogICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbChraW5kLCBTVFJJTkdfSU5URVJQT0xBVElPTl9JREVOVElGSUVSX1RPS0VOKSkgewogICAgICAgIC8vIFBhcnNpbmcgJGlkZW50aWZpZXIuCiAgICAgICAgdG9rZW4gPSBwYXJzZUlkZW50aWZpZXJFeHByZXNzaW9uKG5leHQpOwogICAgICAgIGxpc3RlbmVyLmhhbmRsZUludGVycG9sYXRpb25FeHByZXNzaW9uKG5leHQsIG51bGwpOwogICAgICB9IGVsc2UgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgICsraW50ZXJwb2xhdGlvbkNvdW50OwogICAgICAvLyBQYXJzaW5nIHRoZSBpbmZpeC9zdWZmaXgsIGZvciBpbnN0YW5jZSB5IGFuZCB6JyBvZiAneCR7aWR9eSR7aWR9eicKICAgICAgdG9rZW4gPSBwYXJzZVN0cmluZ1BhcnQodG9rZW4pOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAga2luZCA9IG5leHQua2luZDsKICAgIH0KICAgIGxpc3RlbmVyLmVuZExpdGVyYWxTdHJpbmcoaW50ZXJwb2xhdGlvbkNvdW50LCBuZXh0KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlSWRlbnRpZmllckV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG5leHQua2luZCA9PSBLRVlXT1JEX1RPS0VOICYmIGlkZW50aWNhbChuZXh0LnN0cmluZ1ZhbHVlLCAidGhpcyIpKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZVRoaXNFeHByZXNzaW9uKG5leHQsIElkZW50aWZpZXJDb250ZXh0LmV4cHJlc3Npb24pOwogICAgICByZXR1cm4gbmV4dDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBwYXJzZVNlbmQodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmV4cHJlc3Npb24pOwogICAgfQogIH0KCiAgLy8vIGBgYAogIC8vLyBib29sZWFuTGl0ZXJhbDoKICAvLy8gICAndHJ1ZScgfAogIC8vLyAgICdmYWxzZScKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUxpdGVyYWxCb29sKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2ZhbHNlJywgdG9rZW4pIHx8IG9wdGlvbmFsKCd0cnVlJywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmhhbmRsZUxpdGVyYWxCb29sKHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gbnVsbExpdGVyYWw6CiAgLy8vICAgJ251bGwnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VMaXRlcmFsTnVsbChUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdudWxsJywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmhhbmRsZUxpdGVyYWxOdWxsKHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlU2VuZChUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgVG9rZW4gYmVnaW5Ub2tlbiA9IHRva2VuID0gZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgY29udGV4dCk7CiAgICBpZiAob3B0aW9uYWwoJyEnLCB0b2tlbi5uZXh0KSkgewogICAgICBUb2tlbiBiYW5nID0gdG9rZW4ubmV4dDsKICAgICAgVG9rZW4gbmV4dCA9IGJhbmcubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCcoJywgbmV4dCkgfHwgb3B0aW9uYWwoJ1snLCBuZXh0KSkgewogICAgICAgIGxpc3RlbmVyLmhhbmRsZU5vbk51bGxBc3NlcnRFeHByZXNzaW9uKGJhbmcpOwogICAgICAgIHRva2VuID0gYmFuZzsKICAgICAgfQogICAgfQogICAgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVBcmcgPSBjb21wdXRlTWV0aG9kVHlwZUFyZ3VtZW50cyh0b2tlbik7CiAgICBpZiAodHlwZUFyZyAhPSBub1R5cGVQYXJhbU9yQXJnKSB7CiAgICAgIHRva2VuID0gdHlwZUFyZy5wYXJzZUFyZ3VtZW50cyh0b2tlbiwgdGhpcyk7CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGVBcmd1bWVudHModG9rZW4ubmV4dCk7CiAgICB9CiAgICB0b2tlbiA9IHBhcnNlQXJndW1lbnRzT3B0KHRva2VuKTsKICAgIGxpc3RlbmVyLmhhbmRsZVNlbmQoYmVnaW5Ub2tlbiwgdG9rZW4ubmV4dCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBza2lwQXJndW1lbnRzT3B0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGxpc3RlbmVyLmhhbmRsZU5vQXJndW1lbnRzKG5leHQpOwogICAgaWYgKG9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgcmV0dXJuIG5leHQuZW5kR3JvdXA7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdG9rZW47CiAgICB9CiAgfQoKICBUb2tlbiBwYXJzZUFyZ3VtZW50c09wdChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAoIW9wdGlvbmFsKCcoJywgbmV4dCkpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlTm9Bcmd1bWVudHMobmV4dCk7CiAgICAgIHJldHVybiB0b2tlbjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBwYXJzZUFyZ3VtZW50cyh0b2tlbik7CiAgICB9CiAgfQoKICAvLy8gYGBgCiAgLy8vIGFyZ3VtZW50czoKICAvLy8gICAnKCcgKGFyZ3VtZW50TGlzdCAnLCc/KT8gJyknCiAgLy8vIDsKICAvLy8KICAvLy8gYXJndW1lbnRMaXN0OgogIC8vLyAgIG5hbWVkQXJndW1lbnQgKCcsJyBuYW1lZEFyZ3VtZW50KSogfAogIC8vLyAgIGV4cHJlc3Npb25MaXN0ICgnLCcgbmFtZWRBcmd1bWVudCkqCiAgLy8vIDsKICAvLy8KICAvLy8gbmFtZWRBcmd1bWVudDoKICAvLy8gICBsYWJlbCBleHByZXNzaW9uCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBwYXJzZUFyZ3VtZW50c1Jlc3QodG9rZW4ubmV4dCk7CiAgfQoKICBUb2tlbiBwYXJzZUFyZ3VtZW50c1Jlc3QoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGJlZ2luID0gdG9rZW47CiAgICBhc3NlcnQob3B0aW9uYWwoJygnLCBiZWdpbikpOwogICAgbGlzdGVuZXIuYmVnaW5Bcmd1bWVudHMoYmVnaW4pOwogICAgaW50IGFyZ3VtZW50Q291bnQgPSAwOwogICAgYm9vbCBoYXNTZWVuTmFtZWRBcmd1bWVudCA9IGZhbHNlOwogICAgYm9vbCBvbGQgPSBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnM7CiAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSB0cnVlOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgnKScsIG5leHQpKSB7CiAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIFRva2VuIGNvbG9uID0gbnVsbDsKICAgICAgaWYgKG9wdGlvbmFsKCc6JywgbmV4dC5uZXh0KSkgewogICAgICAgIHRva2VuID0KICAgICAgICAgICAgZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQubmFtZWRBcmd1bWVudFJlZmVyZW5jZSkKICAgICAgICAgICAgICAgIC5uZXh0OwogICAgICAgIGNvbG9uID0gdG9rZW47CiAgICAgICAgaGFzU2Vlbk5hbWVkQXJndW1lbnQgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKGhhc1NlZW5OYW1lZEFyZ3VtZW50KSB7CiAgICAgICAgLy8gUG9zaXRpb25hbCBhcmd1bWVudCBhZnRlciBuYW1lZCBhcmd1bWVudC4KICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VQb3NpdGlvbmFsQWZ0ZXJOYW1lZEFyZ3VtZW50KTsKICAgICAgfQogICAgICB0b2tlbiA9IHBhcnNlRXhwcmVzc2lvbih0b2tlbik7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAoY29sb24gIT0gbnVsbCkgbGlzdGVuZXIuaGFuZGxlTmFtZWRBcmd1bWVudChjb2xvbik7CiAgICAgICsrYXJndW1lbnRDb3VudDsKICAgICAgaWYgKCFvcHRpb25hbCgnLCcsIG5leHQpKSB7CiAgICAgICAgaWYgKG9wdGlvbmFsKCcpJywgbmV4dCkpIHsKICAgICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgIGlmIChsb29rc0xpa2VFeHByZXNzaW9uU3RhcnQobmV4dCkpIHsKICAgICAgICAgIC8vIElmIHRoaXMgbG9va3MgbGlrZSB0aGUgc3RhcnQgb2YgYW4gZXhwcmVzc2lvbiwKICAgICAgICAgIC8vIHRoZW4gcmVwb3J0IGFuIGVycm9yLCBpbnNlcnQgdGhlIGNvbW1hLCBhbmQgY29udGludWUgcGFyc2luZy4KICAgICAgICAgIG5leHQgPSByZXdyaXRlQW5kUmVjb3ZlcigKICAgICAgICAgICAgICB0b2tlbiwKICAgICAgICAgICAgICBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJywnKSwKICAgICAgICAgICAgICBuZXcgU3ludGhldGljVG9rZW4oVG9rZW5UeXBlLkNPTU1BLCBuZXh0Lm9mZnNldCkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0b2tlbiA9IGVuc3VyZUNsb3NlUGFyZW4odG9rZW4sIGJlZ2luKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICB0b2tlbiA9IG5leHQ7CiAgICB9CiAgICBhc3NlcnQob3B0aW9uYWwoJyknLCB0b2tlbikpOwogICAgbWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zID0gb2xkOwogICAgbGlzdGVuZXIuZW5kQXJndW1lbnRzKGFyZ3VtZW50Q291bnQsIGJlZ2luLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHR5cGVUZXN0OjoKICAvLy8gICAnaXMnICchJz8gdHlwZQogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlSXNPcGVyYXRvclJlc3QoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG9wZXJhdG9yID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdpcycsIG9wZXJhdG9yKSk7CiAgICBUb2tlbiBub3QgPSBudWxsOwogICAgaWYgKG9wdGlvbmFsKCchJywgdG9rZW4ubmV4dCkpIHsKICAgICAgbm90ID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgfQogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZUFmdGVySXNPckFzKHRva2VuKTsKICAgIHRva2VuID0gdHlwZUluZm8uZW5zdXJlVHlwZU5vdFZvaWQodG9rZW4sIHRoaXMpOwogICAgbGlzdGVuZXIuaGFuZGxlSXNPcGVyYXRvcihvcGVyYXRvciwgbm90KTsKICAgIHJldHVybiBza2lwQ2hhaW5lZEFzSXNPcGVyYXRvcnModG9rZW4pOwogIH0KCiAgVHlwZUluZm8gY29tcHV0ZVR5cGVBZnRlcklzT3JBcyhUb2tlbiB0b2tlbikgewogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZSh0b2tlbiwgdHJ1ZSk7CiAgICBpZiAodHlwZUluZm8uaXNOdWxsYWJsZSkgewogICAgICBUb2tlbiBuZXh0ID0gdHlwZUluZm8uc2tpcFR5cGUodG9rZW4pLm5leHQ7CiAgICAgIGlmICghaXNPbmVPZk9yRW9mKG5leHQsIGNvbnN0IFsnKScsICc/JywgJzsnLCAnaXMnLCAnYXMnXSkpIHsKICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogaW52ZXN0aWdhdGUgb3RoZXIgc2l0dWF0aW9ucwogICAgICAgIC8vIHdoZXJlIGA/YCBzaG91bGQgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSB0eXBlIGluZm8KICAgICAgICAvLyByYXRoZXIgdGhhbiB0aGUgc3RhcnQgb2YgYSBjb25kaXRpb25hbCBleHByZXNzaW9uLgogICAgICAgIHR5cGVJbmZvID0gdHlwZUluZm8uYXNOb25OdWxsYWJsZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHR5cGVJbmZvOwogIH0KCiAgLy8vIGBgYAogIC8vLyB0eXBlQ2FzdDoKICAvLy8gICAnYXMnIHR5cGUKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUFzT3BlcmF0b3JSZXN0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBvcGVyYXRvciA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnYXMnLCBvcGVyYXRvcikpOwogICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZUFmdGVySXNPckFzKHRva2VuKTsKICAgIHRva2VuID0gdHlwZUluZm8uZW5zdXJlVHlwZU5vdFZvaWQodG9rZW4sIHRoaXMpOwogICAgbGlzdGVuZXIuaGFuZGxlQXNPcGVyYXRvcihvcGVyYXRvcik7CiAgICByZXR1cm4gc2tpcENoYWluZWRBc0lzT3BlcmF0b3JzKHRva2VuKTsKICB9CgogIFRva2VuIHNraXBDaGFpbmVkQXNJc09wZXJhdG9ycyhUb2tlbiB0b2tlbikgewogICAgd2hpbGUgKHRydWUpIHsKICAgICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIFN0cmluZyB2YWx1ZSA9IG5leHQuc3RyaW5nVmFsdWU7CiAgICAgIGlmICghaWRlbnRpY2FsKHZhbHVlLCAnaXMnKSAmJiAhaWRlbnRpY2FsKHZhbHVlLCAnYXMnKSkgewogICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgfQogICAgICAvLyBUaGUgaXMtIGFuZCBhcy1vcGVyYXRvcnMgY2Fubm90IGJlIGNoYWluZWQuCiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciBhIGJldHRlciBlcnJvciBtZXNzYWdlLgogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgICAgaWYgKG9wdGlvbmFsKCchJywgbmV4dC5uZXh0KSkgewogICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7CiAgICAgIH0KICAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZUFmdGVySXNPckFzKG5leHQpOwogICAgICB0b2tlbiA9IHR5cGVJbmZvLnNraXBUeXBlKG5leHQpOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiBbdG9rZW5dIGNvdWxkIGJlIHRoZSBzdGFydCBvZiBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCiAgLy8vIHdpdGhvdXQgYSByZXR1cm4gdHlwZS4KICBib29sIGxvb2tzTGlrZUxvY2FsRnVuY3Rpb24oVG9rZW4gdG9rZW4pIHsKICAgIGlmICh0b2tlbi5pc0lkZW50aWZpZXIpIHsKICAgICAgaWYgKG9wdGlvbmFsKCc8JywgdG9rZW4ubmV4dCkpIHsKICAgICAgICBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZVBhcmFtID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuKTsKICAgICAgICBpZiAodHlwZVBhcmFtID09IG5vVHlwZVBhcmFtT3JBcmcpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdG9rZW4gPSB0eXBlUGFyYW0uc2tpcCh0b2tlbik7CiAgICAgIH0KICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJygnLCB0b2tlbikpIHsKICAgICAgICB0b2tlbiA9IHRva2VuLmVuZEdyb3VwLm5leHQ7CiAgICAgICAgcmV0dXJuIG9wdGlvbmFsKCd7JywgdG9rZW4pIHx8CiAgICAgICAgICAgIG9wdGlvbmFsKCc9PicsIHRva2VuKSB8fAogICAgICAgICAgICBvcHRpb25hbCgnYXN5bmMnLCB0b2tlbikgfHwKICAgICAgICAgICAgb3B0aW9uYWwoJ3N5bmMnLCB0b2tlbik7CiAgICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJz0+JywgdG9rZW4pKSB7CiAgICAgICAgLy8gUmVjb3Zlcnk6IExvb2tzIGxpa2UgYSBsb2NhbCBmdW5jdGlvbiB0aGF0IGlzIG1pc3NpbmcgcGFyZW50aGVzaXMuCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgW3Rva2VuXSBjb3VsZCBiZSB0aGUgc3RhcnQgb2YgYSBmdW5jdGlvbiBib2R5LgogIGJvb2wgbG9va3NMaWtlRnVuY3Rpb25Cb2R5KFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gb3B0aW9uYWwoJ3snLCB0b2tlbikgfHwKICAgICAgICBvcHRpb25hbCgnPT4nLCB0b2tlbikgfHwKICAgICAgICBvcHRpb25hbCgnYXN5bmMnLCB0b2tlbikgfHwKICAgICAgICBvcHRpb25hbCgnc3luYycsIHRva2VuKTsKICB9CgogIFRva2VuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yQ29uc3REZWNsYXJhdGlvbihmaW5hbCBUb2tlbiBzdGFydCkgewogICAgVG9rZW4gY29uc3RUb2tlbiA9IHN0YXJ0Lm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2NvbnN0JywgY29uc3RUb2tlbikpOwogICAgaWYgKCFpc01vZGlmaWVyKGNvbnN0VG9rZW4ubmV4dCkpIHsKICAgICAgVHlwZUluZm8gdHlwZUluZm8gPSBjb21wdXRlVHlwZShjb25zdFRva2VuLCBmYWxzZSk7CiAgICAgIGlmICh0eXBlSW5mbyA9PSBub1R5cGUpIHsKICAgICAgICBUb2tlbiBuZXh0ID0gY29uc3RUb2tlbi5uZXh0OwogICAgICAgIGlmICghbmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgICAgIHJldHVybiBwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnQoc3RhcnQpOwogICAgICAgIH0KICAgICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgICAgIGlmICghKG9wdGlvbmFsKCc9JywgbmV4dCkgfHwKICAgICAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICAgICAgbmV4dC5pc0tleXdvcmRPcklkZW50aWZpZXIgfHwKICAgICAgICAgICAgb3B0aW9uYWwoJzsnLCBuZXh0KSB8fAogICAgICAgICAgICBvcHRpb25hbCgnLCcsIG5leHQpIHx8CiAgICAgICAgICAgIG9wdGlvbmFsKCd7JywgbmV4dCkpKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KHN0YXJ0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb25BZnRlck1vZGlmaWVycygKICAgICAgICAgIGNvbnN0VG9rZW4sIHN0YXJ0LCBudWxsLCBjb25zdFRva2VuLCB0eXBlSW5mbywgZmFsc2UpOwogICAgfQogICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb24oc3RhcnQpOwogIH0KCiAgLy8vIFRoaXMgbWV0aG9kIGhhcyB0d28gbW9kZXMgYmFzZWQgdXBvbiBbb25seVBhcnNlVmFyaWFibGVEZWNsYXJhdGlvblN0YXJ0XS4KICAvLy8KICAvLy8gSWYgW29ubHlQYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25TdGFydF0gaXMgYGZhbHNlYCAodGhlIGRlZmF1bHQpIHRoZW4gdGhpcwogIC8vLyBtZXRob2Qgd2lsbCBwYXJzZSBhIGxvY2FsIHZhcmlhYmxlIGRlY2xhcmF0aW9uLCBhIGxvY2FsIGZ1bmN0aW9uLAogIC8vLyBvciBhbiBleHByZXNzaW9uIHN0YXRlbWVudCwgYW5kIHRoZW4gcmV0dXJuIHRoZSBsYXN0IGNvbnN1bWVkIHRva2VuLgogIC8vLwogIC8vLyBJZiBbb25seVBhcnNlVmFyaWFibGVEZWNsYXJhdGlvblN0YXJ0XSBpcyBgdHJ1ZWAgdGhlbiB0aGlzIG1ldGhvZAogIC8vLyB3aWxsIG9ubHkgcGFyc2UgdGhlIG1ldGFkYXRhLCBtb2RpZmllcnMsIGFuZCB0eXBlIG9mIGEgbG9jYWwgdmFyaWFibGUKICAvLy8gZGVjbGFyYXRpb24gaWYgaXQgZXhpc3RzLiBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIGNhbGxlciB0bwogIC8vLyBjYWxsIFtwYXJzZVZhcmlhYmxlc0RlY2xhcmF0aW9uUmVzdF0gdG8gZmluaXNoIHBhcnNpbmcgdGhlIGxvY2FsIHZhcmlhYmxlCiAgLy8vIGRlY2xhcmF0aW9uLiBJZiBhIGxvY2FsIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGlzIG5vdCBmb3VuZCB0aGVuIHRoaXMKICAvLy8gbWV0aG9kIHdpbGwgcmV0dXJuIFtzdGFydF0uCiAgVG9rZW4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbihmaW5hbCBUb2tlbiBzdGFydCwKICAgICAgW2Jvb2wgb25seVBhcnNlVmFyaWFibGVEZWNsYXJhdGlvblN0YXJ0ID0gZmFsc2VdKSB7CiAgICBUb2tlbiB0b2tlbiA9IHN0YXJ0OwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJ0AnLCBuZXh0KSkgewogICAgICB0b2tlbiA9IHBhcnNlTWV0YWRhdGFTdGFyKHRva2VuKTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICB9CgogICAgVG9rZW4gbGF0ZVRva2VuOwogICAgVG9rZW4gdmFyRmluYWxPckNvbnN0OwoKICAgIGlmIChpc01vZGlmaWVyKG5leHQpKSB7CiAgICAgIGlmIChvcHRpb25hbCgndmFyJywgbmV4dCkgfHwKICAgICAgICAgIG9wdGlvbmFsKCdmaW5hbCcsIG5leHQpIHx8CiAgICAgICAgICBvcHRpb25hbCgnY29uc3QnLCBuZXh0KSkgewogICAgICAgIHZhckZpbmFsT3JDb25zdCA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgnbGF0ZScsIG5leHQpKSB7CiAgICAgICAgbGF0ZVRva2VuID0gdG9rZW4gPSBuZXh0OwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIGlmIChpc01vZGlmaWVyKG5leHQpICYmIG9wdGlvbmFsKCdmaW5hbCcsIG5leHQpKSB7CiAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSB0b2tlbiA9IG5leHQ7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChpc01vZGlmaWVyKG5leHQpKSB7CiAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICBNb2RpZmllclJlY292ZXJ5Q29udGV4dCBjb250ZXh0ID0gbmV3IE1vZGlmaWVyUmVjb3ZlcnlDb250ZXh0KHRoaXMpCiAgICAgICAgICAuLmxhdGVUb2tlbiA9IGxhdGVUb2tlbgogICAgICAgICAgLi52YXJGaW5hbE9yQ29uc3QgPSB2YXJGaW5hbE9yQ29uc3Q7CgogICAgICAgIHRva2VuID0gY29udGV4dC5wYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25Nb2RpZmllcnModG9rZW4pOwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwoKICAgICAgICBsYXRlVG9rZW4gPSBjb250ZXh0LmxhdGVUb2tlbjsKICAgICAgICB2YXJGaW5hbE9yQ29uc3QgPSBjb250ZXh0LnZhckZpbmFsT3JDb25zdDsKCiAgICAgICAgY29udGV4dCA9IG51bGw7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbkFmdGVyTW9kaWZpZXJzKHRva2VuLCBzdGFydCwKICAgICAgICBsYXRlVG9rZW4sIHZhckZpbmFsT3JDb25zdCwgbnVsbCwgb25seVBhcnNlVmFyaWFibGVEZWNsYXJhdGlvblN0YXJ0KTsKICB9CgogIC8vLyBTZWUgW3BhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb25dCiAgVG9rZW4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbkFmdGVyTW9kaWZpZXJzKAogICAgICBmaW5hbCBUb2tlbiBiZWZvcmVUeXBlLAogICAgICBmaW5hbCBUb2tlbiBzdGFydCwKICAgICAgZmluYWwgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsCiAgICAgIFR5cGVJbmZvIHR5cGVJbmZvLAogICAgICBib29sIG9ubHlQYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25TdGFydCkgewogICAgdHlwZUluZm8gPz89IGNvbXB1dGVUeXBlKGJlZm9yZVR5cGUsIGZhbHNlKTsKCiAgICBUb2tlbiB0b2tlbiA9IHR5cGVJbmZvLnNraXBUeXBlKGJlZm9yZVR5cGUpOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CgogICAgaWYgKG9ubHlQYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25TdGFydCkgewogICAgICBpZiAobGF0ZVRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICBsYXRlVG9rZW4sIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKGxvb2tzTGlrZUxvY2FsRnVuY3Rpb24obmV4dCkpIHsKICAgICAgICAvLyBQYXJzZSBhIGxvY2FsIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgogICAgICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgIT0gbnVsbCkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgICAgICB9IGVsc2UgaWYgKGxhdGVUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICAgIGxhdGVUb2tlbiwgZmFzdGEudGVtcGxhdGVFeHRyYW5lb3VzTW9kaWZpZXIpOwogICAgICAgIH0KICAgICAgICBpZiAoIW9wdGlvbmFsKCdAJywgc3RhcnQubmV4dCkpIHsKICAgICAgICAgIGxpc3RlbmVyLmJlZ2luTWV0YWRhdGFTdGFyKHN0YXJ0Lm5leHQpOwogICAgICAgICAgbGlzdGVuZXIuZW5kTWV0YWRhdGFTdGFyKDApOwogICAgICAgIH0KICAgICAgICBUb2tlbiBiZWZvcmVGb3JtYWxzID0KICAgICAgICAgICAgY29tcHV0ZVR5cGVQYXJhbU9yQXJnKG5leHQpLnBhcnNlVmFyaWFibGVzKG5leHQsIHRoaXMpOwogICAgICAgIGxpc3RlbmVyLmJlZ2luTG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uKHN0YXJ0Lm5leHQpOwogICAgICAgIHRva2VuID0gdHlwZUluZm8ucGFyc2VUeXBlKGJlZm9yZVR5cGUsIHRoaXMpOwogICAgICAgIHJldHVybiBwYXJzZU5hbWVkRnVuY3Rpb25SZXN0KHRva2VuLCBzdGFydC5uZXh0LCBiZWZvcmVGb3JtYWxzLCBmYWxzZSk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoYmVmb3JlVHlwZSA9PSBzdGFydCAmJgogICAgICAgIHR5cGVJbmZvLmlzTnVsbGFibGUgJiYKICAgICAgICB0eXBlSW5mby5jb3VsZEJlRXhwcmVzc2lvbikgewogICAgICBhc3NlcnQob3B0aW9uYWwoJz8nLCB0b2tlbikpOwogICAgICBhc3NlcnQobmV4dC5pc0lkZW50aWZpZXIpOwogICAgICBUb2tlbiBhZnRlcklkZW50aWZpZXIgPSBuZXh0Lm5leHQ7CiAgICAgIC8vCiAgICAgIC8vIGZvdW5kIDx0eXBlcmVmPiBgP2AgPGlkZW50aWZpZXI+CiAgICAgIC8vIHdpdGggbm8gYW5ub3RhdGlvbnMgb3IgbW9kaWZpZXJzIHByZWNlZWRpbmcgaXQKICAgICAgLy8KICAgICAgaWYgKG9wdGlvbmFsKCc9JywgYWZ0ZXJJZGVudGlmaWVyKSkgewogICAgICAgIC8vCiAgICAgICAgLy8gbG9vayBwYXN0IHRoZSBuZXh0IGV4cHJlc3Npb24KICAgICAgICAvLyB0byBkZXRlcm1pbmUgaWYgdGhpcyBpcyBwYXJ0IG9mIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbgogICAgICAgIC8vCiAgICAgICAgZmluYWwgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RlbmVyOwogICAgICAgIGxpc3RlbmVyID0gbmV3IEZvcndhcmRpbmdMaXN0ZW5lcigpOwogICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBjb25zaWRlciB1c2luZyBUb2tlblN0cmVhbUdob3N0V3JpdGVyIGhlcmUKICAgICAgICBUb2tlbiBhZnRlckV4cHJlc3Npb24gPQogICAgICAgICAgICBwYXJzZUV4cHJlc3Npb25XaXRob3V0Q2FzY2FkZShhZnRlcklkZW50aWZpZXIpLm5leHQ7CiAgICAgICAgbGlzdGVuZXIgPSBvcmlnaW5hbExpc3RlbmVyOwoKICAgICAgICBpZiAob3B0aW9uYWwoJzonLCBhZnRlckV4cHJlc3Npb24pKSB7CiAgICAgICAgICAvLyBMb29rcyBsaWtlIHBhcnQgb2YgYSBjb25kaXRpb25hbCBleHByZXNzaW9uLgogICAgICAgICAgLy8gRHJvcCB0aGUgdHlwZSBpbmZvcm1hdGlvbiBhbmQgcmVzZXQgdGhlIGxhc3QgY29uc3VtZWQgdG9rZW4uCiAgICAgICAgICB0eXBlSW5mbyA9IG5vVHlwZTsKICAgICAgICAgIHRva2VuID0gc3RhcnQ7CiAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoIWFmdGVySWRlbnRpZmllci5pc0tleXdvcmQgJiYKICAgICAgICAgICFpc09uZU9mT3JFb2YoYWZ0ZXJJZGVudGlmaWVyLCBjb25zdCBbJzsnLCAnLCcsICcpJ10pKSB7CiAgICAgICAgLy8gTG9va3MgbGlrZSBwYXJ0IG9mIGEgY29uZGl0aW9uYWwgZXhwcmVzc2lvbi4KICAgICAgICAvLyBEcm9wIHRoZSB0eXBlIGluZm9ybWF0aW9uIGFuZCByZXNldCB0aGUgbGFzdCBjb25zdW1lZCB0b2tlbi4KICAgICAgICB0eXBlSW5mbyA9IG5vVHlwZTsKICAgICAgICB0b2tlbiA9IHN0YXJ0OwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICB9CgogICAgaWYgKHRva2VuID09IHN0YXJ0KSB7CiAgICAgIC8vIElmIG5vIGFubm90YXRpb24sIG1vZGlmaWVyLCBvciB0eXBlLCBhbmQgdGhpcyBpcyBub3QgYSBsb2NhbCBmdW5jdGlvbgogICAgICAvLyB0aGVuIHRoaXMgbXVzdCBiZSBhbiBleHByZXNzaW9uIHN0YXRlbWVudC4KICAgICAgaWYgKG9ubHlQYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25TdGFydCkgewogICAgICAgIHJldHVybiBzdGFydDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KHN0YXJ0KTsKICAgICAgfQogICAgfQoKICAgIGlmIChuZXh0LnR5cGUuaXNCdWlsdEluICYmCiAgICAgICAgYmVmb3JlVHlwZSA9PSBzdGFydCAmJgogICAgICAgIHR5cGVJbmZvLmNvdWxkQmVFeHByZXNzaW9uKSB7CiAgICAgIC8vIERldGVjdCBleHByZXNzaW9ucyBzdWNoIGFzIGlkZW50aWZpZXIgYGFzYCBpZGVudGlmaWVyCiAgICAgIC8vIGFuZCB0cmVhdCB0aG9zZSBhcyBleHByZXNzaW9ucy4KICAgICAgaWYgKG9wdGlvbmFsKCdhcycsIG5leHQpIHx8IG9wdGlvbmFsKCdpcycsIG5leHQpKSB7CiAgICAgICAgaW50IGtpbmQgPSBuZXh0Lm5leHQua2luZDsKICAgICAgICBpZiAoRVFfVE9LRU4gIT0ga2luZCAmJgogICAgICAgICAgICBTRU1JQ09MT05fVE9LRU4gIT0ga2luZCAmJgogICAgICAgICAgICBDT01NQV9UT0tFTiAhPSBraW5kKSB7CiAgICAgICAgICBpZiAob25seVBhcnNlVmFyaWFibGVEZWNsYXJhdGlvblN0YXJ0KSB7CiAgICAgICAgICAgIGlmICghb3B0aW9uYWwoJ2luJywgbmV4dC5uZXh0KSkgewogICAgICAgICAgICAgIHJldHVybiBzdGFydDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudChzdGFydCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKG5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgIC8vIE9ubHkgcmVwb3J0IHRoZXNlIGVycm9ycyBpZiB0aGVyZSBpcyBhbiBpZGVudGlmaWVyLiBJZiB0aGVyZSBpcyBub3QgYW4KICAgICAgLy8gaWRlbnRpZmllciwgdGhlbiBhbGxvdyBlbnN1cmVJZGVudGlmaWVyIHRvIHJlcG9ydCBhbiBlcnJvcgogICAgICAvLyBhbmQgZG9uJ3QgcmVwb3J0IGVycm9ycyBoZXJlLgogICAgICBpZiAodmFyRmluYWxPckNvbnN0ID09IG51bGwpIHsKICAgICAgICBpZiAodHlwZUluZm8gPT0gbm9UeXBlICYmIGxhdGVUb2tlbiA9PSBudWxsKSB7CiAgICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VNaXNzaW5nQ29uc3RGaW5hbFZhck9yVHlwZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCd2YXInLCB2YXJGaW5hbE9yQ29uc3QpKSB7CiAgICAgICAgaWYgKHR5cGVJbmZvICE9IG5vVHlwZSkgewogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih2YXJGaW5hbE9yQ29uc3QsIGZhc3RhLm1lc3NhZ2VUeXBlQWZ0ZXJWYXIpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmICghb3B0aW9uYWwoJ0AnLCBzdGFydC5uZXh0KSkgewogICAgICBsaXN0ZW5lci5iZWdpbk1ldGFkYXRhU3RhcihzdGFydC5uZXh0KTsKICAgICAgbGlzdGVuZXIuZW5kTWV0YWRhdGFTdGFyKDApOwogICAgfQogICAgdG9rZW4gPSB0eXBlSW5mby5wYXJzZVR5cGUoYmVmb3JlVHlwZSwgdGhpcyk7CiAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGxpc3RlbmVyLmJlZ2luVmFyaWFibGVzRGVjbGFyYXRpb24obmV4dCwgbGF0ZVRva2VuLCB2YXJGaW5hbE9yQ29uc3QpOwogICAgaWYgKCFvbmx5UGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uU3RhcnQpIHsKICAgICAgdG9rZW4gPSBwYXJzZVZhcmlhYmxlc0RlY2xhcmF0aW9uUmVzdCh0b2tlbiwgdHJ1ZSk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZVZhcmlhYmxlc0RlY2xhcmF0aW9uUmVzdChUb2tlbiB0b2tlbiwgYm9vbCBlbmRXaXRoU2VtaWNvbG9uKSB7CiAgICBpbnQgY291bnQgPSAxOwogICAgdG9rZW4gPSBwYXJzZU9wdGlvbmFsbHlJbml0aWFsaXplZElkZW50aWZpZXIodG9rZW4pOwogICAgd2hpbGUgKG9wdGlvbmFsKCcsJywgdG9rZW4ubmV4dCkpIHsKICAgICAgdG9rZW4gPSBwYXJzZU9wdGlvbmFsbHlJbml0aWFsaXplZElkZW50aWZpZXIodG9rZW4ubmV4dCk7CiAgICAgICsrY291bnQ7CiAgICB9CiAgICBpZiAoZW5kV2l0aFNlbWljb2xvbikgewogICAgICBUb2tlbiBzZW1pY29sb24gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgICBsaXN0ZW5lci5lbmRWYXJpYWJsZXNEZWNsYXJhdGlvbihjb3VudCwgc2VtaWNvbG9uKTsKICAgICAgcmV0dXJuIHNlbWljb2xvbjsKICAgIH0gZWxzZSB7CiAgICAgIGxpc3RlbmVyLmVuZFZhcmlhYmxlc0RlY2xhcmF0aW9uKGNvdW50LCBudWxsKTsKICAgICAgcmV0dXJuIHRva2VuOwogICAgfQogIH0KCiAgVG9rZW4gcGFyc2VPcHRpb25hbGx5SW5pdGlhbGl6ZWRJZGVudGlmaWVyKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuYW1lVG9rZW4gPQogICAgICAgIGVuc3VyZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LmxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbik7CiAgICBsaXN0ZW5lci5iZWdpbkluaXRpYWxpemVkSWRlbnRpZmllcihuYW1lVG9rZW4pOwogICAgdG9rZW4gPSBwYXJzZVZhcmlhYmxlSW5pdGlhbGl6ZXJPcHQobmFtZVRva2VuKTsKICAgIGxpc3RlbmVyLmVuZEluaXRpYWxpemVkSWRlbnRpZmllcihuYW1lVG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBpZlN0YXRlbWVudDoKICAvLy8gICAnaWYnICcoJyBleHByZXNzaW9uICcpJyBzdGF0ZW1lbnQgKCdlbHNlJyBzdGF0ZW1lbnQpPwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlSWZTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGlmVG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdpZicsIGlmVG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luSWZTdGF0ZW1lbnQoaWZUb2tlbik7CiAgICB0b2tlbiA9IGVuc3VyZVBhcmVudGhlc2l6ZWRDb25kaXRpb24oaWZUb2tlbik7CiAgICBsaXN0ZW5lci5iZWdpblRoZW5TdGF0ZW1lbnQodG9rZW4ubmV4dCk7CiAgICB0b2tlbiA9IHBhcnNlU3RhdGVtZW50KHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZFRoZW5TdGF0ZW1lbnQodG9rZW4pOwogICAgVG9rZW4gZWxzZVRva2VuID0gbnVsbDsKICAgIGlmIChvcHRpb25hbCgnZWxzZScsIHRva2VuLm5leHQpKSB7CiAgICAgIGVsc2VUb2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIGxpc3RlbmVyLmJlZ2luRWxzZVN0YXRlbWVudChlbHNlVG9rZW4pOwogICAgICB0b2tlbiA9IHBhcnNlU3RhdGVtZW50KGVsc2VUb2tlbik7CiAgICAgIGxpc3RlbmVyLmVuZEVsc2VTdGF0ZW1lbnQoZWxzZVRva2VuKTsKICAgIH0KICAgIGxpc3RlbmVyLmVuZElmU3RhdGVtZW50KGlmVG9rZW4sIGVsc2VUb2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGZvclN0YXRlbWVudDoKICAvLy8gICAnYXdhaXQnPyAnZm9yJyAnKCcgZm9yTG9vcFBhcnRzICcpJyBzdGF0ZW1lbnQKICAvLy8gOwogIC8vLwogIC8vLyAgZm9yTG9vcFBhcnRzOgogIC8vLyAgICAgIGxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbiAnOycgZXhwcmVzc2lvbj8gJzsnIGV4cHJlc3Npb25MaXN0PwogIC8vLyAgICB8IGV4cHJlc3Npb24/ICc7JyBleHByZXNzaW9uPyAnOycgZXhwcmVzc2lvbkxpc3Q/CiAgLy8vICAgIHwgbG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uICdpbicgZXhwcmVzc2lvbgogIC8vLyAgICB8IGlkZW50aWZpZXIgJ2luJyBleHByZXNzaW9uCiAgLy8vIDsKICAvLy8KICAvLy8gZm9ySW5pdGlhbGl6ZXJTdGF0ZW1lbnQ6CiAgLy8vICAgbG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uIHwKICAvLy8gICBleHByZXNzaW9uPyAnOycKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUZvclN0YXRlbWVudChUb2tlbiB0b2tlbiwgVG9rZW4gYXdhaXRUb2tlbikgewogICAgVG9rZW4gZm9yVG9rZW4gPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoYXdhaXRUb2tlbiA9PSBudWxsIHx8IG9wdGlvbmFsKCdhd2FpdCcsIGF3YWl0VG9rZW4pKTsKICAgIGFzc2VydChvcHRpb25hbCgnZm9yJywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luRm9yU3RhdGVtZW50KGZvclRva2VuKTsKCiAgICB0b2tlbiA9IHBhcnNlRm9yTG9vcFBhcnRzU3RhcnQoYXdhaXRUb2tlbiwgZm9yVG9rZW4pOwogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICB0b2tlbiA9IHBhcnNlRm9yTG9vcFBhcnRzTWlkKHRva2VuLCBhd2FpdFRva2VuLCBmb3JUb2tlbik7CiAgICBpZiAob3B0aW9uYWwoJ2luJywgdG9rZW4ubmV4dCkgfHwgb3B0aW9uYWwoJzonLCB0b2tlbi5uZXh0KSkgewogICAgICAvLyBQcm9jZXNzIGBmb3IgKCAuLi4gaW4gLi4uIClgCiAgICAgIHJldHVybiBwYXJzZUZvckluUmVzdCh0b2tlbiwgYXdhaXRUb2tlbiwgZm9yVG9rZW4sIGlkZW50aWZpZXIpOwogICAgfSBlbHNlIHsKICAgICAgLy8gUHJvY2VzcyBgZm9yICggLi4uIDsgLi4uIDsgLi4uIClgCiAgICAgIHJldHVybiBwYXJzZUZvclJlc3QoYXdhaXRUb2tlbiwgdG9rZW4sIGZvclRva2VuKTsKICAgIH0KICB9CgogIC8vLyBQYXJzZSB0aGUgc3RhcnQgb2YgYSBmb3IgbG9vcCBjb250cm9sIHN0cnVjdHVyZQogIC8vLyBmcm9tIHRoZSBvcGVuIHBhcmVudGhlc2lzIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nIHRoZSBpZGVudGlmaWVyLgogIFRva2VuIHBhcnNlRm9yTG9vcFBhcnRzU3RhcnQoVG9rZW4gYXdhaXRUb2tlbiwgVG9rZW4gZm9yVG9rZW4pIHsKICAgIFRva2VuIGxlZnRQYXJlbnRoZXNpcyA9IGZvclRva2VuLm5leHQ7CiAgICBpZiAoIW9wdGlvbmFsKCcoJywgbGVmdFBhcmVudGhlc2lzKSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgbGVmdFBhcmVudGhlc2lzLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJygnKSk7CgogICAgICBCZWdpblRva2VuIG9wZW5QYXJlbiA9IHJld3JpdGVyLmluc2VydFRva2VuKAogICAgICAgICAgZm9yVG9rZW4sCiAgICAgICAgICBuZXcgU3ludGhldGljQmVnaW5Ub2tlbigKICAgICAgICAgICAgICBUb2tlblR5cGUuT1BFTl9QQVJFTiwgbGVmdFBhcmVudGhlc2lzLm9mZnNldCkpOwoKICAgICAgVG9rZW4gdG9rZW47CiAgICAgIGlmIChhd2FpdFRva2VuICE9IG51bGwpIHsKICAgICAgICB0b2tlbiA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIob3BlblBhcmVuKTsKICAgICAgICB0b2tlbiA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0tleXdvcmQodG9rZW4sIEtleXdvcmQuSU4pOwogICAgICAgIHRva2VuID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdG9rZW4gPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNUb2tlbihvcGVuUGFyZW4sIFRva2VuVHlwZS5TRU1JQ09MT04pOwogICAgICAgIHRva2VuID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4odG9rZW4sIFRva2VuVHlwZS5TRU1JQ09MT04pOwogICAgICB9CgogICAgICBvcGVuUGFyZW4uZW5kR3JvdXAgPSB0b2tlbiA9IHJld3JpdGVyLmluc2VydFRva2VuKHRva2VuLAogICAgICAgICAgbmV3IFN5bnRoZXRpY1Rva2VuKFRva2VuVHlwZS5DTE9TRV9QQVJFTiwgbGVmdFBhcmVudGhlc2lzLm9mZnNldCkpOwoKICAgICAgdG9rZW4gPSByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuKTsKICAgICAgcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4odG9rZW4sIFRva2VuVHlwZS5TRU1JQ09MT04pOwoKICAgICAgbGVmdFBhcmVudGhlc2lzID0gb3BlblBhcmVuOwogICAgfQoKICAgIC8vIFBhc3MgYHRydWVgIHNvIHRoYXQgdGhlIFtwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckRlY2xhcmF0aW9uXSBvbmx5CiAgICAvLyBwYXJzZXMgdGhlIG1ldGFkYXRhLCBtb2RpZmllcnMsIGFuZCB0eXBlIG9mIGEgbG9jYWwgdmFyaWFibGUKICAgIC8vIGRlY2xhcmF0aW9uIGlmIGl0IGV4aXN0cy4gVGhpcyBlbmFibGVzIGNhcHR1cmluZyBbYmVmb3JlSWRlbnRpZmllcl0KICAgIC8vIGZvciBsYXRlciBlcnJvciByZXBvcnRpbmcuCiAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JEZWNsYXJhdGlvbihsZWZ0UGFyZW50aGVzaXMsIHRydWUpOwogIH0KCiAgLy8vIFBhcnNlIHRoZSByZW1haW5kZXIgb2YgdGhlIGxvY2FsIHZhcmlhYmxlIGRlY2xhcmF0aW9uCiAgLy8vIG9yIGFuIGV4cHJlc3Npb24gaWYgbm8gbG9jYWwgdmFyaWFibGUgZGVjbGFyYXRpb24gd2FzIGZvdW5kLgogIFRva2VuIHBhcnNlRm9yTG9vcFBhcnRzTWlkKFRva2VuIHRva2VuLCBUb2tlbiBhd2FpdFRva2VuLCBUb2tlbiBmb3JUb2tlbikgewogICAgaWYgKHRva2VuICE9IGZvclRva2VuLm5leHQpIHsKICAgICAgdG9rZW4gPSBwYXJzZVZhcmlhYmxlc0RlY2xhcmF0aW9uUmVzdCh0b2tlbiwgZmFsc2UpOwogICAgICBsaXN0ZW5lci5oYW5kbGVGb3JJbml0aWFsaXplckxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbih0b2tlbik7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCc7JywgdG9rZW4ubmV4dCkpIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlRm9ySW5pdGlhbGl6ZXJFbXB0eVN0YXRlbWVudCh0b2tlbi5uZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgICAgbGlzdGVuZXIuaGFuZGxlRm9ySW5pdGlhbGl6ZXJFeHByZXNzaW9uU3RhdGVtZW50KHRva2VuKTsKICAgIH0KICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgaWYgKG9wdGlvbmFsKCc7JywgbmV4dCkpIHsKICAgICAgaWYgKGF3YWl0VG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoYXdhaXRUb2tlbiwgZmFzdGEubWVzc2FnZUludmFsaWRBd2FpdEZvcik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoIW9wdGlvbmFsKCdpbicsIG5leHQpKSB7CiAgICAgIC8vIFJlY292ZXJ5CiAgICAgIGlmIChvcHRpb25hbCgnOicsIG5leHQpKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlQ29sb25JblBsYWNlT2ZJbik7CiAgICAgIH0gZWxzZSBpZiAoYXdhaXRUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCdpbicpKTsKICAgICAgICB0b2tlbi5zZXROZXh0KAogICAgICAgICAgICBuZXcgU3ludGhldGljS2V5d29yZFRva2VuKEtleXdvcmQuSU4sIG5leHQub2Zmc2V0KS4uc2V0TmV4dChuZXh0KSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBUaGlzIG1ldGhvZCBwYXJzZXMgdGhlIHBvcnRpb24gb2YgdGhlIGZvckxvb3BQYXJ0cyB0aGF0IHN0YXJ0cyB3aXRoIHRoZQogIC8vLyBmaXJzdCBzZW1pY29sb24gKHRoZSBvbmUgdGhhdCB0ZXJtaW5hdGVzIHRoZSBmb3JJbml0aWFsaXplclN0YXRlbWVudCkuCiAgLy8vCiAgLy8vIGBgYAogIC8vLyAgZm9yTG9vcFBhcnRzOgogIC8vLyAgICAgIGxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbiAnOycgZXhwcmVzc2lvbj8gJzsnIGV4cHJlc3Npb25MaXN0PwogIC8vLyAgICB8IGV4cHJlc3Npb24/ICc7JyBleHByZXNzaW9uPyAnOycgZXhwcmVzc2lvbkxpc3Q/CiAgLy8vICAgIHwgbG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uICdpbicgZXhwcmVzc2lvbgogIC8vLyAgICB8IGlkZW50aWZpZXIgJ2luJyBleHByZXNzaW9uCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VGb3JSZXN0KFRva2VuIGF3YWl0VG9rZW4sIFRva2VuIHRva2VuLCBUb2tlbiBmb3JUb2tlbikgewogICAgdG9rZW4gPSBwYXJzZUZvckxvb3BQYXJ0c1Jlc3QodG9rZW4sIGZvclRva2VuLCBhd2FpdFRva2VuKTsKICAgIGxpc3RlbmVyLmJlZ2luRm9yU3RhdGVtZW50Qm9keSh0b2tlbi5uZXh0KTsKICAgIExvb3BTdGF0ZSBzYXZlZExvb3BTdGF0ZSA9IGxvb3BTdGF0ZTsKICAgIGxvb3BTdGF0ZSA9IExvb3BTdGF0ZS5JbnNpZGVMb29wOwogICAgdG9rZW4gPSBwYXJzZVN0YXRlbWVudCh0b2tlbik7CiAgICBsb29wU3RhdGUgPSBzYXZlZExvb3BTdGF0ZTsKICAgIGxpc3RlbmVyLmVuZEZvclN0YXRlbWVudEJvZHkodG9rZW4ubmV4dCk7CiAgICBsaXN0ZW5lci5lbmRGb3JTdGF0ZW1lbnQodG9rZW4ubmV4dCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUZvckxvb3BQYXJ0c1Jlc3QoVG9rZW4gdG9rZW4sIFRva2VuIGZvclRva2VuLCBUb2tlbiBhd2FpdFRva2VuKSB7CiAgICBUb2tlbiBsZWZ0UGFyZW50aGVzaXMgPSBmb3JUb2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdmb3InLCBmb3JUb2tlbikpOwogICAgYXNzZXJ0KG9wdGlvbmFsKCcoJywgbGVmdFBhcmVudGhlc2lzKSk7CgogICAgVG9rZW4gbGVmdFNlcGFyYXRvciA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICBpZiAob3B0aW9uYWwoJzsnLCBsZWZ0U2VwYXJhdG9yLm5leHQpKSB7CiAgICAgIHRva2VuID0gcGFyc2VFbXB0eVN0YXRlbWVudChsZWZ0U2VwYXJhdG9yKTsKICAgIH0gZWxzZSB7CiAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uU3RhdGVtZW50KGxlZnRTZXBhcmF0b3IpOwogICAgfQogICAgaW50IGV4cHJlc3Npb25Db3VudCA9IDA7CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCcpJywgbmV4dCkpIHsKICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZUV4cHJlc3Npb24odG9rZW4pLm5leHQ7CiAgICAgICsrZXhwcmVzc2lvbkNvdW50OwogICAgICBpZiAoIW9wdGlvbmFsKCcsJywgdG9rZW4pKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGlmICh0b2tlbiAhPSBsZWZ0UGFyZW50aGVzaXMuZW5kR3JvdXApIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbih0b2tlbiwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwogICAgICB0b2tlbiA9IGxlZnRQYXJlbnRoZXNpcy5lbmRHcm91cDsKICAgIH0KICAgIGxpc3RlbmVyLmhhbmRsZUZvckxvb3BQYXJ0cygKICAgICAgICBmb3JUb2tlbiwgbGVmdFBhcmVudGhlc2lzLCBsZWZ0U2VwYXJhdG9yLCBleHByZXNzaW9uQ291bnQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFRoaXMgbWV0aG9kIHBhcnNlcyB0aGUgcG9ydGlvbiBvZiB0aGUgZm9yTG9vcFBhcnRzIHRoYXQgc3RhcnRzIHdpdGggdGhlCiAgLy8vIGtleXdvcmQgJ2luJy4gRm9yIHRoZSBzYWtlIG9mIHJlY292ZXJ5LCB3ZSBhY2NlcHQgYSBjb2xvbiBpbiBwbGFjZSBvZiB0aGUKICAvLy8ga2V5d29yZC4KICAvLy8KICAvLy8gYGBgCiAgLy8vICBmb3JMb29wUGFydHM6CiAgLy8vICAgICAgbG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uICc7JyBleHByZXNzaW9uPyAnOycgZXhwcmVzc2lvbkxpc3Q/CiAgLy8vICAgIHwgZXhwcmVzc2lvbj8gJzsnIGV4cHJlc3Npb24/ICc7JyBleHByZXNzaW9uTGlzdD8KICAvLy8gICAgfCBsb2NhbFZhcmlhYmxlRGVjbGFyYXRpb24gJ2luJyBleHByZXNzaW9uCiAgLy8vICAgIHwgaWRlbnRpZmllciAnaW4nIGV4cHJlc3Npb24KICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUZvckluUmVzdCgKICAgICAgVG9rZW4gdG9rZW4sIFRva2VuIGF3YWl0VG9rZW4sIFRva2VuIGZvclRva2VuLCBUb2tlbiBpZGVudGlmaWVyKSB7CiAgICB0b2tlbiA9IHBhcnNlRm9ySW5Mb29wUGFydHNSZXN0KHRva2VuLCBhd2FpdFRva2VuLCBmb3JUb2tlbiwgaWRlbnRpZmllcik7CiAgICBsaXN0ZW5lci5iZWdpbkZvckluQm9keSh0b2tlbi5uZXh0KTsKICAgIExvb3BTdGF0ZSBzYXZlZExvb3BTdGF0ZSA9IGxvb3BTdGF0ZTsKICAgIGxvb3BTdGF0ZSA9IExvb3BTdGF0ZS5JbnNpZGVMb29wOwogICAgdG9rZW4gPSBwYXJzZVN0YXRlbWVudCh0b2tlbik7CiAgICBsb29wU3RhdGUgPSBzYXZlZExvb3BTdGF0ZTsKICAgIGxpc3RlbmVyLmVuZEZvckluQm9keSh0b2tlbi5uZXh0KTsKICAgIGxpc3RlbmVyLmVuZEZvckluKHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgVG9rZW4gcGFyc2VGb3JJbkxvb3BQYXJ0c1Jlc3QoCiAgICAgIFRva2VuIHRva2VuLCBUb2tlbiBhd2FpdFRva2VuLCBUb2tlbiBmb3JUb2tlbiwgVG9rZW4gaWRlbnRpZmllcikgewogICAgVG9rZW4gaW5LZXl3b3JkID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnZm9yJywgZm9yVG9rZW4pKTsKICAgIGFzc2VydChvcHRpb25hbCgnKCcsIGZvclRva2VuLm5leHQpKTsKICAgIGFzc2VydChvcHRpb25hbCgnaW4nLCBpbktleXdvcmQpIHx8IG9wdGlvbmFsKCc6JywgaW5LZXl3b3JkKSk7CgogICAgaWYgKCFpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgfSBlbHNlIGlmIChpZGVudGlmaWVyICE9IHRva2VuKSB7CiAgICAgIGlmIChvcHRpb25hbCgnPScsIGlkZW50aWZpZXIubmV4dCkpIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgICBpZGVudGlmaWVyLm5leHQsIGZhc3RhLm1lc3NhZ2VJbml0aWFsaXplZFZhcmlhYmxlSW5Gb3JFYWNoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICBpZGVudGlmaWVyLm5leHQsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChhd2FpdFRva2VuICE9IG51bGwgJiYgIWluQXN5bmMpIHsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IGNvbnNpZGVyIHJlcG9ydGluZyB0aGUgZXJyb3Igb24gYXdhaXRUb2tlbgogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGluS2V5d29yZCwgZmFzdGEubWVzc2FnZUF3YWl0Rm9yTm90QXN5bmMpOwogICAgfQoKICAgIGxpc3RlbmVyLmJlZ2luRm9ySW5FeHByZXNzaW9uKGluS2V5d29yZC5uZXh0KTsKICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKGluS2V5d29yZCk7CiAgICB0b2tlbiA9IGVuc3VyZUNsb3NlUGFyZW4odG9rZW4sIGZvclRva2VuLm5leHQpOwogICAgbGlzdGVuZXIuZW5kRm9ySW5FeHByZXNzaW9uKHRva2VuKTsKICAgIGxpc3RlbmVyLmhhbmRsZUZvckluTG9vcFBhcnRzKAogICAgICAgIGF3YWl0VG9rZW4sIGZvclRva2VuLCBmb3JUb2tlbi5uZXh0LCBpbktleXdvcmQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyB3aGlsZVN0YXRlbWVudDoKICAvLy8gICAnd2hpbGUnICcoJyBleHByZXNzaW9uICcpJyBzdGF0ZW1lbnQKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVdoaWxlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiB3aGlsZVRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnd2hpbGUnLCB3aGlsZVRva2VuKSk7CiAgICBsaXN0ZW5lci5iZWdpbldoaWxlU3RhdGVtZW50KHdoaWxlVG9rZW4pOwogICAgdG9rZW4gPSBlbnN1cmVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKHdoaWxlVG9rZW4pOwogICAgbGlzdGVuZXIuYmVnaW5XaGlsZVN0YXRlbWVudEJvZHkodG9rZW4ubmV4dCk7CiAgICBMb29wU3RhdGUgc2F2ZWRMb29wU3RhdGUgPSBsb29wU3RhdGU7CiAgICBsb29wU3RhdGUgPSBMb29wU3RhdGUuSW5zaWRlTG9vcDsKICAgIHRva2VuID0gcGFyc2VTdGF0ZW1lbnQodG9rZW4pOwogICAgbG9vcFN0YXRlID0gc2F2ZWRMb29wU3RhdGU7CiAgICBsaXN0ZW5lci5lbmRXaGlsZVN0YXRlbWVudEJvZHkodG9rZW4ubmV4dCk7CiAgICBsaXN0ZW5lci5lbmRXaGlsZVN0YXRlbWVudCh3aGlsZVRva2VuLCB0b2tlbi5uZXh0KTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gZG9TdGF0ZW1lbnQ6CiAgLy8vICAgJ2RvJyBzdGF0ZW1lbnQgJ3doaWxlJyAnKCcgZXhwcmVzc2lvbiAnKScgJzsnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VEb1doaWxlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBkb1Rva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnZG8nLCBkb1Rva2VuKSk7CiAgICBsaXN0ZW5lci5iZWdpbkRvV2hpbGVTdGF0ZW1lbnQoZG9Ub2tlbik7CiAgICBsaXN0ZW5lci5iZWdpbkRvV2hpbGVTdGF0ZW1lbnRCb2R5KGRvVG9rZW4ubmV4dCk7CiAgICBMb29wU3RhdGUgc2F2ZWRMb29wU3RhdGUgPSBsb29wU3RhdGU7CiAgICBsb29wU3RhdGUgPSBMb29wU3RhdGUuSW5zaWRlTG9vcDsKICAgIHRva2VuID0gcGFyc2VTdGF0ZW1lbnQoZG9Ub2tlbik7CiAgICBsb29wU3RhdGUgPSBzYXZlZExvb3BTdGF0ZTsKICAgIGxpc3RlbmVyLmVuZERvV2hpbGVTdGF0ZW1lbnRCb2R5KHRva2VuKTsKICAgIFRva2VuIHdoaWxlVG9rZW4gPSB0b2tlbi5uZXh0OwogICAgaWYgKCFvcHRpb25hbCgnd2hpbGUnLCB3aGlsZVRva2VuKSkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgd2hpbGVUb2tlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCd3aGlsZScpKTsKICAgICAgd2hpbGVUb2tlbiA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0tleXdvcmQodG9rZW4sIEtleXdvcmQuV0hJTEUpOwogICAgfQogICAgdG9rZW4gPSBlbnN1cmVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKHdoaWxlVG9rZW4pOwogICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuZW5kRG9XaGlsZVN0YXRlbWVudChkb1Rva2VuLCB3aGlsZVRva2VuLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIGJsb2NrOgogIC8vLyAgICd7JyBzdGF0ZW1lbnQqICd9JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQmxvY2soVG9rZW4gdG9rZW4sIFN0cmluZyBibG9ja0tpbmQpIHsKICAgIFRva2VuIGJlZ2luID0gdG9rZW4gPSBlbnN1cmVCbG9jayh0b2tlbiwgbnVsbCwgYmxvY2tLaW5kKTsKICAgIGxpc3RlbmVyLmJlZ2luQmxvY2soYmVnaW4pOwogICAgaW50IHN0YXRlbWVudENvdW50ID0gMDsKICAgIFRva2VuIHN0YXJ0VG9rZW4gPSB0b2tlbi5uZXh0OwogICAgd2hpbGUgKG5vdEVvZk9yVmFsdWUoJ30nLCBzdGFydFRva2VuKSkgewogICAgICB0b2tlbiA9IHBhcnNlU3RhdGVtZW50KHRva2VuKTsKICAgICAgaWYgKGlkZW50aWNhbCh0b2tlbi5uZXh0LCBzdGFydFRva2VuKSkgewogICAgICAgIC8vIE5vIHByb2dyZXNzIHdhcyBtYWRlLCBzbyB3ZSByZXBvcnQgdGhlIGN1cnJlbnQgdG9rZW4gYXMgYmVpbmcgaW52YWxpZAogICAgICAgIC8vIGFuZCBtb3ZlIGZvcndhcmQuCiAgICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIHRva2VuLCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbi53aXRoQXJndW1lbnRzKHRva2VuKSk7CiAgICAgIH0KICAgICAgKytzdGF0ZW1lbnRDb3VudDsKICAgICAgc3RhcnRUb2tlbiA9IHRva2VuLm5leHQ7CiAgICB9CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ30nLCB0b2tlbikpOwogICAgbGlzdGVuZXIuZW5kQmxvY2soc3RhdGVtZW50Q291bnQsIGJlZ2luLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBwYXJzZUludmFsaWRCbG9jayhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCd7JywgYmVnaW4pKTsKICAgIC8vIFBhcnNlIGFuZCByZXBvcnQgdGhlIGludmFsaWQgYmxvY2ssIGJ1dCBzdXBwcmVzcyBlcnJvcnMKICAgIC8vIGJlY2F1c2UgYW4gZXJyb3IgaGFzIGFscmVhZHkgYmVlbiByZXBvcnRlZCBieSB0aGUgY2FsbGVyLgogICAgTGlzdGVuZXIgb3JpZ2luYWxMaXN0ZW5lciA9IGxpc3RlbmVyOwogICAgbGlzdGVuZXIgPSBuZXcgRm9yd2FyZGluZ0xpc3RlbmVyKGxpc3RlbmVyKS4uZm9yd2FyZEVycm9ycyA9IGZhbHNlOwogICAgLy8gVGhlIHNjYW5uZXIgZW5zdXJlcyB0aGF0IGB7YCBhbHdheXMgaGFzIGEgY2xvc2luZyBgfWAuCiAgICB0b2tlbiA9IHBhcnNlQmxvY2sodG9rZW4sIG51bGwpOwogICAgbGlzdGVuZXIgPSBvcmlnaW5hbExpc3RlbmVyOwogICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZFRvcExldmVsQmxvY2soYmVnaW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIERldGVybWluZSBpZiB0aGUgZm9sbG93aW5nIHRva2VucyBsb29rIGxpa2UgYW4gJ2F3YWl0JyBleHByZXNzaW9uCiAgLy8vIGFuZCBub3QgYSBsb2NhbCB2YXJpYWJsZSBvciBsb2NhbCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KICBib29sIGxvb2tzTGlrZUF3YWl0RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdhd2FpdCcsIHRva2VuKSk7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CgogICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIHBhcnNpbmcgdGhlIHBvdGVudGlhbCBleHByZXNzaW9uIGZvbGxvd2luZwogICAgLy8gdGhlIGBhd2FpdGAgdG9rZW4gb25jZSBkb2luZyBzbyBkb2VzIG5vdCBtb2RpZnkgdGhlIHRva2VuIHN0cmVhbS4KICAgIC8vIEZvciBub3csIHVzZSBzaW1wbGUgbG9vayBhaGVhZCBhbmQgZW5zdXJlIG5vIGZhbHNlIHBvc2l0aXZlcy4KCiAgICBpZiAodG9rZW4uaXNJZGVudGlmaWVyKSB7CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCcoJywgdG9rZW4pKSB7CiAgICAgICAgdG9rZW4gPSB0b2tlbi5lbmRHcm91cC5uZXh0OwogICAgICAgIGlmIChpc09uZU9mKHRva2VuLCBbJzsnLCAnLicsICcuLicsICc/JywgJz8uJ10pKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaXNPbmVPZih0b2tlbiwgWycuJywgJyknLCAnXSddKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gYGBgCiAgLy8vIGF3YWl0RXhwcmVzc2lvbjoKICAvLy8gICAnYXdhaXQnIHVuYXJ5RXhwcmVzc2lvbgogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQXdhaXRFeHByZXNzaW9uKFRva2VuIHRva2VuLCBib29sIGFsbG93Q2FzY2FkZXMpIHsKICAgIFRva2VuIGF3YWl0VG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdhd2FpdCcsIGF3YWl0VG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luQXdhaXRFeHByZXNzaW9uKGF3YWl0VG9rZW4pOwogICAgdG9rZW4gPSBwYXJzZVByZWNlZGVuY2VFeHByZXNzaW9uKAogICAgICAgIGF3YWl0VG9rZW4sIFBPU1RGSVhfUFJFQ0VERU5DRSwgYWxsb3dDYXNjYWRlcyk7CiAgICBpZiAoaW5Bc3luYykgewogICAgICBsaXN0ZW5lci5lbmRBd2FpdEV4cHJlc3Npb24oYXdhaXRUb2tlbiwgdG9rZW4ubmV4dCk7CiAgICB9IGVsc2UgewogICAgICBmYXN0YS5NZXNzYWdlQ29kZSBlcnJvckNvZGUgPSBmYXN0YS5tZXNzYWdlQXdhaXROb3RBc3luYzsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihhd2FpdFRva2VuLCBlcnJvckNvZGUpOwogICAgICBsaXN0ZW5lci5lbmRJbnZhbGlkQXdhaXRFeHByZXNzaW9uKGF3YWl0VG9rZW4sIHRva2VuLm5leHQsIGVycm9yQ29kZSk7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHRocm93RXhwcmVzc2lvbjoKICAvLy8gICAndGhyb3cnIGV4cHJlc3Npb24KICAvLy8gOwogIC8vLwogIC8vLyB0aHJvd0V4cHJlc3Npb25XaXRob3V0Q2FzY2FkZToKICAvLy8gICAndGhyb3cnIGV4cHJlc3Npb25XaXRob3V0Q2FzY2FkZQogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlVGhyb3dFeHByZXNzaW9uKFRva2VuIHRva2VuLCBib29sIGFsbG93Q2FzY2FkZXMpIHsKICAgIFRva2VuIHRocm93VG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCd0aHJvdycsIHRocm93VG9rZW4pKTsKICAgIGlmIChvcHRpb25hbCgnOycsIHRocm93VG9rZW4ubmV4dCkpIHsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGludGVyY2VwdCB0aGUgcGFyc2VFeHByZXNzaW9uCiAgICAgIC8vIHJlY292ZXJ5IHRvIGdlbmVyYXRlIHRoaXMgZXJyb3IgbWVzc2FnZSByYXRoZXIgdGhhbiBleHBsaWNpdGx5CiAgICAgIC8vIGNoZWNraW5nIHRoZSBuZXh0IHRva2VuIGFzIHdlIGFyZSBkb2luZyBoZXJlLgogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgdGhyb3dUb2tlbi5uZXh0LCBmYXN0YS5tZXNzYWdlTWlzc2luZ0V4cHJlc3Npb25JblRocm93KTsKICAgICAgcmV3cml0ZXIuaW5zZXJ0VG9rZW4oCiAgICAgICAgICB0aHJvd1Rva2VuLAogICAgICAgICAgbmV3IFN5bnRoZXRpY1N0cmluZ1Rva2VuKAogICAgICAgICAgICAgIFRva2VuVHlwZS5TVFJJTkcsICciIicsIHRocm93VG9rZW4ubmV4dC5jaGFyT2Zmc2V0LCAwKSk7CiAgICB9CiAgICB0b2tlbiA9IGFsbG93Q2FzY2FkZXMKICAgICAgICA/IHBhcnNlRXhwcmVzc2lvbih0aHJvd1Rva2VuKQogICAgICAgIDogcGFyc2VFeHByZXNzaW9uV2l0aG91dENhc2NhZGUodGhyb3dUb2tlbik7CiAgICBsaXN0ZW5lci5oYW5kbGVUaHJvd0V4cHJlc3Npb24odGhyb3dUb2tlbiwgdG9rZW4ubmV4dCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHJldGhyb3dTdGF0ZW1lbnQ6CiAgLy8vICAgJ3JldGhyb3cnICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlUmV0aHJvd1N0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gdGhyb3dUb2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3JldGhyb3cnLCB0aHJvd1Rva2VuKSk7CiAgICBsaXN0ZW5lci5iZWdpblJldGhyb3dTdGF0ZW1lbnQodGhyb3dUb2tlbik7CiAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0aHJvd1Rva2VuKTsKICAgIGxpc3RlbmVyLmVuZFJldGhyb3dTdGF0ZW1lbnQodGhyb3dUb2tlbiwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyB0cnlTdGF0ZW1lbnQ6CiAgLy8vICAgJ3RyeScgYmxvY2sgKG9uUGFydCsgZmluYWxseVBhcnQ/IHwgZmluYWxseVBhcnQpCiAgLy8vIDsKICAvLy8KICAvLy8gb25QYXJ0OgogIC8vLyAgIGNhdGNoUGFydCBibG9jayB8CiAgLy8vICAgJ29uJyB0eXBlIGNhdGNoUGFydD8gYmxvY2sKICAvLy8gOwogIC8vLwogIC8vLyBjYXRjaFBhcnQ6CiAgLy8vICAgJ2NhdGNoJyAnKCcgaWRlbnRpZmllciAoJywnIGlkZW50aWZpZXIpPyAnKScKICAvLy8gOwogIC8vLwogIC8vLyBmaW5hbGx5UGFydDoKICAvLy8gICAnZmluYWxseScgYmxvY2sKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVRyeVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gdHJ5S2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3RyeScsIHRyeUtleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luVHJ5U3RhdGVtZW50KHRyeUtleXdvcmQpOwogICAgVG9rZW4gbGFzdENvbnN1bWVkID0gcGFyc2VCbG9jayh0cnlLZXl3b3JkLCAndHJ5IHN0YXRlbWVudCcpOwogICAgdG9rZW4gPSBsYXN0Q29uc3VtZWQubmV4dDsKICAgIGludCBjYXRjaENvdW50ID0gMDsKCiAgICBTdHJpbmcgdmFsdWUgPSB0b2tlbi5zdHJpbmdWYWx1ZTsKICAgIHdoaWxlIChpZGVudGljYWwodmFsdWUsICdjYXRjaCcpIHx8IGlkZW50aWNhbCh2YWx1ZSwgJ29uJykpIHsKICAgICAgbGlzdGVuZXIuYmVnaW5DYXRjaENsYXVzZSh0b2tlbik7CiAgICAgIFRva2VuIG9uS2V5d29yZCA9IG51bGw7CiAgICAgIGlmIChpZGVudGljYWwodmFsdWUsICdvbicpKSB7CiAgICAgICAgLy8gJ29uJyB0eXBlIGNhdGNoUGFydD8KICAgICAgICBvbktleXdvcmQgPSB0b2tlbjsKICAgICAgICBsYXN0Q29uc3VtZWQgPSBjb21wdXRlVHlwZSh0b2tlbiwgdHJ1ZSkuZW5zdXJlVHlwZU5vdFZvaWQodG9rZW4sIHRoaXMpOwogICAgICAgIHRva2VuID0gbGFzdENvbnN1bWVkLm5leHQ7CiAgICAgICAgdmFsdWUgPSB0b2tlbi5zdHJpbmdWYWx1ZTsKICAgICAgfQogICAgICBUb2tlbiBjYXRjaEtleXdvcmQgPSBudWxsOwogICAgICBUb2tlbiBjb21tYSA9IG51bGw7CiAgICAgIGlmIChpZGVudGljYWwodmFsdWUsICdjYXRjaCcpKSB7CiAgICAgICAgY2F0Y2hLZXl3b3JkID0gdG9rZW47CgogICAgICAgIFRva2VuIG9wZW5QYXJlbnMgPSBjYXRjaEtleXdvcmQubmV4dDsKICAgICAgICBpZiAoIW9wdGlvbmFsKCIoIiwgb3BlblBhcmVucykpIHsKICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3Iob3BlblBhcmVucywgZmFzdGEubWVzc2FnZUNhdGNoU3ludGF4KTsKICAgICAgICAgIG9wZW5QYXJlbnMgPSByZXdyaXRlci5pbnNlcnRQYXJlbnMoY2F0Y2hLZXl3b3JkLCB0cnVlKTsKICAgICAgICB9CgogICAgICAgIFRva2VuIGV4Y2VwdGlvbk5hbWUgPSBvcGVuUGFyZW5zLm5leHQ7CiAgICAgICAgaWYgKGV4Y2VwdGlvbk5hbWUua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKSB7CiAgICAgICAgICBleGNlcHRpb25OYW1lID0gSWRlbnRpZmllckNvbnRleHQuY2F0Y2hQYXJhbWV0ZXIKICAgICAgICAgICAgICAuZW5zdXJlSWRlbnRpZmllcihvcGVuUGFyZW5zLCB0aGlzKTsKICAgICAgICB9CgogICAgICAgIGlmIChvcHRpb25hbCgiKSIsIGV4Y2VwdGlvbk5hbWUubmV4dCkpIHsKICAgICAgICAgIC8vIE9LOiBgY2F0Y2ggKGlkZW50aWZpZXIpYC4KICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29tbWEgPSBleGNlcHRpb25OYW1lLm5leHQ7CiAgICAgICAgICBpZiAoIW9wdGlvbmFsKCIsIiwgY29tbWEpKSB7CiAgICAgICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgICAgIGlmICghZXhjZXB0aW9uTmFtZS5pc1N5bnRoZXRpYykgewogICAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoY29tbWEsIGZhc3RhLm1lc3NhZ2VDYXRjaFN5bnRheCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciBpbnNlcnRpbmcgYG9uYCBjbGF1c2UgaWYKICAgICAgICAgICAgLy8gZXhjZXB0aW9uTmFtZSBpcyBwcmVjZWRlZCBieSB0eXBlIGFuZCBmb2xsb3dlZCBieSBhIGNvbW1hLgogICAgICAgICAgICAvLyBUaGVuIHRoaXMKICAgICAgICAgICAgLy8gICB9IGNhdGNoIChFIGUsIHQpIHsKICAgICAgICAgICAgLy8gd2lsbCByZWNvdmVyIHRvCiAgICAgICAgICAgIC8vICAgfSBvbiBFIGNhdGNoIChlLCB0KSB7CiAgICAgICAgICAgIC8vIHdpdGggYSBkZXRhaWxlZCBleHBsYWluYXRpb24gZm9yIHRoZSB1c2VyIGluIHRoZSBlcnJvcgogICAgICAgICAgICAvLyBpbmRpY2F0aW5nIHdoYXQgdGhleSBzaG91bGQgZG8gdG8gZml4IHRoZSBjb2RlLgoKICAgICAgICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IENvbnNpZGVyIGluc2VydGluZyBzeW50aGV0aWMgaWRlbnRpZmllciBpZgogICAgICAgICAgICAvLyBleGNlcHRpb25OYW1lIGlzIGEgbm9uLXN5bnRoZXRpYyBpZGVudGlmaWVyIGZvbGxvd2VkIGJ5IGAuYC4KICAgICAgICAgICAgLy8gVGhlbiB0aGlzCiAgICAgICAgICAgIC8vICAgfSBjYXRjaCAoCiAgICAgICAgICAgIC8vICAgZS5mKCk7CiAgICAgICAgICAgIC8vIHdpbGwgcmVjb3ZlciB0bwogICAgICAgICAgICAvLyAgIH0gY2F0Y2ggKF9zXykge30KICAgICAgICAgICAgLy8gICBlLmYoKTsKICAgICAgICAgICAgLy8gcmF0aGVyIHRoYW4KICAgICAgICAgICAgLy8gICB9IGNhdGNoIChlKSB7fQogICAgICAgICAgICAvLyAgIF9zXy5mKCk7CgogICAgICAgICAgICBpZiAob3BlblBhcmVucy5lbmRHcm91cC5pc1N5bnRoZXRpYykgewogICAgICAgICAgICAgIC8vIFRoZSBzY2FubmVyIGRpZCBub3QgcGxhY2UgdGhlIHN5bnRoZXRpYyAnKScgY29ycmVjdGx5LgogICAgICAgICAgICAgIHJld3JpdGVyLm1vdmVTeW50aGV0aWMoZXhjZXB0aW9uTmFtZSwgb3BlblBhcmVucy5lbmRHcm91cCk7CiAgICAgICAgICAgICAgY29tbWEgPSBudWxsOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbW1hID0KICAgICAgICAgICAgICAgICAgcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4oZXhjZXB0aW9uTmFtZSwgVG9rZW5UeXBlLkNPTU1BKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvbW1hICE9IG51bGwpIHsKICAgICAgICAgICAgVG9rZW4gdHJhY2VOYW1lID0gY29tbWEubmV4dDsKICAgICAgICAgICAgaWYgKHRyYWNlTmFtZS5raW5kICE9IElERU5USUZJRVJfVE9LRU4pIHsKICAgICAgICAgICAgICB0cmFjZU5hbWUgPSBJZGVudGlmaWVyQ29udGV4dC5jYXRjaFBhcmFtZXRlcgogICAgICAgICAgICAgICAgICAuZW5zdXJlSWRlbnRpZmllcihjb21tYSwgdGhpcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFvcHRpb25hbCgiKSIsIHRyYWNlTmFtZS5uZXh0KSkgewogICAgICAgICAgICAgIC8vIFJlY292ZXJ5CiAgICAgICAgICAgICAgaWYgKCF0cmFjZU5hbWUuaXNTeW50aGV0aWMpIHsKICAgICAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgICAgICAgdHJhY2VOYW1lLm5leHQsIGZhc3RhLm1lc3NhZ2VDYXRjaFN5bnRheEV4dHJhUGFyYW1ldGVycyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChvcGVuUGFyZW5zLmVuZEdyb3VwLmlzU3ludGhldGljKSB7CiAgICAgICAgICAgICAgICAvLyBUaGUgc2Nhbm5lciBkaWQgbm90IHBsYWNlIHRoZSBzeW50aGV0aWMgJyknIGNvcnJlY3RseS4KICAgICAgICAgICAgICAgIHJld3JpdGVyLm1vdmVTeW50aGV0aWModHJhY2VOYW1lLCBvcGVuUGFyZW5zLmVuZEdyb3VwKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbGFzdENvbnN1bWVkID0gcGFyc2VGb3JtYWxQYXJhbWV0ZXJzKGNhdGNoS2V5d29yZCwgTWVtYmVyS2luZC5DYXRjaCk7CiAgICAgICAgdG9rZW4gPSBsYXN0Q29uc3VtZWQubmV4dDsKICAgICAgfQogICAgICBsaXN0ZW5lci5lbmRDYXRjaENsYXVzZSh0b2tlbik7CiAgICAgIGxhc3RDb25zdW1lZCA9IHBhcnNlQmxvY2sobGFzdENvbnN1bWVkLCAnY2F0Y2ggY2xhdXNlJyk7CiAgICAgIHRva2VuID0gbGFzdENvbnN1bWVkLm5leHQ7CiAgICAgICsrY2F0Y2hDb3VudDsKICAgICAgbGlzdGVuZXIuaGFuZGxlQ2F0Y2hCbG9jayhvbktleXdvcmQsIGNhdGNoS2V5d29yZCwgY29tbWEpOwogICAgICB2YWx1ZSA9IHRva2VuLnN0cmluZ1ZhbHVlOyAvLyB3aGlsZSBjb25kaXRpb24KICAgIH0KCiAgICBUb2tlbiBmaW5hbGx5S2V5d29yZCA9IG51bGw7CiAgICBpZiAob3B0aW9uYWwoJ2ZpbmFsbHknLCB0b2tlbikpIHsKICAgICAgZmluYWxseUtleXdvcmQgPSB0b2tlbjsKICAgICAgbGFzdENvbnN1bWVkID0gcGFyc2VCbG9jayh0b2tlbiwgJ2ZpbmFsbHkgY2xhdXNlJyk7CiAgICAgIHRva2VuID0gbGFzdENvbnN1bWVkLm5leHQ7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUZpbmFsbHlCbG9jayhmaW5hbGx5S2V5d29yZCk7CiAgICB9IGVsc2UgewogICAgICBpZiAoY2F0Y2hDb3VudCA9PSAwKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0cnlLZXl3b3JkLCBmYXN0YS5tZXNzYWdlT25seVRyeSk7CiAgICAgIH0KICAgIH0KICAgIGxpc3RlbmVyLmVuZFRyeVN0YXRlbWVudChjYXRjaENvdW50LCB0cnlLZXl3b3JkLCBmaW5hbGx5S2V5d29yZCk7CiAgICByZXR1cm4gbGFzdENvbnN1bWVkOwogIH0KCiAgLy8vIGBgYAogIC8vLyBzd2l0Y2hTdGF0ZW1lbnQ6CiAgLy8vICAgJ3N3aXRjaCcgcGFyZW50aGVzaXplZEV4cHJlc3Npb24gc3dpdGNoQmxvY2sKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZVN3aXRjaFN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gc3dpdGNoS2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ3N3aXRjaCcsIHN3aXRjaEtleXdvcmQpKTsKICAgIGxpc3RlbmVyLmJlZ2luU3dpdGNoU3RhdGVtZW50KHN3aXRjaEtleXdvcmQpOwogICAgdG9rZW4gPSBlbnN1cmVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKHN3aXRjaEtleXdvcmQpOwogICAgTG9vcFN0YXRlIHNhdmVkTG9vcFN0YXRlID0gbG9vcFN0YXRlOwogICAgaWYgKGxvb3BTdGF0ZSA9PSBMb29wU3RhdGUuT3V0c2lkZUxvb3ApIHsKICAgICAgbG9vcFN0YXRlID0gTG9vcFN0YXRlLkluc2lkZVN3aXRjaDsKICAgIH0KICAgIHRva2VuID0gcGFyc2VTd2l0Y2hCbG9jayh0b2tlbik7CiAgICBsb29wU3RhdGUgPSBzYXZlZExvb3BTdGF0ZTsKICAgIGxpc3RlbmVyLmVuZFN3aXRjaFN0YXRlbWVudChzd2l0Y2hLZXl3b3JkLCB0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gYGBgCiAgLy8vIHN3aXRjaEJsb2NrOgogIC8vLyAgICd7JyBzd2l0Y2hDYXNlKiBkZWZhdWx0Q2FzZT8gJ30nCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VTd2l0Y2hCbG9jayhUb2tlbiB0b2tlbikgewogICAgVG9rZW4gYmVnaW5Td2l0Y2ggPSB0b2tlbiA9IGVuc3VyZUJsb2NrKHRva2VuLCBudWxsLCAnc3dpdGNoIHN0YXRlbWVudCcpOwogICAgbGlzdGVuZXIuYmVnaW5Td2l0Y2hCbG9jayhiZWdpblN3aXRjaCk7CiAgICBpbnQgY2FzZUNvdW50ID0gMDsKICAgIFRva2VuIGRlZmF1bHRLZXl3b3JkID0gbnVsbDsKICAgIFRva2VuIGNvbG9uQWZ0ZXJEZWZhdWx0ID0gbnVsbDsKICAgIHdoaWxlIChub3RFb2ZPclZhbHVlKCd9JywgdG9rZW4ubmV4dCkpIHsKICAgICAgVG9rZW4gYmVnaW5DYXNlID0gdG9rZW4ubmV4dDsKICAgICAgaW50IGV4cHJlc3Npb25Db3VudCA9IDA7CiAgICAgIGludCBsYWJlbENvdW50ID0gMDsKICAgICAgVG9rZW4gcGVlayA9IHBlZWtQYXN0TGFiZWxzKGJlZ2luQ2FzZSk7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgLy8gTG9vcCB1bnRpbCB3ZSBmaW5kIHNvbWV0aGluZyB0aGF0IGNhbid0IGJlIHBhcnQgb2YgYSBzd2l0Y2ggY2FzZS4KICAgICAgICBTdHJpbmcgdmFsdWUgPSBwZWVrLnN0cmluZ1ZhbHVlOwogICAgICAgIGlmIChpZGVudGljYWwodmFsdWUsICdkZWZhdWx0JykpIHsKICAgICAgICAgIHdoaWxlICghaWRlbnRpY2FsKHRva2VuLm5leHQsIHBlZWspKSB7CiAgICAgICAgICAgIHRva2VuID0gcGFyc2VMYWJlbCh0b2tlbik7CiAgICAgICAgICAgIGxhYmVsQ291bnQrKzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChkZWZhdWx0S2V5d29yZCAhPSBudWxsKSB7CiAgICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgICB0b2tlbi5uZXh0LCBmYXN0YS5tZXNzYWdlU3dpdGNoSGFzTXVsdGlwbGVEZWZhdWx0cyk7CiAgICAgICAgICB9CiAgICAgICAgICBkZWZhdWx0S2V5d29yZCA9IHRva2VuLm5leHQ7CiAgICAgICAgICBjb2xvbkFmdGVyRGVmYXVsdCA9IHRva2VuID0gZW5zdXJlQ29sb24oZGVmYXVsdEtleXdvcmQpOwogICAgICAgICAgcGVlayA9IHRva2VuLm5leHQ7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCh2YWx1ZSwgJ2Nhc2UnKSkgewogICAgICAgICAgd2hpbGUgKCFpZGVudGljYWwodG9rZW4ubmV4dCwgcGVlaykpIHsKICAgICAgICAgICAgdG9rZW4gPSBwYXJzZUxhYmVsKHRva2VuKTsKICAgICAgICAgICAgbGFiZWxDb3VudCsrOwogICAgICAgICAgfQogICAgICAgICAgVG9rZW4gY2FzZUtleXdvcmQgPSB0b2tlbi5uZXh0OwogICAgICAgICAgaWYgKGRlZmF1bHRLZXl3b3JkICE9IG51bGwpIHsKICAgICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICAgIGNhc2VLZXl3b3JkLCBmYXN0YS5tZXNzYWdlU3dpdGNoSGFzQ2FzZUFmdGVyRGVmYXVsdCk7CiAgICAgICAgICB9CiAgICAgICAgICBsaXN0ZW5lci5iZWdpbkNhc2VFeHByZXNzaW9uKGNhc2VLZXl3b3JkKTsKICAgICAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKGNhc2VLZXl3b3JkKTsKICAgICAgICAgIHRva2VuID0gZW5zdXJlQ29sb24odG9rZW4pOwogICAgICAgICAgbGlzdGVuZXIuZW5kQ2FzZUV4cHJlc3Npb24odG9rZW4pOwogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlQ2FzZU1hdGNoKGNhc2VLZXl3b3JkLCB0b2tlbik7CiAgICAgICAgICBleHByZXNzaW9uQ291bnQrKzsKICAgICAgICAgIHBlZWsgPSBwZWVrUGFzdExhYmVscyh0b2tlbi5uZXh0KTsKICAgICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb25Db3VudCA+IDApIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICBwZWVrLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkVG9rZW4ud2l0aEFyZ3VtZW50cygiY2FzZSIpKTsKICAgICAgICAgIFRva2VuIGVuZEdyb3VwID0gYmVnaW5Td2l0Y2guZW5kR3JvdXA7CiAgICAgICAgICB3aGlsZSAodG9rZW4ubmV4dCAhPSBlbmRHcm91cCkgewogICAgICAgICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgICAgICB9CiAgICAgICAgICBwZWVrID0gcGVla1Bhc3RMYWJlbHModG9rZW4ubmV4dCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZVN0YXRlbWVudHNJblN3aXRjaENhc2UodG9rZW4sIHBlZWssIGJlZ2luQ2FzZSwgbGFiZWxDb3VudCwKICAgICAgICAgIGV4cHJlc3Npb25Db3VudCwgZGVmYXVsdEtleXdvcmQsIGNvbG9uQWZ0ZXJEZWZhdWx0KTsKICAgICAgKytjYXNlQ291bnQ7CiAgICB9CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBsaXN0ZW5lci5lbmRTd2l0Y2hCbG9jayhjYXNlQ291bnQsIGJlZ2luU3dpdGNoLCB0b2tlbik7CiAgICBhc3NlcnQob3B0aW9uYWwoJ30nLCB0b2tlbikpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBlZWsgYWZ0ZXIgdGhlIGZvbGxvd2luZyBsYWJlbHMgKGlmIGFueSkuIFRoZSBmb2xsb3dpbmcgdG9rZW4KICAvLy8gaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgdGhlIGxhYmVscyBiZWxvbmcgdG8gYSBzdGF0ZW1lbnQgb3IgYQogIC8vLyBzd2l0Y2ggY2FzZS4KICBUb2tlbiBwZWVrUGFzdExhYmVscyhUb2tlbiB0b2tlbikgewogICAgd2hpbGUgKHRva2VuLmlzSWRlbnRpZmllciAmJiBvcHRpb25hbCgnOicsIHRva2VuLm5leHQpKSB7CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dC5uZXh0OwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBhcnNlIHN0YXRlbWVudHMgYWZ0ZXIgYSBzd2l0Y2ggYGNhc2U6YCBvciBgZGVmYXVsdDpgLgogIFRva2VuIHBhcnNlU3RhdGVtZW50c0luU3dpdGNoQ2FzZSgKICAgICAgVG9rZW4gdG9rZW4sCiAgICAgIFRva2VuIHBlZWssCiAgICAgIFRva2VuIGJlZ2luLAogICAgICBpbnQgbGFiZWxDb3VudCwKICAgICAgaW50IGV4cHJlc3Npb25Db3VudCwKICAgICAgVG9rZW4gZGVmYXVsdEtleXdvcmQsCiAgICAgIFRva2VuIGNvbG9uQWZ0ZXJEZWZhdWx0KSB7CiAgICBsaXN0ZW5lci5iZWdpblN3aXRjaENhc2UobGFiZWxDb3VudCwgZXhwcmVzc2lvbkNvdW50LCBiZWdpbik7CiAgICAvLyBGaW5hbGx5IHplcm8gb3IgbW9yZSBzdGF0ZW1lbnRzLgogICAgaW50IHN0YXRlbWVudENvdW50ID0gMDsKICAgIHdoaWxlICghaWRlbnRpY2FsKHRva2VuLm5leHQua2luZCwgRU9GX1RPS0VOKSkgewogICAgICBTdHJpbmcgdmFsdWUgPSBwZWVrLnN0cmluZ1ZhbHVlOwogICAgICBpZiAoKGlkZW50aWNhbCh2YWx1ZSwgJ2Nhc2UnKSkgfHwKICAgICAgICAgIChpZGVudGljYWwodmFsdWUsICdkZWZhdWx0JykpIHx8CiAgICAgICAgICAoKGlkZW50aWNhbCh2YWx1ZSwgJ30nKSkgJiYgKGlkZW50aWNhbCh0b2tlbi5uZXh0LCBwZWVrKSkpKSB7CiAgICAgICAgLy8gQSBsYWJlbCBqdXN0IGJlZm9yZSAifSIgd2lsbCBiZSBoYW5kbGVkIGFzIGEgc3RhdGVtZW50IGVycm9yLgogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgewogICAgICAgIFRva2VuIHN0YXJ0VG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICAgIHRva2VuID0gcGFyc2VTdGF0ZW1lbnQodG9rZW4pOwogICAgICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIGlmIChpZGVudGljYWwobmV4dCwgc3RhcnRUb2tlbikpIHsKICAgICAgICAgIC8vIE5vIHByb2dyZXNzIHdhcyBtYWRlLCBzbyB3ZSByZXBvcnQgdGhlIGN1cnJlbnQgdG9rZW4gYXMgYmVpbmcKICAgICAgICAgIC8vIGludmFsaWQgYW5kIG1vdmUgZm9yd2FyZC4KICAgICAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4ud2l0aEFyZ3VtZW50cyhuZXh0KSk7CiAgICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgfQogICAgICAgICsrc3RhdGVtZW50Q291bnQ7CiAgICAgIH0KICAgICAgcGVlayA9IHBlZWtQYXN0TGFiZWxzKHRva2VuLm5leHQpOwogICAgfQogICAgbGlzdGVuZXIuZW5kU3dpdGNoQ2FzZShsYWJlbENvdW50LCBleHByZXNzaW9uQ291bnQsIGRlZmF1bHRLZXl3b3JkLAogICAgICAgIGNvbG9uQWZ0ZXJEZWZhdWx0LCBzdGF0ZW1lbnRDb3VudCwgYmVnaW4sIHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBicmVha1N0YXRlbWVudDoKICAvLy8gICAnYnJlYWsnIGlkZW50aWZpZXI/ICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQnJlYWtTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGJyZWFrS2V5d29yZCA9IHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnYnJlYWsnLCBicmVha0tleXdvcmQpKTsKICAgIGJvb2wgaGFzVGFyZ2V0ID0gZmFsc2U7CiAgICBpZiAodG9rZW4ubmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgdG9rZW4gPSBlbnN1cmVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC5sYWJlbFJlZmVyZW5jZSk7CiAgICAgIGhhc1RhcmdldCA9IHRydWU7CiAgICB9IGVsc2UgaWYgKCFpc0JyZWFrQWxsb3dlZCkgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGJyZWFrS2V5d29yZCwgZmFzdGEubWVzc2FnZUJyZWFrT3V0c2lkZU9mTG9vcCk7CiAgICB9CiAgICB0b2tlbiA9IGVuc3VyZVNlbWljb2xvbih0b2tlbik7CiAgICBsaXN0ZW5lci5oYW5kbGVCcmVha1N0YXRlbWVudChoYXNUYXJnZXQsIGJyZWFrS2V5d29yZCwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBhc3NlcnRpb246CiAgLy8vICAgJ2Fzc2VydCcgJygnIGV4cHJlc3Npb24gKCcsJyBleHByZXNzaW9uKT8gJywnPyAnKScKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUFzc2VydChUb2tlbiB0b2tlbiwgQXNzZXJ0IGtpbmQpIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnYXNzZXJ0JywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmJlZ2luQXNzZXJ0KHRva2VuLCBraW5kKTsKICAgIFRva2VuIGFzc2VydEtleXdvcmQgPSB0b2tlbjsKICAgIFRva2VuIGxlZnRQYXJlbnRoZXNpcyA9IHRva2VuLm5leHQ7CiAgICBpZiAoIW9wdGlvbmFsKCcoJywgbGVmdFBhcmVudGhlc2lzKSkgewogICAgICAvLyBSZWNvdmVyeQogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgICAgbGVmdFBhcmVudGhlc2lzLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkQnV0R290LndpdGhBcmd1bWVudHMoJygnKSk7CiAgICAgIGxlZnRQYXJlbnRoZXNpcyA9IHJld3JpdGVyLmluc2VydFBhcmVucyh0b2tlbiwgdHJ1ZSk7CiAgICB9CiAgICB0b2tlbiA9IGxlZnRQYXJlbnRoZXNpczsKICAgIFRva2VuIGNvbW1hVG9rZW4gPSBudWxsOwogICAgYm9vbCBvbGQgPSBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnM7CiAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSB0cnVlOwoKICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgIGlmIChvcHRpb25hbCgnLCcsIHRva2VuLm5leHQpKSB7CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKCFvcHRpb25hbCgnKScsIHRva2VuLm5leHQpKSB7CiAgICAgICAgY29tbWFUb2tlbiA9IHRva2VuOwogICAgICAgIHRva2VuID0gcGFyc2VFeHByZXNzaW9uKHRva2VuKTsKICAgICAgICBpZiAob3B0aW9uYWwoJywnLCB0b2tlbi5uZXh0KSkgewogICAgICAgICAgLy8gVHJhaWxpbmcgY29tbWEgaXMgaWdub3JlZC4KICAgICAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBUb2tlbiBlbmRHcm91cCA9IGxlZnRQYXJlbnRoZXNpcy5lbmRHcm91cDsKICAgIGlmICh0b2tlbi5uZXh0ID09IGVuZEdyb3VwKSB7CiAgICAgIHRva2VuID0gZW5kR3JvdXA7CiAgICB9IGVsc2UgewogICAgICAvLyBSZWNvdmVyeQogICAgICBpZiAoZW5kR3JvdXAuaXNTeW50aGV0aWMpIHsKICAgICAgICAvLyBUaGUgc2Nhbm5lciBkaWQgbm90IHBsYWNlIHRoZSBzeW50aGV0aWMgJyknIGNvcnJlY3RseSwgc28gbW92ZSBpdC4KICAgICAgICB0b2tlbiA9IHJld3JpdGVyLm1vdmVTeW50aGV0aWModG9rZW4sIGVuZEdyb3VwKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICB0b2tlbi5uZXh0LCBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbik7CiAgICAgICAgdG9rZW4gPSBlbmRHcm91cDsKICAgICAgfQogICAgfQoKICAgIGFzc2VydChvcHRpb25hbCgnKScsIHRva2VuKSk7CiAgICBtYXlQYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbnMgPSBvbGQ7CiAgICBpZiAoa2luZCA9PSBBc3NlcnQuRXhwcmVzc2lvbikgewogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKGFzc2VydEtleXdvcmQsIGZhc3RhLm1lc3NhZ2VBc3NlcnRBc0V4cHJlc3Npb24pOwogICAgfSBlbHNlIGlmIChraW5kID09IEFzc2VydC5TdGF0ZW1lbnQpIHsKICAgICAgZW5zdXJlU2VtaWNvbG9uKHRva2VuKTsKICAgIH0KICAgIGxpc3RlbmVyLmVuZEFzc2VydCgKICAgICAgICBhc3NlcnRLZXl3b3JkLCBraW5kLCBsZWZ0UGFyZW50aGVzaXMsIGNvbW1hVG9rZW4sIHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIGBgYAogIC8vLyBhc3NlcnRTdGF0ZW1lbnQ6CiAgLy8vICAgYXNzZXJ0aW9uICc7JwogIC8vLyA7CiAgLy8vIGBgYAogIFRva2VuIHBhcnNlQXNzZXJ0U3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2Fzc2VydCcsIHRva2VuLm5leHQpKTsKICAgIC8vIHBhcnNlQXNzZXJ0IGVuc3VyZXMgdGhhdCB0aGVyZSBpcyBhIHRyYWlsaW5nIHNlbWljb2xvbi4KICAgIHJldHVybiBwYXJzZUFzc2VydCh0b2tlbiwgQXNzZXJ0LlN0YXRlbWVudCkubmV4dDsKICB9CgogIC8vLyBgYGAKICAvLy8gY29udGludWVTdGF0ZW1lbnQ6CiAgLy8vICAgJ2NvbnRpbnVlJyBpZGVudGlmaWVyPyAnOycKICAvLy8gOwogIC8vLyBgYGAKICBUb2tlbiBwYXJzZUNvbnRpbnVlU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBjb250aW51ZUtleXdvcmQgPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2NvbnRpbnVlJywgY29udGludWVLZXl3b3JkKSk7CiAgICBib29sIGhhc1RhcmdldCA9IGZhbHNlOwogICAgaWYgKHRva2VuLm5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgIHRva2VuID0gZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQubGFiZWxSZWZlcmVuY2UpOwogICAgICBoYXNUYXJnZXQgPSB0cnVlOwogICAgICBpZiAoIWlzQ29udGludWVXaXRoTGFiZWxBbGxvd2VkKSB7CiAgICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgY29udGludWVLZXl3b3JkLCBmYXN0YS5tZXNzYWdlQ29udGludWVPdXRzaWRlT2ZMb29wKTsKICAgICAgfQogICAgfSBlbHNlIGlmICghaXNDb250aW51ZUFsbG93ZWQpIHsKICAgICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgIGNvbnRpbnVlS2V5d29yZCwKICAgICAgICAgIGxvb3BTdGF0ZSA9PSBMb29wU3RhdGUuSW5zaWRlU3dpdGNoCiAgICAgICAgICAgICAgPyBmYXN0YS5tZXNzYWdlQ29udGludWVXaXRob3V0TGFiZWxJbkNhc2UKICAgICAgICAgICAgICA6IGZhc3RhLm1lc3NhZ2VDb250aW51ZU91dHNpZGVPZkxvb3ApOwogICAgfQogICAgdG9rZW4gPSBlbnN1cmVTZW1pY29sb24odG9rZW4pOwogICAgbGlzdGVuZXIuaGFuZGxlQ29udGludWVTdGF0ZW1lbnQoaGFzVGFyZ2V0LCBjb250aW51ZUtleXdvcmQsIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBgYGAKICAvLy8gZW1wdHlTdGF0ZW1lbnQ6CiAgLy8vICAgJzsnCiAgLy8vIDsKICAvLy8gYGBgCiAgVG9rZW4gcGFyc2VFbXB0eVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc7JywgdG9rZW4pKTsKICAgIGxpc3RlbmVyLmhhbmRsZUVtcHR5U3RhdGVtZW50KHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBHaXZlbiBhIHRva2VuIChbYmVmb3JlVG9rZW5dKSB0aGF0IGlzIGtub3duIHRvIGJlIGJlZm9yZSBhbm90aGVyIFt0b2tlbl0sCiAgLy8vIHJldHVybiB0aGUgdG9rZW4gdGhhdCBpcyBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIFt0b2tlbl0uCiAgVG9rZW4gcHJldmlvdXNUb2tlbihUb2tlbiBiZWZvcmVUb2tlbiwgVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSBiZWZvcmVUb2tlbi5uZXh0OwogICAgd2hpbGUgKG5leHQgIT0gdG9rZW4gJiYgbmV4dCAhPSBiZWZvcmVUb2tlbikgewogICAgICBiZWZvcmVUb2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSBiZWZvcmVUb2tlbi5uZXh0OwogICAgfQogICAgcmV0dXJuIGJlZm9yZVRva2VuOwogIH0KCiAgLy8vIFJlY292ZXIgZnJvbSBmaW5kaW5nIGFuIG9wZXJhdG9yIGRlY2xhcmF0aW9uIG1pc3NpbmcgdGhlIGBvcGVyYXRvcmAKICAvLy8ga2V5d29yZC4gVGhlIG1ldGFkYXRhIGZvciB0aGUgbWVtYmVyLCBpZiBhbnksIGhhcyBhbHJlYWR5IGJlZW4gcGFyc2VkCiAgLy8vIChhbmQgZXZlbnRzIGhhdmUgYWxyZWFkeSBiZWVuIGdlbmVyYXRlZCkuCiAgVG9rZW4gcGFyc2VJbnZhbGlkT3BlcmF0b3JEZWNsYXJhdGlvbigKICAgICAgVG9rZW4gYmVmb3JlU3RhcnQsCiAgICAgIFRva2VuIGV4dGVybmFsVG9rZW4sCiAgICAgIFRva2VuIHN0YXRpY1Rva2VuLAogICAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwKICAgICAgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsCiAgICAgIFRva2VuIGJlZm9yZVR5cGUpIHsKICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gY29tcHV0ZVR5cGUoYmVmb3JlVHlwZSwgdHJ1ZSwgdHJ1ZSk7CgogICAgVG9rZW4gYmVmb3JlTmFtZSA9IHR5cGVJbmZvLnNraXBUeXBlKGJlZm9yZVR5cGUpOwogICAgVG9rZW4gbmV4dCA9IGJlZm9yZU5hbWUubmV4dDsKCiAgICBpZiAob3B0aW9uYWwoJ29wZXJhdG9yJywgbmV4dCkpIHsKICAgICAgbmV4dCA9IG5leHQubmV4dDsKICAgIH0gZWxzZSB7CiAgICAgIHJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZU1pc3NpbmdPcGVyYXRvcktleXdvcmQpOwogICAgICByZXdyaXRlci5pbnNlcnRTeW50aGV0aWNLZXl3b3JkKGJlZm9yZU5hbWUsIEtleXdvcmQuT1BFUkFUT1IpOwogICAgfQoKICAgIGFzc2VydCgobmV4dC5pc09wZXJhdG9yICYmIG5leHQuZW5kR3JvdXAgPT0gbnVsbCkgfHwKICAgICAgICBvcHRpb25hbCgnPT09JywgbmV4dCkgfHwKICAgICAgICBvcHRpb25hbCgnIT09JywgbmV4dCkpOwoKICAgIFRva2VuIHRva2VuID0gcGFyc2VNZXRob2QoCiAgICAgICAgYmVmb3JlU3RhcnQsCiAgICAgICAgZXh0ZXJuYWxUb2tlbiwKICAgICAgICBzdGF0aWNUb2tlbiwKICAgICAgICBjb3ZhcmlhbnRUb2tlbiwKICAgICAgICBsYXRlVG9rZW4sCiAgICAgICAgdmFyRmluYWxPckNvbnN0LAogICAgICAgIGJlZm9yZVR5cGUsCiAgICAgICAgdHlwZUluZm8sCiAgICAgICAgbnVsbCwKICAgICAgICBiZWZvcmVOYW1lLm5leHQpOwogICAgbGlzdGVuZXIuZW5kTWVtYmVyKCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUmVjb3ZlciBmcm9tIGZpbmRpbmcgYW4gaW52YWxpZCBjbGFzcyBtZW1iZXIuIFRoZSBtZXRhZGF0YSBmb3IgdGhlIG1lbWJlciwKICAvLy8gaWYgYW55LCBoYXMgYWxyZWFkeSBiZWVuIHBhcnNlZCAoYW5kIGV2ZW50cyBoYXZlIGFscmVhZHkgYmVlbiBnZW5lcmF0ZWQpLgogIC8vLyBUaGUgbWVtYmVyIHdhcyBleHBlY3RlZCB0byBzdGFydCB3aXRoIHRoZSB0b2tlbiBhZnRlciBbdG9rZW5dLgogIFRva2VuIHJlY292ZXJGcm9tSW52YWxpZENsYXNzTWVtYmVyKAogICAgICBUb2tlbiB0b2tlbiwKICAgICAgVG9rZW4gYmVmb3JlU3RhcnQsCiAgICAgIFRva2VuIGV4dGVybmFsVG9rZW4sCiAgICAgIFRva2VuIHN0YXRpY1Rva2VuLAogICAgICBUb2tlbiBjb3ZhcmlhbnRUb2tlbiwKICAgICAgVG9rZW4gbGF0ZVRva2VuLAogICAgICBUb2tlbiB2YXJGaW5hbE9yQ29uc3QsCiAgICAgIFRva2VuIGJlZm9yZVR5cGUsCiAgICAgIFR5cGVJbmZvIHR5cGVJbmZvLAogICAgICBUb2tlbiBnZXRPclNldCkgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBTdHJpbmcgdmFsdWUgPSBuZXh0LnN0cmluZ1ZhbHVlOwoKICAgIGlmIChpZGVudGljYWwodmFsdWUsICdjbGFzcycpKSB7CiAgICAgIHJldHVybiByZXBvcnRBbmRTa2lwQ2xhc3NJbkNsYXNzKG5leHQpOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwodmFsdWUsICdlbnVtJykpIHsKICAgICAgcmV0dXJuIHJlcG9ydEFuZFNraXBFbnVtSW5DbGFzcyhuZXh0KTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKHZhbHVlLCAndHlwZWRlZicpKSB7CiAgICAgIHJldHVybiByZXBvcnRBbmRTa2lwVHlwZWRlZkluQ2xhc3MobmV4dCk7CiAgICB9IGVsc2UgaWYgKG5leHQuaXNPcGVyYXRvciAmJiBuZXh0LmVuZEdyb3VwID09IG51bGwpIHsKICAgICAgcmV0dXJuIHBhcnNlSW52YWxpZE9wZXJhdG9yRGVjbGFyYXRpb24oYmVmb3JlU3RhcnQsIGV4dGVybmFsVG9rZW4sCiAgICAgICAgICBzdGF0aWNUb2tlbiwgY292YXJpYW50VG9rZW4sIGxhdGVUb2tlbiwgdmFyRmluYWxPckNvbnN0LCBiZWZvcmVUeXBlKTsKICAgIH0KCiAgICBpZiAoZ2V0T3JTZXQgIT0gbnVsbCB8fAogICAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJygnKSB8fAogICAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJz0+JykgfHwKICAgICAgICBpZGVudGljYWwodmFsdWUsICd7JykpIHsKICAgICAgdG9rZW4gPSBwYXJzZU1ldGhvZCgKICAgICAgICAgIGJlZm9yZVN0YXJ0LAogICAgICAgICAgZXh0ZXJuYWxUb2tlbiwKICAgICAgICAgIHN0YXRpY1Rva2VuLAogICAgICAgICAgY292YXJpYW50VG9rZW4sCiAgICAgICAgICBsYXRlVG9rZW4sCiAgICAgICAgICB2YXJGaW5hbE9yQ29uc3QsCiAgICAgICAgICBiZWZvcmVUeXBlLAogICAgICAgICAgdHlwZUluZm8sCiAgICAgICAgICBnZXRPclNldCwKICAgICAgICAgIHRva2VuLm5leHQpOwogICAgfSBlbHNlIGlmICh0b2tlbiA9PSBiZWZvcmVTdGFydCkgewogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogUHJvdmlkZSBhIG1vcmUgc3BlY2lmaWMgZXJyb3IgbWVzc2FnZSBmb3IgZXh0cmEgJzsnLgogICAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRDbGFzc01lbWJlcik7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUludmFsaWRNZW1iZXIobmV4dCk7CiAgICAgIGlmICghaWRlbnRpY2FsKHZhbHVlLCAnfScpKSB7CiAgICAgICAgLy8gRW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MuCiAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0b2tlbiA9IHBhcnNlRmllbGRzKAogICAgICAgICAgYmVmb3JlU3RhcnQsCiAgICAgICAgICBleHRlcm5hbFRva2VuLAogICAgICAgICAgc3RhdGljVG9rZW4sCiAgICAgICAgICBjb3ZhcmlhbnRUb2tlbiwKICAgICAgICAgIGxhdGVUb2tlbiwKICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwKICAgICAgICAgIGJlZm9yZVR5cGUsCiAgICAgICAgICB0eXBlSW5mbywKICAgICAgICAgIHRva2VuLm5leHQsCiAgICAgICAgICBmYWxzZSk7CiAgICB9CgogICAgbGlzdGVuZXIuZW5kTWVtYmVyKCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUmVwb3J0IHRoYXQgdGhlIG5lc3RpbmcgZGVwdGggb2YgdGhlIGNvZGUgYmVpbmcgcGFyc2VkIGlzIHRvbyBsYXJnZSBmb3IKICAvLy8gdGhlIHBhcnNlciB0byBzYWZlbHkgaGFuZGxlLiBSZXR1cm4gdGhlIG5leHQgYH1gIG9yIEVPRi4KICBUb2tlbiByZWNvdmVyRnJvbVN0YWNrT3ZlcmZsb3coVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlU3RhY2tPdmVyZmxvdyk7CiAgICBuZXh0ID0gcmV3cml0ZXIuaW5zZXJ0U3ludGhldGljVG9rZW4odG9rZW4sIFRva2VuVHlwZS5TRU1JQ09MT04pOwogICAgbGlzdGVuZXIuaGFuZGxlRW1wdHlTdGF0ZW1lbnQobmV4dCk7CgogICAgd2hpbGUgKG5vdEVvZk9yVmFsdWUoJ30nLCBuZXh0KSkgewogICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgdm9pZCByZXBvcnRSZWNvdmVyYWJsZUVycm9yKFRva2VuIHRva2VuLCBNZXNzYWdlIG1lc3NhZ2UpIHsKICAgIC8vIEZpbmQgYSBub24tc3ludGhldGljIHRva2VuIG9uIHdoaWNoIHRvIHJlcG9ydCB0aGUgZXJyb3IuCiAgICB0b2tlbiA9IGZpbmROb25aZXJvTGVuZ3RoVG9rZW4odG9rZW4pOwogICAgbGlzdGVuZXIuaGFuZGxlUmVjb3ZlcmFibGVFcnJvcihtZXNzYWdlLCB0b2tlbiwgdG9rZW4pOwogIH0KCiAgdm9pZCByZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICBUb2tlbiB0b2tlbiwgVGVtcGxhdGU8X01lc3NhZ2VXaXRoQXJndW1lbnQ8VG9rZW4+PiB0ZW1wbGF0ZSkgewogICAgLy8gRmluZCBhIG5vbi1zeW50aGV0aWMgdG9rZW4gb24gd2hpY2ggdG8gcmVwb3J0IHRoZSBlcnJvci4KICAgIHRva2VuID0gZmluZE5vblplcm9MZW5ndGhUb2tlbih0b2tlbik7CiAgICBsaXN0ZW5lci5oYW5kbGVSZWNvdmVyYWJsZUVycm9yKAogICAgICAgIHRlbXBsYXRlLndpdGhBcmd1bWVudHModG9rZW4pLCB0b2tlbiwgdG9rZW4pOwogIH0KCiAgVG9rZW4gcmVwb3J0QWxsRXJyb3JUb2tlbnMoVG9rZW4gdG9rZW4pIHsKICAgIHdoaWxlICh0b2tlbiBpcyBFcnJvclRva2VuKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZUVycm9yVG9rZW4odG9rZW4pOwogICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiBza2lwRXJyb3JUb2tlbnMoVG9rZW4gdG9rZW4pIHsKICAgIHdoaWxlICh0b2tlbiBpcyBFcnJvclRva2VuKSB7CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb24oVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICBuZXh0LAogICAgICAgIG9wdGlvbmFsKCc7JywgbmV4dCkKICAgICAgICAgICAgPyBmYXN0YS50ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlbgogICAgICAgICAgICA6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWREZWNsYXJhdGlvbik7CiAgICBpZiAob3B0aW9uYWwoJ3snLCBuZXh0KSkgewogICAgICBuZXh0ID0gcGFyc2VJbnZhbGlkQmxvY2sodG9rZW4pOwogICAgfQogICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb24obmV4dCk7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIFRva2VuIHJlcG9ydEFuZFNraXBDbGFzc0luQ2xhc3MoVG9rZW4gdG9rZW4pIHsKICAgIGFzc2VydChvcHRpb25hbCgnY2xhc3MnLCB0b2tlbikpOwogICAgcmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgZmFzdGEubWVzc2FnZUNsYXNzSW5DbGFzcyk7CiAgICBsaXN0ZW5lci5oYW5kbGVJbnZhbGlkTWVtYmVyKHRva2VuKTsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgLy8gSWYgdGhlIGRlY2xhcmF0aW9uIGFwcGVhcnMgdG8gYmUgYSB2YWxpZCBjbGFzcyBkZWNsYXJhdGlvbgogICAgLy8gdGhlbiBza2lwIHRoZSBlbnRpcmUgZGVjbGFyYXRpb24gc28gdGhhdCB3ZSBvbmx5IGdlbmVyYXRlIHRoZSBvbmUKICAgIC8vIGVycm9yIChhYm92ZSkgcmF0aGVyIHRoYW4gYSBwbGV0aG9yYSBvZiB1bmhlbHBmdWwgZXJyb3JzLgogICAgaWYgKG5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgIC8vIHNraXAgY2xhc3MgbmFtZQogICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAvLyBUT0RPKGRhbnJ1YmVsKTogY29uc2lkZXIgcGFyc2luZyAoc2tpcHBpbmcpIHRoZSBjbGFzcyBoZWFkZXIKICAgICAgLy8gd2l0aCBhIHJlY292ZXJ5IGxpc3RlbmVyIHNvIHRoYXQgbm8gZXZlbnRzIGFyZSBnZW5lcmF0ZWQKICAgICAgaWYgKG9wdGlvbmFsKCd7JywgbmV4dCkgJiYgbmV4dC5lbmRHcm91cCAhPSBudWxsKSB7CiAgICAgICAgLy8gc2tpcCBjbGFzcyBib2R5CiAgICAgICAgdG9rZW4gPSBuZXh0LmVuZEdyb3VwOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiByZXBvcnRBbmRTa2lwRW51bUluQ2xhc3MoVG9rZW4gdG9rZW4pIHsKICAgIGFzc2VydChvcHRpb25hbCgnZW51bScsIHRva2VuKSk7CiAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBmYXN0YS5tZXNzYWdlRW51bUluQ2xhc3MpOwogICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZE1lbWJlcih0b2tlbik7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIC8vIElmIHRoZSBkZWNsYXJhdGlvbiBhcHBlYXJzIHRvIGJlIGEgdmFsaWQgZW51bSBkZWNsYXJhdGlvbgogICAgLy8gdGhlbiBza2lwIHRoZSBlbnRpcmUgZGVjbGFyYXRpb24gc28gdGhhdCB3ZSBvbmx5IGdlbmVyYXRlIHRoZSBvbmUKICAgIC8vIGVycm9yIChhYm92ZSkgcmF0aGVyIHRoYW4gYSBwbGV0aG9yYSBvZiB1bmhlbHBmdWwgZXJyb3JzLgogICAgaWYgKG5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgIC8vIHNraXAgZW51bSBuYW1lCiAgICAgIHRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgneycsIG5leHQpICYmIG5leHQuZW5kR3JvdXAgIT0gbnVsbCkgewogICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciByZXBsYWNpbmcgdGhpcyBgc2tpcCBlbnVtYCBmdW5jdGlvbmFsaXR5CiAgICAgICAgLy8gd2l0aCBzb21ldGhpbmcgdGhhdCBjYW4gcGFyc2UgYW5kIHJlc29sdmUgdGhlIGRlY2xhcmF0aW9uCiAgICAgICAgLy8gZXZlbiB0aG91Z2ggaXQgaXMgaW4gYSBjbGFzcyBjb250ZXh0CiAgICAgICAgdG9rZW4gPSBuZXh0LmVuZEdyb3VwOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBUb2tlbiByZXBvcnRBbmRTa2lwVHlwZWRlZkluQ2xhc3MoVG9rZW4gdG9rZW4pIHsKICAgIGFzc2VydChvcHRpb25hbCgndHlwZWRlZicsIHRva2VuKSk7CiAgICByZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBmYXN0YS5tZXNzYWdlVHlwZWRlZkluQ2xhc3MpOwogICAgbGlzdGVuZXIuaGFuZGxlSW52YWxpZE1lbWJlcih0b2tlbik7CiAgICAvLyBUT0RPKGJyaWFud2lsa2Vyc29uKTogSWYgdGhlIGRlY2xhcmF0aW9uIGFwcGVhcnMgdG8gYmUgYSB2YWxpZCB0eXBlZGVmCiAgICAvLyB0aGVuIHNraXAgdGhlIGVudGlyZSBkZWNsYXJhdGlvbiBzbyB0aGF0IHdlIGdlbmVyYXRlIGEgc2luZ2xlIGVycm9yCiAgICAvLyAoYWJvdmUpIHJhdGhlciB0aGFuIG1hbnkgdW5oZWxwZnVsIGVycm9ycy4KICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBDcmVhdGUgYSBzaG9ydCB0b2tlbiBjaGFpbiBmcm9tIHRoZSBbYmVnaW5Ub2tlbl0gYW5kIFtlbmRUb2tlbl0gYW5kIHJldHVybgogIC8vLyB0aGUgW2JlZ2luVG9rZW5dLgogIFRva2VuIGxpbmsoQmVnaW5Ub2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgYmVnaW5Ub2tlbi5zZXROZXh0KGVuZFRva2VuKTsKICAgIGJlZ2luVG9rZW4uZW5kR3JvdXAgPSBlbmRUb2tlbjsKICAgIHJldHVybiBiZWdpblRva2VuOwogIH0KCiAgLy8vIENyZWF0ZSBhbmQgcmV0dXJuIGEgdG9rZW4gd2hvc2UgbmV4dCB0b2tlbiBpcyB0aGUgZ2l2ZW4gW3Rva2VuXS4KICBUb2tlbiBzeW50aGV0aWNQcmV2aW91c1Rva2VuKFRva2VuIHRva2VuKSB7CiAgICAvLyBSZXR1cm4gdGhlIHByZXZpb3VzIHRva2VuIGlmIHRoZXJlIGlzIG9uZSBzbyB0aGF0IGFueSB0b2tlbiBpbnNlcnRlZAogICAgLy8gYmVmb3JlIGB0b2tlbmAgd2lsbCBiZSBwcm9wZXJseSBpbnNlcnRlZCBpbnRvIHRoZSB0b2tlbiBzdHJlYW0uCiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogcmVtb3ZlIHRoaXMgb25jZSBhbGwgbWV0aG9kcyBoYXZlIGJlZW4gY29udmVydGVkIHRvCiAgICAvLyB1c2UgYW5kIHJldHVybiB0aGUgbGFzdCB0b2tlbiBjb25zdW1lZCBhbmQgdGhlIGBwcmV2aW91c2AgZmllbGQKICAgIC8vIGhhcyBiZWVuIHJlbW92ZWQuCiAgICBpZiAodG9rZW4ucHJldmlvdXMgIT0gbnVsbCkgewogICAgICByZXR1cm4gdG9rZW4ucHJldmlvdXM7CiAgICB9CiAgICBUb2tlbiBiZWZvcmUgPSBuZXcgVG9rZW4uZW9mKC0xKTsKICAgIGJlZm9yZS5uZXh0ID0gdG9rZW47CiAgICByZXR1cm4gYmVmb3JlOwogIH0KCiAgLy8vIFJldHVybiB0aGUgZmlyc3QgZGFydGRvYyBjb21tZW50IHRva2VuIHByZWNlZGluZyB0aGUgZ2l2ZW4gdG9rZW4KICAvLy8gb3IgYG51bGxgIGlmIG5vIGRhcnRkb2MgdG9rZW4gaXMgZm91bmQuCiAgVG9rZW4gZmluZERhcnREb2MoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIGNvbW1lbnRzID0gdG9rZW4ucHJlY2VkaW5nQ29tbWVudHM7CiAgICBUb2tlbiBkYXJ0ZG9jID0gbnVsbDsKICAgIGJvb2wgaXNNdWx0aWxpbmUgPSBmYWxzZTsKICAgIHdoaWxlIChjb21tZW50cyAhPSBudWxsKSB7CiAgICAgIFN0cmluZyBsZXhlbWUgPSBjb21tZW50cy5sZXhlbWU7CiAgICAgIGlmIChsZXhlbWUuc3RhcnRzV2l0aCgnLy8vJykpIHsKICAgICAgICBpZiAoIWlzTXVsdGlsaW5lKSB7CiAgICAgICAgICBkYXJ0ZG9jID0gY29tbWVudHM7CiAgICAgICAgICBpc011bHRpbGluZSA9IHRydWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGxleGVtZS5zdGFydHNXaXRoKCcvKionKSkgewogICAgICAgIGRhcnRkb2MgPSBjb21tZW50czsKICAgICAgICBpc011bHRpbGluZSA9IGZhbHNlOwogICAgICB9CiAgICAgIGNvbW1lbnRzID0gY29tbWVudHMubmV4dDsKICAgIH0KICAgIHJldHVybiBkYXJ0ZG9jOwogIH0KCiAgLy8vIFBhcnNlIHRoZSBjb21tZW50IHJlZmVyZW5jZXMgaW4gYSBzZXF1ZW5jZSBvZiBjb21tZW50IHRva2VucwogIC8vLyB3aGVyZSBbZGFydGRvY10gKG5vdCBudWxsKSBpcyB0aGUgZmlyc3QgdG9rZW4gaW4gdGhlIHNlcXVlbmNlLgogIC8vLyBSZXR1cm4gdGhlIG51bWJlciBvZiBjb21tZW50IHJlZmVyZW5jZXMgcGFyc2VkLgogIGludCBwYXJzZUNvbW1lbnRSZWZlcmVuY2VzKFRva2VuIGRhcnRkb2MpIHsKICAgIHJldHVybiBkYXJ0ZG9jLmxleGVtZS5zdGFydHNXaXRoKCcvLy8nKQogICAgICAgID8gcGFyc2VSZWZlcmVuY2VzSW5TaW5nbGVMaW5lQ29tbWVudHMoZGFydGRvYykKICAgICAgICA6IHBhcnNlUmVmZXJlbmNlc0luTXVsdGlMaW5lQ29tbWVudChkYXJ0ZG9jKTsKICB9CgogIC8vLyBQYXJzZSB0aGUgY29tbWVudCByZWZlcmVuY2VzIGluIGEgbXVsdGktbGluZSBjb21tZW50IHRva2VuLgogIC8vLyBSZXR1cm4gdGhlIG51bWJlciBvZiBjb21tZW50IHJlZmVyZW5jZXMgcGFyc2VkLgogIGludCBwYXJzZVJlZmVyZW5jZXNJbk11bHRpTGluZUNvbW1lbnQoVG9rZW4gbXVsdGlMaW5lRG9jKSB7CiAgICBTdHJpbmcgY29tbWVudCA9IG11bHRpTGluZURvYy5sZXhlbWU7CiAgICBhc3NlcnQoY29tbWVudC5zdGFydHNXaXRoKCcvKionKSk7CiAgICBpbnQgY291bnQgPSAwOwogICAgaW50IGxlbmd0aCA9IGNvbW1lbnQubGVuZ3RoOwogICAgaW50IHN0YXJ0ID0gMzsKICAgIGJvb2wgaW5Db2RlQmxvY2sgPSBmYWxzZTsKICAgIGludCBjb2RlQmxvY2sgPSBjb21tZW50LmluZGV4T2YoJ2BgYCcsIDMpOwogICAgaWYgKGNvZGVCbG9jayA9PSAtMSkgewogICAgICBjb2RlQmxvY2sgPSBsZW5ndGg7CiAgICB9CiAgICB3aGlsZSAoc3RhcnQgPCBsZW5ndGgpIHsKICAgICAgaWYgKGlzV2hpdGVzcGFjZShjb21tZW50LmNvZGVVbml0QXQoc3RhcnQpKSkgewogICAgICAgICsrc3RhcnQ7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaW50IGVuZCA9IGNvbW1lbnQuaW5kZXhPZignXG4nLCBzdGFydCk7CiAgICAgIGlmIChlbmQgPT0gLTEpIHsKICAgICAgICBlbmQgPSBsZW5ndGg7CiAgICAgIH0KICAgICAgaWYgKGNvZGVCbG9jayA8IGVuZCkgewogICAgICAgIGluQ29kZUJsb2NrID0gIWluQ29kZUJsb2NrOwogICAgICAgIGNvZGVCbG9jayA9IGNvbW1lbnQuaW5kZXhPZignYGBgJywgZW5kKTsKICAgICAgICBpZiAoY29kZUJsb2NrID09IC0xKSB7CiAgICAgICAgICBjb2RlQmxvY2sgPSBsZW5ndGg7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghaW5Db2RlQmxvY2sgJiYgIWNvbW1lbnQuc3RhcnRzV2l0aCgnKiAgICAgJywgc3RhcnQpKSB7CiAgICAgICAgY291bnQgKz0gcGFyc2VDb21tZW50UmVmZXJlbmNlc0luVGV4dChtdWx0aUxpbmVEb2MsIHN0YXJ0LCBlbmQpOwogICAgICB9CiAgICAgIHN0YXJ0ID0gZW5kICsgMTsKICAgIH0KICAgIHJldHVybiBjb3VudDsKICB9CgogIC8vLyBQYXJzZSB0aGUgY29tbWVudCByZWZlcmVuY2VzIGluIGEgc2VxdWVuY2Ugb2Ygc2luZ2xlIGxpbmUgY29tbWVudCB0b2tlbnMKICAvLy8gd2hlcmUgW3Rva2VuXSBpcyB0aGUgZmlyc3QgY29tbWVudCB0b2tlbiBpbiB0aGUgc2VxdWVuY2UuCiAgLy8vIFJldHVybiB0aGUgbnVtYmVyIG9mIGNvbW1lbnQgcmVmZXJlbmNlcyBwYXJzZWQuCiAgaW50IHBhcnNlUmVmZXJlbmNlc0luU2luZ2xlTGluZUNvbW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICBpbnQgY291bnQgPSAwOwogICAgYm9vbCBpbkNvZGVCbG9jayA9IGZhbHNlOwogICAgd2hpbGUgKHRva2VuICE9IG51bGwgJiYgIXRva2VuLmlzRW9mKSB7CiAgICAgIFN0cmluZyBjb21tZW50ID0gdG9rZW4ubGV4ZW1lOwogICAgICBpZiAoY29tbWVudC5zdGFydHNXaXRoKCcvLy8nKSkgewogICAgICAgIGlmIChjb21tZW50LmluZGV4T2YoJ2BgYCcsIDMpICE9IC0xKSB7CiAgICAgICAgICBpbkNvZGVCbG9jayA9ICFpbkNvZGVCbG9jazsKICAgICAgICB9CiAgICAgICAgaWYgKCFpbkNvZGVCbG9jayAmJiAhY29tbWVudC5zdGFydHNXaXRoKCcvLy8gICAgJykpIHsKICAgICAgICAgIGNvdW50ICs9IHBhcnNlQ29tbWVudFJlZmVyZW5jZXNJblRleHQodG9rZW4sIDMsIGNvbW1lbnQubGVuZ3RoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgfQogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgLy8vIFBhcnNlIHRoZSBjb21tZW50IHJlZmVyZW5jZXMgaW4gdGhlIHRleHQgYmV0d2VlbiBbc3RhcnRdIGluY2x1c2l2ZQogIC8vLyBhbmQgW2VuZF0gZXhjbHVzaXZlLiBSZXR1cm4gYSBjb3VudCBpbmRpY2F0aW5nIGhvdyBtYW55IHdlcmUgcGFyc2VkLgogIGludCBwYXJzZUNvbW1lbnRSZWZlcmVuY2VzSW5UZXh0KFRva2VuIGNvbW1lbnRUb2tlbiwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBTdHJpbmcgY29tbWVudCA9IGNvbW1lbnRUb2tlbi5sZXhlbWU7CiAgICBpbnQgY291bnQgPSAwOwogICAgaW50IGluZGV4ID0gc3RhcnQ7CiAgICB3aGlsZSAoaW5kZXggPCBlbmQpIHsKICAgICAgaW50IGNoID0gY29tbWVudC5jb2RlVW5pdEF0KGluZGV4KTsKICAgICAgaWYgKGNoID09IDB4NUIgLyogYFtgICovKSB7CiAgICAgICAgKytpbmRleDsKICAgICAgICBpZiAoaW5kZXggPCBlbmQgJiYgY29tbWVudC5jb2RlVW5pdEF0KGluZGV4KSA9PSAweDNBIC8qIGA6YCAqLykgewogICAgICAgICAgLy8gU2tpcCBvbGQtc3R5bGUgY29kZSBibG9jay4KICAgICAgICAgIGluZGV4ID0gY29tbWVudC5pbmRleE9mKCc6XScsIGluZGV4ICsgMSkgKyAxOwogICAgICAgICAgaWYgKGluZGV4ID09IDAgfHwgaW5kZXggPiBlbmQpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGludCByZWZlcmVuY2VTdGFydCA9IGluZGV4OwogICAgICAgICAgaW5kZXggPSBjb21tZW50LmluZGV4T2YoJ10nLCBpbmRleCk7CiAgICAgICAgICBpZiAoaW5kZXggPT0gLTEgfHwgaW5kZXggPj0gZW5kKSB7CiAgICAgICAgICAgIC8vIFJlY292ZXJ5OiB0ZXJtaW5hdGluZyAnXScgaXMgbm90IHR5cGVkIHlldC4KICAgICAgICAgICAgaW5kZXggPSBmaW5kUmVmZXJlbmNlRW5kKGNvbW1lbnQsIHJlZmVyZW5jZVN0YXJ0LCBlbmQpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNoICE9IDB4MjcgLyogYCdgICovICYmIGNoICE9IDB4MjIgLyogYCJgICovKSB7CiAgICAgICAgICAgIGlmIChpc0xpbmtUZXh0KGNvbW1lbnQsIGluZGV4KSkgewogICAgICAgICAgICAgIC8vIFRPRE8oYnJpYW53aWxrZXJzb24pIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB0aGVyZSdzIGEgbGlicmFyeQogICAgICAgICAgICAgIC8vIFVSSSBpbiB0aGUgbGluayB0ZXh0LgogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZUNvbW1lbnRSZWZlcmVuY2VUZXh0KAogICAgICAgICAgICAgICAgICBjb21tZW50LnN1YnN0cmluZyhyZWZlcmVuY2VTdGFydCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICBjb21tZW50VG9rZW4uY2hhck9mZnNldCArIHJlZmVyZW5jZVN0YXJ0KTsKICAgICAgICAgICAgICArK2NvdW50OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGNoID09IDB4NjAgLyogJ2AnICovKSB7CiAgICAgICAgLy8gU2tpcCBpbmxpbmUgY29kZSBibG9jayBpZiB0aGVyZSBpcyBib3RoIHN0YXJ0aW5nICdgJyBhbmQgZW5kaW5nICdgJwogICAgICAgIGludCBlbmRDb2RlQmxvY2sgPSBjb21tZW50LmluZGV4T2YoJ2AnLCBpbmRleCArIDEpOwogICAgICAgIGlmIChlbmRDb2RlQmxvY2sgIT0gLTEgJiYgZW5kQ29kZUJsb2NrIDwgZW5kKSB7CiAgICAgICAgICBpbmRleCA9IGVuZENvZGVCbG9jazsKICAgICAgICB9CiAgICAgIH0KICAgICAgKytpbmRleDsKICAgIH0KICAgIHJldHVybiBjb3VudDsKICB9CgogIC8vLyBHaXZlbiBhIGNvbW1lbnQgcmVmZXJlbmNlIHdpdGhvdXQgYSBjbG9zaW5nIGBdYCwKICAvLy8gc2VhcmNoIGZvciBhIHBvc3NpYmxlIHBsYWNlIHdoZXJlIGBdYCBzaG91bGQgYmUuCiAgaW50IGZpbmRSZWZlcmVuY2VFbmQoU3RyaW5nIGNvbW1lbnQsIGludCBpbmRleCwgaW50IGVuZCkgewogICAgLy8gRmluZCB0aGUgZW5kIG9mIHRoZSBpZGVudGlmaWVyIGlmIHRoZXJlIGlzIG9uZQogICAgaWYgKGluZGV4ID49IGVuZCB8fCAhaXNMZXR0ZXIoY29tbWVudC5jb2RlVW5pdEF0KGluZGV4KSkpIHsKICAgICAgcmV0dXJuIGluZGV4OwogICAgfQogICAgd2hpbGUgKGluZGV4IDwgZW5kICYmIGlzTGV0dGVyT3JEaWdpdChjb21tZW50LmNvZGVVbml0QXQoaW5kZXgpKSkgewogICAgICArK2luZGV4OwogICAgfQoKICAgIC8vIENoZWNrIGZvciBhIHRyYWlsaW5nIGAuYAogICAgaWYgKGluZGV4ID49IGVuZCB8fCBjb21tZW50LmNvZGVVbml0QXQoaW5kZXgpICE9IDB4MkUgLyogYC5gICovKSB7CiAgICAgIHJldHVybiBpbmRleDsKICAgIH0KICAgICsraW5kZXg7CgogICAgLy8gRmluZCBlbmQgb2YgdGhlIGlkZW50aWZpZXIgYWZ0ZXIgdGhlIGAuYAogICAgaWYgKGluZGV4ID49IGVuZCB8fCAhaXNMZXR0ZXIoY29tbWVudC5jb2RlVW5pdEF0KGluZGV4KSkpIHsKICAgICAgcmV0dXJuIGluZGV4OwogICAgfQogICAgKytpbmRleDsKICAgIHdoaWxlIChpbmRleCA8IGVuZCAmJiBpc0xldHRlck9yRGlnaXQoY29tbWVudC5jb2RlVW5pdEF0KGluZGV4KSkpIHsKICAgICAgKytpbmRleDsKICAgIH0KICAgIHJldHVybiBpbmRleDsKICB9CgogIC8vLyBQYXJzZSB0aGUgdG9rZW5zIGluIGEgc2luZ2xlIGNvbW1lbnQgcmVmZXJlbmNlIGFuZCBnZW5lcmF0ZSBlaXRoZXIgYQogIC8vLyBgaGFuZGxlQ29tbWVudFJlZmVyZW5jZWAgb3IgYGhhbmRsZU5vQ29tbWVudFJlZmVyZW5jZWAgZXZlbnQuCiAgLy8vIFJldHVybiBgdHJ1ZWAgaWYgYSBjb21tZW50IHJlZmVyZW5jZSB3YXMgc3VjY2Vzc2Z1bGx5IHBhcnNlZC4KICBib29sIHBhcnNlT25lQ29tbWVudFJlZmVyZW5jZShUb2tlbiB0b2tlbiwgaW50IHJlZmVyZW5jZU9mZnNldCkgewogICAgVG9rZW4gYmVnaW4gPSB0b2tlbjsKICAgIFRva2VuIG5ld0tleXdvcmQgPSBudWxsOwogICAgaWYgKG9wdGlvbmFsKCduZXcnLCB0b2tlbikpIHsKICAgICAgbmV3S2V5d29yZCA9IHRva2VuOwogICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICB9CiAgICBUb2tlbiBwcmVmaXgsIHBlcmlvZDsKICAgIGlmICh0b2tlbi5pc0lkZW50aWZpZXIgJiYgb3B0aW9uYWwoJy4nLCB0b2tlbi5uZXh0KSkgewogICAgICBwcmVmaXggPSB0b2tlbjsKICAgICAgcGVyaW9kID0gdG9rZW4ubmV4dDsKICAgICAgdG9rZW4gPSBwZXJpb2QubmV4dDsKICAgIH0KICAgIGlmICh0b2tlbi5pc0VvZikgewogICAgICAvLyBSZWNvdmVyeTogSW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgZm9yIGNvZGUgY29tcGxldGlvbgogICAgICB0b2tlbiA9IHJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoCiAgICAgICAgICBwZXJpb2QgPz8gbmV3S2V5d29yZCA/PyBzeW50aGV0aWNQcmV2aW91c1Rva2VuKHRva2VuKSk7CiAgICAgIGlmIChiZWdpbiA9PSB0b2tlbi5uZXh0KSB7CiAgICAgICAgYmVnaW4gPSB0b2tlbjsKICAgICAgfQogICAgfQogICAgVG9rZW4gb3BlcmF0b3JLZXl3b3JkID0gbnVsbDsKICAgIGlmIChvcHRpb25hbCgnb3BlcmF0b3InLCB0b2tlbikpIHsKICAgICAgb3BlcmF0b3JLZXl3b3JkID0gdG9rZW47CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIGlmICh0b2tlbi5pc1VzZXJEZWZpbmFibGVPcGVyYXRvcikgewogICAgICBpZiAodG9rZW4ubmV4dC5pc0VvZikgewogICAgICAgIHBhcnNlT25lQ29tbWVudFJlZmVyZW5jZVJlc3QoCiAgICAgICAgICAgIGJlZ2luLCByZWZlcmVuY2VPZmZzZXQsIG5ld0tleXdvcmQsIHByZWZpeCwgcGVyaW9kLCB0b2tlbik7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHRva2VuID0gb3BlcmF0b3JLZXl3b3JkID8/IHRva2VuOwogICAgICBpZiAodG9rZW4ubmV4dC5pc0VvZikgewogICAgICAgIGlmICh0b2tlbi5pc0lkZW50aWZpZXIpIHsKICAgICAgICAgIHBhcnNlT25lQ29tbWVudFJlZmVyZW5jZVJlc3QoCiAgICAgICAgICAgICAgYmVnaW4sIHJlZmVyZW5jZU9mZnNldCwgbmV3S2V5d29yZCwgcHJlZml4LCBwZXJpb2QsIHRva2VuKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBLZXl3b3JkIGtleXdvcmQgPSB0b2tlbi5rZXl3b3JkOwogICAgICAgIGlmIChuZXdLZXl3b3JkID09IG51bGwgJiYKICAgICAgICAgICAgcHJlZml4ID09IG51bGwgJiYKICAgICAgICAgICAgKGtleXdvcmQgPT0gS2V5d29yZC5USElTIHx8CiAgICAgICAgICAgICAgICBrZXl3b3JkID09IEtleXdvcmQuTlVMTCB8fAogICAgICAgICAgICAgICAga2V5d29yZCA9PSBLZXl3b3JkLlRSVUUgfHwKICAgICAgICAgICAgICAgIGtleXdvcmQgPT0gS2V5d29yZC5GQUxTRSkpIHsKICAgICAgICAgIC8vIFRPRE8oYnJpYW53aWxrZXJzb24pIElmIHdlIHdhbnQgdG8gc3VwcG9ydCB0aGlzIHdlIHdpbGwgbmVlZCB0bwogICAgICAgICAgLy8gZXh0ZW5kIHRoZSBkZWZpbml0aW9uIG9mIENvbW1lbnRSZWZlcmVuY2UgdG8gdGFrZSBhbiBleHByZXNzaW9uCiAgICAgICAgICAvLyByYXRoZXIgdGhhbiBhbiBpZGVudGlmaWVyLiBGb3Igbm93IHdlIGp1c3QgaWdub3JlIGl0IHRvIHJlZHVjZSB0aGUKICAgICAgICAgIC8vIG51bWJlciBvZiBlcnJvcnMgcHJvZHVjZWQsIGJ1dCB0aGF0J3MgcHJvYmFibHkgbm90IGEgdmFsaWQgbG9uZwogICAgICAgICAgLy8gdGVybSBhcHByb2FjaC4KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGxpc3RlbmVyLmhhbmRsZU5vQ29tbWVudFJlZmVyZW5jZSgpOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBwYXJzZU9uZUNvbW1lbnRSZWZlcmVuY2VSZXN0KAogICAgICBUb2tlbiBiZWdpbiwKICAgICAgaW50IHJlZmVyZW5jZU9mZnNldCwKICAgICAgVG9rZW4gbmV3S2V5d29yZCwKICAgICAgVG9rZW4gcHJlZml4LAogICAgICBUb2tlbiBwZXJpb2QsCiAgICAgIFRva2VuIGlkZW50aWZpZXJPck9wZXJhdG9yKSB7CiAgICAvLyBBZGp1c3QgdGhlIHRva2VuIG9mZnNldHMgdG8gbWF0Y2ggdGhlIGVuY2xvc2luZyBjb21tZW50IHRva2VuLgogICAgVG9rZW4gdG9rZW4gPSBiZWdpbjsKICAgIGRvIHsKICAgICAgdG9rZW4ub2Zmc2V0ICs9IHJlZmVyZW5jZU9mZnNldDsKICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgfSB3aGlsZSAoIXRva2VuLmlzRW9mKTsKCiAgICBsaXN0ZW5lci5oYW5kbGVDb21tZW50UmVmZXJlbmNlKAogICAgICAgIG5ld0tleXdvcmQsIHByZWZpeCwgcGVyaW9kLCBpZGVudGlmaWVyT3JPcGVyYXRvcik7CiAgfQoKICAvLy8gR2l2ZW4gdGhhdCB3ZSBoYXZlIGp1c3QgZm91bmQgYnJhY2tldGVkIHRleHQgd2l0aGluIHRoZSBnaXZlbiBbY29tbWVudF0sCiAgLy8vIGxvb2sgdG8gc2VlIHdoZXRoZXIgdGhhdCB0ZXh0IGlzIChhKSBmb2xsb3dlZCBieSBhIHBhcmVudGhlc2l6ZWQgbGluawogIC8vLyBhZGRyZXNzLCAoYikgZm9sbG93ZWQgYnkgYSBjb2xvbiwgb3IgKGMpIGZvbGxvd2VkIGJ5IG9wdGlvbmFsIHdoaXRlc3BhY2UKICAvLy8gYW5kIGFub3RoZXIgc3F1YXJlIGJyYWNrZXQuIFRoZSBbcmlnaHRJbmRleF0gaXMgdGhlIGluZGV4IG9mIHRoZSByaWdodAogIC8vLyBicmFja2V0LiBSZXR1cm4gYHRydWVgIGlmIHRoZSBicmFja2V0ZWQgdGV4dCBpcyBmb2xsb3dlZCBieSBhIGxpbmsKICAvLy8gYWRkcmVzcy4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgdXNlcyB0aGUgc3ludGF4IGRlc2NyaWJlZCBieSB0aGUKICAvLy8gPGEgaHJlZj0iaHR0cDovL2RhcmluZ2ZpcmViYWxsLm5ldC9wcm9qZWN0cy9tYXJrZG93bi9zeW50YXgiPm1hcmtkb3duPC9hPgogIC8vLyBwcm9qZWN0LgogIGJvb2wgaXNMaW5rVGV4dChTdHJpbmcgY29tbWVudCwgaW50IHJpZ2h0SW5kZXgpIHsKICAgIGludCBsZW5ndGggPSBjb21tZW50Lmxl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KEoXCikiHigrKy1NTVBNHAoIBikSBAElExsYFBQkRhkJJxocASU7BAFPTE9NSQ8GM1APNCEgGxQGKCQTBh8ZHRYIJgYXBAIBSTcBLnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvcGFyc2VyLmRhcnQ9c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9wYXJzZXJfZXJyb3IuZGFydINfLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucGFyc2VyLnBhcnNlcl9lcnJvcjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcgc2hvdyBNZXNzYWdlOwoKaW1wb3J0ICcuLi9zY2FubmVyLmRhcnQnIHNob3cgVG9rZW47CgpjbGFzcyBQYXJzZXJFcnJvciB7CiAgLy8vIENoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIGZpbGUgd2hlcmUgdGhpcyBlcnJvciBzdGFydHMuCiAgZmluYWwgaW50IGJlZ2luT2Zmc2V0OwoKICAvLy8gQ2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgZmlsZSB3aGVyZSB0aGlzIGVycm9yIGVuZHMuCiAgZmluYWwgaW50IGVuZE9mZnNldDsKCiAgZmluYWwgTWVzc2FnZSBtZXNzYWdlOwoKICBQYXJzZXJFcnJvcih0aGlzLmJlZ2luT2Zmc2V0LCB0aGlzLmVuZE9mZnNldCwgdGhpcy5tZXNzYWdlKTsKCiAgUGFyc2VyRXJyb3IuZnJvbVRva2VucyhUb2tlbiBiZWdpbiwgVG9rZW4gZW5kLCBNZXNzYWdlIG1lc3NhZ2UpCiAgICAgIDogdGhpcyhiZWdpbi5jaGFyT2Zmc2V0LCBlbmQuY2hhck9mZnNldCArIGVuZC5jaGFyQ291bnQsIG1lc3NhZ2UpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiQCR7YmVnaW5PZmZzZXR9OiAke21lc3NhZ2UubWVzc2FnZX1cbiR7bWVzc2FnZS50aXB9IjsKfQocAE5OPAEjASsBJQEUSxkBSRcBGQE/AUJJAU4CATRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL3BhcnNlcl9lcnJvci5kYXJ0N3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvYXNzZXJ0LmRhcnSCJC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnBhcnNlci5Bc3NlcnQ7CgovLy8gU3ludGFjdGljIGZvcm1zIG9mIGBhc3NlcnRgLgovLy8KLy8vIEFuIGFzc2VydGlvbiBjYW4gbGVnYWxseSBvY2N1ciBhcyBhIHN0YXRlbWVudC4gSG93ZXZlciwgYXNzZXJ0aW9ucyBhcmUgYWxzbwovLy8gZXhwZXJpbWVudGFsbHkgYWxsb3dlZCBpbiBpbml0aWFsaXplcnMuIEZvciBpbXByb3ZlZCBlcnJvciByZWNvdmVyeSwgd2UKLy8vIGFsc28gYXR0ZW1wdCB0byBwYXJzZSBhc3NlcnRzIGFzIGV4cHJlc3Npb25zLgplbnVtIEFzc2VydCB7CiAgRXhwcmVzc2lvbiwKICBJbml0aWFsaXplciwKICBTdGF0ZW1lbnQsCn0KEgBOTjwBHQEhBFBMMg4ODw0CAS5wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2Fzc2VydC5kYXJ0RnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvZm9ybWFsX3BhcmFtZXRlcl9raW5kLmRhcnSCyi8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnBhcnNlci5mb3JtYWxfcGFyYW1ldGVyX2tpbmQ7CgplbnVtIEZvcm1hbFBhcmFtZXRlcktpbmQgewogIG1hbmRhdG9yeSwKICBvcHRpb25hbE5hbWVkLAogIG9wdGlvbmFsUG9zaXRpb25hbCwKfQoKYm9vbCBpc01hbmRhdG9yeUZvcm1hbFBhcmFtZXRlcktpbmQoRm9ybWFsUGFyYW1ldGVyS2luZCB0eXBlKSB7CiAgcmV0dXJuIEZvcm1hbFBhcmFtZXRlcktpbmQubWFuZGF0b3J5ID09IHR5cGU7Cn0KCmJvb2wgaXNPcHRpb25hbE5hbWVkRm9ybWFsUGFyYW1ldGVyS2luZChGb3JtYWxQYXJhbWV0ZXJLaW5kIHR5cGUpIHsKICByZXR1cm4gRm9ybWFsUGFyYW1ldGVyS2luZC5vcHRpb25hbE5hbWVkID09IHR5cGU7Cn0KCmJvb2wgaXNPcHRpb25hbFBvc2l0aW9uYWxGb3JtYWxQYXJhbWV0ZXJLaW5kKEZvcm1hbFBhcmFtZXRlcktpbmQgdHlwZSkgewogIHJldHVybiBGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsUG9zaXRpb25hbCA9PSB0eXBlOwp9ChkATk48ASwBGw0RFgIBQDACAUQ0AgFJOQIBPXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvZm9ybWFsX3BhcmFtZXRlcl9raW5kLmRhcnRDc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9pZGVudGlmaWVyX2NvbnRleHQuZGFydLOOLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuLCBUb2tlblR5cGU7CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnIHNob3cgTWVzc2FnZSwgVGVtcGxhdGUsIHRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyOwoKaW1wb3J0ICcuLi9zY2FubmVyL3Rva2VuX2NvbnN0YW50cy5kYXJ0JyBzaG93IElERU5USUZJRVJfVE9LRU47CgppbXBvcnQgJ2lkZW50aWZpZXJfY29udGV4dF9pbXBsLmRhcnQnOwoKaW1wb3J0ICdwYXJzZXIuZGFydCcgc2hvdyBQYXJzZXI7CgppbXBvcnQgJ3V0aWwuZGFydCcgc2hvdyBpc09uZU9mT3JFb2YsIG9wdGlvbmFsOwoKLy8vIEluZm9ybWF0aW9uIGFib3V0IHRoZSBwYXJzZXIgc3RhdGUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIGxpc3RlbmVyIGF0IHRoZQovLy8gdGltZSBhbiBpZGVudGlmaWVyIGlzIGVuY291bnRlcmVkLiBJdCBpcyBhbHNvIHVzZWQgYnkgdGhlIHBhcnNlciBmb3IgZXJyb3IKLy8vIHJlY292ZXJ5IHdoZW4gYSByZWNvdmVyeSB0ZW1wbGF0ZSBpcyBkZWZpbmVkLgovLy8KLy8vIFRoaXMgY2FuIGJlIHVzZWQgYnkgdGhlIGxpc3RlbmVyIHRvIGRldGVybWluZSB0aGUgY29udGV4dCBpbiB3aGljaCB0aGUKLy8vIGlkZW50aWZpZXIgYXBwZWFyczsgdGhhdCBpbiB0dXJuIGNhbiBoZWxwIHRoZSBsaXN0ZW5lciBkZWNpZGUgaG93IHRvIHJlc29sdmUKLy8vIHRoZSBpZGVudGlmaWVyIChpZiB0aGUgbGlzdGVuZXIgaXMgZG9pbmcgcmVzb2x1dGlvbikuCmNsYXNzIElkZW50aWZpZXJDb250ZXh0IHsKICAvLy8gSWRlbnRpZmllciBpcyBiZWluZyBkZWNsYXJlZCBhcyB0aGUgbmFtZSBvZiBhbiBpbXBvcnQgcHJlZml4IChpLmUuIGBGb29gCiAgLy8vIGluIGBpbXBvcnQgIi4uLiIgYXMgRm9vO2ApCiAgc3RhdGljIGNvbnN0IGltcG9ydFByZWZpeERlY2xhcmF0aW9uID0gY29uc3QgSW1wb3J0UHJlZml4SWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgdGhlIHN0YXJ0IG9mIGEgZG90dGVkIG5hbWUgaW4gYSBjb25kaXRpb25hbCBpbXBvcnQgb3IKICAvLy8gZXhwb3J0LgogIHN0YXRpYyBjb25zdCBkb3R0ZWROYW1lID0gY29uc3QgRG90dGVkTmFtZUlkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHBhcnQgb2YgYSBkb3R0ZWQgbmFtZSBpbiBhIGNvbmRpdGlvbmFsIGltcG9ydCBvciBleHBvcnQsIGJ1dAogIC8vLyBpdCdzIG5vdCB0aGUgZmlyc3QgaWRlbnRpZmllciBvZiB0aGUgZG90dGVkIG5hbWUuCiAgc3RhdGljIGNvbnN0IGRvdHRlZE5hbWVDb250aW51YXRpb24gPQogICAgICBjb25zdCBEb3R0ZWROYW1lSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uKCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIG9uZSBvZiB0aGUgc2hvd24vaGlkZGVuIG5hbWVzIGluIGFuIGltcG9ydC9leHBvcnQKICAvLy8gY29tYmluYXRvci4KICBzdGF0aWMgY29uc3QgY29tYmluYXRvciA9IGNvbnN0IENvbWJpbmF0b3JJZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgc3RhcnQgb2YgYSBuYW1lIGluIGFuIGFubm90YXRpb24gdGhhdCBwcmVjZWRlcyBhCiAgLy8vIGRlY2xhcmF0aW9uIChpLmUuIGl0IGFwcGVhcnMgZGlyZWN0bHkgYWZ0ZXIgYW4gYEBgKS4KICBzdGF0aWMgY29uc3QgbWV0YWRhdGFSZWZlcmVuY2UgPSBjb25zdCBNZXRhZGF0YVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHBhcnQgb2YgYSBuYW1lIGluIGFuIGFubm90YXRpb24gdGhhdCBwcmVjZWRlcyBhIGRlY2xhcmF0aW9uLAogIC8vLyBidXQgaXQncyBub3QgdGhlIGZpcnN0IGlkZW50aWZpZXIgaW4gdGhlIG5hbWUuCiAgc3RhdGljIGNvbnN0IG1ldGFkYXRhQ29udGludWF0aW9uID0KICAgICAgY29uc3QgTWV0YWRhdGFSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgcGFydCBvZiBhIG5hbWUgaW4gYW4gYW5ub3RhdGlvbiB0aGF0IHByZWNlZGVzIGEgZGVjbGFyYXRpb24sCiAgLy8vIGJ1dCBpdCBhcHBlYXJzIGFmdGVyIHR5cGUgcGFyYW1ldGVycyAoZS5nLiBgZm9vYCBpbiBgQFg8WT4uZm9vKClgKS4KICBzdGF0aWMgY29uc3QgbWV0YWRhdGFDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMgPQogICAgICBjb25zdCBNZXRhZGF0YVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cygpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgbmFtZSBiZWluZyBkZWNsYXJlZCBieSBhIHR5cGVkZWYgZGVjbGFyYXRpb24uCiAgc3RhdGljIGNvbnN0IHR5cGVkZWZEZWNsYXJhdGlvbiA9IGNvbnN0IFR5cGVkZWZEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIGEgZmllbGQgaW5pdGlhbGl6ZXIgaW4gYSBmb3JtYWwgcGFyYW1ldGVyIGxpc3QgKGkuZS4gaXQKICAvLy8gYXBwZWFycyBkaXJlY3RseSBhZnRlciBgdGhpcy5gKS4KICBzdGF0aWMgY29uc3QgZmllbGRJbml0aWFsaXplciA9IGNvbnN0IEZpZWxkSW5pdGlhbGl6ZXJJZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyBhIGZvcm1hbCBwYXJhbWV0ZXIgYmVpbmcgZGVjbGFyZWQgYXMgcGFydCBvZiBhIGZ1bmN0aW9uLAogIC8vLyBtZXRob2QsIG9yIHR5cGVkZWYgZGVjbGFyYXRpb24uCiAgc3RhdGljIGNvbnN0IGZvcm1hbFBhcmFtZXRlckRlY2xhcmF0aW9uID0KICAgICAgY29uc3QgRm9ybWFsUGFyYW1ldGVyRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyBhIGZvcm1hbCBwYXJhbWV0ZXIgYmVpbmcgZGVjbGFyZWQgYXMgcGFydCBvZiBhIGNhdGNoIGJsb2NrCiAgLy8vIGluIGEgdHJ5L2NhdGNoL2ZpbmFsbHkgc3RhdGVtZW50LgogIHN0YXRpYyBjb25zdCBjYXRjaFBhcmFtZXRlciA9IGNvbnN0IENhdGNoUGFyYW1ldGVySWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgdGhlIHN0YXJ0IG9mIGEgbGlicmFyeSBuYW1lIChlLmcuIGBmb29gIGluIHRoZSBkaXJlY3RpdmUKICAvLy8gJ2xpYnJhcnkgZm9vO2ApLgogIHN0YXRpYyBjb25zdCBsaWJyYXJ5TmFtZSA9IGNvbnN0IExpYnJhcnlJZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyBwYXJ0IG9mIGEgbGlicmFyeSBuYW1lLCBidXQgaXQncyBub3QgdGhlIGZpcnN0IGlkZW50aWZpZXIgaW4KICAvLy8gdGhlIG5hbWUuCiAgc3RhdGljIGNvbnN0IGxpYnJhcnlOYW1lQ29udGludWF0aW9uID0KICAgICAgY29uc3QgTGlicmFyeUlkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgc3RhcnQgb2YgYSBsaWJyYXJ5IG5hbWUgcmVmZXJlbmNlZCBieSBhIGBwYXJ0IG9mYAogIC8vLyBkaXJlY3RpdmUgKGUuZy4gYGZvb2AgaW4gdGhlIGRpcmVjdGl2ZSBgcGFydCBvZiBmb287YCkuCiAgc3RhdGljIGNvbnN0IHBhcnROYW1lID0gY29uc3QgTGlicmFyeUlkZW50aWZpZXJDb250ZXh0LnBhcnROYW1lKCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHBhcnQgb2YgYSBsaWJyYXJ5IG5hbWUgcmVmZXJlbmNlZCBieSBhIGBwYXJ0IG9mYCBkaXJlY3RpdmUsCiAgLy8vIGJ1dCBpdCdzIG5vdCB0aGUgZmlyc3QgaWRlbnRpZmllciBpbiB0aGUgbmFtZS4KICBzdGF0aWMgY29uc3QgcGFydE5hbWVDb250aW51YXRpb24gPQogICAgICBjb25zdCBMaWJyYXJ5SWRlbnRpZmllckNvbnRleHQucGFydE5hbWVDb250aW51YXRpb24oKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgdGhlIHR5cGUgbmFtZSBiZWluZyBkZWNsYXJlZCBieSBhbiBlbnVtIGRlY2xhcmF0aW9uLgogIHN0YXRpYyBjb25zdCBlbnVtRGVjbGFyYXRpb24gPSBjb25zdCBFbnVtRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyBhbiBlbnVtZXJhdGVkIHZhbHVlIG5hbWUgYmVpbmcgZGVjbGFyZWQgYnkgYW4gZW51bQogIC8vLyBkZWNsYXJhdGlvbi4KICBzdGF0aWMgY29uc3QgZW51bVZhbHVlRGVjbGFyYXRpb24gPQogICAgICBjb25zdCBFbnVtVmFsdWVEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBuYW1lIGJlaW5nIGRlY2xhcmVkIGJ5IGEgY2xhc3MgZGVjbGFyYXRpb24sIGEgbWl4aW4KICAvLy8gZGVjbGFyYXRpb24sIG9yIGEgbmFtZWQgbWl4aW4gYXBwbGljYXRpb24sIGZvciBleGFtcGxlLAogIC8vLyBgRm9vYCBpbiBgY2xhc3MgRm9vID0gWCB3aXRoIFk7YC4KICBzdGF0aWMgY29uc3QgY2xhc3NPck1peGluT3JFeHRlbnNpb25EZWNsYXJhdGlvbiA9CiAgICAgIGNvbnN0IENsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uSWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgdGhlIG5hbWUgb2YgYSB0eXBlIHZhcmlhYmxlIGJlaW5nIGRlY2xhcmVkIChlLmcuIGBGb29gIGluCiAgLy8vIGBjbGFzcyBDPEZvbyBleHRlbmRzIG51bT4ge31gKS4KICBzdGF0aWMgY29uc3QgdHlwZVZhcmlhYmxlRGVjbGFyYXRpb24gPQogICAgICBjb25zdCBUeXBlVmFyaWFibGVEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBzdGFydCBvZiBhIHJlZmVyZW5jZSB0byBhIHR5cGUgdGhhdCBzdGFydHMgd2l0aCBwcmVmaXguCiAgc3RhdGljIGNvbnN0IHByZWZpeGVkVHlwZVJlZmVyZW5jZSA9CiAgICAgIGNvbnN0IFR5cGVSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dC5wcmVmaXhlZCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgc3RhcnQgb2YgYSByZWZlcmVuY2UgdG8gYSB0eXBlIGRlY2xhcmVkIGVsc2V3aGVyZS4KICBzdGF0aWMgY29uc3QgdHlwZVJlZmVyZW5jZSA9IGNvbnN0IFR5cGVSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyBwYXJ0IG9mIGEgcmVmZXJlbmNlIHRvIGEgdHlwZSBkZWNsYXJlZCBlbHNld2hlcmUsIGJ1dCBpdCdzCiAgLy8vIG5vdCB0aGUgZmlyc3QgaWRlbnRpZmllciBvZiB0aGUgcmVmZXJlbmNlLgogIHN0YXRpYyBjb25zdCB0eXBlUmVmZXJlbmNlQ29udGludWF0aW9uID0KICAgICAgY29uc3QgVHlwZVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpOwoKICAvLy8gSWRlbnRpZmllciBpcyBhIG5hbWUgYmVpbmcgZGVjbGFyZWQgYnkgYSB0b3AgbGV2ZWwgdmFyaWFibGUgZGVjbGFyYXRpb24uCiAgc3RhdGljIGNvbnN0IHRvcExldmVsVmFyaWFibGVEZWNsYXJhdGlvbiA9CiAgICAgIGNvbnN0IFRvcExldmVsRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgKICAgICAgICAgICd0b3BMZXZlbFZhcmlhYmxlRGVjbGFyYXRpb24nLCBjb25zdCBbJzsnLCAnPScsICcsJ10pOwoKICAvLy8gSWRlbnRpZmllciBpcyBhIG5hbWUgYmVpbmcgZGVjbGFyZWQgYnkgYSBmaWVsZCBkZWNsYXJhdGlvbi4KICBzdGF0aWMgY29uc3QgZmllbGREZWNsYXJhdGlvbiA9IGNvbnN0IEZpZWxkRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgbmFtZSBiZWluZyBkZWNsYXJlZCBieSBhIHRvcCBsZXZlbCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KICBzdGF0aWMgY29uc3QgdG9wTGV2ZWxGdW5jdGlvbkRlY2xhcmF0aW9uID0KICAgICAgY29uc3QgVG9wTGV2ZWxEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KAogICAgICAgICAgJ3RvcExldmVsRnVuY3Rpb25EZWNsYXJhdGlvbicsIGNvbnN0IFsnPCcsICcoJywgJ3snLCAnPT4nXSk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBzdGFydCBvZiB0aGUgbmFtZSBiZWluZyBkZWNsYXJlZCBieSBhIG1ldGhvZAogIC8vLyBkZWNsYXJhdGlvbi4KICBzdGF0aWMgY29uc3QgbWV0aG9kRGVjbGFyYXRpb24gPSBjb25zdCBNZXRob2REZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHBhcnQgb2YgdGhlIG5hbWUgYmVpbmcgZGVjbGFyZWQgYnkgYSBtZXRob2QgZGVjbGFyYXRpb24sCiAgLy8vIGJ1dCBpdCdzIG5vdCB0aGUgZmlyc3QgaWRlbnRpZmllciBvZiB0aGUgbmFtZS4KICAvLy8KICAvLy8gSW4gdmFsaWQgRGFydCwgdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgdGhlIGlkZW50aWZpZXIgaXMgdGhlIG5hbWUgb2YgYQogIC8vLyBuYW1lZCBjb25zdHJ1Y3RvciB3aGljaCBpcyBiZWluZyBkZWNsYXJlZCwgZS5nLiBgZm9vYCBpbgogIC8vLyBgY2xhc3MgQyB7IEMuZm9vKCk7IH1gLgogIHN0YXRpYyBjb25zdCBtZXRob2REZWNsYXJhdGlvbkNvbnRpbnVhdGlvbiA9CiAgICAgIGNvbnN0IE1ldGhvZERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uKCk7CgogIC8vLyBJZGVudGlmaWVyIGFwcGVhcnMgYWZ0ZXIgdGhlIHdvcmQgYG9wZXJhdG9yYCBpbiBhIG1ldGhvZCBkZWNsYXJhdGlvbi4KICAvLy8KICAvLy8gVE9ETyhwYXVsYmVycnksYWhlKTogRG9lcyB0aGlzIGV2ZXIgb2NjdXIgaW4gdmFsaWQgRGFydCwgb3IgZG9lcyBpdCBvbmx5CiAgLy8vIG9jY3VyIGFzIHBhcnQgb2YgZXJyb3IgcmVjb3Zlcnk/ICBJZiBpdCdzIG9ubHkgYXMgcGFydCBvZiBlcnJvciByZWNvdmVyeSwKICAvLy8gcGVyaGFwcyB3ZSBzaG91bGQganVzdCByZS11c2UgbWV0aG9kRGVjbGFyYXRpb24uCiAgc3RhdGljIGNvbnN0IG9wZXJhdG9yTmFtZSA9CiAgICAgIGNvbnN0IE1ldGhvZERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uKCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBzdGFydCBvZiB0aGUgbmFtZSBiZWluZyBkZWNsYXJlZCBieSBhIGxvY2FsIGZ1bmN0aW9uCiAgLy8vIGRlY2xhcmF0aW9uLgogIHN0YXRpYyBjb25zdCBsb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb24gPQogICAgICBjb25zdCBMb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyBwYXJ0IG9mIHRoZSBuYW1lIGJlaW5nIGRlY2xhcmVkIGJ5IGEgbG9jYWwgZnVuY3Rpb24KICAvLy8gZGVjbGFyYXRpb24sIGJ1dCBpdCdzIG5vdCB0aGUgZmlyc3QgaWRlbnRpZmllciBvZiB0aGUgbmFtZS4KICAvLy8KICAvLy8gVE9ETyhwYXVsYmVycnksYWhlKTogRG9lcyB0aGlzIGV2ZXIgb2NjdXIgaW4gdmFsaWQgRGFydCwgb3IgZG9lcyBpdCBvbmx5CiAgLy8vIG9jY3VyIGFzIHBhcnQgb2YgZXJyb3IgcmVjb3Zlcnk/CiAgc3RhdGljIGNvbnN0IGxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbkNvbnRpbnVhdGlvbiA9CiAgICAgIGNvbnN0IExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgc3RhcnQgb2YgYSByZWZlcmVuY2UgdG8gYSBjb25zdHJ1Y3RvciBkZWNsYXJlZAogIC8vLyBlbHNld2hlcmUuCiAgc3RhdGljIGNvbnN0IGNvbnN0cnVjdG9yUmVmZXJlbmNlID0KICAgICAgY29uc3QgQ29uc3RydWN0b3JSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyBwYXJ0IG9mIGEgcmVmZXJlbmNlIHRvIGEgY29uc3RydWN0b3IgZGVjbGFyZWQgZWxzZXdoZXJlLCBidXQKICAvLy8gaXQncyBub3QgdGhlIGZpcnN0IGlkZW50aWZpZXIgb2YgdGhlIHJlZmVyZW5jZS4KICBzdGF0aWMgY29uc3QgY29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb24gPQogICAgICBjb25zdCBDb25zdHJ1Y3RvclJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpOwoKICAvLy8gSWRlbnRpZmllciBpcyBwYXJ0IG9mIGEgcmVmZXJlbmNlIHRvIGEgY29uc3RydWN0b3IgZGVjbGFyZWQgZWxzZXdoZXJlLCBidXQKICAvLy8gaXQgYXBwZWFycyBhZnRlciB0eXBlIHBhcmFtZXRlcnMgKGUuZy4gYGZvb2AgaW4gYFg8WT4uZm9vYCkuCiAgc3RhdGljIGNvbnN0IGNvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzID0KICAgICAgY29uc3QgQ29uc3RydWN0b3JSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dAogICAgICAgICAgLmNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cygpOwoKICAvLy8gSWRlbnRpZmllciBpcyB0aGUgZGVjbGFyYXRpb24gb2YgYSBsYWJlbCAoaS5lLiBpdCBpcyBmb2xsb3dlZCBieSBgOmAgYW5kCiAgLy8vIHRoZW4gYSBzdGF0ZW1lbnQpLgogIHN0YXRpYyBjb25zdCBsYWJlbERlY2xhcmF0aW9uID0gY29uc3QgTGFiZWxEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHRoZSBzdGFydCBvZiBhIHJlZmVyZW5jZSBvY2N1cnJpbmcgaW4gYSBsaXRlcmFsIHN5bWJvbCAoZS5nLgogIC8vLyBgZm9vYCBpbiBgI2Zvb2ApLgogIHN0YXRpYyBjb25zdCBsaXRlcmFsU3ltYm9sID0gY29uc3QgTGl0ZXJhbFN5bWJvbElkZW50aWZpZXJDb250ZXh0KCk7CgogIC8vLyBJZGVudGlmaWVyIGlzIHBhcnQgb2YgYSByZWZlcmVuY2Ugb2NjdXJyaW5nIGluIGEgbGl0ZXJhbCBzeW1ib2wsIGJ1dCBpdCdzCiAgLy8vIG5vdCB0aGUgZmlyc3QgaWRlbnRpZmllciBvZiB0aGUgcmVmZXJlbmNlIChlLmcuIGBmb29gIGluIGAjcHJlZml4LmZvb2ApLgogIHN0YXRpYyBjb25zdCBsaXRlcmFsU3ltYm9sQ29udGludWF0aW9uID0KICAgICAgY29uc3QgTGl0ZXJhbFN5bWJvbElkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpOwoKICAvLy8gSWRlbnRpZmllciBhcHBlYXJzIGluIGFuIGV4cHJlc3Npb24sIGFuZCBpdCBkb2VzIG5vdCBpbW1lZGlhdGVseSBmb2xsb3cgYQogIC8vLyBgLmAuCiAgc3RhdGljIGNvbnN0IGV4cHJlc3Npb24gPSBjb25zdCBFeHByZXNzaW9uSWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgYXBwZWFycyBpbiBhbiBleHByZXNzaW9uLCBhbmQgaXQgaW1tZWRpYXRlbHkgZm9sbG93cyBhIGAuYC4KICBzdGF0aWMgY29uc3QgZXhwcmVzc2lvbkNvbnRpbnVhdGlvbiA9CiAgICAgIGNvbnN0IEV4cHJlc3Npb25JZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgYSByZWZlcmVuY2UgdG8gYSBuYW1lZCBhcmd1bWVudCBvZiBhIGZ1bmN0aW9uIG9yIG1ldGhvZAogIC8vLyBpbnZvY2F0aW9uIChlLmcuIGBmb29gIGluIGBmKGZvbzogMCk7YC4KICBzdGF0aWMgY29uc3QgbmFtZWRBcmd1bWVudFJlZmVyZW5jZSA9CiAgICAgIGNvbnN0IE5hbWVkQXJndW1lbnRSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCgpOwoKICAvLy8gSWRlbnRpZmllciBpcyBhIG5hbWUgYmVpbmcgZGVjbGFyZWQgYnkgYSBsb2NhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbi4KICBzdGF0aWMgY29uc3QgbG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uID0KICAgICAgY29uc3QgTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKTsKCiAgLy8vIElkZW50aWZpZXIgaXMgYSByZWZlcmVuY2UgdG8gYSBsYWJlbCAoZS5nLiBgZm9vYCBpbiBgYnJlYWsgZm9vO2ApLgogIC8vLyBMYWJlbHMgaGF2ZSB0aGVpciBvd24gc2NvcGUuCiAgc3RhdGljIGNvbnN0IGxhYmVsUmVmZXJlbmNlID0gY29uc3QgTGFiZWxSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCgpOwoKICBmaW5hbCBTdHJpbmcgX25hbWU7CgogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgaWRlbnRpZmllciByZXByZXNlbnRzIGEgbmFtZSB3aGljaCBpcyBiZWluZwogIC8vLyBkZWNsYXJlZC4KICBmaW5hbCBib29sIGluRGVjbGFyYXRpb247CgogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgaWRlbnRpZmllciBpcyB3aXRoaW4gYSBgbGlicmFyeWAgb3IgYHBhcnQgb2ZgCiAgLy8vIGRlY2xhcmF0aW9uLgogIGZpbmFsIGJvb2wgaW5MaWJyYXJ5T3JQYXJ0T2ZEZWNsYXJhdGlvbjsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBpZGVudGlmaWVyIGlzIHdpdGhpbiBhIHN5bWJvbCBsaXRlcmFsLgogIGZpbmFsIGJvb2wgaW5TeW1ib2w7CgogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgaWRlbnRpZmllciBmb2xsb3dzIGEgYC5gLgogIGZpbmFsIGJvb2wgaXNDb250aW51YXRpb247CgogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgaWRlbnRpZmllciBzaG91bGQgYmUgbG9va2VkIHVwIGluIHRoZSBjdXJyZW50IHNjb3BlLgogIGZpbmFsIGJvb2wgaXNTY29wZVJlZmVyZW5jZTsKCiAgLy8vIEluZGljYXRlcyB3aGV0aGVyIGJ1aWx0LWluIGlkZW50aWZpZXJzIGFyZSBhbGxvd2VkIGluIHRoaXMgY29udGV4dC4KICBmaW5hbCBib29sIGlzQnVpbHRJbklkZW50aWZpZXJBbGxvd2VkOwoKICAvLy8gSW5kaWNhdGVkIHdoZXRoZXIgdGhlIGlkZW50aWZpZXIgaXMgYWxsb3dlZCBpbiBhIGNvbnRleHQgd2hlcmUgY29uc3RhbnQKICAvLy8gZXhwcmVzc2lvbnMgYXJlIHJlcXVpcmVkLgogIGZpbmFsIGJvb2wgYWxsb3dlZEluQ29uc3RhbnRFeHByZXNzaW9uOwoKICBmaW5hbCBUZW1wbGF0ZTxfTWVzc2FnZVdpdGhBcmd1bWVudDxUb2tlbj4+IHJlY292ZXJ5VGVtcGxhdGU7CgogIGNvbnN0IElkZW50aWZpZXJDb250ZXh0KHRoaXMuX25hbWUsCiAgICAgIHt0aGlzLmluRGVjbGFyYXRpb246IGZhbHNlLAogICAgICB0aGlzLmluTGlicmFyeU9yUGFydE9mRGVjbGFyYXRpb246IGZhbHNlLAogICAgICB0aGlzLmluU3ltYm9sOiBmYWxzZSwKICAgICAgdGhpcy5pc0NvbnRpbnVhdGlvbjogZmFsc2UsCiAgICAgIHRoaXMuaXNTY29wZVJlZmVyZW5jZTogZmFsc2UsCiAgICAgIHRoaXMuaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWQ6IHRydWUsCiAgICAgIGJvb2wgYWxsb3dlZEluQ29uc3RhbnRFeHByZXNzaW9uLAogICAgICB0aGlzLnJlY292ZXJ5VGVtcGxhdGU6IHRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyfSkKICAgICAgOiB0aGlzLmFsbG93ZWRJbkNvbnN0YW50RXhwcmVzc2lvbiA9CiAgICAgICAgICAgIC8vIEdlbmVyYWxseSwgZGVjbGFyYXRpb25zIGFyZSBsZWdhbCBpbiBjb25zdGFudCBleHByZXNzaW9ucy4gIEEKICAgICAgICAgICAgLy8gY29udGludWF0aW9uIGRvZXNuJ3QgYWZmZWN0IGNvbnN0YW50IGV4cHJlc3Npb25zOiBpZiB3aGF0IGl0J3MKICAgICAgICAgICAgLy8gY29udGludWluZyBpcyBhIHByb2JsZW0sIGl0IGhhcyBhbHJlYWR5IGJlZW4gcmVwb3J0ZWQuCiAgICAgICAgICAgIGFsbG93ZWRJbkNvbnN0YW50RXhwcmVzc2lvbiA/PwogICAgICAgICAgICAgICAgKGluRGVjbGFyYXRpb24gfHwgaXNDb250aW51YXRpb24gfHwgaW5TeW1ib2wpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfbmFtZTsKCiAgLy8vIEVuc3VyZSB0aGF0IHRoZSBuZXh0IHRva2VuIGlzIGFuIGlkZW50aWZpZXIgKG9yIGtleXdvcmQgd2hpY2ggc2hvdWxkIGJlCiAgLy8vIHRyZWF0ZWQgYXMgYW4gaWRlbnRpZmllcikgYW5kIHJldHVybiB0aGF0IGlkZW50aWZpZXIuCiAgLy8vIFJlcG9ydCBlcnJvcnMgYXMgbmVjZXNzYXJ5IHZpYSBbcGFyc2VyXS4KICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBhc3NlcnQodG9rZW4ubmV4dC5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgLy8gVE9ETyhkYW5ydWJlbCk6IEltcGxlbWVudCB0aGlzIG1ldGhvZCBmb3IgZWFjaCBpZGVudGlmaWVyIGNvbnRleHQKICAgIC8vIHN1Y2ggdGhhdCB0aGV5IHJldHVybiBhIG5vbi1udWxsIHZhbHVlLgogICAgcmV0dXJuIG51bGw7CiAgfQp9CgovLy8gUmV0dXJuIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gW3Rva2VuXSBzaG91bGQgYmUgdHJlYXRlZCBsaWtlIHRoZSBzdGFydCBvZgovLy8gYW4gZXhwcmVzc2lvbiBmb3IgdGhlIHB1cnBvc2VzIG9mIHJlY292ZXJ5Lgpib29sIGxvb2tzTGlrZUV4cHJlc3Npb25TdGFydChUb2tlbiBuZXh0KSA9PgogICAgbmV4dC5pc0lkZW50aWZpZXIgfHwKICAgIG5leHQuaXNLZXl3b3JkICYmICFsb29rc0xpa2VTdGF0ZW1lbnRTdGFydChuZXh0KSB8fAogICAgbmV4dC50eXBlID09IFRva2VuVHlwZS5ET1VCTEUgfHwKICAgIG5leHQudHlwZSA9PSBUb2tlblR5cGUuSEFTSCB8fAogICAgbmV4dC50eXBlID09IFRva2VuVHlwZS5IRVhBREVDSU1BTCB8fAogICAgbmV4dC50eXBlID09IFRva2VuVHlwZS5JREVOVElGSUVSIHx8CiAgICBuZXh0LnR5cGUgPT0gVG9rZW5UeXBlLklOVCB8fAogICAgbmV4dC50eXBlID09IFRva2VuVHlwZS5TVFJJTkcgfHwKICAgIG9wdGlvbmFsKCd7JywgbmV4dCkgfHwKICAgIG9wdGlvbmFsKCcoJywgbmV4dCkgfHwKICAgIG9wdGlvbmFsKCdbJywgbmV4dCkgfHwKICAgIG9wdGlvbmFsKCdbXScsIG5leHQpIHx8CiAgICBvcHRpb25hbCgnPCcsIG5leHQpIHx8CiAgICBvcHRpb25hbCgnIScsIG5leHQpIHx8CiAgICBvcHRpb25hbCgnLScsIG5leHQpIHx8CiAgICBvcHRpb25hbCgnficsIG5leHQpIHx8CiAgICBvcHRpb25hbCgnKysnLCBuZXh0KSB8fAogICAgb3B0aW9uYWwoJy0tJywgbmV4dCk7CgovLy8gUmV0dXJuIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gW3Rva2VuXSBzaG91bGQgYmUgdHJlYXRlZCBsaWtlIHRoZSBzdGFydCBvZgovLy8gYSBuZXcgc3RhdGVtZW50IGZvciB0aGUgcHVycG9zZXMgb2YgcmVjb3ZlcnkuCmJvb2wgbG9va3NMaWtlU3RhdGVtZW50U3RhcnQoVG9rZW4gdG9rZW4pID0+IGlzT25lT2ZPckVvZih0b2tlbiwgY29uc3QgWwogICAgICAnQCcsCiAgICAgICdhc3NlcnQnLCAnYnJlYWsnLCAnY29udGludWUnLCAnZG8nLCAnZWxzZScsICdmaW5hbCcsICdmb3InLCAvLwogICAgICAnaWYnLCAncmV0dXJuJywgJ3N3aXRjaCcsICd0cnknLCAndmFyJywgJ3ZvaWQnLCAnd2hpbGUnLCAvLwogICAgXSk7CgovLyBUT0RPKGFoZSk6IFJlbW92ZSB3aGVuIGFuYWx5emVyIHN1cHBvcnRzIGdlbmVyYWxpemVkIGZ1bmN0aW9uIHN5bnRheC4KdHlwZWRlZiBfTWVzc2FnZVdpdGhBcmd1bWVudDxUPiA9IE1lc3NhZ2UgRnVuY3Rpb24oVCk7CoE0AE5OPAE5AVEBQAEnASIBMAFNTzIES1E6Gk8hUAFKDkEBUTgoOAFGEkEBSTtPAVE1Jj8BUUo4UQFGUQFMJ00BTSYsOwFPKEkBTRc/AVEQKTUBSj5FAVA1Jj0BSUsBRxMmNQFMPig0OAFOJik4AVAnNwFLRwFPMSs7AU8tMkEBQk0BUS0yRwFFE08BTTUGTT8eLz8BTAZPUDcePwFNEyo5AUhCBk8nNkYBRxEmNQFRNjJCAVFDRDItAU8ZTQFRGEcBUE8rOwFQC0EBTSg4AUwuKDcBSyo5AUkjSQEWAUgQHAFKEysBQxcBNh0BUR8BSikBTiAqAUABJiIwHCIkLSg6K01ORis/AR4BTjwvNzFJLxEEAgFLMC0ZOCUjKikiJRsbGxwbGxsbHBoBSzJJC0ZCCAFJNwE6cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9pZGVudGlmaWVyX2NvbnRleHQuZGFydDtzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL2NsYXNzX2tpbmQuZGFydIHXLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucGFyc2VyLmNsYXNzX2tpbmQ7CgplbnVtIENsYXNzS2luZCB7CiAgLy8vIEEgY2xhc3MgZGVjbGFyYXRpb24uIE5vdCBpbmNsdWRpbmcgYSBuYW1lZCBtaXhpbiBkZWNsYXJhdGlvbi4KICBDbGFzcywKCiAgLy8vIEEgbWl4aW4gZGVjbGFyYXRpb24uIE5vdCBpbmNsdWRpbmcgYSBuYW1lZCBtaXhpbiBkZWNsYXJhdGlvbi4KICBNaXhpbiwKCiAgLy8vIEFuIGV4dGVuc2lvbiBkZWNsYXJhdGlvbi4KICBFeHRlbnNpb24sCn0KEgBOTjwBIQERRAkBRAkBIA0CATJwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2NsYXNzX2tpbmQuZGFydDxzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL21lbWJlcl9raW5kLmRhcnSDni8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnBhcnNlci5tZW1iZXJfa2luZDsKCmVudW0gTWVtYmVyS2luZCB7CiAgLy8vIEEgY2F0Y2ggYmxvY2ssIG5vdCBhIHJlYWwgbWVtYmVyLgogIENhdGNoLAoKICAvLy8gQSBmYWN0b3J5CiAgRmFjdG9yeSwKCiAgLy8vIE9sZC1zdHlsZSB0eXBlZGVmLgogIEZ1bmN0aW9uVHlwZUFsaWFzLAoKICAvLy8gT2xkLXN0eWxlIGZ1bmN0aW9uLXR5cGVkIHBhcmFtZXRlciwgbm90IGEgcmVhbCBtZW1iZXIuCiAgRnVuY3Rpb25UeXBlZFBhcmFtZXRlciwKCiAgLy8vIEEgZ2VuZXJhbGl6ZWQgZnVuY3Rpb24gdHlwZSwgbm90IGEgcmVhbCBtZW1iZXIuCiAgR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUsCgogIC8vLyBBIGxvY2FsIGZ1bmN0aW9uLgogIExvY2FsLAoKICAvLy8gQSBub24tc3RhdGljIG1ldGhvZCBpbiBhIGNsYXNzIChpbmNsdWRpbmcgY29uc3RydWN0b3JzKS4KICBOb25TdGF0aWNNZXRob2QsCgogIC8vLyBBIHN0YXRpYyBtZXRob2QgaW4gYSBjbGFzcy4KICBTdGF0aWNNZXRob2QsCgogIC8vLyBBIHRvcC1sZXZlbCBtZXRob2QuCiAgVG9wTGV2ZWxNZXRob2QsCgogIC8vLyBBbiBpbnN0YW5jZSBmaWVsZCBpbiBhIGNsYXNzLgogIE5vblN0YXRpY0ZpZWxkLAoKICAvLy8gQSBzdGF0aWMgZmllbGQgaW4gYSBjbGFzcy4KICBTdGF0aWNGaWVsZCwKCiAgLy8vIEEgdG9wLWxldmVsIGZpZWxkLgogIFRvcExldmVsRmllbGQsCn0KLQBOTjwBIgESKAkBEAsBGRUBPRoBNhsBGAkBPxMBIhABGhIBJBIBIQ8BGRECATNwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL21lbWJlcl9raW5kLmRhcnRBc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci90b3BfbGV2ZWxfcGFyc2VyLmRhcnSC+S8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLnBhcnNlci50b3BfbGV2ZWxfcGFyc2VyOwoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJ2NsYXNzX2tpbmQuZGFydCcgc2hvdyBDbGFzc0tpbmQ7CgppbXBvcnQgJ2NsYXNzX21lbWJlcl9wYXJzZXIuZGFydCcgc2hvdyBDbGFzc01lbWJlclBhcnNlcjsKCmltcG9ydCAnbGlzdGVuZXIuZGFydCcgc2hvdyBMaXN0ZW5lcjsKCi8vLyBQYXJzZXIgd2hpY2ggb25seSBwYXJzZXMgdG9wLWxldmVsIGVsZW1lbnRzLCBidXQgaWdub3JlcyB0aGVpciBib2RpZXMuCi8vLyBVc2UgW1BhcnNlcl0gdG8gcGFyc2UgZXZlcnl0aGluZy4KY2xhc3MgVG9wTGV2ZWxQYXJzZXIgZXh0ZW5kcyBDbGFzc01lbWJlclBhcnNlciB7CiAgVG9wTGV2ZWxQYXJzZXIoTGlzdGVuZXIgbGlzdGVuZXIpIDogc3VwZXIobGlzdGVuZXIpOwoKICBUb2tlbiBwYXJzZUNsYXNzT3JNaXhpbkJvZHkoQ2xhc3NLaW5kIGtpbmQsIFRva2VuIHRva2VuKSA9PgogICAgICBza2lwQ2xhc3NPck1peGluQm9keSh0b2tlbik7Cn0KGABOTjwBJwEuASkBOgEmAUsmMTcBPiMCAThwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL3RvcF9sZXZlbF9wYXJzZXIuZGFydDVzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL3V0aWwuZGFydJtWLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucGFyc2VyLnV0aWw7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBzaG93IFRyZWVOb2RlOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IG5vTGVuZ3RoOwoKaW1wb3J0ICcuLi9zY2FubmVyLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcKICAgIHNob3cgQmVnaW5Ub2tlbiwgU2ltcGxlVG9rZW4sIFN5bnRoZXRpY1Rva2VuLCBUb2tlblR5cGU7CgovLy8gUmV0dXJucyB0cnVlIGlmIFt0b2tlbl0gaXMgdGhlIHN5bWJvbCBvciBrZXl3b3JkIFt2YWx1ZV0uCmJvb2wgb3B0aW9uYWwoU3RyaW5nIHZhbHVlLCBUb2tlbiB0b2tlbikgewogIHJldHVybiBpZGVudGljYWwodmFsdWUsIHRva2VuLnN0cmluZ1ZhbHVlKTsKfQoKLy8vIFJldHVybnMgdGhlIHRva2VuIGJlZm9yZSB0aGUgY2xvc2UgYnJhY2UsIGJyYWNrZXQsIG9yIHBhcmVudGhlc2lzCi8vLyBhc3NvY2lhdGVkIHdpdGggW2xlZnRdLiBGb3IgJzwnLCBpdCBtYXkgcmV0dXJuIGBudWxsYC4KVG9rZW4gYmVmb3JlQ2xvc2VCcmFjZVRva2VuRm9yKEJlZ2luVG9rZW4gbGVmdCkgewogIFRva2VuIGVuZFRva2VuID0gbGVmdC5lbmRUb2tlbjsKICBpZiAoZW5kVG9rZW4gPT0gbnVsbCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIFRva2VuIHRva2VuID0gbGVmdDsKICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICB3aGlsZSAobmV4dCAhPSBlbmRUb2tlbiAmJiBuZXh0ICE9IG5leHQubmV4dCkgewogICAgdG9rZW4gPSBuZXh0OwogICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgfQogIHJldHVybiB0b2tlbjsKfQoKLy8vIFJldHVybiBbdG9rZW5dIG9yIGEgdG9rZW4gYmVmb3JlIFt0b2tlbl0gd2hpY2ggaXMgZWl0aGVyCi8vLyBub3Qgc3ludGhldGljIG9yIHN5bnRoZXRpYyB3aXRoIG5vbi16ZXJvIGxlbmd0aC4KVG9rZW4gZmluZFByZXZpb3VzTm9uWmVyb0xlbmd0aFRva2VuKFRva2VuIHRva2VuKSB7CiAgd2hpbGUgKHRva2VuLmlzU3ludGhldGljICYmIHRva2VuLmxlbmd0aCA9PSAwKSB7CiAgICBUb2tlbiBwcmV2aW91cyA9IHRva2VuLmJlZm9yZVN5bnRoZXRpYzsKICAgIGlmIChwcmV2aW91cyA9PSBudWxsKSB7CiAgICAgIGJyZWFrOwogICAgfQogICAgdG9rZW4gPSBwcmV2aW91czsKICB9CiAgcmV0dXJuIHRva2VuOwp9CgovLy8gUmV0dXJuIFt0b2tlbl0gb3IgYSB0b2tlbiBhZnRlciBbdG9rZW5dIHdoaWNoIGlzIGVpdGhlcgovLy8gbm90IHN5bnRoZXRpYyBvciBzeW50aGV0aWMgd2l0aCBub24temVybyBsZW5ndGguCi8vLyBUaGlzIG1heSByZXR1cm4gRU9GIGlmIHRoZXJlIGFyZSBubyBtb3JlIG5vbi1zeW50aGV0aWMgdG9rZW5zIGluIHRoZSBzdHJlYW0uClRva2VuIGZpbmROb25aZXJvTGVuZ3RoVG9rZW4oVG9rZW4gdG9rZW4pIHsKICB3aGlsZSAodG9rZW4uaXNTeW50aGV0aWMgJiYgdG9rZW4ubGVuZ3RoID09IDAgJiYgIXRva2VuLmlzRW9mKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgfQogIHJldHVybiB0b2tlbjsKfQoKLy8vIEEgbnVsbC1hd2FyZSBhbHRlcm5hdGl2ZSB0byBgdG9rZW4ub2Zmc2V0YC4gIElmIFt0b2tlbl0gaXMgYG51bGxgLCByZXR1cm5zCi8vLyBgVHJlZU5vZGUubm9PZmZzZXRgLgppbnQgb2Zmc2V0Rm9yVG9rZW4oVG9rZW4gdG9rZW4pIHsKICByZXR1cm4gdG9rZW4gPT0gbnVsbCA/IFRyZWVOb2RlLm5vT2Zmc2V0IDogdG9rZW4ub2Zmc2V0Owp9Cgpib29sIGlzRGlnaXQoaW50IGMpID0+IGMgPj0gMHgzMCAmJiBjIDw9IDB4Mzk7Cgpib29sIGlzTGV0dGVyKGludCBjKSA9PiBjID49IDB4NDEgJiYgYyA8PSAweDVBIHx8IGMgPj0gMHg2MSAmJiBjIDw9IDB4N0E7Cgpib29sIGlzTGV0dGVyT3JEaWdpdChpbnQgYykgPT4gaXNMZXR0ZXIoYykgfHwgaXNEaWdpdChjKTsKCmJvb2wgaXNXaGl0ZXNwYWNlKGludCBjKSA9PiBjID09IDB4MjAgfHwgYyA9PSAweEEgfHwgYyA9PSAweEQgfHwgYyA9PSAweDk7CgovLy8gUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIHRva2VuIG1hdGNoZXMgb25lIG9mIHRoZSBnaXZlbiB2YWx1ZXMuCmJvb2wgaXNPbmVPZihUb2tlbiB0b2tlbiwgSXRlcmFibGU8U3RyaW5nPiB2YWx1ZXMpIHsKICBmb3IgKFN0cmluZyB0b2tlblZhbHVlIGluIHZhbHVlcykgewogICAgaWYgKG9wdGlvbmFsKHRva2VuVmFsdWUsIHRva2VuKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CiAgcmV0dXJuIGZhbHNlOwp9CgovLy8gUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIHRva2VuIG1hdGNoZXMgb25lIG9mIHRoZSBnaXZlbiB2YWx1ZXMgb3IgaXMgRU9GLgpib29sIGlzT25lT2ZPckVvZihUb2tlbiB0b2tlbiwgSXRlcmFibGU8U3RyaW5nPiB2YWx1ZXMpIHsKICBmb3IgKFN0cmluZyB0b2tlblZhbHVlIGluIHZhbHVlcykgewogICAgaWYgKG9wdGlvbmFsKHRva2VuVmFsdWUsIHRva2VuKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CiAgcmV0dXJuIHRva2VuLmlzRW9mOwp9CgovLy8gQSBudWxsLWF3YXJlIGFsdGVybmF0aXZlIHRvIGB0b2tlbi5sZW5ndGhgLiAgSWYgW3Rva2VuXSBpcyBgbnVsbGAsIHJldHVybnMKLy8vIFtub0xlbmd0aF0uCmludCBsZW5ndGhGb3JUb2tlbihUb2tlbiB0b2tlbikgewogIHJldHVybiB0b2tlbiA9PSBudWxsID8gbm9MZW5ndGggOiB0b2tlbi5sZW5ndGg7Cn0KCi8vLyBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIHNwYW4gZnJvbSBbYmVnaW5dIHRvIFtlbmRdIChpbmNsdXNpdmUpLiBJZiBib3RoCi8vLyB0b2tlbnMgYXJlIG51bGwsIHJldHVybiBbbm9MZW5ndGhdLiBJZiBvbmUgb2YgdGhlIHRva2VucyBhcmUgbnVsbCwgcmV0dXJuCi8vLyB0aGUgbGVuZ3RoIG9mIHRoZSBvdGhlciB0b2tlbi4KaW50IGxlbmd0aE9mU3BhbihUb2tlbiBiZWdpbiwgVG9rZW4gZW5kKSB7CiAgaWYgKGJlZ2luID09IG51bGwpIHJldHVybiBsZW5ndGhGb3JUb2tlbihlbmQpOwogIGlmIChlbmQgPT0gbnVsbCkgcmV0dXJuIGxlbmd0aEZvclRva2VuKGJlZ2luKTsKICByZXR1cm4gZW5kLm9mZnNldCArIGVuZC5sZW5ndGggLSBiZWdpbi5vZmZzZXQ7Cn0KClRva2VuIHNraXBNZXRhZGF0YShUb2tlbiB0b2tlbikgewogIHRva2VuID0gdG9rZW4ubmV4dDsKICBhc3NlcnQob3B0aW9uYWwoJ0AnLCB0b2tlbikpOwogIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogIGlmIChuZXh0LmlzSWRlbnRpZmllcikgewogICAgdG9rZW4gPSBuZXh0OwogICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICB3aGlsZSAob3B0aW9uYWwoJy4nLCBuZXh0KSkgewogICAgICB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAobmV4dC5pc0lkZW50aWZpZXIpIHsKICAgICAgICB0b2tlbiA9IG5leHQ7CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIH0KICAgIH0KICAgIGlmIChvcHRpb25hbCgnKCcsIG5leHQpICYmICFuZXh0LmVuZEdyb3VwLmlzU3ludGhldGljKSB7CiAgICAgIHRva2VuID0gbmV4dC5lbmRHcm91cDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICB9CiAgfQogIHJldHVybiB0b2tlbjsKfQoKLy8vIFNwbGl0IGA+PWAgaW50byB0d28gc2VwYXJhdGUgdG9rZW5zLgovLy8gQ2FsbCBbVG9rZW4uc2V0TmV4dF0gdG8gYWRkIHRoZSB0b2tlbiB0byB0aGUgc3RyZWFtLgpUb2tlbiBzcGxpdEd0RXEoVG9rZW4gdG9rZW4pIHsKICBhc3NlcnQob3B0aW9uYWwoJz49JywgdG9rZW4pKTsKICByZXR1cm4gbmV3IFNpbXBsZVRva2VuKAogICAgICBUb2tlblR5cGUuR1QsIHRva2VuLmNoYXJPZmZzZXQsIHRva2VuLnByZWNlZGluZ0NvbW1lbnRzKQogICAgLi5zZXROZXh0KG5ldyBTaW1wbGVUb2tlbihUb2tlblR5cGUuRVEsIHRva2VuLmNoYXJPZmZzZXQgKyAxKQogICAgICAvLyBTZXQgbmV4dCByYXRoZXIgdGhhbiBjYWxsaW5nIFRva2VuLnNldE5leHQKICAgICAgLy8gc28gdGhhdCB0aGUgcHJldmlvdXMgdG9rZW4gaXMgbm90IHNldC4KICAgICAgLi5uZXh0ID0gdG9rZW4ubmV4dCk7Cn0KCi8vLyBTcGxpdCBgPj5gIGludG8gdHdvIHNlcGFyYXRlIHRva2Vucy4KLy8vIENhbGwgW1Rva2VuLnNldE5leHRdIHRvIGFkZCB0aGUgdG9rZW4gdG8gdGhlIHN0cmVhbS4KU2ltcGxlVG9rZW4gc3BsaXRHdEd0KFRva2VuIHRva2VuKSB7CiAgYXNzZXJ0KG9wdGlvbmFsKCc+PicsIHRva2VuKSk7CiAgcmV0dXJuIG5ldyBTaW1wbGVUb2tlbigKICAgICAgVG9rZW5UeXBlLkdULCB0b2tlbi5jaGFyT2Zmc2V0LCB0b2tlbi5wcmVjZWRpbmdDb21tZW50cykKICAgIC4uc2V0TmV4dChuZXcgU2ltcGxlVG9rZW4oVG9rZW5UeXBlLkdULCB0b2tlbi5jaGFyT2Zmc2V0ICsgMSkKICAgICAgLy8gU2V0IG5leHQgcmF0aGVyIHRoYW4gY2FsbGluZyBUb2tlbi5zZXROZXh0CiAgICAgIC8vIHNvIHRoYXQgdGhlIHByZXZpb3VzIHRva2VuIGlzIG5vdCBzZXQuCiAgICAgIC4ubmV4dCA9IHRva2VuLm5leHQpOwp9CgovLy8gU3BsaXQgYD4+PWAgaW50byB0aHJlZSBzZXBhcmF0ZSB0b2tlbnMuCi8vLyBDYWxsIFtUb2tlbi5zZXROZXh0XSB0byBhZGQgdGhlIHRva2VuIHRvIHRoZSBzdHJlYW0uClRva2VuIHNwbGl0R3RHdEVxKFRva2VuIHRva2VuKSB7CiAgYXNzZXJ0KG9wdGlvbmFsKCc+Pj0nLCB0b2tlbikpOwogIHJldHVybiBuZXcgU2ltcGxlVG9rZW4oCiAgICAgIFRva2VuVHlwZS5HVCwgdG9rZW4uY2hhck9mZnNldCwgdG9rZW4ucHJlY2VkaW5nQ29tbWVudHMpCiAgICAuLnNldE5leHQobmV3IFNpbXBsZVRva2VuKFRva2VuVHlwZS5HVCwgdG9rZW4uY2hhck9mZnNldCArIDEpCiAgICAgIC4uc2V0TmV4dChuZXcgU2ltcGxlVG9rZW4oVG9rZW5UeXBlLkVRLCB0b2tlbi5jaGFyT2Zmc2V0ICsgMikKICAgICAgICAvLyBTZXQgbmV4dCByYXRoZXIgdGhhbiBjYWxsaW5nIFRva2VuLnNldE5leHQKICAgICAgICAvLyBzbyB0aGF0IHRoZSBwcmV2aW91cyB0b2tlbiBpcyBub3Qgc2V0LgogICAgICAgIC4ubmV4dCA9IHRva2VuLm5leHQpKTsKfQoKLy8vIFNwbGl0IGA+Pj1gIGludG8gdHdvIHNlcGFyYXRlIHRva2Vucy4uLiBgPmAgZm9sbG93ZWQgYnkgYD49YC4KLy8vIENhbGwgW1Rva2VuLnNldE5leHRdIHRvIGFkZCB0aGUgdG9rZW4gdG8gdGhlIHN0cmVhbS4KVG9rZW4gc3BsaXRHdEZyb21HdEd0RXEoVG9rZW4gdG9rZW4pIHsKICBhc3NlcnQob3B0aW9uYWwoJz4+PScsIHRva2VuKSk7CiAgcmV0dXJuIG5ldyBTaW1wbGVUb2tlbigKICAgICAgVG9rZW5UeXBlLkdULCB0b2tlbi5jaGFyT2Zmc2V0LCB0b2tlbi5wcmVjZWRpbmdDb21tZW50cykKICAgIC4uc2V0TmV4dChuZXcgU2ltcGxlVG9rZW4oVG9rZW5UeXBlLkdUX0VRLCB0b2tlbi5jaGFyT2Zmc2V0ICsgMSkKICAgICAgLy8gU2V0IG5leHQgcmF0aGVyIHRoYW4gY2FsbGluZyBUb2tlbi5zZXROZXh0CiAgICAgIC8vIHNvIHRoYXQgdGhlIHByZXZpb3VzIHRva2VuIGlzIG5vdCBzZXQuCiAgICAgIC4ubmV4dCA9IHRva2VuLm5leHQpOwp9CgovLy8gU3BsaXQgYD4+PmAgaW50byB0d28gc2VwYXJhdGUgdG9rZW5zLi4uIGA+YCBmb2xsb3dlZCBieSBgPj5gLgovLy8gQ2FsbCBbVG9rZW4uc2V0TmV4dF0gdG8gYWRkIHRoZSB0b2tlbiB0byB0aGUgc3RyZWFtLgpUb2tlbiBzcGxpdEd0RnJvbUd0R3RHdChUb2tlbiB0b2tlbikgewogIGFzc2VydChvcHRpb25hbCgnPj4+JywgdG9rZW4pKTsKICByZXR1cm4gbmV3IFNpbXBsZVRva2VuKAogICAgICBUb2tlblR5cGUuR1QsIHRva2VuLmNoYXJPZmZzZXQsIHRva2VuLnByZWNlZGluZ0NvbW1lbnRzKQogICAgLi5zZXROZXh0KG5ldyBTaW1wbGVUb2tlbihUb2tlblR5cGUuR1RfR1QsIHRva2VuLmNoYXJPZmZzZXQgKyAxKQogICAgICAvLyBTZXQgbmV4dCByYXRoZXIgdGhhbiBjYWxsaW5nIFRva2VuLnNldE5leHQKICAgICAgLy8gc28gdGhhdCB0aGUgcHJldmlvdXMgdG9rZW4gaXMgbm90IHNldC4KICAgICAgLi5uZXh0ID0gdG9rZW4ubmV4dCk7Cn0KCi8vLyBTcGxpdCBgPj4+PWAgaW50byB0d28gc2VwYXJhdGUgdG9rZW5zLi4uIGA+YCBmb2xsb3dlZCBieSBgPj49YC4KLy8vIENhbGwgW1Rva2VuLnNldE5leHRdIHRvIGFkZCB0aGUgdG9rZW4gdG8gdGhlIHN0cmVhbS4KVG9rZW4gc3BsaXRHdEZyb21HdEd0R3RFcShUb2tlbiB0b2tlbikgewogIGFzc2VydChvcHRpb25hbCgnPj4+PScsIHRva2VuKSk7CiAgcmV0dXJuIG5ldyBTaW1wbGVUb2tlbigKICAgICAgVG9rZW5UeXBlLkdULCB0b2tlbi5jaGFyT2Zmc2V0LCB0b2tlbi5wcmVjZWRpbmdDb21tZW50cykKICAgIC4uc2V0TmV4dChuZXcgU2ltcGxlVG9rZW4oVG9rZW5UeXBlLkdUX0dUX0VRLCB0b2tlbi5jaGFyT2Zmc2V0ICsgMSkKICAgICAgLy8gU2V0IG5leHQgcmF0aGVyIHRoYW4gY2FsbGluZyBUb2tlbi5zZXROZXh0CiAgICAgIC8vIHNvIHRoYXQgdGhlIHByZXZpb3VzIHRva2VuIGlzIG5vdCBzZXQuCiAgICAgIC4ubmV4dCA9IHRva2VuLm5leHQpOwp9CgovLy8gUmV0dXJuIGEgc3ludGhldGljIGA8YCBmb2xsb3dlZCBieSBbbmV4dF0uCi8vLyBDYWxsIFtUb2tlbi5zZXROZXh0XSB0byBhZGQgdGhlIHRva2VuIHRvIHRoZSBzdHJlYW0uClRva2VuIHN5bnRoZXRpY0d0KFRva2VuIG5leHQpIHsKICByZXR1cm4gbmV3IFN5bnRoZXRpY1Rva2VuKFRva2VuVHlwZS5HVCwgbmV4dC5jaGFyT2Zmc2V0KQogICAgLy8gU2V0IG5leHQgcmF0aGVyIHRoYW4gY2FsbGluZyBUb2tlbi5zZXROZXh0CiAgICAvLyBzbyB0aGF0IHRoZSBwcmV2aW91cyB0b2tlbiBpcyBub3Qgc2V0LgogICAgLi5uZXh0ID0gbmV4dDsKfQqA1gBOTjwBGwEwASwBJQEiPQE+Ky4CAUY7MiIaEQQWGzISFwQQAgE9NTQzLBwNBhYEEAIBPDVRLEMYBBACAU8ZIjsCAS8BSgE6AUsBRDUmJxMGBBACAU46JicTBgQWAgFPECIyAgFOTiMrMTExAgEiFiAbGxIXIhQZHxYbCAY9HRkGBBACASk5HyEaP0I0MBwCASk5JSEaP0I0MBwCASw5ISIaP0JENjIfAgFCOSciGj9FNDAcAgFCOSciGj9FNDAcAgFEOSkjGj9INDAcAgEvOSA7Mi4TAgEscGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci91dGlsLmRhcnQ/c2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3NvdXJjZS9zdGFja19saXN0ZW5lci5kYXJ0veIvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5zdGFja19saXN0ZW5lcjsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93IEFzeW5jTWFya2VyLCBFeHByZXNzaW9uLCBGdW5jdGlvbk5vZGUsIFRyZWVOb2RlOwoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JwogICAgc2hvdwogICAgICAgIENvZGUsCiAgICAgICAgTG9jYXRlZE1lc3NhZ2UsCiAgICAgICAgTWVzc2FnZSwKICAgICAgICBjb2RlQ2F0Y2hTeW50YXhFeHRyYVBhcmFtZXRlcnMsCiAgICAgICAgY29kZU5hdGl2ZUNsYXVzZVNob3VsZEJlQW5ub3RhdGlvbiwKICAgICAgICB0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHk7CgppbXBvcnQgJy4uL3BhcnNlci5kYXJ0JwogICAgc2hvdyBMaXN0ZW5lciwgTWVtYmVyS2luZCwgUGFyc2VyLCBsZW5ndGhPZlNwYW4sIG9mZnNldEZvclRva2VuOwoKaW1wb3J0ICcuLi9wYXJzZXIvaWRlbnRpZmllcl9jb250ZXh0LmRhcnQnIHNob3cgSWRlbnRpZmllckNvbnRleHQ7CgppbXBvcnQgJy4uL3Byb2JsZW1zLmRhcnQnCiAgICBzaG93IGludGVybmFsUHJvYmxlbSwgdW5oYW5kbGVkLCB1bmltcGxlbWVudGVkLCB1bnN1cHBvcnRlZDsKCmltcG9ydCAnLi4vcXVvdGUuZGFydCcgc2hvdyB1bmVzY2FwZVN0cmluZzsKCmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICd2YWx1ZV9raW5kcy5kYXJ0JzsKCmVudW0gTnVsbFZhbHVlIHsKICBBcmd1bWVudHMsCiAgQXMsCiAgQXdhaXRUb2tlbiwKICBCbG9jaywKICBCcmVha1RhcmdldCwKICBDYXNjYWRlUmVjZWl2ZXIsCiAgQ29tYmluYXRvcnMsCiAgQ29tbWVudHMsCiAgQ29uZGl0aW9uYWxVcmlzLAogIENvbmRpdGlvbmFsbHlTZWxlY3RlZEltcG9ydCwKICBDb25zdHJ1Y3RvckluaXRpYWxpemVyU2VwYXJhdG9yLAogIENvbnN0cnVjdG9ySW5pdGlhbGl6ZXJzLAogIENvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzLAogIENvbnRpbnVlVGFyZ2V0LAogIERlZmVycmVkLAogIERvY3VtZW50YXRpb25Db21tZW50LAogIEV4cHJlc3Npb24sCiAgRXh0ZW5kc0NsYXVzZSwKICBGaWVsZEluaXRpYWxpemVyLAogIEZvcm1hbFBhcmFtZXRlcnMsCiAgRnVuY3Rpb25Cb2R5LAogIEZ1bmN0aW9uQm9keUFzeW5jVG9rZW4sCiAgRnVuY3Rpb25Cb2R5U3RhclRva2VuLAogIElkZW50aWZpZXIsCiAgSWRlbnRpZmllckxpc3QsCiAgSW5pdGlhbGl6ZXJzLAogIExhYmVscywKICBNZXRhZGF0YSwKICBNb2RpZmllcnMsCiAgTmFtZSwKICBQYXJhbWV0ZXJEZWZhdWx0VmFsdWUsCiAgUHJlZml4LAogIFN0cmluZ0xpdGVyYWwsCiAgU3dpdGNoU2NvcGUsCiAgVG9rZW4sCiAgVHlwZSwKICBUeXBlQXJndW1lbnRzLAogIFR5cGVCdWlsZGVyTGlzdCwKICBUeXBlTGlzdCwKICBUeXBlVmFyaWFibGUsCiAgVHlwZVZhcmlhYmxlcywKICBWYXJGaW5hbE9yQ29uc3RUb2tlbiwKICBXaXRoQ2xhdXNlLAp9CgphYnN0cmFjdCBjbGFzcyBTdGFja0xpc3RlbmVyIGV4dGVuZHMgTGlzdGVuZXIgewogIGZpbmFsIFN0YWNrIHN0YWNrID0gbmV3IFN0YWNrKCk7CgogIC8vLyBDaGVja3MgdGhlIHRvcCBvZiB0aGUgY3VycmVudCBzdGFjayBhZ2FpbnN0IFtraW5kc10uIElmIGEgbWlzbWF0Y2ggaXMKICAvLy8gZm91bmQsIGEgdG9wIG9mIHRoZSBjdXJyZW50IHN0YWNrIGlzIHByaW50IGFsb25nIHdpdGggdGhlIGV4cGVjdGVkIFtraW5kc10KICAvLy8gbWFya2luZyB0aGUgZnJhbWVzIHRoYXQgZG9uJ3QgbWF0Y2gsIGFuZCB0aHJvd3MgYW4gZXhjZXB0aW9uLgogIC8vLwogIC8vLyBVc2UgdGhpcyBpbiBhc3NlcnQgc3RhdGVtZW50cyBsaWtlIGBhc3NlcnQoY2hlY2tTdGF0ZShbVmFsdWVLaW5kLlRva2VuXSkpYAogIC8vLyB0byBkb2N1bWVudCB0aGUgZXhwZWN0ZWQgc3RhY2sgYW5kIGdldCBlYXJsaWVyIGVycm9ycyBvbiB1bmV4cGVjdGVkIHN0YWNrCiAgLy8vIGNvbnRlbnQuCiAgYm9vbCBjaGVja1N0YXRlKFRva2VuIHRva2VuLCBMaXN0PFZhbHVlS2luZD4ga2luZHMpIHsKICAgIGJvb2wgY2hlY2tWYWx1ZShWYWx1ZUtpbmQga2luZCwgT2JqZWN0IHZhbHVlKSB7CiAgICAgIHJldHVybiBraW5kLmNoZWNrKHZhbHVlKTsKICAgIH0KCiAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwogICAgZm9yIChpbnQga2luZEluZGV4ID0gMDsga2luZEluZGV4IDwga2luZHMubGVuZ3RoOyBraW5kSW5kZXgrKykgewogICAgICBpbnQgc3RhY2tJbmRleCA9IHN0YWNrLmFycmF5TGVuZ3RoIC0ga2luZEluZGV4IC0gMTsKICAgICAgVmFsdWVLaW5kIGtpbmQgPSBraW5kc1traW5kSW5kZXhdOwogICAgICBpZiAoc3RhY2tJbmRleCA+PSAwKSB7CiAgICAgICAgT2JqZWN0IHZhbHVlID0gc3RhY2suYXJyYXlbc3RhY2tJbmRleF07CiAgICAgICAgaWYgKCFjaGVja1ZhbHVlKGtpbmQsIHZhbHVlKSkgewogICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBzdWNjZXNzID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGlmICghc3VjY2VzcykgewogICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CgogICAgICBTdHJpbmcgc2FmZVRvU3RyaW5nKE9iamVjdCBvYmplY3QpIHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuICckb2JqZWN0JzsKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAvLyBKdWRnbWVudHMgZmFpbCBvbiB0b1N0cmluZy4KICAgICAgICAgIHJldHVybiBvYmplY3QucnVudGltZVR5cGUudG9TdHJpbmcoKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIFN0cmluZyBwYWRMZWZ0KE9iamVjdCBvYmplY3QsIGludCBsZW5ndGgpIHsKICAgICAgICBTdHJpbmcgdGV4dCA9IHNhZmVUb1N0cmluZyhvYmplY3QpOwogICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA8IGxlbmd0aCkgewogICAgICAgICAgcmV0dXJuICcgJyAqIChsZW5ndGggLSB0ZXh0Lmxlbmd0aCkgKyB0ZXh0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGV4dDsKICAgICAgfQoKICAgICAgU3RyaW5nIHBhZFJpZ2h0KE9iamVjdCBvYmplY3QsIGludCBsZW5ndGgpIHsKICAgICAgICBTdHJpbmcgdGV4dCA9IHNhZmVUb1N0cmluZyhvYmplY3QpOwogICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA8IGxlbmd0aCkgewogICAgICAgICAgcmV0dXJuIHRleHQgKyAnICcgKiAobGVuZ3RoIC0gdGV4dC5sZW5ndGgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGV4dDsKICAgICAgfQoKICAgICAgLy8gQ29tcHV0ZSBraW5kL3N0YWNrIGZyYW1lIGluZm9ybWF0aW9uIGZvciBhbGwgZXhwZWN0ZWQgdmFsdWVzIHBsdXMgMyBtb3JlCiAgICAgIC8vIHN0YWNrIGVsZW1lbnRzIGlmIGF2YWlsYWJsZS4KICAgICAgZm9yIChpbnQga2luZEluZGV4ID0gMDsga2luZEluZGV4IDwga2luZHMubGVuZ3RoICsgMzsga2luZEluZGV4KyspIHsKICAgICAgICBpbnQgc3RhY2tJbmRleCA9IHN0YWNrLmFycmF5TGVuZ3RoIC0ga2luZEluZGV4IC0gMTsKICAgICAgICBpZiAoc3RhY2tJbmRleCA8IDAgJiYga2luZEluZGV4ID49IGtpbmRzLmxlbmd0aCkgewogICAgICAgICAgLy8gTm8gbW9yZSBzdGFjayBlbGVtZW50cyBub3Iga2luZHMgdG8gZGlzcGxheS4KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzYi53cml0ZShwYWRMZWZ0KGtpbmRJbmRleCwgNCkpOwogICAgICAgIHNiLndyaXRlKCc6ICcpOwogICAgICAgIFZhbHVlS2luZCBraW5kOwogICAgICAgIGlmIChraW5kSW5kZXggPCBraW5kcy5sZW5ndGgpIHsKICAgICAgICAgIGtpbmQgPSBraW5kc1traW5kSW5kZXhdOwogICAgICAgICAgc2Iud3JpdGUocGFkUmlnaHQoa2luZCwgNjApKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2Iud3JpdGUocGFkUmlnaHQoJy0tLScsIDYwKSk7CiAgICAgICAgfQogICAgICAgIGlmIChzdGFja0luZGV4ID49IDApIHsKICAgICAgICAgIE9iamVjdCB2YWx1ZSA9IHN0YWNrLmFycmF5W3N0YWNrSW5kZXhdOwogICAgICAgICAgaWYgKGtpbmQgPT0gbnVsbCB8fCBjaGVja1ZhbHVlKGtpbmQsIHZhbHVlKSkgewogICAgICAgICAgICBzYi53cml0ZSgnICcpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2Iud3JpdGUoJyonKTsKICAgICAgICAgIH0KICAgICAgICAgIHNiLndyaXRlKHNhZmVUb1N0cmluZyh2YWx1ZSkpOwogICAgICAgICAgc2Iud3JpdGUoJyAoJHt2YWx1ZS5ydW50aW1lVHlwZX0pJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChraW5kID09IG51bGwpIHsKICAgICAgICAgICAgc2Iud3JpdGUoJyAnKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHNiLndyaXRlKCcqJyk7CiAgICAgICAgICB9CiAgICAgICAgICBzYi53cml0ZSgnLS0tJyk7CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlbG4oKTsKICAgICAgfQoKICAgICAgU3RyaW5nIG1lc3NhZ2UgPSAnJHJ1bnRpbWVUeXBlIGZhaWx1cmVcbiRzYic7CiAgICAgIGlmICh0b2tlbiAhPSBudWxsKSB7CiAgICAgICAgLy8gSWYgb2Zmc2V0IGlzIGF2YWlsYWJsZSByZXBvcnQgYW5kIGludGVybmFsIHByb2JsZW0gdG8gc2hvdyB0aGUKICAgICAgICAvLyBwYXJzZWQgY29kZSBpbiB0aGUgb3V0cHV0LgogICAgICAgIHRocm93IGludGVybmFsUHJvYmxlbSgKICAgICAgICAgICAgbmV3IE1lc3NhZ2UobnVsbCwgbWVzc2FnZTogbWVzc2FnZSksIHRva2VuLmNoYXJPZmZzZXQsIHVyaSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbWVzc2FnZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHN1Y2Nlc3M7CiAgfQoKICBAb3ZlcnJpZGUKICBVcmkgZ2V0IHVyaTsKCiAgdm9pZCBkaXNjYXJkKGludCBuKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICBwb3AoKTsKICAgIH0KICB9CgogIC8vIFRPRE8oYWhlKTogVGhpcyBkb2Vzbid0IGJlbG9uZyBoZXJlLiBPbmx5IGltcGxlbWVudGVkIGJ5IGJvZHlfYnVpbGRlci5kYXJ0CiAgLy8gYW5kIGFzdF9idWlsZGVyLmRhcnQuCiAgdm9pZCBmaW5pc2hGdW5jdGlvbigKICAgICAgY292YXJpYW50IGZvcm1hbHMsIEFzeW5jTWFya2VyIGFzeW5jTW9kaWZpZXIsIGNvdmFyaWFudCBib2R5KSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImZpbmlzaEZ1bmN0aW9uIiwgLTEsIHVyaSk7CiAgfQoKICAvLyBUT0RPKGFoZSk6IFRoaXMgZG9lc24ndCBiZWxvbmcgaGVyZS4gT25seSBpbXBsZW1lbnRlZCBieSBib2R5X2J1aWxkZXIuZGFydAogIC8vIGFuZCBhc3RfYnVpbGRlci5kYXJ0LgogIGR5bmFtaWMgZmluaXNoRmllbGRzKCkgewogICAgcmV0dXJuIHVuc3VwcG9ydGVkKCJmaW5pc2hGaWVsZHMiLCAtMSwgdXJpKTsKICB9CgogIC8vIFRPRE8oYWhlKTogVGhpcyBkb2Vzbid0IGJlbG9uZyBoZXJlLiBPbmx5IGltcGxlbWVudGVkIGJ5IGJvZHlfYnVpbGRlci5kYXJ0CiAgLy8gYW5kIGFzdF9idWlsZGVyLmRhcnQuCiAgTGlzdDxFeHByZXNzaW9uPiBmaW5pc2hNZXRhZGF0YShUcmVlTm9kZSBwYXJlbnQpIHsKICAgIHJldHVybiB1bnN1cHBvcnRlZCgiZmluaXNoTWV0YWRhdGEiLCAtMSwgdXJpKTsKICB9CgogIC8vIFRPRE8oYWhlKTogVGhpcyBkb2Vzbid0IGJlbG9uZyBoZXJlLiBPbmx5IGltcGxlbWVudGVkIGJ5IGJvZHlfYnVpbGRlci5kYXJ0CiAgLy8gYW5kIGFzdF9idWlsZGVyLmRhcnQuCiAgdm9pZCBleGl0TG9jYWxTY29wZSgpID0+IHVuc3VwcG9ydGVkKCJleGl0TG9jYWxTY29wZSIsIC0xLCB1cmkpOwoKICAvLyBUT0RPKGFoZSk6IFRoaXMgZG9lc24ndCBiZWxvbmcgaGVyZS4gT25seSBpbXBsZW1lbnRlZCBieSBib2R5X2J1aWxkZXIuZGFydC4KICBkeW5hbWljIHBhcnNlU2luZ2xlRXhwcmVzc2lvbigKICAgICAgUGFyc2VyIHBhcnNlciwgVG9rZW4gdG9rZW4sIEZ1bmN0aW9uTm9kZSBwYXJhbWV0ZXJzKSB7CiAgICByZXR1cm4gdW5zdXBwb3J0ZWQoImZpbmlzaFNpbmdsZUV4cHJlc3Npb24iLCAtMSwgdXJpKTsKICB9CgogIHZvaWQgcHVzaChPYmplY3Qgbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgdW5oYW5kbGVkKCJudWxsIiwgInB1c2giLCAtMSwgdXJpKTsKICAgIHN0YWNrLnB1c2gobm9kZSk7CiAgfQoKICB2b2lkIHB1c2hJZk51bGwoVG9rZW4gdG9rZW5Pck51bGwsIE51bGxWYWx1ZSBudWxsVmFsdWUpIHsKICAgIGlmICh0b2tlbk9yTnVsbCA9PSBudWxsKSBzdGFjay5wdXNoKG51bGxWYWx1ZSk7CiAgfQoKICBPYmplY3QgcGVlaygpID0+IHN0YWNrLmlzTm90RW1wdHkgPyBzdGFjay5sYXN0IDogbnVsbDsKCiAgT2JqZWN0IHBvcChbTnVsbFZhbHVlIG51bGxWYWx1ZV0pIHsKICAgIHJldHVybiBzdGFjay5wb3AobnVsbFZhbHVlKTsKICB9CgogIE9iamVjdCBwb3BJZk5vdE51bGwoT2JqZWN0IHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IG51bGwgOiBwb3AoKTsKICB9CgogIHZvaWQgZGVidWdFdmVudChTdHJpbmcgbmFtZSkgewogICAgLy8gcHJpbnRFdmVudChuYW1lKTsKICB9CgogIHZvaWQgcHJpbnRFdmVudChTdHJpbmcgbmFtZSkgewogICAgcHJpbnQoJ1xuLS0tLS0tLS0tLS0tLS0tLS0tJyk7CiAgICBmb3IgKE9iamVjdCBvIGluIHN0YWNrLnZhbHVlcykgewogICAgICBTdHJpbmcgcyA9ICIgICRvIjsKICAgICAgaW50IGluZGV4ID0gcy5pbmRleE9mKCJcbiIpOwogICAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgICBzID0gcy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgIi4uLiI7CiAgICAgIH0KICAgICAgcHJpbnQocyk7CiAgICB9CiAgICBwcmludCgiICA+PiAkbmFtZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBsb2dFdmVudChTdHJpbmcgbmFtZSkgewogICAgcHJpbnRFdmVudChuYW1lKTsKICAgIHVuaGFuZGxlZChuYW1lLCAiJHJ1bnRpbWVUeXBlIiwgLTEsIHVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIElkZW50aWZpZXJDb250ZXh0IGNvbnRleHQpIHsKICAgIGRlYnVnRXZlbnQoImhhbmRsZUlkZW50aWZpZXIiKTsKICAgIGlmICghdG9rZW4uaXNTeW50aGV0aWMpIHsKICAgICAgcHVzaCh0b2tlbi5sZXhlbWUpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVGhpcyBjb21lcyBmcm9tIGEgc3ludGhldGljIHRva2VuIHdoaWNoIGlzIGluc2VydGVkIGJ5IHRoZSBwYXJzZXIgaW4KICAgICAgLy8gYW4gYXR0ZW1wdCB0byByZWNvdmVyLiAgVGhpcyBhbG1vc3QgYWx3YXlzIG1lYW5zIHRoYXQgdGhlIHBhcnNlciBoYXMKICAgICAgLy8gZ290dGVuIHZlcnkgY29uZnVzZWQgYW5kIHdlIG5lZWQgdG8gaWdub3JlIHRoZSByZXN1bHRzLgogICAgICBwdXNoKG5ldyBQYXJzZXJSZWNvdmVyeSh0b2tlbi5jaGFyT2Zmc2V0KSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vTmFtZShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9OYW1lIik7CiAgICBwdXNoKE51bGxWYWx1ZS5JZGVudGlmaWVyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIkluaXRpYWxpemVyIik7CiAgfQoKICB2b2lkIGNoZWNrRW1wdHkoaW50IGNoYXJPZmZzZXQpIHsKICAgIGlmIChzdGFjay5pc05vdEVtcHR5KSB7CiAgICAgIGludGVybmFsUHJvYmxlbSgKICAgICAgICAgIHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtU3RhY2tOb3RFbXB0eS53aXRoQXJndW1lbnRzKAogICAgICAgICAgICAgICIke3J1bnRpbWVUeXBlfSIsIHN0YWNrLnZhbHVlcy5qb2luKCJcbiAgIikpLAogICAgICAgICAgY2hhck9mZnNldCwKICAgICAgICAgIHVyaSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFRvcExldmVsRGVjbGFyYXRpb24oVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIlRvcExldmVsRGVjbGFyYXRpb24iKTsKICAgIGNoZWNrRW1wdHkodG9rZW4uY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbXBpbGF0aW9uVW5pdChpbnQgY291bnQsIFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJDb21waWxhdGlvblVuaXQiKTsKICAgIGNoZWNrRW1wdHkodG9rZW4uY2hhck9mZnNldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzRXh0ZW5kcyhUb2tlbiBleHRlbmRzS2V5d29yZCkgewogICAgZGVidWdFdmVudCgiQ2xhc3NFeHRlbmRzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU1peGluT24oVG9rZW4gb25LZXl3b3JkLCBpbnQgdHlwZUNvdW50KSB7CiAgICBkZWJ1Z0V2ZW50KCJNaXhpbk9uIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzSGVhZGVyKFRva2VuIGJlZ2luLCBUb2tlbiBjbGFzc0tleXdvcmQsIFRva2VuIG5hdGl2ZVRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJDbGFzc0hlYWRlciIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVNaXhpbkhlYWRlcihUb2tlbiBtaXhpbktleXdvcmQpIHsKICAgIGRlYnVnRXZlbnQoIk1peGluSGVhZGVyIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVJlY292ZXJDbGFzc0hlYWRlcigpIHsKICAgIGRlYnVnRXZlbnQoIlJlY292ZXJDbGFzc0hlYWRlciIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVSZWNvdmVyTWl4aW5IZWFkZXIoKSB7CiAgICBkZWJ1Z0V2ZW50KCJSZWNvdmVyTWl4aW5IZWFkZXIiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NPck1peGluSW1wbGVtZW50cygKICAgICAgVG9rZW4gaW1wbGVtZW50c0tleXdvcmQsIGludCBpbnRlcmZhY2VzQ291bnQpIHsKICAgIGRlYnVnRXZlbnQoIkNsYXNzSW1wbGVtZW50cyIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb1R5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vVHlwZUFyZ3VtZW50cyIpOwogICAgcHVzaChOdWxsVmFsdWUuVHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vVHlwZVZhcmlhYmxlcyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9UeXBlVmFyaWFibGVzIik7CiAgICBwdXNoKE51bGxWYWx1ZS5UeXBlVmFyaWFibGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9Db25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiTm9Db25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cyIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb1R5cGUoVG9rZW4gbGFzdENvbnN1bWVkKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb1R5cGUiKTsKICAgIHB1c2goTnVsbFZhbHVlLlR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0Zvcm1hbFBhcmFtZXRlcnMoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgZGVidWdFdmVudCgiTm9Gb3JtYWxQYXJhbWV0ZXJzIik7CiAgICBwdXNoKE51bGxWYWx1ZS5Gb3JtYWxQYXJhbWV0ZXJzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9Bcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGRlYnVnRXZlbnQoIk5vQXJndW1lbnRzIik7CiAgICBwdXNoKE51bGxWYWx1ZS5Bcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHkoVG9rZW4gbmF0aXZlVG9rZW4sIFRva2VuIHNlbWljb2xvbikgewogICAgZGVidWdFdmVudCgiTmF0aXZlRnVuY3Rpb25Cb2R5Iik7CiAgICBwdXNoKE51bGxWYWx1ZS5GdW5jdGlvbkJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlJZ25vcmVkKFRva2VuIG5hdGl2ZVRva2VuLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGRlYnVnRXZlbnQoIk5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWQiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5U2tpcHBlZChUb2tlbiBuYXRpdmVUb2tlbiwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYXRpdmVGdW5jdGlvbkJvZHlTa2lwcGVkIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vRnVuY3Rpb25Cb2R5KFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb0Z1bmN0aW9uQm9keSIpOwogICAgcHVzaChOdWxsVmFsdWUuRnVuY3Rpb25Cb2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9Jbml0aWFsaXplcnMoKSB7CiAgICBkZWJ1Z0V2ZW50KCJOb0luaXRpYWxpemVycyIpOwogICAgcHVzaChOdWxsVmFsdWUuSW5pdGlhbGl6ZXJzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUGFyZW50aGVzaXplZENvbmRpdGlvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiaGFuZGxlUGFyZW50aGVzaXplZENvbmRpdGlvbiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVQYXJlbnRoZXNpemVkRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiUGFyZW50aGVzaXplZEV4cHJlc3Npb24iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5MaXRlcmFsU3RyaW5nKFRva2VuIHRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJiZWdpbkxpdGVyYWxTdHJpbmciKTsKICAgIHB1c2godG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRMaXRlcmFsU3RyaW5nKGludCBpbnRlcnBvbGF0aW9uQ291bnQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBkZWJ1Z0V2ZW50KCJlbmRMaXRlcmFsU3RyaW5nIik7CiAgICBpZiAoaW50ZXJwb2xhdGlvbkNvdW50ID09IDApIHsKICAgICAgVG9rZW4gdG9rZW4gPSBwb3AoKTsKICAgICAgcHVzaCh1bmVzY2FwZVN0cmluZyh0b2tlbi5sZXhlbWUsIHRva2VuLCB0aGlzKSk7CiAgICB9IGVsc2UgewogICAgICB1bmltcGxlbWVudGVkKCJzdHJpbmcgaW50ZXJwb2xhdGlvbiIsIGVuZFRva2VuLmNoYXJPZmZzZXQsIHVyaSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUNsYXVzZShUb2tlbiBuYXRpdmVUb2tlbiwgYm9vbCBoYXNOYW1lKSB7CiAgICBkZWJ1Z0V2ZW50KCJOYXRpdmVDbGF1c2UiKTsKICAgIGlmIChoYXNOYW1lKSB7CiAgICAgIHBvcCgpOyAvLyBQb3AgdGhlIG5hdGl2ZSBuYW1lIHdoaWNoIGlzIGEgU3RyaW5nLgogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVEaXJlY3RpdmVzT25seSgpIHsKICAgIHBvcCgpOyAvLyBEaXNjYXJkIHRoZSBtZXRhZGF0YS4KICB9CgogIHZvaWQgaGFuZGxlRXh0cmFuZW91c0V4cHJlc3Npb24oVG9rZW4gdG9rZW4sIE1lc3NhZ2UgbWVzc2FnZSkgewogICAgZGVidWdFdmVudCgiRXh0cmFuZW91c0V4cHJlc3Npb24iKTsKICAgIHBvcCgpOyAvLyBEaXNjYXJkIHRoZSBleHRyYW5lb3VzIGV4cHJlc3Npb24uCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENhc2VFeHByZXNzaW9uKFRva2VuIGNvbG9uKSB7CiAgICBkZWJ1Z0V2ZW50KCJDYXNlRXhwcmVzc2lvbiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDYXRjaENsYXVzZShUb2tlbiB0b2tlbikgewogICAgZGVidWdFdmVudCgiQ2F0Y2hDbGF1c2UiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBUb2tlbiBzdGFydFRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgZGVidWdFdmVudCgiRXJyb3I6ICR7bWVzc2FnZS5tZXNzYWdlfSIpOwogICAgaWYgKGlzSWdub3JlZEVycm9yKG1lc3NhZ2UuY29kZSwgc3RhcnRUb2tlbikpIHJldHVybjsKICAgIGFkZFByb2JsZW0obWVzc2FnZSwgb2Zmc2V0Rm9yVG9rZW4oc3RhcnRUb2tlbiksCiAgICAgICAgbGVuZ3RoT2ZTcGFuKHN0YXJ0VG9rZW4sIGVuZFRva2VuKSk7CiAgfQoKICBib29sIGlzSWdub3JlZEVycm9yKENvZGU8ZHluYW1pYz4gY29kZSwgVG9rZW4gdG9rZW4pIHsKICAgIGlmIChjb2RlID09IGNvZGVOYXRpdmVDbGF1c2VTaG91bGRCZUFubm90YXRpb24pIHsKICAgICAgLy8gVE9ETyhkYW5ydWJlbCk6IElnbm9yZSB0aGlzIGVycm9yIHVudGlsIHdlIGRlcHJlY2F0ZSBgbmF0aXZlYAogICAgICAvLyBzdXBwb3J0LgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSBpZiAoY29kZSA9PSBjb2RlQ2F0Y2hTeW50YXhFeHRyYVBhcmFtZXRlcnMpIHsKICAgICAgLy8gSWdub3JlZC4gVGhpcyBlcnJvciBpcyBoYW5kbGVkIGJ5IHRoZSBCb2R5QnVpbGRlci4KICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVVuZXNjYXBlRXJyb3IoCiAgICAgIE1lc3NhZ2UgbWVzc2FnZSwgVG9rZW4gdG9rZW4sIGludCBzdHJpbmdPZmZzZXQsIGludCBsZW5ndGgpIHsKICAgIGFkZFByb2JsZW0obWVzc2FnZSwgdG9rZW4uY2hhck9mZnNldCArIHN0cmluZ09mZnNldCwgbGVuZ3RoKTsKICB9CgogIHZvaWQgYWRkUHJvYmxlbShNZXNzYWdlIG1lc3NhZ2UsIGludCBjaGFyT2Zmc2V0LCBpbnQgbGVuZ3RoLAogICAgICB7Ym9vbCB3YXNIYW5kbGVkOiBmYWxzZSwgTGlzdDxMb2NhdGVkTWVzc2FnZT4gY29udGV4dH0pOwp9CgpjbGFzcyBTdGFjayB7CiAgTGlzdDxPYmplY3Q+IGFycmF5ID0gbmV3IExpc3Q8T2JqZWN0Pig4KTsKICBpbnQgYXJyYXlMZW5ndGggPSAwOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IGFycmF5TGVuZ3RoID4gMDsKCiAgaW50IGdldCBsZW5ndGggPT4gYXJyYXlMZW5ndGg7CgogIE9iamVjdCBnZXQgbGFzdCB7CiAgICBmaW5hbCB2YWx1ZSA9IGFycmF5W2FycmF5TGVuZ3RoIC0gMV07CiAgICByZXR1cm4gdmFsdWUgaXMgTnVsbFZhbHVlID8gbnVsbCA6IHZhbHVlOwogIH0KCiAgdm9pZCBwdXNoKE9iamVjdCB2YWx1ZSkgewogICAgYXJyYXlbYXJyYXlMZW5ndGgrK10gPSB2YWx1ZTsKICAgIGlmIChhcnJheS5sZW5ndGggPT0gYXJyYXlMZW5ndGgpIHsKICAgICAgX2dyb3coKTsKICAgIH0KICB9CgogIE9iamVjdCBwb3AoTnVsbFZhbHVlIG51bGxWYWx1ZSkgewogICAgYXNzZXJ0KGFycmF5TGVuZ3RoID4gMCk7CiAgICBmaW5hbCBPYmplY3QgdmFsdWUgPSBhcnJheVstLWFycmF5TGVuZ3RoXTsKICAgIGFycmF5W2FycmF5TGVuZ3RoXSA9IG51bGw7CiAgICBpZiAodmFsdWUgaXMhIE51bGxWYWx1ZSkgewogICAgICByZXR1cm4gdmFsdWU7CiAgICB9IGVsc2UgaWYgKG51bGxWYWx1ZSA9PSBudWxsIHx8IHZhbHVlID09IG51bGxWYWx1ZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICB9CgogIExpc3Q8T2JqZWN0PiBwb3BMaXN0KGludCBjb3VudCwgTGlzdDxPYmplY3Q+IGxpc3QsIE51bGxWYWx1ZSBudWxsVmFsdWUpIHsKICAgIGFzc2VydChhcnJheUxlbmd0aCA+PSBjb3VudCk7CiAgICBmaW5hbCBMaXN0PE9iamVjdD4gYXJyYXkgPSB0aGlzLmFycmF5OwogICAgZmluYWwgaW50IGxlbmd0aCA9IGFycmF5TGVuZ3RoOwogICAgZmluYWwgaW50IHN0YXJ0SW5kZXggPSBsZW5ndGggLSBjb3VudDsKICAgIGJvb2wgaXNQYXJzZXJSZWNvdmVyeSA9IGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGludCBhcnJheUluZGV4ID0gc3RhcnRJbmRleCArIGk7CiAgICAgIGZpbmFsIE9iamVjdCB2YWx1ZSA9IGFycmF5W2FycmF5SW5kZXhdOwogICAgICBhcnJheVthcnJheUluZGV4XSA9IG51bGw7CiAgICAgIGlmICh2YWx1ZSBpcyBOdWxsVmFsdWUgJiYgbnVsbFZhbHVlID09IG51bGwgfHwKICAgICAgICAgIGlkZW50aWNhbCh2YWx1ZSwgbnVsbFZhbHVlKSkgewogICAgICAgIGxpc3RbaV0gPSBudWxsOwogICAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIFBhcnNlclJlY292ZXJ5KSB7CiAgICAgICAgaXNQYXJzZXJSZWNvdmVyeSA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHZhbHVlIGlzIE51bGxWYWx1ZSkgewogICAgICAgICAgcHJpbnQodmFsdWUpOwogICAgICAgIH0KICAgICAgICBsaXN0W2ldID0gdmFsdWU7CiAgICAgIH0KICAgIH0KICAgIGFycmF5TGVuZ3RoIC09IGNvdW50OwoKICAgIHJldHVybiBpc1BhcnNlclJlY292ZXJ5ID8gbnVsbCA6IGxpc3Q7CiAgfQoKICBMaXN0PE9iamVjdD4gZ2V0IHZhbHVlcyB7CiAgICBmaW5hbCBpbnQgbGVuZ3RoID0gYXJyYXlMZW5ndGg7CiAgICBmaW5hbCBMaXN0PE9iamVjdD4gbGlzdCA9IG5ldyBMaXN0PE9iamVjdD4obGVuZ3RoKTsKICAgIGxpc3Quc2V0UmFuZ2UoMCwgbGVuZ3RoLCBhcnJheSk7CiAgICByZXR1cm4gbGlzdDsKICB9CgogIHZvaWQgX2dyb3coKSB7CiAgICBmaW5hbCBpbnQgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOwogICAgZmluYWwgTGlzdDxPYmplY3Q+IG5ld0FycmF5ID0gbmV3IExpc3Q8T2JqZWN0PihsZW5ndGggKiAyKTsKICAgIG5ld0FycmF5LnNldFJhbmdlKDAsIGxlbmd0aCwgYXJyYXksIDApOwogICAgYXJyYXkgPSBuZXdBcnJheTsKICB9Cn0KCi8vLyBIZWxwZXIgY29uc3RhbnQgZm9yIHBvcHBpbmcgYSBsaXN0IG9mIHRoZSB0b3Agb2YgYSBbU3RhY2tdLiAgVGhpcyBoZWxwZXIKLy8vIHJldHVybnMgbnVsbCBpbnN0ZWFkIG9mIGVtcHR5IGxpc3RzLCBhbmQgdGhlIGxpc3RzIHJldHVybmVkIGFyZSBvZiBmaXhlZAovLy8gbGVuZ3RoLgpjbGFzcyBGaXhlZE51bGxhYmxlTGlzdDxUPiB7CiAgY29uc3QgRml4ZWROdWxsYWJsZUxpc3QoKTsKCiAgTGlzdDxUPiBwb3AoU3RhY2sgc3RhY2ssIGludCBjb3VudCwgW051bGxWYWx1ZSBudWxsVmFsdWVdKSB7CiAgICBpZiAoY291bnQgPT0gMCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gc3RhY2sucG9wTGlzdChjb3VudCwgbmV3IExpc3Q8VD4oY291bnQpLCBudWxsVmFsdWUpOwogIH0KCiAgTGlzdDxUPiBwb3BQYWRkZWQoU3RhY2sgc3RhY2ssIGludCBjb3VudCwgaW50IHBhZGRpbmcsCiAgICAgIFtOdWxsVmFsdWUgbnVsbFZhbHVlXSkgewogICAgaWYgKGNvdW50ICsgcGFkZGluZyA9PSAwKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBzdGFjay5wb3BMaXN0KGNvdW50LCBuZXcgTGlzdDxUPihjb3VudCArIHBhZGRpbmcpLCBudWxsVmFsdWUpOwogIH0KfQoKLy8vIEhlbHBlciBjb25zdGFudCBmb3IgcG9wcGluZyBhIGxpc3Qgb2YgdGhlIHRvcCBvZiBhIFtTdGFja10uICBUaGlzIGhlbHBlcgovLy8gcmV0dXJucyBncm93YWJsZSBsaXN0cyAoYWxzbyB3aGVuIGVtcHR5KS4KY2xhc3MgR3Jvd2FibGVMaXN0PFQ+IHsKICBjb25zdCBHcm93YWJsZUxpc3QoKTsKCiAgTGlzdDxUPiBwb3AoU3RhY2sgc3RhY2ssIGludCBjb3VudCwgW051bGxWYWx1ZSBudWxsVmFsdWVdKSB7CiAgICByZXR1cm4gc3RhY2sucG9wTGlzdCgKICAgICAgICBjb3VudCwgbmV3IExpc3Q8VD4uZmlsbGVkKGNvdW50LCBudWxsLCBncm93YWJsZTogdHJ1ZSksIG51bGxWYWx1ZSk7CiAgfQp9CgpjbGFzcyBQYXJzZXJSZWNvdmVyeSB7CiAgZmluYWwgaW50IGNoYXJPZmZzZXQ7CiAgUGFyc2VyUmVjb3ZlcnkodGhpcy5jaGFyT2Zmc2V0KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlBhcnNlclJlY292ZXJ5KEAkY2hhck9mZnNldCkiOwp9CoJgAE5OPAEeASE6AR0JDhgRKCwuARhFAUMBGkEBLAElARsBEQ0GDgkPEw8MEx8jGzYSDBgOERQUEBoZDhIQCgwNCBkKEQ8JCBETDBARGA4CATAjAUxRRAZRUA84NCAGARlFOikdMCgbCg8ZCAYULAErDhwWKTAKCAEyLCQ2ChUIATMsJDYKFQgBUiZLPDs6EQopGBgoIygRKQofMjkbExsMKS8RHhsTGwwbChYIATQbSiYfSQ8XCAYUBAEMDwEYIg0GBAFQGxdGMwQBUBsbMQQBUBs1MwQBUBtDAVEhPTsEARs6FgQBPDQEATkBJiEEASYpBAEhGQQBISMlGSMZKwgQBhkEAQwfFi4EAQxCJB4aDU5OQTIGBAEMIxogBAEMJR8EASQcFz48FhAGBAEMLSciBAEMNCMiBAEMMiAEAQw3GwQBDE8fBAEMLx8EAQwkJgQBDCQmBAEMJTYjBAEMLCMjBAEMLCMjBAEMUUgEAQwqGhoEAQxAJiYEAQwoHx8EAQxGJiIEAQxNLQQBDE0tBAEMKyIiBAEMICIiBAEMMzAEAQw0KwQBDCkmEQQBDEIkIxs3DUcGBAEMPSATNwYEAQwgJAQBQigxBAEMKCIEAQwlHwQBDB87LTo0LQQBOTZHEhM5PBMNFAYEAQwcREIEAT8/AgEOLBcBKgEhARQqLgQBHCInDwYEASQdLx8fFDoTDRQGBAFMIiskKyMmJy4gNSkYLCEPIhgKGQgGGgErBAEcJDglEQQBESVALBYEAgFNTQwdHQE/IUAEATkfK0oEAgFNLhgYAT8aTAQCARcYIwE3AgE2cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS9zdGFja19saXN0ZW5lci5kYXJ0UXNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX2NvbnN0cmFpbnRfZ2F0aGVyZXIuZGFydMAASpQvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLm1kIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JwogICAgc2hvdwogICAgICAgIENsYXNzLAogICAgICAgIERhcnRUeXBlLAogICAgICAgIER5bmFtaWNUeXBlLAogICAgICAgIEZ1bmN0aW9uVHlwZSwKICAgICAgICBJbnRlcmZhY2VUeXBlLAogICAgICAgIE1lbWJlciwKICAgICAgICBOYW1lLAogICAgICAgIE5hbWVkVHlwZSwKICAgICAgICBQcm9jZWR1cmUsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBWb2lkVHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIHNob3cgc3Vic3RpdHV0ZSwgU3Vic3RpdHV0aW9uOwoKaW1wb3J0ICd0eXBlX3NjaGVtYS5kYXJ0JyBzaG93IFVua25vd25UeXBlOwoKaW1wb3J0ICd0eXBlX3NjaGVtYV9lbnZpcm9ubWVudC5kYXJ0JwogICAgc2hvdyBUeXBlQ29uc3RyYWludCwgVHlwZVNjaGVtYUVudmlyb25tZW50LCBzdWJzdGl0dXRlVHlwZVBhcmFtczsKCmltcG9ydCAnLi4vbmFtZXMuZGFydCcgc2hvdyBjYWxsTmFtZTsKCmltcG9ydCAndHlwZV9zY2hlbWEuZGFydCc7CgppbXBvcnQgJ3R5cGVfc2NoZW1hX2Vudmlyb25tZW50LmRhcnQnOwoKLy8vIENyZWF0ZXMgYSBjb2xsZWN0aW9uIG9mIFtUeXBlQ29uc3RyYWludF1zIGNvcnJlc3BvbmRpbmcgdG8gdHlwZSBwYXJhbWV0ZXJzLAovLy8gYmFzZWQgb24gYW4gYXR0ZW1wdCB0byBtYWtlIG9uZSB0eXBlIHNjaGVtYSBhIHN1YnR5cGUgb2YgYW5vdGhlci4KYWJzdHJhY3QgY2xhc3MgVHlwZUNvbnN0cmFpbnRHYXRoZXJlciB7CiAgZmluYWwgX3Byb3RvQ29uc3RyYWludHMgPSA8X1Byb3RvQ29uc3RyYWludD5bXTsKCiAgZmluYWwgTGlzdDxUeXBlUGFyYW1ldGVyPiBfcGFyYW1ldGVyc1RvQ29uc3RyYWluOwoKICAvLy8gQ3JlYXRlcyBhIFtUeXBlQ29uc3RyYWludEdhdGhlcmVyXSB3aGljaCBpcyBwcmVwYXJlZCB0byBnYXRoZXIgdHlwZQogIC8vLyBjb25zdHJhaW50cyBmb3IgdGhlIGdpdmVuIFt0eXBlUGFyYW1ldGVyc10uCiAgVHlwZUNvbnN0cmFpbnRHYXRoZXJlci5zdWJjbGFzc2luZyhJdGVyYWJsZTxUeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycykKICAgICAgOiBfcGFyYW1ldGVyc1RvQ29uc3RyYWluID0gdHlwZVBhcmFtZXRlcnMudG9MaXN0KCk7CgogIGZhY3RvcnkgVHlwZUNvbnN0cmFpbnRHYXRoZXJlcihUeXBlU2NoZW1hRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIEl0ZXJhYmxlPFR5cGVQYXJhbWV0ZXI+IHR5cGVQYXJhbWV0ZXJzKSB7CiAgICByZXR1cm4gbmV3IFR5cGVTY2hlbWFDb25zdHJhaW50R2F0aGVyZXIoZW52aXJvbm1lbnQsIHR5cGVQYXJhbWV0ZXJzKTsKICB9CgogIENsYXNzIGdldCBvYmplY3RDbGFzczsKCiAgQ2xhc3MgZ2V0IGZ1bmN0aW9uQ2xhc3M7CgogIENsYXNzIGdldCBmdXR1cmVPckNsYXNzOwoKICBDbGFzcyBnZXQgbnVsbENsYXNzOwoKICB2b2lkIGFkZFVwcGVyQm91bmQoVHlwZUNvbnN0cmFpbnQgY29uc3RyYWludCwgRGFydFR5cGUgdXBwZXIpOwoKICB2b2lkIGFkZExvd2VyQm91bmQoVHlwZUNvbnN0cmFpbnQgY29uc3RyYWludCwgRGFydFR5cGUgbG93ZXIpOwoKICBNZW1iZXIgZ2V0SW50ZXJmYWNlTWVtYmVyKENsYXNzIGNsYXNzXywgTmFtZSBuYW1lLCB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSk7CgogIEludGVyZmFjZVR5cGUgZ2V0VHlwZUFzSW5zdGFuY2VPZihJbnRlcmZhY2VUeXBlIHR5cGUsIENsYXNzIHN1cGVyY2xhc3MpOwoKICBJbnRlcmZhY2VUeXBlIGZ1dHVyZVR5cGUoRGFydFR5cGUgdHlwZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBzZXQgb2YgdHlwZSBjb25zdHJhaW50cyB0aGF0IHdhcyBnYXRoZXJlZC4KICBNYXA8VHlwZVBhcmFtZXRlciwgVHlwZUNvbnN0cmFpbnQ+IGNvbXB1dGVDb25zdHJhaW50cygpIHsKICAgIHZhciByZXN1bHQgPSA8VHlwZVBhcmFtZXRlciwgVHlwZUNvbnN0cmFpbnQ+e307CiAgICBmb3IgKHZhciBwYXJhbWV0ZXIgaW4gX3BhcmFtZXRlcnNUb0NvbnN0cmFpbikgewogICAgICByZXN1bHRbcGFyYW1ldGVyXSA9IG5ldyBUeXBlQ29uc3RyYWludCgpOwogICAgfQogICAgZm9yICh2YXIgcHJvdG9Db25zdHJhaW50IGluIF9wcm90b0NvbnN0cmFpbnRzKSB7CiAgICAgIGlmIChwcm90b0NvbnN0cmFpbnQuaXNVcHBlcikgewogICAgICAgIGFkZFVwcGVyQm91bmQocmVzdWx0W3Byb3RvQ29uc3RyYWludC5wYXJhbWV0ZXJdLCBwcm90b0NvbnN0cmFpbnQuYm91bmQpOwogICAgICB9IGVsc2UgewogICAgICAgIGFkZExvd2VyQm91bmQocmVzdWx0W3Byb3RvQ29uc3RyYWludC5wYXJhbWV0ZXJdLCBwcm90b0NvbnN0cmFpbnQuYm91bmQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFRyaWVzIHRvIG1hdGNoIFtzdWJ0eXBlXSBhZ2FpbnN0IFtzdXBlcnR5cGVdLgogIC8vLwogIC8vLyBJZiB0aGUgbWF0Y2ggc3VjY2VlZHMsIHRoZSByZXN1bHRpbmcgdHlwZSBjb25zdHJhaW50cyBhcmUgcmVjb3JkZWQgZm9yCiAgLy8vIGxhdGVyIHVzZSBieSBbY29tcHV0ZUNvbnN0cmFpbnRzXS4gIElmIHRoZSBtYXRjaCBmYWlscywgdGhlIHNldCBvZiB0eXBlCiAgLy8vIGNvbnN0cmFpbnRzIGlzIHVuY2hhbmdlZC4KICBib29sIHRyeVN1YnR5cGVNYXRjaChEYXJ0VHlwZSBzdWJ0eXBlLCBEYXJ0VHlwZSBzdXBlcnR5cGUpIHsKICAgIGludCBvbGRQcm90b0NvbnN0cmFpbnRzTGVuZ3RoID0gX3Byb3RvQ29uc3RyYWludHMubGVuZ3RoOwogICAgYm9vbCBpc01hdGNoID0gX2lzU3VidHlwZU1hdGNoKHN1YnR5cGUsIHN1cGVydHlwZSk7CiAgICBpZiAoIWlzTWF0Y2gpIHsKICAgICAgX3Byb3RvQ29uc3RyYWludHMubGVuZ3RoID0gb2xkUHJvdG9Db25zdHJhaW50c0xlbmd0aDsKICAgIH0KICAgIHJldHVybiBpc01hdGNoOwogIH0KCiAgdm9pZCBfY29uc3RyYWluTG93ZXIoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIERhcnRUeXBlIGxvd2VyKSB7CiAgICBfcHJvdG9Db25zdHJhaW50cy5hZGQobmV3IF9Qcm90b0NvbnN0cmFpbnQubG93ZXIocGFyYW1ldGVyLCBsb3dlcikpOwogIH0KCiAgdm9pZCBfY29uc3RyYWluVXBwZXIoVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIsIERhcnRUeXBlIHVwcGVyKSB7CiAgICBfcHJvdG9Db25zdHJhaW50cy5hZGQobmV3IF9Qcm90b0NvbnN0cmFpbnQudXBwZXIocGFyYW1ldGVyLCB1cHBlcikpOwogIH0KCiAgYm9vbCBfaXNGdW5jdGlvblN1YnR5cGVNYXRjaChGdW5jdGlvblR5cGUgc3VidHlwZSwgRnVuY3Rpb25UeXBlIHN1cGVydHlwZSkgewogICAgLy8gQSBmdW5jdGlvbiB0eXBlIGAoTTAsLi4uLCBNbiwgW017bisxfSwgLi4uLCBNbV0pIC0+IFIwYCBpcyBhIHN1YnR5cGUKICAgIC8vIG1hdGNoIGZvciBhIGZ1bmN0aW9uIHR5cGUgYChOMCwuLi4sIE5rLCBbTntrKzF9LCAuLi4sIE5yXSkgLT4gUjFgIHdpdGgKICAgIC8vIHJlc3BlY3QgdG8gYExgIHVuZGVyIGNvbnN0cmFpbnRzIGBDMCArIC4uLiArIENyICsgQ2AKICAgIC8vIC0gSWYgYFIwYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGEgdHlwZSBgUjFgIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIKICAgIC8vICAgY29uc3RyYWludHMgYENgOgogICAgLy8gLSBJZiBgbiA8PSBrYCBhbmQgYHIgPD0gbWAuCiAgICAvLyAtIEFuZCBmb3IgYGlgIGluIGAwLi4ucmAsIGBOaWAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgTWlgIHdpdGggcmVzcGVjdAogICAgLy8gICB0byBgTGAgdW5kZXIgY29uc3RyYWludHMgYENpYC4KICAgIC8vIEZ1bmN0aW9uIHR5cGVzIHdpdGggbmFtZWQgcGFyYW1ldGVycyBhcmUgdHJlYXRlZCBhbmFsb2dvdXNseSB0byB0aGUKICAgIC8vIHBvc2l0aW9uYWwgcGFyYW1ldGVyIGNhc2UgYWJvdmUuCiAgICAvLyBBIGdlbmVyaWMgZnVuY3Rpb24gdHlwZSBgPFQwIGV4dGVuZHMgQjAsIC4uLiwgVG4gZXh0ZW5kcyBCbj5GMGAgaXMgYQogICAgLy8gc3VidHlwZSBtYXRjaCBmb3IgYSBnZW5lcmljIGZ1bmN0aW9uIHR5cGUgYDxTMCBleHRlbmRzIEIwLCAuLi4sIFNuCiAgICAvLyBleHRlbmRzIEJuPkYxYCB3aXRoIHJlc3BlY3QgdG8gYExgIHVuZGVyIGNvbnN0cmFpbnRzIGBDbGA6CiAgICAvLyAtIElmIGBGMFtaMC9UMCwgLi4uLCBabi9Ubl1gIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYEYwW1owL1MwLCAuLi4sCiAgICAvLyAgIFpuL1NuXWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlciBjb25zdHJhaW50cyBgQ2AsIHdoZXJlIGVhY2ggYFppYCBpcyBhCiAgICAvLyAgIGZyZXNoIHR5cGUgdmFyaWFibGUgd2l0aCBib3VuZCBgQmlgLgogICAgLy8gLSBBbmQgYENsYCBpcyBgQ2Agd2l0aCBlYWNoIGNvbnN0cmFpbnQgcmVwbGFjZWQgd2l0aCBpdHMgY2xvc3VyZSB3aXRoCiAgICAvLyAgIHJlc3BlY3QgdG8gYFtaMCwgLi4uLCBabl1gLgogICAgaWYgKHN1YnR5cGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA+IHN1cGVydHlwZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChzdWJ0eXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCA8CiAgICAgICAgc3VwZXJ0eXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoc3VidHlwZS50eXBlUGFyYW1ldGVycy5sZW5ndGggIT0gc3VwZXJ0eXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoc3VidHlwZS50eXBlUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIHZhciBzdWJ0eXBlU3Vic3RpdHV0aW9uID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgICB2YXIgc3VwZXJ0eXBlU3Vic3RpdHV0aW9uID0gPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPnt9OwogICAgICB2YXIgZnJlc2hUeXBlVmFyaWFibGVzID0gPFR5cGVQYXJhbWV0ZXI+W107CiAgICAgIGlmICghX21hdGNoVHlwZUZvcm1hbHMoc3VidHlwZS50eXBlUGFyYW1ldGVycywgc3VwZXJ0eXBlLnR5cGVQYXJhbWV0ZXJzLAogICAgICAgICAgc3VidHlwZVN1YnN0aXR1dGlvbiwgc3VwZXJ0eXBlU3Vic3RpdHV0aW9uLCBmcmVzaFR5cGVWYXJpYWJsZXMpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgICBzdWJ0eXBlID0gc3Vic3RpdHV0ZVR5cGVQYXJhbXMoCiAgICAgICAgICBzdWJ0eXBlLCBzdWJ0eXBlU3Vic3RpdHV0aW9uLCBmcmVzaFR5cGVWYXJpYWJsZXMpOwogICAgICBzdXBlcnR5cGUgPSBzdWJzdGl0dXRlVHlwZVBhcmFtcygKICAgICAgICAgIHN1cGVydHlwZSwgc3VwZXJ0eXBlU3Vic3RpdHV0aW9uLCBmcmVzaFR5cGVWYXJpYWJsZXMpOwogICAgfQoKICAgIC8vIFRlc3QgdGhlIHJldHVybiB0eXBlcy4KICAgIGlmIChzdXBlcnR5cGUucmV0dXJuVHlwZSBpcyEgVm9pZFR5cGUgJiYKICAgICAgICAhX2lzU3VidHlwZU1hdGNoKHN1YnR5cGUucmV0dXJuVHlwZSwgc3VwZXJ0eXBlLnJldHVyblR5cGUpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvLyBUZXN0IHRoZSBwYXJhbWV0ZXIgdHlwZXMuCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1cGVydHlwZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICB2YXIgc3VwZXJ0eXBlUGFyYW1ldGVyID0gc3VwZXJ0eXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICB2YXIgc3VidHlwZVBhcmFtZXRlciA9IHN1YnR5cGUucG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICAgIC8vIFRlcm1pbmF0aW9uOiBCb3RoIHR5cGVzIHNocmluayBpbiBzaXplLgogICAgICBpZiAoIV9pc1N1YnR5cGVNYXRjaChzdXBlcnR5cGVQYXJhbWV0ZXIsIHN1YnR5cGVQYXJhbWV0ZXIpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpbnQgc3VidHlwZU5hbWVJbmRleCA9IDA7CiAgICBmb3IgKE5hbWVkVHlwZSBzdXBlcnR5cGVQYXJhbWV0ZXIgaW4gc3VwZXJ0eXBlLm5hbWVkUGFyYW1ldGVycykgewogICAgICB3aGlsZSAoc3VidHlwZU5hbWVJbmRleCA8IHN1YnR5cGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCAmJgogICAgICAgICAgc3VidHlwZS5uYW1lZFBhcmFtZXRlcnNbc3VidHlwZU5hbWVJbmRleF0ubmFtZSAhPQogICAgICAgICAgICAgIHN1cGVydHlwZVBhcmFtZXRlci5uYW1lKSB7CiAgICAgICAgKytzdWJ0eXBlTmFtZUluZGV4OwogICAgICB9CiAgICAgIGlmIChzdWJ0eXBlTmFtZUluZGV4ID09IHN1YnR5cGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgICBOYW1lZFR5cGUgc3VidHlwZVBhcmFtZXRlciA9IHN1YnR5cGUubmFtZWRQYXJhbWV0ZXJzW3N1YnR5cGVOYW1lSW5kZXhdOwogICAgICAvLyBUZXJtaW5hdGlvbjogQm90aCB0eXBlcyBzaHJpbmsgaW4gc2l6ZS4KICAgICAgaWYgKCFfaXNTdWJ0eXBlTWF0Y2goc3VwZXJ0eXBlUGFyYW1ldGVyLnR5cGUsIHN1YnR5cGVQYXJhbWV0ZXIudHlwZSkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCBfaXNJbnRlcmZhY2VTdWJ0eXBlTWF0Y2goCiAgICAgIEludGVyZmFjZVR5cGUgc3VidHlwZSwgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUpIHsKICAgIC8vIEEgdHlwZSBgUDxNMCwgLi4uLCBNaz5gIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYFA8TjAsIC4uLiwgTms+YCB3aXRoCiAgICAvLyByZXNwZWN0IHRvIGBMYCB1bmRlciBjb25zdHJhaW50cyBgQzAgKyAuLi4gKyBDa2A6CiAgICAvLyAtIElmIGBNaWAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgTmlgIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIKICAgIC8vICAgY29uc3RyYWludHMgYENpYC4KICAgIC8vIEEgdHlwZSBgUDxNMCwgLi4uLCBNaz5gIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYFE8TjAsIC4uLiwgTmo+YCB3aXRoCiAgICAvLyByZXNwZWN0IHRvIGBMYCB1bmRlciBjb25zdHJhaW50cyBgQ2A6CiAgICAvLyAtIElmIGBSPEIwLCAuLi4sIEJqPmAgaXMgdGhlIHN1cGVyY2xhc3Mgb2YgYFA8TTAsIC4uLiwgTWs+YCBhbmQgYFI8QjAsCiAgICAvLyAgIC4uLiwgQmo+YCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBRPE4wLCAuLi4sIE5qPmAgd2l0aCByZXNwZWN0IHRvIGBMYAogICAgLy8gICB1bmRlciBjb25zdHJhaW50cyBgQ2AuCiAgICAvLyAtIE9yIGBSPEIwLCAuLi4sIEJqPmAgaXMgb25lIG9mIHRoZSBpbnRlcmZhY2VzIGltcGxlbWVudGVkIGJ5IGBQPE0wLCAuLi4sCiAgICAvLyAgIE1rPmAgKGNvbnNpZGVyZWQgaW4gbGV4aWNhbCBvcmRlcikgYW5kIGBSPEIwLCAuLi4sIEJqPmAgaXMgYSBzdWJ0eXBlCiAgICAvLyAgIG1hdGNoIGZvciBgUTxOMCwgLi4uLCBOaj5gIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIgY29uc3RyYWludHMgYENgLgogICAgLy8gLSBPciBgUjxCMCwgLi4uLCBCaj5gIGlzIGEgbWl4aW4gaW50byBgUDxNMCwgLi4uLCBNaz5gIChjb25zaWRlcmVkIGluCiAgICAvLyAgIGxleGljYWwgb3JkZXIpIGFuZCBgUjxCMCwgLi4uLCBCaj5gIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYFE8TjAsIC4uLiwKICAgIC8vICAgTmo+YCB3aXRoIHJlc3BlY3QgdG8gYExgIHVuZGVyIGNvbnN0cmFpbnRzIGBDYC4KCiAgICAvLyBOb3RlIHRoYXQgc2luY2Uga2VybmVsIHJlcXVpcmVzIHRoYXQgbm8gY2xhc3MgbWF5IG9ubHkgYXBwZWFyIGluIHRoZSBzZXQKICAgIC8vIG9mIHN1cGVydHlwZXMgb2YgYSBnaXZlbiB0eXBlIG1vcmUgdGhhbiBvbmNlLCB0aGUgb3JkZXIgb2YgdGhlIGNoZWNrcwogICAgLy8gYWJvdmUgaXMgaXJyZWxldmFudDsgd2UganVzdCBuZWVkIHRvIGZpbmQgdGhlIG1hdGNoZWQgc3VwZXJjbGFzcywKICAgIC8vIHN1YnN0aXR1dGUsIGFuZCB0aGVuIGl0ZXJhdGUgdGhyb3VnaCB0eXBlIHZhcmlhYmxlcy4KICAgIHZhciBtYXRjaGluZ1N1cGVydHlwZU9mU3VidHlwZSA9CiAgICAgICAgZ2V0VHlwZUFzSW5zdGFuY2VPZihzdWJ0eXBlLCBzdXBlcnR5cGUuY2xhc3NOb2RlKTsKICAgIGlmIChtYXRjaGluZ1N1cGVydHlwZU9mU3VidHlwZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN1cGVydHlwZS5jbGFzc05vZGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCFfaXNTdWJ0eXBlTWF0Y2gobWF0Y2hpbmdTdXBlcnR5cGVPZlN1YnR5cGUudHlwZUFyZ3VtZW50c1tpXSwKICAgICAgICAgIHN1cGVydHlwZS50eXBlQXJndW1lbnRzW2ldKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBib29sIF9pc051bGwoRGFydFR5cGUgdHlwZSkgewogICAgLy8gVE9ETyhwYXVsYmVycnkpOiB3b3VsZCBpdCBiZSBiZXR0ZXIgdG8gY2FsbCB0aGlzICJfaXNCb3R0b20iLCBhbmQgdG8gaGF2ZQogICAgLy8gaXQgcmV0dXJuIGB0cnVlYCBmb3IgYm90aCBOdWxsIGFuZCBib3R0b20gdHlwZXM/ICBSZXZpc2l0IHRoaXMgb25jZQogICAgLy8gZW5vdWdoIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQgdGhhdCB3ZSBjYW4gY29tcGFyZSB0aGUgYmVoYXZpb3Igd2l0aAogICAgLy8gdGhlIG9sZCBhbmFseXplci1iYXNlZCBpbXBsZW1lbnRhdGlvbi4KICAgIHJldHVybiB0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYgaWRlbnRpY2FsKHR5cGUuY2xhc3NOb2RlLCBudWxsQ2xhc3MpOwogIH0KCiAgLy8vIEF0dGVtcHRzIHRvIG1hdGNoIFtzdWJ0eXBlXSBhcyBhIHN1YnR5cGUgb2YgW3N1cGVydHlwZV0sIGdhdGhlcmluZyBhbnkKICAvLy8gY29uc3RyYWludHMgZGlzY292ZXJlZCBpbiB0aGUgcHJvY2Vzcy4KICAvLy8KICAvLy8gSWYgYSBzZXQgb2YgY29uc3RyYWludHMgd2FzIGZvdW5kLCBgdHJ1ZWAgaXMgcmV0dXJuZWQgYW5kIHRoZSBjYWxsZXIKICAvLy8gbWF5IHByb2NlZWQgdG8gY2FsbCBbY29tcHV0ZUNvbnN0cmFpbnRzXS4gIE90aGVyd2lzZSwgYGZhbHNlYCBpcyByZXR1cm5lZC4KICAvLy8KICAvLy8gSW4gdGhlIGNhc2Ugd2hlcmUgYGZhbHNlYCBpcyByZXR1cm5lZCwgc29tZSBib2d1cyBjb25zdHJhaW50cyBtYXkgaGF2ZQogIC8vLyBiZWVuIGFkZGVkIHRvIFtfcHJvdG9Db25zdHJhaW50c10uICBJdCBpcyB0aGUgY2FsbGVyJ3MgcmVzcG9uc2liaWxpdHkgdG8KICAvLy8gZGlzY2FyZCB0aGVtIGlmIG5lY2Vzc2FyeS4KICBib29sIF9pc1N1YnR5cGVNYXRjaChEYXJ0VHlwZSBzdWJ0eXBlLCBEYXJ0VHlwZSBzdXBlcnR5cGUpIHsKICAgIC8vIFRoZSB1bmtub3duIHR5cGUgYD9gIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYW55IHR5cGUgYFFgIHdpdGggbm8KICAgIC8vIGNvbnN0cmFpbnRzLgogICAgaWYgKHN1YnR5cGUgaXMgVW5rbm93blR5cGUpIHJldHVybiB0cnVlOwogICAgLy8gQW55IHR5cGUgYFBgIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgdGhlIHVua25vd24gdHlwZSBgP2Agd2l0aCBubwogICAgLy8gY29uc3RyYWludHMuCiAgICBpZiAoc3VwZXJ0eXBlIGlzIFVua25vd25UeXBlKSByZXR1cm4gdHJ1ZTsKICAgIC8vIEEgdHlwZSB2YXJpYWJsZSBgVGAgaW4gYExgIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYW55IHR5cGUgc2NoZW1hIGBRYDoKICAgIC8vIC0gVW5kZXIgY29uc3RyYWludCBgVCA8OiBRYC4KICAgIGlmIChzdWJ0eXBlIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgX3BhcmFtZXRlcnNUb0NvbnN0cmFpbi5jb250YWlucyhzdWJ0eXBlLnBhcmFtZXRlcikpIHsKICAgICAgX2NvbnN0cmFpblVwcGVyKHN1YnR5cGUucGFyYW1ldGVyLCBzdXBlcnR5cGUpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIC8vIEEgdHlwZSBzY2hlbWEgYFFgIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYSB0eXBlIHZhcmlhYmxlIGBUYCBpbiBgTGA6CiAgICAvLyAtIFVuZGVyIGNvbnN0cmFpbnQgYFEgPDogVGAuCiAgICBpZiAoc3VwZXJ0eXBlIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgX3BhcmFtZXRlcnNUb0NvbnN0cmFpbi5jb250YWlucyhzdXBlcnR5cGUucGFyYW1ldGVyKSkgewogICAgICBfY29uc3RyYWluTG93ZXIoc3VwZXJ0eXBlLnBhcmFtZXRlciwgc3VidHlwZSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgLy8gQW55IHR3byBlcXVhbCB0eXBlcyBgUGAgYW5kIGBRYCBhcmUgc3VidHlwZSBtYXRjaGVzIHVuZGVyIG5vIGNvbnN0cmFpbnRzLgogICAgLy8gTm90ZTogdG8gYXZvaWQgbWFraW5nIHRoZSBhbGdvcml0aG0gcXVhZHJhdGljLCB3ZSBqdXN0IGNoZWNrIGZvcgogICAgLy8gaWRlbnRpY2FsKCkuICBJZiBQIGFuZCBRIGFyZSBlcXVhbCBidXQgbm90IGlkZW50aWNhbCwgcmVjdXJzaW5nIHRocm91Z2gKICAgIC8vIHRoZSB0eXBlcyB3aWxsIGdpdmUgdGhlIHByb3BlciByZXN1bHQuCiAgICBpZiAoaWRlbnRpY2FsKHN1YnR5cGUsIHN1cGVydHlwZSkpIHJldHVybiB0cnVlOwogICAgLy8gQW55IHR5cGUgYFBgIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYGR5bmFtaWNgLCBgT2JqZWN0YCwgb3IgYHZvaWRgIHVuZGVyCiAgICAvLyBubyBjb25zdHJhaW50cy4KICAgIGlmIChfaXNUb3Aoc3VwZXJ0eXBlKSkgcmV0dXJuIHRydWU7CiAgICAvLyBgTnVsbGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBhbnkgdHlwZSBgUWAgdW5kZXIgbm8gY29uc3RyYWludHMuCiAgICAvLyBOb3RlIHRoYXQgbnVsbGFibGUgdHlwZXMgd2lsbCBjaGFuZ2UgdGhpcy4KICAgIGlmIChfaXNOdWxsKHN1YnR5cGUpKSByZXR1cm4gdHJ1ZTsKCiAgICAvLyBIYW5kbGUgRnV0dXJlT3I8VD4gdW5pb24gdHlwZS4KICAgIGlmIChzdWJ0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICBpZGVudGljYWwoc3VidHlwZS5jbGFzc05vZGUsIGZ1dHVyZU9yQ2xhc3MpKSB7CiAgICAgIHZhciBzdWJ0eXBlQXJnID0gc3VidHlwZS50eXBlQXJndW1lbnRzWzBdOwogICAgICBpZiAoc3VwZXJ0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYKICAgICAgICAgIGlkZW50aWNhbChzdXBlcnR5cGUuY2xhc3NOb2RlLCBmdXR1cmVPckNsYXNzKSkgewogICAgICAgIC8vIGBGdXR1cmVPcjxQPmAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgRnV0dXJlT3I8UT5gIHdpdGggcmVzcGVjdCB0bwogICAgICAgIC8vIGBMYCB1bmRlciBjb25zdHJhaW50cyBgQ2A6CiAgICAgICAgLy8gLSBJZiBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlcgogICAgICAgIC8vICAgY29uc3RyYWludHMgYENgLgogICAgICAgIHZhciBzdXBlcnR5cGVBcmcgPSBzdXBlcnR5cGUudHlwZUFyZ3VtZW50c1swXTsKICAgICAgICByZXR1cm4gX2lzU3VidHlwZU1hdGNoKHN1YnR5cGVBcmcsIHN1cGVydHlwZUFyZyk7CiAgICAgIH0KCiAgICAgIC8vIGBGdXR1cmVPcjxQPmAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlcgogICAgICAvLyBjb25zdHJhaW50cyBgQzAgKyBDMWA6CiAgICAgIC8vIC0gSWYgYEZ1dHVyZTxQPmAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlcgogICAgICAvLyAgIGNvbnN0cmFpbnRzIGBDMGAuCiAgICAgIC8vIC0gQW5kIGBQYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBRYCB3aXRoIHJlc3BlY3QgdG8gYExgIHVuZGVyCiAgICAgIC8vICAgY29uc3RyYWludHMgYEMxYC4KICAgICAgdmFyIHN1YnR5cGVGdXR1cmUgPSBmdXR1cmVUeXBlKHN1YnR5cGVBcmcpOwogICAgICByZXR1cm4gX2lzU3VidHlwZU1hdGNoKHN1YnR5cGVGdXR1cmUsIHN1cGVydHlwZSkgJiYKICAgICAgICAgIF9pc1N1YnR5cGVNYXRjaChzdWJ0eXBlQXJnLCBzdXBlcnR5cGUpOwogICAgfQoKICAgIGlmIChzdXBlcnR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgIGlkZW50aWNhbChzdXBlcnR5cGUuY2xhc3NOb2RlLCBmdXR1cmVPckNsYXNzKSkgewogICAgICAvLyBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgRnV0dXJlT3I8UT5gIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIKICAgICAgLy8gY29uc3RyYWludHMgYENgOgogICAgICAvLyAtIElmIGBQYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBGdXR1cmU8UT5gIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIKICAgICAgLy8gICBjb25zdHJhaW50cyBgQ2AuCiAgICAgIC8vIC0gT3IgYFBgIGlzIG5vdCBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBGdXR1cmU8UT5gIHdpdGggcmVzcGVjdCB0byBgTGAKICAgICAgLy8gICB1bmRlciBjb25zdHJhaW50cyBgQ2AKICAgICAgLy8gICAtIEFuZCBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlcgogICAgICAvLyAgICAgY29uc3RyYWludHMgYENgCiAgICAgIHZhciBzdXBlcnR5cGVBcmcgPSBzdXBlcnR5cGUudHlwZUFyZ3VtZW50c1swXTsKICAgICAgdmFyIHN1cGVydHlwZUZ1dHVyZSA9IGZ1dHVyZVR5cGUoc3VwZXJ0eXBlQXJnKTsKICAgICAgcmV0dXJuIHRyeVN1YnR5cGVNYXRjaChzdWJ0eXBlLCBzdXBlcnR5cGVGdXR1cmUpIHx8CiAgICAgICAgICBfaXNTdWJ0eXBlTWF0Y2goc3VidHlwZSwgc3VwZXJ0eXBlQXJnKTsKICAgIH0KCiAgICAvLyBBIHR5cGUgdmFyaWFibGUgYFRgIG5vdCBpbiBgTGAgd2l0aCBib3VuZCBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciB0aGUKICAgIC8vIHNhbWUgdHlwZSB2YXJpYWJsZSBgVGAgd2l0aCBib3VuZCBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlcgogICAgLy8gY29uc3RyYWludHMgYENgOgogICAgLy8gLSBJZiBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlciBjb25zdHJhaW50cwogICAgLy8gICBgQ2AuCiAgICBpZiAoc3VidHlwZSBpcyBUeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICBpZiAoc3VwZXJ0eXBlIGlzIFR5cGVQYXJhbWV0ZXJUeXBlICYmCiAgICAgICAgICBpZGVudGljYWwoc3VidHlwZS5wYXJhbWV0ZXIsIHN1cGVydHlwZS5wYXJhbWV0ZXIpKSB7CiAgICAgICAgLy8gS2VybmVsIGRvZXNuJ3QgeWV0IGFsbG93IGEgdHlwZSB2YXJpYWJsZSB0byBoYXZlIGRpZmZlcmVudCBib3VuZHMKICAgICAgICAvLyB1bmRlciBkaWZmZXJlbnQgY2lyY3Vtc3RhbmNlcyAoc2VlIGRhcnRidWcuY29tLzI5NTI5KSBzbyBmb3Igbm93IGlmCiAgICAgICAgLy8gd2UgZ2V0IGhlcmUsIHRoZSBib3VuZHMgbXVzdCBiZSB0aGUgc2FtZS4KICAgICAgICAvLyBUT0RPKHBhdWxiZXJyeSk6IHVwZGF0ZSB0aGlzIGNvZGUgb25jZSBkYXJ0YnVnLmNvbS8yOTUyOSBpcwogICAgICAgIC8vIGFkZHJlc3NlZC4KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICAvLyBBIHR5cGUgdmFyaWFibGUgYFRgIG5vdCBpbiBgTGAgd2l0aCBib3VuZCBgUGAgaXMgYSBzdWJ0eXBlIG1hdGNoIGZvciBhCiAgICAgIC8vIHR5cGUgYFFgIHdpdGggcmVzcGVjdCB0byBgTGAgdW5kZXIgY29uc3RyYWludHMgYENgOgogICAgICAvLyAtIElmIGBQYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGBRYCB3aXRoIHJlc3BlY3QgdG8gYExgIHVuZGVyCiAgICAgIC8vICAgY29uc3RyYWludHMgYENgLgogICAgICByZXR1cm4gX2lzU3VidHlwZU1hdGNoKHN1YnR5cGUucGFyYW1ldGVyLmJvdW5kLCBzdXBlcnR5cGUpOwogICAgfQogICAgaWYgKHN1YnR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJiBzdXBlcnR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICByZXR1cm4gX2lzSW50ZXJmYWNlU3VidHlwZU1hdGNoKHN1YnR5cGUsIHN1cGVydHlwZSk7CiAgICB9CiAgICBpZiAoc3VidHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgaWYgKHN1cGVydHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgcmV0dXJuIGlkZW50aWNhbChzdXBlcnR5cGUuY2xhc3NOb2RlLCBmdW5jdGlvbkNsYXNzKSB8fAogICAgICAgICAgICBpZGVudGljYWwoc3VwZXJ0eXBlLmNsYXNzTm9kZSwgb2JqZWN0Q2xhc3MpOwogICAgICB9IGVsc2UgaWYgKHN1cGVydHlwZSBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICByZXR1cm4gX2lzRnVuY3Rpb25TdWJ0eXBlTWF0Y2goc3VidHlwZSwgc3VwZXJ0eXBlKTsKICAgICAgfQogICAgfQogICAgLy8gQSB0eXBlIGBQYCBpcyBhIHN1YnR5cGUgbWF0Y2ggZm9yIGEgdHlwZSBgUWAgd2l0aCByZXNwZWN0IHRvIGBMYCB1bmRlcgogICAgLy8gY29uc3RyYWludHMgYENgOgogICAgLy8gLSBJZiBgUGAgaXMgYW4gaW50ZXJmYWNlIHR5cGUgd2hpY2ggaW1wbGVtZW50cyBhIGNhbGwgbWV0aG9kIG9mIHR5cGUgYEZgLAogICAgLy8gICBhbmQgYEZgIGlzIGEgc3VidHlwZSBtYXRjaCBmb3IgYSB0eXBlIGBRYCB3aXRoIHJlc3BlY3QgdG8gYExgIHVuZGVyCiAgICAvLyAgIGNvbnN0cmFpbnRzIGBDYC4KICAgIGlmIChzdWJ0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgdmFyIGNhbGxNZW1iZXIgPSBnZXRJbnRlcmZhY2VNZW1iZXIoc3VidHlwZS5jbGFzc05vZGUsIGNhbGxOYW1lKTsKICAgICAgaWYgKGNhbGxNZW1iZXIgaXMgUHJvY2VkdXJlICYmICFjYWxsTWVtYmVyLmlzR2V0dGVyKSB7CiAgICAgICAgdmFyIGNhbGxUeXBlID0gY2FsbE1lbWJlci5nZXR0ZXJUeXBlOwogICAgICAgIGlmIChjYWxsVHlwZSAhPSBudWxsKSB7CiAgICAgICAgICBjYWxsVHlwZSA9CiAgICAgICAgICAgICAgU3Vic3RpdHV0aW9uLmZyb21JbnRlcmZhY2VUeXBlKHN1YnR5cGUpLnN1YnN0aXR1dGVUeXBlKGNhbGxUeXBlKTsKICAgICAgICAgIC8vIFRPRE8oa21pbGxpa2luKTogVGhlIHN1YnR5cGUgY2hlY2sgd2lsbCBmYWlsIGlmIHRoZSB0eXBlIG9mIGEKICAgICAgICAgIC8vIGdlbmVyaWMgY2FsbCBtZXRob2QgaXMgYSBzdWJ0eXBlIG9mIGEgbm9uLWdlbmVyaWMgZnVuY3Rpb24gdHlwZS4KICAgICAgICAgIC8vIEZvciBleGFtcGxlLCBpZiBgVCBjYWxsPFQ+KFQgYXJnKWAgaXMgYSBzdWJ0eXBlIG9mIGBTLT5TYCBmb3Igc29tZQogICAgICAgICAgLy8gUy4gIEhvd2V2ZXIsIGV4cGxpY2l0bHkgdGVhcmluZyBvZmYgdGhhdCBjYWxsIG1ldGhvZCB3aWxsIHdvcmsgYW5kCiAgICAgICAgICAvLyBpbnNlcnQgYW4gZXhwbGljaXQgaW5zdGFudGlhdGlvbiwgc28gdGhlIGltcGxpY2l0IHRlYXIgb2ZmIHNob3VsZAogICAgICAgICAgLy8gd29yayBhcyB3ZWxsLiAgRmlndXJlIG91dCBob3cgdG8gc3VwcG9ydCB0aGlzIGNhc2UuCiAgICAgICAgICByZXR1cm4gX2lzU3VidHlwZU1hdGNoKGNhbGxUeXBlLCBzdXBlcnR5cGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgYm9vbCBfaXNUb3AoRGFydFR5cGUgdHlwZSkgPT4KICAgICAgdHlwZSBpcyBEeW5hbWljVHlwZSB8fAogICAgICB0eXBlIGlzIFZvaWRUeXBlIHx8CiAgICAgICh0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYgaWRlbnRpY2FsKHR5cGUuY2xhc3NOb2RlLCBvYmplY3RDbGFzcykpOwoKICAvLy8gR2l2ZW4gdHdvIGxpc3RzIG9mIGZ1bmN0aW9uIHR5cGUgZm9ybWFsIHBhcmFtZXRlcnMsIGNoZWNrcyB0aGF0IHRoZWlyCiAgLy8vIGJvdW5kcyBhcmUgY29tcGF0aWJsZS4KICAvLy8KICAvLy8gVGhlIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciBhIG1hdGNoIHdhcyBmb3VuZC4gIElmIGl0IHdhcywgZW50cmllcwogIC8vLyBhcmUgYWRkZWQgdG8gW3N1YnN0aXR1dGlvbjFdIGFuZCBbc3Vic3RpdHV0aW9uMl0gd2hpY2ggc3Vic3RpdHV0ZSBhIGZyZXNoCiAgLy8vIHNldCBvZiB0eXBlIHZhcmlhYmxlcyBmb3IgdGhlIHR5cGUgcGFyYW1ldGVycyBbcGFyYW1zMV0gYW5kIFtwYXJhbXMyXSwKICAvLy8gcmVzcGVjdGl2ZWx5LCBhbGxvd2luZyBmdXJ0aGVyIGNvbXBhcmlzb24uCiAgYm9vbCBfbWF0Y2hUeXBlRm9ybWFscygKICAgICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBwYXJhbXMxLAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHBhcmFtczIsCiAgICAgIE1hcDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gc3Vic3RpdHV0aW9uMSwKICAgICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBzdWJzdGl0dXRpb24yLAogICAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IGZyZXNoVHlwZVZhcmlhYmxlcykgewogICAgYXNzZXJ0KHBhcmFtczEubGVuZ3RoID09IHBhcmFtczIubGVuZ3RoKTsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogaW4gaW1pdGF0aW9uIG9mIGFuYWx5emVyLCB3ZSdyZSBjaGVja2luZyB0aGUgYm91bmRzIGFzCiAgICAvLyB3ZSBidWlsZCB1cCB0aGUgc3Vic3RpdHV0aW9ucy4gIEJ1dCBJIGRvbid0IHRoaW5rIHRoYXQncyBjb3JyZWN0LS1JIHRoaW5rCiAgICAvLyB3ZSBzaG91bGQgYnVpbGQgdXAgYm90aCBzdWJzdGl0dXRpb25zIGNvbXBsZXRlbHkgYmVmb3JlIGNoZWNraW5nIGFueQogICAgLy8gYm91bmRzLiAgU2VlIGRhcnRidWcuY29tLzI5NjI5LgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbXMxLmxlbmd0aDsgKytpKSB7CiAgICAgIFR5cGVQYXJhbWV0ZXIgcEZyZXNoID0gbmV3IFR5cGVQYXJhbWV0ZXIocGFyYW1zMltpXS5uYW1lKTsKICAgICAgZnJlc2hUeXBlVmFyaWFibGVzLmFkZChwRnJlc2gpOwogICAgICBEYXJ0VHlwZSB2YXJpYWJsZUZyZXNoID0gbmV3IFR5cGVQYXJhbWV0ZXJUeXBlKHBGcmVzaCk7CiAgICAgIHN1YnN0aXR1dGlvbjFbcGFyYW1zMVtpXV0gPSB2YXJpYWJsZUZyZXNoOwogICAgICBzdWJzdGl0dXRpb24yW3BhcmFtczJbaV1dID0gdmFyaWFibGVGcmVzaDsKICAgICAgRGFydFR5cGUgYm91bmQxID0gc3Vic3RpdHV0ZShwYXJhbXMxW2ldLmJvdW5kLCBzdWJzdGl0dXRpb24xKTsKICAgICAgRGFydFR5cGUgYm91bmQyID0gc3Vic3RpdHV0ZShwYXJhbXMyW2ldLmJvdW5kLCBzdWJzdGl0dXRpb24yKTsKICAgICAgcEZyZXNoLmJvdW5kID0gYm91bmQyOwogICAgICBpZiAoIV9pc1N1YnR5cGVNYXRjaChib3VuZDIsIGJvdW5kMSkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KfQoKY2xhc3MgVHlwZVNjaGVtYUNvbnN0cmFpbnRHYXRoZXJlciBleHRlbmRzIFR5cGVDb25zdHJhaW50R2F0aGVyZXIgewogIGZpbmFsIFR5cGVTY2hlbWFFbnZpcm9ubWVudCBlbnZpcm9ubWVudDsKCiAgVHlwZVNjaGVtYUNvbnN0cmFpbnRHYXRoZXJlcigKICAgICAgdGhpcy5lbnZpcm9ubWVudCwgSXRlcmFibGU8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMpCiAgICAgIDogc3VwZXIuc3ViY2xhc3NpbmcodHlwZVBhcmFtZXRlcnMpOwoKICBAb3ZlcnJpZGUKICBDbGFzcyBnZXQgb2JqZWN0Q2xhc3MgPT4gZW52aXJvbm1lbnQuY29yZVR5cGVzLm9iamVjdENsYXNzOwoKICBAb3ZlcnJpZGUKICBDbGFzcyBnZXQgZnVuY3Rpb25DbGFzcyA9PiBlbnZpcm9ubWVudC5jb3JlVHlwZXMuZnVuY3Rpb25DbGFzczsKCiAgQG92ZXJyaWRlCiAgQ2xhc3MgZ2V0IGZ1dHVyZU9yQ2xhc3MgPT4gZW52aXJvbm1lbnQuY29yZVR5cGVzLmZ1dHVyZU9yQ2xhc3M7CgogIEBvdmVycmlkZQogIENsYXNzIGdldCBudWxsQ2xhc3MgPT4gZW52aXJvbm1lbnQuY29yZVR5cGVzLm51bGxDbGFzczsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRVcHBlckJvdW5kKFR5cGVDb25zdHJhaW50IGNvbnN0cmFpbnQsIERhcnRUeXBlIHVwcGVyKSB7CiAgICBlbnZpcm9ubWVudC5hZGRVcHBlckJvdW5kKGNvbnN0cmFpbnQsIHVwcGVyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkTG93ZXJCb3VuZChUeXBlQ29uc3RyYWludCBjb25zdHJhaW50LCBEYXJ0VHlwZSBsb3dlcikgewogICAgZW52aXJvbm1lbnQuYWRkTG93ZXJCb3VuZChjb25zdHJhaW50LCBsb3dlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXIgZ2V0SW50ZXJmYWNlTWVtYmVyKENsYXNzIGNsYXNzXywgTmFtZSBuYW1lLCB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgcmV0dXJuIGVudmlyb25tZW50LmhpZXJhcmNoeQogICAgICAgIC5nZXRJbnRlcmZhY2VNZW1iZXIoY2xhc3NfLCBuYW1lLCBzZXR0ZXI6IHNldHRlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldFR5cGVBc0luc3RhbmNlT2YoSW50ZXJmYWNlVHlwZSB0eXBlLCBDbGFzcyBzdXBlcmNsYXNzKSB7CiAgICByZXR1cm4gZW52aXJvbm1lbnQuZ2V0VHlwZUFzSW5zdGFuY2VPZih0eXBlLCBzdXBlcmNsYXNzKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZnV0dXJlVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gZW52aXJvbm1lbnQuZnV0dXJlVHlwZSh0eXBlKTsKICB9Cn0KCi8vLyBUcmFja3MgYSBzaW5nbGUgY29uc3RyYWludCBvbiBhIHNpbmdsZSB0eXBlIHZhcmlhYmxlLgovLy8KLy8vIFRoaXMgaXMgY2FsbGVkICJfUHJvdG9Db25zdHJhaW50IiB0byBkaXN0aW5ndWlzaCBmcm9tIFtUeXBlQ29uc3RyYWludF0sCi8vLyB3aGljaCB0cmFja3MgdGhlIHVwcGVyIGFuZCBsb3dlciBib3VuZHMgdGhhdCBhcmUgdG9nZXRoZXIgaW1wbGllZCBieSBhIHNldAovLy8gb2YgW19Qcm90b0NvbnN0cmFpbnRdcy4KY2xhc3MgX1Byb3RvQ29uc3RyYWludCB7CiAgZmluYWwgVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXI7CgogIGZpbmFsIERhcnRUeXBlIGJvdW5kOwoKICBmaW5hbCBib29sIGlzVXBwZXI7CgogIF9Qcm90b0NvbnN0cmFpbnQubG93ZXIodGhpcy5wYXJhbWV0ZXIsIHRoaXMuYm91bmQpIDogaXNVcHBlciA9IGZhbHNlOwoKICBfUHJvdG9Db25zdHJhaW50LnVwcGVyKHRoaXMucGFyYW1ldGVyLCB0aGlzLmJvdW5kKSA6IGlzVXBwZXIgPSB0cnVlOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gaXNVcHBlcgogICAgICAgID8gIiR7cGFyYW1ldGVyLm5hbWV9IDw6ICRib3VuZCIKICAgICAgICA6ICIkYm91bmQgPDogJHtwYXJhbWV0ZXIubmFtZX0iOwogIH0KfQqB1wBNTj8BIQkPEhUWFxAOExMXGxIBSQEsASZGASYBGwEnAVBGKDIBNAFKMk06AUQwSgQBGQEbARsBFwFBAUEBTAFLASsBPTw0NDAGNSVRD1EIBhMEATQGTU4gPz44FDwGFAQBQkkEAUJJBAFPTE48ThojTyhLKExKQktRLk0lTRQGLjEUBkwUBi09PzJPTRYIASY9KEEGAR4tRhQGASFGQj4xRBYIBh5GQjwpHAhMTjFOFggGEQQBIThMOUcbTC1OTyBRTk9NUDkBUE1JPCU7OkpIKRYIBhEEASBRS1EuSgQBTS0GS1EGTU8hP0gULUgUL04kKD41EwZMJCpANRMGUUhPLjRQFyhIMicBJiQ3MSg7TiZJHjc6CAFMIE8dSB0yOjIGASY5TBpPHE0hSh01NjoyBgFQRxhRDigsP01PNUcWFQhQPUccQgZCOwYjKEA5LjwIBk4YUU0aJEg9LiAVUEtOUFBPQTcKCAYSBAEgHRpJAUwdBlBQTTEaIyMyMjAuT1FMJy9BJj4xMUVFHToGEQQCAUQrASBAKwEMPgEMQgEMQgEMOgEMQjIEAQxCMgQBDE0hOwQBDEw+BAEMLCkEAgE6BExPHBkhARgBFgFIAUcBFhMoKQQCAUhwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9jb25zdHJhaW50X2dhdGhlcmVyLmRhcnQnc2Rrcm9vdDovcGtnL2tlcm5lbC9saWIvdXRpbC9ncmFwaC5kYXJ0ipAvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLm1kIGZpbGUuCgpsaWJyYXJ5IGZhc3RhLmdyYXBoOwoKYWJzdHJhY3QgY2xhc3MgR3JhcGg8VD4gewogIEl0ZXJhYmxlPFQ+IGdldCB2ZXJ0aWNlczsKCiAgSXRlcmFibGU8VD4gbmVpZ2hib3JzT2YoVCB2ZXJ0ZXgpOwp9CgovLy8gQ29tcHV0ZXMgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIG9mIFtncmFwaF0uCi8vLwovLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbiBbRGlqa3N0cmEncyBwYXRoLWJhc2VkIHN0cm9uZyBjb21wb25lbnQKLy8vIGFsZ29yaXRobV0KLy8vIChodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QYXRoLWJhc2VkX3N0cm9uZ19jb21wb25lbnRfYWxnb3JpdGhtI0Rlc2NyaXB0aW9uKS4KTGlzdDxMaXN0PFQ+PiBjb21wdXRlU3Ryb25nQ29tcG9uZW50czxUPihHcmFwaDxUPiBncmFwaCkgewogIExpc3Q8TGlzdDxUPj4gcmVzdWx0ID0gPExpc3Q8VD4+W107CiAgaW50IGNvdW50ID0gMDsKICBNYXA8VCwgaW50PiBwcmVvcmRlck51bWJlcnMgPSA8VCwgaW50Pnt9OwogIExpc3Q8VD4gdW5hc3NpZ25lZCA9IDxUPltdOwogIExpc3Q8VD4gY2FuZGlkYXRlcyA9IDxUPltdOwogIFNldDxUPiBhc3NpZ25lZCA9IG5ldyBTZXQ8VD4oKTsKCiAgdm9pZCByZWN1cnNpdmVseVNlYXJjaChUIHZlcnRleCkgewogICAgLy8gU3RlcCAxOiBTZXQgdGhlIHByZW9yZGVyIG51bWJlciBvZiBbdmVydGV4XSB0byBbY291bnRdLCBhbmQgaW5jcmVtZW50CiAgICAvLyBbY291bnRdLgogICAgcHJlb3JkZXJOdW1iZXJzW3ZlcnRleF0gPSBjb3VudCsrOwoKICAgIC8vIFN0ZXAgMjogUHVzaCBbdmVydGV4XSBvbnRvIFt1bmFzc2lnbmVkXSBhbmQgYWxzbyBvbnRvIFtjYW5kaWRhdGVzXS4KICAgIHVuYXNzaWduZWQuYWRkKHZlcnRleCk7CiAgICBjYW5kaWRhdGVzLmFkZCh2ZXJ0ZXgpOwoKICAgIC8vIFN0ZXAgMzogRm9yIGVhY2ggZWRnZSBmcm9tIFt2ZXJ0ZXhdIHRvIGEgbmVpZ2hib3JpbmcgdmVydGV4IFtuZWlnaGJvcl06CiAgICBmb3IgKFQgbmVpZ2hib3IgaW4gZ3JhcGgubmVpZ2hib3JzT2YodmVydGV4KSkgewogICAgICBpbnQgbmVpZ2hib3JQcmVvcmRlck51bWJlciA9IHByZW9yZGVyTnVtYmVyc1tuZWlnaGJvcl07CiAgICAgIGlmIChuZWlnaGJvclByZW9yZGVyTnVtYmVyID09IG51bGwpIHsKICAgICAgICAvLyBJZiB0aGUgcHJlb3JkZXIgbnVtYmVyIG9mIFtuZWlnaGJvcl0gaGFzIG5vdCB5ZXQgYmVlbiBhc3NpZ25lZCwKICAgICAgICAvLyByZWN1cnNpdmVseSBzZWFyY2ggW25laWdoYm9yXTsKICAgICAgICByZWN1cnNpdmVseVNlYXJjaChuZWlnaGJvcik7CiAgICAgIH0gZWxzZSBpZiAoIWFzc2lnbmVkLmNvbnRhaW5zKG5laWdoYm9yKSkgewogICAgICAgIC8vIE90aGVyd2lzZSwgaWYgW25laWdoYm9yXSBoYXMgbm90IHlldCBiZWVuIGFzc2lnbmVkIHRvIGEgc3Ryb25nbHkKICAgICAgICAvLyBjb25uZWN0ZWQgY29tcG9uZW50OgogICAgICAgIC8vCiAgICAgICAgLy8gKiBSZXBlYXRlZGx5IHBvcCB2ZXJ0aWNlcyBmcm9tIFtjYW5kaWRhdGVzXSB1bnRpbCB0aGUgdG9wIGVsZW1lbnQgb2YKICAgICAgICAvLyAgIFtjYW5kaWRhdGVzXSBoYXMgYSBwcmVvcmRlciBudW1iZXIgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZQogICAgICAgIC8vICAgcHJlb3JkZXIgbnVtYmVyIG9mIFtuZWlnaGJvcl0uCiAgICAgICAgd2hpbGUgKHByZW9yZGVyTnVtYmVyc1tjYW5kaWRhdGVzLmxhc3RdID4gbmVpZ2hib3JQcmVvcmRlck51bWJlcikgewogICAgICAgICAgY2FuZGlkYXRlcy5yZW1vdmVMYXN0KCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvLyBTdGVwIDQ6IElmIFt2ZXJ0ZXhdIGlzIHRoZSB0b3AgZWxlbWVudCBvZiBbY2FuZGlkYXRlc106CiAgICBpZiAoY2FuZGlkYXRlcy5sYXN0ID09IHZlcnRleCkgewogICAgICAvLyBQb3AgdmVydGljZXMgZnJvbSBbdW5hc3NpZ25lZF0gdW50aWwgW3ZlcnRleF0gaGFzIGJlZW4gcG9wcGVkLCBhbmQKICAgICAgLy8gYXNzaWduIHRoZSBwb3BwZWQgdmVydGljZXMgdG8gYSBuZXcgY29tcG9uZW50LgogICAgICBMaXN0PFQ+IGNvbXBvbmVudCA9IDxUPltdOwogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIFQgdG9wID0gdW5hc3NpZ25lZC5yZW1vdmVMYXN0KCk7CiAgICAgICAgY29tcG9uZW50LmFkZCh0b3ApOwogICAgICAgIGFzc2lnbmVkLmFkZCh0b3ApOwogICAgICAgIGlmICh0b3AgPT0gdmVydGV4KSBicmVhazsKICAgICAgfQogICAgICByZXN1bHQuYWRkKGNvbXBvbmVudCk7CgogICAgICAvLyBQb3AgW3ZlcnRleF0gZnJvbSBbY2FuZGlkYXRlc10uCiAgICAgIGNhbmRpZGF0ZXMucmVtb3ZlTGFzdCgpOwogICAgfQogIH0KCiAgZm9yIChUIHZlcnRleCBpbiBncmFwaC52ZXJ0aWNlcykgewogICAgaWYgKHByZW9yZGVyTnVtYmVyc1t2ZXJ0ZXhdID09IG51bGwpIHsKICAgICAgcmVjdXJzaXZlbHlTZWFyY2godmVydGV4KTsKICAgIH0KICB9CgogIHJldHVybiByZXN1bHQ7Cn0KUQBNTj8BFQEaHAElAgE7BEwPVzsmESweHiIBJU0QJwFLHBwBTzQ+LEsqJTFMIAtQSixMIwoIBj8lTDghFSkcGyIIHQEpHwYEASUrIQYEARECAR5wYWNrYWdlOmtlcm5lbC91dGlsL2dyYXBoLmRhcnQwc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaGVscGVycy90cmFjZS5kYXJ0rZsvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwoKLy8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgW3RyYWNlXS4KdHlwZWRlZiB2b2lkIFRyYWNlKFN0cmluZyBtZXNzYWdlLAogICAge2Jvb2wgY29uZGl0aW9uKFN0cmluZyBzdGFja1RyYWNlKSwgaW50IGxpbWl0LCBib29sIHRocm93T25QcmludH0pOwoKLy8vIEhlbHBlciBtZXRob2QgZm9yIHByaW50aW5nIHN0YWNrIHRyYWNlcyBmb3IgZGVidWdnaW5nLgovLy8KLy8vIFttZXNzYWdlXSBpcyBwcmludGVkIGFzIHRoZSBoZWFkZXIgb2YgdGhlIHN0YWNrIHRyYWNlLgovLy8KLy8vIElmIFtjb25kaXRpb25dIGlzIHByb3ZpZGVkLCB0aGUgc3RhY2sgdHJhY2UgaXMgb25seSBwcmludGVkIGlmIFtjb25kaXRpb25dCi8vLyByZXR1cm5zIFs6dHJ1ZTpdIG9uIHRoZSBzdGFjayB0cmFjZSB0ZXh0LiBUaGlzIGNhbiBiZSB1c2VkIHRvIGZpbHRlciB0aGUKLy8vIHByaW50ZWQgc3RhY2sgdHJhY2VzIGJhc2VkIG9uIHRoZWlyIGNvbnRlbnQuIEZvciBpbnN0YW5jZSBvbmx5IHByaW50IHN0YWNrCi8vLyB0cmFjZXMgdGhhdCBjb250YWluIHNwZWNpZmljIHBhdGhzLgovLy8KLy8vIElmIFtsaW1pdF0gaXMgcHJvdmlkZWQsIHRoZSBzdGFjayB0cmFjZSBpcyBsaW1pdGVkIHRvIFtsaW1pdF0gZW50cmllcy4KLy8vCi8vLyBJZiBbdGhyb3dPblByaW50XSBpcyBgdHJ1ZWAsIFttZXNzYWdlXSB3aWxsIGJlIHRocm93biBhZnRlciB0aGUgc3RhY2sgdHJhY2UKLy8vIGhhcyBiZWVuIHByaW50ZWQuIFRvZ2V0aGVyIHdpdGggW2NvbmRpdGlvbl0gdGhpcyBjYW4gYmUgdXNlZCB0byBkaXNjb3ZlcgovLy8gdW5rbm93biBjYWxsLXNpdGVzIGluIHRlc3RzIGJ5IGZpbHRlcmluZyBrbm93biBjYWxsLXNpdGVzIGFuZCB0aHJvd25pbmcKLy8vIG90aGVyd2lzZS4KVHJhY2UgZ2V0IHRyYWNlIHsKICBlbmFibGVEZWJ1Z01vZGUoKTsKICByZXR1cm4gX3RyYWNlOwp9Cgp2b2lkIF90cmFjZShTdHJpbmcgbWVzc2FnZSwKICAgIHtib29sIGNvbmRpdGlvbihTdHJpbmcgc3RhY2tUcmFjZSksIGludCBsaW1pdCwgYm9vbCB0aHJvd09uUHJpbnQ6IGZhbHNlfSkgewogIHRyeSB7CiAgICB0aHJvdyAnJzsKICB9IGNhdGNoIChlLCBzKSB7CiAgICBTdHJpbmcgc3RhY2tUcmFjZTsKICAgIHRyeSB7CiAgICAgIHN0YWNrVHJhY2UgPSBwcmV0dGlmeVN0YWNrVHJhY2UocywKICAgICAgICAgIHJhbmdlU3RhcnQ6IDEsIHJhbmdlRW5kOiBsaW1pdCwgZmlsZVByZWZpeDogc3RhY2tUcmFjZUZpbGVQcmVmaXgpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBwcmludChlKTsKICAgICAgc3RhY2tUcmFjZSA9ICckcyc7CiAgICB9CiAgICBpZiAoY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgaWYgKCFjb25kaXRpb24oc3RhY2tUcmFjZSkpIHJldHVybjsKICAgIH0KICAgIHByaW50KCckbWVzc2FnZVxuJHN0YWNrVHJhY2UnKTsKICAgIGlmICh0aHJvd09uUHJpbnQpIHRocm93IG1lc3NhZ2U7CiAgfQp9CgovLy8gQ3JlYXRlcyBhIGZ1bmN0aW9uIHRvIHVzZSBhcyBhbiBgY29uZGl0aW9uYCBhcmd1bWVudCBpbiBbdHJhY2VdIHRoYXQgZmlsdGVycwovLy8gc3RhY2sgdHJhY2VzIHRoYXQgY29udGFpbnMgYW55IG9mIHRoZSBbZXhjZXB0aW9uc10uCnRyYWNlRXhjZXB0aW9ucyhMaXN0PFN0cmluZz4gZXhjZXB0aW9ucykgewogIHJldHVybiAoU3RyaW5nIHN0YWNrVHJhY2UpID0+ICFleGNlcHRpb25zLmFueShzdGFja1RyYWNlLmNvbnRhaW5zKTsKfQoKLy8vIEZ1bmN0aW9uIHNpZ25hdHVyZSBvZiBbdHJhY2VBbmRSZXBvcnRdLgp0eXBlZGVmIHZvaWQgVHJhY2VBbmRSZXBvcnQoCiAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsIFNwYW5uYWJsZSBub2RlLCBTdHJpbmcgbWVzc2FnZSwKICAgIHtib29sIGNvbmRpdGlvbihTdHJpbmcgc3RhY2tUcmFjZSksIGludCBsaW1pdCwgYm9vbCB0aHJvd09uUHJpbnR9KTsKCi8vLyBDYWxscyBbcmVwb3J0SGVyZV0gYW5kIFt0cmFjZV0gd2l0aCB0aGUgc2FtZSBtZXNzYWdlLgpUcmFjZUFuZFJlcG9ydCBnZXQgdHJhY2VBbmRSZXBvcnQgewogIGVuYWJsZURlYnVnTW9kZSgpOwogIHJldHVybiBfdHJhY2VBbmRSZXBvcnQ7Cn0KCi8vLyBDYWxscyBbcmVwb3J0SGVyZV0gYW5kIFt0cmFjZV0gd2l0aCB0aGUgc2FtZSBtZXNzYWdlLgpUcmFjZUFuZFJlcG9ydCBnZXQgcmVwb3J0QW5kVHJhY2UgPT4gdHJhY2VBbmRSZXBvcnQ7CgovLy8gSW1wbGVtZW50YXRpb24gb2YgW3RyYWNlQW5kUmVwb3J0XS4Kdm9pZCBfdHJhY2VBbmRSZXBvcnQoCiAgICBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXIsIFNwYW5uYWJsZSBub2RlLCBTdHJpbmcgbWVzc2FnZSwKICAgIHtib29sIGNvbmRpdGlvbihTdHJpbmcgc3RhY2tUcmFjZSksIGludCBsaW1pdCwgYm9vbCB0aHJvd09uUHJpbnQ6IGZhbHNlfSkgewogIHRyYWNlKG1lc3NhZ2UsIGxpbWl0OiBsaW1pdCwgdGhyb3dPblByaW50OiB0aHJvd09uUHJpbnQsCiAgICAgIGNvbmRpdGlvbjogKFN0cmluZyBzdGFja1RyYWNlKSB7CiAgICBib29sIHJlc3VsdCA9IGNvbmRpdGlvbiAhPSBudWxsID8gY29uZGl0aW9uKHN0YWNrVHJhY2UpIDogdHJ1ZTsKICAgIGlmIChyZXN1bHQpIHsKICAgICAgcmVwb3J0SGVyZShyZXBvcnRlciwgbm9kZSwgbWVzc2FnZSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0pOwp9CgovLy8gUmV0dXJucyB0aGUgW1N0YWNrVHJhY2VMaW5lc10gZm9yIHRoZSBjdXJyZW50IGNhbGwgc3RhY2suCi8vLwovLy8gVXNlIFtvZmZzZXRdIHRvIGRpc2NhcmQgdGhlIGZpcnN0IFtvZmZzZXRdIGNhbGxzIG9mIHRoZSBjYWxsIHN0YWNrLiBEZWZhdWx0cwovLy8gdG8gYDFgLCB0aGF0IGlzLCBkaXNjYXJkIHRoZSBjYWxsIHRvIFtzdGFja1RyYWNlXSBpdHNlbGYuIFVzZSBbbGltaXRdIHRvCi8vLyBsaW1pdCB0aGUgbGVuZ3RoIG9mIHRoZSBzdGFjayB0cmFjZSBsaW5lcy4KU3RhY2tUcmFjZUxpbmVzIHN0YWNrVHJhY2Uoe2ludCBvZmZzZXQ6IDEsIGludCBsaW1pdDogbnVsbH0pIHsKICBpbnQgcmFuZ2VTdGFydCA9IG9mZnNldDsKICBpbnQgcmFuZ2VFbmQgPSBsaW1pdCA9PSBudWxsID8gbnVsbCA6IHJhbmdlU3RhcnQgKyBsaW1pdDsKICB0cnkgewogICAgdGhyb3cgJyc7CiAgfSBjYXRjaCAoXywgc3RhY2tUcmFjZSkgewogICAgcmV0dXJuIG5ldyBTdGFja1RyYWNlTGluZXMuZnJvbVRyYWNlKHN0YWNrVHJhY2UsCiAgICAgICAgcmFuZ2VTdGFydDogb2Zmc2V0LAogICAgICAgIHJhbmdlRW5kOiByYW5nZUVuZCwKICAgICAgICBmaWxlUHJlZml4OiBzdGFja1RyYWNlRmlsZVByZWZpeCk7CiAgfQp9CgovLy8gQSBzdGFjayB0cmFjZSBhcyBhIHNlcXVlbmNlIG9mIFtTdGFja1RyYWNlTGluZV1zLgpjbGFzcyBTdGFja1RyYWNlTGluZXMgewogIGZpbmFsIExpc3Q8U3RhY2tUcmFjZUxpbmU+IGxpbmVzOwogIGZpbmFsIGludCBtYXhGaWxlTGVuZ3RoOwogIGZpbmFsIGludCBtYXhMaW5lTm9MZW5ndGg7CiAgZmluYWwgaW50IG1heENvbHVtbk5vTGVuZ3RoOwoKICBmYWN0b3J5IFN0YWNrVHJhY2VMaW5lcy5mcm9tVHJhY2UoU3RhY2tUcmFjZSBzLAogICAgICB7aW50IHJhbmdlU3RhcnQsIGludCByYW5nZUVuZCwgU3RyaW5nIGZpbGVQcmVmaXgsIFN0cmluZyBsYW1iZGE6IHInPyd9KSB7CiAgICBmaW5hbCBSZWdFeHAgaW5kZXhQYXR0ZXJuID0gbmV3IFJlZ0V4cChyJyNcZCtccyonKTsKICAgIGludCBpbmRleCA9IC0xOwogICAgaW50IG1heEZpbGVMZW5ndGggPSAwOwogICAgaW50IG1heExpbmVOb0xlbmd0aCA9IDA7CiAgICBpbnQgbWF4Q29sdW1uTm9MZW5ndGggPSAwOwoKICAgIFN0cmluZyBzdGFja1RyYWNlID0gJyRzJzsKICAgIExpc3Q8U3RhY2tUcmFjZUxpbmU+IGxpbmVzID0gPFN0YWNrVHJhY2VMaW5lPltdOwogICAgLy8gUGFyc2UgZWFjaCBsaW5lIGluIHRoZSBzdGFjayB0cmFjZS4gVGhlIHN1cHBvcnRlZCBsaW5lIGZvcm1hdHMgZnJvbSB0aGUKICAgIC8vIERhcnQgVk0gYXJlOgogICAgLy8gICAgI24gICAgIDxtZXRob2QtbmFtZT4gKDx1cmk+OjxsaW5lLW5vPjo8Y29sdW1uLW5vPikKICAgIC8vICAgICNuICAgICA8bWV0aG9kLW5hbWU+ICg8dXJpPjo8bGluZS1ubz4pCiAgICAvLyAgICAjbiAgICAgPG1ldGhvZC1uYW1lPiAoPHVyaT4pCiAgICAvLyBpbiB3aGljaCAnPGFub255bW91cyBjbG9zdXJlPicgaXMgdGhlIG5hbWUgdXNlZCBmb3IgYW4gKHVubmFtZWQpIGZ1bmN0aW9uCiAgICAvLyBleHByZXNzaW9uLiBUaGUgbGFzdCBjYXNlIGlzIHVzZWQgZm9yIGFzeW5jIGJvZGllcy4KICAgIGZvciAoU3RyaW5nIGxpbmUgaW4gc3RhY2tUcmFjZS5zcGxpdCgnXG4nKSkgewogICAgICB0cnkgewogICAgICAgIGluZGV4Kys7CiAgICAgICAgaWYgKHJhbmdlU3RhcnQgIT0gbnVsbCAmJiBpbmRleCA8IHJhbmdlU3RhcnQpIGNvbnRpbnVlOwogICAgICAgIGlmIChyYW5nZUVuZCAhPSBudWxsICYmIGluZGV4ID4gcmFuZ2VFbmQpIGJyZWFrOwogICAgICAgIGlmIChsaW5lLmlzRW1wdHkpIGNvbnRpbnVlOwoKICAgICAgICAvLyBTdHJpcCBpbmRleC4KICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlRmlyc3QoaW5kZXhQYXR0ZXJuLCAnJyk7CiAgICAgICAgaWYgKGxpbmUgPT0gJzxhc3luY2hyb25vdXMgc3VzcGVuc2lvbj4nKSB7CiAgICAgICAgICBsaW5lcy5hZGQobmV3IFN0YWNrVHJhY2VMaW5lKGluZGV4LCAnJywgJycsICcnLCBsaW5lKSk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIGludCBsZWZ0UGFyZW5Qb3MgPSBsaW5lLmluZGV4T2YoJygnKTsKICAgICAgICBpbnQgcmlnaHRQYXJlblBvcyA9IGxpbmUuaW5kZXhPZignKScsIGxlZnRQYXJlblBvcyk7CiAgICAgICAgaW50IGxhc3RDb2xvbiA9IGxpbmUubGFzdEluZGV4T2YoJzonLCByaWdodFBhcmVuUG9zKTsKICAgICAgICBpbnQgbmV4dFRvTGFzdENvbG9uID0gbGluZS5sYXN0SW5kZXhPZignOicsIGxhc3RDb2xvbiAtIDEpOwoKICAgICAgICBTdHJpbmcgbGluZU5vOwogICAgICAgIFN0cmluZyBjb2x1bW5ObzsKICAgICAgICBpZiAobmV4dFRvTGFzdENvbG9uICE9IC0xKSB7CiAgICAgICAgICBsaW5lTm8gPSBsaW5lLnN1YnN0cmluZyhuZXh0VG9MYXN0Q29sb24gKyAxLCBsYXN0Q29sb24pOwogICAgICAgICAgY29sdW1uTm8gPSBsaW5lLnN1YnN0cmluZyhsYXN0Q29sb24gKyAxLCByaWdodFBhcmVuUG9zKTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGludC5wYXJzZShjb2x1bW5Obyk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgaW50LnBhcnNlKGxpbmVObyk7CiAgICAgICAgICAgIH0gb24gRm9ybWF0RXhjZXB0aW9uIHsKICAgICAgICAgICAgICAvLyBPbmx5IGxpbmUgbnVtYmVyLgogICAgICAgICAgICAgIGxpbmVObyA9IGNvbHVtbk5vOwogICAgICAgICAgICAgIGNvbHVtbk5vID0gJyc7CiAgICAgICAgICAgICAgbmV4dFRvTGFzdENvbG9uID0gbGFzdENvbG9uOwogICAgICAgICAgICB9CiAgICAgICAgICB9IG9uIEZvcm1hdEV4Y2VwdGlvbiB7CiAgICAgICAgICAgIC8vIE5vIGNvbHVtbiBudW1iZXIgbm9yIGxpbmUgbnVtYmVyLgogICAgICAgICAgICBsaW5lTm8gPSAnJzsKICAgICAgICAgICAgY29sdW1uTm8gPSAnJzsKICAgICAgICAgICAgbmV4dFRvTGFzdENvbG9uID0gcmlnaHRQYXJlblBvczsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGluZU5vID0gbGluZS5zdWJzdHJpbmcobGFzdENvbG9uICsgMSwgcmlnaHRQYXJlblBvcyk7CiAgICAgICAgICBjb2x1bW5ObyA9ICcnOwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaW50LnBhcnNlKGxpbmVObyk7CiAgICAgICAgICAgIG5leHRUb0xhc3RDb2xvbiA9IGxhc3RDb2xvbjsKICAgICAgICAgIH0gb24gRm9ybWF0RXhjZXB0aW9uIHsKICAgICAgICAgICAgLy8gTm8gY29sdW1uIG51bWJlciBub3IgbGluZSBudW1iZXIuCiAgICAgICAgICAgIGxpbmVObyA9IGNvbHVtbk5vOwogICAgICAgICAgICBjb2x1bW5ObyA9ICcnOwogICAgICAgICAgICBuZXh0VG9MYXN0Q29sb24gPSByaWdodFBhcmVuUG9zOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGxpbmVOby5sZW5ndGggPiBtYXhMaW5lTm9MZW5ndGgpIHsKICAgICAgICAgIG1heExpbmVOb0xlbmd0aCA9IGxpbmVOby5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIGlmIChjb2x1bW5Oby5sZW5ndGggPiBtYXhDb2x1bW5Ob0xlbmd0aCkgewogICAgICAgICAgbWF4Q29sdW1uTm9MZW5ndGggPSBjb2x1bW5Oby5sZW5ndGg7CiAgICAgICAgfQoKICAgICAgICBTdHJpbmcgZmlsZSA9IGxpbmUuc3Vic3RyaW5nKGxlZnRQYXJlblBvcyArIDEsIG5leHRUb0xhc3RDb2xvbik7CiAgICAgICAgaWYgKGZpbGVQcmVmaXggIT0gbnVsbCAmJiBmaWxlLnN0YXJ0c1dpdGgoZmlsZVByZWZpeCkpIHsKICAgICAgICAgIGZpbGUgPSBmaWxlLnN1YnN0cmluZyhmaWxlUHJlZml4Lmxlbmd0aCk7CiAgICAgICAgfQogICAgICAgIGlmIChmaWxlLmxlbmd0aCA+IG1heEZpbGVMZW5ndGgpIHsKICAgICAgICAgIG1heEZpbGVMZW5ndGggPSBmaWxlLmxlbmd0aDsKICAgICAgICB9CiAgICAgICAgU3RyaW5nIG1ldGhvZCA9IGxpbmUuc3Vic3RyaW5nKDAsIGxlZnRQYXJlblBvcyAtIDEpOwogICAgICAgIGlmIChsYW1iZGEgIT0gbnVsbCkgewogICAgICAgICAgbWV0aG9kID0gbWV0aG9kLnJlcGxhY2VBbGwoJzxhbm9ueW1vdXMgY2xvc3VyZT4nLCBsYW1iZGEpOwogICAgICAgIH0KICAgICAgICBsaW5lcy5hZGQobmV3IFN0YWNrVHJhY2VMaW5lKGluZGV4LCBmaWxlLCBsaW5lTm8sIGNvbHVtbk5vLCBtZXRob2QpKTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIHRocm93ICdFcnJvciBwcmV0dGlmeWluZyAiJGxpbmUiOiAkZSc7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgU3RhY2tUcmFjZUxpbmVzLmZyb21MaW5lcygKICAgICAgICBsaW5lcywgbWF4RmlsZUxlbmd0aCwgbWF4TGluZU5vTGVuZ3RoLCBtYXhDb2x1bW5Ob0xlbmd0aCk7CiAgfQoKICBTdGFja1RyYWNlTGluZXMuZnJvbUxpbmVzKHRoaXMubGluZXMsIHRoaXMubWF4RmlsZUxlbmd0aCwKICAgICAgdGhpcy5tYXhMaW5lTm9MZW5ndGgsIHRoaXMubWF4Q29sdW1uTm9MZW5ndGgpOwoKICBTdGFja1RyYWNlTGluZXMgc3VidHJhY2UoaW50IG9mZnNldCkgewogICAgcmV0dXJuIG5ldyBTdGFja1RyYWNlTGluZXMuZnJvbUxpbmVzKGxpbmVzLnN1Ymxpc3Qob2Zmc2V0KSwgbWF4RmlsZUxlbmd0aCwKICAgICAgICBtYXhMaW5lTm9MZW5ndGgsIG1heENvbHVtbk5vTGVuZ3RoKTsKICB9CgogIFN0cmluZyBwcmV0dGlmeSh7Ym9vbCBzaG93Q29sdW1uTm86IGZhbHNlLCBib29sIHNob3dEb3RzOiB0cnVlfSkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYm9vbCBkb3RzID0gdHJ1ZTsKICAgIGZvciAoU3RhY2tUcmFjZUxpbmUgbGluZSBpbiBsaW5lcykgewogICAgICBzYi53cml0ZSgnICAnKTsKICAgICAgbGluZS5wcmludE9uKHNiLAogICAgICAgICAgZmlsZUxlbmd0aDogbWF4RmlsZUxlbmd0aCwKICAgICAgICAgIHBhZGRpbmc6IHNob3dEb3RzICYmIGRvdHMgPyAnIC4nIDogJyAnLAogICAgICAgICAgbGluZU5vTGVuZ3RoOiBtYXhMaW5lTm9MZW5ndGgsCiAgICAgICAgICBzaG93Q29sdW1uTm86IHNob3dDb2x1bW5ObywKICAgICAgICAgIGNvbHVtbk5vTGVuZ3RoOiBtYXhDb2x1bW5Ob0xlbmd0aCk7CgogICAgICBkb3RzID0gIWRvdHM7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiBwcmV0dGlmeSgpOwogIH0KfQoKLy8vIEEgcGFyc2VkIGxpbmUgZnJvbSBhIHN0YWNrIHRyYWNlLgpjbGFzcyBTdGFja1RyYWNlTGluZSB7CiAgZmluYWwgaW50IGluZGV4OwogIGZpbmFsIFN0cmluZyBmaWxlOwogIGZpbmFsIFN0cmluZyBsaW5lTm87CiAgZmluYWwgU3RyaW5nIGNvbHVtbk5vOwogIGZpbmFsIFN0cmluZyBtZXRob2Q7CgogIFN0YWNrVHJhY2VMaW5lKAogICAgICB0aGlzLmluZGV4LCB0aGlzLmZpbGUsIHRoaXMubGluZU5vLCB0aGlzLmNvbHVtbk5vLCB0aGlzLm1ldGhvZCk7CgogIHZvaWQgcHJpbnRPbihTdHJpbmdCdWZmZXIgc2IsCiAgICAgIHtTdHJpbmcgcGFkZGluZzogJyAnLAogICAgICBpbnQgZmlsZUxlbmd0aCwKICAgICAgaW50IGxpbmVOb0xlbmd0aCwKICAgICAgaW50IGNvbHVtbk5vTGVuZ3RoLAogICAgICBib29sIHNob3dDb2x1bW5ObzogZmFsc2V9KSB7CiAgICBTdHJpbmcgZmlsZVRleHQgPSAnJHtmaWxlfSAnOwogICAgaWYgKGZpbGVMZW5ndGggIT0gbnVsbCkgewogICAgICBmaWxlVGV4dCA9IHBhZChmaWxlVGV4dCwgZmlsZUxlbmd0aCwgZG90czogcGFkZGluZyk7CiAgICB9CiAgICBTdHJpbmcgbGluZU5vVGV4dCA9IGxpbmVObzsKICAgIGlmIChsaW5lTm9MZW5ndGggIT0gbnVsbCkgewogICAgICBsaW5lTm9UZXh0ID0gcGFkKGxpbmVOb1RleHQsIGxpbmVOb0xlbmd0aCwgcGFkTGVmdDogdHJ1ZSk7CiAgICB9CiAgICBTdHJpbmcgY29sdW1uTm9UZXh0ID0gc2hvd0NvbHVtbk5vID8gJycgOiBjb2x1bW5ObzsKICAgIGlmIChjb2x1bW5Ob0xlbmd0aCAhPSBudWxsKSB7CiAgICAgIGNvbHVtbk5vVGV4dCA9ICc6JHtwYWQoY29sdW1uTm9UZXh0LCBjb2x1bW5Ob0xlbmd0aCl9JzsKICAgIH0KICAgIHNiLndyaXRlKCckZmlsZVRleHQgJGxpbmVOb1RleHQkY29sdW1uTm9UZXh0ICRtZXRob2RcbicpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gMTMgKiBpbmRleCArCiAgICAgICAgMTcgKiBmaWxlLmhhc2hDb2RlICsKICAgICAgICAxOSAqIGxpbmVOby5oYXNoQ29kZSArCiAgICAgICAgMjMgKiBjb2x1bW5Oby5oYXNoQ29kZSArCiAgICAgICAgMjkgKiBtZXRob2QuaGFzaENvZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFN0YWNrVHJhY2VMaW5lKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gaW5kZXggPT0gb3RoZXIuaW5kZXggJiYKICAgICAgICBmaWxlID09IG90aGVyLmZpbGUgJiYKICAgICAgICBsaW5lTm8gPT0gb3RoZXIubGluZU5vICYmCiAgICAgICAgY29sdW1uTm8gPT0gb3RoZXIuY29sdW1uTm8gJiYKICAgICAgICBtZXRob2QgPT0gb3RoZXIubWV0aG9kOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIiRtZXRob2QgQCAkZmlsZSBbJGxpbmVObzokY29sdW1uTm9dIjsKfQoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHRoaXMgZm9ybWF0IGZvciAtLXRocm93LW9uLWVycm9yLgovLy8gQ29udmVydHMgdGhlIG5vcm1hbCBWTSBzdGFjayB0cmFjZSBpbnRvIGEgbW9yZSBjb21wYWN0IGFuZCByZWFkYWJsZSBmb3JtYXQuCi8vLwovLy8gVGhlIG91dHB1dCBmb3JtYXQgaXMgYDxmaWxlPiAuIC4gLiA8bGluZU5vPjo8Y29sdW1uTm8+IDxtZXRob2Q+YCB3aGVyZQovLy8gYDxmaWxlPmAgaXMgZmlsZSBuYW1lLCBgPGxpbmVObz5gIGlzIHRoZSBsaW5lIG51bWJlciwgYDxjb2x1bW5Obz5gIGlzIHRoZQovLy8gY29sdW1uIG51bWJlciwgYW5kIGA8bWV0aG9kPmAgaXMgdGhlIG1ldGhvZCBuYW1lLgovLy8KLy8vIElmIFtyYW5nZVN0YXJ0XSBhbmQvb3IgW3JhbmdlRW5kXSBhcmUgcHJvdmlkZWQsIG9ubHkgdGhlIGxpbmVzIHdpdGhpbiB0aGUKLy8vIHJhbmdlIGFyZSBpbmNsdWRlZC4KLy8vIElmIFtzaG93Q29sdW1uTm9dIGlzIGBmYWxzZWAsIHRoZSBgOjxjb2x1bW5Obz5gIHBhcnQgaXMgb21pdHRlZC4KLy8vIElmIFtzaG93RG90c10gaXMgYHRydWVgLCB0aGUgc3BhY2UgYmV0d2VlbiBgPGZpbGU+YCBhbmQgYDxsaW5lTm8+YCBpcyBwYWRkZWQKLy8vIHdpdGggZG90cyBvbiBldmVyeSBvdGhlciBsaW5lLgovLy8gSWYgW2ZpbGVQcmVmaXhdIGlzIHByb3ZpZGVkLCB0aGVuIGZvciAgZXZlcnkgZmlsZSBuYW1lIHRoYXRzIHN0YXJ0cyB3aXRoCi8vLyBbZmlsZVByZWZpeF0gb25seSB0aGUgcmVtYWluZGVyIGlzIHByaW50ZWQuCi8vLyBJZiBbbGFtYmRhXSBpcyBub24tbnVsbCwgYW5vbnltb3VzIGNsb3N1cmVzIGFyZSBwcmludGVkIGFzIFtsYW1iZGFdLgpTdHJpbmcgcHJldHRpZnlTdGFja1RyYWNlKFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSwKICAgIHtpbnQgcmFuZ2VTdGFydCwKICAgIGludCByYW5nZUVuZCwKICAgIGJvb2wgc2hvd0NvbHVtbk5vOiBmYWxzZSwKICAgIGJvb2wgc2hvd0RvdHM6IHRydWUsCiAgICBTdHJpbmcgZmlsZVByZWZpeCwKICAgIFN0cmluZyBsYW1iZGE6IHInPyd9KSB7CiAgcmV0dXJuIG5ldyBTdGFja1RyYWNlTGluZXMuZnJvbVRyYWNlKHN0YWNrVHJhY2UsCiAgICAgICAgICByYW5nZVN0YXJ0OiByYW5nZVN0YXJ0LAogICAgICAgICAgcmFuZ2VFbmQ6IHJhbmdlRW5kLAogICAgICAgICAgZmlsZVByZWZpeDogZmlsZVByZWZpeCwKICAgICAgICAgIGxhbWJkYTogbGFtYmRhKQogICAgICAucHJldHRpZnkoc2hvd0NvbHVtbk5vOiBzaG93Q29sdW1uTm8sIHNob3dEb3RzOiBzaG93RG90cyk7Cn0KCi8vLyBQYWRzIChvciB0cnVuY2F0ZXMpIFt0ZXh0XSB0byB0aGUgW2ludGVuZGVkTGVuZ3RoXS4KLy8vCi8vLyBJZiBbcGFkTGVmdF0gaXMgWzp0cnVlOl0gdGhlIHRleHQgaXMgcGFkZGluZyBpbnNlcnRlZCB0byB0aGUgbGVmdCBvZiBbdGV4dF0uCi8vLyBBIHJlcGV0aXRpb24gb2YgdGhlIFtkb3RzXSB0ZXh0IGlzIHVzZWQgZm9yIHBhZGRpbmcuClN0cmluZyBwYWQoU3RyaW5nIHRleHQsIGludCBpbnRlbmRlZExlbmd0aCwKICAgIHtib29sIHBhZExlZnQ6IGZhbHNlLCBTdHJpbmcgZG90czogJyAnfSkgewogIGlmICh0ZXh0Lmxlbmd0aCA9PSBpbnRlbmRlZExlbmd0aCkgcmV0dXJuIHRleHQ7CiAgaWYgKHRleHQubGVuZ3RoID4gaW50ZW5kZWRMZW5ndGgpIHJldHVybiB0ZXh0LnN1YnN0cmluZygwLCBpbnRlbmRlZExlbmd0aCk7CiAgaWYgKGRvdHMgPT0gbnVsbCB8fCBkb3RzLmlzRW1wdHkpIGRvdHMgPSAnICc7CiAgaW50IGRvdHNMZW5ndGggPSBkb3RzLmxlbmd0aDsKICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgaWYgKCFwYWRMZWZ0KSB7CiAgICBzYi53cml0ZSh0ZXh0KTsKICB9CiAgZm9yIChpbnQgaW5kZXggPSB0ZXh0Lmxlbmd0aDsgaW5kZXggPCBpbnRlbmRlZExlbmd0aDsgaW5kZXgrKykgewogICAgaW50IGRvdHNJbmRleCA9IGluZGV4ICUgZG90c0xlbmd0aDsKICAgIHNiLndyaXRlKGRvdHMuc3Vic3RyaW5nKGRvdHNJbmRleCwgZG90c0luZGV4ICsgMSkpOwogIH0KICBpZiAocGFkTGVmdCkgewogICAgc2Iud3JpdGUodGV4dCk7CiAgfQogIHJldHVybiBzYi50b1N0cmluZygpOwp9CoFfAE5OPAEZHAEkI0gBOwQ7BE9NTygESwRQTUwPEhURAgEcUAgOExcKKU0SEBkGHSoGJCUEAgFROCtGAgEsHUFIATokFRoCATo1ASgWQVA7J0QSKwYTBgIBPgRRTS8/GzwIDhw1HBwrBAIBNhgkGx0fATJQOBQbHR8BHjVPFD0xJ1E7MgwRQDkkARg0M0IUCgEuPT5EARcZJUNDECESISMjIR0rDiExGRstDBFBGRAfKSExHxstDAoBLysKMy8KAUlBNAorJwo9HkUKThQvCAYqQwQBPDUBKU8tBAFFKhYpFhclMikmLgEUBhoEAQwWFwQCASYXExUXGRcBEkcBIBwWGBojIh47BiAgQQY4Ij4GPgQBDBUYHR8hHgQBDBwtMCMeIiYgBAEMPgIBPlAES042BE4YRVEjTTBJMRUSHhkXHDMiHiIaQQIBOARROSwvMk4wICgSFARDKDgEERQEGAIBJ3BhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvdHJhY2UuZGFydDtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9oZWxwZXJzL2RlYnVnX2NvbGxlY3Rpb24uZGFydK+8Ly8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnR5cGVkZWYgdm9pZCBEZWJ1Z0NhbGxiYWNrKFN0cmluZyBtZXRob2ROYW1lLCB2YXIgYXJnMSwgdmFyIGFyZzIpOwoKY2xhc3MgRGVidWdNYXA8SywgVj4gaW1wbGVtZW50cyBNYXA8SywgVj4gewogIGZpbmFsIE1hcDxLLCBWPiBzb3VyY2VNYXA7CiAgRGVidWdDYWxsYmFjayBpbmRleFNldENhbGxiYWNrOwogIERlYnVnQ2FsbGJhY2sgcHV0SWZBYnNlbnRDYWxsYmFjazsKICBEZWJ1Z0NhbGxiYWNrIHJlbW92ZUNhbGxiYWNrOwoKICBEZWJ1Z01hcCh0aGlzLnNvdXJjZU1hcCwge0RlYnVnQ2FsbGJhY2sgYWRkQ2FsbGJhY2ssIHRoaXMucmVtb3ZlQ2FsbGJhY2t9KSB7CiAgICBpZiAoYWRkQ2FsbGJhY2sgIT0gbnVsbCkgewogICAgICB0aGlzLmFkZENhbGxiYWNrID0gYWRkQ2FsbGJhY2s7CiAgICB9CiAgfQoKICB2b2lkIHNldCBhZGRDYWxsYmFjayhEZWJ1Z0NhbGxiYWNrIHZhbHVlKSB7CiAgICBpbmRleFNldENhbGxiYWNrID0gdmFsdWU7CiAgICBwdXRJZkFic2VudENhbGxiYWNrID0gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8UkssIFJWPiBjYXN0PFJLLCBSVj4oKSA9PiBNYXAuY2FzdEZyb208SywgViwgUkssIFJWPih0aGlzKTsKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKSB7CiAgICByZXR1cm4gc291cmNlTWFwLmNvbnRhaW5zVmFsdWUodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSA9PiBzb3VyY2VNYXAuY29udGFpbnNLZXkoa2V5KTsKCiAgQG92ZXJyaWRlCiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSA9PiBzb3VyY2VNYXBba2V5XTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIGlmIChpbmRleFNldENhbGxiYWNrICE9IG51bGwpIHsKICAgICAgaW5kZXhTZXRDYWxsYmFjaygnW109Jywga2V5LCB2YWx1ZSk7CiAgICB9CiAgICBzb3VyY2VNYXBba2V5XSA9IHZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSB7CiAgICByZXR1cm4gc291cmNlTWFwLnB1dElmQWJzZW50KGtleSwgKCkgewogICAgICBWIHYgPSBpZkFic2VudCgpOwogICAgICBpZiAocHV0SWZBYnNlbnRDYWxsYmFjayAhPSBudWxsKSB7CiAgICAgICAgcHV0SWZBYnNlbnRDYWxsYmFjaygncHV0SWZBYnNlbnQnLCBrZXksIHYpOwogICAgICB9CiAgICAgIHJldHVybiB2OwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpID0+IHNvdXJjZU1hcC5hZGRBbGwob3RoZXIpOwoKICBAb3ZlcnJpZGUKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBpZiAocmVtb3ZlQ2FsbGJhY2sgIT0gbnVsbCkgewogICAgICByZW1vdmVDYWxsYmFjaygncmVtb3ZlJywga2V5LCBzb3VyY2VNYXBba2V5XSk7CiAgICB9CiAgICByZXR1cm4gc291cmNlTWFwLnJlbW92ZShrZXkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbGVhcigpIHsKICAgIGlmIChyZW1vdmVDYWxsYmFjayAhPSBudWxsKSB7CiAgICAgIHJlbW92ZUNhbGxiYWNrKCdjbGVhcicsIHNvdXJjZU1hcCwgbnVsbCk7CiAgICB9CiAgICBzb3VyY2VNYXAuY2xlYXIoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaCh2b2lkIGYoSyBrZXksIFYgdmFsdWUpKSA9PiBzb3VyY2VNYXAuZm9yRWFjaChmKTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gc291cmNlTWFwLmtleXM7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gc291cmNlTWFwLnZhbHVlczsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGdldCBlbnRyaWVzID0+IHNvdXJjZU1hcC5lbnRyaWVzOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGVudHJpZXMpIHsKICAgIHNvdXJjZU1hcC5hZGRFbnRyaWVzKGVudHJpZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEsyLCBWMj4gbWFwPEsyLCBWMj4oTWFwRW50cnk8SzIsIFYyPiB0cmFuc2Zvcm0oSyBrZXksIFYgdmFsdWUpKSA9PgogICAgICBzb3VyY2VNYXAubWFwKHRyYW5zZm9ybSk7CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IHNvdXJjZU1hcC5sZW5ndGg7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gc291cmNlTWFwLmlzRW1wdHk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gc291cmNlTWFwLmlzTm90RW1wdHk7CgogIEBvdmVycmlkZQogIFYgdXBkYXRlKEsga2V5LCBWIHVwZGF0ZShWIHZhbHVlKSwge1YgaWZBYnNlbnQoKX0pID0+CiAgICAgIHNvdXJjZU1hcC51cGRhdGUoa2V5LCB1cGRhdGUsIGlmQWJzZW50OiBpZkFic2VudCk7CgogIEBvdmVycmlkZQogIHZvaWQgdXBkYXRlQWxsKFYgdXBkYXRlKEsga2V5LCBWIHZhbHVlKSkgewogICAgc291cmNlTWFwLnVwZGF0ZUFsbCh1cGRhdGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBzb3VyY2VNYXAucmVtb3ZlV2hlcmUodGVzdCk7CiAgfQp9CgpjbGFzcyBEZWJ1Z0l0ZXJhYmxlPEU+IGltcGxlbWVudHMgSXRlcmFibGU8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlOwoKICBEZWJ1Z0l0ZXJhYmxlKHRoaXMuaXRlcmFibGUpOwoKICBAb3ZlcnJpZGUKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gaXRlcmFibGUuaXRlcmF0b3I7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFI+IGNhc3Q8Uj4oKSA9PiBJdGVyYWJsZS5jYXN0RnJvbTxFLCBSPih0aGlzKTsKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZWxlbWVudCkpID0+IGl0ZXJhYmxlLm1hcChmKTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RT4gd2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IGl0ZXJhYmxlLndoZXJlKHRlc3QpOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxUPiBleHBhbmQ8VD4oSXRlcmFibGU8VD4gZihFIGVsZW1lbnQpKSA9PiBpdGVyYWJsZS5leHBhbmQoZik7CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpID0+IGl0ZXJhYmxlLmNvbnRhaW5zKGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2godm9pZCBmKEUgZWxlbWVudCkpID0+IGl0ZXJhYmxlLmZvckVhY2goZik7CgogIEBvdmVycmlkZQogIEUgcmVkdWNlKEUgY29tYmluZShFIHZhbHVlLCBFIGVsZW1lbnQpKSA9PiBpdGVyYWJsZS5yZWR1Y2UoY29tYmluZSk7CgogIEBvdmVycmlkZQogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgcHJldmlvdXNWYWx1ZSwgRSBlbGVtZW50KSkgewogICAgcmV0dXJuIGl0ZXJhYmxlLmZvbGQoaW5pdGlhbFZhbHVlLCBjb21iaW5lKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZXZlcnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IGl0ZXJhYmxlLmV2ZXJ5KHRlc3QpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgPT4gaXRlcmFibGUuam9pbihzZXBhcmF0b3IpOwoKICBAb3ZlcnJpZGUKICBib29sIGFueShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gaXRlcmFibGUuYW55KHRlc3QpOwoKICBAb3ZlcnJpZGUKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pIHsKICAgIHJldHVybiBpdGVyYWJsZS50b0xpc3QoZ3Jvd2FibGU6IGdyb3dhYmxlKTsKICB9CgogIEBvdmVycmlkZQogIFNldDxFPiB0b1NldCgpID0+IGl0ZXJhYmxlLnRvU2V0KCk7CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IGl0ZXJhYmxlLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBpdGVyYWJsZS5pc0VtcHR5OwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05vdEVtcHR5ID0+IGl0ZXJhYmxlLmlzTm90RW1wdHk7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEU+IHRha2UoaW50IG4pID0+IGl0ZXJhYmxlLnRha2Uobik7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEU+IHRha2VXaGlsZShib29sIHRlc3QoRSB2YWx1ZSkpID0+IGl0ZXJhYmxlLnRha2VXaGlsZSh0ZXN0KTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RT4gc2tpcChpbnQgbikgPT4gaXRlcmFibGUuc2tpcChuKTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RT4gc2tpcFdoaWxlKGJvb2wgdGVzdChFIHZhbHVlKSkgPT4gaXRlcmFibGUuc2tpcFdoaWxlKHRlc3QpOwoKICBAb3ZlcnJpZGUKICBFIGdldCBmaXJzdCA9PiBpdGVyYWJsZS5maXJzdDsKCiAgQG92ZXJyaWRlCiAgRSBnZXQgbGFzdCA9PiBpdGVyYWJsZS5sYXN0OwoKICBAb3ZlcnJpZGUKICBFIGdldCBzaW5nbGUgPT4gaXRlcmFibGUuc2luZ2xlOwoKICBAb3ZlcnJpZGUKICBFIGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgcmV0dXJuIGl0ZXJhYmxlLmZpcnN0V2hlcmUodGVzdCwgb3JFbHNlOiBvckVsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgRSBsYXN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgcmV0dXJuIGl0ZXJhYmxlLmxhc3RXaGVyZSh0ZXN0LCBvckVsc2U6IG9yRWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBFIHNpbmdsZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pID0+CiAgICAgIGl0ZXJhYmxlLnNpbmdsZVdoZXJlKHRlc3QsIG9yRWxzZTogb3JFbHNlKTsKCiAgQG92ZXJyaWRlCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSA9PiBpdGVyYWJsZS5lbGVtZW50QXQoaW5kZXgpOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxFPiBmb2xsb3dlZEJ5KEl0ZXJhYmxlPEU+IG90aGVyKSA9PiBpdGVyYWJsZS5mb2xsb3dlZEJ5KG90aGVyKTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8VD4gd2hlcmVUeXBlPFQ+KCkgPT4gaXRlcmFibGUud2hlcmVUeXBlPFQ+KCk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IGl0ZXJhYmxlLnRvU3RyaW5nKCk7Cn0KCmNsYXNzIERlYnVnTGlzdDxFPiBleHRlbmRzIERlYnVnSXRlcmFibGU8RT4gaW1wbGVtZW50cyBMaXN0PEU+IHsKICBEZWJ1Z0NhbGxiYWNrIGFkZENhbGxiYWNrOwogIERlYnVnQ2FsbGJhY2sgYWRkQWxsQ2FsbGJhY2s7CgogIERlYnVnTGlzdChMaXN0PEU+IGxpc3QsIHt0aGlzLmFkZENhbGxiYWNrLCB0aGlzLmFkZEFsbENhbGxiYWNrfSkKICAgICAgOiBzdXBlcihsaXN0KTsKCiAgTGlzdDxFPiBnZXQgbGlzdCA9PiBpdGVyYWJsZTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxSPiBjYXN0PFI+KCkgPT4gTGlzdC5jYXN0RnJvbTxFLCBSPih0aGlzKTsKICBAb3ZlcnJpZGUKICBMaXN0PEU+IG9wZXJhdG9yICsoTGlzdDxFPiBvdGhlcikgPT4gbGlzdCArIG90aGVyOwoKICBAb3ZlcnJpZGUKICBFIG9wZXJhdG9yIFtdKGludCBpbmRleCkgPT4gbGlzdFtpbmRleF07CgogIEBvdmVycmlkZQogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgRSB2YWx1ZSkgewogICAgbGlzdFtpbmRleF0gPSB2YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgc2V0IGZpcnN0KEUgZWxlbWVudCkgewogICAgbGlzdC5maXJzdCA9IGVsZW1lbnQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHNldCBsYXN0KEUgZWxlbWVudCkgewogICAgbGlzdC5sYXN0ID0gZWxlbWVudDsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IGxpc3QubGVuZ3RoOwoKICBAb3ZlcnJpZGUKICB2b2lkIHNldCBsZW5ndGgoaW50IG5ld0xlbmd0aCkgewogICAgbGlzdC5sZW5ndGggPSBuZXdMZW5ndGg7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZChFIHZhbHVlKSB7CiAgICBpZiAoYWRkQ2FsbGJhY2sgIT0gbnVsbCkgewogICAgICBhZGRDYWxsYmFjaygnYWRkJywgdmFsdWUsIG51bGwpOwogICAgfQogICAgbGlzdC5hZGQodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIGlmIChhZGRBbGxDYWxsYmFjayAhPSBudWxsKSB7CiAgICAgIGFkZEFsbENhbGxiYWNrKCdhZGRBbGwnLCBpdGVyYWJsZSwgbnVsbCk7CiAgICB9CiAgICBsaXN0LmFkZEFsbChpdGVyYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxFPiBnZXQgcmV2ZXJzZWQgPT4gbGlzdC5yZXZlcnNlZDsKCiAgQG92ZXJyaWRlCiAgdm9pZCBzb3J0KFtpbnQgY29tcGFyZShFIGEsIEUgYildKSA9PiBsaXN0LnNvcnQoY29tcGFyZSk7CgogIEBvdmVycmlkZQogIHZvaWQgc2h1ZmZsZShbcmFuZG9tXSkgPT4gbGlzdC5zaHVmZmxlKHJhbmRvbSk7CgogIEBvdmVycmlkZQogIGludCBpbmRleE9mKEUgZWxlbWVudCwgW2ludCBzdGFydCA9IDBdKSA9PiBsaXN0LmluZGV4T2YoZWxlbWVudCwgc3RhcnQpOwoKICBAb3ZlcnJpZGUKICBpbnQgaW5kZXhXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwgW2ludCBzdGFydCA9IDBdKSA9PgogICAgICBsaXN0LmluZGV4V2hlcmUodGVzdCwgc3RhcnQpOwoKICBAb3ZlcnJpZGUKICBpbnQgbGFzdEluZGV4T2YoRSBlbGVtZW50LCBbaW50IHN0YXJ0XSkgPT4gbGlzdC5sYXN0SW5kZXhPZihlbGVtZW50LCBzdGFydCk7CgogIEBvdmVycmlkZQogIGludCBsYXN0SW5kZXhXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwgW2ludCBzdGFydF0pID0+CiAgICAgIGxpc3QubGFzdEluZGV4V2hlcmUodGVzdCwgc3RhcnQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFyKCkgPT4gbGlzdC5jbGVhcigpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGluc2VydChpbnQgaW5kZXgsIEUgZWxlbWVudCkgPT4gbGlzdC5pbnNlcnQoaW5kZXgsIGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGluc2VydEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICBsaXN0Lmluc2VydEFsbChpbmRleCwgaXRlcmFibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgPT4gbGlzdC5zZXRBbGwoaW5kZXgsIGl0ZXJhYmxlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCByZW1vdmUoT2JqZWN0IHZhbHVlKSA9PiBsaXN0LnJlbW92ZSh2YWx1ZSk7CgogIEBvdmVycmlkZQogIEUgcmVtb3ZlQXQoaW50IGluZGV4KSA9PiBsaXN0LnJlbW92ZUF0KGluZGV4KTsKCiAgQG92ZXJyaWRlCiAgRSByZW1vdmVMYXN0KCkgPT4gbGlzdC5yZW1vdmVMYXN0KCk7CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IGxpc3QucmVtb3ZlV2hlcmUodGVzdCk7CgogIEBvdmVycmlkZQogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IGxpc3QucmV0YWluV2hlcmUodGVzdCk7CgogIEBvdmVycmlkZQogIExpc3Q8RT4gc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSkgPT4gbGlzdC5zdWJsaXN0KHN0YXJ0LCBlbmQpOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxFPiBnZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpID0+IGxpc3QuZ2V0UmFuZ2Uoc3RhcnQsIGVuZCk7CgogIEBvdmVycmlkZQogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBpdGVyYWJsZSwgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgbGlzdC5zZXRSYW5nZShzdGFydCwgZW5kLCBpdGVyYWJsZSwgc2tpcENvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBsaXN0LnJlbW92ZVJhbmdlKHN0YXJ0LCBlbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmaWxsUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBbRSBmaWxsVmFsdWVdKSB7CiAgICBsaXN0LmZpbGxSYW5nZShzdGFydCwgZW5kLCBmaWxsVmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBsYWNlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiByZXBsYWNlbWVudCkgewogICAgbGlzdC5yZXBsYWNlUmFuZ2Uoc3RhcnQsIGVuZCwgcmVwbGFjZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPGludCwgRT4gYXNNYXAoKSA9PiBsaXN0LmFzTWFwKCk7Cn0KCmNsYXNzIERlYnVnU2V0PEU+IGV4dGVuZHMgRGVidWdJdGVyYWJsZTxFPiBpbXBsZW1lbnRzIFNldDxFPiB7CiAgRGVidWdDYWxsYmFjayBhZGRDYWxsYmFjazsKCiAgRGVidWdTZXQoU2V0PEU+IHNldCwge3RoaXMuYWRkQ2FsbGJhY2t9KSA6IHN1cGVyKHNldCk7CgogIFNldDxFPiBnZXQgc2V0ID0+IGl0ZXJhYmxlOwoKICBAb3ZlcnJpZGUKICBTZXQ8Uj4gY2FzdDxSPigpID0+IFNldC5jYXN0RnJvbTxFLCBSPih0aGlzKTsKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zKE9iamVjdCB2YWx1ZSkgPT4gc2V0LmNvbnRhaW5zKHZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBhZGQoRSB2YWx1ZSkgewogICAgaWYgKGFkZENhbGxiYWNrICE9IG51bGwpIHsKICAgICAgYWRkQ2FsbGJhY2soJ2FkZCcsIHZhbHVlLCBudWxsKTsKICAgIH0KICAgIHJldHVybiBzZXQuYWRkKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSB7CiAgICBlbGVtZW50cy5mb3JFYWNoKGFkZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHJlbW92ZShPYmplY3QgdmFsdWUpID0+IHNldC5yZW1vdmUodmFsdWUpOwoKICBAb3ZlcnJpZGUKICBFIGxvb2t1cChPYmplY3Qgb2JqZWN0KSA9PiBzZXQubG9va3VwKG9iamVjdCk7CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpID0+IHNldC5yZW1vdmVBbGwoZWxlbWVudHMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJldGFpbkFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSA9PiBzZXQucmV0YWluQWxsKGVsZW1lbnRzKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gc2V0LnJlbW92ZVdoZXJlKHRlc3QpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBzZXQucmV0YWluV2hlcmUodGVzdCk7CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcikgPT4gc2V0LmNvbnRhaW5zQWxsKG90aGVyKTsKCiAgQG92ZXJyaWRlCiAgU2V0PEU+IGludGVyc2VjdGlvbihTZXQ8T2JqZWN0PiBvdGhlcikgPT4gc2V0LmludGVyc2VjdGlvbihvdGhlcik7CgogIEBvdmVycmlkZQogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpID0+IHNldC51bmlvbihvdGhlcik7CgogIEBvdmVycmlkZQogIFNldDxFPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSA9PiBzZXQuZGlmZmVyZW5jZShvdGhlcik7CgogIEBvdmVycmlkZQogIHZvaWQgY2xlYXIoKSA9PiBzZXQuY2xlYXIoKTsKCiAgQG92ZXJyaWRlCiAgU2V0PEU+IHRvU2V0KCkgPT4gc2V0LnRvU2V0KCk7Cn0KCi8vLyBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBydW50aW1lIHR5cGUgb2YgW29iamVjdF0gaXMgbm90IGluCi8vLyBbcnVudGltZVR5cGVzXS4KLy8vCi8vLyBVc2UgdGhpcyB0byBncmFkdWFsbHkgYnVpbGQgdGhlIHNldCBvZiBhY3R1YWwgcnVudGltZSB2YWx1ZXMgb2YgW29iamVjdF0KLy8vIGF0IHRoZSBjYWxsIHNpdGUgYnkgcnVubmluZyB0ZXN0IHByb2dyYW1zIGFuZCBhZGRpbmcgdG8gW3J1bnRpbWVUeXBlc10gd2hlbgovLy8gbmV3IHR5cGUgYXJlIGZvdW5kLgp2b2lkIGFzc2VydFR5cGUoU3RyaW5nIG5hbWUsIExpc3Q8U3RyaW5nPiBydW50aW1lVHlwZXMsIHZhciBvYmplY3QsCiAgICB7Ym9vbCBzaG93T2JqZWN0czogZmFsc2V9KSB7CiAgU3RyaW5nIHJ1bnRpbWVUeXBlID0gJyR7b2JqZWN0LnJ1bnRpbWVUeXBlfSc7CiAgaWYgKHJ1bnRpbWVUeXBlcyAhPSBudWxsICYmIHJ1bnRpbWVUeXBlcy5jb250YWlucyhydW50aW1lVHlwZSkpIHJldHVybjsKICB0aHJvdyAnJG5hbWU6ICRydW50aW1lVHlwZScKICAgICAgJyR7c2hvd09iamVjdHMgPyAnICgkb2JqZWN0KScgOiAnJ30nOwp9CgovLy8gQ2FsbGJhY2sgZm9yIHRoZSBbYWRkQ2FsbGJhY2tdIG9mIFtEZWJ1Z01hcF0gdGhhdCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmCi8vLyB0aGUgcnVudGltZSB0eXBlIG9mIGtleS92YWx1ZSBwYWlycyBhcmUgbm90IGluIFtydW50aW1lVHlwZXNdLgovLy8KLy8vIFVzZSB0aGlzIHRvIGdyYWR1YWxseSBidWlsZCB0aGUgc2V0IG9mIGFjdHVhbCBydW50aW1lIHZhbHVlcyBvZiBrZXkvdmFsdWUKLy8vIHBhaXJzIG9mIGEgbWFwIGJ5IHJ1bm5pbmcgdGVzdCBwcm9ncmFtcyBhbmQgYWRkaW5nIHRvIFtydW50aW1lVHlwZXNdIHdoZW4KLy8vIG5ldyB0eXBlIGFyZSBmb3VuZC4KY2xhc3MgTWFwVHlwZUFzc2VydGVyIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PFN0cmluZz4+IHJ1bnRpbWVUeXBlczsKICBmaW5hbCBib29sIHNob3dPYmplY3RzOwoKICBjb25zdCBNYXBUeXBlQXNzZXJ0ZXIodGhpcy5uYW1lLCB0aGlzLnJ1bnRpbWVUeXBlcywKICAgICAge2Jvb2wgdGhpcy5zaG93T2JqZWN0czogZmFsc2V9KTsKCiAgdm9pZCBjYWxsKFN0cmluZyBtZXRob2ROYW1lLCB2YXIga2V5LCB2YXIgdmFsdWUpIHsKICAgIGNoZWNrKGtleSwgdmFsdWUsICckbWV0aG9kTmFtZTogJyk7CiAgfQoKICB2b2lkIGNoZWNrKHZhciBrZXksIHZhciB2YWx1ZSwgW1N0cmluZyB0ZXh0ID0gJyddKSB7CiAgICBTdHJpbmcga2V5VHlwZSA9ICcke2tleS5ydW50aW1lVHlwZX0nOwogICAgU3RyaW5nIHZhbHVlVHlwZSA9ICcke3ZhbHVlLnJ1bnRpbWVUeXBlfSc7CiAgICBMaXN0PFN0cmluZz4gdmFsdWVzVHlwZXMgPSBydW50aW1lVHlwZXNba2V5VHlwZV07CiAgICBpZiAodmFsdWVzVHlwZXMgIT0gbnVsbCAmJiB2YWx1ZXNUeXBlcy5jb250YWlucyh2YWx1ZVR5cGUpKSByZXR1cm47CiAgICB0aHJvdyAnJG5hbWU6ICR0ZXh0JGtleVR5cGUgPT4gJHZhbHVlVHlwZScKICAgICAgICAnJHtzaG93T2JqZWN0cyA/ICcgKCRrZXkgPT4gJHZhbHVlKScgOiAnJ30nOwogIH0KfQoKLy8vIENhbGxiYWNrIGZvciB0aGUgW2FkZENhbGxiYWNrXSBvZiBbRGVidWdTZXRdIG9yIFtEZWJ1Z0xpc3RdICB0aGF0IHRocm93cyBhbgovLy8gZXhjZXB0aW9uIGlmIHRoZSBydW50aW1lIHR5cGUgb2YgdGhlIGVsZW1lbnRzIGFyZSBub3QgaW4gW3J1bnRpbWVUeXBlc10uCi8vLwovLy8gVXNlIHRoaXMgdG8gZ3JhZHVhbGx5IGJ1aWxkIHRoZSBzZXQgb2YgYWN0dWFsIHJ1bnRpbWUgdmFsdWVzIG9mIHRoZSBlbGVtZW50cwovLy8gb2YgYSBjb2xsZWN0aW9uIGJ5IHJ1bm5pbmcgdGVzdCBwcm9ncmFtcyBhbmQgYWRkaW5nIHRvIFtydW50aW1lVHlwZXNdIHdoZW4KLy8vIG5ldyB0eXBlIGFyZSBmb3VuZC4KY2xhc3MgQ29sbGVjdGlvblR5cGVBc3NlcnRlciB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgTGlzdDxTdHJpbmc+IHJ1bnRpbWVUeXBlczsKICBmaW5hbCBib29sIHNob3dPYmplY3RzOwoKICBjb25zdCBDb2xsZWN0aW9uVHlwZUFzc2VydGVyKHRoaXMubmFtZSwgdGhpcy5ydW50aW1lVHlwZXMsCiAgICAgIHtib29sIHRoaXMuc2hvd09iamVjdHM6IGZhbHNlfSk7CgogIHZvaWQgY2FsbChTdHJpbmcgbWV0aG9kTmFtZSwgdmFyIGVsZW1lbnQsIF8pIHsKICAgIGNoZWNrKGVsZW1lbnQsICckbWV0aG9kTmFtZTogJyk7CiAgfQoKICB2b2lkIGNoZWNrKHZhciBlbGVtZW50LCBbU3RyaW5nIHRleHQgPSAnJ10pIHsKICAgIFN0cmluZyBlbGVtZW50VHlwZSA9ICcke2VsZW1lbnQucnVudGltZVR5cGV9JzsKICAgIGlmIChydW50aW1lVHlwZXMuY29udGFpbnMoZWxlbWVudFR5cGUpKSByZXR1cm47CiAgICB0aHJvdyAnJG5hbWU6ICR0ZXh0JGVsZW1lbnRUeXBlJwogICAgICAgICcke3Nob3dPYmplY3RzID8gJyAoJGVsZW1lbnQpJyA6ICcnfSc7CiAgfQp9CoHvAE5OPAFDASwdIiUgAU8fJgYEAS4eIQQBDEIMJSsEAQw+AQwvAQwmJCsGHAQBDCcrGCk0CBAIBAEMOwEMGSI1BiIEAQwRIjAGFwQBDEABDCoBDC4BDD0BDDYjBAEMSSABDCYBDCkBDC8BDDg5AQwtIQQBDDAhBAIBMB4BIAEMMQEMOgw5AQxDAQxJAQw/AQw6AQxHAQxFMQQBDDwBDEQBDDgBDCowBAEMJgEMJQEMKAEMLgEMLwEMSQEMLwEMSQEMIQEMHwEMIwEMNTYEAQw0NQQBDDcyAQw3AQxLAQw5AQwsAgFBHSABQxUBIAEMMgw1AQwrAQwqGQQBDB4aBAEMHRkEAQwhAQwjHQQBDBYfJwYVBAEMJiIwBhsEAQwtAQw8AQwyAQxLAQw7JAEMTwEMOygBDCABDEQBDDQlBAEMUAEMMwEMMQEMJwEMRAEMRAEMRQEMSQEMUTQEAQwpIgQBDDYrBAEMQzAEAQwnAgE/HQE5AR4BDDAMNgEMFh8nBhsEAQwmGwQBDDIBDDEBDEgBDEgBDEMBDEMBDEYBDEUBDDIBDEEBDB8BDCECAUIUBE1QGEQhMEoeLAIBTUMETk4YGBUwGgE2JwE1KAQBNysvNkgvNQQCAVBNBFFPGB8VIxoBPScBMSUEATAzNCUvBAIBMnBhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvZGVidWdfY29sbGVjdGlvbi5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2hlbHBlcnMvZXhwZW5zaXZlX21hcC5kYXJ0i8AvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iOwoKLy8vIFRoZSBleHBlbnNpdmUgbWFwIGlzIGEgZGF0YSBzdHJ1Y3R1cmUgdXNlZnVsIGZvciB0cmFja2luZyBkb3duCi8vLyBleGNlc3NpdmUgbWVtb3J5IHVzYWdlIGR1ZSB0byBsYXJnZSBtYXBzLiBJdCBhY3RzIGFzIGFuIG9yZGluYXJ5Ci8vLyBoYXNoIG1hcCwgYnV0IGl0IHVzZXMgMTAgdGltZXMgbW9yZSBtZW1vcnkgKGJ5IGRlZmF1bHQpLgpjbGFzcyBFeHBlbnNpdmVNYXA8SywgVj4gZXh0ZW5kcyBNYXBCYXNlPEssIFY+IHsKICBmaW5hbCBMaXN0IF9tYXBzOwoKICBFeHBlbnNpdmVNYXAoW2ludCBjb3BpZXMgPSAxMF0pIDogX21hcHMgPSBuZXcgTGlzdChjb3BpZXMpIHsKICAgIGFzc2VydChjb3BpZXMgPiAwKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX21hcHMubGVuZ3RoOyBpKyspIHsKICAgICAgX21hcHNbaV0gPSBuZXcgTWFwPEssIFY+KCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbWFwc1swXS5sZW5ndGg7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfbWFwc1swXS5pc0VtcHR5OwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX21hcHNbMF0uaXNOb3RFbXB0eTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gX21hcHNbMF0ua2V5czsKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxWPiBnZXQgdmFsdWVzID0+IF9tYXBzWzBdLnZhbHVlczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSA9PiBfbWFwc1swXS5jb250YWluc0tleShrZXkpOwogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpID0+IF9tYXBzWzBdLmNvbnRhaW5zVmFsdWUodmFsdWUpOwoKICBAb3ZlcnJpZGUKICBWIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpID0+IF9tYXBzWzBdW2tleV07CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihLIGtleSwgViB2YWx1ZSkpIHsKICAgIF9tYXBzWzBdLmZvckVhY2goYWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9tYXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgIF9tYXBzW2ldW2tleV0gPSB2YWx1ZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgaWYgKGNvbnRhaW5zS2V5KGtleSkpIHJldHVybiB0aGlzW2tleV07CiAgICBWIHZhbHVlID0gaWZBYnNlbnQoKTsKICAgIHRoaXNba2V5XSA9IHZhbHVlOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9tYXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgIF9tYXBzW2ldLmFkZEFsbChvdGhlcik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBWIHJlc3VsdCA9IF9tYXBzWzBdLnJlbW92ZShrZXkpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBfbWFwcy5sZW5ndGg7IGkrKykgewogICAgICBfbWFwc1tpXS5yZW1vdmUoa2V5KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFyKCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfbWFwcy5sZW5ndGg7IGkrKykgewogICAgICBfbWFwc1tpXS5jbGVhcigpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEtSLCBWUj4gY2FzdDxLUiwgVlI+KCkgPT4gTWFwLmNhc3RGcm9tPEssIFYsIEtSLCBWUj4odGhpcyk7CiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGdldCBlbnRyaWVzID0+IF9tYXBzWzBdLmVudHJpZXM7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkRW50cmllcyhJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZW50cmllcykgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfbWFwcy5sZW5ndGg7IGkrKykgewogICAgICBfbWFwc1tpXS5hZGRFbnRyaWVzKGVudHJpZXMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEtSLCBWUj4gbWFwPEtSLCBWUj4oTWFwRW50cnk8S1IsIFZSPiB0cmFuc2Zvcm0oSyBrZXksIFYgdmFsdWUpKSA9PgogICAgICBfbWFwc1swXS5tYXAodHJhbnNmb3JtKTsKCiAgQG92ZXJyaWRlCiAgViB1cGRhdGUoSyBrZXksIFYgdXBkYXRlKFYgdmFsdWUpLCB7ViBpZkFic2VudCgpfSkgewogICAgViByZXN1bHQ7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9tYXBzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdCA9IF9tYXBzW2ldLnVwZGF0ZShrZXksIHVwZGF0ZSwgaWZBYnNlbnQ6IGlmQWJzZW50KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHVwZGF0ZUFsbChWIHVwZGF0ZShLIGtleSwgViB2YWx1ZSkpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX21hcHMubGVuZ3RoOyBpKyspIHsKICAgICAgX21hcHNbaV0udXBkYXRlQWxsKHVwZGF0ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChLIGtleSwgViB2YWx1ZSkpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX21hcHMubGVuZ3RoOyBpKyspIHsKICAgICAgX21hcHNbaV0ucmVtb3ZlV2hlcmUodGVzdCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiZXhwZW5zaXZlKCR7X21hcHNbMF19eCR7X21hcHMubGVuZ3RofSkiOwp9Cn4ATk48ARoBQ0U9MRQBPxgtIgYEAQwlDCgMLgEMKQwtAQw9DEUBDC4BDC4eBAEMJi0dBgQBDCcsGhcSBAEMIS0eBgQBDBklLRwGEwQBDBEtGAYEAQxCDDwBDDYtJAYEAQxJHwEMNw4tQQYTBAEMLS0iBgQBDDAtIgYEAQxBAgEvcGFja2FnZTpjb21waWxlci9zcmMvaGVscGVycy9leHBlbnNpdmVfbWFwLmRhcnQ4c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaGVscGVycy9leHBlbnNpdmVfc2V0LmRhcnSNny8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgovLy8gVGhlIGV4cGVuc2l2ZSBzZXQgaXMgYSBkYXRhIHN0cnVjdHVyZSB1c2VmdWwgZm9yIHRyYWNraW5nIGRvd24KLy8vIGV4Y2Vzc2l2ZSBtZW1vcnkgdXNhZ2UgZHVlIHRvIGxhcmdlIHNldHMuIEl0IGFjdHMgYXMgYW4gb3JkaW5hcnkKLy8vIGhhc2ggc2V0LCBidXQgaXQgdXNlcyAxMCB0aW1lcyBtb3JlIG1lbW9yeSAoYnkgZGVmYXVsdCkuCmNsYXNzIEV4cGVuc2l2ZVNldDxFPiBleHRlbmRzIFNldEJhc2U8RT4gewogIGZpbmFsIExpc3QgX3NldHM7CgogIEV4cGVuc2l2ZVNldChbaW50IGNvcGllcyA9IDEwXSkgOiBfc2V0cyA9IG5ldyBMaXN0KGNvcGllcykgewogICAgYXNzZXJ0KGNvcGllcyA+IDApOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfc2V0cy5sZW5ndGg7IGkrKykgewogICAgICBfc2V0c1tpXSA9IG5ldyBTZXQ8RT4oKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgbGVuZ3RoID0+IF9zZXRzWzBdLmxlbmd0aDsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5ID0+IF9zZXRzWzBdLmlzRW1wdHk7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfc2V0c1swXS5pc05vdEVtcHR5OwoKICBAb3ZlcnJpZGUKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gX3NldHNbMF0uaXRlcmF0b3I7CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnMoT2JqZWN0IG9iamVjdCkgPT4gX3NldHNbMF0uY29udGFpbnMob2JqZWN0KTsKICBAb3ZlcnJpZGUKICBFIGxvb2t1cChPYmplY3Qgb2JqZWN0KSA9PiBfc2V0c1swXS5sb29rdXAob2JqZWN0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEUgZWxlbWVudCkpIHsKICAgIF9zZXRzWzBdLmZvckVhY2goYWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgYWRkKEUgZWxlbWVudCkgewogICAgYm9vbCByZXN1bHQgPSBfc2V0c1swXS5hZGQoZWxlbWVudCk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IF9zZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIF9zZXRzW2ldLmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBvYmplY3RzKSB7CiAgICBmb3IgKEUgZWFjaCBpbiBvYmplY3RzKSB7CiAgICAgIGFkZChlYWNoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgcmVtb3ZlKE9iamVjdCBvYmplY3QpIHsKICAgIGJvb2wgcmVzdWx0ID0gX3NldHNbMF0ucmVtb3ZlKG9iamVjdCk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IF9zZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIF9zZXRzW2ldLnJlbW92ZShvYmplY3QpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xlYXIoKSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9zZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIF9zZXRzW2ldLmNsZWFyKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlbW92ZUFsbChJdGVyYWJsZTxPYmplY3Q+IG9iamVjdHNUb1JlbW92ZSkgewogICAgZm9yICh2YXIgZWFjaCBpbiBvYmplY3RzVG9SZW1vdmUpIHsKICAgICAgcmVtb3ZlKGVhY2gpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgcmVtb3ZlQWxsKHRoaXMudG9MaXN0KCkud2hlcmUoKGUpID0+IHRlc3QoZSkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIHJlbW92ZUFsbCh0b0xpc3QoKS53aGVyZSgoZSkgPT4gIXRlc3QoZSkpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcikgewogICAgZm9yIChPYmplY3Qgb2JqZWN0IGluIG90aGVyKSB7CiAgICAgIGlmICghdGhpcy5jb250YWlucyhvYmplY3QpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIFNldCBfbmV3U2V0KCkgPT4gbmV3IEV4cGVuc2l2ZVNldChfc2V0cy5sZW5ndGgpOwoKICBAb3ZlcnJpZGUKICBTZXQ8RT4gaW50ZXJzZWN0aW9uKFNldDxPYmplY3Q+IG90aGVyKSB7CiAgICBTZXQ8RT4gcmVzdWx0ID0gX25ld1NldCgpOwogICAgaWYgKG90aGVyLmxlbmd0aCA8IHRoaXMubGVuZ3RoKSB7CiAgICAgIGZvciAodmFyIGVsZW1lbnQgaW4gb3RoZXIpIHsKICAgICAgICBpZiAodGhpcy5jb250YWlucyhlbGVtZW50KSkgcmVzdWx0LmFkZChlbGVtZW50KTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICAgIGlmIChvdGhlci5jb250YWlucyhlbGVtZW50KSkgcmVzdWx0LmFkZChlbGVtZW50KTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpIHsKICAgIHJldHVybiBfbmV3U2V0KCkuLmFkZEFsbCh0aGlzKS4uYWRkQWxsKG90aGVyKTsKICB9CgogIEBvdmVycmlkZQogIFNldDxFPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSB7CiAgICBTZXQ8RT4gcmVzdWx0ID0gX25ld1NldCgpOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoIW90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKSByZXN1bHQuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlIG9iamVjdHNUb1JldGFpbikgewogICAgU2V0IHJldGFpblNldDsKICAgIGlmIChvYmplY3RzVG9SZXRhaW4gaXMgU2V0KSB7CiAgICAgIHJldGFpblNldCA9IG9iamVjdHNUb1JldGFpbjsKICAgIH0gZWxzZSB7CiAgICAgIHJldGFpblNldCA9IG9iamVjdHNUb1JldGFpbi50b1NldCgpOwogICAgfQogICAgcmV0YWluV2hlcmUocmV0YWluU2V0LmNvbnRhaW5zKTsKICB9CgogIEBvdmVycmlkZQogIFNldDxFPiB0b1NldCgpIHsKICAgIHZhciByZXN1bHQgPSBuZXcgRXhwZW5zaXZlU2V0PEU+KF9zZXRzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9zZXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdC5fc2V0c1tpXSA9IF9zZXRzW2ldLnRvU2V0KCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gImV4cGVuc2l2ZSgke19zZXRzWzBdfXgke19zZXRzLmxlbmd0aH0pIjsKfQqAmABOTjwBGgFDRT0rFAE/GC0fBgQBDCUMKAwuAQwxAQw9DDYBDCkeBAEMGCktHQYTBAEMJR4RBgQBDB8rLR8GEwQBDBEtGAYEAQw1KBQGBAEMKzQEAQwrMAQBDC0jMAYRBAEzAQwrHyYjOQgNIDoIBhMEAQwfMwQBDCkfHjkGEwQBDC0TIiMNKwYlBAEMEzQtKgYTBAEMQQIBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvZXhwZW5zaXZlX3NldC5kYXJ0MHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2hlbHBlcnMvc3RhdHMuZGFydMAAXB0vLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEV2ZW50U2luazsKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CgppbXBvcnQgJy4uLy4uL2NvbXBpbGVyLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21waWxlci5kYXJ0JyBzaG93IENvbXBpbGVyOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JzsKCi8vIEhlbHBlciBtZXRob2RzIGZvciBzdGF0aXN0aWNzLgoKLy8vIEN1cnJlbnQgc3RhdHMgY29sbGVjdG9yLiBVc2UgW2VuYWJsZVN0YXRzT3V0cHV0XSB0byBlbmFibGUgcmVjb3JkaW5nIG9mCi8vLyBzdGF0cy4KU3RhdHMgZ2V0IHN0YXRzIHsKICBlbmFibGVEZWJ1Z01vZGUoKTsKICBpZiAoX3N0YXRzID09IG51bGwpIHsKICAgIF9zdGF0cyA9IGNvbnN0IFN0YXRzKCk7CiAgfQogIHJldHVybiBfc3RhdHM7Cn0KClN0YXRzIF9zdGF0czsKCi8vLyBFbmFibGUgcmVjb3JkaW5nIG9mIHN0YXRzLiBVc2UgW1N0YXRzLmR1bXBTdGF0c10gdG8gb3V0cHV0IHRoZSByZWNvcmQgc3RhdHMuCi8vLwovLy8gUGFzcyB0aGUgW291dHB1dFByb3ZpZGVyXSBvZiBbQ29tcGlsZXJdIHRvIGdlbmVyYXRlIHN0YXRzIGludG8gYSBzZXBhcmF0ZQovLy8gZmlsZSB1c2luZyBbbmFtZV0gYW5kIFtleHRlbnNpb25dIGZvciB0aGUgZmlsZW5hbWUuIElmIG9taXR0ZWQsIHN0YXRzIGFyZQovLy8gcHJpbnRlZCBvbiBzdGFuZGFyZCBvdXQuCi8vLwovLy8gSWYgW3htbF0gaXMgYHRydWVgLCBzdGF0cyBvdXRwdXQgaXMgZm9ybWF0dGVkIGFzIFhNTCB3aXRoIGEgZGVmYXVsdAovLy8gZXh0ZW5zaW9uIG9mICd4bWwnLCBvdGhlcndpc2UgdGhlIG91dHB1dCBpcyBpbmRlbnRlZCB0ZXh0IHdpdGggYSBkZWZhdWx0Ci8vLyBleHRlbnNpb24gb2YgJ2xvZycuCnZvaWQgZW5hYmxlU3RhdHNPdXRwdXQoCiAgICB7Q29tcGlsZXJPdXRwdXRQcm92aWRlciBvdXRwdXRQcm92aWRlciwKICAgIGJvb2wgeG1sOiB0cnVlLAogICAgU3RyaW5nIG5hbWU6ICdzdGF0cycsCiAgICBTdHJpbmcgZXh0ZW5zaW9uLAogICAgaW50IGV4YW1wbGVzOiAxMH0pIHsKICBpZiAoX3N0YXRzICE9IG51bGwpIHsKICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCdTdGF0cyBoYXZlIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4nKTsKICB9CiAgZW5hYmxlRGVidWdNb2RlKCk7CgogIFN0YXRzT3V0cHV0IG91dHB1dDsKICBpZiAob3V0cHV0UHJvdmlkZXIgIT0gbnVsbCkgewogICAgaWYgKGV4dGVuc2lvbiA9PSBudWxsKSB7CiAgICAgIGV4dGVuc2lvbiA9IHhtbCA/ICd4bWwnIDogJ2xvZyc7CiAgICB9CiAgICBvdXRwdXQgPSBuZXcgU2lua091dHB1dChvdXRwdXRQcm92aWRlcihuYW1lLCBleHRlbnNpb24pKTsKICB9IGVsc2UgewogICAgb3V0cHV0ID0gY29uc3QgRGVidWdPdXRwdXQoKTsKICB9CiAgU3RhdHNQcmludGVyIHByaW50ZXI7CiAgaWYgKHhtbCkgewogICAgcHJpbnRlciA9IG5ldyBYTUxQcmludGVyKG91dHB1dDogb3V0cHV0LCBleGFtcGxlczogZXhhbXBsZXMpOwogIH0gZWxzZSB7CiAgICBwcmludGVyID0gbmV3IENvbnNvbGVQcmludGVyKG91dHB1dDogb3V0cHV0LCBleGFtcGxlczogZXhhbXBsZXMpOwogIH0KICBfc3RhdHMgPSBuZXcgQWN0aXZlU3RhdHMocHJpbnRlcik7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIGdhdGhlcmluZyBhbmQgZGlzcGxheSBvZiBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4KLy8vIFRoaXMgY2xhc3Mgc2VydmVzIGFzIHRoZSBub29wIGNvbGxlY3Rvci4KY2xhc3MgU3RhdHMgewogIGNvbnN0IFN0YXRzKCk7CgogIC8vLyBSZWdpc3RlcnMgW2tleV0sIFt2YWx1ZV0gcGFpciBpbiB0aGUgbWFwIFtpZF0uIElmIFtmcm9tRXhpc3RpbmddIGlzCiAgLy8vIG5vbi1udWxsIGFuZCBba2V5XSBhbHJlYWR5IGV4aXN0cywgdGhlIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBba2V5XSB3aWxsCiAgLy8vIGJlIHRoZSByZXR1cm4gdmFsdWUgb2YgW2Zyb21FeGlzdGluZ10gd2hlbiBjYWxsZWQgd2l0aCB0aGUgZXhpc3RpbmcgdmFsdWUuCiAgLy8vCiAgLy8vIFRoZSByZWNvcmRlZCBpbmZvcm1hdGlvbiBpcyBub3QgZHVtcGVkIGF1dG9tYXRpY2FsbHkuCiAgdm9pZCByZWNvcmRNYXAoaWQsIGtleSwgdmFsdWUsIHtmcm9tRXhpc3RpbmcodmFsdWUpfSkge30KCiAgLy8vIFJldHVybnMgdGhlIG1hcCBbaWRdIHJlY29yZGVkIHdpdGggW3JlY29yZE1hcF0uCiAgTWFwIGdldE1hcChpZCkgPT4gY29uc3Qge307CgogIC8vLyBSZWdpc3RlcnMgW2VsZW1lbnRdIGFzIGFuIGVsZW1lbnQgb2YgdGhlIGxpc3QgW2lkXS4gSWYgcHJvdmlkZWQsIFtkYXRhXQogIC8vLyBwcm92aWRlcyBhZGRpdGlvbmFsIGRhdGEgZm9yIFtlbGVtZW50XS4KICAvLy8KICAvLy8gVGhlIHJlY29yZGVkIGluZm9ybWF0aW9uIGlzIGR1bXBlZCBhdXRvbWF0aWNhbGx5IG9uIGNhbGwgdG8gW2R1bXBTdGF0c10uCiAgLy8vCiAgLy8vIEV4YW1wbGU6CiAgLy8vICAgQ2FsbGluZyBbcmVjb3JkRWxlbWVudF0gbGlrZSB0aGlzOgogIC8vLyAgICAgcmVjb3JkRWxlbWVudCgnZm9vJywgJ2EnLCBkYXRhOiAnZmlyc3QtYS1kYXRhJyk7CiAgLy8vICAgICByZWNvcmRFbGVtZW50KCdmb28nLCAnYScsIGRhdGE6ICdzZWNvbmQtYS1kYXRhJyk7CiAgLy8vICAgICByZWNvcmRFbGVtZW50KCdmb28nLCAnYicpOwogIC8vLyAgICAgcmVjb3JkRWxlbWVudCgnYmFyJywgJ2EnLCBkYXRhOiAndGhpcmQtYS1kYXRhJyk7CiAgLy8vICAgICByZWNvcmRFbGVtZW50KCdiYXInLCAnYycpOwogIC8vLyAgIHdpbGwgcmVzdWx0IGluIGEgZHVtcCBsaWtlIHRoaXM6CiAgLy8vICAgICBmb286IDIKICAvLy8gICAgICB2YWx1ZT1hIGRhdGE9c2Vjb25kLWEtZGF0YQogIC8vLyAgICAgIGIKICAvLy8gICAgIGJhcjogMgogIC8vLyAgICAgIHZhbHVlPWEgZGF0YT10aGlyZC1hLWRhdGEKICAvLy8gICAgICBjCiAgLy8vCiAgdm9pZCByZWNvcmRFbGVtZW50KGlkLCBlbGVtZW50LCB7ZGF0YX0pIHt9CgogIC8vLyBSZXR1cm5zIHRoZSBsaXN0IFtpZF0gcmVjb3JkZWQgd2l0aCBbcmVjb3JkRWxlbWVudF0uCiAgSXRlcmFibGUgZ2V0TGlzdChTdHJpbmcgaWQpID0+IGNvbnN0IFtdOwoKICAvLy8gUmVnaXN0ZXJzIFt2YWx1ZV0gYXMgYW4gb2NjdXJyZW5jZSBvZiBbaWRdLiBJZiBwYXNzZWQsIFtleGFtcGxlXSBwcm92aWRlcwogIC8vLyBhbiBleGFtcGxlIGRhdGEgb2YgdGhlIG9jY3VycmVuY2Ugb2YgW3ZhbHVlXS4KICAvLy8KICAvLy8gVGhlIHJlY29yZGVkIGluZm9ybWF0aW9uIGlzIGR1bXBlZCBhdXRvbWF0aWNhbGx5IG9uIGNhbGwgdG8gW2R1bXBTdGF0c10uCiAgLy8vCiAgLy8vIEV4YW1wbGU6CiAgLy8vICAgQ2FsbGluZyBbcmVjb3JkRnJlcXVlbmN5XSBsaWtlIHRoaXM6CiAgLy8vICAgICByZWNvcmRGcmVxdWVuY3koJ2ZvbycsICdhJywgJ2ZpcnN0LWEtZGF0YScpOwogIC8vLyAgICAgcmVjb3JkRnJlcXVlbmN5KCdmb28nLCAnYScsICdzZWNvbmQtYS1kYXRhJyk7CiAgLy8vICAgICByZWNvcmRGcmVxdWVuY3koJ2JhcicsICdiJywgJ2ZpcnN0LWItZGF0YScpOwogIC8vLyAgICAgcmVjb3JkRnJlcXVlbmN5KCdmb28nLCAnYycpOwogIC8vLyAgICAgcmVjb3JkRnJlcXVlbmN5KCdiYXInLCAnYicpOwogIC8vLyAgIHdpbGwgcmVzdWx0IGluIGEgZHVtcCBsaWtlIHRoaXM6CiAgLy8vICAgICBmb286CiAgLy8vICAgICAgYTogMgogIC8vLyAgICAgICBmaXJzdC1hLWRhdGEKICAvLy8gICAgICAgc2Vjb25kLWEtZGF0YQogIC8vLyAgICAgIGM6IDEKICAvLy8gICAgIGJhcjoKICAvLy8gICAgICBiOiAyCiAgLy8vICAgICAgIGZpcnN0LWItZGF0YQogIC8vLwogIHZvaWQgcmVjb3JkRnJlcXVlbmN5KGlkLCB2YWx1ZSwgW2V4YW1wbGVdKSB7fQoKICAvLy8gRm9yIGVhY2gga2V5L3ZhbHVlIHBhaXIgaW4gW21hcF0gdGhlIGVsZW1lbnRzIGluIHRoZSB2YWx1ZSBhcmUgcmVnaXN0ZXJlZAogIC8vLyBhcyBleGFtcGxlcyBvZiBvY2N1cnJlbmNlcyBvZiB0aGUga2V5IGluIFtpZF0uCiAgdm9pZCByZWNvcmRGcmVxdWVuY2llcyhpZCwgTWFwPGR5bmFtaWMsIEl0ZXJhYmxlPiBtYXApIHt9CgogIC8vLyBSZXR1cm5zIHRoZSBleGFtcGxlcyBnaXZlbiBmb3IgdGhlIG9jY3VycmVuY2Ugb2YgW3ZhbHVlXSBmb3IgW2lkXS4KICBJdGVyYWJsZSByZWNvcmRlZEZyZXF1ZW5jaWVzKGlkLCB2YWx1ZSkgPT4gY29uc3QgW107CgogIC8vLyBJbmNyZWFzZXMgdGhlIGNvdW50ZXIgW2lkXSBieSAxLiBJZiBwcm92aWRlZCwgW2V4YW1wbGVdIGlzIHVzZWQgYXMgYW4KICAvLy8gZXhhbXBsZSBvZiB0aGUgY291bnQgYW5kIFtkYXRhXSBwcm92aWRlcyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvcgogIC8vLyBbZXhhbXBsZV0uCiAgLy8vCiAgLy8vIFRoZSByZWNvcmRlZCBpbmZvcm1hdGlvbiBpcyBkdW1wZWQgYXV0b21hdGljYWxseSBvbiBjYWxsIHRvIFtkdW1wU3RhdHNdLgogIC8vLwogIC8vLyBFeGFtcGxlOgogIC8vLyAgIENhbGxpbmcgW3JlY29yZENvdW50ZXJdIGxpa2UgdGhpczoKICAvLy8gICAgIHJlY29yZENvdW50ZXIoJ2ZvbycsICdhJyk7CiAgLy8vICAgICByZWNvcmRDb3VudGVyKCdmb28nLCAnYScpOwogIC8vLyAgICAgcmVjb3JkQ291bnRlcignZm9vJywgJ2InKTsKICAvLy8gICAgIHJlY29yZENvdW50ZXIoJ2JhcicsICdjJywgJ2ZpcnN0LWMtZGF0YScpOwogIC8vLyAgICAgcmVjb3JkQ291bnRlcignYmFyJywgJ2MnLCAnc2Vjb25kLWMtZGF0YScpOwogIC8vLyAgICAgcmVjb3JkQ291bnRlcignYmFyJywgJ2QnKTsKICAvLy8gICAgIHJlY29yZENvdW50ZXIoJ2JhcicsICdkJyk7CiAgLy8vICAgICByZWNvcmRDb3VudGVyKCdiYXonKTsKICAvLy8gICAgIHJlY29yZENvdW50ZXIoJ2JheicpOwogIC8vLyAgIHdpbGwgcmVzdWx0IGluIGEgZHVtcCBsaWtlIHRoaXM6CiAgLy8vICAgICBmb286IDMKICAvLy8gICAgICBjb3VudD0yIGV4YW1wbGU9YQogIC8vLyAgICAgIGNvdW50PTEgZXhhbXBsZT1iCiAgLy8vICAgICBiYXI6IDQKICAvLy8gICAgICBjb3VudD0yIGV4YW1wbGVzPTIKICAvLy8gICAgICAgYzoKICAvLy8gICAgICAgIGZpcnN0LWMtZGF0YQogIC8vLyAgICAgICAgc2Vjb25kLWMtZGF0YQogIC8vLyAgICAgICBkCiAgLy8vICAgICBiYXo6IDIKICAvLy8KICB2b2lkIHJlY29yZENvdW50ZXIoaWQsIFtleGFtcGxlLCBkYXRhXSkge30KCiAgLy8vIFJlY29yZHMgdGhlIGN1cnJlbnQgc3RhY2sgdHJhY2UgdW5kZXIgdGhlIGtleSBbaWRdLiBPbmx5IGV2ZXJ5CiAgLy8vIFtzYW1wbGVGcmVxdWVuY3ldIGNhbGwgd2l0aCB0aGUgc2FtZSBpZCBpcyByZWNvcmRlZCwgYW5kIGlmIG9taXR0ZWQKICAvLy8gW3N0YWNrVHJhY2VTYW1wbGVGcmVxdWVuY3ldIGlzIHVzZWQuCiAgdm9pZCByZWNvcmRUcmFjZShpZCwge2ludCBzYW1wbGVGcmVxdWVuY3l9KSB7fQoKICAvLy8gVGhlIGRlZmF1bHQgc2FtcGxlIGZyZXF1ZW5jeSB1c2VkIGZvciByZWNvcmRpbmcgc3RhY2sgdHJhY2VzLgogIGludCBnZXQgc3RhY2tUcmFjZVNhbXBsZUZyZXF1ZW5jeSA9PiAwOwoKICAvLy8gU2V0IHRoZSBkZWZhdWx0IHNhbXBsZSBmcmVxdWVuY3kgdXNlZCBmb3IgcmVjb3JkaW5nIHN0YWNrIHRyYWNlcy4KICB2b2lkIHNldCBzdGFja1RyYWNlU2FtcGxlRnJlcXVlbmN5KGludCB2YWx1ZSkge30KCiAgLy8vIER1bXBzIHRoZSBzdGF0cyBmb3IgdGhlIHJlY29yZGVkIGZyZXF1ZW5jaWVzLCBzZXRzLCBhbmQgY291bnRlcnMuIElmCiAgLy8vIHByb3ZpZGVkIFtiZWZvcmVDbG9zZV0gaXMgY2FsbGVkIGJlZm9yZSBjbG9zaW5nIHRoZSBkdW1wIG91dHB1dC4gVGhpcwogIC8vLyBjYW4gYmUgdXNlZCB0byBpbmNsdWRlIGNvcnJlbGF0aW9ucyBvbiB0aGUgY29sbGVjdGVkIGRhdGEgdGhyb3VnaAogIC8vLyBbZHVtcENvcnJlbGF0aW9uXS4KICB2b2lkIGR1bXBTdGF0cyh7dm9pZCBiZWZvcmVDbG9zZSgpfSkge30KCiAgLy8vIFByaW50cyB0aGUgY29ycmVsYXRpb24gYmV0d2VlbiB0aGUgZWxlbWVudHMgb2YgW2FdIGFuZCBbYl0uCiAgLy8vCiAgLy8vIFRocmVlIHNldHMgYXJlIG91dHB1dCB1c2luZyBbaWRBXSBhbmQgW2lkQl0gYXMgbGFiZWxzIGZvciB0aGUgZWxlbWVudHMKICAvLy8gW2FdIGFuZCBbYl06CiAgLy8vCiAgLy8vICAgJ2lkQSAmJiBpZEInIGxpc3RzIHRoZSBlbGVtZW50cyBib3RoIGluIFthXSBhbmQgW2JdLAogIC8vLyAgICchaWRBICYmIGlkQicgbGlzdHMgdGhlIGVsZW1lbnRzIG5vdCBpbiBbYV0gYnV0IGluIFtiXSwgYW5kCiAgLy8vICAgJ2lkQSAmJiAhaWRCJyBsaXN0cyB0aGUgZWxlbWVudHMgaW4gW2FdIGJ1dCBub3QgaW4gW2JdLgogIC8vLwogIC8vLyBJZiBbZGF0YUFdIGFuZC9vciBbZGF0YUJdIGFyZSBwcm92aWRlZCwgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUKICAvLy8gZWxlbWVudHMgYXJlIGxvb2tlZCB1cCBpbiBbZGF0YUFdIG9yIFtkYXRhQl0gdXNpbmcgW2RhdGFBXSBhcyB0aGUgcHJpbWFyeQogIC8vLyBzb3VyY2UuCiAgdm9pZCBkdW1wQ29ycmVsYXRpb24oaWRBLCBJdGVyYWJsZSBhLCBpZEIsIEl0ZXJhYmxlIGIsCiAgICAgIHtNYXAgZGF0YUEsIE1hcCBkYXRhQn0pIHt9Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHByaW50aW5nIG91dHB1dCBkYXRhLgovLy8KLy8vIFRoaXMgY2xhc3Mgc2VydmVzIGFzIHRoZSBkaXNhYmxlZCBvdXRwdXQuCmNsYXNzIFN0YXRzT3V0cHV0IHsKICBjb25zdCBTdGF0c091dHB1dCgpOwoKICAvLy8gUHJpbnQgW3RleHRdIGFzIG9uIGEgc2VwYXJhdGUgbGluZS4KICB2b2lkIHByaW50bG4oU3RyaW5nIHRleHQpIHt9Cn0KCi8vLyBPdXRwdXQgdG8gdGhlIFtkZWJ1Z1ByaW50XSBtZXRob2QuCmNsYXNzIERlYnVnT3V0cHV0IGltcGxlbWVudHMgU3RhdHNPdXRwdXQgewogIGNvbnN0IERlYnVnT3V0cHV0KCk7CgogIEBvdmVycmlkZQogIHZvaWQgcHJpbnRsbihTdHJpbmcgdGV4dCkgPT4gZGVidWdQcmludCh0ZXh0KTsKfQoKLy8vIE91dHB1dCB0byBhbiBbRXZlbnRTaW5rXS4gVXNlZCB0byBvdXRwdXQgdG8gYSBmaWxlIHRocm91Z2ggdGhlCi8vLyBbQ29tcGlsZXJPdXRwdXRQcm92aWRlcl0uCmNsYXNzIFNpbmtPdXRwdXQgaW1wbGVtZW50cyBTdGF0c091dHB1dCB7CiAgRXZlbnRTaW5rPFN0cmluZz4gc2luazsKCiAgU2lua091dHB1dCh0aGlzLnNpbmspOwoKICBAb3ZlcnJpZGUKICB2b2lkIHByaW50bG4oU3RyaW5nIHRleHQpIHsKICAgIHNpbmsuYWRkKHRleHQpOwogICAgc2luay5hZGQoJ1xuJyk7CiAgfQp9CgovLy8gSW50ZXJmYWNlIGZvciBwcmludGluZyBzdGF0cyBjb2xsZWN0ZWQgaW4gW1N0YXRzXS4KYWJzdHJhY3QgY2xhc3MgU3RhdHNQcmludGVyIHsKICAvLy8gVGhlIG51bWJlciBvZiBleGFtcGxlcyBwcmludGVyLiBJZiBgbnVsbGAgYWxsIGV4YW1wbGVzIGFyZSBwcmludGVkLgogIGludCBnZXQgZXhhbXBsZXMgPT4gMDsKCiAgLy8vIFN0YXJ0IGEgZ3JvdXAgW2lkXS4KICB2b2lkIHN0YXJ0KFN0cmluZyBpZCkge30KCiAgLy8vIENyZWF0ZSBhIGdyb3VwIFtpZF0gd2l0aCBjb250ZW50IGNyZWF0ZWQgYnkgW2NyZWF0ZUdyb3VwQ29udGVudF0uCiAgdm9pZCBncm91cChTdHJpbmcgaWQsIHZvaWQgY3JlYXRlR3JvdXBDb250ZW50KCkpIHsKICAgIHN0YXJ0KGlkKTsKICAgIGNyZWF0ZUdyb3VwQ29udGVudCgpOwogICAgZW5kKGlkKTsKICB9CgogIC8vLyBFbmQgYSBncm91cCBbaWRdLgogIHZvaWQgZW5kKFN0cmluZyBpZCkge30KCiAgLy8vIFN0YXJ0IGEgc3RhdCBlbnRyeSBmb3IgW2lkXSB3aXRoIGFkZGl0aW9uYWwgW2RhdGFdLgogIHZvaWQgb3BlbihTdHJpbmcgaWQsCiAgICAgIFtNYXA8U3RyaW5nLCBkeW5hbWljPiBkYXRhID0gY29uc3QgPFN0cmluZywgZHluYW1pYz57fV0pIHt9CgogIC8vLyBDcmVhdGUgYSBzdGF0IGVudHJ5IGZvciBbaWRdIHdpdGggYWRkaXRpb25hbCBbZGF0YV0gYW5kIGNvbnRlbnQgY3JlYXRlZCBieQogIC8vLyBbY3JlYXRlQ2hpbGRDb250ZW50XS4KICB2b2lkIGNoaWxkKFN0cmluZyBpZCwKICAgICAgW01hcDxTdHJpbmcsIGR5bmFtaWM+IGRhdGEgPSBjb25zdCA8U3RyaW5nLCBkeW5hbWljPnt9LAogICAgICB2b2lkIGNyZWF0ZUNoaWxkQ29udGVudCgpXSkgewogICAgb3BlbihpZCwgZGF0YSk7CiAgICBpZiAoY3JlYXRlQ2hpbGRDb250ZW50ICE9IG51bGwpIGNyZWF0ZUNoaWxkQ29udGVudCgpOwogICAgY2xvc2UoaWQpOwogIH0KCiAgLy8vIEVuZCBhIHN0YXQgZW50cnkgZm9yIFtpZF0uCiAgdm9pZCBjbG9zZShTdHJpbmcgaWQpIHt9CgogIC8vLyBTdGFydHMgYSBncm91cCBvZiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgogIHZvaWQgYmVnaW5FeHRyYSgpIHt9CgogIC8vLyBTdGFydHMgYSBncm91cCBvZiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgogIHZvaWQgZW5kRXh0cmEoKSB7fQp9CgovLy8gQWJzdHJhY3QgYmFzZSBjbGFzcyBmb3IgW0NvbnNvbGVQcmludGVyXSBhbmQgW1hNTFByaW50ZXJdLgphYnN0cmFjdCBjbGFzcyBCYXNlUHJpbnRlciBleHRlbmRzIFN0YXRzUHJpbnRlciB3aXRoIEluZGVudGF0aW9uIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgZXhhbXBsZXM7CiAgZmluYWwgU3RhdHNPdXRwdXQgb3V0cHV0OwoKICBCYXNlUHJpbnRlcih7dGhpcy5vdXRwdXQ6IGNvbnN0IERlYnVnT3V0cHV0KCksIHRoaXMuZXhhbXBsZXM6IDEwfSkgewogICAgaW5kZW50YXRpb25Vbml0ID0gIiAiOwogIH0KfQoKLy8vIFtTdGF0c1ByaW50ZXJdIHRoYXQgZGlzcGxheXMgc3RhdHMgaW4gY29uc29sZSBsaW5lcy4KY2xhc3MgQ29uc29sZVByaW50ZXIgZXh0ZW5kcyBCYXNlUHJpbnRlciB7CiAgaW50IGV4dHJhTGV2ZWwgPSAwOwoKICBDb25zb2xlUHJpbnRlcih7U3RhdHNPdXRwdXQgb3V0cHV0OiBjb25zdCBEZWJ1Z091dHB1dCgpLCBpbnQgZXhhbXBsZXM6IDEwfSkKICAgICAgOiBzdXBlcihvdXRwdXQ6IG91dHB1dCwgZXhhbXBsZXM6IGV4YW1wbGVzKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBvcGVuKFN0cmluZyBpZCwKICAgICAgW01hcDxTdHJpbmcsIGR5bmFtaWM+IGRhdGEgPSBjb25zdCA8U3RyaW5nLCBkeW5hbWljPnt9XSkgewogICAgaWYgKGV4dHJhTGV2ZWwgPiAwKSByZXR1cm47CgogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoaW5kZW50YXRpb24pOwogICAgU3RyaW5nIHNwYWNlID0gJyc7CiAgICBpZiAoZGF0YVsndGl0bGUnXSAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCcke2RhdGFbJ3RpdGxlJ119OicpOwogICAgICBzcGFjZSA9ICcgJzsKICAgICAgZGF0YS5yZW1vdmUoJ3RpdGxlJyk7CiAgICB9IGVsc2UgaWYgKGRhdGFbJ25hbWUnXSAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCcke2RhdGFbJ25hbWUnXX0nKTsKICAgICAgc3BhY2UgPSAnICc7CiAgICAgIGRhdGEucmVtb3ZlKCduYW1lJyk7CiAgICB9CiAgICBJdGVyYWJsZSBub25OdWxsVmFsdWVzID0gZGF0YS52YWx1ZXMud2hlcmUoKHYpID0+IHYgIT0gbnVsbCk7CiAgICBpZiAobm9uTnVsbFZhbHVlcy5sZW5ndGggPT0gMSkgewogICAgICBzYi53cml0ZSgnJHNwYWNlJHtub25OdWxsVmFsdWVzLmZpcnN0fScpOwogICAgfSBlbHNlIHsKICAgICAgZGF0YS5mb3JFYWNoKChrZXksIHZhbHVlKSB7CiAgICAgICAgc2Iud3JpdGUoJyRzcGFjZSRrZXk9JHZhbHVlJyk7CiAgICAgICAgc3BhY2UgPSAnICc7CiAgICAgIH0pOwogICAgfQogICAgb3V0cHV0LnByaW50bG4oc2IudG9TdHJpbmcoKSk7CiAgICBpbmRlbnRNb3JlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKFN0cmluZyBpZCkgewogICAgaWYgKGV4dHJhTGV2ZWwgPiAwKSByZXR1cm47CgogICAgaW5kZW50TGVzcygpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkV4dHJhKCkgewogICAgaWYgKGV4dHJhTGV2ZWwgPT0gMCkgb3V0cHV0LnByaW50bG4oJyRpbmRlbnRhdGlvbi4uLicpOwogICAgZXh0cmFMZXZlbCsrOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRFeHRyYSgpIHsKICAgIGV4dHJhTGV2ZWwtLTsKICB9Cn0KCi8vLyBbU3RhdHNQcmludGVyXSB0aGF0IGRpc3BsYXlzIHN0YXRzIGluIFhNTCBmb3JtYXQuCmNsYXNzIFhNTFByaW50ZXIgZXh0ZW5kcyBCYXNlUHJpbnRlciB7CiAgc3RhdGljIGNvbnN0IEh0bWxFc2NhcGUgZXNjYXBlID0gY29uc3QgSHRtbEVzY2FwZSgpOwogIGJvb2wgb3BlbmVkID0gZmFsc2U7CgogIFhNTFByaW50ZXIoe291dHB1dDogY29uc3QgRGVidWdPdXRwdXQoKSwgaW50IGV4YW1wbGVzOiAxMH0pCiAgICAgIDogc3VwZXIob3V0cHV0OiBvdXRwdXQsIGV4YW1wbGVzOiBleGFtcGxlcyk7CgogIEBvdmVycmlkZQogIHZvaWQgc3RhcnQoU3RyaW5nIGlkKSB7CiAgICBpZiAoIW9wZW5lZCkgewogICAgICBvdXRwdXQucHJpbnRsbignPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4nKTsKICAgICAgb3BlbmVkID0gdHJ1ZTsKICAgIH0KICAgIG9wZW4oaWQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmQoU3RyaW5nIGlkKSB7CiAgICBjbG9zZShpZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9wZW4oU3RyaW5nIGlkLAogICAgICBbTWFwPFN0cmluZywgZHluYW1pYz4gZGF0YSA9IGNvbnN0IDxTdHJpbmcsIGR5bmFtaWM+e31dKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZShpbmRlbnRhdGlvbik7CiAgICBzYi53cml0ZSgnPCRpZCcpOwogICAgZGF0YS5mb3JFYWNoKChrZXksIHZhbHVlKSB7CiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgc2Iud3JpdGUoJyAka2V5PSIke2VzY2FwZS5jb252ZXJ0KCckdmFsdWUnKX0iJyk7CiAgICAgIH0KICAgIH0pOwogICAgc2Iud3JpdGUoJz4nKTsKICAgIG91dHB1dC5wcmludGxuKHNiLnRvU3RyaW5nKCkpOwogICAgaW5kZW50TW9yZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZShTdHJpbmcgaWQpIHsKICAgIGluZGVudExlc3MoKTsKICAgIG91dHB1dC5wcmludGxuKCcke2luZGVudGF0aW9ufTwvJGlkPicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkV4dHJhKCkgewogICAgb3BlbignZXh0cmEnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRXh0cmEoKSB7CiAgICBjbG9zZSgnZXh0cmEnKTsKICB9Cn0KCi8vLyBBIG5vZGUgaW4gYSBzdGFjayB0cmFjZSB0cmVlIHVzZWQgdG8gc3RvcmUgYW5kIG9yZ2FuaXplIHN0YWNrIHRyYWNlcyBieQovLy8gY29tbW9uIHByZWZpeGVzLgpjbGFzcyBfU3RhY2tUcmFjZU5vZGUgaW1wbGVtZW50cyBDb21wYXJhYmxlPF9TdGFja1RyYWNlTm9kZT4gewogIGludCBjb3VudDsKICBMaXN0PFN0YWNrVHJhY2VMaW5lPiBjb21tb25QcmVmaXg7CiAgTGlzdDxfU3RhY2tUcmFjZU5vZGU+IHN1YnRyYWNlczsKCiAgX1N0YWNrVHJhY2VOb2RlKHRoaXMuY29tbW9uUHJlZml4LCB0aGlzLmNvdW50LCB0aGlzLnN1YnRyYWNlcyk7CgogIF9TdGFja1RyYWNlTm9kZS5yb290KCkgOiB0aGlzKFtdLCAwLCBbXSk7CgogIF9TdGFja1RyYWNlTm9kZS5sZWFmKFN0YWNrVHJhY2VMaW5lcyBzdGFja1RyYWNlKQogICAgICA6IHRoaXMoc3RhY2tUcmFjZS5saW5lcywgMSwgY29uc3QgW10pOwoKICBfU3RhY2tUcmFjZU5vZGUubm9kZShMaXN0PFN0YWNrVHJhY2VMaW5lPiBjb21tb25QcmVmaXgsIF9TdGFja1RyYWNlTm9kZSBmaXJzdCwKICAgICAgX1N0YWNrVHJhY2VOb2RlIHNlY29uZCkKICAgICAgOiB0aGlzKGNvbW1vblByZWZpeCwgZmlyc3QuY291bnQgKyBzZWNvbmQuY291bnQsIFtmaXJzdCwgc2Vjb25kXSk7CgogIHZvaWQgYWRkKFN0YWNrVHJhY2VMaW5lcyBzdGFja1RyYWNlKSB7CiAgICBjb3VudCsrOwogICAgaWYgKCFzdGFja1RyYWNlLmxpbmVzLmlzRW1wdHkpIHsKICAgICAgYWRkU3VidHJhY2Uoc3RhY2tUcmFjZSk7CiAgICB9CiAgfQoKICB2b2lkIGFkZFN1YnRyYWNlKFN0YWNrVHJhY2VMaW5lcyBzdGFja1RyYWNlKSB7CiAgICBMaXN0PFN0YWNrVHJhY2VMaW5lPiBsaW5lcyA9IHN0YWNrVHJhY2UubGluZXM7CiAgICBmb3IgKF9TdGFja1RyYWNlTm9kZSBzdWJ0cmFjZSBpbiBzdWJ0cmFjZXMpIHsKICAgICAgaW50IGNvbW1vblByZWZpeExlbmd0aCA9CiAgICAgICAgICBsb25nZXN0Q29tbW9uUHJlZml4TGVuZ3RoKHN1YnRyYWNlLmNvbW1vblByZWZpeCwgbGluZXMpOwogICAgICBpZiAoY29tbW9uUHJlZml4TGVuZ3RoID4gMCkgewogICAgICAgIHN0YWNrVHJhY2UgPSBzdGFja1RyYWNlLnN1YnRyYWNlKGNvbW1vblByZWZpeExlbmd0aCk7CiAgICAgICAgaWYgKGNvbW1vblByZWZpeExlbmd0aCA9PSBzdWJ0cmFjZS5jb21tb25QcmVmaXgubGVuZ3RoKSB7CiAgICAgICAgICBzdWJ0cmFjZS5hZGQoc3RhY2tUcmFjZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN1YnRyYWNlLmNvbW1vblByZWZpeCA9CiAgICAgICAgICAgICAgc3VidHJhY2UuY29tbW9uUHJlZml4LnN1Ymxpc3QoY29tbW9uUHJlZml4TGVuZ3RoKTsKICAgICAgICAgIHN1YnRyYWNlcy5yZW1vdmUoc3VidHJhY2UpOwogICAgICAgICAgc3VidHJhY2VzLmFkZChuZXcgX1N0YWNrVHJhY2VOb2RlLm5vZGUoCiAgICAgICAgICAgICAgbGluZXMuc3VibGlzdCgwLCBjb21tb25QcmVmaXhMZW5ndGgpLAogICAgICAgICAgICAgIHN1YnRyYWNlLAogICAgICAgICAgICAgIG5ldyBfU3RhY2tUcmFjZU5vZGUubGVhZihzdGFja1RyYWNlKSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIHN1YnRyYWNlcy5hZGQobmV3IF9TdGFja1RyYWNlTm9kZS5sZWFmKHN0YWNrVHJhY2UpKTsKICB9CgogIHZvaWQgZHVtcFRyYWNlcyhTdGF0c1ByaW50ZXIgcHJpbnRlcikgewogICAgcHJpbnRlci5vcGVuKCd0cmFjZScsIHsnY291bnQnOiBjb3VudCwgJ2xpbmUnOiBjb21tb25QcmVmaXguZmlyc3R9KTsKICAgIGlmIChjb21tb25QcmVmaXgubGVuZ3RoID4gMSkgewogICAgICBmb3IgKFN0YWNrVHJhY2VMaW5lIGxpbmUgaW4gY29tbW9uUHJlZml4LnNraXAoMSkpIHsKICAgICAgICBwcmludGVyLmNoaWxkKCd0cmFjZScsIHsnbGluZSc6IGxpbmV9KTsKICAgICAgfQogICAgfQogICAgZHVtcFN1YnRyYWNlcyhwcmludGVyKTsKICAgIHByaW50ZXIuY2xvc2UoJ3RyYWNlJyk7CiAgfQoKICB2b2lkIGR1bXBTdWJ0cmFjZXMoU3RhdHNQcmludGVyIHByaW50ZXIpIHsKICAgIGlmICghc3VidHJhY2VzLmlzRW1wdHkpIHsKICAgICAgc3VidHJhY2VzLnNvcnQoKTsKICAgICAgZm9yIChfU3RhY2tUcmFjZU5vZGUgc3RlcCBpbiBzdWJ0cmFjZXMpIHsKICAgICAgICBzdGVwLmR1bXBUcmFjZXMocHJpbnRlcik7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIGludCBjb21wYXJlVG8oX1N0YWNrVHJhY2VOb2RlIG90aGVyKSB7CiAgICAvLyBTb3J0cyBpbiBkZWNyZWFzaW5nIGNvdW50IG9yZGVyLgogICAgcmV0dXJuIG90aGVyLmNvdW50IC0gY291bnQ7CiAgfQoKICB2b2lkIHByaW50T24oU3RyaW5nQnVmZmVyIHNiLCBTdHJpbmcgaW5kZW50YXRpb24pIHsKICAgIFN0cmluZyBjb3VudFRleHQgPSAnJGluZGVudGF0aW9uJGNvdW50ICAnOwogICAgc2Iud3JpdGUoY291bnRUZXh0KTsKICAgIHNiLndyaXRlKCdcbicpOwogICAgaW5kZW50YXRpb24gPSAnJy5wYWRMZWZ0KGNvdW50VGV4dC5sZW5ndGgsICcgJyk7CiAgICBpZiAoY29tbW9uUHJlZml4ICE9IG51bGwpIHsKICAgICAgaW50IGluZGV4ID0gMDsKICAgICAgZm9yIChTdGFja1RyYWNlTGluZSBsaW5lIGluIGNvbW1vblByZWZpeCkgewogICAgICAgIHNiLndyaXRlKGluZGVudGF0aW9uKTsKICAgICAgICBpZiAoaW5kZXggPiAxKSB7CiAgICAgICAgICBzYi53cml0ZSgnLi4uXG4nKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBzYi53cml0ZShsaW5lKTsKICAgICAgICBzYi53cml0ZSgnXG4nKTsKICAgICAgICBpbmRleCsrOwogICAgICB9CiAgICB9CiAgICBzdWJ0cmFjZXMuc29ydCgpOwogICAgZm9yIChfU3RhY2tUcmFjZU5vZGUgc3VidHJhY2UgaW4gc3VidHJhY2VzKSB7CiAgICAgIHN1YnRyYWNlLnByaW50T24oc2IsIGluZGVudGF0aW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHByaW50T24oc2IsICcnKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKY2xhc3MgX1N0YWNrVHJhY2VUcmVlIGV4dGVuZHMgX1N0YWNrVHJhY2VOb2RlIHsKICBmaW5hbCBpZDsKICBpbnQgdG90YWxDb3VudCA9IDA7CiAgZmluYWwgaW50IHNhbXBsZUZyZXF1ZW5jeTsKCiAgX1N0YWNrVHJhY2VUcmVlKHRoaXMuaWQsIHRoaXMuc2FtcGxlRnJlcXVlbmN5KSA6IHN1cGVyLnJvb3QoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBkdW1wVHJhY2VzKFN0YXRzUHJpbnRlciBwcmludGVyKSB7CiAgICBwcmludGVyLm9wZW4oJ3RyYWNlJywgewogICAgICAnaWQnOiBpZCwKICAgICAgJ3RvdGFsQ291bnQnOiB0b3RhbENvdW50LAogICAgICAnc2FtcGxlRnJlcXVlbmN5Jzogc2FtcGxlRnJlcXVlbmN5CiAgICB9KTsKICAgIGR1bXBTdWJ0cmFjZXMocHJpbnRlcik7CiAgICBwcmludGVyLmNsb3NlKCd0cmFjZScpOwogIH0KCiAgdm9pZCBzYW1wbGUoKSB7CiAgICBpZiAodG90YWxDb3VudCsrICUgc2FtcGxlRnJlcXVlbmN5ID09IDApIHsKICAgICAgYWRkKHN0YWNrVHJhY2Uob2Zmc2V0OiAzKSk7CiAgICB9CiAgfQp9CgovLy8gQWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIFtTdGF0c10uCmNsYXNzIEFjdGl2ZVN0YXRzIGltcGxlbWVudHMgU3RhdHMgewogIGZpbmFsIFN0YXRzUHJpbnRlciBwcmludGVyOwogIE1hcDxkeW5hbWljLCBNYXA+IG1hcHMgPSB7fTsKICBNYXA8ZHluYW1pYywgTWFwPGR5bmFtaWMsIExpc3Q+PiBmcmVxdWVuY3lNYXBzID0ge307CiAgTWFwPGR5bmFtaWMsIE1hcD4gc2V0c01hcCA9IHt9OwogIE1hcDxkeW5hbWljLCBNYXA8ZHluYW1pYywgTGlzdD4+IGNvdW50ZXJzTWFwID0KICAgICAgPGR5bmFtaWMsIE1hcDxkeW5hbWljLCBMaXN0Pj57fTsKICBNYXA8ZHluYW1pYywgX1N0YWNrVHJhY2VUcmVlPiB0cmFjZU1hcCA9IHt9OwogIEBvdmVycmlkZQogIGludCBzdGFja1RyYWNlU2FtcGxlRnJlcXVlbmN5ID0gMTsKCiAgQWN0aXZlU3RhdHMoU3RhdHNQcmludGVyIHRoaXMucHJpbnRlcik7CgogIEBvdmVycmlkZQogIHZvaWQgcmVjb3JkTWFwKGlkLCBrZXksIHZhbHVlLCB7ZnJvbUV4aXN0aW5nKHZhbHVlKX0pIHsKICAgIE1hcCBtYXAgPSBtYXBzLnB1dElmQWJzZW50KGlkLCAoKSA9PiB7fSk7CiAgICBpZiAoZnJvbUV4aXN0aW5nICE9IG51bGwgJiYgbWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKICAgICAgbWFwW2tleV0gPSBmcm9tRXhpc3RpbmcobWFwW2tleV0pOwogICAgfSBlbHNlIHsKICAgICAgbWFwW2tleV0gPSB2YWx1ZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIE1hcCBnZXRNYXAoa2V5KSB7CiAgICByZXR1cm4gbWFwc1trZXldOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWNvcmRGcmVxdWVuY3koaWQsIHZhbHVlLCBbZXhhbXBsZV0pIHsKICAgIE1hcDxkeW5hbWljLCBMaXN0PiBtYXAgPSBmcmVxdWVuY3lNYXBzLnB1dElmQWJzZW50KGlkLCAoKSA9PiB7fSk7CiAgICBtYXAucHV0SWZBYnNlbnQodmFsdWUsICgpID0+IFtdKTsKICAgIG1hcFt2YWx1ZV0uYWRkKGV4YW1wbGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWNvcmRGcmVxdWVuY2llcyhpZCwgTWFwPGR5bmFtaWMsIEl0ZXJhYmxlPiBmcmVxdWVuY3lNYXApIHsKICAgIE1hcDxkeW5hbWljLCBMaXN0PiBtYXAgPSBmcmVxdWVuY3lNYXBzLnB1dElmQWJzZW50KGlkLCAoKSA9PiB7fSk7CiAgICBmcmVxdWVuY3lNYXAuZm9yRWFjaCgodmFsdWUsIGV4YW1wbGVzKSB7CiAgICAgIG1hcC5wdXRJZkFic2VudCh2YWx1ZSwgKCkgPT4gW10pOwogICAgICBtYXBbdmFsdWVdLmFkZEFsbChleGFtcGxlcyk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlIHJlY29yZGVkRnJlcXVlbmNpZXMoaWQsIHZhbHVlKSB7CiAgICBNYXA8ZHluYW1pYywgTGlzdD4gbWFwID0gZnJlcXVlbmN5TWFwc1tpZF07CiAgICBpZiAobWFwID09IG51bGwpIHJldHVybiBjb25zdCBbXTsKICAgIExpc3QgbGlzdCA9IG1hcFt2YWx1ZV07CiAgICBpZiAobGlzdCA9PSBudWxsKSByZXR1cm4gY29uc3QgW107CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVjb3JkQ291bnRlcihpZCwgW3JlYXNvbiwgZXhhbXBsZV0pIHsKICAgIE1hcDxkeW5hbWljLCBMaXN0PiBtYXAgPSBjb3VudGVyc01hcC5wdXRJZkFic2VudChpZCwgKCkgPT4ge30pOwogICAgbWFwLnB1dElmQWJzZW50KHJlYXNvbiwgKCkgPT4gW10pLmFkZChleGFtcGxlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVjb3JkRWxlbWVudChrZXksIGVsZW1lbnQsIHtkYXRhfSkgewogICAgc2V0c01hcC5wdXRJZkFic2VudChrZXksICgpID0+IG5ldyBNYXAoKSlbZWxlbWVudF0gPSBkYXRhOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWNvcmRUcmFjZShrZXksIHtpbnQgc2FtcGxlRnJlcXVlbmN5fSkgewogICAgaWYgKHNhbXBsZUZyZXF1ZW5jeSA9PSBudWxsKSB7CiAgICAgIHNhbXBsZUZyZXF1ZW5jeSA9IHN0YWNrVHJhY2VTYW1wbGVGcmVxdWVuY3k7CiAgICB9CiAgICB0cmFjZU1hcAogICAgICAgIC5wdXRJZkFic2VudChrZXksICgpID0+IG5ldyBfU3RhY2tUcmFjZVRyZWUoa2V5LCBzYW1wbGVGcmVxdWVuY3kpKQogICAgICAgIC5zYW1wbGUoKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlIGdldExpc3QoU3RyaW5nIGtleSkgewogICAgTWFwIG1hcCA9IHNldHNNYXBba2V5XTsKICAgIGlmIChtYXAgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IFtdOwogICAgcmV0dXJuIG1hcC5rZXlzOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkdW1wU3RhdHMoe3ZvaWQgYmVmb3JlQ2xvc2UoKX0pIHsKICAgIHByaW50ZXIuc3RhcnQoJ3N0YXRzJyk7CiAgICBkdW1wRnJlcXVlbmNpZXMoKTsKICAgIGR1bXBTZXRzKCk7CiAgICBkdW1wQ291bnRlcnMoKTsKICAgIGR1bXBUcmFjZXMoKTsKICAgIGlmIChiZWZvcmVDbG9zZSAhPSBudWxsKSB7CiAgICAgIGJlZm9yZUNsb3NlKCk7CiAgICB9CiAgICBwcmludGVyLmVuZCgnc3RhdHMnKTsKICB9CgogIHZvaWQgZHVtcFNldHMoKSB7CiAgICBwcmludGVyLmdyb3VwKCdzZXRzJywgKCkgewogICAgICBzZXRzTWFwLmZvckVhY2goKGssIHNldCkgewogICAgICAgIGR1bXBJdGVyYWJsZSgnZXhhbXBsZXMnLCAnJGsnLCBzZXQua2V5cywKICAgICAgICAgICAgbGltaXQ6IHByaW50ZXIuZXhhbXBsZXMsIGRhdGFNYXA6IHNldCk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICB2b2lkIGR1bXBGcmVxdWVuY2llcygpIHsKICAgIHByaW50ZXIuZ3JvdXAoJ2ZyZXF1ZW5jaWVzJywgKCkgewogICAgICBmcmVxdWVuY3lNYXBzLmZvckVhY2goKGtleSwgTWFwPGR5bmFtaWMsIExpc3Q+IG1hcCkgewogICAgICAgIHByaW50ZXIuY2hpbGQoJ2ZyZXF1ZW5jeScsIHsndGl0bGUnOiAnJGtleSd9LCAoKSB7CiAgICAgICAgICBkdW1wRnJlcXVlbmN5KG1hcCk7CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICB2b2lkIGR1bXBGcmVxdWVuY3koTWFwPGR5bmFtaWMsIEl0ZXJhYmxlPiBtYXApIHsKICAgIE1hcCBzb3J0ZWRNYXAgPSB0cnlTb3J0TWFwKG1hcCk7CiAgICBzb3J0ZWRNYXAuZm9yRWFjaCgoaywgbGlzdCkgewogICAgICBkdW1wSXRlcmFibGUoJ2V4YW1wbGVzJywgJyRrJywgbGlzdCwgbGltaXQ6IHByaW50ZXIuZXhhbXBsZXMpOwogICAgfSk7CiAgfQoKICB2b2lkIGR1bXBDb3VudGVycygpIHsKICAgIHByaW50ZXIuZ3JvdXAoJ2NvdW50ZXJzJywgKCkgewogICAgICBjb3VudGVyc01hcC5rZXlzLmZvckVhY2goZHVtcENvdW50ZXIpOwogICAgfSk7CiAgfQoKICB2b2lkIGR1bXBDb3VudGVyKGlkKSB7CiAgICBNYXA8ZHluYW1pYywgTGlzdD4gbWFwID0gY291bnRlcnNNYXBbaWRdOwogICAgYm9vbCBoYXNEYXRhKGV4YW1wbGUpIHsKICAgICAgaWYgKG1hcCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIExpc3QgbGlzdCA9IG1hcFtleGFtcGxlXTsKICAgICAgaWYgKGxpc3QgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gbGlzdC5hbnkoKGRhdGEpID0+IGRhdGEgIT0gbnVsbCk7CiAgICB9CgogICAgaW50IGNvdW50ID0gMDsKICAgIE1hcDxkeW5hbWljLCBpbnQ+IGZyZXF1ZW5jeU1hcCA9IHt9OwogICAgbWFwLmZvckVhY2goKHZhciBjYXRlZ29yeSwgTGlzdCBleGFtcGxlcykgewogICAgICBpZiAoY2F0ZWdvcnkgIT0gbnVsbCkgewogICAgICAgIGZyZXF1ZW5jeU1hcC5wdXRJZkFic2VudChjYXRlZ29yeSwgKCkgPT4gMCk7CiAgICAgICAgZnJlcXVlbmN5TWFwW2NhdGVnb3J5XSArPSBleGFtcGxlcy5sZW5ndGg7CiAgICAgIH0KICAgICAgY291bnQgKz0gZXhhbXBsZXMubGVuZ3RoOwogICAgfSk7CiAgICBNYXA8aW50LCBTZXQ+IHJlc3VsdCA9IHNvcnRNYXAoaW52ZXJzZU1hcChmcmVxdWVuY3lNYXApLCAoYSwgYikgPT4gYiAtIGEpOwogICAgaW50IGV4YW1wbGVzTGltaXQgPSBudWxsOwogICAgaWYgKHByaW50ZXIuZXhhbXBsZXMgIT0gbnVsbCAmJiByZXN1bHQubGVuZ3RoID49IHByaW50ZXIuZXhhbXBsZXMpIHsKICAgICAgZXhhbXBsZXNMaW1pdCA9IDA7CiAgICB9CiAgICBpbnQgY291bnRlciA9IDA7CiAgICBib29sIGhhc01vcmUgPSBmYWxzZTsKICAgIHByaW50ZXIub3BlbignY291bnRlcicsIHsndGl0bGUnOiAnJGlkJywgJ2NvdW50JzogY291bnR9KTsKICAgIHJlc3VsdC5mb3JFYWNoKChpbnQgY291bnQsIFNldCBleGFtcGxlcykgewogICAgICBpZiAoY291bnRlciA9PSBwcmludGVyLmV4YW1wbGVzKSB7CiAgICAgICAgcHJpbnRlci5iZWdpbkV4dHJhKCk7CiAgICAgICAgaGFzTW9yZSA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKGV4YW1wbGVzLmxlbmd0aCA9PSAxICYmCiAgICAgICAgICAoZXhhbXBsZXNMaW1pdCA9PSAwIHx8ICFoYXNEYXRhKGV4YW1wbGVzLmZpcnN0KSkpIHsKICAgICAgICBwcmludGVyLmNoaWxkKCdleGFtcGxlcycsIHsnY291bnQnOiBjb3VudCwgJ2V4YW1wbGUnOiBleGFtcGxlcy5maXJzdH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHByaW50ZXIuY2hpbGQoJ2V4YW1wbGVzJywgeydjb3VudCc6IGNvdW50LCAnZXhhbXBsZXMnOiBleGFtcGxlcy5sZW5ndGh9LAogICAgICAgICAgICAoKSB7CiAgICAgICAgICBleGFtcGxlcy5mb3JFYWNoKChleGFtcGxlKSB7CiAgICAgICAgICAgIGR1bXBJdGVyYWJsZSgnZXhhbXBsZXMnLCAnJGV4YW1wbGUnLCBtYXBbZXhhbXBsZV0sCiAgICAgICAgICAgICAgICBsaW1pdDogZXhhbXBsZXNMaW1pdCwgaW5jbHVkZUNvdW50OiBmYWxzZSk7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBjb3VudGVyKys7CiAgICB9KTsKICAgIGlmIChoYXNNb3JlKSB7CiAgICAgIHByaW50ZXIuZW5kRXh0cmEoKTsKICAgIH0KICAgIHByaW50ZXIuY2xvc2UoJ2NvdW50ZXInKTsKICB9CgogIHZvaWQgZHVtcFRyYWNlcygpIHsKICAgIHByaW50ZXIuZ3JvdXAoJ3RyYWNlcycsICgpIHsKICAgICAgdHJhY2VNYXAua2V5cy5mb3JFYWNoKGR1bXBUcmFjZSk7CiAgICB9KTsKICB9CgogIHZvaWQgZHVtcFRyYWNlKGtleSkgewogICAgX1N0YWNrVHJhY2VUcmVlIHRyZWUgPSB0cmFjZU1hcFtrZXldOwogICAgdHJlZS5kdW1wVHJhY2VzKHByaW50ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkdW1wQ29ycmVsYXRpb24oa2V5QSwgSXRlcmFibGUgYSwga2V5QiwgSXRlcmFibGUgYiwKICAgICAge01hcCBkYXRhQSwgTWFwIGRhdGFCfSkgewogICAgcHJpbnRlci5jaGlsZCgnY29ycmVsYXRpb25zJywgeyd0aXRsZSc6ICcka2V5QSB2cyAka2V5Qid9LCAoKSB7CiAgICAgIExpc3QgYUFuZEIgPSBhLndoZXJlKChlKSA9PiBlICE9IG51bGwgJiYgYi5jb250YWlucyhlKSkudG9MaXN0KCk7CiAgICAgIExpc3QgYUFuZE5vdEIgPSBhLndoZXJlKChlKSA9PiBlICE9IG51bGwgJiYgIWIuY29udGFpbnMoZSkpLnRvTGlzdCgpOwogICAgICBMaXN0IG5vdEFhbmRCID0gYi53aGVyZSgoZSkgPT4gZSAhPSBudWxsICYmICFhLmNvbnRhaW5zKGUpKS50b0xpc3QoKTsKICAgICAgZHVtcEl0ZXJhYmxlKCdjb3JyZWxhdGlvbicsICcka2V5QSAmJiAka2V5QicsIGFBbmRCLAogICAgICAgICAgZGF0YU1hcDogZGF0YUEsIGxpbWl0OiBwcmludGVyLmV4YW1wbGVzKTsKICAgICAgZHVtcEl0ZXJhYmxlKCdjb3JyZWxhdGlvbicsICcka2V5QSAmJiAhJGtleUInLCBhQW5kTm90QiwKICAgICAgICAgIGRhdGFNYXA6IGRhdGFBLCBsaW1pdDogcHJpbnRlci5leGFtcGxlcyk7CiAgICAgIGR1bXBJdGVyYWJsZSgnY29ycmVsYXRpb24nLCAnISRrZXlBICYmICRrZXlCJywgbm90QWFuZEIsCiAgICAgICAgICBkYXRhTWFwOiBkYXRhQiwgbGltaXQ6IHByaW50ZXIuZXhhbXBsZXMpOwogICAgfSk7CiAgfQoKICB2b2lkIGR1bXBJdGVyYWJsZShTdHJpbmcgdGFnLCBTdHJpbmcgdGl0bGUsIEl0ZXJhYmxlIGl0ZXJhYmxlLAogICAgICB7aW50IGxpbWl0LCBNYXAgZGF0YU1hcCwgYm9vbCBpbmNsdWRlQ291bnQ6IHRydWV9KSB7CiAgICBpZiAobGltaXQgPT0gMCkgcmV0dXJuOwoKICAgIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGNoaWxkRGF0YSA9IHt9OwogICAgSXRlcmFibGUgbm9uTnVsbEl0ZXJhYmxlID0gaXRlcmFibGUud2hlcmUoKGUpID0+IGUgIT0gbnVsbCk7CiAgICBpZiAobm9uTnVsbEl0ZXJhYmxlLmlzRW1wdHkgJiYgIWluY2x1ZGVDb3VudCkgewogICAgICBjaGlsZERhdGFbJ25hbWUnXSA9IHRpdGxlOwogICAgfSBlbHNlIHsKICAgICAgY2hpbGREYXRhWyd0aXRsZSddID0gdGl0bGU7CiAgICB9CiAgICBpZiAoaW5jbHVkZUNvdW50KSB7CiAgICAgIGNoaWxkRGF0YVsnY291bnQnXSA9IGl0ZXJhYmxlLmxlbmd0aDsKICAgIH0KICAgIHByaW50ZXIuY2hpbGQodGFnLCBjaGlsZERhdGEsICgpIHsKICAgICAgYm9vbCBoYXNNb3JlID0gZmFsc2U7CiAgICAgIGludCBjb3VudGVyID0gMDsKICAgICAgbm9uTnVsbEl0ZXJhYmxlLmZvckVhY2goKGVsZW1lbnQpIHsKICAgICAgICBpZiAoY291bnRlciA9PSBsaW1pdCkgewogICAgICAgICAgcHJpbnRlci5iZWdpbkV4dHJhKCk7CiAgICAgICAgICBoYXNNb3JlID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgdmFyIGRhdGEgPSBkYXRhTWFwICE9IG51bGwgPyBkYXRhTWFwW2VsZW1lbnRdIDogbnVsbDsKICAgICAgICBpZiAoZGF0YSAhPSBudWxsKSB7CiAgICAgICAgICBwcmludGVyLmNoaWxkKCdleGFtcGxlJywgeyd2YWx1ZSc6IGVsZW1lbnQsICdkYXRhJzogZGF0YX0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwcmludGVyLmNoaWxkKCdleGFtcGxlJywgeyd2YWx1ZSc6IGVsZW1lbnR9KTsKICAgICAgICB9CiAgICAgICAgY291bnRlcisrOwogICAgICB9KTsKICAgICAgaWYgKGhhc01vcmUpIHsKICAgICAgICBwcmludGVyLmVuZEV4dHJhKCk7CiAgICAgIH0KICAgIH0pOwogIH0KfQoKLy8vIFJldHVybnMgYSBtYXAgdGhhdCBpcyBhbiBpbnZlcnNpb24gb2YgW21hcF0sIHdoZXJlIHRoZSBrZXlzIGFyZSB0aGUgdmFsdWVzCi8vLyBvZiBbbWFwXSBhbmQgdGhlIHZhbHVlcyBhcmUgdGhlIHNldCBvZiBrZXlzIGluIFttYXBdIHRoYXQgc2hhcmUgdmFsdWVzLgovLy8KLy8vIElmIFtlcXVhbHNdIGFuZCBbaGFzaENvZGVdIGFyZSBwcm92aWRlZCwgdGhlc2UgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lCi8vLyBlcXVhbGl0eSBhbW9uZyB0aGUgdmFsdWVzIG9mIFttYXBdLgovLy8KLy8vIElmIFtpc1ZhbGlkS2V5XSBpcyBwcm92aWRlZCwgdGhpcyBpcyB1c2VkIHRvIGRldGVybWluZSB3aXRoIGEgdmFsdWUgb2YgW21hcF0KLy8vIGlzIGEgcG90ZW50aWFsIGtleSBvZiB0aGUgaW52ZXJzaW9uIG1hcC4KTWFwPFYsIFNldDxLPj4gaW52ZXJzZU1hcDxLLCBWPihNYXA8SywgVj4gbWFwLAogICAge2Jvb2wgZXF1YWxzKFYga2V5MSwgViBrZXkyKSwKICAgIGludCBoYXNoQ29kZShWIGtleSksCiAgICBib29sIGlzVmFsaWRLZXkoViBwb3RlbnRpYWxLZXkpfSkgewogIE1hcDxWLCBTZXQ8Sz4+IHJlc3VsdCA9IG5ldyBMaW5rZWRIYXNoTWFwPFYsIFNldDxLPj4oCiAgICAgIGVxdWFsczogZXF1YWxzLCBoYXNoQ29kZTogaGFzaENvZGUsIGlzVmFsaWRLZXk6IGlzVmFsaWRLZXkpOwogIG1hcC5mb3JFYWNoKChrLCB2KSB7CiAgICBpZiAoaXNWYWxpZEtleSA9PSBudWxsIHx8IGlzVmFsaWRLZXkodikpIHsKICAgICAgcmVzdWx0LnB1dElmQWJzZW50KHYsICgpID0+IG5ldyBTZXQoKSkuYWRkKGspOwogICAgfQogIH0pOwogIHJldHVybiByZXN1bHQ7Cn0KCi8vLyBSZXR1cm4gYSBuZXcgbWFwIGhldXJpc3RpY2FsbHkgc29ydGVkIGJ5IHRoZSBrZXlzIG9mIFttYXBdLiBJZiB0aGUgZmlyc3QKLy8vIGtleSBvZiBbbWFwXSBpcyBbQ29tcGFyYWJsZV0sIHRoZSBrZXlzIGFyZSBzb3J0ZWQgdXNpbmcgW3NvcnRNYXBdIHVuZGVyCi8vLyB0aGUgYXNzdW1wdGlvbiB0aGF0IGFsbCBrZXlzIGFyZSBbQ29tcGFyYWJsZV0uCi8vLyBPdGhlcndpc2UsIHRoZSBrZXlzIGFyZSBzb3J0ZWQgYXMgc3RyaW5nIHVzaW5nIHRoZWlyIGB0b1N0cmluZ2AKLy8vIHJlcHJlc2VudGF0aW9uLgpNYXA8SywgVj4gdHJ5U29ydE1hcDxLLCBWPihNYXA8SywgVj4gbWFwKSB7CiAgSXRlcmFibGU8Sz4gaXRlcmFibGUgPSBtYXAua2V5cy53aGVyZSgoSyBrKSA9PiBrICE9IG51bGwpOwogIGlmIChpdGVyYWJsZS5pc0VtcHR5KSByZXR1cm4gbWFwOwogIHZhciBrZXkgPSBpdGVyYWJsZS5maXJzdDsKICBpZiAoa2V5IGlzIENvbXBhcmFibGU8Sz4pIHsKICAgIHJldHVybiBzb3J0TWFwKG1hcCk7CiAgfQogIHJldHVybiBzb3J0TWFwKG1hcCwgKGEsIGIpID0+ICckYScuY29tcGFyZVRvKCckYicpKTsKfQoKLy8vIFJldHVy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Iik7Ci8vLwovLy8gQWZ0ZXIgZmluaXNoaW5nIHRoZSBjb21waWxhdG9uLCB0aGUgaGlzdG9ncmFtIG9mIHRyYWNrIG1hcCBzaXplcwovLy8gaXMgcHJpbnRlZCBidXQgb25seSB3aGVuIHJ1bm5pbmcgaW4gdmVyYm9zZSBtb2RlLgpjbGFzcyBUcmFja01hcDxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgZmluYWwgTWFwPEssIFY+IF9tYXA7CiAgZmluYWwgTGlzdCBfY291bnRzOwogIHN0YXRpYyBmaW5hbCBNYXA8U3RyaW5nLCBMaXN0PGludD4+IF9jb3VudHNNYXAgPSB7fTsKCiAgVHJhY2tNYXAuX2ludGVybmFsKHRoaXMuX2NvdW50cykgOiBfbWFwID0gbmV3IE1hcDxLLCBWPigpOwoKICBmYWN0b3J5IFRyYWNrTWFwKFN0cmluZyBkZXNjcmlwdGlvbikgewogICAgTGlzdCBjb3VudHMgPSBfY291bnRzTWFwLnB1dElmQWJzZW50KGRlc2NyaXB0aW9uLCAoKSA9PiBbMF0pOwogICAgTWFwIHJlc3VsdCA9IG5ldyBUcmFja01hcDxLLCBWPi5faW50ZXJuYWwoY291bnRzKTsKICAgIGNvdW50c1swXSsrOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyB2b2lkIHByaW50SGlzdG9ncmFtKCkgewogICAgX2NvdW50c01hcC5mb3JFYWNoKChkZXNjcmlwdGlvbiwgY291bnRzKSB7CiAgICAgIHByaW50KCckZGVzY3JpcHRpb24gLS0gJHtjb3VudHMubGVuZ3RofSBtYXBzJyk7CgogICAgICAvLyBDb3VudCB0aGUgdG90YWwgbnVtYmVyIG9mIG1hcHMuCiAgICAgIGludCBzdW0gPSAwOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIHN1bSArPSBjb3VudHNbaV07CiAgICAgIH0KICAgICAgaW50IGluY3JlbWVudCA9IHN1bSB+LyAxMDsKICAgICAgaW50IHRhcmdldCA9IGluY3JlbWVudDsKICAgICAgaW50IGFjY3VtdWxhdGVkID0gMDsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudHMubGVuZ3RoOyBpKyspIHsKICAgICAgICBhY2N1bXVsYXRlZCArPSBjb3VudHNbaV07CiAgICAgICAgaWYgKGFjY3VtdWxhdGVkID49IHRhcmdldCkgewogICAgICAgICAgU3RyaW5nIHBlcmNlbnQgPSAoYWNjdW11bGF0ZWQgLyBzdW0gKiAxMDApLnRvU3RyaW5nQXNGaXhlZCgxKTsKICAgICAgICAgIHByaW50KCcgIC0tICRwZXJjZW50JTogbGVuZ3RoIDw9ICRpJyk7CiAgICAgICAgICB0YXJnZXQgKz0gaW5jcmVtZW50OwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbWFwLmxlbmd0aDsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5ID0+IF9tYXAuaXNFbXB0eTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9tYXAuaXNOb3RFbXB0eTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gX21hcC5rZXlzOwogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gX21hcC52YWx1ZXM7CgogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgPT4gX21hcC5jb250YWluc0tleShrZXkpOwogIEBvdmVycmlkZQogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpID0+IF9tYXAuY29udGFpbnNWYWx1ZSh2YWx1ZSk7CgogIEBvdmVycmlkZQogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgPT4gX21hcFtrZXldOwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IF9tYXAudG9TdHJpbmcoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEsga2V5LCBWIHZhbHVlKSkgewogICAgX21hcC5mb3JFYWNoKGFjdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgewogICAgaWYgKCFfbWFwLmNvbnRhaW5zS2V5KGtleSkpIHsKICAgICAgX25vdGlmeUxlbmd0aENoYW5nZWQoMSk7CiAgICAgIF9tYXBba2V5XSA9IHZhbHVlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSB7CiAgICBpZiAoY29udGFpbnNLZXkoa2V5KSkgcmV0dXJuIHRoaXNba2V5XTsKICAgIFYgdmFsdWUgPSBpZkFic2VudCgpOwogICAgdGhpc1trZXldID0gdmFsdWU7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBpZiAoX21hcC5jb250YWluc0tleShrZXkpKSB7CiAgICAgIF9ub3RpZnlMZW5ndGhDaGFuZ2VkKC0xKTsKICAgIH0KICAgIHJldHVybiBfbWFwLnJlbW92ZShrZXkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSB7CiAgICBvdGhlci5mb3JFYWNoKChrZXksIHZhbHVlKSA9PiB0aGlzW2tleV0gPSB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFyKCkgewogICAgX25vdGlmeUxlbmd0aENoYW5nZWQoLV9tYXAubGVuZ3RoKTsKICAgIF9tYXAuY2xlYXIoKTsKICB9CgogIEBvdmVycmlkZQogIE1hcDxLUiwgVlI+IGNhc3Q8S1IsIFZSPigpID0+IF9tYXAuY2FzdDxLUiwgVlI+KCk7CiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGdldCBlbnRyaWVzID0+IF9tYXAuZW50cmllczsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRFbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBlbnRyaWVzKSB7CiAgICBmb3IgKHZhciBlbnRyeSBpbiBlbnRyaWVzKSB0aGlzW2VudHJ5LmtleV0gPSBlbnRyeS52YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIE1hcDxLUiwgVlI+IG1hcDxLUiwgVlI+KE1hcEVudHJ5PEtSLCBWUj4gdHJhbnNmb3JtKEsga2V5LCBWIHZhbHVlKSkgPT4KICAgICAgX21hcC5tYXAodHJhbnNmb3JtKTsKCiAgQG92ZXJyaWRlCiAgViB1cGRhdGUoSyBrZXksIFYgdXBkYXRlKFYgdmFsdWUpLCB7ViBpZkFic2VudCgpfSkgPT4KICAgICAgX21hcC51cGRhdGUoa2V5LCB1cGRhdGUsIGlmQWJzZW50OiBpZkFic2VudCk7CgogIEBvdmVycmlkZQogIHZvaWQgdXBkYXRlQWxsKFYgdXBkYXRlKEsga2V5LCBWIHZhbHVlKSkgewogICAgX21hcC51cGRhdGVBbGwodXBkYXRlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEsga2V5LCBWIHZhbHVlKSkgewogICAgaW50IGJlZm9yZSA9IF9tYXAubGVuZ3RoOwogICAgX21hcC5yZW1vdmVXaGVyZSh0ZXN0KTsKICAgIF9ub3RpZnlMZW5ndGhDaGFuZ2VkKF9tYXAubGVuZ3RoIC0gYmVmb3JlKTsKICB9CgogIHZvaWQgX25vdGlmeUxlbmd0aENoYW5nZWQoaW50IGRlbHRhKSB7CiAgICBpbnQgb2xkTGVuZ3RoID0gX21hcC5sZW5ndGg7CiAgICBpbnQgbmV3TGVuZ3RoID0gb2xkTGVuZ3RoICsgZGVsdGE7CiAgICBfY291bnRzW29sZExlbmd0aF0tLTsKICAgIGlmIChuZXdMZW5ndGggPCBfY291bnRzLmxlbmd0aCkgewogICAgICBfY291bnRzW25ld0xlbmd0aF0rKzsKICAgIH0gZWxzZSB7CiAgICAgIF9jb3VudHMuYWRkKDEpOwogICAgICBhc3NlcnQobmV3TGVuZ3RoID09IF9jb3VudHMubGVuZ3RoIC0gMSk7CiAgICB9CiAgfQp9CoCcAE5OPAFEQkQnBEMERTYsGBY3AT0BKUI3ERMEASEvNgEpEzAaCCEeGzAiJUkxHwoICAQBDCEMJAwqAQwlDCkBDDkMQQEMKgwoAQwuGgQBDCYiHxkGBAEMJywaFxIEAQwZISAGHQQBDCE2BAEMESgSBAEMNQw4AQw2PgQBDEkbAQw4NAEMLRwEAQwwHhwwBAEpIScaJhwNFi8GBAIBK3BhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvdHJhY2tfbWFwLmRhcnQ2c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9lbnF1ZXVlci5kYXJ0pzovLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzLmVucXVldWU7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgc2hvdyBRdWV1ZTsKCmltcG9ydCAnLi4vY29tbW9uL3Rhc2tzLmRhcnQnIHNob3cgQ29tcGlsZXJUYXNrOwppbXBvcnQgJy4uL2NvbW1vbi93b3JrLmRhcnQnIHNob3cgV29ya0l0ZW07CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbnF1ZXVlLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL21lbWJlcl91c2FnZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS91c2UuZGFydCcKICAgIHNob3cKICAgICAgICBDb25zdGFudFVzZSwKICAgICAgICBEeW5hbWljVXNlLAogICAgICAgIFN0YXRpY1VzZSwKICAgICAgICBTdGF0aWNVc2VLaW5kLAogICAgICAgIFR5cGVVc2UsCiAgICAgICAgVHlwZVVzZUtpbmQ7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IEltcGFjdFVzZUNhc2UsIFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdFZpc2l0b3I7CmltcG9ydCAnLi4vdXRpbC9lbnVtc2V0LmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JyBzaG93IFNldGxldDsKCi8vLyBbRW5xdWV1ZXJdIHdoaWNoIGlzIHNwZWNpZmljIHRvIGNvZGUgZ2VuZXJhdGlvbi4KY2xhc3MgQ29kZWdlbkVucXVldWVyIGV4dGVuZHMgRW5xdWV1ZXJJbXBsIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBTZXQ8Q2xhc3NFbnRpdHk+IF9yZWNlbnRDbGFzc2VzID0gbmV3IFNldGxldDxDbGFzc0VudGl0eT4oKTsKICBib29sIF9yZWNlbnRDb25zdGFudHMgPSBmYWxzZTsKICBmaW5hbCBDb2RlZ2VuV29ybGRCdWlsZGVySW1wbCBfd29ybGRCdWlsZGVyOwogIGZpbmFsIFdvcmtJdGVtQnVpbGRlciBfd29ya0l0ZW1CdWlsZGVyOwoKICBAb3ZlcnJpZGUKICBib29sIHF1ZXVlSXNDbG9zZWQgPSBmYWxzZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBDb21waWxlclRhc2sgdGFzazsKICBAb3ZlcnJpZGUKICBmaW5hbCBFbnF1ZXVlckxpc3RlbmVyIGxpc3RlbmVyOwogIGZpbmFsIEFubm90YXRpb25zRGF0YSBfYW5ub3RhdGlvbnNEYXRhOwoKICBXb3JsZEltcGFjdFZpc2l0b3IgX2ltcGFjdFZpc2l0b3I7CgogIGZpbmFsIFF1ZXVlPFdvcmtJdGVtPiBfcXVldWUgPSBuZXcgUXVldWU8V29ya0l0ZW0+KCk7CgogIC8vLyBBbGwgZGVjbGFyYXRpb24gZWxlbWVudHMgdGhhdCBoYXZlIGJlZW4gcHJvY2Vzc2VkIGJ5IGNvZGVnZW4uCiAgZmluYWwgU2V0PE1lbWJlckVudGl0eT4gX3Byb2Nlc3NlZEVudGl0aWVzID0gbmV3IFNldDxNZW1iZXJFbnRpdHk+KCk7CgogIC8vIElmIG5vdCBgbnVsbGAgdGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgcXVldWUgaGFzIGJlZW4gZW1wdGllZC4gSXQgYWxsb3dzIGZvcgogIC8vIGFwcGx5aW5nIGFkZGl0aW9uYWwgaW1wYWN0cyBiZWZvcmUgcmUtZW1wdHlpbmcgdGhlIHF1ZXVlLgogIHZvaWQgRnVuY3Rpb24oKSBvbkVtcHR5Rm9yVGVzdGluZzsKCiAgc3RhdGljIGNvbnN0IEltcGFjdFVzZUNhc2UgSU1QQUNUX1VTRSA9CiAgICAgIGNvbnN0IEltcGFjdFVzZUNhc2UoJ0NvZGVnZW5FbnF1ZXVlcicpOwoKICBDb2RlZ2VuRW5xdWV1ZXIodGhpcy50YXNrLCB0aGlzLl93b3JsZEJ1aWxkZXIsIHRoaXMuX3dvcmtJdGVtQnVpbGRlciwKICAgICAgdGhpcy5saXN0ZW5lciwgdGhpcy5fYW5ub3RhdGlvbnNEYXRhKQogICAgICA6IHRoaXMubmFtZSA9ICdjb2RlZ2VuIGVucXVldWVyJyB7CiAgICBfaW1wYWN0VmlzaXRvciA9IG5ldyBFbnF1ZXVlckltcGxJbXBhY3RWaXNpdG9yKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29kZWdlbldvcmxkQnVpbGRlciBnZXQgd29ybGRCdWlsZGVyID0+IF93b3JsZEJ1aWxkZXI7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IHF1ZXVlSXNFbXB0eSA9PiBfcXVldWUuaXNFbXB0eTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBjaGVja1F1ZXVlSXNFbXB0eSgpIHsKICAgIGlmIChfcXVldWUuaXNOb3RFbXB0eSkgewogICAgICBmYWlsZWRBdChfcXVldWUuZmlyc3QuZWxlbWVudCwgIiRuYW1lIHF1ZXVlIGlzIG5vdCBlbXB0eS4iKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIFs6dHJ1ZTpdIGlmIHRoaXMgZW5xdWV1ZXIgaXMgdGhlIHJlc29sdXRpb24gZW5xdWV1ZXIuCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNSZXNvbHV0aW9uUXVldWUgPT4gZmFsc2U7CgogIC8vLyBDcmVhdGUgYSBbV29ya0l0ZW1dIGZvciBbZW50aXR5XSBhbmQgYWRkIGl0IHRvIHRoZSB3b3JrIGxpc3QgaWYgaXQgaGFzIG5vdAogIC8vLyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkLgogIHZvaWQgX2FkZFRvV29ya0xpc3QoTWVtYmVyRW50aXR5IGVudGl0eSkgewogICAgaWYgKF9wcm9jZXNzZWRFbnRpdGllcy5jb250YWlucyhlbnRpdHkpKSByZXR1cm47CgogICAgV29ya0l0ZW0gd29ya0l0ZW0gPSBfd29ya0l0ZW1CdWlsZGVyLmNyZWF0ZVdvcmtJdGVtKGVudGl0eSk7CiAgICBpZiAod29ya0l0ZW0gPT0gbnVsbCkgcmV0dXJuOwoKICAgIGlmIChxdWV1ZUlzQ2xvc2VkKSB7CiAgICAgIGZhaWxlZEF0KGVudGl0eSwgIkNvZGVnZW4gd29yayBsaXN0IGlzIGNsb3NlZC4gVHJ5aW5nIHRvIGFkZCAkZW50aXR5Iik7CiAgICB9CgogICAgYXBwbHlJbXBhY3QobGlzdGVuZXIucmVnaXN0ZXJVc2VkRWxlbWVudChlbnRpdHkpKTsKICAgIF9xdWV1ZS5hZGQod29ya0l0ZW0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhcHBseUltcGFjdChXb3JsZEltcGFjdCB3b3JsZEltcGFjdCwge3ZhciBpbXBhY3RTb3VyY2V9KSB7CiAgICBpZiAod29ybGRJbXBhY3QuaXNFbXB0eSkgcmV0dXJuOwogICAgaW1wYWN0U3RyYXRlZ3kudmlzaXRJbXBhY3QoCiAgICAgICAgaW1wYWN0U291cmNlLCB3b3JsZEltcGFjdCwgX2ltcGFjdFZpc2l0b3IsIGltcGFjdFVzZSk7CiAgfQoKICB2b2lkIF9yZWdpc3Rlckluc3RhbnRpYXRlZFR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlLAogICAgICB7Ym9vbCBuYXRpdmVVc2FnZTogZmFsc2V9KSB7CiAgICB0YXNrLm1lYXN1cmVTdWJ0YXNrKCdjb2RlZ2VuLnR5cGVVc2UnLCAoKSB7CiAgICAgIF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJUeXBlSW5zdGFudGlhdGlvbih0eXBlLCBfYXBwbHlDbGFzc1VzZSk7CiAgICAgIGxpc3RlbmVyLnJlZ2lzdGVySW5zdGFudGlhdGVkVHlwZSh0eXBlLCBuYXRpdmVVc2FnZTogbmF0aXZlVXNhZ2UpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNoZWNrTm9FbnF1ZXVlZEludm9rZWRJbnN0YW5jZU1ldGhvZHMoCiAgICAgIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQpIHsKICAgIHJldHVybiBjaGVja0VucXVldWVyQ29uc2lzdGVuY3koZWxlbWVudEVudmlyb25tZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2hlY2tDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIF93b3JsZEJ1aWxkZXIucHJvY2Vzc0NsYXNzTWVtYmVycyhjbHMsCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIEVudW1TZXQ8TWVtYmVyVXNlPiB1c2VTZXQpIHsKICAgICAgaWYgKHVzZVNldC5pc05vdEVtcHR5KSB7CiAgICAgICAgZmFpbGVkQXQobWVtYmVyLAogICAgICAgICAgICAnVW5lbnF1ZXVlZCB1c2Ugb2YgJG1lbWJlcjogJHt1c2VTZXQuaXRlcmFibGUoTWVtYmVyVXNlLnZhbHVlcyl9Jyk7CiAgICAgIH0KICAgIH0sIGNoZWNrRW5xdWV1ZXJDb25zaXN0ZW5jeTogdHJ1ZSk7CiAgfQoKICAvLy8gQ2FsbGJhY2sgZm9yIGFwcGx5aW5nIHRoZSB1c2Ugb2YgYSBbY2xzXS4KICB2b2lkIF9hcHBseUNsYXNzVXNlKENsYXNzRW50aXR5IGNscywgRW51bVNldDxDbGFzc1VzZT4gdXNlU2V0KSB7CiAgICBpZiAodXNlU2V0LmNvbnRhaW5zKENsYXNzVXNlLklOU1RBTlRJQVRFRCkpIHsKICAgICAgX3JlY2VudENsYXNzZXMuYWRkKGNscyk7CiAgICAgIF93b3JsZEJ1aWxkZXIucHJvY2Vzc0NsYXNzTWVtYmVycyhjbHMsIF9hcHBseU1lbWJlclVzZSk7CiAgICAgIC8vIFdlIG9ubHkgdGVsbCB0aGUgYmFja2VuZCBvbmNlIHRoYXQgW2Nsc10gd2FzIGluc3RhbnRpYXRlZCwgc28KICAgICAgLy8gYW55IGFkZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG11c3QgYmUgdHJlYXRlZCBhcyBnbG9iYWwKICAgICAgLy8gZGVwZW5kZW5jaWVzLgogICAgICBhcHBseUltcGFjdChsaXN0ZW5lci5yZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKGNscykpOwogICAgfQogICAgaWYgKHVzZVNldC5jb250YWlucyhDbGFzc1VzZS5JTVBMRU1FTlRFRCkpIHsKICAgICAgYXBwbHlJbXBhY3QobGlzdGVuZXIucmVnaXN0ZXJJbXBsZW1lbnRlZENsYXNzKGNscykpOwogICAgfQogIH0KCiAgLy8vIENhbGxiYWNrIGZvciBhcHBseWluZyB0aGUgdXNlIG9mIGEgW21lbWJlcl0uCiAgdm9pZCBfYXBwbHlNZW1iZXJVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgRW51bVNldDxNZW1iZXJVc2U+IHVzZVNldCkgewogICAgaWYgKHVzZVNldC5jb250YWlucyhNZW1iZXJVc2UuTk9STUFMKSkgewogICAgICBfYWRkVG9Xb3JrTGlzdChtZW1iZXIpOwogICAgfQogICAgaWYgKHVzZVNldC5jb250YWlucyhNZW1iZXJVc2UuQ0xPU1VSSVpFX0lOU1RBTkNFKSkgewogICAgICBfcmVnaXN0ZXJDbG9zdXJpemVkTWVtYmVyKG1lbWJlcik7CiAgICB9CiAgICBpZiAodXNlU2V0LmNvbnRhaW5zKE1lbWJlclVzZS5DTE9TVVJJWkVfU1RBVElDKSkgewogICAgICBhcHBseUltcGFjdChsaXN0ZW5lci5yZWdpc3RlckdldE9mU3RhdGljRnVuY3Rpb24oKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByb2Nlc3NEeW5hbWljVXNlKER5bmFtaWNVc2UgZHluYW1pY1VzZSkgewogICAgdGFzay5tZWFzdXJlU3VidGFzaygnY29kZWdlbi5keW5hbWljVXNlJywgKCkgewogICAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZShkeW5hbWljVXNlLCBfYXBwbHlNZW1iZXJVc2UpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByb2Nlc3NTdGF0aWNVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgU3RhdGljVXNlIHN0YXRpY1VzZSkgewogICAgdGFzay5tZWFzdXJlU3VidGFzaygnY29kZWdlbi5zdGF0aWNVc2UnLCAoKSB7CiAgICAgIF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2Uoc3RhdGljVXNlLCBfYXBwbHlNZW1iZXJVc2UpOwogICAgICBzd2l0Y2ggKHN0YXRpY1VzZS5raW5kKSB7CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNPTlNUUlVDVE9SX0lOVk9LRToKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ09OU1RfQ09OU1RSVUNUT1JfSU5WT0tFOgogICAgICAgICAgcHJvY2Vzc1R5cGVVc2UobWVtYmVyLCBuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKHN0YXRpY1VzZS50eXBlKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuSU5MSU5JTkc6CiAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgdGhpcyBiZSB0cmFja2VkIHdpdGggX01lbWJlclVzYWdlID8KICAgICAgICAgIGxpc3RlbmVyLnJlZ2lzdGVyVXNlZEVsZW1lbnQoc3RhdGljVXNlLmVsZW1lbnQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJvY2Vzc1R5cGVVc2UoTWVtYmVyRW50aXR5IG1lbWJlciwgVHlwZVVzZSB0eXBlVXNlKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gdHlwZVVzZS50eXBlOwogICAgc3dpdGNoICh0eXBlVXNlLmtpbmQpIHsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5JTlNUQU5USUFUSU9OOgogICAgICAgIF9yZWdpc3Rlckluc3RhbnRpYXRlZFR5cGUodHlwZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuTkFUSVZFX0lOU1RBTlRJQVRJT046CiAgICAgICAgX3JlZ2lzdGVySW5zdGFudGlhdGVkVHlwZSh0eXBlLCBuYXRpdmVVc2FnZTogdHJ1ZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuSVNfQ0hFQ0s6CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQ0FUQ0hfVFlQRToKICAgICAgICBfcmVnaXN0ZXJJc0NoZWNrKHR5cGUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLkFTX0NBU1Q6CiAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEuZ2V0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3kobWVtYmVyKS5pc0VtaXR0ZWQpIHsKICAgICAgICAgIF9yZWdpc3RlcklzQ2hlY2sodHlwZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLklNUExJQ0lUX0NBU1Q6CiAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEuZ2V0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5KG1lbWJlcikuaXNFbWl0dGVkKSB7CiAgICAgICAgICBfcmVnaXN0ZXJJc0NoZWNrKHR5cGUpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5QQVJBTUVURVJfQ0hFQ0s6CiAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3kobWVtYmVyKS5pc0VtaXR0ZWQpIHsKICAgICAgICAgIF9yZWdpc3RlcklzQ2hlY2sodHlwZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLlRZUEVfTElURVJBTDoKICAgICAgICBpZiAodHlwZSBpcyBUeXBlVmFyaWFibGVUeXBlKSB7CiAgICAgICAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyVHlwZVZhcmlhYmxlVHlwZUxpdGVyYWwodHlwZSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLlJUSV9WQUxVRToKICAgICAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVyQ29uc3RUeXBlTGl0ZXJhbCh0eXBlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5UWVBFX0FSR1VNRU5UOgogICAgICAgIF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJUeXBlQXJndW1lbnQodHlwZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQ09OU1RfSU5TVEFOVElBVElPTjoKICAgICAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAiVW5leHBlY3RlZCB0eXBlIHVzZTogJHR5cGVVc2UuIik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByb2Nlc3NDb25zdGFudFVzZShDb25zdGFudFVzZSBjb25zdGFudFVzZSkgewogICAgdGFzay5tZWFzdXJlU3VidGFzaygnY29kZWdlbi5jb25zdGFudFVzZScsICgpIHsKICAgICAgaWYgKF93b3JsZEJ1aWxkZXIucmVnaXN0ZXJDb25zdGFudFVzZShjb25zdGFudFVzZSkpIHsKICAgICAgICBhcHBseUltcGFjdChsaXN0ZW5lci5yZWdpc3RlclVzZWRDb25zdGFudChjb25zdGFudFVzZS52YWx1ZSkpOwogICAgICAgIF9yZWNlbnRDb25zdGFudHMgPSB0cnVlOwogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgX3JlZ2lzdGVySXNDaGVjayhEYXJ0VHlwZSB0eXBlKSB7CiAgICBfd29ybGRCdWlsZGVyLnJlZ2lzdGVySXNDaGVjayh0eXBlKTsKICB9CgogIHZvaWQgX3JlZ2lzdGVyQ2xvc3VyaXplZE1lbWJlcihGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyKTsKICAgIGFwcGx5SW1wYWN0KGxpc3RlbmVyLnJlZ2lzdGVyQ2xvc3VyaXplZE1lbWJlcihlbGVtZW50KSk7CiAgfQoKICB2b2lkIF9mb3JFYWNoKHZvaWQgZihXb3JrSXRlbSB3b3JrKSkgewogICAgZG8gewogICAgICB3aGlsZSAoX3F1ZXVlLmlzTm90RW1wdHkpIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBGaW5kIGFuIG9wdGltYWwgcHJvY2VzcyBvcmRlci4KICAgICAgICBXb3JrSXRlbSB3b3JrID0gX3F1ZXVlLnJlbW92ZUxhc3QoKTsKICAgICAgICBpZiAoIV9wcm9jZXNzZWRFbnRpdGllcy5jb250YWlucyh3b3JrLmVsZW1lbnQpKSB7CiAgICAgICAgICBmKHdvcmspOwogICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVnaXN0ZXIgdGhlIHByb2Nlc3NlZCBlbGVtZW50IGhlcmUuIFRoaXMKICAgICAgICAgIC8vIGlzIGN1cnJlbnRseSBhIHNpZGUtZWZmZWN0IG9mIGNhbGxpbmcgYHdvcmsucnVuYC4KICAgICAgICAgIF9wcm9jZXNzZWRFbnRpdGllcy5hZGQod29yay5lbGVtZW50KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgTGlzdDxDbGFzc0VudGl0eT4gcmVjZW50cyA9IF9yZWNlbnRDbGFzc2VzLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICBfcmVjZW50Q2xhc3Nlcy5jbGVhcigpOwogICAgICBfcmVjZW50Q29uc3RhbnRzID0gZmFsc2U7CiAgICAgIGlmICghX29uUXVldWVFbXB0eShyZWNlbnRzKSkgX3JlY2VudENsYXNzZXMuYWRkQWxsKHJlY2VudHMpOwogICAgfSB3aGlsZSAoCiAgICAgICAgX3F1ZXVlLmlzTm90RW1wdHkgfHwgX3JlY2VudENsYXNzZXMuaXNOb3RFbXB0eSB8fCBfcmVjZW50Q29uc3RhbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaCh2b2lkIGYoV29ya0l0ZW0gd29yaykpIHsKICAgIF9mb3JFYWNoKGYpOwogICAgaWYgKG9uRW1wdHlGb3JUZXN0aW5nICE9IG51bGwpIHsKICAgICAgb25FbXB0eUZvclRlc3RpbmcoKTsKICAgICAgX2ZvckVhY2goZik7CiAgICB9CiAgfQoKICAvLy8gW19vblF1ZXVlRW1wdHldIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgcXVldWUgaXMgZHJhaW5lZC4gW3JlY2VudENsYXNzZXNdCiAgLy8vIGNvbnRhaW5zIHRoZSBzZXQgb2YgYWxsIGNsYXNzZXMgc2VlbiBmb3IgdGhlIGZpcnN0IHRpbWUgc2luY2UKICAvLy8gW19vblF1ZXVlRW1wdHldIHdhcyBjYWxsZWQgbGFzdC4gQSByZXR1cm4gdmFsdWUgb2YgW3RydWVdIGluZGljYXRlcyB0aGF0CiAgLy8vIHRoZSBbcmVjZW50Q2xhc3Nlc10gaGF2ZSBiZWVuIHByb2Nlc3NlZCBhbmQgbWF5IGJlIGNsZWFyZWQuIElmIFtmYWxzZV0gaXMKICAvLy8gcmV0dXJuZWQsIFtfb25RdWV1ZUVtcHR5XSB3aWxsIGJlIGNhbGxlZCBvbmNlIHRoZSBxdWV1ZSBpcyBlbXB0eSBhZ2FpbiAob3IKICAvLy8gc3RpbGwgZW1wdHkpIGFuZCBbcmVjZW50Q2xhc3Nlc10gd2lsbCBiZSBhIHN1cGVyc2V0IG9mIHRoZSBjdXJyZW50IHZhbHVlLgogIGJvb2wgX29uUXVldWVFbXB0eShJdGVyYWJsZTxDbGFzc0VudGl0eT4gcmVjZW50Q2xhc3NlcykgewogICAgcmV0dXJuIGxpc3RlbmVyLm9uUXVldWVFbXB0eSh0aGlzLCByZWNlbnRDbGFzc2VzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgbG9nU3VtbWFyeSh2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSkpIHsKICAgIGxvZygnQ29tcGlsZWQgJHtfcHJvY2Vzc2VkRW50aXRpZXMubGVuZ3RofSBtZXRob2RzLicpOwogICAgbGlzdGVuZXIubG9nU3VtbWFyeShsb2cpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0VucXVldWVyKCRuYW1lKSc7CgogIEBvdmVycmlkZQogIEltcGFjdFVzZUNhc2UgZ2V0IGltcGFjdFVzZSA9PiBJTVBBQ1RfVVNFOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGdldCBwcm9jZXNzZWRFbnRpdGllcyA9PiBfcHJvY2Vzc2VkRW50aXRpZXM7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgcHJvY2Vzc2VkQ2xhc3NlcyA9PgogICAgICBfd29ybGRCdWlsZGVyLmluc3RhbnRpYXRlZENsYXNzZXM7Cn0KgTYATk48ARwBJQExLBk6JCEaKTEoHgkVFBMXERUnOR8oATUtFT8hLyoBDB4MGwwjKgElATgBREgBUT8lASouAUgsKToEAQw5AQwrAQwdHUMGBAFEDCcBUR4tNQFBIgEZTgYBNxoEAQxCJSA/BAE1IzBFSQgEAQwuLzkEAQwlKzsfGVAIKAQBMEMyHz9HPxc8BjE7BgQBM0ktHgY5KQY3OwYEAQwyM0UIBAEMRDJDIC81TRElTTsREREICAQBDD4iHCYpDy08DyEjIA8gTSIKDyZRIgoPKEoiCg8lKD8KDyI2DyYyDyxPBgQBDDU0PEchCAgEASkpBAE7Jj0EASkJIj8tOhNMPzAKCEoeIEMOTQQBDCgRJRsTBgQBT0RPUFFQPDcEAQwuOx4EAQwqAQwtAQxGAQwwKQIBLXBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvZW5xdWV1ZXIuZGFydD9zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL2NvZGVfZW1pdHRlcl90YXNrLmRhcnSg4S8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfZW1pdHRlci5jb2RlX2VtaXR0ZXJfdGFzazsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi90YXNrcy5kYXJ0JyBzaG93IENvbXBpbGVyVGFzazsKaW1wb3J0ICcuLi9jb21waWxlci5kYXJ0JyBzaG93IENvbXBpbGVyOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZGVmZXJyZWRfbG9hZC5kYXJ0JyBzaG93IE91dHB1dFVuaXQ7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganNBc3Q7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kLmRhcnQnIHNob3cgQ29kZWdlbklucHV0czsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2luZmVycmVkX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYW1lci5kYXJ0JyBzaG93IE5hbWVyOwppbXBvcnQgJy4uL2pzX21vZGVsL2pzX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICdwcm9ncmFtX2J1aWxkZXIvcHJvZ3JhbV9idWlsZGVyLmRhcnQnOwppbXBvcnQgJ3N0YXJ0dXBfZW1pdHRlci9lbWl0dGVyLmRhcnQnIGFzIHN0YXJ0dXBfanNfZW1pdHRlcjsKCmltcG9ydCAnbWV0YWRhdGFfY29sbGVjdG9yLmRhcnQnIHNob3cgTWV0YWRhdGFDb2xsZWN0b3I7CmltcG9ydCAnbW9kZWwuZGFydCc7CmltcG9ydCAnbmF0aXZlX2VtaXR0ZXIuZGFydCcgc2hvdyBOYXRpdmVFbWl0dGVyOwppbXBvcnQgJ3R5cGVfdGVzdF9yZWdpc3RyeS5kYXJ0JyBzaG93IFR5cGVUZXN0UmVnaXN0cnk7CgovLy8gR2VuZXJhdGVzIHRoZSBjb2RlIGZvciBhbGwgdXNlZCBjbGFzc2VzIGluIHRoZSBwcm9ncmFtLiBTdGF0aWMgZmllbGRzIChldmVuCi8vLyBpbiBjbGFzc2VzKSBhcmUgaWdub3JlZCwgc2luY2UgdGhleSBjYW4gYmUgdHJlYXRlZCBhcyBub24tY2xhc3MgZWxlbWVudHMuCi8vLwovLy8gVGhlIGNvZGUgZm9yIHRoZSBjb250YWluaW5nICh1c2VkKSBtZXRob2RzIG11c3QgZXhpc3QgaW4gdGhlIGB1bml2ZXJzZWAuCmNsYXNzIENvZGVFbWl0dGVyVGFzayBleHRlbmRzIENvbXBpbGVyVGFzayB7CiAgVHlwZVRlc3RSZWdpc3RyeSB0eXBlVGVzdFJlZ2lzdHJ5OwogIE5hdGl2ZUVtaXR0ZXIgX25hdGl2ZUVtaXR0ZXI7CiAgTWV0YWRhdGFDb2xsZWN0b3IgbWV0YWRhdGFDb2xsZWN0b3I7CiAgRW1pdHRlciBfZW1pdHRlcjsKICBmaW5hbCBDb21waWxlciBfY29tcGlsZXI7CiAgZmluYWwgYm9vbCBfZ2VuZXJhdGVTb3VyY2VNYXA7CgogIEpzQmFja2VuZFN0cmF0ZWd5IGdldCBfYmFja2VuZFN0cmF0ZWd5ID0+IF9jb21waWxlci5iYWNrZW5kU3RyYXRlZ3k7CgogIEBkZXByZWNhdGVkCiAgLy8gVGhpcyBmaWVsZCBzaG91bGQgYmUgcmVtb3ZlZC4gSXQncyBjdXJyZW50bHkgb25seSBuZWVkZWQgZm9yIGR1bXAtaW5mbyBhbmQKICAvLyB0ZXN0cy4KICAvLyBUaGUgZmllbGQgaXMgc2V0IGFmdGVyIHRoZSBwcm9ncmFtIGhhcyBiZWVuIGVtaXR0ZWQuCiAgLy8vIENvbnRhaW5zIGEgbGlzdCBvZiBhbGwgY2xhc3NlcyB0aGF0IGFyZSBlbWl0dGVkLgogIFNldDxDbGFzc0VudGl0eT4gbmVlZGVkQ2xhc3NlczsKCiAgQ29kZUVtaXR0ZXJUYXNrKHRoaXMuX2NvbXBpbGVyLCB0aGlzLl9nZW5lcmF0ZVNvdXJjZU1hcCkKICAgICAgOiBzdXBlcihfY29tcGlsZXIubWVhc3VyZXIpOwoKICBOYXRpdmVFbWl0dGVyIGdldCBuYXRpdmVFbWl0dGVyIHsKICAgIGFzc2VydCgKICAgICAgICBfbmF0aXZlRW1pdHRlciAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsICJOYXRpdmVFbWl0dGVyIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC4iKSk7CiAgICByZXR1cm4gX25hdGl2ZUVtaXR0ZXI7CiAgfQoKICBFbWl0dGVyIGdldCBlbWl0dGVyIHsKICAgIGFzc2VydChfZW1pdHRlciAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwgIkVtaXR0ZXIgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgeWV0LiIpKTsKICAgIHJldHVybiBfZW1pdHRlcjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiAnQ29kZSBlbWl0dGVyJzsKCiAgdm9pZCBfZmluYWxpemVSdGkoQ29kZWdlbklucHV0cyBjb2RlZ2VuLCBDb2RlZ2VuV29ybGQgY29kZWdlbldvcmxkKSB7CiAgICAvLyBDb21wdXRlIHRoZSByZXF1aXJlZCB0eXBlIGNoZWNrcyB0byBrbm93IHdoaWNoIGNsYXNzZXMgbmVlZCBhCiAgICAvLyAnaXMkJyBtZXRob2QuCiAgICB0eXBlVGVzdFJlZ2lzdHJ5LmNvbXB1dGVSZXF1aXJlZFR5cGVDaGVja3MoCiAgICAgICAgX2JhY2tlbmRTdHJhdGVneS5ydGlDaGVja3NCdWlsZGVyLCBjb2RlZ2VuV29ybGQpOwogICAgLy8gQ29tcHV0ZSB0aGUgY2xhc3NlcyBuZWVkZWQgYnkgUlRJLgogICAgdHlwZVRlc3RSZWdpc3RyeS5jb21wdXRlUnRpTmVlZGVkQ2xhc3NlcygKICAgICAgICBjb2RlZ2VuLnJ0aVN1YnN0aXR1dGlvbnMsIF9iYWNrZW5kU3RyYXRlZ3kuZ2VuZXJhdGVkQ29kZS5rZXlzKTsKICB9CgogIC8vLyBDcmVhdGVzIHRoZSBbRW1pdHRlcl0gZm9yIHRoaXMgdGFzay4KICB2b2lkIGNyZWF0ZUVtaXR0ZXIoCiAgICAgIE5hbWVyIG5hbWVyLCBDb2RlZ2VuSW5wdXRzIGNvZGVnZW4sIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgbWVhc3VyZSgoKSB7CiAgICAgIF9uYXRpdmVFbWl0dGVyID0gbmV3IE5hdGl2ZUVtaXR0ZXIoCiAgICAgICAgICB0aGlzLCBjbG9zZWRXb3JsZCwgX2JhY2tlbmRTdHJhdGVneS5uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIpOwogICAgICBfZW1pdHRlciA9IG5ldyBzdGFydHVwX2pzX2VtaXR0ZXIuRW1pdHRlckltcGwoCiAgICAgICAgICBfY29tcGlsZXIub3B0aW9ucywKICAgICAgICAgIF9jb21waWxlci5yZXBvcnRlciwKICAgICAgICAgIF9jb21waWxlci5vdXRwdXRQcm92aWRlciwKICAgICAgICAgIF9jb21waWxlci5kdW1wSW5mb1Rhc2ssCiAgICAgICAgICBuYW1lciwKICAgICAgICAgIGNsb3NlZFdvcmxkLAogICAgICAgICAgY29kZWdlbi5ydGlFbmNvZGVyLAogICAgICAgICAgY29kZWdlbi5ydGlSZWNpcGVFbmNvZGVyLAogICAgICAgICAgX2JhY2tlbmRTdHJhdGVneS5zb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5LAogICAgICAgICAgdGhpcywKICAgICAgICAgIF9nZW5lcmF0ZVNvdXJjZU1hcCk7CiAgICAgIG1ldGFkYXRhQ29sbGVjdG9yID0gbmV3IE1ldGFkYXRhQ29sbGVjdG9yKAogICAgICAgICAgX2NvbXBpbGVyLm9wdGlvbnMsCiAgICAgICAgICBfY29tcGlsZXIucmVwb3J0ZXIsCiAgICAgICAgICBfZW1pdHRlciwKICAgICAgICAgIGNvZGVnZW4ucnRpRW5jb2RlciwKICAgICAgICAgIGNvZGVnZW4ucnRpUmVjaXBlRW5jb2RlciwKICAgICAgICAgIGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudCk7CiAgICAgIHR5cGVUZXN0UmVnaXN0cnkgPSBuZXcgVHlwZVRlc3RSZWdpc3RyeSgKICAgICAgICAgIF9jb21waWxlci5vcHRpb25zLCBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQpOwogICAgfSk7CiAgfQoKICBpbnQgYXNzZW1ibGVQcm9ncmFtKAogICAgICBOYW1lciBuYW1lciwKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBJbmZlcnJlZERhdGEgaW5mZXJyZWREYXRhLAogICAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW5JbnB1dHMsCiAgICAgIENvZGVnZW5Xb3JsZCBjb2RlZ2VuV29ybGQpIHsKICAgIHJldHVybiBtZWFzdXJlKCgpIHsKICAgICAgbWVhc3VyZVN1YnRhc2soJ2ZpbmFsaXplIHJ0aScsICgpIHsKICAgICAgICBfZmluYWxpemVSdGkoY29kZWdlbklucHV0cywgY29kZWdlbldvcmxkKTsKICAgICAgfSk7CiAgICAgIFByb2dyYW1CdWlsZGVyIHByb2dyYW1CdWlsZGVyID0gbmV3IFByb2dyYW1CdWlsZGVyKAogICAgICAgICAgX2NvbXBpbGVyLm9wdGlvbnMsCiAgICAgICAgICBfY29tcGlsZXIucmVwb3J0ZXIsCiAgICAgICAgICBjbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywKICAgICAgICAgIGNsb3NlZFdvcmxkLm91dHB1dFVuaXREYXRhLAogICAgICAgICAgY29kZWdlbldvcmxkLAogICAgICAgICAgX2JhY2tlbmRTdHJhdGVneS5uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIsCiAgICAgICAgICBjbG9zZWRXb3JsZC5iYWNrZW5kVXNhZ2UsCiAgICAgICAgICBjbG9zZWRXb3JsZC5uYXRpdmVEYXRhLAogICAgICAgICAgY2xvc2VkV29ybGQucnRpTmVlZCwKICAgICAgICAgIGNsb3NlZFdvcmxkLmludGVyY2VwdG9yRGF0YSwKICAgICAgICAgIHR5cGVUZXN0UmVnaXN0cnkucnRpQ2hlY2tzLAogICAgICAgICAgY29kZWdlbklucHV0cy5ydGlFbmNvZGVyLAogICAgICAgICAgY29kZWdlbklucHV0cy5ydGlSZWNpcGVFbmNvZGVyLAogICAgICAgICAgY29kZWdlbldvcmxkLm9uZVNob3RJbnRlcmNlcHRvckRhdGEsCiAgICAgICAgICBfYmFja2VuZFN0cmF0ZWd5LmN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzLAogICAgICAgICAgX2JhY2tlbmRTdHJhdGVneS5nZW5lcmF0ZWRDb2RlLAogICAgICAgICAgbmFtZXIsCiAgICAgICAgICB0aGlzLAogICAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgICBjbG9zZWRXb3JsZC5maWVsZEFuYWx5c2lzLAogICAgICAgICAgaW5mZXJyZWREYXRhLAogICAgICAgICAgX2JhY2tlbmRTdHJhdGVneS5zb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5LAogICAgICAgICAgY2xvc2VkV29ybGQuc29ydGVyLAogICAgICAgICAgdHlwZVRlc3RSZWdpc3RyeS5ydGlOZWVkZWRDbGFzc2VzLAogICAgICAgICAgY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50Lm1haW5GdW5jdGlvbik7CiAgICAgIGludCBzaXplID0gZW1pdHRlci5lbWl0UHJvZ3JhbShwcm9ncmFtQnVpbGRlciwgY29kZWdlbldvcmxkKTsKICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IHdlIHNob3VsZG4ndCBuZWVkIHRoZSBgbmVlZGVkQ2xhc3Nlc2AgYW55bW9yZS4KICAgICAgbmVlZGVkQ2xhc3NlcyA9IHByb2dyYW1CdWlsZGVyLmNvbGxlY3Rvci5uZWVkZWRDbGFzc2VzOwogICAgICByZXR1cm4gc2l6ZTsKICAgIH0pOwogIH0KfQoKLy8vIEludGVyZmFjZSBmb3IgdGhlIHN1YnNldCBvZiB0aGUgW0VtaXR0ZXJdIHRoYXQgY2FuIGJlIHVzZWQgZHVyaW5nIG1vZHVsYXIKLy8vIGNvZGUgZ2VuZXJhdGlvbi4KLy8vCi8vLyBOb3RlIHRoYXQgdGhlIGVtaXNzaW9uIHBoYXNlIGlzIG5vdCBpdHNlbGYgbW9kdWxhciBidXQgcGVyZm9ybWVkIG9uCi8vLyB0aGUgY2xvc2VkIHdvcmxkIGNvbXB1dGVkIGJ5IHRoZSBjb2RlZ2VuIGVucXVldWVyLgphYnN0cmFjdCBjbGFzcyBNb2R1bGFyRW1pdHRlciB7CiAgLy8vIFJldHVybnMgdGhlIEpTIHByb3RvdHlwZSBvZiB0aGUgZ2l2ZW4gY2xhc3MgW2VdLgogIGpzQXN0LkV4cHJlc3Npb24gcHJvdG90eXBlQWNjZXNzKENsYXNzRW50aXR5IGUsIHtib29sIGhhc0JlZW5JbnN0YW50aWF0ZWR9KTsKCiAgLy8vIFJldHVybnMgdGhlIEpTIGZ1bmN0aW9uIHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gZnVuY3Rpb24uCiAgLy8vCiAgLy8vIFRoZSBmdW5jdGlvbiBtdXN0IGJlIGludm9rZWQgYW5kIGNhbiBub3QgYmUgdXNlZCBhcyBjbG9zdXJlLgogIGpzQXN0LkV4cHJlc3Npb24gc3RhdGljRnVuY3Rpb25BY2Nlc3MoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCk7CgogIGpzQXN0LkV4cHJlc3Npb24gc3RhdGljRmllbGRBY2Nlc3MoRmllbGRFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBKUyBmdW5jdGlvbiB0aGF0IG11c3QgYmUgaW52b2tlZCB0byBnZXQgdGhlIHZhbHVlIG9mIHRoZQogIC8vLyBsYXppbHkgaW5pdGlhbGl6ZWQgc3RhdGljLgogIGpzQXN0LkV4cHJlc3Npb24gaXNvbGF0ZUxhenlJbml0aWFsaXplckFjY2Vzcyhjb3ZhcmlhbnQgRmllbGRFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBjbG9zdXJlIGV4cHJlc3Npb24gb2YgYSBzdGF0aWMgZnVuY3Rpb24uCiAganNBc3QuRXhwcmVzc2lvbiBzdGF0aWNDbG9zdXJlQWNjZXNzKGNvdmFyaWFudCBGdW5jdGlvbkVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIEpTIGNvbnN0cnVjdG9yIG9mIHRoZSBnaXZlbiBlbGVtZW50LgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgZXhwcmVzc2lvbiBtdXN0IG9ubHkgYmUgdXNlZCBpbiBhIEpTIGBuZXdgIGV4cHJlc3Npb24uCiAganNBc3QuRXhwcmVzc2lvbiBjb25zdHJ1Y3RvckFjY2VzcyhDbGFzc0VudGl0eSBlKTsKCiAgLy8vIFJldHVybnMgdGhlIEpTIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIHRoZSB0eXBlIFtlXS4KICBqc0FzdC5FeHByZXNzaW9uIHR5cGVBY2Nlc3MoRW50aXR5IGUpOwoKICAvLy8gUmV0dXJucyB0aGUgSlMgbmFtZSByZXByZXNlbnRpbmcgdGhlIHR5cGUgW2VdLgogIGpzQXN0Lk5hbWUgdHlwZUFjY2Vzc05ld1J0aShFbnRpdHkgZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBKUyBuYW1lIHJlcHJlc2VudGluZyB0aGUgdHlwZSB2YXJpYWJsZSBbZV0uCiAganNBc3QuTmFtZSB0eXBlVmFyaWFibGVBY2Nlc3NOZXdSdGkoVHlwZVZhcmlhYmxlRW50aXR5IGUpOwoKICAvLy8gUmV0dXJucyB0aGUgSlMgY29kZSBmb3IgYWNjZXNzaW5nIHRoZSBlbWJlZGRlZCBbZ2xvYmFsXS4KICBqc0FzdC5FeHByZXNzaW9uIGdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoU3RyaW5nIGdsb2JhbCk7CgogIC8vLyBSZXR1cm5zIHRoZSBKUyBjb2RlIGZvciBhY2Nlc3NpbmcgdGhlIGdpdmVuIFtjb25zdGFudF0uCiAganNBc3QuRXhwcmVzc2lvbiBjb25zdGFudFJlZmVyZW5jZShDb25zdGFudFZhbHVlIGNvbnN0YW50KTsKCiAgLy8vIFJldHVybnMgdGhlIEpTIGNvZGUgZm9yIGFjY2Vzc2luZyB0aGUgZ2xvYmFsIHByb3BlcnR5IFtnbG9iYWxdLgogIFN0cmluZyBnZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzU3RyaW5nKFN0cmluZyBnbG9iYWwpOwp9CgovLy8gSW50ZXJmYWNlIGZvciB0aGUgZW1pdHRlciB0aGF0IGlzIHVzZWQgZHVyaW5nIHRoZSBlbWlzc2lvbiBwaGFzZSBvbiB0aGUKLy8vIGNsb3NlZCB3b3JsZCBjb21wdXRlZCBieSB0aGUgY29kZWdlbiBlbnF1ZXVlci4KLy8vCi8vLyBUaGVzZSBtZXRob2RzIGFyZSBfbm90XyBhdmFpbGFibGUgZHVyaW5nIG1vZHVsYXIgY29kZSBnZW5lcmF0aW9uLgphYnN0cmFjdCBjbGFzcyBFbWl0dGVyIGltcGxlbWVudHMgTW9kdWxhckVtaXR0ZXIgewogIFByb2dyYW0gZ2V0IHByb2dyYW1Gb3JUZXN0aW5nOwoKICAvLy8gVXNlcyB0aGUgW3Byb2dyYW1CdWlsZGVyXSB0byBnZW5lcmF0ZSBhIG1vZGVsIG9mIHRoZSBwcm9ncmFtLCBlbWl0cwogIC8vLyB0aGUgcHJvZ3JhbSwgYW5kIHJldHVybnMgdGhlIHNpemUgb2YgdGhlIGdlbmVyYXRlZCBvdXRwdXQuCiAgaW50IGVtaXRQcm9ncmFtKFByb2dyYW1CdWlsZGVyIHByb2dyYW1CdWlsZGVyLCBDb2RlZ2VuV29ybGQgY29kZWdlbldvcmxkKTsKCiAgLy8vIFJldHVybnMgdGhlIEpTIHByb3RvdHlwZSBvZiB0aGUgZ2l2ZW4gaW50ZXJjZXB0b3IgY2xhc3MgW2VdLgogIGpzQXN0LkV4cHJlc3Npb24gaW50ZXJjZXB0b3JQcm90b3R5cGVBY2Nlc3MoQ2xhc3NFbnRpdHkgZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBKUyBjb25zdHJ1Y3RvciBvZiB0aGUgZ2l2ZW4gaW50ZXJjZXB0b3IgY2xhc3MgW2VdLgogIGpzQXN0LkV4cHJlc3Npb24gaW50ZXJjZXB0b3JDbGFzc0FjY2VzcyhDbGFzc0VudGl0eSBlKTsKCiAgLy8vIFJldHVybnMgdGhlIEpTIGV4cHJlc3Npb24gcmVwcmVzZW50aW5nIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zICdudWxsJwogIGpzQXN0LkV4cHJlc3Npb24gZ2VuZXJhdGVGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpOwoKICBpbnQgY29tcGFyZUNvbnN0YW50cyhDb25zdGFudFZhbHVlIGEsIENvbnN0YW50VmFsdWUgYik7CiAgYm9vbCBpc0NvbnN0YW50SW5saW5lZE9yQWxyZWFkeUVtaXR0ZWQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBjb2RlIGdlbmVyYXRlZCBmb3IgYSBnaXZlbiBvdXRwdXQgW3VuaXRdLgogIGludCBnZW5lcmF0ZWRTaXplKE91dHB1dFVuaXQgdW5pdCk7Cn0KgOQATk48AS4BGTEpIzAkITgrLicxKi89ATkVMTgBUE4ETS0lICcUHCEBRwEOUAw6NyIBOyMBJAwgElAbBAEYHU8VBAEMJQFIRRUwOiouSAQBKxZGESpGNR0eJCIRFx4kNhAfMR0eFB4kKy8+CAQBFxMgISMjGCozCjodHiomJhgyJCIfJyYkKi86KhEQFyUYNh4tOERIPhMIBAIBThUESDcgN08BPwZDQQE7AUshUAE7SgE3Bko1ATspATUpAT49AT9AAT4+AUY8AgFMMwRGMyEBSkFNAUM+AUU6AUw2ATpCAUgmAgE2cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9jb2RlX2VtaXR0ZXJfdGFzay5kYXJ0PnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0wACNuy8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvYmluYXJ5L2FzdF90b19iaW5hcnkuZGFydCc7CmltcG9ydCAncGFja2FnZTprZXJuZWwvYmluYXJ5L2FzdF9mcm9tX2JpbmFyeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X3RvX2JpbmFyeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICcuLi9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZGVmZXJyZWRfbG9hZC5kYXJ0JzsKaW1wb3J0ICcuLi9kaWFnbm9zdGljcy9zb3VyY2Vfc3Bhbi5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9pbmRleGVkLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pci9jb25zdGFudHMuZGFydCc7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGVfYmFzZS5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqczsKaW1wb3J0ICcuLi9qc19tb2RlbC9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2xvY2Fscy5kYXJ0JzsKCnBhcnQgJ2Fic3RyYWN0X3NpbmsuZGFydCc7CnBhcnQgJ2Fic3RyYWN0X3NvdXJjZS5kYXJ0JzsKcGFydCAnYmluYXJ5X3NpbmsuZGFydCc7CnBhcnQgJ2JpbmFyeV9zb3VyY2UuZGFydCc7CnBhcnQgJ2hlbHBlcnMuZGFydCc7CnBhcnQgJ21lbWJlcl9kYXRhLmRhcnQnOwpwYXJ0ICdtaXhpbnMuZGFydCc7CnBhcnQgJ25vZGVfaW5kZXhlci5kYXJ0JzsKcGFydCAnb2JqZWN0X3NpbmsuZGFydCc7CnBhcnQgJ29iamVjdF9zb3VyY2UuZGFydCc7CgovLy8gSW50ZXJmYWNlIGZvciBzZXJpYWxpemF0aW9uLgphYnN0cmFjdCBjbGFzcyBEYXRhU2luayB7CiAgLy8vIFRoZSBhbW91bnQgb2YgZGF0YSB3cml0dGVuIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGUgdW5pdHMgaXMgYmFzZWQgb24gdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoaXMgZGF0YSBzaW5rLgogIGludCBnZXQgbGVuZ3RoOwoKICAvLy8gRmx1c2hlcyBhbnkgcGVuZGluZyBkYXRhIGFuZCBjbG9zZXMgdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoZSBkYXRhIHNpbmsgY2FuIG5vIGxvbmdlciBiZSB3cml0dGVuIHRvIGFmdGVyIGNsb3NpbmcuCiAgdm9pZCBjbG9zZSgpOwoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgdGhlIHNlY3Rpb24gW3RhZ10gc3RhcnRzLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgZm9yIGRlYnVnZ2luZyB0byB2ZXJpZnkgdGhhdCBzZWN0aW9ucyBhcmUgY29ycmVjdGx5IGFsaWduZWQKICAvLy8gYmV0d2VlbiBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24uCiAgdm9pZCBiZWdpbihTdHJpbmcgdGFnKTsKCiAgLy8vIFJlZ2lzdGVycyB0aGF0IHRoZSBzZWN0aW9uIFt0YWddIGVuZHMuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmb3IgZGVidWdnaW5nIHRvIHZlcmlmeSB0aGF0IHNlY3Rpb25zIGFyZSBjb3JyZWN0bHkgYWxpZ25lZAogIC8vLyBiZXR3ZWVuIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbi4KICB2b2lkIGVuZChTdHJpbmcgdGFnKTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLiBJZiBbdmFsdWVdIGhhcyBub3QgeWV0CiAgLy8vIGJlZW4gc2VyaWFsaXplZCwgW2ZdIGlzIGNhbGxlZCB0byBzZXJpYWxpemUgdGhlIHZhbHVlIGl0c2VsZi4KICB2b2lkIHdyaXRlQ2FjaGVkPEU+KEUgdmFsdWUsIHZvaWQgZihFIHZhbHVlKSk7CgogIC8vLyBXcml0ZXMgdGhlIHBvdGVudGlhbGx5IGBudWxsYCBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLiBJZiBbdmFsdWVdIGlzCiAgLy8vIG5vbi1udWxsIFtmXSBpcyBjYWxsZWQgdG8gd3JpdGUgdGhlIG5vbi1udWxsIHZhbHVlIHRvIHRoZSBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRWYWx1ZU9yTnVsbF0uCiAgdm9pZCB3cml0ZVZhbHVlT3JOdWxsPEU+KEUgdmFsdWUsIHZvaWQgZihFIHZhbHVlKSk7CgogIC8vLyBXcml0ZXMgdGhlIFt2YWx1ZXNdIHRvIHRoaXMgZGF0YSBzaW5rIGNhbGxpbmcgW2ZdIHRvIHdyaXRlIGVhY2ggdmFsdWUgdG8KICAvLy8gdGhlIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0gaXMgYHRydWVgLCBbdmFsdWVzXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZExpc3RdLgogIHZvaWQgd3JpdGVMaXN0PEU+KEl0ZXJhYmxlPEU+IHZhbHVlcywgdm9pZCBmKEUgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIGJvb2xlYW4gW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlQm9vbChib29sIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyB0aGUgbm9uLW5lZ2F0aXZlIDMwIGJpdCBpbnRlZ2VyIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUludChpbnQgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAgbm9uLW5lZ2F0aXZlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRJbnRPck51bGxdLgogIHZvaWQgd3JpdGVJbnRPck51bGwoaW50IHZhbHVlKTsKCiAgLy8vIFdyaXRlcyB0aGUgc3RyaW5nIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZVN0cmluZyhTdHJpbmcgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAgc3RyaW5nIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRTdHJpbmdPck51bGxdLgogIHZvaWQgd3JpdGVTdHJpbmdPck51bGwoU3RyaW5nIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyB0aGUgc3RyaW5nIFt2YWx1ZXNdIHRvIHRoaXMgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsCiAgLy8vIFt2YWx1ZXNdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkU3RyaW5nc10uCiAgdm9pZCB3cml0ZVN0cmluZ3MoSXRlcmFibGU8U3RyaW5nPiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgW21hcF0gZnJvbSBzdHJpbmcgdG8gW1ZdIHZhbHVlcyB0byB0aGlzIGRhdGEgc2luaywgY2FsbGluZyBbZl0KICAvLy8gdG8gd3JpdGUgZWFjaCB2YWx1ZSB0byB0aGUgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFttYXBdIGlzCiAgLy8vIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkU3RyaW5nTWFwXS4KICB2b2lkIHdyaXRlU3RyaW5nTWFwPFY+KE1hcDxTdHJpbmcsIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIGVudW0gdmFsdWUgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDaGFuZ2UgdGhlIHNpZ25hdHVyZSB0bwogIC8vIGB2b2lkIHdyaXRlRW51bTxFIGV4dGVuZHMgRW51bTxFPj4oRSB2YWx1ZSk7YCB3aGVuIGFuIGludGVyZmFjZSBmb3IgZW51bXMKICAvLyBpcyBhZGRlZCB0byB0aGUgbGFuZ3VhZ2UuCiAgdm9pZCB3cml0ZUVudW0oZHluYW1pYyB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgdGhlIFVSSSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVVcmkoVXJpIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUga2VybmVsIGxpYnJhcnkgbm9kZSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVMaWJyYXJ5Tm9kZShpci5MaWJyYXJ5IHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUga2VybmVsIGNsYXNzIG5vZGUgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlQ2xhc3NOb2RlKGlyLkNsYXNzIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUga2VybmVsIHR5cGVkZWYgbm9kZSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVUeXBlZGVmTm9kZShpci5UeXBlZGVmIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUga2VybmVsIG1lbWJlciBub2RlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZU1lbWJlck5vZGUoaXIuTWVtYmVyIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyByZWZlcmVuY2VzIHRvIHRoZSBrZXJuZWwgbWVtYmVyIG5vZGUgW3ZhbHVlc10gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vIElmIFthbGxvd051bGxdIGlzIGB0cnVlYCwgW3ZhbHVlc10gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRNZW1iZXJOb2Rlc10uCiAgdm9pZCB3cml0ZU1lbWJlck5vZGVzKEl0ZXJhYmxlPGlyLk1lbWJlcj4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIFttYXBdIGZyb20gcmVmZXJlbmNlcyB0byBrZXJuZWwgbWVtYmVyIG5vZGVzIHRvIFtWXSB2YWx1ZXMgdG8KICAvLy8gdGhpcyBkYXRhIHNpbmssIGNhbGxpbmcgW2ZdIHRvIHdyaXRlIGVhY2ggdmFsdWUgdG8gdGhlIGRhdGEgc2luay4gSWYKICAvLy8gW2FsbG93TnVsbF0gaXMgYHRydWVgLCBbbWFwXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZE1lbWJlck5vZGVNYXBdLgogIHZvaWQgd3JpdGVNZW1iZXJOb2RlTWFwPFY+KE1hcDxpci5NZW1iZXIsIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgYSBrZXJuZWwgbmFtZSBub2RlIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVOYW1lKGlyLk5hbWUgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEga2VybmVsIGxpYnJhcnkgZGVwZW5kZW5jeSBub2RlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUxpYnJhcnlEZXBlbmRlbmN5Tm9kZShpci5MaWJyYXJ5RGVwZW5kZW5jeSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSBwb3RlbnRpYWxseSBgbnVsbGAga2VybmVsIGxpYnJhcnkgZGVwZW5kZW5jeSBub2RlIFt2YWx1ZV0gdG8KICAvLy8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUxpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbChpci5MaWJyYXJ5RGVwZW5kZW5jeSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGtlcm5lbCB0cmVlIG5vZGUgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlVHJlZU5vZGUoaXIuVHJlZU5vZGUgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAga2VybmVsIHRyZWUgbm9kZSBbdmFsdWVdCiAgLy8vIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkVHJlZU5vZGVPck51bGxdLgogIHZvaWQgd3JpdGVUcmVlTm9kZU9yTnVsbChpci5UcmVlTm9kZSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgcmVmZXJlbmNlcyB0byB0aGUga2VybmVsIHRyZWUgbm9kZSBbdmFsdWVzXSB0byB0aGlzIGRhdGEgc2luay4KICAvLy8gSWYgW2FsbG93TnVsbF0gaXMgYHRydWVgLCBbdmFsdWVzXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZFRyZWVOb2Rlc10uCiAgdm9pZCB3cml0ZVRyZWVOb2RlcyhJdGVyYWJsZTxpci5UcmVlTm9kZT4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIFttYXBdIGZyb20gcmVmZXJlbmNlcyB0byBrZXJuZWwgdHJlZSBub2RlcyB0byBbVl0gdmFsdWVzIHRvCiAgLy8vIHRoaXMgZGF0YSBzaW5rLCBjYWxsaW5nIFtmXSB0byB3cml0ZSBlYWNoIHZhbHVlIHRvIHRoZSBkYXRhIHNpbmsuIElmCiAgLy8vIFthbGxvd051bGxdIGlzIGB0cnVlYCwgW21hcF0gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRUcmVlTm9kZU1hcF0uCiAgdm9pZCB3cml0ZVRyZWVOb2RlTWFwPFY+KE1hcDxpci5UcmVlTm9kZSwgVj4gbWFwLCB2b2lkIGYoViB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUga2VybmVsIHRyZWUgbm9kZSBbdmFsdWVdIGluIHRoZSBrbm93biBbY29udGV4dF0KICAvLy8gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZVRyZWVOb2RlSW5Db250ZXh0KGlyLlRyZWVOb2RlIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgcG90ZW50aWFsbHkgYG51bGxgIGtlcm5lbCB0cmVlIG5vZGUgW3ZhbHVlXSBpbgogIC8vLyB0aGUga25vd24gW2NvbnRleHRdIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkVHJlZU5vZGVPck51bGxJbkNvbnRleHRdLgogIHZvaWQgd3JpdGVUcmVlTm9kZU9yTnVsbEluQ29udGV4dChpci5UcmVlTm9kZSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgcmVmZXJlbmNlcyB0byB0aGUga2VybmVsIHRyZWUgbm9kZSBbdmFsdWVzXSBpbiB0aGUga25vd24gW2NvbnRleHRdCiAgLy8vIHRvIHRoaXMgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFt2YWx1ZXNdIGlzIGFsbG93ZWQgdG8gYmUKICAvLy8gYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkVHJlZU5vZGVzSW5Db250ZXh0XS4KICB2b2lkIHdyaXRlVHJlZU5vZGVzSW5Db250ZXh0KEl0ZXJhYmxlPGlyLlRyZWVOb2RlPiB2YWx1ZXMsCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgW21hcF0gZnJvbSByZWZlcmVuY2VzIHRvIGtlcm5lbCB0cmVlIG5vZGVzIHRvIFtWXSB2YWx1ZXMgaW4gdGhlCiAgLy8vIGtub3duIFtjb250ZXh0XSB0byB0aGlzIGRhdGEgc2luaywgY2FsbGluZyBbZl0gdG8gd3JpdGUgZWFjaCB2YWx1ZSB0byB0aGUKICAvLy8gZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFttYXBdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkVHJlZU5vZGVNYXBJbkNvbnRleHRdLgogIHZvaWQgd3JpdGVUcmVlTm9kZU1hcEluQ29udGV4dDxWPihNYXA8aXIuVHJlZU5vZGUsIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGtlcm5lbCB0eXBlIHBhcmFtZXRlciBub2RlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhCiAgLy8vIHNpbmsuCiAgdm9pZCB3cml0ZVR5cGVQYXJhbWV0ZXJOb2RlKGlyLlR5cGVQYXJhbWV0ZXIgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHJlZmVyZW5jZXMgdG8gdGhlIGtlcm5lbCB0eXBlIHBhcmFtZXRlciBub2RlIFt2YWx1ZXNdIHRvIHRoaXMgZGF0YQogIC8vLyBzaW5rLgogIC8vLyBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFt2YWx1ZXNdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkVHlwZVBhcmFtZXRlck5vZGVzXS4KICB2b2lkIHdyaXRlVHlwZVBhcmFtZXRlck5vZGVzKEl0ZXJhYmxlPGlyLlR5cGVQYXJhbWV0ZXI+IHZhbHVlcywKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSB0eXBlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdIGlzIGB0cnVlYCwKICAvLy8gW3ZhbHVlXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICB2b2lkIHdyaXRlRGFydFR5cGUoRGFydFR5cGUgdmFsdWUsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgdHlwZSBbdmFsdWVzXSB0byB0aGlzIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0gaXMgYHRydWVgLAogIC8vLyBbdmFsdWVzXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZERhcnRUeXBlc10uCiAgdm9pZCB3cml0ZURhcnRUeXBlcyhJdGVyYWJsZTxEYXJ0VHlwZT4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIGtlcm5lbCB0eXBlIG5vZGUgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0gaXMKICAvLy8gYHRydWVgLCBbdmFsdWVdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIHZvaWQgd3JpdGVEYXJ0VHlwZU5vZGUoaXIuRGFydFR5cGUgdmFsdWUsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUga2VybmVsIHR5cGUgbm9kZSBbdmFsdWVzXSB0byB0aGlzIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0gaXMKICAvLy8gYHRydWVgLCBbdmFsdWVzXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZERhcnRUeXBlTm9kZXNdLgogIHZvaWQgd3JpdGVEYXJ0VHlwZU5vZGVzKEl0ZXJhYmxlPGlyLkRhcnRUeXBlPiB2YWx1ZXMsCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgc291cmNlIHNwYW4gW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlU291cmNlU3BhbihTb3VyY2VTcGFuIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgaW5kZXhlZCBsaWJyYXJ5IFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUxpYnJhcnkoSW5kZXhlZExpYnJhcnkgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAgaW5kZXhlZCBsaWJyYXJ5IFt2YWx1ZV0KICAvLy8gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRMaWJyYXJ5T3JOdWxsXS4KICB2b2lkIHdyaXRlTGlicmFyeU9yTnVsbChJbmRleGVkTGlicmFyeSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgdGhlIFttYXBdIGZyb20gcmVmZXJlbmNlcyB0byBpbmRleGVkIGxpYnJhcmllcyB0byBbVl0gdmFsdWVzIHRvCiAgLy8vIHRoaXMgZGF0YSBzaW5rLCBjYWxsaW5nIFtmXSB0byB3cml0ZSBlYWNoIHZhbHVlIHRvIHRoZSBkYXRhIHNpbmsuIElmCiAgLy8vIFthbGxvd051bGxdIGlzIGB0cnVlYCwgW21hcF0gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRMaWJyYXJ5TWFwXS4KICB2b2lkIHdyaXRlTGlicmFyeU1hcDxWPihNYXA8TGlicmFyeUVudGl0eSwgVj4gbWFwLCB2b2lkIGYoViB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgaW5kZXhlZCBjbGFzcyBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVDbGFzcyhJbmRleGVkQ2xhc3MgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAgaW5kZXhlZCBjbGFzcyBbdmFsdWVdCiAgLy8vIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkQ2xhc3NPck51bGxdLgogIHZvaWQgd3JpdGVDbGFzc09yTnVsbChJbmRleGVkQ2xhc3MgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHJlZmVyZW5jZXMgdG8gdGhlIGluZGV4ZWQgY2xhc3MgW3ZhbHVlc10gdG8gdGhpcyBkYXRhIHNpbmsuIElmCiAgLy8vIFthbGxvd051bGxdIGlzIGB0cnVlYCwgW3ZhbHVlc10gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRDbGFzc2VzXS4KICB2b2lkIHdyaXRlQ2xhc3NlcyhJdGVyYWJsZTxDbGFzc0VudGl0eT4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIFttYXBdIGZyb20gcmVmZXJlbmNlcyB0byBpbmRleGVkIGNsYXNzZXMgdG8gW1ZdIHZhbHVlcyB0byB0aGlzCiAgLy8vIGRhdGEgc2luaywgY2FsbGluZyBbZl0gdG8gd3JpdGUgZWFjaCB2YWx1ZSB0byB0aGUgZGF0YSBzaW5rLiBJZgogIC8vLyBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFttYXBdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkQ2xhc3NNYXBdLgogIHZvaWQgd3JpdGVDbGFzc01hcDxWPihNYXA8Q2xhc3NFbnRpdHksIFY+IG1hcCwgdm9pZCBmKFYgdmFsdWUpLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGluZGV4ZWQgdHlwZWRlZiBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVUeXBlZGVmKEluZGV4ZWRUeXBlZGVmIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgaW5kZXhlZCBtZW1iZXIgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlTWVtYmVyKEluZGV4ZWRNZW1iZXIgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBwb3RlbnRpYWxseSBgbnVsbGAgaW5kZXhlZCBtZW1iZXIgW3ZhbHVlXQogIC8vLyB0byB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZE1lbWJlck9yTnVsbF0uCiAgdm9pZCB3cml0ZU1lbWJlck9yTnVsbChJbmRleGVkTWVtYmVyIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyByZWZlcmVuY2VzIHRvIHRoZSBpbmRleGVkIG1lbWJlciBbdmFsdWVzXSB0byB0aGlzIGRhdGEgc2luay4gSWYKICAvLy8gW2FsbG93TnVsbF0gaXMgYHRydWVgLCBbdmFsdWVzXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZE1lbWJlcnNdLgogIHZvaWQgd3JpdGVNZW1iZXJzKEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIFttYXBdIGZyb20gcmVmZXJlbmNlcyB0byBpbmRleGVkIG1lbWJlcnMgdG8gW1ZdIHZhbHVlcyB0byB0aGlzCiAgLy8vIGRhdGEgc2luaywgY2FsbGluZyBbZl0gdG8gd3JpdGUgZWFjaCB2YWx1ZSB0byB0aGUgZGF0YSBzaW5rLiBJZgogIC8vLyBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFttYXBdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkTWVtYmVyTWFwXS4KICB2b2lkIHdyaXRlTWVtYmVyTWFwPFY+KAogICAgICBNYXA8TWVtYmVyRW50aXR5LCBWPiBtYXAsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyLCBWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBpbmRleGVkIHR5cGUgdmFyaWFibGUgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlVHlwZVZhcmlhYmxlKEluZGV4ZWRUeXBlVmFyaWFibGUgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBsb2NhbCBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVMb2NhbChMb2NhbCBsb2NhbCk7CgogIC8vLyBXcml0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIHBvdGVudGlhbGx5IGBudWxsYCBsb2NhbCBbdmFsdWVdCiAgLy8vIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkTG9jYWxPck51bGxdLgogIHZvaWQgd3JpdGVMb2NhbE9yTnVsbChMb2NhbCBsb2NhbCk7CgogIC8vLyBXcml0ZXMgcmVmZXJlbmNlcyB0byB0aGUgbG9jYWwgW3ZhbHVlc10gdG8gdGhpcyBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdCiAgLy8vIGlzIGB0cnVlYCwgW3ZhbHVlc10gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRMb2NhbHNdLgogIHZvaWQgd3JpdGVMb2NhbHMoSXRlcmFibGU8TG9jYWw+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBbbWFwXSBmcm9tIHJlZmVyZW5jZXMgdG8gbG9jYWxzIHRvIFtWXSB2YWx1ZXMgdG8gdGhpcyBkYXRhCiAgLy8vIHNpbmssIGNhbGxpbmcgW2ZdIHRvIHdyaXRlIGVhY2ggdmFsdWUgdG8gdGhlIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0gaXMKICAvLy8gYHRydWVgLCBbbWFwXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZExvY2FsTWFwXS4KICB2b2lkIHdyaXRlTG9jYWxNYXA8Vj4oTWFwPExvY2FsLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBjb25zdGFudCBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVDb25zdGFudChDb25zdGFudFZhbHVlIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyB0aGUgcG90ZW50aWFsbHkgYG51bGxgIGNvbnN0YW50IFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgdm9pZCB3cml0ZUNvbnN0YW50T3JOdWxsKENvbnN0YW50VmFsdWUgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGNvbnN0YW50IFt2YWx1ZXNdIHRvIHRoaXMgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsCiAgLy8vIFt2YWx1ZXNdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkQ29uc3RhbnRzXS4KICB2b2lkIHdyaXRlQ29uc3RhbnRzKEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBbbWFwXSBmcm9tIGNvbnN0YW50IHZhbHVlcyB0byBbVl0gdmFsdWVzIHRvIHRoaXMgZGF0YSBzaW5rLAogIC8vLyBjYWxsaW5nIFtmXSB0byB3cml0ZSBlYWNoIHZhbHVlIHRvIHRoZSBkYXRhIHNpbmsuIElmIFthbGxvd051bGxdIGlzCiAgLy8vIGB0cnVlYCwgW21hcF0gaXMgYWxsb3dlZCB0byBiZSBgbnVsbGAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU291cmNlLnJlYWRDb25zdGFudE1hcF0uCiAgdm9pZCB3cml0ZUNvbnN0YW50TWFwPFY+KE1hcDxDb25zdGFudFZhbHVlLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIGEgZG91YmxlIHZhbHVlIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVEb3VibGVWYWx1ZShkb3VibGUgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGFuIGludGVnZXIgb2YgYXJiaXRyYXJ5IHZhbHVlIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGlzIHNob3VsZCBvbmx5IHdoZW4gdGhlIHZhbHVlIGlzIG5vdCBrbm93biB0byBiZSBhIG5vbi1uZWdhdGl2ZQogIC8vLyAzMCBiaXQgaW50ZWdlci4gT3RoZXJ3aXNlIFt3cml0ZUludF0gc2hvdWxkIGJlIHVzZWQuCiAgdm9pZCB3cml0ZUludGVnZXJWYWx1ZShpbnQgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHRoZSBpbXBvcnQgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlSW1wb3J0KEltcG9ydEVudGl0eSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgdGhlIHBvdGVudGlhbGx5IGBudWxsYCBpbXBvcnQgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlSW1wb3J0T3JOdWxsKEltcG9ydEVudGl0eSB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgaW1wb3J0IFt2YWx1ZXNdIHRvIHRoaXMgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsCiAgLy8vIFt2YWx1ZXNdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkSW1wb3J0c10uCiAgdm9pZCB3cml0ZUltcG9ydHMoSXRlcmFibGU8SW1wb3J0RW50aXR5PiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgW21hcF0gZnJvbSBpbXBvcnRzIHRvIFtWXSB2YWx1ZXMgdG8gdGhpcyBkYXRhIHNpbmssCiAgLy8vIGNhbGxpbmcgW2ZdIHRvIHdyaXRlIGVhY2ggdmFsdWUgdG8gdGhlIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0gaXMKICAvLy8gYHRydWVgLCBbbWFwXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZEltcG9ydE1hcF0uCiAgdm9pZCB3cml0ZUltcG9ydE1hcDxWPihNYXA8SW1wb3J0RW50aXR5LCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIGFuIGFic3RyYWN0IFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgZmVhdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBhIFtDb2RlZ2VuV3JpdGVyXSBoYXMgYmVlbiByZWdpc3RlcmVkLgogIHZvaWQgd3JpdGVBYnN0cmFjdFZhbHVlKEFic3RyYWN0VmFsdWUgdmFsdWUpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIHRoZSBvdXRwdXQgdW5pdCBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGZlYXR1cmUgaXMgb25seSBhdmFpbGFibGUgYSBbQ29kZWdlbldyaXRlcl0gaGFzIGJlZW4gcmVnaXN0ZXJlZC4KICB2b2lkIHdyaXRlT3V0cHV0VW5pdFJlZmVyZW5jZShPdXRwdXRVbml0IHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIGpzIG5vZGUgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhpcyBmZWF0dXJlIGlzIG9ubHkgYXZhaWxhYmxlIGEgW0NvZGVnZW5Xcml0ZXJdIGhhcyBiZWVuIHJlZ2lzdGVyZWQuCiAgdm9pZCB3cml0ZUpzTm9kZShqcy5Ob2RlIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyBhIHBvdGVudGlhbGx5IGBudWxsYCBqcyBub2RlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoaXMgZmVhdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBhIFtDb2RlZ2VuV3JpdGVyXSBoYXMgYmVlbiByZWdpc3RlcmVkLgogIHZvaWQgd3JpdGVKc05vZGVPck51bGwoanMuTm9kZSB2YWx1ZSk7CgogIC8vLyBSZWdpc3RlciBhbiBbRW50aXR5V3JpdGVyXSB3aXRoIHRoaXMgZGF0YSBzaW5rIGZvciBub24tZGVmYXVsdCBlbmNvZGluZwogIC8vLyBvZiBlbnRpdHkgcmVmZXJlbmNlcy4KICB2b2lkIHJlZ2lzdGVyRW50aXR5V3JpdGVyKEVudGl0eVdyaXRlciB3cml0ZXIpOwoKICAvLy8gUmVnaXN0ZXIgYSBbQ29kZWdlbldyaXRlcl0gd2l0aCB0aGlzIGRhdGEgc2luayB0byBzdXBwb3J0IHNlcmlhbGl6YXRpb24KICAvLy8gb2YgY29kZWdlbiBvbmx5IGRhdGEuCiAgdm9pZCByZWdpc3RlckNvZGVnZW5Xcml0ZXIoQ29kZWdlbldyaXRlciB3cml0ZXIpOwoKICAvLy8gSW52b2tlIFtmXSBpbiB0aGUgY29udGV4dCBvZiBbbWVtYmVyXS4gVGhpcyBzZXRzIHVwIHN1cHBvcnQgZm9yCiAgLy8vIHNlcmlhbGl6YXRpb24gb2YgYGlyLlRyZWVOb2RlYHMgdXNpbmcgdGhlIGB3cml0ZVRyZWVOb2RlKkluQ29udGV4dGAKICAvLy8gbWV0aG9kcy4KICB2b2lkIGluTWVtYmVyQ29udGV4dChpci5NZW1iZXIgbWVtYmVyLCB2b2lkIGYoKSk7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIGRlc2VyaWFsaXphdGlvbi4KYWJzdHJhY3QgY2xhc3MgRGF0YVNvdXJjZSB7CiAgLy8vIFJlZ2lzdGVycyB0aGF0IHRoZSBzZWN0aW9uIFt0YWddIHN0YXJ0cy4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGZvciBkZWJ1Z2dpbmcgdG8gdmVyaWZ5IHRoYXQgc2VjdGlvbnMgYXJlIGNvcnJlY3RseSBhbGlnbmVkCiAgLy8vIGJldHdlZW4gc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLgogIHZvaWQgYmVnaW4oU3RyaW5nIHRhZyk7CgogIC8vLyBSZWdpc3RlcnMgdGhhdCB0aGUgc2VjdGlvbiBbdGFnXSBlbmRzLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgZm9yIGRlYnVnZ2luZyB0byB2ZXJpZnkgdGhhdCBzZWN0aW9ucyBhcmUgY29ycmVjdGx5IGFsaWduZWQKICAvLy8gYmV0d2VlbiBzZXJpYWxpemF0aW9uIGFuZCBkZXNlcmlhbGl6YXRpb24uCiAgdm9pZCBlbmQoU3RyaW5nIHRhZyk7CgogIC8vLyBSZWdpc3RlcnMgYSBbQ29tcG9uZW50TG9va3VwXSBvYmplY3Qgd2l0aCB0aGlzIGRhdGEgc291cmNlIHRvIHN1cHBvcnQKICAvLy8gZGVzZXJpYWxpemF0aW9uIG9mIHJlZmVyZW5jZXMgdG8ga2VybmVsIG5vZGVzLgogIHZvaWQgcmVnaXN0ZXJDb21wb25lbnRMb29rdXAoQ29tcG9uZW50TG9va3VwIGNvbXBvbmVudExvb2t1cCk7CgogIC8vLyBSZWdpc3RlcnMgYW4gW0VudGl0eUxvb2t1cF0gb2JqZWN0IHdpdGggdGhpcyBkYXRhIHNvdXJjZSB0byBzdXBwb3J0CiAgLy8vIGRlc2VyaWFsaXphdGlvbiBvZiByZWZlcmVuY2VzIHRvIGluZGV4ZWQgZW50aXRpZXMuCiAgdm9pZCByZWdpc3RlckVudGl0eUxvb2t1cChFbnRpdHlMb29rdXAgZW50aXR5TG9va3VwKTsKCiAgLy8vIFJlZ2lzdGVycyBhbiBbRW50aXR5UmVhZGVyXSB3aXRoIHRoaXMgZGF0YSBzb3VyY2UgZm9yIG5vbi1kZWZhdWx0IGVuY29kaW5nCiAgLy8vIG9mIGVudGl0eSByZWZlcmVuY2VzLgogIHZvaWQgcmVnaXN0ZXJFbnRpdHlSZWFkZXIoRW50aXR5UmVhZGVyIHJlYWRlcik7CgogIC8vLyBSZWdpc3RlcnMgYSBbTG9jYWxMb29rdXBdIG9iamVjdCB3aXRoIHRoaXMgZGF0YSBzb3VyY2UgdG8gc3VwcG9ydAogIC8vLyBkZXNlcmlhbGl6YXRpb24gb2YgcmVmZXJlbmNlcyB0byBsb2NhbHMuCiAgdm9pZCByZWdpc3RlckxvY2FsTG9va3VwKExvY2FsTG9va3VwIGxvY2FsTG9va3VwKTsKCiAgLy8vIFJlZ2lzdGVycyBhIFtDb2RlZ2VuUmVhZGVyXSB3aXRoIHRoaXMgZGF0YSBzb3VyY2UgdG8gc3VwcG9ydAogIC8vLyBkZXNlcmlhbGl6YXRpb24gb2YgY29kZWdlbiBvbmx5IGRhdGEuCiAgdm9pZCByZWdpc3RlckNvZGVnZW5SZWFkZXIoQ29kZWdlblJlYWRlciByZWFkZXIpOwoKICAvLy8gVW5yZWdpc3RlcnMgdGhlIFtDb2RlZ2VuUmVhZGVyXSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UgdG8gcmVtb3ZlIHN1cHBvcnQKICAvLy8gZm9yIGRlc2VyaWFsaXphdGlvbiBvZiBjb2RlZ2VuIG9ubHkgZGF0YS4KICB2b2lkIGRlcmVnaXN0ZXJDb2RlZ2VuUmVhZGVyKENvZGVnZW5SZWFkZXIgcmVhZGVyKTsKCiAgLy8vIEludm9rZSBbZl0gaW4gdGhlIGNvbnRleHQgb2YgW21lbWJlcl0uIFRoaXMgc2V0cyB1cCBzdXBwb3J0IGZvcgogIC8vLyBkZXNlcmlhbGl6YXRpb24gb2YgYGlyLlRyZWVOb2RlYHMgdXNpbmcgdGhlIGByZWFkVHJlZU5vZGUqSW5Db250ZXh0YAogIC8vLyBtZXRob2RzLgogIFQgaW5NZW1iZXJDb250ZXh0PFQ+KGlyLk1lbWJlciBtZW1iZXIsIFQgZigpKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGFuIFtFXSB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuIElmIHRoZSB2YWx1ZSBoYXMKICAvLy8gbm90IHlldCBiZWVuIGRlc2VyaWFsaXplZCwgW2ZdIGlzIGNhbGxlZCB0byBkZXNlcmlhbGl6ZSB0aGUgdmFsdWUgaXRzZWxmLgogIEUgcmVhZENhY2hlZDxFPihFIGYoKSk7CgogIC8vLyBSZWFkcyBhIHBvdGVudGlhbGx5IGBudWxsYCBbRV0gdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLCBjYWxsaW5nIFtmXSB0bwogIC8vLyByZWFkIHRoZSBub24tbnVsbCB2YWx1ZSBmcm9tIHRoZSBkYXRhIHNvdXJjZS4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlVmFsdWVPck51bGxdLgogIEUgcmVhZFZhbHVlT3JOdWxsPEU+KEUgZigpKTsKCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiBbRV0gdmFsdWVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZUxpc3RdLgogIExpc3Q8RT4gcmVhZExpc3Q8RT4oRSBmKCksIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBib29sZWFuIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBib29sIHJlYWRCb29sKCk7CgogIC8vLyBSZWFkcyBhIG5vbi1uZWdhdGl2ZSAzMCBiaXQgaW50ZWdlciB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgaW50IHJlYWRJbnQoKTsKCiAgLy8vIFJlYWRzIGEgcG90ZW50aWFsbHkgYG51bGxgIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIGZyb20gdGhpcyBkYXRhCiAgLy8vIHNvdXJjZS4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlSW50T3JOdWxsXS4KICBpbnQgcmVhZEludE9yTnVsbCgpOwoKICAvLy8gUmVhZHMgYSBzdHJpbmcgdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIFN0cmluZyByZWFkU3RyaW5nKCk7CgogIC8vLyBSZWFkcyBhIHBvdGVudGlhbGx5IGBudWxsYCBzdHJpbmcgdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVTdHJpbmdPck51bGxdLgogIFN0cmluZyByZWFkU3RyaW5nT3JOdWxsKCk7CgogIC8vLyBSZWFkcyBhIGxpc3Qgb2Ygc3RyaW5nIHZhbHVlcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMKICAvLy8gYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVTdHJpbmdzXS4KICBMaXN0PFN0cmluZz4gcmVhZFN0cmluZ3Moe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIG1hcCBmcm9tIHN0cmluZyB2YWx1ZXMgdG8gW1ZdIHZhbHVlcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UsCiAgLy8vIGNhbGxpbmcgW2ZdIHRvIHJlYWQgZWFjaCB2YWx1ZSBmcm9tIHRoZSBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IG1hcC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlU3RyaW5nTWFwXS4KICBNYXA8U3RyaW5nLCBWPiByZWFkU3RyaW5nTWFwPFY+KFYgZigpLCB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGFuIGVudW0gdmFsdWUgZnJvbSB0aGUgbGlzdCBvZiBlbnVtIFt2YWx1ZXNdIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICAvLy8KICAvLy8gVGhlIFt2YWx1ZXNdIGFyZ3VtZW50IGlzIGludGVuZGVkIHRvIGJlIHRoZSBzdGF0aWMgYC52YWx1ZXNgIGZpZWxkIG9uCiAgLy8vIGVudW0gY2xhc3NlcywgZm9yIGluc3RhbmNlOgogIC8vLwogIC8vLyAgICBlbnVtIEZvbyB7IGJhciwgYmF6IH0KICAvLy8gICAgLi4uCiAgLy8vICAgIEZvbyBmb28gPSBzb3VyY2UucmVhZEVudW0oRm9vLnZhbHVlcyk7CiAgLy8vCiAgRSByZWFkRW51bTxFPihMaXN0PEU+IHZhbHVlcyk7CgogIC8vLyBSZWFkcyBhIFVSSSB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgVXJpIHJlYWRVcmkoKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGEga2VybmVsIGxpYnJhcnkgbm9kZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgaXIuTGlicmFyeSByZWFkTGlicmFyeU5vZGUoKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGEga2VybmVsIGNsYXNzIG5vZGUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIGlyLkNsYXNzIHJlYWRDbGFzc05vZGUoKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGEga2VybmVsIGNsYXNzIG5vZGUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIGlyLlR5cGVkZWYgcmVhZFR5cGVkZWZOb2RlKCk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhIGtlcm5lbCBtZW1iZXIgbm9kZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgaXIuTWVtYmVyIHJlYWRNZW1iZXJOb2RlKCk7CgogIC8vLyBSZWFkcyBhIGxpc3Qgb2YgcmVmZXJlbmNlcyB0byBrZXJuZWwgbWVtYmVyIG5vZGVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICAvLy8gSWYgW2VtcHR5QXNOdWxsXSBpcyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZU1lbWJlck5vZGVzXS4KICBMaXN0PGlyLk1lbWJlcj4gcmVhZE1lbWJlck5vZGVzPEUgZXh0ZW5kcyBpci5NZW1iZXI+KAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgbWFwIGZyb20ga2VybmVsIG1lbWJlciBub2RlcyB0byBbVl0gdmFsdWVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZSwKICAvLy8gY2FsbGluZyBbZl0gdG8gcmVhZCBlYWNoIHZhbHVlIGZyb20gdGhlIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzCiAgLy8vIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbWFwLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVNZW1iZXJOb2RlTWFwXS4KICBNYXA8SywgVj4gcmVhZE1lbWJlck5vZGVNYXA8SyBleHRlbmRzIGlyLk1lbWJlciwgVj4oViBmKCksCiAgICAgIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBrZXJuZWwgbmFtZSBub2RlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBpci5OYW1lIHJlYWROYW1lKCk7CgogIC8vLyBSZWFkcyBhIGtlcm5lbCBsaWJyYXJ5IGRlcGVuZGVuY3kgbm9kZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgaXIuTGlicmFyeURlcGVuZGVuY3kgcmVhZExpYnJhcnlEZXBlbmRlbmN5Tm9kZSgpOwoKICAvLy8gUmVhZHMgYSBwb3RlbnRpYWxseSBgbnVsbGAga2VybmVsIGxpYnJhcnkgZGVwZW5kZW5jeSBub2RlIGZyb20gdGhpcyBkYXRhCiAgLy8vIHNvdXJjZS4KICBpci5MaWJyYXJ5RGVwZW5kZW5jeSByZWFkTGlicmFyeURlcGVuZGVuY3lOb2RlT3JOdWxsKCk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhIGtlcm5lbCB0cmVlIG5vZGUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIGlyLlRyZWVOb2RlIHJlYWRUcmVlTm9kZSgpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYSBwb3RlbnRpYWxseSBgbnVsbGAga2VybmVsIHRyZWUgbm9kZSBmcm9tIHRoaXMgZGF0YQogIC8vLyBzb3VyY2UuCiAgaXIuVHJlZU5vZGUgcmVhZFRyZWVOb2RlT3JOdWxsKCk7CgogIC8vLyBSZWFkcyBhIGxpc3Qgb2YgcmVmZXJlbmNlcyB0byBrZXJuZWwgdHJlZSBub2RlcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgLy8vIElmIFtlbXB0eUFzTnVsbF0gaXMgYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVUcmVlTm9kZXNdLgogIExpc3Q8RT4gcmVhZFRyZWVOb2RlczxFIGV4dGVuZHMgaXIuVHJlZU5vZGU+KHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBtYXAgZnJvbSBrZXJuZWwgdHJlZSBub2RlcyB0byBbVl0gdmFsdWVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZSwKICAvLy8gY2FsbGluZyBbZl0gdG8gcmVhZCBlYWNoIHZhbHVlIGZyb20gdGhlIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzCiAgLy8vIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbWFwLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVUcmVlTm9kZU1hcF0uCiAgTWFwPEssIFY+IHJlYWRUcmVlTm9kZU1hcDxLIGV4dGVuZHMgaXIuVHJlZU5vZGUsIFY+KFYgZigpLAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGEga2VybmVsIHRyZWUgbm9kZSBpbiB0aGUga25vd24gW2NvbnRleHRdIGZyb20gdGhpcwogIC8vLyBkYXRhIHNvdXJjZS4KICBpci5UcmVlTm9kZSByZWFkVHJlZU5vZGVJbkNvbnRleHQoKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGEgcG90ZW50aWFsbHkgYG51bGxgIGtlcm5lbCB0cmVlIG5vZGUgaW4gdGhlIGtub3duCiAgLy8vIFtjb250ZXh0XSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgaXIuVHJlZU5vZGUgcmVhZFRyZWVOb2RlT3JOdWxsSW5Db250ZXh0KCk7CgogIC8vLyBSZWFkcyBhIGxpc3Qgb2YgcmVmZXJlbmNlcyB0byBrZXJuZWwgdHJlZSBub2RlcyBpbiB0aGUga25vd24gW2NvbnRleHRdCiAgLy8vIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZAogIC8vLyBpbnN0ZWFkIG9mIGFuIGVtcHR5IGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZVRyZWVOb2Rlc0luQ29udGV4dF0uCiAgTGlzdDxFPiByZWFkVHJlZU5vZGVzSW5Db250ZXh0PEUgZXh0ZW5kcyBpci5UcmVlTm9kZT4oCiAgICAgIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBtYXAgZnJvbSBrZXJuZWwgdHJlZSBub2RlcyB0byBbVl0gdmFsdWVzIGluIHRoZSBrbm93biBbY29udGV4dF0KICAvLy8gZnJvbSB0aGlzIGRhdGEgc291cmNlLCBjYWxsaW5nIFtmXSB0byByZWFkIGVhY2ggdmFsdWUgZnJvbSB0aGUgZGF0YQogIC8vLyBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMgYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eQogIC8vLyBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZVRyZWVOb2RlTWFwSW5Db250ZXh0XS4KICBNYXA8SywgVj4gcmVhZFRyZWVOb2RlTWFwSW5Db250ZXh0PEsgZXh0ZW5kcyBpci5UcmVlTm9kZSwgVj4oViBmKCksCiAgICAgIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYSBrZXJuZWwgdHlwZSBwYXJhbWV0ZXIgbm9kZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgaXIuVHlwZVBhcmFtZXRlciByZWFkVHlwZVBhcmFtZXRlck5vZGUoKTsKCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiByZWZlcmVuY2VzIHRvIGtlcm5lbCB0eXBlIHBhcmFtZXRlciBub2RlcyBmcm9tIHRoaXMgZGF0YQogIC8vLyBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMgYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eQogIC8vLyBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVUeXBlUGFyYW1ldGVyTm9kZXNdLgogIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gcmVhZFR5cGVQYXJhbWV0ZXJOb2Rlcyh7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgdHlwZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuIElmIFthbGxvd051bGxdLCB0aGUgcmV0dXJuZWQgdHlwZSBpcwogIC8vLyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICBEYXJ0VHlwZSByZWFkRGFydFR5cGUoe2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIHR5cGVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcyBgdHJ1ZWAsCiAgLy8vIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZURhcnRUeXBlc10uCiAgTGlzdDxEYXJ0VHlwZT4gcmVhZERhcnRUeXBlcyh7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEga2VybmVsIHR5cGUgbm9kZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuIElmIFthbGxvd051bGxdLCB0aGUKICAvLy8gcmV0dXJuZWQgdHlwZSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICBpci5EYXJ0VHlwZSByZWFkRGFydFR5cGVOb2RlKHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiBrZXJuZWwgdHlwZSBub2RlcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0KICAvLy8gaXMgYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVEYXJ0VHlwZU5vZGVzXS4KICBMaXN0PGlyLkRhcnRUeXBlPiByZWFkRGFydFR5cGVOb2Rlcyh7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgc291cmNlIHNwYW4gZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIFNvdXJjZVNwYW4gcmVhZFNvdXJjZVNwYW4oKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGFuIGluZGV4ZWQgbGlicmFyeSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgSW5kZXhlZExpYnJhcnkgcmVhZExpYnJhcnkoKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGEgcG90ZW50aWFsbHkgYG51bGxgIGluZGV4ZWQgbGlicmFyeSBmcm9tIHRoaXMgZGF0YQogIC8vLyBzb3VyY2UuCiAgSW5kZXhlZExpYnJhcnkgcmVhZExpYnJhcnlPck51bGwoKTsKICBNYXA8SywgVj4gcmVhZExpYnJhcnlNYXA8SyBleHRlbmRzIExpYnJhcnlFbnRpdHksIFY+KFYgZigpLAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGFuIGluZGV4ZWQgY2xhc3MgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIEluZGV4ZWRDbGFzcyByZWFkQ2xhc3MoKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGEgcG90ZW50aWFsbHkgYG51bGxgIGluZGV4ZWQgY2xhc3MgZnJvbSB0aGlzIGRhdGEKICAvLy8gc291cmNlLgogIEluZGV4ZWRDbGFzcyByZWFkQ2xhc3NPck51bGwoKTsKCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiByZWZlcmVuY2VzIHRvIGluZGV4ZWQgY2xhc3NlcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgLy8vIElmIFtlbXB0eUFzTnVsbF0gaXMgYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVDbGFzc2VzXS4KICBMaXN0PEU+IHJlYWRDbGFzc2VzPEUgZXh0ZW5kcyBDbGFzc0VudGl0eT4oe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIG1hcCBmcm9tIGluZGV4ZWQgY2xhc3NlcyB0byBbVl0gdmFsdWVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZSwKICAvLy8gY2FsbGluZyBbZl0gdG8gcmVhZCBlYWNoIHZhbHVlIGZyb20gdGhlIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzCiAgLy8vIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbWFwLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVDbGFzc01hcF0uCiAgTWFwPEssIFY+IHJlYWRDbGFzc01hcDxLIGV4dGVuZHMgQ2xhc3NFbnRpdHksIFY+KFYgZigpLAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGFuIGluZGV4ZWQgdHlwZWRlZiBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgSW5kZXhlZFR5cGVkZWYgcmVhZFR5cGVkZWYoKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGFuIGluZGV4ZWQgbWVtYmVyIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBJbmRleGVkTWVtYmVyIHJlYWRNZW1iZXIoKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGEgcG90ZW50aWFsbHkgYG51bGxgIGluZGV4ZWQgbWVtYmVyIGZyb20gdGhpcyBkYXRhCiAgLy8vIHNvdXJjZS4KICBJbmRleGVkTWVtYmVyIHJlYWRNZW1iZXJPck51bGwoKTsKCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiByZWZlcmVuY2VzIHRvIGluZGV4ZWQgbWVtYmVycyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgLy8vIElmIFtlbXB0eUFzTnVsbF0gaXMgYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVNZW1iZXJzXS4KICBMaXN0PEU+IHJlYWRNZW1iZXJzPEUgZXh0ZW5kcyBNZW1iZXJFbnRpdHk+KHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBtYXAgZnJvbSBpbmRleGVkIG1lbWJlcnMgdG8gW1ZdIHZhbHVlcyBmcm9tIHRoaXMgZGF0YSBzb3VyY2UsCiAgLy8vIGNhbGxpbmcgW2ZdIHRvIHJlYWQgZWFjaCB2YWx1ZSBmcm9tIHRoZSBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IG1hcC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlTWVtYmVyTWFwXS4KICBNYXA8SywgVj4gcmVhZE1lbWJlck1hcDxLIGV4dGVuZHMgTWVtYmVyRW50aXR5LCBWPihWIGYoTWVtYmVyRW50aXR5IG1lbWJlciksCiAgICAgIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYW4gaW5kZXhlZCB0eXBlIHZhcmlhYmxlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBJbmRleGVkVHlwZVZhcmlhYmxlIHJlYWRUeXBlVmFyaWFibGUoKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGEgbG9jYWwgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIExvY2FsIHJlYWRMb2NhbCgpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYSBwb3RlbnRpYWxseSBgbnVsbGAgbG9jYWwgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIExvY2FsIHJlYWRMb2NhbE9yTnVsbCgpOwoKICAvLy8gUmVhZHMgYSBsaXN0IG9mIHJlZmVyZW5jZXMgdG8gbG9jYWxzIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4gSWYKICAvLy8gW2VtcHR5QXNOdWxsXSBpcyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZUxvY2Fsc10uCiAgTGlzdDxFPiByZWFkTG9jYWxzPEUgZXh0ZW5kcyBMb2NhbD4oe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIG1hcCBmcm9tIGxvY2FscyB0byBbVl0gdmFsdWVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZSwgY2FsbGluZyBbZl0KICAvLy8gdG8gcmVhZCBlYWNoIHZhbHVlIGZyb20gdGhlIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzIGB0cnVlYCwKICAvLy8gYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbWFwLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVMb2NhbE1hcF0uCiAgTWFwPEssIFY+IHJlYWRMb2NhbE1hcDxLIGV4dGVuZHMgTG9jYWwsIFY+KFYgZigpLCB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgY29uc3RhbnQgdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIENvbnN0YW50VmFsdWUgcmVhZENvbnN0YW50KCk7CgogIC8vLyBSZWFkcyBhIHBvdGVudGlhbGx5IGBudWxsYCBjb25zdGFudCB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgQ29uc3RhbnRWYWx1ZSByZWFkQ29uc3RhbnRPck51bGwoKTsKCiAgLy8vIFJlYWRzIGEgZG91YmxlIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBkb3VibGUgcmVhZERvdWJsZVZhbHVlKCk7CgogIC8vLyBSZWFkcyBhbiBpbnRlZ2VyIG9mIGFyYml0cmFyeSB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoaXMgaXMgc2hvdWxkIG9ubHkgd2hlbiB0aGUgdmFsdWUgaXMgbm90IGtub3duIHRvIGJlIGEgbm9uLW5lZ2F0aXZlCiAgLy8vIDMwIGJpdCBpbnRlZ2VyLiBPdGhlcndpc2UgW3JlYWRJbnRdIHNob3VsZCBiZSB1c2VkLgogIGludCByZWFkSW50ZWdlclZhbHVlKCk7CgogIC8vLyBSZWFkcyBhIGxpc3Qgb2YgY29uc3RhbnQgdmFsdWVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZUNvbnN0YW50c10uCiAgTGlzdDxFPiByZWFkQ29uc3RhbnRzPEUgZXh0ZW5kcyBDb25zdGFudFZhbHVlPih7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgbWFwIGZyb20gY29uc3RhbnQgdmFsdWVzIHRvIFtWXSB2YWx1ZXMgZnJvbSB0aGlzIGRhdGEgc291cmNlLAogIC8vLyBjYWxsaW5nIFtmXSB0byByZWFkIGVhY2ggdmFsdWUgZnJvbSB0aGUgZGF0YSBzb3VyY2UuIElmIFtlbXB0eUFzTnVsbF0gaXMKICAvLy8gYHRydWVgLCBgbnVsbGAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBhbiBlbXB0eSBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZUNvbnN0YW50TWFwXS4KICBNYXA8SywgVj4gcmVhZENvbnN0YW50TWFwPEsgZXh0ZW5kcyBDb25zdGFudFZhbHVlLCBWPihWIGYoKSwKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSk7CgogIC8vLyBSZWFkcyBhIGltcG9ydCBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgSW1wb3J0RW50aXR5IHJlYWRJbXBvcnQoKTsKCiAgLy8vIFJlYWRzIGEgcG90ZW50aWFsbHkgYG51bGxgIGltcG9ydCBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgSW1wb3J0RW50aXR5IHJlYWRJbXBvcnRPck51bGwoKTsKCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiBpbXBvcnRzIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZUltcG9ydHNdLgogIExpc3Q8SW1wb3J0RW50aXR5PiByZWFkSW1wb3J0cyh7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgbWFwIGZyb20gaW1wb3J0cyB0byBbVl0gdmFsdWVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZSwKICAvLy8gY2FsbGluZyBbZl0gdG8gcmVhZCBlYWNoIHZhbHVlIGZyb20gdGhlIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzCiAgLy8vIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbWFwLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVJbXBvcnRNYXBdLgogIE1hcDxJbXBvcnRFbnRpdHksIFY+IHJlYWRJbXBvcnRNYXA8Vj4oViBmKCksIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYW4gW0Fic3RyYWN0VmFsdWVdIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICAvLy8KICAvLy8gVGhpcyBmZWF0dXJlIGlzIG9ubHkgYXZhaWxhYmxlIGEgW0NvZGVnZW5SZWFkZXJdIGhhcyBiZWVuIHJlZ2lzdGVyZWQuCiAgQWJzdHJhY3RWYWx1ZSByZWFkQWJzdHJhY3RWYWx1ZSgpOwoKICAvLy8gUmVhZHMgYSByZWZlcmVuY2UgdG8gYW4gW091dHB1dFVuaXRdIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICAvLy8KICAvLy8gVGhpcyBmZWF0dXJlIGlzIG9ubHkgYXZhaWxhYmxlIGEgW0NvZGVnZW5SZWFkZXJdIGhhcyBiZWVuIHJlZ2lzdGVyZWQuCiAgT3V0cHV0VW5pdCByZWFkT3V0cHV0VW5pdFJlZmVyZW5jZSgpOwoKICAvLy8gUmVhZHMgYSBbanMuTm9kZV0gdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIC8vLwogIC8vLyBUaGlzIGZlYXR1cmUgaXMgb25seSBhdmFpbGFibGUgYSBbQ29kZWdlblJlYWRlcl0gaGFzIGJlZW4gcmVnaXN0ZXJlZC4KICBqcy5Ob2RlIHJlYWRKc05vZGUoKTsKCiAgLy8vIFJlYWRzIGEgcG90ZW50aWFsbHkgYG51bGxgIFtqcy5Ob2RlXSB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoaXMgZmVhdHVyZSBpcyBvbmx5IGF2YWlsYWJsZSBhIFtDb2RlZ2VuUmVhZGVyXSBoYXMgYmVlbiByZWdpc3RlcmVkLgogIGpzLk5vZGUgcmVhZEpzTm9kZU9yTnVsbCgpOwp9CgovLy8gSW50ZXJmYWNlIHVzZWQgZm9yIGxvb2tpbmcgdXAgZW50aXRpZXMgYnkgaW5kZXggZHVyaW5nIGRlc2VyaWFsaXphdGlvbi4KYWJzdHJhY3QgY2xhc3MgRW50aXR5TG9va3VwIHsKICAvLy8gUmV0dXJucyB0aGUgaW5kZXhlZCBsaWJyYXJ5IGNvcnJlc3BvbmRpbmcgdG8gW2luZGV4XS4KICBJbmRleGVkTGlicmFyeSBnZXRMaWJyYXJ5QnlJbmRleChpbnQgaW5kZXgpOwoKICAvLy8gUmV0dXJucyB0aGUgaW5kZXhlZCBjbGFzcyBjb3JyZXNwb25kaW5nIHRvIFtpbmRleF0uCiAgSW5kZXhlZENsYXNzIGdldENsYXNzQnlJbmRleChpbnQgaW5kZXgpOwoKICAvLy8gUmV0dXJucyB0aGUgaW5kZXhlZCB0eXBlZGVmIGNvcnJlc3BvbmRpbmcgdG8gW2luZGV4XS4KICBJbmRleGVkVHlwZWRlZiBnZXRUeXBlZGVmQnlJbmRleChpbnQgaW5kZXgpOwoKICAvLy8gUmV0dXJucyB0aGUgaW5kZXhlZCBtZW1iZXIgY29ycmVzcG9uZGluZyB0byBbaW5kZXhdLgogIEluZGV4ZWRNZW1iZXIgZ2V0TWVtYmVyQnlJbmRleChpbnQgaW5kZXgpOwoKICAvLy8gUmV0dXJucyB0aGUgaW5kZXhlZCB0eXBlIHZhcmlhYmxlIGNvcnJlc3BvbmRpbmcgdG8gW2luZGV4XS4KICBJbmRleGVkVHlwZVZhcmlhYmxlIGdldFR5cGVWYXJpYWJsZUJ5SW5kZXgoaW50IGluZGV4KTsKfQoKLy8vIERlY29kaW5nIHN0cmF0ZWd5IGZvciBlbnRpdHkgcmVmZXJlbmNlcy4KY2xhc3MgRW50aXR5UmVhZGVyIHsKICBjb25zdCBFbnRpdHlSZWFkZXIoKTsKCiAgSW5kZXhlZExpYnJhcnkgcmVhZExpYnJhcnlGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEVudGl0eUxvb2t1cCBlbnRpdHlMb29rdXApIHsKICAgIHJldHVybiBlbnRpdHlMb29rdXAuZ2V0TGlicmFyeUJ5SW5kZXgoc291cmNlLnJlYWRJbnQoKSk7CiAgfQoKICBJbmRleGVkQ2xhc3MgcmVhZENsYXNzRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBFbnRpdHlMb29rdXAgZW50aXR5TG9va3VwKSB7CiAgICByZXR1cm4gZW50aXR5TG9va3VwLmdldENsYXNzQnlJbmRleChzb3VyY2UucmVhZEludCgpKTsKICB9CgogIEluZGV4ZWRUeXBlZGVmIHJlYWRUeXBlZGVmRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBFbnRpdHlMb29rdXAgZW50aXR5TG9va3VwKSB7CiAgICByZXR1cm4gZW50aXR5TG9va3VwLmdldFR5cGVkZWZCeUluZGV4KHNvdXJjZS5yZWFkSW50KCkpOwogIH0KCiAgSW5kZXhlZE1lbWJlciByZWFkTWVtYmVyRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBFbnRpdHlMb29rdXAgZW50aXR5TG9va3VwKSB7CiAgICByZXR1cm4gZW50aXR5TG9va3VwLmdldE1lbWJlckJ5SW5kZXgoc291cmNlLnJlYWRJbnQoKSk7CiAgfQoKICBJbmRleGVkVHlwZVZhcmlhYmxlIHJlYWRUeXBlVmFyaWFibGVGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEVudGl0eUxvb2t1cCBlbnRpdHlMb29rdXApIHsKICAgIHJldHVybiBlbnRpdHlMb29rdXAuZ2V0VHlwZVZhcmlhYmxlQnlJbmRleChzb3VyY2UucmVhZEludCgpKTsKICB9Cn0KCi8vLyBFbmNvZGluZyBzdHJhdGVneSBmb3IgZW50aXR5IHJlZmVyZW5jZXMuCmNsYXNzIEVudGl0eVdyaXRlciB7CiAgY29uc3QgRW50aXR5V3JpdGVyKCk7CgogIHZvaWQgd3JpdGVMaWJyYXJ5VG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBJbmRleGVkTGlicmFyeSB2YWx1ZSkgewogICAgc2luay53cml0ZUludCh2YWx1ZS5saWJyYXJ5SW5kZXgpOwogIH0KCiAgdm9pZCB3cml0ZUNsYXNzVG9EYXRhU2luayhEYXRhU2luayBzaW5rLCBJbmRleGVkQ2xhc3MgdmFsdWUpIHsKICAgIHNpbmsud3JpdGVJbnQodmFsdWUuY2xhc3NJbmRleCk7CiAgfQoKICB2b2lkIHdyaXRlVHlwZWRlZlRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgSW5kZXhlZFR5cGVkZWYgdmFsdWUpIHsKICAgIHNpbmsud3JpdGVJbnQodmFsdWUudHlwZWRlZkluZGV4KTsKICB9CgogIHZvaWQgd3JpdGVNZW1iZXJUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIEluZGV4ZWRNZW1iZXIgdmFsdWUpIHsKICAgIHNpbmsud3JpdGVJbnQodmFsdWUubWVtYmVySW5kZXgpOwogIH0KCiAgdm9pZCB3cml0ZVR5cGVWYXJpYWJsZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaywgSW5kZXhlZFR5cGVWYXJpYWJsZSB2YWx1ZSkgewogICAgc2luay53cml0ZUludCh2YWx1ZS50eXBlVmFyaWFibGVJbmRleCk7CiAgfQp9CgovLy8gSW50ZXJmYWNlIHVzZWQgZm9yIGxvb2tpbmcgdXAgbG9jYWxzIGJ5IGluZGV4IGR1cmluZyBkZXNlcmlhbGl6YXRpb24uCmFic3RyYWN0IGNsYXNzIExvY2FsTG9va3VwIHsKICBMb2NhbCBnZXRMb2NhbEJ5SW5kZXgoTWVtYmVyRW50aXR5IG1lbWJlckNvbnRleHQsIGludCBpbmRleCk7Cn0KCi8vLyBJbnRlcmZhY2UgdXNlZCBmb3IgcmVhZGluZyBjb2RlZ2VuIG9ubHkgZGF0YSBkdXJpbmcgZGVzZXJpYWxpemF0aW9uLgphYnN0cmFjdCBjbGFzcyBDb2RlZ2VuUmVhZGVyIHsKICBBYnN0cmFjdFZhbHVlIHJlYWRBYnN0cmFjdFZhbHVlKERhdGFTb3VyY2Ugc291cmNlKTsKICBPdXRwdXRVbml0IHJlYWRPdXRwdXRVbml0UmVmZXJlbmNlKERhdGFTb3VyY2Ugc291cmNlKTsKICBqcy5Ob2RlIHJlYWRKc05vZGUoRGF0YVNvdXJjZSBzb3VyY2UpOwp9CgovLy8gSW50ZXJmYWNlIHVzZWQgZm9yIHdyaXRpbmcgY29kZWdlbiBvbmx5IGRhdGEgZHVyaW5nIHNlcmlhbGl6YXRpb24uCmFic3RyYWN0IGNsYXNzIENvZGVnZW5Xcml0ZXIgewogIHZvaWQgd3JpdGVBYnN0cmFjdFZhbHVlKERhdGFTaW5rIHNpbmssIEFic3RyYWN0VmFsdWUgdmFsdWUpOwogIHZvaWQgd3JpdGVPdXRwdXRVbml0UmVmZXJlbmNlKERhdGFTaW5rIHNpbmssIE91dHB1dFVuaXQgdmFsdWUpOwogIHZvaWQgd3JpdGVKc05vZGUoRGF0YVNpbmsgc2luaywganMuTm9kZSBub2RlKTsKfQqDpQBOTjwBFxooMzs5Gj8jICokIyExHyYeIyIBGx0ZGxUZFBoZGwEhGjQGThIBOgY/EAEvBk8xGgEtBk8xGAFORDEBTUsGPCQ2AU9RBjwdOSABNB4BSBwBTAY8IiIBMyIBRgY8JSgBTigGPCBHAVBPHAY8Ij4gATcyTx8hATAcAU8rAU0nAU8rAU4pAU5CBjwkTgFPSzwGPCZFIAEzIQFJPwFMFkUBTCkBTBkGPCcvAUxCBjwiTgFNSzwGPCRFIAFQGTIBTy0GPDA4AVBNDgY8Kz0gAVFQSgY8LU4gAVAMNwFQDEIGPCtCIAFLJz8BTCgGPCJLAU8vRgFQMAY8JjggATgqAUsrAUsZBjwmMQFNSzwGPCNGIAFJJwFJGQY8JC0BTD8GPCBMAVBGPAY8IUIgAUsrAUopAUoZBjwlLwFNPwY8IE0BUEY8BjwiGkYgAVE1AUEgAUEZBjwkJgFQMwY8H0UBTFAtBjwhPCABNSsBSDEBTCgGPCJQAU1KLQY8JEcgAS8nAT4GSzslATMoAUYuAUooBjwgTQFFSi0GPCJEIAE0BkwwAUcGTDMBMgZMIwFFBkwpAU4cMgFOHDQBRkoPNAIBIxwvBk8xGgEtBk8xGAFMNUEBSjk4AVEcMgFILzUBQyw0AU4wNgFGSw8xAVBQGgFRNAY8Ix8BTDsGPBw5ATMTAUcRAUsOBjwhFwEyFwFFBjwkHQFPOwY8HzcBSk86BjwhRQFQBkwiBh8NMAYhAS8RAUggAUYcAUYgAUceAU9PBjwjOCIBUE86BjwlPSIBNhYBRDQBTw46AUUeAVAOJAFNTwY8IUsBTk86BjwjPSIBTxMnAU4nLQFNTCAGPCo5IgFOSlELBjwsRiIBTywBT1EMBjwqTAFPHDIBTzMGPCE7AUotOQFQPgY8JUIBMR8BRSABTw4mPiIBQxwBTQ4iAUtPBjwfSQFMTzoGPCA6IgFFIAFEHgFODiQBS08GPB9KAUxPOgY8IU8iAUsqAToVAU0bAUVMBjweQgFPSzIGPCBQATQgAUcmATIcAUEGSzoaAVE7BjwhTQFMTzoGPCM/IgEsHQE/IwFJOwY8Hz0BRE86BjwhSwE2BkwlAUIGTCgBNQZMGAFIBkweAgFMHjwvATorATwvATstAUI5AgEtFRgBLDY9BAEoNjsEASw2PQQBKjY8BAE2NkIEAgEtFRgBRScEAUElBAFFJwQBQyYEAU8sBAIBSh1AAgFJHzY5KQIBRx8/QjECATVwYWNrYWdlOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydD5zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zZXJpYWxpemF0aW9uL2Fic3RyYWN0X3NpbmsuZGFydMAASysvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiAnc2VyaWFsaXphdGlvbi5kYXJ0JzsKCi8vLyBCYXNlIGltcGxlbWVudGF0aW9uIG9mIFtEYXRhU2lua10gdXNpbmcgW0RhdGFTaW5rTWl4aW5dIHRvIGltcGxlbWVudAovLy8gY29udmVuaWVuY2UgbWV0aG9kcy4KYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3REYXRhU2luayBleHRlbmRzIERhdGFTaW5rTWl4aW4gaW1wbGVtZW50cyBEYXRhU2luayB7CiAgLy8vIElmIGB0cnVlYCwgc2VyaWFsaXphdGlvbiBvZiBldmVyeSBkYXRhIGtpbmQgaXMgcHJlY2VkZWQgYnkgYSBbRGF0YUtpbmRdCiAgLy8vIHZhbHVlLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgZm9yIGRlYnVnZ2luZyBkYXRhIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHNlcmlhbGl6YXRpb24KICAvLy8gYW5kIGRlc2VyaWFsaXphdGlvbi4KICBmaW5hbCBib29sIHVzZURhdGFLaW5kczsKCiAgLy8vIFZpc2l0b3IgdXNlZCBmb3Igc2VyaWFsaXppbmcgW0RhcnRUeXBlXXMuCiAgRGFydFR5cGVXcml0ZXIgX2RhcnRUeXBlV3JpdGVyOwoKICAvLy8gVmlzaXRvciB1c2VkIGZvciBzZXJpYWxpemluZyBbaXIuRGFydFR5cGVdcy4KICBEYXJ0VHlwZU5vZGVXcml0ZXIgX2RhcnRUeXBlTm9kZVdyaXRlcjsKCiAgLy8vIFN0YWNrIG9mIHRhZ3MgdXNlZCB3aGVuIFt1c2VEYXRhS2luZHNdIGlzIGB0cnVlYCB0byBoZWxwIGRlYnVnZ2luZyBzZWN0aW9uCiAgLy8vIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbi4KICBMaXN0PFN0cmluZz4gX3RhZ3M7CgogIC8vLyBNYXAgb2YgW19NZW1iZXJEYXRhXSBvYmplY3QgZm9yIHNlcmlhbGl6ZWQga2VybmVsIG1lbWJlciBub2Rlcy4KICBNYXA8aXIuTWVtYmVyLCBfTWVtYmVyRGF0YT4gX21lbWJlckRhdGEgPSB7fTsKCiAgSW5kZXhlZFNpbms8U3RyaW5nPiBfc3RyaW5nSW5kZXg7CiAgSW5kZXhlZFNpbms8VXJpPiBfdXJpSW5kZXg7CiAgSW5kZXhlZFNpbms8aXIuTWVtYmVyPiBfbWVtYmVyTm9kZUluZGV4OwogIEluZGV4ZWRTaW5rPEltcG9ydEVudGl0eT4gX2ltcG9ydEluZGV4OwogIEluZGV4ZWRTaW5rPENvbnN0YW50VmFsdWU+IF9jb25zdGFudEluZGV4OwoKICBNYXA8VHlwZSwgSW5kZXhlZFNpbms+IF9nZW5lcmFsQ2FjaGVzID0ge307CgogIEVudGl0eVdyaXRlciBfZW50aXR5V3JpdGVyID0gY29uc3QgRW50aXR5V3JpdGVyKCk7CiAgQ29kZWdlbldyaXRlciBfY29kZWdlbldyaXRlcjsKCiAgZmluYWwgTWFwPFN0cmluZywgaW50PiB0YWdGcmVxdWVuY3lNYXA7CgogIGlyLk1lbWJlciBfY3VycmVudE1lbWJlckNvbnRleHQ7CiAgX01lbWJlckRhdGEgX2N1cnJlbnRNZW1iZXJEYXRhOwoKICBBYnN0cmFjdERhdGFTaW5rKHt0aGlzLnVzZURhdGFLaW5kczogZmFsc2UsIHRoaXMudGFnRnJlcXVlbmN5TWFwfSkgewogICAgX2RhcnRUeXBlV3JpdGVyID0gbmV3IERhcnRUeXBlV3JpdGVyKHRoaXMpOwogICAgX2RhcnRUeXBlTm9kZVdyaXRlciA9IG5ldyBEYXJ0VHlwZU5vZGVXcml0ZXIodGhpcyk7CiAgICBfc3RyaW5nSW5kZXggPSBuZXcgSW5kZXhlZFNpbms8U3RyaW5nPih0aGlzKTsKICAgIF91cmlJbmRleCA9IG5ldyBJbmRleGVkU2luazxVcmk+KHRoaXMpOwogICAgX21lbWJlck5vZGVJbmRleCA9IG5ldyBJbmRleGVkU2luazxpci5NZW1iZXI+KHRoaXMpOwogICAgX2ltcG9ydEluZGV4ID0gbmV3IEluZGV4ZWRTaW5rPEltcG9ydEVudGl0eT4odGhpcyk7CiAgICBfY29uc3RhbnRJbmRleCA9IG5ldyBJbmRleGVkU2luazxDb25zdGFudFZhbHVlPih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW4oU3RyaW5nIHRhZykgewogICAgaWYgKHRhZ0ZyZXF1ZW5jeU1hcCAhPSBudWxsKSB7CiAgICAgIHRhZ0ZyZXF1ZW5jeU1hcFt0YWddID8/PSAwOwogICAgICB0YWdGcmVxdWVuY3lNYXBbdGFnXSsrOwogICAgfQogICAgaWYgKHVzZURhdGFLaW5kcykgewogICAgICBfdGFncyA/Pz0gPFN0cmluZz5bXTsKICAgICAgX3RhZ3MuYWRkKHRhZyk7CiAgICAgIF9iZWdpbih0YWcpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmQoT2JqZWN0IHRhZykgewogICAgaWYgKHVzZURhdGFLaW5kcykgewogICAgICBfZW5kKHRhZyk7CgogICAgICBTdHJpbmcgZXhpc3RpbmdUYWcgPSBfdGFncy5yZW1vdmVMYXN0KCk7CiAgICAgIGFzc2VydChleGlzdGluZ1RhZyA9PSB0YWcsCiAgICAgICAgICAiVW5leHBlY3RlZCB0YWcgZW5kLiBFeHBlY3RlZCAkZXhpc3RpbmdUYWcsIGZvdW5kICR0YWcuIik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGluTWVtYmVyQ29udGV4dChpci5NZW1iZXIgY29udGV4dCwgdm9pZCBmKCkpIHsKICAgIGlyLk1lbWJlciBvbGRNZW1iZXJDb250ZXh0ID0gX2N1cnJlbnRNZW1iZXJDb250ZXh0OwogICAgX01lbWJlckRhdGEgb2xkTWVtYmVyRGF0YSA9IF9jdXJyZW50TWVtYmVyRGF0YTsKICAgIF9jdXJyZW50TWVtYmVyQ29udGV4dCA9IGNvbnRleHQ7CiAgICBfY3VycmVudE1lbWJlckRhdGEgPSBudWxsOwogICAgZigpOwogICAgX2N1cnJlbnRNZW1iZXJEYXRhID0gb2xkTWVtYmVyRGF0YTsKICAgIF9jdXJyZW50TWVtYmVyQ29udGV4dCA9IG9sZE1lbWJlckNvbnRleHQ7CiAgfQoKICBfTWVtYmVyRGF0YSBnZXQgY3VycmVudE1lbWJlckRhdGEgewogICAgYXNzZXJ0KF9jdXJyZW50TWVtYmVyQ29udGV4dCAhPSBudWxsLAogICAgICAgICJEYXRhU2luayBoYXMgbm8gY3VycmVudCBtZW1iZXIgY29udGV4dC4iKTsKICAgIHJldHVybiBfY3VycmVudE1lbWJlckRhdGEgPz89IF9tZW1iZXJEYXRhW19jdXJyZW50TWVtYmVyQ29udGV4dF0gPz89CiAgICAgICAgbmV3IF9NZW1iZXJEYXRhKF9jdXJyZW50TWVtYmVyQ29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQ2FjaGVkPEU+KEUgdmFsdWUsIHZvaWQgZihFIHZhbHVlKSkgewogICAgSW5kZXhlZFNpbmsgc2luayA9IF9nZW5lcmFsQ2FjaGVzW0VdID8/PSBuZXcgSW5kZXhlZFNpbms8RT4odGhpcyk7CiAgICBzaW5rLndyaXRlKHZhbHVlLCAodikgPT4gZih2KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlU291cmNlU3BhbihTb3VyY2VTcGFuIHZhbHVlKSB7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC5zb3VyY2VTcGFuKTsKICAgIF93cml0ZVVyaSh2YWx1ZS51cmkpOwogICAgX3dyaXRlSW50SW50ZXJuYWwodmFsdWUuYmVnaW4pOwogICAgX3dyaXRlSW50SW50ZXJuYWwodmFsdWUuZW5kKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVEYXJ0VHlwZShEYXJ0VHlwZSB2YWx1ZSwge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLmRhcnRUeXBlKTsKICAgIF93cml0ZURhcnRUeXBlKHZhbHVlLCBbXSwgYWxsb3dOdWxsOiBhbGxvd051bGwpOwogIH0KCiAgdm9pZCBfd3JpdGVEYXJ0VHlwZSgKICAgICAgRGFydFR5cGUgdmFsdWUsIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcywKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgIGlmICghYWxsb3dOdWxsKSB7CiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIk1pc3NpbmcgRGFydFR5cGUgaXMgbm90IGFsbG93ZWQuIik7CiAgICAgIH0KICAgICAgd3JpdGVFbnVtKERhcnRUeXBlS2luZC5ub25lKTsKICAgIH0gZWxzZSB7CiAgICAgIF9kYXJ0VHlwZVdyaXRlci52aXNpdCh2YWx1ZSwgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVEYXJ0VHlwZU5vZGUoaXIuRGFydFR5cGUgdmFsdWUsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC5kYXJ0VHlwZU5vZGUpOwogICAgX3dyaXRlRGFydFR5cGVOb2RlKHZhbHVlLCBbXSwgYWxsb3dOdWxsOiBhbGxvd051bGwpOwogIH0KCiAgdm9pZCBfd3JpdGVEYXJ0VHlwZU5vZGUoCiAgICAgIGlyLkRhcnRUeXBlIHZhbHVlLCBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcywKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7CiAgICAgIGlmICghYWxsb3dOdWxsKSB7CiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIk1pc3NpbmcgaXIuRGFydFR5cGUgbm9kZSBpcyBub3QgYWxsb3dlZC4iKTsKICAgICAgfQogICAgICB3cml0ZUVudW0oRGFydFR5cGVOb2RlS2luZC5ub25lKTsKICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlLmFjY2VwdDEoX2RhcnRUeXBlTm9kZVdyaXRlciwgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVNZW1iZXJOb2RlKGlyLk1lbWJlciB2YWx1ZSkgewogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQubWVtYmVyTm9kZSk7CiAgICBfd3JpdGVNZW1iZXJOb2RlKHZhbHVlKTsKICB9CgogIHZvaWQgX3dyaXRlTWVtYmVyTm9kZShpci5NZW1iZXIgdmFsdWUpIHsKICAgIF9tZW1iZXJOb2RlSW5kZXgud3JpdGUodmFsdWUsIF93cml0ZU1lbWJlck5vZGVJbnRlcm5hbCk7CiAgfQoKICB2b2lkIF93cml0ZU1lbWJlck5vZGVJbnRlcm5hbChpci5NZW1iZXIgdmFsdWUpIHsKICAgIGlyLkNsYXNzIGNscyA9IHZhbHVlLmVuY2xvc2luZ0NsYXNzOwogICAgaWYgKGNscyAhPSBudWxsKSB7CiAgICAgIF93cml0ZUVudW1JbnRlcm5hbChNZW1iZXJDb250ZXh0S2luZC5jbHMpOwogICAgICBfd3JpdGVDbGFzc05vZGUoY2xzKTsKICAgICAgX3dyaXRlU3RyaW5nKF9jb21wdXRlTWVtYmVyTmFtZSh2YWx1ZSkpOwogICAgfSBlbHNlIHsKICAgICAgX3dyaXRlRW51bUludGVybmFsKE1lbWJlckNvbnRleHRLaW5kLmxpYnJhcnkpOwogICAgICBfd3JpdGVMaWJyYXJ5Tm9kZSh2YWx1ZS5lbmNsb3NpbmdMaWJyYXJ5KTsKICAgICAgX3dyaXRlU3RyaW5nKF9jb21wdXRlTWVtYmVyTmFtZSh2YWx1ZSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUNsYXNzTm9kZShpci5DbGFzcyB2YWx1ZSkgewogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQuY2xhc3NOb2RlKTsKICAgIF93cml0ZUNsYXNzTm9kZSh2YWx1ZSk7CiAgfQoKICB2b2lkIF93cml0ZUNsYXNzTm9kZShpci5DbGFzcyB2YWx1ZSkgewogICAgX3dyaXRlTGlicmFyeU5vZGUodmFsdWUuZW5jbG9zaW5nTGlicmFyeSk7CiAgICBfd3JpdGVTdHJpbmcodmFsdWUubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVHlwZWRlZk5vZGUoaXIuVHlwZWRlZiB2YWx1ZSkgewogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQudHlwZWRlZk5vZGUpOwogICAgX3dyaXRlVHlwZWRlZk5vZGUodmFsdWUpOwogIH0KCiAgdm9pZCBfd3JpdGVUeXBlZGVmTm9kZShpci5UeXBlZGVmIHZhbHVlKSB7CiAgICBfd3JpdGVMaWJyYXJ5Tm9kZSh2YWx1ZS5lbmNsb3NpbmdMaWJyYXJ5KTsKICAgIF93cml0ZVN0cmluZyh2YWx1ZS5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVMaWJyYXJ5Tm9kZShpci5MaWJyYXJ5IHZhbHVlKSB7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC5saWJyYXJ5Tm9kZSk7CiAgICBfd3JpdGVMaWJyYXJ5Tm9kZSh2YWx1ZSk7CiAgfQoKICB2b2lkIF93cml0ZUxpYnJhcnlOb2RlKGlyLkxpYnJhcnkgdmFsdWUpIHsKICAgIF93cml0ZVVyaSh2YWx1ZS5pbXBvcnRVcmkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUVudW0oZHluYW1pYyB2YWx1ZSkgewogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQuZW51bVZhbHVlKTsKICAgIF93cml0ZUVudW1JbnRlcm5hbCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQm9vbChib29sIHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC5ib29sKTsKICAgIF93cml0ZUJvb2wodmFsdWUpOwogIH0KCiAgdm9pZCBfd3JpdGVCb29sKGJvb2wgdmFsdWUpIHsKICAgIF93cml0ZUludEludGVybmFsKHZhbHVlID8gMSA6IDApOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVVyaShVcmkgdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLnVyaSk7CiAgICBfd3JpdGVVcmkodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVN0cmluZyhTdHJpbmcgdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICAgIF93cml0ZURhdGFLaW5kKERhdGFLaW5kLnN0cmluZyk7CiAgICBfd3JpdGVTdHJpbmcodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUludChpbnQgdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICAgIGFzc2VydCh2YWx1ZSA+PSAwICYmIHZhbHVlID4+IDMwID09IDApOwogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQudWludDMwKTsKICAgIF93cml0ZUludEludGVybmFsKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUcmVlTm9kZShpci5UcmVlTm9kZSB2YWx1ZSkgewogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQudHJlZU5vZGUpOwogICAgX3dyaXRlVHJlZU5vZGUodmFsdWUsIG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRyZWVOb2RlSW5Db250ZXh0KGlyLlRyZWVOb2RlIHZhbHVlKSB7CiAgICB3cml0ZVRyZWVOb2RlSW5Db250ZXh0SW50ZXJuYWwodmFsdWUsIGN1cnJlbnRNZW1iZXJEYXRhKTsKICB9CgogIHZvaWQgd3JpdGVUcmVlTm9kZUluQ29udGV4dEludGVybmFsKAogICAgICBpci5UcmVlTm9kZSB2YWx1ZSwgX01lbWJlckRhdGEgbWVtYmVyRGF0YSkgewogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQudHJlZU5vZGUpOwogICAgX3dyaXRlVHJlZU5vZGUodmFsdWUsIG1lbWJlckRhdGEpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRyZWVOb2RlT3JOdWxsSW5Db250ZXh0KGlyLlRyZWVOb2RlIHZhbHVlKSB7CiAgICB3cml0ZUJvb2wodmFsdWUgIT0gbnVsbCk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB3cml0ZVRyZWVOb2RlSW5Db250ZXh0SW50ZXJuYWwodmFsdWUsIGN1cnJlbnRNZW1iZXJEYXRhKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUcmVlTm9kZXNJbkNvbnRleHQoSXRlcmFibGU8aXIuVHJlZU5vZGU+IHZhbHVlcywKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludCh2YWx1ZXMubGVuZ3RoKTsKICAgICAgZm9yIChpci5UcmVlTm9kZSB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgICB3cml0ZVRyZWVOb2RlSW5Db250ZXh0SW50ZXJuYWwodmFsdWUsIGN1cnJlbnRNZW1iZXJEYXRhKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRyZWVOb2RlTWFwSW5Db250ZXh0PFY+KE1hcDxpci5UcmVlTm9kZSwgVj4gbWFwLCB2b2lkIGYoViB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAobWFwID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQobWFwLmxlbmd0aCk7CiAgICAgIG1hcC5mb3JFYWNoKChpci5UcmVlTm9kZSBrZXksIFYgdmFsdWUpIHsKICAgICAgICB3cml0ZVRyZWVOb2RlSW5Db250ZXh0SW50ZXJuYWwoa2V5LCBjdXJyZW50TWVtYmVyRGF0YSk7CiAgICAgICAgZih2YWx1ZSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgX01lbWJlckRhdGEgX2dldE1lbWJlckRhdGEoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgaXIuVHJlZU5vZGUgbWVtYmVyID0gbm9kZTsKICAgIHdoaWxlIChtZW1iZXIgaXMhIGlyLk1lbWJlcikgewogICAgICBpZiAobWVtYmVyID09IG51bGwpIHsKICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiTm8gZW5jbG9zaW5nIG1lbWJlciBvZiBUcmVlTm9kZSAiCiAgICAgICAgICAgICIkbm9kZSAoJHtub2RlLnJ1bnRpbWVUeXBlfSkiKTsKICAgICAgfQogICAgICBtZW1iZXIgPSBtZW1iZXIucGFyZW50OwogICAgfQogICAgX3dyaXRlTWVtYmVyTm9kZShtZW1iZXIpOwogICAgcmV0dXJuIF9tZW1iZXJEYXRhW21lbWJlcl0gPz89IG5ldyBfTWVtYmVyRGF0YShtZW1iZXIpOwogIH0KCiAgdm9pZCBfd3JpdGVUcmVlTm9kZShpci5UcmVlTm9kZSB2YWx1ZSwgX01lbWJlckRhdGEgbWVtYmVyRGF0YSkgewogICAgaWYgKHZhbHVlIGlzIGlyLkNsYXNzKSB7CiAgICAgIF93cml0ZUVudW1JbnRlcm5hbChfVHJlZU5vZGVLaW5kLmNscyk7CiAgICAgIF93cml0ZUNsYXNzTm9kZSh2YWx1ZSk7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIGlyLk1lbWJlcikgewogICAgICBfd3JpdGVFbnVtSW50ZXJuYWwoX1RyZWVOb2RlS2luZC5tZW1iZXIpOwogICAgICBfd3JpdGVNZW1iZXJOb2RlKHZhbHVlKTsKICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiAmJgogICAgICAgIHZhbHVlLnBhcmVudCBpcyBpci5GdW5jdGlvbkRlY2xhcmF0aW9uKSB7CiAgICAgIF93cml0ZUVudW1JbnRlcm5hbChfVHJlZU5vZGVLaW5kLmZ1bmN0aW9uRGVjbGFyYXRpb25WYXJpYWJsZSk7CiAgICAgIF93cml0ZVRyZWVOb2RlKHZhbHVlLnBhcmVudCwgbWVtYmVyRGF0YSk7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIGlyLkZ1bmN0aW9uTm9kZSkgewogICAgICBfd3JpdGVFbnVtSW50ZXJuYWwoX1RyZWVOb2RlS2luZC5mdW5jdGlvbk5vZGUpOwogICAgICBfd3JpdGVGdW5jdGlvbk5vZGUodmFsdWUsIG1lbWJlckRhdGEpOwogICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBpci5UeXBlUGFyYW1ldGVyKSB7CiAgICAgIF93cml0ZUVudW1JbnRlcm5hbChfVHJlZU5vZGVLaW5kLnR5cGVQYXJhbWV0ZXIpOwogICAgICBfd3JpdGVUeXBlUGFyYW1ldGVyKHZhbHVlLCBtZW1iZXJEYXRhKTsKICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgQ29uc3RhbnRSZWZlcmVuY2UpIHsKICAgICAgX3dyaXRlRW51bUludGVybmFsKF9UcmVlTm9kZUtpbmQuY29uc3RhbnQpOwogICAgICBtZW1iZXJEYXRhID8/PSBfZ2V0TWVtYmVyRGF0YSh2YWx1ZS5leHByZXNzaW9uKTsKICAgICAgX3dyaXRlVHJlZU5vZGUodmFsdWUuZXhwcmVzc2lvbiwgbWVtYmVyRGF0YSk7CiAgICAgIGludCBpbmRleCA9CiAgICAgICAgICBtZW1iZXJEYXRhLmdldEluZGV4QnlDb25zdGFudCh2YWx1ZS5leHByZXNzaW9uLCB2YWx1ZS5jb25zdGFudCk7CiAgICAgIF93cml0ZUludEludGVybmFsKGluZGV4KTsKICAgIH0gZWxzZSB7CiAgICAgIF93cml0ZUVudW1JbnRlcm5hbChfVHJlZU5vZGVLaW5kLm5vZGUpOwogICAgICBtZW1iZXJEYXRhID8/PSBfZ2V0TWVtYmVyRGF0YSh2YWx1ZSk7CiAgICAgIGludCBpbmRleCA9IG1lbWJlckRhdGEuZ2V0SW5kZXhCeVRyZWVOb2RlKHZhbHVlKTsKICAgICAgYXNzZXJ0KAogICAgICAgICAgaW5kZXggIT0gbnVsbCwKICAgICAgICAgICJObyBUcmVlTm9kZSBpbmRleCBmb3VuZCBmb3IgJHt2YWx1ZS5ydW50aW1lVHlwZX0gIgogICAgICAgICAgImZvdW5kIGluICR7bWVtYmVyRGF0YX0uIik7CiAgICAgIF93cml0ZUludEludGVybmFsKGluZGV4KTsKICAgIH0KICB9CgogIHZvaWQgX3dyaXRlRnVuY3Rpb25Ob2RlKGlyLkZ1bmN0aW9uTm9kZSB2YWx1ZSwgX01lbWJlckRhdGEgbWVtYmVyRGF0YSkgewogICAgaXIuVHJlZU5vZGUgcGFyZW50ID0gdmFsdWUucGFyZW50OwogICAgaWYgKHBhcmVudCBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgX3dyaXRlRW51bUludGVybmFsKF9GdW5jdGlvbk5vZGVLaW5kLnByb2NlZHVyZSk7CiAgICAgIF93cml0ZU1lbWJlck5vZGUocGFyZW50KTsKICAgIH0gZWxzZSBpZiAocGFyZW50IGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgIF93cml0ZUVudW1JbnRlcm5hbChfRnVuY3Rpb25Ob2RlS2luZC5jb25zdHJ1Y3Rvcik7CiAgICAgIF93cml0ZU1lbWJlck5vZGUocGFyZW50KTsKICAgIH0gZWxzZSBpZiAocGFyZW50IGlzIGlyLkZ1bmN0aW9uRXhwcmVzc2lvbikgewogICAgICBfd3JpdGVFbnVtSW50ZXJuYWwoX0Z1bmN0aW9uTm9kZUtpbmQuZnVuY3Rpb25FeHByZXNzaW9uKTsKICAgICAgX3dyaXRlVHJlZU5vZGUocGFyZW50LCBtZW1iZXJEYXRhKTsKICAgIH0gZWxzZSBpZiAocGFyZW50IGlzIGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24pIHsKICAgICAgX3dyaXRlRW51bUludGVybmFsKF9GdW5jdGlvbk5vZGVLaW5kLmZ1bmN0aW9uRGVjbGFyYXRpb24pOwogICAgICBfd3JpdGVUcmVlTm9kZShwYXJlbnQsIG1lbWJlckRhdGEpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiVW5zdXBwb3J0ZWQgRnVuY3Rpb25Ob2RlIHBhcmVudCAke3BhcmVudC5ydW50aW1lVHlwZX0iKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUeXBlUGFyYW1ldGVyTm9kZShpci5UeXBlUGFyYW1ldGVyIHZhbHVlKSB7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC50eXBlUGFyYW1ldGVyTm9kZSk7CiAgICBfd3JpdGVUeXBlUGFyYW1ldGVyKHZhbHVlLCBudWxsKTsKICB9CgogIHZvaWQgX3dyaXRlVHlwZVBhcmFtZXRlcihpci5UeXBlUGFyYW1ldGVyIHZhbHVlLCBfTWVtYmVyRGF0YSBtZW1iZXJEYXRhKSB7CiAgICBpci5UcmVlTm9kZSBwYXJlbnQgPSB2YWx1ZS5wYXJlbnQ7CiAgICBpZiAocGFyZW50IGlzIGlyLkNsYXNzKSB7CiAgICAgIF93cml0ZUVudW1JbnRlcm5hbChfVHlwZVBhcmFtZXRlcktpbmQuY2xzKTsKICAgICAgX3dyaXRlQ2xhc3NOb2RlKHBhcmVudCk7CiAgICAgIF93cml0ZUludEludGVybmFsKHBhcmVudC50eXBlUGFyYW1ldGVycy5pbmRleE9mKHZhbHVlKSk7CiAgICB9IGVsc2UgaWYgKHBhcmVudCBpcyBpci5GdW5jdGlvbk5vZGUpIHsKICAgICAgX3dyaXRlRW51bUludGVybmFsKF9UeXBlUGFyYW1ldGVyS2luZC5mdW5jdGlvbk5vZGUpOwogICAgICBfd3JpdGVGdW5jdGlvbk5vZGUocGFyZW50LCBtZW1iZXJEYXRhKTsKICAgICAgX3dyaXRlSW50SW50ZXJuYWwocGFyZW50LnR5cGVQYXJhbWV0ZXJzLmluZGV4T2YodmFsdWUpKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIlVuc3VwcG9ydGVkIFR5cGVQYXJhbWV0ZXIgcGFyZW50ICR7cGFyZW50LnJ1bnRpbWVUeXBlfSIpOwogICAgfQogIH0KCiAgdm9pZCBfd3JpdGVEYXRhS2luZChEYXRhS2luZCBraW5kKSB7CiAgICBpZiAodXNlRGF0YUtpbmRzKSBfd3JpdGVFbnVtSW50ZXJuYWwoa2luZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTGlicmFyeShJbmRleGVkTGlicmFyeSB2YWx1ZSkgewogICAgX2VudGl0eVdyaXRlci53cml0ZUxpYnJhcnlUb0RhdGFTaW5rKHRoaXMsIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVDbGFzcyhJbmRleGVkQ2xhc3MgdmFsdWUpIHsKICAgIF9lbnRpdHlXcml0ZXIud3JpdGVDbGFzc1RvRGF0YVNpbmsodGhpcywgdmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVR5cGVkZWYoSW5kZXhlZFR5cGVkZWYgdmFsdWUpIHsKICAgIF9lbnRpdHlXcml0ZXIud3JpdGVUeXBlZGVmVG9EYXRhU2luayh0aGlzLCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTWVtYmVyKEluZGV4ZWRNZW1iZXIgdmFsdWUpIHsKICAgIF9lbnRpdHlXcml0ZXIud3JpdGVNZW1iZXJUb0RhdGFTaW5rKHRoaXMsIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUeXBlVmFyaWFibGUoSW5kZXhlZFR5cGVWYXJpYWJsZSB2YWx1ZSkgewogICAgX2VudGl0eVdyaXRlci53cml0ZVR5cGVWYXJpYWJsZVRvRGF0YVNpbmsodGhpcywgdmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUxvY2FsKExvY2FsIGxvY2FsKSB7CiAgICBpZiAobG9jYWwgaXMgSkxvY2FsKSB7CiAgICAgIHdyaXRlRW51bShMb2NhbEtpbmQuakxvY2FsKTsKICAgICAgd3JpdGVNZW1iZXIobG9jYWwubWVtYmVyQ29udGV4dCk7CiAgICAgIHdyaXRlSW50KGxvY2FsLmxvY2FsSW5kZXgpOwogICAgfSBlbHNlIGlmIChsb2NhbCBpcyBUaGlzTG9jYWwpIHsKICAgICAgd3JpdGVFbnVtKExvY2FsS2luZC50aGlzTG9jYWwpOwogICAgICB3cml0ZUNsYXNzKGxvY2FsLmVuY2xvc2luZ0NsYXNzKTsKICAgIH0gZWxzZSBpZiAobG9jYWwgaXMgQm94TG9jYWwpIHsKICAgICAgd3JpdGVFbnVtKExvY2FsS2luZC5ib3hMb2NhbCk7CiAgICAgIHdyaXRlQ2xhc3MobG9jYWwuY29udGFpbmVyKTsKICAgIH0gZWxzZSBpZiAobG9jYWwgaXMgQW5vbnltb3VzQ2xvc3VyZUxvY2FsKSB7CiAgICAgIHdyaXRlRW51bShMb2NhbEtpbmQuYW5vbnltb3VzQ2xvc3VyZUxvY2FsKTsKICAgICAgd3JpdGVDbGFzcyhsb2NhbC5jbG9zdXJlQ2xhc3MpOwogICAgfSBlbHNlIGlmIChsb2NhbCBpcyBUeXBlVmFyaWFibGVMb2NhbCkgewogICAgICB3cml0ZUVudW0oTG9jYWxLaW5kLnR5cGVWYXJpYWJsZUxvY2FsKTsKICAgICAgd3JpdGVEYXJ0VHlwZShsb2NhbC50eXBlVmFyaWFibGUpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuc3VwcG9ydGVkIGxvY2FsICR7bG9jYWwucnVudGltZVR5cGV9Iik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSB2YWx1ZSkgewogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQuY29uc3RhbnQpOwogICAgX3dyaXRlQ29uc3RhbnQodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZURvdWJsZVZhbHVlKGRvdWJsZSB2YWx1ZSkgewogICAgX3dyaXRlRGF0YUtpbmQoRGF0YUtpbmQuZG91YmxlKTsKICAgIF93cml0ZURvdWJsZVZhbHVlKHZhbHVlKTsKICB9CgogIHZvaWQgX3dyaXRlRG91YmxlVmFsdWUoZG91YmxlIHZhbHVlKSB7CiAgICBCeXRlRGF0YSBkYXRhID0gbmV3IEJ5dGVEYXRhKDgpOwogICAgZGF0YS5zZXRGbG9hdDY0KDAsIHZhbHVlKTsKICAgIHdyaXRlSW50KGRhdGEuZ2V0VWludDE2KDApKTsKICAgIHdyaXRlSW50KGRhdGEuZ2V0VWludDE2KDIpKTsKICAgIHdyaXRlSW50KGRhdGEuZ2V0VWludDE2KDQpKTsKICAgIHdyaXRlSW50KGRhdGEuZ2V0VWludDE2KDYpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVJbnRlZ2VyVmFsdWUoaW50IHZhbHVlKSB7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC5pbnQpOwogICAgX3dyaXRlQmlnSW50KG5ldyBCaWdJbnQuZnJvbSh2YWx1ZSkpOwogIH0KCiAgdm9pZCBfd3JpdGVCaWdJbnQoQmlnSW50IHZhbHVlKSB7CiAgICB3cml0ZVN0cmluZyh2YWx1ZS50b1N0cmluZygpKTsKICB9CgogIHZvaWQgX3dyaXRlQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSB2YWx1ZSkgewogICAgX2NvbnN0YW50SW5kZXgud3JpdGUodmFsdWUsIF93cml0ZUNvbnN0YW50SW50ZXJuYWwpOwogIH0KCiAgdm9pZCBfd3JpdGVDb25zdGFudEludGVybmFsKENvbnN0YW50VmFsdWUgdmFsdWUpIHsKICAgIF93cml0ZUVudW1JbnRlcm5hbCh2YWx1ZS5raW5kKTsKICAgIHN3aXRjaCAodmFsdWUua2luZCkgewogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLkJPT0w6CiAgICAgICAgQm9vbENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSB2YWx1ZTsKICAgICAgICB3cml0ZUJvb2woY29uc3RhbnQuYm9vbFZhbHVlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5JTlQ6CiAgICAgICAgSW50Q29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IHZhbHVlOwogICAgICAgIF93cml0ZUJpZ0ludChjb25zdGFudC5pbnRWYWx1ZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuRE9VQkxFOgogICAgICAgIERvdWJsZUNvbnN0YW50VmFsdWUgY29uc3RhbnQgPSB2YWx1ZTsKICAgICAgICBfd3JpdGVEb3VibGVWYWx1ZShjb25zdGFudC5kb3VibGVWYWx1ZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuU1RSSU5HOgogICAgICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgY29uc3RhbnQgPSB2YWx1ZTsKICAgICAgICB3cml0ZVN0cmluZyhjb25zdGFudC5zdHJpbmdWYWx1ZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuTlVMTDoKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5GVU5DVElPTjoKICAgICAgICBGdW5jdGlvbkNvbnN0YW50VmFsdWUgY29uc3RhbnQgPSB2YWx1ZTsKICAgICAgICBJbmRleGVkRnVuY3Rpb24gZnVuY3Rpb24gPSBjb25zdGFudC5lbGVtZW50OwogICAgICAgIHdyaXRlTWVtYmVyKGZ1bmN0aW9uKTsKICAgICAgICB3cml0ZURhcnRUeXBlKGNvbnN0YW50LnR5cGUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLkxJU1Q6CiAgICAgICAgTGlzdENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSB2YWx1ZTsKICAgICAgICB3cml0ZURhcnRUeXBlKGNvbnN0YW50LnR5cGUpOwogICAgICAgIHdyaXRlQ29uc3RhbnRzKGNvbnN0YW50LmVudHJpZXMpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLlNFVDoKICAgICAgICBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdFNldENvbnN0YW50IGNvbnN0YW50ID0gdmFsdWU7CiAgICAgICAgd3JpdGVEYXJ0VHlwZShjb25zdGFudC50eXBlKTsKICAgICAgICB3cml0ZUNvbnN0YW50KGNvbnN0YW50LmVudHJpZXMpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLk1BUDoKICAgICAgICBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50IGNvbnN0YW50ID0gdmFsdWU7CiAgICAgICAgd3JpdGVEYXJ0VHlwZShjb25zdGFudC50eXBlKTsKICAgICAgICB3cml0ZUNvbnN0YW50KGNvbnN0YW50LmtleUxpc3QpOwogICAgICAgIHdyaXRlQ29uc3RhbnRzKGNvbnN0YW50LnZhbHVlcyk7CiAgICAgICAgd3JpdGVDb25zdGFudE9yTnVsbChjb25zdGFudC5wcm90b1ZhbHVlKTsKICAgICAgICB3cml0ZUJvb2woY29uc3RhbnQub25seVN0cmluZ0tleXMpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLkNPTlNUUlVDVEVEOgogICAgICAgIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IHZhbHVlOwogICAgICAgIHdyaXRlRGFydFR5cGUoY29uc3RhbnQudHlwZSk7CiAgICAgICAgd3JpdGVNZW1iZXJNYXAoY29uc3RhbnQuZmllbGRzLAogICAgICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgQ29uc3RhbnRWYWx1ZSB2YWx1ZSkgPT4gd3JpdGVDb25zdGFudCh2YWx1ZSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLlRZUEU6CiAgICAgICAgVHlwZUNvbnN0YW50VmFsdWUgY29uc3RhbnQgPSB2YWx1ZTsKICAgICAgICB3cml0ZURhcnRUeXBlKGNvbnN0YW50LnJlcHJlc2VudGVkVHlwZSk7CiAgICAgICAgd3JpdGVEYXJ0VHlwZShjb25zdGFudC50eXBlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5JTlNUQU5USUFUSU9OOgogICAgICAgIEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlIGNvbnN0YW50ID0gdmFsdWU7CiAgICAgICAgd3JpdGVEYXJ0VHlwZXMoY29uc3RhbnQudHlwZUFyZ3VtZW50cyk7CiAgICAgICAgd3JpdGVDb25zdGFudChjb25zdGFudC5mdW5jdGlvbik7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuTk9OX0NPTlNUQU5UOgogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLklOVEVSQ0VQVE9SOgogICAgICAgIEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IHZhbHVlOwogICAgICAgIHdyaXRlQ2xhc3MoY29uc3RhbnQuY2xzKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5ERUZFUlJFRF9HTE9CQUw6CiAgICAgICAgRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gdmFsdWU7CiAgICAgICAgd3JpdGVDb25zdGFudChjb25zdGFudC5yZWZlcmVuY2VkKTsKICAgICAgICB3cml0ZU91dHB1dFVuaXRSZWZlcmVuY2UoY29uc3RhbnQudW5pdCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuRFVNTVlfSU5URVJDRVBUT1I6CiAgICAgICAgRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgY29uc3RhbnQgPSB2YWx1ZTsKICAgICAgICB3cml0ZUFic3RyYWN0VmFsdWUoY29uc3RhbnQuYWJzdHJhY3RWYWx1ZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuVU5SRUFDSEFCTEU6CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuSlNfTkFNRToKICAgICAgICBKc05hbWVDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gdmFsdWU7CiAgICAgICAgd3JpdGVKc05vZGUoY29uc3RhbnQubmFtZSk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgfQoKICB2b2lkIF93cml0ZVN0cmluZyhTdHJpbmcgdmFsdWUpIHsKICAgIF9zdHJpbmdJbmRleC53cml0ZSh2YWx1ZSwgX3dyaXRlU3RyaW5nSW50ZXJuYWwpOwogIH0KCiAgdm9pZCBfd3JpdGVVcmkoVXJpIHZhbHVlKSB7CiAgICBfdXJpSW5kZXgud3JpdGUodmFsdWUsIF93cml0ZVVyaUludGVybmFsKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVJbXBvcnQoSW1wb3J0RW50aXR5IHZhbHVlKSB7CiAgICBfd3JpdGVEYXRhS2luZChEYXRhS2luZC5pbXBvcnQpOwogICAgX3dyaXRlSW1wb3J0KHZhbHVlKTsKICB9CgogIHZvaWQgX3dyaXRlSW1wb3J0KEltcG9ydEVudGl0eSB2YWx1ZSkgewogICAgX2ltcG9ydEluZGV4LndyaXRlKHZhbHVlLCBfd3JpdGVJbXBvcnRJbnRlcm5hbCk7CiAgfQoKICB2b2lkIF93cml0ZUltcG9ydEludGVybmFsKEltcG9ydEVudGl0eSB2YWx1ZSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogRG8gd2UgbmVlZCB0byBzZXJpYWxpemUgbm9uLWRlZmVycmVkIGltcG9ydHM/CiAgICB3cml0ZVN0cmluZ09yTnVsbCh2YWx1ZS5uYW1lKTsKICAgIF93cml0ZVVyaSh2YWx1ZS51cmkpOwogICAgX3dyaXRlVXJpKHZhbHVlLmVuY2xvc2luZ0xpYnJhcnlVcmkpOwogICAgX3dyaXRlQm9vbCh2YWx1ZS5pc0RlZmVycmVkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJFbnRpdHlXcml0ZXIoRW50aXR5V3JpdGVyIHdyaXRlcikgewogICAgYXNzZXJ0KHdyaXRlciAhPSBudWxsKTsKICAgIF9lbnRpdHlXcml0ZXIgPSB3cml0ZXI7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ29kZWdlbldyaXRlcihDb2RlZ2VuV3JpdGVyIHdyaXRlcikgewogICAgYXNzZXJ0KHdyaXRlciAhPSBudWxsKTsKICAgIGFzc2VydChfY29kZWdlbldyaXRlciA9PSBudWxsKTsKICAgIF9jb2RlZ2VuV3JpdGVyID0gd3JpdGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZU91dHB1dFVuaXRSZWZlcmVuY2UoT3V0cHV0VW5pdCB2YWx1ZSkgewogICAgYXNzZXJ0KAogICAgICAgIF9jb2RlZ2VuV3JpdGVyICE9IG51bGwsCiAgICAgICAgIkNhbiBub3Qgc2VyaWFsaXplIGFuIE91dHB1dFVuaXQgcmVmZXJlbmNlICIKICAgICAgICAid2l0aG91dCBhIHJlZ2lzdGVyZWQgY29kZWdlbiB3cml0ZXIuIik7CiAgICBfY29kZWdlbldyaXRlci53cml0ZU91dHB1dFVuaXRSZWZlcmVuY2UodGhpcywgdmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUFic3RyYWN0VmFsdWUoQWJzdHJhY3RWYWx1ZSB2YWx1ZSkgewogICAgYXNzZXJ0KF9jb2RlZ2VuV3JpdGVyICE9IG51bGwsCiAgICAgICAgIkNhbiBub3Qgc2VyaWFsaXplIGFuIEFic3RyYWN0VmFsdWUgd2l0aG91dCBhIHJlZ2lzdGVyZWQgY29kZWdlbiB3cml0ZXIuIik7CiAgICBfY29kZWdlbldyaXRlci53cml0ZUFic3RyYWN0VmFsdWUodGhpcywgdmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUpzTm9kZShqcy5Ob2RlIHZhbHVlKSB7CiAgICBhc3NlcnQoX2NvZGVnZW5Xcml0ZXIgIT0gbnVsbCwKICAgICAgICAiQ2FuIG5vdCBzZXJpYWxpemUgYSBKUyBuZG9lIHdpdGhvdXQgYSByZWdpc3RlcmVkIGNvZGVnZW4gd3JpdGVyLiIpOwogICAgX2NvZGVnZW5Xcml0ZXIud3JpdGVKc05vZGUodGhpcywgdmFsdWUpOwogIH0KCiAgLy8vIEFjdHVhbCBzZXJpYWxpemF0aW9uIG9mIGEgc2VjdGlvbiBiZWdpbiB0YWcsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgdm9pZCBfYmVnaW4oU3RyaW5nIHRhZyk7CgogIC8vLyBBY3R1YWwgc2VyaWFsaXphdGlvbiBvZiBhIHNlY3Rpb24gZW5kIHRhZywgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICB2b2lkIF9lbmQoU3RyaW5nIHRhZyk7CgogIC8vLyBBY3R1YWwgc2VyaWFsaXphdGlvbiBvZiBhIFVSSSB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICB2b2lkIF93cml0ZVVyaUludGVybmFsKFVyaSB2YWx1ZSk7CgogIC8vLyBBY3R1YWwgc2VyaWFsaXphdGlvbiBvZiBhIFN0cmluZyB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkgc3ViY2xhc3Nlcy4KICB2b2lkIF93cml0ZVN0cmluZ0ludGVybmFsKFN0cmluZyB2YWx1ZSk7CgogIC8vLyBBY3R1YWwgc2VyaWFsaXphdGlvbiBvZiBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlLCBpbXBsZW1lbnRlZCBieQogIC8vLyBzdWJjbGFzc2VzLgogIHZvaWQgX3dyaXRlSW50SW50ZXJuYWwoaW50IHZhbHVlKTsKCiAgLy8vIEFjdHVhbCBzZXJpYWxpemF0aW9uIG9mIGFuIGVudW0gdmFsdWUsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgdm9pZCBfd3JpdGVFbnVtSW50ZXJuYWwoZHluYW1pYyB2YWx1ZSk7Cn0KgoMATk48AR4BSRlMTg0GTBsbATAiATMqAVFBFgFGMAEkHisqLQEuATUgASoBIyIBRzA4Miw5ODsEAQwbIyIeBhgcFhMGBAEMGRgRAS8hRQYEAQw2ODQlHwkoLgQBJio0STAEAQwyRyQEAQwrKRokIgQBDEAnNQQBF0ghGRhICCQNOwYEAQxHKzkEARtHIRkYUAgoDUEGBAEMKikdBAErPQQBMykXMRwvDTUxLwYEAQwoKBwEASkvHgQBDCwqHgQBLS8eBAEMLCoeBAEtIAQBDCIoHwQBDB8bIxcEASAmBAEMHRsiFgQBDCMbJRkEAQwdGywlHgQBDConIQQBDDM+BAEnMycnBAEMOR4ZQAYEAQw9IRoZEw0fKkIIBgQBDE4hFxkTDRwvQBIKBgQBMR8jHEYsCB4GHjwEAUMdLR4lMB8yMkUwKzYtLDcuLTI3NBJLIA0uLDgOGT4mIAYEAUsnIjcgKzkgMkAqM0EqDSJEBgQBDDgwJgQBTSceMh8/LDsuPw0iRQYEAScwBAEMLDcEAQwoNQQBDCw3BAEMKjYEAQw2PAQBDCEbIygiJSYoJCUjMTImLS4pDUwGBAEMLCcbBAEMKCUeBAEpJR8hISEhBAEMJiIqBAEkIwQBLTkEATUkGiMsJw8iKykPJS4xDyUuKw8jDycwNR8mDyMsJioPIkAmKQ8iQCYpKTIsDyozJihRDyMsMSYPLDUwKg8rDyozIg8uNiwxDzA4NA8qDyYuJA8GBAEkNQQBHi8EAQwpJRkEASo1BAEySiMaKiIEAQwzHBwEAQw1HCQdBAEMNAwgNTE6BAEMMSNUNAQBDCQjTS0EAU4bAUwZAUYlAUkrAUsSJQFIKgIBNXBhY2thZ2U6Y29tcGlsZXIvc3JjL3NlcmlhbGl6YXRpb24vYWJzdHJhY3Rfc2luay5kYXJ0QHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NlcmlhbGl6YXRpb24vYWJzdHJhY3Rfc291cmNlLmRhcnTAAGauLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgJ3NlcmlhbGl6YXRpb24uZGFydCc7CgovLy8gQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBbRGF0YVNvdXJjZV0gdXNpbmcgW0RhdGFTb3VyY2VNaXhpbl0gdG8gaW1wbGVtZW50Ci8vLyBjb252ZW5pZW5jZSBtZXRob2RzLgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdERhdGFTb3VyY2UgZXh0ZW5kcyBEYXRhU291cmNlTWl4aW4KICAgIGltcGxlbWVudHMgRGF0YVNvdXJjZSB7CiAgZmluYWwgYm9vbCB1c2VEYXRhS2luZHM7CiAgRW50aXR5UmVhZGVyIF9lbnRpdHlSZWFkZXIgPSBjb25zdCBFbnRpdHlSZWFkZXIoKTsKICBDb21wb25lbnRMb29rdXAgX2NvbXBvbmVudExvb2t1cDsKICBFbnRpdHlMb29rdXAgX2VudGl0eUxvb2t1cDsKICBMb2NhbExvb2t1cCBfbG9jYWxMb29rdXA7CiAgQ29kZWdlblJlYWRlciBfY29kZWdlblJlYWRlcjsKCiAgSW5kZXhlZFNvdXJjZTxTdHJpbmc+IF9zdHJpbmdJbmRleDsKICBJbmRleGVkU291cmNlPFVyaT4gX3VyaUluZGV4OwogIEluZGV4ZWRTb3VyY2U8X01lbWJlckRhdGE+IF9tZW1iZXJOb2RlSW5kZXg7CiAgSW5kZXhlZFNvdXJjZTxJbXBvcnRFbnRpdHk+IF9pbXBvcnRJbmRleDsKICBJbmRleGVkU291cmNlPENvbnN0YW50VmFsdWU+IF9jb25zdGFudEluZGV4OwoKICBNYXA8VHlwZSwgSW5kZXhlZFNvdXJjZT4gX2dlbmVyYWxDYWNoZXMgPSB7fTsKCiAgaXIuTWVtYmVyIF9jdXJyZW50TWVtYmVyQ29udGV4dDsKICBfTWVtYmVyRGF0YSBfY3VycmVudE1lbWJlckRhdGE7CgogIEFic3RyYWN0RGF0YVNvdXJjZSh7dGhpcy51c2VEYXRhS2luZHM6IGZhbHNlfSkgewogICAgX3N0cmluZ0luZGV4ID0gbmV3IEluZGV4ZWRTb3VyY2U8U3RyaW5nPih0aGlzKTsKICAgIF91cmlJbmRleCA9IG5ldyBJbmRleGVkU291cmNlPFVyaT4odGhpcyk7CiAgICBfbWVtYmVyTm9kZUluZGV4ID0gbmV3IEluZGV4ZWRTb3VyY2U8X01lbWJlckRhdGE+KHRoaXMpOwogICAgX2ltcG9ydEluZGV4ID0gbmV3IEluZGV4ZWRTb3VyY2U8SW1wb3J0RW50aXR5Pih0aGlzKTsKICAgIF9jb25zdGFudEluZGV4ID0gbmV3IEluZGV4ZWRTb3VyY2U8Q29uc3RhbnRWYWx1ZT4odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luKFN0cmluZyB0YWcpIHsKICAgIGlmICh1c2VEYXRhS2luZHMpIF9iZWdpbih0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmQoU3RyaW5nIHRhZykgewogICAgaWYgKHVzZURhdGFLaW5kcykgX2VuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNvbXBvbmVudExvb2t1cChDb21wb25lbnRMb29rdXAgY29tcG9uZW50TG9va3VwKSB7CiAgICBhc3NlcnQoX2NvbXBvbmVudExvb2t1cCA9PSBudWxsKTsKICAgIF9jb21wb25lbnRMb29rdXAgPSBjb21wb25lbnRMb29rdXA7CiAgfQoKICBDb21wb25lbnRMb29rdXAgZ2V0IGNvbXBvbmVudExvb2t1cCB7CiAgICBhc3NlcnQoX2NvbXBvbmVudExvb2t1cCAhPSBudWxsKTsKICAgIHJldHVybiBfY29tcG9uZW50TG9va3VwOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckVudGl0eUxvb2t1cChFbnRpdHlMb29rdXAgZW50aXR5TG9va3VwKSB7CiAgICBhc3NlcnQoX2VudGl0eUxvb2t1cCA9PSBudWxsKTsKICAgIF9lbnRpdHlMb29rdXAgPSBlbnRpdHlMb29rdXA7CiAgfQoKICBFbnRpdHlMb29rdXAgZ2V0IGVudGl0eUxvb2t1cCB7CiAgICBhc3NlcnQoX2VudGl0eUxvb2t1cCAhPSBudWxsKTsKICAgIHJldHVybiBfZW50aXR5TG9va3VwOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckxvY2FsTG9va3VwKExvY2FsTG9va3VwIGxvY2FsTG9va3VwKSB7CiAgICBhc3NlcnQoX2xvY2FsTG9va3VwID09IG51bGwpOwogICAgX2xvY2FsTG9va3VwID0gbG9jYWxMb29rdXA7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRW50aXR5UmVhZGVyKEVudGl0eVJlYWRlciByZWFkZXIpIHsKICAgIGFzc2VydChyZWFkZXIgIT0gbnVsbCk7CiAgICBfZW50aXR5UmVhZGVyID0gcmVhZGVyOwogIH0KCiAgTG9jYWxMb29rdXAgZ2V0IGxvY2FsTG9va3VwIHsKICAgIGFzc2VydChfbG9jYWxMb29rdXAgIT0gbnVsbCk7CiAgICByZXR1cm4gX2xvY2FsTG9va3VwOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNvZGVnZW5SZWFkZXIoQ29kZWdlblJlYWRlciByZWFkZXIpIHsKICAgIGFzc2VydChyZWFkZXIgIT0gbnVsbCk7CiAgICBhc3NlcnQoX2NvZGVnZW5SZWFkZXIgPT0gbnVsbCk7CiAgICBfY29kZWdlblJlYWRlciA9IHJlYWRlcjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGVyZWdpc3RlckNvZGVnZW5SZWFkZXIoQ29kZWdlblJlYWRlciByZWFkZXIpIHsKICAgIGFzc2VydChfY29kZWdlblJlYWRlciA9PSByZWFkZXIpOwogICAgX2NvZGVnZW5SZWFkZXIgPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgVCBpbk1lbWJlckNvbnRleHQ8VD4oaXIuTWVtYmVyIGNvbnRleHQsIFQgZigpKSB7CiAgICBpci5NZW1iZXIgb2xkTWVtYmVyQ29udGV4dCA9IF9jdXJyZW50TWVtYmVyQ29udGV4dDsKICAgIF9NZW1iZXJEYXRhIG9sZE1lbWJlckRhdGEgPSBfY3VycmVudE1lbWJlckRhdGE7CiAgICBfY3VycmVudE1lbWJlckNvbnRleHQgPSBjb250ZXh0OwogICAgX2N1cnJlbnRNZW1iZXJEYXRhID0gbnVsbDsKICAgIFQgcmVzdWx0ID0gZigpOwogICAgX2N1cnJlbnRNZW1iZXJEYXRhID0gb2xkTWVtYmVyRGF0YTsKICAgIF9jdXJyZW50TWVtYmVyQ29udGV4dCA9IG9sZE1lbWJlckNvbnRleHQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgX01lbWJlckRhdGEgZ2V0IGN1cnJlbnRNZW1iZXJEYXRhIHsKICAgIGFzc2VydChfY3VycmVudE1lbWJlckNvbnRleHQgIT0gbnVsbCwKICAgICAgICAiRGF0YVNpbmsgaGFzIG5vIGN1cnJlbnQgbWVtYmVyIGNvbnRleHQuIik7CiAgICByZXR1cm4gX2N1cnJlbnRNZW1iZXJEYXRhID8/PSBfZ2V0TWVtYmVyRGF0YShfY3VycmVudE1lbWJlckNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRSByZWFkQ2FjaGVkPEU+KEUgZigpKSB7CiAgICBJbmRleGVkU291cmNlIHNvdXJjZSA9IF9nZW5lcmFsQ2FjaGVzW0VdID8/PSBuZXcgSW5kZXhlZFNvdXJjZTxFPih0aGlzKTsKICAgIHJldHVybiBzb3VyY2UucmVhZChmKTsKICB9CgogIEBvdmVycmlkZQogIEluZGV4ZWRMaWJyYXJ5IHJlYWRMaWJyYXJ5KCkgewogICAgcmV0dXJuIF9lbnRpdHlSZWFkZXIucmVhZExpYnJhcnlGcm9tRGF0YVNvdXJjZSh0aGlzLCBlbnRpdHlMb29rdXApOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5kZXhlZENsYXNzIHJlYWRDbGFzcygpIHsKICAgIHJldHVybiBfZW50aXR5UmVhZGVyLnJlYWRDbGFzc0Zyb21EYXRhU291cmNlKHRoaXMsIGVudGl0eUxvb2t1cCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbmRleGVkVHlwZWRlZiByZWFkVHlwZWRlZigpIHsKICAgIHJldHVybiBfZW50aXR5UmVhZGVyLnJlYWRUeXBlZGVmRnJvbURhdGFTb3VyY2UodGhpcywgZW50aXR5TG9va3VwKTsKICB9CgogIEBvdmVycmlkZQogIEluZGV4ZWRNZW1iZXIgcmVhZE1lbWJlcigpIHsKICAgIHJldHVybiBfZW50aXR5UmVhZGVyLnJlYWRNZW1iZXJGcm9tRGF0YVNvdXJjZSh0aGlzLCBlbnRpdHlMb29rdXApOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5kZXhlZFR5cGVWYXJpYWJsZSByZWFkVHlwZVZhcmlhYmxlKCkgewogICAgcmV0dXJuIF9lbnRpdHlSZWFkZXIucmVhZFR5cGVWYXJpYWJsZUZyb21EYXRhU291cmNlKHRoaXMsIGVudGl0eUxvb2t1cCk7CiAgfQoKICBMaXN0PERhcnRUeXBlPiBfcmVhZERhcnRUeXBlcygKICAgICAgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlcyA9IG5ldyBMaXN0PERhcnRUeXBlPihjb3VudCk7CiAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgY291bnQ7IGluZGV4KyspIHsKICAgICAgdHlwZXNbaW5kZXhdID0gX3JlYWREYXJ0VHlwZShmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgfQogICAgcmV0dXJuIHR5cGVzOwogIH0KCiAgTGlzdDxpci5EYXJ0VHlwZT4gX3JlYWREYXJ0VHlwZU5vZGVzKAogICAgICBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZXMgPSBuZXcgTGlzdDxpci5EYXJ0VHlwZT4oY291bnQpOwogICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IGNvdW50OyBpbmRleCsrKSB7CiAgICAgIHR5cGVzW2luZGV4XSA9IF9yZWFkRGFydFR5cGVOb2RlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICB9CiAgICByZXR1cm4gdHlwZXM7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VTcGFuIHJlYWRTb3VyY2VTcGFuKCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQuc291cmNlU3Bhbik7CiAgICBVcmkgdXJpID0gX3JlYWRVcmkoKTsKICAgIGludCBiZWdpbiA9IF9yZWFkSW50SW50ZXJuYWwoKTsKICAgIGludCBlbmQgPSBfcmVhZEludEludGVybmFsKCk7CiAgICByZXR1cm4gbmV3IFNvdXJjZVNwYW4odXJpLCBiZWdpbiwgZW5kKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHJlYWREYXJ0VHlwZSh7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQuZGFydFR5cGUpOwogICAgRGFydFR5cGUgdHlwZSA9IF9yZWFkRGFydFR5cGUoW10pOwogICAgYXNzZXJ0KHR5cGUgIT0gbnVsbCB8fCBhbGxvd051bGwpOwogICAgcmV0dXJuIHR5cGU7CiAgfQoKICBEYXJ0VHlwZSBfcmVhZERhcnRUeXBlKExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgRGFydFR5cGVLaW5kIGtpbmQgPSByZWFkRW51bShEYXJ0VHlwZUtpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIERhcnRUeXBlS2luZC5ub25lOgogICAgICAgIHJldHVybiBudWxsOwogICAgICBjYXNlIERhcnRUeXBlS2luZC52b2lkVHlwZToKICAgICAgICByZXR1cm4gY29uc3QgVm9pZFR5cGUoKTsKICAgICAgY2FzZSBEYXJ0VHlwZUtpbmQudHlwZVZhcmlhYmxlOgogICAgICAgIHJldHVybiBuZXcgVHlwZVZhcmlhYmxlVHlwZShyZWFkVHlwZVZhcmlhYmxlKCkpOwogICAgICBjYXNlIERhcnRUeXBlS2luZC5mdW5jdGlvblR5cGVWYXJpYWJsZToKICAgICAgICBpbnQgaW5kZXggPSByZWFkSW50KCk7CiAgICAgICAgYXNzZXJ0KDAgPD0gaW5kZXggJiYgaW5kZXggPCBmdW5jdGlvblR5cGVWYXJpYWJsZXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb25UeXBlVmFyaWFibGVzW2luZGV4XTsKICAgICAgY2FzZSBEYXJ0VHlwZUtpbmQuZnVuY3Rpb25UeXBlOgogICAgICAgIGludCB0eXBlVmFyaWFibGVDb3VudCA9IHJlYWRJbnQoKTsKICAgICAgICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiB0eXBlVmFyaWFibGVzID0KICAgICAgICAgICAgbmV3IExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+LmdlbmVyYXRlKHR5cGVWYXJpYWJsZUNvdW50LAogICAgICAgICAgICAgICAgKGludCBpbmRleCkgPT4gbmV3IEZ1bmN0aW9uVHlwZVZhcmlhYmxlKGluZGV4KSk7CiAgICAgICAgZnVuY3Rpb25UeXBlVmFyaWFibGVzID0KICAgICAgICAgICAgbmV3IExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+LmZyb20oZnVuY3Rpb25UeXBlVmFyaWFibGVzKQogICAgICAgICAgICAgIC4uYWRkQWxsKHR5cGVWYXJpYWJsZXMpOwogICAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlVmFyaWFibGVDb3VudDsgaW5kZXgrKykgewogICAgICAgICAgdHlwZVZhcmlhYmxlc1tpbmRleF0uYm91bmQgPSBfcmVhZERhcnRUeXBlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgfQogICAgICAgIERhcnRUeXBlIHJldHVyblR5cGUgPSBfcmVhZERhcnRUeXBlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgTGlzdDxEYXJ0VHlwZT4gcGFyYW1ldGVyVHlwZXMgPSBfcmVhZERhcnRUeXBlcyhmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIExpc3Q8RGFydFR5cGU+IG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMgPQogICAgICAgICAgICBfcmVhZERhcnRUeXBlcyhmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIExpc3Q8RGFydFR5cGU+IG5hbWVkUGFyYW1ldGVyVHlwZXMgPQogICAgICAgICAgICBfcmVhZERhcnRUeXBlcyhmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZFBhcmFtZXRlcnMgPQogICAgICAgICAgICBuZXcgTGlzdDxTdHJpbmc+KG5hbWVkUGFyYW1ldGVyVHlwZXMubGVuZ3RoKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5hbWVkUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzW2ldID0gcmVhZFN0cmluZygpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZSgKICAgICAgICAgICAgcmV0dXJuVHlwZSwKICAgICAgICAgICAgcGFyYW1ldGVyVHlwZXMsCiAgICAgICAgICAgIG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMsCiAgICAgICAgICAgIG5hbWVkUGFyYW1ldGVycywKICAgICAgICAgICAgbmFtZWRQYXJhbWV0ZXJUeXBlcywKICAgICAgICAgICAgdHlwZVZhcmlhYmxlcyk7CgogICAgICBjYXNlIERhcnRUeXBlS2luZC5pbnRlcmZhY2VUeXBlOgogICAgICAgIEluZGV4ZWRDbGFzcyBjbHMgPSByZWFkQ2xhc3MoKTsKICAgICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gX3JlYWREYXJ0VHlwZXMoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgICByZXR1cm4gbmV3IEludGVyZmFjZVR5cGUoY2xzLCB0eXBlQXJndW1lbnRzKTsKICAgICAgY2FzZSBEYXJ0VHlwZUtpbmQudHlwZWRlZjoKICAgICAgICBJbmRleGVkVHlwZWRlZiB0eXBlZGVmID0gcmVhZFR5cGVkZWYoKTsKICAgICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gX3JlYWREYXJ0VHlwZXMoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgICBEYXJ0VHlwZSB1bmFsaWFzZWQgPSBfcmVhZERhcnRUeXBlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgcmV0dXJuIG5ldyBUeXBlZGVmVHlwZSh0eXBlZGVmLCB0eXBlQXJndW1lbnRzLCB1bmFsaWFzZWQpOwogICAgICBjYXNlIERhcnRUeXBlS2luZC5keW5hbWljVHlwZToKICAgICAgICByZXR1cm4gY29uc3QgRHluYW1pY1R5cGUoKTsKICAgICAgY2FzZSBEYXJ0VHlwZUtpbmQuZnV0dXJlT3I6CiAgICAgICAgRGFydFR5cGUgdHlwZUFyZ3VtZW50ID0gX3JlYWREYXJ0VHlwZShmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIHJldHVybiBuZXcgRnV0dXJlT3JUeXBlKHR5cGVBcmd1bWVudCk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBEYXJ0VHlwZUtpbmQgJGtpbmQiKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHJlYWREYXJ0VHlwZU5vZGUoe2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLmRhcnRUeXBlTm9kZSk7CiAgICBpci5EYXJ0VHlwZSB0eXBlID0gX3JlYWREYXJ0VHlwZU5vZGUoW10pOwogICAgYXNzZXJ0KHR5cGUgIT0gbnVsbCB8fCBhbGxvd051bGwpOwogICAgcmV0dXJuIHR5cGU7CiAgfQoKICBpci5EYXJ0VHlwZSBfcmVhZERhcnRUeXBlTm9kZShMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgRGFydFR5cGVOb2RlS2luZCBraW5kID0gcmVhZEVudW0oRGFydFR5cGVOb2RlS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgRGFydFR5cGVOb2RlS2luZC5ub25lOgogICAgICAgIHJldHVybiBudWxsOwogICAgICBjYXNlIERhcnRUeXBlTm9kZUtpbmQudm9pZFR5cGU6CiAgICAgICAgcmV0dXJuIGNvbnN0IGlyLlZvaWRUeXBlKCk7CiAgICAgIGNhc2UgRGFydFR5cGVOb2RlS2luZC5pbnZhbGlkVHlwZToKICAgICAgICByZXR1cm4gY29uc3QgaXIuSW52YWxpZFR5cGUoKTsKICAgICAgY2FzZSBEYXJ0VHlwZU5vZGVLaW5kLmJvdHRvbVR5cGU6CiAgICAgICAgcmV0dXJuIGNvbnN0IGlyLkJvdHRvbVR5cGUoKTsKICAgICAgY2FzZSBEYXJ0VHlwZU5vZGVLaW5kLmRvZXNOb3RDb21wbGV0ZToKICAgICAgICByZXR1cm4gY29uc3QgRG9lc05vdENvbXBsZXRlVHlwZSgpOwogICAgICBjYXNlIERhcnRUeXBlTm9kZUtpbmQudHlwZVBhcmFtZXRlclR5cGU6CiAgICAgICAgaXIuVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyID0gcmVhZFR5cGVQYXJhbWV0ZXJOb2RlKCk7CiAgICAgICAgaXIuRGFydFR5cGUgcHJvbW90ZWRCb3VuZCA9IF9yZWFkRGFydFR5cGVOb2RlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgcmV0dXJuIG5ldyBpci5UeXBlUGFyYW1ldGVyVHlwZSh0eXBlUGFyYW1ldGVyLCBwcm9tb3RlZEJvdW5kKTsKICAgICAgY2FzZSBEYXJ0VHlwZU5vZGVLaW5kLmZ1bmN0aW9uVHlwZVZhcmlhYmxlOgogICAgICAgIGludCBpbmRleCA9IHJlYWRJbnQoKTsKICAgICAgICBhc3NlcnQoMCA8PSBpbmRleCAmJiBpbmRleCA8IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcy5sZW5ndGgpOwogICAgICAgIGlyLkRhcnRUeXBlIHByb21vdGVkQm91bmQgPSBfcmVhZERhcnRUeXBlTm9kZShmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIHJldHVybiBuZXcgaXIuVHlwZVBhcmFtZXRlclR5cGUoCiAgICAgICAgICAgIGZ1bmN0aW9uVHlwZVZhcmlhYmxlc1tpbmRleF0sIHByb21vdGVkQm91bmQpOwogICAgICBjYXNlIERhcnRUeXBlTm9kZUtpbmQuZnVuY3Rpb25UeXBlOgogICAgICAgIGJlZ2luKGZ1bmN0aW9uVHlwZU5vZGVUYWcpOwogICAgICAgIGludCB0eXBlUGFyYW1ldGVyQ291bnQgPSByZWFkSW50KCk7CiAgICAgICAgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVycyA9CiAgICAgICAgICAgIG5ldyBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+LmdlbmVyYXRlKAogICAgICAgICAgICAgICAgdHlwZVBhcmFtZXRlckNvdW50LCAoaW50IGluZGV4KSA9PiBuZXcgaXIuVHlwZVBhcmFtZXRlcigpKTsKICAgICAgICBmdW5jdGlvblR5cGVWYXJpYWJsZXMgPQogICAgICAgICAgICBuZXcgTGlzdDxpci5UeXBlUGFyYW1ldGVyPi5mcm9tKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykKICAgICAgICAgICAgICAuLmFkZEFsbCh0eXBlUGFyYW1ldGVycyk7CiAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVQYXJhbWV0ZXJDb3VudDsgaW5kZXgrKykgewogICAgICAgICAgdHlwZVBhcmFtZXRlcnNbaW5kZXhdLm5hbWUgPSByZWFkU3RyaW5nKCk7CiAgICAgICAgICB0eXBlUGFyYW1ldGVyc1tpbmRleF0uYm91bmQgPQogICAgICAgICAgICAgIF9yZWFkRGFydFR5cGVOb2RlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgICB0eXBlUGFyYW1ldGVyc1tpbmRleF0uZGVmYXVsdFR5cGUgPQogICAgICAgICAgICAgIF9yZWFkRGFydFR5cGVOb2RlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgfQogICAgICAgIGlyLkRhcnRUeXBlIHJldHVyblR5cGUgPSBfcmVhZERhcnRUeXBlTm9kZShmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50ID0gcmVhZEludCgpOwogICAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHBvc2l0aW9uYWxQYXJhbWV0ZXJzID0KICAgICAgICAgICAgX3JlYWREYXJ0VHlwZU5vZGVzKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgaW50IG5hbWVkUGFyYW1ldGVyQ291bnQgPSByZWFkSW50KCk7CiAgICAgICAgTGlzdDxpci5OYW1lZFR5cGU+IG5hbWVkUGFyYW1ldGVycyA9CiAgICAgICAgICAgIG5ldyBMaXN0PGlyLk5hbWVkVHlwZT4obmFtZWRQYXJhbWV0ZXJDb3VudCk7CiAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IG5hbWVkUGFyYW1ldGVyQ291bnQ7IGluZGV4KyspIHsKICAgICAgICAgIFN0cmluZyBuYW1lID0gcmVhZFN0cmluZygpOwogICAgICAgICAgaXIuRGFydFR5cGUgdHlwZSA9IF9yZWFkRGFydFR5cGVOb2RlKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgICBuYW1lZFBhcmFtZXRlcnNbaW5kZXhdID0gbmV3IGlyLk5hbWVkVHlwZShuYW1lLCB0eXBlKTsKICAgICAgICB9CiAgICAgICAgaXIuVHlwZWRlZlR5cGUgdHlwZWRlZlR5cGUgPSBfcmVhZERhcnRUeXBlTm9kZShmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIGVuZChmdW5jdGlvblR5cGVOb2RlVGFnKTsKICAgICAgICByZXR1cm4gbmV3IGlyLkZ1bmN0aW9uVHlwZShwb3NpdGlvbmFsUGFyYW1ldGVycywgcmV0dXJuVHlwZSwKICAgICAgICAgICAgbmFtZWRQYXJhbWV0ZXJzOiBuYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgICAgIHR5cGVQYXJhbWV0ZXJzOiB0eXBlUGFyYW1ldGVycywKICAgICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICAgICAgdHlwZWRlZlR5cGU6IHR5cGVkZWZUeXBlKTsKCiAgICAgIGNhc2UgRGFydFR5cGVOb2RlS2luZC5pbnRlcmZhY2VUeXBlOgogICAgICAgIGlyLkNsYXNzIGNscyA9IHJlYWRDbGFzc05vZGUoKTsKICAgICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0KICAgICAgICAgICAgX3JlYWREYXJ0VHlwZU5vZGVzKGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgICAgcmV0dXJuIG5ldyBpci5JbnRlcmZhY2VUeXBlKGNscywgdHlwZUFyZ3VtZW50cyk7CiAgICAgIGNhc2UgRGFydFR5cGVOb2RlS2luZC50aGlzSW50ZXJmYWNlVHlwZToKICAgICAgICBpci5DbGFzcyBjbHMgPSByZWFkQ2xhc3NOb2RlKCk7CiAgICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgICAgIF9yZWFkRGFydFR5cGVOb2RlcyhmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIHJldHVybiBuZXcgVGhpc0ludGVyZmFjZVR5cGUoY2xzLCB0eXBlQXJndW1lbnRzKTsKICAgICAgY2FzZSBEYXJ0VHlwZU5vZGVLaW5kLmV4YWN0SW50ZXJmYWNlVHlwZToKICAgICAgICBpci5DbGFzcyBjbHMgPSByZWFkQ2xhc3NOb2RlKCk7CiAgICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgICAgIF9yZWFkRGFydFR5cGVOb2RlcyhmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgICAgIHJldHVybiBuZXcgRXhhY3RJbnRlcmZhY2VUeXBlKGNscywgdHlwZUFyZ3VtZW50cyk7CiAgICAgIGNhc2UgRGFydFR5cGVOb2RlS2luZC50eXBlZGVmOgogICAgICAgIGlyLlR5cGVkZWYgdHlwZWRlZiA9IHJlYWRUeXBlZGVmTm9kZSgpOwogICAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPQogICAgICAgICAgICBfcmVhZERhcnRUeXBlTm9kZXMoZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgICAgICByZXR1cm4gbmV3IGlyLlR5cGVkZWZUeXBlKHR5cGVkZWYsIHR5cGVBcmd1bWVudHMpOwogICAgICBjYXNlIERhcnRUeXBlTm9kZUtpbmQuZHluYW1pY1R5cGU6CiAgICAgICAgcmV0dXJuIGNvbnN0IGlyLkR5bmFtaWNUeXBlKCk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBEYXJ0VHlwZUtpbmQgJGtpbmQiKTsKICB9CgogIF9NZW1iZXJEYXRhIF9yZWFkTWVtYmVyRGF0YSgpIHsKICAgIHJldHVybiBfbWVtYmVyTm9kZUluZGV4LnJlYWQoX3JlYWRNZW1iZXJEYXRhSW50ZXJuYWwpOwogIH0KCiAgX01lbWJlckRhdGEgX3JlYWRNZW1iZXJEYXRhSW50ZXJuYWwoKSB7CiAgICBNZW1iZXJDb250ZXh0S2luZCBraW5kID0gX3JlYWRFbnVtSW50ZXJuYWwoTWVtYmVyQ29udGV4dEtpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIE1lbWJlckNvbnRleHRLaW5kLmNsczoKICAgICAgICBfQ2xhc3NEYXRhIGNscyA9IF9yZWFkQ2xhc3NEYXRhKCk7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBfcmVhZFN0cmluZygpOwogICAgICAgIHJldHVybiBjbHMubG9va3VwTWVtYmVyRGF0YUJ5TmFtZShuYW1lKTsKICAgICAgY2FzZSBNZW1iZXJDb250ZXh0S2luZC5saWJyYXJ5OgogICAgICAgIF9MaWJyYXJ5RGF0YSBsaWJyYXJ5ID0gX3JlYWRMaWJyYXJ5RGF0YSgpOwogICAgICAgIFN0cmluZyBuYW1lID0gX3JlYWRTdHJpbmcoKTsKICAgICAgICByZXR1cm4gbGlicmFyeS5sb29rdXBNZW1iZXJEYXRhQnlOYW1lKG5hbWUpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuc3VwcG9ydGVkIF9NZW1iZXJLaW5kICRraW5kIik7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5NZW1iZXIgcmVhZE1lbWJlck5vZGUoKSB7CiAgICBfY2hlY2tEYXRhS2luZChEYXRhS2luZC5tZW1iZXJOb2RlKTsKICAgIHJldHVybiBfcmVhZE1lbWJlckRhdGEoKS5ub2RlOwogIH0KCiAgX0NsYXNzRGF0YSBfcmVhZENsYXNzRGF0YSgpIHsKICAgIF9MaWJyYXJ5RGF0YSBsaWJyYXJ5ID0gX3JlYWRMaWJyYXJ5RGF0YSgpOwogICAgU3RyaW5nIG5hbWUgPSBfcmVhZFN0cmluZygpOwogICAgcmV0dXJuIGxpYnJhcnkubG9va3VwQ2xhc3NCeU5hbWUobmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5DbGFzcyByZWFkQ2xhc3NOb2RlKCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQuY2xhc3NOb2RlKTsKICAgIHJldHVybiBfcmVhZENsYXNzRGF0YSgpLm5vZGU7CiAgfQoKICBpci5UeXBlZGVmIF9yZWFkVHlwZWRlZk5vZGUoKSB7CiAgICBfTGlicmFyeURhdGEgbGlicmFyeSA9IF9yZWFkTGlicmFyeURhdGEoKTsKICAgIFN0cmluZyBuYW1lID0gX3JlYWRTdHJpbmcoKTsKICAgIHJldHVybiBsaWJyYXJ5Lmxvb2t1cFR5cGVkZWYobmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5UeXBlZGVmIHJlYWRUeXBlZGVmTm9kZSgpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLnR5cGVkZWZOb2RlKTsKICAgIHJldHVybiBfcmVhZFR5cGVkZWZOb2RlKCk7CiAgfQoKICBfTGlicmFyeURhdGEgX3JlYWRMaWJyYXJ5RGF0YSgpIHsKICAgIFVyaSBjYW5vbmljYWxVcmkgPSBfcmVhZFVyaSgpOwogICAgcmV0dXJuIGNvbXBvbmVudExvb2t1cC5nZXRMaWJyYXJ5RGF0YUJ5VXJpKGNhbm9uaWNhbFVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5MaWJyYXJ5IHJlYWRMaWJyYXJ5Tm9kZSgpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLmxpYnJhcnlOb2RlKTsKICAgIHJldHVybiBfcmVhZExpYnJhcnlEYXRhKCkubm9kZTsKICB9CgogIEBvdmVycmlkZQogIEUgcmVhZEVudW08RT4oTGlzdDxFPiB2YWx1ZXMpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLmVudW1WYWx1ZSk7CiAgICByZXR1cm4gX3JlYWRFbnVtSW50ZXJuYWwodmFsdWVzKTsKICB9CgogIEBvdmVycmlkZQogIFVyaSByZWFkVXJpKCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQudXJpKTsKICAgIHJldHVybiBfcmVhZFVyaSgpOwogIH0KCiAgVXJpIF9yZWFkVXJpKCkgewogICAgcmV0dXJuIF91cmlJbmRleC5yZWFkKF9yZWFkVXJpSW50ZXJuYWwpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCByZWFkQm9vbCgpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLmJvb2wpOwogICAgcmV0dXJuIF9yZWFkQm9vbCgpOwogIH0KCiAgYm9vbCBfcmVhZEJvb2woKSB7CiAgICBpbnQgdmFsdWUgPSBfcmVhZEludEludGVybmFsKCk7CiAgICBhc3NlcnQodmFsdWUgPT0gMCB8fCB2YWx1ZSA9PSAxKTsKICAgIHJldHVybiB2YWx1ZSA9PSAxOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHJlYWRTdHJpbmcoKSB7CiAgICBfY2hlY2tEYXRhS2luZChEYXRhS2luZC5zdHJpbmcpOwogICAgcmV0dXJuIF9yZWFkU3RyaW5nKCk7CiAgfQoKICBTdHJpbmcgX3JlYWRTdHJpbmcoKSB7CiAgICByZXR1cm4gX3N0cmluZ0luZGV4LnJlYWQoX3JlYWRTdHJpbmdJbnRlcm5hbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgcmVhZEludCgpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLnVpbnQzMCk7CiAgICByZXR1cm4gX3JlYWRJbnRJbnRlcm5hbCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuVHJlZU5vZGUgcmVhZFRyZWVOb2RlKCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQudHJlZU5vZGUpOwogICAgcmV0dXJuIF9yZWFkVHJlZU5vZGUobnVsbCk7CiAgfQoKICBfTWVtYmVyRGF0YSBfZ2V0TWVtYmVyRGF0YShpci5NZW1iZXIgbm9kZSkgewogICAgX0xpYnJhcnlEYXRhIGxpYnJhcnlEYXRhID0KICAgICAgICBjb21wb25lbnRMb29rdXAuZ2V0TGlicmFyeURhdGFCeVVyaShub2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpKTsKICAgIGlmIChub2RlLmVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAgX0NsYXNzRGF0YSBjbGFzc0RhdGEgPSBsaWJyYXJ5RGF0YS5sb29rdXBDbGFzc0J5Tm9kZShub2RlLmVuY2xvc2luZ0NsYXNzKTsKICAgICAgcmV0dXJuIGNsYXNzRGF0YS5sb29rdXBNZW1iZXJEYXRhQnlOb2RlKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGxpYnJhcnlEYXRhLmxvb2t1cE1lbWJlckRhdGFCeU5vZGUobm9kZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBpci5UcmVlTm9kZSByZWFkVHJlZU5vZGVJbkNvbnRleHQoKSB7CiAgICByZXR1cm4gcmVhZFRyZWVOb2RlSW5Db250ZXh0SW50ZXJuYWwoY3VycmVudE1lbWJlckRhdGEpOwogIH0KCiAgaXIuVHJlZU5vZGUgcmVhZFRyZWVOb2RlSW5Db250ZXh0SW50ZXJuYWwoX01lbWJlckRhdGEgbWVtYmVyRGF0YSkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQudHJlZU5vZGUpOwogICAgcmV0dXJuIF9yZWFkVHJlZU5vZGUobWVtYmVyRGF0YSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5UcmVlTm9kZSByZWFkVHJlZU5vZGVPck51bGxJbkNvbnRleHQoKSB7CiAgICBib29sIGhhc1ZhbHVlID0gcmVhZEJvb2woKTsKICAgIGlmIChoYXNWYWx1ZSkgewogICAgICByZXR1cm4gcmVhZFRyZWVOb2RlSW5Db250ZXh0SW50ZXJuYWwoY3VycmVudE1lbWJlckRhdGEpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PEU+IHJlYWRUcmVlTm9kZXNJbkNvbnRleHQ8RSBleHRlbmRzIGlyLlRyZWVOb2RlPigKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxFPiBsaXN0ID0gbmV3IExpc3Q8RT4oY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGlyLlRyZWVOb2RlIG5vZGUgPSByZWFkVHJlZU5vZGVJbkNvbnRleHRJbnRlcm5hbChjdXJyZW50TWVtYmVyRGF0YSk7CiAgICAgIGxpc3RbaV0gPSBub2RlOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8SywgVj4gcmVhZFRyZWVOb2RlTWFwSW5Db250ZXh0PEsgZXh0ZW5kcyBpci5UcmVlTm9kZSwgVj4oViBmKCksCiAgICAgIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIE1hcDxLLCBWPiBtYXAgPSB7fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBpci5UcmVlTm9kZSBub2RlID0gcmVhZFRyZWVOb2RlSW5Db250ZXh0SW50ZXJuYWwoY3VycmVudE1lbWJlckRhdGEpOwogICAgICBWIHZhbHVlID0gZigpOwogICAgICBtYXBbbm9kZV0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiBtYXA7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHJlYWRDb25zdGFudCgpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLmNvbnN0YW50KTsKICAgIHJldHVybiBfcmVhZENvbnN0YW50KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBkb3VibGUgcmVhZERvdWJsZVZhbHVlKCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQuZG91YmxlKTsKICAgIHJldHVybiBfcmVhZERvdWJsZVZhbHVlKCk7CiAgfQoKICBkb3VibGUgX3JlYWREb3VibGVWYWx1ZSgpIHsKICAgIEJ5dGVEYXRhIGRhdGEgPSBuZXcgQnl0ZURhdGEoOCk7CiAgICBkYXRhLnNldFVpbnQxNigwLCByZWFkSW50KCkpOwogICAgZGF0YS5zZXRVaW50MTYoMiwgcmVhZEludCgpKTsKICAgIGRhdGEuc2V0VWludDE2KDQsIHJlYWRJbnQoKSk7CiAgICBkYXRhLnNldFVpbnQxNig2LCByZWFkSW50KCkpOwogICAgcmV0dXJuIGRhdGEuZ2V0RmxvYXQ2NCgwKTsKICB9CgogIEBvdmVycmlkZQogIGludCByZWFkSW50ZWdlclZhbHVlKCkgewogICAgX2NoZWNrRGF0YUtpbmQoRGF0YUtpbmQuaW50KTsKICAgIHJldHVybiBfcmVhZEJpZ0ludCgpLnRvSW50KCk7CiAgfQoKICBCaWdJbnQgX3JlYWRCaWdJbnQoKSB7CiAgICByZXR1cm4gQmlnSW50LnBhcnNlKHJlYWRTdHJpbmcoKSk7CiAgfQoKICBDb25zdGFudFZhbHVlIF9yZWFkQ29uc3RhbnQoKSB7CiAgICByZXR1cm4gX2NvbnN0YW50SW5kZXgucmVhZChfcmVhZENvbnN0YW50SW50ZXJuYWwpOwogIH0KCiAgQ29uc3RhbnRWYWx1ZSBfcmVhZENvbnN0YW50SW50ZXJuYWwoKSB7CiAgICBDb25zdGFudFZhbHVlS2luZCBraW5kID0gX3JlYWRFbnVtSW50ZXJuYWwoQ29uc3RhbnRWYWx1ZUtpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLkJPT0w6CiAgICAgICAgYm9vbCB2YWx1ZSA9IHJlYWRCb29sKCk7CiAgICAgICAgcmV0dXJuIG5ldyBCb29sQ29uc3RhbnRWYWx1ZSh2YWx1ZSk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuSU5UOgogICAgICAgIEJpZ0ludCB2YWx1ZSA9IF9yZWFkQmlnSW50KCk7CiAgICAgICAgcmV0dXJuIG5ldyBJbnRDb25zdGFudFZhbHVlKHZhbHVlKTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5ET1VCTEU6CiAgICAgICAgZG91YmxlIHZhbHVlID0gX3JlYWREb3VibGVWYWx1ZSgpOwogICAgICAgIHJldHVybiBuZXcgRG91YmxlQ29uc3RhbnRWYWx1ZSh2YWx1ZSk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuU1RSSU5HOgogICAgICAgIFN0cmluZyB2YWx1ZSA9IHJlYWRTdHJpbmcoKTsKICAgICAgICByZXR1cm4gbmV3IFN0cmluZ0NvbnN0YW50VmFsdWUodmFsdWUpOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLk5VTEw6CiAgICAgICAgcmV0dXJuIGNvbnN0IE51bGxDb25zdGFudFZhbHVlKCk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuRlVOQ1RJT046CiAgICAgICAgSW5kZXhlZEZ1bmN0aW9uIGZ1bmN0aW9uID0gcmVhZE1lbWJlcigpOwogICAgICAgIERhcnRUeXBlIHR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZShmdW5jdGlvbiwgdHlwZSk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuTElTVDoKICAgICAgICBEYXJ0VHlwZSB0eXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgTGlzdDxDb25zdGFudFZhbHVlPiBlbnRyaWVzID0gcmVhZENvbnN0YW50cygpOwogICAgICAgIHJldHVybiBuZXcgTGlzdENvbnN0YW50VmFsdWUodHlwZSwgZW50cmllcyk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuU0VUOgogICAgICAgIERhcnRUeXBlIHR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICBNYXBDb25zdGFudFZhbHVlIGVudHJpZXMgPSByZWFkQ29uc3RhbnQoKTsKICAgICAgICByZXR1cm4gbmV3IGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0U2V0Q29uc3RhbnQodHlwZSwgZW50cmllcyk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuTUFQOgogICAgICAgIERhcnRUeXBlIHR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICBMaXN0Q29uc3RhbnRWYWx1ZSBrZXlMaXN0ID0gcmVhZENvbnN0YW50KCk7CiAgICAgICAgTGlzdDxDb25zdGFudFZhbHVlPiB2YWx1ZXMgPSByZWFkQ29uc3RhbnRzKCk7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSBwcm90b1ZhbHVlID0gcmVhZENvbnN0YW50T3JOdWxsKCk7CiAgICAgICAgYm9vbCBvbmx5U3RyaW5nS2V5cyA9IHJlYWRCb29sKCk7CiAgICAgICAgcmV0dXJuIG5ldyBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50KAogICAgICAgICAgICB0eXBlLCBrZXlMaXN0LCB2YWx1ZXMsIHByb3RvVmFsdWUsIG9ubHlTdHJpbmdLZXlzKTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5DT05TVFJVQ1RFRDoKICAgICAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSByZWFkRGFydFR5cGUoKTsKICAgICAgICBNYXA8RmllbGRFbnRpdHksIENvbnN0YW50VmFsdWU+IGZpZWxkcyA9CiAgICAgICAgICAgIHJlYWRNZW1iZXJNYXA8RmllbGRFbnRpdHksIENvbnN0YW50VmFsdWU+KAogICAgICAgICAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIpID0+IHJlYWRDb25zdGFudCgpKTsKICAgICAgICByZXR1cm4gbmV3IENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSh0eXBlLCBmaWVsZHMpOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLlRZUEU6CiAgICAgICAgRGFydFR5cGUgcmVwcmVzZW50ZWRUeXBlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgRGFydFR5cGUgdHlwZSA9IHJlYWREYXJ0VHlwZSgpOwogICAgICAgIHJldHVybiBuZXcgVHlwZUNvbnN0YW50VmFsdWUocmVwcmVzZW50ZWRUeXBlLCB0eXBlKTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5JTlNUQU5USUFUSU9OOgogICAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSByZWFkRGFydFR5cGVzKCk7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSBmdW5jdGlvbiA9IHJlYWRDb25zdGFudCgpOwogICAgICAgIHJldHVybiBuZXcgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUodHlwZUFyZ3VtZW50cywgZnVuY3Rpb24pOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLk5PTl9DT05TVEFOVDoKICAgICAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5JTlRFUkNFUFRPUjoKICAgICAgICBDbGFzc0VudGl0eSBjbHMgPSByZWFkQ2xhc3MoKTsKICAgICAgICByZXR1cm4gbmV3IEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZShjbHMpOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLkRFRkVSUkVEX0dMT0JBTDoKICAgICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gcmVhZENvbnN0YW50KCk7CiAgICAgICAgT3V0cHV0VW5pdCB1bml0ID0gcmVhZE91dHB1dFVuaXRSZWZlcmVuY2UoKTsKICAgICAgICByZXR1cm4gbmV3IERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZShjb25zdGFudCwgdW5pdCk7CiAgICAgIGNhc2UgQ29uc3RhbnRWYWx1ZUtpbmQuRFVNTVlfSU5URVJDRVBUT1I6CiAgICAgICAgQWJzdHJhY3RWYWx1ZSBhYnN0cmFjdFZhbHVlID0gcmVhZEFic3RyYWN0VmFsdWUoKTsKICAgICAgICByZXR1cm4gbmV3IER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlKGFic3RyYWN0VmFsdWUpOwogICAgICBjYXNlIENvbnN0YW50VmFsdWVLaW5kLlVOUkVBQ0hBQkxFOgogICAgICAgIHJldHVybiBjb25zdCBVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUoKTsKICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5KU19OQU1FOgogICAgICAgIGpzLkxpdGVyYWxTdHJpbmcgbmFtZSA9IHJlYWRKc05vZGUoKTsKICAgICAgICByZXR1cm4gbmV3IEpzTmFtZUNvbnN0YW50VmFsdWUobmFtZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBleHRlZCBjb25zdGFudCB2YWx1ZSBraW5kICR7a2luZH0uIik7CiAgfQoKICBpci5UcmVlTm9kZSBfcmVhZFRyZWVOb2RlKF9NZW1iZXJEYXRhIG1lbWJlckRhdGEpIHsKICAgIF9UcmVlTm9kZUtpbmQga2luZCA9IF9yZWFkRW51bUludGVybmFsKF9UcmVlTm9kZUtpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIF9UcmVlTm9kZUtpbmQuY2xzOgogICAgICAgIHJldHVybiBfcmVhZENsYXNzRGF0YSgpLm5vZGU7CiAgICAgIGNhc2UgX1RyZWVOb2RlS2luZC5tZW1iZXI6CiAgICAgICAgcmV0dXJuIF9yZWFkTWVtYmVyRGF0YSgpLm5vZGU7CiAgICAgIGNhc2UgX1RyZWVOb2RlS2luZC5mdW5jdGlvbkRlY2xhcmF0aW9uVmFyaWFibGU6CiAgICAgICAgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBmdW5jdGlvbkRlY2xhcmF0aW9uID0gX3JlYWRUcmVlTm9kZShtZW1iZXJEYXRhKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb25EZWNsYXJhdGlvbi52YXJpYWJsZTsKICAgICAgY2FzZSBfVHJlZU5vZGVLaW5kLmZ1bmN0aW9uTm9kZToKICAgICAgICByZXR1cm4gX3JlYWRGdW5jdGlvbk5vZGUobWVtYmVyRGF0YSk7CiAgICAgIGNhc2UgX1RyZWVOb2RlS2luZC50eXBlUGFyYW1ldGVyOgogICAgICAgIHJldHVybiBfcmVhZFR5cGVQYXJhbWV0ZXIobWVtYmVyRGF0YSk7CiAgICAgIGNhc2UgX1RyZWVOb2RlS2luZC5jb25zdGFudDoKICAgICAgICBtZW1iZXJEYXRhID8/PSBfcmVhZE1lbWJlckRhdGEoKTsKICAgICAgICBpci5Db25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IF9yZWFkVHJlZU5vZGUobWVtYmVyRGF0YSk7CiAgICAgICAgaXIuQ29uc3RhbnQgY29uc3RhbnQgPQogICAgICAgICAgICBtZW1iZXJEYXRhLmdldENvbnN0YW50QnlJbmRleChleHByZXNzaW9uLCBfcmVhZEludEludGVybmFsKCkpOwogICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnRSZWZlcmVuY2UoZXhwcmVzc2lvbiwgY29uc3RhbnQpOwogICAgICBjYXNlIF9UcmVlTm9kZUtpbmQubm9kZToKICAgICAgICBtZW1iZXJEYXRhID8/PSBfcmVhZE1lbWJlckRhdGEoKTsKICAgICAgICBpbnQgaW5kZXggPSBfcmVhZEludEludGVybmFsKCk7CiAgICAgICAgaXIuVHJlZU5vZGUgdHJlZU5vZGUgPSBtZW1iZXJEYXRhLmdldFRyZWVOb2RlQnlJbmRleChpbmRleCk7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICB0cmVlTm9kZSAhPSBudWxsLAogICAgICAgICAgICAiTm8gVHJlZU5vZGUgZm91bmQgZm9yIGluZGV4ICRpbmRleCBpbiAiCiAgICAgICAgICAgICIke21lbWJlckRhdGEubm9kZX0uJF9lcnJvckNvbnRleHQiKTsKICAgICAgICByZXR1cm4gdHJlZU5vZGU7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBfVHJlZU5vZGVLaW5kICRraW5kIik7CiAgfQoKICBpci5GdW5jdGlvbk5vZGUgX3JlYWRGdW5jdGlvbk5vZGUoX01lbWJlckRhdGEgbWVtYmVyRGF0YSkgewogICAgX0Z1bmN0aW9uTm9kZUtpbmQga2luZCA9IF9yZWFkRW51bUludGVybmFsKF9GdW5jdGlvbk5vZGVLaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBfRnVuY3Rpb25Ob2RlS2luZC5wcm9jZWR1cmU6CiAgICAgICAgaXIuUHJvY2VkdXJlIHByb2NlZHVyZSA9IF9yZWFkTWVtYmVyRGF0YSgpLm5vZGU7CiAgICAgICAgcmV0dXJuIHByb2NlZHVyZS5mdW5jdGlvbjsKICAgICAgY2FzZSBfRnVuY3Rpb25Ob2RlS2luZC5jb25zdHJ1Y3RvcjoKICAgICAgICBpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IF9yZWFkTWVtYmVyRGF0YSgpLm5vZGU7CiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLmZ1bmN0aW9uOwogICAgICBjYXNlIF9GdW5jdGlvbk5vZGVLaW5kLmZ1bmN0aW9uRXhwcmVzc2lvbjoKICAgICAgICBpci5GdW5jdGlvbkV4cHJlc3Npb24gZnVuY3Rpb25FeHByZXNzaW9uID0gX3JlYWRUcmVlTm9kZShtZW1iZXJEYXRhKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb25FeHByZXNzaW9uLmZ1bmN0aW9uOwogICAgICBjYXNlIF9GdW5jdGlvbk5vZGVLaW5kLmZ1bmN0aW9uRGVjbGFyYXRpb246CiAgICAgICAgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBmdW5jdGlvbkRlY2xhcmF0aW9uID0gX3JlYWRUcmVlTm9kZShtZW1iZXJEYXRhKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb25EZWNsYXJhdGlvbi5mdW5jdGlvbjsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIF9GdW5jdGlvbk5vZGVLaW5kICRraW5kIik7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5UeXBlUGFyYW1ldGVyIHJlYWRUeXBlUGFyYW1ldGVyTm9kZSgpIHsKICAgIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kLnR5cGVQYXJhbWV0ZXJOb2RlKTsKICAgIHJldHVybiBfcmVhZFR5cGVQYXJhbWV0ZXIobnVsbCk7CiAgfQoKICBpci5UeXBlUGFyYW1ldGVyIF9yZWFkVHlwZVBhcmFtZXRlcihfTWVtYmVyRGF0YSBtZW1iZXJEYXRhKSB7CiAgICBfVHlwZVBhcmFtZXRlcktpbmQga2luZCA9IF9yZWFkRW51bUludGVybmFsKF9UeXBlUGFyYW1ldGVyS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgX1R5cGVQYXJhbWV0ZXJLaW5kLmNsczoKICAgICAgICBpci5DbGFzcyBjbHMgPSBfcmVhZENsYXNzRGF0YSgpLm5vZGU7CiAgICAgICAgcmV0dXJuIGNscy50eXBlUGFyYW1ldGVyc1tfcmVhZEludEludGVybmFsKCldOwogICAgICBjYXNlIF9UeXBlUGFyYW1ldGVyS2luZC5mdW5jdGlvbk5vZGU6CiAgICAgICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZSA9IF9yZWFkRnVuY3Rpb25Ob2RlKG1lbWJlckRhdGEpOwogICAgICAgIHJldHVybiBmdW5jdGlvbk5vZGUudHlwZVBhcmFtZXRlcnNbX3JlYWRJbnRJbnRlcm5hbCgpXTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJVbmV4cGVjdGVkIF9UeXBlUGFyYW1ldGVyS2luZCBraW5kICRraW5kIik7CiAgfQoKICB2b2lkIF9jaGVja0RhdGFLaW5kKERhdGFLaW5kIGV4cGVjdGVkS2luZCkgewogICAgaWYgKCF1c2VEYXRhS2luZHMpIHJldHVybjsKICAgIERhdGFLaW5kIGFjdHVhbEtpbmQgPSBfcmVhZEVudW1JbnRlcm5hbChEYXRhS2luZC52YWx1ZXMpOwogICAgYXNzZXJ0KAogICAgICAgIGFjdHVhbEtpbmQgPT0gZXhwZWN0ZWRLaW5kLAogICAgICAgICJJbnZhbGlkIGRhdGEga2luZC4gIgogICAgICAgICJFeHBlY3RlZCAkZXhwZWN0ZWRLaW5kLCBmb3VuZCAkYWN0dWFsS2luZC4kX2Vycm9yQ29udGV4dCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgTG9jYWwgcmVhZExvY2FsKCkgewogICAgTG9jYWxLaW5kIGtpbmQgPSByZWFkRW51bShMb2NhbEtpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIExvY2FsS2luZC5qTG9jYWw6CiAgICAgICAgTWVtYmVyRW50aXR5IG1lbWJlckNvbnRleHQgPSByZWFkTWVtYmVyKCk7CiAgICAgICAgaW50IGxvY2FsSW5kZXggPSByZWFkSW50KCk7CiAgICAgICAgcmV0dXJuIGxvY2FsTG9va3VwLmdldExvY2FsQnlJbmRleChtZW1iZXJDb250ZXh0LCBsb2NhbEluZGV4KTsKICAgICAgY2FzZSBMb2NhbEtpbmQudGhpc0xvY2FsOgogICAgICAgIENsYXNzRW50aXR5IGNscyA9IHJlYWRDbGFzcygpOwogICAgICAgIHJldHVybiBuZXcgVGhpc0xvY2FsKGNscyk7CiAgICAgIGNhc2UgTG9jYWxLaW5kLmJveExvY2FsOgogICAgICAgIENsYXNzRW50aXR5IGNscyA9IHJlYWRDbGFzcygpOwogICAgICAgIHJldHVybiBuZXcgQm94TG9jYWwoY2xzKTsKICAgICAgY2FzZSBMb2NhbEtpbmQuYW5vbnltb3VzQ2xvc3VyZUxvY2FsOgogICAgICAgIENsYXNzRW50aXR5IGNscyA9IHJlYWRDbGFzcygpOwogICAgICAgIHJldHVybiBuZXcgQW5vbnltb3VzQ2xvc3VyZUxvY2FsKGNscyk7CiAgICAgIGNhc2UgTG9jYWxLaW5kLnR5cGVWYXJpYWJsZUxvY2FsOgogICAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlID0gcmVhZERhcnRUeXBlKCk7CiAgICAgICAgcmV0dXJuIG5ldyBUeXBlVmFyaWFibGVMb2NhbCh0eXBlVmFyaWFibGUpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgbG9jYWwga2luZCAka2luZCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW1wb3J0RW50aXR5IHJlYWRJbXBvcnQoKSB7CiAgICBfY2hlY2tEYXRhS2luZChEYXRhS2luZC5pbXBvcnQpOwogICAgcmV0dXJuIF9yZWFkSW1wb3J0KCk7CiAgfQoKICBJbXBvcnRFbnRpdHkgX3JlYWRJbXBvcnQoKSB7CiAgICByZXR1cm4gX2ltcG9ydEluZGV4LnJlYWQoX3JlYWRJbXBvcnRJbnRlcm5hbCk7CiAgfQoKICBJbXBvcnRFbnRpdHkgX3JlYWRJbXBvcnRJbnRlcm5hbCgpIHsKICAgIFN0cmluZyBuYW1lID0gcmVhZFN0cmluZ09yTnVsbCgpOwogICAgVXJpIHVyaSA9IF9yZWFkVXJpKCk7CiAgICBVcmkgZW5jbG9zaW5nTGlicmFyeVVyaSA9IF9yZWFkVXJpKCk7CiAgICBib29sIGlzRGVmZXJyZWQgPSBfcmVhZEJvb2woKTsKICAgIHJldHVybiBuZXcgSW1wb3J0RW50aXR5KGlzRGVmZXJyZWQsIG5hbWUsIHVyaSwgZW5jbG9zaW5nTGlicmFyeVVyaSk7CiAgfQoKICBAb3ZlcnJpZGUKICBPdXRwdXRVbml0IHJlYWRPdXRwdXRVbml0UmVmZXJlbmNlKCkgewogICAgYXNzZXJ0KAogICAgICAgIF9jb2RlZ2VuUmVhZGVyICE9IG51bGwsCiAgICAgICAgIkNhbiBub3QgZGVzZXJpYWxpemUgYW4gT3V0cHV0VW5pdCByZWZlcmVuY2UgIgogICAgICAgICJ3aXRob3V0IGEgcmVnaXN0ZXJlZCBjb2RlZ2VuIHJlYWRlci4iKTsKICAgIHJldHVybiBfY29kZWdlblJlYWRlci5yZWFkT3V0cHV0VW5pdFJlZmVyZW5jZSh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgcmVhZEFic3RyYWN0VmFsdWUoKSB7CiAgICBhc3NlcnQoCiAgICAgICAgX2NvZGVnZW5SZWFkZXIgIT0gbnVsbCwKICAgICAgICAiQ2FuIG5vdCBkZXNlcmlhbGl6ZSBhbiBBYnN0cmFjdFZhbHVlICIKICAgICAgICAid2l0aG91dCBhIHJlZ2lzdGVyZWQgY29kZWdlbiByZWFkZXIuIik7CiAgICByZXR1cm4gX2NvZGVnZW5SZWFkZXIucmVhZEFic3RyYWN0VmFsdWUodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBqcy5Ob2RlIHJlYWRKc05vZGUoKSB7CiAgICBhc3NlcnQoX2NvZGVnZW5SZWFkZXIgIT0gbnVsbCwKICAgICAgICAiQ2FuIG5vdCBkZXNlcmlhbGl6ZSBhIEpTIG5vZGUgd2l0aG91dCBhIHJlZ2lzdGVyZWQgY29kZWdlbiByZWFkZXIuIik7CiAgICByZXR1cm4gX2NvZGVnZW5SZWFkZXIucmVhZEpzTm9kZSh0aGlzKTsKICB9CgogIC8vLyBBY3R1YWwgZGVzZXJpYWxpemF0aW9uIG9mIGEgc2VjdGlvbiBiZWdpbiB0YWcsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgdm9pZCBfYmVnaW4oU3RyaW5nIHRhZyk7CgogIC8vLyBBY3R1YWwgZGVzZXJpYWxpemF0aW9uIG9mIGEgc2VjdGlvbiBlbmQgdGFnLCBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgogIHZvaWQgX2VuZChTdHJpbmcgdGFnKTsKCiAgLy8vIEFjdHVhbCBkZXNlcmlhbGl6YXRpb24gb2YgYSBzdHJpbmcgdmFsdWUsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgU3RyaW5nIF9yZWFkU3RyaW5nSW50ZXJuYWwoKTsKCiAgLy8vIEFjdHVhbCBkZXNlcmlhbGl6YXRpb24gb2YgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkKICAvLy8gc3ViY2xhc3Nlcy4KICBpbnQgX3Jl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dWZmZXJlZFNpbmsgX2J1ZmZlcmVkU2luazsKICBpbnQgX2xlbmd0aCA9IDA7CgogIEJpbmFyeVNpbmsodGhpcy5zaW5rLAogICAgICB7Ym9vbCB1c2VEYXRhS2luZHM6IGZhbHNlLCBNYXA8U3RyaW5nLCBpbnQ+IHRhZ0ZyZXF1ZW5jeU1hcH0pCiAgICAgIDogX2J1ZmZlcmVkU2luayA9IG5ldyBCdWZmZXJlZFNpbmsoc2luayksCiAgICAgICAgc3VwZXIodXNlRGF0YUtpbmRzOiB1c2VEYXRhS2luZHMsIHRhZ0ZyZXF1ZW5jeU1hcDogdGFnRnJlcXVlbmN5TWFwKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBfYmVnaW4oU3RyaW5nIHRhZykgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCB0YWdzIGluIGJpbmFyeSBzZXJpYWxpemF0aW9uPwogIH0KICBAb3ZlcnJpZGUKICB2b2lkIF9lbmQoU3RyaW5nIHRhZykgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCB0YWdzIGluIGJpbmFyeSBzZXJpYWxpemF0aW9uPwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfd3JpdGVVcmlJbnRlcm5hbChVcmkgdmFsdWUpIHsKICAgIF93cml0ZVN0cmluZyh2YWx1ZS50b1N0cmluZygpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX3dyaXRlU3RyaW5nSW50ZXJuYWwoU3RyaW5nIHZhbHVlKSB7CiAgICBMaXN0PGludD4gYnl0ZXMgPSB1dGY4LmVuY29kZSh2YWx1ZSk7CiAgICBfd3JpdGVJbnRJbnRlcm5hbChieXRlcy5sZW5ndGgpOwogICAgX2J1ZmZlcmVkU2luay5hZGRCeXRlcyhieXRlcyk7CiAgICBfbGVuZ3RoICs9IGJ5dGVzLmxlbmd0aDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX3dyaXRlSW50SW50ZXJuYWwoaW50IHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgPj0gMCAmJiB2YWx1ZSA+PiAzMCA9PSAwKTsKICAgIGlmICh2YWx1ZSA8IDB4ODApIHsKICAgICAgX2J1ZmZlcmVkU2luay5hZGRCeXRlKHZhbHVlKTsKICAgICAgX2xlbmd0aCArPSAxOwogICAgfSBlbHNlIGlmICh2YWx1ZSA8IDB4NDAwMCkgewogICAgICBfYnVmZmVyZWRTaW5rLmFkZEJ5dGUyKCh2YWx1ZSA+PiA4KSB8IDB4ODAsIHZhbHVlICYgMHhGRik7CiAgICAgIF9sZW5ndGggKz0gMjsKICAgIH0gZWxzZSB7CiAgICAgIF9idWZmZXJlZFNpbmsuYWRkQnl0ZTQoKHZhbHVlID4+IDI0KSB8IDB4QzAsICh2YWx1ZSA+PiAxNikgJiAweEZGLAogICAgICAgICAgKHZhbHVlID4+IDgpICYgMHhGRiwgdmFsdWUgJiAweEZGKTsKICAgICAgX2xlbmd0aCArPSA0OwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfd3JpdGVFbnVtSW50ZXJuYWwoZHluYW1pYyB2YWx1ZSkgewogICAgX3dyaXRlSW50SW50ZXJuYWwodmFsdWUuaW5kZXgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9idWZmZXJlZFNpbmsuZmx1c2hBbmREZXN0cm95KCk7CiAgICBfYnVmZmVyZWRTaW5rID0gbnVsbDsKICAgIHNpbmsuY2xvc2UoKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byB0aGlzIGRhdGEgc2luay4KICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbGVuZ3RoOwp9CksATk48AR4BOAQ3LB4eEwEYRDBNAQwcQgQMGkIEAQwmJAQBDCwqJSMdBAEMJiwYJBQhQRQNSS4UBgQBDCskBAEMESUaEgQBPQwdAgEzcGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi9iaW5hcnlfc2luay5kYXJ0PnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NlcmlhbGl6YXRpb24vYmluYXJ5X3NvdXJjZS5kYXJ0hxkvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiAnc2VyaWFsaXphdGlvbi5kYXJ0JzsKCi8vLyBbRGF0YVNvdXJjZV0gdGhhdCByZWFkcyBkYXRhIGZyb20gYSBzZXF1ZW5jZSBvZiBieXRlcy4KLy8vCi8vLyBUaGlzIGRhdGEgc291cmNlIHdvcmtzIHRvZ2V0aGVyIHdpdGggW0JpbmFyeVNpbmtdLgpjbGFzcyBCaW5hcnlTb3VyY2VJbXBsIGV4dGVuZHMgQWJzdHJhY3REYXRhU291cmNlIHsKICBpbnQgX2J5dGVPZmZzZXQgPSAwOwogIGZpbmFsIExpc3Q8aW50PiBfYnl0ZXM7CgogIEJpbmFyeVNvdXJjZUltcGwodGhpcy5fYnl0ZXMsIHtib29sIHVzZURhdGFLaW5kczogZmFsc2V9KQogICAgICA6IHN1cGVyKHVzZURhdGFLaW5kczogdXNlRGF0YUtpbmRzKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBfYmVnaW4oU3RyaW5nIHRhZykge30KICBAb3ZlcnJpZGUKICB2b2lkIF9lbmQoU3RyaW5nIHRhZykge30KCiAgaW50IF9yZWFkQnl0ZSgpID0+IF9ieXRlc1tfYnl0ZU9mZnNldCsrXTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIF9yZWFkU3RyaW5nSW50ZXJuYWwoKSB7CiAgICBpbnQgbGVuZ3RoID0gX3JlYWRJbnRJbnRlcm5hbCgpOwogICAgTGlzdDxpbnQ+IGJ5dGVzID0gbmV3IFVpbnQ4TGlzdChsZW5ndGgpOwogICAgYnl0ZXMuc2V0UmFuZ2UoMCwgYnl0ZXMubGVuZ3RoLCBfYnl0ZXMsIF9ieXRlT2Zmc2V0KTsKICAgIF9ieXRlT2Zmc2V0ICs9IGJ5dGVzLmxlbmd0aDsKICAgIHJldHVybiB1dGY4LmRlY29kZShieXRlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgX3JlYWRJbnRJbnRlcm5hbCgpIHsKICAgIHZhciBieXRlID0gX3JlYWRCeXRlKCk7CiAgICBpZiAoYnl0ZSAmIDB4ODAgPT0gMCkgewogICAgICAvLyAweHh4eHh4eAogICAgICByZXR1cm4gYnl0ZTsKICAgIH0gZWxzZSBpZiAoYnl0ZSAmIDB4NDAgPT0gMCkgewogICAgICAvLyAxMHh4eHh4eAogICAgICByZXR1cm4gKChieXRlICYgMHgzRikgPDwgOCkgfCBfcmVhZEJ5dGUoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIDExeHh4eHh4CiAgICAgIHJldHVybiAoKGJ5dGUgJiAweDNGKSA8PCAyNCkgfAogICAgICAgICAgKF9yZWFkQnl0ZSgpIDw8IDE2KSB8CiAgICAgICAgICAoX3JlYWRCeXRlKCkgPDwgOCkgfAogICAgICAgICAgX3JlYWRCeXRlKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBVcmkgX3JlYWRVcmlJbnRlcm5hbCgpIHsKICAgIFN0cmluZyB0ZXh0ID0gX3JlYWRTdHJpbmcoKTsKICAgIHJldHVybiBVcmkucGFyc2UodGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBFIF9yZWFkRW51bUludGVybmFsPEU+KExpc3Q8RT4gdmFsdWVzKSB7CiAgICBpbnQgaW5kZXggPSBfcmVhZEludEludGVybmFsKCk7CiAgICBhc3NlcnQoCiAgICAgICAgMCA8PSBpbmRleCAmJiBpbmRleCA8IHZhbHVlcy5sZW5ndGgsCiAgICAgICAgIkludmFsaWQgZGF0YSBraW5kIGluZGV4LiAiCiAgICAgICAgIkV4cGVjdGVkIG9uZSBvZiAkdmFsdWVzLCBmb3VuZCBpbmRleCAkaW5kZXguIik7CiAgICByZXR1cm4gdmFsdWVzW2luZGV4XTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2Vycm9yQ29udGV4dCA9PiAnIE9mZnNldCAkX2J5dGVPZmZzZXQgaW4gJHtfYnl0ZXMubGVuZ3RofS4nOwp9CkcATk48AR4BOwQ3NBcaATwrAQwdDBsBLAEMISUtOiEfBAEMGxwcEhMjEjENEiUgHxcGBAEMGyEcBAEMKyQMLSQ5GgQBDEsCATVwYWNrYWdlOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uL2JpbmFyeV9zb3VyY2UuZGFydDhzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zZXJpYWxpemF0aW9uL2hlbHBlcnMuZGFydK1GLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgJ3NlcmlhbGl6YXRpb24uZGFydCc7CgovLy8gRW51bSB2YWx1ZXMgdXNlZCBmb3IgaWRlbnRpZnlpbmcgZGlmZmVyZW50IGtpbmRzIG9mIHNlcmlhbGl6ZWQgZGF0YS4KLy8vCi8vLyBUaGlzIGlzIHVzZWQgdG8gZm9yIGRlYnVnZ2luZyBkYXRhIGluY29uc2lzdGVuY2llcyBiZXR3ZWVuIHNlcmlhbGl6YXRpb24KLy8vIGFuZCBkZXNlcmlhbGl6YXRpb24uCmVudW0gRGF0YUtpbmQgewogIGJvb2wsCiAgdWludDMwLAogIHN0cmluZywKICBlbnVtVmFsdWUsCiAgdXJpLAogIGxpYnJhcnlOb2RlLAogIGNsYXNzTm9kZSwKICB0eXBlZGVmTm9kZSwKICBtZW1iZXJOb2RlLAogIHRyZWVOb2RlLAogIHR5cGVQYXJhbWV0ZXJOb2RlLAogIGRhcnRUeXBlLAogIGRhcnRUeXBlTm9kZSwKICBzb3VyY2VTcGFuLAogIGNvbnN0YW50LAogIGltcG9ydCwKICBkb3VibGUsCiAgaW50LAp9CgovLy8gRW51bSB1c2VkIGZvciBpZGVudGlmeWluZyB0aGUgZW5jbG9zaW5nIGVudGl0eSBvZiBhIG1lbWJlciBpbiBzZXJpYWxpemF0aW9uLgplbnVtIE1lbWJlckNvbnRleHRLaW5kIHsgbGlicmFyeSwgY2xzIH0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIFtMb2NhbF0gc3ViY2xhc3NlcyBpbiBzZXJpYWxpemF0aW9uLgplbnVtIExvY2FsS2luZCB7CiAgakxvY2FsLAogIHRoaXNMb2NhbCwKICBib3hMb2NhbCwKICBhbm9ueW1vdXNDbG9zdXJlTG9jYWwsCiAgdHlwZVZhcmlhYmxlTG9jYWwsCn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIFtpci5UcmVlTm9kZV0gc3ViY2xhc3NlcyBpbiBzZXJpYWxpemF0aW9uLgplbnVtIF9UcmVlTm9kZUtpbmQgewogIGNscywKICBtZW1iZXIsCiAgbm9kZSwKICBmdW5jdGlvbk5vZGUsCiAgdHlwZVBhcmFtZXRlciwKICBmdW5jdGlvbkRlY2xhcmF0aW9uVmFyaWFibGUsCiAgY29uc3RhbnQsCn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIFtpci5GdW5jdGlvbk5vZGVdIGNvbnRleHQgaW4gc2VyaWFsaXphdGlvbi4KZW51bSBfRnVuY3Rpb25Ob2RlS2luZCB7CiAgcHJvY2VkdXJlLAogIGNvbnN0cnVjdG9yLAogIGZ1bmN0aW9uRXhwcmVzc2lvbiwKICBmdW5jdGlvbkRlY2xhcmF0aW9uLAp9CgovLy8gRW51bSB1c2VkIGZvciBpZGVudGlmeWluZyBbaXIuVHlwZVBhcmFtZXRlcl0gY29udGV4dCBpbiBzZXJpYWxpemF0aW9uLgplbnVtIF9UeXBlUGFyYW1ldGVyS2luZCB7CiAgY2xzLAogIGZ1bmN0aW9uTm9kZSwKfQoKLy8vIENsYXNzIHVzZWQgZm9yIGVuY29kaW5nIHRhZ3MgaW4gW09iamVjdFNpbmtdIGFuZCBbT2JqZWN0U291cmNlXS4KY2xhc3MgVGFnIHsKICBmaW5hbCBTdHJpbmcgdmFsdWU7CgogIFRhZyh0aGlzLnZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB2YWx1ZS5oYXNoQ29kZSAqIDEzOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFRhZykgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHZhbHVlID09IG90aGVyLnZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1RhZygkdmFsdWUpJzsKfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW0RhcnRUeXBlXSBzdWJjbGFzc2VzIGluIHNlcmlhbGl6YXRpb24uCmVudW0gRGFydFR5cGVLaW5kIHsKICBub25lLAogIHZvaWRUeXBlLAogIHR5cGVWYXJpYWJsZSwKICBmdW5jdGlvblR5cGVWYXJpYWJsZSwKICBmdW5jdGlvblR5cGUsCiAgaW50ZXJmYWNlVHlwZSwKICB0eXBlZGVmLAogIGR5bmFtaWNUeXBlLAogIGZ1dHVyZU9yLAp9CgovLy8gVmlzaXRvciB0aGF0IHNlcmlhbGl6ZXMgW0RhcnRUeXBlXSBvYmplY3QgdG9nZXRoZXIgd2l0aCBbQWJzdHJhY3REYXRhU2lua10uCmNsYXNzIERhcnRUeXBlV3JpdGVyCiAgICBpbXBsZW1lbnRzIERhcnRUeXBlVmlzaXRvcjx2b2lkLCBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPj4gewogIGZpbmFsIEFic3RyYWN0RGF0YVNpbmsgX3Npbms7CgogIERhcnRUeXBlV3JpdGVyKHRoaXMuX3NpbmspOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0KGNvdmFyaWFudCBEYXJ0VHlwZSB0eXBlLAogICAgICAgICAgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSA9PgogICAgICB0eXBlLmFjY2VwdCh0aGlzLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwoKICB2b2lkIHZpc2l0VHlwZXMoCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVzLCBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIF9zaW5rLndyaXRlSW50KHR5cGVzLmxlbmd0aCk7CiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAgX3NpbmsuX3dyaXRlRGFydFR5cGUodHlwZSwgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWb2lkVHlwZShjb3ZhcmlhbnQgVm9pZFR5cGUgdHlwZSwKICAgICAgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVLaW5kLnZvaWRUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlVmFyaWFibGVUeXBlKGNvdmFyaWFudCBUeXBlVmFyaWFibGVUeXBlIHR5cGUsCiAgICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlS2luZC50eXBlVmFyaWFibGUpOwogICAgSW5kZXhlZFR5cGVWYXJpYWJsZSB0eXBlVmFyaWFibGUgPSB0eXBlLmVsZW1lbnQ7CiAgICBfc2luay53cml0ZVR5cGVWYXJpYWJsZSh0eXBlVmFyaWFibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uVHlwZVZhcmlhYmxlKGNvdmFyaWFudCBGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlLAogICAgICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIGludCBpbmRleCA9IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcy5pbmRleE9mKHR5cGUpOwogICAgaWYgKGluZGV4ID09IC0xKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIGZyZWUgdmFyaWFibGVzLgogICAgICBfc2luay5fd3JpdGVEYXJ0VHlwZShjb25zdCBEeW5hbWljVHlwZSgpLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgfSBlbHNlIHsKICAgICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlS2luZC5mdW5jdGlvblR5cGVWYXJpYWJsZSk7CiAgICAgIF9zaW5rLndyaXRlSW50KGluZGV4KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvblR5cGUoY292YXJpYW50IEZ1bmN0aW9uVHlwZSB0eXBlLAogICAgICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZUtpbmQuZnVuY3Rpb25UeXBlKTsKICAgIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyA9CiAgICAgICAgbmV3IExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+LmZyb20oZnVuY3Rpb25UeXBlVmFyaWFibGVzKQogICAgICAgICAgLi5hZGRBbGwodHlwZS50eXBlVmFyaWFibGVzKTsKICAgIF9zaW5rLndyaXRlSW50KHR5cGUudHlwZVZhcmlhYmxlcy5sZW5ndGgpOwogICAgZm9yIChGdW5jdGlvblR5cGVWYXJpYWJsZSB2YXJpYWJsZSBpbiB0eXBlLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgX3NpbmsuX3dyaXRlRGFydFR5cGUodmFyaWFibGUuYm91bmQsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICB9CiAgICBfc2luay5fd3JpdGVEYXJ0VHlwZSh0eXBlLnJldHVyblR5cGUsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICB2aXNpdFR5cGVzKHR5cGUucGFyYW1ldGVyVHlwZXMsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICB2aXNpdFR5cGVzKHR5cGUub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIHZpc2l0VHlwZXModHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgZm9yIChTdHJpbmcgbmFtZWRQYXJhbWV0ZXIgaW4gdHlwZS5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgX3Npbmsud3JpdGVTdHJpbmcobmFtZWRQYXJhbWV0ZXIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVyZmFjZVR5cGUoY292YXJpYW50IEludGVyZmFjZVR5cGUgdHlwZSwKICAgICAgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVLaW5kLmludGVyZmFjZVR5cGUpOwogICAgX3Npbmsud3JpdGVDbGFzcyh0eXBlLmVsZW1lbnQpOwogICAgdmlzaXRUeXBlcyh0eXBlLnR5cGVBcmd1bWVudHMsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZWRlZlR5cGUoY292YXJpYW50IFR5cGVkZWZUeXBlIHR5cGUsCiAgICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlS2luZC50eXBlZGVmKTsKICAgIF9zaW5rLndyaXRlVHlwZWRlZih0eXBlLmVsZW1lbnQpOwogICAgdmlzaXRUeXBlcyh0eXBlLnR5cGVBcmd1bWVudHMsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICBfc2luay5fd3JpdGVEYXJ0VHlwZSh0eXBlLnVuYWxpYXNlZCwgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREeW5hbWljVHlwZShjb3ZhcmlhbnQgRHluYW1pY1R5cGUgdHlwZSwKICAgICAgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVLaW5kLmR5bmFtaWNUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdXR1cmVPclR5cGUoY292YXJpYW50IEZ1dHVyZU9yVHlwZSB0eXBlLAogICAgICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZUtpbmQuZnV0dXJlT3IpOwogICAgX3NpbmsuX3dyaXRlRGFydFR5cGUodHlwZS50eXBlQXJndW1lbnQsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgfQp9CgovLy8gRW51bSB1c2VkIGZvciBpZGVudGlmeWluZyBbaXIuRGFydFR5cGVdIHN1YmNsYXNzZXMgaW4gc2VyaWFsaXphdGlvbi4KZW51bSBEYXJ0VHlwZU5vZGVLaW5kIHsKICBub25lLAogIHZvaWRUeXBlLAogIHR5cGVQYXJhbWV0ZXJUeXBlLAogIGZ1bmN0aW9uVHlwZSwKICBmdW5jdGlvblR5cGVWYXJpYWJsZSwKICBpbnRlcmZhY2VUeXBlLAogIHR5cGVkZWYsCiAgZHluYW1pY1R5cGUsCiAgYm90dG9tVHlwZSwKICBpbnZhbGlkVHlwZSwKICB0aGlzSW50ZXJmYWNlVHlwZSwKICBleGFjdEludGVyZmFjZVR5cGUsCiAgZG9lc05vdENvbXBsZXRlLAp9Cgpjb25zdCBTdHJpbmcgZnVuY3Rpb25UeXBlTm9kZVRhZyA9ICdmdW5jdGlvbi10eXBlLW5vZGUnOwoKY2xhc3MgRGFydFR5cGVOb2RlV3JpdGVyCiAgICBleHRlbmRzIGlyLkRhcnRUeXBlVmlzaXRvcjE8dm9pZCwgTGlzdDxpci5UeXBlUGFyYW1ldGVyPj4gewogIGZpbmFsIEFic3RyYWN0RGF0YVNpbmsgX3Npbms7CgogIERhcnRUeXBlTm9kZVdyaXRlcih0aGlzLl9zaW5rKTsKCiAgdm9pZCB2aXNpdFR5cGVzKAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlcywgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIF9zaW5rLndyaXRlSW50KHR5cGVzLmxlbmd0aCk7CiAgICBmb3IgKGlyLkRhcnRUeXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAgX3NpbmsuX3dyaXRlRGFydFR5cGVOb2RlKHR5cGUsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHREYXJ0VHlwZSgKICAgICAgaXIuRGFydFR5cGUgbm9kZSwgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJVbmV4cGVjdGVkIGlyLkRhcnRUeXBlICRub2RlICgke25vZGUucnVudGltZVR5cGV9KS4iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnZhbGlkVHlwZSgKICAgICAgaXIuSW52YWxpZFR5cGUgbm9kZSwgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZU5vZGVLaW5kLmludmFsaWRUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREeW5hbWljVHlwZSgKICAgICAgaXIuRHluYW1pY1R5cGUgbm9kZSwgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZU5vZGVLaW5kLmR5bmFtaWNUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWb2lkVHlwZSgKICAgICAgaXIuVm9pZFR5cGUgbm9kZSwgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZU5vZGVLaW5kLnZvaWRUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCb3R0b21UeXBlKAogICAgICBpci5Cb3R0b21UeXBlIG5vZGUsIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBpZiAobm9kZSA9PSBjb25zdCBEb2VzTm90Q29tcGxldGVUeXBlKCkpIHsKICAgICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlTm9kZUtpbmQuZG9lc05vdENvbXBsZXRlKTsKICAgIH0gZWxzZSB7CiAgICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZU5vZGVLaW5kLmJvdHRvbVR5cGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVyZmFjZVR5cGUoCiAgICAgIGlyLkludGVyZmFjZVR5cGUgbm9kZSwgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIGlmIChub2RlIGlzIFRoaXNJbnRlcmZhY2VUeXBlKSB7CiAgICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZU5vZGVLaW5kLnRoaXNJbnRlcmZhY2VUeXBlKTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBFeGFjdEludGVyZmFjZVR5cGUpIHsKICAgICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlTm9kZUtpbmQuZXhhY3RJbnRlcmZhY2VUeXBlKTsKICAgIH0gZWxzZSB7CiAgICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZU5vZGVLaW5kLmludGVyZmFjZVR5cGUpOwogICAgfQogICAgX3Npbmsud3JpdGVDbGFzc05vZGUobm9kZS5jbGFzc05vZGUpOwogICAgdmlzaXRUeXBlcyhub2RlLnR5cGVBcmd1bWVudHMsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25UeXBlKAogICAgICBpci5GdW5jdGlvblR5cGUgbm9kZSwgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiBmdW5jdGlvblR5cGVWYXJpYWJsZXMpIHsKICAgIF9zaW5rLndyaXRlRW51bShEYXJ0VHlwZU5vZGVLaW5kLmZ1bmN0aW9uVHlwZSk7CiAgICBfc2luay5iZWdpbihmdW5jdGlvblR5cGVOb2RlVGFnKTsKICAgIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyA9CiAgICAgICAgbmV3IExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4uZnJvbShmdW5jdGlvblR5cGVWYXJpYWJsZXMpCiAgICAgICAgICAuLmFkZEFsbChub2RlLnR5cGVQYXJhbWV0ZXJzKTsKICAgIF9zaW5rLndyaXRlSW50KG5vZGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoKTsKICAgIGZvciAoaXIuVHlwZVBhcmFtZXRlciBwYXJhbWV0ZXIgaW4gbm9kZS50eXBlUGFyYW1ldGVycykgewogICAgICBfc2luay53cml0ZVN0cmluZyhwYXJhbWV0ZXIubmFtZSk7CiAgICAgIF9zaW5rLl93cml0ZURhcnRUeXBlTm9kZShwYXJhbWV0ZXIuYm91bmQsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICAgIF9zaW5rLl93cml0ZURhcnRUeXBlTm9kZShwYXJhbWV0ZXIuZGVmYXVsdFR5cGUsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICB9CiAgICBfc2luay5fd3JpdGVEYXJ0VHlwZU5vZGUobm9kZS5yZXR1cm5UeXBlLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMpOwogICAgX3Npbmsud3JpdGVJbnQobm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KTsKICAgIHZpc2l0VHlwZXMobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycywgZnVuY3Rpb25UeXBlVmFyaWFibGVzKTsKICAgIF9zaW5rLndyaXRlSW50KG5vZGUubmFtZWRQYXJhbWV0ZXJzLmxlbmd0aCk7CiAgICBmb3IgKGlyLk5hbWVkVHlwZSBwYXJhbWV0ZXIgaW4gbm9kZS5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgX3Npbmsud3JpdGVTdHJpbmcocGFyYW1ldGVyLm5hbWUpOwogICAgICBfc2luay5fd3JpdGVEYXJ0VHlwZU5vZGUocGFyYW1ldGVyLnR5cGUsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgICB9CiAgICBfc2luay5fd3JpdGVEYXJ0VHlwZU5vZGUobm9kZS50eXBlZGVmVHlwZSwgZnVuY3Rpb25UeXBlVmFyaWFibGVzLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBfc2luay5lbmQoZnVuY3Rpb25UeXBlTm9kZVRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoCiAgICAgIGlyLlR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUsIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gZnVuY3Rpb25UeXBlVmFyaWFibGVzKSB7CiAgICBpbnQgaW5kZXggPSBmdW5jdGlvblR5cGVWYXJpYWJsZXMuaW5kZXhPZihub2RlLnBhcmFtZXRlcik7CiAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlTm9kZUtpbmQuZnVuY3Rpb25UeXBlVmFyaWFibGUpOwogICAgICBfc2luay53cml0ZUludChpbmRleCk7CiAgICAgIF9zaW5rLl93cml0ZURhcnRUeXBlTm9kZShub2RlLnByb21vdGVkQm91bmQsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcywKICAgICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBfc2luay53cml0ZUVudW0oRGFydFR5cGVOb2RlS2luZC50eXBlUGFyYW1ldGVyVHlwZSk7CiAgICAgIF9zaW5rLndyaXRlVHlwZVBhcmFtZXRlck5vZGUobm9kZS5wYXJhbWV0ZXIpOwogICAgICBfc2luay5fd3JpdGVEYXJ0VHlwZU5vZGUobm9kZS5wcm9tb3RlZEJvdW5kLCBmdW5jdGlvblR5cGVWYXJpYWJsZXMsCiAgICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVkZWZUeXBlKAogICAgICBpci5UeXBlZGVmVHlwZSBub2RlLCBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IGZ1bmN0aW9uVHlwZVZhcmlhYmxlcykgewogICAgX3Npbmsud3JpdGVFbnVtKERhcnRUeXBlTm9kZUtpbmQudHlwZWRlZik7CiAgICBfc2luay53cml0ZVR5cGVkZWZOb2RlKG5vZGUudHlwZWRlZk5vZGUpOwogICAgdmlzaXRUeXBlcyhub2RlLnR5cGVBcmd1bWVudHMsIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcyk7CiAgfQp9CgovLy8gRGF0YSBzaW5rIGhlbHBlciB0aGF0IGNhbm9uaWNhbGl6ZXMgW0VdIHZhbHVlcyB1c2luZyBpbmRpY2VzLgpjbGFzcyBJbmRleGVkU2luazxFPiB7CiAgZmluYWwgQWJzdHJhY3REYXRhU2luayBfc2luazsKICBmaW5hbCBNYXA8RSwgaW50PiBfY2FjaGUgPSB7bnVsbDogMH07IC8vIHNsb3QgMCBpcyBwcmUtYWxsb2NhdGVkIHRvIGBudWxsYC4KCiAgSW5kZXhlZFNpbmsodGhpcy5fc2luayk7CgogIC8vLyBXcml0ZSBhIHJlZmVyZW5jZSB0byBbdmFsdWVdIHRvIHRoZSBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIElmIFt2YWx1ZV0gaGFzIG5vdCBiZWVuIGNhbm9uaWNhbGl6ZWQgeWV0LCBbd3JpdGVWYWx1ZV0gaXMgY2FsbGVkIHRvCiAgLy8vIHNlcmlhbGl6ZSB0aGUgW3ZhbHVlXSBpdHNlbGYuCiAgdm9pZCB3cml0ZShFIHZhbHVlLCB2b2lkIHdyaXRlVmFsdWUoRSB2YWx1ZSkpIHsKICAgIGNvbnN0IGludCBwZW5kaW5nID0gLTE7CiAgICBpbnQgaW5kZXggPSBfY2FjaGVbdmFsdWVdOwogICAgaWYgKGluZGV4ID09IG51bGwpIHsKICAgICAgaW5kZXggPSBfY2FjaGUubGVuZ3RoOwogICAgICBfc2luay5fd3JpdGVJbnRJbnRlcm5hbChpbmRleCk7CiAgICAgIF9jYWNoZVt2YWx1ZV0gPSBwZW5kaW5nOyAvLyBJbmNyZW1lbnRzIGxlbmd0aCB0byBhbGxvY2F0ZSBzbG90LgogICAgICB3cml0ZVZhbHVlKHZhbHVlKTsKICAgICAgX2NhY2hlW3ZhbHVlXSA9IGluZGV4OwogICAgfSBlbHNlIGlmIChpbmRleCA9PSBwZW5kaW5nKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoIkN5Y2xpYyBkZXBlbmRlbmN5IG9uIGNhY2hlZCB2YWx1ZTogJHZhbHVlIik7CiAgICB9IGVsc2UgewogICAgICBfc2luay5fd3JpdGVJbnRJbnRlcm5hbChpbmRleCk7CiAgICB9CiAgfQp9CgovLy8gRGF0YSBzb3VyY2UgaGVscGVyIHJlYWRzIGNhbm9uaWNhbGl6ZWQgW0VdIHZhbHVlcyB0aHJvdWdoIGluZGljZXMuCmNsYXNzIEluZGV4ZWRTb3VyY2U8RT4gewogIGZpbmFsIEFic3RyYWN0RGF0YVNvdXJjZSBfc291cmNlOwogIGZpbmFsIExpc3Q8RT4gX2NhY2hlID0gW251bGxdOyAvLyBzbG90IDAgaXMgcHJlLWFsbG9jYXRlZCB0byBgbnVsbGAuCgogIEluZGV4ZWRTb3VyY2UodGhpcy5fc291cmNlKTsKCiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGFuIFtFXSB2YWx1ZSBmcm9tIHRoZSBkYXRhIHNvdXJjZS4KICAvLy8KICAvLy8gSWYgdGhlIHZhbHVlIGhhc24ndCB5ZXQgYmVlbiByZWFkLCBbcmVhZFZhbHVlXSBpcyBjYWxsZWQgdG8gZGVzZXJpYWxpemUKICAvLy8gdGhlIHZhbHVlIGl0c2VsZi4KICBFIHJlYWQoRSByZWFkVmFsdWUoKSkgewogICAgaW50IGluZGV4ID0gX3NvdXJjZS5fcmVhZEludEludGVybmFsKCk7CiAgICBpZiAoaW5kZXggPj0gX2NhY2hlLmxlbmd0aCkgewogICAgICBhc3NlcnQoaW5kZXggPT0gX2NhY2hlLmxlbmd0aCk7CiAgICAgIF9jYWNoZS5hZGQobnVsbCk7IC8vIHBsYWNlaG9sZGVyLgogICAgICBFIHZhbHVlID0gcmVhZFZhbHVlKCk7CiAgICAgIF9jYWNoZVtpbmRleF0gPSB2YWx1ZTsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgRSB2YWx1ZSA9IF9jYWNoZVtpbmRleF07CiAgICAgIGlmICh2YWx1ZSA9PSBudWxsICYmIGluZGV4ICE9IDApIHsKICAgICAgICB0aHJvdyBTdGF0ZUVycm9yKCdVbmZpbGxlZCBpbmRleCAkaW5kZXggb2YgJEUnKTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWU7CiAgICB9CiAgfQp9CoGIAE5OPAEeAUkETRkQCAoKDQcPDQ8ODBUMEA4MCgoHAgFRKAFDEQoNDBkVAgFJFQcKCBARHwwCAUoZDQ8WFwIBSxoHEAIBRQwWARMBDCsBDBwtJSEEAQwmAgFGFAgMEBgQEQsPDAIBUBVDIAEeAQwmPzABE1AiIzkGBAEMLjosBAEMPjowNSsEAQxGOjUXNEgNOh0GBAEMNjowHEMoL0BDBkI8REE6KQYEAQw4OjEkOwQBDDQ6KyY7QQQBDDQ6LwQBDDY6LEQEAgFJGAgMFRAYEQsPDg8VFhMCATkBGUAgASIBE08iJj0GBAEMGEggQAQBDBlLMwQBDBlLMwQBDBZIMAQBDBhKLzkNNAYEAQwbTSU7LTwNNwYqOwQBDBpMNCYcPykwPilITgZGMUIxOylHBkYaJAQBDB9RPxc+HUocDTs0ShwGBAEMGUsvLjsEAgFCFyBOARsBNQZLJDIcHxkdJkYZHSNIDSYGBAIBRxkkRwEfAT4GThgaLCImKB0dFA0fKTkIFAYEAgEvcGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi9oZWxwZXJzLmRhcnQ8c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc2VyaWFsaXphdGlvbi9tZW1iZXJfZGF0YS5kYXJ0oS4vLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiAnc2VyaWFsaXphdGlvbi5kYXJ0JzsKCi8vLyBIZWxwZXIgZm9yIGxvb2tpbmcgdXAgb2JqZWN0IGxpYnJhcnkgZGF0YSBmcm9tIGFuIFtpci5Db21wb25lbnRdIG5vZGUuCmNsYXNzIENvbXBvbmVudExvb2t1cCB7CiAgZmluYWwgaXIuQ29tcG9uZW50IF9jb21wb25lbnQ7CgogIC8vLyBDYWNoZSBvZiBbX0xpYnJhcnlEYXRhXSBmb3IgbGlicmFyaWVzIGluIFtfY29tcG9uZW50XS4KICBNYXA8VXJpLCBfTGlicmFyeURhdGE+IF9saWJyYXJ5TWFwOwoKICBDb21wb25lbnRMb29rdXAodGhpcy5fY29tcG9uZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIFtfTGlicmFyeURhdGFdIG9iamVjdCBmb3IgdGhlIGxpYnJhcnkgd2l0aCB0aGUgW2Nhbm9uaWNhbFVyaV0uCiAgX0xpYnJhcnlEYXRhIGdldExpYnJhcnlEYXRhQnlVcmkoVXJpIGNhbm9uaWNhbFVyaSkgewogICAgaWYgKF9saWJyYXJ5TWFwID09IG51bGwpIHsKICAgICAgX2xpYnJhcnlNYXAgPSB7fTsKICAgICAgZm9yIChpci5MaWJyYXJ5IGxpYnJhcnkgaW4gX2NvbXBvbmVudC5saWJyYXJpZXMpIHsKICAgICAgICBfbGlicmFyeU1hcFtsaWJyYXJ5LmltcG9ydFVyaV0gPSBuZXcgX0xpYnJhcnlEYXRhKGxpYnJhcnkpOwogICAgICB9CiAgICB9CiAgICBfTGlicmFyeURhdGEgZGF0YSA9IF9saWJyYXJ5TWFwW2Nhbm9uaWNhbFVyaV07CiAgICBhc3NlcnQoZGF0YSAhPSBudWxsLCAiTm8gbGlicmFyeSBmb3VuZCBmb3IgJGNhbm9uaWNhbFVyaS4iKTsKICAgIHJldHVybiBkYXRhOwogIH0KfQoKLy8vIFJldHVybnMgYSBuYW1lIHVuaXF1ZWx5IGlkZW50aWZ5aW5nIGEgbWVtYmVyIHdpdGhpbiBpdHMgZW5jbG9zaW5nIGxpYnJhcnkKLy8vIG9yIGNsYXNzLgpTdHJpbmcgX2NvbXB1dGVNZW1iZXJOYW1lKGlyLk1lbWJlciBtZW1iZXIpIHsKICBpZiAobWVtYmVyLm5hbWUuaXNQcml2YXRlICYmCiAgICAgIG1lbWJlci5uYW1lLmxpYnJhcnlOYW1lICE9IG1lbWJlci5lbmNsb3NpbmdMaWJyYXJ5LnJlZmVyZW5jZSkgewogICAgLy8gVE9ETygzMzczMik6IEhhbmRsZSBub1N1Y2hNZXRob2QgZm9yd2FyZGVycyBmb3IgcHJpdmF0ZSBtZW1iZXJzIGZyb20KICAgIC8vIG90aGVyIGxpYnJhcmllcy4KICAgIHJldHVybiBudWxsOwogIH0KICBTdHJpbmcgbmFtZSA9IG1lbWJlci5uYW1lLm5hbWU7CiAgaWYgKG1lbWJlciBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgbmFtZSA9ICcuJG5hbWUnOwogIH0gZWxzZSBpZiAobWVtYmVyIGlzIGlyLlByb2NlZHVyZSkgewogICAgaWYgKG1lbWJlci5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuRmFjdG9yeSkgewogICAgICBuYW1lID0gJy4kbmFtZSc7CiAgICB9IGVsc2UgaWYgKG1lbWJlci5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuU2V0dGVyKSB7CiAgICAgIG5hbWUgKz0gIj0iOwogICAgfQogIH0KICByZXR1cm4gbmFtZTsKfQoKLy8vIEhlbHBlciBmb3IgbG9va2luZyB1cCBjbGFzc2VzIGFuZCBtZW1iZXJzIGZyb20gYW4gW2lyLkxpYnJhcnldIG5vZGUuCmNsYXNzIF9MaWJyYXJ5RGF0YSB7CiAgLy8vIFRoZSBbaXIuTGlicmFyeV0gdGhhdCBkZWZpbmVzIHRoZSBsaWJyYXJ5LgogIGZpbmFsIGlyLkxpYnJhcnkgbm9kZTsKCiAgLy8vIENhY2hlIG9mIFtfQ2xhc3NEYXRhXSBmb3IgY2xhc3NlcyBpbiB0aGlzIGxpYnJhcnkuCiAgTWFwPFN0cmluZywgX0NsYXNzRGF0YT4gX2NsYXNzZXNCeU5hbWU7CiAgTWFwPGlyLkNsYXNzLCBfQ2xhc3NEYXRhPiBfY2xhc3Nlc0J5Tm9kZTsKCiAgLy8vIENhY2hlIG9mIFtpci5UeXBlZGVmXSBub2RlcyBmb3IgdHlwZWRlZnMgaW4gdGhpcyBsaWJyYXJ5LgogIE1hcDxTdHJpbmcsIGlyLlR5cGVkZWY+IF90eXBlZGVmczsKCiAgLy8vIENhY2hlIG9mIFtfTWVtYmVyRGF0YV0gZm9yIG1lbWJlcnMgaW4gdGhpcyBsaWJyYXJ5LgogIE1hcDxTdHJpbmcsIF9NZW1iZXJEYXRhPiBfbWVtYmVyc0J5TmFtZTsKICBNYXA8aXIuTWVtYmVyLCBfTWVtYmVyRGF0YT4gX21lbWJlcnNCeU5vZGU7CgogIF9MaWJyYXJ5RGF0YSh0aGlzLm5vZGUpOwoKICB2b2lkIF9lbnN1cmVDbGFzc2VzKCkgewogICAgaWYgKF9jbGFzc2VzQnlOYW1lID09IG51bGwpIHsKICAgICAgX2NsYXNzZXNCeU5hbWUgPSB7fTsKICAgICAgX2NsYXNzZXNCeU5vZGUgPSB7fTsKICAgICAgZm9yIChpci5DbGFzcyBjbHMgaW4gbm9kZS5jbGFzc2VzKSB7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICAhX2NsYXNzZXNCeU5hbWUuY29udGFpbnNLZXkoY2xzLm5hbWUpLAogICAgICAgICAgICAiRHVwbGljYXRlIGNsYXNzICcke2Nscy5uYW1lfScgaW4gJF9jbGFzc2VzQnlOYW1lICIKICAgICAgICAgICAgInRyeWluZyB0byBhZGQgJGNscy4iKTsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgICFfY2xhc3Nlc0J5Tm9kZS5jb250YWluc0tleShjbHMpLAogICAgICAgICAgICAiRHVwbGljYXRlIGNsYXNzICcke2Nscy5uYW1lfScgaW4gJF9jbGFzc2VzQnlOb2RlICIKICAgICAgICAgICAgInRyeWluZyB0byBhZGQgJGNscy4iKTsKICAgICAgICBfY2xhc3Nlc0J5Tm9kZVtjbHNdID0gX2NsYXNzZXNCeU5hbWVbY2xzLm5hbWVdID0gbmV3IF9DbGFzc0RhdGEoY2xzKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtfQ2xhc3NEYXRhXSBmb3IgdGhlIGNsYXNzIFtuYW1lXSBpbiB0aGlzIGxpYnJhcnkuCiAgX0NsYXNzRGF0YSBsb29rdXBDbGFzc0J5TmFtZShTdHJpbmcgbmFtZSkgewogICAgX2Vuc3VyZUNsYXNzZXMoKTsKICAgIHJldHVybiBfY2xhc3Nlc0J5TmFtZVtuYW1lXTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbX0NsYXNzRGF0YV0gZm9yIHRoZSBjbGFzcyBbbm9kZV0gaW4gdGhpcyBsaWJyYXJ5LgogIF9DbGFzc0RhdGEgbG9va3VwQ2xhc3NCeU5vZGUoaXIuQ2xhc3Mgbm9kZSkgewogICAgX2Vuc3VyZUNsYXNzZXMoKTsKICAgIHJldHVybiBfY2xhc3Nlc0J5Tm9kZVtub2RlXTsKICB9CgogIGlyLlR5cGVkZWYgbG9va3VwVHlwZWRlZihTdHJpbmcgbmFtZSkgewogICAgaWYgKF90eXBlZGVmcyA9PSBudWxsKSB7CiAgICAgIF90eXBlZGVmcyA9IHt9OwogICAgICBmb3IgKGlyLlR5cGVkZWYgdHlwZWRlZiBpbiBub2RlLnR5cGVkZWZzKSB7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICAhX3R5cGVkZWZzLmNvbnRhaW5zS2V5KHR5cGVkZWYubmFtZSksCiAgICAgICAgICAgICJEdXBsaWNhdGUgdHlwZWRlZiAnJHt0eXBlZGVmLm5hbWV9JyBpbiAkX3R5cGVkZWZzICIKICAgICAgICAgICAgInRyeWluZyB0byBhZGQgJHR5cGVkZWYuIik7CiAgICAgICAgX3R5cGVkZWZzW3R5cGVkZWYubmFtZV0gPSB0eXBlZGVmOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX3R5cGVkZWZzW25hbWVdOwogIH0KCiAgdm9pZCBfZW5zdXJlTWVtYmVycygpIHsKICAgIGlmIChfbWVtYmVyc0J5TmFtZSA9PSBudWxsKSB7CiAgICAgIF9tZW1iZXJzQnlOYW1lID0ge307CiAgICAgIF9tZW1iZXJzQnlOb2RlID0ge307CiAgICAgIGZvciAoaXIuTWVtYmVyIG1lbWJlciBpbiBub2RlLm1lbWJlcnMpIHsKICAgICAgICBTdHJpbmcgbmFtZSA9IF9jb21wdXRlTWVtYmVyTmFtZShtZW1iZXIpOwogICAgICAgIGlmIChuYW1lID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgIV9tZW1iZXJzQnlOYW1lLmNvbnRhaW5zS2V5KG5hbWUpLAogICAgICAgICAgICAiRHVwbGljYXRlIG1lbWJlciAnJG5hbWUnIGluICRfbWVtYmVyc0J5TmFtZSAiCiAgICAgICAgICAgICJ0cnlpbmcgdG8gYWRkICRtZW1iZXIuIik7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICAhX21lbWJlcnNCeU5vZGUuY29udGFpbnNLZXkobWVtYmVyKSwKICAgICAgICAgICAgIkR1cGxpY2F0ZSBtZW1iZXIgJyRuYW1lJyBpbiAkX21lbWJlcnNCeU5vZGUgIgogICAgICAgICAgICAidHJ5aW5nIHRvIGFkZCAkbWVtYmVyLiIpOwogICAgICAgIF9tZW1iZXJzQnlOb2RlW21lbWJlcl0gPSBfbWVtYmVyc0J5TmFtZVtuYW1lXSA9IG5ldyBfTWVtYmVyRGF0YShtZW1iZXIpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW19NZW1iZXJEYXRhXSBmb3IgdGhlIG1lbWJlciB1bmlxdWVseSBpZGVudGlmaWVkIGJ5IFtuYW1lXSBpbgogIC8vLyB0aGlzIGxpYnJhcnkuCiAgX01lbWJlckRhdGEgbG9va3VwTWVtYmVyRGF0YUJ5TmFtZShTdHJpbmcgbmFtZSkgewogICAgX2Vuc3VyZU1lbWJlcnMoKTsKICAgIHJldHVybiBfbWVtYmVyc0J5TmFtZVtuYW1lXTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbX01lbWJlckRhdGFdIGZvciB0aGUgbWVtYmVyIFtub2RlXSBpbiB0aGlzIGxpYnJhcnkuCiAgX01lbWJlckRhdGEgbG9va3VwTWVtYmVyRGF0YUJ5Tm9kZShpci5NZW1iZXIgbm9kZSkgewogICAgX2Vuc3VyZU1lbWJlcnMoKTsKICAgIHJldHVybiBfbWVtYmVyc0J5Tm9kZVtub2RlXTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdfTGlicmFyeURhdGEoJG5vZGUoJHtpZGVudGl0eUhhc2hDb2RlKG5vZGUpfSkpJzsKfQoKLy8vIEhlbHBlciBmb3IgbG9va2luZyB1cCBtZW1iZXJzIGZyb20gYW4gW2lyLkNsYXNzXSBub2RlLgpjbGFzcyBfQ2xhc3NEYXRhIHsKICAvLy8gVGhlIFtpci5DbGFzc10gdGhhdCBkZWZpbmVzIHRoZSBjbGFzcy4KICBmaW5hbCBpci5DbGFzcyBub2RlOwoKICAvLy8gQ2FjaGUgb2YgW19NZW1iZXJEYXRhXSBmb3IgbWVtYmVycyBpbiB0aGlzIGNsYXNzLgogIE1hcDxTdHJpbmcsIF9NZW1iZXJEYXRhPiBfbWVtYmVyc0J5TmFtZTsKICBNYXA8aXIuTWVtYmVyLCBfTWVtYmVyRGF0YT4gX21lbWJlcnNCeU5vZGU7CgogIF9DbGFzc0RhdGEodGhpcy5ub2RlKTsKCiAgdm9pZCBfZW5zdXJlTWVtYmVycygpIHsKICAgIGlmIChfbWVtYmVyc0J5TmFtZSA9PSBudWxsKSB7CiAgICAgIF9tZW1iZXJzQnlOYW1lID0ge307CiAgICAgIF9tZW1iZXJzQnlOb2RlID0ge307CiAgICAgIGZvciAoaXIuTWVtYmVyIG1lbWJlciBpbiBub2RlLm1lbWJlcnMpIHsKICAgICAgICBTdHJpbmcgbmFtZSA9IF9jb21wdXRlTWVtYmVyTmFtZShtZW1iZXIpOwogICAgICAgIGlmIChuYW1lID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgIV9tZW1iZXJzQnlOYW1lLmNvbnRhaW5zS2V5KG5hbWUpLAogICAgICAgICAgICAiRHVwbGljYXRlIG1lbWJlciAnJG5hbWUnIGluICRfbWVtYmVyc0J5TmFtZSAiCiAgICAgICAgICAgICJ0cnlpbmcgdG8gYWRkICRtZW1iZXIuIik7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICAhX21lbWJlcnNCeU5vZGUuY29udGFpbnNLZXkobWVtYmVyKSwKICAgICAgICAgICAgIkR1cGxpY2F0ZSBtZW1iZXIgJyRuYW1lJyBpbiAkX21lbWJlcnNCeU5vZGUgIgogICAgICAgICAgICAidHJ5aW5nIHRvIGFkZCAkbWVtYmVyLiIpOwogICAgICAgIF9tZW1iZXJzQnlOb2RlW21lbWJlcl0gPSBfbWVtYmVyc0J5TmFtZVtuYW1lXSA9IG5ldyBfTWVtYmVyRGF0YShtZW1iZXIpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW19NZW1iZXJEYXRhXSBmb3IgdGhlIG1lbWJlciB1bmlxdWVseSBpZGVudGlmaWVkIGJ5IFtuYW1lXSBpbgogIC8vLyB0aGlzIGNsYXNzLgogIF9NZW1iZXJEYXRhIGxvb2t1cE1lbWJlckRhdGFCeU5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIF9lbnN1cmVNZW1iZXJzKCk7CiAgICByZXR1cm4gX21lbWJlcnNCeU5hbWVbbmFtZV07CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW19NZW1iZXJEYXRhXSBmb3IgdGhlIG1lbWJlciBbbm9kZV0gaW4gdGhpcyBjbGFzcy4KICBfTWVtYmVyRGF0YSBsb29rdXBNZW1iZXJEYXRhQnlOb2RlKGlyLk1lbWJlciBub2RlKSB7CiAgICBfZW5zdXJlTWVtYmVycygpOwogICAgcmV0dXJuIF9tZW1iZXJzQnlOb2RlW25vZGVdOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ19DbGFzc0RhdGEoJG5vZGUoJHtpZGVudGl0eUhhc2hDb2RlKG5vZGUpfSkpJzsKfQoKLy8vIEhlbHBlciBmb3IgbG9va2luZyB1cCBjaGlsZCBbaXIuVHJlZU5vZGVdcyBvZiBhIFtpci5NZW1iZXJdIG5vZGUuCmNsYXNzIF9NZW1iZXJEYXRhIHsKICAvLy8gVGhlIFtpci5NZW1iZXJdIHRoYXQgZGVmaW5lcyB0aGUgbWVtYmVyLgogIGZpbmFsIGlyLk1lbWJlciBub2RlOwoKICAvLy8gQ2FjaGVkIGluZGV4IHRvIFtpci5UcmVlTm9kZV0gbWFwIHVzZWQgZm9yIGRlc2VyaWFsaXphdGlvbiBvZgogIC8vLyBbaXIuVHJlZU5vZGVdcy4KICBNYXA8aW50LCBpci5UcmVlTm9kZT4gX2luZGV4VG9Ob2RlTWFwOwoKICAvLy8gQ2FjaGVkIFtpci5UcmVlTm9kZV0gdG8gaW5kZXggbWFwIHVzZWQgZm9yIHNlcmlhbGl6YXRpb24gb2YKICAvLy8gW2lyLlRyZWVOb2RlXXMuCiAgTWFwPGlyLlRyZWVOb2RlLCBpbnQ+IF9ub2RlVG9JbmRleE1hcDsKCiAgLy8vIENhY2hlZCBbaXIuQ29uc3RhbnRFeHByZXNzaW9uXSB0byBbX0NvbnN0YW50Tm9kZUluZGV4ZXJWaXNpdG9yXSBtYXAgdXNlZAogIC8vLyBmb3IgZmFzdCBzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiBvZiBjb25zdGFudCByZWZlcmVuY2VzLgogIE1hcDxpci5Db25zdGFudEV4cHJlc3Npb24sIF9Db25zdGFudE5vZGVJbmRleGVyVmlzaXRvcj4gX2NvbnN0YW50SW5kZXhNYXA7CgogIF9NZW1iZXJEYXRhKHRoaXMubm9kZSk7CgogIHZvaWQgX2Vuc3VyZU1hcHMoKSB7CiAgICBpZiAoX2luZGV4VG9Ob2RlTWFwID09IG51bGwpIHsKICAgICAgX2luZGV4VG9Ob2RlTWFwID0ge307CiAgICAgIF9ub2RlVG9JbmRleE1hcCA9IHt9OwogICAgICBub2RlLmFjY2VwdCgKICAgICAgICAgIG5ldyBfVHJlZU5vZGVJbmRleGVyVmlzaXRvcihfaW5kZXhUb05vZGVNYXAsIF9ub2RlVG9JbmRleE1hcCkpOwogICAgfQogIH0KCiAgX0NvbnN0YW50Tm9kZUluZGV4ZXJWaXNpdG9yIF9jcmVhdGVDb25zdGFudEluZGV4ZXIoCiAgICAgIGlyLkNvbnN0YW50RXhwcmVzc2lvbiBub2RlKSB7CiAgICBfQ29uc3RhbnROb2RlSW5kZXhlclZpc2l0b3IgaW5kZXhlciA9IG5ldyBfQ29uc3RhbnROb2RlSW5kZXhlclZpc2l0b3IoKTsKICAgIG5vZGUuY29uc3RhbnQuYWNjZXB0KGluZGV4ZXIpOwogICAgcmV0dXJuIGluZGV4ZXI7CiAgfQoKICBpci5Db25zdGFudCBnZXRDb25zdGFudEJ5SW5kZXgoaXIuQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUsIGludCBpbmRleCkgewogICAgX2NvbnN0YW50SW5kZXhNYXAgPz89IHt9OwogICAgX0NvbnN0YW50Tm9kZUluZGV4ZXJWaXNpdG9yIGluZGV4ZXIgPQogICAgICAgIF9jb25zdGFudEluZGV4TWFwW25vZGVdID8/PSBfY3JlYXRlQ29uc3RhbnRJbmRleGVyKG5vZGUpOwogICAgcmV0dXJuIGluZGV4ZXIuZ2V0Q29uc3RhbnQoaW5kZXgpOwogIH0KCiAgaW50IGdldEluZGV4QnlDb25zdGFudChpci5Db25zdGFudEV4cHJlc3Npb24gbm9kZSwgaXIuQ29uc3RhbnQgY29uc3RhbnQpIHsKICAgIF9jb25zdGFudEluZGV4TWFwID8/PSB7fTsKICAgIF9Db25zdGFudE5vZGVJbmRleGVyVmlzaXRvciBpbmRleGVyID0KICAgICAgICBfY29uc3RhbnRJbmRleE1hcFtub2RlXSA/Pz0gX2NyZWF0ZUNvbnN0YW50SW5kZXhlcihub2RlKTsKICAgIHJldHVybiBpbmRleGVyLmdldEluZGV4KGNvbnN0YW50KTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbaXIuVHJlZU5vZGVdIGNvcnJlc3BvbmRpbmcgdG8gW2luZGV4XSBpbiB0aGlzIG1lbWJlci4KICBpci5UcmVlTm9kZSBnZXRUcmVlTm9kZUJ5SW5kZXgoaW50IGluZGV4KSB7CiAgICBfZW5zdXJlTWFwcygpOwogICAgaXIuVHJlZU5vZGUgdHJlZU5vZGUgPSBfaW5kZXhUb05vZGVNYXBbaW5kZXhdOwogICAgYXNzZXJ0KHRyZWVOb2RlICE9IG51bGwsICJObyBUcmVlTm9kZSBmb3VuZCBmb3IgaW5kZXggJGluZGV4IGluICRub2RlLiIpOwogICAgcmV0dXJuIHRyZWVOb2RlOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGluZGV4IGNvcnJlc3BvbmRpbmcgdG8gW2lyLlRyZWVOb2RlXSBpbiB0aGlzIG1lbWJlci4KICBpbnQgZ2V0SW5kZXhCeVRyZWVOb2RlKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIF9lbnN1cmVNYXBzKCk7CiAgICBpbnQgaW5kZXggPSBfbm9kZVRvSW5kZXhNYXBbbm9kZV07CiAgICBhc3NlcnQoaW5kZXggIT0gbnVsbCwgIk5vIGluZGV4IGZvdW5kIGZvciAke25vZGUucnVudGltZVR5cGV9LiIpOwogICAgcmV0dXJuIGluZGV4OwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ19NZW1iZXJEYXRhKCRub2RlKCR7aWRlbnRpdHlIYXNoQ29kZShub2RlKX0pKSc7Cn0KgQwATk48AR4BSxghAT0mASQBUTcfGDlECAYzQREEAgFODi4fRkwYEQQiIhUnMxc5EwYEDwIBSRUxGQE5KiwBQCUBOisuARsBGiIbGysQM0AkEC5AJE4IBgQBRS4WIQQBRTAWIQQBKh0WMhAyQSgrCAYcBAEaIhsbLzIkEC87JxAxOydRCAYEAVAUNBYhBAFHNxYhBAEMSQIBOxMtFwE4Ky4BGQEaIhsbLzIkEC87JxAxOydRCAYEAVASNBYhBAFFNxYhBAEMRwIBRhQvGAFEFikBQhYpAU9FTQEaARcjHBwTSgYEATYkTSMUBAFKHipCJwQBTR4qQicEAUkuEzNOFQQBRy0TJ0YSBAEMSAIBM3BhY2thZ2U6Y29tcGlsZXIvc3JjL3NlcmlhbGl6YXRpb24vbWVtYmVyX2RhdGEuZGFydDdzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zZXJpYWxpemF0aW9uL21peGlucy5kYXJ0wABHdy8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mICdzZXJpYWxpemF0aW9uLmRhcnQnOwoKLy8vIE1peGluIHRoYXQgaW1wbGVtZW50cyBhbGwgY29udmVuaWVuY2UgbWV0aG9kcyBvZiBbRGF0YVNvdXJjZV0uCmFic3RyYWN0IGNsYXNzIERhdGFTb3VyY2VNaXhpbiBpbXBsZW1lbnRzIERhdGFTb3VyY2UgewogIEBvdmVycmlkZQogIEUgcmVhZFZhbHVlT3JOdWxsPEU+KEUgZigpKSB7CiAgICBib29sIGhhc1ZhbHVlID0gcmVhZEJvb2woKTsKICAgIGlmIChoYXNWYWx1ZSkgewogICAgICByZXR1cm4gZigpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PEU+IHJlYWRMaXN0PEU+KEUgZigpLCB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PEU+IGxpc3QgPSBuZXcgTGlzdDxFPihjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgbGlzdFtpXSA9IGYoKTsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHJlYWRJbnRPck51bGwoKSB7CiAgICBib29sIGhhc1ZhbHVlID0gcmVhZEJvb2woKTsKICAgIGlmIChoYXNWYWx1ZSkgewogICAgICByZXR1cm4gcmVhZEludCgpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgcmVhZFN0cmluZ09yTnVsbCgpIHsKICAgIGJvb2wgaGFzVmFsdWUgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc1ZhbHVlKSB7CiAgICAgIHJldHVybiByZWFkU3RyaW5nKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8U3RyaW5nPiByZWFkU3RyaW5ncyh7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PFN0cmluZz4gbGlzdCA9IG5ldyBMaXN0PFN0cmluZz4oY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGxpc3RbaV0gPSByZWFkU3RyaW5nKCk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8RGFydFR5cGU+IHJlYWREYXJ0VHlwZXMoe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxEYXJ0VHlwZT4gbGlzdCA9IG5ldyBMaXN0PERhcnRUeXBlPihjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgbGlzdFtpXSA9IHJlYWREYXJ0VHlwZSgpOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PGlyLlR5cGVQYXJhbWV0ZXI+IHJlYWRUeXBlUGFyYW1ldGVyTm9kZXMoe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiBsaXN0ID0gbmV3IExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4oY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGxpc3RbaV0gPSByZWFkVHlwZVBhcmFtZXRlck5vZGUoKTsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxFPiByZWFkTWVtYmVyczxFIGV4dGVuZHMgTWVtYmVyRW50aXR5Pih7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PEU+IGxpc3QgPSBuZXcgTGlzdDxFPihjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IHJlYWRNZW1iZXIoKTsKICAgICAgbGlzdFtpXSA9IG1lbWJlcjsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxFPiByZWFkTWVtYmVyTm9kZXM8RSBleHRlbmRzIGlyLk1lbWJlcj4oe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxFPiBsaXN0ID0gbmV3IExpc3Q8RT4oY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGlyLk1lbWJlciB2YWx1ZSA9IHJlYWRNZW1iZXJOb2RlKCk7CiAgICAgIGxpc3RbaV0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxFPiByZWFkQ2xhc3NlczxFIGV4dGVuZHMgQ2xhc3NFbnRpdHk+KHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8RT4gbGlzdCA9IG5ldyBMaXN0PEU+KGNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBDbGFzc0VudGl0eSBjbHMgPSByZWFkQ2xhc3MoKTsKICAgICAgbGlzdFtpXSA9IGNsczsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEssIFY+IHJlYWRMaWJyYXJ5TWFwPEsgZXh0ZW5kcyBMaWJyYXJ5RW50aXR5LCBWPihWIGYoKSwKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTWFwPEssIFY+IG1hcCA9IHt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSA9IHJlYWRMaWJyYXJ5KCk7CiAgICAgIFYgdmFsdWUgPSBmKCk7CiAgICAgIG1hcFtsaWJyYXJ5XSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CgogIEBvdmVycmlkZQogIE1hcDxLLCBWPiByZWFkQ2xhc3NNYXA8SyBleHRlbmRzIENsYXNzRW50aXR5LCBWPihWIGYoKSwKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTWFwPEssIFY+IG1hcCA9IHt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIENsYXNzRW50aXR5IGNscyA9IHJlYWRDbGFzcygpOwogICAgICBWIHZhbHVlID0gZigpOwogICAgICBtYXBbY2xzXSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CgogIEBvdmVycmlkZQogIE1hcDxLLCBWPiByZWFkTWVtYmVyTWFwPEsgZXh0ZW5kcyBNZW1iZXJFbnRpdHksIFY+KFYgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSwKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTWFwPEssIFY+IG1hcCA9IHt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSByZWFkTWVtYmVyKCk7CiAgICAgIFYgdmFsdWUgPSBmKG1lbWJlcik7CiAgICAgIG1hcFttZW1iZXJdID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPEssIFY+IHJlYWRNZW1iZXJOb2RlTWFwPEsgZXh0ZW5kcyBpci5NZW1iZXIsIFY+KFYgZigpLAogICAgICB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBNYXA8SywgVj4gbWFwID0ge307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgaXIuTWVtYmVyIG5vZGUgPSByZWFkTWVtYmVyTm9kZSgpOwogICAgICBWIHZhbHVlID0gZigpOwogICAgICBtYXBbbm9kZV0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiBtYXA7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8SywgVj4gcmVhZFRyZWVOb2RlTWFwPEsgZXh0ZW5kcyBpci5UcmVlTm9kZSwgVj4oViBmKCksCiAgICAgIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIE1hcDxLLCBWPiBtYXAgPSB7fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBpci5UcmVlTm9kZSBub2RlID0gcmVhZFRyZWVOb2RlKCk7CiAgICAgIFYgdmFsdWUgPSBmKCk7CiAgICAgIG1hcFtub2RlXSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8RT4gcmVhZExvY2FsczxFIGV4dGVuZHMgTG9jYWw+KHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8RT4gbGlzdCA9IG5ldyBMaXN0PEU+KGNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBMb2NhbCBsb2NhbCA9IHJlYWRMb2NhbCgpOwogICAgICBsaXN0W2ldID0gbG9jYWw7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIE1hcDxLLCBWPiByZWFkTG9jYWxNYXA8SyBleHRlbmRzIExvY2FsLCBWPihWIGYoKSwge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTWFwPEssIFY+IG1hcCA9IHt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIExvY2FsIGxvY2FsID0gcmVhZExvY2FsKCk7CiAgICAgIFYgdmFsdWUgPSBmKCk7CiAgICAgIG1hcFtsb2NhbF0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiBtYXA7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PEU+IHJlYWRUcmVlTm9kZXM8RSBleHRlbmRzIGlyLlRyZWVOb2RlPih7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBMaXN0PEU+IGxpc3QgPSBuZXcgTGlzdDxFPihjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgaXIuVHJlZU5vZGUgbm9kZSA9IHJlYWRUcmVlTm9kZSgpOwogICAgICBsaXN0W2ldID0gbm9kZTsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPFN0cmluZywgVj4gcmVhZFN0cmluZ01hcDxWPihWIGYoKSwge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTWFwPFN0cmluZywgVj4gbWFwID0ge307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgU3RyaW5nIGtleSA9IHJlYWRTdHJpbmcoKTsKICAgICAgViB2YWx1ZSA9IGYoKTsKICAgICAgbWFwW2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiBtYXA7CiAgfQoKICBAb3ZlcnJpZGUKICBJbmRleGVkQ2xhc3MgcmVhZENsYXNzT3JOdWxsKCkgewogICAgYm9vbCBoYXNDbGFzcyA9IHJlYWRCb29sKCk7CiAgICBpZiAoaGFzQ2xhc3MpIHsKICAgICAgcmV0dXJuIHJlYWRDbGFzcygpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5UcmVlTm9kZSByZWFkVHJlZU5vZGVPck51bGwoKSB7CiAgICBib29sIGhhc1ZhbHVlID0gcmVhZEJvb2woKTsKICAgIGlmIChoYXNWYWx1ZSkgewogICAgICByZXR1cm4gcmVhZFRyZWVOb2RlKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEluZGV4ZWRNZW1iZXIgcmVhZE1lbWJlck9yTnVsbCgpIHsKICAgIGJvb2wgaGFzVmFsdWUgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc1ZhbHVlKSB7CiAgICAgIHJldHVybiByZWFkTWVtYmVyKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIExvY2FsIHJlYWRMb2NhbE9yTnVsbCgpIHsKICAgIGJvb2wgaGFzVmFsdWUgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc1ZhbHVlKSB7CiAgICAgIHJldHVybiByZWFkTG9jYWwoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSByZWFkQ29uc3RhbnRPck51bGwoKSB7CiAgICBib29sIGhhc0NsYXNzID0gcmVhZEJvb2woKTsKICAgIGlmIChoYXNDbGFzcykgewogICAgICByZXR1cm4gcmVhZENvbnN0YW50KCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8RT4gcmVhZENvbnN0YW50czxFIGV4dGVuZHMgQ29uc3RhbnRWYWx1ZT4oe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxFPiBsaXN0ID0gbmV3IExpc3Q8RT4oY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSByZWFkQ29uc3RhbnQoKTsKICAgICAgbGlzdFtpXSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8SywgVj4gcmVhZENvbnN0YW50TWFwPEsgZXh0ZW5kcyBDb25zdGFudFZhbHVlLCBWPihWIGYoKSwKICAgICAge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTWFwPEssIFY+IG1hcCA9IHt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIENvbnN0YW50VmFsdWUga2V5ID0gcmVhZENvbnN0YW50KCk7CiAgICAgIFYgdmFsdWUgPSBmKCk7CiAgICAgIG1hcFtrZXldID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gbWFwOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5kZXhlZExpYnJhcnkgcmVhZExpYnJhcnlPck51bGwoKSB7CiAgICBib29sIGhhc1ZhbHVlID0gcmVhZEJvb2woKTsKICAgIGlmIChoYXNWYWx1ZSkgewogICAgICByZXR1cm4gcmVhZExpYnJhcnkoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgSW1wb3J0RW50aXR5IHJlYWRJbXBvcnRPck51bGwoKSB7CiAgICBib29sIGhhc0NsYXNzID0gcmVhZEJvb2woKTsKICAgIGlmIChoYXNDbGFzcykgewogICAgICByZXR1cm4gcmVhZEltcG9ydCgpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PEltcG9ydEVudGl0eT4gcmVhZEltcG9ydHMoe2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTGlzdDxJbXBvcnRFbnRpdHk+IGxpc3QgPSBuZXcgTGlzdDxJbXBvcnRFbnRpdHk+KGNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBsaXN0W2ldID0gcmVhZEltcG9ydCgpOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8SW1wb3J0RW50aXR5LCBWPiByZWFkSW1wb3J0TWFwPFY+KFYgZigpLCB7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KSB7CiAgICBpbnQgY291bnQgPSByZWFkSW50KCk7CiAgICBpZiAoY291bnQgPT0gMCAmJiBlbXB0eUFzTnVsbCkgcmV0dXJuIG51bGw7CiAgICBNYXA8SW1wb3J0RW50aXR5LCBWPiBtYXAgPSB7fTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBJbXBvcnRFbnRpdHkga2V5ID0gcmVhZEltcG9ydCgpOwogICAgICBWIHZhbHVlID0gZigpOwogICAgICBtYXBba2V5XSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8aXIuRGFydFR5cGU+IHJlYWREYXJ0VHlwZU5vZGVzKHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8aXIuRGFydFR5cGU+IGxpc3QgPSBuZXcgTGlzdDxpci5EYXJ0VHlwZT4oY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGxpc3RbaV0gPSByZWFkRGFydFR5cGVOb2RlKCk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIGlyLk5hbWUgcmVhZE5hbWUoKSB7CiAgICBTdHJpbmcgdGV4dCA9IHJlYWRTdHJpbmcoKTsKICAgIGlyLkxpYnJhcnkgbGlicmFyeSA9IHJlYWRWYWx1ZU9yTnVsbChyZWFkTGlicmFyeU5vZGUpOwogICAgcmV0dXJuIG5ldyBpci5OYW1lKHRleHQsIGxpYnJhcnkpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuTGlicmFyeURlcGVuZGVuY3kgcmVhZExpYnJhcnlEZXBlbmRlbmN5Tm9kZSgpIHsKICAgIGlyLkxpYnJhcnkgbGlicmFyeSA9IHJlYWRMaWJyYXJ5Tm9kZSgpOwogICAgaW50IGluZGV4ID0gcmVhZEludCgpOwogICAgcmV0dXJuIGxpYnJhcnkuZGVwZW5kZW5jaWVzW2luZGV4XTsKICB9CgogIEBvdmVycmlkZQogIGlyLkxpYnJhcnlEZXBlbmRlbmN5IHJlYWRMaWJyYXJ5RGVwZW5kZW5jeU5vZGVPck51bGwoKSB7CiAgICByZXR1cm4gcmVhZFZhbHVlT3JOdWxsKHJlYWRMaWJyYXJ5RGVwZW5kZW5jeU5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAganMuTm9kZSByZWFkSnNOb2RlT3JOdWxsKCkgewogICAgYm9vbCBoYXNWYWx1ZSA9IHJlYWRCb29sKCk7CiAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgcmV0dXJuIHJlYWRKc05vZGUoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KfQoKLy8vIE1peGluIHRoYXQgaW1wbGVtZW50cyBhbGwgY29udmVuaWVuY2UgbWV0aG9kcyBvZiBbRGF0YVNpbmtdLgphYnN0cmFjdCBjbGFzcyBEYXRhU2lua01peGluIGltcGxlbWVudHMgRGF0YVNpbmsgewogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVJbnRPck51bGwoaW50IHZhbHVlKSB7CiAgICB3cml0ZUJvb2wodmFsdWUgIT0gbnVsbCk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB3cml0ZUludCh2YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlU3RyaW5nT3JOdWxsKFN0cmluZyB2YWx1ZSkgewogICAgd3JpdGVCb29sKHZhbHVlICE9IG51bGwpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgd3JpdGVTdHJpbmcodmFsdWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUNsYXNzT3JOdWxsKEluZGV4ZWRDbGFzcyB2YWx1ZSkgewogICAgd3JpdGVCb29sKHZhbHVlICE9IG51bGwpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgd3JpdGVDbGFzcyh2YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTG9jYWxPck51bGwoTG9jYWwgdmFsdWUpIHsKICAgIHdyaXRlQm9vbCh2YWx1ZSAhPSBudWxsKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlTG9jYWwodmFsdWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUNsYXNzZXMoSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludCh2YWx1ZXMubGVuZ3RoKTsKICAgICAgZm9yIChJbmRleGVkQ2xhc3MgdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgICAgd3JpdGVDbGFzcyh2YWx1ZSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUcmVlTm9kZXMoSXRlcmFibGU8aXIuVHJlZU5vZGU+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludCh2YWx1ZXMubGVuZ3RoKTsKICAgICAgZm9yIChpci5UcmVlTm9kZSB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgICB3cml0ZVRyZWVOb2RlKHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVN0cmluZ3MoSXRlcmFibGU8U3RyaW5nPiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAodmFsdWVzID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQodmFsdWVzLmxlbmd0aCk7CiAgICAgIGZvciAoU3RyaW5nIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlU3RyaW5nKHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZU1lbWJlck5vZGVzKEl0ZXJhYmxlPGlyLk1lbWJlcj4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KHZhbHVlcy5sZW5ndGgpOwogICAgICBmb3IgKGlyLk1lbWJlciB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgICB3cml0ZU1lbWJlck5vZGUodmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlRGFydFR5cGVzKEl0ZXJhYmxlPERhcnRUeXBlPiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAodmFsdWVzID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQodmFsdWVzLmxlbmd0aCk7CiAgICAgIGZvciAoRGFydFR5cGUgdmFsdWUgaW4gdmFsdWVzKSB7CiAgICAgICAgd3JpdGVEYXJ0VHlwZSh2YWx1ZSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVMaWJyYXJ5TWFwPFY+KE1hcDxMaWJyYXJ5RW50aXR5LCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludChtYXAubGVuZ3RoKTsKICAgICAgbWFwLmZvckVhY2goKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgViB2YWx1ZSkgewogICAgICAgIHdyaXRlTGlicmFyeShsaWJyYXJ5KTsKICAgICAgICBmKHZhbHVlKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQ2xhc3NNYXA8Vj4oTWFwPENsYXNzRW50aXR5LCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludChtYXAubGVuZ3RoKTsKICAgICAgbWFwLmZvckVhY2goKENsYXNzRW50aXR5IGNscywgViB2YWx1ZSkgewogICAgICAgIHdyaXRlQ2xhc3MoY2xzKTsKICAgICAgICBmKHZhbHVlKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTWVtYmVyTWFwPFY+KAogICAgICBNYXA8TWVtYmVyRW50aXR5LCBWPiBtYXAsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyLCBWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludChtYXAubGVuZ3RoKTsKICAgICAgbWFwLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIsIFYgdmFsdWUpIHsKICAgICAgICB3cml0ZU1lbWJlcihtZW1iZXIpOwogICAgICAgIGYobWVtYmVyLCB2YWx1ZSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVN0cmluZ01hcDxWPihNYXA8U3RyaW5nLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludChtYXAubGVuZ3RoKTsKICAgICAgbWFwLmZvckVhY2goKFN0cmluZyBrZXksIFYgdmFsdWUpIHsKICAgICAgICB3cml0ZVN0cmluZyhrZXkpOwogICAgICAgIGYodmFsdWUpOwogICAgICB9KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVMb2NhbHMoSXRlcmFibGU8TG9jYWw+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludCh2YWx1ZXMubGVuZ3RoKTsKICAgICAgZm9yIChMb2NhbCB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgICB3cml0ZUxvY2FsKHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUxvY2FsTWFwPFY+KE1hcDxMb2NhbCwgVj4gbWFwLCB2b2lkIGYoViB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAobWFwID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQobWFwLmxlbmd0aCk7CiAgICAgIG1hcC5mb3JFYWNoKChMb2NhbCBrZXksIFYgdmFsdWUpIHsKICAgICAgICB3cml0ZUxvY2FsKGtleSk7CiAgICAgICAgZih2YWx1ZSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZU1lbWJlck5vZGVNYXA8Vj4oTWFwPGlyLk1lbWJlciwgVj4gbWFwLCB2b2lkIGYoViB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAobWFwID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQobWFwLmxlbmd0aCk7CiAgICAgIG1hcC5mb3JFYWNoKChpci5NZW1iZXIga2V5LCBWIHZhbHVlKSB7CiAgICAgICAgd3JpdGVNZW1iZXJOb2RlKGtleSk7CiAgICAgICAgZih2YWx1ZSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRyZWVOb2RlTWFwPFY+KE1hcDxpci5UcmVlTm9kZSwgVj4gbWFwLCB2b2lkIGYoViB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAobWFwID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQobWFwLmxlbmd0aCk7CiAgICAgIG1hcC5mb3JFYWNoKChpci5UcmVlTm9kZSBrZXksIFYgdmFsdWUpIHsKICAgICAgICB3cml0ZVRyZWVOb2RlKGtleSk7CiAgICAgICAgZih2YWx1ZSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUxpc3Q8RT4oSXRlcmFibGU8RT4gdmFsdWVzLCB2b2lkIGYoRSB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAodmFsdWVzID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQodmFsdWVzLmxlbmd0aCk7CiAgICAgIHZhbHVlcy5mb3JFYWNoKGYpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRyZWVOb2RlT3JOdWxsKGlyLlRyZWVOb2RlIHZhbHVlKSB7CiAgICB3cml0ZUJvb2wodmFsdWUgIT0gbnVsbCk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB3cml0ZVRyZWVOb2RlKHZhbHVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVWYWx1ZU9yTnVsbDxFPihFIHZhbHVlLCB2b2lkIGYoRSB2YWx1ZSkpIHsKICAgIHdyaXRlQm9vbCh2YWx1ZSAhPSBudWxsKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIGYodmFsdWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZU1lbWJlck9yTnVsbChJbmRleGVkTWVtYmVyIHZhbHVlKSB7CiAgICB3cml0ZUJvb2wodmFsdWUgIT0gbnVsbCk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB3cml0ZU1lbWJlcih2YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTWVtYmVycyhJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IHZhbHVlcywge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludCh2YWx1ZXMubGVuZ3RoKTsKICAgICAgZm9yIChJbmRleGVkTWVtYmVyIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlTWVtYmVyKHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVR5cGVQYXJhbWV0ZXJOb2RlcyhJdGVyYWJsZTxpci5UeXBlUGFyYW1ldGVyPiB2YWx1ZXMsCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAodmFsdWVzID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQodmFsdWVzLmxlbmd0aCk7CiAgICAgIGZvciAoaXIuVHlwZVBhcmFtZXRlciB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgICB3cml0ZVR5cGVQYXJhbWV0ZXJOb2RlKHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUNvbnN0YW50T3JOdWxsKENvbnN0YW50VmFsdWUgdmFsdWUpIHsKICAgIHdyaXRlQm9vbCh2YWx1ZSAhPSBudWxsKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlQ29uc3RhbnQodmFsdWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUNvbnN0YW50cyhJdGVyYWJsZTxDb25zdGFudFZhbHVlPiB2YWx1ZXMsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAodmFsdWVzID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQodmFsdWVzLmxlbmd0aCk7CiAgICAgIGZvciAoQ29uc3RhbnRWYWx1ZSB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgICB3cml0ZUNvbnN0YW50KHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUNvbnN0YW50TWFwPFY+KE1hcDxDb25zdGFudFZhbHVlLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludChtYXAubGVuZ3RoKTsKICAgICAgbWFwLmZvckVhY2goKENvbnN0YW50VmFsdWUga2V5LCBWIHZhbHVlKSB7CiAgICAgICAgd3JpdGVDb25zdGFudChrZXkpOwogICAgICAgIGYodmFsdWUpOwogICAgICB9KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVMaWJyYXJ5T3JOdWxsKEluZGV4ZWRMaWJyYXJ5IHZhbHVlKSB7CiAgICB3cml0ZUJvb2wodmFsdWUgIT0gbnVsbCk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICB3cml0ZUxpYnJhcnkodmFsdWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUltcG9ydE9yTnVsbChJbXBvcnRFbnRpdHkgdmFsdWUpIHsKICAgIHdyaXRlQm9vbCh2YWx1ZSAhPSBudWxsKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlSW1wb3J0KHZhbHVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVJbXBvcnRzKEl0ZXJhYmxlPEltcG9ydEVudGl0eT4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KHZhbHVlcy5sZW5ndGgpOwogICAgICBmb3IgKEltcG9ydEVudGl0eSB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgICB3cml0ZUltcG9ydCh2YWx1ZSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVJbXBvcnRNYXA8Vj4oTWFwPEltcG9ydEVudGl0eSwgVj4gbWFwLCB2b2lkIGYoViB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAobWFwID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQobWFwLmxlbmd0aCk7CiAgICAgIG1hcC5mb3JFYWNoKChJbXBvcnRFbnRpdHkga2V5LCBWIHZhbHVlKSB7CiAgICAgICAgd3JpdGVJbXBvcnQoa2V5KTsKICAgICAgICBmKHZhbHVlKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlRGFydFR5cGVOb2RlcyhJdGVyYWJsZTxpci5EYXJ0VHlwZT4gdmFsdWVzLAogICAgICB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KHZhbHVlcy5sZW5ndGgpOwogICAgICBmb3IgKGlyLkRhcnRUeXBlIHZhbHVlIGluIHZhbHVlcykgewogICAgICAgIHdyaXRlRGFydFR5cGVOb2RlKHZhbHVlKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZU5hbWUoaXIuTmFtZSB2YWx1ZSkgewogICAgd3JpdGVTdHJpbmcodmFsdWUubmFtZSk7CiAgICB3cml0ZVZhbHVlT3JOdWxsKHZhbHVlLmxpYnJhcnksIHdyaXRlTGlicmFyeU5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUxpYnJhcnlEZXBlbmRlbmN5Tm9kZShpci5MaWJyYXJ5RGVwZW5kZW5jeSB2YWx1ZSkgewogICAgaXIuTGlicmFyeSBsaWJyYXJ5ID0gdmFsdWUucGFyZW50OwogICAgd3JpdGVMaWJyYXJ5Tm9kZShsaWJyYXJ5KTsKICAgIHdyaXRlSW50KGxpYnJhcnkuZGVwZW5kZW5jaWVzLmluZGV4T2YodmFsdWUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVMaWJyYXJ5RGVwZW5kZW5jeU5vZGVPck51bGwoaXIuTGlicmFyeURlcGVuZGVuY3kgdmFsdWUpIHsKICAgIHdyaXRlVmFsdWVPck51bGwodmFsdWUsIHdyaXRlTGlicmFyeURlcGVuZGVuY3lOb2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVKc05vZGVPck51bGwoanMuTm9kZSB2YWx1ZSkgewogICAgd3JpdGVCb29sKHZhbHVlICE9IG51bGwpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgd3JpdGVKc05vZGUodmFsdWUpOwogICAgfQogIH0KfQqDFwBOTjwBHgFDNwwgIBQSBhEEAQw6GzAnJhUGEQQBDBggFBgGEQQBDB4gFBsGEQQBDDgbMDEmHgYRBAEMPBswNSYgBhEEAQxNGzBFJikGEQQBDEsbMCcmKhgGEQQBDEwbMCcmKhcGEQQBDEobMCcmJRUGEQQBDD4jGzAYJi0VHAYQBAEMOiMbMBgmJRUYBhAEAQxPIxswGCYqGxsGEAQBDD0jGzAYJikVGQYQBAEMPSMbMBgmKRUZBhAEAQxDGzAnJiEXBhEEAQxRGzAYJiEVGgYQBAEMTBswJyYpFgYRBAEMRhswHSYhFRgGEAQBDCMgFBoGEQQBDCUgFB0GEQQBDCUgFBsGEQQBDBwgFBoGEQQBDCcgFB0GEQQBDE4bMCcmLBcGEQQBDD8jGzAYJioVGAYQBAEMJyAUHAYRBAEMJCAUGwYRBAEMPhswPSYeBhEEAQxMGzAjJicVGAYQBAEMQxswOyYkBhEEAQwXIDsnBAEMNSwbKAQBDDs3BAEMHyAUGwYRBAIBQTMMIx4ZFwYEAQwpHhkaBgQBDC4eGRkGBAEMJx4ZGQYEAQxNGhkTDR8rGwgGBAEMTxoZEw0fKh4IBgQBDEgaGRMNHyUcCAYEAQxPGhkTDR8oIAgGBAEMTBoZEw0fJx4IBgQBDEYhFxkTDRw1HxIKBgQBDEIhFxkTDRwvGRIKBgQBDBpGIRcZEw0cMx0aCgYEAQw+IRcZEw0cKhoSCgYEAQxGGhkTDR8kGwgGBAEMPCEXGRMNHCkZEgoGBAEMRSEXGRMNHC0eEgoGBAEMRSEXGRMNHC8cEgoGBAEMOSEaGRMNHxkGBAEMMB4ZHAYEAQw3HhkQBgQBDDAeGRoGBAEMThoZEw0fLBwIBgQBDEIhGhkTDR8vJwgGBAEMMh4ZHAYEAQxRGhkTDR8sHggGBAEMRyEXGRMNHDEcEgoGBAEMMh4ZGwYEAQwvHhkaBgQBDE4aGRMNHyscCAYEAQxEIRcZEw0cMBoSCgYEAQw4IRoZEw0fKiIIBgQBDCIdNwQBDEAnHzMEAQxGOQQBDCoeGRoGBAIBLnBhY2thZ2U6Y29tcGlsZXIvc3JjL3NlcmlhbGl6YXRpb24vbWl4aW5zLmRhcnQ9c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc2VyaWFsaXphdGlvbi9ub2RlX2luZGV4ZXIuZGFydJ3vLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgJ3NlcmlhbGl6YXRpb24uZGFydCc7CgovLy8gVmlzaXRvciB0aGF0IGFzY3JpYmVzIGFuIGluZGV4IHRvIGFsbCBbaXIuVHJlZU5vZGVdcyB0aGF0IHBvdGVudGlhbGx5Ci8vLyBuZWVkZWQgZm9yIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbi4KY2xhc3MgX1RyZWVOb2RlSW5kZXhlclZpc2l0b3IgZXh0ZW5kcyBpci5WaXNpdG9yPHZvaWQ+IHsKICBpbnQgX2N1cnJlbnRJbmRleCA9IDA7CiAgZmluYWwgTWFwPGludCwgaXIuVHJlZU5vZGU+IF9pbmRleFRvTm9kZU1hcDsKICBmaW5hbCBNYXA8aXIuVHJlZU5vZGUsIGludD4gX25vZGVUb0luZGV4TWFwOwoKICBfVHJlZU5vZGVJbmRleGVyVmlzaXRvcih0aGlzLl9pbmRleFRvTm9kZU1hcCwgdGhpcy5fbm9kZVRvSW5kZXhNYXApOwoKICB2b2lkIHJlZ2lzdGVyTm9kZShpci5UcmVlTm9kZSBub2RlKSB7CiAgICBfaW5kZXhUb05vZGVNYXBbX2N1cnJlbnRJbmRleF0gPSBub2RlOwogICAgX25vZGVUb0luZGV4TWFwW25vZGVdID0gX2N1cnJlbnRJbmRleDsKICAgIF9jdXJyZW50SW5kZXgrKzsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZGVmYXVsdFRyZWVOb2RlKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvbkV4cHJlc3Npb24oaXIuRnVuY3Rpb25FeHByZXNzaW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmxvY2soaXIuQmxvY2sgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRCbG9jayhub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUucGFyZW50IGlzISBpci5GdW5jdGlvbkRlY2xhcmF0aW9uKSB7CiAgICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIH0KICAgIHN1cGVyLnZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoaXIuU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0U3dpdGNoU3RhdGVtZW50KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZvclN0YXRlbWVudChpci5Gb3JTdGF0ZW1lbnQgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRGb3JTdGF0ZW1lbnQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRGb3JJblN0YXRlbWVudChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRXaGlsZVN0YXRlbWVudChpci5XaGlsZVN0YXRlbWVudCBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdFdoaWxlU3RhdGVtZW50KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERvU3RhdGVtZW50KGlyLkRvU3RhdGVtZW50IG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0RG9TdGF0ZW1lbnQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QnJlYWtTdGF0ZW1lbnQoaXIuQnJlYWtTdGF0ZW1lbnQgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRCcmVha1N0YXRlbWVudChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXN0TGl0ZXJhbChpci5MaXN0TGl0ZXJhbCBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdExpc3RMaXRlcmFsKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFNldExpdGVyYWwoaXIuU2V0TGl0ZXJhbCBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdFNldExpdGVyYWwobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwTGl0ZXJhbChpci5NYXBMaXRlcmFsIG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0TWFwTGl0ZXJhbChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQcm9wZXJ0eUdldChpci5Qcm9wZXJ0eUdldCBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdFByb3BlcnR5R2V0KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByb3BlcnR5U2V0KGlyLlByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0UHJvcGVydHlTZXQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWV0aG9kSW52b2NhdGlvbihpci5NZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0TWV0aG9kSW52b2NhdGlvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREaXJlY3RQcm9wZXJ0eUdldChpci5EaXJlY3RQcm9wZXJ0eUdldCBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdERpcmVjdFByb3BlcnR5R2V0KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERpcmVjdFByb3BlcnR5U2V0KGlyLkRpcmVjdFByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0RGlyZWN0UHJvcGVydHlTZXQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RGlyZWN0TWV0aG9kSW52b2NhdGlvbihpci5EaXJlY3RNZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0RGlyZWN0TWV0aG9kSW52b2NhdGlvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRTdGF0aWNJbnZvY2F0aW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExhYmVsZWRTdGF0ZW1lbnQoaXIuTGFiZWxlZFN0YXRlbWVudCBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdExhYmVsZWRTdGF0ZW1lbnQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3dpdGNoQ2FzZShpci5Td2l0Y2hDYXNlIG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0U3dpdGNoQ2FzZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChpci5Db250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICByZWdpc3Rlck5vZGUobm9kZSk7CiAgICBzdXBlci52aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVHZXQoaXIuVmFyaWFibGVHZXQgbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRWYXJpYWJsZUdldChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnN0YW50aWF0aW9uKGlyLkluc3RhbnRpYXRpb24gbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRJbnN0YW50aWF0aW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihpci5TdXBlck1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgcmVnaXN0ZXJOb2RlKG5vZGUpOwogICAgc3VwZXIudmlzaXRTdXBlck1ldGhvZEludm9jYXRpb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3VwZXJQcm9wZXJ0eUdldChpci5TdXBlclByb3BlcnR5R2V0IG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0U3VwZXJQcm9wZXJ0eUdldChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oaXIuQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyTm9kZShub2RlKTsKICAgIHN1cGVyLnZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKG5vZGUpOwogIH0KfQoKLy8vIFZpc2l0b3IgdGhhdCBhc2NyaWJlcyBhbiBpbmRleCB0byBhbGwgW2lyLkNvbnN0YW50XXMgdGhhdCB3ZSBwb3RlbnRpYWxseQovLy8gbmVlZCB0byByZWZlcmVuY2UgZm9yIHNlcmlhbGl6YXRpb24gYW5kIGRlc2VyaWFsaXphdGlvbi4KLy8vCi8vLyBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IGxpc3QsIG1hcCwgYW5kIHNldCBjb25zdGFudHMsIHdoaWNoIGFyZSB1c2VkIGFzCi8vLyBhbGxvY2F0aW9uIGlkZW50aXRpZXMgaW4gdGhlIGdsb2JhbCBpbmZlcmVuY2UuCmNsYXNzIF9Db25zdGFudE5vZGVJbmRleGVyVmlzaXRvciBpbXBsZW1lbnRzIGlyLkNvbnN0YW50VmlzaXRvcjx2b2lkPiB7CiAgaW50IF9jdXJyZW50SW5kZXggPSAwOwogIGZpbmFsIE1hcDxpbnQsIGlyLkNvbnN0YW50PiBfaW5kZXhUb05vZGVNYXAgPSB7fTsKICBmaW5hbCBNYXA8aXIuQ29uc3RhbnQsIGludD4gX25vZGVUb0luZGV4TWFwID0ge307CiAgZmluYWwgU2V0PGlyLkNvbnN0YW50PiBfdmlzaXRlZE5vbmluZGV4ZWROb2RlcyA9IHt9OwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgbm9kZSBub3QgYWxyZWFkeSByZWdpc3RlcmVkLgogIGJvb2wgX3JlZ2lzdGVyKGlyLkNvbnN0YW50IG5vZGUpIHsKICAgIGludCBpbmRleCA9IF9ub2RlVG9JbmRleE1hcFtub2RlXTsKICAgIGlmIChpbmRleCAhPSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBfaW5kZXhUb05vZGVNYXBbX2N1cnJlbnRJbmRleF0gPSBub2RlOwogICAgX25vZGVUb0luZGV4TWFwW25vZGVdID0gX2N1cnJlbnRJbmRleDsKICAgIF9jdXJyZW50SW5kZXgrKzsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgaW50IGdldEluZGV4KGlyLkNvbnN0YW50IG5vZGUpIHsKICAgIGFzc2VydChfbm9kZVRvSW5kZXhNYXAuY29udGFpbnNLZXkobm9kZSksICJDb25zdGFudCB3aXRob3V0IGluZGV4OiAkbm9kZSIpOwogICAgcmV0dXJuIF9ub2RlVG9JbmRleE1hcFtub2RlXTsKICB9CgogIGlyLkNvbnN0YW50IGdldENvbnN0YW50KGludCBpbmRleCkgewogICAgYXNzZXJ0KAogICAgICAgIF9pbmRleFRvTm9kZU1hcC5jb250YWluc0tleShpbmRleCksICJJbmRleCB3aXRob3V0IGNvbnN0YW50OiAkaW5kZXgiKTsKICAgIHJldHVybiBfaW5kZXhUb05vZGVNYXBbaW5kZXhdOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoaXIuVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUxpdGVyYWxDb25zdGFudChpci5UeXBlTGl0ZXJhbENvbnN0YW50IG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUZWFyT2ZmQ29uc3RhbnQoaXIuVGVhck9mZkNvbnN0YW50IG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KGlyLlBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgbm9kZSkgewogICAgbm9kZS50ZWFyT2ZmQ29uc3RhbnQuYWNjZXB0KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluc3RhbmNlQ29uc3RhbnQoaXIuSW5zdGFuY2VDb25zdGFudCBub2RlKSB7CiAgICBpZiAoX3Zpc2l0ZWROb25pbmRleGVkTm9kZXMuYWRkKG5vZGUpKSB7CiAgICAgIG5vZGUuZmllbGRWYWx1ZXMuZm9yRWFjaCgoXywgaXIuQ29uc3RhbnQgdmFsdWUpIHsKICAgICAgICB2YWx1ZS5hY2NlcHQodGhpcyk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFNldENvbnN0YW50KGlyLlNldENvbnN0YW50IG5vZGUpIHsKICAgIGlmIChfcmVnaXN0ZXIobm9kZSkpIHsKICAgICAgZm9yIChpci5Db25zdGFudCBlbGVtZW50IGluIG5vZGUuZW50cmllcykgewogICAgICAgIGVsZW1lbnQuYWNjZXB0KHRoaXMpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGlzdENvbnN0YW50KGlyLkxpc3RDb25zdGFudCBub2RlKSB7CiAgICBpZiAoX3JlZ2lzdGVyKG5vZGUpKSB7CiAgICAgIGZvciAoaXIuQ29uc3RhbnQgZWxlbWVudCBpbiBub2RlLmVudHJpZXMpIHsKICAgICAgICBlbGVtZW50LmFjY2VwdCh0aGlzKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE1hcENvbnN0YW50KGlyLk1hcENvbnN0YW50IG5vZGUpIHsKICAgIGlmIChfcmVnaXN0ZXIobm9kZSkpIHsKICAgICAgZm9yIChpci5Db25zdGFudE1hcEVudHJ5IGVudHJ5IGluIG5vZGUuZW50cmllcykgewogICAgICAgIGVudHJ5LmtleS5hY2NlcHQodGhpcyk7CiAgICAgICAgZW50cnkudmFsdWUuYWNjZXB0KHRoaXMpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3ltYm9sQ29uc3RhbnQoaXIuU3ltYm9sQ29uc3RhbnQgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0NvbnN0YW50KGlyLlN0cmluZ0NvbnN0YW50IG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREb3VibGVDb25zdGFudChpci5Eb3VibGVDb25zdGFudCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50Q29uc3RhbnQoaXIuSW50Q29uc3RhbnQgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvb2xDb25zdGFudChpci5Cb29sQ29uc3RhbnQgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE51bGxDb25zdGFudChpci5OdWxsQ29uc3RhbnQgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0Q29uc3RhbnQoaXIuQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcigKICAgICAgICAiVW5leHBlY3RlZCBjb25zdGFudDogJG5vZGUgKCR7bm9kZS5ydW50aW1lVHlwZX0pIik7CiAgfQp9CoE4AE5OPAEeAUoyORkvLwFHASgrKxUEAQwrHgQBDD0YKQQBDD8YKgQBDCMYHAQBDD8yGgYqBAEMNxgmBAEMMRgjBAEMNRglBAEMNRglBAEMLxgiBAEMNRglBAEMLxgiBAEMLRghBAEMLRghBAEMLxgiBAEMLxgiBAEMORgnBAEMOxgoBAEMOxgoBAEMRRgtBAEMORgnBAEMORgnBAEMLRghBAEMRxguBAEMQxgsBAEMLxgiBAEMMxgkBAEMQxgsBAEMORgnBAEMPRgpBAIBTT0ESzNIGTQ0NwE1JSclKysVEQQBI1AiBAEnDE8jBAEMQAEMQAEMOAEMUScEAQw5LTgcCgYEAQwvGzIeCAYEAQwxGzIeCAYEAQwvGzggIggGBAEMNgEMNgEMNgEMMAEMMgEMMgEMKyI9BAIBNHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NlcmlhbGl6YXRpb24vbm9kZV9pbmRleGVyLmRhcnQ8c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc2VyaWFsaXphdGlvbi9vYmplY3Rfc2luay5kYXJ0hYovLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiAnc2VyaWFsaXphdGlvbi5kYXJ0JzsKCi8vLyBbRGF0YVNpbmtdIHRoYXQgd3JpdGVzIHRvIGEgbGlzdCBvZiBvYmplY3RzLCB1c2VmdWwgZm9yIGRlYnVnZ2luZwovLy8gaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLgovLy8KLy8vIFRoaXMgZGF0YSBzaW5rIHdvcmtzIHRvZ2V0aGVyIHdpdGggW09iamVjdFNvdXJjZV0uCmNsYXNzIE9iamVjdFNpbmsgZXh0ZW5kcyBBYnN0cmFjdERhdGFTaW5rIHsKICBMaXN0PGR5bmFtaWM+IF9kYXRhOwoKICBPYmplY3RTaW5rKHRoaXMuX2RhdGEsIHtib29sIHVzZURhdGFLaW5kcywgTWFwPFN0cmluZywgaW50PiB0YWdGcmVxdWVuY3lNYXB9KQogICAgICA6IHN1cGVyKHVzZURhdGFLaW5kczogdXNlRGF0YUtpbmRzLCB0YWdGcmVxdWVuY3lNYXA6IHRhZ0ZyZXF1ZW5jeU1hcCk7CgogIEBvdmVycmlkZQogIHZvaWQgX2JlZ2luKFN0cmluZyB0YWcpIHsKICAgIF9kYXRhLmFkZChuZXcgVGFnKCdiZWdpbjokdGFnJykpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfZW5kKFN0cmluZyB0YWcpIHsKICAgIF9kYXRhLmFkZChuZXcgVGFnKCdlbmQ6JHRhZycpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX3dyaXRlRW51bUludGVybmFsKGR5bmFtaWMgdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICAgIF9kYXRhLmFkZCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF93cml0ZUludEludGVybmFsKGludCB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgX2RhdGEuYWRkKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX3dyaXRlU3RyaW5nSW50ZXJuYWwoU3RyaW5nIHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CiAgICBfZGF0YS5hZGQodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfd3JpdGVVcmlJbnRlcm5hbChVcmkgdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICAgIF9kYXRhLmFkZCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsb3NlKCkgewogICAgX2RhdGEgPSBudWxsOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBvYmplY3RzIHdyaXR0ZW4gdG8gdGhpcyBkYXRhIHNpbmsuCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gX2RhdGEubGVuZ3RoOwp9Cj0ATk48AR4BRj8ENywXAVBNAQwcJgQBDBokBAEMKxsWBAEMJhsWBAEMLBsWBAEMJhsWBAEMERIEAT8MIgIBM3BhY2thZ2U6Y29tcGlsZXIvc3JjL3NlcmlhbGl6YXRpb24vb2JqZWN0X3NpbmsuZGFydD5zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zZXJpYWxpemF0aW9uL29iamVjdF9zb3VyY2UuZGFydIeQLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgJ3NlcmlhbGl6YXRpb24uZGFydCc7CgovLy8gW0RhdGFTb3VyY2VdIHRoYXQgcmVhZCBmcm9tIGEgbGlzdCBvZiBvYmplY3RzLCB1c2VmdWwgZm9yIGRlYnVnZ2luZwovLy8gaW5jb25zaXN0ZW5jaWVzIGJldHdlZW4gc2VyaWFsaXphdGlvbiBhbmQgZGVzZXJpYWxpemF0aW9uLgovLy8KLy8vIFRoaXMgZGF0YSBzb3VyY2Ugd29ya3MgdG9nZXRoZXIgd2l0aCBbT2JqZWN0U2lua10uCmNsYXNzIE9iamVjdFNvdXJjZSBleHRlbmRzIEFic3RyYWN0RGF0YVNvdXJjZSB7CiAgaW50IF9pbmRleCA9IDA7CiAgZmluYWwgTGlzdDxkeW5hbWljPiBfZGF0YTsKCiAgT2JqZWN0U291cmNlKHRoaXMuX2RhdGEsIHtib29sIHVzZURhdGFLaW5kc30pCiAgICAgIDogc3VwZXIodXNlRGF0YUtpbmRzOiB1c2VEYXRhS2luZHMpOwoKICBUIF9yZWFkPFQ+KCkgewogICAgZHluYW1pYyB2YWx1ZSA9IF9kYXRhW19pbmRleCsrXTsKICAgIGFzc2VydCh2YWx1ZSBpcyBULCAiRXhwZWN0ZWQgJFQgdmFsdWUsIGZvdW5kICR2YWx1ZS4kX2Vycm9yQ29udGV4dCIpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfYmVnaW4oU3RyaW5nIHRhZykgewogICAgVGFnIGV4cGVjdGVkVGFnID0gbmV3IFRhZygnYmVnaW46JHRhZycpOwogICAgVGFnIGFjdHVhbFRhZyA9IF9yZWFkKCk7CiAgICBhc3NlcnQoCiAgICAgICAgZXhwZWN0ZWRUYWcgPT0gYWN0dWFsVGFnLAogICAgICAgICJVbmV4cGVjdGVkIGJlZ2luIHRhZy4gIgogICAgICAgICJFeHBlY3RlZCAkZXhwZWN0ZWRUYWcsIGZvdW5kICRhY3R1YWxUYWcuJF9lcnJvckNvbnRleHQiKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgX2VuZChTdHJpbmcgdGFnKSB7CiAgICBUYWcgZXhwZWN0ZWRUYWcgPSBuZXcgVGFnKCdlbmQ6JHRhZycpOwogICAgVGFnIGFjdHVhbFRhZyA9IF9yZWFkKCk7CiAgICBhc3NlcnQoCiAgICAgICAgZXhwZWN0ZWRUYWcgPT0gYWN0dWFsVGFnLAogICAgICAgICJVbmV4cGVjdGVkIGVuZCB0YWcuICIKICAgICAgICAiRXhwZWN0ZWQgJGV4cGVjdGVkVGFnLCBmb3VuZCAkYWN0dWFsVGFnLiRfZXJyb3JDb250ZXh0Iik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgX3JlYWRTdHJpbmdJbnRlcm5hbCgpID0+IF9yZWFkKCk7CgogIEBvdmVycmlkZQogIEUgX3JlYWRFbnVtSW50ZXJuYWw8RT4oTGlzdDxFPiB2YWx1ZXMpID0+IF9yZWFkKCk7CgogIEBvdmVycmlkZQogIFVyaSBfcmVhZFVyaUludGVybmFsKCkgPT4gX3JlYWQoKTsKCiAgQG92ZXJyaWRlCiAgaW50IF9yZWFkSW50SW50ZXJuYWwoKSA9PiBfcmVhZCgpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9lcnJvckNvbnRleHQgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgZm9yIChpbnQgaSA9IF9pbmRleCAtIDUwOyBpIDwgX2luZGV4ICsgMTA7IGkrKykgewogICAgICBpZiAoaSA+PSAwICYmIGkgPCBfZGF0YS5sZW5ndGgpIHsKICAgICAgICBpZiAoaSA9PSBfaW5kZXggLSAxKSB7CiAgICAgICAgICBzYi53cml0ZSgnXG4+ICcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzYi53cml0ZSgnXG4gICcpOwogICAgICAgIH0KICAgICAgICBzYi53cml0ZShpKTsKICAgICAgICBzYi53cml0ZSgnICcpOwogICAgICAgIHNiLndyaXRlKF9kYXRhW2ldKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CksATk48AR4BSD8ENzASHQEwKwERJUoSBAEMHC0dDCIhQwQBDBorHQwiH0MEAQwrAQw1AQwlAQwlAQwdKjYoHxwRHAoVFxwIBhoEAgE1cGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi9vYmplY3Rfc291cmNlLmRhcnQqc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL3NzYS5kYXJ0tVEvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBzc2E7CgppbXBvcnQgJy4uL2JhY2tlbmRfc3RyYXRlZ3kuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzLCBKRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2NvbW1vbi9jb2RlZ2VuLmRhcnQnIHNob3cgQ29kZWdlblJlc3VsdCwgQ29kZWdlblJlZ2lzdHJ5OwppbXBvcnQgJy4uL2NvbW1vbi90YXNrcy5kYXJ0JyBzaG93IENvbXBpbGVyVGFzaywgTWVhc3VyZXI7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzOwppbXBvcnQgJy4uL2pzL3Jld3JpdGVfYXN5bmMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kLmRhcnQnIHNob3cgQ29kZWdlbklucHV0cywgRnVuY3Rpb25Db21waWxlcjsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnIHNob3cgTW9kdWxhck5hbWVyLCBNb2R1bGFyTmFtZXJJbXBsOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIvY29kZV9lbWl0dGVyX3Rhc2suZGFydCcgc2hvdyBNb2R1bGFyRW1pdHRlcjsKaW1wb3J0ICcuLi9qc19lbWl0dGVyL3N0YXJ0dXBfZW1pdHRlci9lbWl0dGVyLmRhcnQnIHNob3cgTW9kdWxhckVtaXR0ZXJJbXBsOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL3R5cGVfcmVjaXBlLmRhcnQnIHNob3cgVHlwZUV4cHJlc3Npb25SZWNpcGU7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CmltcG9ydCAnLi4vdW5pdmVyc2UvdXNlLmRhcnQnIHNob3cgU3RhdGljVXNlOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwoKaW1wb3J0ICdjb2RlZ2VuLmRhcnQnOwppbXBvcnQgJ25vZGVzLmRhcnQnOwppbXBvcnQgJ29wdGltaXplLmRhcnQnOwoKY2xhc3MgU3NhRnVuY3Rpb25Db21waWxlciBpbXBsZW1lbnRzIEZ1bmN0aW9uQ29tcGlsZXIgewogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgX3JlcG9ydGVyOwogIGZpbmFsIFNzYUNvZGVHZW5lcmF0b3JUYXNrIGdlbmVyYXRvcjsKICBmaW5hbCBTc2FCdWlsZGVyVGFzayBfYnVpbGRlcjsKICBmaW5hbCBTc2FPcHRpbWl6ZXJUYXNrIG9wdGltaXplcjsKICBmaW5hbCBTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5IHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3k7CiAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHM7CiAgQ29kZWdlbklucHV0cyBfY29kZWdlbjsKCiAgU3NhRnVuY3Rpb25Db21waWxlcigKICAgICAgdGhpcy5fb3B0aW9ucywKICAgICAgdGhpcy5fcmVwb3J0ZXIsCiAgICAgIEJhY2tlbmRTdHJhdGVneSBiYWNrZW5kU3RyYXRlZ3ksCiAgICAgIE1lYXN1cmVyIG1lYXN1cmVyLAogICAgICB0aGlzLnNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kpCiAgICAgIDogZ2VuZXJhdG9yID0gbmV3IFNzYUNvZGVHZW5lcmF0b3JUYXNrKAogICAgICAgICAgICBtZWFzdXJlciwgX29wdGlvbnMsIHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kpLAogICAgICAgIF9idWlsZGVyID0gbmV3IFNzYUJ1aWxkZXJUYXNrKAogICAgICAgICAgICBtZWFzdXJlciwgYmFja2VuZFN0cmF0ZWd5LCBzb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5KSwKICAgICAgICBvcHRpbWl6ZXIgPSBuZXcgU3NhT3B0aW1pemVyVGFzayhtZWFzdXJlciwgX29wdGlvbnMpOwoKICBAb3ZlcnJpZGUKICB2b2lkIGluaXRpYWxpemUoR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuKSB7CiAgICBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cyA9IGdsb2JhbEluZmVyZW5jZVJlc3VsdHM7CiAgICBfY29kZWdlbiA9IGNvZGVnZW47CiAgICBfYnVpbGRlci5vbkNvZGVnZW5TdGFydCgpOwogIH0KCiAgLy8vIEdlbmVyYXRlcyBKYXZhU2NyaXB0IGNvZGUgZm9yIFttZW1iZXJdLgogIC8vLyBVc2luZyB0aGUgc3NhIGJ1aWxkZXIsIG9wdGltaXplciBhbmQgY29kZSBnZW5lcmF0b3IuCiAgQG92ZXJyaWRlCiAgQ29kZWdlblJlc3VsdCBjb21waWxlKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCA9IF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzLmNsb3NlZFdvcmxkOwogICAgQ29kZWdlblJlZ2lzdHJ5IHJlZ2lzdHJ5ID0KICAgICAgICBuZXcgQ29kZWdlblJlZ2lzdHJ5KGNsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudCwgbWVtYmVyKTsKICAgIE1vZHVsYXJOYW1lciBuYW1lciA9IG5ldyBNb2R1bGFyTmFtZXJJbXBsKHJlZ2lzdHJ5LAogICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLCBfY29kZWdlbi5ydGlUYWdzLCBfY29kZWdlbi5maXhlZE5hbWVzKTsKICAgIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIgPSBuZXcgTW9kdWxhckVtaXR0ZXJJbXBsKG5hbWVyLCByZWdpc3RyeSwgX29wdGlvbnMpOwogICAgaWYgKG1lbWJlci5pc0NvbnN0cnVjdG9yICYmCiAgICAgICAgbWVtYmVyLmVuY2xvc2luZ0NsYXNzID09IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzTnVsbENsYXNzKSB7CiAgICAgIC8vIFdvcmsgYXJvdW5kIGEgcHJvYmxlbSBjb21waWxpbmcgSlNOdWxsJ3MgY29uc3RydWN0b3IuCiAgICAgIHJldHVybiByZWdpc3RyeS5jbG9zZShudWxsKTsKICAgIH0KCiAgICBIR3JhcGggZ3JhcGggPSBfYnVpbGRlci5idWlsZChtZW1iZXIsIGNsb3NlZFdvcmxkLCBfZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywKICAgICAgICBfY29kZWdlbiwgcmVnaXN0cnksIG5hbWVyLCBlbWl0dGVyKTsKICAgIGlmIChncmFwaCA9PSBudWxsKSB7CiAgICAgIHJldHVybiByZWdpc3RyeS5jbG9zZShudWxsKTsKICAgIH0KICAgIG9wdGltaXplci5vcHRpbWl6ZShtZW1iZXIsIGdyYXBoLCBfY29kZWdlbiwgY2xvc2VkV29ybGQsCiAgICAgICAgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMsIHJlZ2lzdHJ5KTsKICAgIGpzLkV4cHJlc3Npb24gcmVzdWx0ID0gZ2VuZXJhdG9yLmdlbmVyYXRlQ29kZSgKICAgICAgICBtZW1iZXIsIGdyYXBoLCBfY29kZWdlbiwgY2xvc2VkV29ybGQsIHJlZ2lzdHJ5LCBuYW1lciwgZW1pdHRlcik7CiAgICBpZiAoZ3JhcGgubmVlZHNBc3luY1Jld3JpdGUpIHsKICAgICAgU291cmNlSW5mb3JtYXRpb25CdWlsZGVyIHNvdXJjZUluZm9ybWF0aW9uQnVpbGRlciA9CiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5LmNyZWF0ZUJ1aWxkZXJGb3JDb250ZXh0KG1lbWJlcik7CiAgICAgIHJlc3VsdCA9IF9yZXdyaXRlQXN5bmMoCiAgICAgICAgICBfY29kZWdlbiwKICAgICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLAogICAgICAgICAgY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LAogICAgICAgICAgcmVnaXN0cnksCiAgICAgICAgICBuYW1lciwKICAgICAgICAgIGVtaXR0ZXIsCiAgICAgICAgICBtZW1iZXIsCiAgICAgICAgICByZXN1bHQsCiAgICAgICAgICBncmFwaC5hc3luY0VsZW1lbnRUeXBlLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQXN5bmNCb2R5KCksCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRBc3luY0V4aXQoKSk7CiAgICB9CiAgICBpZiAocmVzdWx0LnNvdXJjZUluZm9ybWF0aW9uID09IG51bGwpIHsKICAgICAgcmVzdWx0ID0gcmVzdWx0LndpdGhTb3VyY2VJbmZvcm1hdGlvbigKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kuYnVpbGRTb3VyY2VNYXBwZWRNYXJrZXIoKSk7CiAgICB9CgogICAgcmV0dXJuIHJlZ2lzdHJ5LmNsb3NlKHJlc3VsdCk7CiAgfQoKICBqcy5FeHByZXNzaW9uIF9yZXdyaXRlQXN5bmMoCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LAogICAgICBDb2RlZ2VuUmVnaXN0cnkgcmVnaXN0cnksCiAgICAgIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwKICAgICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwKICAgICAganMuRXhwcmVzc2lvbiBjb2RlLAogICAgICBEYXJ0VHlwZSBhc3luY1R5cGVQYXJhbWV0ZXIsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIGJvZHlTb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgU291cmNlSW5mb3JtYXRpb24gZXhpdFNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBpZiAoZWxlbWVudC5hc3luY01hcmtlciA9PSBBc3luY01hcmtlci5TWU5DKSByZXR1cm4gY29kZTsKCiAgICBBc3luY1Jld3JpdGVyQmFzZSByZXdyaXRlciA9IG51bGw7CiAgICBqcy5OYW1lIG5hbWUgPSBuYW1lci5tZXRob2RQcm9wZXJ0eU5hbWUoCiAgICAgICAgZWxlbWVudCBpcyBKR2VuZXJhdG9yQm9keSA/IGVsZW1lbnQuZnVuY3Rpb24gOiBlbGVtZW50KTsKCiAgICBzd2l0Y2ggKGVsZW1lbnQuYXN5bmNNYXJrZXIpIHsKICAgICAgY2FzZSBBc3luY01hcmtlci5BU1lOQzoKICAgICAgICByZXdyaXRlciA9IF9tYWtlQXN5bmNSZXdyaXRlcigKICAgICAgICAgICAgY29kZWdlbiwKICAgICAgICAgICAgY29tbW9uRWxlbWVudHMsCiAgICAgICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICAgICAgcmVnaXN0cnksCiAgICAgICAgICAgIG5hbWVyLAogICAgICAgICAgICBlbWl0dGVyLAogICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICBjb2RlLAogICAgICAgICAgICBhc3luY1R5cGVQYXJhbWV0ZXIsCiAgICAgICAgICAgIG5hbWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEFzeW5jTWFya2VyLlNZTkNfU1RBUjoKICAgICAgICByZXdyaXRlciA9IF9tYWtlU3luY1N0YXJSZXdyaXRlcigKICAgICAgICAgICAgY29kZWdlbiwKICAgICAgICAgICAgY29tbW9uRWxlbWVudHMsCiAgICAgICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICAgICAgcmVnaXN0cnksCiAgICAgICAgICAgIG5hbWVyLAogICAgICAgICAgICBlbWl0dGVyLAogICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICBjb2RlLAogICAgICAgICAgICBhc3luY1R5cGVQYXJhbWV0ZXIsCiAgICAgICAgICAgIG5hbWUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEFzeW5jTWFya2VyLkFTWU5DX1NUQVI6CiAgICAgICAgcmV3cml0ZXIgPSBfbWFrZUFzeW5jU3RhclJld3JpdGVyKAogICAgICAgICAgICBjb2RlZ2VuLAogICAgICAgICAgICBjb21tb25FbGVtZW50cywKICAgICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LAogICAgICAgICAgICByZWdpc3RyeSwKICAgICAgICAgICAgbmFtZXIsCiAgICAgICAgICAgIGVtaXR0ZXIsCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgIGNvZGUsCiAgICAgICAgICAgIGFzeW5jVHlwZVBhcmFtZXRlciwKICAgICAgICAgICAgbmFtZSk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICByZXR1cm4gcmV3cml0ZXIucmV3cml0ZShjb2RlLCBib2R5U291cmNlSW5mb3JtYXRpb24sIGV4aXRTb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICAvLy8gUmV0dXJucyBhbiBvcHRpb25hbCBleHByZXNzaW9uIHRoYXQgZXZhbHVhdGVzIFt0eXBlXS4gIFJldHVybnMgYG51bGxgIGlmCiAgLy8vIHRoZSB0eXBlIGV4cHJlc3Npb24gaXMgZGV0ZXJtaW5lZCBieSB0aGUgb3V0c2lkZSBjb250ZXh0IGFuZCBzaG91bGQgYmUKICAvLy8gYWRkZWQgYXMgYSBmdW5jdGlvbiBwYXJhbWV0ZXIgdG8gdGhlIHJld3JpdHRlbiBjb2RlLgogIC8vIFRPRE8oc3JhKTogV2UgY291bGQgYWxzbyByZXR1cm4gYW4gZW1wdHkgbGlzdCBpZiB0aGUgZ2VuZXJhdG9yIHRha2VzIG5vCiAgLy8gdHlwZSAoZS5nLiBkdWUgdG8gcnRpTmVlZCBvcHRpbWl6YXRpb24pLgogIExpc3Q8anMuRXhwcmVzc2lvbj4gX2ZldGNoSXRlbVR5cGUoCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwgTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwgRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICB2YXIgYXN0ID0gY29kZWdlbi5ydGlFbmNvZGVyLmdldFR5cGVSZXByZXNlbnRhdGlvbihlbWl0dGVyLCB0eXBlLCBudWxsKTsKICAgIHJldHVybiA8anMuRXhwcmVzc2lvbj5bYXN0XTsKICB9CgogIExpc3Q8anMuRXhwcmVzc2lvbj4gX2ZldGNoSXRlbVR5cGVOZXdSdGkoCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIENvZGVnZW5SZWdpc3RyeSByZWdpc3RyeSwKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwKICAgICAgRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CgogICAgRnVuY3Rpb25FbnRpdHkgaGVscGVyRWxlbWVudCA9IGNvbW1vbkVsZW1lbnRzLmZpbmRUeXBlOwogICAgcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoaGVscGVyRWxlbWVudCwgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSk7CiAgICBqcy5FeHByZXNzaW9uIHJlY2lwZSA9IGNvZGVnZW4ucnRpUmVjaXBlRW5jb2RlcgogICAgICAgIC5lbmNvZGVHcm91bmRSZWNpcGUoZW1pdHRlciwgVHlwZUV4cHJlc3Npb25SZWNpcGUodHlwZSkpOwogICAganMuRXhwcmVzc2lvbiBoZWxwZXIgPSBlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGhlbHBlckVsZW1lbnQpOwogICAgdmFyIGFzdCA9IGpzLmpzKHInIygjKScsIFtoZWxwZXIsIHJlY2lwZV0pOwogICAgcmV0dXJuIDxqcy5FeHByZXNzaW9uPlthc3RdOwogIH0KCiAgQXN5bmNSZXdyaXRlciBfbWFrZUFzeW5jUmV3cml0ZXIoCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LAogICAgICBDb2RlZ2VuUmVnaXN0cnkgcmVnaXN0cnksCiAgICAgIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwKICAgICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwKICAgICAganMuRXhwcmVzc2lvbiBjb2RlLAogICAgICBEYXJ0VHlwZSBlbGVtZW50VHlwZSwKICAgICAganMuTmFtZSBuYW1lKSB7CiAgICBGdW5jdGlvbkVudGl0eSBzdGFydEZ1bmN0aW9uID0gY29tbW9uRWxlbWVudHMuYXN5bmNIZWxwZXJTdGFydFN5bmM7CiAgICBGdW5jdGlvbkVudGl0eSBjb21wbGV0ZXJGYWN0b3J5ID0gY29tbW9uRWxlbWVudHMuYXN5bmNBd2FpdENvbXBsZXRlckZhY3Rvcnk7CgogICAgTGlzdDxqcy5FeHByZXNzaW9uPiBpdGVtVHlwZUV4cHJlc3Npb24gPSBfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpCiAgICAgICAgPyBfZmV0Y2hJdGVtVHlwZU5ld1J0aSgKICAgICAgICAgICAgY29kZWdlbiwgY29tbW9uRWxlbWVudHMsIHJlZ2lzdHJ5LCBlbWl0dGVyLCBlbGVtZW50VHlwZSkKICAgICAgICA6IF9mZXRjaEl0ZW1UeXBlKGNvZGVnZW4sIGVtaXR0ZXIsIGVsZW1lbnRUeXBlKTsKCiAgICBBc3luY1Jld3JpdGVyIHJld3JpdGVyID0gbmV3IEFzeW5jUmV3cml0ZXIoX3JlcG9ydGVyLCBlbGVtZW50LAogICAgICAgIGFzeW5jU3RhcnQ6IGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3Moc3RhcnRGdW5jdGlvbiksCiAgICAgICAgYXN5bmNBd2FpdDoKICAgICAgICAgICAgZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21tb25FbGVtZW50cy5hc3luY0hlbHBlckF3YWl0KSwKICAgICAgICBhc3luY1JldHVybjoKICAgICAgICAgICAgZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21tb25FbGVtZW50cy5hc3luY0hlbHBlclJldHVybiksCiAgICAgICAgYXN5bmNSZXRocm93OgogICAgICAgICAgICBlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbW1vbkVsZW1lbnRzLmFzeW5jSGVscGVyUmV0aHJvdyksCiAgICAgICAgd3JhcEJvZHk6IGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoY29tbW9uRWxlbWVudHMud3JhcEJvZHkpLAogICAgICAgIGNvbXBsZXRlckZhY3Rvcnk6IGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoY29tcGxldGVyRmFjdG9yeSksCiAgICAgICAgY29tcGxldGVyRmFjdG9yeVR5cGVBcmd1bWVudHM6IGl0ZW1UeXBlRXhwcmVzc2lvbiwKICAgICAgICBzYWZlVmFyaWFibGVOYW1lOiBuYW1lci5zYWZlVmFyaWFibGVQcmVmaXhGb3JBc3luY1Jld3JpdGUsCiAgICAgICAgYm9keU5hbWU6IG5hbWVyLmRlcml2ZUFzeW5jQm9keU5hbWUobmFtZSkpOwoKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgIGNvbXBsZXRlckZhY3RvcnksCiAgICAgICAgY29uc3QgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKDAsIDEpLAogICAgICAgIFtlbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25Bc3luY09yU3luY1N0YXJFbGVtZW50VHlwZShlbGVtZW50KV0pKTsKCiAgICByZXR1cm4gcmV3cml0ZXI7CiAgfQoKICBTeW5jU3RhclJld3JpdGVyIF9tYWtlU3luY1N0YXJSZXdyaXRlcigKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIENvZGVnZW5SZWdpc3RyeSByZWdpc3RyeSwKICAgICAgTW9kdWxhck5hbWVyIG5hbWVyLAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLAogICAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50LAogICAgICBqcy5FeHByZXNzaW9uIGNvZGUsCiAgICAgIERhcnRUeXBlIGFzeW5jVHlwZVBhcmFtZXRlciwKICAgICAganMuTmFtZSBuYW1lKSB7CiAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGl0ZW1UeXBlRXhwcmVzc2lvbiA9IF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkKICAgICAgICA/IF9mZXRjaEl0ZW1UeXBlTmV3UnRpKAogICAgICAgICAgICBjb2RlZ2VuLCBjb21tb25FbGVtZW50cywgcmVnaXN0cnksIGVtaXR0ZXIsIGFzeW5jVHlwZVBhcmFtZXRlcikKICAgICAgICA6IF9mZXRjaEl0ZW1UeXBlKGNvZGVnZW4sIGVtaXR0ZXIsIGFzeW5jVHlwZVBhcmFtZXRlcik7CgogICAgU3luY1N0YXJSZXdyaXRlciByZXdyaXRlciA9IG5ldyBTeW5jU3RhclJld3JpdGVyKF9yZXBvcnRlciwgZWxlbWVudCwKICAgICAgICBlbmRPZkl0ZXJhdGlvbjoKICAgICAgICAgICAgZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21tb25FbGVtZW50cy5lbmRPZkl0ZXJhdGlvbiksCiAgICAgICAgaXRlcmFibGVGYWN0b3J5OiBlbWl0dGVyCiAgICAgICAgICAgIC5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21tb25FbGVtZW50cy5zeW5jU3Rhckl0ZXJhYmxlRmFjdG9yeSksCiAgICAgICAgaXRlcmFibGVGYWN0b3J5VHlwZUFyZ3VtZW50czogaXRlbVR5cGVFeHByZXNzaW9uLAogICAgICAgIHlpZWxkU3RhckV4cHJlc3Npb246CiAgICAgICAgICAgIGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoY29tbW9uRWxlbWVudHMueWllbGRTdGFyKSwKICAgICAgICB1bmNhdWdodEVycm9yRXhwcmVzc2lvbjoKICAgICAgICAgICAgZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21tb25FbGVtZW50cy5zeW5jU3RhclVuY2F1Z2h0RXJyb3IpLAogICAgICAgIHNhZmVWYXJpYWJsZU5hbWU6IG5hbWVyLnNhZmVWYXJpYWJsZVByZWZpeEZvckFzeW5jUmV3cml0ZSwKICAgICAgICBib2R5TmFtZTogbmFtZXIuZGVyaXZlQXN5bmNCb2R5TmFtZShuYW1lKSk7CgogICAgcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgY29tbW9uRWxlbWVudHMuc3luY1N0YXJJdGVyYWJsZUZhY3RvcnksCiAgICAgICAgY29uc3QgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKDEsIDEpLAogICAgICAgIFtlbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25Bc3luY09yU3luY1N0YXJFbGVtZW50VHlwZShlbGVtZW50KV0pKTsKCiAgICByZXR1cm4gcmV3cml0ZXI7CiAgfQoKICBBc3luY1N0YXJSZXdyaXRlciBfbWFrZUFzeW5jU3RhclJld3JpdGVyKAogICAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW4sCiAgICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgQ29kZWdlblJlZ2lzdHJ5IHJlZ2lzdHJ5LAogICAgICBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsCiAgICAgIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsCiAgICAgIGpzLkV4cHJlc3Npb24gY29kZSwKICAgICAgRGFydFR5cGUgYXN5bmNUeXBlUGFyYW1ldGVyLAogICAgICBqcy5OYW1lIG5hbWUpIHsKICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gaXRlbVR5cGVFeHByZXNzaW9uID0gX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aQogICAgICAgID8gX2ZldGNoSXRlbVR5cGVOZXdSdGkoCiAgICAgICAgICAgIGNvZGVnZW4sIGNvbW1vbkVsZW1lbnRzLCByZWdpc3RyeSwgZW1pdHRlciwgYXN5bmNUeXBlUGFyYW1ldGVyKQogICAgICAgIDogX2ZldGNoSXRlbVR5cGUoY29kZWdlbiwgZW1pdHRlciwgYXN5bmNUeXBlUGFyYW1ldGVyKTsKCiAgICBBc3luY1N0YXJSZXdyaXRlciByZXdyaXRlciA9IG5ldyBBc3luY1N0YXJSZXdyaXRlcihfcmVwb3J0ZXIsIGVsZW1lbnQsCiAgICAgICAgYXN5bmNTdGFySGVscGVyOgogICAgICAgICAgICBlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbW1vbkVsZW1lbnRzLmFzeW5jU3RhckhlbHBlciksCiAgICAgICAgc3RyZWFtT2ZDb250cm9sbGVyOgogICAgICAgICAgICBlbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGNvbW1vbkVsZW1lbnRzLnN0cmVhbU9mQ29udHJvbGxlciksCiAgICAgICAgd3JhcEJvZHk6IGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoY29tbW9uRWxlbWVudHMud3JhcEJvZHkpLAogICAgICAgIG5ld0NvbnRyb2xsZXI6IGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoCiAgICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLmFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJGYWN0b3J5KSwKICAgICAgICBuZXdDb250cm9sbGVyVHlwZUFyZ3VtZW50czogaXRlbVR5cGVFeHByZXNzaW9uLAogICAgICAgIHNhZmVWYXJpYWJsZU5hbWU6IG5hbWVyLnNhZmVWYXJpYWJsZVByZWZpeEZvckFzeW5jUmV3cml0ZSwKICAgICAgICB5aWVsZEV4cHJlc3Npb246CiAgICAgICAgICAgIGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoY29tbW9uRWxlbWVudHMueWllbGRTaW5nbGUpLAogICAgICAgIHlpZWxkU3RhckV4cHJlc3Npb246CiAgICAgICAgICAgIGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoY29tbW9uRWxlbWVudHMueWllbGRTdGFyKSwKICAgICAgICBib2R5TmFtZTogbmFtZXIuZGVyaXZlQXN5bmNCb2R5TmFtZShuYW1lKSk7CgogICAgcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgY29tbW9uRWxlbWVudHMuYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckZhY3RvcnksCiAgICAgICAgY29uc3QgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKDEsIDEpLAogICAgICAgIFtlbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25Bc3luY09yU3luY1N0YXJFbGVtZW50VHlwZShlbGVtZW50KV0pKTsKCiAgICByZXR1cm4gcmV3cml0ZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDb21waWxlclRhc2s+IGdldCB0YXNrcyB7CiAgICByZXR1cm4gPENvbXBpbGVyVGFzaz5bX2J1aWxkZXIsIG9wdGltaXplciwgZ2VuZXJhdG9yXTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIFNzYUJ1aWxkZXIgewogIC8vLyBDcmVhdGVzIHRoZSBbSEdyYXBoXSBmb3IgW21lbWJlcl0gb3IgcmV0dXJucyBgbnVsbGAgaWYgbm8gY29kZSBpcyBuZWVkZWQKICAvLy8gZm9yIFttZW1iZXJdLgogIEhHcmFwaCBidWlsZCgKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciwKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLAogICAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW4sCiAgICAgIENvZGVnZW5SZWdpc3RyeSByZWdpc3RyeSwKICAgICAgTW9kdWxhck5hbWVyIG5hbWVyLAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyKTsKfQoKY2xhc3MgU3NhQnVpbGRlclRhc2sgZXh0ZW5kcyBDb21waWxlclRhc2sgewogIGZpbmFsIEJhY2tlbmRTdHJhdGVneSBfYmFja2VuZFN0cmF0ZWd5OwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgX3NvdXJjZUluZm9ybWF0aW9uRmFjdG9yeTsKICBTc2FCdWlsZGVyIF9idWlsZGVyOwoKICBTc2FCdWlsZGVyVGFzaygKICAgICAgTWVhc3VyZXIgbWVhc3VyZXIsIHRoaXMuX2JhY2tlbmRTdHJhdGVneSwgdGhpcy5fc291cmNlSW5mb3JtYXRpb25GYWN0b3J5KQogICAgICA6IHN1cGVyKG1lYXN1cmVyKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+ICdTU0EgYnVpbGRlcic7CgogIHZvaWQgb25Db2RlZ2VuU3RhcnQoKSB7CiAgICBfYnVpbGRlciA9CiAgICAgICAgX2JhY2tlbmRTdHJhdGVneS5jcmVhdGVTc2FCdWlsZGVyKHRoaXMsIF9zb3VyY2VJbmZvcm1hdGlvbkZhY3RvcnkpOwogIH0KCiAgLy8vIENyZWF0ZXMgdGhlIFtIR3JhcGhdIGZvciBbbWVtYmVyXSBvciByZXR1cm5zIGBudWxsYCBpZiBubyBjb2RlIGlzIG5lZWRlZAogIC8vLyBmb3IgW21lbWJlcl0uCiAgSEdyYXBoIGJ1aWxkKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgQ29kZWdlblJlZ2lzdHJ5IHJlZ2lzdHJ5LAogICAgICBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIHJldHVybiBfYnVpbGRlci5idWlsZChtZW1iZXIsIGNsb3NlZFdvcmxkLCBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLCBjb2RlZ2VuLAogICAgICAgIHJlZ2lzdHJ5LCBuYW1lciwgZW1pdHRlcik7CiAgfQp9CoF1AE5OPAENASMZS0U7JCEhKB4jSkdDTSRBGj0uKgEXFRgBOCImKCEkPTYaARcVFicZJi48J0M+AQxFHzYYHwQBLjsML0QfRThMUCBLPyMGAVAtGSMGPSwzSSM6RR4UJioUERMSEiI1NgYsLUAGASMEAR8dJS4gGh4eGiMvMT4BJy1BASMeJxUcIBYTFRUSIBMPIioVHCAWExUVEiATDyMrFRwgFhMVFRIgEw8GUQQBT007TS4mRiNNIQQBLB0lIB4XIwE8IEs0QkgwIQQBJB0lLiAaHh4aHBZIUQFHIEU5AUNBFEsVTBZNSUo7QzQBOxorTwEVBAEqHSUuIBoeHhojFkcgTEABSRhJIUs6HUQhUEM0ATswK08BFQQBLB0lLiAaHh4aIxZHIExAAUsZShxNSTU+OEMZRh1ENAE7OStPARUEAQwlOwQCARxPFBAbIDkdIBofAgEsKj0XARJQGQEMJAEaD0wEAU8UEBsgOR0gGiBQIwQCASFwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2Evc3NhLmRhcnQrc2Rrcm9vdDovcGtnL2pzX2FzdC9saWIvc3JjL3ByZWNlZGVuY2UuZGFydILkLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgcHJlY2VkZW5jZTsKCmNvbnN0IEVYUFJFU1NJT04gPSAwOwpjb25zdCBBU1NJR05NRU5UID0gRVhQUkVTU0lPTiArIDE7CmNvbnN0IExPR0lDQUxfT1IgPSBBU1NJR05NRU5UICsgMTsKY29uc3QgTE9HSUNBTF9BTkQgPSBMT0dJQ0FMX09SICsgMTsKY29uc3QgQklUX09SID0gTE9HSUNBTF9BTkQgKyAxOwpjb25zdCBCSVRfWE9SID0gQklUX09SICsgMTsKY29uc3QgQklUX0FORCA9IEJJVF9YT1IgKyAxOwpjb25zdCBFUVVBTElUWSA9IEJJVF9BTkQgKyAxOwpjb25zdCBSRUxBVElPTkFMID0gRVFVQUxJVFkgKyAxOwpjb25zdCBTSElGVCA9IFJFTEFUSU9OQUwgKyAxOwpjb25zdCBBRERJVElWRSA9IFNISUZUICsgMTsKY29uc3QgTVVMVElQTElDQVRJVkUgPSBBRERJVElWRSArIDE7CmNvbnN0IFVOQVJZID0gTVVMVElQTElDQVRJVkUgKyAxOwpjb25zdCBDQUxMID0gVU5BUlkgKyAxOwpjb25zdCBMRUZUX0hBTkRfU0lERSA9IENBTEwgKyAxOwpjb25zdCBQUklNQVJZID0gTEVGVF9IQU5EX1NJREUgKyAxOwoYAE5OPAEUARYjIyQgHB0eIR4cJSIYISQBInBhY2thZ2U6anNfYXN0L3NyYy9wcmVjZWRlbmNlLmRhcnQzc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvY29uc3RhbnRzL3ZhbHVlcy5kYXJ0wAB2fC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY29uc3RhbnRzLnZhbHVlczsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9kZWZlcnJlZF9sb2FkLmRhcnQnIHNob3cgT3V0cHV0VW5pdDsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwoKZW51bSBDb25zdGFudFZhbHVlS2luZCB7CiAgRlVOQ1RJT04sCiAgTlVMTCwKICBJTlQsCiAgRE9VQkxFLAogIEJPT0wsCiAgU1RSSU5HLAogIExJU1QsCiAgU0VULAogIE1BUCwKICBDT05TVFJVQ1RFRCwKICBUWVBFLAogIElOVEVSQ0VQVE9SLAogIEpTX05BTUUsCiAgRFVNTVlfSU5URVJDRVBUT1IsCiAgVU5SRUFDSEFCTEUsCiAgSU5TVEFOVElBVElPTiwKICBERUZFUlJFRF9HTE9CQUwsCiAgTk9OX0NPTlNUQU5ULAp9CgphYnN0cmFjdCBjbGFzcyBDb25zdGFudFZhbHVlVmlzaXRvcjxSLCBBPiB7CiAgY29uc3QgQ29uc3RhbnRWYWx1ZVZpc2l0b3IoKTsKCiAgUiB2aXNpdEZ1bmN0aW9uKGNvdmFyaWFudCBGdW5jdGlvbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdE51bGwoY292YXJpYW50IE51bGxDb25zdGFudFZhbHVlIGNvbnN0YW50LCBjb3ZhcmlhbnQgQSBhcmcpOwogIFIgdmlzaXRJbnQoY292YXJpYW50IEludENvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdERvdWJsZShjb3ZhcmlhbnQgRG91YmxlQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0Qm9vbChjb3ZhcmlhbnQgQm9vbENvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdFN0cmluZyhjb3ZhcmlhbnQgU3RyaW5nQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0TGlzdChjb3ZhcmlhbnQgTGlzdENvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdFNldChjb3ZhcmlhbnQgU2V0Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0TWFwKGNvdmFyaWFudCBNYXBDb25zdGFudFZhbHVlIGNvbnN0YW50LCBjb3ZhcmlhbnQgQSBhcmcpOwogIFIgdmlzaXRDb25zdHJ1Y3RlZCgKICAgICAgY292YXJpYW50IENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0VHlwZShjb3ZhcmlhbnQgVHlwZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdEludGVyY2VwdG9yKAogICAgICBjb3ZhcmlhbnQgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGNvbnN0YW50LCBjb3ZhcmlhbnQgQSBhcmcpOwogIFIgdmlzaXREdW1teUludGVyY2VwdG9yKAogICAgICBjb3ZhcmlhbnQgRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdFVucmVhY2hhYmxlKAogICAgICBjb3ZhcmlhbnQgVW5yZWFjaGFibGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBjb3ZhcmlhbnQgQSBhcmcpOwogIFIgdmlzaXRKc05hbWUoY292YXJpYW50IEpzTmFtZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIGNvdmFyaWFudCBBIGFyZyk7CiAgUiB2aXNpdERlZmVycmVkR2xvYmFsKAogICAgICBjb3ZhcmlhbnQgRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlIGNvbnN0YW50LCBjb3ZhcmlhbnQgQSBhcmcpOwogIFIgdmlzaXROb25Db25zdGFudChjb3ZhcmlhbnQgTm9uQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0SW5zdGFudGlhdGlvbigKICAgICAgY292YXJpYW50IEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlIGNvbnN0YW50LCBjb3ZhcmlhbnQgQSBhcmcpOwp9CgphYnN0cmFjdCBjbGFzcyBDb25zdGFudFZhbHVlIHsKICBjb25zdCBDb25zdGFudFZhbHVlKCk7CgogIC8vLyBgdHJ1ZWAgaWYgdGhpcyBpcyBhIHZhbGlkIGNvbnN0YW50IHZhbHVlLgogIGJvb2wgZ2V0IGlzQ29uc3RhbnQgPT4gdHJ1ZTsKCiAgYm9vbCBnZXQgaXNOdWxsID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzQm9vbCA9PiBmYWxzZTsKICBib29sIGdldCBpc1RydWUgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNGYWxzZSA9PiBmYWxzZTsKICBib29sIGdldCBpc0ludCA9PiBmYWxzZTsKICBib29sIGdldCBpc0RvdWJsZSA9PiBmYWxzZTsKICBib29sIGdldCBpc051bSA9PiBmYWxzZTsKICBib29sIGdldCBpc1N0cmluZyA9PiBmYWxzZTsKICBib29sIGdldCBpc0xpc3QgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNTZXQgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNNYXAgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNDb25zdHJ1Y3RlZE9iamVjdCA9PiBmYWxzZTsKICBib29sIGdldCBpc0Z1bmN0aW9uID0+IGZhbHNlOwoKICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb25zdGFudCBpcyBudWxsLCBhIGJvb2wsIGEgbnVtYmVyIG9yIGEgc3RyaW5nLgogIGJvb2wgZ2V0IGlzUHJpbWl0aXZlID0+IGZhbHNlOwoKICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjb25zdGFudCBpcyBhIGxpc3QsIGEgbWFwIG9yIGEgY29uc3RydWN0ZWQgb2JqZWN0LgogIGJvb2wgZ2V0IGlzT2JqZWN0ID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzVHlwZSA9PiBmYWxzZTsKICBib29sIGdldCBpc0ludGVyY2VwdG9yID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzRHVtbXkgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzTmFOID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzTWludXNaZXJvID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzWmVybyA9PiBmYWxzZTsKICBib29sIGdldCBpc09uZSA9PiBmYWxzZTsKICBib29sIGdldCBpc1Bvc2l0aXZlSW5maW5pdHkgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNOZWdhdGl2ZUluZmluaXR5ID0+IGZhbHNlOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZXBsYWNlIHdpdGggYSAndHlwZScgZ2V0dGVyLgogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpOwoKICBMaXN0PENvbnN0YW50VmFsdWU+IGdldERlcGVuZGVuY2llcygpOwoKICBhY2NlcHQoQ29uc3RhbnRWYWx1ZVZpc2l0b3IgdmlzaXRvciwgYXJnKTsKCiAgLy8vIFRoZSB2YWx1ZSBvZiB0aGlzIGNvbnN0YW50IGluIERhcnQgc3ludGF4LCBpZiBwb3NzaWJsZS4KICAvLy8KICAvLy8gRm9yIFtDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWVdcyB0aGVyZSBpcyBubyB3YXkgdG8gY3JlYXRlIGEgdmFsaWQgY29uc3QKICAvLy8gZXhwcmVzc2lvbiBmcm9tIHRoZSB2YWx1ZSBzbyB0aGUgdW5wYXJzZSBvZiB0aGVzZSBpcyBiZXN0IGVmZm9ydC4KICAvLy8KICAvLy8gRm9yIHRoZSBzeW50aGV0aWMgY29uc3RhbnRzLCBbRGVmZXJyZWRDb25zdGFudFZhbHVlXSwKICAvLy8gW0RlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZV0sIFtTeW50aGV0aWNDb25zdGFudFZhbHVlXSwKICAvLy8gW0ludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZV0gdGhlIHVucGFyc2UgaXMgZGVzY3JpcHRpdmUgb25seS4KICBTdHJpbmcgdG9EYXJ0VGV4dCgpOwoKICAvLy8gUmV0dXJucyBhIHN0cnVjdHVyZWQgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBjb25zdGFudCBzdWl0ZWQgZm9yIGRlYnVnZ2luZy4KICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpOwoKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgYXNzZXJ0RGVidWdNb2RlKCJVc2UgQ29uc3RhbnRWYWx1ZS50b0RhcnRUZXh0KCkgb3IgIgogICAgICAgICJDb25zdGFudFZhbHVlLnRvU3RydWN0dXJlZFRleHQoKSAiCiAgICAgICAgImluc3RlYWQgb2YgQ29uc3RhbnRWYWx1ZS50b1N0cmluZygpLiIpOwogICAgcmV0dXJuIHRvU3RydWN0dXJlZFRleHQoKTsKICB9Cn0KCmNsYXNzIEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBleHRlbmRzIENvbnN0YW50VmFsdWUgewogIGZpbmFsIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQ7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU2hvdWxkIHRoZSB0eXBlIGJlIGRlcml2ZWQgZnJvbSBbZWxlbWVudF0uCiAgZmluYWwgRnVuY3Rpb25UeXBlIHR5cGU7CgogIEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSh0aGlzLmVsZW1lbnQsIHRoaXMudHlwZSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRnVuY3Rpb24gPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgRnVuY3Rpb25Db25zdGFudFZhbHVlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gaWRlbnRpY2FsKG90aGVyLmVsZW1lbnQsIGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9PiBjb25zdCA8Q29uc3RhbnRWYWx1ZT5bXTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25UeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpID0+IHR5cGU7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gKDE3ICogZWxlbWVudC5oYXNoQ29kZSkgJiAweDdmZmZmZmZmOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRWYWx1ZVZpc2l0b3IgdmlzaXRvciwgYXJnKSA9PiB2aXNpdG9yLnZpc2l0RnVuY3Rpb24odGhpcywgYXJnKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZUtpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRWYWx1ZUtpbmQuRlVOQ1RJT047CgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgewogICAgaWYgKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgICByZXR1cm4gJyR7ZWxlbWVudC5lbmNsb3NpbmdDbGFzcy5uYW1lfS4ke2VsZW1lbnQubmFtZX0nOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICcke2VsZW1lbnQubmFtZX0nOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSB7CiAgICByZXR1cm4gJ0Z1bmN0aW9uQ29uc3RhbnQoJHt0b0RhcnRUZXh0KCl9KSc7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBQcmltaXRpdmVDb25zdGFudFZhbHVlIGV4dGVuZHMgQ29uc3RhbnRWYWx1ZSB7CiAgY29uc3QgUHJpbWl0aXZlQ29uc3RhbnRWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1ByaW1pdGl2ZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KHZhciBvdGhlcikgewogICAgLy8gTWFraW5nIHRoaXMgbWV0aG9kIGFic3RyYWN0IGRvZXMgbm90IGdpdmUgdXMgYW4gZXJyb3IuCiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignUHJpbWl0aXZlQ29uc3RhbnQuPT0nKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1ByaW1pdGl2ZUNvbnN0YW50Lmhhc2hDb2RlJyk7CgogIC8vIFByaW1pdGl2ZSBjb25zdGFudHMgZG9uJ3QgaGF2ZSBkZXBlbmRlbmNpZXMuCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9PiBjb25zdCA8Q29uc3RhbnRWYWx1ZT5bXTsKfQoKY2xhc3MgTnVsbENvbnN0YW50VmFsdWUgZXh0ZW5kcyBQcmltaXRpdmVDb25zdGFudFZhbHVlIHsKICAvLy8gVGhlIHZhbHVlIGEgRGFydCBudWxsIGlzIGNvbXBpbGVkIHRvIGluIEphdmFTY3JpcHQuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBKc051bGwgPSAibnVsbCI7CgogIGNvbnN0IGZhY3RvcnkgTnVsbENvbnN0YW50VmFsdWUoKSA9IE51bGxDb25zdGFudFZhbHVlLl9pbnRlcm5hbDsKCiAgY29uc3QgTnVsbENvbnN0YW50VmFsdWUuX2ludGVybmFsKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVsbCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlKENvbW1vbkVsZW1lbnRzIHR5cGVzKSA9PiB0eXBlcy5udWxsVHlwZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgPT4gb3RoZXIgaXMgTnVsbENvbnN0YW50VmFsdWU7CgogIC8vIFRoZSBtYWdpYyBjb25zdGFudCBoYXMgbm8gbWVhbmluZy4gSXQgaXMganVzdCBhIHJhbmRvbSB2YWx1ZS4KICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IDc4NTk2NTgyNTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50VmFsdWVWaXNpdG9yIHZpc2l0b3IsIGFyZykgPT4gdmlzaXRvci52aXNpdE51bGwodGhpcywgYXJnKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZUtpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRWYWx1ZUtpbmQuTlVMTDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSA9PiAnTnVsbENvbnN0YW50JzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSA9PiAnbnVsbCc7Cn0KCmFic3RyYWN0IGNsYXNzIE51bUNvbnN0YW50VmFsdWUgZXh0ZW5kcyBQcmltaXRpdmVDb25zdGFudFZhbHVlIHsKICBkb3VibGUgZ2V0IGRvdWJsZVZhbHVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc051bSA9PiB0cnVlOwoKICBjb25zdCBOdW1Db25zdGFudFZhbHVlKCk7Cn0KCmNsYXNzIEludENvbnN0YW50VmFsdWUgZXh0ZW5kcyBOdW1Db25zdGFudFZhbHVlIHsKICBmaW5hbCBCaWdJbnQgaW50VmFsdWU7CgogIC8vIENhY2hpbmcgSW50Q29uc3RhbnRWYWx1ZXMgcmVwcmVzZW50aW5nIC0yIHRocm91Z2ggMTAgc28gdGhhdCB3ZSBkb24ndCBoYXZlCiAgLy8gdG8gY3JlYXRlIG5ldyBvbmVzIGV2ZXJ5IHRpbWUgdGhvc2UgdmFsdWVzIGFyZSB1c2VkLgogIHN0YXRpYyBNYXA8QmlnSW50LCBJbnRDb25zdGFudFZhbHVlPiBfY2FjaGVkVmFsdWVzID0ge307CgogIEBvdmVycmlkZQogIGRvdWJsZSBnZXQgZG91YmxlVmFsdWUgPT4gaW50VmFsdWUudG9Eb3VibGUoKTsKCiAgZmFjdG9yeSBJbnRDb25zdGFudFZhbHVlKEJpZ0ludCB2YWx1ZSkgewogICAgdmFyIGV4aXN0aW5nID0gX2NhY2hlZFZhbHVlc1t2YWx1ZV07CiAgICBpZiAoZXhpc3RpbmcgIT0gbnVsbCkgcmV0dXJuIGV4aXN0aW5nOwogICAgdmFyIGludENvbnN0YW50VmFsID0gbmV3IEludENvbnN0YW50VmFsdWUuX2ludGVybmFsKHZhbHVlKTsKICAgIHZhciBpbnRWYWx1ZSA9IHZhbHVlLnRvSW50KCk7CiAgICBpZiAoaW50VmFsdWUgPD0gLTIgJiYgaW50VmFsdWUgPj0gMTApIHsKICAgICAgX2NhY2hlZFZhbHVlc1t2YWx1ZV0gPSBpbnRDb25zdGFudFZhbDsKICAgIH0KICAgIHJldHVybiBpbnRDb25zdGFudFZhbDsKICB9CgogIGNvbnN0IEludENvbnN0YW50VmFsdWUuX2ludGVybmFsKHRoaXMuaW50VmFsdWUpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ludCA9PiB0cnVlOwoKICBib29sIGlzVUludDMxKCkgPT4gaW50VmFsdWUudG9VbnNpZ25lZCgzMSkgPT0gaW50VmFsdWU7CgogIGJvb2wgaXNVSW50MzIoKSA9PiBpbnRWYWx1ZS50b1Vuc2lnbmVkKDMyKSA9PSBpbnRWYWx1ZTsKCiAgYm9vbCBpc1Bvc2l0aXZlKCkgPT4gaW50VmFsdWUgPj0gQmlnSW50Lnplcm87CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzWmVybyA9PiBpbnRWYWx1ZSA9PSBCaWdJbnQuemVybzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNPbmUgPT4gaW50VmFsdWUgPT0gQmlnSW50Lm9uZTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0VHlwZShDb21tb25FbGVtZW50cyB0eXBlcykgPT4gdHlwZXMuaW50VHlwZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpIHsKICAgIC8vIEludHMgYW5kIGRvdWJsZXMgYXJlIHRyZWF0ZWQgYXMgc2VwYXJhdGUgY29uc3RhbnRzLgogICAgaWYgKG90aGVyIGlzISBJbnRDb25zdGFudFZhbHVlKSByZXR1cm4gZmFsc2U7CiAgICBJbnRDb25zdGFudFZhbHVlIG90aGVySW50ID0gb3RoZXI7CiAgICByZXR1cm4gaW50VmFsdWUgPT0gb3RoZXJJbnQuaW50VmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGludFZhbHVlLmhhc2hDb2RlICYgSGFzaGluZy5TTUlfTUFTSzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50VmFsdWVWaXNpdG9yIHZpc2l0b3IsIGFyZykgPT4gdmlzaXRvci52aXNpdEludCh0aGlzLCBhcmcpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5JTlQ7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KCkgPT4gJ0ludENvbnN0YW50KCR7dG9EYXJ0VGV4dCgpfSknOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9EYXJ0VGV4dCgpID0+IGludFZhbHVlLnRvU3RyaW5nKCk7Cn0KCmNsYXNzIERvdWJsZUNvbnN0YW50VmFsdWUgZXh0ZW5kcyBOdW1Db25zdGFudFZhbHVlIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBkb3VibGUgZG91YmxlVmFsdWU7CgogIGZhY3RvcnkgRG91YmxlQ29uc3RhbnRWYWx1ZShkb3VibGUgdmFsdWUpIHsKICAgIGlmICh2YWx1ZS5pc05hTikgewogICAgICByZXR1cm4gY29uc3QgRG91YmxlQ29uc3RhbnRWYWx1ZS5faW50ZXJuYWwoZG91YmxlLm5hbik7CiAgICB9IGVsc2UgaWYgKHZhbHVlID09IGRvdWJsZS5pbmZpbml0eSkgewogICAgICByZXR1cm4gY29uc3QgRG91YmxlQ29uc3RhbnRWYWx1ZS5faW50ZXJuYWwoZG91YmxlLmluZmluaXR5KTsKICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gLWRvdWJsZS5pbmZpbml0eSkgewogICAgICByZXR1cm4gY29uc3QgRG91YmxlQ29uc3RhbnRWYWx1ZS5faW50ZXJuYWwoLWRvdWJsZS5pbmZpbml0eSk7CiAgICB9IGVsc2UgaWYgKHZhbHVlID09IDAuMCAmJiAhdmFsdWUuaXNOZWdhdGl2ZSkgewogICAgICByZXR1cm4gY29uc3QgRG91YmxlQ29uc3RhbnRWYWx1ZS5faW50ZXJuYWwoMC4wKTsKICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gMS4wKSB7CiAgICAgIHJldHVybiBjb25zdCBEb3VibGVDb25zdGFudFZhbHVlLl9pbnRlcm5hbCgxLjApOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBEb3VibGVDb25zdGFudFZhbHVlLl9pbnRlcm5hbCh2YWx1ZSk7CiAgICB9CiAgfQoKICBjb25zdCBEb3VibGVDb25zdGFudFZhbHVlLl9pbnRlcm5hbCh0aGlzLmRvdWJsZVZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNEb3VibGUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOYU4gPT4gZG91YmxlVmFsdWUuaXNOYU47CgogIC8vIFdlIG5lZWQgdG8gY2hlY2sgZm9yIHRoZSBuZWdhdGl2ZSBzaWduIHNpbmNlIC0wLjAgPT0gMC4wLgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTWludXNaZXJvID0+IGRvdWJsZVZhbHVlID09IDAuMCAmJiBkb3VibGVWYWx1ZS5pc05lZ2F0aXZlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1plcm8gPT4gZG91YmxlVmFsdWUgPT0gMC4wOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc09uZSA9PiBkb3VibGVWYWx1ZSA9PSAxLjA7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG9zaXRpdmVJbmZpbml0eSA9PiBkb3VibGVWYWx1ZSA9PSBkb3VibGUuaW5maW5pdHk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTmVnYXRpdmVJbmZpbml0eSA9PiBkb3VibGVWYWx1ZSA9PSAtZG91YmxlLmluZmluaXR5OwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlKENvbW1vbkVsZW1lbnRzIHR5cGVzKSA9PiB0eXBlcy5kb3VibGVUeXBlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KHZhciBvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBEb3VibGVDb25zdGFudFZhbHVlKSByZXR1cm4gZmFsc2U7CiAgICBEb3VibGVDb25zdGFudFZhbHVlIG90aGVyRG91YmxlID0gb3RoZXI7CiAgICBkb3VibGUgb3RoZXJWYWx1ZSA9IG90aGVyRG91YmxlLmRvdWJsZVZhbHVlOwogICAgaWYgKGRvdWJsZVZhbHVlID09IDAuMCAmJiBvdGhlclZhbHVlID09IDAuMCkgewogICAgICByZXR1cm4gZG91YmxlVmFsdWUuaXNOZWdhdGl2ZSA9PSBvdGhlclZhbHVlLmlzTmVnYXRpdmU7CiAgICB9IGVsc2UgaWYgKGRvdWJsZVZhbHVlLmlzTmFOKSB7CiAgICAgIHJldHVybiBvdGhlclZhbHVlLmlzTmFOOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGRvdWJsZVZhbHVlID09IG90aGVyVmFsdWU7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGRvdWJsZVZhbHVlLmhhc2hDb2RlOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRWYWx1ZVZpc2l0b3IgdmlzaXRvciwgYXJnKSA9PiB2aXNpdG9yLnZpc2l0RG91YmxlKHRoaXMsIGFyZyk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLkRPVUJMRTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSA9PiAnRG91YmxlQ29uc3RhbnQoJHt0b0RhcnRUZXh0KCl9KSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgPT4gZG91YmxlVmFsdWUudG9TdHJpbmcoKTsKfQoKYWJzdHJhY3QgY2xhc3MgQm9vbENvbnN0YW50VmFsdWUgZXh0ZW5kcyBQcmltaXRpdmVDb25zdGFudFZhbHVlIHsKICBmYWN0b3J5IEJvb2xDb25zdGFudFZhbHVlKHZhbHVlKSB7CiAgICByZXR1cm4gdmFsdWUgPyBuZXcgVHJ1ZUNvbnN0YW50VmFsdWUoKSA6IG5ldyBGYWxzZUNvbnN0YW50VmFsdWUoKTsKICB9CgogIGNvbnN0IEJvb2xDb25zdGFudFZhbHVlLl9pbnRlcm5hbCgpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Jvb2wgPT4gdHJ1ZTsKCiAgYm9vbCBnZXQgYm9vbFZhbHVlOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlKENvbW1vbkVsZW1lbnRzIHR5cGVzKSA9PiB0eXBlcy5ib29sVHlwZTsKCiAgQm9vbENvbnN0YW50VmFsdWUgbmVnYXRlKCk7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+IHZpc2l0b3IudmlzaXRCb29sKHRoaXMsIGFyZyk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLkJPT0w7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KCkgPT4gJ0Jvb2xDb25zdGFudCgke3RvRGFydFRleHQoKX0pJzsKfQoKY2xhc3MgVHJ1ZUNvbnN0YW50VmFsdWUgZXh0ZW5kcyBCb29sQ29uc3RhbnRWYWx1ZSB7CiAgZmFjdG9yeSBUcnVlQ29uc3RhbnRWYWx1ZSgpID0+IGNvbnN0IFRydWVDb25zdGFudFZhbHVlLl9pbnRlcm5hbCgpOwoKICBjb25zdCBUcnVlQ29uc3RhbnRWYWx1ZS5faW50ZXJuYWwoKSA6IHN1cGVyLl9pbnRlcm5hbCgpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1RydWUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgYm9vbFZhbHVlID0+IHRydWU7CgogIEBvdmVycmlkZQogIEZhbHNlQ29uc3RhbnRWYWx1ZSBuZWdhdGUoKSA9PiBuZXcgRmFsc2VDb25zdGFudFZhbHVlKCk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKSA9PiBpZGVudGljYWwodGhpcywgb3RoZXIpOwoKICAvLyBUaGUgbWFnaWMgY29uc3RhbnQgaXMganVzdCBhIHJhbmRvbSB2YWx1ZS4gSXQgZG9lcyBub3QgaGF2ZSBhbnkKICAvLyBzaWduaWZpY2FuY2UuCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiA0OTk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgPT4gYm9vbFZhbHVlLnRvU3RyaW5nKCk7Cn0KCmNsYXNzIEZhbHNlQ29uc3RhbnRWYWx1ZSBleHRlbmRzIEJvb2xDb25zdGFudFZhbHVlIHsKICBmYWN0b3J5IEZhbHNlQ29uc3RhbnRWYWx1ZSgpID0+IGNvbnN0IEZhbHNlQ29uc3RhbnRWYWx1ZS5faW50ZXJuYWwoKTsKCiAgY29uc3QgRmFsc2VDb25zdGFudFZhbHVlLl9pbnRlcm5hbCgpIDogc3VwZXIuX2ludGVybmFsKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRmFsc2UgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgYm9vbFZhbHVlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBUcnVlQ29uc3RhbnRWYWx1ZSBuZWdhdGUoKSA9PiBuZXcgVHJ1ZUNvbnN0YW50VmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PSh2YXIgb3RoZXIpID0+IGlkZW50aWNhbCh0aGlzLCBvdGhlcik7CgogIC8vIFRoZSBtYWdpYyBjb25zdGFudCBpcyBqdXN0IGEgcmFuZG9tIHZhbHVlLiBJdCBkb2VzIG5vdCBoYXZlIGFueQogIC8vIHNpZ25pZmljYW5jZS4KICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IDUzNjU1NTk3NTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSA9PiBib29sVmFsdWUudG9TdHJpbmcoKTsKfQoKY2xhc3MgU3RyaW5nQ29uc3RhbnRWYWx1ZSBleHRlbmRzIFByaW1pdGl2ZUNvbnN0YW50VmFsdWUgewogIGZpbmFsIFN0cmluZyBzdHJpbmdWYWx1ZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGhhc2hDb2RlOwoKICAvLyBUT0RPKGZsb2l0c2NoKTogY2FjaGUgU3RyaW5nQ29uc3RhbnRzLgogIFN0cmluZ0NvbnN0YW50VmFsdWUoU3RyaW5nIHZhbHVlKQogICAgICA6IHRoaXMuc3RyaW5nVmFsdWUgPSB2YWx1ZSwKICAgICAgICB0aGlzLmhhc2hDb2RlID0gdmFsdWUuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3RyaW5nID0+IHRydWU7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpID0+IHR5cGVzLnN0cmluZ1R5cGU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFN0cmluZ0NvbnN0YW50VmFsdWUpIHJldHVybiBmYWxzZTsKICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgb3RoZXJTdHJpbmcgPSBvdGhlcjsKICAgIHJldHVybiBoYXNoQ29kZSA9PSBvdGhlclN0cmluZy5oYXNoQ29kZSAmJgogICAgICAgIHN0cmluZ1ZhbHVlID09IG90aGVyU3RyaW5nLnN0cmluZ1ZhbHVlOwogIH0KCiAgU3RyaW5nIHRvRGFydFN0cmluZygpID0+IHN0cmluZ1ZhbHVlOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBzdHJpbmdWYWx1ZS5sZW5ndGg7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+IHZpc2l0b3IudmlzaXRTdHJpbmcodGhpcywgYXJnKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZUtpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRWYWx1ZUtpbmQuU1RSSU5HOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBFbnN1cmUgY29ycmVjdCBlc2NhcGluZy4KICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9EYXJ0VGV4dCgpID0+ICciJHtzdHJpbmdWYWx1ZX0iJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSA9PiAnU3RyaW5nQ29uc3RhbnQoJHt0b0RhcnRUZXh0KCl9KSc7Cn0KCmFic3RyYWN0IGNsYXNzIE9iamVjdENvbnN0YW50VmFsdWUgZXh0ZW5kcyBDb25zdGFudFZhbHVlIHsKICBmaW5hbCBJbnRlcmZhY2VUeXBlIHR5cGU7CgogIE9iamVjdENvbnN0YW50VmFsdWUodGhpcy50eXBlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNPYmplY3QgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0VHlwZShDb21tb25FbGVtZW50cyB0eXBlcykgPT4gdHlwZTsKCiAgdm9pZCBfdW5wYXJzZVR5cGVBcmd1bWVudHMoU3RyaW5nQnVmZmVyIHNiKSB7CiAgICBpZiAoIXR5cGUudHJlYXRBc1JhdykgewogICAgICBzYi53cml0ZSgnPCcpOwogICAgICBzYi53cml0ZSh0eXBlLnR5cGVBcmd1bWVudHMuam9pbignLCAnKSk7CiAgICAgIHNiLndyaXRlKCc+Jyk7CiAgICB9CiAgfQp9CgpjbGFzcyBUeXBlQ29uc3RhbnRWYWx1ZSBleHRlbmRzIE9iamVjdENvbnN0YW50VmFsdWUgewogIC8vLyBUaGUgdXNlciB0eXBlIHRoYXQgdGhpcyBjb25zdGFudCByZXByZXNlbnRzLgogIGZpbmFsIERhcnRUeXBlIHJlcHJlc2VudGVkVHlwZTsKCiAgVHlwZUNvbnN0YW50VmFsdWUodGhpcy5yZXByZXNlbnRlZFR5cGUsIEludGVyZmFjZVR5cGUgdHlwZSkgOiBzdXBlcih0eXBlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNUeXBlID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBUeXBlQ29uc3RhbnRWYWx1ZSAmJgogICAgICAgIHJlcHJlc2VudGVkVHlwZS51bmFsaWFzZWQgPT0gb3RoZXIucmVwcmVzZW50ZWRUeXBlLnVuYWxpYXNlZDsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gcmVwcmVzZW50ZWRUeXBlLnVuYWxpYXNlZC5oYXNoQ29kZSAqIDEzOwoKICBAb3ZlcnJpZGUKICBMaXN0PENvbnN0YW50VmFsdWU+IGdldERlcGVuZGVuY2llcygpID0+IGNvbnN0IDxDb25zdGFudFZhbHVlPltdOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRWYWx1ZVZpc2l0b3IgdmlzaXRvciwgYXJnKSA9PiB2aXNpdG9yLnZpc2l0VHlwZSh0aGlzLCBhcmcpOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5UWVBFOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9EYXJ0VGV4dCgpID0+ICckcmVwcmVzZW50ZWRUeXBlJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSA9PiAnVHlwZUNvbnN0YW50KCR7cmVwcmVzZW50ZWRUeXBlfSknOwp9CgpjbGFzcyBMaXN0Q29uc3RhbnRWYWx1ZSBleHRlbmRzIE9iamVjdENvbnN0YW50VmFsdWUgewogIGZpbmFsIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZW50cmllczsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGU7CgogIExpc3RDb25zdGFudFZhbHVlKEludGVyZmFjZVR5cGUgdHlwZSwgTGlzdDxDb25zdGFudFZhbHVlPiBlbnRyaWVzKQogICAgICA6IHRoaXMuZW50cmllcyA9IGVudHJpZXMsCiAgICAgICAgaGFzaENvZGUgPSBIYXNoaW5nLmxpc3RIYXNoKGVudHJpZXMsIEhhc2hpbmcub2JqZWN0SGFzaCh0eXBlKSksCiAgICAgICAgc3VwZXIodHlwZSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTGlzdCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KHZhciBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBMaXN0Q29uc3RhbnRWYWx1ZSkgcmV0dXJuIGZhbHNlOwogICAgTGlzdENvbnN0YW50VmFsdWUgb3RoZXJMaXN0ID0gb3RoZXI7CiAgICBpZiAoaGFzaENvZGUgIT0gb3RoZXJMaXN0Lmhhc2hDb2RlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZSAhPSBvdGhlckxpc3QudHlwZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGVudHJpZXMubGVuZ3RoICE9IG90aGVyTGlzdC5lbnRyaWVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChlbnRyaWVzW2ldICE9IG90aGVyTGlzdC5lbnRyaWVzW2ldKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0RGVwZW5kZW5jaWVzKCkgPT4gZW50cmllczsKCiAgaW50IGdldCBsZW5ndGggPT4gZW50cmllcy5sZW5ndGg7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpID0+IHZpc2l0b3IudmlzaXRMaXN0KHRoaXMsIGFyZyk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLkxJU1Q7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgX3VucGFyc2VUeXBlQXJndW1lbnRzKHNiKTsKICAgIHNiLndyaXRlKCdbJyk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChpID4gMCkgc2Iud3JpdGUoJywnKTsKICAgICAgc2Iud3JpdGUoZW50cmllc1tpXS50b0RhcnRUZXh0KCkpOwogICAgfQogICAgc2Iud3JpdGUoJ10nKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnTGlzdENvbnN0YW50KCcpOwogICAgX3VucGFyc2VUeXBlQXJndW1lbnRzKHNiKTsKICAgIHNiLndyaXRlKCdbJyk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChpID4gMCkgc2Iud3JpdGUoJywgJyk7CiAgICAgIHNiLndyaXRlKGVudHJpZXNbaV0udG9TdHJ1Y3R1cmVkVGV4dCgpKTsKICAgIH0KICAgIHNiLndyaXRlKCddKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBTZXRDb25zdGFudFZhbHVlIGV4dGVuZHMgT2JqZWN0Q29uc3RhbnRWYWx1ZSB7CiAgZmluYWwgTGlzdDxDb25zdGFudFZhbHVlPiB2YWx1ZXM7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGhhc2hDb2RlOwoKICBTZXRDb25zdGFudFZhbHVlKEludGVyZmFjZVR5cGUgdHlwZSwgTGlzdDxDb25zdGFudFZhbHVlPiB2YWx1ZXMpCiAgICAgIDogdmFsdWVzID0gdmFsdWVzLAogICAgICAgIGhhc2hDb2RlID0gSGFzaGluZy5saXN0SGFzaCh2YWx1ZXMsIEhhc2hpbmcub2JqZWN0SGFzaCh0eXBlKSksCiAgICAgICAgc3VwZXIodHlwZSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU2V0ID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFNldENvbnN0YW50VmFsdWUpIHJldHVybiBmYWxzZTsKICAgIFNldENvbnN0YW50VmFsdWUgb3RoZXJTZXQgPSBvdGhlcjsKICAgIGlmIChoYXNoQ29kZSAhPSBvdGhlclNldC5oYXNoQ29kZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKHR5cGUgIT0gb3RoZXJTZXQudHlwZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGxlbmd0aCAhPSBvdGhlclNldC5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh2YWx1ZXNbaV0gIT0gb3RoZXJTZXQudmFsdWVzW2ldKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0RGVwZW5kZW5jaWVzKCkgPT4gdmFsdWVzOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiB2YWx1ZXMubGVuZ3RoOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRWYWx1ZVZpc2l0b3IgdmlzaXRvciwgYXJnKSA9PiB2aXNpdG9yLnZpc2l0U2V0KHRoaXMsIGFyZyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgX3VucGFyc2VUeXBlQXJndW1lbnRzKHNiKTsKICAgIHNiLndyaXRlKCd7Jyk7CiAgICBzYi53cml0ZUFsbCh2YWx1ZXMubWFwKCh2KSA9PiB2LnRvRGFydFRleHQoKSksICcsJyk7CiAgICBzYi53cml0ZSgnfScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdTZXRDb25zdGFudCgnKTsKICAgIF91bnBhcnNlVHlwZUFyZ3VtZW50cyhzYik7CiAgICBzYi53cml0ZSgneycpOwogICAgc2Iud3JpdGVBbGwodmFsdWVzLm1hcCgodikgPT4gdi50b1N0cnVjdHVyZWRUZXh0KCkpLCAnLCAnKTsKICAgIHNiLndyaXRlKCd9KScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5TRVQ7Cn0KCmFic3RyYWN0IGNsYXNzIE1hcENvbnN0YW50VmFsdWUgZXh0ZW5kcyBPYmplY3RDb25zdGFudFZhbHVlIHsKICBmaW5hbCBMaXN0PENvbnN0YW50VmFsdWU+IGtleXM7CiAgZmluYWwgTGlzdDxDb25zdGFudFZhbHVlPiB2YWx1ZXM7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGhhc2hDb2RlOwogIE1hcDxDb25zdGFudFZhbHVlLCBDb25zdGFudFZhbHVlPiBfbG9va3VwTWFwOwoKICBNYXBDb25zdGFudFZhbHVlKAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUsIExpc3Q8Q29uc3RhbnRWYWx1ZT4ga2V5cywgTGlzdDxDb25zdGFudFZhbHVlPiB2YWx1ZXMpCiAgICAgIDogdGhpcy5rZXlzID0ga2V5cywKICAgICAgICB0aGlzLnZhbHVlcyA9IHZhbHVlcywKICAgICAgICB0aGlzLmhhc2hDb2RlID0gSGFzaGluZy5saXN0SGFzaCgKICAgICAgICAgICAgdmFsdWVzLCBIYXNoaW5nLmxpc3RIYXNoKGtleXMsIEhhc2hpbmcub2JqZWN0SGFzaCh0eXBlKSkpLAogICAgICAgIHN1cGVyKHR5cGUpIHsKICAgIGFzc2VydChrZXlzLmxlbmd0aCA9PSB2YWx1ZXMubGVuZ3RoKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTWFwID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIE1hcENvbnN0YW50VmFsdWUpIHJldHVybiBmYWxzZTsKICAgIE1hcENvbnN0YW50VmFsdWUgb3RoZXJNYXAgPSBvdGhlcjsKICAgIGlmIChoYXNoQ29kZSAhPSBvdGhlck1hcC5oYXNoQ29kZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKHR5cGUgIT0gb3RoZXIudHlwZSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGxlbmd0aCAhPSBvdGhlci5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGtleXNbaV0gIT0gb3RoZXJNYXAua2V5c1tpXSkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAodmFsdWVzW2ldICE9IG90aGVyTWFwLnZhbHVlc1tpXSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PENvbnN0YW50VmFsdWU+IGdldERlcGVuZGVuY2llcygpIHsKICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gcmVzdWx0ID0gPENvbnN0YW50VmFsdWU+W107CiAgICByZXN1bHQuYWRkQWxsKGtleXMpOwogICAgcmVzdWx0LmFkZEFsbCh2YWx1ZXMpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGludCBnZXQgbGVuZ3RoID0+IGtleXMubGVuZ3RoOwoKICBDb25zdGFudFZhbHVlIGxvb2t1cChDb25zdGFudFZhbHVlIGtleSkgewogICAgdmFyIGxvb2t1cE1hcCA9IF9sb29rdXBNYXAgPz89CiAgICAgICAgbmV3IE1hcDxDb25zdGFudFZhbHVlLCBDb25zdGFudFZhbHVlPi5mcm9tSXRlcmFibGVzKGtleXMsIHZhbHVlcyk7CiAgICByZXR1cm4gbG9va3VwTWFwW2tleV07CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRWYWx1ZVZpc2l0b3IgdmlzaXRvciwgYXJnKSA9PiB2aXNpdG9yLnZpc2l0TWFwKHRoaXMsIGFyZyk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWVLaW5kIGdldCBraW5kID0+IENvbnN0YW50VmFsdWVLaW5kLk1BUDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBfdW5wYXJzZVR5cGVBcmd1bWVudHMoc2IpOwogICAgc2Iud3JpdGUoJ3snKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGkgPiAwKSBzYi53cml0ZSgnLCcpOwogICAgICBzYi53cml0ZShrZXlzW2ldLnRvRGFydFRleHQoKSk7CiAgICAgIHNiLndyaXRlKCc6Jyk7CiAgICAgIHNiLndyaXRlKHZhbHVlc1tpXS50b0RhcnRUZXh0KCkpOwogICAgfQogICAgc2Iud3JpdGUoJ30nKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnTWFwQ29uc3RhbnQoJyk7CiAgICBfdW5wYXJzZVR5cGVBcmd1bWVudHMoc2IpOwogICAgc2Iud3JpdGUoJ3snKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGkgPiAwKSBzYi53cml0ZSgnLCAnKTsKICAgICAgc2Iud3JpdGUoa2V5c1tpXS50b1N0cnVjdHVyZWRUZXh0KCkpOwogICAgICBzYi53cml0ZSgnOiAnKTsKICAgICAgc2Iud3JpdGUodmFsdWVzW2ldLnRvU3RydWN0dXJlZFRleHQoKSk7CiAgICB9CiAgICBzYi53cml0ZSgnfSknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKY2xhc3MgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGV4dGVuZHMgQ29uc3RhbnRWYWx1ZSB7CiAgLy8vIFRoZSBjbGFzcyBmb3Igd2hpY2ggdGhpcyBpbnRlcmNlcHRvciBob2xkcyB0aGUgbWV0aG9kcy4gIFRoZSBjb25zdGFudAogIC8vLyBpcyBhIGRpc3BhdGNoIHRhYmxlIGZvciB0aGlzIGNsYXNzLgogIGZpbmFsIENsYXNzRW50aXR5IGNsczsKCiAgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlKHRoaXMuY2xzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNJbnRlcmNlcHRvciA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlICYmIGNscyA9PSBvdGhlci5jbHM7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGNscy5oYXNoQ29kZSAqIDQzOwoKICBAb3ZlcnJpZGUKICBMaXN0PENvbnN0YW50VmFsdWU+IGdldERlcGVuZGVuY2llcygpID0+IGNvbnN0IDxDb25zdGFudFZhbHVlPltdOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRWYWx1ZVZpc2l0b3IgdmlzaXRvciwgYXJnKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEludGVyY2VwdG9yKHRoaXMsIGFyZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlKENvbW1vbkVsZW1lbnRzIHR5cGVzKSA9PiB0eXBlcy5keW5hbWljVHlwZTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZUtpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRWYWx1ZUtpbmQuSU5URVJDRVBUT1I7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgewogICAgcmV0dXJuICdpbnRlcmNlcHRvcigkY2xzKSc7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dCgpIHsKICAgIHJldHVybiAnSW50ZXJjZXB0b3JDb25zdGFudCgke2Nscy5uYW1lfSknOwogIH0KfQoKY2xhc3MgSnNOYW1lQ29uc3RhbnRWYWx1ZSBleHRlbmRzIENvbnN0YW50VmFsdWUgewogIGZpbmFsIGpzLkxpdGVyYWxTdHJpbmcgbmFtZTsKCiAgSnNOYW1lQ29uc3RhbnRWYWx1ZSh0aGlzLm5hbWUpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0R1bW15ID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBKc05hbWVDb25zdGFudFZhbHVlICYmIG5hbWUgPT0gb3RoZXIubmFtZTsKICB9CgogIEBvdmVycmlkZQogIGdldCBoYXNoQ29kZSA9PiBuYW1lLmhhc2hDb2RlICogMTc7CgogIEBvdmVycmlkZQogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0RGVwZW5kZW5jaWVzKCkgPT4gY29uc3QgPENvbnN0YW50VmFsdWU+W107CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0SnNOYW1lKHRoaXMsIGFyZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlKENvbW1vbkVsZW1lbnRzIHR5cGVzKSA9PiB0eXBlcy5keW5hbWljVHlwZTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZUtpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRWYWx1ZUtpbmQuSlNfTkFNRTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSA9PiAnanNfbmFtZSgke25hbWV9KSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KCkgPT4gJ0pzTmFtZUNvbnN0YW50KCR7bmFtZX0pJzsKfQoKLy8vIEEgY29uc3RhbnQgdXNlZCBhcyB0aGUgZHVtbXkgaW50ZXJjZXB0b3IgdmFsdWUgZm9yIGludGVyY2VwdGVkIGNhbGxzIHdpdGgKLy8vIGEga25vd24gbm9uLWludGVyY2VwdG9yIHRhcmdldC4KY2xhc3MgRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgZXh0ZW5kcyBDb25zdGFudFZhbHVlIHsKICBmaW5hbCBBYnN0cmFjdFZhbHVlIGFic3RyYWN0VmFsdWU7CgogIER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlKHRoaXMuYWJzdHJhY3RWYWx1ZSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRHVtbXkgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlICYmCiAgICAgICAgYWJzdHJhY3RWYWx1ZSA9PSBvdGhlci5hYnN0cmFjdFZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgZ2V0IGhhc2hDb2RlID0+IGFic3RyYWN0VmFsdWUuaGFzaENvZGUgKiAxNzsKCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9PiBjb25zdCA8Q29uc3RhbnRWYWx1ZT5bXTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50VmFsdWVWaXNpdG9yIHZpc2l0b3IsIGFyZykgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXREdW1teUludGVyY2VwdG9yKHRoaXMsIGFyZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlKENvbW1vbkVsZW1lbnRzIHR5cGVzKSA9PiB0eXBlcy5keW5hbWljVHlwZTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZUtpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRWYWx1ZUtpbmQuRFVNTVlfSU5URVJDRVBUT1I7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgPT4gJ2R1bW15X2ludGVyY2VwdG9yKCRhYnN0cmFjdFZhbHVlKSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KCkgPT4gJ0R1bW15SW50ZXJjZXB0b3JDb25zdGFudCgkYWJzdHJhY3RWYWx1ZSknOwp9CgovLyBBIGNvbnN0YW50IHdpdGggYW4gZW1wdHkgdHlwZSB1c2VkIGluIFtISW5zdHJ1Y3Rpb25dcyBvZiBhbiBleHByZXNzaW9uCi8vIGluIGFuIHVucmVhY2hhYmxlIGNvbnRleHQuCmNsYXNzIFVucmVhY2hhYmxlQ29uc3RhbnRWYWx1ZSBleHRlbmRzIENvbnN0YW50VmFsdWUgewogIGNvbnN0IFVucmVhY2hhYmxlQ29uc3RhbnRWYWx1ZSgpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0R1bW15ID0+IHRydWU7CgogIEBvdmVycmlkZQogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0RGVwZW5kZW5jaWVzKCkgPT4gY29uc3QgPENvbnN0YW50VmFsdWU+W107CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0VW5yZWFjaGFibGUodGhpcywgYXJnKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpID0+IHR5cGVzLmR5bmFtaWNUeXBlOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5VTlJFQUNIQUJMRTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvRGFydFRleHQoKSA9PiAndW5yZWFjaGFibGUoKSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KCkgPT4gJ1VucmVhY2hhYmxlQ29uc3RhbnQoKSc7Cn0KCmNsYXNzIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSBleHRlbmRzIE9iamVjdENvbnN0YW50VmFsdWUgewogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1ha2UgW2ZpZWxkc10gcHJpdmF0ZSB0byBhdm9pZCBtaXN1c2Ugb2YgdGhlIG1hcAogIC8vIG9yZGVyaW5nIGFuZCBtdXRhYmlsaXR5LgogIGZpbmFsIE1hcDxGaWVsZEVudGl0eSwgQ29uc3RhbnRWYWx1ZT4gZmllbGRzOwogIEBvdmVycmlkZQogIGZpbmFsIGludCBoYXNoQ29kZTsKCiAgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlKAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUsIE1hcDxGaWVsZEVudGl0eSwgQ29uc3RhbnRWYWx1ZT4gZmllbGRzKQogICAgICA6IHRoaXMuZmllbGRzID0gZmllbGRzLAogICAgICAgIGhhc2hDb2RlID0gSGFzaGluZy51bm9yZGVyZWRNYXBIYXNoKGZpZWxkcywgSGFzaGluZy5vYmplY3RIYXNoKHR5cGUpKSwKICAgICAgICBzdXBlcih0eXBlKSB7CiAgICBhc3NlcnQodHlwZSAhPSBudWxsKTsKICAgIGFzc2VydCghZmllbGRzLmNvbnRhaW5zS2V5KG51bGwpKTsKICAgIGFzc2VydCghZmllbGRzLmNvbnRhaW5zVmFsdWUobnVsbCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDb25zdHJ1Y3RlZE9iamVjdCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KHZhciBvdGhlclZhcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlclZhcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyVmFyIGlzISBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUpIHJldHVybiBmYWxzZTsKICAgIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSBvdGhlciA9IG90aGVyVmFyOwogICAgaWYgKGhhc2hDb2RlICE9IG90aGVyLmhhc2hDb2RlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAodHlwZSAhPSBvdGhlci50eXBlKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZmllbGRzLmxlbmd0aCAhPSBvdGhlci5maWVsZHMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKEZpZWxkRW50aXR5IGZpZWxkIGluIGZpZWxkcy5rZXlzKSB7CiAgICAgIGlmIChmaWVsZHNbZmllbGRdICE9IG90aGVyLmZpZWxkc1tmaWVsZF0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9PiBmaWVsZHMudmFsdWVzLnRvTGlzdCgpOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRWYWx1ZVZpc2l0b3IgdmlzaXRvciwgYXJnKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdENvbnN0cnVjdGVkKHRoaXMsIGFyZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5DT05TVFJVQ1RFRDsKCiAgSXRlcmFibGU8RmllbGRFbnRpdHk+IGdldCBfZmllbGRzU29ydGVkQnlOYW1lIHsKICAgIHJldHVybiBmaWVsZHMua2V5cy50b0xpc3QoKS4uc29ydCgoYSwgYikgPT4gYS5uYW1lLmNvbXBhcmVUbyhiLm5hbWUpKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b0RhcnRUZXh0KCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUodHlwZS5lbGVtZW50Lm5hbWUpOwogICAgX3VucGFyc2VUeXBlQXJndW1lbnRzKHNiKTsKICAgIHNiLndyaXRlKCcoJyk7CiAgICBpbnQgaSA9IDA7CiAgICBmb3IgKEZpZWxkRW50aXR5IGZpZWxkIGluIF9maWVsZHNTb3J0ZWRCeU5hbWUpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGZpZWxkc1tmaWVsZF07CiAgICAgIGlmIChpID4gMCkgc2Iud3JpdGUoJywnKTsKICAgICAgc2Iud3JpdGUoZmllbGQubmFtZSk7CiAgICAgIHNiLndyaXRlKCc9Jyk7CiAgICAgIHNiLndyaXRlKHZhbHVlLnRvRGFydFRleHQoKSk7CiAgICAgIGkrKzsKICAgIH0KICAgIHNiLndyaXRlKCcpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ0NvbnN0cnVjdGVkQ29uc3RhbnQoJyk7CiAgICBzYi53cml0ZSh0eXBlKTsKICAgIHNiLndyaXRlKCcoJyk7CiAgICBpbnQgaSA9IDA7CiAgICBmb3IgKEZpZWxkRW50aXR5IGZpZWxkIGluIF9maWVsZHNTb3J0ZWRCeU5hbWUpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGZpZWxkc1tmaWVsZF07CiAgICAgIGlmIChpID4gMCkgc2Iud3JpdGUoJywnKTsKICAgICAgc2Iud3JpdGUoZmllbGQubmFtZSk7CiAgICAgIHNiLndyaXRlKCc9Jyk7CiAgICAgIHNiLndyaXRlKHZhbHVlLnRvU3RydWN0dXJlZFRleHQoKSk7CiAgICAgIGkrKzsKICAgIH0KICAgIHNiLndyaXRlKCcpKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFzcyBJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSBleHRlbmRzIENvbnN0YW50VmFsdWUgewogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CiAgZmluYWwgRnVuY3Rpb25Db25zdGFudFZhbHVlIGZ1bmN0aW9uOwoKICBJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSh0aGlzLnR5cGVBcmd1bWVudHMsIHRoaXMuZnVuY3Rpb24pOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gb3RoZXIgaXMgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUgJiYKICAgICAgICBmdW5jdGlvbiA9PSBvdGhlci5mdW5jdGlvbiAmJgogICAgICAgIGVxdWFsRWxlbWVudHModHlwZUFyZ3VtZW50cywgb3RoZXIudHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBIYXNoaW5nLm9iamVjdEhhc2goZnVuY3Rpb24sIEhhc2hpbmcubGlzdEhhc2godHlwZUFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxDb25zdGFudFZhbHVlPiBnZXREZXBlbmRlbmNpZXMoKSA9PiA8Q29uc3RhbnRWYWx1ZT5bZnVuY3Rpb25dOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRWYWx1ZVZpc2l0b3IgdmlzaXRvciwgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0SW5zdGFudGlhdGlvbih0aGlzLCBhcmcpOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlKENvbW1vbkVsZW1lbnRzIHR5cGVzKSB7CiAgICBGdW5jdGlvblR5cGUgdHlwZSA9IGZ1bmN0aW9uLmdldFR5cGUodHlwZXMpOwogICAgcmV0dXJuIHR5cGUuaW5zdGFudGlhdGUodHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlS2luZCBnZXQga2luZCA9PiBDb25zdGFudFZhbHVlS2luZC5JTlNUQU5USUFUSU9OOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9EYXJ0VGV4dCgpID0+CiAgICAgICc8JHt0eXBlQXJndW1lbnRzLmpvaW4oJywgJyl9Pigke2Z1bmN0aW9uLnRvRGFydFRleHQoKX0pJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSB7CiAgICByZXR1cm4gJ0luc3RhbnRpYXRpb25Db25zdGFudCgkdHlwZUFyZ3VtZW50cywnCiAgICAgICAgJyR7ZnVuY3Rpb24udG9TdHJ1Y3R1cmVkVGV4dCgpfSknOwogIH0KfQoKLy8vIEEgcmVmZXJlbmNlIHRvIGEgY29uc3RhbnQgaW4gYW5vdGhlciBvdXRwdXQgdW5pdC4KLy8vCi8vLyBVc2VkIGZvciByZWZlcnJpbmcgdG8gZGVmZXJyZWQgY29uc3RhbnRzIHRoYXQgYXBwZWFyIGFzIGluaXRpYWxpemVycyBvZgovLy8gZmluYWwgKG5vbi1jb25zdCkgZ2xvYmFsIGZpZWxkcy4KLy8vCi8vIFRPRE8oc2lnbXVuZCk6IHRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgbm90IGJlIGEgY29uc3RhbnQgdmFsdWUuIEluIHBhcnRpY3VsYXIsCi8vIFtEZWZlcnJlZENvbnN0YW50VmFsdWVdIGlzIGludHJvZHVjZWQgYnkgdGhlIGNvbnN0YW50IGV2YWx1YXRvciB3aGVuIGl0IGZpcnN0Ci8vIHNlZXMgY29uc3RhbnRzIHVzZWQgaW4gdGhlIHByb2dyYW0uIFtEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWVdIGFyZQovLyBpbnRyb2R1Y2VkIGxhdGVyIGJ5IHRoZSBTU0EgYnVpbGRlciBhbmQgc2hvdWxkIGJlIHJlcHJlc2VudGVkCi8vIHdpdGggYSBkZWRpY2F0ZWQgSkVudGl0eSBpbnN0ZWFkLiBXZSBjdXJyZW50bHkgbW9kZWwgdGhlbSBhcyBhIHJlZ3VsYXIKLy8gY29uc3RhbnQgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG1hY2hpbmVyeSB3ZSBhbHJlYWR5IGhhdmUgaW4gcGxhY2UgdG8KLy8gZ2VuZXJhdGUgZGVmZXJyZWQgY29uc3RhbnRzIGluIHRoZSBlbWl0dGVyLgpjbGFzcyBEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUgZXh0ZW5kcyBDb25zdGFudFZhbHVlIHsKICBEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUodGhpcy5yZWZlcmVuY2VkLCB0aGlzLnVuaXQpOwoKICBmaW5hbCBDb25zdGFudFZhbHVlIHJlZmVyZW5jZWQ7CiAgZmluYWwgT3V0cHV0VW5pdCB1bml0OwoKICBib29sIGdldCBpc1JlZmVyZW5jZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlICYmCiAgICAgICAgcmVmZXJlbmNlZCA9PSBvdGhlci5yZWZlcmVuY2VkICYmCiAgICAgICAgdW5pdCA9PSBvdGhlci51bml0OwogIH0KCiAgQG92ZXJyaWRlCiAgZ2V0IGhhc2hDb2RlID0+IChyZWZlcmVuY2VkLmhhc2hDb2RlICogMTcgKyB1bml0Lmhhc2hDb2RlKSAmIDB4M2ZmZmZmZmY7CgogIEBvdmVycmlkZQogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0RGVwZW5kZW5jaWVzKCkgPT4gPENvbnN0YW50VmFsdWU+W3JlZmVyZW5jZWRdOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRWYWx1ZVZpc2l0b3IgdmlzaXRvciwgYXJnKSA9PgogICAgICB2aXNpdG9yLnZpc2l0RGVmZXJyZWRHbG9iYWwodGhpcywgYXJnKTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0VHlwZShDb21tb25FbGVtZW50cyB0eXBlcykgPT4gcmVmZXJlbmNlZC5nZXRUeXBlKHR5cGVzKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZUtpbmQgZ2V0IGtpbmQgPT4gQ29uc3RhbnRWYWx1ZUtpbmQuREVGRVJSRURfR0xPQkFMOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9EYXJ0VGV4dCgpID0+ICdkZWZlcnJlZF9nbG9iYWwoJHtyZWZlcmVuY2VkLnRvRGFydFRleHQoKX0pJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoKSB7CiAgICByZXR1cm4gJ0RlZmVycmVkR2xvYmFsQ29uc3RhbnQoJHtyZWZlcmVuY2VkLnRvU3RydWN0dXJlZFRleHQoKX0pJzsKICB9Cn0KCi8vLyBBIGNvbnN0YW50IHZhbHVlIHJlc3VsdGluZyBmcm9tIGEgbm9uIGNvbnN0YW50IG9yIGVycm9uZW91cyBjb25zdGFudAovLy8gZXhwcmVzc2lvbi4KLy8gVE9ETyhqb2hubml3aW50aGVyKTogRXhwYW5kIHRoaXMgdG8gY29udGFpbiB0aGUgZXJyb3Iga2luZC4KY2xhc3MgTm9uQ29uc3RhbnRWYWx1ZSBleHRlbmRzIENvbnN0YW50VmFsdWUgewogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ29uc3RhbnQgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGFjY2VwdChDb25zdGFudFZhbHVlVmlzaXRvciB2aXNpdG9yLCBhcmcpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0Tm9uQ29uc3RhbnQodGhpcywgYXJnKTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZ2V0RGVwZW5kZW5jaWVzKCkgPT4gY29uc3QgPENvbnN0YW50VmFsdWU+W107CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGUoQ29tbW9uRWxlbWVudHMgdHlwZXMpID0+IHR5cGVzLmR5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Ly8gSGllcmFyY2h5IHRvIGRlc2NyaWJlIHR5cGVzIGluIERhcnQuCi8vLwovLy8gVGhpcyBoaWVyYXJjaHkgaXMgYSBzdXBlciBoaWVyYXJjaHkgb2YgdGhlIHVzZS1jYXNlIHNwZWNpZmljIGhpZXJhcmNoaWVzCi8vLyB1c2VkIGluIGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgY29tcGlsZXIuIFRoaXMgaGllcmFyY2h5IGFic3RyYWN0cyBkZXRhaWxzCi8vLyBub3QgZ2VuZXJhbGx5IG5lZWRlZCBvciByZXF1aXJlZCBmb3IgdGhlIERhcnQgdHlwZSBoaWVyYXJjaHkuIEZvciBpbnN0YW5jZSwKLy8vIHRoZSBoaWVyYXJjaHkgaW4gJ3Jlc29sdXRpb25fdHlwZXMuZGFydCcgaGFzIHByb3BlcnRpZXMgc3VwcG9ydGluZyBsYXp5Ci8vLyBjb21wdXRhdGlvbiAobGlrZSBjb21wdXRlQWxpYXMpIGFuZCBkaXN0aW5jdGlvbnMgYmV0d2VlbiAnRm9vJyBhbmQKLy8vICdGb288ZHluYW1pYz4nLCBmZWF0dXJlcyB0aGF0IGFyZSBub3QgbmVlZGVkIGZvciBjb2RlIGdlbmVyYXRpb24gYW5kIG5vdAovLy8gc3VwcG9ydGVkIGZyb20ga2VybmVsLgovLy8KLy8vIEN1cnJlbnQgb25seSAncmVzb2x1dGlvbl90eXBlcy5kYXJ0JyBpbXBsZW1lbnQgdGhpcyBoaWVyYXJjaHkgYnV0IHdoZW4gdGhlCi8vLyBjb21waWxlciBtb3ZlcyB0byB1c2UgW0VudGl0eV0gaW5zdGVhZCBvZiBbRWxlbWVudF0gdGhpcyBoaWVyYXJjaHkgY2FuIGJlCi8vLyBpbXBsZW1lbnRlZCBkaXJlY3RseSBidXQgb3RoZXIgZW50aXR5IHN5c3RlbXMsIGZvciBpbnN0YW5jZSBiYXNlZCBkaXJlY3RseQovLy8gb24ga2VybmVsIGlyIHdpdGhvdXQgdGhlIG5lZWQgZm9yIFtFbGVtZW50XS4KCmFic3RyYWN0IGNsYXNzIERhcnRUeXBlIHsKICBjb25zdCBEYXJ0VHlwZSgpOwoKICAvLy8gUmV0dXJucyB0aGUgdW5hbGlhc2VkIHR5cGUgb2YgdGhpcyB0eXBlLgogIC8vLwogIC8vLyBUaGUgdW5hbGlhc2VkIHR5cGUgb2YgYSB0eXBlZGVmJ2QgdHlwZSBpcyB0aGUgdW5hbGlhc2VkIHR5cGUgdG8gd2hpY2ggaXRzCiAgLy8vIG5hbWUgaXMgYm91bmQuIFRoZSB1bmFsaWFzZWQgdmVyc2lvbiBvZiBhbnkgb3RoZXIgdHlwZSBpcyB0aGUgdHlwZSBpdHNlbGYuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlLCB0aGUgdW5hbGlhc2VkIHR5cGUgb2YgYHR5cGVkZWYgQSBGdW5jPEEsQj4oQiBiKWAgaXMgdGhlCiAgLy8vIGZ1bmN0aW9uIHR5cGUgYChCKSAtPiBBYCBhbmQgdGhlIHVuYWxpYXNlZCB0eXBlIG9mIGBGdW5jPGludCxTdHJpbmc+YAogIC8vLyBpcyB0aGUgZnVuY3Rpb24gdHlwZSBgKFN0cmluZykgLT4gaW50YC4KICBEYXJ0VHlwZSBnZXQgdW5hbGlhc2VkID0+IHRoaXM7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyB0eXBlIGhhcyBubyBub24tZHluYW1pYyB0eXBlIGFyZ3VtZW50cy4KICBib29sIGdldCB0cmVhdEFzUmF3ID0+IHRydWU7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyB0eXBlIHNob3VsZCBiZSB0cmVhdGVkIGFzIHRoZSBkeW5hbWljIHR5cGUuCiAgYm9vbCBnZXQgdHJlYXRBc0R5bmFtaWMgPT4gZmFsc2U7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyB0eXBlIGlzIHRoZSBkeW5hbWljIHR5cGUuCiAgYm9vbCBnZXQgaXNEeW5hbWljID0+IGZhbHNlOwoKICAvLy8gSXMgYHRydWVgIGlmIHRoaXMgdHlwZSBpcyB0aGUgdm9pZCB0eXBlLgogIGJvb2wgZ2V0IGlzVm9pZCA9PiBmYWxzZTsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIHR5cGUgaXMgYW4gaW50ZXJmYWNlIHR5cGUuCiAgYm9vbCBnZXQgaXNJbnRlcmZhY2VUeXBlID0+IGZhbHNlOwoKICAvLy8gSXMgYHRydWVgIGlmIHRoaXMgdHlwZSBpcyBhIHR5cGVkZWYuCiAgYm9vbCBnZXQgaXNUeXBlZGVmID0+IGZhbHNlOwoKICAvLy8gSXMgYHRydWVgIGlmIHRoaXMgdHlwZSBpcyBhIGZ1bmN0aW9uIHR5cGUuCiAgYm9vbCBnZXQgaXNGdW5jdGlvblR5cGUgPT4gZmFsc2U7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyB0eXBlIGlzIGEgdHlwZSB2YXJpYWJsZS4KICBib29sIGdldCBpc1R5cGVWYXJpYWJsZSA9PiBmYWxzZTsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIHR5cGUgaXMgYSB0eXBlIHZhcmlhYmxlIGRlY2xhcmVkIG9uIGEgZnVuY3Rpb24gdHlwZQogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYFRgIGluCiAgLy8vICAgICB2b2lkIEZ1bmN0aW9uPFQ+KFQgdCkKICBib29sIGdldCBpc0Z1bmN0aW9uVHlwZVZhcmlhYmxlID0+IGZhbHNlOwoKICAvLy8gSXMgYHRydWVgIGlmIHRoaXMgdHlwZSBpcyBhIGBGdXR1cmVPcmAgdHlwZS4KICBib29sIGdldCBpc0Z1dHVyZU9yID0+IGZhbHNlOwoKICAvLy8gV2hldGhlciB0aGlzIHR5cGUgY29udGFpbnMgYSB0eXBlIHZhcmlhYmxlLgogIGJvb2wgZ2V0IGNvbnRhaW5zVHlwZVZhcmlhYmxlcyA9PiBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdGhpcyB0eXBlIGNvbnRhaW5zIGEgZnJlZSBjbGFzcyB0eXBlIHZhcmlhYmxlIG9yIGZ1bmN0aW9uIHR5cGUKICAvLy8gdmFyaWFibGUuCiAgLy8gVE9ETyhzcmEpOiBSZXZpZXcgdXNlcyBvZiBbY29udGFpbnNUeXBlVmFyaWFibGVzXSBmb3IgdXBkYXRlIHdpdGgKICAvLyBbY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlc10uCiAgYm9vbCBnZXQgY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlcyA9PiBfY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlcyhudWxsKTsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIHR5cGUgaXMgdGhlICdPYmplY3QnIHR5cGUgZGVmaW5lZCBpbiAnZGFydDpjb3JlJy4KICBib29sIGdldCBpc09iamVjdCA9PiBmYWxzZTsKCiAgLy8vIEFwcGxpZXMgW2ZdIHRvIGVhY2ggb2NjdXJlbmNlIG9mIGEgW1R5cGVWYXJpYWJsZVR5cGVdIHdpdGhpbiB0aGlzCiAgLy8vIHR5cGUuIFRoaXMgZXhjbHVkZXMgZnVuY3Rpb24gdHlwZSB2YXJpYWJsZXMsIHdoZXRoZXIgZnJlZSBvciBib3VuZC4KICB2b2lkIGZvckVhY2hUeXBlVmFyaWFibGUoZihUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlKSkge30KCiAgLy8vIFBlcmZvcm1zIHRoZSBzdWJzdGl0dXRpb24gYFthcmd1bWVudHNbaV0vcGFyYW1ldGVyc1tpXV10aGlzYC4KICAvLy8KICAvLy8gVGhlIG5vdGF0aW9uIGlzIGtub3duIGZyb20gdGhpcyBsYW1iZGEgY2FsY3VsdXMgcnVsZToKICAvLy8KICAvLy8gICAgIChsYW1iZGEgeC5lMCllMSAtPiBbZTEveF1lMC4KICAvLy8KICAvLy8gU2VlIFtUeXBlVmFyaWFibGVUeXBlXSBmb3IgYSBtb3RpdmF0aW9uIGZvciB0aGlzIG1ldGhvZC4KICAvLy8KICAvLy8gSW52YXJpYW50OiBUaGVyZSBtdXN0IGJlIHRoZSBzYW1lIG51bWJlciBvZiBbYXJndW1lbnRzXSBhbmQgW3BhcmFtZXRlcnNdLgogIERhcnRUeXBlIHN1YnN0KExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cywgTGlzdDxEYXJ0VHlwZT4gcGFyYW1ldGVycyk7CgogIC8vLyBDYWxscyB0aGUgdmlzaXQgbWV0aG9kIG9uIFt2aXNpdG9yXSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgdHlwZS4KICBSIGFjY2VwdDxSLCBBPihEYXJ0VHlwZVZpc2l0b3I8UiwgQT4gdmlzaXRvciwgQSBhcmd1bWVudCk7CgogIGJvb2wgX2VxdWFscyhEYXJ0VHlwZSBvdGhlciwgX0Fzc3VtcHRpb25zIGFzc3VtcHRpb25zKTsKCiAgYm9vbCBfY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlcyhMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBiaW5kaW5ncykgPT4gZmFsc2U7Cn0KCi8vLyBQYWlycyBvZiBbRnVuY3Rpb25UeXBlVmFyaWFibGVdcyB0aGF0IGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBiZQovLy8gZXF1aXZhbGVudC4KLy8vCi8vLyBUaGlzIGlzIHVzZWQgdG8gY29tcHV0ZSB0aGUgZXF1aXZhbGVuY2UgcmVsYXRpb24gb24gdHlwZXMgY29pbmR1Y3RpdmVseS4KY2xhc3MgX0Fzc3VtcHRpb25zIHsKICBNYXA8RnVuY3Rpb25UeXBlVmFyaWFibGUsIFNldDxGdW5jdGlvblR5cGVWYXJpYWJsZT4+IF9hc3N1bXB0aW9uTWFwID0KICAgICAgPEZ1bmN0aW9uVHlwZVZhcmlhYmxlLCBTZXQ8RnVuY3Rpb25UeXBlVmFyaWFibGU+Pnt9OwoKICB2b2lkIF9hZGRBc3N1bXB0aW9uKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIGEsIEZ1bmN0aW9uVHlwZVZhcmlhYmxlIGIpIHsKICAgIF9hc3N1bXB0aW9uTWFwCiAgICAgICAgLnB1dElmQWJzZW50KGEsICgpID0+IG5ldyBTZXQ8RnVuY3Rpb25UeXBlVmFyaWFibGU+LmlkZW50aXR5KCkpCiAgICAgICAgLmFkZChiKTsKICB9CgogIC8vLyBBc3N1bWUgdGhhdCBbYV0gYW5kIFtiXSBhcmUgZXF1aXZhbGVudC4KICB2b2lkIGFzc3VtZShGdW5jdGlvblR5cGVWYXJpYWJsZSBhLCBGdW5jdGlvblR5cGVWYXJpYWJsZSBiKSB7CiAgICBfYWRkQXNzdW1wdGlvbihhLCBiKTsKICAgIF9hZGRBc3N1bXB0aW9uKGIsIGEpOwogIH0KCiAgdm9pZCBfcmVtb3ZlQXNzdW1wdGlvbihGdW5jdGlvblR5cGVWYXJpYWJsZSBhLCBGdW5jdGlvblR5cGVWYXJpYWJsZSBiKSB7CiAgICBTZXQ8RnVuY3Rpb25UeXBlVmFyaWFibGU+IHNldCA9IF9hc3N1bXB0aW9uTWFwW2FdOwogICAgaWYgKHNldCAhPSBudWxsKSB7CiAgICAgIHNldC5yZW1vdmUoYik7CiAgICAgIGlmIChzZXQuaXNFbXB0eSkgewogICAgICAgIF9hc3N1bXB0aW9uTWFwLnJlbW92ZShhKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIFJlbW92ZSB0aGUgYXNzdW1wdGlvbiB0aGF0IFthXSBhbmQgW2JdIGFyZSBlcXVpdmFsZW50LgogIHZvaWQgZm9yZ2V0KEZ1bmN0aW9uVHlwZVZhcmlhYmxlIGEsIEZ1bmN0aW9uVHlwZVZhcmlhYmxlIGIpIHsKICAgIF9yZW1vdmVBc3N1bXB0aW9uKGEsIGIpOwogICAgX3JlbW92ZUFzc3VtcHRpb24oYiwgYSk7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2FdIGFuZCBbYl0gYXJlIGFzc3VtZWQgdG8gYmUgZXF1aXZhbGVudC4KICBib29sIGlzQXNzdW1lZChGdW5jdGlvblR5cGVWYXJpYWJsZSBhLCBGdW5jdGlvblR5cGVWYXJpYWJsZSBiKSB7CiAgICByZXR1cm4gX2Fzc3VtcHRpb25NYXBbYV0/LmNvbnRhaW5zKGIpID8/IGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ19Bc3N1bXB0aW9ucygnKTsKICAgIFN0cmluZyBjb21tYSA9ICcnOwogICAgX2Fzc3VtcHRpb25NYXAKICAgICAgICAuZm9yRWFjaCgoRnVuY3Rpb25UeXBlVmFyaWFibGUgYSwgU2V0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBzZXQpIHsKICAgICAgc2Iud3JpdGUoJyRjb21tYSRhICgke2lkZW50aXR5SGFzaENvZGUoYSl9KS0+JwogICAgICAgICAgJ3ske3NldC5tYXAoKGIpID0+ICckYiAoJHtpZGVudGl0eUhhc2hDb2RlKGIpfSknKS5qb2luKCcsJyl9fScpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0pOwogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKY2xhc3MgSW50ZXJmYWNlVHlwZSBleHRlbmRzIERhcnRUeXBlIHsKICBmaW5hbCBDbGFzc0VudGl0eSBlbGVtZW50OwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIEludGVyZmFjZVR5cGUodGhpcy5lbGVtZW50LCB0aGlzLnR5cGVBcmd1bWVudHMpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ludGVyZmFjZVR5cGUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNPYmplY3QgewogICAgcmV0dXJuIGVsZW1lbnQubmFtZSA9PSAnT2JqZWN0JyAmJgogICAgICAgIGVsZW1lbnQubGlicmFyeS5jYW5vbmljYWxVcmkgPT0gVXJpcy5kYXJ0X2NvcmU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBjb250YWluc1R5cGVWYXJpYWJsZXMgPT4KICAgICAgdHlwZUFyZ3VtZW50cy5hbnkoKHR5cGUpID0+IHR5cGUuY29udGFpbnNUeXBlVmFyaWFibGVzKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoVHlwZVZhcmlhYmxlKGYoVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSkpIHsKICAgIHR5cGVBcmd1bWVudHMuZm9yRWFjaCgodHlwZSkgPT4gdHlwZS5mb3JFYWNoVHlwZVZhcmlhYmxlKGYpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2NvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXMoTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gYmluZGluZ3MpIHsKICAgIHJldHVybiB0eXBlQXJndW1lbnRzCiAgICAgICAgLmFueSgodHlwZSkgPT4gdHlwZS5fY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlcyhiaW5kaW5ncykpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBzdWJzdChMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMsIExpc3Q8RGFydFR5cGU+IHBhcmFtZXRlcnMpIHsKICAgIGlmICh0eXBlQXJndW1lbnRzLmlzRW1wdHkpIHsKICAgICAgLy8gUmV0dXJuIGZhc3Qgb24gbm9uLWdlbmVyaWMgdHlwZXMuCiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgaWYgKHBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICBhc3NlcnQoYXJndW1lbnRzLmlzRW1wdHkpOwogICAgICAvLyBSZXR1cm4gZmFzdCBvbiBlbXB0eSBzdWJzdGl0dXRpb25zLgogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIExpc3Q8RGFydFR5cGU+IG5ld1R5cGVBcmd1bWVudHMgPQogICAgICAgIF9zdWJzdFR5cGVzKHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50cywgcGFyYW1ldGVycyk7CiAgICBpZiAoIWlkZW50aWNhbCh0eXBlQXJndW1lbnRzLCBuZXdUeXBlQXJndW1lbnRzKSkgewogICAgICAvLyBDcmVhdGUgYSBuZXcgdHlwZSBvbmx5IGlmIG5lY2Vzc2FyeS4KICAgICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGVsZW1lbnQsIG5ld1R5cGVBcmd1bWVudHMpOwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCB0cmVhdEFzUmF3IHsKICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiB0eXBlQXJndW1lbnRzKSB7CiAgICAgIGlmICghdHlwZS50cmVhdEFzRHluYW1pYykgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBSIGFjY2VwdDxSLCBBPihEYXJ0VHlwZVZpc2l0b3I8UiwgQT4gdmlzaXRvciwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRvci52aXNpdEludGVyZmFjZVR5cGUodGhpcywgYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIGludCBoYXNoID0gZWxlbWVudC5oYXNoQ29kZTsKICAgIGZvciAoRGFydFR5cGUgYXJndW1lbnQgaW4gdHlwZUFyZ3VtZW50cykgewogICAgICBpbnQgYXJndW1lbnRIYXNoID0gYXJndW1lbnQgIT0gbnVsbCA/IGFyZ3VtZW50Lmhhc2hDb2RlIDogMDsKICAgICAgaGFzaCA9IDE3ICogaGFzaCArIDMgKiBhcmd1bWVudEhhc2g7CiAgICB9CiAgICByZXR1cm4gaGFzaDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgSW50ZXJmYWNlVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9lcXVhbHNJbnRlcm5hbChvdGhlciwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRGFydFR5cGUgb3RoZXIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBJbnRlcmZhY2VUeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX2VxdWFsc0ludGVybmFsKG90aGVyLCBhc3N1bXB0aW9ucyk7CiAgfQoKICBib29sIF9lcXVhbHNJbnRlcm5hbChJbnRlcmZhY2VUeXBlIG90aGVyLCBfQXNzdW1wdGlvbnMgYXNzdW1wdGlvbnMpIHsKICAgIHJldHVybiBpZGVudGljYWwoZWxlbWVudCwgb3RoZXIuZWxlbWVudCkgJiYKICAgICAgICBfZXF1YWxUeXBlcyh0eXBlQXJndW1lbnRzLCBvdGhlci50eXBlQXJndW1lbnRzLCBhc3N1bXB0aW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZShlbGVtZW50Lm5hbWUpOwogICAgaWYgKHR5cGVBcmd1bWVudHMuaXNOb3RFbXB0eSkgewogICAgICBzYi53cml0ZSgnPCcpOwogICAgICBib29sIG5lZWRzQ29tbWEgPSBmYWxzZTsKICAgICAgZm9yIChEYXJ0VHlwZSB0eXBlQXJndW1lbnQgaW4gdHlwZUFyZ3VtZW50cykgewogICAgICAgIGlmIChuZWVkc0NvbW1hKSB7CiAgICAgICAgICBzYi53cml0ZSgnLCcpOwogICAgICAgIH0KICAgICAgICBzYi53cml0ZSh0eXBlQXJndW1lbnQpOwogICAgICAgIG5lZWRzQ29tbWEgPSB0cnVlOwogICAgICB9CiAgICAgIHNiLndyaXRlKCc+Jyk7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmNsYXNzIFR5cGVkZWZUeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGZpbmFsIFR5cGVkZWZFbnRpdHkgZWxlbWVudDsKICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwogIEBvdmVycmlkZQogIGZpbmFsIEZ1bmN0aW9uVHlwZSB1bmFsaWFzZWQ7CgogIFR5cGVkZWZUeXBlKHRoaXMuZWxlbWVudCwgdGhpcy50eXBlQXJndW1lbnRzLCB0aGlzLnVuYWxpYXNlZCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVHlwZWRlZiA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBjb250YWluc1R5cGVWYXJpYWJsZXMgPT4KICAgICAgdHlwZUFyZ3VtZW50cy5hbnkoKHR5cGUpID0+IHR5cGUuY29udGFpbnNUeXBlVmFyaWFibGVzKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoVHlwZVZhcmlhYmxlKGYoVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSkpIHsKICAgIHR5cGVBcmd1bWVudHMuZm9yRWFjaCgodHlwZSkgPT4gdHlwZS5mb3JFYWNoVHlwZVZhcmlhYmxlKGYpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2NvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXMoTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gYmluZGluZ3MpID0+CiAgICAgIHR5cGVBcmd1bWVudHMuYW55KCh0eXBlKSA9PiB0eXBlLl9jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKGJpbmRpbmdzKSk7CgogIEBvdmVycmlkZQogIFR5cGVkZWZUeXBlIHN1YnN0KExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cywgTGlzdDxEYXJ0VHlwZT4gcGFyYW1ldGVycykgewogICAgaWYgKHR5cGVBcmd1bWVudHMuaXNFbXB0eSkgewogICAgICAvLyBSZXR1cm4gZmFzdCBvbiBub24tZ2VuZXJpYyB0eXBlcy4KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBpZiAocGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgIGFzc2VydChhcmd1bWVudHMuaXNFbXB0eSk7CiAgICAgIC8vIFJldHVybiBmYXN0IG9uIGVtcHR5IHN1YnN0aXR1dGlvbnMuCiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgTGlzdDxEYXJ0VHlwZT4gbmV3VHlwZUFyZ3VtZW50cyA9CiAgICAgICAgX3N1YnN0VHlwZXModHlwZUFyZ3VtZW50cywgYXJndW1lbnRzLCBwYXJhbWV0ZXJzKTsKICAgIEZ1bmN0aW9uVHlwZSBuZXdVbmFsaWFzZWQgPSB1bmFsaWFzZWQuc3Vic3QoYXJndW1lbnRzLCBwYXJhbWV0ZXJzKTsKICAgIGlmICghaWRlbnRpY2FsKHR5cGVBcmd1bWVudHMsIG5ld1R5cGVBcmd1bWVudHMpIHx8CiAgICAgICAgIWlkZW50aWNhbCh1bmFsaWFzZWQsIG5ld1VuYWxpYXNlZCkpIHsKICAgICAgLy8gQ3JlYXRlIGEgbmV3IHR5cGUgb25seSBpZiBuZWNlc3NhcnkuCiAgICAgIHJldHVybiBuZXcgVHlwZWRlZlR5cGUoZWxlbWVudCwgbmV3VHlwZUFyZ3VtZW50cywgbmV3VW5hbGlhc2VkKTsKICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgdHJlYXRBc1JhdyB7CiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZUFyZ3VtZW50cykgewogICAgICBpZiAoIXR5cGUudHJlYXRBc0R5bmFtaWMpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgUiBhY2NlcHQ8UiwgQT4oRGFydFR5cGVWaXNpdG9yPFIsIEE+IHZpc2l0b3IsIEEgYXJndW1lbnQpID0+CiAgICAgIHZpc2l0b3IudmlzaXRUeXBlZGVmVHlwZSh0aGlzLCBhcmd1bWVudCk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgaW50IGhhc2ggPSBlbGVtZW50Lmhhc2hDb2RlOwogICAgZm9yIChEYXJ0VHlwZSBhcmd1bWVudCBpbiB0eXBlQXJndW1lbnRzKSB7CiAgICAgIGludCBhcmd1bWVudEhhc2ggPSBhcmd1bWVudCAhPSBudWxsID8gYXJndW1lbnQuaGFzaENvZGUgOiAwOwogICAgICBoYXNoID0gMTcgKiBoYXNoICsgMyAqIGFyZ3VtZW50SGFzaDsKICAgIH0KICAgIHJldHVybiBoYXNoOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBUeXBlZGVmVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9lcXVhbHNJbnRlcm5hbChvdGhlciwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRGFydFR5cGUgb3RoZXIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBUeXBlZGVmVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9lcXVhbHNJbnRlcm5hbChvdGhlciwgYXNzdW1wdGlvbnMpOwogIH0KCiAgYm9vbCBfZXF1YWxzSW50ZXJuYWwoVHlwZWRlZlR5cGUgb3RoZXIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogICAgcmV0dXJuIGlkZW50aWNhbChlbGVtZW50LCBvdGhlci5lbGVtZW50KSAmJgogICAgICAgIF9lcXVhbFR5cGVzKHR5cGVBcmd1bWVudHMsIG90aGVyLnR5cGVBcmd1bWVudHMsIGFzc3VtcHRpb25zKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKGVsZW1lbnQubmFtZSk7CiAgICBpZiAodHlwZUFyZ3VtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIHNiLndyaXRlKCc8Jyk7CiAgICAgIGJvb2wgbmVlZHNDb21tYSA9IGZhbHNlOwogICAgICBmb3IgKERhcnRUeXBlIHR5cGVBcmd1bWVudCBpbiB0eXBlQXJndW1lbnRzKSB7CiAgICAgICAgaWYgKG5lZWRzQ29tbWEpIHsKICAgICAgICAgIHNiLndyaXRlKCcsJyk7CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlKHR5cGVBcmd1bWVudCk7CiAgICAgICAgbmVlZHNDb21tYSA9IHRydWU7CiAgICAgIH0KICAgICAgc2Iud3JpdGUoJz4nKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKY2xhc3MgVHlwZVZhcmlhYmxlVHlwZSBleHRlbmRzIERhcnRUeXBlIHsKICBmaW5hbCBUeXBlVmFyaWFibGVFbnRpdHkgZWxlbWVudDsKCiAgVHlwZVZhcmlhYmxlVHlwZSh0aGlzLmVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1R5cGVWYXJpYWJsZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBjb250YWluc1R5cGVWYXJpYWJsZXMgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoVHlwZVZhcmlhYmxlKGYoVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSkpIHsKICAgIGYodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGJpbmRpbmdzKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBzdWJzdChMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMsIExpc3Q8RGFydFR5cGU+IHBhcmFtZXRlcnMpIHsKICAgIGFzc2VydChhcmd1bWVudHMubGVuZ3RoID09IHBhcmFtZXRlcnMubGVuZ3RoKTsKICAgIGlmIChwYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgLy8gUmV0dXJuIGZhc3Qgb24gZW1wdHkgc3Vic3RpdHV0aW9ucy4KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9CiAgICBpbnQgaW5kZXggPSBwYXJhbWV0ZXJzLmluZGV4T2YodGhpcyk7CiAgICBpZiAoaW5kZXggIT0gLTEpIHsKICAgICAgcmV0dXJuIGFyZ3VtZW50c1tpbmRleF07CiAgICB9CiAgICAvLyBUaGUgdHlwZSB2YXJpYWJsZSB3YXMgbm90IHN1YnN0aXR1dGVkLgogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBSIGFjY2VwdDxSLCBBPihEYXJ0VHlwZVZpc2l0b3I8UiwgQT4gdmlzaXRvciwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRvci52aXNpdFR5cGVWYXJpYWJsZVR5cGUodGhpcywgYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IDE3ICogZWxlbWVudC5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBUeXBlVmFyaWFibGVUeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gaWRlbnRpY2FsKG90aGVyLmVsZW1lbnQsIGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKERhcnRUeXBlIG90aGVyLCBfQXNzdW1wdGlvbnMgYXNzdW1wdGlvbnMpIHsKICAgIGlmIChvdGhlciBpcyBUeXBlVmFyaWFibGVUeXBlKSB7CiAgICAgIHJldHVybiBpZGVudGljYWwob3RoZXIuZWxlbWVudCwgZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtlbGVtZW50LnR5cGVEZWNsYXJhdGlvbi5uYW1lfS4ke2VsZW1lbnQubmFtZX0nOwp9CgovLy8gQSB0eXBlIHZhcmlhYmxlIGRlY2xhcmVkIG9uIGEgZnVuY3Rpb24gdHlwZS4KLy8vCi8vLyBGb3IgaW5zdGFuY2UgYFRgIGluCi8vLyAgICAgdm9pZCBGdW5jdGlvbjxUPihUIHQpCi8vLwovLy8gU3VjaCBhIHR5cGUgdmFyaWFibGUgaXMgZGlmZmVyZW50IGZyb20gYSBbVHlwZVZhcmlhYmxlVHlwZV0gYmVjYXVzZSBpdAovLy8gZG9lc24ndCBoYXZlIGEgdW5pcXVlIGlkZW50aXR5OyBpcyBpcyBlcXVhbCB0byBhbnkgb3RoZXIKLy8vIFtGdW5jdGlvblR5cGVWYXJpYWJsZV0gdXNlZCBzaW1pbGFybHkgaW4gYW5vdGhlciBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudAovLy8gZnVuY3Rpb24gdHlwZS4KY2xhc3MgRnVuY3Rpb25UeXBlVmFyaWFibGUgZXh0ZW5kcyBEYXJ0VHlwZSB7CiAgLy8vIFRoZSBpbmRleCBvZiB0aGlzIHR5cGUgd2l0aGluIHRoZSB0eXBlIHZhcmlhYmxlcyBvZiB0aGUgZGVjbGFyaW5nIGZ1bmN0aW9uCiAgLy8vIHR5cGUuCiAgZmluYWwgaW50IGluZGV4OwoKICAvLy8gVGhlIGJvdW5kIG9mIHRoaXMgZnVuY3Rpb24gdHlwZSB2YXJpYWJsZS4KICBEYXJ0VHlwZSBfYm91bmQ7CgogIEZ1bmN0aW9uVHlwZVZhcmlhYmxlKHRoaXMuaW5kZXgpOwoKICBEYXJ0VHlwZSBnZXQgYm91bmQgewogICAgYXNzZXJ0KF9ib3VuZCAhPSBudWxsLCAiQm91bmQgaGFzbid0IGJlZW4gc2V0LiIpOwogICAgcmV0dXJuIF9ib3VuZDsKICB9CgogIHZvaWQgc2V0IGJvdW5kKERhcnRUeXBlIHZhbHVlKSB7CiAgICBhc3NlcnQoX2JvdW5kID09IG51bGwsICJCb3VuZCBoYXMgYWxyZWFkeSBiZWVuIHNldC4iKTsKICAgIF9ib3VuZCA9IHZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGdW5jdGlvblR5cGVWYXJpYWJsZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIF9jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IGJpbmRpbmdzKSB7CiAgICBpZiAoYmluZGluZ3MgPT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICBpZiAoYmluZGluZ3MuaW5kZXhPZih0aGlzKSA+PSAwKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHN1YnN0KExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cywgTGlzdDxEYXJ0VHlwZT4gcGFyYW1ldGVycykgewogICAgYXNzZXJ0KGFyZ3VtZW50cy5sZW5ndGggPT0gcGFyYW1ldGVycy5sZW5ndGgpOwogICAgaWYgKHBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICAvLyBSZXR1cm4gZmFzdCBvbiBlbXB0eSBzdWJzdGl0dXRpb25zLgogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIGludCBpbmRleCA9IHBhcmFtZXRlcnMuaW5kZXhPZih0aGlzKTsKICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICByZXR1cm4gYXJndW1lbnRzW2luZGV4XTsKICAgIH0KICAgIC8vIFRoZSBmdW5jdGlvbiB0eXBlIHZhcmlhYmxlIHdhcyBub3Qgc3Vic3RpdHV0ZWQuCiAgICByZXR1cm4gdGhpczsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gaW5kZXguaGFzaENvZGUgKiAxOTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBGdW5jdGlvblR5cGVWYXJpYWJsZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfZXF1YWxzKERhcnRUeXBlIG90aGVyLCBfQXNzdW1wdGlvbnMgYXNzdW1wdGlvbnMpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgRnVuY3Rpb25UeXBlVmFyaWFibGUpIHJldHVybiBmYWxzZTsKICAgIGlmIChhc3N1bXB0aW9ucyAhPSBudWxsKSByZXR1cm4gYXNzdW1wdGlvbnMuaXNBc3N1bWVkKHRoaXMsIG90aGVyKTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIFIgYWNjZXB0PFIsIEE+KERhcnRUeXBlVmlzaXRvcjxSLCBBPiB2aXNpdG9yLCBBIGFyZ3VtZW50KSA9PgogICAgICB2aXNpdG9yLnZpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGUodGhpcywgYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnIyR7bmV3IFN0cmluZy5mcm9tQ2hhckNvZGUoMHg0MSArIGluZGV4KX0nOwp9CgpjbGFzcyBWb2lkVHlwZSBleHRlbmRzIERhcnRUeXBlIHsKICBjb25zdCBWb2lkVHlwZSgpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1ZvaWQgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgc3Vic3QoTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzLCBMaXN0PERhcnRUeXBlPiBwYXJhbWV0ZXJzKSB7CiAgICAvLyBgdm9pZGAgY2Fubm90IGJlIHN1YnN0aXR1dGVkLgogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBSIGFjY2VwdDxSLCBBPihEYXJ0VHlwZVZpc2l0b3I8UiwgQT4gdmlzaXRvciwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRvci52aXNpdFZvaWRUeXBlKHRoaXMsIGFyZ3VtZW50KTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiA2MDA3OwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRGFydFR5cGUgb3RoZXIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogICAgcmV0dXJuIGlkZW50aWNhbCh0aGlzLCBvdGhlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAndm9pZCc7Cn0KCmNsYXNzIER5bmFtaWNUeXBlIGV4dGVuZHMgRGFydFR5cGUgewogIGNvbnN0IER5bmFtaWNUeXBlKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRHluYW1pYyA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCB0cmVhdEFzRHluYW1pYyA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBzdWJzdChMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMsIExpc3Q8RGFydFR5cGU+IHBhcmFtZXRlcnMpIHsKICAgIC8vIGBkeW5hbWljYCBjYW5ub3QgYmUgc3Vic3RpdHV0ZWQuCiAgICByZXR1cm4gdGhpczsKICB9CgogIEBvdmVycmlkZQogIFIgYWNjZXB0PFIsIEE+KERhcnRUeXBlVmlzaXRvcjxSLCBBPiB2aXNpdG9yLCBBIGFyZ3VtZW50KSA9PgogICAgICB2aXNpdG9yLnZpc2l0RHluYW1pY1R5cGUodGhpcywgYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IDkxOwoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRGFydFR5cGUgb3RoZXIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogICAgcmV0dXJuIGlkZW50aWNhbCh0aGlzLCBvdGhlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnZHluYW1pYyc7Cn0KCmNsYXNzIEZ1bmN0aW9uVHlwZSBleHRlbmRzIERhcnRUeXBlIHsKICBmaW5hbCBEYXJ0VHlwZSByZXR1cm5UeXBlOwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHBhcmFtZXRlclR5cGVzOwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IG9wdGlvbmFsUGFyYW1ldGVyVHlwZXM7CgogIC8vLyBUaGUgbmFtZXMgb2YgdGhlIG5hbWVkIHBhcmFtZXRlcnMgb3JkZXJlZCBsZXhpY29ncmFwaGljYWxseS4KICBmaW5hbCBMaXN0PFN0cmluZz4gbmFtZWRQYXJhbWV0ZXJzOwoKICAvLy8gVGhlIHR5cGVzIG9mIHRoZSBuYW1lZCBwYXJhbWV0ZXJzIGluIHRoZSBvcmRlciBjb3JyZXNwb25kaW5nIHRvIHRoZQogIC8vLyBbbmFtZWRQYXJhbWV0ZXJzXS4KICBmaW5hbCBMaXN0PERhcnRUeXBlPiBuYW1lZFBhcmFtZXRlclR5cGVzOwoKICBmaW5hbCBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiB0eXBlVmFyaWFibGVzOwoKICBGdW5jdGlvblR5cGUoCiAgICAgIHRoaXMucmV0dXJuVHlwZSwKICAgICAgdGhpcy5wYXJhbWV0ZXJUeXBlcywKICAgICAgdGhpcy5vcHRpb25hbFBhcmFtZXRlclR5cGVzLAogICAgICB0aGlzLm5hbWVkUGFyYW1ldGVycywKICAgICAgdGhpcy5uYW1lZFBhcmFtZXRlclR5cGVzLAogICAgICB0aGlzLnR5cGVWYXJpYWJsZXMpIHsKICAgIGFzc2VydChyZXR1cm5UeXBlICE9IG51bGwsICJJbnZhbGlkIHJldHVybiB0eXBlIGluICR0aGlzLiIpOwogICAgYXNzZXJ0KCFwYXJhbWV0ZXJUeXBlcy5jb250YWlucyhudWxsKSwgIkludmFsaWQgcGFyYW1ldGVyIHR5cGVzIGluICR0aGlzLiIpOwogICAgYXNzZXJ0KCFvcHRpb25hbFBhcmFtZXRlclR5cGVzLmNvbnRhaW5zKG51bGwpLAogICAgICAgICJJbnZhbGlkIG9wdGlvbmFsIHBhcmFtZXRlciB0eXBlcyBpbiAkdGhpcy4iKTsKICAgIGFzc2VydCgKICAgICAgICAhbmFtZWRQYXJhbWV0ZXJzLmNvbnRhaW5zKG51bGwpLCAiSW52YWxpZCBuYW1lZCBwYXJhbWV0ZXJzIGluICR0aGlzLiIpOwogICAgYXNzZXJ0KCFuYW1lZFBhcmFtZXRlclR5cGVzLmNvbnRhaW5zKG51bGwpLAogICAgICAgICJJbnZhbGlkIG5hbWVkIHBhcmFtZXRlciB0eXBlcyBpbiAkdGhpcy4iKTsKICAgIGFzc2VydCghdHlwZVZhcmlhYmxlcy5jb250YWlucyhudWxsKSwgIkludmFsaWQgdHlwZSB2YXJpYWJsZXMgaW4gJHRoaXMuIik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBjb250YWluc1R5cGVWYXJpYWJsZXMgewogICAgcmV0dXJuIHR5cGVWYXJpYWJsZXMuYW55KCh0eXBlKSA9PiB0eXBlLmJvdW5kLmNvbnRhaW5zVHlwZVZhcmlhYmxlcykgfHwKICAgICAgICByZXR1cm5UeXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcyB8fAogICAgICAgIHBhcmFtZXRlclR5cGVzLmFueSgodHlwZSkgPT4gdHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpIHx8CiAgICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcy5hbnkoKHR5cGUpID0+IHR5cGUuY29udGFpbnNUeXBlVmFyaWFibGVzKSB8fAogICAgICAgIG5hbWVkUGFyYW1ldGVyVHlwZXMuYW55KCh0eXBlKSA9PiB0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hUeXBlVmFyaWFibGUoZihUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlKSkgewogICAgdHlwZVZhcmlhYmxlcy5mb3JFYWNoKCh0eXBlKSA9PiB0eXBlLmJvdW5kLmZvckVhY2hUeXBlVmFyaWFibGUoZikpOwogICAgcmV0dXJuVHlwZS5mb3JFYWNoVHlwZVZhcmlhYmxlKGYpOwogICAgcGFyYW1ldGVyVHlwZXMuZm9yRWFjaCgodHlwZSkgPT4gdHlwZS5mb3JFYWNoVHlwZVZhcmlhYmxlKGYpKTsKICAgIG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuZm9yRWFjaCgodHlwZSkgPT4gdHlwZS5mb3JFYWNoVHlwZVZhcmlhYmxlKGYpKTsKICAgIG5hbWVkUGFyYW1ldGVyVHlwZXMuZm9yRWFjaCgodHlwZSkgPT4gdHlwZS5mb3JFYWNoVHlwZVZhcmlhYmxlKGYpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2NvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXMoTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gYmluZGluZ3MpIHsKICAgIGludCByZXN0b3JlOwogICAgaWYgKHR5cGVWYXJpYWJsZXMuaXNOb3RFbXB0eSkgewogICAgICBpZiAoYmluZGluZ3MgPT0gbnVsbCkgewogICAgICAgIGJpbmRpbmdzID0gPEZ1bmN0aW9uVHlwZVZhcmlhYmxlPltdOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3RvcmUgPSBiaW5kaW5ncy5sZW5ndGg7CiAgICAgIH0KICAgICAgYmluZGluZ3MuYWRkQWxsKHR5cGVWYXJpYWJsZXMpOwogICAgfQoKICAgIGJvb2wgaGFzRnJlZShEYXJ0VHlwZSB0eXBlKSA9PiB0eXBlLl9jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKGJpbmRpbmdzKTsKCiAgICBib29sIHJlc3VsdCA9IGhhc0ZyZWUocmV0dXJuVHlwZSkgfHwKICAgICAgICB0eXBlVmFyaWFibGVzLmFueSgodHlwZSkgPT4gaGFzRnJlZSh0eXBlLmJvdW5kKSkgfHwKICAgICAgICBwYXJhbWV0ZXJUeXBlcy5hbnkoaGFzRnJlZSkgfHwKICAgICAgICBvcHRpb25hbFBhcmFtZXRlclR5cGVzLmFueShoYXNGcmVlKSB8fAogICAgICAgIG5hbWVkUGFyYW1ldGVyVHlwZXMuYW55KGhhc0ZyZWUpOwoKICAgIGlmIChyZXN0b3JlICE9IG51bGwpIGJpbmRpbmdzLmxlbmd0aCA9IHJlc3RvcmU7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNGdW5jdGlvblR5cGUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgc3Vic3QoTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzLCBMaXN0PERhcnRUeXBlPiBwYXJhbWV0ZXJzKSB7CiAgICBpZiAocGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgIGFzc2VydChhcmd1bWVudHMuaXNFbXB0eSk7CiAgICAgIC8vIFJldHVybiBmYXN0IG9uIGVtcHR5IHN1YnN0aXR1dGlvbnMuCiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgRGFydFR5cGUgbmV3UmV0dXJuVHlwZSA9IHJldHVyblR5cGUuc3Vic3QoYXJndW1lbnRzLCBwYXJhbWV0ZXJzKTsKICAgIGJvb2wgY2hhbmdlZCA9ICFpZGVudGljYWwobmV3UmV0dXJuVHlwZSwgcmV0dXJuVHlwZSk7CiAgICBMaXN0PERhcnRUeXBlPiBuZXdQYXJhbWV0ZXJUeXBlcyA9CiAgICAgICAgX3N1YnN0VHlwZXMocGFyYW1ldGVyVHlwZXMsIGFyZ3VtZW50cywgcGFyYW1ldGVycyk7CiAgICBMaXN0PERhcnRUeXBlPiBuZXdPcHRpb25hbFBhcmFtZXRlclR5cGVzID0KICAgICAgICBfc3Vic3RUeXBlcyhvcHRpb25hbFBhcmFtZXRlclR5cGVzLCBhcmd1bWVudHMsIHBhcmFtZXRlcnMpOwogICAgTGlzdDxEYXJ0VHlwZT4gbmV3TmFtZWRQYXJhbWV0ZXJUeXBlcyA9CiAgICAgICAgX3N1YnN0VHlwZXMobmFtZWRQYXJhbWV0ZXJUeXBlcywgYXJndW1lbnRzLCBwYXJhbWV0ZXJzKTsKICAgIGlmICghY2hhbmdlZCAmJgogICAgICAgICghaWRlbnRpY2FsKHBhcmFtZXRlclR5cGVzLCBuZXdQYXJhbWV0ZXJUeXBlcykgfHwKICAgICAgICAgICAgIWlkZW50aWNhbChvcHRpb25hbFBhcmFtZXRlclR5cGVzLCBuZXdPcHRpb25hbFBhcmFtZXRlclR5cGVzKSB8fAogICAgICAgICAgICAhaWRlbnRpY2FsKG5hbWVkUGFyYW1ldGVyVHlwZXMsIG5ld05hbWVkUGFyYW1ldGVyVHlwZXMpKSkgewogICAgICBjaGFuZ2VkID0gdHJ1ZTsKICAgIH0KICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IG5ld1R5cGVWYXJpYWJsZXM7CiAgICBpZiAodHlwZVZhcmlhYmxlcy5pc05vdEVtcHR5KSB7CiAgICAgIGlmIChwYXJhbWV0ZXJzID09IHR5cGVWYXJpYWJsZXMpIHsKICAgICAgICBuZXdUeXBlVmFyaWFibGVzID0gY29uc3QgPEZ1bmN0aW9uVHlwZVZhcmlhYmxlPltdOwogICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICB9IGVsc2UgewogICAgICAgIGludCBpbmRleCA9IDA7CiAgICAgICAgZm9yIChGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlVmFyaWFibGUgaW4gdHlwZVZhcmlhYmxlcykgewogICAgICAgICAgRGFydFR5cGUgbmV3Qm91bmQgPSB0eXBlVmFyaWFibGUuYm91bmQuc3Vic3QoYXJndW1lbnRzLCBwYXJhbWV0ZXJzKTsKICAgICAgICAgIGlmICghaWRlbnRpY2FsKHR5cGVWYXJpYWJsZS5ib3VuZCwgbmV3Qm91bmQpKSB7CiAgICAgICAgICAgIG5ld1R5cGVWYXJpYWJsZXMgPz89IHR5cGVWYXJpYWJsZXMuc3VibGlzdCgwLCBpbmRleCk7CiAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbmV3VHlwZVZhcmlhYmxlcz8uYWRkKHR5cGVWYXJpYWJsZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpbmRleCsrOwogICAgICAgIH0KICAgICAgICBuZXdUeXBlVmFyaWFibGVzID8/PSB0eXBlVmFyaWFibGVzOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBuZXdUeXBlVmFyaWFibGVzID0gdHlwZVZhcmlhYmxlczsKICAgIH0KICAgIGlmIChjaGFuZ2VkKSB7CiAgICAgIC8vIENyZWF0ZSBhIG5ldyB0eXBlIG9ubHkgaWYgbmVjZXNzYXJ5LgogICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZSgKICAgICAgICAgIG5ld1JldHVyblR5cGUsCiAgICAgICAgICBuZXdQYXJhbWV0ZXJUeXBlcywKICAgICAgICAgIG5ld09wdGlvbmFsUGFyYW1ldGVyVHlwZXMsCiAgICAgICAgICBuYW1lZFBhcmFtZXRlcnMsCiAgICAgICAgICBuZXdOYW1lZFBhcmFtZXRlclR5cGVzLAogICAgICAgICAgbmV3VHlwZVZhcmlhYmxlcyk7CiAgICB9CiAgICByZXR1cm4gdGhpczsKICB9CgogIEZ1bmN0aW9uVHlwZSBpbnN0YW50aWF0ZShMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMpIHsKICAgIHJldHVybiBzdWJzdChhcmd1bWVudHMsIHR5cGVWYXJpYWJsZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgUiBhY2NlcHQ8UiwgQT4oRGFydFR5cGVWaXNpdG9yPFIsIEE+IHZpc2l0b3IsIEEgYXJndW1lbnQpID0+CiAgICAgIHZpc2l0b3IudmlzaXRGdW5jdGlvblR5cGUodGhpcywgYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIGludCBoYXNoID0gMyAqIHJldHVyblR5cGUuaGFzaENvZGU7CiAgICBmb3IgKERhcnRUeXBlIHBhcmFtZXRlciBpbiBwYXJhbWV0ZXJUeXBlcykgewogICAgICBoYXNoID0gMTcgKiBoYXNoICsgNSAqIHBhcmFtZXRlci5oYXNoQ29kZTsKICAgIH0KICAgIGZvciAoRGFydFR5cGUgcGFyYW1ldGVyIGluIG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMpIHsKICAgICAgaGFzaCA9IDE5ICogaGFzaCArIDcgKiBwYXJhbWV0ZXIuaGFzaENvZGU7CiAgICB9CiAgICBmb3IgKFN0cmluZyBuYW1lIGluIG5hbWVkUGFyYW1ldGVycykgewogICAgICBoYXNoID0gMjMgKiBoYXNoICsgMTEgKiBuYW1lLmhhc2hDb2RlOwogICAgfQogICAgZm9yIChEYXJ0VHlwZSBwYXJhbWV0ZXIgaW4gbmFtZWRQYXJhbWV0ZXJUeXBlcykgewogICAgICBoYXNoID0gMjkgKiBoYXNoICsgMTMgKiBwYXJhbWV0ZXIuaGFzaENvZGU7CiAgICB9CiAgICByZXR1cm4gaGFzaDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgRnVuY3Rpb25UeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX2VxdWFsc0ludGVybmFsKG90aGVyLCBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgX2VxdWFscyhEYXJ0VHlwZSBvdGhlciwgX0Fzc3VtcHRpb25zIGFzc3VtcHRpb25zKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIEZ1bmN0aW9uVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9lcXVhbHNJbnRlcm5hbChvdGhlciwgYXNzdW1wdGlvbnMpOwogIH0KCiAgYm9vbCBfZXF1YWxzSW50ZXJuYWwoRnVuY3Rpb25UeXBlIG90aGVyLCBfQXNzdW1wdGlvbnMgYXNzdW1wdGlvbnMpIHsKICAgIGlmICh0eXBlVmFyaWFibGVzLmxlbmd0aCAhPSBvdGhlci50eXBlVmFyaWFibGVzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKHR5cGVWYXJpYWJsZXMuaXNOb3RFbXB0eSkgewogICAgICBhc3N1bXB0aW9ucyA/Pz0gbmV3IF9Bc3N1bXB0aW9ucygpOwogICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZVZhcmlhYmxlcy5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgICBhc3N1bXB0aW9ucy5hc3N1bWUodHlwZVZhcmlhYmxlc1tpbmRleF0sIG90aGVyLnR5cGVWYXJpYWJsZXNbaW5kZXhdKTsKICAgICAgfQogICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdHlwZVZhcmlhYmxlcy5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgICBpZiAoIXR5cGVWYXJpYWJsZXNbaW5kZXhdCiAgICAgICAgICAgIC5ib3VuZAogICAgICAgICAgICAuX2VxdWFscyhvdGhlci50eXBlVmFyaWFibGVzW2luZGV4XS5ib3VuZCwgYXNzdW1wdGlvbnMpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBib29sIHJlc3VsdCA9IHJldHVyblR5cGUuX2VxdWFscyhvdGhlci5yZXR1cm5UeXBlLCBhc3N1bXB0aW9ucykgJiYKICAgICAgICBfZXF1YWxUeXBlcyhwYXJhbWV0ZXJUeXBlcywgb3RoZXIucGFyYW1ldGVyVHlwZXMsIGFzc3VtcHRpb25zKSAmJgogICAgICAgIF9lcXVhbFR5cGVzKG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMsIG90aGVyLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMsCiAgICAgICAgICAgIGFzc3VtcHRpb25zKSAmJgogICAgICAgIGVxdWFsRWxlbWVudHMobmFtZWRQYXJhbWV0ZXJzLCBvdGhlci5uYW1lZFBhcmFtZXRlcnMpICYmCiAgICAgICAgX2VxdWFsVHlwZXMoCiAgICAgICAgICAgIG5hbWVkUGFyYW1ldGVyVHlwZXMsIG90aGVyLm5hbWVkUGFyYW1ldGVyVHlwZXMsIGFzc3VtcHRpb25zKTsKICAgIGlmICh0eXBlVmFyaWFibGVzLmlzTm90RW1wdHkpIHsKICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHR5cGVWYXJpYWJsZXMubGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgICAgYXNzdW1wdGlvbnMuZm9yZ2V0KHR5cGVWYXJpYWJsZXNbaW5kZXhdLCBvdGhlci50eXBlVmFyaWFibGVzW2luZGV4XSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZShyZXR1cm5UeXBlKTsKICAgIHNiLndyaXRlKCcgRnVuY3Rpb24nKTsKICAgIGlmICh0eXBlVmFyaWFibGVzLmlzTm90RW1wdHkpIHsKICAgICAgc2Iud3JpdGUoJzwnKTsKICAgICAgYm9vbCBuZWVkc0NvbW1hID0gZmFsc2U7CiAgICAgIGZvciAoRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlIGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgICBpZiAobmVlZHNDb21tYSkgewogICAgICAgICAgc2Iud3JpdGUoJywnKTsKICAgICAgICB9CiAgICAgICAgc2Iud3JpdGUodHlwZVZhcmlhYmxlKTsKICAgICAgICBEYXJ0VHlwZSBib3VuZCA9IHR5cGVWYXJpYWJsZS5ib3VuZDsKICAgICAgICBpZiAoIWJvdW5kLmlzT2JqZWN0KSB7CiAgICAgICAgICBzYi53cml0ZSgnIGV4dGVuZHMgJyk7CiAgICAgICAgICBzYi53cml0ZSh0eXBlVmFyaWFibGUuYm91bmQpOwogICAgICAgIH0KICAgICAgICBuZWVkc0NvbW1hID0gdHJ1ZTsKICAgICAgfQogICAgICBzYi53cml0ZSgnPicpOwogICAgfQogICAgc2Iud3JpdGUoJygnKTsKICAgIGJvb2wgbmVlZHNDb21tYSA9IGZhbHNlOwogICAgZm9yIChEYXJ0VHlwZSBwYXJhbWV0ZXJUeXBlIGluIHBhcmFtZXRlclR5cGVzKSB7CiAgICAgIGlmIChuZWVkc0NvbW1hKSB7CiAgICAgICAgc2Iud3JpdGUoJywnKTsKICAgICAgfQogICAgICBzYi53cml0ZShwYXJhbWV0ZXJUeXBlKTsKICAgICAgbmVlZHNDb21tYSA9IHRydWU7CiAgICB9CiAgICBpZiAob3B0aW9uYWxQYXJhbWV0ZXJUeXBlcy5pc05vdEVtcHR5KSB7CiAgICAgIGlmIChuZWVkc0NvbW1hKSB7CiAgICAgICAgc2Iud3JpdGUoJywnKTsKICAgICAgfQogICAgICBzYi53cml0ZSgnWycpOwogICAgICBib29sIG5lZWRzT3B0aW9uYWxDb21tYSA9IGZhbHNlOwogICAgICBmb3IgKERhcnRUeXBlIHR5cGVBcmd1bWVudCBpbiBvcHRpb25hbFBhcmFtZXRlclR5cGVzKSB7CiAgICAgICAgaWYgKG5lZWRzT3B0aW9uYWxDb21tYSkgewogICAgICAgICAgc2Iud3JpdGUoJywnKTsKICAgICAgICB9CiAgICAgICAgc2Iud3JpdGUodHlwZUFyZ3VtZW50KTsKICAgICAgICBuZWVkc09wdGlvbmFsQ29tbWEgPSB0cnVlOwogICAgICB9CiAgICAgIHNiLndyaXRlKCddJyk7CiAgICAgIG5lZWRzQ29tbWEgPSB0cnVlOwogICAgfQogICAgaWYgKG5hbWVkUGFyYW1ldGVycy5pc05vdEVtcHR5KSB7CiAgICAgIGlmIChuZWVkc0NvbW1hKSB7CiAgICAgICAgc2Iud3JpdGUoJywnKTsKICAgICAgfQogICAgICBzYi53cml0ZSgneycpOwogICAgICBib29sIG5lZWRzTmFtZWRDb21tYSA9IGZhbHNlOwogICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbmFtZWRQYXJhbWV0ZXJzLmxlbmd0aDsgaW5kZXgrKykgewogICAgICAgIGlmIChuZWVkc05hbWVkQ29tbWEpIHsKICAgICAgICAgIHNiLndyaXRlKCcsJyk7CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlKG5hbWVkUGFyYW1ldGVyVHlwZXNbaW5kZXhdKTsKICAgICAgICBzYi53cml0ZSgnICcpOwogICAgICAgIHNiLndyaXRlKG5hbWVkUGFyYW1ldGVyc1tpbmRleF0pOwogICAgICAgIG5lZWRzTmFtZWRDb21tYSA9IHRydWU7CiAgICAgIH0KICAgICAgc2Iud3JpdGUoJ30nKTsKICAgIH0KICAgIHNiLndyaXRlKCcpJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmNsYXNzIEZ1dHVyZU9yVHlwZSBleHRlbmRzIERhcnRUeXBlIHsKICBmaW5hbCBEYXJ0VHlwZSB0eXBlQXJndW1lbnQ7CgogIEZ1dHVyZU9yVHlwZSh0aGlzLnR5cGVBcmd1bWVudCk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRnV0dXJlT3IgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgc3Vic3QoTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzLCBMaXN0PERhcnRUeXBlPiBwYXJhbWV0ZXJzKSB7CiAgICBEYXJ0VHlwZSBuZXdUeXBlQXJndW1lbnQgPSB0eXBlQXJndW1lbnQuc3Vic3QoYXJndW1lbnRzLCBwYXJhbWV0ZXJzKTsKICAgIGlmIChpZGVudGljYWwodHlwZUFyZ3VtZW50LCBuZXdUeXBlQXJndW1lbnQpKSByZXR1cm4gdGhpczsKICAgIHJldHVybiBuZXcgRnV0dXJlT3JUeXBlKG5ld1R5cGVBcmd1bWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBjb250YWluc1R5cGVWYXJpYWJsZXMgPT4gdHlwZUFyZ3VtZW50LmNvbnRhaW5zVHlwZVZhcmlhYmxlczsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoVHlwZVZhcmlhYmxlKGYoVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSkpIHsKICAgIHR5cGVBcmd1bWVudC5mb3JFYWNoVHlwZVZhcmlhYmxlKGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlcyhMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiBiaW5kaW5ncykgPT4KICAgICAgdHlwZUFyZ3VtZW50Ll9jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKGJpbmRpbmdzKTsKCiAgQG92ZXJyaWRlCiAgUiBhY2NlcHQ8UiwgQT4oRGFydFR5cGVWaXNpdG9yPFIsIEE+IHZpc2l0b3IsIEEgYXJndW1lbnQpID0+CiAgICAgIHZpc2l0b3IudmlzaXRGdXR1cmVPclR5cGUodGhpcywgYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHR5cGVBcmd1bWVudC5oYXNoQ29kZSAqIDEzOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIEZ1dHVyZU9yVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9lcXVhbHNJbnRlcm5hbChvdGhlciwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIF9lcXVhbHMoRGFydFR5cGUgb3RoZXIsIF9Bc3N1bXB0aW9ucyBhc3N1bXB0aW9ucykgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBGdXR1cmVPclR5cGUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfZXF1YWxzSW50ZXJuYWwob3RoZXIsIGFzc3VtcHRpb25zKTsKICB9CgogIGJvb2wgX2VxdWFsc0ludGVybmFsKEZ1dHVyZU9yVHlwZSBvdGhlciwgX0Fzc3VtcHRpb25zIGFzc3VtcHRpb25zKSB7CiAgICByZXR1cm4gdHlwZUFyZ3VtZW50Ll9lcXVhbHMob3RoZXIudHlwZUFyZ3VtZW50LCBhc3N1bXB0aW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnRnV0dXJlT3InKTsKICAgIHNiLndyaXRlKCc8Jyk7CiAgICBzYi53cml0ZSh0eXBlQXJndW1lbnQpOwogICAgc2Iud3JpdGUoJz4nKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIEhlbHBlciBtZXRob2QgZm9yIHBlcmZvcm1pbmcgc3Vic3RpdHV0aW9uIG9mIGEgbGlzdCBvZiB0eXBlcy4KLy8vCi8vLyBJZiBubyB0eXBlcyBhcmUgY2hhbmdlZCBieSB0aGUgc3Vic3RpdHV0aW9uLCB0aGUgW3R5cGVzXSBpcyByZXR1cm5lZAovLy8gaW5zdGVhZCBvZiBhIG5ld2x5IGNyZWF0ZWQgbGlzdC4KTGlzdDxEYXJ0VHlwZT4gX3N1YnN0VHlwZXMoCiAgICBMaXN0PERhcnRUeXBlPiB0eXBlcywgTGlzdDxEYXJ0VHlwZT4gYXJndW1lbnRzLCBMaXN0PERhcnRUeXBlPiBwYXJhbWV0ZXJzKSB7CiAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgTGlzdDxEYXJ0VHlwZT4gcmVzdWx0ID0KICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmdlbmVyYXRlKHR5cGVzLmxlbmd0aCwgKGludCBpbmRleCkgewogICAgRGFydFR5cGUgdHlwZSA9IHR5cGVzW2luZGV4XTsKICAgIERhcnRUeXBlIGFyZ3VtZW50ID0gdHlwZS5zdWJzdChhcmd1bWVudHMsIHBhcmFtZXRlcnMpOwogICAgaWYgKCFjaGFuZ2VkICYmICFpZGVudGljYWwoYXJndW1lbnQsIHR5cGUpKSB7CiAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgfQogICAgcmV0dXJuIGFyZ3VtZW50OwogIH0pOwogIC8vIFVzZSB0aGUgbmV3IExpc3Qgb25seSBpZiBuZWNlc3NhcnkuCiAgcmV0dXJuIGNoYW5nZWQgPyByZXN1bHQgOiB0eXBlczsKfQoKYm9vbCBfZXF1YWxUeXBlcyhMaXN0PERhcnRUeXBlPiBhLCBMaXN0PERhcnRUeXBlPiBiLCBfQXNzdW1wdGlvbnMgYXNzdW1wdGlvbnMpIHsKICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTsKICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgYS5sZW5ndGg7IGluZGV4KyspIHsKICAgIGlmICghYVtpbmRleF0uX2VxdWFscyhiW2luZGV4XSwgYXNzdW1wdGlvbnMpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgcmV0dXJuIHRydWU7Cn0KCmFic3RyYWN0IGNsYXNzIERhcnRUeXBlVmlzaXRvcjxSLCBBPiB7CiAgY29uc3QgRGFydFR5cGVWaXNpdG9yKCk7CgogIFIgdmlzaXQoY292YXJpYW50IERhcnRUeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+IHR5cGUuYWNjZXB0KHRoaXMsIGFyZ3VtZW50KTsKCiAgUiB2aXNpdFZvaWRUeXBlKGNvdmFyaWFudCBWb2lkVHlwZSB0eXBlLCBBIGFyZ3VtZW50KSA9PiBudWxsOwoKICBSIHZpc2l0VHlwZVZhcmlhYmxlVHlwZShjb3ZhcmlhbnQgVHlwZVZhcmlhYmxlVHlwZSB0eXBlLCBBIGFyZ3VtZW50KSA9PiBudWxsOwoKICBSIHZpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGUoCiAgICAgICAgICBjb3ZhcmlhbnQgRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZSwgQSBhcmd1bWVudCkgPT4KICAgICAgbnVsbDsKCiAgUiB2aXNpdEZ1bmN0aW9uVHlwZShjb3ZhcmlhbnQgRnVuY3Rpb25UeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+IG51bGw7CgogIFIgdmlzaXRJbnRlcmZhY2VUeXBlKGNvdmFyaWFudCBJbnRlcmZhY2VUeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+IG51bGw7CgogIFIgdmlzaXRUeXBlZGVmVHlwZShjb3ZhcmlhbnQgVHlwZWRlZlR5cGUgdHlwZSwgQSBhcmd1bWVudCkgPT4gbnVsbDsKCiAgUiB2aXNpdER5bmFtaWNUeXBlKGNvdmFyaWFudCBEeW5hbWljVHlwZSB0eXBlLCBBIGFyZ3VtZW50KSA9PiBudWxsOwoKICBSIHZpc2l0RnV0dXJlT3JUeXBlKGNvdmFyaWFudCBGdXR1cmVPclR5cGUgdHlwZSwgQSBhcmd1bWVudCkgPT4gbnVsbDsKfQoKYWJzdHJhY3QgY2xhc3MgQmFzZURhcnRUeXBlVmlzaXRvcjxSLCBBPiBleHRlbmRzIERhcnRUeXBlVmlzaXRvcjxSLCBBPiB7CiAgY29uc3QgQmFzZURhcnRUeXBlVmlzaXRvcigpOwoKICBSIHZpc2l0VHlwZShjb3ZhcmlhbnQgRGFydFR5cGUgdHlwZSwgQSBhcmd1bWVudCk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRWb2lkVHlwZShjb3ZhcmlhbnQgVm9pZFR5cGUgdHlwZSwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRUeXBlKHR5cGUsIGFyZ3VtZW50KTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdFR5cGVWYXJpYWJsZVR5cGUoY292YXJpYW50IFR5cGVWYXJpYWJsZVR5cGUgdHlwZSwgQSBhcmd1bWVudCkgPT4KICAgICAgdmlzaXRUeXBlKHR5cGUsIGFyZ3VtZW50KTsKCiAgQG92ZXJyaWRlCiAgUiB2aXNpdEZ1bmN0aW9uVHlwZVZhcmlhYmxlKAogICAgICAgICAgY292YXJpYW50IEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGUsIEEgYXJndW1lbnQpID0+CiAgICAgIHZpc2l0VHlwZSh0eXBlLCBhcmd1bWVudCk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRGdW5jdGlvblR5cGUoY292YXJpYW50IEZ1bmN0aW9uVHlwZSB0eXBlLCBBIGFyZ3VtZW50KSA9PgogICAgICB2aXNpdFR5cGUodHlwZSwgYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0SW50ZXJmYWNlVHlwZShjb3ZhcmlhbnQgSW50ZXJmYWNlVHlwZSB0eXBlLCBBIGFyZ3VtZW50KSA9PgogICAgICB2aXNpdFR5cGUodHlwZSwgYXJndW1lbnQpOwoKICBAb3ZlcnJpZGUKICBSIHZpc2l0RHluYW1pY1R5cGUoY292YXJpYW50IER5bmFtaWNUeXBlIHR5cGUsIEEgYXJndW1lbnQpID0+CiAgICAgIHZpc2l0VHlwZSh0eXBlLCBhcmd1bWVudCk7CgogIEBvdmVycmlkZQogIFIgdmlzaXRGdXR1cmVPclR5cGUoY292YXJpYW50IEZ1dHVyZU9yVHlwZSB0eXBlLCBBIGFyZ3VtZW50KSA9PgogICAgICB2aXNpdFR5cGUodHlwZSwgYXJndW1lbnQpOwp9CgovLy8gQWJzdHJhY3QgdmlzaXRvciBmb3IgZGV0ZXJtaW5pbmcgcmVsYXRpb25zIGJldHdlZW4gdHlwZXMuCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0VHlwZVJlbGF0aW9uPFQgZXh0ZW5kcyBEYXJ0VHlwZT4KICAgIGV4dGVuZHMgQmFzZURhcnRUeXBlVmlzaXRvcjxib29sLCBUPiB7CiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzOwoKICBmaW5hbCBfQXNzdW1wdGlvbnMgYXNzdW1wdGlvbnMgPSBuZXcgX0Fzc3VtcHRpb25zKCk7CgogIC8vLyBFbnN1cmVzIHRoYXQgdGhlIHN1cGVyIGhpZXJhcmNoeSBvZiBbdHlwZV0gaXMgY29tcHV0ZWQuCiAgdm9pZCBlbnN1cmVSZXNvbHZlZChJbnRlcmZhY2VUeXBlIHR5cGUpIHt9CgogIC8vLyBSZXR1cm5zIHRoZSB1bmFsaWFzZWQgdmVyc2lvbiBvZiBbdHlwZV0uCiAgVCBnZXRVbmFsaWFzZWQoVCB0eXBlKSA9PiB0eXBlLnVuYWxpYXNlZDsKCiAgLy8vIFJldHVybnMgW3R5cGVdIGFzIGFuIGluc3RhbmNlIG9mIFtjbHNdLCBvciBgbnVsbGAgaWYgW3R5cGVdIGlzIG5vdCBzdWJ0eXBlCiAgLy8vIGlmIFtjbHNdLgogIEludGVyZmFjZVR5cGUgYXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgdGhlIHR5cGUgb2YgdGhlIGBjYWxsYCBtZXRob2Qgb24gW3R5cGVdLCBvciBgbnVsbGAgaWYgdGhlIGNsYXNzCiAgLy8vIG9mIFt0eXBlXSBkb2VzIG5vdCBoYXZlIGEgYGNhbGxgIG1ldGhvZC4KICBGdW5jdGlvblR5cGUgZ2V0Q2FsbFR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlKTsKCiAgLy8vIFJldHVybnMgdGhlIGRlY2xhcmVkIGJvdW5kIG9mIFtlbGVtZW50XS4KICBEYXJ0VHlwZSBnZXRUeXBlVmFyaWFibGVCb3VuZChUeXBlVmFyaWFibGVFbnRpdHkgZWxlbWVudCk7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUeXBlKFQgdCwgVCBzKSB7CiAgICB0aHJvdyAnaW50ZXJuYWwgZXJyb3I6IHVua25vd24gdHlwZSAke3R9JzsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRWb2lkVHlwZShWb2lkVHlwZSB0LCBUIHMpIHsKICAgIGFzc2VydChzIGlzISBWb2lkVHlwZSk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIGludmFsaWRUeXBlQXJndW1lbnRzKFQgdCwgVCBzKTsKCiAgYm9vbCBpbnZhbGlkRnVuY3Rpb25SZXR1cm5UeXBlcyhUIHQsIFQgcyk7CgogIGJvb2wgaW52YWxpZEZ1bmN0aW9uUGFyYW1ldGVyVHlwZXMoVCB0LCBUIHMpOwoKICBib29sIGludmFsaWRUeXBlVmFyaWFibGVCb3VuZHMoVCBib3VuZCwgVCBzKTsKCiAgYm9vbCBpbnZhbGlkQ2FsbGFibGVUeXBlKGNvdmFyaWFudCBEYXJ0VHlwZSBjYWxsVHlwZSwgY292YXJpYW50IERhcnRUeXBlIHMpOwoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIHQsIGNvdmFyaWFudCBEYXJ0VHlwZSBzKSB7CiAgICBlbnN1cmVSZXNvbHZlZCh0KTsKCiAgICBib29sIGNoZWNrVHlwZUFyZ3VtZW50cyhJbnRlcmZhY2VUeXBlIGluc3RhbmNlLCBJbnRlcmZhY2VUeXBlIG90aGVyKSB7CiAgICAgIExpc3Q8VD4gdFR5cGVBcmdzID0gaW5zdGFuY2UudHlwZUFyZ3VtZW50czsKICAgICAgTGlzdDxUPiBzVHlwZUFyZ3MgPSBvdGhlci50eXBlQXJndW1lbnRzOwogICAgICBhc3NlcnQodFR5cGVBcmdzLmxlbmd0aCA9PSBzVHlwZUFyZ3MubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0VHlwZUFyZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoaW52YWxpZFR5cGVBcmd1bWVudHModFR5cGVBcmdzW2ldLCBzVHlwZUFyZ3NbaV0pKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGlmIChzIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgSW50ZXJmYWNlVHlwZSBpbnN0YW5jZSA9IGFzSW5zdGFuY2VPZih0LCBzLmVsZW1lbnQpOwogICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCAmJiBjaGVja1R5cGVBcmd1bWVudHMoaW5zdGFuY2UsIHMpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KCiAgICBGdW5jdGlvblR5cGUgY2FsbFR5cGUgPSBnZXRDYWxsVHlwZSh0KTsKICAgIGlmIChzID09IGNvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uVHlwZSAmJiBjYWxsVHlwZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChzIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICByZXR1cm4gY2FsbFR5cGUgIT0gbnVsbCAmJiAhaW52YWxpZENhbGxhYmxlVHlwZShjYWxsVHlwZSwgcyk7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgdCwgRGFydFR5cGUgcykgewogICAgaWYgKHMgPT0gY29tbW9uRWxlbWVudHMuZnVuY3Rpb25UeXBlKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKHMgaXMhIEZ1bmN0aW9uVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgRnVuY3Rpb25UeXBlIHRmID0gdDsKICAgIEZ1bmN0aW9uVHlwZSBzZiA9IHM7CiAgICBpbnQgdHlwZVZhcmlhYmxlc0NvdW50ID0gZ2V0Q29tbW9uVHlwZVZhcmlhYmxlc0NvdW50KHRmLCBzZik7CiAgICBpZiAodHlwZVZhcmlhYmxlc0NvdW50ID09IG51bGwpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlVmFyaWFibGVzQ291bnQ7IGkrKykgewogICAgICBhc3N1bXB0aW9ucy5hc3N1bWUodGYudHlwZVZhcmlhYmxlc1tpXSwgc2YudHlwZVZhcmlhYmxlc1tpXSk7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVWYXJpYWJsZXNDb3VudDsgaSsrKSB7CiAgICAgIGlmICghdGYudHlwZVZhcmlhYmxlc1tpXS5ib3VuZAogICAgICAgICAgLl9lcXVhbHMoc2YudHlwZVZhcmlhYmxlc1tpXS5ib3VuZCwgYXNzdW1wdGlvbnMpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBpZiAoaW52YWxpZEZ1bmN0aW9uUmV0dXJuVHlwZXModGYucmV0dXJuVHlwZSwgc2YucmV0dXJuVHlwZSkpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGJvb2wgcmVzdWx0ID0gdmlzaXRGdW5jdGlvblR5cGVJbnRlcm5hbCh0Ziwgc2YpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlVmFyaWFibGVzQ291bnQ7IGkrKykgewogICAgICBhc3N1bXB0aW9ucy5mb3JnZXQodGYudHlwZVZhcmlhYmxlc1tpXSwgc2YudHlwZVZhcmlhYmxlc1tpXSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgaW50IGdldENvbW1vblR5cGVWYXJpYWJsZXNDb3VudChGdW5jdGlvblR5cGUgdCwgRnVuY3Rpb25UeXBlIHMpIHsKICAgIGlmICh0LnR5cGVWYXJpYWJsZXMubGVuZ3RoID09IHMudHlwZVZhcmlhYmxlcy5sZW5ndGgpIHsKICAgICAgcmV0dXJuIHQudHlwZVZhcmlhYmxlcy5sZW5ndGg7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGJvb2wgdmlzaXRGdW5jdGlvblR5cGVJbnRlcm5hbChGdW5jdGlvblR5cGUgdGYsIEZ1bmN0aW9uVHlwZSBzZikgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmV3cml0ZSB0aGUgZnVuY3Rpb24gc3VidHlwaW5nIHRvIGJlIG1vcmUgcmVhZGFibGUKICAgIC8vIGJ1dCBzdGlsbCBhcyBlZmZpY2llbnQuCgogICAgLy8gRm9yIHRoZSBjb21tZW50cyB3ZSB1c2UgdGhlIGZvbGxvd2luZyBhYmJyZXZpYXRpb25zOgogICAgLy8gIHgucCAgICAgOiBwYXJhbWV0ZXJUeXBlcyBvbiBbOng6XSwKICAgIC8vICB4Lm8gICAgIDogb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcyBvbiBbOng6XSwgYW5kCiAgICAvLyAgbGVuKHhzKSA6IGxlbmd0aCBvZiBsaXN0IFs6eHM6XS4KCiAgICBJdGVyYXRvcjxUPiB0cHMgPSB0Zi5wYXJhbWV0ZXJUeXBlcy5pdGVyYXRvcjsKICAgIEl0ZXJhdG9yPFQ+IHNwcyA9IHNmLnBhcmFtZXRlclR5cGVzLml0ZXJhdG9yOwogICAgYm9vbCBzTm90RW1wdHkgPSBzcHMubW92ZU5leHQoKTsKICAgIGJvb2wgdE5vdEVtcHR5ID0gdHBzLm1vdmVOZXh0KCk7CiAgICB0TmV4dCgpID0+ICh0Tm90RW1wdHkgPSB0cHMubW92ZU5leHQoKSk7CiAgICBzTmV4dCgpID0+IChzTm90RW1wdHkgPSBzcHMubW92ZU5leHQoKSk7CgogICAgYm9vbCBpbmNvbXBhdGlibGVQYXJhbWV0ZXJzKCkgewogICAgICB3aGlsZSAodE5vdEVtcHR5ICYmIHNOb3RFbXB0eSkgewogICAgICAgIGlmIChpbnZhbGlkRnVuY3Rpb25QYXJhbWV0ZXJUeXBlcyh0cHMuY3VycmVudCwgc3BzLmN1cnJlbnQpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgdE5leHQoKTsKICAgICAgICBzTmV4dCgpOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoaW5jb21wYXRpYmxlUGFyYW1ldGVycygpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAodE5vdEVtcHR5KSB7CiAgICAgIC8vIFdlIG11c3QgaGF2ZSBbOiBsZW4odC5wKSA8PSBsZW4ocy5wKSA6XS4KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKCFzZi5uYW1lZFBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICAvLyBXZSBtdXN0IGhhdmUgWzogbGVuKHQucCkgPT0gbGVuKHMucCkgOl0uCiAgICAgIGlmIChzTm90RW1wdHkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgLy8gU2luY2UgbmFtZWQgcGFyYW1ldGVycyBhcmUgZ2xvYmFsbHkgb3JkZXJlZCB3ZSBjYW4gZGV0ZXJtaW5lIHRoZQogICAgICAvLyBzdWJzZXQgcmVsYXRpb24gd2l0aCBhIGxpbmVhciBzZWFyY2ggZm9yIFs6c2YubmFtZWRQYXJhbWV0ZXJzOl0KICAgICAgLy8gd2l0aGluIFs6dGYubmFtZWRQYXJhbWV0ZXJzOl0uCiAgICAgIExpc3Q8U3RyaW5nPiB0TmFtZXMgPSB0Zi5uYW1lZFBhcmFtZXRlcnM7CiAgICAgIExpc3Q8VD4gdFR5cGVzID0gdGYubmFtZWRQYXJhbWV0ZXJUeXBlczsKICAgICAgTGlzdDxTdHJpbmc+IHNOYW1lcyA9IHNmLm5hbWVkUGFyYW1ldGVyczsKICAgICAgTGlzdDxUPiBzVHlwZXMgPSBzZi5uYW1lZFBhcmFtZXRlclR5cGVzOwogICAgICBpbnQgdEluZGV4ID0gMDsKICAgICAgaW50IHNJbmRleCA9IDA7CiAgICAgIHdoaWxlICh0SW5kZXggPCB0TmFtZXMubGVuZ3RoICYmIHNJbmRleCA8IHNOYW1lcy5sZW5ndGgpIHsKICAgICAgICBpZiAodE5hbWVzW3RJbmRleF0gPT0gc05hbWVzW3NJbmRleF0pIHsKICAgICAgICAgIGlmIChpbnZhbGlkRnVuY3Rpb25QYXJhbWV0ZXJUeXBlcyh0VHlwZXNbdEluZGV4XSwgc1R5cGVzW3NJbmRleF0pKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICAgIHNJbmRleCsrOwogICAgICAgIH0KICAgICAgICB0SW5kZXgrKzsKICAgICAgfQogICAgICBpZiAoc0luZGV4IDwgc05hbWVzLmxlbmd0aCkgewogICAgICAgIC8vIFdlIGRpZG4ndCBmaW5kIGFsbCBuYW1lcy4KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIENoZWNrIHRoZSByZW1haW5pbmcgWzogcy5wIDpdIGFnYWluc3QgWzogdC5vIDpdLgogICAgICB0cHMgPSB0Zi5vcHRpb25hbFBhcmFtZXRlclR5cGVzLml0ZXJhdG9yOwogICAgICB0TmV4dCgpOwogICAgICBpZiAoaW5jb21wYXRpYmxlUGFyYW1ldGVycygpKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChzTm90RW1wdHkpIHsKICAgICAgICAvLyBXZSBtdXN0IGhhdmUgWzogbGVuKHQucCkgKyBsZW4odC5vKSA+PSBsZW4ocy5wKSA6XS4KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKCFzZi5vcHRpb25hbFBhcmFtZXRlclR5cGVzLmlzRW1wdHkpIHsKICAgICAgICAvLyBDaGVjayB0aGUgcmVtYWluaW5nIFs6IHMubyA6XSBhZ2FpbnN0IHRoZSByZW1haW5pbmcgWzogdC5vIDpdLgogICAgICAgIHNwcyA9IHNmLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuaXRlcmF0b3I7CiAgICAgICAgc05leHQoKTsKICAgICAgICBpZiAoaW5jb21wYXRpYmxlUGFyYW1ldGVycygpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKHNOb3RFbXB0eSkgewogICAgICAgICAgLy8gV2UgZGlkbid0IGZpbmQgZW5vdWdoIHBhcmFtZXRlcnM6CiAgICAgICAgICAvLyBXZSBtdXN0IGhhdmUgWzogbGVuKHQucCkgKyBsZW4odC5vKSA8PSBsZW4ocy5wKSArIGxlbihzLm8pIDpdLgogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoc05vdEVtcHR5KSB7CiAgICAgICAgICAvLyBXZSBtdXN0IGhhdmUgWzogbGVuKHQucCkgKyBsZW4odC5vKSA+PSBsZW4ocy5wKSA6XS4KICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFR5cGVWYXJpYWJsZVR5cGUoVHlwZVZhcmlhYmxlVHlwZSB0LCBUIHMpIHsKICAgIC8vIElkZW50aXR5IGNoZWNrIGlzIGhhbmRsZWQgaW4gW2lzU3VidHlwZV0uCiAgICBEYXJ0VHlwZSBib3VuZCA9IGdldFR5cGVWYXJpYWJsZUJvdW5kKHQuZWxlbWVudCk7CiAgICBpZiAoYm91bmQuaXNUeXBlVmFyaWFibGUpIHsKICAgICAgLy8gVGhlIGJvdW5kIGlzIHBvdGVudGlhbGx5IGN5Y2xpYyBzbyB3ZSBuZWVkIHRvIGJlIGV4dHJhIGNhcmVmdWwuCiAgICAgIFNldDxUeXBlVmFyaWFibGVFbnRpdHk+IHNlZW5UeXBlVmFyaWFibGVzID0gbmV3IFNldDxUeXBlVmFyaWFibGVFbnRpdHk+KCk7CiAgICAgIHNlZW5UeXBlVmFyaWFibGVzLmFkZCh0LmVsZW1lbnQpOwogICAgICB3aGlsZSAoYm91bmQuaXNUeXBlVmFyaWFibGUpIHsKICAgICAgICBUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSA9IGJvdW5kOwogICAgICAgIGlmIChib3VuZCA9PSBzKSB7CiAgICAgICAgICAvLyBbdF0gZXh0ZW5kcyBbc10uCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHNlZW5UeXBlVmFyaWFibGVzLmNvbnRhaW5zKHR5cGVWYXJpYWJsZS5lbGVtZW50KSkgewogICAgICAgICAgLy8gV2UgaGF2ZSBhIGN5Y2xlIGFuZCBoYXZlIGFscmVhZHkgY2hlY2tlZCBhbGwgYm91bmRzIGluIHRoZSBjeWNsZQogICAgICAgICAgLy8gYWdhaW5zdCBbc10gYW5kIGNhbiB0aGVyZWZvcmUgY29uY2x1ZGUgdGhhdCBbdF0gaXMgbm90IGEgc3VidHlwZQogICAgICAgICAgLy8gb2YgW3NdLgogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBzZWVuVHlwZVZhcmlhYmxlcy5hZGQodHlwZVZhcmlhYmxlLmVsZW1lbnQpOwogICAgICAgIGJvdW5kID0gZ2V0VHlwZVZhcmlhYmxlQm91bmQodHlwZVZhcmlhYmxlLmVsZW1lbnQpOwogICAgICB9CiAgICB9CiAgICBpZiAoaW52YWxpZFR5cGVWYXJpYWJsZUJvdW5kcyhib3VuZCwgcykpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1bmN0aW9uVHlwZVZhcmlhYmxlKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHQsIERhcnRUeXBlIHMpIHsKICAgIGlmICghcy5pc0Z1bmN0aW9uVHlwZVZhcmlhYmxlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gYXNzdW1wdGlvbnMuaXNBc3N1bWVkKHQsIHMpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgTW9yZVNwZWNpZmljVmlzaXRvcjxUIGV4dGVuZHMgRGFydFR5cGU+CiAgICBleHRlbmRzIEFic3RyYWN0VHlwZVJlbGF0aW9uPFQ+IHsKICBib29sIGlzTW9yZVNwZWNpZmljKFQgdCwgVCBzKSB7CiAgICBpZiAoaWRlbnRpY2FsKHQsIHMpIHx8CiAgICAgICAgcy50cmVhdEFzRHluYW1pYyB8fAogICAgICAgIHMuaXNWb2lkIHx8CiAgICAgICAgcyA9PSBjb21tb25FbGVtZW50cy5vYmplY3RUeXBlIHx8CiAgICAgICAgdCA9PSBjb21tb25FbGVtZW50cy5udWxsVHlwZSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmICh0LnRyZWF0QXNEeW5hbWljKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICB0ID0gZ2V0VW5hbGlhc2VkKHQpOwogICAgcyA9IGdldFVuYWxpYXNlZChzKTsKCiAgICByZXR1cm4gdC5hY2NlcHQodGhpcywgcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGludmFsaWRUeXBlQXJndW1lbnRzKFQgdCwgVCBzKSB7CiAgICByZXR1cm4gIWlzTW9yZVNwZWNpZmljKHQsIHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpbnZhbGlkRnVuY3Rpb25SZXR1cm5UeXBlcyhUIHQsIFQgcykgewogICAgaWYgKHMudHJlYXRBc0R5bmFtaWMgJiYgdC5pc1ZvaWQpIHJldHVybiB0cnVlOwogICAgcmV0dXJuICFzLmlzVm9pZCAmJiAhaXNNb3JlU3BlY2lmaWModCwgcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGludmFsaWRGdW5jdGlvblBhcmFtZXRlclR5cGVzKFQgdCwgVCBzKSB7CiAgICByZXR1cm4gIWlzTW9yZVNwZWNpZmljKHQsIHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpbnZhbGlkVHlwZVZhcmlhYmxlQm91bmRzKFQgYm91bmQsIFQgcykgewogICAgcmV0dXJuICFpc01vcmVTcGVjaWZpYyhib3VuZCwgcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGludmFsaWRDYWxsYWJsZVR5cGUoY292YXJpYW50IERhcnRUeXBlIGNhbGxUeXBlLCBjb3ZhcmlhbnQgRGFydFR5cGUgcykgewogICAgcmV0dXJuICFpc01vcmVTcGVjaWZpYyhjYWxsVHlwZSwgcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RnV0dXJlT3JUeXBlKEZ1dHVyZU9yVHlwZSB0LCBjb3ZhcmlhbnQgRGFydFR5cGUgcykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLy8vIFR5cGUgdmlzaXRvciB0aGF0IGRldGVybWluZXMgdGhlIHN1YnR5cGUgcmVsYXRpb24gdHdvIHR5cGVzLgphYnN0cmFjdCBjbGFzcyBTdWJ0eXBlVmlzaXRvcjxUIGV4dGVuZHMgRGFydFR5cGU+CiAgICBleHRlbmRzIE1vcmVTcGVjaWZpY1Zpc2l0b3I8VD4gewogIGJvb2wgaXNTdWJ0eXBlKERhcnRUeXBlIHQsIERhcnRUeXBlIHMpIHsKICAgIGlmIChzLmlzRnV0dXJlT3IpIHsKICAgICAgRnV0dXJlT3JUeXBlIHNGdXR1cmVPciA9IHM7CiAgICAgIGlmIChpc1N1YnR5cGUodCwgc0Z1dHVyZU9yLnR5cGVBcmd1bWVudCkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBlbHNlIGlmICh0LmlzSW50ZXJmYWNlVHlwZSkgewogICAgICAgIEludGVyZmFjZVR5cGUgdEludGVyZmFjZSA9IHQ7CiAgICAgICAgaWYgKHRJbnRlcmZhY2UuZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5mdXR1cmVDbGFzcyAmJgogICAgICAgICAgICBpc1N1YnR5cGUoCiAgICAgICAgICAgICAgICB0SW50ZXJmYWNlLnR5cGVBcmd1bWVudHMuc2luZ2xlLCBzRnV0dXJlT3IudHlwZUFyZ3VtZW50KSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gaXNNb3JlU3BlY2lmaWModCwgcyk7CiAgfQoKICBib29sIGlzQXNzaWduYWJsZShUIHQsIFQgcykgewogICAgcmV0dXJuIGlzU3VidHlwZSh0LCBzKSB8fCBpc1N1YnR5cGUocywgdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGludmFsaWRUeXBlQXJndW1lbnRzKFQgdCwgVCBzKSB7CiAgICByZXR1cm4gIWlzU3VidHlwZSh0LCBzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaW52YWxpZEZ1bmN0aW9uUmV0dXJuVHlwZXMoVCB0LCBUIHMpIHsKICAgIHJldHVybiAhaXNTdWJ0eXBlKHQsIHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpbnZhbGlkRnVuY3Rpb25QYXJhbWV0ZXJUeXBlcyhUIHQsIFQgcykgewogICAgcmV0dXJuICFpc1N1YnR5cGUocywgdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGludmFsaWRUeXBlVmFyaWFibGVCb3VuZHMoVCBib3VuZCwgVCBzKSB7CiAgICByZXR1cm4gIWlzU3VidHlwZShib3VuZCwgcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGludmFsaWRDYWxsYWJsZVR5cGUoY292YXJpYW50IERhcnRUeXBlIGNhbGxUeXBlLCBjb3ZhcmlhbnQgRGFydFR5cGUgcykgewogICAgcmV0dXJuICFpc1N1YnR5cGUoY2FsbFR5cGUsIHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1dHVyZU9yVHlwZShGdXR1cmVPclR5cGUgdCwgY292YXJpYW50IERhcnRUeXBlIHMpIHsKICAgIGlmIChzLmlzRnV0dXJlT3IpIHsKICAgICAgRnV0dXJlT3JUeXBlIHNGdXR1cmVPciA9IHM7CiAgICAgIHJldHVybiBpc1N1YnR5cGUodC50eXBlQXJndW1lbnQsIHNGdXR1cmVPci50eXBlQXJndW1lbnQpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLy8vIFR5cGUgdmlzaXRvciB0aGF0IGRldGVybWluZXMgb25lIHR5cGUgY291bGQgYSBzdWJ0eXBlIG9mIGFub3RoZXIgZ2l2ZW4gdGhlCi8vLyByaWdodCB0eXBlIHZhcmlhYmxlIHN1YnN0aXR1dGlvbi4gVGhlIGNvbXB1dGF0aW9uIGlzIGFwcHJveGltYXRlIGFuZCByZXR1cm5zCi8vLyBgZmFsc2VgIG9ubHkgaWYgd2UgYXJlIHN1cmUgbm8gc3VjaCBzdWJzdGl0dXRpb24gZXhpc3RzLgphYnN0cmFjdCBjbGFzcyBQb3RlbnRpYWxTdWJ0eXBlVmlzaXRvcjxUIGV4dGVuZHMgRGFydFR5cGU+CiAgICBleHRlbmRzIFN1YnR5cGVWaXNpdG9yPFQ+IHsKICBib29sIF9hc3N1bWVJbnN0YW50aWF0aW9ucyA9IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgaXNTdWJ0eXBlKERhcnRUeXBlIHQsIERhcnRUeXBlIHMpIHsKICAgIGlmICh0IGlzIFR5cGVWYXJpYWJsZVR5cGUgfHwgcyBpcyBUeXBlVmFyaWFibGVUeXBlKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKCh0IGlzIEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHx8IHMgaXMgRnVuY3Rpb25UeXBlVmFyaWFibGUpICYmCiAgICAgICAgX2Fzc3VtZUluc3RhbnRpYXRpb25zKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmlzU3VidHlwZSh0LCBzKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXRDb21tb25UeXBlVmFyaWFibGVzQ291bnQoRnVuY3Rpb25UeXBlIHQsIEZ1bmN0aW9uVHlwZSBzKSB7CiAgICBpZiAodC50eXBlVmFyaWFibGVzLmxlbmd0aCA9PSBzLnR5cGVWYXJpYWJsZXMubGVuZ3RoKSB7CiAgICAgIHJldHVybiB0LnR5cGVWYXJpYWJsZXMubGVuZ3RoOwogICAgfQogICAgaWYgKF9hc3N1bWVJbnN0YW50aWF0aW9ucyAmJiBzLnR5cGVWYXJpYWJsZXMubGVuZ3RoID09IDApIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGJvb2wgaXNQb3RlbnRpYWxTdWJ0eXBlKERhcnRUeXBlIHQsIERhcnRUeXBlIHMsCiAgICAgIHtib29sIGFzc3VtZUluc3RhbnRpYXRpb25zOiB0cnVlfSkgewogICAgX2Fzc3VtZUluc3RhbnRpYXRpb25zID0gYXNzdW1lSW5zdGFudGlhdGlvbnM7CiAgICByZXR1cm4gaXNTdWJ0eXBlKHQsIHMpOwogIH0KfQoKLy8vIEJhc2ljIGludGVyZmFjZSBmb3IgdGhlIERhcnQgdHlwZSBzeXN0ZW0uCmFic3RyYWN0IGNsYXNzIERhcnRUeXBlcyB7CiAgLy8vIFRoZSB0eXBlcyBkZWZpbmVkIGluICdkYXJ0OmNvcmUnLgogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50czsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFt0XSBpcyBhIHN1YnR5cGUgb2YgW3NdLgogIGJvb2wgaXNTdWJ0eXBlKERhcnRUeXBlIHQsIERhcnRUeXBlIHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3RdIGlzIGFzc2lnbmFibGUgdG8gW3NdLgogIGJvb2wgaXNBc3NpZ25hYmxlKERhcnRUeXBlIHQsIERhcnRUeXBlIHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3RdIG1pZ2h0IGJlIGEgc3VidHlwZSBvZiBbc10gZm9yIHNvbWUgdmFsdWVzIG9mCiAgLy8vIHR5cGUgdmFyaWFibGVzIGluIFtzXSBhbmQgW3RdLgogIC8vLwogIC8vLyBJZiBbYXNzdW1lSW5zdGFudGlhdGlvbnNdLCBnZW5lcmljIGZ1bmN0aW9uIHR5cGVzIGFyZSBhc3N1bWVkIHRvIGJlCiAgLy8vIHBvdGVudGlhbGx5IGluc3RhbnRpYXRlZC4KICBib29sIGlzUG90ZW50aWFsU3VidHlwZShEYXJ0VHlwZSB0LCBEYXJ0VHlwZSBzLAogICAgICB7Ym9vbCBhc3N1bWVJbnN0YW50aWF0aW9uczogdHJ1ZX0pOwoKICBzdGF0aWMgY29uc3QgaW50IElTX1NVQlRZUEUgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgTUFZQkVfU1VCVFlQRSA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBOT1RfU1VCVFlQRSA9IC0xOwoKICAvLy8gUmV0dXJucyBbSVNfU1VCVFlQRV0sIFtNQVlCRV9TVUJUWVBFXSwgb3IgW05PVF9TVUJUWVBFXSBpZiBbdF0gaXMgYQogIC8vLyAocG90ZW50aWFsKSBzdWJ0eXBlIG9mIFtzXQogIGludCBjb21wdXRlU3VidHlwZVJlbGF0aW9uKERhcnRUeXBlIHQsIERhcnRUeXBlIHMpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENvbXB1dGUgdGhpcyBkaXJlY3RseSBpbiBbaXNQb3RlbnRpYWxTdWJ0eXBlXS4KICAgIGlmIChpc1N1YnR5cGUodCwgcykpIHJldHVybiBJU19TVUJUWVBFOwogICAgcmV0dXJuIGlzUG90ZW50aWFsU3VidHlwZSh0LCBzKSA/IE1BWUJFX1NVQlRZUEUgOiBOT1RfU1VCVFlQRTsKICB9CgogIC8vLyBSZXR1cm5zIFt0eXBlXSBhcyBhbiBpbnN0YW5jZSBvZiBbY2xzXSBvciBgbnVsbGAgaWYgW3R5cGVdIGlzIG5vdCBhCiAgLy8vIHN1YnR5cGUgb2YgW2Nsc10uCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlOiBgYXNJbnN0YW5jZU9mKExpc3Q8U3RyaW5nPiwgSXRlcmFibGUpID0gSXRlcmFibGU8U3RyaW5nPmAuCiAgSW50ZXJmYWNlVHlwZSBhc0luc3RhbmNlT2YoSW50ZXJmYWNlVHlwZSB0eXBlLCBDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJuIFtiYXNlXSB3aGVyZSB0aGUgdHlwZSB2YXJpYWJsZSBvZiBgY29udGV4dC5lbGVtZW50YCBhcmUgcmVwbGFjZWQKICAvLy8gYnkgdGhlIHR5cGUgYXJndW1lbnRzIG9mIFtjb250ZXh0XS4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlCiAgLy8vCiAgLy8vICAgICBzdWJzdEJ5Q29udGV4dChJdGVyYWJsZTxMaXN0LkU+LCBMaXN0PFN0cmluZz4pID0gSXRlcmFibGU8U3RyaW5nPgogIC8vLwogIERhcnRUeXBlIHN1YnN0QnlDb250ZXh0KERhcnRUeXBlIGJhc2UsIEludGVyZmFjZVR5cGUgY29udGV4dCk7CgogIC8vLyBSZXR1cm5zIHRoZSAndGhpcyB0eXBlJyBvZiBbY2xzXS4gVGhhdCBpcywgdGhlIGluc3RhbnRpYXRpb24gb2YgW2Nsc10KICAvLy8gd2hlcmUgdGhlIHR5cGUgYXJndW1lbnRzIGFyZSB0aGUgdHlwZSB2YXJpYWJsZXMgb2YgW2Nsc10uCiAgSW50ZXJmYWNlVHlwZSBnZXRUaGlzVHlwZShDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgc3VwZXJ0eXBlIG9mIFtjbHNdLCBpLmUuIHRoZSB0eXBlIGluIHRoZSBgZXh0ZW5kc2AgY2xhdXNlIG9mCiAgLy8vIFtjbHNdLgogIEludGVyZmFjZVR5cGUgZ2V0U3VwZXJ0eXBlKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFsbCBzdXBlcnR5cGVzIG9mIFtjbHNdLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoaXMgc2hvdWxkIGluY2x1ZGUgYEZ1bmN0aW9uYCBpZiBbY2xzXSBkZWNsYXJlcwogIC8vIGEgYGNhbGxgIG1ldGhvZC4KICBJdGVyYWJsZTxJbnRlcmZhY2VUeXBlPiBnZXRTdXBlcnR5cGVzKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFsbCB0eXBlcyBkaXJlY3RseSBpbXBsZW1lbnRlZCBieSBbY2xzXS4KICBJdGVyYWJsZTxJbnRlcmZhY2VUeXBlPiBnZXRJbnRlcmZhY2VzKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBgY2FsbGAgbWV0aG9kIG9uIFt0eXBlXSwgb3IgYG51bGxgIGlmIHRoZSBjbGFzcwogIC8vLyBvZiBbdHlwZV0gZG9lcyBub3QgaGF2ZSBhIGBjYWxsYCBtZXRob2QuCiAgRnVuY3Rpb25UeXBlIGdldENhbGxUeXBlKEludGVyZmFjZVR5cGUgdHlwZSk7CgogIC8vLyBDaGVja3MgdGhlIHR5cGUgYXJndW1lbnRzIG9mIFt0eXBlXSBhZ2FpbnN0IHRoZSB0eXBlIHZhcmlhYmxlIGJvdW5kcwogIC8vLyBkZWNsYXJlZCBvbiBgdHlwZS5lbGVtZW50YC4gQ2FsbHMgW2NoZWNrVHlwZVZhcmlhYmxlQm91bmRdIG9uIGVhY2ggdHlwZQogIC8vLyBhcmd1bWVudCBhbmQgYm91bmQuCiAgdm9pZCBjaGVja1R5cGVWYXJpYWJsZUJvdW5kczxUPigKICAgICAgVCBjb250ZXh0LAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlVmFyaWFibGVzLAogICAgICB2b2lkIGNoZWNrVHlwZVZhcmlhYmxlQm91bmQoVCBjb250ZXh0LCBEYXJ0VHlwZSB0eXBlQXJndW1lbnQsCiAgICAgICAgICBUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSwgRGFydFR5cGUgYm91bmQpKTsKCiAgLy8vIFJldHVybnMgdGhlIFtDbGFzc0VudGl0eV0gd2hpY2ggZGVjbGFyZXMgdGhlIHR5cGUgdmFyaWFibGVzIG9jY3VycmluZyBpbgogIC8vIFt0eXBlXSwgb3IgYG51bGxgIGlmIFt0eXBlXSBkb2VzIG5vdCBjb250YWluIGNsYXNzIHR5cGUgdmFyaWFibGVzLgogIHN0YXRpYyBDbGFzc0VudGl0eSBnZXRDbGFzc0NvbnRleHQoRGFydFR5cGUgdHlwZSkgewogICAgQ2xhc3NFbnRpdHkgY29udGV4dENsYXNzOwogICAgdHlwZS5mb3JFYWNoVHlwZVZhcmlhYmxlKChUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSkgewogICAgICBpZiAodHlwZVZhcmlhYmxlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uIGlzISBDbGFzc0VudGl0eSkgcmV0dXJuOwogICAgICBjb250ZXh0Q2xhc3MgPSB0eXBlVmFyaWFibGUuZWxlbWVudC50eXBlRGVjbGFyYXRpb247CiAgICB9KTsKICAgIC8vIEdFTkVSSUNfTUVUSE9EUzogV2hlbiBnZW5lcmljIG1ldGhvZCBzdXBwb3J0IGlzIGNvbXBsZXRlIGVub3VnaCB0bwogICAgLy8gaW5jbHVkZSBhIHJ1bnRpbWUgdmFsdWUgZm9yIG1ldGhvZCB0eXBlIHZhcmlhYmxlcyB0aGlzIG11c3QgYmUgdXBkYXRlZC4KICAgIC8vIEZv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BAIBT1E9OyAlAQwrOhMGRCETBiIEAQxEPCUGQBAGEQQBMisyHAQCAS4bKCUBMSoBMi0BSSUGSiAyKgEjJiUBSiE3SyxDBAFKGAZOQwFOKgYTBkwGQQFMQC4BTw0vASdLFjoBNzoBTi8wAUtOGiMRJCREOwFPSDYeP0g7CEpPSk1OUEwoGQQCAShwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbGVtZW50cy90eXBlcy5kYXJ0KHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzL2pzLmRhcnSZXi8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGpzOwoKaW1wb3J0ICdwYWNrYWdlOmpzX2FzdC9qc19hc3QuZGFydCc7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2R1bXBfaW5mby5kYXJ0JyBzaG93IER1bXBJbmZvVGFzazsKaW1wb3J0ICcuLi9pby9jb2RlX291dHB1dC5kYXJ0JyBzaG93IENvZGVCdWZmZXI7CmltcG9ydCAnanNfc291cmNlX21hcHBpbmcuZGFydCc7CgpleHBvcnQgJ3BhY2thZ2U6anNfYXN0L2pzX2FzdC5kYXJ0JzsKZXhwb3J0ICdqc19kZWJ1Zy5kYXJ0JzsKClN0cmluZyBwcmV0dHlQcmludChOb2RlIG5vZGUsCiAgICB7Ym9vbCBlbmFibGVNaW5pZmljYXRpb246IGZhbHNlLAogICAgYm9vbCBhbGxvd1ZhcmlhYmxlTWluaWZpY2F0aW9uOiB0cnVlLAogICAgUmVuYW1lciByZW5hbWVyRm9yTmFtZXM6IEphdmFTY3JpcHRQcmludGluZ09wdGlvbnMuaWRlbnRpdHlSZW5hbWVyfSkgewogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IERvIHdlIG5lZWQgYWxsIHRoZSBvcHRpb25zIGhlcmU/CiAgSmF2YVNjcmlwdFByaW50aW5nT3B0aW9ucyBvcHRpb25zID0gbmV3IEphdmFTY3JpcHRQcmludGluZ09wdGlvbnMoCiAgICAgIHNob3VsZENvbXByZXNzT3V0cHV0OiBlbmFibGVNaW5pZmljYXRpb24sCiAgICAgIG1pbmlmeUxvY2FsVmFyaWFibGVzOiBhbGxvd1ZhcmlhYmxlTWluaWZpY2F0aW9uLAogICAgICByZW5hbWVyRm9yTmFtZXM6IHJlbmFtZXJGb3JOYW1lcyk7CiAgU2ltcGxlSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCBjb250ZXh0ID0KICAgICAgbmV3IFNpbXBsZUphdmFTY3JpcHRQcmludGluZ0NvbnRleHQoKTsKICBQcmludGVyIHByaW50ZXIgPSBuZXcgUHJpbnRlcihvcHRpb25zLCBjb250ZXh0KTsKICBwcmludGVyLnZpc2l0KG5vZGUpOwogIHJldHVybiBjb250ZXh0LmdldFRleHQoKTsKfQoKQ29kZUJ1ZmZlciBjcmVhdGVDb2RlQnVmZmVyKE5vZGUgbm9kZSwgQ29tcGlsZXJPcHRpb25zIGNvbXBpbGVyT3B0aW9ucywKICAgIEphdmFTY3JpcHRTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5IHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3ksCiAgICB7RHVtcEluZm9UYXNrIG1vbml0b3IsCiAgICBib29sIGFsbG93VmFyaWFibGVNaW5pZmljYXRpb246IHRydWUsCiAgICBSZW5hbWVyIHJlbmFtZXJGb3JOYW1lczogSmF2YVNjcmlwdFByaW50aW5nT3B0aW9ucy5pZGVudGl0eVJlbmFtZXJ9KSB7CiAgSmF2YVNjcmlwdFByaW50aW5nT3B0aW9ucyBvcHRpb25zID0gbmV3IEphdmFTY3JpcHRQcmludGluZ09wdGlvbnMoCiAgICAgIHNob3VsZENvbXByZXNzT3V0cHV0OiBjb21waWxlck9wdGlvbnMuZW5hYmxlTWluaWZpY2F0aW9uLAogICAgICBtaW5pZnlMb2NhbFZhcmlhYmxlczogYWxsb3dWYXJpYWJsZU1pbmlmaWNhdGlvbiwKICAgICAgcmVuYW1lckZvck5hbWVzOiByZW5hbWVyRm9yTmFtZXMpOwogIENvZGVCdWZmZXIgb3V0QnVmZmVyID0gbmV3IENvZGVCdWZmZXIoKTsKICBTb3VyY2VJbmZvcm1hdGlvblByb2Nlc3NvciBzb3VyY2VJbmZvcm1hdGlvblByb2Nlc3NvciA9CiAgICAgIHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kuY3JlYXRlUHJvY2Vzc29yKAogICAgICAgICAgbmV3IFNvdXJjZU1hcHBlclByb3ZpZGVySW1wbChvdXRCdWZmZXIpLAogICAgICAgICAgY29uc3QgU291cmNlSW5mb3JtYXRpb25SZWFkZXIoKSk7CiAgRGFydDJKU0phdmFTY3JpcHRQcmludGluZ0NvbnRleHQgY29udGV4dCA9CiAgICAgIG5ldyBEYXJ0MkpTSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCgKICAgICAgICAgIG1vbml0b3IsIG91dEJ1ZmZlciwgc291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IpOwogIFByaW50ZXIgcHJpbnRlciA9IG5ldyBQcmludGVyKG9wdGlvbnMsIGNvbnRleHQpOwogIHByaW50ZXIudmlzaXQobm9kZSk7CiAgc291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IucHJvY2Vzcyhub2RlLCBvdXRCdWZmZXIpOwogIHJldHVybiBvdXRCdWZmZXI7Cn0KCmNsYXNzIERhcnQySlNKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0IGltcGxlbWVudHMgSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCB7CiAgZmluYWwgRHVtcEluZm9UYXNrIG1vbml0b3I7CiAgZmluYWwgQ29kZUJ1ZmZlciBvdXRCdWZmZXI7CiAgZmluYWwgQ29kZVBvc2l0aW9uTGlzdGVuZXIgY29kZVBvc2l0aW9uTGlzdGVuZXI7CgogIERhcnQySlNKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0KAogICAgICB0aGlzLm1vbml0b3IsIHRoaXMub3V0QnVmZmVyLCB0aGlzLmNvZGVQb3NpdGlvbkxpc3RlbmVyKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBlcnJvcihTdHJpbmcgbWVzc2FnZSkgewogICAgZmFpbGVkQXQoTk9fTE9DQVRJT05fU1BBTk5BQkxFLCBtZXNzYWdlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW1pdChTdHJpbmcgc3RyaW5nKSB7CiAgICBtb25pdG9yPy5lbWl0KHN0cmluZyk7CiAgICBvdXRCdWZmZXIuYWRkKHN0cmluZyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVudGVyTm9kZShOb2RlIG5vZGUsIGludCBzdGFydFBvc2l0aW9uKSB7CiAgICBtb25pdG9yPy5lbnRlck5vZGUobm9kZSwgc3RhcnRQb3NpdGlvbik7CiAgICBjb2RlUG9zaXRpb25MaXN0ZW5lci5vblN0YXJ0UG9zaXRpb24obm9kZSwgc3RhcnRQb3NpdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGV4aXROb2RlKAogICAgICBOb2RlIG5vZGUsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24sIGludCBjbG9zaW5nUG9zaXRpb24pIHsKICAgIG1vbml0b3I/LmV4aXROb2RlKG5vZGUsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBjbG9zaW5nUG9zaXRpb24pOwogICAgY29kZVBvc2l0aW9uTGlzdGVuZXIub25Qb3NpdGlvbnMoCiAgICAgICAgbm9kZSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIGNsb3NpbmdQb3NpdGlvbik7CiAgfQp9CgovLy8gSW50ZXJmYWNlIGZvciBhc3Qgbm9kZXMgdGhhdCBlbmNhcHN1bGF0ZSBhbiBhc3QgdGhhdCBuZWVkcyB0byBiZQovLy8gdHJhdmVyc2VkIHdoZW4gY291bnRpbmcgdG9rZW5zLgphYnN0cmFjdCBjbGFzcyBBc3RDb250YWluZXIgaW1wbGVtZW50cyBOb2RlIHsKICBJdGVyYWJsZTxOb2RlPiBnZXQgY29udGFpbmVkTm9kZXM7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHRhc2tzIGluIHRoZSBjb21waWxlciB0aGF0IG5lZWQgdG8gZmluYWxpemUgdG9rZW5zIGFmdGVyCi8vLyBjb3VudGluZyB0aGVtLgphYnN0cmFjdCBjbGFzcyBUb2tlbkZpbmFsaXplciB7CiAgdm9pZCBmaW5hbGl6ZVRva2VucygpOwp9CgovLy8gSW1wbGVtZW50cyByZWZlcmVuY2UgY291bnRpbmcgZm9yIGluc3RhbmNlcyBvZiBbUmVmZXJlbmNlQ291bnRlZEFzdE5vZGVdCmNsYXNzIFRva2VuQ291bnRlciBleHRlbmRzIEJhc2VWaXNpdG9yIHsKICBAb3ZlcnJpZGUKICB2aXNpdE5vZGUoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBBc3RDb250YWluZXIpIHsKICAgICAgZm9yIChOb2RlIGVsZW1lbnQgaW4gbm9kZS5jb250YWluZWROb2RlcykgewogICAgICAgIGVsZW1lbnQuYWNjZXB0KHRoaXMpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG5vZGUgaXMgUmVmZXJlbmNlQ291bnRlZEFzdE5vZGUpIHsKICAgICAgbm9kZS5tYXJrU2Vlbih0aGlzKTsKICAgIH0gZWxzZSB7CiAgICAgIHN1cGVyLnZpc2l0Tm9kZShub2RlKTsKICAgIH0KICB9CgogIHZvaWQgY291bnRUb2tlbnMoTm9kZSBub2RlKSA9PiBub2RlLmFjY2VwdCh0aGlzKTsKfQoKYWJzdHJhY3QgY2xhc3MgUmVmZXJlbmNlQ291bnRlZEFzdE5vZGUgaW1wbGVtZW50cyBOb2RlIHsKICB2b2lkIG1hcmtTZWVuKFRva2VuQ291bnRlciB2aXNpdG9yKTsKfQoKLy8vIFJlcHJlc2VudHMgdGhlIExpdGVyYWxTdHJpbmcgcmVzdWx0aW5nIGZyb20gdW5wYXJzaW5nIFtleHByZXNzaW9uXS4gVGhlCi8vLyBhY3R1YWwgdW5wYXJzaW5nIGlzIGRvbmUgb24gZGVtYW5kIHdoZW4gcmVxdWVzdGluZyB0aGUgW3ZhbHVlXSBvZiB0aGlzCi8vLyBub2RlLgovLy8KLy8vIFRoaXMgaXMgdXNlZCB3aGVuIGdlbmVyYXRlZCBjb2RlIG5lZWRzIHRvIGJlIHJlcHJlc2VudGVkIGFzIGEgc3RyaW5nLAovLy8gZm9yIGV4YW1wbGUgYnkgdGhlIGxhenkgZW1pdHRlciBvciB3aGVuIGdlbmVyYXRpbmcgY29kZSBnZW5lcmF0b3JzLgpjbGFzcyBVbnBhcnNlZE5vZGUgZXh0ZW5kcyBEZWZlcnJlZFN0cmluZyBpbXBsZW1lbnRzIEFzdENvbnRhaW5lciB7CiAgZmluYWwgTm9kZSB0cmVlOwogIGZpbmFsIGJvb2wgX2VuYWJsZU1pbmlmaWNhdGlvbjsKICBmaW5hbCBib29sIF9wcm90ZWN0Rm9yRXZhbDsKICBMaXRlcmFsU3RyaW5nIF9jYWNoZWRMaXRlcmFsOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxOb2RlPiBnZXQgY29udGFpbmVkTm9kZXMgPT4gW3RyZWVdOwoKICAvLy8gQSBbanMuTGl0ZXJhbF0gdGhhdCByZXByZXNlbnRzIHRoZSBzdHJpbmcgcmVzdWx0IG9mIHVucGFyc2luZyBbYXN0XS4KICAvLy8KICAvLy8gV2hlbiBpdHMgc3RyaW5nIFt2YWx1ZV0gaXMgcmVxdWVzdGVkLCB0aGUgbm9kZSBwcmV0dHktcHJpbnRzIHRoZSBnaXZlbgogIC8vLyBbYXN0XSBhbmQsIGlmIFtwcm90ZWN0Rm9yRXZhbF0gaXMgdHJ1ZSwgd3JhcHMgdGhlIHJlc3VsdGluZyBzdHJpbmcgaW4KICAvLy8gcGFyZW50aGVzaXMuIFRoZSByZXN1bHQgaXMgYWxzbyBlc2NhcGVkLgogIFVucGFyc2VkTm9kZSh0aGlzLnRyZWUsIHRoaXMuX2VuYWJsZU1pbmlmaWNhdGlvbiwgdGhpcy5fcHJvdGVjdEZvckV2YWwpOwoKICBMaXRlcmFsU3RyaW5nIGdldCBfbGl0ZXJhbCB7CiAgICBpZiAoX2NhY2hlZExpdGVyYWwgPT0gbnVsbCkgewogICAgICBTdHJpbmcgdGV4dCA9IHByZXR0eVByaW50KHRyZWUsIGVuYWJsZU1pbmlmaWNhdGlvbjogX2VuYWJsZU1pbmlmaWNhdGlvbik7CiAgICAgIGlmIChfcHJvdGVjdEZvckV2YWwpIHsKICAgICAgICBpZiAodHJlZSBpcyBGdW4pIHRleHQgPSAnKCR0ZXh0KSc7CiAgICAgICAgaWYgKHRyZWUgaXMgTGl0ZXJhbEV4cHJlc3Npb24pIHsKICAgICAgICAgIExpdGVyYWxFeHByZXNzaW9uIGxpdGVyYWxFeHByZXNzaW9uID0gdHJlZTsKICAgICAgICAgIFN0cmluZyB0ZW1wbGF0ZSA9IGxpdGVyYWxFeHByZXNzaW9uLnRlbXBsYXRlOwogICAgICAgICAgaWYgKHRlbXBsYXRlLnN0YXJ0c1dpdGgoImZ1bmN0aW9uICIpIHx8IHRlbXBsYXRlLnN0YXJ0c1dpdGgoInsiKSkgewogICAgICAgICAgICB0ZXh0ID0gJygkdGV4dCknOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBfY2FjaGVkTGl0ZXJhbCA9IGpzLmVzY2FwZWRTdHJpbmcodGV4dCk7CiAgICB9CiAgICByZXR1cm4gX2NhY2hlZExpdGVyYWw7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IHZhbHVlID0+IF9saXRlcmFsLnZhbHVlOwp9CgovLy8gVHJ1ZSBpZiB0aGUgZ2l2ZW4gdGVtcGxhdGUgY29uc2lzdHMgb2YganVzdCBhIHBsYWNlaG9sZGVyLiBTdWNoIHRlbXBsYXRlcwovLy8gYXJlIHNvbWV0aW1lcyB1c2VkIHRvIG1hbnVhbGx5IHByb21vdGUgdGhlIHR5cGUgb2YgYW4gZXhwcmVzc2lvbi4KYm9vbCBpc0lkZW50aXR5VGVtcGxhdGUoVGVtcGxhdGUgdGVtcGxhdGUpIHsKICByZXR1cm4gdGVtcGxhdGUuYXN0IGlzIEludGVycG9sYXRlZEV4cHJlc3Npb247Cn0KCi8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbdGVtcGxhdGVdIHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBhIFR5cGVFcnJvciBpZiB0aGUgZmlyc3QKLy8vIHBsYWNlaG9sZGVyIGlzIGBudWxsYCBvciBgdW5kZWZpbmVkYC4KYm9vbCBpc051bGxHdWFyZE9uRmlyc3RBcmd1bWVudChUZW1wbGF0ZSB0ZW1wbGF0ZSkgewogIC8vIFdlIGxvb2sgZm9yIGEgdGVtcGxhdGUgb2YgdGhlIGZvcm0KICAvLwogIC8vICAgICAjLnNvbWV0aGluZwogIC8vICAgICAjLnNvbWV0aGluZygpCiAgLy8KICBOb2RlIG5vZGUgPSB0ZW1wbGF0ZS5hc3Q7CiAgaWYgKG5vZGUgaXMgQ2FsbCkgewogICAgQ2FsbCBjYWxsID0gbm9kZTsKICAgIG5vZGUgPSBjYWxsLnRhcmdldDsKICB9CiAgaWYgKG5vZGUgaXMgUHJvcGVydHlBY2Nlc3MpIHsKICAgIFByb3BlcnR5QWNjZXNzIGFjY2VzcyA9IG5vZGU7CiAgICBpZiAoYWNjZXNzLnJlY2VpdmVyIGlzIEludGVycG9sYXRlZEV4cHJlc3Npb24pIHsKICAgICAgSW50ZXJwb2xhdGVkRXhwcmVzc2lvbiBob2xlID0gYWNjZXNzLnJlY2VpdmVyOwogICAgICByZXR1cm4gaG9sZS5pc1Bvc2l0aW9uYWwgJiYgaG9sZS5uYW1lT3JQb3NpdGlvbiA9PSAwOwogICAgfQogIH0KICByZXR1cm4gZmFsc2U7Cn0KgMYATk48AQwBJQEZGi4xIQElGAEeJSpLO0UwNyksLTMXHAIBSEMbKktFQDcpKzoxMywtLDszFzcUAgFOHh4zASRAAQwfLgQBDB0bGwQBDDEtPwQBDBFMSiY8BAIBRSQuJQIBSxMgGQIBTSkMGSAyHggyGw0dBgQBNAIBOScCAUxLCgRKSEQTIh4gAQwvAUsGTUwvSwEfIlAdKyk2OE4eDAoILwYbBAEMJgIBTkYtMQIBUCo1KAUVFwUcFhYYBCAiNTU8BgQQAgEfcGFja2FnZTpjb21waWxlci9zcmMvanMvanMuZGFydDNzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL25hbWVyLmRhcnTAAYl6Ly8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5uYW1lcjsKCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJyBzaG93IEhhc2hNYXA7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JwogICAgc2hvdyAkMCwgJDksICRBLCAkWiwgJF8sICRhLCAkZywgJHMsICR6OwoKaW1wb3J0ICdwYWNrYWdlOmpzX3J1bnRpbWUvc2hhcmVkL2VtYmVkZGVkX25hbWVzLmRhcnQnIHNob3cgSnNHZXROYW1lOwoKaW1wb3J0ICcuLi9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vY29kZWdlbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBJZGVudGlmaWVycywgTmFtZXMsIFNlbGVjdG9yczsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBKRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgQ29tbW9uRWxlbWVudHMsIEVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9kaWFnbm9zdGljcy9pbnZhcmlhbnQuZGFydCcgc2hvdyBERUJVR19NT0RFOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0eV91dGlscy5kYXJ0JyBhcyB1dGlsczsKaW1wb3J0ICcuLi9lbGVtZW50cy9qdW1wcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ZpZWxkX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlcy5kYXJ0JyBzaG93IFJ1bnRpbWVUeXBlVGFnczsKaW1wb3J0ICcuLi9qc19tb2RlbC9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRzLmRhcnQnIHNob3cgSkdlbmVyYXRvckJvZHk7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCcgc2hvdyBDYWxsU3RydWN0dXJlOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3IsIFNlbGVjdG9yS2luZDsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CmltcG9ydCAnbmF0aXZlX2RhdGEuZGFydCc7CgpwYXJ0ICdmaWVsZF9uYW1pbmdfbWl4aW4uZGFydCc7CnBhcnQgJ2ZyZXF1ZW5jeV9uYW1lci5kYXJ0JzsKcGFydCAnbWluaWZ5X25hbWVyLmRhcnQnOwpwYXJ0ICduYW1lcl9uYW1lcy5kYXJ0JzsKCi8vLyBBc3NpZ25zIEphdmFTY3JpcHQgaWRlbnRpZmllcnMgdG8gRGFydCB2YXJpYWJsZXMsIGNsYXNzLW5hbWVzIGFuZCBtZW1iZXJzLgovLy8KLy8vIE5hbWVzIGFyZSBnZW5lcmF0ZWQgdGhyb3VnaCB0aHJlZSBzdGFnZXM6Ci8vLwovLy8gMS4gT3JpZ2luYWwgbmFtZXMgYW5kIHByb3Bvc2VkIG5hbWVzCi8vLyAyLiBEaXNhbWJpZ3VhdGVkIG5hbWVzIChhbHNvIGtub3duIGFzICJtYW5nbGVkIG5hbWVzIikKLy8vIDMuIEFubm90YXRlZCBuYW1lcwovLy8KLy8vIE9yaWdpbmFsIG5hbWVzIGFyZSBuYW1lcyB0YWtlbiBkaXJlY3RseSBmcm9tIHRoZSBpbnB1dC4KLy8vCi8vLyBQcm9wb3NlZCBuYW1lcyBhcmUgZWl0aGVyIG9yaWdpbmFsIG5hbWVzIG9yIHN5bnRoZXNpemVkIG5hbWVzIGZvciBpbnB1dAovLy8gZWxlbWVudHMgdGhhdCBkbyBub3QgaGF2ZSBvcmlnaW5hbCBuYW1lcy4KLy8vCi8vLyBEaXNhbWJpZ3VhdGVkIG5hbWVzIGFyZSBkZXJpdmVkIGZyb20gdGhlIGFib3ZlLCBidXQgYXJlIG1hbmdsZWQgdG8gZW5zdXJlCi8vLyB1bmlxdWVuZXNzIHdpdGhpbiBzb21lIG5hbWVzcGFjZSAoZS5nLiBhcyBmaWVsZHMgb24gdGhlIHNhbWUgSlMgb2JqZWN0KS4KLy8vIEluIFtNaW5pZnlOYW1lcl0sIGRpc2FtYmlndWF0ZWQgbmFtZXMgYXJlIGFsc28gbWluaWZpZWQuCi8vLwovLy8gQW5ub3RhdGVkIG5hbWVzIGFyZSBuYW1lcyBnZW5lcmF0ZWQgZnJvbSBhIGRpc2FtYmlndWF0ZWQgbmFtZS4gQW5ub3RhdGVkCi8vLyBuYW1lcyBtdXN0IGJlIGNvbXB1dGFibGUgYXQgcnVudGltZSBieSBwcmVmaXhpbmcvc3VmZml4aW5nIGNvbnN0YW50IHN0cmluZ3MKLy8vIG9udG8gdGhlIGRpc2FtYmlndWF0ZWQgbmFtZS4KLy8vCi8vLyBGb3IgZXhhbXBsZSwgc29tZSBlbnRpdHkgY2FsbGVkIGB4YCBtaWdodCBiZSBhc3NvY2lhdGVkIHdpdGggdGhlc2UgbmFtZXM6Ci8vLwovLy8gICAgIE9yaWdpbmFsIG5hbWU6IGB4YAovLy8KLy8vICAgICBEaXNhbWJpZ3VhdGVkIG5hbWU6IGB4MWAgKGlmIHNvbWV0aGluZyBlbHNlIHdhcyBjYWxsZWQgYHhgKQovLy8KLy8vICAgICBBbm5vdGF0ZWQgbmFtZXM6IGB4MWAgICAgIChmaWVsZCBuYW1lKQovLy8gICAgICAgICAgICAgICAgICAgICAgYGdldCR4MWAgKGdldHRlciBuYW1lKQovLy8gICAgICAgICAgICAgICAgICAgICAgYHNldCR4MWAgKHNldHRlciBuYW1lKQovLy8KLy8vIFRoZSBbTmFtZXJdIGNhbiBjaG9vc2UgdGhlIGRpc2FtYmlndWF0ZWQgbmFtZXMsIGFuZCB0byBzb21lIGRlZ3JlZSB0aGUKLy8vIHByZWZpeC9zdWZmaXggY29uc3RhbnRzIHVzZWQgdG8gY29uc3RydWN0IGFubm90YXRlZCBuYW1lcy4gSXQgY2Fubm90IGNob29zZQovLy8gYW5ub3RhdGVkIG5hbWVzIHdpdGggdG90YWwgZnJlZWRvbSwgZm9yIGV4YW1wbGUsIGl0IGNhbm5vdCBjaG9vc2UgdGhhdCB0aGUKLy8vIGdldHRlciBmb3IgYHgxYCBzaG91bGQgYmUgY2FsbGVkIGBnZXRYYCAtLSB0aGUgYW5ub3RhdGVkIG5hbWVzIGFyZSBhbHdheXMKLy8vIGJ1aWx0IGJ5IGNvbmNhdGVuYXRpb24uCi8vLwovLy8gRGlzYW1iaWd1YXRlZCBuYW1lcyBtdXN0IGJlIGNob3NlbiBzdWNoIHRoYXQgbm9uZSBvZiB0aGUgYW5ub3RhdGVkIG5hbWVzIGNhbgovLy8gY2xhc2ggd2l0aCBlYWNoIG90aGVyLiBUaGlzIG1heSBoYXBwZW4gZXZlbiBpZiB0aGUgZGlzYW1iaWd1YXRlZCBuYW1lcyBhcmUKLy8vIGRpc3RpbmN0LCBmb3IgZXhhbXBsZSwgc3VwcG9zZSBhIGZpZWxkIGB4YCBhbmQgYGdldCR4YCBleGlzdHMgaW4gdGhlIGlucHV0OgovLy8KLy8vICAgICBPcmlnaW5hbCBuYW1lczogYHhgIGFuZCBgZ2V0JHhgCi8vLwovLy8gICAgIERpc2FtYmlndWF0ZWQgbmFtZXM6IGB4YCBhbmQgYGdldCR4YCAodGhlIHR3byBuYW1lcyBhIGRpZmZlcmVudCkKLy8vCi8vLyAgICAgQW5ub3RhdGVkIG5hbWVzOiBgeGAgKGZpZWxkIGZvciBgeGApCi8vLyAgICAgICAgICAgICAgICAgICAgICBgZ2V0JHhgIChnZXR0ZXIgZm9yIGB4YCkKLy8vICAgICAgICAgICAgICAgICAgICAgIGBnZXQkeGAgKGZpZWxkIGZvciBgZ2V0JHhgKQovLy8gICAgICAgICAgICAgICAgICAgICAgYGdldCRnZXQkeGAgKGdldHRlciBmb3IgYGdldCR4YCkKLy8vCi8vLyBUaGUgZ2V0dGVyIGZvciBgeGAgY2xhc2hlcyB3aXRoIHRoZSBmaWVsZCBuYW1lIGZvciBgZ2V0JHhgLCBzbyB0aGUKLy8vIGRpc2FtYmlndWF0ZWQgbmFtZXMgYXJlIGludmFsaWQuCi8vLwovLy8gQWRkaXRpb25hbGx5LCBkaXNhbWJpZ3VhdGVkIG5hbWVzIG11c3QgYmUgY2hvc2VuIHN1Y2ggdGhhdCBhbGwgYW5ub3RhdGVkCi8vLyBuYW1lcyBhcmUgdmFsaWQgSmF2YVNjcmlwdCBpZGVudGlmaWVycyBhbmQgZG8gbm90IGNvaW5jaWRlIHdpdGggYSBuYXRpdmUKLy8vIEphdmFTY3JpcHQgcHJvcGVydHkgc3VjaCBhcyBgX19wcm90b19fYC4KLy8vCi8vLyBUaGUgZm9sbG93aW5nIGFubm90YXRlZCBuYW1lcyBhcmUgZ2VuZXJhdGVkIGZvciBpbnN0YW5jZSBtZW1iZXJzLCB3aGVyZQovLy8gPE5BTUU+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/PQogICAgICAgIF9nbG9iYWxOYW1lRm9ySW50ZXJmYWNlVHlwZVZhcmlhYmxlKGVsZW1lbnQpOwogIH0KCiAganNBc3QuTmFtZSBfZ2xvYmFsTmFtZUZvckludGVyZmFjZVR5cGVWYXJpYWJsZShUeXBlVmFyaWFibGVFbnRpdHkgZWxlbWVudCkgewogICAgLy8gQ29uc3RydWN0IGEgbmFtZSBmcm9tIHRoZSBjbGFzcyBuYW1lIGFuZCB0eXBlIHZhcmlhYmxlLAogICAgLy8gZS5nLiAiTGlzdE1peGluLkUiLiBUaGUgY2xhc3MgbmFtZSBpcyB1bmlxdWUgd2hpY2ggZW5zdXJlcyB0aGUgdHlwZQogICAgLy8gdmFyaWFibGUgbmFtZSBpcyB1bmlxdWUuCiAgICAvLwogICAgLy8gVE9ETyhzcmEpOiBCZXR0ZXIgbWluaWZpZWQgbmFtaW5nLiBUeXBlIHZhcmlhYmxlIG5hbWVzIGFyZSB1c2VkIGluIHR5cGUKICAgIC8vIHJlY2lwZXMgYW5kIG11c3QgY29udGFpbiBhIHBlcmlvZCAoJy4nKS4gVGhleSBjYW4gYmUgZnJlcXVlbmN5LWFzc2lnbmVkCiAgICAvLyBpbmRlcGVuZGVudGx5IG9mIHRoZSBjbGFzcyBuYW1lLCBlLmcuICcuYScsICcuMicsICdhLicsIGV0Yy4KICAgIFN0cmluZyBuYW1lID0gZWxlbWVudC5uYW1lOwogICAgaWYgKG5hbWUubGVuZ3RoID4gMSkgbmFtZSA9ICcke2VsZW1lbnQuaW5kZXh9JzsgLy8gQXZvaWQgbG9uZyBuYW1lcyAocmFyZSkuCiAgICByZXR1cm4gQ29tcG91bmROYW1lKFsKICAgICAgZ2xvYmFsUHJvcGVydHlOYW1lRm9yQ2xhc3MoZWxlbWVudC50eXBlRGVjbGFyYXRpb24pLAogICAgICBTdHJpbmdCYWNrZWROYW1lKCcuJG5hbWUnKQogICAgXSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIGluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3MgPSBlbGVtZW50LmVuY2xvc2luZ0NsYXNzOwoKICAgIGlmIChfbmF0aXZlRGF0YS5oYXNGaXhlZEJhY2tlbmROYW1lKGVsZW1lbnQpKSB7CiAgICAgIHJldHVybiBuZXcgU3RyaW5nQmFja2VkTmFtZShfbmF0aXZlRGF0YS5nZXRGaXhlZEJhY2tlbmROYW1lKGVsZW1lbnQpKTsKICAgIH0KCiAgICAvLyBTb21lIGVsZW1lbnRzLCBsaWtlIGUuZy4gaW5zdGFuY2VzIG9mIEJveEZpZWxkRWxlbWVudCBhcmUgc3BlY2lhbC4KICAgIC8vIFRoZXkgYXJlIGNyZWF0ZWQgd2l0aCBhIHVuaXF1ZSBhbmQgc2FmZSBuYW1lIGZvciB0aGUgZWxlbWVudCBtb2RlbC4KICAgIC8vIFdoaWxlIHRoZWlyIG5hbWUgaXMgdW5pcXVlLCBpdCBpcyBub3QgdmVyeSByZWFkYWJsZS4gU28gd2UgdHJ5IHRvCiAgICAvLyBwcmVzZXJ2ZSB0aGUgb3JpZ2luYWwsIHByb3Bvc2VkIG5hbWUuCiAgICAvLyBIb3dldmVyLCBhcyBib3hlcyBhcmUgbm90IHJlYWxseSBpbnN0YW5jZXMgb2YgY2xhc3NlcywgdGhlIHVzdWFsIG5hbWluZwogICAgLy8gc2NoZW1lIHRoYXQgdHJpZXMgdG8gYXZvaWQgbmFtZSBjbGFzaGVzIHdpdGggc3VwZXIgY2xhc3NlcyBkb2VzIG5vdAogICAgLy8gYXBwbHkuIFNvIHdlIGNhbiBkaXJlY3RseSBncmFiIGEgbmFtZS4KICAgIGlmIChlbGVtZW50IGlzIEpTRW50aXR5KSB7CiAgICAgIHJldHVybiBfZGlzYW1iaWd1YXRlSW50ZXJuYWxNZW1iZXIoCiAgICAgICAgICBlbGVtZW50LCAoKSA9PiAoZWxlbWVudCBhcyBKU0VudGl0eSkuZGVjbGFyZWROYW1lKTsKICAgIH0KCiAgICAvLyBJZiB0aGUgbmFtZSBvZiB0aGUgZmllbGQgbWlnaHQgY2xhc2ggd2l0aCBhbm90aGVyIGZpZWxkLAogICAgLy8gdXNlIGEgbWFuZ2xlZCBmaWVsZCBuYW1lIHRvIGF2b2lkIHBvdGVudGlhbCBjbGFzaGVzLgogICAgLy8gTm90ZSB0aGF0IGlmIHRoZSBjbGFzcyBleHRlbmRzIGEgbmF0aXZlIGNsYXNzLCB0aGF0IG5hdGl2ZSBjbGFzcyBtaWdodAogICAgLy8gaGF2ZSBmaWVsZHMgd2l0aCBmaXhlZCBiYWNrZW5kIG5hbWVzLCBzbyB3ZSBhc3N1bWUgdGhlIHdvcnN0IGFuZCBhbHdheXMKICAgIC8vIG1hbmdsZSB0aGUgZmllbGQgbmFtZXMgb2YgY2xhc3NlcyBleHRlbmRpbmcgbmF0aXZlIGNsYXNzZXMuCiAgICAvLyBNZXRob2RzIG9uIHN1Y2ggY2xhc3NlcyBhcmUgc3RvcmVkIG9uIHRoZSBpbnRlcmNlcHRvciwgbm90IHRoZSBpbnN0YW5jZSwKICAgIC8vIHNvIG9ubHkgZmllbGRzIGhhdmUgdGhlIHBvdGVudGlhbCB0byBjbGFzaCB3aXRoIGEgbmF0aXZlIHByb3BlcnR5IG5hbWUuCiAgICBpZiAoX2Nsb3NlZFdvcmxkLmlzVXNlZEFzTWl4aW4oZW5jbG9zaW5nQ2xhc3MpIHx8CiAgICAgICAgX2lzU2hhZG93aW5nU3VwZXJGaWVsZChlbGVtZW50KSB8fAogICAgICAgIF9pc1VzZXJDbGFzc0V4dGVuZGluZ05hdGl2ZShlbmNsb3NpbmdDbGFzcykpIHsKICAgICAgU3RyaW5nIHByb3Bvc2VOYW1lKCkgPT4gJyR7ZW5jbG9zaW5nQ2xhc3MubmFtZX1fJHtlbGVtZW50Lm5hbWV9JzsKICAgICAgcmV0dXJuIF9kaXNhbWJpZ3VhdGVJbnRlcm5hbE1lbWJlcihlbGVtZW50LCBwcm9wb3NlTmFtZSk7CiAgICB9CgogICAgLy8gTm8gc3VwZXJjbGFzcyB1c2VzIHRoZSBkaXNhbWJpZ3VhdGVkIG5hbWUgYXMgYSBwcm9wZXJ0eSBuYW1lLCBzbyB3ZSBjYW4KICAgIC8vIHVzZSBpdCBmb3IgdGhpcyBmaWVsZC4gVGhpcyBnZW5lcmF0ZXMgbmljZXIgZmllbGQgbmFtZXMgc2luY2Ugb3RoZXJ3aXNlCiAgICAvLyB0aGUgZmllbGQgbmFtZSB3b3VsZCBoYXZlIHRvIGJlIG1hbmdsZWQuCiAgICByZXR1cm4gX2Rpc2FtYmlndWF0ZU1lbWJlcihuZXcgTmFtZShlbGVtZW50Lm5hbWUsIGVsZW1lbnQubGlicmFyeSkpOwogIH0KCiAgYm9vbCBfaXNTaGFkb3dpbmdTdXBlckZpZWxkKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChlbGVtZW50LmlzRmllbGQpOwogICAgU3RyaW5nIGZpZWxkTmFtZSA9IGVsZW1lbnQubmFtZTsKICAgIGJvb2wgaXNQcml2YXRlID0gTmFtZS5pc1ByaXZhdGVOYW1lKGZpZWxkTmFtZSk7CiAgICBMaWJyYXJ5RW50aXR5IG1lbWJlckxpYnJhcnkgPSBlbGVtZW50LmxpYnJhcnk7CiAgICBDbGFzc0VudGl0eSBsb29rdXBDbGFzcyA9CiAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MpOwogICAgd2hpbGUgKGxvb2t1cENsYXNzICE9IG51bGwpIHsKICAgICAgTWVtYmVyRW50aXR5IGZvdW5kTWVtYmVyID0KICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQubG9va3VwTG9jYWxDbGFzc01lbWJlcihsb29rdXBDbGFzcywgZmllbGROYW1lKTsKICAgICAgaWYgKGZvdW5kTWVtYmVyICE9IG51bGwpIHsKICAgICAgICBpZiAoZm91bmRNZW1iZXIuaXNGaWVsZCkgewogICAgICAgICAgaWYgKCFpc1ByaXZhdGUgfHwgbWVtYmVyTGlicmFyeSA9PSBmb3VuZE1lbWJlci5saWJyYXJ5KSB7CiAgICAgICAgICAgIC8vIFByaXZhdGUgZmllbGRzIGNhbiBvbmx5IGJlIHNoYWRvd2VkIGJ5IGEgZmllbGQgZGVjbGFyZWQgaW4gdGhlCiAgICAgICAgICAgIC8vIHNhbWUgbGlicmFyeS4KICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGxvb2t1cENsYXNzID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGxvb2t1cENsYXNzKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBUcnVlIGlmIFtjbGFzc19dIGlzIGEgbm9uLW5hdGl2ZSBjbGFzcyB0aGF0IGluaGVyaXRzIGZyb20gYSBuYXRpdmUgY2xhc3MuCiAgYm9vbCBfaXNVc2VyQ2xhc3NFeHRlbmRpbmdOYXRpdmUoQ2xhc3NFbnRpdHkgY2xhc3NfKSB7CiAgICByZXR1cm4gIV9uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoY2xhc3NfKSAmJgogICAgICAgIF9uYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGNsYXNzXyk7CiAgfQoKICAvLy8gQW5ub3RhdGVkIG5hbWUgZm9yIHRoZSBzZXR0ZXIgb2YgW2VsZW1lbnRdLgogIGpzQXN0Lk5hbWUgc2V0dGVyRm9yTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAvLyBXZSBkeW5hbWljYWxseSBjcmVhdGUgc2V0dGVycyBmcm9tIHRoZSBmaWVsZC1uYW1lLiBUaGUgc2V0dGVyIG5hbWUgbXVzdAogICAgLy8gdGhlcmVmb3JlIGJlIGRlcml2ZWQgZnJvbSB0aGUgaW5zdGFuY2UgZmllbGQtbmFtZS4KICAgIGpzQXN0Lk5hbWUgbmFtZSA9IF9kaXNhbWJpZ3VhdGVNZW1iZXIoZWxlbWVudC5tZW1iZXJOYW1lKTsKICAgIHJldHVybiBkZXJpdmVTZXR0ZXJOYW1lKG5hbWUpOwogIH0KCiAgLy8vIEFubm90YXRlZCBuYW1lIGZvciB0aGUgc2V0dGVyIG9mIGFueSBtZW1iZXIgd2l0aCBbZGlzYW1iaWd1YXRlZE5hbWVdLgogIGpzQXN0Lk5hbWUgZGVyaXZlU2V0dGVyTmFtZShqc0FzdC5OYW1lIGRpc2FtYmlndWF0ZWROYW1lKSB7CiAgICAvLyBXZSBkeW5hbWljYWxseSBjcmVhdGUgc2V0dGVycyBmcm9tIHRoZSBmaWVsZC1uYW1lLiBUaGUgc2V0dGVyIG5hbWUgbXVzdAogICAgLy8gdGhlcmVmb3JlIGJlIGRlcml2ZWQgZnJvbSB0aGUgaW5zdGFuY2UgZmllbGQtbmFtZS4KICAgIHJldHVybiB1c2VyU2V0dGVyc1tkaXNhbWJpZ3VhdGVkTmFtZV0gPz89CiAgICAgICAgbmV3IFNldHRlck5hbWUoX2xpdGVyYWxTZXR0ZXJQcmVmaXgsIGRpc2FtYmlndWF0ZWROYW1lKTsKICB9CgogIC8vLyBBbm5vdGF0ZWQgbmFtZSBmb3IgdGhlIHNldHRlciBvZiBhbnkgbWVtYmVyIHdpdGggW2Rpc2FtYmlndWF0ZWROYW1lXS4KICBqc0FzdC5OYW1lIGRlcml2ZUdldHRlck5hbWUoanNBc3QuTmFtZSBkaXNhbWJpZ3VhdGVkTmFtZSkgewogICAgLy8gV2UgZHluYW1pY2FsbHkgY3JlYXRlIGdldHRlcnMgZnJvbSB0aGUgZmllbGQtbmFtZS4gVGhlIGdldHRlciBuYW1lIG11c3QKICAgIC8vIHRoZXJlZm9yZSBiZSBkZXJpdmVkIGZyb20gdGhlIGluc3RhbmNlIGZpZWxkLW5hbWUuCiAgICByZXR1cm4gdXNlckdldHRlcnNbZGlzYW1iaWd1YXRlZE5hbWVdID8/PQogICAgICAgIG5ldyBHZXR0ZXJOYW1lKF9saXRlcmFsR2V0dGVyUHJlZml4LCBkaXNhbWJpZ3VhdGVkTmFtZSk7CiAgfQoKICAvLy8gQW5ub3RhdGVkIG5hbWUgZm9yIHRoZSBnZXR0ZXIgb2YgW2VsZW1lbnRdLgogIGpzQXN0Lk5hbWUgZ2V0dGVyRm9yRWxlbWVudChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgLy8gV2UgZHluYW1pY2FsbHkgY3JlYXRlIGdldHRlcnMgZnJvbSB0aGUgZmllbGQtbmFtZS4gVGhlIGdldHRlciBuYW1lIG11c3QKICAgIC8vIHRoZXJlZm9yZSBiZSBkZXJpdmVkIGZyb20gdGhlIGluc3RhbmNlIGZpZWxkLW5hbWUuCiAgICBqc0FzdC5OYW1lIG5hbWUgPSBfZGlzYW1iaWd1YXRlTWVtYmVyKGVsZW1lbnQubWVtYmVyTmFtZSk7CiAgICByZXR1cm4gZGVyaXZlR2V0dGVyTmFtZShuYW1lKTsKICB9CgogIC8vLyBQcm9wZXJ0eSBuYW1lIGZvciB0aGUgZ2V0dGVyIG9mIGFuIGluc3RhbmNlIG1lbWJlciB3aXRoIFtvcmlnaW5hbE5hbWVdLgogIGpzQXN0Lk5hbWUgZ2V0dGVyRm9yTWVtYmVyKE5hbWUgb3JpZ2luYWxOYW1lKSB7CiAgICBqc0FzdC5OYW1lIGRpc2FtYmlndWF0ZWROYW1lID0gX2Rpc2FtYmlndWF0ZU1lbWJlcihvcmlnaW5hbE5hbWUpOwogICAgcmV0dXJuIGRlcml2ZUdldHRlck5hbWUoZGlzYW1iaWd1YXRlZE5hbWUpOwogIH0KCiAgLy8vIERpc2FtYmlndWF0ZWQgbmFtZSBmb3IgYSBjb21waWxlci1vd25lZCBnbG9iYWwgdmFyaWFibGUuCiAgLy8vCiAgLy8vIFRoZSByZXN1bHRpbmcgbmFtZSBpcyB1bmlxdWUgd2l0aGluIHRoZSBnbG9iYWwtbWVtYmVyIG5hbWVzcGFjZS4KICBqc0FzdC5OYW1lIF9kaXNhbWJpZ3VhdGVJbnRlcm5hbEdsb2JhbChTdHJpbmcgbmFtZSkgewogICAganNBc3QuTmFtZSBuZXdOYW1lID0gaW50ZXJuYWxHbG9iYWxzW25hbWVdOwogICAgaWYgKG5ld05hbWUgPT0gbnVsbCkgewogICAgICBuZXdOYW1lID0gZ2V0RnJlc2hOYW1lKGdsb2JhbFNjb3BlLCBuYW1lKTsKICAgICAgaW50ZXJuYWxHbG9iYWxzW25hbWVdID0gbmV3TmFtZTsKICAgIH0KICAgIHJldHVybiBfbmV3UmVmZXJlbmNlKG5ld05hbWUpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHByb3BlcnR5IG5hbWUgdG8gdXNlIGZvciBhIGNvbXBpbGVyLW93bmVyIGdsb2JhbCB2YXJpYWJsZSwKICAvLy8gaS5lLiBvbmUgdGhhdCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueSBlbGVtZW50IGJ1dCBpcyB1c2VkIGFzIGEgdXRpbGl0eQogIC8vLyBnbG9iYWwgYnkgY29kZSBnZW5lcmF0aW9uLgogIC8vLwogIC8vLyBbbmFtZV0gZnVuY3Rpb25zIGFzIGJvdGggdGhlIHByb3Bvc2VkIG5hbWUgZm9yIHRoZSBnbG9iYWwsIGFuZCBhcyBhIGtleQogIC8vLyBpZGVudGlmeWluZyB0aGUgZ2xvYmFsLiBUaGUgW25hbWVdIG11c3Qgbm90IGNvbnRhaW4gYCRgIHN5bWJvbHMsIHNpbmNlCiAgLy8vIHRoZSBbTmFtZXJdIHVzZXMgdGhvc2UgbmFtZXMgaW50ZXJuYWxseS4KICAvLy8KICAvLy8gVGhpcyBwcm92aWRlcyBhbiBlYXN5IG1lY2hhbmlzbSBvZiBhdm9pZGluZyBhIG5hbWUtY2xhc2ggd2l0aCB1c2VyLXNwYWNlCiAgLy8vIGdsb2JhbHMsIGFsdGhvdWdoIHRoZSBjYWxsZXJzIG9mIG11c3Qgc3RpbGwgdGFrZSBjYXJlIG5vdCB0byBhY2NpZGVudGFsbHkKICAvLy8gcGFzcyBpbiB0aGUgc2FtZSBbbmFtZV0gZm9yIHR3byBkaWZmZXJlbnQgaW50ZXJuYWwgZ2xvYmFscy4KICBqc0FzdC5OYW1lIGludGVybmFsR2xvYmFsKFN0cmluZyBuYW1lKSB7CiAgICBhc3NlcnQoIW5hbWUuY29udGFpbnMocickJykpOwogICAgcmV0dXJuIF9kaXNhbWJpZ3VhdGVJbnRlcm5hbEdsb2JhbChuYW1lKTsKICB9CgogIC8vLyBHZW5lcmF0ZXMgYSB1bmlxdWUga2V5IGZvciBbbGlicmFyeV0uCiAgLy8vCiAgLy8vIEtleXMgYXJlIG1lYW50IHRvIGJlIHVzZWQgaW4gbWFwcyBhbmQgc2hvdWxkIG5vdCBiZSB2aXNpYmxlIGluIHRoZSBvdXRwdXQuCiAgU3RyaW5nIF9nZW5lcmF0ZUxpYnJhcnlLZXkoTGlicmFyeUVudGl0eSBsaWJyYXJ5KSB7CiAgICByZXR1cm4gX2xpYnJhcnlLZXlzLnB1dElmQWJzZW50KGxpYnJhcnksICgpIHsKICAgICAgU3RyaW5nIGtleUJhc2UgPSBsaWJyYXJ5Lm5hbWU7CiAgICAgIGludCBjb3VudGVyID0gMDsKICAgICAgU3RyaW5nIGtleSA9IGtleUJhc2U7CiAgICAgIHdoaWxlIChfbGlicmFyeUtleXMudmFsdWVzLmNvbnRhaW5zKGtleSkpIHsKICAgICAgICBrZXkgPSAiJGtleUJhc2Uke2NvdW50ZXIrK30iOwogICAgICB9CiAgICAgIHJldHVybiBrZXk7CiAgICB9KTsKICB9CgogIGpzQXN0Lk5hbWUgX2Rpc2FtYmlndWF0ZUdsb2JhbE1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIF9kaXNhbWJpZ3VhdGVHbG9iYWw8TWVtYmVyRW50aXR5PigKICAgICAgICBlbGVtZW50LCBfcHJvcG9zZU5hbWVGb3JNZW1iZXIsIHVzZXJHbG9iYWxzKTsKICB9CgogIGpzQXN0Lk5hbWUgX2Rpc2FtYmlndWF0ZUdsb2JhbFR5cGUoRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBfZGlzYW1iaWd1YXRlR2xvYmFsKGVsZW1lbnQsIF9wcm9wb3NlTmFtZUZvclR5cGUsIHVzZXJHbG9iYWxzKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBkaXNhbWJpZ3VhdGVkIG5hbWUgZm9yIGEgdG9wLWxldmVsIG9yIHN0YXRpYyBlbGVtZW50LgogIC8vLwogIC8vLyBUaGUgcmVzdWx0aW5nIG5hbWUgaXMgdW5pcXVlIHdpdGhpbiB0aGUgZ2xvYmFsLW1lbWJlciBuYW1lc3BhY2UuCiAganNBc3QuTmFtZSBfZGlzYW1iaWd1YXRlR2xvYmFsPFQgZXh0ZW5kcyBFbnRpdHk+KFQgZWxlbWVudCwKICAgICAgU3RyaW5nIHByb3Bvc2VOYW1lKFQgZWxlbWVudCksIE1hcDxFbnRpdHksIGpzQXN0Lk5hbWU+IGdsb2JhbHMpIHsKICAgIC8vIFRPRE8oYXNnZXJmKTogV2UgY2FuIHJldXNlIG1vcmUgc2hvcnQgbmFtZXMgaWYgd2UgZGlzYW1iaWd1YXRlIHdpdGgKICAgIC8vIGEgc2VwYXJhdGUgbmFtZXNwYWNlIGZvciBlYWNoIG9mIHRoZSBnbG9iYWwgaG9sZGVyIG9iamVjdHMuCiAgICBqc0FzdC5OYW1lIG5ld05hbWUgPSBnbG9iYWxzW2VsZW1lbnRdOwogICAgaWYgKG5ld05hbWUgPT0gbnVsbCkgewogICAgICBTdHJpbmcgcHJvcG9zZWROYW1lID0gcHJvcG9zZU5hbWUoZWxlbWVudCk7CiAgICAgIG5ld05hbWUgPSBnZXRGcmVzaE5hbWUoZ2xvYmFsU2NvcGUsIHByb3Bvc2VkTmFtZSk7CiAgICAgIGdsb2JhbHNbZWxlbWVudF0gPSBuZXdOYW1lOwogICAgfQogICAgcmV0dXJuIF9uZXdSZWZlcmVuY2UobmV3TmFtZSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgZGlzYW1iaWd1YXRlZCBuYW1lIGZvciBhbiBpbnN0YW5jZSBtZXRob2Qgb3IgZmllbGQKICAvLy8gd2l0aCBbb3JpZ2luYWxOYW1lXSBpbiBbbGlicmFyeV0uCiAgLy8vCiAgLy8vIFtsaWJyYXJ5XSBtYXkgYmUgYG51bGxgIGlmIFtvcmlnaW5hbE5hbWVdIGlzIGtub3duIHRvIGJlIHB1YmxpYy4KICAvLy8KICAvLy8gVGhpcyBpcyB0aGUgbmFtZSB1c2VkIGZvciBkZXJpdmluZyBwcm9wZXJ0eSBuYW1lcyBvZiBhY2Nlc3NvcnMgKGdldHRlcnMKICAvLy8gYW5kIHNldHRlcnMpIGFuZCBhcyBwcm9wZXJ0eSBuYW1lIGZvciBzdG9yaW5nIG1ldGhvZHMgYW5kIG1ldGhvZCBzdHVicy4KICAvLy8KICAvLy8gW3N1ZmZpeGVzXSBkZW5vdGUgYW4gZXh0ZW5zaW9uIG9mIFtvcmlnaW5hbE5hbWVdIHRvIGRpc3Rpbmd1aXNoIGl0IGZyb20KICAvLy8gb3RoZXIgbWVtYmVycyB3aXRoIHRoYXQgbmFtZS4gVGhlc2UgYXJlIHVzZWQgdG8gZW5jb2RlIHRoZSBhcml0eSBhbmQKICAvLy8gbmFtZWQgcGFyYW1ldGVycyB0byBhIG1ldGhvZC4gRGlzYW1iaWd1YXRpbmcgdGhlIHNhbWUgW29yaWdpbmFsTmFtZV0gd2l0aAogIC8vLyBkaWZmZXJlbnQgW3N1ZmZpeGVzXSB3aWxsIHlpZWxkIGRpZmZlcmVudCBkaXNhbWJpZ3VhdGVkIG5hbWVzLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0aW5nIG5hbWUsIGFuZCBpdHMgYXNzb2NpYXRlZCBhbm5vdGF0ZWQgbmFtZXMsIGFyZSB1bmlxdWUKICAvLy8gdG8gdGhlIChbb3JpZ2luYWxOYW1lXSwgW3N1ZmZpeGVzXSkgcGFpciB3aXRoaW4gdGhlIGluc3RhbmNlLW1lbWJlcgogIC8vLyBuYW1lc3BhY2UuCiAganNBc3QuTmFtZSBfZGlzYW1iaWd1YXRlTWVtYmVyKE5hbWUgb3JpZ2luYWxOYW1lLAogICAgICBbTGlzdDxTdHJpbmc+IHN1ZmZpeGVzID0gY29uc3QgW11dKSB7CiAgICAvLyBCdWlsZCBhIHN0cmluZyBlbmNvZGluZyB0aGUgbGlicmFyeSBuYW1lLCBpZiB0aGUgbmFtZSBpcyBwcml2YXRlLgogICAgU3RyaW5nIGxpYnJhcnlLZXkgPQogICAgICAgIG9yaWdpbmFsTmFtZS5pc1ByaXZhdGUgPyBfZ2VuZXJhdGVMaWJyYXJ5S2V5KG9yaWdpbmFsTmFtZS5saWJyYXJ5KSA6ICcnOwoKICAgIC8vIEluIHRoZSB1bmlxdWUga2V5LCBzZXBhcmF0ZSB0aGUgbmFtZSBwYXJ0cyBieSAnQCcuCiAgICAvLyBUaGlzIGF2b2lkcyBjbGFzaGVzIHNpbmNlIHRoZSBvcmlnaW5hbCBuYW1lcyBjYW5ub3QgY29udGFpbiB0aGF0IHN5bWJvbC4KICAgIFN0cmluZyBrZXkgPSAnJGxpYnJhcnlLZXlAJHtvcmlnaW5hbE5hbWUudGV4dH1AJHtzdWZmaXhlcy5qb2luKCdAJyl9JzsKICAgIGpzQXN0Lk5hbWUgbmV3TmFtZSA9IHVzZXJJbnN0YW5jZU1lbWJlcnNba2V5XTsKICAgIGlmIChuZXdOYW1lID09IG51bGwpIHsKICAgICAgU3RyaW5nIHByb3Bvc2VkTmFtZSA9IHByaXZhdGVOYW1lKG9yaWdpbmFsTmFtZSk7CiAgICAgIGlmICghc3VmZml4ZXMuaXNFbXB0eSkgewogICAgICAgIC8vIEluIHRoZSBwcm9wb3NlZCBuYW1lLCBzZXBhcmF0ZSB0aGUgbmFtZSBwYXJ0cyBieSAnJCcsIGJlY2F1c2UgdGhlCiAgICAgICAgLy8gcHJvcG9zZWQgbmFtZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllciwgYnV0IG5vdCBuZWNlc3NhcmlseSB1bmlxdWUuCiAgICAgICAgcHJvcG9zZWROYW1lICs9IHInJCcgKyBzdWZmaXhlcy5qb2luKHInJCcpOwogICAgICB9CiAgICAgIG5ld05hbWUgPSBnZXRGcmVzaE5hbWUoaW5zdGFuY2VTY29wZSwgcHJvcG9zZWROYW1lLAogICAgICAgICAgc2FuaXRpemVGb3JBbm5vdGF0aW9uczogdHJ1ZSk7CiAgICAgIHVzZXJJbnN0YW5jZU1lbWJlcnNba2V5XSA9IG5ld05hbWU7CiAgICAgIHVzZXJJbnN0YW5jZU1lbWJlcnNPcmlnaW5hbE5hbWVba2V5XSA9ICckb3JpZ2luYWxOYW1lJzsKICAgIH0KICAgIHJldHVybiBfbmV3UmVmZXJlbmNlKG5ld05hbWUpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGRpc2FtYmlndWF0ZWQgbmFtZSBmb3IgdGhlIGluc3RhbmNlIG1lbWJlciBpZGVudGlmaWVkIGJ5CiAgLy8vIFtrZXldLgogIC8vLwogIC8vLyBXaGVuIGEgbmFtZSBmb3IgYW4gZWxlbWVudCBpcyByZXF1ZXN0ZWQgYnkga2V5LCBpdCBtYXkgbm90IGJlIHJlcXVlc3RlZAogIC8vLyBieSBlbGVtZW50IGF0IHRoZSBzYW1lIHRpbWUsIGFzIHR3byBkaWZmZXJlbnQgbmFtZXMgd291bGQgYmUgcmV0dXJuZWQuCiAgLy8vCiAgLy8vIElmIGtleSBoYXMgbm90IHlldCBiZWVuIHJlZ2lzdGVyZWQsIFtwcm9wb3NlTmFtZV0gaXMgdXNlZCB0byBnZW5lcmF0ZQogIC8vLyBhIG5hbWUgcHJvcG9zYWwgZm9yIHRoZSBnaXZlbiBrZXkuCiAgLy8vCiAgLy8vIFtrZXldIG11c3Qgbm90IGNsYXNoIHdpdGggdmFsaWQgaW5zdGFuY2UgbmFtZXMuIFRoaXMgaXMgdHlwaWNhbGx5CiAgLy8vIGFjaGlldmVkIGJ5IHVzaW5nIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgaW4gW2tleV0gdGhhdCBpcyBub3QgdmFsaWQgaW4KICAvLy8gaWRlbnRpZmllcnMsIGZvciBleGFtcGxlIHRoZSBAIHN5bWJvbC4KICBqc0FzdC5OYW1lIF9kaXNhbWJpZ3VhdGVNZW1iZXJCeUtleShTdHJpbmcga2V5LCBTdHJpbmcgcHJvcG9zZU5hbWUoKSkgewogICAganNBc3QuTmFtZSBuZXdOYW1lID0gdXNlckluc3RhbmNlTWVtYmVyc1trZXldOwogICAgaWYgKG5ld05hbWUgPT0gbnVsbCkgewogICAgICBTdHJpbmcgbmFtZSA9IHByb3Bvc2VOYW1lKCk7CiAgICAgIG5ld05hbWUgPSBnZXRGcmVzaE5hbWUoaW5zdGFuY2VTY29wZSwgbmFtZSwgc2FuaXRpemVGb3JBbm5vdGF0aW9uczogdHJ1ZSk7CiAgICAgIHVzZXJJbnN0YW5jZU1lbWJlcnNba2V5XSA9IG5ld05hbWU7CiAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IGNvbnNpZGVyIHBsdW1iaW5nIHRoZSBvcmlnaW5hbCBuYW1lIGluc3RlYWQuCiAgICAgIHVzZXJJbnN0YW5jZU1lbWJlcnNPcmlnaW5hbE5hbWVba2V5XSA9IG5hbWU7CiAgICB9CiAgICByZXR1cm4gX25ld1JlZmVyZW5jZShuZXdOYW1lKTsKICB9CgogIC8vLyBGb3JjZXMgdGhlIHB1YmxpYyBpbnN0YW5jZSBtZW1iZXIgd2l0aCBbb3JpZ2luYWxOYW1lXSB0byBoYXZlIHRoZSBnaXZlbgogIC8vLyBbZGlzYW1iaWd1YXRlZE5hbWVdLgogIC8vLwogIC8vLyBUaGUgW29yaWdpbmFsTmFtZV0gbXVzdCBub3QgaGF2ZSBiZWVuIGRpc2FtYmlndWF0ZWQgYmVmb3JlLCBhbmQgdGhlCiAgLy8vIFtkaXNhbWJpZ3VhdGVkTmFtZV0gbXVzdCBub3QgaGF2ZSBiZWVuIHVzZWQuCiAgLy8vCiAgLy8vIFVzaW5nIFtfZGlzYW1iaWd1YXRlTWVtYmVyXSB3aXRoIHRoZSBnaXZlbiBbb3JpZ2luYWxOYW1lXSBhbmQgbm8gc3VmZml4ZXMKICAvLy8gd2lsbCBzdWJzZXF1ZW50bHkgcmV0dXJuIFtkaXNhbWJpZ3VhdGVkTmFtZV0uCiAgdm9pZCByZXNlcnZlUHVibGljTWVtYmVyTmFtZShTdHJpbmcgb3JpZ2luYWxOYW1lLCBTdHJpbmcgZGlzYW1iaWd1YXRlZE5hbWUpIHsKICAgIC8vIEJ1aWxkIGEga2V5IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIG9uZSBidWlsdCBpbiBkaXNhbWJpZ3VhdGVNZW1iZXIuCiAgICBTdHJpbmcgbGlicmFyeVByZWZpeCA9ICcnOyAvLyBQdWJsaWMgbmFtZXMgaGF2ZSBhbiBlbXB0eSBsaWJyYXJ5IHByZWZpeC4KICAgIFN0cmluZyBzdWZmaXggPSAnJzsgLy8gV2UgZG9uJ3QgbmVlZCBhbnkgc3VmZml4ZXMuCiAgICBTdHJpbmcga2V5ID0gJyRsaWJyYXJ5UHJlZml4QCRvcmlnaW5hbE5hbWVAJHN1ZmZpeCc7CiAgICBhc3NlcnQoIXVzZXJJbnN0YW5jZU1lbWJlcnMuY29udGFpbnNLZXkoa2V5KSk7CiAgICBhc3NlcnQoIWluc3RhbmNlU2NvcGUuaXNVc2VkKGRpc2FtYmlndWF0ZWROYW1lKSk7CiAgICB1c2VySW5zdGFuY2VNZW1iZXJzW2tleV0gPSBuZXcgU3RyaW5nQmFja2VkTmFtZShkaXNhbWJpZ3VhdGVkTmFtZSk7CiAgICB1c2VySW5zdGFuY2VNZW1iZXJzT3JpZ2luYWxOYW1lW2tleV0gPSBvcmlnaW5hbE5hbWU7CiAgICBpbnN0YW5jZVNjb3BlLnJlZ2lzdGVyVXNlKGRpc2FtYmlndWF0ZWROYW1lKTsKICB9CgogIC8vLyBEaXNhbWJpZ3VhdGVkIG5hbWUgdW5pcXVlIHRvIFtlbGVtZW50XS4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIGFzIHRoZSBwcm9wZXJ0eSBuYW1lIGZvciBmaWVsZHMsIHR5cGUgdmFyaWFibGVzLAogIC8vLyBjb25zdHJ1Y3RvciBib2RpZXMsIGFuZCBzdXBlci1hY2Nlc3NvcnMuCiAgLy8vCiAgLy8vIFRoZSByZXN1bHRpbmcgbmFtZSBpcyB1bmlxdWUgd2l0aGluIHRoZSBpbnN0YW5jZS1tZW1iZXIgbmFtZXNwYWNlLgogIGpzQXN0Lk5hbWUgX2Rpc2FtYmlndWF0ZUludGVybmFsTWVtYmVyKAogICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCwgU3RyaW5nIHByb3Bvc2VOYW1lKCkpIHsKICAgIGpzQXN0Lk5hbWUgbmV3TmFtZSA9IGludGVybmFsSW5zdGFuY2VNZW1iZXJzW2VsZW1lbnRdOwogICAgaWYgKG5ld05hbWUgPT0gbnVsbCkgewogICAgICBTdHJpbmcgbmFtZSA9IHByb3Bvc2VOYW1lKCk7CgogICAgICBpZiAoZWxlbWVudCBpcyBQcml2YXRlbHlOYW1lZEpTRW50aXR5KSB7CiAgICAgICAgTmFtaW5nU2NvcGUgc2NvcGUgPSBfZ2V0UHJpdmF0ZVNjb3BlRm9yKGVsZW1lbnQpOwogICAgICAgIG5ld05hbWUgPSBnZXRGcmVzaE5hbWUoc2NvcGUsIG5hbWUsCiAgICAgICAgICAgIHNhbml0aXplRm9yQW5ub3RhdGlvbnM6IHRydWUsIHNhbml0aXplRm9yTmF0aXZlczogZmFsc2UpOwogICAgICAgIGludGVybmFsSW5zdGFuY2VNZW1iZXJzW2VsZW1lbnRdID0gbmV3TmFtZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBib29sIG1heUNsYXNoTmF0aXZlID0KICAgICAgICAgICAgX2lzVXNlckNsYXNzRXh0ZW5kaW5nTmF0aXZlKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MpOwogICAgICAgIG5ld05hbWUgPSBnZXRGcmVzaE5hbWUoaW5zdGFuY2VTY29wZSwgbmFtZSwKICAgICAgICAgICAgc2FuaXRpemVGb3JBbm5vdGF0aW9uczogdHJ1ZSwgc2FuaXRpemVGb3JOYXRpdmVzOiBtYXlDbGFzaE5hdGl2ZSk7CiAgICAgICAgaW50ZXJuYWxJbnN0YW5jZU1lbWJlcnNbZWxlbWVudF0gPSBuZXdOYW1lOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX25ld1JlZmVyZW5jZShuZXdOYW1lKTsKICB9CgogIC8vLyBEaXNhbWJpZ3VhdGVkIG5hbWUgZm9yIHRoZSBnaXZlbiBvcGVyYXRvci4KICAvLy8KICAvLy8gW29wZXJhdG9ySWRlbnRpZmllcl0gbXVzdCBiZSB0aGUgb3BlcmF0b3IncyBpZGVudGlmaWVyLCBlLmcuCiAgLy8vIGAkYWRkYCBhbmQgbm90IGArYC4KICAvLy8KICAvLy8gVGhlIHJlc3VsdGluZyBuYW1lIGlzIHVuaXF1ZSB3aXRoaW4gdGhlIGluc3RhbmNlLW1lbWJlciBuYW1lc3BhY2UuCiAganNBc3QuTmFtZSBfZGlzYW1iaWd1YXRlT3BlcmF0b3IoU3RyaW5nIG9wZXJhdG9ySWRlbnRpZmllcikgewogICAganNBc3QuTmFtZSBuZXdOYW1lID0gdXNlckluc3RhbmNlT3BlcmF0b3JzW29wZXJhdG9ySWRlbnRpZmllcl07CiAgICBpZiAobmV3TmFtZSA9PSBudWxsKSB7CiAgICAgIG5ld05hbWUgPSBnZXRGcmVzaE5hbWUoaW5zdGFuY2VTY29wZSwgb3BlcmF0b3JJZGVudGlmaWVyKTsKICAgICAgdXNlckluc3RhbmNlT3BlcmF0b3JzW29wZXJhdG9ySWRlbnRpZmllcl0gPSBuZXdOYW1lOwogICAgfQogICAgcmV0dXJuIF9uZXdSZWZlcmVuY2UobmV3TmFtZSk7CiAgfQoKICBTdHJpbmcgX2dlbmVyYXRlRnJlc2hTdHJpbmdGb3JOYW1lKFN0cmluZyBwcm9wb3NlZE5hbWUsIE5hbWluZ1Njb3BlIHNjb3BlLAogICAgICB7Ym9vbCBzYW5pdGl6ZUZvckFubm90YXRpb25zOiBmYWxzZSwgYm9vbCBzYW5pdGl6ZUZvck5hdGl2ZXM6IGZhbHNlfSkgewogICAgaWYgKHNhbml0aXplRm9yQW5ub3RhdGlvbnMpIHsKICAgICAgcHJvcG9zZWROYW1lID0gX3Nhbml0aXplRm9yQW5ub3RhdGlvbnMocHJvcG9zZWROYW1lKTsKICAgIH0KICAgIGlmIChzYW5pdGl6ZUZvck5hdGl2ZXMpIHsKICAgICAgcHJvcG9zZWROYW1lID0gX3Nhbml0aXplRm9yTmF0aXZlcyhwcm9wb3NlZE5hbWUpOwogICAgfQogICAgcHJvcG9zZWROYW1lID0gX3Nhbml0aXplRm9yS2V5d29yZHMocHJvcG9zZWROYW1lKTsKICAgIFN0cmluZyBjYW5kaWRhdGU7CiAgICBpZiAoc2NvcGUuaXNVbnVzZWQocHJvcG9zZWROYW1lKSkgewogICAgICBjYW5kaWRhdGUgPSBwcm9wb3NlZE5hbWU7CiAgICB9IGVsc2UgewogICAgICBpbnQgY291bnRlciA9IHBvcHVsYXJOYW1lQ291bnRlcnNbcHJvcG9zZWROYW1lXTsKICAgICAgaW50IGkgPSAoY291bnRlciA9PSBudWxsKSA/IDAgOiBjb3VudGVyOwogICAgICB3aGlsZSAoc2NvcGUuaXNVc2VkKCIkcHJvcG9zZWROYW1lJGkiKSkgewogICAgICAgIGkrKzsKICAgICAgfQogICAgICBwb3B1bGFyTmFtZUNvdW50ZXJzW3Byb3Bvc2VkTmFtZV0gPSBpICsgMTsKICAgICAgY2FuZGlkYXRlID0gIiRwcm9wb3NlZE5hbWUkaSI7CiAgICB9CiAgICBzY29wZS5yZWdpc3RlclVzZShjYW5kaWRhdGUpOwogICAgcmV0dXJuIGNhbmRpZGF0ZTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIHVudXNlZCBuYW1lLgogIC8vLwogIC8vLyBbcHJvcG9zZWROYW1lXSBtdXN0IGJlIGEgdmFsaWQgSmF2YVNjcmlwdCBpZGVudGlmaWVyLgogIC8vLwogIC8vLyBJZiBbc2FuaXRpemVGb3JBbm5vdGF0aW9uc10gaXMgYHRydWVgLCB0aGVuIHRoZSByZXN1bHQgaXMgZ3VhcmFudGVlZCBub3QKICAvLy8gdG8gaGF2ZSB0aGUgZm9ybSBvZiBhbiBhbm5vdGF0ZWQgbmFtZS4KICAvLy8KICAvLy8gSWYgW3Nhbml0aXplRm9yTmF0aXZlc10gaXQgYHRydWVgLCB0aGVuIHRoZSByZXN1bHQgaXMgZ3VhcmFudGVlZCBub3QgdG8KICAvLy8gY2xhc2ggd2l0aCBhIHByb3BlcnR5IG5hbWUgb24gYSBuYXRpdmUgb2JqZWN0LgogIC8vLwogIC8vLyBOb3RlIHRoYXQgW01pbmlmeU5hbWVyXSBvdmVycmlkZXMgdGhpcyBtZXRob2Qgd2l0aCBvbmUgdGhhdCBwcm9kdWNlcwogIC8vLyBtaW5pZmllZCBuYW1lcy4KICBqc0FzdC5OYW1lIGdldEZyZXNoTmFtZShOYW1pbmdTY29wZSBzY29wZSwgU3RyaW5nIHByb3Bvc2VkTmFtZSwKICAgICAge2Jvb2wgc2FuaXRpemVGb3JBbm5vdGF0aW9uczogZmFsc2UsIGJvb2wgc2FuaXRpemVGb3JOYXRpdmVzOiBmYWxzZX0pIHsKICAgIFN0cmluZyBjYW5kaWRhdGUgPSBfZ2VuZXJhdGVGcmVzaFN0cmluZ0Zvck5hbWUocHJvcG9zZWROYW1lLCBzY29wZSwKICAgICAgICBzYW5pdGl6ZUZvckFubm90YXRpb25zOiBzYW5pdGl6ZUZvckFubm90YXRpb25zLAogICAgICAgIHNhbml0aXplRm9yTmF0aXZlczogc2FuaXRpemVGb3JOYXRpdmVzKTsKICAgIHJldHVybiBuZXcgU3RyaW5nQmFja2VkTmFtZShjYW5kaWRhdGUpOwogIH0KCiAgLy8vIFJldHVybnMgYSB2YXJpYW50IG9mIFtuYW1lXSB0aGF0IGNhbm5vdCBjbGFzaCB3aXRoIHRoZSBhbm5vdGF0ZWQKICAvLy8gdmVyc2lvbiBvZiBhbm90aGVyIG5hbWUsIHRoYXQgaXMsIHRoZSByZXN1bHRpbmcgbmFtZSBjYW4gbmV2ZXIgYmUgcmV0dXJuZWQKICAvLy8gYnkgW2Rlcml2ZUdldHRlck5hbWVdLCBbZGVyaXZlU2V0dGVyTmFtZV0sIFtkZXJpdmVDYWxsTWV0aG9kTmFtZV0sCiAgLy8vIFtvcGVyYXRvcklzXSwgb3IgW3N1YnN0aXR1dGlvbk5hbWVdLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSwgYSBuYW1lIGBnZXQkeGAgd291bGQgYmUgY29udmVydGVkIHRvIGAkZ2V0JHhgIHRvIGVuc3VyZSBpdAogIC8vLyBjYW5ub3QgY2xhc2ggd2l0aCB0aGUgZ2V0dGVyIGZvciBgeGAuCiAgLy8vCiAgLy8vIFdlIGRvbid0IHdhbnQgdG8gcmVnaXN0ZXIgYWxsIHBvdGVudGlhbCBhbm5vdGF0ZWQgbmFtZXMgaW4KICAvLy8gW3VzZWRJbnN0YW5jZU5hbWVzXSAodGhlcmUgYXJlIHRvbyBtYW55KSwgc28gd2UgdXNlIHRoaXMgc3RlcCB0byBhdm9pZAogIC8vLyBjbGFzaGVzIGJldHdlZW4gYW5ub3RhdGVkIGFuZCB1bmFubm90YXRlZCBuYW1lcy4KICBTdHJpbmcgX3Nhbml0aXplRm9yQW5ub3RhdGlvbnMoU3RyaW5nIG5hbWUpIHsKICAgIC8vIEVuc3VyZSBuYW1lIGRvZXMgbm90IGNsYXNoIHdpdGggYSBnZXR0ZXIgb3Igc2V0dGVyIG9mIGFub3RoZXIgbmFtZSwKICAgIC8vIG9uZSBvZiB0aGUgb3RoZXIgc3BlY2lhbCBuYW1lcyB0aGF0IHN0YXJ0IHdpdGggYCRgLCBzdWNoIGFzIGAkaXNgLAogICAgLy8gb3Igd2l0aCBvbmUgb2YgdGhlIGBjYWxsYCBzdHVicywgc3VjaCBhcyBgY2FsbCQxYC4KICAgIGFzc2VydCh0aGlzIGlzISBNaW5pZnlOYW1lcik7CiAgICBpZiAobmFtZS5zdGFydHNXaXRoKHInJCcpIHx8CiAgICAgICAgbmFtZS5zdGFydHNXaXRoKGZpeGVkTmFtZXMuZ2V0dGVyUHJlZml4KSB8fAogICAgICAgIG5hbWUuc3RhcnRzV2l0aChmaXhlZE5hbWVzLnNldHRlclByZWZpeCkgfHwKICAgICAgICBuYW1lLnN0YXJ0c1dpdGgoX2NhbGxQcmVmaXhEb2xsYXIpKSB7CiAgICAgIG5hbWUgPSAnXCQkbmFtZSc7CiAgICB9CiAgICByZXR1cm4gbmFtZTsKICB9CgogIC8vLyBSZXR1cm5zIGEgdmFyaWFudCBvZiBbbmFtZV0gdGhhdCBjYW5ub3QgY2xhc2ggd2l0aCBhIG5hdGl2ZSBwcm9wZXJ0eSBuYW1lCiAgLy8vIChlLmcuIHRoZSBuYW1lIG9mIGEgbWV0aG9kIG9uIGEgSlMgRE9NIG9iamVjdCkuCiAgLy8vCiAgLy8vIElmIFtuYW1lXSBpcyBub3QgYW4gYW5ub3RhdGVkIG5hbWUsIHRoZSByZXN1bHQgd2lsbCBub3QgYmUgYW4gYW5ub3RhdGVkCiAgLy8vIG5hbWUgZWl0aGVyLgogIFN0cmluZyBfc2FuaXRpemVGb3JOYXRpdmVzKFN0cmluZyBuYW1lKSB7CiAgICBpZiAoIW5hbWUuY29udGFpbnMocickJykpIHsKICAgICAgLy8gUHJlcGVuZCAkJC4gVGhlIHJlc3VsdCBtdXN0IG5vdCBjb2luY2lkZSB3aXRoIGFuIGFubm90YXRlZCBuYW1lLgogICAgICBuYW1lID0gJ1wkXCQkbmFtZSc7CiAgICB9CiAgICByZXR1cm4gbmFtZTsKICB9CgogIC8vLyBSZXR1cm5zIGEgcHJvcG9zZWQgbmFtZSBmb3IgdGhlIGdpdmVuIHR5cGVkZWYgb3IgY2xhc3MgW2VsZW1lbnRdLgogIC8vLyBUaGUgcmV0dXJuZWQgaWQgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHZhbGlkIEphdmFTY3JpcHQgaWRlbnRpZmllci4KICBTdHJpbmcgX3Byb3Bvc2VOYW1lRm9yVHlwZShFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGVsZW1lbnQubmFtZS5yZXBsYWNlQWxsKF9ub25JZGVudGlmaWVyUkUsICdfJyk7CiAgfQoKICBzdGF0aWMgUmVnRXhwIF9ub25JZGVudGlmaWVyUkUgPSBuZXcgUmVnRXhwKHInW15BLVphLXowLTlfJF0nKTsKCiAgLy8vIFJldHVybnMgYSBwcm9wb3NlZCBuYW1lIGZvciB0aGUgZ2l2ZW4gdG9wLWxldmVsIG9yIHN0YXRpYyBtZW1iZXIKICAvLy8gW2VsZW1lbnRdLiBUaGUgcmV0dXJuZWQgaWQgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHZhbGlkIEphdmFTY3JpcHQKICAvLy8gaWRlbnRpZmllci4KICBTdHJpbmcgX3Byb3Bvc2VOYW1lRm9yTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudC5pc0NvbnN0cnVjdG9yKSB7CiAgICAgIHJldHVybiBfcHJvcG9zZU5hbWVGb3JDb25zdHJ1Y3RvcihlbGVtZW50KTsKICAgIH0gZWxzZSBpZiAoZWxlbWVudCBpcyBKR2VuZXJhdG9yQm9keSkgewogICAgICByZXR1cm4gX3Byb3Bvc2VOYW1lRm9yTWVtYmVyKGVsZW1lbnQuZnVuY3Rpb24pICsgcickYm9keSc7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgICBDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzcyA9IGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIHJldHVybiAnJHtlbmNsb3NpbmdDbGFzcy5uYW1lfV8ke2VsZW1lbnQubmFtZX0nOwogICAgfQogICAgcmV0dXJuIGVsZW1lbnQubmFtZS5yZXBsYWNlQWxsKCcrJywgJ18nKTsKICB9CgogIFN0cmluZyBfcHJvcG9zZU5hbWVGb3JMYXp5U3RhdGljR2V0dGVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gcickZ2V0JCcgKyBfcHJvcG9zZU5hbWVGb3JNZW1iZXIoZWxlbWVudCk7CiAgfQoKICBTdHJpbmcgX3Byb3Bvc2VOYW1lRm9yQ29uc3RydWN0b3IoQ29uc3RydWN0b3JFbnRpdHkgZWxlbWVudCkgewogICAgU3RyaW5nIGNsYXNzTmFtZSA9IGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MubmFtZTsKICAgIGlmIChlbGVtZW50LmlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yKSB7CiAgICAgIHJldHVybiAnJHtjbGFzc05hbWV9XCQke2VsZW1lbnQubmFtZX0nOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2hhbmdlIGZhY3RvcnkgbmFtZSBlbmNvZGluZyBhcyB0byBub3QgaW5jbHVkZQogICAgICAvLyB0aGUgY2xhc3MtbmFtZSB0d2ljZS4KICAgICAgcmV0dXJuICcke2NsYXNzTmFtZX1fJHt1dGlscy5yZWNvbnN0cnVjdENvbnN0cnVjdG9yTmFtZShlbGVtZW50KX0nOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgYSBwcm9wb3NlZCBuYW1lIGZvciB0aGUgZ2l2ZW4gW0xpYnJhcnlFbGVtZW50XS4KICAvLy8gVGhlIHJldHVybmVkIGlkIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSB2YWxpZCBKYXZhU2NyaXB0IGlkZW50aWZpZXIuCiAgLy8gVE9ETyhzcmEpOiBQcmUtcHJvY2VzcyBsaWJyYXJpZXMgdG8gYXNzaWduIFtsaWJyYXJ5TG9uZ05hbWVzXSBpbiBhIHdheSB0aGF0CiAgLy8gaXMgaW5kZXBlbmRlbnQgb2YgdGhlIG9yZGVyIG9mIGNhbGxzIHRvIG5hbWVyLgogIFN0cmluZyBfcHJvcG9zZU5hbWVGb3JMaWJyYXJ5KExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgU3RyaW5nIG5hbWUgPSBsaWJyYXJ5TG9uZ05hbWVzW2xpYnJhcnldOwogICAgaWYgKG5hbWUgIT0gbnVsbCkgcmV0dXJuIG5hbWU7CiAgICAvLyBVc2UgdGhlICdmaWxlJyBuYW1lLCBlLmcuICJwYWNrYWdlOmV4cGVjdC9leHBlY3QuZGFydCIgLT4gImV4cGVjdCIKICAgIG5hbWUgPSBsaWJyYXJ5LmNhbm9uaWNhbFVyaS5wYXRoOwogICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKG5hbWUubGFzdEluZGV4T2YoJy8nKSArIDEpOwogICAgaWYgKG5hbWUuY29udGFpbnMoJy4nKSkgewogICAgICAvLyBEcm9wIGZpbGUgZXh0ZW5zaW9uLgogICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZignLicpKTsKICAgIH0KICAgIC8vIFRoZSBmaWxlbmFtZSBiYXNlZCBuYW1lIGNhbiBjb250YWluIGFsbCBraW5kcyBvZiBuYXN0eSBjaGFyYWN0ZXJzLiBNYWtlCiAgICAvLyBzdXJlIGl0IGlzIGFuIGlkZW50aWZpZXIuCiAgICBpZiAoIUlERU5USUZJRVIuaGFzTWF0Y2gobmFtZSkpIHsKICAgICAgU3RyaW5nIHJlcGxhY2VyKE1hdGNoIG1hdGNoKSB7CiAgICAgICAgU3RyaW5nIHMgPSBtYXRjaFswXTsKICAgICAgICBpZiAocyA9PSAnLicpIHJldHVybiAnXyc7CiAgICAgICAgcmV0dXJuIHMuY29kZVVuaXRBdCgwKS50b1JhZGl4U3RyaW5nKDE2KTsKICAgICAgfQoKICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZUFsbE1hcHBlZChOT05fSURFTlRJRklFUl9DSEFSLCByZXBsYWNlcik7CiAgICAgIGlmICghSURFTlRJRklFUi5oYXNNYXRjaChuYW1lKSkgewogICAgICAgIC8vIGUuZy4gc3RhcnRzIHdpdGggZGlnaXQuCiAgICAgICAgbmFtZSA9ICdsaWJfJG5hbWUnOwogICAgICB9CiAgICB9CiAgICAvLyBOYW1lcyBjb25zdHJ1Y3RlZCBiYXNlZCBvbiBhIGxpYmFyeSBuYW1lIHdpbGwgYmUgZnVydGhlciBkaXNhbWJpZ3VhdGVkLgogICAgLy8gSG93ZXZlciwgYXMgbmFtZXMgZnJvbSB0aGUgc2FtZSBsaWJhcnkgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbGlicmFyeQogICAgLy8gbmFtZSBwYXJ0LCB3ZSBkaXNhbWJpZ3VhdGUgdGhlIGxpYnJhcnkgbmFtZSBoZXJlLgogICAgU3RyaW5nIGRpc2FtYmlndWF0ZWQgPSBuYW1lOwogICAgZm9yIChpbnQgYyA9IDA7IGxpYnJhcnlMb25nTmFtZXMuY29udGFpbnNWYWx1ZShkaXNhbWJpZ3VhdGVkKTsgYysrKSB7CiAgICAgIGRpc2FtYmlndWF0ZWQgPSAiJG5hbWUkYyI7CiAgICB9CiAgICBsaWJyYXJ5TG9uZ05hbWVzW2xpYnJhcnldID0gZGlzYW1iaWd1YXRlZDsKICAgIHJldHVybiBkaXNhbWJpZ3VhdGVkOwogIH0KCiAgU3RyaW5nIF9nZXRTdWZmaXhGb3JJbnRlcmNlcHRlZENsYXNzZXMoSXRlcmFibGU8Q2xhc3NFbnRpdHk+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+IGNsYXNzZXMpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9CiAgICAgICAgbmV3IE1vZHVsYXJOYW1lKE1vZHVsYXJOYW1lS2luZC5uYW1lRm9yR2V0SW50ZXJjZXB0b3IsIHNldDogY2xhc3Nlcyk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBuYW1lRm9yT25lU2hvdEludGVyY2VwdG9yKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzKSB7CiAgICBqc0FzdC5OYW1lIG5hbWUgPSBuZXcgTW9kdWxhck5hbWUoTW9kdWxhck5hbWVLaW5kLm5hbWVGb3JPbmVTaG90SW50ZXJjZXB0b3IsCiAgICAgICAgZGF0YTogc2VsZWN0b3IsIHNldDogY2xhc3Nlcyk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTmFtZSBhc05hbWUoU3RyaW5nIHRleHQpIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9IG5ldyBNb2R1bGFyTmFtZShNb2R1bGFyTmFtZUtpbmQuYXNOYW1lLCBkYXRhOiB0ZXh0KTsKICAgIF9yZWdpc3RyeS5yZWdpc3Rlck1vZHVsYXJOYW1lKG5hbWUpOwogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5OYW1lIHN1YnN0aXR1dGlvbk5hbWUoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAganNBc3QuTmFtZSBuYW1lID0KICAgICAgICBuZXcgTW9kdWxhck5hbWUoTW9kdWxhck5hbWVLaW5kLnN1YnN0aXR1dGlvbiwgZGF0YTogZWxlbWVudCk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJNb2R1bGFyTmFtZShuYW1lKTsKICAgIHJldHVybiBuYW1lOwogIH0KfQqLDgBOTjwBGgEnATktAUcBGhkhQjs/I0o4JDEhISEhLEAjOD1AHCobASAdGhkBTwQuBCk7FwQ8BEwuBE5NPQRNUCEETgQbBEQELzAwBEtQT04cBFFPUAQoBEkELTI1OgRHJQRNTS0ETCsERwRQKgQwBFBOLwROT1BGJgRNThMEJgQWFgRPBDcEFRUEUSUjQR0NChIODAwLCw0PDgwQCw4NEBAMDA8KDQ4KCwEqDQwPDQ0ODgE1EgsPDg0RDxEOAU8TDQoKDgwMEgsNDgsMDQ8ODQ0PDQwQCw4NEBAMDwoNDg4LATYeASsMDQFDEg8REQ8OAUcFAUY1Q0QwGAUBOEQsUwE0JAE3OwEvJxEaATpKRCwBNAwBIBEBMRoBQkpBSTY6SEBFR0sVAURBSjdDSEhGSEtBRz4eATBDSUM9RigBIICCPICVQjkBHA4BSEAmARJHSD47QAFEQy4BLEMBKjxBPUVKREhFR0xMPDYBRkxGHwEYEgUBSAkJKwkJCQk9NDcJCQkJCToJCQkJCQk7CQkJBQFMDA8FATAvFhYWFhcBIgFBDx8fJy4zBhgEASwoJC05OTczKAEMIQEMHwFFNAFHSkNNASMjASMBKD8BHgEMI0QBTykBTksBIwFCQAZPUQ0xMk5FPDYBEUlBPCUqQSpBBAE2IisvCDUvCC0oCBAEAUQ8PjNBSUtDPT1FATgiNy8IMVEIAUsOMygIEAQBQjgBRTwBMwFBAUM8KwFPMEABT0gVPQE8SkoEATEnAQxFATkBOTMnPU4BQyIzQCIBQy02BAEuBlA5LiUEASkGMTRMTS4iMho0NykGIgQBJDQ0HEtQHi8GFQQBTVAbBk1QPQZFKiUBHi4BMgE/GkEBHBMNRS1PSiI8JQYEAUhITksYTSoEASM/KDsEASFGJU49LzRHUDJKNggEAQw5SUgiKyoGJDYGPQQBOh8GMAZFRDlMITsEAScGMAZROgY8BlAiTCAvOgY0PxUEAScGLAZQIk9HORUEAQwxHSBRNAEgUTQBIh9NJzdCAR5OMUMvCic+UAEhLgEPMjsGBAE2Mz1COgYBFE4EAVBAIAFQIzYkMi4EAVENNiQtLgQBDEIqAQxAKAEMOigBDE4rNgQBTz9LIAdPT0QgUBo7IQgEAQw+OQE0TQYBSktJLU9LLh8qPgYBQDxOT0NQTzYrN0hABgFPTzBJBAE1HSU0Mx5DIiFOISNETh0ZDAoIRAYSBAFQOTE1BAEyNU86PyMEAUw+TzouQQQBTD5POi5BBAEyNk86PyMEAU4yRjAEAT8GRzgwGzEnBiMEAU1QIQZOTS8GT1BCKyIuBAEsBlE2MiUXHDImCBIIBAE/LjYEATdLBAFIBkc+SEtDKxsyOSIGIwQBRSgGRwZOTgZOS1BFBklKETQsSRhRATpQSzMbNx9NUTQIOikqPgYjBAFLDQZOTQZMKQZITS1KMxsjUSpFMwYjBAFOGwZKMwZQNFBMTTc5MzZIOTIEAS4GRC8GSSo0OxsjAS86LEY0Dx5BNE80CAYjBAExBkMaBklARBtBOwYjBAFNTiI8Bh44BjcWKCANNy8wDQgxJQYiFgQBHgY8Bk8tBk41BksWQk5IODEsBAFHUUkrBk4sBkFNNzBLSjoiITQ0LhgGEQQBUDYGThMsIEoaBhEEAUhJLzsEAUIBR0gSNyEyLEExOzcGLgQBQTYEAUE0Ky4NTR9KBgQBPklRNDktI0omNh4eNwZPISYlHSIyCAFDKCMcCAZPSzkhSiEGLxoEAUobTkpPTEo3EkdNSCBQTxENTQYEAQxETlFLPkMEAQwoOlBRGzABPh0/BAEMLzFRB0k+B04lB09JQy0EAQxPAQxDQjRKRTUIBAEMOSMlLwQBRUtIPiM+SyEcBAFJN0s0BAEMRjM3BjgEATU0BAEMRDgEAS8kNgYqBAEMPiQ6Bi4EAT05RCQgKjASBlAEAQxIQwQBDDg0OUoRBAEMOTQXSz4oPQQBPSsvSUA6LQQBQQE8AU0qMAFBASgBPj42SjgIBAEMLR9IIDscIgoGKC4EAQwvRh45HwgEAUQtJRgGKBEEAQw1HjkfCAQBDCM0ODJRBjQ4MlEGAScEATEjGBUeFh8YIBseFh4WHhYfFx4WHxYfFiAXHxUeFR8VHhUeFh4WHhUeFiMZDRMGBAE/Kh8vLwYgTDEVBiQ0NwFMTFBPJDYXTyAEAgFOTUU+PCc3OTg5Njk3Nz4VBAEfQBcRPUcUBEVDEBcCATMEUFEcBDpQNjNEQwQ+TiImJwEWIykBOj8nEgFHATEnQwErFilOMyAEAToyASoYKicdURMTHAYaBAEiLRcGEwQBHiEdHzlHFQYEAShQFQ0VBgQBKCEEAQw8IAQBDEYfBAEMNBEEAQw6EQQBDDI7KyUNIwYEAQw4EwQBDDQtBAEMOD8pBAEMNDoVIiAUKhUNKSUbCAYEAQwyOhQgFA0kBgQBDFE6FCAUDU8ZRgYEAQxCKQE8RiAiHjEiHx4mIREdEQoIIC0QCAYBUUQhGj8mCAQBDDRQTRUuESEgJiAGGDFABhkiBAEMQk41FAQBDEweBAEMQhgEAQw4EQQBDEgZBAIBOgRQTU0VSyM3ARYjLgE7ATEnQwE7ASciGDMgBhEEAQw3AQw9AQwzJAQBDDsyBAEMRSYEAQwxJiczBioEAQw3LgQBDDcxBAEMMzkEAQwxOAQBDDE6LQQBDEE7RCE/PQgRBAEMMy5ARSEEAQxBKSUEAQxLFB9DIQQBDEEUHz4hBAEMNxQfOSEEAQxHJzgEASgbI1EYNS4GEQQBOzAvBhEEASM7KgQBKSQiJQ4kUSUqI0snEyMgHhANFCsvEAgjNQYEAUw9Bj4tIzwfEQQBITogPAQCATYTARcBJh0RGgQBDB4dBAEMIQEMLiEEAQwqIQQBDDQhBAEyMjw5Ni4GEQQBDCwnNQ4GHBM2FRgGGD4UFwgVGBQGLRU9FhkKFxoWCAYEAgEUPgZRRQZMNzIoATk8OQFEOzQsBAFQKDUEAgEkExYBJiYjKywyLjYzKSkxPSACATxQCi4eAQwiDCIMRwwoDCgMKAwuDCoMKQIBQR4dHwE2BjVGAUAGNUIBPwY1PAFBBjsiRAFOIQZNQT4BTyEGTkFAAUouBkxBOAFRIwZQETEoAVAaIQFANgZJMwYcHiQMBiEGNTYGKzEMBkIBTD0BRzgBTBkGTisiAUEwAUMGQ0oSPgFLMSg0AS4GTxoGSExOGi4BTU4SBkwyOAFIES4BTywBTB80AU83AUY4ATIGS0csATUpATcGLikBIgETPQQBPwZKIUkkOiAEAUwMODkEAUExQQQBThA1JwQBRAZLLzRCBAFREDgoBAEvAUMoLDRBRkRIODxMBiUEAUk4Bk0qKSZHGAYRBAEmAUc0SBQkMCQwIi4jNiM2IzYjNiM2IzYlNCI0MDsyOi42KTEvMik0JTUfKyIrKDA3PTQ6NDo8QjxCOT8kLDIwLkgrOy09Lz8tPSI7JD0hOiE6JD0jRg9MBgQCAS4jDCEMHwEMKAEUTAEMIkEpEQQBDC8WSSkRBAEMLlEpEQQBDEc5QDUXBAEMQzk+NRcEAQw9OT01FwQBDEU5PzUXBAEMQxZLKREEAQw5FkcpEQQBDDkWRykRBAEMPhZHKREEAQwtFkUpEQQBDDkWRykRBAEMMRZFKREEAQw4FkkpEQQBDC8WRCkRBAEMOVEYKREEAQw/JzQYKREEAQxBJzUYKREEAQxOJzwYKREEAQw/Fk4pEQQBDCg1UScpEQQBDCNLKREEAQw1FkYpEQQCASpwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL25hbWVyLmRhcnRAc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9maWVsZF9uYW1pbmdfbWl4aW4uZGFydKIPLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YganNfYmFja2VuZC5uYW1lcjsKCmFic3RyYWN0IGNsYXNzIF9NaW5pZmllZEZpZWxkTmFtZXIgaW1wbGVtZW50cyBOYW1lciB7CiAgX0ZpZWxkTmFtaW5nUmVnaXN0cnkgZ2V0IGZpZWxkUmVnaXN0cnk7CgogIC8vIFJldHVybnMgYSBtaW5pbWFsIG5hbWUgZm9yIHRoZSBmaWVsZCB0aGF0IGlzIGdsb2JhbGx5IHVuaXF1ZSBhbG9uZwogIC8vIHRoZSBnaXZlbiBlbGVtZW50J3MgY2xhc3MgaW5oZXJpdGFuY2UgY2hhaW4uCiAgLy8KICAvLyBUaGUgaW5oZXJpdGFuY2Ugc2NvcGUgYmFzZWQgbmFtaW5nIG1pZ2h0IG5vdCB5aWVsZCBhIG5hbWUuIEZvciBpbnN0YW5jZSwKICAvLyB0aGlzIGNvdWxkIGJlIGJlY2F1c2UgdGhlIGZpZWxkIGJlbG9uZ3MgdG8gYSBtaXhpbi4gSW4gc3VjaCBhIGNhc2UgdGhpcwogIC8vIHdpbGwgcmV0dXJuIGBudWxsYCBhbmQgYSBub3JtYWwgZmllbGQgbmFtZSBoYXMgdG8gYmUgdXNlZC4KICBqc0FzdC5OYW1lIF9taW5pZmllZEluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKF9uYXRpdmVEYXRhLmhhc0ZpeGVkQmFja2VuZE5hbWUoZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIG5ldyBTdHJpbmdCYWNrZWROYW1lKF9uYXRpdmVEYXRhLmdldEZpeGVkQmFja2VuZE5hbWUoZWxlbWVudCkpOwogICAgfQoKICAgIF9GaWVsZE5hbWluZ1Njb3BlIG5hbWVzOwogICAgaWYgKGVsZW1lbnQgaXMgSlJlY29yZEZpZWxkKSB7CiAgICAgIG5hbWVzID0gbmV3IF9GaWVsZE5hbWluZ1Njb3BlLmZvckJveChlbGVtZW50LmJveCwgZmllbGRSZWdpc3RyeSk7CiAgICB9IGVsc2UgewogICAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50LmVuY2xvc2luZ0NsYXNzOwogICAgICBuYW1lcyA9IG5ldyBfRmllbGROYW1pbmdTY29wZS5mb3JDbGFzcyhjbHMsIF9jbG9zZWRXb3JsZCwgZmllbGRSZWdpc3RyeSk7CiAgICB9CgogICAgaWYgKG5hbWVzLmNvbnRhaW5zRmllbGQoZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIG5hbWVzW2VsZW1lbnRdOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgovLy8gRW5jYXBzdWxhdGVzIHRoZSBnbG9iYWwgc3RhdGUgb2YgZmllbGQgbmFtaW5nLgovLy8KLy8vIFRoZSBmaWVsZCBuYW1pbmcgcmVnaXN0cnkgYWxsb2NhdGVzIG5hbWVzIHRvIGJlIHVzZWQgYWxvbmcgYSBwYXRoIGluIHRoZQovLy8gaW5oZXJpdGFuY2UgaGllcmFyY2h5IG9mIGZpZWxkcywgc3RhcnRpbmcgd2l0aCB0aGUgb2JqZWN0IGNsYXNzLiBUaGUgYWN0dWFsCi8vLyBoaWVyYXJjaHkgaXMgZW5jb2RlZCB1c2luZyBpbnN0YW5jZXMgb2YgW19GaWVsZE5hbWluZ1Njb3BlXS4KY2xhc3MgX0ZpZWxkTmFtaW5nUmVnaXN0cnkgewogIGZpbmFsIE5hbWVyIG5hbWVyOwoKICBmaW5hbCBNYXA8RW50aXR5LCBfRmllbGROYW1pbmdTY29wZT4gc2NvcGVzID0KICAgICAgbmV3IE1hcDxFbnRpdHksIF9GaWVsZE5hbWluZ1Njb3BlPigpOwoKICBmaW5hbCBNYXA8RW50aXR5LCBqc0FzdC5OYW1lPiBnbG9iYWxOYW1lcyA9IG5ldyBNYXA8RW50aXR5LCBqc0FzdC5OYW1lPigpOwoKICBpbnQgZ2xvYmFsQ291bnQgPSAwOwoKICBmaW5hbCBMaXN0PGpzQXN0Lk5hbWU+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+IGFubm90YXRpb25zID0gW107CiAgZm9yIChDb25zdGFudFZhbHVlIHZhbHVlIGluIG1ldGFkYXRhKSB7CiAgICBpZiAoIXZhbHVlLmlzQ29uc3RydWN0ZWRPYmplY3QpIGNvbnRpbnVlOwogICAgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIGNvbnN0cnVjdGVkT2JqZWN0ID0gdmFsdWU7CiAgICBpZiAoY29uc3RydWN0ZWRPYmplY3QudHlwZS5lbGVtZW50ICE9IGNscykgY29udGludWU7CgogICAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZmllbGRzID0gY29uc3RydWN0ZWRPYmplY3QuZmllbGRzLnZhbHVlczsKICAgIC8vIFRPRE8oc3JhKTogQmV0dGVyIHZhbGlkYXRpb24gb2YgdGhlIGNvbnN0YW50LgogICAgaWYgKGZpZWxkcy5sZW5ndGggIT0gMSB8fCAhZmllbGRzLnNpbmdsZS5pc1N0cmluZykgewogICAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAnQW5ub3RhdGlvbnMgbmVlZHMgb25lIHN0cmluZzogJHt2YWx1ZS50b1N0cnVjdHVyZWRUZXh0KCl9Jyk7CiAgICB9CiAgICBTdHJpbmdDb25zdGFudFZhbHVlIHNwZWNTdHJpbmdDb25zdGFudCA9IGZpZWxkcy5zaW5nbGU7CiAgICBTdHJpbmcgc3BlY1N0cmluZyA9IHNwZWNTdHJpbmdDb25zdGFudC5zdHJpbmdWYWx1ZTsKICAgIGFubm90YXRpb25zLmFkZChzcGVjU3RyaW5nKTsKICB9CiAgcmV0dXJuIGFubm90YXRpb25zOwp9CgpMaXN0PFN0cmluZz4gZ2V0Q3JlYXRlc0Fubm90YXRpb25zKERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwKICAgIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLCBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBtZXRhZGF0YSkgewogIHJldHVybiBfZ2V0QW5ub3RhdGlvbnMoCiAgICAgIHJlcG9ydGVyLCBtZXRhZGF0YSwgY29tbW9uRWxlbWVudHMuYW5ub3RhdGlvbkNyZWF0ZXNDbGFzcyk7Cn0KCkxpc3Q8U3RyaW5nPiBnZXRSZXR1cm5zQW5ub3RhdGlvbnMoRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLAogICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IG1ldGFkYXRhKSB7CiAgcmV0dXJuIF9nZXRBbm5vdGF0aW9ucygKICAgICAgcmVwb3J0ZXIsIG1ldGFkYXRhLCBjb21tb25FbGVtZW50cy5hbm5vdGF0aW9uUmV0dXJuc0NsYXNzKTsKfQqDqABOTjwBGSNKJCEePi45EgFHFgFRFBUiASg6AQwlAQwdAS0dFw1CBgQCATscRUMBLUgBOFEBEysBJgFLOkwBTR8zAUgmKC8RBAEMFicjLDkqBAEnBjU0CwkOFwUBLAY1KQEbNhQOFg4UDhkOIg8VBgQBGTkmIT0eJh4EARc2JBAEAgEzBEtLEwRCBEtPMQRRUDEEPE4hBFEnBB8hBEwcF0gdLwFGDyEBPw8lARtKEhwBIQE/AR0XAVEiQC80UVEBPAEtATxBFwEXFywrLysvCBQGASYqOUoqKyUVAUgyOiQ0RgZOOyoeFQQBMigVASIlKyAgHxEiCggmKi8lCAYBHyMuJygiHBMEAQwWHSQqKCUyJg0EAUA0MTA4KhUEAS5RHkAEAS5RHkcEAU1MTk8yBiwGUUxKUE4qBkktBkIGJiokHh4GTlFPQAZRRyUGSU4mBlBPT0tPPgZHTk9NThIGUBUGUE9GBk4TBkxPSk1EQyFLIzM1LyMdGh4SExwBJxgjPgYBKxEREREQDQwHATk2OlAwLTQjHhQKEAg3HRMKEAg5OwgGAUJAOCclGiUhCg4GAU5PAQxRMgE1ASEyJTwSCCosASUjHxEwCg8nOBEuCggGAUEHPQdDJioiG0QIFAYBKBsuJyUaIQoGASgbLz8aJQoiMyUKBgE4KiYvPAcBRgEeS008NgEyNwYBLwFAATozPSsEASVKOQEuQxMGATEdKSMcDTYiMggsGhstEx44Exw2ExNGCggGAR0qIxwNOyc9CDUeGzQTHj8THD0TE0oKCAYBGAQBTEgiGRkdGyMnTxQHJjkBNAEsTQE0ATIwLgYBLjgqLgYBLiwGASIgBgE3KB4qHiAvNy8sAS4zLQYoH0kGARUEATwfGxkdIyUiMi4GATceICgvNy8sBAEpGR0bIyc0MzJQFQQBMBkdGyMnNEFPJDk4Mk8sFQQBNjI+IyIGKT4jARdJGi0VCAYgBAIBISUjJyotARwBRURKAT09ARsiEhsGGx4SGwYEAUEZKEcWLThGJxkIBhIEAU4YMjYgKEcVNUAqCAYEAVFNIQZGIjM2ICg2QCkIDRovDyU7UCkxCgEuHjFNT0xRTihEUBFJUFASCggGBAEpFSsrHRwmTU4PJyQ6IR49FgQBOiYaShoWBAEmGSorHRwmK0xNTk1PTU5BTU4VJyMmPAYhATkiBjYiBgFRFgQCATo5ISouODkBRjU5OEgGPDghBBYCAUBHGkICAUBHGkICASlwYWNrYWdlOmNvbXBpbGVyL3NyYy9uYXRpdmUvYmVoYXZpb3IuZGFydDNzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91bml2ZXJzZS9mZWF0dXJlLmRhcnSeei8vIFRPRE8oc2lnbXVuZCk6IHJlbmFtZSB1bml2ZXJzZSA9PiB3b3JsZAovLy8gRGVzY3JpYmVzIGluZGl2aWR1YWwgZmVhdHVyZXMgdGhhdCBtYXkgYmUgc2VlbiBpbiBhIHByb2dyYW0uIE1vc3QgZmVhdHVyZXMKLy8vIGNhbiBiZSBkZXNjcmliZWQgb25seSBieSBuYW1lIHVzaW5nIHRoZSBbRmVhdHVyZV0gZW51bSwgc29tZSBmZWF0dXJlcyBhcmUKLy8vIGV4cHJlc3NlZCBpbmNsdWRpbmcgZGV0YWlscyBvbiBob3cgdGhleSBhcmUgdXNlZC4gRm9yIGV4YW1wbGUsIHdoZXRoZXIgYQovLy8gbGlzdCBsaXRlcmFsIHdhcyBjb25zdGFudCBvciBlbXB0eS4KLy8vCi8vLyBUaGUgdXNlIG9mIHRoZXNlIGZlYXR1cmVzIGlzIHR5cGljYWxseSBkaXNjb3ZlcmVkIGluIGFuIGVhcmx5IHBoYXNlIG9mIHRoZQovLy8gY29tcGlsYXRpb24gcGlwZWxpbmUsIGZvciBleGFtcGxlIGR1cmluZyByZXNvbHV0aW9uLgpsaWJyYXJ5IGNvbXBpbGVyLnVuaXZlcnNlLmZlYXR1cmU7CgppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3J1bnRpbWVfdHlwZV9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwoKLy8vIEEgbGFuZ3VhZ2UgZmVhdHVyZSB0aGF0IG1heSBiZSBzZWVuIGluIHRoZSBwcm9ncmFtLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaG91bGQgbWlycm9yIHVzYWdlIGJlIHBhcnQgb2YgdGhpcz8KZW51bSBGZWF0dXJlIHsKICAvLy8gSW52b2NhdGlvbiBvZiBhIGdlbmVyYXRpdmUgY29uc3RydWN0aW9uIG9uIGFuIGFic3RyYWN0IGNsYXNzLgogIEFCU1RSQUNUX0NMQVNTX0lOU1RBTlRJQVRJT04sCgogIC8vLyBBbiBhc3NlcnQgc3RhdGVtZW50IHdpdGggbm8gbWVzc2FnZS4KICBBU1NFUlQsCgogIC8vLyBBbiBhc3NlcnQgc3RhdGVtZW50IHdpdGggYSBtZXNzYWdlLgogIEFTU0VSVF9XSVRIX01FU1NBR0UsCgogIC8vLyBBIG1ldGhvZCB3aXRoIGFuIGBhc3luY2AgYm9keSBtb2RpZmllci4KICBBU1lOQywKCiAgLy8vIEFuIGFzeW5jaHJvbm91cyBmb3IgaW4gc3RhdGVtZW50IGxpa2UgYGF3YWl0IGZvciAodmFyIGUgaW4gaSkge31gLgogIEFTWU5DX0ZPUl9JTiwKCiAgLy8vIEEgbWV0aG9kIHdpdGggYW4gYGFzeW5jKmAgYm9keSBtb2RpZmllci4KICBBU1lOQ19TVEFSLAoKICAvLy8gQSBjYXRjaCBzdGF0ZW1lbnQuCiAgQ0FUQ0hfU1RBVEVNRU5ULAoKICAvLy8gQSBmYWxsIHRocm91Z2ggaW4gYSBzd2l0Y2ggY2FzZS4KICBGQUxMX1RIUk9VR0hfRVJST1IsCgogIC8vLyBBIGZpZWxkIHdpdGhvdXQgYW4gaW5pdGlhbGl6ZXIuCiAgRklFTERfV0lUSE9VVF9JTklUSUFMSVpFUiwKCiAgLy8vIEEgZmllbGQgd2hvc2UgaW5pdGlhbGl6YXRpb24gaXMgbm90IGEgY29uc3RhbnQuCiAgTEFaWV9GSUVMRCwKCiAgLy8vIEEgbG9jYWwgdmFyaWFibGUgd2l0aG91dCBhbiBpbml0aWFsaXplci4KICBMT0NBTF9XSVRIT1VUX0lOSVRJQUxJWkVSLAoKICAvLy8gQWNjZXNzIHRvIGBsb2FkTGlicmFyeWAgb24gYSBkZWZlcnJlZCBpbXBvcnQuCiAgTE9BRF9MSUJSQVJZLAoKICAvLy8gQSBjYXRjaCBjbGF1c2Ugd2l0aCBhIHZhcmlhYmxlIGZvciB0aGUgc3RhY2sgdHJhY2UuCiAgU1RBQ0tfVFJBQ0VfSU5fQ0FUQ0gsCgogIC8vLyBTdHJpbmcgaW50ZXJwb2xhdGlvbi4KICBTVFJJTkdfSU5URVJQT0xBVElPTiwKCiAgLy8vIFN0cmluZyBqdXh0YXBvc2l0aW9uLgogIFNUUklOR19KVVhUQVBPU0lUSU9OLAoKICAvLy8gQW4gaW1wbGljaXQgY2FsbCB0byBgc3VwZXIubm9TdWNoTWV0aG9kYCwgbGlrZSBjYWxsaW5nIGFuIHVucmVzb2x2ZWQKICAvLy8gc3VwZXIgbWV0aG9kLgogIFNVUEVSX05PX1NVQ0hfTUVUSE9ELAoKICAvLy8gQSByZWRpcmVjdGlvbiB0byB0aGUgYFN5bWJvbGAgY29uc3RydWN0b3IuCiAgU1lNQk9MX0NPTlNUUlVDVE9SLAoKICAvLy8gQW4gc3luY2hyb25vdXMgZm9yIGluIHN0YXRlbWVudCwgbGlrZSBgZm9yICh2YXIgZSBpbiBpKSB7fWAuCiAgU1lOQ19GT1JfSU4sCgogIC8vLyBBIG1ldGhvZCB3aXRoIGEgYHN5bmMqYCBib2R5IG1vZGlmaWVyLgogIFNZTkNfU1RBUiwKCiAgLy8vIEEgdGhyb3cgZXhwcmVzc2lvbi4KICBUSFJPV19FWFBSRVNTSU9OLAoKICAvLy8gQW4gaW1wbGljaXQgdGhyb3cgb2YgYSBgTm9TdWNoTWV0aG9kRXJyb3JgLCBsaWtlIGNhbGxpbmcgYW4gdW5yZXNvbHZlZAogIC8vLyBzdGF0aWMgbWV0aG9kLgogIFRIUk9XX05PX1NVQ0hfTUVUSE9ELAoKICAvLy8gQW4gaW1wbGljaXQgdGhyb3cgb2YgYSBydW50aW1lIGVycm9yLCBsaWtlIGluIGEgcnVudGltZSB0eXBlIGNoZWNrLgogIFRIUk9XX1JVTlRJTUVfRVJST1IsCgogIC8vLyBBbiBpbXBsaWNpdCB0aHJvdyBvZiBhIGBVbnN1cHBvcnRlZEVycm9yYCwgbGlrZSBjYWxsaW5nIGBuZXcKICAvLy8gYm9vbC5mcm9tRW52aXJvbm1lbnRgLgogIFRIUk9XX1VOU1VQUE9SVEVEX0VSUk9SLAoKICAvLy8gVGhlIG5lZWQgZm9yIGEgdHlwZSB2YXJpYWJsZSBib3VuZCBjaGVjaywgbGlrZSBpbnN0YW50aWF0aW9uIG9mIGEgZ2VuZXJpYwogIC8vLyB0eXBlIHdob3NlIHR5cGUgdmFyaWFibGUgaGF2ZSBub24tdHJpdmlhbCBib3VuZHMuCiAgVFlQRV9WQVJJQUJMRV9CT1VORFNfQ0hFQ0ssCn0KCi8vLyBEZXNjcmliZXMgYSB1c2Ugb2YgYSBtYXAgbGl0ZXJhbCBpbiB0aGUgcHJvZ3JhbS4KY2xhc3MgTWFwTGl0ZXJhbFVzZSB7CiAgZmluYWwgSW50ZXJmYWNlVHlwZSB0eXBlOwogIGZpbmFsIGJvb2wgaXNDb25zdGFudDsKICBmaW5hbCBib29sIGlzRW1wdHk7CgogIE1hcExpdGVyYWxVc2UodGhpcy50eXBlLCB7dGhpcy5pc0NvbnN0YW50OiBmYWxzZSwgdGhpcy5pc0VtcHR5OiBmYWxzZX0pOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiB0eXBlLmhhc2hDb2RlICogMTMgKwogICAgICAgIGlzQ29uc3RhbnQuaGFzaENvZGUgKiAxNyArCiAgICAgICAgaXNFbXB0eS5oYXNoQ29kZSAqIDE5OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBNYXBMaXRlcmFsVXNlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHlwZSA9PSBvdGhlci50eXBlICYmCiAgICAgICAgaXNDb25zdGFudCA9PSBvdGhlci5pc0NvbnN0YW50ICYmCiAgICAgICAgaXNFbXB0eSA9PSBvdGhlci5pc0VtcHR5OwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdNYXBMaXRlcmFsVXNlKCR0eXBlLGlzQ29uc3RhbnQ6JGlzQ29uc3RhbnQsaXNFbXB0eTokaXNFbXB0eSknOwogIH0KfQoKLy8vIERlc2NyaWJlcyBhIHVzZSBvZiBhIHNldCBsaXRlcmFsIGluIHRoZSBwcm9ncmFtLgpjbGFzcyBTZXRMaXRlcmFsVXNlIHsKICBmaW5hbCBJbnRlcmZhY2VUeXBlIHR5cGU7CiAgZmluYWwgYm9vbCBpc0NvbnN0YW50OwogIGZpbmFsIGJvb2wgaXNFbXB0eTsKCiAgU2V0TGl0ZXJhbFVzZSh0aGlzLnR5cGUsIHt0aGlzLmlzQ29uc3RhbnQ6IGZhbHNlLCB0aGlzLmlzRW1wdHk6IGZhbHNlfSk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4KICAgICAgdHlwZS5oYXNoQ29kZSAqIDEzICsgaXNDb25zdGFudC5oYXNoQ29kZSAqIDE3ICsgaXNFbXB0eS5oYXNoQ29kZSAqIDE5OwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFNldExpdGVyYWxVc2UpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0eXBlID09IG90aGVyLnR5cGUgJiYKICAgICAgICBpc0NvbnN0YW50ID09IG90aGVyLmlzQ29uc3RhbnQgJiYKICAgICAgICBpc0VtcHR5ID09IG90aGVyLmlzRW1wdHk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAnU2V0TGl0ZXJhbFVzZSgkdHlwZSxpc0NvbnN0YW50OiRpc0NvbnN0YW50LGlzRW1wdHk6JGlzRW1wdHkpJzsKfQoKLy8vIERlc2NyaWJlcyB0aGUgdXNlIG9mIGEgbGlzdCBsaXRlcmFsIGluIHRoZSBwcm9ncmFtLgpjbGFzcyBMaXN0TGl0ZXJhbFVzZSB7CiAgZmluYWwgSW50ZXJmYWNlVHlwZSB0eXBlOwogIGZpbmFsIGJvb2wgaXNDb25zdGFudDsKICBmaW5hbCBib29sIGlzRW1wdHk7CgogIExpc3RMaXRlcmFsVXNlKHRoaXMudHlwZSwge3RoaXMuaXNDb25zdGFudDogZmFsc2UsIHRoaXMuaXNFbXB0eTogZmFsc2V9KTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gdHlwZS5oYXNoQ29kZSAqIDEzICsKICAgICAgICBpc0NvbnN0YW50Lmhhc2hDb2RlICogMTcgKwogICAgICAgIGlzRW1wdHkuaGFzaENvZGUgKiAxOTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgTGlzdExpdGVyYWxVc2UpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0eXBlID09IG90aGVyLnR5cGUgJiYKICAgICAgICBpc0NvbnN0YW50ID09IG90aGVyLmlzQ29uc3RhbnQgJiYKICAgICAgICBpc0VtcHR5ID09IG90aGVyLmlzRW1wdHk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ0xpc3RMaXRlcmFsVXNlKCR0eXBlLGlzQ29uc3RhbnQ6JGlzQ29uc3RhbnQsaXNFbXB0eTokaXNFbXB0eSknOwogIH0KfQoKLy8vIEEgdXNlIG9mIGBPYmplY3QucnVudGltZVR5cGVgLgpjbGFzcyBSdW50aW1lVHlwZVVzZSB7CiAgLy8vIFRoZSB1c2Uga2luZCBvZiBgT2JqZWN0LnJ1bnRpbWVUeXBlYC4KICBmaW5hbCBSdW50aW1lVHlwZVVzZUtpbmQga2luZDsKCiAgLy8vIFRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgcmVjZWl2ZXIuCiAgZmluYWwgRGFydFR5cGUgcmVjZWl2ZXJUeXBlOwoKICAvLy8gVGhlIHN0YXRpYyB0eXBlIG9mIHRoZSBhcmd1bWVudCBpZiBba2luZF0gaXMgYFJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHNgLgogIGZpbmFsIERhcnRUeXBlIGFyZ3VtZW50VHlwZTsKCiAgUnVudGltZVR5cGVVc2UodGhpcy5raW5kLCB0aGlzLnJlY2VpdmVyVHlwZSwgdGhpcy5hcmd1bWVudFR5cGUpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+CiAgICAgIGtpbmQuaGFzaENvZGUgKiAxMyArCiAgICAgIHJlY2VpdmVyVHlwZS5oYXNoQ29kZSAqIDE3ICsKICAgICAgYXJndW1lbnRUeXBlLmhhc2hDb2RlICogMTk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgUnVudGltZVR5cGVVc2UpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBraW5kID09IG90aGVyLmtpbmQgJiYKICAgICAgICByZWNlaXZlclR5cGUgPT0gb3RoZXIucmVjZWl2ZXJUeXBlICYmCiAgICAgICAgYXJndW1lbnRUeXBlID09IG90aGVyLmFyZ3VtZW50VHlwZTsKICB9CgogIC8vLyBTaG9ydCB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIHVzZSBmb3IgdGVzdGluZy4KICBTdHJpbmcgZ2V0IHNob3J0VGV4dCB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBSdW50aW1lVHlwZVVzZUtpbmQuc3RyaW5nOgogICAgICAgIHNiLndyaXRlKCdzdHJpbmc6Jyk7CiAgICAgICAgc2Iud3JpdGUocmVjZWl2ZXJUeXBlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBSdW50aW1lVHlwZVVzZUtpbmQuZXF1YWxzOgogICAgICAgIHNiLndyaXRlKCdlcXVhbHM6Jyk7CiAgICAgICAgc2Iud3JpdGUocmVjZWl2ZXJUeXBlKTsKICAgICAgICBzYi53cml0ZSgnLycpOwogICAgICAgIHNiLndyaXRlKGFyZ3VtZW50VHlwZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgUnVudGltZVR5cGVVc2VLaW5kLnVua25vd246CiAgICAgICAgc2Iud3JpdGUoJ3Vua25vd246Jyk7CiAgICAgICAgc2Iud3JpdGUocmVjZWl2ZXJUeXBlKTsKICAgICAgICBicmVhazsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1J1bnRpbWVUeXBlVXNlKGtpbmQ9JGtpbmQscmVjZWl2ZXI9JHJlY2VpdmVyVHlwZScKICAgICAgJyxhcmd1bWVudD0kYXJndW1lbnRUeXBlKSc7Cn0KCi8vLyBBIGdlbmVyaWMgaW5zdGFudGlhdGlvbiBvZiBhbiBleHByZXNzaW9uIG9mIHR5cGUgW2Z1bmN0aW9uVHlwZV0gd2l0aCB0aGUKLy8vIGdpdmVuIFt0eXBlQXJndW1lbnRzXS4KY2xhc3MgR2VuZXJpY0luc3RhbnRpYXRpb24gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2dlbmVyaWMtaW5zdGFudGlhdGlvbic7CgogIC8vLyBUaGUgc3RhdGljIHR5cGUgb2YgdGhlIGluc3RhbnRpYXRlZCBleHByZXNzaW9uLgogIGZpbmFsIERhcnRUeXBlIGZ1bmN0aW9uVHlwZTsKCiAgLy8vIFRoZSB0eXBlIGFyZ3VtZW50cyBvZiB0aGUgaW5zdGFudGlhdGlvbi4KICBmaW5hbCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwoKICBHZW5lcmljSW5zdGFudGlhdGlvbih0aGlzLmZ1bmN0aW9uVHlwZSwgdGhpcy50eXBlQXJndW1lbnRzKTsKCiAgZmFjdG9yeSBHZW5lcmljSW5zdGFudGlhdGlvbi5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgRGFydFR5cGUgZnVuY3Rpb25UeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZSgpOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IHNvdXJjZS5yZWFkRGFydFR5cGVzKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEdlbmVyaWNJbnN0YW50aWF0aW9uKGZ1bmN0aW9uVHlwZSwgdHlwZUFyZ3VtZW50cyk7CiAgfQoKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRGFydFR5cGUoZnVuY3Rpb25UeXBlKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZXModHlwZUFyZ3VtZW50cyk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgLy8vIFNob3J0IHRleHR1YWwgcmVwcmVzZW50YXRpb24gdXNlIGZvciB0ZXN0aW5nLgogIFN0cmluZyBnZXQgc2hvcnRUZXh0ID0+ICc8JHt0eXBlQXJndW1lbnRzLmpvaW4oJywnKX0+JzsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PgogICAgICBIYXNoaW5nLmxpc3RIYXNoKHR5cGVBcmd1bWVudHMsIEhhc2hpbmcub2JqZWN0SGFzaChmdW5jdGlvblR5cGUpKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBHZW5lcmljSW5zdGFudGlhdGlvbikgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGZ1bmN0aW9uVHlwZSA9PSBvdGhlci5mdW5jdGlvblR5cGUgJiYKICAgICAgICBlcXVhbEVsZW1lbnRzKHR5cGVBcmd1bWVudHMsIG90aGVyLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdHZW5lcmljSW5zdGFudGlhdGlvbihmdW5jdGlvblR5cGU6JGZ1bmN0aW9uVHlwZSwnCiAgICAgICAgJ3R5cGVBcmd1bWVudHM6JHR5cGVBcmd1bWVudHMpJzsKICB9Cn0KgR8AK09OTSgETzkjASErLhwBOD0PRCABKwoBKhcBLgkBSRABLw4BGRMBJxYBJh0BNg4BLx0BNBABOhgBHBgBHBgBSxQYATEWAUMPAS0NARoUAU0VGAFKFwFDHRsBUDgeAgE1FhwZFgFLAQwVICMfBAEMHC0vISoiBAEMFksEAgE1FhwZFgFLAQwWTQEMHC0vISoiBAEMF0YCATgXHBkWAUwBDBUgIx8EAQwcLTAhKiIEAQwWTAQCASMXLCEBJx8BUB8BQwEMFhsjIgEMHC0wIS4sBAE0GSoUJh0gDyYdIBcgDyceIA8GGgQBDEoiAgFNGx01ATYfAS8mAT8BRxczOxVCBAEoFSYoEwQBNDoBDBZJAQwcLTYxOwQBDBY+KQQCASpwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS9mZWF0dXJlLmRhcnQvc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvdW5pdmVyc2UvdXNlLmRhcnTAAHadLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBUaGlzIGxpYnJhcnkgZGVmaW5lcyBpbmRpdmlkdWFsIHdvcmxkIGltcGFjdHMuCi8vLwovLy8gV2UgY2FsbCB0aGVzZSBidWlsZGluZyBibG9ja3MgYHVzZXNgLiBFYWNoIGB1c2VgIGlzIGEgc2luZ2xlIGltcGFjdCBvZiB0aGUKLy8vIHdvcmxkLiBTb21lIGV4YW1wbGUgdXNlcyBhcmU6Ci8vLwovLy8gICogYW4gaW52b2NhdGlvbiBvZiBhIHRvcCBsZXZlbCBmdW5jdGlvbgovLy8gICogYSBjYWxsIHRvIHRoZSBgZm9vKClgIG1ldGhvZCBvbiBhbiB1bmtub3duIGNsYXNzLgovLy8gICogYW4gaW5zdGFudGlhdGlvbiBvZiBjbGFzcyBUCi8vLwovLy8gVGhlIGRpZmZlcmVudCBjb21waWxlciBzdGFnZXMgY29tYmluZSB0aGVzZSB1c2VzIGludG8gYFdvcmxkSW1wYWN0YCBvYmplY3RzLAovLy8gd2hpY2ggYXJlIGxhdGVyIHVzZWQgdG8gY29uc3RydWN0IGEgY2xvc2VkLXdvcmxkIHVuZGVyc3RhbmRpbmcgb2YgdGhlCi8vLyBwcm9ncmFtLgpsaWJyYXJ5IGRhcnQyanMudW5pdmVyc2UudXNlOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgZXF1YWxFbGVtZW50cywgSGFzaGluZzsKaW1wb3J0ICdjYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CmltcG9ydCAnc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICd3b3JsZF9idWlsZGVyLmRhcnQnIHNob3cgU3Ryb25nTW9kZUNvbnN0cmFpbnQ7CgplbnVtIER5bmFtaWNVc2VLaW5kIHsKICBJTlZPS0UsCiAgR0VULAogIFNFVCwKfQoKLy8vIFRoZSB1c2Ugb2YgYSBkeW5hbWljIHByb3BlcnR5LiBbc2VsZWN0b3JdIGRlZmluZWQgdGhlIG5hbWUgYW5kIGtpbmQgb2YgdGhlCi8vLyBwcm9wZXJ0eSBhbmQgW3JlY2VpdmVyQ29uc3RyYWludF0gZGVmaW5lcyB0aGUga25vd24gY29uc3RyYWludCBmb3IgdGhlCi8vLyBvYmplY3Qgb24gd2hpY2ggdGhlIHByb3BlcnR5IGlzIGFjY2Vzc2VkLgpjbGFzcyBEeW5hbWljVXNlIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdkeW5hbWljLXVzZSc7CgogIGZpbmFsIFNlbGVjdG9yIHNlbGVjdG9yOwogIGZpbmFsIE9iamVjdCByZWNlaXZlckNvbnN0cmFpbnQ7CiAgZmluYWwgTGlzdDxEYXJ0VHlwZT4gX3R5cGVBcmd1bWVudHM7CgogIER5bmFtaWNVc2UodGhpcy5zZWxlY3RvciwgdGhpcy5yZWNlaXZlckNvbnN0cmFpbnQsIHRoaXMuX3R5cGVBcmd1bWVudHMpIHsKICAgIGFzc2VydCgKICAgICAgICBzZWxlY3Rvci5jYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudENvdW50ID09CiAgICAgICAgICAgIChfdHlwZUFyZ3VtZW50cz8ubGVuZ3RoID8/IDApLAogICAgICAgICJUeXBlIGFyZ3VtZW50IGNvdW50IG1pc21hdGNoLiBTZWxlY3RvciBoYXMgIgogICAgICAgICIke3NlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnR9IGJ1dCAiCiAgICAgICAgIiR7X3R5cGVBcmd1bWVudHM/Lmxlbmd0aCA/PyAwfSB3ZXJlIHBhc3NlZC4iKTsKICB9CgogIGZhY3RvcnkgRHluYW1pY1VzZS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBTZWxlY3Rvci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIGJvb2wgaGFzQ29uc3RyYWludCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgT2JqZWN0IHJlY2VpdmVyQ29uc3RyYWludDsKICAgIGlmIChoYXNDb25zdHJhaW50KSB7CiAgICAgIHJlY2VpdmVyQ29uc3RyYWludCA9IHNvdXJjZS5yZWFkQWJzdHJhY3RWYWx1ZSgpOwogICAgfQogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IHNvdXJjZS5yZWFkRGFydFR5cGVzKGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgRHluYW1pY1VzZShzZWxlY3RvciwgcmVjZWl2ZXJDb25zdHJhaW50LCB0eXBlQXJndW1lbnRzKTsKICB9CgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNlbGVjdG9yLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVCb29sKHJlY2VpdmVyQ29uc3RyYWludCAhPSBudWxsKTsKICAgIGlmIChyZWNlaXZlckNvbnN0cmFpbnQgIT0gbnVsbCkgewogICAgICBpZiAocmVjZWl2ZXJDb25zdHJhaW50IGlzIEFic3RyYWN0VmFsdWUpIHsKICAgICAgICBzaW5rLndyaXRlQWJzdHJhY3RWYWx1ZShyZWNlaXZlckNvbnN0cmFpbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgICAiVW5zdXBwb3J0ZWQgcmVjZWl2ZXIgY29uc3RyYWludDogJHtyZWNlaXZlckNvbnN0cmFpbnR9Iik7CiAgICAgIH0KICAgIH0KICAgIHNpbmsud3JpdGVEYXJ0VHlwZXMoX3R5cGVBcmd1bWVudHMsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgLy8vIFNob3J0IHRleHR1YWwgcmVwcmVzZW50YXRpb24gdXNlIGZvciB0ZXN0aW5nLgogIFN0cmluZyBnZXQgc2hvcnRUZXh0IHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGlmIChyZWNlaXZlckNvbnN0cmFpbnQgIT0gbnVsbCkgewogICAgICB2YXIgY29uc3RyYWludCA9IHJlY2VpdmVyQ29uc3RyYWludDsKICAgICAgaWYgKGNvbnN0cmFpbnQgaXMgU3Ryb25nTW9kZUNvbnN0cmFpbnQpIHsKICAgICAgICBpZiAoY29uc3RyYWludC5pc1RoaXMpIHsKICAgICAgICAgIHNiLndyaXRlKCd0aGlzOicpOwogICAgICAgIH0gZWxzZSBpZiAoY29uc3RyYWludC5pc0V4YWN0KSB7CiAgICAgICAgICBzYi53cml0ZSgnZXhhY3Q6Jyk7CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlKGNvbnN0cmFpbnQuY2xzLm5hbWUpOwogICAgICB9IGVsc2UgewogICAgICAgIHNiLndyaXRlKGNvbnN0cmFpbnQpOwogICAgICB9CiAgICAgIHNiLndyaXRlKCcuJyk7CiAgICB9CiAgICBzYi53cml0ZShzZWxlY3Rvci5uYW1lKTsKICAgIGlmICh0eXBlQXJndW1lbnRzICE9IG51bGwgJiYgdHlwZUFyZ3VtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIHNiLndyaXRlKCc8Jyk7CiAgICAgIHNiLndyaXRlKHR5cGVBcmd1bWVudHMuam9pbignLCcpKTsKICAgICAgc2Iud3JpdGUoJz4nKTsKICAgIH0KICAgIGlmIChzZWxlY3Rvci5pc0NhbGwpIHsKICAgICAgc2Iud3JpdGUoc2VsZWN0b3IuY2FsbFN0cnVjdHVyZS5zaG9ydFRleHQpOwogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc1NldHRlcikgewogICAgICBzYi53cml0ZSgnPScpOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBEeW5hbWljVXNlS2luZCBnZXQga2luZCB7CiAgICBpZiAoc2VsZWN0b3IuaXNHZXR0ZXIpIHsKICAgICAgcmV0dXJuIER5bmFtaWNVc2VLaW5kLkdFVDsKICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNTZXR0ZXIpIHsKICAgICAgcmV0dXJuIER5bmFtaWNVc2VLaW5kLlNFVDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBEeW5hbWljVXNlS2luZC5JTlZPS0U7CiAgICB9CiAgfQoKICBMaXN0PERhcnRUeXBlPiBnZXQgdHlwZUFyZ3VtZW50cyA9PiBfdHlwZUFyZ3VtZW50cyA/PyBjb25zdCA8RGFydFR5cGU+W107CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gSGFzaGluZy5saXN0SGFzaCgKICAgICAgdHlwZUFyZ3VtZW50cywgSGFzaGluZy5vYmplY3RzSGFzaChzZWxlY3RvciwgcmVjZWl2ZXJDb25zdHJhaW50KSk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgRHluYW1pY1VzZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHNlbGVjdG9yID09IG90aGVyLnNlbGVjdG9yICYmCiAgICAgICAgcmVjZWl2ZXJDb25zdHJhaW50ID09IG90aGVyLnJlY2VpdmVyQ29uc3RyYWludCAmJgogICAgICAgIGVxdWFsRWxlbWVudHModHlwZUFyZ3VtZW50cywgb3RoZXIudHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHNlbGVjdG9yLCRyZWNlaXZlckNvbnN0cmFpbnQsJHR5cGVBcmd1bWVudHMnOwp9CgplbnVtIFN0YXRpY1VzZUtpbmQgewogIFNUQVRJQ19URUFSX09GRiwKICBTVVBFUl9URUFSX09GRiwKICBTVVBFUl9GSUVMRF9TRVQsCiAgU1VQRVJfR0VULAogIFNVUEVSX1NFVFRFUl9TRVQsCiAgU1VQRVJfSU5WT0tFLAogIElOU1RBTkNFX0ZJRUxEX0dFVCwKICBJTlNUQU5DRV9GSUVMRF9TRVQsCiAgQ0xPU1VSRSwKICBDTE9TVVJFX0NBTEwsCiAgQ0FMTF9NRVRIT0QsCiAgQ09OU1RSVUNUT1JfSU5WT0tFLAogIENPTlNUX0NPTlNUUlVDVE9SX0lOVk9LRSwKICBESVJFQ1RfSU5WT0tFLAogIElOTElOSU5HLAogIFNUQVRJQ19JTlZPS0UsCiAgU1RBVElDX0dFVCwKICBTVEFUSUNfU0VULAogIEZJRUxEX0lOSVQsCiAgRklFTERfQ09OU1RBTlRfSU5JVCwKfQoKLy8vIFN0YXRpY2FsbHkga25vd24gdXNlIG9mIGFuIFtFbnRpdHldLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDcmVhdGUgYmFja2VuZC1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgd2l0aCBiZXR0ZXIKLy8gaW52YXJpYW50cy4KY2xhc3MgU3RhdGljVXNlIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdzdGF0aWMtdXNlJzsKCiAgZmluYWwgRW50aXR5IGVsZW1lbnQ7CiAgZmluYWwgU3RhdGljVXNlS2luZCBraW5kOwogIEBvdmVycmlkZQogIGZpbmFsIGludCBoYXNoQ29kZTsKICBmaW5hbCBJbnRlcmZhY2VUeXBlIHR5cGU7CiAgZmluYWwgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlOwogIGZpbmFsIEltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydDsKICBmaW5hbCBDb25zdGFudFZhbHVlIGNvbnN0YW50OwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHM7CgogIFN0YXRpY1VzZS5pbnRlcm5hbChFbnRpdHkgZWxlbWVudCwgdGhpcy5raW5kLAogICAgICB7dGhpcy50eXBlLAogICAgICB0aGlzLmNhbGxTdHJ1Y3R1cmUsCiAgICAgIHRoaXMuZGVmZXJyZWRJbXBvcnQsCiAgICAgIHRoaXMudHlwZUFyZ3VtZW50cywKICAgICAgdGhpcy5jb25zdGFudH0pCiAgICAgIDogdGhpcy5lbGVtZW50ID0gZWxlbWVudCwKICAgICAgICB0aGlzLmhhc2hDb2RlID0gSGFzaGluZy5saXN0SGFzaChbCiAgICAgICAgICBlbGVtZW50LAogICAgICAgICAga2luZCwKICAgICAgICAgIHR5cGUsCiAgICAgICAgICBIYXNoaW5nLmxpc3RIYXNoKHR5cGVBcmd1bWVudHMpLAogICAgICAgICAgY2FsbFN0cnVjdHVyZSwKICAgICAgICAgIGRlZmVycmVkSW1wb3J0LAogICAgICAgICAgY29uc3RhbnQKICAgICAgICBdKTsKCiAgYm9vbCBfY2hlY2tHZW5lcmljSW52YXJpYW50cygpIHsKICAgIGFzc2VydCgKICAgICAgICAoY2FsbFN0cnVjdHVyZT8udHlwZUFyZ3VtZW50Q291bnQgPz8gMCkgPT0gKHR5cGVBcmd1bWVudHM/Lmxlbmd0aCA/PyAwKSwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIlR5cGUgYXJndW1lbnQgY291bnQgbWlzbWF0Y2guIENhbGwgc3RydWN0dXJlIGhhcyAiCiAgICAgICAgICAgICIke2NhbGxTdHJ1Y3R1cmU/LnR5cGVBcmd1bWVudENvdW50ID8/IDB9IGJ1dCAiCiAgICAgICAgICAgICIke3R5cGVBcmd1bWVudHM/Lmxlbmd0aCA/PyAwfSB3ZXJlIHBhc3NlZCBpbiAkdGhpcy4iKSk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZhY3RvcnkgU3RhdGljVXNlLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCA9IHNvdXJjZS5yZWFkTWVtYmVyKCk7CiAgICBTdGF0aWNVc2VLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oU3RhdGljVXNlS2luZC52YWx1ZXMpOwogICAgSW50ZXJmYWNlVHlwZSB0eXBlID0gc291cmNlLnJlYWREYXJ0VHlwZShhbGxvd051bGw6IHRydWUpOwogICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0KICAgICAgICBzb3VyY2UucmVhZFZhbHVlT3JOdWxsKCgpID0+IENhbGxTdHJ1Y3R1cmUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSkpOwogICAgSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0ID0gc291cmNlLnJlYWRJbXBvcnRPck51bGwoKTsKICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBzb3VyY2UucmVhZENvbnN0YW50T3JOdWxsKCk7CiAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gc291cmNlLnJlYWREYXJ0VHlwZXMoZW1wdHlBc051bGw6IHRydWUpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwga2luZCwKICAgICAgICB0eXBlOiB0eXBlLAogICAgICAgIGNhbGxTdHJ1Y3R1cmU6IGNhbGxTdHJ1Y3R1cmUsCiAgICAgICAgZGVmZXJyZWRJbXBvcnQ6IGRlZmVycmVkSW1wb3J0LAogICAgICAgIGNvbnN0YW50OiBjb25zdGFudCwKICAgICAgICB0eXBlQXJndW1lbnRzOiB0eXBlQXJndW1lbnRzKTsKICB9CgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGFzc2VydChlbGVtZW50IGlzIE1lbWJlckVudGl0eSwgIlVuc3VwcG9ydGVkIGVudGl0eTogJGVsZW1lbnQiKTsKICAgIHNpbmsud3JpdGVNZW1iZXIoZWxlbWVudCk7CiAgICBzaW5rLndyaXRlRW51bShraW5kKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZSh0eXBlLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZVZhbHVlT3JOdWxsKAogICAgICAgIGNhbGxTdHJ1Y3R1cmUsIChDYWxsU3RydWN0dXJlIGMpID0+IGMud3JpdGVUb0RhdGFTaW5rKHNpbmspKTsKICAgIHNpbmsud3JpdGVJbXBvcnRPck51bGwoZGVmZXJyZWRJbXBvcnQpOwogICAgc2luay53cml0ZUNvbnN0YW50T3JOdWxsKGNvbnN0YW50KTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZXModHlwZUFyZ3VtZW50cywgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICAvLy8gU2hvcnQgdGV4dHVhbCByZXByZXNlbnRhdGlvbiB1c2UgZm9yIHRlc3RpbmcuCiAgU3RyaW5nIGdldCBzaG9ydFRleHQgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5JTlNUQU5DRV9GSUVMRF9TRVQ6CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9GSUVMRF9TRVQ6CiAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9TRVRURVJfU0VUOgogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX1NFVDoKICAgICAgICBzYi53cml0ZSgnc2V0OicpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuRklFTERfSU5JVDoKICAgICAgICBzYi53cml0ZSgnaW5pdDonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNMT1NVUkU6CiAgICAgICAgc2Iud3JpdGUoJ2RlZjonKTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgIH0KICAgIGlmIChlbGVtZW50IGlzIE1lbWJlckVudGl0eSkgewogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gZWxlbWVudDsKICAgICAgaWYgKG1lbWJlci5lbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgICAgc2Iud3JpdGUobWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWUpOwogICAgICAgIHNiLndyaXRlKCcuJyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChlbGVtZW50Lm5hbWUgPT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnPGFub255bW91cz4nKTsKICAgIH0gZWxzZSB7CiAgICAgIHNiLndyaXRlKGVsZW1lbnQubmFtZSk7CiAgICB9CiAgICBpZiAodHlwZUFyZ3VtZW50cyAhPSBudWxsICYmIHR5cGVBcmd1bWVudHMuaXNOb3RFbXB0eSkgewogICAgICBzYi53cml0ZSgnPCcpOwogICAgICBzYi53cml0ZSh0eXBlQXJndW1lbnRzLmpvaW4oJywnKSk7CiAgICAgIHNiLndyaXRlKCc+Jyk7CiAgICB9CiAgICBpZiAoY2FsbFN0cnVjdHVyZSAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCcoJyk7CiAgICAgIHNiLndyaXRlKGNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50Q291bnQpOwogICAgICBpZiAoY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50Q291bnQgPiAwKSB7CiAgICAgICAgc2Iud3JpdGUoJywnKTsKICAgICAgICBzYi53cml0ZShjYWxsU3RydWN0dXJlLmdldE9yZGVyZWROYW1lZEFyZ3VtZW50cygpLmpvaW4oJywnKSk7CiAgICAgIH0KICAgICAgc2Iud3JpdGUoJyknKTsKICAgIH0KICAgIGlmIChkZWZlcnJlZEltcG9ydCAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCd7Jyk7CiAgICAgIHNiLndyaXRlKGRlZmVycmVkSW1wb3J0Lm5hbWUpOwogICAgICBzYi53cml0ZSgnfScpOwogICAgfQogICAgaWYgKGNvbnN0YW50ICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJz0nKTsKICAgICAgc2Iud3JpdGUoY29uc3RhbnQudG9TdHJ1Y3R1cmVkVGV4dCgpKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgLy8vIEludm9jYXRpb24gb2YgYSBzdGF0aWMgb3IgdG9wLWxldmVsIFtlbGVtZW50XSB3aXRoIHRoZSBnaXZlbgogIC8vLyBbY2FsbFN0cnVjdHVyZV0uCiAgZmFjdG9yeSBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50LCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUsCiAgICAgIFtMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLCBJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnRdKSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc1N0YXRpYyB8fCBlbGVtZW50LmlzVG9wTGV2ZWwsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJTdGF0aWMgaW52b2tlIGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhIHRvcC1sZXZlbCAiCiAgICAgICAgICAgICJvciBzdGF0aWMgbWV0aG9kLiIpKTsKICAgIGFzc2VydChlbGVtZW50LmlzRnVuY3Rpb24sCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIlN0YXRpYyBnZXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGEgZnVuY3Rpb24uIikpOwogICAgYXNzZXJ0KAogICAgICAgIGNhbGxTdHJ1Y3R1cmUgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LAogICAgICAgICAgICAiTm90IENhbGxTdHJ1Y3R1cmUgZm9yIHN0YXRpYyBpbnZvY2F0aW9uIG9mIGVsZW1lbnQgJGVsZW1lbnQuIikpOwoKICAgIFN0YXRpY1VzZSBzdGF0aWNVc2UgPSBuZXcgU3RhdGljVXNlLmludGVybmFsKAogICAgICAgIGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1RBVElDX0lOVk9LRSwKICAgICAgICBjYWxsU3RydWN0dXJlOiBjYWxsU3RydWN0dXJlLAogICAgICAgIHR5cGVBcmd1bWVudHM6IHR5cGVBcmd1bWVudHMsCiAgICAgICAgZGVmZXJyZWRJbXBvcnQ6IGRlZmVycmVkSW1wb3J0KTsKICAgIGFzc2VydChzdGF0aWNVc2UuX2NoZWNrR2VuZXJpY0ludmFyaWFudHMoKSk7CiAgICByZXR1cm4gc3RhdGljVXNlOwogIH0KCiAgLy8vIENsb3N1cml6YXRpb24gb2YgYSBzdGF0aWMgb3IgdG9wLWxldmVsIGZ1bmN0aW9uIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5zdGF0aWNUZWFyT2ZmKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsCiAgICAgIFtJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnRdKSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc1N0YXRpYyB8fCBlbGVtZW50LmlzVG9wTGV2ZWwsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJTdGF0aWMgdGVhci1vZmYgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGEgdG9wLWxldmVsICIKICAgICAgICAgICAgIm9yIHN0YXRpYyBtZXRob2QuIikpOwogICAgYXNzZXJ0KGVsZW1lbnQuaXNGdW5jdGlvbiwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LCAiU3RhdGljIGdldCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSBmdW5jdGlvbi4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLlNUQVRJQ19URUFSX09GRiwKICAgICAgICBkZWZlcnJlZEltcG9ydDogZGVmZXJyZWRJbXBvcnQpOwogIH0KCiAgLy8vIFJlYWQgYWNjZXNzIG9mIGEgc3RhdGljIG9yIHRvcC1sZXZlbCBmaWVsZCBvciBnZXR0ZXIgW2VsZW1lbnRdLgogIGZhY3RvcnkgU3RhdGljVXNlLnN0YXRpY0dldChNZW1iZXJFbnRpdHkgZWxlbWVudCwKICAgICAgW0ltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydF0pIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzU3RhdGljIHx8IGVsZW1lbnQuaXNUb3BMZXZlbCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIlN0YXRpYyBnZXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGEgdG9wLWxldmVsICIKICAgICAgICAgICAgIm9yIHN0YXRpYyBmaWVsZCBvciBnZXR0ZXIuIikpOwogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNGaWVsZCB8fCBlbGVtZW50LmlzR2V0dGVyLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsCiAgICAgICAgICAgICJTdGF0aWMgZ2V0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhIGZpZWxkIG9yIGEgZ2V0dGVyLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1RBVElDX0dFVCwKICAgICAgICBkZWZlcnJlZEltcG9ydDogZGVmZXJyZWRJbXBvcnQpOwogIH0KCiAgLy8vIFdyaXRlIGFjY2VzcyBvZiBhIHN0YXRpYyBvciB0b3AtbGV2ZWwgZmllbGQgb3Igc2V0dGVyIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5zdGF0aWNTZXQoTWVtYmVyRW50aXR5IGVsZW1lbnQsCiAgICAgIFtJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnRdKSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc1N0YXRpYyB8fCBlbGVtZW50LmlzVG9wTGV2ZWwsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJTdGF0aWMgc2V0IGVsZW1lbnQgJGVsZW1lbnQgIgogICAgICAgICAgICAibXVzdCBiZSBhIHRvcC1sZXZlbCBvciBzdGF0aWMgbWV0aG9kLiIpKTsKICAgIGFzc2VydCgKICAgICAgICAoZWxlbWVudC5pc0ZpZWxkICYmIGVsZW1lbnQuaXNBc3NpZ25hYmxlKSB8fCBlbGVtZW50LmlzU2V0dGVyLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsCiAgICAgICAgICAgICJTdGF0aWMgc2V0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhIGZpZWxkIG9yIGEgc2V0dGVyLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1RBVElDX1NFVCwKICAgICAgICBkZWZlcnJlZEltcG9ydDogZGVmZXJyZWRJbXBvcnQpOwogIH0KCiAgLy8vIEludm9jYXRpb24gb2YgdGhlIGxhenkgaW5pdGlhbGl6ZXIgZm9yIGEgc3RhdGljIG9yIHRvcC1sZXZlbCBmaWVsZAogIC8vLyBbZWxlbWVudF0uCiAgZmFjdG9yeSBTdGF0aWNVc2Uuc3RhdGljSW5pdChGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc1N0YXRpYyB8fCBlbGVtZW50LmlzVG9wTGV2ZWwsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJTdGF0aWMgaW5pdCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSB0b3AtbGV2ZWwgIgogICAgICAgICAgICAib3Igc3RhdGljIG1ldGhvZC4iKSk7CiAgICBhc3NlcnQoZWxlbWVudC5pc0ZpZWxkLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsICJTdGF0aWMgaW5pdCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSBmaWVsZC4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLkZJRUxEX0lOSVQpOwogIH0KCiAgLy8vIEludm9jYXRpb24gb2YgYSBzdXBlciBtZXRob2QgW2VsZW1lbnRdIHdpdGggdGhlIGdpdmVuIFtjYWxsU3RydWN0dXJlXS4KICBmYWN0b3J5IFN0YXRpY1VzZS5zdXBlckludm9rZSgKICAgICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlLAogICAgICBbTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50c10pIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwKICAgICAgICAgICAgIlN1cGVyIGludm9rZSBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYW4gaW5zdGFuY2UgbWV0aG9kLiIpKTsKICAgIGFzc2VydCgKICAgICAgICBjYWxsU3RydWN0dXJlICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwKICAgICAgICAgICAgIk5vdCBDYWxsU3RydWN0dXJlIGZvciBzdXBlciBpbnZvY2F0aW9uIG9mIGVsZW1lbnQgJGVsZW1lbnQuIikpOwogICAgU3RhdGljVXNlIHN0YXRpY1VzZSA9IG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoCiAgICAgICAgZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVVBFUl9JTlZPS0UsCiAgICAgICAgY2FsbFN0cnVjdHVyZTogY2FsbFN0cnVjdHVyZSwgdHlwZUFyZ3VtZW50czogdHlwZUFyZ3VtZW50cyk7CiAgICBhc3NlcnQoc3RhdGljVXNlLl9jaGVja0dlbmVyaWNJbnZhcmlhbnRzKCkpOwogICAgcmV0dXJuIHN0YXRpY1VzZTsKICB9CgogIC8vLyBSZWFkIGFjY2VzcyBvZiBhIHN1cGVyIGZpZWxkIG9yIGdldHRlciBbZWxlbWVudF0uCiAgZmFjdG9yeSBTdGF0aWNVc2Uuc3VwZXJHZXQoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsICJTdXBlciBnZXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGFuIGluc3RhbmNlIG1ldGhvZC4iKSk7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0ZpZWxkIHx8IGVsZW1lbnQuaXNHZXR0ZXIsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwKICAgICAgICAgICAgIlN1cGVyIGdldCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSBmaWVsZCBvciBhIGdldHRlci4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLlNVUEVSX0dFVCk7CiAgfQoKICAvLy8gV3JpdGUgYWNjZXNzIG9mIGEgc3VwZXIgZmllbGQgW2VsZW1lbnRdLgogIGZhY3RvcnkgU3RhdGljVXNlLnN1cGVyRmllbGRTZXQoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwgIlN1cGVyIHNldCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYW4gaW5zdGFuY2UgbWV0aG9kLiIpKTsKICAgIGFzc2VydChlbGVtZW50LmlzRmllbGQsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIlN1cGVyIHNldCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSBmaWVsZC4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLlNVUEVSX0ZJRUxEX1NFVCk7CiAgfQoKICAvLy8gV3JpdGUgYWNjZXNzIG9mIGEgc3VwZXIgc2V0dGVyIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5zdXBlclNldHRlclNldChGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBlbGVtZW50LCAiU3VwZXIgc2V0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBtZXRob2QuIikpOwogICAgYXNzZXJ0KGVsZW1lbnQuaXNTZXR0ZXIsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIlN1cGVyIHNldCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSBzZXR0ZXIuIikpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVVBFUl9TRVRURVJfU0VUKTsKICB9CgogIC8vLyBDbG9zdXJpemF0aW9uIG9mIGEgc3VwZXIgbWV0aG9kIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5zdXBlclRlYXJPZmYoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciAmJiBlbGVtZW50LmlzRnVuY3Rpb24sCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwKICAgICAgICAgICAgIlN1cGVyIGludm9rZSBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYW4gaW5zdGFuY2UgbWV0aG9kLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1VQRVJfVEVBUl9PRkYpOwogIH0KCiAgLy8vIEludm9jYXRpb24gb2YgYSBjb25zdHJ1Y3RvciBbZWxlbWVudF0gdGhyb3VnaCBhIHRoaXMgb3Igc3VwZXIKICAvLy8gY29uc3RydWN0b3IgY2FsbCB3aXRoIHRoZSBnaXZlbiBbY2FsbFN0cnVjdHVyZV0uCiAgZmFjdG9yeSBTdGF0aWNVc2Uuc3VwZXJDb25zdHJ1Y3Rvckludm9rZSgKICAgICAgQ29uc3RydWN0b3JFbnRpdHkgZWxlbWVudCwgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0dlbmVyYXRpdmVDb25zdHJ1Y3RvciwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIkNvbnN0cnVjdG9yIGludm9rZSBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSAiCiAgICAgICAgICAgICJnZW5lcmF0aXZlIGNvbnN0cnVjdG9yLiIpKTsKICAgIGFzc2VydCgKICAgICAgICBjYWxsU3RydWN0dXJlICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJOb3QgQ2FsbFN0cnVjdHVyZSBmb3Igc3VwZXIgY29uc3RydWN0b3IgaW52b2NhdGlvbiBvZiBlbGVtZW50ICIKICAgICAgICAgICAgIiRlbGVtZW50LiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1RBVElDX0lOVk9LRSwKICAgICAgICBjYWxsU3RydWN0dXJlOiBjYWxsU3RydWN0dXJlKTsKICB9CgogIC8vLyBJbnZvY2F0aW9uIG9mIGEgY29uc3RydWN0b3IgKGJvZHkpIFtlbGVtZW50XSB0aHJvdWdoIGEgdGhpcyBvciBzdXBlcgogIC8vLyBjb25zdHJ1Y3RvciBjYWxsIHdpdGggdGhlIGdpdmVuIFtjYWxsU3RydWN0dXJlXS4KICBmYWN0b3J5IFN0YXRpY1VzZS5jb25zdHJ1Y3RvckJvZHlJbnZva2UoCiAgICAgIENvbnN0cnVjdG9yQm9keUVudGl0eSBlbGVtZW50LCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpIHsKICAgIGFzc2VydCgKICAgICAgICBjYWxsU3RydWN0dXJlICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJOb3QgQ2FsbFN0cnVjdHVyZSBmb3IgY29uc3RydWN0b3IgYm9keSBpbnZvY2F0aW9uIG9mIGVsZW1lbnQgIgogICAgICAgICAgICAiJGVsZW1lbnQuIikpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVEFUSUNfSU5WT0tFLAogICAgICAgIGNhbGxTdHJ1Y3R1cmU6IGNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgLy8vIERpcmVjdCBpbnZvY2F0aW9uIG9mIGEgZ2VuZXJhdG9yIChib2R5KSBbZWxlbWVudF0sIGFzIGEgc3RhdGljIGNhbGwgb3IKICAvLy8gdGhyb3VnaCBhIHRoaXMgb3Igc3VwZXIgY29uc3RydWN0b3IgY2FsbC4KICBmYWN0b3J5IFN0YXRpY1VzZS5nZW5lcmF0b3JCb2R5SW52b2tlKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1RBVElDX0lOVk9LRSwKICAgICAgICBjYWxsU3RydWN0dXJlOiBDYWxsU3RydWN0dXJlLk5PX0FSR1MpOwogIH0KCiAgLy8vIERpcmVjdCBpbnZvY2F0aW9uIG9mIGEgbWV0aG9kIFtlbGVtZW50XSB3aXRoIHRoZSBnaXZlbiBbY2FsbFN0cnVjdHVyZV0uCiAgZmFjdG9yeSBTdGF0aWNVc2UuZGlyZWN0SW52b2tlKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsCiAgICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LAogICAgICAgICAgICAiRGlyZWN0IGludm9rZSBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYW4gaW5zdGFuY2UgbWVtYmVyLiIpKTsKICAgIGFzc2VydChlbGVtZW50LmlzRnVuY3Rpb24sCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIkRpcmVjdCBpbnZva2UgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGEgbWV0aG9kLiIpKTsKICAgIFN0YXRpY1VzZSBzdGF0aWNVc2UgPSBuZXcgU3RhdGljVXNlLmludGVybmFsKAogICAgICAgIGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuRElSRUNUX0lOVk9LRSwKICAgICAgICBjYWxsU3RydWN0dXJlOiBjYWxsU3RydWN0dXJlLCB0eXBlQXJndW1lbnRzOiB0eXBlQXJndW1lbnRzKTsKICAgIGFzc2VydChzdGF0aWNVc2UuX2NoZWNrR2VuZXJpY0ludmFyaWFudHMoKSk7CiAgICByZXR1cm4gc3RhdGljVXNlOwogIH0KCiAgLy8vIERpcmVjdCByZWFkIGFjY2VzcyBvZiBhIGZpZWxkIG9yIGdldHRlciBbZWxlbWVudF0uCiAgZmFjdG9yeSBTdGF0aWNVc2UuZGlyZWN0R2V0KE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsCiAgICAgICAgICAgICJEaXJlY3QgZ2V0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBtZW1iZXIuIikpOwogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNGaWVsZCB8fCBlbGVtZW50LmlzR2V0dGVyLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsCiAgICAgICAgICAgICJEaXJlY3QgZ2V0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhIGZpZWxkIG9yIGEgZ2V0dGVyLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuU1RBVElDX0dFVCk7CiAgfQoKICAvLy8gRGlyZWN0IHdyaXRlIGFjY2VzcyBvZiBhIGZpZWxkIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5kaXJlY3RTZXQoRmllbGRFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LAogICAgICAgICAgICAiRGlyZWN0IHNldCBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYW4gaW5zdGFuY2UgbWVtYmVyLiIpKTsKICAgIGFzc2VydChlbGVtZW50LmlzRmllbGQsCiAgICAgICAgZmFpbGVkQXQoZWxlbWVudCwgIkRpcmVjdCBzZXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGEgZmllbGQuIikpOwogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVEFUSUNfU0VUKTsKICB9CgogIC8vLyBDb25zdHJ1Y3RvciBpbnZvY2F0aW9uIG9mIFtlbGVtZW50XSB3aXRoIHRoZSBnaXZlbiBbY2FsbFN0cnVjdHVyZV0uCiAgZmFjdG9yeSBTdGF0aWNVc2UuY29uc3RydWN0b3JJbnZva2UoCiAgICAgIENvbnN0cnVjdG9yRW50aXR5IGVsZW1lbnQsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNDb25zdHJ1Y3RvciwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LAogICAgICAgICAgICAiQ29uc3RydWN0b3IgaW52b2NhdGlvbiBlbGVtZW50ICRlbGVtZW50IG11c3QgYmUgYSBjb25zdHJ1Y3Rvci4iKSk7CiAgICBhc3NlcnQoCiAgICAgICAgY2FsbFN0cnVjdHVyZSAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAiTm90IENhbGxTdHJ1Y3R1cmUgZm9yIGNvbnN0cnVjdG9yIGludm9jYXRpb24gb2YgZWxlbWVudCAiCiAgICAgICAgICAgICIkZWxlbWVudC4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLlNUQVRJQ19JTlZPS0UsCiAgICAgICAgY2FsbFN0cnVjdHVyZTogY2FsbFN0cnVjdHVyZSk7CiAgfQoKICAvLy8gQ29uc3RydWN0b3IgaW52b2NhdGlvbiBvZiBbZWxlbWVudF0gd2l0aCB0aGUgZ2l2ZW4gW2NhbGxTdHJ1Y3R1cmVdIG9uCiAgLy8vIFt0eXBlXS4KICBmYWN0b3J5IFN0YXRpY1VzZS50eXBlZENvbnN0cnVjdG9ySW52b2tlKAogICAgICBDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50LAogICAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUsCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwKICAgICAgSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0KSB7CiAgICBhc3NlcnQodHlwZSAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsICJObyB0eXBlIHByb3ZpZGVkIGZvciBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uLiIpKTsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzQ29uc3RydWN0b3IsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJUeXBlZCBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uIGVsZW1lbnQgJGVsZW1lbnQgIgogICAgICAgICAgICAibXVzdCBiZSBhIGNvbnN0cnVjdG9yLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuQ09OU1RSVUNUT1JfSU5WT0tFLAogICAgICAgIHR5cGU6IHR5cGUsCiAgICAgICAgY2FsbFN0cnVjdHVyZTogY2FsbFN0cnVjdHVyZSwKICAgICAgICBkZWZlcnJlZEltcG9ydDogZGVmZXJyZWRJbXBvcnQpOwogIH0KCiAgLy8vIENvbnN0YW50IGNvbnN0cnVjdG9yIGludm9jYXRpb24gb2YgW2VsZW1lbnRdIHdpdGggdGhlIGdpdmVuCiAgLy8vIFtjYWxsU3RydWN0dXJlXSBvbiBbdHlwZV0uCiAgZmFjdG9yeSBTdGF0aWNVc2UuY29uc3RDb25zdHJ1Y3Rvckludm9rZSgKICAgICAgQ29uc3RydWN0b3JFbnRpdHkgZWxlbWVudCwKICAgICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlLAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUsCiAgICAgIEltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydCkgewogICAgYXNzZXJ0KHR5cGUgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LCAiTm8gdHlwZSBwcm92aWRlZCBmb3IgY29uc3RydWN0b3IgaW52b2NhdGlvbi4iKSk7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0NvbnN0cnVjdG9yLAogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICAiQ29uc3QgY29uc3RydWN0b3IgaW52b2NhdGlvbiBlbGVtZW50ICRlbGVtZW50ICIKICAgICAgICAgICAgIm11c3QgYmUgYSBjb25zdHJ1Y3Rvci4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbCgKICAgICAgICBlbGVtZW50LCBTdGF0aWNVc2VLaW5kLkNPTlNUX0NPTlNUUlVDVE9SX0lOVk9LRSwKICAgICAgICB0eXBlOiB0eXBlLAogICAgICAgIGNhbGxTdHJ1Y3R1cmU6IGNhbGxTdHJ1Y3R1cmUsCiAgICAgICAgZGVmZXJyZWRJbXBvcnQ6IGRlZmVycmVkSW1wb3J0KTsKICB9CgogIC8vLyBJbml0aWFsaXphdGlvbiBvZiBhbiBpbnN0YW5jZSBmaWVsZCBbZWxlbWVudF0uCiAgZmFjdG9yeSBTdGF0aWNVc2UuZmllbGRJbml0KEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydCgKICAgICAgICBlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsICJGaWVsZCBpbml0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBmaWVsZC4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLkZJRUxEX0lOSVQpOwogIH0KCiAgLy8vIENvbnN0YW50IGluaXRpYWxpemF0aW9uIG9mIGFuIGluc3RhbmNlIGZpZWxkIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5maWVsZENvbnN0YW50SW5pdCgKICAgICAgRmllbGRFbnRpdHkgZWxlbWVudCwgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgYXNzZXJ0KAogICAgICAgIGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwgIkZpZWxkIGluaXQgZWxlbWVudCAkZWxlbWVudCBtdXN0IGJlIGFuIGluc3RhbmNlIGZpZWxkLiIpKTsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuRklFTERfQ09OU1RBTlRfSU5JVCwKICAgICAgICBjb25zdGFudDogY29uc3RhbnQpOwogIH0KCiAgLy8vIFJlYWQgYWNjZXNzIG9mIGFuIGluc3RhbmNlIGZpZWxkIG9yIGJveGVkIGZpZWxkIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5maWVsZEdldChGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyIHx8IGVsZW1lbnQgaXMgSlJlY29yZEZpZWxkLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsCiAgICAgICAgICAgICJGaWVsZCBpbml0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvciBib3hlZCBmaWVsZC4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLklOU1RBTkNFX0ZJRUxEX0dFVCk7CiAgfQoKICAvLy8gV3JpdGUgYWNjZXNzIG9mIGFuIGluc3RhbmNlIGZpZWxkIG9yIGJveGVkIGZpZWxkIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5maWVsZFNldChGaWVsZEVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoCiAgICAgICAgZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyIHx8IGVsZW1lbnQgaXMgSlJlY29yZEZpZWxkLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsCiAgICAgICAgICAgICJGaWVsZCBpbml0IGVsZW1lbnQgJGVsZW1lbnQgbXVzdCBiZSBhbiBpbnN0YW5jZSBvciBib3hlZCBmaWVsZC4iKSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1VzZS5pbnRlcm5hbChlbGVtZW50LCBTdGF0aWNVc2VLaW5kLklOU1RBTkNFX0ZJRUxEX1NFVCk7CiAgfQoKICAvLy8gUmVhZCBvZiBhIGxvY2FsIGZ1bmN0aW9uIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5jbG9zdXJlKExvY2FsIGVsZW1lbnQpIHsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuQ0xPU1VSRSk7CiAgfQoKICAvLy8gQW4gaW52b2NhdGlvbiBvZiBhIGxvY2FsIGZ1bmN0aW9uIFtlbGVtZW50XSB3aXRoIHRoZSBwcm92aWRlZAogIC8vLyBbY2FsbFN0cnVjdHVyZV0gYW5kIFt0eXBlQXJndW1lbnRzXS4KICBmYWN0b3J5IFN0YXRpY1VzZS5jbG9zdXJlQ2FsbChMb2NhbCBlbGVtZW50LCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUsCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIFN0YXRpY1VzZSBzdGF0aWNVc2UgPSBuZXcgU3RhdGljVXNlLmludGVybmFsKAogICAgICAgIGVsZW1lbnQsIFN0YXRpY1VzZUtpbmQuQ0xPU1VSRV9DQUxMLAogICAgICAgIGNhbGxTdHJ1Y3R1cmU6IGNhbGxTdHJ1Y3R1cmUsIHR5cGVBcmd1bWVudHM6IHR5cGVBcmd1bWVudHMpOwogICAgYXNzZXJ0KHN0YXRpY1VzZS5fY2hlY2tHZW5lcmljSW52YXJpYW50cygpKTsKICAgIHJldHVybiBzdGF0aWNVc2U7CiAgfQoKICAvLy8gUmVhZCBvZiBhIGNhbGwgW21ldGhvZF0gb24gYSBjbG9zdXJlQ2xhc3MuCiAgZmFjdG9yeSBTdGF0aWNVc2UuY2FsbE1ldGhvZChGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgIHJldHVybiBuZXcgU3RhdGljVXNlLmludGVybmFsKG1ldGhvZCwgU3RhdGljVXNlS2luZC5DQUxMX01FVEhPRCk7CiAgfQoKICAvLy8gSW1wbGljaXQgbWV0aG9kL2NvbnN0cnVjdG9yIGludm9jYXRpb24gb2YgW2VsZW1lbnRdIGNyZWF0ZWQgYnkgdGhlCiAgLy8vIGJhY2tlbmQuCiAgZmFjdG9yeSBTdGF0aWNVc2UuaW1wbGljaXRJbnZva2UoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5TVEFUSUNfSU5WT0tFLAogICAgICAgIGNhbGxTdHJ1Y3R1cmU6IGVsZW1lbnQucGFyYW1ldGVyU3RydWN0dXJlLmNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgLy8vIElubGluaW5nIG9mIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5jb25zdHJ1Y3RvcklubGluaW5nKAogICAgICBDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50LCBJbnRlcmZhY2VUeXBlIGluc3RhbmNlVHlwZSkgewogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5JTkxJTklORywKICAgICAgICB0eXBlOiBpbnN0YW5jZVR5cGUpOwogIH0KCiAgLy8vIElubGluaW5nIG9mIFtlbGVtZW50XS4KICBmYWN0b3J5IFN0YXRpY1VzZS5tZXRob2RJbmxpbmluZygKICAgICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2UuaW50ZXJuYWwoZWxlbWVudCwgU3RhdGljVXNlS2luZC5JTkxJTklORywKICAgICAgICB0eXBlQXJndW1lbnRzOiB0eXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBvdGhlciBpcyBTdGF0aWNVc2UgJiYKICAgICAgICBlbGVtZW50ID09IG90aGVyLmVsZW1lbnQgJiYKICAgICAgICBraW5kID09IG90aGVyLmtpbmQgJiYKICAgICAgICB0eXBlID09IG90aGVyLnR5cGUgJiYKICAgICAgICBjYWxsU3RydWN0dXJlID09IG90aGVyLmNhbGxTdHJ1Y3R1cmUgJiYKICAgICAgICBlcXVhbEVsZW1lbnRzKHR5cGVBcmd1bWVudHMsIG90aGVyLnR5cGVBcmd1bWVudHMpICYmCiAgICAgICAgZGVmZXJyZWRJbXBvcnQgPT0gb3RoZXIuZGVmZXJyZWRJbXBvcnQgJiYKICAgICAgICBjb25zdGFudCA9PSBvdGhlci5jb25zdGFudDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICdTdGF0aWNVc2UoJGVsZW1lbnQsJGtpbmQsJHR5cGUsJHR5cGVBcmd1bWVudHMsJGNhbGxTdHJ1Y3R1cmUpJzsKfQoKZW51bSBUeXBlVXNlS2luZCB7CiAgSVNfQ0hFQ0ssCiAgQVNfQ0FTVCwKICBDQVRDSF9UWVBFLAogIFRZUEVfTElURVJBTCwKICBJTlNUQU5USUFUSU9OLAogIE5BVElWRV9JTlNUQU5USUFUSU9OLAogIENPTlNUX0lOU1RBTlRJQVRJT04sCiAgSU1QTElDSVRfQ0FTVCwKICBQQVJBTUVURVJfQ0hFQ0ssCiAgUlRJX1ZBTFVFLAogIFRZUEVfQVJHVU1FTlQsCn0KCi8vLyBVc2Ugb2YgYSBbRGFydFR5cGVdLgpjbGFzcyBUeXBlVXNlIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICd0eXBlLXVzZSc7CgogIGZpbmFsIERhcnRUeXBlIHR5cGU7CiAgZmluYWwgVHlwZVVzZUtpbmQga2luZDsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGU7CiAgZmluYWwgSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0OwoKICBUeXBlVXNlLmludGVybmFsKERhcnRUeXBlIHR5cGUsIFR5cGVVc2VLaW5kIGtpbmQsIFt0aGlzLmRlZmVycmVkSW1wb3J0XSkKICAgICAgOiB0aGlzLnR5cGUgPSB0eXBlLAogICAgICAgIHRoaXMua2luZCA9IGtpbmQsCiAgICAgICAgdGhpcy5oYXNoQ29kZSA9IEhhc2hpbmcub2JqZWN0c0hhc2godHlwZSwga2luZCwgZGVmZXJyZWRJbXBvcnQpOwoKICBmYWN0b3J5IFR5cGVVc2UucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIERhcnRUeXBlIHR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlKCk7CiAgICBUeXBlVXNlS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKFR5cGVVc2VLaW5kLnZhbHVlcyk7CiAgICBJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnQgPSBzb3VyY2UucmVhZEltcG9ydE9yTnVsbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBUeXBlVXNlLmludGVybmFsKHR5cGUsIGtpbmQsIGRlZmVycmVkSW1wb3J0KTsKICB9CgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZSh0eXBlKTsKICAgIHNpbmsud3JpdGVFbnVtKGtpbmQpOwogICAgc2luay53cml0ZUltcG9ydE9yTnVsbChkZWZlcnJlZEltcG9ydCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgLy8vIFNob3J0IHRleHR1YWwgcmVwcmVzZW50YXRpb24gdXNlIGZvciB0ZXN0aW5nLgogIFN0cmluZyBnZXQgc2hvcnRUZXh0IHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIFR5cGVVc2VLaW5kLklTX0NIRUNLOgogICAgICAgIHNiLndyaXRlKCdpczonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5BU19DQVNUOgogICAgICAgIHNiLndyaXRlKCdhczonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5DQVRDSF9UWVBFOgogICAgICAgIHNiLndyaXRlKCdjYXRjaDonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5UWVBFX0xJVEVSQUw6CiAgICAgICAgc2Iud3JpdGUoJ2xpdDonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5JTlNUQU5USUFUSU9OOgogICAgICAgIHNiLndyaXRlKCdpbnN0OicpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLkNPTlNUX0lOU1RBTlRJQVRJT046CiAgICAgICAgc2Iud3JpdGUoJ2NvbnN0OicpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLk5BVElWRV9JTlNUQU5USUFUSU9OOgogICAgICAgIHNiLndyaXRlKCduYXRpdmU6Jyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgVHlwZVVzZUtpbmQuSU1QTElDSVRfQ0FTVDoKICAgICAgICBzYi53cml0ZSgnaW1wbDonKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBUeXBlVXNlS2luZC5QQVJBTUVURVJfQ0hFQ0s6CiAgICAgICAgc2Iud3JpdGUoJ3BhcmFtOicpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLlJUSV9WQUxVRToKICAgICAgICBzYi53cml0ZSgncnRpOicpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFR5cGVVc2VLaW5kLlRZUEVfQVJHVU1FTlQ6CiAgICAgICAgc2Iud3JpdGUoJ3R5cGVBcmc6Jyk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBzYi53cml0ZSh0eXBlKTsKICAgIGlmIChkZWZlcnJlZEltcG9ydCAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCd7Jyk7CiAgICAgIHNiLndyaXRlKGRlZmVycmVkSW1wb3J0Lm5hbWUpOwogICAgICBzYi53cml0ZSgnfScpOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICAvLy8gW3R5cGVdIHVzZWQgaW4gYW4gaXMgY2hlY2ssIGxpa2UgYGUgaXMgVGAgb3IgYGUgaXMhIFRgLgogIGZhY3RvcnkgVHlwZVVzZS5pc0NoZWNrKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgVHlwZVVzZS5pbnRlcm5hbCh0eXBlLCBUeXBlVXNlS2luZC5JU19DSEVDSyk7CiAgfQoKICAvLy8gW3R5cGVdIHVzZWQgaW4gYW4gYXMgY2FzdCwgbGlrZSBgZSBhcyBUYC4KICBmYWN0b3J5IFR5cGVVc2UuYXNDYXN0KERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgVHlwZVVzZS5pbnRlcm5hbCh0eXBlLCBUeXBlVXNlS2luZC5BU19DQVNUKTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBhcyBhIHBhcmFtZXRlciB0eXBlIG9yIGZpZWxkIHR5cGUgaW4gRGFydCAyLCBsaWtlIGBUYCBpbjoKICAvLy8KICAvLy8gICAgbWV0aG9kKFQgdCkge30KICAvLy8gICAgVCBmaWVsZDsKICAvLy8KICBmYWN0b3J5IFR5cGVVc2UucGFyYW1ldGVyQ2hlY2soRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIG5ldyBUeXBlVXNlLmludGVybmFsKHR5cGUsIFR5cGVVc2VLaW5kLlBBUkFNRVRFUl9DSEVDSyk7CiAgfQoKICAvLy8gW3R5cGVdIHVzZWQgaW4gYW4gaW1wbGljaXQgY2FzdCBpbiBEYXJ0IDIsIGxpa2UgYFRgIGluCiAgLy8vCiAgLy8vICAgIGR5bmFtaWMgZm9vID0gbmV3IE9iamVjdCgpOwogIC8vLyAgICBUIGJhciA9IGZvbzsgLy8gSW1wbGljaXRseSBgVCBiYXIgPSBmb28gYXMgVGAuCiAgLy8vCiAgZmFjdG9yeSBUeXBlVXNlLmltcGxpY2l0Q2FzdChEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gbmV3IFR5cGVVc2UuaW50ZXJuYWwodHlwZSwgVHlwZVVzZUtpbmQuSU1QTElDSVRfQ0FTVCk7CiAgfQoKICAvLy8gW3R5cGVdIHVzZWQgaW4gYSBvbiB0eXBlIGNhdGNoIGNsYXVzZSwgbGlrZSBgdHJ5IHt9IG9uIFQgY2F0Y2ggKGUpIHt9YC4KICBmYWN0b3J5IFR5cGVVc2UuY2F0Y2hUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgVHlwZVVzZS5pbnRlcm5hbCh0eXBlLCBUeXBlVXNlS2luZC5DQVRDSF9UWVBFKTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBhcyBhIHR5cGUgbGl0ZXJhbCwgbGlrZSBgZm9vKCkgPT4gVDtgLgogIGZhY3RvcnkgVHlwZVVzZS50eXBlTGl0ZXJhbChEYXJ0VHlwZSB0eXBlLCBJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnQpIHsKICAgIHJldHVybiBuZXcgVHlwZVVzZS5pbnRlcm5hbCh0eXBlLCBUeXBlVXNlS2luZC5UWVBFX0xJVEVSQUwsIGRlZmVycmVkSW1wb3J0KTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBpbiBhbiBpbnN0YW50aWF0aW9uLCBsaWtlIGBuZXcgVCgpO2AuCiAgZmFjdG9yeSBUeXBlVXNlLmluc3RhbnRpYXRpb24oSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICByZXR1cm4gbmV3IFR5cGVVc2UuaW50ZXJuYWwodHlwZSwgVHlwZVVzZUtpbmQuSU5TVEFOVElBVElPTik7CiAgfQoKICAvLy8gW3R5cGVdIHVzZWQgaW4gYSBjb25zdGFudCBpbnN0YW50aWF0aW9uLCBsaWtlIGBjb25zdCBUKCk7YC4KICBmYWN0b3J5IFR5cGVVc2UuY29uc3RJbnN0YW50aWF0aW9uKAogICAgICBJbnRlcmZhY2VUeXBlIHR5cGUsIEltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydCkgewogICAgcmV0dXJuIG5ldyBUeXBlVXNlLmludGVybmFsKAogICAgICAgIHR5cGUsIFR5cGVVc2VLaW5kLkNPTlNUX0lOU1RBTlRJQVRJT04sIGRlZmVycmVkSW1wb3J0KTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBpbiBhIG5hdGl2ZSBpbnN0YW50aWF0aW9uLgogIGZhY3RvcnkgVHlwZVVzZS5uYXRpdmVJbnN0YW50aWF0aW9uKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgcmV0dXJuIG5ldyBUeXBlVXNlLmludGVybmFsKHR5cGUsIFR5cGVVc2VLaW5kLk5BVElWRV9JTlNUQU5USUFUSU9OKTsKICB9CgogIC8vLyBbdHlwZV0gdXNlZCBhcyBhIGRpcmVjdCBSVEkgdmFsdWUuCiAgZmFjdG9yeSBUeXBlVXNlLmNvbnN0VHlwZUxpdGVyYWwoRGFydFR5cGUgdHlwZSkgewogICAgcmV0dXJuIG5ldyBUeXBlVXNlLmludGVybmFsKHR5cGUsIFR5cGVVc2VLaW5kLlJUSV9WQUxVRSk7CiAgfQoKICAvLy8gW3R5cGVdIHVzZWQgaW4gYSBgaW5zdGFuY2VvZmAgY2hlY2suCiAgZmFjdG9yeSBUeXBlVXNlLmluc3RhbmNlQ29uc3RydWN0b3IoRGFydFR5cGUgdHlwZSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyLHNyYSk6IFVzZSBhIHNlcGFyYXRlIHVzZSBraW5kIGlmIGNvbnN0cnVjdG9ycyBpcyBubwogICAgLy8gbG9uZ2VyIHVzZWQgZm9yIFJUSS4KICAgIHJldHVybiBuZXcgVHlwZVVzZS5pbnRlcm5hbCh0eXBlLCBUeXBlVXNlS2luZC5SVElfVkFMVUUpOwogIH0KCiAgLy8vIFt0eXBlXSB1c2VkIGRpcmVjdGx5IGFzIGEgdHlwZSBhcmd1bWVudC4KICAvLy8KICAvLy8gVGhlIGhhcHBlbnMgZHVyaW5nIG9wdGltaXphdGlvbiB3aGVyZSBhIHR5cGUgdmFyaWFibGUgY2FuIGJlIHJlcGxhY2VkIGJ5CiAgLy8vIGFuIGludmFyaWFibGUgdHlwZSBhcmd1bWVudCBkZXJpdmVkIGZyb20gYSBjb25zdGFudCByZWNlaXZlci4KICBmYWN0b3J5IFR5cGVVc2UudHlwZUFyZ3VtZW50KERhcnRUeXBlIHR5cGUpIHsKICAgIHJldHVybiBuZXcgVHlwZVVzZS5pbnRlcm5hbCh0eXBlLCBUeXBlVXNlS2luZC5UWVBFX0FSR1VNRU5UKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgVHlwZVVzZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHR5cGUgPT0gb3RoZXIudHlwZSAmJiBraW5kID09IG90aGVyLmtpbmQ7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnVHlwZVVzZSgkdHlwZSwka2luZCknOwp9CgovLy8gVXNlIG9mIGEgW0NvbnN0YW50VmFsdWVdLgpjbGFzcyBDb25zdGFudFVzZSB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY29uc3RhbnQtdXNlJzsKCiAgZmluYWwgQ29uc3RhbnRWYWx1ZSB2YWx1ZTsKCiAgQ29uc3RhbnRVc2UuXyh0aGlzLnZhbHVlKTsKCiAgZmFjdG9yeSBDb25zdGFudFVzZS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IHNvdXJjZS5yZWFkQ29uc3RhbnQoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgQ29uc3RhbnRVc2UuXyh2YWx1ZSk7CiAgfQoKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ29uc3RhbnQodmFsdWUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIC8vLyBTaG9ydCB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIHVzZSBmb3IgdGVzdGluZy4KICBTdHJpbmcgZ2V0IHNob3J0VGV4dCB7CiAgICByZXR1cm4gdmFsdWUudG9EYXJ0VGV4dCgpOwogIH0KCiAgLy8vIENvbnN0YW50IHVzZWQgYXMgdGhlIGluaXRpYWwgdmFsdWUgb2YgYSBmaWVsZC4KICBDb25zdGFudFVzZS5pbml0KENvbnN0YW50VmFsdWUgdmFsdWUpIDogdGhpcy5fKHZhbHVlKTsKCiAgLy8vIFR5cGUgY29uc3RhbnQgdXNlZCBmb3IgcmVnaXN0cmF0aW9uIG9mIGN1c3RvbSBlbGVtZW50cy4KICBDb25zdGFudFVzZS5jdXN0b21FbGVtZW50cyhUeXBlQ29uc3RhbnRW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ZXQ7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgovLy8gQSBzZXQgb2YgZW51bSB2YWx1ZXMgYmFzZWQgb24gYSBiaXQgbWFzayBvZiB0aGUgc2hpZnRlZCBlbnVtIGluZGljZXMuCmFic3RyYWN0IGNsYXNzIEVudW1TZXQ8RT4gewogIC8vLyBDcmVhdGVzIGFuIGVtcHR5IG11dGFibGUgc2V0LgogIGZhY3RvcnkgRW51bVNldCgpID0gX0VudW1TZXQ8RT47CgogIC8vLyBDcmVhdGVzIGEgbXV0YWJsZSBzZXQgZnJvbSB0aGUgYml0IG1hc2sgW3ZhbHVlXS4KICBmYWN0b3J5IEVudW1TZXQuZnJvbVZhbHVlKGludCB2YWx1ZSkgPSBfRW51bVNldDxFPi5mcm9tVmFsdWU7CgogIC8vLyBDcmVhdGVzIGFuIGltbXV0YWJsZSBzZXQgZnJvbSB0aGUgYml0IG1hc2sgW3ZhbHVlXS4KICBjb25zdCBmYWN0b3J5IEVudW1TZXQuZml4ZWQoaW50IHZhbHVlKSA9IF9Db25zdEVudW1TZXQ8RT47CgogIC8vLyBDcmVhdGUgYSBzZXQgY29udGFpbmluZyB0aGUgW3ZhbHVlc10uIElmIFtmaXhlZF0gaXMgYHRydWVgIHRoZSBzZXQgaXMKICAvLy8gaW1tdXRhYmxlLgogIGZhY3RvcnkgRW51bVNldC5mcm9tVmFsdWVzKEl0ZXJhYmxlPEU+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+IFtlbnRyaWVzXTsKfQoKY2xhc3MgSmF2YVNjcmlwdE1hcENvbnN0YW50IGV4dGVuZHMgTWFwQ29uc3RhbnRWYWx1ZSB7CiAgLy8vIFRoZSBbUFJPVE9fUFJPUEVSVFldIG11c3Qgbm90IGJlIHVzZWQgYXMgbm9ybWFsIHByb3BlcnR5IGluIGFueSBKYXZhU2NyaXB0CiAgLy8vIG9iamVjdC4gSXQgd291bGQgY2hhbmdlIHRoZSBwcm90b3R5cGUgY2hhaW4uCiAgc3RhdGljIGNvbnN0IFN0cmluZyBQUk9UT19QUk9QRVJUWSA9ICJfX3Byb3RvX18iOwoKICAvLy8gVGhlIGRhcnQgY2xhc3MgaW1wbGVtZW50aW5nIGNvbnN0YW50IG1hcCBsaXRlcmFscy4KICBzdGF0aWMgY29uc3QgU3RyaW5nIERBUlRfQ0xBU1MgPSAiQ29uc3RhbnRNYXAiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgREFSVF9TVFJJTkdfQ0xBU1MgPSAiQ29uc3RhbnRTdHJpbmdNYXAiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgREFSVF9QUk9UT19DTEFTUyA9ICJDb25zdGFudFByb3RvTWFwIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIERBUlRfR0VORVJBTF9DTEFTUyA9ICJHZW5lcmFsQ29uc3RhbnRNYXAiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgTEVOR1RIX05BTUUgPSAiX2xlbmd0aCI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBKU19PQkpFQ1RfTkFNRSA9ICJfanNPYmplY3QiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgS0VZU19OQU1FID0gIl9rZXlzIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIFBST1RPX1ZBTFVFID0gIl9wcm90b1ZhbHVlIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIEpTX0RBVEFfTkFNRSA9ICJfanNEYXRhIjsKCiAgZmluYWwgTGlzdENvbnN0YW50VmFsdWUga2V5TGlzdDsKICBmaW5hbCBDb25zdGFudFZhbHVlIHByb3RvVmFsdWU7CiAgZmluYWwgYm9vbCBvbmx5U3RyaW5nS2V5czsKCiAgSmF2YVNjcmlwdE1hcENvbnN0YW50KEludGVyZmFjZVR5cGUgdHlwZSwgTGlzdENvbnN0YW50VmFsdWUga2V5TGlzdCwKICAgICAgTGlzdDxDb25zdGFudFZhbHVlPiB2YWx1ZXMsIHRoaXMucHJvdG9WYWx1ZSwgdGhpcy5vbmx5U3RyaW5nS2V5cykKICAgICAgOiB0aGlz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dGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5uYXRpdmVfZGF0YTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2tlcm5lbC9lbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvYmVoYXZpb3IuZGFydCcgc2hvdyBOYXRpdmVCZWhhdmlvcjsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnOwoKLy8vIEJhc2ljIGluZm9ybWF0aW9uIGZvciBuYXRpdmUgY2xhc3NlcyBhbmQganMtaW50ZXJvcCBsaWJyYXJpZXMgYW5kIGNsYXNzZXMuCi8vLwovLy8gVGhpcyBpbmZvcm1hdGlvbiBpcyBjb21wdXRlZCBkdXJpbmcgbG9hZGluZyB1c2luZyBbTmF0aXZlQmFzaWNEYXRhQnVpbGRlcl0uCmFic3RyYWN0IGNsYXNzIE5hdGl2ZUJhc2ljRGF0YSB7CiAgLy8vIERlc2VyaWFsaXplcyBhIFtOYXRpdmVCYXNpY0RhdGFdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgTmF0aXZlQmFzaWNEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50KSA9CiAgICAgIE5hdGl2ZUJhc2ljRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlOwoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtOYXRpdmVCYXNpY0RhdGFdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGNvcnJlc3BvbmRzIHRvIGEgbmF0aXZlIEphdmFTY3JpcHQgY2xhc3MuCiAgLy8vCiAgLy8vIEEgY2xhc3MgaXMgbWFya2VkIGFzIG5hdGl2ZSBlaXRoZXIgdGhyb3VnaCB0aGUgYEBOYXRpdmUoLi4uKWAgYW5ub3RhdGlvbgogIC8vLyBhbGxvd2VkIGZvciBpbnRlcm5hbCBsaWJyYXJpZXMgb3IgdmlhIHRoZSB0eXBlZCBKYXZhU2NyaXB0SW50ZXJvcAogIC8vLyBtZWNoYW5pc20gYWxsb3dlZCBmb3IgdXNlciBsaWJyYXJpZXMuCiAgYm9vbCBpc05hdGl2ZUNsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyB0aGUgbGlzdCBvZiBub24tZGlyZWN0aXZlIG5hdGl2ZSB0YWcgd29yZHMgZm9yIFtjbHNdLgogIExpc3Q8U3RyaW5nPiBnZXROYXRpdmVUYWdzT2ZDbGFzcyhDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gaGFzIGEgYCFub25sZWFmYCB0YWcgd29yZC4KICBib29sIGhhc05hdGl2ZVRhZ3NGb3JjZWROb25MZWFmKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gb3IgYW55IG9mIGl0cyBzdXBlcmNsYXNzZXMgaXMgbmF0aXZlLgogIGJvb2wgaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBqcyBpbnRlcm9wIGZlYXR1cmVzIGFyZSB1c2VkLgogIGJvb2wgZ2V0IGlzSnNJbnRlcm9wVXNlZDsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBpcyBhIEpzSW50ZXJvcCBsaWJyYXJ5LgogIGJvb2wgaXNKc0ludGVyb3BMaWJyYXJ5KExpYnJhcnlFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaXMgYSBKc0ludGVyb3AgY2xhc3MuCiAgYm9vbCBpc0pzSW50ZXJvcENsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2VsZW1lbnRdIGlzIGEgSnNJbnRlcm9wIG1lbWJlci4KICBib29sIGlzSnNJbnRlcm9wTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KTsKfQoKLy8vIEFkZGl0aW9uYWwgZWxlbWVudCBpbmZvcm1hdGlvbiBmb3IgbmF0aXZlIGNsYXNzZXMgYW5kIG1ldGhvZHMgYW5kIGpzLWludGVyb3AKLy8vIG1ldGhvZHMuCi8vLwovLy8gVGhpcyBpbmZvcm1hdGlvbiBpcyBjb21wdXRlZCBkdXJpbmcgcmVzb2x1dGlvbiB1c2luZyBbTmF0aXZlRGF0YUJ1aWxkZXJdLgphYnN0cmFjdCBjbGFzcyBOYXRpdmVEYXRhIGV4dGVuZHMgTmF0aXZlQmFzaWNEYXRhIHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW05hdGl2ZURhdGFdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgTmF0aXZlRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgICAgICBEYXRhU291cmNlIHNvdXJjZSwgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCkgPQogICAgICBOYXRpdmVEYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2U7CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW05hdGl2ZURhdGFdIHRvIFtzaW5rXS4KICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBjb3JyZXNwb25kcyB0byBhIG5hdGl2ZSBKYXZhU2NyaXB0IG1lbWJlci4KICAvLy8KICAvLy8gQSBtZW1iZXIgaXMgbWFya2VkIGFzIG5hdGl2ZSBlaXRoZXIgdGhyb3VnaCB0aGUgbmF0aXZlIG1lY2hhbmlzbQogIC8vLyAoYEBOYXRpdmUoLi4uKWAgb3IgdGhlIGBuYXRpdmVgIHBzZXVkbyBrZXl3b3JkKSBhbGxvd2VkIGZvciBpbnRlcm5hbAogIC8vLyBsaWJyYXJpZXMgb3IgdmlhIHRoZSB0eXBlZCBKYXZhU2NyaXB0SW50ZXJvcCBtZWNoYW5pc20gYWxsb3dlZCBmb3IgdXNlcgogIC8vLyBsaWJyYXJpZXMuCiAgYm9vbCBpc05hdGl2ZU1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBbTmF0aXZlQmVoYXZpb3JdIGZvciBjYWxsaW5nIHRoZSBuYXRpdmUgW21ldGhvZF0uCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlTWV0aG9kQmVoYXZpb3IoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKTsKCiAgLy8vIFJldHVybnMgdGhlIFtOYXRpdmVCZWhhdmlvcl0gZm9yIHJlYWRpbmcgZnJvbSB0aGUgbmF0aXZlIFtmaWVsZF0uCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlRmllbGRMb2FkQmVoYXZpb3IoRmllbGRFbnRpdHkgZmllbGQpOwoKICAvLy8gUmV0dXJucyB0aGUgW05hdGl2ZUJlaGF2aW9yXSBmb3Igd3JpdGluZyB0byB0aGUgbmF0aXZlIFtmaWVsZF0uCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yKEZpZWxkRW50aXR5IGZpZWxkKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBuYW1lIG9mIFtlbGVtZW50XSBpcyBmaXhlZCBmb3IgdGhlIGdlbmVyYXRlZAogIC8vLyBKYXZhU2NyaXB0LgogIGJvb2wgaGFzRml4ZWRCYWNrZW5kTmFtZShNZW1iZXJFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBDb21wdXRlcyB0aGUgbmFtZSBmb3IgW2VsZW1lbnRdIHRvIHVzZSBpbiB0aGUgZ2VuZXJhdGVkIEphdmFTY3JpcHQuIFRoaXMKICAvLy8gaXMgZWl0aGVyIGdpdmVuIHRocm91Z2ggYSBuYXRpdmUgYW5ub3RhdGlvbiBvciBhIGpzIGludGVyb3AgYW5ub3RhdGlvbi4KICBTdHJpbmcgZ2V0Rml4ZWRCYWNrZW5kTmFtZShNZW1iZXJFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBDb21wdXRlcyB0aGUgbmFtZSBwcmVmaXggZm9yIFtlbGVtZW50XSB0byB1c2UgaW4gdGhlIGdlbmVyYXRlZCBKYXZhU2NyaXB0LgogIC8vLwogIC8vLyBGb3Igc3RhdGljIGFuZCB0b3AtbGV2ZWwgbWVtYmVycyBhbmQgY29uc3RydWN0b3JzIHRoaXMgaXMgYmFzZWQgb24gdGhlCiAgLy8vIEphdmFTY3JpcHQgbmFtZXMgZm9yIHRoZSBsaWJyYXJ5IGFuZC9vciB0aGUgZW5jbG9zaW5nIGNsYXNzLgogIFN0cmluZyBnZXRGaXhlZEJhY2tlbmRNZXRob2RQYXRoKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNJbnRlcm9wTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIGV4cGxpY2l0IGpzIGludGVyb3AgbmFtZSBmb3IgbGlicmFyeSBbZWxlbWVudF0uCiAgU3RyaW5nIGdldEpzSW50ZXJvcExpYnJhcnlOYW1lKExpYnJhcnlFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaGFzIGFuIGBAQW5vbnltb3VzYCBhbm5vdGF0aW9uLgogIGJvb2wgaXNBbm9ueW1vdXNKc0ludGVyb3BDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIGV4cGxpY2l0IGpzIGludGVyb3AgbmFtZSBmb3IgY2xhc3MgW2VsZW1lbnRdLgogIFN0cmluZyBnZXRKc0ludGVyb3BDbGFzc05hbWUoQ2xhc3NFbnRpdHkgZWxlbWVudCk7CgogIC8vLyBSZXR1cm5zIHRoZSBleHBsaWNpdCBqcyBpbnRlcm9wIG5hbWUgZm9yIG1lbWJlciBbZWxlbWVudF0uCiAgU3RyaW5nIGdldEpzSW50ZXJvcE1lbWJlck5hbWUoTWVtYmVyRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gQXBwbHkgSlMkIGVzY2FwaW5nIHNjaGVtZSB0byBjb252ZXJ0IHBvc3NpYmxlIGVzY2FwZWQgRGFydCBuYW1lcyBpbnRvCiAgLy8vIEpTIG5hbWVzLgogIFN0cmluZyBjb21wdXRlVW5lc2NhcGVkSlNJbnRlcm9wTmFtZShTdHJpbmcgbmFtZSk7Cn0KCmFic3RyYWN0IGNsYXNzIE5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIgewogIC8vLyBTZXRzIHRoZSBuYXRpdmUgdGFnIGluZm8gZm9yIFtjbHNdLgogIC8vLwogIC8vLyBUaGUgdGFnIGluZm8gc3RyaW5nIGNvbnRhaW5zIGNvbW1hLXNlcGFyYXRlZCAnd29yZHMnIHdoaWNoIGFyZSBlaXRoZXIKICAvLy8gZGlzcGF0Y2ggdGFncyAoaGF2aW5nIEphdmFTY3JpcHQgaWRlbnRpZmllciBzeW50YXgpIGFuZCBkaXJlY3RpdmVzIHRoYXQKICAvLy8gYmVnaW4gd2l0aCBgIWAuCiAgdm9pZCBzZXROYXRpdmVDbGFzc1RhZ0luZm8oQ2xhc3NFbnRpdHkgY2xzLCBTdHJpbmcgdGFnSW5mbyk7CgogIC8vLyBNYXJrcyBbZWxlbWVudF0gYXMgYW4gZXhwbGljaXQgcGFydCBvZiBqcyBpbnRlcm9wLgogIC8vLwogIC8vLyBJZiBbbmFtZV0gaXMgcHJvdmlkZWQsIGl0IHNldHMgdGhlIGV4cGxpY2l0IGpzIGludGVyb3AgbmFtZSBmb3IgdGhlCiAgLy8vIGxpYnJhcnkgW2VsZW1lbnRdLCBvdGhlciB0aGUganMgaW50ZXJvcCBuYW1lIGlzIGV4cGVjdGVkIHRvIGJlIGNvbXB1dGVkCiAgLy8vIGxhdGVyLgogIHZvaWQgbWFya0FzSnNJbnRlcm9wTGlicmFyeShMaWJyYXJ5RW50aXR5IGVsZW1lbnQsIHtTdHJpbmcgbmFtZX0pOwoKICAvLy8gTWFya3MgW2VsZW1lbnRdIGFzIGFuIGV4cGxpY2l0IHBhcnQgb2YganMgaW50ZXJvcC4KICAvLy8KICAvLy8gSWYgW25hbWVdIGlzIHByb3ZpZGVkLCBpdCBzZXRzIHRoZSBleHBsaWNpdCBqcyBpbnRlcm9wIG5hbWUgZm9yIHRoZQogIC8vLyBjbGFzcyBbZWxlbWVudF0sIG90aGVyIHRoZSBqcyBpbnRlcm9wIG5hbWUgaXMgZXhwZWN0ZWQgdG8gYmUgY29tcHV0ZWQKICAvLy8gbGF0ZXIuCiAgdm9pZCBtYXJrQXNKc0ludGVyb3BDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50LAogICAgICB7U3RyaW5nIG5hbWUsIGJvb2wgaXNBbm9ueW1vdXM6IGZhbHNlfSk7CgogIC8vLyBNYXJrcyBbZWxlbWVudF0gYXMgYW4gZXhwbGljaXQgcGFydCBvZiBqcyBpbnRlcm9wIGFuZCBzZXRzIHRoZSBleHBsaWNpdCBqcwogIC8vLyBpbnRlcm9wIFtuYW1lXSBmb3IgdGhlIG1lbWJlciBbZWxlbWVudF0uCiAgdm9pZCBtYXJrQXNKc0ludGVyb3BNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQsIFN0cmluZyBuYW1lKTsKCiAgLy8vIENyZWF0ZXMgdGhlIFtOYXRpdmVCYXNpY0RhdGFdIG9iamVjdCBmb3IgdGhlIGRhdGEgY29sbGVjdGVkIGluIHRoaXMKICAvLy8gYnVpbGRlci4KICBOYXRpdmVCYXNpY0RhdGEgY2xvc2UoRWxlbWVudEVudmlyb25tZW50IGVudmlyb25tZW50KTsKfQoKYWJzdHJhY3QgY2xhc3MgTmF0aXZlRGF0YUJ1aWxkZXIgewogIC8vLyBSZWdpc3RlcnMgdGhlIFtiZWhhdmlvcl0gZm9yIGNhbGxpbmcgdGhlIG5hdGl2ZSBbbWV0aG9kXS4KICB2b2lkIHNldE5hdGl2ZU1ldGhvZEJlaGF2aW9yKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCwgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IpOwoKICAvLy8gUmVnaXN0ZXJzIHRoZSBbYmVoYXZpb3JdIGZvciByZWFkaW5nIGZyb20gdGhlIG5hdGl2ZSBbZmllbGRdLgogIHZvaWQgc2V0TmF0aXZlRmllbGRMb2FkQmVoYXZpb3IoRmllbGRFbnRpdHkgZmllbGQsIE5hdGl2ZUJlaGF2aW9yIGJlaGF2aW9yKTsKCiAgLy8vIFJlZ2lzdGVycyB0aGUgW2JlaGF2aW9yXSBmb3Igd3JpdGluZyB0byB0aGUgbmF0aXZlIFtmaWVsZF0uCiAgdm9pZCBzZXROYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IoRmllbGRFbnRpdHkgZmllbGQsIE5hdGl2ZUJlaGF2aW9yIGJlaGF2aW9yKTsKCiAgLy8vIFNldHMgdGhlIG5hdGl2ZSBbbmFtZV0gZm9yIHRoZSBtZW1iZXIgW2VsZW1lbnRdLgogIC8vLwogIC8vLyBUaGlzIG5hbWUgaXMgdXNlZCBmb3IgW2VsZW1lbnRdIGluIHRoZSBnZW5lcmF0ZWQgSmF2YVNjcmlwdC4KICB2b2lkIHNldE5hdGl2ZU1lbWJlck5hbWUoTWVtYmVyRW50aXR5IGVsZW1lbnQsIFN0cmluZyBuYW1lKTsKCiAgLy8vIENsb3NlcyB0aGlzIGJ1aWxkZXIgYW5kIGNyZWF0ZXMgdGhlIHJlc3VsdGluZyBbTmF0aXZlRGF0YV0gb2JqZWN0LgogIE5hdGl2ZURhdGEgY2xvc2UoKTsKfQoKY2xhc3MgTmF0aXZlQmFzaWNEYXRhQnVpbGRlckltcGwgaW1wbGVtZW50cyBOYXRpdmVCYXNpY0RhdGFCdWlsZGVyIHsKICBib29sIF9jbG9zZWQgPSBmYWxzZTsKCiAgLy8vIFRhZyBpbmZvIGZvciBuYXRpdmUgSmF2YVNjcmlwdCBjbGFzc2VzIG5hbWVzLiBTZWUKICAvLy8gW3NldE5hdGl2ZUNsYXNzVGFnSW5mb10uCiAgTWFwPENsYXNzRW50aXR5LCBOYXRpdmVDbGFzc1RhZz4gbmF0aXZlQ2xhc3NUYWdJbmZvID0KICAgICAgPENsYXNzRW50aXR5LCBOYXRpdmVDbGFzc1RhZz57fTsKCiAgLy8vIFRoZSBKYXZhU2NyaXB0IGxpYnJhcmllcyBpbXBsZW1lbnRlZCB2aWEgdHlwZWQgSmF2YVNjcmlwdCBpbnRlcm9wLgogIE1hcDxMaWJyYXJ5RW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcExpYnJhcmllcyA9IDxMaWJyYXJ5RW50aXR5LCBTdHJpbmc+e307CgogIC8vLyBUaGUgSmF2YVNjcmlwdCBjbGFzc2VzIGltcGxlbWVudGVkIHZpYSB0eXBlZCBKYXZhU2NyaXB0IGludGVyb3AuCiAgTWFwPENsYXNzRW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcENsYXNzZXMgPSA8Q2xhc3NFbnRpdHksIFN0cmluZz57fTsKCiAgLy8vIEphdmFTY3JpcHQgaW50ZXJvcCBjbGFzc2VzIGFubm90YXRlZCB3aXRoIGBAYW5vbnltb3VzYAogIFNldDxDbGFzc0VudGl0eT4gYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogIC8vLyBUaGUgSmF2YVNjcmlwdCBtZW1iZXJzIGltcGxlbWVudGVkIHZpYSB0eXBlZCBKYXZhU2NyaXB0IGludGVyb3AuCiAgTWFwPE1lbWJlckVudGl0eSwgU3RyaW5nPiBqc0ludGVyb3BNZW1iZXJzID0gPE1lbWJlckVudGl0eSwgU3RyaW5nPnt9OwoKICBAb3ZlcnJpZGUKICB2b2lkIHNldE5hdGl2ZUNsYXNzVGFnSW5mbyhDbGFzc0VudGl0eSBjbHMsIFN0cmluZyB0YWdUZXh0KSB7CiAgICBhc3NlcnQoCiAgICAgICAgIV9jbG9zZWQsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGNscywKICAgICAgICAgICAgIk5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIgaXMgY2xvc2VkLiAiCiAgICAgICAgICAgICJUcnlpbmcgdG8gbWFyayAkY2xzIGFzIGEgbmF0aXZlIGNsYXNzLiIpKTsKCiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBc3NlcnQgdGhhdCB0aGlzIGlzIG9ubHkgY2FsbGVkIG9uY2UuIFRoZSBtZW1vcnkKICAgIC8vIGNvbXBpbGVyIGNvcGllcyBwcmUtcHJvY2Vzc2VkIGVsZW1lbnRzIGludG8gYSBuZXcgY29tcGlsZXIgdGhyb3VnaAogICAgLy8gW0NvbXBpbGVyLm9uTGlicmFyeVNjYW5uZWRdIGFuZCB0aGVyZWJ5IGNhdXNlcyBtdWx0aXBsZSBjYWxscyB0byB0aGlzCiAgICAvLyBtZXRob2QuCiAgICBhc3NlcnQoCiAgICAgICAgbmF0aXZlQ2xhc3NUYWdJbmZvW2Nsc10gPT0gbnVsbCB8fAogICAgICAgICAgICBuYXRpdmVDbGFzc1RhZ0luZm9bY2xzXS50ZXh0ID09IHRhZ1RleHQsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGNscywKICAgICAgICAgICAgIk5hdGl2ZSB0YWcgaW5mbyBzZXQgaW5jb25zaXN0ZW50bHkgb24gJGNsczogIgogICAgICAgICAgICAiRXhpc3RpbmcgdGFnIGluZm8gJyR7bmF0aXZlQ2xhc3NUYWdJbmZvW2Nsc119JywgIgogICAgICAgICAgICAibmV3IHRhZyBpbmZvICckdGFnVGV4dCcuIikpOwogICAgbmF0aXZlQ2xhc3NUYWdJbmZvW2Nsc10gPSBuZXcgTmF0aXZlQ2xhc3NUYWcodGFnVGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG1hcmtBc0pzSW50ZXJvcExpYnJhcnkoTGlicmFyeUVudGl0eSBlbGVtZW50LCB7U3RyaW5nIG5hbWV9KSB7CiAgICBhc3NlcnQoCiAgICAgICAgIV9jbG9zZWQsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICJOYXRpdmVCYXNpY0RhdGFCdWlsZGVyIGlzIGNsb3NlZC4gIgogICAgICAgICAgICAiVHJ5aW5nIHRvIG1hcmsgJGVsZW1lbnQgYXMgYSBqcy1pbnRlcm9wIGxpYnJhcnkuIikpOwogICAganNJbnRlcm9wTGlicmFyaWVzW2VsZW1lbnRdID0gbmFtZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgbWFya0FzSnNJbnRlcm9wQ2xhc3MoQ2xhc3NFbnRpdHkgZWxlbWVudCwKICAgICAge1N0cmluZyBuYW1lLCBib29sIGlzQW5vbnltb3VzOiBmYWxzZX0pIHsKICAgIGFzc2VydCgKICAgICAgICAhX2Nsb3NlZCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIk5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIgaXMgY2xvc2VkLiAiCiAgICAgICAgICAgICJUcnlpbmcgdG8gbWFyayAkZWxlbWVudCBhcyBhIGpzLWludGVyb3AgY2xhc3MuIikpOwogICAganNJbnRlcm9wQ2xhc3Nlc1tlbGVtZW50XSA9IG5hbWU7CiAgICBpZiAoaXNBbm9ueW1vdXMpIHsKICAgICAgYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3Nlcy5hZGQoZWxlbWVudCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG1hcmtBc0pzSW50ZXJvcE1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCwgU3RyaW5nIG5hbWUpIHsKICAgIGFzc2VydCgKICAgICAgICAhX2Nsb3NlZCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIk5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIgaXMgY2xvc2VkLiAiCiAgICAgICAgICAgICJUcnlpbmcgdG8gbWFyayAkZWxlbWVudCBhcyBhIGpzLWludGVyb3AgbWVtYmVyLiIpKTsKICAgIGpzSW50ZXJvcE1lbWJlcnNbZWxlbWVudF0gPSBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmFzaWNEYXRhIGNsb3NlKEVsZW1lbnRFbnZpcm9ubWVudCBlbnZpcm9ubWVudCkgewogICAgX2Nsb3NlZCA9IHRydWU7CiAgICByZXR1cm4gbmV3IE5hdGl2ZUJhc2ljRGF0YUltcGwoCiAgICAgICAgZW52aXJvbm1lbnQsCiAgICAgICAgbmF0aXZlQ2xhc3NUYWdJbmZvLAogICAgICAgIGpzSW50ZXJvcExpYnJhcmllcywKICAgICAgICBqc0ludGVyb3BDbGFzc2VzLAogICAgICAgIGFub255bW91c0pzSW50ZXJvcENsYXNzZXMsCiAgICAgICAganNJbnRlcm9wTWVtYmVycyk7CiAgfQoKICB2b2lkIHJlb3BlbkZvclRlc3RpbmcoKSB7CiAgICBfY2xvc2VkID0gZmFsc2U7CiAgfQp9CgpjbGFzcyBOYXRpdmVCYXNpY0RhdGFJbXBsIGltcGxlbWVudHMgTmF0aXZlQmFzaWNEYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW05hdGl2ZUJhc2ljRGF0YV0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICduYXRpdmUtYmFzaWMtZGF0YSc7CgogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZW52OwoKICAvLy8gVGFnIGluZm8gZm9yIG5hdGl2ZSBKYXZhU2NyaXB0IGNsYXNzZXMgbmFtZXMuIFNlZQogIC8vLyBbc2V0TmF0aXZlQ2xhc3NUYWdJbmZvXS4KICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIE5hdGl2ZUNsYXNzVGFnPiBuYXRpdmVDbGFzc1RhZ0luZm87CgogIC8vLyBUaGUgSmF2YVNjcmlwdCBsaWJyYXJpZXMgaW1wbGVtZW50ZWQgdmlhIHR5cGVkIEphdmFTY3JpcHQgaW50ZXJvcC4KICBmaW5hbCBNYXA8TGlicmFyeUVudGl0eSwgU3RyaW5nPiBqc0ludGVyb3BMaWJyYXJpZXM7CgogIC8vLyBUaGUgSmF2YVNjcmlwdCBjbGFzc2VzIGltcGxlbWVudGVkIHZpYSB0eXBlZCBKYXZhU2NyaXB0IGludGVyb3AuCiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcENsYXNzZXM7CgogIC8vLyBKYXZhU2NyaXB0IGludGVyb3AgY2xhc3NlcyBhbm5vdGF0ZWQgd2l0aCBgQGFub255bW91c2AKICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IGFub255bW91c0pzSW50ZXJvcENsYXNzZXM7CgogIC8vLyBUaGUgSmF2YVNjcmlwdCBtZW1iZXJzIGltcGxlbWVudGVkIHZpYSB0eXBlZCBKYXZhU2NyaXB0IGludGVyb3AuCiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwgU3RyaW5nPiBqc0ludGVyb3BNZW1iZXJzOwoKICBOYXRpdmVCYXNpY0RhdGFJbXBsKAogICAgICB0aGlzLl9lbnYsCiAgICAgIHRoaXMubmF0aXZlQ2xhc3NUYWdJbmZvLAogICAgICB0aGlzLmpzSW50ZXJvcExpYnJhcmllcywKICAgICAgdGhpcy5qc0ludGVyb3BDbGFzc2VzLAogICAgICB0aGlzLmFub255bW91c0pzSW50ZXJvcENsYXNzZXMsCiAgICAgIHRoaXMuanNJbnRlcm9wTWVtYmVycyk7CgogIGZhY3RvcnkgTmF0aXZlQmFzaWNEYXRhSW1wbC5mcm9tSXIoCiAgICAgIEtlcm5lbFRvRWxlbWVudE1hcCBtYXAsIElyQW5ub3RhdGlvbkRhdGEgZGF0YSkgewogICAgRWxlbWVudEVudmlyb25tZW50IGVudiA9IG1hcC5lbGVtZW50RW52aXJvbm1lbnQ7CiAgICBNYXA8Q2xhc3NFbnRpdHksIE5hdGl2ZUNsYXNzVGFnPiBuYXRpdmVDbGFzc1RhZ0luZm8gPSB7fTsKICAgIE1hcDxMaWJyYXJ5RW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcExpYnJhcmllcyA9IHt9OwogICAgTWFwPENsYXNzRW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcENsYXNzZXMgPSB7fTsKICAgIFNldDxDbGFzc0VudGl0eT4gYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3NlcyA9IHt9OwogICAgTWFwPE1lbWJlckVudGl0eSwgU3RyaW5nPiBqc0ludGVyb3BNZW1iZXJzID0ge307CgogICAgZGF0YS5mb3JFYWNoTmF0aXZlQ2xhc3MoKGlyLkNsYXNzIG5vZGUsIFN0cmluZyB0ZXh0KSB7CiAgICAgIG5hdGl2ZUNsYXNzVGFnSW5mb1ttYXAuZ2V0Q2xhc3Mobm9kZSldID0gbmV3IE5hdGl2ZUNsYXNzVGFnKHRleHQpOwogICAgfSk7CiAgICBkYXRhLmZvckVhY2hKc0ludGVyb3BMaWJyYXJ5KChpci5MaWJyYXJ5IG5vZGUsIFN0cmluZyBuYW1lKSB7CiAgICAgIGpzSW50ZXJvcExpYnJhcmllc1tlbnYubG9va3VwTGlicmFyeShub2RlLmltcG9ydFVyaSwgcmVxdWlyZWQ6IHRydWUpXSA9CiAgICAgICAgICBuYW1lOwogICAgfSk7CiAgICBkYXRhLmZvckVhY2hKc0ludGVyb3BDbGFzcygoaXIuQ2xhc3Mgbm9kZSwgU3RyaW5nIG5hbWUsCiAgICAgICAge2Jvb2wgaXNBbm9ueW1vdXN9KSB7CiAgICAgIENsYXNzRW50aXR5IGNscyA9IG1hcC5nZXRDbGFzcyhub2RlKTsKICAgICAganNJbnRlcm9wQ2xhc3Nlc1tjbHNdID0gbmFtZTsKICAgICAgaWYgKGlzQW5vbnltb3VzKSB7CiAgICAgICAgYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3Nlcy5hZGQoY2xzKTsKICAgICAgfQogICAgfSk7CiAgICBkYXRhLmZvckVhY2hKc0ludGVyb3BNZW1iZXIoKGlyLk1lbWJlciBub2RlLCBTdHJpbmcgbmFtZSkgewogICAgICBqc0ludGVyb3BNZW1iZXJzW21hcC5nZXRNZW1iZXIobm9kZSldID0gbmFtZTsKICAgIH0pOwoKICAgIHJldHVybiBuZXcgTmF0aXZlQmFzaWNEYXRhSW1wbChlbnYsIG5hdGl2ZUNsYXNzVGFnSW5mbywganNJbnRlcm9wTGlicmFyaWVzLAogICAgICAgIGpzSW50ZXJvcENsYXNzZXMsIGFub255bW91c0pzSW50ZXJvcENsYXNzZXMsIGpzSW50ZXJvcE1lbWJlcnMpOwogIH0KCiAgZmFjdG9yeSBOYXRpdmVCYXNpY0RhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgTWFwPENsYXNzRW50aXR5LCBOYXRpdmVDbGFzc1RhZz4gbmF0aXZlQ2xhc3NUYWdJbmZvID0KICAgICAgICBzb3VyY2UucmVhZENsYXNzTWFwKCgpIHsKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVzID0gc291cmNlLnJlYWRTdHJpbmdzKCk7CiAgICAgIGJvb2wgaXNOb25MZWFmID0gc291cmNlLnJlYWRCb29sKCk7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQ2xhc3NUYWcuaW50ZXJuYWwobmFtZXMsIGlzTm9uTGVhZik7CiAgICB9KTsKICAgIE1hcDxMaWJyYXJ5RW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcExpYnJhcmllcyA9CiAgICAgICAgc291cmNlLnJlYWRMaWJyYXJ5TWFwKHNvdXJjZS5yZWFkU3RyaW5nKTsKICAgIE1hcDxDbGFzc0VudGl0eSwgU3RyaW5nPiBqc0ludGVyb3BDbGFzc2VzID0KICAgICAgICBzb3VyY2UucmVhZENsYXNzTWFwKHNvdXJjZS5yZWFkU3RyaW5nKTsKICAgIFNldDxDbGFzc0VudGl0eT4gYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3NlcyA9IHNvdXJjZS5yZWFkQ2xhc3NlcygpLnRvU2V0KCk7CiAgICBNYXA8TWVtYmVyRW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcE1lbWJlcnMgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyTWFwKChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PiBzb3VyY2UucmVhZFN0cmluZygpKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgTmF0aXZlQmFzaWNEYXRhSW1wbCgKICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgbmF0aXZlQ2xhc3NUYWdJbmZvLAogICAgICAgIGpzSW50ZXJvcExpYnJhcmllcywKICAgICAgICBqc0ludGVyb3BDbGFzc2VzLAogICAgICAgIGFub255bW91c0pzSW50ZXJvcENsYXNzZXMsCiAgICAgICAganNJbnRlcm9wTWVtYmVycyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3NNYXAobmF0aXZlQ2xhc3NUYWdJbmZvLCAoTmF0aXZlQ2xhc3NUYWcgdGFnKSB7CiAgICAgIHNpbmsud3JpdGVTdHJpbmdzKHRhZy5uYW1lcyk7CiAgICAgIHNpbmsud3JpdGVCb29sKHRhZy5pc05vbkxlYWYpOwogICAgfSk7CiAgICBzaW5rLndyaXRlTGlicmFyeU1hcChqc0ludGVyb3BMaWJyYXJpZXMsIHNpbmsud3JpdGVTdHJpbmcpOwogICAgc2luay53cml0ZUNsYXNzTWFwKGpzSW50ZXJvcENsYXNzZXMsIHNpbmsud3JpdGVTdHJpbmcpOwogICAgc2luay53cml0ZUNsYXNzZXMoYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3Nlcyk7CiAgICBzaW5rLndyaXRlTWVtYmVyTWFwKGpzSW50ZXJvcE1lbWJlcnMsCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIFN0cmluZyBuYW1lKSA9PiBzaW5rLndyaXRlU3RyaW5nKG5hbWUpKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzTmF0aXZlQ2xhc3MoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKGlzSnNJbnRlcm9wQ2xhc3MoZWxlbWVudCkpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG5hdGl2ZUNsYXNzVGFnSW5mby5jb250YWluc0tleShlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8U3RyaW5nPiBnZXROYXRpdmVUYWdzT2ZDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBuYXRpdmVDbGFzc1RhZ0luZm9bY2xzXS5uYW1lczsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzTmF0aXZlVGFnc0ZvcmNlZE5vbkxlYWYoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gbmF0aXZlQ2xhc3NUYWdJbmZvW2Nsc10uaXNOb25MZWFmOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNKc0ludGVyb3BVc2VkID0+CiAgICAgIGpzSW50ZXJvcExpYnJhcmllcy5pc05vdEVtcHR5IHx8IGpzSW50ZXJvcENsYXNzZXMuaXNOb3RFbXB0eTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzSW50ZXJvcExpYnJhcnkoTGlicmFyeUVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4ganNJbnRlcm9wTGlicmFyaWVzLmNvbnRhaW5zS2V5KGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzSW50ZXJvcENsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBqc0ludGVyb3BDbGFzc2VzLmNvbnRhaW5zS2V5KGVsZW1lbnQpOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBpcyBleHBsaWNpdGx5IG1hcmtlZCBhcyBwYXJ0IG9mIEpzSW50ZXJvcC4KICBib29sIF9pc0pzSW50ZXJvcE1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGpzSW50ZXJvcE1lbWJlcnMuY29udGFpbnNLZXkoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNJbnRlcm9wTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTaGFyZSB0aGlzIHdpdGggW05hdGl2ZURhdGFJbXBsLmlzSnNJbnRlcm9wTWVtYmVyXS4KICAgIGlmIChlbGVtZW50LmlzRnVuY3Rpb24gfHwKICAgICAgICBlbGVtZW50LmlzQ29uc3RydWN0b3IgfHwKICAgICAgICBlbGVtZW50LmlzR2V0dGVyIHx8CiAgICAgICAgZWxlbWVudC5pc1NldHRlcikgewogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiA9IGVsZW1lbnQ7CiAgICAgIGlmICghZnVuY3Rpb24uaXNFeHRlcm5hbCkgcmV0dXJuIGZhbHNlOwoKICAgICAgaWYgKF9pc0pzSW50ZXJvcE1lbWJlcihmdW5jdGlvbikpIHJldHVybiB0cnVlOwogICAgICBpZiAoZnVuY3Rpb24uZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgICAgIHJldHVybiBpc0pzSW50ZXJvcENsYXNzKGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzKTsKICAgICAgfQogICAgICBpZiAoZnVuY3Rpb24uaXNUb3BMZXZlbCkgewogICAgICAgIHJldHVybiBpc0pzSW50ZXJvcExpYnJhcnkoZnVuY3Rpb24ubGlicmFyeSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9pc0pzSW50ZXJvcE1lbWJlcihlbGVtZW50KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGlzTmF0aXZlQ2xhc3MoZWxlbWVudCkgfHwgaXNKc0ludGVyb3BDbGFzcyhlbGVtZW50KSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBpc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShfZW52LmdldFN1cGVyQ2xhc3MoZWxlbWVudCkpOwogIH0KfQoKY2xhc3MgTmF0aXZlRGF0YUJ1aWxkZXJJbXBsIGltcGxlbWVudHMgTmF0aXZlRGF0YUJ1aWxkZXIgewogIGZpbmFsIE5hdGl2ZUJhc2ljRGF0YUltcGwgX25hdGl2ZUJhc2ljRGF0YTsKCiAgLy8vIFRoZSBKYXZhU2NyaXB0IG5hbWVzIGZvciBuYXRpdmUgSmF2YVNjcmlwdCBlbGVtZW50cyBpbXBsZW1lbnRlZC4KICBNYXA8TWVtYmVyRW50aXR5LCBTdHJpbmc+IG5hdGl2ZU1lbWJlck5hbWUgPSA8TWVtYmVyRW50aXR5LCBTdHJpbmc+e307CgogIC8vLyBDYWNoZSBmb3IgW05hdGl2ZUJlaGF2aW9yXXMgZm9yIGNhbGxpbmcgbmF0aXZlIG1ldGhvZHMuCiAgTWFwPEZ1bmN0aW9uRW50aXR5LCBOYXRpdmVCZWhhdmlvcj4gbmF0aXZlTWV0aG9kQmVoYXZpb3IgPQogICAgICA8RnVuY3Rpb25FbnRpdHksIE5hdGl2ZUJlaGF2aW9yPnt9OwoKICAvLy8gQ2FjaGUgZm9yIFtOYXRpdmVCZWhhdmlvcl1zIGZvciByZWFkaW5nIGZyb20gbmF0aXZlIGZpZWxkcy4KICBNYXA8TWVtYmVyRW50aXR5LCBOYXRpdmVCZWhhdmlvcj4gbmF0aXZlRmllbGRMb2FkQmVoYXZpb3IgPQogICAgICA8RmllbGRFbnRpdHksIE5hdGl2ZUJlaGF2aW9yPnt9OwoKICAvLy8gQ2FjaGUgZm9yIFtOYXRpdmVCZWhhdmlvcl1zIGZvciB3cml0aW5nIHRvIG5hdGl2ZSBmaWVsZHMuCiAgTWFwPE1lbWJlckVudGl0eSwgTmF0aXZlQmVoYXZpb3I+IG5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvciA9CiAgICAgIDxGaWVsZEVudGl0eSwgTmF0aXZlQmVoYXZpb3I+e307CgogIE5hdGl2ZURhdGFCdWlsZGVySW1wbCh0aGlzLl9uYXRpdmVCYXNpY0RhdGEpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHNldE5hdGl2ZU1lbWJlck5hbWUoTWVtYmVyRW50aXR5IGVsZW1lbnQsIFN0cmluZyBuYW1lKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCBzZXR0aW5nIHRoaXMgbW9yZSB0aGFuIG9uY2UuIFRoZSBlbnF1ZXVlcgogICAgLy8gbWlnaHQgZW5xdWV1ZSBbZWxlbWVudF0gc2V2ZXJhbCB0aW1lcyAoYmVmb3JlIHByb2Nlc3NpbmcgaXQpIGFuZCBjb21wdXRlcwogICAgLy8gbmFtZSBvbiBlYWNoIGNhbGwgdG8gYGludGVybmFsQWRkVG9Xb3JrTGlzdGAuCiAgICBhc3NlcnQoCiAgICAgICAgbmF0aXZlTWVtYmVyTmFtZVtlbGVtZW50XSA9PSBudWxsIHx8IG5hdGl2ZU1lbWJlck5hbWVbZWxlbWVudF0gPT0gbmFtZSwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZWxlbWVudCwKICAgICAgICAgICAgIk5hdGl2ZSBtZW1iZXIgbmFtZSBzZXQgaW5jb25zaXN0ZW50bHkgb24gJGVsZW1lbnQ6ICIKICAgICAgICAgICAgIkV4aXN0aW5nIG5hbWUgJyR7bmF0aXZlTWVtYmVyTmFtZVtlbGVtZW50XX0nLCAiCiAgICAgICAgICAgICJuZXcgbmFtZSAnJG5hbWUnLiIpKTsKICAgIG5hdGl2ZU1lbWJlck5hbWVbZWxlbWVudF0gPSBuYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBzZXROYXRpdmVNZXRob2RCZWhhdmlvcihGdW5jdGlvbkVudGl0eSBtZXRob2QsIE5hdGl2ZUJlaGF2aW9yIGJlaGF2aW9yKSB7CiAgICBuYXRpdmVNZXRob2RCZWhhdmlvclttZXRob2RdID0gYmVoYXZpb3I7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHNldE5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yKEZpZWxkRW50aXR5IGZpZWxkLCBOYXRpdmVCZWhhdmlvciBiZWhhdmlvcikgewogICAgbmF0aXZlRmllbGRMb2FkQmVoYXZpb3JbZmllbGRdID0gYmVoYXZpb3I7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHNldE5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvcihGaWVsZEVudGl0eSBmaWVsZCwgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IpIHsKICAgIG5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvcltmaWVsZF0gPSBiZWhhdmlvcjsKICB9CgogIEBvdmVycmlkZQogIE5hdGl2ZURhdGEgY2xvc2UoKSA9PiBuZXcgTmF0aXZlRGF0YUltcGwoX25hdGl2ZUJhc2ljRGF0YSwgbmF0aXZlTWVtYmVyTmFtZSwKICAgICAgbmF0aXZlTWV0aG9kQmVoYXZpb3IsIG5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yLCBuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IpOwp9CgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgZmllbGRzIHRoYXQgb3ZlcmxhcCB3aXRoIFtOYXRpdmVCYXNpY0RhdGFdLCBsaWtlCi8vIFthbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzXS4KY2xhc3MgTmF0aXZlRGF0YUltcGwgaW1wbGVtZW50cyBOYXRpdmVEYXRhLCBOYXRpdmVCYXNpY0RhdGFJbXBsIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW05hdGl2ZURhdGFdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnbmF0aXZlLWRhdGEnOwoKICAvLy8gUHJlZml4IHVzZWQgdG8gZXNjYXBlIEpTIG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBEYXJ0IG5hbWVzCiAgLy8vIHdoZW4gdXNpbmcgSlNJbnRlcm9wLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2pzSW50ZXJvcEVzY2FwZVByZWZpeCA9IHInSlMkJzsKCiAgZmluYWwgTmF0aXZlQmFzaWNEYXRhSW1wbCBfbmF0aXZlQmFzaWNEYXRhOwoKICAvLy8gVGhlIEphdmFTY3JpcHQgbmFtZXMgZm9yIG5hdGl2ZSBKYXZhU2NyaXB0IGVsZW1lbnRzIGltcGxlbWVudGVkLgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIFN0cmluZz4gbmF0aXZlTWVtYmVyTmFtZTsKCiAgLy8vIENhY2hlIGZvciBbTmF0aXZlQmVoYXZpb3JdcyBmb3IgY2FsbGluZyBuYXRpdmUgbWV0aG9kcy4KICBmaW5hbCBNYXA8RnVuY3Rpb25FbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVNZXRob2RCZWhhdmlvcjsKCiAgLy8vIENhY2hlIGZvciBbTmF0aXZlQmVoYXZpb3JdcyBmb3IgcmVhZGluZyBmcm9tIG5hdGl2ZSBmaWVsZHMuCiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwgTmF0aXZlQmVoYXZpb3I+IG5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yOwoKICAvLy8gQ2FjaGUgZm9yIFtOYXRpdmVCZWhhdmlvcl1zIGZvciB3cml0aW5nIHRvIG5hdGl2ZSBmaWVsZHMuCiAgZmluYWwgTWFwPE1lbWJlckVudGl0eSwgTmF0aXZlQmVoYXZpb3I+IG5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvcjsKCiAgTmF0aXZlRGF0YUltcGwoCiAgICAgIHRoaXMuX25hdGl2ZUJhc2ljRGF0YSwKICAgICAgdGhpcy5uYXRpdmVNZW1iZXJOYW1lLAogICAgICB0aGlzLm5hdGl2ZU1ldGhvZEJlaGF2aW9yLAogICAgICB0aGlzLm5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yLAogICAgICB0aGlzLm5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvcik7CgogIGZhY3RvcnkgTmF0aXZlRGF0YUltcGwuZnJvbUlyKEtlcm5lbFRvRWxlbWVudE1hcCBtYXAsIElyQW5ub3RhdGlvbkRhdGEgZGF0YSkgewogICAgTmF0aXZlQmFzaWNEYXRhSW1wbCBuYXRpdmVCYXNpY0RhdGEgPQogICAgICAgIG5ldyBOYXRpdmVCYXNpY0RhdGFJbXBsLmZyb21JcihtYXAsIGRhdGEpOwogICAgTWFwPE1lbWJlckVudGl0eSwgU3RyaW5nPiBuYXRpdmVNZW1iZXJOYW1lID0ge307CiAgICBNYXA8RnVuY3Rpb25FbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVNZXRob2RCZWhhdmlvciA9IHt9OwogICAgTWFwPE1lbWJlckVudGl0eSwgTmF0aXZlQmVoYXZpb3I+IG5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yID0ge307CiAgICBNYXA8TWVtYmVyRW50aXR5LCBOYXRpdmVCZWhhdmlvcj4gbmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yID0ge307CgogICAgZGF0YS5mb3JFYWNoTmF0aXZlTWV0aG9kRGF0YSgoaXIuTWVtYmVyIG5vZGUsCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgSXRlcmFibGU8U3RyaW5nPiBjcmVhdGVzQW5ub3RhdGlvbnMsCiAgICAgICAgSXRlcmFibGU8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnMpIHsKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IG1hcC5nZXRNZW1iZXIobm9kZSk7CiAgICAgIG5hdGl2ZU1lbWJlck5hbWVbbWVtYmVyXSA9IG5hbWU7CiAgICAgIGJvb2wgaXNKc0ludGVyb3AgPSBuYXRpdmVCYXNpY0RhdGEuaXNKc0ludGVyb3BNZW1iZXIobWVtYmVyKTsKICAgICAgbmF0aXZlTWV0aG9kQmVoYXZpb3JbbWVtYmVyXSA9IG1hcC5nZXROYXRpdmVCZWhhdmlvckZvck1ldGhvZCgKICAgICAgICAgIG5vZGUsIGNyZWF0ZXNBbm5vdGF0aW9ucywgcmV0dXJuc0Fubm90YXRpb25zLAogICAgICAgICAgaXNKc0ludGVyb3A6IGlzSnNJbnRlcm9wKTsKICAgIH0pOwoKICAgIGRhdGEuZm9yRWFjaE5hdGl2ZUZpZWxkRGF0YSgoaXIuTWVtYmVyIG5vZGUsCiAgICAgICAgU3RyaW5nIG5hbWUsCiAgICAgICAgSXRlcmFibGU8U3RyaW5nPiBjcmVhdGVzQW5ub3RhdGlvbnMsCiAgICAgICAgSXRlcmFibGU8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnMpIHsKICAgICAgRmllbGRFbnRpdHkgZmllbGQgPSBtYXAuZ2V0TWVtYmVyKG5vZGUpOwogICAgICBuYXRpdmVNZW1iZXJOYW1lW2ZpZWxkXSA9IG5hbWU7CiAgICAgIGJvb2wgaXNKc0ludGVyb3AgPSBuYXRpdmVCYXNpY0RhdGEuaXNKc0ludGVyb3BNZW1iZXIoZmllbGQpOwogICAgICBuYXRpdmVGaWVsZExvYWRCZWhhdmlvcltmaWVsZF0gPSBtYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JGaWVsZExvYWQoCiAgICAgICAgICBub2RlLCBjcmVhdGVzQW5ub3RhdGlvbnMsIHJldHVybnNBbm5vdGF0aW9ucywKICAgICAgICAgIGlzSnNJbnRlcm9wOiBpc0pzSW50ZXJvcCk7CiAgICAgIG5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvcltmaWVsZF0gPQogICAgICAgICAgbWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9yRmllbGRTdG9yZShub2RlKTsKICAgIH0pOwoKICAgIHJldHVybiBuZXcgTmF0aXZlRGF0YUltcGwoCiAgICAgICAgbmF0aXZlQmFzaWNEYXRhLAogICAgICAgIG5hdGl2ZU1lbWJlck5hbWUsCiAgICAgICAgbmF0aXZlTWV0aG9kQmVoYXZpb3IsCiAgICAgICAgbmF0aXZlRmllbGRMb2FkQmVoYXZpb3IsCiAgICAgICAgbmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yKTsKICB9CgogIGZhY3RvcnkgTmF0aXZlRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBOYXRpdmVCYXNpY0RhdGEgbmF0aXZlQmFzaWNEYXRhID0KICAgICAgICBuZXcgTmF0aXZlQmFzaWNEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGVsZW1lbnRFbnZpcm9ubWVudCk7CiAgICBNYXA8TWVtYmVyRW50aXR5LCBTdHJpbmc+IG5hdGl2ZU1lbWJlck5hbWUgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyTWFwKChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PiBzb3VyY2UucmVhZFN0cmluZygpKTsKICAgIE1hcDxGdW5jdGlvbkVudGl0eSwgTmF0aXZlQmVoYXZpb3I+IG5hdGl2ZU1ldGhvZEJlaGF2aW9yID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlck1hcCgoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4KICAgICAgICAgICAgbmV3IE5hdGl2ZUJlaGF2aW9yLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpKTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIE5hdGl2ZUJlaGF2aW9yPiBuYXRpdmVGaWVsZExvYWRCZWhhdmlvciA9CiAgICAgICAgc291cmNlLnJlYWRNZW1iZXJNYXAoKE1lbWJlckVudGl0eSBtZW1iZXIpID0+CiAgICAgICAgICAgIG5ldyBOYXRpdmVCZWhhdmlvci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSk7CiAgICBNYXA8TWVtYmVyRW50aXR5LCBOYXRpdmVCZWhhdmlvcj4gbmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlck1hcCgoTWVtYmVyRW50aXR5IG1lbWJlcikgPT4KICAgICAgICAgICAgbmV3IE5hdGl2ZUJlaGF2aW9yLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgTmF0aXZlRGF0YUltcGwoCiAgICAgICAgbmF0aXZlQmFzaWNEYXRhLAogICAgICAgIG5hdGl2ZU1lbWJlck5hbWUsCiAgICAgICAgbmF0aXZlTWV0aG9kQmVoYXZpb3IsCiAgICAgICAgbmF0aXZlRmllbGRMb2FkQmVoYXZpb3IsCiAgICAgICAgbmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIF9uYXRpdmVCYXNpY0RhdGEud3JpdGVUb0RhdGFTaW5rKHNpbmspOwoKICAgIHNpbmsud3JpdGVNZW1iZXJNYXAobmF0aXZlTWVtYmVyTmFtZSwKICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlciwgU3RyaW5nIG5hbWUpID0+IHNpbmsud3JpdGVTdHJpbmcobmFtZSkpOwoKICAgIHNpbmsud3JpdGVNZW1iZXJNYXAobmF0aXZlTWV0aG9kQmVoYXZpb3IsCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIE5hdGl2ZUJlaGF2aW9yIGJlaGF2aW9yKSB7CiAgICAgIGJlaGF2aW9yLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIH0pOwoKICAgIHNpbmsud3JpdGVNZW1iZXJNYXAobmF0aXZlRmllbGRMb2FkQmVoYXZpb3IsCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIE5hdGl2ZUJlaGF2aW9yIGJlaGF2aW9yKSB7CiAgICAgIGJlaGF2aW9yLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIH0pOwogICAgc2luay53cml0ZU1lbWJlck1hcChuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3IsCiAgICAgICAgKE1lbWJlckVudGl0eSBtZW1iZXIsIE5hdGl2ZUJlaGF2aW9yIGJlaGF2aW9yKSB7CiAgICAgIGJlaGF2aW9yLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIH0pOwoKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8TGlicmFyeUVudGl0eSwgU3RyaW5nPiBnZXQganNJbnRlcm9wTGlicmFyaWVzID0+CiAgICAgIF9uYXRpdmVCYXNpY0RhdGEuanNJbnRlcm9wTGlicmFyaWVzOwoKICBAb3ZlcnJpZGUKICBTZXQ8Q2xhc3NFbnRpdHk+IGdldCBhbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzID0+CiAgICAgIF9uYXRpdmVCYXNpY0RhdGEuYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3NlczsKCiAgQG92ZXJyaWRlCiAgTWFwPENsYXNzRW50aXR5LCBTdHJpbmc+IGdldCBqc0ludGVyb3BDbGFzc2VzID0+CiAgICAgIF9uYXRpdmVCYXNpY0RhdGEuanNJbnRlcm9wQ2xhc3NlczsKCiAgQG92ZXJyaWRlCiAgTWFwPE1lbWJlckVudGl0eSwgU3RyaW5nPiBnZXQganNJbnRlcm9wTWVtYmVycyA9PgogICAgICBfbmF0aXZlQmFzaWNEYXRhLmpzSW50ZXJvcE1lbWJlcnM7CgogIEBvdmVycmlkZQogIGJvb2wgaXNBbm9ueW1vdXNKc0ludGVyb3BDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3Nlcy5jb250YWlucyhlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNOYXRpdmVDbGFzcyhDbGFzc0VudGl0eSBlbGVtZW50KSA9PgogICAgICBfbmF0aXZlQmFzaWNEYXRhLmlzTmF0aXZlQ2xhc3MoZWxlbWVudCk7CgogIEBvdmVycmlkZQogIExpc3Q8U3RyaW5nPiBnZXROYXRpdmVUYWdzT2ZDbGFzcyhDbGFzc0VudGl0eSBjbHMpID0+CiAgICAgIF9uYXRpdmVCYXNpY0RhdGEuZ2V0TmF0aXZlVGFnc09mQ2xhc3MoY2xzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNOYXRpdmVUYWdzRm9yY2VkTm9uTGVhZihDbGFzc0VudGl0eSBjbHMpID0+CiAgICAgIF9uYXRpdmVCYXNpY0RhdGEuaGFzTmF0aXZlVGFnc0ZvcmNlZE5vbkxlYWYoY2xzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNKc0ludGVyb3BVc2VkID0+IF9uYXRpdmVCYXNpY0RhdGEuaXNKc0ludGVyb3BVc2VkOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNJbnRlcm9wTGlicmFyeShMaWJyYXJ5RW50aXR5IGVsZW1lbnQpID0+CiAgICAgIF9uYXRpdmVCYXNpY0RhdGEuaXNKc0ludGVyb3BMaWJyYXJ5KGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSnNJbnRlcm9wQ2xhc3MoQ2xhc3NFbnRpdHkgZWxlbWVudCkgPT4KICAgICAgX25hdGl2ZUJhc2ljRGF0YS5pc0pzSW50ZXJvcENsYXNzKGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKENsYXNzRW50aXR5IGVsZW1lbnQpID0+CiAgICAgIF9uYXRpdmVCYXNpY0RhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoZWxlbWVudCk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXRKc0ludGVyb3BMaWJyYXJ5TmFtZShMaWJyYXJ5RW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBqc0ludGVyb3BMaWJyYXJpZXNbZWxlbWVudF07CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0SnNJbnRlcm9wQ2xhc3NOYW1lKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBqc0ludGVyb3BDbGFzc2VzW2VsZW1lbnRdOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldEpzSW50ZXJvcE1lbWJlck5hbWUoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBqc0ludGVyb3BNZW1iZXJzW2VsZW1lbnRdOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBfaXNKc0ludGVyb3BNZW1iZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBqc0ludGVyb3BNZW1iZXJzLmNvbnRhaW5zS2V5KGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0pzSW50ZXJvcE1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQuaXNGdW5jdGlvbiB8fAogICAgICAgIGVsZW1lbnQuaXNDb25zdHJ1Y3RvciB8fAogICAgICAgIGVsZW1lbnQuaXNHZXR0ZXIgfHwKICAgICAgICBlbGVtZW50LmlzU2V0dGVyKSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gZWxlbWVudDsKICAgICAgaWYgKCFmdW5jdGlvbi5pc0V4dGVybmFsKSByZXR1cm4gZmFsc2U7CgogICAgICBpZiAoX2lzSnNJbnRlcm9wTWVtYmVyKGZ1bmN0aW9uKSkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChmdW5jdGlvbi5lbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGlzSnNJbnRlcm9wQ2xhc3MoZnVuY3Rpb24uZW5jbG9zaW5nQ2xhc3MpOwogICAgICB9CiAgICAgIGlmIChmdW5jdGlvbi5pc1RvcExldmVsKSB7CiAgICAgICAgcmV0dXJuIGlzSnNJbnRlcm9wTGlicmFyeShmdW5jdGlvbi5saWJyYXJ5KTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2lzSnNJbnRlcm9wTWVtYmVyKGVsZW1lbnQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNGaXhlZEJhY2tlbmROYW1lKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gaXNKc0ludGVyb3BNZW1iZXIoZWxlbWVudCkgfHwgbmF0aXZlTWVtYmVyTmFtZS5jb250YWluc0tleShlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXRGaXhlZEJhY2tlbmROYW1lKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBTdHJpbmcgbmFtZSA9IG5hdGl2ZU1lbWJlck5hbWVbZWxlbWVudF07CiAgICBpZiAobmFtZSA9PSBudWxsICYmIGlzSnNJbnRlcm9wTWVtYmVyKGVsZW1lbnQpKSB7CiAgICAgIC8vIElmIGFuIGVsZW1lbnQgaXNKc0ludGVyb3AgYnV0IF9pc0pzSW50ZXJvcCBpcyBmYWxzZSB0aGF0IG1lYW5zIGl0IGlzCiAgICAgIC8vIGNvbnNpZGVyZWQgaW50ZXJvcCBhcyB0aGUgcGFyZW50IGNsYXNzIGlzIGludGVyb3AuCiAgICAgIG5hbWUgPSBlbGVtZW50LmlzQ29uc3RydWN0b3IKICAgICAgICAgID8gX2pzQ2xhc3NOYW1lSGVscGVyKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MpCiAgICAgICAgICA6IF9qc01lbWJlck5hbWVIZWxwZXIoZWxlbWVudCk7CiAgICAgIG5hdGl2ZU1lbWJlck5hbWVbZWxlbWVudF0gPSBuYW1lOwogICAgfQogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBTdHJpbmcgX2pzTGlicmFyeU5hbWVIZWxwZXIoTGlicmFyeUVudGl0eSBlbGVtZW50KSB7CiAgICBTdHJpbmcganNJbnRlcm9wTmFtZSA9IGdldEpzSW50ZXJvcExpYnJhcnlOYW1lKGVsZW1lbnQpOwogICAgaWYgKGpzSW50ZXJvcE5hbWUgIT0gbnVsbCAmJiBqc0ludGVyb3BOYW1lLmlzTm90RW1wdHkpIHJldHVybiBqc0ludGVyb3BOYW1lOwogICAgcmV0dXJuICdzZWxmJzsKICB9CgogIFN0cmluZyBfanNDbGFzc05hbWVIZWxwZXIoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgU3RyaW5nIGpzSW50ZXJvcE5hbWUgPSBnZXRKc0ludGVyb3BDbGFzc05hbWUoZWxlbWVudCk7CiAgICBpZiAoanNJbnRlcm9wTmFtZSAhPSBudWxsICYmIGpzSW50ZXJvcE5hbWUuaXNOb3RFbXB0eSkgcmV0dXJuIGpzSW50ZXJvcE5hbWU7CiAgICByZXR1cm4gY29tcHV0ZVVuZXNjYXBlZEpTSW50ZXJvcE5hbWUoZWxlbWVudC5uYW1lKTsKICB9CgogIFN0cmluZyBfanNNZW1iZXJOYW1lSGVscGVyKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBTdHJpbmcganNJbnRlcm9wTmFtZSA9IGpzSW50ZXJvcE1lbWJlcnNbZWxlbWVudF07CiAgICBhc3NlcnQoCiAgICAgICAgIShqc0ludGVyb3BNZW1iZXJzLmNvbnRhaW5zS2V5KGVsZW1lbnQpICYmIGpzSW50ZXJvcE5hbWUgPT0gbnVsbCksCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGVsZW1lbnQsCiAgICAgICAgICAgICdNZW1iZXIgJGVsZW1lbnQgaXMganMgaW50ZXJvcCBidXQganMgaW50ZXJvcCBuYW1lIGhhcyBub3QgeWV0ICcKICAgICAgICAgICAgJ2JlZW4gY29tcHV0ZWQuJykpOwogICAgaWYgKGpzSW50ZXJvcE5hbWUgIT0gbnVsbCAmJiBqc0ludGVyb3BOYW1lLmlzTm90RW1wdHkpIHsKICAgICAgcmV0dXJuIGpzSW50ZXJvcE5hbWU7CiAgICB9CiAgICByZXR1cm4gY29tcHV0ZVVuZXNjYXBlZEpTSW50ZXJvcE5hbWUoZWxlbWVudC5uYW1lKTsKICB9CgogIC8vLyBSZXR1cm5zIGEgSmF2YVNjcmlwdCBwYXRoIHNwZWNpZnlpbmcgdGhlIGNvbnRleHQgaW4gd2hpY2gKICAvLy8gW2VsZW1lbnQuZml4ZWRCYWNrZW5kTmFtZV0gc2hvdWxkIGJlIGV2YWx1YXRlZC4gT25seSBhcHBsaWNhYmxlIGZvcgogIC8vLyBlbGVtZW50cyB1c2luZyB0eXBlZCBKYXZhU2NyaXB0IGludGVyb3AuCiAgLy8vIEZvciBleGFtcGxlOiBmaXhlZEJhY2tlbmRQYXRoIGZvciB0aGUgc3RhdGljIG1ldGhvZCBjcmVhdGVNYXAgaW4gdGhlCiAgLy8vIE1hcCBjbGFzcyBvZiB0aGUgZ29vZy5tYXAgSmF2YVNjcmlwdCBsaWJyYXJ5IHdvdWxkIGhhdmUgcGF0aAogIC8vLyAiZ29vZy5tYXBzLk1hcCIuCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldEZpeGVkQmFja2VuZE1ldGhvZFBhdGgoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgaWYgKCFpc0pzSW50ZXJvcE1lbWJlcihlbGVtZW50KSkgcmV0dXJuIG51bGw7CiAgICBpZiAoZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyKSByZXR1cm4gJ3RoaXMnOwogICAgaWYgKGVsZW1lbnQuaXNDb25zdHJ1Y3RvcikgewogICAgICByZXR1cm4gX2ZpeGVkQmFja2VuZENsYXNzUGF0aChlbGVtZW50LmVuY2xvc2luZ0NsYXNzKTsKICAgIH0KICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKF9qc0xpYnJhcnlOYW1lSGVscGVyKGVsZW1lbnQubGlicmFyeSkpOwogICAgaWYgKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgICBzYi4ud3JpdGUoJy4nKS4ud3JpdGUoX2pzQ2xhc3NOYW1lSGVscGVyKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MpKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgU3RyaW5nIF9maXhlZEJhY2tlbmRDbGFzc1BhdGgoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKCFpc0pzSW50ZXJvcENsYXNzKGVsZW1lbnQpKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfanNMaWJyYXJ5TmFtZUhlbHBlcihlbGVtZW50LmxpYnJhcnkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc05hdGl2ZU1lbWJlcihNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKGlzSnNJbnRlcm9wTWVtYmVyKGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBuYXRpdmVNZW1iZXJOYW1lLmNvbnRhaW5zS2V5KGVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlTWV0aG9kQmVoYXZpb3IoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKSB7CiAgICBhc3NlcnQoCiAgICAgICAgbmF0aXZlTWV0aG9kQmVoYXZpb3IuY29udGFpbnNLZXkobWV0aG9kKSwKICAgICAgICBmYWlsZWRBdChtZXRob2QsCiAgICAgICAgICAgICJObyBuYXRpdmUgbWV0aG9kIGJlaGF2aW9yIGhhcyBiZWVuIGNvbXB1dGVkIGZvciAkbWV0aG9kLiIpKTsKICAgIHJldHVybiBuYXRpdmVNZXRob2RCZWhhdmlvclttZXRob2RdOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlRmllbGRMb2FkQmVoYXZpb3IoRmllbGRFbnRpdHkgZmllbGQpIHsKICAgIGFzc2VydCgKICAgICAgICBuYXRpdmVGaWVsZExvYWRCZWhhdmlvci5jb250YWluc0tleShmaWVsZCksCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGZpZWxkLAogICAgICAgICAgICAiTm8gbmF0aXZlIGZpZWxkIGxvYWQgYmVoYXZpb3IgaGFzIGJlZW4gIgogICAgICAgICAgICAiY29tcHV0ZWQgZm9yICRmaWVsZC4iKSk7CiAgICByZXR1cm4gbmF0aXZlRmllbGRMb2FkQmVoYXZpb3JbZmllbGRdOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yKEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICBhc3NlcnQoCiAgICAgICAgbmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yLmNvbnRhaW5zS2V5KGZpZWxkKSwKICAgICAgICBmYWlsZWRBdChmaWVsZCwKICAgICAgICAgICAgIk5vIG5hdGl2ZSBmaWVsZCBzdG9yZSBiZWhhdmlvciBoYXMgYmVlbiBjb21wdXRlZCBmb3IgJGZpZWxkLiIpKTsKICAgIHJldHVybiBuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3JbZmllbGRdOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGNvbXB1dGVVbmVzY2FwZWRKU0ludGVyb3BOYW1lKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gbmFtZS5zdGFydHNXaXRoKF9qc0ludGVyb3BFc2NhcGVQcmVmaXgpCiAgICAgICAgPyBuYW1lLnN1YnN0cmluZyhfanNJbnRlcm9wRXNjYXBlUHJlZml4Lmxlbmd0aCkKICAgICAgICA6IG5hbWU7CiAgfQoKICBAb3ZlcnJpZGUKICBNYXA8Q2xhc3NFbnRpdHksIE5hdGl2ZUNsYXNzVGFnPiBnZXQgbmF0aXZlQ2xhc3NUYWdJbmZvID0+CiAgICAgIF9uYXRpdmVCYXNpY0RhdGEubmF0aXZlQ2xhc3NUYWdJbmZvOwoKICBAb3ZlcnJpZGUKICBFbGVtZW50RW52aXJvbm1lbnQgZ2V0IF9lbnYgPT4gX25hdGl2ZUJhc2ljRGF0YS5fZW52Owp9CgpjbGFzcyBOYXRpdmVDbGFzc1RhZyB7CiAgZmluYWwgTGlzdDxTdHJpbmc+IG5hbWVzOwogIGZpbmFsIGJvb2wgaXNOb25MZWFmOwoKICBmYWN0b3J5IE5hdGl2ZUNsYXNzVGFnKFN0cmluZyB0YWdUZXh0KSB7CiAgICBMaXN0PFN0cmluZz4gdGFncyA9IHRhZ1RleHQuc3BsaXQoJywnKTsKICAgIExpc3Q8U3RyaW5nPiBuYW1lcyA9IHRhZ3Mud2hlcmUoKHMpID0+ICFzLnN0YXJ0c1dpdGgoJyEnKSkudG9MaXN0KCk7CiAgICBib29sIGlzTm9uTGVhZiA9IHRhZ3MuY29udGFpbnMoJyFub25sZWFmJyk7CiAgICByZXR1cm4gbmV3IE5hdGl2ZUNsYXNzVGFnLmludGVybmFsKG5hbWVzLCBpc05vbkxlYWYpOwogIH0KCiAgTmF0aXZlQ2xhc3NUYWcuaW50ZXJuYWwodGhpcy5uYW1lcywgdGhpcy5pc05vbkxlYWYpOwoKICBTdHJpbmcgZ2V0IHRleHQgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUobmFtZXMuam9pbignLCcpKTsKICAgIGlmIChpc05vbkxlYWYpIHsKICAgICAgaWYgKG5hbWVzLmlzTm90RW1wdHkpIHsKICAgICAgICBzYi53cml0ZSgnLCcpOwogICAgICB9CiAgICAgIHNiLndyaXRlKCchbm9ubGVhZicpOwogICAgfQogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IEhhc2hpbmcubGlzdEhhc2gobmFtZXMsIGlzTm9uTGVhZi5oYXNoQ29kZSk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgTmF0aXZlQ2xhc3NUYWcpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBlcXVhbEVsZW1lbnRzKG5hbWVzLCBvdGhlci5uYW1lcykgJiYgaXNOb25MZWFmID09IG90aGVyLmlzTm9uTGVhZjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IHRleHQ7Cn0Kg2oATk48ASABKAEZOiQhJTYuHAFPBFAhPS5GLgEzJwFIBk9ILCsBRDYBOTQBSDUBNhwBOjIBOC4BOTACAVENBE40OClGKQEuDCcBTQZHS04RLQFEQQFIQAFGQQFJEjIBT040AVEGTUM8AQwwAUI5AUI3AUA1AUE3AUwQNQIBKCoGTE4WPwE5BkpODUUBOQZKTA0xLwFRL0EBSg85AgEjQFABRE8BQlABNwZDPwFJFgIBRRgBOB84JwFJTQFHRwE9RwFHSQEMQAwSEhExOAFNSk0PDCs1EhE7Pyo7BAEMRgwSEhUxQigEAQwxMAwSEhUxQCYXLgYEAQxCDBISFTFBJgQBDDoUJBUcHBojGwQBHBUEAgE3SR0xASEBOB89AUk3AUczAT00AUc0ARcRHx8dJh4BJjc1Pjg0NTUBO0kIQk4QCDweLCQZLAgIQDQIAVBIBAEyQhc6ITEqPAg0MjAwTzFMFSQcHBwaIxsEAQwoFUIkJQhAPDIqRxMEAQwsMDQEAQw3KgQBDDUuBAEMHkQBDDM0BAEMLzIEAU0yMgQBDDFQHiEcHCkuATUtOgghNQgUDSoGBAEMNic/EwZBBAIBOy4BR0kBPj0qAUI+JwFAPycBMAEMQExRNQxQEhVCPSMmBAEMUS0EAQxQLwQBDFEwBAEMT1ACAVAgQkQdKwFDHDcBLgFHNAE+QgFCQwFARAESHR0hJCYBUSozNUNERQEyFS0vMSdERTglCAExFS0vLyZDSjglKDQIAR8ZGh4hIwQBLUIXJkwxTD82PEA2PEE2PBUfGRoeISMEAQwoFSwBKkcBLjkmCAExOSYIMjkmCAETBAEMNysBDDQyAQwzKQEMNCkBDDg4BAEMLS8BDDgyAQw2OAEMQAEMNDQBDDAyAQw3OQEMOigEAQw2JgQBDDgmBAEMMjIEAQwxHiEcHCkuATUtOgghNQgUDSoGBAEMM1AEAQw1LTZOPCM3KigGEQQBNz1REwQBMztROAQBNTYMSxIVTSA9HAY4BAFASi9LQxcMPTIxIT0GKjUqSQYaBAE3MTIEAQwuMTIEAQxCDDIZSikEAQxBDDQSEzYmKwQBDEIMNRhOLAQBDDYzOBAEAQw9KwEMOAIBFxwYASssSTA6BAE3ARQqHxUeFwgcBhoEAQxDAQwcLTBOBAEMHQIBMHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydDJzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19tb2RlbC9sb2NhbHMuZGFydMAATyovLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX21vZGVsLmxvY2FsczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9pbmRleGVkLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2p1bXBzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKCmltcG9ydCAnZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnZWxlbWVudHMuZGFydCcgc2hvdyBKR2VuZXJhdG9yQm9keTsKCmNsYXNzIEdsb2JhbExvY2Fsc01hcCB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtHbG9iYWxMb2NhbHNNYXBdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZ2xvYmFsLWxvY2Fscy1tYXAnOwoKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBLZXJuZWxUb0xvY2Fsc01hcD4gX2xvY2Fsc01hcHM7CgogIEdsb2JhbExvY2Fsc01hcCgpIDogX2xvY2Fsc01hcHMgPSB7fTsKCiAgR2xvYmFsTG9jYWxzTWFwLmludGVybmFsKHRoaXMuX2xvY2Fsc01hcHMpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0dsb2JhbExvY2Fsc01hcF0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBHbG9iYWxMb2NhbHNNYXAucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1hcDxNZW1iZXJFbnRpdHksIEtlcm5lbFRvTG9jYWxzTWFwPiBfbG9jYWxzTWFwcyA9IHt9OwogICAgaW50IG1hcENvdW50ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWFwQ291bnQ7IGkrKykgewogICAgICBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXAgPQogICAgICAgICAgbmV3IEtlcm5lbFRvTG9jYWxzTWFwSW1wbC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgTGlzdDxNZW1iZXJFbnRpdHk+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+ewogICAgICAgICdjaGlsZHJlbic6IF90b1NvcnRlZFNlcmlhbGl6ZWRJZHMoaW5mby5jbG9zdXJlcywgaWRGb3IpLAogICAgICAgICdtb2RpZmllcnMnOiBfdmlzaXRGdW5jdGlvbk1vZGlmaWVycyhpbmZvLm1vZGlmaWVycyksCiAgICAgICAgJ3JldHVyblR5cGUnOiBpbmZvLnJldHVyblR5cGUsCiAgICAgICAgJ2luZmVycmVkUmV0dXJuVHlwZSc6IGluZm8uaW5mZXJyZWRSZXR1cm5UeXBlLAogICAgICAgICdwYXJhbWV0ZXJzJzoKICAgICAgICAgICAgaW5mby5wYXJhbWV0ZXJzLm1hcCgocCkgPT4gX3Zpc2l0UGFyYW1ldGVySW5mbyhwKSkudG9MaXN0KCksCiAgICAgICAgJ3NpZGVFZmZlY3RzJzogaW5mby5zaWRlRWZmZWN0cywKICAgICAgICAnaW5saW5lZENvdW50JzogaW5mby5pbmxpbmVkQ291bnQsCiAgICAgICAgJ2NvZGUnOiBfc2VyaWFsaXplQ29kZShpbmZvLmNvZGUpLAogICAgICAgICd0eXBlJzogaW5mby50eXBlLAogICAgICAgIC8vIE5vdGU6IHZlcnNpb24gMy4yIG9mIGR1bXAtaW5mbyBzZXJpYWxpemVzIGB1c2VzYCBpbiBhIHNlY3Rpb24gY2FsbGVkCiAgICAgICAgLy8gYGhvbGRpbmdgIGF0IHRoZSB0b3AtbGV2ZWwuCiAgICAgIH0pOwogIH0KCiAgTWFwIHZpc2l0Q2xvc3VyZShDbG9zdXJlSW5mbyBpbmZvKSB7CiAgICByZXR1cm4gX3Zpc2l0QmFzaWNJbmZvKGluZm8pCiAgICAgIC4uYWRkQWxsKDxTdHJpbmcsIE9iamVjdD57J2Z1bmN0aW9uJzogaWRGb3IoaW5mby5mdW5jdGlvbikuc2VyaWFsaXplZElkfSk7CiAgfQoKICB2aXNpdFR5cGVkZWYoVHlwZWRlZkluZm8gaW5mbykgPT4gX3Zpc2l0QmFzaWNJbmZvKGluZm8pLi5bJ3R5cGUnXSA9IGluZm8udHlwZTsKCiAgdmlzaXRPdXRwdXQoT3V0cHV0VW5pdEluZm8gaW5mbykgPT4gX3Zpc2l0QmFzaWNJbmZvKGluZm8pCiAgICAuLlsnZmlsZW5hbWUnXSA9IGluZm8uZmlsZW5hbWUKICAgIC4uWydpbXBvcnRzJ10gPSBpbmZvLmltcG9ydHM7CgogIE9iamVjdCBfc2VyaWFsaXplQ29k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dHJlYW1lZC4KCmltcG9ydCAnZGFydDpjb252ZXJ0JzsKCmltcG9ydCAnc3JjL2JpbmFyeS9zaW5rLmRhcnQnOwppbXBvcnQgJ3NyYy9iaW5hcnkvc291cmNlLmRhcnQnOwppbXBvcnQgJ2luZm8uZGFydCc7Cgp2b2lkIGVuY29kZShBbGxJbmZvIGluZm8sIFNpbms8TGlzdDxpbnQ+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+KSB0eXBlc1RvVGV4dCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ3snKTsKICAgIFN0cmluZyBjb21tYSA9ICcnOwogICAgX3RhcmdldEluZm9NYXAuZm9yRWFjaCgoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSwgVGFyZ2V0SW5mbyBpbmZvKSB7CiAgICAgIHNiLndyaXRlKCcke2NvbW1hfSR7dmFyaWFibGUubmFtZX06Jyk7CiAgICAgIGluZm8uX2dldFRleHQoc2IsIHR5cGVzVG9UZXh0KTsKICAgICAgY29tbWEgPSAnLCc7CiAgICB9KTsKICAgIHNiLndyaXRlKCd9Jyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdUeXBlTWFwKCcpOwogICAgU3RyaW5nIGNvbW1hID0gJyc7CiAgICBfdGFyZ2V0SW5mb01hcC5mb3JFYWNoKChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlLCBUYXJnZXRJbmZvIGluZm8pIHsKICAgICAgc2Iud3JpdGUoJyR7Y29tbWF9JHZhcmlhYmxlLT4kaW5mbycpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0pOwogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQqHjQBOTjwBKDQvMTUfHCUVICEBSxU0CwFIBkgSAToJAgE/IykrIAsiBAIBSTAETk9PODpDPzJLASUBHwFIIAEpTwQBUSYXAU4vLwEtAQwjHxYEAS8wFwQBSwExNikBKhwdAU82GCA/MwYZBAFMNiQaMQQBTyZDAUwmLB4ZBAFPJ0UBTCctHxkEAQwrTAEMKyAEAQwnHiEdBAEMIyMhHQQBOis9BjMEAUcUBkooBk9GSAZNUFBNT00oLSEGKz0GLCQGJCRBMSgkBkcfBAFOGwZNKyc3NkcvSwYjPEQ9NwYxKCQmLicGIwQBGlABSj0BDDY5OjVQNzYgQzRNPyoPQj84PyoIHU03SzdOCh5ECAYXBAEaTwEMNjk6NkciUCU+Ly9AIU1DT00WKTolISVLIzciCjAIBks2FgQBOjsBDEI5NkJNMS09FwQBJSYgIyEBDEw5QxxHPkInDThETzwuSScGLVEXBAE6OgEMQjlAPBYEAVFLBkw2QS5JBAE0LDMGNAQBHiNQAU8GTR4nPU0+BhkEAUUTQUoTIyAkJjooOhYIQhYIRBYIPz0WCChFQBoMCggTBgFOEC4vQCUpKCkuRAgUBgEiNDUWOzQ7NikzNDlPCCUsBhIEAS0GTkopJiAjICNDLiwyMzdBPkpHMwgGMiA1G05FQUwRRzoIBkciDgYBNAFMTAFPRihPNysiSi8sMAEqFAhLQx0lOSEfRx82GwYBTUI5LBoYKgYgNRtORU87BgEwHR9FKQYdBAFQGwZNK0U/Nk8LIyIoMSg9BkcZSzMiCAYjPFA6H0srM0AvQiVJTC5CThkKMDxBCCU9O0A+KTImDycIBiQtUS4KKkM2CAYiSScGIwQBOiIdKCoNRxU9MwgGIyUNPRU9LggGMQQBHyAgIyEBDEBDOR1JUCIqOikkJTxNUSpIK0cIJSQ9TlEqSitJCAYtSxcEAUMBDDYmKgZGDCU4Skc/LysZBAFJAQw2Oyk2MDENQwYXBAFFAQwyOScXBAFEAQwyOCYWBAE4PgEMQEM4RzotPRcEAUI+AQxKQzpKIj8tQhcEAR87AQxAHCg/Kw1FMzYPH0tBPggGLS4XBAEfOgEMQD8tFgQBQj4BDEpDHCg/Kw1BJkVDRS48JCcGLUIXBAEMQiEcMzUjHTQ2LEcNHDM1JB00NkQuBi8EAQwmHTQ2LS0hBAEiSho2OCYsISc2JjswEyYbEysgEw0wKgYEAQxKTiJDMwQBMwEMOCoYJT0mGEsZTAYeKgQBDCYqIQQBDD4aLQQBKT8mPz8EATJBAQw6QU4tOxcEAQwqMBY2LiwIBi9HEQQBDEYgEQQBTAEMODcrKgQBQQEMRiIlMQQBLwEMNBwoBAE1AQw6HysEATEBDDYdKQQBNQEMOh8rBAE1AQw6HysEATEBDDYdKQQBMQEMNiIdKQQBLwEMNCIcKAQBLwEMNB4cKAQBDCoaHAQBPwEMRBxQREJDHCMjJDgnHRcEASUBDCogFyMEAQwtIhoEAQxOKAQBDDkaBAEMPCgEAQw1IAQBDDsfBAE7AQw5GyIEASVGAQxFQzcEAR9AAQw5QzEEAQw5HgQBDD8dAQw2AQwxICNQHx8aHhoEAU4jAQw1TDc5NxhPSUcgLTsnCA1RN08cOjVDMAgGJDIjUB4aPBoEAQwvI1AaHxoEAQw1I1AfHxoaBAE5AQw3ICdAThlEMxwdBiEeBAEMPiAoBAEMNkoEAQwpGh4EASUBDCMXGgQBDC0aHwQBMQEMNh0pBAExAQw2HSkEATkBDDcnHzY4Jx0hRQQBQQEMPxxQREMcIyMlOCcdBAE3ATUhIRsEATABLjcyGwQBLQEMK0ocIyMbOB4VBAExAQwvSRwjIyMdOB4VBAElAQwjShwhFzgeFQQBQQE8ITQkNy4YBgQBDD8hJQQBPwEMRCQwBAIBFiYhAS4CAUcENgQ/BDkEEy8iAUckAU0lAREBQgFOKjsqHksZLT8rCggGHSwwFwo8HERBT0RCHRcKCAYWBAEMFR0uSQYWBAEMHC0iLjExBAERTRMXHRkoEwYeFxopBhMEAQwWKh0oHSQGHiYGExoEAgFIBDYEPwQ5BBMvIgE1KgE6LwFJAU9MTi84PAEwHAFLIRsrKRYRLwoYIggBOjwUMA8yCEROTRdLFgYBGh8mDTMuCAYuKiwNRhUWBhNLEAQBURsGKyYkLQE8QgFAPj8ZKikqNjMnLEoBTBU4AUxLFDMmIRM1DAooLUwBTBU5AUtLFDMnIhM2DAo9ORlPCggGAT0+MSo0CCs2CAYBPj83KjUIKzcIBgFGIBRRASIqEwYBTQQBTiw7IjE9Gj8VCB8aDzApPBxDHERPNUsXCggGFgQBEU0TFzEXLBMGEywTBAEMFiodLSs5ExoEAgFHDwQ/BDkEEEABMwFMUFAvRRc5SjIaHkQwGw0WIz8kPx5AI0kGJzUEAVAcIC0BPRpQRSscKycICDUEAUkkPxo9UCslDxgICDUEAUpOGTgsPRpQJyUhGEZDQzQMCi0rS1A/MSFDIwoPGAgINQQBSi1QNRYYKwY8BAFHKhMXUC0mEwgTGgQBDBYqGhdQLBMIExoEAgEocGFja2FnZTpjb21waWxlci9zcmMvaXIvc3RhdGljX3R5cGUuZGFydDtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91bml2ZXJzZS9jbGFzc19oaWVyYXJjaHkuZGFydMAAi1IvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnIHNob3cgSW50ZXJmYWNlVHlwZTsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnY2xhc3Nfc2V0LmRhcnQnOwoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogTW92ZSBtb3JlIG1ldGhvZHMgZnJvbSBgSkNsb3NlZFdvcmxkYCB0bwovLyBgQ2xhc3NIaWVyYXJjaHlgLgphYnN0cmFjdCBjbGFzcyBDbGFzc0hpZXJhcmNoeSB7CiAgLy8vIERlc2VyaWFsaXplcyBhIFtDbGFzc0hpZXJhcmNoeV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBDbGFzc0hpZXJhcmNoeS5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgICAgICBEYXRhU291cmNlIHNvdXJjZSwgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpID0KICAgICAgQ2xhc3NIaWVyYXJjaHlJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZTsKCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbQ2xhc3NIaWVyYXJjaHldIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGlzIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluc3RhbnRpYXRlZC4KICBib29sIGlzSW5zdGFudGlhdGVkKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBpcyBkaXJlY3RseSBpbnN0YW50aWF0ZWQuIFRoaXMgbWVhbnMgdGhhdCBhdAogIC8vLyBydW50aW1lIGluc3RhbmNlcyBvZiBleGFjdGx5IFtjbHNdIGFyZSBhc3N1bWVkIHRvIGV4aXN0LgogIGJvb2wgaXNEaXJlY3RseUluc3RhbnRpYXRlZChDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2Nsc10gaXMgYWJzdHJhY3RseSBpbnN0YW50aWF0ZWQuIFRoaXMgbWVhbnMgdGhhdCBhdAogIC8vLyBydW50aW1lIGluc3RhbmNlcyBvZiBbY2xzXSBvciB1bmtub3duIHN1YmNsYXNzZXMgb2YgW2Nsc10gYXJlIGFzc3VtZWQgdG8KICAvLy8gZXhpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCB0byBtYXJrIG5hdGl2ZSBhbmQvb3IgcmVmbGVjdGFibGUgY2xhc3NlcyBhcyBpbnN0YW50aWF0ZWQuCiAgLy8vIEZvciBuYXRpdmUgY2xhc3NlcyB3ZSBkbyBub3Qga25vdyB0aGUgZXhhY3QgY2xhc3MgdGhhdCBpbnN0YW50aWF0ZXMgW2Nsc10KICAvLy8gc28gW2Nsc10gaGVyZSByZXByZXNlbnRzIHRoZSByb290IG9mIHRoZSBzdWJjbGFzc2VzLiBGb3IgcmVmbGVjdGFibGUKICAvLy8gY2xhc3NlcyB3ZSBuZWVkIGV2ZW50IGFic3RyYWN0IGNsYXNzZXMgdG8gYmUgJ2xpdmUnIGV2ZW4gdGhvdWdoIHRoZXkKICAvLy8gY2Fubm90IHRoZW1zZWx2ZXMgYmUgaW5zdGFudGlhdGVkLgogIGJvb2wgaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBpcyBlaXRoZXIgZGlyZWN0bHkgb3IgYWJzdHJhY3RseSBpbnN0YW50aWF0ZWQuCiAgLy8vCiAgLy8vIFNlZSBbaXNEaXJlY3RseUluc3RhbnRpYXRlZF0gYW5kIFtpc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWRdLgogIGJvb2wgaXNFeHBsaWNpdGx5SW5zdGFudGlhdGVkKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBpcyBpbmRpcmVjdGx5IGluc3RhbnRpYXRlZCwgdGhhdCBpcyB0aHJvdWdoIGEKICAvLy8gc3ViY2xhc3MuCiAgYm9vbCBpc0luZGlyZWN0bHlJbnN0YW50aWF0ZWQoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybiBgdHJ1ZWAgaWYgW3hdIGlzIGEgKG5vbi1zdHJpY3QpIHN1YmNsYXNzIG9mIFt5XS4KICBib29sIGlzU3ViY2xhc3NPZihDbGFzc0VudGl0eSB4LCBDbGFzc0VudGl0eSB5KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFt4XSBpcyBhIHN1YnR5cGUgb2YgW3ldLCB0aGF0IGlzLCBpZiBbeF0gaW1wbGVtZW50cyBhbgogIC8vLyBpbnN0YW5jZSBvZiBbeV0uCiAgYm9vbCBpc1N1YnR5cGVPZihDbGFzc0VudGl0eSB4LCBDbGFzc0VudGl0eSB5KTsKCiAgLy8vIFJldHVybnMgYW4gaXRlcmFibGUgb3ZlciB0aGUgZGlyZWN0bHkgaW5zdGFudGlhdGVkIGNsYXNzZXMgdGhhdCBleHRlbmQKICAvLy8gW2Nsc10gcG9zc2libHkgaW5jbHVkaW5nIFtjbHNdIGl0c2VsZiwgaWYgaXQgaXMgbGl2ZS4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gc3ViY2xhc3Nlc09mKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFuIGl0ZXJhYmxlIG92ZXIgdGhlIGRpcmVjdGx5IGluc3RhbnRpYXRlZCBjbGFzc2VzIHRoYXQgZXh0ZW5kCiAgLy8vIFtjbHNdIF9ub3RfIGluY2x1ZGluZyBbY2xzXSBpdHNlbGYuCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHN0cmljdFN1YmNsYXNzZXNPZihDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxpdmUgY2xhc3NlcyB0aGF0IGV4dGVuZCBbY2xzXSBfbm90XwogIC8vLyBpbmNsdWRpbmcgW2Nsc10gaXRzZWxmLgogIGludCBzdHJpY3RTdWJjbGFzc0NvdW50KENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBBcHBsaWVzIFtmXSB0byBlYWNoIGxpdmUgY2xhc3MgdGhhdCBleHRlbmQgW2Nsc10gX25vdF8gaW5jbHVkaW5nIFtjbHNdCiAgLy8vIGl0c2VsZi4KICB2b2lkIGZvckVhY2hTdHJpY3RTdWJjbGFzc09mKAogICAgICBDbGFzc0VudGl0eSBjbHMsIEl0ZXJhdGlvblN0ZXAgZihDbGFzc0VudGl0eSBjbHMpKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtwcmVkaWNhdGVdIGFwcGxpZXMgdG8gYW55IGxpdmUgY2xhc3MgdGhhdCBleHRlbmQgW2Nsc10KICAvLy8gX25vdF8gaW5jbHVkaW5nIFtjbHNdIGl0c2VsZi4KICBib29sIGFueVN0cmljdFN1YmNsYXNzT2YoQ2xhc3NFbnRpdHkgY2xzLCBib29sIHByZWRpY2F0ZShDbGFzc0VudGl0eSBjbHMpKTsKCiAgLy8vIFJldHVybnMgYW4gaXRlcmFibGUgb3ZlciB0aGUgZGlyZWN0bHkgaW5zdGFudGlhdGVkIHRoYXQgaW1wbGVtZW50IFtjbHNdCiAgLy8vIHBvc3NpYmx5IGluY2x1ZGluZyBbY2xzXSBpdHNlbGYsIGlmIGl0IGlzIGxpdmUuCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHN1YnR5cGVzT2YoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYW4gaXRlcmFibGUgb3ZlciB0aGUgZGlyZWN0bHkgaW5zdGFudGlhdGVkIHRoYXQgaW1wbGVtZW50IFtjbHNdCiAgLy8vIF9ub3RfIGluY2x1ZGluZyBbY2xzXS4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gc3RyaWN0U3VidHlwZXNPZihDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGxpdmUgY2xhc3NlcyB0aGF0IGltcGxlbWVudCBbY2xzXSBfbm90XwogIC8vLyBpbmNsdWRpbmcgW2Nsc10gaXRzZWxmLgogIGludCBzdHJpY3RTdWJ0eXBlQ291bnQoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIEFwcGxpZXMgW2ZdIHRvIGVhY2ggbGl2ZSBjbGFzcyB0aGF0IGltcGxlbWVudHMgW2Nsc10gX25vdF8gaW5jbHVkaW5nIFtjbHNdCiAgLy8vIGl0c2VsZi4KICB2b2lkIGZvckVhY2hTdHJpY3RTdWJ0eXBlT2YoCiAgICAgIENsYXNzRW50aXR5IGNscywgSXRlcmF0aW9uU3RlcCBmKENsYXNzRW50aXR5IGNscykpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW3ByZWRpY2F0ZV0gYXBwbGllcyB0byBhbnkgbGl2ZSBjbGFzcyB0aGF0IGltcGxlbWVudHMKICAvLy8gW2Nsc10gX25vdF8gaW5jbHVkaW5nIFtjbHNdIGl0c2VsZi4KICBib29sIGFueVN0cmljdFN1YnR5cGVPZihDbGFzc0VudGl0eSBjbHMsIGJvb2wgcHJlZGljYXRlKENsYXNzRW50aXR5IGNscykpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW2FdIGFuZCBbYl0gaGF2ZSBhbnkga25vd24gY29tbW9uIHN1YnR5cGVzLgogIGJvb2wgaGF2ZUFueUNvbW1vblN1YnR5cGVzKENsYXNzRW50aXR5IGEsIENsYXNzRW50aXR5IGIpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGRpcmVjdGx5IGluc3RhbnRpYXRlZCBjbGFzcyBvdGhlciB0aGFuIFtjbHNdIGV4dGVuZHMKICAvLy8gW2Nsc10uCiAgYm9vbCBoYXNBbnlTdHJpY3RTdWJjbGFzcyhDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGRpcmVjdGx5IGluc3RhbnRpYXRlZCBjbGFzcyBvdGhlciB0aGFuIFtjbHNdCiAgLy8vIGltcGxlbWVudHMgW2Nsc10uCiAgYm9vbCBoYXNBbnlTdHJpY3RTdWJ0eXBlKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBhbGwgZGlyZWN0bHkgaW5zdGFudGlhdGVkIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgW2Nsc10KICAvLy8gZXh0ZW5kIGl0LgogIGJvb2wgaGFzT25seVN1YmNsYXNzZXMoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYSBbU3ViY2xhc3NSZXN1bHRdIGZvciB0aGUgc3ViY2xhc3NlcyB0aGF0IGFyZSBjb250YWluZWQgaW4KICAvLy8gdGhlIHN1YmNsYXNzL3N1YnR5cGUgc2V0cyBvZiBib3RoIFtjbHMxXSBhbmQgW2NsczJdLgogIC8vLwogIC8vLyBDbGFzc2VzIHRoYXQgYXJlIGltcGxpZWQgYnkgaW5jbHVkZWQgc3VwZXJjbGFzc2VzL3N1cGVydHlwZXMgYXJlIG5vdAogIC8vLyByZXR1cm5lZC4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGZvciB0aGlzIGhpZXJhcmNoeQogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7fQogIC8vLyAgICAgY2xhc3MgQiB7fQogIC8vLyAgICAgY2xhc3MgQyBpbXBsZW1lbnRzIEEsIEIge30KICAvLy8gICAgIGNsYXNzIEQgZXh0ZW5kcyBDIHt9CiAgLy8vCiAgLy8vIHRoZSBxdWVyeQogIC8vLwogIC8vLyAgICAgY29tbW9uU3ViY2xhc3NlcyhBLCBDbGFzc1F1ZXJ5LlNVQlRZUEUsIEIsIENsYXNzUXVlcnkuU1VCVFlQRSkKICAvLy8KICAvLy8gcmV0dXJuIHRoZSBzZXQge0N9IGJlY2F1c2UgW0RdIGlzIGltcGxpZWQgYnkgW0NdLgogIFN1YmNsYXNzUmVzdWx0IGNvbW1vblN1YmNsYXNzZXMoCiAgICAgIENsYXNzRW50aXR5IGNsczEsIENsYXNzUXVlcnkgcXVlcnkxLCBDbGFzc0VudGl0eSBjbHMyLCBDbGFzc1F1ZXJ5IHF1ZXJ5Mik7CgogIC8vLyBSZXR1cm5zIFtDbGFzc0hpZXJhcmNoeU5vZGVdIGZvciBbY2xzXSB1c2VkIHRvIG1vZGVsIHRoZSBjbGFzcyBoaWVyYXJjaGllcwogIC8vLyBvZiBrbm93biBjbGFzc2VzLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHByb3ZpZGVkIGZvciB0ZXN0aW5nLiBGb3IgcXVlcmllcyBvbiBjbGFzc2VzLCB1c2UgdGhlCiAgLy8vIG1ldGhvZHMgZGVmaW5lZCBpbiBbSkNsb3NlZFdvcmxkXS4KICBDbGFzc0hpZXJhcmNoeU5vZGUgZ2V0Q2xhc3NIaWVyYXJjaHlOb2RlKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIFtDbGFzc1NldF0gZm9yIFtjbHNdIHVzZWQgdG8gbW9kZWwgdGhlIGV4dGVuZHMgYW5kIGltcGxlbWVudHMKICAvLy8gcmVsYXRpb25zIG9mIGtub3duIGNsYXNzZXMuCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgcHJvdmlkZWQgZm9yIHRlc3RpbmcuIEZvciBxdWVyaWVzIG9uIGNsYXNzZXMsIHVzZSB0aGUKICAvLy8gbWV0aG9kcyBkZWZpbmVkIGluIFtKQ2xvc2VkV29ybGRdLgogIENsYXNzU2V0IGdldENsYXNzU2V0KENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjbG9zZWQgd29ybGQuCiAgLy8vCiAgLy8vIElmIFtjbHNdIGlzIHByb3ZpZGVkLCB0aGUgZHVtcCB3aWxsIGNvbnRhaW4gb25seSBjbGFzc2VzIHJlbGF0ZWQgdG8gW2Nsc10uCiAgU3RyaW5nIGR1bXAoW0NsYXNzRW50aXR5IGNsc10pOwp9CgpjbGFzcyBDbGFzc0hpZXJhcmNoeUltcGwgaW1wbGVtZW50cyBDbGFzc0hpZXJhcmNoeSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtDbGFzc0hpZXJhcmNoeV0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjbGFzcy1oaWVyYXJjaHknOwoKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBDbGFzc0hpZXJhcmNoeU5vZGU+IF9jbGFzc0hpZXJhcmNoeU5vZGVzOwogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NTZXQ+IF9jbGFzc1NldHM7CgogIENsYXNzSGllcmFyY2h5SW1wbCgKICAgICAgdGhpcy5fY29tbW9uRWxlbWVudHMsIHRoaXMuX2NsYXNzSGllcmFyY2h5Tm9kZXMsIHRoaXMuX2NsYXNzU2V0cyk7CgogIGZhY3RvcnkgQ2xhc3NIaWVyYXJjaHlJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NIaWVyYXJjaHlOb2RlPiBjbGFzc0hpZXJhcmNoeU5vZGVzID0KICAgICAgICBuZXcgQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcCgpOwogICAgaW50IGNsYXNzQ291bnQgPSBzb3VyY2UucmVhZEludCgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc0NvdW50OyBpKyspIHsKICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUgPSBuZXcgQ2xhc3NIaWVyYXJjaHlOb2RlLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICAgIHNvdXJjZSwgY2xhc3NIaWVyYXJjaHlOb2Rlcyk7CiAgICAgIGNsYXNzSGllcmFyY2h5Tm9kZXNbbm9kZS5jbHNdID0gbm9kZTsKICAgIH0KICAgIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NTZXQ+IGNsYXNzU2V0cyA9IHt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjbGFzc0NvdW50OyBpKyspIHsKICAgICAgQ2xhc3NTZXQgY2xhc3NTZXQgPQogICAgICAgICAgbmV3IENsYXNzU2V0LnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIGNsYXNzSGllcmFyY2h5Tm9kZXMpOwogICAgICBjbGFzc1NldHNbY2xhc3NTZXQuY2xzXSA9IGNsYXNzU2V0OwogICAgfQoKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgQ2xhc3NIaWVyYXJjaHlJbXBsKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLCBjbGFzc0hpZXJhcmNoeU5vZGVzLCBjbGFzc1NldHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUludChfY2xhc3NTZXRzLmxlbmd0aCk7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSA9CiAgICAgICAgZ2V0Q2xhc3NIaWVyYXJjaHlOb2RlKF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcyk7CiAgICBub2RlLmZvckVhY2hTdWJjbGFzcygoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIGdldENsYXNzSGllcmFyY2h5Tm9kZShjbHMpLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9LCBDbGFzc0hpZXJhcmNoeU5vZGUuQUxMKTsKICAgIENsYXNzU2V0IHNldCA9IGdldENsYXNzU2V0KF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcyk7CiAgICBzZXQuZm9yRWFjaFN1YmNsYXNzKChDbGFzc0VudGl0eSBjbHMpIHsKICAgICAgZ2V0Q2xhc3NTZXQoY2xzKS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICAgIHJldHVybiBudWxsOwogICAgfSwgQ2xhc3NIaWVyYXJjaHlOb2RlLkFMTCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0luc3RhbnRpYXRlZChDbGFzc0VudGl0eSBjbHMpIHsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlID0gX2NsYXNzSGllcmFyY2h5Tm9kZXNbY2xzXTsKICAgIHJldHVybiBub2RlICE9IG51bGwgJiYgbm9kZS5pc0luc3RhbnRpYXRlZDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNEaXJlY3RseUluc3RhbnRpYXRlZChDbGFzc0VudGl0eSBjbHMpIHsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlID0gX2NsYXNzSGllcmFyY2h5Tm9kZXNbY2xzXTsKICAgIHJldHVybiBub2RlICE9IG51bGwgJiYgbm9kZS5pc0RpcmVjdGx5SW5zdGFudGlhdGVkOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc107CiAgICByZXR1cm4gbm9kZSAhPSBudWxsICYmIG5vZGUuaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0V4cGxpY2l0bHlJbnN0YW50aWF0ZWQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc107CiAgICByZXR1cm4gbm9kZSAhPSBudWxsICYmIG5vZGUuaXNFeHBsaWNpdGx5SW5zdGFudGlhdGVkOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0luZGlyZWN0bHlJbnN0YW50aWF0ZWQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc107CiAgICByZXR1cm4gbm9kZSAhPSBudWxsICYmIG5vZGUuaXNJbmRpcmVjdGx5SW5zdGFudGlhdGVkOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1N1YnR5cGVPZihDbGFzc0VudGl0eSB4LCBDbGFzc0VudGl0eSB5KSB7CiAgICBDbGFzc1NldCBjbGFzc1NldCA9IF9jbGFzc1NldHNbeV07CiAgICBhc3NlcnQoCiAgICAgICAgY2xhc3NTZXQgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgeSwKICAgICAgICAgICAgIk5vIENsYXNzU2V0IGZvciAkeSAoJHt5LnJ1bnRpbWVUeXBlfSk6ICIKICAgICAgICAgICAgIiR7ZHVtcCh5KX0gOiAke19jbGFzc1NldHN9IikpOwogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIGNsYXNzSGllcmFyY2h5Tm9kZSA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW3hdOwogICAgYXNzZXJ0KGNsYXNzSGllcmFyY2h5Tm9kZSAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KHgsICJObyBDbGFzc0hpZXJhcmNoeU5vZGUgZm9yICR4OiAke2R1bXAoeCl9IikpOwogICAgcmV0dXJuIGNsYXNzU2V0Lmhhc1N1YnR5cGUoY2xhc3NIaWVyYXJjaHlOb2RlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNTdWJjbGFzc09mKENsYXNzRW50aXR5IHgsIENsYXNzRW50aXR5IHkpIHsKICAgIHJldHVybiBfY2xhc3NIaWVyYXJjaHlOb2Rlc1t5XS5oYXNTdWJjbGFzcyhfY2xhc3NIaWVyYXJjaHlOb2Rlc1t4XSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gc3ViY2xhc3Nlc09mKENsYXNzRW50aXR5IGNscykgewogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIGhpZXJhcmNoeSA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc107CiAgICBpZiAoaGllcmFyY2h5ID09IG51bGwpIHJldHVybiBjb25zdCA8Q2xhc3NFbnRpdHk+W107CiAgICByZXR1cm4gaGllcmFyY2h5CiAgICAgICAgLnN1YmNsYXNzZXNCeU1hc2soQ2xhc3NIaWVyYXJjaHlOb2RlLkVYUExJQ0lUTFlfSU5TVEFOVElBVEVEKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBzdHJpY3RTdWJjbGFzc2VzT2YoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgc3ViY2xhc3NlcyA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc107CiAgICBpZiAoc3ViY2xhc3NlcyA9PSBudWxsKSByZXR1cm4gY29uc3QgPENsYXNzRW50aXR5PltdOwogICAgcmV0dXJuIHN1YmNsYXNzZXMuc3ViY2xhc3Nlc0J5TWFzaygKICAgICAgICBDbGFzc0hpZXJhcmNoeU5vZGUuRVhQTElDSVRMWV9JTlNUQU5USUFURUQsCiAgICAgICAgc3RyaWN0OiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIGludCBzdHJpY3RTdWJjbGFzc0NvdW50KENsYXNzRW50aXR5IGNscykgewogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YmNsYXNzZXMgPSBfY2xhc3NIaWVyYXJjaHlOb2Rlc1tjbHNdOwogICAgaWYgKHN1YmNsYXNzZXMgPT0gbnVsbCkgcmV0dXJuIDA7CiAgICByZXR1cm4gc3ViY2xhc3Nlcy5pbnN0YW50aWF0ZWRTdWJjbGFzc0NvdW50OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoU3RyaWN0U3ViY2xhc3NPZigKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBJdGVyYXRpb25TdGVwIGYoQ2xhc3NFbnRpdHkgY2xzKSkgewogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YmNsYXNzZXMgPSBfY2xhc3NIaWVyYXJjaHlOb2Rlc1tjbHNdOwogICAgaWYgKHN1YmNsYXNzZXMgPT0gbnVsbCkgcmV0dXJuOwogICAgc3ViY2xhc3Nlcy5mb3JFYWNoU3ViY2xhc3MoZiwgQ2xhc3NIaWVyYXJjaHlOb2RlLkVYUExJQ0lUTFlfSU5TVEFOVElBVEVELAogICAgICAgIHN0cmljdDogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGFueVN0cmljdFN1YmNsYXNzT2YoQ2xhc3NFbnRpdHkgY2xzLCBib29sIHByZWRpY2F0ZShDbGFzc0VudGl0eSBjbHMpKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgc3ViY2xhc3NlcyA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc107CiAgICBpZiAoc3ViY2xhc3NlcyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc3ViY2xhc3Nlcy5hbnlTdWJjbGFzcygKICAgICAgICBwcmVkaWNhdGUsIENsYXNzSGllcmFyY2h5Tm9kZS5FWFBMSUNJVExZX0lOU1RBTlRJQVRFRCwKICAgICAgICBzdHJpY3Q6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHN1YnR5cGVzT2YoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc1NldCBjbGFzc1NldCA9IF9jbGFzc1NldHNbY2xzXTsKICAgIGlmIChjbGFzc1NldCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBjb25zdCA8Q2xhc3NFbnRpdHk+W107CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY2xhc3NTZXQKICAgICAgICAgIC5zdWJ0eXBlc0J5TWFzayhDbGFzc0hpZXJhcmNoeU5vZGUuRVhQTElDSVRMWV9JTlNUQU5USUFURUQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHN0cmljdFN1YnR5cGVzT2YoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc1NldCBjbGFzc1NldCA9IF9jbGFzc1NldHNbY2xzXTsKICAgIGlmIChjbGFzc1NldCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBjb25zdCA8Q2xhc3NFbnRpdHk+W107CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY2xhc3NTZXQuc3VidHlwZXNCeU1hc2soQ2xhc3NIaWVyYXJjaHlOb2RlLkVYUExJQ0lUTFlfSU5TVEFOVElBVEVELAogICAgICAgICAgc3RyaWN0OiB0cnVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGludCBzdHJpY3RTdWJ0eXBlQ291bnQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBDbGFzc1NldCBjbGFzc1NldCA9IF9jbGFzc1NldHNbY2xzXTsKICAgIGlmIChjbGFzc1NldCA9PSBudWxsKSByZXR1cm4gMDsKICAgIHJldHVybiBjbGFzc1NldC5pbnN0YW50aWF0ZWRTdWJ0eXBlQ291bnQ7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hTdHJpY3RTdWJ0eXBlT2YoCiAgICAgIENsYXNzRW50aXR5IGNscywgSXRlcmF0aW9uU3RlcCBmKENsYXNzRW50aXR5IGNscykpIHsKICAgIENsYXNzU2V0IGNsYXNzU2V0ID0gX2NsYXNzU2V0c1tjbHNdOwogICAgaWYgKGNsYXNzU2V0ID09IG51bGwpIHJldHVybjsKICAgIGNsYXNzU2V0LmZvckVhY2hTdWJ0eXBlKGYsIENsYXNzSGllcmFyY2h5Tm9kZS5FWFBMSUNJVExZX0lOU1RBTlRJQVRFRCwKICAgICAgICBzdHJpY3Q6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBhbnlTdHJpY3RTdWJ0eXBlT2YoQ2xhc3NFbnRpdHkgY2xzLCBib29sIHByZWRpY2F0ZShDbGFzc0VudGl0eSBjbHMpKSB7CiAgICBDbGFzc1NldCBjbGFzc1NldCA9IF9jbGFzc1NldHNbY2xzXTsKICAgIGlmIChjbGFzc1NldCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gY2xhc3NTZXQuYW55U3VidHlwZSgKICAgICAgICBwcmVkaWNhdGUsIENsYXNzSGllcmFyY2h5Tm9kZS5FWFBMSUNJVExZX0lOU1RBTlRJQVRFRCwKICAgICAgICBzdHJpY3Q6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXZlQW55Q29tbW9uU3VidHlwZXMoQ2xhc3NFbnRpdHkgYSwgQ2xhc3NFbnRpdHkgYikgewogICAgQ2xhc3NTZXQgY2xhc3NTZXRBID0gX2NsYXNzU2V0c1thXTsKICAgIENsYXNzU2V0IGNsYXNzU2V0QiA9IF9jbGFzc1NldHNbYl07CiAgICBpZiAoY2xhc3NTZXRBID09IG51bGwgfHwgY2xhc3NTZXRCID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEltcGxlbWVudCBhbiBvcHRpbWl6ZWQgcXVlcnkgb24gW0NsYXNzU2V0XS4KICAgIFNldDxDbGFzc0VudGl0eT4gc3VidHlwZXNPZkIgPSBjbGFzc1NldEIuc3VidHlwZXMoKS50b1NldCgpOwogICAgZm9yIChDbGFzc0VudGl0eSBzdWJ0eXBlT2ZBIGluIGNsYXNzU2V0QS5zdWJ0eXBlcygpKSB7CiAgICAgIGlmIChzdWJ0eXBlc09mQi5jb250YWlucyhzdWJ0eXBlT2ZBKSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc0FueVN0cmljdFN1YmNsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YmNsYXNzZXMgPSBfY2xhc3NIaWVyYXJjaHlOb2Rlc1tjbHNdOwogICAgaWYgKHN1YmNsYXNzZXMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHN1YmNsYXNzZXMuaXNJbmRpcmVjdGx5SW5zdGFudGlhdGVkOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNBbnlTdHJpY3RTdWJ0eXBlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIHN0cmljdFN1YnR5cGVDb3VudChjbHMpID4gMDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzT25seVN1YmNsYXNzZXMoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBtb3ZlIHRoaXMgdG8gQ2xhc3NTZXQ/CiAgICBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykgcmV0dXJuIHRydWU7CiAgICBDbGFzc1NldCBjbGFzc1NldCA9IF9jbGFzc1NldHNbY2xzXTsKICAgIGlmIChjbGFzc1NldCA9PSBudWxsKSB7CiAgICAgIC8vIFZhY3VvdXNseSB0cnVlLgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBjbGFzc1NldC5oYXNPbmx5SW5zdGFudGlhdGVkU3ViY2xhc3NlczsKICB9CgogIEBvdmVycmlkZQogIFN1YmNsYXNzUmVzdWx0IGNvbW1vblN1YmNsYXNzZXMoQ2xhc3NFbnRpdHkgY2xzMSwgQ2xhc3NRdWVyeSBxdWVyeTEsCiAgICAgIENsYXNzRW50aXR5IGNsczIsIENsYXNzUXVlcnkgcXVlcnkyKSB7CiAgICBpZiAocXVlcnkxID09IENsYXNzUXVlcnkuRVhBQ1QgJiYgcXVlcnkyID09IENsYXNzUXVlcnkuRVhBQ1QpIHsKICAgICAgLy8gRXhhY3QgY2xhc3NlcyBbY2xzMV0gYW5kIFtjbHMyXSBtdXN0IGJlIGlkZW50aWNhbCB0byBoYXZlIGFueSBjbGFzc2VzCiAgICAgIC8vIGluIGNvbW1vbi4KICAgICAgaWYgKGNsczEgIT0gY2xzMikgewogICAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5FTVBUWTsKICAgICAgfQogICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuRVhBQ1QxOwogICAgfSBlbHNlIGlmIChxdWVyeTEgPT0gQ2xhc3NRdWVyeS5FWEFDVCkgewogICAgICBpZiAocXVlcnkyID09IENsYXNzUXVlcnkuU1VCQ0xBU1MpIHsKICAgICAgICAvLyBFeGFjdCBbY2xzMV0gbXVzdCBiZSBhIHN1YmNsYXNzIG9mIFtjbHMyXSB0byBoYXZlIGFueSBjbGFzc2VzIGluCiAgICAgICAgLy8gY29tbW9uLgogICAgICAgIGlmIChpc1N1YmNsYXNzT2YoY2xzMSwgY2xzMikpIHsKICAgICAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5FWEFDVDE7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHF1ZXJ5MiA9PSBDbGFzc1F1ZXJ5LlNVQlRZUEUpIHsKICAgICAgICAvLyBFeGFjdCBbY2xzMV0gbXVzdCBiZSBhIHN1YnR5cGUgb2YgW2NsczJdIHRvIGhhdmUgYW55IGNsYXNzZXMgaW4KICAgICAgICAvLyBjb21tb24uCiAgICAgICAgaWYgKGlzU3VidHlwZU9mKGNsczEsIGNsczIpKSB7CiAgICAgICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuRVhBQ1QxOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuRU1QVFk7CiAgICB9IGVsc2UgaWYgKHF1ZXJ5MiA9PSBDbGFzc1F1ZXJ5LkVYQUNUKSB7CiAgICAgIGlmIChxdWVyeTEgPT0gQ2xhc3NRdWVyeS5TVUJDTEFTUykgewogICAgICAgIC8vIEV4YWN0IFtjbHMyXSBtdXN0IGJlIGEgc3ViY2xhc3Mgb2YgW2NsczFdIHRvIGhhdmUgYW55IGNsYXNzZXMgaW4KICAgICAgICAvLyBjb21tb24uCiAgICAgICAgaWYgKGlzU3ViY2xhc3NPZihjbHMyLCBjbHMxKSkgewogICAgICAgICAgcmV0dXJuIFN1YmNsYXNzUmVzdWx0LkVYQUNUMjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAocXVlcnkxID09IENsYXNzUXVlcnkuU1VCVFlQRSkgewogICAgICAgIC8vIEV4YWN0IFtjbHMyXSBtdXN0IGJlIGEgc3VidHlwZSBvZiBbY2xzMV0gdG8gaGF2ZSBhbnkgY2xhc3NlcyBpbgogICAgICAgIC8vIGNvbW1vbi4KICAgICAgICBpZiAoaXNTdWJ0eXBlT2YoY2xzMiwgY2xzMSkpIHsKICAgICAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5FWEFDVDI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5FTVBUWTsKICAgIH0gZWxzZSBpZiAocXVlcnkxID09IENsYXNzUXVlcnkuU1VCQ0xBU1MgJiYgcXVlcnkyID09IENsYXNzUXVlcnkuU1VCQ0xBU1MpIHsKICAgICAgLy8gW2NsczFdIG11c3QgYmUgYSBzdWJjbGFzcyBvZiBbY2xzMl0gb3IgdmljZSB2ZXJzYSB0byBoYXZlIGFueSBjbGFzc2VzCiAgICAgIC8vIGluIGNvbW1vbi4KICAgICAgaWYgKGNsczEgPT0gY2xzMiB8fCBpc1N1YmNsYXNzT2YoY2xzMSwgY2xzMikpIHsKICAgICAgICAvLyBUaGUgc3ViY2xhc3NlcyBvZiBbY2xzMV0gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHN1YmNsYXNzZXMgb2YKICAgICAgICAvLyBbY2xzMl0uCiAgICAgICAgcmV0dXJuIFN1YmNsYXNzUmVzdWx0LlNVQkNMQVNTMTsKICAgICAgfSBlbHNlIGlmIChpc1N1YmNsYXNzT2YoY2xzMiwgY2xzMSkpIHsKICAgICAgICAvLyBUaGUgc3ViY2xhc3NlcyBvZiBbY2xzMl0gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHN1YmNsYXNzZXMgb2YKICAgICAgICAvLyBbY2xzMV0uCiAgICAgICAgcmV0dXJuIFN1YmNsYXNzUmVzdWx0LlNVQkNMQVNTMjsKICAgICAgfQogICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuRU1QVFk7CiAgICB9IGVsc2UgaWYgKHF1ZXJ5MSA9PSBDbGFzc1F1ZXJ5LlNVQkNMQVNTKSB7CiAgICAgIGlmIChpc1N1YnR5cGVPZihjbHMxLCBjbHMyKSkgewogICAgICAgIC8vIFRoZSBzdWJjbGFzc2VzIG9mIFtjbHMxXSBhcmUgYWxsIHN1YnR5cGVzIG9mIFtjbHMyXS4KICAgICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuU1VCQ0xBU1MxOwogICAgICB9CiAgICAgIGlmIChjbHMxID09IF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykgewogICAgICAgIC8vIFNpbmNlIFtjbHMxXSBpcyBgT2JqZWN0YCBhbGwgc3VidHlwZXMgb2YgW2NsczJdIGFyZSBjb250YWluZWQgd2l0aGluCiAgICAgICAgLy8gdGhlIHN1YmNsYXNzZXMgb2YgW2NsczFdLgogICAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5TVUJUWVBFMjsKICAgICAgfQogICAgICAvLyBGaW5kIGFsbCB0aGUgcm9vdCBzdWJjbGFzc2VzIG9mIFtjbHMxXSBvZiB0aGF0IGltcGxlbWVudCBbY2xzMl0uCiAgICAgIC8vCiAgICAgIC8vIEZvciB0aGlzIGhpZXJhcmNoeToKICAgICAgLy8KICAgICAgLy8gICAgIGNsYXNzIEkge30KICAgICAgLy8gICAgIGNsYXNzIEEge30KICAgICAgLy8gICAgIGNsYXNzIEIgZXh0ZW5kcyBBIGltcGxlbWVudHMgSSB7fQogICAgICAvLyAgICAgY2xhc3MgQyBleHRlbmRzIEIge30KICAgICAgLy8gICAgIGNsYXNzIEQgZXh0ZW5kcyBBIGltcGxlbWVudHMgSSB7fQogICAgICAvLwogICAgICAvLyB0aGUgY29tbW9uIHN1YmNsYXNzZXMgb2YgInN1YmNsYXNzIG9mIEEiIGFuZCAic3VidHlwZSBvZiBJIiByZXR1cm5zCiAgICAgIC8vICJzdWJjbGFzc2VzIG9mIHtCLCBEfSIuIFRoZSBpbmNsdXNpb24gb2YgY2xhc3MgYENgIGlzIGltcGxpZWQgYmVjYXVzZQogICAgICAvLyBpdCBpcyBhIHN1YmNsYXNzIG9mIGBCYC4KICAgICAgTGlzdDxDbGFzc0VudGl0eT4gY2xhc3NlcyA9IDxDbGFzc0VudGl0eT5bXTsKICAgICAgZm9yRWFjaFN0cmljdFN1YmNsYXNzT2YoY2xzMSwgKENsYXNzRW50aXR5IHN1YmNsYXNzKSB7CiAgICAgICAgaWYgKGlzU3VidHlwZU9mKHN1YmNsYXNzLCBjbHMyKSkgewogICAgICAgICAgY2xhc3Nlcy5hZGQoc3ViY2xhc3MpOwogICAgICAgICAgLy8gU2tpcCBzdWJjbGFzc2VzIG9mIFtzdWJjbGFzc107IHRoZXkgYWxsIGltcGxlbWVudCBbY2xzMl0gYnkKICAgICAgICAgIC8vIGluaGVyaXRhbmNlIGFuZCBhcmUgaW5jbHVkZWQgaW4gdGhlIHN1YmNsYXNzZXMgb2YgW3N1YmNsYXNzXS4KICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGVwLlNLSVBfU1VCQ0xBU1NFUzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0ZXAuQ09OVElOVUU7CiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3IFN1YmNsYXNzUmVzdWx0KGNsYXNzZXMpOwogICAgfSBlbHNlIGlmIChxdWVyeTIgPT0gQ2xhc3NRdWVyeS5TVUJDTEFTUykgewogICAgICBpZiAoaXNTdWJ0eXBlT2YoY2xzMiwgY2xzMSkpIHsKICAgICAgICAvLyBUaGUgc3ViY2xhc3NlcyBvZiBbY2xzMl0gYXJlIGFsbCBzdWJ0eXBlcyBvZiBbY2xzMV0uCiAgICAgICAgcmV0dXJuIFN1YmNsYXNzUmVzdWx0LlNVQkNMQVNTMjsKICAgICAgfQogICAgICBpZiAoY2xzMiA9PSBfY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpIHsKICAgICAgICAvLyBTaW5jZSBbY2xzMl0gaXMgYE9iamVjdGAgYWxsIHN1YnR5cGVzIG9mIFtjbHMxXSBhcmUgY29udGFpbmVkIHdpdGhpbgogICAgICAgIC8vIHRoZSBzdWJjbGFzc2VzIG9mIFtjbHMyXS4KICAgICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuU1VCVFlQRTE7CiAgICAgIH0KICAgICAgLy8gRmluZCBhbGwgdGhlIHJvb3Qgc3ViY2xhc3NlcyBvZiBbY2xzMl0gb2YgdGhhdCBpbXBsZW1lbnQgW2NsczFdLgogICAgICBMaXN0PENsYXNzRW50aXR5PiBjbGFzc2VzID0gPENsYXNzRW50aXR5PltdOwogICAgICBmb3JFYWNoU3RyaWN0U3ViY2xhc3NPZihjbHMyLCAoQ2xhc3NFbnRpdHkgc3ViY2xhc3MpIHsKICAgICAgICBpZiAoaXNTdWJ0eXBlT2Yoc3ViY2xhc3MsIGNsczEpKSB7CiAgICAgICAgICBjbGFzc2VzLmFkZChzdWJjbGFzcyk7CiAgICAgICAgICAvLyBTa2lwIHN1YmNsYXNzZXMgb2YgW3N1YmNsYXNzXTsgdGhleSBhbGwgaW1wbGVtZW50IFtjbHMxXSBieQogICAgICAgICAgLy8gaW5oZXJpdGFuY2UgYW5kIGFyZSBpbmNsdWRlZCBpbiB0aGUgc3ViY2xhc3NlcyBvZiBbc3ViY2xhc3NdLgogICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0ZXAuU0tJUF9TVUJDTEFTU0VTOwogICAgICAgIH0KICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RlcC5DT05USU5VRTsKICAgICAgfSk7CiAgICAgIHJldHVybiBuZXcgU3ViY2xhc3NSZXN1bHQoY2xhc3Nlcyk7CiAgICB9IGVsc2UgewogICAgICBpZiAoY2xzMSA9PSBjbHMyIHx8IGlzU3VidHlwZU9mKGNsczEsIGNsczIpKSB7CiAgICAgICAgLy8gVGhlIHN1YnR5cGVzIG9mIFtjbHMxXSBhcmUgY29udGFpbmVkIHdpdGhpbiB0aGUgc3VidHlwZXMgb2YgW2NsczJdLgogICAgICAgIHJldHVybiBTdWJjbGFzc1Jlc3VsdC5TVUJUWVBFMTsKICAgICAgfSBlbHNlIGlmIChpc1N1YnR5cGVPZihjbHMyLCBjbHMxKSkgewogICAgICAgIC8vIFRoZSBzdWJ0eXBlcyBvZiBbY2xzMl0gYXJlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHN1YnR5cGVzIG9mIFtjbHMxXS4KICAgICAgICByZXR1cm4gU3ViY2xhc3NSZXN1bHQuU1VCVFlQRTI7CiAgICAgIH0KICAgICAgLy8gRmluZCBhbGwgdGhlIHJvb3Qgc3ViY2xhc3NlcyBvZiBbY2xzMV0gb2YgdGhhdCBpbXBsZW1lbnQgW2NsczJdLgogICAgICAvLwogICAgICAvLyBGb3IgdGhpcyBoaWVyYXJjaHk6CiAgICAgIC8vCiAgICAgIC8vICAgICBjbGFzcyBJIHt9CiAgICAgIC8vICAgICBjbGFzcyBBIHt9CiAgICAgIC8vICAgICBjbGFzcyBCIGV4dGVuZHMgQSBpbXBsZW1lbnRzIEkge30KICAgICAgLy8gICAgIGNsYXNzIEMgZXh0ZW5kcyBCIHt9CiAgICAgIC8vICAgICBjbGFzcyBEIGV4dGVuZHMgQSBpbXBsZW1lbnRzIEkge30KICAgICAgLy8gICAgIGNsYXNzIEUgaW1wbGVtZW50cyBCIHt9CiAgICAgIC8vICAgICBjbGFzcyBGIGV4dGVuZHMgRSB7fQogICAgICAvLwogICAgICAvLyB0aGUgY29tbW9uIHN1YmNsYXNzZXMgb2YgInN1YnR5cGUgb2YgQSIgYW5kICJzdWJ0eXBlIG9mIEkiIHJldHVybnMKICAgICAgLy8gInN1YmNsYXNzZXMgb2Yge0IsIEQsIEV9Ii4gVGhlIGluY2x1c2lvbiBvZiBjbGFzc2VzIGBDYCBhbmQgYEZgIGlzCiAgICAgIC8vIGltcGxpZWQgYmVjYXVzZSB0aGV5IGFyZSBzdWJjbGFzc2VzIG9mIGBCYCBhbmQgYEVgLCByZXNwZWN0aXZlbHkuCiAgICAgIExpc3Q8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPSA8Q2xhc3NFbnRpdHk+W107CiAgICAgIGZvckVhY2hTdHJpY3RTdWJ0eXBlT2YoY2xzMSwgKENsYXNzRW50aXR5IHN1YmNsYXNzKSB7CiAgICAgICAgaWYgKGlzU3VidHlwZU9mKHN1YmNsYXNzLCBjbHMyKSkgewogICAgICAgICAgY2xhc3Nlcy5hZGQoc3ViY2xhc3MpOwogICAgICAgICAgLy8gU2tpcCBzdWJjbGFzc2VzIG9mIFtzdWJjbGFzc107IHRoZXkgYWxsIGltcGxlbWVudCBbY2xzMl0gYnkKICAgICAgICAgIC8vIGluaGVyaXRhbmNlIGFuZCBhcmUgaW5jbHVkZWQgaW4gdGhlIHN1YmNsYXNzZXMgb2YgW3N1YmNsYXNzXS4KICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGVwLlNLSVBfU1VCQ0xBU1NFUzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0ZXAuQ09OVElOVUU7CiAgICAgIH0pOwogICAgICByZXR1cm4gbmV3IFN1YmNsYXNzUmVzdWx0KGNsYXNzZXMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NIaWVyYXJjaHlOb2RlIGdldENsYXNzSGllcmFyY2h5Tm9kZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfY2xhc3NIaWVyYXJjaHlOb2Rlc1tjbHNdOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NTZXQgZ2V0Q2xhc3NTZXQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gX2NsYXNzU2V0c1tjbHNdOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGR1bXAoW0NsYXNzRW50aXR5IGNsc10pIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGlmIChjbHMgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgiQ2xhc3NlcyBpbiB0aGUgY2xvc2VkIHdvcmxkIHJlbGF0ZWQgdG8gJGNsczpcbiIpOwogICAgfSBlbHNlIHsKICAgICAgc2Iud3JpdGUoIkluc3RhbnRpYXRlZCBjbGFzc2VzIGluIHRoZSBjbG9zZWQgd29ybGQ6XG4iKTsKICAgIH0KICAgIGdldENsYXNzSGllcmFyY2h5Tm9kZShfY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpCiAgICAgICAgLnByaW50T24oc2IsICcgJywgaW5zdGFudGlhdGVkT25seTogY2xzID09IG51bGwsIHdpdGhSZXNwZWN0VG86IGNscyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmNsYXNzIENsYXNzSGllcmFyY2h5QnVpbGRlciB7CiAgLy8gV2Uga2VlcCB0cmFjayBvZiBzdWJ0eXBlIGFuZCBzdWJjbGFzcyByZWxhdGlvbnNoaXBzIGluIGZvdXIKICAvLyBkaXN0aW5jdCBzZXRzIHRvIG1ha2UgY2xhc3MgaGllcmFyY2h5IGFuYWx5c2lzIGZhc3Rlci4KICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIENsYXNzSGllcmFyY2h5Tm9kZT4gX2NsYXNzSGllcmFyY2h5Tm9kZXMgPQogICAgICA8Q2xhc3NFbnRpdHksIENsYXNzSGllcmFyY2h5Tm9kZT57fTsKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIENsYXNzU2V0PiBfY2xhc3NTZXRzID0gPENsYXNzRW50aXR5LCBDbGFzc1NldD57fTsKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IG1peGluVXNlcyA9CiAgICAgIG5ldyBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+KCk7CgogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBDbGFzc1F1ZXJpZXMgX2NsYXNzUXVlcmllczsKCiAgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyKHRoaXMuX2NvbW1vbkVsZW1lbnRzLCB0aGlzLl9jbGFzc1F1ZXJpZXMpOwoKICBDbGFzc0hpZXJhcmNoeSBjbG9zZSgpIHsKICAgIGFzc2VydCgKICAgICAgICBfY2xhc3NIaWVyYXJjaHlOb2Rlcy5sZW5ndGggPT0gX2NsYXNzU2V0cy5sZW5ndGgsCiAgICAgICAgIkNsYXNzSGllcmFyY2h5Tm9kZS9DbGFzc1NldCBtaXNtYXRjaDogIgogICAgICAgICIke19jbGFzc0hpZXJhcmNoeU5vZGVzfSB2cyAiCiAgICAgICAgIiR7X2NsYXNzU2V0c30iKTsKICAgIHJldHVybiBuZXcgQ2xhc3NIaWVyYXJjaHlJbXBsKAogICAgICAgIF9jb21tb25FbGVtZW50cywgX2NsYXNzSGllcmFyY2h5Tm9kZXMsIF9jbGFzc1NldHMpOwogIH0KCiAgdm9pZCByZWdpc3RlckNsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgX2Vuc3VyZUNsYXNzU2V0KF9jbGFzc1F1ZXJpZXMuZ2V0RGVjbGFyYXRpb24oY2xzKSk7CiAgfQoKICBDbGFzc0hpZXJhcmNoeU5vZGUgX2Vuc3VyZUNsYXNzSGllcmFyY2h5Tm9kZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfY2xhc3NIaWVyYXJjaHlOb2Rlcy5wdXRJZkFic2VudChjbHMsICgpIHsKICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHBhcmVudE5vZGU7CiAgICAgIENsYXNzRW50aXR5IHN1cGVyY2xhc3MgPSBfY2xhc3NRdWVyaWVzLmdldFN1cGVyQ2xhc3MoY2xzKTsKICAgICAgaWYgKHN1cGVyY2xhc3MgIT0gbnVsbCkgewogICAgICAgIHBhcmVudE5vZGUgPSBfZW5zdXJlQ2xhc3NIaWVyYXJjaHlOb2RlKHN1cGVyY2xhc3MpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgQ2xhc3NIaWVyYXJjaHlOb2RlKAogICAgICAgICAgcGFyZW50Tm9kZSwgY2xzLCBfY2xhc3NRdWVyaWVzLmdldEhpZXJhcmNoeURlcHRoKGNscykpOwogICAgfSk7CiAgfQoKICBDbGFzc1NldCBfZW5zdXJlQ2xhc3NTZXQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gX2NsYXNzU2V0cy5wdXRJZkFic2VudChjbHMsICgpIHsKICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUgPSBfZW5zdXJlQ2xhc3NIaWVyYXJjaHlOb2RlKGNscyk7CiAgICAgIENsYXNzU2V0IGNsYXNzU2V0ID0gbmV3IENsYXNzU2V0KG5vZGUpOwoKICAgICAgZm9yIChJbnRlcmZhY2VUeXBlIHR5cGUgaW4gX2NsYXNzUXVlcmllcy5nZXRTdXBlcnR5cGVzKGNscykpIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBPcHRpbWl6YXRpb246IEF2b2lkIGFkZGluZyBbY2xzXSB0bwogICAgICAgIC8vIHN1cGVyY2xhc3Nlcy4KICAgICAgICBDbGFzc1NldCBzdWJ0eXBlU2V0ID0gX2Vuc3VyZUNsYXNzU2V0KHR5cGUuZWxlbWVudCk7CiAgICAgICAgc3VidHlwZVNldC5hZGRTdWJ0eXBlKG5vZGUpOwogICAgICB9CgogICAgICBDbGFzc0VudGl0eSBhcHBsaWVkTWl4aW4gPSBfY2xhc3NRdWVyaWVzLmdldEFwcGxpZWRNaXhpbihjbHMpOwogICAgICB3aGlsZSAoYXBwbGllZE1peGluICE9IG51bGwpIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgdGhlIGRhdGEgc3RvcmVkIGluIFtDbGFzc1NldF0uCiAgICAgICAgcmVnaXN0ZXJNaXhpblVzZShjbHMsIGFwcGxpZWRNaXhpbik7CiAgICAgICAgQ2xhc3NTZXQgbWl4aW5TZXQgPSBfZW5zdXJlQ2xhc3NTZXQoYXBwbGllZE1peGluKTsKICAgICAgICBtaXhpblNldC5hZGRNaXhpbkFwcGxpY2F0aW9uKG5vZGUpOwoKICAgICAgICAvLyBJbiBjYXNlIG9mCiAgICAgICAgLy8KICAgICAgICAvLyAgICBjbGFzcyBBIHt9CiAgICAgICAgLy8gICAgY2xhc3MgQiA9IE9iamVjdCB3aXRoIEE7CiAgICAgICAgLy8gICAgY2xhc3MgQyA9IE9iamVjdCB3aXRoIEI7CiAgICAgICAgLy8KICAgICAgICAvLyB3ZSBuZWVkIHRvIHJlZ2lzdGVyIHRoYXQgQyBub3Qgb25seSBtaXhlcyBpbiBCIGJ1dCBhbHNvIEEuCiAgICAgICAgYXBwbGllZE1peGluID0gX2NsYXNzUXVlcmllcy5nZXRBcHBsaWVkTWl4aW4oYXBwbGllZE1peGluKTsKICAgICAgfQogICAgICByZXR1cm4gY2xhc3NTZXQ7CiAgICB9KTsKICB9CgogIHZvaWQgX3VwZGF0ZVN1cGVyQ2xhc3NIaWVyYXJjaHlOb2RlRm9yQ2xhc3MoQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUpIHsKICAgIC8vIEVuc3VyZSB0aGF0IGNsYXNzZXMgaW1wbGljaXRseSBpbXBsZW1lbnRpbmcgYEZ1bmN0aW9uYCBhcmUgaW4gaXRzCiAgICAvLyBzdWJ0eXBlIHNldC4KICAgIENsYXNzRW50aXR5IGNscyA9IG5vZGUuY2xzOwogICAgaWYgKGNscyAhPSBfY29tbW9uRWxlbWVudHMuZnVuY3Rpb25DbGFzcyAmJgogICAgICAgIF9jbGFzc1F1ZXJpZXMuaW1wbGVtZW50c0Z1bmN0aW9uKGNscykpIHsKICAgICAgQ2xhc3NTZXQgc3VidHlwZVNldCA9IF9lbnN1cmVDbGFzc1NldChfY29tbW9uRWxlbWVudHMuZnVuY3Rpb25DbGFzcyk7CiAgICAgIHN1YnR5cGVTZXQuYWRkU3VidHlwZShub2RlKTsKICAgIH0KICAgIGlmICghbm9kZS5pc0luc3RhbnRpYXRlZCAmJiBub2RlLnBhcmVudE5vZGUgIT0gbnVsbCkgewogICAgICBfdXBkYXRlU3VwZXJDbGFzc0hpZXJhcmNoeU5vZGVGb3JDbGFzcyhub2RlLnBhcmVudE5vZGUpOwogICAgfQogIH0KCiAgdm9pZCB1cGRhdGVDbGFzc0hpZXJhcmNoeU5vZGVGb3JDbGFzcyhDbGFzc0VudGl0eSBjbHMsCiAgICAgIHtib29sIGRpcmVjdGx5SW5zdGFudGlhdGVkOiBmYWxzZSwgYm9vbCBhYnN0cmFjdGx5SW5zdGFudGlhdGVkOiBmYWxzZX0pIHsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlID0gX2Vuc3VyZUNsYXNzU2V0KGNscykubm9kZTsKICAgIF91cGRhdGVTdXBlckNsYXNzSGllcmFyY2h5Tm9kZUZvckNsYXNzKG5vZGUpOwogICAgaWYgKGRpcmVjdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgIG5vZGUuaXNEaXJlY3RseUluc3RhbnRpYXRlZCA9IHRydWU7CiAgICB9CiAgICBpZiAoYWJzdHJhY3RseUluc3RhbnRpYXRlZCkgewogICAgICBub2RlLmlzQWJzdHJhY3RseUluc3RhbnRpYXRlZCA9IHRydWU7CiAgICB9CiAgfQoKICB2b2lkIHJlZ2lzdGVyTWl4aW5Vc2UoQ2xhc3NFbnRpdHkgbWl4aW5BcHBsaWNhdGlvbiwgQ2xhc3NFbnRpdHkgbWl4aW4pIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEFkZCBtYXAgcmVzdHJpY3RlZCB0byBsaXZlIGNsYXNzZXMuCiAgICAvLyBXZSBkb24ndCBzdXBwb3J0IHBhdGNoIGNsYXNzZXMgYXMgbWl4aW4uCiAgICBTZXQ8Q2xhc3NFbnRpdHk+IHVzZXJzID0KICAgICAgICBtaXhpblVzZXMucHV0SWZBYnNlbnQobWl4aW4sICgpID0+IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCkpOwogICAgdXNlcnMuYWRkKG1peGluQXBwbGljYXRpb24pOwogIH0KCiAgYm9vbCBfaXNTdWJ0eXBlT2YoQ2xhc3NFbnRpdHkgeCwgQ2xhc3NFbnRpdHkgeSkgewogICAgYXNzZXJ0KF9jbGFzc1NldHMuY29udGFpbnNLZXkoeCksCiAgICAgICAgIkNsYXNzU2V0IGZvciAkeCBoYXMgbm90IGJlZW4gY29tcHV0ZWQgeWV0LiIpOwogICAgQ2xhc3NTZXQgY2xhc3NTZXQgPSBfY2xhc3NTZXRzW3ldOwogICAgYXNzZXJ0KGNsYXNzU2V0ICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoeSwgIk5vIENsYXNzU2V0IGZvciAkeSAoJHt5LnJ1bnRpbWVUeXBlfSk6ICR7X2NsYXNzU2V0c30iKSk7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgY2xhc3NIaWVyYXJjaHlOb2RlID0gX2NsYXNzSGllcmFyY2h5Tm9kZXNbeF07CiAgICBhc3NlcnQoY2xhc3NIaWVyYXJjaHlOb2RlICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoeCwgIk5vIENsYXNzSGllcmFyY2h5Tm9kZSBmb3IgJHgiKSk7CiAgICByZXR1cm4gY2xhc3NTZXQuaGFzU3VidHlwZShjbGFzc0hpZXJhcmNoeU5vZGUpOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGEgZHluYW1pYyBhY2Nlc3Mgb24gYW4gaW5zdGFuY2Ugb2YgW2V4YWN0Q2xhc3NdIGNhbgogIC8vLyB0YXJnZXQgYSBtZW1iZXIgZGVjbGFyZWQgaW4gW21lbWJlckhvbGRpbmdDbGFzc10uCiAgYm9vbCBpc0luaGVyaXRlZEluRXhhY3RDbGFzcygKICAgICAgQ2xhc3NFbnRpdHkgbWVtYmVySG9sZGluZ0NsYXNzLCBDbGFzc0VudGl0eSBleGFjdENsYXNzKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgZXhhY3RDbGFzc05vZGUgPSBfY2xhc3NIaWVyYXJjaHlOb2Rlc1tleGFjdENsYXNzXTsKICAgIGlmICghZXhhY3RDbGFzc05vZGUuaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkICYmCiAgICAgICAgIWV4YWN0Q2xhc3NOb2RlLmlzRGlyZWN0bHlJbnN0YW50aWF0ZWQpIHsKICAgICAgLy8gTm8gaW5zdGFuY2VzIG9mIFt0aGlzQ2xhc3NdIGFyZSBsaXZlLgogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBDbGFzc1NldCBtZW1iZXJIb2xkaW5nQ2xhc3NTZXQgPSBfY2xhc3NTZXRzW21lbWJlckhvbGRpbmdDbGFzc107CiAgICBpZiAobWVtYmVySG9sZGluZ0NsYXNzU2V0Lmhhc1N1YmNsYXNzKGV4YWN0Q2xhc3NOb2RlKSkgewogICAgICAvLy8gQSBtZW1iZXIgZnJvbSBhIHN1cGVyIGNsYXNzIGNhbiBiZSBhY2Nlc3NlZC4KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmb3IgKENsYXNzSGllcmFyY2h5Tm9kZSBtaXhpbkFwcGxpY2F0aW9uCiAgICAgICAgaW4gbWVtYmVySG9sZGluZ0NsYXNzU2V0Lm1peGluQXBwbGljYXRpb25Ob2RlcykgewogICAgICBpZiAobWl4aW5BcHBsaWNhdGlvbi5oYXNTdWJjbGFzcyhleGFjdENsYXNzTm9kZSkpIHsKICAgICAgICAvLy8gQSBtZW1iZXIgZnJvbSBhIG1peGVkIGluIGNsYXNzIGNhbiBiZSBhY2Nlc3NlZC4KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgTWFwPENsYXNzRW50aXR5LCBfSW5oZXJpdGVkSW5UaGlzQ2xhc3NDYWNoZT4gX2luaGVyaXRlZEluVGhpc0NsYXNzQ2FjaGVNYXAgPQogICAgICB7fTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGEgYHRoaXNgIGV4cHJlc3Npb24gaW4gW3RoaXNDbGFzc10gY2FuIHRhcmdldCBhIG1lbWJlcgogIC8vLyBkZWNsYXJlZCBpbiBbbWVtYmVySG9sZGluZ0NsYXNzXS4KICBib29sIGlzSW5oZXJpdGVkSW5UaGlzQ2xhc3MoCiAgICAgIENsYXNzRW50aXR5IG1lbWJlckhvbGRpbmdDbGFzcywgQ2xhc3NFbnRpdHkgdGhpc0NsYXNzKSB7CiAgICBfSW5oZXJpdGVkSW5UaGlzQ2xhc3NDYWNoZSBjYWNoZSA9CiAgICAgICAgX2luaGVyaXRlZEluVGhpc0NsYXNzQ2FjaGVNYXBbbWVtYmVySG9sZGluZ0NsYXNzXSA/Pz0KICAgICAgICAgICAgbmV3IF9Jbmhlcml0ZWRJblRoaXNDbGFzc0NhY2hlKCk7CiAgICByZXR1cm4gY2FjaGUuaXNJbmhlcml0ZWRJblRoaXNDbGFzc09mKHRoaXMsIG1lbWJlckhvbGRpbmdDbGFzcywgdGhpc0NsYXNzKTsKICB9CgogIE1hcDxDbGFzc0VudGl0eSwgX0luaGVyaXRlZEluU3VidHlwZUNhY2hlPiBfaW5oZXJpdGVkSW5TdWJ0eXBlQ2FjaGVNYXAgPSB7fTsKCiAgYm9vbCBpc0luaGVyaXRlZEluU3VidHlwZU9mKENsYXNzRW50aXR5IHgsIENsYXNzRW50aXR5IHkpIHsKICAgIF9Jbmhlcml0ZWRJblN1YnR5cGVDYWNoZSBjYWNoZSA9CiAgICAgICAgX2luaGVyaXRlZEluU3VidHlwZUNhY2hlTWFwW3hdID8/PSBuZXcgX0luaGVyaXRlZEluU3VidHlwZUNhY2hlKCk7CiAgICByZXR1cm4gY2FjaGUuaXNJbmhlcml0ZWRJblN1YnR5cGVPZih0aGlzLCB4LCB5KTsKICB9Cn0KCi8vLyBDYWNoZSB1c2VkIGZvciBjb21wdXRpbmcgd2hlbiBhIG1lbWJlciBvZiBhIGdpdmVuIGNsYXNzLCB0aGUgc28tY2FsbGVkCi8vLyBtZW1iZXIgaG9sZGluZyBjbGFzcywgY2FuIGJlIGluaGVyaXRlZCBpbnRvIGEgbGl2ZSBjbGFzcy4KY2xhc3MgX0luaGVyaXRlZEluVGhpc0NsYXNzQ2FjaGUgewogIC8vLyBTZXQgb2YgY2xhc3NlcyB0aGF0IGluaGVyaXRzIG1lbWJlcnMgZnJvbSB0aGUgbWVtYmVyIGhvbGRpbmcgY2xhc3MuCiAgU2V0PENsYXNzRW50aXR5PiBfaW5oZXJpdGluZ0NsYXNzZXM7CgogIC8vLyBDYWNoZSBmb3IgbGl2ZW5lc3MgY29tcHV0YXRpb24gZm9yIGEgYHRoaXNgIGV4cHJlc3Npb25zIG9mIGEgZ2l2ZW4gY2xhc3MuCiAgTWFwPENsYXNzRW50aXR5LCBfTGl2ZVNldD4gX21hcDsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIG1lbWJlcnMgb2YgW21lbWJlckhvbGRpbmdDbGFzc10gY2FuIGJlIGluaGVyaXRlZCBpbnRvCiAgLy8vIGEgbGl2ZSBjbGFzcyB0aGF0IGNhbiBiZSB0aGUgdGFyZ2V0IG9mIGEgYHRoaXNgIGV4cHJlc3Npb24gaW4gW3RoaXNDbGFzc10uCiAgYm9vbCBpc0luaGVyaXRlZEluVGhpc0NsYXNzT2YoQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGJ1aWxkZXIsCiAgICAgIENsYXNzRW50aXR5IG1lbWJlckhvbGRpbmdDbGFzcywgQ2xhc3NFbnRpdHkgdGhpc0NsYXNzKSB7CiAgICBfTGl2ZVNldCBzZXQ7CiAgICBpZiAoX21hcCA9PSBudWxsKSB7CiAgICAgIF9tYXAgPSB7fTsKICAgIH0gZWxzZSB7CiAgICAgIHNldCA9IF9tYXBbdGhpc0NsYXNzXTsKICAgIH0KICAgIGlmIChzZXQgPT0gbnVsbCkgewogICAgICBzZXQgPSBfbWFwW3RoaXNDbGFzc10gPSBfY29tcHV0ZUluaGVyaXRpbmdJblRoaXNDbGFzc1NldCgKICAgICAgICAgIGJ1aWxkZXIsIG1lbWJlckhvbGRpbmdDbGFzcywgdGhpc0NsYXNzKTsKICAgIH0KICAgIHJldHVybiBzZXQuaGFzTGl2ZUNsYXNzKGJ1aWxkZXIpOwogIH0KCiAgX0xpdmVTZXQgX2NvbXB1dGVJbmhlcml0aW5nSW5UaGlzQ2xhc3NTZXQoQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGJ1aWxkZXIsCiAgICAgIENsYXNzRW50aXR5IG1lbWJlckhvbGRpbmdDbGFzcywgQ2xhc3NFbnRpdHkgdGhpc0NsYXNzKSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbWVtYmVySG9sZGluZ0NsYXNzTm9kZSA9CiAgICAgICAgYnVpbGRlci5fY2xhc3NIaWVyYXJjaHlOb2Rlc1ttZW1iZXJIb2xkaW5nQ2xhc3NdOwoKICAgIGlmIChfaW5oZXJpdGluZ0NsYXNzZXMgPT0gbnVsbCkgewogICAgICBfaW5oZXJpdGluZ0NsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgICBfaW5oZXJpdGluZ0NsYXNzZXMuYWRkQWxsKG1lbWJlckhvbGRpbmdDbGFzc05vZGUKICAgICAgICAgIC5zdWJjbGFzc2VzQnlNYXNrKENsYXNzSGllcmFyY2h5Tm9kZS5BTEwsIHN0cmljdDogZmFsc2UpKTsKICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgbWl4aW5BcHBsaWNhdGlvbgogICAgICAgICAgaW4gYnVpbGRlci5fY2xhc3NTZXRzW21lbWJlckhvbGRpbmdDbGFzc10ubWl4aW5BcHBsaWNhdGlvbk5vZGVzKSB7CiAgICAgICAgX2luaGVyaXRpbmdDbGFzc2VzLmFkZEFsbChtaXhpbkFwcGxpY2F0aW9uCiAgICAgICAgICAgIC5zdWJjbGFzc2VzQnlNYXNrKENsYXNzSGllcmFyY2h5Tm9kZS5BTEwsIHN0cmljdDogZmFsc2UpKTsKICAgICAgfQogICAgfQoKICAgIFNldDxDbGFzc0VudGl0eT4gdmFsaWRhdGluZ1NldCA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CgogICAgdm9pZCBwcm9jZXNzSGllcmFyY2h5KENsYXNzSGllcmFyY2h5Tm9kZSBtaXhlck5vZGUpIHsKICAgICAgZm9yIChDbGFzc0VudGl0eSBpbmhlcml0aW5nQ2xhc3MgaW4gX2luaGVyaXRpbmdDbGFzc2VzKSB7CiAgICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIGluaGVyaXRpbmdDbGFzc05vZGUgPQogICAgICAgICAgICBidWlsZGVyLl9jbGFzc0hpZXJhcmNoeU5vZGVzW2luaGVyaXRpbmdDbGFzc107CiAgICAgICAgaWYgKCF2YWxpZGF0aW5nU2V0LmNvbnRhaW5zKG1peGVyTm9kZS5jbHMpICYmCiAgICAgICAgICAgIGluaGVyaXRpbmdDbGFzc05vZGUuaGFzU3ViY2xhc3MobWl4ZXJOb2RlKSkgewogICAgICAgICAgLy8gSWYgW21peGVyTm9kZS5jbHNdIGlzIGxpdmUgdGhlbiBhIGB0aGlzYCBleHByZXNzaW9uIGNhbiB0YXJnZXQKICAgICAgICAgIC8vIG1lbWJlcnMgaW5oZXJpdGVkIGZyb20gW21lbWJlckhvbGRpbmdDbGFzc10gaW50byBbaW5oZXJpdGluZ0NsYXNzXS4KICAgICAgICAgIHZhbGlkYXRpbmdTZXQuYWRkKG1peGVyTm9kZS5jbHMpOwogICAgICAgIH0KICAgICAgICBpZiAobWl4ZXJOb2RlLmhhc1N1YmNsYXNzKGluaGVyaXRpbmdDbGFzc05vZGUpKSB7CiAgICAgICAgICAvLyBJZiBbaW5oZXJpdGluZ0NsYXNzXSBpcyBsaXZlIHRoZW4gYSBgdGhpc2AgZXhwcmVzc2lvbiBjYW4gdGFyZ2V0CiAgICAgICAgICAvLyBtZW1iZXJzIGluaGVyaXRlZCBmcm9tIFttZW1iZXJIb2xkaW5nQ2xhc3NdIGludG8gYGluaGVyaXRpbmdDbGFzc2AKICAgICAgICAgIC8vIGludG8gYSBzdWJjbGFzcyBvZiBbbWl4ZXJOb2RlLmNsc10uCiAgICAgICAgICB2YWxpZGF0aW5nU2V0LmFkZChpbmhlcml0aW5nQ2xhc3MpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIENsYXNzU2V0IHRoaXNDbGFzc1NldCA9IGJ1aWxkZXIuX2NsYXNzU2V0c1t0aGlzQ2xhc3NdOwoKICAgIHByb2Nlc3NIaWVyYXJjaHkodGhpc0NsYXNzU2V0Lm5vZGUpOwoKICAgIGZvciAoQ2xhc3NIaWVyYXJjaHlOb2RlIG1peGluQXBwbGljYXRpb24KICAgICAgICBpbiB0aGlzQ2xhc3NTZXQubWl4aW5BcHBsaWNhdGlvbk5vZGVzKSB7CiAgICAgIHByb2Nlc3NIaWVyYXJjaHkobWl4aW5BcHBsaWNhdGlvbik7CiAgICB9CgogICAgcmV0dXJuIG5ldyBfTGl2ZVNldCh2YWxpZGF0aW5nU2V0KTsKICB9Cn0KCi8vLyBBIGNhY2hlIG9iamVjdCB1c2VkIGZvciBbQ2xhc3NIaWVyYXJjaHlCdWlsZGVyLmlzSW5oZXJpdGVkSW5TdWJ0eXBlT2ZdLgpjbGFzcyBfSW5oZXJpdGVkSW5TdWJ0eXBlQ2FjaGUgewogIE1hcDxDbGFzc0VudGl0eSwgX0xpdmVTZXQ+IF9tYXA7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgYSBsaXZlIGNsYXNzIGN1cnJlbnRseSBrbm93biB0byBpbmhlcml0IGZyb20gW3hdIGFuZAogIC8vLyBpbXBsZW1lbnQgW3ldLgogIGJvb2wgaXNJbmhlcml0ZWRJblN1YnR5cGVPZigKICAgICAgQ2xhc3NIaWVyYXJjaHlCdWlsZGVyIGJ1aWxkZXIsIENsYXNzRW50aXR5IHgsIENsYXNzRW50aXR5IHkpIHsKICAgIF9MaXZlU2V0IHNldDsKICAgIGlmIChfbWFwID09IG51bGwpIHsKICAgICAgX21hcCA9IHt9OwogICAgfSBlbHNlIHsKICAgICAgc2V0ID0gX21hcFt5XTsKICAgIH0KICAgIGlmIChzZXQgPT0gbnVsbCkgewogICAgICBzZXQgPSBfbWFwW3ldID0gX2NvbXB1dGVJbmhlcml0aW5nSW5TdWJ0eXBlU2V0KGJ1aWxkZXIsIHgsIHkpOwogICAgfQogICAgcmV0dXJuIHNldC5oYXNMaXZlQ2xhc3MoYnVpbGRlcik7CiAgfQoKICAvLy8gQ3JlYXRlcyBhbiBbX0xpdmVTZXRdIG9mIGNsYXNzZXMgdGhhdCBpbmhlcml0IG1lbWJlcnMgb2YgYSBjbGFzcyBbeF0KICAvLy8gd2hpbGUgaW1wbGVtZW50aW5nIGNsYXNzIFt5XS4KICBfTGl2ZVNldCBfY29tcHV0ZUluaGVyaXRpbmdJblN1YnR5cGVTZXQoCiAgICAgIENsYXNzSGllcmFyY2h5QnVpbGRlciBidWlsZGVyLCBDbGFzc0VudGl0eSB4LCBDbGFzc0VudGl0eSB5KSB7CiAgICBDbGFzc1NldCBjbGFzc1NldCA9IGJ1aWxkZXIuX2NsYXNzU2V0c1t4XTsKCiAgICBhc3NlcnQoCiAgICAgICAgY2xhc3NTZXQgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgeCwgIk5vIENsYXNzU2V0IGZvciAkeCAoJHt4LnJ1bnRpbWVUeXBlfSk6ICR7YnVpbGRlci5fY2xhc3NTZXRzfSIpKTsKCiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICAgIGlmIChidWlsZGVyLl9pc1N1YnR5cGVPZih4LCB5KSkgewogICAgICAvLyBbeF0gaW1wbGVtZW50cyBbeV0gaXRzZWxmLCBwb3NzaWJsZSB0aHJvdWdoIHN1cGVydHlwZXMuCiAgICAgIGNsYXNzZXMuYWRkKHgpOwogICAgfQoKICAgIC8vLyBBZGQgc3ViY2xhc3NlcyBvZiBbbm9kZV0gdGhhdCBpbXBsZW1lbnQgW3ldLgogICAgdm9pZCBzdWJjbGFzc0ltcGxlbWVudHMoQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUsIHtib29sIHN0cmljdH0pIHsKICAgICAgbm9kZS5mb3JFYWNoU3ViY2xhc3MoKENsYXNzRW50aXR5IHopIHsKICAgICAgICBpZiAoYnVpbGRlci5faXNTdWJ0eXBlT2YoeiwgeSkpIHsKICAgICAgICAgIGNsYXNzZXMuYWRkKHopOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfSwgQ2xhc3NIaWVyYXJjaHlOb2RlLkFMTCwgc3RyaWN0OiBzdHJpY3QpOwogICAgfQoKICAgIC8vIEEgc3ViY2xhc3NlcyBvZiBbeF0gdGhhdCBpbXBsZW1lbnQgW3ldLgogICAgc3ViY2xhc3NJbXBsZW1lbnRzKGNsYXNzU2V0Lm5vZGUsIHN0cmljdDogdHJ1ZSk7CgogICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgbWl4aW5BcHBsaWNhdGlvbgogICAgICAgIGluIGNsYXNzU2V0Lm1peGluQXBwbGljYXRpb25Ob2RlcykgewogICAgICAvLyBBIHN1YmNsYXNzIG9mIFttaXhpbkFwcGxpY2F0aW9uXSBpbXBsZW1lbnRzIFt5XS4KICAgICAgc3ViY2xhc3NJbXBsZW1lbnRzKG1peGluQXBwbGljYXRpb24sIHN0cmljdDogZmFsc2UpOwogICAgfQoKICAgIHJldHVybiBuZXcgX0xpdmVTZXQoY2xhc3Nlcyk7CiAgfQp9CgovLy8gQSBzZXQgb2YgcG90ZW50aWFsbHkgbGl2ZSBjbGFzc2VzLgovLy8KLy8vIFRoZSBzZXQgaXMgdXNlZCBbQ2xhc3NIaWVyYXJjaHlCdWlsZGVyLmlzSW5oZXJpdGVkSW5TdWJ0eXBlT2ZdIGFuZAovLy8gW0NsYXNzSGllcmFyY2h5QnVpbGRlci5pc0luaGVyaXRlZEluVGhpc0NsYXNzT2ZdIHRvIGRldGVybWluZQovLy8gd2hlbiBtZW1iZXJzIG9mIGEgY2xhc3MgaXMgbGl2ZS4KY2xhc3MgX0xpdmVTZXQgewogIC8vLyBJZiBgdHJ1ZWAgdGhlIHNldCBvZiBjbGFzc2VzIGlzIGtub3duIHRvIGNvbnRhaW4gYSBsaXZlIGNsYXNzLiBJbiB0aGlzCiAgLy8vIGNhc2UgW19jbGFzc2VzXSBpcyBgbnVsbGAuIElmIGBmYWxzZWAgdGhlIHNldCBvZiBjbGFzc2VzIGlzIGVtcHR5IGFuZAogIC8vLyB0aGVyZWZvcmUga25vd24gbmV2ZXIgdG8gY29udGFpbiBsaXZlIGNsYXNzZXMuIEluIHRoaXMgY2FzZSBbX2NsYXNzZXNdCiAgLy8vIGlzIGBudWxsYC4gSWYgYG51bGxgIFtfY2xhc3Nlc10gaXMgYSBub24tZW1wdHkgc2V0IGNvbnRhaW5pbmcgY2xhc3NlcwogIC8vLyB0aGF0IGFyZSBub3QgeWV0IGtub3duIHRvIGJlIGxpdmUuCiAgYm9vbCBfcmVzdWx0OwogIFNldDxDbGFzc0VudGl0eT4gX2NsYXNzZXM7CgogIF9MaXZlU2V0KFNldDxDbGFzc0VudGl0eT4gY2xhc3NlcykKICAgICAgOiBfcmVzdWx0ID0gY2xhc3Nlcy5pc0VtcHR5ID8gZmFsc2UgOiBudWxsLAogICAgICAgIF9jbGFzc2VzID0gY2xhc3Nlcy5pc05vdEVtcHR5ID8gY2xhc3NlcyA6IG51bGw7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIHNldCBvZiBjbGFzc2VzIGlzIGN1cnJlbnRseSBrbm93biB0byBjb250YWluIGEgbGl2ZQogIC8vLyBjbGFzc2VzLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIGNoYW5nZXMgZHVyaW5nIHRoZSBjbG9zZWQgd29ybGQgY29tcHV0YXRpb24uCiAgLy8vIEluaXRpYWxseSwgd2UgaGF2ZW4ndCBzZWVuIGFueSBsaXZlIGNsYXNzZXMgc28gd2Ugd2lsbCByZXR1cm4gYGZhbHNlYCBldmVuCiAgLy8vIGZvciBhIG5vbi1lbXB0eSBzZXQgb2YgY2xhc3Nlcy4gQXMgbW9yZSBjbGFzc2VzIGFyZSBtYXJrZWQgYXMKICAvLy8gaW5zdGFudGlhdGVkLCBkdXJpbmcgdHJlZS1zaGFraW5nLCB0aGUgcmVzdWx0IG1pZ2h0IGNoYW5nZSB0byBgdHJ1ZWAgaWYKICAvLy8gb25lIG9mIHRoZSBbX2NsYXNzZXNdIGhhcyBiZWVuIG1hcmtlZCBhcyBsaXZlLgogIC8vLwogIC8vLyBUaGUgcmVzdWx0IG9mIHRoaXMgbWV0aG9kIF9pc18gbW9ub3RvbmUsIHRob3VnaDsgd2hlbiB3ZSBoYXZlIHJldHVybmVkCiAgLy8vIGB0cnVlYCAoYmVjYXVzZSBhdCBsZWFzdCBvbmUgY2xhc3MgaXMga25vd24gdG8gYmUgbGl2ZSkgd2Ugd2lsbCBjb250aW51ZQogIC8vLyB0byByZXR1cm4gYHRydWVgLgogIGJvb2wgaGFzTGl2ZUNsYXNzKENsYXNzSGllcmFyY2h5QnVpbGRlciBidWlsZGVyKSB7CiAgICBpZiAoX3Jlc3VsdCAhPSBudWxsKSByZXR1cm4gX3Jlc3VsdDsKICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIF9jbGFzc2VzKSB7CiAgICAgIGlmIChidWlsZGVyLl9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsc10uaXNJbnN0YW50aWF0ZWQpIHsKICAgICAgICAvLyBXZSBub3cga25vdyB0aGlzIHNldCBjb250YWlucyBhIGxpdmUgY2xhc3MgYW5kIGRvbmUgbmVlZCB0byByZW1lbWJlcgogICAgICAgIC8vIHRoYXQgc2V0IG9mIGNsYXNzZXMgYW55bW9yZS4KICAgICAgICBfcmVzdWx0ID0gdHJ1ZTsKICAgICAgICBfY2xhc3NlcyA9IG51bGw7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIENsYXNzUXVlcmllcyB7CiAgLy8vIFJldHVybnMgdGhlIGRlY2xhcmF0aW9uIG9mIFtjbHNdLgogIENsYXNzRW50aXR5IGdldERlY2xhcmF0aW9uKGNvdmFyaWFudCBDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgY2xhc3MgbWl4ZWQgaW50byBbY2xzXSBpZiBhbnkuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVwbGFjZSB0aGlzIGJ5IGEgYGdldEFwcGxpZWRNaXhpbnNgIGZ1bmN0aW9uIHRoYXQKICAvLyByZXR1cm4gdHJhbnNpdGl2ZWx5IG1peGVkIGluIGNsYXNzZXMgbGlrZSBpbjoKICAvLyAgICAgY2xhc3MgQSB7fQogIC8vICAgICBjbGFzcyBCID0gT2JqZWN0IHdpdGggQTsKICAvLyAgICAgY2xhc3MgQyA9IE9iamVjdCB3aXRoIEI7CiAgQ2xhc3NFbnRpdHkgZ2V0QXBwbGllZE1peGluKGNvdmFyaWFudCBDbGFzc0VudGl0eSBjbHMpOwoKICAvLy8gUmV0dXJucyB0aGUgaGllcmFyY2h5IGRlcHRoIG9mIFtjbHNdLgogIGludCBnZXRIaWVyYXJjaHlEZXB0aChjb3ZhcmlhbnQgQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtjbHNdIGltcGxlbWVudHMgYEZ1bmN0aW9uYCBlaXRoZXIgZXhwbGljaXRseSBvciB0aHJvdWdoCiAgLy8vIGEgYGNhbGxgIG1ldGhvZC4KICBib29sIGltcGxlbWVudHNGdW5jdGlvbihjb3ZhcmlhbnQgQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgdGhlIHN1cGVyY2xhc3Mgb2YgW2Nsc10gaWYgYW55LgogIENsYXNzRW50aXR5IGdldFN1cGVyQ2xhc3MoY292YXJpYW50IENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGFsbCBzdXBlcnR5cGVzIG9mIFtjbHNdLgogIEl0ZXJhYmxlPEludGVyZmFjZVR5cGU+IGdldFN1cGVydHlwZXMoY292YXJpYW50IENsYXNzRW50aXR5IGNscyk7Cn0KCi8vLyBFbnVtIHZhbHVlcyBkZWZpbmluZyBzdWJzZXQgb2YgY2xhc3NlcyBpbmNsdWRlZCBpbiBxdWVyaWVzLgplbnVtIENsYXNzUXVlcnkgewogIC8vLyBPbmx5IHRoZSBjbGFzcyBpdHNlbGYgaXMgaW5jbHVkZWQuCiAgRVhBQ1QsCgogIC8vLyBUaGUgY2xhc3MgYW5kIGFsbCBzdWJjbGFzc2VzICh0cmFuc2l0aXZlbHkpIGFyZSBpbmNsdWRlZC4KICBTVUJDTEFTUywKCiAgLy8vIFRoZSBjbGFzcyBhbmQgYWxsIGNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgb3Igc3ViY2xhc3MgaXQgKHRyYW5zaXRpdmVseSkKICAvLy8gYXJlIGluY2x1ZGVkLgogIFNVQlRZUEUsCn0KCi8vLyBSZXN1bHQga2luZCBmb3IgW0NsYXNzSGllcmFyY2h5LmNvbW1vblN1YmNsYXNzZXNdLgplbnVtIFN1YmNsYXNzUmVzdWx0S2luZCB7CiAgLy8vIE5vIGNvbW1vbiBzdWJjbGFzc2VzLgogIEVNUFRZLAoKICAvLy8gRXhhY3RseSB0aGUgZmlyc3QgY2xhc3MgaW4gY29tbW9uLgogIEVYQUNUMSwKCiAgLy8vIEV4YWN0bHkgdGhlIHNlY29uZCBjbGFzcyBpbiBjb21tb24uCiAgRVhBQ1QyLAoKICAvLy8gU3ViY2xhc3NlcyBvZiB0aGUgZmlyc3QgY2xhc3MgaW4gY29tbW9uLgogIFNVQkNMQVNTMSwKCiAgLy8vIFN1YmNsYXNzZXMgb2YgdGhlIHNlY29uZCBjbGFzcyBpbiBjb21tb24uCiAgU1VCQ0xBU1MyLAoKICAvLy8gU3VidHlwZXMgb2YgdGhlIGZpcnN0IGNsYXNzIGluIGNvbW1vbi4KICBTVUJUWVBFMSwKCiAgLy8vIFN1YnR5cGVzIG9mIHRoZSBzZWNvbmQgY2xhc3MgaW4gY29tbW9uLgogIFNVQlRZUEUyLAoKICAvLy8gU3ViY2xhc3NlcyBvZiBhIHNldCBvZiBjbGFzc2VzIGluIGNvbW1vbi4KICBTRVQKfQoKLy8vIFJlc3VsdCBjb21wdXRlZCBpbiBbQ2xhc3NIaWVyYXJjaHkuY29tbW9uU3ViY2xhc3Nlc10uCmNsYXNzIFN1YmNsYXNzUmVzdWx0IHsKICBmaW5hbCBTdWJjbGFzc1Jlc3VsdEtpbmQga2luZDsKICBmaW5hbCBMaXN0PENsYXNzRW50aXR5PiBjbGFzc2VzOwoKICBTdWJjbGFzc1Jlc3VsdCh0aGlzLmNsYXNzZXMpIDoga2luZCA9IFN1YmNsYXNzUmVzdWx0S2luZC5TRVQ7CgogIGNvbnN0IFN1YmNsYXNzUmVzdWx0LmludGVybmFsKHRoaXMua2luZCkgOiBjbGFzc2VzID0gbnVsbDsKCiAgc3RhdGljIGNvbnN0IFN1YmNsYXNzUmVzdWx0IEVNUFRZID0KICAgICAgY29uc3QgU3ViY2xhc3NSZXN1bHQuaW50ZXJuYWwoU3ViY2xhc3NSZXN1bHRLaW5kLkVNUFRZKTsKICBzdGF0aWMgY29uc3QgU3ViY2xhc3NSZXN1bHQgRVhBQ1QxID0KICAgICAgY29uc3QgU3ViY2xhc3NSZXN1bHQuaW50ZXJuYWwoU3ViY2xhc3NSZXN1bHRLaW5kLkVYQUNUMSk7CiAgc3RhdGljIGNvbnN0IFN1YmNsYXNzUmVzdWx0IEVYQUNUMiA9CiAgICAgIGNvbnN0IFN1YmNsYXNzUmVzdWx0LmludGVybmFsKFN1YmNsYXNzUmVzdWx0S2luZC5FWEFDVDIpOwogIHN0YXRpYyBjb25zdCBTdWJjbGFzc1Jlc3VsdCBTVUJDTEFTUzEgPQogICAgICBjb25zdCBTdWJjbGFzc1Jlc3VsdC5pbnRlcm5hbChTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCQ0xBU1MxKTsKICBzdGF0aWMgY29uc3QgU3ViY2xhc3NSZXN1bHQgU1VCQ0xBU1MyID0KICAgICAgY29uc3QgU3ViY2xhc3NSZXN1bHQuaW50ZXJuYWwoU3ViY2xhc3NSZXN1bHRLaW5kLlNVQkNMQVNTMik7CiAgc3RhdGljIGNvbnN0IFN1YmNsYXNzUmVzdWx0IFNVQlRZUEUxID0KICAgICAgY29uc3QgU3ViY2xhc3NSZXN1bHQuaW50ZXJuYWwoU3ViY2xhc3NSZXN1bHRLaW5kLlNVQlRZUEUxKTsKICBzdGF0aWMgY29uc3QgU3ViY2xhc3NSZXN1bHQgU1VCVFlQRTIgPQogICAgICBjb25zdCBTdWJjbGFzc1Jlc3VsdC5pbnRlcm5hbChTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCVFlQRTIpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnU3ViY2xhc3NSZXN1bHQoJGtpbmQsY2xhc3Nlcz0kY2xhc3NlcyknOwp9CoPlAE5OPAEZIiQ0LhkBQRUgPC0+LQEyJwFNKAFLPzABTU8NBk5QS0spMgFNBkMyAUwQMgE+MwFPFzIBTTw3AU0qPQFBHiwBTQ4gOgFQJE4BTjY1AU4dOwFEHisBUQ4fOgFOKk0BRDwBUQ0uAUkYLQFPESsBSjsGSxAGJgYVFSUfBhAGSQY4I1EBURgGUCk9AUwiBlApKQE7BlEiAgE1SB0vAShDLwEWSQExOhc/JicrSygsBi8rGkgqBgEVIzkEAQwoFSYePC04EyA9LC4TIBMEAQwpOTAEAQwxOTgEAQwzOToEAQwzOToEAQwzOToEAQwzJwwaEg82LEUnQjQEAQw0SQQBDDg+ORVHBAEMPj86KDQXBAEMLT8mMQQBDCA7PyROFwQBDE8/KiM/FwQBDDYpHCQNFkcGBAEMPCkcJA1RGQYEAQwsKSQuBAEMHzspIksXBAEMTikoID8XBAEMPSgoPkhBOy4VCAYSBAEMLz8qMAQBDC4oBAEMLDM5KRwZEwYzBAEMRy1ETxQaJQgkLStMEygoCjFLEycoCggjLStMEygoCjFLEycoCggjUU8UNksTKS1LEykIIzAlQCkIMVAlKAhKCR0JGBgvIi8JTU8iMz0rIUlLMAonCiowJUApCDFQJSgISjM9KyFJSzAKJwoqDTVPKCxPKAhKCR0JGBgvIi8lIglMTEszPCshSUswCicKKgYEAQw+JgQBDCocBAEMIyoXQg0/BjdOGgQCAR5BPEQrSzcwASgkAUMBGww6MSYaIzwEASg4BAFCNiVBIDwIJUIIBAEuLEAuAUVEGT0lCAFFJUMtOywBFgsZJycLRkQIFwgEAUlJFCAwMUwjBjs/BgQBOVA5MiAqBiIsBgQBS0AwHUQhBAE0JjcnHU5FJzY0BAFMOCBASjQyLxQGRT03EwYtOjo8FQgGEgQBTwoBTygfPyc+LlAEAU8BPiVLNQQCAUs+I0onAVAjAU5RPz8SGBENHQYXQDMGJgQBSz8wOgEmMzdFL00zRwgGAT0BOkAxOzY6TFEsCjpOUDEuCggGATsBKQEtMSoGASgEAgFMISMBSxUfRRIYEQ0VBhdFBiYEAUskK0UvAQwaElEBNwEmQRYGATVGLSoaChUyBgEvNQEtLTo7BgEiBAIBJwRHQiURTUxNTCkQHQElMjgBTg8GTVFETjUGTU8YNSkoPlAoGBkVCAYSBAIBHig5ATFNMxQiIjoBLDQBURc2AS44ASdEAgFAEikJAUAMAU0UCwIBNxocCQEpCgEqCgEvDQEwDQEtDAEuDAEwBgIBOhchIwFAAT0BJj8nQCdAKkMqQylCKUIBDEECATJwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS9jbGFzc19oaWVyYXJjaHkuZGFydD9zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci90eXBlX2dyYXBoX2luZmVycmVyLmRhcnSWnS8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IHR5cGVfZ3JhcGhfaW5mZXJyZXI7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgc2hvdyBRdWV1ZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJy4uL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vY29tcGlsZXIuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRzLmRhcnQnIHNob3cgSkNsb3N1cmVDYWxsTWV0aG9kOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnOwppbXBvcnQgJ2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICdpbmZlcnJlcl9lbmdpbmUuZGFydCc7CmltcG9ydCAndHlwZV9ncmFwaF9ub2Rlcy5kYXJ0JzsKaW1wb3J0ICd0eXBlcy5kYXJ0JzsKCi8vLyBBIHdvcmsgcXVldWUgZm9yIHRoZSBpbmZlcnJlci4gSXQgZmlsdGVycyBvdXQgbm9kZXMgdGhhdCBhcmUgdGFnZ2VkIGFzCi8vLyBbVHlwZUluZm9ybWF0aW9uLmRvTm90RW5xdWV1ZV0sIGFzIHdlbGwgYXMgZW5zdXJlcyB0aHJvdWdoCi8vLyBbVHlwZUluZm9ybWF0aW9uLmluUXVldWVdIHRoYXQgYSBub2RlIGlzIGluIHRoZSBxdWV1ZSBvbmx5IG9uY2UgYXQKLy8vIGEgdGltZS4KY2xhc3MgV29ya1F1ZXVlIHsKICBmaW5hbCBRdWV1ZTxUeXBlSW5mb3JtYXRpb24+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+e307CiAgICBfc2VuZE1hcFtub2RlXSA9IG1hc2s7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHR5cGVPZkdldHRlcihpci5UcmVlTm9kZSBub2RlKSB7CiAgICBpZiAoX3NlbmRNYXAgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX3NlbmRNYXBbbm9kZV07CiAgfQp9Cgpib29sIF9tYXBzVG9OdWxsKGlyLlRyZWVOb2RlIG5vZGUsIEFic3RyYWN0VmFsdWUgdmFsdWUpID0+IHZhbHVlID09IG51bGw7CoYrAE5OPAEoASIaGR8bIiMkISErNSckIiIaLiokKBglHh4eHhsaGh8jIBsVAVBRCyBQFDIpNDM1T00a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dHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gU291cmNlIGluZm9ybWF0aW9uIHN5c3RlbSBtYXBwaW5nIHRoYXQgYXR0ZW1wdHMgYSBzZW1hbnRpYyBtYXBwaW5nIGJldHdlZW4KLy8vIG9mZnNldHMgb2YgSmF2YVNjcmlwdCBjb2RlIHBvaW50cyB0byBvZmZzZXRzIG9mIERhcnQgY29kZSBwb2ludHMuCgpsaWJyYXJ5IGRhcnQyanMuc291cmNlX2luZm9ybWF0aW9uLnBvc2l0aW9uOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vanMvanNfZGVidWcuZGFydCc7CmltcG9ydCAnLi4vanMvanNfc291cmNlX21hcHBpbmcuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JzsKaW1wb3J0ICdjb2RlX291dHB1dC5kYXJ0JyBzaG93IEJ1ZmZlcmVkQ29kZU91dHB1dDsKaW1wb3J0ICdzb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CgovLy8gW1NvdXJjZUluZm9ybWF0aW9uXSB0aGF0IGNvbnNpc3RzIG9mIGFuIG9mZnNldCBwb3NpdGlvbiBpbnRvIHRoZSBzb3VyY2UKLy8vIGNvZGUuCmNsYXNzIFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb24gZXh0ZW5kcyBTb3VyY2VJbmZvcm1hdGlvbiB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnc291cmNlLWluZm9ybWF0aW9uJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU291cmNlTG9jYXRpb24gc3RhcnRQb3NpdGlvbjsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU291cmNlTG9jYXRpb24gaW5uZXJQb3NpdGlvbjsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTGlzdDxGcmFtZUNvbnRleHQ+IGlubGluaW5nQ29udGV4dDsKCiAgUG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvbigKICAgICAgdGhpcy5zdGFydFBvc2l0aW9uLCB0aGlzLmlubmVyUG9zaXRpb24sIHRoaXMuaW5saW5pbmdDb250ZXh0KTsKCiAgZmFjdG9yeSBQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBTb3VyY2VMb2NhdGlvbiBzdGFydFBvc2l0aW9uID0gc291cmNlLnJlYWRDYWNoZWQ8U291cmNlTG9jYXRpb24+KAogICAgICAgICgpID0+IFNvdXJjZUxvY2F0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpKTsKICAgIFNvdXJjZUxvY2F0aW9uIGlubmVyUG9zaXRpb24gPSBzb3VyY2UucmVhZENhY2hlZDxTb3VyY2VMb2NhdGlvbj4oCiAgICAgICAgKCkgPT4gU291cmNlTG9jYXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSkpOwogICAgTGlzdDxGcmFtZUNvbnRleHQ+IGlubGluaW5nQ29udGV4dCA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBGcmFtZUNvbnRleHQucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uKAogICAgICAgIHN0YXJ0UG9zaXRpb24sIGlubmVyUG9zaXRpb24sIGlubGluaW5nQ29udGV4dCk7CiAgfQoKICB2b2lkIHdyaXRlVG9EYXRhU2lua0ludGVybmFsKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDYWNoZWQoCiAgICAgICAgc3RhcnRQb3NpdGlvbiwKICAgICAgICAoU291cmNlTG9jYXRpb24gc291cmNlTG9jYXRpb24pID0+CiAgICAgICAgICAgIFNvdXJjZUxvY2F0aW9uLndyaXRlVG9EYXRhU2luayhzaW5rLCBzb3VyY2VMb2NhdGlvbikpOwogICAgc2luay53cml0ZUNhY2hlZCgKICAgICAgICBpbm5lclBvc2l0aW9uLAogICAgICAgIChTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbikgPT4KICAgICAgICAgICAgU291cmNlTG9jYXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmssIHNvdXJjZUxvY2F0aW9uKSk7CiAgICBzaW5rLndyaXRlTGlzdChpbmxpbmluZ0NvbnRleHQsCiAgICAgICAgKEZyYW1lQ29udGV4dCBjb250ZXh0KSA9PiBjb250ZXh0LndyaXRlVG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8U291cmNlTG9jYXRpb24+IGdldCBzb3VyY2VMb2NhdGlvbnMgewogICAgTGlzdDxTb3VyY2VMb2NhdGlvbj4gbGlzdCA9IDxTb3VyY2VMb2NhdGlvbj5bXTsKICAgIGlmIChzdGFydFBvc2l0aW9uICE9IG51bGwpIHsKICAgICAgbGlzdC5hZGQoc3RhcnRQb3NpdGlvbik7CiAgICB9CiAgICBpZiAoaW5uZXJQb3NpdGlvbiAhPSBudWxsKSB7CiAgICAgIGxpc3QuYWRkKGlubmVyUG9zaXRpb24pOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VTcGFuIGdldCBzb3VyY2VTcGFuIHsKICAgIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uID0KICAgICAgICBzdGFydFBvc2l0aW9uICE9IG51bGwgPyBzdGFydFBvc2l0aW9uIDogaW5uZXJQb3NpdGlvbjsKICAgIFVyaSB1cmkgPSBsb2NhdGlvbi5zb3VyY2VVcmk7CiAgICBpbnQgb2Zmc2V0ID0gbG9jYXRpb24ub2Zmc2V0OwogICAgcmV0dXJuIG5ldyBTb3VyY2VTcGFuKHVyaSwgb2Zmc2V0LCBvZmZzZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gSGFzaGluZy5saXN0SGFzaCgKICAgICAgICBpbmxpbmluZ0NvbnRleHQsIEhhc2hpbmcub2JqZWN0c0hhc2goc3RhcnRQb3NpdGlvbiwgaW5uZXJQb3NpdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb24gJiYKICAgICAgICBzdGFydFBvc2l0aW9uID09IG90aGVyLnN0YXJ0UG9zaXRpb24gJiYKICAgICAgICBpbm5lclBvc2l0aW9uID09IG90aGVyLmlubmVyUG9zaXRpb24gJiYKICAgICAgICBlcXVhbEVsZW1lbnRzKGlubGluaW5nQ29udGV4dCwgb3RoZXIuaW5saW5pbmdDb250ZXh0KTsKICB9CgogIC8vLyBDcmVhdGUgYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24gdXNpbmcgW3VyaVRleHRdCiAgLy8vIGFzIHRoZSBVcmkgcmVwcmVzZW50YXRpb24uCiAgU3RyaW5nIF9jb21wdXRlVGV4dChTdHJpbmcgdXJpVGV4dCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJyR1cmlUZXh0OicpOwogICAgLy8gVXNlIDEtYmFzZWQgbGluZS9jb2x1bW4gaW5mbyB0byBtYXRjaCB1c3VhbCBkYXJ0IHRvb2wgb3V0cHV0LgogICAgaWYgKHN0YXJ0UG9zaXRpb24gIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnWyR7c3RhcnRQb3NpdGlvbi5saW5lfSwnCiAgICAgICAgICAnJHtzdGFydFBvc2l0aW9uLmNvbHVtbn1dJyk7CiAgICB9CiAgICBpZiAoaW5uZXJQb3NpdGlvbiAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCctWyR7aW5uZXJQb3NpdGlvbi5saW5lfSwnCiAgICAgICAgICAnJHtpbm5lclBvc2l0aW9uLmNvbHVtbn1dJyk7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgc2hvcnRUZXh0IHsKICAgIGlmIChzdGFydFBvc2l0aW9uICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9jb21wdXRlVGV4dChzdGFydFBvc2l0aW9uLnNvdXJjZVVyaS5wYXRoU2VnbWVudHMubGFzdCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX2NvbXB1dGVUZXh0KGlubmVyUG9zaXRpb24uc291cmNlVXJpLnBhdGhTZWdtZW50cy5sYXN0KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChzdGFydFBvc2l0aW9uICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9jb21wdXRlVGV4dCgnJHtzdGFydFBvc2l0aW9uLnNvdXJjZVVyaX0nKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfY29tcHV0ZVRleHQoJyR7aW5uZXJQb3NpdGlvbi5zb3VyY2VVcml9Jyk7CiAgICB9CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb25TdHJhdGVneQogICAgaW1wbGVtZW50cyBKYXZhU2NyaXB0U291cmNlSW5mb3JtYXRpb25TdHJhdGVneSB7CiAgY29uc3QgQWJzdHJhY3RQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3koKTsKCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IgY3JlYXRlUHJvY2Vzc29yKAogICAgICBTb3VyY2VNYXBwZXJQcm92aWRlciBwcm92aWRlciwgU291cmNlSW5mb3JtYXRpb25SZWFkZXIgcmVhZGVyKSB7CiAgICByZXR1cm4gbmV3IFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IocHJvdmlkZXIsIHJlYWRlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9uQ29tcGxldGUoKSB7fQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFNvdXJjZU1hcHBlZE1hcmtlcigpIHsKICAgIHJldHVybiBjb25zdCBTb3VyY2VNYXBwZWRNYXJrZXIoKTsKICB9Cn0KCi8vLyBNYXJrZXIgdXNlZCB0byB0YWcgdGhlIHJvb3Qgbm9kZXMgb2Ygc291cmNlLW1hcHBlZCBjb2RlLgovLy8KLy8vIFRoaXMgaXMgbmVlZGVkIHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggSmF2YVNjcmlwdCBub2RlcyB0aGF0IHNob3VsZG4ndAovLy8gaGF2ZSBzb3VyY2UgbG9jYXRpb25zIChsaWtlIHRoZSBwcmVtYWJsZSkgZnJvbSB0aGUgbm9kZXMgdGhhdCBzaG91bGQKLy8vIChsaWtlIGZ1bmN0aW9ucyBjb21waWxlZCBmcm9tIERhcnQgY29kZSkuCmNsYXNzIFNvdXJjZU1hcHBlZE1hcmtlciBleHRlbmRzIFNvdXJjZUluZm9ybWF0aW9uIHsKICBjb25zdCBTb3VyY2VNYXBwZWRNYXJrZXIoKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBzaG9ydFRleHQgPT4gJyc7CgogIEBvdmVycmlkZQogIExpc3Q8U291cmNlTG9jYXRpb24+IGdldCBzb3VyY2VMb2NhdGlvbnMgPT4gY29uc3QgPFNvdXJjZUxvY2F0aW9uPltdOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VTcGFuIGdldCBzb3VyY2VTcGFuID0+IG5ldyBTb3VyY2VTcGFuKG51bGwsIG51bGwsIG51bGwpOwp9CgovLy8gVGhlIHN0YXJ0LCBlbmQgYW5kIGNsb3Npbmcgb2Zmc2V0cyBmb3IgYSBbanMuTm9kZV0uCmNsYXNzIENvZGVQb3NpdGlvbiB7CiAgZmluYWwgaW50IHN0YXJ0UG9zaXRpb247CiAgZmluYWwgaW50IGVuZFBvc2l0aW9uOwogIGZpbmFsIGludCBjbG9zaW5nUG9zaXRpb247CgogIENvZGVQb3NpdGlvbih0aGlzLnN0YXJ0UG9zaXRpb24sIHRoaXMuZW5kUG9zaXRpb24sIHRoaXMuY2xvc2luZ1Bvc2l0aW9uKTsKCiAgLy8gaWdub3JlOiBNSVNTSU5HX1JFVFVSTgogIGludCBnZXRQb3NpdGlvbihDb2RlUG9zaXRpb25LaW5kIGtpbmQpIHsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIENvZGVQb3NpdGlvbktpbmQuU1RBUlQ6CiAgICAgICAgcmV0dXJuIHN0YXJ0UG9zaXRpb247CiAgICAgIGNhc2UgQ29kZVBvc2l0aW9uS2luZC5FTkQ6CiAgICAgICAgcmV0dXJuIGVuZFBvc2l0aW9uOwogICAgICBjYXNlIENvZGVQb3NpdGlvbktpbmQuQ0xPU0lORzoKICAgICAgICByZXR1cm4gY2xvc2luZ1Bvc2l0aW9uOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdDb2RlUG9zaXRpb24oc3RhcnQ9JHN0YXJ0UG9zaXRpb24sJwogICAgICAgICdlbmQ9JGVuZFBvc2l0aW9uLGNsb3Npbmc9JGNsb3NpbmdQb3NpdGlvbiknOwogIH0KfQoKLy8vIEEgbWFwIGZyb20gYSBbanMuTm9kZV0gdG8gaXRzIFtDb2RlUG9zaXRpb25dLgphYnN0cmFjdCBjbGFzcyBDb2RlUG9zaXRpb25NYXAgewogIENvZGVQb3NpdGlvbiBvcGVyYXRvciBbXShqcy5Ob2RlIG5vZGUpOwp9CgovLy8gUmVnaXN0cnkgZm9yIG1hcHBpbmcgW2pzLk5vZGVdcyB0byB0aGVpciBbQ29kZVBvc2l0aW9uXS4KY2xhc3MgQ29kZVBvc2l0aW9uUmVjb3JkZXIgaW1wbGVtZW50cyBDb2RlUG9zaXRpb25NYXAgewogIE1hcDxqcy5Ob2RlLCBDb2RlUG9zaXRpb24+IF9jb2RlUG9zaXRpb25NYXAgPQogICAgICBuZXcgTWFwPGpzLk5vZGUsIENvZGVQb3NpdGlvbj4uaWRlbnRpdHkoKTsKCiAgdm9pZCByZWdpc3RlclBvc2l0aW9ucygKICAgICAganMuTm9kZSBub2RlLCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBpbnQgY2xvc2luZ1Bvc2l0aW9uKSB7CiAgICByZWdpc3RlckNvZGVQb3NpdGlvbigKICAgICAgICBub2RlLCBuZXcgQ29kZVBvc2l0aW9uKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLCBjbG9zaW5nUG9zaXRpb24pKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJDb2RlUG9zaXRpb24oanMuTm9kZSBub2RlLCBDb2RlUG9zaXRpb24gY29kZVBvc2l0aW9uKSB7CiAgICBfY29kZVBvc2l0aW9uTWFwW25vZGVdID0gY29kZVBvc2l0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29kZVBvc2l0aW9uIG9wZXJhdG9yIFtdKGpzLk5vZGUgbm9kZSkgPT4gX2NvZGVQb3NpdGlvbk1hcFtub2RlXTsKfQoKLy8vIEVudW0gdmFsdWVzIGZvciB0aGUgcGFydCBvZiBhIERhcnQgbm9kZSB1c2VkIGZvciB0aGUgc291cmNlIGxvY2F0aW9uIG9mZnNldC4KZW51bSBTb3VyY2VQb3NpdGlvbktpbmQgewogIC8vLyBUaGUgc291cmNlIG1hcHBpbmcgc2hvdWxkIHBvaW50IHRvIHRoZSBzdGFydCBvZiB0aGUgRGFydCBub2RlLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgdGhlIGZpcnN0ICcoJyBmb3IgdGhlIGAoKikoKWAgY2FsbCBhbmQgJ2YnIG9mIGJvdGggdGhlCiAgLy8vIGBmb28oKWAgYW5kIHRoZSBgKi5iYXIoKWAgY2FsbDoKICAvLy8KICAvLy8gICAgIChmb28oKS5iYXIoKSkoKQogIC8vLyAgICAgXiAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0YXJ0IG9mIHRoZSBgKCopKClgIG5vZGUKICAvLy8gICAgICBeICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBzdGFydCBvZiB0aGUgYGZvbygpYCBub2RlCiAgLy8vICAgICAgXiAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc3RhcnQgb2YgdGhlIGAqLmJhcigpYCBub2RlCiAgLy8vCiAgU1RBUlQsCgogIC8vLyBUaGUgc291cmNlIG1hcHBpbmcgc2hvdWxkIHBvaW50IGFuIGlubmVyIHBvc2l0aW9uIG9mIHRoZSBEYXJ0IG5vZGUuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSB0aGUgc2Vjb25kICcoJyBvZiB0aGUgYCgqKSgpYCBjYWxsLCB0aGUgJ2YnIG9mIHRoZSBgZm9vKClgCiAgLy8vIGNhbGwgYW5kIHRoZSAnYicgb2YgdGhlIGAqLmJhcigpYCBjYWxsOgogIC8vLwogIC8vLyAgICAgKGZvbygpLmJhcigpKSgpCiAgLy8vICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAvLyB0aGUgaW5uZXIgcG9zaXRpb24gb2YgdGhlIGAoKikoKWAgbm9kZQogIC8vLyAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGlubmVyIHBvc2l0aW9uIG9mIHRoZSBgZm9vKClgIG5vZGUKICAvLy8gICAgICAgICAgICBeICAgICAgICAgICAgICAgIC8vIHRoZSBpbm5lciBwb3NpdGlvbiBvZiB0aGUgYCouYmFyKClgIG5vZGUKICAvLy8KICAvLy8gRm9yIGZ1bmN0aW9uIGV4cHJlc3Npb25zIHRoZSBpbm5lciBwb3NpdGlvbiBpcyB0aGUgY2xvc2luZyBicmFjZSBvciB0aGUKICAvLy8gYXJyb3c6CiAgLy8vCiAgLy8vICAgICBmb28oKSA9PiAoKSB7fQogIC8vLyAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgLy8gdGhlIGlubmVyIHBvc2l0aW9uIG9mIHRoZSAnZm9vJyBmdW5jdGlvbgogIC8vLyAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgLy8gdGhlIGlubmVyIHBvc2l0aW9uIG9mIHRoZSBjbG9zdXJlCiAgLy8vCiAgSU5ORVIsCn0KCi8vIGlnbm9yZTogTUlTU0lOR19SRVRVUk4KU291cmNlTG9jYXRpb24gZ2V0U291cmNlTG9jYXRpb24oU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICBbU291cmNlUG9zaXRpb25LaW5kIHNvdXJjZVBvc2l0aW9uS2luZCA9IFNvdXJjZVBvc2l0aW9uS2luZC5TVEFSVF0pIHsKICBpZiAoc291cmNlSW5mb3JtYXRpb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgc3dpdGNoIChzb3VyY2VQb3NpdGlvbktpbmQpIHsKICAgIGNhc2UgU291cmNlUG9zaXRpb25LaW5kLlNUQVJUOgogICAgICByZXR1cm4gc291cmNlSW5mb3JtYXRpb24uc3RhcnRQb3NpdGlvbjsKICAgIGNhc2UgU291cmNlUG9zaXRpb25LaW5kLklOTkVSOgogICAgICByZXR1cm4gc291cmNlSW5mb3JtYXRpb24uaW5uZXJQb3NpdGlvbiA/PyBzb3VyY2VJbmZvcm1hdGlvbi5zdGFydFBvc2l0aW9uOwogIH0KfQoKLy8vIEVudW0gdmFsdWVzIGZvciB0aGUgcGFydCBvZiB0aGUgSmF2YVNjcmlwdCBub2RlIHVzZWQgZm9yIHRoZSBKYXZhU2NyaXB0Ci8vLyBjb2RlIG9mZnNldCBvZiBhIHNvdXJjZSBtYXBwaW5nLgplbnVtIENvZGVQb3NpdGlvbktpbmQgewogIC8vLyBUaGUgc291cmNlIG1hcHBpbmcgaXMgcHV0IG9uIGxlZnQtbW9zdCBvZmZzZXQgb2YgdGhlIG5vZGUuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBvbiB0aGUgJ2YnIG9mIGEgZnVuY3Rpb24gb3IgJ3InIG9mIGEgcmV0dXJuIHN0YXRlbWVudDoKICAvLy8KICAvLy8gICAgIGZvbzogZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9CiAgLy8vICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZnVuY3Rpb24gc3RhcnQgcG9zaXRpb24KICAvLy8gICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgIC8vIHRoZSByZXR1cm4gc3RhcnQgcG9zaXRpb24KICBTVEFSVCwKCiAgLy8vIFRoZSBzb3VyY2UgbWFwcGluZyBpcyBwdXQgb24gdGhlIGNsb3NpbmcgdG9rZW4uCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBvbiB0aGUgJ30nIG9mIGEgZnVuY3Rpb24gb3IgdGhlICc7JyBvZiBhIHJldHVybiBzdGF0ZW1lbnQ6CiAgLy8vCiAgLy8vICAgICBmb286IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfQogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgLy8gdGhlIGZ1bmN0aW9uIGNsb3NpbmcgcG9zaXRpb24KICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgIC8vIHRoZSByZXR1cm4gY2xvc2luZyBwb3NpdGlvbgogIC8vLwogIENMT1NJTkcsCgogIC8vLyBUaGUgc291cmNlIG1hcHBpbmcgaXMgcHV0IGF0IHRoZSBlbmQgb2YgdGhlIGNvZGUgZm9yIHRoZSBub2RlLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYWZ0ZXIgJ30nIG9mIGEgZnVuY3Rpb24gb3IgYWZ0ZXIgdGhlICc7JyBvZiBhIHJldHVybgogIC8vLyBzdGF0ZW1lbnQ6CiAgLy8vCiAgLy8vICAgICBmb286IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfQogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgIC8vIHRoZSBmdW5jdGlvbiBlbmQgcG9zaXRpb24KICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAvLyB0aGUgcmV0dXJuIGVuZCBwb3NpdGlvbgogIC8vLwogIEVORCwKfQoKLy8vIFByb2Nlc3NvciB0aGF0IGFzc29jaWF0ZXMgW1NvdXJjZUxvY2F0aW9uXXMgZnJvbSBbU291cmNlSW5mb3JtYXRpb25dIG9uCi8vLyBbanMuTm9kZV1zIHdpdGggdGhlIHRhcmdldCBvZmZzZXRzIGluIGEgW1NvdXJjZU1hcHBlcl0uCmNsYXNzIFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IgZXh0ZW5kcyBTb3VyY2VJbmZvcm1hdGlvblByb2Nlc3NvciB7CiAgLy8vIFRoZSBpZCBmb3IgdGhpcyBzb3VyY2UgaW5mb3JtYXRpb24gZW5naW5lLgogIC8vLwogIC8vLyBUaGUgaWQgaXMgYWRkZWQgdG8gdGhlIHNvdXJjZSBtYXAgZmlsZSBpbiBhbiBleHRyYSAiZW5naW5lIiBwcm9wZXJ0eSBhbmQKICAvLy8gc2VydmVzIGFzIGEgdmVyc2lvbiBudW1iZXIgZm9yIHRoZSBlbmdpbmUuCiAgLy8vCiAgLy8vIFRoZSB2ZXJzaW9uIGhpc3Rvcnkgb2YgdGhpcyBlbmdpbmUgaXM6CiAgLy8vCiAgLy8vICAgdjI6IFRoZSBpbml0aWFsIHZlcnNpb24gd2l0aCBhbiBpZC4KICBzdGF0aWMgY29uc3QgU3RyaW5nIGlkID0gJ3YyJzsKCiAgZmluYWwgQ29kZVBvc2l0aW9uUmVjb3JkZXIgY29kZVBvc2l0aW9uUmVjb3JkZXIgPSBuZXcgQ29kZVBvc2l0aW9uUmVjb3JkZXIoKTsKICBmaW5hbCBTb3VyY2VJbmZvcm1hdGlvblJlYWRlciByZWFkZXI7CiAgQ29kZVBvc2l0aW9uTWFwIGNvZGVQb3NpdGlvbk1hcDsKICBMaXN0PFRyYWNlTGlzdGVuZXI+IHRyYWNlTGlzdGVuZXJzOwogIElubGluaW5nVHJhY2VMaXN0ZW5lciBpbmxpbmluZ0xpc3RlbmVyOwoKICBQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uUHJvY2Vzc29yKFNvdXJjZU1hcHBlclByb3ZpZGVyIHByb3ZpZGVyLCB0aGlzLnJlYWRlciwKICAgICAgW0NvdmVyYWdlIGNvdmVyYWdlXSkgewogICAgY29kZVBvc2l0aW9uTWFwID0gY292ZXJhZ2UgIT0gbnVsbAogICAgICAgID8gbmV3IENvZGVQb3NpdGlvbkNvdmVyYWdlKGNvZGVQb3NpdGlvblJlY29yZGVyLCBjb3ZlcmFnZSkKICAgICAgICA6IGNvZGVQb3NpdGlvblJlY29yZGVyOwogICAgdmFyIHNvdXJjZU1hcHBlciA9IHByb3ZpZGVyLmNyZWF0ZVNvdXJjZU1hcHBlcihpZCk7CiAgICB0cmFjZUxpc3RlbmVycyA9IFsKICAgICAgbmV3IFBvc2l0aW9uVHJhY2VMaXN0ZW5lcihzb3VyY2VNYXBwZXIsIHJlYWRlciksCiAgICAgIGlubGluaW5nTGlzdGVuZXIgPSBuZXcgSW5saW5pbmdUcmFjZUxpc3RlbmVyKHNvdXJjZU1hcHBlciwgcmVhZGVyKSwKICAgIF07CiAgICBpZiAoY292ZXJhZ2UgIT0gbnVsbCkgewogICAgICB0cmFjZUxpc3RlbmVycy5hZGQobmV3IENvdmVyYWdlTGlzdGVuZXIoY292ZXJhZ2UsIHJlYWRlcikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBwcm9jZXNzKGpzLk5vZGUgbm9kZSwgQnVmZmVyZWRDb2RlT3V0cHV0IGNvZGUpIHsKICAgIG5ldyBKYXZhU2NyaXB0VHJhY2VyKGNvZGVQb3NpdGlvbk1hcCwgcmVhZGVyLCB0cmFjZUxpc3RlbmVycykuYXBwbHkobm9kZSk7CiAgICBpbmxpbmluZ0xpc3RlbmVyPy5maW5pc2goKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgb25Qb3NpdGlvbnMoCiAgICAgIGpzLk5vZGUgbm9kZSwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbiwgaW50IGNsb3NpbmdQb3NpdGlvbikgewogICAgY29kZVBvc2l0aW9uUmVjb3JkZXIucmVnaXN0ZXJQb3NpdGlvbnMoCiAgICAgICAgbm9kZSwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24sIGNsb3NpbmdQb3NpdGlvbik7CiAgfQp9CgovLy8gVmlzaXRvciB0aGF0IGNvbXB1dGVzIFtTb3VyY2VJbmZvcm1hdGlvbl0gZm9yIGEgW2pzLk5vZGVdIHVzaW5nIGluZm9ybWF0aW9uCi8vLyBhdHRhY2hlZCB0byB0aGUgbm9kZSBpdHNlbGYgb3IgYWx0ZXJuYXRpdmVseSBmcm9tIGNoaWxkIG5vZGVzLgpjbGFzcyBOb2RlU291cmNlSW5mb3JtYXRpb24gZXh0ZW5kcyBqcy5CYXNlVmlzaXRvcjxTb3VyY2VJbmZvcm1hdGlvbj4gewogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uUmVhZGVyIHJlYWRlcjsKCiAgY29uc3QgTm9kZVNvdXJjZUluZm9ybWF0aW9uKHRoaXMucmVhZGVyKTsKCiAgU291cmNlSW5mb3JtYXRpb24gdmlzaXQoanMuTm9kZSBub2RlKSA9PiBub2RlPy5hY2NlcHQodGhpcyk7CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIHZpc2l0Tm9kZShqcy5Ob2RlIG5vZGUpID0+CiAgICAgIHJlYWRlci5nZXRTb3VyY2VJbmZvcm1hdGlvbihub2RlKTsKCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KGpzLkV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSkgewogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPSByZWFkZXIuZ2V0U291cmNlSW5mb3JtYXRpb24obm9kZSk7CiAgICBpZiAoc291cmNlSW5mb3JtYXRpb24gIT0gbnVsbCkgewogICAgICByZXR1cm4gc291cmNlSW5mb3JtYXRpb247CiAgICB9CiAgICByZXR1cm4gdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoCiAgICAgIGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IG5vZGUpIHsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0gcmVhZGVyLmdldFNvdXJjZUluZm9ybWF0aW9uKG5vZGUpOwogICAgaWYgKHNvdXJjZUluZm9ybWF0aW9uICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHNvdXJjZUluZm9ybWF0aW9uOwogICAgfQogICAgZm9yIChqcy5Ob2RlIGRlY2xhcmF0aW9uIGluIG5vZGUuZGVjbGFyYXRpb25zKSB7CiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0gdmlzaXQoZGVjbGFyYXRpb24pOwogICAgICBpZiAoc291cmNlSW5mb3JtYXRpb24gIT0gbnVsbCkgewogICAgICAgIHJldHVybiBzb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiB2aXNpdFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oCiAgICAgIGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24gbm9kZSkgewogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPSByZWFkZXIuZ2V0U291cmNlSW5mb3JtYXRpb24obm9kZSk7CiAgICBpZiAoc291cmNlSW5mb3JtYXRpb24gIT0gbnVsbCkgewogICAgICByZXR1cm4gc291cmNlSW5mb3JtYXRpb247CiAgICB9CiAgICByZXR1cm4gdmlzaXQobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiB2aXNpdEFzc2lnbm1lbnQoanMuQXNzaWdubWVudCBub2RlKSB7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9IHJlYWRlci5nZXRTb3VyY2VJbmZvcm1hdGlvbihub2RlKTsKICAgIGlmIChzb3VyY2VJbmZvcm1hdGlvbiAhPSBudWxsKSB7CiAgICAgIHJldHVybiBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIH0KICAgIHJldHVybiB2aXNpdChub2RlLnZhbHVlKTsKICB9Cn0KCi8vLyBNaXhpbiB0aGF0IGFkZCBzdXBwb3J0IGZvciBjb21wdXRpbmcgW1NvdXJjZUluZm9ybWF0aW9uXSBmb3IgYSBbanMuTm9kZV0uCmFic3RyYWN0IGNsYXNzIE5vZGVUb1NvdXJjZUluZm9ybWF0aW9uTWl4aW4gewogIFNvdXJjZUluZm9ybWF0aW9uUmVhZGVyIGdldCByZWFkZXI7CgogIFNvdXJjZUluZm9ybWF0aW9uIGNvbXB1dGVTb3VyY2VJbmZvcm1hdGlvbihqcy5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBuZXcgTm9kZVNvdXJjZUluZm9ybWF0aW9uKHJlYWRlcikudmlzaXQobm9kZSk7CiAgfQp9CgovLy8gW1RyYWNlTGlzdGVuZXJdIHRoYXQgcmVnaXN0ZXIgaW5saW5pbmcgY29udGV4dC1kYXRhIHdpdGggYSBbU291cmNlTWFwcGVyXS4KY2xhc3MgSW5saW5pbmdUcmFjZUxpc3RlbmVyIGV4dGVuZHMgVHJhY2VMaXN0ZW5lcgogICAgd2l0aCBOb2RlVG9Tb3VyY2VJbmZvcm1hdGlvbk1peGluIHsKICBmaW5hbCBTb3VyY2VNYXBwZXIgc291cmNlTWFwcGVyOwogIEBvdmVycmlkZQogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uUmVhZGVyIHJlYWRlcjsKICBmaW5hbCBNYXA8aW50LCBMaXN0PEZyYW1lQ29udGV4dD4+IF9mcmFtZXMgPSB7fTsKCiAgSW5saW5pbmdUcmFjZUxpc3RlbmVyKHRoaXMuc291cmNlTWFwcGVyLCB0aGlzLnJlYWRlcik7CgogIEBvdmVycmlkZQogIHZvaWQgb25TdGVwKGpzLk5vZGUgbm9kZSwgT2Zmc2V0IG9mZnNldCwgU3RlcEtpbmQga2luZCkgewogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPSBjb21wdXRlU291cmNlSW5mb3JtYXRpb24obm9kZSk7CiAgICBpZiAoc291cmNlSW5mb3JtYXRpb24gPT0gbnVsbCkgcmV0dXJuOwogICAgLy8gVE9ETyhzaWdtdW5kKTogZW5hYmxlIHRoaXMgYXNzZXJ0aW9uLgogICAgLy8gYXNzZXJ0KG9mZnNldC52YWx1ZSAhPSBudWxsLCAiRXhwZWN0ZWQgYSB2YWxpZCBvZmZzZXQ6ICRub2RlICRvZmZzZXQiKTsKICAgIGlmIChvZmZzZXQudmFsdWUgPT0gbnVsbCkgcmV0dXJuOwoKICAgIC8vIFRPRE8oc2lnbXVuZCk6IGVuYWJsZSB0aGlzIGFzc2VydGlvbgogICAgLy9hc3NlcnQoX2ZyYW1lc1tvZmZzZXQudmFsdWVdID09IG51bGwsCiAgICAvLyAgICAgIkV4cGVjdCBhIHNpbmdsZSBlbnRyeSBwZXIgb2Zmc2V0OiAkb2Zmc2V0ICRub2RlIik7CiAgICBpZiAoX2ZyYW1lc1tvZmZzZXQudmFsdWVdICE9IG51bGwpIHJldHVybjsKCiAgICAvLyBEdXJpbmcgdHJhY2luZyB3ZSBvbmx5IGNvbGxlY3QgaW5mb3JtYXRpb24gcGVyIG9mZnNldCBiZWNhdXNlIHRoZSB0cmFjZXIKICAgIC8vIHZpc2l0cyBub2RlcyBpbiB0cmVlIG9yZGVyLiBXZSdsbCBsYXRlciBzb3J0IHRoZSBkYXRhIGJ5IG9mZnNldCBiZWZvcmUKICAgIC8vIHJlZ2lzdGVyaW5nIHRoZSBmcmFtZSBkYXRhIHdpdGggW1NvdXJjZU1hcHBlcl0uCiAgICBpZiAoa2luZCA9PSBTdGVwS2luZC5GVU5fRVhJVCkgewogICAgICBfZnJhbWVzW29mZnNldC52YWx1ZV0gPSBudWxsOwogICAgfSBlbHNlIHsKICAgICAgX2ZyYW1lc1tvZmZzZXQudmFsdWVdID0gc291cmNlSW5mb3JtYXRpb24uaW5saW5pbmdDb250ZXh0OwogICAgfQogIH0KCiAgLy8vIENvbnZlcnRzIHRoZSBpbmxpbmluZyBjb250ZXh0IGRhdGEgY29sbGVjdGVkIGR1cmluZyB0cmFjaW5nIGludG8gcHVzaC9wb3AKICAvLy8gc3RhY2sgb3BlcmF0aW9ucyB0aGF0IHdpbGwgYmUgZW1pdHRlZCB3aXRoIHRoZSBzb3VyY2UtbWFwIGZpbGVzLgogIHZvaWQgZmluaXNoKCkgewogICAgTGlzdDxGcmFtZUNvbnRleHQ+IGxhc3RJbmxpbmluZ0NvbnRleHQ7CiAgICBmb3IgKHZhciBvZmZzZXQgaW4gX2ZyYW1lcy5rZXlzLnRvTGlzdCgpLi5zb3J0KCkpIHsKICAgICAgdmFyIG5ld0lubGluaW5nQ29udGV4dCA9IF9mcmFtZXNbb2Zmc2V0XTsKCiAgICAgIC8vIE5vdGU6IHRoaXMgcmVsaWVzIG9uIHRoZSBpbnZhcmlhbnQgdGhhdCwgd2hlbiB3ZSBidWlsdCB0aGUgaW5saW5pbmcKICAgICAgLy8gY29udGV4dCBsaXN0cyBkdXJpbmcgU1NBLCB3ZSBrZXB0IGxpc3RzIGlkZW50aWNhbCB3aGVuZXZlciB0aGVyZSB3ZXJlCiAgICAgIC8vIG5vIGlubGluaW5nIGNoYW5nZXMuCiAgICAgIGlmIChsYXN0SW5saW5pbmdDb250ZXh0ID09IG5ld0lubGluaW5nQ29udGV4dCkgY29udGludWU7CgogICAgICBib29sIGlzRW1wdHkgPSBmYWxzZTsKICAgICAgaW50IHBvcENvdW50ID0gMDsKICAgICAgTGlzdDxGcmFtZUNvbnRleHQ+IHB1c2hlcyA9IGNvbnN0IFtdOwogICAgICBpZiAobmV3SW5saW5pbmdDb250ZXh0ID09IG51bGwpIHsKICAgICAgICBwb3BDb3VudCA9IGxhc3RJbmxpbmluZ0NvbnRleHQubGVuZ3RoOwogICAgICAgIGlzRW1wdHkgPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKGxhc3RJbmxpbmluZ0NvbnRleHQgPT0gbnVsbCkgewogICAgICAgIHB1c2hlcyA9IG5ld0lubGluaW5nQ29udGV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbnQgbWluID0gbmV3SW5saW5pbmdDb250ZXh0Lmxlbmd0aDsKICAgICAgICBpZiAobWluID4gbGFzdElubGluaW5nQ29udGV4dC5sZW5ndGgpIG1pbiA9IGxhc3RJbmxpbmluZ0NvbnRleHQubGVuZ3RoOwogICAgICAgIC8vIERldGVybWluZSB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbW1vbiBmcmFtZXMsIHRvIHByb2R1Y2UgdGhlIG1pbmltYWwKICAgICAgICAvLyBzZXQgb2YgcG9wIGFuZCBwdXNoIG9wZXJhdGlvbnMuCiAgICAgICAgaW50IGkgPSAwOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBtaW47IGkrKykgewogICAgICAgICAgaWYgKCFpZGVudGljYWwobmV3SW5saW5pbmdDb250ZXh0W2ldLCBsYXN0SW5saW5pbmdDb250ZXh0W2ldKSkgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlzRW1wdHkgPSBpID09IDA7CiAgICAgICAgcG9wQ291bnQgPSBsYXN0SW5saW5pbmdDb250ZXh0Lmxlbmd0aCAtIGk7CiAgICAgICAgaWYgKGkgPCBuZXdJbmxpbmluZ0NvbnRleHQubGVuZ3RoKSB7CiAgICAgICAgICBwdXNoZXMgPSBuZXdJbmxpbmluZ0NvbnRleHQuc3VibGlzdChpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGFzdElubGluaW5nQ29udGV4dCA9IG5ld0lubGluaW5nQ29udGV4dDsKCiAgICAgIHdoaWxlIChwb3BDb3VudC0tID4gMCkgewogICAgICAgIHNvdXJjZU1hcHBlci5yZWdpc3RlclBvcChvZmZzZXQsIGlzRW1wdHk6IHBvcENvdW50ID09IDAgJiYgaXNFbXB0eSk7CiAgICAgIH0KICAgICAgZm9yIChGcmFtZUNvbnRleHQgcHVzaCBpbiBwdXNoZXMpIHsKICAgICAgICBzb3VyY2VNYXBwZXIucmVnaXN0ZXJQdXNoKG9mZnNldCwKICAgICAgICAgICAgZ2V0U291cmNlTG9jYXRpb24ocHVzaC5jYWxsSW5mb3JtYXRpb24pLCBwdXNoLmlubGluZWRNZXRob2ROYW1lKTsKICAgICAgfQogICAgfQogIH0KfQoKLy8vIFtUcmFjZUxpc3RlbmVyXSB0aGF0IHJlZ2lzdGVyIFtTb3VyY2VMb2NhdGlvbl1zIHdpdGggYSBbU291cmNlTWFwcGVyXS4KY2xhc3MgUG9zaXRpb25UcmFjZUxpc3RlbmVyIGV4dGVuZHMgVHJhY2VMaXN0ZW5lcgogICAgd2l0aCBOb2RlVG9Tb3VyY2VJbmZvcm1hdGlvbk1peGluIHsKICBmaW5hbCBTb3VyY2VNYXBwZXIgc291cmNlTWFwcGVyOwogIEBvdmVycmlkZQogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uUmVhZGVyIHJlYWRlcjsKCiAgUG9zaXRpb25UcmFjZUxpc3RlbmVyKHRoaXMuc291cmNlTWFwcGVyLCB0aGlzLnJlYWRlcik7CgogIC8vLyBSZWdpc3RlcnMgc291cmNlIGluZm9ybWF0aW9uIGZvciBbbm9kZV0gb24gdGhlIFtvZmZzZXRdIGluIHRoZSBKYXZhU2NyaXB0CiAgLy8vIGNvZGUgdXNpbmcgW2tpbmRdIHRvIGRldGVybWluZSB3aGF0IGluZm9ybWF0aW9uIHRvIHVzZS4KICAvLy8KICAvLy8gRm9yIG1vc3Qgbm9kZXMgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24gaXMgdXNlZC4KICAvLy8gRm9yIGluc3RhbmNlIGEgcmV0dXJuIGV4cHJlc3Npb24gcG9pbnRzIHRvIHRoZSB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlCiAgLy8vIHNvdXJjZSBpbmZvcm1hdGlvbiwgdHlwaWNhbGx5IHRoZSBzdGFydCBvZiB0aGUgcmV0dXJuIHN0YXRlbWVudCB0aGF0CiAgLy8vIGNyZWF0ZWQgdGhlIEphdmFTY3JpcHQgcmV0dXJuIG5vZGU6CiAgLy8vCiAgLy8vICAgICBKYXZhU2NyaXB0OiAgICAgICAgICAgICAgICAgICAgRGFydDoKICAvLy8KICAvLy8gICAgIEByZXR1cm4gImZvbyI7ICAgICAgICAgICAgICAgICByZXR1cm4gImZvbyI7CiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogIC8vLyAoQCBtYXJrcyB0aGUgY3VycmVudCBKYXZhU2NyaXB0IHBvc2l0aW9uIGFuZCBeIHBvaW50IHRvIHRoZSBtYXBwZWQgRGFydAogIC8vLyBjb2RlIHBvc2l0aW9uLikKICAvLy8KICAvLy8KICAvLy8gRm9yIFtTdGVwS2luZC5DQUxMXSB0aGUgYENhbGxQb3NpdGlvbi5nZXRTZW1hbnRpY1Bvc2l0aW9uRm9yQ2FsbGAgbWV0aG9kCiAgLy8vIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgc3RhcnQgb3IgdGhlIGlubmVyIHBvc2l0aW9uIHNob3VsZCBiZQogIC8vLyB1c2VkLiBGb3IgaW5zdGFuY2UgaWYgdGhlIHJlY2VpdmVyIG9mIHRoZSBKYXZhU2NyaXB0IGNhbGwgaXMgYSAic2ltcGxlIgogIC8vLyBleHByZXNzaW9uIHRoZW4gdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24gaXMgdXNlZDoKICAvLy8KICAvLy8gICAgIEphdmFTY3JpcHQ6ICAgICAgICAgICAgICAgICAgICBEYXJ0OgogIC8vLwogIC8vLyAgICAgdDEuQGZvbyQwKCkgICAgICAgICAgICAgICAgICAgIGxvY2FsLmZvbygpCiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogIC8vLwogIC8vLyBJZiB0aGUgcmVjZWl2ZXIgb2YgdGhlIEphdmFTY3JpcHQgY2FsbCBpcyAiY29tcGxleCIgdGhlbiB0aGUgaW5uZXIKICAvLy8gcG9zaXRpb24gb2YgdGhlIHNvdXJjZSBpbmZvcm1hdGlvbiBpcyB1c2VkOgogIC8vLwogIC8vLyAgICAgSmF2YVNjcmlwdDogICAgICAgICAgICAgICAgICAgIERhcnQ6CiAgLy8vCiAgLy8vICAgICBnZXQkYmFyKCkuQGZvbygpICAgICAgICAgICAgICAgYmFyLmZvbygpCiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAvLy8KICAvLy8gRm9yIFtTdGVwS2luZC5GVU5fRVhJVF0gdGhlIGlubmVyIHBvc2l0aW9uIG9mIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24KICAvLy8gaXMgdXNlZC4gRm9yIGEgSmF2YVNjcmlwdCBmdW5jdGlvbiB3aXRob3V0IGEgcmV0dXJuIHN0YXRlbWVudCB0aGlzIG1hcHMKICAvLy8gdGhlIGVuZCBicmFjZSB0byB0aGUgZW5kIGJyYWNlIG9mIHRoZSBjb3JyZXNwb25kaW5nIERhcnQgZnVuY3Rpb24uIEZvciBhCiAgLy8vIEphdmFTY3JpcHQgZnVuY3Rpb24gZXhpdGVkIHRocm91Z2ggYSByZXR1cm4gc3RhdGVtZW50IHRoaXMgbWFwcyB0aGUgZW5kIG9mCiAgLy8vIHRoZSByZXR1cm4gc3RhdGVtZW50IHRvIHRoZSBlbmQgYnJhY2Ugb2YgdGhlIERhcnQgZnVuY3Rpb246CiAgLy8vCiAgLy8vICAgICBKYXZhU2NyaXB0OiAgICAgICAgICAgICAgICAgICAgRGFydDoKICAvLy8KICAvLy8gICAgIGZvbzogZnVuY3Rpb24oKSB7ICAgICAgICAgICAgICBmb28oKSB7CiAgLy8vICAgICBAfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAvLy8gICAgIGZvbzogZnVuY3Rpb24oKSB7ICAgICAgICAgICAgICBmb28oKSB7CiAgLy8vICAgICAgIHJldHVybiAwO0AgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAvLy8gICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogIEBvdmVycmlkZQogIHZvaWQgb25TdGVwKGpzLk5vZGUgbm9kZSwgT2Zmc2V0IG9mZnNldCwgU3RlcEtpbmQga2luZCkgewogICAgaW50IGNvZGVMb2NhdGlvbiA9IG9mZnNldC52YWx1ZTsKICAgIGlmIChjb2RlTG9jYXRpb24gPT0gbnVsbCkgcmV0dXJuOwoKICAgIGlmIChraW5kID09IFN0ZXBLaW5kLk5PX0lORk8pIHsKICAgICAgc291cmNlTWFwcGVyLnJlZ2lzdGVyKG5vZGUsIGNvZGVMb2NhdGlvbiwgY29uc3QgTm9Tb3VyY2VMb2NhdGlvbk1hcmtlcigpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0gY29tcHV0ZVNvdXJjZUluZm9ybWF0aW9uKG5vZGUpOwogICAgaWYgKHNvdXJjZUluZm9ybWF0aW9uID09IG51bGwpIHJldHVybjsKCiAgICB2b2lkIHJlZ2lzdGVyUG9zaXRpb24oU291cmNlUG9zaXRpb25LaW5kIHNvdXJjZVBvc2l0aW9uS2luZCkgewogICAgICBTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbiA9CiAgICAgICAgICBnZXRTb3VyY2VMb2NhdGlvbihzb3VyY2VJbmZvcm1hdGlvbiwgc291cmNlUG9zaXRpb25LaW5kKTsKICAgICAgaWYgKHNvdXJjZUxvY2F0aW9uICE9IG51bGwpIHsKICAgICAgICBzb3VyY2VNYXBwZXIucmVnaXN0ZXIobm9kZSwgY29kZUxvY2F0aW9uLCBzb3VyY2VMb2NhdGlvbik7CiAgICAgIH0KICAgIH0KCiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBTdGVwS2luZC5GVU5fRU5UUlk6CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiBmdWxseSB0cmFuc2l0aW9uZWQgdG8gdGhlCiAgICAgICAgLy8gbmV3IHNvdXJjZSBpbmZvIHN5c3RlbS4gVmVyaWZ5IHRoYXQgdG9vbHMgbm8gbG9uZ2VyIGV4cGVjdCBKUwogICAgICAgIC8vIGZ1bmN0aW9uIHNpZ25hdHVyZXMgdG8gbWFwIHRvIHRoZSBvcmlnaW4uIFRoZSBtYWluIG1ldGhvZCBtYXkgc3RpbGwKICAgICAgICAvLyBuZWVkIG1hcHBpbmcgdG8gZW5hYmxlIGJyZWFrcG9pbnRzIGJlZm9yZSBjYWxsaW5nIG1haW4uCiAgICAgICAgcmVnaXN0ZXJQb3NpdGlvbihTb3VyY2VQb3NpdGlvbktpbmQuU1RBUlQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFN0ZXBLaW5kLkZVTl9FWElUOgogICAgICAgIHJlZ2lzdGVyUG9zaXRpb24oU291cmNlUG9zaXRpb25LaW5kLklOTkVSKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGVwS2luZC5DQUxMOgogICAgICAgIENhbGxQb3NpdGlvbiBjYWxsUG9zaXRpb24gPQogICAgICAgICAgICBDYWxsUG9zaXRpb24uZ2V0U2VtYW50aWNQb3NpdGlvbkZvckNhbGwobm9kZSk7CiAgICAgICAgcmVnaXN0ZXJQb3NpdGlvbihjYWxsUG9zaXRpb24uc291cmNlUG9zaXRpb25LaW5kKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGVwS2luZC5BQ0NFU1M6CiAgICAgIGNhc2UgU3RlcEtpbmQuTkVXOgogICAgICBjYXNlIFN0ZXBLaW5kLlJFVFVSTjoKICAgICAgY2FzZSBTdGVwS2luZC5CUkVBSzoKICAgICAgY2FzZSBTdGVwS2luZC5DT05USU5VRToKICAgICAgY2FzZSBTdGVwS2luZC5USFJPVzoKICAgICAgY2FzZSBTdGVwS2luZC5FWFBSRVNTSU9OX1NUQVRFTUVOVDoKICAgICAgY2FzZSBTdGVwS2luZC5JRl9DT05ESVRJT046CiAgICAgIGNhc2UgU3RlcEtpbmQuRk9SX0lOSVRJQUxJWkVSOgogICAgICBjYXNlIFN0ZXBLaW5kLkZPUl9DT05ESVRJT046CiAgICAgIGNhc2UgU3RlcEtpbmQuRk9SX1VQREFURToKICAgICAgY2FzZSBTdGVwS2luZC5XSElMRV9DT05ESVRJT046CiAgICAgIGNhc2UgU3RlcEtpbmQuRE9fQ09ORElUSU9OOgogICAgICBjYXNlIFN0ZXBLaW5kLlNXSVRDSF9FWFBSRVNTSU9OOgogICAgICAgIHJlZ2lzdGVyUG9zaXRpb24oU291cmNlUG9zaXRpb25LaW5kLlNUQVJUKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTdGVwS2luZC5OT19JTkZPOgogICAgICAgIGJyZWFrOwogICAgfQogIH0KfQoKLy8vIFRoZSBwb3NpdGlvbiBvZiBhIFtqcy5DYWxsXSBub2RlLgpjbGFzcyBDYWxsUG9zaXRpb24gewogIC8vLyBUaGUgY2FsbCBub2RlIGZvciB3aGljaCB0aGUgcG9zaXRpb25zIGhhdmUgYmVlbiBjb21wdXRlZC4KICBmaW5hbCBqcy5Ob2RlIG5vZGU7CgogIC8vLyBUaGUgcG9zaXRpb24gZm9yIFtub2RlXSB1c2VkIGFzIHRoZSBvZmZzZXQgaW4gdGhlIEphdmFTY3JpcHQgY29kZS4KICAvLy8KICAvLy8gVGhpcyBpcyBlaXRoZXIgYENvZGVQb3NpdGlvbktpbmQuU1RBUlRgIGZvciBjb2RlIGxpa2UKICAvLy8KICAvLy8gICAgIHQxLmZvbyQwKCkKICAvLy8gICAgIF4KICAvLy8gd2hlcmUgdGhlIGxlZnQtbW9zdCBvZmZzZXQgb2YgdGhlIHJlY2VpdmVyIHNob3VsZCBiZSB1c2VkLCBvcgogIC8vLyBgQ29kZVBvc2l0aW9uS2luZC5DTE9TSU5HYCBmb3IgY29kZSBsaWtlCiAgLy8vCiAgLy8vICAgICBnZXQkYmFyKCkuZm9vJDAoKQogIC8vLyAgICAgICAgICAgICAgIF4KICAvLy8KICAvLy8gd2hlcmUgdGhlIG5hbWUgb2YgdGhlIGNhbGxlZCBtZXRob2Qgc2hvdWxkIGJlIHVzZWQgKGhlcmUgdGhlIG1ldGhvZAogIC8vLyAnZm9vJDAnKS4KICBmaW5hbCBDb2RlUG9zaXRpb25LaW5kIGNvZGVQb3NpdGlvbktpbmQ7CgogIC8vLyBUaGUgcG9zaXRpb24gZnJvbSB0aGUgW1NvdXJjZUluZm9ybWF0aW9uXSB1c2VkIGluIHRoZSBtYXBwZWQgRGFydCBjb2RlLgogIC8vLwogIC8vLyBUaGlzIGlzIGVpdGhlciBgU291cmNlUG9zaXRpb25LaW5kLlNUQVJUYCBmb3IgY29kZSBsaWtlCiAgLy8vCiAgLy8vICAgICBKYXZhU2NyaXB0OiAgICAgICAgICAgICAgICAgICAgRGFydDoKICAvLy8KICAvLy8gICAgIHQxLkBmb28kMCgpICAgICAgICAgICAgICAgICAgICBsb2NhbC5mb28oKQogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAvLy8KICAvLy8gd2hlcmUgdGhlIEphdmFTY3JpcHQgcmVjZWl2ZXIgaXMgYSAic2ltcGxlIiBleHByZXNzaW9uLCBvcgogIC8vLyBgU291cmNlUG9zaXRpb25LaW5kLkNMT1NJTkdgIGZvciBjb2RlIGxpa2UKICAvLy8KICAvLy8gICAgIEphdmFTY3JpcHQ6ICAgICAgICAgICAgICAgICAgICBEYXJ0OgogIC8vLwogIC8vLyAgICAgZ2V0JGJhcigpLkBmb28oKSAgICAgICAgICAgICAgIGJhci5mb28oKQogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgLy8vCiAgLy8vIHdoZXJlIHRoZSBKYXZhU2NyaXB0IHJlY2VpdmVyIGlzIGEgImNvbXBsZXgiIGV4cHJlc3Npb24uCiAgLy8vCiAgLy8vIChAIG1hcmtzIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgcG9zaXRpb24gYW5kIF4gcG9pbnQgdG8gdGhlIG1hcHBlZCBEYXJ0CiAgLy8vIGNvZGUgcG9zaXRpb24uKQogIGZpbmFsIFNvdXJjZVBvc2l0aW9uS2luZCBzb3VyY2VQb3NpdGlvbktpbmQ7CgogIENhbGxQb3NpdGlvbih0aGlzLm5vZGUsIHRoaXMuY29kZVBvc2l0aW9uS2luZCwgdGhpcy5zb3VyY2VQb3NpdGlvbktpbmQpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIFtDYWxsUG9zaXRpb25dIGZvciB0aGUgY2FsbCBbbm9kZV0uCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBpZiB0aGUgcmVjZWl2ZXIgb2YgdGhlIEphdmFTY3JpcHQgY2FsbCBpcyBhICJzaW1wbGUiCiAgLy8vIGV4cHJlc3Npb24gdGhlbiB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHNvdXJjZSBpbmZvcm1hdGlvbiBpcyB1c2VkOgogIC8vLwogIC8vLyAgICAgSmF2YVNjcmlwdDogICAgICAgICAgICAgICAgICAgIERhcnQ6CiAgLy8vCiAgLy8vICAgICB0MS5AZm9vJDAoKSAgICAgICAgICAgICAgICAgICAgbG9jYWwuZm9vKCkKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgLy8vCiAgLy8vIElmIHRoZSByZWNlaXZlciBvZiB0aGUgSmF2YVNjcmlwdCBjYWxsIGlzICJjb21wbGV4IiB0aGVuIHRoZSBpbm5lcgogIC8vLyBwb3NpdGlvbiBvZiB0aGUgc291cmNlIGluZm9ybWF0aW9uIGlzIHVzZWQ6CiAgLy8vCiAgLy8vICAgICBKYXZhU2NyaXB0OiAgICAgICAgICAgICAgICAgICAgRGFydDoKICAvLy8KICAvLy8gICAgIGdldCRiYXIoKS5AZm9vKCkgICAgICAgICAgICAgICBiYXIuZm9vKCkKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogIC8vLyAoQCBtYXJrcyB0aGUgY3VycmVudCBKYXZhU2NyaXB0IHBvc2l0aW9uIGFuZCBeIHBvaW50IHRvIHRoZSBtYXBwZWQgRGFydAogIC8vLyBjb2RlIHBvc2l0aW9uLikKICBzdGF0aWMgQ2FsbFBvc2l0aW9uIGdldFNlbWFudGljUG9zaXRpb25Gb3JDYWxsKGpzLkNhbGwgbm9kZSkgewogICAganMuRXhwcmVzc2lvbiBhY2Nlc3MgPSBqcy51bmRlZmVyKG5vZGUudGFyZ2V0KTsKICAgIGlmIChhY2Nlc3MgaXMganMuUHJvcGVydHlBY2Nlc3MpIHsKICAgICAganMuTm9kZSB0YXJnZXQgPSBhY2Nlc3M7CiAgICAgIGJvb2wgcHVyZUFjY2VzcyA9IGZhbHNlOwogICAgICB3aGlsZSAodGFyZ2V0IGlzIGpzLlByb3BlcnR5QWNjZXNzKSB7CiAgICAgICAganMuUHJvcGVydHlBY2Nlc3MgdGFyZ2V0QWNjZXNzID0gdGFyZ2V0OwogICAgICAgIGpzLk5vZGUgcmVjZWl2ZXIgPSBqcy51bmRlZmVyKHRhcmdldEFjY2Vzcy5yZWNlaXZlcik7CiAgICAgICAgaWYgKHJlY2VpdmVyIGlzIGpzLlZhcmlhYmxlVXNlIHx8IHJlY2VpdmVyIGlzIGpzLlRoaXMpIHsKICAgICAgICAgIHB1cmVBY2Nlc3MgPSB0cnVlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRhcmdldCA9IHJlY2VpdmVyOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAocHVyZUFjY2VzcykgewogICAgICAgIC8vIGEubSgpICAgdGhpcy5tKCkgIGEuYi5jLmQubSgpCiAgICAgICAgLy8gXiAgICAgICBeICAgICAgICAgXgogICAgICAgIHJldHVybiBuZXcgQ2FsbFBvc2l0aW9uKAogICAgICAgICAgICBub2RlLCBDb2RlUG9zaXRpb25LaW5kLlNUQVJULCBTb3VyY2VQb3NpdGlvbktpbmQuU1RBUlQpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vICoubSgpICAqLmEuYi5jLmQubSgpCiAgICAgICAgLy8gICBeICAgICAgICAgICAgICBeCiAgICAgICAgcmV0dXJuIG5ldyBDYWxsUG9zaXRpb24oCiAgICAgICAgICAgIGFjY2Vzcy5zZWxlY3RvciwgQ29kZVBvc2l0aW9uS2luZC5TVEFSVCwgU291cmNlUG9zaXRpb25LaW5kLklOTkVSKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChhY2Nlc3MgaXMganMuVmFyaWFibGVVc2UgfHwgYWNjZXNzIGlzIGpzLlRoaXMpIHsKICAgICAgLy8gbSgpICAgdGhpcygpCiAgICAgIC8vIF4gICAgIF4KICAgICAgcmV0dXJuIG5ldyBDYWxsUG9zaXRpb24oCiAgICAgICAgICBub2RlLCBDb2RlUG9zaXRpb25LaW5kLlNUQVJULCBTb3VyY2VQb3NpdGlvbktpbmQuU1RBUlQpOwogICAgfSBlbHNlIGlmIChhY2Nlc3MgaXMganMuRnVuIHx8CiAgICAgICAgYWNjZXNzIGlzIGpzLk5ldyB8fAogICAgICAgIGFjY2VzcyBpcyBqcy5OYW1lZEZ1bmN0aW9uKSB7CiAgICAgIC8vIGZ1bmN0aW9uKCl7fSgpICBuZXcgRnVuY3Rpb24oIi4uLiIpKCkgICBmdW5jdGlvbiBmb28oKXt9KCkKICAgICAgLy8gICAgICAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICBeCiAgICAgIHJldHVybiBuZXcgQ2FsbFBvc2l0aW9uKAogICAgICAgICAgbm9kZS50YXJnZXQsIENvZGVQb3NpdGlvbktpbmQuRU5ELCBTb3VyY2VQb3NpdGlvbktpbmQuSU5ORVIpOwogICAgfSBlbHNlIGlmIChhY2Nlc3MgaXMganMuQmluYXJ5IHx8IGFjY2VzcyBpcyBqcy5DYWxsKSB7CiAgICAgIC8vICgwLGEpKCkgICBtKCkoKQogICAgICAvLyAgICAgIF4gICAgICAgXgogICAgICByZXR1cm4gbmV3IENhbGxQb3NpdGlvbigKICAgICAgICAgIG5vZGUudGFyZ2V0LCBDb2RlUG9zaXRpb25LaW5kLkVORCwgU291cmNlUG9zaXRpb25LaW5kLklOTkVSKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1heWJlIHJlbW92ZSB0aGlzIGFzc2VydGlvbi4KICAgICAgYXNzZXJ0KAogICAgICAgICAgZmFsc2UsCiAgICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgcHJvcGVydHkgYWNjZXNzICR7bm9kZVRvU3RyaW5nKG5vZGUpfTpcbiIKICAgICAgICAgICAgICAiJHtEZWJ1Z1ByaW50ZXIucHJldHR5UHJpbnQobm9kZSl9IikpOwogICAgICAvLyBEb24ndCBrbm93Li4uLgogICAgICByZXR1cm4gbmV3IENhbGxQb3NpdGlvbigKICAgICAgICAgIG5vZGUsIENvZGVQb3NpdGlvbktpbmQuU1RBUlQsIFNvdXJjZVBvc2l0aW9uS2luZC5TVEFSVCk7CiAgICB9CiAgfQp9CgovLy8gQW4gb2Zmc2V0IG9mIGEgSmF2YVNjcmlwdCBub2RlIHdpdGhpbiB0aGUgb3V0cHV0IGNvZGUuCi8vLwovLy8gVGhpcyBvYmplY3QgaG9sZHMgdGhyZWUgZGlmZmVyZW50IHZhbHVlcyBmb3IgdGhlIG9mZnNldCBjb3JyZXNwb25kaW5nIHRvCi8vLyB0aHJlZSBkaWZmZXJlbnQgd2F5cyBicm93c2VycyBjYW4gY29tcHV0ZSB0aGUgb2Zmc2V0IG9mIGEgSmF2YVNjcmlwdCBub2RlLgovLy8KLy8vIEN1cnJlbnRseSBbc3ViZXhwcmVzc2lvbk9mZnNldF0gaXMgdXNlZCBzaW5jZSBpdCBjb3JyZXNwb25kcyB0aGUgbW9zdCB0byB0aGUKLy8vIG9mZnNldCB1c2VkIGJ5IG1vc3QgYnJvd3NlcnMuCmNsYXNzIE9mZnNldCB7CiAgLy8vIFRoZSBvZmZzZXQgb2YgdGhlIGVuY2xvc2luZyBzdGF0ZW1lbnQgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUKICAvLy8gZmlsZS4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlOgogIC8vLwogIC8vLyAgICAgZm9vKCkuYmFyKGJheigpKTsKICAvLy8gICAgIF4gICAgICAgICAgICAgICAgICAvLyB0aGUgc3RhdGVtZW50IG9mZnNldCBvZiB0aGUgYGZvbygpYCBjYWxsCiAgLy8vICAgICBeICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0YXRlbWVudCBvZmZzZXQgb2YgdGhlIGAqLmJhcigpYCBjYWxsCiAgLy8vICAgICBeICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0YXRlbWVudCBvZmZzZXQgb2YgdGhlIGBiYXooKWAgY2FsbAogIC8vLwogIGZpbmFsIGludCBzdGF0ZW1lbnRPZmZzZXQ7CgogIC8vLyBUaGUgYHN1YmV4cHJlc3Npb25gIG9mZnNldCBvZiB0aGUgc3RlcC4gVGhpcyBpcyB0aGUgKG1vc3RseSkgdW5pcXVlCiAgLy8vIG9mZnNldCByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlLCB0aGF0IGlkZW50aWZpZXMgdGhlCiAgLy8vIGN1cnJlbnQgb2YgZXhlY3V0aW9uLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2U6CiAgLy8vCiAgLy8vICAgICBmb28oKS5iYXIoYmF6KCkpOwogIC8vLyAgICAgXiAgICAgICAgICAgICAgICAgICAvLyB0aGUgc3ViZXhwcmVzc2lvbiBvZmZzZXQgb2YgdGhlIGBmb28oKWAgY2FsbAogIC8vLyAgICAgICAgICAgXiAgICAgICAgICAgICAvLyB0aGUgc3ViZXhwcmVzc2lvbiBvZmZzZXQgb2YgdGhlIGAqLmJhcigpYCBjYWxsCiAgLy8vICAgICAgICAgICAgICAgXiAgICAgICAgIC8vIHRoZSBzdWJleHByZXNzaW9uIG9mZnNldCBvZiB0aGUgYGJheigpYCBjYWxsCiAgLy8vCiAgLy8vIEhlcmUsIGV2ZW4gdGhvdWdoIHRoZSBKYXZhU2NyaXB0IG5vZGUgZm9yIHRoZSBgKi5iYXIoKWAgY2FsbCBjb250YWlucwogIC8vLyB0aGUgYGZvbygpYCBpdHMgZXhlY3V0aW9uIGlzIGlkZW50aWZpZWQgYnkgdGhlIGBiYXJgIGlkZW50aWZpZXIgbW9yZSB0aGFuCiAgLy8vIHRoZSBmb28gaWRlbnRpZmllci4KICAvLy8KICBmaW5hbCBpbnQgc3ViZXhwcmVzc2lvbk9mZnNldDsKCiAgLy8vIFRoZSBgbGVmdC10by1yaWdodGAgb2Zmc2V0IG9mIHRoZSBzdGVwLiBUaGlzIGlzIGxpa2UgW3N1YmV4cHJlc3Npb25PZmZzZXRdCiAgLy8vIGJ1dCByZXN0cmljdGVkIHNvIHRoYXQgdGhlIG9mZnNldCBvZiBlYWNoIHN1YmV4cHJlc3Npb24gaW4gZXhlY3V0aW9uCiAgLy8vIG9yZGVyIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZy4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlOgogIC8vLwogIC8vLyAgICAgZm9vKCkuYmFyKGJheigpKTsKICAvLy8gICAgIF4gICAgICAgICAgICAgICAgICAgLy8gdGhlIGxlZnQtdG8tcmlnaHQgb2Zmc2V0IG9mIHRoZSBgZm9vKClgIGNhbGwKICAvLy8gICAgICAgICAgIF4gICAgICAgICAgICAgLy8gdGhlIGxlZnQtdG8tcmlnaHQgb2Zmc2V0IG9mIHRoZSBgKi5iYXIoKWAgY2FsbAogIC8vLyAgICAgXiAgICAgICAgICAgICAgICAgICAvLyB0aGUgbGVmdC10by1yaWdodCBvZmZzZXQgb2YgdGhlIGBiYXooKWAgY2FsbAogIC8vLwogIC8vLyBIZXJlLCBgYmF6KClgIGlzIGV4ZWN1dGVkIGJlZm9yZSBgZm9vKClgIHNvIHdlIG5lZWQgdG8gdXNlICdmJyBhcyBpdHMgYmVzdAogIC8vLyBwb3NpdGlvbiB1bmRlciB0aGUgcmVzdHJpY3Rpb24uCiAgLy8vCiAgZmluYWwgaW50IGxlZnRUb1JpZ2h0T2Zmc2V0OwoKICBPZmZzZXQoCiAgICAgIHRoaXMuc3RhdGVtZW50T2Zmc2V0LCB0aGlzLmxlZnRUb1JpZ2h0T2Zmc2V0LCB0aGlzLnN1YmV4cHJlc3Npb25PZmZzZXQpOwoKICBpbnQgZ2V0IHZhbHVlID0+IHN1YmV4cHJlc3Npb25PZmZzZXQ7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnT2Zmc2V0W3N0YXRlbWVudE9mZnNldD0kc3RhdGVtZW50T2Zmc2V0LCcKICAgICAgICAnbGVmdFRvUmlnaHRPZmZzZXQ9JGxlZnRUb1JpZ2h0T2Zmc2V0LCcKICAgICAgICAnc3ViZXhwcmVzc2lvbk9mZnNldD0kc3ViZXhwcmVzc2lvbk9mZnNldF0nOwogIH0KfQoKZW51bSBCcmFuY2hLaW5kIHsKICBDT05ESVRJT04sCiAgTE9PUCwKICBDQVRDSCwKICBGSU5BTExZLAogIENBU0UsCn0KCmVudW0gU3RlcEtpbmQgewogIEZVTl9FTlRSWSwKICBGVU5fRVhJVCwKICBDQUxMLAogIE5FVywKICBBQ0NFU1MsCiAgUkVUVVJOLAogIEJSRUFLLAogIENPTlRJTlVFLAogIFRIUk9XLAogIEVYUFJFU1NJT05fU1RBVEVNRU5ULAogIElGX0NPTkRJVElPTiwKICBGT1JfSU5JVElBTElaRVIsCiAgRk9SX0NPTkRJVElPTiwKICBGT1JfVVBEQVRFLAogIFdISUxFX0NPTkRJVElPTiwKICBET19DT05ESVRJT04sCiAgU1dJVENIX0VYUFJFU1NJT04sCiAgTk9fSU5GTywKfQoKLy8vIExpc3RlbmVyIGZvciB0aGUgW0phdmFTY3JpcHRUcmFjZXJdLgphYnN0cmFjdCBjbGFzcyBUcmFjZUxpc3RlbmVyIHsKICAvLy8gQ2FsbGVkIGJlZm9yZSBbcm9vdF0gbm9kZSBpcyBwcm9jZXNlZCBieSB0aGUgW0phdmFTY3JpcHRUcmFjZXJdLgogIHZvaWQgb25TdGFydChqcy5Ob2RlIHJvb3QpIHt9CgogIC8vLyBDYWxsZWQgYWZ0ZXIgW3Jvb3RdIG5vZGUgaGFzIGJlZW4gcHJvY2VzZWQgYnkgdGhlIFtKYXZhU2NyaXB0VHJhY2VyXS4KICB2b2lkIG9uRW5kKGpzLk5vZGUgcm9vdCkge30KCiAgLy8vIENhbGxlZCB3aGVuIGEgYnJhbmNoIG9mIHRoZSBnaXZlbiBba2luZF0gaXMgc3RhcnRlZC4gW3ZhbHVlXSBpcyBwcm92aWRlZAogIC8vLyB0byBkaXN0aW5ndWlzaCB0cnVlL2ZhbHNlIGJyYW5jaGVzIG9mIFtCcmFuY2hLaW5kLkNPTkRJVElPTl0gYW5kIGNhc2VzIG9mCiAgLy8vIFtCcmFuY2guQ0FTRV0uCiAgdm9pZCBwdXNoQnJhbmNoKEJyYW5jaEtpbmQga2luZCwgW3ZhbHVlXSkge30KCiAgLy8vIENhbGxlZCB3aGVuIHRoZSBjdXJyZW50IGJyYW5jaCBlbmRzLgogIHZvaWQgcG9wQnJhbmNoKCkge30KCiAgLy8vIENhbGxlZCB3aGVuIFtub2RlXSBkZWZpbmVzIGEgc3RlcCBvZiB0aGUgZ2l2ZW4gW2tpbmRdIGF0IHRoZSBnaXZlbgogIC8vLyBbb2Zmc2V0XSB3aGVuIHRoZSBnZW5lcmF0ZWQgSmF2YVNjcmlwdCBjb2RlLgogIHZvaWQgb25TdGVwKGpzLk5vZGUgbm9kZSwgT2Zmc2V0IG9mZnNldCwgU3RlcEtpbmQga2luZCkge30KfQoKLy8vIFZpc2l0b3IgdGhhdCBjb21wdXRlcyB0aGUgW2pzLk5vZGVdcyB0aGUgYXJlIHBhcnQgb2YgdGhlIEphdmFTY3JpcHQKLy8vIHN0ZXBwYWJsZSBleGVjdXRpb24gYW5kIHRodXMgbmVlZHMgc291cmNlIG1hcHBpbmcgbG9jYXRpb25zLgpjbGFzcyBKYXZhU2NyaXB0VHJhY2VyIGV4dGVuZHMganMuQmFzZVZpc2l0b3IgewogIGZpbmFsIENvZGVQb3NpdGlvbk1hcCBjb2RlUG9zaXRpb25zOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uUmVhZGVyIHJlYWRlcjsKICBmaW5hbCBMaXN0PFRyYWNlTGlzdGVuZXI+IGxpc3RlbmVyczsKCiAgLy8vIFRoZSBzdGVwcyBhZGRlZCBieSBzdWJleHByZXNzaW9ucy4KICBMaXN0IHN0ZXBzID0gW107CgogIC8vLyBUaGUgb2Zmc2V0IG9mIHRoZSBjdXJyZW50IHN0YXRlbWVudC4KICBpbnQgc3RhdGVtZW50T2Zmc2V0OwoKICAvLy8gVGhlIGN1cnJlbnQgb2Zmc2V0IGluIGxlZnQtdG8tcmlnaHQgcHJvZ3Jlc3Npb24uCiAgaW50IGxlZnRUb1JpZ2h0T2Zmc2V0OwoKICAvLy8gVGhlIG9mZnNldCBvZiB0aGUgc3Vycm91bmRpbmcgc3RhdGVtZW50LCB1c2VkIGZvciB0aGUgZmlyc3Qgc3ViZXhwcmVzc2lvbi4KICBpbnQgb2Zmc2V0UG9zaXRpb247CgogIGJvb2wgYWN0aXZlOwoKICBKYXZhU2NyaXB0VHJhY2VyKHRoaXMuY29kZVBvc2l0aW9ucywgdGhpcy5yZWFkZXIsIHRoaXMubGlzdGVuZXJzLAogICAgICB7dGhpcy5hY3RpdmU6IGZhbHNlfSk7CgogIHZvaWQgbm90aWZ5U3RhcnQoanMuTm9kZSBub2RlKSB7CiAgICBsaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyLm9uU3RhcnQobm9kZSkpOwogIH0KCiAgdm9pZCBub3RpZnlFbmQoanMuTm9kZSBub2RlKSB7CiAgICBsaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyLm9uRW5kKG5vZGUpKTsKICB9CgogIHZvaWQgbm90aWZ5UHVzaEJyYW5jaChCcmFuY2hLaW5kIGtpbmQsIFt2YWx1ZV0pIHsKICAgIGlmIChhY3RpdmUpIHsKICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lci5wdXNoQnJhbmNoKGtpbmQsIHZhbHVlKSk7CiAgICB9CiAgfQoKICB2b2lkIG5vdGlmeVBvcEJyYW5jaCgpIHsKICAgIGlmIChhY3RpdmUpIHsKICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lci5wb3BCcmFuY2goKSk7CiAgICB9CiAgfQoKICB2b2lkIG5vdGlmeVN0ZXAoanMuTm9kZSBub2RlLCBPZmZzZXQgb2Zmc2V0LCBTdGVwS2luZCBraW5kLAogICAgICB7Ym9vbCBmb3JjZTogZmFsc2V9KSB7CiAgICBpZiAoYWN0aXZlIHx8IGZvcmNlKSB7CiAgICAgIGxpc3RlbmVycy5mb3JFYWNoKChsaXN0ZW5lcikgPT4gbGlzdGVuZXIub25TdGVwKG5vZGUsIG9mZnNldCwga2luZCkpOwogICAgfQogIH0KCiAgdm9pZCBhcHBseShqcy5Ob2RlIG5vZGUpIHsKICAgIG5vdGlmeVN0YXJ0KG5vZGUpOwoKICAgIGludCBzdGFydFBvc2l0aW9uID0gZ2V0U3ludGF4T2Zmc2V0KG5vZGUsIGtpbmQ6IENvZGVQb3NpdGlvbktpbmQuU1RBUlQpOwogICAgT2Zmc2V0IHN0YXJ0T2Zmc2V0ID0gZ2V0T2Zmc2V0Rm9yTm9kZShub2RlLCBzdGFydFBvc2l0aW9uKTsKICAgIG5vdGlmeVN0ZXAobm9kZSwgc3RhcnRPZmZzZXQsIFN0ZXBLaW5kLk5PX0lORk8sIGZvcmNlOiB0cnVlKTsKCiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICAgIG5vdGlmeUVuZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Tm9kZShqcy5Ob2RlIG5vZGUpIHsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9CgogIHZpc2l0KGpzLk5vZGUgbm9kZSwgW0JyYW5jaEtpbmQgYnJhbmNoLCB2YWx1ZV0pIHsKICAgIGlmIChub2RlICE9IG51bGwpIHsKICAgICAgaWYgKGJyYW5jaCAhPSBudWxsKSB7CiAgICAgICAgbm90aWZ5UHVzaEJyYW5jaChicmFuY2gsIHZhbHVlKTsKICAgICAgICBub2RlLmFjY2VwdCh0aGlzKTsKICAgICAgICBub3RpZnlQb3BCcmFuY2goKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBub2RlLmFjY2VwdCh0aGlzKTsKICAgICAgfQogICAgfQogIH0KCiAgdmlzaXRMaXN0KExpc3Q8anMuTm9kZT4gbm9kZUxpc3QpIHsKICAgIGlmIChub2RlTGlzdCAhPSBudWxsKSB7CiAgICAgIGZvciAoanMuTm9kZSBub2RlIGluIG5vZGVMaXN0KSB7CiAgICAgICAgdmlzaXQobm9kZSk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX2hhbmRsZUZ1bmN0aW9uKGpzLk5vZGUgbm9kZSwganMuTm9kZSBib2R5KSB7CiAgICBib29sIGFjdGl2ZUJlZm9yZSA9IGFjdGl2ZTsKICAgIGlmICghYWN0aXZlKSB7CiAgICAgIGFjdGl2ZSA9IHJlYWRlci5nZXRTb3VyY2VJbmZvcm1hdGlvbihub2RlKSAhPSBudWxsOwogICAgfQogICAgbGVmdFRvUmlnaHRPZmZzZXQgPQogICAgICAgIHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlLCBraW5kOiBDb2RlUG9zaXRpb25LaW5kLlNUQVJUKTsKICAgIE9mZnNldCBlbnRyeU9mZnNldCA9IGdldE9mZnNldEZvck5vZGUobm9kZSwgc3RhdGVtZW50T2Zmc2V0KTsKICAgIG5vdGlmeVN0ZXAobm9kZSwgZW50cnlPZmZzZXQsIFN0ZXBLaW5kLkZVTl9FTlRSWSk7CgogICAgdmlzaXQoYm9keSk7CgogICAgbGVmdFRvUmlnaHRPZmZzZXQgPQogICAgICAgIHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlLCBraW5kOiBDb2RlUG9zaXRpb25LaW5kLkNMT1NJTkcpOwogICAgT2Zmc2V0IGV4aXRPZmZzZXQgPSBnZXRPZmZzZXRGb3JOb2RlKG5vZGUsIHN0YXRlbWVudE9mZnNldCk7CiAgICBub3RpZnlTdGVwKG5vZGUsIGV4aXRPZmZzZXQsIFN0ZXBLaW5kLkZVTl9FWElUKTsKICAgIGlmIChhY3RpdmUgJiYgIWFjdGl2ZUJlZm9yZSkgewogICAgICBpbnQgZW5kUG9zaXRpb24gPSBnZXRTeW50YXhPZmZzZXQobm9kZSwga2luZDogQ29kZVBvc2l0aW9uS2luZC5FTkQpOwogICAgICBPZmZzZXQgZW5kT2Zmc2V0ID0gZ2V0T2Zmc2V0Rm9yTm9kZShub2RlLCBlbmRQb3NpdGlvbik7CiAgICAgIG5vdGlmeVN0ZXAobm9kZSwgZW5kT2Zmc2V0LCBTdGVwS2luZC5OT19JTkZPKTsKICAgIH0KICAgIGFjdGl2ZSA9IGFjdGl2ZUJlZm9yZTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RnVuKGpzLkZ1biBub2RlKSB7CiAgICBfaGFuZGxlRnVuY3Rpb24obm9kZSwgbm9kZS5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TmFtZWRGdW5jdGlvbihqcy5OYW1lZEZ1bmN0aW9uIG5vZGUpIHsKICAgIF9oYW5kbGVGdW5jdGlvbihub2RlLCBub2RlLmZ1bmN0aW9uLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRCbG9jayhqcy5CbG9jayBub2RlKSB7CiAgICBmb3IgKGpzLlN0YXRlbWVudCBzdGF0ZW1lbnQgaW4gbm9kZS5zdGF0ZW1lbnRzKSB7CiAgICAgIHZpc2l0KHN0YXRlbWVudCk7CiAgICB9CiAgfQoKICBpbnQgZ2V0U3ludGF4T2Zmc2V0KGpzLk5vZGUgbm9kZSwKICAgICAge0NvZGVQb3NpdGlvbktpbmQga2luZDogQ29kZVBvc2l0aW9uS2luZC5TVEFSVH0pIHsKICAgIENvZGVQb3NpdGlvbiBjb2RlUG9zaXRpb24gPSBjb2RlUG9zaXRpb25zW25vZGVdOwogICAgaWYgKGNvZGVQb3NpdGlvbiAhPSBudWxsKSB7CiAgICAgIHJldHVybiBjb2RlUG9zaXRpb24uZ2V0UG9zaXRpb24oa2luZCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZpc2l0U3ViZXhwcmVzc2lvbigKICAgICAganMuTm9kZSBwYXJlbnQsIGpzLkV4cHJlc3Npb24gY2hpbGQsIGludCBjb2RlT2Zmc2V0LCBTdGVwS2luZCBraW5kKSB7CiAgICB2YXIgb2xkU3RlcHMgPSBzdGVwczsKICAgIHN0ZXBzID0gW107CiAgICBvZmZzZXRQb3NpdGlvbiA9IGNvZGVPZmZzZXQ7CiAgICB2aXNpdChjaGlsZCk7CiAgICBpZiAoc3RlcHMuaXNFbXB0eSkgewogICAgICBub3RpZnlTdGVwKHBhcmVudCwgZ2V0T2Zmc2V0Rm9yTm9kZShwYXJlbnQsIG9mZnNldFBvc2l0aW9uKSwga2luZCk7CiAgICAgIC8vIFRoZSBbb2Zmc2V0UG9zaXRpb25dIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgdGhlIGZpcnN0IHN1YmV4cHJlc3Npb24uCiAgICAgIG9mZnNldFBvc2l0aW9uID0gbnVsbDsKICAgIH0KICAgIHN0ZXBzID0gb2xkU3RlcHM7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoanMuRXhwcmVzc2lvblN0YXRlbWVudCBub2RlKSB7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBnZXRTeW50YXhPZmZzZXQobm9kZSk7CiAgICB2aXNpdFN1YmV4cHJlc3Npb24oCiAgICAgICAgbm9kZSwgbm9kZS5leHByZXNzaW9uLCBzdGF0ZW1lbnRPZmZzZXQsIFN0ZXBLaW5kLkVYUFJFU1NJT05fU1RBVEVNRU5UKTsKICAgIHN0YXRlbWVudE9mZnNldCA9IG51bGw7CiAgICBsZWZ0VG9SaWdodE9mZnNldCA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEVtcHR5U3RhdGVtZW50KGpzLkVtcHR5U3RhdGVtZW50IG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZpc2l0Q2FsbChqcy5DYWxsIG5vZGUpIHsKICAgIHZpc2l0KG5vZGUudGFyZ2V0KTsKICAgIGludCBvbGRQb3NpdGlvbiA9IG9mZnNldFBvc2l0aW9uOwogICAgb2Zmc2V0UG9zaXRpb24gPSBudWxsOwogICAgdmlzaXRMaXN0KG5vZGUuYXJndW1lbnRzKTsKICAgIG9mZnNldFBvc2l0aW9uID0gb2xkUG9zaXRpb247CiAgICBDYWxsUG9zaXRpb24gY2FsbFBvc2l0aW9uID0gQ2FsbFBvc2l0aW9uLmdldFNlbWFudGljUG9zaXRpb25Gb3JDYWxsKG5vZGUpOwogICAganMuTm9kZSBwb3NpdGlvbk5vZGUgPSBjYWxsUG9zaXRpb24ubm9kZTsKICAgIGludCBjYWxsT2Zmc2V0ID0KICAgICAgICBnZXRTeW50YXhPZmZzZXQocG9zaXRpb25Ob2RlLCBraW5kOiBjYWxsUG9zaXRpb24uY29kZVBvc2l0aW9uS2luZCk7CiAgICBpZiAob2Zmc2V0UG9zaXRpb24gPT0gbnVsbCkgewogICAgICAvLyBVc2UgdGhlIGNhbGwgb2Zmc2V0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBzdWJleHByZXNzaW9uLgogICAgICBvZmZzZXRQb3NpdGlvbiA9IGNhbGxPZmZzZXQ7CiAgICB9CiAgICBPZmZzZXQgb2Zmc2V0ID0gZ2V0T2Zmc2V0Rm9yTm9kZShwb3NpdGlvbk5vZGUsIG9mZnNldFBvc2l0aW9uKTsKICAgIG5vdGlmeVN0ZXAobm9kZSwgb2Zmc2V0LCBTdGVwS2luZC5DQUxMKTsKICAgIHN0ZXBzLmFkZChub2RlKTsKICAgIG9mZnNldFBvc2l0aW9uID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TmV3KGpzLk5ldyBub2RlKSB7CiAgICB2aXNpdChub2RlLnRhcmdldCk7CiAgICBpbnQgb2xkUG9zaXRpb24gPSBvZmZzZXRQb3NpdGlvbjsKICAgIG9mZnNldFBvc2l0aW9uID0gbnVsbDsKICAgIHZpc2l0TGlzdChub2RlLmFyZ3VtZW50cyk7CiAgICBvZmZzZXRQb3NpdGlvbiA9IG9sZFBvc2l0aW9uOwogICAgaWYgKG9mZnNldFBvc2l0aW9uID09IG51bGwpIHsKICAgICAgLy8gVXNlIHRoZSBzeW50YXggb2Zmc2V0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBzdWJleHByZXNzaW9uLgogICAgICBvZmZzZXRQb3NpdGlvbiA9IGdldFN5bnRheE9mZnNldChub2RlKTsKICAgIH0KICAgIG5vdGlmeVN0ZXAobm9kZSwgZ2V0T2Zmc2V0Rm9yTm9kZShub2RlLCBvZmZzZXRQb3NpdGlvbiksIFN0ZXBLaW5kLk5FVyk7CiAgICBzdGVwcy5hZGQobm9kZSk7CiAgICBvZmZzZXRQb3NpdGlvbiA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEFjY2Vzcyhqcy5Qcm9wZXJ0eUFjY2VzcyBub2RlKSB7CiAgICB2aXNpdChub2RlLnJlY2VpdmVyKTsKICAgIG5vdGlmeVN0ZXAoCiAgICAgICAgbm9kZSwKICAgICAgICAvLyBUZWNobmljYWxseSB3ZSdkIGxpa2UgdG8gdXNlIHRoZSBvZmZzZXQgb2YgdGhlIGAuYCBpbiB0aGUgcHJvcGVydHkKICAgICAgICAvLyBhY2Nlc3MsIGJ1dCB0aGUganNfYXN0IGRvZXNuJ3QgZXhwb3NlIGl0LiBTaW5jZSB0aGlzIGlzIG9ubHkgdXNlZCB0bwogICAgICAgIC8vIHNlYXJjaCBiYWNrd2FyZHMgZm9yIGlubGluZWQgZnJhbWVzLCB3ZSB1c2UgdGhlIHJlY2VpdmVyJ3MgRU5EIG9mZnNldAogICAgICAgIC8vIGluc3RlYWQgYXMgYW4gYXBwcm94aW1hdGlvbi4gTm90ZSB0aGF0IHRoZSBFTkQgb2Zmc2V0IHBvaW50cyBvbmUKICAgICAgICAvLyBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGVuZCBvZiB0aGUgbm9kZSwgc28gaXQgaXMgbGlrZWx5IGFsd2F5cyB0aGUKICAgICAgICAvLyBvZmZzZXQgd2Ugd2FudC4KICAgICAgICBnZXRPZmZzZXRGb3JOb2RlKAogICAgICAgICAgICBub2RlLCBnZXRTeW50YXhPZmZzZXQobm9kZS5yZWNlaXZlciwga2luZDogQ29kZVBvc2l0aW9uS2luZC5FTkQpKSwKICAgICAgICBTdGVwS2luZC5BQ0NFU1MpOwogICAgc3RlcHMuYWRkKG5vZGUpOwogICAgdmlzaXQobm9kZS5zZWxlY3Rvcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFZhcmlhYmxlVXNlKGpzLlZhcmlhYmxlVXNlIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZpc2l0TGl0ZXJhbEJvb2woanMuTGl0ZXJhbEJvb2wgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdmlzaXRMaXRlcmFsU3RyaW5nKGpzLkxpdGVyYWxTdHJpbmcgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdmlzaXRMaXRlcmFsTnVtYmVyKGpzLkxpdGVyYWxOdW1iZXIgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdmlzaXRMaXRlcmFsTnVsbChqcy5MaXRlcmFsTnVsbCBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2aXNpdE5hbWUoanMuTmFtZSBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IG5vZGUpIHsKICAgIHZpc2l0TGlzdChub2RlLmRlY2xhcmF0aW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oanMuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7fQoKICBAb3ZlcnJpZGUKICB2aXNpdFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oanMuVmFyaWFibGVJbml0aWFsaXphdGlvbiBub2RlKSB7CiAgICB2aXNpdChub2RlLmxlZnRIYW5kU2lkZSk7CiAgICB2aXNpdChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QXNzaWdubWVudChqcy5Bc3NpZ25tZW50IG5vZGUpIHsKICAgIHZpc2l0KG5vZGUubGVmdEhhbmRTaWRlKTsKICAgIHZpc2l0KG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJZihqcy5JZiBub2RlKSB7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBnZXRTeW50YXhPZmZzZXQobm9kZSk7CiAgICB2aXNpdFN1YmV4cHJlc3Npb24oCiAgICAgICAgbm9kZSwgbm9kZS5jb25kaXRpb24sIHN0YXRlbWVudE9mZnNldCwgU3RlcEtpbmQuSUZfQ09ORElUSU9OKTsKICAgIHN0YXRlbWVudE9mZnNldCA9IG51bGw7CiAgICB2aXNpdChub2RlLnRoZW4sIEJyYW5jaEtpbmQuQ09ORElUSU9OLCB0cnVlKTsKICAgIHZpc2l0KG5vZGUub3RoZXJ3aXNlLCBCcmFuY2hLaW5kLkNPTkRJVElPTiwgZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGb3IoanMuRm9yIG5vZGUpIHsKICAgIGludCBvZmZzZXQgPSBzdGF0ZW1lbnRPZmZzZXQgPSBnZXRTeW50YXhPZmZzZXQobm9kZSk7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBvZmZzZXQ7CiAgICBsZWZ0VG9SaWdodE9mZnNldCA9IG51bGw7CiAgICBpZiAobm9kZS5pbml0ICE9IG51bGwpIHsKICAgICAgdmlzaXRTdWJleHByZXNzaW9uKAogICAgICAgICAgbm9kZSwgbm9kZS5pbml0LCBnZXRTeW50YXhPZmZzZXQobm9kZSksIFN0ZXBLaW5kLkZPUl9JTklUSUFMSVpFUik7CiAgICB9CgogICAgaWYgKG5vZGUuY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgdmlzaXRTdWJleHByZXNzaW9uKG5vZGUsIG5vZGUuY29uZGl0aW9uLCBnZXRTeW50YXhPZmZzZXQobm9kZS5jb25kaXRpb24pLAogICAgICAgICAgU3RlcEtpbmQuRk9SX0NPTkRJVElPTik7CiAgICB9CgogICAgbm90aWZ5UHVzaEJyYW5jaChCcmFuY2hLaW5kLkxPT1ApOwogICAgdmlzaXQobm9kZS5ib2R5KTsKCiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBvZmZzZXQ7CiAgICBpZiAobm9kZS51cGRhdGUgIT0gbnVsbCkgewogICAgICB2aXNpdFN1YmV4cHJlc3Npb24oCiAgICAgICAgICBub2RlLCBub2RlLnVwZGF0ZSwgZ2V0U3ludGF4T2Zmc2V0KG5vZGUudXBkYXRlKSwgU3RlcEtpbmQuRk9SX1VQREFURSk7CiAgICB9CgogICAgbm90aWZ5UG9wQnJhbmNoKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFdoaWxlKGpzLldoaWxlIG5vZGUpIHsKICAgIHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlKTsKICAgIGlmIChub2RlLmNvbmRpdGlvbiAhPSBudWxsKSB7CiAgICAgIHZpc2l0U3ViZXhwcmVzc2lvbihub2RlLCBub2RlLmNvbmRpdGlvbiwgZ2V0U3ludGF4T2Zmc2V0KG5vZGUpLAogICAgICAgICAgU3RlcEtpbmQuV0hJTEVfQ09ORElUSU9OKTsKICAgIH0KICAgIHN0YXRlbWVudE9mZnNldCA9IG51bGw7CiAgICBsZWZ0VG9SaWdodE9mZnNldCA9IG51bGw7CgogICAgdmlzaXQobm9kZS5ib2R5LCBCcmFuY2hLaW5kLkxPT1ApOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREbyhqcy5EbyBub2RlKSB7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBnZXRTeW50YXhPZmZzZXQobm9kZSk7CiAgICB2aXNpdChub2RlLmJvZHkpOwogICAgaWYgKG5vZGUuY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgdmlzaXRTdWJleHByZXNzaW9uKG5vZGUsIG5vZGUuY29uZGl0aW9uLCBnZXRTeW50YXhPZmZzZXQobm9kZS5jb25kaXRpb24pLAogICAgICAgICAgU3RlcEtpbmQuRE9fQ09ORElUSU9OKTsKICAgIH0KICAgIHN0YXRlbWVudE9mZnNldCA9IG51bGw7CiAgICBsZWZ0VG9SaWdodE9mZnNldCA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEJpbmFyeShqcy5CaW5hcnkgbm9kZSkgewogICAgdmlzaXQobm9kZS5sZWZ0KTsKICAgIHZpc2l0KG5vZGUucmlnaHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUaGlzKGpzLlRoaXMgbm9kZSkge30KCiAgQG92ZXJyaWRlCiAgdmlzaXRSZXR1cm4oanMuUmV0dXJuIG5vZGUpIHsKICAgIHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlKTsKICAgIHZpc2l0KG5vZGUudmFsdWUpOwogICAgbm90aWZ5U3RlcCgKICAgICAgICBub2RlLCBnZXRPZmZzZXRGb3JOb2RlKG5vZGUsIGdldFN5bnRheE9mZnNldChub2RlKSksIFN0ZXBLaW5kLlJFVFVSTik7CiAgICBPZmZzZXQgZXhpdE9mZnNldCA9IGdldE9mZnNldEZvck5vZGUoCiAgICAgICAgbm9kZSwgZ2V0U3ludGF4T2Zmc2V0KG5vZGUsIGtpbmQ6IENvZGVQb3NpdGlvbktpbmQuQ0xPU0lORykpOwogICAgbm90aWZ5U3RlcChub2RlLCBleGl0T2Zmc2V0LCBTdGVwS2luZC5GVU5fRVhJVCk7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBudWxsOwogICAgbGVmdFRvUmlnaHRPZmZzZXQgPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUaHJvdyhqcy5UaHJvdyBub2RlKSB7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBnZXRTeW50YXhPZmZzZXQobm9kZSk7CiAgICAvLyBEbyBub3QgdXNlIFtvZmZzZXRQb3NpdGlvbl0gZm9yIHRoZSBzdWJleHByZXNzaW9uLgogICAgb2Zmc2V0UG9zaXRpb24gPSBudWxsOwogICAgdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIG5vdGlmeVN0ZXAoCiAgICAgICAgbm9kZSwgZ2V0T2Zmc2V0Rm9yTm9kZShub2RlLCBnZXRTeW50YXhPZmZzZXQobm9kZSkpLCBTdGVwS2luZC5USFJPVyk7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBudWxsOwogICAgbGVmdFRvUmlnaHRPZmZzZXQgPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb250aW51ZShqcy5Db250aW51ZSBub2RlKSB7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBnZXRTeW50YXhPZmZzZXQobm9kZSk7CiAgICBub3RpZnlTdGVwKAogICAgICAgIG5vZGUsIGdldE9mZnNldEZvck5vZGUobm9kZSwgZ2V0U3ludGF4T2Zmc2V0KG5vZGUpKSwgU3RlcEtpbmQuQ09OVElOVUUpOwogICAgc3RhdGVtZW50T2Zmc2V0ID0gbnVsbDsKICAgIGxlZnRUb1JpZ2h0T2Zmc2V0ID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QnJlYWsoanMuQnJlYWsgbm9kZSkgewogICAgc3RhdGVtZW50T2Zmc2V0ID0gZ2V0U3ludGF4T2Zmc2V0KG5vZGUpOwogICAgbm90aWZ5U3RlcCgKICAgICAgICBub2RlLCBnZXRPZmZzZXRGb3JOb2RlKG5vZGUsIGdldFN5bnRheE9mZnNldChub2RlKSksIFN0ZXBLaW5kLkJSRUFLKTsKICAgIHN0YXRlbWVudE9mZnNldCA9IG51bGw7CiAgICBsZWZ0VG9SaWdodE9mZnNldCA9IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFRyeShqcy5Ucnkgbm9kZSkgewogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHZpc2l0KG5vZGUuY2F0Y2hQYXJ0LCBCcmFuY2hLaW5kLkNBVENIKTsKICAgIHZpc2l0KG5vZGUuZmluYWxseVBhcnQsIEJyYW5jaEtpbmQuRklOQUxMWSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENhdGNoKGpzLkNhdGNoIG5vZGUpIHsKICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENvbmRpdGlvbmFsKGpzLkNvbmRpdGlvbmFsIG5vZGUpIHsKICAgIHZpc2l0KG5vZGUuY29uZGl0aW9uKTsKICAgIHZpc2l0KG5vZGUudGhlbiwgQnJhbmNoS2luZC5DT05ESVRJT04sIHRydWUpOwogICAgdmlzaXQobm9kZS5vdGhlcndpc2UsIEJyYW5jaEtpbmQuQ09ORElUSU9OLCBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFByZWZpeChqcy5QcmVmaXggbm9kZSkgewogICAgdmlzaXQobm9kZS5hcmd1bWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFBvc3RmaXgoanMuUG9zdGZpeCBub2RlKSB7CiAgICB2aXNpdChub2RlLmFyZ3VtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0T2JqZWN0SW5pdGlhbGl6ZXIoanMuT2JqZWN0SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgdmlzaXRMaXN0KG5vZGUucHJvcGVydGllcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFByb3BlcnR5KGpzLlByb3BlcnR5IG5vZGUpIHsKICAgIHZpc2l0KG5vZGUubmFtZSk7CiAgICB2aXNpdChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0UmVnRXhwTGl0ZXJhbChqcy5SZWdFeHBMaXRlcmFsIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZpc2l0U3dpdGNoKGpzLlN3aXRjaCBub2RlKSB7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBnZXRTeW50YXhPZmZzZXQobm9kZSk7CiAgICB2aXNpdFN1YmV4cHJlc3Npb24oCiAgICAgICAgbm9kZSwgbm9kZS5rZXksIGdldFN5bnRheE9mZnNldChub2RlKSwgU3RlcEtpbmQuU1dJVENIX0VYUFJFU1NJT04pOwogICAgc3RhdGVtZW50T2Zmc2V0ID0gbnVsbDsKICAgIGxlZnRUb1JpZ2h0T2Zmc2V0ID0gbnVsbDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbm9kZS5jYXNlcy5sZW5ndGg7IGkrKykgewogICAgICB2aXNpdChub2RlLmNhc2VzW2ldLCBCcmFuY2hLaW5kLkNBU0UsIGkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDYXNlKGpzLkNhc2Ugbm9kZSkgewogICAgdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdERlZmF1bHQoanMuRGVmYXVsdCBub2RlKSB7CiAgICB2aXNpdChub2RlLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRBcnJheUluaXRpYWxpemVyKGpzLkFycmF5SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgdmlzaXRMaXN0KG5vZGUuZWxlbWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRBcnJheUhvbGUoanMuQXJyYXlIb2xlIG5vZGUpIHt9CgogIEBvdmVycmlkZQogIHZpc2l0TGFiZWxlZFN0YXRlbWVudChqcy5MYWJlbGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIHN0YXRlbWVudE9mZnNldCA9IGdldFN5bnRheE9mZnNldChub2RlKTsKICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgICBzdGF0ZW1lbnRPZmZzZXQgPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREZWZlcnJlZEV4cHJlc3Npb24oanMuRGVmZXJyZWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHZpc2l0KG5vZGUudmFsdWUpOwogIH0KCiAgT2Zmc2V0IGdldE9mZnNldEZvck5vZGUoanMuTm9kZSBub2RlLCBpbnQgY29kZU9mZnNldCkgewogICAgaWYgKGNvZGVPZmZzZXQgPT0gbnVsbCkgewogICAgICBDb2RlUG9zaXRpb24gY29kZVBvc2l0aW9uID0gY29kZVBvc2l0aW9uc1tub2RlXTsKICAgICAgaWYgKGNvZGVQb3NpdGlvbiAhPSBudWxsKSB7CiAgICAgICAgY29kZU9mZnNldCA9IGNvZGVQb3NpdGlvbi5zdGFydFBvc2l0aW9uOwogICAgICB9CiAgICB9CiAgICBpZiAobGVmdFRvUmlnaHRPZmZzZXQgIT0gbnVsbCAmJgogICAgICAgIGNvZGVPZmZzZXQgIT0gbnVsbCAmJgogICAgICAgIGxlZnRUb1JpZ2h0T2Zmc2V0IDwgY29kZU9mZnNldCkgewogICAgICBsZWZ0VG9SaWdodE9mZnNldCA9IGNvZGVPZmZzZXQ7CiAgICB9CiAgICBpZiAobGVmdFRvUmlnaHRPZmZzZXQgPT0gbnVsbCkgewogICAgICBsZWZ0VG9SaWdodE9mZnNldCA9IHN0YXRlbWVudE9mZnNldDsKICAgIH0KICAgIHJldHVybiBuZXcgT2Zmc2V0KHN0YXRlbWVudE9mZnNldCwgbGVmdFRvUmlnaHRPZmZzZXQsIGNvZGVPZmZzZXQpOwogIH0KfQoKY2xhc3MgQ292ZXJhZ2UgewogIFNldDxqcy5Ob2RlPiBfbm9kZXNXaXRoSW5mbyA9IG5ldyBTZXQ8anMuTm9kZT4oKTsKICBpbnQgX25vZGVzV2l0aEluZm9Db3VudCA9IDA7CiAgU2V0PGpzLk5vZGU+IF9ub2Rlc1dpdGhvdXRJbmZvID0gbmV3IFNldDxqcy5Ob2RlPigpOwogIGludCBfbm9kZXNXaXRob3V0SW5mb0NvdW50ID0gMDsKICBNYXA8VHlwZSwgaW50PiBfbm9kZXNXaXRob3V0SW5mb0NvdW50QnlUeXBlID0gPFR5cGUsIGludD57fTsKICBTZXQ8anMuTm9kZT4gX25vZGVzV2l0aG91dE9mZnNldCA9IG5ldyBTZXQ8anMuTm9kZT4oKTsKICBpbnQgX25vZGVzV2l0aG91dE9mZnNldENvdW50ID0gMDsKCiAgdm9pZCByZWdpc3Rlck5vZGVXaXRoSW5mbyhqcy5Ob2RlIG5vZGUpIHsKICAgIF9ub2Rlc1dpdGhJbmZvLmFkZChub2RlKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJOb2RlV2l0aG91dEluZm8oanMuTm9kZSBub2RlKSB7CiAgICBfbm9kZXNXaXRob3V0SW5mby5hZGQobm9kZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyTm9kZXNXaXRob3V0T2Zmc2V0KGpzLk5vZGUgbm9kZSkgewogICAgX25vZGVzV2l0aG91dE9mZnNldC5hZGQobm9kZSk7CiAgfQoKICB2b2lkIGNvbGxhcHNlKCkgewogICAgX25vZGVzV2l0aEluZm9Db3VudCArPSBfbm9kZXNXaXRoSW5mby5sZW5ndGg7CiAgICBfbm9kZXNXaXRoSW5mby5jbGVhcigpOwogICAgX25vZGVzV2l0aG91dE9mZnNldENvdW50ICs9IF9ub2Rlc1dpdGhvdXRPZmZzZXQubGVuZ3RoOwogICAgX25vZGVzV2l0aG91dE9mZnNldC5jbGVhcigpOwoKICAgIF9ub2Rlc1dpdGhvdXRJbmZvQ291bnQgKz0gX25vZGVzV2l0aG91dEluZm8ubGVuZ3RoOwogICAgZm9yIChqcy5Ob2RlIG5vZGUgaW4gX25vZGVzV2l0aG91dEluZm8pIHsKICAgICAgaWYgKG5vZGUgaXMganMuRXhwcmVzc2lvblN0YXRlbWVudCkgewogICAgICAgIF9ub2Rlc1dpdGhvdXRJbmZvQ291bnRCeVR5cGUucHV0SWZBYnNlbnQoCiAgICAgICAgICAgIG5vZGUuZXhwcmVzc2lvbi5ydW50aW1lVHlwZSwgKCkgPT4gMCk7CiAgICAgICAgX25vZGVzV2l0aG91dEluZm9Db3VudEJ5VHlwZVtub2RlLmV4cHJlc3Npb24ucnVudGltZVR5cGVdKys7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX25vZGVzV2l0aG91dEluZm9Db3VudEJ5VHlwZS5wdXRJZkFic2VudChub2RlLnJ1bnRpbWVUeXBlLCAoKSA9PiAwKTsKICAgICAgICBfbm9kZXNXaXRob3V0SW5mb0NvdW50QnlUeXBlW25vZGUucnVudGltZVR5cGVdKys7CiAgICAgIH0KICAgIH0KICAgIF9ub2Rlc1dpdGhvdXRJbmZvLmNsZWFyKCk7CiAgfQoKICBTdHJpbmcgZ2V0Q292ZXJhZ2VSZXBvcnQoKSB7CiAgICBjb2xsYXBzZSgpOwogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgaW50IHRvdGFsID0gX25vZGVzV2l0aEluZm9Db3VudCArIF9ub2Rlc1dpdGhvdXRJbmZvQ291bnQ7CiAgICBpZiAodG90YWwgPiAwKSB7CiAgICAgIHNiLndyaXRlKF9ub2Rlc1dpdGhJbmZvQ291bnQpOwogICAgICBzYi53cml0ZSgnLycpOwogICAgICBzYi53cml0ZSh0b3RhbCk7CiAgICAgIHNiLndyaXRlKCcgKCcpOwogICAgICBzYi53cml0ZSgoMTAwLjAgKiBfbm9kZXNXaXRoSW5mb0NvdW50IC8gdG90YWwpLnRvU3RyaW5nQXNGaXhlZCgyKSk7CiAgICAgIHNiLndyaXRlKCclKSBub2RlcyB3aXRoIGluZm8uJyk7CiAgICB9IGVsc2UgewogICAgICBzYi53cml0ZSgnTm8gbm9kZXMuJyk7CiAgICB9CiAgICBpZiAoX25vZGVzV2l0aG91dE9mZnNldENvdW50ID4gMCkgewogICAgICBzYi53cml0ZSgnICcpOwogICAgICBzYi53cml0ZShfbm9kZXNXaXRob3V0T2Zmc2V0Q291bnQpOwogICAgICBzYi53cml0ZSgnIG5vZGUnKTsKICAgICAgaWYgKF9ub2Rlc1dpdGhvdXRPZmZzZXRDb3VudCA+IDEpIHsKICAgICAgICBzYi53cml0ZSgncycpOwogICAgICB9CiAgICAgIHNiLndyaXRlKCcgd2l0aG91dCBvZmZzZXQuJyk7CiAgICB9CiAgICBpZiAoX25vZGVzV2l0aG91dEluZm9Db3VudCA+IDApIHsKICAgICAgc2Iud3JpdGUoJ1xuTm9kZXMgd2l0aG91dCBpbmZvICgnKTsKICAgICAgc2Iud3JpdGUoX25vZGVzV2l0aG91dEluZm9Db3VudCk7CiAgICAgIHNiLndyaXRlKCcpIGJ5IHJ1bnRpbWUgdHlwZTonKTsKICAgICAgTGlzdDxUeXBlPiB0eXBlcyA9IF9ub2Rlc1dpdGhvdXRJbmZvQ291bnRCeVR5cGUua2V5cy50b0xpc3QoKTsKICAgICAgdHlwZXMuc29ydCgoYSwgYikgewogICAgICAgIHJldHVybiAtX25vZGVzV2l0aG91dEluZm9Db3VudEJ5VHlwZVthXQogICAgICAgICAgICAuY29tcGFyZVRvKF9ub2Rlc1dpdGhvdXRJbmZvQ291bnRCeVR5cGVbYl0pOwogICAgICB9KTsKCiAgICAgIHR5cGVzLmZvckVhY2goKFR5cGUgdHlwZSkgewogICAgICAgIGludCBjb3VudCA9IF9ub2Rlc1dpdGhvdXRJbmZvQ291bnRCeVR5cGVbdHlwZV07CiAgICAgICAgc2Iud3JpdGUoJ1xuICcpOwogICAgICAgIHNiLndyaXRlKGNvdW50KTsKICAgICAgICBzYi53cml0ZSgnICcpOwogICAgICAgIHNiLndyaXRlKHR5cGUpOwogICAgICAgIHNiLndyaXRlKCcgbm9kZScpOwogICAgICAgIGlmIChjb3VudCA+IDEpIHsKICAgICAgICAgIHNiLndyaXRlKCdzJyk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgc2Iud3JpdGUoJ1xuJyk7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IGdldENvdmVyYWdlUmVwb3J0KCk7Cn0KCi8vLyBbVHJhY2VMaXN0ZW5lcl0gdGhhdCByZWdpc3RlcnMgW29uU3RlcF0gY2FsbGJhY2tzIHdpdGggW2NvdmVyYWdlXS4KY2xhc3MgQ292ZXJhZ2VMaXN0ZW5lciBleHRlbmRzIFRyYWNlTGlzdGVuZXIgd2l0aCBOb2RlVG9Tb3VyY2VJbmZvcm1hdGlvbk1peGluIHsKICBmaW5hbCBDb3ZlcmFnZSBjb3ZlcmFnZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBTb3VyY2VJbmZvcm1hdGlvblJlYWRlciByZWFkZXI7CgogIENvdmVyYWdlTGlzdGVuZXIodGhpcy5jb3ZlcmFnZSwgdGhpcy5yZWFkZXIpOwoKICBAb3ZlcnJpZGUKICB2b2lkIG9uU3RlcChqcy5Ob2RlIG5vZGUsIE9mZnNldCBvZmZzZXQsIFN0ZXBLaW5kIGtpbmQpIHsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0gY29tcHV0ZVNvdXJjZUluZm9ybWF0aW9uKG5vZGUpOwogICAgaWYgKHNvdXJjZUluZm9ybWF0aW9uICE9IG51bGwpIHsKICAgICAgY292ZXJhZ2UucmVnaXN0ZXJOb2RlV2l0aEluZm8obm9kZSk7CiAgICB9IGVsc2UgewogICAgICBjb3ZlcmFnZS5yZWdpc3Rlck5vZGVXaXRob3V0SW5mbyhub2RlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgb25FbmQoanMuTm9kZSBub2RlKSB7CiAgICBjb3ZlcmFnZS5jb2xsYXBzZSgpOwogIH0KfQoKLy8vIFtDb2RlUG9zaXRpb25NYXBdIHRoYXQgcmVnaXN0ZXJzIGNhbGxzIHdpdGggW0NvdmVyYWdlXS4KY2xhc3MgQ29kZVBvc2l0aW9uQ292ZXJhZ2UgaW1wbGVtZW50cyBDb2RlUG9zaXRpb25NYXAgewogIGZpbmFsIENvZGVQb3NpdGlv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GQQCATFwYWNrYWdlOmNvbXBpbGVyL3NyYy9pby9wb3NpdGlvbl9pbmZvcm1hdGlvbi5kYXJ0NHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX21vZGVsL2VsZW1lbnRzLmRhcnTAAGYmLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19tb2RlbC5lbGVtZW50czsKCmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgTmFtZXM7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvaW5kZXhlZC5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2xhc3Nfc2V0LmRhcnQnIHNob3cgQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcEtleTsKaW1wb3J0ICdjbG9zdXJlLmRhcnQnOwoKY29uc3QgU3RyaW5nIGpzRWxlbWVudFByZWZpeCA9ICdqOic7CgpjbGFzcyBKTGlicmFyeSBleHRlbmRzIEluZGV4ZWRMaWJyYXJ5IHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pMaWJyYXJ5XSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2xpYnJhcnknOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBVcmkgY2Fub25pY2FsVXJpOwoKICBKTGlicmFyeSh0aGlzLm5hbWUsIHRoaXMuY2Fub25pY2FsVXJpKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtKTGlicmFyeV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBKTGlicmFyeS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgVXJpIGNhbm9uaWNhbFVyaSA9IHNvdXJjZS5yZWFkVXJpKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpMaWJyYXJ5KG5hbWUsIGNhbm9uaWNhbFVyaSk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtKTGlicmFyeV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVTdHJpbmcobmFtZSk7CiAgICBzaW5rLndyaXRlVXJpKGNhbm9uaWNhbFVyaSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR7anNFbGVtZW50UHJlZml4fWxpYnJhcnkoJG5hbWUpJzsKfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW0pDbGFzc10gc3ViY2xhc3NlcyBpbiBzZXJpYWxpemF0aW9uLgplbnVtIEpDbGFzc0tpbmQgeyBub2RlLCBjbG9zdXJlLCByZWNvcmQgfQoKY2xhc3MgSkNsYXNzIGV4dGVuZHMgSW5kZXhlZENsYXNzIHdpdGggQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcEtleSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKQ2xhc3NdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2xhc3MnOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBKTGlicmFyeSBsaWJyYXJ5OwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzQWJzdHJhY3Q7CgogIEpDbGFzcyh0aGlzLmxpYnJhcnksIHRoaXMubmFtZSwge3RoaXMuaXNBYnN0cmFjdH0pOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0pDbGFzc10gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBKQ2xhc3MucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBKQ2xhc3NLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oSkNsYXNzS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgSkNsYXNzS2luZC5ub2RlOgogICAgICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgICAgIEpMaWJyYXJ5IGxpYnJhcnkgPSBzb3VyY2UucmVhZExpYnJhcnkoKTsKICAgICAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICAgICAgYm9vbCBpc0Fic3RyYWN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICAgICAgc291cmNlLmVuZCh0YWcpOwogICAgICAgIHJldHVybiBuZXcgSkNsYXNzKGxpYnJhcnksIG5hbWUsIGlzQWJzdHJhY3Q6IGlzQWJzdHJhY3QpOwogICAgICBjYXNlIEpDbGFzc0tpbmQuY2xvc3VyZToKICAgICAgICByZXR1cm4gbmV3IEpDbG9zdXJlQ2xhc3MucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSkNsYXNzS2luZC5yZWNvcmQ6CiAgICAgICAgcmV0dXJuIG5ldyBKUmVjb3JkLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgQ2xhc3NLaW5kICRraW5kIik7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtKQ2xhc3NdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKQ2xhc3NLaW5kLm5vZGUpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUxpYnJhcnkobGlicmFyeSk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgc2luay53cml0ZUJvb2woaXNBYnN0cmFjdCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNDbG9zdXJlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtqc0VsZW1lbnRQcmVmaXh9Y2xhc3MoJG5hbWUpJzsKfQoKY2xhc3MgSlR5cGVkZWYgZXh0ZW5kcyBJbmRleGVkVHlwZWRlZiB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKVHlwZWRlZl0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICd0eXBlZGVmJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgSkxpYnJhcnkgbGlicmFyeTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIEpUeXBlZGVmKHRoaXMubGlicmFyeSwgdGhpcy5uYW1lKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtKVHlwZWRlZl0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBKVHlwZWRlZi5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSkxpYnJhcnkgbGlicmFyeSA9IHNvdXJjZS5yZWFkTGlicmFyeSgpOwogICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKVHlwZWRlZihsaWJyYXJ5LCBuYW1lKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0pUeXBlZGVmXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUxpYnJhcnkobGlicmFyeSk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICcke2pzRWxlbWVudFByZWZpeH10eXBlZGVmKCRuYW1lKSc7Cn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIFtKTWVtYmVyXSBzdWJjbGFzc2VzIGluIHNlcmlhbGl6YXRpb24uCmVudW0gSk1lbWJlcktpbmQgewogIGdlbmVyYXRpdmVDb25zdHJ1Y3RvciwKICBmYWN0b3J5Q29uc3RydWN0b3IsCiAgY29uc3RydWN0b3JCb2R5LAogIGZpZWxkLAogIGdldHRlciwKICBzZXR0ZXIsCiAgbWV0aG9kLAogIGNsb3N1cmVGaWVsZCwKICBjbG9zdXJlQ2FsbE1ldGhvZCwKICBnZW5lcmF0b3JCb2R5LAogIHNpZ25hdHVyZU1ldGhvZCwKICByZWNvcmRGaWVsZCwKfQoKYWJzdHJhY3QgY2xhc3MgSk1lbWJlciBleHRlbmRzIEluZGV4ZWRNZW1iZXIgewogIEBvdmVycmlkZQogIGZpbmFsIEpMaWJyYXJ5IGxpYnJhcnk7CiAgQG92ZXJyaWRlCiAgZmluYWwgSkNsYXNzIGVuY2xvc2luZ0NsYXNzOwogIGZpbmFsIE5hbWUgX25hbWU7CiAgZmluYWwgYm9vbCBfaXNTdGF0aWM7CgogIEpNZW1iZXIodGhpcy5saWJyYXJ5LCB0aGlzLmVuY2xvc2luZ0NsYXNzLCB0aGlzLl9uYW1lLCB7Ym9vbCBpc1N0YXRpYzogZmFsc2V9KQogICAgICA6IF9pc1N0YXRpYyA9IGlzU3RhdGljOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0pNZW1iZXJdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgSk1lbWJlci5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIEpNZW1iZXJLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oSk1lbWJlcktpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIEpNZW1iZXJLaW5kLmdlbmVyYXRpdmVDb25zdHJ1Y3RvcjoKICAgICAgICByZXR1cm4gbmV3IEpHZW5lcmF0aXZlQ29uc3RydWN0b3IucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlcktpbmQuZmFjdG9yeUNvbnN0cnVjdG9yOgogICAgICAgIHJldHVybiBuZXcgSkZhY3RvcnlDb25zdHJ1Y3Rvci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgICAgcmV0dXJuIG5ldyBKQ29uc3RydWN0b3JCb2R5LnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIEpNZW1iZXJLaW5kLmZpZWxkOgogICAgICAgIHJldHVybiBuZXcgSkZpZWxkLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIEpNZW1iZXJLaW5kLmdldHRlcjoKICAgICAgICByZXR1cm4gbmV3IEpHZXR0ZXIucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlcktpbmQuc2V0dGVyOgogICAgICAgIHJldHVybiBuZXcgSlNldHRlci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyS2luZC5tZXRob2Q6CiAgICAgICAgcmV0dXJuIG5ldyBKTWV0aG9kLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIEpNZW1iZXJLaW5kLmNsb3N1cmVGaWVsZDoKICAgICAgICByZXR1cm4gbmV3IEpDbG9zdXJlRmllbGQucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlcktpbmQuY2xvc3VyZUNhbGxNZXRob2Q6CiAgICAgICAgcmV0dXJuIG5ldyBKQ2xvc3VyZUNhbGxNZXRob2QucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlcktpbmQuZ2VuZXJhdG9yQm9keToKICAgICAgICByZXR1cm4gbmV3IEpHZW5lcmF0b3JCb2R5LnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIEpNZW1iZXJLaW5kLnNpZ25hdHVyZU1ldGhvZDoKICAgICAgICByZXR1cm4gbmV3IEpTaWduYXR1cmVNZXRob2QucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlcktpbmQucmVjb3JkRmllbGQ6CiAgICAgICAgcmV0dXJuIG5ldyBKUmVjb3JkRmllbGQucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBKTWVtYmVyS2luZCAka2luZCIpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbSk1lbWJlcl0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gX25hbWUudGV4dDsKCiAgQG92ZXJyaWRlCiAgTmFtZSBnZXQgbWVtYmVyTmFtZSA9PiBfbmFtZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNBc3NpZ25hYmxlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NvbnN0ID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Fic3RyYWN0ID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1NldHRlciA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNHZXR0ZXIgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRnVuY3Rpb24gPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRmllbGQgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzQ29uc3RydWN0b3IgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzSW5zdGFuY2VNZW1iZXIgPT4gZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCAmJiAhX2lzU3RhdGljOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1N0YXRpYyA9PiBlbmNsb3NpbmdDbGFzcyAhPSBudWxsICYmIF9pc1N0YXRpYzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiBlbmNsb3NpbmdDbGFzcyA9PSBudWxsOwoKICBTdHJpbmcgZ2V0IF9raW5kOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJHtqc0VsZW1lbnRQcmVmaXh9JF9raW5kJwogICAgICAnKCR7ZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCA/ICcke2VuY2xvc2luZ0NsYXNzLm5hbWV9LicgOiAnJ30kbmFtZSknOwp9CgphYnN0cmFjdCBjbGFzcyBKRnVuY3Rpb24gZXh0ZW5kcyBKTWVtYmVyCiAgICBpbXBsZW1lbnRzIEZ1bmN0aW9uRW50aXR5LCBJbmRleGVkRnVuY3Rpb24gewogIEBvdmVycmlkZQogIGZpbmFsIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmU7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0V4dGVybmFsOwogIEBvdmVycmlkZQogIGZpbmFsIEFzeW5jTWFya2VyIGFzeW5jTWFya2VyOwoKICBKRnVuY3Rpb24oSkxpYnJhcnkgbGlicmFyeSwgSkNsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsCiAgICAgIHRoaXMucGFyYW1ldGVyU3RydWN0dXJlLCB0aGlzLmFzeW5jTWFya2VyLAogICAgICB7Ym9vbCBpc1N0YXRpYzogZmFsc2UsIHRoaXMuaXNFeHRlcm5hbDogZmFsc2V9KQogICAgICA6IHN1cGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBpc1N0YXRpYzogaXNTdGF0aWMpOwp9CgphYnN0cmFjdCBjbGFzcyBKQ29uc3RydWN0b3IgZXh0ZW5kcyBKRnVuY3Rpb24KICAgIGltcGxlbWVudHMgQ29uc3RydWN0b3JFbnRpdHksIEluZGV4ZWRDb25zdHJ1Y3RvciB7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0NvbnN0OwoKICBKQ29uc3RydWN0b3IoCiAgICAgIEpDbGFzcyBlbmNsb3NpbmdDbGFzcywgTmFtZSBuYW1lLCBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICB7Ym9vbCBpc0V4dGVybmFsLCB0aGlzLmlzQ29uc3R9KQogICAgICA6IHN1cGVyKGVuY2xvc2luZ0NsYXNzLmxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgICAgIEFzeW5jTWFya2VyLlNZTkMsCiAgICAgICAgICAgIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NvbnN0cnVjdG9yID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzSW5zdGFuY2VNZW1iZXIgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3RhdGljID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1RvcExldmVsID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9raW5kID0+ICdjb25zdHJ1Y3Rvcic7Cn0KCmNsYXNzIEpHZW5lcmF0aXZlQ29uc3RydWN0b3IgZXh0ZW5kcyBKQ29uc3RydWN0b3IgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSkdlbmVyYXRpdmVDb25zdHJ1Y3Rvcl0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdnZW5lcmF0aXZlLWNvbnN0cnVjdG9yJzsKCiAgSkdlbmVyYXRpdmVDb25zdHJ1Y3RvcigKICAgICAgSkNsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIHtib29sIGlzRXh0ZXJuYWwsIGJvb2wgaXNDb25zdH0pCiAgICAgIDogc3VwZXIoZW5jbG9zaW5nQ2xhc3MsIG5hbWUsIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICAgICAgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCwgaXNDb25zdDogaXNDb25zdCk7CgogIGZhY3RvcnkgSkdlbmVyYXRpdmVDb25zdHJ1Y3Rvci5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSkNsYXNzIGVuY2xvc2luZ0NsYXNzID0gc291cmNlLnJlYWRDbGFzcygpOwogICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSA9CiAgICAgICAgbmV3IFBhcmFtZXRlclN0cnVjdHVyZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIGJvb2wgaXNFeHRlcm5hbCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0NvbnN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpHZW5lcmF0aXZlQ29uc3RydWN0b3IoZW5jbG9zaW5nQ2xhc3MsCiAgICAgICAgbmV3IE5hbWUobmFtZSwgZW5jbG9zaW5nQ2xhc3MubGlicmFyeSksIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0NvbnN0OiBpc0NvbnN0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJLaW5kLmdlbmVyYXRpdmVDb25zdHJ1Y3Rvcik7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3MoZW5jbG9zaW5nQ2xhc3MpOwogICAgc2luay53cml0ZVN0cmluZyhuYW1lKTsKICAgIHBhcmFtZXRlclN0cnVjdHVyZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlQm9vbChpc0V4dGVybmFsKTsKICAgIHNpbmsud3JpdGVCb29sKGlzQ29uc3QpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRmFjdG9yeUNvbnN0cnVjdG9yID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0dlbmVyYXRpdmVDb25zdHJ1Y3RvciA9PiB0cnVlOwp9CgpjbGFzcyBKRmFjdG9yeUNvbnN0cnVjdG9yIGV4dGVuZHMgSkNvbnN0cnVjdG9yIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pGYWN0b3J5Q29uc3RydWN0b3JdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZmFjdG9yeS1jb25zdHJ1Y3Rvcic7CgogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvcjsKCiAgSkZhY3RvcnlDb25zdHJ1Y3RvcigKICAgICAgSkNsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIHtib29sIGlzRXh0ZXJuYWwsIGJvb2wgaXNDb25zdCwgdGhpcy5pc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yfSkKICAgICAgOiBzdXBlcihlbmNsb3NpbmdDbGFzcywgbmFtZSwgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgICAgICBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0NvbnN0OiBpc0NvbnN0KTsKCiAgZmFjdG9yeSBKRmFjdG9yeUNvbnN0cnVjdG9yLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBKQ2xhc3MgZW5jbG9zaW5nQ2xhc3MgPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0KICAgICAgICBuZXcgUGFyYW1ldGVyU3RydWN0dXJlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgYm9vbCBpc0V4dGVybmFsID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzQ29uc3QgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvciA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKRmFjdG9yeUNvbnN0cnVjdG9yKGVuY2xvc2luZ0NsYXNzLAogICAgICAgIG5ldyBOYW1lKG5hbWUsIGVuY2xvc2luZ0NsYXNzLmxpYnJhcnkpLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCwKICAgICAgICBpc0NvbnN0OiBpc0NvbnN0LAogICAgICAgIGlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3I6IGlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3IpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlcktpbmQuZmFjdG9yeUNvbnN0cnVjdG9yKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVDbGFzcyhlbmNsb3NpbmdDbGFzcyk7CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgcGFyYW1ldGVyU3RydWN0dXJlLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsud3JpdGVCb29sKGlzRXh0ZXJuYWwpOwogICAgc2luay53cml0ZUJvb2woaXNDb25zdCk7CiAgICBzaW5rLndyaXRlQm9vbChpc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ZhY3RvcnlDb25zdHJ1Y3RvciA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0dlbmVyYXRpdmVDb25zdHJ1Y3RvciA9PiBmYWxzZTsKfQoKY2xhc3MgSkNvbnN0cnVjdG9yQm9keSBleHRlbmRzIEpGdW5jdGlvbiBpbXBsZW1lbnRzIENvbnN0cnVjdG9yQm9keUVudGl0eSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKQ29uc3RydWN0b3JCb2R5XSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NvbnN0cnVjdG9yLWJvZHknOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBKQ29uc3RydWN0b3IgY29uc3RydWN0b3I7CgogIEpDb25zdHJ1Y3RvckJvZHkodGhpcy5jb25zdHJ1Y3RvciwgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSkKICAgICAgOiBzdXBlcihjb25zdHJ1Y3Rvci5saWJyYXJ5LCBjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzcywKICAgICAgICAgICAgY29uc3RydWN0b3IubWVtYmVyTmFtZSwgcGFyYW1ldGVyU3RydWN0dXJlLCBBc3luY01hcmtlci5TWU5DLAogICAgICAgICAgICBpc1N0YXRpYzogZmFsc2UsIGlzRXh0ZXJuYWw6IGZhbHNlKTsKCiAgZmFjdG9yeSBKQ29uc3RydWN0b3JCb2R5LnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBKQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBzb3VyY2UucmVhZE1lbWJlcigpOwogICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSA9CiAgICAgICAgbmV3IFBhcmFtZXRlclN0cnVjdHVyZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSkNvbnN0cnVjdG9yQm9keShjb25zdHJ1Y3RvciwgcGFyYW1ldGVyU3RydWN0dXJlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJLaW5kLmNvbnN0cnVjdG9yQm9keSk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyKGNvbnN0cnVjdG9yKTsKICAgIHBhcmFtZXRlclN0cnVjdHVyZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfa2luZCA9PiAnY29uc3RydWN0b3JfYm9keSc7Cn0KCmNsYXNzIEpNZXRob2QgZXh0ZW5kcyBKRnVuY3Rpb24gewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSk1ldGhvZF0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdtZXRob2QnOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzQWJzdHJhY3Q7CgogIEpNZXRob2QoSkxpYnJhcnkgbGlicmFyeSwgSkNsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsCiAgICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsIEFzeW5jTWFya2VyIGFzeW5jTWFya2VyLAogICAgICB7Ym9vbCBpc1N0YXRpYywgYm9vbCBpc0V4dGVybmFsLCB0aGlzLmlzQWJzdHJhY3R9KQogICAgICA6IHN1cGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsIGFzeW5jTWFya2VyLAogICAgICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwpOwoKICBmYWN0b3J5IEpNZXRob2QucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1lbWJlckNvbnRleHRLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oTWVtYmVyQ29udGV4dEtpbmQudmFsdWVzKTsKICAgIEpMaWJyYXJ5IGxpYnJhcnk7CiAgICBKQ2xhc3MgZW5jbG9zaW5nQ2xhc3M7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBNZW1iZXJDb250ZXh0S2luZC5saWJyYXJ5OgogICAgICAgIGxpYnJhcnkgPSBzb3VyY2UucmVhZExpYnJhcnkoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBNZW1iZXJDb250ZXh0S2luZC5jbHM6CiAgICAgICAgZW5jbG9zaW5nQ2xhc3MgPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICAgICAgbGlicmFyeSA9IGVuY2xvc2luZ0NsYXNzLmxpYnJhcnk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0KICAgICAgICBuZXcgUGFyYW1ldGVyU3RydWN0dXJlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIgPSBzb3VyY2UucmVhZEVudW0oQXN5bmNNYXJrZXIudmFsdWVzKTsKICAgIGJvb2wgaXNTdGF0aWMgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNFeHRlcm5hbCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0Fic3RyYWN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpNZXRob2QobGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5ldyBOYW1lKG5hbWUsIGxpYnJhcnkpLAogICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZSwgYXN5bmNNYXJrZXIsCiAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0Fic3RyYWN0OiBpc0Fic3RyYWN0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJLaW5kLm1ldGhvZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBpZiAoZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgICBzaW5rLndyaXRlRW51bShNZW1iZXJDb250ZXh0S2luZC5jbHMpOwogICAgICBzaW5rLndyaXRlQ2xhc3MoZW5jbG9zaW5nQ2xhc3MpOwogICAgfSBlbHNlIHsKICAgICAgc2luay53cml0ZUVudW0oTWVtYmVyQ29udGV4dEtpbmQubGlicmFyeSk7CiAgICAgIHNpbmsud3JpdGVMaWJyYXJ5KGxpYnJhcnkpOwogICAgfQogICAgc2luay53cml0ZVN0cmluZyhuYW1lKTsKICAgIHBhcmFtZXRlclN0cnVjdHVyZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlRW51bShhc3luY01hcmtlcik7CiAgICBzaW5rLndyaXRlQm9vbChpc1N0YXRpYyk7CiAgICBzaW5rLndyaXRlQm9vbChpc0V4dGVybmFsKTsKICAgIHNpbmsud3JpdGVCb29sKGlzQWJzdHJhY3QpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzRnVuY3Rpb24gPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfa2luZCA9PiAnbWV0aG9kJzsKfQoKY2xhc3MgSkdlbmVyYXRvckJvZHkgZXh0ZW5kcyBKRnVuY3Rpb24gewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSkdlbmVyYXRvckJvZHldIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZ2VuZXJhdG9yLWJvZHknOwoKICBmaW5hbCBKRnVuY3Rpb24gZnVuY3Rpb247CiAgZmluYWwgRGFydFR5cGUgZWxlbWVudFR5cGU7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGhhc2hDb2RlOwoKICBKR2VuZXJhdG9yQm9keSh0aGlzLmZ1bmN0aW9uLCB0aGlzLmVsZW1lbnRUeXBlKQogICAgICA6IGhhc2hDb2RlID0gZnVuY3Rpb24uaGFzaENvZGUgKyAxLCAvLyBIYWNrIHN0YWJpbGl6ZSBzb3J0IG9yZGVyLgogICAgICAgIHN1cGVyKGZ1bmN0aW9uLmxpYnJhcnksIGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzLCBmdW5jdGlvbi5tZW1iZXJOYW1lLAogICAgICAgICAgICBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUsIGZ1bmN0aW9uLmFzeW5jTWFya2VyLAogICAgICAgICAgICBpc1N0YXRpYzogZnVuY3Rpb24uaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGZhbHNlKTsKCiAgZmFjdG9yeSBKR2VuZXJhdG9yQm9keS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSkZ1bmN0aW9uIGZ1bmN0aW9uID0gc291cmNlLnJlYWRNZW1iZXIoKTsKICAgIERhcnRUeXBlIGVsZW1lbnRUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZSgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKR2VuZXJhdG9yQm9keShmdW5jdGlvbiwgZWxlbWVudFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlcktpbmQuZ2VuZXJhdG9yQm9keSk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyKGZ1bmN0aW9uKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZShlbGVtZW50VHlwZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfa2luZCA9PiAnZ2VuZXJhdG9yX2JvZHknOwp9CgpjbGFzcyBKR2V0dGVyIGV4dGVuZHMgSkZ1bmN0aW9uIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pHZXR0ZXJdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZ2V0dGVyJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0Fic3RyYWN0OwoKICBKR2V0dGVyKEpMaWJyYXJ5IGxpYnJhcnksIEpDbGFzcyBlbmNsb3NpbmdDbGFzcywgTmFtZSBuYW1lLAogICAgICBBc3luY01hcmtlciBhc3luY01hcmtlciwKICAgICAge2Jvb2wgaXNTdGF0aWMsIGJvb2wgaXNFeHRlcm5hbCwgdGhpcy5pc0Fic3RyYWN0fSkKICAgICAgOiBzdXBlcihsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZSwgY29uc3QgUGFyYW1ldGVyU3RydWN0dXJlLmdldHRlcigpLAogICAgICAgICAgICBhc3luY01hcmtlciwKICAgICAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0V4dGVybmFsOiBpc0V4dGVybmFsKTsKCiAgZmFjdG9yeSBKR2V0dGVyLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBNZW1iZXJDb250ZXh0S2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKE1lbWJlckNvbnRleHRLaW5kLnZhbHVlcyk7CiAgICBKTGlicmFyeSBsaWJyYXJ5OwogICAgSkNsYXNzIGVuY2xvc2luZ0NsYXNzOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgTWVtYmVyQ29udGV4dEtpbmQubGlicmFyeToKICAgICAgICBsaWJyYXJ5ID0gc291cmNlLnJlYWRMaWJyYXJ5KCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgTWVtYmVyQ29udGV4dEtpbmQuY2xzOgogICAgICAgIGVuY2xvc2luZ0NsYXNzID0gc291cmNlLnJlYWRDbGFzcygpOwogICAgICAgIGxpYnJhcnkgPSBlbmNsb3NpbmdDbGFzcy5saWJyYXJ5OwogICAgICAgIGJyZWFrOwogICAgfQogICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIgPSBzb3VyY2UucmVhZEVudW0oQXN5bmNNYXJrZXIudmFsdWVzKTsKICAgIGJvb2wgaXNTdGF0aWMgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNFeHRlcm5hbCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0Fic3RyYWN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpHZXR0ZXIoCiAgICAgICAgbGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5ldyBOYW1lKG5hbWUsIGxpYnJhcnkpLCBhc3luY01hcmtlciwKICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQWJzdHJhY3Q6IGlzQWJzdHJhY3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlcktpbmQuZ2V0dGVyKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGlmIChlbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIHNpbmsud3JpdGVFbnVtKE1lbWJlckNvbnRleHRLaW5kLmNscyk7CiAgICAgIHNpbmsud3JpdGVDbGFzcyhlbmNsb3NpbmdDbGFzcyk7CiAgICB9IGVsc2UgewogICAgICBzaW5rLndyaXRlRW51bShNZW1iZXJDb250ZXh0S2luZC5saWJyYXJ5KTsKICAgICAgc2luay53cml0ZUxpYnJhcnkobGlicmFyeSk7CiAgICB9CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgc2luay53cml0ZUVudW0oYXN5bmNNYXJrZXIpOwogICAgc2luay53cml0ZUJvb2woaXNTdGF0aWMpOwogICAgc2luay53cml0ZUJvb2woaXNFeHRlcm5hbCk7CiAgICBzaW5rLndyaXRlQm9vbChpc0Fic3RyYWN0KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0dldHRlciA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IF9raW5kID0+ICdnZXR0ZXInOwp9CgpjbGFzcyBKU2V0dGVyIGV4dGVuZHMgSkZ1bmN0aW9uIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pTZXR0ZXJdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnc2V0dGVyJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0Fic3RyYWN0OwoKICBKU2V0dGVyKEpMaWJyYXJ5IGxpYnJhcnksIEpDbGFzcyBlbmNsb3NpbmdDbGFzcywgTmFtZSBuYW1lLAogICAgICB7Ym9vbCBpc1N0YXRpYywgYm9vbCBpc0V4dGVybmFsLCB0aGlzLmlzQWJzdHJhY3R9KQogICAgICA6IHN1cGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLCBjb25zdCBQYXJhbWV0ZXJTdHJ1Y3R1cmUuc2V0dGVyKCksCiAgICAgICAgICAgIEFzeW5jTWFya2VyLlNZTkMsCiAgICAgICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYywgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCk7CgogIGZhY3RvcnkgSlNldHRlci5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgTWVtYmVyQ29udGV4dEtpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShNZW1iZXJDb250ZXh0S2luZC52YWx1ZXMpOwogICAgSkxpYnJhcnkgbGlicmFyeTsKICAgIEpDbGFzcyBlbmNsb3NpbmdDbGFzczsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIE1lbWJlckNvbnRleHRLaW5kLmxpYnJhcnk6CiAgICAgICAgbGlicmFyeSA9IHNvdXJjZS5yZWFkTGlicmFyeSgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1lbWJlckNvbnRleHRLaW5kLmNsczoKICAgICAgICBlbmNsb3NpbmdDbGFzcyA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgICAgICBsaWJyYXJ5ID0gZW5jbG9zaW5nQ2xhc3MubGlicmFyeTsKICAgICAgICBicmVhazsKICAgIH0KICAgIFN0cmluZyBuYW1lID0gc291cmNlLnJlYWRTdHJpbmcoKTsKICAgIGJvb2wgaXNTdGF0aWMgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNFeHRlcm5hbCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0Fic3RyYWN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpTZXR0ZXIoCiAgICAgICAgbGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5ldyBOYW1lKG5hbWUsIGxpYnJhcnksIGlzU2V0dGVyOiB0cnVlKSwKICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQWJzdHJhY3Q6IGlzQWJzdHJhY3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlcktpbmQuc2V0dGVyKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGlmIChlbmNsb3NpbmdDbGFzcyAhPSBudWxsKSB7CiAgICAgIHNpbmsud3JpdGVFbnVtKE1lbWJlckNvbnRleHRLaW5kLmNscyk7CiAgICAgIHNpbmsud3JpdGVDbGFzcyhlbmNsb3NpbmdDbGFzcyk7CiAgICB9IGVsc2UgewogICAgICBzaW5rLndyaXRlRW51bShNZW1iZXJDb250ZXh0S2luZC5saWJyYXJ5KTsKICAgICAgc2luay53cml0ZUxpYnJhcnkobGlicmFyeSk7CiAgICB9CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgc2luay53cml0ZUJvb2woaXNTdGF0aWMpOwogICAgc2luay53cml0ZUJvb2woaXNFeHRlcm5hbCk7CiAgICBzaW5rLndyaXRlQm9vbChpc0Fic3RyYWN0KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0Fzc2lnbmFibGUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTZXR0ZXIgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfa2luZCA9PiAnc2V0dGVyJzsKfQoKY2xhc3MgSkZpZWxkIGV4dGVuZHMgSk1lbWJlciBpbXBsZW1lbnRzIEZpZWxkRW50aXR5LCBJbmRleGVkRmllbGQgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSkZpZWxkXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2ZpZWxkJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0Fzc2lnbmFibGU7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc0NvbnN0OwoKICBKRmllbGQoSkxpYnJhcnkgbGlicmFyeSwgSkNsYXNzIGVuY2xvc2luZ0NsYXNzLCBOYW1lIG5hbWUsCiAgICAgIHtib29sIGlzU3RhdGljLCB0aGlzLmlzQXNzaWduYWJsZSwgdGhpcy5pc0NvbnN0fSkKICAgICAgOiBzdXBlcihsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZSwgaXNTdGF0aWM6IGlzU3RhdGljKTsKCiAgZmFjdG9yeSBKRmllbGQucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1lbWJlckNvbnRleHRLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oTWVtYmVyQ29udGV4dEtpbmQudmFsdWVzKTsKICAgIEpMaWJyYXJ5IGxpYnJhcnk7CiAgICBKQ2xhc3MgZW5jbG9zaW5nQ2xhc3M7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBNZW1iZXJDb250ZXh0S2luZC5saWJyYXJ5OgogICAgICAgIGxpYnJhcnkgPSBzb3VyY2UucmVhZExpYnJhcnkoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBNZW1iZXJDb250ZXh0S2luZC5jbHM6CiAgICAgICAgZW5jbG9zaW5nQ2xhc3MgPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICAgICAgbGlicmFyeSA9IGVuY2xvc2luZ0NsYXNzLmxpYnJhcnk7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBTdHJpbmcgbmFtZSA9IHNvdXJjZS5yZWFkU3RyaW5nKCk7CiAgICBib29sIGlzU3RhdGljID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzQXNzaWduYWJsZSA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0NvbnN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpGaWVsZChsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmV3IE5hbWUobmFtZSwgbGlicmFyeSksCiAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0Fzc2lnbmFibGU6IGlzQXNzaWduYWJsZSwgaXNDb25zdDogaXNDb25zdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKTWVtYmVyS2luZC5maWVsZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBpZiAoZW5jbG9zaW5nQ2xhc3MgIT0gbnVsbCkgewogICAgICBzaW5rLndyaXRlRW51bShNZW1iZXJDb250ZXh0S2luZC5jbHMpOwogICAgICBzaW5rLndyaXRlQ2xhc3MoZW5jbG9zaW5nQ2xhc3MpOwogICAgfSBlbHNlIHsKICAgICAgc2luay53cml0ZUVudW0oTWVtYmVyQ29udGV4dEtpbmQubGlicmFyeSk7CiAgICAgIHNpbmsud3JpdGVMaWJyYXJ5KGxpYnJhcnkpOwogICAgfQogICAgc2luay53cml0ZVN0cmluZyhuYW1lKTsKICAgIHNpbmsud3JpdGVCb29sKGlzU3RhdGljKTsKICAgIHNpbmsud3JpdGVCb29sKGlzQXNzaWduYWJsZSk7CiAgICBzaW5rLndyaXRlQm9vbChpc0NvbnN0KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0ZpZWxkID0+IHRydWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2tpbmQgPT4gJ2ZpZWxkJzsKfQoKY2xhc3MgSkNsb3N1cmVDYWxsTWV0aG9kIGV4dGVuZHMgSk1ldGhvZCB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKQ2xvc3VyZUNhbGxNZXRob2RdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2xvc3VyZS1jYWxsLW1ldGhvZCc7CgogIEpDbG9zdXJlQ2FsbE1ldGhvZChDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzcywKICAgICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSwgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIpCiAgICAgIDogc3VwZXIoZW5jbG9zaW5nQ2xhc3MubGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIE5hbWVzLmNhbGwsCiAgICAgICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZSwgYXN5bmNNYXJrZXIsCiAgICAgICAgICAgIGlzU3RhdGljOiBmYWxzZSwgaXNFeHRlcm5hbDogZmFsc2UsIGlzQWJzdHJhY3Q6IGZhbHNlKTsKCiAgZmFjdG9yeSBKQ2xvc3VyZUNhbGxNZXRob2QucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIEpDbGFzcyBlbmNsb3NpbmdDbGFzcyA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUgPQogICAgICAgIG5ldyBQYXJhbWV0ZXJTdHJ1Y3R1cmUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBBc3luY01hcmtlciBhc3luY01hcmtlciA9IHNvdXJjZS5yZWFkRW51bShBc3luY01hcmtlci52YWx1ZXMpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKQ2xvc3VyZUNhbGxNZXRob2QoCiAgICAgICAgZW5jbG9zaW5nQ2xhc3MsIHBhcmFtZXRlclN0cnVjdHVyZSwgYXN5bmNNYXJrZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlcktpbmQuY2xvc3VyZUNhbGxNZXRob2QpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUNsYXNzKGVuY2xvc2luZ0NsYXNzKTsKICAgIHBhcmFtZXRlclN0cnVjdHVyZS53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLndyaXRlRW51bShhc3luY01hcmtlcik7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBfa2luZCA9PiAnY2xvc3VyZV9jYWxsJzsKfQoKLy8vIEEgbWV0aG9kIHRoYXQgcmV0dXJucyB0aGUgc2lnbmF0dXJlIG9mIHRoZSBEYXJ0IGNsb3N1cmUvdGVhcm9mZiB0aGF0IHRoaXMKLy8vIG1ldGhvZCdzIHBhcmVudCBjbGFzcyBpcyByZXByZXNlbnRpbmcuCmNsYXNzIEpTaWduYXR1cmVNZXRob2QgZXh0ZW5kcyBKTWV0aG9kIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pTaWduYXR1cmVNZXRob2RdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnc2lnbmF0dXJlLW1ldGhvZCc7CgogIEpTaWduYXR1cmVNZXRob2QoQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3MpCiAgICAgIDogc3VwZXIoZW5jbG9zaW5nQ2xhc3MubGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIE5hbWVzLnNpZ25hdHVyZSwKICAgICAgICAgICAgY29uc3QgUGFyYW1ldGVyU3RydWN0dXJlKDAsIDAsIGNvbnN0IFtdLCAwKSwgQXN5bmNNYXJrZXIuU1lOQywKICAgICAgICAgICAgaXNTdGF0aWM6IGZhbHNlLCBpc0V4dGVybmFsOiBmYWxzZSwgaXNBYnN0cmFjdDogZmFsc2UpOwoKICBmYWN0b3J5IEpTaWduYXR1cmVNZXRob2QucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIEpDbGFzcyBjbHMgPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpTaWduYXR1cmVNZXRob2QoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJLaW5kLnNpZ25hdHVyZU1ldGhvZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3MoZW5jbG9zaW5nQ2xhc3MpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgX2tpbmQgPT4gJ3NpZ25hdHVyZSc7Cn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIFtKVHlwZVZhcmlhYmxlXSB2YXJpYW50cyBpbiBzZXJpYWxpemF0aW9uLgplbnVtIEpUeXBlVmFyaWFibGVLaW5kIHsgY2xzLCBtZW1iZXIsIHR5cGVkZWYsIGxvY2FsIH0KCmNsYXNzIEpUeXBlVmFyaWFibGUgZXh0ZW5kcyBJbmRleGVkVHlwZVZhcmlhYmxlIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pUeXBlVmFyaWFibGVdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAndHlwZS12YXJpYWJsZSc7CgogIEBvdmVycmlkZQogIGZpbmFsIEVudGl0eSB0eXBlRGVjbGFyYXRpb247CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGluZGV4OwoKICBKVHlwZVZhcmlhYmxlKHRoaXMudHlwZURlY2xhcmF0aW9uLCB0aGlzLm5hbWUsIHRoaXMuaW5kZXgpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0pUeXBlVmFyaWFibGVdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgSlR5cGVWYXJpYWJsZS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSlR5cGVWYXJpYWJsZUtpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShKVHlwZVZhcmlhYmxlS2luZC52YWx1ZXMpOwogICAgRW50aXR5IHR5cGVEZWNsYXJhdGlvbjsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIEpUeXBlVmFyaWFibGVLaW5kLmNsczoKICAgICAgICB0eXBlRGVjbGFyYXRpb24gPSBzb3VyY2UucmVhZENsYXNzKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSlR5cGVWYXJpYWJsZUtpbmQubWVtYmVyOgogICAgICAgIHR5cGVEZWNsYXJhdGlvbiA9IHNvdXJjZS5yZWFkTWVtYmVyKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSlR5cGVWYXJpYWJsZUtpbmQudHlwZWRlZjoKICAgICAgICB0eXBlRGVjbGFyYXRpb24gPSBzb3VyY2UucmVhZFR5cGVkZWYoKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBKVHlwZVZhcmlhYmxlS2luZC5sb2NhbDoKICAgICAgICAvLyBUeXBlIHZhcmlhYmxlcyBkZWNsYXJlZCBieSBsb2NhbCBmdW5jdGlvbnMgZG9uJ3QgcG9pbnQgdG8gdGhlaXIKICAgICAgICAvLyBkZWNsYXJhdGlvbiwgc2luY2UgdGhlIGNvcnJlc3BvbmRpbmcgY2xvc3VyZSBjYWxsIG1ldGhvZHMgaXMgY3JlYXRlZAogICAgICAgIC8vIGFmdGVyIHRoZSB0eXBlIHZhcmlhYmxlLgogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEZpeCB0aGlzLgogICAgICAgIGJyZWFrOwogICAgfQogICAgU3RyaW5nIG5hbWUgPSBzb3VyY2UucmVhZFN0cmluZygpOwogICAgaW50IGluZGV4ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgSlR5cGVWYXJpYWJsZSh0eXBlRGVjbGFyYXRpb24sIG5hbWUsIGluZGV4KTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0pUeXBlVmFyaWFibGVdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBpZiAodHlwZURlY2xhcmF0aW9uIGlzIEluZGV4ZWRDbGFzcykgewogICAgICBJbmRleGVkQ2xhc3MgY2xzID0gdHlwZURlY2xhcmF0aW9uOwogICAgICBzaW5rLndyaXRlRW51bShKVHlwZVZhcmlhYmxlS2luZC5jbHMpOwogICAgICBzaW5rLndyaXRlQ2xhc3MoY2xzKTsKICAgIH0gZWxzZSBpZiAodHlwZURlY2xhcmF0aW9uIGlzIEluZGV4ZWRNZW1iZXIpIHsKICAgICAgSW5kZXhlZE1lbWJlciBtZW1iZXIgPSB0eXBlRGVjbGFyYXRpb247CiAgICAgIHNpbmsud3JpdGVFbnVtKEpUeXBlVmFyaWFibGVLaW5kLm1lbWJlcik7CiAgICAgIHNpbmsud3JpdGVNZW1iZXIobWVtYmVyKTsKICAgIH0gZWxzZSBpZiAodHlwZURlY2xhcmF0aW9uIGlzIEluZGV4ZWRUeXBlZGVmKSB7CiAgICAgIEluZGV4ZWRUeXBlZGVmIHR5cGVkZWYgPSB0eXBlRGVjbGFyYXRpb247CiAgICAgIHNpbmsud3JpdGVFbnVtKEpUeXBlVmFyaWFibGVLaW5kLnR5cGVkZWYpOwogICAgICBzaW5rLndyaXRlVHlwZWRlZih0eXBlZGVmKTsKICAgIH0gZWxzZSBpZiAodHlwZURlY2xhcmF0aW9uID09IG51bGwpIHsKICAgICAgc2luay53cml0ZUVudW0oSlR5cGVWYXJpYWJsZUtpbmQubG9jYWwpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiVW5leHBlY3RlZCB0eXBlIHZhcmlhYmxlIGRlY2xhcmVyICR0eXBlRGVjbGFyYXRpb24uIik7CiAgICB9CiAgICBzaW5rLndyaXRlU3RyaW5nKG5hbWUpOwogICAgc2luay53cml0ZUludChpbmRleCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJyR7anNFbGVtZW50UHJlZml4fXR5cGVfdmFyaWFibGUoJHt0eXBlRGVjbGFyYXRpb24ubmFtZX0uJG5hbWUpJzsKfQqDYQBOTjwBIwEqJCMhIS5EFwElAShCHScBDBUMGgEqATY7FycpFS0EASwoFRwhEwQBDDsCAUQqAUNAHSUBDBoBDBUMGQE2ATQ5OhQcGzErLRlCHz0eNwY+BAEqKCUVIBwgEwQBDB8BDDkCAShCHScBDBoBDBUBJQE2OxctJxUoBAEsKBUgHBMEAQw7AgFFExkWEwkKCgoQFRETDwIBLwwaDB8UGAFRHgE1OjwULkYrQyhAHjYfNx83HzclPSpCJj4oQCQ8BkAEASsnAQwhAQwgAQwiAQwdAQwgAQweAQweAQwgAQwdAQwjAQxFAQw8AQwxARQBDDJLAgEpMQwvDBkMIQFAMTZCAgEuNwwWARBPJ1AeJQEMIgEMJgEMHgEMIAEMMgEMJQIBNFAdNgEaTyc4NwFJFzAnLDspJhU2RDMEAQwoNxUlHC4gHRMEAQwqAQwsAgExTR0zAQwrARdPSjg3AUYXMCcsOykmOxUzRCAaRQQBDCg0FSUcLiAdMhMEAQwpAQwtAgFMSh0wAQwiAUw/SjEBQxc0LDsVQgQBDCgxFSMuEwQBDCoCASJBHSYBDBkBPkY5TjkBOhdIFhsUJigPIi0qDwYnLDtDJykpFUkpTQQBDCgoFSItJw0xIgYcLiEeICATBAEMHwEMIAIBKUgdLgEcHgwWATJITj89AUEXLjIVNgQBDCgvFSAlEwQBDCgCASJBHSYBDBkBPh85UBk5AToXSBYbFCYoDyItKg8GJ0MnKSkVGEdNBAEMKCgVIi0nDTEiBhwhHiAgEwQBDB0BDCACASJBHSYBDBkBPjlQHjkBOhdIFhsUJigPIi0qDwYnJykpFRhKTQQBDCgoFSItJw0xIgYcHiAgEwQBDCEBDB0BDCACAURAHSUBDBsMFgE9OEIBORdIFhsUJigPIi0qDwYnJysmFUhLBAEMKCcVIi0nDTEiBhweIh0TBAEMHAEMHwIBK0wdMwExRkItRAFFFzAsO0MVIzoEAQwoMxUlLiETBAEMJgIBTispSh0wAS9HS0QBQxclFSYEAQwoMRUlEwQBDCMCAUk3ATJHHS0BDCAMFQwTAT4BO0AXSBwUIi4PJS8PJjAPJEtQJCoPBiciFTwEATEoFSsqLRwzLjAgNDAxIiovDSJCBhwaEwQBDBdIAgErcGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvZWxlbWVudHMuZGFydDVzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91bml2ZXJzZS9jbGFzc19zZXQuZGFydMAAj6UvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLndvcmxkLmNsYXNzX3NldDsKCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJyBzaG93IEl0ZXJhYmxlQmFzZSwgTWFwQmFzZTsKCmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCcgc2hvdyBDbGFzc0VudGl0eTsKaW1wb3J0ICcuLi9lbGVtZW50cy9pbmRleGVkLmRhcnQnIHNob3cgSW5kZXhlZENsYXNzOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL2VudW1zZXQuZGFydCcgc2hvdyBFbnVtU2V0OwoKLy8vIEVudW0gZm9yIHRoZSBkaWZmZXJlbnQga2luZHMgb2YgaW5zdGFudGlhdGlvbiBvZiBhIGNsYXNzLgplbnVtIEluc3RhbnRpYXRpb24gewogIFVOSU5TVEFOVElBVEVELAogIERJUkVDVExZX0lOU1RBTlRJQVRFRCwKICBJTkRJUkVDVExZX0lOU1RBTlRJQVRFRCwKICBBQlNUUkFDVExZX0lOU1RBTlRJQVRFRCwKfQoKLy8vIE5vZGUgZm9yIFtjbHNdIGluIGEgdHJlZSBmb3JtaW5nIHRoZSBzdWJjbGFzcyByZWxhdGlvbiBvZiBbQ2xhc3NFbnRpdHldcy4KLy8vCi8vLyBUaGlzIGlzIHVzZWQgYnkgdGhlIFtDbG9zZWRXb3JsZF0gdG8gcGVyZm9ybSBxdWVyaWVzIG9uIHN1YmNsYXNzIGFuZCBzdWJ0eXBlCi8vLyByZWxhdGlvbnMuCi8vLwovLy8gRm9yIHRoaXMgY2xhc3MgaGllcmFyY2h5OgovLy8KLy8vICAgICBjbGFzcyBBIHt9Ci8vLyAgICAgY2xhc3MgQiBleHRlbmRzIEEge30KLy8vICAgICBjbGFzcyBDIGV4dGVuZHMgQSB7fQovLy8gICAgIGNsYXNzIEQgZXh0ZW5kcyBCIHt9Ci8vLyAgICAgY2xhc3MgRSBleHRlbmRzIEQge30KLy8vCi8vLyB0aGUgW0NsYXNzSGllcmFyY2h5Tm9kZV1zIGZvcm0gdGhpcyBzdWJjbGFzcyB0cmVlOgovLy8KLy8vICAgICAgIE9iamVjdAovLy8gICAgICAgICB8Ci8vLyAgICAgICAgIEEKLy8vICAgICAgICAvIFwKLy8vICAgICAgIEIgICBDCi8vLyAgICAgICB8Ci8vLyAgICAgICBECi8vLyAgICAgICB8Ci8vLyAgICAgICBFCi8vLwpjbGFzcyBDbGFzc0hpZXJhcmNoeU5vZGUgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbQ2xhc3NIaWVyYXJjaHlOb2RlXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NsYXNzLWhpZXJhcmNoeS1ub2RlJzsKCiAgLy8vIEVudW0gc2V0IGZvciBzZWxlY3RpbmcgaW5zdGFudGlhdGVkIGNsYXNzZXMgaW4KICAvLy8gW0NsYXNzSGllcmFyY2h5Tm9kZS5zdWJjbGFzc2VzQnlNYXNrXSwKICAvLy8gW0NsYXNzSGllcmFyY2h5Tm9kZS5zdWJjbGFzc2VzQnlNYXNrXSBhbmQgW0NsYXNzU2V0LnN1YnR5cGVzQnlNYXNrXS4KICBzdGF0aWMgZmluYWwgRW51bVNldDxJbnN0YW50aWF0aW9uPiBJTlNUQU5USUFURUQgPQogICAgICBuZXcgRW51bVNldDxJbnN0YW50aWF0aW9uPi5mcm9tVmFsdWVzKGNvbnN0IDxJbnN0YW50aWF0aW9uPlsKICAgIEluc3RhbnRpYXRpb24uRElSRUNUTFlfSU5TVEFOVElBVEVELAogICAgSW5zdGFudGlhdGlvbi5JTkRJUkVDVExZX0lOU1RBTlRJQVRFRCwKICAgIEluc3RhbnRpYXRpb24uQUJTVFJBQ1RMWV9JTlNUQU5USUFURUQsCiAgXSwgZml4ZWQ6IHRydWUpOwoKICAvLy8gRW51bSBzZXQgZm9yIHNlbGVjdGluZyBkaXJlY3RseSBhbmQgYWJzdHJhY3RseSBpbnN0YW50aWF0ZWQgY2xhc3NlcyBpbgogIC8vLyBbQ2xhc3NIaWVyYXJjaHlOb2RlLnN1YmNsYXNzZXNCeU1hc2tdLAogIC8vLyBbQ2xhc3NIaWVyYXJjaHlOb2RlLnN1YmNsYXNzZXNCeU1hc2tdIGFuZCBbQ2xhc3NTZXQuc3VidHlwZXNCeU1hc2tdLgogIHN0YXRpYyBmaW5hbCBFbnVtU2V0PEluc3RhbnRpYXRpb24+IEVYUExJQ0lUTFlfSU5TVEFOVElBVEVEID0KICAgICAgbmV3IEVudW1TZXQ8SW5zdGFudGlhdGlvbj4uZnJvbVZhbHVlcyhjb25zdCA8SW5zdGFudGlhdGlvbj5bCiAgICBJbnN0YW50aWF0aW9uLkRJUkVDVExZX0lOU1RBTlRJQVRFRCwKICAgIEluc3RhbnRpYXRpb24uQUJTVFJBQ1RMWV9JTlNUQU5USUFURUQKICBdLCBmaXhlZDogdHJ1ZSk7CgogIC8vLyBFbnVtIHNldCBmb3Igc2VsZWN0aW5nIGFsbCBjbGFzc2VzIGluCiAgLy8vIFtDbGFzc0hpZXJhcmNoeU5vZGUuc3ViY2xhc3Nlc0J5TWFza10sCiAgLy8vIFtDbGFzc0hpZXJhcmNoeU5vZGUuc3ViY2xhc3Nlc0J5TWFza10gYW5kIFtDbGFzc1NldC5zdWJ0eXBlc0J5TWFza10uCiAgc3RhdGljIGZpbmFsIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gQUxMID0KICAgICAgbmV3IEVudW1TZXQ8SW5zdGFudGlhdGlvbj4uZnJvbVZhbHVlcyhJbnN0YW50aWF0aW9uLnZhbHVlcywgZml4ZWQ6IHRydWUpOwoKICAvLy8gQ3JlYXRlcyBhbiBlbnVtIHNldCBmb3Igc2VsZWN0aW5nIHRoZSByZXR1cm5lZCBjbGFzc2VzIGluCiAgLy8vIFtDbGFzc0hpZXJhcmNoeU5vZGUuc3ViY2xhc3Nlc0J5TWFza10sCiAgLy8vIFtDbGFzc0hpZXJhcmNoeU5vZGUuc3ViY2xhc3Nlc0J5TWFza10gYW5kIFtDbGFzc1NldC5zdWJ0eXBlc0J5TWFza10uCiAgc3RhdGljIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gY3JlYXRlTWFzaygKICAgICAge2Jvb2wgaW5jbHVkZURpcmVjdGx5SW5zdGFudGlhdGVkOiB0cnVlLAogICAgICBib29sIGluY2x1ZGVJbmRpcmVjdGx5SW5zdGFudGlhdGVkOiB0cnVlLAogICAgICBib29sIGluY2x1ZGVVbmluc3RhbnRpYXRlZDogdHJ1ZSwKICAgICAgYm9vbCBpbmNsdWRlQWJzdHJhY3RseUluc3RhbnRpYXRlZDogdHJ1ZX0pIHsKICAgIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gbWFzayA9IG5ldyBFbnVtU2V0PEluc3RhbnRpYXRpb24+KCk7CiAgICBpZiAoaW5jbHVkZURpcmVjdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgIG1hc2suYWRkKEluc3RhbnRpYXRpb24uRElSRUNUTFlfSU5TVEFOVElBVEVEKTsKICAgIH0KICAgIGlmIChpbmNsdWRlSW5kaXJlY3RseUluc3RhbnRpYXRlZCkgewogICAgICBtYXNrLmFkZChJbnN0YW50aWF0aW9uLklORElSRUNUTFlfSU5TVEFOVElBVEVEKTsKICAgIH0KICAgIGlmIChpbmNsdWRlVW5pbnN0YW50aWF0ZWQpIHsKICAgICAgbWFzay5hZGQoSW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRCk7CiAgICB9CiAgICBpZiAoaW5jbHVkZUFic3RyYWN0bHlJbnN0YW50aWF0ZWQpIHsKICAgICAgbWFzay5hZGQoSW5zdGFudGlhdGlvbi5BQlNUUkFDVExZX0lOU1RBTlRJQVRFRCk7CiAgICB9CiAgICByZXR1cm4gbWFzazsKICB9CgogIGZpbmFsIENsYXNzSGllcmFyY2h5Tm9kZSBwYXJlbnROb2RlOwogIGZpbmFsIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gX21hc2sgPSBuZXcgRW51bVNldDxJbnN0YW50aWF0aW9uPi5mcm9tVmFsdWVzKAogICAgICBjb25zdCA8SW5zdGFudGlhdGlvbj5bSW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRF0pOwogIGZpbmFsIEluZGV4ZWRDbGFzcyBjbHM7CgogIGZpbmFsIGludCBoaWVyYXJjaHlEZXB0aDsKCiAgQ2xhc3NFbnRpdHkgX2xlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJjbGFzczsKICBpbnQgX2luc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQgPSAwOwoKICAvLy8gYHRydWVgIGlmIFtjbHNdIGhhcyBiZWVuIGRpcmVjdGx5IGluc3RhbnRpYXRlZC4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBDYCBidXQgX25vdF8gYEJgIGluOgogIC8vLyAgIGNsYXNzIEIge30KICAvLy8gICBjbGFzcyBDIGV4dGVuZHMgQiB7fQogIC8vLyAgIG1haW4oKSA9PiBuZXcgQygpOwogIC8vLwogIGJvb2wgZ2V0IGlzRGlyZWN0bHlJbnN0YW50aWF0ZWQgPT4KICAgICAgX21hc2suY29udGFpbnMoSW5zdGFudGlhdGlvbi5ESVJFQ1RMWV9JTlNUQU5USUFURUQpOwoKICB2b2lkIHNldCBpc0RpcmVjdGx5SW5zdGFudGlhdGVkKGJvb2wgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSAhPSBpc0RpcmVjdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgIF91cGRhdGVQYXJlbnRJbnN0YW50aWF0ZWRTdWJjbGFzc0NvdW50KAogICAgICAgICAgSW5zdGFudGlhdGlvbi5ESVJFQ1RMWV9JTlNUQU5USUFURUQsCiAgICAgICAgICBhZGQ6IHZhbHVlKTsKICAgIH0KICB9CgogIC8vLyBgdHJ1ZWAgaWYgW2Nsc10gaGFzIGJlZW4gYWJzdHJhY3RseSBpbnN0YW50aWF0ZWQuIFRoaXMgbWVhbnMgdGhhdCBhdAogIC8vLyBydW50aW1lIGluc3RhbmNlcyBvZiBbY2xzXSBvciB1bmtub3duIHN1YmNsYXNzZXMgb2YgW2Nsc10gYXJlIGFzc3VtZWQgdG8KICAvLy8gZXhpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCB0byBtYXJrIG5hdGl2ZSBhbmQvb3IgcmVmbGVjdGFibGUgY2xhc3NlcyBhcyBpbnN0YW50aWF0ZWQuCiAgLy8vIEZvciBuYXRpdmUgY2xhc3NlcyB3ZSBkbyBub3Qga25vdyB0aGUgZXhhY3QgY2xhc3MgdGhhdCBpbnN0YW50aWF0ZXMgW2Nsc10KICAvLy8gc28gW2Nsc10gaGVyZSByZXByZXNlbnRzIHRoZSByb290IG9mIHRoZSBzdWJjbGFzc2VzLiBGb3IgcmVmbGVjdGFibGUKICAvLy8gY2xhc3NlcyB3ZSBuZWVkIGV2ZW50IGFic3RyYWN0IGNsYXNzZXMgdG8gYmUgJ2xpdmUnIGV2ZW4gdGhvdWdoIHRoZXkKICAvLy8gY2Fubm90IHRoZW1zZWx2ZXMgYmUgaW5zdGFudGlhdGVkLgogIGJvb2wgZ2V0IGlzQWJzdHJhY3RseUluc3RhbnRpYXRlZCA9PgogICAgICBfbWFzay5jb250YWlucyhJbnN0YW50aWF0aW9uLkFCU1RSQUNUTFlfSU5TVEFOVElBVEVEKTsKCiAgdm9pZCBzZXQgaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkKGJvb2wgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSAhPSBpc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWQpIHsKICAgICAgX3VwZGF0ZVBhcmVudEluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQoCiAgICAgICAgICBJbnN0YW50aWF0aW9uLkFCU1RSQUNUTFlfSU5TVEFOVElBVEVELAogICAgICAgICAgYWRkOiB2YWx1ZSk7CiAgICB9CiAgfQoKICAvLy8gYHRydWVgIGlmIFtjbHNdIGlzIGVpdGhlciBkaXJlY3RseSBvciBhYnN0cmFjdGx5IGluc3RhbnRpYXRlZC4KICBib29sIGdldCBpc0V4cGxpY2l0bHlJbnN0YW50aWF0ZWQgPT4KICAgICAgaXNEaXJlY3RseUluc3RhbnRpYXRlZCB8fCBpc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWQ7CgogIHZvaWQgX3VwZGF0ZVBhcmVudEluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQoSW5zdGFudGlhdGlvbiBpbnN0YW50aWF0aW9uLAogICAgICB7Ym9vbCBhZGR9KSB7CiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgcGFyZW50ID0gcGFyZW50Tm9kZTsKICAgIGlmIChhZGQpIHsKICAgICAgX21hc2sucmVtb3ZlKEluc3RhbnRpYXRpb24uVU5JTlNUQU5USUFURUQpOwogICAgICBfbWFzay5hZGQoaW5zdGFudGlhdGlvbik7CiAgICAgIHdoaWxlIChwYXJlbnQgIT0gbnVsbCkgewogICAgICAgIHBhcmVudC5fdXBkYXRlSW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudCgxKTsKICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50Tm9kZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgX21hc2sucmVtb3ZlKGluc3RhbnRpYXRpb24pOwogICAgICBpZiAoX21hc2suaXNFbXB0eSkgewogICAgICAgIF9tYXNrLmFkZChJbnN0YW50aWF0aW9uLlVOSU5TVEFOVElBVEVEKTsKICAgICAgfQogICAgICB3aGlsZSAocGFyZW50ICE9IG51bGwpIHsKICAgICAgICBwYXJlbnQuX3VwZGF0ZUluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQoLTEpOwogICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gYHRydWVgIGlmIFtjbHNdIGhhcyBiZWVuIGluc3RhbnRpYXRlZCB0aHJvdWdoIHN1YmNsYXNzZXMuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBgQWAgYW5kIGBCYCBidXQgX25vdF8gYENgIGluOgogIC8vLyAgIGNsYXNzIEEge30KICAvLy8gICBjbGFzcyBCIGV4dGVuZHMgQSB7fQogIC8vLyAgIGNsYXNzIEMgZXh0ZW5kcyBCIHt9CiAgLy8vICAgbWFpbigpID0+IFtuZXcgQigpLCBuZXcgQygpXTsKICAvLy8KICBib29sIGdldCBpc0luZGlyZWN0bHlJbnN0YW50aWF0ZWQgPT4gX2luc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQgPiAwOwoKICAvLy8gVGhlIG51bWJlciBvZiBzdHJpY3Qgc3ViY2xhc3NlcyB0aGF0IGFyZSBkaXJlY3RseSBvciBpbmRpcmVjdGx5CiAgLy8vIGluc3RhbnRpYXRlZC4KICBpbnQgZ2V0IGluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQgPT4gX2luc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQ7CgogIHZvaWQgX3VwZGF0ZUluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQoaW50IGNoYW5nZSkgewogICAgYm9vbCBiZWZvcmUgPSBpc0luZGlyZWN0bHlJbnN0YW50aWF0ZWQ7CiAgICBfaW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudCArPSBjaGFuZ2U7CiAgICBib29sIGFmdGVyID0gaXNJbmRpcmVjdGx5SW5zdGFudGlhdGVkOwogICAgaWYgKGJlZm9yZSAhPSBhZnRlcikgewogICAgICBpZiAoYWZ0ZXIpIHsKICAgICAgICBfbWFzay5yZW1vdmUoSW5zdGFudGlhdGlvbi5VTklOU1RBTlRJQVRFRCk7CiAgICAgICAgX21hc2suYWRkKEluc3RhbnRpYXRpb24uSU5ESVJFQ1RMWV9JTlNUQU5USUFURUQpOwogICAgICB9IGVsc2UgewogICAgICAgIF9tYXNrLnJlbW92ZShJbnN0YW50aWF0aW9uLklORElSRUNUTFlfSU5TVEFOVElBVEVEKTsKICAgICAgICBpZiAoX21hc2suaXNFbXB0eSkgewogICAgICAgICAgX21hc2suYWRkKEluc3RhbnRpYXRpb24uVU5JTlNUQU5USUFURUQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8vIFRoZSBub2RlcyBmb3IgdGhlIGRpcmVjdCBzdWJjbGFzc2VzIG9mIFtjbHNdLgogIExpc3Q8Q2xhc3NIaWVyYXJjaHlOb2RlPiBfZGlyZWN0U3ViY2xhc3NlcyA9IDxDbGFzc0hpZXJhcmNoeU5vZGU+W107CgogIENsYXNzSGllcmFyY2h5Tm9kZSh0aGlzLnBhcmVudE5vZGUsIHRoaXMuY2xzLCB0aGlzLmhpZXJhcmNoeURlcHRoKSB7CiAgICBpZiAocGFyZW50Tm9kZSAhPSBudWxsKSB7CiAgICAgIHBhcmVudE5vZGUuYWRkRGlyZWN0U3ViY2xhc3ModGhpcyk7CiAgICB9CiAgfQoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0NsYXNzSGllcmFyY2h5Tm9kZV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBDbGFzc0hpZXJhcmNoeU5vZGUucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgTWFwPENsYXNzRW50aXR5LCBDbGFzc0hpZXJhcmNoeU5vZGU+IG5vZGVNYXApIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgSW5kZXhlZENsYXNzIGNscyA9IHNvdXJjZS5yZWFkQ2xhc3MoKTsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBwYXJlbnROb2RlOwogICAgSW5kZXhlZENsYXNzIHN1cGVyY2xhc3MgPSBzb3VyY2UucmVhZENsYXNzT3JOdWxsKCk7CiAgICBpZiAoc3VwZXJjbGFzcyAhPSBudWxsKSB7CiAgICAgIHBhcmVudE5vZGUgPSBub2RlTWFwW3N1cGVyY2xhc3NdOwogICAgICBhc3NlcnQocGFyZW50Tm9kZSAhPSBudWxsLAogICAgICAgICAgIk5vIENsYXNzSGllcmFyY2h5Tm9kZSBmb3Igc3VwZXJjbGFzcyAkc3VwZXJjbGFzcy4iKTsKICAgIH0KICAgIGludCBtYXNrVmFsdWUgPSBzb3VyY2UucmVhZEludCgpOwogICAgaW50IGhpZXJhcmNoeURlcHRoID0gc291cmNlLnJlYWRJbnQoKTsKICAgIGludCBpbnN0YW50aWF0ZWRTdWJjbGFzc0NvdW50ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgQ2xhc3NIaWVyYXJjaHlOb2RlKHBhcmVudE5vZGUsIGNscywgaGllcmFyY2h5RGVwdGgpCiAgICAgIC4uX2luc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQgPSBpbnN0YW50aWF0ZWRTdWJjbGFzc0NvdW50CiAgICAgIC4uX21hc2sudmFsdWUgPSBtYXNrVmFsdWU7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtDbGFzc0hpZXJhcmNoeU5vZGVdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3MoY2xzKTsKICAgIHNpbmsud3JpdGVDbGFzc09yTnVsbChwYXJlbnROb2RlPy5jbHMpOwogICAgc2luay53cml0ZUludChfbWFzay52YWx1ZSk7CiAgICBzaW5rLndyaXRlSW50KGhpZXJhcmNoeURlcHRoKTsKICAgIHNpbmsud3JpdGVJbnQoX2luc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIC8vLyBBZGRzIFtzdWJjbGFzc10gYXMgYSBkaXJlY3Qgc3ViY2xhc3Mgb2YgW2Nsc10uCiAgdm9pZCBhZGREaXJlY3RTdWJjbGFzcyhDbGFzc0hpZXJhcmNoeU5vZGUgc3ViY2xhc3MpIHsKICAgIGFzc2VydCghX2RpcmVjdFN1YmNsYXNzZXMuY29udGFpbnMoc3ViY2xhc3MpKTsKICAgIF9kaXJlY3RTdWJjbGFzc2VzLmFkZChzdWJjbGFzcyk7CiAgfQoKICBJdGVyYWJsZTxDbGFzc0hpZXJhcmNoeU5vZGU+IGdldCBkaXJlY3RTdWJjbGFzc2VzID0+IF9kaXJlY3RTdWJjbGFzc2VzOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW290aGVyXSBpcyBjb250YWluZWQgaW4gdGhlIHN1YnRyZWUgb2YgdGhpcyBub2RlLgogIC8vLwogIC8vLyBUaGlzIG1lYW5zIHRoYXQgW290aGVyXSBpcyBhIHN1YmNsYXNzIG9mIFtjbHNdLgogIGJvb2wgY29udGFpbnMoQ2xhc3NIaWVyYXJjaHlOb2RlIG90aGVyKSB7CiAgICB3aGlsZSAob3RoZXIgIT0gbnVsbCkgewogICAgICBpZiAoY2xzID09IG90aGVyLmNscykgcmV0dXJuIHRydWU7CiAgICAgIGlmIChoaWVyYXJjaHlEZXB0aCA+PSBvdGhlci5oaWVyYXJjaHlEZXB0aCkgcmV0dXJuIGZhbHNlOwogICAgICBvdGhlciA9IG90aGVyLnBhcmVudE5vZGU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYG90aGVyLmNsc2AgaXMgYSBzdWJjbGFzcyBvZiBbY2xzXS4KICBib29sIGhhc1N1YmNsYXNzKENsYXNzSGllcmFyY2h5Tm9kZSBvdGhlcikgewogICAgcmV0dXJuIGNvbnRhaW5zKG90aGVyKTsKICB9CgogIC8vLyBgdHJ1ZWAgaWYgW2Nsc10gaGFzIGJlZW4gZGlyZWN0bHksIGluZGlyZWN0bHksIG9yIGFic3RyYWN0bHkgaW5zdGFudGlhdGVkLgogIGJvb2wgZ2V0IGlzSW5zdGFudGlhdGVkID0+CiAgICAgIGlzRXhwbGljaXRseUluc3RhbnRpYXRlZCB8fCBpc0luZGlyZWN0bHlJbnN0YW50aWF0ZWQ7CgogIC8vLyBSZXR1cm5zIGFuIFtJdGVyYWJsZV0gb2YgdGhlIHN1YmNsYXNzZXMgb2YgW2Nsc10gcG9zc2libHkgaW5jbHVkaW5nIFtjbHNdLgogIC8vLwogIC8vLyBTdWJjbGFzc2VzIGFyZSBpbmNsdWRlZCBpZiB0aGVpciBpbnN0YW50aWF0aW9uIHByb3BlcnRpZXMgaW50ZXJzZWN0IHdpdGgKICAvLy8gdGhlaXIgY29ycmVzcG9uZGluZyBbSW5zdGFudGlhdGlvbl0gdmFsdWVzIGluIFttYXNrXS4gSWYgW3N0cmljdF0gaXMKICAvLy8gYHRydWVgLCBbY2xzXSBpdHNlbGYgaXMgX25vdF8gcmV0dXJuZWQuCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHN1YmNsYXNzZXNCeU1hc2soRW51bVNldDxJbnN0YW50aWF0aW9uPiBtYXNrLAogICAgICB7Ym9vbCBzdHJpY3Q6IGZhbHNlfSkgewogICAgcmV0dXJuIG5ldyBDbGFzc0hpZXJhcmNoeU5vZGVJdGVyYWJsZSh0aGlzLCBtYXNrLCBpbmNsdWRlUm9vdDogIXN0cmljdCk7CiAgfQoKICAvLy8gQXBwbGllcyBbcHJlZGljYXRlXSB0byBlYWNoIHN1YmNsYXNzIG9mIFtjbHNdIG1hdGNoaW5nIHRoZSBjcml0ZXJpYQogIC8vLyBzcGVjaWZpZWQgYnkgW21hc2tdIGFuZCBbc3RyaWN0XS4gSWYgW3ByZWRpY2F0ZV0gcmV0dXJucyBgdHJ1ZWAgb24gYQogIC8vLyBjbGFzcywgdmlzaXRhdGlvbiBpcyBzdG9wcGVkIGltbWVkaWF0ZWx5IGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAuCiAgLy8vCiAgLy8vIFtwcmVkaWNhdGVdIGlzIGFwcGxpZWQgdG8gc3ViY2xhc3NlcyBpZiB0aGVpciBpbnN0YW50aWF0aW9uIHByb3BlcnRpZXMKICAvLy8gaW50ZXJzZWN0IHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBbSW5zdGFudGlhdGlvbl0gdmFsdWVzIGluIFttYXNrXS4gSWYKICAvLy8gW3N0cmljdF0gaXMgYHRydWVgLCBbcHJlZGljYXRlXSBpcyBfbm90XyBjYWxsZWQgb24gW2Nsc10gaXRzZWxmLgogIGJvb2wgYW55U3ViY2xhc3MoYm9vbCBwcmVkaWNhdGUoQ2xhc3NFbnRpdHkgY2xzKSwgRW51bVNldDxJbnN0YW50aWF0aW9uPiBtYXNrLAogICAgICB7Ym9vbCBzdHJpY3Q6IGZhbHNlfSkgewogICAgSXRlcmF0aW9uU3RlcCB3cmFwcGVyKENsYXNzRW50aXR5IGNscykgewogICAgICByZXR1cm4gcHJlZGljYXRlKGNscykgPyBJdGVyYXRpb25TdGVwLlNUT1AgOiBJdGVyYXRpb25TdGVwLkNPTlRJTlVFOwogICAgfQoKICAgIHJldHVybiBmb3JFYWNoU3ViY2xhc3Mod3JhcHBlciwgbWFzaywgc3RyaWN0OiBzdHJpY3QpID09IEl0ZXJhdGlvblN0ZXAuU1RPUDsKICB9CgogIC8vLyBBcHBsaWVzIFtmXSB0byBlYWNoIHN1YmNsYXNzIG9mIFtjbHNdIG1hdGNoaW5nIHRoZSBjcml0ZXJpYSBzcGVjaWZpZWQgYnkKICAvLy8gW21hc2tdIGFuZCBbc3RyaWN0XS4KICAvLy8KICAvLy8gW2ZdIGlzIGEgYXBwbGllZCB0byBzdWJjbGFzc2VzIGlmIHRoZWlyIGluc3RhbnRpYXRpb24gcHJvcGVydGllcyBpbnRlcnNlY3QKICAvLy8gd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIFtJbnN0YW50aWF0aW9uXSB2YWx1ZXMgaW4gW21hc2tdLiBJZiBbc3RyaWN0XSBpcwogIC8vLyBgdHJ1ZWAsIFtmXSBpcyBfbm90XyBjYWxsZWQgb24gW2Nsc10gaXRzZWxmLgogIC8vLwogIC8vLyBUaGUgdmlzaXRhdGlvbiBvZiBzdWJjbGFzc2VzIGNhbiBiZSBjdXQgc2hvcnQgYnkgdGhlIHJldHVybiB2YWx1ZSBvZiBbZl0uCiAgLy8vIElmIFtGb3JFYWNoLlNUT1BdIGlzIHJldHVybmVkLCBubyBmdXJ0aGVyIGNsYXNzZXMgYXJlIHZpc2l0ZWQgYW5kIHRoZQogIC8vLyBmdW5jdGlvbiBzdG9wcyBpbW1lZGlhdGVseS4gSWYgW0ZvckVhY2guU0tJUF9TVUJDTEFTU0VTXSBpcyByZXR1cm5lZCwgdGhlCiAgLy8vIHN1YmNsYXNzZXMgb2YgdGhlIGxhc3QgdmlzaXRlZCBjbGFzcyBhcmUgc2tpcHBlZCwgYnV0IHZpc2l0YXRpb24KICAvLy8gY29udGludWVzLiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBpcyBlaXRoZXIgW0ZvckVhY2guU1RPUF0sIGlmCiAgLy8vIHZpc2l0YXRpb24gd2FzIHN0b3BwZWQsIG9yIFtGb3JFYWNoLkNPTlRJTlVFXSBpZiB2aXNpdGF0aW9uIGNvbnRpbnVlZCB0bwogIC8vLyB0aGUgZW5kLgogIEl0ZXJhdGlvblN0ZXAgZm9yRWFjaFN1YmNsYXNzKEZvckVhY2hGdW5jdGlvbiBmLCBFbnVtU2V0PEluc3RhbnRpYXRpb24+IG1hc2ssCiAgICAgIHtib29sIHN0cmljdDogZmFsc2V9KSB7CiAgICBJdGVyYXRpb25TdGVwIG5leHRTdGVwOwogICAgaWYgKCFzdHJpY3QgJiYgbWFzay5pbnRlcnNlY3RzKF9tYXNrKSkgewogICAgICBuZXh0U3RlcCA9IGYoY2xzKTsKICAgIH0KICAgIC8vIEludGVycHJldCBgZm9yRWFjaCA9PSBudWxsYCBhcyBgZm9yRWFjaCA9PSBGb3JFYWNoLkNPTlRJTlVFYC4KICAgIG5leHRTdGVwID8/PSBJdGVyYXRpb25TdGVwLkNPTlRJTlVFOwoKICAgIGlmIChuZXh0U3RlcCA9PSBJdGVyYXRpb25TdGVwLkNPTlRJTlVFKSB7CiAgICAgIGlmIChtYXNrLmNvbnRhaW5zKEluc3RhbnRpYXRpb24uVU5JTlNUQU5USUFURUQpIHx8IGlzSW5zdGFudGlhdGVkKSB7CiAgICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgc3ViY2xhc3MgaW4gX2RpcmVjdFN1YmNsYXNzZXMpIHsKICAgICAgICAgIEl0ZXJhdGlvblN0ZXAgc3ViRm9yRWFjaCA9IHN1YmNsYXNzLmZvckVhY2hTdWJjbGFzcyhmLCBtYXNrKTsKICAgICAgICAgIGlmIChzdWJGb3JFYWNoID09IEl0ZXJhdGlvblN0ZXAuU1RPUCkgewogICAgICAgICAgICByZXR1cm4gc3ViRm9yRWFjaDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChuZXh0U3RlcCA9PSBJdGVyYXRpb25TdGVwLlNUT1ApIHsKICAgICAgcmV0dXJuIG5leHRTdGVwOwogICAgfQogICAgcmV0dXJuIEl0ZXJhdGlvblN0ZXAuQ09OVElOVUU7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbW9zdCBzcGVjaWZpYyBzdWJjbGFzcyBvZiBbY2xzXSAoaW5jbHVkaW5nIFtjbHNdKSB0aGF0IGlzCiAgLy8vIGRpcmVjdGx5IGluc3RhbnRpYXRlZCBvciBhIHN1cGVyY2xhc3Mgb2YgYWxsIGRpcmVjdGx5IGluc3RhbnRpYXRlZAogIC8vLyBzdWJjbGFzc2VzLiBJZiBbY2xzXSBpcyBub3QgaW5zdGFudGlhdGVkLCBgbnVsbGAgaXMgcmV0dXJuZWQuCiAgQ2xhc3NFbnRpdHkgZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJjbGFzc2VzKCkgewogICAgaWYgKCFpc0luc3RhbnRpYXRlZCkgcmV0dXJuIG51bGw7CiAgICBpZiAoX2xlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJjbGFzcyA9PSBudWxsKSB7CiAgICAgIF9sZWFzdFVwcGVySW5zdGFudGlhdGVkU3ViY2xhc3MgPQogICAgICAgICAgX2NvbXB1dGVMZWFzdFVwcGVySW5zdGFudGlhdGVkU3ViY2xhc3MoKTsKICAgIH0KICAgIHJldHVybiBfbGVhc3RVcHBlckluc3RhbnRpYXRlZFN1YmNsYXNzOwogIH0KCiAgQ2xhc3NFbnRpdHkgX2NvbXB1dGVMZWFzdFVwcGVySW5zdGFudGlhdGVkU3ViY2xhc3MoKSB7CiAgICBpZiAoaXNFeHBsaWNpdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgIHJldHVybiBjbHM7CiAgICB9CiAgICBpZiAoIWlzSW5zdGFudGlhdGVkKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YmNsYXNzOwogICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSBpbiBfZGlyZWN0U3ViY2xhc3NlcykgewogICAgICBpZiAobm9kZS5pc0luc3RhbnRpYXRlZCkgewogICAgICAgIGlmIChzdWJjbGFzcyA9PSBudWxsKSB7CiAgICAgICAgICBzdWJjbGFzcyA9IG5vZGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBjbHM7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoc3ViY2xhc3MgIT0gbnVsbCkgewogICAgICByZXR1cm4gc3ViY2xhc3MuZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJjbGFzc2VzKCk7CiAgICB9CiAgICByZXR1cm4gY2xzOwogIH0KCiAgdm9pZCBwcmludE9uKFN0cmluZ0J1ZmZlciBzYiwgU3RyaW5nIGluZGVudGF0aW9uLAogICAgICB7Ym9vbCBpbnN0YW50aWF0ZWRPbmx5OiBmYWxzZSwKICAgICAgYm9vbCBzb3J0ZWQ6IHRydWUsCiAgICAgIENsYXNzRW50aXR5IHdpdGhSZXNwZWN0VG99KSB7CiAgICBib29sIGlzUmVsYXRlZFRvKENsYXNzRW50aXR5IF9zdWJjbGFzcykgewogICAgICByZXR1cm4gdHJ1ZTsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCB0aGlzIGZvciBrZXJuZWwgYmFzZWQgZWxlbWVudHM6CiAgICAgIC8vIHJldHVybiBzdWJjbGFzcyA9PSB3aXRoUmVzcGVjdFRvIHx8CiAgICAgIC8vICAgIHN1YmNsYXNzLmltcGxlbWVudHNJbnRlcmZhY2Uod2l0aFJlc3BlY3RUbyk7CiAgICB9CgogICAgc2Iud3JpdGUoaW5kZW50YXRpb24pOwogICAgaWYgKGNscy5pc0Fic3RyYWN0KSB7CiAgICAgIHNiLndyaXRlKCdhYnN0cmFjdCAnKTsKICAgIH0KICAgIHNiLndyaXRlKCdjbGFzcyAke2Nscy5uYW1lfTonKTsKICAgIGlmIChpc0RpcmVjdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgIHNiLndyaXRlKCcgZGlyZWN0bHknKTsKICAgIH0KICAgIGlmIChpc0luZGlyZWN0bHlJbnN0YW50aWF0ZWQpIHsKICAgICAgc2Iud3JpdGUoJyBpbmRpcmVjdGx5Jyk7CiAgICB9CiAgICBpZiAoaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkKSB7CiAgICAgIHNiLndyaXRlKCcgYWJzdHJhY3RseScpOwogICAgfQogICAgc2Iud3JpdGUoJyBbJyk7CiAgICBpZiAoX2RpcmVjdFN1YmNsYXNzZXMuaXNFbXB0eSkgewogICAgICBzYi53cml0ZSgnXScpOwogICAgfSBlbHNlIHsKICAgICAgZHluYW1pYyBzdWJjbGFzc2VzID0gX2RpcmVjdFN1YmNsYXNzZXM7CiAgICAgIGlmIChzb3J0ZWQpIHsKICAgICAgICBzdWJjbGFzc2VzID0gX2RpcmVjdFN1YmNsYXNzZXMudG9MaXN0KCkKICAgICAgICAgIC4uc29ydCgoYSwgYikgewogICAgICAgICAgICByZXR1cm4gYS5jbHMubmFtZS5jb21wYXJlVG8oYi5jbHMubmFtZSk7CiAgICAgICAgICB9KTsKICAgICAgfQogICAgICBib29sIG5lZWRzQ29tbWEgPSBmYWxzZTsKICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgY2hpbGQgaW4gc3ViY2xhc3NlcykgewogICAgICAgIGlmIChpbnN0YW50aWF0ZWRPbmx5ICYmICFjaGlsZC5pc0luc3RhbnRpYXRlZCkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICh3aXRoUmVzcGVjdFRvICE9IG51bGwgJiYKICAgICAgICAgICAgIWNoaWxkLmFueVN1YmNsYXNzKGlzUmVsYXRlZFRvLCBDbGFzc0hpZXJhcmNoeU5vZGUuQUxMKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChuZWVkc0NvbW1hKSB7CiAgICAgICAgICBzYi53cml0ZSgnLFxuJyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNiLndyaXRlKCdcbicpOwogICAgICAgIH0KICAgICAgICBjaGlsZC5wcmludE9uKHNiLCAnJGluZGVudGF0aW9uICAnLAogICAgICAgICAgICBpbnN0YW50aWF0ZWRPbmx5OiBpbnN0YW50aWF0ZWRPbmx5LAogICAgICAgICAgICBzb3J0ZWQ6IHNvcnRlZCwKICAgICAgICAgICAgd2l0aFJlc3BlY3RUbzogd2l0aFJlc3BlY3RUbyk7CiAgICAgICAgbmVlZHNDb21tYSA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKG5lZWRzQ29tbWEpIHsKICAgICAgICBzYi53cml0ZSgnXG4nKTsKICAgICAgICBzYi53cml0ZSgnJGluZGVudGF0aW9uXScpOwogICAgICB9IGVsc2UgewogICAgICAgIHNiLndyaXRlKCddJyk7CiAgICAgIH0KICAgIH0KICB9CgogIFN0cmluZyBkdW1wKAogICAgICB7U3RyaW5nIGluZGVudGF0aW9uOiAnJywKICAgICAgYm9vbCBpbnN0YW50aWF0ZWRPbmx5OiBmYWxzZSwKICAgICAgQ2xhc3NFbnRpdHkgd2l0aFJlc3BlY3RUb30pIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHByaW50T24oc2IsIGluZGVudGF0aW9uLAogICAgICAgIGluc3RhbnRpYXRlZE9ubHk6IGluc3RhbnRpYXRlZE9ubHksIHdpdGhSZXNwZWN0VG86IHdpdGhSZXNwZWN0VG8pOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBjbHMudG9TdHJpbmcoKTsKfQoKLy8vIE9iamVjdCBob2xkaW5nIHRoZSBzdWJjbGFzcyBhbmQgc3VidHlwZSByZWxhdGlvbiBmb3IgYSBzaW5nbGUKLy8vIFtDbGFzc0VudGl0eV0uCi8vLwovLy8gVGhlIHN1YmNsYXNzIHJlbGF0aW9uIGZvciBhIGNsYXNzIGBDYCBpcyBtb2RlbGxlZCB0aHJvdWdoIGEgcmVmZXJlbmNlIHRvCi8vLyB0aGUgW0NsYXNzSGllcmFyY2h5Tm9kZV0gZm9yIGBDYCBpbiB0aGUgZ2xvYmFsIFtDbGFzc0hpZXJhcmNoeU5vZGVdIHRyZWUKLy8vIGNvbXB1dGVkIGluIFtXb3JsZF0uCi8vLwovLy8gVGhlIHN1YnR5cGUgcmVsYXRpb24gZm9yIGEgY2xhc3MgYENgIGlzIG1vZGVsbGVkIHRocm91Z2ggYSBjb2xsZWN0aW9uIG9mCi8vLyBkaXNqb2ludCBbQ2xhc3NIaWVyYXJjaHlOb2RlXSBzdWJ0cmVlcy4gVGhlIHN1YmNsYXNzZXMgb2YgYENgLCBtb2RlbGxlZAovLy8gdGhyb3VnaCB0aGUgYWZvcmVtZW50aW9uZWQgW0NsYXNzSGllcmFyY2h5Tm9kZV0gcG9pbnRlciwgYXJlIGV4dGVuZGVkIHdpdGgKLy8vIHRoZSBzdWJ0eXBlcyB0aGF0IGRvIG5vdCBleHRlbmQgYENgIHRocm91Z2ggYSBsaXN0IG9mIGFkZGl0aW9uYWwKLy8vIFtDbGFzc0hpZXJhcmNoeU5vZGVdIG5vZGVzLiBUaGlzIGxpc3QgaXMgbm9ybWFsaXplZCB0byBjb250YWluIG9ubHkgdGhlCi8vLyBub2RlcyBmb3IgdGhlIHRvcG1vc3Qgc3VidHlwZXMgYW5kIGlzIGZ1cnRoZXJtb3JlIG9yZGVyZWQgaW4gaW5jcmVhc2luZwovLy8gaGllcmFyY2h5IGRlcHRoIG9yZGVyLgovLy8KLy8vIEZvciB0aGlzIGNsYXNzIGhpZXJhcmNoeToKLy8vCi8vLyAgICAgY2xhc3MgQSB7fQovLy8gICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHt9Ci8vLyAgICAgY2xhc3MgQyBpbXBsZW1lbnRzIEIge30KLy8vICAgICBjbGFzcyBEIGltcGxlbWVudHMgQSB7fQovLy8gICAgIGNsYXNzIEUgZXh0ZW5kcyBEIHt9Ci8vLyAgICAgY2xhc3MgRiBpbXBsZW1lbnRzIEQge30KLy8vCi8vLyB0aGUgW0NsYXNzSGllcmFyY2h5Tm9kZV0gdHJlZSBpcwovLy8KLy8vICAgICAgIE9iamVjdAovLy8gICAgICAvIHwgIHwgXAovLy8gICAgIEEgIEMgIEQgIEYKLy8vICAgICB8ICAgICB8Ci8vLyAgICAgQiAgICAgRQovLy8KLy8vIGFuZCB0aGUgW0NsYXNzU2V0XSBmb3IgYEFgIGhvbGRzIHRoZXNlIFtDbGFzc0hpZXJhcmNoeU5vZGVdIG5vZGVzOgovLy8KLy8vICAgICAgQSAgLT4gIFtDLCBELCBGXQovLy8KLy8vIFRoZSBzdWJ0eXBlcyBgQmAgYW5kIGBFYCBhcmUgbm90IGRpcmVjdGx5IG1vZGVsZWQgYmVjYXVzZSB0aGV5IGFyZSBpbXBsaWVkCi8vLyBieSB0aGVpciBzdWJjbGFzcyByZWxhdGlvbiB0byBgQWAgYW5kIGBEYCwgcmVzcGVjdGl2ZWx5LiBUaGlzIGNhbiBiZSBzZWVuCi8vLyBpZiB3ZSBleHBhbmQgdGhlIHN1YmNsYXNzIHN1YnRyZWVzOgovLy8KLy8vICAgICAgQSAgLT4gIFtDLCBELCBGXQovLy8gICAgICB8ICAgICAgICAgIHwKLy8vICAgICAgQiAgICAgICAgICBFCi8vLwpjbGFzcyBDbGFzc1NldCB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtDbGFzc1NldF0gb2JqZWN0cyBpbiBhIGRlYnVnZ2luZwogIC8vLyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjbGFzcy1zZXQnOwoKICBmaW5hbCBDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZTsKICBDbGFzc0VudGl0eSBfbGVhc3RVcHBlckluc3RhbnRpYXRlZFN1YnR5cGU7CgogIC8vLyBBIGxpc3Qgb2YgdGhlIGNsYXNzIGhpZXJhcmNoeSBub2RlcyBmb3IgdGhlIHN1YnR5cGVzIHRoYXQgZGVjbGFyZSBhCiAgLy8vIHN1YnR5cGUgcmVsYXRpb25zaGlwIHRvIFtjbHNdIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UKICAvLy8KICAvLy8gICAgIGNsYXNzIEEge30KICAvLy8gICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHt9CiAgLy8vICAgICBjbGFzcyBDIGltcGxlbWVudHMgQiB7fQogIC8vLyAgICAgY2xhc3MgRCBpbXBsZW1lbnRzIEEge30KICAvLy8gICAgIGNsYXNzIEUgZXh0ZW5kcyBEIHt9CiAgLy8vCiAgLy8vIFRoZSBjbGFzcyBoaWVyYXJjaHkgbm9kZXMgZm9yIGNsYXNzZXMgYENgIGFuZCBgRGAgYXJlIGluIFtfc3VidHlwZXNdLiBgQ2AKICAvLy8gYmVjYXVzZSBpdCBpbXBsZW1lbnRzIGBBYCB0aHJvdWdoIGBCYCBhbmQgYERgIGJlY2F1c2UgaXQgaW1wbGVtZW50cyBgQWAKICAvLy8gZGlyZWN0bHkuIGBFYCBhbHNvIGltcGxlbWVudHMgYEFgIHRocm91Z2ggaXRzIGV4dGVuc2lvbiBvZiBgRGAgYW5kIGl0IGlzCiAgLy8vIHRoZXJlZm9yZSBpbmNsdWRlZCB0aHJvdWdoIHRoZSBjbGFzcyBoaWVyYXJjaHkgbm9kZSBmb3IgYERgLgogIC8vLwogIExpc3Q8Q2xhc3NIaWVyYXJjaHlOb2RlPiBfc3VidHlwZXM7CgogIC8vLyBBIGxpc3Qgb2YgdGhlIGNsYXNzIGhpZXJhcmNoeSBub2RlcyBmb3IgdGhlIGNsYXNzIHRoYXQgZGlyZWN0bHkgbWl4IGluCiAgLy8vIFtjbHNdLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UKICAvLy8KICAvLy8gICAgIGNsYXNzIEEge30KICAvLy8gICAgIGNsYXNzIEIgZXh0ZW5kcyBPYmplY3Qgd2l0aCBBIHt9CiAgLy8vICAgICBjbGFzcyBDID0gT2JqZWN0IHdpdGggQTsKICAvLy8gICAgIGNsYXNzIEQgZXh0ZW5kcyBCIHt9CiAgLy8vICAgICBjbGFzcyBFIGV4dGVuZHMgQyB7fQogIC8vLwogIC8vLyBUaGUgY2xhc3MgaGllcmFyY2h5IG5vZGVzIGZvciB0aGUgdW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbiBgT2JqZWN0K0FgIGFuZAogIC8vLyB0aGUgbmFtZWQgbWl4aW4gYXBwbGljYXRpb24gYENgIGFyZSBpbiBbX21peGluQXBwbGljYXRpb25zXS4KICAvLy8KICBMaXN0PENsYXNzSGllcmFyY2h5Tm9kZT4gX21peGluQXBwbGljYXRpb25zOwoKICBDbGFzc1NldCh0aGlzLm5vZGUpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0NsYXNzU2V0XSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IENsYXNzU2V0LnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgRGF0YVNvdXJjZSBzb3VyY2UsIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NIaWVyYXJjaHlOb2RlPiBub2RlTWFwKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlID0gbm9kZU1hcFtzb3VyY2UucmVhZENsYXNzKCldOwogICAgTGlzdDxDbGFzc0hpZXJhcmNoeU5vZGU+IHN1YnR5cGVzID0gc291cmNlLnJlYWRMaXN0KCgpIHsKICAgICAgcmV0dXJuIG5vZGVNYXBbc291cmNlLnJlYWRDbGFzcygpXTsKICAgIH0sIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIExpc3Q8Q2xhc3NIaWVyYXJjaHlOb2RlPiBtaXhpbkFwcGxpY2F0aW9ucyA9IHNvdXJjZS5yZWFkTGlzdCgoKSB7CiAgICAgIHJldHVybiBub2RlTWFwW3NvdXJjZS5yZWFkQ2xhc3MoKV07CiAgICB9LCBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IENsYXNzU2V0KG5vZGUpCiAgICAgIC4uX3N1YnR5cGVzID0gc3VidHlwZXMKICAgICAgLi5fbWl4aW5BcHBsaWNhdGlvbnMgPSBtaXhpbkFwcGxpY2F0aW9uczsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0NsYXNzU2V0XSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUNsYXNzKG5vZGUuY2xzKTsKICAgIHNpbmsud3JpdGVMaXN0KF9zdWJ0eXBlcywgKENsYXNzSGllcmFyY2h5Tm9kZSBub2RlKSB7CiAgICAgIHNpbmsud3JpdGVDbGFzcyhub2RlLmNscyk7CiAgICB9LCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX21peGluQXBwbGljYXRpb25zLCAoQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUpIHsKICAgICAgc2luay53cml0ZUNsYXNzKG5vZGUuY2xzKTsKICAgIH0sIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQ2xhc3NFbnRpdHkgZ2V0IGNscyA9PiBub2RlLmNsczsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGBvdGhlci5jbHNgIGlzIGEgc3ViY2xhc3Mgb2YgW2Nsc10uCiAgYm9vbCBoYXNTdWJjbGFzcyhDbGFzc0hpZXJhcmNoeU5vZGUgb3RoZXIpID0+IG5vZGUuaGFzU3ViY2xhc3Mob3RoZXIpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYG90aGVyLmNsc2AgaXMgYSBzdWJ0eXBlIG9mIFtjbHNdLgogIGJvb2wgaGFzU3VidHlwZShDbGFzc0hpZXJhcmNoeU5vZGUgb3RoZXIpIHsKICAgIGlmIChoYXNTdWJjbGFzcyhvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKF9zdWJ0eXBlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YnR5cGVOb2RlIGluIF9zdWJ0eXBlcykgewogICAgICAgIGlmIChzdWJ0eXBlTm9kZS5oYXNTdWJjbGFzcyhvdGhlcikpIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGRpcmVjdGx5IGluc3RhbnRpYXRlZCBzdWJ0eXBlcyBvZiBbY2xzXS4KICBpbnQgZ2V0IGluc3RhbnRpYXRlZFN1YnR5cGVDb3VudCB7CiAgICBpbnQgY291bnQgPSBub2RlLmluc3RhbnRpYXRlZFN1YmNsYXNzQ291bnQ7CiAgICBpZiAoX3N1YnR5cGVzICE9IG51bGwpIHsKICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgc3VidHlwZU5vZGUgaW4gX3N1YnR5cGVzKSB7CiAgICAgICAgaWYgKHN1YnR5cGVOb2RlLmlzRXhwbGljaXRseUluc3RhbnRpYXRlZCkgewogICAgICAgICAgY291bnQrKzsKICAgICAgICB9CiAgICAgICAgY291bnQgKz0gc3VidHlwZU5vZGUuaW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvdW50OwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGFsbCBpbnN0YW50aWF0ZWQgc3VidHlwZXMgb2YgW2Nsc10gYXJlIHN1YmNsYXNzZXMgb2YKICAvLy8gW2Nsc10uCiAgYm9vbCBnZXQgaGFzT25seUluc3RhbnRpYXRlZFN1YmNsYXNzZXMgewogICAgaWYgKF9zdWJ0eXBlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YnR5cGVOb2RlIGluIF9zdWJ0eXBlcykgewogICAgICAgIGlmIChzdWJ0eXBlTm9kZS5pc0luc3RhbnRpYXRlZCkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICAvLy8gUmV0dXJucyBhbiBbSXRlcmFibGVdIG9mIHRoZSBjbGFzc2VzIHRoYXQgaW1wbGVtZW50IFtjbHNdIGRpcmVjdGx5IG9yCiAgLy8vIHRocm91Z2ggc3VwZXJ0eXBlcy4KICAvLy8KICAvLy8gQSBjbGFzcyB0aGF0IGltcGxlbWVudHMgW2Nsc10gdGhyb3VnaCBpdHMgc3VwZXJjbGFzc2VzIGlzIG5vdCBpbmNsdWRlZCBpbgogIC8vLyB0aGUgaXRlcmFibGUuCiAgSXRlcmFibGU8Q2xhc3NIaWVyYXJjaHlOb2RlPiBnZXQgc3VidHlwZU5vZGVzIHsKICAgIHJldHVybiBfc3VidHlwZXMgPz8gY29uc3QgPENsYXNzSGllcmFyY2h5Tm9kZT5bXTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIFtJdGVyYWJsZV0gb2YgdGhlIGNsYXNzZXMgdGhhdCBtaXggaW4gW2Nsc10gZGlyZWN0bHkuCiAgSXRlcmFibGU8Q2xhc3NIaWVyYXJjaHlOb2RlPiBnZXQgbWl4aW5BcHBsaWNhdGlvbk5vZGVzIHsKICAgIHJldHVybiBfbWl4aW5BcHBsaWNhdGlvbnMgPz8gY29uc3QgPENsYXNzSGllcmFyY2h5Tm9kZT5bXTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIFtJdGVyYWJsZV0gb2YgdGhlIHN1YmNsYXNzZXMgb2YgW2Nsc10gcG9zc2libHkgaW5jbHVkaW5nIFtjbHNdLgogIC8vLwogIC8vLyBTdWJjbGFzc2VzIGFyZSBpbmNsdWRlZCBpZiB0aGVpciBpbnN0YW50aWF0aW9uIHByb3BlcnRpZXMgaW50ZXJzZWN0IHdpdGgKICAvLy8gdGhlaXIgY29ycmVzcG9uZGluZyBbSW5zdGFudGlhdGlvbl0gdmFsdWVzIGluIFttYXNrXS4gSWYgW3N0cmljdF0gaXMKICAvLy8gYHRydWVgLCBbY2xzXSBpdHNlbGYgaXMgX25vdF8gcmV0dXJuZWQuCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHN1YmNsYXNzZXNCeU1hc2soRW51bVNldDxJbnN0YW50aWF0aW9uPiBtYXNrLAogICAgICB7Ym9vbCBzdHJpY3Q6IGZhbHNlfSkgewogICAgcmV0dXJuIG5vZGUuc3ViY2xhc3Nlc0J5TWFzayhtYXNrLCBzdHJpY3Q6IHN0cmljdCk7CiAgfQoKICAvLy8gUmV0dXJucyBhbiBbSXRlcmFibGVdIG9mIHRoZSBzdWJ0eXBlcyBvZiBbY2xzXSBwb3NzaWJseSBpbmNsdWRpbmcgW2Nsc10uCiAgLy8vCiAgLy8vIFRoZSBkaXJlY3RseSBpbnN0YW50aWF0ZWQsIGluZGlyZWN0bHkgaW5zdGFudGlhdGVkIGFuZCB1bmluc3RhbnRpYXRlZAogIC8vLyBzdWJ0eXBlcyBvZiBbY2xzXSBhcmUgcmV0dXJuZWQgaWYgW2luY2x1ZGVEaXJlY3RseUluc3RhbnRpYXRlZF0sCiAgLy8vIFtpbmNsdWRlSW5kaXJlY3RseUluc3RhbnRpYXRlZF0sIGFuZCBbaW5jbHVkZVVuaW5zdGFudGlhdGVkXSBhcmUgYHRydWVgLAogIC8vLyByZXNwZWN0aXZlbHkuIElmIFtzdHJpY3RdIGlzIGB0cnVlYCwgW2Nsc10gaXRzZWxmIGlzIF9ub3RfIHJldHVybmVkLgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBzdWJ0eXBlcygKICAgICAge2Jvb2wgaW5jbHVkZURpcmVjdGx5SW5zdGFudGlhdGVkOiB0cnVlLAogICAgICBib29sIGluY2x1ZGVJbmRpcmVjdGx5SW5zdGFudGlhdGVkOiB0cnVlLAogICAgICBib29sIGluY2x1ZGVVbmluc3RhbnRpYXRlZDogdHJ1ZSwKICAgICAgYm9vbCBzdHJpY3Q6IGZhbHNlfSkgewogICAgRW51bVNldDxJbnN0YW50aWF0aW9uPiBtYXNrID0gQ2xhc3NIaWVyYXJjaHlOb2RlLmNyZWF0ZU1hc2soCiAgICAgICAgaW5jbHVkZURpcmVjdGx5SW5zdGFudGlhdGVkOiBpbmNsdWRlRGlyZWN0bHlJbnN0YW50aWF0ZWQsCiAgICAgICAgaW5jbHVkZUluZGlyZWN0bHlJbnN0YW50aWF0ZWQ6IGluY2x1ZGVJbmRpcmVjdGx5SW5zdGFudGlhdGVkLAogICAgICAgIGluY2x1ZGVVbmluc3RhbnRpYXRlZDogaW5jbHVkZVVuaW5zdGFudGlhdGVkKTsKICAgIHJldHVybiBzdWJ0eXBlc0J5TWFzayhtYXNrLCBzdHJpY3Q6IHN0cmljdCk7CiAgfQoKICAvLy8gUmV0dXJucyBhbiBbSXRlcmFibGVdIG9mIHRoZSBzdWJ0eXBlcyBvZiBbY2xzXSBwb3NzaWJseSBpbmNsdWRpbmcgW2Nsc10uCiAgLy8vCiAgLy8vIFN1YnR5cGVzIGFyZSBpbmNsdWRlZCBpZiB0aGVpciBpbnN0YW50aWF0aW9uIHByb3BlcnRpZXMgaW50ZXJzZWN0IHdpdGgKICAvLy8gdGhlaXIgY29ycmVzcG9uZGluZyBbSW5zdGFudGlhdGlvbl0gdmFsdWVzIGluIFttYXNrXS4gSWYgW3N0cmljdF0gaXMKICAvLy8gYHRydWVgLCBbY2xzXSBpdHNlbGYgaXMgX25vdF8gcmV0dXJuZWQuCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHN1YnR5cGVzQnlNYXNrKEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gbWFzaywKICAgICAge2Jvb2wgc3RyaWN0OiBmYWxzZX0pIHsKICAgIGlmIChfc3VidHlwZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gbm9kZS5zdWJjbGFzc2VzQnlNYXNrKG1hc2ssIHN0cmljdDogc3RyaWN0KTsKICAgIH0KCiAgICByZXR1cm4gbmV3IFN1YnR5cGVzSXRlcmFibGUuU3VidHlwZXNJdGVyYXRvcih0aGlzLCBtYXNrLAogICAgICAgIGluY2x1ZGVSb290OiAhc3RyaWN0KTsKICB9CgogIC8vLyBBcHBsaWVzIFtwcmVkaWNhdGVdIHRvIGVhY2ggc3ViY2xhc3Mgb2YgW2Nsc10gbWF0Y2hpbmcgdGhlIGNyaXRlcmlhCiAgLy8vIHNwZWNpZmllZCBieSBbbWFza10gYW5kIFtzdHJpY3RdLiBJZiBbcHJlZGljYXRlXSByZXR1cm5zIGB0cnVlYCBvbiBhCiAgLy8vIGNsYXNzLCB2aXNpdGF0aW9uIGlzIHN0b3BwZWQgaW1tZWRpYXRlbHkgYW5kIHRoZSBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYC4KICAvLy8KICAvLy8gW3ByZWRpY2F0ZV0gaXMgYXBwbGllZCB0byBzdWJjbGFzc2VzIGlmIHRoZWlyIGluc3RhbnRpYXRpb24gcHJvcGVydGllcwogIC8vLyBpbnRlcnNlY3Qgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIFtJbnN0YW50aWF0aW9uXSB2YWx1ZXMgaW4gW21hc2tdLiBJZgogIC8vLyBbc3RyaWN0XSBpcyBgdHJ1ZWAsIFtwcmVkaWNhdGVdIGlzIF9ub3RfIGNhbGxlZCBvbiBbY2xzXSBpdHNlbGYuCiAgYm9vbCBhbnlTdWJjbGFzcyhib29sIHByZWRpY2F0ZShDbGFzc0VudGl0eSBjbHMpLCBFbnVtU2V0PEluc3RhbnRpYXRpb24+IG1hc2ssCiAgICAgIHtib29sIHN0cmljdDogZmFsc2V9KSB7CiAgICByZXR1cm4gbm9kZS5hbnlTdWJjbGFzcyhwcmVkaWNhdGUsIG1hc2ssIHN0cmljdDogc3RyaWN0KTsKICB9CgogIC8vLyBBcHBsaWVzIFtmXSB0byBlYWNoIHN1YmNsYXNzIG9mIFtjbHNdIG1hdGNoaW5nIHRoZSBjcml0ZXJpYSBzcGVjaWZpZWQgYnkKICAvLy8gW21hc2tdIGFuZCBbc3RyaWN0XS4KICAvLy8KICAvLy8gW2ZdIGlzIGEgYXBwbGllZCB0byBzdWJjbGFzc2VzIGlmIHRoZWlyIGluc3RhbnRpYXRpb24gcHJvcGVydGllcyBpbnRlcnNlY3QKICAvLy8gd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIFtJbnN0YW50aWF0aW9uXSB2YWx1ZXMgaW4gW21hc2tdLiBJZiBbc3RyaWN0XSBpcwogIC8vLyBgdHJ1ZWAsIFtmXSBpcyBfbm90XyBjYWxsZWQgb24gW2Nsc10gaXRzZWxmLgogIC8vLwogIC8vLyBUaGUgdmlzaXRhdGlvbiBvZiBzdWJjbGFzc2VzIGNhbiBiZSBjdXQgc2hvcnQgYnkgdGhlIHJldHVybiB2YWx1ZSBvZiBbZl0uCiAgLy8vIElmIFtGb3JFYWNoLlNUT1BdIGlzIHJldHVybmVkLCBubyBmdXJ0aGVyIGNsYXNzZXMgYXJlIHZpc2l0ZWQgYW5kIHRoZQogIC8vLyBmdW5jdGlvbiBzdG9wcyBpbW1lZGlhdGVseS4gSWYgW0ZvckVhY2guU0tJUF9TVUJDTEFTU0VTXSBpcyByZXR1cm5lZCwgdGhlCiAgLy8vIHN1YmNsYXNzZXMgb2YgdGhlIGxhc3QgdmlzaXRlZCBjbGFzcyBhcmUgc2tpcHBlZCwgYnV0IHZpc2l0YXRpb24KICAvLy8gY29udGludWVzLiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBpcyBlaXRoZXIgW0ZvckVhY2guU1RPUF0sIGlmCiAgLy8vIHZpc2l0YXRpb24gd2FzIHN0b3BwZWQsIG9yIFtGb3JFYWNoLkNPTlRJTlVFXSBpZiB2aXNpdGF0aW9uIGNvbnRpbnVlZCB0bwogIC8vLyB0aGUgZW5kLgogIEl0ZXJhdGlvblN0ZXAgZm9yRWFjaFN1YmNsYXNzKEZvckVhY2hGdW5jdGlvbiBmLCBFbnVtU2V0PEluc3RhbnRpYXRpb24+IG1hc2ssCiAgICAgIHtib29sIHN0cmljdDogZmFsc2V9KSB7CiAgICByZXR1cm4gbm9kZS5mb3JFYWNoU3ViY2xhc3MoZiwgbWFzaywgc3RyaWN0OiBzdHJpY3QpOwogIH0KCiAgLy8vIEFwcGxpZXMgW3ByZWRpY2F0ZV0gdG8gZWFjaCBzdWJ0eXBlIG9mIFtjbHNdIG1hdGNoaW5nIHRoZSBjcml0ZXJpYQogIC8vLyBzcGVjaWZpZWQgYnkgW21hc2tdIGFuZCBbc3RyaWN0XS4gSWYgW3ByZWRpY2F0ZV0gcmV0dXJucyBgdHJ1ZWAgb24gYQogIC8vLyBjbGFzcywgdmlzaXRhdGlvbiBpcyBzdG9wcGVkIGltbWVkaWF0ZWx5IGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAuCiAgLy8vCiAgLy8vIFtwcmVkaWNhdGVdIGlzIGFwcGxpZWQgdG8gc3VidHlwZXMgaWYgdGhlaXIgaW5zdGFudGlhdGlvbiBwcm9wZXJ0aWVzCiAgLy8vIGludGVyc2VjdCB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgW0luc3RhbnRpYXRpb25dIHZhbHVlcyBpbiBbbWFza10uIElmCiAgLy8vIFtzdHJpY3RdIGlzIGB0cnVlYCwgW3ByZWRpY2F0ZV0gaXMgX25vdF8gY2FsbGVkIG9uIFtjbHNdIGl0c2VsZi4KICBib29sIGFueVN1YnR5cGUoYm9vbCBwcmVkaWNhdGUoQ2xhc3NFbnRpdHkgY2xzKSwgRW51bVNldDxJbnN0YW50aWF0aW9uPiBtYXNrLAogICAgICB7Ym9vbCBzdHJpY3Q6IGZhbHNlfSkgewogICAgSXRlcmF0aW9uU3RlcCB3cmFwcGVyKENsYXNzRW50aXR5IGNscykgewogICAgICByZXR1cm4gcHJlZGljYXRlKGNscykgPyBJdGVyYXRpb25TdGVwLlNUT1AgOiBJdGVyYXRpb25TdGVwLkNPTlRJTlVFOwogICAgfQoKICAgIHJldHVybiBmb3JFYWNoU3VidHlwZSh3cmFwcGVyLCBtYXNrLCBzdHJpY3Q6IHN0cmljdCkgPT0gSXRlcmF0aW9uU3RlcC5TVE9QOwogIH0KCiAgLy8vIEFwcGxpZXMgW2ZdIHRvIGVhY2ggc3VidHlwZSBvZiBbY2xzXSBtYXRjaGluZyB0aGUgY3JpdGVyaWEgc3BlY2lmaWVkIGJ5CiAgLy8vIFttYXNrXSBhbmQgW3N0cmljdF0uCiAgLy8vCiAgLy8vIFtmXSBpcyBhIGFwcGxpZWQgdG8gc3VidHlwZXMgaWYgdGhlaXIgaW5zdGFudGlhdGlvbiBwcm9wZXJ0aWVzIGludGVyc2VjdAogIC8vLyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgW0luc3RhbnRpYXRpb25dIHZhbHVlcyBpbiBbbWFza10uIElmIFtzdHJpY3RdIGlzCiAgLy8vIGB0cnVlYCwgW2ZdIGlzIF9ub3RfIGNhbGxlZCBvbiBbY2xzXSBpdHNlbGYuCiAgLy8vCiAgLy8vIFRoZSB2aXNpdGF0aW9uIG9mIHN1YnR5cGVzIGNhbiBiZSBjdXQgc2hvcnQgYnkgdGhlIHJldHVybiB2YWx1ZSBvZiBbZl0uCiAgLy8vIElmIFtGb3JFYWNoLlNUT1BdIGlzIHJldHVybmVkLCBubyBmdXJ0aGVyIGNsYXNzZXMgYXJlIHZpc2l0ZWQgYW5kIHRoZQogIC8vLyBmdW5jdGlvbiBzdG9wcyBpbW1lZGlhdGVseS4gSWYgW0ZvckVhY2guU0tJUF9TVUJDTEFTU0VTXSBpcyByZXR1cm5lZCwgdGhlCiAgLy8vIHN1YmNsYXNzZXMgb2YgdGhlIGxhc3QgdmlzaXRlZCBjbGFzcyBhcmUgc2tpcHBlZCwgYnV0IHZpc2l0YXRpb24KICAvLy8gY29udGludWVzLiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmdW5jdGlvbiBpcyBlaXRoZXIgW0ZvckVhY2guU1RPUF0sIGlmCiAgLy8vIHZpc2l0YXRpb24gd2FzIHN0b3BwZWQsIG9yIFtGb3JFYWNoLkNPTlRJTlVFXSBpZiB2aXNpdGF0aW9uIGNvbnRpbnVlZCB0bwogIC8vLyB0aGUgZW5kLgogIEl0ZXJhdGlvblN0ZXAgZm9yRWFjaFN1YnR5cGUoRm9yRWFjaEZ1bmN0aW9uIGYsIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gbWFzaywKICAgICAge2Jvb2wgc3RyaWN0OiBmYWxzZX0pIHsKICAgIEl0ZXJhdGlvblN0ZXAgbmV4dFN0ZXAgPQogICAgICAgIG5vZGUuZm9yRWFjaFN1YmNsYXNzKGYsIG1hc2ssIHN0cmljdDogc3RyaWN0KSA/PyBJdGVyYXRpb25TdGVwLkNPTlRJTlVFOwogICAgaWYgKG5leHRTdGVwID09IEl0ZXJhdGlvblN0ZXAuQ09OVElOVUUgJiYgX3N1YnR5cGVzICE9IG51bGwpIHsKICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgc3ViY2xhc3MgaW4gX3N1YnR5cGVzKSB7CiAgICAgICAgSXRlcmF0aW9uU3RlcCBzdWJGb3JFYWNoID0gc3ViY2xhc3MuZm9yRWFjaFN1YmNsYXNzKGYsIG1hc2spOwogICAgICAgIGlmIChzdWJGb3JFYWNoID09IEl0ZXJhdGlvblN0ZXAuU1RPUCkgewogICAgICAgICAgcmV0dXJuIHN1YkZvckVhY2g7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhc3NlcnQobmV4dFN0ZXAgIT0gSXRlcmF0aW9uU3RlcC5TS0lQX1NVQkNMQVNTRVMpOwogICAgcmV0dXJuIG5leHRTdGVwOwogIH0KCiAgLy8vIEFkZHMgW3N1YnR5cGVdIGFzIGEgc3VidHlwZSBvZiBbY2xzXS4KICB2b2lkIGFkZFN1YnR5cGUoQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YnR5cGUpIHsKICAgIGlmIChub2RlLmNvbnRhaW5zKHN1YnR5cGUpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChfc3VidHlwZXMgPT0gbnVsbCkgewogICAgICBfc3VidHlwZXMgPSA8Q2xhc3NIaWVyYXJjaHlOb2RlPltzdWJ0eXBlXTsKICAgIH0gZWxzZSB7CiAgICAgIGludCBoaWVyYXJjaHlEZXB0aCA9IHN1YnR5cGUuaGllcmFyY2h5RGVwdGg7CiAgICAgIExpc3Q8Q2xhc3NIaWVyYXJjaHlOb2RlPiBuZXdTdWJ0eXBlcyA9IDxDbGFzc0hpZXJhcmNoeU5vZGU+W107CiAgICAgIGJvb2wgYWRkZWQgPSBmYWxzZTsKICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgb3RoZXJTdWJ0eXBlIGluIF9zdWJ0eXBlcykgewogICAgICAgIGludCBvdGhlckhpZXJhcmNoeURlcHRoID0gb3RoZXJTdWJ0eXBlLmhpZXJhcmNoeURlcHRoOwogICAgICAgIGlmIChoaWVyYXJjaHlEZXB0aCA9PSBvdGhlckhpZXJhcmNoeURlcHRoKSB7CiAgICAgICAgICBpZiAoc3VidHlwZSA9PSBvdGhlclN1YnR5cGUpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gW290aGVyU3VidHlwZV0gaXMgdW5yZWxhdGVkIHRvIFtzdWJ0eXBlXS4KICAgICAgICAgICAgbmV3U3VidHlwZXMuYWRkKG90aGVyU3VidHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChoaWVyYXJjaHlEZXB0aCA+IG90aGVyU3VidHlwZS5oaWVyYXJjaHlEZXB0aCkgewogICAgICAgICAgLy8gW290aGVyU3VidHlwZV0gY291bGQgYmUgYSBzdXBlcmNsYXNzIG9mIFtzdWJ0eXBlXS4KICAgICAgICAgIGlmIChvdGhlclN1YnR5cGUuY29udGFpbnMoc3VidHlwZSkpIHsKICAgICAgICAgICAgLy8gW3N1YnR5cGVdIGlzIGFscmVhZHkgaW4gdGhpcyBzZXQuCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFtvdGhlclN1YnR5cGVdIGlzIHVucmVsYXRlZCB0byBbc3VidHlwZV0uCiAgICAgICAgICAgIG5ld1N1YnR5cGVzLmFkZChvdGhlclN1YnR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoIWFkZGVkKSB7CiAgICAgICAgICAgIC8vIEluc2VydCBbc3VidHlwZV0gYmVmb3JlIG90aGVyIHN1YnR5cGVzIG9mIGhpZ2hlciBoaWVyYXJjaHkgZGVwdGguCiAgICAgICAgICAgIG5ld1N1YnR5cGVzLmFkZChzdWJ0eXBlKTsKICAgICAgICAgICAgYWRkZWQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgLy8gW3N1YnR5cGVdIGNvdWxkIGJlIGEgc3VwZXJjbGFzcyBvZiBbb3RoZXJTdWJ0eXBlXS4KICAgICAgICAgIGlmIChzdWJ0eXBlLmNvbnRhaW5zKG90aGVyU3VidHlwZSkpIHsKICAgICAgICAgICAgLy8gUmVwbGFjZSBbb3RoZXJTdWJ0eXBlXS4KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG5ld1N1YnR5cGVzLmFkZChvdGhlclN1YnR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIWFkZGVkKSB7CiAgICAgICAgbmV3U3VidHlwZXMuYWRkKHN1YnR5cGUpOwogICAgICB9CiAgICAgIF9zdWJ0eXBlcyA9IG5ld1N1YnR5cGVzOwogICAgfQogIH0KCiAgLy8vIEFkZHMgW21peGluQXBwbGljYXRpb25dIGFzIGEgY2xhc3MgdGhhdCBtaXhlcyBpbiBbY2xzXS4KICB2b2lkIGFkZE1peGluQXBwbGljYXRpb24oQ2xhc3NIaWVyYXJjaHlOb2RlIG1peGluQXBwbGljYXRpb24pIHsKICAgIGlmIChfbWl4aW5BcHBsaWNhdGlvbnMgPT0gbnVsbCkgewogICAgICBfbWl4aW5BcHBsaWNhdGlvbnMgPSA8Q2xhc3NIaWVyYXJjaHlOb2RlPlttaXhpbkFwcGxpY2F0aW9uXTsKICAgIH0gZWxzZSB7CiAgICAgIF9taXhpbkFwcGxpY2F0aW9ucy5hZGQobWl4aW5BcHBsaWNhdGlvbik7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbW9zdCBzcGVjaWZpYyBzdWJ0eXBlIG9mIFtjbHNdIChpbmNsdWRpbmcgW2Nsc10pIHRoYXQgaXMKICAvLy8gZGlyZWN0bHkgaW5zdGFudGlhdGVkIG9yIGEgc3VwZXJjbGFzcyBvZiBhbGwgZGlyZWN0bHkgaW5zdGFudGlhdGVkCiAgLy8vIHN1YnR5cGVzLiBJZiBubyBzdWJ0eXBlcyBvZiBbY2xzXSBhcmUgaW5zdGFudGlhdGVkLCBgbnVsbGAgaXMgcmV0dXJuZWQuCiAgQ2xhc3NFbnRpdHkgZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJ0eXBlcygpIHsKICAgIGlmIChfbGVhc3RVcHBlckluc3RhbnRpYXRlZFN1YnR5cGUgPT0gbnVsbCkgewogICAgICBfbGVhc3RVcHBlckluc3RhbnRpYXRlZFN1YnR5cGUgPSBfY29tcHV0ZUxlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJ0eXBlKCk7CiAgICB9CiAgICByZXR1cm4gX2xlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJ0eXBlOwogIH0KCiAgQ2xhc3NFbnRpdHkgX2NvbXB1dGVMZWFzdFVwcGVySW5zdGFudGlhdGVkU3VidHlwZSgpIHsKICAgIGlmIChub2RlLmlzRXhwbGljaXRseUluc3RhbnRpYXRlZCkgewogICAgICByZXR1cm4gY2xzOwogICAgfQogICAgaWYgKF9zdWJ0eXBlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBub2RlLmdldEx1Yk9mSW5zdGFudGlhdGVkU3ViY2xhc3NlcygpOwogICAgfQogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHN1YnR5cGU7CiAgICBpZiAobm9kZS5pc0luc3RhbnRpYXRlZCkgewogICAgICBzdWJ0eXBlID0gbm9kZTsKICAgIH0KICAgIGZvciAoQ2xhc3NIaWVyYXJjaHlOb2RlIHN1Ym5vZGUgaW4gX3N1YnR5cGVzKSB7CiAgICAgIGlmIChzdWJub2RlLmlzSW5zdGFudGlhdGVkKSB7CiAgICAgICAgaWYgKHN1YnR5cGUgPT0gbnVsbCkgewogICAgICAgICAgc3VidHlwZSA9IHN1Ym5vZGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBjbHM7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoc3VidHlwZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiBzdWJ0eXBlLmdldEx1Yk9mSW5zdGFudGlhdGVkU3ViY2xhc3NlcygpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnW1xuJyk7CiAgICBub2RlLnByaW50T24oc2IsICcgICcpOwogICAgc2Iud3JpdGUoJ1xuJyk7CiAgICBpZiAoX3N1YnR5cGVzICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJyAgc3VidHlwZXM6XG4nKTsKICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSBpbiBfc3VidHlwZXMpIHsKICAgICAgICBub2RlLnByaW50T24oc2IsICcgICcpOwogICAgICAgIHNiLndyaXRlKCdcbicpOwogICAgICB9CiAgICB9CiAgICBpZiAoX21peGluQXBwbGljYXRpb25zICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJyAgbWl4aW4tYXBwbGljYXRpb25zOlxuJyk7CiAgICAgIGZvciAoQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUgaW4gX21peGluQXBwbGljYXRpb25zKSB7CiAgICAgICAgbm9kZS5wcmludE9uKHNiLCAnICAnKTsKICAgICAgICBzYi53cml0ZSgnXG4nKTsKICAgICAgfQogICAgfQogICAgc2Iud3JpdGUoJ10nKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIEl0ZXJhYmxlIGZvciBzdWJjbGFzc2VzIG9mIGEgW0NsYXNzSGllcmFyY2h5Tm9kZV0uCmNsYXNzIENsYXNzSGllcmFyY2h5Tm9kZUl0ZXJhYmxlIGV4dGVuZHMgSXRlcmFibGVCYXNlPENsYXNzRW50aXR5PiB7CiAgZmluYWwgQ2xhc3NIaWVyYXJjaHlOb2RlIHJvb3Q7CiAgZmluYWwgRW51bVNldDxJbnN0YW50aWF0aW9uPiBtYXNrOwogIGZpbmFsIGJvb2wgaW5jbHVkZVJvb3Q7CgogIENsYXNzSGllcmFyY2h5Tm9kZUl0ZXJhYmxlKHRoaXMucm9vdCwgdGhpcy5tYXNrLCB7dGhpcy5pbmNsdWRlUm9vdDogdHJ1ZX0pIHsKICAgIGlmIChyb290ID09IG51bGwpIHRocm93IG5ldyBTdGF0ZUVycm9yKCJObyByb290IGZvciBpdGVyYWJsZS4iKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhdG9yPENsYXNzRW50aXR5PiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBDbGFzc0hpZXJhcmNoeU5vZGVJdGVyYXRvcih0aGlzKTsKICB9Cn0KCi8vLyBJdGVyYXRvciBmb3Igc3ViY2xhc3NlcyBvZiBhIFtDbGFzc0hpZXJhcmNoeU5vZGVdLgovLy8KLy8vIENsYXNzZXMgYXJlIHJldHVybmVkIGluIHByZS1vcmRlciBERlMgZmFzaGlvbi4KY2xhc3MgQ2xhc3NIaWVyYXJjaHlOb2RlSXRlcmF0b3IgaW1wbGVtZW50cyBJdGVyYXRvcjxDbGFzc0VudGl0eT4gewogIGZpbmFsIENsYXNzSGllcmFyY2h5Tm9kZUl0ZXJhYmxlIGl0ZXJhYmxlOwoKICAvLy8gVGhlIGNsYXNzIG5vZGUgaG9sZGluZyB0aGUgW2N1cnJlbnRdIGNsYXNzLgogIC8vLwogIC8vLyBUaGlzIGlzIGBudWxsYCBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgdG8gW21vdmVOZXh0XSBhbmQgYXQgdGhlIGVuZCBvZgogIC8vLyBpdGVyYXRpb24sIGkuZS4gYWZ0ZXIgW21vdmVOZXh0XSBoYXMgcmV0dXJuZWQgYGZhbHNlYC4KICBDbGFzc0hpZXJhcmNoeU5vZGUgY3VycmVudE5vZGU7CgogIC8vLyBTdGFjayBvZiBwZW5kaW5nIGNsYXNzIG5vZGVzLgogIC8vLwogIC8vLyBUaGlzIGlzIGBudWxsYCBiZWZvcmUgdGhlIGZpcnN0IGNhbGwgdG8gW21vdmVOZXh0XS4KICBMaXN0PENsYXNzSGllcmFyY2h5Tm9kZT4gc3RhY2s7CgogIENsYXNzSGllcmFyY2h5Tm9kZUl0ZXJhdG9yKHRoaXMuaXRlcmFibGUpOwoKICBDbGFzc0hpZXJhcmNoeU5vZGUgZ2V0IHJvb3QgPT4gaXRlcmFibGUucm9vdDsKCiAgYm9vbCBnZXQgaW5jbHVkZVJvb3QgPT4gaXRlcmFibGUuaW5jbHVkZVJvb3Q7CgogIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gZ2V0IG1hc2sgPT4gaXRlcmFibGUubWFzazsKCiAgYm9vbCBnZXQgaW5jbHVkZVVuaW5zdGFudGlhdGVkIHsKICAgIHJldHVybiBtYXNrLmNvbnRhaW5zKEluc3RhbnRpYXRpb24uVU5JTlNUQU5USUFURUQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGN1cnJlbnQgewogICAgcmV0dXJuIGN1cnJlbnROb2RlICE9IG51bGwgPyBjdXJyZW50Tm9kZS5jbHMgOiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChzdGFjayA9PSBudWxsKSB7CiAgICAgIC8vIEZpcnN0IGNhbGwgdG8gbW92ZU5leHQKICAgICAgc3RhY2sgPSBbcm9vdF07CiAgICAgIHJldHVybiBfZmluZE5leHQoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIEluaXRpYWxpemVkIHN0YXRlLgogICAgICBpZiAoY3VycmVudE5vZGUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4gX2ZpbmROZXh0KCk7CiAgICB9CiAgfQoKICAvLy8gRmluZCB0aGUgbmV4dCBjbGFzcyB1c2luZyB0aGUgW3N0YWNrXS4KICBib29sIF9maW5kTmV4dCgpIHsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChzdGFjay5pc0VtcHR5KSB7CiAgICAgICAgLy8gTm8gbW9yZSBjbGFzc2VzLiBTZXQgW2N1cnJlbnROb2RlXSB0byBgbnVsbGAgdG8gc2lnbmFsIHRoZSBlbmQgb2YKICAgICAgICAvLyBpdGVyYXRpb24uCiAgICAgICAgY3VycmVudE5vZGUgPSBudWxsOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBjdXJyZW50Tm9kZSA9IHN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgaWYgKCFpbmNsdWRlVW5pbnN0YW50aWF0ZWQgJiYgIWN1cnJlbnROb2RlLmlzSW5zdGFudGlhdGVkKSB7CiAgICAgICAgLy8gV2UncmUgb25seSBpdGVyYXRpbmcgaW5zdGFudGlhdGVkIGNsYXNzZXMgc28gdGhlcmUgaXMgbm8gdXNlIGluCiAgICAgICAgLy8gdmlzaXRpbmcgdGhlIGN1cnJlbnQgbm9kZSBhbmQgaXRzIHN1YnRyZWUuCiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgLy8gQWRkIGRpcmVjdCBzdWJjbGFzc2VzIGluIHJldmVyc2Ugb3JkZXIgc28gd2lsbCB2aXNpdCB0aGVtIGluIHRoZSBsaXN0CiAgICAgIC8vIG9yZGVyLgogICAgICBmb3IgKGludCBpID0gY3VycmVudE5vZGUuX2RpcmVjdFN1YmNsYXNzZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICBzdGFjay5hZGQoY3VycmVudE5vZGUuX2RpcmVjdFN1YmNsYXNzZXNbaV0pOwogICAgICB9CiAgICAgIGlmIChfaXNWYWxpZChjdXJyZW50Tm9kZSkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBjbGFzcyBvZiBbbm9kZV0gaXMgYSB2YWxpZCByZXN1bHQgZm9yIHRoaXMgaXRlcmF0b3IuCiAgYm9vbCBfaXNWYWxpZChDbGFzc0hpZXJhcmNoeU5vZGUgbm9kZSkgewogICAgaWYgKCFpbmNsdWRlUm9vdCAmJiBub2RlID09IHJvb3QpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBtYXNrLmludGVyc2VjdHMobm9kZS5fbWFzayk7CiAgfQp9CgovLy8gSXRlcmFibGUgZm9yIHRoZSBzdWJ0eXBlcyBpbiBhIFtDbGFzc1NldF0uCmNsYXNzIFN1YnR5cGVzSXRlcmFibGUgZXh0ZW5kcyBJdGVyYWJsZUJhc2U8Q2xhc3NFbnRpdHk+IHsKICBmaW5hbCBDbGFzc1NldCBzdWJ0eXBlU2V0OwogIGZpbmFsIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gbWFzazsKICBmaW5hbCBib29sIGluY2x1ZGVSb290OwoKICBTdWJ0eXBlc0l0ZXJhYmxlLlN1YnR5cGVzSXRlcmF0b3IodGhpcy5zdWJ0eXBlU2V0LCB0aGlzLm1hc2ssCiAgICAgIHt0aGlzLmluY2x1ZGVSb290OiB0cnVlfSk7CgogIEBvdmVycmlkZQogIEl0ZXJhdG9yPENsYXNzRW50aXR5PiBnZXQgaXRlcmF0b3IgPT4gbmV3IFN1YnR5cGVzSXRlcmF0b3IodGhpcyk7Cn0KCi8vLyBJdGVyYXRvciBmb3IgdGhlIHN1YnR5cGVzIGluIGEgW0NsYXNzU2V0XS4KY2xhc3MgU3VidHlwZXNJdGVyYXRvciBleHRlbmRzIEl0ZXJhdG9yPENsYXNzRW50aXR5PiB7CiAgZmluYWwgU3VidHlwZXNJdGVyYWJsZSBpdGVyYWJsZTsKICBJdGVyYXRvcjxDbGFzc0VudGl0eT4gZWxlbWVudHM7CiAgSXRlcmF0b3I8Q2xhc3NIaWVyYXJjaHlOb2RlPiBoaWVyYXJjaHlOb2RlczsKCiAgU3VidHlwZXNJdGVyYXRvcih0aGlzLml0ZXJhYmxlKTsKCiAgYm9vbCBnZXQgaW5jbHVkZVJvb3QgPT4gaXRlcmFibGUuaW5jbHVkZVJvb3Q7CgogIEVudW1TZXQ8SW5zdGFudGlhdGlvbj4gZ2V0IG1hc2sgPT4gaXRlcmFibGUubWFzazsKCiAgQG92ZXJyaWRlCiAgQ2xhc3NFbnRpdHkgZ2V0IGN1cnJlbnQgewogICAgaWYgKGVsZW1lbnRzICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGVsZW1lbnRzLmN1cnJlbnQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoZWxlbWVudHMgPT0gbnVsbCAmJiBoaWVyYXJjaHlOb2RlcyA9PSBudWxsKSB7CiAgICAgIC8vIEluaXRpYWwgc3RhdGUuIEl0ZXJhdGUgdGhyb3VnaCBzdWJjbGFzc2VzLgogICAgICBlbGVtZW50cyA9IGl0ZXJhYmxlLnN1YnR5cGVTZXQubm9kZQogICAgICAgICAgLnN1YmNsYXNzZXNCeU1hc2sobWFzaywgc3RyaWN0OiAhaW5jbHVkZVJvb3QpCiAgICAgICAgICAuaXRlcmF0b3I7CiAgICB9CiAgICBpZiAoZWxlbWVudHMgIT0gbnVsbCAmJiBlbGVtZW50cy5tb3ZlTmV4dCgpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKGhpZXJhcmNoeU5vZGVzID09IG51bGwpIHsKICAgICAgLy8gU3RhcnQgaXRlcmF0aW5nIHRocm91Z2ggc3VidHlwZXMuCiAgICAgIGhpZXJhcmNoeU5vZGVzID0gaXRlcmFibGUuc3VidHlwZVNldC5fc3VidHlwZXMuaXRlcmF0b3I7CiAgICB9CiAgICB3aGlsZSAoaGllcmFyY2h5Tm9kZXMubW92ZU5leHQoKSkgewogICAgICBlbGVtZW50cyA9IGhpZXJhcmNoeU5vZGVzLmN1cnJlbnQuc3ViY2xhc3Nlc0J5TWFzayhtYXNrKS5pdGVyYXRvcjsKICAgICAgaWYgKGVsZW1lbnRzLm1vdmVOZXh0KCkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLy8vIEVudW0gdmFsdWVzIHJldHVybmVkIGZyb20gdGhlIFtGb3JFYWNoRnVuY3Rpb25dIHByb3ZpZGVkIHRvIHRoZSBgZm9yRWFjaFhgCi8vLyBmdW5jdGlvbnMgb2YgW0NsYXNzSGllcmFyY2h5Tm9kZV0gYW5kIFtDbGFzc1NldF0uIFRoZSB2YWx1ZSBpcyB1c2VkIHRvCi8vLyBjb250cm9sIHRoZSBjb250aW51ZWQgaXRlcmF0aW9uLgplbnVtIEl0ZXJhdGlvblN0ZXAgewogIC8vLyBJdGVyYXRpb24gY29udGludWVzLgogIENPTlRJTlVFLAoKICAvLy8gSXRlcmF0aW9uIHN0b3BzIGltbWVkaWF0ZWx5LgogIFNUT1AsCgogIC8vLyBJdGVyYXRpb24gc2tpcHMgdGhlIHN1YmNsYXNzZXMgb2YgdGhlIGN1cnJlbnQgY2xhc3MuCiAgU0tJUF9TVUJDTEFTU0VTLAp9CgovLy8gVmlzaXRpbmcgZnVuY3Rpb24gdXNlZCBmb3IgdGhlIGBmb3JFYWNoWGAgZnVuY3Rpb25zIG9mIFtDbGFzc0hpZXJhcmNoeU5vZGVdCi8vLyBhbmQgW0NsYXNzU2V0XS4gVGhlIHJldHVybiB2YWx1ZSBjb250cm9scyB0aGUgY29udGludWVkIGl0ZXJhdGlvbi4gSWYgYG51bGxgCi8vLyBpcyByZXR1cm5lZCwgaXRlcmF0aW9uIGNvbnRpbnVlcyB0byB0aGUgZW5kLgp0eXBlZGVmIEl0ZXJhdGlvblN0ZXAgRm9yRWFjaEZ1bmN0aW9uKENsYXNzRW50aXR5IGNscyk7CgovLy8gU2luZ2xldG9uIG1hcCBpbXBsZW1lbnRlZCBhcyBhIGZpZWxkIG9uIHRoZSBrZXkuCmNsYXNzIENsYXNzSGllcmFyY2h5Tm9kZXNNYXAgZXh0ZW5kcyBNYXBCYXNlPENsYXNzRW50aXR5LCBDbGFzc0hpZXJhcmNoeU5vZGU+IHsKICBAb3ZlcnJpZGUKICBDbGFzc0hpZXJhcmNoeU5vZGUgb3BlcmF0b3IgW10oT2JqZWN0IGNscykgewogICAgLy8gVE9ETyhzcmEpOiBDaGFuZ2UgdGhlIGtleSB0eXBlIHRvIGBjb3ZhcmlhbnQgQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcEtleWAuCiAgICBpZiAoY2xzIGlzIENsYXNzSGllcmFyY2h5Tm9kZXNNYXBLZXkpIHsKICAgICAgcmV0dXJuIGNscy5fY2xhc3NIaWVyYXJjaHlOb2RlOwogICAgfQogICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcignQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcCBmb3IgJGNscycpOwogIH0KCiAgQG92ZXJyaWRlCiAgb3BlcmF0b3IgW109KE9iamVjdCBjbHMsIENsYXNzSGllcmFyY2h5Tm9kZSBub2RlKSB7CiAgICAvLyBUT0RPKHNyYSk6IENoYW5nZSB0aGUga2V5IHR5cGUgdG8gYGNvdmFyaWFudCBDbGFzc0hpZXJhcmNoeU5vZGVzTWFwS2V5YC4KICAgIGlmIChjbHMgaXMgQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcEtleSkgewogICAgICBjbHMuX2NsYXNzSGllcmFyY2h5Tm9kZSA9IG5vZGU7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRocm93IG5ldyBVbmltcGxlbWVudGVkRXJyb3IoJ0NsYXNzSGllcmFyY2h5Tm9kZXNNYXAgZm9yICRjbHMnKTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzSGllcmFyY2h5Tm9kZSBwdXRJZkFic2VudCgKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBDbGFzc0hpZXJhcmNoeU5vZGUgaWZBYnNlbnQoKSkgewogICAgcmV0dXJuIHRoaXNbY2xzXSA/Pz0gaWZBYnNlbnQoKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQga2V5cyB7CiAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCdDbGFzc0hpZXJhcmNoeU5vZGVzTWFwLmtleXMnKTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzSGllcmFyY2h5Tm9kZSByZW1vdmUoT2JqZWN0IGtleSkgewogICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcignQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcC5yZW1vdmUnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xlYXIoKSB7CiAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCdDbGFzc0hpZXJhcmNoeU5vZGVzTWFwLmNsZWFyJyk7CiAgfQp9CgphYnN0cmFj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YnkKLy8vIHRoZSBnaXZlbiBwYXR0ZXJuLgpTdHJpbmcgZ2V0IFRSQUNFX0ZJTFRFUl9QQVRURVJOID0+CiAgICBUUkFDRV9GSUxURVJfUEFUVEVSTl9GUk9NX0VOVklST05NRU5UID8/IFRSQUNFX0ZJTFRFUl9QQVRURVJOX0ZPUl9URVNUOwoKY29uc3QgU3RyaW5nIFRSQUNFX0ZJTFRFUl9QQVRURVJOX0ZST01fRU5WSVJPTk1FTlQgPQogICAgY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudCgiRFVNUF9JUiIpOwpTdHJpbmcgVFJBQ0VfRklMVEVSX1BBVFRFUk5fRk9SX1RFU1Q7CgovLy8gRHVtcHMgdGhlIGludGVybWVkaWF0ZSByZXByZXNlbnRhdGlvbiBhZnRlciBlYWNoIHBoYXNlIGluIGEgZm9ybWF0Ci8vLyByZWFkYWJsZSBieSBJUiBIeWRyYS4KY2xhc3MgVHJhY2VyIGV4dGVuZHMgVHJhY2VyVXRpbCB7CiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwogIGJvb2wgdHJhY2VBY3RpdmUgPSBmYWxzZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBhcGkuT3V0cHV0U2luayBvdXRwdXQ7CiAgZmluYWwgUmVnRXhwIHRyYWNlRmlsdGVyOwoKICBUcmFjZXIodGhpcy5jbG9zZWRXb3JsZCwgYXBpLkNvbXBpbGVyT3V0cHV0IGNvbXBpbGVyT3V0cHV0KQogICAgICA6IHRyYWNlRmlsdGVyID0gVFJBQ0VfRklMVEVSX1BBVFRFUk4gPT0gbnVsbAogICAgICAgICAgICA/IG51bGwKICAgICAgICAgICAgOiBuZXcgUmVnRXhwKFRSQUNFX0ZJTFRFUl9QQVRURVJOKSwKICAgICAgICBvdXRwdXQgPSBUUkFDRV9GSUxURVJfUEFUVEVSTiAhPSBudWxsCiAgICAgICAgICAgID8gY29tcGlsZXJPdXRwdXQuY3JlYXRlT3V0cHV0U2luaygKICAgICAgICAgICAgICAgICdkYXJ0JywgJ2NmZycsIGFwaS5PdXRwdXRUeXBlLmRlYnVnKQogICAgICAgICAgICA6IG51bGw7CgogIGJvb2wgZ2V0IGlzRW5hYmxlZCA9PiB0cmFjZUZpbHRlciAhPSBudWxsOwoKICB2b2lkIHRyYWNlQ29tcGlsYXRpb24oU3RyaW5nIG1ldGhvZE5hbWUpIHsKICAgIGlmICghaXNFbmFibGVkKSByZXR1cm47CiAgICB0cmFjZUFjdGl2ZSA9IHRyYWNlRmlsdGVyLmhhc01hdGNoKG1ldGhvZE5hbWUpOwogICAgaWYgKCF0cmFjZUFjdGl2ZSkgcmV0dXJuOwogICAgdGFnKCJjb21waWxhdGlvbiIsICgpIHsKICAgICAgcHJpbnRQcm9wZXJ0eSgibmFtZSIsIG1ldGhvZE5hbWUpOwogICAgICBwcmludFByb3BlcnR5KCJtZXRob2QiLCBtZXRob2ROYW1lKTsKICAgICAgcHJpbnRQcm9wZXJ0eSgiZGF0ZSIsIG5ldyBEYXRlVGltZS5ub3coKS5taWxsaXNlY29uZHNTaW5jZUVwb2NoKTsKICAgIH0pOwogIH0KCiAgdm9pZCB0cmFjZUdyYXBoKFN0cmluZyBuYW1lLCB2YXIgaXJPYmplY3QpIHsKICAgIGlmICghdHJhY2VBY3RpdmUpIHJldHVybjsKICAgIGlmIChpck9iamVjdCBpcyBzc2EuSEdyYXBoKSB7CiAgICAgIG5ldyBIVHJhY2VyKG91dHB1dCwgY2xvc2VkV29ybGQpLnRyYWNlR3JhcGgobmFtZSwgaXJPYmplY3QpOwogICAgfQogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChvdXRwdXQgIT0gbnVsbCkgewogICAgICBvdXRwdXQuY2xvc2UoKTsKICAgIH0KICB9Cn0KCmFic3RyYWN0IGNsYXNzIFRyYWNlclV0aWwgewogIGFwaS5PdXRwdXRTaW5rIGdldCBvdXRwdXQ7CiAgZmluYWwgSW5kZW50YXRpb24gX2luZCA9IG5ldyBJbmRlbnRhdGlvbigpOwoKICB2b2lkIHRhZyhTdHJpbmcgdGFnTmFtZSwgRnVuY3Rpb24gZikgewogICAgcHJpbnRsbigiYmVnaW5fJHRhZ05hbWUiKTsKICAgIF9pbmQuaW5kZW50QmxvY2soZik7CiAgICBwcmludGxuKCJlbmRfJHRhZ05hbWUiKTsKICB9CgogIHZvaWQgcHJpbnRsbihTdHJpbmcgc3RyaW5nKSB7CiAgICBhZGRJbmRlbnQoKTsKICAgIGFkZChzdHJpbmcpOwogICAgYWRkKCJcbiIpOwogIH0KCiAgdm9pZCBwcmludEVtcHR5UHJvcGVydHkoU3RyaW5nIHByb3BlcnR5TmFtZSkgewogICAgcHJpbnRsbihwcm9wZXJ0eU5hbWUpOwogIH0KCiAgU3RyaW5nIGZvcm1hdFBydHkoeCkgewogICAgaWYgKHggaXMgbnVtKSB7CiAgICAgIHJldHVybiAnJHt4fSc7CiAgICB9IGVsc2UgaWYgKHggaXMgU3RyaW5nKSB7CiAgICAgIHJldHVybiAnIiR7eH0iJzsKICAgIH0gZWxzZSBpZiAoeCBpcyBJdGVyYWJsZSkgewogICAgICByZXR1cm4geC5tYXAoKHMpID0+IGZvcm1hdFBydHkocykpLmpvaW4oJyAnKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93ICJpbnZhbGlkIHByb3BlcnR5IHR5cGU6ICR7eH0iOwogICAgfQogIH0KCiAgdm9pZCBwcmludFByb3BlcnR5KFN0cmluZyBwcm9wZXJ0eU5hbWUsIHZhbHVlKSB7CiAgICBwcmludGxuKCIkcHJvcGVydHlOYW1lICR7Zm9ybWF0UHJ0eSh2YWx1ZSl9Iik7CiAgfQoKICB2b2lkIGFkZChTdHJpbmcgc3RyaW5nKSB7CiAgICBvdXRwdXQuYWRkKHN0cmluZyk7CiAgfQoKICB2b2lkIGFkZEluZGVudCgpIHsKICAgIGFkZChfaW5kLmluZGVudGF0aW9uKTsKICB9Cn0KcABOTjwBEAEmLCsqJwFOFyNMATUtJgFHGiIiHAwfHAE+MxMwLi81FAEtAS0cNB4cKStICAQBLx4iQwYEAREaFgYEAgEcHS4BKR8ZHQQBIBERDwQBMRsEARkUFR4XIDQNKwYEATMzBAEcGAQBFRsEAgEgcGFja2FnZTpjb21waWxlci9zcmMvdHJhY2VyLmRhcnRCc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9jaGVja2VkX21vZGVfaGVscGVycy5kYXJ0rKIvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzQXN0OwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIHNob3cganM7CmltcG9ydCAnLi4vc3NhL2NvZGVnZW4uZGFydCcgc2hvdyBTc2FDb2RlR2VuZXJhdG9yOwppbXBvcnQgJy4uL3NzYS9ub2Rlcy5kYXJ0JyBzaG93IEhUeXBlQ29udmVyc2lvbjsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CmltcG9ydCAnLi4vdW5pdmVyc2UvdXNlLmRhcnQnIHNob3cgU3RhdGljVXNlOwppbXBvcnQgJ25hbWVyLmRhcnQnIHNob3cgTW9kdWxhck5hbWVyOwoKY2xhc3MgQ2hlY2tlZE1vZGVIZWxwZXIgewogIGZpbmFsIFN0cmluZyBuYW1lOwoKICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcihTdHJpbmcgdGhpcy5uYW1lKTsKCiAgU3RhdGljVXNlIGdldFN0YXRpY1VzZShDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVmYWN0b3IgdGhpcyB0byBhdm9pZCBsb29raW5nIHVwIGRpcmVjdGx5IGluIHRoZQogICAgLy8ganMgaGVscGVyIGxpYnJhcnkgYnV0IGluc3RlYWQgYWNjZXNzIGNvbW1vbkVsZW1lbnRzLgogICAgcmV0dXJuIG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLmZpbmRIZWxwZXJGdW5jdGlvbihuYW1lKSwgY2FsbFN0cnVjdHVyZSk7CiAgfQoKICBDYWxsU3RydWN0dXJlIGdldCBjYWxsU3RydWN0dXJlID0+IENhbGxTdHJ1Y3R1cmUuT05FX0FSRzsKCiAgdm9pZCBnZW5lcmF0ZUFkZGl0aW9uYWxBcmd1bWVudHMoU3NhQ29kZUdlbmVyYXRvciBjb2RlZ2VuLCBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIEhUeXBlQ29udmVyc2lvbiBub2RlLCBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGFyZ3VtZW50cykgewogICAgLy8gTm8gYWRkaXRpb25hbCBhcmd1bWVudHMgbmVlZGVkLgogIH0KfQoKY2xhc3MgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlciBleHRlbmRzIENoZWNrZWRNb2RlSGVscGVyIHsKICBjb25zdCBQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyKFN0cmluZyBuYW1lKSA6IHN1cGVyKG5hbWUpOwoKICBAb3ZlcnJpZGUKICBDYWxsU3RydWN0dXJlIGdldCBjYWxsU3RydWN0dXJlID0+IENhbGxTdHJ1Y3R1cmUuVFdPX0FSR1M7CgogIEBvdmVycmlkZQogIHZvaWQgZ2VuZXJhdGVBZGRpdGlvbmFsQXJndW1lbnRzKFNzYUNvZGVHZW5lcmF0b3IgY29kZWdlbiwgTW9kdWxhck5hbWVyIG5hbWVyLAogICAgICBIVHlwZUNvbnZlcnNpb24gbm9kZSwgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmd1bWVudHMpIHsKICAgIERhcnRUeXBlIHR5cGUgPSBub2RlLnR5cGVFeHByZXNzaW9uOwogICAganNBc3QuTmFtZSBhZGRpdGlvbmFsQXJndW1lbnQgPSBuYW1lci5vcGVyYXRvcklzVHlwZSh0eXBlKTsKICAgIGFyZ3VtZW50cy5hZGQoanMucXVvdGVOYW1lKGFkZGl0aW9uYWxBcmd1bWVudCkpOwogIH0KfQoKY2xhc3MgVHlwZVZhcmlhYmxlQ2hlY2tlZE1vZGVIZWxwZXIgZXh0ZW5kcyBDaGVja2VkTW9kZUhlbHBlciB7CiAgY29uc3QgVHlwZVZhcmlhYmxlQ2hlY2tlZE1vZGVIZWxwZXIoU3RyaW5nIG5hbWUpIDogc3VwZXIobmFtZSk7CgogIEBvdmVycmlkZQogIENhbGxTdHJ1Y3R1cmUgZ2V0IGNhbGxTdHJ1Y3R1cmUgPT4gQ2FsbFN0cnVjdHVyZS5UV09fQVJHUzsKCiAgQG92ZXJyaWRlCiAgdm9pZCBnZW5lcmF0ZUFkZGl0aW9uYWxBcmd1bWVudHMoU3NhQ29kZUdlbmVyYXRvciBjb2RlZ2VuLCBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIEhUeXBlQ29udmVyc2lvbiBub2RlLCBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGFyZ3VtZW50cykgewogICAgYXNzZXJ0KG5vZGUudHlwZUV4cHJlc3Npb24uaXNUeXBlVmFyaWFibGUpOwogICAgY29kZWdlbi51c2Uobm9kZS50eXBlUmVwcmVzZW50YXRpb24pOwogICAgYXJndW1lbnRzLmFkZChjb2RlZ2VuLnBvcCgpKTsKICB9Cn0KCmNsYXNzIEZ1bmN0aW9uVHlwZVJlcHJlc2VudGF0aW9uQ2hlY2tlZE1vZGVIZWxwZXIgZXh0ZW5kcyBDaGVja2VkTW9kZUhlbHBlciB7CiAgY29uc3QgRnVuY3Rpb25UeXBlUmVwcmVzZW50YXRpb25DaGVja2VkTW9kZUhlbHBlcihTdHJpbmcgbmFtZSkgOiBzdXBlcihuYW1lKTsKCiAgQG92ZXJyaWRlCiAgQ2FsbFN0cnVjdHVyZSBnZXQgY2FsbFN0cnVjdHVyZSA9PiBDYWxsU3RydWN0dXJlLlRXT19BUkdTOwoKICBAb3ZlcnJpZGUKICB2b2lkIGdlbmVyYXRlQWRkaXRpb25hbEFyZ3VtZW50cyhTc2FDb2RlR2VuZXJhdG9yIGNvZGVnZW4sIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgSFR5cGVDb252ZXJzaW9uIG5vZGUsIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gYXJndW1lbnRzKSB7CiAgICBhc3NlcnQobm9kZS50eXBlRXhwcmVzc2lvbi5pc0Z1bmN0aW9uVHlwZSk7CiAgICBjb2RlZ2VuLnVzZShub2RlLnR5cGVSZXByZXNlbnRhdGlvbik7CiAgICBhcmd1bWVudHMuYWRkKGNvZGVnZW4ucG9wKCkpOwogIH0KfQoKY2xhc3MgRnV0dXJlT3JSZXByZXNlbnRhdGlvbkNoZWNrZWRNb2RlSGVscGVyIGV4dGVuZHMgQ2hlY2tlZE1vZGVIZWxwZXIgewogIGNvbnN0IEZ1dHVyZU9yUmVwcmVzZW50YXRpb25DaGVja2VkTW9kZUhlbHBlcihTdHJpbmcgbmFtZSkgOiBzdXBlcihuYW1lKTsKCiAgQG92ZXJyaWRlCiAgQ2FsbFN0cnVjdHVyZSBnZXQgY2FsbFN0cnVjdHVyZSA9PiBDYWxsU3RydWN0dXJlLlRXT19BUkdTOwoKICBAb3ZlcnJpZGUKICB2b2lkIGdlbmVyYXRlQWRkaXRpb25hbEFyZ3VtZW50cyhTc2FDb2RlR2VuZXJhdG9yIGNvZGVnZW4sIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgSFR5cGVDb252ZXJzaW9uIG5vZGUsIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gYXJndW1lbnRzKSB7CiAgICBhc3NlcnQobm9kZS50eXBlRXhwcmVzc2lvbi5pc0Z1dHVyZU9yKTsKICAgIGNvZGVnZW4udXNlKG5vZGUudHlwZVJlcHJlc2VudGF0aW9uKTsKICAgIGFyZ3VtZW50cy5hZGQoY29kZWdlbi5wb3AoKSk7CiAgfQp9CgpjbGFzcyBTdWJ0eXBlQ2hlY2tlZE1vZGVIZWxwZXIgZXh0ZW5kcyBDaGVja2VkTW9kZUhlbHBlciB7CiAgY29uc3QgU3VidHlwZUNoZWNrZWRNb2RlSGVscGVyKFN0cmluZyBuYW1lKSA6IHN1cGVyKG5hbWUpOwoKICBAb3ZlcnJpZGUKICBDYWxsU3RydWN0dXJlIGdldCBjYWxsU3RydWN0dXJlID0+IGNvbnN0IENhbGxTdHJ1Y3R1cmUudW5uYW1lZCg0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBnZW5lcmF0ZUFkZGl0aW9uYWxBcmd1bWVudHMoU3NhQ29kZUdlbmVyYXRvciBjb2RlZ2VuLCBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIEhUeXBlQ29udmVyc2lvbiBub2RlLCBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGFyZ3VtZW50cykgewogICAgLy8gVE9ETyhzcmEpOiBNb3ZlIHRoZXNlIGNhbGxzIGludG8gdGhlIFNTQSBncmFwaCBzbyB0aGF0IHRoZSBhcmd1bWVudHMgY2FuCiAgICAvLyBiZSBvcHRpbWl6ZWQsIGUsZywgR1ZOZWQuCiAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSBub2RlLnR5cGVFeHByZXNzaW9uOwogICAgQ2xhc3NFbnRpdHkgZWxlbWVudCA9IHR5cGUuZWxlbWVudDsKICAgIGpzQXN0Lk5hbWUgaXNGaWVsZCA9IG5hbWVyLm9wZXJhdG9ySXMoZWxlbWVudCk7CiAgICBhcmd1bWVudHMuYWRkKGpzLnF1b3RlTmFtZShpc0ZpZWxkKSk7CiAgICBjb2RlZ2VuLnVzZShub2RlLnR5cGVSZXByZXNlbnRhdGlvbik7CiAgICBhcmd1bWVudHMuYWRkKGNvZGVnZW4ucG9wKCkpOwogICAganNBc3QuTmFtZSBhc0ZpZWxkID0gbmFtZXIuc3Vic3RpdHV0aW9uTmFtZShlbGVtZW50KTsKICAgIGFyZ3VtZW50cy5hZGQoanMucXVvdGVOYW1lKGFzRmllbGQpKTsKICB9Cn0KCmNsYXNzIENoZWNrZWRNb2RlSGVscGVycyB7CiAgQ2hlY2tlZE1vZGVIZWxwZXJzKCk7CgogIC8vLyBBbGwgdGhlIGNoZWNrZWQgbW9kZSBoZWxwZXJzLgogIHN0YXRpYyBjb25zdCBMaXN0PENoZWNrZWRNb2RlSGVscGVyPiBoZWxwZXJzID0gY29uc3QgPENoZWNrZWRNb2RlSGVscGVyPlsKICAgIGNvbnN0IENoZWNrZWRNb2RlSGVscGVyKCdzdHJpbmdUeXBlQ2FzdCcpLAogICAgY29uc3QgQ2hlY2tlZE1vZGVIZWxwZXIoJ3N0cmluZ1R5cGVDaGVjaycpLAogICAgY29uc3QgQ2hlY2tlZE1vZGVIZWxwZXIoJ2RvdWJsZVR5cGVDYXN0JyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignZG91YmxlVHlwZUNoZWNrJyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignbnVtVHlwZUNhc3QnKSwKICAgIGNvbnN0IENoZWNrZWRNb2RlSGVscGVyKCdudW1UeXBlQ2hlY2snKSwKICAgIGNvbnN0IENoZWNrZWRNb2RlSGVscGVyKCdib29sQ29udmVyc2lvbkNoZWNrJyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignYm9vbFR5cGVDYXN0JyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignYm9vbFR5cGVDaGVjaycpLAogICAgY29uc3QgQ2hlY2tlZE1vZGVIZWxwZXIoJ2ludFR5cGVDYXN0JyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignaW50VHlwZUNoZWNrJyksCiAgICBjb25zdCBQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyKCdudW1iZXJPclN0cmluZ1N1cGVyTmF0aXZlVHlwZUNhc3QnKSwKICAgIGNvbnN0IFByb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXIoJ251bWJlck9yU3RyaW5nU3VwZXJOYXRpdmVUeXBlQ2hlY2snKSwKICAgIGNvbnN0IFByb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXIoJ251bWJlck9yU3RyaW5nU3VwZXJUeXBlQ2FzdCcpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignbnVtYmVyT3JTdHJpbmdTdXBlclR5cGVDaGVjaycpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignc3RyaW5nU3VwZXJOYXRpdmVUeXBlQ2FzdCcpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignc3RyaW5nU3VwZXJOYXRpdmVUeXBlQ2hlY2snKSwKICAgIGNvbnN0IFByb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXIoJ3N0cmluZ1N1cGVyVHlwZUNhc3QnKSwKICAgIGNvbnN0IFByb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXIoJ3N0cmluZ1N1cGVyVHlwZUNoZWNrJyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignbGlzdFR5cGVDYXN0JyksCiAgICBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignbGlzdFR5cGVDaGVjaycpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignbGlzdFN1cGVyTmF0aXZlVHlwZUNhc3QnKSwKICAgIGNvbnN0IFByb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXIoJ2xpc3RTdXBlck5hdGl2ZVR5cGVDaGVjaycpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignbGlzdFN1cGVyVHlwZUNhc3QnKSwKICAgIGNvbnN0IFByb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXIoJ2xpc3RTdXBlclR5cGVDaGVjaycpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignaW50ZXJjZXB0ZWRUeXBlQ2FzdCcpLAogICAgY29uc3QgUHJvcGVydHlDaGVja2VkTW9kZUhlbHBlcignaW50ZXJjZXB0ZWRUeXBlQ2hlY2snKSwKICAgIGNvbnN0IFN1YnR5cGVDaGVja2VkTW9kZUhlbHBlcignc3VidHlwZUNhc3QnKSwKICAgIGNvbnN0IFN1YnR5cGVDaGVja2VkTW9kZUhlbHBlcignYXNzZXJ0U3VidHlwZScpLAogICAgY29uc3QgVHlwZVZhcmlhYmxlQ2hlY2tlZE1vZGVIZWxwZXIoJ3N1YnR5cGVPZlJ1bnRpbWVUeXBlQ2FzdCcpLAogICAgY29uc3QgVHlwZVZhcmlhYmxlQ2hlY2tlZE1vZGVIZWxwZXIoJ2Fzc2VydFN1YnR5cGVPZlJ1bnRpbWVUeXBlJyksCiAgICBjb25zdCBQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyKCdwcm9wZXJ0eVR5cGVDYXN0JyksCiAgICBjb25zdCBQcm9wZXJ0eUNoZWNrZWRNb2RlSGVscGVyKCdwcm9wZXJ0eVR5cGVDaGVjaycpLAogICAgY29uc3QgRnVuY3Rpb25UeXBlUmVwcmVzZW50YXRpb25DaGVja2VkTW9kZUhlbHBlcignZnVuY3Rpb25UeXBlQ2FzdCcpLAogICAgY29uc3QgRnVuY3Rpb25UeXBlUmVwcmVzZW50YXRpb25DaGVja2VkTW9kZUhlbHBlcignZnVuY3Rpb25UeXBlQ2hlY2snKSwKICAgIGNvbnN0IEZ1dHVyZU9yUmVwcmVzZW50YXRpb25DaGVja2VkTW9kZUhlbHBlcignZnV0dXJlT3JDYXN0JyksCiAgICBjb25zdCBGdXR1cmVPclJlcHJlc2VudGF0aW9uQ2hlY2tlZE1vZGVIZWxwZXIoJ2Z1dHVyZU9yQ2hlY2snKSwKICBdOwoKICAvLyBDaGVja2VkIG1vZGUgaGVscGVycyBpbmRleGVkIGJ5IG5hbWUuCiAgc3RhdGljIGZpbmFsIE1hcDxTdHJpbmcsIENoZWNrZWRNb2RlSGVscGVyPiBjaGVja2VkTW9kZUhlbHBlckJ5TmFtZSA9CiAgICAgIG5ldyBNYXA8U3RyaW5nLCBDaGVja2VkTW9kZUhlbHBlcj4uZnJvbUl0ZXJhYmxlKGhlbHBlcnMsCiAgICAgICAgICBrZXk6IChoZWxwZXIpID0+IGhlbHBlci5uYW1lKTsKCiAgLy8vIFJldHVybnMgdGhlIGNoZWNrZWQgbW9kZSBoZWxwZXIgdGhhdCB3aWxsIGJlIG5lZWRlZCB0byBkbyBhIHR5cGUKICAvLy8gY2hlY2svdHlwZSBjYXN0IG9uIFt0eXBlXSBhdCBydW50aW1lLiBOb3RlIHRoYXQgdGhpcyBtZXRob2QgaXMgYmVpbmcKICAvLy8gY2FsbGVkIGJvdGggYnkgdGhlIHJlc29sdmVyIHdpdGggaW50ZXJmYWNlIHR5cGVzIChpbnQsIFN0cmluZywgLi4uKSwgYW5kCiAgLy8vIGJ5IHRoZSBTU0EgYmFja2VuZCB3aXRoIGltcGxlbWVudGF0aW9uIHR5cGVzIChKU0ludCwgSlNTdHJpbmcsIC4uLikuCiAgQ2hlY2tlZE1vZGVIZWxwZXIgZ2V0Q2hlY2tlZE1vZGVIZWxwZXIoCiAgICAgIERhcnRUeXBlIHR5cGUsIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICB7Ym9vbCB0eXBlQ2FzdH0pIHsKICAgIHJldHVybiBnZXRDaGVja2VkTW9kZUhlbHBlckludGVybmFsKHR5cGUsIGNvbW1vbkVsZW1lbnRzLAogICAgICAgIHR5cGVDYXN0OiB0eXBlQ2FzdCwgbmF0aXZlQ2hlY2tPbmx5OiBmYWxzZSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbmF0aXZlIGNoZWNrZWQgbW9kZSBoZWxwZXIgdGhhdCB3aWxsIGJlIG5lZWRlZCB0byBkbyBhIHR5cGUKICAvLy8gY2hlY2svdHlwZSBjYXN0IG9uIFt0eXBlXSBhdCBydW50aW1lLiBJZiBubyBuYXRpdmUgaGVscGVyIGV4aXN0cyBmb3IKICAvLy8gW3R5cGVdLCBbOm51bGw6XSBpcyByZXR1cm5lZC4KICBDaGVja2VkTW9kZUhlbHBlciBnZXROYXRpdmVDaGVja2VkTW9kZUhlbHBlcigKICAgICAgRGFydFR5cGUgdHlwZSwgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIHtib29sIHR5cGVDYXN0fSkgewogICAgcmV0dXJuIGdldENoZWNrZWRNb2RlSGVscGVySW50ZXJuYWwodHlwZSwgY29tbW9uRWxlbWVudHMsCiAgICAgICAgdHlwZUNhc3Q6IHR5cGVDYXN0LCBuYXRpdmVDaGVja09ubHk6IHRydWUpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGNoZWNrZWQgbW9kZSBoZWxwZXIgZm9yIHRoZSB0eXBlIGNoZWNrL3R5cGUgY2FzdCBmb3IKICAvLy8gW3R5cGVdLiBJZiBbbmF0aXZlQ2hlY2tPbmx5XSBpcyBbOnRydWU6XSwgb25seSBuYW1lcyBmb3IgbmF0aXZlIGhlbHBlcnMKICAvLy8gYXJlIHJldHVybmVkLgogIENoZWNrZWRNb2RlSGVscGVyIGdldENoZWNrZWRNb2RlSGVscGVySW50ZXJuYWwoCiAgICAgIERhcnRUeXBlIHR5cGUsIENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICB7Ym9vbCB0eXBlQ2FzdCwgYm9vbCBuYXRpdmVDaGVja09ubHl9KSB7CiAgICBTdHJpbmcgbmFtZSA9IGdldENoZWNrZWRNb2RlSGVscGVyTmFtZUludGVybmFsKHR5cGUsIGNvbW1vbkVsZW1lbnRzLAogICAgICAgIHR5cGVDYXN0OiB0eXBlQ2FzdCwgbmF0aXZlQ2hlY2tPbmx5OiBuYXRpdmVDaGVja09ubHkpOwogICAgaWYgKG5hbWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBDaGVja2VkTW9kZUhlbHBlciBoZWxwZXIgPSBjaGVja2VkTW9kZUhlbHBlckJ5TmFtZVtuYW1lXTsKICAgIGFzc2VydChoZWxwZXIgIT0gbnVsbCk7CiAgICByZXR1cm4gaGVscGVyOwogIH0KCiAgU3RyaW5nIGdldENoZWNrZWRNb2RlSGVscGVyTmFtZUludGVybmFsKAogICAgICBEYXJ0VHlwZSB0eXBlLCBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAge2Jvb2wgdHlwZUNhc3QsIGJvb2wgbmF0aXZlQ2hlY2tPbmx5fSkgewogICAgYXNzZXJ0KCF0eXBlLmlzVHlwZWRlZik7CgogICAgaWYgKHR5cGUuaXNUeXBlVmFyaWFibGUpIHsKICAgICAgcmV0dXJuIHR5cGVDYXN0CiAgICAgICAgICA/ICdzdWJ0eXBlT2ZSdW50aW1lVHlwZUNhc3QnCiAgICAgICAgICA6ICdhc3NlcnRTdWJ0eXBlT2ZSdW50aW1lVHlwZSc7CiAgICB9CgogICAgaWYgKHR5cGUuaXNGdW5jdGlvblR5cGUpIHsKICAgICAgcmV0dXJuIHR5cGVDYXN0ID8gJ2Z1bmN0aW9uVHlwZUNhc3QnIDogJ2Z1bmN0aW9uVHlwZUNoZWNrJzsKICAgIH0KCiAgICBpZiAodHlwZS5pc0Z1dHVyZU9yKSB7CiAgICAgIHJldHVybiB0eXBlQ2FzdCA/ICdmdXR1cmVPckNhc3QnIDogJ2Z1dHVyZU9yQ2hlY2snOwogICAgfQoKICAgIGFzc2VydCh0eXBlLmlzSW50ZXJmYWNlVHlwZSwKICAgICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsICJVbmV4cGVjdGVkIHR5cGU6ICR0eXBlIikpOwogICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2VUeXBlID0gdHlwZTsKICAgIENsYXNzRW50aXR5IGVsZW1lbnQgPSBpbnRlcmZhY2VUeXBlLmVsZW1lbnQ7CiAgICBib29sIG5hdGl2ZUNoZWNrID0gdHJ1ZTsKICAgIC8vIFRPRE8oMTM5NTUpLCBUT0RPKDk3MzEpLiAgVGhlIHRlc3QgZm9yIG5vbi1wcmltaXRpdmUgdHlwZXMgc2hvdWxkIHVzZSBhbgogICAgLy8gaW50ZXJjZXB0b3IuICBUaGUgaW50ZXJjZXB0b3Igc2hvdWxkIGJlIGFuIGFyZ3VtZW50IHRvIEhUeXBlQ29udmVyc2lvbiBzbwogICAgLy8gdGhhdCBpdCBjYW4gYmUgb3B0aW1pemVkIGJ5IHN0YW5kYXJkIGludGVyY2VwdG9yIG9wdGltaXphdGlvbnMuCiAgICAvLyAgbmF0aXZlQ2hlY2tPbmx5IHx8IGVtaXR0ZXIubmF0aXZlRW1pdHRlci5yZXF1aXJlc05hdGl2ZUlzQ2hlY2soZWxlbWVudCk7CgogICAgdmFyIHN1ZmZpeCA9IHR5cGVDYXN0ID8gJ1R5cGVDYXN0JyA6ICdUeXBlQ2hlY2snOwogICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNTdHJpbmdDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3MpIHsKICAgICAgaWYgKG5hdGl2ZUNoZWNrT25seSkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiAnc3RyaW5nJHN1ZmZpeCc7CiAgICB9CgogICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuZG91YmxlQ2xhc3MpIHsKICAgICAgaWYgKG5hdGl2ZUNoZWNrT25seSkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiAnZG91YmxlJHN1ZmZpeCc7CiAgICB9CgogICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMubnVtQ2xhc3MpIHsKICAgICAgaWYgKG5hdGl2ZUNoZWNrT25seSkgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiAnbnVtJHN1ZmZpeCc7CiAgICB9CgogICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNCb29sQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmJvb2xDbGFzcykgewogICAgICBpZiAobmF0aXZlQ2hlY2tPbmx5KSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuICdib29sJHN1ZmZpeCc7CiAgICB9CgogICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuaW50Q2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcykgewogICAgICBpZiAobmF0aXZlQ2hlY2tPbmx5KSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuICdpbnQkc3VmZml4JzsKICAgIH0KCiAgICBpZiAoY29tbW9uRWxlbWVudHMuaXNOdW1iZXJPclN0cmluZ1N1cGVydHlwZShlbGVtZW50KSkgewogICAgICByZXR1cm4gbmF0aXZlQ2hlY2sKICAgICAgICAgID8gJ251bWJlck9yU3RyaW5nU3VwZXJOYXRpdmUkc3VmZml4JwogICAgICAgICAgOiAnbnVtYmVyT3JTdHJpbmdTdXBlciRzdWZmaXgnOwogICAgfQoKICAgIGlmIChjb21tb25FbGVtZW50cy5pc1N0cmluZ09ubHlTdXBlcnR5cGUoZWxlbWVudCkpIHsKICAgICAgcmV0dXJuIG5hdGl2ZUNoZWNrID8gJ3N0cmluZ1N1cGVyTmF0aXZlJHN1ZmZpeCcgOiAnc3RyaW5nU3VwZXIkc3VmZml4JzsKICAgIH0KCiAgICBpZiAoKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMubGlzdENsYXNzIHx8CiAgICAgICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKSAmJgogICAgICAgIHR5cGUudHJlYXRBc1JhdykgewogICAgICBpZiAobmF0aXZlQ2hlY2tPbmx5KSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuICdsaXN0JHN1ZmZpeCc7CiAgICB9CgogICAgaWYgKGNvbW1vbkVsZW1lbnRzLmlzTGlzdFN1cGVydHlwZShlbGVtZW50KSAmJiB0eXBlLnRyZWF0QXNSYXcpIHsKICAgICAgcmV0dXJuIG5hdGl2ZUNoZWNrID8gJ2xpc3RTdXBlck5hdGl2ZSRzdWZmaXgnIDogJ2xpc3RTdXBlciRzdWZmaXgnOwogICAgfQoKICAgIGlmICh0eXBlLmlzSW50ZXJmYWNlVHlwZSAmJiAhdHlwZS50cmVhdEFzUmF3KSB7CiAgICAgIHJldHVybiB0eXBlQ2FzdCA/ICdzdWJ0eXBlQ2FzdCcgOiAnYXNzZXJ0U3VidHlwZSc7CiAgICB9CgogICAgaWYgKG5hdGl2ZUNoZWNrKSB7CiAgICAgIC8vIFRPRE8oa2FybGtsb3NlKTogY2FuIHdlIGdldCByaWQgb2YgdGhpcyBicmFuY2ggd2hlbiB3ZSB1c2UKICAgICAgLy8gaW50ZXJjZXB0b3JzPwogICAgICByZXR1cm4gJ2ludGVyY2VwdGVkJHN1ZmZpeCc7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJ3Byb3BlcnR5JHN1ZmZpeCc7CiAgICB9CiAgfQp9CoEtAE5OPAEZIiQhISA0MT0uJwEaFQEtATpOPCdBBAE8AVFAJwQCATw+AQw9AQxRQClANQQCAUBCAQw9AQxRQDAqIgQCAU5QAQw9AQxRQDAqIgQCAUpMAQw9AQxRQCwqIgQCATs9AQxFAQxRQFAhLig0KioiOioEAgEbGAEkTC8wLzAsLTQtLiwtSktERUJDPD0tLkBBOjs8PTM1RUc5OktMQ0QFAStIPykBR0tPSyo0GT41BAFOSyQwNBk+NAQBR04UMjQvST8jPhwTBAErNC8dAR8WJyoGAR9CBgEbOgYBIUQoMR1QUUdRATYzMSgeBgEzMSgeBgEzLigbBgExLygcBgEwLjMzOCgbBgE9GS8qBgE5TgYBMDcbKBwGAUZKBgE0OQYBF0QXIw0gBgQCATlwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2NoZWNrZWRfbW9kZV9oZWxwZXJzLmRhcnQ7c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnTAANO+Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5ydW50aW1lX3R5cGVzOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgSWRlbnRpZmllcnM7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnCiAgICBzaG93CiAgICAgICAgQ29tbW9uRWxlbWVudHMsCiAgICAgICAgRWxlbWVudEVudmlyb25tZW50LAogICAgICAgIEpDb21tb25FbGVtZW50cywKICAgICAgICBKRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzQXN0OwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIHNob3cganM7CmltcG9ydCAnLi4vanNfZW1pdHRlci9qc19lbWl0dGVyLmRhcnQnIHNob3cgTW9kdWxhckVtaXR0ZXI7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jb2RlZ2VuX3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvZmVhdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICduYW1lci5kYXJ0JzsKaW1wb3J0ICduYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICdydW50aW1lX3R5cGVzX2NvZGVnZW4uZGFydCc7CmltcG9ydCAncnVudGltZV90eXBlc19yZXNvbHV0aW9uLmRhcnQnOwoKdHlwZWRlZiBqc0FzdC5FeHByZXNzaW9uIE9uVmFyaWFibGVDYWxsYmFjayhUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlKTsKdHlwZWRlZiBib29sIFNob3VsZEVuY29kZVR5cGVkZWZDYWxsYmFjayhUeXBlZGVmVHlwZSB2YXJpYWJsZSk7CgovLy8gSW50ZXJmYWNlIGZvciB0aGUgbmVlZGVkIHJ1bnRpbWUgdHlwZSBjaGVja3MuCmFic3RyYWN0IGNsYXNzIFJ1bnRpbWVUeXBlc0NoZWNrcyB7CiAgLy8vIFJldHVybnMgdGhlIHJlcXVpcmVkIHJ1bnRpbWUgdHlwZSBjaGVja3MuCiAgVHlwZUNoZWNrcyBnZXQgcmVxdWlyZWRDaGVja3M7CgogIC8vLyBSZXR1cm4gYWxsIGNsYXNzZXMgbmVlZGVkIGZvciBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24uCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+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+IGpzKCdudWxsJyk7CgogIGpzQXN0LkV4cHJlc3Npb24gZ2V0Vm9pZFZhbHVlKCkgPT4ganMoJy0xJyk7CgogIGpzQXN0LkV4cHJlc3Npb24gZ2V0SnNJbnRlcm9wVHlwZUFyZ3VtZW50VmFsdWUoKSA9PiBqcygnLTInKTsKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0KERhcnRUeXBlIHR5cGUsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpID0+CiAgICAgIHR5cGUuYWNjZXB0KHRoaXMsIGVtaXR0ZXIpOwoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0VHlwZVZhcmlhYmxlVHlwZSgKICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlLCBNb2R1bGFyRW1pdHRlciBlbWl0dGVyKSB7CiAgICBpZiAodHlwZWRlZkJpbmRpbmdzICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KHR5cGVkZWZCaW5kaW5nc1t0eXBlXSAhPSBudWxsKTsKICAgICAgcmV0dXJuIHR5cGVkZWZCaW5kaW5nc1t0eXBlXTsKICAgIH0KICAgIHJldHVybiBvblZhcmlhYmxlKHR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdEZ1bmN0aW9uVHlwZVZhcmlhYmxlKAogICAgICBGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlLCBNb2R1bGFyRW1pdHRlciBlbWl0dGVyKSB7CiAgICBpbnQgcG9zaXRpb24gPSBmdW5jdGlvblR5cGVWYXJpYWJsZXMuaW5kZXhPZih0eXBlKTsKICAgIGFzc2VydChwb3NpdGlvbiA+PSAwKTsKICAgIHJldHVybiBqcy5udW1iZXIoZnVuY3Rpb25UeXBlVmFyaWFibGVzLmxlbmd0aCAtIHBvc2l0aW9uIC0gMSk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgdHlwZSwgTW9kdWxhckVtaXR0ZXIgZW1pdHRlcikgewogICAgcmV0dXJuIGdldER5bmFtaWNWYWx1ZSgpOwogIH0KCiAganNBc3QuRXhwcmVzc2lvbiBnZXRKc0ludGVyb3BUeXBlQXJndW1lbnRzKGludCBjb3VudCwKICAgICAge2pzQXN0LkV4cHJlc3Npb24gbmFtZX0pIHsKICAgIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gZWxlbWVudHMgPSA8anNBc3QuRXhwcmVzc2lvbj5bXTsKICAgIGlmIChuYW1lICE9IG51bGwpIHsKICAgICAgZWxlbWVudHMuYWRkKG5hbWUpOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIGVsZW1lbnRzLmFkZChnZXRKc0ludGVyb3BUeXBlQXJndW1lbnRWYWx1ZSgpKTsKICAgIH0KICAgIHJldHVybiBuZXcganNBc3QuQXJyYXlJbml0aWFsaXplcihlbGVtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0SW50ZXJmYWNlVHlwZSgKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLCBNb2R1bGFyRW1pdHRlciBlbWl0dGVyKSB7CiAgICBqc0FzdC5FeHByZXNzaW9uIG5hbWUgPSBnZXRKYXZhU2NyaXB0Q2xhc3NOYW1lKHR5cGUuZWxlbWVudCwgZW1pdHRlcik7CiAgICBqc0FzdC5FeHByZXNzaW9uIHJlc3VsdDsKICAgIGlmICh0eXBlLnR5cGVBcmd1bWVudHMuaXNFbXB0eSkgewogICAgICByZXN1bHQgPSBuYW1lOwogICAgfSBlbHNlIHsKICAgICAgLy8gVmlzaXQgYWxsIHR5cGUgYXJndW1lbnRzLiBUaGlzIGlzIGRvbmUgZXZlbiBmb3IganNpbnRlcm9wIGNsYXNzZXMgdG8KICAgICAgLy8gZW5mb3JjZSB0aGUgaW52YXJpYW50IHRoYXQgW29uVmFyaWFibGVdIGlzIGNhbGxlZCBmb3IgZWFjaCB0eXBlCiAgICAgIC8vIHZhcmlhYmxlIGluIHRoZSB0eXBlLgogICAgICByZXN1bHQgPSB2aXNpdExpc3QodHlwZS50eXBlQXJndW1lbnRzLCBlbWl0dGVyLCBoZWFkOiBuYW1lKTsKICAgICAgaWYgKF9uYXRpdmVEYXRhLmlzSnNJbnRlcm9wQ2xhc3ModHlwZS5lbGVtZW50KSkgewogICAgICAgIC8vIFJlcGxhY2UgdHlwZSBhcmd1bWVudHMgb2YgZ2VuZXJpYyBqc2ludGVyb3AgY2xhc3NlcyB3aXRoICdhbnknIHR5cGUuCiAgICAgICAgcmVzdWx0ID0KICAgICAgICAgICAgZ2V0SnNJbnRlcm9wVHlwZUFyZ3VtZW50cyh0eXBlLnR5cGVBcmd1bWVudHMubGVuZ3RoLCBuYW1lOiBuYW1lKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRMaXN0KExpc3Q8RGFydFR5cGU+IHR5cGVzLCBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLAogICAgICB7anNBc3QuRXhwcmVzc2lvbiBoZWFkfSkgewogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBlbGVtZW50cyA9IDxqc0FzdC5FeHByZXNzaW9uPltdOwogICAgaWYgKGhlYWQgIT0gbnVsbCkgewogICAgICBlbGVtZW50cy5hZGQoaGVhZCk7CiAgICB9CiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAganNBc3QuRXhwcmVzc2lvbiBlbGVtZW50ID0gdmlzaXQodHlwZSwgZW1pdHRlcik7CiAgICAgIGlmIChlbGVtZW50IGlzIGpzQXN0LkxpdGVyYWxOdWxsKSB7CiAgICAgICAgZWxlbWVudHMuYWRkKG5ldyBqc0FzdC5BcnJheUhvbGUoKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZWxlbWVudHMuYWRkKGVsZW1lbnQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIoZWxlbWVudHMpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIEphdmFTY3JpcHQgdGVtcGxhdGUgdG8gZGV0ZXJtaW5lIGF0IHJ1bnRpbWUgaWYgYSB0eXBlIG9iamVjdAogIC8vLyBpcyBhIGZ1bmN0aW9uIHR5cGUuCiAganNBc3QuVGVtcGxhdGUgZ2V0IHRlbXBsYXRlRm9ySXNGdW5jdGlvblR5cGUgewogICAgcmV0dXJuIGpzQXN0LmpzLmV4cHJlc3Npb25UZW1wbGF0ZUZvcigiJyR7X3J0aVRhZ3MuZnVuY3Rpb25UeXBlVGFnfScgaW4gIyIpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIEphdmFTY3JpcHQgdGVtcGxhdGUgdG8gZGV0ZXJtaW5lIGF0IHJ1bnRpbWUgaWYgYSB0eXBlIG9iamVjdAogIC8vLyBpcyBhIEZ1dHVyZU9yIHR5cGUuCiAganNBc3QuVGVtcGxhdGUgZ2V0IHRlbXBsYXRlRm9ySXNGdXR1cmVPclR5cGUgewogICAgcmV0dXJuIGpzQXN0LmpzLmV4cHJlc3Npb25UZW1wbGF0ZUZvcigiJyR7X3J0aVRhZ3MuZnV0dXJlT3JUYWd9JyBpbiAjIik7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgSmF2YVNjcmlwdCB0ZW1wbGF0ZSB0byBkZXRlcm1pbmUgYXQgcnVudGltZSBpZiBhIHR5cGUgb2JqZWN0CiAgLy8vIGlzIHRoZSB2b2lkIHR5cGUuCiAganNBc3QuVGVtcGxhdGUgZ2V0IHRlbXBsYXRlRm9ySXNWb2lkVHlwZSB7CiAgICByZXR1cm4ganNBc3QuanMuZXhwcmVzc2lvblRlbXBsYXRlRm9yKCIjID09PSAtMSIpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIEphdmFTY3JpcHQgdGVtcGxhdGUgdG8gZGV0ZXJtaW5lIGF0IHJ1bnRpbWUgaWYgYSB0eXBlIG9iamVjdAogIC8vLyBpcyB0aGUgZHluYW1pYyB0eXBlLgogIGpzQXN0LlRlbXBsYXRlIGdldCB0ZW1wbGF0ZUZvcklzRHluYW1pY1R5cGUgewogICAgcmV0dXJuIGpzQXN0LmpzLmV4cHJlc3Npb25UZW1wbGF0ZUZvcigiIyA9PSBudWxsIik7CiAgfQoKICBqc0FzdC5UZW1wbGF0ZSBnZXQgdGVtcGxhdGVGb3JJc0pzSW50ZXJvcFR5cGVBcmd1bWVudCB7CiAgICByZXR1cm4ganNBc3QuanMuZXhwcmVzc2lvblRlbXBsYXRlRm9yKCIjID09PSAtMiIpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdEZ1bmN0aW9uVHlwZSgKICAgICAgRnVuY3Rpb25UeXBlIHR5cGUsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIExpc3Q8anNBc3QuUHJvcGVydHk+IHByb3BlcnRpZXMgPSA8anNBc3QuUHJvcGVydHk+W107CgogICAgdm9pZCBhZGRQcm9wZXJ0eShTdHJpbmcgbmFtZSwganNBc3QuRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICBwcm9wZXJ0aWVzLmFkZChuZXcganNBc3QuUHJvcGVydHkoanMuc3RyaW5nKG5hbWUpLCB2YWx1ZSkpOwogICAgfQoKICAgIC8vIFR5cGUgcmVwcmVzZW50YXRpb25zIGZvciBmdW5jdGlvbnMgaGF2ZSBhIHByb3BlcnR5IHdoaWNoIGlzIGEgdGFnIG1hcmtpbmcKICAgIC8vIHRoZW0gYXMgZnVuY3Rpb24gdHlwZXMuIFRoZSB2YWx1ZSBpcyBub3QgdXNlZCwgc28gJzEnIGlzIGp1c3QgYSBkdW1teS4KICAgIGFkZFByb3BlcnR5KF9ydGlUYWdzLmZ1bmN0aW9uVHlwZVRhZywganMubnVtYmVyKDEpKTsKCiAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzLmlzTm90RW1wdHkpIHsKICAgICAgLy8gR2VuZXJpYyBmdW5jdGlvbiB0eXBlcyBoYXZlIHR5cGUgcGFyYW1ldGVycyB3aGljaCBhcmUgcmVkdWNlZCB0byBkZQogICAgICAvLyBCcnVpam4gaW5kZXhlcy4KICAgICAgZm9yIChGdW5jdGlvblR5cGVWYXJpYWJsZSB2YXJpYWJsZSBpbiB0eXBlLnR5cGVWYXJpYWJsZXMucmV2ZXJzZWQpIHsKICAgICAgICBmdW5jdGlvblR5cGVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlKTsKICAgICAgfQogICAgICAvLyBUT0RPKHNyYSk6IFRoaXMgZW1pdHMgYFAuT2JqZWN0YCBmb3IgdGhlIGNvbW1vbiB1bmJvdW5kZWQgY2FzZS4gV2UKICAgICAgLy8gY291bGQgcmVwbGFjZSB0aGUgT2JqZWN0IGJvdW5kcyB3aXRoIGFuIGFycmF5IGhvbGUgZm9yIGEgY29tcGFjdCBgWywsXWAKICAgICAgLy8gcmVwcmVzZW50YXRpb24uCiAgICAgIGFkZFByb3BlcnR5KF9ydGlUYWdzLmZ1bmN0aW9uVHlwZUdlbmVyaWNCb3VuZHNUYWcsCiAgICAgICAgICB2aXNpdExpc3QodHlwZS50eXBlVmFyaWFibGVzLm1hcCgodikgPT4gdi5ib3VuZCkudG9MaXN0KCksIGVtaXR0ZXIpKTsKICAgIH0KCiAgICBpZiAoIXR5cGUucmV0dXJuVHlwZS50cmVhdEFzRHluYW1pYykgewogICAgICBhZGRQcm9wZXJ0eSgKICAgICAgICAgIF9ydGlUYWdzLmZ1bmN0aW9uVHlwZVJldHVyblR5cGVUYWcsIHZpc2l0KHR5cGUucmV0dXJuVHlwZSwgZW1pdHRlcikpOwogICAgfQogICAgaWYgKCF0eXBlLnBhcmFtZXRlclR5cGVzLmlzRW1wdHkpIHsKICAgICAgYWRkUHJvcGVydHkoX3J0aVRhZ3MuZnVuY3Rpb25UeXBlUmVxdWlyZWRQYXJhbWV0ZXJzVGFnLAogICAgICAgICAgdmlzaXRMaXN0KHR5cGUucGFyYW1ldGVyVHlwZXMsIGVtaXR0ZXIpKTsKICAgIH0KICAgIGlmICghdHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLmlzRW1wdHkpIHsKICAgICAgYWRkUHJvcGVydHkoX3J0aVRhZ3MuZnVuY3Rpb25UeXBlT3B0aW9uYWxQYXJhbWV0ZXJzVGFnLAogICAgICAgICAgdmlzaXRMaXN0KHR5cGUub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywgZW1pdHRlcikpOwogICAgfQogICAgaWYgKCF0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXMuaXNFbXB0eSkgewogICAgICBMaXN0PGpzQXN0LlByb3BlcnR5PiBuYW1lZEFyZ3VtZW50cyA9IDxqc0FzdC5Qcm9wZXJ0eT5bXTsKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVzID0gdHlwZS5uYW1lZFBhcmFtZXRlcnM7CiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVzID0gdHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzOwogICAgICBhc3NlcnQodHlwZXMubGVuZ3RoID09IG5hbWVzLmxlbmd0aCk7CiAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlcy5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgICBqc0FzdC5FeHByZXNzaW9uIG5hbWUgPSBqcy5zdHJpbmcobmFtZXNbaW5kZXhdKTsKICAgICAgICBuYW1lZEFyZ3VtZW50cwogICAgICAgICAgICAuYWRkKG5ldyBqc0FzdC5Qcm9wZXJ0eShuYW1lLCB2aXNpdCh0eXBlc1tpbmRleF0sIGVtaXR0ZXIpKSk7CiAgICAgIH0KICAgICAgYWRkUHJvcGVydHkoX3J0aVRhZ3MuZnVuY3Rpb25UeXBlTmFtZWRQYXJhbWV0ZXJzVGFnLAogICAgICAgICAgbmV3IGpzQXN0Lk9iamVjdEluaXRpYWxpemVyKG5hbWVkQXJndW1lbnRzKSk7CiAgICB9CgogICAgLy8gRXhpdCBnZW5lcmljIGZ1bmN0aW9uIHNjb3BlLgogICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcy5pc05vdEVtcHR5KSB7CiAgICAgIGZ1bmN0aW9uVHlwZVZhcmlhYmxlcy5sZW5ndGggLT0gdHlwZS50eXBlVmFyaWFibGVzLmxlbmd0aDsKICAgIH0KCiAgICByZXR1cm4gbmV3IGpzQXN0Lk9iamVjdEluaXRpYWxpemVyKHByb3BlcnRpZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIHR5cGUsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIHJldHVybiBnZXRWb2lkVmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSB0eXBlLCBNb2R1bGFyRW1pdHRlciBlbWl0dGVyKSB7CiAgICBib29sIHNob3VsZEVuY29kZSA9IHNob3VsZEVuY29kZVR5cGVkZWYodHlwZSk7CiAgICBEYXJ0VHlwZSB1bmFsaWFzZWRUeXBlID0gdHlwZS51bmFsaWFzZWQ7CgogICAgdmFyIG9sZEJpbmRpbmdzID0gdHlwZWRlZkJpbmRpbmdzOwogICAgaWYgKHR5cGVkZWZCaW5kaW5ncyA9PSBudWxsKSB7CiAgICAgIC8vIEZpcnN0IGxldmVsIHR5cGVkZWYgLSBjYXB0dXJlIGFyZ3VtZW50cyBmb3IgcmUtdXNlIHdpdGhpbiB0eXBlZGVmIGJvZHkuCiAgICAgIC8vCiAgICAgIC8vIFRoZSB0eXBlIGBNYXA8VCwgRm9vPFNldDxUPj4+YCBjb250YWlucyBvbmUgdHlwZSB2YXJpYWJsZSByZWZlcmVuY2VkCiAgICAgIC8vIHR3aWNlLCBzbyB0aGVyZSBhcmUgdHdvIGlucHV0cyBpbnRvIHRoZSBIVHlwZUluZm9FeHByZXNzaW9uCiAgICAgIC8vIGluc3RydWN0aW9uLgogICAgICAvLwogICAgICAvLyBJZiBGb28gaXMgYSB0eXBlZGVmLCBUIGNhbiBiZSByZXVzZWQsIGUuZy4KICAgICAgLy8KICAgICAgLy8gICAgIHR5cGVkZWYgRSBGb288RT4oRSBhLCBFIGIpOwogICAgICAvLwogICAgICAvLyBBcyB0aGUgdHlwZWRlZiBpcyBleHBhbmRlZCAodG8gKFNldDxUPiwgU2V0PFQ+KSA9PiBTZXQ8VD4pIGl0IHNob3VsZAogICAgICAvLyBub3QgY29uc3VtZSBhZGRpdGlvbmFsIHR5cGVzIGZyb20gdGhlIHRvLWxldmVsIGlucHV0LiAgV2UgcHJldmVudCB0aGlzCiAgICAgIC8vIGJ5IGNhcHR1cmluZyB0aGUgdHlwZXMgYW5kIHVzaW5nIHRoZSBjYXB0dXJlZCB0eXBlIGV4cHJlc3Npb25zIGluc2lkZQogICAgICAvLyB0aGUgdHlwZWRlZiBleHBhbnNpb24uCiAgICAgIC8vCiAgICAgIC8vIFRPRE8oc3JhKTogV2Ugc2hvdWxkIG1ha2UgdGhlIHR5cGUgc3ViZXhwcmVzc2lvbiBGb288Li4uPiBiZSBhIHNlY29uZAogICAgICAvLyBIVHlwZUluZm9FeHByZXNzaW9uLCB3aXRoIFNldDxUPiBhcyBpdHMgaW5wdXQgKGEgdGhpcmQKICAgICAgLy8gSFR5cGVJbmZvRXhwcmVzc2lvbikuIFRoaXMgd291bGQgc2hhcmUgYWxsIHRoZSBTZXQ8VD4gc3ViZXhwcmVzc2lvbnMKICAgICAgLy8gaW5zdGVhZCBvZiBkdXBsaWNhdGluZyB0aGVtLiBUaGlzIHdvdWxkIHJlcXVpcmUgSFR5cGVJbmZvRXhwcmVzc2lvbgogICAgICAvLyBpbnB1dHMgdG8gY29ycmVzcG9uZCB0byB0eXBlIHZhcmlhYmxlcyBBTkQgdHlwZWRlZnMuCiAgICAgIHR5cGVkZWZCaW5kaW5ncyA9IDxUeXBlVmFyaWFibGVUeXBlLCBqc0FzdC5FeHByZXNzaW9uPnt9OwogICAgICB0eXBlLmZvckVhY2hUeXBlVmFyaWFibGUoKFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUpIHsKICAgICAgICB0eXBlZGVmQmluZGluZ3NbdmFyaWFibGVdID0gb25WYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgIH0pOwogICAgfQoKICAgIGpzQXN0LkV4cHJlc3Npb24gZmluaXNoKGpzQXN0LkV4cHJlc3Npb24gcmVzdWx0KSB7CiAgICAgIHR5cGVkZWZCaW5kaW5ncyA9IG9sZEJpbmRpbmdzOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIGlmIChzaG91bGRFbmNvZGUpIHsKICAgICAganNBc3QuT2JqZWN0SW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIgPSB2aXNpdCh1bmFsaWFzZWRUeXBlLCBlbWl0dGVyKTsKICAgICAgLy8gV2UgaGF2ZSB0byBlbmNvZGUgdGhlIGFsaWFzZWQgdHlwZS4KICAgICAganNBc3QuRXhwcmVzc2lvbiBuYW1lID0gZ2V0SmF2YVNjcmlwdENsYXNzTmFtZSh0eXBlLmVsZW1lbnQsIGVtaXR0ZXIpOwogICAgICBqc0FzdC5FeHByZXNzaW9uIGVuY29kZWRUeXBlZGVmID0gdHlwZS50cmVhdEFzUmF3CiAgICAgICAgICA/IG5hbWUKICAgICAgICAgIDogdmlzaXRMaXN0KHR5cGUudHlwZUFyZ3VtZW50cywgZW1pdHRlciwgaGVhZDogbmFtZSk7CgogICAgICAvLyBBZGQgaXQgdG8gdGhlIGZ1bmN0aW9uLXR5cGUgb2JqZWN0LgogICAgICBqc0FzdC5MaXRlcmFsU3RyaW5nIHRhZyA9IGpzLnN0cmluZyhfcnRpVGFncy50eXBlZGVmVGFnKTsKICAgICAgaW5pdGlhbGl6ZXIucHJvcGVydGllcy5hZGQobmV3IGpzQXN0LlByb3BlcnR5KHRhZywgZW5jb2RlZFR5cGVkZWYpKTsKICAgICAgcmV0dXJuIGZpbmlzaChpbml0aWFsaXplcik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmluaXNoKHZpc2l0KHVuYWxpYXNlZFR5cGUsIGVtaXR0ZXIpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRGdXR1cmVPclR5cGUoCiAgICAgIEZ1dHVyZU9yVHlwZSB0eXBlLCBNb2R1bGFyRW1pdHRlciBlbWl0dGVyKSB7CiAgICBMaXN0PGpzQXN0LlByb3BlcnR5PiBwcm9wZXJ0aWVzID0gPGpzQXN0LlByb3BlcnR5PltdOwoKICAgIHZvaWQgYWRkUHJvcGVydHkoU3RyaW5nIG5hbWUsIGpzQXN0LkV4cHJlc3Npb24gdmFsdWUpIHsKICAgICAgcHJvcGVydGllcy5hZGQobmV3IGpzQXN0LlByb3BlcnR5KGpzLnN0cmluZyhuYW1lKSwgdmFsdWUpKTsKICAgIH0KCiAgICAvLyBUeXBlIHJlcHJlc2VudGF0aW9ucyBmb3IgRnV0dXJlT3IgaGF2ZSBhIHByb3BlcnR5IHdoaWNoIGlzIGEgdGFnIG1hcmtpbmcKICAgIC8vIHRoZW0gYXMgRnV0dXJlT3IgdHlwZXMuIFRoZSB2YWx1ZSBpcyBub3QgdXNlZCwgc28gJzEnIGlzIGp1c3QgYSBkdW1teS4KICAgIGFkZFByb3BlcnR5KF9ydGlUYWdzLmZ1dHVyZU9yVGFnLCBqcy5udW1iZXIoMSkpOwogICAgaWYgKCF0eXBlLnR5cGVBcmd1bWVudC50cmVhdEFzRHluYW1pYykgewogICAgICBhZGRQcm9wZXJ0eShfcnRpVGFncy5mdXR1cmVPclR5cGVUYWcsIHZpc2l0KHR5cGUudHlwZUFyZ3VtZW50LCBlbWl0dGVyKSk7CiAgICB9CgogICAgcmV0dXJuIG5ldyBqc0FzdC5PYmplY3RJbml0aWFsaXplcihwcm9wZXJ0aWVzKTsKICB9Cn0KCmNsYXNzIFR5cGVDaGVja01hcHBpbmcgaW1wbGVtZW50cyBUeXBlQ2hlY2tzIHsKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIENsYXNzQ2hlY2tzPiBtYXAgPSBuZXcgTWFwPENsYXNzRW50aXR5LCBDbGFzc0NoZWNrcz4oKTsKCiAgQG92ZXJyaWRlCiAgQ2xhc3NDaGVja3Mgb3BlcmF0b3IgW10oQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgQ2xhc3NDaGVja3MgcmVzdWx0ID0gbWFwW2VsZW1lbnRdOwogICAgcmV0dXJuIHJlc3VsdCAhPSBudWxsID8gcmVzdWx0IDogY29uc3QgQ2xhc3NDaGVja3MuZW1wdHkoKTsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KENsYXNzRW50aXR5IGVsZW1lbnQsIENsYXNzQ2hlY2tzIGNoZWNrcykgewogICAgbWFwW2VsZW1lbnRdID0gY2hlY2tzOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBjbGFzc2VzID0+IG1hcC5rZXlzOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKENsYXNzRW50aXR5IGhvbGRlciBpbiBjbGFzc2VzKSB7CiAgICAgIGZvciAoVHlwZUNoZWNrIGNoZWNrIGluIHRoaXNbaG9sZGVyXS5jaGVja3MpIHsKICAgICAgICBzYi53cml0ZSgnJHtob2xkZXIubmFtZX0gPDogJHtjaGVjay5jbHMubmFtZX0sICcpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gJ1skc2JdJzsKICB9Cn0KCmNsYXNzIEFyZ3VtZW50Q29sbGVjdG9yIGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPGR5bmFtaWMsIGJvb2w+IHsKICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICB2b2lkIGFkZENsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgY2xhc3Nlcy5hZGQoY2xzKTsKICB9CgogIGNvbGxlY3QoRGFydFR5cGUgdHlwZSwge2Jvb2wgaXNUeXBlQXJndW1lbnQ6IGZhbHNlfSkgewogICAgdmlzaXQodHlwZSwgaXNUeXBlQXJndW1lbnQpOwogIH0KCiAgLy8vIENvbGxlY3QgYWxsIHR5cGVzIGluIHRoZSBsaXN0IGFzIGlmIHRoZXkgd2VyZSBhcmd1bWVudHMgb2YgYW4KICAvLy8gSW50ZXJmYWNlVHlwZS4KICBjb2xsZWN0QWxsKExpc3Q8RGFydFR5cGU+IHR5cGVzLCB7Ym9vbCBpc1R5cGVBcmd1bWVudDogZmFsc2V9KSB7CiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAgdmlzaXQodHlwZSwgdHJ1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIHR5cGUsIGJvb2wgaXNUeXBlQXJndW1lbnQpIHsKICAgIGNvbGxlY3QodHlwZS51bmFsaWFzZWQsIGlzVHlwZUFyZ3VtZW50OiBpc1R5cGVBcmd1bWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEludGVyZmFjZVR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlLCBib29sIGlzVHlwZUFyZ3VtZW50KSB7CiAgICBpZiAoaXNUeXBlQXJndW1lbnQpIGFkZENsYXNzKHR5cGUuZWxlbWVudCk7CiAgICBjb2xsZWN0QWxsKHR5cGUudHlwZUFyZ3VtZW50cywgaXNUeXBlQXJndW1lbnQ6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIHR5cGUsIF8pIHsKICAgIGNvbGxlY3QodHlwZS5yZXR1cm5UeXBlLCBpc1R5cGVBcmd1bWVudDogdHJ1ZSk7CiAgICBjb2xsZWN0QWxsKHR5cGUucGFyYW1ldGVyVHlwZXMsIGlzVHlwZUFyZ3VtZW50OiB0cnVlKTsKICAgIGNvbGxlY3RBbGwodHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLCBpc1R5cGVBcmd1bWVudDogdHJ1ZSk7CiAgICBjb2xsZWN0QWxsKHR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcywgaXNUeXBlQXJndW1lbnQ6IHRydWUpOwogIH0KfQoKY2xhc3MgRnVuY3Rpb25Bcmd1bWVudENvbGxlY3RvciBleHRlbmRzIERhcnRUeXBlVmlzaXRvcjxkeW5hbWljLCBib29sPiB7CiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgRnVuY3Rpb25Bcmd1bWVudENvbGxlY3RvcigpOwoKICBjb2xsZWN0KERhcnRUeXBlIHR5cGUsIHtib29sIGluRnVuY3Rpb25UeXBlOiBmYWxzZX0pIHsKICAgIHZpc2l0KHR5cGUsIGluRnVuY3Rpb25UeXBlKTsKICB9CgogIGNvbGxlY3RBbGwoSXRlcmFibGU8RGFydFR5cGU+IHR5cGVzLCB7Ym9vbCBpbkZ1bmN0aW9uVHlwZTogZmFsc2V9KSB7CiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAgdmlzaXQodHlwZSwgaW5GdW5jdGlvblR5cGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSB0eXBlLCBib29sIGluRnVuY3Rpb25UeXBlKSB7CiAgICBjb2xsZWN0KHR5cGUudW5hbGlhc2VkLCBpbkZ1bmN0aW9uVHlwZTogaW5GdW5jdGlvblR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgdHlwZSwgYm9vbCBpbkZ1bmN0aW9uVHlwZSkgewogICAgaWYgKGluRnVuY3Rpb25UeXBlKSB7CiAgICAgIGNsYXNzZXMuYWRkKHR5cGUuZWxlbWVudCk7CiAgICB9CiAgICBjb2xsZWN0QWxsKHR5cGUudHlwZUFyZ3VtZW50cywgaW5GdW5jdGlvblR5cGU6IGluRnVuY3Rpb25UeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSB0eXBlLCBfKSB7CiAgICBjb2xsZWN0KHR5cGUucmV0dXJuVHlwZSwgaW5GdW5jdGlvblR5cGU6IHRydWUpOwogICAgY29sbGVjdEFsbCh0eXBlLnBhcmFtZXRlclR5cGVzLCBpbkZ1bmN0aW9uVHlwZTogdHJ1ZSk7CiAgICBjb2xsZWN0QWxsKHR5cGUub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywgaW5GdW5jdGlvblR5cGU6IHRydWUpOwogICAgY29sbGVjdEFsbCh0eXBlLm5hbWVkUGFyYW1ldGVyVHlwZXMsIGluRnVuY3Rpb25UeXBlOiB0cnVlKTsKICAgIGNvbGxlY3RBbGwodHlwZS50eXBlVmFyaWFibGVzLm1hcCgodHlwZSkgPT4gdHlwZS5ib3VuZCksCiAgICAgICAgaW5GdW5jdGlvblR5cGU6IHRydWUpOwogIH0KfQoKZW51bSBUeXBlVmlzaXRvclN0YXRlIHsKICBkaXJlY3QsCiAgY292YXJpYW50VHlwZUFyZ3VtZW50LAogIGNvbnRyYXZhcmlhbnRUeXBlQXJndW1lbnQsCiAgdHlwZUxpdGVyYWwsCn0KCmNsYXNzIFR5cGVWaXNpdG9yIGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPHZvaWQsIFR5cGVWaXNpdG9yU3RhdGU+IHsKICBTZXQ8RnVuY3Rpb25UeXBlVmFyaWFibGU+IF92aXNpdGVkRnVuY3Rpb25UeXBlVmFyaWFibGVzID0KICAgICAgbmV3IFNldDxGdW5jdGlvblR5cGVWYXJpYWJsZT4oKTsKCiAgZmluYWwgdm9pZCBGdW5jdGlvbihDbGFzc0VudGl0eSBlbnRpdHksIHtUeXBlVmlzaXRvclN0YXRlIHN0YXRlfSkgb25DbGFzczsKICBmaW5hbCB2b2lkIEZ1bmN0aW9uKFR5cGVWYXJpYWJsZUVudGl0eSBlbnRpdHksIHtUeXBlVmlzaXRvclN0YXRlIHN0YXRlfSkKICAgICAgb25UeXBlVmFyaWFibGU7CiAgZmluYWwgdm9pZCBGdW5jdGlvbihGdW5jdGlvblR5cGUgdHlwZSwge1R5cGVWaXNpdG9yU3RhdGUgc3RhdGV9KQogICAgICBvbkZ1bmN0aW9uVHlwZTsKCiAgVHlwZVZpc2l0b3Ioe3RoaXMub25DbGFzcywgdGhpcy5vblR5cGVWYXJpYWJsZSwgdGhpcy5vbkZ1bmN0aW9uVHlwZX0pOwoKICB2aXNpdFR5cGUoRGFydFR5cGUgdHlwZSwgVHlwZVZpc2l0b3JTdGF0ZSBzdGF0ZSkgPT4gdHlwZS5hY2NlcHQodGhpcywgc3RhdGUpOwoKICBUeXBlVmlzaXRvclN0YXRlIGNvdmFyaWFudEFyZ3VtZW50KFR5cGVWaXNpdG9yU3RhdGUgc3RhdGUpIHsKICAgIHN3aXRjaCAoc3RhdGUpIHsKICAgICAgY2FzZSBUeXBlVmlzaXRvclN0YXRlLmRpcmVjdDoKICAgICAgICByZXR1cm4gVHlwZVZpc2l0b3JTdGF0ZS5jb3ZhcmlhbnRUeXBlQXJndW1lbnQ7CiAgICAgIGNhc2UgVHlwZVZpc2l0b3JTdGF0ZS5jb3ZhcmlhbnRUeXBlQXJndW1lbnQ6CiAgICAgICAgcmV0dXJuIFR5cGVWaXNpdG9yU3RhdGUuY292YXJpYW50VHlwZUFyZ3VtZW50OwogICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUuY29udHJhdmFyaWFudFR5cGVBcmd1bWVudDoKICAgICAgICByZXR1cm4gVHlwZVZpc2l0b3JTdGF0ZS5jb250cmF2YXJpYW50VHlwZUFyZ3VtZW50OwogICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUudHlwZUxpdGVyYWw6CiAgICAgICAgcmV0dXJuIFR5cGVWaXNpdG9yU3RhdGUudHlwZUxpdGVyYWw7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBUeXBlVmlzaXRvclN0YXRlICRzdGF0ZSIpOwogIH0KCiAgVHlwZVZpc2l0b3JTdGF0ZSBjb250cmF2YXJpYW50QXJndW1lbnQoVHlwZVZpc2l0b3JTdGF0ZSBzdGF0ZSkgewogICAgc3dpdGNoIChzdGF0ZSkgewogICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUuZGlyZWN0OgogICAgICAgIHJldHVybiBUeXBlVmlzaXRvclN0YXRlLmNvbnRyYXZhcmlhbnRUeXBlQXJndW1lbnQ7CiAgICAgIGNhc2UgVHlwZVZpc2l0b3JTdGF0ZS5jb3ZhcmlhbnRUeXBlQXJndW1lbnQ6CiAgICAgICAgcmV0dXJuIFR5cGVWaXNpdG9yU3RhdGUuY29udHJhdmFyaWFudFR5cGVBcmd1bWVudDsKICAgICAgY2FzZSBUeXBlVmlzaXRvclN0YXRlLmNvbnRyYXZhcmlhbnRUeXBlQXJndW1lbnQ6CiAgICAgICAgcmV0dXJuIFR5cGVWaXNpdG9yU3RhdGUuY292YXJpYW50VHlwZUFyZ3VtZW50OwogICAgICBjYXNlIFR5cGVWaXNpdG9yU3RhdGUudHlwZUxpdGVyYWw6CiAgICAgICAgcmV0dXJuIFR5cGVWaXNpdG9yU3RhdGUudHlwZUxpdGVyYWw7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBUeXBlVmlzaXRvclN0YXRlICRzdGF0ZSIpOwogIH0KCiAgdmlzaXRUeXBlcyhMaXN0PERhcnRUeXBlPiB0eXBlcywgVHlwZVZpc2l0b3JTdGF0ZSBzdGF0ZSkgewogICAgZm9yIChEYXJ0VHlwZSB0eXBlIGluIHR5cGVzKSB7CiAgICAgIHZpc2l0VHlwZSh0eXBlLCBzdGF0ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZVZhcmlhYmxlVHlwZShUeXBlVmFyaWFibGVUeXBlIHR5cGUsIFR5cGVWaXNpdG9yU3RhdGUgc3RhdGUpIHsKICAgIGlmIChvblR5cGVWYXJpYWJsZSAhPSBudWxsKSB7CiAgICAgIG9uVHlwZVZhcmlhYmxlKHR5cGUuZWxlbWVudCwgc3RhdGU6IHN0YXRlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUsIFR5cGVWaXNpdG9yU3RhdGUgc3RhdGUpIHsKICAgIGlmIChvbkNsYXNzICE9IG51bGwpIHsKICAgICAgb25DbGFzcyh0eXBlLmVsZW1lbnQsIHN0YXRlOiBzdGF0ZSk7CiAgICB9CiAgICB2aXNpdFR5cGVzKHR5cGUudHlwZUFyZ3VtZW50cywgY292YXJpYW50QXJndW1lbnQoc3RhdGUpKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSB0eXBlLCBUeXBlVmlzaXRvclN0YXRlIHN0YXRlKSB7CiAgICBpZiAob25GdW5jdGlvblR5cGUgIT0gbnVsbCkgewogICAgICBvbkZ1bmN0aW9uVHlwZSh0eXBlLCBzdGF0ZTogc3RhdGUpOwogICAgfQogICAgLy8gVmlzaXQgYWxsIG5lc3RlZCB0eXBlcyBhcyB0eXBlIGFyZ3VtZW50czsgdGhlc2UgdHlwZXMgYXJlIG5vdCBydW50aW1lCiAgICAvLyBpbnN0YW5jZXMgYnV0IHJ1bnRpbWUgdHlwZSByZXByZXNlbnRhdGlvbnMuCiAgICB2aXNpdFR5cGUodHlwZS5yZXR1cm5UeXBlLCBjb3ZhcmlhbnRBcmd1bWVudChzdGF0ZSkpOwogICAgdmlzaXRUeXBlcyh0eXBlLnBhcmFtZXRlclR5cGVzLCBjb250cmF2YXJpYW50QXJndW1lbnQoc3RhdGUpKTsKICAgIHZpc2l0VHlwZXModHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLCBjb250cmF2YXJpYW50QXJndW1lbnQoc3RhdGUpKTsKICAgIHZpc2l0VHlwZXModHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzLCBjb250cmF2YXJpYW50QXJndW1lbnQoc3RhdGUpKTsKICAgIF92aXNpdGVkRnVuY3Rpb25UeXBlVmFyaWFibGVzLnJlbW92ZUFsbCh0eXBlLnR5cGVWYXJpYWJsZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSB0eXBlLCBUeXBlVmlzaXRvclN0YXRlIHN0YXRlKSB7CiAgICB2aXNpdFR5cGUodHlwZS51bmFsaWFzZWQsIHN0YXRlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGUoRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZSwgVHlwZVZpc2l0b3JTdGF0ZSBzdGF0ZSkgewogICAgaWYgKF92aXNpdGVkRnVuY3Rpb25UeXBlVmFyaWFibGVzLmFkZCh0eXBlKSkgewogICAgICB2aXNpdFR5cGUodHlwZS5ib3VuZCwgc3RhdGUpOwogICAgfQogIH0KfQoKLy8vIFJ1bnRpbWUgdHlwZSB1c2FnZSBmb3IgYSBjbGFzcy4KY2xhc3MgQ2xhc3NVc2UgewogIC8vLyBXaGV0aGVyIHRoZSBjbGFzcyBpcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluc3RhbnRpYXRlZC4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBBYCBhbmQgYEJgIGluOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQSB7fQogIC8vLyAgICAgY2xhc3MgQiBleHRlbmRzIEEge30KICAvLy8gICAgIG1haW4oKSA9PiBuZXcgQigpOwogIC8vLwogIGJvb2wgaW5zdGFuY2UgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdGhlIGNsYXNzIGlzIGRpcmVjdGx5IGluc3RhbnRpYXRlZC4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBCYCBpbjoKICAvLy8KICAvLy8gICAgIGNsYXNzIEEge30KICAvLy8gICAgIGNsYXNzIEIgZXh0ZW5kcyBBIHt9CiAgLy8vICAgICBtYWluKCkgPT4gbmV3IEIoKTsKICAvLy8KICBib29sIGRpcmVjdEluc3RhbmNlID0gZmFsc2U7CgogIC8vLyBXaGV0aGVyIG9iamVjdHMgYXJlIGNoZWNrZWQgdG8gYmUgaW5zdGFuY2VzIG9mIHRoZSBjbGFzcy4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBBYCBpbjoKICAvLy8KICAvLy8gICAgIGNsYXNzIEEge30KICAvLy8gICAgIG1haW4oKSA9PiBudWxsIGlzIEE7CiAgLy8vCiAgYm9vbCBjaGVja2VkSW5zdGFuY2UgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdGhlIGNsYXNzIGlzIHBhc3NlZCBhcyBhIHR5cGUgYXJndW1lbnQgYXQgcnVudGltZS4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBBYCBpbjoKICAvLy8KICAvLy8gICAgIGNsYXNzIEEge30KICAvLy8gICAgIG1haW4oKSA9PiBuZXcgTGlzdDxBPigpIGlzIExpc3Q8U3RyaW5nPjsKICAvLy8KICBib29sIHR5cGVBcmd1bWVudCA9IGZhbHNlOwoKICAvLy8gV2hldGhlciB0aGUgY2xhc3MgaXMgY2hlY2tlZCBhcyBhIHR5cGUgYXJndW1lbnQgYXQgcnVudGltZS4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBBYCBpbjoKICAvLy8KICAvLy8gICAgIGNsYXNzIEEge30KICAvLy8gICAgIG1haW4oKSA9PiBuZXcgTGlzdDxTdHJpbmc+KCkgaXMgTGlzdDxBPjsKICAvLy8KICBib29sIGNoZWNrZWRUeXBlQXJndW1lbnQgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdGhlIGNsYXNzIGlzIHVzZWQgaW4gYSBjb25zdGFudCB0eXBlIGxpdGVyYWwuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBgQWA6CiAgLy8vCiAgLy8vICAgICBjbGFzcyBBIHt9CiAgLy8vICAgICBtYWluKCkgPT4gQTsKICAvLy8KICBib29sIHR5cGVMaXRlcmFsID0gZmFsc2U7CgogIC8vLyBUaGUgZnVuY3Rpb24gdHlwZSBvZiB0aGUgY2xhc3MsIGlmIGFueS4KICAvLy8KICAvLy8gVGhpcyBpcyBvbmx5IHNldCBpZiB0aGUgZnVuY3Rpb24gdHlwZSBpcyBuZWVkZWQgYXQgcnVudGltZS4gRm9yIGluc3RhbmNlLAogIC8vLyBpZiBubyBmdW5jdGlvbiB0eXBlcyBhcmUgY2hlY2tlZCBhdCBydW50aW1lIHRoZW4gdGhlIGZ1bmN0aW9uIHR5cGUgaXNuJ3QKICAvLy8gbmVlZGVkLgogIC8vLwogIC8vLyBGdXJ0aGVybW9yZSBvcHRpbWl6YXRpb24gbWlnaHQgYWxzbyBvbWl0IGZ1bmN0aW9uIHR5cGUgdGhhdCBhcmUga25vd24gbm90CiAgLy8vIHRvIGJlIHZhbGlkIGluIGFueSBzdWJ0eXBlIHRlc3QuCiAgQ2xhc3NGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlOwoKICAvLy8gYHRydWVgIGlmIHRoZSBjbGFzcyBpcyAnbGl2ZScgZWl0aGVyIHRocm91Z2ggaW5zdGFudGlhdGlvbiBvciB1c2UgaW4KICAvLy8gdHlwZSBhcmd1bWVudHMuCiAgYm9vbCBnZXQgaXNMaXZlID0+IGRpcmVjdEluc3RhbmNlIHx8IHR5cGVBcmd1bWVudDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgTGlzdDxTdHJpbmc+IHByb3BlcnRpZXMgPSA8U3RyaW5nPltdOwogICAgaWYgKGluc3RhbmNlKSB7CiAgICAgIHByb3BlcnRpZXMuYWRkKCdpbnN0YW5jZScpOwogICAgfQogICAgaWYgKGRpcmVjdEluc3RhbmNlKSB7CiAgICAgIHByb3BlcnRpZXMuYWRkKCdkaXJlY3RJbnN0YW5jZScpOwogICAgfQogICAgaWYgKGNoZWNrZWRJbnN0YW5jZSkgewogICAgICBwcm9wZXJ0aWVzLmFkZCgnY2hlY2tlZEluc3RhbmNlJyk7CiAgICB9CiAgICBpZiAodHlwZUFyZ3VtZW50KSB7CiAgICAg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FTMGJAE8BhgGFRcGHAEuBlBPDgZQJyIBSxY1AQwWKhQiBhooBhspBhgmBh8tBhciBiAmBjAEAgEycGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnRDc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX2NvZGVnZW4uZGFydJBiLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5ydW50aW1lX3R5cGVzX2NvZGVnZW47CgppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwoKLy8vIERhdGEgbmVlZGVkIGZvciBnZW5lcmF0aW5nIGEgc2lnbmF0dXJlIGZ1bmN0aW9uIGZvciB0aGUgZnVuY3Rpb24gdHlwZSBvZgovLy8gYSBjbGFzcy4KY2xhc3MgQ2xhc3NGdW5jdGlvblR5cGUgewogIC8vLyBUaGUgYGNhbGxgIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyB0aGUgZnVuY3Rpb24gdHlwZS4KICBmaW5hbCBGdW5jdGlvbkVudGl0eSBjYWxsRnVuY3Rpb247CgogIC8vLyBUaGUgdHlwZSBvZiB0aGUgYGNhbGxgIGZ1bmN0aW9uLgogIGZpbmFsIEZ1bmN0aW9uVHlwZSBjYWxsVHlwZTsKCiAgLy8vIFRoZSBzaWduYXR1cmUgZnVuY3Rpb24gZm9yIHRoZSBmdW5jdGlvbiB0eXBlLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgZm9yIERhcnQgMi4KICBmaW5hbCBGdW5jdGlvbkVudGl0eSBzaWduYXR1cmVGdW5jdGlvbjsKCiAgQ2xhc3NGdW5jdGlvblR5cGUodGhpcy5jYWxsRnVuY3Rpb24sIHRoaXMuY2FsbFR5cGUsIHRoaXMuc2lnbmF0dXJlRnVuY3Rpb24pOwp9CgovLy8gQSBwYWlyIG9mIGEgY2xhc3MgdGhhdCB3ZSBuZWVkIGEgY2hlY2sgYWdhaW5zdCBhbmQgdGhlIHR5cGUgYXJndW1lbnQKLy8vIHN1YnN0aXR1dGlvbiBmb3IgdGhpcyBjaGVjay4KY2xhc3MgVHlwZUNoZWNrIHsKICBmaW5hbCBDbGFzc0VudGl0eSBjbHM7CiAgZmluYWwgYm9vbCBuZWVkc0lzOwogIGZpbmFsIFN1YnN0aXR1dGlvbiBzdWJzdGl0dXRpb247CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGhhc2hDb2RlID0gX25leHRIYXNoID0gKF9uZXh0SGFzaCArIDEwMDAwMykudG9VbnNpZ25lZCgzMCk7CiAgc3RhdGljIGludCBfbmV4dEhhc2ggPSAwOwoKICBUeXBlQ2hlY2sodGhpcy5jbHMsIHRoaXMuc3Vic3RpdHV0aW9uLCB7dGhpcy5uZWVkc0lzOiB0cnVlfSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICdUeXBlQ2hlY2soY2xzPSRjbHMsbmVlZHNJcz0kbmVlZHNJcyxzdWJzdGl0dXRpb249JHN1YnN0aXR1dGlvbiknOwp9CgovLy8gW1R5cGVDaGVja11zIG5lZWQgZm9yIGEgc2luZ2xlIGNsYXNzLgpjbGFzcyBDbGFzc0NoZWNrcyB7CiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBUeXBlQ2hlY2s+IF9tYXA7CgogIGZpbmFsIENsYXNzRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZTsKCiAgQ2xhc3NDaGVja3ModGhpcy5mdW5jdGlvblR5cGUpIDogX21hcCA9IDxDbGFzc0VudGl0eSwgVHlwZUNoZWNrPnt9OwoKICBjb25zdCBDbGFzc0NoZWNrcy5lbXB0eSgpCiAgICAgIDogX21hcCA9IGNvbnN0IDxDbGFzc0VudGl0eSwgVHlwZUNoZWNrPnt9LAogICAgICAgIGZ1bmN0aW9uVHlwZSA9IG51bGw7CgogIHZvaWQgYWRkKFR5cGVDaGVjayBjaGVjaykgewogICAgX21hcFtjaGVjay5jbHNdID0gY2hlY2s7CiAgfQoKICBUeXBlQ2hlY2sgb3BlcmF0b3IgW10oQ2xhc3NFbnRpdHkgY2xzKSA9PiBfbWFwW2Nsc107CgogIEl0ZXJhYmxlPFR5cGVDaGVjaz4gZ2V0IGNoZWNrcyA9PiBfbWFwLnZhbHVlczsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdDbGFzc0NoZWNrcygkY2hlY2tzKSc7CiAgfQp9CgovLy8gRm9yIGVhY2ggY2xhc3MsIHN0b3JlcyB0aGUgcG9zc2libGUgY2xhc3Mgc3VidHlwZSB0ZXN0cyB0aGF0IGNvdWxkIHN1Y2NlZWQuCmFic3RyYWN0IGNsYXNzIFR5cGVDaGVja3MgewogIC8vLyBHZXQgdGhlIHNldCBvZiBjaGVja3MgcmVxdWlyZWQgZm9yIGNsYXNzIFtlbGVtZW50XS4KICBDbGFzc0NoZWNrcyBvcGVyYXRvciBbXShDbGFzc0VudGl0eSBlbGVtZW50KTsKCiAgLy8vIEdldCB0aGUgaXRlcmFibGUgZm9yIGFsbCBjbGFzc2VzIHRoYXQgbmVlZCB0eXBlIGNoZWNrcy4KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGNsYXNzZXM7Cn0KCi8vLyBSZXByZXNlbnRhdGlvbiBvZiB0aGUgc3Vic3RpdHV0aW9uIG9mIHR5cGUgYXJndW1lbnRzIHdoZW4gZ29pbmcgZnJvbSB0aGUKLy8vIHR5cGUgb2YgYSBjbGFzcyB0byBvbmUgb2YgaXRzIHN1cGVydHlwZXMuCi8vLwovLy8gRm9yIGBjbGFzcyBCPFQ+IGV4dGVuZHMgQTxMaXN0PFQ+LCBpbnQ+YCwgdGhlIHN1YnN0aXR1dGlvbiBpcyB0aGUKLy8vIHJlcHJlc2VudGF0aW9uIG9mIGAoVCkgPT4gWzxMaXN0LCBUPiwgaW50XWAuIEZvciBtb3JlIGRldGFpbHMgb2YgdGhlCi8vLyByZXByZXNlbnRhdGlvbiBjb25zdWx0IHRoZSBkb2N1bWVudGF0aW9uIG9mIFtnZXRTdXBlcnR5cGVTdWJzdGl0dXRpb25dLgovL1RPRE8oZmxvaXRzY2gpOiBSZW1vdmUgc3VwcG9ydCBmb3Igbm9uLWZ1bmN0aW9uIHN1YnN0aXR1dGlvbnMuCmNsYXNzIFN1YnN0aXR1dGlvbiB7CiAgZmluYWwgYm9vbCBpc1RyaXZpYWw7CiAgZmluYWwgYm9vbCBpc0Z1bmN0aW9uOwogIGZpbmFsIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50czsKICBmaW5hbCBMaXN0PERhcnRUeXBlPiBwYXJhbWV0ZXJzOwogIGZpbmFsIGludCBsZW5ndGg7CgogIGNvbnN0IFN1YnN0aXR1dGlvbi50cml2aWFsKCkKICAgICAgOiBpc1RyaXZpYWwgPSB0cnVlLAogICAgICAgIGlzRnVuY3Rpb24gPSBmYWxzZSwKICAgICAgICBsZW5ndGggPSBudWxsLAogICAgICAgIGFyZ3VtZW50cyA9IGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICBwYXJhbWV0ZXJzID0gY29uc3QgPERhcnRUeXBlPltdOwoKICBTdWJzdGl0dXRpb24ubGlzdCh0aGlzLmFyZ3VtZW50cykKICAgICAgOiBpc1RyaXZpYWwgPSBmYWxzZSwKICAgICAgICBpc0Z1bmN0aW9uID0gZmFsc2UsCiAgICAgICAgbGVuZ3RoID0gbnVsbCwKICAgICAgICBwYXJhbWV0ZXJzID0gY29uc3QgPERhcnRUeXBlPltdOwoKICBTdWJzdGl0dXRpb24uZnVuY3Rpb24odGhpcy5hcmd1bWVudHMsIHRoaXMucGFyYW1ldGVycykKICAgICAgOiBpc1RyaXZpYWwgPSBmYWxzZSwKICAgICAgICBpc0Z1bmN0aW9uID0gdHJ1ZSwKICAgICAgICBsZW5ndGggPSBudWxsOwoKICBTdWJzdGl0dXRpb24uanNJbnRlcm9wKHRoaXMubGVuZ3RoKQogICAgICA6IGlzVHJpdmlhbCA9IGZhbHNlLAogICAgICAgIGlzRnVuY3Rpb24gPSBmYWxzZSwKICAgICAgICBhcmd1bWVudHMgPSBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgcGFyYW1ldGVycyA9IGNvbnN0IDxEYXJ0VHlwZT5bXTsKCiAgYm9vbCBnZXQgaXNKc0ludGVyb3AgPT4gbGVuZ3RoICE9IG51bGw7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdTdWJzdGl0dXRpb24oaXNUcml2aWFsPSRpc1RyaXZpYWwsJwogICAgICAnaXNGdW5jdGlvbj0kaXNGdW5jdGlvbixpc0pzSW50ZXJvcD0kaXNKc0ludGVyb3AsYXJndW1lbnRzPSRhcmd1bWVudHMsJwogICAgICAncGFyYW1ldGVycz0kcGFyYW1ldGVycyxsZW5ndGg9JGxlbmd0aCknOwp9CgovLy8gSW50ZXJmYWNlIGZvciBjb21wdXRpbmcgc3Vic3RpdHV0aW9ucyBuZWVkIGZvciBydW50aW1lIHR5cGUgY2hlY2tzLgphYnN0cmFjdCBjbGFzcyBSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zIHsKICBib29sIGlzVHJpdmlhbFN1YnN0aXR1dGlvbihDbGFzc0VudGl0eSBjbHMsIENsYXNzRW50aXR5IGNoZWNrKTsKCiAgU3Vic3RpdHV0aW9uIGdldFN1YnN0aXR1dGlvbihDbGFzc0VudGl0eSBjbHMsIENsYXNzRW50aXR5IG90aGVyKTsKCiAgU2V0PENsYXNzRW50aXR5PiBnZXRDbGFzc2VzVXNlZEluU3Vic3RpdHV0aW9ucyhUeXBlQ2hlY2tzIGNoZWNrcyk7CgogIHN0YXRpYyBib29sIGhhc1R5cGVBcmd1bWVudHMoRGFydFR5cGUgdHlwZSkgewogICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZVR5cGUgPSB0eXBlOwogICAgICByZXR1cm4gIWludGVyZmFjZVR5cGUudHJlYXRBc1JhdzsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9Cn0KgI4ATk48ASoBJCEBTQ0aOiUBJx8BNAYfKgFPAgFJIRIZFiMMSBwBQAEMF0kCASoUKgEoAUYBHDEdAR4dBAE3ATEBDBYjBAIBUBw6MAE+JQIBTS4ERklMQRUYGSIjFAEfGhwXKCkBJBscFykBORsbFwEmGxwoKQEqAQw8TjACAUgrQgFEAUUBMCEqKAYSBAIBOnBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19jb2RlZ2VuLmRhcnQ/c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX25ldy5kYXJ0wABKki8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGpzX2JhY2tlbmQucnVudGltZV90eXBlc19uZXc7CgppbXBvcnQgJ3BhY2thZ2U6anNfcnVudGltZS9zaGFyZWQvcmVjaXBlX3N5bnRheC5kYXJ0JzsKCmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnCiAgICBzaG93IENvbW1vbkVsZW1lbnRzLCBKQ29tbW9uRWxlbWVudHMsIEpFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganNBc3Q7CmltcG9ydCAnLi4vanMvanMuZGFydCcgc2hvdyBqczsKaW1wb3J0ICcuLi9qc19tb2RlbC90eXBlX3JlY2lwZS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19lbWl0dGVyL2pzX2VtaXR0ZXIuZGFydCcgc2hvdyBNb2R1bGFyRW1pdHRlcjsKaW1wb3J0ICcuLi91bml2ZXJzZS9jbGFzc19oaWVyYXJjaHkuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CmltcG9ydCAnbmFtZXIuZGFydCc7CmltcG9ydCAnbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAncnVudGltZV90eXBlc19jb2RlZ2VuLmRhcnQnIHNob3cgUnVudGltZVR5cGVzU3Vic3RpdHV0aW9uczsKaW1wb3J0ICdydW50aW1lX3R5cGVzX3Jlc29sdXRpb24uZGFydCcgc2hvdyBSdW50aW1lVHlwZXNOZWVkOwoKYWJzdHJhY3QgY2xhc3MgUmVjaXBlRW5jb2RlciB7CiAgLy8vIFJldHVybnMgYSBbanNBc3QuTGl0ZXJhbF0gcmVwcmVzZW50aW5nIHRoZSBnaXZlbiBbcmVjaXBlXSB0byBiZQogIC8vLyBldmFsdWF0ZWQgYWdhaW5zdCBhIHR5cGUgZW52aXJvbm1lbnQgd2l0aCBzaGFwZSBbc3RydWN0dXJlXS4KICBqc0FzdC5MaXRlcmFsIGVuY29kZVJlY2lwZShNb2R1bGFyRW1pdHRlciBlbWl0dGVyLAogICAgICBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgZW52aXJvbm1lbnRTdHJ1Y3R1cmUsIFR5cGVSZWNpcGUgcmVjaXBlKTsKCiAganNBc3QuTGl0ZXJhbCBlbmNvZGVHcm91bmRSZWNpcGUoTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwgVHlwZVJlY2lwZSByZWNpcGUpOwoKICAvLy8gUmV0dXJuIHRoZSByZWNpcGUgd2l0aCB0eXBlIHZhcmlhYmxlcyByZXBsYWNlZCB3aXRoIDxhbnk+LiBUaGlzIGlzIGEgaGFjawogIC8vLyB1bnRpbCBEYXJ0VHlwZSBjb250YWlucyA8YW55PiBhbmQgdGhlIHBhcmFtZXRlciBzdHViIGVtaXR0ZXIgaXMgcmVwbGFjZWQKICAvLy8gd2l0aCBhbiBTU0EgcGF0aC4KICAvLyBUT0RPKDMzNDIyKTogUmVtb3ZlIG5lZWQgZm9yIHRoaXMuCiAganNBc3QuTGl0ZXJhbCBlbmNvZGVSZWNpcGVXaXRoVmFyaWFibGVzUmVwbGFjZUJ5QW55KAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLCBEYXJ0VHlwZSBkYXJ0VHlwZSk7CgogIC8vLyBSZXR1cm5zIGEgW2pzQXN0LkxpdGVyYWxdIHJlcHJlc2VudGluZyBbc3VwZXJ0eXBlQXJndW1lbnRdIHRvIGJlIGV2YWx1YXRlZAogIC8vLyBhZ2FpbnN0IGEgW0Z1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmVdIHJlcHJlc2VudGluZyBbZGVjbGFyaW5nVHlwZV0uIEFueQogIC8vLyBbVHlwZVZhcmlhYmxlVHlwZV1zIGFwcGVhcmluZyBpbiBbc3VwZXJ0eXBlQXJndW1lbnRdIHdoaWNoIGFyZSBkZWNsYXJlZCBieQogIC8vLyBbZGVjbGFyaW5nVHlwZV0gYXJlIGFsd2F5cyBlbmNvZGVkIGFzIGluZGljZXMuCiAganNBc3QuTGl0ZXJhbCBlbmNvZGVEaXJlY3RTdXBlcnR5cGVSZWNpcGUoTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwKICAgICAgSW50ZXJmYWNlVHlwZSBkZWNsYXJpbmdUeXBlLCBEYXJ0VHlwZSBzdXBlcnR5cGVBcmd1bWVudCk7CgogIC8vLyBDb252ZXJ0cyBhIHJlY2lwZSBpbnRvIGEgZnJhZ21lbnQgb2YgY29kZSB0aGF0IGFjY2Vzc2VzIHRoZSBldmFsdWF0ZWQKICAvLy8gcmVjaXBlLgogIC8vIFRPRE8oMzM0MjIpOiBSZW1vdmUgbmVlZCBmb3IgdGhpcyBieSBwdXNoaW5nIHN0dWJzIHRocm91Z2ggU1NBLgogIGpzQXN0LkV4cHJlc3Npb24gZXZhbHVhdGVSZWNpcGUoTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwganNBc3QuTGl0ZXJhbCByZWNpcGUpOwoKICAvLyBUT0RPKHNyYSk6IFN0aWxsIG5lZWQgYSAkc2lnbmF0dXJlIGZ1bmN0aW9uIHdoZW4gdGhlIGZ1bmN0aW9uIHR5cGUgaXMgYQogIC8vIGZ1bmN0aW9uIG9mIGNsb3NlZCB0eXBlIHZhcmlhYmxlcy4gU2VlIGlmIHRoZSAkc2lnbmF0dXJlIG1ldGhvZCBjYW4gYWx3YXlzCiAgLy8gYmUgZ2VuZXJhdGVkIHRocm91Z2ggU1NBIGluIHRob3NlIGNhc2VzLgogIGpzQXN0LkV4cHJlc3Npb24gZW5jb2RlU2lnbmF0dXJlKE1vZHVsYXJOYW1lciBuYW1lciwgTW9kdWxhckVtaXR0ZXIgZW1pdHRlciwKICAgICAgRGFydFR5cGUgdHlwZSwganNBc3QuRXhwcmVzc2lvbiB0aGlzXyk7Cn0KCmNsYXNzIFJlY2lwZUVuY29kZXJJbXBsIGltcGxlbWVudHMgUmVjaXBlRW5jb2RlciB7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zIF9ydGlTdWJzdGl0dXRpb25zOwogIGZpbmFsIE5hdGl2ZUJhc2ljRGF0YSBfbmF0aXZlRGF0YTsKICBmaW5hbCBKRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgZmluYWwgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzOwogIGZpbmFsIFJ1bnRpbWVUeXBlc05lZWQgX3J0aU5lZWQ7CgogIFJlY2lwZUVuY29kZXJJbXBsKHRoaXMuX2Nsb3NlZFdvcmxkLCB0aGlzLl9ydGlTdWJzdGl0dXRpb25zLCB0aGlzLl9uYXRpdmVEYXRhLAogICAgICB0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQsIHRoaXMuY29tbW9uRWxlbWVudHMsIHRoaXMuX3J0aU5lZWQpOwoKICBAb3ZlcnJpZGUKICBqc0FzdC5MaXRlcmFsIGVuY29kZVJlY2lwZShNb2R1bGFyRW1pdHRlciBlbWl0dGVyLAogICAgICBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgZW52aXJvbm1lbnRTdHJ1Y3R1cmUsIFR5cGVSZWNpcGUgcmVjaXBlKSB7CiAgICByZXR1cm4gX1JlY2lwZUdlbmVyYXRvcih0aGlzLCBlbWl0dGVyLCBlbnZpcm9ubWVudFN0cnVjdHVyZSwgcmVjaXBlKS5ydW4oKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkxpdGVyYWwgZW5jb2RlR3JvdW5kUmVjaXBlKE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsIFR5cGVSZWNpcGUgcmVjaXBlKSB7CiAgICByZXR1cm4gX1JlY2lwZUdlbmVyYXRvcih0aGlzLCBlbWl0dGVyLCBudWxsLCByZWNpcGUpLnJ1bigpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuTGl0ZXJhbCBlbmNvZGVSZWNpcGVXaXRoVmFyaWFibGVzUmVwbGFjZUJ5QW55KAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLCBEYXJ0VHlwZSBkYXJ0VHlwZSkgewogICAgcmV0dXJuIF9SZWNpcGVHZW5lcmF0b3IodGhpcywgZW1pdHRlciwgbnVsbCwgVHlwZUV4cHJlc3Npb25SZWNpcGUoZGFydFR5cGUpLAogICAgICAgICAgICBoYWNrVHlwZVZhcmlhYmxlc1RvQW55OiB0cnVlKQogICAgICAgIC5ydW4oKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkxpdGVyYWwgZW5jb2RlRGlyZWN0U3VwZXJ0eXBlUmVjaXBlKE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIsCiAgICAgIEludGVyZmFjZVR5cGUgZGVjbGFyaW5nVHlwZSwgRGFydFR5cGUgc3VwZXJ0eXBlQXJndW1lbnQpIHsKICAgIHJldHVybiBfUmVjaXBlR2VuZXJhdG9yKAogICAgICAgICAgICB0aGlzLAogICAgICAgICAgICBlbWl0dGVyLAogICAgICAgICAgICBGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlKGNsYXNzVHlwZTogZGVjbGFyaW5nVHlwZSksCiAgICAgICAgICAgIFR5cGVFeHByZXNzaW9uUmVjaXBlKHN1cGVydHlwZUFyZ3VtZW50KSwKICAgICAgICAgICAgaW5kZXhUeXBlVmFyaWFibGVzT25EZWNsYXJpbmdDbGFzczogdHJ1ZSkKICAgICAgICAucnVuKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIGV2YWx1YXRlUmVjaXBlKAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLCBqc0FzdC5MaXRlcmFsIHJlY2lwZSkgewogICAgcmV0dXJuIGpzKCcjKCMpJywKICAgICAgICBbZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb21tb25FbGVtZW50cy5maW5kVHlwZSksIHJlY2lwZV0pOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiBlbmNvZGVTaWduYXR1cmUoTW9kdWxhck5hbWVyIG5hbWVyLCBNb2R1bGFyRW1pdHRlciBlbWl0dGVyLAogICAgICBEYXJ0VHlwZSB0eXBlLCBqc0FzdC5FeHByZXNzaW9uIHRoaXNfKSB7CiAgICAvLyBUT0RPKHNyYSk6IFRoZXNlIGlucHV0cyAocmVmZXJlbmNlZCB0byBxdWVsbCBsaW50cykgYXJlIHVzZWQgYnkgdGhlIG9sZAogICAgLy8gcnRpIHNpZ25hdHVyZSBnZW5lcmF0b3IuIERvIHdlIG5lZWQgdGhlbT8KICAgIF9ydGlOZWVkOwogICAgY29tbW9uRWxlbWVudHM7CiAgICBfZWxlbWVudEVudmlyb25tZW50OwogICAgdGhyb3cgVW5pbXBsZW1lbnRlZEVycm9yKCdSZWNpcGVFbmNvZGVySW1wbC5nZXRTaWduYXR1cmVFbmNvZGluZycpOwogIH0KfQoKY2xhc3MgX1JlY2lwZUdlbmVyYXRvciBpbXBsZW1lbnRzIERhcnRUeXBlVmlzaXRvcjx2b2lkLCB2b2lkPiB7CiAgZmluYWwgUmVjaXBlRW5jb2RlckltcGwgX2VuY29kZXI7CiAgZmluYWwgTW9kdWxhckVtaXR0ZXIgX2VtaXR0ZXI7CiAgZmluYWwgVHlwZUVudmlyb25tZW50U3RydWN0dXJlIF9lbnZpcm9ubWVudDsKICBmaW5hbCBUeXBlUmVjaXBlIF9yZWNpcGU7CiAgZmluYWwgYm9vbCBpbmRleFR5cGVWYXJpYWJsZXNPbkRlY2xhcmluZ0NsYXNzOwogIGZpbmFsIGJvb2wgaGFja1R5cGVWYXJpYWJsZXNUb0FueTsKCiAgZmluYWwgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gZnVuY3Rpb25UeXBlVmFyaWFibGVzID0gW107CgogIC8vIEFjY3VtdWxhdGVkIHJlY2lwZS4KICBmaW5hbCBMaXN0PGpzQXN0LkxpdGVyYWw+IF9mcmFnbWVudHMgPSBbXTsKICBmaW5hbCBMaXN0PGludD4gX2NvZGVzID0gW107CgogIF9SZWNpcGVHZW5lcmF0b3IoCiAgICAgIHRoaXMuX2VuY29kZXIsIHRoaXMuX2VtaXR0ZXIsIHRoaXMuX2Vudmlyb25tZW50LCB0aGlzLl9yZWNpcGUsCiAgICAgIHt0aGlzLmluZGV4VHlwZVZhcmlhYmxlc09uRGVjbGFyaW5nQ2xhc3MgPSBmYWxzZSwKICAgICAgdGhpcy5oYWNrVHlwZVZhcmlhYmxlc1RvQW55ID0gZmFsc2V9KTsKCiAgSkNsb3NlZFdvcmxkIGdldCBfY2xvc2VkV29ybGQgPT4gX2VuY29kZXIuX2Nsb3NlZFdvcmxkOwogIE5hdGl2ZUJhc2ljRGF0YSBnZXQgX25hdGl2ZURhdGEgPT4gX2VuY29kZXIuX25hdGl2ZURhdGE7CiAgUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyBnZXQgX3J0aVN1YnN0aXR1dGlvbnMgPT4gX2VuY29kZXIuX3J0aVN1YnN0aXR1dGlvbnM7CgogIGpzQXN0LkxpdGVyYWwgcnVuKCkgewogICAgX3N0YXJ0KF9yZWNpcGUpOwogICAgYXNzZXJ0KGZ1bmN0aW9uVHlwZVZhcmlhYmxlcy5pc0VtcHR5KTsKICAgIGlmIChfZnJhZ21lbnRzLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuIGpzLnN0cmluZyhTdHJpbmcuZnJvbUNoYXJDb2RlcyhfY29kZXMpKTsKICAgIH0KICAgIF9mbHVzaENvZGVzKCk7CiAgICBqc0FzdC5MaXRlcmFsU3RyaW5nIHF1b3RlID0ganNBc3QuTGl0ZXJhbFN0cmluZygnIicpOwogICAgcmV0dXJuIGpzQXN0LlN0cmluZ0NvbmNhdGVuYXRpb24oW3F1b3RlLCAuLi5fZnJhZ21lbnRzLCBxdW90ZV0pOwogIH0KCiAgdm9pZCBfc3RhcnQoVHlwZVJlY2lwZSByZWNpcGUpIHsKICAgIGlmIChyZWNpcGUgaXMgVHlwZUV4cHJlc3Npb25SZWNpcGUpIHsKICAgICAgdmlzaXQocmVjaXBlLnR5cGUsIG51bGwpOwogICAgfSBlbHNlIGlmIChyZWNpcGUgaXMgU2luZ2xldG9uVHlwZUVudmlyb25tZW50UmVjaXBlKSB7CiAgICAgIHZpc2l0KHJlY2lwZS50eXBlLCBudWxsKTsKICAgIH0gZWxzZSBpZiAocmVjaXBlIGlzIEZ1bGxUeXBlRW52aXJvbm1lbnRSZWNpcGUpIHsKICAgICAgX3N0YXJ0RnVsbFR5cGVFbnZpcm9ubWVudFJlY2lwZShyZWNpcGUsIG51bGwpOwogICAgfQogIH0KCiAgdm9pZCBfc3RhcnRGdWxsVHlwZUVudmlyb25tZW50UmVjaXBlKEZ1bGxUeXBlRW52aXJvbm1lbnRSZWNpcGUgcmVjaXBlLCBfKSB7CiAgICBpZiAocmVjaXBlLmNsYXNzVHlwZSA9PSBudWxsKSB7CiAgICAgIF9lbWl0Q29kZShSZWNpcGUucHVzaER5bmFtaWMpOwogICAgICBhc3NlcnQocmVjaXBlLnR5cGVzLmlzTm90RW1wdHkpOwogICAgfSBlbHNlIHsKICAgICAgdmlzaXQocmVjaXBlLmNsYXNzVHlwZSwgbnVsbCk7CiAgICAgIC8vIFRPRE8oc3JhKTogVGhlIHNlcGFyYXRvciBjYW4gYmUgb21pdHRlZCB3aGVuIHRoZSBwYXJzZXIgd2lsbCBoYXZlCiAgICAgIC8vIHJlZHVjZWQgdG8gdGhlIHRvcCBvZiBzdGFjayB0byBhbiBSdGkgdmFsdWUuCiAgICAgIF9lbWl0Q29kZShSZWNpcGUudG9UeXBlKTsKICAgIH0KCiAgICBpZiAocmVjaXBlLnR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgX2VtaXRDb2RlKFJlY2lwZS5zdGFydFR5cGVBcmd1bWVudHMpOwogICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKICAgICAgZm9yIChEYXJ0VHlwZSB0eXBlIGluIHJlY2lwZS50eXBlcykgewogICAgICAgIGlmICghZmlyc3QpIHsKICAgICAgICAgIF9lbWl0Q29kZShSZWNpcGUuc2VwYXJhdG9yKTsKICAgICAgICB9CiAgICAgICAgdmlzaXQodHlwZSwgXyk7CiAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgfQogICAgICBfZW1pdENvZGUoUmVjaXBlLmVuZFR5cGVBcmd1bWVudHMpOwogICAgfQogIH0KCiAgdm9pZCBfZW1pdENvZGUoaW50IGNvZGUpIHsKICAgIC8vIFRPRE8oc3JhKTogV2Ugc2hvdWxkIHBlcm1pdCBjb2RlcyB3aXRoIHNob3J0IGVzY2FwZXMgKGxpa2UgJ1xuJykgZm9yCiAgICAvLyBpbmZyZXF1ZW50IG9wZXJhdG9ycy4KICAgIGFzc2VydChjb2RlID49IDB4MjAgJiYgY29kZSA8PSAweDdFICYmIGNvZGUgIT0gMHgyMik7CiAgICBfY29kZXMuYWRkKGNvZGUpOwogIH0KCiAgdm9pZCBfZmx1c2hDb2RlcygpIHsKICAgIGlmIChfY29kZXMuaXNFbXB0eSkgcmV0dXJuOwogICAgLy8gVE9ETyhzcmEpOiBjb2RlcyBuZWVkIHNvbWUgZXNjYXBpbmcuCiAgICBfZnJhZ21lbnRzLmFkZChTdHJpbmdCYWNrZWROYW1lKFN0cmluZy5mcm9tQ2hhckNvZGVzKF9jb2RlcykpKTsKICAgIF9jb2Rlcy5jbGVhcigpOwogIH0KCiAgdm9pZCBfZW1pdEludGVnZXIoaW50IHZhbHVlKSB7CiAgICBpZiAoX2NvZGVzLmlzRW1wdHkgPyBfZnJhZ21lbnRzLmlzTm90RW1wdHkgOiBSZWNpcGUuaXNEaWdpdChfY29kZXMubGFzdCkpIHsKICAgICAgX2VtaXRDb2RlKFJlY2lwZS5zZXBhcmF0b3IpOwogICAgfQogICAgX2VtaXRTdHJpbmdVbmVzY2FwZWQoJyR2YWx1ZScpOwogIH0KCiAgdm9pZCBfZW1pdFN0cmluZ1VuZXNjYXBlZChTdHJpbmcgc3RyaW5nKSB7CiAgICBmb3IgKGludCBjb2RlIGluIHN0cmluZy5jb2RlVW5pdHMpIHsKICAgICAgX2VtaXRDb2RlKGNvZGUpOwogICAgfQogIH0KCiAgdm9pZCBfZW1pdE5hbWUoanNBc3QuTmFtZSBuYW1lKSB7CiAgICBpZiAoX2ZyYWdtZW50cy5pc05vdEVtcHR5ICYmIF9jb2Rlcy5pc0VtcHR5KSB7CiAgICAgIF9lbWl0Q29kZShSZWNpcGUuc2VwYXJhdG9yKTsKICAgIH0KICAgIF9mbHVzaENvZGVzKCk7CiAgICBfZnJhZ21lbnRzLmFkZChuYW1lKTsKICB9CgogIHZvaWQgX2VtaXRFeHRlbnNpb25PcChpbnQgdmFsdWUpIHsKICAgIF9lbWl0SW50ZWdlcih2YWx1ZSk7CiAgICBfZW1pdENvZGUoUmVjaXBlLmV4dGVuc2lvbk9wKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXQoRGFydFR5cGUgdHlwZSwgXykgPT4gdHlwZS5hY2NlcHQodGhpcywgXyk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlVmFyaWFibGVUeXBlKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSwgXykgewogICAgaWYgKGhhY2tUeXBlVmFyaWFibGVzVG9BbnkpIHsKICAgICAgLy8gRW1pdCAnYW55JyB0eXBlLgogICAgICBfZW1pdEV4dGVuc2lvbk9wKFJlY2lwZS5wdXNoQW55RXh0ZW5zaW9uKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBlbnZpcm9ubWVudCA9IF9lbnZpcm9ubWVudDsKICAgIGlmIChlbnZpcm9ubWVudCBpcyBTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUpIHsKICAgICAgaWYgKHR5cGUgPT0gZW52aXJvbm1lbnQudmFyaWFibGUpIHsKICAgICAgICBfZW1pdEludGVnZXIoMCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CiAgICBpZiAoZW52aXJvbm1lbnQgaXMgRnVsbFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSkgewogICAgICBpbnQgaSA9IGVudmlyb25tZW50LmJpbmRpbmdzLmluZGV4T2YodHlwZSk7CiAgICAgIGlmIChpID49IDApIHsKICAgICAgICAvLyBJbmRleGVzIGFyZSAxLWJhc2VkIHNpbmNlICcwJyBlbmNvZGVzIHVzaW5nIHRoZSBlbnRpcmUgdHlwZSBmb3IgdGhlCiAgICAgICAgLy8gc2luZ2xldG9uIHN0cnVjdHVyZS4KICAgICAgICBfZW1pdEludGVnZXIoaSArIDEpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgaW50IGluZGV4ID0gX2luZGV4SW50b0NsYXNzVHlwZVZhcmlhYmxlcyh0eXBlKTsKICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHsKICAgICAgICAvLyBJbmRleGVkIGNsYXNzIHR5cGUgdmFyaWFibGVzIGNvbWUgYWZ0ZXIgdGhlIGJvdW5kIGZ1bmN0aW9uIHR5cGUKICAgICAgICAvLyB2YXJpYWJsZXMuCiAgICAgICAgX2VtaXRJbnRlZ2VyKDEgKyBlbnZpcm9ubWVudC5iaW5kaW5ncy5sZW5ndGggKyBpbmRleCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGpzQXN0Lk5hbWUgbmFtZSA9IF9lbWl0dGVyLnR5cGVWYXJpYWJsZUFjY2Vzc05ld1J0aSh0eXBlLmVsZW1lbnQpOwogICAgICBfZW1pdE5hbWUobmFtZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFRPRE8oc3JhKTogSGFuZGxlIG1pc3NpbmcgY2FzZXMuIFRoaXMganVzdCBlbWl0cyBzb21lIHJlYWRhYmxlIGp1bmsuIFRoZQogICAgLy8gYmFja3RpY2tzIGVuc3VyZSBpdCB3b24ndCBwYXJzZSBhdCBydW50aW1lLgogICAgJ2AkdHlwZWAnLmNvZGVVbml0cy5mb3JFYWNoKF9lbWl0Q29kZSk7CiAgfQoKICBpbnQgLyo/Ki8gX2luZGV4SW50b0NsYXNzVHlwZVZhcmlhYmxlcyhUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlKSB7CiAgICBUeXBlVmFyaWFibGVFbnRpdHkgZWxlbWVudCA9IHZhcmlhYmxlLmVsZW1lbnQ7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50LnR5cGVEZWNsYXJhdGlvbjsKCiAgICBpZiAoaW5kZXhUeXBlVmFyaWFibGVzT25EZWNsYXJpbmdDbGFzcykgewogICAgICBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgZW52aXJvbm1lbnQgPSBfZW52aXJvbm1lbnQ7CiAgICAgIGlmIChlbnZpcm9ubWVudCBpcyBGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlKSB7CiAgICAgICAgaWYgKGlkZW50aWNhbChlbnZpcm9ubWVudC5jbGFzc1R5cGUuZWxlbWVudCwgY2xzKSkgewogICAgICAgICAgcmV0dXJuIGVsZW1lbnQuaW5kZXg7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gVE9ETyhzcmEpOiBXZSBtaWdodCBiZSBpbiBhIGNvbnRleHQgd2hlcmUgdGhlIGNsYXNzIHR5cGUgdmFyaWFibGUgaGFzIGFuCiAgICAvLyBpbmRleCwgZXZlbiB0aG91Z2ggaW4gdGhlIGdlbmVyYWwgY2FzZSBpdCBpcyBub3QgYXQgYSBzcGVjaWZpYyBpbmRleC4KCiAgICBpZiAoX2Nsb3NlZFdvcmxkLmlzVXNlZEFzTWl4aW4oY2xzKSkgcmV0dXJuIG51bGw7CgogICAgQ2xhc3NIaWVyYXJjaHkgY2xhc3NIaWVyYXJjaHkgPSBfY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHk7CiAgICBpZiAoY2xhc3NIaWVyYXJjaHkuYW55U3RyaWN0U3ViY2xhc3NPZihjbHMsIChDbGFzc0VudGl0eSBzdWJjbGFzcykgewogICAgICByZXR1cm4gIV9ydGlTdWJzdGl0dXRpb25zLmlzVHJpdmlhbFN1YnN0aXR1dGlvbihzdWJjbGFzcywgY2xzKTsKICAgIH0pKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIGVsZW1lbnQuaW5kZXg7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25UeXBlVmFyaWFibGUoRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZSwgXykgewogICAgaW50IHBvc2l0aW9uID0gZnVuY3Rpb25UeXBlVmFyaWFibGVzLmluZGV4T2YodHlwZSk7CiAgICBhc3NlcnQocG9zaXRpb24gPj0gMCk7CiAgICAvLyBTZWUgW3Zpc2l0RnVuY3Rpb25UeXBlXSBmb3IgZXhwbGFuYXRpb24uCiAgICBfZW1pdEludGVnZXIoZnVuY3Rpb25UeXBlVmFyaWFibGVzLmxlbmd0aCAtIHBvc2l0aW9uIC0gMSk7CiAgICBfZW1pdENvZGUoUmVjaXBlLmdlbmVyaWNGdW5jdGlvblR5cGVQYXJhbWV0ZXJJbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgdHlwZSwgXykgewogICAgX2VtaXRDb2RlKFJlY2lwZS5wdXNoRHluYW1pYyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50ZXJmYWNlVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUsIF8pIHsKICAgIGpzQXN0Lk5hbWUgbmFtZSA9IF9lbWl0dGVyLnR5cGVBY2Nlc3NOZXdSdGkodHlwZS5lbGVtZW50KTsKICAgIGlmICh0eXBlLnR5cGVBcmd1bWVudHMuaXNFbXB0eSkgewogICAgICAvLyBQdXNoIHRoZSBuYW1lLCB3aGljaCBpcyBsYXRlciBjb252ZXJ0ZWQgYnkgYW4gaW1wbGljaXQgdG9UeXBlCiAgICAgIC8vIG9wZXJhdGlvbi4KICAgICAgX2VtaXROYW1lKG5hbWUpOwogICAgfSBlbHNlIHsKICAgICAgX2VtaXROYW1lKG5hbWUpOwogICAgICBfZW1pdENvZGUoUmVjaXBlLnN0YXJ0VHlwZUFyZ3VtZW50cyk7CiAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgICBmb3IgKERhcnRUeXBlIGFyZ3VtZW50VHlwZSBpbiB0eXBlLnR5cGVBcmd1bWVudHMpIHsKICAgICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgICBfZW1pdENvZGUoUmVjaXBlLnNlcGFyYXRvcik7CiAgICAgICAgfQogICAgICAgIGlmIChfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcENsYXNzKHR5cGUuZWxlbWVudCkpIHsKICAgICAgICAgIC8vIEVtaXQgJ2FueScgdHlwZS4KICAgICAgICAgIF9lbWl0RXh0ZW5zaW9uT3AoUmVjaXBlLnB1c2hBbnlFeHRlbnNpb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2aXNpdChhcmd1bWVudFR5cGUsIF8pOwogICAgICAgIH0KICAgICAgICBmaXJzdCA9IGZhbHNlOwogICAgICB9CiAgICAgIF9lbWl0Q29kZShSZWNpcGUuZW5kVHlwZUFyZ3VtZW50cyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25UeXBlKEZ1bmN0aW9uVHlwZSB0eXBlLCBfKSB7CiAgICBpZiAodHlwZS50eXBlVmFyaWFibGVzLmlzTm90RW1wdHkpIHsKICAgICAgLy8gRW50ZXIgZ2VuZXJpYyBmdW5jdGlvbiBzY29wZS4KICAgICAgLy8KICAgICAgLy8gRnVuY3Rpb24gdHlwZSB2YXJpYWJsZXMgYXJlIGVuY29kZWQgYXMgYSBtb2RpZmllZCBkZSBCcnVpbiBpbmRleC4gV2UKICAgICAgLy8gY291bnQgdmFyaWFibGVzIGZyb20gdGhlIGN1cnJlbnQgc2NvcGUgb3V0d2FyZHMsIGNvdW50aW5nIHRoZSB2YXJpYWJsZXMKICAgICAgLy8gaW4gdGhlIHNhbWUgc2NvcGUgbGVmdC10by1yaWdodC4KICAgICAgLy8KICAgICAgLy8gSWYgd2UgcHVzaCB0aGUgY3VycmVudCBzY29wZSdzIHZhcmlhYmxlcyBpbiByZXZlcnNlLCB0aGVuIHRoZSBpbmRleCBpcwogICAgICAvLyB0aGUgcG9zaXRpb24gbWVhc3VyZWQgZnJvbSB0aGUgZW5kLgogICAgICAvLwogICAgICAvLyAgICBmb288QUEsQkI+KCkgPT4gLi4uCiAgICAgIC8vICAgICAgLy9eMCBeMQogICAgICAvLyAgICBmdW5jdGlvblR5cGVWYXJpYWJsZXM6IFtCQixBQV0KICAgICAgLy8KICAgICAgLy8gICAgZm9vPEFBLEJCPigpID0+IDxVVSxWVixXVz4oKSA9PiAuLi4KICAgICAgLy8gICAgICAgIF4zIF40ICAgICAgICBeMCBeMSBeMgogICAgICAvLyAgICBmdW5jdGlvblR5cGVWYXJpYWJsZXM6IFtCQixBQSxXVyxWVixVVV0KICAgICAgLy8KICAgICAgZm9yIChGdW5jdGlvblR5cGVWYXJpYWJsZSB2YXJpYWJsZSBpbiB0eXBlLnR5cGVWYXJpYWJsZXMucmV2ZXJzZWQpIHsKICAgICAgICBmdW5jdGlvblR5cGVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlKTsKICAgICAgfQogICAgfQoKICAgIHZpc2l0KHR5cGUucmV0dXJuVHlwZSwgXyk7CiAgICBfZW1pdENvZGUoUmVjaXBlLnN0YXJ0RnVuY3Rpb25Bcmd1bWVudHMpOwoKICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgZm9yIChEYXJ0VHlwZSBwYXJhbWV0ZXJUeXBlIGluIHR5cGUucGFyYW1ldGVyVHlwZXMpIHsKICAgICAgaWYgKCFmaXJzdCkgewogICAgICAgIF9lbWl0Q29kZShSZWNpcGUuc2VwYXJhdG9yKTsKICAgICAgfQogICAgICB2aXNpdChwYXJhbWV0ZXJUeXBlLCBfKTsKICAgICAgZmlyc3QgPSBmYWxzZTsKICAgIH0KCiAgICBpZiAodHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgZmlyc3QgPSB0cnVlOwogICAgICBfZW1pdENvZGUoUmVjaXBlLnN0YXJ0T3B0aW9uYWxHcm91cCk7CiAgICAgIGZvciAoRGFydFR5cGUgcGFyYW1ldGVyVHlwZSBpbiB0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMpIHsKICAgICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgICBfZW1pdENvZGUoUmVjaXBlLnNlcGFyYXRvcik7CiAgICAgICAgfQogICAgICAgIHZpc2l0KHBhcmFtZXRlclR5cGUsIF8pOwogICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgIH0KICAgICAgX2VtaXRDb2RlKFJlY2lwZS5lbmRPcHRpb25hbEdyb3VwKTsKICAgIH0KCiAgICB2b2lkIGVtaXROYW1lZEdyb3VwKExpc3Q8U3RyaW5nPiBuYW1lcywgTGlzdDxEYXJ0VHlwZT4gdHlwZXMpIHsKICAgICAgYXNzZXJ0KG5hbWVzLmxlbmd0aCA9PSB0eXBlcy5sZW5ndGgpOwogICAgICBmaXJzdCA9IHRydWU7CiAgICAgIF9lbWl0Q29kZShSZWNpcGUuc3RhcnROYW1lZEdyb3VwKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmICghZmlyc3QpIHsKICAgICAgICAgIF9lbWl0Q29kZShSZWNpcGUuc2VwYXJhdG9yKTsKICAgICAgICB9CiAgICAgICAgX2VtaXRTdHJpbmdVbmVzY2FwZWQobmFtZXNbaV0pOwogICAgICAgIF9lbWl0Q29kZShSZWNpcGUubmFtZVNlcGFyYXRvcik7CiAgICAgICAgdmlzaXQodHlwZXNbaV0sIF8pOwogICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgIH0KICAgICAgX2VtaXRDb2RlKFJlY2lwZS5lbmROYW1lZEdyb3VwKTsKICAgIH0KCiAgICAvLyBUT0RPKHNyYSk6IFRoZXNlIGFyZSBvcHRpb25hbCBuYW1lZCBwYXJhbWV0ZXJzLiBIYW5kbGUgcmVxdWlyZWQgbmFtZWQKICAgIC8vIHBhcmFtZXRlcnMgdGhlIHNhbWUgd2F5IHdoZW4gdGhleSBhcmUgaW1wbGVtZW50ZWQuCiAgICBpZiAodHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgZW1pdE5hbWVkR3JvdXAodHlwZS5uYW1lZFBhcmFtZXRlcnMsIHR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcyk7CiAgICB9CgogICAgX2VtaXRDb2RlKFJlY2lwZS5lbmRGdW5jdGlvbkFyZ3VtZW50cyk7CgogICAgLy8gRW1pdCBnZW5lcmljIHR5cGUgYm91bmRzLgogICAgaWYgKHR5cGUudHlwZVZhcmlhYmxlcy5pc05vdEVtcHR5KSB7CiAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgICBfZW1pdENvZGUoUmVjaXBlLnN0YXJ0VHlwZUFyZ3VtZW50cyk7CiAgICAgIGZvciAoRnVuY3Rpb25UeXBlVmFyaWFibGUgdHlwZVZhcmlhYmxlIGluIHR5cGUudHlwZVZhcmlhYmxlcykgewogICAgICAgIGlmICghZmlyc3QpIHsKICAgICAgICAgIF9lbWl0Q29kZShSZWNpcGUuc2VwYXJhdG9yKTsKICAgICAgICB9CiAgICAgICAgdmlzaXQodHlwZVZhcmlhYmxlLmJvdW5kLCBfKTsKICAgICAgfQogICAgICBfZW1pdENvZGUoUmVjaXBlLmVuZFR5cGVBcmd1bWVudHMpOwogICAgfQoKICAgIGlmICh0eXBlLnR5cGVWYXJpYWJsZXMuaXNOb3RFbXB0eSkgewogICAgICAvLyBFeGl0IGdlbmVyaWMgZnVuY3Rpb24gc2NvcGUuIFJlbW92ZSB0aGUgdHlwZSB2YXJpYWJsZXMgcHVzaGVkIGF0IGVudHJ5LgogICAgICBmdW5jdGlvblR5cGVWYXJpYWJsZXMubGVuZ3RoIC09IHR5cGUudHlwZVZhcmlhYmxlcy5sZW5ndGg7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Vm9pZFR5cGUoVm9pZFR5cGUgdHlwZSwgXykgewogICAgX2VtaXRDb2RlKFJlY2lwZS5wdXNoVm9pZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZWRlZlR5cGUoVHlwZWRlZlR5cGUgdHlwZSwgXykgewogICAgdmlzaXQodHlwZS51bmFsaWFzZWQsIF8pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1dHVyZU9yVHlwZShGdXR1cmVPclR5cGUgdHlwZSwgXykgewogICAgdmlzaXQodHlwZS50eXBlQXJndW1lbnQsIF8pOwogICAgX2VtaXRDb2RlKFJlY2lwZS53cmFwRnV0dXJlT3IpOwogIH0KfQoKY2xhc3MgX1J1bGVzZXRFbnRyeSB7CiAgZmluYWwgSW50ZXJmYWNlVHlwZSBfdGFyZ2V0VHlwZTsKICBMaXN0PEludGVyZmFjZVR5cGU+IF9zdXBlcnR5cGVzOwogIE1hcDxUeXBlVmFyaWFibGVUeXBlLCBEYXJ0VHlwZT4gX3R5cGVWYXJpYWJsZXMgPSB7fTsKCiAgX1J1bGVzZXRFbnRyeSh0aGlzLl90YXJnZXRUeXBlLCBJdGVyYWJsZTxJbnRlcmZhY2VUeXBlPiBzdXBlcnR5cGVzKQogICAgICA6IF9zdXBlcnR5cGVzID0gc3VwZXJ0eXBlcy50b0xpc3QoKTsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfc3VwZXJ0eXBlcy5pc0VtcHR5ICYmIF90eXBlVmFyaWFibGVzLmlzRW1wdHk7Cn0KCmNsYXNzIFJ1bGVzZXQgewogIExpc3Q8X1J1bGVzZXRFbnRyeT4gX2VudHJpZXM7CgogIFJ1bGVzZXQodGhpcy5fZW50cmllcyk7CiAgUnVsZXNldC5lbXB0eSgpIDogdGhpcyhbXSk7CgogIHZvaWQgYWRkKEludGVyZmFjZVR5cGUgdGFyZ2V0VHlwZSwgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gc3VwZXJ0eXBlcykgPT4KICAgICAgX2VudHJpZXMuYWRkKF9SdWxlc2V0RW50cnkodGFyZ2V0VHlwZSwgc3VwZXJ0eXBlcykpOwp9CgpjbGFzcyBSdWxlc2V0RW5jb2RlciB7CiAgZmluYWwgRGFydFR5cGVzIF9kYXJ0VHlwZXM7CiAgZmluYWwgTW9kdWxhckVtaXR0ZXIgX2VtaXR0ZXI7CiAgZmluYWwgUmVjaXBlRW5jb2RlciBfcmVjaXBlRW5jb2RlcjsKCiAgUnVsZXNldEVuY29kZXIodGhpcy5fZGFydFR5cGVzLCB0aGlzLl9lbWl0dGVyLCB0aGlzLl9yZWNpcGVFbmNvZGVyKTsKCiAgQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50cyA9PiBfZGFydFR5cGVzLmNvbW1vbkVsZW1lbnRzOwogIENsYXNzRW50aXR5IGdldCBfb2JqZWN0Q2xhc3MgPT4gX2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzOwoKICBmaW5hbCBfbGVmdEJyYWNlID0ganMuc3RyaW5nUGFydCgneycpOwogIGZpbmFsIF9yaWdodEJyYWNlID0ganMuc3RyaW5nUGFydCgnfScpOwogIGZpbmFsIF9sZWZ0QnJhY2tldCA9IGpzLnN0cmluZ1BhcnQoJ1snKTsKICBmaW5hbCBfcmlnaHRCcmFja2V0ID0ganMuc3RyaW5nUGFydCgnXScpOwogIGZpbmFsIF9jb2xvbiA9IGpzLnN0cmluZ1BhcnQoJzonKTsKICBmaW5hbCBfY29tbWEgPSBqcy5zdHJpbmdQYXJ0KCcsJyk7CiAgZmluYWwgX3F1b3RlID0ganMuc3RyaW5nUGFydCgiJyIpOwoKICBib29sIF9pc09iamVjdChJbnRlcmZhY2VUeXBlIHR5cGUpID0+IGlkZW50aWNhbCh0eXBlLmVsZW1lbnQsIF9vYmplY3RDbGFzcyk7CgogIHZvaWQgX3ByZXByb2Nlc3NTdXBlcnR5cGUoX1J1bGVzZXRFbnRyeSBlbnRyeSwgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUpIHsKICAgIEludGVyZmFjZVR5cGUgdGhpc1N1cGVydHlwZSA9IF9kYXJ0VHlwZXMuZ2V0VGhpc1R5cGUoc3VwZXJ0eXBlLmVsZW1lbnQpOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZVZhcmlhYmxlcyA9IHRoaXNTdXBlcnR5cGUudHlwZUFyZ3VtZW50czsKICAgIExpc3Q8RGFydFR5cGU+IHN1cGVydHlwZUFyZ3VtZW50cyA9IHN1cGVydHlwZS50eXBlQXJndW1lbnRzOwogICAgaW50IGxlbmd0aCA9IHR5cGVWYXJpYWJsZXMubGVuZ3RoOwogICAgYXNzZXJ0KHN1cGVydHlwZUFyZ3VtZW50cy5sZW5ndGggPT0gbGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgZW50cnkuX3R5cGVWYXJpYWJsZXNbdHlwZVZhcmlhYmxlc1tpXV0gPSBzdXBlcnR5cGVBcmd1bWVudHNbaV07CiAgICB9CiAgfQoKICB2b2lkIF9wcmVwcm9jZXNzRW50cnkoX1J1bGVzZXRFbnRyeSBlbnRyeSkgewogICAgZW50cnkuX3N1cGVydHlwZXMucmVtb3ZlV2hlcmUoX2lzT2JqZWN0KTsKICAgIGVudHJ5Ll9zdXBlcnR5cGVzLmZvckVhY2goCiAgICAgICAgKEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlKSA9PiBfcHJlcHJvY2Vzc1N1cGVydHlwZShlbnRyeSwgc3VwZXJ0eXBlKSk7CiAgICBlbnRyeS5fc3VwZXJ0eXBlcy5yZW1vdmVXaGVyZSgKICAgICAgICAoSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUpID0+IGlkZW50aWNhbChlbnRyeS5fdGFyZ2V0VHlwZSwgc3VwZXJ0eXBlKSk7CiAgfQoKICB2b2lkIF9wcmVwcm9jZXNzUnVsZXNldChSdWxlc2V0IHJ1bGVzZXQpIHsKICAgIHJ1bGVzZXQuX2VudHJpZXMKICAgICAgICAucmVtb3ZlV2hlcmUoKF9SdWxlc2V0RW50cnkgZW50cnkpID0+IF9pc09iamVjdChlbnRyeS5fdGFyZ2V0VHlwZSkpOwogICAgcnVsZXNldC5fZW50cmllcy5mb3JFYWNoKF9wcmVwcm9jZXNzRW50cnkpOwogICAgcnVsZXNldC5fZW50cmllcy5yZW1vdmVXaGVyZSgoX1J1bGVzZXRFbnRyeSBlbnRyeSkgPT4gZW50cnkuaXNFbXB0eSk7CiAgfQoKICAvLyBUT0RPKGZpc2h5dGhlZmlzaCk6IENvbW1vbiBzdWJzdHJpbmcgZWxpbWluYXRpb24uCgogIC8vLyBQcm9kdWNlcyBhIHN0cmluZyByZWFkYWJsZSBieSBgSlNPTi5wYXJzZSgpYC4KICBqc0FzdC5TdHJpbmdDb25jYXRlbmF0aW9uIGVuY29kZVJ1bGVzZXQoUnVsZXNldCBydWxlc2V0KSB7CiAgICBfcHJlcHJvY2Vzc1J1bGVzZXQocnVsZXNldCk7CiAgICByZXR1cm4gX2VuY29kZVJ1bGVzZXQocnVsZXNldCk7CiAgfQoKICBqc0FzdC5TdHJpbmdDb25jYXRlbmF0aW9uIF9lbmNvZGVSdWxlc2V0KFJ1bGVzZXQgcnVsZXNldCkgPT4KICAgICAganMuY29uY2F0ZW5hdGVTdHJpbmdzKFsKICAgICAgICBfcXVvdGUsCiAgICAgICAgX2xlZnRCcmFjZSwKICAgICAgICAuLi5qcy5qb2luTGl0ZXJhbHMocnVsZXNldC5fZW50cmllcy5tYXAoX2VuY29kZUVudHJ5KSwgX2NvbW1hKSwKICAgICAgICBfcmlnaHRCcmFjZSwKICAgICAgICBfcXVvdGUsCiAgICAgIF0pOwoKICBqc0FzdC5TdHJpbmdDb25jYXRlbmF0aW9uIF9lbmNvZGVFbnRyeShfUnVsZXNldEVudHJ5IGVudHJ5KSA9PgogICAgICBqcy5jb25jYXRlbmF0ZVN0cmluZ3MoWwogICAgICAgIGpzLnF1b3RlTmFtZShfZW1pdHRlci50eXBlQWNjZXNzTmV3UnRpKGVudHJ5Ll90YXJnZXRUeXBlLmVsZW1lbnQpKSwKICAgICAgICBfY29sb24sCiAgICAgICAgX2xlZnRCcmFjZSwKICAgICAgICAuLi5qcy5qb2luTGl0ZXJhbHMoWwogICAgICAgICAgLi4uZW50cnkuX3N1cGVydHlwZXMubWFwKChJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSkgPT4KICAgICAgICAgICAgICBfZW5jb2RlU3VwZXJ0eXBlKGVudHJ5Ll90YXJnZXRUeXBlLCBzdXBlcnR5cGUpKSwKICAgICAgICAgIC4uLmVudHJ5Ll90eXBlVmFyaWFibGVzLmVudHJpZXMubWFwKChtYXBFbnRyeSkgPT4gX2VuY29kZVR5cGVWYXJpYWJsZSgKICAgICAgICAgICAgICBlbnRyeS5fdGFyZ2V0VHlwZSwgbWFwRW50cnkua2V5LCBtYXBFbnRyeS52YWx1ZSkpCiAgICAgICAgXSwgX2NvbW1hKSwKICAgICAgICBfcmlnaHRCcmFjZSwKICAgICAgXSk7CgogIGpzQXN0LlN0cmluZ0NvbmNhdGVuYXRpb24gX2VuY29kZVN1cGVydHlwZSgKICAgICAgICAgIEludGVyZmFjZVR5cGUgdGFyZ2V0VHlwZSwgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGUpID0+CiAgICAgIGpzLmNvbmNhdGVuYXRlU3RyaW5ncyhbCiAgICAgICAganMucXVvdGVOYW1lKF9lbWl0dGVyLnR5cGVBY2Nlc3NOZXdSdGkoc3VwZXJ0eXBlLmVsZW1lbnQpKSwKICAgICAgICBfY29sb24sCiAgICAgICAgX2xlZnRCcmFja2V0LAogICAgICAgIC4uLmpzLmpvaW5MaXRlcmFscygKICAgICAgICAgICAgc3VwZXJ0eXBlLnR5cGVBcmd1bWVudHMubWFwKChEYXJ0VHlwZSBzdXBlcnR5cGVBcmd1bWVudCkgPT4KICAgICAgICAgICAgICAgIF9lbmNvZGVTdXBlcnR5cGVBcmd1bWVudCh0YXJnZXRUeXBlLCBzdXBlcnR5cGVBcmd1bWVudCkpLAogICAgICAgICAgICBfY29tbWEpLAogICAgICAgIF9yaWdodEJyYWNrZXQsCiAgICAgIF0pOwoKICBqc0FzdC5TdHJpbmdDb25jYXRlbmF0aW9uIF9lbmNvZGVUeXBlVmFyaWFibGUoSW50ZXJmYWNlVHlwZSB0YXJnZXRUeXBlLAogICAgICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUsIERhcnRUeXBlIHN1cGVydHlwZUFyZ3VtZW50KSA9PgogICAgICBqcy5jb25jYXRlbmF0ZVN0cmluZ3MoWwogICAgICAgIGpzLnF1b3RlTmFtZShfZW1pdHRlci50eXBlVmFyaWFibGVBY2Nlc3NOZXdSdGkodHlwZVZhcmlhYmxlLmVsZW1lbnQpKSwKICAgICAgICBfY29sb24sCiAgICAgICAgX2VuY29kZVN1cGVydHlwZUFyZ3VtZW50KHRhcmdldFR5cGUsIHN1cGVydHlwZUFyZ3VtZW50KSwKICAgICAgXSk7CgogIGpzQXN0LkxpdGVyYWwgX2VuY29kZVN1cGVydHlwZUFyZ3VtZW50KAogICAgICAgICAgSW50ZXJmYWNlVHlwZSB0YXJnZXRUeXBlLCBEYXJ0VHlwZSBzdXBlcnR5cGVBcmd1bWVudCkgPT4KICAgICAgX3JlY2lwZUVuY29kZXIuZW5jb2RlRGlyZWN0U3VwZXJ0eXBlUmVjaXBlKAogICAgICAgICAgX2VtaXR0ZXIsIHRhcmdldFR5cGUsIHN1cGVydHlwZUFyZ3VtZW50KTsKfQqCPgBOTjwBJgE3ASE/JCEhICc8KxgVG0Q+AR9GQzVJAU8BUE8YKDcyAVFRUTVEQAFMDkVRAU1QLk8uAgEzIzUlMSgjAVFFAQw1SlAEAQxQQAQBDDczUSoQBAEMREEdEhVENTYQBAEMIzYWSgQBDE8vTzEOFBlIBAIBQCQhLxwxJQE/ARktHwEURTgtATo7UQEYFSseNgYTOkUEASMqIDsgNjUGBAFOJCUnDSVLNiAGASMsGSwWJwoYFwgqBgQBHUwdOhYEARcgLEQUBAEhUCMGJAQBLSkXBgQBJDMjBhMaBAElGSMEAQw4AQw5IhoxDgYBOTwqGRAIBjcyFE8gHRAIATYbSxY/EAhJFw4GUDMsBAFGMy8BLjs5PSAKCAYBUE0BNgFBSUYKEwYaBAEMQTgbMD85BAEMLyMEAQwzPyZHFBcNFywZOhYnCjoeNREiChcIKgYEAQwxKScJTlEqCVAtCSAWKwkwJjQJSy0IBgEfLgEXOhQlCB8VBgEyFCxEFicKIRcIKgYBRCwUKS8WJwooKRwXCCcGAU06L0YGASwBISkZLEYWJwomCCoGASlRQQYEAQwpIAQBDC8eBAEMMSEkBAIBFiMjNwFGKwFFAgEQIAEaHgFMOwIBFx4hJgFHAUM/ASkqKywlJSUBTwFMTUBBJzEnRgYEAS8uH04jTwQBLRVNMEoEATcBND0hJAQBPx4QFEgVEAoBQR5MEBQdQD9RQBQVCgEuQB5EEBYcSEoVFwoBSkgeTxBBCgEqQzI0AgE2cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX25ldy5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3VuaXZlcnNlL3NpZGVfZWZmZWN0cy5kYXJ0oT4vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSB1bml2ZXJzZS5zaWRlX2VmZmVjdHM7CgppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKCmNsYXNzIFNpZGVFZmZlY3RzIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW1NpZGVFZmZlY3RzXSBvYmplY3RzIGluIGEgZGVidWdnaW5nCiAgLy8vIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3NpZGUtZWZmZWN0cyc7CgogIC8vIENoYW5nZXMgZmxhZ3MuCiAgc3RhdGljIGNvbnN0IGludCBGTEFHX0NIQU5HRVNfSU5ERVggPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgRkxBR19DSEFOR0VTX0lOU1RBTkNFX1BST1BFUlRZID0gRkxBR19DSEFOR0VTX0lOREVYICsgMTsKICBzdGF0aWMgY29uc3QgaW50IEZMQUdfQ0hBTkdFU19TVEFUSUNfUFJPUEVSVFkgPQogICAgICBGTEFHX0NIQU5HRVNfSU5TVEFOQ0VfUFJPUEVSVFkgKyAxOwogIHN0YXRpYyBjb25zdCBpbnQgRkxBR19DSEFOR0VTX0NPVU5UID0gRkxBR19DSEFOR0VTX1NUQVRJQ19QUk9QRVJUWSArIDE7CgogIC8vIERlcGVuZHMgZmxhZ3MgKG9uZSBmb3IgZWFjaCBjaGFuZ2VzIGZsYWcpLgogIHN0YXRpYyBjb25zdCBpbnQgRkxBR19ERVBFTkRTX09OX0lOREVYX1NUT1JFID0gRkxBR19DSEFOR0VTX0NPVU5UOwogIHN0YXRpYyBjb25zdCBpbnQgRkxBR19ERVBFTkRTX09OX0lOU1RBTkNFX1BST1BFUlRZX1NUT1JFID0KICAgICAgRkxBR19ERVBFTkRTX09OX0lOREVYX1NUT1JFICsgMTsKICBzdGF0aWMgY29uc3QgaW50IEZMQUdfREVQRU5EU19PTl9TVEFUSUNfUFJPUEVSVFlfU1RPUkUgPQogICAgICBGTEFHX0RFUEVORFNfT05fSU5TVEFOQ0VfUFJPUEVSVFlfU1RPUkUgKyAxOwogIHN0YXRpYyBjb25zdCBpbnQgRkxBR19ERVBFTkRTX09OX0NPVU5UID0KICAgICAgRkxBR19ERVBFTkRTX09OX1NUQVRJQ19QUk9QRVJUWV9TVE9SRSArIDE7CgogIGludCBfZmxhZ3MgPSAwOwoKICBTaWRlRWZmZWN0cygpIHsKICAgIHNldEFsbFNpZGVFZmZlY3RzKCk7CiAgICBzZXREZXBlbmRzT25Tb21ldGhpbmcoKTsKICB9CgogIFNpZGVFZmZlY3RzLmVtcHR5KCkgewogICAgY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgIGNsZWFyQWxsU2lkZUVmZmVjdHMoKTsKICB9CgogIFNpZGVFZmZlY3RzLmZyb21GbGFncyh0aGlzLl9mbGFncyk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbU2lkZUVmZmVjdHNdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgU2lkZUVmZmVjdHMucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGludCBmbGFncyA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IFNpZGVFZmZlY3RzLmZyb21GbGFncyhmbGFncyk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtTaWRlRWZmZWN0c10gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVJbnQoX2ZsYWdzKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSA9PiBfZmxhZ3MgPT0gb3RoZXIuX2ZsYWdzOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdTaWRlRWZmZWN0cy5oYXNoQ29kZScpOwoKICBib29sIF9nZXRGbGFnKGludCBwb3NpdGlvbikgewogICAgcmV0dXJuIChfZmxhZ3MgJiAoMSA8PCBwb3NpdGlvbikpICE9IDA7CiAgfQoKICBib29sIF9zZXRGbGFnKGludCBwb3NpdGlvbikgewogICAgaW50IGJlZm9yZSA9IF9mbGFnczsKICAgIF9mbGFncyB8PSAoMSA8PCBwb3NpdGlvbik7CiAgICByZXR1cm4gYmVmb3JlICE9IF9mbGFnczsKICB9CgogIGJvb2wgX2NsZWFyRmxhZyhpbnQgcG9zaXRpb24pIHsKICAgIGludCBiZWZvcmUgPSBfZmxhZ3M7CiAgICBfZmxhZ3MgJj0gfigxIDw8IHBvc2l0aW9uKTsKICAgIHJldHVybiBiZWZvcmUgIT0gX2ZsYWdzOwogIH0KCiAgaW50IGdldENoYW5nZXNGbGFncygpIHsKICAgIHJldHVybiBfZmxhZ3MgJiAoKDEgPDwgRkxBR19DSEFOR0VTX0NPVU5UKSAtIDEpOwogIH0KCiAgaW50IGdldERlcGVuZHNPbkZsYWdzKCkgewogICAgcmV0dXJuIChfZmxhZ3MgJiAoKDEgPDwgRkxBR19ERVBFTkRTX09OX0NPVU5UKSAtIDEpKSA+PiBGTEFHX0NIQU5HRVNfQ09VTlQ7CiAgfQoKICBib29sIGhhc1NpZGVFZmZlY3RzKCkgPT4gZ2V0Q2hhbmdlc0ZsYWdzKCkgIT0gMDsKICBib29sIGRlcGVuZHNPblNvbWV0aGluZygpID0+IGdldERlcGVuZHNPbkZsYWdzKCkgIT0gMDsKCiAgYm9vbCBzZXRBbGxTaWRlRWZmZWN0cygpIHsKICAgIGludCBiZWZvcmUgPSBfZmxhZ3M7CiAgICBfZmxhZ3MgfD0gKCgxIDw8IEZMQUdfQ0hBTkdFU19DT1VOVCkgLSAxKTsKICAgIHJldHVybiBiZWZvcmUgIT0gX2ZsYWdzOwogIH0KCiAgYm9vbCBjbGVhckFsbFNpZGVFZmZlY3RzKCkgewogICAgaW50IGJlZm9yZSA9IF9mbGFnczsKICAgIF9mbGFncyAmPSB+KCgxIDw8IEZMQUdfQ0hBTkdFU19DT1VOVCkgLSAxKTsKICAgIHJldHVybiBiZWZvcmUgIT0gX2ZsYWdzOwogIH0KCiAgYm9vbCBzZXREZXBlbmRzT25Tb21ldGhpbmcoKSB7CiAgICBpbnQgYmVmb3JlID0gX2ZsYWdzOwogICAgaW50IGNvdW50ID0gRkxBR19ERVBFTkRTX09OX0NPVU5UIC0gRkxBR19DSEFOR0VTX0NPVU5UOwogICAgX2ZsYWdzIHw9ICgoKDEgPDwgY291bnQpIC0gMSkgPDwgRkxBR19DSEFOR0VTX0NPVU5UKTsKICAgIHJldHVybiBiZWZvcmUgIT0gX2ZsYWdzOwogIH0KCiAgYm9vbCBjbGVhckFsbERlcGVuZGVuY2llcygpIHsKICAgIGludCBiZWZvcmUgPSBfZmxhZ3M7CiAgICBpbnQgY291bnQgPSBGTEFHX0RFUEVORFNfT05fQ09VTlQgLSBGTEFHX0NIQU5HRVNfQ09VTlQ7CiAgICBfZmxhZ3MgJj0gfigoKDEgPDwgY291bnQpIC0gMSkgPDwgRkxBR19DSEFOR0VTX0NPVU5UKTsKICAgIHJldHVybiBiZWZvcmUgIT0gX2ZsYWdzOwogIH0KCiAgYm9vbCBkZXBlbmRzT25TdGF0aWNQcm9wZXJ0eVN0b3JlKCkgewogICAgcmV0dXJuIF9nZXRGbGFnKEZMQUdfREVQRU5EU19PTl9TVEFUSUNfUFJPUEVSVFlfU1RPUkUpOwogIH0KCiAgYm9vbCBzZXREZXBlbmRzT25TdGF0aWNQcm9wZXJ0eVN0b3JlKCkgewogICAgcmV0dXJuIF9zZXRGbGFnKEZMQUdfREVQRU5EU19PTl9TVEFUSUNfUFJPUEVSVFlfU1RPUkUpOwogIH0KCiAgYm9vbCBjbGVhckRlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmUoKSB7CiAgICByZXR1cm4gX2NsZWFyRmxhZyhGTEFHX0RFUEVORFNfT05fU1RBVElDX1BST1BFUlRZX1NUT1JFKTsKICB9CgogIGJvb2wgc2V0Q2hhbmdlc1N0YXRpY1Byb3BlcnR5KCkgewogICAgcmV0dXJuIF9zZXRGbGFnKEZMQUdfQ0hBTkdFU19TVEFUSUNfUFJPUEVSVFkpOwogIH0KCiAgYm9vbCBjbGVhckNoYW5nZXNTdGF0aWNQcm9wZXJ0eSgpIHsKICAgIHJldHVybiBfY2xlYXJGbGFnKEZMQUdfQ0hBTkdFU19TVEFUSUNfUFJPUEVSVFkpOwogIH0KCiAgYm9vbCBjaGFuZ2VzU3RhdGljUHJvcGVydHkoKSA9PiBfZ2V0RmxhZyhGTEFHX0NIQU5HRVNfU1RBVElDX1BST1BFUlRZKTsKCiAgYm9vbCBkZXBlbmRzT25JbmRleFN0b3JlKCkgPT4gX2dldEZsYWcoRkxBR19ERVBFTkRTX09OX0lOREVYX1NUT1JFKTsKCiAgYm9vbCBzZXREZXBlbmRzT25JbmRleFN0b3JlKCkgewogICAgcmV0dXJuIF9zZXRGbGFnKEZMQUdfREVQRU5EU19PTl9JTkRFWF9TVE9SRSk7CiAgfQoKICBib29sIGNsZWFyRGVwZW5kc09uSW5kZXhTdG9yZSgpIHsKICAgIHJldHVybiBfY2xlYXJGbGFnKEZMQUdfREVQRU5EU19PTl9JTkRFWF9TVE9SRSk7CiAgfQoKICBib29sIHNldENoYW5nZXNJbmRleCgpIHsKICAgIHJldHVybiBfc2V0RmxhZyhGTEFHX0NIQU5HRVNfSU5ERVgpOwogIH0KCiAgYm9vbCBjbGVhckNoYW5nZXNJbmRleCgpIHsKICAgIHJldHVybiBfY2xlYXJGbGFnKEZMQUdfQ0hBTkdFU19JTkRFWCk7CiAgfQoKICBib29sIGNoYW5nZXNJbmRleCgpID0+IF9nZXRGbGFnKEZMQUdfQ0hBTkdFU19JTkRFWCk7CgogIGJvb2wgZGVwZW5kc09uSW5zdGFuY2VQcm9wZXJ0eVN0b3JlKCkgewogICAgcmV0dXJuIF9nZXRGbGFnKEZMQUdfREVQRU5EU19PTl9JTlNUQU5DRV9QUk9QRVJUWV9TVE9SRSk7CiAgfQoKICBib29sIHNldERlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZSgpIHsKICAgIHJldHVybiBfc2V0RmxhZyhGTEFHX0RFUEVORFNfT05fSU5TVEFOQ0VfUFJPUEVSVFlfU1RPUkUpOwogIH0KCiAgYm9vbCBjbGVhckRlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZSgpIHsKICAgIHJldHVybiBfc2V0RmxhZyhGTEFHX0RFUEVORFNfT05fSU5TVEFOQ0VfUFJPUEVSVFlfU1RPUkUpOwogIH0KCiAgYm9vbCBzZXRDaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eSgpIHsKICAgIHJldHVybiBfc2V0RmxhZyhGTEFHX0NIQU5HRVNfSU5TVEFOQ0VfUFJPUEVSVFkpOwogIH0KCiAgYm9vbCBjbGVhckNoYW5nZXNJbnN0YW5jZVByb3BlcnR5KCkgewogICAgcmV0dXJuIF9jbGVhckZsYWcoRkxBR19DSEFOR0VTX0lOU1RBTkNFX1BST1BFUlRZKTsKICB9CgogIGJvb2wgY2hhbmdlc0luc3RhbmNlUHJvcGVydHkoKSA9PiBfZ2V0RmxhZyhGTEFHX0NIQU5HRVNfSU5TVEFOQ0VfUFJPUEVSVFkpOwoKICBzdGF0aWMgaW50IGNvbXB1dGVEZXBlbmRzT25GbGFncyhpbnQgZmxhZ3MpID0+IGZsYWdzIDw8IEZMQUdfQ0hBTkdFU19DT1VOVDsKCiAgYm9vbCBkZXBlbmRzT24oaW50IGRlcGVuZHNGbGFncykgewogICAgcmV0dXJuIChfZmxhZ3MgJiBkZXBlbmRzRmxhZ3MpICE9IDA7CiAgfQoKICBib29sIGFkZChTaWRlRWZmZWN0cyBvdGhlcikgewogICAgaW50IGJlZm9yZSA9IF9mbGFnczsKICAgIF9mbGFncyB8PSBvdGhlci5fZmxhZ3M7CiAgICByZXR1cm4gYmVmb3JlICE9IF9mbGFnczsKICB9CgogIHZvaWQgc2V0VG8oU2lkZUVmZmVjdHMgb3RoZXIpIHsKICAgIF9mbGFncyA9IG90aGVyLl9mbGFnczsKICB9CgogIGJvb2wgY29udGFpbnMoU2lkZUVmZmVjdHMgb3RoZXIpIHsKICAgIHJldHVybiAoX2ZsYWdzIHwgb3RoZXIuX2ZsYWdzKSA9PSBfZmxhZ3M7CiAgfQoKICBpbnQgZ2V0IGZsYWdzID0+IF9mbGFnczsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGJ1ZmZlci53cml0ZSgnU2lkZUVmZmVjdHMocmVhZHMnKTsKICAgIGlmICghZGVwZW5kc09uU29tZXRoaW5nKCkpIHsKICAgICAgYnVmZmVyLndyaXRlKCcgbm90aGluZycpOwogICAgfSBlbHNlIGlmIChkZXBlbmRzT25JbmRleFN0b3JlKCkgJiYKICAgICAgICBkZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmUoKSAmJgogICAgICAgIGRlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmUoKSkgewogICAgICBidWZmZXIud3JpdGUoJyBhbnl0aGluZycpOwogICAgfSBlbHNlIHsKICAgICAgU3RyaW5nIGNvbW1hID0gJyc7CiAgICAgIGlmIChkZXBlbmRzT25JbmRleFN0b3JlKCkpIHsKICAgICAgICBidWZmZXIud3JpdGUoJyBpbmRleCcpOwogICAgICAgIGNvbW1hID0gJywnOwogICAgICB9CiAgICAgIGlmIChkZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmUoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZSgnJGNvbW1hIGZpZWxkJyk7CiAgICAgICAgY29tbWEgPSAnLCc7CiAgICAgIH0KICAgICAgaWYgKGRlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmUoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZSgnJGNvbW1hIHN0YXRpYycpOwogICAgICB9CiAgICB9CiAgICBidWZmZXIud3JpdGUoJzsgd3JpdGVzJyk7CiAgICBpZiAoIWhhc1NpZGVFZmZlY3RzKCkpIHsKICAgICAgYnVmZmVyLndyaXRlKCcgbm90aGluZycpOwogICAgfSBlbHNlIGlmIChjaGFuZ2VzSW5kZXgoKSAmJgogICAgICAgIGNoYW5nZXNJbnN0YW5jZVByb3BlcnR5KCkgJiYKICAgICAgICBjaGFuZ2VzU3RhdGljUHJvcGVydHkoKSkgewogICAgICBidWZmZXIud3JpdGUoJyBhbnl0aGluZycpOwogICAgfSBlbHNlIHsKICAgICAgU3RyaW5nIGNvbW1hID0gJyc7CiAgICAgIGlmIChjaGFuZ2VzSW5kZXgoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZSgnIGluZGV4Jyk7CiAgICAgICAgY29tbWEgPSAnLCc7CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZXNJbnN0YW5jZVByb3BlcnR5KCkpIHsKICAgICAgICBidWZmZXIud3JpdGUoJyRjb21tYSBmaWVsZCcpOwogICAgICAgIGNvbW1hID0gJywnOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VzU3RhdGljUHJvcGVydHkoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZSgnJGNvbW1hIHN0YXRpYycpOwogICAgICB9CiAgICB9CiAgICBidWZmZXIud3JpdGUoJyknKTsKICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9Cn0KCmNsYXNzIFNpZGVFZmZlY3RzQnVpbGRlciB7CiAgZmluYWwgTWVtYmVyRW50aXR5IF9tZW1iZXI7CiAgZmluYWwgU2lkZUVmZmVjdHMgX3NpZGVFZmZlY3RzID0gbmV3IFNpZGVFZmZlY3RzLmVtcHR5KCk7CiAgZmluYWwgYm9vbCBfZnJlZTsKICBTZXQ8U2lkZUVmZmVjdHNCdWlsZGVyPiBfZGVwZW5kaW5nOwoKICBTaWRlRWZmZWN0c0J1aWxkZXIodGhpcy5fbWVtYmVyKSA6IF9mcmVlID0gZmFsc2U7CgogIFNpZGVFZmZlY3RzQnVpbGRlci5mcmVlKHRoaXMuX21lbWJlcikgOiBfZnJlZSA9IHRydWU7CgogIHZvaWQgc2V0Q2hhbmdlc0luc3RhbmNlUHJvcGVydHkoKSB7CiAgICBpZiAoX2ZyZWUpIHJldHVybjsKICAgIF9zaWRlRWZmZWN0cy5zZXRDaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eSgpOwogIH0KCiAgdm9pZCBzZXREZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmUoKSB7CiAgICBpZiAoX2ZyZWUpIHJldHVybjsKICAgIF9zaWRlRWZmZWN0cy5zZXREZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmUoKTsKICB9CgogIHZvaWQgc2V0Q2hhbmdlc1N0YXRpY1Byb3BlcnR5KCkgewogICAgaWYgKF9mcmVlKSByZXR1cm47CiAgICBfc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc1N0YXRpY1Byb3BlcnR5KCk7CiAgfQoKICB2b2lkIHNldERlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmUoKSB7CiAgICBpZiAoX2ZyZWUpIHJldHVybjsKICAgIF9zaWRlRWZmZWN0cy5zZXREZXBlbmRzT25TdGF0aWNQcm9wZXJ0eVN0b3JlKCk7CiAgfQoKICB2b2lkIHNldEFsbFNpZGVFZmZlY3RzQW5kRGVwZW5kc09uU29tZXRoaW5nKCkgewogICAgaWYgKF9mcmVlKSByZXR1cm47CiAgICBfc2lkZUVmZmVjdHMuc2V0QWxsU2lkZUVmZmVjdHMoKTsKICAgIF9zaWRlRWZmZWN0cy5zZXREZXBlbmRzT25Tb21ldGhpbmcoKTsKICB9CgogIHZvaWQgc2V0QWxsU2lkZUVmZmVjdHMoKSB7CiAgICBpZiAoX2ZyZWUpIHJldHVybjsKICAgIF9zaWRlRWZmZWN0cy5zZXRBbGxTaWRlRWZmZWN0cygpOwogIH0KCiAgdm9pZCBhZGRJbnB1dChTaWRlRWZmZWN0c0J1aWxkZXIgaW5wdXQpIHsKICAgIGlmIChfZnJlZSkgcmV0dXJuOwogICAgKGlucHV0Ll9kZXBlbmRpbmcgPz89IG5ldyBTZXQ8U2lkZUVmZmVjdHNCdWlsZGVyPigpKS5hZGQodGhpcyk7CiAgfQoKICBib29sIGFkZChTaWRlRWZmZWN0cyBpbnB1dCkgewogICAgaWYgKF9mcmVlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX3NpZGVFZmZlY3RzLmFkZChpbnB1dCk7CiAgfQoKICBTaWRlRWZmZWN0cyBnZXQgc2lkZUVmZmVjdHMgPT4gX3NpZGVFZmZlY3RzOwoKICBJdGVyYWJsZTxTaWRlRWZmZWN0c0J1aWxkZXI+IGdldCBkZXBlbmRpbmcgPT4KICAgICAgX2RlcGVuZGluZyAhPSBudWxsID8gX2RlcGVuZGluZyA6IGNvbnN0IDxTaWRlRWZmZWN0c0J1aWxkZXI+W107CgogIE1lbWJlckVudGl0eSBnZXQgbWVtYmVyID0+IF9tZW1iZXI7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdTaWRlRWZmZWN0c0J1aWxkZXIobWVtYmVyPSRtZW1iZXIsJyk7CiAgICBzYi53cml0ZSgnZnJlZT0kX2ZyZWUsJyk7CiAgICBzYi53cml0ZSgnc2lkZUVmZmVjdHM9JHNpZGVFZmZlY3RzLCcpOwogICAgc2Iud3JpdGUoJ2RlcGVuZGluZz0ke2RlcGVuZGluZy5tYXAoKHMpID0+IHMubWVtYmVyKS5qb2luKCcsJyl9LCcpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CoFEAE5OPAEfASQuARRPEywBFCtMMipKATBFPSc7MysxARIBEhkdBAEYHBsEASYBOT4XIhUtBAEvKBUbEwQBDDUBDEoBICwEASAZHx0EASIZIB0EARo1BAEcUAQBMzkBHRkvHQQBHxkwHQQBIRk8Oh0EASAZPDsdBAEoPAQBKzwEAS0+BAEkMwQBJjUEAUoBRwEiMgQBJDQEARspBAEdKwQBNwEqPgQBLT4EAS8+BAEmNQQBKDcEAU4BTgElKQQBIBkcHQQBIhsEASUuBAEbAQwWLichICgsKiENGSMgFQguJhUILCcIBh4dICElIyENGRwgFQgnJhUIJScIBhceBAIBGx48FCYBNAE4ASYXLwQBLRc2BAEkFy0EASsXNAQBMhcmKgQBHRcmBAEsF0QEASAdJAQBLwEwRgEmAQwWKjQeK0gaBAIBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL3NpZGVfZWZmZWN0cy5kYXJ0P3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lvL2tlcm5lbF9zb3VyY2VfaW5mb3JtYXRpb24uZGFydLpWLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBTb3VyY2UgaW5mb3JtYXRpb24gc3lzdGVtIG1hcHBpbmcgdGhhdCBhdHRlbXB0cyBhIHNlbWFudGljIG1hcHBpbmcgYmV0d2VlbgovLy8gb2Zmc2V0cyBvZiBKYXZhU2NyaXB0IGNvZGUgcG9pbnRzIHRvIG9mZnNldHMgb2YgRGFydCBjb2RlIHBvaW50cy4KCmxpYnJhcnkgZGFydDJqcy5zb3VyY2VfaW5mb3JtYXRpb24ua2VybmVsOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvanNfc3RyYXRlZ3kuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCc7CmltcG9ydCAnc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwppbXBvcnQgJ3Bvc2l0aW9uX2luZm9ybWF0aW9uLmRhcnQnOwoKY2xhc3MgS2VybmVsU291cmNlSW5mb3JtYXRpb25TdHJhdGVneQogICAgZXh0ZW5kcyBBYnN0cmFjdFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSB7CiAgZmluYWwgSnNCYWNrZW5kU3RyYXRlZ3kgX2JhY2tlbmRTdHJhdGVneTsKCiAgY29uc3QgS2VybmVsU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSh0aGlzLl9iYWNrZW5kU3RyYXRlZ3kpOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIgY3JlYXRlQnVpbGRlckZvckNvbnRleHQoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIG5ldyBLZXJuZWxTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIoCiAgICAgICAgX2JhY2tlbmRTdHJhdGVneQogICAgICAgICAgICAvLyBpZ25vcmU6ZGVwcmVjYXRlZF9tZW1iZXJfdXNlX2Zyb21fc2FtZV9wYWNrYWdlCiAgICAgICAgICAgIC5lbGVtZW50TWFwLAogICAgICAgIG1lbWJlcik7CiAgfQp9CgovLy8gQ29tcHV0ZSB0aGUgc291cmNlIG1hcCBuYW1lIGZvciBrZXJuZWwgYmFzZWQgW21lbWJlcl0uIElmIFtjYWxsU3RydWN0dXJlXQovLy8gaXMgbm9uLW51bGwgaXQgaXMgdXNlZCB0byBuYW1lIHRoZSBwYXJhbWV0ZXIgc3R1YiBmb3IgW2VsZW1lbnRdLgovLy8KLy8vIFtlbGVtZW50TWFwXSBpcyB1c2VkIHRvIGNvbXB1dGUgbmFtZXMgZm9yIGNsb3N1cmUgY2FsbCBtZXRob2RzLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYWtlIHRoZSBjbG9zdXJlIGNhbGwgbmFtZXMgYXZhaWxhYmxlIHRvCi8vIGBzb3VyY2VtYXBfaGVscGVyLmRhcnRgLgpTdHJpbmcgY29tcHV0ZUtlcm5lbEVsZW1lbnROYW1lRm9yU291cmNlTWFwcygKICAgIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICBbQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlXSkgewogIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihtZW1iZXIpOwogIHN3aXRjaCAoZGVmaW5pdGlvbi5raW5kKSB7CiAgICBjYXNlIE1lbWJlcktpbmQuY2xvc3VyZUNhbGw6CiAgICAgIGlyLlRyZWVOb2RlIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgIFN0cmluZyBuYW1lOwogICAgICB3aGlsZSAobm9kZSBpcyEgaXIuTWVtYmVyKSB7CiAgICAgICAgaWYgKG5vZGUgaXMgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbikgewogICAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgewogICAgICAgICAgICBuYW1lID0gJyR7bm9kZS52YXJpYWJsZS5uYW1lfS4kbmFtZSc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBuYW1lID0gbm9kZS52YXJpYWJsZS5uYW1lOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5GdW5jdGlvbkV4cHJlc3Npb24pIHsKICAgICAgICAgIGlmIChuYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgbmFtZSA9ICc8YW5vbnltb3VzIGZ1bmN0aW9uPi4kbmFtZSc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBuYW1lID0gJzxhbm9ueW1vdXMgZnVuY3Rpb24+JzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgbm9kZSA9IG5vZGUucGFyZW50OwogICAgICB9CiAgICAgIE1lbWJlckVudGl0eSBlbmNsb3NpbmdNZW1iZXIgPSBlbGVtZW50TWFwLmdldE1lbWJlcihub2RlKTsKICAgICAgU3RyaW5nIGVuY2xvc2luZ01lbWJlck5hbWUgPQogICAgICAgICAgY29tcHV0ZUVsZW1lbnROYW1lRm9yU291cmNlTWFwcyhlbmNsb3NpbmdNZW1iZXIsIGNhbGxTdHJ1Y3R1cmUpOwogICAgICByZXR1cm4gJyRlbmNsb3NpbmdNZW1iZXJOYW1lLiRuYW1lJzsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBjb21wdXRlRWxlbWVudE5hbWVGb3JTb3VyY2VNYXBzKG1lbWJlciwgY2FsbFN0cnVjdHVyZSk7CiAgfQp9CgovLy8gW1NvdXJjZUluZm9ybWF0aW9uQnVpbGRlcl0gdGhhdCBnZW5lcmF0ZXMgW1Bvc2l0aW9uU291cmNlSW5mb3JtYXRpb25dIGZyb20KLy8vIEtlcm5lbCBub2Rlcy4KY2xhc3MgS2VybmVsU291cmNlSW5mb3JtYXRpb25CdWlsZGVyIGltcGxlbWVudHMgU291cmNlSW5mb3JtYXRpb25CdWlsZGVyIHsKICBmaW5hbCBKc1RvRWxlbWVudE1hcCBfZWxlbWVudE1hcDsKICBmaW5hbCBNZW1iZXJFbnRpdHkgX21lbWJlcjsKICBmaW5hbCBTdHJpbmcgX25hbWU7CgogIC8vLyBJbmxpbmluZyBjb250ZXh0IG9yIG51bGwgd2hlbiBubyBpbmxpbmluZyBoYXMgdGFrZW4gcGxhY2UuCiAgLy8vCiAgLy8vIEEgbmV3IGJ1aWxkZXIgaXMgY3JlYXRlZCBldmVyeSB0aW1lIHRoZSBiYWNrZW5kIGlubGluZXMgYSBtZXRob2QuIFRoaXMKICAvLy8gZmllbGQgY29udGFpbnMgdGhlIGxvY2F0aW9uIG9mIGV2ZXJ5IGNhbGwgc2l0ZSB0aGF0IGhhcyBiZWVuIGlubGluZWQuIFRoZQogIC8vLyBsYXN0IGVudHJ5IG9uIHRoZSBsaXN0IGlzIGFsd2F5cyBhIGNhbGwgdG8gW19tZW1iZXJdLgogIGZpbmFsIExpc3Q8RnJhbWVDb250ZXh0PiBpbmxpbmluZ0NvbnRleHQ7CgogIEtlcm5lbFNvdXJjZUluZm9ybWF0aW9uQnVpbGRlcih0aGlzLl9lbGVtZW50TWFwLCB0aGlzLl9tZW1iZXIpCiAgICAgIDogX25hbWUgPSBjb21wdXRlS2VybmVsRWxlbWVudE5hbWVGb3JTb3VyY2VNYXBzKF9lbGVtZW50TWFwLCBfbWVtYmVyKSwKICAgICAgICBpbmxpbmluZ0NvbnRleHQgPSBudWxsOwoKICBLZXJuZWxTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIud2l0aENvbnRleHQoCiAgICAgIHRoaXMuX2VsZW1lbnRNYXAsIHRoaXMuX21lbWJlciwgdGhpcy5pbmxpbmluZ0NvbnRleHQsIHRoaXMuX25hbWUpOwoKICAvLy8gUmV0dXJucyB0aGUgW1NvdXJjZUxvY2F0aW9uXSBmb3IgdGhlIFtvZmZzZXRdIHdpdGhpbiBbbm9kZV0gdXNpbmcgW25hbWVdCiAgLy8vIGFzIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2UgbG9jYXRpb24uCiAgLy8vCiAgLy8vIElmIFtvZmZzZXRdIGlzIGBudWxsYCwgdGhlIGZpcnN0IGBmaWxlT2Zmc2V0YCBvZiBbbm9kZV0gb3IgaXRzIHBhcmVudHMgaXMKICAvLy8gdXNlZC4KICBTb3VyY2VMb2NhdGlvbiBfZ2V0U291cmNlTG9jYXRpb24oU3RyaW5nIG5hbWUsIGlyLlRyZWVOb2RlIG5vZGUsCiAgICAgIFtpbnQgb2Zmc2V0XSkgewogICAgaXIuTG9jYXRpb24gbG9jYXRpb247CiAgICBpZiAob2Zmc2V0ICE9IG51bGwpIHsKICAgICAgbG9jYXRpb24gPSBub2RlLmxvY2F0aW9uOwogICAgICBsb2NhdGlvbiA9IG5vZGUuZW5jbG9zaW5nQ29tcG9uZW50LmdldExvY2F0aW9uKGxvY2F0aW9uLmZpbGUsIG9mZnNldCk7CiAgICB9IGVsc2UgewogICAgICB3aGlsZSAobm9kZSAhPSBudWxsICYmIG5vZGUuZmlsZU9mZnNldCA9PSBpci5UcmVlTm9kZS5ub09mZnNldCkgewogICAgICAgIG5vZGUgPSBub2RlLnBhcmVudDsKICAgICAgfQogICAgICBsb2NhdGlvbiA9IG5vZGUubG9jYXRpb247CiAgICAgIG9mZnNldCA9IG5vZGUuZmlsZU9mZnNldDsKICAgIH0KICAgIGFzc2VydCgKICAgICAgICBsb2NhdGlvbiAhPSBudWxsLCAiTm8gbG9jYXRpb24gZm91bmQgZm9yICRub2RlICgke25vZGUucnVudGltZVR5cGV9KSIpOwogICAgcmV0dXJuIG5ldyBLZXJuZWxTb3VyY2VMb2NhdGlvbihsb2NhdGlvbiwgb2Zmc2V0LCBuYW1lKTsKICB9CgogIC8vLyBDcmVhdGVzIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24gZm9yIGEgZnVuY3Rpb24gZGVmaW5pdGlvbiBkZWZpbmVkIGJ5IHRoZQogIC8vLyByb290IFtub2RlXSBhbmQgaXRzIFtmdW5jdGlvbk5vZGVdLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBoYW5kbGVzIGJvdGggbWV0aG9kcywgY29uc3RydWN0b3JzLCBhbmQgbG9jYWwgZnVuY3Rpb25zLgogIFNvdXJjZUluZm9ybWF0aW9uIF9idWlsZEZ1bmN0aW9uKAogICAgICBTdHJpbmcgbmFtZSwgaXIuVHJlZU5vZGUgbm9kZSwgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZSkgewogICAgaWYgKGZ1bmN0aW9uTm9kZS5maWxlRW5kT2Zmc2V0ICE9IGlyLlRyZWVOb2RlLm5vT2Zmc2V0KSB7CiAgICAgIHJldHVybiBuZXcgUG9zaXRpb25Tb3VyY2VJbmZvcm1hdGlvbigKICAgICAgICAgIF9nZXRTb3VyY2VMb2NhdGlvbihuYW1lLCBub2RlKSwKICAgICAgICAgIF9nZXRTb3VyY2VMb2NhdGlvbihuYW1lLCBmdW5jdGlvbk5vZGUsIGZ1bmN0aW9uTm9kZS5maWxlRW5kT2Zmc2V0KSwKICAgICAgICAgIHRoaXMuaW5saW5pbmdDb250ZXh0KTsKICAgIH0KICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIC8vLyBDcmVhdGVzIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24gZm9yIGEgW2Jhc2VdIGFuZCBlbmQgb2YgW21lbWJlcl0uIElmIFtiYXNlXQogIC8vLyBpcyBub3QgcHJvdmlkZWQsIHRoZSBvZmZzZXQgb2YgW21lbWJlcl0gaXMgdXNlZCBhcyB0aGUgc3RhcnQgcG9zaXRpb24uCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgYW5kIHJldHVybiBleHByZXNzaW9ucyB3aGljaCBib3RoIHBvaW50CiAgLy8vIHRvIHRoZSBlbmQgb2YgdGhlIG1lbWJlciBhcyB0aGUgY2xvc2luZyBwb3NpdGlvbi4KICBTb3VyY2VJbmZvcm1hdGlvbiBfYnVpbGRGdW5jdGlvbkVuZChNZW1iZXJFbnRpdHkgbWVtYmVyLCBbaXIuVHJlZU5vZGUgYmFzZV0pIHsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IF9lbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24obWVtYmVyKTsKICAgIFN0cmluZyBuYW1lID0gY29tcHV0ZUtlcm5lbEVsZW1lbnROYW1lRm9yU291cmNlTWFwcyhfZWxlbWVudE1hcCwgbWVtYmVyKTsKICAgIHN3aXRjaCAoZGVmaW5pdGlvbi5raW5kKSB7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5yZWd1bGFyOgogICAgICAgIGlyLk1lbWJlciBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICAgIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICAgICAgcmV0dXJuIF9idWlsZEZ1bmN0aW9uKG5hbWUsIGJhc2UgPz8gbm9kZSwgbm9kZS5mdW5jdGlvbik7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3I6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgICAgaXIuTWVtYmVyIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgcmV0dXJuIF9idWlsZEZ1bmN0aW9uKG5hbWUsIGJhc2UgPz8gbm9kZSwgbm9kZS5mdW5jdGlvbik7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlQ2FsbDoKICAgICAgICBpci5Mb2NhbEZ1bmN0aW9uIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgcmV0dXJuIF9idWlsZEZ1bmN0aW9uKG5hbWUsIGJhc2UgPz8gbm9kZSwgbm9kZS5mdW5jdGlvbik7CiAgICAgIC8vIFRPRE8oc3JhKTogZ2VuZXJhdG9yQm9keQogICAgICBkZWZhdWx0OgogICAgfQogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKGJhc2UgPz8gZGVmaW5pdGlvbi5ub2RlLCBuYW1lOiBuYW1lKTsKICB9CgogIC8vLyBDcmVhdGVzIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24gZm9yIGV4aXRpbmcgYSBmdW5jdGlvbiBkZWZpbml0aW9uIGRlZmluZWQKICAvLy8gYnkgdGhlIHJvb3QgW25vZGVdIGFuZCBpdHMgW2Z1bmN0aW9uTm9kZV0uCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGhhbmRsZXMgYm90aCBtZXRob2RzLCBjb25zdHJ1Y3RvcnMsIGFuZCBsb2NhbCBmdW5jdGlvbnMuCiAgU291cmNlSW5mb3JtYXRpb24gX2J1aWxkRnVuY3Rpb25FeGl0KAogICAgICBpci5UcmVlTm9kZSBub2RlLCBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlKSB7CiAgICBpZiAoZnVuY3Rpb25Ob2RlLmZpbGVFbmRPZmZzZXQgIT0gaXIuVHJlZU5vZGUubm9PZmZzZXQpIHsKICAgICAgcmV0dXJuIG5ldyBQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uKAogICAgICAgICAgX2dldFNvdXJjZUxvY2F0aW9uKF9uYW1lLCBmdW5jdGlvbk5vZGUsIGZ1bmN0aW9uTm9kZS5maWxlRW5kT2Zmc2V0KSwKICAgICAgICAgIG51bGwsCiAgICAgICAgICB0aGlzLmlubGluaW5nQ29udGV4dCk7CiAgICB9CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICAvLy8gQ3JlYXRlcyB0aGUgc291cmNlIGluZm9ybWF0aW9uIGZvciB0aGUgW2JvZHldIG9mIFtub2RlXS4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBmb3IgY29kZSBpbiB0aGUgYmVnaW5uaW5nIG9mIGEgbWV0aG9kLCBsaWtlCiAgLy8vIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBpbiB0aGUgc3RhcnQgb2YgYSBmdW5jdGlvbi4KICBTb3VyY2VJbmZvcm1hdGlvbiBfYnVpbGRCb2R5KGlyLlRyZWVOb2RlIG5vZGUsIGlyLlRyZWVOb2RlIGJvZHkpIHsKICAgIFNvdXJjZUxvY2F0aW9uIGxvY2F0aW9uOwogICAgaWYgKGJvZHkgIT0gbnVsbCkgewogICAgICBpZiAoYm9keSBpcyBpci5CbG9jayAmJiBib2R5LnN0YXRlbWVudHMuaXNOb3RFbXB0eSkgewogICAgICAgIGxvY2F0aW9uID0gX2dldFNvdXJjZUxvY2F0aW9uKF9uYW1lLCBib2R5LnN0YXRlbWVudHMuZmlyc3QpOwogICAgICB9IGVsc2UgewogICAgICAgIGxvY2F0aW9uID0gX2dldFNvdXJjZUxvY2F0aW9uKF9uYW1lLCBib2R5KTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgbG9jYXRpb24gPSBfZ2V0U291cmNlTG9jYXRpb24oX25hbWUsIG5vZGUpOwogICAgfQogICAgcmV0dXJuIG5ldyBQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uKGxvY2F0aW9uLCBudWxsLCBpbmxpbmluZ0NvbnRleHQpOwogIH0KCiAgLy8vIENyZWF0ZXMgc291cmNlIGluZm9ybWF0aW9uIGZvciB0aGUgYm9keSBvZiB0aGUgY3VycmVudCBtZW1iZXIuCiAgU291cmNlSW5mb3JtYXRpb24gX2J1aWxkTWVtYmVyQm9keSgpIHsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IF9lbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24oX21lbWJlcik7CiAgICBzd2l0Y2ggKGRlZmluaXRpb24ua2luZCkgewogICAgICBjYXNlIE1lbWJlcktpbmQucmVndWxhcjoKICAgICAgICBpci5Ob2RlIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgICByZXR1cm4gX2J1aWxkQm9keShub2RlLCBub2RlLmZ1bmN0aW9uLmJvZHkpOwogICAgICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5GaWVsZCkgewogICAgICAgICAgcmV0dXJuIF9idWlsZEJvZHkobm9kZSwgbm9kZS5pbml0aWFsaXplcik7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3I6CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgICAgaXIuTm9kZSBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICAgIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICAgICAgcmV0dXJuIF9idWlsZEJvZHkobm9kZSwgbm9kZS5mdW5jdGlvbi5ib2R5KTsKICAgICAgICB9IGVsc2UgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgICAgIHJldHVybiBfYnVpbGRCb2R5KG5vZGUsIG5vZGUuZnVuY3Rpb24uYm9keSk7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIE1lbWJlcktpbmQuY2xvc3VyZUNhbGw6CiAgICAgICAgaXIuTG9jYWxGdW5jdGlvbiBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICAgIHJldHVybiBfYnVpbGRCb2R5KG5vZGUsIG5vZGUuZnVuY3Rpb24uYm9keSk7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5nZW5lcmF0b3JCb2R5OgogICAgICAgIGlyLk5vZGUgbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICBpZiAobm9kZSBpcyBpci5Mb2NhbEZ1bmN0aW9uKSB7CiAgICAgICAgICByZXR1cm4gX2J1aWxkQm9keShub2RlLCBub2RlLmZ1bmN0aW9uLmJvZHkpOwogICAgICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5NZW1iZXIgJiYgbm9kZS5mdW5jdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gX2J1aWxkQm9keShub2RlLCBub2RlLmZ1bmN0aW9uLmJvZHkpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgIH0KICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShkZWZpbml0aW9uLm5vZGUpOwogIH0KCiAgLy8vIENyZWF0ZXMgc291cmNlIGluZm9ybWF0aW9uIGZvciB0aGUgZXhpdCBvZiB0aGUgY3VycmVudCBtZW1iZXIuCiAgU291cmNlSW5mb3JtYXRpb24gX2J1aWxkTWVtYmVyRXhpdCgpIHsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IF9lbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24oX21lbWJlcik7CiAgICBzd2l0Y2ggKGRlZmluaXRpb24ua2luZCkgewogICAgICBjYXNlIE1lbWJlcktpbmQucmVndWxhcjoKICAgICAgICBpci5Ob2RlIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgICByZXR1cm4gX2J1aWxkRnVuY3Rpb25FeGl0KG5vZGUsIG5vZGUuZnVuY3Rpb24pOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yOgogICAgICBjYXNlIE1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5OgogICAgICAgIGlyLk1lbWJlciBub2RlID0gZGVmaW5pdGlvbi5ub2RlOwogICAgICAgIHJldHVybiBfYnVpbGRGdW5jdGlvbkV4aXQobm9kZSwgbm9kZS5mdW5jdGlvbik7CiAgICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlQ2FsbDoKICAgICAgICBpci5Mb2NhbEZ1bmN0aW9uIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgcmV0dXJuIF9idWlsZEZ1bmN0aW9uRXhpdChub2RlLCBub2RlLmZ1bmN0aW9uKTsKICAgICAgZGVmYXVsdDoKICAgIH0KICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShkZWZpbml0aW9uLm5vZGUpOwogIH0KCiAgLy8vIENyZWF0ZXMgc291cmNlIGluZm9ybWF0aW9uIGJhc2VkIG9uIHRoZSBsb2NhdGlvbiBvZiBbbm9kZV0uCiAgU291cmNlSW5mb3JtYXRpb24gX2J1aWxkVHJlZU5vZGUoaXIuVHJlZU5vZGUgbm9kZSwKICAgICAge1NvdXJjZUxvY2F0aW9uIGNsb3NpbmdQb3NpdGlvbiwgU3RyaW5nIG5hbWV9KSB7CiAgICByZXR1cm4gbmV3IFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb24oCiAgICAgICAgX2dldFNvdXJjZUxvY2F0aW9uKG5hbWUgPz8gX25hbWUsIG5vZGUpLAogICAgICAgIGNsb3NpbmdQb3NpdGlvbiwKICAgICAgICBpbmxpbmluZ0NvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb25CdWlsZGVyIGZvckNvbnRleHQoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsIFNvdXJjZUluZm9ybWF0aW9uIGNvbnRleHQpIHsKICAgIExpc3Q8RnJhbWVDb250ZXh0PiBuZXdDb250ZXh0ID0gaW5saW5pbmdDb250ZXh0Py50b0xpc3QoKSA/PyBbXTsKICAgIGlmIChjb250ZXh0ICE9IG51bGwpIHsKICAgICAgbmV3Q29udGV4dC5hZGQobmV3IEZyYW1lQ29udGV4dChjb250ZXh0LCBtZW1iZXIubmFtZSkpOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhzaWdtdW5kKTogaW52ZXN0aWdhdGUgd2hldGhlciB3ZSBoYXZlIGFueSBtb3JlIGNhc2VzIHdoZXJlIGNvbnRleHQKICAgICAgLy8gaXMgbnVsbC4KICAgICAgbmV3Q29udGV4dCA9IGlubGluaW5nQ29udGV4dDsKICAgIH0KCiAgICBTdHJpbmcgbmFtZSA9IGNvbXB1dGVLZXJuZWxFbGVtZW50TmFtZUZvclNvdXJjZU1hcHMoX2VsZW1lbnRNYXAsIF9tZW1iZXIpOwogICAgcmV0dXJuIG5ldyBLZXJuZWxTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIud2l0aENvbnRleHQoCiAgICAgICAgX2VsZW1lbnRNYXAsIG1lbWJlciwgbmV3Q29udGV4dCwgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFN3aXRjaENhc2UoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFN3aXRjaChpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQXMoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZElzKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRUcnkoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZENhdGNoKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRCaW5hcnkoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFVuYXJ5KGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRJbmRleFNldChpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkSW5kZXgoaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEZvckluU2V0KGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRGb3JJbkN1cnJlbnQoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEZvckluTW92ZU5leHQoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEZvckluSXRlcmF0b3IoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFN0cmluZ0ludGVycG9sYXRpb24oaXIuTm9kZSBub2RlKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEZvcmVpZ25Db2RlKGlyLk5vZGUgbm9kZSkgPT4gbnVsbDsKCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRWYXJpYWJsZURlY2xhcmF0aW9uKCkgewogICAgcmV0dXJuIF9idWlsZE1lbWJlckJvZHkoKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQXdhaXQoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFlpZWxkKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRBc3luY0JvZHkoKSB7CiAgICByZXR1cm4gX2J1aWxkTWVtYmVyQm9keSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRBc3luY0V4aXQoKSB7CiAgICByZXR1cm4gX2J1aWxkTWVtYmVyRXhpdCgpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRBc3NpZ25tZW50KGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRUaHJvdyhpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQXNzZXJ0KGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGROZXcoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZElmKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRDYWxsKAogICAgICBjb3ZhcmlhbnQgaXIuVHJlZU5vZGUgcmVjZWl2ZXIsIGNvdmFyaWFudCBpci5UcmVlTm9kZSBjYWxsKSB7CiAgICByZXR1cm4gbmV3IFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb24oX2dldFNvdXJjZUxvY2F0aW9uKF9uYW1lLCByZWNlaXZlciksCiAgICAgICAgX2dldFNvdXJjZUxvY2F0aW9uKF9uYW1lLCBjYWxsKSwgaW5saW5pbmdDb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkR2V0KGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRTZXQoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZExvb3AoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEltcGxpY2l0UmV0dXJuKE1lbWJlckVudGl0eSBlbGVtZW50KSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFJldHVybihpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRGdW5jdGlvbkVuZChfbWVtYmVyLCBub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkQ3JlYXRlKGlyLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9idWlsZFRyZWVOb2RlKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU291cmNlSW5mb3JtYXRpb24gYnVpbGRMaXN0TGl0ZXJhbChpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBfYnVpbGRUcmVlTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkR2VuZXJpYyhpci5Ob2RlIG5vZGUpID0+IG51bGw7CgogIEBvdmVycmlkZQogIFNvdXJjZUluZm9ybWF0aW9uIGJ1aWxkRGVjbGFyYXRpb24oTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgcmV0dXJuIF9idWlsZEZ1bmN0aW9uRW5kKG1lbWJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZFN0dWIoCiAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpIHsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9IF9lbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24oZnVuY3Rpb24pOwogICAgU3RyaW5nIG5hbWUgPSBjb21wdXRlS2VybmVsRWxlbWVudE5hbWVGb3JTb3VyY2VNYXBzKAogICAgICAgIF9lbGVtZW50TWFwLCBmdW5jdGlvbiwgY2FsbFN0cnVjdHVyZSk7CiAgICBpci5Ob2RlIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSwgbmFtZTogbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTb3VyY2VJbmZvcm1hdGlvbiBidWlsZEdvdG8oaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gX2J1aWxkVHJlZU5vZGUobm9kZSk7CiAgfQp9CgpjbGFzcyBLZXJuZWxTb3VyY2VMb2NhdGlvbiBleHRlbmRzIEFic3RyYWN0U291cmNlTG9jYXRpb24gewogIEBvdmVycmlkZQogIGZpbmFsIGludCBvZmZzZXQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIHNvdXJjZU5hbWU7CiAgQG92ZXJyaWRlCiAgZmluYWwgVXJpIHNvdXJjZVVyaTsKCiAgS2VybmVsU291cmNlTG9jYXRpb24oaXIuTG9jYXRpb24gbG9jYXRpb24sIHRoaXMub2Zmc2V0LCB0aGlzLnNvdXJjZU5hbWUpCiAgICAgIDogc291cmNlVXJpID0gbG9jYXRpb24uZmlsZSwKICAgICAgICBzdXBlci5mcm9tTG9jYXRpb24obG9jYXRpb24pOwoKICBLZXJuZWxTb3VyY2VMb2NhdGlvbi5mcm9tT3RoZXIoS2VybmVsU291cmNlTG9jYXRpb24gb3RoZXIsIHRoaXMuc291cmNlTmFtZSkKICAgICAgOiBzb3VyY2VVcmkgPSBvdGhlci5zb3VyY2VVcmksCiAgICAgICAgb2Zmc2V0ID0gb3RoZXIub2Zmc2V0LAogICAgICAgIHN1cGVyLmZyb21PdGhlcihvdGhlcik7Cn0KgeAATk48AU9GASsBKCQnJyoiJAEmOCwBQAEMSi8ZPhkRBAIBTkUEREEcLjQlSB0hKhMjLh4yEycMNB4xEysMChwIQSNLKw1FBAIBTxJLJB4WAUEGTVA8LAFBTSABLkkBTyoGUAxDFhoaIE0NSBwIICAGDFA9BAFOKgZLJEU+LCpOIQYhBAFRTQZROFFLTh8fKiRECg8jJypCIzFCIg8GQAQBTzEGSyg4PixPECEGIQQBPwZJOEUdGDxFDzQIDTIGSwQBRSlMHx8oJDcnNQoPIycoJDctNwoPIzE1JSgoN0E3Cg8PBiwEAUUpTB8fKCQ6Cg8jJyo4IzE4DwYsBAFCNTcqMRkaBAEMJzhFGz4NURIkBgFPOzAEAQw7AQwwIQQBDCwhBAEMLCEEAQwtIQQBDC8hBAEMMCEEAQwvIQQBDDkBDDYBDDIhBAEMNiEEAQw3IQQBDDchBAEMRAEMPAEMMR8EAQwvIQQBDC8hBAEMJx8EAQwnHwQBDDQhBAEMLyEEAQwwIQQBDC0hBAEMLCEEAQwfRE47BAEMLSEEAQwtIQQBDC4hBAEMRwEMMC0EAQwwIQQBDDUhBAEMOAEMPCYEAQwfPk05LyQtBAEMLiEEAgE8DBQMGwwXAUsjJgFOJR8gAgE2cGFja2FnZTpjb21waWxlci9zcmMvaW8va2VybmVsX3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzL2pzX3NvdXJjZV9tYXBwaW5nLmRhcnSQfC8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGpzLnNvdXJjZV9tYXBwaW5nOwoKaW1wb3J0ICcuLi9pby9jb2RlX291dHB1dC5kYXJ0JwogICAgc2hvdyBCdWZmZXJlZENvZGVPdXRwdXQsIFNvdXJjZUxvY2F0aW9ucywgU291cmNlTG9jYXRpb25zUHJvdmlkZXI7CmltcG9ydCAnLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnCiAgICBzaG93IFNvdXJjZUxvY2F0aW9uLCBTb3VyY2VJbmZvcm1hdGlvbiwgU291cmNlSW5mb3JtYXRpb25TdHJhdGVneTsKaW1wb3J0ICdqcy5kYXJ0JzsKCi8vLyBbU291cmNlSW5mb3JtYXRpb25TdHJhdGVneV0gdGhhdCBjYW4gYXNzb2NpYXRlIHNvdXJjZSBpbmZvcm1hdGlvbiB3aXRoCi8vLyBKYXZhU2NyaXB0IG91dHB1dC4KY2xhc3MgSmF2YVNjcmlwdFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgZXh0ZW5kcyBTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5IHsKICBjb25zdCBKYXZhU2NyaXB0U291cmNlSW5mb3JtYXRpb25TdHJhdGVneSgpOwoKICAvLy8gQ3JlYXRlcyBhIHByb2Nlc3NvciB0aGF0IGNhbiBhc3NvY2lhdGUgc291cmNlIGluZm9ybWF0aW9uIG9uIFtOb2RlXSB3aXRoCiAgLy8vIGNvZGUgb2Zmc2V0cyBpbiBhIFtTb3VyY2VNYXBwZXJdIHByb3ZpZGVkIGJ5IFtzb3VyY2VNYXBwZXJQcm92aWRlcl0uCiAgLy8vIFNvdXJjZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBbTm9kZV0gaXMgcHJvdmlkZXIgYnkgW3JlYWRlcl0uCiAgU291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IgY3JlYXRlUHJvY2Vzc29yKAogICAgICBTb3VyY2VNYXBwZXJQcm92aWRlciBzb3VyY2VNYXBwZXJQcm92aWRlciwKICAgICAgU291cmNlSW5mb3JtYXRpb25SZWFkZXIgcmVhZGVyKSB7CiAgICByZXR1cm4gY29uc3QgU291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IoKTsKICB9Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIGRlcml2aW5nIFtTb3VyY2VJbmZvcm1hdGlvbl0gZnJvbSBhIFtOb2RlXS4KLy8vCi8vLyBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiByZWFkIHRoZSB2YWx1ZSBvZiB0aGUgbm9kZSBpdHNlbGYuCmNsYXNzIFNvdXJjZUluZm9ybWF0aW9uUmVhZGVyIHsKICBjb25zdCBTb3VyY2VJbmZvcm1hdGlvblJlYWRlcigpOwoKICBTb3VyY2VJbmZvcm1hdGlvbiBnZXRTb3VyY2VJbmZvcm1hdGlvbihOb2RlIG5vZGUpID0+IG5vZGUuc291cmNlSW5mb3JtYXRpb247Cn0KCi8vLyBBbiBvYnNlcnZlciBvZiBjb2RlIHBvc2l0aW9ucyBvZiBwcmludGVkIEphdmFTY3JpcHQgW05vZGVdcy4KY2xhc3MgQ29kZVBvc2l0aW9uTGlzdGVuZXIgewogIGNvbnN0IENvZGVQb3NpdGlvbkxpc3RlbmVyKCk7CgogIC8vLyBDYWxsZWQgdG8gYXNzb2NpYXRlIFtub2RlXSB3aXRoIHRoZSBwcm92aWRlZCBzdGFydCBwb3NpdGlvbi4KICAvLy8KICAvLy8gVGhlIG5vZGVzIGFyZSBzZWVuIGluIHByZS10cmF2ZXJzYWwgb3JkZXIuCiAgdm9pZCBvblN0YXJ0UG9zaXRpb24oTm9kZSBub2RlLCBpbnQgc3RhcnRQb3NpdGlvbikge30KCiAgLy8vIENhbGxlZCB0byBhc3NvY2lhdGUgW25vZGVdIHdpdGggdGhlIHByb3ZpZGVkIHN0YXJ0LCBlbmQgYW5kIGNsb3NpbmcKICAvLy8gcG9zaXRpb25zLgogIC8vLwogIC8vLyBUaGUgbm9kZXMgYXJlIHNlZW4gaW4gcG9zdC10cmF2ZXJzYWwgb3JkZXIuCiAgdm9pZCBvblBvc2l0aW9ucygKICAgICAgTm9kZSBub2RlLCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uLCBpbnQgY2xvc2luZ1Bvc2l0aW9uKSB7fQp9CgovLy8gSW50ZXJmYWNlIGZvciBjcmVhdGluZyBbU291cmNlTWFwcGVyXXMgZm9yIG11bHRpcGxlIHNvdXJjZSBpbmZvcm1hdGlvbgovLy8gZW5naW5lcy4KYWJzdHJhY3QgY2xhc3MgU291cmNlTWFwcGVyUHJvdmlkZXIgewogIFNvdXJjZU1hcHBlciBjcmVhdGVTb3VyY2VNYXBwZXIoU3RyaW5nIG5hbWUpOwp9CgovLy8gQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBbU291cmNlTWFwcGVyUHJvdmlkZXJdLgpjbGFzcyBTb3VyY2VNYXBwZXJQcm92aWRlckltcGwgaW1wbGVtZW50cyBTb3VyY2VNYXBwZXJQcm92aWRlciB7CiAgZmluYWwgU291cmNlTG9jYXRpb25zUHJvdmlkZXIgcHJvdmlkZXI7CgogIFNvdXJjZU1hcHBlclByb3ZpZGVySW1wbCh0aGlzLnByb3ZpZGVyKTsKCiAgQG92ZXJyaWRlCiAgU291cmNlTWFwcGVyIGNyZWF0ZVNvdXJjZU1hcHBlcihTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIG5ldyBTb3VyY2VMb2NhdGlvbnNNYXBwZXIocHJvdmlkZXIuY3JlYXRlU291cmNlTG9jYXRpb25zKG5hbWUpKTsKICB9Cn0KCi8vLyBBbiBpbnRlcmZhY2UgZm9yIG1hcHBpbmcgY29kZSBvZmZzZXRzIHdpdGggW1NvdXJjZUxvY2F0aW9uXXMgZm9yIEphdmFTY3JpcHQKLy8vIFtOb2RlXXMuCmFic3RyYWN0IGNsYXNzIFNvdXJjZU1hcHBlciB7CiAgLy8vIEFzc29jaWF0ZSBbY29kZU9mZnNldF0gd2l0aCBbc291cmNlTG9jYXRpb25dIGZvciBbbm9kZV0uCiAgdm9pZCByZWdpc3RlcihOb2RlIG5vZGUsIGludCBjb2RlT2Zmc2V0LCBTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbik7CgogIC8vLyBBc3NvY2lhdGUgW2NvZGVPZmZzZXRdIHdpdGggYW4gaW5saW5pbmcgY2FsbCBhdCBbc291cmNlTG9jYXRpb25dLgogIHZvaWQgcmVnaXN0ZXJQdXNoKAogICAgICBpbnQgY29kZU9mZnNldCwgU291cmNlTG9jYXRpb24gc291cmNlTG9jYXRpb24sIFN0cmluZyBpbmxpbmVkTWV0aG9kTmFtZSk7CgogIC8vLyBBc3NvY2lhdGUgW2NvZGVPZmZzZXRdIHdpdGggYW4gaW5saW5pbmcgcmV0dXJuLgogIC8vLwogIC8vLyBJZiBbaXNFbXB0eV0gaXMgdHJ1ZSwgYWxzbyBhc3NvY2lhdGUgdGhhdCB0aGUgaW5saW5pbmcgc3RhY2sgaXMgZW1wdHkgYXQKICAvLy8gW2NvZGVPZmZzZXRdLgogIHZvaWQgcmVnaXN0ZXJQb3AoaW50IGNvZGVPZmZzZXQsIHtib29sIGlzRW1wdHk6IGZhbHNlfSk7Cn0KCi8vLyBBbiBpbXBsZW1lbnRhdGlvbiBvZiBbU291cmNlTWFwcGVyXSB0aGF0IHN0b3JlcyB0aGUgaW5mb3JtYXRpb24gZGlyZWN0bHkKLy8vIGludG8gYSBbU291cmNlTG9jYXRpb25zXSBvYmplY3QuCmNsYXNzIFNvdXJjZUxvY2F0aW9uc01hcHBlciBpbXBsZW1lbnRzIFNvdXJjZU1hcHBlciB7CiAgZmluYWwgU291cmNlTG9jYXRpb25zIHNvdXJjZUxvY2F0aW9uczsKCiAgU291cmNlTG9jYXRpb25zTWFwcGVyKHRoaXMuc291cmNlTG9jYXRpb25zKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlcihOb2RlIG5vZGUsIGludCBjb2RlT2Zmc2V0LCBTb3VyY2VMb2NhdGlvbiBzb3VyY2VMb2NhdGlvbikgewogICAgc291cmNlTG9jYXRpb25zLmFkZFNvdXJjZUxvY2F0aW9uKGNvZGVPZmZzZXQsIHNvdXJjZUxvY2F0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJQdXNoKAogICAgICBpbnQgY29kZU9mZnNldCwgU291cmNlTG9jYXRpb24gc291cmNlTG9jYXRpb24sIFN0cmluZyBpbmxpbmVkTWV0aG9kTmFtZSkgewogICAgc291cmNlTG9jYXRpb25zLmFkZFB1c2goY29kZU9mZnNldCwgc291cmNlTG9jYXRpb24sIGlubGluZWRNZXRob2ROYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJQb3AoaW50IGNvZGVPZmZzZXQsIHtib29sIGlzRW1wdHk6IGZhbHNlfSkgewogICAgc291cmNlTG9jYXRpb25zLmFkZFBvcChjb2RlT2Zmc2V0LCBpc0VtcHR5KTsKICB9Cn0KCi8vLyBBIHByb2Nlc3NvciB0aGF0IGFzc29jaWF0ZXMgW1NvdXJjZUluZm9ybWF0aW9uXSB3aXRoIGNvZGUgcG9zaXRpb24gb2YKLy8vIEphdmFTY3JpcHQgW05vZGVdcy4KY2xhc3MgU291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IgZXh0ZW5kcyBDb2RlUG9zaXRpb25MaXN0ZW5lciB7CiAgY29uc3QgU291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3IoKTsKCiAgLy8vIFByb2Nlc3MgdGhlIHNvdXJjZSBpbmZvcm1hdGlvbiBhbmQgY29kZSBwb3NpdGlvbnMgZm9yIHRoZSBbbm9kZV0gYW5kIGFsbAogIC8vLyBpdHMgY2hpbGRyZW4uCiAgdm9pZCBwcm9jZXNzKE5vZGUgbm9kZSwgQnVmZmVyZWRDb2RlT3V0cHV0IGNvZGUpIHt9Cn0KewBOTjwBGwEgRydHEgFLF04vAU9LQi4xKC8EAgE+BD8gIwFPAgFBHSABQwYxOAFKEQYyFE0CAUsNJjACATNBKgErAQwxTAQCAVANHj9LAUgVUAE2Bk8UOwIBTSU2KQEvAQxMQwQBDBVRTAQBDDwxBAIBShhAJgFPFDYCAS5wYWNrYWdlOmNvbXBpbGVyL3NyYy9qcy9qc19zb3VyY2VfbWFwcGluZy5kYXJ0PHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvYmFja2VuZF9pbXBhY3QuZGFydMAAZPwvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX2hlbHBlcnMuaW1wYWN0OwoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgQ29tbW9uRWxlbWVudHMsIEVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JyBzaG93IEludGVyZmFjZVR5cGU7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdEJ1aWxkZXIsIFdvcmxkSW1wYWN0QnVpbGRlckltcGw7CmltcG9ydCAnLi4vdW5pdmVyc2UvdXNlLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvZW51bXNldC5kYXJ0JzsKCi8vLyBCYWNrZW5kIHNwZWNpZmljIGZlYXR1cmVzIHJlcXVpcmVkIGJ5IGEgYmFja2VuZCBpbXBhY3QuCmVudW0gQmFja2VuZEZlYXR1cmUgewogIG5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWcsCiAgbmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHksCn0KCi8vLyBBIHNldCBvZiBKYXZhU2NyaXB0IGJhY2tlbmQgZGVwZW5kZW5jaWVzLgpjbGFzcyBCYWNrZW5kSW1wYWN0IHsKICBmaW5hbCBMaXN0PEZ1bmN0aW9uRW50aXR5PiBzdGF0aWNVc2VzOwogIGZpbmFsIExpc3Q8RnVuY3Rpb25FbnRpdHk+IGdsb2JhbFVzZXM7CiAgZmluYWwgTGlzdDxTZWxlY3Rvcj4gZHluYW1pY1VzZXM7CiAgZmluYWwgTGlzdDxJbnRlcmZhY2VUeXBlPiBpbnN0YW50aWF0ZWRUeXBlczsKICBmaW5hbCBMaXN0PENsYXNzRW50aXR5PiBpbnN0YW50aWF0ZWRDbGFzc2VzOwogIGZpbmFsIExpc3Q8Q2xhc3NFbnRpdHk+IGdsb2JhbENsYXNzZXM7CiAgZmluYWwgTGlzdDxCYWNrZW5kSW1wYWN0PiBvdGhlckltcGFjdHM7CiAgZmluYWwgRW51bVNldDxCYWNrZW5kRmVhdHVyZT4gX2ZlYXR1cmVzOwoKICBjb25zdCBCYWNrZW5kSW1wYWN0KAogICAgICB7dGhpcy5zdGF0aWNVc2VzOiBjb25zdCA8RnVuY3Rpb25FbnRpdHk+W10sCiAgICAgIHRoaXMuZ2xvYmFsVXNlczogY29uc3QgPEZ1bmN0aW9uRW50aXR5PltdLAogICAgICB0aGlzLmR5bmFtaWNVc2VzOiBjb25zdCA8U2VsZWN0b3I+W10sCiAgICAgIHRoaXMuaW5zdGFudGlhdGVkVHlwZXM6IGNvbnN0IDxJbnRlcmZhY2VUeXBlPltdLAogICAgICB0aGlzLmluc3RhbnRpYXRlZENsYXNzZXM6IGNvbnN0IDxDbGFzc0VudGl0eT5bXSwKICAgICAgdGhpcy5nbG9iYWxDbGFzc2VzOiBjb25zdCA8Q2xhc3NFbnRpdHk+W10sCiAgICAgIHRoaXMub3RoZXJJbXBhY3RzOiBjb25zdCA8QmFja2VuZEltcGFjdD5bXSwKICAgICAgRW51bVNldDxCYWNrZW5kRmVhdHVyZT4gZmVhdHVyZXM6IGNvbnN0IEVudW1TZXQ8QmFja2VuZEZlYXR1cmU+LmZpeGVkKDApfSkKICAgICAgOiB0aGlzLl9mZWF0dXJlcyA9IGZlYXR1cmVzOwoKICBJdGVyYWJsZTxCYWNrZW5kRmVhdHVyZT4gZ2V0IGZlYXR1cmVzID0+CiAgICAgIF9mZWF0dXJlcy5pdGVyYWJsZShCYWNrZW5kRmVhdHVyZS52YWx1ZXMpOwoKICBXb3JsZEltcGFjdCBjcmVhdGVJbXBhY3QoRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCkgewogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBpbXBhY3RCdWlsZGVyID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIHJlZ2lzdGVySW1wYWN0KGltcGFjdEJ1aWxkZXIsIGVsZW1lbnRFbnZpcm9ubWVudCk7CiAgICByZXR1cm4gaW1wYWN0QnVpbGRlcjsKICB9CgogIC8vLyBSZWdpc3RlciB0aGlzIGJhY2tlbmQgaW1wYWN0IHRvIHRoZSBbd29ybGRJbXBhY3RCdWlsZGVyXS4KICB2b2lkIHJlZ2lzdGVySW1wYWN0KFdvcmxkSW1wYWN0QnVpbGRlciB3b3JsZEltcGFjdEJ1aWxkZXIsCiAgICAgIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQpIHsKICAgIGZvciAoRnVuY3Rpb25FbnRpdHkgc3RhdGljVXNlIGluIHN0YXRpY1VzZXMpIHsKICAgICAgYXNzZXJ0KHN0YXRpY1VzZSAhPSBudWxsKTsKICAgICAgd29ybGRJbXBhY3RCdWlsZGVyCiAgICAgICAgICAucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5pbXBsaWNpdEludm9rZShzdGF0aWNVc2UpKTsKICAgIH0KICAgIGZvciAoRnVuY3Rpb25FbnRpdHkgc3RhdGljVXNlIGluIGdsb2JhbFVzZXMpIHsKICAgICAgYXNzZXJ0KHN0YXRpY1VzZSAhPSBudWxsKTsKICAgICAgd29ybGRJbXBhY3RCdWlsZGVyCiAgICAgICAgICAucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5pbXBsaWNpdEludm9rZShzdGF0aWNVc2UpKTsKICAgIH0KICAgIGZvciAoU2VsZWN0b3Igc2VsZWN0b3IgaW4gZHluYW1pY1VzZXMpIHsKICAgICAgYXNzZXJ0KHNlbGVjdG9yICE9IG51bGwpOwogICAgICB3b3JsZEltcGFjdEJ1aWxkZXIKICAgICAgICAgIC5yZWdpc3RlckR5bmFtaWNVc2UobmV3IER5bmFtaWNVc2Uoc2VsZWN0b3IsIG51bGwsIGNvbnN0IFtdKSk7CiAgICB9CiAgICBmb3IgKEludGVyZmFjZVR5cGUgaW5zdGFudGlhdGVkVHlwZSBpbiBpbnN0YW50aWF0ZWRUeXBlcykgewogICAgICB3b3JsZEltcGFjdEJ1aWxkZXIKICAgICAgICAgIC5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaW5zdGFudGlhdGlvbihpbnN0YW50aWF0ZWRUeXBlKSk7CiAgICB9CiAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiBpbnN0YW50aWF0ZWRDbGFzc2VzKSB7CiAgICAgIHdvcmxkSW1wYWN0QnVpbGRlci5yZWdpc3RlclR5cGVVc2UoCiAgICAgICAgICBuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKGVsZW1lbnRFbnZpcm9ubWVudC5nZXRSYXdUeXBlKGNscykpKTsKICAgIH0KICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIGdsb2JhbENsYXNzZXMpIHsKICAgICAgd29ybGRJbXBhY3RCdWlsZGVyLnJlZ2lzdGVyVHlwZVVzZSgKICAgICAgICAgIG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24oZWxlbWVudEVudmlyb25tZW50LmdldFJhd1R5cGUoY2xzKSkpOwogICAgfQogICAgZm9yIChCYWNrZW5kSW1wYWN0IG90aGVySW1wYWN0IGluIG90aGVySW1wYWN0cykgewogICAgICBvdGhlckltcGFjdC5yZWdpc3RlckltcGFjdCh3b3JsZEltcGFjdEJ1aWxkZXIsIGVsZW1lbnRFbnZpcm9ubWVudCk7CiAgICB9CiAgfQp9CgovLy8gVGhlIEphdmFTY3JpcHQgYmFja2VuZCBkZXBlbmRlbmNpZXMgZm9yIHZhcmlvdXMgZmVhdHVyZXMuCmNsYXNzIEJhY2tlbmRJbXBhY3RzIHsKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgYm9vbCBfbmV3UnRpOwoKICBCYWNrZW5kSW1wYWN0cyh0aGlzLl9jb21tb25FbGVtZW50cywgdGhpcy5fbmV3UnRpKTsKCiAgQmFja2VuZEltcGFjdCBfZ2V0UnVudGltZVR5cGVBcmd1bWVudDsKCiAgQmFja2VuZEltcGFjdCBnZXQgZ2V0UnVudGltZVR5cGVBcmd1bWVudCB7CiAgICByZXR1cm4gX2dldFJ1bnRpbWVUeXBlQXJndW1lbnQgPz89IG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbFVzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldFJ1bnRpbWVUeXBlQXJndW1lbnRJbnRlcmNlcHRlZCwKICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldFJ1bnRpbWVUeXBlQXJndW1lbnQsCiAgICAgIF9jb21tb25FbGVtZW50cy5nZXRUeXBlQXJndW1lbnRCeUluZGV4LAogICAgXSwgb3RoZXJJbXBhY3RzOiBuZXdSdGlJbXBhY3RzKCdnZXRSdW50aW1lVHlwZUFyZ3VtZW50JykpOwogIH0KCiAgQmFja2VuZEltcGFjdCBfY29tcHV0ZVNpZ25hdHVyZTsKCiAgQmFja2VuZEltcGFjdCBnZXQgY29tcHV0ZVNpZ25hdHVyZSB7CiAgICByZXR1cm4gX2NvbXB1dGVTaWduYXR1cmUgPz89IG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbFVzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLnNldFJ1bnRpbWVUeXBlSW5mbywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldFJ1bnRpbWVUeXBlSW5mbywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmNvbXB1dGVTaWduYXR1cmUsCiAgICAgIF9jb21tb25FbGVtZW50cy5nZXRSdW50aW1lVHlwZUFyZ3VtZW50cywKICAgIF0sIG90aGVySW1wYWN0czogWwogICAgICBsaXN0VmFsdWVzCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX21haW5XaXRoQXJndW1lbnRzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBtYWluV2l0aEFyZ3VtZW50cyB7CiAgICByZXR1cm4gX21haW5XaXRoQXJndW1lbnRzID8/PSBuZXcgQmFja2VuZEltcGFjdChpbnN0YW50aWF0ZWRDbGFzc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2FzeW5jQm9keTsKCiAgQmFja2VuZEltcGFjdCBnZXQgYXN5bmNCb2R5ID0+IF9hc3luY0JvZHkgPz89IG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFsKICAgICAgICBfY29tbW9uRWxlbWVudHMuYXN5bmNIZWxwZXJBd2FpdCwKICAgICAgICBfY29tbW9uRWxlbWVudHMuYXN5bmNIZWxwZXJSZXR1cm4sCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmFzeW5jSGVscGVyUmV0aHJvdywKICAgICAgICBfY29tbW9uRWxlbWVudHMuc3RyZWFtSXRlcmF0b3JDb25zdHJ1Y3RvciwKICAgICAgICBfY29tbW9uRWxlbWVudHMud3JhcEJvZHksCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmFzeW5jSGVscGVyU3RhcnRTeW5jCiAgICAgIF0pOwoKICBCYWNrZW5kSW1wYWN0IF9zeW5jU3RhckJvZHk7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHN5bmNTdGFyQm9keSB7CiAgICByZXR1cm4gX3N5bmNTdGFyQm9keSA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICBfY29tbW9uRWxlbWVudHMuZW5kT2ZJdGVyYXRpb24sCiAgICAgIF9jb21tb25FbGVtZW50cy55aWVsZFN0YXIsCiAgICAgIF9jb21tb25FbGVtZW50cy5zeW5jU3RhclVuY2F1Z2h0RXJyb3IsCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2FzeW5jU3RhckJvZHk7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGFzeW5jU3RhckJvZHkgewogICAgcmV0dXJuIF9hc3luY1N0YXJCb2R5ID8/PSBuZXcgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5hc3luY1N0YXJIZWxwZXIsCiAgICAgIF9jb21tb25FbGVtZW50cy5zdHJlYW1PZkNvbnRyb2xsZXIsCiAgICAgIF9jb21tb25FbGVtZW50cy55aWVsZFNpbmdsZSwKICAgICAgX2NvbW1vbkVsZW1lbnRzLnlpZWxkU3RhciwKICAgICAgX2NvbW1vbkVsZW1lbnRzLnN0cmVhbUl0ZXJhdG9yQ29uc3RydWN0b3IsCiAgICAgIF9jb21tb25FbGVtZW50cy53cmFwQm9keSwKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfdHlwZVZhcmlhYmxlQm91bmRDaGVjazsKCiAgQmFja2VuZEltcGFjdCBnZXQgdHlwZVZhcmlhYmxlQm91bmRDaGVjayB7CiAgICByZXR1cm4gX3R5cGVWYXJpYWJsZUJvdW5kQ2hlY2sgPz89IG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLnRocm93VHlwZUVycm9yLAogICAgICBfY29tbW9uRWxlbWVudHMuYXNzZXJ0SXNTdWJ0eXBlLAogICAgICBpZiAoX25ld1J0aSkgX2NvbW1vbkVsZW1lbnRzLmNoZWNrVHlwZUJvdW5kLAogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9hYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbjsKCiAgQmFja2VuZEltcGFjdCBnZXQgYWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb24gewogICAgcmV0dXJuIF9hYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbiA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgc3RhdGljVXNlczogW19jb21tb25FbGVtZW50cy50aHJvd0Fic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3JdLAogICAgICAgIG90aGVySW1wYWN0czogW19uZWVkc1N0cmluZygnTmVlZGVkIHRvIGVuY29kZSB0aGUgbWVzc2FnZS4nKV0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfZmFsbFRocm91Z2hFcnJvcjsKCiAgQmFja2VuZEltcGFjdCBnZXQgZmFsbFRocm91Z2hFcnJvciB7CiAgICByZXR1cm4gX2ZhbGxUaHJvdWdoRXJyb3IgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogW19jb21tb25FbGVtZW50cy5mYWxsVGhyb3VnaEVycm9yXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9hc0NoZWNrOwoKICBCYWNrZW5kSW1wYWN0IGdldCBhc0NoZWNrIHsKICAgIHJldHVybiBfYXNDaGVjayA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICBfY29tbW9uRWxlbWVudHMudGhyb3dSdW50aW1lRXJyb3IsCiAgICBdLCBvdGhlckltcGFjdHM6IG5ld1J0aUltcGFjdHMoJ2FzQ2hlY2snKSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF90aHJvd05vU3VjaE1ldGhvZDsKCiAgQmFja2VuZEltcGFjdCBnZXQgdGhyb3dOb1N1Y2hNZXRob2QgewogICAgcmV0dXJuIF90aHJvd05vU3VjaE1ldGhvZCA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICBfY29tbW9uRWxlbWVudHMudGhyb3dOb1N1Y2hNZXRob2QsCiAgICBdLCBvdGhlckltcGFjdHM6IFsKICAgICAgLy8gQWxzbyByZWdpc3RlciB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhpcyBtZXRob2QuCiAgICAgIF9uZWVkc0xpc3QoJ05lZWRlZCB0byBlbmNvZGUgdGhlIGFyZ3VtZW50cyBmb3IgdGhyb3cgTm9TdWNoTWV0aG9kRXJyb3IuJyksCiAgICAgIF9uZWVkc1N0cmluZygnTmVlZGVkIHRvIGVuY29kZSB0aGUgbmFtZSBmb3IgdGhyb3cgTm9TdWNoTWV0aG9kRXJyb3IuJyksCiAgICAgIG1hcExpdGVyYWxDbGFzcywgLy8gbm9TdWNoTWV0aG9kIGhlbHBlcnMgYXJlIHBhc3NlZCBhIE1hcC4KICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfc3RyaW5nVmFsdWVzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBzdHJpbmdWYWx1ZXMgewogICAgcmV0dXJuIF9zdHJpbmdWYWx1ZXMgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3QoaW5zdGFudGlhdGVkQ2xhc3NlczogW19jb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9udW1WYWx1ZXM7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG51bVZhbHVlcyB7CiAgICByZXR1cm4gX251bVZhbHVlcyA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoaW5zdGFudGlhdGVkQ2xhc3NlczogWwogICAgICBfY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc1VJbnQzMUNsYXNzLAogICAgICBfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBnZXQgaW50VmFsdWVzID0+IG51bVZhbHVlczsKCiAgQmFja2VuZEltcGFjdCBnZXQgZG91YmxlVmFsdWVzID0+IG51bVZhbHVlczsKCiAgQmFja2VuZEltcGFjdCBfYm9vbFZhbHVlczsKCiAgQmFja2VuZEltcGFjdCBnZXQgYm9vbFZhbHVlcyB7CiAgICByZXR1cm4gX2Jvb2xWYWx1ZXMgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3QoaW5zdGFudGlhdGVkQ2xhc3NlczogW19jb21tb25FbGVtZW50cy5qc0Jvb2xDbGFzc10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbnVsbFZhbHVlOwoKICBCYWNrZW5kSW1wYWN0IGdldCBudWxsVmFsdWUgewogICAgcmV0dXJuIF9udWxsVmFsdWUgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3QoaW5zdGFudGlhdGVkQ2xhc3NlczogW19jb21tb25FbGVtZW50cy5qc051bGxDbGFzc10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbGlzdFZhbHVlczsKCiAgQmFja2VuZEltcGFjdCBnZXQgbGlzdFZhbHVlcyB7CiAgICByZXR1cm4gX2xpc3RWYWx1ZXMgPz89IG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbENsYXNzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzTXV0YWJsZUFycmF5Q2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc0ZpeGVkQXJyYXlDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzRXh0ZW5kYWJsZUFycmF5Q2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3MKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfdGhyb3dSdW50aW1lRXJyb3I7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHRocm93UnVudGltZUVycm9yIHsKICAgIHJldHVybiBfdGhyb3dSdW50aW1lRXJyb3IgPz89IG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLnRocm93UnVudGltZUVycm9yLAogICAgXSwgb3RoZXJJbXBhY3RzOiBbCiAgICAgIC8vIEFsc28gcmVnaXN0ZXIgdGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgbWV0aG9kLgogICAgICBzdHJpbmdWYWx1ZXMKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfdGhyb3dVbnN1cHBvcnRlZEVycm9yOwoKICBCYWNrZW5kSW1wYWN0IGdldCB0aHJvd1Vuc3VwcG9ydGVkRXJyb3IgewogICAgcmV0dXJuIF90aHJvd1Vuc3VwcG9ydGVkRXJyb3IgPz89IG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLnRocm93VW5zdXBwb3J0ZWRFcnJvcgogICAgXSwgb3RoZXJJbXBhY3RzOiBbCiAgICAgIC8vIEFsc28gcmVnaXN0ZXIgdGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgbWV0aG9kLgogICAgICBzdHJpbmdWYWx1ZXMKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfc3VwZXJOb1N1Y2hNZXRob2Q7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHN1cGVyTm9TdWNoTWV0aG9kIHsKICAgIHJldHVybiBfc3VwZXJOb1N1Y2hNZXRob2QgPz89IG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmNyZWF0ZUludm9jYXRpb25NaXJyb3IsCiAgICAgIF9jb21tb25FbGVtZW50cy5vYmplY3ROb1N1Y2hNZXRob2QKICAgIF0sIG90aGVySW1wYWN0czogWwogICAgICBfbmVlZHNJbnQoJ05lZWRlZCB0byBlbmNvZGUgdGhlIGludm9jYXRpb24ga2luZCBvZiBzdXBlci5ub1N1Y2hNZXRob2QuJyksCiAgICAgIF9uZWVkc0xpc3QoJ05lZWRlZCB0byBlbmNvZGUgdGhlIGFyZ3VtZW50cyBvZiBzdXBlci5ub1N1Y2hNZXRob2QuJyksCiAgICAgIF9uZWVkc1N0cmluZygnTmVlZGVkIHRvIGVuY29kZSB0aGUgbmFtZSBvZiBzdXBlci5ub1N1Y2hNZXRob2QuJykKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfY29uc3RhbnRNYXBMaXRlcmFsOwoKICBCYWNrZW5kSW1wYWN0IGdldCBjb25zdGFudE1hcExpdGVyYWwgewogICAgcmV0dXJuIF9jb25zdGFudE1hcExpdGVyYWwgPz89IG5ldyBCYWNrZW5kSW1wYWN0KGluc3RhbnRpYXRlZENsYXNzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmNvbnN0YW50TWFwQ2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5jb25zdGFudFByb3RvTWFwQ2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5jb25zdGFudFN0cmluZ01hcENsYXNzLAogICAgICBfY29tbW9uRWxlbWVudHMuZ2VuZXJhbENvbnN0YW50TWFwQ2xhc3MsCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2NvbnN0YW50U2V0TGl0ZXJhbDsKCiAgQmFja2VuZEltcGFjdCBnZXQgY29uc3RhbnRTZXRMaXRlcmFsID0+CiAgICAgIF9jb25zdGFudFNldExpdGVyYWwgPz89IG5ldyBCYWNrZW5kSW1wYWN0KGluc3RhbnRpYXRlZENsYXNzZXM6IFsKICAgICAgICBfY29tbW9uRWxlbWVudHMuY29uc3RTZXRMaXRlcmFsQ2xhc3MsCiAgICAgIF0sIG90aGVySW1wYWN0czogWwogICAgICAgIGNvbnN0YW50TWFwTGl0ZXJhbAogICAgICBdKTsKCiAgQmFja2VuZEltcGFjdCBfc3ltYm9sQ29uc3RydWN0b3I7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHN5bWJvbENvbnN0cnVjdG9yIHsKICAgIHJldHVybiBfc3ltYm9sQ29uc3RydWN0b3IgPz89IG5ldyBCYWNrZW5kSW1wYWN0KAogICAgICAgIHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMuc3ltYm9sVmFsaWRhdGVkQ29uc3RydWN0b3JdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2NvbnN0U3ltYm9sOwoKICBCYWNrZW5kSW1wYWN0IGdldCBjb25zdFN5bWJvbCB7CiAgICByZXR1cm4gX2NvbnN0U3ltYm9sID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICBpbnN0YW50aWF0ZWRDbGFzc2VzOiBbX2NvbW1vbkVsZW1lbnRzLnN5bWJvbEltcGxlbWVudGF0aW9uQ2xhc3NdLAogICAgICAgIHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMuc3ltYm9sQ29uc3RydWN0b3JUYXJnZXRdKTsKICB9CgogIC8vLyBIZWxwZXIgZm9yIHJlZ2lzdGVyaW5nIHRoYXQgYGludGAgaXMgbmVlZGVkLgogIEJhY2tlbmRJbXBhY3QgX25lZWRzSW50KFN0cmluZyByZWFzb24pIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlZ2lzdGVyIFtyZWFzb25dIGZvciB1c2UgaW4gZHVtcC1pbmZvLgogICAgcmV0dXJuIGludFZhbHVlczsKICB9CgogIC8vLyBIZWxwZXIgZm9yIHJlZ2lzdGVyaW5nIHRoYXQgYExpc3RgIGlzIG5lZWRlZC4KICBCYWNrZW5kSW1wYWN0IF9uZWVkc0xpc3QoU3RyaW5nIHJlYXNvbikgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVnaXN0ZXIgW3JlYXNvbl0gZm9yIHVzZSBpbiBkdW1wLWluZm8uCiAgICByZXR1cm4gbGlzdFZhbHVlczsKICB9CgogIC8vLyBIZWxwZXIgZm9yIHJlZ2lzdGVyaW5nIHRoYXQgYFN0cmluZ2AgaXMgbmVlZGVkLgogIEJhY2tlbmRJbXBhY3QgX25lZWRzU3RyaW5nKFN0cmluZyByZWFzb24pIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlZ2lzdGVyIFtyZWFzb25dIGZvciB1c2UgaW4gZHVtcC1pbmZvLgogICAgcmV0dXJuIHN0cmluZ1ZhbHVlczsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2Fzc2VydFdpdGhvdXRNZXNzYWdlOwoKICBCYWNrZW5kSW1wYWN0IGdldCBhc3NlcnRXaXRob3V0TWVzc2FnZSB7CiAgICByZXR1cm4gX2Fzc2VydFdpdGhvdXRNZXNzYWdlID8/PQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMuYXNzZXJ0SGVscGVyXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9hc3NlcnRXaXRoTWVzc2FnZTsKCiAgQmFja2VuZEltcGFjdCBnZXQgYXNzZXJ0V2l0aE1lc3NhZ2UgewogICAgcmV0dXJuIF9hc3NlcnRXaXRoTWVzc2FnZSA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgc3RhdGljVXNlczogW19jb21tb25FbGVtZW50cy5hc3NlcnRUZXN0LCBfY29tbW9uRWxlbWVudHMuYXNzZXJ0VGhyb3ddKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2FzeW5jRm9ySW47CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGFzeW5jRm9ySW4gewogICAgcmV0dXJuIF9hc3luY0ZvckluID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICBzdGF0aWNVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLnN0cmVhbUl0ZXJhdG9yQ29uc3RydWN0b3JdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX3N0cmluZ0ludGVycG9sYXRpb247CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHN0cmluZ0ludGVycG9sYXRpb24gewogICAgcmV0dXJuIF9zdHJpbmdJbnRlcnBvbGF0aW9uID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICBkeW5hbWljVXNlczogW1NlbGVjdG9ycy50b1N0cmluZ19dLAogICAgICAgIHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMuc3RyaW5nSW50ZXJwb2xhdGlvbkhlbHBlcl0sCiAgICAgICAgb3RoZXJJbXBhY3RzOiBbX25lZWRzU3RyaW5nKCdTdHJpbmdzIGFyZSBjcmVhdGVkLicpXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9zdHJpbmdKdXh0YXBvc2l0aW9uOwoKICBCYWNrZW5kSW1wYWN0IGdldCBzdHJpbmdKdXh0YXBvc2l0aW9uIHsKICAgIHJldHVybiBfc3RyaW5nSnV4dGFwb3NpdGlvbiA/Pz0gX25lZWRzU3RyaW5nKCdTdHJpbmcuY29uY2F0IGlzIHVzZWQuJyk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IGdldCBudWxsTGl0ZXJhbCA9PiBudWxsVmFsdWU7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGJvb2xMaXRlcmFsID0+IGJvb2xWYWx1ZXM7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGludExpdGVyYWwgPT4gaW50VmFsdWVzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBkb3VibGVMaXRlcmFsID0+IGRvdWJsZVZhbHVlczsKCiAgQmFja2VuZEltcGFjdCBnZXQgc3RyaW5nTGl0ZXJhbCA9PiBzdHJpbmdWYWx1ZXM7CgogIEJhY2tlbmRJbXBhY3QgX2NhdGNoU3RhdGVtZW50OwoKICBCYWNrZW5kSW1wYWN0IGdldCBjYXRjaFN0YXRlbWVudCB7CiAgICByZXR1cm4gX2NhdGNoU3RhdGVtZW50ID8/PSBuZXcgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5leGNlcHRpb25VbndyYXBwZXIKICAgIF0sIGluc3RhbnRpYXRlZENsYXNzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzUGxhaW5KYXZhU2NyaXB0T2JqZWN0Q2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc1Vua25vd25KYXZhU2NyaXB0T2JqZWN0Q2xhc3MKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfdGhyb3dFeHByZXNzaW9uOwoKICBCYWNrZW5kSW1wYWN0IGdldCB0aHJvd0V4cHJlc3Npb24gewogICAgcmV0dXJuIF90aHJvd0V4cHJlc3Npb24gPz89IG5ldyBCYWNrZW5kSW1wYWN0KAogICAgICAgIC8vIFdlIGRvbid0IGtub3cgYWhlYWQgb2YgdGltZSB3aGV0aGVyIHdlIHdpbGwgbmVlZCB0aGUgdGhyb3cgaW4gYQogICAgICAgIC8vIHN0YXRlbWVudCBjb250ZXh0IG9yIGFuIGV4cHJlc3Npb24gY29udGV4dCwgc28gd2UgcmVnaXN0ZXIgYm90aAogICAgICAgIC8vIGhlcmUsIGV2ZW4gdGhvdWdoIHdlIG1heSBub3QgbmVlZCB0aGUgdGhyb3dFeHByZXNzaW9uIGhlbHBlci4KICAgICAgICBzdGF0aWNVc2VzOiBbCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMud3JhcEV4Y2VwdGlvbkhlbHBlciwKICAgICAgICAgIF9jb21tb25FbGVtZW50cy50aHJvd0V4cHJlc3Npb25IZWxwZXIKICAgICAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2xhenlGaWVsZDsKCiAgQmFja2VuZEltcGFjdCBnZXQgbGF6eUZpZWxkIHsKICAgIHJldHVybiBfbGF6eUZpZWxkID8/PQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMuY3ljbGljVGhyb3dIZWxwZXJdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX3R5cGVMaXRlcmFsOwoKICBCYWNrZW5kSW1wYWN0IGdldCB0eXBlTGl0ZXJhbCB7CiAgICByZXR1cm4gX3R5cGVMaXRlcmFsID8/PSBuZXcgQmFja2VuZEltcGFjdChpbnN0YW50aWF0ZWRDbGFzc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy50eXBlTGl0ZXJhbENsYXNzCiAgICBdLCBzdGF0aWNVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5jcmVhdGVSdW50aW1lVHlwZSwKICAgICAgaWYgKF9uZXdSdGkpIF9jb21tb25FbGVtZW50cy50eXBlTGl0ZXJhbE1ha2VyLAogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9zdGFja1RyYWNlSW5DYXRjaDsKCiAgQmFja2VuZEltcGFjdCBnZXQgc3RhY2tUcmFjZUluQ2F0Y2ggewogICAgcmV0dXJuIF9zdGFja1RyYWNlSW5DYXRjaCA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgaW5zdGFudGlhdGVkQ2xhc3NlczogW19jb21tb25FbGVtZW50cy5zdGFja1RyYWNlSGVscGVyQ2xhc3NdLAogICAgICAgIHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMudHJhY2VGcm9tRXhjZXB0aW9uXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9zeW5jRm9ySW47CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHN5bmNGb3JJbiB7CiAgICByZXR1cm4gX3N5bmNGb3JJbiA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgLy8gVGhlIFNTQSBidWlsZGVyIHJlY29nbml6ZXMgY2VydGFpbiBmb3ItaW4gbG9vcHMgYW5kIGNhbiBnZW5lcmF0ZQogICAgICAgIC8vIGNhbGxzIHRvIHRocm93Q29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yLgogICAgICAgIHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMuY2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3JdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX3R5cGVWYXJpYWJsZUV4cHJlc3Npb247CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHR5cGVWYXJpYWJsZUV4cHJlc3Npb24gewogICAgcmV0dXJuIF90eXBlVmFyaWFibGVFeHByZXNzaW9uID8/PSBuZXcgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5zZXRSdW50aW1lVHlwZUluZm8sCiAgICAgIF9jb21tb25FbGVtZW50cy5nZXRSdW50aW1lVHlwZUluZm8sCiAgICAgIF9jb21tb25FbGVtZW50cy5jcmVhdGVSdW50aW1lVHlwZQogICAgXSwgb3RoZXJJbXBhY3RzOiBbCiAgICAgIGxpc3RWYWx1ZXMsCiAgICAgIGdldFJ1bnRpbWVUeXBlQXJndW1lbnQsCiAgICAgIF9uZWVkc0ludCgnTmVlZGVkIGZvciBhY2Nlc3NpbmcgYSB0eXBlIHZhcmlhYmxlIGxpdGVyYWwgb24gdGhpcy4nKQogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF90eXBlQ2hlY2s7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHR5cGVDaGVjayB7CiAgICByZXR1cm4gX3R5cGVDaGVjayA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qob3RoZXJJbXBhY3RzOiBbYm9vbFZhbHVlc10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfZ2VuZXJpY1R5cGVDaGVjazsKCiAgQmFja2VuZEltcGFjdCBnZXQgZ2VuZXJpY1R5cGVDaGVjayB7CiAgICByZXR1cm4gX2dlbmVyaWNUeXBlQ2hlY2sgPz89IG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmNoZWNrU3VidHlwZSwKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW52ZXN0aWdhdGUgd2h5IHRoaXMgaXMgbmVlZGVkLgogICAgICBfY29tbW9uRWxlbWVudHMuc2V0UnVudGltZVR5cGVJbmZvLAogICAgICBfY29tbW9uRWxlbWVudHMuZ2V0UnVudGltZVR5cGVJbmZvCiAgICBdLCBvdGhlckltcGFjdHM6IFsKICAgICAgbGlzdFZhbHVlcywKICAgICAgZ2V0UnVudGltZVR5cGVBcmd1bWVudAogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9nZW5lcmljSXNDaGVjazsKCiAgQmFja2VuZEltcGFjdCBnZXQgZ2VuZXJpY0lzQ2hlY2sgewogICAgcmV0dXJuIF9nZW5lcmljSXNDaGVjayA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qob3RoZXJJbXBhY3RzOiBbaW50VmFsdWVzXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF90eXBlVmFyaWFibGVUeXBlQ2hlY2s7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHR5cGVWYXJpYWJsZVR5cGVDaGVjayB7CiAgICByZXR1cm4gX3R5cGVWYXJpYWJsZVR5cGVDaGVjayA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgc3RhdGljVXNlczogW19jb21tb25FbGVtZW50cy5jaGVja1N1YnR5cGVPZlJ1bnRpbWVUeXBlXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9mdW5jdGlvblR5cGVDaGVjazsKCiAgQmFja2VuZEltcGFjdCBnZXQgZnVuY3Rpb25UeXBlQ2hlY2sgewogICAgcmV0dXJuIF9mdW5jdGlvblR5cGVDaGVjayA/Pz0KICAgICAgICBuZXcgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbLypoZWxwZXJzLmZ1bmN0aW9uVHlwZVRlc3RNZXRhSGVscGVyKi9dKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2Z1dHVyZU9yVHlwZUNoZWNrOwoKICBCYWNrZW5kSW1wYWN0IGdldCBmdXR1cmVPclR5cGVDaGVjayB7CiAgICByZXR1cm4gX2Z1dHVyZU9yVHlwZUNoZWNrID8/PQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0KHN0YXRpY1VzZXM6IFtfY29tbW9uRWxlbWVudHMuZnV0dXJlT3JUZXN0XSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9uYXRpdmVUeXBlQ2hlY2s7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG5hdGl2ZVR5cGVDaGVjayB7CiAgICByZXR1cm4gX25hdGl2ZVR5cGVDaGVjayA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICAvLyBXZSB3aWxsIG5lZWQgdG8gYWRkIHRoZSAiJGlzIiBhbmQgIiRhcyIgcHJvcGVydGllcyBvbiB0aGUKICAgICAgLy8gSmF2YVNjcmlwdCBvYmplY3QgcHJvdG90eXBlLCBzbyB3ZSBtYWtlIHN1cmUKICAgICAgLy8gWzpkZWZpbmVQcm9wZXJ0eTpdIGlzIGNvbXBpbGVkLgogICAgICBfY29tbW9uRWxlbWVudHMuZGVmaW5lUHJvcGVydHkKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfY2xvc3VyZTsKCiAgQmFja2VuZEltcGFjdCBnZXQgY2xvc3VyZSB7CiAgICByZXR1cm4gX2Nsb3N1cmUgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3QoaW5zdGFudGlhdGVkQ2xhc3NlczogW19jb21tb25FbGVtZW50cy5mdW5jdGlvbkNsYXNzXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9pbnRlcmNlcHRvclVzZTsKCiAgQmFja2VuZEltcGFjdCBnZXQgaW50ZXJjZXB0b3JVc2UgewogICAgcmV0dXJuIF9pbnRlcmNlcHRvclVzZSA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgc3RhdGljVXNlczogWwogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldE5hdGl2ZUludGVyY2VwdG9yTWV0aG9kCiAgICAgICAgXSwKICAgICAgICBpbnN0YW50aWF0ZWRDbGFzc2VzOiBbCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3MsCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMuanNQbGFpbkphdmFTY3JpcHRPYmplY3RDbGFzcywKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzCiAgICAgICAgXSwKICAgICAgICBmZWF0dXJlczogbmV3IEVudW1TZXQ8QmFja2VuZEZlYXR1cmU+LmZyb21WYWx1ZXMoWwogICAgICAgICAgQmFja2VuZEZlYXR1cmUubmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHksCiAgICAgICAgICBCYWNrZW5kRmVhdHVyZS5uZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnCiAgICAgICAgXSwgZml4ZWQ6IHRydWUpKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX251bUNsYXNzZXM7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG51bUNsYXNzZXMgewogICAgcmV0dXJuIF9udW1DbGFzc2VzID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICAvLyBUaGUgYmFja2VuZCB3aWxsIHRyeSB0byBvcHRpbWl6ZSBudW1iZXIgb3BlcmF0aW9ucyBhbmQgdXNlIHRoZQogICAgICAgIC8vIGBpYWVgIGhlbHBlciBkaXJlY3RseS4KICAgICAgICBnbG9iYWxVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLnRocm93SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9saXN0T3JTdHJpbmdDbGFzc2VzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBsaXN0T3JTdHJpbmdDbGFzc2VzIHsKICAgIHJldHVybiBfbGlzdE9yU3RyaW5nQ2xhc3NlcyA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgLy8gVGhlIGJhY2tlbmQgd2lsbCB0cnkgdG8gb3B0aW1pemUgYXJyYXkgYW5kIHN0cmluZyBhY2Nlc3MgYW5kIHVzZSB0aGUKICAgICAgICAvLyBgaW9vcmVgIGFuZCBgaWFlYCBfY29tbW9uRWxlbWVudHMgZGlyZWN0bHkuCiAgICAgICAgZ2xvYmFsVXNlczogWwogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnRocm93SW5kZXhPdXRPZlJhbmdlRXhjZXB0aW9uLAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnRocm93SWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9mdW5jdGlvbkNsYXNzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBmdW5jdGlvbkNsYXNzIHsKICAgIHJldHVybiBfZnVuY3Rpb25DbGFzcyA/Pz0KICAgICAgICBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxDbGFzc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmNsb3N1cmVDbGFzc10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbWFwQ2xhc3M7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG1hcENsYXNzIHsKICAgIHJldHVybiBfbWFwQ2xhc3MgPz89IG5ldyBCYWNrZW5kSW1wYWN0KAogICAgICAgIC8vIFRoZSBiYWNrZW5kIHdpbGwgdXNlIGEgbGl0ZXJhbCBsaXN0IHRvIGluaXRpYWxpemUgdGhlIGVudHJpZXMKICAgICAgICAvLyBvZiB0aGUgbWFwLgogICAgICAgIGdsb2JhbENsYXNzZXM6IFsKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5saXN0Q2xhc3MsCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMubWFwTGl0ZXJhbENsYXNzCiAgICAgICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9zZXRDbGFzczsKCiAgQmFja2VuZEltcGFjdCBnZXQgc2V0Q2xhc3MgPT4gX3NldENsYXNzID8/PSBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxDbGFzc2VzOiBbCiAgICAgICAgLy8gVGhlIGJhY2tlbmQgd2lsbCB1c2UgYSBsaXRlcmFsIGxpc3QgdG8gaW5pdGlhbGl6ZSB0aGUgZW50cmllcwogICAgICAgIC8vIG9mIHRoZSBzZXQuCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcywKICAgICAgICBfY29tbW9uRWxlbWVudHMuc2V0TGl0ZXJhbENsYXNzLAogICAgICBdKTsKCiAgQmFja2VuZEltcGFjdCBfYm91bmRDbG9zdXJlQ2xhc3M7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGJvdW5kQ2xvc3VyZUNsYXNzIHsKICAgIHJldHVybiBfYm91bmRDbG9zdXJlQ2xhc3MgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3QoZ2xvYmFsQ2xhc3NlczogW19jb21tb25FbGVtZW50cy5ib3VuZENsb3N1cmVDbGFzc10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbmF0aXZlT3JFeHRlbmRzQ2xhc3M7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG5hdGl2ZU9yRXh0ZW5kc0NsYXNzIHsKICAgIHJldHVybiBfbmF0aXZlT3JFeHRlbmRzQ2xhc3MgPz89IG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbFVzZXM6IFsKICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldE5hdGl2ZUludGVyY2VwdG9yTWV0aG9kCiAgICBdLCBnbG9iYWxDbGFzc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5qc0ludGVyY2VwdG9yQ2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRPYmplY3RDbGFzcywKICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzUGxhaW5KYXZhU2NyaXB0T2JqZWN0Q2xhc3MsCiAgICAgIF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX21hcExpdGVyYWxDbGFzczsKCiAgQmFja2VuZEltcGFjdCBnZXQgbWFwTGl0ZXJhbENsYXNzIHsKICAgIHJldHVybiBfbWFwTGl0ZXJhbENsYXNzID8/PSBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5tYXBMaXRlcmFsQ29uc3RydWN0b3IsCiAgICAgIF9jb21tb25FbGVtZW50cy5tYXBMaXRlcmFsQ29uc3RydWN0b3JFbXB0eSwKICAgICAgX2NvbW1vbkVsZW1lbnRzLm1hcExpdGVyYWxVbnR5cGVkTWFrZXIsCiAgICAgIF9jb21tb25FbGVtZW50cy5tYXBMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXIKICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfc2V0TGl0ZXJhbENsYXNzOwoKICBCYWNrZW5kSW1wYWN0IGdldCBzZXRMaXRlcmFsQ2xhc3MgPT4KICAgICAgX3NldExpdGVyYWxDbGFzcyA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoZ2xvYmFsVXNlczogWwogICAgICAgIF9jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsQ29uc3RydWN0b3IsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNldExpdGVyYWxDb25zdHJ1Y3RvckVtcHR5LAogICAgICAgIF9jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsVW50eXBlZE1ha2VyLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXIsCiAgICAgIF0pOwoKICBCYWNrZW5kSW1wYWN0IF9jbG9zdXJlQ2xhc3M7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGNsb3N1cmVDbGFzcyB7CiAgICByZXR1cm4gX2Nsb3N1cmVDbGFzcyA/Pz0KICAgICAgICBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmNsb3N1cmVGcm9tVGVhck9mZl0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbGlzdENsYXNzZXM7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGxpc3RDbGFzc2VzIHsKICAgIHJldHVybiBfbGlzdENsYXNzZXMgPz89IG5ldyBCYWNrZW5kSW1wYWN0KAogICAgICAgIC8vIExpdGVyYWwgbGlzdHMgY2FuIGJlIHRyYW5zbGF0ZWQgaW50byBjYWxscyB0byB0aGVzZSBmdW5jdGlvbnM6CiAgICAgICAgZ2xvYmFsVXNlczogWwogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlUeXBlZENvbnN0cnVjdG9yLAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNldFJ1bnRpbWVUeXBlSW5mbywKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5nZXRUeXBlQXJndW1lbnRCeUluZGV4CiAgICAgICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9qc0luZGV4aW5nQmVoYXZpb3I7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IGpzSW5kZXhpbmdCZWhhdmlvciB7CiAgICByZXR1cm4gX2pzSW5kZXhpbmdCZWhhdmlvciA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoCiAgICAgICAgLy8gVGhlc2UgdHdvIF9jb21tb25FbGVtZW50cyBhcmUgdXNlZCBieSB0aGUgZW1pdHRlciBhbmQgdGhlIGNvZGVnZW4uCiAgICAgICAgLy8gQmVjYXVzZSB3ZSBjYW5ub3QgZW5xdWV1ZSBlbGVtZW50cyBhdCB0aGUgdGltZSBvZiBlbWlzc2lvbiwKICAgICAgICAvLyB3ZSBtYWtlIHN1cmUgdGhleSBhcmUgYWx3YXlzIGdlbmVyYXRlZC4KICAgICAgICBnbG9iYWxVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmlzSnNJbmRleGFibGVdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX3RyYWNlSGVscGVyOwoKICBCYWNrZW5kSW1wYWN0IGdldCB0cmFjZUhlbHBlciB7CiAgICByZXR1cm4gX3RyYWNlSGVscGVyID8/PQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbFVzZXM6IFtfY29tbW9uRWxlbWVudHMudHJhY2VIZWxwZXJdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2Fzc2VydFVucmVhY2hhYmxlOwoKICBCYWNrZW5kSW1wYWN0IGdldCBhc3NlcnRVbnJlYWNoYWJsZSB7CiAgICByZXR1cm4gX2Fzc2VydFVucmVhY2hhYmxlID8/PSBuZXcgQmFja2VuZEltcGFjdCgKICAgICAgICBnbG9iYWxVc2VzOiBbX2NvbW1vbkVsZW1lbnRzLmFzc2VydFVucmVhY2hhYmxlTWV0aG9kXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9ydW50aW1lVHlwZVN1cHBvcnQ7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHJ1bnRpbWVUeXBlU3VwcG9ydCB7CiAgICByZXR1cm4gX3J1bnRpbWVUeXBlU3VwcG9ydCA/Pz0gbmV3IEJhY2tlbmRJbXBhY3QoZ2xvYmFsQ2xhc3NlczogWwogICAgICBfY29tbW9uRWxlbWVudHMubGlzdENsYXNzCiAgICBdLCBnbG9iYWxVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5zZXRSdW50aW1lVHlwZUluZm8sCiAgICAgIF9jb21tb25FbGVtZW50cy5nZXRSdW50aW1lVHlwZUluZm8KICAgIF0sIG90aGVySW1wYWN0czogWwogICAgICBnZXRSdW50aW1lVHlwZUFyZ3VtZW50LAogICAgICBjb21wdXRlU2lnbmF0dXJlCiAgICBdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX2RlZmVycmVkTG9hZGluZzsKCiAgQmFja2VuZEltcGFjdCBnZXQgZGVmZXJyZWRMb2FkaW5nIHsKICAgIHJldHVybiBfZGVmZXJyZWRMb2FkaW5nID8/PQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbFVzZXM6IFtfY29tbW9uRWxlbWVudHMuY2hlY2tEZWZlcnJlZElzTG9hZGVkXSwKICAgICAgICAgICAgLy8gQWxzbyByZWdpc3RlciB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhpcyBtZXRob2QuCiAgICAgICAgICAgIGdsb2JhbENsYXNzZXM6IFtfY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3NdKTsKICB9CgogIEJhY2tlbmRJbXBhY3QgX25vU3VjaE1ldGhvZFN1cHBvcnQ7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IG5vU3VjaE1ldGhvZFN1cHBvcnQgewogICAgcmV0dXJuIF9ub1N1Y2hNZXRob2RTdXBwb3J0ID8/PSBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxVc2VzOiBbCiAgICAgIF9jb21tb25FbGVtZW50cy5jcmVhdGVJbnZvY2F0aW9uTWlycm9yLAogICAgICBfY29tbW9uRWxlbWVudHMuY3JlYXRlVW5tYW5nbGVkSW52b2NhdGlvbk1pcnJvcgogICAgXSwgZHluYW1pY1VzZXM6IFsKICAgICAgU2VsZWN0b3JzLm5vU3VjaE1ldGhvZF8KICAgIF0pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfbG9hZExpYnJhcnk7CgogIC8vLyBCYWNrZW5kIGltcGFjdCBmb3IgYWNjZXNzaW5nIGEgYGxvYWRMaWJyYXJ5YCBmdW5jdGlvbiBvbiBhIGRlZmVycmVkCiAgLy8vIHByZWZpeC4KICBCYWNrZW5kSW1wYWN0IGdldCBsb2FkTGlicmFyeSB7CiAgICByZXR1cm4gX2xvYWRMaWJyYXJ5ID8/PSBuZXcgQmFja2VuZEltcGFjdChnbG9iYWxVc2VzOiBbCiAgICAgIC8vIFRPRE8ocmVkZW1wdGlvbik6IGRlbGV0ZSB3cmFwcGVyIHdoZW4gd2Ugc3Vuc2V0IHRoZSBvbGQgZnJvbnRlbmQuCiAgICAgIF9jb21tb25FbGVtZW50cy5sb2FkTGlicmFyeVdyYXBwZXIsCiAgICAgIF9jb21tb25FbGVtZW50cy5sb2FkRGVmZXJyZWRMaWJyYXJ5LAogICAgXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF9tZW1iZXJDbG9zdXJlOwoKICAvLy8gQmFja2VuZCBpbXBhY3QgZm9yIHBlcmZvcm1pbmcgbWVtYmVyIGNsb3N1cml6YXRpb24uCiAgQmFja2VuZEltcGFjdCBnZXQgbWVtYmVyQ2xvc3VyZSB7CiAgICByZXR1cm4gX21lbWJlckNsb3N1cmUgPz89CiAgICAgICAgbmV3IEJhY2tlbmRJbXBhY3QoZ2xvYmFsQ2xhc3NlczogW19jb21tb25FbGVtZW50cy5ib3VuZENsb3N1cmVDbGFzc10pOwogIH0KCiAgQmFja2VuZEltcGFjdCBfc3RhdGljQ2xvc3VyZTsKCiAgLy8vIEJhY2tlbmQgaW1wYWN0IGZvciBwZXJmb3JtaW5nIGNsb3N1cml6YXRpb24gb2YgYSB0b3AtbGV2ZWwgb3Igc3RhdGljCiAgLy8vIGZ1bmN0aW9uLgogIEJhY2tlbmRJbXBhY3QgZ2V0IHN0YXRpY0Nsb3N1cmUgewogICAgcmV0dXJuIF9zdGF0aWNDbG9zdXJlID8/PQogICAgICAgIG5ldyBCYWNrZW5kSW1wYWN0KGdsb2JhbENsYXNzZXM6IFtfY29tbW9uRWxlbWVudHMuY2xvc3VyZUNsYXNzXSk7CiAgfQoKICBCYWNrZW5kSW1wYWN0IF90eXBlVmFyaWFibGVNaXJyb3I7CgogIC8vLyBCYWNrZW5kIGltcGFjdCBmb3IgdHlwZSB2YXJpYWJsZXMgdGhyb3VnaCBtaXJyb3JzLgogIEJhY2tlbmRJbXBhY3QgZ2V0IHR5cGVWYXJpYWJsZU1pcnJvciB7CiAgICByZXR1cm4gX3R5cGVWYXJpYWJsZU1pcnJvciA/Pz0gbmV3IEJhY2tlbmRJbXBhY3Qoc3RhdGljVXNlczogWwogICAgICBfY29tbW9uRWxlbWVudHMudHlwZVZhcmlhYmxlQ29uc3RydWN0b3IsCiAgICAgIF9jb21tb25FbGVtZW50cy5jcmVhdGVSdW50aW1lVHlwZQogICAgXSwgaW5zdGFudGlhdGVkQ2xhc3NlczogWwogICAgICBfY29tbW9uRWxlbWVudHMudHlwZVZhcmlhYmxlQ2xhc3MKICAgIF0pOwogIH0KCiAgTWFwPGludCwgQmFja2VuZEltcGFjdD4gX2dlbmVyaWNJbnN0YW50aWF0aW9uID0gPGludCwgQmFja2VuZEltcGFjdD57fTsKCiAgQmFja2VuZEltcGFjdCBnZXRHZW5lcmljSW5zdGFudGlhdGlvbihpbnQgdHlwZUFyZ3VtZW50Q291bnQpID0+CiAgICAgIF9nZW5lcmljSW5zdGFudGlhdGlvblt0eXBlQXJndW1lbnRDb3VudF0gPz89CiAgICAgICAgICBuZXcgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldEluc3RhbnRpYXRlRnVuY3Rpb24odHlwZUFyZ3VtZW50Q291bnQpLAogICAgICAgIF9jb21tb25FbGVtZW50cy5pbnN0YW50aWF0ZWRHZW5lcmljRnVuY3Rpb25UeXBlLAogICAgICAgIF9jb21tb25FbGVtZW50cy5leHRyYWN0RnVuY3Rpb25UeXBlT2JqZWN0RnJvbUludGVybmFsLAogICAgICBdLCBpbnN0YW50aWF0ZWRDbGFzc2VzOiBbCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldEluc3RhbnRpYXRpb25DbGFzcyh0eXBlQXJndW1lbnRDb3VudCksCiAgICAgIF0pOwoKICAvLy8gQmFja2VuZCBpbXBhY3QgZm9yIC0tZXhwZXJpbWVudC1uZXctcnRpLgogIExpc3Q8QmFja2VuZEltcGFjdD4gbmV3UnRpSW1wYWN0cyhTdHJpbmcgd2hhdCkgewogICAgaWYgKCFfbmV3UnRpKSByZXR1cm4gW107CiAgICAvLyBUT0RPKHNyYSk6IFNwbGl0IGludG8gcmVmaW5lZCBpbXBhY3RzLgogICAgcmV0dXJuIFsKICAgICAgQmFja2VuZEltcGFjdChzdGF0aWNVc2VzOiBbCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmZpbmRUeXBlLAogICAgICAgIF9jb21tb25FbGVtZW50cy5pbnN0YW5jZVR5cGUsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnJ0aUV2YWxNZXRob2QsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnJ0aUJpbmRNZXRob2QsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdlbmVyYWxJc1Rlc3RJbXBsZW1lbnRhdGlvbiwKICAgICAgICBfY29tbW9uRWxlbWVudHMuZ2VuZXJhbEFzQ2hlY2tJbXBsZW1lbnRhdGlvbiwKICAgICAgICBfY29tbW9uRWxlbWVudHMuZ2VuZXJhbFR5cGVDaGVja0ltcGxlbWVudGF0aW9uLAogICAgICAgIC8vIFNwZWNpYWxpemVkIGNoZWNrcy4KICAgICAgICBfY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRJc0Jvb2wsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQXNCb29sTnVsbGFibGUsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQ2hlY2tCb29sTnVsbGFibGUsCiAgICAgICAgLy8gbm8gc3BlY2lhbGl6ZWRJc0RvdWJsZS4KICAgICAgICBfY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRBc0RvdWJsZU51bGxhYmxlLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zcGVjaWFsaXplZENoZWNrRG91YmxlTnVsbGFibGUsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkSXNJbnQsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQXNJbnROdWxsYWJsZSwKICAgICAgICBfY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRDaGVja0ludE51bGxhYmxlLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zcGVjaWFsaXplZElzTnVtLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zcGVjaWFsaXplZEFzTnVtTnVsbGFibGUsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQ2hlY2tOdW1OdWxsYWJsZSwKICAgICAgICBfY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRJc1N0cmluZywKICAgICAgICBfY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRBc1N0cmluZ051bGxhYmxlLAogICAgICAgIF9jb21tb25FbGVtZW50cy5zcGVjaWFsaXplZENoZWNrU3RyaW5nTnVsbGFibGUsCiAgICAgIF0sIGdsb2JhbENsYXNzZXM6IFsKICAgICAgICBfY29tbW9uRWxlbWVudHMuY2xvc3VyZUNsYXNzLCAvLyBpbnN0YW5jZU9yRnVuY3Rpb25UeXBlIHVzZXMgdGhpcy4KICAgICAgXSwgZ2xvYmFsVXNlczogW10pCiAgICBdOwogIH0KCiAgQmFja2VuZEltcGFjdCBfcnRpQWRkUnVsZXM7CgogIEJhY2tlbmRJbXBhY3QgZ2V0IHJ0aUFkZFJ1bGVzID0+IF9ydGlBZGRSdWxlcyA/Pz0gQmFja2VuZEltcGFjdCgKICAgICAgZ2xvYmFsVXNlczogW19jb21tb25FbGVtZW50cy5ydGlBZGRSdWxlc01ldGhvZF0sCiAgICAgIG90aGVySW1wYWN0czogW19uZWVkc1N0cmluZygnTmVlZGVkIHRvIGVuY29kZSB0aGUgbmV3IFJUSSBydWxlc2V0LicpXSk7Cn0KgysATk48ASMBH0o0JCQnQh8fATwWJiQCAS4WKSkkLy8pKisBFzIxLDc3MTJRIwErMQFESTcaBAFAPS8zIRlHBjMhGUcGLSAZSQZAGUkGMypKBi0qSgY2SgYEAgE+FygWATYBKQEtRzkuLj8EASMBJ0EqKigvFxEIBAEkAShLJCQIBAEcAVAqKywzIi0KAR8BIz0mIS0IBAEgASQ+JyojITEgCAQBKQEtRyYnMwgEAS0BMT5MSAQBIwEnIUsEARoBHjgpMAQBJAEoQikXSVFOQQgEAR8BIx1RBAEcASBDIiolJSUkCAQBLAEvAR0BIRtPBAEcASAaTwQBHQEhPiQrKS4vCAQBJAEoQikXSRMIBAEoASxGLBdJEwgEASQBKEIuKRdQS0cIBAElASlMKC0uLwgEASUBKkcuGRsKASQBKDVDBAEeASIvSkAEATMrRBYEATQsRBcEATYuRBkEAScBKyVHBAEkASg1UAQBHQEhLkIEASYBKjcsQT8EASYBKkwEAS4BLwEtATMBMwEhASU/KR40NQgEASIBJjNLS0kWLzAMBAEcASAaTAQBHgEiRScVKTUIBAEkASg1RjsEARwBIC1MNkkEASkBLUcqKigXEh5JCAQBHAEgSQQBIwEnQSQ+KikXEh0IBAEhASVNBAEoASw5QgQBJAEoIlEEASQBKCJHBAEiASZAQzYpJQgEARoBHhhRBAEhASUyFjULHzM4NAs7OzwaBAEdASEuSiJGBAEmASo3UDcWOTgMBAEgASQeSgQBGwEfLEkXGSUqDAQBGwFRSRcjKQoBJAEoIk8EAScBK0UxGCovNDAIBAEiASZALTIuMggEASIBJzsvNDA1CgEfASMdTQQBHgEiL0oWMy4xDAQBJQEpNk5HMzYEAR4BIhxGBAEkASg1QAQBJQEpRiAVKikXHhcIBAEiASYgT087BAEmASpELjYWHggEAR4BSg4iPEsqKwgEASABOiQeTwQBIAFLECQeSgQBJQE5KUMvKB4oCAQBSgFCMypDOT8gQgoBLzMdLg0iIiYnJzU2OB8rMzYjNTgqMjUqMjUtNTgaSxkHBAEeAUM3TgIBM3BhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvYmFja2VuZF9pbXBhY3QuZGFydD5zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL2NvZGVnZW5fbGlzdGVuZXIuZGFydLE4Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5iYWNrZW5kLmNvZGVnZW5fbGlzdGVuZXI7CgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IElkZW50aWZpZXJzOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzLCBFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbnF1ZXVlLmRhcnQnIHNob3cgRW5xdWV1ZXIsIEVucXVldWVyTGlzdGVuZXI7CmltcG9ydCAnLi4vbmF0aXZlL2VucXVldWUuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CmltcG9ydCAnLi4vdW5pdmVyc2UvdXNlLmRhcnQnIHNob3cgU3RhdGljVXNlLCBUeXBlVXNlOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0JwogICAgc2hvdyBXb3JsZEltcGFjdCwgV29ybGRJbXBhY3RCdWlsZGVyLCBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsOwppbXBvcnQgJ2JhY2tlbmRfaW1wYWN0LmRhcnQnOwppbXBvcnQgJ2JhY2tlbmRfdXNhZ2UuZGFydCc7CmltcG9ydCAnY3VzdG9tX2VsZW1lbnRzX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJ3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0JzsKCmNsYXNzIENvZGVnZW5FbnF1ZXVlckxpc3RlbmVyIGV4dGVuZHMgRW5xdWV1ZXJMaXN0ZW5lciB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBCYWNrZW5kSW1wYWN0cyBfaW1wYWN0czsKCiAgZmluYWwgQmFja2VuZFVzYWdlIF9iYWNrZW5kVXNhZ2U7CiAgZmluYWwgUnVudGltZVR5cGVzTmVlZCBfcnRpTmVlZDsKCiAgZmluYWwgQ3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMgX2N1c3RvbUVsZW1lbnRzQW5hbHlzaXM7CgogIGZpbmFsIE5hdGl2ZUNvZGVnZW5FbnF1ZXVlciBfbmF0aXZlRW5xdWV1ZXI7CgogIGJvb2wgX2lzTm9TdWNoTWV0aG9kVXNlZCA9IGZhbHNlOwogIGJvb2wgX2lzTmV3UnRpVXNlZCA9IGZhbHNlOwoKICBDb2RlZ2VuRW5xdWV1ZXJMaXN0ZW5lcigKICAgICAgdGhpcy5fb3B0aW9ucywKICAgICAgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LAogICAgICB0aGlzLl9jb21tb25FbGVtZW50cywKICAgICAgdGhpcy5faW1wYWN0cywKICAgICAgdGhpcy5fYmFja2VuZFVzYWdlLAogICAgICB0aGlzLl9ydGlOZWVkLAogICAgICB0aGlzLl9jdXN0b21FbGVtZW50c0FuYWx5c2lzLAogICAgICB0aGlzLl9uYXRpdmVFbnF1ZXVlcik7CgogIEBvdmVycmlkZQogIFdvcmxkSW1wYWN0IHJlZ2lzdGVyQ2xvc3VyaXplZE1lbWJlcihGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIGltcGFjdEJ1aWxkZXIgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgaW1wYWN0QnVpbGRlcgogICAgICAgIC5hZGRJbXBhY3QoX2ltcGFjdHMubWVtYmVyQ2xvc3VyZS5jcmVhdGVJbXBhY3QoX2VsZW1lbnRFbnZpcm9ubWVudCkpOwogICAgRnVuY3Rpb25UeXBlIHR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShlbGVtZW50KTsKICAgIGlmICh0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcyAmJiBfcnRpTmVlZC5tZXRob2ROZWVkc1NpZ25hdHVyZShlbGVtZW50KSkgewogICAgICBpbXBhY3RCdWlsZGVyLmFkZEltcGFjdChfcmVnaXN0ZXJDb21wdXRlU2lnbmF0dXJlKCkpOwogICAgfQogICAgcmV0dXJuIGltcGFjdEJ1aWxkZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCByZWdpc3RlckdldE9mU3RhdGljRnVuY3Rpb24oKSB7CiAgICByZXR1cm4gX2ltcGFjdHMuc3RhdGljQ2xvc3VyZS5jcmVhdGVJbXBhY3QoX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgfQoKICBXb3JsZEltcGFjdCBfcmVnaXN0ZXJDb21wdXRlU2lnbmF0dXJlKCkgewogICAgcmV0dXJuIF9pbXBhY3RzLmNvbXB1dGVTaWduYXR1cmUuY3JlYXRlSW1wYWN0KF9lbGVtZW50RW52aXJvbm1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlckluc3RhbnRpYXRlZFR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlLAogICAgICB7Ym9vbCBpc0dsb2JhbDogZmFsc2UsIGJvb2wgbmF0aXZlVXNhZ2U6IGZhbHNlfSkgewogICAgaWYgKG5hdGl2ZVVzYWdlKSB7CiAgICAgIF9uYXRpdmVFbnF1ZXVlci5vbkluc3RhbnRpYXRlZFR5cGUodHlwZSk7CiAgICB9CiAgfQoKICAvLy8gQ29tcHV0ZXMgdGhlIFtXb3JsZEltcGFjdF0gb2YgY2FsbGluZyBbbWFpbk1ldGhvZF0gYXMgdGhlIGVudHJ5IHBvaW50LgogIFdvcmxkSW1wYWN0IF9jb21wdXRlTWFpbkltcGFjdChGdW5jdGlvbkVudGl0eSBtYWluTWV0aG9kKSB7CiAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIG1haW5JbXBhY3QgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbWFpbk1ldGhvZC5wYXJhbWV0ZXJTdHJ1Y3R1cmUuY2FsbFN0cnVjdHVyZTsKICAgIGlmIChjYWxsU3RydWN0dXJlLmFyZ3VtZW50Q291bnQgPiAwKSB7CiAgICAgIF9pbXBhY3RzLm1haW5XaXRoQXJndW1lbnRzCiAgICAgICAgICAucmVnaXN0ZXJJbXBhY3QobWFpbkltcGFjdCwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICAgIG1haW5JbXBhY3QucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgICBuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZShtYWluTWV0aG9kLCBjYWxsU3RydWN0dXJlKSk7CiAgICB9CiAgICBpZiAobWFpbk1ldGhvZC5pc0dldHRlcikgewogICAgICBtYWluSW1wYWN0LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljR2V0KG1haW5NZXRob2QpKTsKICAgIH0gZWxzZSB7CiAgICAgIG1haW5JbXBhY3QucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgICBuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZShtYWluTWV0aG9kLCBDYWxsU3RydWN0dXJlLk5PX0FSR1MpKTsKICAgIH0KICAgIHJldHVybiBtYWluSW1wYWN0OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBvblF1ZXVlT3BlbigKICAgICAgRW5xdWV1ZXIgZW5xdWV1ZXIsIEZ1bmN0aW9uRW50aXR5IG1haW5NZXRob2QsIEl0ZXJhYmxlPFVyaT4gbGlicmFyaWVzKSB7CiAgICBlbnF1ZXVlci5hcHBseUltcGFjdChfbmF0aXZlRW5xdWV1ZXIucHJvY2Vzc05hdGl2ZUNsYXNzZXMobGlicmFyaWVzKSk7CiAgICBpZiAobWFpbk1ldGhvZCAhPSBudWxsKSB7CiAgICAgIGVucXVldWVyLmFwcGx5SW1wYWN0KF9jb21wdXRlTWFpbkltcGFjdChtYWluTWV0aG9kKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9uUXVldWVFbXB0eShFbnF1ZXVlciBlbnF1ZXVlciwgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IHJlY2VudENsYXNzZXMpIHsKICAgIC8vIEFkZCBlbGVtZW50cyB1c2VkIHN5bnRoZXRpY2FsbHksIHRoYXQgaXMsIHRocm91Z2ggZmVhdHVyZXMgcmF0aGVyIHRoYW4KICAgIC8vIHN5bnRheCwgZm9yIGluc3RhbmNlIGN1c3RvbSBlbGVtZW50cy4KICAgIC8vCiAgICAvLyBSZXR1cm4gZWFybHkgaWYgYW55IGVsZW1lbnRzIGFyZSBhZGRlZCB0byBhdm9pZCBjb3VudGluZyB0aGUgZWxlbWVudHMgYXMKICAgIC8vIGR1ZSB0byBtaXJyb3JzLgogICAgZW5xdWV1ZXIuYXBwbHlJbXBhY3QoX2N1c3RvbUVsZW1lbnRzQW5hbHlzaXMuZmx1c2goKSk7CgogICAgaWYgKF9iYWNrZW5kVXNhZ2UuaXNOb1N1Y2hNZXRob2RVc2VkICYmICFfaXNOb1N1Y2hNZXRob2RVc2VkKSB7CiAgICAgIGVucXVldWVyLmFwcGx5SW1wYWN0KAogICAgICAgICAgX2ltcGFjdHMubm9TdWNoTWV0aG9kU3VwcG9ydC5jcmVhdGVJbXBhY3QoX2VsZW1lbnRFbnZpcm9ubWVudCkpOwogICAgICBfaXNOb1N1Y2hNZXRob2RVc2VkID0gdHJ1ZTsKICAgIH0KCiAgICAvLyBUT0RPKGZpc2h5dGhlZmlzaCk6IEF2b2lkIHJlZ2lzdGVyaW5nIHVubmVjZXNzYXJ5IGltcGFjdHMuCiAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSAmJiAhX2lzTmV3UnRpVXNlZCkgewogICAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIG5ld1J0aUltcGFjdCA9IG5ldyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CiAgICAgIG5ld1J0aUltcGFjdC5yZWdpc3RlclN0YXRpY1VzZShTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnJ0aUFkZFJ1bGVzTWV0aG9kLCBDYWxsU3RydWN0dXJlLlRXT19BUkdTKSk7CiAgICAgIGVucXVldWVyLmFwcGx5SW1wYWN0KG5ld1J0aUltcGFjdCk7CiAgICAgIF9pc05ld1J0aVVzZWQgPSB0cnVlOwogICAgfQoKICAgIGlmICghZW5xdWV1ZXIucXVldWVJc0VtcHR5KSByZXR1cm4gZmFsc2U7CgogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9uUXVldWVDbG9zZWQoKSB7fQoKICAvLy8gQWRkcyB0aGUgaW1wYWN0IG9mIFtjb25zdGFudF0gdG8gW2ltcGFjdEJ1aWxkZXJdLgogIHZvaWQgX2NvbXB1dGVJbXBhY3RGb3JDb21waWxlVGltZUNvbnN0YW50KENvbnN0YW50VmFsdWUgY29uc3RhbnQsCiAgICAgIFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyLCBTZXQ8Q29uc3RhbnRWYWx1ZT4gdmlzaXRlZCkgewogICAgaWYgKHZpc2l0ZWQuYWRkKGNvbnN0YW50KSkgewogICAgICBfY29tcHV0ZUltcGFjdEZvckNvbXBpbGVUaW1lQ29uc3RhbnRJbnRlcm5hbChjb25zdGFudCwgaW1wYWN0QnVpbGRlcik7CgogICAgICBmb3IgKENvbnN0YW50VmFsdWUgZGVwZW5kZW5jeSBpbiBjb25zdGFudC5nZXREZXBlbmRlbmNpZXMoKSkgewogICAgICAgIF9jb21wdXRlSW1wYWN0Rm9yQ29tcGlsZVRpbWVDb25zdGFudCgKICAgICAgICAgICAgZGVwZW5kZW5jeSwgaW1wYWN0QnVpbGRlciwgdmlzaXRlZCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX2NvbXB1dGVJbXBhY3RGb3JDb21waWxlVGltZUNvbnN0YW50SW50ZXJuYWwoCiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gY29uc3RhbnQuZ2V0VHlwZShfY29tbW9uRWxlbWVudHMpOwogICAgX2NvbXB1dGVJbXBhY3RGb3JJbnN0YW50aWF0ZWRDb25zdGFudFR5cGUodHlwZSwgaW1wYWN0QnVpbGRlcik7CgogICAgaWYgKGNvbnN0YW50LmlzRnVuY3Rpb24pIHsKICAgICAgRnVuY3Rpb25Db25zdGFudFZhbHVlIGZ1bmN0aW9uID0gY29uc3RhbnQ7CiAgICAgIGltcGFjdEJ1aWxkZXIKICAgICAgICAgIC5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY1RlYXJPZmYoZnVuY3Rpb24uZWxlbWVudCkpOwogICAgfSBlbHNlIGlmIChjb25zdGFudC5pc0ludGVyY2VwdG9yKSB7CiAgICAgIC8vIEFuIGludGVyY2VwdG9yIGNvbnN0YW50IHJlZmVyZW5jZXMgdGhlIGNsYXNzJ3MgcHJvdG90eXBlIGNoYWluLgogICAgICBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUgaW50ZXJjZXB0b3IgPSBjb25zdGFudDsKICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gaW50ZXJjZXB0b3IuY2xzOwogICAgICBfY29tcHV0ZUltcGFjdEZvckluc3RhbnRpYXRlZENvbnN0YW50VHlwZSgKICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoY2xzKSwgaW1wYWN0QnVpbGRlcik7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50LmlzVHlwZSkgewogICAgICBpbXBhY3RCdWlsZGVyCiAgICAgICAgICAucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLnR5cGVUeXBlKSk7CiAgICAgIC8vIElmIHRoZSB0eXBlIGlzIGEgd2ViIGNvbXBvbmVudCwgd2UgbmVlZCB0byBlbnN1cmUgdGhlIGNvbnN0cnVjdG9ycyBhcmUKICAgICAgLy8gYXZhaWxhYmxlIHRvICd1cGdyYWRlJyB0aGUgbmF0aXZlIG9iamVjdC4KICAgICAgVHlwZUNvbnN0YW50VmFsdWUgdHlwZSA9IGNvbnN0YW50OwogICAgICBpZiAodHlwZS5yZXByZXNlbnRlZFR5cGUuaXNJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgSW50ZXJmYWNlVHlwZSByZXByZXNlbnRlZFR5cGUgPSB0eXBlLnJlcHJlc2VudGVkVHlwZTsKICAgICAgICBfY3VzdG9tRWxlbWVudHNBbmFseXNpcy5yZWdpc3RlclR5cGVDb25zdGFudChyZXByZXNlbnRlZFR5cGUuZWxlbWVudCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY29uc3RhbnQgaXMgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVnaXN0ZXIgdGhlc2UgdXNpbmcgYEJhY2tlbmRJbXBhY3RgLgogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKAogICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShfY29tbW9uRWxlbWVudHMKICAgICAgICAgICAgICAuZ2V0SW5zdGFudGlhdGlvbkNsYXNzKGNvbnN0YW50LnR5cGVBcmd1bWVudHMubGVuZ3RoKSkpKTsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5pbnN0YW50aWF0ZWRHZW5lcmljRnVuY3Rpb25UeXBlLAogICAgICAgICAgQ2FsbFN0cnVjdHVyZS5UV09fQVJHUykpOwogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmV4dHJhY3RGdW5jdGlvblR5cGVPYmplY3RGcm9tSW50ZXJuYWwsCiAgICAgICAgICBDYWxsU3RydWN0dXJlLk9ORV9BUkcpKTsKICAgIH0KICB9CgogIHZvaWQgX2NvbXB1dGVJbXBhY3RGb3JJbnN0YW50aWF0ZWRDb25zdGFudFR5cGUoCiAgICAgIERhcnRUeXBlIHR5cGUsIFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyKSB7CiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24odHlwZSkpOwogICAgICBpZiAoX3J0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHModHlwZS5lbGVtZW50KSkgewogICAgICAgIEZ1bmN0aW9uRW50aXR5IGhlbHBlciA9IF9jb21tb25FbGVtZW50cy5zZXRSdW50aW1lVHlwZUluZm87CiAgICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICAgICAgaGVscGVyLCBoZWxwZXIucGFyYW1ldGVyU3RydWN0dXJlLmNhbGxTdHJ1Y3R1cmUpKTsKICAgICAgfQogICAgICBpZiAodHlwZS5lbGVtZW50ID09IF9jb21tb25FbGVtZW50cy50eXBlTGl0ZXJhbENsYXNzKSB7CiAgICAgICAgLy8gSWYgd2UgdXNlIGEgdHlwZSBsaXRlcmFsIGluIGEgY29uc3RhbnQsIHRoZSBjb21waWxlIHRpbWUgY29uc3RhbnQKICAgICAgICAvLyBlbWl0dGVyIHdpbGwgZ2VuZXJhdGUgYSBjYWxsIHRvIGEgaGVscGVyIHNvIHdlIHJlZ2lzdGVyIHRoZSBpbXBhY3QKICAgICAgICAvLyB0aGF0IGNvbnRhaW5zIHRoYXQgY2FsbC4KICAgICAgICBfaW1wYWN0cy50eXBlTGl0ZXJhbC5yZWdpc3RlckltcGFjdChpbXBhY3RCdWlsZGVyLCBfZWxlbWVudEVudmlyb25tZW50KTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgcmVnaXN0ZXJVc2VkQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCkgewogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBpbXBhY3RCdWlsZGVyID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIF9jb21wdXRlSW1wYWN0Rm9yQ29tcGlsZVRpbWVDb25zdGFudCgKICAgICAgICBjb25zdGFudCwgaW1wYWN0QnVpbGRlciwgbmV3IExpbmtlZEhhc2hTZXQuaWRlbnRpdHkoKSk7CiAgICByZXR1cm4gaW1wYWN0QnVpbGRlcjsKICB9CgogIEBvdmVycmlkZQogIFdvcmxkSW1wYWN0IHJlZ2lzdGVyVXNlZEVsZW1lbnQoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCB3b3JsZEltcGFjdCA9IG5ldyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CiAgICBfY3VzdG9tRWxlbWVudHNBbmFseXNpcy5yZWdpc3RlclN0YXRpY1VzZShtZW1iZXIpOwoKICAgIGlmIChtZW1iZXIuaXNGdW5jdGlvbiAmJiBtZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICBDbGFzc0VudGl0eSBjbHMgPSBtZW1iZXIuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIGlmIChtZW1iZXIubmFtZSA9PSBJZGVudGlmaWVycy5jYWxsICYmCiAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmlzR2VuZXJpY0NsYXNzKGNscykgJiYKICAgICAgICAgIF9ydGlOZWVkLm1ldGhvZE5lZWRzU2lnbmF0dXJlKG1lbWJlcikpIHsKICAgICAgICB3b3JsZEltcGFjdC5hZGRJbXBhY3QoX3JlZ2lzdGVyQ29tcHV0ZVNpZ25hdHVyZSgpKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiB3b3JsZEltcGFjdDsKICB9CgogIFdvcmxkSW1wYWN0IF9wcm9jZXNzQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIGltcGFjdEJ1aWxkZXIgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuY2xvc3VyZUNsYXNzKSB7CiAgICAgIF9pbXBhY3RzLmNsb3N1cmVDbGFzcy5yZWdpc3RlckltcGFjdChpbXBhY3RCdWlsZGVyLCBfZWxlbWVudEVudmlyb25tZW50KTsKICAgIH0KCiAgICB2b2lkIHJlZ2lzdGVySW5zdGFudGlhdGlvbihDbGFzc0VudGl0eSBjbHMpIHsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclR5cGVVc2UoCiAgICAgICAgICBuZXcgVHlwZVVzZS5pbnN0YW50aWF0aW9uKF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0UmF3VHlwZShjbHMpKSk7CiAgICB9CgogICAgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MpIHsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5saXN0Q2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNGaXhlZEFycmF5Q2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRXh0ZW5kYWJsZUFycmF5Q2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcykgewogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcyk7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNNdXRhYmxlQXJyYXlDbGFzcyk7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNGaXhlZEFycmF5Q2xhc3MpOwogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzRXh0ZW5kYWJsZUFycmF5Q2xhc3MpOwogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzVW5tb2RpZmlhYmxlQXJyYXlDbGFzcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuaW50Q2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzSW50Q2xhc3MpIHsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc0ludENsYXNzKTsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc1Bvc2l0aXZlSW50Q2xhc3MpOwogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3MpOwogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MpOwogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmRvdWJsZUNsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzKSB7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcyk7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuYm9vbENsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc0Jvb2xDbGFzcykgewogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5udWxsQ2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzTnVsbENsYXNzKSB7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLm51bUNsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzKSB7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcyk7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNQb3NpdGl2ZUludENsYXNzKTsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc1VJbnQzMkNsYXNzKTsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc1VJbnQzMUNsYXNzKTsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzKTsKICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKF9jb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRPYmplY3RDbGFzcykgewogICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmpzSmF2YVNjcmlwdE9iamVjdENsYXNzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5qc1BsYWluSmF2YVNjcmlwdE9iamVjdENsYXNzKSB7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNQbGFpbkphdmFTY3JpcHRPYmplY3RDbGFzcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNVbmtub3duSmF2YVNjcmlwdE9iamVjdENsYXNzKSB7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNVbmtub3duSmF2YVNjcmlwdE9iamVjdENsYXNzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzKSB7CiAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0RnVuY3Rpb25DbGFzcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNJbmRleGluZ0JlaGF2aW9ySW50ZXJmYWNlKSB7CiAgICAgIF9pbXBhY3RzLmpzSW5kZXhpbmdCZWhhdmlvcgogICAgICAgICAgLnJlZ2lzdGVySW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9lbGVtZW50RW52aXJvbm1lbnQpOwogICAgfQoKICAgIF9jdXN0b21FbGVtZW50c0FuYWx5c2lzLnJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3MoY2xzKTsKICAgIHJldHVybiBpbXBhY3RCdWlsZGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgcmVnaXN0ZXJJbXBsZW1lbnRlZENsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIF9wcm9jZXNzQ2xhc3MoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIFdvcmxkSW1wYWN0IHJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gX3Byb2Nlc3NDbGFzcyhjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBsb2dTdW1tYXJ5KHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlKSkgewogICAgX25hdGl2ZUVucXVldWVyLmxvZ1N1bW1hcnkobG9nKTsKICB9Cn0KgT4ATk48AS0BGgEwSiMkITohGj03J0IeHSgoATkiMCghASQjAT8BLwEkHgEbFSAcFRoVJB0BDEFJEk5GUDwGGgQBDC5FBAEsSAQBDDQ5FzAGBAFNPkZPKyE8JEIGH0kNJEoGFwQBDBRPSx48BgQBDE5OLQdQFzsBRBxLIgYBQjdKPUcqHAYBLgERBAEMGgE4REYhTQFFLjEIBgQBNUI3RAEfMRRNKUk3KTFAIhRRUDMpMj5PCDlEPzpIQjskQkEjBgQBMjkhRjxERD8IPk1OJFEIBgQBDD1JKkAaBAEMOUc3ATgvLTUzPAgGARgEAS9JL1AGATIlSwYBLjA8My80OTs7QkBFRzItOUE8PDw1MDw8My46My46MjA5QTw8PDxBRkZLSE1DSEUiPwYBPBoEAQw6HwQBDDsfBAEMLiUEAgE1cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9jb2RlZ2VuX2xpc3RlbmVyLmRhcnRGc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9jdXN0b21fZWxlbWVudHNfYW5hbHlzaXMuZGFydKXmLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvdXNlLmRhcnQnIHNob3cgQ29uc3RhbnRVc2UsIFN0YXRpY1VzZTsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcKICAgIHNob3cgV29ybGRJbXBhY3QsIFN0YWdlZFdvcmxkSW1wYWN0QnVpbGRlcjsKaW1wb3J0ICdiYWNrZW5kX3VzYWdlLmRhcnQnIHNob3cgQmFja2VuZFVzYWdlQnVpbGRlcjsKaW1wb3J0ICduYXRpdmVfZGF0YS5kYXJ0JzsKCi8vLyBTdXBwb3J0IGZvciBDdXN0b20gRWxlbWVudHMuCi8vLwovLy8gVGhlIHN1cHBvcnQgZm9yIGN1c3RvbSBlbGVtZW50cyB0aGUgY29tcGlsZXIgYnVpbGRzIGEgdGFibGUgdGhhdCBtYXBzIHRoZQovLy8gY3VzdG9tIGVsZW1lbnQgY2xhc3MncyBbVHlwZV0gdG8gdGhlIGludGVyY2VwdG9yIGZvciB0aGUgY2xhc3MgYW5kIHRoZQovLy8gY29uc3RydWN0b3IocykgZm9yIHRoZSBjbGFzcy4KLy8vCi8vLyBXZSB3YW50IHRoZSB0YWJsZSB0byBjb250YWluIG9ubHkgdGhlIGN1c3RvbSBlbGVtZW50IGNsYXNzZXMgdXNlZCwgYW5kIHdlCi8vLyB3YW50IHRvIGF2b2lkIHJlc29sdmluZyBhbmQgY29tcGlsaW5nIGNvbnN0cnVjdG9ycyB0aGF0IGFyZSBub3QgdXNlZCBzaW5jZQovLy8gdGhhdCBtYXkgYnJpbmcgaW4gdW51c2VkIGNvZGUuICBUaGlzIGNsYXNzIGNvbnRyb2xzIHRoZSByZXNvbHV0aW9uIGFuZCBjb2RlCi8vLyBnZW5lcmF0aW9uIHRvIHJlc3RyaWN0IHRoZSBpbXBhY3QuCi8vLwovLy8gVGhlIGZvbGxvd2luZyBsaW5lIG9mIGNvZGUgcmVxdWlyZXMgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGdlbmVyYXRpdmUKLy8vIGNvbnN0cnVjdG9yIGZhY3RvcnkgZnVuY3Rpb24ocykgZm9yIEZhbmN5QnV0dG9uLCBhbmQgdGhlaXIgaW5zZXJ0aW9uIGludG8KLy8vIHRoZSB0YWJsZToKLy8vCi8vLyAgICAgZG9jdW1lbnQucmVnaXN0ZXIoRmFuY3lCdXR0b24sICd4LWZhbmN5LWJ1dHRvbicpOwovLy8KLy8vIFdlIGRldGVjdCB0aGlzIGJ5ICdqb2luaW5nJyB0aGUgY2xhc3NlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGFzIHR5cGUgbGl0ZXJhbHMKLy8vIHdpdGggdGhlIGNsYXNzZXMgdGhhdCBhcmUgY3VzdG9tIGVsZW1lbnRzLCBlbmFibGVkIGJ5IGRldGVjdGluZyB0aGUgcHJlc2VuY2UKLy8vIG9mIHRoZSB0YWJsZSBhY2Nlc3MgY29kZSB1c2VkIGJ5IGRvY3VtZW50LnJlZ2lzdGVyLgovLy8KLy8vIFdlIGhhdmUgdG8gYmUgbW9yZSBjb25zZXJ2YXRpdmUgd2hlbiB0aGUgdHlwZSBpcyB1bmtub3duLCBlLmcuCi8vLwovLy8gICAgIGRvY3VtZW50LnJlZ2lzdGVyKGNsYXNzTWlycm9yLnJlZmxlY3RlZFR5cGUsIHRhZ0Zyb21NZXRhZGF0YSk7Ci8vLwovLy8gYW5kCi8vLwovLy8gICAgIGNsYXNzIENvbXBvbmVudDxUPiB7Ci8vLyAgICAgICBmaW5hbCB0YWc7Ci8vLyAgICAgICBDb21wb25lbnQodGhpcy50YWcpOwovLy8gICAgICAgdm9pZCByZWdpc3RlcigpID0+IGRvY3VtZW50LnJlZ2lzdGVyKFQsIHRhZyk7Ci8vLyAgICAgfQovLy8gICAgIGNvbnN0IENvbXBvbmVudDxGYW5jeUJ1dHRvbj4oJ3gtZmFuY3ktYnV0dG9uJykucmVnaXN0ZXIoKTsKLy8vCi8vLyBJbiB0aGVzZSBjYXNlcyB3ZSBjb25zZXJ2YXRpdmVseSBnZW5lcmF0ZSBhbGwgdmlhYmxlIGVudHJpZXMgaW4gdGhlIHRhYmxlLgphYnN0cmFjdCBjbGFzcyBDdXN0b21FbGVtZW50c0FuYWx5c2lzQmFzZSB7CiAgZmluYWwgTmF0aXZlQmFzaWNEYXRhIF9uYXRpdmVEYXRhOwogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKCiAgQ3VzdG9tRWxlbWVudHNBbmFseXNpc0Jhc2UoCiAgICAgIHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCwgdGhpcy5fY29tbW9uRWxlbWVudHMsIHRoaXMuX25hdGl2ZURhdGEpOwoKICBDdXN0b21FbGVtZW50c0FuYWx5c2lzSm9pbiBnZXQgam9pbjsKCiAgdm9pZCByZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgaWYgKCFfbmF0aXZlRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShjbHMpKSByZXR1cm47CiAgICBpZiAoX2VsZW1lbnRFbnZpcm9ubWVudC5pc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uKGNscykpIHJldHVybjsKICAgIGlmIChjbHMuaXNBYnN0cmFjdCkgcmV0dXJuOwogICAgLy8gSnNJbnRlcm9wIGNsYXNzZXMgYXJlIG9wYXF1ZSBpbnRlcmZhY2VzIHdpdGhvdXQgYSBjb25jcmV0ZQogICAgLy8gaW1wbGVtZW50YXRpb24uCiAgICBpZiAoX25hdGl2ZURhdGEuaXNKc0ludGVyb3BDbGFzcyhjbHMpKSByZXR1cm47CiAgICBqb2luLmluc3RhbnRpYXRlZENsYXNzZXMuYWRkKGNscyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyU3RhdGljVXNlKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoZWxlbWVudCAhPSBudWxsKTsKICAgIGlmIChfY29tbW9uRWxlbWVudHMuaXNGaW5kSW5kZXhGb3JOYXRpdmVTdWJjbGFzc1R5cGUoZWxlbWVudCkpIHsKICAgICAgam9pbi5kZW1hbmRlZCA9IHRydWU7CiAgICB9CiAgfQoKICAvLy8gQ29tcHV0ZXMgdGhlIFtXb3JsZEltcGFjdF0gb2YgdGhlIGNsYXNzZXMgcmVnaXN0ZXJlZCBzaW5jZSBsYXN0IGZsdXNoLgogIFdvcmxkSW1wYWN0IGZsdXNoKCkgPT4gam9pbi5mbHVzaCgpOwp9CgpjbGFzcyBDdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpcyBleHRlbmRzIEN1c3RvbUVsZW1lbnRzQW5hbHlzaXNCYXNlIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBDdXN0b21FbGVtZW50c0FuYWx5c2lzSm9pbiBqb2luOwoKICBDdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpcygKICAgICAgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIE5hdGl2ZUJhc2ljRGF0YSBuYXRpdmVEYXRhLAogICAgICBCYWNrZW5kVXNhZ2VCdWlsZGVyIGJhY2tlbmRVc2FnZUJ1aWxkZXIpCiAgICAgIDogam9pbiA9IG5ldyBDdXN0b21FbGVtZW50c0FuYWx5c2lzSm9pbigKICAgICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LCBjb21tb25FbGVtZW50cywgbmF0aXZlRGF0YSwKICAgICAgICAgICAgYmFja2VuZFVzYWdlQnVpbGRlcjogYmFja2VuZFVzYWdlQnVpbGRlciksCiAgICAgICAgc3VwZXIoZWxlbWVudEVudmlyb25tZW50LCBjb21tb25FbGVtZW50cywgbmF0aXZlRGF0YSkgewogICAgLy8gVE9ETyhzcmEpOiBSZW1vdmUgdGhpcyB3b3JrLWFyb3VuZC4gIFdlIHNob3VsZCBtYXJrIGFsbENsYXNzZXNTZWxlY3RlZCBpbgogICAgLy8gYm90aCBqb2lucyBvbmx5IHdoZW4gd2Ugc2VlIGEgY29uc3RydWN0IGdlbmVyYXRpbmcgYW4gdW5rbm93biBbVHlwZV0gYnV0CiAgICAvLyB3ZSBjYW4ndCBjdXJyZW50bHkgcmVjb2duaXplIGFsbCBjYXNlcy4gIEluIHBhcnRpY3VsYXIsIHRoZSB3b3JrLWFyb3VuZAogICAgLy8gZm9yIHRoZSB1bmltcGxlbWVudGVkIGBDbGFzc01pcnJvci5yZWZsZWN0ZWRUeXBlYCBpcyBub3QgcmVjb2duaXphYmxlLgogICAgLy8gVE9ETygxMjYwNyk6IE1hdGNoIG9uIFtDbGFzc01pcnJvci5yZWZsZWN0ZWRUeXBlXQogICAgam9pbi5hbGxDbGFzc2VzU2VsZWN0ZWQgPSB0cnVlOwogIH0KCiAgdm9pZCByZWdpc3RlclR5cGVMaXRlcmFsKERhcnRUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlLmlzSW50ZXJmYWNlVHlwZSkgewogICAgICAvLyBUT0RPKHNyYSk6IElmIHdlIGhhZCBhIGZsb3cgcXVlcnkgZnJvbSB0aGUgdHlwZSBsaXRlcmFsIGV4cHJlc3Npb24gdG8KICAgICAgLy8gdGhlIFR5cGUgYXJndW1lbnQgb2YgdGhlIG1ldGFkYXRhIGxvb2t1cCwgd2UgY291bGQgdGVsbCBpZiB0aGlzIHR5cGUKICAgICAgLy8gbGl0ZXJhbCBpcyByZWFsbHkgYSBkZW1hbmQgZm9yIHRoZSBtZXRhZGF0YS4KICAgICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2VUeXBlID0gdHlwZTsKICAgICAgam9pbi5zZWxlY3RlZENsYXNzZXMuYWRkKGludGVyZmFjZVR5cGUuZWxlbWVudCk7CiAgICB9IGVsc2UgaWYgKHR5cGUuaXNUeXBlVmFyaWFibGUpIHsKICAgICAgLy8gVGhpcyBpcyBhIHR5cGUgcGFyYW1ldGVyIG9mIGEgcGFyYW1ldGVyaXplZCBjbGFzcy4KICAgICAgLy8gVE9ETyhzcmEpOiBJcyB0aGVyZSBhIHdheSB0byBkZXRlcm1pbmUgd2hpY2ggdHlwZXMgYXJlIGJvdW5kIHRvIHRoZQogICAgICAvLyBwYXJhbWV0ZXI/CiAgICAgIGpvaW4uYWxsQ2xhc3Nlc1NlbGVjdGVkID0gdHJ1ZTsKICAgIH0KICB9Cn0KCmNsYXNzIEN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzIGV4dGVuZHMgQ3VzdG9tRWxlbWVudHNBbmFseXNpc0Jhc2UgewogIEBvdmVycmlkZQogIGZpbmFsIEN1c3RvbUVsZW1lbnRzQW5hbHlzaXNKb2luIGpvaW47CgogIEN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LCBOYXRpdmVCYXNpY0RhdGEgbmF0aXZlRGF0YSkKICAgICAgOiBqb2luID0gbmV3IEN1c3RvbUVsZW1lbnRzQW5hbHlzaXNKb2luKAogICAgICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQsIGNvbW1vbkVsZW1lbnRzLCBuYXRpdmVEYXRhKSwKICAgICAgICBzdXBlcihlbGVtZW50RW52aXJvbm1lbnQsIGNvbW1vbkVsZW1lbnRzLCBuYXRpdmVEYXRhKSB7CiAgICAvLyBUT0RPKHNyYSk6IFJlbW92ZSB0aGlzIHdvcmstYXJvdW5kLiAgV2Ugc2hvdWxkIG1hcmsgYWxsQ2xhc3Nlc1NlbGVjdGVkIGluCiAgICAvLyBib3RoIGpvaW5zIG9ubHkgd2hlbiB3ZSBzZWUgYSBjb25zdHJ1Y3QgZ2VuZXJhdGluZyBhbiB1bmtub3duIFtUeXBlXSBidXQKICAgIC8vIHdlIGNhbid0IGN1cnJlbnRseSByZWNvZ25pemUgYWxsIGNhc2VzLiAgSW4gcGFydGljdWxhciwgdGhlIHdvcmstYXJvdW5kCiAgICAvLyBmb3IgdGhlIHVuaW1wbGVtZW50ZWQgYENsYXNzTWlycm9yLnJlZmxlY3RlZFR5cGVgIGlzIG5vdCByZWNvZ25pemFibGUuCiAgICAvLyBUT0RPKDEyNjA3KTogTWF0Y2ggb24gW0NsYXNzTWlycm9yLnJlZmxlY3RlZFR5cGVdCiAgICBqb2luLmFsbENsYXNzZXNTZWxlY3RlZCA9IHRydWU7CiAgfQoKICB2b2lkIHJlZ2lzdGVyVHlwZUNvbnN0YW50KENsYXNzRW50aXR5IGNscykgewogICAgam9pbi5zZWxlY3RlZENsYXNzZXMuYWRkKGNscyk7CiAgfQoKICBib29sIGdldCBuZWVkc1RhYmxlID0+IGpvaW4uZGVtYW5kZWQ7CgogIGJvb2wgbmVlZHNDbGFzcyhDbGFzc0VudGl0eSBjbHMpID0+IGpvaW4uYWN0aXZlQ2xhc3Nlcy5jb250YWlucyhjbHMpOwoKICBMaXN0PENvbnN0cnVjdG9yRW50aXR5PiBjb25zdHJ1Y3RvcnMoQ2xhc3NFbnRpdHkgY2xzKSA9PgogICAgICBqb2luLmNvbXB1dGVFc2NhcGluZ0NvbnN0cnVjdG9ycyhjbHMpOwp9CgpjbGFzcyBDdXN0b21FbGVtZW50c0FuYWx5c2lzSm9pbiB7CiAgZmluYWwgRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgZmluYWwgQ29tbW9uRWxlbWVudHMgX2NvbW1vbkVsZW1lbnRzOwogIGZpbmFsIE5hdGl2ZUJhc2ljRGF0YSBfbmF0aXZlRGF0YTsKICBmaW5hbCBCYWNrZW5kVXNhZ2VCdWlsZGVyIF9iYWNrZW5kVXNhZ2VCdWlsZGVyOwoKICBmaW5hbCBib29sIGZvclJlc29sdXRpb247CgogIGZpbmFsIFN0YWdlZFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyID0gbmV3IFN0YWdlZFdvcmxkSW1wYWN0QnVpbGRlcigpOwoKICAvLyBDbGFzc2VzIHRoYXQgYXJlIGNhbmRpZGF0ZXMgZm9yIG5lZWRpbmcgY29uc3RydWN0b3JzLiAgQ2xhc3NlcyBhcmUgbW92ZWQgdG8KICAvLyBbYWN0aXZlQ2xhc3Nlc10gd2hlbiB3ZSBrbm93IHRoZXkgbmVlZCBjb25zdHJ1Y3RvcnMuCiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBpbnN0YW50aWF0ZWRDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgLy8gQ2xhc3NlcyBleHBsaWNpdGx5IG5hbWVkLgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gc2VsZWN0ZWRDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgLy8gVHJ1ZSBpZiB3ZSBtdXN0IGNvbnNlcnZhdGl2ZWx5IGluY2x1ZGUgYWxsIGV4dGVuc2lvbiBjbGFzc2VzLgogIGJvb2wgYWxsQ2xhc3Nlc1NlbGVjdGVkID0gZmFsc2U7CgogIC8vIERpZCB3ZSBzZWUgYSBkZW1hbmQgZm9yIHRoZSBkYXRhPwogIGJvb2wgZGVtYW5kZWQgPSBmYWxzZTsKCiAgLy8gQ2xhc3Nlc091dHB1dDogY2xhc3NlcyByZXF1aXJpbmcgbWV0YWRhdGEuCiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBhY3RpdmVDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgQ3VzdG9tRWxlbWVudHNBbmFseXNpc0pvaW4oCiAgICAgIHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCwgdGhpcy5fY29tbW9uRWxlbWVudHMsIHRoaXMuX25hdGl2ZURhdGEsCiAgICAgIHtCYWNrZW5kVXNhZ2VCdWlsZGVyIGJhY2tlbmRVc2FnZUJ1aWxkZXJ9KQogICAgICA6IHRoaXMuX2JhY2tlbmRVc2FnZUJ1aWxkZXIgPSBiYWNrZW5kVXNhZ2VCdWlsZGVyLAogICAgICAgIHRoaXMuZm9yUmVzb2x1dGlvbiA9IGJhY2tlbmRVc2FnZUJ1aWxkZXIgIT0gbnVsbDsKCiAgV29ybGRJbXBhY3QgZmx1c2goKSB7CiAgICBpZiAoIWRlbWFuZGVkKSByZXR1cm4gY29uc3QgV29ybGRJbXBhY3QoKTsKICAgIHZhciBuZXdBY3RpdmVDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIGluc3RhbnRpYXRlZENsYXNzZXMpIHsKICAgICAgYm9vbCBpc05hdGl2ZSA9IF9uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKTsKICAgICAgYm9vbCBpc0V4dGVuc2lvbiA9ICFpc05hdGl2ZSAmJiBfbmF0aXZlRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShjbHMpOwogICAgICAvLyBHZW5lcmF0ZSB0YWJsZSBlbnRyaWVzIGZvciBuYXRpdmUgY2xhc3NlcyB0aGF0IGFyZSBleHBsaWNpdGx5IG5hbWVkIGFuZAogICAgICAvLyBleHRlbnNpb25zIHRoYXQgZml4IG91ciBjcml0ZXJpYS4KICAgICAgaWYgKChpc05hdGl2ZSAmJiBzZWxlY3RlZENsYXNzZXMuY29udGFpbnMoY2xzKSkgfHwKICAgICAgICAgIChpc0V4dGVuc2lvbiAmJgogICAgICAgICAgICAgIChhbGxDbGFzc2VzU2VsZWN0ZWQgfHwgc2VsZWN0ZWRDbGFzc2VzLmNvbnRhaW5zKGNscykpKSkgewogICAgICAgIG5ld0FjdGl2ZUNsYXNzZXMuYWRkKGNscyk7CiAgICAgICAgSXRlcmFibGU8Q29uc3RydWN0b3JFbnRpdHk+IGVzY2FwaW5nQ29uc3RydWN0b3JzID0KICAgICAgICAgICAgY29tcHV0ZUVzY2FwaW5nQ29uc3RydWN0b3JzKGNscyk7CiAgICAgICAgZm9yIChDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciBpbiBlc2NhcGluZ0NvbnN0cnVjdG9ycykgewogICAgICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmNvbnN0cnVjdG9ySW52b2tlKAogICAgICAgICAgICAgIGNvbnN0cnVjdG9yLCBDYWxsU3RydWN0dXJlLk5PX0FSR1MpKTsKICAgICAgICB9CiAgICAgICAgaWYgKGZvclJlc29sdXRpb24pIHsKICAgICAgICAgIGVzY2FwaW5nQ29uc3RydWN0b3JzCiAgICAgICAgICAgICAgLmZvckVhY2goX2JhY2tlbmRVc2FnZUJ1aWxkZXIucmVnaXN0ZXJHbG9iYWxGdW5jdGlvbkRlcGVuZGVuY3kpOwogICAgICAgIH0KICAgICAgICAvLyBGb3JjZSB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgdHlwZSBjb25zdGFudCB0aGF0IGlzIHRoZSBrZXkgdG8gYW4gZW50cnkKICAgICAgICAvLyBpbiB0aGUgZ2VuZXJhdGVkIHRhYmxlLgogICAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBfbWFrZVR5cGVDb25zdGFudChjbHMpOwogICAgICAgIGltcGFjdEJ1aWxkZXIKICAgICAgICAgICAgLnJlZ2lzdGVyQ29uc3RhbnRVc2UobmV3IENvbnN0YW50VXNlLmN1c3RvbUVsZW1lbnRzKGNvbnN0YW50KSk7CiAgICAgIH0KICAgIH0KICAgIGFjdGl2ZUNsYXNzZXMuYWRkQWxsKG5ld0FjdGl2ZUNsYXNzZXMpOwogICAgaW5zdGFudGlhdGVkQ2xhc3Nlcy5yZW1vdmVBbGwobmV3QWN0aXZlQ2xhc3Nlcyk7CiAgICByZXR1cm4gaW1wYWN0QnVpbGRlci5mbHVzaCgpOwogIH0KCiAgVHlwZUNvbnN0YW50VmFsdWUgX21ha2VUeXBlQ29uc3RhbnQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRSYXdUeXBlKGNscyk7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVR5cGUoX2NvbW1vbkVsZW1lbnRzLCB0eXBlKTsKICB9CgogIExpc3Q8Q29uc3RydWN0b3JFbnRpdHk+IGNvbXB1dGVFc2NhcGluZ0NvbnN0cnVjdG9ycyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIExpc3Q8Q29uc3RydWN0b3JFbnRpdHk+IHJlc3VsdCA9IDxDb25zdHJ1Y3RvckVudGl0eT5bXTsKICAgIC8vIE9ubHkgY2xhc3NlcyB0aGF0IGV4dGVuZCBuYXRpdmUgY2xhc3NlcyBoYXZlIGNvbnN0cnVjdG9ycyBpbiB0aGUgdGFibGUuCiAgICAvLyBXZSBjb3VsZCByZWZpbmUgdGhpcyB0byBjbGFzc2VzIHRoYXQgZXh0ZW5kIEVsZW1lbnQsIGJ1dCB0aGF0IHdvdWxkIGJyZWFrCiAgICAvLyB0aGUgdGVzdHMgYW5kIHRoZXJlIGlzIG5vIHNhbmUgcmVhc29uIHRvIHN1YmNsYXNzIG90aGVyIG5hdGl2ZSBjbGFzc2VzLgogICAgaWYgKF9uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKSkgcmV0dXJuIHJlc3VsdDsKCiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hDb25zdHJ1Y3RvcihjbHMsCiAgICAgICAgKENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yKSB7CiAgICAgIGlmIChjb25zdHJ1Y3Rvci5pc0dlbmVyYXRpdmVDb25zdHJ1Y3RvcikgewogICAgICAgIC8vIEVuc3VyZSB0aGF0IHBhcmFtZXRlciBzdHJ1Y3R1cmUgaGFzIGJlZW4gY29tcHV0ZWQgYnkgcXVlcnlpbmcgdGhlCiAgICAgICAgLy8gZnVuY3Rpb24gdHlwZS4KICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShjb25zdHJ1Y3Rvcik7CiAgICAgICAgLy8gSWdub3JlIGNvbnN0cnVjdG9ycyB0aGF0IGNhbm5vdCBiZSBjYWxsZWQgd2l0aCB6ZXJvIGFyZ3VtZW50cy4KICAgICAgICBpZiAoY29uc3RydWN0b3IucGFyYW1ldGVyU3RydWN0dXJlLnJlcXVpcmVkUGFyYW1ldGVycyA9PSAwKSB7CiAgICAgICAgICByZXN1bHQuYWRkKGNvbnN0cnVjdG9yKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KgPMATk48ASI/IyQhKjsnMDYbASEETksiBE5PUCcESU4PBDoEUVE4BEMERwQIBB0VHzgKQwRPLCUwKAEeSQEnATQ7RCBCFzMnBAExHUUcBgQBTScCAUwMKQEkLSUiLy88N0BRUE9OOSQEASwgT042KjcmPE0UJgYEAgFJDCkBP0kvPUBRUE9OOSQEAS8jBAEoAUgBOy0CASMwKCUyARwBUQFROkcBH0MBQyMBJxkBMEEBHkgxOToBGC8zMzZQUSs5GkgjOy5GSzQKHR9PClEjORZMCAYsNSIEATk5PgQBSTxPUU83ATAqMU0aOkpGIwoICBMEAgE9cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9jdXN0b21fZWxlbWVudHNfYW5hbHlzaXMuZGFydEBzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL2ltcGFjdF90cmFuc2Zvcm1lci5kYXJ0wABGIC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGpzX2JhY2tlbmQuYmFja2VuZC5pbXBhY3RfdHJhbnNmb3JtZXI7CgppbXBvcnQgJy4uL3VuaXZlcnNlL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5QnVpbGRlcjsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vYmFja2VuZF9hcGkuZGFydCcgc2hvdyBJbXBhY3RUcmFuc2Zvcm1lcjsKaW1wb3J0ICcuLi9jb21tb24vY29kZWdlbi5kYXJ0JyBzaG93IENvZGVnZW5JbXBhY3Q7CmltcG9ydCAnLi4vY29tbW9uL3Jlc29sdXRpb24uZGFydCcgc2hvdyBSZXNvbHV0aW9uSW1wYWN0OwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19lbWl0dGVyL25hdGl2ZV9lbWl0dGVyLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9lbnF1ZXVlLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9iZWhhdmlvci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9mZWF0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3VzZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcgc2hvdyBUcmFuc2Zvcm1lZFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdDsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CmltcG9ydCAnYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnYmFja2VuZF9pbXBhY3QuZGFydCc7CmltcG9ydCAnYmFja2VuZF91c2FnZS5kYXJ0JzsKaW1wb3J0ICdjdXN0b21fZWxlbWVudHNfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JzsKaW1wb3J0ICduYW1lci5kYXJ0JzsKaW1wb3J0ICduYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICdydW50aW1lX3R5cGVzLmRhcnQnOwppbXBvcnQgJ3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0JzsKCmNsYXNzIEphdmFTY3JpcHRJbXBhY3RUcmFuc2Zvcm1lciBleHRlbmRzIEltcGFjdFRyYW5zZm9ybWVyIHsKICBmaW5hbCBFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgQmFja2VuZEltcGFjdHMgX2ltcGFjdHM7CiAgZmluYWwgTmF0aXZlQmFzaWNEYXRhIF9uYXRpdmVCYXNpY0RhdGE7CiAgZmluYWwgTmF0aXZlUmVzb2x1dGlvbkVucXVldWVyIF9uYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXI7CiAgZmluYWwgQmFja2VuZFVzYWdlQnVpbGRlciBfYmFja2VuZFVzYWdlQnVpbGRlcjsKICBmaW5hbCBDdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpcyBfY3VzdG9tRWxlbWVudHNSZXNvbHV0aW9uQW5hbHlzaXM7CiAgZmluYWwgUnVudGltZVR5cGVzTmVlZEJ1aWxkZXIgX3J0aU5lZWRCdWlsZGVyOwogIGZpbmFsIENsYXNzSGllcmFyY2h5QnVpbGRlciBfY2xhc3NIaWVyYXJjaHlCdWlsZGVyOwogIGZpbmFsIEFubm90YXRpb25zRGF0YSBfYW5ub3RhdGlvbnNEYXRhOwoKICBKYXZhU2NyaXB0SW1wYWN0VHJhbnNmb3JtZXIoCiAgICAgIHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgdGhpcy5fY29tbW9uRWxlbWVudHMsCiAgICAgIHRoaXMuX2ltcGFjdHMsCiAgICAgIHRoaXMuX25hdGl2ZUJhc2ljRGF0YSwKICAgICAgdGhpcy5fbmF0aXZlUmVzb2x1dGlvbkVucXVldWVyLAogICAgICB0aGlzLl9iYWNrZW5kVXNhZ2VCdWlsZGVyLAogICAgICB0aGlzLl9jdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpcywKICAgICAgdGhpcy5fcnRpTmVlZEJ1aWxkZXIsCiAgICAgIHRoaXMuX2NsYXNzSGllcmFyY2h5QnVpbGRlciwKICAgICAgdGhpcy5fYW5ub3RhdGlvbnNEYXRhKTsKCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgdHJhbnNmb3JtUmVzb2x1dGlvbkltcGFjdChSZXNvbHV0aW9uSW1wYWN0IHdvcmxkSW1wYWN0KSB7CiAgICBUcmFuc2Zvcm1lZFdvcmxkSW1wYWN0IHRyYW5zZm9ybWVkID0KICAgICAgICBuZXcgVHJhbnNmb3JtZWRXb3JsZEltcGFjdCh3b3JsZEltcGFjdCk7CgogICAgdm9pZCByZWdpc3RlckltcGFjdChCYWNrZW5kSW1wYWN0IGltcGFjdCkgewogICAgICBpbXBhY3QucmVnaXN0ZXJJbXBhY3QodHJhbnNmb3JtZWQsIF9lbGVtZW50RW52aXJvbm1lbnQpOwogICAgICBfYmFja2VuZFVzYWdlQnVpbGRlci5wcm9jZXNzQmFja2VuZEltcGFjdChpbXBhY3QpOwogICAgfQoKICAgIGZvciAoRmVhdHVyZSBmZWF0dXJlIGluIHdvcmxkSW1wYWN0LmZlYXR1cmVzKSB7CiAgICAgIHN3aXRjaCAoZmVhdHVyZSkgewogICAgICAgIGNhc2UgRmVhdHVyZS5BQlNUUkFDVF9DTEFTU19JTlNUQU5USUFUSU9OOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuYWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLkFTU0VSVDoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmFzc2VydFdpdGhvdXRNZXNzYWdlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5BU1NFUlRfV0lUSF9NRVNTQUdFOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuYXNzZXJ0V2l0aE1lc3NhZ2UpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLkFTWU5DOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuYXN5bmNCb2R5KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5BU1lOQ19GT1JfSU46CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5hc3luY0ZvckluKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5BU1lOQ19TVEFSOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuYXN5bmNTdGFyQm9keSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuQ0FUQ0hfU1RBVEVNRU5UOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuY2F0Y2hTdGF0ZW1lbnQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLkZBTExfVEhST1VHSF9FUlJPUjoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmZhbGxUaHJvdWdoRXJyb3IpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLkZJRUxEX1dJVEhPVVRfSU5JVElBTElaRVI6CiAgICAgICAgY2FzZSBGZWF0dXJlLkxPQ0FMX1dJVEhPVVRfSU5JVElBTElaRVI6CiAgICAgICAgICB0cmFuc2Zvcm1lZC5yZWdpc3RlclR5cGVVc2UoCiAgICAgICAgICAgICAgbmV3IFR5cGVVc2UuaW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMubnVsbFR5cGUpKTsKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLm51bGxMaXRlcmFsKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5MQVpZX0ZJRUxEOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMubGF6eUZpZWxkKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5TVEFDS19UUkFDRV9JTl9DQVRDSDoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnN0YWNrVHJhY2VJbkNhdGNoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5TVFJJTkdfSU5URVJQT0xBVElPTjoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnN0cmluZ0ludGVycG9sYXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLlNUUklOR19KVVhUQVBPU0lUSU9OOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuc3RyaW5nSnV4dGFwb3NpdGlvbik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuU1VQRVJfTk9fU1VDSF9NRVRIT0Q6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5zdXBlck5vU3VjaE1ldGhvZCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuU1lNQk9MX0NPTlNUUlVDVE9SOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuc3ltYm9sQ29uc3RydWN0b3IpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLlNZTkNfRk9SX0lOOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuc3luY0ZvckluKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgRmVhdHVyZS5TWU5DX1NUQVI6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5zeW5jU3RhckJvZHkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLlRIUk9XX0VYUFJFU1NJT046CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy50aHJvd0V4cHJlc3Npb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLlRIUk9XX05PX1NVQ0hfTUVUSE9EOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMudGhyb3dOb1N1Y2hNZXRob2QpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLlRIUk9XX1JVTlRJTUVfRVJST1I6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy50aHJvd1J1bnRpbWVFcnJvcik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuVEhST1dfVU5TVVBQT1JURURfRVJST1I6CiAgICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy50aHJvd1Vuc3VwcG9ydGVkRXJyb3IpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBGZWF0dXJlLlRZUEVfVkFSSUFCTEVfQk9VTkRTX0NIRUNLOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMudHlwZVZhcmlhYmxlQm91bmRDaGVjayk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEZlYXR1cmUuTE9BRF9MSUJSQVJZOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMubG9hZExpYnJhcnkpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICBib29sIGhhc0FzQ2FzdCA9IGZhbHNlOwogICAgYm9vbCBoYXNUeXBlTGl0ZXJhbCA9IGZhbHNlOwogICAgZm9yIChUeXBlVXNlIHR5cGVVc2UgaW4gd29ybGRJbXBhY3QudHlwZVVzZXMpIHsKICAgICAgRGFydFR5cGUgdHlwZSA9IHR5cGVVc2UudHlwZTsKICAgICAgc3dpdGNoICh0eXBlVXNlLmtpbmQpIHsKICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLklOU1RBTlRJQVRJT046CiAgICAgICAgY2FzZSBUeXBlVXNlS2luZC5DT05TVF9JTlNUQU5USUFUSU9OOgogICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuTkFUSVZFX0lOU1RBTlRJQVRJT046CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLklTX0NIRUNLOgogICAgICAgICAgb25Jc0NoZWNrKHR5cGUsIHRyYW5zZm9ybWVkKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQVNfQ0FTVDoKICAgICAgICAgIGlmIChfYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAgICAgLmdldEV4cGxpY2l0Q2FzdENoZWNrUG9saWN5KHdvcmxkSW1wYWN0Lm1lbWJlcikKICAgICAgICAgICAgICAuaXNFbWl0dGVkKSB7CiAgICAgICAgICAgIG9uSXNDaGVjayh0eXBlLCB0cmFuc2Zvcm1lZCk7CiAgICAgICAgICAgIGhhc0FzQ2FzdCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLklNUExJQ0lUX0NBU1Q6CiAgICAgICAgICBpZiAoX2Fubm90YXRpb25zRGF0YQogICAgICAgICAgICAgIC5nZXRJbXBsaWNpdERvd25jYXN0Q2hlY2tQb2xpY3kod29ybGRJbXBhY3QubWVtYmVyKQogICAgICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICAgICAgb25Jc0NoZWNrKHR5cGUsIHRyYW5zZm9ybWVkKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuUEFSQU1FVEVSX0NIRUNLOgogICAgICAgICAgaWYgKF9hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgICAgICAuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3kod29ybGRJbXBhY3QubWVtYmVyKQogICAgICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICAgICAgb25Jc0NoZWNrKHR5cGUsIHRyYW5zZm9ybWVkKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVHlwZVVzZUtpbmQuQ0FUQ0hfVFlQRToKICAgICAgICAgIG9uSXNDaGVjayh0eXBlLCB0cmFuc2Zvcm1lZCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLlRZUEVfTElURVJBTDoKICAgICAgICAgIF9jdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpcy5yZWdpc3RlclR5cGVMaXRlcmFsKHR5cGUpOwogICAgICAgICAgaWYgKHR5cGUuaXNUeXBlVmFyaWFibGUpIHsKICAgICAgICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUgPSB0eXBlOwogICAgICAgICAgICBFbnRpdHkgdHlwZURlY2xhcmF0aW9uID0gdHlwZVZhcmlhYmxlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uOwogICAgICAgICAgICBpZiAodHlwZURlY2xhcmF0aW9uIGlzIENsYXNzRW50aXR5KSB7CiAgICAgICAgICAgICAgX3J0aU5lZWRCdWlsZGVyCiAgICAgICAgICAgICAgICAgIC5yZWdpc3RlckNsYXNzVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFsKHR5cGVEZWNsYXJhdGlvbik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZURlY2xhcmF0aW9uIGlzIEZ1bmN0aW9uRW50aXR5KSB7CiAgICAgICAgICAgICAgX3J0aU5lZWRCdWlsZGVyCiAgICAgICAgICAgICAgICAgIC5yZWdpc3Rlck1ldGhvZFVzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbCh0eXBlRGVjbGFyYXRpb24pOwogICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVEZWNsYXJhdGlvbiBpcyBMb2NhbCkgewogICAgICAgICAgICAgIF9ydGlOZWVkQnVpbGRlci5yZWdpc3RlckxvY2FsRnVuY3Rpb25Vc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWwoCiAgICAgICAgICAgICAgICAgIHR5cGVEZWNsYXJhdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMudHlwZVZhcmlhYmxlRXhwcmVzc2lvbik7CiAgICAgICAgICB9CiAgICAgICAgICBoYXNUeXBlTGl0ZXJhbCA9IHRydWU7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLlJUSV9WQUxVRToKICAgICAgICBjYXNlIFR5cGVVc2VLaW5kLlRZUEVfQVJHVU1FTlQ6CiAgICAgICAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAiVW5leHBlY3RlZCB0eXBlIHVzZTogJHR5cGVVc2UuIik7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQoKICAgIGlmIChoYXNBc0Nhc3QpIHsKICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuYXNDaGVjayk7CiAgICB9CgogICAgaWYgKGhhc1R5cGVMaXRlcmFsKSB7CiAgICAgIHRyYW5zZm9ybWVkCiAgICAgICAgICAucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLnR5cGVUeXBlKSk7CiAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnR5cGVMaXRlcmFsKTsKICAgIH0KCiAgICBmb3IgKE1hcExpdGVyYWxVc2UgbWFwTGl0ZXJhbFVzZSBpbiB3b3JsZEltcGFjdC5tYXBMaXRlcmFscykgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgdGhlIFtpc0VtcHR5XSBwcm9wZXJ0eSB3aGVuIGZhY3RvcnkKICAgICAgLy8gY29uc3RydWN0b3JzIGFyZSByZWdpc3RlcmVkIGRpcmVjdGx5LgogICAgICBpZiAobWFwTGl0ZXJhbFVzZS5pc0NvbnN0YW50KSB7CiAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuY29uc3RhbnRNYXBMaXRlcmFsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0cmFuc2Zvcm1lZAogICAgICAgICAgICAucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24obWFwTGl0ZXJhbFVzZS50eXBlKSk7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKFNldExpdGVyYWxVc2Ugc2V0TGl0ZXJhbFVzZSBpbiB3b3JsZEltcGFjdC5zZXRMaXRlcmFscykgewogICAgICBpZiAoc2V0TGl0ZXJhbFVzZS5pc0NvbnN0YW50KSB7CiAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuY29uc3RhbnRTZXRMaXRlcmFsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0cmFuc2Zvcm1lZAogICAgICAgICAgICAucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24oc2V0TGl0ZXJhbFVzZS50eXBlKSk7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKExpc3RMaXRlcmFsVXNlIGxpc3RMaXRlcmFsVXNlIGluIHdvcmxkSW1wYWN0Lmxpc3RMaXRlcmFscykgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgdGhlIFtpc0NvbnN0YW50XSBhbmQgW2lzRW1wdHldIHByb3BlcnR5IHdoZW4KICAgICAgLy8gZmFjdG9yeSBjb25zdHJ1Y3RvcnMgYXJlIHJlZ2lzdGVyZWQgZGlyZWN0bHkuCiAgICAgIHRyYW5zZm9ybWVkCiAgICAgICAgICAucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24obGlzdExpdGVyYWxVc2UudHlwZSkpOwogICAgfQoKICAgIGZvciAoUnVudGltZVR5cGVVc2UgcnVudGltZVR5cGVVc2UgaW4gd29ybGRJbXBhY3QucnVudGltZVR5cGVVc2VzKSB7CiAgICAgIC8vIEVuYWJsZSBydW50aW1lIHR5cGUgc3VwcG9ydCBpZiB3ZSBkaXNjb3ZlciBhIGdldHRlciBjYWxsZWQKICAgICAgLy8gcnVudGltZVR5cGUuIFdlIGhhdmUgdG8gZW5hYmxlIHJ1bnRpbWUgdHlwZSBiZWZvcmUgaGl0dGluZyB0aGUKICAgICAgLy8gY29kZWdlbiwgc28gdGhhdCBjb25zdHJ1Y3RvcnMga25vdyB3aGV0aGVyIHRoZXkgbmVlZCB0byBnZW5lcmF0ZSBjb2RlCiAgICAgIC8vIGZvciBydW50aW1lIHR5cGUuCiAgICAgIF9iYWNrZW5kVXNhZ2VCdWlsZGVyLnJlZ2lzdGVyUnVudGltZVR5cGVVc2UocnVudGltZVR5cGVVc2UpOwogICAgfQoKICAgIGlmICh3b3JsZEltcGFjdC5jb25zdFN5bWJvbE5hbWVzLmlzTm90RW1wdHkpIHsKICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuY29uc3RTeW1ib2wpOwogICAgfQoKICAgIGZvciAoU3RhdGljVXNlIHN0YXRpY1VzZSBpbiB3b3JsZEltcGFjdC5zdGF0aWNVc2VzKSB7CiAgICAgIHN3aXRjaCAoc3RhdGljVXNlLmtpbmQpIHsKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuQ0xPU1VSRToKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmNsb3N1cmUpOwogICAgICAgICAgTG9jYWwgY2xvc3VyZSA9IHN0YXRpY1VzZS5lbGVtZW50OwogICAgICAgICAgRnVuY3Rpb25UeXBlIHR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldExvY2FsRnVuY3Rpb25UeXBlKGNsb3N1cmUpOwogICAgICAgICAgaWYgKHR5cGUuY29udGFpbnNUeXBlVmFyaWFibGVzIHx8CiAgICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2FuIHdlIGF2b2lkIHRoZSBuZWVkIGZvciBzaWduYXR1cmVzIGluCiAgICAgICAgICAgICAgLy8gRGFydCAyPwogICAgICAgICAgICAgIHRydWUpIHsKICAgICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuY29tcHV0ZVNpZ25hdHVyZSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICB9CiAgICB9CgogICAgZm9yIChDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQgaW4gd29ybGRJbXBhY3QuY29uc3RhbnRMaXRlcmFscykgewogICAgICBzd2l0Y2ggKGNvbnN0YW50LmtpbmQpIHsKICAgICAgICBjYXNlIENvbnN0YW50RXhwcmVzc2lvbktpbmQuTlVMTDoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLm51bGxMaXRlcmFsKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQ29uc3RhbnRFeHByZXNzaW9uS2luZC5CT09MOgogICAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuYm9vbExpdGVyYWwpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBDb25zdGFudEV4cHJlc3Npb25LaW5kLklOVDoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmludExpdGVyYWwpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBDb25zdGFudEV4cHJlc3Npb25LaW5kLkRPVUJMRToKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmRvdWJsZUxpdGVyYWwpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBDb25zdGFudEV4cHJlc3Npb25LaW5kLlNUUklORzoKICAgICAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLnN0cmluZ0xpdGVyYWwpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGFzc2VydCgKICAgICAgICAgICAgICBmYWxzZSwKICAgICAgICAgICAgICBmYWlsZWRBdChOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGNvbnN0YW50IGxpdGVyYWw6ICR7Y29uc3RhbnQua2luZH0uIikpOwogICAgICB9CiAgICB9CgogICAgZm9yIChOYXRpdmVCZWhhdmlvciBiZWhhdmlvciBpbiB3b3JsZEltcGFjdC5uYXRpdmVEYXRhKSB7CiAgICAgIF9uYXRpdmVSZXNvbHV0aW9uRW5xdWV1ZXIucmVnaXN0ZXJOYXRpdmVCZWhhdmlvcigKICAgICAgICAgIHRyYW5zZm9ybWVkLCBiZWhhdmlvciwgd29ybGRJbXBhY3QpOwogICAgfQoKICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xhc3NFbnRpdHkgaW4gd29ybGRJbXBhY3Quc2VlbkNsYXNzZXMpIHsKICAgICAgX2NsYXNzSGllcmFyY2h5QnVpbGRlci5yZWdpc3RlckNsYXNzKGNsYXNzRW50aXR5KTsKICAgIH0KCiAgICBpZiAod29ybGRJbXBhY3QuZ2VuZXJpY0luc3RhbnRpYXRpb25zLmlzTm90RW1wdHkpIHsKICAgICAgZm9yIChHZW5lcmljSW5zdGFudGlhdGlvbiBpbnN0YW50aWF0aW9uCiAgICAgICAgICBpbiB3b3JsZEltcGFjdC5nZW5lcmljSW5zdGFudGlhdGlvbnMpIHsKICAgICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cwogICAgICAgICAgICAuZ2V0R2VuZXJpY0luc3RhbnRpYXRpb24oaW5zdGFudGlhdGlvbi50eXBlQXJndW1lbnRzLmxlbmd0aCkpOwogICAgICAgIF9ydGlOZWVkQnVpbGRlci5yZWdpc3RlckdlbmVyaWNJbnN0YW50aWF0aW9uKGluc3RhbnRpYXRpb24pOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIHRyYW5zZm9ybWVkOwogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWF5YmUgc3BsaXQgdGhpcyBpbnRvIFtvbkFzc2VydFR5cGVdIGFuZCBbb25UZXN0VHlwZV0uCiAgdm9pZCBvbklzQ2hlY2soRGFydFR5cGUgdHlwZSwgVHJhbnNmb3JtZWRXb3JsZEltcGFjdCB0cmFuc2Zvcm1lZCkgewogICAgdm9pZCByZWdpc3RlckltcGFjdChCYWNrZW5kSW1wYWN0IGltcGFjdCkgewogICAgICBpbXBhY3QucmVnaXN0ZXJJbXBhY3QodHJhbnNmb3JtZWQsIF9lbGVtZW50RW52aXJvbm1lbnQpOwogICAgICBfYmFja2VuZFVzYWdlQnVpbGRlci5wcm9jZXNzQmFja2VuZEltcGFjdChpbXBhY3QpOwogICAgfQoKICAgIHR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFVuYWxpYXNlZFR5cGUodHlwZSk7CiAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy50eXBlQ2hlY2spOwoKICAgIGlmICghdHlwZS50cmVhdEFzUmF3IHx8IHR5cGUuY29udGFpbnNUeXBlVmFyaWFibGVzIHx8IHR5cGUuaXNGdW5jdGlvblR5cGUpIHsKICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMuZ2VuZXJpY1R5cGVDaGVjayk7CiAgICAgIGlmICh0eXBlLmlzVHlwZVZhcmlhYmxlKSB7CiAgICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMudHlwZVZhcmlhYmxlVHlwZUNoZWNrKTsKICAgICAgfQogICAgfQogICAgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgIHJlZ2lzdGVySW1wYWN0KF9pbXBhY3RzLmZ1bmN0aW9uVHlwZUNoZWNrKTsKICAgIH0KICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUgJiYgX25hdGl2ZUJhc2ljRGF0YS5pc05hdGl2ZUNsYXNzKHR5cGUuZWxlbWVudCkpIHsKICAgICAgcmVnaXN0ZXJJbXBhY3QoX2ltcGFjdHMubmF0aXZlVHlwZUNoZWNrKTsKICAgIH0KICAgIGlmICh0eXBlIGlzIEZ1dHVyZU9yVHlwZSkgewogICAgICByZWdpc3RlckltcGFjdChfaW1wYWN0cy5mdXR1cmVPclR5cGVDaGVjayk7CiAgICB9CiAgfQp9CgpjbGFzcyBDb2RlZ2VuSW1wYWN0VHJhbnNmb3JtZXIgewogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgZmluYWwgQ29tbW9uRWxlbWVudHMgX2NvbW1vbkVsZW1lbnRzOwogIGZpbmFsIEJhY2tlbmRJbXBhY3RzIF9pbXBhY3RzOwogIGZpbmFsIE5hdGl2ZURhdGEgX25hdGl2ZURhdGE7CiAgZmluYWwgQmFja2VuZFVzYWdlIF9iYWNrZW5kVXNhZ2U7CiAgZmluYWwgUnVudGltZVR5cGVzTmVlZCBfcnRpTmVlZDsKICBmaW5hbCBOYXRpdmVDb2RlZ2VuRW5xdWV1ZXIgX25hdGl2ZUNvZGVnZW5FbnF1ZXVlcjsKICBmaW5hbCBOYW1lciBfbmFtZXI7CiAgZmluYWwgT25lU2hvdEludGVyY2VwdG9yRGF0YSBfb25lU2hvdEludGVyY2VwdG9yRGF0YTsKICBmaW5hbCBSdW50aW1lVHlwZXNDaGVja3NCdWlsZGVyIF9ydGlDaGVja3NCdWlsZGVyOwogIGZpbmFsIE5hdGl2ZUVtaXR0ZXIgX25hdGl2ZUVtaXR0ZXI7CgogIENvZGVnZW5JbXBhY3RUcmFuc2Zvcm1lcigKICAgICAgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgdGhpcy5fY29tbW9uRWxlbWVudHMsCiAgICAgIHRoaXMuX2ltcGFjdHMsCiAgICAgIHRoaXMuX25hdGl2ZURhdGEsCiAgICAgIHRoaXMuX2JhY2tlbmRVc2FnZSwKICAgICAgdGhpcy5fcnRpTmVlZCwKICAgICAgdGhpcy5fbmF0aXZlQ29kZWdlbkVucXVldWVyLAogICAgICB0aGlzLl9uYW1lciwKICAgICAgdGhpcy5fb25lU2hvdEludGVyY2VwdG9yRGF0YSwKICAgICAgdGhpcy5fcnRpQ2hlY2tzQnVpbGRlciwKICAgICAgdGhpcy5fbmF0aXZlRW1pdHRlcik7CgogIHZvaWQgb25Jc0NoZWNrRm9yQ29kZWdlbihEYXJ0VHlwZSB0eXBlLCBUcmFuc2Zvcm1lZFdvcmxkSW1wYWN0IHRyYW5zZm9ybWVkKSB7CiAgICBpZiAodHlwZS5pc0R5bmFtaWMpIHJldHVybjsKICAgIGlmICh0eXBlLmlzVm9pZCkgcmV0dXJuOwogICAgdHlwZSA9IHR5cGUudW5hbGlhc2VkOwogICAgX2ltcGFjdHMudHlwZUNoZWNrLnJlZ2lzdGVySW1wYWN0KHRyYW5zZm9ybWVkLCBfZWxlbWVudEVudmlyb25tZW50KTsKCiAgICBpZiAoIXR5cGUudHJlYXRBc1JhdyB8fCB0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcykgewogICAgICBfaW1wYWN0cy5nZW5lcmljSXNDaGVjay5yZWdpc3RlckltcGFjdCh0cmFuc2Zvcm1lZCwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICB9CiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmIF9uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3ModHlwZS5lbGVtZW50KSkgewogICAgICAvLyBXZSB3aWxsIG5lZWVkIHRvIGFkZCB0aGUgIiRpcyIgYW5kICIkYXMiIHByb3BlcnRpZXMgb24gdGhlCiAgICAgIC8vIEphdmFTY3JpcHQgb2JqZWN0IHByb3RvdHlwZSwgc28gd2UgbWFrZSBzdXJlCiAgICAgIC8vIFs6ZGVmaW5lUHJvcGVydHk6XSBpcyBjb21waWxlZC4KICAgICAgX2ltcGFjdHMubmF0aXZlVHlwZUNoZWNrLnJlZ2lzdGVySW1wYWN0KHRyYW5zZm9ybWVkLCBfZWxlbWVudEVudmlyb25tZW50KTsKICAgIH0KICB9CgogIFdvcmxkSW1wYWN0IHRyYW5zZm9ybUNvZGVnZW5JbXBhY3QoQ29kZWdlbkltcGFjdCBpbXBhY3QpIHsKICAgIFRyYW5zZm9ybWVkV29ybGRJbXBhY3QgdHJhbnNmb3JtZWQgPSBuZXcgVHJhbnNmb3JtZWRXb3JsZEltcGFjdChpbXBhY3QpOwoKICAgIGZvciAoVHlwZVVzZSB0eXBlVXNlIGluIGltcGFjdC50eXBlVXNlcykgewogICAgICBEYXJ0VHlwZSB0eXBlID0gdHlwZVVzZS50eXBlOwogICAgICBpZiAodHlwZVVzZS5raW5kID09IFR5cGVVc2VLaW5kLklTX0NIRUNLKSB7CiAgICAgICAgb25Jc0NoZWNrRm9yQ29kZWdlbih0eXBlLCB0cmFuc2Zvcm1lZCk7CiAgICAgIH0KICAgIH0KCiAgICBmb3IgKENvbnN0YW50VXNlIGNvbnN0YW50VXNlIGluIGltcGFjdC5jb25zdGFudFVzZXMpIHsKICAgICAgc3dpdGNoIChjb25zdGFudFVzZS52YWx1ZS5raW5kKSB7CiAgICAgICAgY2FzZSBDb25zdGFudFZhbHVlS2luZC5ERUZFUlJFRF9HTE9CQUw6CiAgICAgICAgICBfY2xvc2VkV29ybGQub3V0cHV0VW5pdERhdGEKICAgICAgICAgICAgICAucmVnaXN0ZXJDb25zdGFudERlZmVycmVkVXNlKGNvbnN0YW50VXNlLnZhbHVlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQoKICAgIGZvciAoUGFpcjxEYXJ0VHlwZSwgRGFydFR5cGU+IGNoZWNrCiAgICAgICAgaW4gaW1wYWN0LnR5cGVWYXJpYWJsZUJvdW5kc1N1YnR5cGVDaGVja3MpIHsKICAgICAgX3J0aUNoZWNrc0J1aWxkZXIucmVnaXN0ZXJUeXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2soCiAgICAgICAgICBjaGVjay5hLCBjaGVjay5iKTsKICAgIH0KCiAgICBmb3IgKFN0YXRpY1VzZSBzdGF0aWNVc2UgaW4gaW1wYWN0LnN0YXRpY1VzZXMpIHsKICAgICAgc3dpdGNoIChzdGF0aWNVc2Uua2luZCkgewogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DQUxMX01FVEhPRDoKICAgICAgICAgIEZ1bmN0aW9uRW50aXR5IGNhbGxNZXRob2QgPSBzdGF0aWNVc2UuZWxlbWVudDsKICAgICAgICAgIGlmIChfcnRpTmVlZC5tZXRob2ROZWVkc1NpZ25hdHVyZShjYWxsTWV0aG9kKSkgewogICAgICAgICAgICBfaW1wYWN0cy5jb21wdXRlU2lnbmF0dXJlCiAgICAgICAgICAgICAgICAucmVnaXN0ZXJJbXBhY3QodHJhbnNmb3JtZWQsIF9lbGVtZW50RW52aXJvbm1lbnQpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNUQVRJQ19URUFSX09GRjoKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuSU5TVEFOQ0VfRklFTERfR0VUOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5JTlNUQU5DRV9GSUVMRF9TRVQ6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLlNVUEVSX0lOVk9LRToKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1RBVElDX0lOVk9LRToKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfRklFTERfU0VUOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9TRVRURVJfU0VUOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVEFUSUNfU0VUOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVVBFUl9URUFSX09GRjoKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuU1VQRVJfR0VUOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5TVEFUSUNfR0VUOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5GSUVMRF9JTklUOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5GSUVMRF9DT05TVEFOVF9JTklUOgogICAgICAgIGNhc2UgU3RhdGljVXNlS2luZC5DT05TVFJVQ1RPUl9JTlZPS0U6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNPTlNUX0NPTlNUUlVDVE9SX0lOVk9LRToKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuRElSRUNUX0lOVk9LRToKICAgICAgICBjYXNlIFN0YXRpY1VzZUtpbmQuSU5MSU5JTkc6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNMT1NVUkU6CiAgICAgICAgY2FzZSBTdGF0aWNVc2VLaW5kLkNMT1NVUkVfQ0FMTDoKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CgogICAgZm9yIChTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXMgaW4gaW1wYWN0LnNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzKSB7CiAgICAgIF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhLnJlZ2lzdGVyU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcigKICAgICAgICAgIGNsYXNzZXMsIF9uYW1lcik7CiAgICB9CgogICAgaWYgKGltcGFjdC51c2VzSW50ZXJjZXB0b3IpIHsKICAgICAgaWYgKF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIuaGFzSW5zdGFudGlhdGVkTmF0aXZlQ2xhc3NlcykgewogICAgICAgIF9pbXBhY3RzLmludGVyY2VwdG9yVXNlCiAgICAgICAgICAgIC5yZWdpc3RlckltcGFjdCh0cmFuc2Zvcm1lZCwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhlc2Ugd29ya2Fyb3VuZHMuCiAgICAgICAgX2JhY2tlbmRVc2FnZS5uZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnID0gdHJ1ZTsKICAgICAgICBfYmFja2VuZFVzYWdlLm5lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5ID0gdHJ1ZTsKICAgICAgfQogICAgfQoKICAgIGZvciAoQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIgaW4gaW1wYWN0LmFzeW5jTWFya2VycykgewogICAgICBzd2l0Y2ggKGFzeW5jTWFya2VyKSB7CiAgICAgICAgY2FzZSBBc3luY01hcmtlci5BU1lOQzoKICAgICAgICAgIF9pbXBhY3RzLmFzeW5jQm9keS5yZWdpc3RlckltcGFjdCh0cmFuc2Zvcm1lZCwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEFzeW5jTWFya2VyLlNZTkNfU1RBUjoKICAgICAgICAgIF9pbXBhY3RzLnN5bmNTdGFyQm9keQogICAgICAgICAgICAgIC5yZWdpc3RlckltcGFjdCh0cmFuc2Zvcm1lZCwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIEFzeW5jTWFya2VyLkFTWU5DX1NUQVI6CiAgICAgICAgICBfaW1wYWN0cy5hc3luY1N0YXJCb2R5CiAgICAgICAgICAgICAgLnJlZ2lzdGVySW1wYWN0KHRyYW5zZm9ybWVkLCBfZWxlbWVudEVudmlyb25tZW50KTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CgogICAgZm9yIChHZW5lcmljSW5zdGFudGlhdGlvbiBpbnN0YW50aWF0aW9uIGluIGltcGFjdC5nZW5lcmljSW5zdGFudGlhdGlvbnMpIHsKICAgICAgX3J0aUNoZWNrc0J1aWxkZXIucmVnaXN0ZXJHZW5lcmljSW5zdGFudGlhdGlvbihpbnN0YW50aWF0aW9uKTsKICAgIH0KCiAgICBmb3IgKE5hdGl2ZUJlaGF2aW9yIGJlaGF2aW9yIGluIGltcGFjdC5uYXRpdmVCZWhhdmlvcnMpIHsKICAgICAgX25hdGl2ZUNvZGVnZW5FbnF1ZXVlci5yZWdpc3Rlck5hdGl2ZUJlaGF2aW9yKAogICAgICAgICAgdHJhbnNmb3JtZWQsIGJlaGF2aW9yLCBpbXBhY3QpOwogICAgfQoKICAgIGZvciAoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gaW4gaW1wYWN0Lm5hdGl2ZU1ldGhvZHMpIHsKICAgICAgX25hdGl2ZUVtaXR0ZXIubmF0aXZlTWV0aG9kcy5hZGQoZnVuY3Rpb24pOwogICAgfQoKICAgIGZvciAoU2VsZWN0b3Igc2VsZWN0b3IgaW4gaW1wYWN0Lm9uZVNob3RJbnRlcmNlcHRvcnMpIHsKICAgICAgX29uZVNob3RJbnRlcmNlcHRvckRhdGEucmVnaXN0ZXJPbmVTaG90SW50ZXJjZXB0b3IoCiAgICAgICAgICBzZWxlY3RvciwgX25hbWVyLCBfY2xvc2VkV29ybGQpOwogICAgfQoKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSBlYWdlciByZWdpc3RyYXRpb24uCiAgICByZXR1cm4gdHJhbnNmb3JtZWQ7CiAgfQp9CoH+AE5OPAEvAUYBGSI8NDo6KCMkISwhIiMkH1EcGBseHSggFRsdKAE+MCghKjwyTDE2KgEfIBwVHSYhLhwjHgEMSCkxATA/OQYBNBkzPxEdOREqNhEcLhEjLxEhMhEmMxEpNREwMCdEMBEhLhErNhErOBErOBErNhEpNhEiLhEgMREnNBErNhEqNhEuOhExOxEjMBEIBgEcITQkHiguLxEjKBEiHz4cKh4MESgfQhwqDBEqHzscKgwRJSgRJ0clMksyHks8HkwzTSQOPQwhESQoUREIBgEVKAYBGhJRLAYBQ0YvJjUPFE0IBgFDJjUPFE0IBgFGTzcSTAYBSURITxtDBgEzLAYBOiAkLC1RLE4ZFjcMEREIBgFIHyowESowESkvESwyESwyERESFS5GCAYBPjgvBgE/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/BAEqNkBHLzUGUSxRKQQCARsbFCcBLwEMF0oCASIUJwEnAQxPAgE1cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQ4c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9qc19lbWl0dGVyLmRhcnSCiS8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfZW1pdHRlcjsKCmV4cG9ydCAnY2xhc3Nfc3R1Yl9nZW5lcmF0b3IuZGFydCc7CmV4cG9ydCAnY29kZV9lbWl0dGVyX3Rhc2suZGFydCc7CmV4cG9ydCAnaW5zdGFudGlhdGlvbl9zdHViX2dlbmVyYXRvci5kYXJ0JzsKZXhwb3J0ICdpbnRlcmNlcHRvcl9zdHViX2dlbmVyYXRvci5kYXJ0JzsKZXhwb3J0ICdtYWluX2NhbGxfc3R1Yl9nZW5lcmF0b3IuZGFydCc7CmV4cG9ydCAnbWV0YWRhdGFfY29sbGVjdG9yLmRhcnQnOwpleHBvcnQgJ25hdGl2ZV9lbWl0dGVyLmRhcnQnOwpleHBvcnQgJ25hdGl2ZV9nZW5lcmF0b3IuZGFydCc7CmV4cG9ydCAncGFyYW1ldGVyX3N0dWJfZ2VuZXJhdG9yLmRhcnQnOwpleHBvcnQgJ3J1bnRpbWVfdHlwZV9nZW5lcmF0b3IuZGFydCc7CmV4cG9ydCAndHlwZV90ZXN0X3JlZ2lzdHJ5LmRhcnQnOwoTAE5OPAEcASQhLCooIh4gKCYiAS9wYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL2pzX2VtaXR0ZXIuZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9uYXRpdmUvZW5xdWV1ZS5kYXJ0rI4vLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBDb21tb25FbGVtZW50cywgRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCcgc2hvdyBOYXRpdmVEYXRhOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIvanNfZW1pdHRlci5kYXJ0JyBzaG93IENvZGVFbWl0dGVyVGFzaywgTmF0aXZlRW1pdHRlcjsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3VzZS5kYXJ0JyBzaG93IFR5cGVVc2U7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnCiAgICBzaG93IFdvcmxkSW1wYWN0LCBXb3JsZEltcGFjdEJ1aWxkZXIsIFdvcmxkSW1wYWN0QnVpbGRlckltcGw7CmltcG9ydCAnYmVoYXZpb3IuZGFydCc7CmltcG9ydCAncmVzb2x2ZXIuZGFydCcgc2hvdyBOYXRpdmVDbGFzc0ZpbmRlcjsKCi8vLyBUaGlzIGNvdWxkIGJlIGFuIGFic3RyYWN0IGNsYXNzIGJ1dCB3ZSB1c2UgaXQgYXMgYSBzdHViIGZvciB0aGUKLy8vIGRhcnRfYmFja2VuZC4KY2xhc3MgTmF0aXZlRW5xdWV1ZXIgewogIC8vLyBDYWxsZWQgd2hlbiBhIFt0eXBlXSBoYXMgYmVlbiBpbnN0YW50aWF0ZWQgbmF0aXZlbHkuCiAgdm9pZCBvbkluc3RhbnRpYXRlZFR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlKSB7fQoKICAvLy8gSW5pdGlhbCBlbnRyeSBwb2ludCB0byBuYXRpdmUgZW5xdWV1ZXIuCiAgV29ybGRJbXBhY3QgcHJvY2Vzc05hdGl2ZUNsYXNzZXMoSXRlcmFibGU8VXJpPiBsaWJyYXJpZXMpID0+CiAgICAgIGNvbnN0IFdvcmxkSW1wYWN0KCk7CgogIC8vLyBSZWdpc3RlcnMgdGhlIFtuYXRpdmVCZWhhdmlvcl0uIEFkZHMgdGhlIGxpdmVuZXNzIG9mIGl0cyBpbnN0YW50aWF0ZWQKICAvLy8gdHlwZXMgdG8gdGhlIHdvcmxkLgogIHZvaWQgcmVnaXN0ZXJOYXRpdmVCZWhhdmlvcigKICAgICAgV29ybGRJbXBhY3RCdWlsZGVyIGltcGFjdEJ1aWxkZXIsIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yLCBjYXVzZSkge30KCiAgLy8vIFJldHVybnMgd2hldGhlciBuYXRpdmUgY2xhc3NlcyBhcmUgYmVpbmcgdXNlZC4KICBib29sIGdldCBoYXNJbnN0YW50aWF0ZWROYXRpdmVDbGFzc2VzID0+IGZhbHNlOwoKICAvLy8gRW1pdHMgYSBzdW1tYXJ5IGluZm9ybWF0aW9uIHVzaW5nIHRoZSBbbG9nXSBmdW5jdGlvbi4KICB2b2lkIGxvZ1N1bW1hcnkodm9pZCBsb2coU3RyaW5nIG1lc3NhZ2UpKSB7fQp9CgphYnN0cmFjdCBjbGFzcyBOYXRpdmVFbnF1ZXVlckJhc2UgaW1wbGVtZW50cyBOYXRpdmVFbnF1ZXVlciB7CiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBfcmVnaXN0ZXJlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX3VudXNlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBoYXNJbnN0YW50aWF0ZWROYXRpdmVDbGFzc2VzID0+ICFfcmVnaXN0ZXJlZENsYXNzZXMuaXNFbXB0eTsKCiAgLy8vIExvZyBtZXNzYWdlIHJlcG9ydGVkIGlmIGFsbCBuYXRpdmUgdHlwZXMgYXJlIHVzZWQuCiAgU3RyaW5nIF9hbGxVc2VkTWVzc2FnZTsKCiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIERhcnRUeXBlcyBfZGFydFR5cGVzOwogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKCiAgLy8vIFN1YmNsYXNzZXMgb2YgW05hdGl2ZUVucXVldWVyQmFzZV0gYXJlIGNvbnN0cnVjdGVkIGJ5IHRoZSBiYWNrZW5kLgogIE5hdGl2ZUVucXVldWVyQmFzZSh0aGlzLl9vcHRpb25zLCB0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIHRoaXMuX2NvbW1vbkVsZW1lbnRzLCB0aGlzLl9kYXJ0VHlwZXMpOwoKICBib29sIGdldCBlbmFibGVMaXZlVHlwZUFuYWx5c2lzID0+IF9vcHRpb25zLmVuYWJsZU5hdGl2ZUxpdmVUeXBlQW5hbHlzaXM7CgogIEBvdmVycmlkZQogIHZvaWQgb25JbnN0YW50aWF0ZWRUeXBlKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgaWYgKF91bnVzZWRDbGFzc2VzLnJlbW92ZSh0eXBlLmVsZW1lbnQpKSB7CiAgICAgIF9yZWdpc3RlcmVkQ2xhc3Nlcy5hZGQodHlwZS5lbGVtZW50KTsKICAgIH0KICB9CgogIC8vLyBSZWdpc3RlciBbY2xhc3Nlc10gYXMgbmF0aXZlbHkgaW5zdGFudGlhdGVkIGluIFtpbXBhY3RCdWlsZGVyXS4KICB2b2lkIF9yZWdpc3RlclR5cGVVc2VzKAogICAgICBXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlciwgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzLCBjYXVzZSkgewogICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gY2xhc3NlcykgewogICAgICBpZiAoIV91bnVzZWRDbGFzc2VzLmNvbnRhaW5zKGNscykpIHsKICAgICAgICAvLyBObyBuZWVkIHRvIGFkZCBbY2xhc3NFbGVtZW50XSB0byBbaW1wYWN0QnVpbGRlcl06IGl0IGhhcyBhbHJlYWR5IGJlZW4KICAgICAgICAvLyBpbnN0YW50aWF0ZWQgYW5kIHdlIGRvbid0IHRyYWNrIG9yaWdpbnMgb2YgbmF0aXZlIGluc3RhbnRpYXRpb25zCiAgICAgICAgLy8gcHJlY2lzZWx5LgogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJUeXBlVXNlKAogICAgICAgICAgbmV3IFR5cGVVc2UubmF0aXZlSW5zdGFudGlhdGlvbihfZWxlbWVudEVudmlyb25tZW50LmdldFJhd1R5cGUoY2xzKSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck5hdGl2ZUJlaGF2aW9yKAogICAgICBXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlciwgTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IsIGNhdXNlKSB7CiAgICBfcHJvY2Vzc05hdGl2ZUJlaGF2aW9yKGltcGFjdEJ1aWxkZXIsIG5hdGl2ZUJlaGF2aW9yLCBjYXVzZSk7CiAgfQoKICB2b2lkIF9wcm9jZXNzTmF0aXZlQmVoYXZpb3IoCiAgICAgIFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyLCBOYXRpdmVCZWhhdmlvciBiZWhhdmlvciwgY2F1c2UpIHsKICAgIHZvaWQgcmVnaXN0ZXJJbnN0YW50aWF0aW9uKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5uYXRpdmVJbnN0YW50aWF0aW9uKHR5cGUpKTsKICAgIH0KCiAgICBpbnQgdW51c2VkQmVmb3JlID0gX3VudXNlZENsYXNzZXMubGVuZ3RoOwogICAgU2V0PENsYXNzRW50aXR5PiBtYXRjaGluZ0NsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgZm9yICh2YXIgdHlwZSBpbiBiZWhhdmlvci50eXBlc0luc3RhbnRpYXRlZCkgewogICAgICBpZiAodHlwZSBpcyBTcGVjaWFsVHlwZSkgewogICAgICAgIGlmICh0eXBlID09IFNwZWNpYWxUeXBlLkpzT2JqZWN0KSB7CiAgICAgICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGUpOwogICAgICAgIH0KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgaWYgKHR5cGUgPT0gX2NvbW1vbkVsZW1lbnRzLm51bVR5cGUpIHsKICAgICAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMuZG91YmxlVHlwZSk7CiAgICAgICAgICByZWdpc3Rlckluc3RhbnRpYXRpb24oX2NvbW1vbkVsZW1lbnRzLmludFR5cGUpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBfY29tbW9uRWxlbWVudHMuaW50VHlwZSB8fAogICAgICAgICAgICB0eXBlID09IF9jb21tb25FbGVtZW50cy5kb3VibGVUeXBlIHx8CiAgICAgICAgICAgIHR5cGUgPT0gX2NvbW1vbkVsZW1lbnRzLnN0cmluZ1R5cGUgfHwKICAgICAgICAgICAgdHlwZSA9PSBfY29tbW9uRWxlbWVudHMubnVsbFR5cGUgfHwKICAgICAgICAgICAgdHlwZSA9PSBfY29tbW9uRWxlbWVudHMuYm9vbFR5cGUgfHwKICAgICAgICAgICAgX2RhcnRUeXBlcy5pc1N1YnR5cGUodHlwZSwKICAgICAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0UmF3VHlwZShfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKSkpIHsKICAgICAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbih0eXBlKTsKICAgICAgICB9CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW1wcm92ZSBzcGVjIHN0cmluZyBwcmVjaXNpb24gdG8gaGFuZGxlIHR5cGUKICAgICAgICAvLyBhcmd1bWVudHMgYW5kIGltcGxlbWVudHMgcmVsYXRpb25zIHRoYXQgcHJlc2VydmUgZ2VuZXJpY3MuIEN1cnJlbnRseQogICAgICAgIC8vIHdlIGNhbm5vdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIGBMaXN0YCwgYExpc3Q8ZHluYW1pYz5gLCBhbmQKICAgICAgICAvLyBgTGlzdDxpbnQ+YCBhbmQgdGFrZSBhbGwgdG8gbWVhbiBgTGlzdDxFPmA7IGluIGVmZmVjdCBub3QgaW5jbHVkaW5nCiAgICAgICAgLy8gYW55IG5hdGl2ZSBzdWJjbGFzc2VzIG9mIGdlbmVyaWMgY2xhc3Nlcy4KICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIsc3JhKTogRmluZCBhbmQgcmVwbGFjZSB1c2VzIG9mIGBMaXN0YCB3aXRoIHRoZQogICAgICAgIC8vIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzIHN1Y2ggYXMgYEpTQXJyYXlgIGV0IGFsLgogICAgICAgIG1hdGNoaW5nQ2xhc3NlcwogICAgICAgICAgICAuYWRkQWxsKF9maW5kVW51c2VkQ2xhc3Nlc01hdGNoaW5nKChDbGFzc0VudGl0eSBuYXRpdmVDbGFzcykgewogICAgICAgICAgSW50ZXJmYWNlVHlwZSBuYXRpdmVUeXBlID0KICAgICAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldFJhd1R5cGUobmF0aXZlQ2xhc3MpOwogICAgICAgICAgSW50ZXJmYWNlVHlwZSBzcGVjVHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0UmF3VHlwZSh0eXBlLmVsZW1lbnQpOwogICAgICAgICAgcmV0dXJuIF9kYXJ0VHlwZXMuaXNTdWJ0eXBlKG5hdGl2ZVR5cGUsIHNwZWNUeXBlKTsKICAgICAgICB9KSk7CiAgICAgIH0gZWxzZSBpZiAodHlwZS5pc0R5bmFtaWMpIHsKICAgICAgICBtYXRjaGluZ0NsYXNzZXMuYWRkQWxsKF91bnVzZWRDbGFzc2VzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQodHlwZSBpcyBWb2lkVHlwZSwgJyR0eXBlIHdhcyAke3R5cGUucnVudGltZVR5cGV9Jyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChtYXRjaGluZ0NsYXNzZXMuaXNOb3RFbXB0eSAmJiBfcmVnaXN0ZXJlZENsYXNzZXMuaXNFbXB0eSkgewogICAgICBtYXRjaGluZ0NsYXNzZXMuYWRkQWxsKF9vbkZpcnN0TmF0aXZlQ2xhc3MoaW1wYWN0QnVpbGRlcikpOwogICAgfQogICAgX3JlZ2lzdGVyVHlwZVVzZXMoaW1wYWN0QnVpbGRlciwgbWF0Y2hpbmdDbGFzc2VzLCBjYXVzZSk7CgogICAgLy8gR2l2ZSBhbiBpbmZvIHNvIHRoYXQgbGlicmFyeSBkZXZlbG9wZXJzIGNhbiBjb21waWxlIHdpdGggLXYgdG8gZmluZCB3aHkKICAgIC8vIGFsbCB0aGUgbmF0aXZlIGNsYXNzZXMgYXJlIGluY2x1ZGVkLgogICAgaWYgKHVudXNlZEJlZm9yZSA+IDAgJiYgdW51c2VkQmVmb3JlID09IG1hdGNoaW5nQ2xhc3Nlcy5sZW5ndGgpIHsKICAgICAgX2FsbFVzZWRNZXNzYWdlID8/PSAnQWxsIG5hdGl2ZSB0eXBlcyBtYXJrZWQgYXMgdXNlZCBkdWUgdG8gJGNhdXNlLic7CiAgICB9CiAgfQoKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gX2ZpbmRVbnVzZWRDbGFzc2VzTWF0Y2hpbmcoCiAgICAgIGJvb2wgcHJlZGljYXRlKENsYXNzRW50aXR5IGNsYXNzRWxlbWVudCkpIHsKICAgIHJldHVybiBfdW51c2VkQ2xhc3Nlcy53aGVyZShwcmVkaWNhdGUpOwogIH0KCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IF9vbkZpcnN0TmF0aXZlQ2xhc3MoV29ybGRJbXBhY3RCdWlsZGVyIGltcGFjdEJ1aWxkZXIpIHsKICAgIHJldHVybiBfZmluZE5hdGl2ZUV4Y2VwdGlvbnMoKTsKICB9CgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBfZmluZE5hdGl2ZUV4Y2VwdGlvbnMoKSB7CiAgICByZXR1cm4gX2ZpbmRVbnVzZWRDbGFzc2VzTWF0Y2hpbmcoKENsYXNzRW50aXR5IGNsYXNzRWxlbWVudCkgewogICAgICAvLyBUT0RPKHNyYSk6IEFubm90YXRlIGV4Y2VwdGlvbiBjbGFzc2VzIGluIGRhcnQ6aHRtbC4KICAgICAgU3RyaW5nIG5hbWUgPSBjbGFzc0VsZW1lbnQubmFtZTsKICAgICAgaWYgKG5hbWUuY29udGFpbnMoJ0V4Y2VwdGlvbicpKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKG5hbWUuY29udGFpbnMoJ0Vycm9yJykpIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgbG9nU3VtbWFyeSh2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSkpIHsKICAgIGlmIChfYWxsVXNlZE1lc3NhZ2UgIT0gbnVsbCkgewogICAgICBsb2coX2FsbFVzZWRNZXNzYWdlKTsKICAgIH0KICB9Cn0KCmNsYXNzIE5hdGl2ZVJlc29sdXRpb25FbnF1ZXVlciBleHRlbmRzIE5hdGl2ZUVucXVldWVyQmFzZSB7CiAgZmluYWwgTmF0aXZlQ2xhc3NGaW5kZXIgX25hdGl2ZUNsYXNzRmluZGVyOwoKICAvLy8gVGhlIHNldCBvZiBhbGwgbmF0aXZlIGNsYXNzZXMuICBFYWNoIG5hdGl2ZSBjbGFzcyBpcyBpbiBbbmF0aXZlQ2xhc3Nlc10KICAvLy8gYW5kIGV4YWN0bHkgb25lIG9mIFt1bnVzZWRDbGFzc2VzXSBhbmQgW3JlZ2lzdGVyZWRDbGFzc2VzXS4KICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IF9uYXRpdmVDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgTmF0aXZlUmVzb2x1dGlvbkVucXVldWVyKAogICAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucywKICAgICAgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIERhcnRUeXBlcyBkYXJ0VHlwZXMsCiAgICAgIHRoaXMuX25hdGl2ZUNsYXNzRmluZGVyKQogICAgICA6IHN1cGVyKG9wdGlvbnMsIGVsZW1lbnRFbnZpcm9ubWVudCwgY29tbW9uRWxlbWVudHMsIGRhcnRUeXBlcyk7CgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgbmF0aXZlQ2xhc3Nlc0ZvclRlc3RpbmcgPT4gX25hdGl2ZUNsYXNzZXM7CgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgcmVnaXN0ZXJlZENsYXNzZXNGb3JUZXN0aW5nID0+IF9yZWdpc3RlcmVkQ2xhc3NlczsKCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBsaXZlTmF0aXZlQ2xhc3NlcyA9PiBfcmVnaXN0ZXJlZENsYXNzZXM7CgogIEBvdmVycmlkZQogIFdvcmxkSW1wYWN0IHByb2Nlc3NOYXRpdmVDbGFzc2VzKEl0ZXJhYmxlPFVyaT4gbGlicmFyaWVzKSB7CiAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIGltcGFjdEJ1aWxkZXIgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IG5hdGl2ZUNsYXNzZXMgPQogICAgICAgIF9uYXRpdmVDbGFzc0ZpbmRlci5jb21wdXRlTmF0aXZlQ2xhc3NlcyhsaWJyYXJpZXMpOwogICAgX25hdGl2ZUNsYXNzZXMuYWRkQWxsKG5hdGl2ZUNsYXNzZXMpOwogICAgX3VudXNlZENsYXNzZXMuYWRkQWxsKG5hdGl2ZUNsYXNzZXMpOwogICAgaWYgKCFlbmFibGVMaXZlVHlwZUFuYWx5c2lzKSB7CiAgICAgIF9yZWdpc3RlclR5cGVVc2VzKGltcGFjdEJ1aWxkZXIsIF9uYXRpdmVDbGFzc2VzLCAnZm9yY2VkJyk7CiAgICB9CiAgICByZXR1cm4gaW1wYWN0QnVpbGRlcjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgbG9nU3VtbWFyeSh2b2lkIGxvZyhTdHJpbmcgbWVzc2FnZSkpIHsKICAgIHN1cGVyLmxvZ1N1bW1hcnkobG9nKTsKICAgIGxvZygnUmVzb2x2ZWQgJHtfcmVnaXN0ZXJlZENsYXNzZXMubGVuZ3RofSBuYXRpdmUgZWxlbWVudHMgdXNlZCwgJwogICAgICAgICcke191bnVzZWRDbGFzc2VzLmxlbmd0aH0gbmF0aXZlIGVsZW1lbnRzIGRlYWQuJyk7CiAgfQp9CgpjbGFzcyBOYXRpdmVDb2RlZ2VuRW5xdWV1ZXIgZXh0ZW5kcyBOYXRpdmVFbnF1ZXVlckJhc2UgewogIGZpbmFsIENvZGVFbWl0dGVyVGFzayBfZW1pdHRlcjsKICBmaW5hbCBJdGVyYWJsZTxDbGFzc0VudGl0eT4gX25hdGl2ZUNsYXNzZXM7CiAgZmluYWwgTmF0aXZlRGF0YSBfbmF0aXZlRGF0YTsKCiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBfZG9uZUFkZFN1YnR5cGVzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgTmF0aXZlQ29kZWdlbkVucXVldWVyKAogICAgICBDb21waWxlck9wdGlvbnMgb3B0aW9ucywKICAgICAgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIERhcnRUeXBlcyBkYXJ0VHlwZXMsCiAgICAgIHRoaXMuX2VtaXR0ZXIsCiAgICAgIHRoaXMuX25hdGl2ZUNsYXNzZXMsCiAgICAgIHRoaXMuX25hdGl2ZURhdGEpCiAgICAgIDogc3VwZXIob3B0aW9ucywgZWxlbWVudEVudmlyb25tZW50LCBjb21tb25FbGVtZW50cywgZGFydFR5cGVzKTsKCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgcHJvY2Vzc05hdGl2ZUNsYXNzZXMoSXRlcmFibGU8VXJpPiBsaWJyYXJpZXMpIHsKICAgIFdvcmxkSW1wYWN0QnVpbGRlckltcGwgaW1wYWN0QnVpbGRlciA9IG5ldyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CiAgICBfdW51c2VkQ2xhc3Nlcy5hZGRBbGwoX25hdGl2ZUNsYXNzZXMpOwoKICAgIGlmICghZW5hYmxlTGl2ZVR5cGVBbmFseXNpcykgewogICAgICBfcmVnaXN0ZXJUeXBlVXNlcyhpbXBhY3RCdWlsZGVyLCBfbmF0aXZlQ2xhc3NlcywgJ2ZvcmNlZCcpOwogICAgfQoKICAgIC8vIEhBQ0sgSEFDSyAtIGFkZCBhbGwgdGhlIHJlc29sdmVkIGNsYXNzZXMuCiAgICBTZXQ8Q2xhc3NFbnRpdHk+IG1hdGNoaW5nQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICBmb3IgKENsYXNzRW50aXR5IGNsYXNzRWxlbWVudCBpbiBfbmF0aXZlQ2xhc3NlcykgewogICAgICBpZiAoX3VudXNlZENsYXNzZXMuY29udGFpbnMoY2xhc3NFbGVtZW50KSkgewogICAgICAgIG1hdGNoaW5nQ2xhc3Nlcy5hZGQoY2xhc3NFbGVtZW50KTsKICAgICAgfQogICAgfQogICAgaWYgKG1hdGNoaW5nQ2xhc3Nlcy5pc05vdEVtcHR5ICYmIF9yZWdpc3RlcmVkQ2xhc3Nlcy5pc0VtcHR5KSB7CiAgICAgIG1hdGNoaW5nQ2xhc3Nlcy5hZGRBbGwoX29uRmlyc3ROYXRpdmVDbGFzcyhpbXBhY3RCdWlsZGVyKSk7CiAgICB9CiAgICBfcmVnaXN0ZXJUeXBlVXNlcyhpbXBhY3RCdWlsZGVyLCBtYXRjaGluZ0NsYXNzZXMsICd3YXMgcmVzb2x2ZWQnKTsKICAgIHJldHVybiBpbXBhY3RCdWlsZGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBfcmVnaXN0ZXJUeXBlVXNlcygKICAgICAgV29ybGRJbXBhY3RCdWlsZGVyIGltcGFjdEJ1aWxkZXIsIFNldDxDbGFzc0VudGl0eT4gY2xhc3NlcywgY2F1c2UpIHsKICAgIHN1cGVyLl9yZWdpc3RlclR5cGVVc2VzKGltcGFjdEJ1aWxkZXIsIGNsYXNzZXMsIGNhdXNlKTsKCiAgICBmb3IgKENsYXNzRW50aXR5IGNsYXNzRWxlbWVudCBpbiBjbGFzc2VzKSB7CiAgICAgIC8vIEFkZCB0aGUgaW5mb3JtYXRpb24gdGhhdCB0aGlzIGNsYXNzIGlzIGEgc3VidHlwZSBvZiBpdHMgc3VwZXJ0eXBlcy4gVGhlCiAgICAgIC8vIGNvZGUgZW1pdHRlciBhbmQgdGhlIHNzYSBidWlsZGVyIHVzZSB0aGF0IGluZm9ybWF0aW9uLgogICAgICBfYWRkU3VidHlwZXMoY2xhc3NFbGVtZW50LCBfZW1pdHRlci5uYXRpdmVFbWl0dGVyKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZFN1YnR5cGVzKENsYXNzRW50aXR5IGNscywgTmF0aXZlRW1pdHRlciBlbWl0dGVyKSB7CiAgICBpZiAoIV9uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKSkgcmV0dXJuOwogICAgaWYgKF9kb25lQWRkU3VidHlwZXMuY29udGFpbnMoY2xzKSkgcmV0dXJuOwogICAgX2RvbmVBZGRTdWJ0eXBlcy5hZGQoY2xzKTsKCiAgICAvLyBXYWxrIHRoZSBzdXBlcmNsYXNzIGNoYWluIHNpbmNlIGNsYXNzZXMgb24gdGhlIHN1cGVyY2xhc3MgY2hhaW4gbWlnaHQgbm90CiAgICAvLyBiZSBpbnN0YW50aWF0ZWQgKGFic3RyYWN0IG9yIHNpbXBseSB1bnVzZWQpLgogICAgX2FkZFN1YnR5cGVzKF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjbHMpLCBlbWl0dGVyKTsKCiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hTdXBlcnR5cGUoY2xzLCAoSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICAgIExpc3Q8Q2xhc3NFbnRpdHk+IHN1YnR5cGVzID0KICAgICAgICAgIGVtaXR0ZXIuc3VidHlwZXNbdHlwZS5lbGVtZW50XSA/Pz0gPENsYXNzRW50aXR5PltdOwogICAgICBzdWJ0eXBlcy5hZGQoY2xzKTsKICAgIH0pOwoKICAgIC8vIFNraXAgdGhyb3VnaCBhbGwgdGhlIG1peGluIGFwcGxpY2F0aW9ucyBpbiB0aGUgc3VwZXIgY2xhc3MKICAgIC8vIGNoYWluLiBUaGF0IHdheSwgdGhlIGRpcmVjdCBzdWJ0eXBlcyBzZXQgb25seSBjb250YWluIHRoZQogICAgLy8gbmF0aXZlcyBjbGFzc2VzLgogICAgQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcyA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjbHMpOwogICAgd2hpbGUgKHN1cGVyY2xhc3MgIT0gbnVsbCAmJgogICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuaXNNaXhpbkFwcGxpY2F0aW9uKHN1cGVyY2xhc3MpKSB7CiAgICAgIGFzc2VydCghX25hdGl2ZURhdGEuaXNOYXRpdmVDbGFzcyhzdXBlcmNsYXNzKSk7CiAgICAgIHN1cGVyY2xhc3MgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3Moc3VwZXJjbGFzcyk7CiAgICB9CgogICAgTGlzdDxDbGFzc0VudGl0eT4gZGlyZWN0U3VidHlwZXMgPQogICAgICAgIGVtaXR0ZXIuZGlyZWN0U3VidHlwZXNbc3VwZXJjbGFzc10gPz89IDxDbGFzc0VudGl0eT5bXTsKICAgIGRpcmVjdFN1YnR5cGVzLmFkZChjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBsb2dTdW1tYXJ5KHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlKSkgewogICAgc3VwZXIubG9nU3VtbWFyeShsb2cpOwogICAgbG9nKCdDb21waWxlZCAke19yZWdpc3RlcmVkQ2xhc3Nlcy5sZW5ndGh9IG5hdGl2ZSBjbGFzc2VzLCAnCiAgICAgICAgJyR7X3VudXNlZENsYXNzZXMubGVuZ3RofSBuYXRpdmUgY2xhc3NlcyBvbWl0dGVkLicpOwogIH0KfQqBMwBOTjwBSiQhOUwaLCdCGC8BRBIXOzEBLj8bAUwaH1EBNTIBPC8CAT5GQgEMSAE5GgEiMB4oAUk+LgFMAQwwLywGBAFGGksnK1FMFhIIJVEGBAEMH1BCBAEfSjVMBgEuPzMhLD0KEggjLz06NjIyMDAnUScKTVBGTzVNQhhLJTtRPQ0jMA9DCAZEQgY+AU8sRkwGBAE0MiwEAVAkBAEyQz0nMy8UCAQBDC4jHAYEAgE8LgFOQkIBHB8tJRsfRwFHAU8BRQEMPkkqPCoqI0IGGgQBDC4bRzsEAgE5Ii4gAUQBGR8tJRsVGxhHAQw+SSsBI0IGATE/NzMrCAZEQgZHGgQBDBpLPAEwUUA6BgQBPjEwHwFRNEMBRSM+GQgBQkEYRSE+NkIGASdAHQQBDC4bQT0EAgEocGFja2FnZTpjb21waWxlci9zcmMvbmF0aXZlL2VucXVldWUuZGFydDVzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2EvYnVpbGRlcl9rZXJuZWwuZGFydMAEIKwvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmpzX3J1bnRpbWUvc2hhcmVkL2VtYmVkZGVkX25hbWVzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL2NvZGVnZW4uZGFydCcgc2hvdyBDb2RlZ2VuUmVnaXN0cnk7CmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RhbnRfc3lzdGVtLmRhcnQnIGFzIGNvbnN0YW50X3N5c3RlbTsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCc7CmltcG9ydCAnLi4vZHVtcF9pbmZvLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2p1bXBzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGUuZGFydCc7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGVfcHJvdmlkZXIuZGFydCc7CmltcG9ydCAnLi4vaXIvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2JhY2tlbmQuZGFydCcgc2hvdyBGdW5jdGlvbklubGluZUNhY2hlOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydCcKICAgIHNob3cgRmllbGRBbmFseXNpc0RhdGEsIEpGaWVsZEFuYWx5c2lzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2luZmVycmVkX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYW1lci5kYXJ0JyBzaG93IE1vZHVsYXJOYW1lcjsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9qc19lbWl0dGVyL2NvZGVfZW1pdHRlcl90YXNrLmRhcnQnIHNob3cgTW9kdWxhckVtaXR0ZXI7CmltcG9ydCAnLi4vanNfbW9kZWwvbG9jYWxzLmRhcnQnIHNob3cgSnVtcFZpc2l0b3I7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudHMuZGFydCcgc2hvdyBKR2VuZXJhdG9yQm9keTsKaW1wb3J0ICcuLi9qc19tb2RlbC9lbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC9qc19zdHJhdGVneS5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwvaW52b2NhdGlvbl9taXJyb3JfY29uc3RhbnRzLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9iZWhhdmlvci5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvanMuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi90cmFjZXIuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvZmVhdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9tZW1iZXJfdXNhZ2UuZGFydCcgc2hvdyBNZW1iZXJBY2Nlc3M7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2lkZV9lZmZlY3RzLmRhcnQnIHNob3cgU2lkZUVmZmVjdHM7CmltcG9ydCAnLi4vdW5pdmVyc2UvdGFyZ2V0X2NoZWNrcy5kYXJ0JyBzaG93IFRhcmdldENoZWNrczsKaW1wb3J0ICcuLi91bml2ZXJzZS91c2UuZGFydCcgc2hvdyBDb25zdGFudFVzZSwgU3RhdGljVXNlOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnOwppbXBvcnQgJ2p1bXBfaGFuZGxlci5kYXJ0JzsKaW1wb3J0ICdrZXJuZWxfc3RyaW5nX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnbG9jYWxzX2hhbmRsZXIuZGFydCc7CmltcG9ydCAnbG9vcF9oYW5kbGVyLmRhcnQnOwppbXBvcnQgJ25vZGVzLmRhcnQnOwppbXBvcnQgJ3NzYV9icmFuY2hfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICdzd2l0Y2hfY29udGludWVfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAndHlwZV9idWlsZGVyLmRhcnQnOwoKLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWVyZ2UgdGhpcyB3aXRoIFtLZXJuZWxJbmxpbmluZ1N0YXRlXS4KY2xhc3MgU3RhY2tGcmFtZSB7CiAgZmluYWwgU3RhY2tGcmFtZSBwYXJlbnQ7CiAgZmluYWwgTWVtYmVyRW50aXR5IG1lbWJlcjsKICBmaW5hbCBBc3luY01hcmtlciBhc3luY01hcmtlcjsKICBmaW5hbCBLZXJuZWxUb0xvY2Fsc01hcCBsb2NhbHNNYXA7CiAgLy8gW2lyLkxldF0gYW5kIFtpci5Mb2NhbEluaXRpYWxpemVyXSBiaW5kaW5ncy4KICBmaW5hbCBNYXA8aXIuVmFyaWFibGVEZWNsYXJhdGlvbiwgSEluc3RydWN0aW9uPiBsZXRCaW5kaW5nczsKICBmaW5hbCBLZXJuZWxUb1R5cGVJbmZlcmVuY2VNYXAgdHlwZUluZmVyZW5jZU1hcDsKICBmaW5hbCBTb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIgc291cmNlSW5mb3JtYXRpb25CdWlsZGVyOwogIGZpbmFsIFN0YXRpY1R5cGVQcm92aWRlciBzdGF0aWNUeXBlUHJvdmlkZXI7CgogIFN0YWNrRnJhbWUoCiAgICAgIHRoaXMucGFyZW50LAogICAgICB0aGlzLm1lbWJlciwKICAgICAgdGhpcy5hc3luY01hcmtlciwKICAgICAgdGhpcy5sb2NhbHNNYXAsCiAgICAgIHRoaXMubGV0QmluZGluZ3MsCiAgICAgIHRoaXMudHlwZUluZmVyZW5jZU1hcCwKICAgICAgdGhpcy5zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIsCiAgICAgIHRoaXMuc3RhdGljVHlwZVByb3ZpZGVyKTsKfQoKY2xhc3MgS2VybmVsU3NhR3JhcGhCdWlsZGVyIGV4dGVuZHMgaXIuVmlzaXRvciB7CiAgLy8vIEhvbGRzIHRoZSByZXN1bHRpbmcgU1NBIGdyYXBoLgogIGZpbmFsIEhHcmFwaCBncmFwaCA9IG5ldyBIR3JhcGgoKTsKCiAgLy8vIFRydWUgaWYgdGhlIGJ1aWxkZXIgaXMgcHJvY2Vzc2luZyBub2RlcyBpbnNpZGUgYSB0cnkgc3RhdGVtZW50LiBUaGlzIGlzCiAgLy8vIGltcG9ydGFudCBmb3IgZ2VuZXJhdGluZyBjb250cm9sIGZsb3cgb3V0IG9mIGEgdHJ5IGJsb2NrIGxpa2UgcmV0dXJucyBvcgogIC8vLyBicmVha3MuCiAgYm9vbCBfaW5UcnlTdGF0ZW1lbnQgPSBmYWxzZTsKCiAgLy8vIFVzZWQgdG8gdHJhY2sgdGhlIGxvY2FscyB3aGlsZSBidWlsZGluZyB0aGUgZ3JhcGguCiAgTG9jYWxzSGFuZGxlciBsb2NhbHNIYW5kbGVyOwoKICAvLy8gQSBzdGFjayBvZiBpbnN0cnVjdGlvbnMuCiAgLy8vCiAgLy8vIFdlIGJ1aWxkIHRoZSBTU0EgZ3JhcGggYnkgc2ltdWxhdGluZyBhIHN0YWNrIG1hY2hpbmUuCiAgTGlzdDxISW5zdHJ1Y3Rpb24+IHN0YWNrID0gPEhJbnN0cnVjdGlvbj5bXTsKCiAgLy8vIFRoZSBjb3VudCBvZiBuZXN0ZWQgbG9vcHMgd2UgYXJlIGN1cnJlbnRseSBidWlsZGluZy4KICAvLy8KICAvLy8gVGhlIGxvb3AgbmVzdGluZyBpcyBjb25zdWx0ZWQgd2hlbiBpbmxpbmluZyBhIGZ1bmN0aW9uIGludm9jYXRpb24uIFRoZQogIC8vLyBpbmxpbmluZyBoZXVyaXN0aWNzIHRha2UgdGhpcyBpbmZvcm1hdGlvbiBpbnRvIGFjY291bnQuCiAgaW50IGxvb3BEZXB0aCA9IDA7CgogIC8vLyBBIG1hcHBpbmcgZnJvbSBqdW1wIHRhcmdldHMgdG8gdGhlaXIgaGFuZGxlcnMuCiAgTWFwPEp1bXBUYXJnZXQsIEp1bXBIYW5kbGVyPiBqdW1wVGFyZ2V0cyA9IDxKdW1wVGFyZ2V0LCBKdW1wSGFuZGxlcj57fTsKCiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnM7CiAgZmluYWwgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyOwogIGZpbmFsIE1vZHVsYXJFbWl0dGVyIF9lbWl0dGVyOwogIGZpbmFsIE1vZHVsYXJOYW1lciBfbmFtZXI7CiAgZmluYWwgTWVtYmVyRW50aXR5IHRhcmdldEVsZW1lbnQ7CiAgZmluYWwgTWVtYmVyRW50aXR5IF9pbml0aWFsVGFyZ2V0RWxlbWVudDsKICBmaW5hbCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQ7CiAgZmluYWwgQ29kZWdlblJlZ2lzdHJ5IHJlZ2lzdHJ5OwogIGZpbmFsIENsb3N1cmVEYXRhIF9jbG9zdXJlRGF0YUxvb2t1cDsKICBmaW5hbCBUcmFjZXIgX3RyYWNlcjsKICBmaW5hbCBSdW50aW1lVHlwZXNFbmNvZGVyIF9ydGlFbmNvZGVyOwoKICAvLy8gQSBzdGFjayBvZiBbSW50ZXJmYWNlVHlwZV1zIHRoYXQgaGF2ZSBiZWVuIHNlZW4gZHVyaW5nIGlubGluaW5nIG9mCiAgLy8vIGZhY3RvcnkgY29uc3RydWN0b3JzLiAgVGhlc2UgdHlwZXMgYXJlIHByZXNlcnZlZCBpbiBbSEludm9rZVN0YXRpY11zIGFuZAogIC8vLyBbSENyZWF0ZV1zIGluc2lkZSB0aGUgaW5saW5lIGNvZGUgYW5kIHJlZ2lzdGVyZWQgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbgogIC8vLyBmb3IgdGhlc2Ugbm9kZXMuCiAgLy8gVE9ETyhrYXJsa2xvc2UpOiBjb25zaWRlciByZW1vdmluZyB0aGlzIGFuZCBrZWVwaW5nIHRoZSAoc3Vic3RpdHV0ZWQpIHR5cGVzCiAgLy8gb2YgdGhlIHR5cGUgdmFyaWFibGVzIGluIGFuIGVudmlyb25tZW50IChsaWtlIHRoZSBbTG9jYWxzSGFuZGxlcl0pLgogIGZpbmFsIExpc3Q8SW50ZXJmYWNlVHlwZT4gX2N1cnJlbnRJbXBsaWNpdEluc3RhbnRpYXRpb25zID0gPEludGVyZmFjZVR5cGU+W107CgogIC8vLyBVc2VkIHRvIHJlcG9ydCBpbmZvcm1hdGlvbiBhYm91dCBpbmxpbmluZyAod2hpY2ggb2NjdXJzIHdoaWxlIGJ1aWxkaW5nIHRoZQogIC8vLyBTU0EgZ3JhcGgpLCB3aGVuIGR1bXAtaW5mbyBpcyBlbmFibGVkLgogIGZpbmFsIEluZm9SZXBvcnRlciBfaW5mb1JlcG9ydGVyOwoKICBISW5zdHJ1Y3Rpb24gX3JldGhyb3dhYmxlRXhjZXB0aW9uOwoKICBmaW5hbCBTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5IF9zb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5OwogIGZpbmFsIEpzVG9FbGVtZW50TWFwIF9lbGVtZW50TWFwOwogIGZpbmFsIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbEluZmVyZW5jZVJlc3VsdHM7CiAgTG9vcEhhbmRsZXIgX2xvb3BIYW5kbGVyOwogIFR5cGVCdWlsZGVyIF90eXBlQnVpbGRlcjsKCiAgLy8vIFRydWUgaWYgd2UgYXJlIHZpc2l0aW5nIHRoZSBleHByZXNzaW9uIG9mIGEgdGhyb3cgc3RhdGVtZW50OyB3ZSBhc3N1bWUKICAvLy8gdGhpcyBpcyBhIHNsb3cgcGF0aC4KICBib29sIF9pbkV4cHJlc3Npb25PZlRocm93ID0gZmFsc2U7CgogIGZpbmFsIExpc3Q8S2VybmVsSW5saW5pbmdTdGF0ZT4gX2lubGluaW5nU3RhY2sgPSA8S2VybmVsSW5saW5pbmdTdGF0ZT5bXTsKICBMb2NhbCBfcmV0dXJuTG9jYWw7CiAgRGFydFR5cGUgX3JldHVyblR5cGU7CiAgYm9vbCBfaW5MYXp5SW5pdGlhbGl6ZXJFeHByZXNzaW9uID0gZmFsc2U7CgogIFN0YWNrRnJhbWUgX2N1cnJlbnRGcmFtZTsKCiAgZmluYWwgRnVuY3Rpb25JbmxpbmVDYWNoZSBfaW5saW5lQ2FjaGU7CiAgZmluYWwgSW5saW5lRGF0YUNhY2hlIF9pbmxpbmVEYXRhQ2FjaGU7CgogIEtlcm5lbFNzYUdyYXBoQnVpbGRlcigKICAgICAgdGhpcy5vcHRpb25zLAogICAgICB0aGlzLnJlcG9ydGVyLAogICAgICB0aGlzLl9pbml0aWFsVGFyZ2V0RWxlbWVudCwKICAgICAgSW50ZXJmYWNlVHlwZSBpbnN0YW5jZVR5cGUsCiAgICAgIHRoaXMuX2luZm9SZXBvcnRlciwKICAgICAgdGhpcy5fZWxlbWVudE1hcCwKICAgICAgdGhpcy5nbG9iYWxJbmZlcmVuY2VSZXN1bHRzLAogICAgICB0aGlzLmNsb3NlZFdvcmxkLAogICAgICB0aGlzLnJlZ2lzdHJ5LAogICAgICB0aGlzLl9uYW1lciwKICAgICAgdGhpcy5fZW1pdHRlciwKICAgICAgdGhpcy5fdHJhY2VyLAogICAgICB0aGlzLl9ydGlFbmNvZGVyLAogICAgICB0aGlzLl9zb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5LAogICAgICB0aGlzLl9pbmxpbmVDYWNoZSwKICAgICAgdGhpcy5faW5saW5lRGF0YUNhY2hlKQogICAgICA6IHRoaXMudGFyZ2V0RWxlbWVudCA9IF9lZmZlY3RpdmVUYXJnZXRFbGVtZW50Rm9yKF9pbml0aWFsVGFyZ2V0RWxlbWVudCksCiAgICAgICAgdGhpcy5fY2xvc3VyZURhdGFMb29rdXAgPSBjbG9zZWRXb3JsZC5jbG9zdXJlRGF0YUxvb2t1cCB7CiAgICBfZW50ZXJGcmFtZSh0YXJnZXRFbGVtZW50LCBudWxsKTsKICAgIHRoaXMuX2xvb3BIYW5kbGVyID0gbmV3IEtlcm5lbExvb3BIYW5kbGVyKHRoaXMpOwogICAgX3R5cGVCdWlsZGVyID0gbmV3IEtlcm5lbFR5cGVCdWlsZGVyKHRoaXMsIF9lbGVtZW50TWFwKTsKICAgIGdyYXBoLmVsZW1lbnQgPSB0YXJnZXRFbGVtZW50OwogICAgZ3JhcGguc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRWYXJpYWJsZURlY2xhcmF0aW9uKCk7CiAgICB0aGlzLmxvY2Fsc0hhbmRsZXIgPSBuZXcgTG9jYWxzSGFuZGxlcih0aGlzLCB0YXJnZXRFbGVtZW50LCB0YXJnZXRFbGVtZW50LAogICAgICAgIGluc3RhbmNlVHlwZSwgX25hdGl2ZURhdGEsIF9pbnRlcmNlcHRvckRhdGEpOwogIH0KCiAgS2VybmVsVG9Mb2NhbHNNYXAgZ2V0IF9sb2NhbHNNYXAgPT4gX2N1cnJlbnRGcmFtZS5sb2NhbHNNYXA7CgogIE1hcDxpci5WYXJpYWJsZURlY2xhcmF0aW9uLCBISW5zdHJ1Y3Rpb24+IGdldCBfbGV0QmluZGluZ3MgPT4KICAgICAgX2N1cnJlbnRGcmFtZS5sZXRCaW5kaW5nczsKCiAgSkNvbW1vbkVsZW1lbnRzIGdldCBfY29tbW9uRWxlbWVudHMgPT4gX2VsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7CgogIEpFbGVtZW50RW52aXJvbm1lbnQgZ2V0IF9lbGVtZW50RW52aXJvbm1lbnQgPT4gX2VsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50OwoKICBKRmllbGRBbmFseXNpcyBnZXQgX2ZpZWxkQW5hbHlzaXMgPT4gY2xvc2VkV29ybGQuZmllbGRBbmFseXNpczsKCiAgS2VybmVsVG9UeXBlSW5mZXJlbmNlTWFwIGdldCBfdHlwZUluZmVyZW5jZU1hcCA9PgogICAgICBfY3VycmVudEZyYW1lLnR5cGVJbmZlcmVuY2VNYXA7CgogIFNvdXJjZUluZm9ybWF0aW9uQnVpbGRlciBnZXQgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlciA9PgogICAgICBfY3VycmVudEZyYW1lLnNvdXJjZUluZm9ybWF0aW9uQnVpbGRlcjsKCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgX2Fic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgTmF0aXZlRGF0YSBnZXQgX25hdGl2ZURhdGEgPT4gY2xvc2VkV29ybGQubmF0aXZlRGF0YTsKCiAgSW50ZXJjZXB0b3JEYXRhIGdldCBfaW50ZXJjZXB0b3JEYXRhID0+IGNsb3NlZFdvcmxkLmludGVyY2VwdG9yRGF0YTsKCiAgUnVudGltZVR5cGVzTmVlZCBnZXQgX3J0aU5lZWQgPT4gY2xvc2VkV29ybGQucnRpTmVlZDsKCiAgSW5mZXJyZWREYXRhIGdldCBfaW5mZXJyZWREYXRhID0+IGdsb2JhbEluZmVyZW5jZVJlc3VsdHMuaW5mZXJyZWREYXRhOwoKICBEYXJ0VHlwZXMgZ2V0IHR5cGVzID0+IGNsb3NlZFdvcmxkLmRhcnRUeXBlczsKCiAgdm9pZCBwdXNoKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgYWRkKGluc3RydWN0aW9uKTsKICAgIHN0YWNrLmFkZChpbnN0cnVjdGlvbik7CiAgfQoKICBISW5zdHJ1Y3Rpb24gcG9wKCkgewogICAgcmV0dXJuIHN0YWNrLnJlbW92ZUxhc3QoKTsKICB9CgogIC8vLyBQdXNoZXMgYSBib29sZWFuIGNoZWNraW5nIFtleHByZXNzaW9uXSBhZ2FpbnN0IG51bGwuCiAgcHVzaENoZWNrTnVsbChISW5zdHJ1Y3Rpb24gZXhwcmVzc2lvbikgewogICAgcHVzaChuZXcgSElkZW50aXR5KGV4cHJlc3Npb24sIGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCksIG51bGwsCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpKTsKICB9CgogIEhCYXNpY0Jsb2NrIF9jdXJyZW50OwoKICAvLy8gVGhlIGN1cnJlbnQgYmxvY2sgdG8gYWRkIGluc3RydWN0aW9ucyB0by4gTWlnaHQgYmUgbnVsbCwgaWYgd2UgYXJlCiAgLy8vIHZpc2l0aW5nIGRlYWQgY29kZSwgYnV0IHNlZSBbX2lzUmVhY2hhYmxlXS4KICBIQmFzaWNCbG9jayBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgdm9pZCBzZXQgY3VycmVudChjKSB7CiAgICBfaXNSZWFjaGFibGUgPSBjICE9IG51bGw7CiAgICBfY3VycmVudCA9IGM7CiAgfQoKICAvLy8gVGhlIG1vc3QgcmVjZW50bHkgb3BlbmVkIGJsb2NrLiBIYXMgdGhlIHNhbWUgdmFsdWUgYXMgW2N1cnJlbnRdIHdoaWxlCiAgLy8vIHRoZSBibG9jayBpcyBvcGVuLCBidXQgdW5saWtlIFtjdXJyZW50XSwgaXQgaXNuJ3QgY2xlYXJlZCB3aGVuIHRoZQogIC8vLyBjdXJyZW50IGJsb2NrIGlzIGNsb3NlZC4KICBIQmFzaWNCbG9jayBsYXN0T3BlbmVkQmxvY2s7CgogIC8vLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY3VycmVudCBibG9jayBpcyBkZWFkIChiZWNhdXNlIGl0IGhhcyBhIHRocm93IG9yIGEKICAvLy8gcmV0dXJuIGZ1cnRoZXIgdXApLiBJZiB0aGlzIGlzIGZhbHNlLCB0aGVuIFtjdXJyZW50XSBtYXkgYmUgbnVsbC4gSWYgdGhlCiAgLy8vIGJsb2NrIGlzIGRlYWQgdGhlbiBpdCBtYXkgYWxzbyBiZSBhYm9ydGVkLCBidXQgZm9yIHNpbXBsaWNpdHkgd2Ugb25seQogIC8vLyBhYm9ydCBvbiBzdGF0ZW1lbnQgYm91bmRhcmllcywgbm90IGluIHRoZSBtaWRkbGUgb2YgZXhwcmVzc2lvbnMuIFNlZQogIC8vLyBbaXNBYm9ydGVkXS4KICBib29sIF9pc1JlYWNoYWJsZSA9IHRydWU7CgogIEhMb2NhbFZhbHVlIGxhc3RBZGRlZFBhcmFtZXRlcjsKCiAgTWFwPExvY2FsLCBISW5zdHJ1Y3Rpb24+IHBhcmFtZXRlcnMgPSA8TG9jYWwsIEhJbnN0cnVjdGlvbj57fTsKICBTZXQ8TG9jYWw+IGVsaWRlZFBhcmFtZXRlcnM7CgogIEhCYXNpY0Jsb2NrIGFkZE5ld0Jsb2NrKCkgewogICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBncmFwaC5hZGROZXdCbG9jaygpOwogICAgLy8gSWYgYWRkaW5nIGEgbmV3IGJsb2NrIGR1cmluZyBidWlsZGluZyBvZiBhbiBleHByZXNzaW9uLCBpdCBpcyBkdWUgdG8KICAgIC8vIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zIG9yIHNob3J0LWNpcmN1aXQgbG9naWNhbCBvcGVyYXRvcnMuCiAgICByZXR1cm4gYmxvY2s7CiAgfQoKICB2b2lkIG9wZW4oSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGJsb2NrLm9wZW4oKTsKICAgIGN1cnJlbnQgPSBibG9jazsKICAgIGxhc3RPcGVuZWRCbG9jayA9IGJsb2NrOwogIH0KCiAgSEJhc2ljQmxvY2sgY2xvc2UoSENvbnRyb2xGbG93IGVuZCkgewogICAgSEJhc2ljQmxvY2sgcmVzdWx0ID0gY3VycmVudDsKICAgIGN1cnJlbnQuY2xvc2UoZW5kKTsKICAgIGN1cnJlbnQgPSBudWxsOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEhCYXNpY0Jsb2NrIF9jbG9zZUFuZEdvdG9FeGl0KEhDb250cm9sRmxvdyBlbmQpIHsKICAgIEhCYXNpY0Jsb2NrIHJlc3VsdCA9IGN1cnJlbnQ7CiAgICBjdXJyZW50LmNsb3NlKGVuZCk7CiAgICBjdXJyZW50ID0gbnVsbDsKICAgIHJlc3VsdC5hZGRTdWNjZXNzb3IoZ3JhcGguZXhpdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBnb3RvKEhCYXNpY0Jsb2NrIGZyb20sIEhCYXNpY0Jsb2NrIHRvKSB7CiAgICBmcm9tLmNsb3NlKG5ldyBIR290byhfYWJzdHJhY3RWYWx1ZURvbWFpbikpOwogICAgZnJvbS5hZGRTdWNjZXNzb3IodG8pOwogIH0KCiAgYm9vbCBpc0Fib3J0ZWQoKSB7CiAgICByZXR1cm4gY3VycmVudCA9PSBudWxsOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBuZXcgYmxvY2ssIHRyYW5zaXRpb25zIHRvIGl0IGZyb20gYW55IGN1cnJlbnQgYmxvY2ssIGFuZAogIC8vLyBvcGVucyB0aGUgbmV3IGJsb2NrLgogIEhCYXNpY0Jsb2NrIG9wZW5OZXdCbG9jaygpIHsKICAgIEhCYXNpY0Jsb2NrIG5ld0Jsb2NrID0gYWRkTmV3QmxvY2soKTsKICAgIGlmICghaXNBYm9ydGVkKCkpIGdvdG8oY3VycmVudCwgbmV3QmxvY2spOwogICAgb3BlbihuZXdCbG9jayk7CiAgICByZXR1cm4gbmV3QmxvY2s7CiAgfQoKICB2b2lkIGFkZChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGN1cnJlbnQuYWRkKGluc3RydWN0aW9uKTsKICB9CgogIEhMb2NhbFZhbHVlIGFkZFBhcmFtZXRlcihFbnRpdHkgcGFyYW1ldGVyLCBBYnN0cmFjdFZhbHVlIHR5cGUsCiAgICAgIHtib29sIGlzRWxpZGVkOiBmYWxzZX0pIHsKICAgIEhMb2NhbFZhbHVlIHJlc3VsdCA9IGlzRWxpZGVkCiAgICAgICAgPyBuZXcgSExvY2FsVmFsdWUocGFyYW1ldGVyLCB0eXBlKQogICAgICAgIDogbmV3IEhQYXJhbWV0ZXJWYWx1ZShwYXJhbWV0ZXIsIHR5cGUpOwogICAgaWYgKGxhc3RBZGRlZFBhcmFtZXRlciA9PSBudWxsKSB7CiAgICAgIGdyYXBoLmVudHJ5LmFkZEJlZm9yZShncmFwaC5lbnRyeS5maXJzdCwgcmVzdWx0KTsKICAgIH0gZWxzZSB7CiAgICAgIGdyYXBoLmVudHJ5LmFkZEFmdGVyKGxhc3RBZGRlZFBhcmFtZXRlciwgcmVzdWx0KTsKICAgIH0KICAgIGxhc3RBZGRlZFBhcmFtZXRlciA9IHJlc3VsdDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBIU3ViR3JhcGhCbG9ja0luZm9ybWF0aW9uIHdyYXBTdGF0ZW1lbnRHcmFwaChTdWJHcmFwaCBzdGF0ZW1lbnRzKSB7CiAgICBpZiAoc3RhdGVtZW50cyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuZXcgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbihzdGF0ZW1lbnRzKTsKICB9CgogIEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbiB3cmFwRXhwcmVzc2lvbkdyYXBoKFN1YkV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgaWYgKGV4cHJlc3Npb24gPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmV3IEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbihleHByZXNzaW9uKTsKICB9CgogIEhMaXRlcmFsTGlzdCBfYnVpbGRMaXRlcmFsTGlzdChMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzKSB7CiAgICByZXR1cm4gbmV3IEhMaXRlcmFsTGlzdChpbnB1dHMsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmdyb3dhYmxlTGlzdFR5cGUpOwogIH0KCiAgSEluc3RydWN0aW9uIF9jYWxsU2V0UnVudGltZVR5cGVJbmZvV2l0aFR5cGVBcmd1bWVudHMoCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IHJ0aUlucHV0cywKICAgICAgSEluc3RydWN0aW9uIG5ld09iamVjdCwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGlmICghX3J0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHModHlwZS5lbGVtZW50KSkgewogICAgICByZXR1cm4gbmV3T2JqZWN0OwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiB0eXBlSW5mbyA9IG5ldyBIVHlwZUluZm9FeHByZXNzaW9uKAogICAgICAgIFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuSU5TVEFOQ0UsCiAgICAgICAgY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKHR5cGUuZWxlbWVudCksCiAgICAgICAgcnRpSW5wdXRzLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKTsKICAgIGFkZCh0eXBlSW5mbyk7CiAgICByZXR1cm4gX2NhbGxTZXRSdW50aW1lVHlwZUluZm8odHlwZUluZm8sIG5ld09iamVjdCwgc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgLy8vIENhbGxlZCB3aGVuIGNvbnRyb2wgZmxvdyBpcyBhYm91dCB0byBjaGFuZ2UsIGluIHdoaWNoIGNhc2Ugd2UgbmVlZCB0bwogIC8vLyBzcGVjaWZ5IHNwZWNpYWwgc3VjY2Vzc29ycyBpZiB3ZSBhcmUgYWxyZWFkeSBpbiBhIHRyeS9jYXRjaC9maW5hbGx5IGJsb2NrLgogIHZvaWQgX2hhbmRsZUluVHJ5U3RhdGVtZW50KCkgewogICAgaWYgKCFfaW5UcnlTdGF0ZW1lbnQpIHJldHVybjsKICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gY2xvc2UobmV3IEhFeGl0VHJ5KF9hYnN0cmFjdFZhbHVlRG9tYWluKSk7CiAgICBIQmFzaWNCbG9jayBuZXdCbG9jayA9IGdyYXBoLmFkZE5ld0Jsb2NrKCk7CiAgICBibG9jay5hZGRTdWNjZXNzb3IobmV3QmxvY2spOwogICAgb3BlbihuZXdCbG9jayk7CiAgfQoKICAvLy8gSGVscGVyIHRvIGltcGxlbWVudCBKU19HRVRfRkxBRy4KICAvLy8KICAvLy8gVGhlIGNvbmNyZXRlIFNTQSBncmFwaCBidWlsZGVyIHdpbGwgZXh0cmFjdCBhIGZsYWcgcGFyYW1ldGVyIGZyb20gdGhlCiAgLy8vIEpTX0dFVF9GTEFHIGNhbGwgYW5kIHRoZW4gcHVzaCBhIGJvb2xlYW4gcmVzdWx0IG9udG8gdGhlIHN0YWNrLiBUaGlzCiAgLy8vIGZ1bmN0aW9uIHByb3ZpZGVzIHRoZSBib29sZWFuIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIFtmbGFnTmFtZV0uCiAgLy8vIElmIFtmbGFnTmFtZV0gaXMgbm90IHJlY29nbml6ZWQsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBgbnVsbGAgYW5kIHRoZQogIC8vLyBjb25jcmV0ZSBTU0EgYnVpbGRlciByZXBvcnRzIGFuIGVycm9yLgogIGJvb2wgX2dldEZsYWdWYWx1ZShTdHJpbmcgZmxhZ05hbWUpIHsKICAgIHN3aXRjaCAoZmxhZ05hbWUpIHsKICAgICAgY2FzZSAnTUlOSUZJRUQnOgogICAgICAgIHJldHVybiBvcHRpb25zLmVuYWJsZU1pbmlmaWNhdGlvbjsKICAgICAgY2FzZSAnTVVTVF9SRVRBSU5fTUVUQURBVEEnOgogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgY2FzZSAnVVNFX0NPTlRFTlRfU0VDVVJJVFlfUE9MSUNZJzoKICAgICAgICByZXR1cm4gb3B0aW9ucy51c2VDb250ZW50U2VjdXJpdHlQb2xpY3k7CiAgICAgIGNhc2UgJ1VTRV9ORVdfUlRJJzoKICAgICAgICByZXR1cm4gb3B0aW9ucy5leHBlcmltZW50TmV3UnRpOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgU3RhdGljVHlwZSBfZ2V0U3RhdGljVHlwZShpci5FeHByZXNzaW9uIG5vZGUpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1YnN0aXR1dGUgdGhlIHR5cGUgYnkgdGhlIHRoaXMgdHlwZSBhbmQgdHlwZQogICAgLy8gYXJndW1lbnRzIG9mIHRoZSBjdXJyZW50IGZyYW1lLgogICAgaXIuRGFydFR5cGUgdHlwZSA9IF9jdXJyZW50RnJhbWUuc3RhdGljVHlwZVByb3ZpZGVyLmdldFN0YXRpY1R5cGUobm9kZSk7CiAgICByZXR1cm4gbmV3IFN0YXRpY1R5cGUoCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUodHlwZSksIGNvbXB1dGVDbGFzc1JlbGF0aW9uRnJvbVR5cGUodHlwZSkpOwogIH0KCiAgU3RhdGljVHlwZSBfZ2V0U3RhdGljRm9ySW5JdGVyYXRvclR5cGUoaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3Vic3RpdHV0ZSB0aGUgdHlwZSBieSB0aGUgdGhpcyB0eXBlIGFuZCB0eXBlCiAgICAvLyBhcmd1bWVudHMgb2YgdGhlIGN1cnJlbnQgZnJhbWUuCiAgICBpci5EYXJ0VHlwZSB0eXBlID0KICAgICAgICBfY3VycmVudEZyYW1lLnN0YXRpY1R5cGVQcm92aWRlci5nZXRGb3JJbkl0ZXJhdG9yVHlwZShub2RlKTsKICAgIHJldHVybiBuZXcgU3RhdGljVHlwZSgKICAgICAgICBfZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh0eXBlKSwgY29tcHV0ZUNsYXNzUmVsYXRpb25Gcm9tVHlwZSh0eXBlKSk7CiAgfQoKICBzdGF0aWMgTWVtYmVyRW50aXR5IF9lZmZlY3RpdmVUYXJnZXRFbGVtZW50Rm9yKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIGlmIChtZW1iZXIgaXMgSkdlbmVyYXRvckJvZHkpIHJldHVybiBtZW1iZXIuZnVuY3Rpb247CiAgICByZXR1cm4gbWVtYmVyOwogIH0KCiAgdm9pZCBfZW50ZXJGcmFtZSgKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciwgU291cmNlSW5mb3JtYXRpb24gY2FsbFNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBBc3luY01hcmtlciBhc3luY01hcmtlciA9IEFzeW5jTWFya2VyLlNZTkM7CiAgICBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb24gPSBnZXRGdW5jdGlvbk5vZGUoX2VsZW1lbnRNYXAsIG1lbWJlcik7CiAgICBpZiAoZnVuY3Rpb24gIT0gbnVsbCkgewogICAgICBhc3luY01hcmtlciA9IGdldEFzeW5jTWFya2VyKGZ1bmN0aW9uKTsKICAgIH0KICAgIF9jdXJyZW50RnJhbWUgPSBuZXcgU3RhY2tGcmFtZSgKICAgICAgICBfY3VycmVudEZyYW1lLAogICAgICAgIG1lbWJlciwKICAgICAgICBhc3luY01hcmtlciwKICAgICAgICBjbG9zZWRXb3JsZC5nbG9iYWxMb2NhbHNNYXAuZ2V0TG9jYWxzTWFwKG1lbWJlciksCiAgICAgICAge30sCiAgICAgICAgbmV3IEtlcm5lbFRvVHlwZUluZmVyZW5jZU1hcEltcGwobWVtYmVyLCBnbG9iYWxJbmZlcmVuY2VSZXN1bHRzKSwKICAgICAgICBfY3VycmVudEZyYW1lICE9IG51bGwKICAgICAgICAgICAgPyBfY3VycmVudEZyYW1lLnNvdXJjZUluZm9ybWF0aW9uQnVpbGRlcgogICAgICAgICAgICAgICAgLmZvckNvbnRleHQobWVtYmVyLCBjYWxsU291cmNlSW5mb3JtYXRpb24pCiAgICAgICAgICAgIDogX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kuY3JlYXRlQnVpbGRlckZvckNvbnRleHQobWVtYmVyKSwKICAgICAgICBfZWxlbWVudE1hcC5nZXRTdGF0aWNUeXBlUHJvdmlkZXIobWVtYmVyKSk7CiAgfQoKICB2b2lkIF9sZWF2ZUZyYW1lKCkgewogICAgX2N1cnJlbnRGcmFtZSA9IF9jdXJyZW50RnJhbWUucGFyZW50OwogIH0KCiAgSEdyYXBoIGJ1aWxkKCkgewogICAgcmV0dXJuIHJlcG9ydGVyLndpdGhDdXJyZW50RWxlbWVudChfbG9jYWxzTWFwLmN1cnJlbnRNZW1iZXIsICgpIHsKICAgICAgLy8gVE9ETyhoZXQpOiBubyByZWFzb24gdG8gZG8gdGhpcyBoZXJlLi4uCiAgICAgIEhJbnN0cnVjdGlvbi5pZENvdW50ZXIgPSAwOwogICAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24gPQogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihfaW5pdGlhbFRhcmdldEVsZW1lbnQpOwoKICAgICAgc3dpdGNoIChkZWZpbml0aW9uLmtpbmQpIHsKICAgICAgICBjYXNlIE1lbWJlcktpbmQucmVndWxhcjoKICAgICAgICBjYXNlIE1lbWJlcktpbmQuY2xvc3VyZUNhbGw6CiAgICAgICAgICBpci5Ob2RlIHRhcmdldCA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICAgIGlmICh0YXJnZXQgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgICAgIGlmICh0YXJnZXQuaXNFeHRlcm5hbCkgewogICAgICAgICAgICAgIF9idWlsZEV4dGVybmFsRnVuY3Rpb25Ob2RlKAogICAgICAgICAgICAgICAgICB0YXJnZXRFbGVtZW50LCBfZW5zdXJlRGVmYXVsdEFyZ3VtZW50VmFsdWVzKHRhcmdldC5mdW5jdGlvbikpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9idWlsZEZ1bmN0aW9uTm9kZSgKICAgICAgICAgICAgICAgICAgdGFyZ2V0RWxlbWVudCwgX2Vuc3VyZURlZmF1bHRBcmd1bWVudFZhbHVlcyh0YXJnZXQuZnVuY3Rpb24pKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgaXMgaXIuRmllbGQpIHsKICAgICAgICAgICAgRmllbGRBbmFseXNpc0RhdGEgZmllbGREYXRhID0KICAgICAgICAgICAgICAgIGNsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKHRhcmdldEVsZW1lbnQpOwoKICAgICAgICAgICAgaWYgKGZpZWxkRGF0YS5pbml0aWFsVmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQ29uc3RhbnRVc2UoCiAgICAgICAgICAgICAgICAgIG5ldyBDb25zdGFudFVzZS5pbml0KGZpZWxkRGF0YS5pbml0aWFsVmFsdWUpKTsKICAgICAgICAgICAgICBpZiAodGFyZ2V0RWxlbWVudC5pc1N0YXRpYyB8fCB0YXJnZXRFbGVtZW50LmlzVG9wTGV2ZWwpIHsKICAgICAgICAgICAgICAgIC8vLyBObyBjb2RlIGlzIGNyZWF0ZWQgZm9yIHRoaXMgZmllbGQ6IEFsbCByZWZlcmVuY2VzIGlubGluZSB0aGUKICAgICAgICAgICAgICAgIC8vLyBjb25zdGFudCB2YWx1ZS4KICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChmaWVsZERhdGEuaXNMYXp5KSB7CiAgICAgICAgICAgICAgLy8gVGhlIGdlbmVyYXRlZCBpbml0aWFsaXplciBuZWVkcyBiZSB3cmFwcGVkIGluIHRoZSBjeWNsaWMtZXJyb3IKICAgICAgICAgICAgICAvLyBoZWxwZXIuCiAgICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgICAgICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmN5Y2xpY1Rocm93SGVscGVyLAogICAgICAgICAgICAgICAgICBDYWxsU3RydWN0dXJlLk9ORV9BUkcpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAodGFyZ2V0RWxlbWVudC5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgICAgICAgICAgaWYgKGZpZWxkRGF0YS5pc0VmZmVjdGl2ZWx5RmluYWwgfHwKICAgICAgICAgICAgICAgICAgIWNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgICAgICAgICAgICAgICAgLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KHRhcmdldEVsZW1lbnQpCiAgICAgICAgICAgICAgICAgICAgICAuaXNFbWl0dGVkKSB7CiAgICAgICAgICAgICAgICAvLyBObyBuZWVkIGZvciBhIGNoZWNrZWQgc2V0dGVyLgogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIF9idWlsZEZpZWxkKHRhcmdldCk7CiAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCBpcyBpci5Mb2NhbEZ1bmN0aW9uKSB7CiAgICAgICAgICAgIF9idWlsZEZ1bmN0aW9uTm9kZSgKICAgICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQsIF9lbnN1cmVEZWZhdWx0QXJndW1lbnRWYWx1ZXModGFyZ2V0LmZ1bmN0aW9uKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyAnTm8gY2FzZSBpbXBsZW1lbnRlZCB0byBoYW5kbGUgdGFyZ2V0OiAnCiAgICAgICAgICAgICAgICAnJHRhcmdldCBmb3IgJHRhcmdldEVsZW1lbnQnOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBNZW1iZXJLaW5kLmNvbnN0cnVjdG9yOgogICAgICAgICAgaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgICBfZW5zdXJlRGVmYXVsdEFyZ3VtZW50VmFsdWVzKGNvbnN0cnVjdG9yLmZ1bmN0aW9uKTsKICAgICAgICAgIF9idWlsZENvbnN0cnVjdG9yKHRhcmdldEVsZW1lbnQsIGNvbnN0cnVjdG9yKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHk6CiAgICAgICAgICBpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICAgIF9lbnN1cmVEZWZhdWx0QXJndW1lbnRWYWx1ZXMoY29uc3RydWN0b3IuZnVuY3Rpb24pOwogICAgICAgICAgX2J1aWxkQ29uc3RydWN0b3JCb2R5KGNvbnN0cnVjdG9yKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTWVtYmVyS2luZC5jbG9zdXJlRmllbGQ6CiAgICAgICAgICAvLyBDbG9zdXJlIGZpZWxkcyBoYXZlIG5vIHNldHRlciBhbmQgdGhlcmVmb3JlIG5ldmVyIHJlcXVpcmUgYW55IGNvZGUuCiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICBjYXNlIE1lbWJlcktpbmQuc2lnbmF0dXJlOgogICAgICAgICAgaXIuTm9kZSB0YXJnZXQgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgICBpci5GdW5jdGlvbk5vZGUgb3JpZ2luYWxDbG9zdXJlTm9kZTsKICAgICAgICAgIGlmICh0YXJnZXQgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgICAgIG9yaWdpbmFsQ2xvc3VyZU5vZGUgPSB0YXJnZXQuZnVuY3Rpb247CiAgICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCBpcyBpci5Mb2NhbEZ1bmN0aW9uKSB7CiAgICAgICAgICAgIG9yaWdpbmFsQ2xvc3VyZU5vZGUgPSB0YXJnZXQuZnVuY3Rpb247CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgICAgIHRhcmdldEVsZW1lbnQsCiAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBmdW5jdGlvbiBzaWduYXR1cmU6ICIKICAgICAgICAgICAgICAgICIkdGFyZ2V0RWxlbWVudCBpbnNpZGUgYSBub24tY2xvc3VyZTogJHRhcmdldCIpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG9wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICAgICAgICBfYnVpbGRNZXRob2RTaWduYXR1cmVOZXdSdGkob3JpZ2luYWxDbG9zdXJlTm9kZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfYnVpbGRNZXRob2RTaWduYXR1cmUob3JpZ2luYWxDbG9zdXJlTm9kZSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIE1lbWJlcktpbmQuZ2VuZXJhdG9yQm9keToKICAgICAgICAgIF9idWlsZEdlbmVyYXRvckJvZHkoCiAgICAgICAgICAgICAgX2luaXRpYWxUYXJnZXRFbGVtZW50LCBfZnVuY3Rpb25Ob2RlT2YoZGVmaW5pdGlvbi5ub2RlKSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICBhc3NlcnQoZ3JhcGguaXNWYWxpZCgpLCAiSW52YWxpZCBncmFwaCBmb3IgJF9pbml0aWFsVGFyZ2V0RWxlbWVudC4iKTsKCiAgICAgIGlmIChfdHJhY2VyLmlzRW5hYmxlZCkgewogICAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBfaW5pdGlhbFRhcmdldEVsZW1lbnQ7CiAgICAgICAgU3RyaW5nIG5hbWUgPSBtZW1iZXIubmFtZTsKICAgICAgICBpZiAobWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIgfHwKICAgICAgICAgICAgbWVtYmVyLmlzQ29uc3RydWN0b3IgfHwKICAgICAgICAgICAgbWVtYmVyLmlzU3RhdGljKSB7CiAgICAgICAgICBuYW1lID0gIiR7bWVtYmVyLmVuY2xvc2luZ0NsYXNzLm5hbWV9LiRuYW1lIjsKICAgICAgICAgIGlmIChkZWZpbml0aW9uLmtpbmQgPT0gTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHkpIHsKICAgICAgICAgICAgbmFtZSArPSAiIChib2R5KSI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF90cmFjZXIudHJhY2VDb21waWxhdGlvbihuYW1lKTsKICAgICAgICBfdHJhY2VyLnRyYWNlR3JhcGgoJ2J1aWxkZXInLCBncmFwaCk7CiAgICAgIH0KCiAgICAgIHJldHVybiBncmFwaDsKICAgIH0pOwogIH0KCiAgaXIuRnVuY3Rpb25Ob2RlIF9mdW5jdGlvbk5vZGVPZihpci5UcmVlTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBpci5NZW1iZXIpIHJldHVybiBub2RlLmZ1bmN0aW9uOwogICAgaWYgKG5vZGUgaXMgaXIuTG9jYWxGdW5jdGlvbikgcmV0dXJuIG5vZGUuZnVuY3Rpb247CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGlyLkZ1bmN0aW9uTm9kZSBfZW5zdXJlRGVmYXVsdEFyZ3VtZW50VmFsdWVzKGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbikgewogICAgLy8gUmVnaXN0ZXIgYWxsIFtmdW5jdGlvbl0ncyBkZWZhdWx0IGFyZ3VtZW50IHZhbHVlcy4KICAgIC8vCiAgICAvLyBEZWZhdWx0IHZhbHVlcyBtaWdodCBiZSAob3IgY29udGFpbikgZnVuY3Rpb25zIHRoYXQgYXJlIG5vdCByZWZlcmVuY2VkCiAgICAvLyBmcm9tIGFueXdoZXJlIGVsc2Ugc28gd2UgbmVlZCB0byBlbnN1cmUgdGhlc2UgYXJlIGVucXVldWVkLiAgU3R1YnMgYW5kCiAgICAvLyBgRnVuY3Rpb24uYXBwbHlgIGRhdGEgYXJlIGNyZWF0ZWQgYWZ0ZXIgdGhlIGNvZGVnZW4gcXVldWUgaXMgY2xvc2VkLCBzbwogICAgLy8gd2UgZm9yY2UgdGhlc2UgZnVuY3Rpb25zIGludG8gdGhlIHF1ZXVlIGJ5IHJlZ2lzdGVyaW5nIHRoZSBjb25zdGFudHMgYXMKICAgIC8vIHVzZWQgaW4gYWR2YW5jZS4gU2VlIGxhbmd1YWdlL2N5Y2xpY19kZWZhdWx0X3ZhbHVlc190ZXN0LmRhcnQgZm9yIGFuCiAgICAvLyBleGFtcGxlLgogICAgLy8KICAgIC8vIFRPRE8oc3JhKTogV2UgY291bGQgYmUgbW9yZSBwcmVjaXNlIGlmIHN0dWJzIGFuZCBgRnVuY3Rpb24uYXBwbHlgIGRhdGEKICAgIC8vIHdlcmUgZ2VuZXJhdGVkIGJ5IHRoZSBjb2RlZ2VuIGVucXVldWVyLiBJbiBwcmFjdGljZSBldmVuIGluIGh1Z2UgcHJvZ3JhbXMKICAgIC8vIHRoZXJlIGFyZSBvbmx5IHZlcnkgc21hbGwgbnVtYmVyIG9mIGNvbnN0YW50cyBjcmVhdGVkIGhlcmUgdGhhdCBhcmUgbm90CiAgICAvLyBhY3R1YWxseSB1c2VkLgogICAgdm9pZCBfcmVnaXN0ZXJEZWZhdWx0VmFsdWUoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnRWYWx1ZSA9CiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRDb25zdGFudFZhbHVlKG5vZGUuaW5pdGlhbGl6ZXIsIGltcGxpY2l0TnVsbDogdHJ1ZSk7CiAgICAgIGFzc2VydCgKICAgICAgICAgIGNvbnN0YW50VmFsdWUgIT0gbnVsbCwKICAgICAgICAgIGZhaWxlZEF0KF9lbGVtZW50TWFwLmdldE1ldGhvZChmdW5jdGlvbi5wYXJlbnQpLAogICAgICAgICAgICAgICdObyBjb25zdGFudCBjb21wdXRlZCBmb3IgJG5vZGUnKSk7CiAgICAgIHJlZ2lzdHJ5Py5yZWdpc3RlckNvbnN0YW50VXNlKG5ldyBDb25zdGFudFVzZS5pbml0KGNvbnN0YW50VmFsdWUpKTsKICAgIH0KCiAgICBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycwogICAgICAgIC5za2lwKGZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpCiAgICAgICAgLmZvckVhY2goX3JlZ2lzdGVyRGVmYXVsdFZhbHVlKTsKICAgIGZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy5mb3JFYWNoKF9yZWdpc3RlckRlZmF1bHRWYWx1ZSk7CiAgICByZXR1cm4gZnVuY3Rpb247CiAgfQoKICB2b2lkIF9idWlsZEZpZWxkKGlyLkZpZWxkIG5vZGUpIHsKICAgIF9pbkxhenlJbml0aWFsaXplckV4cHJlc3Npb24gPSBub2RlLmlzU3RhdGljOwogICAgRmllbGRFbnRpdHkgZmllbGQgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSk7CiAgICBfb3BlbkZ1bmN0aW9uKGZpZWxkLCBjaGVja3M6IFRhcmdldENoZWNrcy5ub25lKTsKICAgIGlmIChub2RlLmlzSW5zdGFuY2VNZW1iZXIgJiYKICAgICAgICBjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3koZmllbGQpLmlzRW1pdHRlZCkgewogICAgICBISW5zdHJ1Y3Rpb24gdGhpc0luc3RydWN0aW9uID0gbG9jYWxzSGFuZGxlci5yZWFkVGhpcygKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkR2V0KG5vZGUpKTsKICAgICAgLy8gVXNlIGR5bmFtaWMgdHlwZSBiZWNhdXNlIHRoZSB0eXBlIGNvbXB1dGVkIGJ5IHRoZSBpbmZlcnJlciBpcwogICAgICAvLyBuYXJyb3dlZCB0byB0aGUgdHlwZSBhbm5vdGF0aW9uLgogICAgICBISW5zdHJ1Y3Rpb24gcGFyYW1ldGVyID0KICAgICAgICAgIG5ldyBIUGFyYW1ldGVyVmFsdWUoZmllbGQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKTsKICAgICAgLy8gQWRkIHRoZSBwYXJhbWV0ZXIgYXMgdGhlIGxhc3QgaW5zdHJ1Y3Rpb24gb2YgdGhlIGVudHJ5IGJsb2NrLgogICAgICAvLyBJZiB0aGUgbWV0aG9kIGlzIGludGVyY2VwdGVkLCB3ZSB3YW50IHRoZSBhY3R1YWwgcmVjZWl2ZXIKICAgICAgLy8gdG8gYmUgdGhlIGZpcnN0IHBhcmFtZXRlci4KICAgICAgZ3JhcGguZW50cnkuYWRkQmVmb3JlKGdyYXBoLmVudHJ5Lmxhc3QsIHBhcmFtZXRlcik7CiAgICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IF90eXBlQnVpbGRlci5wb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZlBhcmFtZXRlcigKICAgICAgICAgIGZpZWxkLCBwYXJhbWV0ZXIsIF9nZXREYXJ0VHlwZUlmVmFsaWQobm9kZS50eXBlKSk7CiAgICAgIGlmICghX2ZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKS5pc0VsaWRlZCkgewogICAgICAgIGFkZChuZXcgSEZpZWxkU2V0KF9hYnN0cmFjdFZhbHVlRG9tYWluLCBmaWVsZCwgdGhpc0luc3RydWN0aW9uLCB2YWx1ZSkpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAobm9kZS5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgbm9kZS5pbml0aWFsaXplci5hY2NlcHQodGhpcyk7CiAgICAgICAgSEluc3RydWN0aW9uIGZpZWxkVmFsdWUgPSBwb3AoKTsKICAgICAgICBISW5zdHJ1Y3Rpb24gY2hlY2tJbnN0cnVjdGlvbiA9CiAgICAgICAgICAgIF90eXBlQnVpbGRlci5wb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZkFzc2lnbm1lbnQoCiAgICAgICAgICAgICAgICBmaWVsZCwgZmllbGRWYWx1ZSwgX2dldERhcnRUeXBlSWZWYWxpZChub2RlLnR5cGUpKTsKICAgICAgICBzdGFjay5hZGQoY2hlY2tJbnN0cnVjdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgICB9CiAgICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IHBvcCgpOwogICAgICBfY2xvc2VBbmRHb3RvRXhpdChuZXcgSFJldHVybihfYWJzdHJhY3RWYWx1ZURvbWFpbiwgdmFsdWUsCiAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkUmV0dXJuKG5vZGUpKSk7CiAgICB9CiAgICBfY2xvc2VGdW5jdGlvbigpOwogIH0KCiAgRGFydFR5cGUgX2dldERhcnRUeXBlSWZWYWxpZChpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSBpcyBpci5JbnZhbGlkVHlwZSkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUodHlwZSk7CiAgfQoKICAvLy8gUG9wcyB0aGUgbW9zdCByZWNlbnQgaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgc3RhY2sgYW5kIGVuc3VyZXMgdGhhdCBpdCBpcyBhCiAgLy8vIG5vbi1udWxsIGJvb2wuCiAgSEluc3RydWN0aW9uIHBvcEJvb2xpZmllZCgpIHsKICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IHBvcCgpOwogICAgcmV0dXJuIF90eXBlQnVpbGRlci5wb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZkNvbmRpdGlvbigKICAgICAgICBfY3VycmVudEZyYW1lLm1lbWJlciwgdmFsdWUpOwogIH0KCiAgLy8vIEV4dGVuZCBjdXJyZW50IG1ldGhvZCBwYXJhbWV0ZXJzIHdpdGggcGFyYW1ldGVycyBmb3IgdGhlIGNsYXNzIHR5cGUKICAvLy8gcGFyYW1ldGVycy4gIElmIHRoZSBjbGFzcyBoYXMgdHlwZSBwYXJhbWV0ZXJzIGJ1dCBkb2VzIG5vdCBuZWVkIHRoZW0sIGJpbmQKICAvLy8gdG8gYGR5bmFtaWNgIChyZXByZXNlbnRlZCBhcyBgbnVsbGApIHNvIHRoZSBiaW5kaW5ncyBhcmUgYXZhaWxhYmxlIGZvcgogIC8vLyBidWlsZGluZyB0eXBlcyB1cCB0aGUgaW5oZXJpdGFuY2UgY2hhaW4gb2YgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3RvcnMuCiAgdm9pZCBfYWRkQ2xhc3NUeXBlVmFyaWFibGVzSWZOZWVkZWQoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgaWYgKCFtZW1iZXIuaXNDb25zdHJ1Y3RvciAmJiBtZW1iZXIgaXMhIENvbnN0cnVjdG9yQm9keUVudGl0eSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBDbGFzc0VudGl0eSBjbHMgPSBtZW1iZXIuZW5jbG9zaW5nQ2xhc3M7CiAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjbHMpOwogICAgaWYgKHRoaXNUeXBlLnR5cGVBcmd1bWVudHMuaXNFbXB0eSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBib29sIG5lZWRzVHlwZUFyZ3VtZW50cyA9IF9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGNscyk7CiAgICB0aGlzVHlwZS50eXBlQXJndW1lbnRzLmZvckVhY2goKERhcnRUeXBlIF90eXBlVmFyaWFibGUpIHsKICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGVUeXBlID0gX3R5cGVWYXJpYWJsZTsKICAgICAgSEluc3RydWN0aW9uIHBhcmFtOwogICAgICBpZiAobmVlZHNUeXBlQXJndW1lbnRzKSB7CiAgICAgICAgcGFyYW0gPSBhZGRQYXJhbWV0ZXIoCiAgICAgICAgICAgIHR5cGVWYXJpYWJsZVR5cGUuZWxlbWVudCwgX2Fic3RyYWN0VmFsdWVEb21haW4ubm9uTnVsbFR5cGUpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFVudXNlZCwgc28gYmluZCB0byBgZHluYW1pY2AuCiAgICAgICAgcGFyYW0gPSBncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpOwogICAgICB9CiAgICAgIExvY2FsIGxvY2FsID0gbG9jYWxzSGFuZGxlci5nZXRUeXBlVmFyaWFibGVBc0xvY2FsKHR5cGVWYXJpYWJsZVR5cGUpOwogICAgICBsb2NhbHNIYW5kbGVyLmRpcmVjdExvY2Fsc1tsb2NhbF0gPSBwYXJhbTsKICAgIH0pOwogIH0KCiAgLy8vIEV4dGVuZCBjdXJyZW50IG1ldGhvZCBwYXJhbWV0ZXJzIHdpdGggcGFyYW1ldGVycyBmb3IgdGhlIGZ1bmN0aW9uIHR5cGUKICAvLy8gdmFyaWFibGVzLgogIC8vLwogIC8vLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBEbyB3ZSBuZWVkIHRoaXM/CiAgLy8vIElmIHRoZSBtZXRob2QgaGFzIHR5cGUgdmFyaWFibGVzIGJ1dCBkb2VzIG5vdCBuZWVkIHRoZW0sIGJpbmQgdG8gYGR5bmFtaWNgCiAgLy8vIChyZXByZXNlbnRlZCBhcyBgbnVsbGApLgogIHZvaWQgX2FkZEZ1bmN0aW9uVHlwZVZhcmlhYmxlc0lmTmVlZGVkKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIGlmIChtZW1iZXIgaXMhIEZ1bmN0aW9uRW50aXR5KSByZXR1cm47CgogICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gPSBtZW1iZXI7CiAgICBMaXN0PFR5cGVWYXJpYWJsZVR5cGU+IHR5cGVWYXJpYWJsZXMgPQogICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKGZ1bmN0aW9uKTsKICAgIGlmICh0eXBlVmFyaWFibGVzLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgYm9vbCBuZWVkc1R5cGVBcmd1bWVudHMgPSBfcnRpTmVlZC5tZXRob2ROZWVkc1R5cGVBcmd1bWVudHMoZnVuY3Rpb24pOwogICAgYm9vbCBlbGlkZVR5cGVQYXJhbWV0ZXJzID0gZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlLnR5cGVQYXJhbWV0ZXJzID09IDA7CiAgICBmb3IgKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlCiAgICAgICAgaW4gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoZnVuY3Rpb24pKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBwYXJhbTsKICAgICAgaWYgKGVsaWRlVHlwZVBhcmFtZXRlcnMpIHsKICAgICAgICAvLyBBZGQgZWxpZGVkIHR5cGUgcGFyYW1ldGVycy4KICAgICAgICBwYXJhbSA9IF9jb21wdXRlVHlwZUFyZ3VtZW50RGVmYXVsdFZhbHVlKGZ1bmN0aW9uLCB0eXBlVmFyaWFibGUpOwogICAgICB9IGVsc2UgaWYgKG5lZWRzVHlwZUFyZ3VtZW50cykgewogICAgICAgIHBhcmFtID0gYWRkUGFyYW1ldGVyKAogICAgICAgICAgICB0eXBlVmFyaWFibGUuZWxlbWVudCwgX2Fic3RyYWN0VmFsdWVEb21haW4ubm9uTnVsbFR5cGUpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFVudXNlZCwgc28gYmluZCB0byBgZHluYW1pY2AuCiAgICAgICAgcGFyYW0gPSBncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpOwogICAgICB9CiAgICAgIExvY2FsIGxvY2FsID0gbG9jYWxzSGFuZGxlci5nZXRUeXBlVmFyaWFibGVBc0xvY2FsKHR5cGVWYXJpYWJsZSk7CiAgICAgIGxvY2Fsc0hhbmRsZXIuZGlyZWN0TG9jYWxzW2xvY2FsXSA9IHBhcmFtOwogICAgICBfZnVuY3Rpb25UeXBlUGFyYW1ldGVyTG9jYWxzLmFkZChsb2NhbCk7CiAgICB9CiAgfQoKICBMaXN0PExvY2FsPiBfZnVuY3Rpb25UeXBlUGFyYW1ldGVyTG9jYWxzID0gPExvY2FsPltdOwoKICAvLy8gQnVpbGRzIGEgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3Rvci4KICAvLy8KICAvLy8gR2VuZXJhdGl2ZSBjb25zdHJ1Y3RvcnMgYXJlIGJ1aWx0IGluIHN0YWdlcywgaW4gZWZmZWN0IGlubGluaW5nIHRoZQogIC8vLyBpbml0aWFsaXplcnMgYW5kIGNvbnN0cnVjdG9yIGJvZGllcyB1cCB0aGUgaW5oZXJpdGFuY2UgY2hhaW4uCiAgLy8vCiAgLy8vICAxLiBFeHRlbmQgbWV0aG9kIHBhcmFtZXRlcnMgd2l0aCBwYXJhbWV0ZXJzIHRoZSBjbGFzcydzIHR5cGUgcGFyYW1ldGVycy4KICAvLy8KICAvLy8gIDIuIEFkZCB0eXBlIGNoZWNrcyBmb3IgdmFsdWUgcGFyYW1ldGVycyAobWlnaHQgbmVlZCByZXN1bHQgb2YgKDEpKS4KICAvLy8KICAvLy8gIDMuIFdhbGsgaW5oZXJpdGFuY2UgY2hhaW4gdG8gYnVpbGQgYmluZGluZ3MgZm9yIHR5cGUgcGFyYW1ldGVycyBvZgogIC8vLyAgICAgc3VwZXJjbGFzc2VzIGFuZCBtaXhlZC1pbiBjbGFzc2VzLgogIC8vLwogIC8vLyAgNC4gQ29sbGVjdCBpbml0aWFsaXplciB2YWx1ZXMuIFdhbGsgdXAgaW5oZXJpdGFuY2UgY2hhaW4gdG8gY29sbGVjdCBmaWVsZAogIC8vLyAgICAgaW5pdGlhbGl6ZXJzIGZyb20gZmllbGQgZGVjbGFyYXRpb25zLCBpbml0aWFsaXppbmcgcGFyYW1ldGVycyBhbmQKICAvLy8gICAgIGluaXRpYWxpemVyLgogIC8vLwogIC8vLyAgNS4gQ3JlYXRlIHJlaWZpZWQgdHlwZSBpbmZvcm1hdGlvbiBmb3IgaW5zdGFuY2UuCiAgLy8vCiAgLy8vICA2LiBBbGxvY2F0ZSBpbnN0YW5jZSBhbmQgYXNzaWduIGluaXRpYWxpemVycyBhbmQgcmVpZmllZCB0eXBlIGluZm9ybWF0aW9uCiAgLy8vICAgICB0byBmaWVsZHMgYnkgY2FsbGluZyBKYXZhU2NyaXB0IGNvbnN0cnVjdG9yLgogIC8vLwogIC8vLyAgNy4gV2FsayBpbmhlcml0YW5jZSBjaGFpbiB0byBjYWxsIG9yIGlubGluZSBjb25zdHJ1Y3RvciBib2RpZXMuCiAgLy8vCiAgLy8vIEFsbCB0aGUgYmluZGluZ3MgYXJlIHB1dCBpbiB0aGUgY29uc3RydWN0b3IncyBsb2NhbHMgaGFuZGxlci4gVGhlCiAgLy8vIGltcGxpY2F0aW9uIGlzIHRoYXQgYSBjbGFzcyBjYW5ub3QgYmUgZXh0ZW5kZWQgb3IgbWl4ZWQtaW4gdHdpY2UuIElmIHdlIGluCiAgLy8vIGZ1dHVyZSBzdXBwb3J0IHJlcGVhdGVkIHVzZXMgb2YgYSBtaXhpbiBjbGFzcywgd2Ugc2hvdWxkIGRvIHNvIGJ5IGNsb25pbmcKICAvLy8gdGhlIG1peGluIGNsYXNzIGluIHRoZSBLZXJuZWwgaW5wdXQuCiAgdm9pZCBfYnVpbGRDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciwgaXIuQ29uc3RydWN0b3Igbm9kZSkgewogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRDcmVhdGUobm9kZSk7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzczsKCiAgICBpZiAoX2lubGluaW5nU3RhY2suaXNFbXB0eSkgewogICAgICBfb3BlbkZ1bmN0aW9uKGNvbnN0cnVjdG9yLAogICAgICAgICAgZnVuY3Rpb25Ob2RlOiBub2RlLmZ1bmN0aW9uLAogICAgICAgICAgcGFyYW1ldGVyU3RydWN0dXJlOiBjb25zdHJ1Y3Rvci5wYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgICBjaGVja3M6IFRhcmdldENoZWNrcy5ub25lKTsKICAgIH0KCiAgICAvLyBbY29uc3RydWN0b3JEYXRhLmZpZWxkVmFsdWVzXSBhY2N1bXVsYXRlcyB0aGUgZmllbGQgaW5pdGlhbGl6ZXIgdmFsdWVzLAogICAgLy8gd2hpY2ggbWF5IGJlIG92ZXJ3cml0dGVuIGJ5IGluaXRpYWxpemVyLWxpc3QgaW5pdGlhbGl6ZXJzLgogICAgQ29uc3RydWN0b3JEYXRhIGNvbnN0cnVjdG9yRGF0YSA9IENvbnN0cnVjdG9yRGF0YSgpOwogICAgX2J1aWxkSW5pdGlhbGl6ZXJzKG5vZGUsIGNvbnN0cnVjdG9yRGF0YSk7CgogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGNvbnN0cnVjdG9yQXJndW1lbnRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgIC8vIERvaW5nIHRoaXMgaW5zdGVhZCBvZiBmaWVsZFZhbHVlcy5mb3JFYWNoIGJlY2F1c2Ugd2UgaGF2ZW4ndCBkZWZpbmVkIHRoZQogICAgLy8gb3JkZXIgb2YgdGhlIGFyZ3VtZW50cyBoZXJlLiBXZSBjYW4gZGVmaW5lIHRoYXQgd2l0aCBKRWxlbWVudHMuCiAgICBib29sIGlzQ3VzdG9tRWxlbWVudCA9IF9uYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGNscykgJiYKICAgICAgICAhX25hdGl2ZURhdGEuaXNKc0ludGVyb3BDbGFzcyhjbHMpOwogICAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoY2xzKTsKICAgIExpc3Q8RmllbGRFbnRpdHk+IGZpZWxkcyA9IDxGaWVsZEVudGl0eT5bXTsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaEluc3RhbmNlRmllbGQoY2xzLAogICAgICAgIChDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzcywgRmllbGRFbnRpdHkgbWVtYmVyKSB7CiAgICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IGNvbnN0cnVjdG9yRGF0YS5maWVsZFZhbHVlc1ttZW1iZXJdOwogICAgICBGaWVsZEFuYWx5c2lzRGF0YSBmaWVsZERhdGEgPSBfZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEobWVtYmVyKTsKICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgICBhc3NlcnQoCiAgICAgICAgICAgIGZpZWxkRGF0YS5pc0luaXRpYWxpemVkSW5BbGxvY2F0b3IgfHwKICAgICAgICAgICAgICAgIGlzQ3VzdG9tRWxlbWVudCB8fAogICAgICAgICAgICAgICAgcmVwb3J0ZXIuaGFzUmVwb3J0ZWRFcnJvciwKICAgICAgICAgICAgJ05vIGluaXRpYWxpemVyIHZhbHVlIGZvciBmaWVsZCAke21lbWJlcn0nKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoIWZpZWxkRGF0YS5pc0VsaWRlZCkgewogICAgICAgICAgZmllbGRzLmFkZChtZW1iZXIpOwogICAgICAgICAgRGFydFR5cGUgdHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RmllbGRUeXBlKG1lbWJlcik7CiAgICAgICAgICB0eXBlID0gbG9jYWxzSGFuZGxlci5zdWJzdEluQ29udGV4dCh0eXBlKTsKICAgICAgICAgIGNvbnN0cnVjdG9yQXJndW1lbnRzLmFkZChfdHlwZUJ1aWxkZXIKICAgICAgICAgICAgICAucG90ZW50aWFsbHlDaGVja09yVHJ1c3RUeXBlT2ZBc3NpZ25tZW50KG1lbWJlciwgdmFsdWUsIHR5cGUpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwoKICAgIF9hZGRJbXBsaWNpdEluc3RhbnRpYXRpb24odGhpc1R5cGUpOwogICAgTGlzdDxEYXJ0VHlwZT4gaW5zdGFudGlhdGVkVHlwZXMgPQogICAgICAgIG5ldyBMaXN0PEludGVyZmFjZVR5cGU+LmZyb20oX2N1cnJlbnRJbXBsaWNpdEluc3RhbnRpYXRpb25zKTsKCiAgICBISW5zdHJ1Y3Rpb24gbmV3T2JqZWN0OwogICAgaWYgKGlzQ3VzdG9tRWxlbWVudCkgewogICAgICAvLyBCdWxrIGFzc2lnbiB0byB0aGUgaW5pdGlhbGl6ZWQgZmllbGRzLgogICAgICBuZXdPYmplY3QgPSBncmFwaC5leHBsaWNpdFJlY2VpdmVyUGFyYW1ldGVyOwogICAgICAvLyBOdWxsIGd1YXJkIGVuc3VyZXMgYW4gZXJyb3IgaWYgd2UgYXJlIGJlaW5nIGNhbGxlZCBmcm9tIGFuIGV4cGxpY2l0CiAgICAgIC8vICduZXcnIG9mIHRoZSBjb25zdHJ1Y3RvciBpbnN0ZWFkIG9mIHZpYSBhbiB1cGdyYWRlLiBJdCBpcyBvcHRpbWl6ZWQgb3V0CiAgICAgIC8vIGlmIHRoZXJlIGFyZSBmaWVsZCBpbml0aWFsaXplcnMuCiAgICAgIGFkZChuZXcgSEZpZWxkR2V0KAogICAgICAgICAgbnVsbCwgbmV3T2JqZWN0LCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgICBpc0Fzc2lnbmFibGU6IGZhbHNlKSk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgYWRkKG5ldyBIRmllbGRTZXQoX2Fic3RyYWN0VmFsdWVEb21haW4sIGZpZWxkc1tpXSwgbmV3T2JqZWN0LAogICAgICAgICAgICBjb25zdHJ1Y3RvckFyZ3VtZW50c1tpXSkpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBDcmVhdGUgdGhlIHJ1bnRpbWUgdHlwZSBpbmZvcm1hdGlvbiwgaWYgbmVlZGVkLgogICAgICBib29sIG5lZWRzVHlwZUFyZ3VtZW50cyA9CiAgICAgICAgICBjbG9zZWRXb3JsZC5ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGNscyk7CiAgICAgIGlmIChuZWVkc1R5cGVBcmd1bWVudHMpIHsKICAgICAgICBpZiAob3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgICAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjbHMpOwogICAgICAgICAgSEluc3RydWN0aW9uIHR5cGVBcmd1bWVudCA9CiAgICAgICAgICAgICAgX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnROZXdSdGkodGhpc1R5cGUsIHNvdXJjZUVsZW1lbnQpOwogICAgICAgICAgY29uc3RydWN0b3JBcmd1bWVudHMuYWRkKHR5cGVBcmd1bWVudCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFJlYWQgdGhlIHZhbHVlcyBvZiB0aGUgdHlwZSBhcmd1bWVudHMgYW5kIGNyZWF0ZSBhCiAgICAgICAgICAvLyBIVHlwZUluZm9FeHByZXNzaW9uIHRvIHNldCBvbiB0aGUgbmV3bHkgY3JlYXRlZCBvYmplY3QuCiAgICAgICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gdHlwZUFyZ3VtZW50cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICAgICAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjbHMpOwogICAgICAgICAgZm9yIChEYXJ0VHlwZSB0eXBlVmFyaWFibGUgaW4gdGhpc1R5cGUudHlwZUFyZ3VtZW50cykgewogICAgICAgICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPSBsb2NhbHNIYW5kbGVyCiAgICAgICAgICAgICAgICAucmVhZExvY2FsKGxvY2Fsc0hhbmRsZXIuZ2V0VHlwZVZhcmlhYmxlQXNMb2NhbCh0eXBlVmFyaWFibGUpKTsKICAgICAgICAgICAgdHlwZUFyZ3VtZW50cy5hZGQoYXJndW1lbnQpOwogICAgICAgICAgfQoKICAgICAgICAgIEhJbnN0cnVjdGlvbiB0eXBlSW5mbyA9IG5ldyBIVHlwZUluZm9FeHByZXNzaW9uKAogICAgICAgICAgICAgIFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuSU5TVEFOQ0UsCiAgICAgICAgICAgICAgdGhpc1R5cGUsCiAgICAgICAgICAgICAgdHlwZUFyZ3VtZW50cywKICAgICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSk7CiAgICAgICAgICBhZGQodHlwZUluZm8pOwogICAgICAgICAgY29uc3RydWN0b3JBcmd1bWVudHMuYWRkKHR5cGVJbmZvKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbmV3T2JqZWN0ID0gbmV3IEhDcmVhdGUoY2xzLCBjb25zdHJ1Y3RvckFyZ3VtZW50cywKICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU5vbk51bGxFeGFjdChjbHMpLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgIGluc3RhbnRpYXRlZFR5cGVzOiBpbnN0YW50aWF0ZWRUeXBlcywKICAgICAgICAgIGhhc1J0aUlucHV0OiBuZWVkc1R5cGVBcmd1bWVudHMpOwoKICAgICAgYWRkKG5ld09iamVjdCk7CiAgICB9CiAgICBfcmVtb3ZlSW1wbGljaXRJbnN0YW50aWF0aW9uKHRoaXNUeXBlKTsKCiAgICBISW5zdHJ1Y3Rpb24gaW50ZXJjZXB0b3I7CiAgICAvLyBHZW5lcmF0ZSBjYWxscyB0byB0aGUgY29uc3RydWN0b3IgYm9kaWVzLgogICAgZm9yIChpci5Db25zdHJ1Y3RvciBib2R5IGluIGNvbnN0cnVjdG9yRGF0YS5jb25zdHJ1Y3RvckNoYWluLnJldmVyc2VkKSB7CiAgICAgIGlmIChfaXNFbXB0eVN0YXRlbWVudChib2R5LmZ1bmN0aW9uLmJvZHkpKSBjb250aW51ZTsKCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBib2R5Q2FsbElucHV0cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICAgIGlmIChpc0N1c3RvbUVsZW1lbnQpIHsKICAgICAgICBpZiAoaW50ZXJjZXB0b3IgPT0gbnVsbCkgewogICAgICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IG5ldyBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUoY2xzKTsKICAgICAgICAgIGludGVyY2VwdG9yID0gZ3JhcGguYWRkQ29uc3RhbnQoY29uc3RhbnQsIGNsb3NlZFdvcmxkKTsKICAgICAgICB9CiAgICAgICAgYm9keUNhbGxJbnB1dHMuYWRkKGludGVyY2VwdG9yKTsKICAgICAgfQogICAgICBib2R5Q2FsbElucHV0cy5hZGQobmV3T2JqZWN0KTsKCiAgICAgIC8vIFBhc3MgdW5jYXB0dXJlZCBhcmd1bWVudHMgZmlyc3QsIGNhcHR1cmVkIGFyZ3VtZW50cyBpbiBhIGJveCwgdGhlbiB0eXBlCiAgICAgIC8vIGFyZ3VtZW50cy4KCiAgICAgIENvbnN0cnVjdG9yRW50aXR5IGlubGluZWRDb25zdHJ1Y3RvciA9IF9lbGVtZW50TWFwLmdldENvbnN0cnVjdG9yKGJvZHkpOwoKICAgICAgX2lubGluZWRGcm9tKAogICAgICAgICAgaW5saW5lZENvbnN0cnVjdG9yLCBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQ2FsbChib2R5LCBib2R5KSwKICAgICAgICAgICgpIHsKICAgICAgICBDb25zdHJ1Y3RvckJvZHlFbnRpdHkgY29uc3RydWN0b3JCb2R5ID0KICAgICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3JCb2R5KGJvZHkpOwoKICAgICAgICB2b2lkIGhhbmRsZVBhcmFtZXRlcihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUsIHtib29sIGlzRWxpZGVkfSkgewogICAgICAgICAgaWYgKGlzRWxpZGVkKSByZXR1cm47CgogICAgICAgICAgTG9jYWwgcGFyYW1ldGVyID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKG5vZGUpOwogICAgICAgICAgLy8gSWYgW3BhcmFtZXRlcl0gaXMgYm94ZWQsIGl0IHdpbGwgYmUgYSBmaWVsZCBpbiB0aGUgYm94IHBhc3NlZCBhcwogICAgICAgICAgLy8gdGhlIGxhc3QgcGFyYW1ldGVyLiBTbyBubyBuZWVkIHRvIGRpcmVjdGx5IHBhc3MgaXQuCiAgICAgICAgICBpZiAoIWxvY2Fsc0hhbmRsZXIuaXNCb3hlZChwYXJhbWV0ZXIpKSB7CiAgICAgICAgICAgIGJvZHlDYWxsSW5wdXRzLmFkZChsb2NhbHNIYW5kbGVyLnJlYWRMb2NhbChwYXJhbWV0ZXIpKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFByb3ZpZGUgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIGdlbmVyYXRpdmUgY29uc3RydWN0b3IgYm9keS4KICAgICAgICBmb3JFYWNoT3JkZXJlZFBhcmFtZXRlcihfZWxlbWVudE1hcCwgY29uc3RydWN0b3JCb2R5LCBoYW5kbGVQYXJhbWV0ZXIpOwoKICAgICAgICAvLyBJZiB0aGVyZSBhcmUgbG9jYWxzIHRoYXQgZXNjYXBlIChpLmUuIG11dGF0ZWQgaW4gY2xvc3VyZXMpLCB3ZSBwYXNzIHRoZQogICAgICAgIC8vIGJveCB0byB0aGUgY29uc3RydWN0b3IuCiAgICAgICAgQ2FwdHVyZWRTY29wZSBzY29wZURhdGEgPQogICAgICAgICAgICBfY2xvc3VyZURhdGFMb29rdXAuZ2V0Q2FwdHVyZWRTY29wZShjb25zdHJ1Y3RvckJvZHkpOwogICAgICAgIGlmIChzY29wZURhdGEucmVxdWlyZXNDb250ZXh0Qm94KSB7CiAgICAgICAgICBib2R5Q2FsbElucHV0cy5hZGQobG9jYWxzSGFuZGxlci5yZWFkTG9jYWwoc2NvcGVEYXRhLmNvbnRleHQpKTsKICAgICAgICB9CgogICAgICAgIC8vIFBhc3MgdHlwZSBhcmd1bWVudHMuCiAgICAgICAgQ2xhc3NFbnRpdHkgaW5saW5lZENvbnN0cnVjdG9yQ2xhc3MgPSBjb25zdHJ1Y3RvckJvZHkuZW5jbG9zaW5nQ2xhc3M7CiAgICAgICAgaWYgKGNsb3NlZFdvcmxkLnJ0aU5lZWQKICAgICAgICAgICAgLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGlubGluZWRDb25zdHJ1Y3RvckNsYXNzKSkgewogICAgICAgICAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSA9CiAgICAgICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShpbmxpbmVkQ29uc3RydWN0b3JDbGFzcyk7CiAgICAgICAgICBmb3IgKERhcnRUeXBlIHR5cGVWYXJpYWJsZSBpbiB0aGlzVHlwZS50eXBlQXJndW1lbnRzKSB7CiAgICAgICAgICAgIERhcnRUeXBlIHJlc3VsdCA9IGxvY2Fsc0hhbmRsZXIuc3Vic3RJbkNvbnRleHQodHlwZVZhcmlhYmxlKTsKICAgICAgICAgICAgSEluc3RydWN0aW9uIGFyZ3VtZW50ID0KICAgICAgICAgICAgICAgIF90eXBlQnVpbGRlci5hbmFseXplVHlwZUFyZ3VtZW50KHJlc3VsdCwgc291cmNlRWxlbWVudCk7CiAgICAgICAgICAgIGJvZHlDYWxsSW5wdXRzLmFkZChhcmd1bWVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzQ3VzdG9tRWxlbWVudCAmJiAvLyBUT0RPKDEzODM2KTogRml4IGlubGluaW5nLgogICAgICAgICAgICBfdHJ5SW5saW5lTWV0aG9kKGNvbnN0cnVjdG9yQm9keSwgbnVsbCwgbnVsbCwgYm9keUNhbGxJbnB1dHMsIG51bGwsCiAgICAgICAgICAgICAgICBub2RlLCBzb3VyY2VJbmZvcm1hdGlvbikpIHsKICAgICAgICAgIHBvcCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfaW52b2tlQ29uc3RydWN0b3JCb2R5KGJvZHksIGJvZHlDYWxsSW5wdXRzLAogICAgICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGREZWNsYXJhdGlvbihjb25zdHJ1Y3RvcikpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgaWYgKF9pbmxpbmluZ1N0YWNrLmlzRW1wdHkpIHsKICAgICAgX2Nsb3NlQW5kR290b0V4aXQoCiAgICAgICAgICBuZXcgSFJldHVybihfYWJzdHJhY3RWYWx1ZURvbWFpbiwgbmV3T2JqZWN0LCBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICBfY2xvc2VGdW5jdGlvbigpOwogICAgfSBlbHNlIHsKICAgICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbChfcmV0dXJuTG9jYWwsIG5ld09iamVjdCwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgfQoKICBzdGF0aWMgYm9vbCBfaXNFbXB0eVN0YXRlbWVudChpci5TdGF0ZW1lbnQgYm9keSkgewogICAgaWYgKGJvZHkgaXMgaXIuRW1wdHlTdGF0ZW1lbnQpIHJldHVybiB0cnVlOwogICAgaWYgKGJvZHkgaXMgaXIuQmxvY2spIHJldHVybiBib2R5LnN0YXRlbWVudHMuZXZlcnkoX2lzRW1wdHlTdGF0ZW1lbnQpOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBfaW52b2tlQ29uc3RydWN0b3JCb2R5KGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgTWVtYmVyRW50aXR5IGNvbnN0cnVjdG9yQm9keSA9IF9lbGVtZW50TWFwLmdldENvbnN0cnVjdG9yQm9keShjb25zdHJ1Y3Rvcik7CiAgICBISW52b2tlQ29uc3RydWN0b3JCb2R5IGludm9rZSA9IG5ldyBISW52b2tlQ29uc3RydWN0b3JCb2R5KGNvbnN0cnVjdG9yQm9keSwKICAgICAgICBpbnB1dHMsIF9hYnN0cmFjdFZhbHVlRG9tYWluLm5vbk51bGxUeXBlLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBhZGQoaW52b2tlKTsKICB9CgogIC8vLyBTZXRzIGNvbnRleHQgZm9yIGdlbmVyYXRpbmcgY29kZSB0aGF0IGlzIHRoZSByZXN1bHQgb2YgaW5saW5pbmcKICAvLy8gW2lubGluZWRUYXJnZXRdLgogIHZvaWQgX2lubGluZWRGcm9tKE1lbWJlckVudGl0eSBpbmxpbmVkVGFyZ2V0LAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBjYWxsU291cmNlSW5mb3JtYXRpb24sIGYoKSkgewogICAgcmVwb3J0ZXIud2l0aEN1cnJlbnRFbGVtZW50KGlubGluZWRUYXJnZXQsICgpIHsKICAgICAgX2VudGVyRnJhbWUoaW5saW5lZFRhcmdldCwgY2FsbFNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgdmFyIHJlc3VsdCA9IGYoKTsKICAgICAgX2xlYXZlRnJhbWUoKTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0pOwogIH0KCiAgdm9pZCBfZW5zdXJlVHlwZVZhcmlhYmxlc0ZvckluaXRpYWxpemVycygKICAgICAgQ29uc3RydWN0b3JEYXRhIGNvbnN0cnVjdG9yRGF0YSwgQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3MpIHsKICAgIGlmICghY29uc3RydWN0b3JEYXRhLmluY2x1ZGVkQ2xhc3Nlcy5hZGQoZW5jbG9zaW5nQ2xhc3MpKSByZXR1cm47CiAgICBpZiAoX3J0aU5lZWQuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoZW5jbG9zaW5nQ2xhc3MpKSB7CiAgICAgIC8vIElmIFtlbmNsb3NpbmdDbGFzc10gbmVlZHMgUlRJLCB3ZSBoYXZlIHRvIGdpdmUgYSB2YWx1ZSB0byBpdHMgdHlwZQogICAgICAvLyBwYXJhbWV0ZXJzLiBGb3IgYSBzdXBlciBjb25zdHJ1Y3RvciBjYWxsLCB0aGUgdHlwZSBpcyB0aGUgc3VwZXJ0eXBlCiAgICAgIC8vIG9mIGN1cnJlbnQgY2xhc3MuIEZvciBhIHJlZGlyZWN0aW5nIGNvbnN0cnVjdG9yLCB0aGUgdHlwZSBpcyB0aGUKICAgICAgLy8gY3VycmVudCB0eXBlLiBbTG9jYWxzSGFuZGxlci5zdWJzdEluQ29udGV4dF0gdGFrZXMgY2FyZSBvZiBib3RoLgogICAgICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShlbmNsb3NpbmdDbGFzcyk7CiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSA9IGxvY2Fsc0hhbmRsZXIuc3Vic3RJbkNvbnRleHQodGhpc1R5cGUpOwogICAgICBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMgPSB0eXBlLnR5cGVBcmd1bWVudHM7CiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVWYXJpYWJsZXMgPSB0aGlzVHlwZS50eXBlQXJndW1lbnRzOwogICAgICBhc3NlcnQoYXJndW1lbnRzLmxlbmd0aCA9PSB0eXBlVmFyaWFibGVzLmxlbmd0aCk7CiAgICAgIEl0ZXJhdG9yPERhcnRUeXBlPiB2YXJpYWJsZXMgPSB0eXBlVmFyaWFibGVzLml0ZXJhdG9yOwogICAgICB0eXBlLnR5cGVBcmd1bWVudHMuZm9yRWFjaCgoRGFydFR5cGUgYXJndW1lbnQpIHsKICAgICAgICB2YXJpYWJsZXMubW92ZU5leHQoKTsKICAgICAgICBUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSA9IHZhcmlhYmxlcy5jdXJyZW50OwogICAgICAgIGxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwoCiAgICAgICAgICAgIGxvY2Fsc0hhbmRsZXIuZ2V0VHlwZVZhcmlhYmxlQXNMb2NhbCh0eXBlVmFyaWFibGUpLAogICAgICAgICAgICBfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudChhcmd1bWVudCwgc291cmNlRWxlbWVudCkpOwogICAgICB9KTsKICAgIH0KICB9CgogIC8vLyBDb2xsZWN0cyB0aGUgdmFsdWVzIGZvciBmaWVsZCBpbml0aWFsaXplcnMgZm9yIHRoZSBkaXJlY3QgZmllbGRzIG9mCiAgLy8vIFtjbGF6el0uCiAgdm9pZCBfY29sbGVjdEZpZWxkVmFsdWVzKGlyLkNsYXNzIGNsYXp6LCBDb25zdHJ1Y3RvckRhdGEgY29uc3RydWN0b3JEYXRhKSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBfZWxlbWVudE1hcC5nZXRDbGFzcyhjbGF6eik7CiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hEaXJlY3RJbnN0YW5jZUZpZWxkKGNscywgKEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICAgIF9lbnN1cmVUeXBlVmFyaWFibGVzRm9ySW5pdGlhbGl6ZXJzKAogICAgICAgICAgY29uc3RydWN0b3JEYXRhLCBmaWVsZC5lbmNsb3NpbmdDbGFzcyk7CgogICAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24gPSBfZWxlbWVudE1hcC5nZXRNZW1iZXJEZWZpbml0aW9uKGZpZWxkKTsKICAgICAgaXIuRmllbGQgbm9kZTsKICAgICAgc3dpdGNoIChkZWZpbml0aW9uLmtpbmQpIHsKICAgICAgICBjYXNlIE1lbWJlcktpbmQucmVndWxhcjoKICAgICAgICAgIG5vZGUgPSBkZWZpbml0aW9uLm5vZGU7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgZmFpbGVkQXQoZmllbGQsICJVbmV4cGVjdGVkIG1lbWJlciBkZWZpbml0aW9uICRkZWZpbml0aW9uLiIpOwogICAgICB9CgogICAgICBib29sIGlnbm9yZUFsbG9jYXRvckFuYWx5c2lzID0gZmFsc2U7CiAgICAgIGlmIChfbmF0aXZlRGF0YS5pc05hdGl2ZU9yRXh0ZW5kc05hdGl2ZShjbHMpKSB7CiAgICAgICAgLy8gQE5hdGl2ZSBjbGFzc2VzIGhhdmUgJ2ZpZWxkcycgd2hpY2ggYXJlIHJlYWxseSBnZXR0ZXJzL3NldHRlci4gIERvCiAgICAgICAgLy8gbm90IHRyeSB0byBpbml0aWFsaXplIGUuZy4gJ3RhZ05hbWUnLgogICAgICAgIGlmIChfbmF0aXZlRGF0YS5pc05hdGl2ZUNsYXNzKGNscykpIHJldHVybjsKICAgICAgICAvLyBGaWVsZHMgdGhhdCBzdXJ2aXZlIHRoaXMgdGVzdCBhcmUgZmllbGRzIG9mIGN1c3RvbSBlbGVtZW50cy4KICAgICAgICBpZ25vcmVBbGxvY2F0b3JBbmFseXNpcyA9IHRydWU7CiAgICAgIH0KCiAgICAgIGlmIChpZ25vcmVBbGxvY2F0b3JBbmFseXNpcyB8fAogICAgICAgICAgIV9maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShmaWVsZCkuaXNJbml0aWFsaXplZEluQWxsb2NhdG9yKSB7CiAgICAgICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgPT0gbnVsbCkgewogICAgICAgICAgY29uc3RydWN0b3JEYXRhLmZpZWxkVmFsdWVzW2ZpZWxkXSA9CiAgICAgICAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gQ29tcGlsZSB0aGUgaW5pdGlhbGl6ZXIgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGZpZWxkIHNvIHdlIGtub3cgdGhhdAogICAgICAgICAgLy8gY2xhc3MgdHlwZSBwYXJhbWV0ZXJzIGFyZSBhY2Nlc3NlZCBhcyB2YWx1ZXMuCiAgICAgICAgICAvLyBUT0RPKHNyYSk6IEl0IHdvdWxkIGJlIHN1ZmZpY2llbnQgdG8ga25vdyB0aGUgY29udGV4dCB3YXMgYSBmaWVsZAogICAgICAgICAgLy8gaW5pdGlhbGl6ZXIuCiAgICAgICAgICBfaW5saW5lZEZyb20oZmllbGQsCiAgICAgICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZEFzc2lnbm1lbnQobm9kZS5pbml0aWFsaXplciksICgpIHsKICAgICAgICAgICAgbm9kZS5pbml0aWFsaXplci5hY2NlcHQodGhpcyk7CiAgICAgICAgICAgIGNvbnN0cnVjdG9yRGF0YS5maWVsZFZhbHVlc1tmaWVsZF0gPSBwb3AoKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQoKICBzdGF0aWMgYm9vbCBfaXNSZWRpcmVjdGluZ0NvbnN0cnVjdG9yKGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yKSA9PgogICAgICBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMKICAgICAgICAgIC5hbnkoKGluaXRpYWxpemVyKSA9PiBpbml0aWFsaXplciBpcyBpci5SZWRpcmVjdGluZ0luaXRpYWxpemVyKTsKCiAgLy8vIENvbGxlY3RzIGZpZWxkIGluaXRpYWxpemVycyBhbGwgdGhlIHdheSB1cCB0aGUgaW5oZXJpdGFuY2UgY2hhaW4uCiAgdm9pZCBfYnVpbGRJbml0aWFsaXplcnMoCiAgICAgIGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLCBDb25zdHJ1Y3RvckRhdGEgY29uc3RydWN0b3JEYXRhKSB7CiAgICBhc3NlcnQoCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3IoY29uc3RydWN0b3IpID09IF9sb2NhbHNNYXAuY3VycmVudE1lbWJlciwKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgX2xvY2Fsc01hcC5jdXJyZW50TWVtYmVyLAogICAgICAgICAgICAnRXhwZWN0ZWQgJHtfbG9jYWxzTWFwLmN1cnJlbnRNZW1iZXJ9ICcKICAgICAgICAgICAgJ2J1dCBmb3VuZCAke19lbGVtZW50TWFwLmdldENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKX0uJykpOwogICAgY29uc3RydWN0b3JEYXRhLmNvbnN0cnVjdG9yQ2hhaW4uYWRkKGNvbnN0cnVjdG9yKTsKCiAgICBpZiAoIV9pc1JlZGlyZWN0aW5nQ29uc3RydWN0b3IoY29uc3RydWN0b3IpKSB7CiAgICAgIC8vIENvbXB1dGUgdmFsdWVzIGZvciBmaWVsZCBpbml0aWFsaXplcnMsIGJ1dCBvbmx5IGlmIHRoaXMgaXMgbm90IGEKICAgICAgLy8gcmVkaXJlY3RpbmcgY29uc3RydWN0b3IsIHNpbmNlIHRoZSB0YXJnZXQgd2lsbCBjb21wdXRlIHRoZSBmaWVsZHMuCiAgICAgIF9jb2xsZWN0RmllbGRWYWx1ZXMoY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3MsIGNvbnN0cnVjdG9yRGF0YSk7CiAgICB9CiAgICB2YXIgZm91bmRTdXBlck9yUmVkaXJlY3RDYWxsID0gZmFsc2U7CiAgICBmb3IgKHZhciBpbml0aWFsaXplciBpbiBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMpIHsKICAgICAgaWYgKGluaXRpYWxpemVyIGlzIGlyLkZpZWxkSW5pdGlhbGl6ZXIpIHsKICAgICAgICBGaWVsZEVudGl0eSBmaWVsZCA9IF9lbGVtZW50TWFwLmdldEZpZWxkKGluaXRpYWxpemVyLmZpZWxkKTsKICAgICAgICBpZiAoIV9maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShmaWVsZCkuaXNJbml0aWFsaXplZEluQWxsb2NhdG9yKSB7CiAgICAgICAgICBpbml0aWFsaXplci52YWx1ZS5hY2NlcHQodGhpcyk7CiAgICAgICAgICBjb25zdHJ1Y3RvckRhdGEuZmllbGRWYWx1ZXNbZmllbGRdID0gcG9wKCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGluaXRpYWxpemVyIGlzIGlyLlN1cGVySW5pdGlhbGl6ZXIpIHsKICAgICAgICBhc3NlcnQoIWZvdW5kU3VwZXJPclJlZGlyZWN0Q2FsbCk7CiAgICAgICAgZm91bmRTdXBlck9yUmVkaXJlY3RDYWxsID0gdHJ1ZTsKICAgICAgICBfaW5saW5lU3VwZXJJbml0aWFsaXplcihpbml0aWFsaXplciwgY29uc3RydWN0b3JEYXRhLCBjb25zdHJ1Y3Rvcik7CiAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXIgaXMgaXIuUmVkaXJlY3RpbmdJbml0aWFsaXplcikgewogICAgICAgIGFzc2VydCghZm91bmRTdXBlck9yUmVkaXJlY3RDYWxsKTsKICAgICAgICBmb3VuZFN1cGVyT3JSZWRpcmVjdENhbGwgPSB0cnVlOwogICAgICAgIF9pbmxpbmVSZWRpcmVjdGluZ0luaXRpYWxpemVyKAogICAgICAgICAgICBpbml0aWFsaXplciwgY29uc3RydWN0b3JEYXRhLCBjb25zdHJ1Y3Rvcik7CiAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXIgaXMgaXIuTG9jYWxJbml0aWFsaXplcikgewogICAgICAgIC8vIExvY2FsSW5pdGlhbGl6ZXIgaXMgbGlrZSBhIGxldC1leHByZXNzaW9uIHRoYXQgaXMgaW4gc2NvcGUgZm9yIHRoZQogICAgICAgIC8vIHJlc3Qgb2YgdGhlIGluaXRpYWxpemVycy4KICAgICAgICBpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlID0gaW5pdGlhbGl6ZXIudmFyaWFibGU7CiAgICAgICAgYXNzZXJ0KHZhcmlhYmxlLmlzRmluYWwpOwogICAgICAgIHZhcmlhYmxlLmluaXRpYWxpemVyLmFjY2VwdCh0aGlzKTsKICAgICAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBwb3AoKTsKICAgICAgICAvLyBUT0RPKHNyYSk6IEFwcGx5IGluZmVycmVkIHR5cGUgaW5mb3JtYXRpb24uCiAgICAgICAgX2xldEJpbmRpbmdzW3ZhcmlhYmxlXSA9IHZhbHVlOwogICAgICB9IGVsc2UgaWYgKGluaXRpYWxpemVyIGlzIGlyLkFzc2VydEluaXRpYWxpemVyKSB7CiAgICAgICAgLy8gQXNzZXJ0IGluIGluaXRpYWxpemVyIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGluIGRhcnQyanMuCiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBhc3NlcnQgaW4gaW5pdGlhbGl6ZXIuCiAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXIgaXMgaXIuSW52YWxpZEluaXRpYWxpemVyKSB7CiAgICAgICAgYXNzZXJ0KGZhbHNlLCAnaXIuSW52YWxpZEluaXRpYWxpemVyIG5vdCBoYW5kbGVkJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KGZhbHNlLCAnVW5oYW5kbGVkIGluaXRpYWxpemVyIGlyLiR7aW5pdGlhbGl6ZXIucnVudGltZVR5cGV9Jyk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoIWZvdW5kU3VwZXJPclJlZGlyZWN0Q2FsbCkgewogICAgICBhc3NlcnQoCiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRDbGFzcyhjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzcykgPT0KICAgICAgICAgICAgICAgICAgX2VsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MgfHwKICAgICAgICAgICAgICBjb25zdHJ1Y3Rvci5pbml0aWFsaXplcnMuYW55KF9FcnJvbmVvdXNJbml0aWFsaXplclZpc2l0b3IuY2hlY2spLAogICAgICAgICAgJ0FsbCBjb25zdHJ1Y3RvcnMgc2hvdWxkIGhhdmUgc3VwZXItIG9yIHJlZGlyZWN0aW5nLSBpbml0aWFsaXplcnMsJwogICAgICAgICAgJyBleGNlcHQgT2JqZWN0KCknCiAgICAgICAgICAnICR7Y29uc3RydWN0b3IuaW5pdGlhbGl6ZXJzfScpOwogICAgfQogIH0KCiAgTGlzdDxISW5zdHJ1Y3Rpb24+IF9ub3JtYWxpemVBbmRCdWlsZEFyZ3VtZW50cygKICAgICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uLCBpci5Bcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICB2YXIgYnVpbHRBcmd1bWVudHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgdmFyIHBvc2l0aW9uYWxJbmRleCA9IDA7CiAgICBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5mb3JFYWNoKChpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgICAgaWYgKHBvc2l0aW9uYWxJbmRleCA8IGFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCkgewogICAgICAgIGFyZ3VtZW50cy5wb3NpdGlvbmFsW3Bvc2l0aW9uYWxJbmRleCsrXS5hY2NlcHQodGhpcyk7CiAgICAgICAgYnVpbHRBcmd1bWVudHMuYWRkKHBvcCgpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50VmFsdWUgPQogICAgICAgICAgICBfZWxlbWVudE1hcC5nZXRDb25zdGFudFZhbHVlKG5vZGUuaW5pdGlhbGl6ZXIsIGltcGxpY2l0TnVsbDogdHJ1ZSk7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICBjb25zdGFudFZhbHVlICE9IG51bGwsCiAgICAgICAgICAgIGZhaWxlZEF0KF9lbGVtZW50TWFwLmdldE1ldGhvZChmdW5jdGlvbi5wYXJlbnQpLAogICAgICAgICAgICAgICAgJ05vIGNvbnN0YW50IGNvbXB1dGVkIGZvciAkbm9kZScpKTsKICAgICAgICBidWlsdEFyZ3VtZW50cy5hZGQoZ3JhcGguYWRkQ29uc3RhbnQoY29uc3RhbnRWYWx1ZSwgY2xvc2VkV29ybGQpKTsKICAgICAgfQogICAgfSk7CiAgICBmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMudG9MaXN0KCkKICAgICAgLi5zb3J0KG5hbWVkT3JkZXJpbmcpCiAgICAgIC4uZm9yRWFjaCgoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICAgICAgdmFyIGNvcnJlc3BvbmRpbmdOYW1lZCA9IGFyZ3VtZW50cy5uYW1lZAogICAgICAgICAgICAuZmlyc3RXaGVyZSgobmFtZWQpID0+IG5hbWVkLm5hbWUgPT0gbm9kZS5uYW1lLCBvckVsc2U6ICgpID0+IG51bGwpOwogICAgICAgIGlmIChjb3JyZXNwb25kaW5nTmFtZWQgIT0gbnVsbCkgewogICAgICAgICAgY29ycmVzcG9uZGluZ05hbWVkLnZhbHVlLmFjY2VwdCh0aGlzKTsKICAgICAgICAgIGJ1aWx0QXJndW1lbnRzLmFkZChwb3AoKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnRWYWx1ZSA9IF9lbGVtZW50TWFwCiAgICAgICAgICAgICAgLmdldENvbnN0YW50VmFsdWUobm9kZS5pbml0aWFsaXplciwgaW1wbGljaXROdWxsOiB0cnVlKTsKICAgICAgICAgIGFzc2VydCgKICAgICAgICAgICAgICBjb25zdGFudFZhbHVlICE9IG51bGwsCiAgICAgICAgICAgICAgZmFpbGVkQXQoX2VsZW1lbnRNYXAuZ2V0TWV0aG9kKGZ1bmN0aW9uLnBhcmVudCksCiAgICAgICAgICAgICAgICAgICdObyBjb25zdGFudCBjb21wdXRlZCBmb3IgJG5vZGUnKSk7CiAgICAgICAgICBidWlsdEFyZ3VtZW50cy5hZGQoZ3JhcGguYWRkQ29uc3RhbnQoY29uc3RhbnRWYWx1ZSwgY2xvc2VkV29ybGQpKTsKICAgICAgICB9CiAgICAgIH0pOwoKICAgIHJldHVybiBidWlsdEFyZ3VtZW50czsKICB9CgogIC8vLyBJbmxpbmVzIHRoZSBnaXZlbiByZWRpcmVjdGluZyBbY29uc3RydWN0b3JdJ3MgaW5pdGlhbGl6ZXJzIGJ5IGNvbGxlY3RpbmcKICAvLy8gaXRzIGZpZWxkIHZhbHVlcyBhbmQgYnVpbGRpbmcgaXRzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVycy4gV2UgdmlzaXQgc3VwZXIKICAvLy8gY29uc3RydWN0b3JzIGFsbCB0aGUgd2F5IHVwIHRvIHRoZSBbT2JqZWN0XSBjb25zdHJ1Y3Rvci4KICB2b2lkIF9pbmxpbmVSZWRpcmVjdGluZ0luaXRpYWxpemVyKGlyLlJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIsCiAgICAgIENvbnN0cnVjdG9yRGF0YSBjb25zdHJ1Y3RvckRhdGEsIGlyLkNvbnN0cnVjdG9yIGNhbGxlcikgewogICAgdmFyIHN1cGVyT3JSZWRpcmVjdENvbnN0cnVjdG9yID0gaW5pdGlhbGl6ZXIudGFyZ2V0OwogICAgdmFyIGFyZ3VtZW50cyA9IF9ub3JtYWxpemVBbmRCdWlsZEFyZ3VtZW50cygKICAgICAgICBzdXBlck9yUmVkaXJlY3RDb25zdHJ1Y3Rvci5mdW5jdGlvbiwgaW5pdGlhbGl6ZXIuYXJndW1lbnRzKTsKCiAgICAvLyBSZWRpcmVjdGluZyBpbml0aWFsaXplciBhbHJlYWR5IGhhcyBbbG9jYWxzSGFuZGxlcl0gYmluZGluZ3MgZm9yIHR5cGUKICAgIC8vIHBhcmFtZXRlcnMgZnJvbSB0aGUgcmVkaXJlY3RpbmcgY29uc3RydWN0b3IuCgogICAgLy8gRm9yIHJlZGlyZWN0aW5nIGNvbnN0cnVjdG9ycywgdGhlIGZpZWxkcyB3aWxsIGJlIGluaXRpYWxpemVkIGxhdGVyIGJ5IHRoZQogICAgLy8gZWZmZWN0aXZlIHRhcmdldCwgc28gd2UgZG9uJ3QgZG8gaXQgaGVyZS4KCiAgICBfaW5saW5lU3VwZXJPclJlZGlyZWN0Q29tbW9uKGluaXRpYWxpemVyLCBzdXBlck9yUmVkaXJlY3RDb25zdHJ1Y3RvciwKICAgICAgICBhcmd1bWVudHMsIGNvbnN0cnVjdG9yRGF0YSwgY2FsbGVyKTsKICB9CgogIC8vLyBJbmxpbmVzIHRoZSBnaXZlbiBzdXBlciBbY29uc3RydWN0b3JdJ3MgaW5pdGlhbGl6ZXJzIGJ5IGNvbGxlY3RpbmcgaXRzCiAgLy8vIGZpZWxkIHZhbHVlcyBhbmQgYnVpbGRpbmcgaXRzIGNvbnN0cnVjdG9yIGluaXRpYWxpemVycy4gV2UgdmlzaXQgc3VwZXIKICAvLy8gY29uc3RydWN0b3JzIGFsbCB0aGUgd2F5IHVwIHRvIHRoZSBbT2JqZWN0XSBjb25zdHJ1Y3Rvci4KICB2b2lkIF9pbmxpbmVTdXBlckluaXRpYWxpemVyKGlyLlN1cGVySW5pdGlhbGl6ZXIgaW5pdGlhbGl6ZXIsCiAgICAgIENvbnN0cnVjdG9yRGF0YSBjb25zdHJ1Y3RvckRhdGEsIGlyLkNvbnN0cnVjdG9yIGNhbGxlcikgewogICAgdmFyIHRhcmdldCA9IGluaXRpYWxpemVyLnRhcmdldDsKICAgIHZhciBhcmd1bWVudHMgPQogICAgICAgIF9ub3JtYWxpemVBbmRCdWlsZEFyZ3VtZW50cyh0YXJnZXQuZnVuY3Rpb24sIGluaXRpYWxpemVyLmFyZ3VtZW50cyk7CgogICAgaXIuQ2xhc3MgY2FsbGVyQ2xhc3MgPSBjYWxsZXIuZW5jbG9zaW5nQ2xhc3M7CiAgICBpci5TdXBlcnR5cGUgc3VwZXJ0eXBlID0gY2FsbGVyQ2xhc3Muc3VwZXJ0eXBlOwoKICAgIC8vIFRoZSBjbGFzcyBvZiB0aGUgc3VwZXItY29uc3RydWN0b3IgbWF5IG5vdCBiZSB0aGUgc3VwZXJ0eXBlIGNsYXNzLiBJbgogICAgLy8gdGhpcyBjYXNlLCB3ZSBtdXN0IGdvIHVwIHRoZSBjbGFzcyBoaWVyYXJjaHkgdW50aWwgd2UgcmVhY2ggdGhlIGNsYXNzCiAgICAvLyBjb250YWluaW5nIHRoZSBzdXBlci1jb25zdHJ1Y3Rvci4KICAgIHdoaWxlIChzdXBlcnR5cGUuY2xhc3NOb2RlICE9IHRhcmdldC5lbmNsb3NpbmdDbGFzcykgewogICAgICAvLyBGaWVsZHMgZnJvbSB1bm5hbWVkIG1peGluIGFwcGxpY2F0aW9uIGNsYXNzZXMgKGllIE9iamVjdCZGb28pIGdldAogICAgICAvLyAiY29sbGVjdGVkIiB3aXRoIHRoZSByZWd1bGFyIHN1cGVydHlwZSBmaWVsZHMsIHNvIHdlIG11c3QgYmluZCB0eXBlCiAgICAgIC8vIHBhcmFtZXRlcnMgZnJvbSBib3RoIHRoZSBzdXBlcnR5cGUgYW5kIHRoZSBzdXBlcnR5cGUncyBtaXhpbiBjbGFzc2VzCiAgICAgIC8vIGJlZm9yZSBjb2xsZWN0aW5nIHRoZSBmaWVsZCB2YWx1ZXMuCiAgICAgIF9jb2xsZWN0RmllbGRWYWx1ZXMoc3VwZXJ0eXBlLmNsYXNzTm9kZSwgY29uc3RydWN0b3JEYXRhKTsKICAgICAgc3VwZXJ0eXBlID0gc3VwZXJ0eXBlLmNsYXNzTm9kZS5zdXBlcnR5cGU7CiAgICB9CiAgICBzdXBlcnR5cGUgPSBzdXBlcnR5cGUuY2xhc3NOb2RlLnN1cGVydHlwZTsKCiAgICBfaW5saW5lU3VwZXJPclJlZGlyZWN0Q29tbW9uKAogICAgICAgIGluaXRpYWxpemVyLCB0YXJnZXQsIGFyZ3VtZW50cywgY29uc3RydWN0b3JEYXRhLCBjYWxsZXIpOwogIH0KCiAgdm9pZCBfaW5saW5lU3VwZXJPclJlZGlyZWN0Q29tbW9uKAogICAgICBpci5Jbml0aWFsaXplciBpbml0aWFsaXplciwKICAgICAgaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMsCiAgICAgIENvbnN0cnVjdG9yRGF0YSBjb25zdHJ1Y3RvckRhdGEsCiAgICAgIGlyLkNvbnN0cnVjdG9yIGNhbGxlcikgewogICAgdmFyIGluZGV4ID0gMDsKCiAgICBDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50ID0gX2VsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3IoY29uc3RydWN0b3IpOwogICAgU2NvcGVJbmZvIG9sZFNjb3BlSW5mbyA9IGxvY2Fsc0hhbmRsZXIuc2NvcGVJbmZvOwoKICAgIF9pbmxpbmVkRnJvbSgKICAgICAgICBlbGVtZW50LCBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkQ2FsbChpbml0aWFsaXplciwgaW5pdGlhbGl6ZXIpLAogICAgICAgICgpIHsKICAgICAgdm9pZCBoYW5kbGVQYXJhbWV0ZXIoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICAgICAgTG9jYWwgcGFyYW1ldGVyID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKG5vZGUpOwogICAgICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9IGFyZ3VtZW50c1tpbmRleCsrXTsKICAgICAgICAvLyBCZWNhdXNlIHdlIGFyZSBpbmxpbmluZyB0aGUgaW5pdGlhbGl6ZXIsIHdlIG11c3QgdXBkYXRlCiAgICAgICAgLy8gd2hhdCB3YXMgZ2l2ZW4gYXMgcGFyYW1ldGVyLiBUaGlzIHdpbGwgYmUgdXNlZCBpbiBjYXNlCiAgICAgICAgLy8gdGhlcmUgaXMgYSBwYXJhbWV0ZXIgY2hlY2sgZXhwcmVzc2lvbiBpbiB0aGUgaW5pdGlhbGl6ZXIuCiAgICAgICAgcGFyYW1ldGVyc1twYXJhbWV0ZXJdID0gYXJndW1lbnQ7CiAgICAgICAgbG9jYWxzSGFuZGxlci51cGRhdGVMb2NhbChwYXJhbWV0ZXIsIGFyZ3VtZW50KTsKICAgICAgfQoKICAgICAgY29uc3RydWN0b3IuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMuZm9yRWFjaChoYW5kbGVQYXJhbWV0ZXIpOwogICAgICBjb25zdHJ1Y3Rvci5mdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMudG9MaXN0KCkKICAgICAgICAuLnNvcnQobmFtZWRPcmRlcmluZykKICAgICAgICAuLmZvckVhY2goaGFuZGxlUGFyYW1ldGVyKTsKCiAgICAgIF9lbnN1cmVUeXBlVmFyaWFibGVzRm9ySW5pdGlhbGl6ZXJzKAogICAgICAgICAgY29uc3RydWN0b3JEYXRhLCBlbGVtZW50LmVuY2xvc2luZ0NsYXNzKTsKCiAgICAgIC8vIFNldCB0aGUgbG9jYWxzIGhhbmRsZXIgc3RhdGUgYXMgaWYgd2Ugd2VyZSBpbmxpbmluZyB0aGUgY29uc3RydWN0b3IuCiAgICAgIFNjb3BlSW5mbyBuZXdTY29wZUluZm8gPSBfY2xvc3VyZURhdGFMb29rdXAuZ2V0U2NvcGVJbmZvKGVsZW1lbnQpOwogICAgICBsb2NhbHNIYW5kbGVyLnNjb3BlSW5mbyA9IG5ld1Njb3BlSW5mbzsKICAgICAgbG9jYWxzSGFuZGxlci5lbnRlclNjb3BlKF9jbG9zdXJlRGF0YUxvb2t1cC5nZXRDYXB0dXJlZFNjb3BlKGVsZW1lbnQpLAogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZERlY2xhcmF0aW9uKGVsZW1lbnQpKTsKICAgICAgX2J1aWxkSW5pdGlhbGl6ZXJzKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3RvckRhdGEpOwogICAgfSk7CiAgICBsb2NhbHNIYW5kbGVyLnNjb3BlSW5mbyA9IG9sZFNjb3BlSW5mbzsKICB9CgogIC8vLyBDb25zdHJ1Y3RzIGEgc3BlY2lhbCBzaWduYXR1cmUgZnVuY3Rpb24gZm9yIGEgY2xvc3VyZS4gSXQgaXMgdW5pcXVlIGluCiAgLy8vIHRoYXQgbm8gY29ycmVzcG9uZGluZyBpci5Ob2RlIGFjdHVhbGx5IGV4aXN0cyBmb3IgaXQuIFdlIGp1c3QgdXNlIHRoZQogIC8vLyB0YXJnZXRFbGVtZW50LgogIHZvaWQgX2J1aWxkTWV0aG9kU2lnbmF0dXJlKGlyLkZ1bmN0aW9uTm9kZSBvcmlnaW5hbENsb3N1cmVOb2RlKSB7CiAgICBfb3BlbkZ1bmN0aW9uKHRhcmdldEVsZW1lbnQsIGNoZWNrczogVGFyZ2V0Q2hlY2tzLm5vbmUpOwogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IHR5cGVBcmd1bWVudHMgPSA8SEluc3RydWN0aW9uPltdOwoKICAgIC8vIEFkZCBmdW5jdGlvbiB0eXBlIHZhcmlhYmxlcy4KICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPQogICAgICAgIF9lbGVtZW50TWFwLmdldEZ1bmN0aW9uVHlwZShvcmlnaW5hbENsb3N1cmVOb2RlKTsKICAgIGZ1bmN0aW9uVHlwZS5mb3JFYWNoVHlwZVZhcmlhYmxlKChUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZVR5cGUpIHsKICAgICAgRGFydFR5cGUgcmVzdWx0ID0gbG9jYWxzSGFuZGxlci5zdWJzdEluQ29udGV4dCh0eXBlVmFyaWFibGVUeXBlKTsKICAgICAgSEluc3RydWN0aW9uIGFyZ3VtZW50ID0KICAgICAgICAgIF90eXBlQnVpbGRlci5hbmFseXplVHlwZUFyZ3VtZW50KHJlc3VsdCwgc291cmNlRWxlbWVudCk7CiAgICAgIHR5cGVBcmd1bWVudHMuYWRkKGFyZ3VtZW50KTsKICAgIH0pOwogICAgcHVzaChuZXcgSFR5cGVJbmZvRXhwcmVzc2lvbigKICAgICAgICBUeXBlSW5mb0V4cHJlc3Npb25LaW5kLkNPTVBMRVRFLAogICAgICAgIF9lbGVtZW50TWFwLmdldEZ1bmN0aW9uVHlwZShvcmlnaW5hbENsb3N1cmVOb2RlKSwKICAgICAgICB0eXBlQXJndW1lbnRzLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmZ1bmN0aW9uVHlwZSkpOwogICAgSEluc3RydWN0aW9uIHZhbHVlID0gcG9wKCk7CiAgICBjbG9zZShuZXcgSFJldHVybihfYWJzdHJhY3RWYWx1ZURvbWFpbiwgdmFsdWUsCiAgICAgICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRSZXR1cm4ob3JpZ2luYWxDbG9zdXJlTm9kZSkpKQogICAgICAgIC5hZGRTdWNjZXNzb3IoZ3JhcGguZXhpdCk7CgogICAgX2Nsb3NlRnVuY3Rpb24oKTsKICB9CgogIC8vLyBDb25zdHJ1Y3RzIGEgc3BlY2lhbCBzaWduYXR1cmUgZnVuY3Rpb24gZm9yIGEgY2xvc3VyZS4KICB2b2lkIF9idWlsZE1ldGhvZFNpZ25hdHVyZU5ld1J0aShpci5GdW5jdGlvbk5vZGUgb3JpZ2luYWxDbG9zdXJlTm9kZSkgewogICAgLy8gVGhlIHNpZ25hdHVyZSBmdW5jdGlvbiBoYXMgbm8gY29ycmVzcG9uZGluZyBpci5Ob2RlLCBzbyB3ZSBqdXN0IHVzZSB0aGUKICAgIC8vIHRhcmdldEVsZW1lbnQgdG8gc2V0IHVwIHRoZSB0eXBlIGVudmlyb25tZW50LgogICAgX29wZW5GdW5jdGlvbih0YXJnZXRFbGVtZW50LCBjaGVja3M6IFRhcmdldENoZWNrcy5ub25lKTsKICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPQogICAgICAgIF9lbGVtZW50TWFwLmdldEZ1bmN0aW9uVHlwZShvcmlnaW5hbENsb3N1cmVOb2RlKTsKICAgIEhJbnN0cnVjdGlvbiBydGkgPQogICAgICAgIF90eXBlQnVpbGRlci5hbmFseXplVHlwZUFyZ3VtZW50TmV3UnRpKGZ1bmN0aW9uVHlwZSwgc291cmNlRWxlbWVudCk7CiAgICBjbG9zZShuZXcgSFJldHVybihfYWJzdHJhY3RWYWx1ZURvbWFpbiwgcnRpLAogICAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkUmV0dXJuKG9yaWdpbmFsQ2xvc3VyZU5vZGUpKSkKICAgICAgICAuYWRkU3VjY2Vzc29yKGdyYXBoLmV4aXQpOwogICAgX2Nsb3NlRnVuY3Rpb24oKTsKICB9CgogIC8vLyBCdWlsZHMgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3RvciBib2R5LgogIHZvaWQgX2J1aWxkQ29uc3RydWN0b3JCb2R5KGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yKSB7CiAgICBGdW5jdGlvbkVudGl0eSBjb25zdHJ1Y3RvckJvZHkgPQogICAgICAgIF9lbGVtZW50TWFwLmdldENvbnN0cnVjdG9yQm9keShjb25zdHJ1Y3Rvcik7CiAgICBfb3BlbkZ1bmN0aW9uKGNvbnN0cnVjdG9yQm9keSwKICAgICAgICBmdW5jdGlvbk5vZGU6IGNvbnN0cnVjdG9yLmZ1bmN0aW9uLAogICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZTogY29uc3RydWN0b3JCb2R5LnBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICBjaGVja3M6IFRhcmdldENoZWNrcy5ub25lKTsKICAgIGNvbnN0cnVjdG9yLmZ1bmN0aW9uLmJvZHkuYWNjZXB0KHRoaXMpOwogICAgX2Nsb3NlRnVuY3Rpb24oKTsKICB9CgogIC8vLyBCdWlsZHMgYSBTU0EgZ3JhcGggZm9yIEZ1bmN0aW9uTm9kZXMsIGZvdW5kIGluIEZ1bmN0aW9uRXhwcmVzc2lvbnMgYW5kCiAgLy8vIFByb2NlZHVyZXMuCiAgdm9pZCBfYnVpbGRGdW5jdGlvbk5vZGUoCiAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLCBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlKSB7CiAgICBpZiAoZnVuY3Rpb25Ob2RlLmFzeW5jTWFya2VyICE9IGlyLkFzeW5jTWFya2VyLlN5bmMpIHsKICAgICAgX2J1aWxkR2VuZXJhdG9yKGZ1bmN0aW9uLCBmdW5jdGlvbk5vZGUpOwogICAgICByZXR1cm47CiAgICB9CgogICAgX29wZW5GdW5jdGlvbihmdW5jdGlvbiwKICAgICAgICBmdW5jdGlvbk5vZGU6IGZ1bmN0aW9uTm9kZSwKICAgICAgICBwYXJhbWV0ZXJTdHJ1Y3R1cmU6IGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICBjaGVja3M6IF9jaGVja3NGb3JGdW5jdGlvbihmdW5jdGlvbikpOwoKICAgIC8vIElmIFtmdW5jdGlvbk5vZGVdIGlzIGBvcGVyYXRvcj09YCB3ZSBleHBsaWNpdGx5IGFkZCBhIG51bGwgY2hlY2sgYXQgdGhlCiAgICAvLyBiZWdpbm5pbmcgb2YgdGhlIG1ldGhvZC4gVGhpcyBpcyB0byBhdm9pZCBoYXZpbmcgY2FsbCBzaXRlcyBkbyB0aGUgbnVsbAogICAgLy8gY2hlY2suCiAgICBpZiAoZnVuY3Rpb24ubmFtZSA9PSAnPT0nKSB7CiAgICAgIGlmICghX2NvbW1vbkVsZW1lbnRzLm9wZXJhdG9yRXFIYW5kbGVzTnVsbEFyZ3VtZW50KGZ1bmN0aW9uKSkgewogICAgICAgIF9oYW5kbGVJZigKICAgICAgICAgICAgdmlzaXRDb25kaXRpb246ICgpIHsKICAgICAgICAgICAgICBIUGFyYW1ldGVyVmFsdWUgcGFyYW1ldGVyID0gcGFyYW1ldGVycy52YWx1ZXMuZmlyc3Q7CiAgICAgICAgICAgICAgcHVzaChuZXcgSElkZW50aXR5KHBhcmFtZXRlciwgZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSwKICAgICAgICAgICAgICAgICAgbnVsbCwgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgdmlzaXRUaGVuOiAoKSB7CiAgICAgICAgICAgICAgX2Nsb3NlQW5kR290b0V4aXQobmV3IEhSZXR1cm4oCiAgICAgICAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICAgICAgICAgICAgICBncmFwaC5hZGRDb25zdGFudEJvb2woZmFsc2UsIGNsb3NlZFdvcmxkKSwKICAgICAgICAgICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZFJldHVybihmdW5jdGlvbk5vZGUpKSk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHZpc2l0RWxzZTogbnVsbCwKICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRJZihmdW5jdGlvbk5vZGUpKTsKICAgICAgfQogICAgfQogICAgaWYgKGNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCd1bnJlYWNoYWJsZS10aHJvdycpKSB7CiAgICAgIHZhciBlbXB0eVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzLnZhbHVlcy53aGVyZSgocCkgPT4KICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzRW1wdHkocC5pbnN0cnVjdGlvblR5cGUpLmlzRGVmaW5pdGVseVRydWUpOwogICAgICBpZiAoZW1wdHlQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHsKICAgICAgICBfYWRkQ29tbWVudCgnJHtlbXB0eVBhcmFtZXRlcnN9IGluZmVycmVkIGFzIFtlbXB0eV0nKTsKICAgICAgICBhZGQobmV3IEhJbnZva2VTdGF0aWMoCiAgICAgICAgICAgIF9jb21tb25FbGVtZW50cy5hc3NlcnRVbnJlYWNoYWJsZU1ldGhvZCwKICAgICAgICAgICAgPEhJbnN0cnVjdGlvbj5bXSwKICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsCiAgICAgICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSkpOwogICAgICAgIF9jbG9zZUZ1bmN0aW9uKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbk5vZGUuYm9keS5hY2NlcHQodGhpcyk7CiAgICBfY2xvc2VGdW5jdGlvbigpOwogIH0KCiAgLy8vIEFkZHMgYSBKYXZhU2NyaXB0IGNvbW1lbnQgdG8gdGhlIG91dHB1dC4gVGhlIGNvbW1lbnQgd2lsbCBiZSBvbWl0dGVkIGluCiAgLy8vIG1pbmlmaWVkIG1vZGUuICBFYWNoIGxpbmUgaW4gW3RleHRdIGlzIHByZWNlZGVkIHdpdGggYC8vYCBhbmQgaW5kZW50ZWQuCiAgLy8vIFVzZSBzcGFyaW5nbHkuIEluIG9yZGVyIGZvciB0aGUgY29tbWVudCB0byBiZSByZXRhaW5lZCBpdCBpcyBtb2RlbGVkIGFzCiAgLy8vIGhhdmluZyBzaWRlIGVmZmVjdHMgd2hpY2ggd2lsbCBpbmhpYml0IGNvZGUgbW90aW9uLgogIC8vIFRPRE8oc3JhKTogRmlndXJlIG91dCBob3cgdG8ga2VlcCBjb21tZW50IGFuY2hvcmVkIHdpdGhvdXQgZWZmZWN0cy4KICB2b2lkIF9hZGRDb21tZW50KFN0cmluZyB0ZXh0KSB7CiAgICBhZGQobmV3IEhGb3JlaWduQ29kZShqcy5qcy5zdGF0ZW1lbnRUZW1wbGF0ZVlpZWxkaW5nKG5ldyBqcy5Db21tZW50KHRleHQpKSwKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwgPEhJbnN0cnVjdGlvbj5bXSwKICAgICAgICBpc1N0YXRlbWVudDogdHJ1ZSkpOwogIH0KCiAgLy8vIEJ1aWxkcyBhIFNTQSBncmFwaCBmb3IgYSBzeW5jKi9hc3luYy9hc3luYyogZ2VuZXJhdG9yLiAgV2UgZ2VuZXJhdGUgYQogIC8vLyBlbnRyeSBmdW5jdGlvbiB3aGljaCB0YWlsLWNhbGxzIGEgYm9keSBmdW5jdGlvbi4gVGhlIGVudHJ5IGNvbnRhaW5zCiAgLy8vIHBlci1pbnZvY2F0aW9uIGNoZWNrcyBhbmQgdGhlIGJvZHksIHdoaWNoIGlzIGxhdGVyIHRyYW5zZm9ybWVkLCBjb250YWlucwogIC8vLyB0aGUgcmUtZW50cmFudCAnc3RhdGUgbWFjaGluZScgY29kZS4KICB2b2lkIF9idWlsZEdlbmVyYXRvcihGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZSkgewogICAgX29wZW5GdW5jdGlvbihmdW5jdGlvbiwKICAgICAgICBmdW5jdGlvbk5vZGU6IGZ1bmN0aW9uTm9kZSwKICAgICAgICBwYXJhbWV0ZXJTdHJ1Y3R1cmU6IGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICBjaGVja3M6IF9jaGVja3NGb3JGdW5jdGlvbihmdW5jdGlvbikpOwoKICAgIC8vIFByZXBhcmUgdG8gdGFpbC1jYWxsIHRoZSBib2R5LgoKICAgIC8vIElzICdidWlsZEFzeW5jQm9keScgdGhlIGJlc3QgbG9jYXRpb24gZm9yIHRoZSBlbnRyeT8KICAgIHZhciBzb3VyY2VJbmZvcm1hdGlvbiA9IF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRBc3luY0JvZHkoKTsKCiAgICAvLyBGb3J3YXJkIGFsbCB0aGUgcGFyYW1ldGVycyB0byB0aGUgYm9keS4KICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgaWYgKGdyYXBoLnRoaXNJbnN0cnVjdGlvbiAhPSBudWxsKSB7CiAgICAgIGlucHV0cy5hZGQoZ3JhcGgudGhpc0luc3RydWN0aW9uKTsKICAgIH0KICAgIGlmIChncmFwaC5leHBsaWNpdFJlY2VpdmVyUGFyYW1ldGVyICE9IG51bGwpIHsKICAgICAgaW5wdXRzLmFkZChncmFwaC5leHBsaWNpdFJlY2VpdmVyUGFyYW1ldGVyKTsKICAgIH0KICAgIGZvciAoTG9jYWwgbG9jYWwgaW4gcGFyYW1ldGVycy5rZXlzKSB7CiAgICAgIGlmICghZWxpZGVkUGFyYW1ldGVycy5jb250YWlucyhsb2NhbCkpIHsKICAgICAgICBpbnB1dHMuYWRkKGxvY2Fsc0hhbmRsZXIucmVhZExvY2FsKGxvY2FsKSk7CiAgICAgIH0KICAgIH0KICAgIGZvciAoTG9jYWwgbG9jYWwgaW4gX2Z1bmN0aW9uVHlwZVBhcmFtZXRlckxvY2FscykgewogICAgICBpbnB1dHMuYWRkKGxvY2Fsc0hhbmRsZXIucmVhZExvY2FsKGxvY2FsKSk7CiAgICB9CgogICAgLy8gQWRkIHRoZSB0eXBlIHBhcmFtZXRlciBmb3IgdGhlIGdlbmVyYXRvcidzIGVsZW1lbnQgdHlwZS4KICAgIERhcnRUeXBlIGVsZW1lbnRUeXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRBc3luY09yU3luY1N0YXJFbGVtZW50VHlwZSgKICAgICAgICBmdW5jdGlvbi5hc3luY01hcmtlciwgX3JldHVyblR5cGUpOwoKICAgIGlmIChlbGVtZW50VHlwZS5jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKSB7CiAgICAgIC8vIFR5cGUgbXVzdCBiZSBjb21wdXRlZCBpbiB0aGUgZW50cnkgZnVuY3Rpb24sIHdoZXJlIHRoZSB0eXBlIHZhcmlhYmxlcwogICAgICAvLyBhcmUgaW4gc2NvcGUsIGFuZCBwYXNzZWQgdG8gdGhlIGJvZHkgZnVuY3Rpb24uCiAgICAgIGlmIChvcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgICBpbnB1dHMKICAgICAgICAgICAgLmFkZChfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudE5ld1J0aShlbGVtZW50VHlwZSwgZnVuY3Rpb24pKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbnB1dHMuYWRkKF90eXBlQnVpbGRlci5hbmFseXplVHlwZUFyZ3VtZW50KGVsZW1lbnRUeXBlLCBmdW5jdGlvbikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBUeXBlcyB3aXRoIG5vIHR5cGUgdmFyaWFibGVzIGNhbiBiZSBlbWl0dGVkIGFzIHBhcnQgb2YgdGhlIGdlbmVyYXRvciwKICAgICAgLy8gYXZvaWRpbmcgYW4gZXh0cmEgYXJndW1lbnQuCiAgICAgIGlmIChfZ2VuZXJhdGVkRW50cnlJc0VtcHR5KCkpIHsKICAgICAgICAvLyBJZiB0aGUgZW50cnkgZnVuY3Rpb24gaXMgZW1wdHkgKGUuZy4gbm8gYXJndW1lbnQgY2hlY2tzKSBhbmQgdGhlIHR5cGUKICAgICAgICAvLyBjYW4gYmUgZ2VuZXJhdGVkIGluIGJvZHksICdpbmxpbmUnIHRoZSBib2R5IGJ5IGdlbmVyYXRpbmcgaXQgaW4KICAgICAgICAvLyBwbGFjZS4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBzdWJzZXF1ZW50IHRyYW5zZm9ybWF0aW9uIG9mIHRoZSBjb2RlCiAgICAgICAgLy8gaXMgJ2NvcnJlY3QnIGZvciB0aGUgZW1wdHkgZW50cnkgZnVuY3Rpb24gY29kZS4KICAgICAgICBncmFwaC5uZWVkc0FzeW5jUmV3cml0ZSA9IHRydWU7CiAgICAgICAgZ3JhcGguYXN5bmNFbGVtZW50VHlwZSA9IGVsZW1lbnRUeXBlOwogICAgICAgIGZ1bmN0aW9uTm9kZS5ib2R5LmFjY2VwdCh0aGlzKTsKICAgICAgICBfY2xvc2VGdW5jdGlvbigpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQoKICAgIEpHZW5lcmF0b3JCb2R5IGJvZHkgPSBfZWxlbWVudE1hcC5nZXRHZW5lcmF0b3JCb2R5KGZ1bmN0aW9uKTsKICAgIHB1c2gobmV3IEhJbnZva2VHZW5lcmF0b3JCb2R5KAogICAgICAgIGJvZHksCiAgICAgICAgaW5wdXRzLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLCAvLyBUT0RPOiBiZXR0ZXIgdHlwZS4KICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbikpOwoKICAgIF9jbG9zZUFuZEdvdG9FeGl0KAogICAgICAgIG5ldyBIUmV0dXJuKF9hYnN0cmFjdFZhbHVlRG9tYWluLCBwb3AoKSwgc291cmNlSW5mb3JtYXRpb24pKTsKCiAgICBfY2xvc2VGdW5jdGlvbigpOwogIH0KCiAgLy8vIEJ1aWxkcyBhIFNTQSBncmFwaCBmb3IgYSBzeW5jKi9hc3luYy9hc3luYyogZ2VuZXJhdG9yIGJvZHkuCiAgdm9pZCBfYnVpbGRHZW5lcmF0b3JCb2R5KAogICAgICBKR2VuZXJhdG9yQm9keSBmdW5jdGlvbiwgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZSkgewogICAgRnVuY3Rpb25FbnRpdHkgZW50cnkgPSBmdW5jdGlvbi5mdW5jdGlvbjsKICAgIF9vcGVuRnVuY3Rpb24oZW50cnksCiAgICAgICAgZnVuY3Rpb25Ob2RlOiBmdW5jdGlvbk5vZGUsCiAgICAgICAgcGFyYW1ldGVyU3RydWN0dXJlOiBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgY2hlY2tzOiBUYXJnZXRDaGVja3Mubm9uZSk7CiAgICBncmFwaC5uZWVkc0FzeW5jUmV3cml0ZSA9IHRydWU7CiAgICBpZiAoIWZ1bmN0aW9uLmVsZW1lbnRUeXBlLmNvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXMpIHsKICAgICAgLy8gV2UgY2FuIGdlbmVyYXRlIHRoZSBlbGVtZW50IHR5cGUgaW4gcGxhY2UKICAgICAgZ3JhcGguYXN5bmNFbGVtZW50VHlwZSA9IGZ1bmN0aW9uLmVsZW1lbnRUeXBlOwogICAgfQogICAgZnVuY3Rpb25Ob2RlLmJvZHkuYWNjZXB0KHRoaXMpOwogICAgX2Nsb3NlRnVuY3Rpb24oKTsKICB9CgogIGJvb2wgX2dlbmVyYXRlZEVudHJ5SXNFbXB0eSgpIHsKICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gY3VycmVudDsKICAgIC8vIElmIGBibG9jay5pZGAgaXMgbm90IDEgdGhlbiB3ZSBnZW5lcmF0ZWQgc29tZSBjb250cm9sIGZsb3cuCiAgICBpZiAoYmxvY2suaWQgIT0gMSkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChISW5zdHJ1Y3Rpb24gbm9kZSA9IGJsb2NrLmZpcnN0OyBub2RlICE9IG51bGw7IG5vZGUgPSBub2RlLm5leHQpIHsKICAgICAgaWYgKG5vZGUgaXMgSEdvdG8pIGNvbnRpbnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHZvaWQgX3BvdGVudGlhbGx5QWRkRnVuY3Rpb25QYXJhbWV0ZXJUeXBlQ2hlY2tzKAogICAgICBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb24sIFRhcmdldENoZWNrcyB0YXJnZXRDaGVja3MpIHsKICAgIC8vIFB1dCB0aGUgdHlwZSBjaGVja3MgaW4gdGhlIGZpcnN0IHN1Y2Nlc3NvciBvZiB0aGUgZW50cnksCiAgICAvLyBiZWNhdXNlIHRoYXQgaXMgd2hlcmUgdGhlIHR5cGUgZ3VhcmRzIHdpbGwgYWxzbyBiZSBpbnNlcnRlZC4KICAgIC8vIFRoaXMgd2F5IHdlIGVuc3VyZSB0aGF0IGEgdHlwZSBndWFyZCB3aWxsIGRvbWluYXRlIHRoZSB0eXBlCiAgICAvLyBjaGVjay4KCiAgICBpZiAodGFyZ2V0Q2hlY2tzLmNoZWNrVHlwZVBhcmFtZXRlcnMpIHsKICAgICAgX2NoZWNrVHlwZVZhcmlhYmxlQm91bmRzKHRhcmdldEVsZW1lbnQpOwogICAgfQoKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbih0YXJnZXRFbGVtZW50KTsKICAgIGJvb2wgbm9kZUlzQ29uc3RydWN0b3JCb2R5ID0gZGVmaW5pdGlvbi5raW5kID09IE1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5OwoKICAgIHZvaWQgX2hhbmRsZVBhcmFtZXRlcihpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICAgaWYgKG5vZGVJc0NvbnN0cnVjdG9yQm9keSAmJgogICAgICAgICAgX2Nsb3N1cmVEYXRhTG9va3VwCiAgICAgICAgICAgICAgLmdldENhcHR1cmVkU2NvcGUodGFyZ2V0RWxlbWVudCkKICAgICAgICAgICAgICAuaXNCb3hlZFZhcmlhYmxlKGxvY2FsKSkgewogICAgICAgIC8vIElmIGxvY2FsIGlzIGJveGVkLCB0aGVuIGB2YXJpYWJsZWAgd2lsbCBiZSBhIGZpZWxkIGluc2lkZSB0aGUgYm94CiAgICAgICAgLy8gcGFzc2VkIGFzIHRoZSBsYXN0IHBhcmFtZXRlciwgc28gbm8gbmVlZCB0byB1cGRhdGUgb3VyIGxvY2FscwogICAgICAgIC8vIGhhbmRsZXIgb3IgY2hlY2sgdHlwZXMgYXQgdGhpcyBwb2ludC4KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgSEluc3RydWN0aW9uIG5ld1BhcmFtZXRlciA9IGxvY2Fsc0hhbmRsZXIuZGlyZWN0TG9jYWxzW2xvY2FsXTsKICAgICAgYXNzZXJ0KG5ld1BhcmFtZXRlciAhPSBudWxsLCAiTm8gaW5pdGlhbCBpbnN0cnVjdGlvbiBmb3IgJHtsb2NhbH0uIik7CiAgICAgIERhcnRUeXBlIHR5cGUgPSBfZ2V0RGFydFR5cGVJZlZhbGlkKHZhcmlhYmxlLnR5cGUpOwoKICAgICAgaWYgKHRhcmdldENoZWNrcy5jaGVja0FsbFBhcmFtZXRlcnMgfHwKICAgICAgICAgICh0YXJnZXRDaGVja3MuY2hlY2tDb3ZhcmlhbnRQYXJhbWV0ZXJzICYmCiAgICAgICAgICAgICAgKHZhcmlhYmxlLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgfHwgdmFyaWFibGUuaXNDb3ZhcmlhbnQpKSkgewogICAgICAgIG5ld1BhcmFtZXRlciA9IF90eXBlQnVpbGRlci5wb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZlBhcmFtZXRlcigKICAgICAgICAgICAgdGFyZ2V0RWxlbWVudCwgbmV3UGFyYW1ldGVyLCB0eXBlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuZXdQYXJhbWV0ZXIgPSBfdHlwZUJ1aWxkZXIudHJ1c3RUeXBlT2ZQYXJhbWV0ZXIobmV3UGFyYW1ldGVyLCB0eXBlKTsKICAgICAgfQoKICAgICAgbG9jYWxzSGFuZGxlci5kaXJlY3RMb2NhbHNbbG9jYWxdID0gbmV3UGFyYW1ldGVyOwogICAgfQoKICAgIGZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmZvckVhY2goX2hhbmRsZVBhcmFtZXRlcik7CiAgICBmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMudG9MaXN0KCkuLmZvckVhY2goX2hhbmRsZVBhcmFtZXRlcik7CiAgfQoKICB2b2lkIF9jaGVja1R5cGVWYXJpYWJsZUJvdW5kcyhGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgIGlmIChfcnRpTmVlZC5tZXRob2ROZWVkc1R5cGVBcmd1bWVudHMobWV0aG9kKSAmJgogICAgICAgIGNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YS5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShtZXRob2QpLmlzRW1pdHRlZCkgewogICAgICBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb24gPSBnZXRGdW5jdGlvbk5vZGUoX2VsZW1lbnRNYXAsIG1ldGhvZCk7CiAgICAgIGZvciAoaXIuVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyIGluIGZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgTG9jYWwgbG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVHlwZVZhcmlhYmxlKAogICAgICAgICAgICBuZXcgaXIuVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlciksIF9lbGVtZW50TWFwKTsKICAgICAgICBISW5zdHJ1Y3Rpb24gbmV3UGFyYW1ldGVyID0gbG9jYWxzSGFuZGxlci5kaXJlY3RMb2NhbHNbbG9jYWxdOwogICAgICAgIERhcnRUeXBlIGJvdW5kID0gX2dldERhcnRUeXBlSWZWYWxpZCh0eXBlUGFyYW1ldGVyLmJvdW5kKTsKICAgICAgICBpZiAoIWJvdW5kLmlzRHluYW1pYyAmJgogICAgICAgICAgICAhYm91bmQuaXNWb2lkICYmCiAgICAgICAgICAgIGJvdW5kICE9IF9jb21tb25FbGVtZW50cy5vYmplY3RUeXBlKSB7CiAgICAgICAgICBpZiAob3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgICAgICAgIF9jaGVja1R5cGVCb3VuZChuZXdQYXJhbWV0ZXIsIGJvdW5kLCBsb2NhbC5uYW1lKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9hc3NlcnRJc1R5cGUoCiAgICAgICAgICAgICAgICBuZXdQYXJhbWV0ZXIsCiAgICAgICAgICAgICAgICBib3VuZCwKICAgICAgICAgICAgICAgICJUaGUgdHlwZSBhcmd1bWVudCAnIiwKICAgICAgICAgICAgICAgICInIGlzIG5vdCBhIHN1YnR5cGUgb2YgdGhlIHR5cGUgdmFyaWFibGUgYm91bmQgJyIsCiAgICAgICAgICAgICAgICAiJyBvZiB0eXBlIHZhcmlhYmxlICcke2xvY2FsLm5hbWV9JyBpbiAnJHttZXRob2QubmFtZX0nLiIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8vIEJ1aWxkcyBhIFNTQSBncmFwaCBmb3IgRnVuY3Rpb25Ob2RlcyBvZiBleHRlcm5hbCBtZXRob2RzLgogIHZvaWQgX2J1aWxkRXh0ZXJuYWxGdW5jdGlvbk5vZGUoCiAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLCBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBOb24tanMtaW50ZXJvcCBleHRlcm5hbCBmdW5jdGlvbnMgc2hvdWxkCiAgICAvLyB0aHJvdyBhIHJ1bnRpbWUgZXJyb3IuCiAgICBhc3NlcnQoZnVuY3Rpb25Ob2RlLmJvZHkgPT0gbnVsbCk7CiAgICBfb3BlbkZ1bmN0aW9uKGZ1bmN0aW9uLAogICAgICAgIGZ1bmN0aW9uTm9kZTogZnVuY3Rpb25Ob2RlLAogICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZTogZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgIGNoZWNrczogX2NoZWNrc0ZvckZ1bmN0aW9uKGZ1bmN0aW9uKSk7CgogICAgaWYgKGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNOYXRpdmVNZW1iZXIodGFyZ2V0RWxlbWVudCkpIHsKICAgICAgcmVnaXN0cnkucmVnaXN0ZXJOYXRpdmVNZXRob2QodGFyZ2V0RWxlbWVudCk7CiAgICAgIFN0cmluZyBuYXRpdmVOYW1lOwogICAgICBpZiAoY2xvc2VkV29ybGQubmF0aXZlRGF0YS5oYXNGaXhlZEJhY2tlbmROYW1lKHRhcmdldEVsZW1lbnQpKSB7CiAgICAgICAgbmF0aXZlTmFtZSA9IGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEuZ2V0Rml4ZWRCYWNrZW5kTmFtZSh0YXJnZXRFbGVtZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuYXRpdmVOYW1lID0gdGFyZ2V0RWxlbWVudC5uYW1lOwogICAgICB9CgogICAgICBTdHJpbmcgdGVtcGxhdGVSZWNlaXZlciA9ICcnOwogICAgICBMaXN0PFN0cmluZz4gdGVtcGxhdGVBcmd1bWVudHMgPSA8U3RyaW5nPltdOwogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgICAgaWYgKHRhcmdldEVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgIHRlbXBsYXRlUmVjZWl2ZXIgPSAnIy4nOwogICAgICAgIGlucHV0cy5hZGQobG9jYWxzSGFuZGxlci5yZWFkVGhpcygKICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb246CiAgICAgICAgICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkR2V0KGZ1bmN0aW9uTm9kZSkpKTsKICAgICAgfQoKICAgICAgdm9pZCBoYW5kbGVQYXJhbWV0ZXIoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbSkgewogICAgICAgIHRlbXBsYXRlQXJndW1lbnRzLmFkZCgnIycpOwogICAgICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKHBhcmFtKTsKICAgICAgICAvLyBDb252ZXJ0IERhcnQgZnVuY3Rpb24gdG8gSmF2YVNjcmlwdCBmdW5jdGlvbi4KICAgICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPSBsb2NhbHNIYW5kbGVyLnJlYWRMb2NhbChsb2NhbCk7CiAgICAgICAgaXIuRGFydFR5cGUgdHlwZSA9IHBhcmFtLnR5cGU7CiAgICAgICAgaWYgKHR5cGUgaXMgaXIuRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgICBpbnQgYXJpdHkgPSB0eXBlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmxlbmd0aDsKICAgICAgICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbigKICAgICAgICAgICAgICBfY29tbW9uRWxlbWVudHMuY2xvc3VyZUNvbnZlcnRlciwKICAgICAgICAgICAgICBbYXJndW1lbnQsIGdyYXBoLmFkZENvbnN0YW50SW50KGFyaXR5LCBjbG9zZWRXb3JsZCldLAogICAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLAogICAgICAgICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogbnVsbCk7CiAgICAgICAgICBhcmd1bWVudCA9IHBvcCgpOwogICAgICAgIH0KICAgICAgICBpbnB1dHMuYWRkKGFyZ3VtZW50KTsKICAgICAgfQoKICAgICAgZm9yIChpbnQgcG9zaXRpb24gPSAwOwogICAgICAgICAgcG9zaXRpb24gPCBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUucG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgICAgICAgICBwb3NpdGlvbisrKSB7CiAgICAgICAgaGFuZGxlUGFyYW1ldGVyKGZ1bmN0aW9uTm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVyc1twb3NpdGlvbl0pOwogICAgICB9CiAgICAgIGlmIChmdW5jdGlvbk5vZGUubmFtZWRQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgICBMaXN0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+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+W2Nsb3N1cmVdOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IDxEYXJ0VHlwZT5bXTsKCiAgICB0aGlzVHlwZS50eXBlQXJndW1lbnRzLmZvckVhY2goKF90eXBlVmFyaWFibGUpIHsKICAgICAgVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSA9IF90eXBlVmFyaWFibGU7CiAgICAgIHR5cGVBcmd1bWVudHMuYWRkKHZhcmlhYmxlKTsKICAgICAgSEluc3RydWN0aW9uIHJlYWRUeXBlID0gbmV3IEhUeXBlSW5mb1JlYWRWYXJpYWJsZS5pbnRlcmNlcHRlZCgKICAgICAgICAgIHZhcmlhYmxlLCBpbnRlcmNlcHRvciwgb2JqZWN0LCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSk7CiAgICAgIGFkZChyZWFkVHlwZSk7CiAgICAgIGlucHV0cy5hZGQocmVhZFR5cGUpOwogICAgfSk7CgogICAgLy8gVE9ETyhzcmEpOiBJbiBjb21wbGlhbmNlIG1vZGUsIGluc2VydCBhIGNoZWNrIHRoYXQgW2Nsb3N1cmVdIGlzIGEKICAgIC8vIGZ1bmN0aW9uIG9mIE4gdHlwZSBhcmd1bWVudHMuCgogICAgU2VsZWN0b3Igc2VsZWN0b3IgPQogICAgICAgIG5ldyBTZWxlY3Rvci5jYWxsQ2xvc3VyZSgwLCBjb25zdCA8U3RyaW5nPltdLCB0eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICBTdGF0aWNUeXBlIHJlY2VpdmVyU3RhdGljVHlwZSA9CiAgICAgICAgX2dldFN0YXRpY1R5cGUoaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbFsxXSk7CiAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgLmNyZWF0ZUZyb21TdGF0aWNUeXBlKAogICAgICAgICAgICByZWNlaXZlclN0YXRpY1R5cGUudHlwZSwgcmVjZWl2ZXJTdGF0aWNUeXBlLnJlbGF0aW9uKQogICAgICAgIC5hYnN0cmFjdFZhbHVlOwogICAgcHVzaChuZXcgSEludm9rZUNsb3N1cmUoc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSwgaW5wdXRzLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLCB0eXBlQXJndW1lbnRzKSk7CgogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIF9oYW5kbGVJbnZva2VTdGF0aWNGb3JlaWduKAogICAgICBpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24sIE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIFN0cmluZyBuYW1lID0gbWVtYmVyLm5hbWU7CiAgICBpZiAobmFtZSA9PSAnSlMnKSB7CiAgICAgIF9oYW5kbGVGb3JlaWduSnMoaW52b2NhdGlvbik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ0RBUlRfQ0xPU1VSRV9UT19KUycpIHsKICAgICAgX2hhbmRsZUZvcmVpZ25EYXJ0Q2xvc3VyZVRvSnMoaW52b2NhdGlvbiwgJ0RBUlRfQ0xPU1VSRV9UT19KUycpOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdSQVdfREFSVF9GVU5DVElPTl9SRUYnKSB7CiAgICAgIF9oYW5kbGVGb3JlaWduUmF3RnVuY3Rpb25SZWYoaW52b2NhdGlvbiwgJ1JBV19EQVJUX0ZVTkNUSU9OX1JFRicpOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdKU19TRVRfU1RBVElDX1NUQVRFJykgewogICAgICBfaGFuZGxlRm9yZWlnbkpzU2V0U3RhdGljU3RhdGUoaW52b2NhdGlvbik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ0pTX0dFVF9TVEFUSUNfU1RBVEUnKSB7CiAgICAgIF9oYW5kbGVGb3JlaWduSnNHZXRTdGF0aWNTdGF0ZShpbnZvY2F0aW9uKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnSlNfR0VUX05BTUUnKSB7CiAgICAgIF9oYW5kbGVGb3JlaWduSnNHZXROYW1lKGludm9jYXRpb24pOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdKU19FTUJFRERFRF9HTE9CQUwnKSB7CiAgICAgIF9oYW5kbGVGb3JlaWduSnNFbWJlZGRlZEdsb2JhbChpbnZvY2F0aW9uKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnSlNfQlVJTFRJTicpIHsKICAgICAgX2hhbmRsZUZvcmVpZ25Kc0J1aWx0aW4oaW52b2NhdGlvbik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ0pTX0dFVF9GTEFHJykgewogICAgICBfaGFuZGxlRm9yZWlnbkpzR2V0RmxhZyhpbnZvY2F0aW9uKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnSlNfRUZGRUNUJykgewogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ0pTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UJykgewogICAgICBfaGFuZGxlSnNJbnRlcmNlcHRvckNvbnN0YW50KGludm9jYXRpb24pOwogICAgfSBlbHNlIGlmIChuYW1lID09ICdnZXRJbnRlcmNlcHRvcicpIHsKICAgICAgX2hhbmRsZUZvcmVpZ25HZXRJbnRlcmNlcHRvcihpbnZvY2F0aW9uKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnZ2V0SlNBcnJheUludGVyb3BSdGknKSB7CiAgICAgIF9oYW5kbGVGb3JlaWduR2V0SlNBcnJheUludGVyb3BSdGkoaW52b2NhdGlvbik7CiAgICB9IGVsc2UgaWYgKG5hbWUgPT0gJ0pTX1NUUklOR19DT05DQVQnKSB7CiAgICAgIF9oYW5kbGVKc1N0cmluZ0NvbmNhdChpbnZvY2F0aW9uKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSAnX2NyZWF0ZUludm9jYXRpb25NaXJyb3InKSB7CiAgICAgIF9oYW5kbGVDcmVhdGVJbnZvY2F0aW9uTWlycm9yKGludm9jYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcigKICAgICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBpbnZvY2F0aW9uKSwKICAgICAgICAgICJVbmtub3duIGZvcmVpZ246ICR7bmFtZX0iKTsKICAgIH0KICB9CgogIHZvaWQgX2hhbmRsZUNyZWF0ZUludm9jYXRpb25NaXJyb3IoaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB7CiAgICBpci5TdHJpbmdMaXRlcmFsIG5hbWVMaXRlcmFsID0gaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbFswXTsKICAgIFN0cmluZyBuYW1lID0gbmFtZUxpdGVyYWwudmFsdWU7CgogICAgaXIuTGlzdExpdGVyYWwgdHlwZUFyZ3VtZW50c0xpdGVyYWwgPSBpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzFdOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgdHlwZUFyZ3VtZW50c0xpdGVyYWwuZXhwcmVzc2lvbnMubWFwKChpci5FeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgICAgaXIuVHlwZUxpdGVyYWwgdHlwZUxpdGVyYWwgPSBleHByZXNzaW9uOwogICAgICByZXR1cm4gX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUodHlwZUxpdGVyYWwudHlwZSk7CiAgICB9KS50b0xpc3QoKTsKCiAgICBpci5MaXN0TGl0ZXJhbCBwb3NpdGlvbmFsQXJndW1lbnRzTGl0ZXJhbCA9CiAgICAgICAgaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbFsyXTsKICAgIGlyLkV4cHJlc3Npb24gbmFtZWRBcmd1bWVudHNMaXRlcmFsID0gaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbFszXTsKICAgIE1hcDxTdHJpbmcsIGlyLkV4cHJlc3Npb24+IG5hbWVkQXJndW1lbnRzID0ge307CiAgICBpci5JbnRMaXRlcmFsIGtpbmRMaXRlcmFsID0gaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbFs0XTsKCiAgICBOYW1lIG1lbWJlck5hbWUgPSBuZXcgTmFtZShuYW1lLCBfY3VycmVudEZyYW1lLm1lbWJlci5saWJyYXJ5KTsKICAgIFNlbGVjdG9yIHNlbGVjdG9yOwogICAgc3dpdGNoIChraW5kTGl0ZXJhbC52YWx1ZSkgewogICAgICBjYXNlIGludm9jYXRpb25NaXJyb3JHZXR0ZXJLaW5kOgogICAgICAgIHNlbGVjdG9yID0gbmV3IFNlbGVjdG9yLmdldHRlcihtZW1iZXJOYW1lKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBpbnZvY2F0aW9uTWlycm9yU2V0dGVyS2luZDoKICAgICAgICBzZWxlY3RvciA9IG5ldyBTZWxlY3Rvci5zZXR0ZXIobWVtYmVyTmFtZSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgaW52b2NhdGlvbk1pcnJvck1ldGhvZEtpbmQ6CiAgICAgICAgaWYgKG1lbWJlck5hbWUgPT0gTmFtZXMuSU5ERVhfTkFNRSkgewogICAgICAgICAgc2VsZWN0b3IgPSBuZXcgU2VsZWN0b3IuaW5kZXgoKTsKICAgICAgICB9IGVsc2UgaWYgKG1lbWJlck5hbWUgPT0gTmFtZXMuSU5ERVhfU0VUX05BTUUpIHsKICAgICAgICAgIHNlbGVjdG9yID0gbmV3IFNlbGVjdG9yLmluZGV4U2V0KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChuYW1lZEFyZ3VtZW50c0xpdGVyYWwgaXMgaXIuTWFwTGl0ZXJhbCkgewogICAgICAgICAgICBuYW1lZEFyZ3VtZW50c0xpdGVyYWwuZW50cmllcy5mb3JFYWNoKChpci5NYXBFbnRyeSBlbnRyeSkgewogICAgICAgICAgICAgIGlyLlN0cmluZ0xpdGVyYWwga2V5ID0gZW50cnkua2V5OwogICAgICAgICAgICAgIG5hbWVkQXJndW1lbnRzW2tleS52YWx1ZV0gPSBlbnRyeS52YWx1ZTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWVkQXJndW1lbnRzTGl0ZXJhbCBpcyBpci5Db25zdGFudEV4cHJlc3Npb24gJiYKICAgICAgICAgICAgICBuYW1lZEFyZ3VtZW50c0xpdGVyYWwuY29uc3RhbnQgaXMgaXIuTWFwQ29uc3RhbnQpIHsKICAgICAgICAgICAgaXIuTWFwQ29uc3RhbnQgY29uc3RhbnQgPSBuYW1lZEFyZ3VtZW50c0xpdGVyYWwuY29uc3RhbnQ7CiAgICAgICAgICAgIGZvciAoaXIuQ29uc3RhbnRNYXBFbnRyeSBlbnRyeSBpbiBjb25zdGFudC5lbnRyaWVzKSB7CiAgICAgICAgICAgICAgaXIuU3RyaW5nQ29uc3RhbnQga2V5ID0gZW50cnkua2V5OwogICAgICAgICAgICAgIG5hbWVkQXJndW1lbnRzW2tleS52YWx1ZV0gPQogICAgICAgICAgICAgICAgICBuZXcgaXIuQ29uc3RhbnRFeHByZXNzaW9uKGVudHJ5LnZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcigKICAgICAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKGludm9jYXRpb24pLAogICAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgbmFtZWQgYXJndW1lbnRzIHZhbHVlIGluIGNyZWF0ZUludm9jYXRpb25NaXJycm9yOiAiCiAgICAgICAgICAgICAgICAiJHtuYW1lZEFyZ3VtZW50c0xpdGVyYWx9LiIpOwogICAgICAgICAgfQogICAgICAgICAgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IENhbGxTdHJ1Y3R1cmUoCiAgICAgICAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50c0xpdGVyYWwuZXhwcmVzc2lvbnMubGVuZ3RoLAogICAgICAgICAgICAgIG5hbWVkQXJndW1lbnRzLmtleXMudG9MaXN0KCksCiAgICAgICAgICAgICAgdHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgICAgICAgaWYgKFNlbGVjdG9yLmlzT3BlcmF0b3JOYW1lKG5hbWUpKSB7CiAgICAgICAgICAgIHNlbGVjdG9yID0KICAgICAgICAgICAgICAgIG5ldyBTZWxlY3RvcihTZWxlY3RvcktpbmQuT1BFUkFUT1IsIG1lbWJlck5hbWUsIGNhbGxTdHJ1Y3R1cmUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2VsZWN0b3IgPSBuZXcgU2VsZWN0b3IuY2FsbChtZW1iZXJOYW1lLCBjYWxsU3RydWN0dXJlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICB9CgogICAgSENvbnN0YW50IG5hbWVDb25zdGFudCA9IGdyYXBoLmFkZENvbnN0YW50KAogICAgICAgIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVTeW1ib2woY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsIG5hbWUpLAogICAgICAgIGNsb3NlZFdvcmxkKTsKCiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgIGZvciAoaXIuRXhwcmVzc2lvbiBhcmd1bWVudCBpbiBwb3NpdGlvbmFsQXJndW1lbnRzTGl0ZXJhbC5leHByZXNzaW9ucykgewogICAgICBhcmd1bWVudC5hY2NlcHQodGhpcyk7CiAgICAgIGFyZ3VtZW50cy5hZGQocG9wKCkpOwogICAgfQogICAgaWYgKG5hbWVkQXJndW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgTWFwPFN0cmluZywgSEluc3RydWN0aW9uPiBuYW1lZFZhbHVlcyA9IDxTdHJpbmcsIEhJbnN0cnVjdGlvbj57fTsKICAgICAgbmFtZWRBcmd1bWVudHMuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIGlyLkV4cHJlc3Npb24gdmFsdWUpIHsKICAgICAgICB2YWx1ZS5hY2NlcHQodGhpcyk7CiAgICAgICAgbmFtZWRWYWx1ZXNbbmFtZV0gPSBwb3AoKTsKICAgICAgfSk7CiAgICAgIGZvciAoU3RyaW5nIG5hbWUgaW4gc2VsZWN0b3IuY2FsbFN0cnVjdHVyZS5nZXRPcmRlcmVkTmFtZWRBcmd1bWVudHMoKSkgewogICAgICAgIGFyZ3VtZW50cy5hZGQobmFtZWRWYWx1ZXNbbmFtZV0pOwogICAgICB9CiAgICB9CgogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRDYWxsKGludm9jYXRpb24sIGludm9jYXRpb24pOwogICAgX2FkZFR5cGVBcmd1bWVudHMoYXJndW1lbnRzLCB0eXBlQXJndW1lbnRzLCBzb3VyY2VJbmZvcm1hdGlvbik7CgogICAgSEluc3RydWN0aW9uIGFyZ3VtZW50c0luc3RydWN0aW9uID0gX2J1aWxkTGl0ZXJhbExpc3QoYXJndW1lbnRzKTsKICAgIGFkZChhcmd1bWVudHNJbnN0cnVjdGlvbik7CgogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGFyZ3VtZW50TmFtZXMgPSA8SEluc3RydWN0aW9uPltdOwogICAgZm9yIChTdHJpbmcgYXJndW1lbnROYW1lCiAgICAgICAgaW4gc2VsZWN0b3IuY2FsbFN0cnVjdHVyZS5nZXRPcmRlcmVkTmFtZWRBcmd1bWVudHMoKSkgewogICAgICBDb25zdGFudFZhbHVlIGFyZ3VtZW50TmFtZUNvbnN0YW50ID0KICAgICAgICAgIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVTdHJpbmcoYXJndW1lbnROYW1lKTsKICAgICAgYXJndW1lbnROYW1lcy5hZGQoZ3JhcGguYWRkQ29uc3RhbnQoYXJndW1lbnROYW1lQ29uc3RhbnQsIGNsb3NlZFdvcmxkKSk7CiAgICB9CiAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnROYW1lc0luc3RydWN0aW9uID0gX2J1aWxkTGl0ZXJhbExpc3QoYXJndW1lbnROYW1lcyk7CiAgICBhZGQoYXJndW1lbnROYW1lc0luc3RydWN0aW9uKTsKCiAgICBISW5zdHJ1Y3Rpb24gdHlwZUFyZ3VtZW50Q291bnQgPQogICAgICAgIGdyYXBoLmFkZENvbnN0YW50SW50KHR5cGVBcmd1bWVudHMubGVuZ3RoLCBjbG9zZWRXb3JsZCk7CgogICAganMuTmFtZSBpbnRlcm5hbE5hbWUgPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUoc2VsZWN0b3IpOwoKICAgIENvbnN0YW50VmFsdWUga2luZENvbnN0YW50ID0KICAgICAgICBjb25zdGFudF9zeXN0ZW0uY3JlYXRlSW50RnJvbUludChzZWxlY3Rvci5pbnZvY2F0aW9uTWlycm9yS2luZCk7CgogICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgIF9jb21tb25FbGVtZW50cy5jcmVhdGVVbm1hbmdsZWRJbnZvY2F0aW9uTWlycm9yLAogICAgICAgIFsKICAgICAgICAgIG5hbWVDb25zdGFudCwKICAgICAgICAgIGdyYXBoLmFkZENvbnN0YW50U3RyaW5nRnJvbU5hbWUoaW50ZXJuYWxOYW1lLCBjbG9zZWRXb3JsZCksCiAgICAgICAgICBncmFwaC5hZGRDb25zdGFudChraW5kQ29uc3RhbnQsIGNsb3NlZFdvcmxkKSwKICAgICAgICAgIGFyZ3VtZW50c0luc3RydWN0aW9uLAogICAgICAgICAgYXJndW1lbnROYW1lc0luc3RydWN0aW9uLAogICAgICAgICAgdHlwZUFyZ3VtZW50Q291bnQsCiAgICAgICAgXSwKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwKICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIGJvb2wgX3VuZXhwZWN0ZWRGb3JlaWduQXJndW1lbnRzKGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbiwKICAgICAge2ludCBtaW5Qb3NpdGlvbmFsLCBpbnQgbWF4UG9zaXRpb25hbCwgaW50IHR5cGVBcmd1bWVudENvdW50ID0gMH0pIHsKICAgIFN0cmluZyBwbHVyYWxpemVBcmd1bWVudHMoaW50IGNvdW50LCBbU3RyaW5nIGFkamVjdGl2ZSA9ICcnXSkgewogICAgICBpZiAoY291bnQgPT0gMCkgcmV0dXJuICdubyAke2FkamVjdGl2ZX1hcmd1bWVudHMnOwogICAgICBpZiAoY291bnQgPT0gMSkgcmV0dXJuICdvbmUgJHthZGplY3RpdmV9YXJndW1lbnQnOwogICAgICBpZiAoY291bnQgPT0gMikgcmV0dXJuICd0d28gJHthZGplY3RpdmV9YXJndW1lbnRzJzsKICAgICAgcmV0dXJuICckY291bnQgJHthZGplY3RpdmV9YXJndW1lbnRzJzsKICAgIH0KCiAgICBTdHJpbmcgbmFtZSgpID0+IGludm9jYXRpb24udGFyZ2V0Lm5hbWUubmFtZTsKCiAgICBpci5Bcmd1bWVudHMgYXJndW1lbnRzID0gaW52b2NhdGlvbi5hcmd1bWVudHM7CiAgICBib29sIGJhZCA9IGZhbHNlOwogICAgaWYgKGFyZ3VtZW50cy50eXBlcy5sZW5ndGggIT0gdHlwZUFyZ3VtZW50Q291bnQpIHsKICAgICAgU3RyaW5nIGV4cGVjdGVkID0gcGx1cmFsaXplQXJndW1lbnRzKHR5cGVBcmd1bWVudENvdW50LCAndHlwZSAnKTsKICAgICAgU3RyaW5nIGFjdHVhbCA9IHBsdXJhbGl6ZUFyZ3VtZW50cyhhcmd1bWVudHMudHlwZXMubGVuZ3RoLCAndHlwZSAnKTsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGludm9jYXRpb24pLAogICAgICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQywKICAgICAgICAgIHsndGV4dCc6ICJFcnJvcjogJyR7bmFtZSgpfScgdGFrZXMgJGV4cGVjdGVkLCBub3QgJGFjdHVhbC4ifSk7CiAgICAgIGJhZCA9IHRydWU7CiAgICB9CiAgICBpZiAoYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoIDwgbWluUG9zaXRpb25hbCkgewogICAgICBTdHJpbmcgcGhyYXNlID0gcGx1cmFsaXplQXJndW1lbnRzKG1pblBvc2l0aW9uYWwpOwogICAgICBpZiAobWF4UG9zaXRpb25hbCAhPSBtaW5Qb3NpdGlvbmFsKSBwaHJhc2UgPSAnYXQgbGVhc3QgJHBocmFzZSc7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBpbnZvY2F0aW9uKSwKICAgICAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUMsCiAgICAgICAgICB7J3RleHQnOiAiRXJyb3I6IFRvbyBmZXcgYXJndW1lbnRzLiAnJHtuYW1lKCl9JyB0YWtlcyAkcGhyYXNlLiJ9KTsKICAgICAgYmFkID0gdHJ1ZTsKICAgIH0KICAgIGlmIChtYXhQb3NpdGlvbmFsICE9IG51bGwgJiYgYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoID4gbWF4UG9zaXRpb25hbCkgewogICAgICBTdHJpbmcgcGhyYXNlID0gcGx1cmFsaXplQXJndW1lbnRzKG1heFBvc2l0aW9uYWwpOwogICAgICBpZiAobWF4UG9zaXRpb25hbCAhPSBtaW5Qb3NpdGlvbmFsKSBwaHJhc2UgPSAnYXQgbW9zdCAkcGhyYXNlJzsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGludm9jYXRpb24pLAogICAgICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQywKICAgICAgICAgIHsndGV4dCc6ICJFcnJvcjogVG9vIG1hbnkgYXJndW1lbnRzLiAnJHtuYW1lKCl9JyB0YWtlcyAkcGhyYXNlLiJ9KTsKICAgICAgYmFkID0gdHJ1ZTsKICAgIH0KICAgIGlmIChhcmd1bWVudHMubmFtZWQuaXNOb3RFbXB0eSkgewogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgaW52b2NhdGlvbiksCiAgICAgICAgICBNZXNzYWdlS2luZC5HRU5FUklDLAogICAgICAgICAgeyd0ZXh0JzogIkVycm9yOiAnJHtuYW1lKCl9JyBkb2VzIG5vdCB0YWtlIG5hbWVkIGFyZ3VtZW50cy4ifSk7CiAgICAgIGJhZCA9IHRydWU7CiAgICB9CiAgICByZXR1cm4gYmFkOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBzdHJpbmcgYXJndW1lbnQuIFRoZSBhcmd1bWVudCBtdXN0IGV2YWx1YXRlIHRvIGEKICAvLy8gY29uc3RhbnQuICBJZiB0aGVyZSBpcyBhbiBlcnJvciwgdGhlIGVycm9yIGlzIHJlcG9ydGVkIGFuZCBgbnVsbGAgaXMKICAvLy8gcmV0dXJuZWQuCiAgU3RyaW5nIF9mb3JlaWduQ29uc3RhbnRTdHJpbmdBcmd1bWVudCgKICAgICAgaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uLCBpbnQgcG9zaXRpb24sIFN0cmluZyBtZXRob2ROYW1lLAogICAgICBbU3RyaW5nIGFkamVjdGl2ZSA9ICcnXSkgewogICAgaXIuRXhwcmVzc2lvbiBhcmd1bWVudCA9IGludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWxbcG9zaXRpb25dOwogICAgYXJndW1lbnQuYWNjZXB0KHRoaXMpOwogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gcG9wKCk7CgogICAgaWYgKCFpbnN0cnVjdGlvbi5pc0NvbnN0YW50U3RyaW5nKCkpIHsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGFyZ3VtZW50KSwKICAgICAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsKICAgICAgICAndGV4dCc6ICJFcnJvcjogRXhwZWN0ZWQgU3RyaW5nIGNvbnN0YW50IGFzICR7YWRqZWN0aXZlfWFyZ3VtZW50ICIKICAgICAgICAgICAgInRvICckbWV0aG9kTmFtZScuIgogICAgICB9KTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgSENvbnN0YW50IGhDb25zdGFudCA9IGluc3RydWN0aW9uOwogICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBzdHJpbmdDb25zdGFudCA9IGhDb25zdGFudC5jb25zdGFudDsKICAgIHJldHVybiBzdHJpbmdDb25zdGFudC5zdHJpbmdWYWx1ZTsKICB9CgogIHZvaWQgX2hhbmRsZUZvcmVpZ25EYXJ0Q2xvc3VyZVRvSnMoCiAgICAgIGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbiwgU3RyaW5nIG5hbWUpIHsKICAgIC8vIFRPRE8oc3JhKTogRG8gd2UgbmVlZCB0byB3cmFwIHRoZSBjbG9zdXJlIGluIHNvbWV0aGluZyB0aGF0IHNhdmVzIHRoZQogICAgLy8gY3VycmVudCBpc29sYXRlPwogICAgX2hhbmRsZUZvcmVpZ25SYXdGdW5jdGlvblJlZihpbnZvY2F0aW9uLCBuYW1lKTsKICB9CgogIHZvaWQgX2hhbmRsZUZvcmVpZ25SYXdGdW5jdGlvblJlZigKICAgICAgaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uLCBTdHJpbmcgbmFtZSkgewogICAgaWYgKF91bmV4cGVjdGVkRm9yZWlnbkFyZ3VtZW50cyhpbnZvY2F0aW9uLAogICAgICAgIG1pblBvc2l0aW9uYWw6IDEsIG1heFBvc2l0aW9uYWw6IDEpKSB7CiAgICAgIC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjay4KICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaXIuRXhwcmVzc2lvbiBjbG9zdXJlID0gaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5zaW5nbGU7CiAgICBTdHJpbmcgcHJvYmxlbSA9ICdyZXF1aXJlcyBhIHN0YXRpYyBtZXRob2Qgb3IgdG9wLWxldmVsIG1ldGhvZCc7CgogICAgYm9vbCBoYW5kbGVUYXJnZXQoaXIuUHJvY2VkdXJlIHByb2NlZHVyZSkgewogICAgICBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb24gPSBwcm9jZWR1cmUuZnVuY3Rpb247CiAgICAgIGlmIChmdW5jdGlvbiAhPSBudWxsICYmCiAgICAgICAgICBmdW5jdGlvbi5yZXF1aXJlZFBhcmFtZXRlckNvdW50ID09CiAgICAgICAgICAgICAgZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoICYmCiAgICAgICAgICBmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMuaXNFbXB0eSkgewogICAgICAgIHB1c2gobmV3IEhGb3JlaWduQ29kZSgKICAgICAgICAgICAganMuanMuZXhwcmVzc2lvblRlbXBsYXRlWWllbGRpbmcoX2VtaXR0ZXIKICAgICAgICAgICAgICAgIC5zdGF0aWNGdW5jdGlvbkFjY2VzcyhfZWxlbWVudE1hcC5nZXRNZXRob2QocHJvY2VkdXJlKSkpLAogICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwKICAgICAgICAgICAgPEhJbnN0cnVjdGlvbj5bXSwKICAgICAgICAgICAgbmF0aXZlQmVoYXZpb3I6IE5hdGl2ZUJlaGF2aW9yLlBVUkUsCiAgICAgICAgICAgIGZvcmVpZ25GdW5jdGlvbjogX2VsZW1lbnRNYXAuZ2V0TWV0aG9kKHByb2NlZHVyZSkpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBwcm9ibGVtID0gJ2RvZXMgbm90IGhhbmRsZSBhIGNsb3N1cmUgd2l0aCBvcHRpb25hbCBwYXJhbWV0ZXJzJzsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChjbG9zdXJlIGlzIGlyLlN0YXRpY0dldCkgewogICAgICBpci5NZW1iZXIgc3RhdGljVGFyZ2V0ID0gY2xvc3VyZS50YXJnZXQ7CiAgICAgIGlmIChzdGF0aWNUYXJnZXQgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgaWYgKHN0YXRpY1RhcmdldC5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuTWV0aG9kKSB7CiAgICAgICAgICBpZiAoaGFuZGxlVGFyZ2V0KHN0YXRpY1RhcmdldCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChjbG9zdXJlIGlzIGlyLkNvbnN0YW50RXhwcmVzc2lvbiAmJgogICAgICAgIGNsb3N1cmUuY29uc3RhbnQgaXMgaXIuVGVhck9mZkNvbnN0YW50KSB7CiAgICAgIGlyLlRlYXJPZmZDb25zdGFudCB0ZWFyT2ZmID0gY2xvc3VyZS5jb25zdGFudDsKICAgICAgaWYgKGhhbmRsZVRhcmdldCh0ZWFyT2ZmLnByb2NlZHVyZSkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGludm9jYXRpb24pLAogICAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUMsCiAgICAgICAgeyd0ZXh0JzogIickbmFtZScgJHByb2JsZW0uIn0pOwogICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOyAvLyBSZXN1bHQgZXhwZWN0ZWQgb24gc3RhY2suCiAgICByZXR1cm47CiAgfQoKICB2b2lkIF9oYW5kbGVGb3JlaWduSnNTZXRTdGF0aWNTdGF0ZShpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIGlmIChfdW5leHBlY3RlZEZvcmVpZ25Bcmd1bWVudHMoaW52b2NhdGlvbiwKICAgICAgICBtaW5Qb3NpdGlvbmFsOiAxLCBtYXhQb3NpdGlvbmFsOiAxKSkgewogICAgICAvLyBSZXN1bHQgZXhwZWN0ZWQgb24gc3RhY2suCiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSBfdmlzaXRQb3NpdGlvbmFsQXJndW1lbnRzKGludm9jYXRpb24uYXJndW1lbnRzKTsKCiAgICBTdHJpbmcgaXNvbGF0ZU5hbWUgPSBfbmFtZXIuc3RhdGljU3RhdGVIb2xkZXI7CiAgICBTaWRlRWZmZWN0cyBzaWRlRWZmZWN0cyA9IG5ldyBTaWRlRWZmZWN0cy5lbXB0eSgpOwogICAgc2lkZUVmZmVjdHMuc2V0QWxsU2lkZUVmZmVjdHMoKTsKICAgIHB1c2gobmV3IEhGb3JlaWduQ29kZShqcy5qcy5wYXJzZUZvcmVpZ25KUygiJGlzb2xhdGVOYW1lID0gIyIpLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLCBpbnB1dHMsCiAgICAgICAgbmF0aXZlQmVoYXZpb3I6IE5hdGl2ZUJlaGF2aW9yLkNIQU5HRVNfT1RIRVIsIGVmZmVjdHM6IHNpZGVFZmZlY3RzKSk7CiAgfQoKICB2b2lkIF9oYW5kbGVGb3JlaWduSnNHZXRTdGF0aWNTdGF0ZShpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIGlmIChfdW5leHBlY3RlZEZvcmVpZ25Bcmd1bWVudHMoaW52b2NhdGlvbiwKICAgICAgICBtaW5Qb3NpdGlvbmFsOiAwLCBtYXhQb3NpdGlvbmFsOiAwKSkgewogICAgICAvLyBSZXN1bHQgZXhwZWN0ZWQgb24gc3RhY2suCiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHB1c2gobmV3IEhGb3JlaWduQ29kZShqcy5qcy5wYXJzZUZvcmVpZ25KUyhfbmFtZXIuc3RhdGljU3RhdGVIb2xkZXIpLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLCA8SEluc3RydWN0aW9uPltdLAogICAgICAgIG5hdGl2ZUJlaGF2aW9yOiBOYXRpdmVCZWhhdmlvci5ERVBFTkRTX09USEVSKSk7CiAgfQoKICB2b2lkIF9oYW5kbGVGb3JlaWduSnNHZXROYW1lKGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgaWYgKF91bmV4cGVjdGVkRm9yZWlnbkFyZ3VtZW50cyhpbnZvY2F0aW9uLAogICAgICAgIG1pblBvc2l0aW9uYWw6IDEsIG1heFBvc2l0aW9uYWw6IDEpKSB7CiAgICAgIC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjay4KICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaXIuTm9kZSBhcmd1bWVudCA9IGludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3Q7CiAgICBhcmd1bWVudC5hY2NlcHQodGhpcyk7CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBwb3AoKTsKCiAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSENvbnN0YW50KSB7CiAgICAgIGpzLk5hbWUgbmFtZSA9IF9nZXROYW1lRm9ySnNHZXROYW1lKGluc3RydWN0aW9uLmNvbnN0YW50LCBfbmFtZXIpOwogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnRTdHJpbmdGcm9tTmFtZShuYW1lLCBjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBhcmd1bWVudCksCiAgICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQywKICAgICAgICB7J3RleHQnOiAnRXJyb3I6IEV4cGVjdGVkIGEgSnNHZXROYW1lIGVudW0gdmFsdWUuJ30pOwogICAgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrLgogICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogIH0KCiAgaW50IF9leHRyYWN0RW51bUluZGV4RnJvbUNvbnN0YW50VmFsdWUoCiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQsIENsYXNzRW50aXR5IGNsYXNzRWxlbWVudCkgewogICAgaWYgKGNvbnN0YW50IGlzIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSkgewogICAgICBpZiAoY29uc3RhbnQudHlwZS5lbGVtZW50ID09IGNsYXNzRWxlbWVudCkgewogICAgICAgIGFzc2VydChjb25zdGFudC5maWVsZHMubGVuZ3RoID09IDEgfHwgY29uc3RhbnQuZmllbGRzLmxlbmd0aCA9PSAyKTsKICAgICAgICBDb25zdGFudFZhbHVlIGluZGV4Q29uc3RhbnQgPSBjb25zdGFudC5maWVsZHMudmFsdWVzLmZpcnN0OwogICAgICAgIGlmIChpbmRleENvbnN0YW50IGlzIEludENvbnN0YW50VmFsdWUpIHsKICAgICAgICAgIHJldHVybiBpbmRleENvbnN0YW50LmludFZhbHVlLnRvSW50KCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbanMuTmFtZV0gZm9yIHRoZSBgSnNHZXROYW1lYCBbY29uc3RhbnRdIHZhbHVlLgogIGpzLk5hbWUgX2dldE5hbWVGb3JKc0dldE5hbWUoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgTW9kdWxhck5hbWVyIG5hbWVyKSB7CiAgICBpbnQgaW5kZXggPSBfZXh0cmFjdEVudW1JbmRleEZyb21Db25zdGFudFZhbHVlKAogICAgICAgIGNvbnN0YW50LCBfY29tbW9uRWxlbWVudHMuanNHZXROYW1lRW51bSk7CiAgICBpZiAoaW5kZXggPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbmFtZXIuZ2V0TmFtZUZvckpzR2V0TmFtZSgKICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCBKc0dldE5hbWUudmFsdWVzW2luZGV4XSk7CiAgfQoKICB2b2lkIF9oYW5kbGVGb3JlaWduSnNFbWJlZGRlZEdsb2JhbChpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIGlmIChfdW5leHBlY3RlZEZvcmVpZ25Bcmd1bWVudHMoaW52b2NhdGlvbiwKICAgICAgICBtaW5Qb3NpdGlvbmFsOiAyLCBtYXhQb3NpdGlvbmFsOiAyKSkgewogICAgICAvLyBSZXN1bHQgZXhwZWN0ZWQgb24gc3RhY2suCiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgU3RyaW5nIGdsb2JhbE5hbWUgPSBfZm9yZWlnbkNvbnN0YW50U3RyaW5nQXJndW1lbnQoCiAgICAgICAgaW52b2NhdGlvbiwgMSwgJ0pTX0VNQkVEREVEX0dMT0JBTCcsICdzZWNvbmQgJyk7CiAgICBqcy5UZW1wbGF0ZSBleHByID0ganMuanMuZXhwcmVzc2lvblRlbXBsYXRlWWllbGRpbmcoCiAgICAgICAgX2VtaXR0ZXIuZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2VzcyhnbG9iYWxOYW1lKSk7CgogICAgTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IgPQogICAgICAgIF9lbGVtZW50TWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9ySnNFbWJlZGRlZEdsb2JhbENhbGwoaW52b2NhdGlvbik7CiAgICBhc3NlcnQoCiAgICAgICAgbmF0aXZlQmVoYXZpb3IgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgaW52b2NhdGlvbiksCiAgICAgICAgICAgICJObyBOYXRpdmVCZWhhdmlvciBmb3IgJGludm9jYXRpb24iKSk7CgogICAgQWJzdHJhY3RWYWx1ZSBzc2FUeXBlID0KICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC50eXBlRnJvbU5hdGl2ZUJlaGF2aW9yKG5hdGl2ZUJlaGF2aW9yLCBjbG9zZWRXb3JsZCk7CiAgICBwdXNoKG5ldyBIRm9yZWlnbkNvZGUoZXhwciwgc3NhVHlwZSwgY29uc3QgPEhJbnN0cnVjdGlvbj5bXSwKICAgICAgICBuYXRpdmVCZWhhdmlvcjogbmF0aXZlQmVoYXZpb3IpKTsKICB9CgogIHZvaWQgX2hhbmRsZUZvcmVpZ25Kc0J1aWx0aW4oaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB7CiAgICBpZiAoX3VuZXhwZWN0ZWRGb3JlaWduQXJndW1lbnRzKGludm9jYXRpb24sIG1pblBvc2l0aW9uYWw6IDIpKSB7CiAgICAgIC8vIFJlc3VsdCBleHBlY3RlZCBvbiBzdGFjay4KICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgTGlzdDxpci5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSBpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsOwogICAgaXIuRXhwcmVzc2lvbiBuYW1lQXJndW1lbnQgPSBhcmd1bWVudHNbMV07CgogICAgbmFtZUFyZ3VtZW50LmFjY2VwdCh0aGlzKTsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IHBvcCgpOwoKICAgIGpzLlRlbXBsYXRlIHRlbXBsYXRlOwogICAgaWYgKGluc3RydWN0aW9uIGlzIEhDb25zdGFudCkgewogICAgICB0ZW1wbGF0ZSA9IF9nZXRKc0J1aWx0aW5UZW1wbGF0ZShpbnN0cnVjdGlvbi5jb25zdGFudCwgX2VtaXR0ZXIpOwogICAgfQogICAgaWYgKHRlbXBsYXRlID09IG51bGwpIHsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIG5hbWVBcmd1bWVudCksCiAgICAgICAgICBNZXNzYWdlS2luZC5HRU5FUklDLAogICAgICAgICAgeyd0ZXh0JzogJ0Vycm9yOiBFeHBlY3RlZCBhIEpzQnVpbHRpbiBlbnVtIHZhbHVlLid9KTsKICAgICAgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrLgogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgIGZvciAoaXIuRXhwcmVzc2lvbiBhcmd1bWVudCBpbiBhcmd1bWVudHMuc2tpcCgyKSkgewogICAgICBhcmd1bWVudC5hY2NlcHQodGhpcyk7CiAgICAgIGlucHV0cy5hZGQocG9wKCkpOwogICAgfQoKICAgIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yID0KICAgICAgICBfZWxlbWVudE1hcC5nZXROYXRpdmVCZWhhdmlvckZvckpzQnVpbHRpbkNhbGwoaW52b2NhdGlvbik7CiAgICBhc3NlcnQoCiAgICAgICAgbmF0aXZlQmVoYXZpb3IgIT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgaW52b2NhdGlvbiksCiAgICAgICAgICAgICJObyBOYXRpdmVCZWhhdmlvciBmb3IgJGludm9jYXRpb24iKSk7CgogICAgQWJzdHJhY3RWYWx1ZSBzc2FUeXBlID0KICAgICAgICBfdHlwZUluZmVyZW5jZU1hcC50eXBlRnJvbU5hdGl2ZUJlaGF2aW9yKG5hdGl2ZUJlaGF2aW9yLCBjbG9zZWRXb3JsZCk7CiAgICBwdXNoKG5ldyBIRm9yZWlnbkNvZGUodGVtcGxhdGUsIHNzYVR5cGUsIGlucHV0cywKICAgICAgICBuYXRpdmVCZWhhdmlvcjogbmF0aXZlQmVoYXZpb3IpKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbanMuVGVtcGxhdGVdIGZvciB0aGUgYEpzQnVpbHRpbmAgW2NvbnN0YW50XSB2YWx1ZS4KICBqcy5UZW1wbGF0ZSBfZ2V0SnNCdWlsdGluVGVtcGxhdGUoCiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQsIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIGludCBpbmRleCA9IF9leHRyYWN0RW51bUluZGV4RnJvbUNvbnN0YW50VmFsdWUoCiAgICAgICAgY29uc3RhbnQsIF9jb21tb25FbGVtZW50cy5qc0J1aWx0aW5FbnVtKTsKICAgIGlmIChpbmRleCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfdGVtcGxhdGVGb3JCdWlsdGluKEpzQnVpbHRpbi52YWx1ZXNbaW5kZXhdKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBKUyB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIFtidWlsdGluXS4KICBqcy5UZW1wbGF0ZSBfdGVtcGxhdGVGb3JCdWlsdGluKEpzQnVpbHRpbiBidWlsdGluKSB7CiAgICBzd2l0Y2ggKGJ1aWx0aW4pIHsKICAgICAgY2FzZSBKc0J1aWx0aW4uZGFydE9iamVjdENvbnN0cnVjdG9yOgogICAgICAgIENsYXNzRW50aXR5IG9iamVjdENsYXNzID0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3M7CiAgICAgICAgcmV0dXJuIGpzLmpzCiAgICAgICAgICAgIC5leHByZXNzaW9uVGVtcGxhdGVZaWVsZGluZyhfZW1pdHRlci50eXBlQWNjZXNzKG9iamVjdENsYXNzKSk7CgogICAgICBjYXNlIEpzQnVpbHRpbi5kYXJ0Q2xvc3VyZUNvbnN0cnVjdG9yOgogICAgICAgIENsYXNzRW50aXR5IGNsb3N1cmVDbGFzcyA9IGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmNsb3N1cmVDbGFzczsKICAgICAgICAvLyBUT0RPKHNyYSk6IFNob3VsZCBhZGQgYSBkZXBlbmRlbmN5IG9uIHRoZSBjb25zdHJ1Y3RvciB1c2VkIGFzIGEKICAgICAgICAvLyB0b2tlbi4KICAgICAgICByZWdpc3RyeQogICAgICAgICAgICAvLyBpZ25vcmU6ZGVwcmVjYXRlZF9tZW1iZXJfdXNlX2Zyb21fc2FtZV9wYWNrYWdlCiAgICAgICAgICAgIC5yZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKGNsb3N1cmVDbGFzcyk7CiAgICAgICAgcmV0dXJuIGpzLmpzCiAgICAgICAgICAgIC5leHByZXNzaW9uVGVtcGxhdGVZaWVsZGluZyhfZW1pdHRlci50eXBlQWNjZXNzKGNsb3N1cmVDbGFzcykpOwoKICAgICAgY2FzZSBKc0J1aWx0aW4uaXNDaGVja1Byb3BlcnR5VG9Kc0NvbnN0cnVjdG9yTmFtZToKICAgICAgICBpbnQgaXNQcmVmaXhMZW5ndGggPSBfbmFtZXIuZml4ZWROYW1lcy5vcGVyYXRvcklzUHJlZml4Lmxlbmd0aDsKICAgICAgICByZXR1cm4ganMuanMuZXhwcmVzc2lvblRlbXBsYXRlRm9yKCcjLnN1YnN0cmluZygkaXNQcmVmaXhMZW5ndGgpJyk7CgogICAgICBjYXNlIEpzQnVpbHRpbi5pc0Z1bmN0aW9uVHlwZToKICAgICAgICByZXR1cm4gX3J0aUVuY29kZXIudGVtcGxhdGVGb3JJc0Z1bmN0aW9uVHlwZTsKCiAgICAgIGNhc2UgSnNCdWlsdGluLmlzRnV0dXJlT3JUeXBlOgogICAgICAgIHJldHVybiBfcnRpRW5jb2Rlci50ZW1wbGF0ZUZvcklzRnV0dXJlT3JUeXBlOwoKICAgICAgY2FzZSBKc0J1aWx0aW4uaXNWb2lkVHlwZToKICAgICAgICByZXR1cm4gX3J0aUVuY29kZXIudGVtcGxhdGVGb3JJc1ZvaWRUeXBlOwoKICAgICAgY2FzZSBKc0J1aWx0aW4uaXNEeW5hbWljVHlwZToKICAgICAgICByZXR1cm4gX3J0aUVuY29kZXIudGVtcGxhdGVGb3JJc0R5bmFtaWNUeXBlOwoKICAgICAgY2FzZSBKc0J1aWx0aW4uaXNKc0ludGVyb3BUeXBlQXJndW1lbnQ6CiAgICAgICAgcmV0dXJuIF9ydGlFbmNvZGVyLnRlbXBsYXRlRm9ySXNKc0ludGVyb3BUeXBlQXJndW1lbnQ7CgogICAgICBjYXNlIEpzQnVpbHRpbi5yYXdSdGlUb0pzQ29uc3RydWN0b3JOYW1lOgogICAgICAgIHJldHVybiBqcy5qcy5leHByZXNzaW9uVGVtcGxhdGVGb3IoIiMubmFtZSIpOwoKICAgICAgY2FzZSBKc0J1aWx0aW4ucmF3UnVudGltZVR5cGU6CiAgICAgICAgcmV0dXJuIGpzLmpzLmV4cHJlc3Npb25UZW1wbGF0ZUZvcigiIy5jb25zdHJ1Y3RvciIpOwoKICAgICAgY2FzZSBKc0J1aWx0aW4uaXNTdWJ0eXBlOgogICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBtb3ZlIHRoaXMgY2xvc2VyIHRvIHdoZXJlIGlzLWNoZWNrIHByb3BlcnRpZXMgYXJlCiAgICAgICAgLy8gYnVpbHQuCiAgICAgICAgU3RyaW5nIGlzUHJlZml4ID0gX25hbWVyLmZpeGVkTmFtZXMub3BlcmF0b3JJc1ByZWZpeDsKICAgICAgICByZXR1cm4ganMuanMuZXhwcmVzc2lvblRlbXBsYXRlRm9yKCIoJyRpc1ByZWZpeCcgKyAjKSBpbiAjLnByb3RvdHlwZSIpOwoKICAgICAgY2FzZSBKc0J1aWx0aW4uaXNHaXZlblR5cGVSdGk6CiAgICAgICAgcmV0dXJuIGpzLmpzLmV4cHJlc3Npb25UZW1wbGF0ZUZvcignIy5uYW1lID09PSAjJyk7CgogICAgICBjYXNlIEpzQnVpbHRpbi5nZXRNZXRhZGF0YToKICAgICAgICBTdHJpbmcgbWV0YWRhdGFBY2Nlc3MgPQogICAgICAgICAgICBfZW1pdHRlci5nZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzU3RyaW5nKE1FVEFEQVRBKTsKICAgICAgICByZXR1cm4ganMuanMuZXhwcmVzc2lvblRlbXBsYXRlRm9yKCIkbWV0YWRhdGFBY2Nlc3NbI10iKTsKCiAgICAgIGNhc2UgSnNCdWlsdGluLmdldFR5cGU6CiAgICAgICAgU3RyaW5nIHR5cGVzQWNjZXNzID0gX2VtaXR0ZXIuZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2Vzc1N0cmluZyhUWVBFUyk7CiAgICAgICAgcmV0dXJuIGpzLmpzLmV4cHJlc3Npb25UZW1wbGF0ZUZvcigiJHR5cGVzQWNjZXNzWyNdIik7CgogICAgICBkZWZhdWx0OgogICAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICAgIE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwgIlVuaGFuZGxlZCBCdWlsdGluOiAkYnVpbHRpbiIpOwogICAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgdm9pZCBfaGFuZGxlRm9yZWlnbkpzR2V0RmxhZyhpci5TdGF0aWNJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIGlmIChfdW5leHBlY3RlZEZvcmVpZ25Bcmd1bWVudHMoaW52b2NhdGlvbiwKICAgICAgICBtaW5Qb3NpdGlvbmFsOiAxLCBtYXhQb3NpdGlvbmFsOiAxKSkgewogICAgICBzdGFjay5hZGQoCiAgICAgICAgICAvLyBSZXN1bHQgZXhwZWN0ZWQgb24gc3RhY2suCiAgICAgICAgICBncmFwaC5hZGRDb25zdGFudEJvb2woZmFsc2UsIGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIFN0cmluZyBuYW1lID0gX2ZvcmVpZ25Db25zdGFudFN0cmluZ0FyZ3VtZW50KGludm9jYXRpb24sIDAsICdKU19HRVRfRkxBRycpOwogICAgYm9vbCB2YWx1ZSA9IF9nZXRGbGFnVmFsdWUobmFtZSk7CiAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgaW52b2NhdGlvbiksCiAgICAgICAgICBNZXNzYWdlS2luZC5HRU5FUklDLAogICAgICAgICAgeyd0ZXh0JzogJ0Vycm9yOiBVbmtub3duIGludGVybmFsIGZsYWcgIiRuYW1lIi4nfSk7CiAgICB9IGVsc2UgewogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnRCb29sKHZhbHVlLCBjbG9zZWRXb3JsZCkpOwogICAgfQogIH0KCiAgdm9pZCBfaGFuZGxlSnNJbnRlcmNlcHRvckNvbnN0YW50KGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgLy8gU2luZ2xlIGFyZ3VtZW50IG11c3QgYmUgYSBUeXBlQ29uc3RhbnQgd2hpY2ggaXMgY29udmVydGVkIGludG8gYQogICAgLy8gSW50ZXJjZXB0b3JDb25zdGFudC4KICAgIGlmIChfdW5leHBlY3RlZEZvcmVpZ25Bcmd1bWVudHMoaW52b2NhdGlvbiwKICAgICAgICBtaW5Qb3NpdGlvbmFsOiAxLCBtYXhQb3NpdGlvbmFsOiAxKSkgewogICAgICAvLyBSZXN1bHQgZXhwZWN0ZWQgb24gc3RhY2suCiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaXIuRXhwcmVzc2lvbiBhcmd1bWVudCA9IGludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwuc2luZ2xlOwogICAgYXJndW1lbnQuYWNjZXB0KHRoaXMpOwogICAgSEluc3RydWN0aW9uIGFyZ3VtZW50SW5zdHJ1Y3Rpb24gPSBwb3AoKTsKICAgIGlmIChhcmd1bWVudEluc3RydWN0aW9uIGlzIEhDb25zdGFudCkgewogICAgICBDb25zdGFudFZhbHVlIGFyZ3VtZW50Q29uc3RhbnQgPSBhcmd1bWVudEluc3RydWN0aW9uLmNvbnN0YW50OwogICAgICBpZiAoYXJndW1lbnRDb25zdGFudCBpcyBUeXBlQ29uc3RhbnRWYWx1ZSAmJgogICAgICAgICAgYXJndW1lbnRDb25zdGFudC5yZXByZXNlbnRlZFR5cGUgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgIEludGVyZmFjZVR5cGUgdHlwZSA9IGFyZ3VtZW50Q29uc3RhbnQucmVwcmVzZW50ZWRUeXBlOwogICAgICAgIC8vIFRPRE8oc3JhKTogQ2hlY2sgdGhhdCB0eXBlIGlzIGEgc3ViY2xhc3Mgb2YgW0ludGVyY2VwdG9yXS4KICAgICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gbmV3IEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSh0eXBlLmVsZW1lbnQpOwogICAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGdyYXBoLmFkZENvbnN0YW50KGNvbnN0YW50LCBjbG9zZWRXb3JsZCk7CiAgICAgICAgc3RhY2suYWRkKGluc3RydWN0aW9uKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGludm9jYXRpb24pLAogICAgICAgIE1lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KU19JTlRFUkNFUFRPUl9DT05TVEFOVCk7CiAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgfQoKICB2b2lkIF9oYW5kbGVGb3JlaWduR2V0SW50ZXJjZXB0b3IoaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB7CiAgICAvLyBTaW5nbGUgYXJndW1lbnQgaXMgdGhlIGludGVyY2VwdGVkIG9iamVjdC4KICAgIGlmIChfdW5leHBlY3RlZEZvcmVpZ25Bcmd1bWVudHMoaW52b2NhdGlvbiwKICAgICAgICBtaW5Qb3NpdGlvbmFsOiAxLCBtYXhQb3NpdGlvbmFsOiAxKSkgewogICAgICAvLyBSZXN1bHQgZXhwZWN0ZWQgb24gc3RhY2suCiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaXIuRXhwcmVzc2lvbiBhcmd1bWVudCA9IGludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwuc2luZ2xlOwogICAgYXJndW1lbnQuYWNjZXB0KHRoaXMpOwogICAgSEluc3RydWN0aW9uIGFyZ3VtZW50SW5zdHJ1Y3Rpb24gPSBwb3AoKTsKCiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZENhbGwoaW52b2NhdGlvbiwgaW52b2NhdGlvbik7CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPQogICAgICAgIF9pbnRlcmNlcHRvckZvcihhcmd1bWVudEluc3RydWN0aW9uLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBzdGFjay5hZGQoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgdm9pZCBfaGFuZGxlRm9yZWlnbkdldEpTQXJyYXlJbnRlcm9wUnRpKGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgaWYgKF91bmV4cGVjdGVkRm9yZWlnbkFyZ3VtZW50cyhpbnZvY2F0aW9uLAogICAgICAgICAgICBtaW5Qb3NpdGlvbmFsOiAwLCBtYXhQb3NpdGlvbmFsOiAwKSB8fAogICAgICAgICFvcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrLgogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFRPRE8oc3JhKTogSW50cm9kdWNlICdhbnknIHR5cGUuCiAgICBJbnRlcmZhY2VUeXBlIGludGVyb3BUeXBlID0KICAgICAgICBJbnRlcmZhY2VUeXBlKF9jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MsIFtEeW5hbWljVHlwZSgpXSk7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZENhbGwoaW52b2NhdGlvbiwgaW52b2NhdGlvbik7CiAgICBISW5zdHJ1Y3Rpb24gcnRpID0gSExvYWRUeXBlKGludGVyb3BUeXBlLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSkKICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgcHVzaChydGkpOwogIH0KCiAgdm9pZCBfaGFuZGxlRm9yZWlnbkpzKGlyLlN0YXRpY0ludm9jYXRpb24gaW52b2NhdGlvbikgewogICAgaWYgKF91bmV4cGVjdGVkRm9yZWlnbkFyZ3VtZW50cyhpbnZvY2F0aW9uLAogICAgICAgIG1pblBvc2l0aW9uYWw6IDIsIG1heFBvc2l0aW9uYWw6IG51bGwsIHR5cGVBcmd1bWVudENvdW50OiAxKSkgewogICAgICAvLyBSZXN1bHQgZXhwZWN0ZWQgb24gc3RhY2suCiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yID0KICAgICAgICBfZWxlbWVudE1hcC5nZXROYXRpdmVCZWhhdmlvckZvckpzQ2FsbChpbnZvY2F0aW9uKTsKICAgIGFzc2VydCgKICAgICAgICBuYXRpdmVCZWhhdmlvciAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBpbnZvY2F0aW9uKSwKICAgICAgICAgICAgIk5vIE5hdGl2ZUJlaGF2aW9yIGZvciAkaW52b2NhdGlvbiIpKTsKCiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgIGZvciAoaXIuRXhwcmVzc2lvbiBhcmd1bWVudCBpbiBpbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsLnNraXAoMikpIHsKICAgICAgYXJndW1lbnQuYWNjZXB0KHRoaXMpOwogICAgICBpbnB1dHMuYWRkKHBvcCgpKTsKICAgIH0KCiAgICBpZiAobmF0aXZlQmVoYXZpb3IuY29kZVRlbXBsYXRlLnBvc2l0aW9uYWxBcmd1bWVudENvdW50ICE9IGlucHV0cy5sZW5ndGgpIHsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3Bhbm5hYmxlKHRhcmdldEVsZW1lbnQsIGludm9jYXRpb24pLAogICAgICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQywgewogICAgICAgICd0ZXh0JzogJ01pc21hdGNoIGJldHdlZW4gbnVtYmVyIG9mIHBsYWNlaG9sZGVycycKICAgICAgICAgICAgJyBhbmQgbnVtYmVyIG9mIGFyZ3VtZW50cy4nCiAgICAgIH0pOwogICAgICAvLyBSZXN1bHQgZXhwZWN0ZWQgb24gc3RhY2suCiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChIYXNDYXB0dXJlZFBsYWNlaG9sZGVycy5jaGVjayhuYXRpdmVCZWhhdmlvci5jb2RlVGVtcGxhdGUuYXN0KSkgewogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgaW52b2NhdGlvbiksCiAgICAgICAgICBNZXNzYWdlS2luZC5KU19QTEFDRUhPTERFUl9DQVBUVVJFKTsKICAgIH0KCiAgICBBYnN0cmFjdFZhbHVlIHNzYVR5cGUgPQogICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLnR5cGVGcm9tTmF0aXZlQmVoYXZpb3IobmF0aXZlQmVoYXZpb3IsIGNsb3NlZFdvcmxkKTsKCiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9IG51bGw7CiAgICBISW5zdHJ1Y3Rpb24gY29kZSA9IG5ldyBIRm9yZWlnbkNvZGUoCiAgICAgICAgbmF0aXZlQmVoYXZpb3IuY29kZVRlbXBsYXRlLCBzc2FUeXBlLCBpbnB1dHMsCiAgICAgICAgaXNTdGF0ZW1lbnQ6ICFuYXRpdmVCZWhhdmlvci5jb2RlVGVtcGxhdGUuaXNFeHByZXNzaW9uLAogICAgICAgIGVmZmVjdHM6IG5hdGl2ZUJlaGF2aW9yLnNpZGVFZmZlY3RzLAogICAgICAgIG5hdGl2ZUJlaGF2aW9yOiBuYXRpdmVCZWhhdmlvcikKICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgcHVzaChjb2RlKTsKCiAgICBEYXJ0VHlwZSB0eXBlID0gX2dldERhcnRUeXBlSWZWYWxpZChpbnZvY2F0aW9uLmFyZ3VtZW50cy50eXBlcy5zaW5nbGUpOwogICAgQWJzdHJhY3RWYWx1ZSB0cnVzdGVkTWFzayA9IF90eXBlQnVpbGRlci50cnVzdFR5cGVNYXNrKHR5cGUpOwoKICAgIGlmICh0cnVzdGVkTWFzayAhPSBudWxsKSB7CiAgICAgIC8vIFdlIG9ubHkgYWxsb3cgdGhlIHR5cGUgYXJndW1lbnQgdG8gbmFycm93IGBkeW5hbWljYCwgd2hpY2ggcHJvYmFibHkKICAgICAgLy8gY29tZXMgZnJvbSBhbiB1bnNwZWNpZmllZCByZXR1cm4gdHlwZSBpbiB0aGUgTmF0aXZlQmVoYXZpb3IuCiAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgLmNvbnRhaW5zQWxsKGNvZGUuaW5zdHJ1Y3Rpb25UeXBlKQogICAgICAgICAgLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgLy8gT3ZlcndyaXRlIHRoZSB0eXBlIHdpdGggdGhlIG5hcnJvd2VyIHR5cGUuCiAgICAgICAgY29kZS5pbnN0cnVjdGlvblR5cGUgPSB0cnVzdGVkTWFzazsKICAgICAgfSBlbHNlIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgLmNvbnRhaW5zKHRydXN0ZWRNYXNrLCBjb2RlLmluc3RydWN0aW9uVHlwZSkKICAgICAgICAgIC5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICAgIC8vIEl0IGlzIGFjY2VwdGFibGUgZm9yIHRoZSB0eXBlIHBhcmFtZXRlciB0byBiZSBicm9hZGVyIHRoYW4gdGhlCiAgICAgICAgLy8gc3BlY2lmaWVkIHR5cGUuCiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICBfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgaW52b2NhdGlvbiksCiAgICAgICAgICAgIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsKICAgICAgICAgICd0ZXh0JzogJ1R5cGUgYXJndW1lbnQgdG9vIG5hcnJvdyBmb3Igc3BlY2lmaWVkIGJlaGF2aW9yIHR5cGUgJwogICAgICAgICAgICAgICcoJHt0cnVzdGVkTWFza30gZG9lcyBub3QgYWxsb3cgJwogICAgICAgICAgICAgICdhbGwgdmFsdWVzIGluICR7Y29kZS5pbnN0cnVjdGlvblR5cGV9KScKICAgICAgICB9KTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfaGFuZGxlSnNTdHJpbmdDb25jYXQoaXIuU3RhdGljSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB7CiAgICBpZiAoX3VuZXhwZWN0ZWRGb3JlaWduQXJndW1lbnRzKGludm9jYXRpb24sCiAgICAgICAgbWluUG9zaXRpb25hbDogMiwgbWF4UG9zaXRpb25hbDogMikpIHsKICAgICAgLy8gUmVzdWx0IGV4cGVjdGVkIG9uIHN0YWNrLgogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSBfdmlzaXRQb3NpdGlvbmFsQXJndW1lbnRzKGludm9jYXRpb24uYXJndW1lbnRzKTsKICAgIHB1c2gobmV3IEhTdHJpbmdDb25jYXQoCiAgICAgICAgaW5wdXRzWzBdLCBpbnB1dHNbMV0sIF9hYnN0cmFjdFZhbHVlRG9tYWluLnN0cmluZ1R5cGUpKTsKICB9CgogIHZvaWQgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKE1lbWJlckVudGl0eSB0YXJnZXQsIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZU1hc2ssIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwgSW50ZXJmYWNlVHlwZSBpbnN0YW5jZVR5cGV9KSB7CiAgICAvLyBUT0RPKHJlZGVtcHRpb24pOiBQYXNzIGN1cnJlbnQgbm9kZSBpZiBuZWVkZWQuCiAgICBpZiAoX3RyeUlubGluZU1ldGhvZCgKICAgICAgICB0YXJnZXQsIG51bGwsIG51bGwsIGFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cywgbnVsbCwgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgaW5zdGFuY2VUeXBlOiBpbnN0YW5jZVR5cGUpKSB7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICB2YXIgaW5zdHJ1Y3Rpb247CiAgICBpZiAoY2xvc2VkV29ybGQubmF0aXZlRGF0YS5pc0pzSW50ZXJvcE1lbWJlcih0YXJnZXQpKSB7CiAgICAgIGluc3RydWN0aW9uID0gX2ludm9rZUpzSW50ZXJvcEZ1bmN0aW9uKHRhcmdldCwgYXJndW1lbnRzKTsKICAgIH0gZWxzZSB7CiAgICAgIGluc3RydWN0aW9uID0gbmV3IEhJbnZva2VTdGF0aWMoCiAgICAgICAgICB0YXJnZXQsIGFyZ3VtZW50cywgdHlwZU1hc2ssIHR5cGVBcmd1bWVudHMsCiAgICAgICAgICB0YXJnZXRDYW5UaHJvdzogIV9pbmZlcnJlZERhdGEuZ2V0Q2Fubm90VGhyb3codGFyZ2V0KSkKICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CgogICAgICBpZiAoX2N1cnJlbnRJbXBsaWNpdEluc3RhbnRpYXRpb25zLmlzTm90RW1wdHkpIHsKICAgICAgICBpbnN0cnVjdGlvbi5pbnN0YW50aWF0ZWRUeXBlcyA9CiAgICAgICAgICAgIG5ldyBMaXN0PEludGVyZmFjZVR5cGU+LmZyb20oX2N1cnJlbnRJbXBsaWNpdEluc3RhbnRpYXRpb25zKTsKICAgICAgfQogICAgICBpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cyA9IF9pbmZlcnJlZERhdGEuZ2V0U2lkZUVmZmVjdHNPZkVsZW1lbnQodGFyZ2V0KTsKICAgIH0KICAgIHB1c2goaW5zdHJ1Y3Rpb24pOwogIH0KCiAgdm9pZCBfcHVzaER5bmFtaWNJbnZvY2F0aW9uKAogICAgICBpci5Ob2RlIG5vZGUsCiAgICAgIFN0YXRpY1R5cGUgc3RhdGljUmVjZWl2ZXJUeXBlLAogICAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSwKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMsCiAgICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBBYnN0cmFjdFZhbHVlIHR5cGVCb3VuZCA9IF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgLmNyZWF0ZUZyb21TdGF0aWNUeXBlKAogICAgICAgICAgICBzdGF0aWNSZWNlaXZlclR5cGUudHlwZSwgc3RhdGljUmVjZWl2ZXJUeXBlLnJlbGF0aW9uKQogICAgICAgIC5hYnN0cmFjdFZhbHVlOwogICAgcmVjZWl2ZXJUeXBlID0gcmVjZWl2ZXJUeXBlID09IG51bGwKICAgICAgICA/IHR5cGVCb3VuZAogICAgICAgIDogX2Fic3RyYWN0VmFsdWVEb21haW4uaW50ZXJzZWN0aW9uKHJlY2VpdmVyVHlwZSwgdHlwZUJvdW5kKTsKCiAgICAvLyBXZSBwcmVmZXIgdG8gbm90IGlubGluZSBjZXJ0YWluIG9wZXJhdGlvbnMgb24gaW5kZXhhYmxlcywKICAgIC8vIGJlY2F1c2UgdGhlIGNvbnN0YW50IGZvbGRlciB3aWxsIGhhbmRsZSB0aGVtIGJldHRlciBhbmQgdHVybgogICAgLy8gdGhlbSBpbnRvIHNpbXBsZXIgaW5zdHJ1Y3Rpb25zIHRoYXQgYWxsb3cgZnVydGhlcgogICAgLy8gb3B0aW1pemF0aW9ucy4KICAgIGJvb2wgaXNPcHRpbWl6YWJsZU9wZXJhdGlvbk9uSW5kZXhhYmxlKAogICAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLCBNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgICBib29sIGlzTGVuZ3RoID0gc2VsZWN0b3IuaXNHZXR0ZXIgJiYgc2VsZWN0b3IubmFtZSA9PSAibGVuZ3RoIjsKICAgICAgaWYgKGlzTGVuZ3RoIHx8IHNlbGVjdG9yLmlzSW5kZXgpIHsKICAgICAgICByZXR1cm4gY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJ0eXBlT2YoCiAgICAgICAgICAgIGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MsIF9jb21tb25FbGVtZW50cy5qc0luZGV4YWJsZUNsYXNzKTsKICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc0luZGV4U2V0KSB7CiAgICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzU3VidHlwZU9mKAogICAgICAgICAgICBlbGVtZW50LmVuY2xvc2luZ0NsYXNzLCBfY29tbW9uRWxlbWVudHMuanNNdXRhYmxlSW5kZXhhYmxlQ2xhc3MpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQoKICAgIGJvb2wgaXNPcHRpbWl6YWJsZU9wZXJhdGlvbihTZWxlY3RvciBzZWxlY3RvciwgTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgICAgaWYgKGlzT3B0aW1pemFibGVPcGVyYXRpb25PbkluZGV4YWJsZShzZWxlY3RvciwgZWxlbWVudCkpIHJldHVybiB0cnVlOwogICAgICBpZiAoIV9pbnRlcmNlcHRvckRhdGEuaW50ZXJjZXB0ZWRDbGFzc2VzLmNvbnRhaW5zKGNscykpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKHNlbGVjdG9yLmlzT3BlcmF0b3IpIHJldHVybiB0cnVlOwogICAgICBpZiAoc2VsZWN0b3IuaXNTZXR0ZXIpIHJldHVybiB0cnVlOwogICAgICBpZiAoc2VsZWN0b3IuaXNJbmRleCkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChzZWxlY3Rvci5pc0luZGV4U2V0KSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlBZGQgfHwKICAgICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlSZW1vdmVMYXN0IHx8CiAgICAgICAgICBfY29tbW9uRWxlbWVudHMuaXNKc1N0cmluZ1NwbGl0KGVsZW1lbnQpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIE1lbWJlckVudGl0eSBlbGVtZW50ID0KICAgICAgICBjbG9zZWRXb3JsZC5sb2NhdGVTaW5nbGVNZW1iZXIoc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSk7CiAgICBpZiAoZWxlbWVudCAhPSBudWxsICYmCiAgICAgICAgIWVsZW1lbnQuaXNGaWVsZCAmJgogICAgICAgICEoZWxlbWVudC5pc0dldHRlciAmJiBzZWxlY3Rvci5pc0NhbGwpICYmCiAgICAgICAgIShlbGVtZW50LmlzRnVuY3Rpb24gJiYgc2VsZWN0b3IuaXNHZXR0ZXIpICYmCiAgICAgICAgIWlzT3B0aW1pemFibGVPcGVyYXRpb24oc2VsZWN0b3IsIGVsZW1lbnQpKSB7CiAgICAgIGlmIChfdHJ5SW5saW5lTWV0aG9kKGVsZW1lbnQsIHNlbGVjdG9yLCByZWNlaXZlclR5cGUsIGFyZ3VtZW50cywKICAgICAgICAgIHR5cGVBcmd1bWVudHMsIG5vZGUsIHNvdXJjZUluZm9ybWF0aW9uKSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQoKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IGFyZ3VtZW50cy5maXJzdDsKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSA8SEluc3RydWN0aW9uPltdOwoKICAgIHNlbGVjdG9yID8/PSBfZWxlbWVudE1hcC5nZXRTZWxlY3Rvcihub2RlKTsKCiAgICBib29sIGlzSW50ZXJjZXB0ZWQgPQogICAgICAgIGNsb3NlZFdvcmxkLmludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkU2VsZWN0b3Ioc2VsZWN0b3IpOwoKICAgIGlmIChpc0ludGVyY2VwdGVkKSB7CiAgICAgIEhJbnRlcmNlcHRvciBpbnRlcmNlcHRvciA9IF9pbnRlcmNlcHRvckZvcihyZWNlaXZlciwgc291cmNlSW5mb3JtYXRpb24pOwogICAgICBpbnB1dHMuYWRkKGludGVyY2VwdG9yKTsKICAgIH0KICAgIGlucHV0cy5hZGRBbGwoYXJndW1lbnRzKTsKCiAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdFR5cGUgPQogICAgICAgIF90eXBlSW5mZXJlbmNlTWFwLnJlc3VsdFR5cGVPZlNlbGVjdG9yKHNlbGVjdG9yLCByZWNlaXZlclR5cGUpOwogICAgaWYgKHNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgIHB1c2gobmV3IEhJbnZva2VEeW5hbWljR2V0dGVyKHNlbGVjdG9yLCByZWNlaXZlclR5cGUsIGVsZW1lbnQsIGlucHV0cywKICAgICAgICAgIGlzSW50ZXJjZXB0ZWQsIHJlc3VsdFR5cGUsIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzU2V0dGVyKSB7CiAgICAgIHB1c2gobmV3IEhJbnZva2VEeW5hbWljU2V0dGVyKHNlbGVjdG9yLCByZWNlaXZlclR5cGUsIGVsZW1lbnQsIGlucHV0cywKICAgICAgICAgIGlzSW50ZXJjZXB0ZWQsIHJlc3VsdFR5cGUsIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzQ2xvc3VyZUNhbGwpIHsKICAgICAgYXNzZXJ0KCFpc0ludGVyY2VwdGVkKTsKICAgICAgcHVzaChuZXcgSEludm9rZUNsb3N1cmUoCiAgICAgICAgICBzZWxlY3RvciwgcmVjZWl2ZXJUeXBlLCBpbnB1dHMsIHJlc3VsdFR5cGUsIHR5cGVBcmd1bWVudHMpCiAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHB1c2gobmV3IEhJbnZva2VEeW5hbWljTWV0aG9kKHNlbGVjdG9yLCByZWNlaXZlclR5cGUsIGlucHV0cywgcmVzdWx0VHlwZSwKICAgICAgICAgIHR5cGVBcmd1bWVudHMsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgaXNJbnRlcmNlcHRlZDogaXNJbnRlcmNlcHRlZCkpOwogICAgfQogIH0KCiAgSEZvcmVpZ25Db2RlIF9pbnZva2VKc0ludGVyb3BGdW5jdGlvbigKICAgICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwgTGlzdDxISW5zdHJ1Y3Rpb24+IGFyZ3VtZW50cykgewogICAgYXNzZXJ0KGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNKc0ludGVyb3BNZW1iZXIoZWxlbWVudCkpOwogICAgcmVnaXN0cnkucmVnaXN0ZXJOYXRpdmVNZXRob2QoZWxlbWVudCk7CgogICAgaWYgKGVsZW1lbnQgaXMgQ29uc3RydWN0b3JFbnRpdHkgJiYKICAgICAgICBlbGVtZW50LmlzRmFjdG9yeUNvbnN0cnVjdG9yICYmCiAgICAgICAgX25hdGl2ZURhdGEuaXNBbm9ueW1vdXNKc0ludGVyb3BDbGFzcyhlbGVtZW50LmVuY2xvc2luZ0NsYXNzKSkgewogICAgICAvLyBGYWN0b3J5IGNvbnN0cnVjdG9yIHRoYXQgaXMgc3ludGFjdGljIHN1Z2FyIGZvciBjcmVhdGluZyBhIEphdmFTY3JpcHQKICAgICAgLy8gb2JqZWN0IGxpdGVyYWwuCiAgICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yID0gZWxlbWVudDsKICAgICAgaW50IGkgPSAwOwogICAgICBpbnQgcG9zaXRpb25zID0gMDsKICAgICAgdmFyIGZpbHRlcmVkQXJndW1lbnRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgICAgdmFyIHBhcmFtZXRlck5hbWVNYXAgPSBuZXcgTWFwPFN0cmluZywganMuRXhwcmVzc2lvbj4oKTsKCiAgICAgIC8vIE5vdGU6IHdlIGRvbid0IHVzZSBgY29uc3RydWN0b3IucGFyYW1ldGVyU3RydWN0dXJlYCBoZXJlIGJlY2F1c2UKICAgICAgLy8gd2UgZG9uJ3QgZWxpZGUgcGFyYW1ldGVycyB0byBqcy1pbnRlcm9wIGV4dGVybmFsIHN0YXRpYyB0YXJnZXRzCiAgICAgIC8vIChpbmNsdWRpbmcgZmFjdG9yeSBjb25zdHJ1Y3RvcnMuKQogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBjYW4gd2UgZWxpZGUgdGhvc2UgcGFyYW1ldGVycz8gVGhpcyBzaG91bGQgYmUKICAgICAgLy8gY29uc2lzdGVudCB3aXRoIHdoYXQgd2UgZG8gd2l0aCBpbnN0YW5jZSBtZXRob2RzLgogICAgICBpci5Qcm9jZWR1cmUgbm9kZSA9IF9lbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24oY29uc3RydWN0b3IpLm5vZGU7CiAgICAgIExpc3Q8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gbmFtZWRQYXJhbWV0ZXJzID0KICAgICAgICAgIG5vZGUuZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzLnRvTGlzdCgpOwogICAgICBuYW1lZFBhcmFtZXRlcnMuc29ydChuYXRpdmVPcmRlcmluZyk7CiAgICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSBpbiBuYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgICBTdHJpbmcgcGFyYW1ldGVyTmFtZSA9IHZhcmlhYmxlLm5hbWU7CiAgICAgICAgLy8gVE9ETyhqYWNvYnIpOiBjb25zaWRlciB0aHJvd2luZyBpZiBwYXJhbWV0ZXIgbmFtZXMgZG8gbm90IG1hdGNoCiAgICAgICAgLy8gbmFtZXMgb2YgcHJvcGVydGllcyBpbiB0aGUgY2xhc3MuCiAgICAgICAgSEluc3RydWN0aW9uIGFyZ3VtZW50ID0gYXJndW1lbnRzW2ldOwogICAgICAgIGlmIChhcmd1bWVudCAhPSBudWxsKSB7CiAgICAgICAgICBmaWx0ZXJlZEFyZ3VtZW50cy5hZGQoYXJndW1lbnQpOwogICAgICAgICAgdmFyIGpzTmFtZSA9IF9uYXRpdmVEYXRhLmNvbXB1dGVVbmVzY2FwZWRKU0ludGVyb3BOYW1lKHBhcmFtZXRlck5hbWUpOwogICAgICAgICAgcGFyYW1ldGVyTmFtZU1hcFtqc05hbWVdID0gbmV3IGpzLkludGVycG9sYXRlZEV4cHJlc3Npb24ocG9zaXRpb25zKyspOwogICAgICAgIH0KICAgICAgICBpKys7CiAgICAgIH0KICAgICAgdmFyIGNvZGVUZW1wbGF0ZSA9CiAgICAgICAgICBuZXcganMuVGVtcGxhdGUobnVsbCwganMub2JqZWN0TGl0ZXJhbChwYXJhbWV0ZXJOYW1lTWFwKSk7CgogICAgICB2YXIgbmF0aXZlQmVoYXZpb3IgPSBuZXcgTmF0aXZlQmVoYXZpb3IoKS4uY29kZVRlbXBsYXRlID0gY29kZVRlbXBsYXRlOwogICAgICBpZiAob3B0aW9ucy50cnVzdEpTSW50ZXJvcFR5cGVBbm5vdGF0aW9ucykgewogICAgICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUgPQogICAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzKTsKICAgICAgICBuYXRpdmVCZWhhdmlvci50eXBlc1JldHVybmVkLmFkZCh0aGlzVHlwZSk7CiAgICAgIH0KICAgICAgLy8gVE9ETyhlZm9ydHVuYSk6IFNvdXJjZSBpbmZvcm1hdGlvbi4KICAgICAgcmV0dXJuIG5ldyBIRm9yZWlnbkNvZGUoCiAgICAgICAgICBjb2RlVGVtcGxhdGUsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLCBmaWx0ZXJlZEFyZ3VtZW50cywKICAgICAgICAgIG5hdGl2ZUJlaGF2aW9yOiBuYXRpdmVCZWhhdmlvcik7CiAgICB9CgogICAgdmFyIHRhcmdldCA9IG5ldyBIRm9yZWlnbkNvZGUoCiAgICAgICAganMuanMKICAgICAgICAgICAgLnBhcnNlRm9yZWlnbkpTKCIke19uYXRpdmVEYXRhLmdldEZpeGVkQmFja2VuZE1ldGhvZFBhdGgoZWxlbWVudCl9LiIKICAgICAgICAgICAgICAgICIke19uYXRpdmVEYXRhLmdldEZpeGVkQmFja2VuZE5hbWUoZWxlbWVudCl9IiksCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsCiAgICAgICAgPEhJbnN0cnVjdGlvbj5bXSk7CiAgICBhZGQodGFyZ2V0KTsKICAgIC8vIFN0cmlwIG9mZiB0cmFpbGluZyBhcmd1bWVudHMgdGhhdCB3ZXJlIG5vdCBzcGVjaWZpZWQuCiAgICAvLyB3ZSBjb3VsZCBhc3NlcnQgdGhhdCB0aGUgdHJhaWxpbmcgYXJndW1lbnRzIGFyZSBhbGwgbnVsbC4KICAgIC8vIFRPRE8oamFjb2JyKTogcmV3cml0ZSBuYW1lZCBhcmd1bWVudHMgdG8gYW4gb2JqZWN0IGxpdGVyYWwgbWF0Y2hpbmcKICAgIC8vIHRoZSBmYWN0b3J5IGNvbnN0cnVjdG9yIGNhc2UuCiAgICBhcmd1bWVudHMgPSBhcmd1bWVudHMud2hlcmUoKGFyZykgPT4gYXJnICE9IG51bGwpLnRvTGlzdCgpOwogICAgdmFyIGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+W3RhcmdldF0uLmFkZEFsbChhcmd1bWVudHMpOwoKICAgIHZhciBuYXRpdmVCZWhhdmlvciA9IG5ldyBOYXRpdmVCZWhhdmlvcigpLi5zaWRlRWZmZWN0cy5zZXRBbGxTaWRlRWZmZWN0cygpOwoKICAgIERhcnRUeXBlIHR5cGUgPSBlbGVtZW50IGlzIENvbnN0cnVjdG9yRW50aXR5CiAgICAgICAgPyBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MpCiAgICAgICAgOiBfZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShlbGVtZW50KS5yZXR1cm5UeXBlOwogICAgLy8gTmF0aXZlIGJlaGF2aW9yIGVmZmVjdHMgaGVyZSBhcmUgc2ltaWxhciB0byBuYXRpdmUvYmVoYXZpb3IuZGFydC4KICAgIC8vIFRoZSByZXR1cm4gdHlwZSBpcyBkeW5hbWljIGlmIHdlIGRvbid0IHRydXN0IGpzLWludGVyb3AgdHlwZQogICAgLy8gZGVjbGFyYXRpb25zLgogICAgbmF0aXZlQmVoYXZpb3IudHlwZXNSZXR1cm5lZC5hZGQoCiAgICAgICAgb3B0aW9ucy50cnVzdEpTSW50ZXJvcFR5cGVBbm5vdGF0aW9ucyA/IHR5cGUgOiBjb25zdCBEeW5hbWljVHlwZSgpKTsKCiAgICAvLyBUaGUgYWxsb2NhdGlvbiBlZmZlY3RzIGluY2x1ZGUgdGhlIGRlY2xhcmVkIHR5cGUgaWYgaXQgaXMgbmF0aXZlICh3aGljaAogICAgLy8gaW5jbHVkZXMganMgaW50ZXJvcCB0eXBlcykuCiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlICYmIF9uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3ModHlwZS5lbGVtZW50KSkgewogICAgICBuYXRpdmVCZWhhdmlvci50eXBlc0luc3RhbnRpYXRlZC5hZGQodHlwZSk7CiAgICB9CgogICAgLy8gSXQgYWxzbyBpbmNsdWRlcyBhbnkgb3RoZXIgSlMgaW50ZXJvcCB0eXBlIGlmIHdlIGRvbid0IHRydXN0IHRoZQogICAgLy8gYW5ub3RhdGlvbiBvciBpZiBpcyBkZWNsYXJlZCB0b28gYnJvYWQuCiAgICBpZiAoIW9wdGlvbnMudHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnMgfHwKICAgICAgICB0eXBlID09IF9jb21tb25FbGVtZW50cy5vYmplY3RUeXBlIHx8CiAgICAgICAgdHlwZSBpcyBEeW5hbWljVHlwZSkgewogICAgICBuYXRpdmVCZWhhdmlvci50eXBlc0luc3RhbnRpYXRlZC5hZGQoX2VsZW1lbnRFbnZpcm9ubWVudAogICAgICAgICAgLmdldFRoaXNUeXBlKF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRPYmplY3RDbGFzcykpOwogICAgfQoKICAgIFN0cmluZyB0ZW1wbGF0ZTsKICAgIGlmIChlbGVtZW50LmlzR2V0dGVyKSB7CiAgICAgIHRlbXBsYXRlID0gJyMnOwogICAgfSBlbHNlIGlmIChlbGVtZW50LmlzU2V0dGVyKSB7CiAgICAgIHRlbXBsYXRlID0gJyMgPSAjJzsKICAgIH0gZWxzZSB7CiAgICAgIHZhciBhcmdzID0gbmV3IExpc3QuZmlsbGVkKGFyZ3VtZW50cy5sZW5ndGgsICcjJykuam9pbignLCcpOwogICAgICB0ZW1wbGF0ZSA9IGVsZW1lbnQuaXNDb25zdHJ1Y3RvciA/ICJuZXcgIygkYXJncykiIDogIiMoJGFyZ3MpIjsKICAgIH0KICAgIGpzLlRlbXBsYXRlIGNvZGVUZW1wbGF0ZSA9IGpzLmpzLnBhcnNlRm9yZWlnbkpTKHRlbXBsYXRlKTsKICAgIG5hdGl2ZUJlaGF2aW9yLmNvZGVUZW1wbGF0ZSA9IGNvZGVUZW1wbGF0ZTsKCiAgICAvLyBUT0RPKGVmb3J0dW5hKTogQWRkIHNvdXJjZSBpbmZvcm1hdGlvbi4KICAgIHJldHVybiBuZXcgSEZvcmVpZ25Db2RlKAogICAgICAgIGNvZGVUZW1wbGF0ZSwgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsIGlucHV0cywKICAgICAgICBuYXRpdmVCZWhhdmlvcjogbmF0aXZlQmVoYXZpb3IpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZ1bmN0aW9uTm9kZShpci5GdW5jdGlvbk5vZGUgbm9kZSkgewogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRDcmVhdGUobm9kZSk7CiAgICBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvIGNsb3N1cmVJbmZvID0KICAgICAgICBfY2xvc3VyZURhdGFMb29rdXAuZ2V0Q2xvc3VyZUluZm8obm9kZS5wYXJlbnQpOwogICAgQ2xhc3NFbnRpdHkgY2xvc3VyZUNsYXNzRW50aXR5ID0gY2xvc3VyZUluZm8uY2xvc3VyZUNsYXNzRW50aXR5OwoKICAgIExpc3Q8SEluc3RydWN0aW9uPiBjYXB0dXJlZFZhcmlhYmxlcyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hJbnN0YW5jZUZpZWxkKGNsb3N1cmVDbGFzc0VudGl0eSwKICAgICAgICAoXywgRmllbGRFbnRpdHkgZmllbGQpIHsKICAgICAgaWYgKF9maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShmaWVsZCkuaXNFbGlkZWQpIHJldHVybjsKICAgICAgY2FwdHVyZWRWYXJpYWJsZXMKICAgICAgICAgIC5hZGQobG9jYWxzSGFuZGxlci5yZWFkTG9jYWwoY2xvc3VyZUluZm8uZ2V0TG9jYWxGb3JGaWVsZChmaWVsZCkpKTsKICAgIH0pOwoKICAgIEFic3RyYWN0VmFsdWUgdHlwZSA9CiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTm9uTnVsbEV4YWN0KGNsb3N1cmVDbGFzc0VudGl0eSk7CiAgICAvLyBUT0RPKGVmb3J0dW5hKTogQWRkIHNvdXJjZSBpbmZvcm1hdGlvbiBoZXJlLgogICAgcHVzaChuZXcgSENyZWF0ZSgKICAgICAgICBjbG9zdXJlQ2xhc3NFbnRpdHksIGNhcHR1cmVkVmFyaWFibGVzLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICBjYWxsTWV0aG9kOiBjbG9zdXJlSW5mby5jYWxsTWV0aG9kKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihpci5GdW5jdGlvbkRlY2xhcmF0aW9uIGRlY2xhcmF0aW9uKSB7CiAgICBhc3NlcnQoX2lzUmVhY2hhYmxlKTsKICAgIGRlY2xhcmF0aW9uLmZ1bmN0aW9uLmFjY2VwdCh0aGlzKTsKICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKGRlY2xhcmF0aW9uLnZhcmlhYmxlKTsKICAgIGxvY2Fsc0hhbmRsZXIudXBkYXRlTG9jYWwobG9jYWwsIHBvcCgpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGdW5jdGlvbkV4cHJlc3Npb24oaXIuRnVuY3Rpb25FeHByZXNzaW9uIGZ1bmNFeHByZXNzaW9uKSB7CiAgICBmdW5jRXhwcmVzc2lvbi5mdW5jdGlvbi5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5zdGFudGlhdGlvbihpci5JbnN0YW50aWF0aW9uIG5vZGUpIHsKICAgIHZhciBhcmd1bWVudHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgbm9kZS5leHByZXNzaW9uLmFjY2VwdCh0aGlzKTsKICAgIGFyZ3VtZW50cy5hZGQocG9wKCkpOwogICAgU3RhdGljVHlwZSBleHByZXNzaW9uVHlwZSA9IF9nZXRTdGF0aWNUeXBlKG5vZGUuZXhwcmVzc2lvbik7CiAgICBib29sIHR5cGVBcmd1bWVudHNOZWVkZWQgPSBfcnRpTmVlZC5pbnN0YW50aWF0aW9uTmVlZHNUeXBlQXJndW1lbnRzKAogICAgICAgIGV4cHJlc3Npb25UeXBlLnR5cGUsIG5vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IG5vZGUudHlwZUFyZ3VtZW50cwogICAgICAgIC5tYXAoKHR5cGUpID0+IHR5cGVBcmd1bWVudHNOZWVkZWQKICAgICAgICAgICAgPyBfZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh0eXBlKQogICAgICAgICAgICA6IF9jb21tb25FbGVtZW50cy5keW5hbWljVHlwZSkKICAgICAgICAudG9MaXN0KCk7CiAgICByZWdpc3RyeS5yZWdpc3RlckdlbmVyaWNJbnN0YW50aWF0aW9uKAogICAgICAgIG5ldyBHZW5lcmljSW5zdGFudGlhdGlvbihleHByZXNzaW9uVHlwZS50eXBlLCB0eXBlQXJndW1lbnRzKSk7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYW4gd2UgYXZvaWQgY3JlYXRpbmcgdGhlIGluc3RhbnRpYXRpb24gb2JqZWN0PwogICAgZm9yIChEYXJ0VHlwZSB0eXBlIGluIHR5cGVBcmd1bWVudHMpIHsKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0KICAgICAgICAgIF90eXBlQnVpbGRlci5hbmFseXplVHlwZUFyZ3VtZW50KHR5cGUsIHNvdXJjZUVsZW1lbnQpOwogICAgICBhcmd1bWVudHMuYWRkKGluc3RydWN0aW9uKTsKICAgIH0KICAgIGludCB0eXBlQXJndW1lbnRDb3VudCA9IG5vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGg7CiAgICBib29sIHRhcmdldENhblRocm93ID0gZmFsc2U7IC8vIFRPRE8oc3JhKTogSXMgdGhpcyB0cnVlPwogICAgRnVuY3Rpb25FbnRpdHkgdGFyZ2V0ID0KICAgICAgICBfY29tbW9uRWxlbWVudHMuZ2V0SW5zdGFudGlhdGVGdW5jdGlvbih0eXBlQXJndW1lbnRDb3VudCk7CiAgICBpZiAodGFyZ2V0ID09IG51bGwpIHsKICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcigKICAgICAgICAgIF9lbGVtZW50TWFwLmdldFNwYW5uYWJsZSh0YXJnZXRFbGVtZW50LCBub2RlKSwKICAgICAgICAgICdHZW5lcmljIGZ1bmN0aW9uIGluc3RhbnRpYXRpb24gbm90IGltcGxlbWVudGVkIGZvciAnCiAgICAgICAgICAnJHt0eXBlQXJndW1lbnRDb3VudH0gdHlwZSBhcmd1bWVudHMnKTsKICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBuZXcgSEludm9rZVN0YXRpYygKICAgICAgICB0YXJnZXQsIGFyZ3VtZW50cywgX2Fic3RyYWN0VmFsdWVEb21haW4uZnVuY3Rpb25UeXBlLCA8RGFydFR5cGU+W10sCiAgICAgICAgdGFyZ2V0Q2FuVGhyb3c6IHRhcmdldENhblRocm93KTsKICAgIC8vIFRPRE8oc3JhKTogLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uCiAgICBpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cwogICAgICAuLmNsZWFyQWxsRGVwZW5kZW5jaWVzKCkKICAgICAgLi5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CgogICAgcHVzaChpbnN0cnVjdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWV0aG9kSW52b2NhdGlvbihpci5NZXRob2RJbnZvY2F0aW9uIG5vZGUpIHsKICAgIG5vZGUucmVjZWl2ZXIuYWNjZXB0KHRoaXMpOwogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gcG9wKCk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IF9lbGVtZW50TWFwLmdldFNlbGVjdG9yKG5vZGUpOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IDxEYXJ0VHlwZT5bXTsKICAgIHNlbGVjdG9yID0KICAgICAgICBfZmlsbER5bmFtaWNUeXBlQXJndW1lbnRzKHNlbGVjdG9yLCBub2RlLmFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cyk7CiAgICBfcHVzaER5bmFtaWNJbnZvY2F0aW9uKAogICAgICAgIG5vZGUsCiAgICAgICAgX2dldFN0YXRpY1R5cGUobm9kZS5yZWNlaXZlciksCiAgICAgICAgX3R5cGVJbmZlcmVuY2VNYXAucmVjZWl2ZXJUeXBlT2ZJbnZvY2F0aW9uKG5vZGUsIF9hYnN0cmFjdFZhbHVlRG9tYWluKSwKICAgICAgICBzZWxlY3RvciwKICAgICAgICA8SEluc3RydWN0aW9uPltyZWNlaXZlcl0uLmFkZEFsbChfdmlzaXRBcmd1bWVudHNGb3JEeW5hbWljVGFyZ2V0KAogICAgICAgICAgICBzZWxlY3Rvciwgbm9kZS5hcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpKSwKICAgICAgICB0eXBlQXJndW1lbnRzLAogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRDYWxsKG5vZGUucmVjZWl2ZXIsIG5vZGUpKTsKICB9CgogIEhJbnRlcmNlcHRvciBfaW50ZXJjZXB0b3JGb3IoCiAgICAgIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRlZCwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIEhJbnRlcmNlcHRvciBpbnRlcmNlcHRvciA9CiAgICAgICAgbmV3IEhJbnRlcmNlcHRvcihpbnRlcmNlcHRlZCwgX2Fic3RyYWN0VmFsdWVEb21haW4ubm9uTnVsbFR5cGUpCiAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICBhZGQoaW50ZXJjZXB0b3IpOwogICAgcmV0dXJuIGludGVyY2VwdG9yOwogIH0KCiAgc3RhdGljIGlyLkNsYXNzIF9jb250YWluaW5nQ2xhc3MoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgd2hpbGUgKG5vZGUgIT0gbnVsbCkgewogICAgICBpZiAobm9kZSBpcyBpci5DbGFzcykgcmV0dXJuIG5vZGU7CiAgICAgIG5vZGUgPSBub2RlLnBhcmVudDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBfZ2VuZXJhdGVTdXBlck5vU3VjaE1ldGhvZCgKICAgICAgaXIuRXhwcmVzc2lvbiBpbnZvY2F0aW9uLAogICAgICBTdHJpbmcgcHVibGljTmFtZSwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGFyZ3VtZW50cywKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0U2VsZWN0b3IoaW52b2NhdGlvbik7CiAgICBDbGFzc0VudGl0eSBjb250YWluaW5nQ2xhc3MgPQogICAgICAgIF9lbGVtZW50TWFwLmdldENsYXNzKF9jb250YWluaW5nQ2xhc3MoaW52b2NhdGlvbikpOwogICAgRnVuY3Rpb25FbnRpdHkgbm9TdWNoTWV0aG9kID0KICAgICAgICBfZWxlbWVudE1hcC5nZXRTdXBlck5vU3VjaE1ldGhvZChjb250YWluaW5nQ2xhc3MpOwoKICAgIENvbnN0YW50VmFsdWUgbmFtZUNvbnN0YW50ID0gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVN0cmluZyhwdWJsaWNOYW1lKTsKCiAgICBqcy5OYW1lIGludGVybmFsTmFtZSA9IF9uYW1lci5pbnZvY2F0aW9uTmFtZShzZWxlY3Rvcik7CgogICAgdmFyIGFyZ3VtZW50c0luc3RydWN0aW9uID0gX2J1aWxkTGl0ZXJhbExpc3QoYXJndW1lbnRzKTsKICAgIGFkZChhcmd1bWVudHNJbnN0cnVjdGlvbik7CgogICAgdmFyIGFyZ3VtZW50TmFtZXMgPSBuZXcgTGlzdDxISW5zdHJ1Y3Rpb24+KCk7CiAgICBmb3IgKFN0cmluZyBhcmd1bWVudE5hbWUgaW4gc2VsZWN0b3IubmFtZWRBcmd1bWVudHMpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSBhcmd1bWVudE5hbWVDb25zdGFudCA9CiAgICAgICAgICBjb25zdGFudF9zeXN0ZW0uY3JlYXRlU3RyaW5nKGFyZ3VtZW50TmFtZSk7CiAgICAgIGFyZ3VtZW50TmFtZXMuYWRkKGdyYXBoLmFkZENvbnN0YW50KGFyZ3VtZW50TmFtZUNvbnN0YW50LCBjbG9zZWRXb3JsZCkpOwogICAgfQogICAgdmFyIGFyZ3VtZW50TmFtZXNJbnN0cnVjdGlvbiA9IF9idWlsZExpdGVyYWxMaXN0KGFyZ3VtZW50TmFtZXMpOwogICAgYWRkKGFyZ3VtZW50TmFtZXNJbnN0cnVjdGlvbik7CgogICAgQ29uc3RhbnRWYWx1ZSBraW5kQ29uc3RhbnQgPQogICAgICAgIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVJbnRGcm9tSW50KHNlbGVjdG9yLmludm9jYXRpb25NaXJyb3JLaW5kKTsKCiAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmNyZWF0ZUludm9jYXRpb25NaXJyb3IsCiAgICAgICAgWwogICAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnQobmFtZUNvbnN0YW50LCBjbG9zZWRXb3JsZCksCiAgICAgICAgICBncmFwaC5hZGRDb25zdGFudFN0cmluZ0Zyb21OYW1lKGludGVybmFsTmFtZSwgY2xvc2VkV29ybGQpLAogICAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnQoa2luZENvbnN0YW50LCBjbG9zZWRXb3JsZCksCiAgICAgICAgICBhcmd1bWVudHNJbnN0cnVjdGlvbiwKICAgICAgICAgIGFyZ3VtZW50TmFtZXNJbnN0cnVjdGlvbiwKICAgICAgICAgIGdyYXBoLmFkZENvbnN0YW50SW50KHR5cGVBcmd1bWVudHMubGVuZ3RoLCBjbG9zZWRXb3JsZCksCiAgICAgICAgXSwKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwKICAgICAgICB0eXBlQXJndW1lbnRzLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CgogICAgX2J1aWxkSW52b2tlU3VwZXIoU2VsZWN0b3JzLm5vU3VjaE1ldGhvZF8sIGNvbnRhaW5pbmdDbGFzcywgbm9TdWNoTWV0aG9kLAogICAgICAgIDxISW5zdHJ1Y3Rpb24+W3BvcCgpXSwgdHlwZUFyZ3VtZW50cywgc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgSEluc3RydWN0aW9uIF9idWlsZEludm9rZVN1cGVyKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQ2xhc3NFbnRpdHkgY29udGFpbmluZ0NsYXNzLAogICAgICBNZW1iZXJFbnRpdHkgdGFyZ2V0LAogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnRzLAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0KICAgICAgICBsb2NhbHNIYW5kbGVyLnJlYWRUaGlzKHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CgogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICBib29sIGlzSW50ZXJjZXB0ZWQgPQogICAgICAgIGNsb3NlZFdvcmxkLmludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkU2VsZWN0b3Ioc2VsZWN0b3IpOwogICAgaWYgKGlzSW50ZXJjZXB0ZWQpIHsKICAgICAgaW5wdXRzLmFkZChfaW50ZXJjZXB0b3JGb3IocmVjZWl2ZXIsIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgICBpbnB1dHMuYWRkKHJlY2VpdmVyKTsKICAgIGlucHV0cy5hZGRBbGwoYXJndW1lbnRzKTsKCiAgICBBYnN0cmFjdFZhbHVlIHR5cGVNYXNrOwogICAgaWYgKHRhcmdldCBpcyBGdW5jdGlvbkVudGl0eSkgewogICAgICB0eXBlTWFzayA9IF90eXBlSW5mZXJlbmNlTWFwLmdldFJldHVyblR5cGVPZih0YXJnZXQpOwogICAgfSBlbHNlIHsKICAgICAgdHlwZU1hc2sgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICAgIH0KICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IG5ldyBISW52b2tlU3VwZXIoCiAgICAgICAgdGFyZ2V0LAogICAgICAgIGNvbnRhaW5pbmdDbGFzcywKICAgICAgICBzZWxlY3RvciwKICAgICAgICBpbnB1dHMsCiAgICAgICAgaXNJbnRlcmNlcHRlZCwKICAgICAgICB0eXBlTWFzaywKICAgICAgICB0eXBlQXJndW1lbnRzLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgIGlzU2V0dGVyOiBzZWxlY3Rvci5pc1NldHRlciB8fCBzZWxlY3Rvci5pc0luZGV4U2V0KTsKICAgIGluc3RydWN0aW9uLnNpZGVFZmZlY3RzID0KICAgICAgICBfaW5mZXJyZWREYXRhLmdldFNpZGVFZmZlY3RzT2ZTZWxlY3RvcihzZWxlY3RvciwgbnVsbCk7CiAgICBwdXNoKGluc3RydWN0aW9uKTsKICAgIHJldHVybiBpbnN0cnVjdGlvbjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdXBlclByb3BlcnR5R2V0KGlyLlN1cGVyUHJvcGVydHlHZXQgbm9kZSkgewogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRHZXQobm9kZSk7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0KICAgICAgICBfZWxlbWVudE1hcC5nZXRTdXBlck1lbWJlcihfY3VycmVudEZyYW1lLm1lbWJlciwgbm9kZS5uYW1lKTsKICAgIGlmIChtZW1iZXIgPT0gbnVsbCkgewogICAgICBfZ2VuZXJhdGVTdXBlck5vU3VjaE1ldGhvZChub2RlLCBfZWxlbWVudE1hcC5nZXRTZWxlY3Rvcihub2RlKS5uYW1lLAogICAgICAgICAgY29uc3QgPEhJbnN0cnVjdGlvbj5bXSwgY29uc3QgPERhcnRUeXBlPltdLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChtZW1iZXIuaXNGaWVsZCkgewogICAgICBGaWVsZEFuYWx5c2lzRGF0YSBmaWVsZERhdGEgPSBfZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEobWVtYmVyKTsKICAgICAgaWYgKGZpZWxkRGF0YS5pc0VmZmVjdGl2ZWx5Q29uc3RhbnQpIHsKICAgICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gZmllbGREYXRhLmNvbnN0YW50VmFsdWU7CiAgICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50KHZhbHVlLCBjbG9zZWRXb3JsZCwKICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CiAgICBfYnVpbGRJbnZva2VTdXBlcigKICAgICAgICBfZWxlbWVudE1hcC5nZXRTZWxlY3Rvcihub2RlKSwKICAgICAgICBfZWxlbWVudE1hcC5nZXRDbGFzcyhfY29udGFpbmluZ0NsYXNzKG5vZGUpKSwKICAgICAgICBtZW1iZXIsCiAgICAgICAgY29uc3QgPEhJbnN0cnVjdGlvbj5bXSwKICAgICAgICBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihpci5TdXBlck1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRDYWxsKG5vZGUsIG5vZGUpOwogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3VwZXJNZW1iZXIoX2N1cnJlbnRGcmFtZS5tZW1iZXIsIG5vZGUubmFtZSk7CiAgICBpZiAobWVtYmVyID09IG51bGwpIHsKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBfZWxlbWVudE1hcC5nZXRTZWxlY3Rvcihub2RlKTsKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IDxEYXJ0VHlwZT5bXTsKICAgICAgc2VsZWN0b3IgPQogICAgICAgICAgX2ZpbGxEeW5hbWljVHlwZUFyZ3VtZW50cyhzZWxlY3Rvciwgbm9kZS5hcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpOwogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnRzID0gX3Zpc2l0QXJndW1lbnRzRm9yRHluYW1pY1RhcmdldCgKICAgICAgICAgIHNlbGVjdG9yLCBub2RlLmFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cyk7CiAgICAgIF9nZW5lcmF0ZVN1cGVyTm9TdWNoTWV0aG9kKAogICAgICAgICAgbm9kZSwgc2VsZWN0b3IubmFtZSwgYXJndW1lbnRzLCB0eXBlQXJndW1lbnRzLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPQogICAgICAgIF9nZXRTdGF0aWNUeXBlQXJndW1lbnRzKG1lbWJlciwgbm9kZS5hcmd1bWVudHMpOwoKICAgIE1lbWJlckRlZmluaXRpb24gdGFyZ2V0RGVmaW5pdGlvbiA9IF9lbGVtZW50TWFwLmdldE1lbWJlckRlZmluaXRpb24obWVtYmVyKTsKICAgIGlyLlByb2NlZHVyZSB0YXJnZXQgPSB0YXJnZXREZWZpbml0aW9uLm5vZGU7CiAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiA9IG1lbWJlcjsKICAgIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMgPSBfdmlzaXRBcmd1bWVudHNGb3JTdGF0aWNUYXJnZXQoCiAgICAgICAgdGFyZ2V0LmZ1bmN0aW9uLAogICAgICAgIGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICBub2RlLmFyZ3VtZW50cywKICAgICAgICB0eXBlQXJndW1lbnRzLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIF9idWlsZEludm9rZVN1cGVyKAogICAgICAgIF9lbGVtZW50TWFwLmdldFNlbGVjdG9yKG5vZGUpLAogICAgICAgIF9lbGVtZW50TWFwLmdldENsYXNzKF9jb250YWluaW5nQ2xhc3Mobm9kZSkpLAogICAgICAgIG1lbWJlciwKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgdHlwZUFyZ3VtZW50cywKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICB2b2lkIF9hc3NlcnRJc1R5cGUoSEluc3RydWN0aW9uIHN1YnR5cGVJbnN0cnVjdGlvbiwgRGFydFR5cGUgc3VwZXJ0eXBlLAogICAgICBTdHJpbmcgcHJlZml4LCBTdHJpbmcgaW5maXgsIFN0cmluZyBzdWZmaXgpIHsKICAgIEhJbnN0cnVjdGlvbiBzdXBlcnR5cGVJbnN0cnVjdGlvbiA9IF90eXBlQnVpbGRlci5hbmFseXplVHlwZUFyZ3VtZW50KAogICAgICAgIGxvY2Fsc0hhbmRsZXIuc3Vic3RJbkNvbnRleHQoc3VwZXJ0eXBlKSwgc291cmNlRWxlbWVudCk7CiAgICBISW5zdHJ1Y3Rpb24gcHJlZml4SW5zdHJ1Y3Rpb24gPQogICAgICAgIGdyYXBoLmFkZENvbnN0YW50U3RyaW5nKHByZWZpeCwgY2xvc2VkV29ybGQpOwogICAgSEluc3RydWN0aW9uIGluZml4SW5zdHJ1Y3Rpb24gPSBncmFwaC5hZGRDb25zdGFudFN0cmluZyhpbmZpeCwgY2xvc2VkV29ybGQpOwogICAgSEluc3RydWN0aW9uIHN1ZmZpeEluc3RydWN0aW9uID0KICAgICAgICBncmFwaC5hZGRDb25zdGFudFN0cmluZyhzdWZmaXgsIGNsb3NlZFdvcmxkKTsKICAgIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQgPSBfY29tbW9uRWxlbWVudHMuYXNzZXJ0SXNTdWJ0eXBlOwogICAgdmFyIGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+WwogICAgICBzdWJ0eXBlSW5zdHJ1Y3Rpb24sCiAgICAgIHN1cGVydHlwZUluc3RydWN0aW9uLAogICAgICBwcmVmaXhJbnN0cnVjdGlvbiwKICAgICAgaW5maXhJbnN0cnVjdGlvbiwKICAgICAgc3VmZml4SW5zdHJ1Y3Rpb24KICAgIF07CiAgICBISW5zdHJ1Y3Rpb24gYXNzZXJ0SXNTdWJ0eXBlID0gbmV3IEhJbnZva2VTdGF0aWMoZWxlbWVudCwgaW5wdXRzLAogICAgICAgIHN1YnR5cGVJbnN0cnVjdGlvbi5pbnN0cnVjdGlvblR5cGUsIGNvbnN0IDxEYXJ0VHlwZT5bXSk7CiAgICBhZGQoYXNzZXJ0SXNTdWJ0eXBlKTsKICB9CgogIHZvaWQgX2NoZWNrVHlwZUJvdW5kKAogICAgICBISW5zdHJ1Y3Rpb24gdHlwZUluc3RydWN0aW9uLCBEYXJ0VHlwZSBib3VuZCwgU3RyaW5nIHZhcmlhYmxlTmFtZSkgewogICAgSEluc3RydWN0aW9uIGJvdW5kSW5zdHJ1Y3Rpb24gPSBfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudE5ld1J0aSgKICAgICAgICBsb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KGJvdW5kKSwgc291cmNlRWxlbWVudCk7CgogICAgSEluc3RydWN0aW9uIHZhcmlhYmxlTmFtZUluc3RydWN0aW9uID0KICAgICAgICBncmFwaC5hZGRDb25zdGFudFN0cmluZyh2YXJpYWJsZU5hbWUsIGNsb3NlZFdvcmxkKTsKICAgIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQgPSBfY29tbW9uRWxlbWVudHMuY2hlY2tUeXBlQm91bmQ7CiAgICB2YXIgaW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bCiAgICAgIHR5cGVJbnN0cnVjdGlvbiwKICAgICAgYm91bmRJbnN0cnVjdGlvbiwKICAgICAgdmFyaWFibGVOYW1lSW5zdHJ1Y3Rpb24KICAgIF07CiAgICBISW5zdHJ1Y3Rpb24gY2hlY2tCb3VuZCA9IG5ldyBISW52b2tlU3RhdGljKAogICAgICAgIGVsZW1lbnQsIGlucHV0cywgdHlwZUluc3RydWN0aW9uLmluc3RydWN0aW9uVHlwZSwgY29uc3QgPERhcnRUeXBlPltdKTsKICAgIGFkZChjaGVja0JvdW5kKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpIHsKICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uID0KICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkTmV3KG5vZGUpOwogICAgaXIuQ29uc3RydWN0b3IgdGFyZ2V0ID0gbm9kZS50YXJnZXQ7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBfZWxlbWVudE1hcC5nZXRDb25zdGFudFZhbHVlKG5vZGUpOwogICAgICBzdGFjay5hZGQoZ3JhcGguYWRkQ29uc3RhbnQoY29uc3RhbnQsIGNsb3NlZFdvcmxkLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciA9IF9lbGVtZW50TWFwLmdldENvbnN0cnVjdG9yKHRhcmdldCk7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzczsKICAgIEFic3RyYWN0VmFsdWUgdHlwZU1hc2sgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsRXhhY3QoY2xzKTsKICAgIEludGVyZmFjZVR5cGUgaW5zdGFuY2VUeXBlID0gX2VsZW1lbnRNYXAuY3JlYXRlSW50ZXJmYWNlVHlwZSgKICAgICAgICB0YXJnZXQuZW5jbG9zaW5nQ2xhc3MsIG5vZGUuYXJndW1lbnRzLnR5cGVzKTsKICAgIGluc3RhbmNlVHlwZSA9IGxvY2Fsc0hhbmRsZXIuc3Vic3RJbkNvbnRleHQoaW5zdGFuY2VUeXBlKTsKCiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgIGlmIChjb25zdHJ1Y3Rvci5pc0dlbmVyYXRpdmVDb25zdHJ1Y3RvciAmJgogICAgICAgIF9uYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzKSAmJgogICAgICAgICFfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcE1lbWJlcihjb25zdHJ1Y3RvcikpIHsKICAgICAgLy8gTmF0aXZlIGNsYXNzIGdlbmVyYXRpdmUgY29uc3RydWN0b3JzIHRha2UgYSBwcmUtY29uc3RydWN0ZWQgb2JqZWN0LgogICAgICBhcmd1bWVudHMuYWRkKGdyYXBoLmFkZENvbnN0YW50TnVsbChjbG9zZWRXb3JsZCkpOwogICAgfQogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9CiAgICAgICAgX2dldENvbnN0cnVjdG9yVHlwZUFyZ3VtZW50cyhjb25zdHJ1Y3Rvciwgbm9kZS5hcmd1bWVudHMpOwogICAgYXJndW1lbnRzLmFkZEFsbChjbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmlzSnNJbnRlcm9wTWVtYmVyKGNvbnN0cnVjdG9yKQogICAgICAgID8gX3Zpc2l0QXJndW1lbnRzRm9yTmF0aXZlU3RhdGljVGFyZ2V0KHRhcmdldC5mdW5jdGlvbiwgbm9kZS5hcmd1bWVudHMpCiAgICAgICAgOiBfdmlzaXRBcmd1bWVudHNGb3JTdGF0aWNUYXJnZXQoCiAgICAgICAgICAgIHRhcmdldC5mdW5jdGlvbiwKICAgICAgICAgICAgY29uc3RydWN0b3IucGFyYW1ldGVyU3RydWN0dXJlLAogICAgICAgICAgICBub2RlLmFyZ3VtZW50cywKICAgICAgICAgICAgdHlwZUFyZ3VtZW50cywKICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pKTsKICAgIGlmIChfY29tbW9uRWxlbWVudHMuaXNTeW1ib2xDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikpIHsKICAgICAgY29uc3RydWN0b3IgPSBfY29tbW9uRWxlbWVudHMuc3ltYm9sVmFsaWRhdGVkQ29uc3RydWN0b3I7CiAgICB9CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuIHR5cGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgdG8KICAgIC8vIGNvbnN0cnVjdG9ycyBsaWtlIGNhbGxpbmcgYSBnZW5lcmljIG1ldGhvZC4KICAgIF9hZGRUeXBlQXJndW1lbnRzKGFyZ3VtZW50cywgX2dldENsYXNzVHlwZUFyZ3VtZW50cyhjbHMsIG5vZGUuYXJndW1lbnRzKSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBfYWRkSW1wbGljaXRJbnN0YW50aWF0aW9uKGluc3RhbmNlVHlwZSk7CiAgICBfcHVzaFN0YXRpY0ludm9jYXRpb24oY29uc3RydWN0b3IsIGFyZ3VtZW50cywgdHlwZU1hc2ssIHR5cGVBcmd1bWVudHMsCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uLCBpbnN0YW5jZVR5cGU6IGluc3RhbmNlVHlwZSk7CiAgICBfcmVtb3ZlSW1wbGljaXRJbnN0YW50aWF0aW9uKGluc3RhbmNlVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SXNFeHByZXNzaW9uKGlyLklzRXhwcmVzc2lvbiBub2RlKSB7CiAgICBub2RlLm9wZXJhbmQuYWNjZXB0KHRoaXMpOwogICAgSEluc3RydWN0aW9uIGV4cHJlc3Npb24gPSBwb3AoKTsKICAgIF9wdXNoSXNUZXN0KG5vZGUudHlwZSwgZXhwcmVzc2lvbiwgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZElzKG5vZGUpKTsKICB9CgogIHZvaWQgX3B1c2hJc1Rlc3QoaXIuRGFydFR5cGUgdHlwZSwgSEluc3RydWN0aW9uIGV4cHJlc3Npb24sCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICAvLyBOb3RlOiBUaGUgY2FsbCB0byAidW5hbGlhcyIgdGhpcyB0eXBlIGxpa2UgaW4gdGhlIG9yaWdpbmFsIFNTQSBidWlsZGVyIGlzCiAgICAvLyB1bm5lY2Vzc2FyeSBpbiBrZXJuZWwgYmVjYXVzZSBLZXJuZWwgaGFzIG5vIG5vdGlvbiBvZiB0eXBlZGVmLgogICAgLy8gVE9ETyhlZm9ydHVuYSk6IEFkZCB0ZXN0IGZvciB0aGlzLgoKICAgIGlmICh0eXBlIGlzIGlyLkludmFsaWRUeXBlKSB7CiAgICAgIC8vIFRPRE8oc3JhKTogTWFrZSBJbnZhbGlkVHlwZSBjYXJyeSBhIG1lc3NhZ2UuCiAgICAgIF9nZW5lcmF0ZVR5cGVFcnJvcignaW52YWxpZCB0eXBlJywgc291cmNlSW5mb3JtYXRpb24pOwogICAgICBwb3AoKTsKICAgICAgc3RhY2suYWRkKGdyYXBoLmFkZENvbnN0YW50Qm9vbCh0cnVlLCBjbG9zZWRXb3JsZCkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgRGFydFR5cGUgdHlwZVZhbHVlID0KICAgICAgICBsb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KF9lbGVtZW50TWFwLmdldERhcnRUeXBlKHR5cGUpKTsKCiAgICBpZiAodHlwZVZhbHVlLnRyZWF0QXNEeW5hbWljKSB7CiAgICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudEJvb2wodHJ1ZSwgY2xvc2VkV29ybGQpKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChvcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgSEluc3RydWN0aW9uIHJ0aSA9CiAgICAgICAgICBfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudE5ld1J0aSh0eXBlVmFsdWUsIHNvdXJjZUVsZW1lbnQpOwogICAgICBwdXNoKEhJc1Rlc3QodHlwZVZhbHVlLCBleHByZXNzaW9uLCBydGksIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodHlwZVZhbHVlIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICBISW5zdHJ1Y3Rpb24gcmVwcmVzZW50YXRpb24gPQogICAgICAgICAgX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnQodHlwZVZhbHVlLCBzb3VyY2VFbGVtZW50KTsKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+WwogICAgICAgIGV4cHJlc3Npb24sCiAgICAgICAgcmVwcmVzZW50YXRpb24sCiAgICAgIF07CiAgICAgIF9wdXNoU3RhdGljSW52b2NhdGlvbihfY29tbW9uRWxlbWVudHMuZnVuY3Rpb25UeXBlVGVzdCwgaW5wdXRzLAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUsIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIEhJbnN0cnVjdGlvbiBjYWxsID0gcG9wKCk7CiAgICAgIHB1c2gobmV3IEhJcy5jb21wb3VuZCh0eXBlVmFsdWUsIGV4cHJlc3Npb24sIGNhbGwsCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICh0eXBlVmFsdWUgaXMgRnV0dXJlT3JUeXBlKSB7CiAgICAgIEhJbnN0cnVjdGlvbiByZXByZXNlbnRhdGlvbiA9CiAgICAgICAgICBfdHlwZUJ1aWxkZXIuYW5hbHl6ZVR5cGVBcmd1bWVudCh0eXBlVmFsdWUsIHNvdXJjZUVsZW1lbnQpOwogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bCiAgICAgICAgZXhwcmVzc2lvbiwKICAgICAgICByZXByZXNlbnRhdGlvbiwKICAgICAgXTsKICAgICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKF9jb21tb25FbGVtZW50cy5mdXR1cmVPclRlc3QsIGlucHV0cywKICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlLCBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgICBISW5zdHJ1Y3Rpb24gY2FsbCA9IHBvcCgpOwogICAgICBwdXNoKG5ldyBISXMuY29tcG91bmQodHlwZVZhbHVlLCBleHByZXNzaW9uLCBjYWxsLAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUsIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodHlwZVZhbHVlIGlzIFR5cGVWYXJpYWJsZVR5cGUpIHsKICAgICAgSEluc3RydWN0aW9uIHJ1bnRpbWVUeXBlID0KICAgICAgICAgIF90eXBlQnVpbGRlci5hZGRUeXBlVmFyaWFibGVSZWZlcmVuY2UodHlwZVZhbHVlLCBzb3VyY2VFbGVtZW50KTsKICAgICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmNoZWNrU3VidHlwZU9mUnVudGltZVR5cGUsCiAgICAgICAgICA8SEluc3RydWN0aW9uPltleHByZXNzaW9uLCBydW50aW1lVHlwZV0sCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSwKICAgICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIHB1c2gobmV3IEhJcy52YXJpYWJsZSh0eXBlVmFsdWUsIGV4cHJlc3Npb24sIHBvcCgpLAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUsIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAodHlwZVZhbHVlIGlzIEludGVyZmFjZVR5cGUgJiYgIV9jYW5JZ25vcmVUeXBlQXJndW1lbnRzKHR5cGVWYWx1ZSkpIHsKICAgICAgSEluc3RydWN0aW9uIHJlcHJlc2VudGF0aW9ucyA9IF90eXBlQnVpbGRlcgogICAgICAgICAgLmJ1aWxkVHlwZUFyZ3VtZW50UmVwcmVzZW50YXRpb25zKHR5cGVWYWx1ZSwgc291cmNlRWxlbWVudCk7CiAgICAgIGFkZChyZXByZXNlbnRhdGlvbnMpOwogICAgICBDbGFzc0VudGl0eSBlbGVtZW50ID0gdHlwZVZhbHVlLmVsZW1lbnQ7CiAgICAgIGpzLk5hbWUgb3BlcmF0b3IgPSBfbmFtZXIub3BlcmF0b3JJcyhlbGVtZW50KTsKICAgICAgSEluc3RydWN0aW9uIGlzRmllbGROYW1lID0KICAgICAgICAgIGdyYXBoLmFkZENvbnN0YW50U3RyaW5nRnJvbU5hbWUob3BlcmF0b3IsIGNsb3NlZFdvcmxkKTsKICAgICAgSEluc3RydWN0aW9uIGFzRmllbGROYW1lID0KICAgICAgICAgIGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5Lmhhc0FueVN0cmljdFN1YnR5cGUoZWxlbWVudCkgfHwKICAgICAgICAgICAgICAgICAgY2xvc2VkV29ybGQubmF0aXZlRGF0YS5pc0pzSW50ZXJvcENsYXNzKGVsZW1lbnQpCiAgICAgICAgICAgICAgPyBncmFwaC5hZGRDb25zdGFudFN0cmluZ0Zyb21OYW1lKAogICAgICAgICAgICAgICAgICBfbmFtZXIuc3Vic3RpdHV0aW9uTmFtZShlbGVtZW50KSwgY2xvc2VkV29ybGQpCiAgICAgICAgICAgICAgOiBncmFwaC5hZGRDb25zdGFudE51bGwoY2xvc2VkV29ybGQpOwogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gPEhJbnN0cnVjdGlvbj5bCiAgICAgICAgZXhwcmVzc2lvbiwKICAgICAgICBpc0ZpZWxkTmFtZSwKICAgICAgICByZXByZXNlbnRhdGlvbnMsCiAgICAgICAgYXNGaWVsZE5hbWUKICAgICAgXTsKICAgICAgX3B1c2hTdGF0aWNJbnZvY2F0aW9uKF9jb21tb25FbGVtZW50cy5jaGVja1N1YnR5cGUsIGlucHV0cywKICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlLCBjb25zdCA8RGFydFR5cGU+W10sCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgICBwdXNoKG5ldyBISXMuY29tcG91bmQodHlwZVZhbHVlLCBleHByZXNzaW9uLCBwb3AoKSwKICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlLCBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKF9oYXNEaXJlY3RDaGVja0Zvcih0eXBlVmFsdWUpKSB7CiAgICAgIHB1c2gobmV3IEhJcy5kaXJlY3QodHlwZVZhbHVlLCBleHByZXNzaW9uLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFRoZSBpbnRlcmNlcHRvciBpcyBub3QgYWx3YXlzIG5lZWRlZC4gIEl0IGlzIHJlbW92ZWQgYnkgb3B0aW1pemF0aW9uCiAgICAvLyB3aGVuIHRoZSByZWNlaXZlciB0eXBlIG9yIHRlc3RlZCB0eXBlIHBlcm1pdC4KICAgIHB1c2gobmV3IEhJcy5yYXcoCiAgICAgICAgdHlwZVZhbHVlLAogICAgICAgIGV4cHJlc3Npb24sCiAgICAgICAgX2ludGVyY2VwdG9yRm9yKGV4cHJlc3Npb24sIHNvdXJjZUluZm9ybWF0aW9uKSwKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgcmV0dXJuOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBjaGVja2luZyBvZiBbdHlwZV0gaXMgcGVyZm9ybWVkIGRpcmVjdGx5IG9uIHRoZQogIC8vLyBvYmplY3QgYW5kIG5vdCBvbiBhbiBpbnRlcmNlcHRvci4KICBib29sIF9oYXNEaXJlY3RDaGVja0ZvcihEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAoIXR5cGUuaXNJbnRlcmZhY2VUeXBlKSByZXR1cm4gZmFsc2U7CiAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZVR5cGUgPSB0eXBlOwogICAgQ2xhc3NFbnRpdHkgZWxlbWVudCA9IGludGVyZmFjZVR5cGUuZWxlbWVudDsKICAgIHJldHVybiBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5zdHJpbmdDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmJvb2xDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLm51bUNsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuaW50Q2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5kb3VibGVDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmpzTXV0YWJsZUFycmF5Q2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc0V4dGVuZGFibGVBcnJheUNsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuanNGaXhlZEFycmF5Q2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3M7CiAgfQoKICAvLy8gV2hldGhlciBhbiBpcy1jaGVjayBmb3IgW3R5cGVdIGNhbiBiZSBkb25lIGlnbm9yaW5nIHR5cGUtYXJndW1lbnRzLgogIC8vLyBUaGlzIHdpbGwgYmUgdHJ1ZSBpZiBbdHlwZV0gaXMgcmF3LCBvciBhbGwgaXRzIHR5cGUtYXJndW1lbnRzIG1hdGNoIHRoZQogIC8vLyB0eXBlLXBhcmFtZXRlciBib3VuZHMuCiAgYm9vbCBfY2FuSWdub3JlVHlwZUFyZ3VtZW50cyhJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKHR5cGUuZWxlbWVudCk7CiAgICBMaXN0PERhcnRUeXBlPiBib3VuZHMgPSB0aGlzVHlwZS50eXBlQXJndW1lbnRzOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBib3VuZHMubGVuZ3RoOyBpKyspIHsKICAgICAgRGFydFR5cGUgYXJnID0gdHlwZS50eXBlQXJndW1lbnRzW2ldOwogICAgICBpZiAoYXJnLnRyZWF0QXNEeW5hbWljKSBjb250aW51ZTsKICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUgPSBib3VuZHNbaV07CiAgICAgIERhcnRUeXBlIGJvdW5kID0KICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VHlwZVZhcmlhYmxlQm91bmQodHlwZVZhcmlhYmxlLmVsZW1lbnQpOwogICAgICBpZiAoYm91bmQgIT0gYXJnKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUaHJvdyhpci5UaHJvdyBub2RlKSB7CiAgICBfdmlzaXRUaHJvd0V4cHJlc3Npb24obm9kZS5leHByZXNzaW9uKTsKICAgIGlmIChfaXNSZWFjaGFibGUpIHsKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24gPQogICAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZFRocm93KG5vZGUpOwogICAgICBfaGFuZGxlSW5UcnlTdGF0ZW1lbnQoKTsKICAgICAgcHVzaCgKICAgICAgICAgIG5ldyBIVGhyb3dFeHByZXNzaW9uKF9hYnN0cmFjdFZhbHVlRG9tYWluLCBwb3AoKSwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgX2lzUmVhY2hhYmxlID0gZmFsc2U7CiAgICB9CiAgfQoKICB2b2lkIF92aXNpdFRocm93RXhwcmVzc2lvbihpci5FeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgIGJvb2wgb2xkID0gX2luRXhwcmVzc2lvbk9mVGhyb3c7CiAgICB0cnkgewogICAgICBfaW5FeHByZXNzaW9uT2ZUaHJvdyA9IHRydWU7CiAgICAgIGV4cHJlc3Npb24uYWNjZXB0KHRoaXMpOwogICAgfSBmaW5hbGx5IHsKICAgICAgX2luRXhwcmVzc2lvbk9mVGhyb3cgPSBvbGQ7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0WWllbGRTdGF0ZW1lbnQoaXIuWWllbGRTdGF0ZW1lbnQgbm9kZSkgewogICAgbm9kZS5leHByZXNzaW9uLmFjY2VwdCh0aGlzKTsKICAgIGFkZChuZXcgSFlpZWxkKF9hYnN0cmFjdFZhbHVlRG9tYWluLCBwb3AoKSwgbm9kZS5pc1lpZWxkU3RhciwKICAgICAgICBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkWWllbGQobm9kZSkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBd2FpdEV4cHJlc3Npb24oaXIuQXdhaXRFeHByZXNzaW9uIG5vZGUpIHsKICAgIG5vZGUub3BlcmFuZC5hY2NlcHQodGhpcyk7CiAgICBISW5zdHJ1Y3Rpb24gYXdhaXRlZCA9IHBvcCgpOwogICAgLy8gVE9ETyhoZXJodXQpOiBJbXByb3ZlIHRoaXMgdHlwZS4KICAgIHB1c2gobmV3IEhBd2FpdChhd2FpdGVkLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSkKICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRBd2FpdChub2RlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UmV0aHJvdyhpci5SZXRocm93IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBleGNlcHRpb24gPSBfcmV0aHJvd2FibGVFeGNlcHRpb247CiAgICBpZiAoZXhjZXB0aW9uID09IG51bGwpIHsKICAgICAgZXhjZXB0aW9uID0gZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKTsKICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcihfZWxlbWVudE1hcC5nZXRTcGFubmFibGUodGFyZ2V0RWxlbWVudCwgbm9kZSksCiAgICAgICAgICAncmV0aHJvd2FibGVFeGNlcHRpb24gc2hvdWxkIG5vdCBiZSBudWxsLicpOwogICAgfQogICAgX2hhbmRsZUluVHJ5U3RhdGVtZW50KCk7CiAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAgICAgX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlci5idWlsZFRocm93KG5vZGUpOwogICAgX2Nsb3NlQW5kR290b0V4aXQobmV3IEhUaHJvdygKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgZXhjZXB0aW9uLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICBpc1JldGhyb3c6IHRydWUpKTsKICAgIC8vIGlyLlJldGhyb3cgaXMgYW4gZXhwcmVzc2lvbiBzbyB3ZSBuZWVkIHRvIHB1c2ggYSB2YWx1ZSAtIGEgY29uc3RhbnQgd2l0aAogICAgLy8gbm8gdHlwZS4KICAgIHN0YWNrLmFkZChncmFwaC5hZGRDb25zdGFudFVucmVhY2hhYmxlKGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VGhpc0V4cHJlc3Npb24oaXIuVGhpc0V4cHJlc3Npb24gbm9kZSkgewogICAgc3RhY2suYWRkKGxvY2Fsc0hhbmRsZXIucmVhZFRoaXMoCiAgICAgICAgc291cmNlSW5mb3JtYXRpb246IF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRHZXQobm9kZSkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROb3QoaXIuTm90IG5vZGUpIHsKICAgIG5vZGUub3BlcmFuZC5hY2NlcHQodGhpcyk7CiAgICBwdXNoKG5ldyBITm90KHBvcEJvb2xpZmllZCgpLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSkKICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IF9zb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRVbmFyeShub2RlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihpci5TdHJpbmdDb25jYXRlbmF0aW9uIHN0cmluZ0NvbmNhdCkgewogICAgS2VybmVsU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyID0gbmV3IEtlcm5lbFN0cmluZ0J1aWxkZXIodGhpcyk7CiAgICBzdHJpbmdDb25jYXQuYWNjZXB0KHN0cmluZ0J1aWxkZXIpOwogICAgc3RhY2suYWRkKHN0cmluZ0J1aWxkZXIucmVzdWx0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUcnlDYXRjaChpci5UcnlDYXRjaCBub2RlKSB7CiAgICBUcnlDYXRjaEZpbmFsbHlCdWlsZGVyIHRyeUJ1aWxkZXIgPSBuZXcgVHJ5Q2F0Y2hGaW5hbGx5QnVpbGRlcigKICAgICAgICB0aGlzLCBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkVHJ5KG5vZGUpKTsKICAgIG5vZGUuYm9keS5hY2NlcHQodGhpcyk7CiAgICB0cnlCdWlsZGVyCiAgICAgIC4uY2xvc2VUcnlCb2R5KCkKICAgICAgLi5idWlsZENhdGNoKG5vZGUpCiAgICAgIC4uY2xlYW5VcCgpOwogIH0KCiAgLy8vIGB0cnkgeyAuLi4gfSBjYXRjaCB7IC4uLiB9IGZpbmFsbHkgeyAuLi4gfWAgc3RhdGVtZW50cyBhcmUgYSBsaXR0bGUgZnVubnkKICAvLy8gYmVjYXVzZSBhIHRyeSBjYW4gaGF2ZSBvbmUgb3IgYm90aCBvZiB7Y2F0Y2h8ZmluYWxseX0uIFRoZSB3YXkgdGhpcyBpcwogIC8vLyBlbmNvZGVkIGluIGtlcm5lbCBBU1QgYXJlIHR3byBzZXBhcmF0ZSBjbGFzc2VzIHdpdGggbm8gY29tbW9uIHN1cGVyY2xhc3MKICAvLy8gYXNpZGUgZnJvbSBTdGF0ZW1lbnQuIElmIGEgc3RhdGVtZW50IGhhcyBib3RoIGBjYXRjaGAgYW5kIGBmaW5hbGx5YAogIC8vLyBjbGF1c2VzIHRoZW4gaXQgaXMgZW5jb2RlZCBpbiBrZXJuZWwgYXMgc28gdGhhdCB0aGUgVHJ5Q2F0Y2ggaXMgdGhlIGJvZHkKICAvLy8gc3RhdGVtZW50IG9mIHRoZSBUcnlGaW5hbGx5LiBUbyBwcm9kdWNlIG1vcmUgZWZmaWNpZW50IGNvZGUgcmF0aGVyIHRoYW4KICAvLy8gbmVzdGVkIHRyeSBzdGF0ZW1lbnRzLCB0aGUgdmlzaXRvcnMgYXZvaWQgb25lIHBvdGVudGlhbCBsZXZlbCBvZgogIC8vLyByZWN1cnNpb24uCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRyeUZpbmFsbHkoaXIuVHJ5RmluYWxseSBub2RlKSB7CiAgICBUcnlDYXRjaEZpbmFsbHlCdWlsZGVyIHRyeUJ1aWxkZXIgPSBuZXcgVHJ5Q2F0Y2hGaW5hbGx5QnVpbGRlcigKICAgICAgICB0aGlzLCBfc291cmNlSW5mb3JtYXRpb25CdWlsZGVyLmJ1aWxkVHJ5KG5vZGUpKTsKCiAgICAvLyBXZSBkbyB0aGVzZSBzaGVuYW5pZ2FucyB0byBwcm9kdWNlIGJldHRlciBsb29raW5nIGNvZGUgdGhhdCBkb2Vzbid0CiAgICAvLyBoYXZlIG5lc3RlZCB0cnkgc3RhdGVtZW50cy4KICAgIGlmIChub2RlLmJvZHkgaXMgaXIuVHJ5Q2F0Y2gpIHsKICAgICAgaXIuVHJ5Q2F0Y2ggdHJ5Q2F0Y2ggPSBub2RlLmJvZHk7CiAgICAgIHRyeUNhdGNoLmJvZHkuYWNjZXB0KHRoaXMpOwogICAgICB0cnlCdWlsZGVyCiAgICAgICAgLi5jbG9zZVRyeUJvZHkoKQogICAgICAgIC4uYnVpbGRDYXRjaCh0cnlDYXRjaCk7CiAgICB9IGVsc2UgewogICAgICBub2RlLmJvZHkuYWNjZXB0KHRoaXMpOwogICAgICB0cnlCdWlsZGVyLmNsb3NlVHJ5Qm9keSgpOwogICAgfQoKICAgIHRyeUJ1aWxkZXIKICAgICAgLi5idWlsZEZpbmFsbHlCbG9jaygoKSB7CiAgICAgICAgbm9kZS5maW5hbGl6ZXIuYWNjZXB0KHRoaXMpOwogICAgICB9KQogICAgICAuLmNsZWFuVXAoKTsKICB9CgogIC8vLyBUcnkgdG8gaW5saW5lIFtlbGVtZW50XSB3aXRoaW4gdGhlIGNvcnJlY3QgY29udGV4dCBvZiB0aGUgYnVpbGRlci4gVGhlCiAgLy8vIGluc2VydGlvbiBwb2ludCBpcyB0aGUgc3RhdGUgb2YgdGhlIGJ1aWxkZXIuCiAgYm9vbCBfdHJ5SW5saW5lTWV0aG9kKAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IHByb3ZpZGVkQXJndW1lbnRzLAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBpci5Ob2RlIGN1cnJlbnROb2RlLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge0ludGVyZmFjZVR5cGUgaW5zdGFuY2VUeXBlfSkgewogICAgaWYgKGZ1bmN0aW9uLmlzRXh0ZXJuYWwpIHsKICAgICAgLy8gRG9uJ3QgaW5saW5lIGV4dGVybmFsIG1ldGhvZHM7IHRoZXNlIHNob3VsZCBqdXN0IGZhaWwgYXQgcnVudGltZS4KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGlmIChfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcE1lbWJlcihmdW5jdGlvbikgJiYKICAgICAgICAhKGZ1bmN0aW9uIGlzIENvbnN0cnVjdG9yRW50aXR5ICYmIGZ1bmN0aW9uLmlzRmFjdG9yeUNvbnN0cnVjdG9yKSkgewogICAgICAvLyBXZSBvbmx5IGlubGluZSBmYWN0b3J5IEphdmFTY3JpcHQgaW50ZXJvcCBjb25zdHJ1Y3RvcnMuCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBib29sIGluc2lkZUxvb3AgPSBsb29wRGVwdGggPiAwIHx8IGdyYXBoLmNhbGxlZEluTG9vcDsKCiAgICAvLyBCYWlsIG91dCBlYXJseSBpZiB0aGUgaW5saW5pbmcgZGVjaXNpb24gaXMgaW4gdGhlIGNhY2hlIGFuZCB3ZSBjYW4ndAogICAgLy8gaW5saW5lIChubyBuZWVkIHRvIGNoZWNrIHRoZSBoYXJkIGNvbnN0cmFpbnRzKS4KICAgIGlmIChfaW5saW5lQ2FjaGUubWFya2VkQXNOb0lubGluZShmdW5jdGlvbikpIHJldHVybiBmYWxzZTsKICAgIGJvb2wgY2FjaGVkQ2FuQmVJbmxpbmVkID0KICAgICAgICBfaW5saW5lQ2FjaGUuY2FuSW5saW5lKGZ1bmN0aW9uLCBpbnNpZGVMb29wOiBpbnNpZGVMb29wKTsKICAgIGlmIChjYWNoZWRDYW5CZUlubGluZWQgPT0gZmFsc2UpIHJldHVybiBmYWxzZTsKCiAgICBib29sIG1lZXRzSGFyZENvbnN0cmFpbnRzKCkgewogICAgICBpZiAob3B0aW9ucy5kaXNhYmxlSW5saW5pbmcpIHJldHVybiBmYWxzZTsKCiAgICAgIGFzc2VydCgKICAgICAgICAgIHNlbGVjdG9yICE9IG51bGwgfHwKICAgICAgICAgICAgICBmdW5jdGlvbi5pc1N0YXRpYyB8fAogICAgICAgICAgICAgIGZ1bmN0aW9uLmlzVG9wTGV2ZWwgfHwKICAgICAgICAgICAgICBmdW5jdGlvbi5pc0NvbnN0cnVjdG9yIHx8CiAgICAgICAgICAgICAgZnVuY3Rpb24gaXMgQ29uc3RydWN0b3JCb2R5RW50aXR5LAogICAgICAgICAgZmFpbGVkQXQoZnVuY3Rpb24sICJNaXNzaW5nIHNlbGVjdG9yIGZvciBpbmxpbmluZyBvZiAkZnVuY3Rpb24uIikpOwogICAgICBpZiAoc2VsZWN0b3IgIT0gbnVsbCkgewogICAgICAgIGlmICghc2VsZWN0b3IuYXBwbGllcyhmdW5jdGlvbikpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAobWFzayAhPSBudWxsICYmCiAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgICAgICAuaXNUYXJnZXRpbmdNZW1iZXIobWFzaywgZnVuY3Rpb24sIHNlbGVjdG9yLm1lbWJlck5hbWUpCiAgICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGlmIChfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcE1lbWJlcihmdW5jdGlvbikpIHJldHVybiBmYWxzZTsKCiAgICAgIC8vIERvbid0IGlubGluZSBvcGVyYXRvcj09IG1ldGhvZHMgaWYgdGhlIHBhcmFtZXRlciBjYW4gYmUgbnVsbC4KICAgICAgaWYgKGZ1bmN0aW9uLm5hbWUgPT0gJz09JykgewogICAgICAgIGlmIChmdW5jdGlvbi5lbmNsb3NpbmdDbGFzcyAhPSBfY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MgJiYKICAgICAgICAgICAgcHJvdmlkZWRBcmd1bWVudHNbMV0KICAgICAgICAgICAgICAgIC5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgICAuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIEdlbmVyYXRpdmUgY29uc3RydWN0b3JzIG9mIG5hdGl2ZSBjbGFzc2VzIHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5CiAgICAgIC8vIGFuZCBoYXZlIGFuIGV4dHJhIGFyZ3VtZW50IHRoYXQgY2F1c2VzIHByb2JsZW1zIHdpdGggaW5saW5pbmcuCiAgICAgIGlmIChmdW5jdGlvbiBpcyBDb25zdHJ1Y3RvckVudGl0eSAmJgogICAgICAgICAgZnVuY3Rpb24uaXNHZW5lcmF0aXZlQ29uc3RydWN0b3IgJiYKICAgICAgICAgIF9uYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGZ1bmN0aW9uLmVuY2xvc2luZ0NsYXNzKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgLy8gQSBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yIGJvZHkgaXMgbm90IHNlZW4gYnkgZ2xvYmFsIGFuYWx5c2lzLAogICAgICAvLyBzbyB3ZSBzaG91bGQgbm90IHF1ZXJ5IGZvciBpdHMgdHlwZS4KICAgICAgaWYgKGZ1bmN0aW9uIGlzISBDb25zdHJ1Y3RvckJvZHlFbnRpdHkpIHsKICAgICAgICBpZiAoZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cy5yZXN1bHRPZk1lbWJlcihmdW5jdGlvbikudGhyb3dzQWx3YXlzKSB7CiAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJdCBzZWVtcyB3cm9uZyB0byBzZXQgYGlzUmVhY2hhYmxlYCB0byBgZmFsc2VgCiAgICAgICAgICAvLyBzaW5jZSB3ZSBhcmUgX25vdF8gZ29pbmcgdG8gaW5saW5lIFtmdW5jdGlvbl0uIFRoaXMgaGFzCiAgICAgICAgICAvLyBpbXBsaWNhdGlvbnMgaW4gc3dpdGNoIGNhc2VzIHdoZXJlIHdlIG1pZ2h0IG5lZWQgdG8gaW5zZXJ0IGEKICAgICAgICAgIC8vIGBicmVha2AgdGhhdCB3YXMgc2tpcHBlZCBkdWUgdG8gYGlzUmVhY2hhYmxlYCBiZWluZyBgZmFsc2VgLgogICAgICAgICAgX2lzUmVhY2hhYmxlID0gZmFsc2U7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBib29sIGRvZXNOb3RDb250YWluQ29kZShJbmxpbmVEYXRhIGlubGluZURhdGEpIHsKICAgICAgLy8gQSBmdW5jdGlvbiB3aXRoIHNpemUgMSBkb2VzIG5vdCBjb250YWluIGFueSBjb2RlLgogICAgICByZXR1cm4gaW5saW5lRGF0YS5jYW5CZUlubGluZWQobWF4SW5saW5pbmdOb2RlczogMSk7CiAgICB9CgogICAgYm9vbCByZWR1Y3RpdmVIZXVyaXN0aWMoSW5saW5lRGF0YSBpbmxpbmVEYXRhKSB7CiAgICAgIC8vIFRoZSBjYWxsIGlzIG9uIGEgcGF0aCB3aGljaCBpcyBleGVjdXRlZCByYXJlbHksIHNvIGlubGluZSBvbmx5IGlmIGl0CiAgICAgIC8vIGRvZXMgbm90IG1ha2UgdGhlIHByb2dyYW0gbGFyZ2VyLgogICAgICBpZiAoX2lzQ2FsbGVkT25jZShmdW5jdGlvbikpIHsKICAgICAgICByZXR1cm4gaW5saW5lRGF0YS5jYW5CZUlubGluZWQoKTsKICAgICAgfQogICAgICBpZiAoaW5saW5lRGF0YS5jYW5CZUlubGluZWRSZWR1Y3RpdmUoCiAgICAgICAgICBhcmd1bWVudENvdW50OiBwcm92aWRlZEFyZ3VtZW50cy5sZW5ndGgpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgcmV0dXJuIGRvZXNOb3RDb250YWluQ29kZShpbmxpbmVEYXRhKTsKICAgIH0KCiAgICBib29sIGhldXJpc3RpY1NheUdvb2RUb0dvKCkgewogICAgICAvLyBEb24ndCBpbmxpbmUgcmVjdXJzaXZlbHksCiAgICAgIGlmIChfaW5saW5pbmdTdGFjay5hbnkoKGVudHJ5KSA9PiBlbnRyeS5mdW5jdGlvbiA9PSBmdW5jdGlvbikpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAgIC8vIERvbid0IGlubGluZSBhY3Jvc3MgZGVmZXJyZWQgaW1wb3J0IHRvIHByZXZlbnQgbGVha2luZyBjb2RlLiBUaGUgb25seQogICAgICAvLyBleGNlcHRpb24gaXMgYW4gZW1wdHkgZnVuY3Rpb24gKHdoaWNoIGRvZXMgbm90IGNvbnRhaW4gY29kZSkuCiAgICAgIGJvb2wgaGFzT25seU5vbkRlZmVycmVkSW1wb3J0UGF0aHMgPSBjbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YQogICAgICAgICAgLmhhc09ubHlOb25EZWZlcnJlZEltcG9ydFBhdGhzKF9pbml0aWFsVGFyZ2V0RWxlbWVudCwgZnVuY3Rpb24pOwoKICAgICAgSW5saW5lRGF0YSBpbmxpbmVEYXRhID0KICAgICAgICAgIF9pbmxpbmVEYXRhQ2FjaGUuZ2V0SW5saW5lRGF0YShfZWxlbWVudE1hcCwgZnVuY3Rpb24pOwoKICAgICAgaWYgKCFoYXNPbmx5Tm9uRGVmZXJyZWRJbXBvcnRQYXRocykgewogICAgICAgIHJldHVybiBkb2VzTm90Q29udGFpbkNvZGUoaW5saW5lRGF0YSk7CiAgICAgIH0KCiAgICAgIC8vIERvIG5vdCBpbmxpbmUgY29kZSB0aGF0IGlzIHJhcmVseSBleGVjdXRlZCB1bmxlc3MgaXQgcmVkdWNlcyBzaXplLgogICAgICBpZiAoX2luRXhwcmVzc2lvbk9mVGhyb3cgfHwgX2luTGF6eUluaXRpYWxpemVyRXhwcmVzc2lvbikgewogICAgICAgIHJldHVybiByZWR1Y3RpdmVIZXVyaXN0aWMoaW5saW5lRGF0YSk7CiAgICAgIH0KCiAgICAgIGlmIChjYWNoZWRDYW5CZUlubGluZWQgPT0gdHJ1ZSkgewogICAgICAgIC8vIFdlIG1heSBoYXZlIGZvcmNlZCB0aGUgaW5saW5pbmcgb2Ygc29tZSBtZXRob2RzLiBUaGVyZWZvcmUgY2hlY2sKICAgICAgICAvLyBpZiB3ZSBjYW4gaW5saW5lIHRoaXMgbWV0aG9kIHJlZ2FyZGxlc3Mgb2Ygc2l6ZS4KICAgICAgICBTdHJpbmcgcmVhc29uOwogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgKHJlYXNvbiA9IGlubGluZURhdGEuY2Fubm90QmVJbmxpbmVkUmVhc29uKGFsbG93TG9vcHM6IHRydWUpKSA9PQogICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgZmFpbGVkQXQoZnVuY3Rpb24sICJDYW5ub3QgaW5saW5lICRmdW5jdGlvbjogJHJlYXNvbiIpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgICAgaW50IG51bVBhcmFtZXRlcnMgPSBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUudG90YWxQYXJhbWV0ZXJzOwogICAgICBpbnQgbWF4SW5saW5pbmdOb2RlczsKICAgICAgaWYgKGluc2lkZUxvb3ApIHsKICAgICAgICBtYXhJbmxpbmluZ05vZGVzID0gSW5saW5lV2VlZGVyLklOTElOSU5HX05PREVTX0lOU0lERV9MT09QICsKICAgICAgICAgICAgSW5saW5lV2VlZGVyLklOTElOSU5HX05PREVTX0lOU0lERV9MT09QX0FSR19GQUNUT1IgKiBudW1QYXJhbWV0ZXJzOwogICAgICB9IGVsc2UgewogICAgICAgIG1heElubGluaW5nTm9kZXMgPSBJbmxpbmVXZWVkZXIuSU5MSU5JTkdfTk9ERVNfT1VUU0lERV9MT09QICsKICAgICAgICAgICAgSW5saW5lV2VlZGVyLklOTElOSU5HX05PREVTX09VVFNJREVfTE9PUF9BUkdfRkFDVE9SICogbnVtUGFyYW1ldGVyczsKICAgICAgfQoKICAgICAgYm9vbCBtYXJrZWRUcnlJbmxpbmUgPSBfaW5saW5lQ2FjaGUubWFya2VkQXNUcnlJbmxpbmUoZnVuY3Rpb24pOwogICAgICBib29sIGNhbGxlZE9uY2UgPSBfaXNDYWxsZWRPbmNlKGZ1bmN0aW9uKTsKICAgICAgLy8gSWYgYSBtZXRob2QgaXMgY2FsbGVkIG9ubHkgb25jZSwgYW5kIGFsbCB0aGUgbWV0aG9kcyBpbiB0aGUgaW5saW5pbmcKICAgICAgLy8gc3RhY2sgYXJlIGNhbGxlZCBvbmx5IG9uY2UgYXMgd2VsbCwgd2Uga25vdyB3ZSB3aWxsIHNhdmUgb24gb3V0cHV0IHNpemUKICAgICAgLy8gYnkgaW5saW5pbmcgdGhpcyBtZXRob2QuCiAgICAgIGlmIChtYXJrZWRUcnlJbmxpbmUgfHwgY2FsbGVkT25jZSkgewogICAgICAgIG1heElubGluaW5nTm9kZXMgPSBudWxsOwogICAgICB9CiAgICAgIGJvb2wgYWxsb3dMb29wcyA9IGZhbHNlOwogICAgICBpZiAobWFya2VkVHJ5SW5saW5lKSB7CiAgICAgICAgYWxsb3dMb29wcyA9IHRydWU7CiAgICAgIH0KCiAgICAgIGJvb2wgY2FuSW5saW5lID0gaW5saW5lRGF0YS5jYW5CZUlubGluZWQoCiAgICAgICAgICBtYXhJbmxpbmluZ05vZGVzOiBtYXhJbmxpbmluZ05vZGVzLCBhbGxvd0xvb3BzOiBhbGxvd0xvb3BzKTsKICAgICAgaWYgKG1hcmtlZFRyeUlubGluZSkgewogICAgICAgIGlmIChjYW5JbmxpbmUpIHsKICAgICAgICAgIF9pbmxpbmVDYWNoZS5tYXJrQXNJbmxpbmFibGUoZnVuY3Rpb24sIGluc2lkZUxvb3A6IHRydWUpOwogICAgICAgICAgX2lubGluZUNhY2hlLm1hcmtBc0lubGluYWJsZShmdW5jdGlvbiwgaW5zaWRlTG9vcDogZmFsc2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfaW5saW5lQ2FjaGUubWFya0FzTm9uSW5saW5hYmxlKGZ1bmN0aW9uLCBpbnNpZGVMb29wOiB0cnVlKTsKICAgICAgICAgIF9pbmxpbmVDYWNoZS5tYXJrQXNOb25JbmxpbmFibGUoZnVuY3Rpb24sIGluc2lkZUxvb3A6IGZhbHNlKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY2FsbGVkT25jZSkgewogICAgICAgIC8vIFRPRE8oMzQyMDMpOiBXZSBjYW4ndCB1cGRhdGUgdGhlIGRlY2lzaW9uIGR1ZSB0byBpbXByZWNpc2lvbiBpbiB0aGUKICAgICAgICAvLyBjYWxsZWRPbmNlIGRhdGEsIGRlc2NyaWJlZCBpbiBJc3N1ZSAzNDIwMy4KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoY2FuSW5saW5lKSB7CiAgICAgICAgICBfaW5saW5lQ2FjaGUubWFya0FzSW5saW5hYmxlKGZ1bmN0aW9uLCBpbnNpZGVMb29wOiBpbnNpZGVMb29wKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKF9pc0Z1bmN0aW9uQ2FsbGVkT25jZShmdW5jdGlvbikpIHsKICAgICAgICAgICAgLy8gVE9ETygzNDIwMyk6IFdlIGNhbid0IHVwZGF0ZSB0aGUgZGVjaXNpb24gZHVlIHRvIGltcHJlY2lzaW9uIGluCiAgICAgICAgICAgIC8vIHRoZSBjYWxsZWRPbmNlIGRhdGEsIGRlc2NyaWJlZCBpbiBJc3N1ZSAzNDIwMy4KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9pbmxpbmVDYWNoZS5tYXJrQXNOb25JbmxpbmFibGUoZnVuY3Rpb24sIGluc2lkZUxvb3A6IGluc2lkZUxvb3ApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gY2FuSW5saW5lOwogICAgfQoKICAgIHZvaWQgZG9JbmxpbmluZygpIHsKICAgICAgaWYgKGZ1bmN0aW9uLmlzQ29uc3RydWN0b3IpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICAgICAgbmV3IFN0YXRpY1VzZS5jb25zdHJ1Y3RvcklubGluaW5nKGZ1bmN0aW9uLCBpbnN0YW5jZVR5cGUpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoaW5zdGFuY2VUeXBlID09IG51bGwsCiAgICAgICAgICAgICJVbmV4cGVjdGVkIGluc3RhbmNlIHR5cGUgZm9yICRmdW5jdGlvbjogJGluc3RhbmNlVHlwZSIpOwogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgICAgICBuZXcgU3RhdGljVXNlLm1ldGhvZElubGluaW5nKGZ1bmN0aW9uLCB0eXBlQXJndW1lbnRzKSk7CiAgICAgIH0KCiAgICAgIC8vIEFkZCBhbiBleHBsaWNpdCBudWxsIGNoZWNrIG9uIHRoZSByZWNlaXZlciBiZWZvcmUgZG9pbmcgdGhlCiAgICAgIC8vIGlubGluaW5nLiBXZSB1c2UgW2VsZW1lbnRdIHRvIGdldCB0aGUgc2FtZSBuYW1lIGluIHRoZQogICAgICAvLyBOb1N1Y2hNZXRob2RFcnJvciBtZXNzYWdlIGFzIGlmIHdlIGhhZCBjYWxsZWQgaXQuCiAgICAgIGlmIChmdW5jdGlvbi5pc0luc3RhbmNlTWVtYmVyICYmCiAgICAgICAgICBmdW5jdGlvbiBpcyEgQ29uc3RydWN0b3JCb2R5RW50aXR5ICYmCiAgICAgICAgICAobWFzayA9PSBudWxsIHx8CiAgICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKG1hc2spLmlzUG90ZW50aWFsbHlUcnVlKSkgewogICAgICAgIGFkZChuZXcgSEZpZWxkR2V0KG51bGwsIHByb3ZpZGVkQXJndW1lbnRzWzBdLAogICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgICAgIGlzQXNzaWduYWJsZTogZmFsc2UpKTsKICAgICAgfQogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gY29tcGlsZWRBcmd1bWVudHMgPSBfY29tcGxldGVDYWxsQXJndW1lbnRzTGlzdCgKICAgICAgICAgIGZ1bmN0aW9uLCBzZWxlY3RvciwgcHJvdmlkZWRBcmd1bWVudHMsIGN1cnJlbnROb2RlKTsKICAgICAgX2VudGVySW5saW5lZE1ldGhvZChmdW5jdGlvbiwgY29tcGlsZWRBcmd1bWVudHMsIGluc3RhbmNlVHlwZSk7CiAgICAgIF9pbmxpbmVkRnJvbShmdW5jdGlvbiwgc291cmNlSW5mb3JtYXRpb24sICgpIHsKICAgICAgICBpZiAoIV9pc1JlYWNoYWJsZSkgewogICAgICAgICAgX2VtaXRSZXR1cm4oZ3JhcGguYWRkQ29uc3RhbnROdWxsKGNsb3NlZFdvcmxkKSwgc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfZG9JbmxpbmUoZnVuY3Rpb24pOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIF9sZWF2ZUlubGluZWRNZXRob2QoKTsKICAgIH0KCiAgICBpZiAobWVldHNIYXJkQ29uc3RyYWludHMoKSAmJiBoZXVyaXN0aWNTYXlHb29kVG9HbygpKSB7CiAgICAgIGRvSW5saW5pbmcoKTsKICAgICAgX2luZm9SZXBvcnRlcj8ucmVwb3J0SW5saW5lZCgKICAgICAgICAgIGZ1bmN0aW9uLAogICAgICAgICAgX2lubGluaW5nU3RhY2suaXNFbXB0eQogICAgICAgICAgICAgID8gdGFyZ2V0RWxlbWVudAogICAgICAgICAgICAgIDogX2lubGluaW5nU3RhY2subGFzdC5mdW5jdGlvbik7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBSZXR1cm5zIGEgY29tcGxldGUgYXJndW1lbnQgbGlzdCBmb3IgYSBjYWxsIG9mIFtmdW5jdGlvbl0uCiAgTGlzdDxISW5zdHJ1Y3Rpb24+IF9jb21wbGV0ZUNhbGxBcmd1bWVudHNMaXN0KAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBwcm92aWRlZEFyZ3VtZW50cywKICAgICAgaXIuTm9kZSBjdXJyZW50Tm9kZSkgewogICAgYXNzZXJ0KHByb3ZpZGVkQXJndW1lbnRzICE9IG51bGwpOwoKICAgIGJvb2wgaXNJbnN0YW5jZU1lbWJlciA9IGZ1bmN0aW9uLmlzSW5zdGFuY2VNZW1iZXI7CiAgICAvLyBGb3Igc3RhdGljIGNhbGxzLCBbcHJvdmlkZWRBcmd1bWVudHNdIGlzIGNvbXBsZXRlLCBkZWZhdWx0IGFyZ3VtZW50cwogICAgLy8gaGF2ZSBiZWVuIGluY2x1ZGVkIGlmIG5lY2Vzc2FyeSwgc2VlIFttYWtlU3RhdGljQXJndW1lbnRMaXN0XS4KICAgIGlmICghaXNJbnN0YW5jZU1lbWJlciB8fAogICAgICAgIGN1cnJlbnROb2RlID09IG51bGwgfHwgLy8gSW4gZXJyb25lb3VzIGNvZGUsIGN1cnJlbnROb2RlIGNhbiBiZSBudWxsLgogICAgICAgIF9wcm92aWRlZEFyZ3VtZW50c0tub3duVG9CZUNvbXBsZXRlKGN1cnJlbnROb2RlKSB8fAogICAgICAgIGZ1bmN0aW9uIGlzIENvbnN0cnVjdG9yQm9keUVudGl0eSB8fAogICAgICAgIHNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgIC8vIEZvciB0aGVzZSBjYXNlcywgdGhlIHByb3ZpZGVkIGFyZ3VtZW50IGxpc3QgaXMga25vd24gdG8gYmUgY29tcGxldGUuCiAgICAgIHJldHVybiBwcm92aWRlZEFyZ3VtZW50czsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfY29tcGxldGVEeW5hbWljQ2FsbEFyZ3VtZW50c0xpc3QoCiAgICAgICAgICBzZWxlY3RvciwgZnVuY3Rpb24sIHByb3ZpZGVkQXJndW1lbnRzKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIGEgY29tcGxldGUgYXJndW1lbnQgbGlzdCBmb3IgYSBkeW5hbWljIGNhbGwgb2YgW2Z1bmN0aW9uXS4gVGhlCiAgLy8vIGluaXRpYWwgYXJndW1lbnQgbGlzdCBbcHJvdmlkZWRBcmd1bWVudHNdLCBjcmVhdGVkIGJ5CiAgLy8vIFthZGREeW5hbWljU2VuZEFyZ3VtZW50c1RvTGlzdF0sIGRvZXMgbm90IGluY2x1ZGUgdmFsdWVzIGZvciBkZWZhdWx0CiAgLy8vIGFyZ3VtZW50cyB1c2VkIGluIHRoZSBjYWxsLiBUaGUgcmVhc29uIGlzIHRoYXQgdGhlIHRhcmdldCBmdW5jdGlvbiAod2hpY2gKICAvLy8gZGVmaW5lcyB0aGUgZGVmYXVsdHMpIGlzIG5vdCBrbm93bi4KICAvLy8KICAvLy8gSG93ZXZlciwgaW5saW5pbmcgY2FuIG9ubHkgYmUgcGVyZm9ybWVkIHdoZW4gdGhlIHRhcmdldCBmdW5jdGlvbiBjYW4gYmUKICAvLy8gcmVzb2x2ZWQgc3RhdGljYWxseS4gVGhlIGRlZmF1bHRzIGNhbiB0aGVyZWZvcmUgYmUgaW5jbHVkZWQgYXQgdGhpcyBwb2ludC4KICAvLy8KICAvLy8gVGhlIFtwcm92aWRlZEFyZ3VtZW50c10gbGlzdCBjb250YWlucyBmaXJzdCBhbGwgcG9zaXRpb25hbCBhcmd1bWVudHMsIHRoZW4KICAvLy8gdGhlIHByb3ZpZGVkIG5hbWVkIGFyZ3VtZW50cyAodGhlIG5hbWVkIGFyZ3VtZW50cyB0aGF0IGFyZSBkZWZpbmVkIGluIHRoZQogIC8vLyBbc2VsZWN0b3JdKSBpbiBhIHNwZWNpZmljIG9yZGVyIChzZWUgW2FkZER5bmFtaWNTZW5kQXJndW1lbnRzVG9MaXN0XSkuCiAgTGlzdDxISW5zdHJ1Y3Rpb24+IF9jb21wbGV0ZUR5bmFtaWNDYWxsQXJndW1lbnRzTGlzdChTZWxlY3RvciBzZWxlY3RvciwKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sIExpc3Q8SEluc3RydWN0aW9uPiBwcm92aWRlZEFyZ3VtZW50cykgewogICAgYXNzZXJ0KHNlbGVjdG9yLmFwcGxpZXMoZnVuY3Rpb24pKTsKICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmU7CiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0gZnVuY3Rpb24ucGFyYW1ldGVyU3RydWN0dXJlOwogICAgTGlzdDxTdHJpbmc+IHNlbGVjdG9yQXJndW1lbnROYW1lcyA9CiAgICAgICAgc2VsZWN0b3IuY2FsbFN0cnVjdHVyZS5nZXRPcmRlcmVkTmFtZWRBcmd1bWVudHMoKTsKICAgIExpc3Q8SEluc3RydWN0aW9uPiBjb21waWxlZEFyZ3VtZW50cyA9IG5ldyBMaXN0PEhJbnN0cnVjdGlvbj4oCiAgICAgICAgcGFyYW1ldGVyU3RydWN0dXJlLnRvdGFsUGFyYW1ldGVycyArCiAgICAgICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZS50eXBlUGFyYW1ldGVycyArCiAgICAgICAgICAgIDEpOyAvLyBQbHVzIG9uZSBmb3IgcmVjZWl2ZXIuCgogICAgaW50IGNvbXBpbGVkQXJndW1lbnRJbmRleCA9IDA7CgogICAgLy8gQ29weSByZWNlaXZlci4KICAgIGNvbXBpbGVkQXJndW1lbnRzW2NvbXBpbGVkQXJndW1lbnRJbmRleCsrXSA9IHByb3ZpZGVkQXJndW1lbnRzWzBdOwoKICAgIC8vLyBPZmZzZXQgb2YgcG9zaXRpb25hbCBhcmd1bWVudHMgaW4gW3Byb3ZpZGVkQXJndW1lbnRzXS4KICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRPZmZzZXQgPSAxOwoKICAgIC8vLyBPZmZzZXQgb2YgbmFtZWQgYXJndW1lbnRzIGluIFtwcm92aWRlZEFyZ3VtZW50c10uCiAgICBpbnQgbmFtZWRBcmd1bWVudE9mZnNldCA9IGNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50Q291bnQgKyAxOwoKICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRJbmRleCA9IDA7CiAgICBpbnQgbmFtZWRBcmd1bWVudEluZGV4ID0gMDsKCiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hQYXJhbWV0ZXIoZnVuY3Rpb24sCiAgICAgICAgKERhcnRUeXBlIHR5cGUsIFN0cmluZyBuYW1lLCBDb25zdGFudFZhbHVlIGRlZmF1bHRWYWx1ZSkgewogICAgICBpZiAocG9zaXRpb25hbEFyZ3VtZW50SW5kZXggPCBwYXJhbWV0ZXJTdHJ1Y3R1cmUucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgICBpZiAocG9zaXRpb25hbEFyZ3VtZW50SW5kZXggPCBjYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudENvdW50KSB7CiAgICAgICAgICBjb21waWxlZEFyZ3VtZW50c1tjb21waWxlZEFyZ3VtZW50SW5kZXgrK10gPSBwcm92aWRlZEFyZ3VtZW50c1sKICAgICAgICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRPZmZzZXQgKyBwb3NpdGlvbmFsQXJndW1lbnRJbmRleCsrXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXNzZXJ0KGRlZmF1bHRWYWx1ZSAhPSBudWxsLAogICAgICAgICAgICAgIGZhaWxlZEF0KGZ1bmN0aW9uLCAnTm8gY29uc3RhbnQgY29tcHV0ZWQgZm9yIHBhcmFtZXRlciAkbmFtZScpKTsKICAgICAgICAgIGNvbXBpbGVkQXJndW1lbnRzW2NvbXBpbGVkQXJndW1lbnRJbmRleCsrXSA9CiAgICAgICAgICAgICAgZ3JhcGguYWRkQ29uc3RhbnQoZGVmYXVsdFZhbHVlLCBjbG9zZWRXb3JsZCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIEV4YW1wbGU6CiAgICAgICAgLy8gICAgIHZvaWQgZm9vKGEsIHtiLCBkLCBjfSkKICAgICAgICAvLyAgICAgZm9vKDAsIGQgPSAxLCBiID0gMikKICAgICAgICAvLwogICAgICAgIC8vIHByb3ZpZGVkQXJndW1lbnRzID0gWzAsIDIsIDFdCiAgICAgICAgLy8gc2VsZWN0b3JBcmd1bWVudE5hbWVzID0gW2IsIGRdCiAgICAgICAgLy8gcGFyYW1ldGVyU3RydWN0dXJlLm5hbWVkUGFyYW1ldGVycyA9IFtiLCBjLCBkXQogICAgICAgIC8vCiAgICAgICAgLy8gRm9yIGVhY2ggcGFyYW1ldGVyIG5hbWUgaW4gdGhlIHNpZ25hdHVyZSwgaWYgdGhlIGFyZ3VtZW50IG5hbWUKICAgICAgICAvLyBtYXRjaGVzIHdlIHVzZSB0aGUgbmV4dCBwcm92aWRlZCBhcmd1bWVudCwgb3RoZXJ3aXNlIHdlIGdldCB0aGUKICAgICAgICAvLyBkZWZhdWx0LgogICAgICAgIGlmIChuYW1lZEFyZ3VtZW50SW5kZXggPCBzZWxlY3RvckFyZ3VtZW50TmFtZXMubGVuZ3RoICYmCiAgICAgICAgICAgIG5hbWUgPT0gc2VsZWN0b3JBcmd1bWVudE5hbWVzW25hbWVkQXJndW1lbnRJbmRleF0pIHsKICAgICAgICAgIC8vIFRoZSBuYW1lZCBhcmd1bWVudCB3YXMgcHJvdmlkZWQgaW4gdGhlIGZ1bmN0aW9uIGludm9jYXRpb24uCiAgICAgICAgICBjb21waWxlZEFyZ3VtZW50c1tjb21waWxlZEFyZ3VtZW50SW5kZXgrK10gPQogICAgICAgICAgICAgIHByb3ZpZGVkQXJndW1lbnRzW25hbWVkQXJndW1lbnRPZmZzZXQgKyBuYW1lZEFyZ3VtZW50SW5kZXgrK107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFzc2VydChkZWZhdWx0VmFsdWUgIT0gbnVsbCwKICAgICAgICAgICAgICBmYWlsZWRBdChmdW5jdGlvbiwgJ05vIGNvbnN0YW50IGNvbXB1dGVkIGZvciBwYXJhbWV0ZXIgJG5hbWUnKSk7CiAgICAgICAgICBjb21waWxlZEFyZ3VtZW50c1tjb21waWxlZEFyZ3VtZW50SW5kZXgrK10gPQogICAgICAgICAgICAgIGdyYXBoLmFkZENvbnN0YW50KGRlZmF1bHRWYWx1ZSwgY2xvc2VkV29ybGQpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBpZiAoX3J0aU5lZWQubWV0aG9kTmVlZHNUeXBlQXJndW1lbnRzKGZ1bmN0aW9uKSkgewogICAgICBpZiAoY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCA9PQogICAgICAgICAgcGFyYW1ldGVyU3RydWN0dXJlLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgLy8vIE9mZnNldCBvZiB0eXBlIGFyZ3VtZW50cyBpbiBbcHJvdmlkZWRBcmd1bWVudHNdLgogICAgICAgIGludCB0eXBlQXJndW1lbnRPZmZzZXQgPSBjYWxsU3RydWN0dXJlLmFyZ3VtZW50Q291bnQgKyAxOwogICAgICAgIC8vIFBhc3MgZXhwbGljaXQgdHlwZSBhcmd1bWVudHMuCiAgICAgICAgZm9yIChpbnQgdHlwZUFyZ3VtZW50SW5kZXggPSAwOwogICAgICAgICAgICB0eXBlQXJndW1lbnRJbmRleCA8IGNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnQ7CiAgICAgICAgICAgIHR5cGVBcmd1bWVudEluZGV4KyspIHsKICAgICAgICAgIGNvbXBpbGVkQXJndW1lbnRzW2NvbXBpbGVkQXJndW1lbnRJbmRleCsrXSA9CiAgICAgICAgICAgICAgcHJvdmlkZWRBcmd1bWVudHNbdHlwZUFyZ3VtZW50T2Zmc2V0ICsgdHlwZUFyZ3VtZW50SW5kZXhdOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCA9PSAwKTsKICAgICAgICAvLyBQYXNzIHR5cGUgdmFyaWFibGUgYm91bmRzIGFzIHR5cGUgYXJndW1lbnRzLgogICAgICAgIGZvciAoVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUKICAgICAgICAgICAgaW4gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoZnVuY3Rpb24pKSB7CiAgICAgICAgICBjb21waWxlZEFyZ3VtZW50c1tjb21waWxlZEFyZ3VtZW50SW5kZXgrK10gPQogICAgICAgICAgICAgIF9jb21wdXRlVHlwZUFyZ3VtZW50RGVmYXVsdFZhbHVlKGZ1bmN0aW9uLCB0eXBlVmFyaWFibGUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIGNvbXBpbGVkQXJndW1lbnRzOwogIH0KCiAgSEluc3RydWN0aW9uIF9jb21wdXRlVHlwZUFyZ3VtZW50RGVmYXVsdFZhbHVlKAogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwgVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUpIHsKICAgIERhcnRUeXBlIGJvdW5kID0KICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldFR5cGVWYXJpYWJsZURlZmF1bHRUeXBlKHR5cGVWYXJpYWJsZS5lbGVtZW50KTsKICAgIGlmIChib3VuZC5jb250YWluc1R5cGVWYXJpYWJsZXMpIHsKICAgICAgLy8gVE9ETygzMzQyMik6IFN1cHBvcnQgdHlwZSB2YXJpYWJsZXMgaW4gZGVmYXVsdAogICAgICAvLyB0eXBlcy4gVGVtcG9yYXJpbHkgdXNpbmcgdGhlICJhbnkiIHR5cGUgKGVuY29kZWQgYXMgLTIpIHRvCiAgICAgIC8vIGF2b2lkIGZhaWxpbmcgb24gYm91bmRzIGNoZWNrcy4KICAgICAgcmV0dXJuIGdyYXBoLmFkZENvbnN0YW50SW50KC0yLCBjbG9zZWRXb3JsZCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX3R5cGVCdWlsZGVyLmFuYWx5emVUeXBlQXJndW1lbnQoYm91bmQsIGZ1bmN0aW9uKTsKICAgIH0KICB9CgogIC8vLyBUaGlzIG1ldGhvZCBpcyBpbnZva2VkIGJlZm9yZSBpbmxpbmluZyB0aGUgYm9keSBvZiBbZnVuY3Rpb25dIGludG8gdGhpcwogIC8vLyBbU3NhR3JhcGhCdWlsZGVyXS4KICB2b2lkIF9lbnRlcklubGluZWRNZXRob2QoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBjb21waWxlZEFyZ3VtZW50cywgSW50ZXJmYWNlVHlwZSBpbnN0YW5jZVR5cGUpIHsKICAgIEtlcm5lbElubGluaW5nU3RhdGUgc3RhdGUgPSBuZXcgS2VybmVsSW5saW5pbmdTdGF0ZSgKICAgICAgICBmdW5jdGlvbiwKICAgICAgICBfcmV0dXJuTG9jYWwsCiAgICAgICAgX3JldHVyblR5cGUsCiAgICAgICAgc3RhY2ssCiAgICAgICAgbG9jYWxzSGFuZGxlciwKICAgICAgICBfaW5UcnlTdGF0ZW1lbnQsCiAgICAgICAgX2lzQ2FsbGVkT25jZShmdW5jdGlvbikpOwogICAgX2lubGluaW5nU3RhY2suYWRkKHN0YXRlKTsKCiAgICAvLyBTZXR0aW5nIHVwIHRoZSBzdGF0ZSBvZiB0aGUgKEFTVCkgYnVpbGRlciBpcyBwZXJmb3JtZWQgZXZlbiB3aGVuIHRoZQogICAgLy8gaW5saW5lZCBmdW5jdGlvbiBpcyBpbiBJUiwgYmVjYXVzZSB0aGUgaXJJbmxpbmVyIHVzZXMgdGhlIFtyZXR1cm5FbGVtZW50XQogICAgLy8gb2YgdGhlIEFTVCBidWlsZGVyLgogICAgX3NldHVwU3RhdGVGb3JJbmxpbmluZyhmdW5jdGlvbiwgY29tcGlsZWRBcmd1bWVudHMsIGluc3RhbmNlVHlwZSk7CiAgfQoKICAvLy8gVGhpcyBtZXRob2Qgc2V0cyB1cCB0aGUgbG9jYWwgc3RhdGUgb2YgdGhlIGJ1aWxkZXIgZm9yIGlubGluaW5nCiAgLy8vIFtmdW5jdGlvbl0uIFRoZSBhcmd1bWVudHMgb2YgdGhlIGZ1bmN0aW9uIGFyZSBpbnNlcnRlZCBpbnRvIHRoZQogIC8vLyBbbG9jYWxzSGFuZGxlcl0uCiAgLy8vCiAgLy8vIFdoZW4gaW5saW5pbmcgYSBmdW5jdGlvbiwgYHJldHVybmAgc3RhdGVtZW50cyBhcmUgbm90IGVtaXR0ZWQgYXMKICAvLy8gW0hSZXR1cm5dIGluc3RydWN0aW9ucy4gSW5zdGVhZCwgdGhlIHZhbHVlIG9mIGEgc3ludGhldGljIGVsZW1lbnQgaXMKICAvLy8gdXBkYXRlZCBpbiB0aGUgW2xvY2Fsc0hhbmRsZXJdLiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgc3VjaCBhbiBlbGVtZW50IGFuZAogIC8vLyBzdG9yZXMgaXQgaW4gdGhlIFtfcmV0dXJuTG9jYWxdIGZpZWxkLgogIHZvaWQgX3NldHVwU3RhdGVGb3JJbmxpbmluZyhGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+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+IHZpc2l0KG5vZGUudHlwZSkpOwogICAgaWYgKCEobm9kZS5pc1R5cGVFcnJvciAmJiBvbWl0SW1wbGljaXRDYXN0cykpIHsKICAgICAgZGF0YS5oYXNDYXN0ID0gdHJ1ZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyUmVndWxh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bWVudHMuZGFydCcgc2hvdyBDb21tb25FbGVtZW50czsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CgpjbGFzcyBBYnN0cmFjdFZhbHVlRmFjdG9yeSB7CiAgc3RhdGljIEFic3RyYWN0VmFsdWUgaW5mZXJyZWRSZXR1cm5UeXBlRm9yRWxlbWVudCgKICAgICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cykgewogICAgcmV0dXJuIHJlc3VsdHMucmVzdWx0T2ZNZW1iZXIoZWxlbWVudCkucmV0dXJuVHlwZSA/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+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAnUmVjb3JkQ29udGFpbmVyRGVmaW5pdGlvbi5ub2RlIGZvciAkbG9jYXRpb24nKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ1JlY29yZENvbnRhaW5lckRlZmluaXRpb24oa2luZDoka2luZCxsb2NhdGlvbjokbG9jYXRpb24pJzsKfQoKYWJzdHJhY3QgY2xhc3MgQ2xvc3VyZVJ0aU5lZWQgewogIGJvb2wgY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgYm9vbCBtZXRob2ROZWVkc1R5cGVBcmd1bWVudHMoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKTsKCiAgYm9vbCBtZXRob2ROZWVkc1NpZ25hdHVyZShNZW1iZXJFbnRpdHkgbWV0aG9kKTsKCiAgYm9vbCBsb2NhbEZ1bmN0aW9uTmVlZHNUeXBlQXJndW1lbnRzKGlyLkxvY2FsRnVuY3Rpb24gbm9kZSk7CgogIGJvb2wgbG9jYWxGdW5jdGlvbk5lZWRzU2lnbmF0dXJlKGlyLkxvY2FsRnVuY3Rpb24gbm9kZSk7CgogIGJvb2wgc2VsZWN0b3JOZWVkc1R5cGVBcmd1bWVudHMoU2VsZWN0b3Igc2VsZWN0b3IpOwoKICBib29sIGluc3RhbnRpYXRpb25OZWVkc1R5cGVBcmd1bWVudHMoCiAgICAgIERhcnRUeXBlIGZ1bmN0aW9uVHlwZSwgaW50IHR5cGVBcmd1bWVudENvdW50KTsKfQqFAwBOTjwBKAEaGSgkKyEd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ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9pbmRleGVkLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL2lyL3N0YXRpY190eXBlX2NhY2hlLmRhcnQnOwppbXBvcnQgJy4uL2lyL3Zpc2l0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL29yZGVyZWRfdHlwZXNldC5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vc3NhL3R5cGVfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICdjbG9zdXJlLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRfbWFwX2ltcGwuZGFydCc7CmltcG9ydCAnZWxlbWVudHMuZGFydCc7CgovLy8gRW52aXJvbm1lbnQgZm9yIGZhc3QgbG9va3VwIG9mIGNvbXBvbmVudCBsaWJyYXJpZXMuCmNsYXNzIEpQcm9ncmFtRW52IHsKICBmaW5hbCBJdGVyYWJsZTxpci5Db21wb25lbnQ+IF9jb21wb25lbnRzOwogIGZpbmFsIE1hcDxVcmksIEpMaWJyYXJ5RW52PiBfbGlicmFyeU1hcCA9IHt9OwoKICBKUHJvZ3JhbUVudih0aGlzLl9jb21wb25lbnRzKTsKCiAgLy8vIFRPRE8oam9obm5pd2ludGhlcik6IEhhbmRsZSBhcmJpdHJhcnkgbG9hZCBvcmRlciBpZiBuZWVkZWQuCiAgaXIuTWVtYmVyIGdldCBtYWluTWV0aG9kID0+IF9jb21wb25lbnRzLmZpcnN0Py5tYWluTWV0aG9kOwoKICBpci5Db21wb25lbnQgZ2V0IG1haW5Db21wb25lbnQgPT4gX2NvbXBvbmVudHMuZmlyc3Q7CgogIHZvaWQgcmVnaXN0ZXJMaWJyYXJ5KEpMaWJyYXJ5RW52IGVudikgewogICAgX2xpYnJhcnlNYXBbZW52LmxpYnJhcnkuaW1wb3J0VXJpXSA9IGVudjsKICB9CgogIC8vLyBSZXR1cm4gdGhlIFtKTGlicmFyeUVudl0gZm9yIHRoZSBsaWJyYXJ5IHdpdGggdGhlIGNhbm9uaWNhbCBbdXJpXS4KICBKTGlicmFyeUVudiBsb29rdXBMaWJyYXJ5KFVyaSB1cmkpIHsKICAgIHJldHVybiBfbGlicmFyeU1hcFt1cmldOwogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBsaWJyYXJ5IGluIHRoaXMgZW52aXJvbm1lbnQuCiAgdm9pZCBmb3JFYWNoTGlicmFyeSh2b2lkIGYoSkxpYnJhcnlFbnYgbGlicmFyeSkpIHsKICAgIF9saWJyYXJ5TWFwLnZhbHVlcy5mb3JFYWNoKGYpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBsaWJyYXJpZXMgaW4gdGhpcyBlbnZpcm9ubWVudC4KICBpbnQgZ2V0IGxlbmd0aCB7CiAgICByZXR1cm4gX2xpYnJhcnlNYXAubGVuZ3RoOwogIH0KfQoKLy8vIEVudmlyb25tZW50IGZvciBmYXN0IGxvb2t1cCBvZiBsaWJyYXJ5IGNsYXNzZXMgYW5kIG1lbWJlcnMuCmNsYXNzIEpMaWJyYXJ5RW52IHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pMaWJyYXJ5RW52XSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2xpYnJhcnktZW52JzsKCiAgZmluYWwgaXIuTGlicmFyeSBsaWJyYXJ5OwogIGZpbmFsIE1hcDxTdHJpbmcsIEpDbGFzc0Vudj4gX2NsYXNzTWFwID0ge307CiAgZmluYWwgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBfbWVtYmVyTWFwOwogIGZpbmFsIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gX3NldHRlck1hcDsKCiAgSkxpYnJhcnlFbnYodGhpcy5saWJyYXJ5LCB0aGlzLl9tZW1iZXJNYXAsIHRoaXMuX3NldHRlck1hcCk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbSkxpYnJhcnlFbnZdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgSkxpYnJhcnlFbnYucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkxpYnJhcnkgbGlicmFyeSA9IHNvdXJjZS5yZWFkTGlicmFyeU5vZGUoKTsKICAgIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gbWVtYmVyTWFwID0KICAgICAgICBzb3VyY2UucmVhZFN0cmluZ01hcChzb3VyY2UucmVhZE1lbWJlck5vZGUpOwogICAgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBzZXR0ZXJNYXAgPQogICAgICAgIHNvdXJjZS5yZWFkU3RyaW5nTWFwKHNvdXJjZS5yZWFkTWVtYmVyTm9kZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpMaWJyYXJ5RW52KGxpYnJhcnksIG1lbWJlck1hcCwgc2V0dGVyTWFwKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0pMaWJyYXJ5RW52XSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUxpYnJhcnlOb2RlKGxpYnJhcnkpOwogICAgc2luay53cml0ZVN0cmluZ01hcChfbWVtYmVyTWFwLCBzaW5rLndyaXRlTWVtYmVyTm9kZSk7CiAgICBzaW5rLndyaXRlU3RyaW5nTWFwKF9zZXR0ZXJNYXAsIHNpbmsud3JpdGVNZW1iZXJOb2RlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ2xhc3MoU3RyaW5nIG5hbWUsIEpDbGFzc0VudiBjbGFzc0VudikgewogICAgX2NsYXNzTWFwW25hbWVdID0gY2xhc3NFbnY7CiAgfQoKICAvLy8gUmV0dXJuIHRoZSBbSkNsYXNzRW52XSBmb3IgdGhlIGNsYXNzIFtuYW1lXSBpbiBbbGlicmFyeV0uCiAgSkNsYXNzRW52IGxvb2t1cENsYXNzKFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gX2NsYXNzTWFwW25hbWVdOwogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBjbGFzcyBpbiB0aGlzIGxpYnJhcnkuCiAgdm9pZCBmb3JFYWNoQ2xhc3Modm9pZCBmKEpDbGFzc0VudiBjbHMpKSB7CiAgICBfY2xhc3NNYXAudmFsdWVzLmZvckVhY2goZik7CiAgfQoKICAvLy8gUmV0dXJuIHRoZSBbaXIuTWVtYmVyXSBmb3IgdGhlIG1lbWJlciBbbmFtZV0gaW4gW2xpYnJhcnldLgogIGlyLk1lbWJlciBsb29rdXBNZW1iZXIoU3RyaW5nIG5hbWUsIHtib29sIHNldHRlcjogZmFsc2V9KSB7CiAgICByZXR1cm4gc2V0dGVyID8gX3NldHRlck1hcFtuYW1lXSA6IF9tZW1iZXJNYXBbbmFtZV07CiAgfQoKICB2b2lkIGZvckVhY2hNZW1iZXIodm9pZCBmKGlyLk1lbWJlciBtZW1iZXIpKSB7CiAgICBfbWVtYmVyTWFwLnZhbHVlcy5mb3JFYWNoKGYpOwogICAgZm9yIChpci5NZW1iZXIgbWVtYmVyIGluIF9zZXR0ZXJNYXAudmFsdWVzKSB7CiAgICAgIGlmIChtZW1iZXIgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgZihtZW1iZXIpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFNraXAgZmllbGRzOyB0aGVzZSBhcmUgYWxzbyBpbiBfbWVtYmVyTWFwLgogICAgICB9CiAgICB9CiAgfQp9CgpjbGFzcyBKTGlicmFyeURhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSkxpYnJhcnlEYXRhXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2xpYnJhcnktZGF0YSc7CgogIGZpbmFsIGlyLkxpYnJhcnkgbGlicmFyeTsKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCBkaXJlY3QgYWNjZXNzIHRvIFtpbXBvcnRzXS4gSXQgbWlnaHQgYmUgbnVsbCBpZgogIC8vIGl0IGhhc24ndCBiZWVuIGNvbXB1dGVkIGZvciB0aGUgY29ycmVzcG9uZGluZyBbS0xpYnJhcnlEYXRhXS4KICBmaW5hbCBNYXA8aXIuTGlicmFyeURlcGVuZGVuY3ksIEltcG9ydEVudGl0eT4gaW1wb3J0czsKCiAgSkxpYnJhcnlEYXRhKHRoaXMubGlicmFyeSwgdGhpcy5pbXBvcnRzKTsKCiAgZmFjdG9yeSBKTGlicmFyeURhdGEucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkxpYnJhcnkgbGlicmFyeSA9IHNvdXJjZS5yZWFkTGlicmFyeU5vZGUoKTsKICAgIGludCBpbXBvcnRDb3VudCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBNYXA8aXIuTGlicmFyeURlcGVuZGVuY3ksIEltcG9ydEVudGl0eT4gaW1wb3J0czsKICAgIGlmIChpbXBvcnRDb3VudCA+IDApIHsKICAgICAgaW1wb3J0cyA9IHt9OwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGltcG9ydENvdW50OyBpKyspIHsKICAgICAgICBpbnQgaW5kZXggPSBzb3VyY2UucmVhZEludCgpOwogICAgICAgIEltcG9ydEVudGl0eSBpbXBvcnQgPSBzb3VyY2UucmVhZEltcG9ydCgpOwogICAgICAgIGltcG9ydHNbbGlicmFyeS5kZXBlbmRlbmNpZXNbaW5kZXhdXSA9IGltcG9ydDsKICAgICAgfQogICAgfQogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKTGlicmFyeURhdGEobGlicmFyeSwgaW1wb3J0cyk7CiAgfQoKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTGlicmFyeU5vZGUobGlicmFyeSk7CiAgICBpZiAoaW1wb3J0cyA9PSBudWxsKSB7CiAgICAgIHNpbmsud3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICBzaW5rLndyaXRlSW50KGltcG9ydHMubGVuZ3RoKTsKICAgICAgaW50IGluZGV4ID0gMDsKICAgICAgZm9yIChpci5MaWJyYXJ5RGVwZW5kZW5jeSBub2RlIGluIGxpYnJhcnkuZGVwZW5kZW5jaWVzKSB7CiAgICAgICAgSW1wb3J0RW50aXR5IGltcG9ydCA9IGltcG9ydHNbbm9kZV07CiAgICAgICAgaWYgKGltcG9ydCAhPSBudWxsKSB7CiAgICAgICAgICBzaW5rLndyaXRlSW50KGluZGV4KTsKICAgICAgICAgIHNpbmsud3JpdGVJbXBvcnQoaW1wb3J0KTsKICAgICAgICB9CiAgICAgICAgaW5kZXgrKzsKICAgICAgfQogICAgfQogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIFtKQ2xhc3NFbnZdIHN1YmNsYXNzZXMgaW4gc2VyaWFsaXphdGlvbi4KZW51bSBKQ2xhc3NFbnZLaW5kIHsgbm9kZSwgY2xvc3VyZSwgcmVjb3JkIH0KCi8vLyBNZW1iZXIgZGF0YSBmb3IgYSBjbGFzcy4KYWJzdHJhY3QgY2xhc3MgSkNsYXNzRW52IHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW0pDbGFzc0Vudl0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBKQ2xhc3NFbnYucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBKQ2xhc3NFbnZLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oSkNsYXNzRW52S2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgSkNsYXNzRW52S2luZC5ub2RlOgogICAgICAgIHJldHVybiBuZXcgSkNsYXNzRW52SW1wbC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKQ2xhc3NFbnZLaW5kLmNsb3N1cmU6CiAgICAgICAgcmV0dXJuIG5ldyBDbG9zdXJlQ2xhc3NFbnYucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSkNsYXNzRW52S2luZC5yZWNvcmQ6CiAgICAgICAgcmV0dXJuIG5ldyBSZWNvcmRFbnYucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5zdXBwb3J0ZWQgSkNsYXNzRW52S2luZCAka2luZCIpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZXMgdGhpcyBbSkNsYXNzRW52XSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luayk7CgogIC8vLyBUaGUgW2lyLkNsYXNzXSB0aGF0IGRlZmluZWQgdGhlIGNsYXNzLCBpZiBhbnkuCiAgaXIuQ2xhc3MgZ2V0IGNsczsKCiAgLy8vIFdoZXRoZXIgdGhlIGNsYXNzIGlzIGFuIHVubmFtZWQgbWl4aW4gYXBwbGljYXRpb24uCiAgYm9vbCBnZXQgaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbjsKCiAgLy8vIFdoZXRoZXIgdGhlIGNsYXNzIGlzIGEgbWl4aW4gYXBwbGljYXRpb24gdGhhdCBtaXhlcyBpbiBtZXRob2RzIHdpdGggc3VwZXIKICAvLy8gY2FsbHMuCiAgYm9vbCBnZXQgaXNTdXBlck1peGluQXBwbGljYXRpb247CgogIC8vLyBSZXR1cm4gdGhlIFtNZW1iZXJFbnRpdHldIGZvciB0aGUgbWVtYmVyIFtuYW1lXSBpbiB0aGUgY2xhc3MuIElmIFtzZXR0ZXJdCiAgLy8vIGlzIGB0cnVlYCwgdGhlIHNldHRlciBvciBhc3NpZ25hYmxlIGZpZWxkIGNvcnJlc3BvbmRpbmcgdG8gW25hbWVdIGlzCiAgLy8vIHJldHVybmVkLgogIE1lbWJlckVudGl0eSBsb29rdXBNZW1iZXIoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2V9KTsKCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBtZW1iZXIgb2YgW2Nsc10uCiAgdm9pZCBmb3JFYWNoTWVtYmVyKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSk7CgogIC8vLyBSZXR1cm4gdGhlIFtDb25zdHJ1Y3RvckVudGl0eV0gZm9yIHRoZSBjb25zdHJ1Y3RvciBbbmFtZV0gaW4gW2Nsc10uCiAgQ29uc3RydWN0b3JFbnRpdHkgbG9va3VwQ29uc3RydWN0b3IoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgU3RyaW5nIG5hbWUpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGNvbnN0cnVjdG9yIG9mIFtjbHNdLgogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yKAogICAgICBJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCB2b2lkIGYoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpKTsKCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBjb25zdHJ1Y3RvciBib2R5IGZvciB0aGUgbGl2ZSBjb25zdHJ1Y3RvcnMgaW4gdGhlCiAgLy8vIGNsYXNzLgogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yQm9keSh2b2lkIGYoQ29uc3RydWN0b3JCb2R5RW50aXR5IGNvbnN0cnVjdG9yKSk7Cn0KCi8vLyBFbnZpcm9ubWVudCBmb3IgZmFzdCBsb29rdXAgb2YgY2xhc3MgbWVtYmVycy4KY2xhc3MgSkNsYXNzRW52SW1wbCBpbXBsZW1lbnRzIEpDbGFzc0VudiB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKQ2xhc3NFbnZdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2xhc3MtZW52JzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaXIuQ2xhc3MgY2xzOwogIGZpbmFsIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gX2NvbnN0cnVjdG9yTWFwOwogIGZpbmFsIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gX21lbWJlck1hcDsKICBmaW5hbCBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IF9zZXR0ZXJNYXA7CiAgZmluYWwgTGlzdDxpci5NZW1iZXI+IF9tZW1iZXJzOyAvLyBpbiBkZWNsYXJhdGlvbiBvcmRlci4KICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uOwoKICAvLy8gQ29uc3RydWN0b3IgYm9kaWVzIGNyZWF0ZWQgZm9yIHRoaXMgY2xhc3MuCiAgTGlzdDxDb25zdHJ1Y3RvckJvZHlFbnRpdHk+IF9jb25zdHJ1Y3RvckJvZHlMaXN0OwoKICBKQ2xhc3NFbnZJbXBsKHRoaXMuY2xzLCB0aGlzLl9jb25zdHJ1Y3Rvck1hcCwgdGhpcy5fbWVtYmVyTWFwLAogICAgICB0aGlzLl9zZXR0ZXJNYXAsIHRoaXMuX21lbWJlcnMsIHRoaXMuaXNTdXBlck1peGluQXBwbGljYXRpb24pOwoKICBmYWN0b3J5IEpDbGFzc0VudkltcGwucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkNsYXNzIGNscyA9IHNvdXJjZS5yZWFkQ2xhc3NOb2RlKCk7CiAgICBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IGNvbnN0cnVjdG9yTWFwID0KICAgICAgICBzb3VyY2UucmVhZFN0cmluZ01hcChzb3VyY2UucmVhZE1lbWJlck5vZGUpOwogICAgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBtZW1iZXJNYXAgPQogICAgICAgIHNvdXJjZS5yZWFkU3RyaW5nTWFwKHNvdXJjZS5yZWFkTWVtYmVyTm9kZSk7CiAgICBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IHNldHRlck1hcCA9CiAgICAgICAgc291cmNlLnJlYWRTdHJpbmdNYXAoc291cmNlLnJlYWRNZW1iZXJOb2RlKTsKICAgIExpc3Q8aXIuTWVtYmVyPiBtZW1iZXJzID0gc291cmNlLnJlYWRNZW1iZXJOb2RlcygpOwogICAgYm9vbCBpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbiA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKQ2xhc3NFbnZJbXBsKGNscywgY29uc3RydWN0b3JNYXAsIG1lbWJlck1hcCwgc2V0dGVyTWFwLCBtZW1iZXJzLAogICAgICAgIGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpDbGFzc0VudktpbmQubm9kZSk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3NOb2RlKGNscyk7CiAgICBzaW5rLndyaXRlU3RyaW5nTWFwKF9jb25zdHJ1Y3Rvck1hcCwgc2luay53cml0ZU1lbWJlck5vZGUpOwogICAgc2luay53cml0ZVN0cmluZ01hcChfbWVtYmVyTWFwLCBzaW5rLndyaXRlTWVtYmVyTm9kZSk7CiAgICBzaW5rLndyaXRlU3RyaW5nTWFwKF9zZXR0ZXJNYXAsIHNpbmsud3JpdGVNZW1iZXJOb2RlKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlcyhfbWVtYmVycyk7CiAgICBzaW5rLndyaXRlQm9vbChpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbik7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbiA9PiBjbHMuaXNBbm9ueW1vdXNNaXhpbjsKCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGxvb2t1cE1lbWJlcihJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIGlyLk1lbWJlciBtZW1iZXIgPSBzZXR0ZXIgPyBfc2V0dGVyTWFwW25hbWVdIDogX21lbWJlck1hcFtuYW1lXTsKICAgIHJldHVybiBtZW1iZXIgIT0gbnVsbCA/IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG1lbWJlcikgOiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoTWVtYmVyKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgX21lbWJlcnMuZm9yRWFjaCgoaXIuTWVtYmVyIG1lbWJlcikgewogICAgICBmKGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG1lbWJlcikpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvckVudGl0eSBsb29rdXBDb25zdHJ1Y3RvcihJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBTdHJpbmcgbmFtZSkgewogICAgaXIuTWVtYmVyIGNvbnN0cnVjdG9yID0gX2NvbnN0cnVjdG9yTWFwW25hbWVdOwogICAgcmV0dXJuIGNvbnN0cnVjdG9yICE9IG51bGwgPyBlbGVtZW50TWFwLmdldENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSA6IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hDb25zdHJ1Y3RvcigKICAgICAgSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgdm9pZCBmKENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yKSkgewogICAgX2NvbnN0cnVjdG9yTWFwLnZhbHVlcy5mb3JFYWNoKChpci5NZW1iZXIgY29uc3RydWN0b3IpIHsKICAgICAgZihlbGVtZW50TWFwLmdldENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSk7CiAgICB9KTsKICB9CgogIHZvaWQgYWRkQ29uc3RydWN0b3JCb2R5KENvbnN0cnVjdG9yQm9keUVudGl0eSBjb25zdHJ1Y3RvckJvZHkpIHsKICAgIF9jb25zdHJ1Y3RvckJvZHlMaXN0ID8/PSA8Q29uc3RydWN0b3JCb2R5RW50aXR5PltdOwogICAgX2NvbnN0cnVjdG9yQm9keUxpc3QuYWRkKGNvbnN0cnVjdG9yQm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hDb25zdHJ1Y3RvckJvZHkodm9pZCBmKENvbnN0cnVjdG9yQm9keUVudGl0eSBjb25zdHJ1Y3RvcikpIHsKICAgIF9jb25zdHJ1Y3RvckJvZHlMaXN0Py5mb3JFYWNoKGYpOwogIH0KfQoKY2xhc3MgUmVjb3JkRW52IGltcGxlbWVudHMgSkNsYXNzRW52IHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW1JlY29yZEVudl0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdyZWNvcmQtZW52JzsKCiAgZmluYWwgTWFwPFN0cmluZywgSW5kZXhlZE1lbWJlcj4gX21lbWJlck1hcDsKCiAgUmVjb3JkRW52KHRoaXMuX21lbWJlck1hcCk7CgogIGZhY3RvcnkgUmVjb3JkRW52LnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBNYXA8U3RyaW5nLCBJbmRleGVkTWVtYmVyPiBfbWVtYmVyTWFwID0KICAgICAgICBzb3VyY2UucmVhZFN0cmluZ01hcCgoKSA9PiBzb3VyY2UucmVhZE1lbWJlcigpKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgUmVjb3JkRW52KF9tZW1iZXJNYXApOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSkNsYXNzRW52S2luZC5yZWNvcmQpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZVN0cmluZ01hcCgKICAgICAgICBfbWVtYmVyTWFwLCAoSW5kZXhlZE1lbWJlciBtZW1iZXIpID0+IHNpbmsud3JpdGVNZW1iZXIobWVtYmVyKSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoQ29uc3RydWN0b3JCb2R5KHZvaWQgZihDb25zdHJ1Y3RvckJvZHlFbnRpdHkgY29uc3RydWN0b3IpKSB7CiAgICAvLyBXZSBkbyBub3QgY3JlYXRlIGNvbnN0cnVjdG9yIGJvZGllcyBmb3IgY29udGFpbmVycy4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yKAogICAgICBJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCB2b2lkIGYoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpKSB7CiAgICAvLyBXZSBkbyBub3QgY3JlYXRlIGNvbnN0cnVjdG9ycyBmb3IgY29udGFpbmVycy4KICB9CgogIEBvdmVycmlkZQogIENvbnN0cnVjdG9yRW50aXR5IGxvb2t1cENvbnN0cnVjdG9yKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIFN0cmluZyBuYW1lKSB7CiAgICAvLyBXZSBkbyBub3QgY3JlYXRlIGNvbnN0cnVjdG9ycyBmb3IgY29udGFpbmVycy4KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoTWVtYmVyKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIHZvaWQgZihNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgX21lbWJlck1hcC52YWx1ZXMuZm9yRWFjaChmKTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBsb29rdXBNZW1iZXIoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2V9KSB7CiAgICByZXR1cm4gX21lbWJlck1hcFtuYW1lXTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVW5uYW1lZE1peGluQXBwbGljYXRpb24gPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBpci5DbGFzcyBnZXQgY2xzID0+IG51bGw7Cn0KCmNsYXNzIENsb3N1cmVDbGFzc0VudiBleHRlbmRzIFJlY29yZEVudiB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtDbG9zdXJlQ2xhc3NFbnZdIG9iamVjdHMgaW4gYQogIC8vLyBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnY2xvc3VyZS1jbGFzcy1lbnYnOwoKICBDbG9zdXJlQ2xhc3NFbnYoTWFwPFN0cmluZywgTWVtYmVyRW50aXR5PiBtZW1iZXJNYXApIDogc3VwZXIobWVtYmVyTWFwKTsKCiAgZmFjdG9yeSBDbG9zdXJlQ2xhc3NFbnYucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIE1hcDxTdHJpbmcsIEluZGV4ZWRNZW1iZXI+IF9tZW1iZXJNYXAgPQogICAgICAgIHNvdXJjZS5yZWFkU3RyaW5nTWFwKCgpID0+IHNvdXJjZS5yZWFkTWVtYmVyKCkpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBDbG9zdXJlQ2xhc3NFbnYoX21lbWJlck1hcCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKQ2xhc3NFbnZLaW5kLmNsb3N1cmUpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZVN0cmluZ01hcCgKICAgICAgICBfbWVtYmVyTWFwLCAoSW5kZXhlZE1lbWJlciBtZW1iZXIpID0+IHNpbmsud3JpdGVNZW1iZXIobWVtYmVyKSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGxvb2t1cE1lbWJlcihJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIGlmIChzZXR0ZXIpIHsKICAgICAgLy8gQWxsIGNsb3N1cmUgZmllbGRzIGFyZSBmaW5hbC4KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gc3VwZXIubG9va3VwTWVtYmVyKGVsZW1lbnRNYXAsIG5hbWUsIHNldHRlcjogc2V0dGVyKTsKICB9Cn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIFtKQ2xhc3NEYXRhXSBzdWJjbGFzc2VzIGluIHNlcmlhbGl6YXRpb24uCmVudW0gSkNsYXNzRGF0YUtpbmQgeyBub2RlLCBjbG9zdXJlLCByZWNvcmQgfQoKYWJzdHJhY3QgY2xhc3MgSkNsYXNzRGF0YSB7CiAgLy8vIERlc2VyaWFsaXplcyBhIFtKQ2xhc3NEYXRhXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IEpDbGFzc0RhdGEucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBKQ2xhc3NEYXRhS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKEpDbGFzc0RhdGFLaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBKQ2xhc3NEYXRhS2luZC5ub2RlOgogICAgICAgIHJldHVybiBuZXcgSkNsYXNzRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSkNsYXNzRGF0YUtpbmQuY2xvc3VyZToKICAgICAgICByZXR1cm4gbmV3IENsb3N1cmVDbGFzc0RhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSkNsYXNzRGF0YUtpbmQucmVjb3JkOgogICAgICAgIHJldHVybiBuZXcgUmVjb3JkQ2xhc3NEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgSkNsYXNzRGF0YUtpbmQgJGtpbmQiKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0pDbGFzc0RhdGFdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgQ2xhc3NEZWZpbml0aW9uIGdldCBkZWZpbml0aW9uOwoKICBJbnRlcmZhY2VUeXBlIGdldCB0aGlzVHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCByYXdUeXBlOwogIEludGVyZmFjZVR5cGUgZ2V0IHN1cGVydHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCBtaXhlZEluVHlwZTsKICBMaXN0PEludGVyZmFjZVR5cGU+IGdldCBpbnRlcmZhY2VzOwogIE9yZGVyZWRUeXBlU2V0IGdldCBvcmRlcmVkVHlwZVNldDsKICBEYXJ0VHlwZSBnZXQgY2FsbFR5cGU7CgogIGJvb2wgZ2V0IGlzRW51bUNsYXNzOwogIGJvb2wgZ2V0IGlzTWl4aW5BcHBsaWNhdGlvbjsKfQoKY2xhc3MgSkNsYXNzRGF0YUltcGwgaW1wbGVtZW50cyBKQ2xhc3NEYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pDbGFzc0RhdGFJbXBsXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NsYXNzLWRhdGEnOwoKICBmaW5hbCBpci5DbGFzcyBjbHM7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb247CiAgQG92ZXJyaWRlCiAgYm9vbCBpc01peGluQXBwbGljYXRpb247CiAgYm9vbCBpc0NhbGxUeXBlQ29tcHV0ZWQgPSBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZTsKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIHJhd1R5cGU7CiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBzdXBlcnR5cGU7CiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBtaXhlZEluVHlwZTsKICBAb3ZlcnJpZGUKICBMaXN0PEludGVyZmFjZVR5cGU+IGludGVyZmFjZXM7CiAgQG92ZXJyaWRlCiAgT3JkZXJlZFR5cGVTZXQgb3JkZXJlZFR5cGVTZXQ7CgogIEpDbGFzc0RhdGFJbXBsKHRoaXMuY2xzLCB0aGlzLmRlZmluaXRpb24pOwoKICBmYWN0b3J5IEpDbGFzc0RhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5DbGFzcyBjbHMgPSBzb3VyY2UucmVhZENsYXNzTm9kZSgpOwogICAgQ2xhc3NEZWZpbml0aW9uIGRlZmluaXRpb24gPSBuZXcgQ2xhc3NEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKQ2xhc3NEYXRhSW1wbChjbHMsIGRlZmluaXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSkNsYXNzRGF0YUtpbmQubm9kZSk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlQ2xhc3NOb2RlKGNscyk7CiAgICBkZWZpbml0aW9uLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VudW1DbGFzcyA9PiBjbHMgIT0gbnVsbCAmJiBjbHMuaXNFbnVtOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXQgY2FsbFR5cGUgPT4gbnVsbDsKfQoKLy8vIEVudW0gdXNlZCBmb3IgaWRlbnRpZnlpbmcgW0pNZW1iZXJEYXRhXSBzdWJjbGFzc2VzIGluIHNlcmlhbGl6YXRpb24uCmVudW0gSk1lbWJlckRhdGFLaW5kIHsKICBmdW5jdGlvbiwKICBmaWVsZCwKICBjb25zdHJ1Y3RvciwKICBjb25zdHJ1Y3RvckJvZHksCiAgc2lnbmF0dXJlLAogIGdlbmVyYXRvckJvZHksCiAgY2xvc3VyZUZ1bmN0aW9uLAogIGNsb3N1cmVGaWVsZCwKfQoKYWJzdHJhY3QgY2xhc3MgSk1lbWJlckRhdGEgewogIE1lbWJlckRlZmluaXRpb24gZ2V0IGRlZmluaXRpb247CgogIEludGVyZmFjZVR5cGUgZ2V0TWVtYmVyVGhpc1R5cGUoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCk7CgogIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIGdldCBjbGFzc1R5cGVWYXJpYWJsZUFjY2VzczsKCiAgU3RhdGljVHlwZUNhY2hlIGdldCBzdGF0aWNUeXBlczsKCiAgSk1lbWJlckRhdGEoKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtKTWVtYmVyRGF0YV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBKTWVtYmVyRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIEpNZW1iZXJEYXRhS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKEpNZW1iZXJEYXRhS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgSk1lbWJlckRhdGFLaW5kLmZ1bmN0aW9uOgogICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25EYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyRGF0YUtpbmQuZmllbGQ6CiAgICAgICAgcmV0dXJuIG5ldyBKRmllbGREYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyRGF0YUtpbmQuY29uc3RydWN0b3I6CiAgICAgICAgcmV0dXJuIG5ldyBKQ29uc3RydWN0b3JEYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyRGF0YUtpbmQuY29uc3RydWN0b3JCb2R5OgogICAgICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3JCb2R5RGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlckRhdGFLaW5kLnNpZ25hdHVyZToKICAgICAgICByZXR1cm4gbmV3IFNpZ25hdHVyZUZ1bmN0aW9uRGF0YS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBKTWVtYmVyRGF0YUtpbmQuZ2VuZXJhdG9yQm9keToKICAgICAgICByZXR1cm4gbmV3IEdlbmVyYXRvckJvZHlGdW5jdGlvbkRhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlckRhdGFLaW5kLmNsb3N1cmVGdW5jdGlvbjoKICAgICAgICByZXR1cm4gbmV3IENsb3N1cmVGdW5jdGlvbkRhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgSk1lbWJlckRhdGFLaW5kLmNsb3N1cmVGaWVsZDoKICAgICAgICByZXR1cm4gbmV3IENsb3N1cmVGaWVsZERhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBKTWVtYmVyRGF0YUtpbmQgJGtpbmQiKTsKICB9CgogIC8vLyBTZXJpYWxpemVzIHRoaXMgW0pNZW1iZXJEYXRhXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luayk7Cn0KCmFic3RyYWN0IGNsYXNzIEpNZW1iZXJEYXRhSW1wbCBpbXBsZW1lbnRzIEpNZW1iZXJEYXRhIHsKICBmaW5hbCBpci5NZW1iZXIgbm9kZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTdGF0aWNUeXBlQ2FjaGUgc3RhdGljVHlwZXM7CgogIEpNZW1iZXJEYXRhSW1wbCh0aGlzLm5vZGUsIHRoaXMuZGVmaW5pdGlvbiwgdGhpcy5zdGF0aWNUeXBlcyk7CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0TWVtYmVyVGhpc1R5cGUoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpOwogICAgQ2xhc3NFbnRpdHkgY2xzID0gbWVtYmVyLmVuY2xvc2luZ0NsYXNzOwogICAgaWYgKGNscyAhPSBudWxsKSB7CiAgICAgIHJldHVybiBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjbHMpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBGdW5jdGlvbkRhdGEgaW1wbGVtZW50cyBKTWVtYmVyRGF0YSB7CiAgRnVuY3Rpb25UeXBlIGdldEZ1bmN0aW9uVHlwZShJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwKTsKCiAgTGlzdDxUeXBlVmFyaWFibGVUeXBlPiBnZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCk7CgogIHZvaWQgZm9yRWFjaFBhcmFtZXRlcigKICAgICAgSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwKICAgICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgdm9pZCBmKERhcnRUeXBlIHR5cGUsIFN0cmluZyBuYW1lLCBDb25zdGFudFZhbHVlIGRlZmF1bHRWYWx1ZSksCiAgICAgIHtib29sIGlzTmF0aXZlOiBmYWxzZX0pOwp9CgphYnN0cmFjdCBjbGFzcyBGdW5jdGlvbkRhdGFUeXBlVmFyaWFibGVzTWl4aW4gaW1wbGVtZW50cyBGdW5jdGlvbkRhdGEgewogIGlyLkZ1bmN0aW9uTm9kZSBnZXQgZnVuY3Rpb25Ob2RlOwogIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gX3R5cGVWYXJpYWJsZXM7CgogIEBvdmVycmlkZQogIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKAogICAgICBjb3ZhcmlhbnQgSnNLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgaWYgKF90eXBlVmFyaWFibGVzID09IG51bGwpIHsKICAgICAgaWYgKGZ1bmN0aW9uTm9kZS50eXBlUGFyYW1ldGVycy5pc0VtcHR5KSB7CiAgICAgICAgX3R5cGVWYXJpYWJsZXMgPSBjb25zdCA8VHlwZVZhcmlhYmxlVHlwZT5bXTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpci5UcmVlTm9kZSBwYXJlbnQgPSBmdW5jdGlvbk5vZGUucGFyZW50OwogICAgICAgIGlmIChwYXJlbnQgaXMgaXIuQ29uc3RydWN0b3IgfHwKICAgICAgICAgICAgKHBhcmVudCBpcyBpci5Qcm9jZWR1cmUgJiYKICAgICAgICAgICAgICAgIHBhcmVudC5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuRmFjdG9yeSkpIHsKICAgICAgICAgIF90eXBlVmFyaWFibGVzID0gY29uc3QgPFR5cGVWYXJpYWJsZVR5cGU+W107CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90eXBlVmFyaWFibGVzID0gZnVuY3Rpb25Ob2RlLnR5cGVQYXJhbWV0ZXJzCiAgICAgICAgICAgICAgLm1hcDxUeXBlVmFyaWFibGVUeXBlPigoaXIuVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyKSB7CiAgICAgICAgICAgIHJldHVybiBlbGVtZW50TWFwCiAgICAgICAgICAgICAgICAuZ2V0RGFydFR5cGUobmV3IGlyLlR5cGVQYXJhbWV0ZXJUeXBlKHR5cGVQYXJhbWV0ZXIpKTsKICAgICAgICAgIH0pLnRvTGlzdCgpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIF90eXBlVmFyaWFibGVzOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgRnVuY3Rpb25EYXRhRm9yRWFjaFBhcmFtZXRlck1peGluIGltcGxlbWVudHMgRnVuY3Rpb25EYXRhIHsKICBpci5GdW5jdGlvbk5vZGUgZ2V0IGZ1bmN0aW9uTm9kZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoUGFyYW1ldGVyKAogICAgICBKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwLAogICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICB2b2lkIGYoRGFydFR5cGUgdHlwZSwgU3RyaW5nIG5hbWUsIENvbnN0YW50VmFsdWUgZGVmYXVsdFZhbHVlKSwKICAgICAge2Jvb2wgaXNOYXRpdmU6IGZhbHNlfSkgewogICAgdm9pZCBoYW5kbGVQYXJhbWV0ZXIoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlLCB7Ym9vbCBpc09wdGlvbmFsOiB0cnVlfSkgewogICAgICBEYXJ0VHlwZSB0eXBlID0gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnR5cGUpOwogICAgICBTdHJpbmcgbmFtZSA9IG5vZGUubmFtZTsKICAgICAgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0VmFsdWU7CiAgICAgIGlmIChpc09wdGlvbmFsKSB7CiAgICAgICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgICAgZGVmYXVsdFZhbHVlID0gZWxlbWVudE1hcC5nZXRDb25zdGFudFZhbHVlKG5vZGUuaW5pdGlhbGl6ZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBuZXcgTnVsbENvbnN0YW50VmFsdWUoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZih0eXBlLCBuYW1lLCBkZWZhdWx0VmFsdWUpOwogICAgfQoKICAgIGZvckVhY2hPcmRlcmVkUGFyYW1ldGVyQnlGdW5jdGlvbk5vZGUoZnVuY3Rpb25Ob2RlLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyLCB7Ym9vbCBpc09wdGlvbmFsLCBib29sIGlzRWxpZGVkfSkgewogICAgICBpZiAoIWlzRWxpZGVkKSB7CiAgICAgICAgaGFuZGxlUGFyYW1ldGVyKHBhcmFtZXRlciwgaXNPcHRpb25hbDogaXNPcHRpb25hbCk7CiAgICAgIH0KICAgIH0sIHVzZU5hdGl2ZU9yZGVyaW5nOiBpc05hdGl2ZSk7CiAgfQp9CgpjbGFzcyBGdW5jdGlvbkRhdGFJbXBsIGV4dGVuZHMgSk1lbWJlckRhdGFJbXBsCiAgICB3aXRoIEZ1bmN0aW9uRGF0YVR5cGVWYXJpYWJsZXNNaXhpbiwgRnVuY3Rpb25EYXRhRm9yRWFjaFBhcmFtZXRlck1peGluCiAgICBpbXBsZW1lbnRzIEZ1bmN0aW9uRGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtGdW5jdGlvbkRhdGFJbXBsXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2Z1bmN0aW9uLWRhdGEnOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlOwogIEZ1bmN0aW9uVHlwZSBfdHlwZTsKCiAgRnVuY3Rpb25EYXRhSW1wbChpci5NZW1iZXIgbm9kZSwgdGhpcy5mdW5jdGlvbk5vZGUsCiAgICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RhdGljVHlwZUNhY2hlIHN0YXRpY1R5cGVzKQogICAgICA6IHN1cGVyKG5vZGUsIGRlZmluaXRpb24sIHN0YXRpY1R5cGVzKTsKCiAgZmFjdG9yeSBGdW5jdGlvbkRhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5NZW1iZXIgbm9kZSA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZSgpOwogICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZTsKICAgIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICBmdW5jdGlvbk5vZGUgPSBub2RlLmZ1bmN0aW9uOwogICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgIGZ1bmN0aW9uTm9kZSA9IG5vZGUuZnVuY3Rpb247CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICJVbmV4cGVjdGVkIG1lbWJlciBub2RlICRub2RlICgke25vZGUucnVudGltZVR5cGV9KS4iKTsKICAgIH0KICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9CiAgICAgICAgbmV3IE1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBTdGF0aWNUeXBlQ2FjaGUgc3RhdGljVHlwZXMgPQogICAgICAgIG5ldyBTdGF0aWNUeXBlQ2FjaGUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgbm9kZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uRGF0YUltcGwobm9kZSwgZnVuY3Rpb25Ob2RlLCBkZWZpbml0aW9uLCBzdGF0aWNUeXBlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKTWVtYmVyRGF0YUtpbmQuZnVuY3Rpb24pOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlck5vZGUobm9kZSk7CiAgICBkZWZpbml0aW9uLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHN0YXRpY1R5cGVzLndyaXRlVG9EYXRhU2luayhzaW5rLCBub2RlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGUgZ2V0RnVuY3Rpb25UeXBlKGNvdmFyaWFudCBKc0tlcm5lbFRvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICByZXR1cm4gX3R5cGUgPz89IGVsZW1lbnRNYXAuZ2V0RnVuY3Rpb25UeXBlKGZ1bmN0aW9uTm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBnZXQgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgewogICAgaWYgKG5vZGUuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnByb3BlcnR5OwogICAgcmV0dXJuIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLm5vbmU7CiAgfQp9CgpjbGFzcyBTaWduYXR1cmVGdW5jdGlvbkRhdGEgaW1wbGVtZW50cyBGdW5jdGlvbkRhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbU2lnbmF0dXJlRnVuY3Rpb25EYXRhXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3NpZ25hdHVyZS1mdW5jdGlvbi1kYXRhJzsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uOwogIGZpbmFsIEludGVyZmFjZVR5cGUgbWVtYmVyVGhpc1R5cGU7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3M7CiAgZmluYWwgTGlzdDxpci5UeXBlUGFyYW1ldGVyPiB0eXBlUGFyYW1ldGVyczsKCiAgU2lnbmF0dXJlRnVuY3Rpb25EYXRhKHRoaXMuZGVmaW5pdGlvbiwgdGhpcy5tZW1iZXJUaGlzVHlwZSwKICAgICAgdGhpcy50eXBlUGFyYW1ldGVycywgdGhpcy5jbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcyk7CgogIGZhY3RvcnkgU2lnbmF0dXJlRnVuY3Rpb25EYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24gPQogICAgICAgIG5ldyBNZW1iZXJEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgSW50ZXJmYWNlVHlwZSBtZW1iZXJUaGlzVHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGUoYWxsb3dOdWxsOiB0cnVlKTsKICAgIExpc3Q8aXIuVHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnMgPSBzb3VyY2UucmVhZFR5cGVQYXJhbWV0ZXJOb2RlcygpOwogICAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgPQogICAgICAgIHNvdXJjZS5yZWFkRW51bShDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy52YWx1ZXMpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBTaWduYXR1cmVGdW5jdGlvbkRhdGEoCiAgICAgICAgZGVmaW5pdGlvbiwgbWVtYmVyVGhpc1R5cGUsIHR5cGVQYXJhbWV0ZXJzLCBjbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLndyaXRlRW51bShKTWVtYmVyRGF0YUtpbmQuc2lnbmF0dXJlKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGRlZmluaXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZURhcnRUeXBlKG1lbWJlclRoaXNUeXBlLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZVR5cGVQYXJhbWV0ZXJOb2Rlcyh0eXBlUGFyYW1ldGVycyk7CiAgICBzaW5rLndyaXRlRW51bShjbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcyk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RhdGljVHlwZUNhY2hlIGdldCBzdGF0aWNUeXBlcyA9PiBjb25zdCBTdGF0aWNUeXBlQ2FjaGUoKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25UeXBlIGdldEZ1bmN0aW9uVHlwZShjb3ZhcmlhbnQgSnNLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlNpZ25hdHVyZUZ1bmN0aW9uRGF0YS5nZXRGdW5jdGlvblR5cGUiKTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICAgIHJldHVybiB0eXBlUGFyYW1ldGVycwogICAgICAgIC5tYXA8VHlwZVZhcmlhYmxlVHlwZT4oKGlyLlR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlcikgewogICAgICByZXR1cm4gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShuZXcgaXIuVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlcikpOwogICAgfSkudG9MaXN0KCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hQYXJhbWV0ZXIoCiAgICAgIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsCiAgICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIHZvaWQgZihEYXJ0VHlwZSB0eXBlLCBTdHJpbmcgbmFtZSwgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0VmFsdWUpLAogICAgICB7Ym9vbCBpc05hdGl2ZTogZmFsc2V9KSB7CiAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCdTaWduYXR1cmVEYXRhLmZvckVhY2hQYXJhbWV0ZXInKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0TWVtYmVyVGhpc1R5cGUoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIG1lbWJlclRoaXNUeXBlOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgRGVsZWdhdGVkRnVuY3Rpb25EYXRhIGltcGxlbWVudHMgRnVuY3Rpb25EYXRhIHsKICBmaW5hbCBGdW5jdGlvbkRhdGEgYmFzZURhdGE7CgogIERlbGVnYXRlZEZ1bmN0aW9uRGF0YSh0aGlzLmJhc2VEYXRhKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25UeXBlIGdldEZ1bmN0aW9uVHlwZShjb3ZhcmlhbnQgSnNLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIGJhc2VEYXRhLmdldEZ1bmN0aW9uVHlwZShlbGVtZW50TWFwKTsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICAgIHJldHVybiBiYXNlRGF0YS5nZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoZWxlbWVudE1hcCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hQYXJhbWV0ZXIoCiAgICAgIEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsCiAgICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIHZvaWQgZihEYXJ0VHlwZSB0eXBlLCBTdHJpbmcgbmFtZSwgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0VmFsdWUpLAogICAgICB7Ym9vbCBpc05hdGl2ZTogZmFsc2V9KSB7CiAgICByZXR1cm4gYmFzZURhdGEuZm9yRWFjaFBhcmFtZXRlcihlbGVtZW50TWFwLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsIGYsCiAgICAgICAgaXNOYXRpdmU6IGlzTmF0aXZlKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0TWVtYmVyVGhpc1R5cGUoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIGJhc2VEYXRhLmdldE1lbWJlclRoaXNUeXBlKGVsZW1lbnRNYXApOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgZ2V0IGNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzID0+CiAgICAgIGJhc2VEYXRhLmNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzOwp9CgpjbGFzcyBHZW5lcmF0b3JCb2R5RnVuY3Rpb25EYXRhIGV4dGVuZHMgRGVsZWdhdGVkRnVuY3Rpb25EYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0dlbmVyYXRvckJvZHlGdW5jdGlvbkRhdGFdIG9iamVjdHMgaW4KICAvLy8gYSBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnZ2VuZXJhdG9yLWJvZHktZGF0YSc7CgogIEBvdmVycmlkZQogIGZpbmFsIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbjsKCiAgR2VuZXJhdG9yQm9keUZ1bmN0aW9uRGF0YShGdW5jdGlvbkRhdGEgYmFzZURhdGEsIHRoaXMuZGVmaW5pdGlvbikKICAgICAgOiBzdXBlcihiYXNlRGF0YSk7CgogIGZhY3RvcnkgR2VuZXJhdG9yQm9keUZ1bmN0aW9uRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU2hhcmUgdGhlIG9yaWdpbmFsIGJhc2UgZGF0YSBvbiBkZXNlcmlhbGl6YXRpb24uCiAgICBGdW5jdGlvbkRhdGEgYmFzZURhdGEgPSBuZXcgSk1lbWJlckRhdGEucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24gPQogICAgICAgIG5ldyBNZW1iZXJEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBHZW5lcmF0b3JCb2R5RnVuY3Rpb25EYXRhKGJhc2VEYXRhLCBkZWZpbml0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJEYXRhS2luZC5nZW5lcmF0b3JCb2R5KTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIGJhc2VEYXRhLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIGRlZmluaXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIFN0YXRpY1R5cGVDYWNoZSBnZXQgc3RhdGljVHlwZXMgPT4gY29uc3QgU3RhdGljVHlwZUNhY2hlKCk7Cn0KCmFic3RyYWN0IGNsYXNzIEpDb25zdHJ1Y3RvckRhdGEgZXh0ZW5kcyBGdW5jdGlvbkRhdGEgewogIENvbnN0YW50Q29uc3RydWN0b3IgZ2V0Q29uc3RydWN0b3JDb25zdGFudCgKICAgICAgSnNLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpOwp9CgpjbGFzcyBKQ29uc3RydWN0b3JEYXRhSW1wbCBleHRlbmRzIEZ1bmN0aW9uRGF0YUltcGwKICAgIGltcGxlbWVudHMgSkNvbnN0cnVjdG9yRGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKQ29uc3RydWN0b3JEYXRhSW1wbF0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdjb25zdHJ1Y3Rvci1kYXRhJzsKCiAgQ29uc3RhbnRDb25zdHJ1Y3RvciBfY29uc3RhbnRDb25zdHJ1Y3RvcjsKICBKQ29uc3RydWN0b3JCb2R5IGNvbnN0cnVjdG9yQm9keTsKCiAgSkNvbnN0cnVjdG9yRGF0YUltcGwoaXIuTWVtYmVyIG5vZGUsIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGUsCiAgICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RhdGljVHlwZUNhY2hlIHN0YXRpY1R5cGVzKQogICAgICA6IHN1cGVyKG5vZGUsIGZ1bmN0aW9uTm9kZSwgZGVmaW5pdGlvbiwgc3RhdGljVHlwZXMpOwoKICBmYWN0b3J5IEpDb25zdHJ1Y3RvckRhdGFJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5NZW1iZXIgbm9kZSA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZSgpOwogICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZTsKICAgIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICBmdW5jdGlvbk5vZGUgPSBub2RlLmZ1bmN0aW9uOwogICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgIGZ1bmN0aW9uTm9kZSA9IG5vZGUuZnVuY3Rpb247CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICJVbmV4cGVjdGVkIG1lbWJlciBub2RlICRub2RlICgke25vZGUucnVudGltZVR5cGV9KS4iKTsKICAgIH0KICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9CiAgICAgICAgbmV3IE1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBTdGF0aWNUeXBlQ2FjaGUgc3RhdGljVHlwZXMgPQogICAgICAgIG5ldyBTdGF0aWNUeXBlQ2FjaGUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgbm9kZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpDb25zdHJ1Y3RvckRhdGFJbXBsKAogICAgICAgIG5vZGUsIGZ1bmN0aW9uTm9kZSwgZGVmaW5pdGlvbiwgc3RhdGljVHlwZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUVudW0oSk1lbWJlckRhdGFLaW5kLmNvbnN0cnVjdG9yKTsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlKG5vZGUpOwogICAgZGVmaW5pdGlvbi53cml0ZVRvRGF0YVNpbmsoc2luayk7CiAgICBhc3NlcnQoY29uc3RydWN0b3JCb2R5ID09IG51bGwpOwogICAgc3RhdGljVHlwZXMud3JpdGVUb0RhdGFTaW5rKHNpbmssIG5vZGUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50Q29uc3RydWN0b3IgZ2V0Q29uc3RydWN0b3JDb25zdGFudCgKICAgICAgSnNLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpIHsKICAgIGlmIChfY29uc3RhbnRDb25zdHJ1Y3RvciA9PSBudWxsKSB7CiAgICAgIGlmIChub2RlIGlzIGlyLkNvbnN0cnVjdG9yICYmIGNvbnN0cnVjdG9yLmlzQ29uc3QpIHsKICAgICAgICBfY29uc3RhbnRDb25zdHJ1Y3RvciA9CiAgICAgICAgICAgIG5ldyBDb25zdGFudGlmaWVyKGVsZW1lbnRNYXApLmNvbXB1dGVDb25zdGFudENvbnN0cnVjdG9yKG5vZGUpOwogICAgICB9IGVsc2UgewogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBjb25zdHJ1Y3RvciwKICAgICAgICAgICAgIlVuZXhwZWN0ZWQgY29uc3RydWN0b3IgJGNvbnN0cnVjdG9yIGluICIKICAgICAgICAgICAgIkNvbnN0cnVjdG9yRGF0YUltcGwuX2dldENvbnN0cnVjdG9yQ29uc3RhbnQiKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9jb25zdGFudENvbnN0cnVjdG9yOwogIH0KCiAgQG92ZXJyaWRlCiAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgZ2V0IGNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzID0+CiAgICAgIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnBhcmFtZXRlcjsKfQoKY2xhc3MgQ29uc3RydWN0b3JCb2R5RGF0YUltcGwgZXh0ZW5kcyBGdW5jdGlvbkRhdGFJbXBsIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0NvbnN0cnVjdG9yQm9keURhdGFJbXBsXSBvYmplY3RzIGluCiAgLy8vIGEgZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2NvbnN0cnVjdG9yLWJvZHktZGF0YSc7CgogIENvbnN0cnVjdG9yQm9keURhdGFJbXBsKGlyLk1lbWJlciBub2RlLCBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlLAogICAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24sIFN0YXRpY1R5cGVDYWNoZSBzdGF0aWNUeXBlcykKICAgICAgOiBzdXBlcihub2RlLCBmdW5jdGlvbk5vZGUsIGRlZmluaXRpb24sIHN0YXRpY1R5cGVzKTsKCiAgZmFjdG9yeSBDb25zdHJ1Y3RvckJvZHlEYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuTWVtYmVyIG5vZGUgPSBzb3VyY2UucmVhZE1lbWJlck5vZGUoKTsKICAgIGlyLkZ1bmN0aW9uTm9kZSBmdW5jdGlvbk5vZGU7CiAgICBpZiAobm9kZSBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgZnVuY3Rpb25Ob2RlID0gbm9kZS5mdW5jdGlvbjsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICBmdW5jdGlvbk5vZGUgPSBub2RlLmZ1bmN0aW9uOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiVW5leHBlY3RlZCBtZW1iZXIgbm9kZSAkbm9kZSAoJHtub2RlLnJ1bnRpbWVUeXBlfSkuIik7CiAgICB9CiAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb24gPQogICAgICAgIG5ldyBNZW1iZXJEZWZpbml0aW9uLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgU3RhdGljVHlwZUNhY2hlIHN0YXRpY1R5cGVzID0KICAgICAgICBuZXcgU3RhdGljVHlwZUNhY2hlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UsIG5vZGUpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RvckJvZHlEYXRhSW1wbCgKICAgICAgICBub2RlLCBmdW5jdGlvbk5vZGUsIGRlZmluaXRpb24sIHN0YXRpY1R5cGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJEYXRhS2luZC5jb25zdHJ1Y3RvckJvZHkpOwogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlck5vZGUobm9kZSk7CiAgICBkZWZpbml0aW9uLndyaXRlVG9EYXRhU2luayhzaW5rKTsKICAgIHN0YXRpY1R5cGVzLndyaXRlVG9EYXRhU2luayhzaW5rLCBub2RlKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIsc3JhKTogQ29uc3RydWN0b3IgYm9kaWVzIHNob3VsZCBhY2Nlc3MgdHlwZSB2YXJpYWJsZXMKICAvLyB0aHJvdWdoIGB0aGlzYC4KICBAb3ZlcnJpZGUKICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBnZXQgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgPT4KICAgICAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MucGFyYW1ldGVyOwp9CgphYnN0cmFjdCBjbGFzcyBKRmllbGREYXRhIGV4dGVuZHMgSk1lbWJlckRhdGEgewogIERhcnRUeXBlIGdldEZpZWxkVHlwZShJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwKTsKCiAgQ29uc3RhbnRFeHByZXNzaW9uIGdldEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uKAogICAgICBKc0tlcm5lbFRvRWxlbWVudE1hcCBlbGVtZW50TWFwKTsKfQoKY2xhc3MgSkZpZWxkRGF0YUltcGwgZXh0ZW5kcyBKTWVtYmVyRGF0YUltcGwgaW1wbGVtZW50cyBKRmllbGREYXRhIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pGaWVsZERhdGFJbXBsXSBvYmplY3RzIGluCiAgLy8vIGEgZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2ZpZWxkLWRhdGEnOwoKICBEYXJ0VHlwZSBfdHlwZTsKICBDb25zdGFudEV4cHJlc3Npb24gX2NvbnN0YW50RXhwcmVzc2lvbjsKCiAgSkZpZWxkRGF0YUltcGwoCiAgICAgIGlyLkZpZWxkIG5vZGUsIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiwgU3RhdGljVHlwZUNhY2hlIHN0YXRpY1R5cGVzKQogICAgICA6IHN1cGVyKG5vZGUsIGRlZmluaXRpb24sIHN0YXRpY1R5cGVzKTsKCiAgZmFjdG9yeSBKRmllbGREYXRhSW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuTWVtYmVyIG5vZGUgPSBzb3VyY2UucmVhZE1lbWJlck5vZGUoKTsKICAgIE1lbWJlckRlZmluaXRpb24gZGVmaW5pdGlvbiA9CiAgICAgICAgbmV3IE1lbWJlckRlZmluaXRpb24ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBTdGF0aWNUeXBlQ2FjaGUgc3RhdGljVHlwZXMgPQogICAgICAgIG5ldyBTdGF0aWNUeXBlQ2FjaGUucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSwgbm9kZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEpGaWVsZERhdGFJbXBsKG5vZGUsIGRlZmluaXRpb24sIHN0YXRpY1R5cGVzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsud3JpdGVFbnVtKEpNZW1iZXJEYXRhS2luZC5maWVsZCk7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZShub2RlKTsKICAgIGRlZmluaXRpb24ud3JpdGVUb0RhdGFTaW5rKHNpbmspOwogICAgc3RhdGljVHlwZXMud3JpdGVUb0RhdGFTaW5rKHNpbmssIG5vZGUpOwogICAgc2luay5lbmQodGFnKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkZpZWxkIGdldCBub2RlID0+IHN1cGVyLm5vZGU7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldEZpZWxkVHlwZShjb3ZhcmlhbnQgSnNLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIF90eXBlID8/PSBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gZ2V0RmllbGRDb25zdGFudEV4cHJlc3Npb24oCiAgICAgIEpzS2VybmVsVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICAgIGlmIChfY29uc3RhbnRFeHByZXNzaW9uID09IG51bGwpIHsKICAgICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICAgIF9jb25zdGFudEV4cHJlc3Npb24gPQogICAgICAgICAgICBuZXcgQ29uc3RhbnRpZmllcihlbGVtZW50TWFwKS52aXNpdChub2RlLmluaXRpYWxpemVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgZGVmaW5pdGlvbi5sb2NhdGlvbiwKICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZmllbGQgJHtkZWZpbml0aW9ufSBpbiAiCiAgICAgICAgICAgICJGaWVsZERhdGFJbXBsLmdldEZpZWxkQ29uc3RhbnQiKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9jb25zdGFudEV4cHJlc3Npb247CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBnZXQgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgewogICAgaWYgKG5vZGUuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLmluc3RhbmNlRmllbGQ7CiAgICByZXR1cm4gQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3Mubm9uZTsKICB9Cn0KCmNsYXNzIEpUeXBlZGVmRGF0YSB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtKVHlwZWRlZkRhdGFdIG9iamVjdHMgaW4KICAvLy8gYSBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAndHlwZWRlZi1kYXRhJzsKCiAgZmluYWwgaXIuVHlwZWRlZiBub2RlOwogIGZpbmFsIFR5cGVkZWZUeXBlIHJhd1R5cGU7CgogIEpUeXBlZGVmRGF0YSh0aGlzLm5vZGUsIHRoaXMucmF3VHlwZSk7CgogIGZhY3RvcnkgSlR5cGVkZWZEYXRhLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5UeXBlZGVmIG5vZGUgPSBzb3VyY2UucmVhZFR5cGVkZWZOb2RlKCk7CiAgICBUeXBlZGVmVHlwZSByYXdUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZSgpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBKVHlwZWRlZkRhdGEobm9kZSwgcmF3VHlwZSk7CiAgfQoKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlVHlwZWRlZk5vZGUobm9kZSk7CiAgICBzaW5rLndyaXRlRGFydFR5cGUocmF3VHlwZSk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgSlR5cGVWYXJpYWJsZURhdGEgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbSlR5cGVWYXJpYWJsZURhdGFdIG9iamVjdHMgaW4KICAvLy8gYSBkZWJ1Z2dpbmcgZGF0YSBzdHJlYW0uCiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAndHlwZS12YXJpYWJsZS1kYXRhJzsKCiAgZmluYWwgaXIuVHlwZVBhcmFtZXRlciBub2RlOwogIERhcnRUeXBlIF9ib3VuZDsKICBEYXJ0VHlwZSBfZGVmYXVsdFR5cGU7CgogIEpUeXBlVmFyaWFibGVEYXRhKHRoaXMubm9kZSk7CgogIGZhY3RvcnkgSlR5cGVWYXJpYWJsZURhdGEucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLlR5cGVQ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c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBzaG93IExpbmssIExpbmtCdWlsZGVyOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2Nsb3N1cmUuZGFydCcgc2hvdyBCb3hMb2NhbCwgVGhpc0xvY2FsOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2NvbXBpbGVfdGltZV9jb25zdGFudHMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0cnVjdG9ycy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvZXZhbHVhdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9kZWZlcnJlZF9sb2FkLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0eV91dGlscy5kYXJ0JyBhcyB1dGlsczsKaW1wb3J0ICcuLi9lbGVtZW50cy9pbmRleGVkLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2Vudmlyb25tZW50LmRhcnQnOwppbXBvcnQgJy4uL2lyL2NhY2hlZF9zdGF0aWNfdHlwZS5kYXJ0JzsKaW1wb3J0ICcuLi9pci9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2lyL2RlYnVnLmRhcnQnOwppbXBvcnQgJy4uL2lyL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL2lyL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3Zpc2l0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3N0YXRpY190eXBlX2Jhc2UuZGFydCc7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGVfY2FjaGUuZGFydCc7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGVfcHJvdmlkZXIuZGFydCc7CmltcG9ydCAnLi4vaXIvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAnLi4va2VybmVsL2VsZW1lbnRfbWFwX2ltcGwuZGFydCc7CmltcG9ydCAnLi4va2VybmVsL2Vudi5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwva2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9iZWhhdmlvci5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL29yZGVyZWRfdHlwZXNldC5kYXJ0JzsKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CmltcG9ydCAnLi4vc3NhL3R5cGVfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9tZW1iZXJfdXNhZ2UuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CgppbXBvcnQgJ2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnZWxlbWVudHMuZGFydCc7CmltcG9ydCAnZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnZW52LmRhcnQnOwppbXBvcnQgJ2xvY2Fscy5kYXJ0JzsKCmNsYXNzIEpzS2VybmVsVG9FbGVtZW50TWFwIGltcGxlbWVudHMgSnNUb0VsZW1lbnRNYXAsIElyVG9FbGVtZW50TWFwIHsKICAvLy8gVGFnIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgW0pzS2VybmVsVG9FbGVtZW50TWFwXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2pzLWtlcm5lbC10by1lbGVtZW50LW1hcCc7CgogIC8vLyBUYWdzIHVzZWQgZm9yIGlkZW50aWZ5aW5nIHNlcmlhbGl6ZWQgc3Vic2VjdGlvbnMgb2YgYQogIC8vLyBbSnNLZXJuZWxUb0VsZW1lbnRNYXBdIG9iamVjdCBpbiBhIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIGxpYnJhcnlUYWcgPSAnbGlicmFyaWVzJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGNsYXNzVGFnID0gJ2NsYXNzZXMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgdHlwZWRlZlRhZyA9ICd0eXBlZGVmcyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBtZW1iZXJUYWcgPSAnbWVtYmVycyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0eXBlVmFyaWFibGVUYWcgPSAndHlwZS12YXJpYWJsZXMnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbGlicmFyeURhdGFUYWcgPSAnbGlicmFyeS1kYXRhJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGNsYXNzRGF0YVRhZyA9ICdjbGFzcy1kYXRhJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHR5cGVkZWZEYXRhVGFnID0gJ3R5cGVkZWYtZGF0YSc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBtZW1iZXJEYXRhVGFnID0gJ21lbWJlci1kYXRhJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHR5cGVWYXJpYWJsZURhdGFUYWcgPSAndHlwZS12YXJpYWJsZS1kYXRhJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG5lc3RlZENsb3N1cmVzVGFnID0gJ25lc3RlZC1jbG9zdXJlcyc7CgogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zOwogIEBvdmVycmlkZQogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlcjsKICBDb21tb25FbGVtZW50c0ltcGwgX2NvbW1vbkVsZW1lbnRzOwogIEpzRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgRGFydFR5cGVDb252ZXJ0ZXIgX3R5cGVDb252ZXJ0ZXI7CiAgSnNDb25zdGFudEVudmlyb25tZW50IF9jb25zdGFudEVudmlyb25tZW50OwogIEtlcm5lbERhcnRUeXBlcyBfdHlwZXM7CiAgaXIuVHlwZUVudmlyb25tZW50IF90eXBlRW52aXJvbm1lbnQ7CiAgaXIuQ2xhc3NIaWVyYXJjaHkgX2NsYXNzSGllcmFyY2h5OwogIENvbnN0YW50VmFsdWVmaWVyIF9jb25zdGFudFZhbHVlZmllcjsKCiAgLy8vIExpYnJhcnkgZW52aXJvbm1lbnQuIFVzZWQgZm9yIGZhc3QgbG9va3VwLgogIEpQcm9ncmFtRW52IHByb2dyYW1FbnY7CgogIGZpbmFsIEVudGl0eURhdGFFbnZNYXA8SW5kZXhlZExpYnJhcnksIEpMaWJyYXJ5RGF0YSwgSkxpYnJhcnlFbnY+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/NRpERCA7BAEMRCdJDgQBDEE1GkZGIDsEAgFGLyoBKgEMQU4nBAIBK3BhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX21vZGVsL2pzX3dvcmxkLmRhcnQ8c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfbW9kZWwvanNfd29ybGRfYnVpbGRlci5kYXJ0wACNey8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZGVmZXJyZWRfbG9hZC5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9pbmRleGVkLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pci9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9iYWNrZW5kX3VzYWdlLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ub19zdWNoX21ldGhvZF9yZWdpc3RyeS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwva2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9iZWhhdmlvci5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jbGFzc19zZXQuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvZmVhdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9tZW1iZXJfdXNhZ2UuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CmltcG9ydCAnY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50X21hcF9pbXBsLmRhcnQnOwppbXBvcnQgJ2pzX3dvcmxkLmRhcnQnOwppbXBvcnQgJ2xvY2Fscy5kYXJ0JzsKCmNsYXNzIEpzQ2xvc2VkV29ybGRCdWlsZGVyIHsKICBmaW5hbCBKc0tlcm5lbFRvRWxlbWVudE1hcCBfZWxlbWVudE1hcDsKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIENsYXNzSGllcmFyY2h5Tm9kZT4gX2NsYXNzSGllcmFyY2h5Tm9kZXMgPQogICAgICBuZXcgQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcCgpOwogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3NTZXQ+IF9jbGFzc1NldHMgPSA8Q2xhc3NFbnRpdHksIENsYXNzU2V0Pnt9OwogIGZpbmFsIEdsb2JhbExvY2Fsc01hcCBfZ2xvYmFsTG9jYWxzTWFwOwogIGZpbmFsIENsb3N1cmVEYXRhQnVpbGRlciBfY2xvc3VyZURhdGFCdWlsZGVyOwogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBmaW5hbCBBYnN0cmFjdFZhbHVlU3RyYXRlZ3kgX2Fic3RyYWN0VmFsdWVTdHJhdGVneTsKCiAgSnNDbG9zZWRXb3JsZEJ1aWxkZXIodGhpcy5fZWxlbWVudE1hcCwgdGhpcy5fZ2xvYmFsTG9jYWxzTWFwLAogICAgICB0aGlzLl9jbG9zdXJlRGF0YUJ1aWxkZXIsIHRoaXMuX29wdGlvbnMsIHRoaXMuX2Fic3RyYWN0VmFsdWVTdHJhdGVneSk7CgogIEVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PiBfZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQ7CiAgQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50cyA9PiBfZWxlbWVudE1hcC5jb21tb25FbGVtZW50czsKCiAgSnNDbG9zZWRXb3JsZCBjb252ZXJ0Q2xvc2VkV29ybGQoCiAgICAgIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgTWFwPE1lbWJlckVudGl0eSwgQ2xvc3VyZVNjb3BlTW9kZWw+IGNsb3N1cmVNb2RlbHMsCiAgICAgIE91dHB1dFVuaXREYXRhIGtPdXRwdXRVbml0RGF0YSkgewogICAgSnNUb0Zyb250ZW5kTWFwIG1hcCA9IG5ldyBKc1RvRnJvbnRlbmRNYXBJbXBsKF9lbGVtZW50TWFwKTsKCiAgICBCYWNrZW5kVXNhZ2UgYmFja2VuZFVzYWdlID0KICAgICAgICBfY29udmVydEJhY2tlbmRVc2FnZShtYXAsIGNsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZSk7CiAgICBOYXRpdmVEYXRhIG5hdGl2ZURhdGEgPSBfY29udmVydE5hdGl2ZURhdGEobWFwLCBjbG9zZWRXb3JsZC5uYXRpdmVEYXRhKTsKICAgIF9lbGVtZW50TWFwLm5hdGl2ZURhdGEgPSBuYXRpdmVEYXRhOwogICAgSW50ZXJjZXB0b3JEYXRhIGludGVyY2VwdG9yRGF0YSA9CiAgICAgICAgX2NvbnZlcnRJbnRlcmNlcHRvckRhdGEobWFwLCBuYXRpdmVEYXRhLCBjbG9zZWRXb3JsZC5pbnRlcmNlcHRvckRhdGEpOwoKICAgIFNldDxDbGFzc0VudGl0eT4gaW1wbGVtZW50ZWRDbGFzc2VzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgICAvLy8gQ29udmVydHMgW25vZGVdIGZyb20gdGhlIGZyb250ZW5kIHdvcmxkIHRvIHRoZSBjb3JyZXNwb25kaW5nCiAgICAvLy8gW0NsYXNzSGllcmFyY2h5Tm9kZV0gZm9yIHRoZSBiYWNrZW5kIHdvcmxkLgogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIGNvbnZlcnRDbGFzc0hpZXJhcmNoeU5vZGUoQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUpIHsKICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gbWFwLnRvQmFja2VuZENsYXNzKG5vZGUuY2xzKTsKICAgICAgaWYgKGNsb3NlZFdvcmxkLmlzSW1wbGVtZW50ZWQobm9kZS5jbHMpKSB7CiAgICAgICAgaW1wbGVtZW50ZWRDbGFzc2VzLmFkZChjbHMpOwogICAgICB9CiAgICAgIENsYXNzSGllcmFyY2h5Tm9kZSBuZXdOb2RlID0gX2NsYXNzSGllcmFyY2h5Tm9kZXMucHV0SWZBYnNlbnQoY2xzLCAoKSB7CiAgICAgICAgQ2xhc3NIaWVyYXJjaHlOb2RlIHBhcmVudE5vZGU7CiAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZSAhPSBudWxsKSB7CiAgICAgICAgICBwYXJlbnROb2RlID0gY29udmVydENsYXNzSGllcmFyY2h5Tm9kZShub2RlLnBhcmVudE5vZGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IENsYXNzSGllcmFyY2h5Tm9kZShwYXJlbnROb2RlLCBjbHMsIG5vZGUuaGllcmFyY2h5RGVwdGgpOwogICAgICB9KTsKICAgICAgbmV3Tm9kZS5pc0Fic3RyYWN0bHlJbnN0YW50aWF0ZWQgPSBub2RlLmlzQWJzdHJhY3RseUluc3RhbnRpYXRlZDsKICAgICAgbmV3Tm9kZS5pc0RpcmVjdGx5SW5zdGFudGlhdGVkID0gbm9kZS5pc0RpcmVjdGx5SW5zdGFudGlhdGVkOwogICAgICByZXR1cm4gbmV3Tm9kZTsKICAgIH0KCiAgICAvLy8gQ29udmVydHMgW2NsYXNzU2V0XSBmcm9tIHRoZSBmcm9udGVuZCB3b3JsZCB0byB0aGUgY29ycmVzcG9uZGluZwogICAgLy8vIFtDbGFzc1NldF0gZm9yIHRoZSBiYWNrZW5kIHdvcmxkLgogICAgQ2xhc3NTZXQgY29udmVydENsYXNzU2V0KENsYXNzU2V0IGNsYXNzU2V0KSB7CiAgICAgIENsYXNzRW50aXR5IGNscyA9IG1hcC50b0JhY2tlbmRDbGFzcyhjbGFzc1NldC5jbHMpOwogICAgICByZXR1cm4gX2NsYXNzU2V0cy5wdXRJZkFic2VudChjbHMsICgpIHsKICAgICAgICBDbGFzc0hpZXJhcmNoeU5vZGUgbmV3Tm9kZSA9IGNvbnZlcnRDbGFzc0hpZXJhcmNoeU5vZGUoY2xhc3NTZXQubm9kZSk7CiAgICAgICAgQ2xhc3NTZXQgbmV3Q2xhc3NTZXQgPSBuZXcgQ2xhc3NTZXQobmV3Tm9kZSk7CiAgICAgICAgZm9yIChDbGFzc0hpZXJhcmNoeU5vZGUgc3VidHlwZSBpbiBjbGFzc1NldC5zdWJ0eXBlTm9kZXMpIHsKICAgICAgICAgIENsYXNzSGllcmFyY2h5Tm9kZSBuZXdTdWJ0eXBlID0gY29udmVydENsYXNzSGllcmFyY2h5Tm9kZShzdWJ0eXBlKTsKICAgICAgICAgIG5ld0NsYXNzU2V0LmFkZFN1YnR5cGUobmV3U3VidHlwZSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXdDbGFzc1NldDsKICAgICAgfSk7CiAgICB9CgogICAgY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkKICAgICAgICAuZ2V0Q2xhc3NIaWVyYXJjaHlOb2RlKGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKQogICAgICAgIC5mb3JFYWNoU3ViY2xhc3MoKENsYXNzRW50aXR5IGNscykgewogICAgICBjb252ZXJ0Q2xhc3NTZXQoY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuZ2V0Q2xhc3NTZXQoY2xzKSk7CiAgICAgIHJldHVybiBJdGVyYXRpb25TdGVwLkNPTlRJTlVFOwogICAgfSwgQ2xhc3NIaWVyYXJjaHlOb2RlLkFMTCk7CgogICAgU2V0PE1lbWJlckVudGl0eT4gbGl2ZUluc3RhbmNlTWVtYmVycyA9CiAgICAgICAgbWFwLnRvQmFja2VuZE1lbWJlclNldChjbG9zZWRXb3JsZC5saXZlSW5zdGFuY2VNZW1iZXJzKTsKCiAgICBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IG1peGluVXNlcyA9CiAgICAgICAgbWFwLnRvQmFja2VuZENsYXNzTWFwKGNsb3NlZFdvcmxkLm1peGluVXNlcywgbWFwLnRvQmFja2VuZENsYXNzU2V0KTsKCiAgICBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IHR5cGVzSW1wbGVtZW50ZWRCeVN1YmNsYXNzZXMgPQogICAgICAgIG1hcC50b0JhY2tlbmRDbGFzc01hcCgKICAgICAgICAgICAgY2xvc2VkV29ybGQudHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3NlcywgbWFwLnRvQmFja2VuZENsYXNzU2V0KTsKCiAgICBTZXQ8TWVtYmVyRW50aXR5PiBhc3NpZ25lZEluc3RhbmNlTWVtYmVycyA9CiAgICAgICAgbWFwLnRvQmFja2VuZE1lbWJlclNldChjbG9zZWRXb3JsZC5hc3NpZ25lZEluc3RhbmNlTWVtYmVycyk7CgogICAgU2V0PENsYXNzRW50aXR5PiBsaXZlTmF0aXZlQ2xhc3NlcyA9CiAgICAgICAgbWFwLnRvQmFja2VuZENsYXNzU2V0KGNsb3NlZFdvcmxkLmxpdmVOYXRpdmVDbGFzc2VzKTsKCiAgICBTZXQ8TWVtYmVyRW50aXR5PiBwcm9jZXNzZWRNZW1iZXJzID0KICAgICAgICBtYXAudG9CYWNrZW5kTWVtYmVyU2V0KGNsb3NlZFdvcmxkLmxpdmVNZW1iZXJVc2FnZS5rZXlzKTsKCiAgICBSdW50aW1lVHlwZXNOZWVkIHJ0aU5lZWQ7CgogICAgTGlzdDxGdW5jdGlvbkVudGl0eT4gY2FsbE1ldGhvZHMgPSA8RnVuY3Rpb25FbnRpdHk+W107CiAgICBDbG9zdXJlRGF0YSBjbG9zdXJlRGF0YTsKICAgIGlmIChfb3B0aW9ucy5kaXNhYmxlUnRpT3B0aW1pemF0aW9uKSB7CiAgICAgIHJ0aU5lZWQgPSBuZXcgVHJpdmlhbFJ1bnRpbWVUeXBlc05lZWQoKTsKICAgICAgY2xvc3VyZURhdGEgPSBfY2xvc3VyZURhdGFCdWlsZGVyLmNyZWF0ZUNsb3N1cmVFbnRpdGllcygKICAgICAgICAgIHRoaXMsCiAgICAgICAgICBtYXAudG9CYWNrZW5kTWVtYmVyTWFwKGNsb3N1cmVNb2RlbHMsIGlkZW50aXR5KSwKICAgICAgICAgIGNvbnN0IFRyaXZpYWxDbG9zdXJlUnRpTmVlZCgpLAogICAgICAgICAgY2FsbE1ldGhvZHMpOwogICAgfSBlbHNlIHsKICAgICAgUnVudGltZVR5cGVzTmVlZEltcGwga2VybmVsUnRpTmVlZCA9IGNsb3NlZFdvcmxkLnJ0aU5lZWQ7CiAgICAgIFNldDxpci5Mb2NhbEZ1bmN0aW9uPiBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1NpZ25hdHVyZSA9CiAgICAgICAgICBuZXcgU2V0PGlyLkxvY2FsRnVuY3Rpb24+KCk7CiAgICAgIGZvciAoS0xvY2FsRnVuY3Rpb24gbG9jYWxGdW5jdGlvbgogICAgICAgICAgaW4ga2VybmVsUnRpTmVlZC5sb2NhbEZ1bmN0aW9uc05lZWRpbmdTaWduYXR1cmUpIHsKICAgICAgICBpci5Mb2NhbEZ1bmN0aW9uIG5vZGUgPSBsb2NhbEZ1bmN0aW9uLm5vZGU7CiAgICAgICAgbG9jYWxGdW5jdGlvbnNOb2Rlc05lZWRpbmdTaWduYXR1cmUuYWRkKG5vZGUpOwogICAgICB9CiAgICAgIFNldDxpci5Mb2NhbEZ1bmN0aW9uPiBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1R5cGVBcmd1bWVudHMgPQogICAgICAgICAgbmV3IFNldDxpci5Mb2NhbEZ1bmN0aW9uPigpOwogICAgICBmb3IgKEtMb2NhbEZ1bmN0aW9uIGxvY2FsRnVuY3Rpb24KICAgICAgICAgIGluIGtlcm5lbFJ0aU5lZWQubG9jYWxGdW5jdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cykgewogICAgICAgIGlyLkxvY2FsRnVuY3Rpb24gbm9kZSA9IGxvY2FsRnVuY3Rpb24ubm9kZTsKICAgICAgICBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1R5cGVBcmd1bWVudHMuYWRkKG5vZGUpOwogICAgICB9CgogICAgICBSdW50aW1lVHlwZXNOZWVkSW1wbCBqUnRpTmVlZCA9CiAgICAgICAgICBfY29udmVydFJ1bnRpbWVUeXBlc05lZWQobWFwLCBiYWNrZW5kVXNhZ2UsIGtlcm5lbFJ0aU5lZWQpOwogICAgICBjbG9zdXJlRGF0YSA9IF9jbG9zdXJlRGF0YUJ1aWxkZXIuY3JlYXRlQ2xvc3VyZUVudGl0aWVzKAogICAgICAgICAgdGhpcywKICAgICAgICAgIG1hcC50b0JhY2tlbmRNZW1iZXJNYXAoY2xvc3VyZU1vZGVscywgaWRlbnRpdHkpLAogICAgICAgICAgbmV3IEpzQ2xvc3VyZVJ0aU5lZWQoCiAgICAgICAgICAgICAgalJ0aU5lZWQsCiAgICAgICAgICAgICAgbG9jYWxGdW5jdGlvbnNOb2Rlc05lZWRpbmdUeXBlQXJndW1lbnRzLAogICAgICAgICAgICAgIGxvY2FsRnVuY3Rpb25zTm9kZXNOZWVkaW5nU2lnbmF0dXJlKSwKICAgICAgICAgIGNhbGxNZXRob2RzKTsKCiAgICAgIExpc3Q8RnVuY3Rpb25FbnRpdHk+IGNhbGxNZXRob2RzTmVlZGluZ1NpZ25hdHVyZSA9IDxGdW5jdGlvbkVudGl0eT5bXTsKICAgICAgZm9yIChpci5Mb2NhbEZ1bmN0aW9uIG5vZGUgaW4gbG9jYWxGdW5jdGlvbnNOb2Rlc05lZWRpbmdTaWduYXR1cmUpIHsKICAgICAgICBjYWxsTWV0aG9kc05lZWRpbmdTaWduYXR1cmUKICAgICAgICAgICAgLmFkZChjbG9zdXJlRGF0YS5nZXRDbG9zdXJlSW5mbyhub2RlKS5jYWxsTWV0aG9kKTsKICAgICAgfQogICAgICBMaXN0PEZ1bmN0aW9uRW50aXR5PiBjYWxsTWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzID0gPEZ1bmN0aW9uRW50aXR5PltdOwogICAgICBmb3IgKGlyLkxvY2FsRnVuY3Rpb24gbm9kZSBpbiBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1R5cGVBcmd1bWVudHMpIHsKICAgICAgICBjYWxsTWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzCiAgICAgICAgICAgIC5hZGQoY2xvc3VyZURhdGEuZ2V0Q2xvc3VyZUluZm8obm9kZSkuY2FsbE1ldGhvZCk7CiAgICAgIH0KICAgICAgalJ0aU5lZWQubWV0aG9kc05lZWRpbmdTaWduYXR1cmUuYWRkQWxsKGNhbGxNZXRob2RzTmVlZGluZ1NpZ25hdHVyZSk7CiAgICAgIGpSdGlOZWVkLm1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50cwogICAgICAgICAgLmFkZEFsbChjYWxsTWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzKTsKCiAgICAgIHJ0aU5lZWQgPSBqUnRpTmVlZDsKICAgIH0KCiAgICBOb1N1Y2hNZXRob2REYXRhSW1wbCBvbGROb1N1Y2hNZXRob2REYXRhID0gY2xvc2VkV29ybGQubm9TdWNoTWV0aG9kRGF0YTsKICAgIE5vU3VjaE1ldGhvZERhdGEgbm9TdWNoTWV0aG9kRGF0YSA9IG5ldyBOb1N1Y2hNZXRob2REYXRhSW1wbCgKICAgICAgICBtYXAudG9CYWNrZW5kRnVuY3Rpb25TZXQob2xkTm9TdWNoTWV0aG9kRGF0YS50aHJvd2luZ0ltcGxzKSwKICAgICAgICBtYXAudG9CYWNrZW5kRnVuY3Rpb25TZXQob2xkTm9TdWNoTWV0aG9kRGF0YS5vdGhlckltcGxzKSwKICAgICAgICBtYXAudG9CYWNrZW5kRnVuY3Rpb25TZXQob2xkTm9TdWNoTWV0aG9kRGF0YS5mb3J3YXJkaW5nU3ludGF4SW1wbHMpKTsKCiAgICBKRmllbGRBbmFseXNpcyBhbGxvY2F0b3JBbmFseXNpcyA9CiAgICAgICAgSkZpZWxkQW5hbHlzaXMuZnJvbShjbG9zZWRXb3JsZCwgbWFwLCBfb3B0aW9ucyk7CgogICAgQW5ub3RhdGlvbnNEYXRhSW1wbCBvbGRBbm5vdGF0aW9uc0RhdGEgPSBjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGE7CiAgICBBbm5vdGF0aW9uc0RhdGEgYW5ub3RhdGlvbnNEYXRhID0gbmV3IEFubm90YXRpb25zRGF0YUltcGwoX29wdGlvbnMsCiAgICAgICAgbWFwLnRvQmFja2VuZE1lbWJlck1hcChvbGRBbm5vdGF0aW9uc0RhdGEucHJhZ21hQW5ub3RhdGlvbnMsIGlkZW50aXR5KSk7CgogICAgT3V0cHV0VW5pdERhdGEgb3V0cHV0VW5pdERhdGEgPQogICAgICAgIF9jb252ZXJ0T3V0cHV0VW5pdERhdGEobWFwLCBrT3V0cHV0VW5pdERhdGEsIGNsb3N1cmVEYXRhKTsKCiAgICBNYXA8TWVtYmVyRW50aXR5LCBNZW1iZXJBY2Nlc3M+IG1lbWJlckFjY2VzcyA9IG1hcC50b0JhY2tlbmRNZW1iZXJNYXAoCiAgICAgICAgY2xvc2VkV29ybGQubGl2ZU1lbWJlclVzYWdlLAogICAgICAgIChNZW1iZXJVc2FnZSB1c2FnZSkgPT4KICAgICAgICAgICAgbmV3IE1lbWJlckFjY2Vzcyh1c2FnZS5yZWFkcywgdXNhZ2Uud3JpdGVzLCB1c2FnZS5pbnZva2VzKSk7CgogICAgcmV0dXJuIG5ldyBKc0Nsb3NlZFdvcmxkKAogICAgICAgIF9lbGVtZW50TWFwLAogICAgICAgIG5hdGl2ZURhdGEsCiAgICAgICAgaW50ZXJjZXB0b3JEYXRhLAogICAgICAgIGJhY2tlbmRVc2FnZSwKICAgICAgICBydGlOZWVkLAogICAgICAgIGFsbG9jYXRvckFuYWx5c2lzLAogICAgICAgIG5vU3VjaE1ldGhvZERhdGEsCiAgICAgICAgaW1wbGVtZW50ZWRDbGFzc2VzLAogICAgICAgIGxpdmVOYXRpdmVDbGFzc2VzLAogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEluY2x1ZGUgdGhlIGNhbGwgbWV0aG9kIHdoZW4gd2UgY2FuIGFsc28KICAgICAgICAvLyByZXByZXNlbnQgdGhlIHN5bnRoZXNpemVkIGNhbGwgbWV0aG9kcyBmb3Igc3RhdGljIGFuZCBpbnN0YW5jZSBtZXRob2QKICAgICAgICAvLyBjbG9zdXJpemF0aW9ucy4KICAgICAgICBsaXZlSW5zdGFuY2VNZW1iZXJzIC8qLi5hZGRBbGwoY2FsbE1ldGhvZHMpKi8sCiAgICAgICAgYXNzaWduZWRJbnN0YW5jZU1lbWJlcnMsCiAgICAgICAgcHJvY2Vzc2VkTWVtYmVycywKICAgICAgICBtaXhpblVzZXMsCiAgICAgICAgdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3NlcywKICAgICAgICBuZXcgQ2xhc3NIaWVyYXJjaHlJbXBsKAogICAgICAgICAgICBfZWxlbWVudE1hcC5jb21tb25FbGVtZW50cywgX2NsYXNzSGllcmFyY2h5Tm9kZXMsIF9jbGFzc1NldHMpLAogICAgICAgIF9hYnN0cmFjdFZhbHVlU3RyYXRlZ3ksCiAgICAgICAgYW5ub3RhdGlvbnNEYXRhLAogICAgICAgIF9nbG9iYWxMb2NhbHNNYXAsCiAgICAgICAgY2xvc3VyZURhdGEsCiAgICAgICAgb3V0cHV0VW5pdERhdGEsCiAgICAgICAgbWVtYmVyQWNjZXNzKTsKICB9CgogIEJhY2tlbmRVc2FnZSBfY29udmVydEJhY2tlbmRVc2FnZSgKICAgICAgSnNUb0Zyb250ZW5kTWFwIG1hcCwgQmFja2VuZFVzYWdlSW1wbCBiYWNrZW5kVXNhZ2UpIHsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMgPQogICAgICAgIG1hcC50b0JhY2tlbmRGdW5jdGlvblNldChiYWNrZW5kVXNhZ2UuZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMpOwogICAgU2V0PENsYXNzRW50aXR5PiBnbG9iYWxDbGFzc0RlcGVuZGVuY2llcyA9CiAgICAgICAgbWFwLnRvQmFja2VuZENsYXNzU2V0KGJhY2tlbmRVc2FnZS5nbG9iYWxDbGFzc0RlcGVuZGVuY2llcyk7CiAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IGhlbHBlckZ1bmN0aW9uc1VzZWQgPQogICAgICAgIG1hcC50b0JhY2tlbmRGdW5jdGlvblNldChiYWNrZW5kVXNhZ2UuaGVscGVyRnVuY3Rpb25zVXNlZCk7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IGhlbHBlckNsYXNzZXNVc2VkID0KICAgICAgICBtYXAudG9CYWNrZW5kQ2xhc3NTZXQoYmFja2VuZFVzYWdlLmhlbHBlckNsYXNzZXNVc2VkKTsKICAgIFNldDxSdW50aW1lVHlwZVVzZT4gcnVudGltZVR5cGVVc2VzID0KICAgICAgICBiYWNrZW5kVXNhZ2UucnVudGltZVR5cGVVc2VzLm1hcCgoUnVudGltZVR5cGVVc2UgcnVudGltZVR5cGVVc2UpIHsKICAgICAgcmV0dXJuIG5ldyBSdW50aW1lVHlwZVVzZSgKICAgICAgICAgIHJ1bnRpbWVUeXBlVXNlLmtpbmQsCiAgICAgICAgICBtYXAudG9CYWNrZW5kVHlwZShydW50aW1lVHlwZVVzZS5yZWNlaXZlclR5cGUpLAogICAgICAgICAgbWFwLnRvQmFja2VuZFR5cGUocnVudGltZVR5cGVVc2UuYXJndW1lbnRUeXBlKSk7CiAgICB9KS50b1NldCgpOwoKICAgIHJldHVybiBuZXcgQmFja2VuZFVzYWdlSW1wbCgKICAgICAgICBnbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llczogZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMsCiAgICAgICAgZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXM6IGdsb2JhbENsYXNzRGVwZW5kZW5jaWVzLAogICAgICAgIGhlbHBlckZ1bmN0aW9uc1VzZWQ6IGhlbHBlckZ1bmN0aW9uc1VzZWQsCiAgICAgICAgaGVscGVyQ2xhc3Nlc1VzZWQ6IGhlbHBlckNsYXNzZXNVc2VkLAogICAgICAgIG5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWc6CiAgICAgICAgICAgIGJhY2tlbmRVc2FnZS5uZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnLAogICAgICAgIG5lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5OgogICAgICAgICAgICBiYWNrZW5kVXNhZ2UubmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHksCiAgICAgICAgcmVxdWlyZXNQcmVhbWJsZTogYmFja2VuZFVzYWdlLnJlcXVpcmVzUHJlYW1ibGUsCiAgICAgICAgcnVudGltZVR5cGVVc2VzOiBydW50aW1lVHlwZVVzZXMsCiAgICAgICAgaXNGdW5jdGlvbkFwcGx5VXNlZDogYmFja2VuZFVzYWdlLmlzRnVuY3Rpb25BcHBseVVzZWQsCiAgICAgICAgaXNNaXJyb3JzVXNlZDogYmFja2VuZFVzYWdlLmlzTWlycm9yc1VzZWQsCiAgICAgICAgaXNOb1N1Y2hNZXRob2RVc2VkOiBiYWNrZW5kVXNhZ2UuaXNOb1N1Y2hNZXRob2RVc2VkLAogICAgICAgIGlzSHRtbExvYWRlZDogYmFja2VuZFVzYWdlLmlzSHRtbExvYWRlZCk7CiAgfQoKICBOYXRpdmVCYXNpY0RhdGEgX2NvbnZlcnROYXRpdmVCYXNpY0RhdGEoCiAgICAgIEpzVG9Gcm9udGVuZE1hcCBtYXAsIE5hdGl2ZUJhc2ljRGF0YUltcGwgbmF0aXZlQmFzaWNEYXRhKSB7CiAgICBNYXA8Q2xhc3NFbnRpdHksIE5hdGl2ZUNsYXNzVGFnPiBuYXRpdmVDbGFzc1RhZ0luZm8gPQogICAgICAgIDxDbGFzc0VudGl0eSwgTmF0aXZlQ2xhc3NUYWc+e307CiAgICBuYXRpdmVCYXNpY0RhdGEubmF0aXZlQ2xhc3NUYWdJbmZvCiAgICAgICAgLmZvckVhY2goKENsYXNzRW50aXR5IGNscywgTmF0aXZlQ2xhc3NUYWcgdGFnKSB7CiAgICAgIG5hdGl2ZUNsYXNzVGFnSW5mb1ttYXAudG9CYWNrZW5kQ2xhc3MoY2xzKV0gPSB0YWc7CiAgICB9KTsKICAgIE1hcDxMaWJyYXJ5RW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcExpYnJhcmllcyA9CiAgICAgICAgbWFwLnRvQmFja2VuZExpYnJhcnlNYXAobmF0aXZlQmFzaWNEYXRhLmpzSW50ZXJvcExpYnJhcmllcywgaWRlbnRpdHkpOwogICAgTWFwPENsYXNzRW50aXR5LCBTdHJpbmc+IGpzSW50ZXJvcENsYXNzZXMgPQogICAgICAgIG1hcC50b0JhY2tlbmRDbGFzc01hcChuYXRpdmVCYXNpY0RhdGEuanNJbnRlcm9wQ2xhc3NlcywgaWRlbnRpdHkpOwogICAgU2V0PENsYXNzRW50aXR5PiBhbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzID0KICAgICAgICBtYXAudG9CYWNrZW5kQ2xhc3NTZXQobmF0aXZlQmFzaWNEYXRhLmFub255bW91c0pzSW50ZXJvcENsYXNzZXMpOwogICAgTWFwPE1lbWJlckVudGl0eSwgU3RyaW5nPiBqc0ludGVyb3BNZW1iZXJzID0KICAgICAgICBtYXAudG9CYWNrZW5kTWVtYmVyTWFwKG5hdGl2ZUJhc2ljRGF0YS5qc0ludGVyb3BNZW1iZXJzLCBpZGVudGl0eSk7CiAgICByZXR1cm4gbmV3IE5hdGl2ZUJhc2ljRGF0YUltcGwoCiAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICBuYXRpdmVDbGFzc1RhZ0luZm8sCiAgICAgICAganNJbnRlcm9wTGlicmFyaWVzLAogICAgICAgIGpzSW50ZXJvcENsYXNzZXMsCiAgICAgICAgYW5vbnltb3VzSnNJbnRlcm9wQ2xhc3NlcywKICAgICAgICBqc0ludGVyb3BNZW1iZXJzKTsKICB9CgogIE5hdGl2ZURhdGEgX2NvbnZlcnROYXRpdmVEYXRhKAogICAgICBKc1RvRnJvbnRlbmRNYXAgbWFwLCBOYXRpdmVEYXRhSW1wbCBuYXRpdmVEYXRhKSB7CiAgICBjb252ZXJ0TmF0aXZlQmVoYXZpb3JUeXBlKHR5cGUpIHsKICAgICAgaWYgKHR5cGUgaXMgRGFydFR5cGUpIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCBmcmVlIHZhcmlhYmxlcyBpbiB0eXBlcy4gSWYgdGhlIHR5cGUKICAgICAgICAvLyBwdWxsZWQgZnJvbSBhIGdlbmVyaWMgZnVuY3Rpb24gdHlwZSBpdCBtaWdodCBjb250YWluIGEgZnVuY3Rpb24KICAgICAgICAvLyB0eXBlIHZhcmlhYmxlIHRoYXQgc2hvdWxkIHByb2JhYmx5IGhhdmUgYmVlbiByZXBsYWNlZCBieSBpdHMgYm91bmQuCiAgICAgICAgcmV0dXJuIG1hcC50b0JhY2tlbmRUeXBlKHR5cGUsIGFsbG93RnJlZVZhcmlhYmxlczogdHJ1ZSk7CiAgICAgIH0KICAgICAgYXNzZXJ0KHR5cGUgaXMgU3BlY2lhbFR5cGUpOwogICAgICByZXR1cm4gdHlwZTsKICAgIH0KCiAgICBOYXRpdmVCZWhhdmlvciBjb252ZXJ0TmF0aXZlQmVoYXZpb3IoTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IpIHsKICAgICAgTmF0aXZlQmVoYXZpb3IgbmV3QmVoYXZpb3IgPSBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKCiAgICAgIGZvciAoZHluYW1pYyB0eXBlIGluIGJlaGF2aW9yLnR5cGVzUmV0dXJuZWQpIHsKICAgICAgICBuZXdCZWhhdmlvci50eXBlc1JldHVybmVkLmFkZChjb252ZXJ0TmF0aXZlQmVoYXZpb3JUeXBlKHR5cGUpKTsKICAgICAgfQogICAgICBmb3IgKGR5bmFtaWMgdHlwZSBpbiBiZWhhdmlvci50eXBlc0luc3RhbnRpYXRlZCkgewogICAgICAgIG5ld0JlaGF2aW9yLnR5cGVzSW5zdGFudGlhdGVkLmFkZChjb252ZXJ0TmF0aXZlQmVoYXZpb3JUeXBlKHR5cGUpKTsKICAgICAgfQoKICAgICAgbmV3QmVoYXZpb3IuY29kZVRlbXBsYXRlVGV4dCA9IGJlaGF2aW9yLmNvZGVUZW1wbGF0ZVRleHQ7CiAgICAgIG5ld0JlaGF2aW9yLmNvZGVUZW1wbGF0ZSA9IGJlaGF2aW9yLmNvZGVUZW1wbGF0ZTsKICAgICAgbmV3QmVoYXZpb3IudGhyb3dCZWhhdmlvciA9IGJlaGF2aW9yLnRocm93QmVoYXZpb3I7CiAgICAgIG5ld0JlaGF2aW9yLmlzQWxsb2NhdGlvbiA9IGJlaGF2aW9yLmlzQWxsb2NhdGlvbjsKICAgICAgbmV3QmVoYXZpb3IudXNlR3ZuID0gYmVoYXZpb3IudXNlR3ZuOwogICAgICByZXR1cm4gbmV3QmVoYXZpb3I7CiAgICB9CgogICAgTmF0aXZlQmFzaWNEYXRhIG5hdGl2ZUJhc2ljRGF0YSA9IF9jb252ZXJ0TmF0aXZlQmFzaWNEYXRhKG1hcCwgbmF0aXZlRGF0YSk7CgogICAgTWFwPE1lbWJlckVudGl0eSwgU3RyaW5nPiBuYXRpdmVNZW1iZXJOYW1lID0KICAgICAgICBtYXAudG9CYWNrZW5kTWVtYmVyTWFwKG5hdGl2ZURhdGEubmF0aXZlTWVtYmVyTmFtZSwgaWRlbnRpdHkpOwogICAgTWFwPEZ1bmN0aW9uRW50aXR5LCBOYXRpdmVCZWhhdmlvcj4gbmF0aXZlTWV0aG9kQmVoYXZpb3IgPQogICAgICAgIDxGdW5jdGlvbkVudGl0eSwgTmF0aXZlQmVoYXZpb3I+e307CiAgICBuYXRpdmVEYXRhLm5hdGl2ZU1ldGhvZEJlaGF2aW9yCiAgICAgICAgLmZvckVhY2goKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCwgTmF0aXZlQmVoYXZpb3IgYmVoYXZpb3IpIHsKICAgICAgRnVuY3Rpb25FbnRpdHkgYmFja2VuZE1ldGhvZCA9IG1hcC50b0JhY2tlbmRNZW1iZXIobWV0aG9kKTsKICAgICAgaWYgKGJhY2tlbmRNZXRob2QgIT0gbnVsbCkgewogICAgICAgIC8vIElmIFttZXRob2RdIGlzbid0IHVzZWQgaXQgZG9lc24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBiYWNrZW5kCiAgICAgICAgLy8gbWV0aG9kLgogICAgICAgIG5hdGl2ZU1ldGhvZEJlaGF2aW9yW2JhY2tlbmRNZXRob2RdID0gY29udmVydE5hdGl2ZUJlaGF2aW9yKGJlaGF2aW9yKTsKICAgICAgfQogICAgfSk7CiAgICBNYXA8TWVtYmVyRW50aXR5LCBOYXRpdmVCZWhhdmlvcj4gbmF0aXZlRmllbGRMb2FkQmVoYXZpb3IgPQogICAgICAgIG1hcC50b0JhY2tlbmRNZW1iZXJNYXAoCiAgICAgICAgICAgIG5hdGl2ZURhdGEubmF0aXZlRmllbGRMb2FkQmVoYXZpb3IsIGNvbnZlcnROYXRpdmVCZWhhdmlvcik7CiAgICBNYXA8TWVtYmVyRW50aXR5LCBOYXRpdmVCZWhhdmlvcj4gbmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yID0KICAgICAgICBtYXAudG9CYWNrZW5kTWVtYmVyTWFwKAogICAgICAgICAgICBuYXRpdmVEYXRhLm5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvciwgY29udmVydE5hdGl2ZUJlaGF2aW9yKTsKICAgIHJldHVybiBuZXcgTmF0aXZlRGF0YUltcGwoCiAgICAgICAgbmF0aXZlQmFzaWNEYXRhLAogICAgICAgIG5hdGl2ZU1lbWJlck5hbWUsCiAgICAgICAgbmF0aXZlTWV0aG9kQmVoYXZpb3IsCiAgICAgICAgbmF0aXZlRmllbGRMb2FkQmVoYXZpb3IsCiAgICAgICAgbmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yKTsKICB9CgogIEludGVyY2VwdG9yRGF0YSBfY29udmVydEludGVyY2VwdG9yRGF0YShKc1RvRnJvbnRlbmRNYXAgbWFwLAogICAgICBOYXRpdmVEYXRhIG5hdGl2ZURhdGEsIEludGVyY2VwdG9yRGF0YUltcGwgaW50ZXJjZXB0b3JEYXRhKSB7CiAgICBNYXA8U3RyaW5nLCBTZXQ8TWVtYmVyRW50aXR5Pj4gaW50ZXJjZXB0ZWRNZW1iZXJzID0KICAgICAgICA8U3RyaW5nLCBTZXQ8TWVtYmVyRW50aXR5Pj57fTsKICAgIGludGVyY2VwdG9yRGF0YS5pbnRlcmNlcHRlZE1lbWJlcnMKICAgICAgICAuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIFNldDxNZW1iZXJFbnRpdHk+IG1lbWJlcnMpIHsKICAgICAgaW50ZXJjZXB0ZWRNZW1iZXJzW25hbWVdID0gbWFwLnRvQmFja2VuZE1lbWJlclNldChtZW1iZXJzKTsKICAgIH0pOwogICAgcmV0dXJuIG5ldyBJbnRlcmNlcHRvckRhdGFJbXBsKAogICAgICAgIG5hdGl2ZURhdGEsCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLAogICAgICAgIGludGVyY2VwdGVkTWVtYmVycywKICAgICAgICBtYXAudG9CYWNrZW5kQ2xhc3NTZXQoaW50ZXJjZXB0b3JEYXRhLmludGVyY2VwdGVkQ2xhc3NlcyksCiAgICAgICAgbWFwLnRvQmFja2VuZENsYXNzU2V0KAogICAgICAgICAgICBpbnRlcmNlcHRvckRhdGEuY2xhc3Nlc01peGVkSW50b0ludGVyY2VwdGVkQ2xhc3NlcykpOwogIH0KCiAgUnVudGltZVR5cGVzTmVlZCBfY29udmVydFJ1bnRpbWVUeXBlc05lZWQoSnNUb0Zyb250ZW5kTWFwIG1hcCwKICAgICAgQmFja2VuZFVzYWdlIGJhY2tlbmRVc2FnZSwgUnVudGltZVR5cGVzTmVlZEltcGwgcnRpTmVlZCkgewogICAgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzTmVlZGluZ1R5cGVBcmd1bWVudHMgPQogICAgICAgIG1hcC50b0JhY2tlbmRDbGFzc1NldChydGlOZWVkLmNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50cyk7CiAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IG1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50cyA9CiAgICAgICAgbWFwLnRvQmFja2VuZEZ1bmN0aW9uU2V0KHJ0aU5lZWQubWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzKTsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gbWV0aG9kc05lZWRpbmdTaWduYXR1cmUgPQogICAgICAgIG1hcC50b0JhY2tlbmRGdW5jdGlvblNldChydGlOZWVkLm1ldGhvZHNOZWVkaW5nU2lnbmF0dXJlKTsKICAgIFNldDxTZWxlY3Rvcj4gc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHMgPQogICAgICAgIHJ0aU5lZWQuc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHMubWFwKChTZWxlY3RvciBzZWxlY3RvcikgewogICAgICBpZiAoc2VsZWN0b3IubWVtYmVyTmFtZS5pc1ByaXZhdGUpIHsKICAgICAgICByZXR1cm4gbmV3IFNlbGVjdG9yKAogICAgICAgICAgICBzZWxlY3Rvci5raW5kLAogICAgICAgICAgICBuZXcgUHJpdmF0ZU5hbWUoc2VsZWN0b3IubWVtYmVyTmFtZS50ZXh0LAogICAgICAgICAgICAgICAgbWFwLnRvQmFja2VuZExpYnJhcnkoc2VsZWN0b3IubWVtYmVyTmFtZS5saWJyYXJ5KSwKICAgICAgICAgICAgICAgIGlzU2V0dGVyOiBzZWxlY3Rvci5tZW1iZXJOYW1lLmlzU2V0dGVyKSwKICAgICAgICAgICAgc2VsZWN0b3IuY2FsbFN0cnVjdHVyZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHNlbGVjdG9yOwogICAgfSkudG9TZXQoKTsKICAgIHJldHVybiBuZXcgUnVudGltZVR5cGVzTmVlZEltcGwoCiAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICBjbGFzc2VzTmVlZGluZ1R5cGVBcmd1bWVudHMsCiAgICAgICAgbWV0aG9kc05lZWRpbmdTaWduYXR1cmUsCiAgICAgICAgbWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzLAogICAgICAgIG51bGwsCiAgICAgICAgbnVsbCwKICAgICAgICBzZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50cywKICAgICAgICBydGlOZWVkLmluc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHMpOwogIH0KCiAgLy8vIENvbnN0cnVjdCBhIGNsb3N1cmUgY2xhc3MgYW5kIHNldCB1cCB0aGUgbmVjZXNzYXJ5IGNsYXNzIGluZmVyZW5jZQogIC8vLyBoaWVyYXJjaHkuCiAgS2VybmVsQ2xvc3VyZUNsYXNzSW5mbyBidWlsZENsb3N1cmVDbGFzcygKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciwKICAgICAgaXIuRnVuY3Rpb25Ob2RlIG9yaWdpbmFsQ2xvc3VyZUZ1bmN0aW9uTm9kZSwKICAgICAgSkxpYnJhcnkgZW5jbG9zaW5nTGlicmFyeSwKICAgICAgTWFwPExvY2FsLCBKUmVjb3JkRmllbGQ+IGJveGVkVmFyaWFibGVzLAogICAgICBLZXJuZWxTY29wZUluZm8gaW5mbywKICAgICAgS2VybmVsVG9Mb2NhbHNNYXAgbG9jYWxzTWFwLAogICAgICB7Ym9vbCBjcmVhdGVTaWduYXR1cmVNZXRob2R9KSB7CiAgICBDbGFzc0VudGl0eSBzdXBlcmNsYXNzID0gX2NvbW1vbkVsZW1lbnRzLmNsb3N1cmVDbGFzczsKCiAgICBLZXJuZWxDbG9zdXJlQ2xhc3NJbmZvIGNsb3N1cmVDbGFzc0luZm8gPSBfZWxlbWVudE1hcC5jb25zdHJ1Y3RDbG9zdXJlQ2xhc3MoCiAgICAgICAgbWVtYmVyLAogICAgICAgIG9yaWdpbmFsQ2xvc3VyZUZ1bmN0aW9uTm9kZSwKICAgICAgICBlbmNsb3NpbmdMaWJyYXJ5LAogICAgICAgIGJveGVkVmFyaWFibGVzLAogICAgICAgIGluZm8sCiAgICAgICAgbG9jYWxzTWFwLAogICAgICAgIG5ldyBJbnRlcmZhY2VUeXBlKHN1cGVyY2xhc3MsIGNvbnN0IFtdKSwKICAgICAgICBjcmVhdGVTaWduYXR1cmVNZXRob2Q6IGNyZWF0ZVNpZ25hdHVyZU1ldGhvZCk7CgogICAgLy8gVGVsbCB0aGUgaGllcmFyY2h5IHRoYXQgdGhpcyBpcyB0aGUgc3VwZXIgY2xhc3MuIHRoZW4gd2UgY2FuIHVzZQogICAgLy8gLmdldFN1cGVydHlwZXMoY2xhc3MpCiAgICBDbGFzc0hpZXJhcmNoeU5vZGUgcGFyZW50Tm9kZSA9IF9jbGFzc0hpZXJhcmNoeU5vZGVzW3N1cGVyY2xhc3NdOwogICAgQ2xhc3NIaWVyYXJjaHlOb2RlIG5vZGUgPSBuZXcgQ2xhc3NIaWVyYXJjaHlOb2RlKHBhcmVudE5vZGUsCiAgICAgICAgY2xvc3VyZUNsYXNzSW5mby5jbG9zdXJlQ2xhc3NFbnRpdHksIHBhcmVudE5vZGUuaGllcmFyY2h5RGVwdGggKyAxKTsKICAgIF9jbGFzc0hpZXJhcmNoeU5vZGVzW2Nsb3N1cmVDbGFzc0luZm8uY2xvc3VyZUNsYXNzRW50aXR5XSA9IG5vZGU7CiAgICBfY2xhc3NTZXRzW2Nsb3N1cmVDbGFzc0luZm8uY2xvc3VyZUNsYXNzRW50aXR5XSA9IG5ldyBDbGFzc1NldChub2RlKTsKICAgIG5vZGUuaXNEaXJlY3RseUluc3RhbnRpYXRlZCA9IHRydWU7CgogICAgcmV0dXJuIGNsb3N1cmVDbGFzc0luZm87CiAgfQoKICBPdXRwdXRVbml0RGF0YSBfY29udmVydE91dHB1dFVuaXREYXRhKEpzVG9Gcm9udGVuZE1hcEltcGwgbWFwLAogICAgICBPdXRwdXRVbml0RGF0YSBkYXRhLCBDbG9zdXJlRGF0YSBjbG9zdXJlRGF0YUxvb2t1cCkgewogICAgLy8gQ29udmVydCBmcm9udC1lbmQgbWFwcyBjb250YWluaW5nIEstY2xhc3MgYW5kIEstbG9jYWwgZnVuY3Rpb24ga2V5cyB0byBhCiAgICAvLyBiYWNrZW5kIG1hcCB1c2luZyBKLWNsYXNzZXMgYXMga2V5cy4KICAgIE1hcDxDbGFzc0VudGl0eSwgT3V0cHV0VW5pdD4gY29udmVydENsYXNzTWFwKAogICAgICAgIE1hcDxDbGFzc0VudGl0eSwgT3V0cHV0VW5pdD4gY2xhc3NNYXAsCiAgICAgICAgTWFwPExvY2FsLCBPdXRwdXRVbml0PiBsb2NhbEZ1bmN0aW9uTWFwKSB7CiAgICAgIHZhciByZXN1bHQgPSA8Q2xhc3NFbnRpdHksIE91dHB1dFVuaXQ+e307CiAgICAgIGNsYXNzTWFwLmZvckVhY2goKENsYXNzRW50aXR5IGVudGl0eSwgT3V0cHV0VW5pdCB1bml0KSB7CiAgICAgICAgQ2xhc3NFbnRpdHkgYmFja2VuZEVudGl0eSA9IG1hcC50b0JhY2tlbmRDbGFzcyhlbnRpdHkpOwogICAgICAgIGlmIChiYWNrZW5kRW50aXR5ICE9IG51bGwpIHsKICAgICAgICAgIC8vIElmIFtlbnRpdHldIGlzbid0IHVzZWQgaXQgZG9lc24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBiYWNrZW5kCiAgICAgICAgICAvLyBlbnRpdHkuCiAgICAgICAgICByZXN1bHRbYmFja2VuZEVudGl0eV0gPSB1bml0OwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGxvY2FsRnVuY3Rpb25NYXAuZm9yRWFjaCgoTG9jYWwgZW50aXR5LCBPdXRwdXRVbml0IHVuaXQpIHsKICAgICAgICAvLyBFbnN1cmUgY2xvc3VyZSBjbGFzc2VzIGFyZSBpbmNsdWRlZCBpbiB0aGUgb3V0cHV0IHVuaXQgY29ycmVzcG9uZGluZwogICAgICAgIC8vIHRvIHRoZSBsb2NhbCBmdW5jdGlvbi4KICAgICAgICBpZiAoZW50aXR5IGlzIEtMb2NhbEZ1bmN0aW9uKSB7CiAgICAgICAgICB2YXIgY2xvc3VyZUluZm8gPSBjbG9zdXJlRGF0YUxvb2t1cC5nZXRDbG9zdXJlSW5mbyhlbnRpdHkubm9kZSk7CiAgICAgICAgICByZXN1bHRbY2xvc3VyZUluZm8uY2xvc3VyZUNsYXNzRW50aXR5XSA9IHVuaXQ7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICAvLyBDb252ZXJ0IGZyb250LWVuZCBtYXBzIGNvbnRhaW5pbmcgSy1tZW1iZXIgYW5kIEstbG9jYWwgZnVuY3Rpb24ga2V5cyB0bwogICAgLy8gYSBiYWNrZW5kIG1hcCB1c2luZyBKLW1lbWJlcnMgYXMga2V5cy4KICAgIE1hcDxNZW1iZXJFbnRpdHksIE91dHB1dFVuaXQ+IGNvbnZlcnRNZW1iZXJNYXAoCiAgICAgICAgTWFwPE1lbWJlckVudGl0eSwgT3V0cHV0VW5pdD4gbWVtYmVyTWFwLAogICAgICAgIE1hcDxMb2NhbCwgT3V0cHV0VW5pdD4gbG9jYWxGdW5jdGlvbk1hcCkgewogICAgICB2YXIgcmVzdWx0ID0gPE1lbWJlckVudGl0eSwgT3V0cHV0VW5pdD57fTsKICAgICAgbWVtYmVyTWFwLmZvckVhY2goKE1lbWJlckVudGl0eSBlbnRpdHksIE91dHB1dFVuaXQgdW5pdCkgewogICAgICAgIE1lbWJlckVudGl0eSBiYWNrZW5kRW50aXR5ID0gbWFwLnRvQmFja2VuZE1lbWJlcihlbnRpdHkpOwogICAgICAgIGlmIChiYWNrZW5kRW50aXR5ICE9IG51bGwpIHsKICAgICAgICAgIC8vIElmIFtlbnRpdHldIGlzbid0IHVzZWQgaXQgZG9lc24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBiYWNrZW5kCiAgICAgICAgICAvLyBlbnRpdHkuCiAgICAgICAgICByZXN1bHRbYmFja2VuZEVudGl0eV0gPSB1bml0OwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGxvY2FsRnVuY3Rpb25NYXAuZm9yRWFjaCgoTG9jYWwgZW50aXR5LCBPdXRwdXRVbml0IHVuaXQpIHsKICAgICAgICAvLyBFbnN1cmUgY2xvc3VyZSBjYWxsLW1ldGhvZHMgYXJlIGluY2x1ZGVkIGluIHRoZSBvdXRwdXQgdW5pdAogICAgICAgIC8vIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGxvY2FsIGZ1bmN0aW9uLgogICAgICAgIGlmIChlbnRpdHkgaXMgS0xvY2FsRnVuY3Rpb24pIHsKICAgICAgICAgIHZhciBjbG9zdXJlSW5mbyA9IGNsb3N1cmVEYXRhTG9va3VwLmdldENsb3N1cmVJbmZvKGVudGl0eS5ub2RlKTsKICAgICAgICAgIHJlc3VsdFtjbG9zdXJlSW5mby5jYWxsTWV0aG9kXSA9IHVuaXQ7CiAgICAgICAgICBpZiAoY2xvc3VyZUluZm8uc2lnbmF0dXJlTWV0aG9kICE9IG51bGwpIHsKICAgICAgICAgICAgcmVzdWx0W2Nsb3N1cmVJbmZvLnNpZ25hdHVyZU1ldGhvZF0gPSB1bml0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgcmV0dXJuIG5ldyBPdXRwdXRVbml0RGF0YS5mcm9tKAogICAgICAgIGRhdGEsCiAgICAgICAgbWFwLnRvQmFja2VuZExpYnJhcnksCiAgICAgICAgY29udmVydENsYXNzTWFwLAogICAgICAgIGNvbnZlcnRNZW1iZXJNYXAsCiAgICAgICAgKG0pID0+IGNvbnZlcnRNYXA8Q29uc3RhbnRWYWx1ZSwgT3V0cHV0VW5pdCwgT3V0cHV0VW5pdD4oCiAgICAgICAgICAgIG0sIG1hcC50b0JhY2tlbmRDb25zdGFudCwgKHYpID0+IHYpKTsKICB9Cn0KCmNsYXNzIFRyaXZpYWxDbG9zdXJlUnRpTmVlZCBpbXBsZW1lbnRzIENsb3N1cmVSdGlOZWVkIHsKICBjb25zdCBUcml2aWFsQ2xvc3VyZVJ0aU5lZWQoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBsb2NhbEZ1bmN0aW9uTmVlZHNTaWduYXR1cmUoaXIuTm9kZSBub2RlKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKENsYXNzRW50aXR5IGNscykgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBtZXRob2ROZWVkc1R5cGVBcmd1bWVudHMoRnVuY3Rpb25FbnRpdHkgbWV0aG9kKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGxvY2FsRnVuY3Rpb25OZWVkc1R5cGVBcmd1bWVudHMoaXIuTm9kZSBub2RlKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIHNlbGVjdG9yTmVlZHNUeXBlQXJndW1lbnRzKFNlbGVjdG9yIHNlbGVjdG9yKSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIG1ldGhvZE5lZWRzU2lnbmF0dXJlKE1lbWJlckVudGl0eSBtZXRob2QpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgaW5zdGFudGlhdGlvbk5lZWRzVHlwZUFyZ3VtZW50cygKICAgICAgICAgIERhcnRUeXBlIGZ1bmN0aW9uVHlwZSwgaW50IHR5cGVBcmd1bWVudENvdW50KSA9PgogICAgICB0cnVlOwp9CgpjbGFzcyBKc0Nsb3N1cmVSdGlOZWVkIGltcGxlbWVudHMgQ2xvc3VyZVJ0aU5lZWQgewogIGZpbmFsIFJ1bnRpbWVUeXBlc05lZWQgcnRpTmVlZDsKICBmaW5hbCBTZXQ8aXIuTG9jYWxGdW5jdGlvbj4gbG9jYWxGdW5jdGlvbnNOb2Rlc05lZWRpbmdUeXBlQXJndW1lbnRzOwogIGZpbmFsIFNldDxpci5Mb2NhbEZ1bmN0aW9uPiBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1NpZ25hdHVyZTsKCiAgSnNDbG9zdXJlUnRpTmVlZCh0aGlzLnJ0aU5lZWQsIHRoaXMubG9jYWxGdW5jdGlvbnNOb2Rlc05lZWRpbmdUeXBlQXJndW1lbnRzLAogICAgICB0aGlzLmxvY2FsRnVuY3Rpb25zTm9kZXNOZWVkaW5nU2lnbmF0dXJlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBsb2NhbEZ1bmN0aW9uTmVlZHNTaWduYXR1cmUoaXIuTG9jYWxGdW5jdGlvbiBub2RlKSB7CiAgICByZXR1cm4gbG9jYWxGdW5jdGlvbnNOb2Rlc05lZWRpbmdTaWduYXR1cmUuY29udGFpbnMobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKENsYXNzRW50aXR5IGNscykgPT4KICAgICAgcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhjbHMpOwoKICBAb3ZlcnJpZGUKICBib29sIG1ldGhvZE5lZWRzVHlwZUFyZ3VtZW50cyhGdW5jdGlvbkVudGl0eSBtZXRob2QpID0+CiAgICAgIHJ0aU5lZWQubWV0aG9kTmVlZHNUeXBlQXJndW1lbnRzKG1ldGhvZCk7CgogIEBvdmVycmlkZQogIGJvb2wgbG9jYWxGdW5jdGlvbk5lZWRzVHlwZUFyZ3VtZW50cyhpci5Mb2NhbEZ1bmN0aW9uIG5vZGUpIHsKICAgIHJldHVybiBsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1R5cGVBcmd1bWVudHMuY29udGFpbnMobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHNlbGVjdG9yTmVlZHNUeXBlQXJndW1lbnRzKFNlbGVjdG9yIHNlbGVjdG9yKSA9PgogICAgICBydGlOZWVkLnNlbGVjdG9yTmVlZHNUeXBlQXJndW1lbnRzKHNlbGVjdG9yKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBtZXRob2ROZWVkc1NpZ25hdHVyZShNZW1iZXJFbnRpdHkgbWV0aG9kKSA9PgogICAgICBydGlOZWVkLm1ldGhvZE5lZWRzU2lnbmF0dXJlKG1ldGhvZCk7CgogIEBvdmVycmlkZQogIGJvb2wgaW5zdGFudGlhdGlvbk5lZWRzVHlwZUFyZ3VtZW50cygKICAgICAgICAgIERhcnRUeXBlIGZ1bmN0aW9uVHlwZSwgaW50IHR5cGVBcmd1bWVudENvdW50KSA9PgogICAgICBydGlOZWVkLmluc3RhbnRpYXRpb25OZWVkc1R5cGVBcmd1bWVudHMoZnVuY3Rpb25UeXBlLCB0eXBlQXJndW1lbnRDb3VudCk7Cn0KCi8vLyBNYXAgZnJvbSAnZnJvbnRlbmQnIHRvICdiYWNrZW5kJyBlbGVtZW50cy4KLy8vCi8vLyBGcm9udGVuZCBlbGVtZW50cyBhcmUgd2hhdCB3ZSByZWFkIGluLCB0aGVzZSB0eXBpY2FsbHkgcmVwcmVzZW50cyBjb25jZXB0cwovLy8gaW4gRGFydC4gQmFja2VuZCBlbGVtZW50cyBhcmUgd2hhdCB3ZSBnZW5lcmF0ZSwgdGhlc2UgbWF5IGluY2x1ZGUgZWxlbWVudHMKLy8vIHRoYXQgZG8gbm90IGNvcnJlc3BvbmQgdG8gYSBEYXJ0IGNvbmNlcHQsIHN1Y2ggYXMgY2xvc3VyZSBjbGFzc2VzLgovLy8KLy8vIFF1ZXJ5aW5nIGZvciB0aGUgZnJvbnRlbmQgZWxlbWVudCBmb3IgYSBiYWNrZW5kLW9ubHkgZWxlbWVudCB0aHJvd3MgYW4KLy8vIGV4Y2VwdGlvbi4KYWJzdHJhY3QgY2xhc3MgSnNUb0Zyb250ZW5kTWFwIHsKICBMaWJyYXJ5RW50aXR5IHRvQmFja2VuZExpYnJhcnkoTGlicmFyeUVudGl0eSBsaWJyYXJ5KTsKCiAgQ2xhc3NFbnRpdHkgdG9CYWNrZW5kQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgdGhlIGJhY2tlbmQgbWVtYmVyIGNvcnJlc3BvbmRpbmcgdG8gW21lbWJlcl0uIElmIGEgbWVtYmVyIGlzbid0CiAgLy8vIGxpdmUsIGl0IGRvZXNuJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgYmFja2VuZCBtZW1iZXIgYW5kIGBudWxsYCBpcwogIC8vLyByZXR1cm5lZCBpbnN0ZWFkLgogIE1lbWJlckVudGl0eSB0b0JhY2tlbmRNZW1iZXIoTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIERhcnRUeXBlIHRvQmFja2VuZFR5cGUoRGFydFR5cGUgdHlwZSwge2Jvb2wgYWxsb3dGcmVlVmFyaWFibGVzOiBmYWxzZX0pOwoKICBDb25zdGFudFZhbHVlIHRvQmFja2VuZENvbnN0YW50KENvbnN0YW50VmFsdWUgdmFsdWUsIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgU2V0PExpYnJhcnlFbnRpdHk+IHRvQmFja2VuZExpYnJhcnlTZXQoSXRlcmFibGU8TGlicmFyeUVudGl0eT4gc2V0KSB7CiAgICByZXR1cm4gc2V0Lm1hcCh0b0JhY2tlbmRMaWJyYXJ5KS50b1NldCgpOwogIH0KCiAgU2V0PENsYXNzRW50aXR5PiB0b0JhY2tlbmRDbGFzc1NldChJdGVyYWJsZTxDbGFzc0VudGl0eT4gc2V0KSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBGaWx0ZXIgdW51c2VkIGNsYXNzZXMuCiAgICByZXR1cm4gc2V0Lm1hcCh0b0JhY2tlbmRDbGFzcykudG9TZXQoKTsKICB9CgogIFNldDxNZW1iZXJFbnRpdHk+IHRvQmFja2VuZE1lbWJlclNldChJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IHNldCkgewogICAgcmV0dXJuIHNldC5tYXAodG9CYWNrZW5kTWVtYmVyKS53aGVyZSgoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICAvLyBNZW1iZXJzIHRoYXQgYXJlIG5vdCBsaXZlIGRvbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGJhY2tlbmQgbWVtYmVyLgogICAgICByZXR1cm4gbWVtYmVyICE9IG51bGw7CiAgICB9KS50b1NldCgpOwogIH0KCiAgU2V0PEZpZWxkRW50aXR5PiB0b0JhY2tlbmRGaWVsZFNldChJdGVyYWJsZTxGaWVsZEVudGl0eT4gc2V0KSB7CiAgICBTZXQ8RmllbGRFbnRpdHk+IG5ld1NldCA9IG5ldyBTZXQ8RmllbGRFbnRpdHk+KCk7CiAgICBmb3IgKEZpZWxkRW50aXR5IGVsZW1lbnQgaW4gc2V0KSB7CiAgICAgIEZpZWxkRW50aXR5IGJhY2tlbmRGaWVsZCA9IHRvQmFja2VuZE1lbWJlcihlbGVtZW50KTsKICAgICAgaWYgKGJhY2tlbmRGaWVsZCAhPSBudWxsKSB7CiAgICAgICAgLy8gTWVtYmVycyB0aGF0IGFyZSBub3QgbGl2ZSBkb24ndCBoYXZlIGEgY29ycmVzcG9uZGluZyBiYWNrZW5kIG1lbWJlci4KICAgICAgICBuZXdTZXQuYWRkKGJhY2tlbmRGaWVsZCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXdTZXQ7CiAgfQoKICBTZXQ8RnVuY3Rpb25FbnRpdHk+IHRvQmFja2VuZEZ1bmN0aW9uU2V0KEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBzZXQpIHsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gbmV3U2V0ID0gbmV3IFNldDxGdW5jdGlvbkVudGl0eT4oKTsKICAgIGZvciAoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCBpbiBzZXQpIHsKICAgICAgRnVuY3Rpb25FbnRpdHkgYmFja2VuZEZ1bmN0aW9uID0gdG9CYWNrZW5kTWVtYmVyKGVsZW1lbnQpOwogICAgICBpZiAoYmFja2VuZEZ1bmN0aW9uICE9IG51bGwpIHsKICAgICAgICAvLyBNZW1iZXJzIHRoYXQgYXJlIG5vdCBsaXZlIGRvbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIGJhY2tlbmQgbWVtYmVyLgogICAgICAgIG5ld1NldC5hZGQoYmFja2VuZEZ1bmN0aW9uKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ld1NldDsKICB9CgogIE1hcDxMaWJyYXJ5RW50aXR5LCBWPiB0b0JhY2tlbmRMaWJyYXJ5TWFwPFY+KAogICAgICBNYXA8TGlicmFyeUVudGl0eSwgVj4gbWFwLCBWIGNvbnZlcnQoViB2YWx1ZSkpIHsKICAgIHJldHVybiBjb252ZXJ0TWFwKG1hcCwgdG9CYWNrZW5kTGlicmFyeSwgY29udmVydCk7CiAgfQoKICBNYXA8Q2xhc3NFbnRpdHksIFY+IHRvQmFja2VuZENsYXNzTWFwPFY+KAogICAgICBNYXA8Q2xhc3NFbnRpdHksIFY+IG1hcCwgViBjb252ZXJ0KFYgdmFsdWUpKSB7CiAgICByZXR1cm4gY29udmVydE1hcChtYXAsIHRvQmFja2VuZENsYXNzLCBjb252ZXJ0KTsKICB9CgogIE1hcDxNZW1iZXJFbnRpdHksIFYyPiB0b0JhY2tlbmRNZW1iZXJNYXA8VjEsIFYyPigKICAgICAgTWFwPE1lbWJlckVudGl0eSwgVjE+IG1hcCwgVjIgY29udmVydChWMSB2YWx1ZSkpIHsKICAgIHJldHVybiBjb252ZXJ0TWFwKG1hcCwgdG9CYWNrZW5kTWVtYmVyLCBjb252ZXJ0KTsKICB9Cn0KCkUgaWRlbnRpdHk8RT4oRSBlbGVtZW50KSA9PiBlbGVtZW50OwoKTWFwPEssIFYyPiBjb252ZXJ0TWFwPEssIFYxLCBWMj4oCiAgICBNYXA8SywgVjE+IG1hcCwgSyBjb252ZXJ0S2V5KEsga2V5KSwgVjIgY29udmVydFZhbHVlKFYxIHZhbHVlKSkgewogIE1hcDxLLCBWMj4gbmV3TWFwID0gPEssIFYyPnt9OwogIG1hcC5mb3JFYWNoKChLIGtleSwgVjEgdmFsdWUpIHsKICAgIEsgbmV3S2V5ID0gY29udmVydEtleShrZXkpOwogICAgVjIgbmV3VmFsdWUgPSBjb252ZXJ0VmFsdWUodmFsdWUpOwogICAgaWYgKG5ld0tleSAhPSBudWxsICYmIG5ld1ZhbHVlICE9IG51bGwpIHsKICAgICAgLy8gRW50aXRpZXMgdGhhdCBhcmUgbm90IHVzZWQgZG9uJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgYmFja2VuZCBlbnRpdHkuCiAgICAgIG5ld01hcFtuZXdLZXldID0gbmV3VmFsdWU7CiAgICB9CiAgfSk7CiAgcmV0dXJuIG5ld01hcDsKfQoKY2xhc3MgSnNUb0Zyb250ZW5kTWFwSW1wbCBleHRlbmRzIEpzVG9Gcm9udGVuZE1hcCB7CiAgZmluYWwgSnNLZXJuZWxUb0VsZW1lbnRNYXAgX2JhY2tlbmQ7CgogIEpzVG9Gcm9udGVuZE1hcEltcGwodGhpcy5fYmFja2VuZCk7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHRvQmFja2VuZFR5cGUoRGFydFR5cGUgdHlwZSwge2Jvb2wgYWxsb3dGcmVlVmFyaWFibGVzOiBmYWxzZX0pID0+CiAgICAgIHR5cGUgPT0gbnVsbAogICAgICAgICAgPyBudWxsCiAgICAgICAgICA6IG5ldyBfVHlwZUNvbnZlcnRlcihhbGxvd0ZyZWVWYXJpYWJsZXM6IGFsbG93RnJlZVZhcmlhYmxlcykKICAgICAgICAgICAgICAudmlzaXQodHlwZSwgdG9CYWNrZW5kRW50aXR5KTsKCiAgRW50aXR5IHRvQmFja2VuZEVudGl0eShFbnRpdHkgZW50aXR5KSB7CiAgICBpZiAoZW50aXR5IGlzIENsYXNzRW50aXR5KSByZXR1cm4gdG9CYWNrZW5kQ2xhc3MoZW50aXR5KTsKICAgIGlmIChlbnRpdHkgaXMgTWVtYmVyRW50aXR5KSByZXR1cm4gdG9CYWNrZW5kTWVtYmVyKGVudGl0eSk7CiAgICBpZiAoZW50aXR5IGlzIFR5cGVkZWZFbnRpdHkpIHJldHVybiB0b0JhY2tlbmRUeXBlZGVmKGVudGl0eSk7CiAgICBpZiAoZW50aXR5IGlzIFR5cGVWYXJpYWJsZUVudGl0eSkgewogICAgICByZXR1cm4gdG9CYWNrZW5kVHlwZVZhcmlhYmxlKGVudGl0eSk7CiAgICB9CiAgICBhc3NlcnQoZW50aXR5IGlzIExpYnJhcnlFbnRpdHksICd1bmV4cGVjdGVkIGVudGl0eSAke2VudGl0eS5ydW50aW1lVHlwZX0nKTsKICAgIHJldHVybiB0b0JhY2tlbmRMaWJyYXJ5KGVudGl0eSk7CiAgfQoKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IHRvQmFja2VuZExpYnJhcnkoY292YXJpYW50IEluZGV4ZWRMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIHJldHVybiBfYmFja2VuZC5saWJyYXJpZXMuZ2V0RW50aXR5KGxpYnJhcnkubGlicmFyeUluZGV4KTsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IHRvQmFja2VuZENsYXNzKGNvdmFyaWFudCBJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICByZXR1cm4gX2JhY2tlbmQuY2xhc3Nlcy5nZXRFbnRpdHkoY2xzLmNsYXNzSW5kZXgpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IHRvQmFja2VuZE1lbWJlcihjb3ZhcmlhbnQgSW5kZXhlZE1lbWJlciBtZW1iZXIpIHsKICAgIHJldHVybiBfYmFja2VuZC5tZW1iZXJzLmdldEVudGl0eShtZW1iZXIubWVtYmVySW5kZXgpOwogIH0KCiAgVHlwZWRlZkVudGl0eSB0b0JhY2tlbmRUeXBlZGVmKGNvdmFyaWFudCBJbmRleGVkVHlwZWRlZiB0eXBlZGVmKSB7CiAgICByZXR1cm4gX2JhY2tlbmQudHlwZWRlZnMuZ2V0RW50aXR5KHR5cGVkZWYudHlwZWRlZkluZGV4KTsKICB9CgogIFR5cGVWYXJpYWJsZUVudGl0eSB0b0JhY2tlbmRUeXBlVmFyaWFibGUoVHlwZVZhcmlhYmxlRW50aXR5IHR5cGVWYXJpYWJsZSkgewogICAgaWYgKHR5cGVWYXJpYWJsZSBpcyBLTG9jYWxUeXBlVmFyaWFibGUpIHsKICAgICAgZmFpbGVkQXQoCiAgICAgICAgICB0eXBlVmFyaWFibGUsICJMb2NhbCBmdW5jdGlvbiB0eXBlIHZhcmlhYmxlcyBhcmUgbm90IHN1cHBvcnRlZC4iKTsKICAgIH0KICAgIEluZGV4ZWRUeXBlVmFyaWFibGUgaW5kZXhlZFR5cGVWYXJpYWJsZSA9IHR5cGVWYXJpYWJsZTsKICAgIHJldHVybiBfYmFja2VuZC50eXBlVmFyaWFibGVzCiAgICAgICAgLmdldEVudGl0eShpbmRleGVkVHlwZVZhcmlhYmxlLnR5cGVWYXJpYWJsZUluZGV4KTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdG9CYWNrZW5kQ29uc3RhbnQoQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmIChjb25zdGFudCA9PSBudWxsKSB7CiAgICAgIGlmICghYWxsb3dOdWxsKSB7CiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ051bGwgbm90IGFsbG93ZWQgYXMgY29uc3RhbnQgdmFsdWUuJyk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gY29uc3RhbnQuYWNjZXB0KG5ldyBfQ29uc3RhbnRDb252ZXJ0ZXIodG9CYWNrZW5kRW50aXR5KSwgbnVsbCk7CiAgfQp9Cgp0eXBlZGVmIEVudGl0eSBfRW50aXR5Q29udmVydGVyKEVudGl0eSBjbHMpOwoKY2xhc3MgX1R5cGVDb252ZXJ0ZXIgaW1wbGVtZW50cyBEYXJ0VHlwZVZpc2l0b3I8RGFydFR5cGUsIF9FbnRpdHlDb252ZXJ0ZXI+IHsKICBmaW5hbCBib29sIGFsbG93RnJlZVZhcmlhYmxlczsKCiAgTWFwPEZ1bmN0aW9uVHlwZVZhcmlhYmxlLCBGdW5jdGlvblR5cGVWYXJpYWJsZT4gX2Z1bmN0aW9uVHlwZVZhcmlhYmxlcyA9CiAgICAgIDxGdW5jdGlvblR5cGVWYXJpYWJsZSwgRnVuY3Rpb25UeXBlVmFyaWFibGU+e307CgogIF9UeXBlQ29udmVydGVyKHt0aGlzLmFsbG93RnJlZVZhcmlhYmxlczogZmFsc2V9KTsKCiAgTGlzdDxEYXJ0VHlwZT4gY29udmVydFR5cGVzKAogICAgICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZXMsIF9FbnRpdHlDb252ZXJ0ZXIgY29udmVydGVyKSA9PgogICAgICB2aXNpdExpc3QodHlwZXMsIGNvbnZlcnRlcik7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0KERhcnRUeXBlIHR5cGUsIF9FbnRpdHlDb252ZXJ0ZXIgY29udmVydGVyKSB7CiAgICByZXR1cm4gdHlwZS5hY2NlcHQodGhpcywgY29udmVydGVyKTsKICB9CgogIExpc3Q8RGFydFR5cGU+IHZpc2l0TGlzdChMaXN0PERhcnRUeXBlPiB0eXBlcywgX0VudGl0eUNvbnZlcnRlciBjb252ZXJ0ZXIpIHsKICAgIExpc3Q8RGFydFR5cGU+IGxpc3QgPSA8RGFydFR5cGU+W107CiAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZXMpIHsKICAgICAgbGlzdC5hZGQodmlzaXQodHlwZSwgY29udmVydGVyKSk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0RHluYW1pY1R5cGUoRHluYW1pY1R5cGUgdHlwZSwgX0VudGl0eUNvbnZlcnRlciBjb252ZXJ0ZXIpIHsKICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgdHlwZSwgX0VudGl0eUNvbnZlcnRlciBjb252ZXJ0ZXIpIHsKICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZSgKICAgICAgICBjb252ZXJ0ZXIodHlwZS5lbGVtZW50KSwgdmlzaXRMaXN0KHR5cGUudHlwZUFyZ3VtZW50cywgY29udmVydGVyKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFR5cGVkZWZUeXBlKFR5cGVkZWZUeXBlIHR5cGUsIF9FbnRpdHlDb252ZXJ0ZXIgY29udmVydGVyKSB7CiAgICByZXR1cm4gbmV3IFR5cGVkZWZUeXBlKAogICAgICAgIGNvbnZlcnRlcih0eXBlLmVsZW1lbnQpLAogICAgICAgIHZpc2l0TGlzdCh0eXBlLnR5cGVBcmd1bWVudHMsIGNvbnZlcnRlciksCiAgICAgICAgdmlzaXQodHlwZS51bmFsaWFzZWQsIGNvbnZlcnRlcikpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRUeXBlVmFyaWFibGVUeXBlKAogICAgICBUeXBlVmFyaWFibGVUeXBlIHR5cGUsIF9FbnRpdHlDb252ZXJ0ZXIgY29udmVydGVyKSB7CiAgICByZXR1cm4gbmV3IFR5cGVWYXJpYWJsZVR5cGUoY29udmVydGVyKHR5cGUuZWxlbWVudCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIHR5cGUsIF9FbnRpdHlDb252ZXJ0ZXIgY29udmVydGVyKSB7CiAgICBMaXN0PEZ1bmN0aW9uVHlwZVZhcmlhYmxlPiB0eXBlVmFyaWFibGVzID0gPEZ1bmN0aW9uVHlwZVZhcmlhYmxlPltdOwogICAgZm9yIChGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlVmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgIHR5cGVWYXJpYWJsZXMuYWRkKF9mdW5jdGlvblR5cGVWYXJpYWJsZXNbdHlwZVZhcmlhYmxlXSA9CiAgICAgICAgICBuZXcgRnVuY3Rpb25UeXBlVmFyaWFibGUodHlwZVZhcmlhYmxlLmluZGV4KSk7CiAgICB9CiAgICBmb3IgKEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSBpbiB0eXBlLnR5cGVWYXJpYWJsZXMpIHsKICAgICAgX2Z1bmN0aW9uVHlwZVZhcmlhYmxlc1t0eXBlVmFyaWFibGVdLmJvdW5kID0gdHlwZVZhcmlhYmxlLmJvdW5kICE9IG51bGwKICAgICAgICAgID8gdmlzaXQodHlwZVZhcmlhYmxlLmJvdW5kLCBjb252ZXJ0ZXIpCiAgICAgICAgICA6IG51bGw7CiAgICB9CiAgICBEYXJ0VHlwZSByZXR1cm5UeXBlID0gdmlzaXQodHlwZS5yZXR1cm5UeXBlLCBjb252ZXJ0ZXIpOwogICAgTGlzdDxEYXJ0VHlwZT4gcGFyYW1ldGVyVHlwZXMgPSB2aXNpdExpc3QodHlwZS5wYXJhbWV0ZXJUeXBlcywgY29udmVydGVyKTsKICAgIExpc3Q8RGFydFR5cGU+IG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMgPQogICAgICAgIHZpc2l0TGlzdCh0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMsIGNvbnZlcnRlcik7CiAgICBMaXN0PERhcnRUeXBlPiBuYW1lZFBhcmFtZXRlclR5cGVzID0KICAgICAgICB2aXNpdExpc3QodHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzLCBjb252ZXJ0ZXIpOwogICAgZm9yIChGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlVmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgIF9mdW5jdGlvblR5cGVWYXJpYWJsZXMucmVtb3ZlKHR5cGVWYXJpYWJsZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCBwYXJhbWV0ZXJUeXBlcywgb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywKICAgICAgICB0eXBlLm5hbWVkUGFyYW1ldGVycywgbmFtZWRQYXJhbWV0ZXJUeXBlcywgdHlwZVZhcmlhYmxlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEZ1bmN0aW9uVHlwZVZhcmlhYmxlKAogICAgICBGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlLCBfRW50aXR5Q29udmVydGVyIGNvbnZlcnRlcikgewogICAgRGFydFR5cGUgcmVzdWx0ID0gX2Z1bmN0aW9uVHlwZVZhcmlhYmxlc1t0eXBlXTsKICAgIGlmIChyZXN1bHQgPT0gbnVsbCAmJiBhbGxvd0ZyZWVWYXJpYWJsZXMpIHsKICAgICAgcmV0dXJuIHR5cGU7CiAgICB9CiAgICBhc3NlcnQocmVzdWx0ICE9IG51bGwsCiAgICAgICAgIkZ1bmN0aW9uIHR5cGUgdmFyaWFibGUgJHR5cGUgbm90IGZvdW5kIGluICRfZnVuY3Rpb25UeXBlVmFyaWFibGVzIik7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXRWb2lkVHlwZShWb2lkVHlwZSB0eXBlLCBfRW50aXR5Q29udmVydGVyIGNvbnZlcnRlcikgewogICAgcmV0dXJuIGNvbnN0IFZvaWRUeXBlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEZ1dHVyZU9yVHlwZShGdXR1cmVPclR5cGUgdHlwZSwgX0VudGl0eUNvbnZlcnRlciBjb252ZXJ0ZXIpIHsKICAgIHJldHVybiBuZXcgRnV0dXJlT3JUeXBlKHZpc2l0KHR5cGUudHlwZUFyZ3VtZW50LCBjb252ZXJ0ZXIpKTsKICB9Cn0KCmNsYXNzIF9Db25zdGFudENvbnZlcnRlciBpbXBsZW1lbnRzIENvbnN0YW50VmFsdWVWaXNpdG9yPENvbnN0YW50VmFsdWUsIE51bGw+IHsKICBmaW5hbCBFbnRpdHkgRnVuY3Rpb24oRW50aXR5KSB0b0JhY2tlbmRFbnRpdHk7CiAgZmluYWwgX1R5cGVDb252ZXJ0ZXIgdHlwZUNvbnZlcnRlcjsKCiAgX0NvbnN0YW50Q29udmVydGVyKHRoaXMudG9CYWNrZW5kRW50aXR5KQogICAgICA6IHR5cGVDb252ZXJ0ZXIgPSBuZXcgX1R5cGVDb252ZXJ0ZXIoKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdE51bGwoTnVsbENvbnN0YW50VmFsdWUgY29uc3RhbnQsIF8pID0+IGNvbnN0YW50OwogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRJbnQoSW50Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgXykgPT4gY29uc3RhbnQ7CiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdERvdWJsZShEb3VibGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSA9PiBjb25zdGFudDsKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0Qm9vbChCb29sQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgXykgPT4gY29uc3RhbnQ7CiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdFN0cmluZyhTdHJpbmdDb25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSA9PiBjb25zdGFudDsKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0RHVtbXlJbnRlcmNlcHRvcigKICAgICAgICAgIER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSA9PgogICAgICBjb25zdGFudDsKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0VW5yZWFjaGFibGUoVW5yZWFjaGFibGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSA9PgogICAgICBjb25zdGFudDsKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0SnNOYW1lKEpzTmFtZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIF8pID0+IGNvbnN0YW50OwogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXROb25Db25zdGFudChOb25Db25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSA9PiBjb25zdGFudDsKCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdEZ1bmN0aW9uKEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgXykgewogICAgcmV0dXJuIG5ldyBGdW5jdGlvbkNvbnN0YW50VmFsdWUodG9CYWNrZW5kRW50aXR5KGNvbnN0YW50LmVsZW1lbnQpLAogICAgICAgIHR5cGVDb252ZXJ0ZXIudmlzaXQoY29uc3RhbnQudHlwZSwgdG9CYWNrZW5kRW50aXR5KSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0TGlzdChMaXN0Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgXykgewogICAgRGFydFR5cGUgdHlwZSA9IHR5cGVDb252ZXJ0ZXIudmlzaXQoY29uc3RhbnQudHlwZSwgdG9CYWNrZW5kRW50aXR5KTsKICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZW50cmllcyA9IF9oYW5kbGVWYWx1ZXMoY29uc3RhbnQuZW50cmllcyk7CiAgICBpZiAoaWRlbnRpY2FsKGVudHJpZXMsIGNvbnN0YW50LmVudHJpZXMpICYmIHR5cGUgPT0gY29uc3RhbnQudHlwZSkgewogICAgICByZXR1cm4gY29uc3RhbnQ7CiAgICB9CiAgICByZXR1cm4gbmV3IExpc3RDb25zdGFudFZhbHVlKHR5cGUsIGVudHJpZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdFNldCgKICAgICAgY292YXJpYW50IGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0U2V0Q29uc3RhbnQgY29uc3RhbnQsIF8pIHsKICAgIERhcnRUeXBlIHR5cGUgPSB0eXBlQ29udmVydGVyLnZpc2l0KGNvbnN0YW50LnR5cGUsIHRvQmFja2VuZEVudGl0eSk7CiAgICBNYXBDb25zdGFudFZhbHVlIGVudHJpZXMgPSBjb25zdGFudC5lbnRyaWVzLmFjY2VwdCh0aGlzLCBudWxsKTsKICAgIGlmIChpZGVudGljYWwoZW50cmllcywgY29uc3RhbnQuZW50cmllcykgJiYgdHlwZSA9PSBjb25zdGFudC50eXBlKSB7CiAgICAgIHJldHVybiBjb25zdGFudDsKICAgIH0KICAgIHJldHVybiBuZXcgY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRTZXRDb25zdGFudCh0eXBlLCBlbnRyaWVzKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRNYXAoCiAgICAgIGNvdmFyaWFudCBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50IGNvbnN0YW50LCBfKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gdHlwZUNvbnZlcnRlci52aXNpdChjb25zdGFudC50eXBlLCB0b0JhY2tlbmRFbnRpdHkpOwogICAgTGlzdENvbnN0YW50VmFsdWUga2V5cyA9IGNvbnN0YW50LmtleUxpc3QuYWNjZXB0KHRoaXMsIG51bGwpOwogICAgTGlzdDxDb25zdGFudFZhbHVlPiB2YWx1ZXMgPSBfaGFuZGxlVmFsdWVzKGNvbnN0YW50LnZhbHVlcyk7CiAgICBDb25zdGFudFZhbHVlIHByb3RvVmFsdWUgPSBjb25zdGFudC5wcm90b1ZhbHVlPy5hY2NlcHQodGhpcywgbnVsbCk7CiAgICBpZiAoaWRlbnRpY2FsKGtleXMsIGNvbnN0YW50LmtleXMpICYmCiAgICAgICAgaWRlbnRpY2FsKHZhbHVlcywgY29uc3RhbnQudmFsdWVzKSAmJgogICAgICAgIHR5cGUgPT0gY29uc3RhbnQudHlwZSAmJgogICAgICAgIHByb3RvVmFsdWUgPT0gY29uc3RhbnQucHJvdG9WYWx1ZSkgewogICAgICByZXR1cm4gY29uc3RhbnQ7CiAgICB9CiAgICByZXR1cm4gbmV3IGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQoCiAgICAgICAgdHlwZSwga2V5cywgdmFsdWVzLCBwcm90b1ZhbHVlLCBjb25zdGFudC5vbmx5U3RyaW5nS2V5cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0Q29uc3RydWN0ZWQoQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIGNvbnN0YW50LCBfKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gdHlwZUNvbnZlcnRlci52aXNpdChjb25zdGFudC50eXBlLCB0b0JhY2tlbmRFbnRpdHkpOwogICAgTWFwPEZpZWxkRW50aXR5LCBDb25zdGFudFZhbHVlPiBmaWVsZHMgPSB7fTsKICAgIGNvbnN0YW50LmZpZWxkcy5mb3JFYWNoKChmLCB2KSB7CiAgICAgIEZpZWxkRW50aXR5IGJhY2tlbmRGaWVsZCA9IHRvQmFja2VuZEVudGl0eShmKTsKICAgICAgYXNzZXJ0KGJhY2tlbmRGaWVsZCAhPSBudWxsLCAiTm8gYmFja2VuZCBmaWVsZCBmb3IgJGYuIik7CiAgICAgIGZpZWxkc1tiYWNrZW5kRmllbGRdID0gdi5hY2NlcHQodGhpcywgbnVsbCk7CiAgICB9KTsKICAgIHJldHVybiBuZXcgQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlKHR5cGUsIGZpZWxkcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0VHlwZShUeXBlQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgXykgewogICAgRGFydFR5cGUgdHlwZSA9IHR5cGVDb252ZXJ0ZXIudmlzaXQoY29uc3RhbnQudHlwZSwgdG9CYWNrZW5kRW50aXR5KTsKICAgIERhcnRUeXBlIHJlcHJlc2VudGVkVHlwZSA9CiAgICAgICAgdHlwZUNvbnZlcnRlci52aXNpdChjb25zdGFudC5yZXByZXNlbnRlZFR5cGUsIHRvQmFja2VuZEVudGl0eSk7CiAgICBpZiAodHlwZSA9PSBjb25zdGFudC50eXBlICYmIHJlcHJlc2VudGVkVHlwZSA9PSBjb25zdGFudC5yZXByZXNlbnRlZFR5cGUpIHsKICAgICAgcmV0dXJuIGNvbnN0YW50OwogICAgfQogICAgcmV0dXJuIG5ldyBUeXBlQ29uc3RhbnRWYWx1ZShyZXByZXNlbnRlZFR5cGUsIHR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdEludGVyY2VwdG9yKEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgXykgewogICAgLy8gSW50ZXJjZXB0b3IgY29uc3RhbnRzIGFyZSBvbmx5IGNyZWF0ZWQgaW4gdGhlIFNTQSBncmFwaCBidWlsZGVyLgogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIlVuZXhwZWN0ZWQgdmlzaXRJbnRlcmNlcHRvciAke2NvbnN0YW50LnRvU3RydWN0dXJlZFRleHQoKX0iKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXREZWZlcnJlZEdsb2JhbChEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUgY29uc3RhbnQsIF8pIHsKICAgIC8vIERlZmVycmVkIGdsb2JhbCBjb25zdGFudHMgYXJlIG9ubHkgY3JlYXRlZCBpbiB0aGUgU1NBIGdyYXBoIGJ1aWxkZXIuCiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiVW5leHBlY3RlZCBEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUgJHtjb25zdGFudC50b1N0cnVjdHVyZWRUZXh0KCl9Iik7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0SW5zdGFudGlhdGlvbihJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgXykgewogICAgQ29uc3RhbnRWYWx1ZSBmdW5jdGlvbiA9IGNvbnN0YW50LmZ1bmN0aW9uLmFjY2VwdCh0aGlzLCBudWxsKTsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPQogICAgICAgIHR5cGVDb252ZXJ0ZXIuY29udmVydFR5cGVzKGNvbnN0YW50LnR5cGVBcmd1bWVudHMsIHRvQmFja2VuZEVudGl0eSk7CiAgICByZXR1cm4gbmV3IEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlKHR5cGVBcmd1bWVudHMsIGZ1bmN0aW9uKTsKICB9CgogIExpc3Q8Q29uc3RhbnRWYWx1ZT4gX2hhbmRsZVZhbHVlcyhMaXN0PENvbnN0YW50VmFsdWU+IHZhbHVlcykgewogICAgTGlzdDxDb25zdGFudFZhbHVlPiByZXN1bHQ7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbaV07CiAgICAgIHZhciBuZXdWYWx1ZSA9IHZhbHVlLmFjY2VwdCh0aGlzLCBudWxsKTsKICAgICAgaWYgKG5ld1ZhbHVlICE9IHZhbHVlICYmIHJlc3VsdCA9PSBudWxsKSB7CiAgICAgICAgcmVzdWx0ID0gdmFsdWVzLnN1Ymxpc3QoMCwgaSkudG9MaXN0KCk7CiAgICAgIH0KICAgICAgcmVzdWx0Py5hZGQobmV3VmFsdWUpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdCA/PyB2YWx1ZXM7CiAgfQp9CoPDAE5OPAEoARoZIj8jICQjISExHSkrLC4pNTYjIhorJSMoJBgXGBsgGBYBHSpEJEsqMCI2AUBNAVBEASQgOihAASA9TSkmTwFCAUU0TDYxJQhOJydDCk0KSEQWBgFJKjI6Lk82RE4uChwKBgEfRy1EJSABLEEBM00BRh9OATBFASk+ASlCAR4BOx0rLz8QOykYDUBCJyg9NDcIRicoQTQ7CAEmRj8QOyAYNzQYAU1LJD8IUU8oPwhMKzQBGgYBTUJFQk4BJzkBSkhRASRDAUslH0kBHhUUGRYRGxocG0lRGzchGhMmIEsgGRoVGBcEASU8NUsvRS5EKT8qSyEfOjsQASFAOjIuLD0qOzkqPzM9MgQBK0I6KSc5OQg0TzBLMUoxTCQdHBwaIxsEASE4Jh5LS09CCCMTBgFEOQE1SAg5TAgBQDg6OCwaBgFQATFHPywkREIjShNPCAhAIEhBIEkfGRoeISMEAT9EOCcnPEIIJBQZHEMfQgQBQUEzRDZHMkMySCsdGzZDOSUIFxAlHSUhJQ4OJzUEAUkRLBszIS8cIyY7AVEQJRoYDhMxNwFIHUZBTUZKKAEdBAFBPFAsMi8zMD9AJUwVKAoKQVAiKEs5CgoVBgFPLjQxMzFBQiVMFSgKCkFHMChLMTU4DAoKFQYBJA4eGRpCMgQCATghAQw6AQw5AQxAAQw+AQw+AQw6AQwoOwwCATMiR0MBTzEBDDw/BAEMMywBDDowAQxAQwQBDDg0AQw0LAEMKDtQAgEvBE9PRwRLDyE5AS8BTkkYNQFLAVEBSC4EAUIzLAQBRUJOHRAEAUI2JzsiUCIIBhMEAUs8KkElUCUIBhMEATA3NwQBLDU1BAE0OTYEAgElASJGISIgJy5PIQYGEQIBNCcBJgEMTRMRRy0BKj5AQigsBlAlBAEMRT8EAQw7NwQBDEE7BAFFPgQBTi4QTQY8IjsEAQw6IRwYSwgTBksEAgEtAU4hAUs2ATQBHz8jAQw+KQQBTygjKAYRBAEMTCAEAQxQHkwEAQxMHCEyKwQBDCI7OgQBDE5JRD85BkROMRIGPU8sOyk4RDMGUEMEAQwmPzQwEwYbThMEAQxGHQQBDE5CBAIBUDEmASsuAQxGDEQMSgxGDEoMJzgQDEoQDEoMTAEMQ0g+BAEMO0lDSRcGMQQBDBpFSURJFwZFBAEMGkVJQkFIKi4hLRcGNkIEAQxJSTElNUAzCDcEAQw7SR9IUBcGOQQBDElIIEcEAQxPTCBSBAEMTUMjTUQEAUIgLh0vMTAIHQYdBAIBM3BhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX21vZGVsL2pzX3dvcmxkX2J1aWxkZXIuZGFydDVzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21tb24vYmFja2VuZF9hcGkuZGFydIPeLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5iYWNrZW5kX2FwaTsKCmltcG9ydCAnLi4vY29tbW9uL3Jlc29sdXRpb24uZGFydCcgc2hvdyBSZXNvbHV0aW9uSW1wYWN0OwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2ltcGFjdC5kYXJ0JyBzaG93IFdvcmxkSW1wYWN0OwoKLy8vIFRhcmdldC1zcGVjaWZpYyB0cmFuc2Zvcm1hdGlvbiBmb3IgcmVzb2x1dGlvbiB3b3JsZCBpbXBhY3RzLgovLy8KLy8vIFRoaXMgcHJvY2Vzc2VzIHRhcmdldC1hZ25vc3RpYyBbUmVzb2x1dGlvbkltcGFjdF1zIGFuZCBjcmVhdGVzIFtXb3JsZEltcGFjdF0KLy8vIGluIHdoaWNoIGJhY2tlbmQvdGFyZ2V0IHNwZWNpZmljIGltcGFjdCBkYXRhIGlzIGFkZGVkLCBmb3IgZXhhbXBsZTogaWYKLy8vIGNlcnRhaW4gZmVhdHVyZSBpcyB1c2VkIHRoYXQgcmVxdWlyZXMgc29tZSBoZWxwZXIgY29kZSBmcm9tIHRoZSBiYWNrZW5kCi8vLyBsaWJyYXJpZXMsIHRoaXMgd2lsbCBiZSBpbmNsdWRlZCBieSB0aGUgaW1wYWN0IHRyYW5zZm9ybWVyLgpjbGFzcyBJbXBhY3RUcmFuc2Zvcm1lciB7CiAgLy8vIFRyYW5zZm9ybSB0aGUgW1Jlc29sdXRpb25JbXBhY3RdIGludG8gYSBbV29ybGRJbXBhY3RdIGFkZGluZyB0aGUKICAvLy8gYmFja2VuZCBkZXBlbmRlbmNpZXMgZm9yIGZlYXR1cmVzIHVzZWQgaW4gW3dvcmxkSW1wYWN0XS4KICBXb3JsZEltcGFjdCB0cmFuc2Zvcm1SZXNvbHV0aW9uSW1wYWN0KFJlc29sdXRpb25JbXBhY3Qgd29ybGRJbXBhY3QpIHsKICAgIHJldHVybiB3b3JsZEltcGFjdDsKICB9Cn0KGABOTjwBHQE6OQFBBFFLTEAaRz9IGAQCASxwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24vYmFja2VuZF9hcGkuZGFydDRzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21tb24vcmVzb2x1dGlvbi5kYXJ0hNsvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmNvbW1vbi5yZXNvbHV0aW9uOwoKaW1wb3J0ICcuLi9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydCcgc2hvdyBDb25zdGFudEV4cHJlc3Npb247CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnIHNob3cgV29ybGRJbXBhY3Q7CmltcG9ydCAnLi4vdW5pdmVyc2UvZmVhdHVyZS5kYXJ0JzsKCmNsYXNzIFJlc29sdXRpb25JbXBhY3QgZXh0ZW5kcyBXb3JsZEltcGFjdCB7CiAgY29uc3QgUmVzb2x1dGlvbkltcGFjdCgpOwoKICBJdGVyYWJsZTxGZWF0dXJlPiBnZXQgZmVhdHVyZXMgPT4gY29uc3QgPEZlYXR1cmU+W107CiAgSXRlcmFibGU8TWFwTGl0ZXJhbFVzZT4gZ2V0IG1hcExpdGVyYWxzID0+IGNvbnN0IDxNYXBMaXRlcmFsVXNlPltdOwogIEl0ZXJhYmxlPFNldExpdGVyYWxVc2U+IGdldCBzZXRMaXRlcmFscyA9PiBjb25zdCA8U2V0TGl0ZXJhbFVzZT5bXTsKICBJdGVyYWJsZTxMaXN0TGl0ZXJhbFVzZT4gZ2V0IGxpc3RMaXRlcmFscyA9PiBjb25zdCA8TGlzdExpdGVyYWxVc2U+W107CiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgY29uc3RTeW1ib2xOYW1lcyA9PiBjb25zdCA8U3RyaW5nPltdOwogIEl0ZXJhYmxlPENvbnN0YW50RXhwcmVzc2lvbj4gZ2V0IGNvbnN0YW50TGl0ZXJhbHMgPT4KICAgICAgY29uc3QgPENvbnN0YW50RXhwcmVzc2lvbj5bXTsKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IHNlZW5DbGFzc2VzID0+IGNvbnN0IDxDbGFzc0VudGl0eT5bXTsKICBJdGVyYWJsZTxSdW50aW1lVHlwZVVzZT4gZ2V0IHJ1bnRpbWVUeXBlVXNlcyA9PiBjb25zdCA8UnVudGltZVR5cGVVc2U+W107CgogIEl0ZXJhYmxlPGR5bmFtaWM+IGdldCBuYXRpdmVEYXRhID0+IGNvbnN0IDxkeW5hbWljPltdOwoKICBJdGVyYWJsZTxHZW5lcmljSW5zdGFudGlhdGlvbj4gZ2V0IGdlbmVyaWNJbnN0YW50aWF0aW9ucyA9PgogICAgICBjb25zdCA8R2VuZXJpY0luc3RhbnRpYXRpb24+W107Cn0KHwBOTjwBIwFAJDkjAS0cATdGRkk9NyRCTAE5AT4mAgErcGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uL3Jlc29sdXRpb24uZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pci9hbm5vdGF0aW9ucy5kYXJ0stwvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnOwppbXBvcnQgJ21vZHVsYXIuZGFydCc7CgpjbGFzcyBJckFubm90YXRpb25EYXRhIHsKICBNYXA8aXIuQ2xhc3MsIFN0cmluZz4gX25hdGl2ZUNsYXNzTmFtZXMgPSB7fTsKICBTZXQ8aXIuTWVtYmVyPiBfbmF0aXZlTWVtYmVycyA9IHt9OwogIE1hcDxpci5NZW1iZXIsIFN0cmluZz4gX25hdGl2ZU1lbWJlck5hbWVzID0ge307CiAgTWFwPGlyLk1lbWJlciwgTGlzdDxTdHJpbmc+PiBfY3JlYXRlc0Fubm90YXRpb25zID0ge307CiAgTWFwPGlyLk1lbWJlciwgTGlzdDxTdHJpbmc+PiBfcmV0dXJuc0Fubm90YXRpb25zID0ge307CgogIE1hcDxpci5MaWJyYXJ5LCBTdHJpbmc+IF9qc0ludGVyb3BMaWJyYXJ5TmFtZXMgPSB7fTsKICBNYXA8aXIuQ2xhc3MsIFN0cmluZz4gX2pzSW50ZXJvcENsYXNzTmFtZXMgPSB7fTsKICBTZXQ8aXIuQ2xhc3M+IF9hbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzID0ge307CiAgTWFwPGlyLk1lbWJlciwgU3RyaW5nPiBfanNJbnRlcm9wTWVtYmVyTmFtZXMgPSB7fTsKCiAgTWFwPGlyLk1lbWJlciwgTGlzdDxQcmFnbWFBbm5vdGF0aW9uRGF0YT4+IF9tZW1iZXJQcmFnbWFBbm5vdGF0aW9ucyA9IHt9OwoKICAvLyBSZXR1cm5zIHRoZSB0ZXh0IGZyb20gdGhlIGBATmF0aXZlKDx0ZXh0PilgIGFubm90YXRpb24gb2YgW25vZGVdLCBpZiBhbnkuCiAgU3RyaW5nIGdldE5hdGl2ZUNsYXNzTmFtZShpci5DbGFzcyBub2RlKSA9PiBfbmF0aXZlQ2xhc3NOYW1lc1tub2RlXTsKCiAgLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW25vZGVdIGhhcyBhIG5hdGl2ZSBib2R5LCBhcyBpbiBgbWV0aG9kKCkgbmF0aXZlO2AuCiAgYm9vbCBoYXNOYXRpdmVCb2R5KGlyLk1lbWJlciBub2RlKSA9PiBfbmF0aXZlTWVtYmVycy5jb250YWlucyhub2RlKTsKCiAgLy8gUmV0dXJucyB0aGUgdGV4dCBmcm9tIHRoZSBgQEpTTmFtZSg8dGV4dD4pYCBhbm5vdGF0aW9uIG9mIFtub2RlXSwgaWYgYW55LgogIFN0cmluZyBnZXROYXRpdmVNZW1iZXJOYW1lKGlyLk1lbWJlciBub2RlKSA9PiBfbmF0aXZlTWVtYmVyTmFtZXNbbm9kZV07CgogIC8vIFJldHVybnMgYSBsaXN0IG9mIHRoZSB0ZXh0IGZyb20gdGhlIGBAQ3JlYXRlcyg8dGV4dD4pYCBhbm5vdGF0aW9uIG9mCiAgLy8gW25vZGVdLgogIExpc3Q8U3RyaW5nPiBnZXRDcmVhdGVzQW5ub3RhdGlvbnMoaXIuTWVtYmVyIG5vZGUpID0+CiAgICAgIF9jcmVhdGVzQW5ub3RhdGlvbnNbbm9kZV0gPz8gY29uc3QgW107CgogIC8vIFJldHVybnMgYSBsaXN0IG9mIHRoZSB0ZXh0IGZyb20gdGhlIGBAUmV0dXJucyg8dGV4dD4pYCBhbm5vdGF0aW9uIG9mCiAgLy8gW25vZGVdLgogIExpc3Q8U3RyaW5nPiBnZXRSZXR1cm5zQW5ub3RhdGlvbnMoaXIuTWVtYmVyIG5vZGUpID0+CiAgICAgIF9yZXR1cm5zQW5ub3RhdGlvbnNbbm9kZV0gPz8gY29uc3QgW107CgogIC8vIFJldHVybnMgdGhlIHRleHQgZnJvbSB0aGUgYEBKUyg8dGV4dD4pYCBhbm5vdGF0aW9uIG9mIFtub2RlXSwgaWYgYW55LgogIFN0cmluZyBnZXRKc0ludGVyb3BMaWJyYXJ5TmFtZShpci5MaWJyYXJ5IG5vZGUpID0+CiAgICAgIF9qc0ludGVyb3BMaWJyYXJ5TmFtZXNbbm9kZV07CgogIC8vIFJldHVybnMgdGhlIHRleHQgZnJvbSB0aGUgYEBKUyg8dGV4dD4pYCBhbm5vdGF0aW9uIG9mIFtub2RlXSwgaWYgYW55LgogIFN0cmluZyBnZXRKc0ludGVyb3BDbGFzc05hbWUoaXIuQ2xhc3Mgbm9kZSkgPT4gX2pzSW50ZXJvcENsYXNzTmFtZXNbbm9kZV07CgogIC8vIFJldHVybnMgYHRydWVgIGlmIFtub2RlXSBpcyBhbm5vdGF0ZWQgd2l0aCBgQGFub255bW91c2AuCiAgYm9vbCBpc0Fub255bW91c0pzSW50ZXJvcENsYXNzKGlyLkNsYXNzIG5vZGUpID0+CiAgICAgIF9hbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzLmNvbnRhaW5zKG5vZGUpOwoKICAvLyBSZXR1cm5zIHRoZSB0ZXh0IGZyb20gdGhlIGBASlMoPHRleHQ+KWAgYW5ub3RhdGlvbiBvZiBbbm9kZV0sIGlmIGFueS4KICBTdHJpbmcgZ2V0SnNJbnRlcm9wTWVtYmVyTmFtZShpci5NZW1iZXIgbm9kZSkgPT4gX2pzSW50ZXJvcE1lbWJlck5hbWVzW25vZGVdOwoKICAvLyBSZXR1cm5zIGEgbGlzdCBvZiB0aGUgYEBwcmFnbWEoJ2RhcnQyanM6PHN1ZmZpeD4nKWAgYW5ub3RhdGlvbnMgb24gW25vZGVdLgogIExpc3Q8UHJhZ21hQW5ub3RhdGlvbkRhdGE+IGdldE1lbWJlclByYWdtYUFubm90YXRpb25EYXRhKGlyLk1lbWJlciBub2RlKSA9PgogICAgICBfbWVtYmVyUHJhZ21hQW5ub3RhdGlvbnNbbm9kZV0gPz8gY29uc3QgW107CgogIHZvaWQgZm9yRWFjaE5hdGl2ZUNsYXNzKHZvaWQgRnVuY3Rpb24oaXIuQ2xhc3MsIFN0cmluZykgZikgewogICAgX25hdGl2ZUNsYXNzTmFtZXMuZm9yRWFjaChmKTsKICB9CgogIHZvaWQgZm9yRWFjaEpzSW50ZXJvcExpYnJhcnkodm9pZCBGdW5jdGlvbihpci5MaWJyYXJ5LCBTdHJpbmcpIGYpIHsKICAgIF9qc0ludGVyb3BMaWJyYXJ5TmFtZXMuZm9yRWFjaChmKTsKICB9CgogIHZvaWQgZm9yRWFjaEpzSW50ZXJvcENsYXNzKAogICAgICB2b2lkIEZ1bmN0aW9uKGlyLkNsYXNzLCBTdHJpbmcsIHtib29sIGlzQW5vbnltb3VzfSkgZikgewogICAgX2pzSW50ZXJvcENsYXNzTmFtZXMuZm9yRWFjaCgoaXIuQ2xhc3Mgbm9kZSwgU3RyaW5nIG5hbWUpIHsKICAgICAgZihub2RlLCBuYW1lLCBpc0Fub255bW91czogaXNBbm9ueW1vdXNKc0ludGVyb3BDbGFzcyhub2RlKSk7CiAgICB9KTsKICB9CgogIHZvaWQgZm9yRWFjaEpzSW50ZXJvcE1lbWJlcih2b2lkIEZ1bmN0aW9uKGlyLk1lbWJlciwgU3RyaW5nKSBmKSB7CiAgICBfanNJbnRlcm9wTGlicmFyeU5hbWVzLmZvckVhY2goKGlyLkxpYnJhcnkgbGlicmFyeSwgXykgewogICAgICBmb3IgKGlyLk1lbWJlciBtZW1iZXIgaW4gbGlicmFyeS5tZW1iZXJzKSB7CiAgICAgICAgaWYgKG1lbWJlci5pc0V4dGVybmFsKSB7CiAgICAgICAgICBmKG1lbWJlciwgX2pzSW50ZXJvcE1lbWJlck5hbWVzW21lbWJlcl0gPz8gbWVtYmVyLm5hbWUubmFtZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIF9qc0ludGVyb3BDbGFzc05hbWVzLmZvckVhY2goKGlyLkNsYXNzIGNscywgXykgewogICAgICBmb3IgKGlyLk1lbWJlciBtZW1iZXIgaW4gY2xzLm1lbWJlcnMpIHsKICAgICAgICBpZiAobWVtYmVyIGlzIGlyLkZpZWxkKSBjb250aW51ZTsKICAgICAgICBTdHJpbmcgbmFtZSA9IF9qc0ludGVyb3BNZW1iZXJOYW1lc1ttZW1iZXJdOwogICAgICAgIGlmIChtZW1iZXIuaXNFeHRlcm5hbCkgewogICAgICAgICAgbmFtZSA/Pz0gbWVtYmVyLm5hbWUubmFtZTsKICAgICAgICB9CiAgICAgICAgZihtZW1iZXIsIG5hbWUpOwogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgZm9yRWFjaE5hdGl2ZU1ldGhvZERhdGEoCiAgICAgIHZvaWQgRnVuY3Rpb24oaXIuTWVtYmVyLCBTdHJpbmcgbmFtZSwgSXRlcmFibGU8U3RyaW5nPiBjcmVhdGVzQW5ub3RhdGlvbnMsCiAgICAgICAgICAgICAgSXRlcmFibGU8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnMpCiAgICAgICAgICBmKSB7CiAgICBmb3IgKGlyLk1lbWJlciBub2RlIGluIF9uYXRpdmVNZW1iZXJzKSB7CiAgICAgIGlmIChub2RlIGlzISBpci5GaWVsZCkgewogICAgICAgIFN0cmluZyBuYW1lID0gX25hdGl2ZU1lbWJlck5hbWVzW25vZGVdID8/IG5vZGUubmFtZS5uYW1lOwogICAgICAgIGYobm9kZSwgbmFtZSwgZ2V0Q3JlYXRlc0Fubm90YXRpb25zKG5vZGUpLCBnZXRSZXR1cm5zQW5ub3RhdGlvbnMobm9kZSkpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGZvckVhY2hOYXRpdmVGaWVsZERhdGEoCiAgICAgIHZvaWQgRnVuY3Rpb24oaXIuTWVtYmVyLCBTdHJpbmcgbmFtZSwgSXRlcmFibGU8U3RyaW5nPiBjcmVhdGVzQW5ub3RhdGlvbnMsCiAgICAgICAgICAgICAgSXRlcmFibGU8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnMpCiAgICAgICAgICBmKSB7CiAgICBmb3IgKGlyLkNsYXNzIGNscyBpbiBfbmF0aXZlQ2xhc3NOYW1lcy5rZXlzKSB7CiAgICAgIGZvciAoaXIuRmllbGQgZmllbGQgaW4gY2xzLmZpZWxkcykgewogICAgICAgIGlmIChmaWVsZC5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgICAgICBTdHJpbmcgbmFtZSA9IF9uYXRpdmVNZW1iZXJOYW1lc1tmaWVsZF0gPz8gZmllbGQubmFtZS5uYW1lOwogICAgICAgICAgZihmaWVsZCwgbmFtZSwgZ2V0Q3JlYXRlc0Fubm90YXRpb25zKGZpZWxkKSwKICAgICAgICAgICAgICBnZXRSZXR1cm5zQW5ub3RhdGlvbnMoZmllbGQpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn0KCklyQW5ub3RhdGlvbkRhdGEgcHJvY2Vzc0Fubm90YXRpb25zKE1vZHVsYXJDb3JlIG1vZHVsYXJDb3JlKSB7CiAgaXIuQ29tcG9uZW50IGNvbXBvbmVudCA9IG1vZHVsYXJDb3JlLmNvbXBvbmVudDsKICBJckFubm90YXRpb25EYXRhIGRhdGEgPSBuZXcgSXJBbm5vdGF0aW9uRGF0YSgpOwoKICB2b2lkIHByb2Nlc3NNZW1iZXIoaXIuTWVtYmVyIG1lbWJlcikgewogICAgTGlzdDxQcmFnbWFBbm5vdGF0aW9uRGF0YT4gcHJhZ21hQW5ub3RhdGlvbnM7CiAgICBMaXN0PFN0cmluZz4gY3JlYXRlc0Fubm90YXRpb25zOwogICAgTGlzdDxTdHJpbmc+IHJldHVybnNBbm5vdGF0aW9uczsKICAgIGZvciAoaXIuRXhwcmVzc2lvbiBhbm5vdGF0aW9uIGluIG1lbWJlci5hbm5vdGF0aW9ucykgewogICAgICBpZiAoYW5ub3RhdGlvbiBpcyBpci5Db25zdGFudEV4cHJlc3Npb24pIHsKICAgICAgICBpci5Db25zdGFudCBjb25zdGFudCA9CiAgICAgICAgICAgIG1vZHVsYXJDb3JlLmNvbnN0YW50RXZhbHVhdG9yLmV2YWx1YXRlKGFubm90YXRpb24pOwoKICAgICAgICBTdHJpbmcganNOYW1lID0gX2dldEpzSW50ZXJvcE5hbWUoY29uc3RhbnQpOwogICAgICAgIGlmIChqc05hbWUgIT0gbnVsbCkgewogICAgICAgICAgZGF0YS5fanNJbnRlcm9wTWVtYmVyTmFtZXNbbWVtYmVyXSA9IGpzTmFtZTsKICAgICAgICB9CgogICAgICAgIGJvb2wgaXNOYXRpdmVNZW1iZXIgPSBfaXNOYXRpdmVNZW1iZXIoY29uc3RhbnQpOwogICAgICAgIGlmIChpc05hdGl2ZU1lbWJlcikgewogICAgICAgICAgZGF0YS5fbmF0aXZlTWVtYmVycy5hZGQobWVtYmVyKTsKICAgICAgICB9CgogICAgICAgIFN0cmluZyBuYXRpdmVOYW1lID0gX2dldE5hdGl2ZU1lbWJlck5hbWUoY29uc3RhbnQpOwogICAgICAgIGlmIChuYXRpdmVOYW1lICE9IG51bGwpIHsKICAgICAgICAgIGRhdGEuX25hdGl2ZU1lbWJlck5hbWVzW21lbWJlcl0gPSBuYXRpdmVOYW1lOwogICAgICAgIH0KCiAgICAgICAgU3RyaW5nIGNyZWF0ZXMgPSBfZ2V0Q3JlYXRlc0Fubm90YXRpb24oY29uc3RhbnQpOwogICAgICAgIGlmIChjcmVhdGVzICE9IG51bGwpIHsKICAgICAgICAgIGlmIChjcmVhdGVzQW5ub3RhdGlvbnMgPT0gbnVsbCkgewogICAgICAgICAgICBkYXRhLl9jcmVhdGVzQW5ub3RhdGlvbnNbbWVtYmVyXSA9IGNyZWF0ZXNBbm5vdGF0aW9ucyA9IFtdOwogICAgICAgICAgfQogICAgICAgICAgY3JlYXRlc0Fubm90YXRpb25zLmFkZChjcmVhdGVzKTsKICAgICAgICB9CgogICAgICAgIFN0cmluZyByZXR1cm5zID0gX2dldFJldHVybnNBbm5vdGF0aW9uKGNvbnN0YW50KTsKICAgICAgICBpZiAocmV0dXJucyAhPSBudWxsKSB7CiAgICAgICAgICBpZiAocmV0dXJuc0Fubm90YXRpb25zID09IG51bGwpIHsKICAgICAgICAgICAgZGF0YS5fcmV0dXJuc0Fubm90YXRpb25zW21lbWJlcl0gPSByZXR1cm5zQW5ub3RhdGlvbnMgPSBbXTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybnNBbm5vdGF0aW9ucy5hZGQocmV0dXJucyk7CiAgICAgICAgfQoKICAgICAgICBQcmFnbWFBbm5vdGF0aW9uRGF0YSBwcmFnbWFBbm5vdGF0aW9uID0gX2dldFByYWdtYUFubm90YXRpb24oY29uc3RhbnQpOwogICAgICAgIGlmIChwcmFnbWFBbm5vdGF0aW9uICE9IG51bGwpIHsKICAgICAgICAgIGlmIChwcmFnbWFBbm5vdGF0aW9ucyA9PSBudWxsKSB7CiAgICAgICAgICAgIGRhdGEuX21lbWJlclByYWdtYUFubm90YXRpb25zW21lbWJlcl0gPSBwcmFnbWFBbm5vdGF0aW9ucyA9IFtdOwogICAgICAgICAgfQogICAgICAgICAgcHJhZ21hQW5ub3RhdGlvbnMuYWRkKHByYWdtYUFubm90YXRpb24pOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgZm9yIChpci5MaWJyYXJ5IGxpYnJhcnkgaW4gY29tcG9uZW50LmxpYnJhcmllcykgewogICAgZm9yIChpci5FeHByZXNzaW9uIGFubm90YXRpb24gaW4gbGlicmFyeS5hbm5vdGF0aW9ucykgewogICAgICBpZiAoYW5ub3RhdGlvbiBpcyBpci5Db25zdGFudEV4cHJlc3Npb24pIHsKICAgICAgICBpci5Db25zdGFudCBjb25zdGFudCA9CiAgICAgICAgICAgIG1vZHVsYXJDb3JlLmNvbnN0YW50RXZhbHVhdG9yLmV2YWx1YXRlKGFubm90YXRpb24pOwoKICAgICAgICBTdHJpbmcganNOYW1lID0gX2dldEpzSW50ZXJvcE5hbWUoY29uc3RhbnQpOwogICAgICAgIGlmIChqc05hbWUgIT0gbnVsbCkgewogICAgICAgICAgZGF0YS5fanNJbnRlcm9wTGlicmFyeU5hbWVzW2xpYnJhcnldID0ganNOYW1lOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZm9yIChpci5DbGFzcyBjbHMgaW4gbGlicmFyeS5jbGFzc2VzKSB7CiAgICAgIGZvciAoaXIuRXhwcmVzc2lvbiBhbm5vdGF0aW9uIGluIGNscy5hbm5vdGF0aW9ucykgewogICAgICAgIGlmIChhbm5vdGF0aW9uIGlzIGlyLkNvbnN0YW50RXhwcmVzc2lvbikgewogICAgICAgICAgaXIuQ29uc3RhbnQgY29uc3RhbnQgPQogICAgICAgICAgICAgIG1vZHVsYXJDb3JlLmNvbnN0YW50RXZhbHVhdG9yLmV2YWx1YXRlKGFubm90YXRpb24pOwoKICAgICAgICAgIFN0cmluZyBuYXRpdmVDbGFzc05hbWUgPSBfZ2V0TmF0aXZlQ2xhc3NOYW1lKGNvbnN0YW50KTsKICAgICAgICAgIGlmIChuYXRpdmVDbGFzc05hbWUgIT0gbnVsbCkgewogICAgICAgICAgICBkYXRhLl9uYXRpdmVDbGFzc05hbWVzW2Nsc10gPSBuYXRpdmVDbGFzc05hbWU7CiAgICAgICAgICB9CgogICAgICAgICAgU3RyaW5nIGpzTmFtZSA9IF9nZXRKc0ludGVyb3BOYW1lKGNvbnN0YW50KTsKICAgICAgICAgIGlmIChqc05hbWUgIT0gbnVsbCkgewogICAgICAgICAgICBkYXRhLl9qc0ludGVyb3BDbGFzc05hbWVzW2Nsc10gPSBqc05hbWU7CiAgICAgICAgICB9CgogICAgICAgICAgYm9vbCBpc0Fub255bW91c0pzSW50ZXJvcENsYXNzID0gX2lzQW5vbnltb3VzSnNJbnRlcm9wKGNvbnN0YW50KTsKICAgICAgICAgIGlmIChpc0Fub255bW91c0pzSW50ZXJvcENsYXNzKSB7CiAgICAgICAgICAgIGRhdGEuX2Fub255bW91c0pzSW50ZXJvcENsYXNzZXMuYWRkKGNscyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoaXIuTWVtYmVyIG1lbWJlciBpbiBjbHMubWVtYmVycykgewogICAgICAgIHByb2Nlc3NNZW1iZXIobWVtYmVyKTsKICAgICAgfQogICAgfQogICAgZm9yIChpci5NZW1iZXIgbWVtYmVyIGluIGxpYnJhcnkubWVtYmVycykgewogICAgICBwcm9jZXNzTWVtYmVyKG1lbWJlcik7CiAgICB9CiAgfQogIHJldHVybiBkYXRhOwp9CgpTdHJpbmcgX2dldE5hdGl2ZUNsYXNzTmFtZShpci5Db25zdGFudCBjb25zdGFudCkgewogIGlmIChjb25zdGFudCBpcyBpci5JbnN0YW5jZUNvbnN0YW50KSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBZGQgYW4gSXJDb21tb25FbGVtZW50cyBmb3IgdGhlc2UgcXVlcmllczsgaS5lLgogICAgLy8gYGNvbW1vbkVsZW1lbnRzLmlzTmF0aXZlQW5ub3RhdGlvbkNsYXNzKGNvbnN0YW50LmNsYXNzTm9kZSlgLgogICAgaWYgKGNvbnN0YW50LmNsYXNzTm9kZS5uYW1lID09ICdOYXRpdmUnICYmCiAgICAgICAgY29uc3RhbnQuY2xhc3NOb2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpID09IFVyaXMuZGFydF9fanNfaGVscGVyKSB7CiAgICAgIGlmIChjb25zdGFudC5maWVsZFZhbHVlcy5sZW5ndGggPT0gMSkgewogICAgICAgIGlyLkNvbnN0YW50IGZpZWxkVmFsdWUgPSBjb25zdGFudC5maWVsZFZhbHVlcy52YWx1ZXMuc2luZ2xlOwogICAgICAgIFN0cmluZyBuYW1lOwogICAgICAgIGlmIChmaWVsZFZhbHVlIGlzIGlyLlN0cmluZ0NvbnN0YW50KSB7CiAgICAgICAgICBuYW1lID0gZmllbGRWYWx1ZS52YWx1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIG5hbWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBudWxsOwp9Cgpib29sIF9pc05hdGl2ZU1lbWJlcihpci5Db25zdGFudCBjb25zdGFudCkgewogIHJldHVybiBjb25zdGFudCBpcyBpci5JbnN0YW5jZUNvbnN0YW50ICYmCiAgICAgIGNvbnN0YW50LmNsYXNzTm9kZS5uYW1lID09ICdFeHRlcm5hbE5hbWUnICYmCiAgICAgIGNvbnN0YW50LmNsYXNzTm9kZS5lbmNsb3NpbmdMaWJyYXJ5LmltcG9ydFVyaSA9PSBVcmlzLmRhcnRfX2ludGVybmFsOwp9CgpTdHJpbmcgX2dldE5hdGl2ZU1lbWJlck5hbWUoaXIuQ29uc3RhbnQgY29uc3RhbnQpIHsKICBpZiAoY29uc3RhbnQgaXMgaXIuSW5zdGFuY2VDb25zdGFudCAmJgogICAgICBjb25zdGFudC5jbGFzc05vZGUubmFtZSA9PSAnSlNOYW1lJyAmJgogICAgICBjb25zdGFudC5jbGFzc05vZGUuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmkgPT0gVXJpcy5kYXJ0X19qc19oZWxwZXIpIHsKICAgIGFzc2VydChjb25zdGFudC5maWVsZFZhbHVlcy5sZW5ndGggPT0gMSk7CiAgICBpci5Db25zdGFudCBmaWVsZFZhbHVlID0gY29uc3RhbnQuZmllbGRWYWx1ZXMudmFsdWVzLnNpbmdsZTsKICAgIGlmIChmaWVsZFZhbHVlIGlzIGlyLlN0cmluZ0NvbnN0YW50KSB7CiAgICAgIHJldHVybiBmaWVsZFZhbHVlLnZhbHVlOwogICAgfQogIH0KICByZXR1cm4gbnVsbDsKfQoKU3RyaW5nIF9nZXRDcmVhdGVzQW5ub3RhdGlvbihpci5Db25zdGFudCBjb25zdGFudCkgewogIGlmIChjb25zdGFudCBpcyBpci5JbnN0YW5jZUNvbnN0YW50ICYmCiAgICAgIGNvbnN0YW50LmNsYXNzTm9kZS5uYW1lID09ICdDcmVhdGVzJyAmJgogICAgICBjb25zdGFudC5jbGFzc05vZGUuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmkgPT0gVXJpcy5kYXJ0X19qc19oZWxwZXIpIHsKICAgIGFzc2VydChjb25zdGFudC5maWVsZFZhbHVlcy5sZW5ndGggPT0gMSk7CiAgICBpci5Db25zdGFudCBmaWVsZFZhbHVlID0gY29uc3RhbnQuZmllbGRWYWx1ZXMudmFsdWVzLnNpbmdsZTsKICAgIGlmIChmaWVsZFZhbHVlIGlzIGlyLlN0cmluZ0NvbnN0YW50KSB7CiAgICAgIHJldHVybiBmaWVsZFZhbHVlLnZhbHVlOwogICAgfQogIH0KICByZXR1cm4gbnVsbDsKfQoKU3RyaW5nIF9nZXRSZXR1cm5zQW5ub3RhdGlvbihpci5Db25zdGFudCBjb25zdGFudCkgewogIGlmIChjb25zdGFudCBpcyBpci5JbnN0YW5jZUNvbnN0YW50ICYmCiAgICAgIGNvbnN0YW50LmNsYXNzTm9kZS5uYW1lID09ICdSZXR1cm5zJyAmJgogICAgICBjb25zdGFudC5jbGFzc05vZGUuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmkgPT0gVXJpcy5kYXJ0X19qc19oZWxwZXIpIHsKICAgIGFzc2VydChjb25zdGFudC5maWVsZFZhbHVlcy5sZW5ndGggPT0gMSk7CiAgICBpci5Db25zdGFudCBmaWVsZFZhbHVlID0gY29uc3RhbnQuZmllbGRWYWx1ZXMudmFsdWVzLnNpbmdsZTsKICAgIGlmIChmaWVsZFZhbHVlIGlzIGlyLlN0cmluZ0NvbnN0YW50KSB7CiAgICAgIHJldHVybiBmaWVsZFZhbHVlLnZhbHVlOwogICAgfQogIH0KICByZXR1cm4gbnVsbDsKfQoKU3RyaW5nIF9nZXRKc0ludGVyb3BOYW1lKGlyLkNvbnN0YW50IGNvbnN0YW50KSB7CiAgaWYgKGNvbnN0YW50IGlzIGlyLkluc3RhbmNlQ29uc3RhbnQgJiYKICAgICAgY29uc3RhbnQuY2xhc3NOb2RlLm5hbWUgPT0gJ0pTJyAmJgogICAgICBjb25zdGFudC5jbGFzc05vZGUuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmkgPT0gVXJpcy5wYWNrYWdlX2pzKSB7CiAgICBhc3NlcnQoY29uc3RhbnQuZmllbGRWYWx1ZXMubGVuZ3RoID09IDEpOwogICAgaXIuQ29uc3RhbnQgZmllbGRWYWx1ZSA9IGNvbnN0YW50LmZpZWxkVmFsdWVzLnZhbHVlcy5zaW5nbGU7CiAgICBpZiAoZmllbGRWYWx1ZSBpcyBpci5OdWxsQ29uc3RhbnQpIHsKICAgICAgcmV0dXJuICcnOwogICAgfSBlbHNlIGlmIChmaWVsZFZhbHVlIGlzIGlyLlN0cmluZ0NvbnN0YW50KSB7CiAgICAgIHJldHVybiBmaWVsZFZhbHVlLnZhbHVlOwogICAgfQogIH0KICByZXR1cm4gbnVsbDsKfQoKYm9vbCBfaXNBbm9ueW1vdXNKc0ludGVyb3AoaXIuQ29uc3RhbnQgY29uc3RhbnQpIHsKICByZXR1cm4gY29uc3RhbnQgaXMgaXIuSW5zdGFuY2VDb25zdGFudCAmJgogICAgICBjb25zdGFudC5jbGFzc05vZGUubmFtZSA9PSAnX0Fub255bW91cycgJiYKICAgICAgY29uc3RhbnQuY2xhc3NOb2RlLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpID09IFVyaXMucGFja2FnZV9qczsKfQoKY2xhc3MgUHJhZ21hQW5ub3RhdGlvbkRhdGEgewogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgbm9uICdkYXJ0MmpzOicgcHJhZ21hIG5hbWVzIGlmIG5lY2Vzc2FyeS4KICBmaW5hbCBTdHJpbmcgc3VmZml4OwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IG9wdGlvbnMgb2JqZWN0cyB3aGVuIG5lY2Vzc2FyeS4KICBmaW5hbCBib29sIGhhc09wdGlvbnM7CgogIGNvbnN0IFByYWdtYUFubm90YXRpb25EYXRhKHRoaXMuc3VmZml4LCB7dGhpcy5oYXNPcHRpb25zOiBmYWxzZX0pOwoKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ2RhcnQyanM6JHN1ZmZpeCc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdQcmFnbWFBbm5vdGF0aW9uRGF0YSgkbmFtZSknOwp9CgpQcmFnbWFBbm5vdGF0aW9uRGF0YSBfZ2V0UHJhZ21hQW5ub3RhdGlvbihpci5Db25zdGFudCBjb25zdGFudCkgewogIGlmIChjb25zdGFudCBpcyEgaXIuSW5zdGFuY2VDb25zdGFudCkgcmV0dXJuIG51bGw7CiAgaXIuSW5zdGFuY2VDb25zdGFudCB2YWx1ZSA9IGNvbnN0YW50OwogIGlyLkNsYXNzIGNscyA9IHZhbHVlLmNsYXNzTm9kZTsKICBVcmkgdXJpID0gY2xzLmVuY2xvc2luZ0xpYnJhcnkuaW1wb3J0VXJpOwogIGlmICh1cmkgPT0gVXJpcy5wYWNrYWdlX21ldGFfZGFydDJqcykgewogICAgaWYgKGNscy5uYW1lID09ICdfTm9JbmxpbmUnKSB7CiAgICAgIHJldHVybiBjb25zdCBQcmFnbWFBbm5vdGF0aW9uRGF0YSgnbm9JbmxpbmUnKTsKICAgIH0gZWxzZSBpZiAoY2xzLm5hbWUgPT0gJ19UcnlJbmxpbmUnKSB7CiAgICAgIHJldHVybiBjb25zdCBQcmFnbWFBbm5vdGF0aW9uRGF0YSgndHJ5SW5saW5lJyk7CiAgICB9CiAgfSBlbHNlIGlmICh1cmkgPT0gVXJpcy5kYXJ0X2NvcmUgJiYgY2xzLm5hbWUgPT0gJ3ByYWdtYScpIHsKICAgIGlyLkNvbnN0YW50IG5hbWVWYWx1ZTsKICAgIGlyLkNvbnN0YW50IG9wdGlvbnNWYWx1ZTsKICAgIHZhbHVlLmZpZWxkVmFsdWVzLmZvckVhY2goKGlyLlJlZmVyZW5jZSByZWZlcmVuY2UsIGlyLkNvbnN0YW50IGZpZWxkVmFsdWUpIHsKICAgICAgaXIuRmllbGQgZmllbGQgPSByZWZlcmVuY2UuYXNGaWVsZDsKICAgICAgaWYgKGZpZWxkLm5hbWUubmFtZSA9PSAnbmFtZScpIHsKICAgICAgICBuYW1lVmFsdWUgPSBmaWVsZFZhbHVlOwogICAgICB9IGVsc2UgaWYgKGZpZWxkLm5hbWUubmFtZSA9PSAnb3B0aW9ucycpIHsKICAgICAgICBvcHRpb25zVmFsdWUgPSBmaWVsZFZhbHVlOwogICAgICB9CiAgICB9KTsKICAgIGlmIChuYW1lVmFsdWUgaXMhIGlyLlN0cmluZ0NvbnN0YW50KSByZXR1cm4gbnVsbDsKICAgIGlyLlN0cmluZ0NvbnN0YW50IHN0cmluZ1ZhbHVlID0gbmFtZVZhbHVlOwogICAgU3RyaW5nIG5hbWUgPSBzdHJpbmdWYWx1ZS52YWx1ZTsKICAgIFN0cmluZyBwcmVmaXggPSAnZGFydDJqczonOwogICAgaWYgKCFuYW1lLnN0YXJ0c1dpdGgocHJlZml4KSkgcmV0dXJuIG51bGw7CiAgICBTdHJpbmcgc3VmZml4ID0gbmFtZS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7CiAgICByZXR1cm4gbmV3IFByYWdtYUFubm90YXRpb25EYXRhKHN1ZmZpeCwKICAgICAgICBoYXNPcHRpb25zOiBvcHRpb25zVmFsdWUgaXMhIGlyLk51bGxDb25zdGFudCk7CiAgfQogIHJldHVybiBudWxsOwp9CgpMaXN0PFByYWdtYUFubm90YXRpb25EYXRhPiBjb21wdXRlUHJhZ21hQW5ub3RhdGlvbkRhdGFGcm9tSXIoaXIuTWVtYmVyIG1lbWJlcikgewogIExpc3Q8UHJhZ21hQW5ub3RhdGlvbkRhdGE+IGFubm90YXRpb25zID0gW107CiAgZm9yIChpci5FeHByZXNzaW9uIG1ldGFkYXRhIGluIG1lbWJlci5hbm5vdGF0aW9ucykgewogICAgaWYgKG1ldGFkYXRhIGlzISBpci5Db25zdGFudEV4cHJlc3Npb24pIGNvbnRpbnVlOwogICAgaXIuQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50RXhwcmVzc2lvbiA9IG1ldGFkYXRhOwogICAgaXIuQ29uc3RhbnQgY29uc3RhbnQgPSBjb25zdGFudEV4cHJlc3Npb24uY29uc3RhbnQ7CiAgICBhc3NlcnQoY29uc3RhbnQgaXMhIGlyLlVuZXZhbHVhdGVkQ29uc3RhbnQsCiAgICAgICAgIlVuZXhwZWN0ZWQgdW5ldmFsdWF0ZWQgY29uc3RhbnQgb24gJG1lbWJlcjogJG1ldGFkYXRhIik7CiAgICBQcmFnbWFBbm5vdGF0aW9uRGF0YSBkYXRhID0gX2dldFByYWdtYUFubm90YXRpb24oY29uc3RhbnQpOwogICAgaWYgKGRhdGEgIT0gbnVsbCkgewogICAgICBhbm5vdGF0aW9ucy5hZGQoZGF0YSk7CiAgICB9CiAgfQogIHJldHVybiBhbm5vdGF0aW9uczsKfQqBdwBOTjwBKB8XARkwJjI5OQE3MzE1AUwBT0cBS0cBT0oBSg04LQFKDTgtAUs1JAFLTQE+MzEBS1ABUE4yAT8iBAFGJwQBHj9AQwgEAUQ9MiFICggINS4qNSElChkICAQBIFEzDy0fQlEIBgQBH1EzDzMrJkY3LQoIBgQCAT8yMgEpMiUlOzEfQAE1HjcKATkeKwoBPCI4CgE6HyxIDCsKATofLEgMKwoBUCgrTAwzCggGBAE0PDEfQAE1HjkKCAYsOjMhQgFCKTsMATcgNQwBTCs2DAoILh8IBjAdBgQPAgEzKUxFL1EuRRUvIwocFwoIBgQPAgEtLDNMAgE0KS1PLkErHwYEDwIBNSkuTy5BKx8GBA8CATUpLk8uQSsfBgQPAgExKSlKLkEpETIfBgQPAgEzLDFIAgEdTBcBQhkBRQEoAQw2AgFCNSgiLCojNSs2Bj4bHlEqJyAxIwgINi8lIC8zLDcEDwIBUS83Njk4MEJAGB0GBBYCAShwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9hbm5vdGF0aW9ucy5kYXJ0LXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL2Nsb3N1cmUuZGFydLi5Ly8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKLy8vIENvbGxlY3Rpb24gb2Ygc2NvcGUgZGF0YSBjb2xsZWN0ZWQgZm9yIGEgc2luZ2xlIG1lbWJlci4KY2xhc3MgQ2xvc3VyZVNjb3BlTW9kZWwgewogIC8vLyBDb2xsZWN0aW9uIFtTY29wZUluZm9dIGRhdGEgZm9yIHRoZSBtZW1iZXIuCiAgS2VybmVsU2NvcGVJbmZvIHNjb3BlSW5mbzsKCiAgLy8vIENvbGxlY3RlZCBbQ2FwdHVyZWRTY29wZV0gZGF0YSBmb3Igbm9kZXMuCiAgTWFwPGlyLk5vZGUsIEtlcm5lbENhcHR1cmVkU2NvcGU+IGNhcHR1cmVkU2NvcGVzTWFwID0KICAgICAgPGlyLk5vZGUsIEtlcm5lbENhcHR1cmVkU2NvcGU+e307CgogIC8vLyBDb2xsZWN0ZWQgW1Njb3BlSW5mb10gZGF0YSBmb3Igbm9kZXMuCiAgTWFwPGlyLkxvY2FsRnVuY3Rpb24sIEtlcm5lbFNjb3BlSW5mbz4gY2xvc3VyZXNUb0dlbmVyYXRlID0KICAgICAgPGlyLkxvY2FsRnVuY3Rpb24sIEtlcm5lbFNjb3BlSW5mbz57fTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICckc2NvcGVJbmZvXG4kY2FwdHVyZWRTY29wZXNNYXBcbiRjbG9zdXJlc1RvR2VuZXJhdGUnOwogIH0KfQoKY2xhc3MgS2VybmVsU2NvcGVJbmZvIHsKICBmaW5hbCBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gbG9jYWxzVXNlZEluVHJ5T3JTeW5jOwogIGZpbmFsIGJvb2wgaGFzVGhpc0xvY2FsOwogIGZpbmFsIFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBib3hlZFZhcmlhYmxlczsKICAvLyBJZiBib3hlZFZhcmlhYmxlcyBpcyBlbXB0eSwgdGhpcyB3aWxsIGJlIG51bGwsIGJlY2F1c2Ugbm8gdmFyaWFibGVzIHdpbGwKICAvLyBuZWVkIHRvIGJlIGJveGVkLgogIGZpbmFsIE5vZGVCb3ggY2FwdHVyZWRWYXJpYWJsZXNBY2Nlc3NvcjsKCiAgLy8vIFRoZSBzZXQgb2YgdmFyaWFibGVzIHRoYXQgd2VyZSBkZWZpbmVkIGluIGFub3RoZXIgc2NvcGUsIGJ1dCBhcmUgdXNlZCBpbgogIC8vLyB0aGlzIHNjb3BlLiBUaGUgaXRlbXMgaW4gdGhpcyBzZXQgYXJlIGVpdGhlciBvZiB0eXBlIFZhcmlhYmxlRGVjbGFyYXRpb24KICAvLy8gb3IgVHlwZVBhcmFtZXRlclR5cGVXaXRoQ29udGV4dC4KICBTZXQ8aXIuTm9kZSAvKiBWYXJpYWJsZURlY2xhcmF0aW9uIHwgVHlwZVBhcmFtZXRlclR5cGVXaXRoQ29udGV4dCAqLyA+CiAgICAgIGZyZWVWYXJpYWJsZXMgPSBuZXcgU2V0PGlyLk5vZGU+KCk7CgogIC8vLyBBIHNldCBvZiB0eXBlIHBhcmFtZXRlcnMgdGhhdCBhcmUgZGVmaW5lZCBpbiBhbm90aGVyIHNjb3BlIGFuZCBhcmUgb25seQogIC8vLyB1c2VkIGlmIHJ1bnRpbWUgdHlwZSBpbmZvcm1hdGlvbiBpcyBjaGVja2VkLiBJZiBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24KICAvLy8gbmVlZHMgdG8gYmUgcmV0YWluZWQsIGFsbCBvZiB0aGVzZSB0eXBlIHZhcmlhYmxlcyB3aWxsIGJlIGFkZGVkIG90IHRoZQogIC8vLyBmcmVlVmFyaWFibGVzIHNldC4gV2hldGhlciB0aGVzZSB2YXJpYWJsZXMgYXJlIGFjdHVhbGx5IHVzZWQgYXMKICAvLy8gZnJlZVZhcmlhYmxlcyB3aWxsIGJlIHNldCBieSB0aGUgdGltZSB0aGlzIHN0cnVjdHVyZSBpcyBjb252ZXJ0ZWQgdG8gYQogIC8vLyBKc1Njb3BlSW5mbywgc28gSnNTY29wZUluZm8gZG9lcyBub3QgbmVlZCB0byB1c2UgdGhlbS4KICBNYXA8VHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0LCBTZXQ8VmFyaWFibGVVc2U+PiBmcmVlVmFyaWFibGVzRm9yUnRpID0KICAgICAgPFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCwgU2V0PFZhcmlhYmxlVXNlPj57fTsKCiAgLy8vIElmIHRydWUsIGB0aGlzYCBpcyB1c2VkIGFzIGEgZnJlZSB2YXJpYWJsZSwgaW4gdGhpcyBzY29wZS4gSXQgaXMgc3RvcmVkCiAgLy8vIHNlcGFyYXRlbHkgZnJvbSBbZnJlZVZhcmlhYmxlc10gYmVjYXVzZSB0aGVyZSBpcyBubyBzaW5nbGUKICAvLy8gYFZhcmlhYmxlRGVjbGFyYXRpb25gIG5vZGUgdGhhdCByZXByZXNlbnRzIGB0aGlzYC4KICBib29sIHRoaXNVc2VkQXNGcmVlVmFyaWFibGUgPSBmYWxzZTsKCiAgLy8vIElmIHRydWUsIGB0aGlzYCBpcyB1c2VkIGFzIGEgZnJlZSB2YXJpYWJsZSwgaW4gdGhpcyBzY29wZSBpZiB3ZSBhcmUgYWxzbwogIC8vLyBwZXJmb3JtaW5nIHJ1bnRpbWUgdHlwZSBjaGVja3MuIEl0IGlzIHN0b3JlZAogIC8vLyBzZXBhcmF0ZWx5IGZyb20gW3RoaXNVc2VkQXNGcmVlVmFyaWFibGVdIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdyBhdCB0aGlzCiAgLy8vIHN0YWdlIGlmIHdlIHdpbGwgYmUgbmVlZGluZyB0eXBlIGNoZWNrcyBmb3IgdGhpcyBzY29wZS4KICBTZXQ8VmFyaWFibGVVc2U+IHRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpID0gbmV3IFNldDxWYXJpYWJsZVVzZT4oKTsKCiAgS2VybmVsU2NvcGVJbmZvKHRoaXMuaGFzVGhpc0xvY2FsKQogICAgICA6IGxvY2Fsc1VzZWRJblRyeU9yU3luYyA9IG5ldyBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4oKSwKICAgICAgICBib3hlZFZhcmlhYmxlcyA9IG5ldyBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4oKSwKICAgICAgICBjYXB0dXJlZFZhcmlhYmxlc0FjY2Vzc29yID0gbnVsbDsKCiAgS2VybmVsU2NvcGVJbmZvLmZyb20odGhpcy5oYXNUaGlzTG9jYWwsIEtlcm5lbFNjb3BlSW5mbyBpbmZvKQogICAgICA6IGxvY2Fsc1VzZWRJblRyeU9yU3luYyA9IGluZm8ubG9jYWxzVXNlZEluVHJ5T3JTeW5jLAogICAgICAgIGJveGVkVmFyaWFibGVzID0gaW5mby5ib3hlZFZhcmlhYmxlcywKICAgICAgICBjYXB0dXJlZFZhcmlhYmxlc0FjY2Vzc29yID0gbnVsbDsKCiAgS2VybmVsU2NvcGVJbmZvLndpdGhCb3hlZFZhcmlhYmxlcygKICAgICAgdGhpcy5ib3hlZFZhcmlhYmxlcywKICAgICAgdGhpcy5jYXB0dXJlZFZhcmlhYmxlc0FjY2Vzc29yLAogICAgICB0aGlzLmxvY2Fsc1VzZWRJblRyeU9yU3luYywKICAgICAgdGhpcy5mcmVlVmFyaWFibGVzLAogICAgICB0aGlzLmZyZWVWYXJpYWJsZXNGb3JSdGksCiAgICAgIHRoaXMudGhpc1VzZWRBc0ZyZWVWYXJpYWJsZSwKICAgICAgdGhpcy50aGlzVXNlZEFzRnJlZVZhcmlhYmxlSWZOZWVkc1J0aSwKICAgICAgdGhpcy5oYXNUaGlzTG9jYWwpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnS2VybmVsU2NvcGVJbmZvKHRoaXM9JGhhc1RoaXNMb2NhbCwnKTsKICAgIHNiLndyaXRlKCdmcmVlVnJpYWJsZXM9JGZyZWVWYXJpYWJsZXMsJyk7CiAgICBzYi53cml0ZSgnbG9jYWxzVXNlZEluVHJ5T3JTeW5jPXske2xvY2Fsc1VzZWRJblRyeU9yU3luYy5qb2luKCcsICcpfX0nKTsKICAgIFN0cmluZyBjb21tYSA9ICcnOwogICAgc2Iud3JpdGUoJ2ZyZWVWYXJpYWJsZXNGb3JSdGk9eycpOwogICAgZnJlZVZhcmlhYmxlc0ZvclJ0aS5mb3JFYWNoKChrZXksIHZhbHVlKSB7CiAgICAgIHNiLndyaXRlKCckY29tbWEka2V5OiR2YWx1ZScpOwogICAgICBjb21tYSA9ICcsJzsKICAgIH0pOwogICAgc2Iud3JpdGUoJ30pJyk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmNsYXNzIEtlcm5lbENhcHR1cmVkU2NvcGUgZXh0ZW5kcyBLZXJuZWxTY29wZUluZm8gewogIEtlcm5lbENhcHR1cmVkU2NvcGUoCiAgICAgIFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBib3hlZFZhcmlhYmxlcywKICAgICAgTm9kZUJveCBjYXB0dXJlZFZhcmlhYmxlc0FjY2Vzc29yLAogICAgICBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gbG9jYWxzVXNlZEluVHJ5T3JTeW5jLAogICAgICBTZXQ8aXIuTm9kZSAvKiBWYXJpYWJsZURlY2xhcmF0aW9uIHwgVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0ICovID4KICAgICAgICAgIGZyZWVWYXJpYWJsZXMsCiAgICAgIE1hcDxUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQsIFNldDxWYXJpYWJsZVVzZT4+IGZyZWVWYXJpYWJsZXNGb3JSdGksCiAgICAgIGJvb2wgdGhpc1VzZWRBc0ZyZWVWYXJpYWJsZSwKICAgICAgU2V0PFZhcmlhYmxlVXNlPiB0aGlzVXNlZEFzRnJlZVZhcmlhYmxlSWZOZWVkc1J0aSwKICAgICAgYm9vbCBoYXNUaGlzTG9jYWwpCiAgICAgIDogc3VwZXIud2l0aEJveGVkVmFyaWFibGVzKAogICAgICAgICAgICBib3hlZFZhcmlhYmxlcywKICAgICAgICAgICAgY2FwdHVyZWRWYXJpYWJsZXNBY2Nlc3NvciwKICAgICAgICAgICAgbG9jYWxzVXNlZEluVHJ5T3JTeW5jLAogICAgICAgICAgICBmcmVlVmFyaWFibGVzLAogICAgICAgICAgICBmcmVlVmFyaWFibGVzRm9yUnRpLAogICAgICAgICAgICB0aGlzVXNlZEFzRnJlZVZhcmlhYmxlLAogICAgICAgICAgICB0aGlzVXNlZEFzRnJlZVZhcmlhYmxlSWZOZWVkc1J0aSwKICAgICAgICAgICAgaGFzVGhpc0xvY2FsKTsKCiAgLy8gTG9vcHMgdGhyb3VnaCB0aGUgZnJlZSB2YXJpYWJsZXMgb2YgYW4gZXhpc3RpbmcgS2VybmVsQ2FwdHVyZWRTY29wZSBhbmQKICAvLyBjcmVhdGVzIGEgbmV3IEtlcm5lbENhcHR1cmVkU2NvcGUgdGhhdCBvbmx5IGNhcHR1cmVzIHR5cGUgdmFyaWFibGVzLgogIEtlcm5lbENhcHR1cmVkU2NvcGUuZm9yU2lnbmF0dXJlKEtlcm5lbENhcHR1cmVkU2NvcGUgc2NvcGUpCiAgICAgIDogdGhpcygKICAgICAgICAgICAgX2VtcHR5LAogICAgICAgICAgICBudWxsLAogICAgICAgICAgICBfZW1wdHksCiAgICAgICAgICAgIHNjb3BlLmZyZWVWYXJpYWJsZXMud2hlcmUoCiAgICAgICAgICAgICAgICAoaXIuTm9kZSB2YXJpYWJsZSkgPT4gdmFyaWFibGUgaXMgVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0KSwKICAgICAgICAgICAgc2NvcGUuZnJlZVZhcmlhYmxlc0ZvclJ0aSwKICAgICAgICAgICAgc2NvcGUudGhpc1VzZWRBc0ZyZWVWYXJpYWJsZSwKICAgICAgICAgICAgc2NvcGUudGhpc1VzZWRBc0ZyZWVWYXJpYWJsZUlmTmVlZHNSdGksCiAgICAgICAgICAgIHNjb3BlLmhhc1RoaXNMb2NhbCk7CgogIC8vIFNpbGx5IGhhY2sgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGNvbnN0IHNldHMuCiAgc3RhdGljIGZpbmFsIFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBfZW1wdHkgPSBuZXcgU2V0KCk7CgogIGJvb2wgZ2V0IHJlcXVpcmVzQ29udGV4dEJveCA9PiBib3hlZFZhcmlhYmxlcy5pc05vdEVtcHR5Owp9CgpjbGFzcyBLZXJuZWxDYXB0dXJlZExvb3BTY29wZSBleHRlbmRzIEtlcm5lbENhcHR1cmVkU2NvcGUgewogIGZpbmFsIExpc3Q8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gYm94ZWRMb29wVmFyaWFibGVzOwoKICBLZXJuZWxDYXB0dXJlZExvb3BTY29wZSgKICAgICAgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IGJveGVkVmFyaWFibGVzLAogICAgICBOb2RlQm94IGNhcHR1cmVkVmFyaWFibGVzQWNjZXNzb3IsCiAgICAgIHRoaXMuYm94ZWRMb29wVmFyaWFibGVzLAogICAgICBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gbG9jYWxzVXNlZEluVHJ5T3JTeW5jLAogICAgICBTZXQ8aXIuTm9kZSAvKiBWYXJpYWJsZURlY2xhcmF0aW9uIHwgVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0ICovID4KICAgICAgICAgIGZyZWVWYXJpYWJsZXMsCiAgICAgIE1hcDxUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQsIFNldDxWYXJpYWJsZVVzZT4+IGZyZWVWYXJpYWJsZXNGb3JSdGksCiAgICAgIGJvb2wgdGhpc1VzZWRBc0ZyZWVWYXJpYWJsZSwKICAgICAgU2V0PFZhcmlhYmxlVXNlPiB0aGlzVXNlZEFzRnJlZVZhcmlhYmxlSWZOZWVkc1J0aSwKICAgICAgYm9vbCBoYXNUaGlzTG9jYWwpCiAgICAgIDogc3VwZXIoCiAgICAgICAgICAgIGJveGVkVmFyaWFibGVzLAogICAgICAgICAgICBjYXB0dXJlZFZhcmlhYmxlc0FjY2Vzc29yLAogICAgICAgICAgICBsb2NhbHNVc2VkSW5UcnlPclN5bmMsCiAgICAgICAgICAgIGZyZWVWYXJpYWJsZXMsCiAgICAgICAgICAgIGZyZWVWYXJpYWJsZXNGb3JSdGksCiAgICAgICAgICAgIHRoaXNVc2VkQXNGcmVlVmFyaWFibGUsCiAgICAgICAgICAgIHRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpLAogICAgICAgICAgICBoYXNUaGlzTG9jYWwpOwoKICBib29sIGdldCBoYXNCb3hlZExvb3BWYXJpYWJsZXMgPT4gYm94ZWRMb29wVmFyaWFibGVzLmlzTm90RW1wdHk7Cn0KCi8vLyBBIGxvY2FsIHZhcmlhYmxlIHRvIGRpc2FtYmlndWF0ZSBiZXR3ZWVuIGEgdmFyaWFibGUgdGhhdCBoYXMgYmVlbiBjYXB0dXJlZAovLy8gZnJvbSBvbmUgc2NvcGUgdG8gYW5vdGhlci4gVGhpcyBpcyB0aGUgaXIuTm9kZSB2ZXJzaW9uIHRoYXQgY29ycmVzcG9uZHMgdG8KLy8vIFtCb3hMb2NhbF0uCmNsYXNzIE5vZGVCb3ggewogIGZpbmFsIFN0cmluZyBuYW1lOwogIGZpbmFsIGlyLlRyZWVOb2RlIGV4ZWN1dGFibGVDb250ZXh0OwogIE5vZGVCb3godGhpcy5uYW1lLCB0aGlzLmV4ZWN1dGFibGVDb250ZXh0KTsKfQoKZW51bSBWYXJpYWJsZVVzZUtpbmQgewogIC8vLyBBbiBleHBsaWNpdCB2YXJpYWJsZSB1c2UuCiAgLy8vCiAgLy8vIEZvciB0eXBlIHZhcmlhYmxlIHRoaXMgaXMgYW4gZXhwbGljaXQgYXMtY2FzdCwgYW4gaXMtdGVzdCBvciBhIHR5cGUKICAvLy8gbGl0ZXJhbC4KICBleHBsaWNpdCwKCiAgLy8vIEEgdHlwZSB2YXJpYWJsZSB1c2VkIGluIHRoZSB0eXBlIG9mIGEgbG9jYWwgdmFyaWFibGUuCiAgbG9jYWxUeXBlLAoKICAvLy8gQSB0eXBlIHZhcmlhYmxlIHVzZWQgaW4gYW4gaW1wbGljaXQgY2FzdC4KICBpbXBsaWNpdENhc3QsCgogIC8vLyBBIHR5cGUgdmFyaWFibGUgcGFzc2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50IG9mIGEgbGlzdCBsaXRlcmFsLgogIGxpc3RMaXRlcmFsLAoKICAvLy8gQSB0eXBlIHZhcmlhYmxlIHBhc3NlZCBhcyB0aGUgdHlwZSBhcmd1bWVudCBvZiBhIHNldCBsaXRlcmFsLgogIHNldExpdGVyYWwsCgogIC8vLyBBIHR5cGUgdmFyaWFibGUgcGFzc2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50IG9mIGEgbWFwIGxpdGVyYWwuCiAgbWFwTGl0ZXJhbCwKCiAgLy8vIEEgdHlwZSB2YXJpYWJsZSBwYXNzZWQgYXMgYSB0eXBlIGFyZ3VtZW50IHRvIGEgY29uc3RydWN0b3IuCiAgY29uc3RydWN0b3JUeXBlQXJndW1lbnQsCgogIC8vLyBBIHR5cGUgdmFyaWFibGUgcGFzc2VkIGFzIGEgdHlwZSBhcmd1bWVudCB0byBhIHN0YXRpYyBtZXRob2QuCiAgc3RhdGljVHlwZUFyZ3VtZW50LAoKICAvLy8gQSB0eXBlIHZhcmlhYmxlIHBhc3NlZCBhcyBhIHR5cGUgYXJndW1lbnQgdG8gYW4gaW5zdGFuY2UgbWV0aG9kLgogIGluc3RhbmNlVHlwZUFyZ3VtZW50LAoKICAvLy8gQSB0eXBlIHZhcmlhYmxlIHBhc3NlZCBhcyBhIHR5cGUgYXJndW1lbnQgdG8gYSBsb2NhbCBmdW5jdGlvbi4KICBsb2NhbFR5cGVBcmd1bWVudCwKCiAgLy8vIEEgdHlwZSB2YXJpYWJsZSBpbiBhIHBhcmFtZXRlciB0eXBlIG9mIGEgbWVtYmVyLgogIG1lbWJlclBhcmFtZXRlciwKCiAgLy8vIEEgdHlwZSB2YXJpYWJsZSBpbiBhIHBhcmFtZXRlciB0eXBlIG9mIGEgbG9jYWwgZnVuY3Rpb24uCiAgbG9jYWxQYXJhbWV0ZXIsCgogIC8vLyBBIHR5cGUgdmFyaWFibGUgdXNlZCBpbiBhIHJldHVybiB0eXBlIG9mIGEgbWVtYmVyLgogIG1lbWJlclJldHVyblR5cGUsCgogIC8vLyBBIHR5cGUgdmFyaWFibGUgdXNlZCBpbiBhIHJldHVybiB0eXBlIG9mIGEgbG9jYWwgZnVuY3Rpb24uCiAgbG9jYWxSZXR1cm5UeXBlLAoKICAvLy8gQSB0eXBlIHZhcmlhYmxlIGluIGEgZmllbGQgdHlwZS4KICBmaWVsZFR5cGUsCgogIC8vLyBBIHR5cGUgYXJndW1lbnQgb2YgYW4gZ2VuZXJpYyBpbnN0YW50aWF0aW9uLgogIGluc3RhbnRpYXRpb25UeXBlQXJndW1lbnQsCn0KCmNsYXNzIFZhcmlhYmxlVXNlIHsKICBmaW5hbCBWYXJpYWJsZVVzZUtpbmQga2luZDsKICBmaW5hbCBpci5NZW1iZXIgbWVtYmVyOwogIGZpbmFsIGlyLkxvY2FsRnVuY3Rpb24gbG9jYWxGdW5jdGlvbjsKICBmaW5hbCBpci5NZXRob2RJbnZvY2F0aW9uIGludm9jYXRpb247CiAgZmluYWwgaXIuSW5zdGFudGlhdGlvbiBpbnN0YW50aWF0aW9uOwoKICBjb25zdCBWYXJpYWJsZVVzZS5fc2ltcGxlKHRoaXMua2luZCkKICAgICAgOiB0aGlzLm1lbWJlciA9IG51bGwsCiAgICAgICAgdGhpcy5sb2NhbEZ1bmN0aW9uID0gbnVsbCwKICAgICAgICB0aGlzLmludm9jYXRpb24gPSBudWxsLAogICAgICAgIHRoaXMuaW5zdGFudGlhdGlvbiA9IG51bGw7CgogIFZhcmlhYmxlVXNlLm1lbWJlclBhcmFtZXRlcih0aGlzLm1lbWJlcikKICAgICAgOiB0aGlzLmtpbmQgPSBWYXJpYWJsZVVzZUtpbmQubWVtYmVyUGFyYW1ldGVyLAogICAgICAgIHRoaXMubG9jYWxGdW5jdGlvbiA9IG51bGwsCiAgICAgICAgdGhpcy5pbnZvY2F0aW9uID0gbnVsbCwKICAgICAgICB0aGlzLmluc3RhbnRpYXRpb24gPSBudWxsOwoKICBWYXJpYWJsZVVzZS5sb2NhbFBhcmFtZXRlcih0aGlzLmxvY2FsRnVuY3Rpb24pCiAgICAgIDogdGhpcy5raW5kID0gVmFyaWFibGVVc2VLaW5kLmxvY2FsUGFyYW1ldGVyLAogICAgICAgIHRoaXMubWVtYmVyID0gbnVsbCwKICAgICAgICB0aGlzLmludm9jYXRpb24gPSBudWxsLAogICAgICAgIHRoaXMuaW5zdGFudGlhdGlvbiA9IG51bGw7CgogIFZhcmlhYmxlVXNlLm1lbWJlclJldHVyblR5cGUodGhpcy5tZW1iZXIpCiAgICAgIDogdGhpcy5raW5kID0gVmFyaWFibGVVc2VLaW5kLm1lbWJlclJldHVyblR5cGUsCiAgICAgICAgdGhpcy5sb2NhbEZ1bmN0aW9uID0gbnVsbCwKICAgICAgICB0aGlzLmludm9jYXRpb24gPSBudWxsLAogICAgICAgIHRoaXMuaW5zdGFudGlhdGlvbiA9IG51bGw7CgogIFZhcmlhYmxlVXNlLmxvY2FsUmV0dXJuVHlwZSh0aGlzLmxvY2FsRnVuY3Rpb24pCiAgICAgIDogdGhpcy5raW5kID0gVmFyaWFibGVVc2VLaW5kLmxvY2FsUmV0dXJuVHlwZSwKICAgICAgICB0aGlzLm1lbWJlciA9IG51bGwsCiAgICAgICAgdGhpcy5pbnZvY2F0aW9uID0gbnVsbCwKICAgICAgICB0aGlzLmluc3RhbnRpYXRpb24gPSBudWxsOwoKICBWYXJpYWJsZVVzZS5jb25zdHJ1Y3RvclR5cGVBcmd1bWVudCh0aGlzLm1lbWJlcikKICAgICAgOiB0aGlzLmtpbmQgPSBWYXJpYWJsZVVzZUtpbmQuY29uc3RydWN0b3JUeXBlQXJndW1lbnQsCiAgICAgICAgdGhpcy5sb2NhbEZ1bmN0aW9uID0gbnVsbCwKICAgICAgICB0aGlzLmludm9jYXRpb24gPSBudWxsLAogICAgICAgIHRoaXMuaW5zdGFudGlhdGlvbiA9IG51bGw7CgogIFZhcmlhYmxlVXNlLnN0YXRpY1R5cGVBcmd1bWVudCh0aGlzLm1lbWJlcikKICAgICAgOiB0aGlzLmtpbmQgPSBWYXJpYWJsZVVzZUtpbmQuc3RhdGljVHlwZUFyZ3VtZW50LAogICAgICAgIHRoaXMubG9jYWxGdW5jdGlvbiA9IG51bGwsCiAgICAgICAgdGhpcy5pbnZvY2F0aW9uID0gbnVsbCwKICAgICAgICB0aGlzLmluc3RhbnRpYXRpb24gPSBudWxsOwoKICBWYXJpYWJsZVVzZS5pbnN0YW5jZVR5cGVBcmd1bWVudCh0aGlzLmludm9jYXRpb24pCiAgICAgIDogdGhpcy5raW5kID0gVmFyaWFibGVVc2VLaW5kLmluc3RhbmNlVHlwZUFyZ3VtZW50LAogICAgICAgIHRoaXMubWVtYmVyID0gbnVsbCwKICAgICAgICB0aGlzLmxvY2FsRnVuY3Rpb24gPSBudWxsLAogICAgICAgIHRoaXMuaW5zdGFudGlhdGlvbiA9IG51bGw7CgogIFZhcmlhYmxlVXNlLmxvY2FsVHlwZUFyZ3VtZW50KHRoaXMubG9jYWxGdW5jdGlvbiwgdGhpcy5pbnZvY2F0aW9uKQogICAgICA6IHRoaXMua2luZCA9IFZhcmlhYmxlVXNlS2luZC5sb2NhbFR5cGVBcmd1bWVudCwKICAgICAgICB0aGlzLm1lbWJlciA9IG51bGwsCiAgICAgICAgdGhpcy5pbnN0YW50aWF0aW9uID0gbnVsbDsKCiAgVmFyaWFibGVVc2UuaW5zdGFudGlhdGlvblR5cGVBcmd1bWVudCh0aGlzLmluc3RhbnRpYXRpb24pCiAgICAgIDogdGhpcy5raW5kID0gVmFyaWFibGVVc2VLaW5kLmluc3RhbnRpYXRpb25UeXBlQXJndW1lbnQsCiAgICAgICAgdGhpcy5tZW1iZXIgPSBudWxsLAogICAgICAgIHRoaXMubG9jYWxGdW5jdGlvbiA9IG51bGwsCiAgICAgICAgdGhpcy5pbnZvY2F0aW9uID0gbnVsbDsKCiAgc3RhdGljIGNvbnN0IFZhcmlhYmxlVXNlIGV4cGxpY2l0ID0KICAgICAgY29uc3QgVmFyaWFibGVVc2UuX3NpbXBsZShWYXJpYWJsZVVzZUtpbmQuZXhwbGljaXQpOwoKICBzdGF0aWMgY29uc3QgVmFyaWFibGVVc2UgbG9jYWxUeXBlID0KICAgICAgY29uc3QgVmFyaWFibGVVc2UuX3NpbXBsZShWYXJpYWJsZVVzZUtpbmQubG9jYWxUeXBlKTsKCiAgc3RhdGljIGNvbnN0IFZhcmlhYmxlVXNlIGltcGxpY2l0Q2FzdCA9CiAgICAgIGNvbnN0IFZhcmlhYmxlVXNlLl9zaW1wbGUoVmFyaWFibGVVc2VLaW5kLmltcGxpY2l0Q2FzdCk7CgogIHN0YXRpYyBjb25zdCBWYXJpYWJsZVVzZSBsaXN0TGl0ZXJhbCA9CiAgICAgIGNvbnN0IFZhcmlhYmxlVXNlLl9zaW1wbGUoVmFyaWFibGVVc2VLaW5kLmxpc3RMaXRlcmFsKTsKCiAgc3RhdGljIGNvbnN0IFZhcmlhYmxlVXNlIHNldExpdGVyYWwgPQogICAgICBjb25zdCBWYXJpYWJsZVVzZS5fc2ltcGxlKFZhcmlhYmxlVXNlS2luZC5zZXRMaXRlcmFsKTsKCiAgc3RhdGljIGNvbnN0IFZhcmlhYmxlVXNlIG1hcExpdGVyYWwgPQogICAgICBjb25zdCBWYXJpYWJsZVVzZS5fc2ltcGxlKFZhcmlhYmxlVXNlS2luZC5tYXBMaXRlcmFsKTsKCiAgc3RhdGljIGNvbnN0IFZhcmlhYmxlVXNlIGZpZWxkVHlwZSA9CiAgICAgIGNvbnN0IFZhcmlhYmxlVXNlLl9zaW1wbGUoVmFyaWFibGVVc2VLaW5kLmZpZWxkVHlwZSk7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4KICAgICAga2luZC5oYXNoQ29kZSAqIDExICsKICAgICAgbWVtYmVyLmhhc2hDb2RlICogMTMgKwogICAgICBsb2NhbEZ1bmN0aW9uLmhhc2hDb2RlICogMTcgKwogICAgICBpbnZvY2F0aW9uLmhhc2hDb2RlICogMTkgKwogICAgICBpbnN0YW50aWF0aW9uLmhhc2hDb2RlICogMjM7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgVmFyaWFibGVVc2UpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBraW5kID09IG90aGVyLmtpbmQgJiYKICAgICAgICBtZW1iZXIgPT0gb3RoZXIubWVtYmVyICYmCiAgICAgICAgbG9jYWxGdW5jdGlvbiA9PSBvdGhlci5sb2NhbEZ1bmN0aW9uICYmCiAgICAgICAgaW52b2NhdGlvbiA9PSBvdGhlci5pbnZvY2F0aW9uICYmCiAgICAgICAgaW5zdGFudGlhdGlvbiA9PSBvdGhlci5pbnN0YW50aWF0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1ZhcmlhYmxlVXNlKGtpbmQ9JGtpbmQsbWVtYmVyPSRtZW1iZXIsJwogICAgICAnbG9jYWxGdW5jdGlvbj0kbG9jYWxGdW5jdGlvbixpbnZvY2F0aW9uPSRpbnZvY2F0aW9uLCcKICAgICAgJ2luc3RhbnRpYXRpb249JGluc3RhbnRpYXRpb24pJzsKfQoKZW51bSBUeXBlVmFyaWFibGVLaW5kIHsgY2xzLCBtZXRob2QsIGxvY2FsLCBmdW5jdGlvbiB9CgovLy8gQSBmYWtlIGlyLk5vZGUgdGhhdCBob2xkcyB0aGUgVHlwZVBhcmFtZXRlclR5cGUgYXMgd2VsbCBhcyB0aGUgY29udGV4dCBpbgovLy8gd2hpY2ggaXQgb2NjdXJzLgpjbGFzcyBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQgaW1wbGVtZW50cyBpci5Ob2RlIHsKICBmaW5hbCBpci5Ob2RlIGNvbnRleHQ7CiAgZmluYWwgaXIuVHlwZVBhcmFtZXRlclR5cGUgdHlwZTsKICBmaW5hbCBUeXBlVmFyaWFibGVLaW5kIGtpbmQ7CiAgZmluYWwgaXIuVHJlZU5vZGUgdHlwZURlY2xhcmF0aW9uOwoKICAvLy8gW2NvbnRleHRdIGNhbiBiZSBlaXRoZXIgYW4gaXIuTWVtYmVyIG9yIGEgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBvcgogIC8vLyBpci5GdW5jdGlvbkV4cHJlc3Npb24uCiAgZmFjdG9yeSBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQoCiAgICAgIGlyLlR5cGVQYXJhbWV0ZXJUeXBlIHR5cGUsIGlyLlRyZWVOb2RlIGNvbnRleHQpIHsKICAgIFR5cGVWYXJpYWJsZUtpbmQga2luZDsKICAgIGlyLlRyZWVOb2RlIHR5cGVEZWNsYXJhdGlvbiA9IHR5cGUucGFyYW1ldGVyLnBhcmVudDsKICAgIGlmICh0eXBlRGVjbGFyYXRpb24gPT0gbnVsbCkgewogICAgICAvLyBXZSBoYXZlIGEgZnVuY3Rpb24gdHlwZSB2YXJpYWJsZSwgbGlrZSBgVGAgaW4gYHZvaWQgRnVuY3Rpb248VD4oaW50KWAuCiAgICAgIGtpbmQgPSBUeXBlVmFyaWFibGVLaW5kLmZ1bmN0aW9uOwogICAgfSBlbHNlIGlmICh0eXBlRGVjbGFyYXRpb24gaXMgaXIuQ2xhc3MpIHsKICAgICAgLy8gV2UgaGF2ZSBhIGNsYXNzIHR5cGUgdmFyaWFibGUsIGxpa2UgYFRgIGluIGBjbGFzcyBDbGFzczxUPiB7IC4uLiB9YC4KICAgICAga2luZCA9IFR5cGVWYXJpYWJsZUtpbmQuY2xzOwogICAgfSBlbHNlIGlmICh0eXBlRGVjbGFyYXRpb24ucGFyZW50IGlzIGlyLk1lbWJlcikgewogICAgICBpci5NZW1iZXIgbWVtYmVyID0gdHlwZURlY2xhcmF0aW9uLnBhcmVudDsKICAgICAgaWYgKG1lbWJlciBpcyBpci5Db25zdHJ1Y3RvciB8fAogICAgICAgICAgKG1lbWJlciBpcyBpci5Qcm9jZWR1cmUgJiYgbWVtYmVyLmlzRmFjdG9yeSkpIHsKICAgICAgICAvLyBXZSBoYXZlIGEgc3ludGhlc2l6ZWQgZ2VuZXJpYyBtZXRob2QgdHlwZSB2YXJpYWJsZSBmb3IgYSBjbGFzcyB0eXBlCiAgICAgICAgLy8gdmFyaWFibGUuCiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSGFuZGxlIGNvbnN0cnVjdG9yL2ZhY3RvcnkgdHlwZSB2YXJpYWJsZXMgYXMKICAgICAgICAvLyBtZXRob2QgdHlwZSB2YXJpYWJsZXMuCiAgICAgICAga2luZCA9IFR5cGVWYXJpYWJsZUtpbmQuY2xzOwogICAgICAgIHR5cGVEZWNsYXJhdGlvbiA9IG1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBXZSBoYXZlIGEgZ2VuZXJpYyBtZXRob2QgdHlwZSB2YXJpYWJsZSwgbGlrZSBgVGAgaW4KICAgICAgICAvLyBgbTxUPigpIHsgLi4uIH1gLgogICAgICAgIGtpbmQgPSBUeXBlVmFyaWFibGVLaW5kLm1ldGhvZDsKICAgICAgICB0eXBlRGVjbGFyYXRpb24gPSB0eXBlRGVjbGFyYXRpb24ucGFyZW50OwogICAgICAgIGNvbnRleHQgPSB0eXBlRGVjbGFyYXRpb247CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIFdlIGhhdmUgYSBnZW5lcmljIGxvY2FsIGZ1bmN0aW9uIHR5cGUgdmFyaWFibGUsIGxpa2UgYFRgIGluCiAgICAgIC8vIGBtKCkgeyBsb2NhbDxUPigpIHsgLi4uIH0gLi4uIH1gLgogICAgICBhc3NlcnQodHlwZURlY2xhcmF0aW9uLnBhcmVudCBpcyBpci5Mb2NhbEZ1bmN0aW9uLAogICAgICAgICAgIlVuZXhwZWN0ZWQgdHlwZSBkZWNsYXJhdGlvbjogJHR5cGVEZWNsYXJhdGlvbiIpOwogICAgICBraW5kID0gVHlwZVZhcmlhYmxlS2luZC5sb2NhbDsKICAgICAgdHlwZURlY2xhcmF0aW9uID0gdHlwZURlY2xhcmF0aW9uLnBhcmVudDsKICAgICAgY29udGV4dCA9IHR5cGVEZWNsYXJhdGlvbjsKICAgIH0KICAgIHJldHVybiBuZXcgVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0LmludGVybmFsKAogICAgICAgIHR5cGUsIGNvbnRleHQsIGtpbmQsIHR5cGVEZWNsYXJhdGlvbik7CiAgfQoKICBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQuaW50ZXJuYWwoCiAgICAgIHRoaXMudHlwZSwgdGhpcy5jb250ZXh0LCB0aGlzLmtpbmQsIHRoaXMudHlwZURlY2xhcmF0aW9uKTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KGlyLlZpc2l0b3IgdikgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1R5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dC5hY2NlcHQnKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2hpbGRyZW4oaXIuVmlzaXRvciB2KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0LnZpc2l0Q2hpbGRyZW4nKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdHlwZS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0eXBlID09IG90aGVyLnR5cGUgJiYgY29udGV4dCA9PSBvdGhlci5jb250ZXh0OwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4KICAgICAgJ1R5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCh0eXBlPSR0eXBlLGNvbnRleHQ9JGNvbnRleHQsJwogICAgICAna2luZD0ka2luZCx0eXBlRGVjbGFyYXRpb249JHR5cGVEZWNsYXJhdGlvbiknOwp9CoGjAE5OPAEoATwaMh0BMDgoASw+LQEMFkIEAgEYOxs0ThcrAU9PJ0kqAU5PTUZNPUs5AU5BOScBTzNNPk4BJUM8KgFAPC4qASYbJiIaICMtGgEMFio1Lk0XJy8lEwgUGgQCATQXMik5TBlOIzkZIhwnIxshJC4bAU1KPg4UEhQnUCcqNCEBMj8BPAIBPDkBGzIpHzlMGU4jORkPHCcjGyEkLhsBQwIBT08QEBUnLgIBFyAGSg8MATwNATAQAUUPAUQOAUQOAUIbAUQWAUcYAUUVATcTAT8SATkUAUETAScNATMdAgEUHhooKCgBJxwjICMBKzUjICMBMTQcICMBLDYjICMBMjUcICMBMz0jICMBLjgjICMBNDocIyMBRTccIwE8PxwjIAEmOwEnPAEqPwEpPgEoPQEoPQEnPAEMFhsdJCEjAQwcLS0hIjAqLgQBDEA9JwIBNwFOFTcZIx8lAUodJzgbOSNQKC5OIzYxJjpPFU0iJTEPPx0oMiMIDUUrOTwlMCEGNS8EAShBAQwZRgQBDCBNBAEMJQEMHD07BAEMF0E2AgEkcGFja2FnZTpjb21waWxlci9zcmMvaXIvY2xvc3VyZS5kYXJ0LHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL2ltcGFjdC5kYXJ0wABgLS8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JwogICAgc2hvdyBvcGVyYXRvckZyb21TdHJpbmc7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJ2NvbnN0YW50cy5kYXJ0JzsKaW1wb3J0ICdpbXBhY3RfZGF0YS5kYXJ0JzsKaW1wb3J0ICdydW50aW1lX3R5cGVfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnc2NvcGUuZGFydCc7CmltcG9ydCAnc3RhdGljX3R5cGUuZGFydCc7CmltcG9ydCAnc3RhdGljX3R5cGVfY2FjaGUuZGFydCc7CmltcG9ydCAndXRpbC5kYXJ0JzsKCi8vLyBJbnRlcmZhY2UgZm9yIGNvbGxlY3Rpbmcgd29ybGQgaW1wYWN0IGRhdGEuCi8vLwovLy8gVGhpcyBpcyB1c2VkIGJvdGggZm9yIGRpcmVjdCB3b3JsZCBpbXBhY3QgY29tcHV0YXRpb24gdGhyb3VnaCB0aGUKLy8vIFtLZXJuZWxJbXBhY3RCdWlsZGVyXSBhbmQgZm9yIHNlcmlhbGl6YXRpb24gdGhyb3VnaCB0aGUgW0ltcGFjdEJ1aWxkZXJdCi8vLyBhbmQgW0ltcGFjdExvYWRlcl0uCmFic3RyYWN0IGNsYXNzIEltcGFjdFJlZ2lzdHJ5IHsKICB2b2lkIHJlZ2lzdGVySW50TGl0ZXJhbChpbnQgdmFsdWUpOwoKICB2b2lkIHJlZ2lzdGVyRG91YmxlTGl0ZXJhbChkb3VibGUgdmFsdWUpOwoKICB2b2lkIHJlZ2lzdGVyQm9vbExpdGVyYWwoYm9vbCB2YWx1ZSk7CgogIHZvaWQgcmVnaXN0ZXJTdHJpbmdMaXRlcmFsKFN0cmluZyB2YWx1ZSk7CgogIHZvaWQgcmVnaXN0ZXJTeW1ib2xMaXRlcmFsKFN0cmluZyB2YWx1ZSk7CgogIHZvaWQgcmVnaXN0ZXJOdWxsTGl0ZXJhbCgpOwoKICB2b2lkIHJlZ2lzdGVyTGlzdExpdGVyYWwoaXIuRGFydFR5cGUgZWxlbWVudFR5cGUsCiAgICAgIHtib29sIGlzQ29uc3QsIGJvb2wgaXNFbXB0eX0pOwoKICB2b2lkIHJlZ2lzdGVyU2V0TGl0ZXJhbChpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSwKICAgICAge2Jvb2wgaXNDb25zdCwgYm9vbCBpc0VtcHR5fSk7CgogIHZvaWQgcmVnaXN0ZXJNYXBMaXRlcmFsKGlyLkRhcnRUeXBlIGtleVR5cGUsIGlyLkRhcnRUeXBlIHZhbHVlVHlwZSwKICAgICAge2Jvb2wgaXNDb25zdCwgYm9vbCBpc0VtcHR5fSk7CgogIHZvaWQgcmVnaXN0ZXJTdGF0aWNUZWFyT2ZmKAogICAgICBpci5Qcm9jZWR1cmUgcHJvY2VkdXJlLCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpOwoKICB2b2lkIHJlZ2lzdGVyU3RhdGljR2V0KGlyLk1lbWJlciBtZW1iZXIsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCk7CgogIHZvaWQgcmVnaXN0ZXJTdGF0aWNTZXQoaXIuTWVtYmVyIG1lbWJlciwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KTsKCiAgdm9pZCByZWdpc3RlckFzc2VydCh7Ym9vbCB3aXRoTWVzc2FnZX0pOwoKICB2b2lkIHJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oCiAgICAgIGlyLkZ1bmN0aW9uVHlwZSBleHByZXNzaW9uVHlwZSwgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyk7CgogIHZvaWQgcmVnaXN0ZXJTeW5jU3Rhcihpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSk7CgogIHZvaWQgcmVnaXN0ZXJBc3luYyhpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSk7CgogIHZvaWQgcmVnaXN0ZXJBc3luY1N0YXIoaXIuRGFydFR5cGUgZWxlbWVudFR5cGUpOwoKICB2b2lkIHJlZ2lzdGVyU3RyaW5nQ29uY2F0ZW5hdGlvbigpOwoKICB2b2lkIHJlZ2lzdGVyTG9jYWxGdW5jdGlvbihpci5UcmVlTm9kZSBub2RlKTsKCiAgdm9pZCByZWdpc3RlckxvY2FsV2l0aG91dEluaXRpYWxpemVyKCk7CgogIHZvaWQgcmVnaXN0ZXJJc0NoZWNrKGlyLkRhcnRUeXBlIHR5cGUpOwoKICB2b2lkIHJlZ2lzdGVySW1wbGljaXRDYXN0KGlyLkRhcnRUeXBlIHR5cGUpOwoKICB2b2lkIHJlZ2lzdGVyQXNDYXN0KGlyLkRhcnRUeXBlIHR5cGUpOwoKICB2b2lkIHJlZ2lzdGVyVGhyb3coKTsKCiAgdm9pZCByZWdpc3RlclN5bmNGb3JJbihpci5EYXJ0VHlwZSBpdGVyYWJsZVR5cGUsIGlyLkRhcnRUeXBlIGl0ZXJhdG9yVHlwZSwKICAgICAgQ2xhc3NSZWxhdGlvbiBpdGVyYXRvckNsYXNzUmVsYXRpb24pOwoKICB2b2lkIHJlZ2lzdGVyQXN5bmNGb3JJbihpci5EYXJ0VHlwZSBpdGVyYWJsZVR5cGUsIGlyLkRhcnRUeXBlIGl0ZXJhdG9yVHlwZSwKICAgICAgQ2xhc3NSZWxhdGlvbiBpdGVyYXRvckNsYXNzUmVsYXRpb24pOwoKICB2b2lkIHJlZ2lzdGVyQ2F0Y2goKTsKCiAgdm9pZCByZWdpc3RlclN0YWNrVHJhY2UoKTsKCiAgdm9pZCByZWdpc3RlckNhdGNoVHlwZShpci5EYXJ0VHlwZSB0eXBlKTsKCiAgdm9pZCByZWdpc3RlclR5cGVMaXRlcmFsKGlyLkRhcnRUeXBlIHR5cGUsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCk7CgogIHZvaWQgcmVnaXN0ZXJGaWVsZEluaXRpYWxpemF0aW9uKGlyLkZpZWxkIG5vZGUpOwoKICB2b2lkIHJlZ2lzdGVyRmllbGRDb25zdGFudEluaXRpYWxpemF0aW9uKAogICAgICBpci5GaWVsZCBub2RlLCBDb25zdGFudFJlZmVyZW5jZSBjb25zdGFudCk7CgogIHZvaWQgcmVnaXN0ZXJMb2FkTGlicmFyeSgpOwoKICB2b2lkIHJlZ2lzdGVyUmVkaXJlY3RpbmdJbml0aWFsaXplcigKICAgICAgaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpOwoKICB2b2lkIHJlZ2lzdGVyUGFyYW1ldGVyQ2hlY2soaXIuRGFydFR5cGUgdHlwZSk7CgogIHZvaWQgcmVnaXN0ZXJMYXp5RmllbGQoKTsKCiAgdm9pZCByZWdpc3Rlck5ldygKICAgICAgaXIuTWVtYmVyIGNvbnN0cnVjdG9yLAogICAgICBpci5JbnRlcmZhY2VUeXBlIHR5cGUsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCwKICAgICAge2Jvb2wgaXNDb25zdH0pOwoKICB2b2lkIHJlZ2lzdGVyQ29uc3RJbnN0YW50aWF0aW9uKGlyLkNsYXNzIGNscywgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KTsKCiAgdm9pZCByZWdpc3RlclN0YXRpY0ludm9jYXRpb24oCiAgICAgIGlyLlByb2NlZHVyZSB0YXJnZXQsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCk7CgogIHZvaWQgcmVnaXN0ZXJMb2NhbEZ1bmN0aW9uSW52b2NhdGlvbigKICAgICAgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBsb2NhbEZ1bmN0aW9uLAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKTsKCiAgdm9pZCByZWdpc3RlckR5bmFtaWNJbnZvY2F0aW9uKAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIENsYXNzUmVsYXRpb24gcmVsYXRpb24sCiAgICAgIGlyLk5hbWUgbmFtZSwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyk7CgogIHZvaWQgcmVnaXN0ZXJJbnN0YW5jZUludm9jYXRpb24oCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwKICAgICAgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwKICAgICAgaXIuTWVtYmVyIHRhcmdldCwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyk7CgogIHZvaWQgcmVnaXN0ZXJGdW5jdGlvbkludm9jYXRpb24oCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyk7CgogIHZvaWQgcmVnaXN0ZXJEeW5hbWljR2V0KAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIENsYXNzUmVsYXRpb24gcmVsYXRpb24sIGlyLk5hbWUgbmFtZSk7CgogIHZvaWQgcmVnaXN0ZXJJbnN0YW5jZUdldCgKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLCBpci5NZW1iZXIgdGFyZ2V0KTsKCiAgdm9pZCByZWdpc3RlckR5bmFtaWNTZXQoCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwgaXIuTmFtZSBuYW1lKTsKCiAgdm9pZCByZWdpc3Rlckluc3RhbmNlU2V0KAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIENsYXNzUmVsYXRpb24gcmVsYXRpb24sIGlyLk1lbWJlciB0YXJnZXQpOwoKICB2b2lkIHJlZ2lzdGVyU3VwZXJJbnZvY2F0aW9uKGlyLk5hbWUgbmFtZSwgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyk7CgogIHZvaWQgcmVnaXN0ZXJTdXBlckdldChpci5OYW1lIG5hbWUpOwoKICB2b2lkIHJlZ2lzdGVyU3VwZXJTZXQoaXIuTmFtZSBuYW1lKTsKCiAgdm9pZCByZWdpc3RlclN1cGVySW5pdGlhbGl6ZXIoCiAgICAgIGlyLkNvbnN0cnVjdG9yIHNvdXJjZSwKICAgICAgaXIuQ29uc3RydWN0b3IgdGFyZ2V0LAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKTsKCiAgdm9pZCByZWdpc3RlclJ1bnRpbWVUeXBlVXNlKGlyLlByb3BlcnR5R2V0IG5vZGUsIFJ1bnRpbWVUeXBlVXNlS2luZCBraW5kLAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIGlyLkRhcnRUeXBlIGFyZ3VtZW50VHlwZSk7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGVzZSB3aGVuIENGRSBwcm92aWRlcyBjb25zdGFudHMuCiAgdm9pZCByZWdpc3RlckNvbnN0cnVjdG9yTm9kZShpci5Db25zdHJ1Y3RvciBub2RlKTsKICB2b2lkIHJlZ2lzdGVyRmllbGROb2RlKGlyLkZpZWxkIG5vZGUpOwogIHZvaWQgcmVnaXN0ZXJQcm9jZWR1cmVOb2RlKGlyLlByb2NlZHVyZSBub2RlKTsKICB2b2lkIHJlZ2lzdGVyU3RhdGljSW52b2NhdGlvbk5vZGUoaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKTsKICB2b2lkIHJlZ2lzdGVyU3dpdGNoU3RhdGVtZW50Tm9kZShpci5Td2l0Y2hTdGF0ZW1lbnQgbm9kZSk7CiAgdm9pZCByZWdpc3RlckNvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uTm9kZShpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSk7Cn0KCmFic3RyYWN0IGNsYXNzIEltcGFjdEJ1aWxkZXJCYXNlIGV4dGVuZHMgU3RhdGljVHlwZVZpc2l0b3IKICAgIGltcGxlbWVudHMgSW1wYWN0UmVnaXN0cnkgewogIEBvdmVycmlkZQogIGZpbmFsIFZhcmlhYmxlU2NvcGVNb2RlbCB2YXJpYWJsZVNjb3BlTW9kZWw7CgogIEltcGFjdEJ1aWxkZXJCYXNlKGlyLlR5cGVFbnZpcm9ubWVudCB0eXBlRW52aXJvbm1lbnQsCiAgICAgIGlyLkNsYXNzSGllcmFyY2h5IGNsYXNzSGllcmFyY2h5LCB0aGlzLnZhcmlhYmxlU2NvcGVNb2RlbCkKICAgICAgOiBzdXBlcih0eXBlRW52aXJvbm1lbnQsIGNsYXNzSGllcmFyY2h5KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnRMaXRlcmFsKGlyLkludExpdGVyYWwgbm9kZSkgewogICAgcmVnaXN0ZXJJbnRMaXRlcmFsKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVEb3VibGVMaXRlcmFsKGlyLkRvdWJsZUxpdGVyYWwgbm9kZSkgewogICAgcmVnaXN0ZXJEb3VibGVMaXRlcmFsKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVCb29sTGl0ZXJhbChpci5Cb29sTGl0ZXJhbCBub2RlKSB7CiAgICByZWdpc3RlckJvb2xMaXRlcmFsKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTdHJpbmdMaXRlcmFsKGlyLlN0cmluZ0xpdGVyYWwgbm9kZSkgewogICAgcmVnaXN0ZXJTdHJpbmdMaXRlcmFsKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTeW1ib2xMaXRlcmFsKGlyLlN5bWJvbExpdGVyYWwgbm9kZSkgewogICAgcmVnaXN0ZXJTeW1ib2xMaXRlcmFsKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOdWxsTGl0ZXJhbChpci5OdWxsTGl0ZXJhbCBub2RlKSB7CiAgICByZWdpc3Rlck51bGxMaXRlcmFsKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxpc3RMaXRlcmFsKGlyLkxpc3RMaXRlcmFsIG5vZGUpIHsKICAgIHJlZ2lzdGVyTGlzdExpdGVyYWwobm9kZS50eXBlQXJndW1lbnQsCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0LCBpc0VtcHR5OiBub2RlLmV4cHJlc3Npb25zLmlzRW1wdHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTZXRMaXRlcmFsKGlyLlNldExpdGVyYWwgbm9kZSkgewogICAgcmVnaXN0ZXJTZXRMaXRlcmFsKG5vZGUudHlwZUFyZ3VtZW50LAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCwgaXNFbXB0eTogbm9kZS5leHByZXNzaW9ucy5pc0VtcHR5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTWFwTGl0ZXJhbChpci5NYXBMaXRlcmFsIG5vZGUpIHsKICAgIHJlZ2lzdGVyTWFwTGl0ZXJhbChub2RlLmtleVR5cGUsIG5vZGUudmFsdWVUeXBlLAogICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCwgaXNFbXB0eTogbm9kZS5lbnRyaWVzLmlzRW1wdHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTdGF0aWNHZXQoaXIuU3RhdGljR2V0IG5vZGUsIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUpIHsKICAgIGlyLk1lbWJlciB0YXJnZXQgPSBub2RlLnRhcmdldDsKICAgIGlmICh0YXJnZXQgaXMgaXIuUHJvY2VkdXJlICYmIHRhcmdldC5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuTWV0aG9kKSB7CiAgICAgIHJlZ2lzdGVyU3RhdGljVGVhck9mZih0YXJnZXQsIGdldERlZmVycmVkSW1wb3J0KG5vZGUpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlZ2lzdGVyU3RhdGljR2V0KHRhcmdldCwgZ2V0RGVmZXJyZWRJbXBvcnQobm9kZSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTdGF0aWNTZXQoaXIuU3RhdGljU2V0IG5vZGUsIGlyLkRhcnRUeXBlIHZhbHVlVHlwZSkgewogICAgcmVnaXN0ZXJTdGF0aWNTZXQobm9kZS50YXJnZXQsIGdldERlZmVycmVkSW1wb3J0KG5vZGUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQXNzZXJ0U3RhdGVtZW50KGlyLkFzc2VydFN0YXRlbWVudCBub2RlKSB7CiAgICByZWdpc3RlckFzc2VydCh3aXRoTWVzc2FnZTogbm9kZS5tZXNzYWdlICE9IG51bGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnN0YW50aWF0aW9uKGlyLkluc3RhbnRpYXRpb24gbm9kZSwKICAgICAgaXIuRnVuY3Rpb25UeXBlIGV4cHJlc3Npb25UeXBlLCBpci5EYXJ0VHlwZSByZXN1bHRUeXBlKSB7CiAgICByZWdpc3RlckdlbmVyaWNJbnN0YW50aWF0aW9uKGV4cHJlc3Npb25UeXBlLCBub2RlLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgdm9pZCBoYW5kbGVBc3luY01hcmtlcihpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb24pIHsKICAgIGlyLkFzeW5jTWFya2VyIGFzeW5jTWFya2VyID0gZnVuY3Rpb24uYXN5bmNNYXJrZXI7CiAgICBpci5EYXJ0VHlwZSByZXR1cm5UeXBlID0gZnVuY3Rpb24ucmV0dXJuVHlwZTsKCiAgICBzd2l0Y2ggKGFzeW5jTWFya2VyKSB7CiAgICAgIGNhc2UgaXIuQXN5bmNNYXJrZXIuU3luYzoKICAgICAgICBicmVhazsKICAgICAgY2FzZSBpci5Bc3luY01hcmtlci5TeW5jU3RhcjoKICAgICAgICBpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSA9IGNvbnN0IGlyLkR5bmFtaWNUeXBlKCk7CiAgICAgICAgaWYgKHJldHVyblR5cGUgaXMgaXIuSW50ZXJmYWNlVHlwZSkgewogICAgICAgICAgaWYgKHJldHVyblR5cGUuY2xhc3NOb2RlID09IHR5cGVFbnZpcm9ubWVudC5jb3JlVHlwZXMuaXRlcmFibGVDbGFzcykgewogICAgICAgICAgICBlbGVtZW50VHlwZSA9IHJldHVyblR5cGUudHlwZUFyZ3VtZW50cy5maXJzdDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmVnaXN0ZXJTeW5jU3RhcihlbGVtZW50VHlwZSk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIGlyLkFzeW5jTWFya2VyLkFzeW5jOgogICAgICAgIGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlID0gY29uc3QgaXIuRHluYW1pY1R5cGUoKTsKICAgICAgICBpZiAocmV0dXJuVHlwZSBpcyBpci5JbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICBpZiAocmV0dXJuVHlwZS5jbGFzc05vZGUgPT0gdHlwZUVudmlyb25tZW50LmNvcmVUeXBlcy5mdXR1cmVPckNsYXNzKSB7CiAgICAgICAgICAgIGVsZW1lbnRUeXBlID0gcmV0dXJuVHlwZS50eXBlQXJndW1lbnRzLmZpcnN0OwogICAgICAgICAgfSBlbHNlIGlmIChyZXR1cm5UeXBlLmNsYXNzTm9kZSA9PQogICAgICAgICAgICAgIHR5cGVFbnZpcm9ubWVudC5jb3JlVHlwZXMuZnV0dXJlQ2xhc3MpIHsKICAgICAgICAgICAgZWxlbWVudFR5cGUgPSByZXR1cm5UeXBlLnR5cGVBcmd1bWVudHMuZmlyc3Q7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJlZ2lzdGVyQXN5bmMoZWxlbWVudFR5cGUpOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBpci5Bc3luY01hcmtlci5Bc3luY1N0YXI6CiAgICAgICAgaXIuRGFydFR5cGUgZWxlbWVudFR5cGUgPSBjb25zdCBpci5EeW5hbWljVHlwZSgpOwogICAgICAgIGlmIChyZXR1cm5UeXBlIGlzIGlyLkludGVyZmFjZVR5cGUpIHsKICAgICAgICAgIGlmIChyZXR1cm5UeXBlLmNsYXNzTm9kZSA9PSB0eXBlRW52aXJvbm1lbnQuY29yZVR5cGVzLnN0cmVhbUNsYXNzKSB7CiAgICAgICAgICAgIGVsZW1lbnRUeXBlID0gcmV0dXJuVHlwZS50eXBlQXJndW1lbnRzLmZpcnN0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZWdpc3RlckFzeW5jU3RhcihlbGVtZW50VHlwZSk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIGlyLkFzeW5jTWFya2VyLlN5bmNZaWVsZGluZzoKICAgICAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgICAiVW5leHBlY3RlZCBhc3luYyBtYXJrZXI6ICR7YXN5bmNNYXJrZXJ9Iik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN0cmluZ0NvbmNhdGVuYXRpb24oaXIuU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICByZWdpc3RlclN0cmluZ0NvbmNhdGVuYXRpb24oKTsKICB9CgogIEBvdmVycmlkZQogIE51bGwgaGFuZGxlRnVuY3Rpb25EZWNsYXJhdGlvbihpci5GdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyTG9jYWxGdW5jdGlvbihub2RlKTsKICAgIGhhbmRsZUFzeW5jTWFya2VyKG5vZGUuZnVuY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGdW5jdGlvbkV4cHJlc3Npb24oaXIuRnVuY3Rpb25FeHByZXNzaW9uIG5vZGUpIHsKICAgIHJlZ2lzdGVyTG9jYWxGdW5jdGlvbihub2RlKTsKICAgIGhhbmRsZUFzeW5jTWFya2VyKG5vZGUuZnVuY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVWYXJpYWJsZURlY2xhcmF0aW9uKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgPT0gbnVsbCkgewogICAgICByZWdpc3RlckxvY2FsV2l0aG91dEluaXRpYWxpemVyKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUlzRXhwcmVzc2lvbihpci5Jc0V4cHJlc3Npb24gbm9kZSkgewogICAgcmVnaXN0ZXJJc0NoZWNrKG5vZGUudHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUFzRXhwcmVzc2lvbihpci5Bc0V4cHJlc3Npb24gbm9kZSwgaXIuRGFydFR5cGUgb3BlcmFuZFR5cGUpIHsKICAgIGlmICh0eXBlRW52aXJvbm1lbnQuaXNTdWJ0eXBlT2Yob3BlcmFuZFR5cGUsIG5vZGUudHlwZSkpIHsKICAgICAgLy8gU2tpcCB1bm5lZWRlZCBjYXN0cy4KICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKG5vZGUuaXNUeXBlRXJyb3IpIHsKICAgICAgcmVnaXN0ZXJJbXBsaWNpdENhc3Qobm9kZS50eXBlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlZ2lzdGVyQXNDYXN0KG5vZGUudHlwZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVRocm93KGlyLlRocm93IG5vZGUpIHsKICAgIHJlZ2lzdGVyVGhyb3coKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRm9ySW5TdGF0ZW1lbnQoaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSwgaXIuRGFydFR5cGUgaXRlcmFibGVUeXBlLAogICAgICBpci5EYXJ0VHlwZSBpdGVyYXRvclR5cGUpIHsKICAgIGlmIChub2RlLmlzQXN5bmMpIHsKICAgICAgcmVnaXN0ZXJBc3luY0ZvckluKGl0ZXJhYmxlVHlwZSwgaXRlcmF0b3JUeXBlLAogICAgICAgICAgY29tcHV0ZUNsYXNzUmVsYXRpb25Gcm9tVHlwZShpdGVyYXRvclR5cGUpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlZ2lzdGVyU3luY0ZvckluKGl0ZXJhYmxlVHlwZSwgaXRlcmF0b3JUeXBlLAogICAgICAgICAgY29tcHV0ZUNsYXNzUmVsYXRpb25Gcm9tVHlwZShpdGVyYXRvclR5cGUpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2F0Y2goaXIuQ2F0Y2ggbm9kZSkgewogICAgcmVnaXN0ZXJDYXRjaCgpOwogICAgaWYgKG5vZGUuc3RhY2tUcmFjZSAhPSBudWxsKSB7CiAgICAgIHJlZ2lzdGVyU3RhY2tUcmFjZSgpOwogICAgfQogICAgaWYgKG5vZGUuZ3VhcmQgaXMhIGlyLkR5bmFtaWNUeXBlKSB7CiAgICAgIHJlZ2lzdGVyQ2F0Y2hUeXBlKG5vZGUuZ3VhcmQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVUeXBlTGl0ZXJhbChpci5UeXBlTGl0ZXJhbCBub2RlKSB7CiAgICByZWdpc3RlclR5cGVMaXRlcmFsKG5vZGUudHlwZSwgZ2V0RGVmZXJyZWRJbXBvcnQobm9kZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGaWVsZEluaXRpYWxpemVyKGlyLkZpZWxkSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgcmVnaXN0ZXJGaWVsZEluaXRpYWxpemF0aW9uKG5vZGUuZmllbGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMb2FkTGlicmFyeShpci5Mb2FkTGlicmFyeSBub2RlKSB7CiAgICByZWdpc3RlckxvYWRMaWJyYXJ5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoCiAgICAgIGlyLlJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgbm9kZSwgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzKSB7CiAgICByZWdpc3RlclJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoCiAgICAgICAgbm9kZS50YXJnZXQsCiAgICAgICAgbm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGgsCiAgICAgICAgX2dldE5hbWVkQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKSwKICAgICAgICBub2RlLmFyZ3VtZW50cy50eXBlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVBhcmFtZXRlcihpci5WYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlcikgewogICAgcmVnaXN0ZXJQYXJhbWV0ZXJDaGVjayhwYXJhbWV0ZXIudHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVNpZ25hdHVyZShpci5GdW5jdGlvbk5vZGUgbm9kZSkgewogICAgZm9yIChpci5UeXBlUGFyYW1ldGVyIHBhcmFtZXRlciBpbiBub2RlLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIHJlZ2lzdGVyUGFyYW1ldGVyQ2hlY2socGFyYW1ldGVyLmJvdW5kKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ29uc3RydWN0b3IoaXIuQ29uc3RydWN0b3Igbm9kZSkgewogICAgcmVnaXN0ZXJDb25zdHJ1Y3Rvck5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZpZWxkKGlyLkZpZWxkIGZpZWxkKSB7CiAgICByZWdpc3RlclBhcmFtZXRlckNoZWNrKGZpZWxkLnR5cGUpOwogICAgaWYgKGZpZWxkLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgaWYgKCFmaWVsZC5pc0luc3RhbmNlTWVtYmVyICYmCiAgICAgICAgICAhZmllbGQuaXNDb25zdCAmJgogICAgICAgICAgZmllbGQuaW5pdGlhbGl6ZXIgaXMhIGlyLk51bGxMaXRlcmFsKSB7CiAgICAgICAgcmVnaXN0ZXJMYXp5RmllbGQoKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmVnaXN0ZXJOdWxsTGl0ZXJhbCgpOwogICAgfQogICAgcmVnaXN0ZXJGaWVsZE5vZGUoZmllbGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVQcm9jZWR1cmUoaXIuUHJvY2VkdXJlIHByb2NlZHVyZSkgewogICAgaGFuZGxlQXN5bmNNYXJrZXIocHJvY2VkdXJlLmZ1bmN0aW9uKTsKICAgIHJlZ2lzdGVyUHJvY2VkdXJlTm9kZShwcm9jZWR1cmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDb25zdHJ1Y3Rvckludm9jYXRpb24oaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUsCiAgICAgIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcywgaXIuRGFydFR5cGUgcmVzdWx0VHlwZSkgewogICAgcmVnaXN0ZXJOZXcoCiAgICAgICAgbm9kZS50YXJnZXQsCiAgICAgICAgbm9kZS5jb25zdHJ1Y3RlZFR5cGUsCiAgICAgICAgbm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGgsCiAgICAgICAgX2dldE5hbWVkQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKSwKICAgICAgICBub2RlLmFyZ3VtZW50cy50eXBlcywKICAgICAgICBnZXREZWZlcnJlZEltcG9ydChub2RlKSwKICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QpOwogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICByZWdpc3RlckNvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uTm9kZShub2RlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3RhdGljSW52b2NhdGlvbihpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUsCiAgICAgIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcywgaXIuRGFydFR5cGUgcmV0dXJuVHlwZSkgewogICAgaW50IHBvc2l0aW9uQXJndW1lbnRzID0gbm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGg7CiAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMgPSBfZ2V0TmFtZWRBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpOwogICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IG5vZGUuYXJndW1lbnRzLnR5cGVzOwogICAgaWYgKG5vZGUudGFyZ2V0LmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFdlIHNob3VsZCBub3QgbWFyayB0aGUgdHlwZSBhcyBpbnN0YW50aWF0ZWQgYnV0CiAgICAgIC8vIHJhdGhlciBmb2xsb3cgdGhlIHR5cGUgYXJndW1lbnRzIGRpcmVjdGx5LgogICAgICAvLwogICAgICAvLyBDb25zaWRlciB0aGlzOgogICAgICAvLwogICAgICAvLyAgICBhYnN0cmFjdCBjbGFzcyBBPFQ+IHsKICAgICAgLy8gICAgICBmYWN0b3J5IEEucmVndWxhcigpID0+IG5ldyBCPFQ+KCk7CiAgICAgIC8vICAgICAgZmFjdG9yeSBBLnJlZGlyZWN0KCkgPSBCPFQ+OwogICAgICAvLyAgICB9CiAgICAgIC8vCiAgICAgIC8vICAgIGNsYXNzIEI8VD4gaW1wbGVtZW50cyBBPFQ+IHt9CiAgICAgIC8vCiAgICAgIC8vICAgIG1haW4oKSB7CiAgICAgIC8vICAgICAgcHJpbnQobmV3IEE8aW50Pi5yZWd1bGFyKCkgaXMgQjxpbnQ+KTsKICAgICAgLy8gICAgICBwcmludChuZXcgQTxTdHJpbmc+LnJlZGlyZWN0KCkgaXMgQjxTdHJpbmc+KTsKICAgICAgLy8gICAgfQogICAgICAvLwogICAgICAvLyBUbyB0cmFjayB0aGF0IEIgaXMgYWN0dWFsbHkgaW5zdGFudGlhdGVkIGFzIEI8aW50PiBhbmQgQjxTdHJpbmc+IHdlCiAgICAgIC8vIG5lZWQgdG8gZm9sbG93IHRoZSB0eXBlIGFyZ3VtZW50cyBwYXNzZWQgdG8gQS5yZWd1bGFyIGFuZCBBLnJlZGlyZWN0CiAgICAgIC8vIHRvIEIuIEN1cnJlbnRseSwgd2Ugb25seSBkbyB0aGlzIHNvdW5kbHkgaWYgd2UgcmVnaXN0ZXIgQTxpbnQ+IGFuZAogICAgICAvLyBBPFN0cmluZz4gYXMgaW5zdGFudGlhdGVkLiBXZSBzaG91bGQgaW5zdGVhZCByZWdpc3RlciB0aGF0IEEuVCBpcwogICAgICAvLyBpbnN0YW50aWF0ZWQgYXMgaW50IGFuZCBTdHJpbmcuCiAgICAgIHJlZ2lzdGVyTmV3KAogICAgICAgICAgbm9kZS50YXJnZXQsCiAgICAgICAgICBuZXcgaXIuSW50ZXJmYWNlVHlwZShub2RlLnRhcmdldC5lbmNsb3NpbmdDbGFzcywgdHlwZUFyZ3VtZW50cyksCiAgICAgICAgICBwb3NpdGlvbkFyZ3VtZW50cywKICAgICAgICAgIG5hbWVkQXJndW1lbnRzLAogICAgICAgICAgbm9kZS5hcmd1bWVudHMudHlwZXMsCiAgICAgICAgICBnZXREZWZlcnJlZEltcG9ydChub2RlKSwKICAgICAgICAgIGlzQ29uc3Q6IG5vZGUuaXNDb25zdCk7CiAgICB9IGVsc2UgewogICAgICByZWdpc3RlclN0YXRpY0ludm9jYXRpb24obm9kZS50YXJnZXQsIHBvc2l0aW9uQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cywKICAgICAgICAgIHR5cGVBcmd1bWVudHMsIGdldERlZmVycmVkSW1wb3J0KG5vZGUpKTsKICAgIH0KICAgIHJlZ2lzdGVyU3RhdGljSW52b2NhdGlvbk5vZGUobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU1ldGhvZEludm9jYXRpb24oCiAgICAgIGlyLk1ldGhvZEludm9jYXRpb24gbm9kZSwKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBBcmd1bWVudFR5cGVzIGFyZ3VtZW50VHlwZXMsCiAgICAgIGlyLkRhcnRUeXBlIHJldHVyblR5cGUpIHsKICAgIGludCBwb3NpdGlvbkFyZ3VtZW50cyA9IG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoOwogICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzID0gX2dldE5hbWVkQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPSBub2RlLmFyZ3VtZW50cy50eXBlczsKICAgIGlyLkV4cHJlc3Npb24gcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgaWYgKHJlY2VpdmVyIGlzIGlyLlZhcmlhYmxlR2V0ICYmCiAgICAgICAgcmVjZWl2ZXIudmFyaWFibGUuaXNGaW5hbCAmJgogICAgICAgIHJlY2VpdmVyLnZhcmlhYmxlLnBhcmVudCBpcyBpci5GdW5jdGlvbkRlY2xhcmF0aW9uKSB7CiAgICAgIHJlZ2lzdGVyTG9jYWxGdW5jdGlvbkludm9jYXRpb24ocmVjZWl2ZXIudmFyaWFibGUucGFyZW50LAogICAgICAgICAgcG9zaXRpb25Bcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKTsKICAgIH0gZWxzZSB7CiAgICAgIENsYXNzUmVsYXRpb24gcmVsYXRpb24gPSBjb21wdXRlQ2xhc3NSZWxhdGlvbkZyb21UeXBlKHJlY2VpdmVyVHlwZSk7CgogICAgICBpci5NZW1iZXIgaW50ZXJmYWNlVGFyZ2V0ID0gbm9kZS5pbnRlcmZhY2VUYXJnZXQ7CiAgICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgPT0gbnVsbCkgewogICAgICAgIHJlZ2lzdGVyRHluYW1pY0ludm9jYXRpb24ocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiwgbm9kZS5uYW1lLAogICAgICAgICAgICBwb3NpdGlvbkFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpOwogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIHRyZWF0aW5nIGEga25vd24gZnVuY3Rpb24gY2FsbCBhcyBhCiAgICAgICAgLy8gZHluYW1pYyBjYWxsIHdoZW4gQ0ZFIHByb3ZpZGVzIGEgd2F5IHRvIGRpc3Rpbmd1aXNoIHRoZSB0d28uCiAgICAgICAgaWYgKG9wZXJhdG9yRnJvbVN0cmluZyhub2RlLm5hbWUubmFtZSkgPT0gbnVsbCAmJgogICAgICAgICAgICByZWNlaXZlclR5cGUgaXMgaXIuRHluYW1pY1R5cGUpIHsKICAgICAgICAgIC8vIFdlIG1pZ2h0IGltcGxpY2l0bHkgY2FsbCBhIGdldHRlciB0aGF0IHJldHVybnMgYSBmdW5jdGlvbi4KICAgICAgICAgIHJlZ2lzdGVyRnVuY3Rpb25JbnZvY2F0aW9uKGNvbnN0IGlyLkR5bmFtaWNUeXBlKCksIHBvc2l0aW9uQXJndW1lbnRzLAogICAgICAgICAgICAgIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGludGVyZmFjZVRhcmdldCBpcyBpci5GaWVsZCB8fAogICAgICAgICAgICBpbnRlcmZhY2VUYXJnZXQgaXMgaXIuUHJvY2VkdXJlICYmCiAgICAgICAgICAgICAgICBpbnRlcmZhY2VUYXJnZXQua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLkdldHRlcikgewogICAgICAgICAgcmVnaXN0ZXJJbnN0YW5jZUludm9jYXRpb24ocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiwgaW50ZXJmYWNlVGFyZ2V0LAogICAgICAgICAgICAgIHBvc2l0aW9uQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cyk7CiAgICAgICAgICByZWdpc3RlckZ1bmN0aW9uSW52b2NhdGlvbihpbnRlcmZhY2VUYXJnZXQuZ2V0dGVyVHlwZSwKICAgICAgICAgICAgICBwb3NpdGlvbkFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWdpc3Rlckluc3RhbmNlSW52b2NhdGlvbihyZWNlaXZlclR5cGUsIHJlbGF0aW9uLCBpbnRlcmZhY2VUYXJnZXQsCiAgICAgICAgICAgICAgcG9zaXRpb25Bcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRGlyZWN0TWV0aG9kSW52b2NhdGlvbigKICAgICAgaXIuRGlyZWN0TWV0aG9kSW52b2NhdGlvbiBub2RlLAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcywKICAgICAgaXIuRGFydFR5cGUgcmV0dXJuVHlwZSkgewogICAgcmVnaXN0ZXJJbnN0YW5jZUludm9jYXRpb24oCiAgICAgICAgcmVjZWl2ZXJUeXBlLAogICAgICAgIENsYXNzUmVsYXRpb24uZXhhY3QsCiAgICAgICAgbm9kZS50YXJnZXQsCiAgICAgICAgbm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGgsCiAgICAgICAgX2dldE5hbWVkQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKSwKICAgICAgICBub2RlLmFyZ3VtZW50cy50eXBlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVByb3BlcnR5R2V0KAogICAgICBpci5Qcm9wZXJ0eUdldCBub2RlLCBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUpIHsKICAgIENsYXNzUmVsYXRpb24gcmVsYXRpb24gPSBjb21wdXRlQ2xhc3NSZWxhdGlvbkZyb21UeXBlKHJlY2VpdmVyVHlwZSk7CiAgICBpZiAobm9kZS5pbnRlcmZhY2VUYXJnZXQgIT0gbnVsbCkgewogICAgICByZWdpc3Rlckluc3RhbmNlR2V0KHJlY2VpdmVyVHlwZSwgcmVsYXRpb24sIG5vZGUuaW50ZXJmYWNlVGFyZ2V0KTsKICAgIH0gZWxzZSB7CiAgICAgIHJlZ2lzdGVyRHluYW1pY0dldChyZWNlaXZlclR5cGUsIHJlbGF0aW9uLCBub2RlLm5hbWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVEaXJlY3RQcm9wZXJ0eUdldChpci5EaXJlY3RQcm9wZXJ0eUdldCBub2RlLAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIGlyLkRhcnRUeXBlIHJlc3VsdFR5cGUpIHsKICAgIHJlZ2lzdGVySW5zdGFuY2VHZXQocmVjZWl2ZXJUeXBlLCBDbGFzc1JlbGF0aW9uLmV4YWN0LCBub2RlLnRhcmdldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVByb3BlcnR5U2V0KAogICAgICBpci5Qcm9wZXJ0eVNldCBub2RlLCBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIGlyLkRhcnRUeXBlIHZhbHVlVHlwZSkgewogICAgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiA9IGNvbXB1dGVDbGFzc1JlbGF0aW9uRnJvbVR5cGUocmVjZWl2ZXJUeXBlKTsKICAgIGlmIChub2RlLmludGVyZmFjZVRhcmdldCAhPSBudWxsKSB7CiAgICAgIHJlZ2lzdGVySW5zdGFuY2VTZXQocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiwgbm9kZS5pbnRlcmZhY2VUYXJnZXQpOwogICAgfSBlbHNlIHsKICAgICAgcmVnaXN0ZXJEeW5hbWljU2V0KHJlY2VpdmVyVHlwZSwgcmVsYXRpb24sIG5vZGUubmFtZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZURpcmVjdFByb3BlcnR5U2V0KGlyLkRpcmVjdFByb3BlcnR5U2V0IG5vZGUsCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgaXIuRGFydFR5cGUgdmFsdWVUeXBlKSB7CiAgICByZWdpc3Rlckluc3RhbmNlU2V0KHJlY2VpdmVyVHlwZSwgQ2xhc3NSZWxhdGlvbi5leGFjdCwgbm9kZS50YXJnZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTdXBlck1ldGhvZEludm9jYXRpb24oaXIuU3VwZXJNZXRob2RJbnZvY2F0aW9uIG5vZGUsCiAgICAgIEFyZ3VtZW50VHlwZXMgYXJndW1lbnRUeXBlcywgaXIuRGFydFR5cGUgcmV0dXJuVHlwZSkgewogICAgcmVnaXN0ZXJTdXBlckludm9jYXRpb24obm9kZS5uYW1lLCBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCwKICAgICAgICBfZ2V0TmFtZWRBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpLCBub2RlLmFyZ3VtZW50cy50eXBlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN1cGVyUHJvcGVydHlHZXQoCiAgICAgIGlyLlN1cGVyUHJvcGVydHlHZXQgbm9kZSwgaXIuRGFydFR5cGUgcmVzdWx0VHlwZSkgewogICAgcmVnaXN0ZXJTdXBlckdldChub2RlLm5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTdXBlclByb3BlcnR5U2V0KGlyLlN1cGVyUHJvcGVydHlTZXQgbm9kZSwgaXIuRGFydFR5cGUgdmFsdWVUeXBlKSB7CiAgICByZWdpc3RlclN1cGVyU2V0KG5vZGUubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN1cGVySW5pdGlhbGl6ZXIoCiAgICAgIGlyLlN1cGVySW5pdGlhbGl6ZXIgbm9kZSwgQXJndW1lbnRUeXBlcyBhcmd1bWVudFR5cGVzKSB7CiAgICByZWdpc3RlclN1cGVySW5pdGlhbGl6ZXIoCiAgICAgICAgbm9kZS5wYXJlbnQsCiAgICAgICAgbm9kZS50YXJnZXQsCiAgICAgICAgbm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGgsCiAgICAgICAgX2dldE5hbWVkQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKSwKICAgICAgICBub2RlLmFyZ3VtZW50cy50eXBlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBOdWxsIHZpc2l0U3dpdGNoU3RhdGVtZW50KGlyLlN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICByZWdpc3RlclN3aXRjaFN0YXRlbWVudE5vZGUobm9kZSk7CiAgICByZXR1cm4gc3VwZXIudmlzaXRTd2l0Y2hTdGF0ZW1lbnQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVJ1bnRpbWVUeXBlVXNlKGlyLlByb3BlcnR5R2V0IG5vZGUsIFJ1bnRpbWVUeXBlVXNlS2luZCBraW5kLAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIGlyLkRhcnRUeXBlIGFyZ3VtZW50VHlwZSkgewogICAgcmVnaXN0ZXJSdW50aW1lVHlwZVVzZShub2RlLCBraW5kLCByZWNlaXZlclR5cGUsIGFyZ3VtZW50VHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNvbnN0YW50RXhwcmVzc2lvbihpci5Db25zdGFudEV4cHJlc3Npb24gbm9kZSkgewogICAgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0ID0gZ2V0RGVmZXJyZWRJbXBvcnQobm9kZSk7CiAgICBuZXcgQ29uc3RhbnRJbXBhY3RWaXNpdG9yKHRoaXMsIGltcG9ydCwgbm9kZSkudmlzaXRDb25zdGFudChub2RlLmNvbnN0YW50KTsKICB9Cn0KCi8vLyBWaXNpdG9yIHRoYXQgYnVpbGRzIGFuIFtJbXBhY3REYXRhXSBvYmplY3QgZm9yIHRoZSB3b3JsZCBpbXBhY3QuCmNsYXNzIEltcGFjdEJ1aWxkZXIgZXh0ZW5kcyBJbXBhY3RCdWlsZGVyQmFzZSB3aXRoIEltcGFjdFJlZ2lzdHJ5TWl4aW4gewogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgdXNlQXNzZXJ0czsKCiAgQG92ZXJyaWRlCiAgZmluYWwgaW5mZXJFZmZlY3RpdmVseUZpbmFsVmFyaWFibGVUeXBlczsKCiAgSW1wYWN0QnVpbGRlcihpci5UeXBlRW52aXJvbm1lbnQgdHlwZUVudmlyb25tZW50LAogICAgICBpci5DbGFzc0hpZXJhcmNoeSBjbGFzc0hpZXJhcmNoeSwgVmFyaWFibGVTY29wZU1vZGVsIHZhcmlhYmxlU2NvcGVNb2RlbCwKICAgICAge3RoaXMudXNlQXNzZXJ0czogZmFsc2UsIHRoaXMuaW5mZXJFZmZlY3RpdmVseUZpbmFsVmFyaWFibGVUeXBlczogdHJ1ZX0pCiAgICAgIDogc3VwZXIodHlwZUVudmlyb25tZW50LCBjbGFzc0hpZXJhcmNoeSwgdmFyaWFibGVTY29wZU1vZGVsKTsKCiAgSW1wYWN0QnVpbGRlckRhdGEgY29tcHV0ZUltcGFjdChpci5NZW1iZXIgbm9kZSkgewogICAgaWYgKHJldGFpbkRhdGFGb3JUZXN0aW5nKSB7CiAgICAgIHR5cGVNYXBzRm9yVGVzdGluZyA9IHt9OwogICAgfQogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgICByZXR1cm4gbmV3IEltcGFjdEJ1aWxkZXJEYXRhKAogICAgICAgIGltcGFjdERhdGEsIHR5cGVNYXBzRm9yVGVzdGluZywgZ2V0U3RhdGljVHlwZUNhY2hlKCkpOwogIH0KfQoKLy8vIFJldHVybiB0aGUgbmFtZWQgYXJndW1lbnRzIG5hbWVzIGFzIGEgbGlzdCBvZiBzdHJpbmdzLgpMaXN0PFN0cmluZz4gX2dldE5hbWVkQXJndW1lbnRzKGlyLkFyZ3VtZW50cyBhcmd1bWVudHMpID0+CiAgICBhcmd1bWVudHMubmFtZWQubWFwKChuKSA9PiBuLm5hbWUpLnRvTGlzdCgpOwoKY2xhc3MgSW1wYWN0QnVpbGRlckRhdGEgewogIGZpbmFsIEltcGFjdERhdGEgaW1wYWN0RGF0YTsKICBmaW5hbCBNYXA8aXIuRXhwcmVzc2lvbiwgVHlwZU1hcD4gdHlwZU1hcHNGb3JUZXN0aW5nOwogIGZpbmFsIFN0YXRpY1R5cGVDYWNoZSBjYWNoZWRTdGF0aWNUeXBlczsKCiAgSW1wYWN0QnVpbGRlckRhdGEoCiAgICAgIHRoaXMuaW1wYWN0RGF0YSwgdGhpcy50eXBlTWFwc0ZvclRlc3RpbmcsIHRoaXMuY2FjaGVkU3RhdGljVHlwZXMpOwp9CgpjbGFzcyBDb25zdGFudEltcGFjdFZpc2l0b3IgZXh0ZW5kcyBpci5WaXNpdE9uY2VDb25zdGFudFZpc2l0b3IgewogIGZpbmFsIEltcGFjdFJlZ2lzdHJ5IHJlZ2lzdHJ5OwogIGZpbmFsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydDsKICBmaW5hbCBpci5Db25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgQ29uc3RhbnRJbXBhY3RWaXNpdG9yKHRoaXMucmVnaXN0cnksIHRoaXMuaW1wb3J0LCB0aGlzLmV4cHJlc3Npb24pOwoKICBAb3ZlcnJpZGUKICB2b2lkIGRlZmF1bHRDb25zdGFudChpci5Db25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiVW5leHBlY3RlZCBjb25zdGFudCAke25vZGV9ICgke25vZGUucnVudGltZVR5cGV9KS4iKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRVbmV2YWx1YXRlZENvbnN0YW50KGlyLlVuZXZhbHVhdGVkQ29uc3RhbnQgbm9kZSkgewogICAgLy8gRG8gbm90aGluZy4gVGhpcyBvY2N1cnMgd2hlbiB0aGUgY29uc3RhbnQgY291bGRuJ3QgYmUgZXZhbHVhdGVkIGJlY2F1c2UKICAgIC8vIG9mIGEgY29tcGlsZS10aW1lIGVycm9yLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnQoaXIuVHlwZUxpdGVyYWxDb25zdGFudCBub2RlKSB7CiAgICByZWdpc3RyeS5yZWdpc3RlclR5cGVMaXRlcmFsKG5vZGUudHlwZSwgaW1wb3J0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUZWFyT2ZmQ29uc3RhbnQoaXIuVGVhck9mZkNvbnN0YW50IG5vZGUpIHsKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVGVhck9mZihub2RlLnByb2NlZHVyZSwgaW1wb3J0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KGlyLlBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgbm9kZSkgewogICAgcmVnaXN0cnkucmVnaXN0ZXJHZW5lcmljSW5zdGFudGlhdGlvbigKICAgICAgICBub2RlLnRlYXJPZmZDb25zdGFudC5wcm9jZWR1cmUuZnVuY3Rpb24uZnVuY3Rpb25UeXBlLCBub2RlLnR5cGVzKTsKICAgIHZpc2l0Q29uc3RhbnQobm9kZS50ZWFyT2ZmQ29uc3RhbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluc3RhbmNlQ29uc3RhbnQoaXIuSW5zdGFuY2VDb25zdGFudCBub2RlKSB7CiAgICByZWdpc3RyeS5yZWdpc3RlckNvbnN0SW5zdGFudGlhdGlvbigKICAgICAgICBub2RlLmNsYXNzTm9kZSwgbm9kZS50eXBlQXJndW1lbnRzLCBpbXBvcnQpOwogICAgbm9kZS5maWVsZFZhbHVlcy5mb3JFYWNoKChpci5SZWZlcmVuY2UgcmVmZXJlbmNlLCBpci5Db25zdGFudCB2YWx1ZSkgewogICAgICBpci5GaWVsZCBmaWVsZCA9IHJlZmVyZW5jZS5hc0ZpZWxkOwogICAgICByZWdpc3RyeS5yZWdpc3RlckZpZWxkQ29uc3RhbnRJbml0aWFsaXphdGlvbigKICAgICAgICAgIGZpZWxkLCBuZXcgQ29uc3RhbnRSZWZlcmVuY2UoZXhwcmVzc2lvbiwgdmFsdWUpKTsKICAgICAgdmlzaXRDb25zdGFudCh2YWx1ZSk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTZXRDb25zdGFudChpci5TZXRDb25zdGFudCBub2RlKSB7CiAgICByZWdpc3RyeS5yZWdpc3RlclNldExpdGVyYWwobm9kZS50eXBlQXJndW1lbnQsCiAgICAgICAgaXNDb25zdDogdHJ1ZSwgaXNFbXB0eTogbm9kZS5lbnRyaWVzLmlzRW1wdHkpOwogICAgZm9yIChpci5Db25zdGFudCBlbGVtZW50IGluIG5vZGUuZW50cmllcykgewogICAgICB2aXNpdENvbnN0YW50KGVsZW1lbnQpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpc3RDb25zdGFudChpci5MaXN0Q29uc3RhbnQgbm9kZSkgewogICAgcmVnaXN0cnkucmVnaXN0ZXJMaXN0TGl0ZXJhbChub2RlLnR5cGVBcmd1bWVudCwKICAgICAgICBpc0NvbnN0OiB0cnVlLCBpc0VtcHR5OiBub2RlLmVudHJpZXMuaXNFbXB0eSk7CiAgICBmb3IgKGlyLkNvbnN0YW50IGVsZW1lbnQgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgIHZpc2l0Q29uc3RhbnQoZWxlbWVudCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwQ29uc3RhbnQoaXIuTWFwQ29uc3RhbnQgbm9kZSkgewogICAgcmVnaXN0cnkucmVnaXN0ZXJNYXBMaXRlcmFsKG5vZGUua2V5VHlwZSwgbm9kZS52YWx1ZVR5cGUsCiAgICAgICAgaXNDb25zdDogdHJ1ZSwgaXNFbXB0eTogbm9kZS5lbnRyaWVzLmlzRW1wdHkpOwogICAgZm9yIChpci5Db25zdGFudE1hcEVudHJ5IGVudHJ5IGluIG5vZGUuZW50cmllcykgewogICAgICB2aXNpdENvbnN0YW50KGVudHJ5LmtleSk7CiAgICAgIHZpc2l0Q29uc3RhbnQoZW50cnkudmFsdWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN5bWJvbENvbnN0YW50KGlyLlN5bWJvbENvbnN0YW50IG5vZGUpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEhhbmRsZSB0aGUgbGlicmFyeSByZWZlcmVuY2UuCiAgICByZWdpc3RyeS5yZWdpc3RlclN5bWJvbExpdGVyYWwobm9kZS5uYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdDb25zdGFudChpci5TdHJpbmdDb25zdGFudCBub2RlKSB7CiAgICByZWdpc3RyeS5yZWdpc3RlclN0cmluZ0xpdGVyYWwobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RG91YmxlQ29uc3RhbnQoaXIuRG91YmxlQ29uc3RhbnQgbm9kZSkgewogICAgcmVnaXN0cnkucmVnaXN0ZXJEb3VibGVMaXRlcmFsKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludENvbnN0YW50KGlyLkludENvbnN0YW50IG5vZGUpIHsKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVySW50TGl0ZXJhbChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCb29sQ29uc3RhbnQoaXIuQm9vbENvbnN0YW50IG5vZGUpIHsKICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQm9vbExpdGVyYWwobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TnVsbENvbnN0YW50KGlyLk51bGxDb25zdGFudCBub2RlKSB7CiAgICByZWdpc3RyeS5yZWdpc3Rlck51bGxMaXRlcmFsKCk7CiAgfQp9CoMlAE5OPAE5HQEoNDUBGRkbJRUbIRQBMARGTBggJgEsASgBLAEsAR4BNCUBMyUBRiUBHjwBSQFJASsBJUgBMgEvATMBJgEwASoBKgEvASkBGAFNLAFOLAEYAR0BLAFLATMBLDIBHgEnIh8jKAExARwBFB0dHyMnIxcBUSQBIRsfIyckASgsHyMoASIgHhQfIygBIyAeGB8jKAEjIB8jKAEbRwEcSwEbRwEcSwFGRQEnAScBIR0dHyMoAUw7AUQ1KTE/PU4CATsgDC8BOEEwAQwuJAQBDDQnBAEMMCUEAQw0JwQBDDQnBAEMMBsEAQwwK0MEAQwuKkMEAQwuNT8EAQxEJEw+DToGBAEMQz0EAQw4NwQBDDJARgQBNTcyARsgDyQ6LlE6DAonDwEhOi5ROi03OgwKJA8BJTouTzoMCigPASgsOAYEAQxAIwQBDEAhJgQBDD4hJgQBDEAkKQYEAQwyIAQBDEs/Hg4GHCcNIQYEAQwkFQQBDE4iGDU3DTQ3BgQBDCQVIxwGKSUGBAEMMD0EAQw6LQQBDDAbBAEMJUUkFSosHwQBDDssBAEMLz4vBgQBDDAjBAEMJSglJRwyHQgNHQYeBAEMMSsmBAEMQj0RFR4qLB4hIBg0BgQBDDg9PkY8OE40CRgJIjErDgkqCRU1PA4JTU5MSykTF0sdGiAjIg1PMwYoBAEMHyAgIyA+RjwsJiU+QD0NSwE4JUU/Skg6LkhQLgoPKy9DTkFBQRFOQQoIBgQBDCUmICMgIBYdFSosHwQBDBpPSShJDT0GBAEMOjpJBAEMGk5JKEkNPQYEAQw6OUkEAQxCPUlDBAEMHzohBAEMUSEEAQwfPx4VFSosHwQBDDcnLQQBDEo8RAQBDD47UAQCAUVJDBkBDCwBNE9PRAE0IB8GFyI/BAIBOzsxARofOCsBFUkCAUIhJSoBRgEMKyA/BAEMP08gBAEMPzUEAQw3PAQBDFErSykEAQw5KTVLKjQ8HAgEAQwvMzcwHgYEAQwxNDcwHgYEAQwvPjc2ICIGBAEMNTovBAEMNTAEAQw1MAQBDC8tBAEMMS4EAQwxJAQCASNwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9pbXBhY3QuZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pci9pbXBhY3RfZGF0YS5kYXJ0wADMuS8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3V0aWwvZW51bXNldC5kYXJ0JzsKaW1wb3J0ICdjb25zdGFudHMuZGFydCc7CmltcG9ydCAnaW1wYWN0LmRhcnQnOwppbXBvcnQgJ3J1bnRpbWVfdHlwZV9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICdzdGF0aWNfdHlwZS5kYXJ0JzsKCi8vLyBbSW1wYWN0UmVnaXN0cnldIHRoYXQgc3RvcmVzIHJlZ2lzdGVyZWQgaW1wYWN0IGluIGFuIFtJbXBhY3REYXRhXSBvYmplY3QuCmFic3RyYWN0IGNsYXNzIEltcGFjdFJlZ2lzdHJ5TWl4aW4gaW1wbGVtZW50cyBJbXBhY3RSZWdpc3RyeSB7CiAgZmluYWwgSW1wYWN0RGF0YUltcGwgX2RhdGEgPSBuZXcgSW1wYWN0RGF0YUltcGwoKTsKCiAgSW1wYWN0RGF0YSBnZXQgaW1wYWN0RGF0YSA9PiBfZGF0YTsKCiAgdm9pZCBfcmVnaXN0ZXJGZWF0dXJlKF9GZWF0dXJlIGZlYXR1cmUpIHsKICAgIF9kYXRhLl9mZWF0dXJlcyA/Pz0gbmV3IEVudW1TZXQ8X0ZlYXR1cmU+KCk7CiAgICBfZGF0YS5fZmVhdHVyZXMuYWRkKGZlYXR1cmUpOwogIH0KCiAgdm9pZCBfcmVnaXN0ZXJUeXBlVXNlKGlyLkRhcnRUeXBlIHR5cGUsIF9UeXBlVXNlS2luZCBraW5kKSB7CiAgICBfZGF0YS5fdHlwZVVzZXMgPz89IFtdOwogICAgX2RhdGEuX3R5cGVVc2VzLmFkZChuZXcgX1R5cGVVc2UodHlwZSwga2luZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN1cGVySW5pdGlhbGl6ZXIoCiAgICAgIGlyLkNvbnN0cnVjdG9yIHNvdXJjZSwKICAgICAgaXIuQ29uc3RydWN0b3IgdGFyZ2V0LAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBfZGF0YS5fc3VwZXJJbml0aWFsaXplcnMgPz89IFtdOwogICAgX2RhdGEuX3N1cGVySW5pdGlhbGl6ZXJzLmFkZChuZXcgX1N1cGVySW5pdGlhbGl6ZXIoCiAgICAgICAgc291cmNlLAogICAgICAgIHRhcmdldCwKICAgICAgICBuZXcgX0NhbGxTdHJ1Y3R1cmUoCiAgICAgICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN1cGVyU2V0KGlyLk5hbWUgbmFtZSkgewogICAgX2RhdGEuX3N1cGVyU2V0cyA/Pz0gW107CiAgICBfZGF0YS5fc3VwZXJTZXRzLmFkZChuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdXBlckdldChpci5OYW1lIG5hbWUpIHsKICAgIF9kYXRhLl9zdXBlckdldHMgPz89IFtdOwogICAgX2RhdGEuX3N1cGVyR2V0cy5hZGQobmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3VwZXJJbnZvY2F0aW9uKGlyLk5hbWUgbmFtZSwgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgX2RhdGEuX3N1cGVySW52b2NhdGlvbnMgPz89IFtdOwogICAgX2RhdGEuX3N1cGVySW52b2NhdGlvbnMuYWRkKG5ldyBfU3VwZXJJbnZvY2F0aW9uKAogICAgICAgIG5hbWUsCiAgICAgICAgbmV3IF9DYWxsU3RydWN0dXJlKAogICAgICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cykpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJJbnN0YW5jZVNldCgKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLCBpci5NZW1iZXIgdGFyZ2V0KSB7CiAgICBfZGF0YS5faW5zdGFuY2VTZXRzID8/PSBbXTsKICAgIF9kYXRhLl9pbnN0YW5jZVNldHMKICAgICAgICAuYWRkKG5ldyBfSW5zdGFuY2VBY2Nlc3MocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiwgdGFyZ2V0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRHluYW1pY1NldCgKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLCBpci5OYW1lIG5hbWUpIHsKICAgIF9kYXRhLl9keW5hbWljU2V0cyA/Pz0gW107CiAgICBfZGF0YS5fZHluYW1pY1NldHMuYWRkKG5ldyBfRHluYW1pY0FjY2VzcyhyZWNlaXZlclR5cGUsIHJlbGF0aW9uLCBuYW1lKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVySW5zdGFuY2VHZXQoCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwgaXIuTWVtYmVyIHRhcmdldCkgewogICAgX2RhdGEuX2luc3RhbmNlR2V0cyA/Pz0gW107CiAgICBfZGF0YS5faW5zdGFuY2VHZXRzCiAgICAgICAgLmFkZChuZXcgX0luc3RhbmNlQWNjZXNzKHJlY2VpdmVyVHlwZSwgcmVsYXRpb24sIHRhcmdldCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckR5bmFtaWNHZXQoCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwgaXIuTmFtZSBuYW1lKSB7CiAgICBfZGF0YS5fZHluYW1pY0dldHMgPz89IFtdOwogICAgX2RhdGEuX2R5bmFtaWNHZXRzLmFkZChuZXcgX0R5bmFtaWNBY2Nlc3MocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiwgbmFtZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckZ1bmN0aW9uSW52b2NhdGlvbigKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBfZGF0YS5fZnVuY3Rpb25JbnZvY2F0aW9ucyA/Pz0gW107CiAgICBfZGF0YS5fZnVuY3Rpb25JbnZvY2F0aW9ucy5hZGQobmV3IF9GdW5jdGlvbkludm9jYXRpb24oCiAgICAgICAgcmVjZWl2ZXJUeXBlLAogICAgICAgIG5ldyBfQ2FsbFN0cnVjdHVyZSgKICAgICAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVySW5zdGFuY2VJbnZvY2F0aW9uKAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIENsYXNzUmVsYXRpb24gcmVsYXRpb24sCiAgICAgIGlyLk1lbWJlciB0YXJnZXQsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIF9kYXRhLl9pbnN0YW5jZUludm9jYXRpb25zID8/PSBbXTsKICAgIF9kYXRhLl9pbnN0YW5jZUludm9jYXRpb25zLmFkZChuZXcgX0luc3RhbmNlSW52b2NhdGlvbigKICAgICAgICByZWNlaXZlclR5cGUsCiAgICAgICAgcmVsYXRpb24sCiAgICAgICAgdGFyZ2V0LAogICAgICAgIG5ldyBfQ2FsbFN0cnVjdHVyZSgKICAgICAgICAgICAgcG9zaXRpb25hbEFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRHluYW1pY0ludm9jYXRpb24oCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwKICAgICAgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwKICAgICAgaXIuTmFtZSBuYW1lLAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBfZGF0YS5fZHluYW1pY0ludm9jYXRpb25zID8/PSBbXTsKICAgIF9kYXRhLl9keW5hbWljSW52b2NhdGlvbnMuYWRkKG5ldyBfRHluYW1pY0ludm9jYXRpb24oCiAgICAgICAgcmVjZWl2ZXJUeXBlLAogICAgICAgIHJlbGF0aW9uLAogICAgICAgIG5hbWUsCiAgICAgICAgbmV3IF9DYWxsU3RydWN0dXJlKAogICAgICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cykpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJMb2NhbEZ1bmN0aW9uSW52b2NhdGlvbigKICAgICAgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBsb2NhbEZ1bmN0aW9uLAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBfZGF0YS5fbG9jYWxGdW5jdGlvbkludm9jYXRpb25zID8/PSBbXTsKICAgIF9kYXRhLl9sb2NhbEZ1bmN0aW9uSW52b2NhdGlvbnMuYWRkKG5ldyBfTG9jYWxGdW5jdGlvbkludm9jYXRpb24oCiAgICAgICAgbG9jYWxGdW5jdGlvbiwKICAgICAgICBuZXcgX0NhbGxTdHJ1Y3R1cmUoCiAgICAgICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0YXRpY0ludm9jYXRpb24oCiAgICAgIGlyLlByb2NlZHVyZSB0YXJnZXQsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCkgewogICAgX2RhdGEuX3N0YXRpY0ludm9jYXRpb25zID8/PSBbXTsKICAgIF9kYXRhLl9zdGF0aWNJbnZvY2F0aW9ucy5hZGQobmV3IF9TdGF0aWNJbnZvY2F0aW9uKAogICAgICAgIHRhcmdldCwKICAgICAgICBuZXcgX0NhbGxTdHJ1Y3R1cmUocG9zaXRpb25hbEFyZ3VtZW50cywgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMpLAogICAgICAgIGltcG9ydCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck5ldygKICAgICAgaXIuTWVtYmVyIGNvbnN0cnVjdG9yLAogICAgICBpci5JbnRlcmZhY2VUeXBlIHR5cGUsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCwKICAgICAge2Jvb2wgaXNDb25zdH0pIHsKICAgIF9kYXRhLl9jb25zdHJ1Y3Rvckludm9jYXRpb25zID8/PSBbXTsKICAgIF9kYXRhLl9jb25zdHJ1Y3Rvckludm9jYXRpb25zLmFkZChuZXcgX0NvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgICBjb25zdHJ1Y3RvciwKICAgICAgICB0eXBlLAogICAgICAgIG5ldyBfQ2FsbFN0cnVjdHVyZShwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cyksCiAgICAgICAgaW1wb3J0LAogICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDb25zdEluc3RhbnRpYXRpb24oaXIuQ2xhc3MgY2xzLCBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpIHsKICAgIF9kYXRhLl9jb25zdEluc3RhbnRpYXRpb25zID8/PSBbXTsKICAgIF9kYXRhLl9jb25zdEluc3RhbnRpYXRpb25zCiAgICAgICAgLmFkZChuZXcgX0NvbnN0SW5zdGFudGlhdGlvbihjbHMsIHR5cGVBcmd1bWVudHMsIGltcG9ydCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckxhenlGaWVsZCgpIHsKICAgIF9yZWdpc3RlckZlYXR1cmUoX0ZlYXR1cmUubGF6eUZpZWxkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJQYXJhbWV0ZXJDaGVjayhpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICBfcmVnaXN0ZXJUeXBlVXNlKHR5cGUsIF9UeXBlVXNlS2luZC5wYXJhbWV0ZXJDaGVjayk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyUmVkaXJlY3RpbmdJbml0aWFsaXplcigKICAgICAgaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIF9kYXRhLl9yZWRpcmVjdGluZ0luaXRpYWxpemVycyA/Pz0gW107CiAgICBfZGF0YS5fcmVkaXJlY3RpbmdJbml0aWFsaXplcnMuYWRkKG5ldyBfUmVkaXJlY3RpbmdJbml0aWFsaXplcigKICAgICAgICBjb25zdHJ1Y3RvciwKICAgICAgICBuZXcgX0NhbGxTdHJ1Y3R1cmUoCiAgICAgICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckxvYWRMaWJyYXJ5KCkgewogICAgX3JlZ2lzdGVyRmVhdHVyZShfRmVhdHVyZS5sb2FkTGlicmFyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRmllbGRJbml0aWFsaXphdGlvbihpci5GaWVsZCBub2RlKSB7CiAgICBfZGF0YS5fZmllbGRJbml0aWFsaXplcnMgPz89IFtdOwogICAgX2RhdGEuX2ZpZWxkSW5pdGlhbGl6ZXJzLmFkZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJGaWVsZENvbnN0YW50SW5pdGlhbGl6YXRpb24oCiAgICAgIGlyLkZpZWxkIG5vZGUsIENvbnN0YW50UmVmZXJlbmNlIGNvbnN0YW50KSB7CiAgICBfZGF0YS5fZmllbGRDb25zdGFudEluaXRpYWxpemVycyA/Pz0ge307CiAgICBfZGF0YS5fZmllbGRDb25zdGFudEluaXRpYWxpemVycy5wdXRJZkFic2VudChub2RlLCAoKSA9PiBbXSkuYWRkKGNvbnN0YW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJUeXBlTGl0ZXJhbChpci5EYXJ0VHlwZSB0eXBlLCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpIHsKICAgIF9kYXRhLl90eXBlTGl0ZXJhbHMgPz89IFtdOwogICAgX2RhdGEuX3R5cGVMaXRlcmFscy5hZGQobmV3IF9UeXBlTGl0ZXJhbCh0eXBlLCBpbXBvcnQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDYXRjaFR5cGUoaXIuRGFydFR5cGUgdHlwZSkgewogICAgX3JlZ2lzdGVyVHlwZVVzZSh0eXBlLCBfVHlwZVVzZUtpbmQuY2F0Y2hUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGFja1RyYWNlKCkgewogICAgX3JlZ2lzdGVyRmVhdHVyZShfRmVhdHVyZS5zdGFja1RyYWNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDYXRjaCgpIHsKICAgIF9yZWdpc3RlckZlYXR1cmUoX0ZlYXR1cmUuY2F0Y2hDbGF1c2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckFzeW5jRm9ySW4oaXIuRGFydFR5cGUgaXRlcmFibGVUeXBlLCBpci5EYXJ0VHlwZSBpdGVyYXRvclR5cGUsCiAgICAgIENsYXNzUmVsYXRpb24gaXRlcmF0b3JDbGFzc1JlbGF0aW9uKSB7CiAgICBfZGF0YS5fZm9ySW5EYXRhID8/PSBbXTsKICAgIF9kYXRhLl9mb3JJbkRhdGEuYWRkKG5ldyBfRm9ySW5EYXRhKAogICAgICAgIGl0ZXJhYmxlVHlwZSwgaXRlcmF0b3JUeXBlLCBpdGVyYXRvckNsYXNzUmVsYXRpb24sCiAgICAgICAgaXNBc3luYzogdHJ1ZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN5bmNGb3JJbihpci5EYXJ0VHlwZSBpdGVyYWJsZVR5cGUsIGlyLkRhcnRUeXBlIGl0ZXJhdG9yVHlwZSwKICAgICAgQ2xhc3NSZWxhdGlvbiBpdGVyYXRvckNsYXNzUmVsYXRpb24pIHsKICAgIF9kYXRhLl9mb3JJbkRhdGEgPz89IFtdOwogICAgX2RhdGEuX2ZvckluRGF0YS5hZGQobmV3IF9Gb3JJbkRhdGEoCiAgICAgICAgaXRlcmFibGVUeXBlLCBpdGVyYXRvclR5cGUsIGl0ZXJhdG9yQ2xhc3NSZWxhdGlvbiwKICAgICAgICBpc0FzeW5jOiBmYWxzZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclRocm93KCkgewogICAgX3JlZ2lzdGVyRmVhdHVyZShfRmVhdHVyZS50aHJvd0V4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckFzQ2FzdChpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICBfcmVnaXN0ZXJUeXBlVXNlKHR5cGUsIF9UeXBlVXNlS2luZC5hc0Nhc3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckltcGxpY2l0Q2FzdChpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICBfcmVnaXN0ZXJUeXBlVXNlKHR5cGUsIF9UeXBlVXNlS2luZC5pbXBsaWNpdENhc3QpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlcklzQ2hlY2soaXIuRGFydFR5cGUgdHlwZSkgewogICAgX3JlZ2lzdGVyVHlwZVVzZSh0eXBlLCBfVHlwZVVzZUtpbmQuaXNDaGVjayk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTG9jYWxXaXRob3V0SW5pdGlhbGl6ZXIoKSB7CiAgICBfcmVnaXN0ZXJGZWF0dXJlKF9GZWF0dXJlLmxvY2FsV2l0aG91dEluaXRpYWxpemVyKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJMb2NhbEZ1bmN0aW9uKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIF9kYXRhLl9sb2NhbEZ1bmN0aW9ucyA/Pz0gW107CiAgICBfZGF0YS5fbG9jYWxGdW5jdGlvbnMuYWRkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0cmluZ0NvbmNhdGVuYXRpb24oKSB7CiAgICBfcmVnaXN0ZXJGZWF0dXJlKF9GZWF0dXJlLnN0cmluZ0NvbmNhdGVuYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckFzeW5jU3Rhcihpci5EYXJ0VHlwZSBlbGVtZW50VHlwZSkgewogICAgX3JlZ2lzdGVyVHlwZVVzZShlbGVtZW50VHlwZSwgX1R5cGVVc2VLaW5kLmFzeW5jU3Rhck1hcmtlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQXN5bmMoaXIuRGFydFR5cGUgZWxlbWVudFR5cGUpIHsKICAgIF9yZWdpc3RlclR5cGVVc2UoZWxlbWVudFR5cGUsIF9UeXBlVXNlS2luZC5hc3luY01hcmtlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3luY1N0YXIoaXIuRGFydFR5cGUgZWxlbWVudFR5cGUpIHsKICAgIF9yZWdpc3RlclR5cGVVc2UoZWxlbWVudFR5cGUsIF9UeXBlVXNlS2luZC5zeW5jU3Rhck1hcmtlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oCiAgICAgIGlyLkZ1bmN0aW9uVHlwZSBleHByZXNzaW9uVHlwZSwgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgX2RhdGEuX2dlbmVyaWNJbnN0YW50aWF0aW9ucyA/Pz0gW107CiAgICBfZGF0YS5fZ2VuZXJpY0luc3RhbnRpYXRpb25zCiAgICAgICAgLmFkZChuZXcgX0dlbmVyaWNJbnN0YW50aWF0aW9uKGV4cHJlc3Npb25UeXBlLCB0eXBlQXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQXNzZXJ0KHtib29sIHdpdGhNZXNzYWdlfSkgewogICAgX3JlZ2lzdGVyRmVhdHVyZSh3aXRoTWVzc2FnZQogICAgICAgID8gX0ZlYXR1cmUuYXNzZXJ0V2l0aE1lc3NhZ2UKICAgICAgICA6IF9GZWF0dXJlLmFzc2VydFdpdGhvdXRNZXNzYWdlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGF0aWNTZXQoaXIuTWVtYmVyIG1lbWJlciwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KSB7CiAgICBfZGF0YS5fc3RhdGljU2V0cyA/Pz0gW107CiAgICBfZGF0YS5fc3RhdGljU2V0cy5hZGQobmV3IF9TdGF0aWNBY2Nlc3MobWVtYmVyLCBpbXBvcnQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGF0aWNHZXQoaXIuTWVtYmVyIG1lbWJlciwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0KSB7CiAgICBfZGF0YS5fc3RhdGljR2V0cyA/Pz0gW107CiAgICBfZGF0YS5fc3RhdGljR2V0cy5hZGQobmV3IF9TdGF0aWNBY2Nlc3MobWVtYmVyLCBpbXBvcnQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGF0aWNUZWFyT2ZmKAogICAgICBpci5Qcm9jZWR1cmUgcHJvY2VkdXJlLCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpIHsKICAgIF9kYXRhLl9zdGF0aWNUZWFyT2ZmcyA/Pz0gW107CiAgICBfZGF0YS5fc3RhdGljVGVhck9mZnMuYWRkKG5ldyBfU3RhdGljQWNjZXNzKHByb2NlZHVyZSwgaW1wb3J0KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTWFwTGl0ZXJhbChpci5EYXJ0VHlwZSBrZXlUeXBlLCBpci5EYXJ0VHlwZSB2YWx1ZVR5cGUsCiAgICAgIHtib29sIGlzQ29uc3QsIGJvb2wgaXNFbXB0eX0pIHsKICAgIF9kYXRhLl9tYXBMaXRlcmFscyA/Pz0gW107CiAgICBfZGF0YS5fbWFwTGl0ZXJhbHMuYWRkKG5ldyBfTWFwTGl0ZXJhbChrZXlUeXBlLCB2YWx1ZVR5cGUsCiAgICAgICAgaXNDb25zdDogaXNDb25zdCwgaXNFbXB0eTogaXNFbXB0eSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlckxpc3RMaXRlcmFsKGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlLAogICAgICB7Ym9vbCBpc0NvbnN0LCBib29sIGlzRW1wdHl9KSB7CiAgICBfZGF0YS5fbGlzdExpdGVyYWxzID8/PSBbXTsKICAgIF9kYXRhLl9saXN0TGl0ZXJhbHMuYWRkKAogICAgICAgIG5ldyBfQ29udGFpbmVyTGl0ZXJhbChlbGVtZW50VHlwZSwgaXNDb25zdDogaXNDb25zdCwgaXNFbXB0eTogaXNFbXB0eSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclNldExpdGVyYWwoaXIuRGFydFR5cGUgZWxlbWVudFR5cGUsCiAgICAgIHtib29sIGlzQ29uc3QsIGJvb2wgaXNFbXB0eX0pIHsKICAgIF9kYXRhLl9zZXRMaXRlcmFscyA/Pz0gW107CiAgICBfZGF0YS5fc2V0TGl0ZXJhbHMuYWRkKAogICAgICAgIG5ldyBfQ29udGFpbmVyTGl0ZXJhbChlbGVtZW50VHlwZSwgaXNDb25zdDogaXNDb25zdCwgaXNFbXB0eTogaXNFbXB0eSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck51bGxMaXRlcmFsKCkgewogICAgX3JlZ2lzdGVyRmVhdHVyZShfRmVhdHVyZS5udWxsTGl0ZXJhbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3ltYm9sTGl0ZXJhbChTdHJpbmcgdmFsdWUpIHsKICAgIF9kYXRhLl9zeW1ib2xMaXRlcmFscyA/Pz0gW107CiAgICBfZGF0YS5fc3ltYm9sTGl0ZXJhbHMuYWRkKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdHJpbmdMaXRlcmFsKFN0cmluZyB2YWx1ZSkgewogICAgX2RhdGEuX3N0cmluZ0xpdGVyYWxzID8/PSBbXTsKICAgIF9kYXRhLl9zdHJpbmdMaXRlcmFscy5hZGQodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckJvb2xMaXRlcmFsKGJvb2wgdmFsdWUpIHsKICAgIF9kYXRhLl9ib29sTGl0ZXJhbHMgPz89IFtdOwogICAgX2RhdGEuX2Jvb2xMaXRlcmFscy5hZGQodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckRvdWJsZUxpdGVyYWwoZG91YmxlIHZhbHVlKSB7CiAgICBfZGF0YS5fZG91YmxlTGl0ZXJhbHMgPz89IFtdOwogICAgX2RhdGEuX2RvdWJsZUxpdGVyYWxzLmFkZCh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVySW50TGl0ZXJhbChpbnQgdmFsdWUpIHsKICAgIF9kYXRhLl9pbnRMaXRlcmFscyA/Pz0gW107CiAgICBfZGF0YS5faW50TGl0ZXJhbHMuYWRkKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJSdW50aW1lVHlwZVVzZShpci5Qcm9wZXJ0eUdldCBub2RlLCBSdW50aW1lVHlwZVVzZUtpbmQga2luZCwKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBpci5EYXJ0VHlwZSBhcmd1bWVudFR5cGUpIHsKICAgIF9kYXRhLl9ydW50aW1lVHlwZVVzZXMgPz89IFtdOwogICAgX2RhdGEuX3J1bnRpbWVUeXBlVXNlcwogICAgICAgIC5hZGQobmV3IF9SdW50aW1lVHlwZVVzZShub2RlLCBraW5kLCByZWNlaXZlclR5cGUsIGFyZ3VtZW50VHlwZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNvbnN0cnVjdG9yTm9kZShpci5Db25zdHJ1Y3RvciBub2RlKSB7CiAgICBfZGF0YS5fY29uc3RydWN0b3JOb2RlcyA/Pz0gW107CiAgICBfZGF0YS5fY29uc3RydWN0b3JOb2Rlcy5hZGQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRmllbGROb2RlKGlyLkZpZWxkIG5vZGUpIHsKICAgIF9kYXRhLl9maWVsZE5vZGVzID8/PSBbXTsKICAgIF9kYXRhLl9maWVsZE5vZGVzLmFkZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJQcm9jZWR1cmVOb2RlKGlyLlByb2NlZHVyZSBub2RlKSB7CiAgICBfZGF0YS5fcHJvY2VkdXJlTm9kZXMgPz89IFtdOwogICAgX2RhdGEuX3Byb2NlZHVyZU5vZGVzLmFkZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uTm9kZShpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgIF9kYXRhLl9zdGF0aWNJbnZvY2F0aW9uTm9kZXMgPz89IFtdOwogICAgX2RhdGEuX3N0YXRpY0ludm9jYXRpb25Ob2Rlcy5hZGQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3dpdGNoU3RhdGVtZW50Tm9kZShpci5Td2l0Y2hTdGF0ZW1lbnQgbm9kZSkgewogICAgX2RhdGEuX3N3aXRjaFN0YXRlbWVudE5vZGVzID8/PSBbXTsKICAgIF9kYXRhLl9zd2l0Y2hTdGF0ZW1lbnROb2Rlcy5hZGQobm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ29uc3RDb25zdHJ1Y3Rvckludm9jYXRpb25Ob2RlKGlyLkNvbnN0cnVjdG9ySW52b2NhdGlvbiBub2RlKSB7CiAgICBfZGF0YS5fY29uc3RDb25zdHJ1Y3Rvckludm9jYXRpb25Ob2RlcyA/Pz0gW107CiAgICBfZGF0YS5fY29uc3RDb25zdHJ1Y3Rvckludm9jYXRpb25Ob2Rlcy5hZGQobm9kZSk7CiAgfQp9CgovLy8gRGF0YSBvYmplY3QgdGhhdCBjb250YWlucyB0aGUgd29ybGQgaW1wYWN0IGRhdGEgZGVyaXZlZCBwdXJlbHkgZnJvbSBrZXJuZWwuCmFic3RyYWN0IGNsYXNzIEltcGFjdERhdGEgewogIGZhY3RvcnkgSW1wYWN0RGF0YS5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgPQogICAgICBJbXBhY3REYXRhSW1wbC5mcm9tRGF0YVNvdXJjZTsKCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwoKICAvLy8gUmVnaXN0ZXJzIHRoZSBpbXBhY3QgZGF0YSB3aXRoIFtyZWdpc3RyeV0uCiAgdm9pZCBhcHBseShJbXBhY3RSZWdpc3RyeSByZWdpc3RyeSk7Cn0KCmNsYXNzIEltcGFjdERhdGFJbXBsIGltcGxlbWVudHMgSW1wYWN0RGF0YSB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnSW1wYWN0RGF0YSc7CgogIExpc3Q8X1N1cGVySW5pdGlhbGl6ZXI+IF9zdXBlckluaXRpYWxpemVyczsKICBMaXN0PGlyLk5hbWU+IF9zdXBlclNldHM7CiAgTGlzdDxpci5OYW1lPiBfc3VwZXJHZXRzOwogIExpc3Q8X1N1cGVySW52b2NhdGlvbj4gX3N1cGVySW52b2NhdGlvbnM7CiAgTGlzdDxfSW5zdGFuY2VBY2Nlc3M+IF9pbnN0YW5jZVNldHM7CiAgTGlzdDxfRHluYW1pY0FjY2Vzcz4gX2R5bmFtaWNTZXRzOwogIExpc3Q8X0luc3RhbmNlQWNjZXNzPiBfaW5zdGFuY2VHZXRzOwogIExpc3Q8X0R5bmFtaWNBY2Nlc3M+IF9keW5hbWljR2V0czsKICBMaXN0PF9GdW5jdGlvbkludm9jYXRpb24+IF9mdW5jdGlvbkludm9jYXRpb25zOwogIExpc3Q8X0luc3RhbmNlSW52b2NhdGlvbj4gX2luc3RhbmNlSW52b2NhdGlvbnM7CiAgTGlzdDxfRHluYW1pY0ludm9jYXRpb24+IF9keW5hbWljSW52b2NhdGlvbnM7CiAgTGlzdDxfTG9jYWxGdW5jdGlvbkludm9jYXRpb24+IF9sb2NhbEZ1bmN0aW9uSW52b2NhdGlvbnM7CiAgTGlzdDxfU3RhdGljSW52b2NhdGlvbj4gX3N0YXRpY0ludm9jYXRpb25zOwogIExpc3Q8X0NvbnN0cnVjdG9ySW52b2NhdGlvbj4gX2NvbnN0cnVjdG9ySW52b2NhdGlvbnM7CiAgTGlzdDxfQ29uc3RJbnN0YW50aWF0aW9uPiBfY29uc3RJbnN0YW50aWF0aW9uczsKICBFbnVtU2V0PF9GZWF0dXJlPiBfZmVhdHVyZXM7CiAgTGlzdDxfVHlwZVVzZT4gX3R5cGVVc2VzOwogIExpc3Q8X1JlZGlyZWN0aW5nSW5pdGlhbGl6ZXI+IF9yZWRpcmVjdGluZ0luaXRpYWxpemVyczsKICBMaXN0PGlyLkZpZWxkPiBfZmllbGRJbml0aWFsaXplcnM7CiAgTWFwPGlyLkZpZWxkLCBMaXN0PENvbnN0YW50UmVmZXJlbmNlPj4gX2ZpZWxkQ29uc3RhbnRJbml0aWFsaXplcnM7CiAgTGlzdDxfVHlwZUxpdGVyYWw+IF90eXBlTGl0ZXJhbHM7CiAgTGlzdDxpci5UcmVlTm9kZT4gX2xvY2FsRnVuY3Rpb25zOwogIExpc3Q8X0dlbmVyaWNJbnN0YW50aWF0aW9uPiBfZ2VuZXJpY0luc3RhbnRpYXRpb25zOwogIExpc3Q8X1N0YXRpY0FjY2Vzcz4gX3N0YXRpY1NldHM7CiAgTGlzdDxfU3RhdGljQWNjZXNzPiBfc3RhdGljR2V0czsKICBMaXN0PF9TdGF0aWNBY2Nlc3M+IF9zdGF0aWNUZWFyT2ZmczsKICBMaXN0PF9NYXBMaXRlcmFsPiBfbWFwTGl0ZXJhbHM7CiAgTGlzdDxfQ29udGFpbmVyTGl0ZXJhbD4gX2xpc3RMaXRlcmFsczsKICBMaXN0PF9Db250YWluZXJMaXRlcmFsPiBfc2V0TGl0ZXJhbHM7CiAgTGlzdDxTdHJpbmc+IF9zeW1ib2xMaXRlcmFsczsKICBMaXN0PFN0cmluZz4gX3N0cmluZ0xpdGVyYWxzOwogIExpc3Q8Ym9vbD4gX2Jvb2xMaXRlcmFsczsKICBMaXN0PGRvdWJsZT4gX2RvdWJsZUxpdGVyYWxzOwogIExpc3Q8aW50PiBfaW50TGl0ZXJhbHM7CiAgTGlzdDxfUnVudGltZVR5cGVVc2U+IF9ydW50aW1lVHlwZVVzZXM7CiAgTGlzdDxfRm9ySW5EYXRhPiBfZm9ySW5EYXRhOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhlc2Ugd2hlbiBDRkUgcHJvdmlkZXMgY29uc3RhbnRzLgogIExpc3Q8aXIuQ29uc3RydWN0b3I+IF9jb25zdHJ1Y3Rvck5vZGVzOwogIExpc3Q8aXIuRmllbGQ+IF9maWVsZE5vZGVzOwogIExpc3Q8aXIuUHJvY2VkdXJlPiBfcHJvY2VkdXJlTm9kZXM7CiAgTGlzdDxpci5Td2l0Y2hTdGF0ZW1lbnQ+IF9zd2l0Y2hTdGF0ZW1lbnROb2RlczsKICBMaXN0PGlyLlN0YXRpY0ludm9jYXRpb24+IF9zdGF0aWNJbnZvY2F0aW9uTm9kZXM7CiAgTGlzdDxpci5Db25zdHJ1Y3Rvckludm9jYXRpb24+IF9jb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGVzOwoKICBJbXBhY3REYXRhSW1wbCgpOwoKICBJbXBhY3REYXRhSW1wbC5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBfc3VwZXJJbml0aWFsaXplcnMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9TdXBlckluaXRpYWxpemVyLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX3N1cGVyU2V0cyA9IHNvdXJjZS5yZWFkTGlzdCgoKSA9PiBzb3VyY2UucmVhZE5hbWUoKSwgZW1wdHlBc051bGw6IHRydWUpOwogICAgX3N1cGVyR2V0cyA9IHNvdXJjZS5yZWFkTGlzdCgoKSA9PiBzb3VyY2UucmVhZE5hbWUoKSwgZW1wdHlBc051bGw6IHRydWUpOwogICAgX3N1cGVySW52b2NhdGlvbnMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9TdXBlckludm9jYXRpb24uZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfaW5zdGFuY2VTZXRzID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfSW5zdGFuY2VBY2Nlc3MuZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfZHluYW1pY1NldHMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9EeW5hbWljQWNjZXNzLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX2luc3RhbmNlR2V0cyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX0luc3RhbmNlQWNjZXNzLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX2R5bmFtaWNHZXRzID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfRHluYW1pY0FjY2Vzcy5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9mdW5jdGlvbkludm9jYXRpb25zID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfRnVuY3Rpb25JbnZvY2F0aW9uLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX2luc3RhbmNlSW52b2NhdGlvbnMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9JbnN0YW5jZUludm9jYXRpb24uZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfZHluYW1pY0ludm9jYXRpb25zID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfRHluYW1pY0ludm9jYXRpb24uZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfbG9jYWxGdW5jdGlvbkludm9jYXRpb25zID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfTG9jYWxGdW5jdGlvbkludm9jYXRpb24uZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfc3RhdGljSW52b2NhdGlvbnMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9TdGF0aWNJbnZvY2F0aW9uLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX2NvbnN0cnVjdG9ySW52b2NhdGlvbnMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9Db25zdHJ1Y3Rvckludm9jYXRpb24uZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfZmVhdHVyZXMgPSBuZXcgRW51bVNldDxfRmVhdHVyZT4uZnJvbVZhbHVlKHNvdXJjZS5yZWFkSW50KCkpOwogICAgX3R5cGVVc2VzID0gc291cmNlLnJlYWRMaXN0KCgpID0+IG5ldyBfVHlwZVVzZS5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9yZWRpcmVjdGluZ0luaXRpYWxpemVycyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX1JlZGlyZWN0aW5nSW5pdGlhbGl6ZXIuZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfZmllbGRJbml0aWFsaXplcnMgPSBzb3VyY2UucmVhZE1lbWJlck5vZGVzKGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9maWVsZENvbnN0YW50SW5pdGlhbGl6ZXJzID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlck5vZGVNYXAoc291cmNlLnJlYWRUcmVlTm9kZXMsIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF90eXBlTGl0ZXJhbHMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9UeXBlTGl0ZXJhbC5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9sb2NhbEZ1bmN0aW9ucyA9IHNvdXJjZS5yZWFkVHJlZU5vZGVzKGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9nZW5lcmljSW5zdGFudGlhdGlvbnMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9HZW5lcmljSW5zdGFudGlhdGlvbi5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9zdGF0aWNTZXRzID0gc291cmNlLnJlYWRMaXN0KAogICAgICAgICgpID0+IG5ldyBfU3RhdGljQWNjZXNzLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX3N0YXRpY0dldHMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9TdGF0aWNBY2Nlc3MuZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfc3RhdGljVGVhck9mZnMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9TdGF0aWNBY2Nlc3MuZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfbWFwTGl0ZXJhbHMgPSBzb3VyY2UucmVhZExpc3QoKCkgPT4gbmV3IF9NYXBMaXRlcmFsLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX2xpc3RMaXRlcmFscyA9IHNvdXJjZS5yZWFkTGlzdCgKICAgICAgICAoKSA9PiBuZXcgX0NvbnRhaW5lckxpdGVyYWwuZnJvbURhdGFTb3VyY2Uoc291cmNlKSwKICAgICAgICBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfc2V0TGl0ZXJhbHMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9Db250YWluZXJMaXRlcmFsLmZyb21EYXRhU291cmNlKHNvdXJjZSksCiAgICAgICAgZW1wdHlBc051bGw6IHRydWUpOwogICAgX3N5bWJvbExpdGVyYWxzID0gc291cmNlLnJlYWRTdHJpbmdzKGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9zdHJpbmdMaXRlcmFscyA9IHNvdXJjZS5yZWFkU3RyaW5ncyhlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfYm9vbExpdGVyYWxzID0gc291cmNlLnJlYWRMaXN0KCgpID0+IHNvdXJjZS5yZWFkQm9vbCgpLCBlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfZG91YmxlTGl0ZXJhbHMgPQogICAgICAgIHNvdXJjZS5yZWFkTGlzdCgoKSA9PiBzb3VyY2UucmVhZERvdWJsZVZhbHVlKCksIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9pbnRMaXRlcmFscyA9CiAgICAgICAgc291cmNlLnJlYWRMaXN0KCgpID0+IHNvdXJjZS5yZWFkSW50ZWdlclZhbHVlKCksIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9ydW50aW1lVHlwZVVzZXMgPSBzb3VyY2UucmVhZExpc3QoCiAgICAgICAgKCkgPT4gbmV3IF9SdW50aW1lVHlwZVVzZS5mcm9tRGF0YVNvdXJjZShzb3VyY2UpLAogICAgICAgIGVtcHR5QXNOdWxsOiB0cnVlKTsKCiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhlc2Ugd2hlbiBDRkUgcHJvdmlkZXMgY29uc3RhbnRzLgogICAgX2NvbnN0cnVjdG9yTm9kZXMgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyTm9kZXM8aXIuQ29uc3RydWN0b3I+KGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9maWVsZE5vZGVzID0gc291cmNlLnJlYWRNZW1iZXJOb2Rlczxpci5GaWVsZD4oZW1wdHlBc051bGw6IHRydWUpOwogICAgX3Byb2NlZHVyZU5vZGVzID0gc291cmNlLnJlYWRNZW1iZXJOb2Rlczxpci5Qcm9jZWR1cmU+KGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgIF9zd2l0Y2hTdGF0ZW1lbnROb2RlcyA9CiAgICAgICAgc291cmNlLnJlYWRUcmVlTm9kZXM8aXIuU3dpdGNoU3RhdGVtZW50PihlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfc3RhdGljSW52b2NhdGlvbk5vZGVzID0KICAgICAgICBzb3VyY2UucmVhZFRyZWVOb2Rlczxpci5TdGF0aWNJbnZvY2F0aW9uPihlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBfY29uc3RDb25zdHJ1Y3Rvckludm9jYXRpb25Ob2RlcyA9CiAgICAgICAgc291cmNlLnJlYWRUcmVlTm9kZXM8aXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uPihlbXB0eUFzTnVsbDogdHJ1ZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwoKICAgIHNpbmsud3JpdGVMaXN0KAogICAgICAgIF9zdXBlckluaXRpYWxpemVycywgKF9TdXBlckluaXRpYWxpemVyIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX3N1cGVyU2V0cywgc2luay53cml0ZU5hbWUsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfc3VwZXJHZXRzLCBzaW5rLndyaXRlTmFtZSwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KAogICAgICAgIF9zdXBlckludm9jYXRpb25zLCAoX1N1cGVySW52b2NhdGlvbiBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9pbnN0YW5jZVNldHMsIChfSW5zdGFuY2VBY2Nlc3MgbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfZHluYW1pY1NldHMsIChfRHluYW1pY0FjY2VzcyBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9pbnN0YW5jZUdldHMsIChfSW5zdGFuY2VBY2Nlc3MgbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfZHluYW1pY0dldHMsIChfRHluYW1pY0FjY2VzcyBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KAogICAgICAgIF9mdW5jdGlvbkludm9jYXRpb25zLCAoX0Z1bmN0aW9uSW52b2NhdGlvbiBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KAogICAgICAgIF9pbnN0YW5jZUludm9jYXRpb25zLCAoX0luc3RhbmNlSW52b2NhdGlvbiBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KAogICAgICAgIF9keW5hbWljSW52b2NhdGlvbnMsIChfRHluYW1pY0ludm9jYXRpb24gbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfbG9jYWxGdW5jdGlvbkludm9jYXRpb25zLAogICAgICAgIChfTG9jYWxGdW5jdGlvbkludm9jYXRpb24gbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdCgKICAgICAgICBfc3RhdGljSW52b2NhdGlvbnMsIChfU3RhdGljSW52b2NhdGlvbiBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9jb25zdHJ1Y3Rvckludm9jYXRpb25zLAogICAgICAgIChfQ29uc3RydWN0b3JJbnZvY2F0aW9uIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUludChfZmVhdHVyZXM/LnZhbHVlID8/IDApOwogICAgc2luay53cml0ZUxpc3QoX3R5cGVVc2VzLCAoX1R5cGVVc2UgbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfcmVkaXJlY3RpbmdJbml0aWFsaXplcnMsCiAgICAgICAgKF9SZWRpcmVjdGluZ0luaXRpYWxpemVyIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZU1lbWJlck5vZGVzKF9maWVsZEluaXRpYWxpemVycywgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlTWFwKF9maWVsZENvbnN0YW50SW5pdGlhbGl6ZXJzLCBzaW5rLndyaXRlVHJlZU5vZGVzLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfdHlwZUxpdGVyYWxzLCAoX1R5cGVMaXRlcmFsIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZVRyZWVOb2RlcyhfbG9jYWxGdW5jdGlvbnMsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdCgKICAgICAgICBfZ2VuZXJpY0luc3RhbnRpYXRpb25zLCAoX0dlbmVyaWNJbnN0YW50aWF0aW9uIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX3N0YXRpY1NldHMsIChfU3RhdGljQWNjZXNzIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX3N0YXRpY0dldHMsIChfU3RhdGljQWNjZXNzIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX3N0YXRpY1RlYXJPZmZzLCAoX1N0YXRpY0FjY2VzcyBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9tYXBMaXRlcmFscywgKF9NYXBMaXRlcmFsIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX2xpc3RMaXRlcmFscywgKF9Db250YWluZXJMaXRlcmFsIG8pID0+IG8udG9EYXRhU2luayhzaW5rKSwKICAgICAgICBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX3NldExpdGVyYWxzLCAoX0NvbnRhaW5lckxpdGVyYWwgbykgPT4gby50b0RhdGFTaW5rKHNpbmspLAogICAgICAgIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlU3RyaW5ncyhfc3ltYm9sTGl0ZXJhbHMsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlU3RyaW5ncyhfc3RyaW5nTGl0ZXJhbHMsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICBzaW5rLndyaXRlTGlzdChfYm9vbExpdGVyYWxzLCBzaW5rLndyaXRlQm9vbCwgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVMaXN0KF9kb3VibGVMaXRlcmFscywgc2luay53cml0ZURvdWJsZVZhbHVlLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX2ludExpdGVyYWxzLCBzaW5rLndyaXRlSW50ZWdlclZhbHVlLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZUxpc3QoX3J1bnRpbWVUeXBlVXNlcywgKF9SdW50aW1lVHlwZVVzZSBvKSA9PiBvLnRvRGF0YVNpbmsoc2luayksCiAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKCiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhlc2Ugd2hlbiBDRkUgcHJvdmlkZXMgY29uc3RhbnRzLgogICAgc2luay53cml0ZU1lbWJlck5vZGVzKF9jb25zdHJ1Y3Rvck5vZGVzLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZU1lbWJlck5vZGVzKF9maWVsZE5vZGVzLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZU1lbWJlck5vZGVzKF9wcm9jZWR1cmVOb2RlcywgYWxsb3dOdWxsOiB0cnVlKTsKICAgIHNpbmsud3JpdGVUcmVlTm9kZXMoX3N3aXRjaFN0YXRlbWVudE5vZGVzLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZVRyZWVOb2Rlcyhfc3RhdGljSW52b2NhdGlvbk5vZGVzLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay53cml0ZVRyZWVOb2RlcyhfY29uc3RDb25zdHJ1Y3Rvckludm9jYXRpb25Ob2RlcywgYWxsb3dOdWxsOiB0cnVlKTsKCiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhcHBseShJbXBhY3RSZWdpc3RyeSByZWdpc3RyeSkgewogICAgaWYgKF9zdXBlckluaXRpYWxpemVycyAhPSBudWxsKSB7CiAgICAgIGZvciAoX1N1cGVySW5pdGlhbGl6ZXIgZGF0YSBpbiBfc3VwZXJJbml0aWFsaXplcnMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN1cGVySW5pdGlhbGl6ZXIoCiAgICAgICAgICAgIGRhdGEuc291cmNlLAogICAgICAgICAgICBkYXRhLnRhcmdldCwKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudHMpOwogICAgICB9CiAgICB9CiAgICBpZiAoX3N1cGVyU2V0cyAhPSBudWxsKSB7CiAgICAgIGZvciAoaXIuTmFtZSBkYXRhIGluIF9zdXBlclNldHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN1cGVyU2V0KGRhdGEpOwogICAgICB9CiAgICB9CiAgICBpZiAoX3N1cGVyR2V0cyAhPSBudWxsKSB7CiAgICAgIGZvciAoaXIuTmFtZSBkYXRhIGluIF9zdXBlckdldHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN1cGVyR2V0KGRhdGEpOwogICAgICB9CiAgICB9CiAgICBpZiAoX3N1cGVySW52b2NhdGlvbnMgIT0gbnVsbCkgewogICAgICBmb3IgKF9TdXBlckludm9jYXRpb24gZGF0YSBpbiBfc3VwZXJJbnZvY2F0aW9ucykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3VwZXJJbnZvY2F0aW9uKAogICAgICAgICAgICBkYXRhLm5hbWUsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUubmFtZWRBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRzKTsKICAgICAgfQogICAgfQogICAgaWYgKF9pbnN0YW5jZVNldHMgIT0gbnVsbCkgewogICAgICBmb3IgKF9JbnN0YW5jZUFjY2VzcyBkYXRhIGluIF9pbnN0YW5jZVNldHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3Rlckluc3RhbmNlU2V0KAogICAgICAgICAgICBkYXRhLnJlY2VpdmVyVHlwZSwgZGF0YS5jbGFzc1JlbGF0aW9uLCBkYXRhLnRhcmdldCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfZHluYW1pY1NldHMgIT0gbnVsbCkgewogICAgICBmb3IgKF9EeW5hbWljQWNjZXNzIGRhdGEgaW4gX2R5bmFtaWNTZXRzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJEeW5hbWljU2V0KAogICAgICAgICAgICBkYXRhLnJlY2VpdmVyVHlwZSwgZGF0YS5jbGFzc1JlbGF0aW9uLCBkYXRhLm5hbWUpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2luc3RhbmNlR2V0cyAhPSBudWxsKSB7CiAgICAgIGZvciAoX0luc3RhbmNlQWNjZXNzIGRhdGEgaW4gX2luc3RhbmNlR2V0cykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVySW5zdGFuY2VHZXQoCiAgICAgICAgICAgIGRhdGEucmVjZWl2ZXJUeXBlLCBkYXRhLmNsYXNzUmVsYXRpb24sIGRhdGEudGFyZ2V0KTsKICAgICAgfQogICAgfQogICAgaWYgKF9keW5hbWljR2V0cyAhPSBudWxsKSB7CiAgICAgIGZvciAoX0R5bmFtaWNBY2Nlc3MgZGF0YSBpbiBfZHluYW1pY0dldHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlckR5bmFtaWNHZXQoCiAgICAgICAgICAgIGRhdGEucmVjZWl2ZXJUeXBlLCBkYXRhLmNsYXNzUmVsYXRpb24sIGRhdGEubmFtZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfZnVuY3Rpb25JbnZvY2F0aW9ucyAhPSBudWxsKSB7CiAgICAgIGZvciAoX0Z1bmN0aW9uSW52b2NhdGlvbiBkYXRhIGluIF9mdW5jdGlvbkludm9jYXRpb25zKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJGdW5jdGlvbkludm9jYXRpb24oCiAgICAgICAgICAgIGRhdGEucmVjZWl2ZXJUeXBlLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50cyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfaW5zdGFuY2VJbnZvY2F0aW9ucyAhPSBudWxsKSB7CiAgICAgIGZvciAoX0luc3RhbmNlSW52b2NhdGlvbiBkYXRhIGluIF9pbnN0YW5jZUludm9jYXRpb25zKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJJbnN0YW5jZUludm9jYXRpb24oCiAgICAgICAgICAgIGRhdGEucmVjZWl2ZXJUeXBlLAogICAgICAgICAgICBkYXRhLmNsYXNzUmVsYXRpb24sCiAgICAgICAgICAgIGRhdGEudGFyZ2V0LAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50cyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfZHluYW1pY0ludm9jYXRpb25zICE9IG51bGwpIHsKICAgICAgZm9yIChfRHluYW1pY0ludm9jYXRpb24gZGF0YSBpbiBfZHluYW1pY0ludm9jYXRpb25zKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJEeW5hbWljSW52b2NhdGlvbigKICAgICAgICAgICAgZGF0YS5yZWNlaXZlclR5cGUsCiAgICAgICAgICAgIGRhdGEuY2xhc3NSZWxhdGlvbiwKICAgICAgICAgICAgZGF0YS5uYW1lLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50cyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfbG9jYWxGdW5jdGlvbkludm9jYXRpb25zICE9IG51bGwpIHsKICAgICAgZm9yIChfTG9jYWxGdW5jdGlvbkludm9jYXRpb24gZGF0YSBpbiBfbG9jYWxGdW5jdGlvbkludm9jYXRpb25zKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJMb2NhbEZ1bmN0aW9uSW52b2NhdGlvbigKICAgICAgICAgICAgZGF0YS5sb2NhbEZ1bmN0aW9uLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50cyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfc3RhdGljSW52b2NhdGlvbnMgIT0gbnVsbCkgewogICAgICBmb3IgKF9TdGF0aWNJbnZvY2F0aW9uIGRhdGEgaW4gX3N0YXRpY0ludm9jYXRpb25zKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uKAogICAgICAgICAgICBkYXRhLnRhcmdldCwKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuaW1wb3J0KTsKICAgICAgICA7CiAgICAgIH0KICAgIH0KICAgIGlmIChfY29uc3RydWN0b3JJbnZvY2F0aW9ucyAhPSBudWxsKSB7CiAgICAgIGZvciAoX0NvbnN0cnVjdG9ySW52b2NhdGlvbiBkYXRhIGluIF9jb25zdHJ1Y3Rvckludm9jYXRpb25zKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJOZXcoCiAgICAgICAgICAgIGRhdGEuY29uc3RydWN0b3IsCiAgICAgICAgICAgIGRhdGEudHlwZSwKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5uYW1lZEFyZ3VtZW50cywKICAgICAgICAgICAgZGF0YS5jYWxsU3RydWN0dXJlLnR5cGVBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuaW1wb3J0LAogICAgICAgICAgICBpc0NvbnN0OiBkYXRhLmlzQ29uc3QpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2NvbnN0SW5zdGFudGlhdGlvbnMgIT0gbnVsbCkgewogICAgICBmb3IgKF9Db25zdEluc3RhbnRpYXRpb24gZGF0YSBpbiBfY29uc3RJbnN0YW50aWF0aW9ucykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQ29uc3RJbnN0YW50aWF0aW9uKAogICAgICAgICAgICBkYXRhLmNscywgZGF0YS50eXBlQXJndW1lbnRzLCBkYXRhLmltcG9ydCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfZmVhdHVyZXMgIT0gbnVsbCkgewogICAgICBmb3IgKF9GZWF0dXJlIGRhdGEgaW4gX2ZlYXR1cmVzLml0ZXJhYmxlKF9GZWF0dXJlLnZhbHVlcykpIHsKICAgICAgICBzd2l0Y2ggKGRhdGEpIHsKICAgICAgICAgIGNhc2UgX0ZlYXR1cmUubGF6eUZpZWxkOgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckxhenlGaWVsZCgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX0ZlYXR1cmUubG9hZExpYnJhcnk6CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyTG9hZExpYnJhcnkoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9GZWF0dXJlLnN0YWNrVHJhY2U6CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3RhY2tUcmFjZSgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX0ZlYXR1cmUuY2F0Y2hDbGF1c2U6CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQ2F0Y2goKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9GZWF0dXJlLnRocm93RXhwcmVzc2lvbjoKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJUaHJvdygpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX0ZlYXR1cmUubG9jYWxXaXRob3V0SW5pdGlhbGl6ZXI6CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyTG9jYWxXaXRob3V0SW5pdGlhbGl6ZXIoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9GZWF0dXJlLnN0cmluZ0NvbmNhdGVuYXRpb246CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3RyaW5nQ29uY2F0ZW5hdGlvbigpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX0ZlYXR1cmUuYXNzZXJ0V2l0aE1lc3NhZ2U6CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQXNzZXJ0KHdpdGhNZXNzYWdlOiB0cnVlKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9GZWF0dXJlLmFzc2VydFdpdGhvdXRNZXNzYWdlOgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckFzc2VydCh3aXRoTWVzc2FnZTogZmFsc2UpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX0ZlYXR1cmUubnVsbExpdGVyYWw6CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyTnVsbExpdGVyYWwoKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoX3R5cGVVc2VzICE9IG51bGwpIHsKICAgICAgZm9yIChfVHlwZVVzZSBkYXRhIGluIF90eXBlVXNlcykgewogICAgICAgIHN3aXRjaCAoZGF0YS5raW5kKSB7CiAgICAgICAgICBjYXNlIF9UeXBlVXNlS2luZC5wYXJhbWV0ZXJDaGVjazoKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJQYXJhbWV0ZXJDaGVjayhkYXRhLnR5cGUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX1R5cGVVc2VLaW5kLmNhdGNoVHlwZToKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJDYXRjaFR5cGUoZGF0YS50eXBlKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9UeXBlVXNlS2luZC5hc0Nhc3Q6CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQXNDYXN0KGRhdGEudHlwZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfVHlwZVVzZUtpbmQuaW1wbGljaXRDYXN0OgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckltcGxpY2l0Q2FzdChkYXRhLnR5cGUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX1R5cGVVc2VLaW5kLmlzQ2hlY2s6CiAgICAgICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVySXNDaGVjayhkYXRhLnR5cGUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX1R5cGVVc2VLaW5kLmFzeW5jU3Rhck1hcmtlcjoKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBc3luY1N0YXIoZGF0YS50eXBlKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9UeXBlVXNlS2luZC5hc3luY01hcmtlcjoKICAgICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBc3luYyhkYXRhLnR5cGUpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX1R5cGVVc2VLaW5kLnN5bmNTdGFyTWFya2VyOgogICAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN5bmNTdGFyKGRhdGEudHlwZSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKF9yZWRpcmVjdGluZ0luaXRpYWxpemVycyAhPSBudWxsKSB7CiAgICAgIGZvciAoX1JlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgZGF0YSBpbiBfcmVkaXJlY3RpbmdJbml0aWFsaXplcnMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIoCiAgICAgICAgICAgIGRhdGEuY29uc3RydWN0b3IsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS5wb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgICAgICBkYXRhLmNhbGxTdHJ1Y3R1cmUubmFtZWRBcmd1bWVudHMsCiAgICAgICAgICAgIGRhdGEuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRzKTsKICAgICAgfQogICAgfQogICAgaWYgKF9maWVsZEluaXRpYWxpemVycyAhPSBudWxsKSB7CiAgICAgIGZvciAoaXIuRmllbGQgZGF0YSBpbiBfZmllbGRJbml0aWFsaXplcnMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlckZpZWxkSW5pdGlhbGl6YXRpb24oZGF0YSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfZmllbGRDb25zdGFudEluaXRpYWxpemVycyAhPSBudWxsKSB7CiAgICAgIF9maWVsZENvbnN0YW50SW5pdGlhbGl6ZXJzCiAgICAgICAgICAuZm9yRWFjaCgoaXIuRmllbGQgZmllbGQsIExpc3Q8Q29uc3RhbnRSZWZlcmVuY2U+IGNvbnN0YW50cykgewogICAgICAgIGZvciAoQ29uc3RhbnRSZWZlcmVuY2UgY29uc3RhbnQgaW4gY29uc3RhbnRzKSB7CiAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlckZpZWxkQ29uc3RhbnRJbml0aWFsaXphdGlvbihmaWVsZCwgY29uc3RhbnQpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBpZiAoX3R5cGVMaXRlcmFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoX1R5cGVMaXRlcmFsIGRhdGEgaW4gX3R5cGVMaXRlcmFscykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyVHlwZUxpdGVyYWwoZGF0YS50eXBlLCBkYXRhLmltcG9ydCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfbG9jYWxGdW5jdGlvbnMgIT0gbnVsbCkgewogICAgICBmb3IgKGlyLlRyZWVOb2RlIGRhdGEgaW4gX2xvY2FsRnVuY3Rpb25zKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJMb2NhbEZ1bmN0aW9uKGRhdGEpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2dlbmVyaWNJbnN0YW50aWF0aW9ucyAhPSBudWxsKSB7CiAgICAgIGZvciAoX0dlbmVyaWNJbnN0YW50aWF0aW9uIGRhdGEgaW4gX2dlbmVyaWNJbnN0YW50aWF0aW9ucykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyR2VuZXJpY0luc3RhbnRpYXRpb24oCiAgICAgICAgICAgIGRhdGEuZXhwcmVzc2lvblR5cGUsIGRhdGEudHlwZUFyZ3VtZW50cyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfc3RhdGljU2V0cyAhPSBudWxsKSB7CiAgICAgIGZvciAoX1N0YXRpY0FjY2VzcyBkYXRhIGluIF9zdGF0aWNTZXRzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNTZXQoZGF0YS50YXJnZXQsIGRhdGEuaW1wb3J0KTsKICAgICAgfQogICAgfQogICAgaWYgKF9zdGF0aWNHZXRzICE9IG51bGwpIHsKICAgICAgZm9yIChfU3RhdGljQWNjZXNzIGRhdGEgaW4gX3N0YXRpY0dldHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN0YXRpY0dldChkYXRhLnRhcmdldCwgZGF0YS5pbXBvcnQpOwogICAgICB9CiAgICB9CiAgICBpZiAoX3N0YXRpY1RlYXJPZmZzICE9IG51bGwpIHsKICAgICAgZm9yIChfU3RhdGljQWNjZXNzIGRhdGEgaW4gX3N0YXRpY1RlYXJPZmZzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNUZWFyT2ZmKGRhdGEudGFyZ2V0LCBkYXRhLmltcG9ydCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfbWFwTGl0ZXJhbHMgIT0gbnVsbCkgewogICAgICBmb3IgKF9NYXBMaXRlcmFsIGRhdGEgaW4gX21hcExpdGVyYWxzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJNYXBMaXRlcmFsKGRhdGEua2V5VHlwZSwgZGF0YS52YWx1ZVR5cGUsCiAgICAgICAgICAgIGlzQ29uc3Q6IGRhdGEuaXNDb25zdCwgaXNFbXB0eTogZGF0YS5pc0VtcHR5KTsKICAgICAgfQogICAgfQogICAgaWYgKF9saXN0TGl0ZXJhbHMgIT0gbnVsbCkgewogICAgICBmb3IgKF9Db250YWluZXJMaXRlcmFsIGRhdGEgaW4gX2xpc3RMaXRlcmFscykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyTGlzdExpdGVyYWwoZGF0YS5lbGVtZW50VHlwZSwKICAgICAgICAgICAgaXNDb25zdDogZGF0YS5pc0NvbnN0LCBpc0VtcHR5OiBkYXRhLmlzRW1wdHkpOwogICAgICB9CiAgICB9CiAgICBpZiAoX3NldExpdGVyYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChfQ29udGFpbmVyTGl0ZXJhbCBkYXRhIGluIF9zZXRMaXRlcmFscykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU2V0TGl0ZXJhbChkYXRhLmVsZW1lbnRUeXBlLAogICAgICAgICAgICBpc0NvbnN0OiBkYXRhLmlzQ29uc3QsIGlzRW1wdHk6IGRhdGEuaXNFbXB0eSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfc3ltYm9sTGl0ZXJhbHMgIT0gbnVsbCkgewogICAgICBmb3IgKFN0cmluZyBkYXRhIGluIF9zeW1ib2xMaXRlcmFscykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3ltYm9sTGl0ZXJhbChkYXRhKTsKICAgICAgfQogICAgfQogICAgaWYgKF9zdHJpbmdMaXRlcmFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoU3RyaW5nIGRhdGEgaW4gX3N0cmluZ0xpdGVyYWxzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTdHJpbmdMaXRlcmFsKGRhdGEpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2Jvb2xMaXRlcmFscyAhPSBudWxsKSB7CiAgICAgIGZvciAoYm9vbCBkYXRhIGluIF9ib29sTGl0ZXJhbHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlckJvb2xMaXRlcmFsKGRhdGEpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2RvdWJsZUxpdGVyYWxzICE9IG51bGwpIHsKICAgICAgZm9yIChkb3VibGUgZGF0YSBpbiBfZG91YmxlTGl0ZXJhbHMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlckRvdWJsZUxpdGVyYWwoZGF0YSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfaW50TGl0ZXJhbHMgIT0gbnVsbCkgewogICAgICBmb3IgKGludCBkYXRhIGluIF9pbnRMaXRlcmFscykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVySW50TGl0ZXJhbChkYXRhKTsKICAgICAgfQogICAgfQogICAgaWYgKF9ydW50aW1lVHlwZVVzZXMgIT0gbnVsbCkgewogICAgICBmb3IgKF9SdW50aW1lVHlwZVVzZSBkYXRhIGluIF9ydW50aW1lVHlwZVVzZXMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclJ1bnRpbWVUeXBlVXNlKAogICAgICAgICAgICBkYXRhLm5vZGUsIGRhdGEua2luZCwgZGF0YS5yZWNlaXZlclR5cGUsIGRhdGEuYXJndW1lbnRUeXBlKTsKICAgICAgfQogICAgfQogICAgaWYgKF9mb3JJbkRhdGEgIT0gbnVsbCkgewogICAgICBmb3IgKF9Gb3JJbkRhdGEgZGF0YSBpbiBfZm9ySW5EYXRhKSB7CiAgICAgICAgaWYgKGRhdGEuaXNBc3luYykgewogICAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBc3luY0ZvckluKAogICAgICAgICAgICAgIGRhdGEuaXRlcmFibGVUeXBlLCBkYXRhLml0ZXJhdG9yVHlwZSwgZGF0YS5pdGVyYXRvckNsYXNzUmVsYXRpb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWdpc3RyeS5yZWdpc3RlclN5bmNGb3JJbigKICAgICAgICAgICAgICBkYXRhLml0ZXJhYmxlVHlwZSwgZGF0YS5pdGVyYXRvclR5cGUsIGRhdGEuaXRlcmF0b3JDbGFzc1JlbGF0aW9uKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhlc2Ugd2hlbiBDRkUgcHJvdmlkZXMgY29uc3RhbnRzLgogICAgaWYgKF9jb25zdHJ1Y3Rvck5vZGVzICE9IG51bGwpIHsKICAgICAgZm9yIChpci5Db25zdHJ1Y3RvciBkYXRhIGluIF9jb25zdHJ1Y3Rvck5vZGVzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJDb25zdHJ1Y3Rvck5vZGUoZGF0YSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfZmllbGROb2RlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoaXIuRmllbGQgZGF0YSBpbiBfZmllbGROb2RlcykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyRmllbGROb2RlKGRhdGEpOwogICAgICB9CiAgICB9CiAgICBpZiAoX3Byb2NlZHVyZU5vZGVzICE9IG51bGwpIHsKICAgICAgZm9yIChpci5Qcm9jZWR1cmUgZGF0YSBpbiBfcHJvY2VkdXJlTm9kZXMpIHsKICAgICAgICByZWdpc3RyeS5yZWdpc3RlclByb2NlZHVyZU5vZGUoZGF0YSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfc3dpdGNoU3RhdGVtZW50Tm9kZXMgIT0gbnVsbCkgewogICAgICBmb3IgKGlyLlN3aXRjaFN0YXRlbWVudCBkYXRhIGluIF9zd2l0Y2hTdGF0ZW1lbnROb2RlcykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyU3dpdGNoU3RhdGVtZW50Tm9kZShkYXRhKTsKICAgICAgfQogICAgfQogICAgaWYgKF9zdGF0aWNJbnZvY2F0aW9uTm9kZXMgIT0gbnVsbCkgewogICAgICBmb3IgKGlyLlN0YXRpY0ludm9jYXRpb24gZGF0YSBpbiBfc3RhdGljSW52b2NhdGlvbk5vZGVzKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uTm9kZShkYXRhKTsKICAgICAgfQogICAgfQogICAgaWYgKF9jb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGVzICE9IG51bGwpIHsKICAgICAgZm9yIChpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gZGF0YSBpbiBfY29uc3RDb25zdHJ1Y3Rvckludm9jYXRpb25Ob2RlcykgewogICAgICAgIHJlZ2lzdHJ5LnJlZ2lzdGVyQ29uc3RDb25zdHJ1Y3Rvckludm9jYXRpb25Ob2RlKGRhdGEpOwogICAgICB9CiAgICB9CiAgfQp9CgpjbGFzcyBfQ2FsbFN0cnVjdHVyZSB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX0NhbGxTdHJ1Y3R1cmUnOwoKICBmaW5hbCBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwogIGZpbmFsIGludCBwb3NpdGlvbmFsQXJndW1lbnRzOwogIGZpbmFsIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50czsKCiAgX0NhbGxTdHJ1Y3R1cmUuaW50ZXJuYWwoCiAgICAgIHRoaXMudHlwZUFyZ3VtZW50cywgdGhpcy5wb3NpdGlvbmFsQXJndW1lbnRzLCB0aGlzLm5hbWVkQXJndW1lbnRzKTsKCiAgZmFjdG9yeSBfQ2FsbFN0cnVjdHVyZShpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICByZXR1cm4gbmV3IF9DYWxsU3RydWN0dXJlLmludGVybmFsKAogICAgICAgIHR5cGVBcmd1bWVudHMsIHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzKTsKICB9CgogIGZhY3RvcnkgX0NhbGxTdHJ1Y3R1cmUuZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlcygpOwogICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMgPSBzb3VyY2UucmVhZEludCgpOwogICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzID0gc291cmNlLnJlYWRTdHJpbmdzKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9DYWxsU3RydWN0dXJlLmludGVybmFsKAogICAgICAgIHR5cGVBcmd1bWVudHMsIHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzKTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2Rlcyh0eXBlQXJndW1lbnRzKTsKICAgIHNpbmsud3JpdGVJbnQocG9zaXRpb25hbEFyZ3VtZW50cyk7CiAgICBzaW5rLndyaXRlU3RyaW5ncyhuYW1lZEFyZ3VtZW50cyk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX1N1cGVySW5pdGlhbGl6ZXIgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19TdXBlckluaXRpYWxpemVyJzsKCiAgZmluYWwgaXIuQ29uc3RydWN0b3Igc291cmNlOwogIGZpbmFsIGlyLkNvbnN0cnVjdG9yIHRhcmdldDsKICBmaW5hbCBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlOwoKICBfU3VwZXJJbml0aWFsaXplcih0aGlzLnNvdXJjZSwgdGhpcy50YXJnZXQsIHRoaXMuY2FsbFN0cnVjdHVyZSk7CgogIGZhY3RvcnkgX1N1cGVySW5pdGlhbGl6ZXIuZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuQ29uc3RydWN0b3Igc291cmNlQ29uc3RydWN0b3IgPSBzb3VyY2UucmVhZE1lbWJlck5vZGUoKTsKICAgIGlyLkNvbnN0cnVjdG9yIHRhcmdldENvbnN0cnVjdG9yID0gc291cmNlLnJlYWRNZW1iZXJOb2RlKCk7CiAgICBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IF9DYWxsU3RydWN0dXJlLmZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9TdXBlckluaXRpYWxpemVyKAogICAgICAgIHNvdXJjZUNvbnN0cnVjdG9yLCB0YXJnZXRDb25zdHJ1Y3RvciwgY2FsbFN0cnVjdHVyZSk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZU1lbWJlck5vZGUoc291cmNlKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlKHRhcmdldCk7CiAgICBjYWxsU3RydWN0dXJlLnRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX1N1cGVySW52b2NhdGlvbiB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX1N1cGVySW52b2NhdGlvbic7CgogIGZpbmFsIGlyLk5hbWUgbmFtZTsKICBmaW5hbCBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlOwoKICBfU3VwZXJJbnZvY2F0aW9uKHRoaXMubmFtZSwgdGhpcy5jYWxsU3RydWN0dXJlKTsKCiAgZmFjdG9yeSBfU3VwZXJJbnZvY2F0aW9uLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLk5hbWUgbmFtZSA9IHNvdXJjZS5yZWFkTmFtZSgpOwogICAgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBfQ2FsbFN0cnVjdHVyZS5mcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfU3VwZXJJbnZvY2F0aW9uKG5hbWUsIGNhbGxTdHJ1Y3R1cmUpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVOYW1lKG5hbWUpOwogICAgY2FsbFN0cnVjdHVyZS50b0RhdGFTaW5rKHNpbmspOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9JbnN0YW5jZUFjY2VzcyB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX0luc3RhbmNlQWNjZXNzJzsKCiAgZmluYWwgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlOwogIGZpbmFsIENsYXNzUmVsYXRpb24gY2xhc3NSZWxhdGlvbjsKICBmaW5hbCBpci5NZW1iZXIgdGFyZ2V0OwoKICBfSW5zdGFuY2VBY2Nlc3ModGhpcy5yZWNlaXZlclR5cGUsIHRoaXMuY2xhc3NSZWxhdGlvbiwgdGhpcy50YXJnZXQpOwoKICBmYWN0b3J5IF9JbnN0YW5jZUFjY2Vzcy5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZSgpOwogICAgQ2xhc3NSZWxhdGlvbiBjbGFzc1JlbGF0aW9uID0gc291cmNlLnJlYWRFbnVtKENsYXNzUmVsYXRpb24udmFsdWVzKTsKICAgIGlyLk1lbWJlciB0YXJnZXQgPSBzb3VyY2UucmVhZE1lbWJlck5vZGUoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX0luc3RhbmNlQWNjZXNzKHJlY2VpdmVyVHlwZSwgY2xhc3NSZWxhdGlvbiwgdGFyZ2V0KTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2RlKHJlY2VpdmVyVHlwZSk7CiAgICBzaW5rLndyaXRlRW51bShjbGFzc1JlbGF0aW9uKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlKHRhcmdldCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX0R5bmFtaWNBY2Nlc3MgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19EeW5hbWljQWNjZXNzJzsKCiAgZmluYWwgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlOwogIGZpbmFsIENsYXNzUmVsYXRpb24gY2xhc3NSZWxhdGlvbjsKICBmaW5hbCBpci5OYW1lIG5hbWU7CgogIF9EeW5hbWljQWNjZXNzKHRoaXMucmVjZWl2ZXJUeXBlLCB0aGlzLmNsYXNzUmVsYXRpb24sIHRoaXMubmFtZSk7CgogIGZhY3RvcnkgX0R5bmFtaWNBY2Nlc3MuZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGUoKTsKICAgIENsYXNzUmVsYXRpb24gY2xhc3NSZWxhdGlvbiA9IHNvdXJjZS5yZWFkRW51bShDbGFzc1JlbGF0aW9uLnZhbHVlcyk7CiAgICBpci5OYW1lIG5hbWUgPSBzb3VyY2UucmVhZE5hbWUoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX0R5bmFtaWNBY2Nlc3MocmVjZWl2ZXJUeXBlLCBjbGFzc1JlbGF0aW9uLCBuYW1lKTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2RlKHJlY2VpdmVyVHlwZSk7CiAgICBzaW5rLndyaXRlRW51bShjbGFzc1JlbGF0aW9uKTsKICAgIHNpbmsud3JpdGVOYW1lKG5hbWUpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9GdW5jdGlvbkludm9jYXRpb24gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19GdW5jdGlvbkludm9jYXRpb24nOwoKICBmaW5hbCBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGU7CiAgZmluYWwgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZTsKCiAgX0Z1bmN0aW9uSW52b2NhdGlvbih0aGlzLnJlY2VpdmVyVHlwZSwgdGhpcy5jYWxsU3RydWN0dXJlKTsKCiAgZmFjdG9yeSBfRnVuY3Rpb25JbnZvY2F0aW9uLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlKCk7CiAgICBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IF9DYWxsU3RydWN0dXJlLmZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9GdW5jdGlvbkludm9jYXRpb24ocmVjZWl2ZXJUeXBlLCBjYWxsU3RydWN0dXJlKTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2RlKHJlY2VpdmVyVHlwZSk7CiAgICBjYWxsU3RydWN0dXJlLnRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX0luc3RhbmNlSW52b2NhdGlvbiB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX0luc3RhbmNlSW52b2NhdGlvbic7CgogIGZpbmFsIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZTsKICBmaW5hbCBDbGFzc1JlbGF0aW9uIGNsYXNzUmVsYXRpb247CiAgZmluYWwgaXIuTWVtYmVyIHRhcmdldDsKICBmaW5hbCBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlOwoKICBfSW5zdGFuY2VJbnZvY2F0aW9uKAogICAgICB0aGlzLnJlY2VpdmVyVHlwZSwgdGhpcy5jbGFzc1JlbGF0aW9uLCB0aGlzLnRhcmdldCwgdGhpcy5jYWxsU3RydWN0dXJlKTsKCiAgZmFjdG9yeSBfSW5zdGFuY2VJbnZvY2F0aW9uLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlKCk7CiAgICBDbGFzc1JlbGF0aW9uIGNsYXNzUmVsYXRpb24gPSBzb3VyY2UucmVhZEVudW0oQ2xhc3NSZWxhdGlvbi52YWx1ZXMpOwogICAgaXIuTWVtYmVyIHRhcmdldCA9IHNvdXJjZS5yZWFkTWVtYmVyTm9kZSgpOwogICAgX0NhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBfQ2FsbFN0cnVjdHVyZS5mcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfSW5zdGFuY2VJbnZvY2F0aW9uKAogICAgICAgIHJlY2VpdmVyVHlwZSwgY2xhc3NSZWxhdGlvbiwgdGFyZ2V0LCBjYWxsU3RydWN0dXJlKTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2RlKHJlY2VpdmVyVHlwZSk7CiAgICBzaW5rLndyaXRlRW51bShjbGFzc1JlbGF0aW9uKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlKHRhcmdldCk7CiAgICBjYWxsU3RydWN0dXJlLnRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX0R5bmFtaWNJbnZvY2F0aW9uIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfRHluYW1pY0ludm9jYXRpb24nOwoKICBmaW5hbCBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGU7CiAgZmluYWwgQ2xhc3NSZWxhdGlvbiBjbGFzc1JlbGF0aW9uOwogIGZpbmFsIGlyLk5hbWUgbmFtZTsKICBmaW5hbCBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlOwoKICBfRHluYW1pY0ludm9jYXRpb24oCiAgICAgIHRoaXMucmVjZWl2ZXJUeXBlLCB0aGlzLmNsYXNzUmVsYXRpb24sIHRoaXMubmFtZSwgdGhpcy5jYWxsU3RydWN0dXJlKTsKCiAgZmFjdG9yeSBfRHluYW1pY0ludm9jYXRpb24uZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGUoKTsKICAgIENsYXNzUmVsYXRpb24gY2xhc3NSZWxhdGlvbiA9IHNvdXJjZS5yZWFkRW51bShDbGFzc1JlbGF0aW9uLnZhbHVlcyk7CiAgICBpci5OYW1lIG5hbWUgPSBzb3VyY2UucmVhZE5hbWUoKTsKICAgIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgX0NhbGxTdHJ1Y3R1cmUuZnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX0R5bmFtaWNJbnZvY2F0aW9uKAogICAgICAgIHJlY2VpdmVyVHlwZSwgY2xhc3NSZWxhdGlvbiwgbmFtZSwgY2FsbFN0cnVjdHVyZSk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZShyZWNlaXZlclR5cGUpOwogICAgc2luay53cml0ZUVudW0oY2xhc3NSZWxhdGlvbik7CiAgICBzaW5rLndyaXRlTmFtZShuYW1lKTsKICAgIGNhbGxTdHJ1Y3R1cmUudG9EYXRhU2luayhzaW5rKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfTG9jYWxGdW5jdGlvbkludm9jYXRpb24gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19Mb2NhbEZ1bmN0aW9uSW52b2NhdGlvbic7CgogIGZpbmFsIGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24gbG9jYWxGdW5jdGlvbjsKICBmaW5hbCBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlOwoKICBfTG9jYWxGdW5jdGlvbkludm9jYXRpb24odGhpcy5sb2NhbEZ1bmN0aW9uLCB0aGlzLmNhbGxTdHJ1Y3R1cmUpOwoKICBmYWN0b3J5IF9Mb2NhbEZ1bmN0aW9uSW52b2NhdGlvbi5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5GdW5jdGlvbkRlY2xhcmF0aW9uIGxvY2FsRnVuY3Rpb24gPSBzb3VyY2UucmVhZFRyZWVOb2RlKCk7CiAgICBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IF9DYWxsU3RydWN0dXJlLmZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9Mb2NhbEZ1bmN0aW9uSW52b2NhdGlvbihsb2NhbEZ1bmN0aW9uLCBjYWxsU3RydWN0dXJlKTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlVHJlZU5vZGUobG9jYWxGdW5jdGlvbik7CiAgICBjYWxsU3RydWN0dXJlLnRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX1N0YXRpY0ludm9jYXRpb24gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19TdGF0aWNJbnZvY2F0aW9uJzsKCiAgZmluYWwgaXIuUHJvY2VkdXJlIHRhcmdldDsKICBmaW5hbCBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlOwogIGZpbmFsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydDsKCiAgX1N0YXRpY0ludm9jYXRpb24odGhpcy50YXJnZXQsIHRoaXMuY2FsbFN0cnVjdHVyZSwgdGhpcy5pbXBvcnQpOwoKICBmYWN0b3J5IF9TdGF0aWNJbnZvY2F0aW9uLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLlByb2NlZHVyZSB0YXJnZXQgPSBzb3VyY2UucmVhZE1lbWJlck5vZGUoKTsKICAgIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgX0NhbGxTdHJ1Y3R1cmUuZnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCA9IHNvdXJjZS5yZWFkTGlicmFyeURlcGVuZGVuY3lOb2RlT3JOdWxsKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9TdGF0aWNJbnZvY2F0aW9uKHRhcmdldCwgY2FsbFN0cnVjdHVyZSwgaW1wb3J0KTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZSh0YXJnZXQpOwogICAgY2FsbFN0cnVjdHVyZS50b0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZUxpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbChpbXBvcnQpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9Db25zdHJ1Y3Rvckludm9jYXRpb24gewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19Db25zdHJ1Y3Rvckludm9jYXRpb24nOwoKICBmaW5hbCBpci5NZW1iZXIgY29uc3RydWN0b3I7CiAgZmluYWwgaXIuSW50ZXJmYWNlVHlwZSB0eXBlOwogIGZpbmFsIF9DYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmU7CiAgZmluYWwgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0OwogIGZpbmFsIGJvb2wgaXNDb25zdDsKCiAgX0NvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgdGhpcy5jb25zdHJ1Y3RvciwgdGhpcy50eXBlLCB0aGlzLmNhbGxTdHJ1Y3R1cmUsIHRoaXMuaW1wb3J0LAogICAgICB7dGhpcy5pc0NvbnN0fSk7CgogIGZhY3RvcnkgX0NvbnN0cnVjdG9ySW52b2NhdGlvbi5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5NZW1iZXIgY29uc3RydWN0b3IgPSBzb3VyY2UucmVhZE1lbWJlck5vZGUoKTsKICAgIGlyLkludGVyZmFjZVR5cGUgdHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlKCk7CiAgICBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IF9DYWxsU3RydWN0dXJlLmZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQgPSBzb3VyY2UucmVhZExpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbCgpOwogICAgYm9vbCBpc0NvbnN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9Db25zdHJ1Y3Rvckludm9jYXRpb24oY29uc3RydWN0b3IsIHR5cGUsIGNhbGxTdHJ1Y3R1cmUsIGltcG9ydCwKICAgICAgICBpc0NvbnN0OiBpc0NvbnN0KTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZShjb25zdHJ1Y3Rvcik7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2RlKHR5cGUpOwogICAgY2FsbFN0cnVjdHVyZS50b0RhdGFTaW5rKHNpbmspOwogICAgc2luay53cml0ZUxpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbChpbXBvcnQpOwogICAgc2luay53cml0ZUJvb2woaXNDb25zdCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX0NvbnN0SW5zdGFudGlhdGlvbiB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX0NvbnN0SW5zdGFudGlhdGlvbic7CgogIGZpbmFsIGlyLkNsYXNzIGNsczsKICBmaW5hbCBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzOwogIGZpbmFsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydDsKCiAgX0NvbnN0SW5zdGFudGlhdGlvbih0aGlzLmNscywgdGhpcy50eXBlQXJndW1lbnRzLCB0aGlzLmltcG9ydCk7CgogIGZhY3RvcnkgX0NvbnN0SW5zdGFudGlhdGlvbi5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5DbGFzcyBjbHMgPSBzb3VyY2UucmVhZENsYXNzTm9kZSgpOwogICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlcygpOwogICAgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0ID0gc291cmNlLnJlYWRMaWJyYXJ5RGVwZW5kZW5jeU5vZGVPck51bGwoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgX0NvbnN0SW5zdGFudGlhdGlvbihjbHMsIHR5cGVBcmd1bWVudHMsIGltcG9ydCk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUNsYXNzTm9kZShjbHMpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZXModHlwZUFyZ3VtZW50cyk7CiAgICBzaW5rLndyaXRlTGlicmFyeURlcGVuZGVuY3lOb2RlT3JOdWxsKGltcG9ydCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKZW51bSBfRmVhdHVyZSB7CiAgbGF6eUZpZWxkLAogIGxvYWRMaWJyYXJ5LAogIHN0YWNrVHJhY2UsCiAgY2F0Y2hDbGF1c2UsCiAgdGhyb3dFeHByZXNzaW9uLAogIGxvY2FsV2l0aG91dEluaXRpYWxpemVyLAogIHN0cmluZ0NvbmNhdGVuYXRpb24sCiAgYXNzZXJ0V2l0aE1lc3NhZ2UsCiAgYXNzZXJ0V2l0aG91dE1lc3NhZ2UsCiAgbnVsbExpdGVyYWwsCn0KCmNsYXNzIF9UeXBlVXNlIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfVHlwZVVzZSc7CgogIGZpbmFsIGlyLkRhcnRUeXBlIHR5cGU7CiAgZmluYWwgX1R5cGVVc2VLaW5kIGtpbmQ7CgogIF9UeXBlVXNlKHRoaXMudHlwZSwgdGhpcy5raW5kKTsKCiAgZmFjdG9yeSBfVHlwZVVzZS5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5EYXJ0VHlwZSB0eXBlID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGUoKTsKICAgIF9UeXBlVXNlS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKF9UeXBlVXNlS2luZC52YWx1ZXMpOwogICAgc291cmNlLmVuZCh0YWcpOwogICAgcmV0dXJuIG5ldyBfVHlwZVVzZSh0eXBlLCBraW5kKTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2RlKHR5cGUpOwogICAgc2luay53cml0ZUVudW0oa2luZCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKZW51bSBfVHlwZVVzZUtpbmQgewogIHBhcmFtZXRlckNoZWNrLAogIGNhdGNoVHlwZSwKICBhc0Nhc3QsCiAgaW1wbGljaXRDYXN0LAogIGlzQ2hlY2ssCiAgYXN5bmNTdGFyTWFya2VyLAogIGFzeW5jTWFya2VyLAogIHN5bmNTdGFyTWFya2VyLAp9CgpjbGFzcyBfUmVkaXJlY3RpbmdJbml0aWFsaXplciB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0YWcgPSAnX1JlZGlyZWN0aW5nSW5pdGlhbGl6ZXInOwoKICBmaW5hbCBpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvcjsKICBmaW5hbCBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlOwoKICBfUmVkaXJlY3RpbmdJbml0aWFsaXplcih0aGlzLmNvbnN0cnVjdG9yLCB0aGlzLmNhbGxTdHJ1Y3R1cmUpOwoKICBmYWN0b3J5IF9SZWRpcmVjdGluZ0luaXRpYWxpemVyLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yID0gc291cmNlLnJlYWRNZW1iZXJOb2RlKCk7CiAgICBfQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlID0gbmV3IF9DYWxsU3RydWN0dXJlLmZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9SZWRpcmVjdGluZ0luaXRpYWxpemVyKGNvbnN0cnVjdG9yLCBjYWxsU3RydWN0dXJlKTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVyTm9kZShjb25zdHJ1Y3Rvcik7CiAgICBjYWxsU3RydWN0dXJlLnRvRGF0YVNpbmsoc2luayk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX1R5cGVMaXRlcmFsIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfVHlwZUxpdGVyYWwnOwoKICBmaW5hbCBpci5EYXJ0VHlwZSB0eXBlOwogIGZpbmFsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydDsKCiAgX1R5cGVMaXRlcmFsKHRoaXMudHlwZSwgdGhpcy5pbXBvcnQpOwoKICBmYWN0b3J5IF9UeXBlTGl0ZXJhbC5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5EYXJ0VHlwZSB0eXBlID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGUoKTsKICAgIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCA9IHNvdXJjZS5yZWFkTGlicmFyeURlcGVuZGVuY3lOb2RlT3JOdWxsKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9UeXBlTGl0ZXJhbCh0eXBlLCBpbXBvcnQpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUodHlwZSk7CiAgICBzaW5rLndyaXRlTGlicmFyeURlcGVuZGVuY3lOb2RlT3JOdWxsKGltcG9ydCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX0dlbmVyaWNJbnN0YW50aWF0aW9uIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfR2VuZXJpY0luc3RhbnRpYXRpb24nOwoKICBmaW5hbCBpci5GdW5jdGlvblR5cGUgZXhwcmVzc2lvblR5cGU7CiAgZmluYWwgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50czsKCiAgX0dlbmVyaWNJbnN0YW50aWF0aW9uKHRoaXMuZXhwcmVzc2lvblR5cGUsIHRoaXMudHlwZUFyZ3VtZW50cyk7CgogIGZhY3RvcnkgX0dlbmVyaWNJbnN0YW50aWF0aW9uLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkZ1bmN0aW9uVHlwZSBleHByZXNzaW9uVHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlKCk7CiAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGVzKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9HZW5lcmljSW5zdGFudGlhdGlvbihleHByZXNzaW9uVHlwZSwgdHlwZUFyZ3VtZW50cyk7CiAgfQoKICB2b2lkIHRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZURhcnRUeXBlTm9kZShleHByZXNzaW9uVHlwZSk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2Rlcyh0eXBlQXJndW1lbnRzKTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfU3RhdGljQWNjZXNzIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfU3RhdGljQWNjZXNzJzsKCiAgZmluYWwgaXIuTWVtYmVyIHRhcmdldDsKICBmaW5hbCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQ7CgogIF9TdGF0aWNBY2Nlc3ModGhpcy50YXJnZXQsIHRoaXMuaW1wb3J0KTsKCiAgZmFjdG9yeSBfU3RhdGljQWNjZXNzLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLk1lbWJlciB0YXJnZXQgPSBzb3VyY2UucmVhZE1lbWJlck5vZGUoKTsKICAgIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCA9IHNvdXJjZS5yZWFkTGlicmFyeURlcGVuZGVuY3lOb2RlT3JOdWxsKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IF9TdGF0aWNBY2Nlc3ModGFyZ2V0LCBpbXBvcnQpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVNZW1iZXJOb2RlKHRhcmdldCk7CiAgICBzaW5rLndyaXRlTGlicmFyeURlcGVuZGVuY3lOb2RlT3JOdWxsKGltcG9ydCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KfQoKY2xhc3MgX01hcExpdGVyYWwgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19NYXBMaXRlcmFsJzsKCiAgZmluYWwgaXIuRGFydFR5cGUga2V5VHlwZTsKICBmaW5hbCBpci5EYXJ0VHlwZSB2YWx1ZVR5cGU7CiAgZmluYWwgYm9vbCBpc0NvbnN0OwogIGZpbmFsIGJvb2wgaXNFbXB0eTsKCiAgX01hcExpdGVyYWwodGhpcy5rZXlUeXBlLCB0aGlzLnZhbHVlVHlwZSwge3RoaXMuaXNDb25zdCwgdGhpcy5pc0VtcHR5fSk7CgogIGZhY3RvcnkgX01hcExpdGVyYWwuZnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIHNvdXJjZS5iZWdpbih0YWcpOwogICAgaXIuRGFydFR5cGUga2V5VHlwZSA9IHNvdXJjZS5yZWFkRGFydFR5cGVOb2RlKCk7CiAgICBpci5EYXJ0VHlwZSB2YWx1ZVR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZSgpOwogICAgYm9vbCBpc0NvbnN0ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzRW1wdHkgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBfTWFwTGl0ZXJhbChrZXlUeXBlLCB2YWx1ZVR5cGUsIGlzQ29uc3Q6IGlzQ29uc3QsIGlzRW1wdHk6IGlzRW1wdHkpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUoa2V5VHlwZSk7CiAgICBzaW5rLndyaXRlRGFydFR5cGVOb2RlKHZhbHVlVHlwZSk7CiAgICBzaW5rLndyaXRlQm9vbChpc0NvbnN0KTsKICAgIHNpbmsud3JpdGVCb29sKGlzRW1wdHkpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9Db250YWluZXJMaXRlcmFsIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdfQ29udGFpbmVyTGl0ZXJhbCc7CgogIGZpbmFsIGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlOwogIGZpbmFsIGJvb2wgaXNDb25zdDsKICBmaW5hbCBib29sIGlzRW1wdHk7CgogIF9Db250YWluZXJMaXRlcmFsKHRoaXMuZWxlbWVudFR5cGUsIHt0aGlzLmlzQ29uc3QsIHRoaXMuaXNFbXB0eX0pOwoKICBmYWN0b3J5IF9Db250YWluZXJMaXRlcmFsLmZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGUoKTsKICAgIGJvb2wgaXNDb25zdCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc0VtcHR5ID0gc291cmNlLnJlYWRCb29sKCk7CiAgICByZXR1cm4gbmV3IF9Db250YWluZXJMaXRlcmFsKGVsZW1lbnRUeXBlLAogICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QsIGlzRW1wdHk6IGlzRW1wdHkpOwogIH0KCiAgdm9pZCB0b0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUoZWxlbWVudFR5cGUpOwogICAgc2luay53cml0ZUJvb2woaXNDb25zdCk7CiAgICBzaW5rLndyaXRlQm9vbChpc0VtcHR5KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQp9CgpjbGFzcyBfUnVudGltZVR5cGVVc2UgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19SdW50aW1lVHlwZVVzZSc7CgogIGZpbmFsIGlyLlByb3BlcnR5R2V0IG5vZGU7CiAgZmluYWwgUnVudGltZVR5cGVVc2VLaW5kIGtpbmQ7CiAgZmluYWwgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlOwogIGZpbmFsIGlyLkRhcnRUeXBlIGFyZ3VtZW50VHlwZTsKCiAgX1J1bnRpbWVUeXBlVXNlKHRoaXMubm9kZSwgdGhpcy5raW5kLCB0aGlzLnJlY2VpdmVyVHlwZSwgdGhpcy5hcmd1bWVudFR5cGUpOwoKICBmYWN0b3J5IF9SdW50aW1lVHlwZVVzZS5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5UcmVlTm9kZSBub2RlID0gc291cmNlLnJlYWRUcmVlTm9kZSgpOwogICAgUnVudGltZVR5cGVVc2VLaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oUnVudGltZVR5cGVVc2VLaW5kLnZhbHVlcyk7CiAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlTm9kZSgpOwogICAgaXIuRGFydFR5cGUgYXJndW1lbnRUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZU5vZGUoYWxsb3dOdWxsOiB0cnVlKTsKICAgIHJldHVybiBuZXcgX1J1bnRpbWVUeXBlVXNlKG5vZGUsIGtpbmQsIHJlY2VpdmVyVHlwZSwgYXJndW1lbnRUeXBlKTsKICB9CgogIHZvaWQgdG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlVHJlZU5vZGUobm9kZSk7CiAgICBzaW5rLndyaXRlRW51bShraW5kKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUocmVjZWl2ZXJUeXBlKTsKICAgIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUoYXJndW1lbnRUeXBlLCBhbGxvd051bGw6IHRydWUpOwogICAgc2luay5lbmQodGFnKTsKICB9Cn0KCmNsYXNzIF9Gb3JJbkRhdGEgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ19Gb3JJbkRhdGEnOwoKICBmaW5hbCBpci5EYXJ0VHlwZSBpdGVyYWJsZVR5cGU7CiAgZmluYWwgaXIuRGFydFR5cGUgaXRlcmF0b3JUeXBlOwogIGZpbmFsIENsYXNzUmVsYXRpb24gaXRlcmF0b3JDbGFzc1JlbGF0aW9uOwogIGZpbmFsIGJvb2wgaXNBc3luYzsKCiAgX0ZvckluRGF0YSh0aGlzLml0ZXJhYmxlVHlwZSwgdGhpcy5pdGVyYXRvclR5cGUsIHRoaXMuaXRlcmF0b3JDbGFzc1JlbGF0aW9uLAogICAgICB7dGhpcy5pc0FzeW5jfSk7CgogIGZhY3RvcnkgX0ZvckluRGF0YS5mcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBpci5EYXJ0VHlwZSBpdGVyYWJsZVR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBl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dCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vanNfYmFja2VuZC9hbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL2VudW1zZXQuZGFydCc7CmltcG9ydCAnYW5ub3RhdGlvbnMuZGFydCc7CmltcG9ydCAnY29uc3RhbnRzLmRhcnQnOwppbXBvcnQgJ2ltcGFjdC5kYXJ0JzsKaW1wb3J0ICdzY29wZS5kYXJ0JzsKCmNsYXNzIE1vZHVsYXJDb3JlIHsKICBmaW5hbCBpci5Db21wb25lbnQgY29tcG9uZW50OwogIGZpbmFsIERhcnQyanNDb25zdGFudEV2YWx1YXRvciBjb25zdGFudEV2YWx1YXRvcjsKCiAgTW9kdWxhckNvcmUodGhpcy5jb21wb25lbnQsIHRoaXMuY29uc3RhbnRFdmFsdWF0b3IpOwp9CgpjbGFzcyBNb2R1bGFyTWVtYmVyRGF0YSB7CiAgZmluYWwgU2NvcGVNb2RlbCBzY29wZU1vZGVsOwogIGZpbmFsIEltcGFjdEJ1aWxkZXJEYXRhIGltcGFjdEJ1aWxkZXJEYXRhOwoKICBNb2R1bGFyTWVtYmVyRGF0YSh0aGlzLnNjb3BlTW9kZWwsIHRoaXMuaW1wYWN0QnVpbGRlckRhdGEpOwp9CgphYnN0cmFjdCBjbGFzcyBNb2R1bGFyU3RyYXRlZ3kgewogIExpc3Q8UHJhZ21hQW5ub3RhdGlvbkRhdGE+IGdldFByYWdtYUFubm90YXRpb25EYXRhKGlyLk1lbWJlciBub2RlKTsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhlIG5lZWQgZm9yIHBhc3NpbmcgW3ByYWdtYUFubm90YXRpb25zXS4KICBNb2R1bGFyTWVtYmVyRGF0YSBnZXRNb2R1bGFyTWVtYmVyRGF0YSgKICAgICAgaXIuTWVtYmVyIG5vZGUsIEVudW1TZXQ8UHJhZ21hQW5ub3RhdGlvbj4gcHJhZ21hQW5ub3RhdGlvbnMpOwp9CigATk48ASg0LzE1ASkfGxkWFQEUIDQBNwIBGh8tAT4CASFGAUoqRAIBJHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL21vZHVsYXIuZGFydCtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pci9zY29wZS5kYXJ0jxgvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAnY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICdzY29wZV92aXNpdG9yLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL2NvbnN0YW50X2V2YWx1YXRvci5kYXJ0JyBhcyBpcjsKCmNsYXNzIFNjb3BlTW9kZWwgewogIGZpbmFsIENsb3N1cmVTY29wZU1vZGVsIGNsb3N1cmVTY29wZU1vZGVsOwogIGZpbmFsIFZhcmlhYmxlU2NvcGVNb2RlbCB2YXJpYWJsZVNjb3BlTW9kZWw7CiAgZmluYWwgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGluaXRpYWxpemVyQ29tcGxleGl0eTsKCiAgY29uc3QgU2NvcGVNb2RlbCgKICAgICAge3RoaXMuY2xvc3VyZVNjb3BlTW9kZWwsCiAgICAgIHRoaXMudmFyaWFibGVTY29wZU1vZGVsLAogICAgICB0aGlzLmluaXRpYWxpemVyQ29tcGxleGl0eX0pCiAgICAgIDogYXNzZXJ0KGluaXRpYWxpemVyQ29tcGxleGl0eSAhPSBudWxsKTsKCiAgLy8vIEluc3BlY3QgbWVtYmVycyBhbmQgbWFyayBpZiB0aG9zZSBtZW1iZXJzIGNhcHR1cmUgYW55IHN0YXRlIHRoYXQgbmVlZHMgdG8KICAvLy8gYmUgbWFya2VkIGFzIGZyZWUgdmFyaWFibGVzLgogIGZhY3RvcnkgU2NvcGVNb2RlbC5mcm9tKAogICAgICBpci5NZW1iZXIgbm9kZSwgaXIuQ29uc3RhbnRFdmFsdWF0b3IgY29uc3RhbnRFdmFsdWF0b3IpIHsKICAgIFNjb3BlTW9kZWxCdWlsZGVyIGJ1aWxkZXIgPSBuZXcgU2NvcGVNb2RlbEJ1aWxkZXIoY29uc3RhbnRFdmFsdWF0b3IpOwogICAgcmV0dXJuIGJ1aWxkZXIuY29tcHV0ZU1vZGVsKG5vZGUpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgVmFyaWFibGVTY29wZU1vZGVsIHsKICBWYXJpYWJsZVNjb3BlIGdldFNjb3BlRm9yKGlyLlRyZWVOb2RlIG5vZGUpOwogIEl0ZXJhYmxlPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IGdldCBhc3NpZ25lZFZhcmlhYmxlczsKICBib29sIGlzRWZmZWN0aXZlbHlGaW5hbChpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpOwp9CgpjbGFzcyBWYXJpYWJsZVNjb3BlTW9kZWxJbXBsIGltcGxlbWVudHMgVmFyaWFibGVTY29wZU1vZGVsIHsKICBNYXA8aXIuVHJlZU5vZGUsIFZhcmlhYmxlU2NvcGU+IF9zY29wZU1hcCA9IHt9OwogIFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBfYXNzaWduZWRWYXJpYWJsZXM7CgogIFZhcmlhYmxlU2NvcGUgY3JlYXRlU2NvcGVGb3IoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9zY29wZU1hcFtub2RlXSA/Pz0gbmV3IFZhcmlhYmxlU2NvcGVJbXBsKCk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQXNzaWduZWRWYXJpYWJsZShpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIF9hc3NpZ25lZFZhcmlhYmxlcyA/Pz0gbmV3IFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPigpOwogICAgX2Fzc2lnbmVkVmFyaWFibGVzLmFkZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIFZhcmlhYmxlU2NvcGUgZ2V0U2NvcGVGb3IoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgcmV0dXJuIF9zY29wZU1hcFtub2RlXTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IGdldCBhc3NpZ25lZFZhcmlhYmxlcyA9PgogICAgICBfYXNzaWduZWRWYXJpYWJsZXMgPz8gPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+W107CgogIEBvdmVycmlkZQogIGJvb2wgaXNFZmZlY3RpdmVseUZpbmFsKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgcmV0dXJuIF9hc3NpZ25lZFZhcmlhYmxlcyA9PSBudWxsIHx8ICFfYXNzaWduZWRWYXJpYWJsZXMuY29udGFpbnMobm9kZSk7CiAgfQp9CgovLy8gVmFyaWFibGUgaW5mb3JtYXRpb24gZm9yIGEgc2NvcGUuCmFic3RyYWN0IGNsYXNzIFZhcmlhYmxlU2NvcGUgewogIC8vLyBSZXR1cm5zIHRoZSBzZXQgb2YgW2lyLlZhcmlhYmxlRGVjbGFyYXRpb25dcyB0aGF0IGhhdmUgYmVlbiBhc3NpZ25lZCB0byBpbgogIC8vLyB0aGlzIHNjb3BlLgogIEl0ZXJhYmxlPGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IGdldCBhc3NpZ25lZFZhcmlhYmxlczsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgc2NvcGUgaGFzIGEgW2lyLkNvbnRpbnVlU3dpdGNoU3RhdGVtZW50XS4KICBib29sIGdldCBoYXNDb250aW51ZVN3aXRjaDsKfQoKY2xhc3MgVmFyaWFibGVTY29wZUltcGwgaW1wbGVtZW50cyBWYXJpYWJsZVNjb3BlIHsKICBMaXN0PFZhcmlhYmxlU2NvcGU+IF9zdWJTY29wZXM7CiAgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+IF9hc3NpZ25lZFZhcmlhYmxlczsKICBAb3ZlcnJpZGUKICBib29sIGhhc0NvbnRpbnVlU3dpdGNoID0gZmFsc2U7CgogIHZvaWQgYWRkU3ViU2NvcGUoVmFyaWFibGVTY29wZSBzY29wZSkgewogICAgX3N1YlNjb3BlcyA/Pz0gPFZhcmlhYmxlU2NvcGU+W107CiAgICBfc3ViU2NvcGVzLmFkZChzY29wZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQXNzaWduZWRWYXJpYWJsZShpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlKSB7CiAgICBfYXNzaWduZWRWYXJpYWJsZXMgPz89IG5ldyBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4oKTsKICAgIF9hc3NpZ25lZFZhcmlhYmxlcy5hZGQodmFyaWFibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gZ2V0IGFzc2lnbmVkVmFyaWFibGVzIHN5bmMqIHsKICAgIGlmIChfYXNzaWduZWRWYXJpYWJsZXMgIT0gbnVsbCkgewogICAgICB5aWVsZCogX2Fzc2lnbmVkVmFyaWFibGVzOwogICAgfQogICAgaWYgKF9zdWJTY29wZXMgIT0gbnVsbCkgewogICAgICBmb3IgKFZhcmlhYmxlU2NvcGUgc3ViU2NvcGUgaW4gX3N1YlNjb3BlcykgewogICAgICAgIHlpZWxkKiBzdWJTY29wZS5hc3NpZ25lZFZhcmlhYmxlczsKICAgICAgfQogICAgfQogIH0KfQoKYWJzdHJhY3QgY2xhc3MgVmFyaWFibGVDb2xsZWN0b3JNaXhpbiB7CiAgVmFyaWFibGVTY29wZUltcGwgY3VycmVudFZhcmlhYmxlU2NvcGU7CiAgVmFyaWFibGVTY29wZU1vZGVsSW1wbCB2YXJpYWJsZVNjb3BlTW9kZWwgPSBuZXcgVmFyaWFibGVTY29wZU1vZGVsSW1wbCgpOwoKICB2b2lkIHZpc2l0SW5WYXJpYWJsZVNjb3BlKGlyLlRyZWVOb2RlIHJvb3QsIHZvaWQgZigpKSB7CiAgICBWYXJpYWJsZVNjb3BlSW1wbCBvbGRTY29wZSA9IGN1cnJlbnRWYXJpYWJsZVNjb3BlOwogICAgY3VycmVudFZhcmlhYmxlU2NvcGUgPSB2YXJpYWJsZVNjb3BlTW9kZWwuY3JlYXRlU2NvcGVGb3Iocm9vdCk7CiAgICBvbGRTY29wZT8uYWRkU3ViU2NvcGUoY3VycmVudFZhcmlhYmxlU2NvcGUpOwogICAgZigpOwogICAgY3VycmVudFZhcmlhYmxlU2NvcGUgPSBvbGRTY29wZTsKICB9CgogIHZvaWQgcmVnaXN0ZXJBc3NpZ25lZFZhcmlhYmxlKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgY3VycmVudFZhcmlhYmxlU2NvcGU/LnJlZ2lzdGVyQXNzaWduZWRWYXJpYWJsZShub2RlKTsKICAgIHZhcmlhYmxlU2NvcGVNb2RlbC5yZWdpc3RlckFzc2lnbmVkVmFyaWFibGUobm9kZSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ29udGludWVTd2l0Y2goKSB7CiAgICBjdXJyZW50VmFyaWFibGVTY29wZT8uaGFzQ29udGludWVTd2l0Y2ggPSB0cnVlOwogIH0KfQp9AE5OPAEoFx1MARMtLzUBFB8fIy8BUCMbQEonBAIBJC86OAIBPTIyATM4BAE/PiIEAQwwHAQBDDw4AQw5TQQCASYfURI6AUceAgEzIjIMIgEqJhsEAUM+JgQBDEEmIQYeMysIBgQCASgqTAE6N0QxCSUEAT86NwQBIjQEAgEicGFja2FnZTpjb21waWxlci9zcmMvaXIvc2NvcGUuZGFydDtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL2JhY2tlbmRfdXNhZ2UuZGFydLxbLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9mcm9udGVuZF9zdHJhdGVneS5kYXJ0JzsKaW1wb3J0ICcuLi9pci9ydW50aW1lX3R5cGVfYW5hbHlzaXMuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2ZlYXR1cmUuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgU2V0bGV0OwppbXBvcnQgJ2JhY2tlbmRfaW1wYWN0LmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgQmFja2VuZFVzYWdlIHsKICAvLy8gRGVzZXJpYWxpemVzIGEgW0JhY2tlbmRVc2FnZV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBCYWNrZW5kVXNhZ2UucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSA9CiAgICAgIEJhY2tlbmRVc2FnZUltcGwucmVhZEZyb21EYXRhU291cmNlOwoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtCYWNrZW5kVXNhZ2VdIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKTsKCiAgYm9vbCBuZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnOwogIGJvb2wgbmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbZWxlbWVudF0gaXMgYSBmdW5jdGlvbiBjYWxsZWQgYnkgdGhlIGJhY2tlbmQuCiAgYm9vbCBpc0Z1bmN0aW9uVXNlZEJ5QmFja2VuZChGdW5jdGlvbkVudGl0eSBlbGVtZW50KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtlbGVtZW50XSBpcyBhbiBpbnN0YW5jZSBmaWVsZCBvZiBhIGNsYXNzIGluc3RhbnRpYXRlZAogIC8vLyBieSB0aGUgYmFja2VuZC4KICBib29sIGlzRmllbGRVc2VkQnlCYWNrZW5kKEZpZWxkRW50aXR5IGVsZW1lbnQpOwoKICBJdGVyYWJsZTxGdW5jdGlvbkVudGl0eT4gZ2V0IGdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzOwoKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGdsb2JhbENsYXNzRGVwZW5kZW5jaWVzOwoKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGhlbHBlckNsYXNzZXNVc2VkOwoKICBJdGVyYWJsZTxSdW50aW1lVHlwZVVzZT4gZ2V0IHJ1bnRpbWVUeXBlVXNlczsKCiAgLy8vIGB0cnVlYCBpZiBhIGNvcmUtbGlicmFyeSBmdW5jdGlvbiByZXF1aXJlcyB0aGUgcHJlYW1ibGUgZmlsZSB0byBmdW5jdGlvbi4KICBib29sIGdldCByZXF1aXJlc1ByZWFtYmxlOwoKICAvLy8gYHRydWVgIG9mIGBPYmplY3QucnVudGltZVR5cGVgIGlzIHVzZWQuCiAgYm9vbCBnZXQgaXNSdW50aW1lVHlwZVVzZWQ7CgogIC8vLyBgdHJ1ZWAgaWYgYEZ1bmN0aW9uLmFwcGx5YCBpcyB1c2VkLgogIGJvb2wgZ2V0IGlzRnVuY3Rpb25BcHBseVVzZWQ7CgogIC8vLyBgdHJ1ZWAgaWYgJ2RhcnQ6bWlycm9ycycgZmVhdHVyZXMgYXJlIHVzZWQuCiAgYm9vbCBnZXQgaXNNaXJyb3JzVXNlZDsKCiAgLy8vIGB0cnVlYCBpZiBgbm9TdWNoTWV0aG9kYCBpcyB1c2VkLgogIGJvb2wgZ2V0IGlzTm9TdWNoTWV0aG9kVXNlZDsKCiAgLy8vIGB0cnVlYCBpZiB0aGUgYGRhcnQ6aHRtbGAgaXMgbG9hZGVkLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoaXMgaXMgYWx3YXlzIGB0cnVlYCB3aXRoIHRoZSBDRkUuCiAgYm9vbCBnZXQgaXNIdG1sTG9hZGVkOwp9CgphYnN0cmFjdCBjbGFzcyBCYWNrZW5kVXNhZ2VCdWlsZGVyIHsKICAvLy8gVGhlIGJhY2tlbmQgbXVzdCAqYWx3YXlzKiBjYWxsIHRoaXMgbWV0aG9kIHdoZW4gZW5xdWV1aW5nIGFuIGZ1bmN0aW9uCiAgLy8vIGVsZW1lbnQuIENhbGxzIGRvbmUgYnkgdGhlIGJhY2tlbmQgYXJlIG5vdCBzZWVuIGJ5IGdsb2JhbAogIC8vLyBvcHRpbWl6YXRpb25zLCBzbyB0aGV5IHdvdWxkIG1ha2UgdGhlc2Ugb3B0aW1pemF0aW9ucyB1bnNvdW5kLgogIC8vLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBjb2xsZWN0IHRoZSBsaXN0IG9mIG1ldGhvZHMgdGhlIGJhY2tlbmQgbWF5CiAgLy8vIGNhbGwuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVwbGFjZSB0aGlzIHdpdGggYSBtb3JlIHByZWNpc2UgbW9kZWxsaW5nOyB0eXBlCiAgLy8gaW5mZXJlbmNlIG9mIHBhcmFtZXRlcnMgb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGRpc2FibGVkLgogIHZvaWQgcmVnaXN0ZXJCYWNrZW5kRnVuY3Rpb25Vc2UoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCk7CgogIC8vLyBUaGUgYmFja2VuZCBtdXN0ICphbHdheXMqIGNhbGwgdGhpcyBtZXRob2Qgd2hlbiBpbnN0YW50aWF0aW5nIGEgY2xhc3MuCiAgLy8vIEluc3RhbnRpYXRpb25zIGRvbmUgYnkgdGhlIGJhY2tlbmQgYXJlIG5vdCBzZWVuIGJ5IGdsb2JhbCBvcHRpbWl6YXRpb25zLAogIC8vLyBzbyB0aGV5IHdvdWxkIG1ha2UgdGhlc2Ugb3B0aW1pemF0aW9ucyB1bnNvdW5kLiBUaGVyZWZvcmUgd2UgbmVlZCB0bwogIC8vLyBjb2xsZWN0IHRoZSBsaXN0IG9mIGNsYXNzZXMgdGhlIGJhY2tlbmQgbWF5IGluc3RhbnRpYXRlLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlcGxhY2UgdGhpcyB3aXRoIGEgbW9yZSBwcmVjaXNlIG1vZGVsbGluZzsgdHlwZQogIC8vIGluZmVyZW5jZSBvZiB0aGUgaW5zdGFuY2UgZmllbGRzIG9mIHRoZXNlIGNsYXNzZXMgaXMgZGlzYWJsZWQuCiAgdm9pZCByZWdpc3RlckJhY2tlbmRDbGFzc1VzZShDbGFzc0VudGl0eSBlbGVtZW50KTsKCiAgdm9pZCByZWdpc3Rlckdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jeShGdW5jdGlvbkVudGl0eSBlbGVtZW50KTsKICB2b2lkIHJlZ2lzdGVyR2xvYmFsQ2xhc3NEZXBlbmRlbmN5KENsYXNzRW50aXR5IGVsZW1lbnQpOwoKICAvLy8gQ29sbGVjdCBiYWNrZW5kIHVzZSBmcm9tIFtiYWNrZW5kSW1wYWN0XS4KICB2b2lkIHByb2Nlc3NCYWNrZW5kSW1wYWN0KEJhY2tlbmRJbXBhY3QgYmFja2VuZEltcGFjdCk7CgogIHZvaWQgcmVnaXN0ZXJVc2VkTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gUmVnaXN0ZXIgdXNlIG9mIGBydW50aW1lVHlwZWAuCiAgdm9pZCByZWdpc3RlclJ1bnRpbWVUeXBlVXNlKFJ1bnRpbWVUeXBlVXNlIHJ1bnRpbWVUeXBlVXNlKTsKCiAgLy8vIGB0cnVlYCBpZiBgRnVuY3Rpb24uYXBwbHlgIGlzIHVzZWQuCiAgYm9vbCBpc0Z1bmN0aW9uQXBwbHlVc2VkOwoKICAvLy8gYHRydWVgIGlmIGBub1N1Y2hNZXRob2RgIGlzIHVzZWQuCiAgYm9vbCBpc05vU3VjaE1ldGhvZFVzZWQ7CgogIC8vLyBSZWdpc3RlciB0aGF0IGBkYXJ0Omh0bWxgIGlzIGxvYWRlZC4KICB2b2lkIHJlZ2lzdGVySHRtbElzTG9hZGVkKCk7CgogIEJhY2tlbmRVc2FnZSBjbG9zZSgpOwp9CgpjbGFzcyBCYWNrZW5kVXNhZ2VCdWlsZGVySW1wbCBpbXBsZW1lbnRzIEJhY2tlbmRVc2FnZUJ1aWxkZXIgewogIEZyb250ZW5kU3RyYXRlZ3kgX2Zyb250ZW5kU3RyYXRlZ3k7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoZSBuZWVkIGZvciB0aGVzZS4KICBTZXRsZXQ8RnVuY3Rpb25FbnRpdHk+IF9nbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llczsKICBTZXRsZXQ8Q2xhc3NFbnRpdHk+IF9nbG9iYWxDbGFzc0RlcGVuZGVuY2llczsKCiAgLy8vIExpc3Qgb2YgbWV0aG9kcyB0aGF0IHRoZSBiYWNrZW5kIG1heSB1c2UuCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBfaGVscGVyRnVuY3Rpb25zVXNlZCA9IG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CgogIC8vLyBMaXN0IG9mIGNsYXNzZXMgdGhhdCB0aGUgYmFja2VuZCBtYXkgdXNlLgogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX2hlbHBlckNsYXNzZXNVc2VkID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgZmluYWwgU2V0PFJ1bnRpbWVUeXBlVXNlPiBfcnVudGltZVR5cGVVc2VzID0gbmV3IFNldDxSdW50aW1lVHlwZVVzZT4oKTsKCiAgYm9vbCBfbmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZyA9IGZhbHNlOwogIGJvb2wgX25lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5ID0gZmFsc2U7CgogIC8vLyBgdHJ1ZWAgaWYgYSBjb3JlLWxpYnJhcnkgZnVuY3Rpb24gcmVxdWlyZXMgdGhlIHByZWFtYmxlIGZpbGUgdG8gZnVuY3Rpb24uCiAgYm9vbCByZXF1aXJlc1ByZWFtYmxlID0gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgaXNGdW5jdGlvbkFwcGx5VXNlZCA9IGZhbHNlOwoKICAvLy8gYHRydWVgIGlmICdkYXJ0Om1pcnJvcnMnIGZlYXR1cmVzIGFyZSB1c2VkLgogIGJvb2wgaXNNaXJyb3JzVXNlZCA9IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIGlzTm9TdWNoTWV0aG9kVXNlZCA9IGZhbHNlOwoKICBib29sIGlzSHRtbExvYWRlZCA9IGZhbHNlOwoKICBCYWNrZW5kVXNhZ2VCdWlsZGVySW1wbCh0aGlzLl9mcm9udGVuZFN0cmF0ZWd5KTsKCiAgS0NvbW1vbkVsZW1lbnRzIGdldCBfY29tbW9uRWxlbWVudHMgPT4gX2Zyb250ZW5kU3RyYXRlZ3kuY29tbW9uRWxlbWVudHM7CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJCYWNrZW5kRnVuY3Rpb25Vc2UoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KF9pc1ZhbGlkQmFja2VuZFVzZShlbGVtZW50LCBlbGVtZW50LmxpYnJhcnkpLAogICAgICAgIGZhaWxlZEF0KGVsZW1lbnQsICJCYWNrZW5kIHVzZSBvZiAkZWxlbWVudCBpcyBub3QgYWxsb3dlZC4iKSk7CiAgICBfaGVscGVyRnVuY3Rpb25zVXNlZC5hZGQoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQmFja2VuZENsYXNzVXNlKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChfaXNWYWxpZEJhY2tlbmRVc2UoZWxlbWVudCwgZWxlbWVudC5saWJyYXJ5KSwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LCAiQmFja2VuZCB1c2Ugb2YgJGVsZW1lbnQgaXMgbm90IGFsbG93ZWQuIikpOwogICAgX2hlbHBlckNsYXNzZXNVc2VkLmFkZChlbGVtZW50KTsKICB9CgogIGJvb2wgX2lzVmFsaWRCYWNrZW5kVXNlKEVudGl0eSBlbGVtZW50LCBMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgIGlmIChfaXNWYWxpZEVudGl0eShlbGVtZW50KSkgcmV0dXJuIHRydWU7CiAgICBTb3VyY2VTcGFuIHNwYW4gPSBfZnJvbnRlbmRTdHJhdGVneS5zcGFuRnJvbVNwYW5uYWJsZShlbGVtZW50LCBlbGVtZW50KTsKICAgIGlmIChsaWJyYXJ5LmNhbm9uaWNhbFVyaS5zY2hlbWUgPT0gJ2RhcnQnICYmCiAgICAgICAgc3Bhbi51cmkucGF0aC5jb250YWlucygnX2ludGVybmFsL2pzX3J1bnRpbWUvbGliLycpKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFdlIHNob3VsZCBiZSBtb3JlIHByZWNpc2UgYWJvdXQgdGhlc2UuCiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgYm9vbCBfaXNWYWxpZEVudGl0eShFbnRpdHkgZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQgaXMgQ29uc3RydWN0b3JFbnRpdHkgJiYKICAgICAgICAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuc3RyZWFtSXRlcmF0b3JDb25zdHJ1Y3RvciB8fAogICAgICAgICAgICBfY29tbW9uRWxlbWVudHMuaXNTeW1ib2xDb25zdHJ1Y3RvcihlbGVtZW50KSB8fAogICAgICAgICAgICBfY29tbW9uRWxlbWVudHMuaXNTeW1ib2xWYWxpZGF0ZWRDb25zdHJ1Y3RvcihlbGVtZW50KSkpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhlc2UgYXJlIHZhbGlkIGJ1dCB3ZSBjb3VsZCBiZSBtb3JlIHByZWNpc2UuCiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5zeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMub2JqZWN0Tm9TdWNoTWV0aG9kKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRoZXNlIGFyZSB2YWxpZCBidXQgd2UgY291bGQgYmUgbW9yZSBwcmVjaXNlLgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMubGlzdENsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMubWFwTGl0ZXJhbENsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuc2V0TGl0ZXJhbENsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMudW5tb2RpZmlhYmxlU2V0Q2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5mdW5jdGlvbkNsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3MpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhlc2UuCiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBfcHJvY2Vzc0JhY2tlbmRTdGF0aWNVc2UoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwKICAgICAge2Jvb2wgaXNHbG9iYWw6IGZhbHNlfSkgewogICAgcmVnaXN0ZXJCYWNrZW5kRnVuY3Rpb25Vc2UoZWxlbWVudCk7CiAgICBpZiAoaXNHbG9iYWwpIHsKICAgICAgcmVnaXN0ZXJHbG9iYWxGdW5jdGlvbkRlcGVuZGVuY3koZWxlbWVudCk7CiAgICB9CiAgfQoKICB2b2lkIF9wcm9jZXNzQmFja2VuZEluc3RhbnRpYXRpb24oQ2xhc3NFbnRpdHkgY2xzLCB7Ym9vbCBpc0dsb2JhbDogZmFsc2V9KSB7CiAgICByZWdpc3RlckJhY2tlbmRDbGFzc1VzZShjbHMpOwogICAgaWYgKGlzR2xvYmFsKSB7CiAgICAgIHJlZ2lzdGVyR2xvYmFsQ2xhc3NEZXBlbmRlbmN5KGNscyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHByb2Nlc3NCYWNrZW5kSW1wYWN0KEJhY2tlbmRJbXBhY3QgYmFja2VuZEltcGFjdCkgewogICAgZm9yIChGdW5jdGlvbkVudGl0eSBzdGF0aWNVc2UgaW4gYmFja2VuZEltcGFjdC5zdGF0aWNVc2VzKSB7CiAgICAgIGFzc2VydChzdGF0aWNVc2UgIT0gbnVsbCk7CiAgICAgIF9wcm9jZXNzQmFja2VuZFN0YXRpY1VzZShzdGF0aWNVc2UpOwogICAgfQogICAgZm9yIChGdW5jdGlvbkVudGl0eSBzdGF0aWNVc2UgaW4gYmFja2VuZEltcGFjdC5nbG9iYWxVc2VzKSB7CiAgICAgIGFzc2VydChzdGF0aWNVc2UgIT0gbnVsbCk7CiAgICAgIF9wcm9jZXNzQmFja2VuZFN0YXRpY1VzZShzdGF0aWNVc2UsIGlzR2xvYmFsOiB0cnVlKTsKICAgIH0KICAgIGZvciAoSW50ZXJmYWNlVHlwZSBpbnN0YW50aWF0ZWRUeXBlIGluIGJhY2tlbmRJbXBhY3QuaW5zdGFudGlhdGVkVHlwZXMpIHsKICAgICAgcmVnaXN0ZXJCYWNrZW5kQ2xhc3NVc2UoaW5zdGFudGlhdGVkVHlwZS5lbGVtZW50KTsKICAgIH0KICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIGJhY2tlbmRJbXBhY3QuaW5zdGFudGlhdGVkQ2xhc3NlcykgewogICAgICBfcHJvY2Vzc0JhY2tlbmRJbnN0YW50aWF0aW9uKGNscyk7CiAgICB9CiAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiBiYWNrZW5kSW1wYWN0Lmdsb2JhbENsYXNzZXMpIHsKICAgICAgX3Byb2Nlc3NCYWNrZW5kSW5zdGFudGlhdGlvbihjbHMsIGlzR2xvYmFsOiB0cnVlKTsKICAgIH0KICAgIGZvciAoQmFja2VuZEltcGFjdCBvdGhlckltcGFjdCBpbiBiYWNrZW5kSW1wYWN0Lm90aGVySW1wYWN0cykgewogICAgICBwcm9jZXNzQmFja2VuZEltcGFjdChvdGhlckltcGFjdCk7CiAgICB9CiAgICBmb3IgKEJhY2tlbmRGZWF0dXJlIGZlYXR1cmUgaW4gYmFja2VuZEltcGFjdC5mZWF0dXJlcykgewogICAgICBzd2l0Y2ggKGZlYXR1cmUpIHsKICAgICAgICBjYXNlIEJhY2tlbmRGZWF0dXJlLm5lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5OgogICAgICAgICAgX25lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5ID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQmFja2VuZEZlYXR1cmUubmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZzoKICAgICAgICAgIF9uZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyVXNlZE1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBpZiAobWVtYmVyID09IF9jb21tb25FbGVtZW50cy5nZXRJc29sYXRlQWZmaW5pdHlUYWdNYXJrZXIpIHsKICAgICAgX25lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWcgPSB0cnVlOwogICAgfSBlbHNlIGlmIChtZW1iZXIgPT0gX2NvbW1vbkVsZW1lbnRzLnJlcXVpcmVzUHJlYW1ibGVNYXJrZXIpIHsKICAgICAgcmVxdWlyZXNQcmVhbWJsZSA9IHRydWU7CiAgICB9IGVsc2UgaWYgKF9jb21tb25FbGVtZW50cy5pc0Z1bmN0aW9uQXBwbHlNZXRob2QobWVtYmVyKSkgewogICAgICBpc0Z1bmN0aW9uQXBwbHlVc2VkID0gdHJ1ZTsKICAgIH0gZWxzZSBpZiAobWVtYmVyLmxpYnJhcnkgPT0gX2NvbW1vbkVsZW1lbnRzLm1pcnJvcnNMaWJyYXJ5KSB7CiAgICAgIGlzTWlycm9yc1VzZWQgPSB0cnVlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlckdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jeShGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoZWxlbWVudCAhPSBudWxsKTsKICAgIGlmIChfZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMgPT0gbnVsbCkgewogICAgICBfZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMgPSBuZXcgU2V0bGV0PEZ1bmN0aW9uRW50aXR5PigpOwogICAgfQogICAgX2dsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzLmFkZChlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJHbG9iYWxDbGFzc0RlcGVuZGVuY3koQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGVsZW1lbnQgIT0gbnVsbCk7CiAgICBpZiAoX2dsb2JhbENsYXNzRGVwZW5kZW5jaWVzID09IG51bGwpIHsKICAgICAgX2dsb2JhbENsYXNzRGVwZW5kZW5jaWVzID0gbmV3IFNldGxldDxDbGFzc0VudGl0eT4oKTsKICAgIH0KICAgIF9nbG9iYWxDbGFzc0RlcGVuZGVuY2llcy5hZGQoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyUnVudGltZVR5cGVVc2UoUnVudGltZVR5cGVVc2UgcnVudGltZVR5cGVVc2UpIHsKICAgIF9ydW50aW1lVHlwZVVzZXMuYWRkKHJ1bnRpbWVUeXBlVXNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJIdG1sSXNMb2FkZWQoKSB7CiAgICBpc0h0bWxMb2FkZWQgPSB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgQmFja2VuZFVzYWdlIGNsb3NlKCkgewogICAgcmV0dXJuIG5ldyBCYWNrZW5kVXNhZ2VJbXBsKAogICAgICAgIGdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzOiBfZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMsCiAgICAgICAgZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXM6IF9nbG9iYWxDbGFzc0RlcGVuZGVuY2llcywKICAgICAgICBoZWxwZXJGdW5jdGlvbnNVc2VkOiBfaGVscGVyRnVuY3Rpb25zVXNlZCwKICAgICAgICBoZWxwZXJDbGFzc2VzVXNlZDogX2hlbHBlckNsYXNzZXNVc2VkLAogICAgICAgIG5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWc6IF9uZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnLAogICAgICAgIG5lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5OiBfbmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHksCiAgICAgICAgcmVxdWlyZXNQcmVhbWJsZTogcmVxdWlyZXNQcmVhbWJsZSwKICAgICAgICBydW50aW1lVHlwZVVzZXM6IF9ydW50aW1lVHlwZVVzZXMsCiAgICAgICAgaXNGdW5jdGlvbkFwcGx5VXNlZDogaXNGdW5jdGlvbkFwcGx5VXNlZCwKICAgICAgICBpc01pcnJvcnNVc2VkOiBpc01pcnJvcnNVc2VkLAogICAgICAgIGlzTm9TdWNoTWV0aG9kVXNlZDogaXNOb1N1Y2hNZXRob2RVc2VkLAogICAgICAgIGlzSHRtbExvYWRlZDogaXNIdG1sTG9hZGVkKTsKICB9Cn0KCmNsYXNzIEJhY2tlbmRVc2FnZUltcGwgaW1wbGVtZW50cyBCYWNrZW5kVXNhZ2UgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbQmFja2VuZFVzYWdlXSBvYmplY3RzIGluIGEKICAvLy8gZGVidWdnaW5nIGRhdGEgc3RyZWFtLgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ2JhY2tlbmQtdXNhZ2UnOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhlIG5lZWQgZm9yIHRoZXNlLgogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gX2dsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzOwogIGZpbmFsIFNldDxDbGFzc0VudGl0eT4gX2dsb2JhbENsYXNzRGVwZW5kZW5jaWVzOwoKICAvLy8gU2V0IG9mIGZ1bmN0aW9ucyBjYWxsZWQgYnkgdGhlIGJhY2tlbmQuCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBfaGVscGVyRnVuY3Rpb25zVXNlZDsKCiAgLy8vIFNldCBvZiBjbGFzc2VzIGluc3RhbnRpYXRlZCBieSB0aGUgYmFja2VuZC4KICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IF9oZWxwZXJDbGFzc2VzVXNlZDsKCiAgZmluYWwgU2V0PFJ1bnRpbWVUeXBlVXNlPiBfcnVudGltZVR5cGVVc2VzOwoKICBAb3ZlcnJpZGUKICBib29sIG5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWc7CiAgQG92ZXJyaWRlCiAgYm9vbCBuZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCByZXF1aXJlc1ByZWFtYmxlOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzRnVuY3Rpb25BcHBseVVzZWQ7CgogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNNaXJyb3JzVXNlZDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBpc05vU3VjaE1ldGhvZFVzZWQ7CgogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNIdG1sTG9hZGVkOwoKICBCYWNrZW5kVXNhZ2VJbXBsKAogICAgICB7U2V0PEZ1bmN0aW9uRW50aXR5PiBnbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llcywKICAgICAgU2V0PENsYXNzRW50aXR5PiBnbG9iYWxDbGFzc0RlcGVuZGVuY2llcywKICAgICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBoZWxwZXJGdW5jdGlvbnNVc2VkLAogICAgICBTZXQ8Q2xhc3NFbnRpdHk+IGhlbHBlckNsYXNzZXNVc2VkLAogICAgICB0aGlzLm5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWcsCiAgICAgIHRoaXMubmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHksCiAgICAgIHRoaXMucmVxdWlyZXNQcmVhbWJsZSwKICAgICAgU2V0PFJ1bnRpbWVUeXBlVXNlPiBydW50aW1lVHlwZVVzZXMsCiAgICAgIHRoaXMuaXNGdW5jdGlvbkFwcGx5VXNlZCwKICAgICAgdGhpcy5pc01pcnJvcnNVc2VkLAogICAgICB0aGlzLmlzTm9TdWNoTWV0aG9kVXNlZCwKICAgICAgdGhpcy5pc0h0bWxMb2FkZWR9KQogICAgICA6IHRoaXMuX2dsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzID0gZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMsCiAgICAgICAgdGhpcy5fZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXMgPSBnbG9iYWxDbGFzc0RlcGVuZGVuY2llcywKICAgICAgICB0aGlzLl9oZWxwZXJGdW5jdGlvbnNVc2VkID0gaGVscGVyRnVuY3Rpb25zVXNlZCwKICAgICAgICB0aGlzLl9oZWxwZXJDbGFzc2VzVXNlZCA9IGhlbHBlckNsYXNzZXNVc2VkLAogICAgICAgIHRoaXMuX3J1bnRpbWVUeXBlVXNlcyA9IHJ1bnRpbWVUeXBlVXNlczsKCiAgZmFjdG9yeSBCYWNrZW5kVXNhZ2VJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IGdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlcnM8RnVuY3Rpb25FbnRpdHk+KCkudG9TZXQoKTsKICAgIFNldDxDbGFzc0VudGl0eT4gZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXMgPSBzb3VyY2UucmVhZENsYXNzZXMoKS50b1NldCgpOwogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBoZWxwZXJGdW5jdGlvbnNVc2VkID0KICAgICAgICBzb3VyY2UucmVhZE1lbWJlcnM8RnVuY3Rpb25FbnRpdHk+KCkudG9TZXQoKTsKICAgIFNldDxDbGFzc0VudGl0eT4gaGVscGVyQ2xhc3Nlc1VzZWQgPSBzb3VyY2UucmVhZENsYXNzZXMoKS50b1NldCgpOwogICAgU2V0PFJ1bnRpbWVUeXBlVXNlPiBydW50aW1lVHlwZVVzZXMgPSBzb3VyY2UucmVhZExpc3QoKCkgewogICAgICBSdW50aW1lVHlwZVVzZUtpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShSdW50aW1lVHlwZVVzZUtpbmQudmFsdWVzKTsKICAgICAgRGFydFR5cGUgcmVjZWl2ZXJUeXBlID0gc291cmNlLnJlYWREYXJ0VHlwZSgpOwogICAgICBEYXJ0VHlwZSBhcmd1bWVudFR5cGUgPSBzb3VyY2UucmVhZERhcnRUeXBlKGFsbG93TnVsbDogdHJ1ZSk7CiAgICAgIHJldHVybiBuZXcgUnVudGltZVR5cGVVc2Uoa2luZCwgcmVjZWl2ZXJUeXBlLCBhcmd1bWVudFR5cGUpOwogICAgfSkudG9TZXQoKTsKICAgIGJvb2wgbmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZyA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBuZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCByZXF1aXJlc1ByZWFtYmxlID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBib29sIGlzRnVuY3Rpb25BcHBseVVzZWQgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNNaXJyb3JzVXNlZCA9IHNvdXJjZS5yZWFkQm9vbCgpOwogICAgYm9vbCBpc05vU3VjaE1ldGhvZFVzZWQgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGJvb2wgaXNIdG1sTG9hZGVkID0gc291cmNlLnJlYWRCb29sKCk7CiAgICBzb3VyY2UuZW5kKHRhZyk7CiAgICByZXR1cm4gbmV3IEJhY2tlbmRVc2FnZUltcGwoCiAgICAgICAgZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXM6IGdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzLAogICAgICAgIGdsb2JhbENsYXNzRGVwZW5kZW5jaWVzOiBnbG9iYWxDbGFzc0RlcGVuZGVuY2llcywKICAgICAgICBoZWxwZXJGdW5jdGlvbnNVc2VkOiBoZWxwZXJGdW5jdGlvbnNVc2VkLAogICAgICAgIGhlbHBlckNsYXNzZXNVc2VkOiBoZWxwZXJDbGFzc2VzVXNlZCwKICAgICAgICBydW50aW1lVHlwZVVzZXM6IHJ1bnRpbWVUeXBlVXNlcywKICAgICAgICBuZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnOiBuZWVkVG9Jbml0aWFsaXplSXNvbGF0ZUFmZmluaXR5VGFnLAogICAgICAgIG5lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5OiBuZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSwKICAgICAgICByZXF1aXJlc1ByZWFtYmxlOiByZXF1aXJlc1ByZWFtYmxlLAogICAgICAgIGlzRnVuY3Rpb25BcHBseVVzZWQ6IGlzRnVuY3Rpb25BcHBseVVzZWQsCiAgICAgICAgaXNNaXJyb3JzVXNlZDogaXNNaXJyb3JzVXNlZCwKICAgICAgICBpc05vU3VjaE1ldGhvZFVzZWQ6IGlzTm9TdWNoTWV0aG9kVXNlZCwKICAgICAgICBpc0h0bWxMb2FkZWQ6IGlzSHRtbExvYWRlZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICBzaW5rLmJlZ2luKHRhZyk7CiAgICBzaW5rLndyaXRlTWVtYmVycyhfZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXMpOwogICAgc2luay53cml0ZUNsYXNzZXMoX2dsb2JhbENsYXNzRGVwZW5kZW5jaWVzKTsKICAgIHNpbmsud3JpdGVNZW1iZXJzKF9oZWxwZXJGdW5jdGlvbnNVc2VkKTsKICAgIHNpbmsud3JpdGVDbGFzc2VzKF9oZWxwZXJDbGFzc2VzVXNlZCk7CiAgICBzaW5rLndyaXRlTGlzdChydW50aW1lVHlwZVVzZXMsIChSdW50aW1lVHlwZVVzZSBydW50aW1lVHlwZVVzZSkgewogICAgICBzaW5rLndyaXRlRW51bShydW50aW1lVHlwZVVzZS5raW5kKTsKICAgICAgc2luay53cml0ZURhcnRUeXBlKHJ1bnRpbWVUeXBlVXNlLnJlY2VpdmVyVHlwZSk7CiAgICAgIHNpbmsud3JpdGVEYXJ0VHlwZShydW50aW1lVHlwZVVzZS5hcmd1bWVudFR5cGUsIGFsbG93TnVsbDogdHJ1ZSk7CiAgICB9KTsKICAgIHNpbmsud3JpdGVCb29sKG5lZWRUb0luaXRpYWxpemVJc29sYXRlQWZmaW5pdHlUYWcpOwogICAgc2luay53cml0ZUJvb2wobmVlZFRvSW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHkpOwogICAgc2luay53cml0ZUJvb2wocmVxdWlyZXNQcmVhbWJsZSk7CiAgICBzaW5rLndyaXRlQm9vbChpc0Z1bmN0aW9uQXBwbHlVc2VkKTsKICAgIHNpbmsud3JpdGVCb29sKGlzTWlycm9yc1VzZWQpOwogICAgc2luay53cml0ZUJvb2woaXNOb1N1Y2hNZXRob2RVc2VkKTsKICAgIHNpbmsud3JpdGVCb29sKGlzSHRtbExvYWRlZCk7CiAgICBzaW5rLmVuZCh0YWcpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1bmN0aW9uVXNlZEJ5QmFja2VuZChGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICByZXR1cm4gX2hlbHBlckZ1bmN0aW9uc1VzZWQuY29udGFpbnMoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRmllbGRVc2VkQnlCYWNrZW5kKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBfaGVscGVyQ2xhc3Nlc1VzZWQuY29udGFpbnMoZWxlbWVudC5lbmNsb3NpbmdDbGFzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxGdW5jdGlvbkVudGl0eT4gZ2V0IGdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzID0+CiAgICAgIF9nbG9iYWxGdW5jdGlvbkRlcGVuZGVuY2llcyA/PyBjb25zdCA8RnVuY3Rpb25FbnRpdHk+W107CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgZ2xvYmFsQ2xhc3NEZXBlbmRlbmNpZXMgPT4KICAgICAgX2dsb2JhbENsYXNzRGVwZW5kZW5jaWVzID8/IGNvbnN0IDxDbGFzc0VudGl0eT5bXTsKCiAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGdldCBoZWxwZXJGdW5jdGlvbnNVc2VkID0+IF9oZWxwZXJGdW5jdGlvbnNVc2VkOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGhlbHBlckNsYXNzZXNVc2VkID0+IF9oZWxwZXJDbGFzc2VzVXNlZDsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNSdW50aW1lVHlwZVVzZWQgPT4gX3J1bnRpbWVUeXBlVXNlcy5pc05vdEVtcHR5OwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxSdW50aW1lVHlwZVVzZT4gZ2V0IHJ1bnRpbWVUeXBlVXNlcyA9PiBfcnVudGltZVR5cGVVc2VzOwp9CoG4AE5OPAEZIiQhJCsuIygeAR46PysBMCcBKykBRzgBTxYyATsBNQEvATABUB0BLh4BKiABMhoBKB8BKz4ZAgElTEBFRwxLPTsBTU9LP0tENQFBOwEwOgEwASU+ASocASgbASsfARgCAT8mNTYwATBOATBGAUoBNDIBUCEBDCQBMh4BDCMBHQEzAUsBDDw5RycEAQw2OUclBAFDLk0xP0UTDRQGBAEoKEE8RkwTRzlMEzc2Njs0MisTBhIEATggKRQxBgQBTyIUKgYEAQw7QSErBkEhOwZOOQZBKQY7OQZEKQY9GT40EUA2EQgGBAEMMUEyQx9AIkMcBgQBDEIdL0IGLgQBDDwdLDwGKwQBDD8qBAEMIBkEAQwZIUE7My9RTSwrMiYwJQQCATFGHS0BNTkzAS4yATItAS4BDCsMKQEMHwEMIgEMHAEMIQEMGwEUNzAvKi8tHSsgGh8aR0E5NTEBQxc1Nk0uNkc/TDVEQxBBPy8yLDErFSFAOjIuKlBMLDImMCUEAQwoFTQxLStGKzdICDg2JikjKCITBAEMOTMEAQwzQAQBDD0/AQw3OQFMAQxFAQw9AQxEAgEycGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9iYWNrZW5kX3VzYWdlLmRhcnRBc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9yZXNvbHV0aW9uX2xpc3RlbmVyLmRhcnTAAEvwLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5iYWNrZW5kLnJlc29sdXRpb25fbGlzdGVuZXI7CgppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IElkZW50aWZpZXJzOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEtDb21tb25FbGVtZW50cywgS0VsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vZW5xdWV1ZS5kYXJ0JyBzaG93IEVucXVldWVyLCBFbnF1ZXVlckxpc3RlbmVyOwppbXBvcnQgJy4uL25hdGl2ZS9lbnF1ZXVlLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCcgc2hvdyBDb21waWxlck9wdGlvbnM7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCcgc2hvdyBDYWxsU3RydWN0dXJlOwppbXBvcnQgJy4uL3VuaXZlcnNlL3VzZS5kYXJ0JyBzaG93IFN0YXRpY1VzZSwgVHlwZVVzZTsKaW1wb3J0ICcuLi91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydCcKICAgIHNob3cgV29ybGRJbXBhY3QsIFdvcmxkSW1wYWN0QnVpbGRlciwgV29ybGRJbXBhY3RCdWlsZGVySW1wbDsKaW1wb3J0ICdmaWVsZF9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICdiYWNrZW5kX2ltcGFjdC5kYXJ0JzsKaW1wb3J0ICdiYWNrZW5kX3VzYWdlLmRhcnQnOwppbXBvcnQgJ2NoZWNrZWRfbW9kZV9oZWxwZXJzLmRhcnQnOwppbXBvcnQgJ2N1c3RvbV9lbGVtZW50c19hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICdpbnRlcmNlcHRvcl9kYXRhLmRhcnQnOwppbXBvcnQgJ25hdGl2ZV9kYXRhLmRhcnQnIHNob3cgTmF0aXZlQmFzaWNEYXRhOwppbXBvcnQgJ25vX3N1Y2hfbWV0aG9kX3JlZ2lzdHJ5LmRhcnQnOwoKY2xhc3MgUmVzb2x1dGlvbkVucXVldWVyTGlzdGVuZXIgZXh0ZW5kcyBFbnF1ZXVlckxpc3RlbmVyIHsKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCB0aGUgbmVlZCBmb3IgdGhpcy4KICBmaW5hbCBEZWZlcnJlZExvYWRUYXNrIF9kZWZlcnJlZExvYWRUYXNrOwoKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgS0VsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIEtDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgQmFja2VuZEltcGFjdHMgX2ltcGFjdHM7CgogIGZpbmFsIE5hdGl2ZUJhc2ljRGF0YSBfbmF0aXZlRGF0YTsKICBmaW5hbCBJbnRlcmNlcHRvckRhdGFCdWlsZGVyIF9pbnRlcmNlcHRvckRhdGE7CiAgZmluYWwgQmFja2VuZFVzYWdlQnVpbGRlciBfYmFja2VuZFVzYWdlOwoKICBmaW5hbCBOb1N1Y2hNZXRob2RSZWdpc3RyeSBfbm9TdWNoTWV0aG9kUmVnaXN0cnk7CiAgZmluYWwgQ3VzdG9tRWxlbWVudHNSZXNvbHV0aW9uQW5hbHlzaXMgX2N1c3RvbUVsZW1lbnRzQW5hbHlzaXM7CgogIGZpbmFsIE5hdGl2ZVJlc29sdXRpb25FbnF1ZXVlciBfbmF0aXZlRW5xdWV1ZXI7CiAgZmluYWwgS0ZpZWxkQW5hbHlzaXMgX2ZpZWxkQW5hbHlzaXM7CgogIC8vLyBUcnVlIHdoZW4gd2UgZW5xdWV1ZSB0aGUgbG9hZExpYnJhcnkgY29kZS4KICBib29sIF9pc0xvYWRMaWJyYXJ5RnVuY3Rpb25SZXNvbHZlZCA9IGZhbHNlOwoKICBSZXNvbHV0aW9uRW5xdWV1ZXJMaXN0ZW5lcigKICAgICAgdGhpcy5fb3B0aW9ucywKICAgICAgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LAogICAgICB0aGlzLl9jb21tb25FbGVtZW50cywKICAgICAgdGhpcy5faW1wYWN0cywKICAgICAgdGhpcy5fbmF0aXZlRGF0YSwKICAgICAgdGhpcy5faW50ZXJjZXB0b3JEYXRhLAogICAgICB0aGlzLl9iYWNrZW5kVXNhZ2UsCiAgICAgIHRoaXMuX25vU3VjaE1ldGhvZFJlZ2lzdHJ5LAogICAgICB0aGlzLl9jdXN0b21FbGVtZW50c0FuYWx5c2lzLAogICAgICB0aGlzLl9uYXRpdmVFbnF1ZXVlciwKICAgICAgdGhpcy5fZmllbGRBbmFseXNpcywKICAgICAgdGhpcy5fZGVmZXJyZWRMb2FkVGFzayk7CgogIHZvaWQgX3JlZ2lzdGVyQmFja2VuZEltcGFjdCgKICAgICAgV29ybGRJbXBhY3RCdWlsZGVyIGJ1aWxkZXIsIEJhY2tlbmRJbXBhY3QgaW1wYWN0KSB7CiAgICBpbXBhY3QucmVnaXN0ZXJJbXBhY3QoYnVpbGRlciwgX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgICBfYmFja2VuZFVzYWdlLnByb2Nlc3NCYWNrZW5kSW1wYWN0KGltcGFjdCk7CiAgfQoKICB2b2lkIF9hZGRJbnRlcmNlcHRvcnMoQ2xhc3NFbnRpdHkgY2xzLCBXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlcikgewogICAgX2ludGVyY2VwdG9yRGF0YS5hZGRJbnRlcmNlcHRvcnMoY2xzKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJUeXBlVXNlKAogICAgICAgIG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24oX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRSYXdUeXBlKGNscykpKTsKICAgIF9iYWNrZW5kVXNhZ2UucmVnaXN0ZXJCYWNrZW5kQ2xhc3NVc2UoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIFdvcmxkSW1wYWN0IHJlZ2lzdGVyQ2xvc3VyaXplZE1lbWJlcihGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIGltcGFjdEJ1aWxkZXIgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgX2JhY2tlbmRVc2FnZS5wcm9jZXNzQmFja2VuZEltcGFjdChfaW1wYWN0cy5tZW1iZXJDbG9zdXJlKTsKICAgIGltcGFjdEJ1aWxkZXIKICAgICAgICAuYWRkSW1wYWN0KF9pbXBhY3RzLm1lbWJlckNsb3N1cmUuY3JlYXRlSW1wYWN0KF9lbGVtZW50RW52aXJvbm1lbnQpKTsKICAgIEZ1bmN0aW9uVHlwZSB0eXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoZWxlbWVudCk7CiAgICBpZiAodHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpIHsKICAgICAgaW1wYWN0QnVpbGRlci5hZGRJbXBhY3QoX3JlZ2lzdGVyQ29tcHV0ZVNpZ25hdHVyZSgpKTsKICAgIH0KICAgIHJldHVybiBpbXBhY3RCdWlsZGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgcmVnaXN0ZXJHZXRPZlN0YXRpY0Z1bmN0aW9uKCkgewogICAgX2JhY2tlbmRVc2FnZS5wcm9jZXNzQmFja2VuZEltcGFjdChfaW1wYWN0cy5zdGF0aWNDbG9zdXJlKTsKICAgIHJldHVybiBfaW1wYWN0cy5zdGF0aWNDbG9zdXJlLmNyZWF0ZUltcGFjdChfZWxlbWVudEVudmlyb25tZW50KTsKICB9CgogIFdvcmxkSW1wYWN0IF9yZWdpc3RlckNvbXB1dGVTaWduYXR1cmUoKSB7CiAgICBfYmFja2VuZFVzYWdlLnByb2Nlc3NCYWNrZW5kSW1wYWN0KF9pbXBhY3RzLmNvbXB1dGVTaWduYXR1cmUpOwogICAgcmV0dXJuIF9pbXBhY3RzLmNvbXB1dGVTaWduYXR1cmUuY3JlYXRlSW1wYWN0KF9lbGVtZW50RW52aXJvbm1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlckluc3RhbnRpYXRlZFR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlLAogICAgICB7Ym9vbCBpc0dsb2JhbDogZmFsc2UsIGJvb2wgbmF0aXZlVXNhZ2U6IGZhbHNlfSkgewogICAgaWYgKGlzR2xvYmFsKSB7CiAgICAgIF9iYWNrZW5kVXNhZ2UucmVnaXN0ZXJHbG9iYWxDbGFzc0RlcGVuZGVuY3kodHlwZS5lbGVtZW50KTsKICAgIH0KICAgIGlmIChuYXRpdmVVc2FnZSkgewogICAgICBfbmF0aXZlRW5xdWV1ZXIub25JbnN0YW50aWF0ZWRUeXBlKHR5cGUpOwogICAgfQogIH0KCiAgLy8vIENvbXB1dGVzIHRoZSBbV29ybGRJbXBhY3RdIG9mIGNhbGxpbmcgW21haW5NZXRob2RdIGFzIHRoZSBlbnRyeSBwb2ludC4KICBXb3JsZEltcGFjdCBfY29tcHV0ZU1haW5JbXBhY3QoRnVuY3Rpb25FbnRpdHkgbWFpbk1ldGhvZCkgewogICAgV29ybGRJbXBhY3RCdWlsZGVySW1wbCBtYWluSW1wYWN0ID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG1haW5NZXRob2QucGFyYW1ldGVyU3RydWN0dXJlLmNhbGxTdHJ1Y3R1cmU7CiAgICBpZiAoY2FsbFN0cnVjdHVyZS5hcmd1bWVudENvdW50ID4gMCkgewogICAgICBfaW1wYWN0cy5tYWluV2l0aEFyZ3VtZW50cwogICAgICAgICAgLnJlZ2lzdGVySW1wYWN0KG1haW5JbXBhY3QsIF9lbGVtZW50RW52aXJvbm1lbnQpOwogICAgICBfYmFja2VuZFVzYWdlLnByb2Nlc3NCYWNrZW5kSW1wYWN0KF9pbXBhY3RzLm1haW5XaXRoQXJndW1lbnRzKTsKICAgICAgbWFpbkltcGFjdC5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICAgIG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKG1haW5NZXRob2QsIGNhbGxTdHJ1Y3R1cmUpKTsKICAgIH0KICAgIGlmIChtYWluTWV0aG9kLmlzR2V0dGVyKSB7CiAgICAgIG1haW5JbXBhY3QucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNHZXQobWFpbk1ldGhvZCkpOwogICAgfSBlbHNlIHsKICAgICAgbWFpbkltcGFjdC5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICAgIG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKG1haW5NZXRob2QsIENhbGxTdHJ1Y3R1cmUuTk9fQVJHUykpOwogICAgfQogICAgcmV0dXJuIG1haW5JbXBhY3Q7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgW1dvcmxkSW1wYWN0XSBvZiBlbmFibGluZyBkZWZlcnJlZCBsb2FkaW5nLgogIFdvcmxkSW1wYWN0IF9jb21wdXRlRGVmZXJyZWRMb2FkaW5nSW1wYWN0KCkgewogICAgX2JhY2tlbmRVc2FnZS5wcm9jZXNzQmFja2VuZEltcGFjdChfaW1wYWN0cy5kZWZlcnJlZExvYWRpbmcpOwogICAgcmV0dXJuIF9pbXBhY3RzLmRlZmVycmVkTG9hZGluZy5jcmVhdGVJbXBhY3QoX2VsZW1lbnRFbnZpcm9ubWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIG9uUXVldWVPcGVuKAogICAgICBFbnF1ZXVlciBlbnF1ZXVlciwgRnVuY3Rpb25FbnRpdHkgbWFpbk1ldGhvZCwgSXRlcmFibGU8VXJpPiBsaWJyYXJpZXMpIHsKICAgIGlmIChfZGVmZXJyZWRMb2FkVGFzay5pc1Byb2dyYW1TcGxpdCkgewogICAgICBlbnF1ZXVlci5hcHBseUltcGFjdChfY29tcHV0ZURlZmVycmVkTG9hZGluZ0ltcGFjdCgpLAogICAgICAgICAgaW1wYWN0U291cmNlOiAnZGVmZXJyZWQgbG9hZCcpOwogICAgfQogICAgZW5xdWV1ZXIuYXBwbHlJbXBhY3QoX25hdGl2ZUVucXVldWVyLnByb2Nlc3NOYXRpdmVDbGFzc2VzKGxpYnJhcmllcyksCiAgICAgICAgaW1wYWN0U291cmNlOiAnbmF0aXZlIGNsYXNzZXMnKTsKICAgIGlmIChtYWluTWV0aG9kICE9IG51bGwpIHsKICAgICAgZW5xdWV1ZXIuYXBwbHlJbXBhY3QoX2NvbXB1dGVNYWluSW1wYWN0KG1haW5NZXRob2QpLAogICAgICAgICAgaW1wYWN0U291cmNlOiAnbWFpbiBpbXBhY3QnKTsKICAgIH0KICAgIC8vIEVsZW1lbnRzIHJlcXVpcmVkIGJ5IGVucXVldWVIZWxwZXJzIGFyZSBnbG9iYWwgZGVwZW5kZW5jaWVzCiAgICAvLyB0aGF0IGFyZSBub3QgcHVsbGVkIGluIGJ5IGEgcGFydGljdWxhciBlbGVtZW50LgogICAgZW5xdWV1ZXIuYXBwbHlJbXBhY3QoY29tcHV0ZUhlbHBlcnNJbXBhY3QoKSwgaW1wYWN0U291cmNlOiAnaGVscGVycycpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvblF1ZXVlRW1wdHkoRW5xdWV1ZXIgZW5xdWV1ZXIsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiByZWNlbnRDbGFzc2VzKSB7CiAgICAvLyBBZGQgZWxlbWVudHMgdXNlZCBzeW50aGV0aWNhbGx5LCB0aGF0IGlzLCB0aHJvdWdoIGZlYXR1cmVzIHJhdGhlciB0aGFuCiAgICAvLyBzeW50YXgsIGZvciBpbnN0YW5jZSBjdXN0b20gZWxlbWVudHMuCiAgICAvLwogICAgLy8gUmV0dXJuIGVhcmx5IGlmIGFueSBlbGVtZW50cyBhcmUgYWRkZWQgdG8gYXZvaWQgY291bnRpbmcgdGhlIGVsZW1lbnRzIGFzCiAgICAvLyBkdWUgdG8gbWlycm9ycy4KICAgIGVucXVldWVyLmFwcGx5SW1wYWN0KF9jdXN0b21FbGVtZW50c0FuYWx5c2lzLmZsdXNoKCksCiAgICAgICAgaW1wYWN0U291cmNlOiBfY3VzdG9tRWxlbWVudHNBbmFseXNpcyk7CgogICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gcmVjZW50Q2xhc3NlcykgewogICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCA9IF9lbGVtZW50RW52aXJvbm1lbnQubG9va3VwTG9jYWxDbGFzc01lbWJlcigKICAgICAgICAgIGNscywgSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyk7CiAgICAgIGlmIChlbGVtZW50ICE9IG51bGwgJiYKICAgICAgICAgIGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlciAmJgogICAgICAgICAgZWxlbWVudC5pc0Z1bmN0aW9uICYmCiAgICAgICAgICAhZWxlbWVudC5pc0Fic3RyYWN0KSB7CiAgICAgICAgX25vU3VjaE1ldGhvZFJlZ2lzdHJ5LnJlZ2lzdGVyTm9TdWNoTWV0aG9kKGVsZW1lbnQpOwogICAgICB9CiAgICB9CiAgICBfbm9TdWNoTWV0aG9kUmVnaXN0cnkub25RdWV1ZUVtcHR5KCk7CiAgICBpZiAoIV9iYWNrZW5kVXNhZ2UuaXNOb1N1Y2hNZXRob2RVc2VkICYmCiAgICAgICAgKF9ub1N1Y2hNZXRob2RSZWdpc3RyeS5oYXNUaHJvd2luZ05vU3VjaE1ldGhvZCB8fAogICAgICAgICAgICBfbm9TdWNoTWV0aG9kUmVnaXN0cnkuaGFzQ29tcGxleE5vU3VjaE1ldGhvZCkpIHsKICAgICAgX2JhY2tlbmRVc2FnZS5wcm9jZXNzQmFja2VuZEltcGFjdChfaW1wYWN0cy5ub1N1Y2hNZXRob2RTdXBwb3J0KTsKICAgICAgZW5xdWV1ZXIuYXBwbHlJbXBhY3QoCiAgICAgICAgICBfaW1wYWN0cy5ub1N1Y2hNZXRob2RTdXBwb3J0LmNyZWF0ZUltcGFjdChfZWxlbWVudEVudmlyb25tZW50KSk7CiAgICAgIF9iYWNrZW5kVXNhZ2UuaXNOb1N1Y2hNZXRob2RVc2VkID0gdHJ1ZTsKICAgIH0KCiAgICBpZiAoIWVucXVldWVyLnF1ZXVlSXNFbXB0eSkgcmV0dXJuIGZhbHNlOwoKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBvblF1ZXVlQ2xvc2VkKCkge30KCiAgLy8vIEFkZHMgdGhlIGltcGFjdCBvZiBbY29uc3RhbnRdIHRvIFtpbXBhY3RCdWlsZGVyXS4KICB2b2lkIF9jb21wdXRlSW1wYWN0Rm9yQ29tcGlsZVRpbWVDb25zdGFudCgKICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgV29ybGRJbXBhY3RCdWlsZGVyIGltcGFjdEJ1aWxkZXIpIHsKICAgIF9jb21wdXRlSW1wYWN0Rm9yQ29tcGlsZVRpbWVDb25zdGFudEludGVybmFsKGNvbnN0YW50LCBpbXBhY3RCdWlsZGVyKTsKCiAgICBmb3IgKENvbnN0YW50VmFsdWUgZGVwZW5kZW5jeSBpbiBjb25zdGFudC5nZXREZXBlbmRlbmNpZXMoKSkgewogICAgICBfY29tcHV0ZUltcGFjdEZvckNvbXBpbGVUaW1lQ29uc3RhbnQoZGVwZW5kZW5jeSwgaW1wYWN0QnVpbGRlcik7CiAgICB9CiAgfQoKICB2b2lkIF9jb21wdXRlSW1wYWN0Rm9yQ29tcGlsZVRpbWVDb25zdGFudEludGVybmFsKAogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50LCBXb3JsZEltcGFjdEJ1aWxkZXIgaW1wYWN0QnVpbGRlcikgewogICAgRGFydFR5cGUgdHlwZSA9IGNvbnN0YW50LmdldFR5cGUoX2NvbW1vbkVsZW1lbnRzKTsKICAgIF9jb21wdXRlSW1wYWN0Rm9ySW5zdGFudGlhdGVkQ29uc3RhbnRUeXBlKHR5cGUsIGltcGFjdEJ1aWxkZXIpOwoKICAgIGlmIChjb25zdGFudC5pc0Z1bmN0aW9uKSB7CiAgICAgIEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBmdW5jdGlvbiA9IGNvbnN0YW50OwogICAgICBpbXBhY3RCdWlsZGVyCiAgICAgICAgICAucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNUZWFyT2ZmKGZ1bmN0aW9uLmVsZW1lbnQpKTsKICAgIH0gZWxzZSBpZiAoY29uc3RhbnQuaXNJbnRlcmNlcHRvcikgewogICAgICAvLyBBbiBpbnRlcmNlcHRvciBjb25zdGFudCByZWZlcmVuY2VzIHRoZSBjbGFzcydzIHByb3RvdHlwZSBjaGFpbi4KICAgICAgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGludGVyY2VwdG9yID0gY29uc3RhbnQ7CiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoaW50ZXJjZXB0b3IuY2xzKTsKICAgICAgX2NvbXB1dGVJbXBhY3RGb3JJbnN0YW50aWF0ZWRDb25zdGFudFR5cGUodHlwZSwgaW1wYWN0QnVpbGRlcik7CiAgICB9IGVsc2UgaWYgKGNvbnN0YW50LmlzVHlwZSkgewogICAgICBGdW5jdGlvbkVudGl0eSBoZWxwZXIgPSBfY29tbW9uRWxlbWVudHMuY3JlYXRlUnVudGltZVR5cGU7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgICBoZWxwZXIsIGhlbHBlci5wYXJhbWV0ZXJTdHJ1Y3R1cmUuY2FsbFN0cnVjdHVyZSkpOwogICAgICBfYmFja2VuZFVzYWdlLnJlZ2lzdGVyQmFja2VuZEZ1bmN0aW9uVXNlKGhlbHBlcik7CiAgICAgIGltcGFjdEJ1aWxkZXIKICAgICAgICAgIC5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaW5zdGFudGlhdGlvbihfY29tbW9uRWxlbWVudHMudHlwZVR5cGUpKTsKICAgIH0KICB9CgogIHZvaWQgX2NvbXB1dGVJbXBhY3RGb3JJbnN0YW50aWF0ZWRDb25zdGFudFR5cGUoCiAgICAgIERhcnRUeXBlIHR5cGUsIFdvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyKSB7CiAgICBpZiAodHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24odHlwZSkpOwogICAgICBpZiAodHlwZS5lbGVtZW50ID09IF9jb21tb25FbGVtZW50cy50eXBlTGl0ZXJhbENsYXNzKSB7CiAgICAgICAgLy8gSWYgd2UgdXNlIGEgdHlwZSBsaXRlcmFsIGluIGEgY29uc3RhbnQsIHRoZSBjb21waWxlIHRpbWUKICAgICAgICAvLyBjb25zdGFudCBlbWl0dGVyIHdpbGwgZ2VuZXJhdGUgYSBjYWxsIHRvIHRoZSBjcmVhdGVSdW50aW1lVHlwZQogICAgICAgIC8vIGhlbHBlciBzbyB3ZSByZWdpc3RlciBhIHVzZSBvZiB0aGF0LgogICAgICAgIEZ1bmN0aW9uRW50aXR5IGhlbHBlciA9IF9jb21tb25FbGVtZW50cy5jcmVhdGVSdW50aW1lVHlwZTsKICAgICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgICAgICBoZWxwZXIsIGhlbHBlci5wYXJhbWV0ZXJTdHJ1Y3R1cmUuY2FsbFN0cnVjdHVyZSkpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBXb3JsZEltcGFjdCByZWdpc3RlclVzZWRDb25zdGFudChDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIGltcGFjdEJ1aWxkZXIgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgX2NvbXB1dGVJbXBhY3RGb3JDb21waWxlVGltZUNvbnN0YW50KGNvbnN0YW50LCBpbXBhY3RCdWlsZGVyKTsKICAgIHJldHVybiBpbXBhY3RCdWlsZGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgcmVnaXN0ZXJVc2VkRWxlbWVudChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIHdvcmxkSW1wYWN0ID0gbmV3IFdvcmxkSW1wYWN0QnVpbGRlckltcGwoKTsKICAgIF9jdXN0b21FbGVtZW50c0FuYWx5c2lzLnJlZ2lzdGVyU3RhdGljVXNlKG1lbWJlcik7CgogICAgaWYgKG1lbWJlci5pc0Z1bmN0aW9uKSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gbWVtYmVyOwogICAgICBpZiAoZnVuY3Rpb24uaXNFeHRlcm5hbCkgewogICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPQogICAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShmdW5jdGlvbik7CgogICAgICAgIHZhciBhbGxQYXJhbWV0ZXJUeXBlcyA9IDxEYXJ0VHlwZT5bXQogICAgICAgICAgLi5hZGRBbGwoZnVuY3Rpb25UeXBlLnBhcmFtZXRlclR5cGVzKQogICAgICAgICAgLi5hZGRBbGwoZnVuY3Rpb25UeXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMpCiAgICAgICAgICAuLmFkZEFsbChmdW5jdGlvblR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcyk7CiAgICAgICAgZm9yICh2YXIgdHlwZSBpbiBhbGxQYXJhbWV0ZXJUeXBlcykgewogICAgICAgICAgaWYgKHR5cGUuaXNGdW5jdGlvblR5cGUgfHwgdHlwZS5pc1R5cGVkZWYpIHsKICAgICAgICAgICAgdmFyIGNsb3N1cmVDb252ZXJ0ZXIgPSBfY29tbW9uRWxlbWVudHMuY2xvc3VyZUNvbnZlcnRlcjsKICAgICAgICAgICAgd29ybGRJbXBhY3QucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgICAgICAgICBuZXcgU3RhdGljVXNlLmltcGxpY2l0SW52b2tlKGNsb3N1cmVDb252ZXJ0ZXIpKTsKICAgICAgICAgICAgX2JhY2tlbmRVc2FnZS5yZWdpc3RlckJhY2tlbmRGdW5jdGlvblVzZShjbG9zdXJlQ29udmVydGVyKTsKICAgICAgICAgICAgX2JhY2tlbmRVc2FnZS5yZWdpc3Rlckdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jeShjbG9zdXJlQ29udmVydGVyKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChmdW5jdGlvbi5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gZnVuY3Rpb24uZW5jbG9zaW5nQ2xhc3M7CgogICAgICAgIGlmIChmdW5jdGlvbi5uYW1lID09IElkZW50aWZpZXJzLmNhbGwgJiYKICAgICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5pc0dlbmVyaWNDbGFzcyhjbHMpKSB7CiAgICAgICAgICB3b3JsZEltcGFjdC5hZGRJbXBhY3QoX3JlZ2lzdGVyQ29tcHV0ZVNpZ25hdHVyZSgpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIF9iYWNrZW5kVXNhZ2UucmVnaXN0ZXJVc2VkTWVtYmVyKG1lbWJlcik7CgogICAgaWYgKF9jb21tb25FbGVtZW50cy5pc0NyZWF0ZUludm9jYXRpb25NaXJyb3JIZWxwZXIobWVtYmVyKSkgewogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KHdvcmxkSW1wYWN0LCBfaW1wYWN0cy5ub1N1Y2hNZXRob2RTdXBwb3J0KTsKICAgIH0KCiAgICBpZiAoX2VsZW1lbnRFbnZpcm9ubWVudC5pc0RlZmVycmVkTG9hZExpYnJhcnlHZXR0ZXIobWVtYmVyKSkgewogICAgICAvLyBUT0RPKHNpZ3VyZG0pOiBDcmVhdGUgYSBmdW5jdGlvbiByZWdpc3RlckxvYWRMaWJyYXJ5QWNjZXNzLgogICAgICBpZiAoIV9pc0xvYWRMaWJyYXJ5RnVuY3Rpb25SZXNvbHZlZCkgewogICAgICAgIF9pc0xvYWRMaWJyYXJ5RnVuY3Rpb25SZXNvbHZlZCA9IHRydWU7CiAgICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdCh3b3JsZEltcGFjdCwgX2ltcGFjdHMubG9hZExpYnJhcnkpOwogICAgICB9CiAgICB9CgogICAgaWYgKG1lbWJlci5pc0dldHRlciAmJiBtZW1iZXIubmFtZSA9PSBJZGVudGlmaWVycy5ydW50aW1lVHlwZV8pIHsKICAgICAgLy8gRW5hYmxlIHJ1bnRpbWUgdHlwZSBzdXBwb3J0IGlmIHdlIGRpc2NvdmVyIGEgZ2V0dGVyIGNhbGxlZAogICAgICAvLyBydW50aW1lVHlwZS4gV2UgaGF2ZSB0byBlbmFibGUgcnVudGltZSB0eXBlIGJlZm9yZSBoaXR0aW5nIHRoZQogICAgICAvLyBjb2RlZ2VuLCBzbyB0aGF0IGNvbnN0cnVjdG9ycyBrbm93IHdoZXRoZXIgdGhleSBuZWVkIHRvIGdlbmVyYXRlIGNvZGUKICAgICAgLy8gZm9yIHJ1bnRpbWUgdHlwZS4KICAgICAgLy8gVE9ETyhhaGUpOiBSZWNvcmQgcHJlY2lzZSBkZXBlbmRlbmN5IGhlcmUuCiAgICAgIHdvcmxkSW1wYWN0LmFkZEltcGFjdChfcmVnaXN0ZXJSdW50aW1lVHlwZSgpKTsKICAgIH0KCiAgICByZXR1cm4gd29ybGRJbXBhY3Q7CiAgfQoKICAvLy8gQ2FsbGVkIHRvIHJlZ2lzdGVyIHRoYXQgdGhlIGBydW50aW1lVHlwZWAgcHJvcGVydHkgaGFzIGJlZW4gYWNjZXNzZWQuIEFueQogIC8vLyBiYWNrZW5kIHNwZWNpZmljIFtXb3JsZEltcGFjdF0gb2YgdGhpcyBpcyByZXR1cm5lZC4KICBXb3JsZEltcGFjdCBfcmVnaXN0ZXJSdW50aW1lVHlwZSgpIHsKICAgIF9iYWNrZW5kVXNhZ2UucHJvY2Vzc0JhY2tlbmRJbXBhY3QoX2ltcGFjdHMucnVudGltZVR5cGVTdXBwb3J0KTsKICAgIHJldHVybiBfaW1wYWN0cy5ydW50aW1lVHlwZVN1cHBvcnQuY3JlYXRlSW1wYWN0KF9lbGVtZW50RW52aXJvbm1lbnQpOwogIH0KCiAgV29ybGRJbXBhY3QgX3Byb2Nlc3NDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIFdvcmxkSW1wYWN0QnVpbGRlckltcGwgaW1wYWN0QnVpbGRlciA9IG5ldyBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsKCk7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBFeHRyYWN0IGFuIGBpbXBsZW1lbnRhdGlvbkNsYXNzZXNPZiguLi4pYCBmdW5jdGlvbgogICAgLy8gZm9yIHRoZXNlIGludG8gW0NvbW1vbkVsZW1lbnRzXSBvciBbQmFja2VuZEltcGFjdHNdLgogICAgLy8gUmVnaXN0ZXIgYW55IGhlbHBlciB0aGF0IHdpbGwgYmUgbmVlZGVkIGJ5IHRoZSBiYWNrZW5kLgogICAgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuaW50Q2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmRvdWJsZUNsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5udW1DbGFzcykgewogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLm51bUNsYXNzZXMpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3MpIHsKICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy5saXN0T3JTdHJpbmdDbGFzc2VzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5mdW5jdGlvbkNsYXNzKSB7CiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMuZnVuY3Rpb25DbGFzcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMubWFwQ2xhc3MpIHsKICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy5tYXBDbGFzcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuc2V0Q2xhc3MpIHsKICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy5zZXRDbGFzcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuYm91bmRDbG9zdXJlQ2xhc3MpIHsKICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy5ib3VuZENsb3N1cmVDbGFzcyk7CiAgICB9IGVsc2UgaWYgKF9uYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGNscykpIHsKICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy5uYXRpdmVPckV4dGVuZHNDbGFzcyk7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMubWFwTGl0ZXJhbENsYXNzKSB7CiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMubWFwTGl0ZXJhbENsYXNzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5zZXRMaXRlcmFsQ2xhc3MpIHsKICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy5zZXRMaXRlcmFsQ2xhc3MpOwogICAgfQogICAgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuY2xvc3VyZUNsYXNzKSB7CiAgICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoaW1wYWN0QnVpbGRlciwgX2ltcGFjdHMuY2xvc3VyZUNsYXNzKTsKICAgIH0KICAgIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzKSB7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc0ZpeGVkQXJyYXlDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNFeHRlbmRhYmxlQXJyYXlDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNVbm1vZGlmaWFibGVBcnJheUNsYXNzKSB7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzTXV0YWJsZUFycmF5Q2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc0ZpeGVkQXJyYXlDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzRXh0ZW5kYWJsZUFycmF5Q2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLmxpc3RDbGFzc2VzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5pbnRDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcykgewogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc0ludENsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNQb3NpdGl2ZUludENsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNVSW50MzJDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzVUludDMxQ2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5kb3VibGVDbGFzcyB8fAogICAgICAgIGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcykgewogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNOdW1iZXJDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuYm9vbENsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc0Jvb2xDbGFzcykgewogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc0Jvb2xDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMubnVsbENsYXNzIHx8CiAgICAgICAgY2xzID09IF9jb21tb25FbGVtZW50cy5qc051bGxDbGFzcykgewogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc051bGxDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMubnVtQ2xhc3MgfHwKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MpIHsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzUG9zaXRpdmVJbnRDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzVUludDMyQ2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc1VJbnQzMUNsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgICAgX2FkZEludGVyY2VwdG9ycyhfY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3MsIGltcGFjdEJ1aWxkZXIpOwogICAgfSBlbHNlIGlmIChjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLmpzSmF2YVNjcmlwdE9iamVjdENsYXNzKSB7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoX2NvbW1vbkVsZW1lbnRzLmpzSmF2YVNjcmlwdE9iamVjdENsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5qc1BsYWluSmF2YVNjcmlwdE9iamVjdENsYXNzKSB7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMuanNQbGFpbkphdmFTY3JpcHRPYmplY3RDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICB9IGVsc2UgaWYgKGNscyA9PSBfY29tbW9uRWxlbWVudHMuanNVbmtub3duSmF2YVNjcmlwdE9iamVjdENsYXNzKSB7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMuanNVbmtub3duSmF2YVNjcmlwdE9iamVjdENsYXNzLCBpbXBhY3RCdWlsZGVyKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzKSB7CiAgICAgIF9hZGRJbnRlcmNlcHRvcnMoCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0RnVuY3Rpb25DbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICB9IGVsc2UgaWYgKF9uYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGNscykpIHsKICAgICAgX2ludGVyY2VwdG9yRGF0YS5hZGRJbnRlcmNlcHRvcnNGb3JOYXRpdmVDbGFzc01lbWJlcnMoY2xzKTsKICAgIH0gZWxzZSBpZiAoY2xzID09IF9jb21tb25FbGVtZW50cy5qc0luZGV4aW5nQmVoYXZpb3JJbnRlcmZhY2UpIHsKICAgICAgX3JlZ2lzdGVyQmFja2VuZEltcGFjdChpbXBhY3RCdWlsZGVyLCBfaW1wYWN0cy5qc0luZGV4aW5nQmVoYXZpb3IpOwogICAgfQoKICAgIF9jdXN0b21FbGVtZW50c0FuYWx5c2lzLnJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3MoY2xzKTsKICAgIHJldHVybiBpbXBhY3RCdWlsZGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgV29ybGRJbXBhY3QgcmVnaXN0ZXJJbXBsZW1lbnRlZENsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIF9wcm9jZXNzQ2xhc3MoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIFdvcmxkSW1wYWN0IHJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBfZmllbGRBbmFseXNpcy5yZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKGNscyk7CiAgICByZXR1cm4gX3Byb2Nlc3NDbGFzcyhjbHMpOwogIH0KCiAgLy8vIENvbXB1dGUgdGhlIFtXb3JsZEltcGFjdF0gZm9yIGJhY2tlbmQgaGVscGVyIG1ldGhvZHMuCiAgV29ybGRJbXBhY3QgY29tcHV0ZUhlbHBlcnNJbXBhY3QoKSB7CiAgICBhc3NlcnQoX2NvbW1vbkVsZW1lbnRzLmludGVyY2VwdG9yc0xpYnJhcnkgIT0gbnVsbCk7CiAgICBXb3JsZEltcGFjdEJ1aWxkZXJJbXBsIGltcGFjdEJ1aWxkZXIgPSBuZXcgV29ybGRJbXBhY3RCdWlsZGVySW1wbCgpOwogICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBOb3QgZW5xdWV1aW5nIHRob3NlIHR3byBjbGFzc2VzIGN1cnJlbnRseSBtYWtlCiAgICAvLyB0aGUgY29tcGlsZXIgcG90ZW50aWFsbHkgY3Jhc2guIEhvd2V2ZXIsIGFueSByZWFzb25hYmxlIHByb2dyYW0KICAgIC8vIHdpbGwgaW5zdGFudGlhdGUgdGhvc2UgdHdvIGNsYXNzZXMuCiAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc0Jvb2xDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICBfYWRkSW50ZXJjZXB0b3JzKF9jb21tb25FbGVtZW50cy5qc051bGxDbGFzcywgaW1wYWN0QnVpbGRlcik7CiAgICBpZiAoX29wdGlvbnMuZGlzYWJsZVJ0aU9wdGltaXphdGlvbikgewogICAgICAvLyBXaGVuIFJUSSBvcHRpbWl6YXRpb24gaXMgZGlzYWJsZWQgd2UgYWx3YXlzIG5lZWQgYWxsIFJUSSBoZWxwZXJzLCBzbwogICAgICAvLyByZWdpc3RlciB0aGVzZSBoZXJlLgogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLmNvbXB1dGVTaWduYXR1cmUpOwogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLmdldFJ1bnRpbWVUeXBlQXJndW1lbnQpOwogICAgfQoKICAgIGlmIChfb3B0aW9ucy5leHBlcmltZW50Q2FsbEluc3RydW1lbnRhdGlvbikgewogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLnRyYWNlSGVscGVyKTsKICAgIH0KCiAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLnJ0aUFkZFJ1bGVzKTsKICAgIH0KCiAgICBfcmVnaXN0ZXJCYWNrZW5kSW1wYWN0KGltcGFjdEJ1aWxkZXIsIF9pbXBhY3RzLmFzc2VydFVucmVhY2hhYmxlKTsKICAgIF9yZWdpc3RlckNoZWNrZWRNb2RlSGVscGVycyhpbXBhY3RCdWlsZGVyKTsKICAgIHJldHVybiBpbXBhY3RCdWlsZGVyOwogIH0KCiAgdm9pZCBfcmVnaXN0ZXJDaGVja2VkTW9kZUhlbHBlcnMoV29ybGRJbXBhY3RCdWlsZGVyIGltcGFjdEJ1aWxkZXIpIHsKICAgIC8vIFdlIHJlZ2lzdGVyIGFsbCB0aGUgX2NvbW1vbkVsZW1lbnRzIGluIHRoZSByZXNvbHV0aW9uIHF1ZXVlLgogICAgLy8gVE9ETygxMzE1NSk6IEZpbmQgYSB3YXkgdG8gcmVnaXN0ZXIgZmV3ZXIgX2NvbW1vbkVsZW1lbnRzLgogICAgTGlzdDxGdW5jdGlvbkVudGl0eT4gc3RhdGljVXNlcyA9IDxGdW5jdGlvbkVudGl0eT5bXTsKICAgIGZvciAoQ2hlY2tlZE1vZGVIZWxwZXIgaGVscGVyIGluIENoZWNrZWRNb2RlSGVscGVycy5oZWxwZXJzKSB7CiAgICAgIHN0YXRpY1VzZXMuYWRkKGhlbHBlci5nZXRTdGF0aWNVc2UoX2NvbW1vbkVsZW1lbnRzKS5lbGVtZW50KTsKICAgIH0KICAgIF9yZWdpc3RlckJhY2tlbmRJbXBhY3QoCiAgICAgICAgaW1wYWN0QnVpbGRlciwgbmV3IEJhY2tlbmRJbXBhY3QoZ2xvYmFsVXNlczogc3RhdGljVXNlcykpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBsb2dTdW1tYXJ5KHZvaWQgbG9nKFN0cmluZyBtZXNzYWdlKSkgewogICAgX25hdGl2ZUVucXVldWVyLmxvZ1N1bW1hcnkobG9nKTsKICB9Cn0KgdIATk48ATABMEwjICQhOiEvPTcnQh4eHSQoIDAnATwzLAEiMSkhASUxKwE0QgEyJwExLwEeFSAcFRgdGiIkHBsfAR86OTAEAU0rI0kwBAEMQUlAEk5GJjwGGgQBDC5ARQQBLENIBAEMNDkUQQYXMAYEAU0+Rk8rITxGJEIGH0kNJEoGFwQBPjBCRwQBDBRPLDwqBkopHjsoBkM3SwQBDE5OLQdQFzowAS1JKx0mICE9CAYqLTo9SBxLLwYBLgERBAEMGgE4LUJLAUNHBgQBNUI3RAEfMRRNKUk3TUYiQUI9OBRRBgQBMjkhRj5ESjBDRD8IBgQBDD1JQxoEAQw5RzcBHSghJDsBLTA4Ni43RStBSE4TDAoIJzMBMTc+CggGLgFCSQYBQ0UtL0MIBgFGREhPGzQ1BgEYBAFQOidFSgQBL0lPPD8rLitCMy5LN0UyQDJAO0k7TDlHOUcGL0QGLjBGMy80OTtFTEpPUUMyLUNLRkZGNTBGRjMuRDMuRDIwQ0tGRkZGQVBGGEhIGEpDGEU7QkVKBgE8GgQBDDofBAEMOzMfBAE8JzlJR0crQkIrTh5ITgYBMkMGASVDBgFHMBoEAUdEQjpDRAYcQwQBDC4lBAIBOHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvcmVzb2x1dGlvbl9saXN0ZW5lci5kYXJ0RnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19yZXNvbHV0aW9uLmRhcnTAALZbLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYmFja2VuZC5ydW50aW1lX3R5cGVzX3Jlc29sdXRpb247CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBJZGVudGlmaWVyczsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBDb21tb25FbGVtZW50cywgRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3J1bnRpbWVfdHlwZV9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwva2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vc2VyaWFsaXphdGlvbi9zZXJpYWxpemF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jbGFzc19zZXQuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvZmVhdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JzsKaW1wb3J0ICdiYWNrZW5kX3VzYWdlLmRhcnQnOwoKYWJzdHJhY3QgY2xhc3MgUnRpTm9kZSB7CiAgRW50aXR5IGdldCBlbnRpdHk7CiAgU2V0PFJ0aU5vZGU+IF9kZXBlbmRlbmNpZXM7CiAgaW50IF90ZXN0U3RhdGUgPSAwOwogIGludCBfbGl0ZXJhbFN0YXRlID0gMDsKCiAgSXRlcmFibGU8UnRpTm9kZT4gZ2V0IGRlcGVuZGVuY2llcyA9PiBfZGVwZW5kZW5jaWVzID8/IGNvbnN0IDxSdGlOb2RlPltdOwoKICBib29sIGdldCBoYXNEaXJlY3RUZXN0ID0+IF90ZXN0U3RhdGUgJiAxICE9IDA7CiAgYm9vbCBnZXQgaGFzSW5kaXJlY3RUZXN0ID0+IF90ZXN0U3RhdGUgJiAyICE9IDA7CgogIGJvb2wgZ2V0IGhhc1Rlc3QgPT4gX3Rlc3RTdGF0ZSAhPSAwOwoKICBib29sIGdldCBoYXNEaXJlY3RMaXRlcmFsID0+IF9saXRlcmFsU3RhdGUgJiAxICE9IDA7CiAgYm9vbCBnZXQgaGFzSW5kaXJlY3RMaXRlcmFsID0+IF9saXRlcmFsU3RhdGUgJiAyICE9IDA7CgogIGJvb2wgZ2V0IGhhc0xpdGVyYWwgPT4gX2xpdGVyYWxTdGF0ZSAhPSAwOwoKICBib29sIGdldCBoYXNVc2UgPT4gaGFzVGVzdCB8fCBoYXNMaXRlcmFsOwoKICAvLy8gUmVnaXN0ZXIgdGhhdCBpZiBbZW50aXR5XSBuZWVkcyB0eXBlIGFyZ3VtZW50cyB0aGVuIHNvIGRvZXMgYG5vZGUuZW50aXR5YC4KICBib29sIGFkZERlcGVuZGVuY3koUnRpTm9kZSBub2RlKSB7CiAgICBpZiAoZW50aXR5ID09IG5vZGUuZW50aXR5KSB7CiAgICAgIC8vIFNraXAgdHJpdmlhbCBkZXBlbmRlbmNpZXM7IGlmIFtlbnRpdHldIG5lZWRzIHR5cGUgYXJndW1lbnRzIHNvIGRvZXMKICAgICAgLy8gW2VudGl0eV0hCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIF9kZXBlbmRlbmNpZXMgPz89IG5ldyBTZXQ8UnRpTm9kZT4oKTsKICAgIHJldHVybiBfZGVwZW5kZW5jaWVzLmFkZChub2RlKTsKICB9CgogIHZvaWQgbWFya1Rlc3Qoe2Jvb2wgZGlyZWN0fSkgewogICAgc2V0VGVzdFN0YXRlKGRpcmVjdCA/IDEgOiAyKTsKICB9CgogIHZvaWQgbWFya0RpcmVjdFRlc3QoKSB7CiAgICBzZXRUZXN0U3RhdGUoMSk7CiAgfQoKICB2b2lkIG1hcmtJbmRpcmVjdFRlc3QoKSB7CiAgICBzZXRUZXN0U3RhdGUoMik7CiAgfQoKICB2b2lkIHNldFRlc3RTdGF0ZShpbnQgdmFsdWUpIHsKICAgIGlmIChfdGVzdFN0YXRlICE9IHZhbHVlKSB7CiAgICAgIGlmIChfdGVzdFN0YXRlID09IDApIHsKICAgICAgICBfdGVzdFN0YXRlIHw9IHZhbHVlOwogICAgICAgIGlmIChfZGVwZW5kZW5jaWVzICE9IG51bGwpIHsKICAgICAgICAgIGZvciAoUnRpTm9kZSBub2RlIGluIF9kZXBlbmRlbmNpZXMpIHsKICAgICAgICAgICAgbm9kZS5tYXJrSW5kaXJlY3RUZXN0KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIF90ZXN0U3RhdGUgPSB2YWx1ZTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBtYXJrRGlyZWN0TGl0ZXJhbCgpIHsKICAgIHNldExpdGVyYWxTdGF0ZSgxKTsKICB9CgogIHZvaWQgbWFya0luZGlyZWN0TGl0ZXJhbCgpIHsKICAgIHNldExpdGVyYWxTdGF0ZSgyKTsKICB9CgogIHZvaWQgc2V0TGl0ZXJhbFN0YXRlKGludCB2YWx1ZSkgewogICAgaWYgKF9saXRlcmFsU3RhdGUgIT0gdmFsdWUpIHsKICAgICAgaWYgKF9saXRlcmFsU3RhdGUgPT0gMCkgewogICAgICAgIF9saXRlcmFsU3RhdGUgfD0gdmFsdWU7CiAgICAgICAgaWYgKF9kZXBlbmRlbmNpZXMgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChSdGlOb2RlIG5vZGUgaW4gX2RlcGVuZGVuY2llcykgewogICAgICAgICAgICBub2RlLm1hcmtJbmRpcmVjdExpdGVyYWwoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2xpdGVyYWxTdGF0ZSA9IHZhbHVlOwogICAgICB9CiAgICB9CiAgfQoKICBTdHJpbmcgZ2V0IGtpbmQ7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKGtpbmQpOwogICAgc2Iud3JpdGUoJzonKTsKICAgIHNiLndyaXRlKGVudGl0eSk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCmNsYXNzIENsYXNzTm9kZSBleHRlbmRzIFJ0aU5vZGUgewogIGZpbmFsIENsYXNzRW50aXR5IGNsczsKCiAgQ2xhc3NOb2RlKHRoaXMuY2xzKTsKCiAgQG92ZXJyaWRlCiAgRW50aXR5IGdldCBlbnRpdHkgPT4gY2xzOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGtpbmQgPT4gJ2NsYXNzJzsKfQoKY2xhc3MgTWV0aG9kTm9kZSBleHRlbmRzIFJ0aU5vZGUgewogIGZpbmFsIEVudGl0eSBmdW5jdGlvbjsKICBmaW5hbCBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlOwogIGZpbmFsIGJvb2wgaXNDYWxsVGFyZ2V0OwogIGZpbmFsIE5hbWUgaW5zdGFuY2VOYW1lOwogIGZpbmFsIGJvb2wgaXNOb1N1Y2hNZXRob2Q7CgogIE1ldGhvZE5vZGUodGhpcy5mdW5jdGlvbiwgdGhpcy5wYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgIHt0aGlzLmlzQ2FsbFRhcmdldCwgdGhpcy5pbnN0YW5jZU5hbWUsIHRoaXMuaXNOb1N1Y2hNZXRob2Q6IGZhbHNlfSk7CgogIEBvdmVycmlkZQogIEVudGl0eSBnZXQgZW50aXR5ID0+IGZ1bmN0aW9uOwoKICBib29sIHNlbGVjdG9yQXBwbGllcyhTZWxlY3RvciBzZWxlY3RvcikgewogICAgaWYgKGlzTm9TdWNoTWV0aG9kKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiAoaXNDYWxsVGFyZ2V0ICYmIHNlbGVjdG9yLmlzQ2xvc3VyZUNhbGwgfHwKICAgICAgICAgICAgaW5zdGFuY2VOYW1lID09IHNlbGVjdG9yLm1lbWJlck5hbWUpICYmCiAgICAgICAgc2VsZWN0b3IuY2FsbFN0cnVjdHVyZS5zaWduYXR1cmVBcHBsaWVzKHBhcmFtZXRlclN0cnVjdHVyZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGtpbmQgPT4gJ21ldGhvZCc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdNZXRob2ROb2RlKCcpOwogICAgc2Iud3JpdGUoJ2Z1bmN0aW9uPSRmdW5jdGlvbicpOwogICAgc2Iud3JpdGUoJyxwYXJhbWV0ZXJTdHJ1Y3R1cmU9JHBhcmFtZXRlclN0cnVjdHVyZScpOwogICAgc2Iud3JpdGUoJyxpc0NhbGxUYXJnZXQ9JGlzQ2FsbFRhcmdldCcpOwogICAgc2Iud3JpdGUoJyxpbnN0YW5jZU5hbWU9JGluc3RhbmNlTmFtZScpOwogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKY2xhc3MgVHlwZVZhcmlhYmxlVGVzdHMgewogIExpc3Q8UnRpTm9kZT4gX25vZGVzID0gPFJ0aU5vZGU+W107CiAgTWFwPENsYXNzRW50aXR5LCBDbGFzc05vZGU+IF9jbGFzc2VzID0gPENsYXNzRW50aXR5LCBDbGFzc05vZGU+e307CiAgTWFwPEVudGl0eSwgTWV0aG9kTm9kZT4gX21ldGhvZHMgPSA8RW50aXR5LCBNZXRob2ROb2RlPnt9OwogIE1hcDxTZWxlY3RvciwgU2V0PEVudGl0eT4+IF9hcHBsaWVkU2VsZWN0b3JNYXA7CiAgTWFwPEdlbmVyaWNJbnN0YW50aWF0aW9uLCBTZXQ8RW50aXR5Pj4gX2luc3RhbnRpYXRpb25NYXA7CgogIC8vLyBBbGwgZXhwbGljaXQgaXMtdGVzdHMuCiAgZmluYWwgU2V0PERhcnRUeXBlPiBleHBsaWNpdElzQ2hlY2tzOwoKICAvLy8gQWxsIGltcGxpY2l0IGlzLXRlc3RzLgogIGZpbmFsIFNldDxEYXJ0VHlwZT4gaW1wbGljaXRJc0NoZWNrcyA9IG5ldyBTZXQ8RGFydFR5cGU+KCk7CgogIFR5cGVWYXJpYWJsZVRlc3RzKAogICAgICBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgRGFydFR5cGVzIHR5cGVzLAogICAgICBCdWlsdFdvcmxkIHdvcmxkLAogICAgICBTZXQ8R2VuZXJpY0luc3RhbnRpYXRpb24+IGdlbmVyaWNJbnN0YW50aWF0aW9ucywKICAgICAge2Jvb2wgZm9yUnRpTmVlZHM6IHRydWV9KQogICAgICA6IGV4cGxpY2l0SXNDaGVja3MgPSBuZXcgU2V0PERhcnRUeXBlPi5mcm9tKHdvcmxkLmlzQ2hlY2tzKSB7CiAgICBfc2V0dXBEZXBlbmRlbmNpZXMoCiAgICAgICAgZWxlbWVudEVudmlyb25tZW50LCBjb21tb25FbGVtZW50cywgd29ybGQsIGdlbmVyaWNJbnN0YW50aWF0aW9ucywKICAgICAgICBmb3JSdGlOZWVkczogZm9yUnRpTmVlZHMpOwogICAgX3Byb3BhZ2F0ZVRlc3RzKGNvbW1vbkVsZW1lbnRzLCBlbGVtZW50RW52aXJvbm1lbnQsIHdvcmxkKTsKICAgIGlmIChmb3JSdGlOZWVkcykgewogICAgICBfcHJvcGFnYXRlTGl0ZXJhbHMoZWxlbWVudEVudmlyb25tZW50LCB3b3JsZCk7CiAgICB9CiAgICBfY29sbGVjdFJlc3VsdHMoY29tbW9uRWxlbWVudHMsIGVsZW1lbnRFbnZpcm9ubWVudCwgdHlwZXMsIHdvcmxkLAogICAgICAgIGZvclJ0aU5lZWRzOiBmb3JSdGlOZWVkcyk7CiAgfQoKICAvLy8gQ2xhc3NlcyB3aG9zZSB0eXBlIHZhcmlhYmxlcyBhcmUgZXhwbGljaXRseSBvciBpbXBsaWNpdGx5IHVzZWQgaW4KICAvLy8gaXMtdGVzdHMuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBgQWAgYW5kIGBCYCBpbjoKICAvLy8KICAvLy8gICAgIGNsYXNzIEE8VD4gewogIC8vLyAgICAgICBtKG8pID0+IG8gaXMgVDsKICAvLy8gICAgIH0KICAvLy8gICAgIGNsYXNzIEI8Uz4gewogIC8vLyAgICAgICBtKG8pID0+IG5ldyBBPFM+KCkubShvKTsKICAvLy8gICAgIH0KICAvLy8gICAgIG1haW4oKSA9PiBuZXcgQjxpbnQ+KCkubSgwKTsKICAvLy8KICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gZ2V0IGNsYXNzVGVzdHNGb3JUZXN0aW5nID0+CiAgICAgIF9jbGFzc2VzLnZhbHVlcy53aGVyZSgobikgPT4gbi5oYXNUZXN0KS5tYXAoKG4pID0+IG4uY2xzKS50b1NldCgpOwoKICAvLy8gQ2xhc3NlcyB0aGF0IGV4cGxpY2l0bHkgdXNlIHRoZWlyIHR5cGUgdmFyaWFibGVzIGluIGlzLXRlc3RzLgogIC8vLwogIC8vLyBGb3IgaW5zdGFuY2UgYEFgIGluOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQTxUPiB7CiAgLy8vICAgICAgIG0obykgPT4gbyBpcyBUOwogIC8vLyAgICAgfQogIC8vLyAgICAgbWFpbigpID0+IG5ldyBBPGludD4oKS5tKDApOwogIC8vLwogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgZGlyZWN0Q2xhc3NUZXN0c0ZvclRlc3RpbmcgPT4KICAgICAgX2NsYXNzZXMudmFsdWVzLndoZXJlKChuKSA9PiBuLmhhc0RpcmVjdFRlc3QpLm1hcCgobikgPT4gbi5jbHMpLnRvU2V0KCk7CgogIC8vLyBNZXRob2RzIHRoYXQgZXhwbGljaXRseSBvciBpbXBsaWNpdGx5IHVzZSB0aGVpciB0eXBlIHZhcmlhYmxlcyBpbgogIC8vLyBpcy10ZXN0cy4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlIGBtMWAgYW5kIGBtMmBpbjoKICAvLy8KICAvLy8gICAgIG0xPFQ+KG8pID0+IG8gaXMgVDsKICAvLy8gICAgIG0yPFM+KG8pID0+IG0xPFM+KG8pOwogIC8vLyAgICAgbWFpbigpID0+IG0yPGludD4oMCk7CiAgLy8vCiAgSXRlcmFibGU8RW50aXR5PiBnZXQgbWV0aG9kVGVzdHNGb3JUZXN0aW5nID0+CiAgICAgIF9tZXRob2RzLnZhbHVlcy53aGVyZSgobikgPT4gbi5oYXNUZXN0KS5tYXAoKG4pID0+IG4uZnVuY3Rpb24pLnRvU2V0KCk7CgogIC8vLyBNZXRob2RzIHRoYXQgZXhwbGljaXRseSB1c2UgdGhlaXIgdHlwZSB2YXJpYWJsZXMgaW4gaXMtdGVzdHMuCiAgLy8vCiAgLy8vIEZvciBpbnN0YW5jZSBgbWAgaW46CiAgLy8vCiAgLy8vICAgICBtPFQ+KG8pID0+IG8gaXMgVDsKICAvLy8gICAgIG1haW4oKSA9PiBtPGludD4oMCk7CiAgLy8vCiAgSXRlcmFibGU8RW50aXR5PiBnZXQgZGlyZWN0TWV0aG9kVGVzdHNGb3JUZXN0aW5nID0+IF9tZXRob2RzLnZhbHVlcwogICAgICAud2hlcmUoKG4pID0+IG4uaGFzRGlyZWN0VGVzdCkKICAgICAgLm1hcCgobikgPT4gbi5mdW5jdGlvbikKICAgICAgLnRvU2V0KCk7CgogIC8vLyBUaGUgZW50aXRpZXMgdGhhdCBuZWVkIHR5cGUgYXJndW1lbnRzIGF0IHJ1bnRpbWUgaWYgdGhlICdrZXkgZW50aXR5JyBuZWVkcwogIC8vLyB0eXBlIGFyZ3VtZW50cy4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlOgogIC8vLwogIC8vLyAgICAgY2xhc3MgQTxUPiB7CiAgLy8vICAgICAgIG0oKSA9PiBuZXcgQjxUPigpOwogIC8vLyAgICAgfQogIC8vLyAgICAgY2xhc3MgQjxUPiB7fQogIC8vLyAgICAgbWFpbigpID0+IG5ldyBBPFN0cmluZz4oKS5tKCkgaXMgQjxpbnQ+OwogIC8vLwogIC8vLyBIZXJlIGBBYCBuZWVkcyB0eXBlIGFyZ3VtZW50cyBhdCBydW50aW1lIGJlY2F1c2UgdGhlIGtleSBlbnRpdHkgYEJgIG5lZWRzCiAgLy8vIGl0IGluIG9yZGVyIHRvIGdlbmVyYXRlIHRoZSBjaGVjayBhZ2FpbnN0IGBCPGludD5gLgogIC8vLwogIC8vLyBUaGlzIGNhbiBhbHNvIGludm9sdmUgZ2VuZXJpYyBtZXRob2RzOgogIC8vLwogIC8vLyAgICBjbGFzcyBBPFQ+IHt9CiAgLy8vICAgIG1ldGhvZDxUPigpID0+IG5ldyBBPFQ+KCk7CiAgLy8vICAgIG1haW4oKSA9PiBtZXRob2Q8aW50PigpIGlzIEE8aW50PigpOwogIC8vLwogIC8vLyBIZXJlIGBtZXRob2RgIG5lZWQgdHlwZSBhcmd1bWVudHMgYXQgcnVudGltZSBiZWNhdXNlIHRoZSBrZXkgZW50aXR5IGBBYAogIC8vLyBuZWVkcyBpdCBpbiBvcmRlciB0byBnZW5lcmF0ZSB0aGUgY2hlY2sgYWdhaW5zdCBgQTxpbnQ+YC4KICAvLy8KICBJdGVyYWJsZTxFbnRpdHk+IGdldFR5cGVBcmd1bWVudERlcGVuZGVuY2llcyhFbnRpdHkgZW50aXR5KSB7CiAgICBJdGVyYWJsZTxSdGlOb2RlPiBkZXBlbmRlbmNpZXM7CiAgICBpZiAoZW50aXR5IGlzIENsYXNzRW50aXR5KSB7CiAgICAgIGRlcGVuZGVuY2llcyA9IF9jbGFzc2VzW2VudGl0eV0/LmRlcGVuZGVuY2llczsKICAgIH0gZWxzZSB7CiAgICAgIGRlcGVuZGVuY2llcyA9IF9tZXRob2RzW2VudGl0eV0/LmRlcGVuZGVuY2llczsKICAgIH0KICAgIGlmIChkZXBlbmRlbmNpZXMgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IDxFbnRpdHk+W107CiAgICByZXR1cm4gZGVwZW5kZW5jaWVzLm1hcCgobikgPT4gbi5lbnRpdHkpLnRvU2V0KCk7CiAgfQoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIHNlbGVjdG9yIHRoYXQgYXBwbGllcyB0byBnZW5lcmljIFt0YXJnZXRzXS4KICB2b2lkIGZvckVhY2hBcHBsaWVkU2VsZWN0b3Iodm9pZCBmKFNlbGVjdG9yIHNlbGVjdG9yLCBTZXQ8RW50aXR5PiB0YXJnZXRzKSkgewogICAgX2FwcGxpZWRTZWxlY3Rvck1hcC5mb3JFYWNoKGYpOwogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBnZW5lcmljIGluc3RhbnRpYXRpb24gdGhhdCBhcHBsaWVzIHRvIGdlbmVyaWMKICAvLy8gY2xvc3VyaXplZCBbdGFyZ2V0c10uCiAgdm9pZCBmb3JFYWNoR2VuZXJpY0luc3RhbnRpYXRpb24oCiAgICAgIHZvaWQgZihHZW5lcmljSW5zdGFudGlhdGlvbiBpbnN0YW50aWF0aW9uLCBTZXQ8RW50aXR5PiB0YXJnZXRzKSkgewogICAgX2luc3RhbnRpYXRpb25NYXA/LmZvckVhY2goZik7CiAgfQoKICBDbGFzc05vZGUgX2dldENsYXNzTm9kZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfY2xhc3Nlcy5wdXRJZkFic2VudChjbHMsICgpIHsKICAgICAgQ2xhc3NOb2RlIG5vZGUgPSBuZXcgQ2xhc3NOb2RlKGNscyk7CiAgICAgIF9ub2Rlcy5hZGQobm9kZSk7CiAgICAgIHJldHVybiBub2RlOwogICAgfSk7CiAgfQoKICBNZXRob2ROb2RlIF9nZXRNZXRob2ROb2RlKEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIEJ1aWx0V29ybGQgd29ybGQsIEVudGl0eSBmdW5jdGlvbikgewogICAgcmV0dXJuIF9tZXRob2RzLnB1dElmQWJzZW50KGZ1bmN0aW9uLCAoKSB7CiAgICAgIE1ldGhvZE5vZGUgbm9kZTsKICAgICAgaWYgKGZ1bmN0aW9uIGlzIEZ1bmN0aW9uRW50aXR5KSB7CiAgICAgICAgTmFtZSBpbnN0YW5jZU5hbWU7CiAgICAgICAgYm9vbCBpc0NhbGxUYXJnZXQ7CiAgICAgICAgYm9vbCBpc05vU3VjaE1ldGhvZDsKICAgICAgICBpZiAoZnVuY3Rpb24uaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgICAgaXNDYWxsVGFyZ2V0ID0gd29ybGQuY2xvc3VyaXplZE1lbWJlcnMuY29udGFpbnMoZnVuY3Rpb24pOwogICAgICAgICAgaW5zdGFuY2VOYW1lID0gZnVuY3Rpb24ubWVtYmVyTmFtZTsKICAgICAgICAgIGlzTm9TdWNoTWV0aG9kID0gaW5zdGFuY2VOYW1lLnRleHQgPT0gSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaXNDYWxsVGFyZ2V0ID0gd29ybGQuY2xvc3VyaXplZFN0YXRpY3MuY29udGFpbnMoZnVuY3Rpb24pOwogICAgICAgICAgaXNOb1N1Y2hNZXRob2QgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgbm9kZSA9IG5ldyBNZXRob2ROb2RlKGZ1bmN0aW9uLCBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUsCiAgICAgICAgICAgIGlzQ2FsbFRhcmdldDogaXNDYWxsVGFyZ2V0LAogICAgICAgICAgICBpbnN0YW5jZU5hbWU6IGluc3RhbmNlTmFtZSwKICAgICAgICAgICAgaXNOb1N1Y2hNZXRob2Q6IGlzTm9TdWNoTWV0aG9kKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0gbmV3IFBhcmFtZXRlclN0cnVjdHVyZS5mcm9tVHlwZSgKICAgICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LmdldExvY2FsRnVuY3Rpb25UeXBlKGZ1bmN0aW9uKSk7CiAgICAgICAgbm9kZSA9IG5ldyBNZXRob2ROb2RlKGZ1bmN0aW9uLCBwYXJhbWV0ZXJTdHJ1Y3R1cmUsIGlzQ2FsbFRhcmdldDogdHJ1ZSk7CiAgICAgIH0KICAgICAgX25vZGVzLmFkZChub2RlKTsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9KTsKICB9CgogIHZvaWQgX3NldHVwRGVwZW5kZW5jaWVzKAogICAgICBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LAogICAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgQnVpbHRXb3JsZCB3b3JsZCwKICAgICAgU2V0PEdlbmVyaWNJbnN0YW50aWF0aW9uPiBnZW5lcmljSW5zdGFudGlhdGlvbnMsCiAgICAgIHtib29sIGZvclJ0aU5lZWRzOiB0cnVlfSkgewogICAgLy8vIFJlZ2lzdGVyIHRoYXQgaWYgYG5vZGUuZW50aXR5YCBuZWVkcyB0eXBlIGFyZ3VtZW50cyB0aGVuIHNvIGRvIGVudGl0aWVzCiAgICAvLy8gd2hvc2UgdHlwZSB2YXJpYWJsZXMgb2NjdXIgaW4gW3R5cGVdLgogICAgLy8vCiAgICAvLy8gRm9yIGluc3RhbmNlIGlmIGBBYCBuZWVkcyB0eXBlIGFyZ3VtZW50cyB0aGVuIHNvIGRvZXMgYEJgIGluOgogICAgLy8vCiAgICAvLy8gICBjbGFzcyBBPFQ+IHt9CiAgICAvLy8gICBjbGFzcyBCPFQ+IHsgbSgpID0+IG5ldyBBPFQ+KCk7IH0KICAgIC8vLwogICAgdm9pZCByZWdpc3RlckRlcGVuZGVuY2llcyhSdGlOb2RlIG5vZGUsIERhcnRUeXBlIHR5cGUpIHsKICAgICAgdHlwZS5mb3JFYWNoVHlwZVZhcmlhYmxlKChUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSkgewogICAgICAgIEVudGl0eSB0eXBlRGVjbGFyYXRpb24gPSB0eXBlVmFyaWFibGUuZWxlbWVudC50eXBlRGVjbGFyYXRpb247CiAgICAgICAgaWYgKHR5cGVEZWNsYXJhdGlvbiBpcyBDbGFzc0VudGl0eSkgewogICAgICAgICAgbm9kZS5hZGREZXBlbmRlbmN5KF9nZXRDbGFzc05vZGUodHlwZURlY2xhcmF0aW9uKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5vZGUuYWRkRGVwZW5kZW5jeSgKICAgICAgICAgICAgICBfZ2V0TWV0aG9kTm9kZShlbGVtZW50RW52aXJvbm1lbnQsIHdvcmxkLCB0eXBlRGVjbGFyYXRpb24pKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQoKICAgIC8vIEFkZCB0aGUgcnRpIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBpbXBsaWNpdCBpbiB0aGUgd2F5IHRoZSBiYWNrZW5kCiAgICAvLyBnZW5lcmF0ZXMgY29kZTogd2hlbiB3ZSBjcmVhdGUgYSBuZXcgW0xpc3RdLCB3ZSBhY3R1YWxseSBjcmVhdGUgYQogICAgLy8gW0pTQXJyYXldIGluIHRoZSBiYWNrZW5kIGFuZCB3ZSBuZWVkIHRvIGFkZCB0eXBlIGFyZ3VtZW50cyB0byB0aGUgY2FsbHMKICAgIC8vIG9mIHRoZSBsaXN0IGNvbnN0cnVjdG9yIHdoZW5ldmVyIHdlIGRldGVybWluZSB0aGF0IFtKU0FycmF5XSBuZWVkcyB0eXBlCiAgICAvLyBhcmd1bWVudHMuCiAgICAvLwogICAgLy8gVGhpcyBpcyBuZWVkIGZvciBpbnN0YW5jZSBmb3I6CiAgICAvLwogICAgLy8gICAgdmFyIGxpc3QgPSA8aW50PltdOwogICAgLy8gICAgdmFyIHNldCA9IGxpc3QudG9TZXQoKTsKICAgIC8vICAgIHNldCBpcyBTZXQ8U3RyaW5nPjsKICAgIC8vCiAgICAvLyBJdCBhbHNvIG9jY3VycyBmb3IgW01hcF0gdnMgW0pzTGlua2VkSGFzaE1hcF0gaW46CiAgICAvLwogICAgLy8gICAgdmFyIG1hcCA9IDxpbnQsIGRvdWJsZT57fTsKICAgIC8vICAgIHZhciBzZXQgPSBtYXAua2V5cy50b1NldCgpOwogICAgLy8gICAgc2V0IGlzIFNldDxTdHJpbmc+OwogICAgLy8KICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE1ha2UgdGhpcyBkZXBlbmRlbmN5IHZpc2libGUgZnJvbSBjb2RlLCBwb3NzaWJseQogICAgLy8gdXNpbmcgZ2VuZXJpYyBtZXRob2RzLgogICAgaWYgKGNvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcyAhPSBudWxsKSB7CiAgICAgIF9nZXRDbGFzc05vZGUoY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKQogICAgICAgICAgLmFkZERlcGVuZGVuY3koX2dldENsYXNzTm9kZShjb21tb25FbGVtZW50cy5saXN0Q2xhc3MpKTsKICAgIH0KICAgIGlmIChjb21tb25FbGVtZW50cy5zZXRMaXRlcmFsQ2xhc3MgIT0gbnVsbCkgewogICAgICBfZ2V0Q2xhc3NOb2RlKGNvbW1vbkVsZW1lbnRzLnNldExpdGVyYWxDbGFzcykKICAgICAgICAgIC5hZGREZXBlbmRlbmN5KF9nZXRDbGFzc05vZGUoY29tbW9uRWxlbWVudHMuc2V0Q2xhc3MpKTsKICAgIH0KICAgIGlmIChjb21tb25FbGVtZW50cy5tYXBMaXRlcmFsQ2xhc3MgIT0gbnVsbCkgewogICAgICBfZ2V0Q2xhc3NOb2RlKGNvbW1vbkVsZW1lbnRzLm1hcExpdGVyYWxDbGFzcykKICAgICAgICAgIC5hZGREZXBlbmRlbmN5KF9nZXRDbGFzc05vZGUoY29tbW9uRWxlbWVudHMubWFwQ2xhc3MpKTsKICAgIH0KCiAgICB2b2lkIHByb2Nlc3NDaGVja2VkVHlwZShEYXJ0VHlwZSB0eXBlKSB7CiAgICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICAvLyBSZWdpc3RlciB0aGF0IGlmIFtjbHNdIG5lZWRzIHR5cGUgYXJndW1lbnRzIHRoZW4gc28gZG8gdGhlIGVudGl0aWVzCiAgICAgICAgLy8gdGhhdCBkZWNsYXJlIHR5cGUgdmFyaWFibGVzIG9jY3VycmluZyBpbiBbdHlwZV0uCiAgICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gdHlwZS5lbGVtZW50OwogICAgICAgIHJlZ2lzdGVyRGVwZW5kZW5jaWVzKF9nZXRDbGFzc05vZGUoY2xzKSwgdHlwZSk7CiAgICAgIH0KICAgICAgaWYgKHR5cGUgaXMgRnV0dXJlT3JUeXBlKSB7CiAgICAgICAgLy8gW3R5cGVdIGlzIGBGdXR1cmVPcjxYPmAuCgogICAgICAgIC8vIEZvciB0aGUgaW1wbGllZCBgaXMgRnV0dXJlPFg+YCB0ZXN0LCByZWdpc3RlciB0aGF0IGlmIGBGdXR1cmVgIG5lZWRzCiAgICAgICAgLy8gdHlwZSBhcmd1bWVudHMgdGhlbiBzbyBkbyB0aGUgZW50aXRpZXMgdGhhdCBkZWNsYXJlIHR5cGUgdmFyaWFibGVzCiAgICAgICAgLy8gb2NjdXJyaW5nIGluIGB0eXBlLnR5cGVBcmd1bWVudGAuCiAgICAgICAgcmVnaXN0ZXJEZXBlbmRlbmNpZXMoCiAgICAgICAgICAgIF9nZXRDbGFzc05vZGUoY29tbW9uRWxlbWVudHMuZnV0dXJlQ2xhc3MpLCB0eXBlLnR5cGVBcmd1bWVudCk7CiAgICAgICAgLy8gUHJvY2VzcyBgdHlwZS50eXBlQXJndW1lbnRgIGZvciB0aGUgaW1wbGllZCBgaXMgWGAgdGVzdC4KICAgICAgICBwcm9jZXNzQ2hlY2tlZFR5cGUodHlwZS50eXBlQXJndW1lbnQpOwogICAgICB9CiAgICB9CgogICAgd29ybGQuaXNDaGVja3MuZm9yRWFjaChwcm9jZXNzQ2hlY2tlZFR5cGUpOwoKICAgIHdvcmxkLmluc3RhbnRpYXRlZFR5cGVzLmZvckVhY2goKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgICAvLyBSZWdpc3RlciB0aGF0IGlmIFtjbHNdIG5lZWRzIHR5cGUgYXJndW1lbnRzIHRoZW4gc28gZG8gdGhlIGVudGl0aWVzCiAgICAgIC8vIHRoYXQgZGVjbGFyZSB0eXBlIHZhcmlhYmxlcyBvY2N1cnJpbmcgaW4gW3R5cGVdLgogICAgICBDbGFzc0VudGl0eSBjbHMgPSB0eXBlLmVsZW1lbnQ7CiAgICAgIHJlZ2lzdGVyRGVwZW5kZW5jaWVzKF9nZXRDbGFzc05vZGUoY2xzKSwgdHlwZSk7CiAgICB9KTsKCiAgICB3b3JsZC5mb3JFYWNoU3RhdGljVHlwZUFyZ3VtZW50KAogICAgICAgIChFbnRpdHkgZW50aXR5LCBJdGVyYWJsZTxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gdHlwZUFyZ3VtZW50cykgewogICAgICAgIC8vIFJlZ2lzdGVyIHRoYXQgaWYgW2VudGl0eV0gbmVlZHMgdHlwZSBhcmd1bWVudHMgdGhlbiBzbyBkbyB0aGUKICAgICAgICAvLyBlbnRpdGllcyB0aGF0IGRlY2xhcmUgdHlwZSB2YXJpYWJsZXMgb2NjdXJyaW5nIGluIFt0eXBlXS4KICAgICAgICByZWdpc3RlckRlcGVuZGVuY2llcygKICAgICAgICAgICAgX2dldE1ldGhvZE5vZGUoZWxlbWVudEVudmlyb25tZW50LCB3b3JsZCwgZW50aXR5KSwgdHlwZSk7CiAgICAgIH0KICAgIH0pOwoKICAgIHdvcmxkLmZvckVhY2hEeW5hbWljVHlwZUFyZ3VtZW50KAogICAgICAgIChTZWxlY3RvciBzZWxlY3RvciwgSXRlcmFibGU8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgICAgdm9pZCBwcm9jZXNzRW50aXR5KEVudGl0eSBlbnRpdHkpIHsKICAgICAgICBNZXRob2ROb2RlIG5vZGUgPSBfZ2V0TWV0aG9kTm9kZShlbGVtZW50RW52aXJvbm1lbnQsIHdvcmxkLCBlbnRpdHkpOwogICAgICAgIGlmIChub2RlLnNlbGVjdG9yQXBwbGllcyhzZWxlY3RvcikpIHsKICAgICAgICAgIGZvciAoRGFydFR5cGUgdHlwZSBpbiB0eXBlQXJndW1lbnRzKSB7CiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHRoYXQgaWYgYG5vZGUuZW50aXR5YCBuZWVkcyB0eXBlIGFyZ3VtZW50cyB0aGVuIHNvIGRvCiAgICAgICAgICAgIC8vIHRoZSBlbnRpdGllcyB0aGF0IGRlY2xhcmUgdHlwZSB2YXJpYWJsZXMgb2NjdXJyaW5nIGluIFt0eXBlXS4KICAgICAgICAgICAgcmVnaXN0ZXJEZXBlbmRlbmNpZXMobm9kZSwgdHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICB3b3JsZC5mb3JFYWNoR2VuZXJpY0luc3RhbmNlTWV0aG9kKHByb2Nlc3NFbnRpdHkpOwogICAgICB3b3JsZC5nZW5lcmljTG9jYWxGdW5jdGlvbnMuZm9yRWFjaChwcm9jZXNzRW50aXR5KTsKICAgICAgd29ybGQuY2xvc3VyaXplZFN0YXRpY3MuZm9yRWFjaChwcm9jZXNzRW50aXR5KTsKICAgICAgd29ybGQudXNlck5vU3VjaE1ldGhvZHMuZm9yRWFjaChwcm9jZXNzRW50aXR5KTsKICAgIH0pOwoKICAgIGZvciAoR2VuZXJpY0luc3RhbnRpYXRpb24gaW5zdGFudGlhdGlvbiBpbiBnZW5lcmljSW5zdGFudGlhdGlvbnMpIHsKICAgICAgdm9pZCBwcm9jZXNzRW50aXR5KEVudGl0eSBlbnRpdHkpIHsKICAgICAgICBNZXRob2ROb2RlIG5vZGUgPSBfZ2V0TWV0aG9kTm9kZShlbGVtZW50RW52aXJvbm1lbnQsIHdvcmxkLCBlbnRpdHkpOwogICAgICAgIGlmIChub2RlLnBhcmFtZXRlclN0cnVjdHVyZS50eXBlUGFyYW1ldGVycyA9PQogICAgICAgICAgICBpbnN0YW50aWF0aW9uLnR5cGVBcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgICAgICBpZiAoZm9yUnRpTmVlZHMpIHsKICAgICAgICAgICAgX2luc3RhbnRpYXRpb25NYXAgPz89IDxHZW5lcmljSW5zdGFudGlhdGlvbiwgU2V0PEVudGl0eT4+e307CiAgICAgICAgICAgIF9pbnN0YW50aWF0aW9uTWFwCiAgICAgICAgICAgICAgICAucHV0SWZBYnNlbnQoaW5zdGFudGlhdGlvbiwgKCkgPT4gbmV3IFNldDxFbnRpdHk+KCkpCiAgICAgICAgICAgICAgICAuYWRkKGVudGl0eSk7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKERhcnRUeXBlIHR5cGUgaW4gaW5zdGFudGlhdGlvbi50eXBlQXJndW1lbnRzKSB7CiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIHRoYXQgaWYgYG5vZGUuZW50aXR5YCBuZWVkcyB0eXBlIGFyZ3VtZW50cyB0aGVuIHNvIGRvCiAgICAgICAgICAgIC8vIHRoZSBlbnRpdGllcyB0aGF0IGRlY2xhcmUgdHlwZSB2YXJpYWJsZXMgb2NjdXJyaW5nIGluIFt0eXBlXS4KICAgICAgICAgICAgcmVnaXN0ZXJEZXBlbmRlbmNpZXMobm9kZSwgdHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICB3b3JsZC5jbG9zdXJpemVkTWVtYmVycy5mb3JFYWNoKHByb2Nlc3NFbnRpdHkpOwogICAgICB3b3JsZC5jbG9zdXJpemVkU3RhdGljcy5mb3JFYWNoKHByb2Nlc3NFbnRpdHkpOwogICAgICB3b3JsZC5nZW5lcmljTG9jYWxGdW5jdGlvbnMuZm9yRWFjaChwcm9jZXNzRW50aXR5KTsKICAgIH0KICB9CgogIHZvaWQgX3Byb3BhZ2F0ZVRlc3RzKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LCBCdWlsdFdvcmxkIHdvcmxkQnVpbGRlcikgewogICAgdm9pZCBwcm9jZXNzVHlwZVZhcmlhYmxlVHlwZShUeXBlVmFyaWFibGVUeXBlIHR5cGUsIHtib29sIGRpcmVjdDogdHJ1ZX0pIHsKICAgICAgVHlwZVZhcmlhYmxlRW50aXR5IHZhcmlhYmxlID0gdHlwZS5lbGVtZW50OwogICAgICBpZiAodmFyaWFibGUudHlwZURlY2xhcmF0aW9uIGlzIENsYXNzRW50aXR5KSB7CiAgICAgICAgX2dldENsYXNzTm9kZSh2YXJpYWJsZS50eXBlRGVjbGFyYXRpb24pLm1hcmtUZXN0KGRpcmVjdDogZGlyZWN0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfZ2V0TWV0aG9kTm9kZSgKICAgICAgICAgICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudCwgd29ybGRCdWlsZGVyLCB2YXJpYWJsZS50eXBlRGVjbGFyYXRpb24pCiAgICAgICAgICAgIC5tYXJrVGVzdChkaXJlY3Q6IGRpcmVjdCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIHByb2Nlc3NUeXBlKERhcnRUeXBlIHR5cGUsIHtib29sIGRpcmVjdDogdHJ1ZX0pIHsKICAgICAgaWYgKHR5cGUgaXMgRnV0dXJlT3JUeXBlKSB7CiAgICAgICAgX2dldENsYXNzTm9kZShjb21tb25FbGVtZW50cy5mdXR1cmVDbGFzcykubWFya0luZGlyZWN0VGVzdCgpOwogICAgICAgIHByb2Nlc3NUeXBlKHR5cGUudHlwZUFyZ3VtZW50LCBkaXJlY3Q6IGZhbHNlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0eXBlLmZvckVhY2hUeXBlVmFyaWFibGUoKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSkgewogICAgICAgICAgcHJvY2Vzc1R5cGVWYXJpYWJsZVR5cGUodHlwZSwgZGlyZWN0OiBkaXJlY3QpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CgogICAgd29ybGRCdWlsZGVyLmlzQ2hlY2tzLmZvckVhY2gocHJvY2Vzc1R5cGUpOwogIH0KCiAgdm9pZCBfcHJvcGFnYXRlTGl0ZXJhbHMoCiAgICAgIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQsIEJ1aWx0V29ybGQgd29ybGQpIHsKICAgIHdvcmxkLnR5cGVWYXJpYWJsZVR5cGVMaXRlcmFscy5mb3JFYWNoKChUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZVR5cGUpIHsKICAgICAgVHlwZVZhcmlhYmxlRW50aXR5IHZhcmlhYmxlID0gdHlwZVZhcmlhYmxlVHlwZS5lbGVtZW50OwogICAgICBpZiAodmFyaWFibGUudHlwZURlY2xhcmF0aW9uIGlzIENsYXNzRW50aXR5KSB7CiAgICAgICAgX2dldENsYXNzTm9kZSh2YXJpYWJsZS50eXBlRGVjbGFyYXRpb24pLm1hcmtEaXJlY3RMaXRlcmFsKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2dldE1ldGhvZE5vZGUoZWxlbWVudEVudmlyb25tZW50LCB3b3JsZCwgdmFyaWFibGUudHlwZURlY2xhcmF0aW9uKQogICAgICAgICAgICAubWFya0RpcmVjdExpdGVyYWwoKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBTdHJpbmcgZHVtcCh7Ym9vbCB2ZXJib3NlOiBmYWxzZX0pIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKCiAgICB2b2lkIGFkZE5vZGUoUnRpTm9kZSBub2RlKSB7CiAgICAgIGlmIChub2RlLmhhc1VzZSB8fCBub2RlLmRlcGVuZGVuY2llcy5pc05vdEVtcHR5IHx8IHZlcmJvc2UpIHsKICAgICAgICBzYi53cml0ZSgnICRub2RlJyk7CiAgICAgICAgU3RyaW5nIGNvbW1hID0gJyc7CiAgICAgICAgaWYgKG5vZGUuX3Rlc3RTdGF0ZSAmIDEgIT0gMCkgewogICAgICAgICAgc2Iud3JpdGUoJyBkaXJlY3QgdGVzdCcpOwogICAgICAgICAgY29tbWEgPSAnLCc7CiAgICAgICAgfQogICAgICAgIGlmIChub2RlLl90ZXN0U3RhdGUgJiAyICE9IDApIHsKICAgICAgICAgIHNiLndyaXRlKCckY29tbWEgaW5kaXJlY3QgdGVzdCcpOwogICAgICAgICAgY29tbWEgPSAnLCc7CiAgICAgICAgfQogICAgICAgIGlmIChub2RlLl9saXRlcmFsU3RhdGUgJiAxICE9IDApIHsKICAgICAgICAgIHNiLndyaXRlKCckY29tbWEgZGlyZWN0IGxpdGVyYWwnKTsKICAgICAgICAgIGNvbW1hID0gJywnOwogICAgICAgIH0KICAgICAgICBpZiAobm9kZS5fbGl0ZXJhbFN0YXRlICYgMiAhPSAwKSB7CiAgICAgICAgICBzYi53cml0ZSgnJGNvbW1hIGluZGlyZWN0IGxpdGVyYWwnKTsKICAgICAgICAgIGNvbW1hID0gJywnOwogICAgICAgIH0KICAgICAgICBpZiAobm9kZS5kZXBlbmRlbmNpZXMuaXNOb3RFbXB0eSB8fCB2ZXJib3NlKSB7CiAgICAgICAgICBzYi53cml0ZWxuKCc6Jyk7CiAgICAgICAgICBub2RlLmRlcGVuZGVuY2llcy5mb3JFYWNoKChuKSA9PiBzYi53cml0ZWxuKCcgICRuJykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzYi53cml0ZWxuKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdm9pZCBhZGRUeXBlKERhcnRUeXBlIHR5cGUpIHsKICAgICAgc2Iud3JpdGVsbignICR0eXBlJyk7CiAgICB9CgogICAgc2Iud3JpdGVsbignY2xhc3NlczonKTsKICAgIF9jbGFzc2VzLnZhbHVlcy5mb3JFYWNoKGFkZE5vZGUpOwogICAgc2Iud3JpdGVsbignbWV0aG9kczonKTsKICAgIF9tZXRob2RzLnZhbHVlcy5mb3JFYWNoKGFkZE5vZGUpOwogICAgc2Iud3JpdGVsbignZXhwbGljaXQgaXMtdGVzdHM6Jyk7CiAgICBleHBsaWNpdElzQ2hlY2tzLmZvckVhY2goYWRkVHlwZSk7CiAgICBzYi53cml0ZWxuKCdpbXBsaWNpdCBpcy10ZXN0czonKTsKICAgIGltcGxpY2l0SXNDaGVja3MuZm9yRWFjaChhZGRUeXBlKTsKCiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIHZvaWQgX2NvbGxlY3RSZXN1bHRzKENvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50LCBEYXJ0VHlwZXMgdHlwZXMsIEJ1aWx0V29ybGQgd29ybGQsCiAgICAgIHtib29sIGZvclJ0aU5lZWRzOiB0cnVlfSkgewogICAgLy8vIFJlZ2lzdGVyIHRoZSBpbXBsaWNpdCBpcy10ZXN0IG9mIFt0eXBlXS4KICAgIC8vLwogICAgLy8vIElmIFt0eXBlXSBpcyBvZiB0aGUgZm9ybSBgRnV0dXJlT3I8WD5gLCBhbHNvIHJlZ2lzdGVyIHRoZSBpbXBsaWNpdAogICAgLy8vIGlzLXRlc3RzIG9mIGBGdXR1cmU8WD5gIGFuZCBgWGAuCiAgICB2b2lkIGFkZEltcGxpY2l0Q2hlY2soRGFydFR5cGUgdHlwZSkgewogICAgICBpZiAoaW1wbGljaXRJc0NoZWNrcy5hZGQodHlwZSkpIHsKICAgICAgICBpZiAodHlwZSBpcyBGdXR1cmVPclR5cGUpIHsKICAgICAgICAgIGFkZEltcGxpY2l0Q2hlY2soY29tbW9uRWxlbWVudHMuZnV0dXJlVHlwZSh0eXBlLnR5cGVBcmd1bWVudCkpOwogICAgICAgICAgYWRkSW1wbGljaXRDaGVjayh0eXBlLnR5cGVBcmd1bWVudCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdm9pZCBhZGRJbXBsaWNpdENoZWNrcyhJdGVyYWJsZTxEYXJ0VHlwZT4gdHlwZXMpIHsKICAgICAgdHlwZXMuZm9yRWFjaChhZGRJbXBsaWNpdENoZWNrKTsKICAgIH0KCiAgICB3b3JsZC5pc0NoZWNrcy5mb3JFYWNoKChEYXJ0VHlwZSB0eXBlKSB7CiAgICAgIGlmICh0eXBlIGlzIEZ1dHVyZU9yVHlwZSkgewogICAgICAgIGFkZEltcGxpY2l0Q2hlY2soY29tbW9uRWxlbWVudHMuZnV0dXJlVHlwZSh0eXBlLnR5cGVBcmd1bWVudCkpOwogICAgICAgIGFkZEltcGxpY2l0Q2hlY2sodHlwZS50eXBlQXJndW1lbnQpOwogICAgICB9CiAgICB9KTsKCiAgICAvLyBDb21wdXRlIHR5cGUgYXJndW1lbnRzIG9mIGNsYXNzZXMgdGhhdCB1c2Ugb25lIG9mIHRoZWlyIHR5cGUgdmFyaWFibGVzIGluCiAgICAvLyBpcy1jaGVja3MgYW5kIGFkZCB0aGUgaXMtY2hlY2tzIHRoYXQgdGhleSBpbXBseS4KICAgIF9jbGFzc2VzLmZvckVhY2goKENsYXNzRW50aXR5IGNscywgQ2xhc3NOb2RlIG5vZGUpIHsKICAgICAgaWYgKCFub2RlLmhhc1Rlc3QpIHJldHVybjsKICAgICAgLy8gRmluZCBhbGwgaW5zdGFudGlhdGVkIHR5cGVzIHRoYXQgYXJlIGEgc3VidHlwZSBvZiBhIGNsYXNzIHRoYXQgdXNlcwogICAgICAvLyBvbmUgb2YgaXRzIHR5cGUgYXJndW1lbnRzIGluIGFuIGlzLWNoZWNrIGFuZCBhZGQgdGhlIGFyZ3VtZW50cyB0byB0aGUKICAgICAgLy8gc2V0IG9mIGlzLWNoZWNrcy4KICAgICAgZm9yIChJbnRlcmZhY2VUeXBlIHR5cGUgaW4gd29ybGQuaW5zdGFudGlhdGVkVHlwZXMpIHsKICAgICAgICAvLyBXZSBuZWVkIHRoZSB0eXBlIGFzIGluc3RhbmNlIG9mIGl0cyBzdXBlcmNsYXNzIGFueXdheSwgc28gd2UganVzdAogICAgICAgIC8vIHRyeSB0byBjb21wdXRlIHRoZSBzdWJzdGl0dXRpb247IGlmIHRoZSByZXN1bHQgaXMgWzpudWxsOl0sIHRoZQogICAgICAgIC8vIGNsYXNzZXMgYXJlIG5vdCByZWxhdGVkLgogICAgICAgIEludGVyZmFjZVR5cGUgaW5zdGFuY2UgPSB0eXBlcy5hc0luc3RhbmNlT2YodHlwZSwgY2xzKTsKICAgICAgICBpZiAoaW5zdGFuY2UgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChEYXJ0VHlwZSBhcmd1bWVudCBpbiBpbnN0YW5jZS50eXBlQXJndW1lbnRzKSB7CiAgICAgICAgICAgIGFkZEltcGxpY2l0Q2hlY2soYXJndW1lbnQudW5hbGlhc2VkKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0pOwoKICAgIHdvcmxkLmZvckVhY2hTdGF0aWNUeXBlQXJndW1lbnQoCiAgICAgICAgKEVudGl0eSBmdW5jdGlvbiwgSXRlcmFibGU8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgICAgaWYgKCFfZ2V0TWV0aG9kTm9kZShlbGVtZW50RW52aXJvbm1lbnQsIHdvcmxkLCBmdW5jdGlvbikuaGFzVGVzdCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBhZGRJbXBsaWNpdENoZWNrcyh0eXBlQXJndW1lbnRzKTsKICAgIH0pOwoKICAgIGlmIChmb3JSdGlOZWVkcykgewogICAgICBfYXBwbGllZFNlbGVjdG9yTWFwID0gPFNlbGVjdG9yLCBTZXQ8RW50aXR5Pj57fTsKICAgIH0KCiAgICB3b3JsZC5mb3JFYWNoRHluYW1pY1R5cGVBcmd1bWVudCgKICAgICAgICAoU2VsZWN0b3Igc2VsZWN0b3IsIEl0ZXJhYmxlPERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICAgIGZvciAoTWV0aG9kTm9kZSBub2RlIGluIF9tZXRob2RzLnZhbHVlcykgewogICAgICAgIGlmIChub2RlLnNlbGVjdG9yQXBwbGllcyhzZWxlY3RvcikpIHsKICAgICAgICAgIGlmIChmb3JSdGlOZWVkcykgewogICAgICAgICAgICBfYXBwbGllZFNlbGVjdG9yTWFwCiAgICAgICAgICAgICAgICAucHV0SWZBYnNlbnQoc2VsZWN0b3IsICgpID0+IG5ldyBTZXQ8RW50aXR5PigpKQogICAgICAgICAgICAgICAgLmFkZChub2RlLmVudGl0eSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAobm9kZS5oYXNUZXN0KSB7CiAgICAgICAgICAgIGFkZEltcGxpY2l0Q2hlY2tzKHR5cGVBcmd1bWVudHMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQp9CgovLy8gSW50ZXJmYWNlIGZvciB0aGUgY2xhc3NlcyBhbmQgbWV0aG9kcyB0aGF0IG5lZWQgcnVudGltZSB0eXBlcy4KYWJzdHJhY3QgY2xhc3MgUnVudGltZVR5cGVzTmVlZCB7CiAgLy8vIERlc2VyaWFsaXplcyBhIFtSdW50aW1lVHlwZXNOZWVkXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IFJ1bnRpbWVUeXBlc05lZWQucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCkgewogICAgYm9vbCBpc1RyaXZpYWwgPSBzb3VyY2UucmVhZEJvb2woKTsKICAgIGlmIChpc1RyaXZpYWwpIHsKICAgICAgcmV0dXJuIGNvbnN0IFRyaXZpYWxSdW50aW1lVHlwZXNOZWVkKCk7CiAgICB9CiAgICByZXR1cm4gbmV3IFJ1bnRpbWVUeXBlc05lZWRJbXBsLnJlYWRGcm9tRGF0YVNvdXJjZSgKICAgICAgICBzb3VyY2UsIGVsZW1lbnRFbnZpcm9ubWVudCk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtSdW50aW1lVHlwZXNOZWVkXSB0byBbc2lua10uCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luayk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbY2xzXSBuZWVkcyB0eXBlIGFyZ3VtZW50cyBhdCBydW50aW1lIHR5cGUuCiAgLy8vCiAgLy8vIFRoaXMgaXMgZm9yIGluc3RhbmNlIHRoZSBjYXNlIGZvciBnZW5lcmljIGNsYXNzZXMgdXNlZCBpbiBhIHR5cGUgdGVzdDoKICAvLy8KICAvLy8gICBjbGFzcyBDPFQ+IHt9CiAgLy8vICAgbWFpbigpIHsKICAvLy8gICAgIG5ldyBDPGludD4oKSBpcyBDPGludD47CiAgLy8vICAgICBuZXcgQzxTdHJpbmc+KCkgaXMgQzxTdHJpbmc+OwogIC8vLyAgIH0KICAvLy8KICBib29sIGNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbWV0aG9kXSBuZWVkcyB0eXBlIGFyZ3VtZW50cyBhdCBydW50aW1lIHR5cGUuCiAgLy8vCiAgLy8vIFRoaXMgaXMgZm9yIGluc3RhbmNlIHRoZSBjYXNlIGZvciBnZW5lcmljIG1ldGhvZHMgdGhhdCB1c2UgdHlwZSB0ZXN0czoKICAvLy8KICAvLy8gICBtZXRob2Q8VD4oVCB0KSA9PiB0IGlzIFQ7CiAgLy8vICAgbWFpbigpIHsKICAvLy8gICAgIG1ldGhvZDxpbnQ+KDApOwogIC8vLyAgICAgbWV0aG9kPFN0cmluZz4oJycpOwogIC8vLyAgIH0KICAvLy8KICBib29sIG1ldGhvZE5lZWRzVHlwZUFyZ3VtZW50cyhGdW5jdGlvbkVudGl0eSBtZXRob2QpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYSBzaWduYXR1cmUgaXMgbmVlZGVkIGZvciBbbWV0aG9kXS4KICAvLy8KICAvLy8gQSBzaWduYXR1cmUgaXMgYSBydW50aW1lIG1ldGhvZCB0eXBlIGRlc2NyaXB0b3IgZnVuY3Rpb24gdGhhdCBjcmVhdGVzCiAgLy8vIGEgcnVudGltZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHlwZSBvZiB0aGUgbWV0aG9kLgogIC8vLwogIC8vLyBUaGlzIGlzIGZvciBpbnN0YW5jZSBuZWVkZWQgZm9yIGluc3RhbmNlIG1ldGhvZHMgb2YgZ2VuZXJpYyBjbGFzc2VzIHRoYXQKICAvLy8gYXJlIHRvcm4gb2ZmIGFuZCB3aG9zZSB0eXBlIHRoZXJlZm9yZSBwb3RlbnRpYWxseSBpcyB1c2VkIGluIGEgdHlwZSB0ZXN0OgogIC8vLwogIC8vLyAgICAgY2xhc3MgQzxUPiB7CiAgLy8vICAgICAgIG1ldGhvZChUIHQpIHt9CiAgLy8vICAgICB9CiAgLy8vICAgICBtYWluKCkgewogIC8vLyAgICAgICBuZXcgQzxpbnQ+KCkubWV0aG9kIGlzIHZvaWQgRnVuY3Rpb24oaW50KTsKICAvLy8gICAgICAgbmV3IEM8U3RyaW5nPigpLm1ldGhvZCBpcyB2b2lkIEZ1bmN0aW9uKFN0cmluZyk7CiAgLy8vICAgICB9CiAgLy8vCiAgLy8vIFNpbmNlIHR5cGUgb2YgdGhlIG1ldGhvZCBkZXBlbmRzIG9uIHRoZSB0eXBlIGFyZ3VtZW50IG9mIGl0cyBlbmNsb3NpbmcKICAvLy8gY2xhc3MsIHRoZSB0eXBlIG9mIHRoZSBtZXRob2QgaXMgYSBKYXZhU2NyaXB0IGZ1bmN0aW9uIGxpa2U6CiAgLy8vCiAgLy8vICAgIHNpZ25hdHVyZTogZnVuY3Rpb24gKFQpIHsKICAvLy8gICAgICByZXR1cm4geydmdW5jJzogdHJ1ZSwgcGFyYW1zOiBbVF19OwogIC8vLyAgICB9CiAgLy8vCiAgYm9vbCBtZXRob2ROZWVkc1NpZ25hdHVyZShGdW5jdGlvbkVudGl0eSBtZXRob2QpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYSBkeW5hbWljIGNhbGwgb2YgW3NlbGVjdG9yXSBuZWVkcyB0byBwYXNzIHR5cGUKICAvLy8gYXJndW1lbnRzLgogIGJvb2wgc2VsZWN0b3JOZWVkc1R5cGVBcmd1bWVudHMoU2VsZWN0b3Igc2VsZWN0b3IpOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYSBnZW5lcmljIGluc3RhbnRpYXRpb24gb24gYW4gZXhwcmVzc2lvbiBvZiB0eXBlCiAgLy8vIFtmdW5jdGlvblR5cGVdIHdpdGggdGhlIGdpdmVuIFt0eXBlQXJndW1lbnRDb3VudF0gbmVlZHMgdG8gcGFzcyB0eXBlCiAgLy8vIGFyZ3VtZW50cy4KICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgW2Z1bmN0aW9uVHlwZV0uCiAgYm9vbCBpbnN0YW50aWF0aW9uTmVlZHNUeXBlQXJndW1lbnRzKAogICAgICBEYXJ0VHlwZSBmdW5jdGlvblR5cGUsIGludCB0eXBlQXJndW1lbnRDb3VudCk7Cn0KCmNsYXNzIFRyaXZpYWxSdW50aW1lVHlwZXNOZWVkIGltcGxlbWVudHMgUnVudGltZVR5cGVzTmVlZCB7CiAgY29uc3QgVHJpdmlhbFJ1bnRpbWVUeXBlc05lZWQoKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUJvb2wodHJ1ZSk7IC8vIElzIHRyaXZpYWwuCiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKENsYXNzRW50aXR5IGNscykgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBtZXRob2ROZWVkc1NpZ25hdHVyZShGdW5jdGlvbkVudGl0eSBtZXRob2QpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgbWV0aG9kTmVlZHNUeXBlQXJndW1lbnRzKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgPT4KICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQWxpZ24gaGFuZGxpbmcgb2YgdHlwZSBhcmd1bWVudHMgcGFzc2VkIHRvIGZhY3RvcnkKICAgICAgLy8gY29uc3RydWN0b3JzIHdpdGggdHlwZSBhcmd1bWVudHMgcGFzc2VkIHRoZSByZWd1bGFyIGdlbmVyaWMgbWV0aG9kcy4KICAgICAgIShtZXRob2QgaXMgQ29uc3RydWN0b3JFbnRpdHkgJiYgbWV0aG9kLmlzRmFjdG9yeUNvbnN0cnVjdG9yKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBzZWxlY3Rvck5lZWRzVHlwZUFyZ3VtZW50cyhTZWxlY3RvciBzZWxlY3RvcikgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpbnN0YW50aWF0aW9uTmVlZHNUeXBlQXJndW1lbnRzKAogICAgICBEYXJ0VHlwZSBmdW5jdGlvblR5cGUsIGludCB0eXBlQXJndW1lbnRDb3VudCkgewogICAgcmV0dXJuIHRydWU7CiAgfQp9CgpjbGFzcyBSdW50aW1lVHlwZXNOZWVkSW1wbCBpbXBsZW1lbnRzIFJ1bnRpbWVUeXBlc05lZWQgewogIC8vLyBUYWcgdXNlZCBmb3IgaWRlbnRpZnlpbmcgc2VyaWFsaXplZCBbUnVudGltZVR5cGVzTmVlZF0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdydW50aW1lLXR5cGVzLW5lZWQnOwoKICBmaW5hbCBFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50czsKICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IG1ldGhvZHNOZWVkaW5nU2lnbmF0dXJlOwogIGZpbmFsIFNldDxGdW5jdGlvbkVudGl0eT4gbWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzOwogIGZpbmFsIFNldDxMb2NhbD4gbG9jYWxGdW5jdGlvbnNOZWVkaW5nU2lnbmF0dXJlOwogIGZpbmFsIFNldDxMb2NhbD4gbG9jYWxGdW5jdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50czsKICBmaW5hbCBTZXQ8U2VsZWN0b3I+IHNlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzOwogIGZpbmFsIFNldDxpbnQ+IGluc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHM7CgogIFJ1bnRpbWVUeXBlc05lZWRJbXBsKAogICAgICB0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgIHRoaXMuY2xhc3Nlc05lZWRpbmdUeXBlQXJndW1lbnRzLAogICAgICB0aGlzLm1ldGhvZHNOZWVkaW5nU2lnbmF0dXJlLAogICAgICB0aGlzLm1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50cywKICAgICAgdGhpcy5sb2NhbEZ1bmN0aW9uc05lZWRpbmdTaWduYXR1cmUsCiAgICAgIHRoaXMubG9jYWxGdW5jdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cywKICAgICAgdGhpcy5zZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50cywKICAgICAgdGhpcy5pbnN0YW50aWF0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzKTsKCiAgZmFjdG9yeSBSdW50aW1lVHlwZXNOZWVkSW1wbC5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgIERhdGFTb3VyY2Ugc291cmNlLCBFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50KSB7CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIFNldDxDbGFzc0VudGl0eT4gY2xhc3Nlc05lZWRpbmdUeXBlQXJndW1lbnRzID0KICAgICAgICBzb3VyY2UucmVhZENsYXNzZXM8Q2xhc3NFbnRpdHk+KCkudG9TZXQoKTsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gbWV0aG9kc05lZWRpbmdTaWduYXR1cmUgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyczxGdW5jdGlvbkVudGl0eT4oKS50b1NldCgpOwogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBtZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMgPQogICAgICAgIHNvdXJjZS5yZWFkTWVtYmVyczxGdW5jdGlvbkVudGl0eT4oKS50b1NldCgpOwogICAgU2V0PFNlbGVjdG9yPiBzZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50cyA9CiAgICAgICAgc291cmNlLnJlYWRMaXN0KCgpID0+IG5ldyBTZWxlY3Rvci5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKSkudG9TZXQoKTsKICAgIFNldDxpbnQ+IGluc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHMgPQogICAgICAgIHNvdXJjZS5yZWFkTGlzdChzb3VyY2UucmVhZEludCkudG9TZXQoKTsKICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgUnVudGltZVR5cGVzTmVlZEltcGwoCiAgICAgICAgZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIGNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50cywKICAgICAgICBtZXRob2RzTmVlZGluZ1NpZ25hdHVyZSwKICAgICAgICBtZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMsCiAgICAgICAgbnVsbCwKICAgICAgICBudWxsLAogICAgICAgIHNlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzLAogICAgICAgIGluc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVRvRGF0YVNpbmsoRGF0YVNpbmsgc2luaykgewogICAgc2luay53cml0ZUJvb2woZmFsc2UpOyAvLyBJcyBfbm90XyB0cml2aWFsLgogICAgc2luay5iZWdpbih0YWcpOwogICAgc2luay53cml0ZUNsYXNzZXMoY2xhc3Nlc05lZWRpbmdUeXBlQXJndW1lbnRzKTsKICAgIHNpbmsud3JpdGVNZW1iZXJzKG1ldGhvZHNOZWVkaW5nU2lnbmF0dXJlKTsKICAgIHNpbmsud3JpdGVNZW1iZXJzKG1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50cyk7CiAgICBhc3NlcnQobG9jYWxGdW5jdGlvbnNOZWVkaW5nU2lnbmF0dXJlID09IG51bGwpOwogICAgYXNzZXJ0KGxvY2FsRnVuY3Rpb25zTmVlZGluZ1R5cGVBcmd1bWVudHMgPT0gbnVsbCk7CiAgICBzaW5rLndyaXRlTGlzdChzZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50cywKICAgICAgICAoU2VsZWN0b3Igc2VsZWN0b3IpID0+IHNlbGVjdG9yLndyaXRlVG9EYXRhU2luayhzaW5rKSk7CiAgICBzaW5rLndyaXRlTGlzdChpbnN0YW50aWF0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzLCBzaW5rLndyaXRlSW50KTsKICAgIHNpbmsuZW5kKHRhZyk7CiAgfQoKICBib29sIGNoZWNrQ2xhc3MoY292YXJpYW50IENsYXNzRW50aXR5IGNscykgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIGFzc2VydChjaGVja0NsYXNzKGNscykpOwogICAgaWYgKCFfZWxlbWVudEVudmlyb25tZW50LmlzR2VuZXJpY0NsYXNzKGNscykpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBjbGFzc2VzTmVlZGluZ1R5cGVBcmd1bWVudHMuY29udGFpbnMoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgbWV0aG9kTmVlZHNTaWduYXR1cmUoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIHJldHVybiBtZXRob2RzTmVlZGluZ1NpZ25hdHVyZS5jb250YWlucyhmdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG1ldGhvZE5lZWRzVHlwZUFyZ3VtZW50cyhGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgcmV0dXJuIG1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50cy5jb250YWlucyhmdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHNlbGVjdG9yTmVlZHNUeXBlQXJndW1lbnRzKFNlbGVjdG9yIHNlbGVjdG9yKSB7CiAgICBpZiAoc2VsZWN0b3IuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCA9PSAwKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHMuY29udGFpbnMoc2VsZWN0b3IpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpbnN0YW50aWF0aW9uTmVlZHNUeXBlQXJndW1lbnRzKAogICAgICBEYXJ0VHlwZSBmdW5jdGlvblR5cGUsIGludCB0eXBlQXJndW1lbnRDb3VudCkgewogICAgcmV0dXJuIGluc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHMuY29udGFpbnModHlwZUFyZ3VtZW50Q291bnQpOwogIH0KfQoKLy8vIEludGVyZmFjZSBmb3IgY29tcHV0aW5nIGNsYXNzZXMgYW5kIG1ldGhvZHMgdGhhdCBuZWVkIHJ1bnRpbWUgdHlwZXMuCmFic3RyYWN0IGNsYXNzIFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyIHsKICAvLy8gUmVnaXN0ZXJzIHRoYXQgW2Nsc10gdXNlcyBvbmUgb2YgaXRzIHR5cGUgdmFyaWFibGVzIGFzIGEgbGl0ZXJhbC4KICB2b2lkIHJlZ2lzdGVyQ2xhc3NVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWwoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJlZ2lzdGVycyB0aGF0IFttZXRob2RdIHVzZXMgb25lIG9mIGl0cyB0eXBlIHZhcmlhYmxlcyBhcyBhIGxpdGVyYWwuCiAgdm9pZCByZWdpc3Rlck1ldGhvZFVzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbChGdW5jdGlvbkVudGl0eSBtZXRob2QpOwoKICAvLy8gUmVnaXN0ZXJzIHRoYXQgW2xvY2FsRnVuY3Rpb25dIHVzZXMgb25lIG9mIGl0cyB0eXBlIHZhcmlhYmxlcyBhcyBhCiAgLy8vIGxpdGVyYWwuCiAgdm9pZCByZWdpc3RlckxvY2FsRnVuY3Rpb25Vc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWwoTG9jYWwgbG9jYWxGdW5jdGlvbik7CgogIC8vLyBSZWdpc3RlcnMgdGhhdCBhIGdlbmVyaWMgW2luc3RhbnRpYXRpb25dIGlzIHVzZWQuCiAgdm9pZCByZWdpc3RlckdlbmVyaWNJbnN0YW50aWF0aW9uKEdlbmVyaWNJbnN0YW50aWF0aW9uIGluc3RhbnRpYXRpb24pOwoKICAvLy8gQ29tcHV0ZXMgdGhlIFtSdW50aW1lVHlwZXNOZWVkXSBmb3IgdGhlIGRhdGEgcmVnaXN0ZXJlZCB3aXRoIHRoaXMgYnVpbGRlci4KICBSdW50aW1lVHlwZXNOZWVkIGNvbXB1dGVSdW50aW1lVHlwZXNOZWVkKAogICAgICBLQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zKTsKfQoKY2xhc3MgVHJpdmlhbFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyIGltcGxlbWVudHMgUnVudGltZVR5cGVzTmVlZEJ1aWxkZXIgewogIGNvbnN0IFRyaXZpYWxSdW50aW1lVHlwZXNOZWVkQnVpbGRlcigpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ2xhc3NVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWwoQ2xhc3NFbnRpdHkgY2xzKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTWV0aG9kVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFsKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckxvY2FsRnVuY3Rpb25Vc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWwoTG9jYWwgbG9jYWxGdW5jdGlvbikge30KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckdlbmVyaWNJbnN0YW50aWF0aW9uKEdlbmVyaWNJbnN0YW50aWF0aW9uIGluc3RhbnRpYXRpb24pIHt9CgogIEBvdmVycmlkZQogIFJ1bnRpbWVUeXBlc05lZWQgY29tcHV0ZVJ1bnRpbWVUeXBlc05lZWQoCiAgICAgIEtDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMpIHsKICAgIHJldHVybiBjb25zdCBUcml2aWFsUnVudGltZVR5cGVzTmVlZCgpOwogIH0KfQoKY2xhc3MgUnVudGltZVR5cGVzTmVlZEJ1aWxkZXJJbXBsIGltcGxlbWVudHMgUnVudGltZVR5cGVzTmVlZEJ1aWxkZXIgewogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwoKICBmaW5hbCBTZXQ8Q2xhc3NFbnRpdHk+IGNsYXNzZXNVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxzID0KICAgICAgbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKCiAgZmluYWwgU2V0PEZ1bmN0aW9uRW50aXR5PiBtZXRob2RzVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFscyA9CiAgICAgIG5ldyBTZXQ8RnVuY3Rpb25FbnRpdHk+KCk7CgogIGZpbmFsIFNldDxMb2NhbD4gbG9jYWxGdW5jdGlvbnNVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxzID0gbmV3IFNldDxMb2NhbD4oKTsKCiAgTWFwPFNlbGVjdG9yLCBTZXQ8RW50aXR5Pj4gc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHNGb3JUZXN0aW5nOwoKICBNYXA8R2VuZXJpY0luc3RhbnRpYXRpb24sIFNldDxFbnRpdHk+PgogICAgICBpbnN0YW50aWF0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzRm9yVGVzdGluZzsKCiAgZmluYWwgU2V0PEdlbmVyaWNJbnN0YW50aWF0aW9uPiBfZ2VuZXJpY0luc3RhbnRpYXRpb25zID0KICAgICAgbmV3IFNldDxHZW5lcmljSW5zdGFudGlhdGlvbj4oKTsKCiAgVHlwZVZhcmlhYmxlVGVzdHMgdHlwZVZhcmlhYmxlVGVzdHNGb3JUZXN0aW5nOwoKICBSdW50aW1lVHlwZXNOZWVkQnVpbGRlckltcGwodGhpcy5fZWxlbWVudEVudmlyb25tZW50KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNsYXNzVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFsKENsYXNzRW50aXR5IGNscykgewogICAgY2xhc3Nlc1VzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbHMuYWRkKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTWV0aG9kVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFsKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgewogICAgbWV0aG9kc1VzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbHMuYWRkKG1ldGhvZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTG9jYWxGdW5jdGlvblVzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbChMb2NhbCBsb2NhbEZ1bmN0aW9uKSB7CiAgICBsb2NhbEZ1bmN0aW9uc1VzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbHMuYWRkKGxvY2FsRnVuY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckdlbmVyaWNJbnN0YW50aWF0aW9uKEdlbmVyaWNJbnN0YW50aWF0aW9uIGluc3RhbnRpYXRpb24pIHsKICAgIF9nZW5lcmljSW5zdGFudGlhdGlvbnMuYWRkKGluc3RhbnRpYXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgUnVudGltZVR5cGVzTmVlZCBjb21wdXRlUnVudGltZVR5cGVzTmVlZCgKICAgICAgS0Nsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLCBDb21waWxlck9wdGlvbnMgb3B0aW9ucykgewogICAgVHlwZVZhcmlhYmxlVGVzdHMgdHlwZVZhcmlhYmxlVGVzdHMgPSBuZXcgVHlwZVZhcmlhYmxlVGVzdHMoCiAgICAgICAgY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLAogICAgICAgIGNsb3NlZFdvcmxkLmRhcnRUeXBlcywKICAgICAgICBjbG9zZWRXb3JsZCwKICAgICAgICBfZ2VuZXJpY0luc3RhbnRpYXRpb25zKTsKICAgIFNldDxDbGFzc0VudGl0eT4gY2xhc3Nlc05lZWRpbmdUeXBlQXJndW1lbnRzID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gbWV0aG9kc05lZWRpbmdTaWduYXR1cmUgPSBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwogICAgU2V0PEZ1bmN0aW9uRW50aXR5PiBtZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMgPSBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwogICAgU2V0PExvY2FsPiBsb2NhbEZ1bmN0aW9uc05lZWRpbmdTaWduYXR1cmUgPSBuZXcgU2V0PExvY2FsPigpOwogICAgU2V0PExvY2FsPiBsb2NhbEZ1bmN0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzID0gbmV3IFNldDxMb2NhbD4oKTsKICAgIFNldDxFbnRpdHk+IHByb2Nlc3NlZEVudGl0aWVzID0gbmV3IFNldDxFbnRpdHk+KCk7CgogICAgLy8gRmluZCB0aGUgY2xhc3NlcyB0aGF0IG5lZWQgdHlwZSBhcmd1bWVudHMgYXQgcnVudGltZS4gU3VjaAogICAgLy8gY2xhc3NlcyBhcmU6CiAgICAvLyAoMSkgdXNlZCBpbiBhbiBpcyBjaGVjayB3aXRoIHR5cGUgdmFyaWFibGVzLAogICAgLy8gKDIpIGRlcGVuZGVuY2llcyBvZiBjbGFzc2VzIGluICgxKSwKICAgIC8vICgzKSBzdWJjbGFzc2VzIG9mICgyKSBhbmQgKDMpLgogICAgdm9pZCBwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKEVudGl0eSBlbnRpdHkpIHsKICAgICAgLy8gRnVuY3Rpb25zIHdpdGggdHlwZSBhcmd1bWVudHMgY2FuIGhhdmUgZGVwZW5kZW5jaWVzIG9mIGVhY2ggb3RoZXIgKGlmCiAgICAgIC8vIHRoZSBmdW5jdGlvbnMgY2FsbCBlYWNoIG90aGVyKSBzbyB3ZSBrZWVwIGEgc2V0IHRvIHByZXZlbnQgaW5maW5pdGVseQogICAgICAvLyByZWN1cnNpbmcgb3ZlciB0aGUgc2FtZSBlbnRpdGllcy4KICAgICAgaWYgKHByb2Nlc3NlZEVudGl0aWVzLmNvbnRhaW5zKGVudGl0eSkpIHJldHVybjsKCiAgICAgIHByb2Nlc3NlZEVudGl0aWVzLmFkZChlbnRpdHkpOwogICAgICBpZiAoZW50aXR5IGlzIENsYXNzRW50aXR5KSB7CiAgICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gZW50aXR5OwogICAgICAgIGlmICghX2VsZW1lbnRFbnZpcm9ubWVudC5pc0dlbmVyaWNDbGFzcyhjbHMpKSByZXR1cm47CiAgICAgICAgaWYgKGNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50cy5jb250YWlucyhjbHMpKSByZXR1cm47CiAgICAgICAgY2xhc3Nlc05lZWRpbmdUeXBlQXJndW1lbnRzLmFkZChjbHMpOwoKICAgICAgICAvLyBUT0RPKG5nZW9mZnJheSk6IFRoaXMgc2hvdWxkIHVzZSBzdWJjbGFzc2VzLCBub3Qgc3VidHlwZXMuCiAgICAgICAgY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuZm9yRWFjaFN0cmljdFN1YnR5cGVPZihjbHMsCiAgICAgICAgICAgIChDbGFzc0VudGl0eSBzdWIpIHsKICAgICAgICAgIHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHMoc3ViKTsKICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGVwLkNPTlRJTlVFOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKGVudGl0eSBpcyBGdW5jdGlvbkVudGl0eSkgewogICAgICAgIG1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50cy5hZGQoZW50aXR5KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBsb2NhbEZ1bmN0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzLmFkZChlbnRpdHkpOwogICAgICB9CgogICAgICBJdGVyYWJsZTxFbnRpdHk+IGRlcGVuZGVuY2llcyA9CiAgICAgICAgICB0eXBlVmFyaWFibGVUZXN0cy5nZXRUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMoZW50aXR5KTsKICAgICAgZGVwZW5kZW5jaWVzLmZvckVhY2goKEVudGl0eSBvdGhlcikgewogICAgICAgIHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHMob3RoZXIpOwogICAgICB9KTsKICAgIH0KCiAgICBTZXQ8TG9jYWw+IGxvY2FsRnVuY3Rpb25zID0gY2xvc2VkV29ybGQubG9jYWxGdW5jdGlvbnMudG9TZXQoKTsKICAgIFNldDxGdW5jdGlvbkVudGl0eT4gY2xvc3VyaXplZE1lbWJlcnMgPQogICAgICAgIGNsb3NlZFdvcmxkLmNsb3N1cml6ZWRNZW1iZXJzV2l0aEZyZWVUeXBlVmFyaWFibGVzLnRvU2V0KCk7CgogICAgLy8gQ2hlY2sgbG9jYWwgZnVuY3Rpb25zIGFuZCBjbG9zdXJpemVkIG1lbWJlcnMuCiAgICB2b2lkIGNoZWNrQ2xvc3VyZXMoe0RhcnRUeXBlIHBvdGVudGlhbFN1YnR5cGVPZn0pIHsKICAgICAgYm9vbCBjaGVja0Z1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlKSB7CiAgICAgICAgQ2xhc3NFbnRpdHkgY29udGV4dENsYXNzID0gRGFydFR5cGVzLmdldENsYXNzQ29udGV4dChmdW5jdGlvblR5cGUpOwogICAgICAgIGlmIChjb250ZXh0Q2xhc3MgIT0gbnVsbCAmJgogICAgICAgICAgICAocG90ZW50aWFsU3VidHlwZU9mID09IG51bGwgfHwKICAgICAgICAgICAgICAgIGNsb3NlZFdvcmxkLmRhcnRUeXBlcwogICAgICAgICAgICAgICAgICAgIC5pc1BvdGVudGlhbFN1YnR5cGUoZnVuY3Rpb25UeXBlLCBwb3RlbnRpYWxTdWJ0eXBlT2YpKSkgewogICAgICAgICAgcG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cyhjb250ZXh0Q2xhc3MpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICAgU2V0PExvY2FsPiBsb2NhbEZ1bmN0aW9uc1RvUmVtb3ZlOwogICAgICBTZXQ8RnVuY3Rpb25FbnRpdHk+IGNsb3N1cml6ZWRNZW1iZXJzVG9SZW1vdmU7CiAgICAgIGZvciAoTG9jYWwgZnVuY3Rpb24gaW4gbG9jYWxGdW5jdGlvbnMpIHsKICAgICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0KICAgICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRMb2NhbEZ1bmN0aW9uVHlwZShmdW5jdGlvbik7CiAgICAgICAgaWYgKHBvdGVudGlhbFN1YnR5cGVPZiA9PSBudWxsIHx8CiAgICAgICAgICAgIGNsb3NlZFdvcmxkLmRhcnRUeXBlcwogICAgICAgICAgICAgICAgLmlzUG90ZW50aWFsU3VidHlwZShmdW5jdGlvblR5cGUsIHBvdGVudGlhbFN1YnR5cGVPZiwKICAgICAgICAgICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgcmVnaXN0ZXIgZ2VuZXJpYyBpbnN0YW50aWF0aW9ucwogICAgICAgICAgICAgICAgICAgIC8vIGluc3RlYWQuCiAgICAgICAgICAgICAgICAgICAgYXNzdW1lSW5zdGFudGlhdGlvbnM6IF9nZW5lcmljSW5zdGFudGlhdGlvbnMuaXNOb3RFbXB0eSkpIHsKICAgICAgICAgIGZ1bmN0aW9uVHlwZS5mb3JFYWNoVHlwZVZhcmlhYmxlKChUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSkgewogICAgICAgICAgICBFbnRpdHkgdHlwZURlY2xhcmF0aW9uID0gdHlwZVZhcmlhYmxlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uOwogICAgICAgICAgICBpZiAoIXByb2Nlc3NlZEVudGl0aWVzLmNvbnRhaW5zKHR5cGVEZWNsYXJhdGlvbikpIHsKICAgICAgICAgICAgICBwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKHR5cGVEZWNsYXJhdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgbG9jYWxGdW5jdGlvbnNOZWVkaW5nU2lnbmF0dXJlLmFkZChmdW5jdGlvbik7CiAgICAgICAgICBsb2NhbEZ1bmN0aW9uc1RvUmVtb3ZlID8/PSBuZXcgU2V0PExvY2FsPigpOwogICAgICAgICAgbG9jYWxGdW5jdGlvbnNUb1JlbW92ZS5hZGQoZnVuY3Rpb24pOwogICAgICAgIH0KICAgICAgfQogICAgICBmb3IgKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uIGluIGNsb3N1cml6ZWRNZW1iZXJzKSB7CiAgICAgICAgaWYgKGNoZWNrRnVuY3Rpb25UeXBlKF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGZ1bmN0aW9uKSkpIHsKICAgICAgICAgIG1ldGhvZHNOZWVkaW5nU2lnbmF0dXJlLmFkZChmdW5jdGlvbik7CiAgICAgICAgICBjbG9zdXJpemVkTWVtYmVyc1RvUmVtb3ZlID8/PSBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwogICAgICAgICAgY2xvc3VyaXplZE1lbWJlcnNUb1JlbW92ZS5hZGQoZnVuY3Rpb24pOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAobG9jYWxGdW5jdGlvbnNUb1JlbW92ZSAhPSBudWxsKSB7CiAgICAgICAgbG9jYWxGdW5jdGlvbnMucmVtb3ZlQWxsKGxvY2FsRnVuY3Rpb25zVG9SZW1vdmUpOwogICAgICB9CiAgICAgIGlmIChjbG9zdXJpemVkTWVtYmVyc1RvUmVtb3ZlICE9IG51bGwpIHsKICAgICAgICBjbG9zdXJpemVkTWVtYmVycy5yZW1vdmVBbGwoY2xvc3VyaXplZE1lbWJlcnNUb1JlbW92ZSk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBDb21wdXRlIHRoZSBzZXQgb2YgYWxsIGNsYXNzZXMgYW5kIG1ldGhvZHMgdGhhdCBuZWVkIHJ1bnRpbWUgdHlwZQogICAgLy8gaW5mb3JtYXRpb24uCgogICAgdm9pZCBwcm9jZXNzQ2hlY2tzKFNldDxEYXJ0VHlwZT4gY2hlY2tzKSB7CiAgICAgIGNoZWNrcy5mb3JFYWNoKChEYXJ0VHlwZSB0eXBlKSB7CiAgICAgICAgaWYgKHR5cGUuaXNJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICBJbnRlcmZhY2VUeXBlIGl0ZiA9IHR5cGU7CiAgICAgICAgICBpZiAoIWl0Zi50cmVhdEFzUmF3KSB7CiAgICAgICAgICAgIHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHMoaXRmLmVsZW1lbnQpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0eXBlLmZvckVhY2hUeXBlVmFyaWFibGUoKFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlKSB7CiAgICAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyBjaGVja3MgYWdhaW5zdCB0eXBlIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb24gdHlwZXMKICAgICAgICAgICAgLy8gY29udGFpbmluZyB0eXBlIHZhcmlhYmxlcy4KICAgICAgICAgICAgRW50aXR5IHR5cGVEZWNsYXJhdGlvbiA9IHR5cGVWYXJpYWJsZS5lbGVtZW50LnR5cGVEZWNsYXJhdGlvbjsKICAgICAgICAgICAgcG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cyh0eXBlRGVjbGFyYXRpb24pOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAodHlwZS5pc0Z1bmN0aW9uVHlwZSkgewogICAgICAgICAgICBjaGVja0Nsb3N1cmVzKHBvdGVudGlhbFN1YnR5cGVPZjogdHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodHlwZSBpcyBGdXR1cmVPclR5cGUpIHsKICAgICAgICAgICAgcG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cygKICAgICAgICAgICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmZ1dHVyZUNsYXNzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgfQoKICAgIHByb2Nlc3NDaGVja3ModHlwZVZhcmlhYmxlVGVzdHMuZXhwbGljaXRJc0NoZWNrcyk7CiAgICBwcm9jZXNzQ2hlY2tzKHR5cGVWYXJpYWJsZVRlc3RzLmltcGxpY2l0SXNDaGVja3MpOwoKICAgIC8vIEFkZCB0aGUgY2xhc3NlcywgbWV0aG9kcyBhbmQgbG9jYWwgZnVuY3Rpb25zIHRoYXQgbmVlZCB0eXBlIGFyZ3VtZW50cwogICAgLy8gYmVjYXVzZSB0aGV5IHVzZSBhIHR5cGUgdmFyaWFibGUgYXMgYSBsaXRlcmFsLgogICAgY2xhc3Nlc1VzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbHMuZm9yRWFjaChwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKTsKICAgIG1ldGhvZHNVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxzLmZvckVhY2gocG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cyk7CiAgICBsb2NhbEZ1bmN0aW9uc1VzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbHMKICAgICAgICAuZm9yRWFjaChwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKTsKCiAgICBpZiAoY2xvc2VkV29ybGQuaXNNZW1iZXJVc2VkKAogICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmludm9jYXRpb25UeXBlQXJndW1lbnRHZXR0ZXIpKSB7CiAgICAgIC8vIElmIGBJbnZvY2F0aW9uLnR5cGVBcmd1bWVudHNgIGlzIGxpdmUsIG1hcmsgYWxsIHVzZXItZGVmaW5lZAogICAgICAvLyBpbXBsZW1lbnRhdGlvbnMgb2YgYG5vU3VjaE1ldGhvZGAgYXMgbmVlZGluZyB0eXBlIGFyZ3VtZW50cy4KICAgICAgZm9yIChNZW1iZXJFbnRpdHkgbWVtYmVyIGluIGNsb3NlZFdvcmxkLnVzZXJOb1N1Y2hNZXRob2RzKSB7CiAgICAgICAgcG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cyhtZW1iZXIpOwogICAgICB9CiAgICB9CgogICAgdm9pZCBjaGVja0Z1bmN0aW9uKEVudGl0eSBmdW5jdGlvbiwgRnVuY3Rpb25UeXBlIHR5cGUpIHsKICAgICAgZm9yIChGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlVmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgICAgRGFydFR5cGUgYm91bmQgPSB0eXBlVmFyaWFibGUuYm91bmQ7CiAgICAgICAgaWYgKCFib3VuZC5pc0R5bmFtaWMgJiYKICAgICAgICAgICAgIWJvdW5kLmlzVm9pZCAmJgogICAgICAgICAgICBib3VuZCAhPSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RUeXBlKSB7CiAgICAgICAgICBwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKGZ1bmN0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGNsb3NlZFdvcmxkLmZvckVhY2hHZW5lcmljTWV0aG9kKChGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgICAgaWYgKGNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgICAgLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KG1ldGhvZCkKICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICBjaGVja0Z1bmN0aW9uKG1ldGhvZCwgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUobWV0aG9kKSk7CiAgICAgIH0KICAgIH0pOwogICAgZm9yIChLTG9jYWxGdW5jdGlvbiBmdW5jdGlvbiBpbiBjbG9zZWRXb3JsZC5nZW5lcmljTG9jYWxGdW5jdGlvbnMpIHsKICAgICAgaWYgKGNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBAcHJhZ21hIG9uIGxvY2FsIGZ1bmN0aW9ucyBhbmQgdXNlCiAgICAgICAgICAvLyB0aGlzIGhlcmUgaW5zdGVhZCBvZiB0aGUgZW5jbG9zaW5nIG1lbWJlci4KICAgICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShmdW5jdGlvbi5tZW1iZXJDb250ZXh0KQogICAgICAgICAgLmlzRW1pdHRlZCkgewogICAgICAgIGNoZWNrRnVuY3Rpb24oCiAgICAgICAgICAgIGZ1bmN0aW9uLCBfZWxlbWVudEVudmlyb25tZW50LmdldExvY2FsRnVuY3Rpb25UeXBlKGZ1bmN0aW9uKSk7CiAgICAgIH0KICAgIH0KCiAgICBCYWNrZW5kVXNhZ2UgYmFja2VuZFVzYWdlID0gY2xvc2VkV29ybGQuYmFja2VuZFVzYWdlOwogICAgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMgPSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50czsKCiAgICAvLy8gU2V0IHRvIGB0cnVlYCBpZiBzdWJjbGFzc2VzIG9mIGBPYmplY3RgIG5lZWQgcnVudGltZVR5cGUuIFRoaXMgaXMKICAgIC8vLyBvbmx5IHVzZWQgdG8gc3RvcCB0aGUgY29tcHV0YXRpb24gZWFybHkuCiAgICBib29sIG5lZWRlZE9uQWxsID0gZmFsc2U7CgogICAgLy8vIFNldCB0byBgdHJ1ZWAgaWYgc3ViY2xhc3NlcyBvZiBgRnVuY3Rpb25gIG5lZWQgcnVudGltZVR5cGUuCiAgICBib29sIG5lZWRlZE9uRnVuY3Rpb25zID0gZmFsc2U7CgogICAgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzRGlyZWN0bHlOZWVkaW5nUnVudGltZVR5cGUgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICAgIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBpbXBsaWVkQ2xhc3NlcyhEYXJ0VHlwZSB0eXBlKSB7CiAgICAgIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICByZXR1cm4gW3R5cGUuZWxlbWVudF07CiAgICAgIH0gZWxzZSBpZiAodHlwZSBpcyBEeW5hbWljVHlwZSkgewogICAgICAgIHJldHVybiBbY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3NdOwogICAgICB9IGVsc2UgaWYgKHR5cGUgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW5jbHVkZSBvbmx5IHBvdGVudGlhbCBmdW5jdGlvbiB0eXBlIHN1YnR5cGVzLgogICAgICAgIHJldHVybiBbY29tbW9uRWxlbWVudHMuZnVuY3Rpb25DbGFzc107CiAgICAgIH0gZWxzZSBpZiAodHlwZSBpcyBWb2lkVHlwZSkgewogICAgICAgIC8vIE5vIGNsYXNzZXMgaW1wbGllZC4KICAgICAgfSBlbHNlIGlmICh0eXBlIGlzIEZ1bmN0aW9uVHlwZVZhcmlhYmxlKSB7CiAgICAgICAgcmV0dXJuIGltcGxpZWRDbGFzc2VzKHR5cGUuYm91bmQpOwogICAgICB9IGVsc2UgaWYgKHR5cGUgaXMgRnV0dXJlT3JUeXBlKSB7CiAgICAgICAgcmV0dXJuIFtjb21tb25FbGVtZW50cy5mdXR1cmVDbGFzc10KICAgICAgICAgIC4uYWRkQWxsKGltcGxpZWRDbGFzc2VzKHR5cGUudHlwZUFyZ3VtZW50KSk7CiAgICAgIH0gZWxzZSBpZiAodHlwZSBpcyBUeXBlVmFyaWFibGVUeXBlKSB7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2FuIHdlIGRvIGJldHRlcj8KICAgICAgICByZXR1cm4gaW1wbGllZENsYXNzZXMoCiAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VHlwZVZhcmlhYmxlQm91bmQodHlwZS5lbGVtZW50KSk7CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSAkdHlwZScpOwogICAgfQoKICAgIHZvaWQgYWRkQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIGlmIChjbHMgIT0gbnVsbCkgewogICAgICAgIGNsYXNzZXNEaXJlY3RseU5lZWRpbmdSdW50aW1lVHlwZS5hZGQoY2xzKTsKICAgICAgfQogICAgICBpZiAoY2xzID09IGNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKSB7CiAgICAgICAgbmVlZGVkT25BbGwgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChjbHMgPT0gY29tbW9uRWxlbWVudHMuZnVuY3Rpb25DbGFzcykgewogICAgICAgIG5lZWRlZE9uRnVuY3Rpb25zID0gdHJ1ZTsKICAgICAgfQogICAgfQoKICAgIGZvciAoUnVudGltZVR5cGVVc2UgcnVudGltZVR5cGVVc2UgaW4gYmFja2VuZFVzYWdlLnJ1bnRpbWVUeXBlVXNlcykgewogICAgICBzd2l0Y2ggKHJ1bnRpbWVUeXBlVXNlLmtpbmQpIHsKICAgICAgICBjYXNlIFJ1bnRpbWVUeXBlVXNlS2luZC5zdHJpbmc6CiAgICAgICAgICBpZiAoIW9wdGlvbnMubGF4UnVudGltZVR5cGVUb1N0cmluZykgewogICAgICAgICAgICBpbXBsaWVkQ2xhc3NlcyhydW50aW1lVHlwZVVzZS5yZWNlaXZlclR5cGUpLmZvckVhY2goYWRkQ2xhc3MpOwogICAgICAgICAgfQoKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgUnVudGltZVR5cGVVc2VLaW5kLmVxdWFsczoKICAgICAgICAgIEl0ZXJhYmxlPENsYXNzRW50aXR5PiByZWNlaXZlckNsYXNzZXMgPQogICAgICAgICAgICAgIGltcGxpZWRDbGFzc2VzKHJ1bnRpbWVUeXBlVXNlLnJlY2VpdmVyVHlwZSk7CiAgICAgICAgICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gYXJndW1lbnRDbGFzc2VzID0KICAgICAgICAgICAgICBpbXBsaWVkQ2xhc3NlcyhydW50aW1lVHlwZVVzZS5hcmd1bWVudFR5cGUpOwoKICAgICAgICAgIGZvciAoQ2xhc3NFbnRpdHkgcmVjZWl2ZXJDbGFzcyBpbiByZWNlaXZlckNsYXNzZXMpIHsKICAgICAgICAgICAgZm9yIChDbGFzc0VudGl0eSBhcmd1bWVudENsYXNzIGluIGFyZ3VtZW50Q2xhc3NlcykgewogICAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFNwZWNpYWwgY2FzZSB1c2Ugb2YgYHRoaXMucnVudGltZVR5cGVgLgogICAgICAgICAgICAgIFN1YmNsYXNzUmVzdWx0IHJlc3VsdCA9IGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5CiAgICAgICAgICAgICAgICAgIC5jb21tb25TdWJjbGFzc2VzKHJlY2VpdmVyQ2xhc3MsIENsYXNzUXVlcnkuU1VCVFlQRSwKICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50Q2xhc3MsIENsYXNzUXVlcnkuU1VCVFlQRSk7CiAgICAgICAgICAgICAgc3dpdGNoIChyZXN1bHQua2luZCkgewogICAgICAgICAgICAgICAgY2FzZSBTdWJjbGFzc1Jlc3VsdEtpbmQuRU1QVFk6CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBTdWJjbGFzc1Jlc3VsdEtpbmQuRVhBQ1QxOgogICAgICAgICAgICAgICAgY2FzZSBTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCQ0xBU1MxOgogICAgICAgICAgICAgICAgY2FzZSBTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCVFlQRTE6CiAgICAgICAgICAgICAgICAgIGFkZENsYXNzKHJlY2VpdmVyQ2xhc3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgU3ViY2xhc3NSZXN1bHRLaW5kLkVYQUNUMjoKICAgICAgICAgICAgICAgIGNhc2UgU3ViY2xhc3NSZXN1bHRLaW5kLlNVQkNMQVNTMjoKICAgICAgICAgICAgICAgIGNhc2UgU3ViY2xhc3NSZXN1bHRLaW5kLlNVQlRZUEUyOgogICAgICAgICAgICAgICAgICBhZGRDbGFzcyhhcmd1bWVudENsYXNzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIFN1YmNsYXNzUmVzdWx0S2luZC5TRVQ6CiAgICAgICAgICAgICAgICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIHJlc3VsdC5jbGFzc2VzKSB7CiAgICAgICAgICAgICAgICAgICAgYWRkQ2xhc3MoY2xzKTsKICAgICAgICAgICAgICAgICAgICBpZiAobmVlZGVkT25BbGwpIGJyZWFrOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBSdW50aW1lVHlwZVVzZUtpbmQudW5rbm93bjoKICAgICAgICAgIGltcGxpZWRDbGFzc2VzKHJ1bnRpbWVUeXBlVXNlLnJlY2VpdmVyVHlwZSkuZm9yRWFjaChhZGRDbGFzcyk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpZiAobmVlZGVkT25BbGwpIGJyZWFrOwogICAgfQogICAgU2V0PENsYXNzRW50aXR5PiBhbGxDbGFzc2VzTmVlZGluZ1J1bnRpbWVUeXBlOwogICAgaWYgKG5lZWRlZE9uQWxsKSB7CiAgICAgIG5lZWRlZE9uRnVuY3Rpb25zID0gdHJ1ZTsKICAgICAgYWxsQ2xhc3Nlc05lZWRpbmdSdW50aW1lVHlwZSA9IGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5CiAgICAgICAgICAuc3ViY2xhc3Nlc09mKGNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKQogICAgICAgICAgLnRvU2V0KCk7CiAgICB9IGVsc2UgewogICAgICBhbGxDbGFzc2VzTmVlZGluZ1J1bnRpbWVUeXBlID0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCB0aGlzIG9wZXJhdGlvbiBkaXJlY3RseSBpbgogICAgICAvLyBbQ2xvc2VkV29ybGRdIHVzaW5nIHRoZSBbQ2xhc3NTZXRdcy4KICAgICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gY2xhc3Nlc0RpcmVjdGx5TmVlZGluZ1J1bnRpbWVUeXBlKSB7CiAgICAgICAgaWYgKCFhbGxDbGFzc2VzTmVlZGluZ1J1bnRpbWVUeXBlLmNvbnRhaW5zKGNscykpIHsKICAgICAgICAgIGFsbENsYXNzZXNOZWVkaW5nUnVudGltZVR5cGUKICAgICAgICAgICAgICAuYWRkQWxsKGNsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LnN1YnR5cGVzT2YoY2xzKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhbGxDbGFzc2VzTmVlZGluZ1J1bnRpbWVUeXBlLmZvckVhY2gocG90ZW50aWFsbHlOZWVkVHlwZUFyZ3VtZW50cyk7CiAgICBpZiAobmVlZGVkT25GdW5jdGlvbnMpIHsKICAgICAgZm9yIChMb2NhbCBmdW5jdGlvbiBpbiBjbG9zZWRXb3JsZC5nZW5lcmljTG9jYWxGdW5jdGlvbnMpIHsKICAgICAgICBwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKGZ1bmN0aW9uKTsKICAgICAgfQogICAgICBmb3IgKExvY2FsIGZ1bmN0aW9uIGluIGxvY2FsRnVuY3Rpb25zKSB7CiAgICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9CiAgICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0TG9jYWxGdW5jdGlvblR5cGUoZnVuY3Rpb24pOwogICAgICAgIGZ1bmN0aW9uVHlwZS5mb3JFYWNoVHlwZVZhcmlhYmxlKChUeXBlVmFyaWFibGVUeXBlIHR5cGVWYXJpYWJsZSkgewogICAgICAgICAgRW50aXR5IHR5cGVEZWNsYXJhdGlvbiA9IHR5cGVWYXJpYWJsZS5lbGVtZW50LnR5cGVEZWNsYXJhdGlvbjsKICAgICAgICAgIGlmICghcHJvY2Vzc2VkRW50aXRpZXMuY29udGFpbnModHlwZURlY2xhcmF0aW9uKSkgewogICAgICAgICAgICBwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzKHR5cGVEZWNsYXJhdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgbG9jYWxGdW5jdGlvbnNOZWVkaW5nU2lnbmF0dXJlLmFkZEFsbChsb2NhbEZ1bmN0aW9ucyk7CiAgICAgIH0KICAgICAgZm9yIChGdW5jdGlvbkVudGl0eSBmdW5jdGlvbgogICAgICAgICAgaW4gY2xvc2VkV29ybGQuY2xvc3VyaXplZE1lbWJlcnNXaXRoRnJlZVR5cGVWYXJpYWJsZXMpIHsKICAgICAgICBtZXRob2RzTmVlZGluZ1NpZ25hdHVyZS5hZGQoZnVuY3Rpb24pOwogICAgICAgIHBvdGVudGlhbGx5TmVlZFR5cGVBcmd1bWVudHMoZnVuY3Rpb24uZW5jbG9zaW5nQ2xhc3MpOwogICAgICB9CiAgICB9CgogICAgU2V0PFNlbGVjdG9yPiBzZWxlY3RvcnNOZWVkaW5nVHlwZUFyZ3VtZW50cyA9IG5ldyBTZXQ8U2VsZWN0b3I+KCk7CiAgICB0eXBlVmFyaWFibGVUZXN0cwogICAgICAgIC5mb3JFYWNoQXBwbGllZFNlbGVjdG9yKChTZWxlY3RvciBzZWxlY3RvciwgU2V0PEVudGl0eT4gdGFyZ2V0cykgewogICAgICBmb3IgKEVudGl0eSB0YXJnZXQgaW4gdGFyZ2V0cykgewogICAgICAgIGlmIChtZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHMuY29udGFpbnModGFyZ2V0KSB8fAogICAgICAgICAgICBsb2NhbEZ1bmN0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzLmNvbnRhaW5zKHRhcmdldCkpIHsKICAgICAgICAgIHNlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzLmFkZChzZWxlY3Rvcik7CiAgICAgICAgICBpZiAocmV0YWluRGF0YUZvclRlc3RpbmcpIHsKICAgICAgICAgICAgc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHNGb3JUZXN0aW5nID8/PQogICAgICAgICAgICAgICAgPFNlbGVjdG9yLCBTZXQ8RW50aXR5Pj57fTsKICAgICAgICAgICAgc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHNGb3JUZXN0aW5nCiAgICAgICAgICAgICAgICAucHV0SWZBYnNlbnQoc2VsZWN0b3IsICgpID0+IG5ldyBTZXQ8RW50aXR5PigpKQogICAgICAgICAgICAgICAgLmFkZCh0YXJnZXQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBTZXQ8aW50PiBpbnN0YW50aWF0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzID0gbmV3IFNldDxpbnQ+KCk7CiAgICB0eXBlVmFyaWFibGVUZXN0cy5mb3JFYWNoR2VuZXJpY0luc3RhbnRpYXRpb24oCiAgICAgICAgKEdlbmVyaWNJbnN0YW50aWF0aW9uIGluc3RhbnRpYXRpb24sIFNldDxFbnRpdHk+IHRhcmdldHMpIHsKICAgICAgZm9yIChFbnRpdHkgdGFyZ2V0IGluIHRhcmdldHMpIHsKICAgICAgICBpZiAobWV0aG9kc05lZWRpbmdUeXBlQXJndW1lbnRzLmNvbnRhaW5zKHRhcmdldCkgfHwKICAgICAgICAgICAgbG9jYWxGdW5jdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50cy5jb250YWlucyh0YXJnZXQpKSB7CiAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgdGhlIHN0YXRpYyB0eXBlIG9mIHRoZSBpbnN0YW50aWF0ZWQKICAgICAgICAgIC8vIGV4cHJlc3Npb24uCiAgICAgICAgICBpbnN0YW50aWF0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzCiAgICAgICAgICAgICAgLmFkZChpbnN0YW50aWF0aW9uLnR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgICAgICAgIGlmIChyZXRhaW5EYXRhRm9yVGVzdGluZykgewogICAgICAgICAgICBpbnN0YW50aWF0aW9uc05lZWRpbmdUeXBlQXJndW1lbnRzRm9yVGVzdGluZyA/Pz0KICAgICAgICAgICAgICAgIDxHZW5lcmljSW5zdGFudGlhdGlvbiwgU2V0PEVudGl0eT4+e307CiAgICAgICAgICAgIGluc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHNGb3JUZXN0aW5nCiAgICAgICAgICAgICAgICAucHV0SWZBYnNlbnQoaW5zdGFudGlhdGlvbiwgKCkgPT4gbmV3IFNldDxFbnRpdHk+KCkpCiAgICAgICAgICAgICAgICAuYWRkKHRhcmdldCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICBpZiAocmV0YWluRGF0YUZvclRlc3RpbmcpIHsKICAgICAgdHlwZVZhcmlhYmxlVGVzdHNGb3JUZXN0aW5nID0gdHlwZVZhcmlhYmxlVGVzdHM7CiAgICB9CgogICAgLypwcmludCh0eXBlVmFyaWFibGVUZXN0cy5kdW1wKCkpOwogICAgcHJpbnQoJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScpOwogICAgcHJpbnQoJ2NsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50czonKTsKICAgIGNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50cy5mb3JFYWNoKChlKSA9PiBwcmludCgnICAkZScpKTsKICAgIHByaW50KCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKTsKICAgIHByaW50KCdtZXRob2RzTmVlZGluZ1NpZ25hdHVyZTonKTsKICAgIG1ldGhvZHNOZWVkaW5nU2lnbmF0dXJlLmZvckVhY2goKGUpID0+IHByaW50KCcgICRlJykpOwogICAgcHJpbnQoJy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScpOwogICAgcHJpbnQoJ21ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50czonKTsKICAgIG1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50cy5mb3JFYWNoKChlKSA9PiBwcmludCgnICAkZScpKTsKICAgIHByaW50KCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKTsKICAgIHByaW50KCdsb2NhbEZ1bmN0aW9uc05lZWRpbmdTaWduYXR1cmU6Jyk7CiAgICBsb2NhbEZ1bmN0aW9uc05lZWRpbmdTaWduYXR1cmUuZm9yRWFjaCgoZSkgPT4gcHJpbnQoJyAgJGUnKSk7CiAgICBwcmludCgnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJyk7CiAgICBwcmludCgnbG9jYWxGdW5jdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50czonKTsKICAgIGxvY2FsRnVuY3Rpb25zTmVlZGluZ1R5cGVBcmd1bWVudHMuZm9yRWFjaCgoZSkgPT4gcHJpbnQoJyAgJGUnKSk7CiAgICBwcmludCgnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJyk7CiAgICBwcmludCgnc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHM6Jyk7CiAgICBzZWxlY3RvcnNOZWVkaW5nVHlwZUFy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LUExMgElHSUhJSgsJy0EAgE9cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX3Jlc29sdXRpb24uZGFydDJzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9uYXRpdmUvcmVzb2x2ZXIuZGFydJk7Ly8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgS0VsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CgovLy8gSW50ZXJmYWNlIGZvciBjb21wdXRpbmcgbmF0aXZlIG1lbWJlcnMuCmFic3RyYWN0IGNsYXNzIE5hdGl2ZU1lbWJlclJlc29sdmVyIHsKICAvLy8gQ29tcHV0ZXMgd2hldGhlciBbbm9kZV0gaXMgbmF0aXZlIG9yIEpzSW50ZXJvcC4KICB2b2lkIHJlc29sdmVOYXRpdmVNZW1iZXIoaXIuTWVtYmVyIG5vZGUsIElyQW5ub3RhdGlvbkRhdGEgYW5ub3RhdGlvbkRhdGEpOwp9CgovLy8gRGV0ZXJtaW5lcyBhbGwgbmF0aXZlIGNsYXNzZXMgaW4gYSBzZXQgb2YgbGlicmFyaWVzLgphYnN0cmFjdCBjbGFzcyBOYXRpdmVDbGFzc0ZpbmRlciB7CiAgLy8vIFJldHVybnMgdGhlIHNldCBvZiBhbGwgbmF0aXZlIGNsYXNzZXMgZGVjbGFyZWQgaW4gW2xpYnJhcmllc10uCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGNvbXB1dGVOYXRpdmVDbGFzc2VzKEl0ZXJhYmxlPFVyaT4gbGlicmFyaWVzKTsKfQoKY2xhc3MgQmFzZU5hdGl2ZUNsYXNzRmluZGVyIGltcGxlbWVudHMgTmF0aXZlQ2xhc3NGaW5kZXIgewogIGZpbmFsIEtFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKICBmaW5hbCBOYXRpdmVCYXNpY0RhdGEgX25hdGl2ZUJhc2ljRGF0YTsKCiAgTWFwPFN0cmluZywgQ2xhc3NFbnRpdHk+IF90YWdPd25lciA9IG5ldyBNYXA8U3RyaW5nLCBDbGFzc0VudGl0eT4oKTsKCiAgQmFzZU5hdGl2ZUNsYXNzRmluZGVyKHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCwgdGhpcy5fbmF0aXZlQmFzaWNEYXRhKTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGNvbXB1dGVOYXRpdmVDbGFzc2VzKEl0ZXJhYmxlPFVyaT4gbGlicmFyaWVzKSB7CiAgICBTZXQ8Q2xhc3NFbnRpdHk+IG5hdGl2ZUNsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgbGlicmFyaWVzLmZvckVhY2goKHVyaSkgPT4gX3Byb2Nlc3NOYXRpdmVDbGFzc2VzSW5MaWJyYXJ5KAogICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQubG9va3VwTGlicmFyeSh1cmkpLCBuYXRpdmVDbGFzc2VzKSk7CiAgICBfcHJvY2Vzc1N1YmNsYXNzZXNPZk5hdGl2ZUNsYXNzZXMobGlicmFyaWVzLCBuYXRpdmVDbGFzc2VzKTsKICAgIHJldHVybiBuYXRpdmVDbGFzc2VzOwogIH0KCiAgLy8vIEFkZHMgYWxsIGRpcmVjdGx5IG5hdGl2ZSBjbGFzc2VzIGRlY2xhcmVkIGluIFtsaWJyYXJ5XSB0byBbbmF0aXZlQ2xhc3Nlc10uCiAgdm9pZCBfcHJvY2Vzc05hdGl2ZUNsYXNzZXNJbkxpYnJhcnkoCiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSwgU2V0PENsYXNzRW50aXR5PiBuYXRpdmVDbGFzc2VzKSB7CiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hDbGFzcyhsaWJyYXJ5LCAoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICAgIGlmIChfbmF0aXZlQmFzaWNEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKSkgewogICAgICAgIF9wcm9jZXNzTmF0aXZlQ2xhc3MoY2xzLCBuYXRpdmVDbGFzc2VzKTsKICAgICAgfQogICAgfSk7CiAgfQoKICAvLy8gQWRkcyBbY2xzXSB0byBbbmF0aXZlQ2xhc3Nlc10gYW5kIHBlcmZvcm1zIGZ1cnRoZXIgcHJvY2Vzc2luZyBvZiBbY2xzXSwKICAvLy8gaWYgbmVjZXNzYXJ5LgogIHZvaWQgX3Byb2Nlc3NOYXRpdmVDbGFzcygKICAgICAgY292YXJpYW50IENsYXNzRW50aXR5IGNscywgU2V0PENsYXNzRW50aXR5PiBuYXRpdmVDbGFzc2VzKSB7CiAgICBuYXRpdmVDbGFzc2VzLmFkZChjbHMpOwogICAgLy8gSnMgSW50ZXJvcCBpbnRlcmZhY2VzIGRvIG5vdCBoYXZlIHRhZ3MuCiAgICBpZiAoX25hdGl2ZUJhc2ljRGF0YS5pc0pzSW50ZXJvcENsYXNzKGNscykpIHJldHVybjsKICAgIC8vIFNpbmNlIHdlIG1hcCBmcm9tIGRpc3BhdGNoIHRhZ3MgdG8gY2xhc3NlcywgYSBkaXNwYXRjaCB0YWcgbXVzdCBiZSB1c2VkCiAgICAvLyBvbiBvbmx5IG9uZSBuYXRpdmUgY2xhc3MuCiAgICBmb3IgKFN0cmluZyB0YWcgaW4gX25hdGl2ZUJhc2ljRGF0YS5nZXROYXRpdmVUYWdzT2ZDbGFzcyhjbHMpKSB7CiAgICAgIENsYXNzRW50aXR5IG93bmVyID0gX3RhZ093bmVyW3RhZ107CiAgICAgIGlmIChvd25lciAhPSBudWxsKSB7CiAgICAgICAgaWYgKG93bmVyICE9IGNscykgewogICAgICAgICAgZmFpbGVkQXQoY2xzLCAiVGFnICckdGFnJyBhbHJlYWR5IGluIHVzZSBieSAnJHtvd25lci5uYW1lfSciKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3RhZ093bmVyW3RhZ10gPSBjbHM7CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBzdXBlciBjbGFzcyBvZiBbY2xzXSBvciBgbnVsbGAgb2YgW2Nsc10gaGFzCiAgLy8vIG5vIGV4cGxpY2l0IHN1cGVyY2xhc3MuCiAgU3RyaW5nIF9maW5kRXh0ZW5kc05hbWVPZkNsYXNzKGNvdmFyaWFudCBDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBfZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgLmdldFN1cGVyQ2xhc3MoY2xzLCBza2lwVW5uYW1lZE1peGluQXBwbGljYXRpb25zOiB0cnVlKQogICAgICAgID8ubmFtZTsKICB9CgogIC8vLyBBZGRzIGFsbCBzdWJjbGFzc2VzIG9mIFtuYXRpdmVDbGFzc2VzXSBmb3VuZCBpbiBbbGlicmFyaWVzXSB0bwogIC8vLyBbbmF0aXZlQ2xhc3Nlc10uCiAgdm9pZCBfcHJvY2Vzc1N1YmNsYXNzZXNPZk5hdGl2ZUNsYXNzZXMoCiAgICAgIEl0ZXJhYmxlPFVyaT4gbGlicmFyaWVzLCBTZXQ8Q2xhc3NFbnRpdHk+IG5hdGl2ZUNsYXNzZXMpIHsKICAgIFNldDxDbGFzc0VudGl0eT4gbmF0aXZlQ2xhc3Nlc0FuZFN1YmNsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwogICAgLy8gQ29sbGVjdCBwb3RlbnRpYWwgc3ViY2xhc3NlcywgZS5nLgogICAgLy8KICAgIC8vICAgICBjbGFzcyBCIGV4dGVuZHMgZm9vLkEge30KICAgIC8vCiAgICAvLyBTdHJpbmcgIkEiIGhhcyBhIHBvdGVudGlhbCBzdWJjbGFzcyBCLgoKICAgIE1hcDxTdHJpbmcsIFNldDxDbGFzc0VudGl0eT4+IHBvdGVudGlhbEV4dGVuZHMgPQogICAgICAgIDxTdHJpbmcsIFNldDxDbGFzc0VudGl0eT4+e307CgogICAgbGlicmFyaWVzLmZvckVhY2goKFVyaSB1cmkpIHsKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5ID0gX2VsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBMaWJyYXJ5KHVyaSk7CiAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENsYXNzKGxpYnJhcnksIChDbGFzc0VudGl0eSBjbHMpIHsKICAgICAgICBTdHJpbmcgZXh0ZW5kc05hbWUgPSBfZmluZEV4dGVuZHNOYW1lT2ZDbGFzcyhjbHMpOwogICAgICAgIGlmIChleHRlbmRzTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICBTZXQ8Q2xhc3NFbnRpdHk+IHBvdGVudGlhbFN1YmNsYXNzZXMgPSBwb3RlbnRpYWxFeHRlbmRzLnB1dElmQWJzZW50KAogICAgICAgICAgICAgIGV4dGVuZHNOYW1lLCAoKSA9PiBuZXcgU2V0PENsYXNzRW50aXR5PigpKTsKICAgICAgICAgIHBvdGVudGlhbFN1YmNsYXNzZXMuYWRkKGNscyk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIC8vIFJlc29sdmUgYWxsIHRoZSBuYXRpdmUgY2xhc3NlcyBhbmQgYW55IGNsYXNzZXMgdGhhdCBtaWdodCBleHRlbmQgdGhlbSBpbgogICAgLy8gW3BvdGVudGlhbEV4dGVuZHNdLCBhbmQgdGhlbiBjaGVjayB0aGF0IHRoZSBwcm9wZXJseSByZXNvbHZlZCBjbGFzcyBpcyBpbgogICAgLy8gZmFjdCBhIHN1YmNsYXNzIG9mIGEgbmF0aXZlIGNsYXNzLgoKICAgIENsYXNzRW50aXR5IG5hdGl2ZVN1cGVyY2xhc3NPZihDbGFzc0VudGl0eSBjbHMpIHsKICAgICAgaWYgKF9uYXRpdmVCYXNpY0RhdGEuaXNOYXRpdmVDbGFzcyhjbHMpKSByZXR1cm4gY2xzOwogICAgICBDbGFzc0VudGl0eSBzdXBlcmNsYXNzID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyk7CiAgICAgIGlmIChzdXBlcmNsYXNzID09IG51bGwpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gbmF0aXZlU3VwZXJjbGFzc09mKHN1cGVyY2xhc3MpOwogICAgfQoKICAgIHZvaWQgd2Fsa1BvdGVudGlhbFN1YmNsYXNzZXMoQ2xhc3NFbnRpdHkgZWxlbWVudCkgewogICAgICBpZiAobmF0aXZlQ2xhc3Nlc0FuZFN1YmNsYXNzZXMuY29udGFpbnMoZWxlbWVudCkpIHJldHVybjsKICAgICAgQ2xhc3NFbnRpdHkgbmF0aXZlU3VwZXJjbGFzcyA9IG5hdGl2ZVN1cGVyY2xhc3NPZihlbGVtZW50KTsKICAgICAgaWYgKG5hdGl2ZVN1cGVyY2xhc3MgIT0gbnVsbCkgewogICAgICAgIG5hdGl2ZUNsYXNzZXNBbmRTdWJjbGFzc2VzLmFkZChlbGVtZW50KTsKICAgICAgICBTZXQ8Q2xhc3NFbnRpdHk+IHBvdGVudGlhbFN1YmNsYXNzZXMgPSBwb3RlbnRpYWxFeHRlbmRzW2VsZW1lbnQubmFtZV07CiAgICAgICAgaWYgKHBvdGVudGlhbFN1YmNsYXNzZXMgIT0gbnVsbCkgewogICAgICAgICAgcG90ZW50aWFsU3ViY2xhc3Nlcy5mb3JFYWNoKHdhbGtQb3RlbnRpYWxTdWJjbGFzc2VzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBuYXRpdmVDbGFzc2VzLmZvckVhY2god2Fsa1BvdGVudGlhbFN1YmNsYXNzZXMpOwogICAgbmF0aXZlQ2xhc3Nlcy5hZGRBbGwobmF0aXZlQ2xhc3Nlc0FuZFN1YmNsYXNzZXMpOwogIH0KfQoKLy8vIFJldHVybnMgYHRydWVgIGlmIFt2YWx1ZV0gaXMgbmFtZWQgYW5ub3RhdGlvbiBiYXNlZCBvbiBbYW5ub3RhdGlvbkNsYXNzXS4KYm9vbCBpc0Fubm90YXRpb24oCiAgICBTcGFubmFibGUgc3Bhbm5hYmxlLCBDb25zdGFudFZhbHVlIHZhbHVlLCBDbGFzc0VudGl0eSBhbm5vdGF0aW9uQ2xhc3MpIHsKICBpZiAoIXZhbHVlLmlzQ29uc3RydWN0ZWRPYmplY3QpIHJldHVybiBudWxsOwogIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSBjb25zdHJ1Y3RlZE9iamVjdCA9IHZhbHVlOwogIHJldHVybiBjb25zdHJ1Y3RlZE9iamVjdC50eXBlLmVsZW1lbnQgPT0gYW5ub3RhdGlvbkNsYXNzOwp9CgovLy8gRXh0cmFjdHMgdGhlIG5hbWUgaWYgW3ZhbHVlXSBpcyBhIG5hbWVkIGFubm90YXRpb24gYmFzZWQgb24KLy8vIFthbm5vdGF0aW9uQ2xhc3NdLCBvdGhlcndpc2UgcmV0dXJucyBgbnVsbGAuClN0cmluZyByZWFkQW5ub3RhdGlvbk5hbWUoCiAgICBTcGFubmFibGUgc3Bhbm5hYmxlLCBDb25zdGFudFZhbHVlIHZhbHVlLCBDbGFzc0VudGl0eSBhbm5vdGF0aW9uQ2xhc3MsCiAgICB7U3RyaW5nIGRlZmF1bHRWYWx1ZX0pIHsKICBpZiAoIXZhbHVlLmlzQ29uc3RydWN0ZWRPYmplY3QpIHJldHVybiBudWxsOwogIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSBjb25zdHJ1Y3RlZE9iamVjdCA9IHZhbHVlOwogIGlmIChjb25zdHJ1Y3RlZE9iamVjdC50eXBlLmVsZW1lbnQgIT0gYW5ub3RhdGlvbkNsYXNzKSByZXR1cm4gbnVsbDsKCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZmllbGRzID0gY29uc3RydWN0ZWRPYmplY3QuZmllbGRzLnZhbHVlczsKICAvLyBUT0RPKHNyYSk6IEJldHRlciB2YWxpZGF0aW9uIG9mIHRoZSBjb25zdGFudC4KICBpZiAoZmllbGRzLmxlbmd0aCAhPSAxKSB7CiAgICBmYWlsZWRBdCgKICAgICAgICBzcGFubmFibGUsICdBbm5vdGF0aW9ucyBuZWVkcyBvbmUgc3RyaW5nOiAke3ZhbHVlLnRvU3RydWN0dXJlZFRleHQoKX0nKTsKICAgIHJldHVybiBudWxsOwogIH0gZWxzZSBpZiAoZmllbGRzLnNpbmdsZSBpcyBTdHJpbmdDb25zdGFudFZhbHVlKSB7CiAgICBTdHJpbmdDb25zdGFudFZhbHVlIHNwZWNTdHJpbmdDb25zdGFudCA9IGZpZWxkcy5zaW5nbGU7CiAgICByZXR1cm4gc3BlY1N0cmluZ0NvbnN0YW50LnN0cmluZ1ZhbHVlOwogIH0gZWxzZSBpZiAoZGVmYXVsdFZhbHVlICE9IG51bGwgJiYgZmllbGRzLnNpbmdsZSBpcyBOdWxsQ29uc3RhbnRWYWx1ZSkgewogICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTsKICB9IGVsc2UgewogICAgZmFpbGVkQXQoCiAgICAgICAgc3Bhbm5hYmxlLCAnQW5ub3RhdGlvbnMgbmVlZHMgb25lIHN0cmluZzogJHt2YWx1ZS50b1N0cnVjdHVyZWRUZXh0KCl9Jyk7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KgKsATk48ASgBGTsjJCEpASwmNk0CATkjRUcCATsxKgFHAUoBDEg9P0FBGgQBUSc/QjExCAgEAU4UHEMcLzhPIUUqGxxJCg8eCAYEAUoePh9AEAQBRRcqQUoqByQHLgE1JgEiRkQ7I086KAoKCAFQUSoBNjtHKy0GAThAQiYxTytACggGATQ2BAIBThNNLzY8AgFAMRtLHS82RgFEMxwOURE1PCtLGQsOUREEAgEpcGFja2FnZTpjb21waWxlci9zcmMvbmF0aXZlL3Jlc29sdmVyLmRhcnQ3c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMva2VybmVsL2RlZmVycmVkX2xvYWQuZGFydJocLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkga2VybmVsLmRlZmVycmVkX2xvYWRfZGF0YTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vY29tcGlsZXIuZGFydCcgc2hvdyBDb21waWxlcjsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vaXIvdXRpbC5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50X21hcC5kYXJ0JzsKCmNsYXNzIEtlcm5lbERlZmVycmVkTG9hZFRhc2sgZXh0ZW5kcyBEZWZlcnJlZExvYWRUYXNrIHsKICBLZXJuZWxUb0VsZW1lbnRNYXAgX2VsZW1lbnRNYXA7CiAgTWFwPGlyLkxpYnJhcnksIFNldDxpci5OYW1lZE5vZGU+PiBfYWRkaXRpb25hbEV4cG9ydHNTZXRzID0KICAgICAgPGlyLkxpYnJhcnksIFNldDxpci5OYW1lZE5vZGU+Pnt9OwoKICBLZXJuZWxEZWZlcnJlZExvYWRUYXNrKENvbXBpbGVyIGNvbXBpbGVyLCB0aGlzLl9lbGVtZW50TWFwKSA6IHN1cGVyKGNvbXBpbGVyKTsKCiAgSXRlcmFibGU8SW1wb3J0RW50aXR5PiBfZmluZEltcG9ydHNUbyhpci5OYW1lZE5vZGUgbm9kZSwgU3RyaW5nIG5vZGVOYW1lLAogICAgICBpci5MaWJyYXJ5IGVuY2xvc2luZ0xpYnJhcnksIExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgcmV0dXJuIG1lYXN1cmVTdWJ0YXNrKCdmaW5kLWltcG9ydHMnLCAoKSB7CiAgICAgIExpc3Q8SW1wb3J0RW50aXR5PiBpbXBvcnRzID0gW107CiAgICAgIGlyLkxpYnJhcnkgc291cmNlID0gX2VsZW1lbnRNYXAuZ2V0TGlicmFyeU5vZGUobGlicmFyeSk7CiAgICAgIGlmICghc291cmNlLmRlcGVuZGVuY2llcy5hbnkoKGQpID0+IGQuaXNEZWZlcnJlZCkpIHJldHVybiBjb25zdCBbXTsKICAgICAgZm9yIChpci5MaWJyYXJ5RGVwZW5kZW5jeSBkZXBlbmRlbmN5IGluIHNvdXJjZS5kZXBlbmRlbmNpZXMpIHsKICAgICAgICBpZiAoZGVwZW5kZW5jeS5pc0V4cG9ydCkgY29udGludWU7CiAgICAgICAgaWYgKCFfaXNWaXNpYmxlKGRlcGVuZGVuY3kuY29tYmluYXRvcnMsIG5vZGVOYW1lKSkgY29udGludWU7CiAgICAgICAgaWYgKGVuY2xvc2luZ0xpYnJhcnkgPT0gZGVwZW5kZW5jeS50YXJnZXRMaWJyYXJ5IHx8CiAgICAgICAgICAgIGFkZGl0aW9uYWxFeHBvcnRzKGRlcGVuZGVuY3kudGFyZ2V0TGlicmFyeSkuY29udGFpbnMobm9kZSkpIHsKICAgICAgICAgIGltcG9ydHMuYWRkKF9lbGVtZW50TWFwLmdldEltcG9ydChkZXBlbmRlbmN5KSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBpbXBvcnRzOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxJbXBvcnRFbnRpdHk+IGNsYXNzSW1wb3J0c1RvKAogICAgICBDbGFzc0VudGl0eSBlbGVtZW50LCBMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgIGlyLkNsYXNzIG5vZGUgPSBfZWxlbWVudE1hcC5nZXRDbGFzc05vZGUoZWxlbWVudCk7CiAgICByZXR1cm4gX2ZpbmRJbXBvcnRzVG8obm9kZSwgbm9kZS5uYW1lLCBub2RlLmVuY2xvc2luZ0xpYnJhcnksIGxpYnJhcnkpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8SW1wb3J0RW50aXR5PiB0eXBlZGVmSW1wb3J0c1RvKAogICAgICBUeXBlZGVmRW50aXR5IGVsZW1lbnQsIExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgaXIuVHlwZWRlZiBub2RlID0gX2VsZW1lbnRNYXAuZ2V0VHlwZWRlZk5vZGUoZWxlbWVudCk7CiAgICByZXR1cm4gX2ZpbmRJbXBvcnRzVG8obm9kZSwgbm9kZS5uYW1lLCBub2RlLmVuY2xvc2luZ0xpYnJhcnksIGxpYnJhcnkpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8SW1wb3J0RW50aXR5PiBtZW1iZXJJbXBvcnRzVG8oCiAgICAgIEVudGl0eSBlbGVtZW50LCBMaWJyYXJ5RW50aXR5IGxpYnJhcnkpIHsKICAgIGlyLk1lbWJlciBub2RlID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyTm9kZShlbGVtZW50KTsKICAgIHJldHVybiBfZmluZEltcG9ydHNUbygKICAgICAgICBub2RlIGlzIGlyLkNvbnN0cnVjdG9yID8gbm9kZS5lbmNsb3NpbmdDbGFzcyA6IG5vZGUsCiAgICAgICAgbm9kZSBpcyBpci5Db25zdHJ1Y3RvciA/IG5vZGUuZW5jbG9zaW5nQ2xhc3MubmFtZSA6IG5vZGUubmFtZS5uYW1lLAogICAgICAgIG5vZGUuZW5jbG9zaW5nTGlicmFyeSwKICAgICAgICBsaWJyYXJ5KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2hlY2tGb3JEZWZlcnJlZEVycm9yQ2FzZXMoTGlicmFyeUVudGl0eSBsaWJyYXJ5KSB7CiAgICAvLyBOb3RoaW5nIHRvIGRvLiBUaGUgRkUgY2hlY2tzIGZvciBlcnJvciBjYXNlcyB1cGZyb250LgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjb2xsZWN0Q29uc3RhbnRzRnJvbU1ldGFkYXRhKAogICAgICBFbnRpdHkgZWxlbWVudCwgU2V0PENvbnN0YW50VmFsdWU+IGNvbnN0YW50cykgewogICAgLy8gTm90aGluZyB0byBkby4gS2VybmVsLXBpcGVsaW5lIGRvZXNuJ3Qgc3VwcG9ydCBtaXJyb3JzLCBzbyB3ZSBkb24ndCBuZWVkCiAgICAvLyB0byB0cmFjayBhbnkgY29uc3RhbnRzIGZyb20gbWV0YS1kYXRhLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjb2xsZWN0Q29uc3RhbnRzSW5Cb2R5KE1lbWJlckVudGl0eSBlbGVtZW50LCBEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzKSB7CiAgICBpci5NZW1iZXIgbm9kZSA9IF9lbGVtZW50TWFwLmdldE1lbWJlck5vZGUoZWxlbWVudCk7CgogICAgLy8gRmV0Y2ggdGhlIGludGVybmFsIG5vZGUgaW4gb3JkZXIgdG8gc2tpcCBhbm5vdGF0aW9ucyBvbiB0aGUgbWVtYmVyLgogICAgLy8gVE9ETyhzaWdtdW5kKTogcmVwbGFjZSB0aGlzIHBhdHRlcm4gd2hlbiB0aGUga2VybmVsLWFzdCBwcm92aWRlcyBhIGJldHRlcgogICAgLy8gd2F5IHRvIHNraXAgYW5ub3RhdGlvbnMgKGlzc3VlIDMxNTY1KS4KICAgIHZhciB2aXNpdG9yID0gbmV3IENvbnN0YW50Q29sbGVjdG9yKF9lbGVtZW50TWFwLCBkZXBlbmRlbmNpZXMpOwogICAgaWYgKG5vZGUgaXMgaXIuRmllbGQpIHsKICAgICAgbm9kZS5pbml0aWFsaXplcj8uYWNjZXB0KHZpc2l0b3IpOwogICAgICByZXR1cm47CiAgICB9CgogICAgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgbm9kZS5pbml0aWFsaXplcnMuZm9yRWFjaCgoaSkgPT4gaS5hY2NlcHQodmlzaXRvcikpOwogICAgfQogICAgbm9kZS5mdW5jdGlvbj8uYWNjZXB0KHZpc2l0b3IpOwogIH0KCiAgU2V0PGlyLk5hbWVkTm9kZT4gYWRkaXRpb25hbEV4cG9ydHMoaXIuTGlicmFyeSBsaWJyYXJ5KSB7CiAgICByZXR1cm4gX2FkZGl0aW9uYWxFeHBvcnRzU2V0c1tsaWJyYXJ5XSA/Pz0gbmV3IFNldDxpci5OYW1lZE5vZGU+LmZyb20oCiAgICAgICAgbGlicmFyeS5hZGRpdGlvbmFsRXhwb3J0cy5tYXAoKGlyLlJlZmVyZW5jZSByZWYpID0+IHJlZi5ub2RlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFudXAoKSB7CiAgICBfYWRkaXRpb25hbEV4cG9ydHNTZXRzID0gbnVsbDsKICB9Cn0KCi8vLyBSZXR1cm5zIHdoZXRoZXIgW25hbWVdIHdvdWxkIGJlIHZpc2libGUgYWNjb3JkaW5nIHRvIHRoZSBnaXZlbiBsaXN0IG9mCi8vLyBzaG93L2hpZGUgW2NvbWJpbmF0b3JzXS4KYm9vbCBfaXNWaXNpYmxlKExpc3Q8aXIuQ29tYmluYXRvcj4gY29tYmluYXRvcnMsIFN0cmluZyBuYW1lKSB7CiAgZm9yICh2YXIgYyBpbiBjb21iaW5hdG9ycykgewogICAgaWYgKGMuaXNTaG93ICYmICFjLm5hbWVzLmNvbnRhaW5zKG5hbWUpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoYy5pc0hpZGUgJiYgYy5uYW1lcy5jb250YWlucyhuYW1lKSkgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gdHJ1ZTsKfQoKY2xhc3MgQ29uc3RhbnRDb2xsZWN0b3IgZXh0ZW5kcyBpci5SZWN1cnNpdmVWaXNpdG9yIHsKICBmaW5hbCBLZXJuZWxUb0VsZW1lbnRNYXAgZWxlbWVudE1hcDsKICBmaW5hbCBEZXBlbmRlbmNpZXMgZGVwZW5kZW5jaWVzOwoKICBDb25zdGFudENvbGxlY3Rvcih0aGlzLmVsZW1lbnRNYXAsIHRoaXMuZGVwZW5kZW5jaWVzKTsKCiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzID0+IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7CgogIHZvaWQgYWRkKGlyLkV4cHJlc3Npb24gbm9kZSwge2Jvb2wgcmVxdWlyZWQ6IHRydWV9KSB7CiAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0KICAgICAgICBlbGVtZW50TWFwLmdldENvbnN0YW50VmFsdWUobm9kZSwgcmVxdWlyZUNvbnN0YW50OiByZXF1aXJlZCk7CiAgICBpZiAoY29uc3RhbnQgIT0gbnVsbCkgewogICAgICBkZXBlbmRlbmNpZXMuYWRkQ29uc3RhbnQoCiAgICAgICAgICBjb25zdGFudCwgZWxlbWVudE1hcC5nZXRJbXBvcnQoZ2V0RGVmZXJyZWRJbXBvcnQobm9kZSkpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRMaXRlcmFsKGlyLkludExpdGVyYWwgbGl0ZXJhbCkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERvdWJsZUxpdGVyYWwoaXIuRG91YmxlTGl0ZXJhbCBsaXRlcmFsKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm9vbExpdGVyYWwoaXIuQm9vbExpdGVyYWwgbGl0ZXJhbCkge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0xpdGVyYWwoaXIuU3RyaW5nTGl0ZXJhbCBsaXRlcmFsKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3ltYm9sTGl0ZXJhbChpci5TeW1ib2xMaXRlcmFsIGxpdGVyYWwpID0+IGFkZChsaXRlcmFsKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE51bGxMaXRlcmFsKGlyLk51bGxMaXRlcmFsIGxpdGVyYWwpIHt9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXN0TGl0ZXJhbChpci5MaXN0TGl0ZXJhbCBsaXRlcmFsKSB7CiAgICBpZiAobGl0ZXJhbC5pc0NvbnN0KSB7CiAgICAgIGFkZChsaXRlcmFsKTsKICAgIH0gZWxzZSB7CiAgICAgIHN1cGVyLnZpc2l0TGlzdExpdGVyYWwobGl0ZXJhbCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U2V0TGl0ZXJhbChpci5TZXRMaXRlcmFsIGxpdGVyYWwpIHsKICAgIGlmIChsaXRlcmFsLmlzQ29uc3QpIHsKICAgICAgYWRkKGxpdGVyYWwpOwogICAgfSBlbHNlIHsKICAgICAgc3VwZXIudmlzaXRTZXRMaXRlcmFsKGxpdGVyYWwpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE1hcExpdGVyYWwoaXIuTWFwTGl0ZXJhbCBsaXRlcmFsKSB7CiAgICBpZiAobGl0ZXJhbC5pc0NvbnN0KSB7CiAgICAgIGFkZChsaXRlcmFsKTsKICAgIH0gZWxzZSB7CiAgICAgIHN1cGVyLnZpc2l0TWFwTGl0ZXJhbChsaXRlcmFsKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgYWRkKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgc3VwZXIudmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24obm9kZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZVBhcmFtZXRlcihpci5UeXBlUGFyYW1ldGVyIG5vZGUpIHsKICAgIC8vIFdlIGF2b2lkIHZpc2l0aW5nIG1ldGFkYXRhIG9uIHRoZSB0eXBlIHBhcmFtZXRlciBkZWNsYXJhdGlvbi4gVGhlIGJvdW5kCiAgICAvLyBjYW5ub3QgaG9sZCBjb25zdGFudHMgc28gd2Ugc2tpcCB0aGF0IGFzIHdlbGwuCiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIC8vIFdlIGF2b2lkIHZpc2l0aW5nIG1ldGFkYXRhIG9uIHRoZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24gYnkgb25seSB2aXNpdGluZwogICAgLy8gdGhlIGluaXRpYWxpemVyLiBUaGUgdHlwZSBjYW5ub3QgaG9sZCBjb25zdGFudHMgc28gY2FuIGthbiBza2lwIHRoYXQKICAgIC8vIGFzIHdlbGwuCiAgICBub2RlLmluaXRpYWxpemVyPy5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUxpdGVyYWwoaXIuVHlwZUxpdGVyYWwgbm9kZSkgewogICAgaWYgKG5vZGUudHlwZSBpcyEgaXIuVHlwZVBhcmFtZXRlclR5cGUpIGFkZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnN0YW50aWF0aW9uKGlyLkluc3RhbnRpYXRpb24gbm9kZSkgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhlIENGRSBzaG91bGQgbWFyayBjb25zdGFudCBpbnN0YW50aWF0aW9ucyBhcwogICAgLy8gY29uc3RhbnQuCiAgICBhZGQobm9kZSwgcmVxdWlyZWQ6IGZhbHNlKTsKICAgIHN1cGVyLnZpc2l0SW5zdGFudGlhdGlvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25zdGFudEV4cHJlc3Npb24oaXIuQ29uc3RhbnRFeHByZXNzaW9uIG5vZGUpIHsKICAgIGFkZChub2RlKTsKICB9Cn0KgN8ATk48ASMBKAEiKSMgJBobATgiPikBUQFMPC8nP0pFK0U8SjoKCBYIBAEMKTQ3TAQBDCs2O0wEAQwqLzkbPUwfEgQBDDs9BAEMJTZQLgQBDFE5AUtRLkQcKQ4GASI7BiQEATxLSAQBDBMjBAIBSx1AHzs6BA8CATYnIwE5AUIBOB1GHCBEBgQBDDEBDDcBDDMBDDcBDEUBDDMBDDIbFA0nBgQBDDAbFA0mBgQBDDAbFA0mBgQBDEMYEQ0uBgQBDDNPNgQBDD9QTBAkBAEMLzcEAQwzSxEgJAQBDD0PBAIBLnBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9kZWZlcnJlZF9sb2FkLmRhcnQ1c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMva2VybmVsL2VsZW1lbnRfbWFwLmRhcnScLi8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbGFzc19oaWVyYXJjaHkuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9lbnZpcm9ubWVudC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBLQ29tbW9uRWxlbWVudHMsIEtFbGVtZW50RW52aXJvbm1lbnQ7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYW1lci5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9iZWhhdmlvci5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JzsKCi8vLyBJbnRlcmZhY2UgdGhhdCB0cmFuc2xhdGVzIGJldHdlZW4gS2VybmVsIElSIG5vZGVzIGFuZCBlbnRpdGllcyB1c2VkIGZvcgovLy8gY29tcHV0aW5nIHRoZSBbV29ybGRJbXBhY3RdIGZvciBtZW1iZXJzLgphYnN0cmFjdCBjbGFzcyBLZXJuZWxUb0VsZW1lbnRNYXAgewogIEtFbGVtZW50RW52aXJvbm1lbnQgZ2V0IGVsZW1lbnRFbnZpcm9ubWVudDsKICBOYXRpdmVCYXNpY0RhdGEgZ2V0IG5hdGl2ZUJhc2ljRGF0YTsKCiAgLy8vIEFjY2VzcyB0byB0aGUgY29tbW9ubHkgdXNlZCBlbGVtZW50cyBhbmQgdHlwZXMuCiAgS0NvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50czsKCiAgLy8vIEFjY2VzcyB0byB0aGUgW0RhcnRUeXBlc10gb2JqZWN0LgogIERhcnRUeXBlcyBnZXQgdHlwZXM7CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIGVudmlyb25tZW50IGZvciB0aGUgdW5kZXJseWluZyBrZXJuZWwgbW9kZWwuCiAgaXIuVHlwZUVudmlyb25tZW50IGdldCB0eXBlRW52aXJvbm1lbnQ7CgogIC8vLyBSZXR1cm5zIHRoZSBjbGFzcyBoaWVyYXJjaHkgZm9yIHRoZSB1bmRlcmx5aW5nIGtlcm5lbCBtb2RlbC4KICBpci5DbGFzc0hpZXJhcmNoeSBnZXQgY2xhc3NIaWVyYXJjaHk7CgogIC8vLyBSZXR1cm5zIHRoZSBbRGFydFR5cGVdIGNvcnJlc3BvbmRpbmcgdG8gW3R5cGVdLgogIERhcnRUeXBlIGdldERhcnRUeXBlKGlyLkRhcnRUeXBlIHR5cGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0ludGVyZmFjZVR5cGVdIGNvcnJlc3BvbmRpbmcgdG8gW3R5cGVdLgogIEludGVyZmFjZVR5cGUgZ2V0SW50ZXJmYWNlVHlwZShpci5JbnRlcmZhY2VUeXBlIHR5cGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW1R5cGVWYXJpYWJsZVR5cGVdIGNvcnJlc3BvbmRpbmcgdG8gW3R5cGVdLgogIFR5cGVWYXJpYWJsZVR5cGUgZ2V0VHlwZVZhcmlhYmxlVHlwZShpci5UeXBlUGFyYW1ldGVyVHlwZSB0eXBlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtGdW5jdGlvblR5cGVdIG9mIHRoZSBbbm9kZV0uCiAgRnVuY3Rpb25UeXBlIGdldEZ1bmN0aW9uVHlwZShpci5GdW5jdGlvbk5vZGUgbm9kZSk7CgogIC8vLyBSZXR1cm4gdGhlIFtJbnRlcmZhY2VUeXBlXSBjb3JyZXNwb25kaW5nIHRvIHRoZSBbY2xzXSB3aXRoIHRoZSBnaXZlbgogIC8vLyBbdHlwZUFyZ3VtZW50c10uCiAgSW50ZXJmYWNlVHlwZSBjcmVhdGVJbnRlcmZhY2VUeXBlKAogICAgICBpci5DbGFzcyBjbHMsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NhbGxTdHJ1Y3R1cmVdIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFthcmd1bWVudHNdLgogIENhbGxTdHJ1Y3R1cmUgZ2V0Q2FsbFN0cnVjdHVyZShpci5Bcmd1bWVudHMgYXJndW1lbnRzKTsKCiAgLy8vIFJldHVybnMgdGhlIFtTZWxlY3Rvcl0gY29ycmVzcG9uZGluZyB0byB0aGUgaW52b2NhdGlvbiBvZiBbbmFtZV0gd2l0aAogIC8vLyBbYXJndW1lbnRzXS4KICBTZWxlY3RvciBnZXRJbnZvY2F0aW9uU2VsZWN0b3IoaXIuTmFtZSBuYW1lLCBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLCBpbnQgdHlwZUFyZ3VtZW50cyk7CgogIC8vLyBSZXR1cm5zIHRoZSBbTWVtYmVyRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtZW1iZXIgW25vZGVdLgogIE1lbWJlckVudGl0eSBnZXRNZW1iZXIoaXIuTWVtYmVyIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0Z1bmN0aW9uRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9jZWR1cmUgW25vZGVdLgogIEZ1bmN0aW9uRW50aXR5IGdldE1ldGhvZChpci5Qcm9jZWR1cmUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbQ29uc3RydWN0b3JFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdlbmVyYXRpdmUgb3IgZmFjdG9yeQogIC8vLyBjb25zdHJ1Y3RvciBbbm9kZV0uCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0Q29uc3RydWN0b3IoaXIuTWVtYmVyIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0ZpZWxkRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaWVsZCBbbm9kZV0uCiAgRmllbGRFbnRpdHkgZ2V0RmllbGQoaXIuRmllbGQgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbQ2xhc3NFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNsYXNzIFtub2RlXS4KICBDbGFzc0VudGl0eSBnZXRDbGFzcyhpci5DbGFzcyBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtUeXBlZGVmVHlwZV0gY29ycmVzcG9uZGluZyB0byByYXcgdHlwZSBvZiB0aGUgdHlwZWRlZiBbbm9kZV0uCiAgVHlwZWRlZlR5cGUgZ2V0VHlwZWRlZlR5cGUoaXIuVHlwZWRlZiBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIHN1cGVyIFtNZW1iZXJFbnRpdHldIGZvciBhIHN1cGVyIGludm9jYXRpb24sIGdldCBvciBzZXQgb2YKICAvLy8gW25hbWVdIGZyb20gdGhlIG1lbWJlciBbY29udGV4dF0uCiAgTWVtYmVyRW50aXR5IGdldFN1cGVyTWVtYmVyKE1lbWJlckVudGl0eSBjb250ZXh0LCBpci5OYW1lIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2V9KTsKCiAgLy8vIFJldHVybnMgdGhlIGBub1N1Y2hNZXRob2RgIFtGdW5jdGlvbkVudGl0eV0gY2FsbCBmcm9tIGEKICAvLy8gYHN1cGVyLm5vU3VjaE1ldGhvZGAgaW52b2NhdGlvbiB3aXRoaW4gW2Nsc10uCiAgRnVuY3Rpb25FbnRpdHkgZ2V0U3VwZXJOb1N1Y2hNZXRob2QoQ2xhc3NFbnRpdHkgY2xzKTsKCiAgLy8vIFJldHVybnMgdGhlIFtOYW1lXSBjb3JyZXNwb25kaW5nIHRvIFtuYW1lXS4KICBOYW1lIGdldE5hbWUoaXIuTmFtZSBuYW1lKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBbTmF0aXZlQmVoYXZpb3JdIGZvciBhIGNhbGwgdG8gdGhlIFtKU10gZnVuY3Rpb24uCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0NhbGwoaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBbTmF0aXZlQmVoYXZpb3JdIGZvciBhIGNhbGwgdG8gdGhlIFtKU19CVUlMVElOXQogIC8vLyBmdW5jdGlvbi4KICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVCZWhhdmlvckZvckpzQnVpbHRpbkNhbGwoaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBbTmF0aXZlQmVoYXZpb3JdIGZvciBhIGNhbGwgdG8gdGhlCiAgLy8vIFtKU19FTUJFRERFRF9HTE9CQUxdIGZ1bmN0aW9uLgogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9ySnNFbWJlZGRlZEdsb2JhbENhbGwoCiAgICAgIGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbanMuTmFtZV0gZm9yIHRoZSBgSnNHZXROYW1lYCBbY29uc3RhbnRdIHZhbHVlLgogIGpzLk5hbWUgZ2V0TmFtZUZvckpzR2V0TmFtZShDb25zdGFudFZhbHVlIGNvbnN0YW50LCBOYW1lciBuYW1lcik7CgogIC8vLyBDb21wdXRlcyB0aGUgW0NvbnN0YW50VmFsdWVdIGZvciB0aGUgY29uc3RhbnQgW2V4cHJlc3Npb25dLgogIENvbnN0YW50VmFsdWUgZ2V0Q29uc3RhbnRWYWx1ZShpci5FeHByZXNzaW9uIGV4cHJlc3Npb24sCiAgICAgIHtib29sIHJlcXVpcmVDb25zdGFudDogdHJ1ZSwgYm9vbCBpbXBsaWNpdE51bGw6IGZhbHNlfSk7CgogIC8vLyBSZXR1cm4gdGhlIFtJbXBvcnRFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gW25vZGVdLgogIEltcG9ydEVudGl0eSBnZXRJbXBvcnQoaXIuTGlicmFyeURlcGVuZGVuY3kgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBkZWZpbmluZyBub2RlIGZvciBbY2xzXS4KICBpci5DbGFzcyBnZXRDbGFzc05vZGUoY292YXJpYW50IENsYXNzRW50aXR5IGNscyk7CgogIC8vLyBBZGRzIGxpYnJhcmllcyBpbiBbY29tcG9uZW50XSB0byB0aGUgc2V0IG9mIGxpYnJhcmllcy4KICAvLy8KICAvLy8gVGhlIG1haW4gbWV0aG9kIG9mIHRoZSBmaXJzdCBjb21wb25lbnQgaXMgdXNlZCBhcyB0aGUgbWFpbiBtZXRob2QgZm9yIHRoZQogIC8vLyBjb21waWxhdGlvbi4KICB2b2lkIGFkZENvbXBvbmVudChpci5Db21wb25lbnQgY29tcG9uZW50KTsKCiAgLy8vIFJldHVybnMgdGhlIFtDb25zdHJ1Y3RvckVudGl0eV0gY29ycmVzcG9uZGluZyB0byBhIHN1cGVyIGluaXRpYWxpemVyIGluCiAgLy8vIFtjb25zdHJ1Y3Rvcl0uCiAgLy8vCiAgLy8vIFRoZSBJUiByZXNvbHZlcyBzdXBlciBpbml0aWFsaXplcnMgdG8gYSBbdGFyZ2V0XSB1cCBpbiB0aGUgdHlwZSBoaWVyYXJjaHkuCiAgLy8vIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHRoZSBlbnRpdHkKICAvLy8gY29ycmVzcG9uZGluZyB0byB0aGF0IHRhcmdldC4gSW4gdGhlIHByZXNlbmNlIG9mIHVubmFtZWQgbWl4aW5zLCB0aGlzCiAgLy8vIGZ1bmN0aW9uIHJldHVybnMgYW4gZW50aXR5IGZvciBhbiBpbnRlcm1lZGlhdGUgc3ludGhldGljIGNvbnN0cnVjdG9yIHRoYXQKICAvLy8ga2VybmVsIGRvZXNuJ3QgZXhwbGljaXRseSByZXByZXNlbnQuCiAgLy8vCiAgLy8vIEZvciBleGFtcGxlOgogIC8vLyAgICAgY2xhc3MgTSB7fQogIC8vLyAgICAgY2xhc3MgQyBleHRlbmRzIE9iamVjdCB3aXRoIE0ge30KICAvLy8KICAvLy8gS2VybmVsIHdpbGwgc2F5IHRoYXQgQygpJ3Mgc3VwZXIgaW5pdGlhbGl6ZXIgcmVzb2x2ZXMgdG8gT2JqZWN0KCksIGJ1dAogIC8vLyB0aGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGFuIGVudGl0eSByZXByZXNlbnRpbmcgdGhlIHVubmFtZWQgbWl4aW4KICAvLy8gYXBwbGljYXRpb24gIk9iamVjdCtNIidzIGNvbnN0cnVjdG9yLgogIENvbnN0cnVjdG9yRW50aXR5IGdldFN1cGVyQ29uc3RydWN0b3IoCiAgICAgIGlyLkNvbnN0cnVjdG9yIGNvbnN0cnVjdG9yLCBpci5NZW1iZXIgdGFyZ2V0KTsKCiAgLy8vIENvbXB1dGVzIHRoZSBuYXRpdmUgYmVoYXZpb3IgZm9yIHJlYWRpbmcgdGhlIG5hdGl2ZSBbZmllbGRdLgogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9yRmllbGRMb2FkKGlyLkZpZWxkIGZpZWxkLAogICAgICBJdGVyYWJsZTxTdHJpbmc+IGNyZWF0ZXNBbm5vdGF0aW9ucywgSXRlcmFibGU8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnMsCiAgICAgIHtib29sIGlzSnNJbnRlcm9wfSk7CgogIC8vLyBDb21wdXRlcyB0aGUgbmF0aXZlIGJlaGF2aW9yIGZvciB3cml0aW5nIHRvIHRoZSBuYXRpdmUgW2ZpZWxkXS4KICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVCZWhhdmlvckZvckZpZWxkU3RvcmUoaXIuRmllbGQgZmllbGQpOwoKICAvLy8gQ29tcHV0ZXMgdGhlIG5hdGl2ZSBiZWhhdmlvciBmb3IgY2FsbGluZyB0aGUgZnVuY3Rpb24gb3IgY29uc3RydWN0b3IKICAvLy8gW21lbWJlcl0uCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JNZXRob2QoaXIuTWVtYmVyIG1lbWJlciwKICAgICAgSXRlcmFibGU8U3RyaW5nPiBjcmVhdGVzQW5ub3RhdGlvbnMsIEl0ZXJhYmxlPFN0cmluZz4gcmV0dXJuc0Fubm90YXRpb25zLAogICAgICB7Ym9vbCBpc0pzSW50ZXJvcH0pOwoKICAvLy8gQ29tcHV0ZSB0aGUga2luZCBvZiBmb3JlaWduIGhlbHBlciBmdW5jdGlvbiBjYWxsZWQgYnkgW25vZGVdLCBpZiBhbnkuCiAgRm9yZWlnbktpbmQgZ2V0Rm9yZWlnbktpbmQoaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKTsKCiAgLy8vIENvbXB1dGVzIHRoZSBbSW50ZXJmYWNlVHlwZV0gcmVmZXJlbmNlZCBieSBhIGNhbGwgdG8gdGhlCiAgLy8vIFtKU19JTlRFUkNFUFRPUl9DT05TVEFOVF0gZnVuY3Rpb24sIGlmIGFueS4KICBJbnRlcmZhY2VUeXBlIGdldEludGVyZmFjZVR5cGVGb3JKc0ludGVyY2VwdG9yQ2FsbChpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0xvY2FsXSBjb3JyZXNwb25kaW5nIHRvIHRoZSBsb2NhbCBmdW5jdGlvbiBbbm9kZV0uCiAgTG9jYWwgZ2V0TG9jYWxGdW5jdGlvbihpci5Mb2NhbEZ1bmN0aW9uIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW2lyLkxpYnJhcnldIGNvcnJlc3BvbmRpbmcgdG8gW2xpYnJhcnldLgogIGlyLkxpYnJhcnkgZ2V0TGlicmFyeU5vZGUoTGlicmFyeUVudGl0eSBsaWJyYXJ5KTsKCiAgLy8vIFJldHVybnMgdGhlIG5vZGUgdGhhdCBkZWZpbmVzIFt0eXBlZGVmXS4KICBpci5UeXBlZGVmIGdldFR5cGVkZWZOb2RlKGNvdmFyaWFudCBUeXBlZGVmRW50aXR5IHR5cGVkZWYpOwoKICAvLy8gUmV0dXJucyB0aGUgZGVmaW5pbmcgbm9kZSBmb3IgW21lbWJlcl0uCiAgaXIuTWVtYmVyIGdldE1lbWJlck5vZGUoY292YXJpYW50IE1lbWJlckVudGl0eSBtZW1iZXIpOwp9CgovLy8gS2luZHMgb2YgZm9yZWlnbiBmdW5jdGlvbnMuCmVudW0gRm9yZWlnbktpbmQgewogIEpTLAogIEpTX0JVSUxUSU4sCiAgSlNfRU1CRURERURfR0xPQkFMLAogIEpTX0lOVEVSQ0VQVE9SX0NPTlNUQU5ULAogIE5PTkUsCn0KgLwATk48ASg0NQEjTCQhIR4jKSIqJAFMLSQuJwE2JgEoFwFEKgFDKAE2KgE7OQE+QwEwNgFLFyU2AUQ6AUwTSDcBRSoBSi8BURo0AUMnAUMnAVEvAU0oQh0BPjQ4ATIeAUVHAUMQTgE2JTshAUJEAUI7PwE5NQErNAE9BlATLQFOFQZRR0xQKwYTFSsGTUksKTUBQz9QGwFGQQFLED5QGwFMOAE/MlABRjEBOzQBLz4BLjoCASATBg4WGwgCASxwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwvZWxlbWVudF9tYXAuZGFydDpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9rZXJuZWwvZWxlbWVudF9tYXBfaW1wbC5kYXJ0wAEzoS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMua2VybmVsLmVsZW1lbnRfbWFwOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTpqc19ydW50aW1lL3NoYXJlZC9lbWJlZGRlZF9uYW1lcy5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL3Jlc29sdXRpb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2NvbXBpbGVfdGltZV9jb25zdGFudHMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0cnVjdG9ycy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvZXZhbHVhdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9pbmRleGVkLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2Vudmlyb25tZW50LmRhcnQnOwppbXBvcnQgJy4uL2Zyb250ZW5kX3N0cmF0ZWd5LmRhcnQnOwppbXBvcnQgJy4uL2lyL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2lyL2NvbnN0YW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9kZWJ1Zy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9lbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICcuLi9pci9pbXBhY3QuZGFydCc7CmltcG9ydCAnLi4vaXIvaW1wYWN0X2RhdGEuZGFydCc7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGUuZGFydCc7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGVfY2FjaGUuZGFydCc7CmltcG9ydCAnLi4vaXIvc2NvcGUuZGFydCc7CmltcG9ydCAnLi4vaXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaXIvdmlzaXRvcnMuZGFydCc7CmltcG9ydCAnLi4vaXIvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25vX3N1Y2hfbWV0aG9kX3JlZ2lzdHJ5LmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2xvY2Fscy5kYXJ0JzsKaW1wb3J0ICcuLi9rZXJuZWwvZGFydDJqc190YXJnZXQuZGFydCc7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9yZXNvbHZlci5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL29yZGVyZWRfdHlwZXNldC5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9jbGFzc19oaWVyYXJjaHkuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CgppbXBvcnQgJ2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJ2Vudi5kYXJ0JzsKaW1wb3J0ICdrZWxlbWVudHMuZGFydCc7CmltcG9ydCAna2VybmVsX2ltcGFjdC5kYXJ0JzsKCnBhcnQgJ25hdGl2ZV9iYXNpY19kYXRhLmRhcnQnOwpwYXJ0ICdub19zdWNoX21ldGhvZF9yZXNvbHZlci5kYXJ0JzsKCi8vLyBJbXBsZW1lbnRhdGlvbiBvZiBbS2VybmVsVG9FbGVtZW50TWFwXSB0aGF0IG9ubHkgc3VwcG9ydHMgd29ybGQKLy8vIGltcGFjdCBjb21wdXRhdGlvbi4KY2xhc3MgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBpbXBsZW1lbnRzIEtlcm5lbFRvRWxlbWVudE1hcCwgSXJUb0VsZW1lbnRNYXAgewogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zOwogIEBvdmVycmlkZQogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlcjsKICBmaW5hbCBFbnZpcm9ubWVudCBfZW52aXJvbm1lbnQ7CiAgQ29tbW9uRWxlbWVudHNJbXBsIF9jb21tb25FbGVtZW50czsKICBLZXJuZWxFbGVtZW50RW52aXJvbm1lbnQgX2VsZW1lbnRFbnZpcm9ubWVudDsKICBEYXJ0VHlwZUNvbnZlcnRlciBfdHlwZUNvbnZlcnRlcjsKICBLZXJuZWxDb25zdGFudEVudmlyb25tZW50IF9jb25zdGFudEVudmlyb25tZW50OwogIEtlcm5lbERhcnRUeXBlcyBfdHlwZXM7CiAgaXIuVHlwZUVudmlyb25tZW50IF90eXBlRW52aXJvbm1lbnQ7CiAgaXIuQ2xhc3NIaWVyYXJjaHkgX2NsYXNzSGllcmFyY2h5OwogIERhcnQyanNDb25zdGFudEV2YWx1YXRvciBfY29uc3RhbnRFdmFsdWF0b3I7CiAgQ29uc3RhbnRWYWx1ZWZpZXIgX2NvbnN0YW50VmFsdWVmaWVyOwoKICAvLy8gTGlicmFyeSBlbnZpcm9ubWVudC4gVXNlZCBmb3IgZmFzdCBsb29rdXAuCiAgS1Byb2dyYW1FbnYgZW52ID0gbmV3IEtQcm9ncmFtRW52KCk7CgogIGZpbmFsIEVudGl0eURhdGFFbnZNYXA8SW5kZXhlZExpYnJhcnksIEtMaWJyYXJ5RGF0YSwgS0xpYnJhcnlFbnY+IGxpYnJhcmllcyA9CiAgICAgIG5ldyBFbnRpdHlEYXRhRW52TWFwPEluZGV4ZWRMaWJyYXJ5LCBLTGlicmFyeURhdGEsIEtMaWJyYXJ5RW52PigpOwogIGZpbmFsIEVudGl0eURhdGFFbnZNYXA8SW5kZXhlZENsYXNzLCBLQ2xhc3NEYXRhLCBLQ2xhc3NFbnY+IGNsYXNzZXMgPQogICAgICBuZXcgRW50aXR5RGF0YUVudk1hcDxJbmRleGVkQ2xhc3MsIEtDbGFzc0RhdGEsIEtDbGFzc0Vudj4oKTsKICBmaW5hbCBFbnRpdHlEYXRhTWFwPEluZGV4ZWRNZW1iZXIsIEtNZW1iZXJEYXRhPiBtZW1iZXJzID0KICAgICAgbmV3IEVudGl0eURhdGFNYXA8SW5kZXhlZE1lbWJlciwgS01lbWJlckRhdGE+KCk7CiAgZmluYWwgRW50aXR5RGF0YU1hcDxJbmRleGVkVHlwZVZhcmlhYmxlLCBLVHlwZVZhcmlhYmxlRGF0YT4gdHlwZVZhcmlhYmxlcyA9CiAgICAgIG5ldyBFbnRpdHlEYXRhTWFwPEluZGV4ZWRUeXBlVmFyaWFibGUsIEtUeXBlVmFyaWFibGVEYXRhPigpOwogIGZpbmFsIEVudGl0eURhdGFNYXA8SW5kZXhlZFR5cGVkZWYsIEtUeXBlZGVmRGF0YT4gdHlwZWRlZnMgPQogICAgICBuZXcgRW50aXR5RGF0YU1hcDxJbmRleGVkVHlwZWRlZiwgS1R5cGVkZWZEYXRhPigpOwoKICAvLy8gU2V0IHRvIGB0cnVlYCBiZWZvcmUgY3JlYXRpbmcgdGhlIEotV29ybGQgZnJvbSB0aGUgSy1Xb3JsZCB0byBhc3NlcnQgdGhhdAogIC8vLyBubyBlbnRpdGllcyBhcmUgY3JlYXRlZCBsYXRlLgogIGJvb2wgZW52SXNDbG9zZWQgPSBmYWxzZTsKCiAgZmluYWwgTWFwPGlyLkxpYnJhcnksIEluZGV4ZWRMaWJyYXJ5PiBsaWJyYXJ5TWFwID0ge307CiAgZmluYWwgTWFwPGlyLkNsYXNzLCBJbmRleGVkQ2xhc3M+IGNsYXNzTWFwID0ge307CiAgZmluYWwgTWFwPGlyLlR5cGVkZWYsIEluZGV4ZWRUeXBlZGVmPiB0eXBlZGVmTWFwID0ge307CgogIC8vLyBNYXAgZnJvbSBbaXIuVHlwZVBhcmFtZXRlcl0gbm9kZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcKICAvLy8gW1R5cGVWYXJpYWJsZUVudGl0eV0uCiAgLy8vCiAgLy8vIE5vcm1hbGx5IHRoZSB0eXBlIHZhcmlhYmxlcyBhcmUgW0luZGV4ZWRUeXBlVmFyaWFibGVdcywgYnV0IGZvciB0eXBlCiAgLy8vIHBhcmFtZXRlcnMgb24gbG9jYWwgZnVuY3Rpb24gKGluIHRoZSBmcm9udGVuZCkgdGhlc2UgYXJlIF9ub3RfIHNpbmNlCiAgLy8vIHRoZWlyIHR5cGUgZGVjbGFyYXRpb24gaXMgbmVpdGhlciBhIGNsYXNzIG5vciBhIG1lbWJlci4gSW4gdGhlIGJhY2tlbmQsCiAgLy8vIHRoZXNlIHR5cGUgcGFyYW1ldGVycyBiZWxvbmcgdG8gdGhlIGNhbGwtbWV0aG9kIGFuZCBhcmUgdGhlcmVmb3JlIGluZGV4ZWQuCiAgZmluYWwgTWFwPGlyLlR5cGVQYXJhbWV0ZXIsIFR5cGVWYXJpYWJsZUVudGl0eT4gdHlwZVZhcmlhYmxlTWFwID0ge307CiAgZmluYWwgTWFwPGlyLk1lbWJlciwgSW5kZXhlZENvbnN0cnVjdG9yPiBjb25zdHJ1Y3Rvck1hcCA9IHt9OwogIGZpbmFsIE1hcDxpci5Qcm9jZWR1cmUsIEluZGV4ZWRGdW5jdGlvbj4gbWV0aG9kTWFwID0ge307CiAgZmluYWwgTWFwPGlyLkZpZWxkLCBJbmRleGVkRmllbGQ+IGZpZWxkTWFwID0ge307CiAgZmluYWwgTWFwPGlyLlRyZWVOb2RlLCBMb2NhbD4gbG9jYWxGdW5jdGlvbk1hcCA9IHt9OwoKICBCZWhhdmlvckJ1aWxkZXIgX25hdGl2ZUJlaGF2aW9yQnVpbGRlcjsKICBGcm9udGVuZFN0cmF0ZWd5IF9mcm9udGVuZFN0cmF0ZWd5OwoKICBNYXA8S01lbWJlciwgTWFwPGlyLkV4cHJlc3Npb24sIFR5cGVNYXA+PiB0eXBlTWFwc0ZvclRlc3Rpbmc7CgogIEtlcm5lbFRvRWxlbWVudE1hcEltcGwoCiAgICAgIHRoaXMucmVwb3J0ZXIsIHRoaXMuX2Vudmlyb25tZW50LCB0aGlzLl9mcm9udGVuZFN0cmF0ZWd5LCB0aGlzLm9wdGlvbnMpIHsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQgPSBuZXcgS2VybmVsRWxlbWVudEVudmlyb25tZW50KHRoaXMpOwogICAgX2NvbW1vbkVsZW1lbnRzID0gbmV3IENvbW1vbkVsZW1lbnRzSW1wbChfZWxlbWVudEVudmlyb25tZW50LCBvcHRpb25zKTsKICAgIF9jb25zdGFudEVudmlyb25tZW50ID0gbmV3IEtlcm5lbENvbnN0YW50RW52aXJvbm1lbnQodGhpcywgX2Vudmlyb25tZW50KTsKICAgIF90eXBlQ29udmVydGVyID0gbmV3IERhcnRUeXBlQ29udmVydGVyKHRoaXMpOwogICAgX3R5cGVzID0gbmV3IEtlcm5lbERhcnRUeXBlcyh0aGlzKTsKICAgIF9jb25zdGFudFZhbHVlZmllciA9IG5ldyBDb25zdGFudFZhbHVlZmllcih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlcyBnZXQgdHlwZXMgPT4gX3R5cGVzOwoKICBAb3ZlcnJpZGUKICBLZXJuZWxFbGVtZW50RW52aXJvbm1lbnQgZ2V0IGVsZW1lbnRFbnZpcm9ubWVudCA9PiBfZWxlbWVudEVudmlyb25tZW50OwoKICBAb3ZlcnJpZGUKICBDb21tb25FbGVtZW50c0ltcGwgZ2V0IGNvbW1vbkVsZW1lbnRzID0+IF9jb21tb25FbGVtZW50czsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IF9tYWluRnVuY3Rpb24gewogICAgcmV0dXJuIGVudi5tYWluTWV0aG9kICE9IG51bGwgPyBnZXRNZXRob2RJbnRlcm5hbChlbnYubWFpbk1ldGhvZCkgOiBudWxsOwogIH0KCiAgTGlicmFyeUVudGl0eSBnZXQgX21haW5MaWJyYXJ5IHsKICAgIHJldHVybiBlbnYubWFpbk1ldGhvZCAhPSBudWxsCiAgICAgICAgPyBnZXRMaWJyYXJ5SW50ZXJuYWwoZW52Lm1haW5NZXRob2QuZW5jbG9zaW5nTGlicmFyeSkKICAgICAgICA6IG51bGw7CiAgfQoKICBTb3VyY2VTcGFuIGdldFNvdXJjZVNwYW4oU3Bhbm5hYmxlIHNwYW5uYWJsZSwgRW50aXR5IGN1cnJlbnRFbGVtZW50KSB7CiAgICBTb3VyY2VTcGFuIGZyb21TcGFubmFibGUoU3Bhbm5hYmxlIHNwYW5uYWJsZSkgewogICAgICBpZiAoc3Bhbm5hYmxlIGlzIEluZGV4ZWRMaWJyYXJ5ICYmCiAgICAgICAgICBzcGFubmFibGUubGlicmFyeUluZGV4IDwgbGlicmFyaWVzLmxlbmd0aCkgewogICAgICAgIEtMaWJyYXJ5RW52IGVudiA9IGxpYnJhcmllcy5nZXRFbnYoc3Bhbm5hYmxlKTsKICAgICAgICByZXR1cm4gY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUoZW52LmxpYnJhcnkpOwogICAgICB9IGVsc2UgaWYgKHNwYW5uYWJsZSBpcyBJbmRleGVkQ2xhc3MgJiYKICAgICAgICAgIHNwYW5uYWJsZS5jbGFzc0luZGV4IDwgY2xhc3Nlcy5sZW5ndGgpIHsKICAgICAgICBLQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoc3Bhbm5hYmxlKTsKICAgICAgICBhc3NlcnQoZGF0YSAhPSBudWxsLCAiTm8gZGF0YSBmb3IgJHNwYW5uYWJsZSBpbiAkdGhpcyIpOwogICAgICAgIHJldHVybiBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShkYXRhLm5vZGUpOwogICAgICB9IGVsc2UgaWYgKHNwYW5uYWJsZSBpcyBJbmRleGVkTWVtYmVyICYmCiAgICAgICAgICBzcGFubmFibGUubWVtYmVySW5kZXggPCBtZW1iZXJzLmxlbmd0aCkgewogICAgICAgIEtNZW1iZXJEYXRhIGRhdGEgPSBtZW1iZXJzLmdldERhdGEoc3Bhbm5hYmxlKTsKICAgICAgICBhc3NlcnQoZGF0YSAhPSBudWxsLCAiTm8gZGF0YSBmb3IgJHNwYW5uYWJsZSBpbiAkdGhpcyIpOwogICAgICAgIHJldHVybiBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShkYXRhLm5vZGUpOwogICAgICB9IGVsc2UgaWYgKHNwYW5uYWJsZSBpcyBLTG9jYWxGdW5jdGlvbikgewogICAgICAgIHJldHVybiBnZXRTb3VyY2VTcGFuKHNwYW5uYWJsZS5tZW1iZXJDb250ZXh0LCBjdXJyZW50RWxlbWVudCk7CiAgICAgIH0gZWxzZSBpZiAoc3Bhbm5hYmxlIGlzIEpMb2NhbCkgewogICAgICAgIHJldHVybiBnZXRTb3VyY2VTcGFuKHNwYW5uYWJsZS5tZW1iZXJDb250ZXh0LCBjdXJyZW50RWxlbWVudCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgU291cmNlU3BhbiBzb3VyY2VTcGFuID0gZnJvbVNwYW5uYWJsZShzcGFubmFibGUpOwogICAgc291cmNlU3BhbiA/Pz0gZnJvbVNwYW5uYWJsZShjdXJyZW50RWxlbWVudCk7CiAgICByZXR1cm4gc291cmNlU3BhbjsKICB9CgogIExpYnJhcnlFbnRpdHkgbG9va3VwTGlicmFyeShVcmkgdXJpKSB7CiAgICBLTGlicmFyeUVudiBsaWJyYXJ5RW52ID0gZW52Lmxvb2t1cExpYnJhcnkodXJpKTsKICAgIGlmIChsaWJyYXJ5RW52ID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIGdldExpYnJhcnlJbnRlcm5hbChsaWJyYXJ5RW52LmxpYnJhcnksIGxpYnJhcnlFbnYpOwogIH0KCiAgU3RyaW5nIF9nZXRMaWJyYXJ5TmFtZShJbmRleGVkTGlicmFyeSBsaWJyYXJ5KSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkobGlicmFyeSkpOwogICAgS0xpYnJhcnlFbnYgbGlicmFyeUVudiA9IGxpYnJhcmllcy5nZXRFbnYobGlicmFyeSk7CiAgICByZXR1cm4gbGlicmFyeUVudi5saWJyYXJ5Lm5hbWUgPz8gJyc7CiAgfQoKICBNZW1iZXJFbnRpdHkgbG9va3VwTGlicmFyeU1lbWJlcihJbmRleGVkTGlicmFyeSBsaWJyYXJ5LCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShsaWJyYXJ5KSk7CiAgICBLTGlicmFyeUVudiBsaWJyYXJ5RW52ID0gbGlicmFyaWVzLmdldEVudihsaWJyYXJ5KTsKICAgIGlyLk1lbWJlciBtZW1iZXIgPSBsaWJyYXJ5RW52Lmxvb2t1cE1lbWJlcihuYW1lLCBzZXR0ZXI6IHNldHRlcik7CiAgICByZXR1cm4gbWVtYmVyICE9IG51bGwgPyBnZXRNZW1iZXIobWVtYmVyKSA6IG51bGw7CiAgfQoKICB2b2lkIF9mb3JFYWNoTGlicmFyeU1lbWJlcigKICAgICAgSW5kZXhlZExpYnJhcnkgbGlicmFyeSwgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkobGlicmFyeSkpOwogICAgS0xpYnJhcnlFbnYgbGlicmFyeUVudiA9IGxpYnJhcmllcy5nZXRFbnYobGlicmFyeSk7CiAgICBsaWJyYXJ5RW52LmZvckVhY2hNZW1iZXIoKGlyLk1lbWJlciBub2RlKSB7CiAgICAgIGYoZ2V0TWVtYmVyKG5vZGUpKTsKICAgIH0pOwogIH0KCiAgQ2xhc3NFbnRpdHkgbG9va3VwQ2xhc3MoSW5kZXhlZExpYnJhcnkgbGlicmFyeSwgU3RyaW5nIG5hbWUpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShsaWJyYXJ5KSk7CiAgICBLTGlicmFyeUVudiBsaWJyYXJ5RW52ID0gbGlicmFyaWVzLmdldEVudihsaWJyYXJ5KTsKICAgIEtDbGFzc0VudiBjbGFzc0VudiA9IGxpYnJhcnlFbnYubG9va3VwQ2xhc3MobmFtZSk7CiAgICBpZiAoY2xhc3NFbnYgIT0gbnVsbCkgewogICAgICByZXR1cm4gZ2V0Q2xhc3NJbnRlcm5hbChjbGFzc0Vudi5jbHMsIGNsYXNzRW52KTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBfZm9yRWFjaENsYXNzKEluZGV4ZWRMaWJyYXJ5IGxpYnJhcnksIHZvaWQgZihDbGFzc0VudGl0eSBjbHMpKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkobGlicmFyeSkpOwogICAgS0xpYnJhcnlFbnYgbGlicmFyeUVudiA9IGxpYnJhcmllcy5nZXRFbnYobGlicmFyeSk7CiAgICBsaWJyYXJ5RW52LmZvckVhY2hDbGFzcygoS0NsYXNzRW52IGNsYXNzRW52KSB7CiAgICAgIGlmICghY2xhc3NFbnYuaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbikgewogICAgICAgIGYoZ2V0Q2xhc3NJbnRlcm5hbChjbGFzc0Vudi5jbHMsIGNsYXNzRW52KSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdm9pZCBlbnN1cmVDbGFzc01lbWJlcnMoaXIuQ2xhc3Mgbm9kZSkgewogICAgY2xhc3Nlcy5nZXRFbnYoZ2V0Q2xhc3NJbnRlcm5hbChub2RlKSkuZW5zdXJlTWVtYmVycyh0aGlzKTsKICB9CgogIE1lbWJlckVudGl0eSBsb29rdXBDbGFzc01lbWJlcihJbmRleGVkQ2xhc3MgY2xzLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0VudiBjbGFzc0VudiA9IGNsYXNzZXMuZ2V0RW52KGNscyk7CiAgICByZXR1cm4gY2xhc3NFbnYubG9va3VwTWVtYmVyKHRoaXMsIG5hbWUsIHNldHRlcjogc2V0dGVyKTsKICB9CgogIENvbnN0cnVjdG9yRW50aXR5IGxvb2t1cENvbnN0cnVjdG9yKEluZGV4ZWRDbGFzcyBjbHMsIFN0cmluZyBuYW1lKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NFbnYgY2xhc3NFbnYgPSBjbGFzc2VzLmdldEVudihjbHMpOwogICAgcmV0dXJuIGNsYXNzRW52Lmxvb2t1cENvbnN0cnVjdG9yKHRoaXMsIG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBjcmVhdGVJbnRlcmZhY2VUeXBlKAogICAgICBpci5DbGFzcyBjbHMsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShnZXRDbGFzcyhjbHMpLCBnZXREYXJ0VHlwZXModHlwZUFyZ3VtZW50cykpOwogIH0KCiAgTGlicmFyeUVudGl0eSBnZXRMaWJyYXJ5KGlyLkxpYnJhcnkgbm9kZSkgPT4gZ2V0TGlicmFyeUludGVybmFsKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXRDbGFzcyhpci5DbGFzcyBub2RlKSA9PiBnZXRDbGFzc0ludGVybmFsKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldFN1cGVyVHlwZShJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICByZXR1cm4gZGF0YS5zdXBlcnR5cGU7CiAgfQoKICB2b2lkIF9lbnN1cmVUaGlzQW5kUmF3VHlwZShDbGFzc0VudGl0eSBjbHMsIEtDbGFzc0RhdGEgZGF0YSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgaWYgKGRhdGEgaXMgS0NsYXNzRGF0YUltcGwgJiYgZGF0YS50aGlzVHlwZSA9PSBudWxsKSB7CiAgICAgIGlyLkNsYXNzIG5vZGUgPSBkYXRhLm5vZGU7CiAgICAgIGlmIChub2RlLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgICBkYXRhLnRoaXNUeXBlID0KICAgICAgICAgICAgZGF0YS5yYXdUeXBlID0gbmV3IEludGVyZmFjZVR5cGUoY2xzLCBjb25zdCA8RGFydFR5cGU+W10pOwogICAgICB9IGVsc2UgewogICAgICAgIGRhdGEudGhpc1R5cGUgPSBuZXcgSW50ZXJmYWNlVHlwZSgKICAgICAgICAgICAgY2xzLAogICAgICAgICAgICBuZXcgTGlzdDxEYXJ0VHlwZT4uZ2VuZXJhdGUobm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGgsCiAgICAgICAgICAgICAgICAoaW50IGluZGV4KSB7CiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBlVmFyaWFibGVUeXBlKAogICAgICAgICAgICAgICAgICBnZXRUeXBlVmFyaWFibGVJbnRlcm5hbChub2RlLnR5cGVQYXJhbWV0ZXJzW2luZGV4XSkpOwogICAgICAgICAgICB9KSk7CiAgICAgICAgZGF0YS5yYXdUeXBlID0gbmV3IEludGVyZmFjZVR5cGUoCiAgICAgICAgICAgIGNscywKICAgICAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCgKICAgICAgICAgICAgICAgIG5vZGUudHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBjb25zdCBEeW5hbWljVHlwZSgpKSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIFR5cGVWYXJpYWJsZUVudGl0eSBnZXRUeXBlVmFyaWFibGUoaXIuVHlwZVBhcmFtZXRlciBub2RlKSA9PgogICAgICBnZXRUeXBlVmFyaWFibGVJbnRlcm5hbChub2RlKTsKCiAgdm9pZCBfZW5zdXJlU3VwZXJ0eXBlcyhDbGFzc0VudGl0eSBjbHMsIEtDbGFzc0RhdGEgZGF0YSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgaWYgKGRhdGEgaXMgS0NsYXNzRGF0YUltcGwgJiYgZGF0YS5vcmRlcmVkVHlwZVNldCA9PSBudWxsKSB7CiAgICAgIF9lbnN1cmVUaGlzQW5kUmF3VHlwZShjbHMsIGRhdGEpOwoKICAgICAgaXIuQ2xhc3Mgbm9kZSA9IGRhdGEubm9kZTsKCiAgICAgIGlmIChub2RlLnN1cGVydHlwZSA9PSBudWxsKSB7CiAgICAgICAgZGF0YS5vcmRlcmVkVHlwZVNldCA9IG5ldyBPcmRlcmVkVHlwZVNldC5zaW5nbGV0b24oZGF0YS50aGlzVHlwZSk7CiAgICAgICAgZGF0YS5pc01peGluQXBwbGljYXRpb24gPSBmYWxzZTsKICAgICAgICBkYXRhLmludGVyZmFjZXMgPSBjb25zdCA8SW50ZXJmYWNlVHlwZT5bXTsKICAgICAgfSBlbHNlIHsKICAgICAgICBJbnRlcmZhY2VUeXBlIHByb2Nlc3NTdXBlcnR5cGUoaXIuU3VwZXJ0eXBlIG5vZGUpIHsKICAgICAgICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlID0gX3R5cGVDb252ZXJ0ZXIudmlzaXRTdXBlcnR5cGUobm9kZSk7CiAgICAgICAgICBJbmRleGVkQ2xhc3Mgc3VwZXJjbGFzcyA9IHN1cGVydHlwZS5lbGVtZW50OwogICAgICAgICAgS0NsYXNzRGF0YSBzdXBlcmRhdGEgPSBjbGFzc2VzLmdldERhdGEoc3VwZXJjbGFzcyk7CiAgICAgICAgICBfZW5zdXJlU3VwZXJ0eXBlcyhzdXBlcmNsYXNzLCBzdXBlcmRhdGEpOwogICAgICAgICAgcmV0dXJuIHN1cGVydHlwZTsKICAgICAgICB9CgogICAgICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlOwogICAgICAgIGlyLkxpbmtCdWlsZGVyPEludGVyZmFjZVR5cGU+IGxpbmtCdWlsZGVyID0KICAgICAgICAgICAgbmV3IGlyLkxpbmtCdWlsZGVyPEludGVyZmFjZVR5cGU+KCk7CiAgICAgICAgaWYgKG5vZGUuaXNNaXhpbkRlY2xhcmF0aW9uKSB7CiAgICAgICAgICAvLyBBIG1peGluIGRlY2xhcmF0aW9uCiAgICAgICAgICAvLwogICAgICAgICAgLy8gICBtaXhpbiBNIG9uIEEsIEIsIEMge30KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBpcyBlbmNvZGVkIGJ5IENGRSBhcwogICAgICAgICAgLy8KICAgICAgICAgIC8vICAgYWJzdHJhY3QgY2xhc3MgTSBleHRlbmRzIEEgaW1wbGVtZW50cyBCLCBDIHt9CiAgICAgICAgICAvLyAgIGFic3RyYWN0IGNsYXNzIE0gZXh0ZW5kcyBBJkImQyB7fQogICAgICAgICAgLy8KICAgICAgICAgIC8vIGJ1dCB3ZSBlbmNvZGUgaXQgYXMKICAgICAgICAgIC8vCiAgICAgICAgICAvLyAgIGFic3RyYWN0IGNsYXNzIE0gZXh0ZW5kcyBPYmplY3QgaW1wbGVtZW50cyBBLCBCLCBDIHt9CiAgICAgICAgICAvLwogICAgICAgICAgLy8gc28gd2UgbmVlZCBnZXQgdGhlIHN1cGVyY2xhc3NlcyBmcm9tIHRoZSBvbi1jbGF1c2UsIEEsIEIsIGFuZCBDLAogICAgICAgICAgLy8gdGhyb3VnaCBbc3VwZXJjbGFzc0NvbnN0cmFpbnRzXS4KICAgICAgICAgIGZvciAoaXIuU3VwZXJ0eXBlIGNvbnN0cmFpbnQgaW4gbm9kZS5zdXBlcmNsYXNzQ29uc3RyYWludHMoKSkgewogICAgICAgICAgICBsaW5rQnVpbGRlci5hZGRMYXN0KHByb2Nlc3NTdXBlcnR5cGUoY29uc3RyYWludCkpOwogICAgICAgICAgfQogICAgICAgICAgLy8gU2V0IHN1cGVyY2xhc3MgdG8gYE9iamVjdGAuCiAgICAgICAgICBzdXBlcnR5cGUgPSBfY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3VwZXJ0eXBlID0gcHJvY2Vzc1N1cGVydHlwZShub2RlLnN1cGVydHlwZSk7CiAgICAgICAgfQogICAgICAgIGlmIChzdXBlcnR5cGUgPT0gX2NvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGUpIHsKICAgICAgICAgIENsYXNzRW50aXR5IGRlZmF1bHRTdXBlcmNsYXNzID0KICAgICAgICAgICAgICBfY29tbW9uRWxlbWVudHMuZ2V0RGVmYXVsdFN1cGVyY2xhc3MoY2xzLCBuYXRpdmVCYXNpY0RhdGEpOwogICAgICAgICAgZGF0YS5zdXBlcnR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFJhd1R5cGUoZGVmYXVsdFN1cGVyY2xhc3MpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkYXRhLnN1cGVydHlwZSA9IHN1cGVydHlwZTsKICAgICAgICB9CiAgICAgICAgaWYgKG5vZGUubWl4ZWRJblR5cGUgIT0gbnVsbCkgewogICAgICAgICAgZGF0YS5pc01peGluQXBwbGljYXRpb24gPSB0cnVlOwogICAgICAgICAgbGlua0J1aWxkZXIKICAgICAgICAgICAgICAuYWRkTGFzdChkYXRhLm1peGVkSW5UeXBlID0gcHJvY2Vzc1N1cGVydHlwZShub2RlLm1peGVkSW5UeXBlKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRhdGEuaXNNaXhpbkFwcGxpY2F0aW9uID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIG5vZGUuaW1wbGVtZW50ZWRUeXBlcy5mb3JFYWNoKChpci5TdXBlcnR5cGUgc3VwZXJ0eXBlKSB7CiAgICAgICAgICBsaW5rQnVpbGRlci5hZGRMYXN0KHByb2Nlc3NTdXBlcnR5cGUoc3VwZXJ0eXBlKSk7CiAgICAgICAgfSk7CiAgICAgICAgaXIuTGluazxJbnRlcmZhY2VUeXBlPiBpbnRlcmZhY2VzID0KICAgICAgICAgICAgbGlua0J1aWxkZXIudG9MaW5rKGNvbnN0IGlyLkxpbms8SW50ZXJmYWNlVHlwZT4oKSk7CiAgICAgICAgT3JkZXJlZFR5cGVTZXRCdWlsZGVyIHNldEJ1aWxkZXIgPQogICAgICAgICAgICBuZXcgS2VybmVsT3JkZXJlZFR5cGVTZXRCdWlsZGVyKHRoaXMsIGNscyk7CiAgICAgICAgZGF0YS5vcmRlcmVkVHlwZVNldCA9IHNldEJ1aWxkZXIuY3JlYXRlT3JkZXJlZFR5cGVTZXQoCiAgICAgICAgICAgIGRhdGEuc3VwZXJ0eXBlLCBpbnRlcmZhY2VzLnJldmVyc2UoY29uc3QgaXIuTGluazxJbnRlcmZhY2VUeXBlPigpKSk7CiAgICAgICAgZGF0YS5pbnRlcmZhY2VzID0gbmV3IExpc3Q8SW50ZXJmYWNlVHlwZT4uZnJvbShpbnRlcmZhY2VzLnRvTGlzdCgpKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZWRlZlR5cGUgZ2V0VHlwZWRlZlR5cGUoaXIuVHlwZWRlZiBub2RlKSB7CiAgICBJbmRleGVkVHlwZWRlZiB0eXBlZGVmID0gZ2V0VHlwZWRlZkludGVybmFsKG5vZGUpOwogICAgcmV0dXJuIHR5cGVkZWZzLmdldERhdGEodHlwZWRlZikucmF3VHlwZTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBnZXRNZW1iZXIoaXIuTWVtYmVyIG5vZGUpIHsKICAgIGlmIChub2RlIGlzIGlyLkZpZWxkKSB7CiAgICAgIHJldHVybiBnZXRGaWVsZEludGVybmFsKG5vZGUpOwogICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgIHJldHVybiBnZXRDb25zdHJ1Y3RvckludGVybmFsKG5vZGUpOwogICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSkgewogICAgICBpZiAobm9kZS5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuRmFjdG9yeSkgewogICAgICAgIHJldHVybiBnZXRDb25zdHJ1Y3RvckludGVybmFsKG5vZGUpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBnZXRNZXRob2RJbnRlcm5hbChub2RlKTsKICAgICAgfQogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgbWVtYmVyOiAkbm9kZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgTWVtYmVyRW50aXR5IGdldFN1cGVyTWVtYmVyKE1lbWJlckVudGl0eSBjb250ZXh0LCBpci5OYW1lIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2V9KSB7CiAgICAvLyBXZSBjYW4gbm8gbG9uZ2VyIHRydXN0IHRoZSBpbnRlcmZhY2UgdGFyZ2V0IG9mIHRoZSBzdXBlciBhY2Nlc3Mgc2luY2UgaXQKICAgIC8vIG1pZ2h0IGJlIGEgbWVtYmVyIHRoYXQgd2UgaGF2ZSBjbG9uZWQuCiAgICBDbGFzc0VudGl0eSBjbHMgPSBjb250ZXh0LmVuY2xvc2luZ0NsYXNzOwogICAgYXNzZXJ0KAogICAgICAgIGNscyAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KGNvbnRleHQsCiAgICAgICAgICAgICJObyBlbmNsb3NpbmcgY2xhc3MgZm9yIHN1cGVyIG1lbWJlciBhY2Nlc3MgaW4gJGNvbnRleHQuIikpOwogICAgSW5kZXhlZENsYXNzIHN1cGVyY2xhc3MgPSBnZXRTdXBlclR5cGUoY2xzKT8uZWxlbWVudDsKICAgIHdoaWxlIChzdXBlcmNsYXNzICE9IG51bGwpIHsKICAgICAgS0NsYXNzRW52IGVudiA9IGNsYXNzZXMuZ2V0RW52KHN1cGVyY2xhc3MpOwogICAgICBNZW1iZXJFbnRpdHkgc3VwZXJNZW1iZXIgPQogICAgICAgICAgZW52Lmxvb2t1cE1lbWJlcih0aGlzLCBuYW1lLm5hbWUsIHNldHRlcjogc2V0dGVyKTsKICAgICAgaWYgKHN1cGVyTWVtYmVyICE9IG51bGwpIHsKICAgICAgICBpZiAoIXN1cGVyTWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIpIHJldHVybiBudWxsOwogICAgICAgIGlmICghc3VwZXJNZW1iZXIuaXNBYnN0cmFjdCkgewogICAgICAgICAgcmV0dXJuIHN1cGVyTWVtYmVyOwogICAgICAgIH0KICAgICAgfQogICAgICBzdXBlcmNsYXNzID0gZ2V0U3VwZXJUeXBlKHN1cGVyY2xhc3MpPy5lbGVtZW50OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvckVudGl0eSBnZXRDb25zdHJ1Y3Rvcihpci5NZW1iZXIgbm9kZSkgPT4KICAgICAgZ2V0Q29uc3RydWN0b3JJbnRlcm5hbChub2RlKTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0U3VwZXJDb25zdHJ1Y3RvcigKICAgICAgaXIuQ29uc3RydWN0b3Igc291cmNlTm9kZSwgaXIuTWVtYmVyIHRhcmdldE5vZGUpIHsKICAgIENvbnN0cnVjdG9yRW50aXR5IHNvdXJjZSA9IGdldENvbnN0cnVjdG9yKHNvdXJjZU5vZGUpOwogICAgQ2xhc3NFbnRpdHkgc291cmNlQ2xhc3MgPSBzb3VyY2UuZW5jbG9zaW5nQ2xhc3M7CiAgICBDb25zdHJ1Y3RvckVudGl0eSB0YXJnZXQgPSBnZXRDb25zdHJ1Y3Rvcih0YXJnZXROb2RlKTsKICAgIENsYXNzRW50aXR5IHRhcmdldENsYXNzID0gdGFyZ2V0LmVuY2xvc2luZ0NsYXNzOwogICAgSW5kZXhlZENsYXNzIHN1cGVyQ2xhc3MgPSBnZXRTdXBlclR5cGUoc291cmNlQ2xhc3MpPy5lbGVtZW50OwogICAgaWYgKHN1cGVyQ2xhc3MgPT0gdGFyZ2V0Q2xhc3MpIHsKICAgICAgcmV0dXJuIHRhcmdldDsKICAgIH0KCiAgICAvLy8gVGhpcyBwYXRoIGlzIG5lZWRlZCBmb3Igc3ludGhldGljYWxseSBpbmplY3RlZCBzdXBlcmNsYXNzZXMgbGlrZQogICAgLy8vIGBJbnRlcmNlcHRvcmAgYW5kIGBKYXZhU2NyaXB0T2JqZWN0YC4KICAgIEtDbGFzc0VudiBlbnYgPSBjbGFzc2VzLmdldEVudihzdXBlckNsYXNzKTsKICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yID0gZW52Lmxvb2t1cENvbnN0cnVjdG9yKHRoaXMsIHRhcmdldC5uYW1lKTsKICAgIGlmIChjb25zdHJ1Y3RvciAhPSBudWxsKSB7CiAgICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICAgIH0KICAgIHRocm93IGZhaWxlZEF0KHNvdXJjZSwgIlN1cGVyIGNvbnN0cnVjdG9yIGZvciAkc291cmNlIG5vdCBmb3VuZC4iKTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldE1ldGhvZChpci5Qcm9jZWR1cmUgbm9kZSkgPT4gZ2V0TWV0aG9kSW50ZXJuYWwobm9kZSk7CgogIEBvdmVycmlkZQogIEZpZWxkRW50aXR5IGdldEZpZWxkKGlyLkZpZWxkIG5vZGUpID0+IGdldEZpZWxkSW50ZXJuYWwobm9kZSk7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldERhcnRUeXBlKGlyLkRhcnRUeXBlIHR5cGUpID0+IF90eXBlQ29udmVydGVyLmNvbnZlcnQodHlwZSk7CgogIEBvdmVycmlkZQogIFR5cGVWYXJpYWJsZVR5cGUgZ2V0VHlwZVZhcmlhYmxlVHlwZShpci5UeXBlUGFyYW1ldGVyVHlwZSB0eXBlKSA9PgogICAgICBnZXREYXJ0VHlwZSh0eXBlKTsKCiAgTGlzdDxEYXJ0VHlwZT4gZ2V0RGFydFR5cGVzKExpc3Q8aXIuRGFydFR5cGU+IHR5cGVzKSB7CiAgICBMaXN0PERhcnRUeXBlPiBsaXN0ID0gPERhcnRUeXBlPltdOwogICAgdHlwZXMuZm9yRWFjaCgoaXIuRGFydFR5cGUgdHlwZSkgewogICAgICBsaXN0LmFkZChnZXREYXJ0VHlwZSh0eXBlKSk7CiAgICB9KTsKICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRJbnRlcmZhY2VUeXBlKGlyLkludGVyZmFjZVR5cGUgdHlwZSkgPT4KICAgICAgX3R5cGVDb252ZXJ0ZXIuY29udmVydCh0eXBlKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25UeXBlIGdldEZ1bmN0aW9uVHlwZShpci5GdW5jdGlvbk5vZGUgbm9kZSkgewogICAgRGFydFR5cGUgcmV0dXJuVHlwZTsKICAgIGlmIChub2RlLnBhcmVudCBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICAvLyBUaGUgcmV0dXJuIHR5cGUgb24gZ2VuZXJhdGl2ZSBjb25zdHJ1Y3RvcnMgaXMgYHZvaWRgLCBidXQgd2UgbmVlZAogICAgICAvLyBgZHluYW1pY2AgdHlwZSB0byBtYXRjaCB0aGUgZWxlbWVudCBtb2RlbC4KICAgICAgcmV0dXJuVHlwZSA9IGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm5UeXBlID0gZ2V0RGFydFR5cGUobm9kZS5yZXR1cm5UeXBlKTsKICAgIH0KICAgIExpc3Q8RGFydFR5cGU+IHBhcmFtZXRlclR5cGVzID0gPERhcnRUeXBlPltdOwogICAgTGlzdDxEYXJ0VHlwZT4gb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcyA9IDxEYXJ0VHlwZT5bXTsKCiAgICBEYXJ0VHlwZSBnZXRQYXJhbWV0ZXJUeXBlKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpIHsKICAgICAgaWYgKHZhcmlhYmxlLmlzQ292YXJpYW50IHx8IHZhcmlhYmxlLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICAvLyBBIGNvdmFyaWFudCBwYXJhbWV0ZXIgaGFzIHR5cGUgYE9iamVjdGAgaW4gdGhlIG1ldGhvZCBzaWduYXR1cmUuCiAgICAgICAgcmV0dXJuIGNvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGU7CiAgICAgIH0KICAgICAgcmV0dXJuIGdldERhcnRUeXBlKHZhcmlhYmxlLnR5cGUpOwogICAgfQoKICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSBpbiBub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSB7CiAgICAgIGlmIChwYXJhbWV0ZXJUeXBlcy5sZW5ndGggPT0gbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KSB7CiAgICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcy5hZGQoZ2V0UGFyYW1ldGVyVHlwZSh2YXJpYWJsZSkpOwogICAgICB9IGVsc2UgewogICAgICAgIHBhcmFtZXRlclR5cGVzLmFkZChnZXRQYXJhbWV0ZXJUeXBlKHZhcmlhYmxlKSk7CiAgICAgIH0KICAgIH0KICAgIExpc3Q8U3RyaW5nPiBuYW1lZFBhcmFtZXRlcnMgPSA8U3RyaW5nPltdOwogICAgTGlzdDxEYXJ0VHlwZT4gbmFtZWRQYXJhbWV0ZXJUeXBlcyA9IDxEYXJ0VHlwZT5bXTsKICAgIExpc3Q8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gc29ydGVkTmFtZWRQYXJhbWV0ZXJzID0KICAgICAgICBub2RlLm5hbWVkUGFyYW1ldGVycy50b0xpc3QoKS4uc29ydCgoYSwgYikgPT4gYS5uYW1lLmNvbXBhcmVUbyhiLm5hbWUpKTsKICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSBpbiBzb3J0ZWROYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgbmFtZWRQYXJhbWV0ZXJzLmFkZCh2YXJpYWJsZS5uYW1lKTsKICAgICAgbmFtZWRQYXJhbWV0ZXJUeXBlcy5hZGQoZ2V0UGFyYW1ldGVyVHlwZSh2YXJpYWJsZSkpOwogICAgfQogICAgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4gdHlwZVZhcmlhYmxlczsKICAgIGlmIChub2RlLnR5cGVQYXJhbWV0ZXJzLmlzTm90RW1wdHkpIHsKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZVBhcmFtZXRlcnMgPSA8RGFydFR5cGU+W107CiAgICAgIGZvciAoaXIuVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyIGluIG5vZGUudHlwZVBhcmFtZXRlcnMpIHsKICAgICAgICB0eXBlUGFyYW1ldGVycwogICAgICAgICAgICAuYWRkKGdldERhcnRUeXBlKG5ldyBpci5UeXBlUGFyYW1ldGVyVHlwZSh0eXBlUGFyYW1ldGVyKSkpOwogICAgICB9CiAgICAgIHR5cGVWYXJpYWJsZXMgPSBuZXcgTGlzdDxGdW5jdGlvblR5cGVWYXJpYWJsZT4uZ2VuZXJhdGUoCiAgICAgICAgICBub2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCwKICAgICAgICAgIChpbnQgaW5kZXgpID0+IG5ldyBGdW5jdGlvblR5cGVWYXJpYWJsZShpbmRleCkpOwoKICAgICAgRGFydFR5cGUgc3Vic3QoRGFydFR5cGUgdHlwZSkgewogICAgICAgIHJldHVybiB0eXBlLnN1YnN0KHR5cGVWYXJpYWJsZXMsIHR5cGVQYXJhbWV0ZXJzKTsKICAgICAgfQoKICAgICAgcmV0dXJuVHlwZSA9IHN1YnN0KHJldHVyblR5cGUpOwogICAgICBwYXJhbWV0ZXJUeXBlcyA9IHBhcmFtZXRlclR5cGVzLm1hcChzdWJzdCkudG9MaXN0KCk7CiAgICAgIG9wdGlvbmFsUGFyYW1ldGVyVHlwZXMgPSBvcHRpb25hbFBhcmFtZXRlclR5cGVzLm1hcChzdWJzdCkudG9MaXN0KCk7CiAgICAgIG5hbWVkUGFyYW1ldGVyVHlwZXMgPSBuYW1lZFBhcmFtZXRlclR5cGVzLm1hcChzdWJzdCkudG9MaXN0KCk7CiAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlVmFyaWFibGVzLmxlbmd0aDsgaW5kZXgrKykgewogICAgICAgIHR5cGVWYXJpYWJsZXNbaW5kZXhdLmJvdW5kID0KICAgICAgICAgICAgc3Vic3QoZ2V0RGFydFR5cGUobm9kZS50eXBlUGFyYW1ldGVyc1tpbmRleF0uYm91bmQpKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdHlwZVZhcmlhYmxlcyA9IGNvbnN0IDxGdW5jdGlvblR5cGVWYXJpYWJsZT5bXTsKICAgIH0KCiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCBwYXJhbWV0ZXJUeXBlcywgb3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywKICAgICAgICBuYW1lZFBhcmFtZXRlcnMsIG5hbWVkUGFyYW1ldGVyVHlwZXMsIHR5cGVWYXJpYWJsZXMpOwogIH0KCiAgQ29uc3RhbnRWYWx1ZSBjb21wdXRlQ29uc3RhbnRWYWx1ZSgKICAgICAgU3Bhbm5hYmxlIHNwYW5uYWJsZSwgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50LAogICAgICB7Ym9vbCByZXF1aXJlQ29uc3RhbnQ6IHRydWUsIGJvb2wgY2hlY2tDYXN0czogdHJ1ZX0pIHsKICAgIHJldHVybiBfY29uc3RhbnRFbnZpcm9ubWVudC5fZ2V0Q29uc3RhbnRWYWx1ZShzcGFubmFibGUsIGNvbnN0YW50LAogICAgICAgIGNvbnN0YW50UmVxdWlyZWQ6IHJlcXVpcmVDb25zdGFudCwgY2hlY2tDYXN0czogY2hlY2tDYXN0cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBzdWJzdEJ5Q29udGV4dChEYXJ0VHlwZSB0eXBlLCBJbnRlcmZhY2VUeXBlIGNvbnRleHQpIHsKICAgIHJldHVybiB0eXBlLnN1YnN0KAogICAgICAgIGNvbnRleHQudHlwZUFyZ3VtZW50cywgZ2V0VGhpc1R5cGUoY29udGV4dC5lbGVtZW50KS50eXBlQXJndW1lbnRzKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBgY2FsbGAgbWV0aG9kIG9uICd0eXBlJy4KICAvLy8KICAvLy8gSWYgW3R5cGVdIGRvZXNuJ3QgaGF2ZSBhIGBjYWxsYCBtZW1iZXIgYG51bGxgIGlzIHJldHVybmVkLiBJZiBbdHlwZV0gaGFzCiAgLy8vIGFuIGludmFsaWQgYGNhbGxgIG1lbWJlciAobm9uLW1ldGhvZCBvciBhIHN5bnRoZXNpemVkIG1ldGhvZCB3aXRoIGJvdGgKICAvLy8gb3B0aW9uYWwgYW5kIG5hbWVkIHBhcmFtZXRlcnMpIGEgW0R5bmFtaWNUeXBlXSBpcyByZXR1cm5lZC4KICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRDYWxsVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgIEluZGV4ZWRDbGFzcyBjbHMgPSB0eXBlLmVsZW1lbnQ7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIGlmIChkYXRhLmNhbGxUeXBlICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHN1YnN0QnlDb250ZXh0KGRhdGEuY2FsbFR5cGUsIHR5cGUpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldFRoaXNUeXBlKEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgX2Vuc3VyZVRoaXNBbmRSYXdUeXBlKGNscywgZGF0YSk7CiAgICByZXR1cm4gZGF0YS50aGlzVHlwZTsKICB9CgogIEludGVyZmFjZVR5cGUgX2dldFJhd1R5cGUoSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICBfZW5zdXJlVGhpc0FuZFJhd1R5cGUoY2xzLCBkYXRhKTsKICAgIHJldHVybiBkYXRhLnJhd1R5cGU7CiAgfQoKICBEYXJ0VHlwZSBfZ2V0RmllbGRUeXBlKEluZGV4ZWRGaWVsZCBmaWVsZCkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGZpZWxkKSk7CiAgICBLRmllbGREYXRhIGRhdGEgPSBtZW1iZXJzLmdldERhdGEoZmllbGQpOwogICAgcmV0dXJuIGRhdGEuZ2V0RmllbGRUeXBlKHRoaXMpOwogIH0KCiAgRnVuY3Rpb25UeXBlIF9nZXRGdW5jdGlvblR5cGUoSW5kZXhlZEZ1bmN0aW9uIGZ1bmN0aW9uKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoZnVuY3Rpb24pKTsKICAgIEtGdW5jdGlvbkRhdGEgZGF0YSA9IG1lbWJlcnMuZ2V0RGF0YShmdW5jdGlvbik7CiAgICByZXR1cm4gZGF0YS5nZXRGdW5jdGlvblR5cGUodGhpcyk7CiAgfQoKICBMaXN0PFR5cGVWYXJpYWJsZVR5cGU+IF9nZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoSW5kZXhlZEZ1bmN0aW9uIGZ1bmN0aW9uKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoZnVuY3Rpb24pKTsKICAgIEtGdW5jdGlvbkRhdGEgZGF0YSA9IG1lbWJlcnMuZ2V0RGF0YShmdW5jdGlvbik7CiAgICByZXR1cm4gZGF0YS5nZXRGdW5jdGlvblR5cGVWYXJpYWJsZXModGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlVmFyaWFibGVCb3VuZChJbmRleGVkVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KHR5cGVWYXJpYWJsZSkpOwogICAgS1R5cGVWYXJpYWJsZURhdGEgZGF0YSA9IHR5cGVWYXJpYWJsZXMuZ2V0RGF0YSh0eXBlVmFyaWFibGUpOwogICAgcmV0dXJuIGRhdGEuZ2V0Qm91bmQodGhpcyk7CiAgfQoKICBDbGFzc0VudGl0eSBnZXRBcHBsaWVkTWl4aW4oSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICBfZW5zdXJlU3VwZXJ0eXBlcyhjbHMsIGRhdGEpOwogICAgcmV0dXJuIGRhdGEubWl4ZWRJblR5cGU/LmVsZW1lbnQ7CiAgfQoKICBib29sIF9pc01peGluQXBwbGljYXRpb24oSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICBfZW5zdXJlU3VwZXJ0eXBlcyhjbHMsIGRhdGEpOwogICAgcmV0dXJuIGRhdGEuaXNNaXhpbkFwcGxpY2F0aW9uOwogIH0KCiAgYm9vbCBfaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbihJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NFbnYgZW52ID0gY2xhc3Nlcy5nZXRFbnYoY2xzKTsKICAgIHJldHVybiBlbnYuaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbjsKICB9CgogIHZvaWQgX2ZvckVhY2hTdXBlcnR5cGUoSW5kZXhlZENsYXNzIGNscywgdm9pZCBmKEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlKSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICBfZW5zdXJlU3VwZXJ0eXBlcyhjbHMsIGRhdGEpOwogICAgZGF0YS5vcmRlcmVkVHlwZVNldC5zdXBlcnR5cGVzLmZvckVhY2goZik7CiAgfQoKICB2b2lkIF9mb3JFYWNoTWl4aW4oSW5kZXhlZENsYXNzIGNscywgdm9pZCBmKENsYXNzRW50aXR5IG1peGluKSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgd2hpbGUgKGNscyAhPSBudWxsKSB7CiAgICAgIEtDbGFzc0RhdGEgZGF0YSA9IGNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgICBfZW5zdXJlU3VwZXJ0eXBlcyhjbHMsIGRhdGEpOwogICAgICBpZiAoZGF0YS5taXhlZEluVHlwZSAhPSBudWxsKSB7CiAgICAgICAgZihkYXRhLm1peGVkSW5UeXBlLmVsZW1lbnQpOwogICAgICB9CiAgICAgIGNscyA9IGRhdGEuc3VwZXJ0eXBlPy5lbGVtZW50OwogICAgfQogIH0KCiAgdm9pZCBfZm9yRWFjaENvbnN0cnVjdG9yKEluZGV4ZWRDbGFzcyBjbHMsIHZvaWQgZihDb25zdHJ1Y3RvckVudGl0eSBtZW1iZXIpKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NFbnYgZW52ID0gY2xhc3Nlcy5nZXRFbnYoY2xzKTsKICAgIGVudi5mb3JFYWNoQ29uc3RydWN0b3IodGhpcywgZik7CiAgfQoKICB2b2lkIF9mb3JFYWNoTG9jYWxDbGFzc01lbWJlcihJbmRleGVkQ2xhc3MgY2xzLCB2b2lkIGYoTWVtYmVyRW50aXR5IG1lbWJlcikpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIEtDbGFzc0VudiBlbnYgPSBjbGFzc2VzLmdldEVudihjbHMpOwogICAgZW52LmZvckVhY2hNZW1iZXIodGhpcywgKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgZihtZW1iZXIpOwogICAgfSk7CiAgfQoKICB2b2lkIGZvckVhY2hJbmplY3RlZENsYXNzTWVtYmVyKAogICAgICBJbmRleGVkQ2xhc3MgY2xzLCB2b2lkIGYoTWVtYmVyRW50aXR5IG1lbWJlcikpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICdLZXJuZWxUb0VsZW1lbnRNYXBCYXNlLl9mb3JFYWNoSW5qZWN0ZWRDbGFzc01lbWJlcicpOwogIH0KCiAgdm9pZCBfZm9yRWFjaENsYXNzTWVtYmVyKAogICAgICBJbmRleGVkQ2xhc3MgY2xzLCB2b2lkIGYoQ2xhc3NFbnRpdHkgY2xzLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRW52IGVudiA9IGNsYXNzZXMuZ2V0RW52KGNscyk7CiAgICBlbnYuZm9yRWFjaE1lbWJlcih0aGlzLCAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICBmKGNscywgbWVtYmVyKTsKICAgIH0pOwogICAgS0NsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICBfZW5zdXJlU3VwZXJ0eXBlcyhjbHMsIGRhdGEpOwogICAgaWYgKGRhdGEuc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgX2ZvckVhY2hDbGFzc01lbWJlcihkYXRhLnN1cGVydHlwZS5lbGVtZW50LCBmKTsKICAgIH0KICB9CgogIENvbnN0YW50Q29uc3RydWN0b3IgX2dldENvbnN0cnVjdG9yQ29uc3RhbnQoSW5kZXhlZENvbnN0cnVjdG9yIGNvbnN0cnVjdG9yKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY29uc3RydWN0b3IpKTsKICAgIEtDb25zdHJ1Y3RvckRhdGEgZGF0YSA9IG1lbWJlcnMuZ2V0RGF0YShjb25zdHJ1Y3Rvcik7CiAgICByZXR1cm4gZGF0YS5nZXRDb25zdHJ1Y3RvckNvbnN0YW50KHRoaXMsIGNvbnN0cnVjdG9yKTsKICB9CgogIENvbnN0YW50RXhwcmVzc2lvbiBfZ2V0RmllbGRDb25zdGFudEV4cHJlc3Npb24oSW5kZXhlZEZpZWxkIGZpZWxkKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoZmllbGQpKTsKICAgIEtGaWVsZERhdGEgZGF0YSA9IG1lbWJlcnMuZ2V0RGF0YShmaWVsZCk7CiAgICByZXR1cm4gZGF0YS5nZXRGaWVsZENvbnN0YW50RXhwcmVzc2lvbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgYXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBPcmRlcmVkVHlwZVNldCBvcmRlcmVkVHlwZVNldCA9IGdldE9yZGVyZWRUeXBlU2V0KHR5cGUuZWxlbWVudCk7CiAgICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSA9CiAgICAgICAgb3JkZXJlZFR5cGVTZXQuYXNJbnN0YW5jZU9mKGNscywgZ2V0SGllcmFyY2h5RGVwdGgoY2xzKSk7CiAgICBpZiAoc3VwZXJ0eXBlICE9IG51bGwpIHsKICAgICAgc3VwZXJ0eXBlID0gc3Vic3RCeUNvbnRleHQoc3VwZXJ0eXBlLCB0eXBlKTsKICAgIH0KICAgIHJldHVybiBzdXBlcnR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBPcmRlcmVkVHlwZVNldCBnZXRPcmRlcmVkVHlwZVNldChJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICByZXR1cm4gZGF0YS5vcmRlcmVkVHlwZVNldDsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXRIaWVyYXJjaHlEZXB0aChJbmRleGVkQ2xhc3MgY2xzKSB7CiAgICBhc3NlcnQoY2hlY2tGYW1pbHkoY2xzKSk7CiAgICBLQ2xhc3NEYXRhIGRhdGEgPSBjbGFzc2VzLmdldERhdGEoY2xzKTsKICAgIF9lbnN1cmVTdXBlcnR5cGVzKGNscywgZGF0YSk7CiAgICByZXR1cm4gZGF0YS5vcmRlcmVkVHlwZVNldC5tYXhEZXB0aDsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEludGVyZmFjZVR5cGU+IGdldEludGVyZmFjZXMoSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICBfZW5zdXJlU3VwZXJ0eXBlcyhjbHMsIGRhdGEpOwogICAgcmV0dXJuIGRhdGEuaW50ZXJmYWNlczsKICB9CgogIEBvdmVycmlkZQogIGlyLk1lbWJlciBnZXRNZW1iZXJOb2RlKGNvdmFyaWFudCBJbmRleGVkTWVtYmVyIG1lbWJlcikgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KG1lbWJlcikpOwogICAgcmV0dXJuIG1lbWJlcnMuZ2V0RGF0YShtZW1iZXIpLm5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5DbGFzcyBnZXRDbGFzc05vZGUoY292YXJpYW50IEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChjaGVja0ZhbWlseShjbHMpKTsKICAgIHJldHVybiBjbGFzc2VzLmdldERhdGEoY2xzKS5ub2RlOwogIH0KCiAgaXIuVHlwZWRlZiBfZ2V0VHlwZWRlZk5vZGUoY292YXJpYW50IEluZGV4ZWRUeXBlZGVmIHR5cGVkZWYpIHsKICAgIHJldHVybiB0eXBlZGVmcy5nZXREYXRhKHR5cGVkZWYpLm5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBJbXBvcnRFbnRpdHkgZ2V0SW1wb3J0KGlyLkxpYnJhcnlEZXBlbmRlbmN5IG5vZGUpIHsKICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiBudWxsOwogICAgaXIuTGlicmFyeSBsaWJyYXJ5ID0gbm9kZS5wYXJlbnQ7CiAgICBLTGlicmFyeURhdGEgZGF0YSA9IGxpYnJhcmllcy5nZXREYXRhKGdldExpYnJhcnlJbnRlcm5hbChsaWJyYXJ5KSk7CiAgICByZXR1cm4gZGF0YS5pbXBvcnRzW25vZGVdOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuVHlwZUVudmlyb25tZW50IGdldCB0eXBlRW52aXJvbm1lbnQgewogICAgcmV0dXJuIF90eXBlRW52aXJvbm1lbnQgPz89IG5ldyBpci5UeXBlRW52aXJvbm1lbnQoCiAgICAgICAgbmV3IGlyLkNvcmVUeXBlcyhlbnYubWFpbkNvbXBvbmVudCksIGNsYXNzSGllcmFyY2h5KTsKICB9CgogIEBvdmVycmlkZQogIGlyLkNsYXNzSGllcmFyY2h5IGdldCBjbGFzc0hpZXJhcmNoeSB7CiAgICByZXR1cm4gX2NsYXNzSGllcmFyY2h5ID8/PSBuZXcgaXIuQ2xhc3NIaWVyYXJjaHkoZW52Lm1haW5Db21wb25lbnQpOwogIH0KCiAgRGFydDJqc0NvbnN0YW50RXZhbHVhdG9yIGdldCBjb25zdGFudEV2YWx1YXRvciB7CiAgICByZXR1cm4gX2NvbnN0YW50RXZhbHVhdG9yID8/PSBuZXcgRGFydDJqc0NvbnN0YW50RXZhbHVhdG9yKHR5cGVFbnZpcm9ubWVudCwKICAgICAgICAoaXIuTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSwgTGlzdDxpci5Mb2NhdGVkTWVzc2FnZT4gY29udGV4dCkgewogICAgICByZXBvcnRMb2NhdGVkTWVzc2FnZShyZXBvcnRlciwgbWVzc2FnZSwgY29udGV4dCk7CiAgICB9LCBlbnZpcm9ubWVudDogX2Vudmlyb25tZW50LnRvTWFwKCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgTmFtZSBnZXROYW1lKGlyLk5hbWUgbmFtZSkgewogICAgcmV0dXJuIG5ldyBOYW1lKAogICAgICAgIG5hbWUubmFtZSwgbmFtZS5pc1ByaXZhdGUgPyBnZXRMaWJyYXJ5KG5hbWUubGlicmFyeSkgOiBudWxsKTsKICB9CgogIEBvdmVycmlkZQogIENhbGxTdHJ1Y3R1cmUgZ2V0Q2FsbFN0cnVjdHVyZShpci5Bcmd1bWVudHMgYXJndW1lbnRzKSB7CiAgICBpbnQgYXJndW1lbnRDb3VudCA9IGFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCArIGFyZ3VtZW50cy5uYW1lZC5sZW5ndGg7CiAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMgPSBhcmd1bWVudHMubmFtZWQubWFwKChlKSA9PiBlLm5hbWUpLnRvTGlzdCgpOwogICAgcmV0dXJuIG5ldyBDYWxsU3RydWN0dXJlKAogICAgICAgIGFyZ3VtZW50Q291bnQsIG5hbWVkQXJndW1lbnRzLCBhcmd1bWVudHMudHlwZXMubGVuZ3RoKTsKICB9CgogIFBhcmFtZXRlclN0cnVjdHVyZSBnZXRQYXJhbWV0ZXJTdHJ1Y3R1cmUoaXIuRnVuY3Rpb25Ob2RlIG5vZGUsCiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gdHlwZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB0bwogICAgICAvLyBjb25zdHJ1Y3RvcnMgbGlrZSBjYWxsaW5nIGEgZ2VuZXJpYyBtZXRob2QuCiAgICAgIHtib29sIGluY2x1ZGVUeXBlUGFyYW1ldGVyczogdHJ1ZX0pIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhY2hlIHRoZSBjb21wdXRlZCBmdW5jdGlvbiB0eXBlLgogICAgaW50IHJlcXVpcmVkUGFyYW1ldGVycyA9IG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudDsKICAgIGludCBwb3NpdGlvbmFsUGFyYW1ldGVycyA9IG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMubGVuZ3RoOwogICAgaW50IHR5cGVQYXJhbWV0ZXJzID0gbm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGg7CiAgICBMaXN0PFN0cmluZz4gbmFtZWRQYXJhbWV0ZXJzID0KICAgICAgICBub2RlLm5hbWVkUGFyYW1ldGVycy5tYXAoKHApID0+IHAubmFtZSkudG9MaXN0KCkuLnNvcnQoKTsKICAgIHJldHVybiBuZXcgUGFyYW1ldGVyU3RydWN0dXJlKHJlcXVpcmVkUGFyYW1ldGVycywgcG9zaXRpb25hbFBhcmFtZXRlcnMsCiAgICAgICAgbmFtZWRQYXJhbWV0ZXJzLCBpbmNsdWRlVHlwZVBhcmFtZXRlcnMgPyB0eXBlUGFyYW1ldGVycyA6IDApOwogIH0KCiAgQG92ZXJyaWRlCiAgU2VsZWN0b3IgZ2V0SW52b2NhdGlvblNlbGVjdG9yKGlyLk5hbWUgaXJOYW1lLCBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLCBpbnQgdHlwZUFyZ3VtZW50cykgewogICAgTmFtZSBuYW1lID0gZ2V0TmFtZShpck5hbWUpOwogICAgU2VsZWN0b3JLaW5kIGtpbmQ7CiAgICBpZiAoU2VsZWN0b3IuaXNPcGVyYXRvck5hbWUobmFtZS50ZXh0KSkgewogICAgICBpZiAobmFtZSA9PSBOYW1lcy5JTkRFWF9OQU1FIHx8IG5hbWUgPT0gTmFtZXMuSU5ERVhfU0VUX05BTUUpIHsKICAgICAgICBraW5kID0gU2VsZWN0b3JLaW5kLklOREVYOwogICAgICB9IGVsc2UgewogICAgICAgIGtpbmQgPSBTZWxlY3RvcktpbmQuT1BFUkFUT1I7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGtpbmQgPSBTZWxlY3RvcktpbmQuQ0FMTDsKICAgIH0KCiAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgQ2FsbFN0cnVjdHVyZSgKICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRzICsgbmFtZWRBcmd1bWVudHMubGVuZ3RoLAogICAgICAgIG5hbWVkQXJndW1lbnRzLAogICAgICAgIHR5cGVBcmd1bWVudHMpOwogICAgcmV0dXJuIG5ldyBTZWxlY3RvcihraW5kLCBuYW1lLCBjYWxsU3RydWN0dXJlKTsKICB9CgogIFNlbGVjdG9yIGdldEdldHRlclNlbGVjdG9yKGlyLk5hbWUgaXJOYW1lKSB7CiAgICBOYW1lIG5hbWUgPSBuZXcgTmFtZSgKICAgICAgICBpck5hbWUubmFtZSwgaXJOYW1lLmlzUHJpdmF0ZSA/IGdldExpYnJhcnkoaXJOYW1lLmxpYnJhcnkpIDogbnVsbCk7CiAgICByZXR1cm4gbmV3IFNlbGVjdG9yLmdldHRlcihuYW1lKTsKICB9CgogIFNlbGVjdG9yIGdldFNldHRlclNlbGVjdG9yKGlyLk5hbWUgaXJOYW1lKSB7CiAgICBOYW1lIG5hbWUgPSBuZXcgTmFtZSgKICAgICAgICBpck5hbWUubmFtZSwgaXJOYW1lLmlzUHJpdmF0ZSA/IGdldExpYnJhcnkoaXJOYW1lLmxpYnJhcnkpIDogbnVsbCk7CiAgICByZXR1cm4gbmV3IFNlbGVjdG9yLnNldHRlcihuYW1lKTsKICB9CgogIC8vLyBMb29rcyB1cCBbdHlwZU5hbWVdIGZvciB1c2UgaW4gdGhlIHNwZWMtc3RyaW5nIG9mIGEgYEpTYCBjYWxsLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSB0aGlzIGluIFtOYXRpdmVCZWhhdmlvcl0gaW5zdGVhZCBvZiBjYWxsaW5nCiAgLy8gdGhlIGBGb3JlaWduUmVzb2x2ZXJgLgogIFR5cGVMb29rdXAgdHlwZUxvb2t1cCh7Ym9vbCByZXNvbHZlQXNSYXc6IHRydWV9KSB7CiAgICByZXR1cm4gcmVzb2x2ZUFzUmF3CiAgICAgICAgPyAoX2NhY2hlZFR5cGVMb29rdXBSYXcgPz89IF90eXBlTG9va3VwKHJlc29sdmVBc1JhdzogdHJ1ZSkpCiAgICAgICAgOiAoX2NhY2hlZFR5cGVMb29rdXBGdWxsID8/PSBfdHlwZUxvb2t1cChyZXNvbHZlQXNSYXc6IGZhbHNlKSk7CiAgfQoKICBUeXBlTG9va3VwIF9jYWNoZWRUeXBlTG9va3VwUmF3OwogIFR5cGVMb29rdXAgX2NhY2hlZFR5cGVMb29rdXBGdWxsOwoKICBUeXBlTG9va3VwIF90eXBlTG9va3VwKHtib29sIHJlc29sdmVBc1JhdzogdHJ1ZX0pIHsKICAgIGJvb2wgY2FjaGVkTWF5TG9va3VwSW5NYWluOwogICAgYm9vbCBtYXlMb29rdXBJbk1haW4oKSB7CiAgICAgIHZhciBtYWluVXJpID0gZWxlbWVudEVudmlyb25tZW50Lm1haW5MaWJyYXJ5LmNhbm9uaWNhbFVyaTsKICAgICAgLy8gVGVzdHMgcGVybWl0IGxvb2t1cCBvdXRzaWRlIG9mIGRhcnQ6IGxpYnJhcmllcy4KICAgICAgcmV0dXJuIG1haW5VcmkucGF0aC5jb250YWlucygndGVzdHMvY29tcGlsZXIvZGFydDJqc19uYXRpdmUnKSB8fAogICAgICAgICAgbWFpblVyaS5wYXRoLmNvbnRhaW5zKCd0ZXN0cy9jb21waWxlci9kYXJ0MmpzX2V4dHJhJyk7CiAgICB9CgogICAgRGFydFR5cGUgbG9va3VwKFN0cmluZyB0eXBlTmFtZSwge2Jvb2wgcmVxdWlyZWR9KSB7CiAgICAgIERhcnRUeXBlIGZpbmRJbkxpYnJhcnkoTGlicmFyeUVudGl0eSBsaWJyYXJ5KSB7CiAgICAgICAgaWYgKGxpYnJhcnkgIT0gbnVsbCkgewogICAgICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gZWxlbWVudEVudmlyb25tZW50Lmxvb2t1cENsYXNzKGxpYnJhcnksIHR5cGVOYW1lKTsKICAgICAgICAgIGlmIChjbHMgIT0gbnVsbCkgewogICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBbGlnbiBzZW1hbnRpY3MuCiAgICAgICAgICAgIHJldHVybiByZXNvbHZlQXNSYXcKICAgICAgICAgICAgICAgID8gZWxlbWVudEVudmlyb25tZW50LmdldFJhd1R5cGUoY2xzKQogICAgICAgICAgICAgICAgOiBlbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoY2xzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KCiAgICAgIERhcnRUeXBlIGZpbmRJbihVcmkgdXJpKSB7CiAgICAgICAgcmV0dXJuIGZpbmRJbkxpYnJhcnkoZWxlbWVudEVudmlyb25tZW50Lmxvb2t1cExpYnJhcnkodXJpKSk7CiAgICAgIH0KCiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE5hcnJvdyB0aGUgc2V0IG9mIGxvb2t1cHMgYmFzZWQgb24gdGhlIGRlcGVuZGluZwogICAgICAvLyBsaWJyYXJ5LgogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYWNoZSBtb3JlIHJlc3VsdHMgdG8gYXZvaWQgcmVkdW5kYW50IGxvb2t1cHM/CiAgICAgIERhcnRUeXBlIHR5cGU7CiAgICAgIGlmIChjYWNoZWRNYXlMb29rdXBJbk1haW4gPz89IG1heUxvb2t1cEluTWFpbigpKSB7CiAgICAgICAgdHlwZSA/Pz0gZmluZEluTGlicmFyeShlbGVtZW50RW52aXJvbm1lbnQubWFpbkxpYnJhcnkpOwogICAgICB9CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfY29yZSk7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfX2pzX2hlbHBlcik7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfX2ludGVyY2VwdG9ycyk7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfX25hdGl2ZV90eXBlZF9kYXRhKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9jb2xsZWN0aW9uKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9tYXRoKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9odG1sKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF9odG1sX2NvbW1vbik7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfc3ZnKTsKICAgICAgdHlwZSA/Pz0gZmluZEluKFVyaXMuZGFydF93ZWJfYXVkaW8pOwogICAgICB0eXBlID8/PSBmaW5kSW4oVXJpcy5kYXJ0X3dlYl9nbCk7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfd2ViX3NxbCk7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfaW5kZXhlZF9kYik7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfdHlwZWRfZGF0YSk7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfX3J0aSk7CiAgICAgIHR5cGUgPz89IGZpbmRJbihVcmlzLmRhcnRfbWlycm9ycyk7CiAgICAgIGlmICh0eXBlID09IG51bGwgJiYgcmVxdWlyZWQpIHsKICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgTWVzc2FnZUtpbmQuR0VORVJJQywgeyd0ZXh0JzogIlR5cGUgJyR0eXBlTmFtZScgbm90IGZvdW5kLiJ9KTsKICAgICAgfQogICAgICByZXR1cm4gdHlwZTsKICAgIH0KCiAgICByZXR1cm4gbG9va3VwOwogIH0KCiAgU3RyaW5nIF9nZXRTdHJpbmdBcmd1bWVudChpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUsIGludCBpbmRleCkgewogICAgcmV0dXJuIG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWxbaW5kZXhdLmFjY2VwdChuZXcgU3RyaW5naWZpZXIoKSk7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYWNoZSB0aGlzIGZvciBsYXRlciB1c2UuCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0NhbGwoaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBpZiAobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPCAyIHx8CiAgICAgICAgbm9kZS5hcmd1bWVudHMubmFtZWQuaXNOb3RFbXB0eSkgewogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlMpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICB9CiAgICBTdHJpbmcgc3BlY1N0cmluZyA9IF9nZXRTdHJpbmdBcmd1bWVudChub2RlLCAwKTsKICAgIGlmIChzcGVjU3RyaW5nID09IG51bGwpIHsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgTWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTX0ZJUlNUKTsKICAgICAgcmV0dXJuIG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgfQoKICAgIFN0cmluZyBjb2RlU3RyaW5nID0gX2dldFN0cmluZ0FyZ3VtZW50KG5vZGUsIDEpOwogICAgaWYgKGNvZGVTdHJpbmcgPT0gbnVsbCkgewogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCBNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfU0VDT05EKTsKICAgICAgcmV0dXJuIG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgfQoKICAgIHJldHVybiBOYXRpdmVCZWhhdmlvci5vZkpzQ2FsbCgKICAgICAgICBzcGVjU3RyaW5nLAogICAgICAgIGNvZGVTdHJpbmcsCiAgICAgICAgdHlwZUxvb2t1cChyZXNvbHZlQXNSYXc6IHRydWUpLAogICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgcmVwb3J0ZXIsCiAgICAgICAgY29tbW9uRWxlbWVudHMpOwogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2FjaGUgdGhpcyBmb3IgbGF0ZXIgdXNlLgogIEBvdmVycmlkZQogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9ySnNCdWlsdGluQ2FsbChpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA8IDEpIHsKICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcigKICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICJKUyBidWlsdGluIGV4cHJlc3Npb24gaGFzIG5vIHR5cGUuIik7CiAgICAgIHJldHVybiBuZXcgTmF0aXZlQmVoYXZpb3IoKTsKICAgIH0KICAgIGlmIChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA8IDIpIHsKICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcigKICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICJKUyBidWlsdGluIGlzIG1pc3NpbmcgbmFtZS4iKTsKICAgICAgcmV0dXJuIG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgfQogICAgU3RyaW5nIHNwZWNTdHJpbmcgPSBfZ2V0U3RyaW5nQXJndW1lbnQobm9kZSwgMCk7CiAgICBpZiAoc3BlY1N0cmluZyA9PSBudWxsKSB7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAiVW5leHBlY3RlZCBmaXJzdCBhcmd1bWVudC4iKTsKICAgICAgcmV0dXJuIG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgfQogICAgcmV0dXJuIE5hdGl2ZUJlaGF2aW9yLm9mSnNCdWlsdGluQ2FsbCgKICAgICAgICBzcGVjU3RyaW5nLAogICAgICAgIHR5cGVMb29rdXAocmVzb2x2ZUFzUmF3OiB0cnVlKSwKICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgIHJlcG9ydGVyLAogICAgICAgIGNvbW1vbkVsZW1lbnRzKTsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhY2hlIHRoaXMgZm9yIGxhdGVyIHVzZS4KICBAb3ZlcnJpZGUKICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVCZWhhdmlvckZvckpzRW1iZWRkZWRHbG9iYWxDYWxsKAogICAgICBpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA8IDEpIHsKICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcihDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgIkpTIGVtYmVkZGVkIGdsb2JhbCBleHByZXNzaW9uIGhhcyBubyB0eXBlLiIpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICB9CiAgICBpZiAobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPCAyKSB7CiAgICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAiSlMgZW1iZWRkZWQgZ2xvYmFsIGlzIG1pc3NpbmcgbmFtZS4iKTsKICAgICAgcmV0dXJuIG5ldyBOYXRpdmVCZWhhdmlvcigpOwogICAgfQogICAgaWYgKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoID4gMiB8fAogICAgICAgIG5vZGUuYXJndW1lbnRzLm5hbWVkLmlzTm90RW1wdHkpIHsKICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcihDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgIkpTIGVtYmVkZGVkIGdsb2JhbCBoYXMgbW9yZSB0aGFuIDIgYXJndW1lbnRzLiIpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICB9CiAgICBTdHJpbmcgc3BlY1N0cmluZyA9IF9nZXRTdHJpbmdBcmd1bWVudChub2RlLCAwKTsKICAgIGlmIChzcGVjU3RyaW5nID09IG51bGwpIHsKICAgICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcigKICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICJVbmV4cGVjdGVkIGZpcnN0IGFyZ3VtZW50LiIpOwogICAgICByZXR1cm4gbmV3IE5hdGl2ZUJlaGF2aW9yKCk7CiAgICB9CiAgICByZXR1cm4gTmF0aXZlQmVoYXZpb3Iub2ZKc0VtYmVkZGVkR2xvYmFsQ2FsbCgKICAgICAgICBzcGVjU3RyaW5nLAogICAgICAgIHR5cGVMb29rdXAocmVzb2x2ZUFzUmF3OiB0cnVlKSwKICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgIHJlcG9ydGVyLAogICAgICAgIGNvbW1vbkVsZW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGpzLk5hbWUgZ2V0TmFtZUZvckpzR2V0TmFtZShDb25zdGFudFZhbHVlIGNvbnN0YW50LCBOYW1lciBuYW1lcikgewogICAgaW50IGluZGV4ID0gZXh0cmFjdEVudW1JbmRleEZyb21Db25zdGFudFZhbHVlKAogICAgICAgIGNvbnN0YW50LCBjb21tb25FbGVtZW50cy5qc0dldE5hbWVFbnVtKTsKICAgIGlmIChpbmRleCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuYW1lci5nZXROYW1lRm9ySnNHZXROYW1lKAogICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsIEpzR2V0TmFtZS52YWx1ZXNbaW5kZXhdKTsKICB9CgogIGludCBleHRyYWN0RW51bUluZGV4RnJvbUNvbnN0YW50VmFsdWUoCiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQsIENsYXNzRW50aXR5IGNsYXNzRWxlbWVudCkgewogICAgaWYgKGNvbnN0YW50IGlzIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSkgewogICAgICBpZiAoY29uc3RhbnQudHlwZS5lbGVtZW50ID09IGNsYXNzRWxlbWVudCkgewogICAgICAgIGFzc2VydChjb25zdGFudC5maWVsZHMubGVuZ3RoID09IDEgfHwgY29uc3RhbnQuZmllbGRzLmxlbmd0aCA9PSAyKTsKICAgICAgICBDb25zdGFudFZhbHVlIGluZGV4Q29uc3RhbnQgPSBjb25zdGFudC5maWVsZHMudmFsdWVzLmZpcnN0OwogICAgICAgIGlmIChpbmRleENvbnN0YW50IGlzIEludENvbnN0YW50VmFsdWUpIHsKICAgICAgICAgIHJldHVybiBpbmRleENvbnN0YW50LmludFZhbHVlLnRvSW50KCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZ2V0Q29uc3RhbnRWYWx1ZShpci5FeHByZXNzaW9uIG5vZGUsCiAgICAgIHtib29sIHJlcXVpcmVDb25zdGFudDogdHJ1ZSwKICAgICAgYm9vbCBpbXBsaWNpdE51bGw6IGZhbHNlLAogICAgICBib29sIGNoZWNrQ2FzdHM6IHRydWV9KSB7CiAgICBpZiAobm9kZSBpcyBpci5Db25zdGFudEV4cHJlc3Npb24pIHsKICAgICAgaXIuQ29uc3RhbnQgY29uc3RhbnQgPQogICAgICAgICAgY29uc3RhbnRFdmFsdWF0b3IuZXZhbHVhdGUobm9kZSwgcmVxdWlyZUNvbnN0YW50OiByZXF1aXJlQ29uc3RhbnQpOwogICAgICBpZiAoY29uc3RhbnQgPT0gbnVsbCkgewogICAgICAgIGlmIChyZXF1aXJlQ29uc3RhbnQpIHsKICAgICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgICAgICdObyBjb25zdGFudCBmb3IgJHtEZWJ1Z1ByaW50ZXIucHJldHR5UHJpbnQobm9kZSl9Jyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBfY29uc3RhbnRWYWx1ZWZpZXIudmlzaXRDb25zdGFudChjb25zdGFudCk7CiAgICAgIH0KICAgIH0KCiAgICBDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQ7CiAgICBpZiAobm9kZSA9PSBudWxsKSB7CiAgICAgIGlmICghaW1wbGljaXROdWxsKSB7CiAgICAgICAgdGhyb3cgZmFpbGVkQXQoCiAgICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICdObyBleHByZXNzaW9uIGZvciBjb25zdGFudC4nKTsKICAgICAgfQogICAgICBjb25zdGFudCA9IG5ldyBOdWxsQ29uc3RhbnRFeHByZXNzaW9uKCk7CiAgICB9IGVsc2UgewogICAgICBjb25zdGFudCA9CiAgICAgICAgICBuZXcgQ29uc3RhbnRpZmllcih0aGlzLCByZXF1aXJlQ29uc3RhbnQ6IHJlcXVpcmVDb25zdGFudCkudmlzaXQobm9kZSk7CiAgICB9CiAgICBpZiAoY29uc3RhbnQgPT0gbnVsbCkgewogICAgICBpZiAocmVxdWlyZUNvbnN0YW50KSB7CiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAgICdObyBjb25zdGFudCBmb3IgJHtEZWJ1Z1ByaW50ZXIucHJldHR5UHJpbnQobm9kZSl9Jyk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gY29tcHV0ZUNvbnN0YW50VmFsdWUoCiAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobm9kZSksIGNvbnN0YW50LAogICAgICAgIHJlcXVpcmVDb25zdGFudDogcmVxdWlyZUNvbnN0YW50LCBjaGVja0Nhc3RzOiBjaGVja0Nhc3RzKTsKICAgIGlmICghdmFsdWUuaXNDb25zdGFudCAmJiAhcmVxdWlyZUNvbnN0YW50KSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgLy8vIENvbnZlcnRzIFthbm5vdGF0aW9uc10gaW50byBhIGxpc3Qgb2YgW0NvbnN0YW50VmFsdWVdcy4KICBMaXN0PENvbnN0YW50VmFsdWU+IGdldE1ldGFkYXRhKExpc3Q8aXIuRXhwcmVzc2lvbj4gYW5ub3RhdGlvbnMpIHsKICAgIGlmIChhbm5vdGF0aW9ucy5pc0VtcHR5KSByZXR1cm4gY29uc3QgPENvbnN0YW50VmFsdWU+W107CiAgICBMaXN0PENvbnN0YW50VmFsdWU+IG1ldGFkYXRhID0gPENvbnN0YW50VmFsdWU+W107CiAgICBhbm5vdGF0aW9ucy5mb3JFYWNoKChpci5FeHByZXNzaW9uIG5vZGUpIHsKICAgICAgLy8gV2Ugc2tpcCB0aGUgaW1wbGljaXQgY2FzdCBjaGVja3MgZm9yIG1ldGFkYXRhIHRvIGF2b2lkIGNpcmN1bGFyCiAgICAgIC8vIGRlcGVuZGVuY2llcyBpbiB0aGUganMtaW50ZXJvcCBjbGFzcyByZWdpc3RyYXRpb24uCiAgICAgIG1ldGFkYXRhLmFkZChnZXRDb25zdGFudFZhbHVlKG5vZGUsIGNoZWNrQ2FzdHM6IGZhbHNlKSk7CiAgICB9KTsKICAgIHJldHVybiBtZXRhZGF0YTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldFN1cGVyTm9TdWNoTWV0aG9kKENsYXNzRW50aXR5IGNscykgewogICAgd2hpbGUgKGNscyAhPSBudWxsKSB7CiAgICAgIGNscyA9IGVsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyk7CiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBlbGVtZW50RW52aXJvbm1lbnQubG9va3VwTG9jYWxDbGFzc01lbWJlcigKICAgICAgICAgIGNscywgSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyk7CiAgICAgIGlmIChtZW1iZXIgIT0gbnVsbCAmJiAhbWVtYmVyLmlzQWJzdHJhY3QpIHsKICAgICAgICBpZiAobWVtYmVyLmlzRnVuY3Rpb24pIHsKICAgICAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uID0gbWVtYmVyOwogICAgICAgICAgaWYgKGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZS5wb3NpdGlvbmFsUGFyYW1ldGVycyA+PSAxKSB7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gSWYgW21lbWJlcl0gaXMgbm90IGEgdmFsaWQgYG5vU3VjaE1ldGhvZGAgdGhlIHRhcmdldCBpcwogICAgICAgIC8vIGBPYmplY3Quc3VwZXJOb1N1Y2hNZXRob2RgLgogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiA9IGVsZW1lbnRFbnZpcm9ubWVudC5sb29rdXBMb2NhbENsYXNzTWVtYmVyKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzLCBJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfKTsKICAgIGFzc2VydChmdW5jdGlvbiAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KGNscywgIk5vIHN1cGVyIG5vU3VjaE1ldGhvZCBmb3VuZCBmb3IgY2xhc3MgJGNscy4iKSk7CiAgICByZXR1cm4gZnVuY3Rpb247CiAgfQoKICBJdGVyYWJsZTxMaWJyYXJ5RW50aXR5PiBnZXQgbGlicmFyeUxpc3RJbnRlcm5hbCB7CiAgICBpZiAoZW52Lmxlbmd0aCAhPSBsaWJyYXJ5TWFwLmxlbmd0aCkgewogICAgICAvLyBDcmVhdGUgYSBbS0xpYnJhcnldIGZvciBlYWNoIGxpYnJhcnkuCiAgICAgIGVudi5mb3JFYWNoTGlicmFyeSgoS0xpYnJhcnlFbnYgZW52KSB7CiAgICAgICAgZ2V0TGlicmFyeUludGVybmFsKGVudi5saWJyYXJ5LCBlbnYpOwogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBsaWJyYXJ5TWFwLnZhbHVlczsKICB9CgogIExpYnJhcnlFbnRpdHkgZ2V0TGlicmFyeUludGVybmFsKGlyLkxpYnJhcnkgbm9kZSwgW0tMaWJyYXJ5RW52IGxpYnJhcnlFbnZdKSB7CiAgICByZXR1cm4gbGlicmFyeU1hcFtub2RlXSA/Pz0gX2dldExpYnJhcnlDcmVhdGUobm9kZSwgbGlicmFyeUVudik7CiAgfQoKICBMaWJyYXJ5RW50aXR5IF9nZXRMaWJyYXJ5Q3JlYXRlKGlyLkxpYnJhcnkgbm9kZSwgS0xpYnJhcnlFbnYgbGlicmFyeUVudikgewogICAgYXNzZXJ0KAogICAgICAgICFlbnZJc0Nsb3NlZCwKICAgICAgICAiRW52aXJvbm1lbnQgb2YgJHRoaXMgaXMgY2xvc2VkLiBUcnlpbmcgdG8gY3JlYXRlICIKICAgICAgICAibGlicmFyeSBmb3IgJG5vZGUuIik7CiAgICBVcmkgY2Fub25pY2FsVXJpID0gbm9kZS5pbXBvcnRVcmk7CiAgICBTdHJpbmcgbmFtZSA9IG5vZGUubmFtZTsKICAgIGlmIChuYW1lID09IG51bGwpIHsKICAgICAgLy8gVXNlIHRoZSBmaWxlIG5hbWUgYXMgc2NyaXB0IG5hbWUuCiAgICAgIFN0cmluZyBwYXRoID0gY2Fub25pY2FsVXJpLnBhdGg7CiAgICAgIG5hbWUgPSBwYXRoLnN1YnN0cmluZyhwYXRoLmxhc3RJbmRleE9mKCcvJykgKyAxKTsKICAgIH0KICAgIEluZGV4ZWRMaWJyYXJ5IGxpYnJhcnkgPSBjcmVhdGVMaWJyYXJ5KG5hbWUsIGNhbm9uaWNhbFVyaSk7CiAgICByZXR1cm4gbGlicmFyaWVzLnJlZ2lzdGVyKGxpYnJhcnksIG5ldyBLTGlicmFyeURhdGEobm9kZSksCiAgICAgICAgbGlicmFyeUVudiA/PyBlbnYubG9va3VwTGlicmFyeShjYW5vbmljYWxVcmkpKTsKICB9CgogIENsYXNzRW50aXR5IGdldENsYXNzSW50ZXJuYWwoaXIuQ2xhc3Mgbm9kZSwgW0tDbGFzc0VudiBjbGFzc0Vudl0pIHsKICAgIHJldHVybiBjbGFzc01hcFtub2RlXSA/Pz0gX2dldENsYXNzQ3JlYXRlKG5vZGUsIGNsYXNzRW52KTsKICB9CgogIENsYXNzRW50aXR5IF9nZXRDbGFzc0NyZWF0ZShpci5DbGFzcyBub2RlLCBLQ2xhc3NFbnYgY2xhc3NFbnYpIHsKICAgIGFzc2VydCgKICAgICAgICAhZW52SXNDbG9zZWQsCiAgICAgICAgIkVudmlyb25tZW50IG9mICR0aGlzIGlzIGNsb3NlZC4gVHJ5aW5nIHRvIGNyZWF0ZSAiCiAgICAgICAgImNsYXNzIGZvciAkbm9kZS4iKTsKICAgIEtMaWJyYXJ5IGxpYnJhcnkgPSBnZXRMaWJyYXJ5SW50ZXJuYWwobm9kZS5lbmNsb3NpbmdMaWJyYXJ5KTsKICAgIGlmIChjbGFzc0VudiA9PSBudWxsKSB7CiAgICAgIGNsYXNzRW52ID0gbGlicmFyaWVzLmdldEVudihsaWJyYXJ5KS5sb29rdXBDbGFzcyhub2RlLm5hbWUpOwogICAgfQogICAgSW5kZXhlZENsYXNzIGNscyA9CiAgICAgICAgY3JlYXRlQ2xhc3MobGlicmFyeSwgbm9kZS5uYW1lLCBpc0Fic3RyYWN0OiBub2RlLmlzQWJzdHJhY3QpOwogICAgcmV0dXJuIGNsYXNzZXMucmVnaXN0ZXIoY2xzLCBuZXcgS0NsYXNzRGF0YUltcGwobm9kZSksIGNsYXNzRW52KTsKICB9CgogIFR5cGVkZWZFbnRpdHkgZ2V0VHlwZWRlZkludGVybmFsKGlyLlR5cGVkZWYgbm9kZSkgewogICAgcmV0dXJuIHR5cGVkZWZNYXBbbm9kZV0gPz89IF9nZXRUeXBlZGVmQ3JlYXRlKG5vZGUpOwogIH0KCiAgVHlwZWRlZkVudGl0eSBfZ2V0VHlwZWRlZkNyZWF0ZShpci5UeXBlZGVmIG5vZGUpIHsKICAgIGFzc2VydCgKICAgICAgICAhZW52SXNDbG9zZWQsCiAgICAgICAgIkVudmlyb25tZW50IG9mICR0aGlzIGlzIGNsb3NlZC4gVHJ5aW5nIHRvIGNyZWF0ZSAiCiAgICAgICAgInR5cGVkZWYgZm9yICRub2RlLiIpOwogICAgSW5kZXhlZExpYnJhcnkgbGlicmFyeSA9IGdldExpYnJhcnlJbnRlcm5hbChub2RlLmVuY2xvc2luZ0xpYnJhcnkpOwogICAgSW5kZXhlZFR5cGVkZWYgdHlwZWRlZiA9IGNyZWF0ZVR5cGVkZWYobGlicmFyeSwgbm9kZS5uYW1lKTsKICAgIFR5cGVkZWZUeXBlIHR5cGVkZWZUeXBlID0gbmV3IFR5cGVkZWZUeXBlKAogICAgICAgIHR5cGVkZWYsCiAgICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCgKICAgICAgICAgICAgbm9kZS50eXBlUGFyYW1ldGVycy5sZW5ndGgsIGNvbnN0IER5bmFtaWNUeXBlKCkpLAogICAgICAgIGdldERhcnRUeXBlKG5vZGUudHlwZSkpOwogICAgcmV0dXJuIHR5cGVkZWZzLnJlZ2lzdGVyKAogICAgICAgIHR5cGVkZWYsIG5ldyBLVHlwZWRlZkRhdGEobm9kZSwgdHlwZWRlZiwgdHlwZWRlZlR5cGUpKTsKICB9CgogIFR5cGVWYXJpYWJsZUVudGl0eSBnZXRUeXBlVmFyaWFibGVJbnRlcm5hbChpci5UeXBlUGFyYW1ldGVyIG5vZGUpIHsKICAgIHJldHVybiB0eXBlVmFyaWFibGVNYXBbbm9kZV0gPz89IF9nZXRUeXBlVmFyaWFibGVDcmVhdGUobm9kZSk7CiAgfQoKICBUeXBlVmFyaWFibGVFbnRpdHkgX2dldFR5cGVWYXJpYWJsZUNyZWF0ZShpci5UeXBlUGFyYW1ldGVyIG5vZGUpIHsKICAgIGFzc2VydCgKICAgICAgICAhZW52SXNDbG9zZWQsCiAgICAgICAgIkVudmlyb25tZW50IG9mICR0aGlzIGlzIGNsb3NlZC4gVHJ5aW5nIHRvIGNyZWF0ZSAiCiAgICAgICAgInR5cGUgdmFyaWFibGUgZm9yICRub2RlLiIpOwogICAgaWYgKG5vZGUucGFyZW50IGlzIGlyLkNsYXNzKSB7CiAgICAgIGlyLkNsYXNzIGNscyA9IG5vZGUucGFyZW50OwogICAgICBpbnQgaW5kZXggPSBjbHMudHlwZVBhcmFtZXRlcnMuaW5kZXhPZihub2RlKTsKICAgICAgcmV0dXJuIHR5cGVWYXJpYWJsZXMucmVnaXN0ZXIoCiAgICAgICAgICBjcmVhdGVUeXBlVmFyaWFibGUoZ2V0Q2xhc3NJbnRlcm5hbChjbHMpLCBub2RlLm5hbWUsIGluZGV4KSwKICAgICAgICAgIG5ldyBLVHlwZVZhcmlhYmxlRGF0YShub2RlKSk7CiAgICB9CiAgICBpZiAobm9kZS5wYXJlbnQgaXMgaXIuRnVuY3Rpb25Ob2RlKSB7CiAgICAgIGlyLkZ1bmN0aW9uTm9kZSBmdW5jID0gbm9kZS5wYXJlbnQ7CiAgICAgIGludCBpbmRleCA9IGZ1bmMudHlwZVBhcmFtZXRlcnMuaW5kZXhPZihub2RlKTsKICAgICAgaWYgKGZ1bmMucGFyZW50IGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgICAgaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IgPSBmdW5jLnBhcmVudDsKICAgICAgICBpci5DbGFzcyBjbHMgPSBjb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzczsKICAgICAgICByZXR1cm4gZ2V0VHlwZVZhcmlhYmxlSW50ZXJuYWwoY2xzLnR5cGVQYXJhbWV0ZXJzW2luZGV4XSk7CiAgICAgIH0gZWxzZSBpZiAoZnVuYy5wYXJlbnQgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgaXIuUHJvY2VkdXJlIHByb2NlZHVyZSA9IGZ1bmMucGFyZW50OwogICAgICAgIGlmIChwcm9jZWR1cmUua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLkZhY3RvcnkpIHsKICAgICAgICAgIGlyLkNsYXNzIGNscyA9IHByb2NlZHVyZS5lbmNsb3NpbmdDbGFzczsKICAgICAgICAgIHJldHVybiBnZXRUeXBlVmFyaWFibGVJbnRlcm5hbChjbHMudHlwZVBhcmFtZXRlcnNbaW5kZXhdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHR5cGVWYXJpYWJsZXMucmVnaXN0ZXIoCiAgICAgICAgICAgICAgY3JlYXRlVHlwZVZhcmlhYmxlKAogICAgICAgICAgICAgICAgICBnZXRNZXRob2RJbnRlcm5hbChwcm9jZWR1cmUpLCBub2RlLm5hbWUsIGluZGV4KSwKICAgICAgICAgICAgICBuZXcgS1R5cGVWYXJpYWJsZURhdGEobm9kZSkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChmdW5jLnBhcmVudCBpcyBpci5Mb2NhbEZ1bmN0aW9uKSB7CiAgICAgICAgLy8gRW5zdXJlIHRoYXQgbG9jYWwgZnVuY3Rpb24gdHlwZSB2YXJpYWJsZXMgaGF2ZSBiZWVuIGNyZWF0ZWQuCiAgICAgICAgZ2V0TG9jYWxGdW5jdGlvbihmdW5jLnBhcmVudCk7CiAgICAgICAgcmV0dXJuIHR5cGVWYXJpYWJsZU1hcFtub2RlXTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignVW5zdXBwb3J0ZWQgZnVuY3Rpb24gdHlwZSBwYXJhbWV0ZXIgcGFyZW50ICcKICAgICAgICAgICAgJ25vZGUgJHtmdW5jLnBhcmVudH0uJyk7CiAgICAgIH0KICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIHBhcmFtZXRlciB0eXBlIG5vZGUgJG5vZGUuJyk7CiAgfQoKICBDb25zdHJ1Y3RvckVudGl0eSBnZXRDb25zdHJ1Y3RvckludGVybmFsKGlyLk1lbWJlciBub2RlKSB7CiAgICByZXR1cm4gY29uc3RydWN0b3JNYXBbbm9kZV0gPz89IF9nZXRDb25zdHJ1Y3RvckNyZWF0ZShub2RlKTsKICB9CgogIENvbnN0cnVjdG9yRW50aXR5IF9nZXRDb25zdHJ1Y3RvckNyZWF0ZShpci5NZW1iZXIgbm9kZSkgewogICAgYXNzZXJ0KAogICAgICAgICFlbnZJc0Nsb3NlZCwKICAgICAgICAiRW52aXJvbm1lbnQgb2YgJHRoaXMgaXMgY2xvc2VkLiBUcnlpbmcgdG8gY3JlYXRlICIKICAgICAgICAiY29uc3RydWN0b3IgZm9yICRub2RlLiIpOwogICAgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZTsKICAgIENsYXNzRW50aXR5IGVuY2xvc2luZ0NsYXNzID0gZ2V0Q2xhc3NJbnRlcm5hbChub2RlLmVuY2xvc2luZ0NsYXNzKTsKICAgIE5hbWUgbmFtZSA9IGdldE5hbWUobm9kZS5uYW1lKTsKICAgIGJvb2wgaXNFeHRlcm5hbCA9IG5vZGUuaXNFeHRlcm5hbDsKCiAgICBJbmRleGVkQ29uc3RydWN0b3IgY29uc3RydWN0b3I7CiAgICBpZiAobm9kZSBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICBmdW5jdGlvbk5vZGUgPSBub2RlLmZ1bmN0aW9uOwogICAgICBjb25zdHJ1Y3RvciA9IGNyZWF0ZUdlbmVyYXRpdmVDb25zdHJ1Y3RvcihlbmNsb3NpbmdDbGFzcywgbmFtZSwKICAgICAgICAgIGdldFBhcmFtZXRlclN0cnVjdHVyZShmdW5jdGlvbk5vZGUsIGluY2x1ZGVUeXBlUGFyYW1ldGVyczogZmFsc2UpLAogICAgICAgICAgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCwgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgZnVuY3Rpb25Ob2RlID0gbm9kZS5mdW5jdGlvbjsKICAgICAgYm9vbCBpc0Zyb21FbnZpcm9ubWVudCA9IGlzRXh0ZXJuYWwgJiYKICAgICAgICAgIG5hbWUudGV4dCA9PSAnZnJvbUVudmlyb25tZW50JyAmJgogICAgICAgICAgY29uc3QgWydpbnQnLCAnYm9vbCcsICdTdHJpbmcnXS5jb250YWlucyhlbmNsb3NpbmdDbGFzcy5uYW1lKTsKICAgICAgY29uc3RydWN0b3IgPSBjcmVhdGVGYWN0b3J5Q29uc3RydWN0b3IoZW5jbG9zaW5nQ2xhc3MsIG5hbWUsCiAgICAgICAgICBnZXRQYXJhbWV0ZXJTdHJ1Y3R1cmUoZnVuY3Rpb25Ob2RlLCBpbmNsdWRlVHlwZVBhcmFtZXRlcnM6IGZhbHNlKSwKICAgICAgICAgIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsCiAgICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QsCiAgICAgICAgICBpc0Zyb21FbnZpcm9ubWVudENvbnN0cnVjdG9yOiBpc0Zyb21FbnZpcm9ubWVudCk7CiAgICB9IGVsc2UgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDb252ZXJ0IGBub2RlLmxvY2F0aW9uYCB0byBhIFtTb3VyY2VTcGFuXS4KICAgICAgdGhyb3cgZmFpbGVkQXQoCiAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsICJVbmV4cGVjdGVkIGNvbnN0cnVjdG9yIG5vZGU6ICR7bm9kZX0uIik7CiAgICB9CiAgICByZXR1cm4gbWVtYmVycy5yZWdpc3RlcjxJbmRleGVkQ29uc3RydWN0b3IsIEtDb25zdHJ1Y3RvckRhdGE+KAogICAgICAgIGNvbnN0cnVjdG9yLCBuZXcgS0NvbnN0cnVjdG9yRGF0YUltcGwobm9kZSwgZnVuY3Rpb25Ob2RlKSk7CiAgfQoKICBGdW5jdGlvbkVudGl0eSBnZXRNZXRob2RJbnRlcm5hbChpci5Qcm9jZWR1cmUgbm9kZSkgewogICAgLy8gW19nZXRNZXRob2RDcmVhdGVdIGluc2VydHMgdGhlIGNyZWF0ZWQgZnVuY3Rpb24gaW4gW21ldGhvZE1hcF0gc28gd2UKICAgIC8vIGRvbid0IG5lZWQgdG8gdXNlID8/PSBoZXJlLgogICAgcmV0dXJuIG1ldGhvZE1hcFtub2RlXSA/PyBfZ2V0TWV0aG9kQ3JlYXRlKG5vZGUpOwogIH0KCiAgRnVuY3Rpb25FbnRpdHkgX2dldE1ldGhvZENyZWF0ZShpci5Qcm9jZWR1cmUgbm9kZSkgewogICAgYXNzZXJ0KAogICAgICAgICFlbnZJc0Nsb3NlZCwKICAgICAgICAiRW52aXJvbm1lbnQgb2YgJHRoaXMgaXMgY2xvc2VkLiBUcnlpbmcgdG8gY3JlYXRlICIKICAgICAgICAiZnVuY3Rpb24gZm9yICRub2RlLiIpOwogICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb247CiAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnk7CiAgICBDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzczsKICAgIGlmIChub2RlLmVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAgZW5jbG9zaW5nQ2xhc3MgPSBnZXRDbGFzc0ludGVybmFsKG5vZGUuZW5jbG9zaW5nQ2xhc3MpOwogICAgICBsaWJyYXJ5ID0gZW5jbG9zaW5nQ2xhc3MubGlicmFyeTsKICAgIH0gZWxzZSB7CiAgICAgIGxpYnJhcnkgPSBnZXRMaWJyYXJ5SW50ZXJuYWwobm9kZS5lbmNsb3NpbmdMaWJyYXJ5KTsKICAgIH0KICAgIE5hbWUgbmFtZSA9IGdldE5hbWUobm9kZS5uYW1lKTsKICAgIGJvb2wgaXNTdGF0aWMgPSBub2RlLmlzU3RhdGljOwogICAgYm9vbCBpc0V4dGVybmFsID0gbm9kZS5pc0V4dGVybmFsOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIGAmJiAhbm9kZS5pc0V4dGVybmFsYCB3aGVuICMzMTIzMyBpcyBmaXhlZC4KICAgIGJvb2wgaXNBYnN0cmFjdCA9IG5vZGUuaXNBYnN0cmFjdCAmJiAhbm9kZS5pc0V4dGVybmFsOwogICAgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIgPSBnZXRBc3luY01hcmtlcihub2RlLmZ1bmN0aW9uKTsKICAgIHN3aXRjaCAobm9kZS5raW5kKSB7CiAgICAgIGNhc2UgaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5OgogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY3JlYXRlIG1ldGhvZCBmcm9tIGZhY3RvcnkuIik7CiAgICAgIGNhc2UgaXIuUHJvY2VkdXJlS2luZC5HZXR0ZXI6CiAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVHZXR0ZXIobGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5hbWUsIGFzeW5jTWFya2VyLAogICAgICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQWJzdHJhY3Q6IGlzQWJzdHJhY3QpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIGlyLlByb2NlZHVyZUtpbmQuTWV0aG9kOgogICAgICBjYXNlIGlyLlByb2NlZHVyZUtpbmQuT3BlcmF0b3I6CiAgICAgICAgZnVuY3Rpb24gPSBjcmVhdGVNZXRob2QobGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5hbWUsCiAgICAgICAgICAgIGdldFBhcmFtZXRlclN0cnVjdHVyZShub2RlLmZ1bmN0aW9uKSwgYXN5bmNNYXJrZXIsCiAgICAgICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYywgaXNFeHRlcm5hbDogaXNFeHRlcm5hbCwgaXNBYnN0cmFjdDogaXNBYnN0cmFjdCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgaXIuUHJvY2VkdXJlS2luZC5TZXR0ZXI6CiAgICAgICAgYXNzZXJ0KGFzeW5jTWFya2VyID09IEFzeW5jTWFya2VyLlNZTkMpOwogICAgICAgIGZ1bmN0aW9uID0gY3JlYXRlU2V0dGVyKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLnNldHRlciwKICAgICAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0Fic3RyYWN0OiBpc0Fic3RyYWN0KTsKICAgICAgICBicmVhazsKICAgIH0KICAgIG1lbWJlcnMucmVnaXN0ZXI8SW5kZXhlZEZ1bmN0aW9uLCBLRnVuY3Rpb25EYXRhPigKICAgICAgICBmdW5jdGlvbiwgbmV3IEtGdW5jdGlvbkRhdGFJbXBsKG5vZGUsIG5vZGUuZnVuY3Rpb24pKTsKICAgIC8vIFdlIG5lZWQgdG8gcmVnaXN0ZXIgdGhlIGZ1bmN0aW9uIGJlZm9yZSBjcmVhdGluZyB0aGUgdHlwZSB2YXJpYWJsZXMuCiAgICBtZXRob2RNYXBbbm9kZV0gPSBmdW5jdGlvbjsKICAgIGZvciAoaXIuVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyIGluIG5vZGUuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnMpIHsKICAgICAgZ2V0VHlwZVZhcmlhYmxlKHR5cGVQYXJhbWV0ZXIpOwogICAgfQogICAgcmV0dXJuIGZ1bmN0aW9uOwogIH0KCiAgRmllbGRFbnRpdHkgZ2V0RmllbGRJbnRlcm5hbChpci5GaWVsZCBub2RlKSB7CiAgICByZXR1cm4gZmllbGRNYXBbbm9kZV0gPz89IF9nZXRGaWVsZENyZWF0ZShub2RlKTsKICB9CgogIEZpZWxkRW50aXR5IF9nZXRGaWVsZENyZWF0ZShpci5GaWVsZCBub2RlKSB7CiAgICBhc3NlcnQoCiAgICAgICAgIWVudklzQ2xvc2VkLAogICAgICAgICJFbnZpcm9ubWVudCBvZiAkdGhpcyBpcyBjbG9zZWQuIFRyeWluZyB0byBjcmVhdGUgIgogICAgICAgICJmaWVsZCBmb3IgJG5vZGUuIik7CiAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnk7CiAgICBDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzczsKICAgIGlmIChub2RlLmVuY2xvc2luZ0NsYXNzICE9IG51bGwpIHsKICAgICAgZW5jbG9zaW5nQ2xhc3MgPSBnZXRDbGFzc0ludGVybmFsKG5vZGUuZW5jbG9zaW5nQ2xhc3MpOwogICAgICBsaWJyYXJ5ID0gZW5jbG9zaW5nQ2xhc3MubGlicmFyeTsKICAgIH0gZWxzZSB7CiAgICAgIGxpYnJhcnkgPSBnZXRMaWJyYXJ5SW50ZXJuYWwobm9kZS5lbmNsb3NpbmdMaWJyYXJ5KTsKICAgIH0KICAgIE5hbWUgbmFtZSA9IGdldE5hbWUobm9kZS5uYW1lKTsKICAgIGJvb2wgaXNTdGF0aWMgPSBub2RlLmlzU3RhdGljOwogICAgSW5kZXhlZEZpZWxkIGZpZWxkID0gY3JlYXRlRmllbGQobGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5hbWUsCiAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLAogICAgICAgIGlzQXNzaWduYWJsZTogbm9kZS5pc011dGFibGUsCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICAgIHJldHVybiBtZW1iZXJzLnJlZ2lzdGVyPEluZGV4ZWRGaWVsZCwgS0ZpZWxkRGF0YT4oCiAgICAgICAgZmllbGQsIG5ldyBLRmllbGREYXRhSW1wbChub2RlKSk7CiAgfQoKICBib29sIGNoZWNrRmFtaWx5KEVudGl0eSBlbnRpdHkpIHsKICAgIGFzc2VydCgKICAgICAgICAnJGVudGl0eScuc3RhcnRzV2l0aChrRWxlbWVudFByZWZpeCksCiAgICAgICAgZmFpbGVkQXQoZW50aXR5LAogICAgICAgICAgICAiVW5leHBlY3RlZCBlbnRpdHkgJGVudGl0eSwgZXhwZWN0ZWQgZmFtaWx5ICRrRWxlbWVudFByZWZpeC4iKSk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vLyBOYXRpdmVCYXNpY0RhdGEgaXMgbmVlZCBmb3IgY29tcHV0YXRpb24gb2YgdGhlIGRlZmF1bHQgc3VwZXIgY2xhc3MuCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmFzaWNEYXRhIGdldCBuYXRpdmVCYXNpY0RhdGEgPT4gX2Zyb250ZW5kU3RyYXRlZ3kubmF0aXZlQmFzaWNEYXRhOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZENvbXBvbmVudChpci5Db21wb25lbnQgY29tcG9uZW50KSB7CiAgICBlbnYuYWRkQ29tcG9uZW50KGNvbXBvbmVudCk7CiAgfQoKICBCZWhhdmlvckJ1aWxkZXIgZ2V0IG5hdGl2ZUJlaGF2aW9yQnVpbGRlciA9PgogICAgICBfbmF0aXZlQmVoYXZpb3JCdWlsZGVyID8/PSBuZXcgS2VybmVsQmVoYXZpb3JCdWlsZGVyKGVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLCBuYXRpdmVCYXNpY0RhdGEsIHJlcG9ydGVyLCBvcHRpb25zKTsKCiAgUmVzb2x1dGlvbkltcGFjdCBjb21wdXRlV29ybGRJbXBhY3QoS01lbWJlciBtZW1iZXIsCiAgICAgIFZhcmlhYmxlU2NvcGVNb2RlbCB2YXJpYWJsZVNjb3BlTW9kZWwsIFNldDxQcmFnbWFBbm5vdGF0aW9uPiBhbm5vdGF0aW9ucywKICAgICAge0ltcGFjdEJ1aWxkZXJEYXRhIGltcGFjdEJ1aWxkZXJEYXRhfSkgewogICAgS01lbWJlckRhdGEgbWVtYmVyRGF0YSA9IG1lbWJlcnMuZ2V0RGF0YShtZW1iZXIpOwogICAgaXIuTWVtYmVyIG5vZGUgPSBtZW1iZXJEYXRhLm5vZGU7CgogICAgaWYgKGltcGFjdEJ1aWxkZXJEYXRhICE9IG51bGwpIHsKICAgICAgaWYgKGltcGFjdEJ1aWxkZXJEYXRhLnR5cGVNYXBzRm9yVGVzdGluZyAhPSBudWxsKSB7CiAgICAgICAgdHlwZU1hcHNGb3JUZXN0aW5nID8/PSB7fTsKICAgICAgICB0eXBlTWFwc0ZvclRlc3RpbmdbbWVtYmVyXSA9IGltcGFjdEJ1aWxkZXJEYXRhLnR5cGVNYXBzRm9yVGVzdGluZzsKICAgICAgfQogICAgICBJbXBhY3REYXRhIGltcGFjdERhdGEgPSBpbXBhY3RCdWlsZGVyRGF0YS5pbXBhY3REYXRhOwogICAgICBtZW1iZXJEYXRhLnN0YXRpY1R5cGVzID0gaW1wYWN0QnVpbGRlckRhdGEuY2FjaGVkU3RhdGljVHlwZXM7CiAgICAgIEtlcm5lbEltcGFjdENvbnZlcnRlciBjb252ZXJ0ZXIgPSBuZXcgS2VybmVsSW1wYWN0Q29udmVydGVyKAogICAgICAgICAgdGhpcywgbWVtYmVyLCByZXBvcnRlciwgb3B0aW9ucywgX2NvbnN0YW50VmFsdWVmaWVyKTsKICAgICAgcmV0dXJuIGNvbnZlcnRlci5jb252ZXJ0KGltcGFjdERhdGEpOwogICAgfSBlbHNlIHsKICAgICAgS2VybmVsSW1wYWN0QnVpbGRlciBidWlsZGVyID0gbmV3IEtlcm5lbEltcGFjdEJ1aWxkZXIoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgbWVtYmVyLAogICAgICAgICAgcmVwb3J0ZXIsCiAgICAgICAgICBvcHRpb25zLAogICAgICAgICAgdmFyaWFibGVTY29wZU1vZGVsLAogICAgICAgICAgYW5ub3RhdGlvbnMsCiAgICAgICAgICBfY29uc3RhbnRWYWx1ZWZpZXIpOwogICAgICBpZiAocmV0YWluRGF0YUZvclRlc3RpbmcpIHsKICAgICAgICB0eXBlTWFwc0ZvclRlc3RpbmcgPz89IHt9OwogICAgICAgIHR5cGVNYXBzRm9yVGVzdGluZ1ttZW1iZXJdID0gYnVpbGRlci50eXBlTWFwc0ZvclRlc3RpbmcgPSB7fTsKICAgICAgfQogICAgICBub2RlLmFjY2VwdChidWlsZGVyKTsKICAgICAgbWVtYmVyRGF0YS5zdGF0aWNUeXBlcyA9IGJ1aWxkZXIuZ2V0U3RhdGljVHlwZUNhY2hlKCk7CiAgICAgIHJldHVybiBidWlsZGVyLmltcGFjdEJ1aWxkZXI7CiAgICB9CiAgfQoKICBTdGF0aWNUeXBlQ2FjaGUgZ2V0Q2FjaGVkU3RhdGljVHlwZXMoS01lbWJlciBtZW1iZXIpIHsKICAgIFN0YXRpY1R5cGVDYWNoZSBzdGF0aWNUeXBlcyA9IG1lbWJlcnMuZ2V0RGF0YShtZW1iZXIpLnN0YXRpY1R5cGVzOwogICAgYXNzZXJ0KHN0YXRpY1R5cGVzICE9IG51bGwsICJObyBzdGF0aWMgdHlwZXMgY2FjaGVkIGZvciAkbWVtYmVyLiIpOwogICAgcmV0dXJuIHN0YXRpY1R5cGVzOwogIH0KCiAgTWFwPGlyLkV4cHJlc3Npb24sIFR5cGVNYXA+IGdldFR5cGVNYXBzRm9yVGVzdGluZyhLTWVtYmVyIG1lbWJlcikgewogICAgcmV0dXJuIHR5cGVNYXBzRm9yVGVzdGluZ1ttZW1iZXJdOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGtlcm5lbCBbaXIuUHJvY2VkdXJlXSBub2RlIGZvciB0aGUgW21ldGhvZF0uCiAgaXIuUHJvY2VkdXJlIF9sb29rdXBQcm9jZWR1cmUoS0Z1bmN0aW9uIG1ldGhvZCkgewogICAgcmV0dXJuIG1lbWJlcnMuZ2V0RGF0YShtZXRob2QpLm5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5MaWJyYXJ5IGdldExpYnJhcnlOb2RlKExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgcmV0dXJuIGxpYnJhcmllcy5nZXREYXRhKGxpYnJhcnkpLmxpYnJhcnk7CiAgfQoKICBAb3ZlcnJpZGUKICBMb2NhbCBnZXRMb2NhbEZ1bmN0aW9uKGlyLkxvY2FsRnVuY3Rpb24gbm9kZSkgewogICAgS0xvY2FsRnVuY3Rpb24gbG9jYWxGdW5jdGlvbiA9IGxvY2FsRnVuY3Rpb25NYXBbbm9kZV07CiAgICBpZiAobG9jYWxGdW5jdGlvbiA9PSBudWxsKSB7CiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXJDb250ZXh0OwogICAgICBFbnRpdHkgZXhlY3V0YWJsZUNvbnRleHQ7CiAgICAgIGlyLlRyZWVOb2RlIHBhcmVudCA9IG5vZGUucGFyZW50OwogICAgICB3aGlsZSAocGFyZW50ICE9IG51bGwpIHsKICAgICAgICBpZiAocGFyZW50IGlzIGlyLk1lbWJlcikgewogICAgICAgICAgZXhlY3V0YWJsZUNvbnRleHQgPSBtZW1iZXJDb250ZXh0ID0gZ2V0TWVtYmVyKHBhcmVudCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcmVudCBpcyBpci5Mb2NhbEZ1bmN0aW9uKSB7CiAgICAgICAgICBLTG9jYWxGdW5jdGlvbiBsb2NhbEZ1bmN0aW9uID0gZ2V0TG9jYWxGdW5jdGlvbihwYXJlbnQpOwogICAgICAgICAgZXhlY3V0YWJsZUNvbnRleHQgPSBsb2NhbEZ1bmN0aW9uOwogICAgICAgICAgbWVtYmVyQ29udGV4dCA9IGxvY2FsRnVuY3Rpb24ubWVtYmVyQ29udGV4dDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBwYXJlbnQgPSBwYXJlbnQucGFyZW50OwogICAgICB9CiAgICAgIFN0cmluZyBuYW1lOwogICAgICBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb247CiAgICAgIGlmIChub2RlIGlzIGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24pIHsKICAgICAgICBuYW1lID0gbm9kZS52YXJpYWJsZS5uYW1lOwogICAgICAgIGZ1bmN0aW9uID0gbm9kZS5mdW5jdGlvbjsKICAgICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLkZ1bmN0aW9uRXhwcmVzc2lvbikgewogICAgICAgIGZ1bmN0aW9uID0gbm9kZS5mdW5jdGlvbjsKICAgICAgfQogICAgICBsb2NhbEZ1bmN0aW9uID0gbG9jYWxGdW5jdGlvbk1hcFtub2RlXSA9CiAgICAgICAgICBuZXcgS0xvY2FsRnVuY3Rpb24obmFtZSwgbWVtYmVyQ29udGV4dCwgZXhlY3V0YWJsZUNvbnRleHQsIG5vZGUpOwogICAgICBpbnQgaW5kZXggPSAwOwogICAgICBMaXN0PEtMb2NhbFR5cGVWYXJpYWJsZT4gdHlwZVZhcmlhYmxlcyA9IDxLTG9jYWxUeXBlVmFyaWFibGU+W107CiAgICAgIGZvciAoaXIuVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyIGluIGZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgdHlwZVZhcmlhYmxlcy5hZGQodHlwZVZhcmlhYmxlTWFwW3R5cGVQYXJhbWV0ZXJdID0KICAgICAgICAgICAgbmV3IEtMb2NhbFR5cGVWYXJpYWJsZShsb2NhbEZ1bmN0aW9uLCB0eXBlUGFyYW1ldGVyLm5hbWUsIGluZGV4KSk7CiAgICAgICAgaW5kZXgrKzsKICAgICAgfQogICAgICBpbmRleCA9IDA7CiAgICAgIGZvciAoaXIuVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyIGluIGZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgdHlwZVZhcmlhYmxlc1tpbmRleF0uYm91bmQgPSBnZXREYXJ0VHlwZSh0eXBlUGFyYW1ldGVyLmJvdW5kKTsKICAgICAgICB0eXBlVmFyaWFibGVzW2luZGV4XS5kZWZhdWx0VHlwZSA9CiAgICAgICAgICAgIGdldERhcnRUeXBlKHR5cGVQYXJhbWV0ZXIuZGVmYXVsdFR5cGUpOwogICAgICAgIGluZGV4Kys7CiAgICAgIH0KICAgICAgbG9jYWxGdW5jdGlvbi5mdW5jdGlvblR5cGUgPSBnZXRGdW5jdGlvblR5cGUoZnVuY3Rpb24pOwogICAgfQogICAgcmV0dXJuIGxvY2FsRnVuY3Rpb247CiAgfQoKICBib29sIF9pbXBsZW1lbnRzRnVuY3Rpb24oSW5kZXhlZENsYXNzIGNscykgewogICAgYXNzZXJ0KGNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRGF0YSBkYXRhID0gY2xhc3Nlcy5nZXREYXRhKGNscyk7CiAgICBPcmRlcmVkVHlwZVNldCBvcmRlcmVkVHlwZVNldCA9IGRhdGEub3JkZXJlZFR5cGVTZXQ7CiAgICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSA9IG9yZGVyZWRUeXBlU2V0LmFzSW5zdGFuY2VPZigKICAgICAgICBjb21tb25FbGVtZW50cy5mdW5jdGlvbkNsYXNzLAogICAgICAgIGdldEhpZXJhcmNoeURlcHRoKGNvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uQ2xhc3MpKTsKICAgIGlmIChzdXBlcnR5cGUgIT0gbnVsbCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBkYXRhLmNhbGxUeXBlIGlzIEZ1bmN0aW9uVHlwZTsKICB9CgogIEBvdmVycmlkZQogIGlyLlR5cGVkZWYgZ2V0VHlwZWRlZk5vZGUoVHlwZWRlZkVudGl0eSB0eXBlZGVmKSB7CiAgICByZXR1cm4gX2dldFR5cGVkZWZOb2RlKHR5cGVkZWYpOwogIH0KCiAgQG92ZXJyaWRlCiAgRm9yZWlnbktpbmQgZ2V0Rm9yZWlnbktpbmQoaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBpZiAoY29tbW9uRWxlbWVudHMuaXNGb3JlaWduSGVscGVyKGdldE1lbWJlcihub2RlLnRhcmdldCkpKSB7CiAgICAgIHN3aXRjaCAobm9kZS50YXJnZXQubmFtZS5uYW1lKSB7CiAgICAgICAgY2FzZSBJZGVudGlmaWVycy5KUzoKICAgICAgICAgIHJldHVybiBGb3JlaWduS2luZC5KUzsKICAgICAgICBjYXNlIElkZW50aWZpZXJzLkpTX0JVSUxUSU46CiAgICAgICAgICByZXR1cm4gRm9yZWlnbktpbmQuSlNfQlVJTFRJTjsKICAgICAgICBjYXNlIElkZW50aWZpZXJzLkpTX0VNQkVEREVEX0dMT0JBTDoKICAgICAgICAgIHJldHVybiBGb3JlaWduS2luZC5KU19FTUJFRERFRF9HTE9CQUw7CiAgICAgICAgY2FzZSBJZGVudGlmaWVycy5KU19JTlRFUkNFUFRPUl9DT05TVEFOVDoKICAgICAgICAgIHJldHVybiBGb3JlaWduS2luZC5KU19JTlRFUkNFUFRPUl9DT05TVEFOVDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIEZvcmVpZ25LaW5kLk5PTkU7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldEludGVyZmFjZVR5cGVGb3JKc0ludGVyY2VwdG9yQ2FsbChpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCAhPSAxIHx8CiAgICAgICAgbm9kZS5hcmd1bWVudHMubmFtZWQuaXNOb3RFbXB0eSkgewogICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgIE1lc3NhZ2VLaW5kLldST05HX0FSR1VNRU5UX0ZPUl9KU19JTlRFUkNFUFRPUl9DT05TVEFOVCk7CiAgICB9CiAgICBpci5Ob2RlIGFyZ3VtZW50ID0gbm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5maXJzdDsKICAgIGlmIChhcmd1bWVudCBpcyBpci5UeXBlTGl0ZXJhbCAmJiBhcmd1bWVudC50eXBlIGlzIGlyLkludGVyZmFjZVR5cGUpIHsKICAgICAgcmV0dXJuIGdldEludGVyZmFjZVR5cGUoYXJndW1lbnQudHlwZSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IENhY2hlIHRoaXMgZm9yIGxhdGVyIHVzZS4KICBAb3ZlcnJpZGUKICBOYXRpdmVCZWhhdmlvciBnZXROYXRpdmVCZWhhdmlvckZvckZpZWxkTG9hZChpci5GaWVsZCBmaWVsZCwKICAgICAgSXRlcmFibGU8U3RyaW5nPiBjcmVhdGVzQW5ub3RhdGlvbnMsIEl0ZXJhYmxlPFN0cmluZz4gcmV0dXJuc0Fubm90YXRpb25zLAogICAgICB7Ym9vbCBpc0pzSW50ZXJvcH0pIHsKICAgIERhcnRUeXBlIHR5cGUgPSBnZXREYXJ0VHlwZShmaWVsZC50eXBlKTsKICAgIHJldHVybiBuYXRpdmVCZWhhdmlvckJ1aWxkZXIuYnVpbGRGaWVsZExvYWRCZWhhdmlvcih0eXBlLAogICAgICAgIGNyZWF0ZXNBbm5vdGF0aW9ucywgcmV0dXJuc0Fubm90YXRpb25zLCB0eXBlTG9va3VwKHJlc29sdmVBc1JhdzogZmFsc2UpLAogICAgICAgIGlzSnNJbnRlcm9wOiBpc0pzSW50ZXJvcCk7CiAgfQoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYWNoZSB0aGlzIGZvciBsYXRlciB1c2UuCiAgQG92ZXJyaWRlCiAgTmF0aXZlQmVoYXZpb3IgZ2V0TmF0aXZlQmVoYXZpb3JGb3JGaWVsZFN0b3JlKGlyLkZpZWxkIGZpZWxkKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gZ2V0RGFydFR5cGUoZmllbGQudHlwZSk7CiAgICByZXR1cm4gbmF0aXZlQmVoYXZpb3JCdWlsZGVyLmJ1aWxkRmllbGRTdG9yZUJlaGF2aW9yKHR5cGUpOwogIH0KCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2FjaGUgdGhpcyBmb3IgbGF0ZXIgdXNlLgogIEBvdmVycmlkZQogIE5hdGl2ZUJlaGF2aW9yIGdldE5hdGl2ZUJlaGF2aW9yRm9yTWV0aG9kKGlyLk1lbWJlciBtZW1iZXIsCiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gY3JlYXRlc0Fubm90YXRpb25zLCBJdGVyYWJsZTxTdHJpbmc+IHJldHVybnNBbm5vdGF0aW9ucywKICAgICAge2Jvb2wgaXNKc0ludGVyb3B9KSB7CiAgICBEYXJ0VHlwZSB0eXBlOwogICAgaWYgKG1lbWJlciBpcyBpci5Qcm9jZWR1cmUpIHsKICAgICAgdHlwZSA9IGdldEZ1bmN0aW9uVHlwZShtZW1iZXIuZnVuY3Rpb24pOwogICAgfSBlbHNlIGlmIChtZW1iZXIgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgdHlwZSA9IGdldEZ1bmN0aW9uVHlwZShtZW1iZXIuZnVuY3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwgIlVuZXhwZWN0ZWQgbWV0aG9kIG5vZGUgJG1lbWJlci4iKTsKICAgIH0KICAgIHJldHVybiBuYXRpdmVCZWhhdmlvckJ1aWxkZXIuYnVpbGRNZXRob2RCZWhhdmlvcih0eXBlLCBjcmVhdGVzQW5ub3RhdGlvbnMsCiAgICAgICAgcmV0dXJuc0Fubm90YXRpb25zLCB0eXBlTG9va3VwKHJlc29sdmVBc1JhdzogZmFsc2UpLAogICAgICAgIGlzSnNJbnRlcm9wOiBpc0pzSW50ZXJvcCk7CiAgfQoKICBJbmRleGVkTGlicmFyeSBjcmVhdGVMaWJyYXJ5KFN0cmluZyBuYW1lLCBVcmkgY2Fub25pY2FsVXJpKSB7CiAgICByZXR1cm4gbmV3IEtMaWJyYXJ5KG5hbWUsIGNhbm9uaWNhbFVyaSk7CiAgfQoKICBJbmRleGVkQ2xhc3MgY3JlYXRlQ2xhc3MoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgaXNBYnN0cmFjdH0pIHsKICAgIHJldHVybiBuZXcgS0NsYXNzKGxpYnJhcnksIG5hbWUsIGlzQWJzdHJhY3Q6IGlzQWJzdHJhY3QpOwogIH0KCiAgSW5kZXhlZFR5cGVkZWYgY3JlYXRlVHlwZWRlZihMaWJyYXJ5RW50aXR5IGxpYnJhcnksIFN0cmluZyBuYW1lKSB7CiAgICByZXR1cm4gbmV3IEtUeXBlZGVmKGxpYnJhcnksIG5hbWUpOwogIH0KCiAgVHlwZVZhcmlhYmxlRW50aXR5IGNyZWF0ZVR5cGVWYXJpYWJsZSgKICAgICAgRW50aXR5IHR5cGVEZWNsYXJhdGlvbiwgU3RyaW5nIG5hbWUsIGludCBpbmRleCkgewogICAgcmV0dXJuIG5ldyBLVHlwZVZhcmlhYmxlKHR5cGVEZWNsYXJhdGlvbiwgbmFtZSwgaW5kZXgpOwogIH0KCiAgSW5kZXhlZENvbnN0cnVjdG9yIGNyZWF0ZUdlbmVyYXRpdmVDb25zdHJ1Y3RvcihDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzcywKICAgICAgTmFtZSBuYW1lLCBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlLAogICAgICB7Ym9vbCBpc0V4dGVybmFsLCBib29sIGlzQ29uc3R9KSB7CiAgICByZXR1cm4gbmV3IEtHZW5lcmF0aXZlQ29uc3RydWN0b3IoZW5jbG9zaW5nQ2xhc3MsIG5hbWUsIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0NvbnN0OiBpc0NvbnN0KTsKICB9CgogIEluZGV4ZWRDb25zdHJ1Y3RvciBjcmVhdGVGYWN0b3J5Q29uc3RydWN0b3IoQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3MsCiAgICAgIE5hbWUgbmFtZSwgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAge2Jvb2wgaXNFeHRlcm5hbCwgYm9vbCBpc0NvbnN0LCBib29sIGlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3J9KSB7CiAgICByZXR1cm4gbmV3IEtGYWN0b3J5Q29uc3RydWN0b3IoZW5jbG9zaW5nQ2xhc3MsIG5hbWUsIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgICBpc0V4dGVybmFsOiBpc0V4dGVybmFsLAogICAgICAgIGlzQ29uc3Q6IGlzQ29uc3QsCiAgICAgICAgaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvcjogaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3Rvcik7CiAgfQoKICBJbmRleGVkRnVuY3Rpb24gY3JlYXRlR2V0dGVyKExpYnJhcnlFbnRpdHkgbGlicmFyeSwKICAgICAgQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3MsIE5hbWUgbmFtZSwgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIsCiAgICAgIHtib29sIGlzU3RhdGljLCBib29sIGlzRXh0ZXJuYWwsIGJvb2wgaXNBYnN0cmFjdH0pIHsKICAgIHJldHVybiBuZXcgS0dldHRlcihsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZSwgYXN5bmNNYXJrZXIsCiAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0Fic3RyYWN0OiBpc0Fic3RyYWN0KTsKICB9CgogIEluZGV4ZWRGdW5jdGlvbiBjcmVhdGVNZXRob2QoCiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSwKICAgICAgQ2xhc3NFbnRpdHkgZW5jbG9zaW5nQ2xhc3MsCiAgICAgIE5hbWUgbmFtZSwKICAgICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSwKICAgICAgQXN5bmNNYXJrZXIgYXN5bmNNYXJrZXIsCiAgICAgIHtib29sIGlzU3RhdGljLAogICAgICBib29sIGlzRXh0ZXJuYWwsCiAgICAgIGJvb2wgaXNBYnN0cmFjdH0pIHsKICAgIHJldHVybiBuZXcgS01ldGhvZCgKICAgICAgICBsaWJyYXJ5LCBlbmNsb3NpbmdDbGFzcywgbmFtZSwgcGFyYW1ldGVyU3RydWN0dXJlLCBhc3luY01hcmtlciwKICAgICAgICBpc1N0YXRpYzogaXNTdGF0aWMsIGlzRXh0ZXJuYWw6IGlzRXh0ZXJuYWwsIGlzQWJzdHJhY3Q6IGlzQWJzdHJhY3QpOwogIH0KCiAgSW5kZXhlZEZ1bmN0aW9uIGNyZWF0ZVNldHRlcigKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzcywgTmFtZSBuYW1lLAogICAgICB7Ym9vbCBpc1N0YXRpYywgYm9vbCBpc0V4dGVybmFsLCBib29sIGlzQWJzdHJhY3R9KSB7CiAgICByZXR1cm4gbmV3IEtTZXR0ZXIobGlicmFyeSwgZW5jbG9zaW5nQ2xhc3MsIG5hbWUsCiAgICAgICAgaXNTdGF0aWM6IGlzU3RhdGljLCBpc0V4dGVybmFsOiBpc0V4dGVybmFsLCBpc0Fic3RyYWN0OiBpc0Fic3RyYWN0KTsKICB9CgogIEluZGV4ZWRGaWVsZCBjcmVhdGVGaWVsZCgKICAgICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBDbGFzc0VudGl0eSBlbmNsb3NpbmdDbGFzcywgTmFtZSBuYW1lLAogICAgICB7Ym9vbCBpc1N0YXRpYywgYm9vbCBpc0Fzc2lnbmFibGUsIGJvb2wgaXNDb25zdH0pIHsKICAgIHJldHVybiBuZXcgS0ZpZWxkKGxpYnJhcnksIGVuY2xvc2luZ0NsYXNzLCBuYW1lLAogICAgICAgIGlzU3RhdGljOiBpc1N0YXRpYywgaXNBc3NpZ25hYmxlOiBpc0Fzc2lnbmFibGUsIGlzQ29uc3Q6IGlzQ29uc3QpOwogIH0KfQoKY2xhc3MgS2VybmVsRWxlbWVudEVudmlyb25tZW50IGV4dGVuZHMgRWxlbWVudEVudmlyb25tZW50CiAgICBpbXBsZW1lbnRzIEtFbGVtZW50RW52aXJvbm1lbnQgewogIGZpbmFsIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcDsKCiAgS2VybmVsRWxlbWVudEVudmlyb25tZW50KHRoaXMuZWxlbWVudE1hcCk7CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldCBkeW5hbWljVHlwZSA9PiBjb25zdCBEeW5hbWljVHlwZSgpOwoKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGdldCBtYWluTGlicmFyeSA9PiBlbGVtZW50TWFwLl9tYWluTGlicmFyeTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IG1haW5GdW5jdGlvbiA9PiBlbGVtZW50TWFwLl9tYWluRnVuY3Rpb247CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPExpYnJhcnlFbnRpdHk+IGdldCBsaWJyYXJpZXMgPT4gZWxlbWVudE1hcC5saWJyYXJ5TGlzdEludGVybmFsOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0TGlicmFyeU5hbWUoTGlicmFyeUVudGl0eSBsaWJyYXJ5KSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5fZ2V0TGlicmFyeU5hbWUobGlicmFyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldFRoaXNUeXBlKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0VGhpc1R5cGUoY2xzKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgZ2V0UmF3VHlwZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLl9nZXRSYXdUeXBlKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzR2VuZXJpY0NsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGdldFRoaXNUeXBlKGNscykudHlwZUFyZ3VtZW50cy5pc05vdEVtcHR5OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc01peGluQXBwbGljYXRpb24oQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5faXNNaXhpbkFwcGxpY2F0aW9uKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVW5uYW1lZE1peGluQXBwbGljYXRpb24oQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5faXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbihjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0VHlwZVZhcmlhYmxlQm91bmQoVHlwZVZhcmlhYmxlRW50aXR5IHR5cGVWYXJpYWJsZSkgewogICAgaWYgKHR5cGVWYXJpYWJsZSBpcyBLTG9jYWxUeXBlVmFyaWFibGUpIHJldHVybiB0eXBlVmFyaWFibGUuYm91bmQ7CiAgICByZXR1cm4gZWxlbWVudE1hcC5nZXRUeXBlVmFyaWFibGVCb3VuZCh0eXBlVmFyaWFibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBjcmVhdGVJbnRlcmZhY2VUeXBlKAogICAgICBDbGFzc0VudGl0eSBjbHMsIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShjbHMsIHR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25UeXBlIGdldEZ1bmN0aW9uVHlwZShGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2dldEZ1bmN0aW9uVHlwZShmdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PFR5cGVWYXJpYWJsZVR5cGU+IGdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2dldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhmdW5jdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRGaWVsZFR5cGUoRmllbGRFbnRpdHkgZmllbGQpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLl9nZXRGaWVsZFR5cGUoZmllbGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25UeXBlIGdldExvY2FsRnVuY3Rpb25UeXBlKGNvdmFyaWFudCBLTG9jYWxGdW5jdGlvbiBmdW5jdGlvbikgewogICAgcmV0dXJuIGZ1bmN0aW9uLmZ1bmN0aW9uVHlwZTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiBnZXRGaWVsZENvbnN0YW50Rm9yVGVzdGluZyhGaWVsZEVudGl0eSBmaWVsZCkgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuX2dldEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uKGZpZWxkKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFVuYWxpYXNlZFR5cGUoRGFydFR5cGUgdHlwZSkgPT4gdHlwZTsKCiAgQG92ZXJyaWRlCiAgQ29uc3RydWN0b3JFbnRpdHkgbG9va3VwQ29uc3RydWN0b3IoQ2xhc3NFbnRpdHkgY2xzLCBTdHJpbmcgbmFtZSwKICAgICAge2Jvb2wgcmVxdWlyZWQ6IGZhbHNlfSkgewogICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPSBlbGVtZW50TWFwLmxvb2t1cENvbnN0cnVjdG9yKGNscywgbmFtZSk7CiAgICBpZiAoY29uc3RydWN0b3IgPT0gbnVsbCAmJiByZXF1aXJlZCkgewogICAgICB0aHJvdyBmYWlsZWRBdCgKICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAiVGhlIGNvbnN0cnVjdG9yICckbmFtZScgd2FzIG5vdCBmb3VuZCBpbiBjbGFzcyAnJHtjbHMubmFtZX0nICIKICAgICAgICAgICJpbiBsaWJyYXJ5ICR7Y2xzLmxpYnJhcnkuY2Fub25pY2FsVXJpfS4iKTsKICAgIH0KICAgIHJldHVybiBjb25zdHJ1Y3RvcjsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBsb29rdXBMb2NhbENsYXNzTWVtYmVyKENsYXNzRW50aXR5IGNscywgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2UsIGJvb2wgcmVxdWlyZWQ6IGZhbHNlfSkgewogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9CiAgICAgICAgZWxlbWVudE1hcC5sb29rdXBDbGFzc01lbWJlcihjbHMsIG5hbWUsIHNldHRlcjogc2V0dGVyKTsKICAgIGlmIChtZW1iZXIgPT0gbnVsbCAmJiByZXF1aXJlZCkgewogICAgICB0aHJvdyBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgIlRoZSBtZW1iZXIgJyRuYW1lJyB3YXMgbm90IGZvdW5kIGluICR7Y2xzLm5hbWV9LiIpOwogICAgfQogICAgcmV0dXJuIG1lbWJlcjsKICB9CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldFN1cGVyQ2xhc3MoQ2xhc3NFbnRpdHkgY2xzLAogICAgICB7Ym9vbCBza2lwVW5uYW1lZE1peGluQXBwbGljYXRpb25zOiBmYWxzZX0pIHsKICAgIGFzc2VydChlbGVtZW50TWFwLmNoZWNrRmFtaWx5KGNscykpOwogICAgQ2xhc3NFbnRpdHkgc3VwZXJjbGFzcyA9IGVsZW1lbnRNYXAuZ2V0U3VwZXJUeXBlKGNscyk/LmVsZW1lbnQ7CiAgICBpZiAoc2tpcFVubmFtZWRNaXhpbkFwcGxpY2F0aW9ucykgewogICAgICB3aGlsZSAoc3VwZXJjbGFzcyAhPSBudWxsICYmCiAgICAgICAgICBlbGVtZW50TWFwLl9pc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uKHN1cGVyY2xhc3MpKSB7CiAgICAgICAgc3VwZXJjbGFzcyA9IGVsZW1lbnRNYXAuZ2V0U3VwZXJUeXBlKHN1cGVyY2xhc3MpPy5lbGVtZW50OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3VwZXJjbGFzczsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaFN1cGVydHlwZShDbGFzc0VudGl0eSBjbHMsIHZvaWQgZihJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSkpIHsKICAgIGVsZW1lbnRNYXAuX2ZvckVhY2hTdXBlcnR5cGUoY2xzLCBmKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaE1peGluKENsYXNzRW50aXR5IGNscywgdm9pZCBmKENsYXNzRW50aXR5IG1peGluKSkgewogICAgZWxlbWVudE1hcC5fZm9yRWFjaE1peGluKGNscywgZik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hMb2NhbENsYXNzTWVtYmVyKENsYXNzRW50aXR5IGNscywgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBlbGVtZW50TWFwLl9mb3JFYWNoTG9jYWxDbGFzc01lbWJlcihjbHMsIGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoQ2xhc3NNZW1iZXIoCiAgICAgIENsYXNzRW50aXR5IGNscywgdm9pZCBmKENsYXNzRW50aXR5IGRlY2xhcmVyLCBNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgZWxlbWVudE1hcC5fZm9yRWFjaENsYXNzTWVtYmVyKGNscywgZik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hDb25zdHJ1Y3RvcigKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCB2b2lkIGYoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpKSB7CiAgICBlbGVtZW50TWFwLl9mb3JFYWNoQ29uc3RydWN0b3IoY2xzLCBmKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaExpYnJhcnlNZW1iZXIoCiAgICAgIExpYnJhcnlFbnRpdHkgbGlicmFyeSwgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIpKSB7CiAgICBlbGVtZW50TWFwLl9mb3JFYWNoTGlicmFyeU1lbWJlcihsaWJyYXJ5LCBmKTsKICB9CgogIEBvdmVycmlkZQogIE1lbWJlckVudGl0eSBsb29rdXBMaWJyYXJ5TWVtYmVyKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIHNldHRlcjogZmFsc2UsIGJvb2wgcmVxdWlyZWQ6IGZhbHNlfSkgewogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9CiAgICAgICAgZWxlbWVudE1hcC5sb29rdXBMaWJyYXJ5TWVtYmVyKGxpYnJhcnksIG5hbWUsIHNldHRlcjogc2V0dGVyKTsKICAgIGlmIChtZW1iZXIgPT0gbnVsbCAmJiByZXF1aXJlZCkgewogICAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgIlRoZSBtZW1iZXIgJyR7bmFtZX0nIHdhcyBub3QgZm91bmQgaW4gbGlicmFyeSAnJHtsaWJyYXJ5Lm5hbWV9Jy4iKTsKICAgIH0KICAgIHJldHVybiBtZW1iZXI7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBsb29rdXBDbGFzcyhMaWJyYXJ5RW50aXR5IGxpYnJhcnksIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCByZXF1aXJlZDogZmFsc2V9KSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50TWFwLmxvb2t1cENsYXNzKGxpYnJhcnksIG5hbWUpOwogICAgaWYgKGNscyA9PSBudWxsICYmIHJlcXVpcmVkKSB7CiAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAiVGhlIGNsYXNzICckbmFtZScgIHdhcyBub3QgZm91bmQgaW4gbGlicmFyeSAnJHtsaWJyYXJ5Lm5hbWV9Jy4iKTsKICAgIH0KICAgIHJldHVybiBjbHM7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hDbGFzcyhMaWJyYXJ5RW50aXR5IGxpYnJhcnksIHZvaWQgZihDbGFzc0VudGl0eSBjbHMpKSB7CiAgICBlbGVtZW50TWFwLl9mb3JFYWNoQ2xhc3MobGlicmFyeSwgZik7CiAgfQoKICBAb3ZlcnJpZGUKICBMaWJyYXJ5RW50aXR5IGxvb2t1cExpYnJhcnkoVXJpIHVyaSwge2Jvb2wgcmVxdWlyZWQ6IGZhbHNlfSkgewogICAgTGlicmFyeUVudGl0eSBsaWJyYXJ5ID0gZWxlbWVudE1hcC5sb29rdXBMaWJyYXJ5KHVyaSk7CiAgICBpZiAobGlicmFyeSA9PSBudWxsICYmIHJlcXVpcmVkKSB7CiAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICJUaGUgbGlicmFyeSAnJHVyaScgd2FzIG5vdCBmb3VuZC4iKTsKICAgIH0KICAgIHJldHVybiBsaWJyYXJ5OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0RlZmVycmVkTG9hZExpYnJhcnlHZXR0ZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgLy8gVGhlIGZyb250LWVuZCBnZW5lcmF0ZXMgdGhlIGdldHRlciBvZiBsb2FkTGlicmFyeSBleHBsaWNpdGx5IGFzIGNvZGUKICAgIC8vIHNvIHRoZXJlIGlzIG5vIGltcGxpY2l0IHJlcHJlc2VudGF0aW9uIGJhc2VkIG9uIGEgImxvYWRMaWJyYXJ5IiBtZW1iZXIuCiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBnZXRMaWJyYXJ5TWV0YWRhdGEoY292YXJpYW50IEluZGV4ZWRMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIGFzc2VydChlbGVtZW50TWFwLmNoZWNrRmFtaWx5KGxpYnJhcnkpKTsKICAgIEtMaWJyYXJ5RGF0YSBsaWJyYXJ5RGF0YSA9IGVsZW1lbnRNYXAubGlicmFyaWVzLmdldERhdGEobGlicmFyeSk7CiAgICByZXR1cm4gbGlicmFyeURhdGEuZ2V0TWV0YWRhdGEoZWxlbWVudE1hcCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxJbXBvcnRFbnRpdHk+IGdldEltcG9ydHMoY292YXJpYW50IEluZGV4ZWRMaWJyYXJ5IGxpYnJhcnkpIHsKICAgIGFzc2VydChlbGVtZW50TWFwLmNoZWNrRmFtaWx5KGxpYnJhcnkpKTsKICAgIEtMaWJyYXJ5RGF0YSBsaWJyYXJ5RGF0YSA9IGVsZW1lbnRNYXAubGlicmFyaWVzLmdldERhdGEobGlicmFyeSk7CiAgICByZXR1cm4gbGlicmFyeURhdGEuZ2V0SW1wb3J0cyhlbGVtZW50TWFwKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldENsYXNzTWV0YWRhdGEoY292YXJpYW50IEluZGV4ZWRDbGFzcyBjbHMpIHsKICAgIGFzc2VydChlbGVtZW50TWFwLmNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRGF0YSBjbGFzc0RhdGEgPSBlbGVtZW50TWFwLmNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgcmV0dXJuIGNsYXNzRGF0YS5nZXRNZXRhZGF0YShlbGVtZW50TWFwKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldE1lbWJlck1ldGFkYXRhKGNvdmFyaWFudCBJbmRleGVkTWVtYmVyIG1lbWJlciwKICAgICAge2Jvb2wgaW5jbHVkZVBhcmFtZXRlck1ldGFkYXRhOiBmYWxzZX0pIHsKICAgIC8vIFRPRE8ocmVkZW1wdGlvbik6IFN1cHBvcnQgaW5jbHVkZVBhcmFtZXRlck1ldGFkYXRhLgogICAgYXNzZXJ0KGVsZW1lbnRNYXAuY2hlY2tGYW1pbHkobWVtYmVyKSk7CiAgICBLTWVtYmVyRGF0YSBtZW1iZXJEYXRhID0gZWxlbWVudE1hcC5tZW1iZXJzLmdldERhdGEobWVtYmVyKTsKICAgIHJldHVybiBtZW1iZXJEYXRhLmdldE1ldGFkYXRhKGVsZW1lbnRNYXApOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0VudW1DbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIGFzc2VydChlbGVtZW50TWFwLmNoZWNrRmFtaWx5KGNscykpOwogICAgS0NsYXNzRGF0YSBjbGFzc0RhdGEgPSBlbGVtZW50TWFwLmNsYXNzZXMuZ2V0RGF0YShjbHMpOwogICAgcmV0dXJuIGNsYXNzRGF0YS5pc0VudW1DbGFzczsKICB9Cn0KCi8vLyBbQmVoYXZpb3JCdWlsZGVyXSBmb3Iga2VybmVsIGJhc2VkIGVsZW1lbnRzLgpjbGFzcyBLZXJuZWxCZWhhdmlvckJ1aWxkZXIgZXh0ZW5kcyBCZWhhdmlvckJ1aWxkZXIgewogIEBvdmVycmlkZQogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBlbGVtZW50RW52aXJvbm1lbnQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHM7CiAgQG92ZXJyaWRlCiAgZmluYWwgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyOwogIEBvdmVycmlkZQogIGZpbmFsIE5hdGl2ZUJhc2ljRGF0YSBuYXRpdmVCYXNpY0RhdGE7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwoKICBLZXJuZWxCZWhhdmlvckJ1aWxkZXIodGhpcy5lbGVtZW50RW52aXJvbm1lbnQsIHRoaXMuY29tbW9uRWxlbWVudHMsCiAgICAgIHRoaXMubmF0aXZlQmFzaWNEYXRhLCB0aGlzLnJlcG9ydGVyLCB0aGlzLl9vcHRpb25zKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgdHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnMgPT4KICAgICAgX29wdGlvbnMudHJ1c3RKU0ludGVyb3BUeXBlQW5ub3RhdGlvbnM7Cn0KCi8vLyBDb25zdGFudCBlbnZpcm9ubWVudCBtYXBwaW5nIFtDb25zdGFudEV4cHJlc3Npb25dcyB0byBbQ29uc3RhbnRWYWx1ZV1zIHVzaW5nCi8vLyBbX0V2YWx1YXRpb25FbnZpcm9ubWVudF0gZm9yIHRoZSBldmFsdWF0aW9uLgpjbGFzcyBLZXJuZWxDb25zdGFudEVudmlyb25tZW50IGltcGxlbWVudHMgQ29uc3RhbnRFbnZpcm9ubWVudCB7CiAgZmluYWwgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBfZWxlbWVudE1hcDsKICBmaW5hbCBFbnZpcm9ubWVudCBfZW52aXJvbm1lbnQ7CgogIE1hcDxDb25zdGFudEV4cHJlc3Npb24sIENvbnN0YW50VmFsdWU+IF92YWx1ZU1hcCA9CiAgICAgIDxDb25zdGFudEV4cHJlc3Npb24sIENvbnN0YW50VmFsdWU+e307CgogIEtlcm5lbENvbnN0YW50RW52aXJvbm1lbnQodGhpcy5fZWxlbWVudE1hcCwgdGhpcy5fZW52aXJvbm1lbnQpOwoKICBDb25zdGFudFZhbHVlIF9nZXRDb25zdGFudFZhbHVlKAogICAgICBTcGFubmFibGUgc3Bhbm5hYmxlLCBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbiwKICAgICAge2Jvb2wgY29uc3RhbnRSZXF1aXJlZCwgYm9vbCBjaGVja0Nhc3RzOiB0cnVlfSkgewogICAgcmV0dXJuIF92YWx1ZU1hcC5wdXRJZkFic2VudChleHByZXNzaW9uLCAoKSB7CiAgICAgIHJldHVybiBleHByZXNzaW9uLmV2YWx1YXRlKG5ldyBLZXJuZWxFdmFsdWF0aW9uRW52aXJvbm1lbnQoCiAgICAgICAgICBfZWxlbWVudE1hcCwgX2Vudmlyb25tZW50LCBzcGFubmFibGUsCiAgICAgICAgICBjb25zdGFudFJlcXVpcmVkOiBjb25zdGFudFJlcXVpcmVkLCBjaGVja0Nhc3RzOiBjaGVja0Nhc3RzKSk7CiAgICB9KTsKICB9Cn0KCi8vLyBFdmFsdWF0aW9uIGVudmlyb25tZW50IHVzZWQgZm9yIGNvbXB1dGluZyBbQ29uc3RhbnRWYWx1ZV1zIGZvcgovLy8ga2VybmVsIGJhc2VkIFtDb25zdGFudEV4cHJlc3Npb25dcy4KY2xhc3MgS2VybmVsRXZhbHVhdGlvbkVudmlyb25tZW50IGV4dGVuZHMgRXZhbHVhdGlvbkVudmlyb25tZW50QmFzZSB7CiAgZmluYWwgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBfZWxlbWVudE1hcDsKICBmaW5hbCBFbnZpcm9ubWVudCBfZW52aXJvbm1lbnQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgYm9vbCBjaGVja0Nhc3RzOwoKICBLZXJuZWxFdmFsdWF0aW9uRW52aXJvbm1lbnQoCiAgICAgIHRoaXMuX2VsZW1lbnRNYXAsIHRoaXMuX2Vudmlyb25tZW50LCBTcGFubmFibGUgc3Bhbm5hYmxlLAogICAgICB7Ym9vbCBjb25zdGFudFJlcXVpcmVkLCB0aGlzLmNoZWNrQ2FzdHM6IHRydWV9KQogICAgICA6IHN1cGVyKHNwYW5uYWJsZSwgY29uc3RhbnRSZXF1aXJlZDogY29uc3RhbnRSZXF1aXJlZCk7CgogIEBvdmVycmlkZQogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50cyA9PiBfZWxlbWVudE1hcC5jb21tb25FbGVtZW50czsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGVzIGdldCB0eXBlcyA9PiBfZWxlbWVudE1hcC50eXBlczsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgc3Vic3RCeUNvbnRleHQoRGFydFR5cGUgYmFzZSwgSW50ZXJmYWNlVHlwZSB0YXJnZXQpIHsKICAgIHJldHVybiBfZWxlbWVudE1hcC5zdWJzdEJ5Q29udGV4dChiYXNlLCB0YXJnZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRDb25zdHJ1Y3RvciBnZXRDb25zdHJ1Y3RvckNvbnN0YW50KENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yKSB7CiAgICByZXR1cm4gX2VsZW1lbnRNYXAuX2dldENvbnN0cnVjdG9yQ29uc3RhbnQoY29uc3RydWN0b3IpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGdldEZpZWxkQ29uc3RhbnQoRmllbGRFbnRpdHkgZmllbGQpIHsKICAgIHJldHVybiBfZWxlbWVudE1hcC5fZ2V0RmllbGRDb25zdGFudEV4cHJlc3Npb24oZmllbGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGdldExvY2FsQ29uc3RhbnQoTG9jYWwgbG9jYWwpIHsKICAgIHRocm93IG5ldyBVbmltcGxlbWVudGVkRXJyb3IoIl9FdmFsdWF0aW9uRW52aXJvbm1lbnQuZ2V0TG9jYWxDb25zdGFudCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHJlYWRGcm9tRW52aXJvbm1lbnQoU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBfZW52aXJvbm1lbnQudmFsdWVPZihuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIERpYWdub3N0aWNSZXBvcnRlciBnZXQgcmVwb3J0ZXIgPT4gX2VsZW1lbnRNYXAucmVwb3J0ZXI7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGVuYWJsZUFzc2VydGlvbnMgPT4gX2VsZW1lbnRNYXAub3B0aW9ucy5lbmFibGVVc2VyQXNzZXJ0aW9uczsKfQoKY2xhc3MgS2VybmVsTmF0aXZlTWVtYmVyUmVzb2x2ZXIgaW1wbGVtZW50cyBOYXRpdmVNZW1iZXJSZXNvbHZlciB7CiAgc3RhdGljIGZpbmFsIFJlZ0V4cCBfaWRlbnRpZmllciA9IG5ldyBSZWdFeHAocideW2EtekEtWl8kXVthLXpBLVowLTlfJF0qJCcpOwoKICBmaW5hbCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIF9lbGVtZW50TWFwOwogIGZpbmFsIE5hdGl2ZUJhc2ljRGF0YSBfbmF0aXZlQmFzaWNEYXRhOwogIGZpbmFsIE5hdGl2ZURhdGFCdWlsZGVyIF9uYXRpdmVEYXRhQnVpbGRlcjsKCiAgS2VybmVsTmF0aXZlTWVtYmVyUmVzb2x2ZXIoCiAgICAgIHRoaXMuX2VsZW1lbnRNYXAsIHRoaXMuX25hdGl2ZUJhc2ljRGF0YSwgdGhpcy5fbmF0aXZlRGF0YUJ1aWxkZXIpOwoKICBLRWxlbWVudEVudmlyb25tZW50IGdldCBfZWxlbWVudEVudmlyb25tZW50ID0+IF9lbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudDsKCiAgQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50cyA9PiBfZWxlbWVudE1hcC5jb21tb25FbGVtZW50czsKCiAgQG92ZXJyaWRlCiAgdm9pZCByZXNvbHZlTmF0aXZlTWVtYmVyKGlyLk1lbWJlciBub2RlLCBJckFubm90YXRpb25EYXRhIGFubm90YXRpb25EYXRhKSB7CiAgICBib29sIGlzSnNJbnRlcm9wID0gX2lzSnNJbnRlcm9wTWVtYmVyKG5vZGUpOwogICAgaWYgKG5vZGUgaXMgaXIuUHJvY2VkdXJlIHx8IG5vZGUgaXMgaXIuQ29uc3RydWN0b3IpIHsKICAgICAgRnVuY3Rpb25FbnRpdHkgbWV0aG9kID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpOwogICAgICBib29sIGlzTmF0aXZlID0gX3Byb2Nlc3NNZXRob2RBbm5vdGF0aW9ucyhub2RlLCBhbm5vdGF0aW9uRGF0YSk7CiAgICAgIGlmIChpc05hdGl2ZSB8fCBpc0pzSW50ZXJvcCkgewogICAgICAgIE5hdGl2ZUJlaGF2aW9yIGJlaGF2aW9yID0gX2NvbXB1dGVOYXRpdmVNZXRob2RCZWhhdmlvcigKICAgICAgICAgICAgbWV0aG9kLCBhbm5vdGF0aW9uRGF0YSwKICAgICAgICAgICAgaXNKc0ludGVyb3A6IGlzSnNJbnRlcm9wKTsKICAgICAgICBfbmF0aXZlRGF0YUJ1aWxkZXIuc2V0TmF0aXZlTWV0aG9kQmVoYXZpb3IobWV0aG9kLCBiZWhhdmlvcik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5GaWVsZCkgewogICAgICBGaWVsZEVudGl0eSBmaWVsZCA9IF9lbGVtZW50TWFwLmdldE1lbWJlcihub2RlKTsKICAgICAgYm9vbCBpc05hdGl2ZSA9IF9wcm9jZXNzRmllbGRBbm5vdGF0aW9ucyhub2RlLCBhbm5vdGF0aW9uRGF0YSk7CiAgICAgIGlmIChpc05hdGl2ZSB8fCBpc0pzSW50ZXJvcCkgewogICAgICAgIE5hdGl2ZUJlaGF2aW9yIGZpZWxkTG9hZEJlaGF2aW9yID0gX2NvbXB1dGVOYXRpdmVGaWVsZExvYWRCZWhhdmlvcigKICAgICAgICAgICAgZmllbGQsIGFubm90YXRpb25EYXRhLAogICAgICAgICAgICBpc0pzSW50ZXJvcDogaXNKc0ludGVyb3ApOwogICAgICAgIE5hdGl2ZUJlaGF2aW9yIGZpZWxkU3RvcmVCZWhhdmlvciA9CiAgICAgICAgICAgIF9jb21wdXRlTmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yKGZpZWxkKTsKICAgICAgICBfbmF0aXZlRGF0YUJ1aWxkZXIuc2V0TmF0aXZlRmllbGRMb2FkQmVoYXZpb3IoZmllbGQsIGZpZWxkTG9hZEJlaGF2aW9yKTsKICAgICAgICBfbmF0aXZlRGF0YUJ1aWxkZXIuc2V0TmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yKAogICAgICAgICAgICBmaWVsZCwgZmllbGRTdG9yZUJlaGF2aW9yKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIFByb2Nlc3MgdGhlIHBvdGVudGlhbGx5IG5hdGl2ZSBbZmllbGRdLiBBZGRzIGluZm9ybWF0aW9uIGZyb20gbWV0YWRhdGEKICAvLy8gYXR0cmlidXRlcy4gUmV0dXJucyBgdHJ1ZWAgb2YgW21ldGhvZF0gaXMgbmF0aXZlLgogIGJvb2wgX3Byb2Nlc3NGaWVsZEFubm90YXRpb25zKAogICAgICBpci5GaWVsZCBub2RlLCBJckFubm90YXRpb25EYXRhIGFubm90YXRpb25EYXRhKSB7CiAgICBpZiAobm9kZS5pc0luc3RhbmNlTWVtYmVyICYmCiAgICAgICAgX25hdGl2ZUJhc2ljRGF0YQogICAgICAgICAgICAuaXNOYXRpdmVDbGFzcyhfZWxlbWVudE1hcC5nZXRDbGFzcyhub2RlLmVuY2xvc2luZ0NsYXNzKSkpIHsKICAgICAgLy8gRXhjbHVkZSBub24taW5zdGFuY2UgKHN0YXRpYykgZmllbGRzIC0gdGhleSBhcmUgbm90IHJlYWxseSBuYXRpdmUgYW5kCiAgICAgIC8vIGFyZSBjb21waWxlZCBhcyBpc29sYXRlIGdsb2JhbHMuICBBY2Nlc3Mgb2YgYSBwcm9wZXJ0eSBvZiBhIGNvbnN0cnVjdG9yCiAgICAgIC8vIGZ1bmN0aW9uIG9yIGEgbm9uLW1ldGhvZCBwcm9wZXJ0eSBpbiB0aGUgcHJvdG90eXBlIGNoYWluLCBtdXN0IGJlIGNvZGVkCiAgICAgIC8vIHVzaW5nIGEgSlMtY2FsbC4KICAgICAgX3NldE5hdGl2ZU5hbWUobm9kZSwgYW5ub3RhdGlvbkRhdGEpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIFN0cmluZyBuYW1lID0gX2ZpbmRKc05hbWVGcm9tQW5ub3RhdGlvbihub2RlLCBhbm5vdGF0aW9uRGF0YSk7CiAgICAgIGlmIChuYW1lICE9IG51bGwpIHsKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobm9kZSksCiAgICAgICAgICAgICdASlNOYW1lKC4uLikgYW5ub3RhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGZvciBzdGF0aWMgZmllbGRzOiAnCiAgICAgICAgICAgICckbm9kZS4nKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8vIFByb2Nlc3MgdGhlIHBvdGVudGlhbGx5IG5hdGl2ZSBbbWV0aG9kXS4gQWRkcyBpbmZvcm1hdGlvbiBmcm9tIG1ldGFkYXRhCiAgLy8vIGF0dHJpYnV0ZXMuIFJldHVybnMgYHRydWVgIG9mIFttZXRob2RdIGlzIG5hdGl2ZS4KICBib29sIF9wcm9jZXNzTWV0aG9kQW5ub3RhdGlvbnMoCiAgICAgIGlyLk1lbWJlciBub2RlLCBJckFubm90YXRpb25EYXRhIGFubm90YXRpb25EYXRhKSB7CiAgICBpZiAoX2lzTmF0aXZlTWV0aG9kKG5vZGUsIGFubm90YXRpb25EYXRhKSkgewogICAgICBpZiAobm9kZS5lbmNsb3NpbmdDbGFzcyAhPSBudWxsICYmICFub2RlLmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgICBpZiAoIV9uYXRpdmVCYXNpY0RhdGEKICAgICAgICAgICAgLmlzTmF0aXZlQ2xhc3MoX2VsZW1lbnRNYXAuZ2V0Q2xhc3Mobm9kZS5lbmNsb3NpbmdDbGFzcykpKSB7CiAgICAgICAgICBfZWxlbWVudE1hcC5yZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobm9kZSksCiAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuTkFUSVZFX05PTl9JTlNUQU5DRV9JTl9OT05fTkFUSVZFX0NMQVNTKTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgX3NldE5hdGl2ZU5hbWVGb3JTdGF0aWNNZXRob2Qobm9kZSwgYW5ub3RhdGlvbkRhdGEpOwogICAgICB9IGVsc2UgewogICAgICAgIF9zZXROYXRpdmVOYW1lKG5vZGUsIGFubm90YXRpb25EYXRhKTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vLyBTZXRzIHRoZSBuYXRpdmUgbmFtZSBvZiBbZWxlbWVudF0sIGVpdGhlciBmcm9tIGFuIGFubm90YXRpb24sIG9yCiAgLy8vIGRlZmF1bHRpbmcgdG8gdGhlIERhcnQgbmFtZS4KICB2b2lkIF9zZXROYXRpdmVOYW1lKGlyLk1lbWJlciBub2RlLCBJckFubm90YXRpb25EYXRhIGFubm90YXRpb25EYXRhKSB7CiAgICBTdHJpbmcgbmFtZSA9IF9maW5kSnNOYW1lRnJvbUFubm90YXRpb24obm9kZSwgYW5ub3RhdGlvbkRhdGEpOwogICAgbmFtZSA/Pz0gbm9kZS5uYW1lLm5hbWU7CiAgICBfbmF0aXZlRGF0YUJ1aWxkZXIuc2V0TmF0aXZlTWVtYmVyTmFtZShfZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSksIG5hbWUpOwogIH0KCiAgLy8vIFNldHMgdGhlIG5hdGl2ZSBuYW1lIG9mIHRoZSBzdGF0aWMgbmF0aXZlIG1ldGhvZCBbZWxlbWVudF0sIHVzaW5nIHRoZQogIC8vLyBmb2xsb3dpbmcgcnVsZXM6CiAgLy8vIDEuIElmIFtlbGVtZW50XSBoYXMgYSBASlNOYW1lIGFubm90YXRpb24gdGhhdCBpcyBhbiBpZGVudGlmaWVyLCBxdWFsaWZ5CiAgLy8vICAgIHRoYXQgaWRlbnRpZmllciB0byB0aGUgQE5hdGl2ZSBuYW1lIG9mIHRoZSBlbmNsb3NpbmcgY2xhc3MKICAvLy8gMi4gSWYgW2VsZW1lbnRdIGhhcyBhIEBKU05hbWUgYW5ub3RhdGlvbiB0aGF0IGlzIG5vdCBhbiBpZGVudGlmaWVyLAogIC8vLyAgICB1c2UgdGhlIGRlY2xhcmVkIEBKU05hbWUgYXMgdGhlIGV4cHJlc3Npb24KICAvLy8gMy4gSWYgW2VsZW1lbnRdIGRvZXMgbm90IGhhdmUgYSBASlNOYW1lIGFubm90YXRpb24sIHF1YWxpZnkgdGhlIG5hbWUgb2YKICAvLy8gICAgdGhlIG1ldGhvZCB3aXRoIHRoZSBATmF0aXZlIG5hbWUgb2YgdGhlIGVuY2xvc2luZyBjbGFzcy4KICB2b2lkIF9zZXROYXRpdmVOYW1lRm9yU3RhdGljTWV0aG9kKAogICAgICBpci5NZW1iZXIgbm9kZSwgSXJBbm5vdGF0aW9uRGF0YSBhbm5vdGF0aW9uRGF0YSkgewogICAgU3RyaW5nIG5hbWUgPSBfZmluZEpzTmFtZUZyb21Bbm5vdGF0aW9uKG5vZGUsIGFubm90YXRpb25EYXRhKTsKICAgIG5hbWUgPz89IG5vZGUubmFtZS5uYW1lOwogICAgaWYgKF9pc0lkZW50aWZpZXIobmFtZSkpIHsKICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gX2VsZW1lbnRNYXAuZ2V0Q2xhc3Mobm9kZS5lbmNsb3NpbmdDbGFzcyk7CiAgICAgIExpc3Q8U3RyaW5nPiBuYXRpdmVOYW1lcyA9IF9uYXRpdmVCYXNpY0RhdGEuZ2V0TmF0aXZlVGFnc09mQ2xhc3MoY2xzKTsKICAgICAgaWYgKG5hdGl2ZU5hbWVzLmxlbmd0aCAhPSAxKSB7CiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG5vZGUpLAogICAgICAgICAgICAnVW5hYmxlIHRvIGRldGVybWluZSBhIG5hdGl2ZSBuYW1lIGZvciB0aGUgZW5jbG9zaW5nIGNsYXNzLCAnCiAgICAgICAgICAgICdvcHRpb25zOiAkbmF0aXZlTmFtZXMnKTsKICAgICAgfQogICAgICBfbmF0aXZlRGF0YUJ1aWxkZXIuc2V0TmF0aXZlTWVtYmVyTmFtZSgKICAgICAgICAgIF9lbGVtZW50TWFwLmdldE1lbWJlcihub2RlKSwgJyR7bmF0aXZlTmFtZXNbMF19LiRuYW1lJyk7CiAgICB9IGVsc2UgewogICAgICBfbmF0aXZlRGF0YUJ1aWxkZXIuc2V0TmF0aXZlTWVtYmVyTmFtZShfZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSksIG5hbWUpOwogICAgfQogIH0KCiAgYm9vbCBfaXNJZGVudGlmaWVyKFN0cmluZyBzKSA9PiBfaWRlbnRpZmllci5oYXNNYXRjaChzKTsKCiAgLy8vIFJldHVybnMgdGhlIEpTTmFtZSBhbm5vdGF0aW9uIHN0cmluZyBvciBgbnVsbGAgaWYgbm8gSlNOYW1lIGFubm90YXRpb24gaXMKICAvLy8gcHJlc2VudC4KICBTdHJpbmcgX2ZpbmRKc05hbWVGcm9tQW5ub3RhdGlvbigKICAgICAgaXIuTWVtYmVyIG5vZGUsIElyQW5ub3RhdGlvbkRhdGEgYW5ub3RhdGlvbkRhdGEpIHsKICAgIFN0cmluZyBqc05hbWU7CiAgICBpZiAoYW5ub3RhdGlvbkRhdGEgIT0gbnVsbCkgewogICAgICBqc05hbWUgPSBhbm5vdGF0aW9uRGF0YS5nZXROYXRpdmVNZW1iZXJOYW1lKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgU291cmNlU3BhbiBzb3VyY2VTcGFuID0gY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobm9kZSk7CiAgICAgIGZvciAoQ29uc3RhbnRWYWx1ZSB2YWx1ZSBpbiBfZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgICAuZ2V0TWVtYmVyTWV0YWRhdGEoX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpKSkgewogICAgICAgIFN0cmluZyBuYW1lID0gcmVhZEFubm90YXRpb25OYW1lKAogICAgICAgICAgICBzb3VyY2VTcGFuLCB2YWx1ZSwgX2NvbW1vbkVsZW1lbnRzLmFubm90YXRpb25KU05hbWVDbGFzcyk7CiAgICAgICAgaWYgKGpzTmFtZSA9PSBudWxsKSB7CiAgICAgICAgICBqc05hbWUgPSBuYW1lOwogICAgICAgIH0gZWxzZSBpZiAobmFtZSAhPSBudWxsKSB7CiAgICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgICBzb3VyY2VTcGFuLCAnVG9vIG1hbnkgSlNOYW1lIGFubm90YXRpb25zOiAke3ZhbHVlLnRvRGFydFRleHQoKX0nKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBqc05hbWU7CiAgfQoKICBOYXRpdmVCZWhhdmlvciBfY29tcHV0ZU5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvcihjb3ZhcmlhbnQgS0ZpZWxkIGZpZWxkKSB7CiAgICBpci5GaWVsZCBub2RlID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyTm9kZShmaWVsZCk7CiAgICByZXR1cm4gX2VsZW1lbnRNYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JGaWVsZFN0b3JlKG5vZGUpOwogIH0KCiAgTmF0aXZlQmVoYXZpb3IgX2NvbXB1dGVOYXRpdmVGaWVsZExvYWRCZWhhdmlvcigKICAgICAgS0ZpZWxkIGZpZWxkLCBJckFubm90YXRpb25EYXRhIGFubm90YXRpb25EYXRhLAogICAgICB7Ym9vbCBpc0pzSW50ZXJvcH0pIHsKICAgIGlyLkZpZWxkIG5vZGUgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXJOb2RlKGZpZWxkKTsKICAgIEl0ZXJhYmxlPFN0cmluZz4gY3JlYXRlc0Fubm90YXRpb25zOwogICAgSXRlcmFibGU8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnM7CiAgICBpZiAoYW5ub3RhdGlvbkRhdGEgIT0gbnVsbCkgewogICAgICBjcmVhdGVzQW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uRGF0YS5nZXRDcmVhdGVzQW5ub3RhdGlvbnMobm9kZSk7CiAgICAgIHJldHVybnNBbm5vdGF0aW9ucyA9IGFubm90YXRpb25EYXRhLmdldFJldHVybnNBbm5vdGF0aW9ucyhub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gbWV0YWRhdGEgPQogICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRNZW1iZXJNZXRhZGF0YShmaWVsZCk7CiAgICAgIGNyZWF0ZXNBbm5vdGF0aW9ucyA9IGdldENyZWF0ZXNBbm5vdGF0aW9ucygKICAgICAgICAgIF9lbGVtZW50TWFwLnJlcG9ydGVyLCBfZWxlbWVudE1hcC5jb21tb25FbGVtZW50cywgbWV0YWRhdGEpOwogICAgICByZXR1cm5zQW5ub3RhdGlvbnMgPSBnZXRSZXR1cm5zQW5ub3RhdGlvbnMoCiAgICAgICAgICBfZWxlbWVudE1hcC5yZXBvcnRlciwgX2VsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMsIG1ldGFkYXRhKTsKICAgIH0KICAgIHJldHVybiBfZWxlbWVudE1hcC5nZXROYXRpdmVCZWhhdmlvckZvckZpZWxkTG9hZCgKICAgICAgICBub2RlLCBjcmVhdGVzQW5ub3RhdGlvbnMsIHJldHVybnNBbm5vdGF0aW9ucywKICAgICAgICBpc0pzSW50ZXJvcDogaXNKc0ludGVyb3ApOwogIH0KCiAgTmF0aXZlQmVoYXZpb3IgX2NvbXB1dGVOYXRpdmVNZXRob2RCZWhhdmlvcigKICAgICAgS0Z1bmN0aW9uIGZ1bmN0aW9uLCBJckFubm90YXRpb25EYXRhIGFubm90YXRpb25EYXRhLAogICAgICB7Ym9vbCBpc0pzSW50ZXJvcH0pIHsKICAgIGlyLk1lbWJlciBub2RlID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyTm9kZShmdW5jdGlvbik7CiAgICBJdGVyYWJsZTxTdHJpbmc+IGNyZWF0ZXNBbm5vdGF0aW9uczsKICAgIEl0ZXJhYmxlPFN0cmluZz4gcmV0dXJuc0Fubm90YXRpb25zOwogICAgaWYgKGFubm90YXRpb25EYXRhICE9IG51bGwpIHsKICAgICAgY3JlYXRlc0Fubm90YXRpb25zID0gYW5ub3RhdGlvbkRhdGEuZ2V0Q3JlYXRlc0Fubm90YXRpb25zKG5vZGUpOwogICAgICByZXR1cm5zQW5ub3RhdGlvbnMgPSBhbm5vdGF0aW9uRGF0YS5nZXRSZXR1cm5zQW5ub3RhdGlvbnMobm9kZSk7CiAgICB9IGVsc2UgewogICAgICBMaXN0PENvbnN0YW50VmFsdWU+IG1ldGFkYXRhID0KICAgICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0TWVtYmVyTWV0YWRhdGEoZnVuY3Rpb24pOwogICAgICBjcmVhdGVzQW5ub3RhdGlvbnMgPSBnZXRDcmVhdGVzQW5ub3RhdGlvbnMoCiAgICAgICAgICBfZWxlbWVudE1hcC5yZXBvcnRlciwgX2VsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMsIG1ldGFkYXRhKTsKICAgICAgcmV0dXJuc0Fubm90YXRpb25zID0gZ2V0UmV0dXJuc0Fubm90YXRpb25zKAogICAgICAgICAgX2VsZW1lbnRNYXAucmVwb3J0ZXIsIF9lbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLCBtZXRhZGF0YSk7CiAgICB9CiAgICByZXR1cm4gX2VsZW1lbnRNYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JNZXRob2QoCiAgICAgICAgbm9kZSwgY3JlYXRlc0Fubm90YXRpb25zLCByZXR1cm5zQW5ub3RhdGlvbnMsCiAgICAgICAgaXNKc0ludGVyb3A6IGlzSnNJbnRlcm9wKTsKICB9CgogIGJvb2wgX2lzTmF0aXZlTWV0aG9kKGlyLk1lbWJlciBub2RlLCBJckFubm90YXRpb25EYXRhIGFubm90YXRpb25EYXRhKSB7CiAgICBpZiAoIW1heWJlRW5hYmxlTmF0aXZlKG5vZGUuZW5jbG9zaW5nTGlicmFyeS5pbXBvcnRVcmkpKSByZXR1cm4gZmFsc2U7CiAgICBib29sIGhhc05hdGl2ZUJvZHk7CiAgICBpZiAoYW5ub3RhdGlvbkRhdGEgIT0gbnVsbCkgewogICAgICBoYXNOYXRpdmVCb2R5ID0gYW5ub3RhdGlvbkRhdGEuaGFzTmF0aXZlQm9keShub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIGhhc05hdGl2ZUJvZHkgPSBub2RlLmFubm90YXRpb25zLmFueSgoaXIuRXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb24gaXMgaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uICYmCiAgICAgICAgICAgIF9lbGVtZW50TWFwLmdldEludGVyZmFjZVR5cGUoZXhwcmVzc2lvbi5jb25zdHJ1Y3RlZFR5cGUpID09CiAgICAgICAgICAgICAgICBfY29tbW9uRWxlbWVudHMuZXh0ZXJuYWxOYW1lVHlwZTsKICAgICAgfSk7CiAgICB9CiAgICBpZiAoIWhhc05hdGl2ZUJvZHkgJiYKICAgICAgICBub2RlLmlzRXh0ZXJuYWwgJiYKICAgICAgICAhX25hdGl2ZUJhc2ljRGF0YS5pc0pzSW50ZXJvcE1lbWJlcihfZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSkpKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFNob3VsZCB3ZSBjaGFuZ2UgZGFydDpodG1sIGFuZCBmcmllbmRzIHRvIHVzZQogICAgICAvLyAgYGV4dGVybmFsYCBpbnN0ZWFkIG9mIHRoZSBuYXRpdmUgYm9keSBzeW50YXg/CiAgICAgIF9lbGVtZW50TWFwLnJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKG5vZGUpLCBNZXNzYWdlS2luZC5OT05fTkFUSVZFX0VYVEVSTkFMKTsKICAgIH0KICAgIHJldHVybiBoYXNOYXRpdmVCb2R5OwogIH0KCiAgYm9vbCBfaXNKc0ludGVyb3BNZW1iZXIoaXIuTWVtYmVyIG5vZGUpIHsKICAgIHJldHVybiBfbmF0aXZlQmFzaWNEYXRhLmlzSnNJbnRlcm9wTWVtYmVyKF9lbGVtZW50TWFwLmdldE1lbWJlcihub2RlKSk7CiAgfQp9CgpjbGFzcyBLZXJuZWxDbGFzc1F1ZXJpZXMgZXh0ZW5kcyBDbGFzc1F1ZXJpZXMgewogIGZpbmFsIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcDsKCiAgS2VybmVsQ2xhc3NRdWVyaWVzKHRoaXMuZWxlbWVudE1hcCk7CgogIEBvdmVycmlkZQogIENsYXNzRW50aXR5IGdldERlY2xhcmF0aW9uKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGNsczsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEludGVyZmFjZVR5cGU+IGdldFN1cGVydHlwZXMoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5nZXRPcmRlcmVkVHlwZVNldChjbHMpLnN1cGVydHlwZXM7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXRTdXBlckNsYXNzKENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0U3VwZXJUeXBlKGNscyk/LmVsZW1lbnQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGltcGxlbWVudHNGdW5jdGlvbihDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLl9pbXBsZW1lbnRzRnVuY3Rpb24oY2xzKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXRIaWVyYXJjaHlEZXB0aChDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldEhpZXJhcmNoeURlcHRoKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc0VudGl0eSBnZXRBcHBsaWVkTWl4aW4oQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5nZXRBcHBsaWVkTWl4aW4oY2xzKTsKICB9Cn0KCkRpYWdub3N0aWNNZXNzYWdlIF9jcmVhdGVEaWFnbm9zdGljTWVzc2FnZSgKICAgIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwgaXIuTG9jYXRlZE1lc3NhZ2UgbWVzc2FnZSkgewogIFNvdXJjZVNwYW4gc291cmNlU3BhbiA9IG5ldyBTb3VyY2VTcGFuKAogICAgICBtZXNzYWdlLnVyaSwgbWVzc2FnZS5jaGFyT2Zmc2V0LCBtZXNzYWdlLmNoYXJPZmZzZXQgKyBtZXNzYWdlLmxlbmd0aCk7CiAgcmV0dXJuIHJlcG9ydGVyLmNyZWF0ZU1lc3NhZ2UoCiAgICAgIHNvdXJjZVNwYW4sIE1lc3NhZ2VLaW5kLkdFTkVSSUMsIHsndGV4dCc6IG1lc3NhZ2UubWVzc2FnZX0pOwp9Cgp2b2lkIHJlcG9ydExvY2F0ZWRNZXNzYWdlKERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlciwKICAgIGlyLkxvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UsIExpc3Q8aXIuTG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQpIHsKICBEaWFnbm9zdGljTWVzc2FnZSBkaWFnbm9zdGljTWVzc2FnZSA9CiAgICAgIF9jcmVh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ZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIFRPRE8oam9obm5pd2ludGhlcik6IE1ha2UgdGhpcyBhIHNlcGFyYXRlIGxpYnJhcnkuCnBhcnQgb2YgZGFydDJqcy5rZXJuZWwuZWxlbWVudF9tYXA7CgpjbGFzcyBLZXJuZWxBbm5vdGF0aW9uUHJvY2Vzc29yIGltcGxlbWVudHMgQW5ub3RhdGlvblByb2Nlc3NvciB7CiAgZmluYWwgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwOwogIGZpbmFsIE5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIgX25hdGl2ZUJhc2ljRGF0YUJ1aWxkZXI7CiAgZmluYWwgSXJBbm5vdGF0aW9uRGF0YSBhbm5vdGF0aW9uRGF0YTsKCiAgS2VybmVsQW5ub3RhdGlvblByb2Nlc3NvcigKICAgICAgdGhpcy5lbGVtZW50TWFwLCB0aGlzLl9uYXRpdmVCYXNpY0RhdGFCdWlsZGVyLCB0aGlzLmFubm90YXRpb25EYXRhKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBleHRyYWN0TmF0aXZlQW5ub3RhdGlvbnMoTGlicmFyeUVudGl0eSBsaWJyYXJ5KSB7CiAgICBLRWxlbWVudEVudmlyb25tZW50IGVsZW1lbnRFbnZpcm9ubWVudCA9IGVsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50OwogICAgS0NvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzID0gZWxlbWVudE1hcC5jb21tb25FbGVtZW50czsKCiAgICBlbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENsYXNzKGxpYnJhcnksIChDbGFzc0VudGl0eSBjbHMpIHsKICAgICAgaXIuQ2xhc3Mgbm9kZSA9IGVsZW1lbnRNYXAuZ2V0Q2xhc3NOb2RlKGNscyk7CiAgICAgIFN0cmluZyBhbm5vdGF0aW9uTmFtZTsKICAgICAgaWYgKGFubm90YXRpb25EYXRhICE9IG51bGwpIHsKICAgICAgICBhbm5vdGF0aW9uTmFtZSA9IGFubm90YXRpb25EYXRhLmdldE5hdGl2ZUNsYXNzTmFtZShub2RlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyBicmFuY2ggd2hlbiB3ZSB1c2UgY29uc3RhbnRzIGZyb20KICAgICAgICAvLyBDRkUuCiAgICAgICAgZm9yIChDb25zdGFudFZhbHVlIHZhbHVlIGluIGVsZW1lbnRFbnZpcm9ubWVudC5nZXRDbGFzc01ldGFkYXRhKGNscykpIHsKICAgICAgICAgIFN0cmluZyBuYW1lID0gcmVhZEFubm90YXRpb25OYW1lKAogICAgICAgICAgICAgIGNscywgdmFsdWUsIGNvbW1vbkVsZW1lbnRzLm5hdGl2ZUFubm90YXRpb25DbGFzcyk7CiAgICAgICAgICBpZiAoYW5ub3RhdGlvbk5hbWUgPT0gbnVsbCkgewogICAgICAgICAgICBhbm5vdGF0aW9uTmFtZSA9IG5hbWU7CiAgICAgICAgICB9IGVsc2UgaWYgKG5hbWUgIT0gbnVsbCkgewogICAgICAgICAgICBmYWlsZWRBdChjbHMsICdUb28gbWFueSBuYW1lIGFubm90YXRpb25zLicpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoYW5ub3RhdGlvbk5hbWUgIT0gbnVsbCkgewogICAgICAgIF9uYXRpdmVCYXNpY0RhdGFCdWlsZGVyLnNldE5hdGl2ZUNsYXNzVGFnSW5mbyhjbHMsIGFubm90YXRpb25OYW1lKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBTdHJpbmcgZ2V0SnNJbnRlcm9wTmFtZSgKICAgICAgU3Bhbm5hYmxlIHNwYW5uYWJsZSwgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gbWV0YWRhdGEpIHsKICAgIEtDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cyA9IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7CiAgICBTdHJpbmcgYW5ub3RhdGlvbk5hbWU7CiAgICBmb3IgKENvbnN0YW50VmFsdWUgdmFsdWUgaW4gbWV0YWRhdGEpIHsKICAgICAgU3RyaW5nIG5hbWUgPSByZWFkQW5ub3RhdGlvbk5hbWUoCiAgICAgICAgICBzcGFubmFibGUsIHZhbHVlLCBjb21tb25FbGVtZW50cy5qc0Fubm90YXRpb25DbGFzcywKICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJycpOwogICAgICBpZiAoYW5ub3RhdGlvbk5hbWUgPT0gbnVsbCkgewogICAgICAgIGFubm90YXRpb25OYW1lID0gbmFtZTsKICAgICAgfSBlbHNlIGlmIChuYW1lICE9IG51bGwpIHsKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGlzIHNob3VsZCBiZSBhbiBlcnJvciwgbm90IGEgY3Jhc2guCiAgICAgICAgZmFpbGVkQXQoc3Bhbm5hYmxlLCAnVG9vIG1hbnkgbmFtZSBhbm5vdGF0aW9ucy4nKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGFubm90YXRpb25OYW1lOwogIH0KCiAgdm9pZCBjaGVja0Z1bmN0aW9uUGFyYW1ldGVycyhGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgaWYgKGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZS5uYW1lZFBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICBlbGVtZW50TWFwLnJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIGZ1bmN0aW9uLAogICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9NRVRIT0RfV0lUSF9OQU1FRF9BUkdVTUVOVFMsCiAgICAgICAgICB7J21ldGhvZCc6IGZ1bmN0aW9uLm5hbWV9KTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZXh0cmFjdEpzSW50ZXJvcEFubm90YXRpb25zKExpYnJhcnlFbnRpdHkgbGlicmFyeSkgewogICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyID0gZWxlbWVudE1hcC5yZXBvcnRlcjsKICAgIEtFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50ID0gZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQ7CiAgICBLQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMgPSBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICAgIGlyLkxpYnJhcnkgbGlicmFyeU5vZGUgPSBlbGVtZW50TWFwLmdldExpYnJhcnlOb2RlKGxpYnJhcnkpOwogICAgU3RyaW5nIGxpYnJhcnlOYW1lOwogICAgaWYgKGFubm90YXRpb25EYXRhICE9IG51bGwpIHsKICAgICAgbGlicmFyeU5hbWUgPSBhbm5vdGF0aW9uRGF0YS5nZXRKc0ludGVyb3BMaWJyYXJ5TmFtZShsaWJyYXJ5Tm9kZSk7CiAgICB9IGVsc2UgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuIHdlIHVzZSBjb25zdGFudHMgZnJvbSBDRkUuCiAgICAgIGxpYnJhcnlOYW1lID0gZ2V0SnNJbnRlcm9wTmFtZSgKICAgICAgICAgIGxpYnJhcnksIGVsZW1lbnRFbnZpcm9ubWVudC5nZXRMaWJyYXJ5TWV0YWRhdGEobGlicmFyeSkpOwogICAgfQogICAgZmluYWwgYm9vbCBpc0V4cGxpY2l0bHlseUpzTGlicmFyeSA9IGxpYnJhcnlOYW1lICE9IG51bGw7CiAgICBib29sIGlzSnNMaWJyYXJ5ID0gaXNFeHBsaWNpdGx5bHlKc0xpYnJhcnk7CgogICAgZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hMaWJyYXJ5TWVtYmVyKGxpYnJhcnksIChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIGlyLk1lbWJlciBtZW1iZXJOb2RlID0gZWxlbWVudE1hcC5nZXRNZW1iZXJOb2RlKG1lbWJlcik7CiAgICAgIFN0cmluZyBtZW1iZXJOYW1lOwogICAgICBpZiAoYW5ub3RhdGlvbkRhdGEgIT0gbnVsbCkgewogICAgICAgIG1lbWJlck5hbWUgPSBhbm5vdGF0aW9uRGF0YS5nZXRKc0ludGVyb3BNZW1iZXJOYW1lKG1lbWJlck5vZGUpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gd2UgdXNlIGNvbnN0YW50cyBmcm9tIENGRS4KICAgICAgICBtZW1iZXJOYW1lID0gZ2V0SnNJbnRlcm9wTmFtZSgKICAgICAgICAgICAgbGlicmFyeSwgZWxlbWVudEVudmlyb25tZW50LmdldE1lbWJlck1ldGFkYXRhKG1lbWJlcikpOwogICAgICB9CiAgICAgIGlmIChtZW1iZXIuaXNGaWVsZCkgewogICAgICAgIGlmIChtZW1iZXJOYW1lICE9IG51bGwpIHsKICAgICAgICAgIC8vIFRPRE8oMzQxNzQpOiBEaXNhbGxvdyBqcy1pbnRlcm9wIGZpZWxkcy4KICAgICAgICAgIC8qcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgIG1lbWJlciwgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9GSUVMRF9OT1RfU1VQUE9SVEVEKTsqLwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiA9IG1lbWJlcjsKICAgICAgICBpZiAoZnVuY3Rpb24uaXNFeHRlcm5hbCAmJiBpc0V4cGxpY2l0bHlseUpzTGlicmFyeSkgewogICAgICAgICAgLy8gRXh0ZXJuYWwgbWVtYmVycyBvZiBleHBsaWNpdCBqcy1pbnRlcm9wIGxpYnJhcnkgYXJlIGltcGxpY2l0bHkKICAgICAgICAgIC8vIGpzLWludGVyb3AgbWVtYmVycy4KICAgICAgICAgIG1lbWJlck5hbWUgPz89IGZ1bmN0aW9uLm5hbWU7CiAgICAgICAgfQogICAgICAgIGlmIChtZW1iZXJOYW1lICE9IG51bGwpIHsKICAgICAgICAgIGlmICghZnVuY3Rpb24uaXNFeHRlcm5hbCkgewogICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBEaXNhbGxvdyBub24tZXh0ZXJuYWwganMtaW50ZXJvcCBtZW1iZXJzLgogICAgICAgICAgICAvKnJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCBNZXNzYWdlS2luZC5KU19JTlRFUk9QX05PTl9FWFRFUk5BTF9NRU1CRVIpOyovCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfbmF0aXZlQmFzaWNEYXRhQnVpbGRlci5tYXJrQXNKc0ludGVyb3BNZW1iZXIoZnVuY3Rpb24sIG1lbWJlck5hbWUpOwogICAgICAgICAgICBjaGVja0Z1bmN0aW9uUGFyYW1ldGVycyhmdW5jdGlvbik7CiAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEl0IGlzIHVuY2xlYXIgd2hldGhlciBsaWJyYXJ5IGNhbiBiZQogICAgICAgICAgICAvLyBpbXBsaWNpdGx5IGpzLWludGVyb3AuIEZvciBub3cgd2UgYWxsb3cgaXQuCiAgICAgICAgICAgIGlzSnNMaWJyYXJ5ID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uLmlzRXh0ZXJuYWwgJiYKICAgICAgICAgICAgIWNvbW1vbkVsZW1lbnRzLmlzRXh0ZXJuYWxBbGxvd2VkKGZ1bmN0aW9uKSkgewogICAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgIGZ1bmN0aW9uLCBNZXNzYWdlS2luZC5OT05fTkFUSVZFX0VYVEVSTkFMKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwoKICAgIGVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoQ2xhc3MobGlicmFyeSwgKENsYXNzRW50aXR5IGNscykgewogICAgICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBtZXRhZGF0YTsKICAgICAgaXIuQ2xhc3MgY2xhc3NOb2RlID0gZWxlbWVudE1hcC5nZXRDbGFzc05vZGUoY2xzKTsKICAgICAgU3RyaW5nIGNsYXNzTmFtZTsKICAgICAgaWYgKGFubm90YXRpb25EYXRhICE9IG51bGwpIHsKICAgICAgICBjbGFzc05hbWUgPSBhbm5vdGF0aW9uRGF0YS5nZXRKc0ludGVyb3BDbGFzc05hbWUoY2xhc3NOb2RlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtZXRhZGF0YSA9IGVsZW1lbnRFbnZpcm9ubWVudC5nZXRDbGFzc01ldGFkYXRhKGNscyk7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoaXMgd2hlbiB3ZSB1c2UgY29uc3RhbnRzIGZyb20gQ0ZFLgogICAgICAgIGNsYXNzTmFtZSA9IGdldEpzSW50ZXJvcE5hbWUoY2xzLCBtZXRhZGF0YSk7CiAgICAgIH0KICAgICAgaWYgKGNsYXNzTmFtZSAhPSBudWxsKSB7CiAgICAgICAgYm9vbCBpc0Fub255bW91czsKICAgICAgICBpZiAoYW5ub3RhdGlvbkRhdGEgIT0gbnVsbCkgewogICAgICAgICAgaXNBbm9ueW1vdXMgPSBhbm5vdGF0aW9uRGF0YS5pc0Fub255bW91c0pzSW50ZXJvcENsYXNzKGNsYXNzTm9kZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlzQW5vbnltb3VzID0gZmFsc2U7CiAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyBicmFuY2ggd2hlbiB3ZSB1c2UgY29uc3RhbnRzIGZyb20KICAgICAgICAgIC8vIENGRS4KICAgICAgICAgIGZvciAoQ29uc3RhbnRWYWx1ZSB2YWx1ZSBpbiBtZXRhZGF0YSkgewogICAgICAgICAgICBpZiAoaXNBbm5vdGF0aW9uKGNscywgdmFsdWUsIGNvbW1vbkVsZW1lbnRzLmpzQW5vbnltb3VzQ2xhc3MpKSB7CiAgICAgICAgICAgICAgaXNBbm9ueW1vdXMgPSB0cnVlOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlcG9ydCBhbiBlcnJvciBpZiB0aGUgY2xhc3MgaXMgYW5vbnltb3VzIGJ1dAogICAgICAgIC8vIGhhcyBhIG5vbi1lbXB0eSBuYW1lLgogICAgICAgIF9uYXRpdmVCYXNpY0RhdGFCdWlsZGVyLm1hcmtBc0pzSW50ZXJvcENsYXNzKGNscywKICAgICAgICAgICAgbmFtZTogY2xhc3NOYW1lLCBpc0Fub255bW91czogaXNBbm9ueW1vdXMpOwogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEl0IGlzIHVuY2xlYXIgd2hldGhlciBsaWJyYXJ5IGNhbiBiZSBpbXBsaWNpdGx5CiAgICAgICAgLy8ganMtaW50ZXJvcC4gRm9yIG5vdyB3ZSBhbGxvdyBpdC4KICAgICAgICBpc0pzTGlicmFyeSA9IHRydWU7CgogICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoTG9jYWxDbGFzc01lbWJlcihjbHMsIChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgICAgICBpZiAobWVtYmVyLmlzRmllbGQpIHsKICAgICAgICAgICAgLy8gVE9ETygzNDE3NCk6IERpc2FsbG93IGpzLWludGVyb3AgZmllbGRzLgogICAgICAgICAgICAvKnJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICAgIG1lbWJlciwgTWVzc2FnZUtpbmQuSU1QTElDSVRfSlNfSU5URVJPUF9GSUVMRF9OT1RfU1VQUE9SVEVEKTsqLwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gPSBtZW1iZXI7CiAgICAgICAgICAgIGlyLk1lbWJlciBtZW1iZXJOb2RlID0gZWxlbWVudE1hcC5nZXRNZW1iZXJOb2RlKG1lbWJlcik7CiAgICAgICAgICAgIFN0cmluZyBtZW1iZXJOYW1lOwogICAgICAgICAgICBpZiAoYW5ub3RhdGlvbkRhdGEgIT0gbnVsbCkgewogICAgICAgICAgICAgIG1lbWJlck5hbWUgPSBhbm5vdGF0aW9uRGF0YS5nZXRKc0ludGVyb3BNZW1iZXJOYW1lKG1lbWJlck5vZGUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gd2UgdXNlIGNvbnN0YW50cyBmcm9tIENGRS4KICAgICAgICAgICAgICBtZW1iZXJOYW1lID0gZ2V0SnNJbnRlcm9wTmFtZSgKICAgICAgICAgICAgICAgICAgbGlicmFyeSwgZWxlbWVudEVudmlyb25tZW50LmdldE1lbWJlck1ldGFkYXRhKGZ1bmN0aW9uKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGZ1bmN0aW9uLmlzRXh0ZXJuYWwpIHsKICAgICAgICAgICAgICBtZW1iZXJOYW1lID8/PSBmdW5jdGlvbi5uYW1lOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChtZW1iZXJOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBleHBsaWNpdAogICAgICAgICAgICAgIC8vIG1lbWJlciBuYW1lIGFubm90YXRpb25zIGFyZSBub3QgYWxsb3dlZCBvbiBpbnN0YW5jZSBtZW1iZXJzLgogICAgICAgICAgICAgIF9uYXRpdmVCYXNpY0RhdGFCdWlsZGVyLm1hcmtBc0pzSW50ZXJvcE1lbWJlcigKICAgICAgICAgICAgICAgICAgZnVuY3Rpb24sIG1lbWJlck5hbWUpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIWZ1bmN0aW9uLmlzRXh0ZXJuYWwgJiYKICAgICAgICAgICAgICAgICFmdW5jdGlvbi5pc0Fic3RyYWN0ICYmCiAgICAgICAgICAgICAgICAhZnVuY3Rpb24uaXNTdGF0aWMpIHsKICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICBNZXNzYWdlS2luZC5KU19JTlRFUk9QX0NMQVNTX05PTl9FWFRFUk5BTF9NRU1CRVIsCiAgICAgICAgICAgICAgICAgIHsnY2xzJzogY2xzLm5hbWUsICdtZW1iZXInOiBtZW1iZXIubmFtZX0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjaGVja0Z1bmN0aW9uUGFyYW1ldGVycyhmdW5jdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hDb25zdHJ1Y3RvcihjbHMsCiAgICAgICAgICAgIChDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvcikgewogICAgICAgICAgU3RyaW5nIG1lbWJlck5hbWUgPSBnZXRKc0ludGVyb3BOYW1lKAogICAgICAgICAgICAgIGxpYnJhcnksIGVsZW1lbnRFbnZpcm9ubWVudC5nZXRNZW1iZXJNZXRhZGF0YShjb25zdHJ1Y3RvcikpOwogICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzRXh0ZXJuYWwpIHsKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSXQgc2hvdWxkIHByb2JhYmx5IGJlIGFuIGVycm9yIHRvIGhhdmUgYQogICAgICAgICAgICAvLyBuby1uYW1lIGNvbnN0cnVjdG9yIHdpdGhvdXQgYSBASlMoKSBhbm5vdGF0aW9uLgogICAgICAgICAgICBtZW1iZXJOYW1lID8/PSBjb25zdHJ1Y3Rvci5uYW1lOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG1lbWJlck5hbWUgIT0gbnVsbCkgewogICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdCBleHBsaWNpdAogICAgICAgICAgICAvLyBtZW1iZXIgbmFtZSBhbm5vdGF0aW9ucyBhcmUgbm90IGFsbG93ZWQgb24gaW5zdGFuY2UgbWVtYmVycy4KICAgICAgICAgICAgX25hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIubWFya0FzSnNJbnRlcm9wTWVtYmVyKAogICAgICAgICAgICAgICAgY29uc3RydWN0b3IsIG1lbWJlck5hbWUpOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIFRPRE8oMzM4MzQpOiBJdCBpcyBhIGJyZWFraW5nIGNoYW5nZSAoYXQgbGVhc3QgYWdhaW5zdCBpbiBzb21lIG9mCiAgICAgICAgICAvLyBvdXIgb3duIHRlc3RzKSBidXQgSlMtaW50ZXJvcCBjb25zdHJ1Y3RvcnMgc2hvdWxkIGJlIHJlcXVpcmVkIHRvIGJlCiAgICAgICAgICAvLyBleHRlcm5hbCBzaW5jZSB3ZSBvdGhlcndpc2UgYWxsb3cgY3JlYXRpbmcgYSBEYXJ0IG9iamVjdCB0aGF0IHRyaWVzCiAgICAgICAgICAvLyB0byBwYXNzIGFzIGEgSlMtaW50ZXJvcCBjbGFzcy4KICAgICAgICAgIC8qaWYgKCFjb25zdHJ1Y3Rvci5pc0V4dGVybmFsKSB7CiAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZShjb25zdHJ1Y3RvciwKICAgICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLkpTX0lOVEVST1BfQ0xBU1NfTk9OX0VYVEVSTkFMX0NPTlNUUlVDVE9SLCB7CiAgICAgICAgICAgICAgJ2Nscyc6IGNscy5uYW1lLAogICAgICAgICAgICAgICdjb25zdHJ1Y3Rvcic6CiAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yLm5hbWUuaXNFbXB0eSA/ICcke2Nscy5uYW1lfS4nIDogY29uc3RydWN0b3IubmFtZQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0qLwoKICAgICAgICAgIGlmIChjb25zdHJ1Y3Rvci5pc0ZhY3RvcnlDb25zdHJ1Y3RvciAmJiBpc0Fub255bW91cykgewogICAgICAgICAgICBpZiAoY29uc3RydWN0b3IucGFyYW1ldGVyU3RydWN0dXJlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzID4gMCkgewogICAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IsCiAgICAgICAgICAgICAgICAgIE1lc3NhZ2VLaW5kCiAgICAgICAgICAgICAgICAgICAgICAuSlNfT0JKRUNUX0xJVEVSQUxfQ09OU1RSVUNUT1JfV0lUSF9QT1NJVElPTkFMX0FSR1VNRU5UUywKICAgICAgICAgICAgICAgICAgeydjbHMnOiBjbHMubmFtZX0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjaGVja0Z1bmN0aW9uUGFyYW1ldGVycyhjb25zdHJ1Y3Rvcik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hMb2NhbENsYXNzTWVtYmVyKGNscywgKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgICAgIFN0cmluZyBtZW1iZXJOYW1lID0gZ2V0SnNJbnRlcm9wTmFtZSgKICAgICAgICAgICAgICBsaWJyYXJ5LCBlbGVtZW50RW52aXJvbm1lbnQuZ2V0TWVtYmVyTWV0YWRhdGEobWVtYmVyKSk7CiAgICAgICAgICBpZiAobWVtYmVyTmFtZSAhPSBudWxsKSB7CiAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICAgIG1lbWJlciwgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9NRU1CRVJfSU5fTk9OX0pTX0lOVEVST1BfQ0xBU1MpOwogICAgICAgICAgfSBlbHNlIGlmIChtZW1iZXIgaXMgRnVuY3Rpb25FbnRpdHkpIHsKICAgICAgICAgICAgaWYgKG1lbWJlci5pc0V4dGVybmFsICYmCiAgICAgICAgICAgICAgICAhY29tbW9uRWxlbWVudHMuaXNFeHRlcm5hbEFsbG93ZWQobWVtYmVyKSkgewogICAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICAgICAgbWVtYmVyLCBNZXNzYWdlS2luZC5OT05fTkFUSVZFX0VYVEVSTkFMKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoQ29uc3RydWN0b3IoY2xzLAogICAgICAgICAgICAoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpIHsKICAgICAgICAgIFN0cmluZyBtZW1iZXJOYW1lID0gZ2V0SnNJbnRlcm9wTmFtZSgKICAgICAgICAgICAgICBsaWJyYXJ5LCBlbGVtZW50RW52aXJvbm1lbnQuZ2V0TWVtYmVyTWV0YWRhdGEoY29uc3RydWN0b3IpKTsKICAgICAgICAgIGlmIChtZW1iZXJOYW1lICE9IG51bGwpIHsKICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKGNvbnN0cnVjdG9yLAogICAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9NRU1CRVJfSU5fTk9OX0pTX0lOVEVST1BfQ0xBU1MpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGNvbnN0cnVjdG9yLmlzRXh0ZXJuYWwgJiYKICAgICAgICAgICAgICAgICFjb21tb25FbGVtZW50cy5pc0V4dGVybmFsQWxsb3dlZChjb25zdHJ1Y3RvcikpIHsKICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yLCBNZXNzYWdlS2luZC5OT05fTkFUSVZFX0VYVEVSTkFMKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9KTsKCiAgICBpZiAoaXNKc0xpYnJhcnkpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSXQgaXMgdW5jbGVhciB3aGV0aGVyIGxpYnJhcnkgY2FuIGJlIGltcGxpY2l0bHkKICAgICAgLy8ganMtaW50ZXJvcC4gRm9yIG5vdyB3ZSBhbGxvdyBpdCBhbmQgYXNzdW1lIHRoZSBlbXB0eSBuYW1lLgogICAgICBsaWJyYXJ5TmFtZSA/Pz0gJyc7CiAgICAgIF9uYXRpdmVCYXNpY0RhdGFCdWlsZGVyLm1hcmtBc0pzSW50ZXJvcExpYnJhcnkobGlicmFyeSwKICAgICAgICAgIG5hbWU6IGxpYnJhcnlOYW1lKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcHJvY2Vzc0pzSW50ZXJvcEFubm90YXRpb25zKAogICAgICBOYXRpdmVCYXNpY0RhdGEgbmF0aXZlQmFzaWNEYXRhLCBOYXRpdmVEYXRhQnVpbGRlciBuYXRpdmVEYXRhQnVpbGRlcikgewogICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyID0gZWxlbWVudE1hcC5yZXBvcnRlcjsKICAgIEtFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50ID0gZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQ7CiAgICBLQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMgPSBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICAgIGZvciAoTGlicmFyeUVudGl0eSBsaWJyYXJ5IGluIGVsZW1lbnRFbnZpcm9ubWVudC5saWJyYXJpZXMpIHsKICAgICAgLy8gRXJyb3IgY2hlY2tpbmcgZm9yIGNsYXNzIGluaGVyaXRhbmNlIG11c3QgaGFwcGVuIGFmdGVyIHRoZSBmaXJzdCBwYXNzCiAgICAgIC8vIHRocm91Z2ggYWxsIHRoZSBjbGFzc2VzIGJlY2F1c2UgaXQgaXMgcG9zc2libGUgdG8gZGVjbGFyZSBhIHN1YmNsYXNzCiAgICAgIC8vIGJlZm9yZSBhIHN1cGVyY2xhc3MgdGhhdCBoYXMgbm90IHlldCBoYWQgIm1hcmtKc0ludGVyb3BDbGFzcyIgY2FsbGVkIG9uCiAgICAgIC8vIGl0LgogICAgICBlbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENsYXNzKGxpYnJhcnksIChDbGFzc0VudGl0eSBjbHMpIHsKICAgICAgICBpci5DbGFzcyBjbGFzc05vZGUgPSBlbGVtZW50TWFwLmdldENsYXNzTm9kZShjbHMpOwogICAgICAgIFN0cmluZyBjbGFzc05hbWU7CiAgICAgICAgaWYgKGFubm90YXRpb25EYXRhICE9IG51bGwpIHsKICAgICAgICAgIGNsYXNzTmFtZSA9IGFubm90YXRpb25EYXRhLmdldEpzSW50ZXJvcENsYXNzTmFtZShjbGFzc05vZGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuIHdlIHVzZSBjb25zdGFudHMgZnJvbSBDRkUuCiAgICAgICAgICBjbGFzc05hbWUgPz89CiAgICAgICAgICAgICAgZ2V0SnNJbnRlcm9wTmFtZShjbHMsIGVsZW1lbnRFbnZpcm9ubWVudC5nZXRDbGFzc01ldGFkYXRhKGNscykpOwogICAgICAgIH0KICAgICAgICBpZiAoY2xhc3NOYW1lICE9IG51bGwpIHsKICAgICAgICAgIGJvb2wgaW1wbGVtZW50c0pzSmF2YVNjcmlwdE9iamVjdENsYXNzID0gZmFsc2U7CiAgICAgICAgICBlbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaFN1cGVydHlwZShjbHMsIChJbnRlcmZhY2VUeXBlIHN1cGVydHlwZSkgewogICAgICAgICAgICBpZiAoc3VwZXJ0eXBlLmVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3MpIHsKICAgICAgICAgICAgICBpbXBsZW1lbnRzSnNKYXZhU2NyaXB0T2JqZWN0Q2xhc3MgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIGlmICghaW1wbGVtZW50c0pzSmF2YVNjcmlwdE9iamVjdENsYXNzKSB7CiAgICAgICAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgICAgICAgIGNscywgTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19DQU5OT1RfRVhURU5EX0RBUlRfQ0xBU1MsIHsKICAgICAgICAgICAgICAnY2xzJzogY2xzLm5hbWUsCiAgICAgICAgICAgICAgJ3N1cGVyY2xhc3MnOiBlbGVtZW50RW52aXJvbm1lbnQuZ2V0U3VwZXJDbGFzcyhjbHMpLm5hbWUKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICB9Cn0KgUoATk48ATYkAUErOCkBHUsBDDlMQAFBNB0kQg9OEFAsQSgjJTkMCggkTAgIBAEbP0AbLCg+HSQfIUY7CAYbBAE6Qi4UPiYGBAEMPDdMQAFBGCJJDUomRAY+MAFNPxkkSA9MJ0QIHCI2KUUKDyo+TCEoCiImTitJE1EvSTsgDCo7JzoKCAgBQSg5GCRFDz1MNQgfGiZNER9QEjJNIhUODApOITo4UCwcAVAgOCtQEy5FHypOFVItTA4nLA4mTU49KQ4BKCgmKxxEPQ4BLwwMMy4wSyhNPy0MJEtMOyoMAU9RUSwrNUkfHU8QDgFBSysfHlAmDhMyDAwPUDBGJClQMSU9KzwODAwzLjBLJDVIEypCK0EODAwICAEXTkQaPh4GBAEMJE43TEABQk9OUQ1DOxomRxFOGE8KITpPTzgODjQpTh9HEAwKCgYEAgEycGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL25hdGl2ZV9iYXNpY19kYXRhLmRhcnRBc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMva2VybmVsL25vX3N1Y2hfbWV0aG9kX3Jlc29sdmVyLmRhcnSJUy8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQyanMua2VybmVsLmVsZW1lbnRfbWFwOwoKY2xhc3MgS2VybmVsTm9TdWNoTWV0aG9kUmVzb2x2ZXIgaW1wbGVtZW50cyBOb1N1Y2hNZXRob2RSZXNvbHZlciB7CiAgZmluYWwgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwOwoKICBLZXJuZWxOb1N1Y2hNZXRob2RSZXNvbHZlcih0aGlzLmVsZW1lbnRNYXApOwoKICBFbGVtZW50RW52aXJvbm1lbnQgZ2V0IF9lbGVtZW50RW52aXJvbm1lbnQgPT4gZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQ7CgogIENvbW1vbkVsZW1lbnRzIGdldCBfY29tbW9uRWxlbWVudHMgPT4gZWxlbWVudE1hcC5jb21tb25FbGVtZW50czsKCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNGb3J3YXJkaW5nU3ludGF4KEtGdW5jdGlvbiBtZXRob2QpIHsKICAgIGlyLlByb2NlZHVyZSBub2RlID0gZWxlbWVudE1hcC5fbG9va3VwUHJvY2VkdXJlKG1ldGhvZCk7CiAgICBpZiAobm9kZS5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5pc0VtcHR5KSByZXR1cm4gZmFsc2U7CiAgICBpci5WYXJpYWJsZURlY2xhcmF0aW9uIGZpcnN0UGFyYW1ldGVyID0KICAgICAgICBub2RlLmZ1bmN0aW9uLnBvc2l0aW9uYWxQYXJhbWV0ZXJzLmZpcnN0OwogICAgaXIuU3RhdGVtZW50IGJvZHkgPSBub2RlLmZ1bmN0aW9uLmJvZHk7CiAgICBpci5FeHByZXNzaW9uIGV4cHI7CiAgICBpZiAoYm9keSBpcyBpci5CbG9jayAmJiBib2R5LnN0YXRlbWVudHMuaXNOb3RFbXB0eSkgewogICAgICBpci5CbG9jayBibG9jayA9IGJvZHk7CiAgICAgIGJvZHkgPSBibG9jay5zdGF0ZW1lbnRzLmZpcnN0OwogICAgfQogICAgaWYgKGJvZHkgaXMgaXIuUmV0dXJuU3RhdGVtZW50KSB7CiAgICAgIGV4cHIgPSBib2R5LmV4cHJlc3Npb247CiAgICB9CiAgICBpZiAoZXhwciBpcyBpci5Bc0V4cHJlc3Npb24gJiYKICAgICAgICBlbGVtZW50TWFwLmdldERhcnRUeXBlKGV4cHIudHlwZSkgPT0gX2NvbW1vbkVsZW1lbnRzLmR5bmFtaWNUeXBlKSB7CiAgICAgIGlyLkFzRXhwcmVzc2lvbiBhc0V4cHJlc3Npb24gPSBleHByOwogICAgICBleHByID0gYXNFeHByZXNzaW9uLm9wZXJhbmQ7CiAgICB9CiAgICBpZiAoZXhwciBpcyBpci5TdXBlck1ldGhvZEludm9jYXRpb24gJiYKICAgICAgICBleHByLm5hbWUubmFtZSA9PSBJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfKSB7CiAgICAgIGlyLkFyZ3VtZW50cyBhcmd1bWVudHMgPSBleHByLmFyZ3VtZW50czsKICAgICAgaWYgKGFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA9PSAxICYmCiAgICAgICAgICBhcmd1bWVudHMubmFtZWQuaXNFbXB0eSAmJgogICAgICAgICAgYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3QgaXMgaXIuVmFyaWFibGVHZXQpIHsKICAgICAgICBpci5WYXJpYWJsZUdldCBnZXQgPSBhcmd1bWVudHMucG9zaXRpb25hbC5maXJzdDsKICAgICAgICByZXR1cm4gZ2V0LnZhcmlhYmxlID09IGZpcnN0UGFyYW1ldGVyOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc1Rocm93aW5nU3ludGF4KEtGdW5jdGlvbiBtZXRob2QpIHsKICAgIGlyLlByb2NlZHVyZSBub2RlID0gZWxlbWVudE1hcC5fbG9va3VwUHJvY2VkdXJlKG1ldGhvZCk7CiAgICBpci5TdGF0ZW1lbnQgYm9keSA9IG5vZGUuZnVuY3Rpb24uYm9keTsKICAgIGlmIChib2R5IGlzIGlyLkJsb2NrICYmIGJvZHkuc3RhdGVtZW50cy5pc05vdEVtcHR5KSB7CiAgICAgIGlyLkJsb2NrIGJsb2NrID0gYm9keTsKICAgICAgYm9keSA9IGJsb2NrLnN0YXRlbWVudHMuZmlyc3Q7CiAgICB9CiAgICBpci5FeHByZXNzaW9uIGV4cHI7CiAgICBpZiAoYm9keSBpcyBpci5SZXR1cm5TdGF0ZW1lbnQpIHsKICAgICAgZXhwciA9IGJvZHkuZXhwcmVzc2lvbjsKICAgIH0gZWxzZSBpZiAoYm9keSBpcyBpci5FeHByZXNzaW9uU3RhdGVtZW50KSB7CiAgICAgIGV4cHIgPSBib2R5LmV4cHJlc3Npb247CiAgICB9CiAgICByZXR1cm4gZXhwciBpcyBpci5UaHJvdzsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRW50aXR5IGdldFN1cGVyTm9TdWNoTWV0aG9kKEZ1bmN0aW9uRW50aXR5IG1ldGhvZCkgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0U3VwZXJOb1N1Y2hNZXRob2QobWV0aG9kLmVuY2xvc2luZ0NsYXNzKTsKICB9Cn0KSABOTjwBJAFDKwEvAU8BQwEMLz1CLDIsGDodJQYmHgYjTCsjBiw3Ly4lOjkvCAYSBAEMLT0sOh0lBhgmHjEeBh0EAQw/QwQCAThwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwvbm9fc3VjaF9tZXRob2RfcmVzb2x2ZXIuZGFydDtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9rZXJuZWwvZnJvbnRfZW5kX2FkYXB0ZXIuZGFydI8aLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBIZWxwZXIgY2xhc3NlcyBhbmQgbWV0aG9kcyB0byBhZGFwdCBiZXR3ZWVuIGBwYWNrYWdlOmNvbXBpbGVyYCBhbmQKLy8vIGBwYWNrYWdlOmZyb250X2VuZGAgQVBJcy4KbGlicmFyeSBjb21waWxlci5rZXJuZWwuZnJvbnRfZW5kX2FkYXB0ZXI7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcgYXMgZmU7CgppbXBvcnQgJy4uLy4uL2NvbXBpbGVyX25ldy5kYXJ0JyBhcyBhcGk7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9pby9zb3VyY2VfZmlsZS5kYXJ0JzsKCi8vLyBBIGZyb250LWVuZHMncyBbRmlsZVN5c3RlbV0gdGhhdCB1c2VzIGRhcnQyanMncyBbYXBpLkNvbXBpbGVySW5wdXRdLgpjbGFzcyBDb21waWxlckZpbGVTeXN0ZW0gaW1wbGVtZW50cyBmZS5GaWxlU3lzdGVtIHsKICBmaW5hbCBhcGkuQ29tcGlsZXJJbnB1dCBpbnB1dFByb3ZpZGVyOwoKICBDb21waWxlckZpbGVTeXN0ZW0odGhpcy5pbnB1dFByb3ZpZGVyKTsKCiAgQG92ZXJyaWRlCiAgZmUuRmlsZVN5c3RlbUVudGl0eSBlbnRpdHlGb3JVcmkoVXJpIHVyaSkgewogICAgaWYgKHVyaS5zY2hlbWUgPT0gJ2RhdGEnKSB7CiAgICAgIHJldHVybiBuZXcgZmUuRGF0YUZpbGVTeXN0ZW1FbnRpdHkoVXJpLmJhc2UucmVzb2x2ZVVyaSh1cmkpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgX0NvbXBpbGVyRmlsZVN5c3RlbUVudGl0eSh1cmksIHRoaXMpOwogICAgfQogIH0KfQoKY2xhc3MgX0NvbXBpbGVyRmlsZVN5c3RlbUVudGl0eSBpbXBsZW1lbnRzIGZlLkZpbGVTeXN0ZW1FbnRpdHkgewogIEBvdmVycmlkZQogIGZpbmFsIFVyaSB1cmk7CiAgZmluYWwgQ29tcGlsZXJGaWxlU3lzdGVtIGZzOwoKICBfQ29tcGlsZXJGaWxlU3lzdGVtRW50aXR5KHRoaXMudXJpLCB0aGlzLmZzKTsKCiAgQG92ZXJyaWRlCiAgRnV0dXJlPFN0cmluZz4gcmVhZEFzU3RyaW5nKCkgYXN5bmMgewogICAgYXBpLklucHV0IGlucHV0OwogICAgdHJ5IHsKICAgICAgaW5wdXQgPSBhd2FpdCBmcy5pbnB1dFByb3ZpZGVyCiAgICAgICAgICAucmVhZEZyb21VcmkodXJpLCBpbnB1dEtpbmQ6IGFwaS5JbnB1dEtpbmQuVVRGOCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRocm93IG5ldyBmZS5GaWxlU3lzdGVtRXhjZXB0aW9uKHVyaSwgJyRlJyk7CiAgICB9CiAgICBpZiAoaW5wdXQgPT0gbnVsbCkgdGhyb3cgbmV3IGZlLkZpbGVTeXN0ZW1FeGNlcHRpb24odXJpLCAiRmlsZSBub3QgZm91bmQiKTsKICAgIC8vIFRPRE8oc2lnbXVuZCk6IHRlY2huaWNhbGx5IHNvbWVvbmUgY291bGQgcHJvdmlkZSBkYXJ0MmpzIHdpdGggYW4gaW5wdXQKICAgIC8vIHRoYXQgaXMgbm90IGEgU291cmNlRmlsZS4gTm90ZSB0aGF0IHRoaXMgYXNzdW1wdGlvbiBpcyBhbHNvIGRvbmUgaW4gdGhlCiAgICAvLyAobm9uLWtlcm5lbCkgU2NyaXB0TG9hZGVyLgogICAgU291cmNlRmlsZSBmaWxlID0gaW5wdXQgYXMgU291cmNlRmlsZTsKICAgIHJldHVybiBmaWxlLnNsb3dUZXh0KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8TGlzdDxpbnQ+PiByZWFkQXNCeXRlcygpIGFzeW5jIHsKICAgIGFwaS5JbnB1dCBpbnB1dDsKICAgIHRyeSB7CiAgICAgIGlucHV0ID0gYXdhaXQgZnMuaW5wdXRQcm92aWRlcgogICAgICAgICAgLnJlYWRGcm9tVXJpKHVyaSwgaW5wdXRLaW5kOiBhcGkuSW5wdXRLaW5kLmJpbmFyeSk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRocm93IG5ldyBmZS5GaWxlU3lzdGVtRXhjZXB0aW9uKHVyaSwgJyRlJyk7CiAgICB9CiAgICBpZiAoaW5wdXQgPT0gbnVsbCkgdGhyb3cgbmV3IGZlLkZpbGVTeXN0ZW1FeGNlcHRpb24odXJpLCAiRmlsZSBub3QgZm91bmQiKTsKICAgIHJldHVybiBpbnB1dC5kYXRhOwogIH0KCiAgQG92ZXJyaWRlCiAgRnV0dXJlPGJvb2w+IGV4aXN0cygpIGFzeW5jIHsKICAgIHRyeSB7CiAgICAgIGFwaS5JbnB1dCBpbnB1dCA9IGF3YWl0IGZzLmlucHV0UHJvdmlkZXIKICAgICAgICAgIC5yZWFkRnJvbVVyaSh1cmksIGlucHV0S2luZDogYXBpLklucHV0S2luZC5iaW5hcnkpOwogICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbDsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKLy8vIFJlcG9ydCBhIFttZXNzYWdlXSByZWNlaXZlZCBmcm9tIHRoZSBmcm9udC1lbmQsIHVzaW5nIGRhcnQyanMncwovLy8gW0RpYWdub3N0aWNSZXBvcnRlcl0uCnZvaWQgcmVwb3J0RnJvbnRFbmRNZXNzYWdlKAogICAgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyLCBmZS5EaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlKSB7CiAgU3Bhbm5hYmxlIF9nZXRTcGFubmFibGUoZmUuRGlhZ25vc3RpY01lc3NhZ2UgbWVzc2FnZSkgewogICAgVXJpIHVyaSA9IGZlLmdldE1lc3NhZ2VVcmkobWVzc2FnZSk7CiAgICBpbnQgb2Zmc2V0ID0gZmUuZ2V0TWVzc2FnZUNoYXJPZmZzZXQobWVzc2FnZSk7CiAgICBpbnQgbGVuZ3RoID0gZmUuZ2V0TWVzc2FnZUxlbmd0aChtZXNzYWdlKTsKICAgIGlmICh1cmkgIT0gbnVsbCAmJiBvZmZzZXQgIT0gLTEpIHsKICAgICAgcmV0dXJuIG5ldyBTb3VyY2VTcGFuKHVyaSwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIE5PX0xPQ0FUSU9OX1NQQU5OQUJMRTsKICAgIH0KICB9CgogIERpYWdub3N0aWNNZXNzYWdlIF9jb252ZXJ0TWVzc2FnZShmZS5EaWFnbm9zdGljTWVzc2FnZSBtZXNzYWdlKSB7CiAgICBTcGFubmFibGUgc3BhbiA9IF9nZXRTcGFubmFibGUobWVzc2FnZSk7CiAgICBTdHJpbmcgdGV4dCA9IGZlLmdldE1lc3NhZ2VIZWFkZXJUZXh0KG1lc3NhZ2UpOwogICAgcmV0dXJuIHJlcG9ydGVyLmNyZWF0ZU1lc3NhZ2Uoc3BhbiwgTWVzc2FnZUtpbmQuR0VORVJJQywgeyd0ZXh0JzogdGV4dH0pOwogIH0KCiAgTGlzdDxmZS5EaWFnbm9zdGljTWVzc2FnZT4gcmVsYXRlZEluZm9ybWF0aW9uID0KICAgICAgZmUuZ2V0TWVzc2FnZVJlbGF0ZWRJbmZvcm1hdGlvbihtZXNzYWdlKTsKICBEaWFnbm9zdGljTWVzc2FnZSBtYWluTWVzc2FnZSA9IF9jb252ZXJ0TWVzc2FnZShtZXNzYWdlKTsKICBMaXN0PERpYWdub3N0aWNNZXNzYWdlPiBpbmZvcyA9IHJlbGF0ZWRJbmZvcm1hdGlvbiAhPSBudWxsCiAgICAgID8gcmVsYXRlZEluZm9ybWF0aW9uLm1hcChfY29udmVydE1lc3NhZ2UpLnRvTGlzdCgpCiAgICAgIDogY29uc3QgW107CiAgc3dpdGNoIChtZXNzYWdlLnNldmVyaXR5KSB7CiAgICBjYXNlIGZlLlNldmVyaXR5LmludGVybmFsUHJvYmxlbToKICAgICAgdGhyb3cgbWFpbk1lc3NhZ2UubWVzc2FnZS5jb21wdXRlTWVzc2FnZSgpOwogICAgY2FzZSBmZS5TZXZlcml0eS5lcnJvcjoKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3IobWFpbk1lc3NhZ2UsIGluZm9zKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIGZlLlNldmVyaXR5Lndhcm5pbmc6CiAgICAgIHJlcG9ydGVyLnJlcG9ydFdhcm5pbmcobWFpbk1lc3NhZ2UsIGluZm9zKTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCd1bmhhbmRsZWQgc2V2ZXJpdHkgJHttZXNzYWdlLnNldmVyaXR5fScpOwogIH0KfQp8AE5OPAFHHisBFQFAASkBGSEBSTQpASoBDC4gRA03BgQCAUEMER8BMAEMKBUKJTwSMwZQTk8iKxwEAQwqFQolPhIzBlAXBAEMIAovPhwSFAYEAgFEGhxBOikzLyc7DSQGBAFELTROBAEyMDw9ORIeJjIcMA0eMg0NTgQCATJwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwvZnJvbnRfZW5kX2FkYXB0ZXIuZGFydCpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jbG9zdXJlLmRhcnS4+S8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdjb21tb24uZGFydCc7CmltcG9ydCAnZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnanNfbW9kZWwvY2xvc3VyZS5kYXJ0JzsKaW1wb3J0ICdqc19tb2RlbC9lbGVtZW50X21hcC5kYXJ0JzsKaW1wb3J0ICdzZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CgovLy8gQ2xhc3MgdGhhdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBmb3IgaG93IGNsb3N1cmVzIGFyZSByZXdyaXR0ZW4vcmVwcmVzZW50ZWQKLy8vIHRvIHByZXNlcnZlIERhcnQgc2VtYW50aWNzIHdoZW4gY29tcGlsZWQgdG8gSmF2YVNjcmlwdC4gR2l2ZW4gYSBwYXJ0aWN1bGFyCi8vLyBub2RlIHRvIGxvb2sgdXAsIGl0IHJldHVybnMgYSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24KLy8vIG9mIGhvdyBjbG9zdXJlIGNvbnZlcnNpb24gaXMgaW1wbGVtZW50ZWQuIFQgaXMgYW4gaXIuTm9kZSBvciBOb2RlLgphYnN0cmFjdCBjbGFzcyBDbG9zdXJlRGF0YSB7CiAgLy8vIERlc2VyaWFsaXplcyBhIFtDbG9zdXJlRGF0YV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBDbG9zdXJlRGF0YS5yZWFkRnJvbURhdGFTb3VyY2UoCiAgICAgICAgICBKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBEYXRhU291cmNlIHNvdXJjZSkgPQogICAgICBDbG9zdXJlRGF0YUltcGwucmVhZEZyb21EYXRhU291cmNlOwoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtDbG9zdXJlRGF0YV0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspOwoKICAvLy8gTG9vayB1cCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFyaWFibGVzIHRoYXQgaGF2ZSBiZWVuIG11dGF0ZWQgYW5kIGFyZQogIC8vLyB1c2VkIGluc2lkZSB0aGUgc2NvcGUgb2YgW25vZGVdLgogIFNjb3BlSW5mbyBnZXRTY29wZUluZm8oTWVtYmVyRW50aXR5IG1lbWJlcik7CgogIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8gZ2V0Q2xvc3VyZUluZm8oaXIuTG9jYWxGdW5jdGlvbiBsb2NhbEZ1bmN0aW9uKTsKCiAgLy8vIExvb2sgdXAgaW5mb3JtYXRpb24gYWJvdXQgYSBsb29wLCBpbiBjYXNlIGFueSB2YXJpYWJsZXMgaXQgZGVjbGFyZXMgbmVlZAogIC8vLyB0byBiZSBib3hlZC9zbmFwc2hvdHRlZC4KICBDYXB0dXJlZExvb3BTY29wZSBnZXRDYXB0dXJlZExvb3BTY29wZShpci5Ob2RlIGxvb3BOb2RlKTsKCiAgLy8vIEFjY2Vzc29yIHRvIHRoZSBpbmZvcm1hdGlvbiBhYm91dCBzY29wZXMgdGhhdCBjbG9zdXJlcyBjYXB0dXJlLiBVc2VkIGJ5CiAgLy8vIHRoZSBTU0EgYnVpbGRlci4KICBDYXB0dXJlZFNjb3BlIGdldENhcHR1cmVkU2NvcGUoTWVtYmVyRW50aXR5IGVudGl0eSk7Cn0KCi8vLyBFbnVtIHVzZWQgZm9yIGlkZW50aWZ5aW5nIFtTY29wZUluZm9dIHN1YmNsYXNzZXMgaW4gc2VyaWFsaXphdGlvbi4KZW51bSBTY29wZUluZm9LaW5kIHsKICBzY29wZUluZm8sCiAgY2FwdHVyZWRTY29wZSwKICBjYXB0dXJlZExvb3BTY29wZSwKICBjbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvLAp9CgovLy8gQ2xhc3MgdGhhdCByZXByZXNlbnRzIG9uZSBsZXZlbCBvZiBzY29waW5nIGluZm9ybWF0aW9uLCB3aGV0aGVyIHRoaXMgc2NvcGUKLy8vIGlzIGEgY2xvc3VyZSBvciBub3QuIFRoaXMgaXMgc3BlY2lmaWNhbGx5IHVzZWQgdG8gc3RvcmUgaW5mb3JtYXRpb24KLy8vIGFib3V0IHRoZSB1c2FnZSBvZiB2YXJpYWJsZXMgaW4gdHJ5IG9yIHN5bmMgYmxvY2tzLCBiZWNhdXNlIHRoZXkgbmVlZCB0byBiZQovLy8gYm94ZWQuCi8vLwovLy8gVmFyaWFibGVzIHRoYXQgYXJlIHVzZWQgaW4gYSB0cnkgbXVzdCBiZSB0cmVhdGVkIGFzIGJveGVkIGJlY2F1c2UgdGhlCi8vLyBjb250cm9sIGZsb3cgY2FuIGJlIG5vbi1saW5lYXIuIEFsc28gcGFyYW1ldGVycyB0byBhIGBzeW5jKmAgZ2VuZXJhdG9yIG11c3QKLy8vIGJlIGJveGVkLCBiZWNhdXNlIG9mIHRoZSB3YXkgd2UgcmV3cml0ZSBzeW5jKiBmdW5jdGlvbnMuIFNlZSBhbHNvIGNvbW1lbnRzCi8vLyBpbiBbQ2xvc3VyZUNsYXNzTWFwLnVzZUxvY2FsXS4KY2xhc3MgU2NvcGVJbmZvIHsKICBjb25zdCBTY29wZUluZm8oKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtTY29wZUluZm9dIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgU2NvcGVJbmZvLnJlYWRGcm9tRGF0YVNvdXJjZShEYXRhU291cmNlIHNvdXJjZSkgewogICAgU2NvcGVJbmZvS2luZCBraW5kID0gc291cmNlLnJlYWRFbnVtKFNjb3BlSW5mb0tpbmQudmFsdWVzKTsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIFNjb3BlSW5mb0tpbmQuc2NvcGVJbmZvOgogICAgICAgIHJldHVybiBuZXcgSnNTY29wZUluZm8ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICAgIGNhc2UgU2NvcGVJbmZvS2luZC5jYXB0dXJlZFNjb3BlOgogICAgICAgIHJldHVybiBuZXcgSnNDYXB0dXJlZFNjb3BlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIFNjb3BlSW5mb0tpbmQuY2FwdHVyZWRMb29wU2NvcGU6CiAgICAgICAgcmV0dXJuIG5ldyBKc0NhcHR1cmVkTG9vcFNjb3BlLnJlYWRGcm9tRGF0YVNvdXJjZShzb3VyY2UpOwogICAgICBjYXNlIFNjb3BlSW5mb0tpbmQuY2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbzoKICAgICAgICByZXR1cm4gbmV3IEtlcm5lbENsb3N1cmVDbGFzc0luZm8ucmVhZEZyb21EYXRhU291cmNlKHNvdXJjZSk7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignVW5leHBlY3RlZCBTY29wZUluZm9LaW5kICRraW5kJyk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtTY29wZUluZm9dIHRvIFtzaW5rXS4KICB2b2lkIHdyaXRlVG9EYXRhU2luayhEYXRhU2luayBzaW5rKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignJHtydW50aW1lVHlwZX0ud3JpdGVUb0RhdGFTaW5rJyk7CiAgfQoKICAvLy8gQ29udmVuaWVuY2UgcmVmZXJlbmNlIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnQgcmVwcmVzZW50aW5nIGB0aGlzYC4KICAvLy8gSWYgdGhpcyBzY29wZSBpcyBub3QgaW4gYW4gaW5zdGFuY2UgbWVtYmVyLCBpdCB3aWxsIGJlIG51bGwuCiAgTG9jYWwgZ2V0IHRoaXNMb2NhbCA9PiBudWxsOwoKICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgW3ZhcmlhYmxlXSBpcyB1c2VkIGluc2lkZSBhIGB0cnlgIGJsb2NrIG9yIGEgYHN5bmMqYAogIC8vLyBnZW5lcmF0b3IgKHRoaXMgaXMgaW1wb3J0YW50IHRvIGtub3cgYmVjYXVzZSBib3hpbmcvcmVkaXJlY3Rpb24gbmVlZHMgdG8KICAvLy8gaGFwcGVuIGZvciB0aG9zZSBsb2NhbCB2YXJpYWJsZXMpLgogIC8vLwogIC8vLyBWYXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBpbiBhIHRyeSBtdXN0IGJlIHRyZWF0ZWQgYXMgYm94ZWQgYmVjYXVzZSB0aGUKICAvLy8gY29udHJvbCBmbG93IGNhbiBiZSBub24tbGluZWFyLgogIC8vLwogIC8vLyBBbHNvIHBhcmFtZXRlcnMgdG8gYSBgc3luYypgIGdlbmVyYXRvciBtdXN0IGJlIGJveGVkLCBiZWNhdXNlIG9mIHRoZSB3YXkKICAvLy8gd2UgcmV3cml0ZSBzeW5jKiBmdW5jdGlvbnMuIFNlZSBhbHNvIGNvbW1lbnRzIGluCiAgLy8vIFtDbG9zdXJlQ2xhc3NNYXAudXNlTG9jYWxdLgogIGJvb2wgbG9jYWxJc1VzZWRJblRyeU9yU3luYyhMb2NhbCB2YXJpYWJsZSkgPT4gZmFsc2U7CgogIC8vLyBMb29wIHRocm91Z2ggZWFjaCB2YXJpYWJsZSB0aGF0IGhhcyBiZWVuIGRlZmluZWQgaW4gdGhpcyBzY29wZSwgbW9kaWZpZWQKICAvLy8gYW55d2hlcmUgKHRoaXMgc2NvcGUgb3IgYW5vdGhlciBzY29wZSkgYW5kIHVzZWQgaW4gYW5vdGhlciBzY29wZS4gQmVjYXVzZQogIC8vLyBpdCBpcyB1c2VkIGluIGFub3RoZXIgc2NvcGUsIHRoZXNlIHZhcmlhYmxlcyBuZWVkIHRvIGJlICJib3hlZCIsIGNyZWF0aW5nCiAgLy8vIGEgdGhpbiB3cmFwcGVyIGFyb3VuZCBhY2Nlc3NlcyB0byB0aGVzZSB2YXJpYWJsZXMgc28gdGhhdCBhY2Nlc3NlcyBnZXQKICAvLy8gdGhlIGNvcnJlY3QgdXBkYXRlZCB2YWx1ZS4gVGhlIHZhcmlhYmxlcyBpbiBsb2NhbHNVc2VkSW5UcnlPclN5bmMgbWF5CiAgLy8vIGJlIGluY2x1ZGVkIGluIHRoaXMgc2V0LgogIC8vLwogIC8vLyBJbiB0aGUgY2FzZSBvZiBsb29wcywgdGhpcyBpcyB0aGUgc2V0IG9mIGl0ZXJhdGlvbiB2YXJpYWJsZXMgKG9yIGFueQogIC8vLyB2YXJpYWJsZXMgZGVjbGFyZWQgaW4gdGhlIGZvciBsb29wIGV4cHJlc3Npb24gKGBmb3IgKC4uLmhlcmUuLi4pYCkgdGhhdAogIC8vLyBuZWVkIHRvIGJlIGJveGVkIHRvIHNuYXBzaG90IHRoZWlyIHZhbHVlLgogIHZvaWQgZm9yRWFjaEJveGVkVmFyaWFibGUoZihMb2NhbCBsb2NhbCwgRmllbGRFbnRpdHkgZmllbGQpKSB7fQoKICAvLy8gVHJ1ZSBpZiBbdmFyaWFibGVdIGhhcyBiZWVuIG11dGF0ZWQgYW5kIGlzIGFsc28gdXNlZCBpbiBhbm90aGVyIHNjb3BlLgogIGJvb2wgaXNCb3hlZFZhcmlhYmxlKExvY2FsIHZhcmlhYmxlKSA9PiBmYWxzZTsKfQoKLy8vIENsYXNzIHJlcHJlc2VudGluZyB0aGUgdXNhZ2Ugb2YgYSBzY29wZSB0aGF0IGhhcyBiZWVuIGNhcHR1cmVkIGluIHRoZQovLy8gY29udGV4dCBvZiBhIGNsb3N1cmUuCmNsYXNzIENhcHR1cmVkU2NvcGUgZXh0ZW5kcyBTY29wZUluZm8gewogIGNvbnN0IENhcHR1cmVkU2NvcGUoKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtDYXB0dXJlZFNjb3BlXSBvYmplY3QgZnJvbSBbc291cmNlXS4KICBmYWN0b3J5IENhcHR1cmVkU2NvcGUucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICBTY29wZUluZm9LaW5kIGtpbmQgPSBzb3VyY2UucmVhZEVudW0oU2NvcGVJbmZvS2luZC52YWx1ZXMpOwogICAgc3dpdGNoIChraW5kKSB7CiAgICAgIGNhc2UgU2NvcGVJbmZvS2luZC5zY29wZUluZm86CiAgICAgIGNhc2UgU2NvcGVJbmZvS2luZC5jbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvOgogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdVbmV4cGVjdGVkIENhcHR1cmVkU2NvcGUga2luZCAka2luZCcpOwogICAgICBjYXNlIFNjb3BlSW5mb0tpbmQuY2FwdHVyZWRTY29wZToKICAgICAgICByZXR1cm4gbmV3IEpzQ2FwdHVyZWRTY29wZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgICAgY2FzZSBTY29wZUluZm9LaW5kLmNhcHR1cmVkTG9vcFNjb3BlOgogICAgICAgIHJldHVybiBuZXcgSnNDYXB0dXJlZExvb3BTY29wZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdVbmV4cGVjdGVkIFNjb3BlSW5mb0tpbmQgJGtpbmQnKTsKICB9CgogIC8vLyBJZiB0cnVlLCB0aGlzIGNsb3N1cmUgYWNjZXNzZXMgYSB2YXJpYWJsZSB0aGF0IHdhcyBkZWZpbmVkIGluIGFuIG91dHNpZGUKICAvLy8gc2NvcGUgYW5kIHRoaXMgdmFyaWFibGUgZ2V0cyBtb2RpZmllZCBhdCBzb21lIHBvaW50IChzb21ldGltZXMgd2Ugc2F5IHRoYXQKICAvLy8gdmFyaWFibGUgaGFzIGJlZW4gImNhcHR1cmVkIikuIEluIHRoaXMgc2l0dWF0aW9uLCBhY2Nlc3MgdG8gdGhpcyB2YXJpYWJsZQogIC8vLyBpcyBjb250cm9sbGVkIHZpYSBhIHdyYXBwZXIgKGJveCkgc28gdGhhdCB1cGRhdGVzIHRvIHRoaXMgdmFyaWFibGUKICAvLy8gYXJlIGRvbmUgaW4gYSB3YXkgdGhhdCBpcyBpbiBsaW5lIHdpdGggRGFydCdzIGNsb3N1cmUgcnVsZXMuCiAgYm9vbCBnZXQgcmVxdWlyZXNDb250ZXh0Qm94ID0+IGZhbHNlOwoKICAvLy8gQWNjZXNzb3IgdG8gdGhlIGxvY2FsIGVudmlyb25tZW50IGluIHdoaWNoIGEgcGFydGljdWxhciBjbG9zdXJlIG5vZGUgaXMKICAvLy8gZXhlY3V0ZWQuIFRoaXMgd2lsbCBlbmNhcHN1bGF0ZSB0aGUgdmFsdWUgb2YgYW55IHZhcmlhYmxlcyB0aGF0IGhhdmUgYmVlbgogIC8vLyBzY29wZWQgaW50byB0aGlzIGNvbnRleHQgZnJvbSBvdXRzaWRlLiBUaGlzIGlzIGFuIGFjY2Vzc29yIHRvIHRoZQogIC8vLyBjb250ZXh0Qm94IHRoYXQgW3JlcXVpcmVzQ29udGV4dEJveF0gaXMgdGVzdGluZyBpcyByZXF1aXJlZC4KICBMb2NhbCBnZXQgY29udGV4dCA9PiBudWxsOwp9CgovLy8gQ2xhc3MgdGhhdCBkZXNjcmliZXMgdGhlIGFjdHVhbCBtZWNoYW5pY3Mgb2YgaG93IHZhbHVlcyBvZiB2YXJpYWJsZXMKLy8vIGluc3RhbnRpYXRlZCBpbiBhIGxvb3AgYXJlIGNhcHR1cmVkIGluc2lkZSBjbG9zdXJlcyBpbiB0aGUgbG9vcCBib2R5LgovLy8gVW5saWtlIEpTLCB0aGUgdmFsdWUgb2YgYSBkZWNsYXJlZCBsb29wIGl0ZXJhdGlvbiB2YXJpYWJsZSBpbiBhbnkgY2xvc3VyZQovLy8gaXMgY2FwdHVyZWQvc25hcHNob3R0ZWQgaW5zaWRlIGF0IGVhY2ggaXRlcmF0aW9uIHBvaW50LCBhcyBpZiB3ZSBjcmVhdGVkIGEKLy8vIG5ldyBsb2NhbCB2YXJpYWJsZSBmb3IgdGhhdCB2YWx1ZSBpbnNpZGUgdGhlIGxvb3AuIEZvciBleGFtcGxlLCBmb3IgdGhlCi8vLyBmb2xsb3dpbmcgbG9vcDoKLy8vCi8vLyAgICAgdmFyIGxzdCA9IFtdOwovLy8gICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNTsgaSsrKSBsc3QuYWRkKCgpPT5pKTsKLy8vICAgICB2YXIgcmVzdWx0ID0gbGlzdC5tYXAoKGYpID0+IGYoKSkudG9MaXN0KCk7Ci8vLwovLy8gYHJlc3VsdGAgd2lsbCBiZSBbMCwgMSwgMiwgMywgNF0sIHdoZXJlYXMgd2VyZSB0aGlzIEpTIGNvZGUKLy8vIHRoZSByZXN1bHQgd291bGQgYmUgWzUsIDUsIDUsIDUsIDVdLiBCZWNhdXNlIG9mIHRoaXMgZGlmZmVyZW5jZSB3ZSBuZWVkIHRvCi8vLyBjcmVhdGUgYSBjbG9zdXJlIGZvciB0aGVzZSBzb3J0cyBvZiBsb29wcyB0byBjYXB0dXJlIHRoZSB2YXJpYWJsZSdzIHZhbHVlIGF0Ci8vLyBlYWNoIGl0ZXJhdGlvbiwgYnkgYm94aW5nIHRoZSBpdGVyYXRpb24gdmFyaWFibGVbc10uCmNsYXNzIENhcHR1cmVkTG9vcFNjb3BlIGV4dGVuZHMgQ2FwdHVyZWRTY29wZSB7CiAgY29uc3QgQ2FwdHVyZWRMb29wU2NvcGUoKTsKCiAgLy8vIERlc2VyaWFsaXplcyBhIFtDYXB0dXJlZExvb3BTY29wZV0gb2JqZWN0IGZyb20gW3NvdXJjZV0uCiAgZmFjdG9yeSBDYXB0dXJlZExvb3BTY29wZS5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIFNjb3BlSW5mb0tpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShTY29wZUluZm9LaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBTY29wZUluZm9LaW5kLnNjb3BlSW5mbzoKICAgICAgY2FzZSBTY29wZUluZm9LaW5kLmNsb3N1cmVSZXByZXNlbnRhdGlvbkluZm86CiAgICAgIGNhc2UgU2NvcGVJbmZvS2luZC5jYXB0dXJlZFNjb3BlOgogICAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdVbmV4cGVjdGVkIENhcHR1cmVkTG9vcFNjb3BlIGtpbmQgJGtpbmQnKTsKICAgICAgY2FzZSBTY29wZUluZm9LaW5kLmNhcHR1cmVkTG9vcFNjb3BlOgogICAgICAgIHJldHVybiBuZXcgSnNDYXB0dXJlZExvb3BTY29wZS5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdVbmV4cGVjdGVkIFNjb3BlSW5mb0tpbmQgJGtpbmQnKTsKICB9CgogIC8vLyBUcnVlIGlmIHRoaXMgbG9vcCBzY29wZSBkZWNsYXJlcyBpbiB0aGUgZmlyc3QgcGFydCBvZiB0aGUgbG9vcAogIC8vLyBgZm9yICg8aGVyZT47Li4uOy4uLilgIGFueSB2YXJpYWJsZXMgdGhhdCBuZWVkIHRvIGJlIGJveGVkLgogIGJvb2wgZ2V0IGhhc0JveGVkTG9vcFZhcmlhYmxlcyA9PiBmYWxzZTsKCiAgLy8vIFRoZSBzZXQgb2YgaXRlcmF0aW9uIHZhcmlhYmxlcyAob3IgdmFyaWFibGVzIGRlY2xhcmVkIGluIHRoZSBmb3IgbG9vcAogIC8vLyBleHByZXNzaW9uIChgZm9yICg8aGVyZT47IC4uLiA7IC4uLilgKSB0aGF0IG5lZWQgdG8gYmUgYm94ZWQgdG8gc25hcHNob3QKICAvLy8gdGhlaXIgdmFsdWUuIFRoZXNlIHZhcmlhYmxlcyBhcmUgYWxzbyBpbmNsdWRlZCBpbiB0aGUgc2V0IG9mCiAgLy8vIGBmb3JFYWNoQm94ZWRWYXJpYWJsZWAgbWV0aG9kLiBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gc2V0cyBpcwogIC8vLyBpbiB0aGlzIGV4YW1wbGU6CiAgLy8vCiAgLy8vICAgICBydW4oZikgPT4gZigpOwogIC8vLyAgICAgdmFyIGE7CiAgLy8vICAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykgewogIC8vLyAgICAgICB2YXIgYiA9IDM7CiAgLy8vICAgICAgIGEgPSAoKSA9PiBiID0gaTsKICAvLy8gICAgIH0KICAvLy8KICAvLy8gYGlgIHdvdWxkIGJlIGEgcGFydCBvZiB0aGUgYm94ZWRMb29wVmFyaWFibGVzIEFORCBib3hlZFZhcmlhYmxlcywgYnV0IGIKICAvLy8gd291bGQgb25seSBiZSBhIHBhcnQgb2YgYm94ZWRWYXJpYWJsZXMuCiAgTGlzdDxMb2NhbD4gZ2V0IGJveGVkTG9vcFZhcmlhYmxlcyA9PiBjb25zdCA8TG9jYWw+W107Cn0KCi8vLyBDbGFzcyB0aGF0IGRlc2NyaWJlcyB0aGUgYWN0dWFsIG1lY2hhbmljcyBvZiBob3cgdGhlIGNvbnZlcnRlZCwgcmV3cml0dGVuCi8vLyBjbG9zdXJlIGlzIGltcGxlbWVudGVkLiBGb3IgZXhhbXBsZSwgZm9yIHRoZSBmb2xsb3dpbmcgY2xvc3VyZSAobmFtZWQgZm9vCi8vLyBmb3IgY29udmVuaWVuY2UpOgovLy8KLy8vICAgdmFyIGZvbyA9ICh4KSA9PiB5ICsgeDsKLy8vCi8vLyBXZSB3b3VsZCBwcm9kdWNlIHRoZSBmb2xsb3dpbmcgY2xhc3MgdG8gY29udHJvbCBhY2Nlc3MgdG8gdGhlc2UgdmFyaWFibGVzIGluCi8vLyB0aGUgZm9sbG93aW5nIHdheSAobW9kdWxvIG5hbWluZyBvZiB2YXJpYWJsZXMsIGFzc3VtaW5nIHRoYXQgeSBpcyBtb2RpZmllZAovLy8gZWxzZXdoZXJlIGluIGl0cyBzY29wZSk6Ci8vLwovLy8gICAgY2xhc3MgRm9vQ2xvc3VyZSB7Ci8vLyAgICAgICBpbnQgeTsKLy8vICAgICAgIEZvb0Nsb3N1cmUodGhpcy55KTsKLy8vICAgICAgIGNhbGwoeCkgPT4gdGhpcy55ICsgeDsKLy8vICAgIH0KLy8vCi8vLyAgYW5kIHRoZW4gdG8gZXhlY3V0ZSB0aGlzIGNsb3N1cmUsIGZvciBleGFtcGxlOgovLy8KLy8vICAgICB2YXIgZm9vID0gbmV3IEZvb0Nsb3N1cmUoMSk7Ci8vLyAgICAgZm9vLmNhbGwoMik7Ci8vLwovLy8gaWYgYHlgIGlzIG1vZGlmaWVkIGVsc2V3aGVyZSB3aXRoaW4gaXRzIHNjb3BlLCBhY2Nlc3NlcyB0byB5IGFueXdoZXJlIGluIHRoZQovLy8gY29kZSB3aWxsIGJlIGNvbnRyb2xsZWQgdmlhIGEgYm94IG9iamVjdC4KLy8vCi8vLyBCZWNhdXNlIGluIHRoZXNlIGV4YW1wbGVzIGB5YCB3YXMgZGVjbGFyZWQgaW4gc29tZSBvdGhlciwgb3V0ZXIgc2NvcGUsIGJ1dAovLy8gdXNlZCBpbiB0aGUgaW5uZXIgc2NvcGUgb2YgdGhpcyBjbG9zdXJlLCB3ZSBzYXkgYHlgIGlzIGEgImNhcHR1cmVkIgovLy8gdmFyaWFibGUuCi8vLyBUT0RPKGVmb3J0dW5hKTogTWFrZSBpbnRlcmZhY2Ugc2ltcGxlciBpbiBzdWJzZXF1ZW50IHJlZmFjdG9yaW5ncy4KY2xhc3MgQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbyBleHRlbmRzIFNjb3BlSW5mbyB7CiAgY29uc3QgQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbygpOwoKICAvLy8gRGVzZXJpYWxpemVzIGEgW0Nsb3N1cmVSZXByZXNlbnRhdGlvbkluZm9dIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mby5yZWFkRnJvbURhdGFTb3VyY2UoRGF0YVNvdXJjZSBzb3VyY2UpIHsKICAgIFNjb3BlSW5mb0tpbmQga2luZCA9IHNvdXJjZS5yZWFkRW51bShTY29wZUluZm9LaW5kLnZhbHVlcyk7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBTY29wZUluZm9LaW5kLnNjb3BlSW5mbzoKICAgICAgY2FzZSBTY29wZUluZm9LaW5kLmNhcHR1cmVkU2NvcGU6CiAgICAgIGNhc2UgU2NvcGVJbmZvS2luZC5jYXB0dXJlZExvb3BTY29wZToKICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICAgJ1VuZXhwZWN0ZWQgQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbyBraW5kICRraW5kJyk7CiAgICAgIGNhc2UgU2NvcGVJbmZvS2luZC5jbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvOgogICAgICAgIHJldHVybiBuZXcgS2VybmVsQ2xvc3VyZUNsYXNzSW5mby5yZWFkRnJvbURhdGFTb3VyY2Uoc291cmNlKTsKICAgIH0KICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdVbmV4cGVjdGVkIFNjb3BlSW5mb0tpbmQgJGtpbmQnKTsKICB9CgogIC8vLyBUaGUgb3JpZ2luYWwgbG9jYWwgZnVuY3Rpb24gYmVmb3JlIGFueSB0cmFuc2xhdGlvbi4KICAvLy8KICAvLy8gV2lsbCBiZSBudWxsIGZvciBtZXRob2RzLgogIExvY2FsIGdldCBjbG9zdXJlRW50aXR5ID0+IG51bGw7CgogIC8vLyBUaGUgZW50aXR5IGZvciB0aGUgY2xhc3MgdXNlZCB0byByZXByZXNlbnQgdGhlIHJld3JpdHRlbiBjbG9zdXJlIGluIHRoZQogIC8vLyBlbWl0dGVkIEphdmFTY3JpcHQuCiAgLy8vCiAgLy8vIENsb3N1cmVzIGFyZSByZXdyaXR0ZW4gaW4gdGhlIGZvcm0gb2YgY2xhc3NlcyB0aGF0IGhhdmUgZmllbGRzIHRvIGNvbnRyb2wKICAvLy8gdGhlIHJlZGlyZWN0aW9uIGFuZCBlZGl0aW5nIG9mIGNhcHR1cmVkIHZhcmlhYmxlcy4KICBDbGFzc0VudGl0eSBnZXQgY2xvc3VyZUNsYXNzRW50aXR5ID0+IG51bGw7CgogIC8vLyBUaGUgZnVuY3Rpb24gdGhhdCBpbXBsZW1lbnRzIHRoZSBbbG9jYWxdIGZ1bmN0aW9uIGFzIGEgYGNhbGxgIG1ldGhvZCBvbgogIC8vLyB0aGUgY2xvc3VyZSBjbGFzcy4KICBGdW5jdGlvbkVudGl0eSBnZXQgY2FsbE1ldGhvZCA9PiBudWxsOwoKICAvLy8gVGhlIHNpZ25hdHVyZSBtZXRob2QgZm9yIFtjYWxsTWV0aG9kXSBpZiBuZWVkZWQuCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IHNpZ25hdHVyZU1ldGhvZCA9PiBudWxsOwoKICAvLy8gTGlzdCBvZiBsb2NhbHMgdGhhdCB0aGlzIGNsb3N1cmUgY2xhc3MgaGFzIGNyZWF0ZWQgY29ycmVzcG9uZGluZyBmaWVsZAogIC8vLyBlbnRpdGllcyBmb3IuCiAgQGRlcHJlY2F0ZWQKICBMaXN0PExvY2FsPiBnZXQgY3JlYXRlZEZpZWxkRW50aXRpZXMgPT4gY29uc3QgPExvY2FsPltdOwoKICAvLy8gQXMgc2hvd24gaW4gdGhlIGV4YW1wbGUgaW4gdGhlIGNvbW1lbnRzIGF0IHRoZSB0b3Agb2YgdGhpcyBjbGFzcywgd2UKICAvLy8gY3JlYXRlIGZpZWxkcyBpbiB0aGUgY2xvc3VyZSBjbGFzcyBmb3IgZWFjaCBjYXB0dXJlZCB2YXJpYWJsZS4gVGhpcyBpcyBhbgogIC8vLyBhY2Nlc3NvciB0aGUgW2xvY2FsXSBmb3Igd2hpY2ggW2ZpZWxkXSB3YXMgY3JlYXRlZC4KICAvLy8gUmV0dXJucyB0aGUgW2xvY2FsXSBmb3Igd2hpY2ggW2ZpZWxkXSB3YXMgY3JlYXRlZC4KICBMb2NhbCBnZXRMb2NhbEZvckZpZWxkKEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICBmYWlsZWRBdChmaWVsZCwgIk5vIGxvY2FsIGZvciAkZmllbGQuIik7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBDb252ZW5pZW5jZSBwb2ludGVyIHRvIHRoZSBmaWVsZCBlbnRpdHkgcmVwcmVzZW50YXRpb24gaW4gdGhlIGNsb3N1cmUKICAvLy8gY2xhc3Mgb2YgdGhlIGVsZW1lbnQgcmVwcmVzZW50aW5nIGB0aGlzYC4KICBGaWVsZEVudGl0eSBnZXQgdGhpc0ZpZWxkRW50aXR5ID0+IG51bGw7CgogIC8vLyBMb29wIHRocm91Z2ggZWFjaCB2YXJpYWJsZSB0aGF0IGhhcyBiZWVuIGJveGVkIGluIHRoaXMgY2xvc3VyZSBjbGFzcy4gT25seQogIC8vLyBjYXB0dXJlZCB2YXJpYWJsZXMgdGhhdCBhcmUgbXV0YXRlZCBuZWVkIHRvIGJlICJib3hlZCIgKHdoaWNoIGJhc2ljYWxseQogIC8vLyBwdXRzIGEgdGhpbiBsYXllciBiZXR3ZWVuIHVwZGF0ZXMgYW5kIHJlYWRzIHRvIHRoaXMgdmFyaWFibGUgdG8gZW5zdXJlCiAgLy8vIHRoYXQgZXZlcnkgcGxhY2UgdGhhdCBhY2Nlc3NlcyBpdCBnZXRzIHRoZSBjb3JyZWN0IHVwZGF0ZWQgdmFsdWUpLiBUaGlzCiAgLy8vIGluY2x1ZGVzIGxvb3Bpbmcgb3ZlciB2YXJpYWJsZXMgdGhhdCB3ZXJlIGJveGVkIGZyb20gb3RoZXIgc2NvcGVzLCBub3QKICAvLy8gc3RyaWN0bHkgdmFyaWFibGVzIGRlZmluZWQgaW4gdGhpcyBjbG9zdXJlLCB1bmxpa2UgdGhlIGJlaGF2aW9yIGluCiAgLy8vIHRoZSBzdXBlcmNsYXNzIFNjb3BlSW5mby4KICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hCb3hlZFZhcmlhYmxlKGYoTG9jYWwgbG9jYWwsIEZpZWxkRW50aXR5IGZpZWxkKSkge30KCiAgLy8vIExvb3AgdGhyb3VnaCBlYWNoIGZyZWUgdmFyaWFibGUgaW4gdGhpcyBjbG9zdXJlLiBGcmVlIHZhcmlhYmxlcyBhcmUgdGhlCiAgLy8vIHZhcmlhYmxlcyB0aGF0IGhhdmUgYmVlbiBjYXB0dXJlZCAqanVzdCogaW4gdGhpcyBjbG9zdXJlLCBub3QgaW4gbmVzdGVkCiAgLy8vIHNjb3Blcy4KICB2b2lkIGZvckVhY2hGcmVlVmFyaWFibGUoZihMb2NhbCB2YXJpYWJsZSwgRmllbGRFbnRpdHkgZmllbGQpKSB7fQoKICAvLyBUT0RPKGVmb3J0dW5hKTogUmVtb3ZlIHRoaXMgbWV0aG9kLiBUaGUgb2xkIHN5c3RlbSB3YXMgdXNpbmcKICAvLyBDbG9zdXJlQ2xhc3NNYXBzIGZvciBzaXR1YXRpb25zIG90aGVyIHRoYW4gY2xvc3VyZSBjbGFzcyBtYXBzLCBhbmQgdGhhdCdzCiAgLy8ganVzdCBjb25mdXNpbmcuCiAgYm9vbCBnZXQgaXNDbG9zdXJlID0+IGZhbHNlOwp9CgovLy8gQSBsb2NhbCB2YXJpYWJsZSB0aGF0IGNvbnRhaW5zIHRoZSBib3ggb2JqZWN0IGhvbGRpbmcgdGhlIFtCb3hGaWVsZEVsZW1lbnRdCi8vLyBmaWVsZHMuCmNsYXNzIEJveExvY2FsIGV4dGVuZHMgTG9jYWwgewogIGZpbmFsIENsYXNzRW50aXR5IGNvbnRhaW5lcjsKCiAgQm94TG9jYWwodGhpcy5jb250YWluZXIpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gY29udGFpbmVyLm5hbWU7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBCb3hMb2NhbCAmJiBvdGhlci5jb250YWluZXIgPT0gY29udGFpbmVyOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBjb250YWluZXIuaGFzaENvZGU7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdCb3hMb2NhbCgkbmFtZSknOwp9CgovLy8gQSBsb2NhbCB2YXJpYWJsZSB1c2VkIGVuY29kZSB0aGUgZGlyZWN0ICh1bmNhcHR1cmVkKSByZWZlcmVuY2VzIHRvIFt0aGlzXS4KY2xhc3MgVGhpc0xvY2FsIGV4dGVuZHMgTG9jYWwgewogIGZpbmFsIENsYXNzRW50aXR5IGVuY2xvc2luZ0NsYXNzOwoKICBUaGlzTG9jYWwodGhpcy5lbmNsb3NpbmdDbGFzcyk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiAndGhpcyc7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBUaGlzTG9jYWwgJiYgb3RoZXIuZW5jbG9zaW5nQ2xhc3MgPT0gZW5jbG9zaW5nQ2xhc3M7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGVuY2xvc2luZ0NsYXNzLmhhc2hDb2RlOwp9CgovLy8gQSB0eXBlIHZhcmlhYmxlIGFzIGEgbG9jYWwgdmFyaWFibGUuCmNsYXNzIFR5cGVWYXJpYWJsZUxvY2FsIGltcGxlbWVudHMgTG9jYWwgewogIGZpbmFsIFR5cGVWYXJpYWJsZVR5cGUgdHlwZVZhcmlhYmxlOwoKICBUeXBlVmFyaWFibGVMb2NhbCh0aGlzLnR5cGVWYXJpYWJsZSk7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiB0eXBlVmFyaWFibGUuZWxlbWVudC5uYW1lOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHR5cGVWYXJpYWJsZS5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBUeXBlVmFyaWFibGVMb2NhbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHR5cGVWYXJpYWJsZSA9PSBvdGhlci50eXBlVmFyaWFibGU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgndHlwZV92YXJpYWJsZV9sb2NhbCgnKTsKICAgIHNiLndyaXRlKHR5cGVWYXJpYWJsZSk7CiAgICBzYi53cml0ZSgnKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLy8KLy8vIE1vdmUgdGhlIGJlbG93IGNsYXNzZXMgdG8gYSBKUyBtb2RlbCBldmVudHVhbGx5LgovLy8KYWJzdHJhY3QgY2xhc3MgSlNFbnRpdHkgaW1wbGVtZW50cyBNZW1iZXJFbnRpdHkgewogIFN0cmluZyBnZXQgZGVjbGFyZWROYW1lOwp9CgphYnN0cmFjdCBjbGFzcyBQcml2YXRlbHlOYW1lZEpTRW50aXR5IGltcGxlbWVudHMgSlNFbnRpdHkgewogIEVudGl0eSBnZXQgcm9vdE9mU2NvcGU7Cn0KgYEATk48ASgWIR4gJCsBT09QRx05KjoqAS8nAU0nLwFMAU8fPAFOFzcCAUcVDREVHQIBT0hQCwRKUE8jEhUBNzxAFCQ7KD8sQzRGBkIEAS0oQgQBSEMfAVBPKQZMJgZPNyI4AU9QUE1MHwZLTjBCAU0xAgFKGigZATtAQBQkNEsoPyxDBkIEAU9RUElDKAFOUEhDHQIBSUpOT0wUBBY0NARAT1E5MB0BP0RAFCQ0KE8sQwZCBAFFQisBTE9DTxcGGREoFx0MBk4uOQIBTk4WBB4EUU8dBBoRHiEJBDQEJRUEUS4ET0gORzQlAUdMQBQkKCwkQDRGBkIEAToGICMBThoGUDkuAU4ZKQE3LgFNFA47AUtQOjkuLREEAUwwKwFRTk1OTUkgDEIBTk4ORAFCTxUfAgFQDB8fARwBDCUBDBw+BAEMKgEMKgIBTyAkASIBDB0BDBxJBAEMLwIBKSsnASgBDDABDC0BDBwzLwQBDBYqJhwTGgQCAQQ1BDIbAgE8GgIBIXBhY2thZ2U6Y29tcGlsZXIvc3JjL2Nsb3N1cmUuZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9lbGVtZW50cy9qdW1wcy5kYXJ0hEkvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBlbGVtZW50cy5qdW1wczsKCmltcG9ydCAnZW50aXRpZXMuZGFydCc7CgovLy8gVGhlIGxhYmVsIGVudGl0eSBkZWZpbmVkIGJ5IGEgbGFiZWxlZCBzdGF0ZW1lbnQuCmFic3RyYWN0IGNsYXNzIExhYmVsRGVmaW5pdGlvbiBleHRlbmRzIEVudGl0eSB7CiAgU3RyaW5nIGdldCBsYWJlbE5hbWU7CiAgSnVtcFRhcmdldCBnZXQgdGFyZ2V0OwoKICBib29sIGdldCBpc1RhcmdldCA9PiBpc0JyZWFrVGFyZ2V0IHx8IGlzQ29udGludWVUYXJnZXQ7CgogIGJvb2wgZ2V0IGlzQnJlYWtUYXJnZXQ7CiAgYm9vbCBnZXQgaXNDb250aW51ZVRhcmdldDsKfQoKLy8vIEEganVtcCB0YXJnZXQgaXMgdGhlIHJlZmVyZW5jZSBwb2ludCBvZiBhIHN0YXRlbWVudCBvciBzd2l0Y2gtY2FzZSwKLy8vIGVpdGhlciBieSBsYWJlbCBvciBhcyB0aGUgZGVmYXVsdCB0YXJnZXQgb2YgYSBicmVhayBvciBjb250aW51ZS4KYWJzdHJhY3QgY2xhc3MgSnVtcFRhcmdldCBleHRlbmRzIExvY2FsIHsKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ3RhcmdldCc7CgogIGJvb2wgZ2V0IGlzVGFyZ2V0ID0+IGlzQnJlYWtUYXJnZXQgfHwgaXNDb250aW51ZVRhcmdldDsKCiAgaW50IGdldCBuZXN0aW5nTGV2ZWw7CiAgTGlzdDxMYWJlbERlZmluaXRpb24+IGdldCBsYWJlbHM7CgogIGJvb2wgZ2V0IGlzQnJlYWtUYXJnZXQ7CiAgYm9vbCBnZXQgaXNDb250aW51ZVRhcmdldDsKICBib29sIGdldCBpc1N3aXRjaDsKICBib29sIGdldCBpc1N3aXRjaENhc2U7CgogIExhYmVsRGVmaW5pdGlvbiBhZGRMYWJlbChTdHJpbmcgbGFiZWxOYW1lLAogICAgICB7Ym9vbCBpc0JyZWFrVGFyZ2V0OiBmYWxzZSwgYm9vbCBpc0NvbnRpbnVlVGFyZ2V0OiBmYWxzZX0pOwp9CigATk48ARgBGAE1MBgZAToBGh0CAUhFKgwfAToBGCQBGh0VGQEtQgIBKHBhY2thZ2U6Y29tcGlsZXIvc3JjL2VsZW1lbnRzL2p1bXBzLmRhcnQ3c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfbW9kZWwvdHlwZV9yZWNpcGUuZGFydJWzLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19tb2RlbC50eXBlX3JlY2lwZTsKCmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CgovLy8gQSBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgZGVzY3JpYmVzIHRoZSBzaGFwZSBvciBsYXlvdXQgb2YgYSByZWlmaWVkIHR5cGUKLy8vIGVudmlyb25tZW50LgovLy8KLy8vIEEgdHlwZSBlbnZpcm9ubWVudCBtYXBzIHR5cGUgcGFyYW1ldGVyIHZhcmlhYmxlcyB0byB0eXBlIHZhbHVlcy4gVGhlIHR5cGUKLy8vIHZhcmlhYmxlcyBhcmUgbW9zdGx5IGVsaWRlZCBpbiB0aGUgcnVudGltZSByZXByZXNlbnRhdGlvbiwgcmVwbGFjZWQgYnkKLy8vIGluZGV4ZXMgaW50byB0aGUgcmVpZmllZCBlbnZpcm9ubWVudC4KYWJzdHJhY3QgY2xhc3MgVHlwZUVudmlyb25tZW50U3RydWN0dXJlIHsKICAvLy8gU3RydWN0dXJhbCBlcXVhbGl0eSBvbiBbVHlwZUVudmlyb25tZW50U3RydWN0dXJlXS4KICBzdGF0aWMgYm9vbCBzYW1lKFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBhLCBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgYikgewogICAgaWYgKGEgaXMgU2luZ2xldG9uVHlwZUVudmlyb25tZW50U3RydWN0dXJlKSB7CiAgICAgIGlmIChiIGlzIFNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSkgewogICAgICAgIHJldHVybiBhLnZhcmlhYmxlID09IGIudmFyaWFibGU7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIF9zYW1lRnVsbFN0cnVjdHVyZShhLCBiKTsKICB9CgogIHN0YXRpYyBib29sIF9zYW1lRnVsbFN0cnVjdHVyZSgKICAgICAgRnVsbFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBhLCBGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlIGIpIHsKICAgIGlmIChhLmNsYXNzVHlwZSAhPSBiLmNsYXNzVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgTGlzdDxUeXBlVmFyaWFibGVUeXBlPiBhQmluZGluZ3MgPSBhLmJpbmRpbmdzOwogICAgTGlzdDxUeXBlVmFyaWFibGVUeXBlPiBiQmluZGluZ3MgPSBiLmJpbmRpbmdzOwogICAgaWYgKGFCaW5kaW5ncy5sZW5ndGggIT0gYkJpbmRpbmdzLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhQmluZGluZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGFCaW5kaW5nc1tpXSAhPSBiQmluZGluZ3NbaV0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KfQoKLy8vIEEgc2luZ2xldG9uIHR5cGUgZW52aXJvbm1lbnQgbWFwcyBhIGJpbmRzIGEgc2luZ2xlIHZhbHVlLgpjbGFzcyBTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgZXh0ZW5kcyBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgewogIGZpbmFsIFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGU7CgogIFNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSh0aGlzLnZhcmlhYmxlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1NpbmdsZXRvblR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSgkdmFyaWFibGUpJzsKfQoKLy8vIEEgdHlwZSBlbnZpcm9ubWVudCBjb250YWluaW5nIGFuIGludGVyZmFjZSB0eXBlIGFuZC9vciBhIHR1cGxlIG9mIGZ1bmN0aW9uCi8vLyB0eXBlIHBhcmFtZXRlcnMuCmNsYXNzIEZ1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgZXh0ZW5kcyBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgewogIGZpbmFsIEludGVyZmFjZVR5cGUgY2xhc3NUeXBlOwogIGZpbmFsIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gYmluZGluZ3M7CgogIEZ1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUoe3RoaXMuY2xhc3NUeXBlLCB0aGlzLmJpbmRpbmdzID0gY29uc3QgW119KTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0Z1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUoJGNsYXNzVHlwZSwgJGJpbmRpbmdzKSc7Cn0KCi8vLyBBIFR5cGVSZWNpcGUgaXMgZXZhbHVhdGVkIGFnYWluc3QgYSB0eXBlIGVudmlyb25tZW50IHRvIHByb2R1Y2UgZWl0aGVyIGEKLy8vIHR5cGUsIG9yIGFub3RoZXIgdHlwZSBlbnZpcm9ubWVudC4KYWJzdHJhY3QgY2xhc3MgVHlwZVJlY2lwZSB7CiAgLy8vIFJldHVybnMgYHRydWVgIGlzIFtyZWNpcGVCXSBldmFsdWF0ZWQgaW4gYW4gZW52aXJvbm1lbnQgZGVzY3JpYmVkIGJ5CiAgLy8vIFtzdHJ1Y3R1cmVCXSBnaXZlcyB0aGUgc2FtZSB0eXBlIGFzIFtyZWNpcGVBXSBldmFsdWF0ZWQgaW4gZW52aXJvbm1lbnQKICAvLy8gZGVzY3JpYmVkIGJ5IFtzdHJ1Y3R1cmVBXS4KICBzdGF0aWMgYm9vbCB5aWVsZHNTYW1lVHlwZSgKICAgICAgVHlwZVJlY2lwZSByZWNpcGVBLAogICAgICBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgc3RydWN0dXJlQSwKICAgICAgVHlwZVJlY2lwZSByZWNpcGVCLAogICAgICBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgc3RydWN0dXJlQikgewogICAgaWYgKHJlY2lwZUEgPT0gcmVjaXBlQiAmJgogICAgICAgIFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZS5zYW1lKHN0cnVjdHVyZUEsIHN0cnVjdHVyZUIpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8vIFRPRE8oc3JhKTogVHlwZSByZWNpcGVzIHRoYXQgYXJlIGRpZmZlcmVudCBidXQgZXF1YWwgbW9kdWxvIG5hbWluZyBhbHNvCiAgICAvLyB5aWVsZCB0aGUgc2FtZSB0eXBlLCBlLmcuIGBMaXN0PFg+IEBYYCBhbmQgYExpc3Q8WT4gQFlgLgogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtyZWNpcGVdIGV2YWx1YXRlcyBpbiBhbiBlbnZpcm9ubWVudCB3aXRoIFtzdHJ1Y3R1cmVdIHRvCiAgLy8vIHRoZSBlbnZpcm9ubWVudC4KICBzdGF0aWMgYm9vbCBpc0lkZW50aXR5KAogICAgICBUeXBlUmVjaXBlIHJlY2lwZSwgVHlwZUVudmlyb25tZW50U3RydWN0dXJlIHN0cnVjdHVyZSkgewogICAgaWYgKHN0cnVjdHVyZSBpcyBTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgJiYKICAgICAgICByZWNpcGUgaXMgVHlwZUV4cHJlc3Npb25SZWNpcGUpIHsKICAgICAgaWYgKHN0cnVjdHVyZS52YXJpYWJsZSA9PSByZWNpcGUudHlwZSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgovLy8gQSByZWNpcGUgdGhhdCB5aWVsZHMgYSByZWlmaWVkIHR5cGUuCmNsYXNzIFR5cGVFeHByZXNzaW9uUmVjaXBlIGV4dGVuZHMgVHlwZVJlY2lwZSB7CiAgZmluYWwgRGFydFR5cGUgdHlwZTsKCiAgVHlwZUV4cHJlc3Npb25SZWNpcGUodGhpcy50eXBlKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgcmV0dXJuIG90aGVyIGlzIFR5cGVFeHByZXNzaW9uUmVjaXBlICYmIHR5cGUgPT0gb3RoZXIudHlwZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdUeXBlRXhwcmVzc2lvblJlY2lwZSgkdHlwZSknOwp9CgovLy8gQSByZWNpcGUgdGhhdCB5aWVsZHMgYSByZWlmaWVkIHR5cGUgZW52aXJvbm1lbnQuCmFic3RyYWN0IGNsYXNzIFR5cGVFbnZpcm9ubWVudFJlY2lwZSBleHRlbmRzIFR5cGVSZWNpcGUge30KCi8vLyBBIHJlY2lwZSB0aGF0IHlpZWxkcyBhIHJlaWZpZWQgdHlwZSBlbnZpcm9ubWVudCB0aGF0IGJpbmRzIGEgc2luZ2xlIGdlbmVyaWMKLy8vIGZ1bmN0aW9uIHR5cGUgcGFyYW1ldGVyLgpjbGFzcyBTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRSZWNpcGUgZXh0ZW5kcyBUeXBlRW52aXJvbm1lbnRSZWNpcGUgewogIGZpbmFsIERhcnRUeXBlIHR5cGU7CgogIFNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFJlY2lwZSh0aGlzLnR5cGUpOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgU2luZ2xldG9uVHlwZUVudmlyb25tZW50UmVjaXBlICYmIHR5cGUgPT0gb3RoZXIudHlwZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRSZWNpcGUoJHR5cGUpJzsKfQoKLy8vIEEgcmVjaXBlIHRoYXQgeWllbGRzIGEgcmVpZmllZCB0eXBlIGVudmlyb25tZW50IHRoYXQgYmluZHMgYSBjbGFzcyBpbnN0YW5jZQovLy8gdHlwZSBhbmQvb3IgYSB0dXBsZSBvZiB0eXBlcywgdXN1YWxseSBnZW5lcmljIGZ1bmN0aW9uIHR5cGUgYXJndW1lbnRzLgovLy8KLy8vIFdpdGggbm8gY2xhc3MgaXMgYWxzbyB1c2VkIGFzIGEgdHVwbGUgb2YgdHlwZXMuCmNsYXNzIEZ1bGxUeXBlRW52aXJvbm1lbnRSZWNpcGUgZXh0ZW5kcyBUeXBlRW52aXJvbm1lbnRSZWNpcGUgewogIC8vLyBUeXBlIGV4cHJlc3Npb24gZm9yIHRoZSBpbnRlcmZhY2UgdHlwZSBvZiBhIGNsYXNzIHNjb3BlLiAgYG51bGxgIGZvcgogIC8vLyBlbnZpcm9ubWVudHMgb3V0c2lkZSBhIGNsYXNzIHNjb3BlIG9yIGEgY2xhc3Mgc2NvcGUgd2hlcmUgbm8gc3VwZXJ0eXBlIGlzCiAgLy8vIGdlbmVyaWMsIG9yIHdoZXJlIG9wdGltaXphdGlvbiBoYXMgZGV0ZXJtaW5lZCB0aGF0IG5vIHVzZSBvZiB0aGUKICAvLy8gZW52aXJvbm1lbnQgcmVxdWlyZXMgYW55IG9mIHRoZSBjbGFzcyB0eXBlIHZhcmlhYmxlcy4KICBmaW5hbCBJbnRlcmZhY2VUeXBlIGNsYXNzVHlwZTsKCiAgLy8gVHlwZSBleHByZXNzaW9ucyBmb3IgdGhlIHR1cGxlIG9mIGZ1bmN0aW9uIHR5cGUgYXJndW1lbnRzLgogIGZpbmFsIExpc3Q8RGFydFR5cGU+IHR5cGVzOwoKICBGdWxsVHlwZUVudmlyb25tZW50UmVjaXBlKHt0aGlzLmNsYXNzVHlwZSwgdGhpcy50eXBlcyA9IGNvbnN0IFtdfSk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiBvdGhlciBpcyBGdWxsVHlwZUVudmlyb25tZW50UmVjaXBlICYmIF9lcXVhbCh0aGlzLCBvdGhlcik7CiAgfQoKICBzdGF0aWMgYm9vbCBfZXF1YWwoRnVsbFR5cGVFbnZpcm9ubWVudFJlY2lwZSBhLCBGdWxsVHlwZUVudmlyb25tZW50UmVjaXBlIGIpIHsKICAgIGlmIChhLmNsYXNzVHlwZSAhPSBiLmNsYXNzVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgTGlzdDxEYXJ0VHlwZT4gYVR5cGVzID0gYS50eXBlczsKICAgIExpc3Q8RGFydFR5cGU+IGJUeXBlcyA9IGIudHlwZXM7CiAgICBpZiAoYVR5cGVzLmxlbmd0aCAhPSBiVHlwZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFUeXBlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoYVR5cGVzW2ldICE9IGJUeXBlc1tpXSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnRnVsbFR5cGVFbnZpcm9ubWVudFJlY2lwZSgkY2xhc3NUeXBlLCAkdHlwZXMpJzsKfQqApQBOTjwBJgEhAU8RBE5LKio5TTI0KQgUBiUEASJIMjMzPDE2BhEEAgE+SyMBNAEMRwIBTxVGISkBTAEMTgIBTSccS00hHhorGi0eQRMGAU9AEgQBURcaPzoqOgYSBAIBKTAXASMBDBxABAEMNgIBNTsBUB1FFwEtAQwcSgQBDEACAVBLBDRAS1BHPCEBQB4BRgEMHEYEAVEyJSU2LjAGEQQBDEgCAS5wYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC90eXBlX3JlY2lwZS5kYXJ0QnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS9pbnZva2VfZHluYW1pY19zcGVjaWFsaXplcnMuZGFydMAAyt8vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBKQ29tbW9uRWxlbWVudHM7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0JyBhcyBjb25zdGFudF9zeXN0ZW07CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CmltcG9ydCAnbG9nZ2luZy5kYXJ0JzsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKaW1wb3J0ICd0eXBlcy5kYXJ0JzsKCi8vLyBbSW52b2tlRHluYW1pY1NwZWNpYWxpemVyXSBhbmQgaXRzIHN1YmNsYXNzZXMgYXJlIGhlbHBlcnMgdG8KLy8vIG9wdGltaXplIGludGVyY2VwdGVkIGR5bmFtaWMgY2FsbHMuIEl0IGtub3dzIHdoYXQgaW5wdXQgdHlwZXMKLy8vIHdvdWxkIGJlIGJlbmVmaWNpYWwgZm9yIHBlcmZvcm1hbmNlLCBhbmQgaG93IHRvIGNoYW5nZSBhIGludm9rZQovLy8gZHluYW1pYyB0byBhIGJ1aWx0aW4gaW5zdHJ1Y3Rpb24gKGUuZy4gSEluZGV4LCBIQml0Tm90KS4KY2xhc3MgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyIHsKICBjb25zdCBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIoKTsKCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFJlc3VsdFR5cGVGb3JTZWxlY3RvcigKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwgaW5zdHJ1Y3Rpb24ucmVjZWl2ZXJUeXBlLCByZXN1bHRzKTsKICB9CgogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBjbGVhckFsbFNpZGVFZmZlY3RzKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuY2xlYXJBbGxTaWRlRWZmZWN0cygpOwogICAgaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgIGluc3RydWN0aW9uLnNldFVzZUd2bigpOwogIH0KCiAgU2VsZWN0b3IgcmVuYW1lVG9PcHRpbWl6ZWRTZWxlY3RvcigKICAgICAgU3RyaW5nIG5hbWUsIFNlbGVjdG9yIHNlbGVjdG9yLCBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpIHsKICAgIGlmIChzZWxlY3Rvci5uYW1lID09IG5hbWUpIHJldHVybiBzZWxlY3RvcjsKICAgIHJldHVybiBuZXcgU2VsZWN0b3IuY2FsbChuZXcgTmFtZShuYW1lLCBjb21tb25FbGVtZW50cy5pbnRlcmNlcHRvcnNMaWJyYXJ5KSwKICAgICAgICBuZXcgQ2FsbFN0cnVjdHVyZShzZWxlY3Rvci5hcmd1bWVudENvdW50KSk7CiAgfQoKICBjb25zdGFudF9zeXN0ZW0uT3BlcmF0aW9uIG9wZXJhdGlvbigpID0+IG51bGw7CgogIHN0YXRpYyBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIgbG9va3VwU3BlY2lhbGl6ZXIoU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgIGlmIChzZWxlY3Rvci5pc0luZGV4KSByZXR1cm4gY29uc3QgSW5kZXhTcGVjaWFsaXplcigpOwogICAgaWYgKHNlbGVjdG9yLmlzSW5kZXhTZXQpIHJldHVybiBjb25zdCBJbmRleEFzc2lnblNwZWNpYWxpemVyKCk7CiAgICBTdHJpbmcgbmFtZSA9IHNlbGVjdG9yLm5hbWU7CiAgICBpZiAoc2VsZWN0b3IuaXNPcGVyYXRvcikgewogICAgICBpZiAobmFtZSA9PSAndW5hcnktJykgcmV0dXJuIGNvbnN0IFVuYXJ5TmVnYXRlU3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJ34nKSByZXR1cm4gY29uc3QgQml0Tm90U3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJysnKSByZXR1cm4gY29uc3QgQWRkU3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJy0nKSByZXR1cm4gY29uc3QgU3VidHJhY3RTcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnKicpIHJldHVybiBjb25zdCBNdWx0aXBseVNwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICcvJykgcmV0dXJuIGNvbnN0IERpdmlkZVNwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICd+LycpIHJldHVybiBjb25zdCBUcnVuY2F0aW5nRGl2aWRlU3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJyUnKSByZXR1cm4gY29uc3QgTW9kdWxvU3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJz4+JykgcmV0dXJuIGNvbnN0IFNoaWZ0UmlnaHRTcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnPDwnKSByZXR1cm4gY29uc3QgU2hpZnRMZWZ0U3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJyYnKSByZXR1cm4gY29uc3QgQml0QW5kU3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJ3wnKSByZXR1cm4gY29uc3QgQml0T3JTcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnXicpIHJldHVybiBjb25zdCBCaXRYb3JTcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnPT0nKSByZXR1cm4gY29uc3QgRXF1YWxzU3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJzwnKSByZXR1cm4gY29uc3QgTGVzc1NwZWNpYWxpemVyKCk7CiAgICAgIGlmIChuYW1lID09ICc8PScpIHJldHVybiBjb25zdCBMZXNzRXF1YWxTcGVjaWFsaXplcigpOwogICAgICBpZiAobmFtZSA9PSAnPicpIHJldHVybiBjb25zdCBHcmVhdGVyU3BlY2lhbGl6ZXIoKTsKICAgICAgaWYgKG5hbWUgPT0gJz49JykgcmV0dXJuIGNvbnN0IEdyZWF0ZXJFcXVhbFNwZWNpYWxpemVyKCk7CiAgICAgIHJldHVybiBjb25zdCBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIoKTsKICAgIH0KICAgIGlmIChzZWxlY3Rvci5pc0NhbGwpIHsKICAgICAgaWYgKHNlbGVjdG9yLm5hbWVkQXJndW1lbnRzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgaW50IGFyZ3VtZW50Q291bnQgPSBzZWxlY3Rvci5hcmd1bWVudENvdW50OwogICAgICAgIGlmIChhcmd1bWVudENvdW50ID09IDApIHsKICAgICAgICAgIGlmIChuYW1lID09ICdhYnMnKSByZXR1cm4gY29uc3QgQWJzU3BlY2lhbGl6ZXIoKTsKICAgICAgICAgIGlmIChuYW1lID09ICdyb3VuZCcpIHJldHVybiBjb25zdCBSb3VuZFNwZWNpYWxpemVyKCk7CiAgICAgICAgICBpZiAobmFtZSA9PSAndHJpbScpIHJldHVybiBjb25zdCBUcmltU3BlY2lhbGl6ZXIoKTsKICAgICAgICB9IGVsc2UgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkgewogICAgICAgICAgaWYgKG5hbWUgPT0gJ2NvZGVVbml0QXQnKSByZXR1cm4gY29uc3QgQ29kZVVuaXRBdFNwZWNpYWxpemVyKCk7CiAgICAgICAgICBpZiAobmFtZSA9PSAnY29tcGFyZVRvJykgcmV0dXJuIGNvbnN0IENvbXBhcmVUb1NwZWNpYWxpemVyKCk7CiAgICAgICAgICBpZiAobmFtZSA9PSAncmVtYWluZGVyJykgcmV0dXJuIGNvbnN0IFJlbWFpbmRlclNwZWNpYWxpemVyKCk7CiAgICAgICAgICBpZiAobmFtZSA9PSAnc3Vic3RyaW5nJykgcmV0dXJuIGNvbnN0IFN1YnN0cmluZ1NwZWNpYWxpemVyKCk7CiAgICAgICAgICBpZiAobmFtZSA9PSAnY29udGFpbnMnKSByZXR1cm4gY29uc3QgUGF0dGVybk1hdGNoU3BlY2lhbGl6ZXIoKTsKICAgICAgICAgIGlmIChuYW1lID09ICdpbmRleE9mJykgcmV0dXJuIGNvbnN0IFBhdHRlcm5NYXRjaFNwZWNpYWxpemVyKCk7CiAgICAgICAgICBpZiAobmFtZSA9PSAnc3RhcnRzV2l0aCcpIHJldHVybiBjb25zdCBQYXR0ZXJuTWF0Y2hTcGVjaWFsaXplcigpOwogICAgICAgICAgaWYgKG5hbWUgPT0gJ2VuZHNXaXRoJykgcmV0dXJuIGNvbnN0IFBhdHRlcm5NYXRjaFNwZWNpYWxpemVyKCk7CiAgICAgICAgfSBlbHNlIGlmIChhcmd1bWVudENvdW50ID09IDIpIHsKICAgICAgICAgIGlmIChuYW1lID09ICdzdWJzdHJpbmcnKSByZXR1cm4gY29uc3QgU3Vic3RyaW5nU3BlY2lhbGl6ZXIoKTsKICAgICAgICAgIGlmIChuYW1lID09ICdjb250YWlucycpIHJldHVybiBjb25zdCBQYXR0ZXJuTWF0Y2hTcGVjaWFsaXplcigpOwogICAgICAgICAgaWYgKG5hbWUgPT0gJ2luZGV4T2YnKSByZXR1cm4gY29uc3QgUGF0dGVybk1hdGNoU3BlY2lhbGl6ZXIoKTsKICAgICAgICAgIGlmIChuYW1lID09ICdzdGFydHNXaXRoJykgcmV0dXJuIGNvbnN0IFBhdHRlcm5NYXRjaFNwZWNpYWxpemVyKCk7CiAgICAgICAgICBpZiAobmFtZSA9PSAnZW5kc1dpdGgnKSByZXR1cm4gY29uc3QgUGF0dGVybk1hdGNoU3BlY2lhbGl6ZXIoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjb25zdCBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIoKTsKICB9Cn0KCmNsYXNzIEluZGV4QXNzaWduU3BlY2lhbGl6ZXIgZXh0ZW5kcyBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIgewogIGNvbnN0IEluZGV4QXNzaWduU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZykgewogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgSEluc3RydWN0aW9uIGluZGV4ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdOwogICAgaWYgKHJlY2VpdmVyCiAgICAgICAgLmlzTXV0YWJsZUluZGV4YWJsZShjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNZXJnZSB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIGlmIHN0YXRlbWVudC4KICAgIGlmIChpbmRleC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseUZhbHNlICYmCiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBhbm5vdGF0aW9ucyBvbiB0aGUgcG9zc2libGUgdGFyZ2V0cwogICAgICAgIC8vIGFuZCB1c2VkIHRoZWlyIHBhcmFtZXRlciBjaGVjayBwb2xpY3kgaGVyZS4KICAgICAgICBjbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3kobnVsbCkuaXNFbWl0dGVkKSB7CiAgICAgIC8vIFdlIHdhbnQgdGhlIHJpZ2h0IGNoZWNrZWQgbW9kZSBlcnJvci4KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgSEluc3RydWN0aW9uIHZhbHVlID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzNdOwogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBhbm5vdGF0aW9ucyBvbiB0aGUgcG9zc2libGUgdGFyZ2V0cwogICAgLy8gYW5kIHVzZWQgdGhlaXIgcGFyYW1ldGVyIGNoZWNrIHBvbGljeSBoZXJlLgogICAgaWYgKGNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YS5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShudWxsKS5pc0VtaXR0ZWQpIHsKICAgICAgaWYgKCFfdmFsdWVQYXJhbWV0ZXJDaGVja0Fsd2F5c1N1Y2NlZWRzKAogICAgICAgICAgaW5zdHJ1Y3Rpb24sIHJlY2VpdmVyLCB2YWx1ZSwgY29tbW9uRWxlbWVudHMsIGNsb3NlZFdvcmxkKSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICBISW5kZXhBc3NpZ24gY29udmVydGVkID0gbmV3IEhJbmRleEFzc2lnbihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICAgIHJlY2VpdmVyLCBpbmRleCwgdmFsdWUsIGluc3RydWN0aW9uLnNlbGVjdG9yKTsKICAgIGxvZz8ucmVnaXN0ZXJJbmRleEFzc2lnbihpbnN0cnVjdGlvbiwgY29udmVydGVkKTsKICAgIHJldHVybiBjb252ZXJ0ZWQ7CiAgfQoKICAvLy8gUmV0dXJucyBbdHJ1ZV0gaWYgW3ZhbHVlXSBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzIGZvciBiZWluZyBzdG9yZWQgaW50bwogIC8vLyBpbmRleGFibGUgW3JlY2VpdmVyXS4KICBib29sIF92YWx1ZVBhcmFtZXRlckNoZWNrQWx3YXlzU3VjY2VlZHMoCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsCiAgICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSwKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIC8vIEhhbmRsZSB0eXBlZCBhcnJheXMgYnkgcmVjb2duaXppbmcgdGhlIGV4YWN0IGltcGxlbWVudGF0aW9uIG9mIGBbXT1gIGFuZAogICAgLy8gY2hlY2tpbmcgaWYgW3ZhbHVlXSBoYXMgdGhlIGFwcHJvcHJpYXRlIHR5cGUuCiAgICBpZiAoaW5zdHJ1Y3Rpb24uZWxlbWVudCAhPSBudWxsKSB7CiAgICAgIENsYXNzRW50aXR5IGNscyA9IGluc3RydWN0aW9uLmVsZW1lbnQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgIGlmIChjbHMgPT0gY29tbW9uRWxlbWVudHMudHlwZWRBcnJheU9mSW50Q2xhc3MpIHsKICAgICAgICByZXR1cm4gdmFsdWUKICAgICAgICAgICAgLmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZTsKICAgICAgfSBlbHNlIGlmIChjbHMgPT0gY29tbW9uRWxlbWVudHMudHlwZWRBcnJheU9mRG91YmxlQ2xhc3MpIHsKICAgICAgICByZXR1cm4gdmFsdWUuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZTsKICAgICAgfQogICAgfQoKICAgIC8vIFRoZSB0eXBlIGNoZWNrIHdpbGwgcGFzcyBpZiBpdCBwYXNzZWQgYmVmb3JlLiBXZSBrbm93IGl0IHBhc3NlZCBiZWZvcmUgaWYKICAgIC8vIHRoZSB2YWx1ZSB3YXMgbG9hZGVkIGZyb20gdGhlIHNhbWUgaW5kZXhhYmxlLgogICAgaWYgKHZhbHVlIGlzIEhJbmRleCkgewogICAgICBpZiAodmFsdWUucmVjZWl2ZXIubm9uQ2hlY2soKSA9PSByZWNlaXZlci5ub25DaGVjaygpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgpjbGFzcyBJbmRleFNwZWNpYWxpemVyIGV4dGVuZHMgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyIHsKICBjb25zdCBJbmRleFNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIHZhciBhYnN0cmFjdFZhbHVlRG9tYWluID0gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICAgIGlmIChpbnN0cnVjdGlvbi5pbnB1dHNbMV0KICAgICAgICAuaXNJbmRleGFibGVQcmltaXRpdmUoYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKGluc3RydWN0aW9uLmlucHV0c1syXQogICAgICAgICAgICAuaXNJbnRlZ2VyKGFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc1BvdGVudGlhbGx5RmFsc2UgJiYKICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IGFubm90YXRpb25zIG9uIHRoZSBwb3NzaWJsZSB0YXJnZXRzCiAgICAgICAgLy8gYW5kIHVzZWQgdGhlaXIgcGFyYW1ldGVyIGNoZWNrIHBvbGljeSBoZXJlLgogICAgICAgIGNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YS5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShudWxsKS5pc0VtaXR0ZWQpIHsKICAgICAgLy8gV2Ugd2FudCB0aGUgcmlnaHQgY2hlY2tlZCBtb2RlIGVycm9yLgogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlID0KICAgICAgICBpbnN0cnVjdGlvbi5nZXREYXJ0UmVjZWl2ZXIoY2xvc2VkV29ybGQpLmluc3RydWN0aW9uVHlwZTsKICAgIEFic3RyYWN0VmFsdWUgZWxlbWVudFR5cGUgPQogICAgICAgIEFic3RyYWN0VmFsdWVGYWN0b3J5LmluZmVycmVkUmVzdWx0VHlwZUZvclNlbGVjdG9yKAogICAgICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwgcmVjZWl2ZXJUeXBlLCByZXN1bHRzKTsKICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzVHlwZWRBcnJheShyZWNlaXZlclR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgZWxlbWVudFR5cGUgPSBhYnN0cmFjdFZhbHVlRG9tYWluLmV4Y2x1ZGVOdWxsKGVsZW1lbnRUeXBlKTsKICAgIH0KICAgIEhJbmRleCBjb252ZXJ0ZWQgPSBuZXcgSEluZGV4KGluc3RydWN0aW9uLmlucHV0c1sxXSwgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLCBlbGVtZW50VHlwZSk7CiAgICBsb2c/LnJlZ2lzdGVySW5kZXgoaW5zdHJ1Y3Rpb24sIGNvbnZlcnRlZCk7CiAgICByZXR1cm4gY29udmVydGVkOwogIH0KfQoKY2xhc3MgQml0Tm90U3BlY2lhbGl6ZXIgZXh0ZW5kcyBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIgewogIGNvbnN0IEJpdE5vdFNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5VbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmJpdE5vdDsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICAvLyBBbGwgYml0d2lzZSBvcGVyYXRpb25zIG9uIHByaW1pdGl2ZSB0eXBlcyBlaXRoZXIgcHJvZHVjZSBhbgogICAgLy8gaW50ZWdlciBvciB0aHJvdyBhbiBlcnJvci4KICAgIGlmIChpbnN0cnVjdGlvbi5pbnB1dHNbMV0KICAgICAgICAuaXNQcmltaXRpdmVPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi51aW50MzJUeXBlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIGlmIChpbnB1dC5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIEhCaXROb3QgY29udmVydGVkID0gbmV3IEhCaXROb3QoaW5wdXQsIGluc3RydWN0aW9uLnNlbGVjdG9yLAogICAgICAgICAgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpKTsKICAgICAgbG9nPy5yZWdpc3RlckJpdE5vdChpbnN0cnVjdGlvbiwgY29udmVydGVkKTsKICAgICAgcmV0dXJuIGNvbnZlcnRlZDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KfQoKY2xhc3MgVW5hcnlOZWdhdGVTcGVjaWFsaXplciBleHRlbmRzIEludm9rZUR5bmFtaWNTcGVjaWFsaXplciB7CiAgY29uc3QgVW5hcnlOZWdhdGVTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uVW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5uZWdhdGU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgSEluc3RydWN0aW9uIG9wZXJhbmQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBpZiAob3BlcmFuZAogICAgICAgIC5pc051bWJlck9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIC8vIFdlIGhhdmUgaW50ZWdlciBzdWJjbGFzc2VzIHRoYXQgcmVwcmVzZW50IHJhbmdlcywgc28gd2lkZW4gYW55IGludAogICAgICAvLyBzdWJjbGFzcyB0byBmdWxsIGludGVnZXIuCiAgICAgIGlmIChvcGVyYW5kCiAgICAgICAgICAuaXNJbnRlZ2VyT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmludFR5cGU7CiAgICAgIH0KICAgICAgaWYgKG9wZXJhbmQKICAgICAgICAgIC5pc0RvdWJsZU9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5kb3VibGVUeXBlOwogICAgICB9CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLm51bVR5cGU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZykgewogICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgaWYgKGlucHV0LmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgSE5lZ2F0ZSBjb252ZXJ0ZWQgPSBuZXcgSE5lZ2F0ZShpbnB1dCwgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsCiAgICAgICAgICBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCkpOwogICAgICBsb2c/LnJlZ2lzdGVyVW5hcnlOZWdhdGUoaW5zdHJ1Y3Rpb24sIGNvbnZlcnRlZCk7CiAgICAgIHJldHVybiBjb252ZXJ0ZWQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmNsYXNzIEFic1NwZWNpYWxpemVyIGV4dGVuZHMgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyIHsKICBjb25zdCBBYnNTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uVW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5hYnM7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgaWYgKGlucHV0CiAgICAgICAgLmlzTnVtYmVyT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uZXhjbHVkZU51bGwoaW5wdXQuaW5zdHJ1Y3Rpb25UeXBlKTsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBpZiAoaW5wdXQuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBIQWJzIGNvbnZlcnRlZCA9IG5ldyBIQWJzKGlucHV0LCBpbnN0cnVjdGlvbi5zZWxlY3RvciwKICAgICAgICAgIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKSk7CiAgICAgIGxvZz8ucmVnaXN0ZXJBYnMoaW5zdHJ1Y3Rpb24sIGNvbnZlcnRlZCk7CiAgICAgIHJldHVybiBjb252ZXJ0ZWQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHt9Cn0KCmFic3RyYWN0IGNsYXNzIEJpbmFyeUFyaXRobWV0aWNTcGVjaWFsaXplciBleHRlbmRzIEludm9rZUR5bmFtaWNTcGVjaWFsaXplciB7CiAgY29uc3QgQmluYXJ5QXJpdGhtZXRpY1NwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLmlucHV0c1syXTsKICAgIGlmIChsZWZ0CiAgICAgICAgICAgIC5pc0ludGVnZXJPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICByaWdodAogICAgICAgICAgICAuaXNJbnRlZ2VyT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmludFR5cGU7CiAgICB9CiAgICBpZiAobGVmdC5pc051bWJlck9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIGlmIChsZWZ0CiAgICAgICAgICAgICAgLmlzRG91YmxlT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUgfHwKICAgICAgICAgIHJpZ2h0CiAgICAgICAgICAgICAgLmlzRG91YmxlT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5kb3VibGVUeXBlOwogICAgICB9CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLm51bVR5cGU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgYm9vbCBpc0J1aWx0aW4oSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIGluc3RydWN0aW9uLmlucHV0c1sxXQogICAgICAgICAgICAuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMl0KICAgICAgICAgICAgLmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZykgewogICAgaWYgKGlzQnVpbHRpbihpbnN0cnVjdGlvbiwgY2xvc2VkV29ybGQpKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBidWlsdGluID0KICAgICAgICAgIG5ld0J1aWx0aW5WYXJpYW50KGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgICAgIGlmIChsb2cgIT0gbnVsbCkgewogICAgICAgIHJlZ2lzdGVyT3B0aW1pemF0aW9uKGxvZywgaW5zdHJ1Y3Rpb24sIGJ1aWx0aW4pOwogICAgICB9CiAgICAgIGlmIChidWlsdGluICE9IG51bGwpIHsKICAgICAgICByZXR1cm4gYnVpbHRpbjsKICAgICAgfQogICAgICAvLyBFdmVuIGlmIHRoZXJlIGlzIG5vIGJ1aWx0aW4gZXF1aXZhbGVudCBpbnN0cnVjdGlvbiwgd2Uga25vdwogICAgICAvLyB0aGUgaW5zdHJ1Y3Rpb24gZG9lcyBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3QsIGFuZCB0aGF0IGl0CiAgICAgIC8vIGNhbiBiZSBHVk4nZWQuCiAgICAgIGNsZWFyQWxsU2lkZUVmZmVjdHMoaW5zdHJ1Y3Rpb24pOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBib29sIGlucHV0c0FyZU51bShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMl07CiAgICByZXR1cm4gbGVmdAogICAgICAgICAgICAuaXNOdW1iZXJPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICByaWdodC5pc051bWJlck9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlOwogIH0KCiAgYm9vbCBpbnB1dHNBcmVQb3NpdGl2ZUludGVnZXJzKAogICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMl07CiAgICByZXR1cm4gbGVmdAogICAgICAgICAgICAuaXNQb3NpdGl2ZUludGVnZXJPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICByaWdodAogICAgICAgICAgICAuaXNQb3NpdGl2ZUludGVnZXJPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWU7CiAgfQoKICBib29sIGlucHV0c0FyZVVJbnQzMShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMl07CiAgICByZXR1cm4gbGVmdC5pc1VJbnQzMShjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcmlnaHQuaXNVSW50MzEoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZTsKICB9CgogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudChISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKTsKCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCk7Cn0KCmNsYXNzIEFkZFNwZWNpYWxpemVyIGV4dGVuZHMgQmluYXJ5QXJpdGhtZXRpY1NwZWNpYWxpemVyIHsKICBjb25zdCBBZGRTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKGlucHV0c0FyZVVJbnQzMShpbnN0cnVjdGlvbiwgY2xvc2VkV29ybGQpKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnVpbnQzMlR5cGU7CiAgICB9CiAgICBpZiAoaW5wdXRzQXJlUG9zaXRpdmVJbnRlZ2VycyhpbnN0cnVjdGlvbiwgY2xvc2VkV29ybGQpKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnBvc2l0aXZlSW50VHlwZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uYWRkOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgSEFkZCgKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMV0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLAogICAgICAgIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKSB7CiAgICBsb2cucmVnaXN0ZXJBZGQob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgpjbGFzcyBEaXZpZGVTcGVjaWFsaXplciBleHRlbmRzIEJpbmFyeUFyaXRobWV0aWNTcGVjaWFsaXplciB7CiAgY29uc3QgRGl2aWRlU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmRpdmlkZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBpZiAobGVmdC5pc051bWJlck9yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmRvdWJsZVR5cGU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgSERpdmlkZShpbnN0cnVjdGlvbi5pbnB1dHNbMV0sIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5kb3VibGVUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3RlckRpdmlkZShvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmNsYXNzIE1vZHVsb1NwZWNpYWxpemVyIGV4dGVuZHMgQmluYXJ5QXJpdGhtZXRpY1NwZWNpYWxpemVyIHsKICBjb25zdCBNb2R1bG9TcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKGlucHV0c0FyZVBvc2l0aXZlSW50ZWdlcnMoaW5zdHJ1Y3Rpb24sIGNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5wb3NpdGl2ZUludFR5cGU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLm1vZHVsbzsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudChISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICAvLyBNb2R1bG8gY2Fubm90IGJlIG1hcHBlZCB0byB0aGUgbmF0aXZlIG9wZXJhdG9yIChkaWZmZXJlbnQgc2VtYW50aWNzKS4KCiAgICAvLyBXZSBjYW4gdXNlIEhSZW1haW5kZXIgaWYgYm90aCBpbnB1dHMgYXJlIG5vbi1uZWdhdGl2ZSBhbmQgdGhlIHJlY2VpdmVyCiAgICAvLyBjYW5ub3QgYmUgLTAuMC4gIE5vdGUgdGhhdCAtMC4wIGlzIGNvbnNpZGVyZWQgdG8gYmUgYW4gaW50LCBzbyB1bnRpbCB3ZQogICAgLy8gdHJhY2sgLTAuMCBwcmVjaXNlbHksIHdlIGhhdmUgdG8gc3ludGF0aWNhbGx5IGZpbHRlciBpbnB1dHMgdGhhdCBjYW5ub3QKICAgIC8vIGdlbmVyYXRlIC0wLjAuCiAgICBib29sIGNhbkJlUG9zaXRpdmVaZXJvKEhJbnN0cnVjdGlvbiBpbnB1dCkgewogICAgICBpZiAoaW5wdXQgaXMgSENvbnN0YW50KSB7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGlucHV0LmNvbnN0YW50OwogICAgICAgIGlmICh2YWx1ZSBpcyBEb3VibGVDb25zdGFudFZhbHVlICYmIHZhbHVlLmlzWmVybykgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKHZhbHVlIGlzIEludENvbnN0YW50VmFsdWUgJiYgdmFsdWUuaXNaZXJvKSByZXR1cm4gdHJ1ZTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgYm9vbCBpblBoaSA9IGZhbHNlOwogICAgYm9vbCBjYW5CZU5lZ2F0aXZlWmVybyhISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgICAgaWYgKGlucHV0IGlzIEhDb25zdGFudCkgewogICAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBpbnB1dC5jb25zdGFudDsKICAgICAgICBpZiAodmFsdWUgaXMgRG91YmxlQ29uc3RhbnRWYWx1ZSAmJiB2YWx1ZS5pc01pbnVzWmVybykgcmV0dXJuIHRydWU7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChpbnB1dCBpcyBIQWRkKSB7CiAgICAgICAgLy8gJysnIGNhbiBvbmx5IGdlbmVyYXRlIC0wLjAgd2hlbiBib3RoIGlucHV0cyBhcmUgLTAuMC4KICAgICAgICByZXR1cm4gY2FuQmVOZWdhdGl2ZVplcm8oaW5wdXQubGVmdCkgJiYgY2FuQmVOZWdhdGl2ZVplcm8oaW5wdXQucmlnaHQpOwogICAgICB9CiAgICAgIGlmIChpbnB1dCBpcyBIU3VidHJhY3QpIHsKICAgICAgICByZXR1cm4gY2FuQmVOZWdhdGl2ZVplcm8oaW5wdXQubGVmdCkgJiYgY2FuQmVQb3NpdGl2ZVplcm8oaW5wdXQucmlnaHQpOwogICAgICB9CiAgICAgIGlmIChpbnB1dCBpcyBIUGhpKSB7CiAgICAgICAgaWYgKGluUGhpKSByZXR1cm4gdHJ1ZTsKICAgICAgICBpblBoaSA9IHRydWU7CiAgICAgICAgYm9vbCByZXN1bHQgPSBpbnB1dC5pbnB1dHMuYW55KGNhbkJlTmVnYXRpdmVaZXJvKTsKICAgICAgICBpblBoaSA9IGZhbHNlOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgaWYgKGlucHV0c0FyZVBvc2l0aXZlSW50ZWdlcnMoaW5zdHJ1Y3Rpb24sIGNsb3NlZFdvcmxkKSAmJgogICAgICAgICFjYW5CZU5lZ2F0aXZlWmVybyhpbnN0cnVjdGlvbi5nZXREYXJ0UmVjZWl2ZXIoY2xvc2VkV29ybGQpKSkgewogICAgICByZXR1cm4gbmV3IEhSZW1haW5kZXIoCiAgICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMV0sCiAgICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwKICAgICAgICAgIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKSk7CiAgICB9CiAgICAvLyBUT0RPKHNyYSk6CiAgICAvLyAgIGEgJSBOIC0tPiAgYSAmIChOLTEpLCBOPTJeaywgd2hlcmUgYT49MCwgZG9lcyBub3QgaGF2ZSAtMC4wIHByb2JsZW0uCgogICAgLy8gVE9ETyhzcmEpOiBXZSBjb3VsZCBhdm9pZCBwcm9ibGVtcyB3aXRoIC0wLjAgaWYgd2UgZ2VuZXJhdGUgeCAlIHkgYXMgKHggKwogICAgLy8gMCkgJSB5LCBidXQgd2Ugd291bGQgaGF2ZSB0byBmaXggSEFkZCBvcHRpbWl6YXRpb25zLgoKICAgIC8vIFRPRE8oc3JhKTogV2UgY291bGQgcmVwbGFjZSAkbW9kIHdpdGggSFJlbWFpbmRlciB3aGVuIHdlIGRvbid0IGNhcmUgYWJvdXQKICAgIC8vIGEgLTAuMCByZXN1bHQgKGUuZy4gYSAlIDEwID09IDAsIGFbaSAlIDNdKS4gVGhpcyBpcyB0cmlja3ksIHNpbmNlIHdlCiAgICAvLyBkb24ndCB3YW50IHRvIHJ1aW4gR1ZOIG9wcG9ydHVuaXRpZXMuCiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3Rlck1vZHVsbyhvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmNsYXNzIFJlbWFpbmRlclNwZWNpYWxpemVyIGV4dGVuZHMgQmluYXJ5QXJpdGhtZXRpY1NwZWNpYWxpemVyIHsKICBjb25zdCBSZW1haW5kZXJTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKGlucHV0c0FyZVBvc2l0aXZlSW50ZWdlcnMoaW5zdHJ1Y3Rpb24sIGNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5wb3NpdGl2ZUludFR5cGU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLnJlbWFpbmRlcjsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudChISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEhSZW1haW5kZXIoCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwKICAgICAgICBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyUmVtYWluZGVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKY2xhc3MgTXVsdGlwbHlTcGVjaWFsaXplciBleHRlbmRzIEJpbmFyeUFyaXRobWV0aWNTcGVjaWFsaXplciB7CiAgY29uc3QgTXVsdGlwbHlTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0ubXVsdGlwbHk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgaWYgKGlucHV0c0FyZVBvc2l0aXZlSW50ZWdlcnMoaW5zdHJ1Y3Rpb24sIGNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5wb3NpdGl2ZUludFR5cGU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgSE11bHRpcGx5KAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1sxXSwKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsCiAgICAgICAgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3Rlck11bHRpcGx5KG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKY2xhc3MgU3VidHJhY3RTcGVjaWFsaXplciBleHRlbmRzIEJpbmFyeUFyaXRobWV0aWNTcGVjaWFsaXplciB7CiAgY29uc3QgU3VidHJhY3RTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uc3VidHJhY3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBIU3VidHJhY3QoCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwKICAgICAgICBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyU3VidHJhY3Qob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgpjbGFzcyBUcnVuY2F0aW5nRGl2aWRlU3BlY2lhbGl6ZXIgZXh0ZW5kcyBCaW5hcnlBcml0aG1ldGljU3BlY2lhbGl6ZXIgewogIGNvbnN0IFRydW5jYXRpbmdEaXZpZGVTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0udHJ1bmNhdGluZ0RpdmlkZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoaGFzVWludDMxUmVzdWx0KGluc3RydWN0aW9uLCBjbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4udWludDMxVHlwZTsKICAgIH0KICAgIGlmIChpbnB1dHNBcmVQb3NpdGl2ZUludGVnZXJzKGluc3RydWN0aW9uLCBjbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4ucG9zaXRpdmVJbnRUeXBlOwogICAgfQogICAgaWYgKGlucHV0c0FyZU51bShpbnN0cnVjdGlvbiwgY2xvc2VkV29ybGQpKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmludFR5cGU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgYm9vbCBpc05vdFplcm8oSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBpZiAoIWluc3RydWN0aW9uLmlzQ29uc3RhbnRJbnRlZ2VyKCkpIHJldHVybiBmYWxzZTsKICAgIEhDb25zdGFudCByaWdodENvbnN0YW50ID0gaW5zdHJ1Y3Rpb247CiAgICBJbnRDb25zdGFudFZhbHVlIGludENvbnN0YW50ID0gcmlnaHRDb25zdGFudC5jb25zdGFudDsKICAgIEJpZ0ludCBjb3VudCA9IGludENvbnN0YW50LmludFZhbHVlOwogICAgcmV0dXJuIGNvdW50ICE9IEJpZ0ludC56ZXJvOwogIH0KCiAgYm9vbCBpc1R3b09yR3JlYXRlcihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGlmICghaW5zdHJ1Y3Rpb24uaXNDb25zdGFudEludGVnZXIoKSkgcmV0dXJuIGZhbHNlOwogICAgSENvbnN0YW50IHJpZ2h0Q29uc3RhbnQgPSBpbnN0cnVjdGlvbjsKICAgIEludENvbnN0YW50VmFsdWUgaW50Q29uc3RhbnQgPSByaWdodENvbnN0YW50LmNvbnN0YW50OwogICAgQmlnSW50IGNvdW50ID0gaW50Q29uc3RhbnQuaW50VmFsdWU7CiAgICByZXR1cm4gY291bnQgPj0gQmlnSW50LnR3bzsKICB9CgogIGJvb2wgaGFzVWludDMxUmVzdWx0KEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLmlucHV0c1syXTsKICAgIGlmIChyaWdodAogICAgICAgIC5pc1Bvc2l0aXZlSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIGlmIChsZWZ0LmlzVUludDMxKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICAgIGlzTm90WmVybyhyaWdodCkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAobGVmdC5pc1VJbnQzMihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICBpc1R3b09yR3JlYXRlcihyaWdodCkpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZykgewogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdOwogICAgaWYgKGlzQnVpbHRpbihpbnN0cnVjdGlvbiwgY2xvc2VkV29ybGQpKSB7CiAgICAgIGlmIChyaWdodAogICAgICAgICAgICAgIC5pc1Bvc2l0aXZlSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICBpc05vdFplcm8ocmlnaHQpKSB7CiAgICAgICAgaWYgKGhhc1VpbnQzMVJlc3VsdChpbnN0cnVjdGlvbiwgY2xvc2VkV29ybGQpKSB7CiAgICAgICAgICBISW5zdHJ1Y3Rpb24gY29udmVydGVkID0KICAgICAgICAgICAgICBuZXdCdWlsdGluVmFyaWFudChpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogICAgICAgICAgaWYgKGxvZyAhPSBudWxsKSB7CiAgICAgICAgICAgIHJlZ2lzdGVyT3B0aW1pemF0aW9uKGxvZywgaW5zdHJ1Y3Rpb24sIGNvbnZlcnRlZCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gY29udmVydGVkOwogICAgICAgIH0KICAgICAgICAvLyBXZSBjYW4gY2FsbCBfdGRpdkZhc3QgYmVjYXVzZSB0aGUgcmhzIGlzIGEgMzJiaXQgaW50ZWdlcgogICAgICAgIC8vIGFuZCBub3QgMCwgbm9yIC0xLgogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yID0gcmVuYW1lVG9PcHRpbWl6ZWRTZWxlY3RvcigKICAgICAgICAgICAgJ190ZGl2RmFzdCcsIGluc3RydWN0aW9uLnNlbGVjdG9yLCBjb21tb25FbGVtZW50cyk7CiAgICAgICAgaWYgKGxvZyAhPSBudWxsKSB7CiAgICAgICAgICByZWdpc3Rlck9wdGltaXphdGlvbihsb2csIGluc3RydWN0aW9uLCBudWxsKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2xlYXJBbGxTaWRlRWZmZWN0cyhpbnN0cnVjdGlvbik7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudChISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEhUcnVuY2F0aW5nRGl2aWRlKAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1sxXSwKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsCiAgICAgICAgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3RlclRydW5jYXRpbmdEaXZpZGUob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBCaW5hcnlCaXRPcFNwZWNpYWxpemVyIGV4dGVuZHMgQmluYXJ5QXJpdGhtZXRpY1NwZWNpYWxpemVyIHsKICBjb25zdCBCaW5hcnlCaXRPcFNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICAvLyBBbGwgYml0d2lzZSBvcGVyYXRpb25zIG9uIG51bWJlciB0eXBlcyBlaXRoZXIgcHJvZHVjZSBhbiB1bnNpZ25lZCAzMi1iaXQKICAgIC8vIGludGVnZXIgb3IgdGhyb3cgYW4gZXJyb3IuCiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIGlmIChsZWZ0LmlzTnVtYmVyT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4udWludDMyVHlwZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBib29sIGFyZ3VtZW50TGVzc1RoYW4zMihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIHJldHVybiBhcmd1bWVudEluUmFuZ2UoaW5zdHJ1Y3Rpb24sIDAsIDMxKTsKICB9CgogIGJvb2wgYXJndW1lbnRJblJhbmdlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgaW50IGxvdywgaW50IGhpZ2gpIHsKICAgIGlmIChpbnN0cnVjdGlvbi5pc0NvbnN0YW50SW50ZWdlcigpKSB7CiAgICAgIEhDb25zdGFudCByaWdodENvbnN0YW50ID0gaW5zdHJ1Y3Rpb247CiAgICAgIEludENvbnN0YW50VmFsdWUgaW50Q29uc3RhbnQgPSByaWdodENvbnN0YW50LmNvbnN0YW50OwogICAgICBpbnQgdmFsdWUgPSBpbnRDb25zdGFudC5pbnRWYWx1ZS50b0ludCgpOwogICAgICBhc3NlcnQoaW50Q29uc3RhbnQuaW50VmFsdWUgPT0KICAgICAgICAgIG5ldyBCaWdJbnQuZnJvbShpbnRDb25zdGFudC5pbnRWYWx1ZS50b0ludCgpKSk7CiAgICAgIHJldHVybiB2YWx1ZSA+PSBsb3cgJiYgdmFsdWUgPD0gaGlnaDsKICAgIH0KICAgIC8vIFRPRE8oc3JhKTogSW50ZWdyYXRlIHdpdGggdGhlIGJpdC13aWR0aCBhbmFseXNpcyBpbiBjb2RlZ2VuLmRhcnQuCiAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSEJpdEFuZCkgewogICAgICByZXR1cm4gbG93ID09IDAgJiYKICAgICAgICAgIChhcmd1bWVudEluUmFuZ2UoaW5zdHJ1Y3Rpb24uaW5wdXRzWzBdLCBsb3csIGhpZ2gpIHx8CiAgICAgICAgICAgICAgYXJndW1lbnRJblJhbmdlKGluc3RydWN0aW9uLmlucHV0c1sxXSwgbG93LCBoaWdoKSk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIGlzUG9zaXRpdmUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIC8vIFRPRE86IFdlIHNob3VsZCB1c2UgdGhlIHZhbHVlIHJhbmdlIGFuYWx5c2lzLiBDdXJyZW50bHksIHJhbmdlcwogICAgLy8gYXJlIGRpc2NhcmRlZCBqdXN0IGFmdGVyIHRoZSBhbmFseXNpcy4KICAgIHJldHVybiBpbnN0cnVjdGlvbgogICAgICAgIC5pc1Bvc2l0aXZlSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlOwogIH0KfQoKY2xhc3MgU2hpZnRMZWZ0U3BlY2lhbGl6ZXIgZXh0ZW5kcyBCaW5hcnlCaXRPcFNwZWNpYWxpemVyIHsKICBjb25zdCBTaGlmdExlZnRTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uc2hpZnRMZWZ0OwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZykgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMl07CiAgICBpZiAobGVmdC5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIGlmIChhcmd1bWVudExlc3NUaGFuMzIocmlnaHQpKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGNvbnZlcnRlZCA9CiAgICAgICAgICAgIG5ld0J1aWx0aW5WYXJpYW50KGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgICAgICAgaWYgKGxvZyAhPSBudWxsKSB7CiAgICAgICAgICByZWdpc3Rlck9wdGltaXphdGlvbihsb2csIGluc3RydWN0aW9uLCBjb252ZXJ0ZWQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY29udmVydGVkOwogICAgICB9CiAgICAgIC8vIEV2ZW4gaWYgdGhlcmUgaXMgbm8gYnVpbHRpbiBlcXVpdmFsZW50IGluc3RydWN0aW9uLCB3ZSBrbm93CiAgICAgIC8vIHRoZSBpbnN0cnVjdGlvbiBkb2VzIG5vdCBoYXZlIGFueSBzaWRlIGVmZmVjdCwgYW5kIHRoYXQgaXQKICAgICAgLy8gY2FuIGJlIEdWTidlZC4KICAgICAgY2xlYXJBbGxTaWRlRWZmZWN0cyhpbnN0cnVjdGlvbik7CiAgICAgIGlmIChpc1Bvc2l0aXZlKHJpZ2h0LCBjbG9zZWRXb3JsZCkpIHsKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciA9IHJlbmFtZVRvT3B0aW1pemVkU2VsZWN0b3IoCiAgICAgICAgICAgICdfc2hsUG9zaXRpdmUnLCBpbnN0cnVjdGlvbi5zZWxlY3RvciwgY29tbW9uRWxlbWVudHMpOwogICAgICB9CiAgICAgIGlmIChsb2cgIT0gbnVsbCkgewogICAgICAgIHJlZ2lzdGVyT3B0aW1pemF0aW9uKGxvZywgaW5zdHJ1Y3Rpb24sIG51bGwpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudChISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEhTaGlmdExlZnQoCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwKICAgICAgICBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyU2hpZnRMZWZ0KG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKY2xhc3MgU2hpZnRSaWdodFNwZWNpYWxpemVyIGV4dGVuZHMgQmluYXJ5Qml0T3BTcGVjaWFsaXplciB7CiAgY29uc3QgU2hpZnRSaWdodFNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIGlmIChsZWZ0LmlzVUludDMyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGxlZnQuaW5zdHJ1Y3Rpb25UeXBlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdOwogICAgaWYgKGxlZnQuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBpZiAoYXJndW1lbnRMZXNzVGhhbjMyKHJpZ2h0KSAmJiBpc1Bvc2l0aXZlKGxlZnQsIGNsb3NlZFdvcmxkKSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQgPQogICAgICAgICAgICBuZXdCdWlsdGluVmFyaWFudChpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogICAgICAgIGlmIChsb2cgIT0gbnVsbCkgewogICAgICAgICAgcmVnaXN0ZXJPcHRpbWl6YXRpb24obG9nLCBpbnN0cnVjdGlvbiwgY29udmVydGVkKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvbnZlcnRlZDsKICAgICAgfQogICAgICAvLyBFdmVuIGlmIHRoZXJlIGlzIG5vIGJ1aWx0aW4gZXF1aXZhbGVudCBpbnN0cnVjdGlvbiwgd2Uga25vdwogICAgICAvLyB0aGUgaW5zdHJ1Y3Rpb24gZG9lcyBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3QsIGFuZCB0aGF0IGl0CiAgICAgIC8vIGNhbiBiZSBHVk4nZWQuCiAgICAgIGNsZWFyQWxsU2lkZUVmZmVjdHMoaW5zdHJ1Y3Rpb24pOwogICAgICBpZiAoaXNQb3NpdGl2ZShyaWdodCwgY2xvc2VkV29ybGQpICYmIGlzUG9zaXRpdmUobGVmdCwgY2xvc2VkV29ybGQpKSB7CiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IgPSByZW5hbWVUb09wdGltaXplZFNlbGVjdG9yKAogICAgICAgICAgICAnX3NockJvdGhQb3NpdGl2ZScsIGluc3RydWN0aW9uLnNlbGVjdG9yLCBjb21tb25FbGVtZW50cyk7CiAgICAgICAgaWYgKGxvZyAhPSBudWxsKSB7CiAgICAgICAgICByZWdpc3Rlck9wdGltaXphdGlvbihsb2csIGluc3RydWN0aW9uLCBudWxsKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaXNQb3NpdGl2ZShsZWZ0LCBjbG9zZWRXb3JsZCkgJiYKICAgICAgICAgIHJpZ2h0LmlzTnVtYmVyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciA9IHJlbmFtZVRvT3B0aW1pemVkU2VsZWN0b3IoCiAgICAgICAgICAgICdfc2hyUmVjZWl2ZXJQb3NpdGl2ZScsIGluc3RydWN0aW9uLnNlbGVjdG9yLCBjb21tb25FbGVtZW50cyk7CiAgICAgICAgaWYgKGxvZyAhPSBudWxsKSB7CiAgICAgICAgICByZWdpc3Rlck9wdGltaXphdGlvbihsb2csIGluc3RydWN0aW9uLCBudWxsKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaXNQb3NpdGl2ZShyaWdodCwgY2xvc2VkV29ybGQpKSB7CiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IgPSByZW5hbWVUb09wdGltaXplZFNlbGVjdG9yKAogICAgICAgICAgICAnX3Nock90aGVyUG9zaXRpdmUnLCBpbnN0cnVjdGlvbi5zZWxlY3RvciwgY29tbW9uRWxlbWVudHMpOwogICAgICAgIGlmIChsb2cgIT0gbnVsbCkgewogICAgICAgICAgcmVnaXN0ZXJPcHRpbWl6YXRpb24obG9nLCBpbnN0cnVjdGlvbiwgbnVsbCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudChISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEhTaGlmdFJpZ2h0KAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1sxXSwKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsCiAgICAgICAgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5zaGlmdFJpZ2h0OwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyU2hpZnRSaWdodChvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmNsYXNzIEJpdE9yU3BlY2lhbGl6ZXIgZXh0ZW5kcyBCaW5hcnlCaXRPcFNwZWNpYWxpemVyIHsKICBjb25zdCBCaXRPclNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5iaXRPcjsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLmlucHV0c1syXTsKICAgIGlmIChsZWZ0LmlzVUludDMxKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICByaWdodC5pc1VJbnQzMShjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnVpbnQzMVR5cGU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgSEJpdE9yKAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1sxXSwKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsCiAgICAgICAgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3RlckJpdE9yKG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKY2xhc3MgQml0QW5kU3BlY2lhbGl6ZXIgZXh0ZW5kcyBCaW5hcnlCaXRPcFNwZWNpYWxpemVyIHsKICBjb25zdCBCaXRBbmRTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uYml0QW5kOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdOwogICAgaWYgKGxlZnQKICAgICAgICAgICAgLmlzUHJpbWl0aXZlT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgKGxlZnQuaXNVSW50MzEoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSB8fAogICAgICAgICAgICByaWdodC5pc1VJbnQzMShjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSkgewogICAgICByZXR1cm4gY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi51aW50MzFUeXBlOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbXB1dGVUeXBlRnJvbUlucHV0VHlwZXMoaW5zdHJ1Y3Rpb24sIHJlc3VsdHMsIGNsb3NlZFdvcmxkKTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudChISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEhCaXRBbmQoCiAgICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1syXSwKICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwKICAgICAgICBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyQml0QW5kKG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKY2xhc3MgQml0WG9yU3BlY2lhbGl6ZXIgZXh0ZW5kcyBCaW5hcnlCaXRPcFNwZWNpYWxpemVyIHsKICBjb25zdCBCaXRYb3JTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uYml0WG9yOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdOwogICAgaWYgKGxlZnQuaXNVSW50MzEoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHJpZ2h0LmlzVUludDMxKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4udWludDMxVHlwZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBIQml0WG9yKAogICAgICAgIGluc3RydWN0aW9uLmlucHV0c1sxXSwKICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsCiAgICAgICAgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3RlckJpdFhvcihvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIFJlbGF0aW9uYWxTcGVjaWFsaXplciBleHRlbmRzIEludm9rZUR5bmFtaWNTcGVjaWFsaXplciB7CiAgY29uc3QgUmVsYXRpb25hbFNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICBpZiAoaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdCiAgICAgICAgLmlzUHJpbWl0aXZlT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGU7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuY29tcHV0ZVR5cGVGcm9tSW5wdXRUeXBlcyhpbnN0cnVjdGlvbiwgcmVzdWx0cywgY2xvc2VkV29ybGQpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZykgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMl07CiAgICBpZiAobGVmdC5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcmlnaHQuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBISW5zdHJ1Y3Rpb24gY29udmVydGVkID0gbmV3QnVpbHRpblZhcmlhbnQoaW5zdHJ1Y3Rpb24sIGNsb3NlZFdvcmxkKTsKICAgICAgaWYgKGxvZyAhPSBudWxsKSB7CiAgICAgICAgcmVnaXN0ZXJPcHRpbWl6YXRpb24obG9nLCBpbnN0cnVjdGlvbiwgY29udmVydGVkKTsKICAgICAgfQogICAgICByZXR1cm4gY29udmVydGVkOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpOwoKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkKTsKfQoKY2xhc3MgRXF1YWxzU3BlY2lhbGl6ZXIgZXh0ZW5kcyBSZWxhdGlvbmFsU3BlY2lhbGl6ZXIgewogIGNvbnN0IEVxdWFsc1NwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdOwogICAgQWJzdHJhY3RWYWx1ZSBpbnN0cnVjdGlvblR5cGUgPSBsZWZ0Lmluc3RydWN0aW9uVHlwZTsKICAgIGlmIChyaWdodC5pc0NvbnN0YW50TnVsbCgpIHx8CiAgICAgICAgbGVmdAogICAgICAgICAgICAuaXNQcmltaXRpdmVPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgSEluc3RydWN0aW9uIGNvbnZlcnRlZCA9IG5ld0J1aWx0aW5WYXJpYW50KGluc3RydWN0aW9uLCBjbG9zZWRXb3JsZCk7CiAgICAgIGlmIChsb2cgIT0gbnVsbCkgewogICAgICAgIHJlZ2lzdGVyT3B0aW1pemF0aW9uKGxvZywgaW5zdHJ1Y3Rpb24sIGNvbnZlcnRlZCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvbnZlcnRlZDsKICAgIH0KICAgIGlmIChjbG9zZWRXb3JsZC5pbmNsdWRlc0Nsb3N1cmVDYWxsKAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLCBpbnN0cnVjdGlvblR5cGUpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBtYXRjaGVzID0KICAgICAgICBjbG9zZWRXb3JsZC5sb2NhdGVNZW1iZXJzKGluc3RydWN0aW9uLnNlbGVjdG9yLCBpbnN0cnVjdGlvblR5cGUpOwogICAgLy8gVGhpcyB0ZXN0IHJlbGllcyBvbiBgT2JqZWN0Lj09YCBhbmQgYEludGVyY2VwdG9yLj09YCBhbHdheXMgYmVpbmcKICAgIC8vIGltcGxlbWVudGVkIGJlY2F1c2UgaWYgdGhlIHNlbGVjdG9yIG1hdGNoZXMgYnkgc3VidHlwZSwgaXQgc3RpbGwgd2lsbCBiZQogICAgLy8gYSByZWd1bGFyIG9iamVjdCBvciBhbiBpbnRlcmNlcHRvci4KICAgIGlmIChtYXRjaGVzCiAgICAgICAgLmV2ZXJ5KGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmlzRGVmYXVsdEVxdWFsaXR5SW1wbGVtZW50YXRpb24pKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQgPSBuZXdCdWlsdGluVmFyaWFudChpbnN0cnVjdGlvbiwgY2xvc2VkV29ybGQpOwogICAgICBpZiAobG9nICE9IG51bGwpIHsKICAgICAgICByZWdpc3Rlck9wdGltaXphdGlvbihsb2csIGluc3RydWN0aW9uLCBjb252ZXJ0ZWQpOwogICAgICB9CiAgICAgIHJldHVybiBjb252ZXJ0ZWQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5lcXVhbDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudCgKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBISWRlbnRpdHkoaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLCBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyRXF1YWxzKG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKY2xhc3MgTGVzc1NwZWNpYWxpemVyIGV4dGVuZHMgUmVsYXRpb25hbFNwZWNpYWxpemVyIHsKICBjb25zdCBMZXNzU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmxlc3M7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gbmV3QnVpbHRpblZhcmlhbnQoCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICAgIHJldHVybiBuZXcgSExlc3MoaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLCBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyTGVzcyhvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmNsYXNzIEdyZWF0ZXJTcGVjaWFsaXplciBleHRlbmRzIFJlbGF0aW9uYWxTcGVjaWFsaXplciB7CiAgY29uc3QgR3JlYXRlclNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5ncmVhdGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEhHcmVhdGVyKGluc3RydWN0aW9uLmlucHV0c1sxXSwgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLCBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3RlckdyZWF0ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCk7CiAgfQp9CgpjbGFzcyBHcmVhdGVyRXF1YWxTcGVjaWFsaXplciBleHRlbmRzIFJlbGF0aW9uYWxTcGVjaWFsaXplciB7CiAgY29uc3QgR3JlYXRlckVxdWFsU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmdyZWF0ZXJFcXVhbDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiBuZXdCdWlsdGluVmFyaWFudCgKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCkgewogICAgcmV0dXJuIG5ldyBIR3JlYXRlckVxdWFsKGluc3RydWN0aW9uLmlucHV0c1sxXSwgaW5zdHJ1Y3Rpb24uaW5wdXRzWzJdLAogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yLCBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQpIHsKICAgIGxvZy5yZWdpc3RlckdyZWF0ZXJFcXVhbChvcmlnaW5hbCwgY29udmVydGVkKTsKICB9Cn0KCmNsYXNzIExlc3NFcXVhbFNwZWNpYWxpemVyIGV4dGVuZHMgUmVsYXRpb25hbFNwZWNpYWxpemVyIHsKICBjb25zdCBMZXNzRXF1YWxTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbigpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0ubGVzc0VxdWFsOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIG5ld0J1aWx0aW5WYXJpYW50KAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkKSB7CiAgICByZXR1cm4gbmV3IEhMZXNzRXF1YWwoaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdLCBpbnN0cnVjdGlvbi5pbnB1dHNbMl0sCiAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlck9wdGltaXphdGlvbigKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgSEluc3RydWN0aW9uIGNvbnZlcnRlZCkgewogICAgbG9nLnJlZ2lzdGVyTGVzc0VxdWFsKG9yaWdpbmFsLCBjb252ZXJ0ZWQpOwogIH0KfQoKY2xhc3MgQ29kZVVuaXRBdFNwZWNpYWxpemVyIGV4dGVuZHMgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyIHsKICBjb25zdCBDb2RlVW5pdEF0U3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24oKSB7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNvZGVVbml0QXQ7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICAvLyBUT0RPKHNyYSk6IEltcGxlbWVudCBhIGJ1aWx0aW4gSENvZGVVbml0QXQgaW5zdHJ1Y3Rpb24gYW5kIHRoZSBzYW1lIGluZGV4CiAgICAvLyBib3VuZHMgY2hlY2tpbmcgb3B0aW1pemF0aW9ucyBhcyBmb3IgSEluZGV4LgogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gaW5zdHJ1Y3Rpb24uZ2V0RGFydFJlY2VpdmVyKGNsb3NlZFdvcmxkKTsKICAgIGlmIChyZWNlaXZlcgogICAgICAgIC5pc1N0cmluZ09yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIC8vIEV2ZW4gaWYgdGhlcmUgaXMgbm8gYnVpbHRpbiBlcXVpdmFsZW50IGluc3RydWN0aW9uLCB3ZSBrbm93CiAgICAgIC8vIFN0cmluZy5jb2RlVW5pdEF0IGRvZXMgbm90IGhhdmUgYW55IHNpZGUgZWZmZWN0IChvdGhlciB0aGFuIHRocm93aW5nKSwKICAgICAgLy8gYW5kIHRoYXQgaXQgY2FuIGJlIEdWTidlZC4KICAgICAgY2xlYXJBbGxTaWRlRWZmZWN0cyhpbnN0cnVjdGlvbik7CiAgICAgIGlmIChpbnN0cnVjdGlvbi5pbnB1dHMubGFzdAogICAgICAgICAgLmlzUG9zaXRpdmVJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIGluc3RydWN0aW9uLnNlbGVjdG9yID0gcmVuYW1lVG9PcHRpbWl6ZWRTZWxlY3RvcigKICAgICAgICAgICAgJ19jb2RlVW5pdEF0JywgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGNvbW1vbkVsZW1lbnRzKTsKICAgICAgfQogICAgICBsb2c/LnJlZ2lzdGVyQ29kZVVuaXRBdChpbnN0cnVjdGlvbik7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmNsYXNzIENvbXBhcmVUb1NwZWNpYWxpemVyIGV4dGVuZHMgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyIHsKICBjb25zdCBDb21wYXJlVG9TcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdHJ5Q29udmVydFRvQnVpbHRpbigKICAgICAgSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24sCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0cywKICAgICAgSkNvbW1vbkVsZW1lbnRzIGNvbW1vbkVsZW1lbnRzLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIE9wdGltaXphdGlvblRlc3RMb2cgbG9nKSB7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBpbnN0cnVjdGlvbi5nZXREYXJ0UmVjZWl2ZXIoY2xvc2VkV29ybGQpOwogICAgLy8gYGNvbXBhcmVUb2AgaGFzIG5vIHNpZGUtZWZmZWN0IChvdGhlciB0aGFuIHRocm93aW5nKSBhbmQgY2FuIGJlIEdWTidlZAogICAgLy8gZm9yIHNvbWUga25vd24gdHlwZXMuCiAgICBpZiAocmVjZWl2ZXIKICAgICAgICAgICAgLmlzU3RyaW5nT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlIHx8CiAgICAgICAgcmVjZWl2ZXIKICAgICAgICAgICAgLmlzTnVtYmVyT3JOdWxsKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIC8vIFJlcGxhY2UgYGEuY29tcGFyZVRvKGEpYCB3aXRoIGAwYCwgYnV0IG9ubHkgaWYgcmVjZWl2ZXIgYW5kIGFyZ3VtZW50CiAgICAgIC8vIGFyZSBzdWNoIHRoYXQgbm8gZXhjZXB0aW9ucyBjYW4gYmUgdGhyb3duLgogICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPSBpbnN0cnVjdGlvbi5pbnB1dHMubGFzdDsKICAgICAgaWYgKChyZWNlaXZlcgogICAgICAgICAgICAgICAgICAuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICAgICAgICBhcmd1bWVudAogICAgICAgICAgICAgICAgICAuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHx8CiAgICAgICAgICAocmVjZWl2ZXIKICAgICAgICAgICAgICAgICAgLmlzU3RyaW5nKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICAgICAgYXJndW1lbnQKICAgICAgICAgICAgICAgICAgLmlzU3RyaW5nKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSkgewogICAgICAgIGlmIChpZGVudGljYWwocmVjZWl2ZXIubm9uQ2hlY2soKSwgYXJndW1lbnQubm9uQ2hlY2soKSkpIHsKICAgICAgICAgIEhJbnN0cnVjdGlvbiBjb252ZXJ0ZWQgPSBncmFwaC5hZGRDb25zdGFudEludCgwLCBjbG9zZWRXb3JsZCk7CiAgICAgICAgICBsb2c/LnJlZ2lzdGVyQ29tcGFyZVRvKGluc3RydWN0aW9uLCBjb252ZXJ0ZWQpOwogICAgICAgICAgcmV0dXJuIGNvbnZlcnRlZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2xlYXJBbGxTaWRlRWZmZWN0cyhpbnN0cnVjdGlvbik7CiAgICAgIGxvZz8ucmVnaXN0ZXJDb21wYXJlVG8oaW5zdHJ1Y3Rpb24pOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBJZGVtcG90ZW50U3RyaW5nT3BlcmF0aW9uU3BlY2lhbGl6ZXIKICAgIGV4dGVuZHMgSW52b2tlRHluYW1pY1NwZWNpYWxpemVyIHsKICBjb25zdCBJZGVtcG90ZW50U3RyaW5nT3BlcmF0aW9uU3BlY2lhbGl6ZXIoKTsKCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHRyeUNvbnZlcnRUb0J1aWx0aW4oCiAgICAgIEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIHJlc3VsdHMsCiAgICAgIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBPcHRpbWl6YXRpb25UZXN0TG9nIGxvZykgewogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gaW5zdHJ1Y3Rpb24uZ2V0RGFydFJlY2VpdmVyKGNsb3NlZFdvcmxkKTsKICAgIGlmIChyZWNlaXZlcgogICAgICAgIC5pc1N0cmluZ09yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIC8vIFN0cmluZy54eHggZG9lcyBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3QgKG90aGVyIHRoYW4gdGhyb3dpbmcpLCBhbmQgaXQKICAgICAgLy8gY2FuIGJlIEdWTidlZC4KICAgICAgY2xlYXJBbGxTaWRlRWZmZWN0cyhpbnN0cnVjdGlvbik7CiAgICAgIGlmIChsb2cgIT0gbnVsbCkgewogICAgICAgIHJlZ2lzdGVyT3B0aW1pemF0aW9uKGxvZywgaW5zdHJ1Y3Rpb24pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgcmVnaXN0ZXJPcHRpbWl6YXRpb24oT3B0aW1pemF0aW9uVGVzdExvZyBsb2csIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCk7Cn0KCmNsYXNzIFN1YnN0cmluZ1NwZWNpYWxpemVyIGV4dGVuZHMgSWRlbXBvdGVudFN0cmluZ09wZXJhdGlvblNwZWNpYWxpemVyIHsKICBjb25zdCBTdWJzdHJpbmdTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwpIHsKICAgIGxvZy5yZWdpc3RlclN1YnN0cmluZyhvcmlnaW5hbCk7CiAgfQp9CgpjbGFzcyBUcmltU3BlY2lhbGl6ZXIgZXh0ZW5kcyBJZGVtcG90ZW50U3RyaW5nT3BlcmF0aW9uU3BlY2lhbGl6ZXIgewogIGNvbnN0IFRyaW1TcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyT3B0aW1pemF0aW9uKE9wdGltaXphdGlvblRlc3RMb2cgbG9nLCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwpIHsKICAgIGxvZy5yZWdpc3RlclRyaW0ob3JpZ2luYWwpOwogIH0KfQoKY2xhc3MgUGF0dGVybk1hdGNoU3BlY2lhbGl6ZXIgZXh0ZW5kcyBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIgewogIGNvbnN0IFBhdHRlcm5NYXRjaFNwZWNpYWxpemVyKCk7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IGluc3RydWN0aW9uLmdldERhcnRSZWNlaXZlcihjbG9zZWRXb3JsZCk7CiAgICBISW5zdHJ1Y3Rpb24gcGF0dGVybiA9IGluc3RydWN0aW9uLmlucHV0c1syXTsKICAgIGlmIChyZWNlaXZlcgogICAgICAgICAgICAuaXNTdHJpbmdPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICBwYXR0ZXJuCiAgICAgICAgICAgIC5pc1N0cmluZ09yTnVsbChjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAvLyBTdHJpbmcuY29udGFpbnMoU3RyaW5nIHMpIGRvZXMgbm90IGhhdmUgYW55IHNpZGUgZWZmZWN0IChvdGhlciB0aGFuCiAgICAgIC8vIHRocm93aW5nKSwgYW5kIGl0IGNhbiBiZSBHVk4nZWQuCiAgICAgIGNsZWFyQWxsU2lkZUVmZmVjdHMoaW5zdHJ1Y3Rpb24pOwogICAgICBsb2c/LnJlZ2lzdGVyUGF0dGVybk1hdGNoKGluc3RydWN0aW9uKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KfQoKY2xhc3MgUm91bmRTcGVjaWFsaXplciBleHRlbmRzIEludm9rZUR5bmFtaWNTcGVjaWFsaXplciB7CiAgY29uc3QgUm91bmRTcGVjaWFsaXplcigpOwoKICBAb3ZlcnJpZGUKICBjb25zdGFudF9zeXN0ZW0uVW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKCkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5yb3VuZDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB0cnlDb252ZXJ0VG9CdWlsdGluKAogICAgICBISW52b2tlRHluYW1pYyBpbnN0cnVjdGlvbiwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyByZXN1bHRzLAogICAgICBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMsCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2cpIHsKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IGluc3RydWN0aW9uLmdldERhcnRSZWNlaXZlcihjbG9zZWRXb3JsZCk7CiAgICBpZiAocmVjZWl2ZXIKICAgICAgICAuaXNOdW1iZXJPck51bGwoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAvLyBFdmVuIGlmIHRoZXJlIGlzIG5vIGJ1aWx0aW4gZXF1aXZhbGVudCBpbnN0cnVjdGlvbiwgd2Uga25vdyB0aGUKICAgICAgLy8gaW5zdHJ1Y3Rpb24gZG9lcyBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3QsIGFuZCB0aGF0IGl0IGNhbiBiZSBHVk4nZWQuCiAgICAgIGNsZWFyQWxs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bGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ25vZGVzLmRhcnQnOwoKY2xhc3MgSFZhbGlkYXRvciBleHRlbmRzIEhJbnN0cnVjdGlvblZpc2l0b3IgewogIGJvb2wgaXNWYWxpZCA9IHRydWU7CiAgSEdyYXBoIGdyYXBoOwoKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIHZpc2l0ZWUpIHsKICAgIGdyYXBoID0gdmlzaXRlZTsKICAgIHZpc2l0RG9taW5hdG9yVHJlZSh2aXNpdGVlKTsKICB9CgogIHZvaWQgbWFya0ludmFsaWQoU3RyaW5nIHJlYXNvbikgewogICAgcHJpbnQocmVhc29uKTsKICAgIGlzVmFsaWQgPSBmYWxzZTsKICB9CgogIC8vIE5vdGUgdGhhdCBkdXJpbmcgY29uc3RydWN0aW9uIG9mIHRoZSBTc2EgZ3JhcGggdGhlIGJhc2ljIGJsb2NrcyBhcmUKICAvLyBub3QgcmVxdWlyZWQgdG8gYmUgdmFsaWQgeWV0LgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBjdXJyZW50QmxvY2sgPSBibG9jazsKICAgIGlmICghaXNWYWxpZCkgcmV0dXJuOyAvLyBEb24ndCBuZWVkIHRvIGNvbnRpbnVlIGlmIHdlIGFyZSBhbHJlYWR5IGludmFsaWQuCgogICAgLy8gVGVzdCB0aGF0IHRoZSBsYXN0IGluc3RydWN0aW9uIGlzIGEgYnJhbmNoaW5nIGluc3RydWN0aW9uIGFuZCB0aGF0IHRoZQogICAgLy8gYmFzaWMgYmxvY2sgY29udGFpbnMgdGhlIGJyYW5jaC10YXJnZXQuCiAgICBpZiAoYmxvY2suZmlyc3QgPT0gbnVsbCB8fCBibG9jay5sYXN0ID09IG51bGwpIHsKICAgICAgbWFya0ludmFsaWQoImVtcHR5IGJsb2NrIik7CiAgICB9CiAgICBpZiAoYmxvY2subGFzdCBpcyEgSENvbnRyb2xGbG93KSB7CiAgICAgIG1hcmtJbnZhbGlkKCJibG9jayBlbmRzIHdpdGggbm9uLXRhaWwgbm9kZS4iKTsKICAgIH0KICAgIGlmIChibG9jay5sYXN0IGlzIEhJZiAmJiBibG9jay5zdWNjZXNzb3JzLmxlbmd0aCAhPSAyKSB7CiAgICAgIG1hcmtJbnZhbGlkKCJJZiBub2RlIHdpdGhvdXQgdHdvIHN1Y2Nlc3NvcnMiKTsKICAgIH0KICAgIGlmIChibG9jay5sYXN0IGlzIEhDb25kaXRpb25hbEJyYW5jaCAmJiBibG9jay5zdWNjZXNzb3JzLmxlbmd0aCAhPSAyKSB7CiAgICAgIG1hcmtJbnZhbGlkKCJDb25kaXRpb25hbCBub2RlIHdpdGhvdXQgdHdvIHN1Y2Nlc3NvcnMiKTsKICAgIH0KICAgIGlmIChibG9jay5sYXN0IGlzIEhMb29wQnJhbmNoKSB7CiAgICAgIC8vIEFzc2VydCB0aGF0IHRoZSBibG9jayB3ZSBpbnNlcnRlZCB0byBhdm9pZCBjcml0aWNhbCBlZGdlcyBzYXRpc2ZpZXMKICAgICAgLy8gb3VyIGFzc3VtcHRpb25zLiBUaGF0IGlzLCBpdCBtdXN0IG5vdCBjb250YWluIGFueSBpbnN0cnVjdGlvbnMKICAgICAgLy8gKGFsdGhvdWdoIGl0IG1heSBjb250YWluIHBoaS11cGRhdGVzKS4KICAgICAgSEJhc2ljQmxvY2sgYXZvaWRDcml0aWNhbEVkZ2VCbG9jayA9IGJsb2NrLnN1Y2Nlc3NvcnMubGFzdDsKICAgICAgaWYgKGF2b2lkQ3JpdGljYWxFZGdlQmxvY2suZmlyc3QgaXMhIEhHb3RvKSB7CiAgICAgICAgbWFya0ludmFsaWQoIkNyaXRpY2FsIGVkZ2UgYmxvY2sgY29udGFpbnMgaW5zdHJ1Y3Rpb25zIik7CiAgICAgIH0KICAgIH0KICAgIGlmIChibG9jay5sYXN0IGlzIEhHb3RvICYmIGJsb2NrLnN1Y2Nlc3NvcnMubGVuZ3RoICE9IDEpIHsKICAgICAgbWFya0ludmFsaWQoIkdvdG8gbm9kZSB3aXRoIG5vdCBleGFjdGx5IG9uZSBzdWNjZXNzb3IiKTsKICAgIH0KICAgIGlmIChibG9jay5sYXN0IGlzIEhKdW1wICYmIGJsb2NrLnN1Y2Nlc3NvcnMubGVuZ3RoICE9IDEpIHsKICAgICAgbWFya0ludmFsaWQoIkJyZWFrIG9yIGNvbnRpbnVlIG5vZGUgd2l0aG91dCBvbmUgc3VjY2Vzc29yIik7CiAgICB9CiAgICBpZiAoKGJsb2NrLmxhc3QgaXMgSFJldHVybiB8fCBibG9jay5sYXN0IGlzIEhUaHJvdykgJiYKICAgICAgICAoYmxvY2suc3VjY2Vzc29ycy5sZW5ndGggIT0gMSB8fCAhYmxvY2suc3VjY2Vzc29yc1swXS5pc0V4aXRCbG9jaygpKSkgewogICAgICBtYXJrSW52YWxpZCgiUmV0dXJuIG9yIHRocm93IG5vZGUgd2l0aCA+IDEgc3VjY2Vzc29yICIKICAgICAgICAgICJvciBub3QgZ29pbmcgdG8gZXhpdC1ibG9jayIpOwogICAgfQogICAgaWYgKGJsb2NrLmxhc3QgaXMgSEV4aXQgJiYgIWJsb2NrLnN1Y2Nlc3NvcnMuaXNFbXB0eSkgewogICAgICBtYXJrSW52YWxpZCgiRXhpdCBibG9jayB3aXRoIHN1Y2Nlc3NvciIpOwogICAgfQoKICAgIGlmIChibG9jay5zdWNjZXNzb3JzLmlzRW1wdHkgJiYgIWJsb2NrLmlzRXhpdEJsb2NrKCkpIHsKICAgICAgbWFya0ludmFsaWQoIk5vbi1leGl0IGJsb2NrIHdpdGhvdXQgc3VjY2Vzc29yIik7CiAgICB9CgogICAgLy8gQ2hlY2sgdGhhdCBzdWNjZXNzb3JzIGlkcyBhcmUgYWx3YXlzIGhpZ2hlciB0aGFuIHRoZSBjdXJyZW50IG9uZS4KICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGlzIGlzLCBvZiBjb3Vyc2UsIG5vdCB0cnVlIGZvciBiYWNrLWJyYW5jaGVzLgogICAgaWYgKGJsb2NrLmlkID09IG51bGwpIG1hcmtJbnZhbGlkKCJibG9jayB3aXRob3V0IGlkIik7CiAgICBmb3IgKEhCYXNpY0Jsb2NrIHN1Y2Nlc3NvciBpbiBibG9jay5zdWNjZXNzb3JzKSB7CiAgICAgIGlmICghaXNWYWxpZCkgYnJlYWs7CiAgICAgIGlmIChzdWNjZXNzb3IuaWQgPT0gbnVsbCkgbWFya0ludmFsaWQoInN1Y2Nlc3NvciB3aXRob3V0IGlkIik7CiAgICAgIGlmIChzdWNjZXNzb3IuaWQgPD0gYmxvY2suaWQgJiYgIXN1Y2Nlc3Nvci5pc0xvb3BIZWFkZXIoKSkgewogICAgICAgIG1hcmtJbnZhbGlkKCJzdWNjZXNzb3Igd2l0aCBsb3dlciBpZCwgYnV0IG5vdCBhIGxvb3AtaGVhZGVyIik7CiAgICAgIH0KICAgIH0KICAgIC8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBoYXZlIGEgY3JpdGljYWwgZWRnZS4KICAgIGlmIChpc1ZhbGlkICYmCiAgICAgICAgYmxvY2suc3VjY2Vzc29ycy5sZW5ndGggPiAxICYmCiAgICAgICAgYmxvY2subGFzdCBpcyEgSFRyeSAmJgogICAgICAgIGJsb2NrLmxhc3QgaXMhIEhFeGl0VHJ5ICYmCiAgICAgICAgYmxvY2subGFzdCBpcyEgSFN3aXRjaCkgewogICAgICBmb3IgKEhCYXNpY0Jsb2NrIHN1Y2Nlc3NvciBpbiBibG9jay5zdWNjZXNzb3JzKSB7CiAgICAgICAgaWYgKCFpc1ZhbGlkKSBicmVhazsKICAgICAgICBpZiAoc3VjY2Vzc29yLnByZWRlY2Vzc29ycy5sZW5ndGggPj0gMikgewogICAgICAgICAgbWFya0ludmFsaWQoIlNTQSBncmFwaCBjb250YWlucyBjcml0aWNhbCBlZGdlLiIpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIENoZWNrIHRoYXQgdGhlIGVudHJpZXMgaW4gdGhlIGRvbWluYXRlZC1saXN0IGFyZSBzb3J0ZWQuCiAgICBpbnQgbGFzdElkID0gMDsKICAgIGZvciAoSEJhc2ljQmxvY2sgZG9taW5hdGVkIGluIGJsb2NrLmRvbWluYXRlZEJsb2NrcykgewogICAgICBpZiAoIWlzVmFsaWQpIGJyZWFrOwogICAgICBpZiAoIWlkZW50aWNhbChkb21pbmF0ZWQuZG9taW5hdG9yLCBibG9jaykpIHsKICAgICAgICBtYXJrSW52YWxpZCgiZG9taW5hdGVkIGJsb2NrIG5vdCBwb2ludGluZyBiYWNrIik7CiAgICAgIH0KICAgICAgaWYgKGRvbWluYXRlZC5pZCA9PSBudWxsIHx8IGRvbWluYXRlZC5pZCA8PSBsYXN0SWQpIHsKICAgICAgICBtYXJrSW52YWxpZCgiZG9taW5hdGVkLmlkID09IG51bGwgb3IgZG9taW5hdGVkIGhhcyA8PSBpZCIpOwogICAgICB9CiAgICAgIGxhc3RJZCA9IGRvbWluYXRlZC5pZDsKICAgIH0KCiAgICBpZiAoIWlzVmFsaWQpIHJldHVybjsKICAgIGJsb2NrLmZvckVhY2hQaGkodmlzaXRJbnN0cnVjdGlvbik7CgogICAgLy8gQ2hlY2sgdGhhdCB0aGUgYmxvY2tzIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIGEgcGhpIGFyZSBkb21pbmF0aW5nIHRoZQogICAgLy8gY29ycmVzcG9uZGluZyBwcmVkZWNlc3NvciBibG9jay4gTm90ZSB0aGF0IGEgYmxvY2sgZG9taW5hdGVzCiAgICAvLyBpdHNlbGYuCiAgICBibG9jay5mb3JFYWNoUGhpKChIUGhpIHBoaSkgewogICAgICBhc3NlcnQocGhpLmlucHV0cy5sZW5ndGggPD0gYmxvY2sucHJlZGVjZXNzb3JzLmxlbmd0aCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGhpLmlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IHBoaS5pbnB1dHNbaV07CiAgICAgICAgaWYgKCFpbnB1dC5ibG9jay5kb21pbmF0ZXMoYmxvY2sucHJlZGVjZXNzb3JzW2ldKSkgewogICAgICAgICAgbWFya0ludmFsaWQoIkRlZmluaXRpb24gZG9lcyBub3QgZG9taW5hdGUgdXNlIik7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKCiAgICAvLyBDaGVjayB0aGF0IHRoZSBibG9ja3Mgb2YgdGhlIGlucHV0cyBvZiBhbiBpbnN0cnVjdGlvbiBkb21pbmF0ZSB0aGUKICAgIC8vIGluc3RydWN0aW9uJ3MgYmxvY2suCiAgICBibG9jay5mb3JFYWNoSW5zdHJ1Y3Rpb24oKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgICBmb3IgKEhJbnN0cnVjdGlvbiBpbnB1dCBpbiBpbnN0cnVjdGlvbi5pbnB1dHMpIHsKICAgICAgICBpZiAoIWlucHV0LmJsb2NrLmRvbWluYXRlcyhibG9jaykpIHsKICAgICAgICAgIG1hcmtJbnZhbGlkKCJEZWZpbml0aW9uIGRvZXMgbm90IGRvbWluYXRlIHVzZSIpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CgogICAgc3VwZXIudmlzaXRCYXNpY0Jsb2NrKGJsb2NrKTsKICB9CgogIC8vLyBSZXR1cm5zIGhvdyBvZnRlbiBbaW5zdHJ1Y3Rpb25dIGlzIGNvbnRhaW5lZCBpbiBbaW5zdHJ1Y3Rpb25zXS4KICBzdGF0aWMgaW50IGNvdW50SW5zdHJ1Y3Rpb24oCiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnN0cnVjdGlvbnMsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgaW50IHJlc3VsdCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGluc3RydWN0aW9ucy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaWRlbnRpY2FsKGluc3RydWN0aW9uc1tpXSwgaW5zdHJ1Y3Rpb24pKSByZXN1bHQrKzsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBwcmVkaWNhdGUgcmV0dXJucyB0cnVlIGZvciBldmVyeSBpbnN0cnVjdGlvbiBpbiB0aGUKICAvLy8gbGlzdC4gVGhlIGFyZ3VtZW50IHRvIFtmXSBpcyBhbiBpbnN0cnVjdGlvbiB3aXRoIHRoZSBjb3VudCBvZiBob3cgb2Z0ZW4KICAvLy8gaXQgYXBwZWFyZWQgaW4gdGhlIGxpc3QgW2luc3RydWN0aW9uc10uCiAgc3RhdGljIGJvb2wgZXZlcnlJbnN0cnVjdGlvbihMaXN0PEhJbnN0cnVjdGlvbj4gaW5zdHJ1Y3Rpb25zLCBGdW5jdGlvbiBmKSB7CiAgICB2YXIgY29weSA9IG5ldyBMaXN0PEhJbnN0cnVjdGlvbj4uZnJvbShpbnN0cnVjdGlvbnMpOwogICAgLy8gVE9ETyhmbG9pdHNjaCk6IHRoZXJlIGlzIGN1cnJlbnRseSBubyB3YXkgdG8gc29ydCBISW5zdHJ1Y3Rpb25zIGJlZm9yZQogICAgLy8gd2UgaGF2ZSBhc3NpZ25lZCBhbiBJRC4gVGhlIGxvb3AgaXMgdGhlcmVmb3JlIE8obl4yKSBmb3Igbm93LgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3B5Lmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjdXJyZW50ID0gY29weVtpXTsKICAgICAgaWYgKGN1cnJlbnQgPT0gbnVsbCkgY29udGludWU7CiAgICAgIGludCBjb3VudCA9IDE7CiAgICAgIGZvciAoaW50IGogPSBpICsgMTsgaiA8IGNvcHkubGVuZ3RoOyBqKyspIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKGNvcHlbal0sIGN1cnJlbnQpKSB7CiAgICAgICAgICBjb3B5W2pdID0gbnVsbDsKICAgICAgICAgIGNvdW50Kys7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghZihjdXJyZW50LCBjb3VudCkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluc3RydWN0aW9uKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgLy8gVmVyaWZpZXMgdGhhdCB3ZSBhcmUgaW4gdGhlIHVzZSBsaXN0IG9mIG91ciBpbnB1dHMuCiAgICBib29sIGhhc0NvcnJlY3RJbnB1dHMoKSB7CiAgICAgIGJvb2wgaW5CYXNpY0Jsb2NrID0gaW5zdHJ1Y3Rpb24uaXNJbkJhc2ljQmxvY2soKTsKICAgICAgcmV0dXJuIGV2ZXJ5SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24uaW5wdXRzLCAoaW5wdXQsIGNvdW50KSB7CiAgICAgICAgaWYgKGluQmFzaWNCbG9jaykgewogICAgICAgICAgcmV0dXJuIGlucHV0LmlzSW5CYXNpY0Jsb2NrKCkgJiYKICAgICAgICAgICAgICBjb3VudEluc3RydWN0aW9uKGlucHV0LnVzZWRCeSwgaW5zdHJ1Y3Rpb24pID09IGNvdW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gY291bnRJbnN0cnVjdGlvbihpbnB1dC51c2VkQnksIGluc3RydWN0aW9uKSA9PSAwOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgLy8gVmVyaWZpZXMgdGhhdCBhbGwgb3VyIHVzZXMgaGF2ZSB1cyBpbiB0aGVpciBpbnB1dHMuCiAgICBib29sIGhhc0NvcnJlY3RVc2VzKCkgewogICAgICBpZiAoIWluc3RydWN0aW9uLmlzSW5CYXNpY0Jsb2NrKCkpIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZXZlcnlJbnN0cnVjdGlvbihpbnN0cnVjdGlvbi51c2VkQnksICh1c2UsIGNvdW50KSB7CiAgICAgICAgcmV0dXJuIHVzZS5pc0luQmFzaWNCbG9jaygpICYmCiAgICAgICAgICAgIGNvdW50SW5zdHJ1Y3Rpb24odXNlLmlucHV0cywgaW5zdHJ1Y3Rpb24pID09IGNvdW50OwogICAgICB9KTsKICAgIH0KCiAgICBpZiAoIWlkZW50aWNhbChpbnN0cnVjdGlvbi5ibG9jaywgY3VycmVudEJsb2NrKSkgewogICAgICBtYXJrSW52YWxpZCgiSW5zdHJ1Y3Rpb24gaW4gd3JvbmcgYmxvY2siKTsKICAgIH0KICAgIGlmICghaGFzQ29ycmVjdElucHV0cygpKSB7CiAgICAgIG1hcmtJbnZhbGlkKCJJbmNvcnJlY3QgaW5wdXRzIik7CiAgICB9CiAgICBpZiAoIWhhc0NvcnJlY3RVc2VzKCkpIHsKICAgICAgbWFya0ludmFsaWQoIkluY29ycmVjdCB1c2VzIik7CiAgICB9CiAgfQp9CoDMAE5OPAEVAS8XEAEkFSEEASQTFQQBSSMMLBpPAU4vNSIGJzUGPTUGTD4GJU1IMEI0QggGPz8GP0MGO1A9KQY8MAYBPDcGAUlHOzYbRUNHCAYwEycfIyI4HTI8CggGAUAUOxs0Ogg8RAgdBgEaKAFLRA8iPjQsPTsKCAgBShw6Ny07CggIASIEAUYfQxQ0PQYTBAFOTi5OOk5FLB0lFTIrGhMKCCwGEQQBDDQ7HjhDHCtEEUMKCgYBOxw2QSdACgYBNzEGHycGHSUGBAIBJnBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS92YWxpZGF0ZS5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2VsZW1lbnRzL2VudGl0eV91dGlscy5kYXJ0lAYvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBlbnRpdHlfdXRpbHM7CgppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JwogICAgc2hvdyBpc1VzZXJEZWZpbmFibGVPcGVyYXRvciwgaXNNaW51c09wZXJhdG9yOwoKaW1wb3J0ICdlbnRpdGllcy5kYXJ0JzsKCi8vIFNvbWV3aGF0IHN0YWJsZSBvcmRlcmluZyBmb3IgbGlicmFyaWVzIHVzaW5nIFtVcmldcwppbnQgY29tcGFyZUxpYnJhcmllc1VyaXMoVXJpIGEsIFVyaSBiKSB7CiAgaWYgKGEgPT0gYikgcmV0dXJuIDA7CgogIGludCBieUNhbm9uaWNhbFVyaVBhdGgoKSB7CiAgICByZXR1cm4gYS5wYXRoLmNvbXBhcmVUbyhiLnBhdGgpOwogIH0KCiAgLy8gT3JkZXI6IHBsYXRmb3JtIDwgcGFja2FnZSA8IG90aGVyLgogIGlmIChhLnNjaGVtZSA9PSAnZGFydCcpIHsKICAgIGlmIChiLnNjaGVtZSA9PSAnZGFydCcpIHJldHVybiBieUNhbm9uaWNhbFVyaVBhdGgoKTsKICAgIHJldHVybiAtMTsKICB9CiAgaWYgKGIuc2NoZW1lID09ICdkYXJ0JykgcmV0dXJuIDE7CgogIGlmIChhLnNjaGVtZSA9PSAncGFja2FnZScpIHsKICAgIGlmIChiLnNjaGVtZSA9PSAncGFja2FnZScpIHJldHVybiBieUNhbm9uaWNhbFVyaVBhdGgoKTsKICAgIHJldHVybiAtMTsKICB9CiAgaWYgKGIuc2NoZW1lID09ICdwYWNrYWdlJykgcmV0dXJuIDE7CgogIHJldHVybiBfY29tcGFyZUNhbm9uaWNhbFVyaShhLCBiKTsKfQoKaW50IF9jb21wYXJlQ2Fub25pY2FsVXJpKFVyaSBhLCBVcmkgYikgewogIGludCByID0gYS5zY2hlbWUuY29tcGFyZVRvKGIuc2NoZW1lKTsKICBpZiAociAhPSAwKSByZXR1cm4gcjsKCiAgLy8gV2Ugd291bGQgbGlrZSB0aGUgb3JkZXIgb2YgJ2ZpbGU6JyBVcmlzIHRvIGJlIHN0YWJsZSBhY3Jvc3MgZGlmZmVyZW50CiAgLy8gdXNlcnMgb3IgZGlmZmVyZW50IGJ1aWxkcyBmcm9tIHRlbXBvcmFyeSBkaXJlY3Rvcmllcy4gIFdlIHNvcnQgYnkKICAvLyBwYXRoU2VnbWVudHMgZWxlbWVudHMgZnJvbSB0aGUgbGFzdCB0byB0aGUgZmlyc3Qgc2luY2UgdGhhdCB0ZW5kcyB0byBmaW5kCiAgLy8gYSBzdGFibGUgZGlzdGluY3Rpb24gcmVnYXJkbGVzcyBvZiBkaXJlY3Rvcnkgcm9vdC4KICBMaXN0PFN0cmluZz4gYVNlZ21lbnRzID0gYS5wYXRoU2VnbWVudHM7CiAgTGlzdDxTdHJpbmc+IGJTZWdtZW50cyA9IGIucGF0aFNlZ21lbnRzOwogIGludCBhSSA9IGFTZWdtZW50cy5sZW5ndGg7CiAgaW50IGJJID0gYlNlZ21lbnRzLmxlbmd0aDsKICB3aGlsZSAoYUkgPiAwICYmIGJJID4gMCkgewogICAgU3RyaW5nIGFTZWdtZW50ID0gYVNlZ21lbnRzWy0tYUldOwogICAgU3RyaW5nIGJTZWdtZW50ID0gYlNlZ21lbnRzWy0tYkldOwogICAgciA9IGFTZWdtZW50LmNvbXBhcmVUbyhiU2VnbWVudCk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICB9CiAgcmV0dXJuIGFJLmNvbXBhcmVUbyhiSSk7IC8vIFNob3J0ZXN0IGZpcnN0Lgp9CgovLy8gQ29tcGFyZSBVUklzIG9mIGNvbXBpbGF0aW9uIHVuaXRzLgppbnQgY29tcGFyZVNvdXJjZVVyaXMoVXJpIHVyaTEsIFVyaSB1cmkyKSB7CiAgaWYgKHVyaTEgPT0gdXJpMikgcmV0dXJuIDA7CiAgLy8gQ29tcGlsYXRpb24gdW5pdHMgYXJlIGNvbXBhcmVkIG9ubHkgd2l0aGluIHRoZSBzYW1lIGxpYnJhcnkgc28gd2UgZXhwZWN0CiAgLy8gdGhlIFVyaXMgdG8gdXN1YWxseSBiZSBjbHVzdGVyZWQgdG9nZXRoZXIgd2l0aCBhIGNvbW1vbiBzY2hlbWUgYW5kIHBhdGgKICAvLyBwcmVmaXguCiAgcmV0dXJuICcke3VyaTF9Jy5jb21wYXJlVG8oJyR7dXJpMn0nKTsKfQoKLy8vIENvbXBhcmUgZW50aXRpZXMgd2l0aGluIHRoZSBzYW1lIGNvbXBpbGF0aW9uIHVuaXQuCmludCBjb21wYXJlRW50aXRpZXMoRW50aXR5IGVsZW1lbnQxLCBpbnQgbGluZTEsIGludCBjb2x1bW4xLCBFbnRpdHkgZWxlbWVudDIsCiAgICBpbnQgbGluZTIsIGludCBjb2x1bW4yKSB7CiAgbGluZTEgPz89IC0xOwogIGxpbmUyID8/PSAtMTsKICBpbnQgciA9IGxpbmUxLmNvbXBhcmVUbyhsaW5lMik7CiAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CgogIGNvbHVtbjEgPz89IC0xOwogIGNvbHVtbjIgPz89IC0xOwogIHIgPSBjb2x1bW4xLmNvbXBhcmVUbyhjb2x1bW4yKTsKICBpZiAociAhPSAwKSByZXR1cm4gcjsKCiAgciA9IGVsZW1lbnQxLm5hbWUuY29tcGFyZVRvKGVsZW1lbnQyLm5hbWUpOwogIGlmIChyICE9IDApIHJldHVybiByOwoKICAvLyBTYW1lIGZpbGUsIHBvc2l0aW9uIGFuZCBuYW1lLiAgSWYgdGhpcyBoYXBwZW5zLCB3ZSBzaG91bGQgZmluZCBvdXQgd2h5CiAgLy8gYW5kIG1ha2UgdGhlIG9yZGVyIHRvdGFsIGFuZCBpbmRlcGVuZGVudCBvZiBoYXNoQ29kZS4KICByZXR1cm4gZWxlbWVudDEuaGFzaENvZGUuY29tcGFyZVRvKGVsZW1lbnQyLmhhc2hDb2RlKTsKfQoKU3RyaW5nIHJlY29uc3RydWN0Q29uc3RydWN0b3JOYW1lKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICBTdHJpbmcgY2xhc3NOYW1lID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzcy5uYW1lOwogIGlmIChlbGVtZW50Lm5hbWUgPT0gJycpIHsKICAgIHJldHVybiBjbGFzc05hbWU7CiAgfSBlbHNlIHsKICAgIHJldHVybiAnJGNsYXNzTmFtZVwkJHtlbGVtZW50Lm5hbWV9JzsKICB9Cn0KClN0cmluZyByZWNvbnN0cnVjdENvbnN0cnVjdG9yTmFtZVNvdXJjZVN0cmluZyhGdW5jdGlvbkVudGl0eSBlbGVtZW50KSB7CiAgaWYgKGVsZW1lbnQubmFtZSA9PSAnJykgewogICAgcmV0dXJuIGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3MubmFtZTsKICB9IGVsc2UgewogICAgcmV0dXJuIHJlY29uc3RydWN0Q29uc3RydWN0b3JOYW1lKGVsZW1lbnQpOwogIH0KfQoKLy8vIE1hcCBhbiBvcGVyYXRvci1uYW1lIHRvIGEgdmFsaWQgSmF2YVNjcmlwdCBpZGVudGlmaWVyLgovLy8KLy8vIEZvciBub24tb3BlcmF0b3IgbmFtZXMsIHRoaXMgbWV0aG9kIGp1c3QgcmV0dXJucyBpdHMgaW5wdXQuCi8vLwovLy8gVGhlIHJlc3VsdHMgcmV0dXJuZWQgZnJvbSB0aGlzIG1ldGhvZCBhcmUgZ3VhcmFudGVlZCB0byBiZSB2YWxpZAovLy8gSmF2YVNjcmlwdCBpZGVudGlmaWVycywgZXhjZXB0IGl0IG1heSBpbmNsdWRlIHJlc2VydmVkIHdvcmRzIGZvcgovLy8gbm9uLW9wZXJhdG9yIG5hbWVzLgpTdHJpbmcgb3BlcmF0b3JOYW1lVG9JZGVudGlmaWVyKFN0cmluZyBuYW1lKSB7CiAgaWYgKG5hbWUgPT0gbnVsbCkgewogICAgcmV0dXJuIG5hbWU7CiAgfSBlbHNlIGlmIChuYW1lID09ICc9PScpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJGVxJzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJ34nKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRub3QnOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnW10nKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRpbmRleCc7CiAgfSBlbHNlIGlmIChuYW1lID09ICdbXT0nKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRpbmRleFNldCc7CiAgfSBlbHNlIGlmIChuYW1lID09ICcqJykgewogICAgcmV0dXJuIHInb3BlcmF0b3IkbXVsJzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJy8nKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRkaXYnOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnJScpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJG1vZCc7CiAgfSBlbHNlIGlmIChuYW1lID09ICd+LycpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJHRkaXYnOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnKycpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJGFkZCc7CiAgfSBlbHNlIGlmIChuYW1lID09ICc8PCcpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJHNobCc7CiAgfSBlbHNlIGlmIChuYW1lID09ICc+PicpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJHNocic7CiAgfSBlbHNlIGlmIChuYW1lID09ICc+Pj4nKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRzaHJ1JzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJz49JykgewogICAgcmV0dXJuIHInb3BlcmF0b3IkZ2UnOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnPicpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJGd0JzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJzw9JykgewogICAgcmV0dXJuIHInb3BlcmF0b3IkbGUnOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnPCcpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJGx0JzsKICB9IGVsc2UgaWYgKG5hbWUgPT0gJyYnKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRhbmQnOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnXicpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJHhvcic7CiAgfSBlbHNlIGlmIChuYW1lID09ICd8JykgewogICAgcmV0dXJuIHInb3BlcmF0b3Ikb3InOwogIH0gZWxzZSBpZiAobmFtZSA9PSAnLScpIHsKICAgIHJldHVybiByJ29wZXJhdG9yJHN1Yic7CiAgfSBlbHNlIGlmIChuYW1lID09ICd1bmFyeS0nKSB7CiAgICByZXR1cm4gcidvcGVyYXRvciRuZWdhdGUnOwogIH0gZWxzZSB7CiAgICByZXR1cm4gbmFtZTsKICB9Cn0KClN0cmluZyBjb25zdHJ1Y3RPcGVyYXRvck5hbWVPck51bGwoU3RyaW5nIG9wLCBib29sIGlzVW5hcnkpIHsKICBpZiAoaXNNaW51c09wZXJhdG9yKG9wKSkgewogICAgcmV0dXJuIGlzVW5hcnkgPyAndW5hcnktJyA6IG9wOwogIH0gZWxzZSBpZiAoaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3Iob3ApIHx8IG9wID09ICc/PycpIHsKICAgIHJldHVybiBvcDsKICB9IGVsc2UgewogICAgcmV0dXJuIG51bGw7CiAgfQp9CgpTdHJpbmcgY29uc3RydWN0T3BlcmF0b3JOYW1lKFN0cmluZyBvcCwgYm9vbCBpc1VuYXJ5KSB7CiAgU3RyaW5nIG9wZXJhdG9yTmFtZSA9IGNvbnN0cnVjdE9wZXJhdG9yTmFtZU9yTnVsbChvcCwgaXNVbmFyeSk7CiAgaWYgKG9wZXJhdG9yTmFtZSA9PSBudWxsKQogICAgdGhyb3cgJ1VuaGFuZGxlZCBvcGVyYXRvcjogJG9wJzsKICBlbHNlCiAgICByZXR1cm4gb3BlcmF0b3JOYW1lOwp9CoCzAE5OPAEWATkzARgBNykYAR0lBAEoHDkPBCQBHzwPBCcBJQIBKSgYAUtHTzgrKx0dHScnJhoELgIBJyweTk0NKQIBN04eEBAiGAESEiIYAS4YAUw7OQIBPDIcFgsqBAIBSBwoCzAEAgE7BEAERUUYLxYRHRscHB0eHiEcHBwcHBwdHRwcHRwdHB4dHRscGx0bHBscHBwcHBscHCEfCxEEAgE+HSQ6DwsRBAIBOEIcJQcZAgEvcGFja2FnZTpjb21waWxlci9zcmMvZWxlbWVudHMvZW50aXR5X3V0aWxzLmRhcnQ1c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvZWxlbWVudHMvb3BlcmF0b3JzLmRhcnShXy8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMub3BlcmF0b3JzOwoKaW1wb3J0ICduYW1lcy5kYXJ0JyBzaG93IFB1YmxpY05hbWU7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCcgc2hvdyBDYWxsU3RydWN0dXJlOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3IsIFNlbGVjdG9yS2luZDsKCmVudW0gVW5hcnlPcGVyYXRvcktpbmQgewogIE5PVCwKICBORUdBVEUsCiAgQ09NUExFTUVOVCwKfQoKY2xhc3MgVW5hcnlPcGVyYXRvciB7CiAgZmluYWwgVW5hcnlPcGVyYXRvcktpbmQga2luZDsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBTdHJpbmcgc2VsZWN0b3JOYW1lOwoKICBjb25zdCBVbmFyeU9wZXJhdG9yKHRoaXMua2luZCwgdGhpcy5uYW1lLCB0aGlzLnNlbGVjdG9yTmFtZSk7CgogIGJvb2wgZ2V0IGlzVXNlckRlZmluYWJsZSA9PiBzZWxlY3Rvck5hbWUgIT0gbnVsbDsKCiAgU2VsZWN0b3IgZ2V0IHNlbGVjdG9yID0+IG5ldyBTZWxlY3RvcihTZWxlY3RvcktpbmQuT1BFUkFUT1IsCiAgICAgIG5ldyBQdWJsaWNOYW1lKHNlbGVjdG9yTmFtZSksIENhbGxTdHJ1Y3R1cmUuTk9fQVJHUyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IG5hbWU7CgogIC8vLyBUaGUgdW5hcnkgISBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgVW5hcnlPcGVyYXRvciBOT1QgPQogICAgICBjb25zdCBVbmFyeU9wZXJhdG9yKFVuYXJ5T3BlcmF0b3JLaW5kLk5PVCwgJyEnLCBudWxsKTsKCiAgLy8vIFRoZSB1bmFyeSAtIG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBVbmFyeU9wZXJhdG9yIE5FR0FURSA9CiAgICAgIGNvbnN0IFVuYXJ5T3BlcmF0b3IoVW5hcnlPcGVyYXRvcktpbmQuTkVHQVRFLCAnLScsICd1bmFyeS0nKTsKCiAgLy8vIFRoZSB1bmFyeSB+IG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBVbmFyeU9wZXJhdG9yIENPTVBMRU1FTlQgPQogICAgICBjb25zdCBVbmFyeU9wZXJhdG9yKFVuYXJ5T3BlcmF0b3JLaW5kLkNPTVBMRU1FTlQsICd+JywgJ34nKTsKCiAgc3RhdGljIFVuYXJ5T3BlcmF0b3IgcGFyc2UoU3RyaW5nIHZhbHVlKSB7CiAgICBzd2l0Y2ggKHZhbHVlKSB7CiAgICAgIGNhc2UgJyEnOgogICAgICAgIHJldHVybiBOT1Q7CiAgICAgIGNhc2UgJy0nOgogICAgICAgIHJldHVybiBORUdBVEU7CiAgICAgIGNhc2UgJ34nOgogICAgICAgIHJldHVybiBDT01QTEVNRU5UOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgLy8gaWdub3JlOiBNSVNTSU5HX1JFVFVSTgogIHN0YXRpYyBVbmFyeU9wZXJhdG9yIGZyb21LaW5kKFVuYXJ5T3BlcmF0b3JLaW5kIGtpbmQpIHsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIFVuYXJ5T3BlcmF0b3JLaW5kLk5PVDoKICAgICAgICByZXR1cm4gTk9UOwogICAgICBjYXNlIFVuYXJ5T3BlcmF0b3JLaW5kLk5FR0FURToKICAgICAgICByZXR1cm4gTkVHQVRFOwogICAgICBjYXNlIFVuYXJ5T3BlcmF0b3JLaW5kLkNPTVBMRU1FTlQ6CiAgICAgICAgcmV0dXJuIENPTVBMRU1FTlQ7CiAgICB9CiAgfQp9CgplbnVtIEJpbmFyeU9wZXJhdG9yS2luZCB7CiAgRVEsCiAgTk9UX0VRLAogIElOREVYLAogIEFERCwKICBTVUIsCiAgTVVMLAogIERJViwKICBJRElWLAogIE1PRCwKICBTSEwsCiAgU0hSLAogIFNIUlUsCiAgR1RFUSwKICBHVCwKICBMVEVRLAogIExULAogIEFORCwKICBPUiwKICBYT1IsCiAgTE9HSUNBTF9BTkQsCiAgTE9HSUNBTF9PUiwKICBJRl9OVUxMLAp9CgpjbGFzcyBCaW5hcnlPcGVyYXRvciB7CiAgZmluYWwgQmluYXJ5T3BlcmF0b3JLaW5kIGtpbmQ7CiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8odGhpcy5raW5kLCB0aGlzLm5hbWUpOwoKICAvLy8gYHRydWVgIGlmIHRoaXMgb3BlcmF0b3IgY2FuIGJlIGltcGxlbWVudGVkIHRocm91Z2ggYW4gYG9wZXJhdG9yIFtuYW1lXWAKICAvLy8gbWV0aG9kLgogIGJvb2wgZ2V0IGlzVXNlckRlZmluYWJsZSA9PiB0cnVlOwoKICBTdHJpbmcgZ2V0IHNlbGVjdG9yTmFtZSA9PiBuYW1lOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBuYW1lOwoKICAvLy8gVGhlID09IG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBFUSA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLkVRLCAnPT0nKTsKCiAgLy8vIFRoZSAhPSBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgTk9UX0VRID0gY29uc3QgX05vdEVxdWFsc09wZXJhdG9yKCk7CgogIC8vLyBUaGUgW10gb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIElOREVYID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuSU5ERVgsICdbXScpOwoKICAvLy8gVGhlIGJpbmFyeSArIG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBBREQgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5BREQsICcrJyk7CgogIC8vLyBUaGUgYmluYXJ5IC0gb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIFNVQiA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLlNVQiwgJy0nKTsKCiAgLy8vIFRoZSBiaW5hcnkgKiBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgTVVMID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuTVVMLCAnKicpOwoKICAvLy8gVGhlIGJpbmFyeSAvIG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBESVYgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5ESVYsICcvJyk7CgogIC8vLyBUaGUgYmluYXJ5IH4vIG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBJRElWID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuSURJViwgJ34vJyk7CgogIC8vLyBUaGUgYmluYXJ5ICUgb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIE1PRCA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLk1PRCwgJyUnKTsKCiAgLy8vIFRoZSBiaW5hcnkgPDwgb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIFNITCA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLlNITCwgJzw8Jyk7CgogIC8vLyBUaGUgYmluYXJ5ID4+IG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBTSFIgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5TSFIsICc+PicpOwoKICAvLy8gVGhlIGJpbmFyeSA+Pj4gb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIFNIUlUgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5TSFJVLCAnPj4nKTsKCiAgLy8vIFRoZSBiaW5hcnkgPj0gb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIEdURVEgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5HVEVRLCAnPj0nKTsKCiAgLy8vIFRoZSBiaW5hcnkgPiBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgR1QgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5HVCwgJz4nKTsKCiAgLy8vIFRoZSBiaW5hcnkgPD0gb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIExURVEgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5MVEVRLCAnPD0nKTsKCiAgLy8vIFRoZSBiaW5hcnkgPCBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgTFQgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5MVCwgJzwnKTsKCiAgLy8vIFRoZSBiaW5hcnkgJiBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgQU5EID0KICAgICAgY29uc3QgQmluYXJ5T3BlcmF0b3IuXyhCaW5hcnlPcGVyYXRvcktpbmQuQU5ELCAnJicpOwoKICAvLy8gVGhlIGJpbmFyeSB8IG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBPUiA9CiAgICAgIGNvbnN0IEJpbmFyeU9wZXJhdG9yLl8oQmluYXJ5T3BlcmF0b3JLaW5kLk9SLCAnfCcpOwoKICAvLy8gVGhlIGJpbmFyeSBeIG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBYT1IgPQogICAgICBjb25zdCBCaW5hcnlPcGVyYXRvci5fKEJpbmFyeU9wZXJhdG9yS2luZC5YT1IsICdeJyk7CgogIC8vLyBUaGUgbG9naWNhbCAmJiBvcGVyYXRvci4KICBzdGF0aWMgY29uc3QgQmluYXJ5T3BlcmF0b3IgTE9HSUNBTF9BTkQgPQogICAgICBjb25zdCBfTG9naWNhbE9wZXJhdG9yKEJpbmFyeU9wZXJhdG9yS2luZC5MT0dJQ0FMX0FORCwgJyYmJyk7CgogIC8vLyBUaGUgYmluYXJ5IHwgb3BlcmF0b3IuCiAgc3RhdGljIGNvbnN0IEJpbmFyeU9wZXJhdG9yIExPR0lDQUxfT1IgPQogICAgICBjb25zdCBfTG9naWNhbE9wZXJhdG9yKEJpbmFyeU9wZXJhdG9yS2luZC5MT0dJQ0FMX09SLCAnfHwnKTsKCiAgLy8vIFRoZSBpZi1udWxsID8/IG9wZXJhdG9yLgogIHN0YXRpYyBjb25zdCBCaW5hcnlPcGVyYXRvciBJRl9OVUxMID0KICAgICAgY29uc3QgX0lmTnVsbE9wZXJhdG9yKEJpbmFyeU9wZXJhdG9yS2luZC5JRl9OVUxMLCAnPz8nKTsKCiAgc3RhdGljIEJpbmFyeU9wZXJhdG9yIHBhcnNlKFN0cmluZyB2YWx1ZSkgewogICAgc3dpdGNoICh2YWx1ZSkgewogICAgICBjYXNlICcmJic6CiAgICAgICAgcmV0dXJuIExPR0lDQUxfQU5EOwogICAgICBjYXNlICd8fCc6CiAgICAgICAgcmV0dXJuIExPR0lDQUxfT1I7CiAgICAgIGNhc2UgJz8/JzoKICAgICAgICByZXR1cm4gSUZfTlVMTDsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gcGFyc2VVc2VyRGVmaW5hYmxlKHZhbHVlKTsKICAgIH0KICB9CgogIHN0YXRpYyBCaW5hcnlPcGVyYXRvciBwYXJzZVVzZXJEZWZpbmFibGUoU3RyaW5nIHZhbHVlKSB7CiAgICBzd2l0Y2ggKHZhbHVlKSB7CiAgICAgIGNhc2UgJz09JzoKICAgICAgICByZXR1cm4gRVE7CiAgICAgIGNhc2UgJyE9JzoKICAgICAgICByZXR1cm4gTk9UX0VROwogICAgICBjYXNlICdbXSc6CiAgICAgICAgcmV0dXJuIElOREVYOwogICAgICBjYXNlICcqJzoKICAgICAgICByZXR1cm4gTVVMOwogICAgICBjYXNlICcvJzoKICAgICAgICByZXR1cm4gRElWOwogICAgICBjYXNlICclJzoKICAgICAgICByZXR1cm4gTU9EOwogICAgICBjYXNlICd+Lyc6CiAgICAgICAgcmV0dXJuIElESVY7CiAgICAgIGNhc2UgJysnOgogICAgICAgIHJldHVybiBBREQ7CiAgICAgIGNhc2UgJy0nOgogICAgICAgIHJldHVybiBTVUI7CiAgICAgIGNhc2UgJzw8JzoKICAgICAgICByZXR1cm4gU0hMOwogICAgICBjYXNlICc+Pic6CiAgICAgICAgcmV0dXJuIFNIUjsKICAgICAgY2FzZSAnPj4+JzoKICAgICAgICByZXR1cm4gU0hSVTsKICAgICAgY2FzZSAnPj0nOgogICAgICAgIHJldHVybiBHVEVROwogICAgICBjYXNlICc+JzoKICAgICAgICByZXR1cm4gR1Q7CiAgICAgIGNhc2UgJzw9JzoKICAgICAgICByZXR1cm4gTFRFUTsKICAgICAgY2FzZSAnPCc6CiAgICAgICAgcmV0dXJuIExUOwogICAgICBjYXNlICcmJzoKICAgICAgICByZXR1cm4gQU5EOwogICAgICBjYXNlICdeJzoKICAgICAgICByZXR1cm4gWE9SOwogICAgICBjYXNlICd8JzoKICAgICAgICByZXR1cm4gT1I7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICAvLyBpZ25vcmU6IE1JU1NJTkdfUkVUVVJOCiAgc3RhdGljIEJpbmFyeU9wZXJhdG9yIGZyb21LaW5kKEJpbmFyeU9wZXJhdG9yS2luZCBraW5kKSB7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuRVE6CiAgICAgICAgcmV0dXJuIEVROwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5OT1RfRVE6CiAgICAgICAgcmV0dXJuIE5PVF9FUTsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuSU5ERVg6CiAgICAgICAgcmV0dXJuIElOREVYOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5NVUw6CiAgICAgICAgcmV0dXJuIE1VTDsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuRElWOgogICAgICAgIHJldHVybiBESVY7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLk1PRDoKICAgICAgICByZXR1cm4gTU9EOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5JRElWOgogICAgICAgIHJldHVybiBJRElWOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5BREQ6CiAgICAgICAgcmV0dXJuIEFERDsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuU1VCOgogICAgICAgIHJldHVybiBTVUI7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLlNITDoKICAgICAgICByZXR1cm4gU0hMOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5TSFI6CiAgICAgICAgcmV0dXJuIFNIUjsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuU0hSVToKICAgICAgICByZXR1cm4gU0hSVTsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuR1RFUToKICAgICAgICByZXR1cm4gR1RFUTsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuR1Q6CiAgICAgICAgcmV0dXJuIEdUOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MVEVROgogICAgICAgIHJldHVybiBMVEVROwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MVDoKICAgICAgICByZXR1cm4gTFQ7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkFORDoKICAgICAgICByZXR1cm4gQU5EOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5YT1I6CiAgICAgICAgcmV0dXJuIFhPUjsKICAgICAgY2FzZSBCaW5hcnlPcGVyYXRvcktpbmQuT1I6CiAgICAgICAgcmV0dXJuIE9SOwogICAgICBjYXNlIEJpbmFyeU9wZXJhdG9yS2luZC5MT0dJQ0FMX0FORDoKICAgICAgICByZXR1cm4gTE9HSUNBTF9BTkQ7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLkxPR0lDQUxfT1I6CiAgICAgICAgcmV0dXJuIExPR0lDQUxfT1I7CiAgICAgIGNhc2UgQmluYXJ5T3BlcmF0b3JLaW5kLklGX05VTEw6CiAgICAgICAgcmV0dXJuIElGX05VTEw7CiAgICB9CiAgfQp9CgovLy8gVGhlIG9wZXJhdG9yICE9LCB3aGljaCBpcyBub3QgdXNlciBkZWZpbmFibGUgb3BlcmF0b3IgYnV0IGluc3RlYWQgaXMgYQovLy8gbmVnYXRpb24gb2YgYSBjYWxsIHRvIHVzZXIgZGVmaW5hYmxlIG9wZXJhdG9yLCBuYW1lbHkgPT0uCmNsYXNzIF9Ob3RFcXVhbHNPcGVyYXRvciBleHRlbmRzIEJpbmFyeU9wZXJhdG9yIHsKICBjb25zdCBfTm90RXF1YWxzT3BlcmF0b3IoKSA6IHN1cGVyLl8oQmluYXJ5T3BlcmF0b3JLaW5kLk5PVF9FUSwgJyE9Jyk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVXNlckRlZmluYWJsZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBzZWxlY3Rvck5hbWUgPT4gJz09JzsKfQoKLy8vIFRoZSBvcGVyYXRvcnMgJiYgYW5kIHx8IHdoaWNoIGFyZSBub3QgdXNlciBkZWZpbmFibGUgb3BlcmF0b3JzIGJ1dCBjb250cm9sCi8vLyBzdHJ1Y3R1cmVzLgpjbGFzcyBfTG9naWNhbE9wZXJhdG9yIGV4dGVuZHMgQmluYXJ5T3BlcmF0b3IgewogIGNvbnN0IF9Mb2dpY2FsT3BlcmF0b3IoQmluYXJ5T3BlcmF0b3JLaW5kIGtpbmQsIFN0cmluZyBuYW1lKQogICAgICA6IHN1cGVyLl8oa2luZCwgbmFtZSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzVXNlckRlZmluYWJsZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBzZWxlY3Rvck5hbWUgPT4gbnVsbDsKfQoKLy8vIFRoZSBvcGVyYXRvcnMgPz8gaXMgbm90IHVzZXIgZGVmaW5hYmxlLgpjbGFzcyBfSWZOdWxsT3BlcmF0b3IgZXh0ZW5kcyBCaW5hcnlPcGVyYXRvciB7CiAgY29uc3QgX0lmTnVsbE9wZXJhdG9yKEJpbmFyeU9wZXJhdG9yS2luZCBraW5kLCBTdHJpbmcgbmFtZSkKICAgICAgOiBzdXBlci5fKGtpbmQsIG5hbWUpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1VzZXJEZWZpbmFibGUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgc2VsZWN0b3JOYW1lID0+ICc/Pyc7Cn0KgVcATk48ARsBJT1AARkHCg4CARYgFR0BQAE0AT88AQwdARwjPQEcJkQBHCpDAS0VEBQQFxAbDxUGBAEcOhQiFCUXKRsGBAIBGgYKCQcHBwcIBwcHCAgGCAYHBgcPDgsCARchFQEwAU4OJAEjAQwdARcjOwEXQwEXJj4BHSQ7AR0kOwEdJDsBHSQ7AR4lPQEdJDsBHiQ8AR4kPAEfJT0BHiU9AR0jOgEeJT0BHSM6AR0kOwEdIzoBHSQ7AR8sRAEdK0MBHyg/AS4VERwRGxEYDyoGBAE7FRETERcRFhAUEBQQFBEVEBQQFBEUERQSFREVEBMRFRATEBQQFBATDxUGBAEcPBQiEyYXJRYjFCMUIxQkFSMUIxQjFCMUJBUkFSITJBUiEyMUIxQiEyscKhsnGAYEAgFLPjJJAQwlAQwjAgFPEDA/HQEMJQEMIwIBLC8+HQEMJQEMIwIBLHBhY2thZ2U6Y29tcGlsZXIvc3JjL2VsZW1lbnRzL29wZXJhdG9ycy5kYXJ0RXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2tlcm5lbC9pbnZvY2F0aW9uX21pcnJvcl9jb25zdGFudHMuZGFydIFXLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmNvbnN0IGludCBpbnZvY2F0aW9uTWlycm9yTWV0aG9kS2luZCA9IDA7CmNvbnN0IGludCBpbnZvY2F0aW9uTWlycm9yR2V0dGVyS2luZCA9IDE7CmNvbnN0IGludCBpbnZvY2F0aW9uTWlycm9yU2V0dGVyS2luZCA9IDI7CgkATk48ASoqKgE8cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2ludm9jYXRpb25fbWlycm9yX2NvbnN0YW50cy5kYXJ0NnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2tlcm5lbC9rZXJuZWxfd29ybGQuZGFydJlLLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2Fubm90YXRpb25zLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydCcgc2hvdyBLRmllbGRBbmFseXNpczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2JhY2tlbmRfdXNhZ2UuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ub19zdWNoX21ldGhvZF9yZWdpc3RyeS5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9tZW1iZXJfdXNhZ2UuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCc7CgppbXBvcnQgJ2VsZW1lbnRfbWFwX2ltcGwuZGFydCc7CgpjbGFzcyBLQ2xvc2VkV29ybGRJbXBsIGltcGxlbWVudHMgS0Nsb3NlZFdvcmxkIHsKICBmaW5hbCBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXA7CgogIEBvdmVycmlkZQogIGZpbmFsIEtFbGVtZW50RW52aXJvbm1lbnQgZWxlbWVudEVudmlyb25tZW50OwoKICBAb3ZlcnJpZGUKICBmaW5hbCBEYXJ0VHlwZXMgZGFydFR5cGVzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBLQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHM7CgogIEBvdmVycmlkZQogIGZpbmFsIE5hdGl2ZURhdGEgbmF0aXZlRGF0YTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgSW50ZXJjZXB0b3JEYXRhIGludGVyY2VwdG9yRGF0YTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgQmFja2VuZFVzYWdlIGJhY2tlbmRVc2FnZTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTm9TdWNoTWV0aG9kRGF0YSBub1N1Y2hNZXRob2REYXRhOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIFNldDxDbGFzc0VudGl0eT4+IG1peGluVXNlczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgTWFwPENsYXNzRW50aXR5LCBTZXQ8Q2xhc3NFbnRpdHk+PiB0eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDYW4gdGhpcyBiZSBkZXJpdmVkIGZyb20gW0NsYXNzU2V0XXM/CiAgZmluYWwgU2V0PENsYXNzRW50aXR5PiBfaW1wbGVtZW50ZWRDbGFzc2VzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGxpdmVJbnN0YW5jZU1lbWJlcnM7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gYXNzaWduZWRJbnN0YW5jZU1lbWJlcnM7CiAgQG92ZXJyaWRlCiAgZmluYWwgS0ZpZWxkQW5hbHlzaXMgZmllbGRBbmFseXNpczsKCiAgQG92ZXJyaWRlCiAgZmluYWwgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGxpdmVOYXRpdmVDbGFzc2VzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBNZW1iZXJVc2FnZT4gbGl2ZU1lbWJlclVzYWdlOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBDbGFzc0hpZXJhcmNoeSBjbGFzc0hpZXJhcmNoeTsKCiAgQG92ZXJyaWRlCiAgZmluYWwgQW5ub3RhdGlvbnNEYXRhIGFubm90YXRpb25zRGF0YTsKCiAgUnVudGltZVR5cGVzTmVlZCBfcnRpTmVlZDsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU2V0PERhcnRUeXBlPiBpc0NoZWNrczsKCiAgZmluYWwgTWFwPEVudGl0eSwgU2V0PERhcnRUeXBlPj4gc3RhdGljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzOwoKICBmaW5hbCBNYXA8U2VsZWN0b3IsIFNldDxEYXJ0VHlwZT4+IGR5bmFtaWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXM7CgogIEBvdmVycmlkZQogIGZpbmFsIFNldDxUeXBlVmFyaWFibGVUeXBlPiB0eXBlVmFyaWFibGVUeXBlTGl0ZXJhbHM7CgogIEBvdmVycmlkZQogIGZpbmFsIFNldDxMb2NhbD4gZ2VuZXJpY0xvY2FsRnVuY3Rpb25zOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTZXQ8RnVuY3Rpb25FbnRpdHk+IGNsb3N1cml6ZWRNZW1iZXJzV2l0aEZyZWVUeXBlVmFyaWFibGVzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBJdGVyYWJsZTxMb2NhbD4gbG9jYWxGdW5jdGlvbnM7CgogIEBvdmVycmlkZQogIGZpbmFsIEl0ZXJhYmxlPEludGVyZmFjZVR5cGU+IGluc3RhbnRpYXRlZFR5cGVzOwoKICBAb3ZlcnJpZGUKICBSdW50aW1lVHlwZXNOZWVkIGdldCBydGlOZWVkID0+IF9ydGlOZWVkOwoKICBLQ2xvc2VkV29ybGRJbXBsKHRoaXMuZWxlbWVudE1hcCwKICAgICAge0NvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAgICB0aGlzLmVsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgdGhpcy5kYXJ0VHlwZXMsCiAgICAgIHRoaXMuY29tbW9uRWxlbWVudHMsCiAgICAgIHRoaXMubmF0aXZlRGF0YSwKICAgICAgdGhpcy5pbnRlcmNlcHRvckRhdGEsCiAgICAgIHRoaXMuYmFja2VuZFVzYWdlLAogICAgICB0aGlzLm5vU3VjaE1ldGhvZERhdGEsCiAgICAgIFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyIHJ0aU5lZWRCdWlsZGVyLAogICAgICB0aGlzLmZpZWxkQW5hbHlzaXMsCiAgICAgIFNldDxDbGFzc0VudGl0eT4gaW1wbGVtZW50ZWRDbGFzc2VzLAogICAgICB0aGlzLmxpdmVOYXRpdmVDbGFzc2VzLAogICAgICB0aGlzLmxpdmVJbnN0YW5jZU1lbWJlcnMsCiAgICAgIHRoaXMuYXNzaWduZWRJbnN0YW5jZU1lbWJlcnMsCiAgICAgIHRoaXMubGl2ZU1lbWJlclVzYWdlLAogICAgICB0aGlzLm1peGluVXNlcywKICAgICAgdGhpcy50eXBlc0ltcGxlbWVudGVkQnlTdWJjbGFzc2VzLAogICAgICB0aGlzLmNsYXNzSGllcmFyY2h5LAogICAgICB0aGlzLmFubm90YXRpb25zRGF0YSwKICAgICAgdGhpcy5pc0NoZWNrcywKICAgICAgdGhpcy5zdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXMsCiAgICAgIHRoaXMuZHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcywKICAgICAgdGhpcy50eXBlVmFyaWFibGVUeXBlTGl0ZXJhbHMsCiAgICAgIHRoaXMuZ2VuZXJpY0xvY2FsRnVuY3Rpb25zLAogICAgICB0aGlzLmNsb3N1cml6ZWRNZW1iZXJzV2l0aEZyZWVUeXBlVmFyaWFibGVzLAogICAgICB0aGlzLmxvY2FsRnVuY3Rpb25zLAogICAgICB0aGlzLmluc3RhbnRpYXRlZFR5cGVzfSkKICAgICAgOiBfaW1wbGVtZW50ZWRDbGFzc2VzID0gaW1wbGVtZW50ZWRDbGFzc2VzIHsKICAgIF9ydGlOZWVkID0gcnRpTmVlZEJ1aWxkZXIuY29tcHV0ZVJ1bnRpbWVUeXBlc05lZWQodGhpcywgb3B0aW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW1wbGVtZW50ZWQoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gX2ltcGxlbWVudGVkQ2xhc3Nlcy5jb250YWlucyhjbHMpOwogIH0KCiAgLy8vIE5lZWRlZCBmb3IgdGVzdGluZy4KICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGdldCBwcm9jZXNzZWRNZW1iZXJzID0+IGxpdmVNZW1iZXJVc2FnZS5rZXlzOwoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hTdGF0aWNUeXBlQXJndW1lbnQoCiAgICAgIHZvaWQgZihFbnRpdHkgZnVuY3Rpb24sIFNldDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykpIHsKICAgIHN0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY2llcy5mb3JFYWNoKGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoRHluYW1pY1R5cGVBcmd1bWVudCgKICAgICAgdm9pZCBmKFNlbGVjdG9yIHNlbGVjdG9yLCBTZXQ8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMpKSB7CiAgICBkeW5hbWljVHlwZUFyZ3VtZW50RGVwZW5kZW5jaWVzLmZvckVhY2goZik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzTWVtYmVyVXNlZChNZW1iZXJFbnRpdHkgbWVtYmVyKSA9PiBsaXZlTWVtYmVyVXNhZ2UuY29udGFpbnNLZXkobWVtYmVyKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoR2VuZXJpY01ldGhvZChGdW5jdGlvbiBmKSB7CiAgICBsaXZlTWVtYmVyVXNhZ2UuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNhZ2UgdXNhZ2UpIHsKICAgICAgaWYgKG1lbWJlciBpcyBGdW5jdGlvbkVudGl0eSAmJgogICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhtZW1iZXIpLmlzTm90RW1wdHkpIHsKICAgICAgICBmKG1lbWJlcik7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoR2VuZXJpY0luc3RhbmNlTWV0aG9kKEZ1bmN0aW9uIGYpIHsKICAgIGxpdmVNZW1iZXJVc2FnZS5mb3JFYWNoKChNZW1iZXJFbnRpdHkgbWVtYmVyLCBNZW1iZXJVc2FnZSB1c2FnZSkgewogICAgICBpZiAobWVtYmVyIGlzIEZ1bmN0aW9uRW50aXR5ICYmCiAgICAgICAgICBtZW1iZXIuaXNJbnN0YW5jZU1lbWJlciAmJgogICAgICAgICAgZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZVZhcmlhYmxlcyhtZW1iZXIpLmlzTm90RW1wdHkpIHsKICAgICAgICBmKG1lbWJlcik7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgTGlzdDxGdW5jdGlvbkVudGl0eT4gX3VzZXJOb1N1Y2hNZXRob2RzQ2FjaGU7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBnZXQgdXNlck5vU3VjaE1ldGhvZHMgewogICAgaWYgKF91c2VyTm9TdWNoTWV0aG9kc0NhY2hlID09IG51bGwpIHsKICAgICAgX3VzZXJOb1N1Y2hNZXRob2RzQ2FjaGUgPSA8RnVuY3Rpb25FbnRpdHk+W107CgogICAgICBsaXZlTWVtYmVyVXNhZ2UuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNhZ2UgbWVtYmVyVXNhZ2UpIHsKICAgICAgICBpZiAobWVtYmVyIGlzIEZ1bmN0aW9uRW50aXR5ICYmIG1lbWJlclVzYWdlLmhhc1VzZSkgewogICAgICAgICAgaWYgKG1lbWJlci5pc0luc3RhbmNlTWVtYmVyICYmCiAgICAgICAgICAgICAgbWVtYmVyLm5hbWUgPT0gSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXyAmJgogICAgICAgICAgICAgICFjb21tb25FbGVtZW50cy5pc0RlZmF1bHROb1N1Y2hNZXRob2RJbXBsZW1lbnRhdGlvbihtZW1iZXIpKSB7CiAgICAgICAgICAgIF91c2VyTm9TdWNoTWV0aG9kc0NhY2hlLmFkZChtZW1iZXIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgcmV0dXJuIF91c2VyTm9TdWNoTWV0aG9kc0NhY2hlOwogIH0KCiAgU2V0PEZ1bmN0aW9uRW50aXR5PiBfY2xvc3VyaXplZE1lbWJlcnNDYWNoZTsKCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IGdldCBjbG9zdXJpemVkTWVtYmVycyB7CiAgICBpZiAoX2Nsb3N1cml6ZWRNZW1iZXJzQ2FjaGUgPT0gbnVsbCkgewogICAgICBfY2xvc3VyaXplZE1lbWJlcnNDYWNoZSA9IHt9OwogICAgICBsaXZlTWVtYmVyVXNhZ2UuZm9yRWFjaCgoTWVtYmVyRW50aXR5IG1lbWJlciwgTWVtYmVyVXNhZ2UgdXNhZ2UpIHsKICAgICAgICBpZiAobWVtYmVyLmlzRnVuY3Rpb24gJiYgbWVtYmVyLmlzSW5zdGFuY2VNZW1iZXIgJiYgdXNhZ2UuaGFzUmVhZCkgewogICAgICAgICAgX2Nsb3N1cml6ZWRNZW1iZXJzQ2FjaGUuYWRkKG1lbWJlcik7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBfY2xvc3VyaXplZE1lbWJlcnNDYWNoZTsKICB9CgogIFNldDxGdW5jdGlvbkVudGl0eT4gX2Nsb3N1cml6ZWRTdGF0aWNzQ2FjaGU7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEZ1bmN0aW9uRW50aXR5PiBnZXQgY2xvc3VyaXplZFN0YXRpY3MgewogICAgaWYgKF9jbG9zdXJpemVkU3RhdGljc0NhY2hlID09IG51bGwpIHsKICAgICAgX2Nsb3N1cml6ZWRTdGF0aWNzQ2FjaGUgPSB7fTsKICAgICAgbGl2ZU1lbWJlclVzYWdlLmZvckVhY2goKE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclVzYWdlIHVzYWdlKSB7CiAgICAgICAgaWYgKG1lbWJlci5pc0Z1bmN0aW9uICYmCiAgICAgICAgICAgIChtZW1iZXIuaXNTdGF0aWMgfHwgbWVtYmVyLmlzVG9wTGV2ZWwpICYmCiAgICAgICAgICAgIHVzYWdlLmhhc1JlYWQpIHsKICAgICAgICAgIF9jbG9zdXJpemVkU3RhdGljc0NhY2hlLmFkZChtZW1iZXIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gX2Nsb3N1cml6ZWRTdGF0aWNzQ2FjaGU7CiAgfQp9CoDqAE5OPAEfIiQhKUArLik1NhorKCQYASABMSsBDDABDB0BDCgBDB8BDCkBDCMBDCsBDDYBDEkBQC4BDDQBDDgMJgEMMQEMOAEMJwEMKQEdAQwgAUMBRgEMOAEMKgEMRAEMKAEMMwEMLAEkIB8WGxccGR0uGiseICQcFikbHBUrLCUiMxsfM0YEAQwoLgQBGkcBDCI+LwQBDCNAMAQBDFEBDCpHJkwTCAgEAQwyRyYlTBMICAQBMAEMMys0AU8+KTpNMQwKCgYBJAQBLwEMMyskSU0vCgoGJAQBLwEMMyskSSE2HS8KCgYkBAIBLXBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9rZXJuZWxfd29ybGQuZGFydDRzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL3NvcnRlci5kYXJ0hEsvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX2VtaXR0ZXIuc29ydGVyOwoKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKCi8vLyBTb3J0aW5nIHN0cmF0ZWd5IGZvciBsaWJyYXJpZXMsIGNsYXNzZXMgYW5kIG1lbWJlcnMuCmFic3RyYWN0IGNsYXNzIFNvcnRlciB7CiAgLy8vIFJldHVybnMgYSBzb3J0ZWQgbGlzdCBvZiBbbGlicmFyaWVzXS4KICBJdGVyYWJsZTxMaWJyYXJ5RW50aXR5PiBzb3J0TGlicmFyaWVzKEl0ZXJhYmxlPExpYnJhcnlFbnRpdHk+IGxpYnJhcmllcyk7CgogIC8vLyBSZXR1cm5zIGEgc29ydGVkIGxpc3Qgb2YgW2NsYXNzZXNdLgogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBzb3J0Q2xhc3NlcyhJdGVyYWJsZTxDbGFzc0VudGl0eT4gY2xhc3Nlcyk7CgogIC8vLyBSZXR1cm5zIGEgc29ydGVkIGxpc3Qgb2YgW3R5cGVkZWZzXS4KICBJdGVyYWJsZTxUeXBlZGVmRW50aXR5PiBzb3J0VHlwZWRlZnMoSXRlcmFibGU8VHlwZWRlZkVudGl0eT4gdHlwZWRlZnMpOwoKICAvLy8gUmV0dXJucyBhIHNvcnRlZCBsaXN0IG9mIFttZW1iZXJzXS4KICBJdGVyYWJsZTxUPiBzb3J0TWVtYmVyczxUIGV4dGVuZHMgTWVtYmVyRW50aXR5PihJdGVyYWJsZTxUPiBtZW1iZXJzKTsKCiAgaW50IGNvbXBhcmVMaWJyYXJpZXNCeUxvY2F0aW9uKExpYnJhcnlFbnRpdHkgYSwgTGlicmFyeUVudGl0eSBiKTsKICBpbnQgY29tcGFyZUNsYXNzZXNCeUxvY2F0aW9uKENsYXNzRW50aXR5IGEsIENsYXNzRW50aXR5IGIpOwogIGludCBjb21wYXJlVHlwZWRlZnNCeUxvY2F0aW9uKFR5cGVkZWZFbnRpdHkgYSwgVHlwZWRlZkVudGl0eSBiKTsKICBpbnQgY29tcGFyZU1lbWJlcnNCeUxvY2F0aW9uKE1lbWJlckVudGl0eSBhLCBNZW1iZXJFbnRpdHkgYik7Cn0KHQBOTjwBIwEkATkYLEwBKkQBK0oBKkgBRD5DQAIBK3BhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvc29ydGVyLmRhcnQ5c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvY29uc3RhbnRzL2NvbnN0cnVjdG9ycy5kYXJ0qwMvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmNvbnN0YW50cy5jb25zdHJ1Y3RvcnM7CgppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnIHNob3cgRmllbGRFbnRpdHk7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCcgc2hvdyBDYWxsU3RydWN0dXJlOwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JzsKaW1wb3J0ICdldmFsdWF0aW9uLmRhcnQnOwppbXBvcnQgJ2V4cHJlc3Npb25zLmRhcnQnOwoKZW51bSBDb25zdGFudENvbnN0cnVjdG9yS2luZCB7CiAgR0VORVJBVElWRSwKICBSRURJUkVDVElOR19HRU5FUkFUSVZFLAogIFJFRElSRUNUSU5HX0ZBQ1RPUlksCiAgRVJST05FT1VTLAp9CgpjbGFzcyBJbnN0YW5jZURhdGEgewogIGZpbmFsIE1hcDxGaWVsZEVudGl0eSwgQ29uc3RhbnRFeHByZXNzaW9uPiBmaWVsZE1hcDsKICBmaW5hbCBMaXN0PEFzc2VydENvbnN0YW50RXhwcmVzc2lvbj4gYXNzZXJ0aW9uczsKCiAgSW5zdGFuY2VEYXRhKHRoaXMuZmllbGRNYXAsIHRoaXMuYXNzZXJ0aW9ucyk7Cn0KCi8vLyBEZWZpbml0aW9uIG9mIGEgY29uc3RhbnQgY29uc3RydWN0b3IuCmFic3RyYWN0IGNsYXNzIENvbnN0YW50Q29uc3RydWN0b3IgewogIENvbnN0YW50Q29uc3RydWN0b3JLaW5kIGdldCBraW5kOwoKICAvLy8gQ29tcHV0ZXMgdGhlIHR5cGUgb2YgdGhlIGluc3RhbmNlIGNyZWF0ZWQgaW4gYSBjb25zdCBjb25zdHJ1Y3RvcgogIC8vLyBpbnZvY2F0aW9uIHdpdGggdHlwZSBbbmV3VHlwZV0uCiAgSW50ZXJmYWNlVHlwZSBjb21wdXRlSW5zdGFuY2VUeXBlKAogICAgICBFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsIEludGVyZmFjZVR5cGUgbmV3VHlwZSk7CgogIC8vLyBDb21wdXRlcyB0aGUgY29uc3RhbnQgZXhwcmVzc2lvbnMgb2YgdGhlIGZpZWxkcyBhbmQgaW5pdGlhbGl6ZXIgYXNzZXJ0aW9ucwogIC8vLyBvZiB0aGUgY3JlYXRlZCBpbnN0YW5jZSBpbiBhIGNvbnN0IGNvbnN0cnVjdG9yIGludm9jYXRpb24gd2l0aAogIC8vLyBbYXJndW1lbnRzXS4KICBJbnN0YW5jZURhdGEgY29tcHV0ZUluc3RhbmNlRGF0YShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBhcmd1bWVudHMsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSk7CgogIGFjY2VwdChDb25zdGFudENvbnN0cnVjdG9yVmlzaXRvciB2aXNpdG9yLCBhcmcpOwp9CgphYnN0cmFjdCBjbGFzcyBDb25zdGFudENvbnN0cnVjdG9yVmlzaXRvcjxSLCBBPiB7CiAgY29uc3QgQ29uc3RhbnRDb25zdHJ1Y3RvclZpc2l0b3IoKTsKCiAgUiB2aXNpdCgKICAgICAgY292YXJpYW50IENvbnN0YW50Q29uc3RydWN0b3IgY29uc3RhbnRDb25zdHJ1Y3RvciwgY292YXJpYW50IEEgY29udGV4dCkgewogICAgcmV0dXJuIGNvbnN0YW50Q29uc3RydWN0b3IuYWNjZXB0KHRoaXMsIGNvbnRleHQpOwogIH0KCiAgUiB2aXNpdEdlbmVyYXRpdmUoCiAgICAgIGNvdmFyaWFudCBHZW5lcmF0aXZlQ29uc3RhbnRDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0UmVkaXJlY3RpbmdHZW5lcmF0aXZlKAogICAgICBjb3ZhcmlhbnQgUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RhbnRDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwKICAgICAgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5KAogICAgICBjb3ZhcmlhbnQgUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RhbnRDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwKICAgICAgY292YXJpYW50IEEgYXJnKTsKICBSIHZpc2l0RXJyb25lb3VzKAogICAgICBjb3ZhcmlhbnQgRXJyb25lb3VzQ29uc3RhbnRDb25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwgY292YXJpYW50IEEgYXJnKTsKfQoKLy8vIEEgZ2VuZXJhdGl2ZSBjb25zdGFudCBjb25zdHJ1Y3Rvci4KY2xhc3MgR2VuZXJhdGl2ZUNvbnN0YW50Q29uc3RydWN0b3IgaW1wbGVtZW50cyBDb25zdGFudENvbnN0cnVjdG9yIHsKICBmaW5hbCBJbnRlcmZhY2VUeXBlIHR5cGU7CiAgZmluYWwgTWFwPGR5bmFtaWMgLyppbnR8U3RyaW5nKi8sIENvbnN0YW50RXhwcmVzc2lvbj4gZGVmYXVsdFZhbHVlczsKICBmaW5hbCBNYXA8RmllbGRFbnRpdHksIENvbnN0YW50RXhwcmVzc2lvbj4gZmllbGRNYXA7CiAgZmluYWwgTGlzdDxBc3NlcnRDb25zdGFudEV4cHJlc3Npb24+IGFzc2VydGlvbnM7CiAgZmluYWwgQ29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb24gc3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb247CgogIEdlbmVyYXRpdmVDb25zdGFudENvbnN0cnVjdG9yKHRoaXMudHlwZSwgdGhpcy5kZWZhdWx0VmFsdWVzLCB0aGlzLmZpZWxkTWFwLAogICAgICB0aGlzLmFzc2VydGlvbnMsIHRoaXMuc3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb24pOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudENvbnN0cnVjdG9yS2luZCBnZXQga2luZCA9PiBDb25zdGFudENvbnN0cnVjdG9yS2luZC5HRU5FUkFUSVZFOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGNvbXB1dGVJbnN0YW5jZVR5cGUoCiAgICAgIEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCwgSW50ZXJmYWNlVHlwZSBuZXdUeXBlKSB7CiAgICByZXR1cm4gZW52aXJvbm1lbnQuc3Vic3RCeUNvbnRleHQodHlwZSwgbmV3VHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnN0YW5jZURhdGEgY29tcHV0ZUluc3RhbmNlRGF0YShFdmFsdWF0aW9uRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsCiAgICAgIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBhcmd1bWVudHMsIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSkgewogICAgTm9ybWFsaXplZEFyZ3VtZW50cyBhcmdzID0KICAgICAgICBuZXcgTm9ybWFsaXplZEFyZ3VtZW50cyhkZWZhdWx0VmFsdWVzLCBjYWxsU3RydWN0dXJlLCBhcmd1bWVudHMpOwogICAgSW5zdGFuY2VEYXRhIGFwcGxpZWRJbnN0YW5jZURhdGEgPQogICAgICAgIGFwcGx5SW5zdGFuY2VEYXRhKGVudmlyb25tZW50LCBhcmdzLCBzdXBlckNvbnN0cnVjdG9ySW52b2NhdGlvbik7CiAgICBmaWVsZE1hcC5mb3JFYWNoKChGaWVsZEVudGl0eSBmaWVsZCwgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50KSB7CiAgICAgIGFwcGxpZWRJbnN0YW5jZURhdGEuZmllbGRNYXBbZmllbGRdID0gY29uc3RhbnQuYXBwbHkoYXJncyk7CiAgICB9KTsKICAgIGZvciAoQXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uIGFzc2VydGlvbiBpbiBhc3NlcnRpb25zKSB7CiAgICAgIGFwcGxpZWRJbnN0YW5jZURhdGEuYXNzZXJ0aW9ucy5hZGQoYXNzZXJ0aW9uLmFwcGx5KGFyZ3MpKTsKICAgIH0KICAgIHJldHVybiBhcHBsaWVkSW5zdGFuY2VEYXRhOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50Q29uc3RydWN0b3JWaXNpdG9yIHZpc2l0b3IsIGFyZykgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRHZW5lcmF0aXZlKHRoaXMsIGFyZyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIGludCBoYXNoID0gSGFzaGluZy5vYmplY3RIYXNoKHR5cGUpOwogICAgaGFzaCA9IEhhc2hpbmcubWFwSGFzaChkZWZhdWx0VmFsdWVzLCBoYXNoKTsKICAgIGhhc2ggPSBIYXNoaW5nLm1hcEhhc2goZmllbGRNYXAsIGhhc2gpOwogICAgcmV0dXJuIEhhc2hpbmcub2JqZWN0SGFzaChzdXBlckNvbnN0cnVjdG9ySW52b2NhdGlvbiwgaGFzaCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIEdlbmVyYXRpdmVDb25zdGFudENvbnN0cnVjdG9yKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHlwZSA9PSBvdGhlci50eXBlICYmCiAgICAgICAgc3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb24gPT0gb3RoZXIuc3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb24gJiYKICAgICAgICBtYXBFcXVhbHMoZGVmYXVsdFZhbHVlcywgb3RoZXIuZGVmYXVsdFZhbHVlcykgJiYKICAgICAgICBtYXBFcXVhbHMoZmllbGRNYXAsIG90aGVyLmZpZWxkTWFwKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCJ7J3R5cGUnOiAkdHlwZSIpOwogICAgZGVmYXVsdFZhbHVlcy5mb3JFYWNoKChrZXksIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICAgIHNiLndyaXRlKCIsXG4gJ2RlZmF1bHQ6JHtrZXl9JzogJHtleHByZXNzaW9uLnRvRGFydFRleHQoKX0iKTsKICAgIH0pOwogICAgZmllbGRNYXAuZm9yRWFjaCgoRmllbGRFbnRpdHkgZmllbGQsIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uKSB7CiAgICAgIHNiLndyaXRlKCIsXG4gJ2ZpZWxkOiR7ZmllbGR9JzogJHtleHByZXNzaW9uLnRvRGFydFRleHQoKX0iKTsKICAgIH0pOwogICAgaWYgKHN1cGVyQ29uc3RydWN0b3JJbnZvY2F0aW9uICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoIixcbiAnY29uc3RydWN0b3I6ICR7c3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb24udG9EYXJ0VGV4dCgpfSIpOwogICAgfQogICAgc2Iud3JpdGUoIn0iKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgc3RhdGljIGJvb2wgbWFwRXF1YWxzKE1hcCBtYXAxLCBNYXAgbWFwMikgewogICAgaWYgKG1hcDEubGVuZ3RoICE9IG1hcDEubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKHZhciBrZXkgaW4gbWFwMS5rZXlzKSB7CiAgICAgIGlmIChtYXAxW2tleV0gIT0gbWFwMltrZXldKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vLyBDcmVhdGVzIHRoZSBmaWVsZC10by1jb25zdGFudCBtYXAgZnJvbSBhcHBseWluZyBbYXJnc10gdG8KICAvLy8gW2NvbnN0cnVjdG9ySW52b2NhdGlvbl0uIElmIFtjb25zdHJ1Y3Rvckludm9jYXRpb25dIGlzIGBudWxsYCwgYW4gZW1wdHkKICAvLy8gbWFwIGlzIGNyZWF0ZWQuIFJldHVybnMgYG51bGxgIGlmIGFuIGVycm9uZW91cyBjb25zdGFudCBjb25zdHJ1Y3RvciB3YXMKICAvLy8gZW5jb3VudGVyZWQgaW4gdGhlIHN1cGVyLWNoYWluLgogIHN0YXRpYyBJbnN0YW5jZURhdGEgYXBwbHlJbnN0YW5jZURhdGEoCiAgICAgIEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCwKICAgICAgTm9ybWFsaXplZEFyZ3VtZW50cyBhcmdzLAogICAgICBDb25zdHJ1Y3RlZENvbnN0YW50RXhwcmVzc2lvbiBjb25zdHJ1Y3Rvckludm9jYXRpb24pIHsKICAgIE1hcDxGaWVsZEVudGl0eSwgQ29uc3RhbnRFeHByZXNzaW9uPiBhcHBsaWVkRmllbGRNYXAgPQogICAgICAgIDxGaWVsZEVudGl0eSwgQ29uc3RhbnRFeHByZXNzaW9uPnt9OwogICAgTGlzdDxBc3NlcnRDb25zdGFudEV4cHJlc3Npb24+IGFwcGxpZWRBc3NlcnRpb25zID0KICAgICAgICA8QXNzZXJ0Q29uc3RhbnRFeHByZXNzaW9uPltdOwogICAgaWYgKGNvbnN0cnVjdG9ySW52b2NhdGlvbiAhPSBudWxsKSB7CiAgICAgIEluc3RhbmNlRGF0YSBpbnN0YW5jZURhdGEgPQogICAgICAgICAgY29uc3RydWN0b3JJbnZvY2F0aW9uLmNvbXB1dGVJbnN0YW5jZURhdGEoZW52aXJvbm1lbnQpOwogICAgICBpZiAoaW5zdGFuY2VEYXRhID09IG51bGwpIHsKICAgICAgICAvLyBBbiBlcnJvbmVvdXMgY29uc3RhbnQgY29uc3RydWN0b3Igd2FzIGVuY291bnRlcmVkIGluIHRoZSBzdXBlci1jaGFpbi4KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBpbnN0YW5jZURhdGEuZmllbGRNYXAKICAgICAgICAgIC5mb3JFYWNoKChGaWVsZEVudGl0eSBmaWVsZCwgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50KSB7CiAgICAgICAgYXBwbGllZEZpZWxkTWFwW2ZpZWxkXSA9IGNvbnN0YW50LmFwcGx5KGFyZ3MpOwogICAgICB9KTsKICAgICAgZm9yIChBc3NlcnRDb25zdGFudEV4cHJlc3Npb24gYXNzZXJ0aW9uIGluIGluc3RhbmNlRGF0YS5hc3NlcnRpb25zKSB7CiAgICAgICAgYXBwbGllZEFzc2VydGlvbnMuYWRkKGFzc2VydGlvbi5hcHBseShhcmdzKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgSW5zdGFuY2VEYXRhKGFwcGxpZWRGaWVsZE1hcCwgYXBwbGllZEFzc2VydGlvbnMpOwogIH0KfQoKLy8vIEEgcmVkaXJlY3RpbmcgZ2VuZXJhdGl2ZSBjb25zdGFudCBjb25zdHJ1Y3Rvci4KY2xhc3MgUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RhbnRDb25zdHJ1Y3RvciBpbXBsZW1lbnRzIENvbnN0YW50Q29uc3RydWN0b3IgewogIGZpbmFsIE1hcDxkeW5hbWljIC8qaW50fFN0cmluZyovLCBDb25zdGFudEV4cHJlc3Npb24+IGRlZmF1bHRWYWx1ZXM7CiAgZmluYWwgQ29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb24gdGhpc0NvbnN0cnVjdG9ySW52b2NhdGlvbjsKCiAgUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RhbnRDb25zdHJ1Y3RvcigKICAgICAgdGhpcy5kZWZhdWx0VmFsdWVzLCB0aGlzLnRoaXNDb25zdHJ1Y3Rvckludm9jYXRpb24pOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudENvbnN0cnVjdG9yS2luZCBnZXQga2luZCB7CiAgICByZXR1cm4gQ29uc3RhbnRDb25zdHJ1Y3RvcktpbmQuUkVESVJFQ1RJTkdfR0VORVJBVElWRTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgY29tcHV0ZUluc3RhbmNlVHlwZSgKICAgICAgRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50LCBJbnRlcmZhY2VUeXBlIG5ld1R5cGUpIHsKICAgIHJldHVybiBlbnZpcm9ubWVudC5zdWJzdEJ5Q29udGV4dCgKICAgICAgICB0aGlzQ29uc3RydWN0b3JJbnZvY2F0aW9uLmNvbXB1dGVJbnN0YW5jZVR5cGUoZW52aXJvbm1lbnQpLCBuZXdUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIEluc3RhbmNlRGF0YSBjb21wdXRlSW5zdGFuY2VEYXRhKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCwKICAgICAgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IGFyZ3VtZW50cywgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICBOb3JtYWxpemVkQXJndW1lbnRzIGFyZ3MgPQogICAgICAgIG5ldyBOb3JtYWxpemVkQXJndW1lbnRzKGRlZmF1bHRWYWx1ZXMsIGNhbGxTdHJ1Y3R1cmUsIGFyZ3VtZW50cyk7CiAgICBJbnN0YW5jZURhdGEgYXBwbGllZEluc3RhbmNlRGF0YSA9CiAgICAgICAgR2VuZXJhdGl2ZUNvbnN0YW50Q29uc3RydWN0b3IuYXBwbHlJbnN0YW5jZURhdGEoCiAgICAgICAgICAgIGVudmlyb25tZW50LCBhcmdzLCB0aGlzQ29uc3RydWN0b3JJbnZvY2F0aW9uKTsKICAgIHJldHVybiBhcHBsaWVkSW5zdGFuY2VEYXRhOwogIH0KCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50Q29uc3RydWN0b3JWaXNpdG9yIHZpc2l0b3IsIGFyZykgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRSZWRpcmVjdGluZ0dlbmVyYXRpdmUodGhpcywgYXJnKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgewogICAgaW50IGhhc2ggPSBIYXNoaW5nLm9iamVjdEhhc2godGhpc0NvbnN0cnVjdG9ySW52b2NhdGlvbik7CiAgICByZXR1cm4gSGFzaGluZy5tYXBIYXNoKGRlZmF1bHRWYWx1ZXMsIGhhc2gpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBSZWRpcmVjdGluZ0dlbmVyYXRpdmVDb25zdGFudENvbnN0cnVjdG9yKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdGhpc0NvbnN0cnVjdG9ySW52b2NhdGlvbiA9PSBvdGhlci50aGlzQ29uc3RydWN0b3JJbnZvY2F0aW9uICYmCiAgICAgICAgR2VuZXJhdGl2ZUNvbnN0YW50Q29uc3RydWN0b3IubWFwRXF1YWxzKAogICAgICAgICAgICBkZWZhdWx0VmFsdWVzLCBvdGhlci5kZWZhdWx0VmFsdWVzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCJ7J3R5cGUnOiAke3RoaXNDb25zdHJ1Y3Rvckludm9jYXRpb24udHlwZX0iKTsKICAgIGRlZmF1bHRWYWx1ZXMuZm9yRWFjaCgoa2V5LCBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbikgewogICAgICBzYi53cml0ZSgiLFxuICdkZWZhdWx0OiR7a2V5fSc6ICR7ZXhwcmVzc2lvbi50b0RhcnRUZXh0KCl9Iik7CiAgICB9KTsKICAgIHNiLndyaXRlKCIsXG4gJ2NvbnN0cnVjdG9yJzogJHt0aGlzQ29uc3RydWN0b3JJbnZvY2F0aW9uLnRvRGFydFRleHQoKX0iKTsKICAgIHNiLndyaXRlKCJ9Iik7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCi8vLyBBIHJlZGlyZWN0aW5nIGZhY3RvcnkgY29uc3RhbnQgY29uc3RydWN0b3IuCmNsYXNzIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0YW50Q29uc3RydWN0b3IgaW1wbGVtZW50cyBDb25zdGFudENvbnN0cnVjdG9yIHsKICBmaW5hbCBDb25zdHJ1Y3RlZENvbnN0YW50RXhwcmVzc2lvbiB0YXJnZXRDb25zdHJ1Y3Rvckludm9jYXRpb247CgogIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0YW50Q29uc3RydWN0b3IodGhpcy50YXJnZXRDb25zdHJ1Y3Rvckludm9jYXRpb24pOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudENvbnN0cnVjdG9yS2luZCBnZXQga2luZCB7CiAgICByZXR1cm4gQ29uc3RhbnRDb25zdHJ1Y3RvcktpbmQuUkVESVJFQ1RJTkdfRkFDVE9SWTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgY29tcHV0ZUluc3RhbmNlVHlwZSgKICAgICAgRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50LCBJbnRlcmZhY2VUeXBlIG5ld1R5cGUpIHsKICAgIHJldHVybiBlbnZpcm9ubWVudC5zdWJzdEJ5Q29udGV4dCgKICAgICAgICB0YXJnZXRDb25zdHJ1Y3Rvckludm9jYXRpb24uY29tcHV0ZUluc3RhbmNlVHlwZShlbnZpcm9ubWVudCksIG5ld1R5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5zdGFuY2VEYXRhIGNvbXB1dGVJbnN0YW5jZURhdGEoRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50LAogICAgICBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gYXJndW1lbnRzLCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpIHsKICAgIENvbnN0YW50Q29uc3RydWN0b3IgY29uc3RhbnRDb25zdHJ1Y3RvciA9CiAgICAgICAgZW52aXJvbm1lbnQuZ2V0Q29uc3RydWN0b3JDb25zdGFudCh0YXJnZXRDb25zdHJ1Y3Rvckludm9jYXRpb24udGFyZ2V0KTsKICAgIHJldHVybiBjb25zdGFudENvbnN0cnVjdG9yLmNvbXB1dGVJbnN0YW5jZURhdGEoCiAgICAgICAgZW52aXJvbm1lbnQsIGFyZ3VtZW50cywgY2FsbFN0cnVjdHVyZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBhY2NlcHQoQ29uc3RhbnRDb25zdHJ1Y3RvclZpc2l0b3IgdmlzaXRvciwgYXJnKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFJlZGlyZWN0aW5nRmFjdG9yeSh0aGlzLCBhcmcpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gSGFzaGluZy5vYmplY3RIYXNoKHRhcmdldENvbnN0cnVjdG9ySW52b2NhdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0YW50Q29uc3RydWN0b3IpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0YXJnZXRDb25zdHJ1Y3Rvckludm9jYXRpb24gPT0gb3RoZXIudGFyZ2V0Q29uc3RydWN0b3JJbnZvY2F0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoInsiKTsKICAgIHNiLndyaXRlKCInY29uc3RydWN0b3InOiAke3RhcmdldENvbnN0cnVjdG9ySW52b2NhdGlvbi50b0RhcnRUZXh0KCl9Iik7CiAgICBzYi53cml0ZSgifSIpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLy8gQSBjb25zdGFudCBjb25zdHJ1Y3RvciB3aXRoIGVycm9ycy4KY2xhc3MgRXJyb25lb3VzQ29uc3RhbnRDb25zdHJ1Y3RvciBpbXBsZW1lbnRzIENvbnN0YW50Q29uc3RydWN0b3IgewogIEBvdmVycmlkZQogIENvbnN0YW50Q29uc3RydWN0b3JLaW5kIGdldCBraW5kID0+IENvbnN0YW50Q29uc3RydWN0b3JLaW5kLkVSUk9ORU9VUzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KENvbnN0YW50Q29uc3RydWN0b3JWaXNpdG9yIHZpc2l0b3IsIGFyZykgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRFcnJvbmVvdXModGhpcywgYXJnKTsKICB9CgogIEBvdmVycmlkZQogIEluc3RhbmNlRGF0YSBjb21wdXRlSW5zdGFuY2VEYXRhKEV2YWx1YXRpb25FbnZpcm9ubWVudCBlbnZpcm9ubWVudCwKICAgICAgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IGFyZ3VtZW50cywgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgY29tcHV0ZUluc3RhbmNlVHlwZSgKICAgICAgRXZhbHVhdGlvbkVudmlyb25tZW50IGVudmlyb25tZW50LCBJbnRlcmZhY2VUeXBlIG5ld1R5cGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICdFcnJvbmVvdXNDb25zdGFudENvbnN0cnVjdG9yLmNvbXB1dGVJbnN0YW5jZVR5cGUnKTsKICB9Cn0KgUUATk48ASgBNSE9HBobAR8OGhcNAgEVNzMBMAIBKiUkAUcmJUEBUUUTRkgBMwIBMiYBC1A2BAEVTSBGGB1DGBRMAgEnRRxHNzNCAU45AQxKAQwlQjYEAQxGSR9KJ0pIQgg9QQYgBAEMNC8EAQwVKTEsQQQBDBwtPyFKOS0EAQwWKiBBRAhKRAguUAYTGgQBLjIhJBYIBhEEAUBOTiYpKSA9Oy03JikiQiJRFQgcRjcKTDYIBkEEAgEzUEdBASw7AQwlOwQBDCVCJ04EAQxGSR9KJzk7IAQBDDQ6BAEMFT4xBAEMHC1KSzExBAEMFio8QUQIThMaBAIBME1DAUsBDCU4BAEMJUInUAQBDEZJLlA0MAQBDDQ3BAEMFTwEAQwcLUdNBAEMFioTTBMaBAIBKEQMSQEMNC4EAQxGSREEAQwlQiA9BAIBMHBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbnN0YW50cy9jb25zdHJ1Y3RvcnMuZGFydDdzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb25zdGFudHMvZXZhbHVhdGlvbi5kYXJ0pMUvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmNvbnN0YW50cy5ldmFsdWF0aW9uOwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcgc2hvdyBMaW5rOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgQ29tbW9uRWxlbWVudHM7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCcgc2hvdyBDYWxsU3RydWN0dXJlOwppbXBvcnQgJ2NvbnN0cnVjdG9ycy5kYXJ0JzsKaW1wb3J0ICdleHByZXNzaW9ucy5kYXJ0JzsKaW1wb3J0ICd2YWx1ZXMuZGFydCc7CgovLy8gRW52aXJvbm1lbnQgdXNlZCBmb3IgZXZhbHVhdGluZyBjb25zdGFudCBleHByZXNzaW9ucy4KYWJzdHJhY3QgY2xhc3MgRXZhbHVhdGlvbkVudmlyb25tZW50IHsKICBDb21tb25FbGVtZW50cyBnZXQgY29tbW9uRWxlbWVudHM7CgogIERhcnRUeXBlcyBnZXQgdHlwZXM7CgogIC8vLyBUeXBlIGluIHRoZSBlbmNsb3NpbmcgY29uc3RydWN0ZWQKICBJbnRlcmZhY2VUeXBlIGdldCBlbmNsb3NpbmdDb25zdHJ1Y3RlZFR5cGU7CgogIC8vLyBSZWFkIGVudmlyb25tZW50cyBzdHJpbmcgcGFzc2VkIGluIHVzaW5nIHRoZSAnLURuYW1lPXZhbHVlJyBvcHRpb24uCiAgU3RyaW5nIHJlYWRGcm9tRW52aXJvbm1lbnQoU3RyaW5nIG5hbWUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NvbnN0YW50RXhwcmVzc2lvbl0gZm9yIHRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnQgW2xvY2FsXS4KICBDb25zdGFudEV4cHJlc3Npb24gZ2V0TG9jYWxDb25zdGFudChjb3ZhcmlhbnQgTG9jYWwgbG9jYWwpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NvbnN0YW50RXhwcmVzc2lvbl0gZm9yIHRoZSB2YWx1ZSBvZiB0aGUgY29uc3RhbnQgW2ZpZWxkXS4KICBDb25zdGFudEV4cHJlc3Npb24gZ2V0RmllbGRDb25zdGFudChjb3ZhcmlhbnQgRmllbGRFbnRpdHkgZmllbGQpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NvbnN0YW50Q29uc3RydWN0b3JdIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvbnN0YW50CiAgLy8vIFtjb25zdHJ1Y3Rvcl0uCiAgQ29uc3RhbnRDb25zdHJ1Y3RvciBnZXRDb25zdHJ1Y3RvckNvbnN0YW50KAogICAgICBjb3ZhcmlhbnQgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpOwoKICAvLy8gUGVyZm9ybXMgdGhlIHN1YnN0aXR1dGlvbiBvZiB0aGUgdHlwZSBhcmd1bWVudHMgb2YgW3RhcmdldF0gZm9yIHRoZWlyCiAgLy8vIGNvcnJlc3BvbmRpbmcgdHlwZSB2YXJpYWJsZXMgaW4gW3R5cGVdLgogIERhcnRUeXBlIHN1YnN0QnlDb250ZXh0KAogICAgICBjb3ZhcmlhbnQgRGFydFR5cGUgYmFzZSwgY292YXJpYW50IEludGVyZmFjZVR5cGUgdGFyZ2V0KTsKCiAgLy8vIFJldHVybnMgW3R5cGVdIGluIHRoZSBjb250ZXh0IG9mIHRoZSBbZW5jbG9zaW5nQ29uc3RydWN0ZWRUeXBlXS4KICBEYXJ0VHlwZSBnZXRUeXBlSW5Db250ZXh0KERhcnRUeXBlIHR5cGUpOwoKICB2b2lkIHJlcG9ydFdhcm5pbmcoCiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uLCBNZXNzYWdlS2luZCBraW5kLCBNYXAgYXJndW1lbnRzKTsKCiAgdm9pZCByZXBvcnRFcnJvcigKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb24sIE1lc3NhZ2VLaW5kIGtpbmQsIE1hcCBhcmd1bWVudHMpOwoKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlQ29uc3RydWN0b3IoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IsCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZSgpKTsKCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZU1hcEJvZHkoQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZSgpKTsKCiAgQ29uc3RhbnRWYWx1ZSBldmFsdWF0ZUZpZWxkKEZpZWxkRW50aXR5IGZpZWxkLCBDb25zdGFudFZhbHVlIGV2YWx1YXRlKCkpOwoKICAvLy8gYHRydWVgIGlmIGFzc2VydGlvbnMgYXJlIGVuYWJsZWQuCiAgYm9vbCBnZXQgZW5hYmxlQXNzZXJ0aW9uczsKCiAgLy8vIElmIGB0cnVlYCwgaW1wbGljaXQgY2FzdHMgc2hvdWxkIGJlIGNoZWNrZWQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdXNlZCB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYmV0d2VlbiBqcy1pbnRlcm9wIGNsYXNzZXMKICAvLy8gYW5kIHRoZWlyIG1ldGFkYXRhLiBGb3Igbm9uLW1ldGFkYXRhIGNvbnN0YW50cyB3ZSBhbHdheXMgY2hlY2sgdGhlIGNhc3RzLgogIGJvb2wgZ2V0IGNoZWNrQ2FzdHM7Cn0KCmFic3RyYWN0IGNsYXNzIEV2YWx1YXRpb25FbnZpcm9ubWVudEJhc2UgaW1wbGVtZW50cyBFdmFsdWF0aW9uRW52aXJvbm1lbnQgewogIExpbms8U3Bhbm5hYmxlPiBfc3Bhbm5hYmxlU3RhY2sgPSBjb25zdCBMaW5rPFNwYW5uYWJsZT4oKTsKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGVuY2xvc2luZ0NvbnN0cnVjdGVkVHlwZTsKICBmaW5hbCBTZXQ8RmllbGRFbnRpdHk+IF9jdXJyZW50bHlFdmFsdWF0ZWRGaWVsZHMgPSBuZXcgU2V0PEZpZWxkRW50aXR5PigpOwogIGZpbmFsIGJvb2wgY29uc3RhbnRSZXF1aXJlZDsKCiAgRXZhbHVhdGlvbkVudmlyb25tZW50QmFzZShTcGFubmFibGUgc3Bhbm5hYmxlLCB7dGhpcy5jb25zdGFudFJlcXVpcmVkfSkgewogICAgX3NwYW5uYWJsZVN0YWNrID0gX3NwYW5uYWJsZVN0YWNrLnByZXBlbmQoc3Bhbm5hYmxlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGNoZWNrQ2FzdHMgPT4gdHJ1ZTsKCiAgRGlhZ25vc3RpY1JlcG9ydGVyIGdldCByZXBvcnRlcjsKCiAgLy8vIFJldHVybnMgdGhlIFtTcGFubmFibGVdIHVzZWQgZm9yIHJlcG9ydGluZyBlcnJvcnMgYW5kIHdhcm5pbmdzLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSBzZWNvbmQtdG8tbGFzdCBpbiB0aGUgc3Bhbm5hYmxlIHN0YWNrLCBpZiBhdmFpbGFibGUsIHRvIHBvaW50CiAgLy8vIHRvIHRoZSB1c2UsIHJhdGhlciB0aGFuIHRoZSBkZWNsYXJhdGlvbiwgb2YgYSBjb25zdHJ1Y3RvciBvciBmaWVsZC4KICAvLy8KICAvLy8gRm9yIGluc3RhbmNlCiAgLy8vCiAgLy8vICAgIGNvbnN0IGZvbyA9IGNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCJmb28iLCBkZWZhdWx0OiAwKTsKICAvLy8KICAvLy8gd2lsbCBwb2ludCB0byBgZm9vYCBpbnN0ZWFkIG9mIHRoZSBkZWNsYXJhdGlvbiBvZiBgYm9vbC5mcm9tRW52aXJvbm1lbnRgLgogIFNwYW5uYWJsZSBnZXQgX3NwYW5uYWJsZSA9PiBfc3Bhbm5hYmxlU3RhY2sudGFpbC5pc0VtcHR5CiAgICAgID8gX3NwYW5uYWJsZVN0YWNrLmhlYWQKICAgICAgOiBfc3Bhbm5hYmxlU3RhY2sudGFpbC5oZWFkOwoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlRmllbGQoRmllbGRFbnRpdHkgZmllbGQsIENvbnN0YW50VmFsdWUgZXZhbHVhdGUoKSkgewogICAgaWYgKF9jdXJyZW50bHlFdmFsdWF0ZWRGaWVsZHMuYWRkKGZpZWxkKSkgewogICAgICBfc3Bhbm5hYmxlU3RhY2sgPSBfc3Bhbm5hYmxlU3RhY2sucHJlcGVuZChmaWVsZCk7CiAgICAgIENvbnN0YW50VmFsdWUgcmVzdWx0ID0gZXZhbHVhdGUoKTsKICAgICAgX2N1cnJlbnRseUV2YWx1YXRlZEZpZWxkcy5yZW1vdmUoZmllbGQpOwogICAgICBfc3Bhbm5hYmxlU3RhY2sgPSBfc3Bhbm5hYmxlU3RhY2sudGFpbDsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGlmIChjb25zdGFudFJlcXVpcmVkKSB7CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZSgKICAgICAgICAgIGZpZWxkLCBNZXNzYWdlS2luZC5DWUNMSUNfQ09NUElMRV9USU1FX0NPTlNUQU5UUyk7CiAgICB9CiAgICByZXR1cm4gbmV3IE5vbkNvbnN0YW50VmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZXZhbHVhdGVDb25zdHJ1Y3RvcihDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciwKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLCBDb25zdGFudFZhbHVlIGV2YWx1YXRlKCkpIHsKICAgIF9zcGFubmFibGVTdGFjayA9IF9zcGFubmFibGVTdGFjay5wcmVwZW5kKGNvbnN0cnVjdG9yKTsKICAgIHZhciBvbGQgPSBlbmNsb3NpbmdDb25zdHJ1Y3RlZFR5cGU7CiAgICBlbmNsb3NpbmdDb25zdHJ1Y3RlZFR5cGUgPSB0eXBlOwogICAgQ29uc3RhbnRWYWx1ZSByZXN1bHQgPSBldmFsdWF0ZSgpOwogICAgLy8gQWxsIGNvbnN0IHNldCBsaXRlcmFscyBoYXZlIGFzIGFuIGltbWVkaWF0ZSBjaGlsZCBhIGNvbnN0IG1hcC4gVGhlIG1hcAogICAgLy8gZXZhbHVhdGUgbWV0aG9kIGNhbGxzIGV2YWx1YXRlTWFwQm9keSBhbmQgcmVzZXQgdGhpcyBmbGFnIGltbWVkaWF0ZWx5LgogICAgLy8gQmVjYXVzZSB0aGVyZSBhcmUgbm8gb3RoZXIgY2hpbGRyZW4sIHRoZSBmbGFnIGlzIGtlcHQgZmFsc2UuCiAgICBlbmNsb3NpbmdDb25zdHJ1Y3RlZFR5cGUgPSBvbGQ7CiAgICBfc3Bhbm5hYmxlU3RhY2sgPSBfc3Bhbm5hYmxlU3RhY2sudGFpbDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIGV2YWx1YXRlTWFwQm9keShDb25zdGFudFZhbHVlIGV2YWx1YXRlKCkpIHsKICAgIHJldHVybiBldmFsdWF0ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnRFcnJvcigKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb24sIE1lc3NhZ2VLaW5kIGtpbmQsIE1hcCBhcmd1bWVudHMpIHsKICAgIGlmIChjb25zdGFudFJlcXVpcmVkKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFNob3VsZCBbQ29uc3RhbnRFeHByZXNzaW9uXSBoYXZlIGEgbG9jYXRpb24/CiAgICAgIHJlcG9ydGVyLnJlcG9ydEVycm9yTWVzc2FnZShfc3Bhbm5hYmxlLCBraW5kLCBhcmd1bWVudHMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnRXYXJuaW5nKAogICAgICBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbiwgTWVzc2FnZUtpbmQga2luZCwgTWFwIGFyZ3VtZW50cykgewogICAgaWYgKGNvbnN0YW50UmVxdWlyZWQpIHsKICAgICAgcmVwb3J0ZXIucmVwb3J0V2FybmluZ01lc3NhZ2UoX3NwYW5uYWJsZSwga2luZCwgYXJndW1lbnRzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIGdldFR5cGVJbkNvbnRleHQoRGFydFR5cGUgdHlwZSkgewogICAgLy8gUnVubmluZyBleGFtcGxlIGZvciBjb21tZW50czoKICAgIC8vCiAgICAvLyAgICAgY2xhc3MgQTxUPiB7CiAgICAvLyAgICAgICBmaW5hbCBUIHQ7CiAgICAvLyAgICAgICBjb25zdCBBKGR5bmFtaWMgdCkgOiB0aGlzLnQgPSB0OyAvLyBpbXBsaWNpdGx5IGB0IGFzIEEuVGAKICAgIC8vICAgICB9CiAgICAvLyAgICAgY2xhc3MgQjxTPiBleHRlbmRzIEE8Uz4gewogICAgLy8gICAgICAgY29uc3QgQihkeW5hbWljIHMpIDogc3VwZXIocyk7CiAgICAvLyAgICAgfQogICAgLy8gICAgIG1haW4oKSA9PiBjb25zdCBCPG51bT4oMCk7CiAgICAvLwogICAgLy8gV2UgdmlzaXQgYHQgYXMgQS5UYCB3aGlsZSBldmFsdWF0aW5nIGBjb25zdCBCPG51bT4oMClgLgoKICAgIC8vIFRoZSBgYXNgIHR5cGUgaXMgYEEuVGAuCiAgICBEYXJ0VHlwZSB0eXBlSW5Db250ZXh0ID0gdHlwZTsKCiAgICAvLyBUaGUgZW5jbG9zaW5nIHR5cGUgaXMgYEI8bnVtPmAuCiAgICBEYXJ0VHlwZSBlbmNsb3NpbmdUeXBlID0gZW5jbG9zaW5nQ29uc3RydWN0ZWRUeXBlOwogICAgaWYgKGVuY2xvc2luZ1R5cGUgIT0gbnVsbCkgewogICAgICBDbGFzc0VudGl0eSBjb250ZXh0Q2xhc3M7CiAgICAgIHR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZSgoVHlwZVZhcmlhYmxlVHlwZSB0eXBlKSB7CiAgICAgICAgaWYgKHR5cGUuZWxlbWVudC50eXBlRGVjbGFyYXRpb24gaXMgQ2xhc3NFbnRpdHkpIHsKICAgICAgICAgIC8vIFdlIGZpbmQgYEFgIGZyb20gYEEuVGAuIFNpbmNlIHdlIGRvbid0IGhhdmUgbmVzdGVkIGNsYXNzZXMsIGNsYXNzCiAgICAgICAgICAvLyBiYXNlZCB0eXBlIHZhcmlhYmxlcyBjYW4gb25seSBjb21lIGZyb20gdGhlIHNhbWUgY2xhc3MuCiAgICAgICAgICBjb250ZXh0Q2xhc3MgPSB0eXBlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmIChjb250ZXh0Q2xhc3MgIT0gbnVsbCkgewogICAgICAgIC8vIFRoZSBlbmNsb3NpbmcgdHlwZSBgQjxudW0+YCBhcyBhbiBpbnN0YW5jZSBvZiBgQWAgaXMgYEE8bnVtPmAuCiAgICAgICAgZW5jbG9zaW5nVHlwZSA9IHR5cGVzLmFzSW5zdGFuY2VPZihlbmNsb3NpbmdUeXBlLCBjb250ZXh0Q2xhc3MpOwogICAgICB9CiAgICAgIC8vIGBBLlRgIGluIHRoZSBjb250ZXh0IG9mIHRoZSBlbmNsb3NpbmcgdHlwZSBgQTxudW0+YCBpcyBgbnVtYC4KICAgICAgdHlwZUluQ29udGV4dCA9IGVuY2xvc2luZ1R5cGUgIT0gbnVsbAogICAgICAgICAgPyBzdWJzdEJ5Q29udGV4dCh0eXBlSW5Db250ZXh0LCBlbmNsb3NpbmdUeXBlKQogICAgICAgICAgOiB0eXBlSW5Db250ZXh0OwogICAgfQogICAgcmV0dXJuIHR5cGVJbkNvbnRleHQ7CiAgfQp9CgovLy8gVGhlIG5vcm1hbGl6ZWQgYXJndW1lbnRzIHBhc3NlZCB0byBhIGNvbnN0IGNvbnN0cnVjdG9yIGNvbXB1dGVkIGZyb20gdGhlCi8vLyBhY3R1YWwgW2FyZ3VtZW50c10gYW5kIHRoZSBbZGVmYXVsdFZhbHVlc10gb2YgdGhlIGNhbGxlZCBjb25zdHJ1cmN0b3IuCmNsYXNzIE5vcm1hbGl6ZWRBcmd1bWVudHMgewogIGZpbmFsIE1hcDxkeW5hbWljIC8qaW50fFN0cmluZyovLCBDb25zdGFudEV4cHJlc3Npb24+IGRlZmF1bHRWYWx1ZXM7CiAgZmluYWwgQ2FsbFN0cnVjdHVyZSBjYWxsU3RydWN0dXJlOwogIGZpbmFsIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBhcmd1bWVudHM7CgogIE5vcm1hbGl6ZWRBcmd1bWVudHModGhpcy5kZWZhdWx0VmFsdWVzLCB0aGlzLmNhbGxTdHJ1Y3R1cmUsIHRoaXMuYXJndW1lbnRzKTsKCiAgLy8vIFJldHVybnMgdGhlIG5vcm1hbGl6ZWQgbmFtZWQgYXJndW1lbnQgW25hbWVdLgogIENvbnN0YW50RXhwcmVzc2lvbiBnZXROYW1lZEFyZ3VtZW50KFN0cmluZyBuYW1lKSB7CiAgICBpbnQgaW5kZXggPSBjYWxsU3RydWN0dXJlLm5hbWVkQXJndW1lbnRzLmluZGV4T2YobmFtZSk7CiAgICBpZiAoaW5kZXggPT0gLTEpIHsKICAgICAgLy8gVGhlIG5hbWVkIGFyZ3VtZW50IGlzIG5vdCBwcm92aWRlZC4KICAgICAgYXNzZXJ0KAogICAgICAgICAgZGVmYXVsdFZhbHVlc1tuYW1lXSAhPSBudWxsLAogICAgICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgICAiTm8gZGVmYXVsdCB2YWx1ZSBmb3IgbmFtZWQgYXJndW1lbnQgJyRuYW1lJyBpbiAkdGhpcy4iKSk7CiAgICAgIHJldHVybiBkZWZhdWx0VmFsdWVzW25hbWVdOwogICAgfQogICAgQ29uc3RhbnRFeHByZXNzaW9uIHZhbHVlID0KICAgICAgICBhcmd1bWVudHNbaW5kZXggKyBjYWxsU3RydWN0dXJlLnBvc2l0aW9uYWxBcmd1bWVudENvdW50XTsKICAgIGFzc2VydCgKICAgICAgICB2YWx1ZSAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgICJObyB2YWx1ZSBmb3IgbmFtZWQgYXJndW1lbnQgJyRuYW1lJyBpbiAkdGhpcy4iKSk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbm9ybWFsaXplZCBbaW5kZXhddGggcG9zaXRpb25hbCBhcmd1bWVudC4KICBDb25zdGFudEV4cHJlc3Npb24gZ2V0UG9zaXRpb25hbEFyZ3VtZW50KGludCBpbmRleCkgewogICAgaWYgKGluZGV4ID49IGNhbGxTdHJ1Y3R1cmUucG9zaXRpb25hbEFyZ3VtZW50Q291bnQpIHsKICAgICAgLy8gVGhlIHBvc2l0aW9uYWwgYXJndW1lbnQgaXMgbm90IHByb3ZpZGVkLgogICAgICBhc3NlcnQoCiAgICAgICAgICBkZWZhdWx0VmFsdWVzW2luZGV4XSAhPSBudWxsLAogICAgICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgICAiTm8gZGVmYXVsdCB2YWx1ZSBmb3IgcG9zaXRpb25hbCBhcmd1bWVudCAkaW5kZXggaW4gJHRoaXMuIikpOwogICAgICByZXR1cm4gZGVmYXVsdFZhbHVlc1tpbmRleF07CiAgICB9CiAgICBDb25zdGFudEV4cHJlc3Npb24gdmFsdWUgPSBhcmd1bWVudHNbaW5kZXhdOwogICAgYXNzZXJ0KAogICAgICAgIHZhbHVlICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAgICAgIk5vIHZhbHVlIGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50ICRpbmRleCBpbiAkdGhpcy4iKSk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnTm9ybWFsaXplZEFyZ3VtZW50c1snKTsKICAgIHNiLndyaXRlKCdkZWZhdWx0VmFsdWVzPXsnKTsKICAgIGJvb2wgbmVlZHNDb21tYSA9IGZhbHNlOwogICAgZGVmYXVsdFZhbHVlcy5mb3JFYWNoKCh2YXIga2V5LCBDb25zdGFudEV4cHJlc3Npb24gdmFsdWUpIHsKICAgICAgaWYgKG5lZWRzQ29tbWEpIHsKICAgICAgICBzYi53cml0ZSgnLCcpOwogICAgICB9CiAgICAgIGlmIChrZXkgaXMgU3RyaW5nKSB7CiAgICAgICAgc2Iud3JpdGUoJyInKTsKICAgICAgICBzYi53cml0ZShrZXkpOwogICAgICAgIHNiLndyaXRlKCciJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2Iud3JpdGUoa2V5KTsKICAgICAgfQogICAgICBzYi53cml0ZSgnOicpOwogICAgICBzYi53cml0ZSh2YWx1ZS50b1N0cnVjdHVyZWRUZXh0KCkpOwogICAgICBuZWVkc0NvbW1hID0gdHJ1ZTsKICAgIH0pOwogICAgc2Iud3JpdGUoJ30sY2FsbFN0cnVjdHVyZT0nKTsKICAgIHNiLndyaXRlKGNhbGxTdHJ1Y3R1cmUpOwogICAgc2Iud3JpdGUoJyxhcmd1bWVudHM9WycpOwogICAgYXJndW1lbnRzLmZvckVhY2goKENvbnN0YW50RXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICBpZiAobmVlZHNDb21tYSkgewogICAgICAgIHNiLndyaXRlKCcsJyk7CiAgICAgIH0KICAgICAgc2Iud3JpdGUodmFsdWUudG9TdHJ1Y3R1cmVkVGV4dCgpKTsKICAgICAgbmVlZHNDb21tYSA9IHRydWU7CiAgICB9KTsKICAgIHNiLndyaXRlKCddXScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CoEYAE5OPAEmAUQBGTYkIT0cGxYBOiclARcBKC4BSisBTj4BTkQBRhUuMAFMLhtAAUcsARZHARRHAUM1ATsBTAEoHQEzBk1QFwIBTD0MKk0fAUw6BAEMHwEjAUYGUEoGEwZEBlA7HSMBDE0wOCkvLhUGHCM9BiMEAQxDNjwoJSdOTkQkLBMEAQw8FwQBDBRIHEtABgQBDBZIHEIGBAEMLSUHGBhHDSUsDSYHPwEfIwEnNyEgOTtPRTcKCiJKSQhHLDkbBhoEAgFNSxxHJSwBTwE0NTwXLQ4nLkkiBh9CDBcsPxIEATw4OjIOKC5NIwYxDBcsQxIEAQwWKiYhHUAYFwgbFxcXDxcIFSoZCCIdHjMYFwgqGQgUGgQCAS5wYWNrYWdlOmNvbXBpbGVyL3NyYy9jb25zdGFudHMvZXZhbHVhdGlvbi5kYXJ0QHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvZm9yd2FyZGluZ19ub2RlLmRhcnS//i8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgInBhY2thZ2U6a2VybmVsL2FzdC5kYXJ0IgogICAgc2hvdwogICAgICAgIEFyZ3VtZW50cywKICAgICAgICBDbGFzcywKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBFeHByZXNzaW9uLAogICAgICAgIEZpZWxkLAogICAgICAgIEZ1bmN0aW9uTm9kZSwKICAgICAgICBNZW1iZXIsCiAgICAgICAgTmFtZSwKICAgICAgICBOYW1lZEV4cHJlc3Npb24sCiAgICAgICAgUHJvY2VkdXJlLAogICAgICAgIFByb2NlZHVyZUtpbmQsCiAgICAgICAgUmV0dXJuU3RhdGVtZW50LAogICAgICAgIFN1cGVyTWV0aG9kSW52b2NhdGlvbiwKICAgICAgICBTdXBlclByb3BlcnR5R2V0LAogICAgICAgIFN1cGVyUHJvcGVydHlTZXQsCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBWYXJpYWJsZURlY2xhcmF0aW9uLAogICAgICAgIFZhcmlhYmxlR2V0LAogICAgICAgIFZvaWRUeXBlOwoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90cmFuc2Zvcm1hdGlvbnMvZmxhZ3MuZGFydCcgc2hvdyBUcmFuc2Zvcm1lckZsYWc7CgppbXBvcnQgInBhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0IiBzaG93IFN1YnN0aXR1dGlvbjsKCmltcG9ydCAiLi4vcHJvYmxlbXMuZGFydCIgc2hvdyB1bmhhbmRsZWQ7CgppbXBvcnQgIi4uL3R5cGVfaW5mZXJlbmNlL3R5cGVfaW5mZXJlbmNlX2VuZ2luZS5kYXJ0IgogICAgc2hvdyBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHksIFZhcmlhbmNlOwoKaW1wb3J0ICIuLi90eXBlX2luZmVyZW5jZS90eXBlX2luZmVycmVyLmRhcnQiIHNob3cgZ2V0TmFtZWRGb3JtYWw7CgppbXBvcnQgImtlcm5lbF9idWlsZGVyLmRhcnQiCiAgICBzaG93IENsYXNzSGllcmFyY2h5QnVpbGRlciwgRGVjbGFyYXRpb24sIERlbGF5ZWRNZW1iZXIsIENsYXNzQnVpbGRlcjsKCmNsYXNzIEZvcndhcmRpbmdOb2RlIHsKICBmaW5hbCBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5OwoKICBmaW5hbCBDbGFzc0J1aWxkZXIgcGFyZW50OwoKICBmaW5hbCBEZWNsYXJhdGlvbiBjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdDsKCiAgZmluYWwgUHJvY2VkdXJlS2luZCBraW5kOwoKICAvLy8gQSBsaXN0IGNvbnRhaW5pbmcgdGhlIGRpcmVjdGx5IGltcGxlbWVudGVkIGFuZCBkaXJlY3RseSBpbmhlcml0ZWQKICAvLy8gcHJvY2VkdXJlcyBvZiB0aGUgY2xhc3MgaW4gcXVlc3Rpb24uCiAgZmluYWwgTGlzdDxEZWNsYXJhdGlvbj4gX2NhbmRpZGF0ZXM7CgogIEZvcndhcmRpbmdOb2RlKHRoaXMuaGllcmFyY2h5LCB0aGlzLnBhcmVudCwKICAgICAgdGhpcy5jb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdCwgdGhpcy5fY2FuZGlkYXRlcywgdGhpcy5raW5kKTsKCiAgTmFtZSBnZXQgbmFtZSA9PiBjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdC50YXJnZXQubmFtZTsKCiAgQ2xhc3MgZ2V0IGVuY2xvc2luZ0NsYXNzID0+IHBhcmVudC5jbHM7CgogIC8vLyBGaW5pc2hlcyBoYW5kbGluZyBvZiB0aGlzIG5vZGUgYnkgcHJvcGFnYXRpbmcgY292YXJpYW5jZSBhbmQgY3JlYXRpbmcKICAvLy8gZm9yd2FyZGluZyBzdHVicyBpZiBuZWNlc3NhcnkuCiAgTWVtYmVyIGZpbmFsaXplKCkgPT4gX2NvbXB1dGVDb3ZhcmlhbmNlRml4ZXMoKTsKCiAgLy8vIFRhZyB0aGUgcGFyYW1ldGVycyBvZiBbaW50ZXJmYWNlTWVtYmVyXSB0aGF0IG5lZWQgdHlwZSBjaGVja3MKICAvLy8KICAvLy8gUGFyYW1ldGVycyBjYW4gbmVlZCB0eXBlIGNoZWNrcyBmb3IgY2FsbHMgY29taW5nIGZyb20gc3RhdGljYWxseSB0eXBlZAogIC8vLyBjYWxsIHNpdGVzLCBkdWUgdG8gY292YXJpYW50IGdlbmVyaWNzIGFuZCBvdmVycmlkZXMgd2l0aCBleHBsaWNpdAogIC8vLyBgY292YXJpYW50YCBwYXJhbWV0ZXJzLgogIC8vLwogIC8vLyBUYWcgcGFyYW1ldGVycyBvZiBbaW50ZXJmYWNlTWVtYmVyXSB0aGF0IG5lZWQgc3VjaCBjaGVja3Mgd2hlbiB0aGUgbWVtYmVyCiAgLy8vIG9jY3VycyBpbiBbZW5jbG9zaW5nQ2xhc3NdJ3MgaW50ZXJmYWNlLiAgSWYgcGFyYW1ldGVycyBuZWVkIGNoZWNrcyBidXQKICAvLy8gdGhleSB3b3VsZCBub3QgYmUgY2hlY2tlZCBpbiBhbiBpbmhlcml0ZWQgaW1wbGVtZW50YXRpb24sIGEgZm9yd2FyZGluZwogIC8vLyBzdHViIGlzIGludHJvZHVjZWQgYXMgYSBwbGFjZSB0byBwdXQgdGhlIGNoZWNrcy4KICBNZW1iZXIgX2NvbXB1dGVDb3ZhcmlhbmNlRml4ZXMoKSB7CiAgICBNZW1iZXIgaW50ZXJmYWNlTWVtYmVyID0gY29tYmluZWRNZW1iZXJTaWduYXR1cmVSZXN1bHQudGFyZ2V0OwogICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9CiAgICAgICAgX3N1YnN0aXR1dGlvbkZvcihpbnRlcmZhY2VNZW1iZXIsIGVuY2xvc2luZ0NsYXNzKTsKICAgIC8vIFdlIGFsd2F5cyBjcmVhdGUgYSBmb3J3YXJkaW5nIHN0dWIgd2hlbiB3ZSd2ZSBpbmhlcml0ZWQgYSBtZW1iZXIgZnJvbSBhbgogICAgLy8gaW50ZXJmYWNlIG90aGVyIHRoYW4gdGhlIGZpcnN0IG92ZXJyaWRlIGNhbmRpZGF0ZS4gIFRoaXMgaXMgdG8gd29yawogICAgLy8gYXJvdW5kIGEgYnVnIGluIHRoZSBLZXJuZWwgdHlwZSBjaGVja2VyIHdoZXJlIGl0IGNob29zZXMgdGhlIGZpcnN0CiAgICAvLyBvdmVycmlkZSBjYW5kaWRhdGUuCiAgICAvLwogICAgLy8gVE9ETyhrbWlsbGlraW4pOiBGaXggdGhlIEtlcm5lbCB0eXBlIGNoZWNrZXIgYW5kIHN0b3AgY3JlYXRpbmcgdGhlc2UKICAgIC8vIGV4dHJhIHN0dWJzLgogICAgTWVtYmVyIHN0dWIgPSBpbnRlcmZhY2VNZW1iZXIuZW5jbG9zaW5nQ2xhc3MgPT0gZW5jbG9zaW5nQ2xhc3MgfHwKICAgICAgICAgICAgaW50ZXJmYWNlTWVtYmVyID09IGdldENhbmRpZGF0ZUF0KDApCiAgICAgICAgPyBpbnRlcmZhY2VNZW1iZXIKICAgICAgICA6IF9jcmVhdGVGb3J3YXJkaW5nU3R1YihzdWJzdGl0dXRpb24sIGludGVyZmFjZU1lbWJlcik7CgogICAgRnVuY3Rpb25Ob2RlIGludGVyZmFjZUZ1bmN0aW9uID0gaW50ZXJmYWNlTWVtYmVyLmZ1bmN0aW9uOwogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBpbnRlcmZhY2VQb3NpdGlvbmFsUGFyYW1ldGVycyA9CiAgICAgICAgZ2V0UG9zaXRpb25hbFBhcmFtZXRlcnMoaW50ZXJmYWNlTWVtYmVyKTsKICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gaW50ZXJmYWNlTmFtZWRQYXJhbWV0ZXJzID0KICAgICAgICBpbnRlcmZhY2VGdW5jdGlvbj8ubmFtZWRQYXJhbWV0ZXJzID8/IFtdOwogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBpbnRlcmZhY2VUeXBlUGFyYW1ldGVycyA9CiAgICAgICAgaW50ZXJmYWNlRnVuY3Rpb24/LnR5cGVQYXJhbWV0ZXJzID8/IFtdOwoKICAgIHZvaWQgY3JlYXRlU3R1YklmTmVlZGVkKCkgewogICAgICBpZiAoc3R1YiAhPSBpbnRlcmZhY2VNZW1iZXIpIHJldHVybjsKICAgICAgaWYgKGludGVyZmFjZU1lbWJlci5lbmNsb3NpbmdDbGFzcyA9PSBlbmNsb3NpbmdDbGFzcykgcmV0dXJuOwogICAgICBzdHViID0gX2NyZWF0ZUZvcndhcmRpbmdTdHViKHN1YnN0aXR1dGlvbiwgaW50ZXJmYWNlTWVtYmVyKTsKICAgIH0KCiAgICBib29sIGlzSW1wbENyZWF0ZWQgPSBmYWxzZTsKICAgIHZvaWQgY3JlYXRlSW1wbElmTmVlZGVkKCkgewogICAgICBpZiAoaXNJbXBsQ3JlYXRlZCkgcmV0dXJuOwogICAgICBjcmVhdGVTdHViSWZOZWVkZWQoKTsKICAgICAgX2NyZWF0ZUZvcndhcmRpbmdJbXBsSWZOZWVkZWQoc3R1Yi5mdW5jdGlvbik7CiAgICAgIGlzSW1wbENyZWF0ZWQgPSB0cnVlOwogICAgfQoKICAgIEluY2x1ZGVzVHlwZVBhcmFtZXRlcnNOb25Db3ZhcmlhbnRseSBuZWVkc0NoZWNrVmlzaXRvciA9CiAgICAgICAgZW5jbG9zaW5nQ2xhc3MudHlwZVBhcmFtZXRlcnMuaXNFbXB0eQogICAgICAgICAgICA/IG51bGwKICAgICAgICAgICAgLy8gVE9ETyhhaGUpOiBJdCBtYXkgYmUgbmVjZXNzYXJ5IHRvIGNhY2hlIHRoaXMgb2JqZWN0LgogICAgICAgICAgICA6IG5ldyBJbmNsdWRlc1R5cGVQYXJhbWV0ZXJzTm9uQ292YXJpYW50bHkoCiAgICAgICAgICAgICAgICBlbmNsb3NpbmdDbGFzcy50eXBlUGFyYW1ldGVycywKICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBjaGVja2luZyB0aGUgcGFyYW1ldGVyIHR5cGVzIGFuZCB0aGVzZSBhcmUgaW4gYQogICAgICAgICAgICAgICAgLy8gY29udHJhdmFyaWFudCBwb3NpdGlvbi4KICAgICAgICAgICAgICAgIGluaXRpYWxWYXJpYW5jZTogVmFyaWFuY2UuY29udHJhdmFyaWFudCk7CiAgICBib29sIG5lZWRzQ2hlY2soRGFydFR5cGUgdHlwZSkgPT4gbmVlZHNDaGVja1Zpc2l0b3IgPT0gbnVsbAogICAgICAgID8gZmFsc2UKICAgICAgICA6IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZSh0eXBlKS5hY2NlcHQobmVlZHNDaGVja1Zpc2l0b3IpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2VQb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICBWYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlciA9IGludGVyZmFjZVBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldOwogICAgICBib29sIGlzR2VuZXJpY0NvdmFyaWFudEltcGwgPQogICAgICAgICAgcGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgfHwgbmVlZHNDaGVjayhwYXJhbWV0ZXIudHlwZSk7CiAgICAgIGJvb2wgaXNDb3ZhcmlhbnQgPSBwYXJhbWV0ZXIuaXNDb3ZhcmlhbnQ7CiAgICAgIFZhcmlhYmxlRGVjbGFyYXRpb24gc3VwZXJQYXJhbWV0ZXIgPSBwYXJhbWV0ZXI7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgX2NhbmRpZGF0ZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBNZW1iZXIgb3RoZXJNZW1iZXIgPSBnZXRDYW5kaWRhdGVBdChqKTsKICAgICAgICBpZiAob3RoZXJNZW1iZXIgaXMgRm9yd2FyZGluZ05vZGUpIGNvbnRpbnVlOwogICAgICAgIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gb3RoZXJQb3NpdGlvbmFsUGFyYW1ldGVycyA9CiAgICAgICAgICAgIGdldFBvc2l0aW9uYWxQYXJhbWV0ZXJzKG90aGVyTWVtYmVyKTsKICAgICAgICBpZiAob3RoZXJQb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGggPD0gaSkgY29udGludWU7CiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBvdGhlclBhcmFtZXRlciA9IG90aGVyUG9zaXRpb25hbFBhcmFtZXRlcnNbaV07CiAgICAgICAgaWYgKGogPT0gMCkgc3VwZXJQYXJhbWV0ZXIgPSBvdGhlclBhcmFtZXRlcjsKICAgICAgICBpZiAoaWRlbnRpY2FsKG90aGVyTWVtYmVyLCBpbnRlcmZhY2VNZW1iZXIpKSBjb250aW51ZTsKICAgICAgICBpZiAob3RoZXJQYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgICAgaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChvdGhlclBhcmFtZXRlci5pc0NvdmFyaWFudCkgewogICAgICAgICAgaXNDb3ZhcmlhbnQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgIGlmICghc3VwZXJQYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgICAgY3JlYXRlSW1wbElmTmVlZGVkKCk7CiAgICAgICAgfQogICAgICAgIGlmICghcGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICAgIGNyZWF0ZVN0dWJJZk5lZWRlZCgpOwogICAgICAgICAgc3R1Yi5mdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVyc1tpXS5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGlzQ292YXJpYW50KSB7CiAgICAgICAgaWYgKCFzdXBlclBhcmFtZXRlci5pc0NvdmFyaWFudCkgewogICAgICAgICAgY3JlYXRlSW1wbElmTmVlZGVkKCk7CiAgICAgICAgfQogICAgICAgIGlmICghcGFyYW1ldGVyLmlzQ292YXJpYW50KSB7CiAgICAgICAgICBjcmVhdGVTdHViSWZOZWVkZWQoKTsKICAgICAgICAgIHN0dWIuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnNbaV0uaXNDb3ZhcmlhbnQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2VOYW1lZFBhcmFtZXRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgPSBpbnRlcmZhY2VOYW1lZFBhcmFtZXRlcnNbaV07CiAgICAgIGJvb2wgaXNHZW5lcmljQ292YXJpYW50SW1wbCA9CiAgICAgICAgICBwYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCB8fCBuZWVkc0NoZWNrKHBhcmFtZXRlci50eXBlKTsKICAgICAgYm9vbCBpc0NvdmFyaWFudCA9IHBhcmFtZXRlci5pc0NvdmFyaWFudDsKICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBzdXBlclBhcmFtZXRlciA9IHBhcmFtZXRlcjsKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBfY2FuZGlkYXRlcy5sZW5ndGg7IGorKykgewogICAgICAgIE1lbWJlciBvdGhlck1lbWJlciA9IGdldENhbmRpZGF0ZUF0KGopOwogICAgICAgIGlmIChvdGhlck1lbWJlciBpcyBGb3J3YXJkaW5nTm9kZSkgY29udGludWU7CiAgICAgICAgVmFyaWFibGVEZWNsYXJhdGlvbiBvdGhlclBhcmFtZXRlciA9CiAgICAgICAgICAgIGdldE5hbWVkRm9ybWFsKG90aGVyTWVtYmVyLmZ1bmN0aW9uLCBwYXJhbWV0ZXIubmFtZSk7CiAgICAgICAgaWYgKG90aGVyUGFyYW1ldGVyID09IG51bGwpIGNvbnRpbnVlOwogICAgICAgIGlmIChqID09IDApIHN1cGVyUGFyYW1ldGVyID0gb3RoZXJQYXJhbWV0ZXI7CiAgICAgICAgaWYgKGlkZW50aWNhbChvdGhlck1lbWJlciwgaW50ZXJmYWNlTWVtYmVyKSkgY29udGludWU7CiAgICAgICAgaWYgKG90aGVyUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICAgIGlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAob3RoZXJQYXJhbWV0ZXIuaXNDb3ZhcmlhbnQpIHsKICAgICAgICAgIGlzQ292YXJpYW50ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICBpZiAoIXN1cGVyUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGwpIHsKICAgICAgICAgIGNyZWF0ZUltcGxJZk5lZWRlZCgpOwogICAgICAgIH0KICAgICAgICBpZiAoIXBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKSB7CiAgICAgICAgICBjcmVhdGVTdHViSWZOZWVkZWQoKTsKICAgICAgICAgIHN0dWIuZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzW2ldLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaXNDb3ZhcmlhbnQpIHsKICAgICAgICBpZiAoIXN1cGVyUGFyYW1ldGVyLmlzQ292YXJpYW50KSB7CiAgICAgICAgICBjcmVhdGVJbXBsSWZOZWVkZWQoKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFwYXJhbWV0ZXIuaXNDb3ZhcmlhbnQpIHsKICAgICAgICAgIGNyZWF0ZVN0dWJJZk5lZWRlZCgpOwogICAgICAgICAgc3R1Yi5mdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnNbaV0uaXNDb3ZhcmlhbnQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2VUeXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICBUeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgPSBpbnRlcmZhY2VUeXBlUGFyYW1ldGVyc1tpXTsKICAgICAgYm9vbCBpc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gdHlwZVBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsIHx8CiAgICAgICAgICBuZWVkc0NoZWNrKHR5cGVQYXJhbWV0ZXIuYm91bmQpOwogICAgICBUeXBlUGFyYW1ldGVyIHN1cGVyVHlwZVBhcmFtZXRlciA9IHR5cGVQYXJhbWV0ZXI7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgX2NhbmRpZGF0ZXMubGVuZ3RoOyBqKyspIHsKICAgICAgICBNZW1iZXIgb3RoZXJNZW1iZXIgPSBnZXRDYW5kaWRhdGVBdChqKTsKICAgICAgICBpZiAob3RoZXJNZW1iZXIgaXMgRm9yd2FyZGluZ05vZGUpIGNvbnRpbnVlOwogICAgICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gb3RoZXJUeXBlUGFyYW1ldGVycyA9CiAgICAgICAgICAgIG90aGVyTWVtYmVyLmZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzOwogICAgICAgIGlmIChvdGhlclR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA8PSBpKSBjb250aW51ZTsKICAgICAgICBUeXBlUGFyYW1ldGVyIG90aGVyVHlwZVBhcmFtZXRlciA9IG90aGVyVHlwZVBhcmFtZXRlcnNbaV07CiAgICAgICAgaWYgKGogPT0gMCkgc3VwZXJUeXBlUGFyYW1ldGVyID0gb3RoZXJUeXBlUGFyYW1ldGVyOwogICAgICAgIGlmIChpZGVudGljYWwob3RoZXJNZW1iZXIsIGludGVyZmFjZU1lbWJlcikpIGNvbnRpbnVlOwogICAgICAgIGlmIChvdGhlclR5cGVQYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgICAgaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKSB7CiAgICAgICAgaWYgKCFzdXBlclR5cGVQYXJhbWV0ZXIuaXNHZW5lcmljQ292YXJpYW50SW1wbCkgewogICAgICAgICAgY3JlYXRlSW1wbElmTmVlZGVkKCk7CiAgICAgICAgfQogICAgICAgIGlmICghdHlwZVBhcmFtZXRlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsKSB7CiAgICAgICAgICBjcmVhdGVTdHViSWZOZWVkZWQoKTsKICAgICAgICAgIHN0dWIuZnVuY3Rpb24udHlwZVBhcmFtZXRlcnNbaV0uaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gc3R1YjsKICB9CgogIHZvaWQgX2NyZWF0ZUZvcndhcmRpbmdJbXBsSWZOZWVkZWQoRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uKSB7CiAgICBpZiAoZnVuY3Rpb24uYm9keSAhPSBudWxsKSB7CiAgICAgIC8vIFRoZXJlIGlzIGFscmVhZHkgYW4gaW1wbGVtZW50YXRpb247IG5vdGhpbmcgZnVydGhlciBuZWVkcyB0byBiZSBkb25lLgogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBGaW5kIHRoZSBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgc3VwZXJjbGFzczsgdGhpcyBpcyB3aGF0IHdlIG5lZWQKICAgIC8vIHRvIGZvcndhcmQgdG8uICBJZiB3ZSBjYW4ndCBmaW5kIG9uZSwgdGhlbiB0aGUgbWV0aG9kIGlzIGZ1bGx5IGFic3RyYWN0CiAgICAvLyBhbmQgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4KICAgIENsYXNzIHN1cGVyY2xhc3MgPSBlbmNsb3NpbmdDbGFzcy5zdXBlcmNsYXNzOwogICAgaWYgKHN1cGVyY2xhc3MgPT0gbnVsbCkgcmV0dXJuOwogICAgUHJvY2VkdXJlIHByb2NlZHVyZSA9IGZ1bmN0aW9uLnBhcmVudDsKICAgIE1lbWJlciBzdXBlclRhcmdldCA9IGhpZXJhcmNoeS5nZXREaXNwYXRjaFRhcmdldEtlcm5lbCgKICAgICAgICBzdXBlcmNsYXNzLCBwcm9jZWR1cmUubmFtZSwga2luZCA9PSBQcm9jZWR1cmVLaW5kLlNldHRlcik7CiAgICBpZiAoc3VwZXJUYXJnZXQgPT0gbnVsbCkgcmV0dXJuOwogICAgaWYgKHN1cGVyVGFyZ2V0IGlzIFByb2NlZHVyZSAmJiBzdXBlclRhcmdldC5pc0ZvcndhcmRpbmdTdHViKSB7CiAgICAgIHN1cGVyVGFyZ2V0ID0gX2dldEZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXQoc3VwZXJUYXJnZXQpOwogICAgfQogICAgcHJvY2VkdXJlLmlzQWJzdHJhY3QgPSBmYWxzZTsKICAgIGlmICghcHJvY2VkdXJlLmlzRm9yd2FyZGluZ1N0dWIpIHsKICAgICAgLy8gVGhpcyBwcm9jZWR1cmUgZXhpc3RzIGFic3RyYWN0bHkgaW4gdGhlIHNvdXJjZSBjb2RlOyB3ZSBuZWVkIHRvIG1ha2UgaXQKICAgICAgLy8gY29uY3JldGUgYW5kIGdpdmUgaXQgYSBib2R5IHRoYXQgaXMgYSBmb3J3YXJkaW5nIHN0dWIuICBUaGlzIHNpdHVhdGlvbgogICAgICAvLyBpcyBjYWxsZWQgYSAiZm9yd2FyZGluZyBzZW1pLXN0dWIiLgogICAgICBwcm9jZWR1cmUuaXNGb3J3YXJkaW5nU3R1YiA9IHRydWU7CiAgICAgIHByb2NlZHVyZS5pc0ZvcndhcmRpbmdTZW1pU3R1YiA9IHRydWU7CiAgICB9CiAgICBMaXN0PEV4cHJlc3Npb24+IHBvc2l0aW9uYWxBcmd1bWVudHMgPSBmdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycwogICAgICAgIC5tYXA8RXhwcmVzc2lvbj4oKHBhcmFtZXRlcikgPT4gbmV3IFZhcmlhYmxlR2V0KHBhcmFtZXRlcikpCiAgICAgICAgLnRvTGlzdCgpOwogICAgTGlzdDxOYW1lZEV4cHJlc3Npb24+IG5hbWVkQXJndW1lbnRzID0gZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzCiAgICAgICAgLm1hcCgocGFyYW1ldGVyKSA9PgogICAgICAgICAgICBuZXcgTmFtZWRFeHByZXNzaW9uKHBhcmFtZXRlci5uYW1lLCBuZXcgVmFyaWFibGVHZXQocGFyYW1ldGVyKSkpCiAgICAgICAgLnRvTGlzdCgpOwogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IGZ1bmN0aW9uLnR5cGVQYXJhbWV0ZXJzCiAgICAgICAgLm1hcDxEYXJ0VHlwZT4oKHR5cGVQYXJhbWV0ZXIpID0+IG5ldyBUeXBlUGFyYW1ldGVyVHlwZSh0eXBlUGFyYW1ldGVyKSkKICAgICAgICAudG9MaXN0KCk7CiAgICBBcmd1bWVudHMgYXJndW1lbnRzID0gbmV3IEFyZ3VtZW50cyhwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgIHR5cGVzOiB0eXBlQXJndW1lbnRzLCBuYW1lZDogbmFtZWRBcmd1bWVudHMpOwogICAgRXhwcmVzc2lvbiBzdXBlckNhbGw7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLk1ldGhvZDoKICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLk9wZXJhdG9yOgogICAgICAgIHN1cGVyQ2FsbCA9IG5ldyBTdXBlck1ldGhvZEludm9jYXRpb24obmFtZSwgYXJndW1lbnRzLCBzdXBlclRhcmdldCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgUHJvY2VkdXJlS2luZC5HZXR0ZXI6CiAgICAgICAgc3VwZXJDYWxsID0gbmV3IFN1cGVyUHJvcGVydHlHZXQobmFtZSwgc3VwZXJUYXJnZXQpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFByb2NlZHVyZUtpbmQuU2V0dGVyOgogICAgICAgIHN1cGVyQ2FsbCA9CiAgICAgICAgICAgIG5ldyBTdXBlclByb3BlcnR5U2V0KG5hbWUsIHBvc2l0aW9uYWxBcmd1bWVudHNbMF0sIHN1cGVyVGFyZ2V0KTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICB1bmhhbmRsZWQoJyRraW5kJywgJ19jcmVhdGVGb3J3YXJkaW5nSW1wbElmTmVlZGVkJywgLTEsIG51bGwpOwogICAgICAgIGJyZWFrOwogICAgfQogICAgZnVuY3Rpb24uYm9keSA9IG5ldyBSZXR1cm5TdGF0ZW1lbnQoc3VwZXJDYWxsKS4ucGFyZW50ID0gZnVuY3Rpb247CiAgICBwcm9jZWR1cmUudHJhbnNmb3JtZXJGbGFncyB8PSBUcmFuc2Zvcm1lckZsYWcuc3VwZXJDYWxsczsKICAgIHByb2NlZHVyZS5mb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0ID0gc3VwZXJUYXJnZXQ7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIGZvcndhcmRpbmcgc3R1YiBiYXNlZCBvbiB0aGUgZ2l2ZW4gW3RhcmdldF0uCiAgUHJvY2VkdXJlIF9jcmVhdGVGb3J3YXJkaW5nU3R1YihTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uLCBNZW1iZXIgdGFyZ2V0KSB7CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIGNvcHlQYXJhbWV0ZXIoVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIpIHsKICAgICAgcmV0dXJuIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKHBhcmFtZXRlci5uYW1lLAogICAgICAgICAgdHlwZTogc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHBhcmFtZXRlci50eXBlKSwKICAgICAgICAgIGlzQ292YXJpYW50OiBwYXJhbWV0ZXIuaXNDb3ZhcmlhbnQpCiAgICAgICAgLi5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsID0gcGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGw7CiAgICB9CgogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiB0YXJnZXRUeXBlUGFyYW1ldGVycyA9CiAgICAgICAgdGFyZ2V0LmZ1bmN0aW9uPy50eXBlUGFyYW1ldGVycyA/PyBbXTsKICAgIExpc3Q8VHlwZVBhcmFtZXRlcj4gdHlwZVBhcmFtZXRlcnM7CiAgICBpZiAodGFyZ2V0VHlwZVBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICB0eXBlUGFyYW1ldGVycyA9CiAgICAgICAgICBuZXcgTGlzdDxUeXBlUGFyYW1ldGVyPi5maWxsZWQodGFyZ2V0VHlwZVBhcmFtZXRlcnMubGVuZ3RoLCBudWxsKTsKICAgICAgTWFwPFR5cGVQYXJhbWV0ZXIsIERhcnRUeXBlPiBhZGRpdGlvbmFsU3Vic3RpdHV0aW9uID0KICAgICAgICAgIDxUeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT57fTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YXJnZXRUeXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgIFR5cGVQYXJhbWV0ZXIgdGFyZ2V0VHlwZVBhcmFtZXRlciA9IHRhcmdldFR5cGVQYXJhbWV0ZXJzW2ldOwogICAgICAgIFR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciA9IG5ldyBUeXBlUGFyYW1ldGVyKAogICAgICAgICAgICB0YXJnZXRUeXBlUGFyYW1ldGVyLm5hbWUsIG51bGwpCiAgICAgICAgICAuLmlzR2VuZXJpY0NvdmFyaWFudEltcGwgPSB0YXJnZXRUeXBlUGFyYW1ldGVyLmlzR2VuZXJpY0NvdmFyaWFudEltcGw7CiAgICAgICAgdHlwZVBhcmFtZXRlcnNbaV0gPSB0eXBlUGFyYW1ldGVyOwogICAgICAgIGFkZGl0aW9uYWxTdWJzdGl0dXRpb25bdGFyZ2V0VHlwZVBhcmFtZXRlcl0gPQogICAgICAgICAgICBuZXcgVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlcik7CiAgICAgIH0KICAgICAgc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmNvbWJpbmUoCiAgICAgICAgICBzdWJzdGl0dXRpb24sIFN1YnN0aXR1dGlvbi5mcm9tTWFwKGFkZGl0aW9uYWxTdWJzdGl0dXRpb24pKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICAgIHR5cGVQYXJhbWV0ZXJzW2ldLmJvdW5kID0KICAgICAgICAgICAgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHRhcmdldFR5cGVQYXJhbWV0ZXJzW2ldLmJvdW5kKTsKICAgICAgfQogICAgfQogICAgTGlzdDxWYXJpYWJsZURlY2xhcmF0aW9uPiBwb3NpdGlvbmFsUGFyYW1ldGVycyA9CiAgICAgICAgZ2V0UG9zaXRpb25hbFBhcmFtZXRlcnModGFyZ2V0KS5tYXAoY29weVBhcmFtZXRlcikudG9MaXN0KCk7CiAgICBMaXN0PFZhcmlhYmxlRGVjbGFyYXRpb24+IG5hbWVkUGFyYW1ldGVycyA9CiAgICAgICAgdGFyZ2V0LmZ1bmN0aW9uPy5uYW1lZFBhcmFtZXRlcnM/Lm1hcChjb3B5UGFyYW1ldGVyKT8udG9MaXN0KCkgPz8gW107CiAgICBGdW5jdGlvbk5vZGUgZnVuY3Rpb24gPSBuZXcgRnVuY3Rpb25Ob2RlKG51bGwsCiAgICAgICAgcG9zaXRpb25hbFBhcmFtZXRlcnM6IHBvc2l0aW9uYWxQYXJhbWV0ZXJzLAogICAgICAgIG5hbWVkUGFyYW1ldGVyczogbmFtZWRQYXJhbWV0ZXJzLAogICAgICAgIHR5cGVQYXJhbWV0ZXJzOiB0eXBlUGFyYW1ldGVycywKICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiBnZXRSZXF1aXJlZFBhcmFtZXRlckNvdW50KHRhcmdldCksCiAgICAgICAgcmV0dXJuVHlwZTogc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKGdldFJldHVyblR5cGUodGFyZ2V0KSkpOwogICAgTWVtYmVyIGZpbmFsVGFyZ2V0OwogICAgaWYgKHRhcmdldCBpcyBQcm9jZWR1cmUgJiYgdGFyZ2V0LmlzRm9yd2FyZGluZ1N0dWIpIHsKICAgICAgZmluYWxUYXJnZXQgPSB0YXJnZXQuZm9yd2FyZGluZ1N0dWJJbnRlcmZhY2VUYXJnZXQ7CiAgICB9IGVsc2UgewogICAgICBmaW5hbFRhcmdldCA9IHRhcmdldDsKICAgIH0KICAgIHJldHVybiBuZXcgUHJvY2VkdXJlKG5hbWUsIGtpbmQsIGZ1bmN0aW9uLAogICAgICAgIGlzQWJzdHJhY3Q6IHRydWUsCiAgICAgICAgaXNGb3J3YXJkaW5nU3R1YjogdHJ1ZSwKICAgICAgICBmaWxlVXJpOiBlbmNsb3NpbmdDbGFzcy5maWxlVXJpLAogICAgICAgIGZvcndhcmRpbmdTdHViSW50ZXJmYWNlVGFyZ2V0OiBmaW5hbFRhcmdldCkKICAgICAgLi5zdGFydEZpbGVPZmZzZXQgPSBlbmNsb3NpbmdDbGFzcy5maWxlT2Zmc2V0CiAgICAgIC4uZmlsZU9mZnNldCA9IGVuY2xvc2luZ0NsYXNzLmZpbGVPZmZzZXQKICAgICAgLi5wYXJlbnQgPSBlbmNsb3NpbmdDbGFzczsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBbaV10aCBlbGVtZW50IG9mIFtfY2FuZGlkYXRlc10sIGZpbmFsaXppbmcgaXQgaWYgbmVjZXNzYXJ5LgogIE1lbWJlciBnZXRDYW5kaWRhdGVBdChpbnQgaSkgewogICAgRGVjbGFyYXRpb24gY2FuZGlkYXRlID0gX2NhbmRpZGF0ZXNbaV07CiAgICBhc3NlcnQoY2FuZGlkYXRlIGlzISBEZWxheWVkTWVtYmVyKTsKICAgIHJldHVybiBjYW5kaWRhdGUudGFyZ2V0OwogIH0KCiAgc3RhdGljIE1lbWJlciBfZ2V0Rm9yd2FyZGluZ1N0dWJTdXBlclRhcmdldChQcm9jZWR1cmUgZm9yd2FyZGluZ1N0dWIpIHsKICAgIC8vIFRPRE8ocGF1bGJlcnJ5KTogd2hlbiBkYXJ0YnVnLmNvbS8zMTU2MiBpcyBmaXhlZCwgdGhpcyBzaG91bGQgYmVjb21lCiAgICAvLyBlYXNpZXIuCiAgICBSZXR1cm5TdGF0ZW1lbnQgYm9keSA9IGZvcndhcmRpbmdTdHViLmZ1bmN0aW9uLmJvZHk7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBib2R5LmV4cHJlc3Npb247CiAgICBpZiAoZXhwcmVzc2lvbiBpcyBTdXBlck1ldGhvZEludm9jYXRpb24pIHsKICAgICAgcmV0dXJuIGV4cHJlc3Npb24uaW50ZXJmYWNlVGFyZ2V0OwogICAgfSBlbHNlIGlmIChleHByZXNzaW9uIGlzIFN1cGVyUHJvcGVydHlTZXQpIHsKICAgICAgcmV0dXJuIGV4cHJlc3Npb24uaW50ZXJmYWNlVGFyZ2V0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIHVuaGFuZGxlZCgnJHtleHByZXNzaW9uLnJ1bnRpbWVUeXBlfScsCiAgICAgICAgICAnX2dldEZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXQnLCAtMSwgbnVsbCk7CiAgICB9CiAgfQoKICBTdWJzdGl0dXRpb24gX3N1YnN0aXR1dGlvbkZvcihNZW1iZXIgY2FuZGlkYXRlLCBDbGFzcyBjbGFzc18pIHsKICAgIHJldHVybiBTdWJzdGl0dXRpb24uZnJvbUludGVyZmFjZVR5cGUoaGllcmFyY2h5LmdldEtlcm5lbFR5cGVBc0luc3RhbmNlT2YoCiAgICAgICAgY2xhc3NfLnRoaXNUeXBlLCBjYW5kaWRhdGUuZW5jbG9zaW5nQ2xhc3MpKTsKICB9CgogIExpc3Q8VmFyaWFibGVEZWNsYXJhdGlvbj4gZ2V0UG9zaXRpb25hbFBhcmFtZXRlcnMoTWVtYmVyIG1lbWJlcikgewogICAgaWYgKG1lbWJlciBpcyBGaWVsZCkgewogICAgICBpZiAoa2luZCA9PSBQcm9jZWR1cmVLaW5kLlNldHRlcikgewogICAgICAgIHJldHVybiA8VmFyaWFibGVEZWNsYXJhdGlvbj5bCiAgICAgICAgICBuZXcgVmFyaWFibGVEZWNsYXJhdGlvbigiXyIsCiAgICAgICAgICAgICAgdHlwZTogbWVtYmVyLnR5cGUsIGlzQ292YXJpYW50OiBtZW1iZXIuaXNDb3ZhcmlhbnQpCiAgICAgICAgICAgIC4uaXNHZW5lcmljQ292YXJpYW50SW1wbCA9IG1lbWJlci5pc0dlbmVyaWNDb3ZhcmlhbnRJbXBsCiAgICAgICAgXTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gPFZhcmlhYmxlRGVjbGFyYXRpb24+W107CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBtZW1iZXIuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnM7CiAgICB9CiAgfQoKICBpbnQgZ2V0UmVxdWlyZWRQYXJhbWV0ZXJDb3VudChNZW1iZXIgbWVtYmVyKSB7CiAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLkdldHRlcjoKICAgICAgICByZXR1cm4gMDsKICAgICAgY2FzZSBQcm9jZWR1cmVLaW5kLlNldHRlcjoKICAgICAgICByZXR1cm4gMTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gbWVtYmVyLmZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CiAgICB9CiAgfQoKICBEYXJ0VHlwZSBnZXRSZXR1cm5UeXBlKE1lbWJlciBtZW1iZXIpIHsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIFByb2NlZHVyZUtpbmQuR2V0dGVyOgogICAgICAgIHJldHVybiBtZW1iZXIgaXMgRmllbGQgPyBtZW1iZXIudHlwZSA6IG1lbWJlci5mdW5jdGlvbi5yZXR1cm5UeXBlOwogICAgICBjYXNlIFByb2NlZHVyZUtpbmQuU2V0dGVyOgogICAgICAgIHJldHVybiBjb25zdCBWb2lkVHlwZSgpOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBtZW1iZXIuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgIH0KICB9Cn0KgaYATk48ASEJEw8SFA8WEA4ZExcZHxoaFxsdFRIBSQE9ASoBNjkBQwEdSgEXKQEdATMBHAFIKycBLkgBPgEqAUwlMgFEBk1IHgZQTU03JUMgO1BLShsHTBRGMRpAAT8+MjkyMjEBICtEQwYBICAhHDQcBgE9LhNEOC9KKzpAEEdFSCRKMDY1MDU+Mj1LNT81KQoqHgoIJDYgCjEgTwoIGSsgCiYgRAoIBkBDJEowNjUwNS1CLjU/NSkKKh4KCCQ2IAoxIEoKCBkrIAomID8KCAY/QEwrODUwNTIxN0M9PzkpCggkOiAKNSBJCggGEQQBPiFPDgZQTykyJCs8QyVEQAYiJ1FQLSktBklEE0QcTRM7UBM9NhoUISNNDyE9DyEUTQ8PRw8GRz43BAE9Tkc1PS5FBgEvLygrF008Jz5FOSxRKzYyCCtHOCJICAY1RTBOMzQqKENJGDo6DRwGLxogKTQ0LyEEAU4hLCkdBAFKTA85LS8pMSkNNDYGBAFCTzUEAUUbKiYnQkULDygIDTMGBAExFCESIRIPNwYEASoUIUshIQ8rBgQCATdwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2ZvcndhcmRpbmdfbm9kZS5kYXJ0NnNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9rZXJuZWwvdHlwZXMuZGFydMAAahEvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS50eXBlczsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnCiAgICBzaG93CiAgICAgICAgQm90dG9tVHlwZSwKICAgICAgICBDbGFzcywKICAgICAgICBEYXJ0VHlwZSwKICAgICAgICBEeW5hbWljVHlwZSwKICAgICAgICBGdW5jdGlvblR5cGUsCiAgICAgICAgSW50ZXJmYWNlVHlwZSwKICAgICAgICBJbnZhbGlkVHlwZSwKICAgICAgICBOYW1lZFR5cGUsCiAgICAgICAgTnVsbGFiaWxpdHksCiAgICAgICAgVHlwZVBhcmFtZXRlciwKICAgICAgICBUeXBlUGFyYW1ldGVyVHlwZSwKICAgICAgICBUeXBlZGVmVHlwZSwKICAgICAgICBWb2lkVHlwZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIHNob3cgU3Vic3RpdHV0aW9uOwoKaW1wb3J0ICdrZXJuZWxfYnVpbGRlci5kYXJ0JyBzaG93IENsYXNzSGllcmFyY2h5QnVpbGRlcjsKCmNsYXNzIFR5cGVzIHsKICBmaW5hbCBDbGFzc0hpZXJhcmNoeUJ1aWxkZXIgaGllcmFyY2h5OwoKICBUeXBlcyh0aGlzLmhpZXJhcmNoeSk7CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgW3NdIGlzIGEgc3VidHlwZSBvZiBbdF0uCiAgYm9vbCBpc1N1YnR5cGVPZktlcm5lbChEYXJ0VHlwZSBzLCBEYXJ0VHlwZSB0KSB7CiAgICBpZiAocyBpcyBJbnZhbGlkVHlwZSkgewogICAgICAvLyBJbnZhbGlkVHlwZSBpcyBhIGJvdHRvbSB0eXBlLgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmICh0IGlzIEludmFsaWRUeXBlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiBpc1N1YnR5cGVPZktlcm5lbE51bGxhYmlsaXR5KHMsIHMubnVsbGFiaWxpdHksIHQsIHQubnVsbGFiaWxpdHkpOwogIH0KCiAgYm9vbCBpc1N1YnR5cGVPZktlcm5lbE51bGxhYmlsaXR5KAogICAgICBEYXJ0VHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksIERhcnRUeXBlIHQsIHROdWxsYWJpbGl0eSkgewogICAgaWYgKHMgaXMgQm90dG9tVHlwZSkgewogICAgICByZXR1cm4gdHJ1ZTsgLy8gUnVsZSAzLgogICAgfQogICAgaWYgKHQgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgcmV0dXJuIHRydWU7IC8vIFJ1bGUgMi4KICAgIH0KICAgIGlmICh0IGlzIFZvaWRUeXBlKSB7CiAgICAgIHJldHVybiB0cnVlOyAvLyBSdWxlIDIuCiAgICB9CiAgICBpZiAodCBpcyBCb3R0b21UeXBlKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmICh0IGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgQ2xhc3MgY2xzID0gdC5jbGFzc05vZGU7CiAgICAgIGlmIChjbHMgPT0gaGllcmFyY2h5Lm9iamVjdEtlcm5lbENsYXNzKSB7CiAgICAgICAgcmV0dXJuIHRydWU7IC8vIFJ1bGUgMi4KICAgICAgfQogICAgICBpZiAoY2xzID09IGhpZXJhcmNoeS5mdXR1cmVPcktlcm5lbENsYXNzKSB7CiAgICAgICAgY29uc3QgSXNGdXR1cmVPclN1YnR5cGVPZiByZWxhdGlvbiA9IGNvbnN0IElzRnV0dXJlT3JTdWJ0eXBlT2YoKTsKICAgICAgICBpZiAocyBpcyBEeW5hbWljVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzRHluYW1pY1JlbGF0ZWQoCiAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBWb2lkVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzVm9pZFJlbGF0ZWQocywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcy5jbGFzc05vZGUgPT0gaGllcmFyY2h5LmZ1dHVyZU9yS2VybmVsQ2xhc3MKICAgICAgICAgICAgICA/IHJlbGF0aW9uLmlzRnV0dXJlT3JSZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcykKICAgICAgICAgICAgICA6IHJlbGF0aW9uLmlzSW50ZXJmYWNlUmVsYXRlZCgKICAgICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICAgIHJldHVybiByZWxhdGlvbi5pc0Z1bmN0aW9uUmVsYXRlZCgKICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIFR5cGVQYXJhbWV0ZXJUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcy5wcm9tb3RlZEJvdW5kID09IG51bGwKICAgICAgICAgICAgICA/IHJlbGF0aW9uLmlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoCiAgICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKQogICAgICAgICAgICAgIDogcmVsYXRpb24uaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIFR5cGVkZWZUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNUeXBlZGVmUmVsYXRlZCgKICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IElzSW50ZXJmYWNlU3VidHlwZU9mIHJlbGF0aW9uID0gY29uc3QgSXNJbnRlcmZhY2VTdWJ0eXBlT2YoKTsKICAgICAgICBpZiAocyBpcyBEeW5hbWljVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzRHluYW1pY1JlbGF0ZWQoCiAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBWb2lkVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzVm9pZFJlbGF0ZWQocywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcy5jbGFzc05vZGUgPT0gaGllcmFyY2h5LmZ1dHVyZU9yS2VybmVsQ2xhc3MKICAgICAgICAgICAgICA/IHJlbGF0aW9uLmlzRnV0dXJlT3JSZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcykKICAgICAgICAgICAgICA6IHJlbGF0aW9uLmlzSW50ZXJmYWNlUmVsYXRlZCgKICAgICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICAgIHJldHVybiByZWxhdGlvbi5pc0Z1bmN0aW9uUmVsYXRlZCgKICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIFR5cGVQYXJhbWV0ZXJUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcy5wcm9tb3RlZEJvdW5kID09IG51bGwKICAgICAgICAgICAgICA/IHJlbGF0aW9uLmlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoCiAgICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKQogICAgICAgICAgICAgIDogcmVsYXRpb24uaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfSBlbHNlIGlmIChzIGlzIFR5cGVkZWZUeXBlKSB7CiAgICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNUeXBlZGVmUmVsYXRlZCgKICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHQgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgIGNvbnN0IElzRnVuY3Rpb25TdWJ0eXBlT2YgcmVsYXRpb24gPSBjb25zdCBJc0Z1bmN0aW9uU3VidHlwZU9mKCk7CiAgICAgIGlmIChzIGlzIER5bmFtaWNUeXBlKSB7CiAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzRHluYW1pY1JlbGF0ZWQoCiAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgfSBlbHNlIGlmIChzIGlzIFZvaWRUeXBlKSB7CiAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzVm9pZFJlbGF0ZWQocywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICB9IGVsc2UgaWYgKHMgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgIHJldHVybiBzLmNsYXNzTm9kZSA9PSBoaWVyYXJjaHkuZnV0dXJlT3JLZXJuZWxDbGFzcwogICAgICAgICAgICA/IHJlbGF0aW9uLmlzRnV0dXJlT3JSZWxhdGVkKHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKQogICAgICAgICAgICA6IHJlbGF0aW9uLmlzSW50ZXJmYWNlUmVsYXRlZCgKICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgfSBlbHNlIGlmIChzIGlzIEZ1bmN0aW9uVHlwZSkgewogICAgICAgIHJldHVybiByZWxhdGlvbi5pc0Z1bmN0aW9uUmVsYXRlZCgKICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICB9IGVsc2UgaWYgKHMgaXMgVHlwZVBhcmFtZXRlclR5cGUpIHsKICAgICAgICByZXR1cm4gcy5wcm9tb3RlZEJvdW5kID09IG51bGwKICAgICAgICAgICAgPyByZWxhdGlvbi5pc1R5cGVQYXJhbWV0ZXJSZWxhdGVkKAogICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpCiAgICAgICAgICAgIDogcmVsYXRpb24uaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICB9IGVsc2UgaWYgKHMgaXMgVHlwZWRlZlR5cGUpIHsKICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNUeXBlZGVmUmVsYXRlZCgKICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHQgaXMgVHlwZVBhcmFtZXRlclR5cGUpIHsKICAgICAgaWYgKHQucHJvbW90ZWRCb3VuZCA9PSBudWxsKSB7CiAgICAgICAgY29uc3QgSXNUeXBlUGFyYW1ldGVyU3VidHlwZU9mIHJlbGF0aW9uID0KICAgICAgICAgICAgY29uc3QgSXNUeXBlUGFyYW1ldGVyU3VidHlwZU9mKCk7CiAgICAgICAgaWYgKHMgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgICAgIHJldHVybiByZWxhdGlvbi5pc0R5bmFtaWNSZWxhdGVkKAogICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKHMgaXMgVm9pZFR5cGUpIHsKICAgICAgICAgIHJldHVybiByZWxhdGlvbi5pc1ZvaWRSZWxhdGVkKHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKHMgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgICAgcmV0dXJuIHMuY2xhc3NOb2RlID09IGhpZXJhcmNoeS5mdXR1cmVPcktlcm5lbENsYXNzCiAgICAgICAgICAgICAgPyByZWxhdGlvbi5pc0Z1dHVyZU9yUmVsYXRlZCgKICAgICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpCiAgICAgICAgICAgICAgOiByZWxhdGlvbi5pc0ludGVyZmFjZVJlbGF0ZWQoCiAgICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKHMgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNGdW5jdGlvblJlbGF0ZWQoCiAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBUeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICAgICAgcmV0dXJuIHMucHJvbW90ZWRCb3VuZCA9PSBudWxsCiAgICAgICAgICAgICAgPyByZWxhdGlvbi5pc1R5cGVQYXJhbWV0ZXJSZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcykKICAgICAgICAgICAgICA6IHJlbGF0aW9uLmlzSW50ZXJzZWN0aW9uUmVsYXRlZCgKICAgICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBUeXBlZGVmVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzVHlwZWRlZlJlbGF0ZWQoCiAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBJc0ludGVyc2VjdGlvblN1YnR5cGVPZiByZWxhdGlvbiA9CiAgICAgICAgICAgIGNvbnN0IElzSW50ZXJzZWN0aW9uU3VidHlwZU9mKCk7CiAgICAgICAgaWYgKHMgaXMgRHluYW1pY1R5cGUpIHsKICAgICAgICAgIHJldHVybiByZWxhdGlvbi5pc0R5bmFtaWNSZWxhdGVkKAogICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKHMgaXMgVm9pZFR5cGUpIHsKICAgICAgICAgIHJldHVybiByZWxhdGlvbi5pc1ZvaWRSZWxhdGVkKHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKHMgaXMgSW50ZXJmYWNlVHlwZSkgewogICAgICAgICAgcmV0dXJuIHMuY2xhc3NOb2RlID09IGhpZXJhcmNoeS5mdXR1cmVPcktlcm5lbENsYXNzCiAgICAgICAgICAgICAgPyByZWxhdGlvbi5pc0Z1dHVyZU9yUmVsYXRlZCgKICAgICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpCiAgICAgICAgICAgICAgOiByZWxhdGlvbi5pc0ludGVyZmFjZVJlbGF0ZWQoCiAgICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgICB9IGVsc2UgaWYgKHMgaXMgRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNGdW5jdGlvblJlbGF0ZWQoCiAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBUeXBlUGFyYW1ldGVyVHlwZSkgewogICAgICAgICAgcmV0dXJuIHMucHJvbW90ZWRCb3VuZCA9PSBudWxsCiAgICAgICAgICAgICAgPyByZWxhdGlvbi5pc1R5cGVQYXJhbWV0ZXJSZWxhdGVkKAogICAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcykKICAgICAgICAgICAgICA6IHJlbGF0aW9uLmlzSW50ZXJzZWN0aW9uUmVsYXRlZCgKICAgICAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0gZWxzZSBpZiAocyBpcyBUeXBlZGVmVHlwZSkgewogICAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzVHlwZWRlZlJlbGF0ZWQoCiAgICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCB0LCB0TnVsbGFiaWxpdHksIHRoaXMpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmICh0IGlzIFR5cGVkZWZUeXBlKSB7CiAgICAgIGNvbnN0IElzVHlwZWRlZlN1YnR5cGVPZiByZWxhdGlvbiA9IGNvbnN0IElzVHlwZWRlZlN1YnR5cGVPZigpOwogICAgICBpZiAocyBpcyBEeW5hbWljVHlwZSkgewogICAgICAgIHJldHVybiByZWxhdGlvbi5pc0R5bmFtaWNSZWxhdGVkKAogICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgIH0gZWxzZSBpZiAocyBpcyBWb2lkVHlwZSkgewogICAgICAgIHJldHVybiByZWxhdGlvbi5pc1ZvaWRSZWxhdGVkKHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgfSBlbHNlIGlmIChzIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgICByZXR1cm4gcy5jbGFzc05vZGUgPT0gaGllcmFyY2h5LmZ1dHVyZU9yS2VybmVsQ2xhc3MKICAgICAgICAgICAgPyByZWxhdGlvbi5pc0Z1dHVyZU9yUmVsYXRlZChzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcykKICAgICAgICAgICAgOiByZWxhdGlvbi5pc0ludGVyZmFjZVJlbGF0ZWQoCiAgICAgICAgICAgICAgICBzLCBzTnVsbGFiaWxpdHksIHQsIHROdWxsYWJpbGl0eSwgdGhpcyk7CiAgICAgIH0gZWxzZSBpZiAocyBpcyBGdW5jdGlvblR5cGUpIHsKICAgICAgICByZXR1cm4gcmVsYXRpb24uaXNGdW5jdGlvblJlbGF0ZWQoCiAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgfSBlbHNlIGlmIChzIGlzIFR5cGVQYXJhbWV0ZXJUeXBlKSB7CiAgICAgICAgcmV0dXJuIHMucHJvbW90ZWRCb3VuZCA9PSBudWxsCiAgICAgICAgICAgID8gcmVsYXRpb24uaXNUeXBlUGFyYW1ldGVyUmVsYXRlZCgKICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKQogICAgICAgICAgICA6IHJlbGF0aW9uLmlzSW50ZXJzZWN0aW9uUmVsYXRlZCgKICAgICAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgfSBlbHNlIGlmIChzIGlzIFR5cGVkZWZUeXBlKSB7CiAgICAgICAgcmV0dXJuIHJlbGF0aW9uLmlzVHlwZWRlZlJlbGF0ZWQoCiAgICAgICAgICAgIHMsIHNOdWxsYWJpbGl0eSwgdCwgdE51bGxhYmlsaXR5LCB0aGlzKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgIlVuaGFuZGxlZCB0eXBlOiAke3QucnVudGltZVR5cGV9IjsKICAgIH0KICAgIHRocm93ICJVbmhhbmRsZWQgdHlwZSBjb21iaW5hdGlvbjogJHt0LnJ1bnRpbWVUeXBlfSAke3MucnVudGltZVR5cGV9IjsKICB9CgogIC8vLyBSZXR1cm5zIHRydWUgaWYgYWxsIHR5cGVzIGluIFtzXSBhbmQgW3RdIHBhaXJ3aXNlIGFyZSBzdWJ0eXBlcy4KICBib29sIGFyZVN1YnR5cGVzT2ZLZXJuZWwoTGlzdDxEYXJ0VHlwZT4gcywgTGlzdDxEYXJ0VHlwZT4gdCkgewogICAgaWYgKHMubGVuZ3RoICE9IHQubGVuZ3RoKSB7CiAgICAgIHRocm93ICJOdW1iZXJzIG9mIHR5cGUgYXJndW1lbnRzIGRvbid0IG1hdGNoICRzICR0LiI7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCFpc1N1YnR5cGVPZktlcm5lbChzW2ldLCB0W2ldKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBib29sIGlzU2FtZVR5cGVLZXJuZWwoRGFydFR5cGUgcywgRGFydFR5cGUgdCkgewogICAgcmV0dXJuIGlzU3VidHlwZU9mS2VybmVsKHMsIHQpICYmIGlzU3VidHlwZU9mS2VybmVsKHQsIHMpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgVHlwZVJlbGF0aW9uPFQgZXh0ZW5kcyBEYXJ0VHlwZT4gewogIGNvbnN0IFR5cGVSZWxhdGlvbigpOwoKICBib29sIGlzRHluYW1pY1JlbGF0ZWQoRHluYW1pY1R5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBUIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpOwoKICBib29sIGlzVm9pZFJlbGF0ZWQoVm9pZFR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBUIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpOwoKICBib29sIGlzSW50ZXJmYWNlUmVsYXRlZChJbnRlcmZhY2VUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwgVCB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKTsKCiAgYm9vbCBpc0ludGVyc2VjdGlvblJlbGF0ZWQoCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIGludGVyc2VjdGlvbiwKICAgICAgTnVsbGFiaWxpdHkgaW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgIFQgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcyk7CgogIGJvb2wgaXNGdW5jdGlvblJlbGF0ZWQoRnVuY3Rpb25UeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwgVCB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKTsKCiAgYm9vbCBpc0Z1dHVyZU9yUmVsYXRlZCgKICAgICAgSW50ZXJmYWNlVHlwZSBmdXR1cmVPciwKICAgICAgTnVsbGFiaWxpdHkgZnV0dXJlT3JOdWxsYWJpbGl0eSwKICAgICAgVCB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKTsKCiAgYm9vbCBpc1R5cGVQYXJhbWV0ZXJSZWxhdGVkKFR5cGVQYXJhbWV0ZXJUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgVCB0LCBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKTsKCiAgYm9vbCBpc1R5cGVkZWZSZWxhdGVkKFR5cGVkZWZUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwgVCB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKTsKfQoKY2xhc3MgSXNJbnRlcmZhY2VTdWJ0eXBlT2YgZXh0ZW5kcyBUeXBlUmVsYXRpb248SW50ZXJmYWNlVHlwZT4gewogIGNvbnN0IElzSW50ZXJmYWNlU3VidHlwZU9mKCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcmZhY2VSZWxhdGVkKEludGVyZmFjZVR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIGlmIChzLmNsYXNzTm9kZSA9PSB0eXBlcy5oaWVyYXJjaHkubnVsbEtlcm5lbENsYXNzKSB7CiAgICAgIC8vIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uLCB0byBhdm9pZCBpbnN0YW50YXRpbmcgdW5uZWNlc3NhcnkgdHlwZQogICAgICAvLyBhcmd1bWVudHMgaW4gZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZi4KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBJbnRlcmZhY2VUeXBlIGFzU3VwZXJ0eXBlID0KICAgICAgICB0eXBlcy5oaWVyYXJjaHkuZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZihzLCB0LmNsYXNzTm9kZSk7CiAgICBpZiAoYXNTdXBlcnR5cGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gdHlwZXMuYXJlU3VidHlwZXNPZktlcm5lbCgKICAgICAgICAgIGFzU3VwZXJ0eXBlLnR5cGVBcmd1bWVudHMsIHQudHlwZUFyZ3VtZW50cyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoVHlwZVBhcmFtZXRlclR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLnBhcmFtZXRlci5ib3VuZCwgdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRnV0dXJlT3JSZWxhdGVkKAogICAgICBJbnRlcmZhY2VUeXBlIGZ1dHVyZU9yLAogICAgICBOdWxsYWJpbGl0eSBmdXR1cmVPck51bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpIHsKICAgIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cyA9IGZ1dHVyZU9yLnR5cGVBcmd1bWVudHM7CiAgICBpZiAoIXR5cGVzLmlzU3VidHlwZU9mS2VybmVsKGFyZ3VtZW50cy5zaW5nbGUsIHQpKSB7CiAgICAgIHJldHVybiBmYWxzZTsgLy8gUnVsZSA3LjEKICAgIH0KICAgIGlmICghdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoCiAgICAgICAgbmV3IEludGVyZmFjZVR5cGUodHlwZXMuaGllcmFyY2h5LmZ1dHVyZUtlcm5lbENsYXNzLCBhcmd1bWVudHMpLCB0KSkgewogICAgICByZXR1cm4gZmFsc2U7IC8vIFJ1bGUgNy4yCiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBpbnRlcnNlY3Rpb24sCiAgICAgIE51bGxhYmlsaXR5IGludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChpbnRlcnNlY3Rpb24ucHJvbW90ZWRCb3VuZCwgdCk7IC8vIFJ1bGUgMTIuCiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRHluYW1pY1JlbGF0ZWQoRHluYW1pY1R5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNGdW5jdGlvblJlbGF0ZWQoRnVuY3Rpb25UeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgSW50ZXJmYWNlVHlwZSB0LCBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gdC5jbGFzc05vZGUgPT0gdHlwZXMuaGllcmFyY2h5LmZ1bmN0aW9uS2VybmVsQ2xhc3M7IC8vIFJ1bGUgMTQuCiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVHlwZWRlZlJlbGF0ZWQoVHlwZWRlZlR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBJbnRlcmZhY2VUeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIC8vIFJ1bGUgNS4KICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLnVuYWxpYXMsIHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1ZvaWRSZWxhdGVkKFZvaWRUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwgSW50ZXJmYWNlVHlwZSB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CgpjbGFzcyBJc0Z1bmN0aW9uU3VidHlwZU9mIGV4dGVuZHMgVHlwZVJlbGF0aW9uPEZ1bmN0aW9uVHlwZT4gewogIGNvbnN0IElzRnVuY3Rpb25TdWJ0eXBlT2YoKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1bmN0aW9uUmVsYXRlZChGdW5jdGlvblR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBGdW5jdGlvblR5cGUgdCwgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgTGlzdDxUeXBlUGFyYW1ldGVyPiBzVHlwZVZhcmlhYmxlcyA9IHMudHlwZVBhcmFtZXRlcnM7CiAgICBMaXN0PFR5cGVQYXJhbWV0ZXI+IHRUeXBlVmFyaWFibGVzID0gdC50eXBlUGFyYW1ldGVyczsKICAgIGlmIChzVHlwZVZhcmlhYmxlcy5sZW5ndGggIT0gdFR5cGVWYXJpYWJsZXMubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoc1R5cGVWYXJpYWJsZXMuaXNOb3RFbXB0eSkgewogICAgICAvLyBJZiB0aGUgZnVuY3Rpb24gdHlwZXMgaGF2ZSB0eXBlIHZhcmlhYmxlcywgd2UgYWxwaGEtcmVuYW1lIHRoZSB0eXBlCiAgICAgIC8vIHZhcmlhYmxlcyBvZiBbc10gdG8gdXNlIHRob3NlIG9mIFt0XS4KICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZVZhcmlhYmxlU3Vic3RpdHV0aW9uID0gPERhcnRUeXBlPltdOwogICAgICBib29sIHNlY29uZEJvdW5kc0NoZWNrTmVlZGVkID0gZmFsc2U7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc1R5cGVWYXJpYWJsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBUeXBlUGFyYW1ldGVyIHNUeXBlVmFyaWFibGUgPSBzVHlwZVZhcmlhYmxlc1tpXTsKICAgICAgICBUeXBlUGFyYW1ldGVyIHRUeXBlVmFyaWFibGUgPSB0VHlwZVZhcmlhYmxlc1tpXTsKICAgICAgICBpZiAoIXR5cGVzLmlzU2FtZVR5cGVLZXJuZWwoc1R5cGVWYXJpYWJsZS5ib3VuZCwgdFR5cGVWYXJpYWJsZS5ib3VuZCkpIHsKICAgICAgICAgIC8vIElmIHRoZSBib3VuZHMgYXJlbid0IHRoZSBzYW1lLCB3ZSBuZWVkIHRvIHRyeSBhZ2FpbiBhZnRlcgogICAgICAgICAgLy8gY29tcHV0aW5nIHRoZSBzdWJzdGl0dXRpb24gb2YgdHlwZSB2YXJpYWJsZXMuCiAgICAgICAgICBzZWNvbmRCb3VuZHNDaGVja05lZWRlZCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHR5cGVWYXJpYWJsZVN1YnN0aXR1dGlvbi5hZGQobmV3IFR5cGVQYXJhbWV0ZXJUeXBlKHRUeXBlVmFyaWFibGUpKTsKICAgICAgfQogICAgICBTdWJzdGl0dXRpb24gc3Vic3RpdHV0aW9uID0KICAgICAgICAgIFN1YnN0aXR1dGlvbi5mcm9tUGFpcnMoc1R5cGVWYXJpYWJsZXMsIHR5cGVWYXJpYWJsZVN1YnN0aXR1dGlvbik7CiAgICAgIGlmIChzZWNvbmRCb3VuZHNDaGVja05lZWRlZCkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc1R5cGVWYXJpYWJsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIFR5cGVQYXJhbWV0ZXIgc1R5cGVWYXJpYWJsZSA9IHNUeXBlVmFyaWFibGVzW2ldOwogICAgICAgICAgVHlwZVBhcmFtZXRlciB0VHlwZVZhcmlhYmxlID0gdFR5cGVWYXJpYWJsZXNbaV07CiAgICAgICAgICBpZiAoIXR5cGVzLmlzU2FtZVR5cGVLZXJuZWwoCiAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uLnN1YnN0aXR1dGVUeXBlKHNUeXBlVmFyaWFibGUuYm91bmQpLAogICAgICAgICAgICAgIHRUeXBlVmFyaWFibGUuYm91bmQpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcyA9IHN1YnN0aXR1dGlvbi5zdWJzdGl0dXRlVHlwZShzLndpdGhvdXRUeXBlUGFyYW1ldGVycyk7CiAgICB9CiAgICBpZiAoIXR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMucmV0dXJuVHlwZSwgdC5yZXR1cm5UeXBlKSkgcmV0dXJuIGZhbHNlOwogICAgTGlzdDxEYXJ0VHlwZT4gc1Bvc2l0aW9uYWwgPSBzLnBvc2l0aW9uYWxQYXJhbWV0ZXJzOwogICAgTGlzdDxEYXJ0VHlwZT4gdFBvc2l0aW9uYWwgPSB0LnBvc2l0aW9uYWxQYXJhbWV0ZXJzOwogICAgaWYgKHMucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA+IHQucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgewogICAgICAvLyBSdWxlIDE1LCBuMSA8PSBuMi4KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKHNQb3NpdGlvbmFsLmxlbmd0aCA8IHRQb3NpdGlvbmFsLmxlbmd0aCkgewogICAgICAvLyBSdWxlIDE1LCBuMSArIGsxID49IG4yICsgazIuCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdFBvc2l0aW9uYWwubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCF0eXBlcy5pc1N1YnR5cGVPZktlcm5lbCh0UG9zaXRpb25hbFtpXSwgc1Bvc2l0aW9uYWxbaV0pKSB7CiAgICAgICAgLy8gUnVsZSAxNSwgVGogPDogU2ouCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBMaXN0PE5hbWVkVHlwZT4gc05hbWVkID0gcy5uYW1lZFBhcmFtZXRlcnM7CiAgICBMaXN0PE5hbWVkVHlwZT4gdE5hbWVkID0gdC5uYW1lZFBhcmFtZXRlcnM7CiAgICBpZiAoc05hbWVkLmlzTm90RW1wdHkgfHwgdE5hbWVkLmlzTm90RW1wdHkpIHsKICAgICAgLy8gUnVsZSAxNiwgdGhlIG51bWJlciBvZiBwb3NpdGlvbmFsIHBhcmFtZXRlcnMgbXVzdCBiZSB0aGUgc2FtZS4KICAgICAgaWYgKHNQb3NpdGlvbmFsLmxlbmd0aCAhPSB0UG9zaXRpb25hbC5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKHMucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCAhPSB0LnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpIHJldHVybiBmYWxzZTsKCiAgICAgIC8vIFJ1bGUgMTYsIHRoZSBwYXJhbWV0ZXIgbmFtZXMgb2YgW3RdIG11c3QgYmUgYSBzdWJzZXQgb2YgdGhvc2Ugb2YKICAgICAgLy8gW3NdLiBBbHNvLCBmb3IgdGhlIGludGVyc2VjdGlvbiwgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlciBvZiBbdF0gbXVzdAogICAgICAvLyBiZSBhIHN1YnR5cGUgb2YgdGhlIHR5cGUgb2YgdGhlIHBhcmFtZXRlciBvZiBbc10uCiAgICAgIGludCBzQ291bnQgPSAwOwogICAgICBmb3IgKGludCB0Q291bnQgPSAwOyB0Q291bnQgPCB0TmFtZWQubGVuZ3RoOyB0Q291bnQrKykgewogICAgICAgIFN0cmluZyBuYW1lID0gdE5hbWVkW3RDb3VudF0ubmFtZTsKICAgICAgICBmb3IgKDsgc0NvdW50IDwgc05hbWVkLmxlbmd0aDsgc0NvdW50KyspIHsKICAgICAgICAgIGlmIChzTmFtZWRbc0NvdW50XS5uYW1lID09IG5hbWUpIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoc0NvdW50ID09IHNOYW1lZC5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoIXR5cGVzLmlzU3VidHlwZU9mS2VybmVsKAogICAgICAgICAgICB0TmFtZWRbdENvdW50XS50eXBlLCBzTmFtZWRbc0NvdW50XS50eXBlKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJmYWNlUmVsYXRlZChJbnRlcmZhY2VUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgRnVuY3Rpb25UeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBzLmNsYXNzTm9kZSA9PSB0eXBlcy5oaWVyYXJjaHkubnVsbEtlcm5lbENsYXNzOyAvLyBSdWxlIDQuCiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRHluYW1pY1JlbGF0ZWQoRHluYW1pY1R5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBGdW5jdGlvblR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1dHVyZU9yUmVsYXRlZCgKICAgICAgSW50ZXJmYWNlVHlwZSBmdXR1cmVPciwKICAgICAgTnVsbGFiaWxpdHkgZnV0dXJlT3JOdWxsYWJpbGl0eSwKICAgICAgRnVuY3Rpb25UeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBpbnRlcnNlY3Rpb24sCiAgICAgIE51bGxhYmlsaXR5IGludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICBGdW5jdGlvblR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgLy8gUnVsZSAxMi4KICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChpbnRlcnNlY3Rpb24ucHJvbW90ZWRCb3VuZCwgdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVHlwZVBhcmFtZXRlclJlbGF0ZWQoVHlwZVBhcmFtZXRlclR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBGdW5jdGlvblR5cGUgdCwgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgLy8gUnVsZSAxMy4KICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLnBhcmFtZXRlci5ib3VuZCwgdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVHlwZWRlZlJlbGF0ZWQoVHlwZWRlZlR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBGdW5jdGlvblR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgLy8gUnVsZSA1LgogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMudW5hbGlhcywgdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVm9pZFJlbGF0ZWQoVm9pZFR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBGdW5jdGlvblR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKY2xhc3MgSXNUeXBlUGFyYW1ldGVyU3VidHlwZU9mIGV4dGVuZHMgVHlwZVJlbGF0aW9uPFR5cGVQYXJhbWV0ZXJUeXBlPiB7CiAgY29uc3QgSXNUeXBlUGFyYW1ldGVyU3VidHlwZU9mKCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNUeXBlUGFyYW1ldGVyUmVsYXRlZChUeXBlUGFyYW1ldGVyVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBzLnBhcmFtZXRlciA9PSB0LnBhcmFtZXRlciB8fAogICAgICAgIC8vIFJ1bGUgMTMuCiAgICAgICAgdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocy5ib3VuZCwgdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJzZWN0aW9uUmVsYXRlZCgKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgaW50ZXJzZWN0aW9uLAogICAgICBOdWxsYWJpbGl0eSBpbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIGludGVyc2VjdGlvbi5wYXJhbWV0ZXIgPT0gdC5wYXJhbWV0ZXI7IC8vIFJ1bGUgOC4KICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcmZhY2VSZWxhdGVkKEludGVyZmFjZVR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSB0LCBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gcy5jbGFzc05vZGUgPT0gdHlwZXMuaGllcmFyY2h5Lm51bGxLZXJuZWxDbGFzczsgLy8gUnVsZSA0LgogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0R5bmFtaWNSZWxhdGVkKER5bmFtaWNUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgdCwgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1bmN0aW9uUmVsYXRlZChGdW5jdGlvblR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSB0LCBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRnV0dXJlT3JSZWxhdGVkKAogICAgICBJbnRlcmZhY2VUeXBlIGZ1dHVyZU9yLAogICAgICBOdWxsYWJpbGl0eSBmdXR1cmVPck51bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzVHlwZWRlZlJlbGF0ZWQoVHlwZWRlZlR5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSB0LCBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocy51bmFsaWFzLCB0KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNWb2lkUmVsYXRlZChWb2lkVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksIFR5cGVQYXJhbWV0ZXJUeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0KCmNsYXNzIElzVHlwZWRlZlN1YnR5cGVPZiBleHRlbmRzIFR5cGVSZWxhdGlvbjxUeXBlZGVmVHlwZT4gewogIGNvbnN0IElzVHlwZWRlZlN1YnR5cGVPZigpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJmYWNlUmVsYXRlZChJbnRlcmZhY2VUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgVHlwZWRlZlR5cGUgdCwgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMsIHQudW5hbGlhcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRHluYW1pY1JlbGF0ZWQoRHluYW1pY1R5cGUgcywgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LCBUeXBlZGVmVHlwZSB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocywgdC51bmFsaWFzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNGdW5jdGlvblJlbGF0ZWQoRnVuY3Rpb25UeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgVHlwZWRlZlR5cGUgdCwgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMsIHQudW5hbGlhcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRnV0dXJlT3JSZWxhdGVkKAogICAgICBJbnRlcmZhY2VUeXBlIGZ1dHVyZU9yLAogICAgICBOdWxsYWJpbGl0eSBmdXR1cmVPck51bGxhYmlsaXR5LAogICAgICBUeXBlZGVmVHlwZSB0LAogICAgICBOdWxsYWJpbGl0eSB0TnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoZnV0dXJlT3IsIHQudW5hbGlhcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJzZWN0aW9uUmVsYXRlZCgKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgaW50ZXJzZWN0aW9uLAogICAgICBOdWxsYWJpbGl0eSBpbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwKICAgICAgVHlwZWRlZlR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKGludGVyc2VjdGlvbiwgdC51bmFsaWFzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNUeXBlUGFyYW1ldGVyUmVsYXRlZChUeXBlUGFyYW1ldGVyVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIFR5cGVkZWZUeXBlIHQsIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLCB0LnVuYWxpYXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1R5cGVkZWZSZWxhdGVkKFR5cGVkZWZUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwgVHlwZWRlZlR5cGUgdCwKICAgICAgTnVsbGFiaWxpdHkgdE51bGxhYmlsaXR5LCBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMudW5hbGlhcywgdC51bmFsaWFzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNWb2lkUmVsYXRlZChWb2lkVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksIFR5cGVkZWZUeXBlIHQsCiAgICAgIE51bGxhYmlsaXR5IHROdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLCB0LnVuYWxpYXMpOwogIH0KfQoKY2xhc3MgSXNGdXR1cmVPclN1YnR5cGVPZiBleHRlbmRzIFR5cGVSZWxhdGlvbjxJbnRlcmZhY2VUeXBlPiB7CiAgY29uc3QgSXNGdXR1cmVPclN1YnR5cGVPZigpOwoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJmYWNlUmVsYXRlZChJbnRlcmZhY2VUeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgSW50ZXJmYWNlVHlwZSBmdXR1cmVPciwgTnVsbGFiaWxpdHkgZnV0dXJlT3JOdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIExpc3Q8RGFydFR5cGU+IGFyZ3VtZW50cyA9IGZ1dHVyZU9yLnR5cGVBcmd1bWVudHM7CiAgICBpZiAodHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocywgYXJndW1lbnRzLnNpbmdsZSkpIHsKICAgICAgcmV0dXJuIHRydWU7IC8vIFJ1bGUgMTEuCiAgICB9CiAgICAvLyBSdWxlIDEwLgogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKAogICAgICAgIHMsIG5ldyBJbnRlcmZhY2VUeXBlKHR5cGVzLmhpZXJhcmNoeS5mdXR1cmVLZXJuZWxDbGFzcywgYXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRnV0dXJlT3JSZWxhdGVkKAogICAgICBJbnRlcmZhY2VUeXBlIHNGdXR1cmVPciwKICAgICAgTnVsbGFiaWxpdHkgc0Z1dHVyZU9yTnVsbGFiaWxpdHksCiAgICAgIEludGVyZmFjZVR5cGUgdEZ1dHVyZU9yLAogICAgICBOdWxsYWJpbGl0eSB0RnV0dXJlT3JOdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpIHsKICAgIC8vIFRoaXMgZm9sbG93cyBmcm9tIGNvbWJpbmluZyBydWxlcyA3LCAxMCwgYW5kIDExLgogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKAogICAgICAgIHNGdXR1cmVPci50eXBlQXJndW1lbnRzLnNpbmdsZSwgdEZ1dHVyZU9yLnR5cGVBcmd1bWVudHMuc2luZ2xlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNEeW5hbWljUmVsYXRlZChEeW5hbWljVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIEludGVyZmFjZVR5cGUgZnV0dXJlT3IsIE51bGxhYmlsaXR5IGZ1dHVyZU9yTnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICAvLyBSdWxlIDExLgogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMsIGZ1dHVyZU9yLnR5cGVBcmd1bWVudHMuc2luZ2xlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNWb2lkUmVsYXRlZChWb2lkVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIEludGVyZmFjZVR5cGUgZnV0dXJlT3IsIE51bGxhYmlsaXR5IGZ1dHVyZU9yTnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICAvLyBSdWxlIDExLgogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMsIGZ1dHVyZU9yLnR5cGVBcmd1bWVudHMuc2luZ2xlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNUeXBlUGFyYW1ldGVyUmVsYXRlZChUeXBlUGFyYW1ldGVyVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIEludGVyZmFjZVR5cGUgZnV0dXJlT3IsIE51bGxhYmlsaXR5IGZ1dHVyZU9yTnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICBMaXN0PERhcnRUeXBlPiBhcmd1bWVudHMgPSBmdXR1cmVPci50eXBlQXJndW1lbnRzOwogICAgaWYgKHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMsIGFyZ3VtZW50cy5zaW5nbGUpKSB7CiAgICAgIC8vIFJ1bGUgMTEuCiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIGlmICh0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLnBhcmFtZXRlci5ib3VuZCwgZnV0dXJlT3IpKSB7CiAgICAgIC8vIFJ1bGUgMTMuCiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIC8vIFJ1bGUgMTAuCiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoCiAgICAgICAgcywgbmV3IEludGVyZmFjZVR5cGUodHlwZXMuaGllcmFyY2h5LmZ1dHVyZUtlcm5lbENsYXNzLCBhcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNGdW5jdGlvblJlbGF0ZWQoRnVuY3Rpb25UeXBlIHMsIE51bGxhYmlsaXR5IHNOdWxsYWJpbGl0eSwKICAgICAgSW50ZXJmYWNlVHlwZSBmdXR1cmVPciwgTnVsbGFiaWxpdHkgZnV0dXJlT3JOdWxsYWJpbGl0eSwgVHlwZXMgdHlwZXMpIHsKICAgIC8vIFJ1bGUgMTEuCiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocywgZnV0dXJlT3IudHlwZUFyZ3VtZW50cy5zaW5nbGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0ludGVyc2VjdGlvblJlbGF0ZWQoCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIGludGVyc2VjdGlvbiwKICAgICAgTnVsbGFiaWxpdHkgaW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgIEludGVyZmFjZVR5cGUgZnV0dXJlT3IsCiAgICAgIE51bGxhYmlsaXR5IGZ1dHVyZU9yTnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICBpZiAoaXNUeXBlUGFyYW1ldGVyUmVsYXRlZChpbnRlcnNlY3Rpb24sIGludGVyc2VjdGlvbk51bGxhYmlsaXR5LCBmdXR1cmVPciwKICAgICAgICBmdXR1cmVPck51bGxhYmlsaXR5LCB0eXBlcykpIHsKICAgICAgLy8gUnVsZSA4LgogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIC8vIFJ1bGUgMTIuCiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwoaW50ZXJzZWN0aW9uLnByb21vdGVkQm91bmQsIGZ1dHVyZU9yKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNUeXBlZGVmUmVsYXRlZChUeXBlZGVmVHlwZSBzLCBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIEludGVyZmFjZVR5cGUgZnV0dXJlT3IsIE51bGxhYmlsaXR5IGZ1dHVyZU9yTnVsbGFiaWxpdHksIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gdHlwZXMuaXNTdWJ0eXBlT2ZLZXJuZWwocy51bmFsaWFzLCBmdXR1cmVPcik7CiAgfQp9CgpjbGFzcyBJc0ludGVyc2VjdGlvblN1YnR5cGVPZiBleHRlbmRzIFR5cGVSZWxhdGlvbjxUeXBlUGFyYW1ldGVyVHlwZT4gewogIGNvbnN0IElzSW50ZXJzZWN0aW9uU3VidHlwZU9mKCk7CgogIEBvdmVycmlkZQogIGJvb2wgaXNJbnRlcnNlY3Rpb25SZWxhdGVkKAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBzSW50ZXJzZWN0aW9uLAogICAgICBOdWxsYWJpbGl0eSBzSW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIHRJbnRlcnNlY3Rpb24sCiAgICAgIE51bGxhYmlsaXR5IHRJbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpIHsKICAgIC8vIFJ1bGUgOS4KICAgIHJldHVybiBjb25zdCBJc1R5cGVQYXJhbWV0ZXJTdWJ0eXBlT2YoKS5pc0ludGVyc2VjdGlvblJlbGF0ZWQoCiAgICAgICAgICAgIHNJbnRlcnNlY3Rpb24sCiAgICAgICAgICAgIHNJbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwKICAgICAgICAgICAgdEludGVyc2VjdGlvbiwKICAgICAgICAgICAgdEludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICAgICAgICB0eXBlcykgJiYKICAgICAgICB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzSW50ZXJzZWN0aW9uLCB0SW50ZXJzZWN0aW9uLnByb21vdGVkQm91bmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc1R5cGVQYXJhbWV0ZXJSZWxhdGVkKAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBzLAogICAgICBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIGludGVyc2VjdGlvbiwKICAgICAgTnVsbGFiaWxpdHkgaW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICAvLyBSdWxlIDkuCiAgICByZXR1cm4gY29uc3QgSXNUeXBlUGFyYW1ldGVyU3VidHlwZU9mKCkuaXNUeXBlUGFyYW1ldGVyUmVsYXRlZCgKICAgICAgICAgICAgcywgc051bGxhYmlsaXR5LCBpbnRlcnNlY3Rpb24sIGludGVyc2VjdGlvbk51bGxhYmlsaXR5LCB0eXBlcykgJiYKICAgICAgICB0eXBlcy5pc1N1YnR5cGVPZktlcm5lbChzLCBpbnRlcnNlY3Rpb24ucHJvbW90ZWRCb3VuZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzSW50ZXJmYWNlUmVsYXRlZCgKICAgICAgSW50ZXJmYWNlVHlwZSBzLAogICAgICBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIGludGVyc2VjdGlvbiwKICAgICAgTnVsbGFiaWxpdHkgaW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gcy5jbGFzc05vZGUgPT0gdHlwZXMuaGllcmFyY2h5Lm51bGxLZXJuZWxDbGFzczsgLy8gUnVsZSA0LgogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0R5bmFtaWNSZWxhdGVkKAogICAgICBEeW5hbWljVHlwZSBzLAogICAgICBOdWxsYWJpbGl0eSBzTnVsbGFiaWxpdHksCiAgICAgIFR5cGVQYXJhbWV0ZXJUeXBlIGludGVyc2VjdGlvbiwKICAgICAgTnVsbGFiaWxpdHkgaW50ZXJzZWN0aW9uTnVsbGFiaWxpdHksCiAgICAgIFR5cGVzIHR5cGVzKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRnVuY3Rpb25SZWxhdGVkKAogICAgICBGdW5jdGlvblR5cGUgcywKICAgICAgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBpbnRlcnNlY3Rpb24sCiAgICAgIE51bGxhYmlsaXR5IGludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Z1dHVyZU9yUmVsYXRlZCgKICAgICAgSW50ZXJmYWNlVHlwZSBmdXR1cmVPciwKICAgICAgTnVsbGFiaWxpdHkgZnV0dXJlT3JOdWxsYWJpbGl0eSwKICAgICAgVHlwZVBhcmFtZXRlclR5cGUgaW50ZXJzZWN0aW9uLAogICAgICBOdWxsYWJpbGl0eSBpbnRlcnNlY3Rpb25OdWxsYWJpbGl0eSwKICAgICAgVHlwZXMgdHlwZXMpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNUeXBlZGVmUmVsYXRlZCgKICAgICAgVHlwZWRlZlR5cGUgcywKICAgICAgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBpbnRlcnNlY3Rpb24sCiAgICAgIE51bGxhYmlsaXR5IGludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgLy8gUnVsZSA1LgogICAgcmV0dXJuIHR5cGVzLmlzU3VidHlwZU9mS2VybmVsKHMudW5hbGlhcywgaW50ZXJzZWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNWb2lkUmVsYXRlZCgKICAgICAgVm9pZFR5cGUgcywKICAgICAgTnVsbGFiaWxpdHkgc051bGxhYmlsaXR5LAogICAgICBUeXBlUGFyYW1ldGVyVHlwZSBpbnRlcnNlY3Rpb24sCiAgICAgIE51bGxhYmlsaXR5IGludGVyc2VjdGlvbk51bGxhYmlsaXR5LAogICAgICBUeXBlcyB0eXBlcykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQqDJABOTjwBFQEhCRQPEhUWFxUTFRcbFRIBPQE5AQ4pARkBLzMcJxMGHBQGTQQBJUgbHgYcHgYZHgYbFAYeHzAgCDJKICw3JFEpPiw6LTsoLTctKTE6MDsnLDcKD0wgLDckUSk+LDotOygtNy0pMTowOycsNwoIJEgeKjUiTyc8USs5Jis1KycvOC45JSo1CCklMi4gLDckUSk+LDotOygtNy0pMTowOycsNwoPMS0gLDckUSk+LDotOygtNy0pMTowOycsNwoII0YeKjUiTyc8USs5Jis1KycvOC45JSo1CA0wBksEAUZBIDwGKTgGEQQBMj8EAgEyGAFGLgFALgFKLgEeJisLIBQBSC4BGh4nCyAUAU0zAUYuAgFBIAEMRUA6STETBiBDHxQNKDcGBAEMTUA6BAEMGh4nFyAVNzkgBiJPIAYRBAEMHiYrFyAVTwQBDEFAEgQBDENASwQBDEFADzIEAQxMLxIEAgE/HwEMQz87O0YlTS8+LDg5OVFHOyoKTAgiTCU6OzsnQCYaDAoIQAZMOTk/HBQGMyYUBjNGHhYIBjAwMkhCTgFKUDsWPyszMgozJjkYCggGEQQBDEU/RgQBDFEvEgQBDBoeJxYgFRIEAQweJisWIBUQQwQBDE0/EDoEAQxRLw8yBAEMSy8SBAIBSSQBDE1EKRQtBAEMHiYrGyAVPQQBDEVERgQBDEFEEgQBDENEEgQBDBoeJxsgFRIEAQxBRDIEAQxQLxIEAgE9HgEMRT4yBAEMUC8yBAEMQz4yBAEMGh4nFSAVOQQBDB4mKxUgFT0EAQxNPjIEAQxQLzoEAQxKLzIEAgFAHwEMRU43OB8GECRNBAEMGh8oHygVOCRJBAEMQU4QRgQBDDtOEEYEAQxNTjc4EhMGAUASEwYBECRNBAEMQ04QRgQBDB4mKx4nFVAnERMGEEoEAQxBTjkEAgFIIwEMHicsJywVD0MbJhsmFk0EAQwfGyAmKxUPRE5ABAEMGxcgJisVRgQBDBkVICYrFRIEAQwaFiAmKxUSBAEMGh4nJisVEgQBDBkVICYrFQ89BAEMFhIgJisVEgQCAS1wYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3R5cGVzLmRhcnRKc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9lcnJvcl9kZWxlZ2F0aW9uX2xpc3RlbmVyLmRhcnSC2i8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBUb2tlbjsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcgc2hvdyBNZXNzYWdlOwoKaW1wb3J0ICdsaXN0ZW5lci5kYXJ0JyBzaG93IExpc3RlbmVyOwoKLy8vIEEgbGlzdGVuZXIgd2hpY2ggZm9yd2FyZHMgZXJyb3IgcmVwb3J0cyB0byBhbm90aGVyIGxpc3RlbmVyIGJ1dCBpZ25vcmVzCi8vLyBhbGwgb3RoZXIgZXZlbnRzLgpjbGFzcyBFcnJvckRlbGVnYXRpb25MaXN0ZW5lciBleHRlbmRzIExpc3RlbmVyIHsKICBMaXN0ZW5lciBkZWxlZ2F0ZTsKCiAgRXJyb3JEZWxlZ2F0aW9uTGlzdGVuZXIodGhpcy5kZWxlZ2F0ZSk7CgogIHZvaWQgaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBUb2tlbiBzdGFydFRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgcmV0dXJuIGRlbGVnYXRlLmhhbmRsZVJlY292ZXJhYmxlRXJyb3IobWVzc2FnZSwgc3RhcnRUb2tlbiwgZW5kVG9rZW4pOwogIH0KfQoYAE5OPAEuASsBJgFMFjEVASoBHztLBAIBQXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvZXJyb3JfZGVsZWdhdGlvbl9saXN0ZW5lci5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9pZ25vcmVkX3BhcnNlcl9lcnJvcnMuZGFydIKKLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEuaWdub3JlZF9wYXJzZXJfZXJyb3JzOwoKaW1wb3J0ICdmYXN0YV9jb2Rlcy5kYXJ0JyBzaG93IENvZGUsIGNvZGVOb25QYXJ0T2ZEaXJlY3RpdmVJblBhcnQ7CgppbXBvcnQgJ3BhcnNlci5kYXJ0JyBzaG93IG9wdGlvbmFsOwoKaW1wb3J0ICdzY2FubmVyLmRhcnQnIHNob3cgVG9rZW47Cgpib29sIGlzSWdub3JlZFBhcnNlckVycm9yKENvZGU8T2JqZWN0PiBjb2RlLCBUb2tlbiB0b2tlbikgewogIGlmIChjb2RlID09IGNvZGVOb25QYXJ0T2ZEaXJlY3RpdmVJblBhcnQpIHsKICAgIC8vIElnbm9yZWQuIFRoaXMgZXJyb3IgaXMgaGFuZGxlZCBpbiB0aGUgb3V0bGluZSBwaGFzZSAocGFydCByZXNvbHV0aW9uKS4KICAgIHJldHVybiBvcHRpb25hbCgicGFydCIsIHRva2VuKTsKICB9IGVsc2UgewogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoWAE5OPAElAUMBJAEiATwuTiQLEgQCATZwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvaWdub3JlZF9wYXJzZXJfZXJyb3JzLmRhcnRCc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9kaXJlY3RpdmVfY29udGV4dC5kYXJ0jMQvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9mYXN0YV9jb2Rlcy5kYXJ0JzsKaW1wb3J0ICdwYXJzZXIuZGFydCc7CmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JzsKCmNsYXNzIERpcmVjdGl2ZUNvbnRleHQgewogIERpcmVjdGl2ZVN0YXRlIHN0YXRlID0gRGlyZWN0aXZlU3RhdGUuVW5rbm93bjsKCiAgdm9pZCBjaGVja1NjcmlwdFRhZyhQYXJzZXIgcGFyc2VyLCBUb2tlbiB0b2tlbikgewogICAgaWYgKHN0YXRlID09IERpcmVjdGl2ZVN0YXRlLlVua25vd24pIHsKICAgICAgc3RhdGUgPSBEaXJlY3RpdmVTdGF0ZS5TY3JpcHQ7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFRoZSBzY2FubmVyIG9ubHkgcHJvZHVjZXMgdGhlIFNDUklQVF9UQUcKICAgIC8vIHdoZW4gaXQgaXMgdGhlIGZpcnN0IHRva2VuIGluIHRoZSBmaWxlLgogICAgdGhyb3cgIkludGVybmFsIGVycm9yOiBVbmV4cGVjdGVkIHNjcmlwdCB0YWcuIjsKICB9CgogIHZvaWQgY2hlY2tEZWNsYXJhdGlvbigpIHsKICAgIGlmIChzdGF0ZSAhPSBEaXJlY3RpdmVTdGF0ZS5QYXJ0T2YpIHsKICAgICAgc3RhdGUgPSBEaXJlY3RpdmVTdGF0ZS5EZWNsYXJhdGlvbnM7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrRXhwb3J0KFBhcnNlciBwYXJzZXIsIFRva2VuIHRva2VuKSB7CiAgICBpZiAoc3RhdGUuaW5kZXggPD0gRGlyZWN0aXZlU3RhdGUuSW1wb3J0QW5kRXhwb3J0LmluZGV4KSB7CiAgICAgIHN0YXRlID0gRGlyZWN0aXZlU3RhdGUuSW1wb3J0QW5kRXhwb3J0OwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBSZWNvdmVyeQogICAgaWYgKHN0YXRlID09IERpcmVjdGl2ZVN0YXRlLlBhcnQpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIG1lc3NhZ2VFeHBvcnRBZnRlclBhcnQpOwogICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBEaXJlY3RpdmVTdGF0ZS5QYXJ0T2YpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIG1lc3NhZ2VOb25QYXJ0T2ZEaXJlY3RpdmVJblBhcnQpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIG1lc3NhZ2VEaXJlY3RpdmVBZnRlckRlY2xhcmF0aW9uKTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tJbXBvcnQoUGFyc2VyIHBhcnNlciwgVG9rZW4gdG9rZW4pIHsKICAgIGlmIChzdGF0ZS5pbmRleCA8PSBEaXJlY3RpdmVTdGF0ZS5JbXBvcnRBbmRFeHBvcnQuaW5kZXgpIHsKICAgICAgc3RhdGUgPSBEaXJlY3RpdmVTdGF0ZS5JbXBvcnRBbmRFeHBvcnQ7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoc3RhdGUgPT0gRGlyZWN0aXZlU3RhdGUuUGFydCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgbWVzc2FnZUltcG9ydEFmdGVyUGFydCk7CiAgICB9IGVsc2UgaWYgKHN0YXRlID09IERpcmVjdGl2ZVN0YXRlLlBhcnRPZikgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgbWVzc2FnZU5vblBhcnRPZkRpcmVjdGl2ZUluUGFydCk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgbWVzc2FnZURpcmVjdGl2ZUFmdGVyRGVjbGFyYXRpb24pOwogICAgfQogIH0KCiAgdm9pZCBjaGVja0xpYnJhcnkoUGFyc2VyIHBhcnNlciwgVG9rZW4gdG9rZW4pIHsKICAgIGlmIChzdGF0ZS5pbmRleCA8IERpcmVjdGl2ZVN0YXRlLkxpYnJhcnkuaW5kZXgpIHsKICAgICAgc3RhdGUgPSBEaXJlY3RpdmVTdGF0ZS5MaWJyYXJ5OwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBSZWNvdmVyeQogICAgaWYgKHN0YXRlID09IERpcmVjdGl2ZVN0YXRlLkxpYnJhcnkpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIG1lc3NhZ2VNdWx0aXBsZUxpYnJhcnlEaXJlY3RpdmVzKTsKICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gRGlyZWN0aXZlU3RhdGUuUGFydE9mKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBtZXNzYWdlTm9uUGFydE9mRGlyZWN0aXZlSW5QYXJ0KTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBtZXNzYWdlTGlicmFyeURpcmVjdGl2ZU5vdEZpcnN0KTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tQYXJ0KFBhcnNlciBwYXJzZXIsIFRva2VuIHRva2VuKSB7CiAgICBpZiAoc3RhdGUuaW5kZXggPD0gRGlyZWN0aXZlU3RhdGUuUGFydC5pbmRleCkgewogICAgICBzdGF0ZSA9IERpcmVjdGl2ZVN0YXRlLlBhcnQ7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoc3RhdGUgPT0gRGlyZWN0aXZlU3RhdGUuUGFydE9mKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBtZXNzYWdlTm9uUGFydE9mRGlyZWN0aXZlSW5QYXJ0KTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLCBtZXNzYWdlRGlyZWN0aXZlQWZ0ZXJEZWNsYXJhdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrUGFydE9mKFBhcnNlciBwYXJzZXIsIFRva2VuIHRva2VuKSB7CiAgICBpZiAoc3RhdGUgPT0gRGlyZWN0aXZlU3RhdGUuVW5rbm93bikgewogICAgICBzdGF0ZSA9IERpcmVjdGl2ZVN0YXRlLlBhcnRPZjsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChzdGF0ZSA9PSBEaXJlY3RpdmVTdGF0ZS5QYXJ0T2YpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IodG9rZW4sIG1lc3NhZ2VQYXJ0T2ZUd2ljZSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcih0b2tlbiwgbWVzc2FnZU5vblBhcnRPZkRpcmVjdGl2ZUluUGFydCk7CiAgICB9CiAgfQp9CgplbnVtIERpcmVjdGl2ZVN0YXRlIHsKICBVbmtub3duLAogIFNjcmlwdCwKICBMaWJyYXJ5LAogIEltcG9ydEFuZEV4cG9ydCwKICBQYXJ0LAogIFBhcnRPZiwKICBEZWNsYXJhdGlvbnMsCn0KbgBOTjwBHhYjARkxATQrJQ4GMC80BAEcKisGBAExPy4OBhAoRDFNDU4GBAExPy4OBhAoRDFNDU4GBAEyNiYOBhArTjFNDU0GBAEvNCMOBhAqTQ1OBgQBMSslDgYQKkANTQYEAgEWCwoLEwgKEAIBOXBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvZGlyZWN0aXZlX2NvbnRleHQuZGFydERzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL2ZvcndhcmRpbmdfbGlzdGVuZXIuZGFydMAAkM4vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9tZXNzYWdlcy5kYXJ0JzsKaW1wb3J0ICcuLi9wYXJzZXIuZGFydCc7CmltcG9ydCAnLi4vc2Nhbm5lci5kYXJ0JzsKCmNsYXNzIEZvcndhcmRpbmdMaXN0ZW5lciBpbXBsZW1lbnRzIExpc3RlbmVyIHsKICBMaXN0ZW5lciBsaXN0ZW5lcjsKICBib29sIGZvcndhcmRFcnJvcnMgPSB0cnVlOwoKICBGb3J3YXJkaW5nTGlzdGVuZXIoW3RoaXMubGlzdGVuZXJdKTsKCiAgQG92ZXJyaWRlCiAgc2V0IHN1cHByZXNzUGFyc2VFcnJvcnMoYm9vbCB2YWx1ZSkgewogICAgbGlzdGVuZXI/LnN1cHByZXNzUGFyc2VFcnJvcnMgPSB2YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIFVyaSBnZXQgdXJpID0+IGxpc3RlbmVyPy51cmk7CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Bcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkFyZ3VtZW50cyh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQXNzZXJ0KFRva2VuIGFzc2VydEtleXdvcmQsIEFzc2VydCBraW5kKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Bc3NlcnQoYXNzZXJ0S2V5d29yZCwga2luZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQXdhaXRFeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Bd2FpdEV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkJpbmFyeUV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkJpbmFyeUV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkJsb2NrKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5CbG9jayh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQmxvY2tGdW5jdGlvbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkJsb2NrRnVuY3Rpb25Cb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5DYXNjYWRlKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5DYXNjYWRlKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5DYXNlRXhwcmVzc2lvbihUb2tlbiBjYXNlS2V5d29yZCkgewogICAgbGlzdGVuZXI/LmJlZ2luQ2FzZUV4cHJlc3Npb24oY2FzZUtleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNhdGNoQ2xhdXNlKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5DYXRjaENsYXVzZSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2xhc3NEZWNsYXJhdGlvbihUb2tlbiBiZWdpbiwgVG9rZW4gYWJzdHJhY3RUb2tlbiwgVG9rZW4gbmFtZSkgewogICAgbGlzdGVuZXI/LmJlZ2luQ2xhc3NEZWNsYXJhdGlvbihiZWdpbiwgYWJzdHJhY3RUb2tlbiwgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ2xhc3NPck1peGluQm9keShDbGFzc0tpbmQga2luZCwgVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkNsYXNzT3JNaXhpbkJvZHkoa2luZCwgdG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNsYXNzT3JOYW1lZE1peGluQXBwbGljYXRpb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkNsYXNzT3JOYW1lZE1peGluQXBwbGljYXRpb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNvbWJpbmF0b3JzKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Db21iaW5hdG9ycyh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ29tcGlsYXRpb25Vbml0KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Db21waWxhdGlvblVuaXQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNvbmRpdGlvbmFsRXhwcmVzc2lvbihUb2tlbiBxdWVzdGlvbikgewogICAgbGlzdGVuZXI/LmJlZ2luQ29uZGl0aW9uYWxFeHByZXNzaW9uKHF1ZXN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Db25kaXRpb25hbFVyaShUb2tlbiBpZktleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkNvbmRpdGlvbmFsVXJpKGlmS2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luQ29uZGl0aW9uYWxVcmlzKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Db25kaXRpb25hbFVyaXModG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNvbnN0RXhwcmVzc2lvbihUb2tlbiBjb25zdEtleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkNvbnN0RXhwcmVzc2lvbihjb25zdEtleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkNvbnN0TGl0ZXJhbChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luQ29uc3RMaXRlcmFsKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Db25zdHJ1Y3RvclJlZmVyZW5jZShUb2tlbiBzdGFydCkgewogICAgbGlzdGVuZXI/LmJlZ2luQ29uc3RydWN0b3JSZWZlcmVuY2Uoc3RhcnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkRvV2hpbGVTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkRvV2hpbGVTdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkRvV2hpbGVTdGF0ZW1lbnRCb2R5KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Eb1doaWxlU3RhdGVtZW50Qm9keSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRWxzZVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luRWxzZVN0YXRlbWVudCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRW51bShUb2tlbiBlbnVtS2V5d29yZCkgewogICAgbGlzdGVuZXI/LmJlZ2luRW51bShlbnVtS2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRXhwb3J0KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5FeHBvcnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkV4dGVuc2lvbkRlY2xhcmF0aW9uKFRva2VuIGV4dGVuc2lvbktleXdvcmQsIFRva2VuIG5hbWUpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkV4dGVuc2lvbkRlY2xhcmF0aW9uKGV4dGVuc2lvbktleXdvcmQsIG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZhY3RvcnlNZXRob2QoCiAgICAgIFRva2VuIGxhc3RDb25zdW1lZCwgVG9rZW4gZXh0ZXJuYWxUb2tlbiwgVG9rZW4gY29uc3RUb2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luRmFjdG9yeU1ldGhvZChsYXN0Q29uc3VtZWQsIGV4dGVybmFsVG9rZW4sIGNvbnN0VG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZpZWxkSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZpZWxkSW5pdGlhbGl6ZXIodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvckNvbnRyb2xGbG93KFRva2VuIGF3YWl0VG9rZW4sIFRva2VuIGZvclRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Gb3JDb250cm9sRmxvdyhhd2FpdFRva2VuLCBmb3JUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRm9ySW5Cb2R5KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Gb3JJbkJvZHkodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvckluRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luRm9ySW5FeHByZXNzaW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JtYWxQYXJhbWV0ZXIoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCwgVG9rZW4gcmVxdWlyZWRUb2tlbiwKICAgICAgVG9rZW4gY292YXJpYW50VG9rZW4sIFRva2VuIHZhckZpbmFsT3JDb25zdCkgewogICAgbGlzdGVuZXI/LmJlZ2luRm9ybWFsUGFyYW1ldGVyKAogICAgICAgIHRva2VuLCBraW5kLCByZXF1aXJlZFRva2VuLCBjb3ZhcmlhbnRUb2tlbiwgdmFyRmluYWxPckNvbnN0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Gb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uKCkgewogICAgbGlzdGVuZXI/LmJlZ2luRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvcm1hbFBhcmFtZXRlcnMoVG9rZW4gdG9rZW4sIE1lbWJlcktpbmQga2luZCkgewogICAgbGlzdGVuZXI/LmJlZ2luRm9ybWFsUGFyYW1ldGVycyh0b2tlbiwga2luZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRm9yU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Gb3JTdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZvclN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZvclN0YXRlbWVudEJvZHkodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luRnVuY3Rpb25FeHByZXNzaW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GdW5jdGlvbk5hbWUoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZ1bmN0aW9uTmFtZSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luRnVuY3Rpb25UeXBlKFRva2VuIGJlZ2luVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZ1bmN0aW9uVHlwZShiZWdpblRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5GdW5jdGlvblR5cGVBbGlhcyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luRnVuY3Rpb25UeXBlQWxpYXModG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkhpZGUoVG9rZW4gaGlkZUtleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkhpZGUoaGlkZUtleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbklmQ29udHJvbEZsb3coVG9rZW4gaWZUb2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luSWZDb250cm9sRmxvdyhpZlRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5JZlN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luSWZTdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5JbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luSW1wb3J0KFRva2VuIGltcG9ydEtleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkltcG9ydChpbXBvcnRLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Jbml0aWFsaXplZElkZW50aWZpZXIoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkluaXRpYWxpemVkSWRlbnRpZmllcih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkluaXRpYWxpemVyKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Jbml0aWFsaXplcnMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpbkluaXRpYWxpemVycyh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTGFiZWxlZFN0YXRlbWVudChUb2tlbiB0b2tlbiwgaW50IGxhYmVsQ291bnQpIHsKICAgIGxpc3RlbmVyPy5iZWdpbkxhYmVsZWRTdGF0ZW1lbnQodG9rZW4sIGxhYmVsQ291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbkxpYnJhcnlOYW1lKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5MaWJyYXJ5TmFtZSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTGl0ZXJhbFN0cmluZyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luTGl0ZXJhbFN0cmluZyh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTGl0ZXJhbFN5bWJvbChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luTGl0ZXJhbFN5bWJvbCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Mb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk1lbWJlcigpIHsKICAgIGxpc3RlbmVyPy5iZWdpbk1lbWJlcigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk1ldGFkYXRhKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5NZXRhZGF0YSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTWV0YWRhdGFTdGFyKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5NZXRhZGF0YVN0YXIodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk1ldGhvZChUb2tlbiBleHRlcm5hbFRva2VuLCBUb2tlbiBzdGF0aWNUb2tlbiwgVG9rZW4gY292YXJpYW50VG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwgVG9rZW4gZ2V0T3JTZXQsIFRva2VuIG5hbWUpIHsKICAgIGxpc3RlbmVyPy5iZWdpbk1ldGhvZChleHRlcm5hbFRva2VuLCBzdGF0aWNUb2tlbiwgY292YXJpYW50VG9rZW4sCiAgICAgICAgdmFyRmluYWxPckNvbnN0LCBnZXRPclNldCwgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTWl4aW5EZWNsYXJhdGlvbihUb2tlbiBtaXhpbktleXdvcmQsIFRva2VuIG5hbWUpIHsKICAgIGxpc3RlbmVyPy5iZWdpbk1peGluRGVjbGFyYXRpb24obWl4aW5LZXl3b3JkLCBuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5OYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luTmFtZWRGdW5jdGlvbkV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbk5hbWVkTWl4aW5BcHBsaWNhdGlvbigKICAgICAgVG9rZW4gYmVnaW4sIFRva2VuIGFic3RyYWN0VG9rZW4sIFRva2VuIG5hbWUpIHsKICAgIGxpc3RlbmVyPy5iZWdpbk5hbWVkTWl4aW5BcHBsaWNhdGlvbihiZWdpbiwgYWJzdHJhY3RUb2tlbiwgbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luTmV3RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luTmV3RXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luT3B0aW9uYWxGb3JtYWxQYXJhbWV0ZXJzKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5PcHRpb25hbEZvcm1hbFBhcmFtZXRlcnModG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblBhcnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblBhcnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblBhcnRPZihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luUGFydE9mKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5SZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5SZWRpcmVjdGluZ0ZhY3RvcnlCb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5SZXRocm93U3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5SZXRocm93U3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5SZXR1cm5TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblJldHVyblN0YXRlbWVudCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luU2hvdyhUb2tlbiBzaG93S2V5d29yZCkgewogICAgbGlzdGVuZXI/LmJlZ2luU2hvdyhzaG93S2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luU3dpdGNoQmxvY2soVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblN3aXRjaEJsb2NrKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Td2l0Y2hDYXNlKGludCBsYWJlbENvdW50LCBpbnQgZXhwcmVzc2lvbkNvdW50LCBUb2tlbiBmaXJzdFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Td2l0Y2hDYXNlKGxhYmVsQ291bnQsIGV4cHJlc3Npb25Db3VudCwgZmlyc3RUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luU3dpdGNoU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5Td2l0Y2hTdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblRoZW5Db250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luVGhlbkNvbnRyb2xGbG93KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5UaGVuU3RhdGVtZW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uYmVnaW5UaGVuU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5Ub3BMZXZlbE1lbWJlcihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luVG9wTGV2ZWxNZW1iZXIodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpblRvcExldmVsTWV0aG9kKFRva2VuIGxhc3RDb25zdW1lZCwgVG9rZW4gZXh0ZXJuYWxUb2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luVG9wTGV2ZWxNZXRob2QobGFzdENvbnN1bWVkLCBleHRlcm5hbFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5UcnlTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblRyeVN0YXRlbWVudCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luVHlwZUFyZ3VtZW50cyh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVHlwZUxpc3QoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblR5cGVMaXN0KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5UeXBlVmFyaWFibGUoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5iZWdpblR5cGVWYXJpYWJsZSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVHlwZVZhcmlhYmxlcyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luVHlwZVZhcmlhYmxlcyh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVmFyaWFibGVJbml0aWFsaXplcihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luVmFyaWFibGVJbml0aWFsaXplcih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGJlZ2luVmFyaWFibGVzRGVjbGFyYXRpb24oCiAgICAgIFRva2VuIHRva2VuLCBUb2tlbiBsYXRlVG9rZW4sIFRva2VuIHZhckZpbmFsT3JDb25zdCkgewogICAgbGlzdGVuZXI/LmJlZ2luVmFyaWFibGVzRGVjbGFyYXRpb24odG9rZW4sIGxhdGVUb2tlbiwgdmFyRmluYWxPckNvbnN0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5XaGlsZVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luV2hpbGVTdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBiZWdpbldoaWxlU3RhdGVtZW50Qm9keShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luV2hpbGVTdGF0ZW1lbnRCb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgYmVnaW5ZaWVsZFN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmJlZ2luWWllbGRTdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkaXNjYXJkVHlwZVJlcGxhY2VkV2l0aENvbW1lbnRUeXBlQXNzaWduKCkgewogICAgbGlzdGVuZXI/LmRpc2NhcmRUeXBlUmVwbGFjZWRXaXRoQ29tbWVudFR5cGVBc3NpZ24oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQXJndW1lbnRzKGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRBcmd1bWVudHMoY291bnQsIGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQXNzZXJ0KFRva2VuIGFzc2VydEtleXdvcmQsIEFzc2VydCBraW5kLCBUb2tlbiBsZWZ0UGFyZW50aGVzaXMsCiAgICAgIFRva2VuIGNvbW1hVG9rZW4sIFRva2VuIHNlbWljb2xvblRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kQXNzZXJ0KAogICAgICAgIGFzc2VydEtleXdvcmQsIGtpbmQsIGxlZnRQYXJlbnRoZXNpcywgY29tbWFUb2tlbiwgc2VtaWNvbG9uVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRBd2FpdEV4cHJlc3Npb24oVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRBd2FpdEV4cHJlc3Npb24oYmVnaW5Ub2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJbnZhbGlkQXdhaXRFeHByZXNzaW9uKAogICAgICBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbiwgTWVzc2FnZUNvZGUgZXJyb3JDb2RlKSB7CiAgICBsaXN0ZW5lcj8uZW5kSW52YWxpZEF3YWl0RXhwcmVzc2lvbihiZWdpblRva2VuLCBlbmRUb2tlbiwgZXJyb3JDb2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQmluYXJ5RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZEJpbmFyeUV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRCbG9jayhpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kQmxvY2soY291bnQsIGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQmxvY2tGdW5jdGlvbkJvZHkoaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZEJsb2NrRnVuY3Rpb25Cb2R5KGNvdW50LCBiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENhc2NhZGUoKSB7CiAgICBsaXN0ZW5lcj8uZW5kQ2FzY2FkZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDYXNlRXhwcmVzc2lvbihUb2tlbiBjb2xvbikgewogICAgbGlzdGVuZXI/LmVuZENhc2VFeHByZXNzaW9uKGNvbG9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2F0Y2hDbGF1c2UoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRDYXRjaENsYXVzZSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENsYXNzRGVjbGFyYXRpb24oVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRDbGFzc0RlY2xhcmF0aW9uKGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ2xhc3NPck1peGluQm9keSgKICAgICAgQ2xhc3NLaW5kIGtpbmQsIGludCBtZW1iZXJDb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRDbGFzc09yTWl4aW5Cb2R5KGtpbmQsIG1lbWJlckNvdW50LCBiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbWJpbmF0b3JzKGludCBjb3VudCkgewogICAgbGlzdGVuZXI/LmVuZENvbWJpbmF0b3JzKGNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29tcGlsYXRpb25Vbml0KGludCBjb3VudCwgVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRDb21waWxhdGlvblVuaXQoY291bnQsIHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kQ29uZGl0aW9uYWxFeHByZXNzaW9uKFRva2VuIHF1ZXN0aW9uLCBUb2tlbiBjb2xvbikgewogICAgbGlzdGVuZXI/LmVuZENvbmRpdGlvbmFsRXhwcmVzc2lvbihxdWVzdGlvbiwgY29sb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25kaXRpb25hbFVyaShUb2tlbiBpZktleXdvcmQsIFRva2VuIGxlZnRQYXJlbiwgVG9rZW4gZXF1YWxTaWduKSB7CiAgICBsaXN0ZW5lcj8uZW5kQ29uZGl0aW9uYWxVcmkoaWZLZXl3b3JkLCBsZWZ0UGFyZW4sIGVxdWFsU2lnbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZENvbmRpdGlvbmFsVXJpcyhpbnQgY291bnQpIHsKICAgIGxpc3RlbmVyPy5lbmRDb25kaXRpb25hbFVyaXMoY291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25zdEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRDb25zdEV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25zdExpdGVyYWwoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRDb25zdExpdGVyYWwodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRDb25zdHJ1Y3RvclJlZmVyZW5jZSgKICAgICAgVG9rZW4gc3RhcnQsIFRva2VuIHBlcmlvZEJlZm9yZU5hbWUsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kQ29uc3RydWN0b3JSZWZlcmVuY2Uoc3RhcnQsIHBlcmlvZEJlZm9yZU5hbWUsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRG9XaGlsZVN0YXRlbWVudCgKICAgICAgVG9rZW4gZG9LZXl3b3JkLCBUb2tlbiB3aGlsZUtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRG9XaGlsZVN0YXRlbWVudChkb0tleXdvcmQsIHdoaWxlS2V5d29yZCwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmREb1doaWxlU3RhdGVtZW50Qm9keShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZERvV2hpbGVTdGF0ZW1lbnRCb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRWxzZVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZEVsc2VTdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRFbnVtKFRva2VuIGVudW1LZXl3b3JkLCBUb2tlbiBsZWZ0QnJhY2UsIGludCBjb3VudCkgewogICAgbGlzdGVuZXI/LmVuZEVudW0oZW51bUtleXdvcmQsIGxlZnRCcmFjZSwgY291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRFeHBvcnQoVG9rZW4gZXhwb3J0S2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBsaXN0ZW5lcj8uZW5kRXhwb3J0KGV4cG9ydEtleXdvcmQsIHNlbWljb2xvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEV4dGVuc2lvbkRlY2xhcmF0aW9uKAogICAgICBUb2tlbiBleHRlbnNpb25LZXl3b3JkLCBUb2tlbiBvbktleXdvcmQsIFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRXh0ZW5zaW9uRGVjbGFyYXRpb24oZXh0ZW5zaW9uS2V5d29yZCwgb25LZXl3b3JkLCB0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZhY3RvcnlNZXRob2QoCiAgICAgIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGZhY3RvcnlLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZEZhY3RvcnlNZXRob2QoYmVnaW5Ub2tlbiwgZmFjdG9yeUtleXdvcmQsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRmllbGRJbml0aWFsaXplcihUb2tlbiBhc3NpZ25tZW50LCBUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZEZpZWxkSW5pdGlhbGl6ZXIoYXNzaWdubWVudCwgdG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGaWVsZHMoVG9rZW4gc3RhdGljVG9rZW4sIFRva2VuIGNvdmFyaWFudFRva2VuLCBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwgaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZEZpZWxkcyhzdGF0aWNUb2tlbiwgY292YXJpYW50VG9rZW4sIGxhdGVUb2tlbiwgdmFyRmluYWxPckNvbnN0LAogICAgICAgIGNvdW50LCBiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvckNvbnRyb2xGbG93KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRm9yQ29udHJvbEZsb3codG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JJbihUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZEZvckluKGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ySW5Cb2R5KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRm9ySW5Cb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRm9ySW5Db250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZEZvckluQ29udHJvbEZsb3codG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JJbkV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRGb3JJbkV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JtYWxQYXJhbWV0ZXIoCiAgICAgIFRva2VuIHRoaXNLZXl3b3JkLAogICAgICBUb2tlbiBwZXJpb2RBZnRlclRoaXMsCiAgICAgIFRva2VuIG5hbWVUb2tlbiwKICAgICAgVG9rZW4gaW5pdGlhbGl6ZXJTdGFydCwKICAgICAgVG9rZW4gaW5pdGlhbGl6ZXJFbmQsCiAgICAgIEZvcm1hbFBhcmFtZXRlcktpbmQga2luZCwKICAgICAgTWVtYmVyS2luZCBtZW1iZXJLaW5kKSB7CiAgICBsaXN0ZW5lcj8uZW5kRm9ybWFsUGFyYW1ldGVyKHRoaXNLZXl3b3JkLCBwZXJpb2RBZnRlclRoaXMsIG5hbWVUb2tlbiwKICAgICAgICBpbml0aWFsaXplclN0YXJ0LCBpbml0aWFsaXplckVuZCwga2luZCwgbWVtYmVyS2luZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb24oKSB7CiAgICBsaXN0ZW5lcj8uZW5kRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGb3JtYWxQYXJhbWV0ZXJzKAogICAgICBpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuLCBNZW1iZXJLaW5kIGtpbmQpIHsKICAgIGxpc3RlbmVyPy5lbmRGb3JtYWxQYXJhbWV0ZXJzKGNvdW50LCBiZWdpblRva2VuLCBlbmRUb2tlbiwga2luZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvclN0YXRlbWVudChUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZEZvclN0YXRlbWVudChlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZvclN0YXRlbWVudEJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRGb3JTdGF0ZW1lbnRCb2R5KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25FeHByZXNzaW9uKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRnVuY3Rpb25FeHByZXNzaW9uKGJlZ2luVG9rZW4sIHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25OYW1lKFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kRnVuY3Rpb25OYW1lKGJlZ2luVG9rZW4sIHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kRnVuY3Rpb25UeXBlKFRva2VuIGZ1bmN0aW9uVG9rZW4sIFRva2VuIHF1ZXN0aW9uTWFyaykgewogICAgbGlzdGVuZXI/LmVuZEZ1bmN0aW9uVHlwZShmdW5jdGlvblRva2VuLCBxdWVzdGlvbk1hcmspOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRGdW5jdGlvblR5cGVBbGlhcygKICAgICAgVG9rZW4gdHlwZWRlZktleXdvcmQsIFRva2VuIGVxdWFscywgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRGdW5jdGlvblR5cGVBbGlhcyh0eXBlZGVmS2V5d29yZCwgZXF1YWxzLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIoVG9rZW4gbmFtZVRva2VuLCBUb2tlbiBxdWVzdGlvbikgewogICAgbGlzdGVuZXI/LmVuZEZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXIobmFtZVRva2VuLCBxdWVzdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEhpZGUoVG9rZW4gaGlkZUtleXdvcmQpIHsKICAgIGxpc3RlbmVyPy5lbmRIaWRlKGhpZGVLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSWZDb250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZElmQ29udHJvbEZsb3codG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJZkVsc2VDb250cm9sRmxvdyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZElmRWxzZUNvbnRyb2xGbG93KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSWZTdGF0ZW1lbnQoVG9rZW4gaWZUb2tlbiwgVG9rZW4gZWxzZVRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kSWZTdGF0ZW1lbnQoaWZUb2tlbiwgZWxzZVRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW1wbGljaXRDcmVhdGlvbkV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRJbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZEltcG9ydChUb2tlbiBpbXBvcnRLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxpc3RlbmVyPy5lbmRJbXBvcnQoaW1wb3J0S2V5d29yZCwgc2VtaWNvbG9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW5pdGlhbGl6ZWRJZGVudGlmaWVyKFRva2VuIG5hbWVUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZEluaXRpYWxpemVkSWRlbnRpZmllcihuYW1lVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRJbml0aWFsaXplcihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZEluaXRpYWxpemVyKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kSW5pdGlhbGl6ZXJzKGludCBjb3VudCwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRJbml0aWFsaXplcnMoY291bnQsIGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTGFiZWxlZFN0YXRlbWVudChpbnQgbGFiZWxDb3VudCkgewogICAgbGlzdGVuZXI/LmVuZExhYmVsZWRTdGF0ZW1lbnQobGFiZWxDb3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZExpYnJhcnlOYW1lKFRva2VuIGxpYnJhcnlLZXl3b3JkLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxpc3RlbmVyPy5lbmRMaWJyYXJ5TmFtZShsaWJyYXJ5S2V5d29yZCwgc2VtaWNvbG9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTGl0ZXJhbFN0cmluZyhpbnQgaW50ZXJwb2xhdGlvbkNvdW50LCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZExpdGVyYWxTdHJpbmcoaW50ZXJwb2xhdGlvbkNvdW50LCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZExpdGVyYWxTeW1ib2woVG9rZW4gaGFzaFRva2VuLCBpbnQgaWRlbnRpZmllckNvdW50KSB7CiAgICBsaXN0ZW5lcj8uZW5kTGl0ZXJhbFN5bWJvbChoYXNoVG9rZW4sIGlkZW50aWZpZXJDb3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbihUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbihlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE1lbWJlcigpIHsKICAgIGxpc3RlbmVyPy5lbmRNZW1iZXIoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWV0YWRhdGEoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gcGVyaW9kQmVmb3JlTmFtZSwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRNZXRhZGF0YShiZWdpblRva2VuLCBwZXJpb2RCZWZvcmVOYW1lLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE1ldGFkYXRhU3RhcihpbnQgY291bnQpIHsKICAgIGxpc3RlbmVyPy5lbmRNZXRhZGF0YVN0YXIoY291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRNZXRob2QoVG9rZW4gZ2V0T3JTZXQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGJlZ2luUGFyYW0sCiAgICAgIFRva2VuIGJlZ2luSW5pdGlhbGl6ZXJzLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZE1ldGhvZCgKICAgICAgICBnZXRPclNldCwgYmVnaW5Ub2tlbiwgYmVnaW5QYXJhbSwgYmVnaW5Jbml0aWFsaXplcnMsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTWl4aW5EZWNsYXJhdGlvbihUb2tlbiBtaXhpbktleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kTWl4aW5EZWNsYXJhdGlvbihtaXhpbktleXdvcmQsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kTmFtZWRGdW5jdGlvbkV4cHJlc3Npb24oVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmROYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbihlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE5hbWVkTWl4aW5BcHBsaWNhdGlvbihUb2tlbiBiZWdpbiwgVG9rZW4gY2xhc3NLZXl3b3JkLCBUb2tlbiBlcXVhbHMsCiAgICAgIFRva2VuIGltcGxlbWVudHNLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZE5hbWVkTWl4aW5BcHBsaWNhdGlvbigKICAgICAgICBiZWdpbiwgY2xhc3NLZXl3b3JkLCBlcXVhbHMsIGltcGxlbWVudHNLZXl3b3JkLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZE5ld0V4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmROZXdFeHByZXNzaW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kT3B0aW9uYWxGb3JtYWxQYXJhbWV0ZXJzKAogICAgICBpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kT3B0aW9uYWxGb3JtYWxQYXJhbWV0ZXJzKGNvdW50LCBiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFBhcnQoVG9rZW4gcGFydEtleXdvcmQsIFRva2VuIHNlbWljb2xvbikgewogICAgbGlzdGVuZXI/LmVuZFBhcnQocGFydEtleXdvcmQsIHNlbWljb2xvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFBhcnRPZigKICAgICAgVG9rZW4gcGFydEtleXdvcmQsIFRva2VuIG9mS2V5d29yZCwgVG9rZW4gc2VtaWNvbG9uLCBib29sIGhhc05hbWUpIHsKICAgIGxpc3RlbmVyPy5lbmRQYXJ0T2YocGFydEtleXdvcmQsIG9mS2V5d29yZCwgc2VtaWNvbG9uLCBoYXNOYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kUmVkaXJlY3RpbmdGYWN0b3J5Qm9keShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZFJlZGlyZWN0aW5nRmFjdG9yeUJvZHkoYmVnaW5Ub2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRSZXRocm93U3RhdGVtZW50KFRva2VuIHJldGhyb3dUb2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRSZXRocm93U3RhdGVtZW50KHJldGhyb3dUb2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRSZXR1cm5TdGF0ZW1lbnQoCiAgICAgIGJvb2wgaGFzRXhwcmVzc2lvbiwgVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRSZXR1cm5TdGF0ZW1lbnQoaGFzRXhwcmVzc2lvbiwgYmVnaW5Ub2tlbiwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRTaG93KFRva2VuIHNob3dLZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uZW5kU2hvdyhzaG93S2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFN3aXRjaEJsb2NrKGludCBjYXNlQ291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kU3dpdGNoQmxvY2soY2FzZUNvdW50LCBiZWdpblRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFN3aXRjaENhc2UoCiAgICAgIGludCBsYWJlbENvdW50LAogICAgICBpbnQgZXhwcmVzc2lvbkNvdW50LAogICAgICBUb2tlbiBkZWZhdWx0S2V5d29yZCwKICAgICAgVG9rZW4gY29sb25BZnRlckRlZmF1bHQsCiAgICAgIGludCBzdGF0ZW1lbnRDb3VudCwKICAgICAgVG9rZW4gZmlyc3RUb2tlbiwKICAgICAgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRTd2l0Y2hDYXNlKGxhYmVsQ291bnQsIGV4cHJlc3Npb25Db3VudCwgZGVmYXVsdEtleXdvcmQsCiAgICAgICAgY29sb25BZnRlckRlZmF1bHQsIHN0YXRlbWVudENvdW50LCBmaXJzdFRva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFN3aXRjaFN0YXRlbWVudChUb2tlbiBzd2l0Y2hLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZFN3aXRjaFN0YXRlbWVudChzd2l0Y2hLZXl3b3JkLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFRoZW5TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRUaGVuU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVG9wTGV2ZWxEZWNsYXJhdGlvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZFRvcExldmVsRGVjbGFyYXRpb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUb3BMZXZlbEZpZWxkcygKICAgICAgVG9rZW4gc3RhdGljVG9rZW4sCiAgICAgIFRva2VuIGNvdmFyaWFudFRva2VuLAogICAgICBUb2tlbiBsYXRlVG9rZW4sCiAgICAgIFRva2VuIHZhckZpbmFsT3JDb25zdCwKICAgICAgaW50IGNvdW50LAogICAgICBUb2tlbiBiZWdpblRva2VuLAogICAgICBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZFRvcExldmVsRmllbGRzKHN0YXRpY1Rva2VuLCBjb3ZhcmlhbnRUb2tlbiwgbGF0ZVRva2VuLAogICAgICAgIHZhckZpbmFsT3JDb25zdCwgY291bnQsIGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVG9wTGV2ZWxNZXRob2QoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZ2V0T3JTZXQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kVG9wTGV2ZWxNZXRob2QoYmVnaW5Ub2tlbiwgZ2V0T3JTZXQsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVHJ5U3RhdGVtZW50KGludCBjYXRjaENvdW50LCBUb2tlbiB0cnlLZXl3b3JkLCBUb2tlbiBmaW5hbGx5S2V5d29yZCkgewogICAgbGlzdGVuZXI/LmVuZFRyeVN0YXRlbWVudChjYXRjaENvdW50LCB0cnlLZXl3b3JkLCBmaW5hbGx5S2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFR5cGVBcmd1bWVudHMoaW50IGNvdW50LCBUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmVuZFR5cGVBcmd1bWVudHMoY291bnQsIGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVHlwZUxpc3QoaW50IGNvdW50KSB7CiAgICBsaXN0ZW5lcj8uZW5kVHlwZUxpc3QoY291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRUeXBlVmFyaWFibGUoVG9rZW4gdG9rZW4sIGludCBpbmRleCwgVG9rZW4gZXh0ZW5kc09yU3VwZXIpIHsKICAgIGxpc3RlbmVyPy5lbmRUeXBlVmFyaWFibGUodG9rZW4sIGluZGV4LCBleHRlbmRzT3JTdXBlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFR5cGVWYXJpYWJsZXMoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRUeXBlVmFyaWFibGVzKGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZW5kVmFyaWFibGVJbml0aWFsaXplcihUb2tlbiBhc3NpZ25tZW50T3BlcmF0b3IpIHsKICAgIGxpc3RlbmVyPy5lbmRWYXJpYWJsZUluaXRpYWxpemVyKGFzc2lnbm1lbnRPcGVyYXRvcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFZhcmlhYmxlc0RlY2xhcmF0aW9uKGludCBjb3VudCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRWYXJpYWJsZXNEZWNsYXJhdGlvbihjb3VudCwgZW5kVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBlbmRXaGlsZVN0YXRlbWVudChUb2tlbiB3aGlsZUtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uZW5kV2hpbGVTdGF0ZW1lbnQod2hpbGVLZXl3b3JkLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFdoaWxlU3RhdGVtZW50Qm9keShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmVuZFdoaWxlU3RhdGVtZW50Qm9keSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuZFlpZWxkU3RhdGVtZW50KFRva2VuIHlpZWxkVG9rZW4sIFRva2VuIHN0YXJUb2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5lbmRZaWVsZFN0YXRlbWVudCh5aWVsZFRva2VuLCBzdGFyVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQXNPcGVyYXRvcihUb2tlbiBvcGVyYXRvcikgewogICAgbGlzdGVuZXI/LmhhbmRsZUFzT3BlcmF0b3Iob3BlcmF0b3IpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVBc3NpZ25tZW50RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUFzc2lnbm1lbnRFeHByZXNzaW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQXN5bmNNb2RpZmllcihUb2tlbiBhc3luY1Rva2VuLCBUb2tlbiBzdGFyVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVBc3luY01vZGlmaWVyKGFzeW5jVG9rZW4sIHN0YXJUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUJyZWFrU3RhdGVtZW50KAogICAgICBib29sIGhhc1RhcmdldCwgVG9rZW4gYnJlYWtLZXl3b3JkLCBUb2tlbiBlbmRUb2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUJyZWFrU3RhdGVtZW50KGhhc1RhcmdldCwgYnJlYWtLZXl3b3JkLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNhc2VNYXRjaChUb2tlbiBjYXNlS2V5d29yZCwgVG9rZW4gY29sb24pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVDYXNlTWF0Y2goY2FzZUtleXdvcmQsIGNvbG9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2F0Y2hCbG9jayhUb2tlbiBvbktleXdvcmQsIFRva2VuIGNhdGNoS2V5d29yZCwgVG9rZW4gY29tbWEpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVDYXRjaEJsb2NrKG9uS2V5d29yZCwgY2F0Y2hLZXl3b3JkLCBjb21tYSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzRXh0ZW5kcyhUb2tlbiBleHRlbmRzS2V5d29yZCkgewogICAgbGlzdGVuZXI/LmhhbmRsZUNsYXNzRXh0ZW5kcyhleHRlbmRzS2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzSGVhZGVyKFRva2VuIGJlZ2luLCBUb2tlbiBjbGFzc0tleXdvcmQsIFRva2VuIG5hdGl2ZVRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlQ2xhc3NIZWFkZXIoYmVnaW4sIGNsYXNzS2V5d29yZCwgbmF0aXZlVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDbGFzc05vV2l0aENsYXVzZSgpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVDbGFzc05vV2l0aENsYXVzZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDbGFzc09yTWl4aW5JbXBsZW1lbnRzKAogICAgICBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZCwgaW50IGludGVyZmFjZXNDb3VudCkgewogICAgbGlzdGVuZXI/LmhhbmRsZUNsYXNzT3JNaXhpbkltcGxlbWVudHMoaW1wbGVtZW50c0tleXdvcmQsIGludGVyZmFjZXNDb3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNsYXNzV2l0aENsYXVzZShUb2tlbiB3aXRoS2V5d29yZCkgewogICAgbGlzdGVuZXI/LmhhbmRsZUNsYXNzV2l0aENsYXVzZSh3aXRoS2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUNvbW1lbnRSZWZlcmVuY2UoCiAgICAgIFRva2VuIG5ld0tleXdvcmQsIFRva2VuIHByZWZpeCwgVG9rZW4gcGVyaW9kLCBUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUNvbW1lbnRSZWZlcmVuY2UobmV3S2V5d29yZCwgcHJlZml4LCBwZXJpb2QsIHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ29tbWVudFJlZmVyZW5jZVRleHQoU3RyaW5nIHJlZmVyZW5jZVNvdXJjZSwgaW50IHJlZmVyZW5jZU9mZnNldCkgewogICAgbGlzdGVuZXI/LmhhbmRsZUNvbW1lbnRSZWZlcmVuY2VUZXh0KHJlZmVyZW5jZVNvdXJjZSwgcmVmZXJlbmNlT2Zmc2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ29uZGl0aW9uYWxFeHByZXNzaW9uQ29sb24oKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlQ29uZGl0aW9uYWxFeHByZXNzaW9uQ29sb24oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ29udGludWVTdGF0ZW1lbnQoCiAgICAgIGJvb2wgaGFzVGFyZ2V0LCBUb2tlbiBjb250aW51ZUtleXdvcmQsIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlQ29udGludWVTdGF0ZW1lbnQoaGFzVGFyZ2V0LCBjb250aW51ZUtleXdvcmQsIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRGlyZWN0aXZlc09ubHkoKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRGlyZWN0aXZlc09ubHkoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRG90dGVkTmFtZShpbnQgY291bnQsIFRva2VuIGZpcnN0SWRlbnRpZmllcikgewogICAgbGlzdGVuZXI/LmhhbmRsZURvdHRlZE5hbWUoY291bnQsIGZpcnN0SWRlbnRpZmllcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUVsc2VDb250cm9sRmxvdyhUb2tlbiBlbHNlVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVFbHNlQ29udHJvbEZsb3coZWxzZVRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRW1wdHlGdW5jdGlvbkJvZHkoVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRW1wdHlGdW5jdGlvbkJvZHkoc2VtaWNvbG9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRW1wdHlTdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVFbXB0eVN0YXRlbWVudCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUVycm9yVG9rZW4oRXJyb3JUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUVycm9yVG9rZW4odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVFeHByZXNzaW9uRnVuY3Rpb25Cb2R5KFRva2VuIGFycm93VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRXhwcmVzc2lvbkZ1bmN0aW9uQm9keShhcnJvd1Rva2VuLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUV4cHJlc3Npb25TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVFeHByZXNzaW9uU3RhdGVtZW50KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRXh0cmFuZW91c0V4cHJlc3Npb24oVG9rZW4gdG9rZW4sIE1lc3NhZ2UgbWVzc2FnZSkgewogICAgbGlzdGVuZXI/LmhhbmRsZUV4dHJhbmVvdXNFeHByZXNzaW9uKHRva2VuLCBtZXNzYWdlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRmluYWxseUJsb2NrKFRva2VuIGZpbmFsbHlLZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRmluYWxseUJsb2NrKGZpbmFsbHlLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRm9ySW5pdGlhbGl6ZXJFbXB0eVN0YXRlbWVudChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUZvckluaXRpYWxpemVyRW1wdHlTdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGb3JJbml0aWFsaXplckV4cHJlc3Npb25TdGF0ZW1lbnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVGb3JJbml0aWFsaXplckV4cHJlc3Npb25TdGF0ZW1lbnQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVGb3JJbml0aWFsaXplckxvY2FsVmFyaWFibGVEZWNsYXJhdGlvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUZvckluaXRpYWxpemVyTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRm9ySW5Mb29wUGFydHMoVG9rZW4gYXdhaXRUb2tlbiwgVG9rZW4gZm9yVG9rZW4sCiAgICAgIFRva2VuIGxlZnRQYXJlbnRoZXNpcywgVG9rZW4gaW5LZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlRm9ySW5Mb29wUGFydHMoCiAgICAgICAgYXdhaXRUb2tlbiwgZm9yVG9rZW4sIGxlZnRQYXJlbnRoZXNpcywgaW5LZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlRm9yTG9vcFBhcnRzKFRva2VuIGZvcktleXdvcmQsIFRva2VuIGxlZnRQYXJlbiwKICAgICAgVG9rZW4gbGVmdFNlcGFyYXRvciwgaW50IHVwZGF0ZUV4cHJlc3Npb25Db3VudCkgewogICAgbGlzdGVuZXI/LmhhbmRsZUZvckxvb3BQYXJ0cygKICAgICAgICBmb3JLZXl3b3JkLCBsZWZ0UGFyZW4sIGxlZnRTZXBhcmF0b3IsIHVwZGF0ZUV4cHJlc3Npb25Db3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZvcm1hbFBhcmFtZXRlcldpdGhvdXRWYWx1ZShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUZvcm1hbFBhcmFtZXRlcldpdGhvdXRWYWx1ZSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUZ1bmN0aW9uQm9keVNraXBwZWQoVG9rZW4gdG9rZW4sIGJvb2wgaXNFeHByZXNzaW9uQm9keSkgewogICAgbGlzdGVuZXI/LmhhbmRsZUZ1bmN0aW9uQm9keVNraXBwZWQodG9rZW4sIGlzRXhwcmVzc2lvbkJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlSWRlbnRpZmllcih0b2tlbiwgY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUlkZW50aWZpZXJMaXN0KGludCBjb3VudCkgewogICAgbGlzdGVuZXI/LmhhbmRsZUlkZW50aWZpZXJMaXN0KGNvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW1wb3J0UHJlZml4KFRva2VuIGRlZmVycmVkS2V5d29yZCwgVG9rZW4gYXNLZXl3b3JkKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlSW1wb3J0UHJlZml4KGRlZmVycmVkS2V5d29yZCwgYXNLZXl3b3JkKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW5kZXhlZEV4cHJlc3Npb24oCiAgICAgIFRva2VuIG9wZW5TcXVhcmVCcmFja2V0LCBUb2tlbiBjbG9zZVNxdWFyZUJyYWNrZXQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVJbmRleGVkRXhwcmVzc2lvbihvcGVuU3F1YXJlQnJhY2tldCwgY2xvc2VTcXVhcmVCcmFja2V0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW50ZXJwb2xhdGlvbkV4cHJlc3Npb24oVG9rZW4gbGVmdEJyYWNrZXQsIFRva2VuIHJpZ2h0QnJhY2tldCkgewogICAgbGlzdGVuZXI/LmhhbmRsZUludGVycG9sYXRpb25FeHByZXNzaW9uKGxlZnRCcmFja2V0LCByaWdodEJyYWNrZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnZhbGlkRXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUludmFsaWRFeHByZXNzaW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZEZ1bmN0aW9uQm9keShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUludmFsaWRGdW5jdGlvbkJvZHkodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnZhbGlkTWVtYmVyKFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlSW52YWxpZE1lbWJlcihlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRPcGVyYXRvck5hbWUoVG9rZW4gb3BlcmF0b3JLZXl3b3JkLCBUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUludmFsaWRPcGVyYXRvck5hbWUob3BlcmF0b3JLZXl3b3JkLCB0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRTdGF0ZW1lbnQoVG9rZW4gdG9rZW4sIE1lc3NhZ2UgbWVzc2FnZSkgewogICAgbGlzdGVuZXI/LmhhbmRsZUludmFsaWRTdGF0ZW1lbnQodG9rZW4sIG1lc3NhZ2UpOwogIH0KCiAgdm9pZCBoYW5kbGVJbnZhbGlkVG9wTGV2ZWxCbG9jayhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUludmFsaWRUb3BMZXZlbEJsb2NrKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb24oVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVJbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbihlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUludmFsaWRUeXBlQXJndW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlSW52YWxpZFR5cGVBcmd1bWVudHModG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVJbnZhbGlkVHlwZVJlZmVyZW5jZShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUludmFsaWRUeXBlUmVmZXJlbmNlKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlSXNPcGVyYXRvcihUb2tlbiBpc09wZXJhdG9yLCBUb2tlbiBub3QpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVJc09wZXJhdG9yKGlzT3BlcmF0b3IsIG5vdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxhYmVsKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTGFiZWwodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMaXRlcmFsQm9vbChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUxpdGVyYWxCb29sKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTGl0ZXJhbERvdWJsZShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZUxpdGVyYWxEb3VibGUodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVMaXRlcmFsSW50KFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTGl0ZXJhbEludCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxpdGVyYWxMaXN0KAogICAgICBpbnQgY291bnQsIFRva2VuIGJlZ2luVG9rZW4sIFRva2VuIGNvbnN0S2V5d29yZCwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVMaXRlcmFsTGlzdChjb3VudCwgYmVnaW5Ub2tlbiwgY29uc3RLZXl3b3JkLCBlbmRUb2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxpdGVyYWxNYXBFbnRyeShUb2tlbiBjb2xvbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVMaXRlcmFsTWFwRW50cnkoY29sb24sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTGl0ZXJhbE51bGwoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVMaXRlcmFsTnVsbCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZUxpdGVyYWxTZXRPck1hcCgKICAgIGludCBjb3VudCwKICAgIFRva2VuIGxlZnRCcmFjZSwKICAgIFRva2VuIGNvbnN0S2V5d29yZCwKICAgIFRva2VuIHJpZ2h0QnJhY2UsCiAgICAvLyBUT0RPKGRhbnJ1YmVsKTogaGFzU2V0RW50cnkgcGFyYW1ldGVyIGV4aXN0cyBmb3IgcmVwbGljYXRpbmcgZXhpc3RpbmcKICAgIC8vIGJlaGF2aW9yIGFuZCB3aWxsIGJlIHJlbW92ZWQgb25jZSB1bmlmaWVkIGNvbGxlY3Rpb24gaGFzIGJlZW4gZW5hYmxlZAogICAgYm9vbCBoYXNTZXRFbnRyeSwKICApIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVMaXRlcmFsU2V0T3JNYXAoCiAgICAgICAgY291bnQsIGxlZnRCcmFjZSwgY29uc3RLZXl3b3JkLCByaWdodEJyYWNlLCBoYXNTZXRFbnRyeSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU1peGluSGVhZGVyKFRva2VuIG1peGluS2V5d29yZCkgewogICAgbGlzdGVuZXI/LmhhbmRsZU1peGluSGVhZGVyKG1peGluS2V5d29yZCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU1peGluT24oVG9rZW4gb25LZXl3b3JkLCBpbnQgdHlwZUNvdW50KSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTWl4aW5PbihvbktleXdvcmQsIHR5cGVDb3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hbWVkQXJndW1lbnQoVG9rZW4gY29sb24pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOYW1lZEFyZ3VtZW50KGNvbG9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTmFtZWRNaXhpbkFwcGxpY2F0aW9uV2l0aENsYXVzZShUb2tlbiB3aXRoS2V5d29yZCkgewogICAgbGlzdGVuZXI/LmhhbmRsZU5hbWVkTWl4aW5BcHBsaWNhdGlvbldpdGhDbGF1c2Uod2l0aEtleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYXRpdmVDbGF1c2UoVG9rZW4gbmF0aXZlVG9rZW4sIGJvb2wgaGFzTmFtZSkgewogICAgbGlzdGVuZXI/LmhhbmRsZU5hdGl2ZUNsYXVzZShuYXRpdmVUb2tlbiwgaGFzTmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5hdGl2ZUZ1bmN0aW9uQm9keShUb2tlbiBuYXRpdmVUb2tlbiwgVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5KG5hdGl2ZVRva2VuLCBzZW1pY29sb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlJZ25vcmVkKFRva2VuIG5hdGl2ZVRva2VuLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlJZ25vcmVkKG5hdGl2ZVRva2VuLCBzZW1pY29sb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlTa2lwcGVkKFRva2VuIG5hdGl2ZVRva2VuLCBUb2tlbiBzZW1pY29sb24pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlTa2lwcGVkKG5hdGl2ZVRva2VuLCBzZW1pY29sb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0FyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZU5vQXJndW1lbnRzKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9Db21tZW50UmVmZXJlbmNlKCkgewogICAgbGlzdGVuZXI/LmhhbmRsZU5vQ29tbWVudFJlZmVyZW5jZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb0NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzKFRva2VuIHRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTm9Db25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cyh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vRmllbGRJbml0aWFsaXplcihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZU5vRmllbGRJbml0aWFsaXplcih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vRm9ybWFsUGFyYW1ldGVycyhUb2tlbiB0b2tlbiwgTWVtYmVyS2luZCBraW5kKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlTm9Gb3JtYWxQYXJhbWV0ZXJzKHRva2VuLCBraW5kKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9GdW5jdGlvbkJvZHkoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOb0Z1bmN0aW9uQm9keSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vSW5pdGlhbGl6ZXJzKCkgewogICAgbGlzdGVuZXI/LmhhbmRsZU5vSW5pdGlhbGl6ZXJzKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vTmFtZShUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZU5vTmFtZSh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZU5vbk51bGxBc3NlcnRFeHByZXNzaW9uKFRva2VuIGJhbmcpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOb25OdWxsQXNzZXJ0RXhwcmVzc2lvbihiYW5nKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTm9UeXBlKFRva2VuIGxhc3RDb25zdW1lZCkgewogICAgbGlzdGVuZXI/LmhhbmRsZU5vVHlwZShsYXN0Q29uc3VtZWQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb1R5cGVBcmd1bWVudHMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOb1R5cGVBcmd1bWVudHModG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb1R5cGVWYXJpYWJsZXMoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOb1R5cGVWYXJpYWJsZXModG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVOb1ZhcmlhYmxlSW5pdGlhbGl6ZXIoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVOb1ZhcmlhYmxlSW5pdGlhbGl6ZXIodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVPcGVyYXRvcihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZU9wZXJhdG9yKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlT3BlcmF0b3JOYW1lKFRva2VuIG9wZXJhdG9yS2V5d29yZCwgVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVPcGVyYXRvck5hbWUob3BlcmF0b3JLZXl3b3JkLCB0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVBhcmVudGhlc2l6ZWRDb25kaXRpb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVQYXJlbnRoZXNpemVkQ29uZGl0aW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUGFyZW50aGVzaXplZEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVQYXJlbnRoZXNpemVkRXhwcmVzc2lvbih0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVF1YWxpZmllZChUb2tlbiBwZXJpb2QpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVRdWFsaWZpZWQocGVyaW9kKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlUmVjb3ZlcmFibGVFcnJvcigKICAgICAgTWVzc2FnZSBtZXNzYWdlLCBUb2tlbiBzdGFydFRva2VuLCBUb2tlbiBlbmRUb2tlbikgewogICAgaWYgKGZvcndhcmRFcnJvcnMpIHsKICAgICAgbGlzdGVuZXI/LmhhbmRsZVJlY292ZXJhYmxlRXJyb3IobWVzc2FnZSwgc3RhcnRUb2tlbiwgZW5kVG9rZW4pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVSZWNvdmVyQ2xhc3NIZWFkZXIoKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlUmVjb3ZlckNsYXNzSGVhZGVyKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVJlY292ZXJJbXBvcnQoVG9rZW4gc2VtaWNvbG9uKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlUmVjb3ZlckltcG9ydChzZW1pY29sb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVSZWNvdmVyTWl4aW5IZWFkZXIoKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlUmVjb3Zlck1peGluSGVhZGVyKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVNjcmlwdChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZVNjcmlwdCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVNlbmQoVG9rZW4gYmVnaW5Ub2tlbiwgVG9rZW4gZW5kVG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVTZW5kKGJlZ2luVG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3ByZWFkRXhwcmVzc2lvbihUb2tlbiBzcHJlYWRUb2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZVNwcmVhZEV4cHJlc3Npb24oc3ByZWFkVG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVTdHJpbmdKdXh0YXBvc2l0aW9uKGludCBsaXRlcmFsQ291bnQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVTdHJpbmdKdXh0YXBvc2l0aW9uKGxpdGVyYWxDb3VudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVN0cmluZ1BhcnQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVTdHJpbmdQYXJ0KHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3VwZXJFeHByZXNzaW9uKFRva2VuIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dCBjb250ZXh0KSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlU3VwZXJFeHByZXNzaW9uKHRva2VuLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlU3ltYm9sVm9pZChUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZVN5bWJvbFZvaWQodG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVUaGlzRXhwcmVzc2lvbihUb2tlbiB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQgY29udGV4dCkgewogICAgbGlzdGVuZXI/LmhhbmRsZVRoaXNFeHByZXNzaW9uKHRva2VuLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVGhyb3dFeHByZXNzaW9uKFRva2VuIHRocm93VG9rZW4sIFRva2VuIGVuZFRva2VuKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlVGhyb3dFeHByZXNzaW9uKHRocm93VG9rZW4sIGVuZFRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVHlwZShUb2tlbiBiZWdpblRva2VuLCBUb2tlbiBxdWVzdGlvbk1hcmspIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVUeXBlKGJlZ2luVG9rZW4sIHF1ZXN0aW9uTWFyayk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGhhbmRsZVR5cGVWYXJpYWJsZXNEZWZpbmVkKFRva2VuIHRva2VuLCBpbnQgY291bnQpIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVUeXBlVmFyaWFibGVzRGVmaW5lZCh0b2tlbiwgY291bnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVVbmFyeVBvc3RmaXhBc3NpZ25tZW50RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZVVuYXJ5UG9zdGZpeEFzc2lnbm1lbnRFeHByZXNzaW9uKHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVW5hcnlQcmVmaXhBc3NpZ25tZW50RXhwcmVzc2lvbihUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZVVuYXJ5UHJlZml4QXNzaWdubWVudEV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVVbmFyeVByZWZpeEV4cHJlc3Npb24oVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVVbmFyeVByZWZpeEV4cHJlc3Npb24odG9rZW4pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVVbmVzY2FwZUVycm9yKAogICAgICBNZXNzYWdlIG1lc3NhZ2UsIFRva2VuIGxvY2F0aW9uLCBpbnQgb2Zmc2V0LCBpbnQgbGVuZ3RoKSB7CiAgICBsaXN0ZW5lcj8uaGFuZGxlVW5lc2NhcGVFcnJvcihtZXNzYWdlLCBsb2NhdGlvbiwgb2Zmc2V0LCBsZW5ndGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVWYWx1ZWRGb3JtYWxQYXJhbWV0ZXIoVG9rZW4gZXF1YWxzLCBUb2tlbiB0b2tlbikgewogICAgbGlzdGVuZXI/LmhhbmRsZVZhbHVlZEZvcm1hbFBhcmFtZXRlcihlcXVhbHMsIHRva2VuKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlVm9pZEtleXdvcmQoVG9rZW4gdG9rZW4pIHsKICAgIGxpc3RlbmVyPy5oYW5kbGVWb2lkS2V5d29yZCh0b2tlbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGxvZ0V2ZW50KFN0cmluZyBuYW1lKSB7CiAgICBsaXN0ZW5lcj8ubG9nRXZlbnQobmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydEVycm9ySWZOdWxsYWJsZVR5cGUoVG9rZW4gcXVlc3Rpb25NYXJrKSB7CiAgICBsaXN0ZW5lcj8ucmVwb3J0RXJyb3JJZk51bGxhYmxlVHlwZShxdWVzdGlvbk1hcmspOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZXBvcnROb25OdWxsYWJsZU1vZGlmaWVyRXJyb3Io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cnRDc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9saXRlcmFsX2VudHJ5X2luZm8uZGFydIscLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9zY2FubmVyLmRhcnQnOwppbXBvcnQgJ2lkZW50aWZpZXJfY29udGV4dC5kYXJ0JzsKaW1wb3J0ICdsaXRlcmFsX2VudHJ5X2luZm9faW1wbC5kYXJ0JzsKaW1wb3J0ICdwYXJzZXIuZGFydCc7CmltcG9ydCAndXRpbC5kYXJ0JzsKCi8vLyBbc2ltcGxlRW50cnldIGlzIHRoZSBmaXJzdCBzdGVwIGZvciBwYXJzaW5nIGEgbGl0ZXJhbCBlbnRyeQovLy8gd2l0aG91dCBhbnkgY29udHJvbCBmbG93IG9yIHNwcmVhZCBjb2xsZWN0aW9uIG9wZXJhdG9yLgpjb25zdCBMaXRlcmFsRW50cnlJbmZvIHNpbXBsZUVudHJ5ID0gY29uc3QgTGl0ZXJhbEVudHJ5SW5mbyh0cnVlLCAwKTsKCi8vLyBbTGl0ZXJhbEVudHJ5SW5mb10gcmVwcmVzZW50cyBzdGVwcyBmb3IgcHJvY2Vzc2luZyBhbiBlbnRyeQovLy8gaW4gYSBsaXRlcmFsIGxpc3QsIG1hcCwgb3Igc2V0LiBUaGVzZSBzdGVwcyB3aWxsIGhhbmRsZSBwYXJzaW5nCi8vLyBib3RoIGNvbnRyb2wgZmxvdyBhbmQgc3ByZWFkYWJsZSBvcGVyYXRvcnMsIGFuZCBpbmRpY2F0ZQovLy8gd2hlbiB0aGUgY2xpZW50IHNob3VsZCBwYXJzZSB0aGUgbGl0ZXJhbCBlbnRyeS4KLy8vCi8vLyBDbGllbnRzIHNob3VsZCBwYXJzZSBhIHNpbmdsZSBlbnRyeSBpbiBhIGxpc3QsIHNldCwgb3IgbWFwIGxpa2UgdGhpczoKLy8vIGBgYAovLy8gICAgTGl0ZXJhbEVudHJ5SW5mbyBpbmZvID0gY29tcHV0ZUxpdGVyYWxFbnRyeSh0b2tlbik7Ci8vLyAgICB3aGlsZSAoaW5mbyAhPSBudWxsKSB7Ci8vLyAgICAgIGlmIChpbmZvLmhhc0VudHJ5KSB7Ci8vLyAgICAgICAgLi4uIHBhcnNlIGV4cHJlc3Npb24gKGA6YCBleHByZXNzaW9uKT8gLi4uCi8vLyAgICAgICAgdG9rZW4gPSBsYXN0Q29uc3VtZWRUb2tlbjsKLy8vICAgICAgfSBlbHNlIHsKLy8vICAgICAgICB0b2tlbiA9IGluZm8ucGFyc2UodG9rZW4sIHBhcnNlcik7Ci8vLyAgICAgIH0KLy8vICAgICAgaW5mbyA9IGluZm8uY29tcHV0ZU5leHQodG9rZW4pOwovLy8gICAgfQovLy8gYGBgCmNsYXNzIExpdGVyYWxFbnRyeUluZm8gewogIC8vLyBgdHJ1ZWAgaWYgYW4gZW50cnkgc2hvdWxkIGJlIHBhcnNlZCBieSB0aGUgY2FsbGVyCiAgLy8vIG9yIGBmYWxzZWAgaWYgdGhpcyBvYmplY3QncyBbcGFyc2VdIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkLgogIGZpbmFsIGJvb2wgaGFzRW50cnk7CgogIC8vLyBVc2VkIGZvciByZWNvdmVyeSwgdGhpcyBpbmRpY2F0ZXMKICAvLy8gKzEgZm9yIGFuIGBpZmAgY29uZGl0aW9uIGFuZCAtMSBmb3IgYGVsc2VgLgogIGZpbmFsIGludCBpZkNvbmRpdGlvbkRlbHRhOwoKICBjb25zdCBMaXRlcmFsRW50cnlJbmZvKHRoaXMuaGFzRW50cnksIHRoaXMuaWZDb25kaXRpb25EZWx0YSk7CgogIC8vLyBQYXJzZSB0aGUgY29udHJvbCBmbG93IGFuZCBzcHJlYWQgY29sbGVjdGlvbiBhc3BlY3RzIG9mIHRoaXMgZW50cnkuCiAgVG9rZW4gcGFyc2UoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIHRocm93IGhhc0VudHJ5CiAgICAgICAgPyAnSW50ZXJuYWwgRXJyb3I6IHNob3VsZCBub3QgY2FsbCBwYXJzZScKICAgICAgICA6ICdJbnRlcm5hbCBFcnJvcjogJHJ1bnRpbWVUeXBlIHNob3VsZCBpbXBsZW1lbnQgcGFyc2UnOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG5leHQgc3RlcCB3aGVuIHBhcnNpbmcgYW4gZW50cnkgb3IgYG51bGxgIGlmIG5vbmUuCiAgTGl0ZXJhbEVudHJ5SW5mbyBjb21wdXRlTmV4dChUb2tlbiB0b2tlbikgPT4gbnVsbDsKfQoKLy8vIENvbXB1dGUgdGhlIFtMaXRlcmFsRW50cnlJbmZvXSBmb3IgdGhlIGxpdGVyYWwgbGlzdCwgbWFwLCBvciBzZXQgZW50cnkuCkxpdGVyYWxFbnRyeUluZm8gY29tcHV0ZUxpdGVyYWxFbnRyeShUb2tlbiB0b2tlbikgewogIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogIGlmIChvcHRpb25hbCgnaWYnLCBuZXh0KSkgewogICAgcmV0dXJuIGlmQ29uZGl0aW9uOwogIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2ZvcicsIG5leHQpIHx8CiAgICAgIChvcHRpb25hbCgnYXdhaXQnLCBuZXh0KSAmJiBvcHRpb25hbCgnZm9yJywgbmV4dC5uZXh0KSkpIHsKICAgIHJldHVybiBuZXcgRm9yQ29uZGl0aW9uKCk7CiAgfSBlbHNlIGlmIChvcHRpb25hbCgnLi4uJywgbmV4dCkgfHwgb3B0aW9uYWwoJy4uLj8nLCBuZXh0KSkgewogICAgcmV0dXJuIHNwcmVhZE9wZXJhdG9yOwogIH0KICByZXR1cm4gc2ltcGxlRW50cnk7Cn0KCi8vLyBSZXR1cm4gYHRydWVgIGlmIHRoZSBnaXZlbiBbdG9rZW5dIHNob3VsZCBiZSB0cmVhdGVkIGxpa2UgdGhlIHN0YXJ0IG9mCi8vLyBhIGxpdGVyYWwgZW50cnkgaW4gYSBsaXN0LCBzZXQsIG9yIG1hcCBmb3IgdGhlIHB1cnBvc2VzIG9mIHJlY292ZXJ5Lgpib29sIGxvb2tzTGlrZUxpdGVyYWxFbnRyeShUb2tlbiB0b2tlbikgPT4KICAgIGxvb2tzTGlrZUV4cHJlc3Npb25TdGFydCh0b2tlbikgfHwKICAgIG9wdGlvbmFsKCcuLi4nLCB0b2tlbikgfHwKICAgIG9wdGlvbmFsKCcuLi4/JywgdG9rZW4pIHx8CiAgICBvcHRpb25hbCgnaWYnLCB0b2tlbikgfHwKICAgIG9wdGlvbmFsKCdmb3InLCB0b2tlbikgfHwKICAgIChvcHRpb25hbCgnYXdhaXQnLCB0b2tlbikgJiYgb3B0aW9uYWwoJ2ZvcicsIHRva2VuLm5leHQpKTsKTwBNTjwBGiInFhQBQDxGAUBEPTQESgg7Hh42JhIuCykJCBk4QxcBKDIeAUABSiwTMkEEAUU1AgFMNBseGCZBH0AbBBYCAUtJKyceHx0ePwE6cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9saXRlcmFsX2VudHJ5X2luZm8uZGFydDtzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL2xvb3Bfc3RhdGUuZGFydIGFLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZmFzdGEucGFyc2VyLmxvb3Bfc3RhdGU7CgplbnVtIExvb3BTdGF0ZSB7CiAgT3V0c2lkZUxvb3AsCiAgSW5zaWRlU3dpdGNoLCAvLyBgYnJlYWtgIHN0YXRlbWVudCBhbGxvd2VkCiAgSW5zaWRlTG9vcCwgLy8gYGJyZWFrYCBhbmQgYGNvbnRpbnVlYCBzdGF0ZW1lbnRzIGFsbG93ZWQKfQoNAE5OPAEhAREPLTsCATJwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2xvb3Bfc3RhdGUuZGFydEFzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvcGFyc2VyL21vZGlmaWVyX2NvbnRleHQuZGFydLu1Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IEtleXdvcmQsIFRva2VuOwppbXBvcnQgJy4uL21lc3NhZ2VzLmRhcnQnIGFzIGZhc3RhOwppbXBvcnQgJ2Zvcm1hbF9wYXJhbWV0ZXJfa2luZC5kYXJ0JzsKaW1wb3J0ICdtZW1iZXJfa2luZC5kYXJ0JyBzaG93IE1lbWJlcktpbmQ7CmltcG9ydCAncGFyc2VyLmRhcnQnIHNob3cgUGFyc2VyOwppbXBvcnQgJ3V0aWwuZGFydCcgc2hvdyBvcHRpb25hbDsKCmJvb2wgaXNNb2RpZmllcihUb2tlbiB0b2tlbikgewogIGlmICghdG9rZW4uaXNNb2RpZmllcikgewogICAgcmV0dXJuIGZhbHNlOwogIH0gZWxzZSBpZiAodG9rZW4udHlwZS5pc0J1aWx0SW4pIHsKICAgIC8vIEEgYnVpbHQtaW4ga2V5d29yZCBjYW4gb25seSBiZSBhIG1vZGlmaWVyIGFzIGxvbmcgYXMgaXQgaXMKICAgIC8vIGZvbGxvd2VkIGJ5IGFub3RoZXIga2V5d29yZCBvciBhbiBpZGVudGlmaWVyLiBPdGhlcndpc2UsIGl0IGlzIHRoZQogICAgLy8gaWRlbnRpZmllci4KICAgIC8vCiAgICAvLyBGb3IgZXhhbXBsZSwgYGV4dGVybmFsYCBpcyBhIG1vZGlmaWVyIGluIHRoaXMgZGVjbGFyYXRpb246CiAgICAvLyAgIGV4dGVybmFsIEZvbyBmb28oKTsKICAgIC8vIGJ1dCBpcyB0aGUgaWRlbnRpZmllciBpbiB0aGlzIGRlY2xhcmF0aW9uCiAgICAvLyAgIGV4dGVybmFsKCkgPT4gdHJ1ZTsKICAgIC8vIGFuZCBpbgogICAgLy8gICBmb3IgKGZpbmFsIGV4dGVybmFsIGluIGxpc3QpIHsgfQogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBLZXl3b3JkIGtleXdvcmQgPSBuZXh0LmtleXdvcmQ7CiAgICBpZiAoa2V5d29yZCA9PSBudWxsICYmICFuZXh0LmlzSWRlbnRpZmllciB8fCBrZXl3b3JkID09IEtleXdvcmQuSU4pIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICByZXR1cm4gdHJ1ZTsKfQoKLy8vIFRoaXMgY2xhc3MgaXMgdXNlZCB0byBwYXJzZSBtb2RpZmllcnMgaW4gbW9zdCBsb2NhdGlvbnMgd2hlcmUgbW9kaWZpZXJzCi8vLyBjYW4gb2NjdXIsIGJ1dCBkb2VzIG5vdCBjYWxsIGhhbmRsZU1vZGlmaWVyIG9yIGhhbmRsZU1vZGlmaWVycy4KY2xhc3MgTW9kaWZpZXJSZWNvdmVyeUNvbnRleHQgewogIGZpbmFsIFBhcnNlciBwYXJzZXI7CiAgVG9rZW4gYWJzdHJhY3RUb2tlbjsKICBUb2tlbiBjb25zdFRva2VuOwogIFRva2VuIGNvdmFyaWFudFRva2VuOwogIFRva2VuIGV4dGVybmFsVG9rZW47CiAgVG9rZW4gZmluYWxUb2tlbjsKICBUb2tlbiBsYXRlVG9rZW47CiAgVG9rZW4gcmVxdWlyZWRUb2tlbjsKICBUb2tlbiBzdGF0aWNUb2tlbjsKICBUb2tlbiB2YXJUb2tlbjsKCiAgLy8gU2V0IGB0cnVlYCB3aGVuIHBhcnNpbmcgbW9kaWZpZXJzIGFmdGVyIHRoZSBgZmFjdG9yeWAgdG9rZW4uCiAgYm9vbCBhZnRlckZhY3RvcnkgPSBmYWxzZTsKCiAgLy8gVE9ETyhkYW5ydWJlbCk6IFJlcGxhY2UgW01vZGlmaWVyUmVjb3ZlcnlDb250ZXh0XSBhbmQgW01vZGlmaWVyQ29udGV4dF0KICAvLyB3aXRoIHRoaXMgY2xhc3MuCgogIE1vZGlmaWVyUmVjb3ZlcnlDb250ZXh0KHRoaXMucGFyc2VyKTsKCiAgc2V0IHN0YXRpY09yQ292YXJpYW50KFRva2VuIHN0YXRpY09yQ292YXJpYW50KSB7CiAgICBpZiAoc3RhdGljT3JDb3ZhcmlhbnQgPT0gbnVsbCkgewogICAgICBjb3ZhcmlhbnRUb2tlbiA9IG51bGw7CiAgICAgIHN0YXRpY1Rva2VuID0gbnVsbDsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2NvdmFyaWFudCcsIHN0YXRpY09yQ292YXJpYW50KSkgewogICAgICBjb3ZhcmlhbnRUb2tlbiA9IHN0YXRpY09yQ292YXJpYW50OwogICAgICBzdGF0aWNUb2tlbiA9IG51bGw7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdzdGF0aWMnLCBzdGF0aWNPckNvdmFyaWFudCkpIHsKICAgICAgY292YXJpYW50VG9rZW4gPSBudWxsOwogICAgICBzdGF0aWNUb2tlbiA9IHN0YXRpY09yQ292YXJpYW50OwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgIkludGVybmFsIGVycm9yOiAiCiAgICAgICAgICAiVW5leHBlY3RlZCBzdGF0aWNPckNvdmFyaWFudCAnJHN0YXRpY09yQ292YXJpYW50Jy4iOwogICAgfQogIH0KCiAgVG9rZW4gZ2V0IHZhckZpbmFsT3JDb25zdCA9PiB2YXJUb2tlbiA/PyBmaW5hbFRva2VuID8/IGNvbnN0VG9rZW47CgogIHNldCB2YXJGaW5hbE9yQ29uc3QoVG9rZW4gdmFyRmluYWxPckNvbnN0KSB7CiAgICBpZiAodmFyRmluYWxPckNvbnN0ID09IG51bGwpIHsKICAgICAgdmFyVG9rZW4gPSBudWxsOwogICAgICBmaW5hbFRva2VuID0gbnVsbDsKICAgICAgY29uc3RUb2tlbiA9IG51bGw7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCd2YXInLCB2YXJGaW5hbE9yQ29uc3QpKSB7CiAgICAgIHZhclRva2VuID0gdmFyRmluYWxPckNvbnN0OwogICAgICBmaW5hbFRva2VuID0gbnVsbDsKICAgICAgY29uc3RUb2tlbiA9IG51bGw7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdmaW5hbCcsIHZhckZpbmFsT3JDb25zdCkpIHsKICAgICAgdmFyVG9rZW4gPSBudWxsOwogICAgICBmaW5hbFRva2VuID0gdmFyRmluYWxPckNvbnN0OwogICAgICBjb25zdFRva2VuID0gbnVsbDsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2NvbnN0JywgdmFyRmluYWxPckNvbnN0KSkgewogICAgICB2YXJUb2tlbiA9IG51bGw7CiAgICAgIGZpbmFsVG9rZW4gPSBudWxsOwogICAgICBjb25zdFRva2VuID0gdmFyRmluYWxPckNvbnN0OwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgIkludGVybmFsIGVycm9yOiBVbmV4cGVjdGVkIHZhckZpbmFsT3JDb25zdCAnJHZhckZpbmFsT3JDb25zdCcuIjsKICAgIH0KICB9CgogIC8vLyBQYXJzZSBtb2RpZmllcnMgZm9yIGNsYXNzIG1ldGhvZHMgYW5kIGZpZWxkcy4KICBUb2tlbiBwYXJzZUNsYXNzTWVtYmVyTW9kaWZpZXJzKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHBhcnNlTW9kaWZpZXJzKHRva2VuKTsKICAgIGlmIChhYnN0cmFjdFRva2VuICE9IG51bGwpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBhYnN0cmFjdFRva2VuLCBmYXN0YS5tZXNzYWdlQWJzdHJhY3RDbGFzc01lbWJlcik7CiAgICB9CiAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIocmVxdWlyZWRUb2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUGFyc2UgbW9kaWZpZXJzIGZvciBmb3JtYWwgcGFyYW1ldGVycy4KICBUb2tlbiBwYXJzZUZvcm1hbFBhcmFtZXRlck1vZGlmaWVycygKICAgICAgVG9rZW4gdG9rZW4sIEZvcm1hbFBhcmFtZXRlcktpbmQgcGFyYW1ldGVyS2luZCwgTWVtYmVyS2luZCBtZW1iZXJLaW5kKSB7CiAgICB0b2tlbiA9IHBhcnNlTW9kaWZpZXJzKHRva2VuKTsKCiAgICBpZiAocGFyYW1ldGVyS2luZCAhPSBGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsTmFtZWQpIHsKICAgICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKHJlcXVpcmVkVG9rZW4pOwogICAgfQogICAgaWYgKG1lbWJlcktpbmQgPT0gTWVtYmVyS2luZC5TdGF0aWNNZXRob2QgfHwKICAgICAgICBtZW1iZXJLaW5kID09IE1lbWJlcktpbmQuVG9wTGV2ZWxNZXRob2QpIHsKICAgICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKHRoaXMuY292YXJpYW50VG9rZW4pOwogICAgICB0aGlzLmNvdmFyaWFudFRva2VuID0gbnVsbDsKICAgIH0KICAgIGlmIChjb25zdFRva2VuICE9IG51bGwpIHsKICAgICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKGNvbnN0VG9rZW4pOwogICAgfSBlbHNlIGlmIChtZW1iZXJLaW5kID09IE1lbWJlcktpbmQuR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUpIHsKICAgICAgaWYgKHZhckZpbmFsT3JDb25zdCAhPSBudWxsKSB7CiAgICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICAgIHZhckZpbmFsT3JDb25zdCwgZmFzdGEubWVzc2FnZUZ1bmN0aW9uVHlwZWRQYXJhbWV0ZXJWYXIpOwogICAgICB9CiAgICB9CiAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIoYWJzdHJhY3RUb2tlbik7CiAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIoZXh0ZXJuYWxUb2tlbik7CiAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIobGF0ZVRva2VuKTsKICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihzdGF0aWNUb2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICAvLy8gUGFyc2UgbW9kaWZpZXJzIGFmdGVyIHRoZSBgZmFjdG9yeWAgdG9rZW4uCiAgVG9rZW4gcGFyc2VNb2RpZmllcnNBZnRlckZhY3RvcnkoVG9rZW4gdG9rZW4pIHsKICAgIGFmdGVyRmFjdG9yeSA9IHRydWU7CiAgICB0b2tlbiA9IHBhcnNlTW9kaWZpZXJzKHRva2VuKTsKICAgIGlmIChhYnN0cmFjdFRva2VuICE9IG51bGwpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICBhYnN0cmFjdFRva2VuLCBmYXN0YS5tZXNzYWdlQWJzdHJhY3RDbGFzc01lbWJlcik7CiAgICB9CiAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIobGF0ZVRva2VuKTsKICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihyZXF1aXJlZFRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBQYXJzZSBtb2RpZmllcnMgZm9yIHRvcCBsZXZlbCBmdW5jdGlvbnMgYW5kIGZpZWxkcy4KICBUb2tlbiBwYXJzZVRvcExldmVsTW9kaWZpZXJzKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHBhcnNlTW9kaWZpZXJzKHRva2VuKTsKICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihhYnN0cmFjdFRva2VuKTsKICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihjb3ZhcmlhbnRUb2tlbik7CiAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIocmVxdWlyZWRUb2tlbik7CiAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIoc3RhdGljVG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgLy8vIFBhcnNlIG1vZGlmaWVycyBmb3IgdmFyaWFibGUgZGVjbGFyYXRpb25zLgogIFRva2VuIHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbk1vZGlmaWVycyhUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSBwYXJzZU1vZGlmaWVycyh0b2tlbik7CiAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIoYWJzdHJhY3RUb2tlbik7CiAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIoY292YXJpYW50VG9rZW4pOwogICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKGV4dGVybmFsVG9rZW4pOwogICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKHJlcXVpcmVkVG9rZW4pOwogICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKHN0YXRpY1Rva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIC8vLyBQYXJzZSBtb2RpZmllcnMgZHVyaW5nIHJlY292ZXJ5IHdoZW4gbW9kaWZpZXJzIGFyZSBvdXQgb2Ygb3JkZXIKICAvLy8gb3IgaW52YWxpZC4gVHlwaWNhbGx5IGNsaWVudHMgY2FsbCBtZXRob2RzIGxpa2UKICAvLy8gW3BhcnNlQ2xhc3NNZW1iZXJNb2RpZmllcnNdIHdoaWNoIGluIHR1cm4gY2FsbHMgdGhpcyBtZXRob2QsCiAgLy8vIHJhdGhlciB0aGFuIGNhbGxpbmcgdGhpcyBtZXRob2QgZGlyZWN0bHkuCiAgLy8vCiAgLy8vIFRoZSB2YXJpb3VzIG1vZGlmaWVyIHRva2VuIHBhcmFtZXRlcnMgcmVwcmVzZW50IHRva2VucyBvZiBtb2RpZmllcnMKICAvLy8gdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBwYXJzZWQgcHJpb3IgdG8gcmVjb3ZlcnkuIFRoZSBbc3RhdGljT3JDb3ZhcmlhbnRdCiAgLy8vIHBhcmFtZXRlciBpcyBmb3IgY29udmVuaWVuY2UgaWYgY2FsbGVyIGhhcyBhIHRva2VuIHRoYXQgbWF5IGJlIGVpdGhlcgogIC8vLyBgc3RhdGljYCBvciBgY292YXJpYW50YC4gVGhlIGZpcnN0IG5vbi1udWxsIHBhcmFtZXRlciBvZgogIC8vLyBbc3RhdGljT3JDb3ZhcmlhbnRdLCBbc3RhdGljVG9rZW5dLCBvciBbY292YXJpYW50VG9rZW5dIHdpbGwgYmUgdXNlZCwKICAvLy8gaW4gdGhhdCBvcmRlciwgYW5kIHRoZSBvdGhlcnMgaWdub3JlZC4KICBUb2tlbiBwYXJzZU1vZGlmaWVycyhUb2tlbiB0b2tlbikgewogICAgLy8gUHJvY2VzcyBpbnZhbGlkIGFuZCBvdXQtb2Ytb3JkZXIgbW9kaWZpZXJzCiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGZpbmFsIHZhbHVlID0gbmV4dC5zdHJpbmdWYWx1ZTsKICAgICAgaWYgKGlzTW9kaWZpZXIobmV4dCkpIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKCdhYnN0cmFjdCcsIHZhbHVlKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZUFic3RyYWN0KHRva2VuKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgnY29uc3QnLCB2YWx1ZSkpIHsKICAgICAgICAgIHRva2VuID0gcGFyc2VDb25zdCh0b2tlbik7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwoJ2NvdmFyaWFudCcsIHZhbHVlKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZUNvdmFyaWFudCh0b2tlbik7CiAgICAgICAgfSBlbHNlIGlmIChpZGVudGljYWwoJ2V4dGVybmFsJywgdmFsdWUpKSB7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlRXh0ZXJuYWwodG9rZW4pOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCdmaW5hbCcsIHZhbHVlKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZUZpbmFsKHRva2VuKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgnbGF0ZScsIHZhbHVlKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZUxhdGUodG9rZW4pOwogICAgICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKCdyZXF1aXJlZCcsIHZhbHVlKSkgewogICAgICAgICAgdG9rZW4gPSBwYXJzZVJlcXVpcmVkKHRva2VuKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgnc3RhdGljJywgdmFsdWUpKSB7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlU3RhdGljKHRva2VuKTsKICAgICAgICB9IGVsc2UgaWYgKGlkZW50aWNhbCgndmFyJywgdmFsdWUpKSB7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlVmFyKHRva2VuKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgJ0ludGVybmFsIEVycm9yOiBVbmhhbmRsZWQgbW9kaWZpZXI6ICR2YWx1ZSc7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGFmdGVyRmFjdG9yeSAmJiBpZGVudGljYWwoJ2ZhY3RvcnknLCB2YWx1ZSkpIHsKICAgICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVEdXBsaWNhdGVkTW9kaWZpZXIpOwogICAgICAgIHRva2VuID0gbmV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlQWJzdHJhY3QoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdhYnN0cmFjdCcsIG5leHQpKTsKICAgIGlmIChhYnN0cmFjdFRva2VuID09IG51bGwpIHsKICAgICAgYWJzdHJhY3RUb2tlbiA9IG5leHQ7CiAgICAgIHJldHVybiBuZXh0OwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWRNb2RpZmllcik7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIFRva2VuIHBhcnNlQ29uc3QoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdjb25zdCcsIG5leHQpKTsKICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgPT0gbnVsbCAmJiBjb3ZhcmlhbnRUb2tlbiA9PSBudWxsKSB7CiAgICAgIGNvbnN0VG9rZW4gPSBuZXh0OwoKICAgICAgaWYgKGFmdGVyRmFjdG9yeSkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCAnZmFjdG9yeScpOwogICAgICB9IGVsc2UgaWYgKGxhdGVUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0Q29uZmxpY3RpbmdNb2RpZmllcnMobmV4dCwgbGF0ZVRva2VuKTsKICAgICAgfQogICAgICByZXR1cm4gbmV4dDsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGNvbnN0VG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZE1vZGlmaWVyKTsKICAgIH0gZWxzZSBpZiAoY292YXJpYW50VG9rZW4gIT0gbnVsbCkgewogICAgICByZXBvcnRDb25mbGljdGluZ01vZGlmaWVycyhuZXh0LCBjb3ZhcmlhbnRUb2tlbik7CiAgICB9IGVsc2UgaWYgKGZpbmFsVG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlQ29uc3RBbmRGaW5hbCk7CiAgICB9IGVsc2UgaWYgKHZhclRva2VuICE9IG51bGwpIHsKICAgICAgcmVwb3J0Q29uZmxpY3RpbmdNb2RpZmllcnMobmV4dCwgdmFyVG9rZW4pOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgJ0ludGVybmFsIEVycm9yOiBVbmV4cGVjdGVkIHZhckZpbmFsT3JDb25zdDogJHZhckZpbmFsT3JDb25zdCc7CiAgICB9CiAgICByZXR1cm4gbmV4dDsKICB9CgogIFRva2VuIHBhcnNlQ292YXJpYW50KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnY292YXJpYW50JywgbmV4dCkpOwogICAgaWYgKGNvbnN0VG9rZW4gPT0gbnVsbCAmJgogICAgICAgIGNvdmFyaWFudFRva2VuID09IG51bGwgJiYKICAgICAgICBzdGF0aWNUb2tlbiA9PSBudWxsICYmCiAgICAgICAgIWFmdGVyRmFjdG9yeSkgewogICAgICBjb3ZhcmlhbnRUb2tlbiA9IG5leHQ7CgogICAgICBpZiAodmFyVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCB2YXJUb2tlbi5sZXhlbWUpOwogICAgICB9IGVsc2UgaWYgKGZpbmFsVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCBmaW5hbFRva2VuLmxleGVtZSk7CiAgICAgIH0gZWxzZSBpZiAobGF0ZVRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIobmV4dCwgbGF0ZVRva2VuLmxleGVtZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChjb3ZhcmlhbnRUb2tlbiAhPSBudWxsKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVEdXBsaWNhdGVkTW9kaWZpZXIpOwogICAgfSBlbHNlIGlmIChhZnRlckZhY3RvcnkpIHsKICAgICAgcmVwb3J0RXh0cmFuZW91c01vZGlmaWVyKG5leHQpOwogICAgfSBlbHNlIGlmIChjb25zdFRva2VuICE9IG51bGwpIHsKICAgICAgcmVwb3J0Q29uZmxpY3RpbmdNb2RpZmllcnMobmV4dCwgY29uc3RUb2tlbik7CiAgICB9IGVsc2UgaWYgKHN0YXRpY1Rva2VuICE9IG51bGwpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IobmV4dCwgZmFzdGEubWVzc2FnZUNvdmFyaWFudEFuZFN0YXRpYyk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyAnSW50ZXJuYWwgRXJyb3I6IFVuaGFuZGxlZCByZWNvdmVyeTogJG5leHQnOwogICAgfQogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBUb2tlbiBwYXJzZUV4dGVybmFsKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnZXh0ZXJuYWwnLCBuZXh0KSk7CiAgICBpZiAoZXh0ZXJuYWxUb2tlbiA9PSBudWxsKSB7CiAgICAgIGV4dGVybmFsVG9rZW4gPSBuZXh0OwoKICAgICAgaWYgKGFmdGVyRmFjdG9yeSkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCAnZmFjdG9yeScpOwogICAgICB9IGVsc2UgaWYgKGNvbnN0VG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCBjb25zdFRva2VuLmxleGVtZSk7CiAgICAgIH0gZWxzZSBpZiAoc3RhdGljVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCBzdGF0aWNUb2tlbi5sZXhlbWUpOwogICAgICB9IGVsc2UgaWYgKGxhdGVUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0TW9kaWZpZXJPdXRPZk9yZGVyKG5leHQsIGxhdGVUb2tlbi5sZXhlbWUpOwogICAgICB9CiAgICAgIHJldHVybiBuZXh0OwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWRNb2RpZmllcik7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIFRva2VuIHBhcnNlRmluYWwoVG9rZW4gdG9rZW4pIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdmaW5hbCcsIG5leHQpKTsKICAgIGlmICh2YXJGaW5hbE9yQ29uc3QgPT0gbnVsbCAmJiAhYWZ0ZXJGYWN0b3J5KSB7CiAgICAgIGZpbmFsVG9rZW4gPSBuZXh0OwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGZpbmFsVG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZE1vZGlmaWVyKTsKICAgIH0gZWxzZSBpZiAoYWZ0ZXJGYWN0b3J5KSB7CiAgICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihuZXh0KTsKICAgIH0gZWxzZSBpZiAoY29uc3RUb2tlbiAhPSBudWxsKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VDb25zdEFuZEZpbmFsKTsKICAgIH0gZWxzZSBpZiAodmFyVG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlRmluYWxBbmRWYXIpOwogICAgfSBlbHNlIGlmIChsYXRlVG9rZW4gIT0gbnVsbCkgewogICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIobmV4dCwgbGF0ZVRva2VuLmxleGVtZSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyAnSW50ZXJuYWwgRXJyb3I6IFVuZXhwZWN0ZWQgdmFyRmluYWxPckNvbnN0OiAkdmFyRmluYWxPckNvbnN0JzsKICAgIH0KICAgIHJldHVybiBuZXh0OwogIH0KCiAgVG9rZW4gcGFyc2VMYXRlKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnbGF0ZScsIG5leHQpKTsKICAgIGlmIChsYXRlVG9rZW4gPT0gbnVsbCkgewogICAgICBsYXRlVG9rZW4gPSBuZXh0OwoKICAgICAgaWYgKGNvbnN0VG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydENvbmZsaWN0aW5nTW9kaWZpZXJzKG5leHQsIGNvbnN0VG9rZW4pOwogICAgICB9IGVsc2UgaWYgKHZhclRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRDb25mbGljdGluZ01vZGlmaWVycyhuZXh0LCB2YXJUb2tlbik7CiAgICAgIH0gZWxzZSBpZiAoZmluYWxUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0TW9kaWZpZXJPdXRPZk9yZGVyKG5leHQsIGZpbmFsVG9rZW4ubGV4ZW1lKTsKICAgICAgfQogICAgICByZXR1cm4gbmV4dDsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVEdXBsaWNhdGVkTW9kaWZpZXIpOwogICAgcmV0dXJuIG5leHQ7CiAgfQoKICBUb2tlbiBwYXJzZVJlcXVpcmVkKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgncmVxdWlyZWQnLCBuZXh0KSk7CiAgICBpZiAocmVxdWlyZWRUb2tlbiA9PSBudWxsKSB7CiAgICAgIHJlcXVpcmVkVG9rZW4gPSBuZXh0OwoKICAgICAgaWYgKGNvbnN0VG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihyZXF1aXJlZFRva2VuLCBjb25zdFRva2VuLmxleGVtZSk7CiAgICAgIH0gZWxzZSBpZiAoY292YXJpYW50VG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihyZXF1aXJlZFRva2VuLCBjb3ZhcmlhbnRUb2tlbi5sZXhlbWUpOwogICAgICB9IGVsc2UgaWYgKGZpbmFsVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihyZXF1aXJlZFRva2VuLCBmaW5hbFRva2VuLmxleGVtZSk7CiAgICAgIH0gZWxzZSBpZiAodmFyVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihyZXF1aXJlZFRva2VuLCB2YXJUb2tlbi5sZXhlbWUpOwogICAgICB9CiAgICAgIHJldHVybiBuZXh0OwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWRNb2RpZmllcik7CiAgICByZXR1cm4gbmV4dDsKICB9CgogIFRva2VuIHBhcnNlU3RhdGljKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnc3RhdGljJywgbmV4dCkpOwogICAgaWYgKGNvdmFyaWFudFRva2VuID09IG51bGwgJiYgc3RhdGljVG9rZW4gPT0gbnVsbCAmJiAhYWZ0ZXJGYWN0b3J5KSB7CiAgICAgIHN0YXRpY1Rva2VuID0gbmV4dDsKCiAgICAgIGlmIChjb25zdFRva2VuICE9IG51bGwpIHsKICAgICAgICByZXBvcnRNb2RpZmllck91dE9mT3JkZXIobmV4dCwgY29uc3RUb2tlbi5sZXhlbWUpOwogICAgICB9IGVsc2UgaWYgKGZpbmFsVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCBmaW5hbFRva2VuLmxleGVtZSk7CiAgICAgIH0gZWxzZSBpZiAodmFyVG9rZW4gIT0gbnVsbCkgewogICAgICAgIHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcihuZXh0LCB2YXJUb2tlbi5sZXhlbWUpOwogICAgICB9IGVsc2UgaWYgKGxhdGVUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0TW9kaWZpZXJPdXRPZk9yZGVyKG5leHQsIGxhdGVUb2tlbi5sZXhlbWUpOwogICAgICB9CiAgICAgIHJldHVybiBuZXh0OwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoY292YXJpYW50VG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlQ292YXJpYW50QW5kU3RhdGljKTsKICAgIH0gZWxzZSBpZiAoc3RhdGljVG9rZW4gIT0gbnVsbCkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRHVwbGljYXRlZE1vZGlmaWVyKTsKICAgIH0gZWxzZSBpZiAoYWZ0ZXJGYWN0b3J5KSB7CiAgICAgIHJlcG9ydEV4dHJhbmVvdXNNb2RpZmllcihuZXh0KTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93ICdJbnRlcm5hbCBFcnJvcjogVW5oYW5kbGVkIHJlY292ZXJ5OiAkbmV4dCc7CiAgICB9CiAgICByZXR1cm4gbmV4dDsKICB9CgogIFRva2VuIHBhcnNlVmFyKFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgndmFyJywgbmV4dCkpOwogICAgaWYgKHZhckZpbmFsT3JDb25zdCA9PSBudWxsICYmICFhZnRlckZhY3RvcnkpIHsKICAgICAgdmFyVG9rZW4gPSBuZXh0OwoKICAgICAgaWYgKGxhdGVUb2tlbiAhPSBudWxsKSB7CiAgICAgICAgcmVwb3J0Q29uZmxpY3RpbmdNb2RpZmllcnMobmV4dCwgbGF0ZVRva2VuKTsKICAgICAgfQogICAgICByZXR1cm4gbmV4dDsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKHZhclRva2VuICE9IG51bGwpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBuZXh0LCBmYXN0YS50ZW1wbGF0ZUR1cGxpY2F0ZWRNb2RpZmllcik7CiAgICB9IGVsc2UgaWYgKGFmdGVyRmFjdG9yeSkgewogICAgICByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIobmV4dCk7CiAgICB9IGVsc2UgaWYgKGNvbnN0VG9rZW4gIT0gbnVsbCkgewogICAgICByZXBvcnRDb25mbGljdGluZ01vZGlmaWVycyhuZXh0LCBjb25zdFRva2VuKTsKICAgIH0gZWxzZSBpZiAoZmluYWxUb2tlbiAhPSBudWxsKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VGaW5hbEFuZFZhcik7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyAnSW50ZXJuYWwgRXJyb3I6IFVuZXhwZWN0ZWQgdmFyRmluYWxPckNvbnN0OiAkdmFyRmluYWxPckNvbnN0JzsKICAgIH0KICAgIHJldHVybiBuZXh0OwogIH0KCiAgdm9pZCByZXBvcnRDb25mbGljdGluZ01vZGlmaWVycyhUb2tlbiBtb2RpZmllciwgVG9rZW4gZWFybGllck1vZGlmaWVyKSB7CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICBtb2RpZmllciwKICAgICAgICBmYXN0YS50ZW1wbGF0ZUNvbmZsaWN0aW5nTW9kaWZpZXJzCiAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG1vZGlmaWVyLmxleGVtZSwgZWFybGllck1vZGlmaWVyLmxleGVtZSkpOwogIH0KCiAgdm9pZCByZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXIoVG9rZW4gbW9kaWZpZXIpIHsKICAgIGlmIChtb2RpZmllciAhPSBudWxsKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgbW9kaWZpZXIsIGZhc3RhLnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyKTsKICAgIH0KICB9CgogIHZvaWQgcmVwb3J0TW9kaWZpZXJPdXRPZk9yZGVyKFRva2VuIG1vZGlmaWVyLCBTdHJpbmcgYmVmb3JlTW9kaWZpZXIpIHsKICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKAogICAgICAgIG1vZGlmaWVyLAogICAgICAgIGZhc3RhLnRlbXBsYXRlTW9kaWZpZXJPdXRPZk9yZGVyCiAgICAgICAgICAgIC53aXRoQXJndW1lbnRzKG1vZGlmaWVyLmxleGVtZSwgYmVmb3JlTW9kaWZpZXIpKTsKICB9Cn0Kgd0ATk48ATckJSsiIgEfGxIlQkoTB0IdMR0OKh0kShQGBA8CAUxEIBcXFBgXFBMXFRIBQh0BTRYBKAEzJR0aOyoaOB0nDR9ABgQBRQEvIxcZGTMiGRk1FyQZNRcZJA1OBgQBNDEjISU8Bi0SBAEtJ08jAT4vBjEzNSIGHixDJSdGCAYtLSkrEgQBMTIZIyElPAYpLRIEATouIy0uLSsSBAExOSMtLi0tKxIEAUY2QzAGSk9MP0wtJjIdEyYeLCgwJTQpMygwJS8kMygxJi4jET4KQDA1Fg8PCBkGEgQBJR0oIRwTBgEQLDERBAEiHSU9GQEaMyY1CBMGARAeLjMpOCVHIzINTAYRBAEmHSkeIh8ZHQEeOSc7JjoIEwYBECIuMx8mJTQmTA05BhEEASUdKCEcARozJzsoPCY6CBMGARAsMREEASIdJTQZEwYBEB4uMx8mJUcjRSQ4DUwGEQQBIR0kHRgBIDYlNCc7CBMGARAsMREEASUdKCEcASBEK0gnRCVCCBMGARAsMREEASMdJkoaASA7JzslOSY6CBMGARAiTCYuMx8mDTkGEQQBIB0jNBcBHzUIEwYBEBwuMx8mJTQlRQ1MBhEEAUsjEitGBAEyHC43BgQBSSMSKT4EAgE4cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9tb2RpZmllcl9jb250ZXh0LmRhcnRDc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9yZWNvdmVyeV9saXN0ZW5lcnMuZGFydInoLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vLi4vc2Nhbm5lci90b2tlbi5kYXJ0JyBzaG93IFRva2VuOwoKaW1wb3J0ICdmb3J3YXJkaW5nX2xpc3RlbmVyLmRhcnQnIHNob3cgRm9yd2FyZGluZ0xpc3RlbmVyOwoKY2xhc3MgQ2xhc3NIZWFkZXJSZWNvdmVyeUxpc3RlbmVyIGV4dGVuZHMgRm9yd2FyZGluZ0xpc3RlbmVyIHsKICBUb2tlbiBleHRlbmRzS2V5d29yZDsKICBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZDsKICBUb2tlbiB3aXRoS2V5d29yZDsKCiAgdm9pZCBjbGVhcigpIHsKICAgIGV4dGVuZHNLZXl3b3JkID0gbnVsbDsKICAgIGltcGxlbWVudHNLZXl3b3JkID0gbnVsbDsKICAgIHdpdGhLZXl3b3JkID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NFeHRlbmRzKFRva2VuIGV4dGVuZHNLZXl3b3JkKSB7CiAgICB0aGlzLmV4dGVuZHNLZXl3b3JkID0gZXh0ZW5kc0tleXdvcmQ7CiAgICBzdXBlci5oYW5kbGVDbGFzc0V4dGVuZHMoZXh0ZW5kc0tleXdvcmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDbGFzc09yTWl4aW5JbXBsZW1lbnRzKAogICAgICBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZCwgaW50IGludGVyZmFjZXNDb3VudCkgewogICAgdGhpcy5pbXBsZW1lbnRzS2V5d29yZCA9IGltcGxlbWVudHNLZXl3b3JkOwogICAgc3VwZXIuaGFuZGxlQ2xhc3NPck1peGluSW1wbGVtZW50cyhpbXBsZW1lbnRzS2V5d29yZCwgaW50ZXJmYWNlc0NvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlQ2xhc3NXaXRoQ2xhdXNlKFRva2VuIHdpdGhLZXl3b3JkKSB7CiAgICB0aGlzLndpdGhLZXl3b3JkID0gd2l0aEtleXdvcmQ7CiAgICBzdXBlci5oYW5kbGVDbGFzc1dpdGhDbGF1c2Uod2l0aEtleXdvcmQpOwogIH0KfQoKY2xhc3MgSW1wb3J0UmVjb3ZlcnlMaXN0ZW5lciBleHRlbmRzIEZvcndhcmRpbmdMaXN0ZW5lciB7CiAgVG9rZW4gYXNLZXl3b3JkOwogIFRva2VuIGRlZmVycmVkS2V5d29yZDsKICBUb2tlbiBpZktleXdvcmQ7CiAgYm9vbCBoYXNDb21iaW5hdG9yID0gZmFsc2U7CgogIHZvaWQgY2xlYXIoKSB7CiAgICBhc0tleXdvcmQgPSBudWxsOwogICAgZGVmZXJyZWRLZXl3b3JkID0gbnVsbDsKICAgIGlmS2V5d29yZCA9IG51bGw7CiAgICBoYXNDb21iaW5hdG9yID0gZmFsc2U7CiAgfQoKICB2b2lkIGVuZENvbmRpdGlvbmFsVXJpKFRva2VuIGlmS2V5d29yZCwgVG9rZW4gbGVmdFBhcmVuLCBUb2tlbiBlcXVhbFNpZ24pIHsKICAgIHRoaXMuaWZLZXl3b3JkID0gaWZLZXl3b3JkOwogICAgc3VwZXIuZW5kQ29uZGl0aW9uYWxVcmkoaWZLZXl3b3JkLCBsZWZ0UGFyZW4sIGVxdWFsU2lnbik7CiAgfQoKICB2b2lkIGVuZEhpZGUoVG9rZW4gaGlkZUtleXdvcmQpIHsKICAgIHRoaXMuaGFzQ29tYmluYXRvciA9IHRydWU7CiAgICBzdXBlci5lbmRIaWRlKGhpZGVLZXl3b3JkKTsKICB9CgogIHZvaWQgZW5kU2hvdyhUb2tlbiBzaG93S2V5d29yZCkgewogICAgdGhpcy5oYXNDb21iaW5hdG9yID0gdHJ1ZTsKICAgIHN1cGVyLmVuZFNob3coc2hvd0tleXdvcmQpOwogIH0KCiAgdm9pZCBoYW5kbGVJbXBvcnRQcmVmaXgoVG9rZW4gZGVmZXJyZWRLZXl3b3JkLCBUb2tlbiBhc0tleXdvcmQpIHsKICAgIHRoaXMuZGVmZXJyZWRLZXl3b3JkID0gZGVmZXJyZWRLZXl3b3JkOwogICAgdGhpcy5hc0tleXdvcmQgPSBhc0tleXdvcmQ7CiAgICBzdXBlci5oYW5kbGVJbXBvcnRQcmVmaXgoZGVmZXJyZWRLZXl3b3JkLCBhc0tleXdvcmQpOwogIH0KfQoKY2xhc3MgTWl4aW5IZWFkZXJSZWNvdmVyeUxpc3RlbmVyIGV4dGVuZHMgRm9yd2FyZGluZ0xpc3RlbmVyIHsKICBUb2tlbiBvbktleXdvcmQ7CiAgVG9rZW4gaW1wbGVtZW50c0tleXdvcmQ7CgogIHZvaWQgY2xlYXIoKSB7CiAgICBvbktleXdvcmQgPSBudWxsOwogICAgaW1wbGVtZW50c0tleXdvcmQgPSBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBoYW5kbGVDbGFzc09yTWl4aW5JbXBsZW1lbnRzKAogICAgICBUb2tlbiBpbXBsZW1lbnRzS2V5d29yZCwgaW50IGludGVyZmFjZXNDb3VudCkgewogICAgdGhpcy5pbXBsZW1lbnRzS2V5d29yZCA9IGltcGxlbWVudHNLZXl3b3JkOwogICAgc3VwZXIuaGFuZGxlQ2xhc3NPck1peGluSW1wbGVtZW50cyhpbXBsZW1lbnRzS2V5d29yZCwgaW50ZXJmYWNlc0NvdW50KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgaGFuZGxlTWl4aW5PbihUb2tlbiBvbktleXdvcmQsIGludCB0eXBlQ291bnQpIHsKICAgIHRoaXMub25LZXl3b3JkID0gb25LZXl3b3JkOwogICAgc3VwZXIuaGFuZGxlTWl4aW5PbihvbktleXdvcmQsIHR5cGVDb3VudCk7CiAgfQp9CmIATk48AS4BOwE/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+YAogICAgcmV0dXJuIG5ldyBDb21wbGV4VHlwZUluZm8odG9rZW4sIHR5cGVQYXJhbU9yQXJnKQogICAgICAgIC5jb21wdXRlU2ltcGxlV2l0aFR5cGVBcmd1bWVudHMocmVxdWlyZWQpOwogIH0KCiAgYXNzZXJ0KHR5cGVQYXJhbU9yQXJnID09IG5vVHlwZVBhcmFtT3JBcmcpOwogIG5leHQgPSBuZXh0Lm5leHQ7CiAgaWYgKG9wdGlvbmFsKCcuJywgbmV4dCkpIHsKICAgIG5leHQgPSBuZXh0Lm5leHQ7CiAgICBpZiAoaXNWYWxpZFR5cGVSZWZlcmVuY2UobmV4dCkpIHsKICAgICAgLy8gV2UndmUgc2VlbiBpZGVudGlmaWVyIGAuYCBpZGVudGlmaWVyCiAgICAgIHR5cGVQYXJhbU9yQXJnID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKG5leHQsIGluRGVjbGFyYXRpb24pOwogICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgICBpZiAodHlwZVBhcmFtT3JBcmcgPT0gbm9UeXBlUGFyYW1PckFyZykgewogICAgICAgIGlmIChvcHRpb25hbCgnPycsIG5leHQpKSB7CiAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgICAgICAgaWYgKCFpc0dlbmVyYWxpemVkRnVuY3Rpb25UeXBlKG5leHQpKSB7CiAgICAgICAgICAgIGlmIChyZXF1aXJlZCB8fCBsb29rc0xpa2VOYW1lKG5leHQpKSB7CiAgICAgICAgICAgICAgLy8gaWRlbnRpZmllciBgLmAgaWRlbnRpZmllciBgP2AgaWRlbnRpZmllcgogICAgICAgICAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBjb25zaWRlciBhZGRpbmcgUHJlZml4ZWROdWxsYWJsZVR5cGUKICAgICAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gYnVpbGQgY29tcGxleCB0eXBlCiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gaWRlbnRpZmllciBgLmAgaWRlbnRpZmllciBgP2Agbm9uLWlkZW50aWZpZXIKICAgICAgICAgICAgICByZXR1cm4gbm9UeXBlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICghaXNHZW5lcmFsaXplZEZ1bmN0aW9uVHlwZShuZXh0KSkgewogICAgICAgICAgICBpZiAocmVxdWlyZWQgfHwgbG9va3NMaWtlTmFtZShuZXh0KSkgewogICAgICAgICAgICAgIC8vIGlkZW50aWZpZXIgYC5gIGlkZW50aWZpZXIgaWRlbnRpZmllcgogICAgICAgICAgICAgIHJldHVybiBwcmVmaXhlZFR5cGU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gaWRlbnRpZmllciBgLmAgaWRlbnRpZmllciBub24taWRlbnRpZmllcgogICAgICAgICAgICAgIHJldHVybiBub1R5cGU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gaWRlbnRpZmllciBgLmAgaWRlbnRpZmllcgogICAgICByZXR1cm4gbmV3IENvbXBsZXhUeXBlSW5mbyh0b2tlbiwgdHlwZVBhcmFtT3JBcmcpCiAgICAgICAgICAuY29tcHV0ZVByZWZpeGVkVHlwZShyZXF1aXJlZCk7CiAgICB9CiAgICAvLyBpZGVudGlmaWVyIGAuYCBub24taWRlbnRpZmllcgogICAgaWYgKHJlcXVpcmVkKSB7CiAgICAgIHR5cGVQYXJhbU9yQXJnID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuLm5leHQubmV4dCwgaW5EZWNsYXJhdGlvbik7CiAgICAgIHJldHVybiBuZXcgQ29tcGxleFR5cGVJbmZvKHRva2VuLCB0eXBlUGFyYW1PckFyZykKICAgICAgICAgIC5jb21wdXRlUHJlZml4ZWRUeXBlKHJlcXVpcmVkKTsKICAgIH0KICAgIHJldHVybiBub1R5cGU7CiAgfQoKICBhc3NlcnQodHlwZVBhcmFtT3JBcmcgPT0gbm9UeXBlUGFyYW1PckFyZyk7CiAgaWYgKGlzR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUobmV4dCkpIHsKICAgIC8vIGlkZW50aWZpZXIgYEZ1bmN0aW9uYAogICAgcmV0dXJuIG5ldyBDb21wbGV4VHlwZUluZm8odG9rZW4sIG5vVHlwZVBhcmFtT3JBcmcpCiAgICAgICAgLmNvbXB1dGVJZGVudGlmaWVyR0ZUKHJlcXVpcmVkKTsKICB9CgogIGlmIChvcHRpb25hbCgnPycsIG5leHQpKSB7CiAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgaWYgKGlzR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGUobmV4dCkpIHsKICAgICAgLy8gaWRlbnRpZmllciBgP2AgRnVuY3Rpb24gYChgCiAgICAgIHJldHVybiBuZXcgQ29tcGxleFR5cGVJbmZvKHRva2VuLCBub1R5cGVQYXJhbU9yQXJnKQogICAgICAgICAgLmNvbXB1dGVJZGVudGlmaWVyUXVlc3Rpb25HRlQocmVxdWlyZWQpOwogICAgfSBlbHNlIGlmIChyZXF1aXJlZCB8fCBsb29rc0xpa2VOYW1lKG5leHQpKSB7CiAgICAgIC8vIGlkZW50aWZpZXIgYD9gCiAgICAgIHJldHVybiBzaW1wbGVOdWxsYWJsZVR5cGU7CiAgICB9CiAgfSBlbHNlIGlmIChyZXF1aXJlZCB8fCBsb29rc0xpa2VOYW1lKG5leHQpKSB7CiAgICAvLyBpZGVudGlmaWVyIGlkZW50aWZpZXIKICAgIHJldHVybiBzaW1wbGVUeXBlOwogIH0KICByZXR1cm4gbm9UeXBlOwp9CgovLy8gQ2FsbGVkIGJ5IHRoZSBwYXJzZXIgdG8gb2J0YWluIGluZm9ybWF0aW9uIGFib3V0IGEgcG9zc2libGUgZ3JvdXAgb2YgdHlwZQovLy8gcGFyYW1ldGVycyBvciB0eXBlIGFyZ3VtZW50cyB0aGF0IGZvbGxvdyBbdG9rZW5dLgovLy8gVGhpcyBkb2VzIG5vdCBtb2RpZnkgdGhlIHRva2VuIHN0cmVhbS4KLy8vCi8vLyBJZiBbaW5EZWNsYXJhdGlvbl0gaXMgYHRydWVgLCB0aGVuIHRoaXMgd2lsbCBtb3JlIGFnZ3Jlc3NpdmVseSByZWNvdmVyCi8vLyBnaXZlbiB1bmJhbGFuY2VkIGA8YCBgPmAgYW5kIGludmFsaWQgcGFyYW1ldGVycyBvciBhcmd1bWVudHMuClR5cGVQYXJhbU9yQXJnSW5mbyBjb21wdXRlVHlwZVBhcmFtT3JBcmcoVG9rZW4gdG9rZW4sCiAgICBbYm9vbCBpbkRlY2xhcmF0aW9uID0gZmFsc2VdKSB7CiAgVG9rZW4gYmVnaW5Hcm91cCA9IHRva2VuLm5leHQ7CiAgaWYgKCFvcHRpb25hbCgnPCcsIGJlZ2luR3JvdXApKSB7CiAgICByZXR1cm4gbm9UeXBlUGFyYW1PckFyZzsKICB9CgogIC8vIGlkZW50aWZpZXIgYDxgIGB2b2lkYCBgPmAgYW5kIGA8YCBgZHluYW1pY2AgYD5gCiAgLy8gYXJlIGhhbmRsZWQgYnkgQ29tcGxleFR5cGVJbmZvLgogIFRva2VuIG5leHQgPSBiZWdpbkdyb3VwLm5leHQ7CiAgaWYgKChuZXh0LmtpbmQgPT0gSURFTlRJRklFUl9UT0tFTiB8fCBuZXh0LnR5cGUuaXNQc2V1ZG8pKSB7CiAgICBpZiAob3B0aW9uYWwoJz4nLCBuZXh0Lm5leHQpKSB7CiAgICAgIHJldHVybiBzaW1wbGVUeXBlQXJndW1lbnQxOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnPj4nLCBuZXh0Lm5leHQpKSB7CiAgICAgIHJldHVybiBzaW1wbGVUeXBlQXJndW1lbnQxR3RHdDsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJz49JywgbmV4dC5uZXh0KSkgewogICAgICByZXR1cm4gc2ltcGxlVHlwZUFyZ3VtZW50MUd0RXE7CiAgICB9CiAgfSBlbHNlIGlmIChvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICByZXR1cm4gbm9UeXBlUGFyYW1PckFyZzsKICB9CgogIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciBhZGRpbmcgYWRkaXRpb25hbCBjb25zdCBmb3IgY29tbW9uIHNpdHVhdGlvbnMuCiAgcmV0dXJuIG5ldyBDb21wbGV4VHlwZVBhcmFtT3JBcmdJbmZvKHRva2VuLCBpbkRlY2xhcmF0aW9uKS5jb21wdXRlKCk7Cn0KCi8vLyBDYWxsZWQgYnkgdGhlIHBhcnNlciB0byBvYnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgYSBwb3NzaWJsZSBncm91cCBvZiB0eXBlCi8vLyB0eXBlIGFyZ3VtZW50cyB0aGF0IGZvbGxvdyBbdG9rZW5dIGFuZCB0aGF0IGFyZSBmb2xsb3dlZCBieSAnKCcuCi8vLyBSZXR1cm5zIHRoZSB0eXBlIGFyZ3VtZW50cyBpZiBbdG9rZW5dIG1hdGNoZXMgJzwnIHR5cGUgKCcsJyB0eXBlKSogJz4nICcoJywKLy8vIGFuZCBvdGhlcndpc2UgcmV0dXJucyBbbm9UeXBlUGFyYW1PckFyZ10uIFRoZSBmaW5hbCAnKCcgaXMgbm90IHBhcnQgb2YgdGhlCi8vLyBncmFtbWFyIGNvbnN0cnVjdCBgdHlwZUFyZ3VtZW50c2AsIGJ1dCBpdCBpcyByZXF1aXJlZCBoZXJlIHN1Y2ggdGhhdCB0eXBlCi8vLyBhcmd1bWVudHMgaW4gZ2VuZXJpYyBtZXRob2QgaW52b2NhdGlvbnMgY2FuIGJlIHJlY29nbml6ZWQsIGFuZCBhcyBmZXcgYXMKLy8vIHBvc3NpYmxlIG90aGVyIGNvbnN0cnVjdHMgd2lsbCBwYXNzIChlLmcuLCAnYSA8IEMsIEQgPiAzJykuClR5cGVQYXJhbU9yQXJnSW5mbyBjb21wdXRlTWV0aG9kVHlwZUFyZ3VtZW50cyhUb2tlbiB0b2tlbikgewogIFR5cGVQYXJhbU9yQXJnSW5mbyB0eXBlQXJnID0gY29tcHV0ZVR5cGVQYXJhbU9yQXJnKHRva2VuKTsKICByZXR1cm4gb3B0aW9uYWwoJygnLCB0eXBlQXJnLnNraXAodG9rZW4pLm5leHQpID8gdHlwZUFyZyA6IG5vVHlwZVBhcmFtT3JBcmc7Cn0KgVsATk48ASABOQFPASIBHgErAT8nGkpKHgFJRkhFHgE2FwFRTktNMjcBTk5LTTI2AU1ORE42AUpORE0vAURIQh8CATtHGCQeAUYqASodAUdDGkcEAUlOSU00ATs0TkpNNAFIUEIbAgFIMCgBSUxGAUoiLAEuKEACASkZLR8hIBw5KSQEEAIBT0EES0I3JBslHyo2MCpJPDQKRSkpKCwtSTw0CggbEiE3JEMsKjckQzIIBhMEASAWKx86JQYOFQQBKRY4LAQBHwEmMiwvMi0hGjAzNzw0DD4ZCjUvNioKOBcIBjM0KwEeNjMEAS4UHRYmLkMYMCMcMjM6RjQVPh0ODBEyMzYjFTodDgwKCCM4KgYlFE44KgYTBAEuKR04KQQBHRYrJTozMhghBjAdFwQRAgFONisES0I2JCEkHQQBNSUgPyQiLCYsJgYkHQQBTUgCAU5FUE9OTUA9PU8CATFwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL3R5cGVfaW5mby5kYXJ0SHNka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvaWRlbnRpZmllcl9jb250ZXh0X2ltcGwuZGFydMAAjtYvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi8uLi9zY2FubmVyL3Rva2VuLmRhcnQnIHNob3cgVG9rZW47CgppbXBvcnQgJy4uL2Zhc3RhX2NvZGVzLmRhcnQnIGFzIGZhc3RhOwoKaW1wb3J0ICcuLi9zY2FubmVyL3Rva2VuX2NvbnN0YW50cy5kYXJ0JyBzaG93IElERU5USUZJRVJfVE9LRU4sIFNUUklOR19UT0tFTjsKCmltcG9ydCAnaWRlbnRpZmllcl9jb250ZXh0LmRhcnQnOwoKaW1wb3J0ICdwYXJzZXIuZGFydCcgc2hvdyBQYXJzZXI7CgppbXBvcnQgJ3R5cGVfaW5mby5kYXJ0JyBzaG93IGlzVmFsaWRUeXBlUmVmZXJlbmNlOwoKaW1wb3J0ICd1dGlsLmRhcnQnIHNob3cgaXNPbmVPZk9yRW9mLCBvcHRpb25hbDsKCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmNhdGNoUGFyYW1ldGVyXS4KY2xhc3MgQ2F0Y2hQYXJhbWV0ZXJJZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBDYXRjaFBhcmFtZXRlcklkZW50aWZpZXJDb250ZXh0KCkgOiBzdXBlcignY2F0Y2hQYXJhbWV0ZXInKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIGNoZWNrQXN5bmNBd2FpdFlpZWxkQXNJZGVudGlmaWVyKGlkZW50aWZpZXIsIHBhcnNlcik7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcihpZGVudGlmaWVyLCBmYXN0YS5tZXNzYWdlQ2F0Y2hTeW50YXgpOwogICAgaWYgKGxvb2tzTGlrZVN0YXRlbWVudFN0YXJ0KGlkZW50aWZpZXIpIHx8CiAgICAgICAgaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGNvbnN0IFsnLCcsICcpJ10pKSB7CiAgICAgIHJldHVybiBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgICB9IGVsc2UgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgIHJldHVybiBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQuY2xhc3NPck1peGluT3JFeHRlbnNpb25EZWNsYXJhdGlvbl0uCmNsYXNzIENsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgQ2xhc3NPck1peGluT3JFeHRlbnNpb25JZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ2NsYXNzT3JNaXhpbkRlY2xhcmF0aW9uJywKICAgICAgICAgICAgaW5EZWNsYXJhdGlvbjogdHJ1ZSwgaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWQ6IGZhbHNlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIudHlwZS5pc1BzZXVkbykgewogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbihpZGVudGlmaWVyKSB8fAogICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLAogICAgICAgICAgICBjb25zdCBbJzwnLCAneycsICdleHRlbmRzJywgJ3dpdGgnLCAnaW1wbGVtZW50cycsICdvbiddKSkgewogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpZmllci50eXBlLmlzQnVpbHRJbikgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmNvbWJpbmF0b3JdLgpjbGFzcyBDb21iaW5hdG9ySWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgQ29tYmluYXRvcklkZW50aWZpZXJDb250ZXh0KCkgOiBzdXBlcignY29tYmluYXRvcicpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBjb25zdCBmb2xsb3dpbmdWYWx1ZXMgPSBjb25zdCBbJzsnLCAnLCcsICdpZicsICdhcycsICdzaG93JywgJ2hpZGUnXTsKCiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgaWYgKCFsb29rc0xpa2VTdGFydE9mTmV4dFRvcExldmVsRGVjbGFyYXRpb24oaWRlbnRpZmllcikgfHwKICAgICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLm5leHQsIGZvbGxvd2luZ1ZhbHVlcykpIHsKICAgICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgICAgfQogICAgICAvLyBBbHRob3VnaCB0aGlzIGlzIGEgdmFsaWQgaWRlbnRpZmllciBuYW1lLCB0aGUgaW1wb3J0IGRlY2xhcmF0aW9uCiAgICAgIC8vIGlzIGludmFsaWQgYW5kIHRoaXMgbG9va3MgbGlrZSB0aGUgc3RhcnQgb2YgdGhlIG5leHQgZGVjbGFyYXRpb24uCiAgICAgIC8vIEluIHRoaXMgc2l0dWF0aW9uLCBmYWxsIHRocm91Z2ggdG8gaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIuCiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgZm9sbG93aW5nVmFsdWVzKSB8fAogICAgICAgIGxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbihpZGVudGlmaWVyKSkgewogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmNvbnN0cnVjdG9yUmVmZXJlbmNlXQovLy8gYW5kIFtJZGVudGlmaWVyQ29udGV4dC5jb25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbl0KLy8vIGFuZCBbSWRlbnRpZmllckNvbnRleHQuY29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHNdLgpjbGFzcyBDb25zdHJ1Y3RvclJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IENvbnN0cnVjdG9yUmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCdjb25zdHJ1Y3RvclJlZmVyZW5jZScsIGlzU2NvcGVSZWZlcmVuY2U6IHRydWUpOwoKICBjb25zdCBDb25zdHJ1Y3RvclJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpCiAgICAgIDogc3VwZXIoJ2NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uJywgaXNDb250aW51YXRpb246IHRydWUpOwoKICBjb25zdCBDb25zdHJ1Y3RvclJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cygpCiAgICAgIDogc3VwZXIoJ2NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzJywKICAgICAgICAgICAgaXNDb250aW51YXRpb246IHRydWUpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgY2hlY2tBc3luY0F3YWl0WWllbGRBc0lkZW50aWZpZXIoaWRlbnRpZmllciwgcGFyc2VyKTsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQuZG90dGVkTmFtZV0uCmNsYXNzIERvdHRlZE5hbWVJZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBEb3R0ZWROYW1lSWRlbnRpZmllckNvbnRleHQoKSA6IHN1cGVyKCdkb3R0ZWROYW1lJyk7CgogIGNvbnN0IERvdHRlZE5hbWVJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKQogICAgICA6IHN1cGVyKCdkb3R0ZWROYW1lQ29udGludWF0aW9uJywgaXNDb250aW51YXRpb246IHRydWUpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBjb25zdCBmb2xsb3dpbmdWYWx1ZXMgPSBjb25zdCBbJy4nLCAnPT0nLCAnKSddOwoKICAgIGlmIChpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICAvLyBEb3R0ZWROYW1lSWRlbnRpZmllckNvbnRleHQgYXJlIG9ubHkgdXNlZCBpbiBjb25kaXRpb25hbCBpbXBvcnQKICAgICAgLy8gZXhwcmVzc2lvbnMuIEFsdGhvdWdoIHNvbWUgdG9wIGxldmVsIGtleXdvcmRzIHN1Y2ggYXMgYGltcG9ydGAgY2FuIGJlCiAgICAgIC8vIHVzZWQgYXMgaWRlbnRpZmllcnMsIHRoZXkgYXJlIG1vcmUgbGlrZWx5IHRoZSBzdGFydCBvZiB0aGUgbmV4dAogICAgICAvLyBkaXJlY3RpdmUgb3IgZGVjbGFyYXRpb24uCiAgICAgIGlmICghaWRlbnRpZmllci5pc1RvcExldmVsS2V5d29yZCB8fAogICAgICAgICAgaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIubmV4dCwgZm9sbG93aW5nVmFsdWVzKSkgewogICAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgICB9CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChsb29rc0xpa2VTdGFydE9mTmV4dFRvcExldmVsRGVjbGFyYXRpb24oaWRlbnRpZmllcikgfHwKICAgICAgICBpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgZm9sbG93aW5nVmFsdWVzKSkgewogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmVudW1EZWNsYXJhdGlvbl0uCmNsYXNzIEVudW1EZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IEVudW1EZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignZW51bURlY2xhcmF0aW9uJywKICAgICAgICAgICAgaW5EZWNsYXJhdGlvbjogdHJ1ZSwgaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWQ6IGZhbHNlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIudHlwZS5pc1BzZXVkbykgewogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbihpZGVudGlmaWVyKSB8fAogICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBjb25zdCBbJ3snXSkpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgaWYgKGlkZW50aWZpZXIudHlwZS5pc0J1aWx0SW4pIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUJ1aWx0SW5JZGVudGlmaWVySW5EZWNsYXJhdGlvbik7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5lbnVtVmFsdWVEZWNsYXJhdGlvbl0uCmNsYXNzIEVudW1WYWx1ZURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgRW51bVZhbHVlRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ2VudW1WYWx1ZURlY2xhcmF0aW9uJywgaW5EZWNsYXJhdGlvbjogdHJ1ZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgaWYgKGxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbihpZGVudGlmaWVyKSB8fAogICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBjb25zdCBbJywnLCAnfSddKSkgewogICAgICByZXR1cm4gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4pOwogICAgfSBlbHNlIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICByZXR1cm4gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmV4cHJlc3Npb25dLgpjbGFzcyBFeHByZXNzaW9uSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgRXhwcmVzc2lvbklkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignZXhwcmVzc2lvbicsIGlzU2NvcGVSZWZlcmVuY2U6IHRydWUpOwoKICBjb25zdCBFeHByZXNzaW9uSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uKCkKICAgICAgOiBzdXBlcignZXhwcmVzc2lvbkNvbnRpbnVhdGlvbicsIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIGlmIChvcHRpb25hbCgnYXdhaXQnLCBpZGVudGlmaWVyKSAmJiBpZGVudGlmaWVyLm5leHQuaXNJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gQWx0aG91Z2ggdGhlIGBhd2FpdGAgY2FuIGJlIHVzZWQgaW4gYW4gZXhwcmVzc2lvbiwKICAgICAgICAvLyBpdCBpcyBmb2xsb3dlZCBieSBhbm90aGVyIGlkZW50aWZpZXIgd2hpY2ggZG9lcyBub3QgZm9ybQogICAgICAgIC8vIGEgdmFsaWQgZXhwcmVzc2lvbi4gUmVwb3J0IGFuIGVycm9yIG9uIHRoZSBgYXdhaXRgIHRva2VuCiAgICAgICAgLy8gcmF0aGVyIHRoYW4gdGhlIHRva2VuIGZvbGxvd2luZyBpdC4KICAgICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVVbmV4cGVjdGVkVG9rZW4pOwoKICAgICAgICAvLyBUT0RPKGRhbnJ1YmVsKSBDb25zaWRlciBhIG5ldyBsaXN0ZW5lciBldmVudCBzbyB0aGF0IGFuYWx5emVyCiAgICAgICAgLy8gY2FuIHJlcHJlc2VudCB0aGlzIGFzIGFuIGF3YWl0IGV4cHJlc3Npb24gaW4gYSBjb250ZXh0IHRoYXQgZG9lcwogICAgICAgIC8vIG5vdCBhbGxvdyBhd2FpdC4KICAgICAgICByZXR1cm4gaWRlbnRpZmllci5uZXh0OwogICAgICB9IGVsc2UgewogICAgICAgIGNoZWNrQXN5bmNBd2FpdFlpZWxkQXNJZGVudGlmaWVyKGlkZW50aWZpZXIsIHBhcnNlcik7CiAgICAgIH0KICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgIGlmICghbG9va3NMaWtlU3RhdGVtZW50U3RhcnQoaWRlbnRpZmllcikpIHsKICAgICAgaWYgKGlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgaWYgKGlzQ29udGludWF0aW9uIHx8ICFpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgY29uc3QgWydhcycsICdpcyddKSkgewogICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKCFpZGVudGlmaWVyLmlzT3BlcmF0b3IgJiYKICAgICAgICAgICFpc09uZU9mT3JFb2YoaWRlbnRpZmllciwKICAgICAgICAgICAgICBjb25zdCBbJy4nLCAnLCcsICcoJywgJyknLCAnWycsICddJywgJ30nLCAnPycsICc6JywgJzsnXSkpIHsKICAgICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAgIHRva2VuID0gaWRlbnRpZmllcjsKICAgICAgICBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgICAgfQogICAgfQogICAgLy8gSW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICByZXR1cm4gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4pOwogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQuZmllbGREZWNsYXJhdGlvbl0uCmNsYXNzIEZpZWxkRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBGaWVsZERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCdmaWVsZERlY2xhcmF0aW9uJywgaW5EZWNsYXJhdGlvbjogdHJ1ZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBjb25zdCBbJzsnLCAnPScsICcsJywgJ30nXSkgfHwKICAgICAgICBsb29rc0xpa2VTdGFydE9mTmV4dENsYXNzTWVtYmVyKGlkZW50aWZpZXIpKSB7CiAgICAgIHJldHVybiBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgdGhpcyk7CiAgICB9IGVsc2UgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgIHJldHVybiBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSwKICAgICAgICAgIG1lc3NhZ2VPblRva2VuOiBpZGVudGlmaWVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmZpZWxkSW5pdGlhbGl6ZXJdLgpjbGFzcyBGaWVsZEluaXRpYWxpemVySWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgRmllbGRJbml0aWFsaXplcklkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignZmllbGRJbml0aWFsaXplcicsIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgYXNzZXJ0KG9wdGlvbmFsKCcuJywgdG9rZW4pKTsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgLy8gSW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICByZXR1cm4gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4pOwogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQuZm9ybWFsUGFyYW1ldGVyRGVjbGFyYXRpb25dLgpjbGFzcyBGb3JtYWxQYXJhbWV0ZXJEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IEZvcm1hbFBhcmFtZXRlckRlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCdmb3JtYWxQYXJhbWV0ZXJEZWNsYXJhdGlvbicsIGluRGVjbGFyYXRpb246IHRydWUpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgY2hlY2tBc3luY0F3YWl0WWllbGRBc0lkZW50aWZpZXIoaWRlbnRpZmllciwgcGFyc2VyKTsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGNvbnN0IGZvbGxvd2luZ1ZhbHVlcyA9IGNvbnN0IFsnOicsICc9JywgJywnLCAnKCcsICcpJywgJ1snLCAnXScsICd7JywgJ30nXTsKICAgIGlmIChsb29rc0xpa2VTdGFydE9mTmV4dENsYXNzTWVtYmVyKGlkZW50aWZpZXIpIHx8CiAgICAgICAgbG9va3NMaWtlU3RhdGVtZW50U3RhcnQoaWRlbnRpZmllcikgfHwKICAgICAgICBpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgZm9sbG93aW5nVmFsdWVzKSkgewogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmltcG9ydFByZWZpeERlY2xhcmF0aW9uXS4KY2xhc3MgSW1wb3J0UHJlZml4SWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgSW1wb3J0UHJlZml4SWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCdpbXBvcnRQcmVmaXhEZWNsYXJhdGlvbicsCiAgICAgICAgICAgIGluRGVjbGFyYXRpb246IHRydWUsIGlzQnVpbHRJbklkZW50aWZpZXJBbGxvd2VkOiBmYWxzZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLnR5cGUuaXNQc2V1ZG8pIHsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGNvbnN0IGZvbGxvd2luZ1ZhbHVlcyA9IGNvbnN0IFsnOycsICdpZicsICdzaG93JywgJ2hpZGUnLCAnZGVmZXJyZWQnLCAnYXMnXTsKICAgIGlmIChpZGVudGlmaWVyLnR5cGUuaXNCdWlsdEluICYmCiAgICAgICAgaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIubmV4dCwgZm9sbG93aW5nVmFsdWVzKSkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uKTsKICAgIH0gZWxzZSBpZiAobG9va3NMaWtlU3RhcnRPZk5leHRUb3BMZXZlbERlY2xhcmF0aW9uKGlkZW50aWZpZXIpIHx8CiAgICAgICAgaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGZvbGxvd2luZ1ZhbHVlcykpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgpjbGFzcyBMaXRlcmFsU3ltYm9sSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgTGl0ZXJhbFN5bWJvbElkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignbGl0ZXJhbFN5bWJvbCcsIGluU3ltYm9sOiB0cnVlKTsKCiAgY29uc3QgTGl0ZXJhbFN5bWJvbElkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpCiAgICAgIDogc3VwZXIoJ2xpdGVyYWxTeW1ib2xDb250aW51YXRpb24nLAogICAgICAgICAgICBpblN5bWJvbDogdHJ1ZSwgaXNDb250aW51YXRpb246IHRydWUpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIHJldHVybiBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgdGhpcywKICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbl0KLy8vIGFuZCBbSWRlbnRpZmllckNvbnRleHQubG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uQ29udGludWF0aW9uXS4KY2xhc3MgTG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgTG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCdsb2NhbEZ1bmN0aW9uRGVjbGFyYXRpb24nLCBpbkRlY2xhcmF0aW9uOiB0cnVlKTsKCiAgY29uc3QgTG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uKCkKICAgICAgOiBzdXBlcignbG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uQ29udGludWF0aW9uJywKICAgICAgICAgICAgaW5EZWNsYXJhdGlvbjogdHJ1ZSwgaXNDb250aW51YXRpb246IHRydWUpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgY2hlY2tBc3luY0F3YWl0WWllbGRBc0lkZW50aWZpZXIoaWRlbnRpZmllciwgcGFyc2VyKTsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgY29uc3QgWycuJywgJygnLCAneycsICc9PiddKSB8fAogICAgICAgIGxvb2tzTGlrZVN0YXRlbWVudFN0YXJ0KGlkZW50aWZpZXIpKSB7CiAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgdGhpcywKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMoaWRlbnRpZmllcikpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAgIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAgIC8vIGJ1dCBpbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgICAgICBpZGVudGlmaWVyID0gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQubGFiZWxEZWNsYXJhdGlvbl0uCmNsYXNzIExhYmVsRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBMYWJlbERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoKQogICAgICA6IHN1cGVyKCdsYWJlbERlY2xhcmF0aW9uJywgaW5EZWNsYXJhdGlvbjogdHJ1ZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICBjaGVja0FzeW5jQXdhaXRZaWVsZEFzSWRlbnRpZmllcihpZGVudGlmaWVyLCBwYXJzZXIpOwogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBjb25zdCBbJzonXSkgfHwKICAgICAgICBsb29rc0xpa2VTdGF0ZW1lbnRTdGFydChpZGVudGlmaWVyKSkgewogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmxhYmVsUmVmZXJlbmNlXS4KY2xhc3MgTGFiZWxSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBMYWJlbFJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0KCkgOiBzdXBlcignbGFiZWxSZWZlcmVuY2UnKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIGNoZWNrQXN5bmNBd2FpdFlpZWxkQXNJZGVudGlmaWVyKGlkZW50aWZpZXIsIHBhcnNlcik7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGNvbnN0IFsnOyddKSkgewogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LmxpYnJhcnlOYW1lXSwKLy8vIGFuZCBbSWRlbnRpZmllckNvbnRleHQubGlicmFyeU5hbWVDb250aW51YXRpb25dCi8vLyBhbmQgW0lkZW50aWZpZXJDb250ZXh0LnBhcnROYW1lXSwKLy8vIGFuZCBbSWRlbnRpZmllckNvbnRleHQucGFydE5hbWVDb250aW51YXRpb25dLgpjbGFzcyBMaWJyYXJ5SWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgTGlicmFyeUlkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignbGlicmFyeU5hbWUnLCBpbkxpYnJhcnlPclBhcnRPZkRlY2xhcmF0aW9uOiB0cnVlKTsKCiAgY29uc3QgTGlicmFyeUlkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpCiAgICAgIDogc3VwZXIoJ2xpYnJhcnlOYW1lQ29udGludWF0aW9uJywKICAgICAgICAgICAgaW5MaWJyYXJ5T3JQYXJ0T2ZEZWNsYXJhdGlvbjogdHJ1ZSwgaXNDb250aW51YXRpb246IHRydWUpOwoKICBjb25zdCBMaWJyYXJ5SWRlbnRpZmllckNvbnRleHQucGFydE5hbWUoKQogICAgICA6IHN1cGVyKCdwYXJ0TmFtZScsIGluTGlicmFyeU9yUGFydE9mRGVjbGFyYXRpb246IHRydWUpOwoKICBjb25zdCBMaWJyYXJ5SWRlbnRpZmllckNvbnRleHQucGFydE5hbWVDb250aW51YXRpb24oKQogICAgICA6IHN1cGVyKCdwYXJ0TmFtZUNvbnRpbnVhdGlvbicsCiAgICAgICAgICAgIGluTGlicmFyeU9yUGFydE9mRGVjbGFyYXRpb246IHRydWUsIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgY29uc3QgZm9sbG93aW5nVmFsdWVzID0gY29uc3QgWycuJywgJzsnXTsKCiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgVG9rZW4gbmV4dCA9IGlkZW50aWZpZXIubmV4dDsKICAgICAgaWYgKCFsb29rc0xpa2VTdGFydE9mTmV4dFRvcExldmVsRGVjbGFyYXRpb24oaWRlbnRpZmllcikgfHwKICAgICAgICAgIGlzT25lT2ZPckVvZihuZXh0LCBmb2xsb3dpbmdWYWx1ZXMpKSB7CiAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICAgIH0KICAgICAgLy8gQWx0aG91Z2ggdGhpcyBpcyBhIHZhbGlkIGxpYnJhcnkgbmFtZSwgdGhlIGxpYnJhcnkgZGVjbGFyYXRpb24KICAgICAgLy8gaXMgaW52YWxpZCBhbmQgdGhpcyBsb29rcyBsaWtlIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBkZWNsYXJhdGlvbi4KICAgICAgLy8gSW4gdGhpcyBzaXR1YXRpb24sIGZhbGwgdGhyb3VnaCB0byBpbnNlcnQgYSBzeW50aGV0aWMgbGlicmFyeSBuYW1lLgogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGZvbGxvd2luZ1ZhbHVlcykgfHwKICAgICAgICBsb29rc0xpa2VTdGFydE9mTmV4dFRvcExldmVsRGVjbGFyYXRpb24oaWRlbnRpZmllcikpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5sb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25dLgpjbGFzcyBMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ2xvY2FsVmFyaWFibGVEZWNsYXJhdGlvbicsIGluRGVjbGFyYXRpb246IHRydWUpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci5pc0lkZW50aWZpZXIpIHsKICAgICAgY2hlY2tBc3luY0F3YWl0WWllbGRBc0lkZW50aWZpZXIoaWRlbnRpZmllciwgcGFyc2VyKTsKICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgY29uc3QgWyc7JywgJz0nLCAnLCcsICd7JywgJ30nXSkgfHwKICAgICAgICBsb29rc0xpa2VTdGF0ZW1lbnRTdGFydChpZGVudGlmaWVyKSB8fAogICAgICAgIGlkZW50aWZpZXIua2luZCA9PSBTVFJJTkdfVE9LRU4pIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC5tZXRhZGF0YVJlZmVyZW5jZV0KLy8vIGFuZCBbSWRlbnRpZmllckNvbnRleHQubWV0YWRhdGFDb250aW51YXRpb25dCi8vLyBhbmQgW0lkZW50aWZpZXJDb250ZXh0Lm1ldGFkYXRhQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzXS4KY2xhc3MgTWV0YWRhdGFSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBNZXRhZGF0YVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignbWV0YWRhdGFSZWZlcmVuY2UnLCBpc1Njb3BlUmVmZXJlbmNlOiB0cnVlKTsKCiAgY29uc3QgTWV0YWRhdGFSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb24oKQogICAgICA6IHN1cGVyKCdtZXRhZGF0YUNvbnRpbnVhdGlvbicsIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgY29uc3QgTWV0YWRhdGFSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dC5jb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHMoKQogICAgICA6IHN1cGVyKCdtZXRhZGF0YUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50cycsIGlzQ29udGludWF0aW9uOiB0cnVlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIGNoZWNrQXN5bmNBd2FpdFlpZWxkQXNJZGVudGlmaWVyKGlkZW50aWZpZXIsIHBhcnNlcik7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBpZiAoaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGNvbnN0IFsneycsICd9JywgJygnLCAnKScsICddJ10pIHx8CiAgICAgICAgbG9va3NMaWtlU3RhcnRPZk5leHRUb3BMZXZlbERlY2xhcmF0aW9uKGlkZW50aWZpZXIpIHx8CiAgICAgICAgbG9va3NMaWtlU3RhcnRPZk5leHRDbGFzc01lbWJlcihpZGVudGlmaWVyKSB8fAogICAgICAgIGxvb2tzTGlrZVN0YXRlbWVudFN0YXJ0KGlkZW50aWZpZXIpKSB7CiAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgdGhpcywKICAgICAgICAgIG1lc3NhZ2U6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyLndpdGhBcmd1bWVudHMoaWRlbnRpZmllcikpOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAgIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAgIC8vIGJ1dCBpbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgICAgICBpZGVudGlmaWVyID0gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKLy8vIFNlZSBbSWRlbnRpZmllckNvbnRleHQubWV0aG9kRGVjbGFyYXRpb25dLAovLy8gYW5kIFtJZGVudGlmaWVyQ29udGV4dC5tZXRob2REZWNsYXJhdGlvbkNvbnRpbnVhdGlvbl0sCi8vLyBhbmQgW0lkZW50aWZpZXJDb250ZXh0Lm9wZXJhdG9yTmFtZV0uCmNsYXNzIE1ldGhvZERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgTWV0aG9kRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ21ldGhvZERlY2xhcmF0aW9uJywgaW5EZWNsYXJhdGlvbjogdHJ1ZSk7CgogIGNvbnN0IE1ldGhvZERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQuY29udGludWF0aW9uKCkKICAgICAgOiBzdXBlcignbWV0aG9kRGVjbGFyYXRpb25Db250aW51YXRpb24nLAogICAgICAgICAgICBpbkRlY2xhcmF0aW9uOiB0cnVlLCBpc0NvbnRpbnVhdGlvbjogdHJ1ZSk7CgogIGNvbnN0IE1ldGhvZERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQub3BlcmF0b3JOYW1lKCkKICAgICAgOiBzdXBlcignb3BlcmF0b3JOYW1lJywgaW5EZWNsYXJhdGlvbjogdHJ1ZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGlkZW50aWZpZXIuaXNVc2VyRGVmaW5hYmxlT3BlcmF0b3IgJiYgIWlzQ29udGludWF0aW9uKSB7CiAgICAgIHJldHVybiBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEubWVzc2FnZU1pc3NpbmdPcGVyYXRvcktleXdvcmQsCiAgICAgICAgICBtZXNzYWdlT25Ub2tlbjogaWRlbnRpZmllcik7CiAgICB9IGVsc2UgaWYgKGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBjb25zdCBbJy4nLCAnKCcsICd7JywgJz0+JywgJ30nXSkgfHwKICAgICAgICBsb29rc0xpa2VTdGFydE9mTmV4dENsYXNzTWVtYmVyKGlkZW50aWZpZXIpKSB7CiAgICAgIHJldHVybiBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbiwgdGhpcyk7CiAgICB9IGVsc2UgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgIHJldHVybiBwYXJzZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSwKICAgICAgICAgIG1lc3NhZ2VPblRva2VuOiBpZGVudGlmaWVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0Lm5hbWVkQXJndW1lbnRSZWZlcmVuY2VdLgpjbGFzcyBOYW1lZEFyZ3VtZW50UmVmZXJlbmNlSWRlbnRpZmllckNvbnRleHQgZXh0ZW5kcyBJZGVudGlmaWVyQ29udGV4dCB7CiAgY29uc3QgTmFtZWRBcmd1bWVudFJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcignbmFtZWRBcmd1bWVudFJlZmVyZW5jZScsIGFsbG93ZWRJbkNvbnN0YW50RXhwcmVzc2lvbjogdHJ1ZSk7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZUlkZW50aWZpZXIoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGlkZW50aWZpZXIgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KGlkZW50aWZpZXIua2luZCAhPSBJREVOVElGSUVSX1RPS0VOKTsKICAgIGlmIChpZGVudGlmaWVyLmlzSWRlbnRpZmllcikgewogICAgICBjaGVja0FzeW5jQXdhaXRZaWVsZEFzSWRlbnRpZmllcihpZGVudGlmaWVyLCBwYXJzZXIpOwogICAgICByZXR1cm4gaWRlbnRpZmllcjsKICAgIH0KCiAgICAvLyBSZWNvdmVyeQogICAgaWYgKGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBjb25zdCBbJzonXSkpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC50b3BMZXZlbEZ1bmN0aW9uRGVjbGFyYXRpb25dCi8vLyBhbmQgW0lkZW50aWZpZXJDb250ZXh0LnRvcExldmVsVmFyaWFibGVEZWNsYXJhdGlvbl0uCmNsYXNzIFRvcExldmVsRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBmaW5hbCBMaXN0PFN0cmluZz4gZm9sbG93aW5nVmFsdWVzOwoKICBjb25zdCBUb3BMZXZlbERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHQoU3RyaW5nIG5hbWUsIHRoaXMuZm9sbG93aW5nVmFsdWVzKQogICAgICA6IHN1cGVyKG5hbWUsIGluRGVjbGFyYXRpb246IHRydWUpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CgogICAgaWYgKGlkZW50aWZpZXIuaXNJZGVudGlmaWVyKSB7CiAgICAgIFRva2VuIG5leHQgPSBpZGVudGlmaWVyLm5leHQ7CiAgICAgIGlmICghbG9va3NMaWtlU3RhcnRPZk5leHRUb3BMZXZlbERlY2xhcmF0aW9uKGlkZW50aWZpZXIpIHx8CiAgICAgICAgICBpc09uZU9mT3JFb2YobmV4dCwgZm9sbG93aW5nVmFsdWVzKSkgewogICAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgICB9CiAgICAgIC8vIEFsdGhvdWdoIHRoaXMgaXMgYSB2YWxpZCB0b3AgbGV2ZWwgbmFtZSwgdGhlIGRlY2xhcmF0aW9uCiAgICAgIC8vIGlzIGludmFsaWQgYW5kIHRoaXMgbG9va3MgbGlrZSB0aGUgc3RhcnQgb2YgdGhlIG5leHQgZGVjbGFyYXRpb24uCiAgICAgIC8vIEluIHRoaXMgc2l0dWF0aW9uLCBmYWxsIHRocm91Z2ggdG8gaW5zZXJ0IGEgc3ludGhldGljIG5hbWUuCiAgICB9CgogICAgLy8gUmVjb3ZlcnkKICAgIGlmIChsb29rc0xpa2VTdGFydE9mTmV4dFRvcExldmVsRGVjbGFyYXRpb24oaWRlbnRpZmllcikgfHwKICAgICAgICBpc09uZU9mT3JFb2YoaWRlbnRpZmllciwgZm9sbG93aW5nVmFsdWVzKSkgewogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4sIHRoaXMsCiAgICAgICAgICBtZXNzYWdlOiBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllci53aXRoQXJndW1lbnRzKGlkZW50aWZpZXIpKTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpZmllci50eXBlLmlzQnVpbHRJbikgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZiAoIWlkZW50aWZpZXIuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgICAgLy8gV2hlbiBpbiBkb3VidCwgY29uc3VtZSB0aGUgdG9rZW4gdG8gZW5zdXJlIHdlIG1ha2UgcHJvZ3Jlc3MKICAgICAgICAvLyBidXQgaW5zZXJ0IGEgc3ludGhldGljIGlkZW50aWZpZXIgdG8gc2F0aXNmeSBsaXN0ZW5lcnMuCiAgICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5yZXdyaXRlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKGlkZW50aWZpZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaWRlbnRpZmllcjsKICB9Cn0KCi8vLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LnR5cGVkZWZEZWNsYXJhdGlvbl0uCmNsYXNzIFR5cGVkZWZEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IFR5cGVkZWZEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcigndHlwZWRlZkRlY2xhcmF0aW9uJywKICAgICAgICAgICAgaW5EZWNsYXJhdGlvbjogdHJ1ZSwgaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWQ6IGZhbHNlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaWRlbnRpZmllci5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlkZW50aWZpZXIudHlwZS5pc1BzZXVkbykgewogICAgICBpZiAob3B0aW9uYWwoJ0Z1bmN0aW9uJywgaWRlbnRpZmllcikpIHsKICAgICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICB9CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBjb25zdCBmb2xsb3dpbmdWYWx1ZXMgPSBjb25zdCBbJygnLCAnPCcsICc9JywgJzsnXTsKICAgIGlmIChpZGVudGlmaWVyLnR5cGUuaXNCdWlsdEluICYmCiAgICAgICAgaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIubmV4dCwgZm9sbG93aW5nVmFsdWVzKSkgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uKTsKICAgIH0gZWxzZSBpZiAobG9va3NMaWtlU3RhcnRPZk5leHRUb3BMZXZlbERlY2xhcmF0aW9uKGlkZW50aWZpZXIpIHx8CiAgICAgICAgaXNPbmVPZk9yRW9mKGlkZW50aWZpZXIsIGZvbGxvd2luZ1ZhbHVlcykpIHsKICAgICAgaWRlbnRpZmllciA9IHBhcnNlci5pbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyKHRva2VuLCB0aGlzLAogICAgICAgICAgbWVzc2FnZTogZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIud2l0aEFyZ3VtZW50cyhpZGVudGlmaWVyKSk7CiAgICB9IGVsc2UgewogICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgIGlkZW50aWZpZXIsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRJZGVudGlmaWVyKTsKICAgICAgaWYgKCFpZGVudGlmaWVyLmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgICAgLy8gYnV0IGluc2VydCBhIHN5bnRoZXRpYyBpZGVudGlmaWVyIHRvIHNhdGlzZnkgbGlzdGVuZXJzLgogICAgICAgIGlkZW50aWZpZXIgPSBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcihpZGVudGlmaWVyKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGlkZW50aWZpZXI7CiAgfQp9CgovLy8gU2VlIFtJZGVudGlmaWVyQ29udGV4dC50eXBlUmVmZXJlbmNlXS4KY2xhc3MgVHlwZVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0IGV4dGVuZHMgSWRlbnRpZmllckNvbnRleHQgewogIGNvbnN0IFR5cGVSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dCgpCiAgICAgIDogc3VwZXIoJ3R5cGVSZWZlcmVuY2UnLAogICAgICAgICAgICBpc1Njb3BlUmVmZXJlbmNlOiB0cnVlLAogICAgICAgICAgICBpc0J1aWx0SW5JZGVudGlmaWVyQWxsb3dlZDogZmFsc2UsCiAgICAgICAgICAgIHJlY292ZXJ5VGVtcGxhdGU6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRUeXBlKTsKCiAgY29uc3QgVHlwZVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0LmNvbnRpbnVhdGlvbigpCiAgICAgIDogc3VwZXIoJ3R5cGVSZWZlcmVuY2VDb250aW51YXRpb24nLAogICAgICAgICAgICBpc0NvbnRpbnVhdGlvbjogdHJ1ZSwgaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWQ6IGZhbHNlKTsKCiAgY29uc3QgVHlwZVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0LnByZWZpeGVkKCkKICAgICAgOiBzdXBlcigncHJlZml4ZWRUeXBlUmVmZXJlbmNlJywKICAgICAgICAgICAgaXNTY29wZVJlZmVyZW5jZTogdHJ1ZSwKICAgICAgICAgICAgaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWQ6IHRydWUsCiAgICAgICAgICAgIHJlY292ZXJ5VGVtcGxhdGU6IGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRUeXBlKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlSWRlbnRpZmllcihUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQobmV4dC5raW5kICE9IElERU5USUZJRVJfVE9LRU4pOwogICAgaWYgKGlzVmFsaWRUeXBlUmVmZXJlbmNlKG5leHQpKSB7CiAgICAgIHJldHVybiBuZXh0OwogICAgfSBlbHNlIGlmIChuZXh0LmlzS2V5d29yZE9ySWRlbnRpZmllcikgewogICAgICBpZiAob3B0aW9uYWwoInZvaWQiLCBuZXh0KSkgewogICAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKG5leHQsIGZhc3RhLm1lc3NhZ2VJbnZhbGlkVm9pZCk7CiAgICAgIH0gZWxzZSBpZiAobmV4dC50eXBlLmlzQnVpbHRJbikgewogICAgICAgIGlmICghaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWQpIHsKICAgICAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlQnVpbHRJbklkZW50aWZpZXJBc1R5cGUpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChvcHRpb25hbCgndmFyJywgbmV4dCkpIHsKICAgICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcihuZXh0LCBmYXN0YS5tZXNzYWdlVmFyQXNUeXBlTmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICAgIG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRUeXBlKTsKICAgICAgfQogICAgICByZXR1cm4gbmV4dDsKICAgIH0KICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKG5leHQsIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRUeXBlKTsKICAgIGlmICghaXNPbmVPZk9yRW9mKAogICAgICAgIG5leHQsIGNvbnN0IFsnPicsICcpJywgJ1snLCAnXScsICdbXScsICd7JywgJ30nLCAnLCcsICc7J10pKSB7CiAgICAgIC8vIFdoZW4gaW4gZG91YnQsIGNvbnN1bWUgdGhlIHRva2VuIHRvIGVuc3VyZSB3ZSBtYWtlIHByb2dyZXNzCiAgICAgIHRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICB9CiAgICAvLyBJbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgIHJldHVybiBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgfQp9CgovLyBTZWUgW0lkZW50aWZpZXJDb250ZXh0LnR5cGVWYXJpYWJsZURlY2xhcmF0aW9uXS4KY2xhc3MgVHlwZVZhcmlhYmxlRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dCBleHRlbmRzIElkZW50aWZpZXJDb250ZXh0IHsKICBjb25zdCBUeXBlVmFyaWFibGVEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0KCkKICAgICAgOiBzdXBlcigndHlwZVZhcmlhYmxlRGVjbGFyYXRpb24nLAogICAgICAgICAgICBpbkRlY2xhcmF0aW9uOiB0cnVlLCBpc0J1aWx0SW5JZGVudGlmaWVyQWxsb3dlZDogZmFsc2UpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVJZGVudGlmaWVyKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiBpZGVudGlmaWVyID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChpZGVudGlmaWVyLmtpbmQgIT0gSURFTlRJRklFUl9UT0tFTik7CiAgICBpZiAoaWRlbnRpZmllci50eXBlLmlzUHNldWRvKSB7CiAgICAgIHJldHVybiBpZGVudGlmaWVyOwogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBjb25zdCBmb2xsb3dpbmdWYWx1ZXMgPSBjb25zdCBbJzwnLCAnPicsICc7JywgJ30nLCAnZXh0ZW5kcycsICdzdXBlciddOwogICAgaWYgKGxvb2tzTGlrZVN0YXJ0T2ZOZXh0VG9wTGV2ZWxEZWNsYXJhdGlvbihpZGVudGlmaWVyKSB8fAogICAgICAgIGxvb2tzTGlrZVN0YXJ0T2ZOZXh0Q2xhc3NNZW1iZXIoaWRlbnRpZmllcikgfHwKICAgICAgICBsb29rc0xpa2VTdGF0ZW1lbnRTdGFydChpZGVudGlmaWVyKSB8fAogICAgICAgIGlzT25lT2ZPckVvZihpZGVudGlmaWVyLCBmb2xsb3dpbmdWYWx1ZXMpKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZElkZW50aWZpZXIpOwogICAgICBpZGVudGlmaWVyID0gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIodG9rZW4pOwogICAgfSBlbHNlIGlmIChpZGVudGlmaWVyLnR5cGUuaXNCdWlsdEluKSB7CiAgICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yV2l0aFRva2VuKAogICAgICAgICAgaWRlbnRpZmllciwgZmFzdGEudGVtcGxhdGVCdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW4oCiAgICAgICAgICBpZGVudGlmaWVyLCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllcik7CiAgICAgIGlmICghaWRlbnRpZmllci5pc0tleXdvcmRPcklkZW50aWZpZXIpIHsKICAgICAgICAvLyBXaGVuIGluIGRvdWJ0LCBjb25zdW1lIHRoZSB0b2tlbiB0byBlbnN1cmUgd2UgbWFrZSBwcm9ncmVzcwogICAgICAgIC8vIGJ1dCBpbnNlcnQgYSBzeW50aGV0aWMgaWRlbnRpZmllciB0byBzYXRpc2Z5IGxpc3RlbmVycy4KICAgICAgICBpZGVudGlmaWVyID0gcGFyc2VyLnJld3JpdGVyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoaWRlbnRpZmllcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpZGVudGlmaWVyOwogIH0KfQoKdm9pZCBjaGVja0FzeW5jQXdhaXRZaWVsZEFzSWRlbnRpZmllcihUb2tlbiBpZGVudGlmaWVyLCBQYXJzZXIgcGFyc2VyKSB7CiAgaWYgKCFwYXJzZXIuaW5QbGFpblN5bmMgJiYgaWRlbnRpZmllci50eXBlLmlzUHNldWRvKSB7CiAgICBpZiAob3B0aW9uYWwoJ2F3YWl0JywgaWRlbnRpZmllcikpIHsKICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IoaWRlbnRpZmllciwgZmFzdGEu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cnkgZGFydDJqcy5qc19lbWl0dGVyLnByb2dyYW1fYnVpbGRlcjsKCmltcG9ydCAnZGFydDppbyc7CmltcG9ydCAnZGFydDpjb252ZXJ0JyBzaG93IGpzb25EZWNvZGU7CgppbXBvcnQgJy4uLy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBOYW1lcywgU2VsZWN0b3JzOwppbXBvcnQgJy4uLy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCcKICAgIHNob3cgQ29uc3RhbnRWYWx1ZSwgSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlOwppbXBvcnQgJy4uLy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEpDb21tb25FbGVtZW50cywgSkVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi8uLi9kZWZlcnJlZF9sb2FkLmRhcnQnCiAgICBzaG93IGRlZmVycmVkUGFydEZpbGVOYW1lLCBPdXRwdXRVbml0LCBPdXRwdXRVbml0RGF0YTsKaW1wb3J0ICcuLi8uLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnLi4vLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0JwogICAgc2hvdyBGaWVsZEFuYWx5c2lzRGF0YSwgSkZpZWxkQW5hbHlzaXM7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9iYWNrZW5kX3VzYWdlLmRhcnQnOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvY3VzdG9tX2VsZW1lbnRzX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvaW5mZXJyZWRfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9uYW1lci5kYXJ0JyBzaG93IE5hbWVyLCBTdHJpbmdCYWNrZWROYW1lOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnQnCiAgICBzaG93IFJ1bnRpbWVUeXBlc0NoZWNrcywgUnVudGltZVR5cGVzRW5jb2RlcjsKaW1wb3J0ICcuLi8uLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfbmV3LmRhcnQnIHNob3cgUmVjaXBlRW5jb2RlcjsKaW1wb3J0ICcuLi8uLi9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0JyBzaG93IFJ1bnRpbWVUeXBlc05lZWQ7CmltcG9ydCAnLi4vLi4vanNfbW9kZWwvZWxlbWVudHMuZGFydCcgc2hvdyBKR2VuZXJhdG9yQm9keSwgSlNpZ25hdHVyZU1ldGhvZDsKaW1wb3J0ICcuLi8uLi9uYXRpdmUvZW5xdWV1ZS5kYXJ0JyBzaG93IE5hdGl2ZUNvZGVnZW5FbnF1ZXVlcjsKaW1wb3J0ICcuLi8uLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uLy4uL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JzsKaW1wb3J0ICcuLi8uLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJy4uLy4uL3VuaXZlcnNlL3dvcmxkX2J1aWxkZXIuZGFydCcgc2hvdyBTZWxlY3RvckNvbnN0cmFpbnRzOwppbXBvcnQgJy4uLy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIuZGFydCcKICAgIHNob3cKICAgICAgICBDbGFzc1N0dWJHZW5lcmF0b3IsCiAgICAgICAgQ29kZUVtaXR0ZXJUYXNrLAogICAgICAgIEVtaXR0ZXIsCiAgICAgICAgSW5zdGFudGlhdGlvblN0dWJHZW5lcmF0b3IsCiAgICAgICAgSW50ZXJjZXB0b3JTdHViR2VuZXJhdG9yLAogICAgICAgIE1haW5DYWxsU3R1YkdlbmVyYXRvciwKICAgICAgICBQYXJhbWV0ZXJTdHViR2VuZXJhdG9yLAogICAgICAgIFJ1bnRpbWVUeXBlR2VuZXJhdG9yLAogICAgICAgIFR5cGVUZXN0UHJvcGVydGllczsKaW1wb3J0ICcuLi9tb2RlbC5kYXJ0JzsKaW1wb3J0ICcuLi9zb3J0ZXIuZGFydCc7CgpwYXJ0ICdjb2xsZWN0b3IuZGFydCc7CnBhcnQgJ2ZpZWxkX3Zpc2l0b3IuZGFydCc7CnBhcnQgJ3JlZ2lzdHJ5LmRhcnQnOwoKLy8vIEJ1aWxkcyBhIHNlbGYtY29udGFpbmVkIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBwcm9ncmFtIHRoYXQgY2FuIHRoZW4gYmUKLy8vIGVtaXR0ZWQgbW9yZSBlYXNpbHkgYnkgdGhlIGluZGl2aWR1YWwgZW1pdHRlcnMuCmNsYXNzIFByb2dyYW1CdWlsZGVyIHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgRGlhZ25vc3RpY1JlcG9ydGVyIF9yZXBvcnRlcjsKICBmaW5hbCBKRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgZmluYWwgSkNvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBPdXRwdXRVbml0RGF0YSBfb3V0cHV0VW5pdERhdGE7CiAgZmluYWwgQ29kZWdlbldvcmxkIF9jb2RlZ2VuV29ybGQ7CiAgZmluYWwgTmF0aXZlQ29kZWdlbkVucXVldWVyIF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXI7CiAgZmluYWwgQmFja2VuZFVzYWdlIF9iYWNrZW5kVXNhZ2U7CiAgZmluYWwgTmF0aXZlRGF0YSBfbmF0aXZlRGF0YTsKICBmaW5hbCBSdW50aW1lVHlwZXNOZWVkIF9ydGlOZWVkOwogIGZpbmFsIEludGVyY2VwdG9yRGF0YSBfaW50ZXJjZXB0b3JEYXRhOwogIGZpbmFsIFJ1bnRpbWVUeXBlc0NoZWNrcyBfcnRpQ2hlY2tzOwogIGZpbmFsIFJ1bnRpbWVUeXBlc0VuY29kZXIgX3J0aUVuY29kZXI7CiAgZmluYWwgUmVjaXBlRW5jb2RlciBfcnRpUmVjaXBlRW5jb2RlcjsKICBmaW5hbCBPbmVTaG90SW50ZXJjZXB0b3JEYXRhIF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhOwogIGZpbmFsIEN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzIF9jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpczsKICBmaW5hbCBNYXA8TWVtYmVyRW50aXR5LCBqcy5FeHByZXNzaW9uPiBfZ2VuZXJhdGVkQ29kZTsKICBmaW5hbCBOYW1lciBfbmFtZXI7CiAgZmluYWwgQ29kZUVtaXR0ZXJUYXNrIF90YXNrOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgSkZpZWxkQW5hbHlzaXMgX2ZpZWxkQW5hbHlzaXM7CiAgZmluYWwgSW5mZXJyZWREYXRhIF9pbmZlcnJlZERhdGE7CiAgZmluYWwgU291cmNlSW5mb3JtYXRpb25TdHJhdGVneSBfc291cmNlSW5mb3JtYXRpb25TdHJhdGVneTsKCiAgLy8vIFRoZSBbU29ydGVyXSB1c2VkIGZvciBvcmRlcmluZyBlbGVtZW50cyBpbiB0aGUgZ2VuZXJhdGVkIEphdmFTY3JpcHQuCiAgZmluYWwgU29ydGVyIF9zb3J0ZXI7CgogIC8vLyBDb250YWlucyB0aGUgY29sbGVjdGVkIGluZm9ybWF0aW9uIHRoZSBwcm9ncmFtIGJ1aWxkZXIgdXNlZCB0byBidWlsZAogIC8vLyB0aGUgbW9kZWwuCiAgLy8gVGhlIGNvbGxlY3RvciB3aWxsIGJlIGZpbGxlZCBvbiB0aGUgZmlyc3QgY2FsbCB0byBgYnVpbGRQcm9ncmFtYC4KICAvLyBJdCBpcyBwdWJsaWNseSBleHBvc2VkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gTmV3IGNvZGUKICAvLyAoYW5kIGluIHBhcnRpY3VsYXIgbmV3IGVtaXR0ZXJzKSBzaG91bGQgbm90IGFjY2VzcyBpdCBvdXRzaWRlIHRoaXMgY2xhc3MuCiAgZmluYWwgQ29sbGVjdG9yIGNvbGxlY3RvcjsKCiAgZmluYWwgUmVnaXN0cnkgX3JlZ2lzdHJ5OwoKICBmaW5hbCBGdW5jdGlvbkVudGl0eSBfbWFpbkZ1bmN0aW9uOwogIGZpbmFsIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBfcnRpTmVlZGVkQ2xhc3NlczsKCiAgLy8vIFRydWUgaWYgdGhlIHByb2dyYW0gc2hvdWxkIHN0b3JlIGZ1bmN0aW9uIHR5cGVzIGluIHRoZSBtZXRhZGF0YS4KICBib29sIF9zdG9yZUZ1bmN0aW9uVHlwZXNJbk1ldGFkYXRhID0gZmFsc2U7CgogIFByb2dyYW1CdWlsZGVyKAogICAgICB0aGlzLl9vcHRpb25zLAogICAgICB0aGlzLl9yZXBvcnRlciwKICAgICAgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LAogICAgICB0aGlzLl9jb21tb25FbGVtZW50cywKICAgICAgdGhpcy5fb3V0cHV0VW5pdERhdGEsCiAgICAgIHRoaXMuX2NvZGVnZW5Xb3JsZCwKICAgICAgdGhpcy5fbmF0aXZlQ29kZWdlbkVucXVldWVyLAogICAgICB0aGlzLl9iYWNrZW5kVXNhZ2UsCiAgICAgIHRoaXMuX25hdGl2ZURhdGEsCiAgICAgIHRoaXMuX3J0aU5lZWQsCiAgICAgIHRoaXMuX2ludGVyY2VwdG9yRGF0YSwKICAgICAgdGhpcy5fcnRpQ2hlY2tzLAogICAgICB0aGlzLl9ydGlFbmNvZGVyLAogICAgICB0aGlzLl9ydGlSZWNpcGVFbmNvZGVyLAogICAgICB0aGlzLl9vbmVTaG90SW50ZXJjZXB0b3JEYXRhLAogICAgICB0aGlzLl9jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcywKICAgICAgdGhpcy5fZ2VuZXJhdGVkQ29kZSwKICAgICAgdGhpcy5fbmFtZXIsCiAgICAgIHRoaXMuX3Rhc2ssCiAgICAgIHRoaXMuX2Nsb3NlZFdvcmxkLAogICAgICB0aGlzLl9maWVsZEFuYWx5c2lzLAogICAgICB0aGlzLl9pbmZlcnJlZERhdGEsCiAgICAgIHRoaXMuX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3ksCiAgICAgIHRoaXMuX3NvcnRlciwKICAgICAgdGhpcy5fcnRpTmVlZGVkQ2xhc3NlcywKICAgICAgdGhpcy5fbWFpbkZ1bmN0aW9uKQogICAgICA6IHRoaXMuY29sbGVjdG9yID0gbmV3IENvbGxlY3RvcigKICAgICAgICAgICAgX29wdGlvbnMsCiAgICAgICAgICAgIF9jb21tb25FbGVtZW50cywKICAgICAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudCwKICAgICAgICAgICAgX291dHB1dFVuaXREYXRhLAogICAgICAgICAgICBfY29kZWdlbldvcmxkLAogICAgICAgICAgICBfbmFtZXIsCiAgICAgICAgICAgIF90YXNrLmVtaXR0ZXIsCiAgICAgICAgICAgIF9uYXRpdmVEYXRhLAogICAgICAgICAgICBfaW50ZXJjZXB0b3JEYXRhLAogICAgICAgICAgICBfb25lU2hvdEludGVyY2VwdG9yRGF0YSwKICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLAogICAgICAgICAgICBfcnRpTmVlZGVkQ2xhc3NlcywKICAgICAgICAgICAgX2dlbmVyYXRlZENvZGUsCiAgICAgICAgICAgIF9zb3J0ZXIpLAogICAgICAgIHRoaXMuX3JlZ2lzdHJ5ID0gbmV3IFJlZ2lzdHJ5KF9vdXRwdXRVbml0RGF0YS5tYWluT3V0cHV0VW5pdCwgX3NvcnRlcik7CgogIC8vLyBNYXBwaW5nIGZyb20gW0NsYXNzRW50aXR5XSB0byBjb25zdHJ1Y3RlZCBbQ2xhc3NdLiBXZSBuZWVkIHRoaXMgdG8KICAvLy8gdXBkYXRlIHRoZSBzdXBlcmNsYXNzIGluIHRoZSBbQ2xhc3NdLgogIGZpbmFsIE1hcDxDbGFzc0VudGl0eSwgQ2xhc3M+IF9jbGFzc2VzID0gPENsYXNzRW50aXR5LCBDbGFzcz57fTsKCiAgLy8vIE1hcHBpbmcgZnJvbSBbT3V0cHV0VW5pdF0gdG8gY29uc3RydWN0ZWQgW0ZyYWdtZW50XS4gV2UgbmVlZCB0aGlzIHRvCiAgLy8vIGdlbmVyYXRlIHRoZSBkZWZlcnJlZExvYWRpbmdNYXAgKHRvIGtub3cgd2hpY2ggaHVua3MgdG8gbG9hZCkuCiAgZmluYWwgTWFwPE91dHB1dFVuaXQsIEZyYWdtZW50PiBfb3V0cHV0cyA9IDxPdXRwdXRVbml0LCBGcmFnbWVudD57fTsKCiAgLy8vIE1hcHBpbmcgZnJvbSBbQ29uc3RhbnRWYWx1ZV0gdG8gY29uc3RydWN0ZWQgW0NvbnN0YW50XS4gV2UgbmVlZCB0aGlzIHRvCiAgLy8vIHVwZGF0ZSBmaWVsZC1pbml0aWFsaXplcnMgdG8gcG9pbnQgdG8gdGhlIENvbnN0YW50TW9kZWwuCiAgZmluYWwgTWFwPENvbnN0YW50VmFsdWUsIENvbnN0YW50PiBfY29uc3RhbnRzID0gPENvbnN0YW50VmFsdWUsIENvbnN0YW50Pnt9OwoKICBTZXQ8Q2xhc3M+IF91bm5lZWRlZE5hdGl2ZUNsYXNzZXM7CgogIC8vLyBDbGFzc2VzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBkdXJpbmcgYSBwcm9maWxlIHJ1bi4KICAvLy8KICAvLy8gVGhlc2UgY2xhc3NlcyBzaG91bGQgbm90IGJlIHNvZnQtZGVmZXJyZWQuCiAgLy8vCiAgLy8vIEFsc28gY29udGFpbnMgY2xhc3NlcyB0aGF0IGFyZSBub3QgdHJhY2tlZCBieSB0aGUgcHJvZmlsZSBydW4gKGxpa2UKICAvLy8gaW50ZXJjZXB0b3JzLCAuLi4pLgogIFNldDxDbGFzc0VudGl0eT4gX25vdFNvZnREZWZlcnJlZDsKCiAgUHJvZ3JhbSBidWlsZFByb2dyYW0oe2Jvb2wgc3RvcmVGdW5jdGlvblR5cGVzSW5NZXRhZGF0YTogZmFsc2V9KSB7CiAgICBjb2xsZWN0b3IuY29sbGVjdCgpOwogICAgX2luaXRpYWxpemVTb2Z0RGVmZXJyZWRNYXAoKTsKCiAgICB0aGlzLl9zdG9yZUZ1bmN0aW9uVHlwZXNJbk1ldGFkYXRhID0gc3RvcmVGdW5jdGlvblR5cGVzSW5NZXRhZGF0YTsKICAgIC8vIE5vdGU6IEluIHJhcmUgY2FzZXMgKG1vc3RseSB0ZXN0cykgb3V0cHV0IHVuaXRzIGNhbiBiZSBlbXB0eS4gVGhpcwogICAgLy8gaGFwcGVucyB3aGVuIHRoZSBkZWZlcnJlZCBjb2RlIGlzIGRlYWQtY29kZSBlbGltaW5hdGVkIGJ1dCB3ZSBzdGlsbCBuZWVkCiAgICAvLyB0byBjaGVjayB0aGF0IHRoZSBsaWJyYXJ5IGhhcyBiZWVuIGxvYWRlZC4KICAgIF9jbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0cwogICAgICAgIC5mb3JFYWNoKF9yZWdpc3RyeS5yZWdpc3Rlck91dHB1dFVuaXQpOwogICAgY29sbGVjdG9yLm91dHB1dENsYXNzTGlzdHMuZm9yRWFjaChfcmVnaXN0cnkucmVnaXN0ZXJDbGFzc2VzKTsKICAgIGNvbGxlY3Rvci5vdXRwdXRTdGF0aWNMaXN0cy5mb3JFYWNoKF9yZWdpc3RyeS5yZWdpc3Rlck1lbWJlcnMpOwogICAgY29sbGVjdG9yLm91dHB1dENvbnN0YW50TGlzdHMuZm9yRWFjaChfcmVnaXN0ZXJDb25zdGFudHMpOwogICAgY29sbGVjdG9yLm91dHB1dFN0YXRpY05vbkZpbmFsRmllbGRMaXN0cy5mb3JFYWNoKF9yZWdpc3RyeS5yZWdpc3Rlck1lbWJlcnMpOwoKICAgIC8vIFdlIGFsd2F5cyBhZGQgdGhlIGN1cnJlbnQgaXNvbGF0ZSBob2xkZXIuCiAgICBfcmVnaXN0ZXJTdGF0aWNTdGF0ZUhvbGRlcigpOwoKICAgIC8vIFdlIG5lZWQgdG8gcnVuIHRoZSBuYXRpdmUtcHJlcGFyYXRpb24gYmVmb3JlIHdlIGJ1aWxkIHRoZSBvdXRwdXQuIFRoZQogICAgLy8gcHJlcGFyYXRpb24gY29kZSwgaW4gdHVybiBuZWVkcyB0aGUgY2xhc3NlcyB0byBiZSBzZXQgdXAuCiAgICAvLyBXZSB0aHVzIGJ1aWxkIHRoZSBjbGFzc2VzIGJlZm9yZSBidWlsZGluZyB0aGVpciBjb250YWluZXJzLgogICAgY29sbGVjdG9yLm91dHB1dENsYXNzTGlzdHMKICAgICAgICAuZm9yRWFjaCgoT3V0cHV0VW5pdCBfLCBMaXN0PENsYXNzRW50aXR5PiBjbGFzc2VzKSB7CiAgICAgIGNsYXNzZXMuZm9yRWFjaChfYnVpbGRDbGFzcyk7CiAgICB9KTsKCiAgICAvLyBSZXNvbHZlIHRoZSBzdXBlcmNsYXNzIHJlZmVyZW5jZXMgYWZ0ZXIgd2UndmUgcHJvY2Vzc2VkIGFsbCB0aGUgY2xhc3Nlcy4KICAgIF9jbGFzc2VzLmZvckVhY2goKENsYXNzRW50aXR5IGNscywgQ2xhc3MgYykgewogICAgICBDbGFzc0VudGl0eSBzdXBlcmNsYXNzID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyk7CiAgICAgIGlmIChzdXBlcmNsYXNzICE9IG51bGwpIHsKICAgICAgICBjLnNldFN1cGVyY2xhc3MoX2NsYXNzZXNbc3VwZXJjbGFzc10pOwogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgYy5zdXBlcmNsYXNzICE9IG51bGwsCiAgICAgICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICAgICAgY2xzLAogICAgICAgICAgICAgICAgIk5vIENsYXNzIGZvciBoYXMgYmVlbiBjcmVhdGVkIGZvciBzdXBlcmNsYXNzICIKICAgICAgICAgICAgICAgICIke3N1cGVyY2xhc3N9IG9mICRjLiIpKTsKICAgICAgfQogICAgICBpZiAoYy5pc1NpbXBsZU1peGluQXBwbGljYXRpb24gfHwgYy5pc1N1cGVyTWl4aW5BcHBsaWNhdGlvbikgewogICAgICAgIENsYXNzRW50aXR5IGVmZmVjdGl2ZU1peGluQ2xhc3MgPQogICAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmdldEVmZmVjdGl2ZU1peGluQ2xhc3MoY2xzKTsKICAgICAgICBjLnNldE1peGluQ2xhc3MoX2NsYXNzZXNbZWZmZWN0aXZlTWl4aW5DbGFzc10pOwogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgYy5taXhpbkNsYXNzICE9IG51bGwsCiAgICAgICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICAgICAgY2xzLAogICAgICAgICAgICAgICAgIk5vIGNsYXNzIGZvciBlZmZlY3RpdmUgbWl4aW4gJHtlZmZlY3RpdmVNaXhpbkNsYXNzfSBvbiAiCiAgICAgICAgICAgICAgICAiJGNscy4iKSk7CiAgICAgIH0KICAgIH0pOwoKICAgIExpc3Q8Q2xhc3M+IG5hdGl2ZUNsYXNzZXMgPSBjb2xsZWN0b3IubmF0aXZlQ2xhc3Nlc0FuZFN1YmNsYXNzZXMKICAgICAgICAubWFwKChDbGFzc0VudGl0eSBjbGFzc0VsZW1lbnQpID0+IF9jbGFzc2VzW2NsYXNzRWxlbWVudF0pCiAgICAgICAgLnRvTGlzdCgpOwoKICAgIFNldDxDbGFzc0VudGl0eT4gaW50ZXJjZXB0b3JDbGFzc2VzTmVlZGVkQnlDb25zdGFudHMgPQogICAgICAgIGNvbGxlY3Rvci5jb21wdXRlSW50ZXJjZXB0b3JzUmVmZXJlbmNlZEZyb21Db25zdGFudHMoKTsKCiAgICBfdW5uZWVkZWROYXRpdmVDbGFzc2VzID0gX3Rhc2submF0aXZlRW1pdHRlci5wcmVwYXJlTmF0aXZlQ2xhc3NlcygKICAgICAgICBuYXRpdmVDbGFzc2VzLCBpbnRlcmNlcHRvckNsYXNzZXNOZWVkZWRCeUNvbnN0YW50cywgX3J0aU5lZWRlZENsYXNzZXMpOwoKICAgIF9hZGRKc0ludGVyb3BTdHVicyhfcmVnaXN0cnkubWFpbkxpYnJhcmllc01hcCk7CgogICAgTWFpbkZyYWdtZW50IG1haW5GcmFnbWVudCA9IF9idWlsZE1haW5GcmFnbWVudChfcmVnaXN0cnkubWFpbkxpYnJhcmllc01hcCk7CiAgICBJdGVyYWJsZTxGcmFnbWVudD4gZGVmZXJyZWRGcmFnbWVudHMgPQogICAgICAgIF9yZWdpc3RyeS5kZWZlcnJlZExpYnJhcmllc01hcC5tYXAoX2J1aWxkRGVmZXJyZWRGcmFnbWVudCk7CgogICAgTGlzdDxGcmFnbWVudD4gZnJhZ21lbnRzID0gbmV3IExpc3Q8RnJhZ21lbnQ+KF9yZWdpc3RyeS5saWJyYXJpZXNNYXBDb3VudCk7CiAgICBmcmFnbWVudHNbMF0gPSBtYWluRnJhZ21lbnQ7CiAgICBmcmFnbWVudHMuc2V0QWxsKDEsIGRlZmVycmVkRnJhZ21lbnRzKTsKCiAgICBfbWFya0VhZ2VyQ2xhc3NlcygpOwoKICAgIExpc3Q8SG9sZGVyPiBob2xkZXJzID0gX3JlZ2lzdHJ5LmhvbGRlcnMudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CgogICAgYm9vbCBuZWVkc05hdGl2ZVN1cHBvcnQgPQogICAgICAgIF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIuaGFzSW5zdGFudGlhdGVkTmF0aXZlQ2xhc3NlczsKCiAgICBhc3NlcnQoIW5lZWRzTmF0aXZlU3VwcG9ydCB8fCBuYXRpdmVDbGFzc2VzLmlzTm90RW1wdHkpOwoKICAgIExpc3Q8anMuVG9rZW5GaW5hbGl6ZXI+IGZpbmFsaXplcnMgPSBbX3Rhc2subWV0YWRhdGFDb2xsZWN0b3JdOwogICAgaWYgKF9uYW1lciBpcyBqcy5Ub2tlbkZpbmFsaXplcikgewogICAgICB2YXIgbmFtaW5nRmluYWxpemVyID0gX25hbWVyOwogICAgICBmaW5hbGl6ZXJzLmFkZChuYW1pbmdGaW5hbGl6ZXIgYXMganMuVG9rZW5GaW5hbGl6ZXIpOwogICAgfQoKICAgIHJldHVybiBuZXcgUHJvZ3JhbShmcmFnbWVudHMsIGhvbGRlcnMsIF9idWlsZExvYWRNYXAoKSwKICAgICAgICBfYnVpbGRUeXBlVG9JbnRlcmNlcHRvck1hcCgpLCBfdGFzay5tZXRhZGF0YUNvbGxlY3RvciwgZmluYWxpemVycywKICAgICAgICBuZWVkc05hdGl2ZVN1cHBvcnQ6IG5lZWRzTmF0aXZlU3VwcG9ydCwKICAgICAgICBvdXRwdXRDb250YWluc0NvbnN0YW50TGlzdDogY29sbGVjdG9yLm91dHB1dENvbnRhaW5zQ29uc3RhbnRMaXN0LAogICAgICAgIGhhc1NvZnREZWZlcnJlZENsYXNzZXM6IF9ub3RTb2Z0RGVmZXJyZWQgIT0gbnVsbCk7CiAgfQoKICB2b2lkIF9tYXJrRWFnZXJDbGFzc2VzKCkgewogICAgX21hcmtFYWdlckludGVyY2VwdG9yQ2xhc3NlcygpOwogIH0KCiAgdm9pZCBfaW5pdGlhbGl6ZVNvZnREZWZlcnJlZE1hcCgpIHsKICAgIHZhciBhbGxvY2F0ZWRDbGFzc2VzUGF0aCA9IF9vcHRpb25zLmV4cGVyaW1lbnRhbEFsbG9jYXRpb25zUGF0aDsKICAgIGlmIChhbGxvY2F0ZWRDbGFzc2VzUGF0aCAhPSBudWxsKSB7CiAgICAgIC8vIFRPRE8oMjk1NzQpOiB0aGUgZm9sbG93aW5nIGJsYWNrbGlzdCBpcyBhZC1ob2MgYW5kIHBvdGVudGlhbGx5CiAgICAgIC8vIGluY29tcGxldGUuIFdlIG5lZWQgdG8gbWFyayBhbGwgY2xhc3NlcyBhcyBibGFjayBsaXN0ZWQsIHRoYXQgYXJlCiAgICAgIC8vIHVzZWQgd2l0aG91dCBjb2RlIGdvaW5nIHRocm91Z2ggdGhlIGNsYXNzJyBjb25zdHJ1Y3Rvci4KICAgICAgdmFyIGJsYWNrTGlzdCA9IFsKICAgICAgICAnZGFydDpfaW50ZXJjZXB0b3JzJywKICAgICAgICAnZGFydDpodG1sJywKICAgICAgICAnZGFydDp0eXBlZF9kYXRhX2ltcGxlbWVudGF0aW9uJywKICAgICAgICAnZGFydDpfbmF0aXZlX3R5cGVkX2RhdGEnCiAgICAgIF0udG9TZXQoKTsKCiAgICAgIC8vIFRPRE8oMjk1NzQpOiB0aGUgY29tcGlsZXIgc2hvdWxkIG5vdCBqdXN0IHVzZSBkYXJ0OmlvIHRvIGdldCB0aGUKICAgICAgLy8gY29udGVudHMgb2YgYSBmaWxlLgogICAgICBGaWxlIGZpbGUgPSBuZXcgRmlsZShhbGxvY2F0ZWRDbGFzc2VzUGF0aCk7CgogICAgICAvLyBUT0RPKDI5NTc0KTogYXJlIHRoZSBmb2xsb3dpbmcgY2hlY2tzIG5lY2Vzc2FyeT8KICAgICAgLy8gVG8gbWFrZSBjb21waWxhdGlvbiBpbiBidWlsZC1zeXN0ZW1zIGVhc2llciwgd2UgaWdub3JlIG5vbi1leGlzdGluZwogICAgICAvLyBvciBlbXB0eSBwcm9maWxlcy4KICAgICAgaWYgKCFmaWxlLmV4aXN0c1N5bmMoKSkgewogICAgICAgIF9yZXBvcnRlci5sb2coIlByb2ZpbGUgZmlsZSBkb2VzIG5vdCBleGlzdDogJGFsbG9jYXRlZENsYXNzZXNQYXRoIik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChmaWxlLmxlbmd0aFN5bmMoKSA9PSAwKSB7CiAgICAgICAgX3JlcG9ydGVyLmxvZygiUHJvZmlsZSBpbmZvcm1hdGlvbiAoYWxsb2NhdGVkIGNsYXNzZXMpIGlzIGVtcHR5LiIpOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgU3RyaW5nIGRhdGEgPSBuZXcgRmlsZShhbGxvY2F0ZWRDbGFzc2VzUGF0aCkucmVhZEFzU3RyaW5nU3luYygpOwogICAgICBTZXQ8U3RyaW5nPiBhbGxvY2F0ZWRDbGFzc2VzS2V5cyA9IGpzb25EZWNvZGUoZGF0YSkua2V5cy50b1NldCgpOwogICAgICBTZXQ8Q2xhc3NFbnRpdHk+IGFsbG9jYXRlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICAgICAgLy8gQ29sbGVjdHMgYWxsIHN1cGVyIGFuZCBtaXhpbiBjbGFzc2VzIG9mIGEgY2xhc3MuCiAgICAgIHZvaWQgY29sbGVjdChDbGFzc0VudGl0eSBlbGVtZW50KSB7CiAgICAgICAgYWxsb2NhdGVkQ2xhc3Nlcy5hZGQoZWxlbWVudCk7CiAgICAgICAgaWYgKF9lbGVtZW50RW52aXJvbm1lbnQuaXNNaXhpbkFwcGxpY2F0aW9uKGVsZW1lbnQpKSB7CiAgICAgICAgICBjb2xsZWN0KF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RWZmZWN0aXZlTWl4aW5DbGFzcyhlbGVtZW50KSk7CiAgICAgICAgfQogICAgICAgIENsYXNzRW50aXR5IHN1cGVyY2xhc3MgPSBfZWxlbWVudEVudmlyb25tZW50LmdldFN1cGVyQ2xhc3MoZWxlbWVudCk7CiAgICAgICAgaWYgKHN1cGVyY2xhc3MgIT0gbnVsbCkgewogICAgICAgICAgY29sbGVjdChzdXBlcmNsYXNzKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIEZvciBldmVyeSBrbm93biBjbGFzcywgc2VlIGlmIGl0IHdhcyBhbGxvY2F0ZWQgaW4gdGhlIHByb2ZpbGUuIElmIHllcywKICAgICAgLy8gY29sbGVjdCBpdHMgZGVwZW5kZW5jaWVzIChzdXBlcnMgYW5kIG1peGlucykgYW5kIG1hcmsgdGhlbSBhcwogICAgICAvLyBub3Qtc29mdC1kZWZlcnJhYmxlLgogICAgICBjb2xsZWN0b3Iub3V0cHV0Q2xhc3NMaXN0cy5mb3JFYWNoKChfLCBMaXN0PENsYXNzRW50aXR5PiBlbGVtZW50cykgewogICAgICAgIGZvciAoQ2xhc3NFbnRpdHkgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICAgICAgLy8gVE9ETygyOTU3NCk6IHNoYXJlIHRoZSBlbmNvZGluZyBvZiB0aGUgZWxlbWVudCB3aXRoIHRoZSBjb2RlCiAgICAgICAgICAvLyB0aGF0IGVtaXRzIHRoZSBwcm9maWxlLXJ1bi4KICAgICAgICAgIHZhciBrZXkgPSAiJHtlbGVtZW50LmxpYnJhcnkuY2Fub25pY2FsVXJpfToke2VsZW1lbnQubmFtZX0iOwogICAgICAgICAgaWYgKGFsbG9jYXRlZENsYXNzZXNLZXlzLmNvbnRhaW5zKGtleSkgfHwKICAgICAgICAgICAgICBfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcENsYXNzKGVsZW1lbnQpIHx8CiAgICAgICAgICAgICAgYmxhY2tMaXN0LmNvbnRhaW5zKGVsZW1lbnQubGlicmFyeS5jYW5vbmljYWxVcmkudG9TdHJpbmcoKSkpIHsKICAgICAgICAgICAgY29sbGVjdChlbGVtZW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgICBfbm90U29mdERlZmVycmVkID0gYWxsb2NhdGVkQ2xhc3NlczsKICAgIH0KICB9CgogIC8vLyBCdWlsZHMgYSBtYXAgZnJvbSBsb2FkSWQgdG8gb3V0cHV0cy10by1sb2FkLgogIE1hcDxTdHJpbmcsIExpc3Q8RnJhZ21lbnQ+PiBfYnVpbGRMb2FkTWFwKCkgewogICAgTWFwPFN0cmluZywgTGlzdDxGcmFnbWVudD4+IGxvYWRNYXAgPSA8U3RyaW5nLCBMaXN0PEZyYWdtZW50Pj57fTsKICAgIF9jbG9zZWRXb3JsZC5vdXRwdXRVbml0RGF0YS5odW5rc1RvTG9hZAogICAgICAgIC5mb3JFYWNoKChTdHJpbmcgbG9hZElkLCBMaXN0PE91dHB1dFVuaXQ+IG91dHB1dFVuaXRzKSB7CiAgICAgIGxvYWRNYXBbbG9hZElkXSA9IG91dHB1dFVuaXRzCiAgICAgICAgICAubWFwKChPdXRwdXRVbml0IHVuaXQpID0+IF9vdXRwdXRzW3VuaXRdKQogICAgICAgICAgLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgfSk7CiAgICByZXR1cm4gbG9hZE1hcDsKICB9CgogIGpzLkV4cHJlc3Npb24gX2J1aWxkVHlwZVRvSW50ZXJjZXB0b3JNYXAoKSB7CiAgICBJbnRlcmNlcHRvclN0dWJHZW5lcmF0b3Igc3R1YkdlbmVyYXRvciA9IG5ldyBJbnRlcmNlcHRvclN0dWJHZW5lcmF0b3IoCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLAogICAgICAgIF90YXNrLmVtaXR0ZXIsCiAgICAgICAgX25hdGl2ZUNvZGVnZW5FbnF1ZXVlciwKICAgICAgICBfbmFtZXIsCiAgICAgICAgX2N1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzLAogICAgICAgIF9jb2RlZ2VuV29ybGQsCiAgICAgICAgX2Nsb3NlZFdvcmxkKTsKICAgIHJldHVybiBzdHViR2VuZXJhdG9yLmdlbmVyYXRlVHlwZVRvSW50ZXJjZXB0b3JNYXAoKTsKICB9CgogIE1haW5GcmFnbWVudCBfYnVpbGRNYWluRnJhZ21lbnQoTGlicmFyaWVzTWFwIGxpYnJhcmllc01hcCkgewogICAgLy8gQ29uc3RydWN0IHRoZSBtYWluIG91dHB1dCBmcm9tIHRoZSBsaWJyYXJpZXMgYW5kIHRoZSByZWdpc3RlcmVkIGhvbGRlcnMuCiAgICBNYWluRnJhZ21lbnQgcmVzdWx0ID0gbmV3IE1haW5GcmFnbWVudCgKICAgICAgICBsaWJyYXJpZXNNYXAub3V0cHV0VW5pdCwKICAgICAgICAiIiwgLy8gVGhlIGVtcHR5IHN0cmluZyBpcyB0aGUgbmFtZSBmb3IgdGhlIG1haW4gb3V0cHV0IGZpbGUuCiAgICAgICAgX2J1aWxkSW52b2tlTWFpbigpLAogICAgICAgIF9idWlsZExpYnJhcmllcyhsaWJyYXJpZXNNYXApLAogICAgICAgIF9idWlsZFN0YXRpY05vbkZpbmFsRmllbGRzKGxpYnJhcmllc01hcCksCiAgICAgICAgX2J1aWxkU3RhdGljTGF6aWx5SW5pdGlhbGl6ZWRGaWVsZHMobGlicmFyaWVzTWFwKSwKICAgICAgICBfYnVpbGRDb25zdGFudHMobGlicmFyaWVzTWFwKSk7CiAgICBfb3V0cHV0c1tsaWJyYXJpZXNNYXAub3V0cHV0VW5pdF0gPSByZXN1bHQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAganMuU3RhdGVtZW50IF9idWlsZEludm9rZU1haW4oKSB7CiAgICByZXR1cm4gTWFpbkNhbGxTdHViR2VuZXJhdG9yLmdlbmVyYXRlSW52b2tlTWFpbigKICAgICAgICBfdGFzay5lbWl0dGVyLCBfbWFpbkZ1bmN0aW9uKTsKICB9CgogIERlZmVycmVkRnJhZ21lbnQgX2J1aWxkRGVmZXJyZWRGcmFnbWVudChMaWJyYXJpZXNNYXAgbGlicmFyaWVzTWFwKSB7CiAgICBEZWZlcnJlZEZyYWdtZW50IHJlc3VsdCA9IG5ldyBEZWZlcnJlZEZyYWdtZW50KAogICAgICAgIGxpYnJhcmllc01hcC5vdXRwdXRVbml0LAogICAgICAgIGRlZmVycmVkUGFydEZpbGVOYW1lKF9vcHRpb25zLCBsaWJyYXJpZXNNYXAubmFtZSwgYWRkRXh0ZW5zaW9uOiBmYWxzZSksCiAgICAgICAgbGlicmFyaWVzTWFwLm5hbWUsCiAgICAgICAgX2J1aWxkTGlicmFyaWVzKGxpYnJhcmllc01hcCksCiAgICAgICAgX2J1aWxkU3RhdGljTm9uRmluYWxGaWVsZHMobGlicmFyaWVzTWFwKSwKICAgICAgICBfYnVpbGRTdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkcyhsaWJyYXJpZXNNYXApLAogICAgICAgIF9idWlsZENvbnN0YW50cyhsaWJyYXJpZXNNYXApKTsKICAgIF9vdXRwdXRzW2xpYnJhcmllc01hcC5vdXRwdXRVbml0XSA9IHJlc3VsdDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBMaXN0PENvbnN0YW50PiBfYnVpbGRDb25zdGFudHMoTGlicmFyaWVzTWFwIGxpYnJhcmllc01hcCkgewogICAgTGlzdDxDb25zdGFudFZhbHVlPiBjb25zdGFudFZhbHVlcyA9CiAgICAgICAgY29sbGVjdG9yLm91dHB1dENvbnN0YW50TGlzdHNbbGlicmFyaWVzTWFwLm91dHB1dFVuaXRdOwogICAgaWYgKGNvbnN0YW50VmFsdWVzID09IG51bGwpIHJldHVybiBjb25zdCA8Q29uc3RhbnQ+W107CiAgICByZXR1cm4gY29uc3RhbnRWYWx1ZXMKICAgICAgICAubWFwKChDb25zdGFudFZhbHVlIHZhbHVlKSA9PiBfY29uc3RhbnRzW3ZhbHVlXSkKICAgICAgICAudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgfQoKICBMaXN0PFN0YXRpY0ZpZWxkPiBfYnVpbGRTdGF0aWNOb25GaW5hbEZpZWxkcyhMaWJyYXJpZXNNYXAgbGlicmFyaWVzTWFwKSB7CiAgICBMaXN0PEZpZWxkRW50aXR5PiBzdGF0aWNOb25GaW5hbEZpZWxkcyA9CiAgICAgICAgY29sbGVjdG9yLm91dHB1dFN0YXRpY05vbkZpbmFsRmllbGRMaXN0c1tsaWJyYXJpZXNNYXAub3V0cHV0VW5pdF07CiAgICBpZiAoc3RhdGljTm9uRmluYWxGaWVsZHMgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IDxTdGF0aWNGaWVsZD5bXTsKCiAgICByZXR1cm4gc3RhdGljTm9uRmluYWxGaWVsZHMubWFwKF9idWlsZFN0YXRpY0ZpZWxkKS50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICB9CgogIFN0YXRpY0ZpZWxkIF9idWlsZFN0YXRpY0ZpZWxkKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIEZpZWxkQW5hbHlzaXNEYXRhIGZpZWxkRGF0YSA9IF9maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShlbGVtZW50KTsKICAgIENvbnN0YW50VmFsdWUgaW5pdGlhbFZhbHVlID0gZmllbGREYXRhLmluaXRpYWxWYWx1ZTsKICAgIGpzLkV4cHJlc3Npb24gY29kZTsKICAgIGlmIChpbml0aWFsVmFsdWUgIT0gbnVsbCkgewogICAgICAvLyBUT0RPKHphcmFoKTogVGhlIGhvbGRlciBzaG91bGQgbm90IGJlIHJlZ2lzdGVyZWQgZHVyaW5nIGJ1aWxkaW5nIG9mCiAgICAgIC8vIGEgc3RhdGljIGZpZWxkLgogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJIb2xkZXIoX25hbWVyLmdsb2JhbE9iamVjdEZvckNvbnN0YW50KGluaXRpYWxWYWx1ZSksCiAgICAgICAgICBpc0NvbnN0YW50c0hvbGRlcjogdHJ1ZSk7CiAgICAgIGNvZGUgPSBfdGFzay5lbWl0dGVyLmNvbnN0YW50UmVmZXJlbmNlKGluaXRpYWxWYWx1ZSk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoZmllbGREYXRhLmlzRWFnZXIpOwogICAgICBjb2RlID0gX2dlbmVyYXRlZENvZGVbZWxlbWVudF07CiAgICB9CiAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuZ2xvYmFsUHJvcGVydHlOYW1lRm9yTWVtYmVyKGVsZW1lbnQpOwoKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB3ZSBzaG91bGRuJ3QgdXBkYXRlIHRoZSByZWdpc3RyeSBpbiB0aGUgbWlkZGxlIG9mCiAgICAvLyBidWlsZGluZyBhIHN0YXRpYyBmaWVsZC4gKE5vdGUgdGhhdCB0aGUgc3RhdGljLXN0YXRlIGhvbGRlciB3YXMKICAgIC8vIGFscmVhZHkgcmVnaXN0ZXJlZCBlYXJsaWVyLCBhbmQgdGhhdCB3ZSBqdXN0IGNhbGwgdGhlIHJlZ2lzdGVyIHRvIGdldAogICAgLy8gdGhlIGhvbGRlci1pbnN0YW5jZS4KICAgIHJldHVybiBuZXcgU3RhdGljRmllbGQoCiAgICAgICAgZWxlbWVudCwgbmFtZSwgbnVsbCwgX3JlZ2lzdGVyU3RhdGljU3RhdGVIb2xkZXIoKSwgY29kZSwKICAgICAgICBpc0ZpbmFsOiBmYWxzZSwKICAgICAgICBpc0xhenk6IGZhbHNlLAogICAgICAgIGlzSW5pdGlhbGl6ZWRCeUNvbnN0YW50OiBpbml0aWFsVmFsdWUgIT0gbnVsbCk7CiAgfQoKICBMaXN0PFN0YXRpY0ZpZWxkPiBfYnVpbGRTdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkcygKICAgICAgTGlicmFyaWVzTWFwIGxpYnJhcmllc01hcCkgewogICAgTGlzdDxGaWVsZEVudGl0eT4gbGF6eUZpZWxkcyA9IFtdOwogICAgX2NvZGVnZW5Xb3JsZC5mb3JFYWNoU3RhdGljRmllbGQoKEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICAgIGlmIChfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpLmlzTGF6eSAmJgogICAgICAgICAgX291dHB1dFVuaXREYXRhLm91dHB1dFVuaXRGb3JNZW1iZXIoZmllbGQpID09CiAgICAgICAgICAgICAgbGlicmFyaWVzTWFwLm91dHB1dFVuaXQpIHsKICAgICAgICBsYXp5RmllbGRzLmFkZChmaWVsZCk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIF9zb3J0ZXIKICAgICAgICAuc29ydE1lbWJlcnMobGF6eUZpZWxkcykKICAgICAgICAubWFwKF9idWlsZExhenlGaWVsZCkKICAgICAgICAud2hlcmUoKGZpZWxkKSA9PiBmaWVsZCAhPSBudWxsKSAvLyBIYXBwZW5zIHdoZW4gdGhlIGZpZWxkIHdhcyB1bnVzZWQuCiAgICAgICAgLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogIH0KCiAgU3RhdGljRmllbGQgX2J1aWxkTGF6eUZpZWxkKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzLkV4cHJlc3Npb24gY29kZSA9IF9nZW5lcmF0ZWRDb2RlW2VsZW1lbnRdOwogICAgLy8gVGhlIGNvZGUgaXMgbnVsbCBpZiB3ZSBlbmRlZCB1cCBub3QgbmVlZGluZyB0aGUgbGF6aWx5CiAgICAvLyBpbml0aWFsaXplZCBmaWVsZCBhZnRlciBhbGwgYmVjYXVzZSBvZiBjb25zdGFudCBmb2xkaW5nCiAgICAvLyBiZWZvcmUgY29kZSBnZW5lcmF0aW9uLgogICAgaWYgKGNvZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CgogICAganMuTmFtZSBuYW1lID0gX25hbWVyLmdsb2JhbFByb3BlcnR5TmFtZUZvck1lbWJlcihlbGVtZW50KTsKICAgIGpzLk5hbWUgZ2V0dGVyTmFtZSA9IF9uYW1lci5sYXp5SW5pdGlhbGl6ZXJOYW1lKGVsZW1lbnQpOwogICAgLy8gVE9ETyhmbG9pdHNjaCk6IHdlIHNob3VsZG4ndCB1cGRhdGUgdGhlIHJlZ2lzdHJ5IGluIHRoZSBtaWRkbGUgb2YKICAgIC8vIGJ1aWxkaW5nIGEgc3RhdGljIGZpZWxkLiAoTm90ZSB0aGF0IHRoZSBzdGF0aWMtc3RhdGUgaG9sZGVyIHdhcwogICAgLy8gYWxyZWFkeSByZWdpc3RlcmVkIGVhcmxpZXIsIGFuZCB0aGF0IHdlIGp1c3QgY2FsbCB0aGUgcmVnaXN0ZXIgdG8gZ2V0CiAgICAvLyB0aGUgaG9sZGVyLWluc3RhbmNlLgogICAgcmV0dXJuIG5ldyBTdGF0aWNGaWVsZCgKICAgICAgICBlbGVtZW50LCBuYW1lLCBnZXR0ZXJOYW1lLCBfcmVnaXN0ZXJTdGF0aWNTdGF0ZUhvbGRlcigpLCBjb2RlLAogICAgICAgIGlzRmluYWw6ICFlbGVtZW50LmlzQXNzaWduYWJsZSwgaXNMYXp5OiB0cnVlKTsKICB9CgogIExpc3Q8TGlicmFyeT4gX2J1aWxkTGlicmFyaWVzKExpYnJhcmllc01hcCBsaWJyYXJpZXNNYXApIHsKICAgIExpc3Q8TGlicmFyeT4gbGlicmFyaWVzID0gbmV3IExpc3Q8TGlicmFyeT4obGlicmFyaWVzTWFwLmxlbmd0aCk7CiAgICBpbnQgY291bnQgPSAwOwogICAgbGlicmFyaWVzTWFwLmZvckVhY2goKExpYnJhcnlFbnRpdHkgbGlicmFyeSwgTGlzdDxDbGFzc0VudGl0eT4gY2xhc3NlcywKICAgICAgICBMaXN0PE1lbWJlckVudGl0eT4gbWVtYmVycykgewogICAgICBsaWJyYXJpZXNbY291bnQrK10gPSBfYnVpbGRMaWJyYXJ5KGxpYnJhcnksIGNsYXNzZXMsIG1lbWJlcnMpOwogICAgfSk7CiAgICByZXR1cm4gbGlicmFyaWVzOwogIH0KCiAgdm9pZCBfYWRkSnNJbnRlcm9wU3R1YnMoTGlicmFyaWVzTWFwIGxpYnJhcmllc01hcCkgewogICAgaWYgKF9jbGFzc2VzLmNvbnRhaW5zS2V5KF9jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykpIHsKICAgICAganMuTmFtZSB0b1N0cmluZ0ludm9jYXRpb24gPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUoU2VsZWN0b3JzLnRvU3RyaW5nXyk7CiAgICAgIC8vIFRPRE8oamFjb2JyKTogcmVnaXN0ZXIgdG9TdHJpbmcgYXMgdXNlZCBzbyB0aGF0IGl0IGlzIGFsd2F5cyBhY2Nlc3NpYmxlCiAgICAgIC8vIGZyb20gSmF2YVNjcmlwdC4KICAgICAgX2NsYXNzZXNbX2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzXS5jYWxsU3R1YnMuYWRkKF9idWlsZFN0dWJNZXRob2QoCiAgICAgICAgICBuZXcgU3RyaW5nQmFja2VkTmFtZSgidG9TdHJpbmciKSwKICAgICAgICAgIGpzLmpzKCdmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXMuIyh0aGlzKSB9JywgdG9TdHJpbmdJbnZvY2F0aW9uKSkpOwogICAgfQoKICAgIC8vIFdlIGFkZCBhbGwgbWVtYmVycyBmcm9tIGNsYXNzZXMgbWFya2VkIHdpdGggaXNKc0ludGVyb3AgdG8gdGhlIGJhc2UKICAgIC8vIEludGVyY2VwdG9yIGNsYXNzIHdpdGggaW1wbGVtZW50YXRpb25zIHRoYXQgZGlyZWN0bHkgY2FsbCB0aGUKICAgIC8vIGNvcnJlc3BvbmRpbmcgSmF2YVNjcmlwdCBtZW1iZXIuIFdlIGRvIG5vdCBhdHRlbXB0IHRvIGJpbmQgdGhpcyB3aGVuCiAgICAvLyB0ZWFyaW5nIG9mZiBKYXZhU2NyaXB0IG1ldGhvZHMgYXMgd2UgY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gY2FsbGluZwogICAgLy8gYSByZWd1bGFyIGdldHRlciB0aGF0IHJldHVybnMgYSBKYXZhU2NyaXB0IGZ1bmN0aW9uIGFuZCB0ZWFyaW5nIG9mZgogICAgLy8gYSBtZXRob2QgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUgZXhpc3QgbXVsdGlwbGUgSmF2YVNjcmlwdCBjbGFzc2VzCiAgICAvLyB0aGF0IGNvbmZsaWN0IG9uIHdoZXRoZXIgdGhlIG1lbWJlciBpcyBhIGdldHRlciBvciBhIG1ldGhvZC4KICAgIENsYXNzIGludGVyY2VwdG9yQ2xhc3MgPSBfY2xhc3Nlc1tfY29tbW9uRWxlbWVudHMuanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3NdOwogICAgU2V0PFN0cmluZz4gc3R1Yk5hbWVzID0ge307CiAgICBsaWJyYXJpZXNNYXAKICAgICAgICAuZm9yRWFjaCgoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBMaXN0PENsYXNzRW50aXR5PiBjbGFzc0VsZW1lbnRzLCBfKSB7CiAgICAgIGZvciAoQ2xhc3NFbnRpdHkgY2xzIGluIGNsYXNzRWxlbWVudHMpIHsKICAgICAgICBpZiAoX25hdGl2ZURhdGEuaXNKc0ludGVyb3BDbGFzcyhjbHMpKSB7CiAgICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hMb2NhbENsYXNzTWVtYmVyKGNscywKICAgICAgICAgICAgICAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICAgICAgICBTdHJpbmcganNOYW1lID0KICAgICAgICAgICAgICAgIF9uYXRpdmVEYXRhLmNvbXB1dGVVbmVzY2FwZWRKU0ludGVyb3BOYW1lKG1lbWJlci5uYW1lKTsKICAgICAgICAgICAgaWYgKCFtZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuOwogICAgICAgICAgICBpZiAobWVtYmVyLmlzR2V0dGVyIHx8IG1lbWJlci5pc0ZpZWxkIHx8IG1lbWJlci5pc0Z1bmN0aW9uKSB7CiAgICAgICAgICAgICAgSXRlcmFibGU8U2VsZWN0b3I+IHNlbGVjdG9ycyA9CiAgICAgICAgICAgICAgICAgIF9jb2RlZ2VuV29ybGQuZ2V0dGVySW52b2NhdGlvbnNCeU5hbWUobWVtYmVyLm5hbWUpOwogICAgICAgICAgICAgIGlmIChzZWxlY3RvcnMgIT0gbnVsbCAmJiAhc2VsZWN0b3JzLmlzRW1wdHkpIHsKICAgICAgICAgICAgICAgIGZvciAoU2VsZWN0b3Igc2VsZWN0b3IgaW4gc2VsZWN0b3JzKSB7CiAgICAgICAgICAgICAgICAgIGpzLk5hbWUgc3R1Yk5hbWUgPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUoc2VsZWN0b3IpOwogICAgICAgICAgICAgICAgICBpZiAoc3R1Yk5hbWVzLmFkZChzdHViTmFtZS5rZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JDbGFzcy5jYWxsU3R1YnMuYWRkKF9idWlsZFN0dWJNZXRob2Qoc3R1Yk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIGpzLmpzKCdmdW5jdGlvbihvYmopIHsgcmV0dXJuIG9iai4jIH0nLCBbanNOYW1lXSksCiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IG1lbWJlcikpOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobWVtYmVyLmlzU2V0dGVyIHx8IChtZW1iZXIuaXNGaWVsZCAmJiAhbWVtYmVyLmlzQ29uc3QpKSB7CiAgICAgICAgICAgICAgSXRlcmFibGU8U2VsZWN0b3I+IHNlbGVjdG9ycyA9CiAgICAgICAgICAgICAgICAgIF9jb2RlZ2VuV29ybGQuc2V0dGVySW52b2NhdGlvbnNCeU5hbWUobWVtYmVyLm5hbWUpOwogICAgICAgICAgICAgIGlmIChzZWxlY3RvcnMgIT0gbnVsbCAmJiAhc2VsZWN0b3JzLmlzRW1wdHkpIHsKICAgICAgICAgICAgICAgIHZhciBzdHViTmFtZSA9IF9uYW1lci5zZXR0ZXJGb3JNZW1iZXIobWVtYmVyKTsKICAgICAgICAgICAgICAgIGlmIChzdHViTmFtZXMuYWRkKHN0dWJOYW1lLmtleSkpIHsKICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JDbGFzcy5jYWxsU3R1YnMuYWRkKF9idWlsZFN0dWJNZXRob2Qoc3R1Yk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBqcy5qcygnZnVuY3Rpb24ob2JqLCB2KSB7IHJldHVybiBvYmouIyA9IHYgfScsIFtqc05hbWVdKSwKICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IG1lbWJlcikpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gR2VuZXJhdGluZyBzdHVicyBmb3IgZGlyZWN0IGNhbGxzIGFuZCBzdHVicyBmb3IgY2FsbC10aHJvdWdoCiAgICAgICAgICAgIC8vIG9mIGdldHRlcnMgdGhhdCBoYXBwZW4gdG8gYmUgZnVuY3Rpb25zLgogICAgICAgICAgICBib29sIGlzRnVuY3Rpb25MaWtlID0gZmFsc2U7CiAgICAgICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPSBudWxsOwoKICAgICAgICAgICAgaWYgKG1lbWJlci5pc0Z1bmN0aW9uKSB7CiAgICAgICAgICAgICAgRnVuY3Rpb25FbnRpdHkgZm4gPSBtZW1iZXI7CiAgICAgICAgICAgICAgZnVuY3Rpb25UeXBlID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoZm4pOwogICAgICAgICAgICB9IGVsc2UgaWYgKG1lbWJlci5pc0dldHRlcikgewogICAgICAgICAgICAgIGlzRnVuY3Rpb25MaWtlID0gdHJ1ZTsKICAgICAgICAgICAgfSAvLyBUT0RPKGphY29icik6IGhhbmRsZSBmaWVsZCBlbGVtZW50cy4KCiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uTGlrZSB8fCBmdW5jdGlvblR5cGUgIT0gbnVsbCkgewogICAgICAgICAgICAgIGludCBtaW5BcmdzOwogICAgICAgICAgICAgIGludCBtYXhBcmdzOwogICAgICAgICAgICAgIGlmIChmdW5jdGlvblR5cGUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgbWluQXJncyA9IGZ1bmN0aW9uVHlwZS5wYXJhbWV0ZXJUeXBlcy5sZW5ndGg7CiAgICAgICAgICAgICAgICBtYXhBcmdzID0gbWluQXJncyArIGZ1bmN0aW9uVHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLmxlbmd0aDsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgbWluQXJncyA9IDA7CiAgICAgICAgICAgICAgICBtYXhBcmdzID0gMzI3Njc7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHZhciBzZWxlY3RvcnMgPSBfY29kZWdlbldvcmxkLmludm9jYXRpb25zQnlOYW1lKG1lbWJlci5uYW1lKTsKICAgICAgICAgICAgICAvLyBOYW1lZCBhcmd1bWVudHMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkLiBJbiB0aGUgZnV0dXJlIHdlCiAgICAgICAgICAgICAgLy8gbWF5IHdhbnQgdG8gbWFwIG5hbWVkIGFyZ3VtZW50cyB0byBhbiBvYmplY3QgbGl0ZXJhbCBjb250YWluaW5nCiAgICAgICAgICAgICAgLy8gYWxsIG5hbWVkIGFyZ3VtZW50cy4KICAgICAgICAgICAgICBpZiAoc2VsZWN0b3JzICE9IG51bGwgJiYgIXNlbGVjdG9ycy5pc0VtcHR5KSB7CiAgICAgICAgICAgICAgICBmb3IgKHZhciBzZWxlY3RvciBpbiBzZWxlY3RvcnMua2V5cykgewogICAgICAgICAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBhcml0eSBtYXRjaGVzIHRoaXMgbWVtYmVyLgogICAgICAgICAgICAgICAgICB2YXIgYXJndW1lbnRDb3VudCA9IHNlbGVjdG9yLmFyZ3VtZW50Q291bnQ7CiAgICAgICAgICAgICAgICAgIC8vIEpTIGludGVyb3AgZG9lcyBub3Qgc3VwcG9ydCBuYW1lZCBhcmd1bWVudHMuCiAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci5uYW1lZEFyZ3VtZW50Q291bnQgPiAwKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPCBtaW5BcmdzKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPiBtYXhBcmdzKSBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgdmFyIHN0dWJOYW1lID0gX25hbWVyLmludm9jYXRpb25OYW1lKHNlbGVjdG9yKTsKICAgICAgICAgICAgICAgICAgaWYgKCFzdHViTmFtZXMuYWRkKHN0dWJOYW1lLmtleSkpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICB2YXIgcGFyYW1ldGVycyA9CiAgICAgICAgICAgICAgICAgICAgICBuZXcgTGlzdDxTdHJpbmc+LmdlbmVyYXRlKGFyZ3VtZW50Q291bnQsIChpKSA9PiAncCRpJyk7CgogICAgICAgICAgICAgICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IGdlbmVyYXRlIHRoZSBzYW1lIHN0dWIgbWV0aG9kIGZvciBkaXJlY3QKICAgICAgICAgICAgICAgICAgLy8gY2FsbHMgYW5kIGNhbGwtdGhyb3VnaHMgb2YgZ2V0dGVycyBzbyB0aGF0IGNhbGxpbmcgYQogICAgICAgICAgICAgICAgICAvLyBnZXR0ZXIgdGhhdCByZXR1cm5zIGEgZnVuY3Rpb24gYmVoYXZlcyB0aGUgc2FtZSBhcyBjYWxsaW5nCiAgICAgICAgICAgICAgICAgIC8vIGEgbWV0aG9kLiBUaGlzIGlzIGhlbHBmdWwgYXMgbWFueSB0eXBlZCBKYXZhU2NyaXB0IEFQSXMKICAgICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBtZW1iZXIgZnVuY3Rpb25zIHdpdGggZ2V0dGVycyB0aGF0IHJldHVybgogICAgICAgICAgICAgICAgICAvLyBmdW5jdGlvbnMuIFRoZSBiZWhhdmlvciBvZiB0aGlzIHNvbHV0aW9uIG1hdGNoZXMgSmF2YVNjcmlwdAogICAgICAgICAgICAgICAgICAvLyBiZWhhdmlvciBpbXBsaWNpdGx5IGJpbmRpbmcgdGhpcyBvbmx5IHdoZW4gSmF2YVNjcmlwdAogICAgICAgICAgICAgICAgICAvLyB3b3VsZC4KICAgICAgICAgICAgICAgICAgaW50ZXJjZXB0b3JDbGFzcy5jYWxsU3R1YnMuYWRkKF9idWlsZFN0dWJNZXRob2QoCiAgICAgICAgICAgICAgICAgICAgICBzdHViTmFtZSwKICAgICAgICAgICAgICAgICAgICAgIGpzLmpzKCdmdW5jdGlvbihyZWNlaXZlciwgIykgeyByZXR1cm4gcmVjZWl2ZXIuIygjKSB9JywKICAgICAgICAgICAgICAgICAgICAgICAgICBbcGFyYW1ldGVycywganNOYW1lLCBwYXJhbWV0ZXJzXSksCiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBtZW1iZXIpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQoKICAvLyBOb3RlIHRoYXQgYSBsaWJyYXJ5LWVsZW1lbnQgbWF5IGhhdmUgbXVsdGlwbGUgW0xpYnJhcnldcywgaWYgaXQgaXMgc3BsaXQKICAvLyBpbnRvIG11bHRpcGxlIG91dHB1dCB1bml0cy4KICBMaWJyYXJ5IF9idWlsZExpYnJhcnkoTGlicmFyeUVudGl0eSBsaWJyYXJ5LCBMaXN0PENsYXNzRW50aXR5PiBjbGFzc0VsZW1lbnRzLAogICAgICBMaXN0PE1lbWJlckVudGl0eT4gbWVtYmVyRWxlbWVudHMpIHsKICAgIFN0cmluZyB1cmkgPSBsaWJyYXJ5LmNhbm9uaWNhbFVyaS50b1N0cmluZygpOwoKICAgIExpc3Q8U3RhdGljTWV0aG9kPiBzdGF0aWNzID0gbWVtYmVyRWxlbWVudHMKICAgICAgICAud2hlcmUoKGUpID0+ICFlLmlzRmllbGQpCiAgICAgICAgLmNhc3Q8RnVuY3Rpb25FbnRpdHk+KCkKICAgICAgICAubWFwPFN0YXRpY01ldGhvZD4oX2J1aWxkU3RhdGljTWV0aG9kKQogICAgICAgIC50b0xpc3QoKTsKCiAgICBpZiAobGlicmFyeSA9PSBfY29tbW9uRWxlbWVudHMuaW50ZXJjZXB0b3JzTGlicmFyeSkgewogICAgICBzdGF0aWNzLmFkZEFsbChfZ2VuZXJhdGVHZXRJbnRlcmNlcHRvck1ldGhvZHMoKSk7CiAgICAgIHN0YXRpY3MuYWRkQWxsKF9nZW5lcmF0ZU9uZVNob3RJbnRlcmNlcHRvcnMoKSk7CiAgICB9CgogICAgTGlzdDxDbGFzcz4gY2xhc3NlcyA9IGNsYXNzRWxlbWVudHMKICAgICAgICAubWFwKChDbGFzc0VudGl0eSBjbGFzc0VsZW1lbnQpID0+IF9jbGFzc2VzW2NsYXNzRWxlbWVudF0pCiAgICAgICAgLndoZXJlKChDbGFzcyBjbHMpID0+CiAgICAgICAgICAgICFjbHMuaXNOYXRpdmUgfHwgIV91bm5lZWRlZE5hdGl2ZUNsYXNzZXMuY29udGFpbnMoY2xzKSkKICAgICAgICAudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CgogICAgYm9vbCB2aXNpdFN0YXRpY3MgPSB0cnVlOwogICAgTGlzdDxGaWVsZD4gc3RhdGljRmllbGRzRm9yUmVmbGVjdGlvbiA9CiAgICAgICAgX2J1aWxkRmllbGRzKGxpYnJhcnk6IGxpYnJhcnksIHZpc2l0U3RhdGljczogdmlzaXRTdGF0aWNzKTsKCiAgICByZXR1cm4gbmV3IExpYnJhcnkoCiAgICAgICAgbGlicmFyeSwgdXJpLCBzdGF0aWNzLCBjbGFzc2VzLCBzdGF0aWNGaWVsZHNGb3JSZWZsZWN0aW9uKTsKICB9CgogIGJvb2wgX2lzU29mdERlZmVycmVkKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBfbm90U29mdERlZmVycmVkICE9IG51bGwgJiYgIV9ub3RTb2Z0RGVmZXJyZWQuY29udGFpbnMoZWxlbWVudCk7CiAgfQoKICBDbGFzcyBfYnVpbGRDbGFzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIGJvb2wgb25seUZvclJ0aSA9IGNvbGxlY3Rvci5jbGFzc2VzT25seU5lZWRlZEZvclJ0aS5jb250YWlucyhjbHMpOwogICAgYm9vbCBoYXNSdGlGaWVsZCA9IF9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGNscyk7CiAgICBpZiAoX25hdGl2ZURhdGEuaXNKc0ludGVyb3BDbGFzcyhjbHMpKSB7CiAgICAgIC8vIFRPRE8oamFjb2JyKTogY2hlY2sgd2hldGhlciB0aGUgY2xhc3MgaGFzIGFueSBhY3RpdmUgc3RhdGljIGZpZWxkcwogICAgICAvLyBpZiBpdCBkb2VzIG5vdCB3ZSBjYW4gc3VwcHJlc3MgaXQgY29tcGxldGVseS4KICAgICAgb25seUZvclJ0aSA9IHRydWU7CiAgICB9CiAgICBib29sIGlzQ2xvc3VyZUJhc2VDbGFzcyA9IGNscyA9PSBfY29tbW9uRWxlbWVudHMuY2xvc3VyZUNsYXNzOwoKICAgIExpc3Q8TWV0aG9kPiBtZXRob2RzID0gW107CiAgICBMaXN0PFN0dWJNZXRob2Q+IGNhbGxTdHVicyA9IDxTdHViTWV0aG9kPltdOwoKICAgIENsYXNzU3R1YkdlbmVyYXRvciBjbGFzc1N0dWJHZW5lcmF0b3IgPSBuZXcgQ2xhc3NTdHViR2VuZXJhdG9yKAogICAgICAgIF90YXNrLmVtaXR0ZXIsIF9jb21tb25FbGVtZW50cywgX25hbWVyLCBfY29kZWdlbldvcmxkLCBfY2xvc2VkV29ybGQsCiAgICAgICAgZW5hYmxlTWluaWZpY2F0aW9uOiBfb3B0aW9ucy5lbmFibGVNaW5pZmljYXRpb24pOwogICAgUnVudGltZVR5cGVHZW5lcmF0b3IgcnVudGltZVR5cGVHZW5lcmF0b3IgPSBuZXcgUnVudGltZVR5cGVHZW5lcmF0b3IoCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLAogICAgICAgIF9vdXRwdXRVbml0RGF0YSwKICAgICAgICBfdGFzaywKICAgICAgICBfbmFtZXIsCiAgICAgICAgX3J0aUNoZWNrcywKICAgICAgICBfcnRpRW5jb2Rlcik7CgogICAgdm9pZCB2aXNpdEluc3RhbmNlTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgICAgaWYgKCFtZW1iZXIuaXNBYnN0cmFjdCAmJiAhbWVtYmVyLmlzRmllbGQpIHsKICAgICAgICBpZiAobWVtYmVyIGlzISBKU2lnbmF0dXJlTWV0aG9kKSB7CiAgICAgICAgICBNZXRob2QgbWV0aG9kID0gX2J1aWxkTWV0aG9kKG1lbWJlcik7CiAgICAgICAgICBpZiAobWV0aG9kICE9IG51bGwpIG1ldGhvZHMuYWRkKG1ldGhvZCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChtZW1iZXIuaXNHZXR0ZXIgfHwgbWVtYmVyLmlzRmllbGQpIHsKICAgICAgICBNYXA8U2VsZWN0b3IsIFNlbGVjdG9yQ29uc3RyYWludHM+IHNlbGVjdG9ycyA9CiAgICAgICAgICAgIF9jb2RlZ2VuV29ybGQuaW52b2NhdGlvbnNCeU5hbWUobWVtYmVyLm5hbWUpOwogICAgICAgIGlmIChzZWxlY3RvcnMgIT0gbnVsbCAmJiAhc2VsZWN0b3JzLmlzRW1wdHkpIHsKICAgICAgICAgIE1hcDxqcy5OYW1lLCBqcy5FeHByZXNzaW9uPiBjYWxsU3R1YnNGb3JNZW1iZXIgPQogICAgICAgICAgICAgIGNsYXNzU3R1YkdlbmVyYXRvci5nZW5lcmF0ZUNhbGxTdHVic0ZvckdldHRlcihtZW1iZXIsIHNlbGVjdG9ycyk7CiAgICAgICAgICBjYWxsU3R1YnNGb3JNZW1iZXIuZm9yRWFjaCgoanMuTmFtZSBuYW1lLCBqcy5FeHByZXNzaW9uIGNvZGUpIHsKICAgICAgICAgICAgY2FsbFN0dWJzLmFkZChfYnVpbGRTdHViTWV0aG9kKG5hbWUsIGNvZGUsIGVsZW1lbnQ6IG1lbWJlcikpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdm9pZCB2aXNpdE1lbWJlcihNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgIGlmIChtZW1iZXIuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICAgIHZpc2l0SW5zdGFuY2VNZW1iZXIobWVtYmVyKTsKICAgICAgfQogICAgfQoKICAgIExpc3Q8U3R1Yk1ldGhvZD4gbm9TdWNoTWV0aG9kU3R1YnMgPSA8U3R1Yk1ldGhvZD5bXTsKCiAgICBpZiAoX2JhY2tlbmRVc2FnZS5pc05vU3VjaE1ldGhvZFVzZWQgJiYKICAgICAgICBjbHMgPT0gX2NvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKSB7CiAgICAgIE1hcDxqcy5OYW1lLCBTZWxlY3Rvcj4gc2VsZWN0b3JzID0KICAgICAgICAgIGNsYXNzU3R1YkdlbmVyYXRvci5jb21wdXRlU2VsZWN0b3JzRm9yTnNtSGFuZGxlcnMoKTsKICAgICAgc2VsZWN0b3JzLmZvckVhY2goKGpzLk5hbWUgbmFtZSwgU2VsZWN0b3Igc2VsZWN0b3IpIHsKICAgICAgICAvLyBJZiB0aGUgcHJvZ3JhbSBjb250YWlucyBgY29uc3QgU3ltYm9sYCBuYW1lcyB3ZSBoYXZlIHRvIHJldGFpbiB0aGVtLgogICAgICAgIFN0cmluZyBzZWxlY3Rvck5hbWUgPSBzZWxlY3Rvci5uYW1lOwogICAgICAgIGlmIChzZWxlY3Rvci5pc1NldHRlcikgc2VsZWN0b3JOYW1lID0gIiRzZWxlY3Rvck5hbWU9IjsKICAgICAgICBub1N1Y2hNZXRob2RTdHVicy5hZGQoCiAgICAgICAgICAgIGNsYXNzU3R1YkdlbmVyYXRvci5nZW5lcmF0ZVN0dWJGb3JOb1N1Y2hNZXRob2QobmFtZSwgc2VsZWN0b3IpKTsKICAgICAgfSk7CiAgICB9CgogICAgaWYgKGlzQ2xvc3VyZUJhc2VDbGFzcykgewogICAgICAvLyBXZSBhZGQgYSBzcGVjaWFsIGdldHRlciB0byBhbGxvdyBmb3IgdGVhcmluZyBvZmYgYSBjbG9zdXJlIGZyb20gaXRzZWxmLgogICAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuZ2V0dGVyRm9yTWVtYmVyKE5hbWVzLmNhbGwpOwogICAgICBqcy5GdW4gZnVuY3Rpb24gPSBqcy5qcygnZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9Jyk7CiAgICAgIGNhbGxTdHVicy5hZGQoX2J1aWxkU3R1Yk1ldGhvZChuYW1lLCBmdW5jdGlvbikpOwogICAgfQoKICAgIGlmIChfY29tbW9uRWxlbWVudHMuaXNJbnN0YW50aWF0aW9uQ2xhc3MoY2xzKSAmJiAhb25seUZvclJ0aSkgewogICAgICBjYWxsU3R1YnMuYWRkQWxsKF9nZW5lcmF0ZUluc3RhbnRpYXRpb25TdHVicyhjbHMpKTsKICAgIH0KCiAgICAvLyBNaXhpbkFwcGxpY2F0aW9ucyBydW4gdGhyb3VnaCB0aGUgbWVtYmVycyBvZiB0aGVpciBtaXhpbi4gSGVyZSwgd2UgYXJlCiAgICAvLyBvbmx5IGludGVyZXN0ZWQgaW4gZGlyZWN0IG1lbWJlcnMuCiAgICBib29sIGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uID0gZmFsc2U7CiAgICBpZiAoIW9ubHlGb3JSdGkpIHsKICAgICAgaWYgKF9lbGVtZW50RW52aXJvbm1lbnQuaXNTdXBlck1peGluQXBwbGljYXRpb24oY2xzKSkgewogICAgICAgIExpc3Q8TWVtYmVyRW50aXR5PiBtZW1iZXJzID0gPE1lbWJlckVudGl0eT5bXTsKICAgICAgICB2b2lkIGFkZChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgICAgICBpZiAobWVtYmVyLmVuY2xvc2luZ0NsYXNzID09IGNscykgewogICAgICAgICAgICBtZW1iZXJzLmFkZChtZW1iZXIpOwogICAgICAgICAgICBpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbiA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hMb2NhbENsYXNzTWVtYmVyKGNscywgYWRkKTsKICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hJbmplY3RlZENsYXNzTWVtYmVyKGNscywgYWRkKTsKCiAgICAgICAgaWYgKG1lbWJlcnMuaXNOb3RFbXB0eSkgewogICAgICAgICAgX3NvcnRlci5zb3J0TWVtYmVycyhtZW1iZXJzKS5mb3JFYWNoKHZpc2l0TWVtYmVyKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoIV9lbGVtZW50RW52aXJvbm1lbnQuaXNNaXhpbkFwcGxpY2F0aW9uKGNscykpIHsKICAgICAgICBMaXN0PE1lbWJlckVudGl0eT4gbWVtYmVycyA9IDxNZW1iZXJFbnRpdHk+W107CiAgICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoTG9jYWxDbGFzc01lbWJlcihjbHMsIG1lbWJlcnMuYWRkKTsKICAgICAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hJbmplY3RlZENsYXNzTWVtYmVyKGNscywgbWVtYmVycy5hZGQpOwogICAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaENvbnN0cnVjdG9yQm9keShjbHMsIG1lbWJlcnMuYWRkKTsKICAgICAgICBfc29ydGVyLnNvcnRNZW1iZXJzKG1lbWJlcnMpLmZvckVhY2godmlzaXRNZW1iZXIpOwogICAgICB9CiAgICB9CiAgICBib29sIGlzSW50ZXJjZXB0ZWRDbGFzcyA9IF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZENsYXNzKGNscyk7CiAgICBMaXN0PEZpZWxkPiBpbnN0YW5jZUZpZWxkcyA9IG9ubHlGb3JSdGkKICAgICAgICA/IGNvbnN0IDxGaWVsZD5bXQogICAgICAgIDogX2J1aWxkRmllbGRzKAogICAgICAgICAgICBjbHM6IGNscywKICAgICAgICAgICAgdmlzaXRTdGF0aWNzOiBmYWxzZSwKICAgICAgICAgICAgaXNIb2xkZXJJbnRlcmNlcHRlZENsYXNzOiBpc0ludGVyY2VwdGVkQ2xhc3MpOwogICAgTGlzdDxGaWVsZD4gc3RhdGljRmllbGRzRm9yUmVmbGVjdGlvbiA9IG9ubHlGb3JSdGkKICAgICAgICA/IGNvbnN0IDxGaWVsZD5bXQogICAgICAgIDogX2J1aWxkRmllbGRzKAogICAgICAgICAgICBjbHM6IGNscywKICAgICAgICAgICAgdmlzaXRTdGF0aWNzOiB0cnVlLAogICAgICAgICAgICBpc0hvbGRlckludGVyY2VwdGVkQ2xhc3M6IGlzSW50ZXJjZXB0ZWRDbGFzcyk7CgogICAgVHlwZVRlc3RQcm9wZXJ0aWVzIHR5cGVUZXN0cyA9IHJ1bnRpbWVUeXBlR2VuZXJhdG9yLmdlbmVyYXRlSXNUZXN0cygKICAgICAgICBjbHMsIF9nZW5lcmF0ZWRDb2RlLAogICAgICAgIHN0b3JlRnVuY3Rpb25UeXBlSW5NZXRhZGF0YTogX3N0b3JlRnVuY3Rpb25UeXBlc0luTWV0YWRhdGEpOwoKICAgIExpc3Q8U3R1Yk1ldGhvZD4gY2hlY2tlZFNldHRlcnMgPSA8U3R1Yk1ldGhvZD5bXTsKICAgIExpc3Q8U3R1Yk1ldGhvZD4gaXNDaGVja3MgPSA8U3R1Yk1ldGhvZD5bXTsKICAgIGlmIChfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcENsYXNzKGNscykpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW5zdGVhZCBvZiBnZW5lcmF0aW5nIGFsbCBzdHVicyBmb3IgZWFjaAogICAgICAvLyBqcy1pbnRlcm9wIGNsYXNzIHdlIHNob3VsZCBnZW5lcmF0ZSBhIHN0dWIgZm9yIGVhY2ggaW1wbGVtZW50ZWQgY2xhc3MuCiAgICAgIC8vIEN1cnJlbnRseSB3ZSBnZW5lcmF0ZSBkdXBsaWNhdGVzIGlmIGEgY2xhc3MgaXMgaW1wbGVtZW50ZWQgYnkgbXVsdGlwbGUKICAgICAgLy8ganMtaW50ZXJvcCBjbGFzc2VzLgogICAgICB0eXBlVGVzdHMuZm9yRWFjaFByb3BlcnR5KF9zb3J0ZXIsIChqcy5OYW1lIG5hbWUsIGpzLk5vZGUgY29kZSkgewogICAgICAgIF9jbGFzc2VzW19jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRPYmplY3RDbGFzc10KICAgICAgICAgICAgLmlzQ2hlY2tzCiAgICAgICAgICAgIC5hZGQoX2J1aWxkU3R1Yk1ldGhvZChuYW1lLCBjb2RlKSk7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChGaWVsZCBmaWVsZCBpbiBpbnN0YW5jZUZpZWxkcykgewogICAgICAgIGlmIChmaWVsZC5uZWVkc0NoZWNrZWRTZXR0ZXIpIHsKICAgICAgICAgIGFzc2VydCghZmllbGQubmVlZHNVbmNoZWNrZWRTZXR0ZXIpOwogICAgICAgICAgRmllbGRFbnRpdHkgZWxlbWVudCA9IGZpZWxkLmVsZW1lbnQ7CiAgICAgICAgICBqcy5FeHByZXNzaW9uIGNvZGUgPSBfZ2VuZXJhdGVkQ29kZVtlbGVtZW50XTsKICAgICAgICAgIGFzc2VydChjb2RlICE9IG51bGwsICJObyBzZXR0ZXIgY29kZSBmb3IgZmllbGQ6ICRmaWVsZCIpOwogICAgICAgICAgaWYgKGNvZGUgPT0gbnVsbCkgewogICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBvY2N1ciBiZWNhdXNlIGNvZGVnZW4gbWVtYmVyIHVzYWdlIGlzIG5vdwogICAgICAgICAgICAvLyBsaW1pdGVkIGJ5IGNsb3NlZCB3b3JsZCBtZW1iZXIgdXNhZ2UuIEluIHRoZSBjYXNlIHdlJ3ZlIG1pc3NlZCBhCiAgICAgICAgICAgIC8vIHNwb3Qgd2UgY2F1dGlvdXNseSBnZW5lcmF0ZSBhbiBlbXB0eSBmdW5jdGlvbi4KICAgICAgICAgICAgY29kZSA9IGpzLmpzKCJmdW5jdGlvbigpIHt9Iik7CiAgICAgICAgICB9CiAgICAgICAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuZGVyaXZlU2V0dGVyTmFtZShmaWVsZC5hY2Nlc3Nvck5hbWUpOwogICAgICAgICAgY2hlY2tlZFNldHRlcnMuYWRkKF9idWlsZFN0dWJNZXRob2QobmFtZSwgY29kZSwgZWxlbWVudDogZWxlbWVudCkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdHlwZVRlc3RzLmZvckVhY2hQcm9wZXJ0eShfc29ydGVyLCAoanMuTmFtZSBuYW1lLCBqcy5Ob2RlIGNvZGUpIHsKICAgICAgICBpc0NoZWNrcy5hZGQoX2J1aWxkU3R1Yk1ldGhvZChuYW1lLCBjb2RlKSk7CiAgICAgIH0pOwogICAgfQoKICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5jbGFzc05hbWUoY2xzKTsKICAgIFN0cmluZyBob2xkZXJOYW1lID0gX25hbWVyLmdsb2JhbE9iamVjdEZvckNsYXNzKGNscyk7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgcmVnaXN0cnkgaW4gdGhlIG1pZGRsZSBvZgogICAgLy8gYnVpbGRpbmcgYSBjbGFzcy4KICAgIEhvbGRlciBob2xkZXIgPSBfcmVnaXN0cnkucmVnaXN0ZXJIb2xkZXIoaG9sZGVyTmFtZSk7CiAgICBib29sIGlzSW5zdGFudGlhdGVkID0gIV9uYXRpdmVEYXRhLmlzSnNJbnRlcm9wQ2xhc3MoY2xzKSAmJgogICAgICAgIF9jb2RlZ2VuV29ybGQuZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzLmNvbnRhaW5zKGNscyk7CgogICAgQ2xhc3MgcmVzdWx0OwogICAgaWYgKF9lbGVtZW50RW52aXJvbm1lbnQuaXNNaXhpbkFwcGxpY2F0aW9uKGNscykgJiYKICAgICAgICAhb25seUZvclJ0aSAmJgogICAgICAgICFpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbikgewogICAgICBhc3NlcnQoIV9uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKSk7CiAgICAgIGFzc2VydChtZXRob2RzLmlzRW1wdHkpOwogICAgICBhc3NlcnQoIWlzQ2xvc3VyZUJhc2VDbGFzcyk7CgogICAgICByZXN1bHQgPSBuZXcgTWl4aW5BcHBsaWNhdGlvbigKICAgICAgICAgIGNscywKICAgICAgICAgIG5hbWUsCiAgICAgICAgICBob2xkZXIsCiAgICAgICAgICBpbnN0YW5jZUZpZWxkcywKICAgICAgICAgIHN0YXRpY0ZpZWxkc0ZvclJlZmxlY3Rpb24sCiAgICAgICAgICBjYWxsU3R1YnMsCiAgICAgICAgICBjaGVja2VkU2V0dGVycywKICAgICAgICAgIGlzQ2hlY2tzLAogICAgICAgICAgX3J0aUNoZWNrcy5yZXF1aXJlZENoZWNrc1tjbHNdLAogICAgICAgICAgdHlwZVRlc3RzLmZ1bmN0aW9uVHlwZUluZGV4LAogICAgICAgICAgaXNEaXJlY3RseUluc3RhbnRpYXRlZDogaXNJbnN0YW50aWF0ZWQsCiAgICAgICAgICBoYXNSdGlGaWVsZDogaGFzUnRpRmllbGQsCiAgICAgICAgICBvbmx5Rm9yUnRpOiBvbmx5Rm9yUnRpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9IG5ldyBDbGFzcygKICAgICAgICAgIGNscywKICAgICAgICAgIG5hbWUsCiAgICAgICAgICBob2xkZXIsCiAgICAgICAgICBtZXRob2RzLAogICAgICAgICAgaW5zdGFuY2VGaWVsZHMsCiAgICAgICAgICBzdGF0aWNGaWVsZHNGb3JSZWZsZWN0aW9uLAogICAgICAgICAgY2FsbFN0dWJzLAogICAgICAgICAgbm9TdWNoTWV0aG9kU3R1YnMsCiAgICAgICAgICBjaGVja2VkU2V0dGVycywKICAgICAgICAgIGlzQ2hlY2tzLAogICAgICAgICAgX3J0aUNoZWNrcy5yZXF1aXJlZENoZWNrc1tjbHNdLAogICAgICAgICAgdHlwZVRlc3RzLmZ1bmN0aW9uVHlwZUluZGV4LAogICAgICAgICAgaXNEaXJlY3RseUluc3RhbnRpYXRlZDogaXNJbnN0YW50aWF0ZWQsCiAgICAgICAgICBoYXNSdGlGaWVsZDogaGFzUnRpRmllbGQsCiAgICAgICAgICBvbmx5Rm9yUnRpOiBvbmx5Rm9yUnRpLAogICAgICAgICAgaXNOYXRpdmU6IF9uYXRpdmVEYXRhLmlzTmF0aXZlQ2xhc3MoY2xzKSwKICAgICAgICAgIGlzQ2xvc3VyZUJhc2VDbGFzczogaXNDbG9zdXJlQmFzZUNsYXNzLAogICAgICAgICAgaXNTb2Z0RGVmZXJyZWQ6IF9pc1NvZnREZWZlcnJlZChjbHMpLAogICAgICAgICAgaXNTdXBlck1peGluQXBwbGljYXRpb246IGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uKTsKICAgIH0KICAgIF9jbGFzc2VzW2Nsc10gPSByZXN1bHQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgYm9vbCBfbWV0aG9kTmVlZHNTdHVicyhGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgIGlmIChtZXRob2QgaXMgSkdlbmVyYXRvckJvZHkpIHJldHVybiBmYWxzZTsKICAgIGlmIChtZXRob2QgaXMgQ29uc3RydWN0b3JCb2R5RW50aXR5KSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gbWV0aG9kLnBhcmFtZXRlclN0cnVjdHVyZS5vcHRpb25hbFBhcmFtZXRlcnMgIT0gMCB8fAogICAgICAgIG1ldGhvZC5wYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMgIT0gMDsKICB9CgogIGJvb2wgX21ldGhvZENhbkJlQXBwbGllZChGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgIHJldHVybiBfYmFja2VuZFVzYWdlLmlzRnVuY3Rpb25BcHBseVVzZWQgJiYKICAgICAgICBfaW5mZXJyZWREYXRhLmdldE1pZ2h0QmVQYXNzZWRUb0FwcGx5KG1ldGhvZCk7CiAgfQoKICAvKiBNYXAgfCBMaXN0ICovIF9jb21wdXRlUGFyYW1ldGVyRGVmYXVsdFZhbHVlcyhGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgIHZhciAvKiBNYXAgfCBMaXN0ICovIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlczsKICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUgPSBtZXRob2QucGFyYW1ldGVyU3RydWN0dXJlOwogICAgaWYgKHBhcmFtZXRlclN0cnVjdHVyZS5uYW1lZFBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgewogICAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMgPSBuZXcgTWFwPFN0cmluZywgQ29uc3RhbnRWYWx1ZT4oKTsKICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoUGFyYW1ldGVyKG1ldGhvZCwKICAgICAgICAgIChEYXJ0VHlwZSB0eXBlLCBTdHJpbmcgbmFtZSwgQ29uc3RhbnRWYWx1ZSBkZWZhdWx0VmFsdWUpIHsKICAgICAgICBpZiAocGFyYW1ldGVyU3RydWN0dXJlLm5hbWVkUGFyYW1ldGVycy5jb250YWlucyhuYW1lKSkgewogICAgICAgICAgYXNzZXJ0KGRlZmF1bHRWYWx1ZSAhPSBudWxsKTsKICAgICAgICAgIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlc1tuYW1lXSA9IGRlZmF1bHRWYWx1ZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzID0gPENvbnN0YW50VmFsdWU+W107CiAgICAgIGludCBpbmRleCA9IDA7CiAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaFBhcmFtZXRlcihtZXRob2QsCiAgICAgICAgICAoRGFydFR5cGUgdHlwZSwgU3RyaW5nIG5hbWUsIENvbnN0YW50VmFsdWUgZGVmYXVsdFZhbHVlKSB7CiAgICAgICAgaWYgKGluZGV4ID49IHBhcmFtZXRlclN0cnVjdHVyZS5yZXF1aXJlZFBhcmFtZXRlcnMpIHsKICAgICAgICAgIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcy5hZGQoZGVmYXVsdFZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaW5kZXgrKzsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzOwogIH0KCiAgRGFydE1ldGhvZCBfYnVpbGRNZXRob2QoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAganMuTmFtZSBuYW1lID0gX25hbWVyLm1ldGhvZFByb3BlcnR5TmFtZShlbGVtZW50KTsKICAgIGpzLkV4cHJlc3Npb24gY29kZSA9IF9nZW5lcmF0ZWRDb2RlW2VsZW1lbnRdOwoKICAgIC8vIFRPRE8oa2FzcGVybCk6IEZpZ3VyZSBvdXQgdW5kZXIgd2hpY2ggY29uZGl0aW9ucyBjb2RlIGlzIG51bGwuCiAgICBpZiAoY29kZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKCiAgICBib29sIGNhblRlYXJPZmYgPSBmYWxzZTsKICAgIGpzLk5hbWUgdGVhck9mZk5hbWU7CiAgICBib29sIGlzQ2xvc3VyZUNhbGxNZXRob2QgPSBmYWxzZTsKICAgIGJvb2wgaXNOb3RBcHBseVRhcmdldCA9CiAgICAgICAgIWVsZW1lbnQuaXNGdW5jdGlvbiB8fCBlbGVtZW50LmlzR2V0dGVyIHx8IGVsZW1lbnQuaXNTZXR0ZXI7CgogICAgYm9vbCBjYW5CZUFwcGxpZWQgPSBfbWV0aG9kQ2FuQmVBcHBsaWVkKGVsZW1lbnQpOwoKICAgIGpzLk5hbWUgYWxpYXNOYW1lID0gX2NvZGVnZW5Xb3JsZC5pc0FsaWFzZWRTdXBlck1lbWJlcihlbGVtZW50KQogICAgICAgID8gX25hbWVyLmFsaWFzZWRTdXBlck1lbWJlclByb3BlcnR5TmFtZShlbGVtZW50KQogICAgICAgIDogbnVsbDsKCiAgICBpZiAoaXNOb3RBcHBseVRhcmdldCkgewogICAgICBjYW5UZWFyT2ZmID0gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICBpZiAoZWxlbWVudC5lbmNsb3NpbmdDbGFzcy5pc0Nsb3N1cmUpIHsKICAgICAgICBjYW5UZWFyT2ZmID0gZmFsc2U7CiAgICAgICAgaXNDbG9zdXJlQ2FsbE1ldGhvZCA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQ2FyZWZ1bCB3aXRoIG9wZXJhdG9ycy4KICAgICAgICBjYW5UZWFyT2ZmID0gX2NvZGVnZW5Xb3JsZC5oYXNJbnZva2VkR2V0dGVyKGVsZW1lbnQpIHx8CiAgICAgICAgICAgIF9jb2RlZ2VuV29ybGQubWV0aG9kc05lZWRzU3VwZXJHZXR0ZXIoZWxlbWVudCk7CiAgICAgICAgdGVhck9mZk5hbWUgPSBfbmFtZXIuZ2V0dGVyRm9yRWxlbWVudChlbGVtZW50KTsKICAgICAgfQogICAgfQoKICAgIGlmIChjYW5UZWFyT2ZmKSB7CiAgICAgIGFzc2VydChlbGVtZW50IGlzISBDb25zdHJ1Y3RvckVudGl0eSwgZmFpbGVkQXQoZWxlbWVudCkpOwogICAgICBhc3NlcnQoZWxlbWVudCBpcyEgQ29uc3RydWN0b3JCb2R5RW50aXR5LCBmYWlsZWRBdChlbGVtZW50KSk7CiAgICB9CgogICAgYm9vbCBpc0ludGVyY2VwdGVkID0KICAgICAgICBfY2xvc2VkV29ybGQuaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWRNZXRob2QoZWxlbWVudCk7CgogICAganMuTmFtZSBjYWxsTmFtZSA9IG51bGw7CiAgICBpZiAoY2FuVGVhck9mZikgewogICAgICBTZWxlY3RvciBjYWxsU2VsZWN0b3IgPQogICAgICAgICAgbmV3IFNlbGVjdG9yLmZyb21FbGVtZW50KGVsZW1lbnQpLnRvQ2FsbFNlbGVjdG9yKCk7CiAgICAgIGNhbGxOYW1lID0gX25hbWVyLmludm9jYXRpb25OYW1lKGNhbGxTZWxlY3Rvcik7CiAgICB9CgogICAgRGFydFR5cGUgbWVtYmVyVHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGVsZW1lbnQpOwogICAganMuRXhwcmVzc2lvbiBmdW5jdGlvblR5cGU7CiAgICBpZiAoY2FuVGVhck9mZikgewogICAgICBPdXRwdXRVbml0IG91dHB1dFVuaXQgPSBfb3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvck1lbWJlcihlbGVtZW50KTsKICAgICAgZnVuY3Rpb25UeXBlID0gX2dlbmVyYXRlRnVuY3Rpb25UeXBlKG1lbWJlclR5cGUsIG91dHB1dFVuaXQpOwogICAgfQoKICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCA9IGVsZW1lbnQ7CiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0gbWV0aG9kLnBhcmFtZXRlclN0cnVjdHVyZTsKICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50ID0gcGFyYW1ldGVyU3RydWN0dXJlLnJlcXVpcmVkUGFyYW1ldGVyczsKICAgIHZhciAvKiBMaXN0IHwgTWFwICovIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlczsKICAgIGludCBhcHBseUluZGV4ID0gMDsKICAgIGlmIChjYW5CZUFwcGxpZWQpIHsKICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzID0gX2NvbXB1dGVQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzKG1ldGhvZCk7CiAgICAgIGlmIChwYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMgPiAwKSB7CiAgICAgICAgYXBwbHlJbmRleCA9IDE7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbmV3IEluc3RhbmNlTWV0aG9kKGVsZW1lbnQsIG5hbWUsIGNvZGUsCiAgICAgICAgX2dlbmVyYXRlUGFyYW1ldGVyU3R1YnMoZWxlbWVudCwgY2FuVGVhck9mZiwgY2FuQmVBcHBsaWVkKSwgY2FsbE5hbWUsCiAgICAgICAgbmVlZHNUZWFyT2ZmOiBjYW5UZWFyT2ZmLAogICAgICAgIHRlYXJPZmZOYW1lOiB0ZWFyT2ZmTmFtZSwKICAgICAgICBpc0Nsb3N1cmVDYWxsTWV0aG9kOiBpc0Nsb3N1cmVDYWxsTWV0aG9kLAogICAgICAgIGlzSW50ZXJjZXB0ZWQ6IGlzSW50ZXJjZXB0ZWQsCiAgICAgICAgYWxpYXNOYW1lOiBhbGlhc05hbWUsCiAgICAgICAgY2FuQmVBcHBsaWVkOiBjYW5CZUFwcGxpZWQsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXM6IG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICBmdW5jdGlvblR5cGU6IGZ1bmN0aW9uVHlwZSwKICAgICAgICBhcHBseUluZGV4OiBhcHBseUluZGV4KTsKICB9CgogIGpzLkV4cHJlc3Npb24gX2dlbmVyYXRlRnVuY3Rpb25UeXBlKAogICAgICBGdW5jdGlvblR5cGUgdHlwZSwgT3V0cHV0VW5pdCBvdXRwdXRVbml0KSB7CiAgICBpZiAodHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpIHsKICAgICAganMuRXhwcmVzc2lvbiB0aGlzQWNjZXNzID0ganMuanMocid0aGlzLiRyZWNlaXZlcicpOwogICAgICByZXR1cm4gX3J0aUVuY29kZXIuZ2V0U2lnbmF0dXJlRW5jb2RpbmcoCiAgICAgICAgICBfbmFtZXIsIF90YXNrLmVtaXR0ZXIsIHR5cGUsIHRoaXNBY2Nlc3MpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF90YXNrLm1ldGFkYXRhQ29sbGVjdG9yLnJlaWZ5VHlwZSh0eXBlLCBvdXRwdXRVbml0KTsKICAgIH0KICB9CgogIExpc3Q8UGFyYW1ldGVyU3R1Yk1ldGhvZD4gX2dlbmVyYXRlUGFyYW1ldGVyU3R1YnMoCiAgICAgIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIGJvb2wgY2FuVGVhck9mZiwgYm9vbCBjYW5CZUFwcGxpZWQpIHsKICAgIGlmICghX21ldGhvZE5lZWRzU3R1YnMoZWxlbWVudCkpIHJldHVybiBjb25zdCA8UGFyYW1ldGVyU3R1Yk1ldGhvZD5bXTsKCiAgICBQYXJhbWV0ZXJTdHViR2VuZXJhdG9yIGdlbmVyYXRvciA9IG5ldyBQYXJhbWV0ZXJTdHViR2VuZXJhdG9yKAogICAgICAgIF90YXNrLmVtaXR0ZXIsCiAgICAgICAgX3Rhc2submF0aXZlRW1pdHRlciwKICAgICAgICBfbmFtZXIsCiAgICAgICAgX3J0aUVuY29kZXIsCiAgICAgICAgX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSA/IF9ydGlSZWNpcGVFbmNvZGVyIDogbnVsbCwKICAgICAgICBfbmF0aXZlRGF0YSwKICAgICAgICBfaW50ZXJjZXB0b3JEYXRhLAogICAgICAgIF9jb2RlZ2VuV29ybGQsCiAgICAgICAgX2Nsb3NlZFdvcmxkLAogICAgICAgIF9zb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5KTsKICAgIHJldHVybiBnZW5lcmF0b3IuZ2VuZXJhdGVQYXJhbWV0ZXJTdHVicyhlbGVtZW50LAogICAgICAgIGNhblRlYXJPZmY6IGNhblRlYXJPZmYsIGNhbkJlQXBwbGllZDogY2FuQmVBcHBsaWVkKTsKICB9CgogIExpc3Q8U3R1Yk1ldGhvZD4gX2dlbmVyYXRlSW5zdGFudGlhdGlvblN0dWJzKENsYXNzRW50aXR5IGluc3RhbnRpYXRpb25DbGFzcykgewogICAgSW5zdGFudGlhdGlvblN0dWJHZW5lcmF0b3IgZ2VuZXJhdG9yID0gbmV3IEluc3RhbnRpYXRpb25TdHViR2VuZXJhdG9yKAogICAgICAgIF90YXNrLCBfbmFtZXIsIF9jbG9zZWRXb3JsZCwgX2NvZGVnZW5Xb3JsZCwgX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kpOwogICAgcmV0dXJuIGdlbmVyYXRvci5nZW5lcmF0ZVN0dWJzKGluc3RhbnRpYXRpb25DbGFzcywgbnVsbCk7CiAgfQoKICAvLy8gQnVpbGRzIGEgc3R1YiBtZXRob2QuCiAgLy8vCiAgLy8vIFN0dWIgbWV0aG9kcyBtYXkgaGF2ZSBhbiBlbGVtZW50IHRoYXQgY2FuIGJlIHVzZWQgZm9yIGNvZGUtc2l6ZQogIC8vLyBhdHRyaWJ1dGlvbi4KICBNZXRob2QgX2J1aWxkU3R1Yk1ldGhvZChqcy5OYW1lIG5hbWUsIGpzLkV4cHJlc3Npb24gY29kZSwKICAgICAge01lbWJlckVudGl0eSBlbGVtZW50fSkgewogICAgcmV0dXJuIG5ldyBTdHViTWV0aG9kKG5hbWUsIGNvZGUsIGVsZW1lbnQ6IGVsZW1lbnQpOwogIH0KCiAgLy8gVGhlIGdldEludGVyY2VwdG9yIG1ldGhvZHMgZGlyZWN0bHkgYWNjZXNzIHRoZSBwcm90b3R5cGUgb2YgY2xhc3Nlcy4KICAvLyBXZSBtdXN0IGV2YWx1YXRlIHRoZXNlIGNsYXNzZXMgZWFnZXJseSBzbyB0aGF0IHRoZSBwcm90b3R5cGUgaXMKICAvLyBhY2Nlc3NpYmxlLgogIHZvaWQgX21hcmtFYWdlckludGVyY2VwdG9yQ2xhc3NlcygpIHsKICAgIEl0ZXJhYmxlPFNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3I+IGludGVyY2VwdG9ycyA9CiAgICAgICAgX29uZVNob3RJbnRlcmNlcHRvckRhdGEuc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnM7CiAgICBmb3IgKFNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3IgaW50ZXJjZXB0b3IgaW4gaW50ZXJjZXB0b3JzKSB7CiAgICAgIGZvciAoQ2xhc3NFbnRpdHkgZWxlbWVudCBpbiBpbnRlcmNlcHRvci5jbGFzc2VzKSB7CiAgICAgICAgQ2xhc3MgY2xzID0gX2NsYXNzZXNbZWxlbWVudF07CiAgICAgICAgaWYgKGNscyAhPSBudWxsKSBjbHMuaXNFYWdlciA9IHRydWU7CiAgICAgIH0KICAgIH0KICB9CgogIEl0ZXJhYmxlPFN0YXRpY1N0dWJNZXRob2Q+IF9nZW5lcmF0ZUdldEludGVyY2VwdG9yTWV0aG9kcygpIHsKICAgIEludGVyY2VwdG9yU3R1YkdlbmVyYXRvciBzdHViR2VuZXJhdG9yID0gbmV3IEludGVyY2VwdG9yU3R1YkdlbmVyYXRvcigKICAgICAgICBfY29tbW9uRWxlbWVudHMsCiAgICAgICAgX3Rhc2suZW1pdHRlciwKICAgICAgICBfbmF0aXZlQ29kZWdlbkVucXVldWVyLAogICAgICAgIF9uYW1lciwKICAgICAgICBfY3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMsCiAgICAgICAgX2NvZGVnZW5Xb3JsZCwKICAgICAgICBfY2xvc2VkV29ybGQpOwoKICAgIFN0cmluZyBob2xkZXJOYW1lID0KICAgICAgICBfbmFtZXIuZ2xvYmFsT2JqZWN0Rm9yTGlicmFyeShfY29tbW9uRWxlbWVudHMuaW50ZXJjZXB0b3JzTGlicmFyeSk7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgcmVnaXN0cnkgaW4gdGhlIG1pZGRsZSBvZgogICAgLy8gZ2VuZXJhdGluZyB0aGUgaW50ZXJjZXB0b3IgbWV0aG9kcy4KICAgIEhvbGRlciBob2xkZXIgPSBfcmVnaXN0cnkucmVnaXN0ZXJIb2xkZXIoaG9sZGVyTmFtZSk7CiAgICBMaXN0PGpzLk5hbWU+IG5hbWVzID0gW107CiAgICBNYXA8anMuTmFtZSwgU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcj4gaW50ZXJjZXB0b3JNYXAgPSB7fTsKICAgIGZvciAoU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvciBpbnRlcmNlcHRvcgogICAgICAgIGluIF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhLnNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JzKSB7CiAgICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5uYW1lRm9yR2V0SW50ZXJjZXB0b3IoaW50ZXJjZXB0b3IuY2xhc3Nlcyk7CiAgICAgIG5hbWVzLmFkZChuYW1lKTsKICAgICAgYXNzZXJ0KAogICAgICAgICAgIWludGVyY2VwdG9yTWFwLmNvbnRhaW5zS2V5KG5hbWUpLAogICAgICAgICAgIkR1cGxpY2F0ZSBzcGVjaWFsaXplZCBnZXQgaW50ZXJjZXB0b3IgZm9yICRuYW1lOiBFeGlzdGluZzogIgogICAgICAgICAgIiR7aW50ZXJjZXB0b3JNYXBbbmFtZV19LCBuZXcgJHtpbnRlcmNlcHRvcn0uIik7CiAgICAgIGludGVyY2VwdG9yTWFwW25hbWVdID0gaW50ZXJjZXB0b3I7CiAgICB9CiAgICBuYW1lcy5zb3J0KCk7CiAgICByZXR1cm4gbmFtZXMubWFwKChqcy5OYW1lIG5hbWUpIHsKICAgICAgU3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvciBpbnRlcmNlcHRvciA9IGludGVyY2VwdG9yTWFwW25hbWVdOwogICAgICBqcy5FeHByZXNzaW9uIGNvZGUgPQogICAgICAgICAgc3R1YkdlbmVyYXRvci5nZW5lcmF0ZUdldEludGVyY2VwdG9yTWV0aG9kKGludGVyY2VwdG9yKTsKICAgICAgcmV0dXJuIG5ldyBTdGF0aWNTdHViTWV0aG9kKG5hbWUsIGhvbGRlciwgY29kZSk7CiAgICB9KTsKICB9CgogIExpc3Q8RmllbGQ+IF9idWlsZEZpZWxkcygKICAgICAge2Jvb2wgdmlzaXRTdGF0aWNzOiBmYWxzZSwKICAgICAgYm9vbCBpc0hvbGRlckludGVyY2VwdGVkQ2xhc3M6IGZhbHNlLAogICAgICBMaWJyYXJ5RW50aXR5IGxpYnJhcnksCiAgICAgIENsYXNzRW50aXR5IGNsc30pIHsKICAgIExpc3Q8RmllbGQ+IGZpZWxkcyA9IDxGaWVsZD5bXTsKCiAgICB2b2lkIHZpc2l0RmllbGQoRmllbGRFbnRpdHkgZmllbGQsIGpzLk5hbWUgbmFtZSwganMuTmFtZSBhY2Nlc3Nvck5hbWUsCiAgICAgICAgYm9vbCBuZWVkc0dldHRlciwgYm9vbCBuZWVkc1NldHRlciwgYm9vbCBuZWVkc0NoZWNrZWRTZXR0ZXIpIHsKICAgICAgaW50IGdldHRlckZsYWdzID0gMDsKICAgICAgaWYgKG5lZWRzR2V0dGVyKSB7CiAgICAgICAgaWYgKHZpc2l0U3RhdGljcyB8fAogICAgICAgICAgICAhX2ludGVyY2VwdG9yRGF0YS5maWVsZEhhc0ludGVyY2VwdGVkR2V0dGVyKGZpZWxkKSkgewogICAgICAgICAgZ2V0dGVyRmxhZ3MgPSAxOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBnZXR0ZXJGbGFncyArPSAyOwogICAgICAgICAgLy8gVE9ETyhzcmEpOiAnaXNJbnRlcmNlcHRlZENsYXNzJyBtaWdodCBub3QgYmUgdGhlIGNvcnJlY3QgdGVzdAogICAgICAgICAgLy8gZm9yIG1ldGhvZHMgZm9yY2VkIHRvIHVzZSB0aGUgaW50ZXJjZXB0b3IgY29udmVudGlvbiBiZWNhdXNlCiAgICAgICAgICAvLyB0aGUgbWV0aG9kJ3MgY2xhc3Mgd2FzIGVsc2V3aGVyZSBtaXhlZC1pbiB0byBhbiBpbnRlcmNlcHRvci4KICAgICAgICAgIGlmICghaXNIb2xkZXJJbnRlcmNlcHRlZENsYXNzKSB7CiAgICAgICAgICAgIGdldHRlckZsYWdzICs9IDE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICBpbnQgc2V0dGVyRmxhZ3MgPSAwOwogICAgICBpZiAobmVlZHNTZXR0ZXIpIHsKICAgICAgICBpZiAodmlzaXRTdGF0aWNzIHx8CiAgICAgICAgICAgICFfaW50ZXJjZXB0b3JEYXRhLmZpZWxkSGFzSW50ZXJjZXB0ZWRTZXR0ZXIoZmllbGQpKSB7CiAgICAgICAgICBzZXR0ZXJGbGFncyA9IDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHNldHRlckZsYWdzICs9IDI7CiAgICAgICAgICBpZiAoIWlzSG9sZGVySW50ZXJjZXB0ZWRDbGFzcykgewogICAgICAgICAgICBzZXR0ZXJGbGFncyArPSAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgRmllbGRBbmFseXNpc0RhdGEgZmllbGREYXRhID0gX2ZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKTsKICAgICAgQ29uc3RhbnRWYWx1ZSBpbml0aWFsaXplckluQWxsb2NhdG9yOwogICAgICBpZiAoZmllbGREYXRhLmlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvcikgewogICAgICAgIGluaXRpYWxpemVySW5BbGxvY2F0b3IgPSBmaWVsZERhdGEuaW5pdGlhbFZhbHVlOwogICAgICB9CiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnRWYWx1ZTsKICAgICAgaWYgKGZpZWxkRGF0YS5pc0VmZmVjdGl2ZWx5Q29uc3RhbnQpIHsKICAgICAgICBjb25zdGFudFZhbHVlID0gZmllbGREYXRhLmNvbnN0YW50VmFsdWU7CiAgICAgIH0KCiAgICAgIGZpZWxkcy5hZGQobmV3IEZpZWxkKAogICAgICAgICAgZmllbGQsCiAgICAgICAgICBuYW1lLAogICAgICAgICAgYWNjZXNzb3JOYW1lLAogICAgICAgICAgZ2V0dGVyRmxhZ3MsCiAgICAgICAgICBzZXR0ZXJGbGFncywKICAgICAgICAgIG5lZWRzQ2hlY2tlZFNldHRlciwKICAgICAgICAgIGluaXRpYWxpemVySW5BbGxvY2F0b3IsCiAgICAgICAgICBjb25zdGFudFZhbHVlLAogICAgICAgICAgZmllbGREYXRhLmlzRWxpZGVkKSk7CiAgICB9CgogICAgRmllbGRWaXNpdG9yIHZpc2l0b3IgPSBuZXcgRmllbGRWaXNpdG9yKF9vcHRpb25zLCBfZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIF9jb21tb25FbGVtZW50cywgX2NvZGVnZW5Xb3JsZCwgX25hdGl2ZURhdGEsIF9uYW1lciwgX2Nsb3NlZFdvcmxkKTsKICAgIHZpc2l0b3IudmlzaXRGaWVsZHModmlzaXRGaWVsZCwKICAgICAgICB2aXNpdFN0YXRpY3M6IHZpc2l0U3RhdGljcywgbGlicmFyeTogbGlicmFyeSwgY2xzOiBjbHMpOwoKICAgIHJldHVybiBmaWVsZHM7CiAgfQoKICBJdGVyYWJsZTxTdGF0aWNTdHViTWV0aG9kPiBfZ2VuZXJhdGVPbmVTaG90SW50ZXJjZXB0b3JzKCkgewogICAgSW50ZXJjZXB0b3JTdHViR2VuZXJhdG9yIHN0dWJHZW5lcmF0b3IgPSBuZXcgSW50ZXJjZXB0b3JTdHViR2VuZXJhdG9yKAogICAgICAgIF9jb21tb25FbGVtZW50cywKICAgICAgICBfdGFzay5lbWl0dGVyLAogICAgICAgIF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIsCiAgICAgICAgX25hbWVyLAogICAgICAgIF9jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpcywKICAgICAgICBfY29kZWdlbldvcmxkLAogICAgICAgIF9jbG9zZWRXb3JsZCk7CgogICAgU3RyaW5nIGhvbGRlck5hbWUgPQogICAgICAgIF9uYW1lci5nbG9iYWxPYmplY3RGb3JMaWJyYXJ5KF9jb21tb25FbGVtZW50cy5pbnRlcmNlcHRvcnNMaWJyYXJ5KTsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB3ZSBzaG91bGRuJ3QgdXBkYXRlIHRoZSByZWdpc3RyeSBpbiB0aGUgbWlkZGxlIG9mCiAgICAvLyBnZW5lcmF0aW5nIHRoZSBpbnRlcmNlcHRvciBtZXRob2RzLgogICAgSG9sZGVyIGhvbGRlciA9IF9yZWdpc3RyeS5yZWdpc3RlckhvbGRlcihob2xkZXJOYW1lKTsKICAgIExpc3Q8anMuTmFtZT4gbmFtZXMgPSBbXTsKICAgIE1hcDxqcy5OYW1lLCBPbmVTaG90SW50ZXJjZXB0b3I+IGludGVyY2VwdG9yTWFwID0ge307CiAgICBmb3IgKE9uZVNob3RJbnRlcmNlcHRvciBpbnRlcmNlcHRvcgogICAgICAgIGluIF9vbmVTaG90SW50ZXJjZXB0b3JEYXRhLm9uZVNob3RJbnRlcmNlcHRvcnMpIHsKICAgICAganMuTmFtZSBuYW1lID0gX25hbWVyLm5hbWVGb3JPbmVTaG90SW50ZXJjZXB0b3IoCiAgICAgICAgICBpbnRlcmNlcHRvci5zZWxlY3RvciwgaW50ZXJjZXB0b3IuY2xhc3Nlcyk7CiAgICAgIG5hbWVzLmFkZChuYW1lKTsKICAgICAgYXNzZXJ0KAogICAgICAgICAgIWludGVyY2VwdG9yTWFwLmNvbnRhaW5zS2V5KG5hbWUpLAogICAgICAgICAgIkR1cGxpY2F0ZSBzcGVjaWFsaXplZCBnZXQgaW50ZXJjZXB0b3IgZm9yICRuYW1lOiBFeGlzdGluZzogIgogICAgICAgICAgIiR7aW50ZXJjZXB0b3JNYXBbbmFtZV19LCBuZXcgJHtpbnRlcmNlcHRvcn0uIik7CiAgICAgIGludGVyY2VwdG9yTWFwW25hbWVdID0gaW50ZXJjZXB0b3I7CiAgICB9CiAgICBuYW1lcy5zb3J0KCk7CiAgICByZXR1cm4gbmFtZXMubWFwKChqcy5OYW1lIG5hbWUpIHsKICAgICAgT25lU2hvdEludGVyY2VwdG9yIGludGVyY2VwdG9yID0gaW50ZXJjZXB0b3JNYXBbbmFtZV07CiAgICAgIGpzLkV4cHJlc3Npb24gY29kZSA9CiAgICAgICAgICBzdHViR2VuZXJhdG9yLmdlbmVyYXRlT25lU2hvdEludGVyY2VwdG9yKGludGVyY2VwdG9yKTsKICAgICAgcmV0dXJuIG5ldyBTdGF0aWNTdHViTWV0aG9kKG5hbWUsIGhvbGRlciwgY29kZSk7CiAgICB9KTsKICB9CgogIFN0YXRpY0RhcnRNZXRob2QgX2J1aWxkU3RhdGljTWV0aG9kKEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpIHsKICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5tZXRob2RQcm9wZXJ0eU5hbWUoZWxlbWVudCk7CiAgICBTdHJpbmcgaG9sZGVyID0gX25hbWVyLmdsb2JhbE9iamVjdEZvck1lbWJlcihlbGVtZW50KTsKICAgIGpzLkV4cHJlc3Npb24gY29kZSA9IF9nZW5lcmF0ZWRDb2RlW2VsZW1lbnRdOwoKICAgIGJvb2wgaXNBcHBseVRhcmdldCA9CiAgICAgICAgIWVsZW1lbnQuaXNDb25zdHJ1Y3RvciAmJiAhZWxlbWVudC5pc0dldHRlciAmJiAhZWxlbWVudC5pc1NldHRlcjsKICAgIGJvb2wgY2FuQmVBcHBsaWVkID0gX21ldGhvZENhbkJlQXBwbGllZChlbGVtZW50KTsKCiAgICBib29sIG5lZWRzVGVhck9mZiA9CiAgICAgICAgaXNBcHBseVRhcmdldCAmJiBfY29kZWdlbldvcmxkLmNsb3N1cml6ZWRTdGF0aWNzLmNvbnRhaW5zKGVsZW1lbnQpOwoKICAgIGpzLk5hbWUgdGVhck9mZk5hbWUgPQogICAgICAgIG5lZWRzVGVhck9mZiA/IF9uYW1lci5zdGF0aWNDbG9zdXJlTmFtZShlbGVtZW50KSA6IG51bGw7CgogICAganMuTmFtZSBjYWxsTmFtZSA9IG51bGw7CiAgICBpZiAobmVlZHNUZWFyT2ZmKSB7CiAgICAgIFNlbGVjdG9yIGNhbGxTZWxlY3RvciA9CiAgICAgICAgICBuZXcgU2VsZWN0b3IuZnJvbUVsZW1lbnQoZWxlbWVudCkudG9DYWxsU2VsZWN0b3IoKTsKICAgICAgY2FsbE5hbWUgPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUoY2FsbFNlbGVjdG9yKTsKICAgIH0KICAgIGpzLkV4cHJlc3Npb24gZnVuY3Rpb25UeXBlOwogICAgRGFydFR5cGUgdHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKGVsZW1lbnQpOwogICAgaWYgKG5lZWRzVGVhck9mZikgewogICAgICBPdXRwdXRVbml0IG91dHB1dFVuaXQgPSBfb3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvck1lbWJlcihlbGVtZW50KTsKICAgICAgZnVuY3Rpb25UeXBlID0gX2dlbmVyYXRlRnVuY3Rpb25UeXBlKHR5cGUsIG91dHB1dFVuaXQpOwogICAgfQoKICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCA9IGVsZW1lbnQ7CiAgICBQYXJhbWV0ZXJTdHJ1Y3R1cmUgcGFyYW1ldGVyU3RydWN0dXJlID0gbWV0aG9kLnBhcmFtZXRlclN0cnVjdHVyZTsKICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50ID0gcGFyYW1ldGVyU3RydWN0dXJlLnJlcXVpcmVkUGFyYW1ldGVyczsKICAgIHZhciAvKiBMaXN0IHwgTWFwICovIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlczsKICAgIGludCBhcHBseUluZGV4ID0gMDsKICAgIGlmIChjYW5CZUFwcGxpZWQpIHsKICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzID0gX2NvbXB1dGVQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzKG1ldGhvZCk7CiAgICAgIGlmIChwYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMgPiAwKSB7CiAgICAgICAgYXBwbHlJbmRleCA9IDE7CiAgICAgIH0KICAgIH0KCiAgICAvLyBUT0RPKGZsb2l0c2NoKTogd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgcmVnaXN0cnkgaW4gdGhlIG1pZGRsZSBvZgogICAgLy8gYnVpbGRpbmcgYSBzdGF0aWMgbWV0aG9kLgogICAgcmV0dXJuIG5ldyBTdGF0aWNEYXJ0TWV0aG9kKAogICAgICAgIGVsZW1lbnQsCiAgICAgICAgbmFtZSwKICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJIb2xkZXIoaG9sZGVyKSwKICAgICAgICBjb2RlLAogICAgICAgIF9nZW5lcmF0ZVBhcmFtZXRlclN0dWJzKGVsZW1lbnQsIG5lZWRzVGVhck9mZiwgY2FuQmVBcHBsaWVkKSwKICAgICAgICBjYWxsTmFtZSwKICAgICAgICBuZWVkc1RlYXJPZmY6IG5lZWRzVGVhck9mZiwKICAgICAgICB0ZWFyT2ZmTmFtZTogdGVhck9mZk5hbWUsCiAgICAgICAgY2FuQmVBcHBsaWVkOiBjYW5CZUFwcGxpZWQsCiAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXM6IG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICBmdW5jdGlvblR5cGU6IGZ1bmN0aW9uVHlwZSwKICAgICAgICBhcHBseUluZGV4OiBhcHBseUluZGV4KTsKICB9CgogIHZvaWQgX3JlZ2lzdGVyQ29uc3RhbnRzKAogICAgICBPdXRwdXRVbml0IG91dHB1dFVuaXQsIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGNvbnN0YW50VmFsdWVzKSB7CiAgICAvLyBgY29uc3RhbnRWYWx1ZXNgIGlzIG51bGwgaWYgYW4gb3V0cHV0VW5pdCBkb2Vzbid0IGNvbnRhaW4gYW55IGNvbnN0YW50cy4KICAgIGlmIChjb25zdGFudFZhbHVlcyA9PSBudWxsKSByZXR1cm47CiAgICBmb3IgKENvbnN0YW50VmFsdWUgY29uc3RhbnRWYWx1ZSBpbiBjb25zdGFudFZhbHVlcykgewogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJDb25zdGFudChvdXRwdXRVbml0LCBjb25zdGFudFZhbHVlKTsKICAgICAgYXNzZXJ0KCFfY29uc3RhbnRzLmNvbnRhaW5zS2V5KGNvbnN0YW50VmFsdWUpKTsKICAgICAganMuTmFtZSBuYW1lID0gX25hbWVyLmNvbnN0YW50TmFtZShjb25zdGFudFZhbHVlKTsKICAgICAgU3RyaW5nIGNvbnN0YW50T2JqZWN0ID0gX25hbWVyLmdsb2JhbE9iamVjdEZvckNvbnN0YW50KGNvbnN0YW50VmFsdWUpOwogICAgICBIb2xkZXIgaG9sZGVyID0KICAgICAgICAgIF9yZWdpc3RyeS5yZWdpc3RlckhvbGRlcihjb25zdGFudE9iamVjdCwgaXNDb25zdGFudHNIb2xkZXI6IHRydWUpOwogICAgICBDb25zdGFudCBjb25zdGFudCA9IG5ldyBDb25zdGFudChuYW1lLCBob2xkZXIsIGNvbnN0YW50VmFsdWUpOwogICAgICBfY29uc3RhbnRzW2NvbnN0YW50VmFsdWVdID0gY29uc3RhbnQ7CiAgICB9CiAgfQoKICBIb2xkZXIgX3JlZ2lzdGVyU3RhdGljU3RhdGVIb2xkZXIoKSB7CiAgICByZXR1cm4gX3JlZ2lzdHJ5LnJlZ2lzdGVySG9sZGVyKF9uYW1lci5zdGF0aWNTdGF0ZUhvbGRlciwKICAgICAgICBpc1N0YXRpY1N0YXRlSG9sZGVyOiB0cnVlKTsKICB9Cn0KhNYATk48ASwBEicBHDglMk8iOyckKyEuLC45LjFDLC0yRU9NPx00NUUtHAkcGREkIh8gHhwYGQEXGxYBSzQXIiYxKSgkNiQgIyonKSk4RjkWHyMnJD4BSxgBSxFHQk8dARwBJjEBRy4BEhUWIBwcGiMaGBUdFxgeJCsbExIZGxonFB4aKBYdIR0bFBsZHiUaHxwWUAFJLEMBS0VHAU4/TwElAT0GMQZKGiUBRRkiAUdKUDIsMENEP1EBMSIBTUFDHz0kCAFQMkcgLxAiFhVAKghFKj04ECIWFUobCAgBRUMTATtAAUdQATQBUCtEAVAhLAEZAUYBHj0BPQFEJyQ8BgE8SzBKOwQBHSQEASZFKEhLQRgeFSoiEQFKHTIBOk0cIE0QCCRMEAgBR0hCAToqJz9ICk0iHwoIAVBHHkswSilHNDdNHgwKCisGBAEzMEYsQSQ0JAgUBAEvSxkXIBAoFxc5BAE/UCwhRhwnMjsoMBMEASQ1JwQBRzQhUBsnMjsoMBMEAT4pQDsaOSIEAUwtS0QBUAQBN0g5GCBNGU0kPA0hJgZAAUlHTRwcQRgXOAQBOSMnO0M4KR8ICBMhHk8iBAE1Mj4/HyMBQD5JR00cHEc3BAE9RhNMJkUIFgQBNz1PURpMLE0GAUtFTE9LSkRQIBFPLzE7JhxIMkotRj03RjVOSysUEhAOAUotRj0/M0xQKRIQDgFMNykuASUqRiolNgE6GxsqPlAXHSEQTElRJj03Qj5CQTk5Qj4jTgFPSlBNR1FLHEMgTj0pEhAODgoICAQBTiFQKzIBMCIgLxMBOjg2BgEoQx5EIgEeLEQBGEQEAS5MBAEnRz4tTDcZBkMBHzEBRE06ShkZDxAUFgE0MyswMwoILzc6NztQSkoOCggGASwlJQgGATkBLC4pPzxQLUAfTQoGAR5ROT43BgFEOgYBTioqFz43KC4hLAwKAT9CASI9CkE3R0pGOwgGSCwaGBYhOzcaGBYgOwFJHUUBNjAtR1BQHUg6FjAKDSwoLy84RB5LUD4rDEZOCggBSDQKBgEqOkkZOkBBARI3FyQvHyMBJQ8QEholFRoUKicyJCMNGg8QEhMaJRUdGhQqJzIkIjQyMD0GHBMEATIwN0A3BAE0MDcEAUs5RzlJM0VBKD8KCg06FTNFPjwKEQoGKwQBNDcyAUYjAR0ZJhxFATYBRDkQARwaDS4cJA8jQDw4CAYBFkBEBgEZQwEdFh4+NgYBSCAWTEQGASVHSDkYGE8zGAgGATNOIiIyJh4kOEgkIQQBJzImOy80DUIGBAE1REsBQxcdEBU+FRoXFiU1PQQBUUtRPgQBHAZGEzwgOQQBSkURKDc8QjknLQgGBAFASxkXIBAoFxcBGExJKzoeQS9BSBcOLUg7KgYSJkQbQzcIBAEcISwdGiQBS0cbGRxCGxEcS0pKKx4MCggBGxkcQhsRHCseDAoIAUgsMDkIIy0xCAEcERAYFxceIhkgBgFLTCRBARMEAT5LGRcgECgXFwEYTEkrOh46KDo3NhcOLUg7KgYSJj0bQTcIBAFANzsyARlKNgEYTAEaQQEdGB4+NgYgQhhMPgYBJUdIORgYTzMYCAYBSSEhEQ4qDkYSJCIkOEgkIQQBG0dQKDo9NjlNFk1FLAYEASg+JAQCAURwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL3Byb2dyYW1fYnVpbGRlci9wcm9ncmFtX2J1aWxkZXIuZGFydEtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL3Byb2dyYW1fYnVpbGRlci9maWVsZF92aXNpdG9yLmRhcnSaSy8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQyanMuanNfZW1pdHRlci5wcm9ncmFtX2J1aWxkZXI7CgovLy8gW21lbWJlcl0gaXMgYSBmaWVsZCAoaW5zdGFuY2UsIHN0YXRpYywgb3IgdG9wIGxldmVsKS4KLy8vCi8vLyBbbmFtZV0gaXMgdGhlIGZpZWxkIG5hbWUgdGhhdCB0aGUgW05hbWVyXSBoYXMgcGlja2VkIGZvciB0aGlzIGZpZWxkJ3MKLy8vIHN0b3JhZ2UsIHRoYXQgaXMsIHRoZSBKYXZhU2NyaXB0IHByb3BlcnR5IG5hbWUuCi8vLwovLy8gW2FjY2Vzc29yTmFtZV0gaXMgdGhlIG5hbWUgb2YgdGhlIGFjY2Vzc29yLiBGb3IgaW5zdGFuY2UgZmllbGRzIHRoaXMgaXMKLy8vIG1vc3RseSB0aGUgc2FtZSBhcyBbbmFtZV0gZXhjZXB0IHdoZW4gW21lbWJlcl0gaXMgc2hhZG93aW5nIGEgZmllbGQgaW4gaXRzCi8vLyBzdXBlcmNsYXNzLiAgRm9yIG90aGVyIGZpZWxkcywgdGhleSBhcmUgcmFyZWx5IHRoZSBzYW1lLgovLy8KLy8vIFtuZWVkc0dldHRlcl0gYW5kIFtuZWVkc1NldHRlcl0gcmVwcmVzZW50IGlmIGEgZ2V0dGVyIG9yIGEgc2V0dGVyCi8vLyByZXNwZWN0aXZlbHkgaXMgbmVlZGVkLiAgVGhlcmUgYXJlIG1hbnkgZmFjdG9ycyBpbiB0aGlzLCBmb3IgZXhhbXBsZSwgaWYgdGhlCi8vLyBhY2Nlc3NvciBjYW4gYmUgaW5saW5lZC4KLy8vCi8vLyBbbmVlZHNDaGVja2VkU2V0dGVyXSBpbmRpY2F0ZXMgdGhhdCBhIGNoZWNrZWQgZ2V0dGVyIGlzIG5lZWRlZCwgYW5kIGluIHRoaXMKLy8vIGNhc2UsIFtuZWVkc1NldHRlcl0gaXMgYWx3YXlzIGZhbHNlLiBbbmVlZHNDaGVja2VkU2V0dGVyXSBpcyBvbmx5IHRydWUgd2hlbgovLy8gdHlwZSBhc3NlcnRpb25zIGFyZSBlbmFibGVkIChjaGVja2VkIG1vZGUpLgp0eXBlZGVmIHZvaWQgQWNjZXB0RmllbGQoRmllbGRFbnRpdHkgbWVtYmVyLCBqcy5OYW1lIG5hbWUsIGpzLk5hbWUgYWNjZXNzb3JOYW1lLAogICAgYm9vbCBuZWVkc0dldHRlciwgYm9vbCBuZWVkc1NldHRlciwgYm9vbCBuZWVkc0NoZWNrZWRTZXR0ZXIpOwoKY2xhc3MgRmllbGRWaXNpdG9yIHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgSkVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwogIGZpbmFsIEpDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgQ29kZWdlbldvcmxkIF9jb2RlZ2VuV29ybGQ7CiAgZmluYWwgTmF0aXZlRGF0YSBfbmF0aXZlRGF0YTsKICBmaW5hbCBOYW1lciBfbmFtZXI7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKCiAgRmllbGRWaXNpdG9yKHRoaXMuX29wdGlvbnMsIHRoaXMuX2VsZW1lbnRFbnZpcm9ubWVudCwgdGhpcy5fY29tbW9uRWxlbWVudHMsCiAgICAgIHRoaXMuX2NvZGVnZW5Xb3JsZCwgdGhpcy5fbmF0aXZlRGF0YSwgdGhpcy5fbmFtZXIsIHRoaXMuX2Nsb3NlZFdvcmxkKTsKCiAgLy8vIEludm9rZXMgW2ZdIGZvciBlYWNoIG9mIHRoZSBmaWVsZHMgb2YgW2VsZW1lbnRdLgogIC8vLwogIC8vLyBbZWxlbWVudF0gbXVzdCBiZSBhIFtDbGFzc0VudGl0eV0gb3IgYSBbTGlicmFyeUVudGl0eV0uCiAgLy8vCiAgLy8vIElmIFtlbGVtZW50XSBpcyBhIFtDbGFzc0VudGl0eV0sIHRoZSBzdGF0aWMgZmllbGRzIG9mIHRoZSBjbGFzcyBhcmUKICAvLy8gdmlzaXRlZCBpZiBbdmlzaXRTdGF0aWNzXSBpcyB0cnVlIGFuZCB0aGUgaW5zdGFuY2UgZmllbGRzIGFyZSB2aXNpdGVkIGlmCiAgLy8vIFt2aXNpdFN0YXRpY3NdIGlzIGZhbHNlLgogIC8vLwogIC8vLyBJZiBbZWxlbWVudF0gaXMgYSBbTGlicmFyeUVudGl0eV0sIFt2aXNpdFN0YXRpY3NdIG11c3QgYmUgdHJ1ZS4KICAvLy8KICAvLy8gV2hlbiB2aXNpdGluZyB0aGUgaW5zdGFuY2UgZmllbGRzIG9mIGEgY2xhc3MsIHRoZSBmaWVsZHMgb2YgaXRzIHN1cGVyY2xhc3MKICAvLy8gYXJlIGFsc28gdmlzaXRlZCBpZiB0aGUgY2xhc3MgaXMgaW5zdGFudGlhdGVkLgogIC8vLwogIC8vLyBJbnZhcmlhbnQ6IFtlbGVtZW50XSBtdXN0IGJlIGEgZGVjbGFyYXRpb24gZWxlbWVudC4KICB2b2lkIHZpc2l0RmllbGRzKEFjY2VwdEZpZWxkIGYsCiAgICAgIHtib29sIHZpc2l0U3RhdGljczogZmFsc2UsIExpYnJhcnlFbnRpdHkgbGlicmFyeSwgQ2xhc3NFbnRpdHkgY2xzfSkgewogICAgYm9vbCBpc05hdGl2ZUNsYXNzID0gZmFsc2U7CiAgICBib29sIGlzTGlicmFyeSA9IGZhbHNlOwogICAgYm9vbCBpc0luc3RhbnRpYXRlZCA9IGZhbHNlOwogICAgaWYgKGNscyAhPSBudWxsKSB7CiAgICAgIGlzTmF0aXZlQ2xhc3MgPSBfbmF0aXZlRGF0YS5pc05hdGl2ZUNsYXNzKGNscyk7CgogICAgICAvLyBJZiB0aGUgY2xhc3MgaXMgbmV2ZXIgaW5zdGFudGlhdGVkIHdlIHN0aWxsIG5lZWQgdG8gc2V0IGl0IHVwIGZvcgogICAgICAvLyBpbmhlcml0YW5jZSBwdXJwb3NlcywgYnV0IHdlIGNhbiBzaW1wbGlmeSBpdHMgSmF2YVNjcmlwdCBjb25zdHJ1Y3Rvci4KICAgICAgaXNJbnN0YW50aWF0ZWQgPSBfY29kZWdlbldvcmxkLmRpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3Nlcy5jb250YWlucyhjbHMpOwogICAgfSBlbHNlIGlmIChsaWJyYXJ5ICE9IG51bGwpIHsKICAgICAgaXNMaWJyYXJ5ID0gdHJ1ZTsKICAgICAgYXNzZXJ0KHZpc2l0U3RhdGljcywgZmFpbGVkQXQobGlicmFyeSkpOwogICAgfSBlbHNlIHsKICAgICAgZmFpbGVkQXQoCiAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsICdFeHBlY3RlZCBhIENsYXNzRW50aXR5IG9yIGEgTGlicmFyeUVudGl0eS4nKTsKICAgIH0KCiAgICB2b2lkIHZpc2l0RmllbGQoRmllbGRFbnRpdHkgZmllbGQsIHtDbGFzc0VudGl0eSBob2xkZXJ9KSB7CiAgICAgIGJvb2wgaXNNaXhpbk5hdGl2ZUZpZWxkID0KICAgICAgICAgIGlzTmF0aXZlQ2xhc3MgJiYgX2VsZW1lbnRFbnZpcm9ubWVudC5pc01peGluQXBwbGljYXRpb24oaG9sZGVyKTsKCiAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZHluYW1pY2FsbHkgY3JlYXRlIGdldHRlcnMgYW5kIHNldHRlcnMuCiAgICAgIC8vIFdlIGNhbiBvbmx5IGdlbmVyYXRlIGdldHRlcnMgYW5kIHNldHRlcnMgZm9yIFtlbGVtZW50XSBzaW5jZQogICAgICAvLyB0aGUgZmllbGRzIG9mIHN1cGVyIGNsYXNzZXMgY291bGQgYmUgb3ZlcndyaXR0ZW4gd2l0aCBnZXR0ZXJzIG9yCiAgICAgIC8vIHNldHRlcnMuCiAgICAgIGJvb2wgbmVlZHNHZXR0ZXIgPSBmYWxzZTsKICAgICAgYm9vbCBuZWVkc1NldHRlciA9IGZhbHNlOwogICAgICBpZiAoaXNMaWJyYXJ5IHx8IGlzTWl4aW5OYXRpdmVGaWVsZCB8fCBob2xkZXIgPT0gY2xzKSB7CiAgICAgICAgbmVlZHNHZXR0ZXIgPSBmaWVsZE5lZWRzR2V0dGVyKGZpZWxkKTsKICAgICAgICBuZWVkc1NldHRlciA9IGZpZWxkTmVlZHNTZXR0ZXIoZmllbGQpOwogICAgICB9CgogICAgICBpZiAoKGlzSW5zdGFudGlhdGVkICYmICFfbmF0aXZlRGF0YS5pc05hdGl2ZUNsYXNzKGNscykpIHx8CiAgICAgICAgICBuZWVkc0dldHRlciB8fAogICAgICAgICAgbmVlZHNTZXR0ZXIpIHsKICAgICAgICBqcy5OYW1lIGFjY2Vzc29yTmFtZSA9IF9uYW1lci5maWVsZEFjY2Vzc29yTmFtZShmaWVsZCk7CiAgICAgICAganMuTmFtZSBmaWVsZE5hbWUgPSBfbmFtZXIuZmllbGRQcm9wZXJ0eU5hbWUoZmllbGQpOwogICAgICAgIGJvb2wgbmVlZHNDaGVja2VkU2V0dGVyID0gZmFsc2U7CiAgICAgICAgaWYgKF9jbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEKICAgICAgICAgICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShmaWVsZCkKICAgICAgICAgICAgICAgIC5pc0VtaXR0ZWQgJiYKICAgICAgICAgICAgbmVlZHNTZXR0ZXIgJiYKICAgICAgICAgICAgIWNhbkF2b2lkR2VuZXJhdGVkQ2hlY2tlZFNldHRlcihmaWVsZCkpIHsKICAgICAgICAgIG5lZWRzQ2hlY2tlZFNldHRlciA9IHRydWU7CiAgICAgICAgICBuZWVkc1NldHRlciA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICAvLyBHZXR0ZXJzIGFuZCBzZXR0ZXJzIHdpdGggc3VmZml4ZXMgd2lsbCBiZSBnZW5lcmF0ZWQgZHluYW1pY2FsbHkuCiAgICAgICAgZihmaWVsZCwgZmllbGROYW1lLCBhY2Nlc3Nvck5hbWUsIG5lZWRzR2V0dGVyLCBuZWVkc1NldHRlciwKICAgICAgICAgICAgbmVlZHNDaGVja2VkU2V0dGVyKTsKICAgICAgfQogICAgfQoKICAgIGlmIChpc0xpYnJhcnkpIHsKICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoTGlicmFyeU1lbWJlcihsaWJyYXJ5LCAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICAgIGlmIChtZW1iZXIuaXNGaWVsZCkgdmlzaXRGaWVsZChtZW1iZXIpOwogICAgICB9KTsKICAgIH0gZWxzZSBpZiAodmlzaXRTdGF0aWNzKSB7CiAgICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaExvY2FsQ2xhc3NNZW1iZXIoY2xzLCAoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICAgIGlmIChtZW1iZXIuaXNGaWVsZCAmJiBtZW1iZXIuaXNTdGF0aWMpIHsKICAgICAgICAgIHZpc2l0RmllbGQobWVtYmVyLCBob2xkZXI6IGNscyk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oa2FzcGVybCk6IFdlIHNob3VsZCBtYWtlIHN1cmUgdG8gb25seSBlbWl0IG9uZSB2ZXJzaW9uIG9mCiAgICAgIC8vIG92ZXJyaWRkZW4gZmllbGRzLiBSaWdodCBub3csIHdlIHJlbHkgb24gdGhlIG9yZGVyaW5nIHNvIHRoZQogICAgICAvLyBmaWVsZHMgcHVsbGVkIGluIGZyb20gbWl4aW5zIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBmaWVsZHMgZnJvbQogICAgICAvLyB0aGUgY2xhc3MgZGVmaW5pdGlvbi4KCiAgICAgIC8vIElmIGEgY2xhc3MgaXMgbm90IGluc3RhbnRpYXRlZCB0aGVuIHdlIGFkZCB0aGUgZmllbGQganVzdCBzbyB3ZSBjYW4KICAgICAgLy8gZ2VuZXJhdGUgdGhlIGZpZWxkIGdldHRlci9zZXR0ZXIgZHluYW1pY2FsbHkuIFNpbmNlIHRoaXMgaXMgb25seQogICAgICAvLyBhbGxvd2VkIG9uIGZpZWxkcyB0aGF0IGFyZSBpbiBbZWxlbWVudF0gd2UgZG9uJ3QgbmVlZCB0byB2aXNpdAogICAgICAvLyBzdXBlcmNsYXNzZXMgZm9yIG5vbi1pbnN0YW50aWF0ZWQgY2xhc3Nlcy4KICAgICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoQ2xhc3NNZW1iZXIoY2xzLAogICAgICAgICAgKENsYXNzRW50aXR5IGhvbGRlciwgTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgICAgIGlmIChjbHMgIT0gaG9sZGVyICYmICFpc0luc3RhbnRpYXRlZCkgcmV0dXJuOwogICAgICAgIGlmIChtZW1iZXIuaXNGaWVsZCAmJiAhbWVtYmVyLmlzU3RhdGljKSB7CiAgICAgICAgICB2aXNpdEZpZWxkKG1lbWJlciwgaG9sZGVyOiBob2xkZXIpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQoKICBib29sIGZpZWxkTmVlZHNHZXR0ZXIoRmllbGRFbnRpdHkgZmllbGQpIHsKICAgIGFzc2VydChmaWVsZC5pc0ZpZWxkKTsKICAgIGlmIChmaWVsZEFjY2Vzc05ldmVyVGhyb3dzKGZpZWxkKSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGZpZWxkLmlzSW5zdGFuY2VNZW1iZXIgJiYgX2NvZGVnZW5Xb3JsZC5oYXNJbnZva2VkR2V0dGVyKGZpZWxkKTsKICB9CgogIGJvb2wgZmllbGROZWVkc1NldHRlcihGaWVsZEVudGl0eSBmaWVsZCkgewogICAgYXNzZXJ0KGZpZWxkLmlzRmllbGQpOwogICAgaWYgKGZpZWxkQWNjZXNzTmV2ZXJUaHJvd3MoZmllbGQpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoIWZpZWxkLmlzQXNzaWduYWJsZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGZpZWxkLmlzSW5zdGFuY2VNZW1iZXIgJiYgX2NvZGVnZW5Xb3JsZC5oYXNJbnZva2VkU2V0dGVyKGZpZWxkKTsKICB9CgogIHN0YXRpYyBib29sIGZpZWxkQWNjZXNzTmV2ZXJUaHJvd3MoRmllbGRFbnRpdHkgZmllbGQpIHsKICAgIHJldHVybgogICAgICAgIC8vIFdlIG5ldmVyIGFjY2VzcyBhIGZpZWxkIGluIGEgY2xvc3VyZSAoYSBjYXB0dXJlZCB2YXJpYWJsZSkgd2l0aG91dAogICAgICAgIC8vIGtub3dpbmcgdGhhdCBpdCBpcyB0aGVyZS4gIFRoZXJlZm9yZSB3ZSBkb24ndCBuZWVkIHRvIHVzZSBhIGdldHRlcgogICAgICAgIC8vICh0aGF0IHdpbGwgdGhyb3cgaWYgdGhlIGdldHRlciBtZXRob2QgaXMgbWlzc2luZyksIGJ1dCBjYW4gYWx3YXlzCiAgICAgICAgLy8gYWNjZXNzIHRoZSBmaWVsZCBkaXJlY3RseS4KICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZXR1cm4gYHRydWVgIEpDbG9zdXJlRmllbGQuCiAgICAgICAgZmFsc2U7CiAgfQoKICBib29sIGNhbkF2b2lkR2VuZXJhdGVkQ2hlY2tlZFNldHRlcihGaWVsZEVudGl0eSBtZW1iZXIpIHsKICAgIC8vIFdlIG5ldmVyIGdlbmVyYXRlIGFjY2Vzc29ycyBmb3IgdG9wLWxldmVsL3N0YXRpYyBmaWVsZHMuCiAgICBpZiAoIW1lbWJlci5pc0luc3RhbmNlTWVtYmVyKSByZXR1cm4gdHJ1ZTsKICAgIERhcnRUeXBlIHR5cGUgPSBfZWxlbWVudEVudmlyb25tZW50LmdldEZpZWxkVHlwZShtZW1iZXIpOwogICAgcmV0dXJuIHR5cGUudHJlYXRBc0R5bmFtaWMgfHwgdHlwZSA9PSBfY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZTsKICB9Cn0KgKcATk48ASwBOgRKNARMTz0ERlEdBFBQMFFCARUiMSkkIBYjAU5NATcGPgZKTx8GRgZRNQY6IkwgHCEXNgFLT1AiGC8NEFAGAT8gSwE/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+TRYBRzQVMyEIASBEATEGAUsyITcPPQgIAUgsHi00Dz0ICAQCATdwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL21ldGFkYXRhX2NvbGxlY3Rvci5kYXJ0M3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvbW9kZWwuZGFydMAAUFYvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLm5ld19qc19lbWl0dGVyLm1vZGVsOwoKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnIHNob3cgQ29uc3RhbnRWYWx1ZTsKaW1wb3J0ICcuLi9kZWZlcnJlZF9sb2FkLmRhcnQnIHNob3cgT3V0cHV0VW5pdDsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqcyBzaG93IEV4cHJlc3Npb24sIE5hbWUsIFN0YXRlbWVudCwgVG9rZW5GaW5hbGl6ZXI7CmltcG9ydCAnLi4vanMvanNfZGVidWcuZGFydCcgYXMganMgc2hvdyBub2RlVG9TdHJpbmc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX2NvZGVnZW4uZGFydCc7CmltcG9ydCAnanNfZW1pdHRlci5kYXJ0JyBzaG93IE1ldGFkYXRhQ29sbGVjdG9yOwoKY2xhc3MgUHJvZ3JhbSB7CiAgZmluYWwgTGlzdDxGcmFnbWVudD4gZnJhZ21lbnRzOwogIGZpbmFsIExpc3Q8SG9sZGVyPiBob2xkZXJzOwogIGZpbmFsIGJvb2wgb3V0cHV0Q29udGFpbnNDb25zdGFudExpc3Q7CiAgZmluYWwgYm9vbCBuZWVkc05hdGl2ZVN1cHBvcnQ7CiAgZmluYWwgYm9vbCBoYXNTb2Z0RGVmZXJyZWRDbGFzc2VzOwoKICAvLy8gQSBtYXAgZnJvbSBsb2FkIGlkIHRvIHRoZSBsaXN0IG9mIGZyYWdtZW50cyB0aGF0IG5lZWQgdG8gYmUgbG9hZGVkLgogIGZpbmFsIE1hcDxTdHJpbmcsIExpc3Q8RnJhZ21lbnQ+PiBsb2FkTWFwOwoKICAvLyBJZiB0aGlzIGZpZWxkIGlzIG5vdCBgbnVsbGAgdGhlbiBpdHMgdmFsdWUgbXVzdCBiZSBlbWl0dGVkIGluIHRoZSBlbWJlZGRlZAogIC8vIGdsb2JhbCBgVFlQRV9UT19JTlRFUkNFUFRPUl9NQVBgLiBUaGUgbWFwIHJlZmVyZW5jZXMgY29uc3RhbnRzIGFuZCBjbGFzc2VzLgogIGZpbmFsIGpzLkV4cHJlc3Npb24gdHlwZVRvSW50ZXJjZXB0b3JNYXA7CgogIC8vIFRPRE8oZmxvaXRzY2gpOiB3ZSBzaG91bGQgc3RvcmUgdGhlIG1ldGFkYXRhIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3RvcmluZwogIC8vIHRoZSBjb2xsZWN0b3IuIEhvd2V2ZXIsIHRoZSBvbGQgZW1pdHRlciBzdGlsbCB1cGRhdGVzIHRoZSBkYXRhLgogIGZpbmFsIE1ldGFkYXRhQ29sbGVjdG9yIF9tZXRhZGF0YUNvbGxlY3RvcjsKICBmaW5hbCBJdGVyYWJsZTxqcy5Ub2tlbkZpbmFsaXplcj4gZmluYWxpemVyczsKCiAgUHJvZ3JhbSh0aGlzLmZyYWdtZW50cywgdGhpcy5ob2xkZXJzLCB0aGlzLmxvYWRNYXAsIHRoaXMudHlwZVRvSW50ZXJjZXB0b3JNYXAsCiAgICAgIHRoaXMuX21ldGFkYXRhQ29sbGVjdG9yLCB0aGlzLmZpbmFsaXplcnMsCiAgICAgIHt0aGlzLm5lZWRzTmF0aXZlU3VwcG9ydCwKICAgICAgdGhpcy5vdXRwdXRDb250YWluc0NvbnN0YW50TGlzdCwKICAgICAgdGhpcy5oYXNTb2Z0RGVmZXJyZWRDbGFzc2VzfSkgewogICAgYXNzZXJ0KG5lZWRzTmF0aXZlU3VwcG9ydCAhPSBudWxsKTsKICAgIGFzc2VydChvdXRwdXRDb250YWluc0NvbnN0YW50TGlzdCAhPSBudWxsKTsKICB9CgogIC8vLyBBY2Nlc3NvciBmb3IgdGhlIGxpc3Qgb2YgbWV0YWRhdGEgZW50cmllcyBmb3IgYSBnaXZlbiBbT3V0cHV0VW5pdF0uCiAgLy8vCiAgLy8vIFRoZXJlIGlzIG9uZSBsaXN0IGZvciBlYWNoIG91dHB1dCB1bml0LiBUaGUgbGlzdCBiZWxvbmdpbmcgdG8gdGhlIG1haW4KICAvLy8gdW5pdCBtdXN0IGJlIGVtaXR0ZWQgaW4gdGhlIGBNRVRBREFUQWAgZW1iZWRkZWQgZ2xvYmFsLgogIC8vLyBUaGUgbGlzdCByZWZlcmVuY2VzIGNvbnN0YW50cyBhbmQgbXVzdCBoZW5jZSBiZSBlbWl0dGVkIGFmdGVyIGNvbnN0YW50cwogIC8vLyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQuCiAgLy8vCiAgLy8vIE5vdGU6IHRoZSBtZXRhZGF0YSBpcyBkZXJpdmVkIGZyb20gdGhlIHRhc2sncyBgbWV0YWRhdGFDb2xsZWN0b3JgLiBUaGUKICAvLy8gbGlzdCBtdXN0IG5vdCBiZSBlbWl0dGVkIGJlZm9yZSBhbGwgb3BlcmF0aW9ucyBvbiBpdCBhcmUgZG9uZS4gRm9yCiAgLy8vIGV4YW1wbGUsIHRoZSBvbGQgZW1pdHRlciBnZW5lcmF0ZXMgbWV0YWRhdGEgd2hlbiBlbWl0dGluZyByZWZsZWN0aW9uCiAgLy8vIGRhdGEuCiAganMuRXhwcmVzc2lvbiBtZXRhZGF0YUZvck91dHB1dFVuaXQoT3V0cHV0VW5pdCB1bml0KSB7CiAgICByZXR1cm4gX21ldGFkYXRhQ29sbGVjdG9yLmdldE1ldGFkYXRhRm9yT3V0cHV0VW5pdCh1bml0KTsKICB9CgogIC8vLyBBY2Nlc3NvciBmb3IgdGhlIGxpc3Qgb2YgdHlwZSBlbnRyaWVzIGZvciBhIGdpdmVuIFtPdXRwdXRVbml0XS4KICAvLy8KICAvLy8gVGhlcmUgaXMgb25lIGxpc3QgZm9yIGVhY2ggb3V0cHV0IHVuaXQuIFRoZSBsaXN0IGJlbG9uZ2luZyB0byB0aGUgbWFpbgogIC8vLyB1bml0IG11c3QgYmUgZW1pdHRlZCBpbiB0aGUgYFRZUEVTYCBlbWJlZGRlZCBnbG9iYWwuIFRoZSBsaXN0IHJlZmVyZW5jZXMKICAvLy8gY29uc3RhbnRzIGFuZCBtdXN0IGhlbmNlIGJlIGVtaXR0ZWQgYWZ0ZXIgY29uc3RhbnRzIGhhdmUgYmVlbiBpbml0aWFsaXplZC4KICAvLy8KICAvLy8gTm90ZTogdGhlIG1ldGFkYXRhIGlzIGRlcml2ZWQgZnJvbSB0aGUgdGFzaydzIGBtZXRhZGF0YUNvbGxlY3RvcmAuIFRoZQogIC8vLyBsaXN0IGlzIG9ubHkgYSBwbGFjZWhvbGRlciBhbmQgd2lsbCBiZSBmaWxsZWQgaW4gb25jZSBtZXRhZGF0YSBjb2xsZWN0aW9uCiAgLy8vIGlzIGZpbmFsaXplZC4KICBqcy5FeHByZXNzaW9uIG1ldGFkYXRhVHlwZXNGb3JPdXRwdXRVbml0KE91dHB1dFVuaXQgdW5pdCkgewogICAgcmV0dXJuIF9tZXRhZGF0YUNvbGxlY3Rvci5nZXRUeXBlc0Zvck91dHB1dFVuaXQodW5pdCk7CiAgfQoKICBib29sIGdldCBpc1NwbGl0ID0+IGZyYWdtZW50cy5sZW5ndGggPiAxOwogIEl0ZXJhYmxlPEZyYWdtZW50PiBnZXQgZGVmZXJyZWRGcmFnbWVudHMgPT4gZnJhZ21lbnRzLnNraXAoMSk7CiAgRnJhZ21lbnQgZ2V0IG1haW5GcmFnbWVudCA9PiBmcmFnbWVudHMuZmlyc3Q7Cn0KCi8vLyBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBKYXZhU2NyaXB0IG9iamVjdCB0aGF0IGNvbnRhaW5zIHN0YXRpYyBzdGF0ZSwgbGlrZQovLy8gY2xhc3NlcyBvciBmdW5jdGlvbnMuCmNsYXNzIEhvbGRlciB7CiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgZmluYWwgaW50IGluZGV4OwogIGZpbmFsIGJvb2wgaXNTdGF0aWNTdGF0ZUhvbGRlcjsKICBmaW5hbCBib29sIGlzQ29uc3RhbnRzSG9sZGVyOwoKICBIb2xkZXIodGhpcy5uYW1lLCB0aGlzLmluZGV4LAogICAgICB7dGhpcy5pc1N0YXRpY1N0YXRlSG9sZGVyOiBmYWxzZSwgdGhpcy5pc0NvbnN0YW50c0hvbGRlcjogZmFsc2V9KTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdIb2xkZXIobmFtZT0ke25hbWV9KSc7CiAgfQp9CgovLy8gVGhpcyBjbGFzcyByZXByZXNlbnRzIG9uZSBvdXRwdXQgZmlsZS4KLy8vCi8vLyBJZiBubyBsaWJyYXJ5IGlzIGRlZmVycmVkLCB0aGVyZSBpcyBvbmx5IG9uZSBbRnJhZ21lbnRdIG9mIHR5cGUKLy8vIFtNYWluRnJhZ21lbnRdLgphYnN0cmFjdCBjbGFzcyBGcmFnbWVudCB7CiAgLy8vIFRoZSBvdXRwdXRVbml0IHNob3VsZCBvbmx5IGJlIHVzZWQgZHVyaW5nIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbW9kZWwuCiAgLy8vIFVzZXMgaW5kaWNhdGUgbWlzc2luZyBpbmZvcm1hdGlvbiBpbiB0aGUgbW9kZWwuCiAgZmluYWwgT3V0cHV0VW5pdCBvdXRwdXRVbml0OwoKICBmaW5hbCBMaXN0PExpYnJhcnk+IGxpYnJhcmllczsKICBmaW5hbCBMaXN0PENvbnN0YW50PiBjb25zdGFudHM7CiAgLy8gVE9ETyhmbG9pdHNjaCk6IHNob3VsZCB3ZSBtb3ZlIHN0YXRpYyBmaWVsZHMgaW50byBsaWJyYXJpZXMgb3IgY2xhc3Nlcz8KICBmaW5hbCBMaXN0PFN0YXRpY0ZpZWxkPiBzdGF0aWNOb25GaW5hbEZpZWxkczsKICAvLyBUT0RPKGZsb2l0c2NoKTogbGF6eSBmaWVsZHMgc2hvdWxkIGJlIGluIHRoZWlyIGxpYnJhcnkgb3IgZXZlbiBjbGFzcy4KICBmaW5hbCBMaXN0PFN0YXRpY0ZpZWxkPiBzdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkczsKCiAgLy8vIE91dHB1dCBmaWxlIG5hbWUgd2l0aG91dCBleHRlbnNpb24uCiAgZmluYWwgU3RyaW5nIG91dHB1dEZpbGVOYW1lOwoKICBGcmFnbWVudCgKICAgICAgdGhpcy5vdXRwdXRVbml0LAogICAgICB0aGlzLm91dHB1dEZpbGVOYW1lLAogICAgICB0aGlzLmxpYnJhcmllcywKICAgICAgdGhpcy5zdGF0aWNOb25GaW5hbEZpZWxkcywKICAgICAgdGhpcy5zdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkcywKICAgICAgdGhpcy5jb25zdGFudHMpOwoKICBib29sIGdldCBpc01haW5GcmFnbWVudDsKfQoKLy8vIFRoZSBtYWluIG91dHB1dCBmaWxlLgovLy8KLy8vIFRoaXMgY29kZSBlbWl0dGVkIGZyb20gdGhpcyBbRnJhZ21lbnRdIG11c3QgYmUgbG9hZGVkIGZpcnN0LiBJdCBjYW4gdGhlbiBsb2FkCi8vLyBvdGhlciBbRGVmZXJyZWRGcmFnbWVudF1zLgpjbGFzcyBNYWluRnJhZ21lbnQgZXh0ZW5kcyBGcmFnbWVudCB7CiAgZmluYWwganMuU3RhdGVtZW50IGludm9rZU1haW47CgogIE1haW5GcmFnbWVudCgKICAgICAgT3V0cHV0VW5pdCBvdXRwdXRVbml0LAogICAgICBTdHJpbmcgb3V0cHV0RmlsZU5hbWUsCiAgICAgIHRoaXMuaW52b2tlTWFpbiwKICAgICAgTGlzdDxMaWJyYXJ5PiBsaWJyYXJpZXMsCiAgICAgIExpc3Q8U3RhdGljRmllbGQ+IHN0YXRpY05vbkZpbmFsRmllbGRzLAogICAgICBMaXN0PFN0YXRpY0ZpZWxkPiBzdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkcywKICAgICAgTGlzdDxDb25zdGFudD4gY29uc3RhbnRzKQogICAgICA6IHN1cGVyKG91dHB1dFVuaXQsIG91dHB1dEZpbGVOYW1lLCBsaWJyYXJpZXMsIHN0YXRpY05vbkZpbmFsRmllbGRzLAogICAgICAgICAgICBzdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkcywgY29uc3RhbnRzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNYWluRnJhZ21lbnQgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdNYWluRnJhZ21lbnQoKSc7CiAgfQp9CgovLy8gQW4gb3V0cHV0IChmaWxlKSBmb3IgZGVmZXJyZWQgY29kZS4KY2xhc3MgRGVmZXJyZWRGcmFnbWVudCBleHRlbmRzIEZyYWdtZW50IHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgRGVmZXJyZWRGcmFnbWVudCgKICAgICAgT3V0cHV0VW5pdCBvdXRwdXRVbml0LAogICAgICBTdHJpbmcgb3V0cHV0RmlsZU5hbWUsCiAgICAgIHRoaXMubmFtZSwKICAgICAgTGlzdDxMaWJyYXJ5PiBsaWJyYXJpZXMsCiAgICAgIExpc3Q8U3RhdGljRmllbGQ+IHN0YXRpY05vbkZpbmFsRmllbGRzLAogICAgICBMaXN0PFN0YXRpY0ZpZWxkPiBzdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkcywKICAgICAgTGlzdDxDb25zdGFudD4gY29uc3RhbnRzKQogICAgICA6IHN1cGVyKG91dHB1dFVuaXQsIG91dHB1dEZpbGVOYW1lLCBsaWJyYXJpZXMsIHN0YXRpY05vbkZpbmFsRmllbGRzLAogICAgICAgICAgICBzdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkcywgY29uc3RhbnRzKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNNYWluRnJhZ21lbnQgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnRGVmZXJyZWRGcmFnbWVudChuYW1lPSR7bmFtZX0pJzsKICB9Cn0KCmNsYXNzIENvbnN0YW50IHsKICBmaW5hbCBqcy5OYW1lIG5hbWU7CiAgZmluYWwgSG9sZGVyIGhvbGRlcjsKICBmaW5hbCBDb25zdGFudFZhbHVlIHZhbHVlOwoKICBDb25zdGFudCh0aGlzLm5hbWUsIHRoaXMuaG9sZGVyLCB0aGlzLnZhbHVlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdDb25zdGFudChuYW1lPSR7bmFtZS5rZXl9LHZhbHVlPSR7dmFsdWUudG9TdHJ1Y3R1cmVkVGV4dCgpfSknOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgRmllbGRDb250YWluZXIgewogIExpc3Q8RmllbGQ+IGdldCBzdGF0aWNGaWVsZHNGb3JSZWZsZWN0aW9uOwp9CgpjbGFzcyBMaWJyYXJ5IGltcGxlbWVudHMgRmllbGRDb250YWluZXIgewogIC8vLyBUaGUgZWxlbWVudCBzaG91bGQgb25seSBiZSB1c2VkIGR1cmluZyB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1vZGVsLgogIC8vLyBVc2VzIGluZGljYXRlIG1pc3NpbmcgaW5mb3JtYXRpb24gaW4gdGhlIG1vZGVsLgogIGZpbmFsIExpYnJhcnlFbnRpdHkgZWxlbWVudDsKCiAgZmluYWwgU3RyaW5nIHVyaTsKICBmaW5hbCBMaXN0PFN0YXRpY01ldGhvZD4gc3RhdGljczsKICBmaW5hbCBMaXN0PENsYXNzPiBjbGFzc2VzOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBMaXN0PEZpZWxkPiBzdGF0aWNGaWVsZHNGb3JSZWZsZWN0aW9uOwoKICBMaWJyYXJ5KHRoaXMuZWxlbWVudCwgdGhpcy51cmksIHRoaXMuc3RhdGljcywgdGhpcy5jbGFzc2VzLAogICAgICB0aGlzLnN0YXRpY0ZpZWxkc0ZvclJlZmxlY3Rpb24pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ0xpYnJhcnkodXJpPSR7dXJpfSxlbGVtZW50PSR7ZWxlbWVudH0pJzsKICB9Cn0KCmNsYXNzIFN0YXRpY0ZpZWxkIHsKICAvLy8gVGhlIGVsZW1lbnQgc2hvdWxkIG9ubHkgYmUgdXNlZCBkdXJpbmcgdGhlIHRyYW5zaXRpb24gdG8gdGhlIG5ldyBtb2RlbC4KICAvLy8gVXNlcyBpbmRpY2F0ZSBtaXNzaW5nIGluZm9ybWF0aW9uIGluIHRoZSBtb2RlbC4KICBmaW5hbCBGaWVsZEVudGl0eSBlbGVtZW50OwoKICBmaW5hbCBqcy5OYW1lIG5hbWU7CiAgZmluYWwganMuTmFtZSBnZXR0ZXJOYW1lOwogIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGUgaG9sZGVyIGZvciBzdGF0aWMgZmllbGRzIGlzIHRoZSBpc29sYXRlIG9iamVjdC4gV2UKICAvLyBjb3VsZCByZW1vdmUgdGhpcyBmaWVsZCBhbmQgdXNlIHRoZSBpc29sYXRlIG9iamVjdCBkaXJlY3RseS4KICBmaW5hbCBIb2xkZXIgaG9sZGVyOwogIGZpbmFsIGpzLkV4cHJlc3Npb24gY29kZTsKICBmaW5hbCBib29sIGlzRmluYWw7CiAgZmluYWwgYm9vbCBpc0xhenk7CiAgZmluYWwgYm9vbCBpc0luaXRpYWxpemVkQnlDb25zdGFudDsKCiAgU3RhdGljRmllbGQodGhpcy5lbGVtZW50LCB0aGlzLm5hbWUsIHRoaXMuZ2V0dGVyTmFtZSwgdGhpcy5ob2xkZXIsIHRoaXMuY29kZSwKICAgICAge3RoaXMuaXNGaW5hbCwgdGhpcy5pc0xhenksIHRoaXMuaXNJbml0aWFsaXplZEJ5Q29uc3RhbnQ6IGZhbHNlfSk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnU3RhdGljRmllbGQobmFtZT0ke25hbWUua2V5fSxlbGVtZW50PSR7ZWxlbWVudH0pJzsKICB9Cn0KCmNsYXNzIENsYXNzIGltcGxlbWVudHMgRmllbGRDb250YWluZXIgewogIC8vLyBUaGUgZWxlbWVudCBzaG91bGQgb25seSBiZSB1c2VkIGR1cmluZyB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1vZGVsLgogIC8vLyBVc2VzIGluZGljYXRlIG1pc3NpbmcgaW5mb3JtYXRpb24gaW4gdGhlIG1vZGVsLgogIGZpbmFsIENsYXNzRW50aXR5IGVsZW1lbnQ7CgogIGZpbmFsIGpzLk5hbWUgbmFtZTsKICBmaW5hbCBIb2xkZXIgaG9sZGVyOwogIENsYXNzIF9zdXBlcmNsYXNzOwogIENsYXNzIF9taXhpbkNsYXNzOwogIGZpbmFsIExpc3Q8TWV0aG9kPiBtZXRob2RzOwogIGZpbmFsIExpc3Q8RmllbGQ+IGZpZWxkczsKICBmaW5hbCBMaXN0PFN0dWJNZXRob2Q+IGlzQ2hlY2tzOwogIGZpbmFsIENsYXNzQ2hlY2tzIGNsYXNzQ2hlY2tzTmV3UnRpOwogIGZpbmFsIExpc3Q8U3R1Yk1ldGhvZD4gY2hlY2tlZFNldHRlcnM7CgogIC8vLyBTdHViIG1ldGhvZHMgZm9yIHRoaXMgY2xhc3MgdGhhdCBhcmUgY2FsbCBzdHVicyBmb3IgZ2V0dGVycy4KICBmaW5hbCBMaXN0PFN0dWJNZXRob2Q+IGNhbGxTdHViczsKCiAgLy8vIG5vU3VjaE1ldGhvZCBzdHVicyBpbiB0aGUgc3BlY2lhbCBjYXNlIHRoYXQgdGhlIGNsYXNzIGlzIE9iamVjdC4KICBmaW5hbCBMaXN0PFN0dWJNZXRob2Q+IG5vU3VjaE1ldGhvZFN0dWJzOwogIEBvdmVycmlkZQogIGZpbmFsIExpc3Q8RmllbGQ+IHN0YXRpY0ZpZWxkc0ZvclJlZmxlY3Rpb247CiAgZmluYWwgYm9vbCBoYXNSdGlGaWVsZDsgLy8gUGVyLWluc3RhbmNlIHJ1bnRpbWUgdHlwZSBpbmZvcm1hdGlvbiBwc2V1ZG8tZmllbGQuCiAgZmluYWwgYm9vbCBvbmx5Rm9yUnRpOwogIGZpbmFsIGJvb2wgaXNEaXJlY3RseUluc3RhbnRpYXRlZDsKICBmaW5hbCBib29sIGlzTmF0aXZlOwogIGZpbmFsIGJvb2wgaXNDbG9zdXJlQmFzZUNsYXNzOyAvLyBDb21tb24gYmFzZSBjbGFzcyBmb3IgY2xvc3VyZXMuCgogIC8vLyBXaGV0aGVyIHRoaXMgY2xhc3Mgc2hvdWxkIGJlIHNvZnQgZGVmZXJyZWQuCiAgLy8vCiAgLy8vIEEgc29mdC1kZWZlcnJlZCBjbGFzcyBpcyBvbmx5IGZ1bGx5IGluaXRpYWxpemVkIGF0IGZpcnN0IGluc3RhbnRpYXRpb24uCiAgZmluYWwgYm9vbCBpc1NvZnREZWZlcnJlZDsKCiAgZmluYWwgYm9vbCBpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbjsKCiAgLy8gSWYgdGhlIGNsYXNzIGltcGxlbWVudHMgYSBmdW5jdGlvbiB0eXBlLCBhbmQgdGhlIHR5cGUgaXMgZW5jb2RlZCBpbiB0aGUKICAvLyBtZXRhdGFkYSB0YWJsZSwgdGhlbiB0aGlzIGZpZWxkIGNvbnRhaW5zIHRoZSBpbmRleCBpbnRvIHRoYXQgZmllbGQuCiAgZmluYWwganMuRXhwcmVzc2lvbiBmdW5jdGlvblR5cGVJbmRleDsKCiAgLy8vIFdoZXRoZXIgdGhlIGNsYXNzIG11c3QgYmUgZXZhbHVhdGVkIGVhZ2VybHkuCiAgYm9vbCBpc0VhZ2VyID0gZmFsc2U7CgogIC8vLyBMZWFmIHRhZ3MuIFNlZSBbTmF0aXZlRW1pdHRlci5wcmVwYXJlTmF0aXZlQ2xhc3Nlc10uCiAgTGlzdDxTdHJpbmc+IG5hdGl2ZUxlYWZUYWdzOwoKICAvLy8gTm9uLWxlYWYgdGFncy4gU2VlIFtOYXRpdmVFbWl0dGVyLnByZXBhcmVOYXRpdmVDbGFzc2VzXS4KICBMaXN0PFN0cmluZz4gbmF0aXZlTm9uTGVhZlRhZ3M7CgogIC8vLyBOYXRpdmUgZXh0ZW5zaW9ucy4gU2VlIFtOYXRpdmVFbWl0dGVyLnByZXBhcmVOYXRpdmVDbGFzc2VzXS4KICBMaXN0PENsYXNzPiBuYXRpdmVFeHRlbnNpb25zOwoKICBDbGFzcygKICAgICAgdGhpcy5lbGVtZW50LAogICAgICB0aGlzLm5hbWUsCiAgICAgIHRoaXMuaG9sZGVyLAogICAgICB0aGlzLm1ldGhvZHMsCiAgICAgIHRoaXMuZmllbGRzLAogICAgICB0aGlzLnN0YXRpY0ZpZWxkc0ZvclJlZmxlY3Rpb24sCiAgICAgIHRoaXMuY2FsbFN0dWJzLAogICAgICB0aGlzLm5vU3VjaE1ldGhvZFN0dWJzLAogICAgICB0aGlzLmNoZWNrZWRTZXR0ZXJzLAogICAgICB0aGlzLmlzQ2hlY2tzLAogICAgICB0aGlzLmNsYXNzQ2hlY2tzTmV3UnRpLAogICAgICB0aGlzLmZ1bmN0aW9uVHlwZUluZGV4LAogICAgICB7dGhpcy5oYXNSdGlGaWVsZCwKICAgICAgdGhpcy5vbmx5Rm9yUnRpLAogICAgICB0aGlzLmlzRGlyZWN0bHlJbnN0YW50aWF0ZWQsCiAgICAgIHRoaXMuaXNOYXRpdmUsCiAgICAgIHRoaXMuaXNDbG9zdXJlQmFzZUNsYXNzLAogICAgICB0aGlzLmlzU29mdERlZmVycmVkID0gZmFsc2UsCiAgICAgIHRoaXMuaXNTdXBlck1peGluQXBwbGljYXRpb259KSB7CiAgICBhc3NlcnQob25seUZvclJ0aSAhPSBudWxsKTsKICAgIGFzc2VydChpc0RpcmVjdGx5SW5zdGFudGlhdGVkICE9IG51bGwpOwogICAgYXNzZXJ0KGlzTmF0aXZlICE9IG51bGwpOwogICAgYXNzZXJ0KGlzQ2xvc3VyZUJhc2VDbGFzcyAhPSBudWxsKTsKICB9CgogIGJvb2wgZ2V0IGlzU2ltcGxlTWl4aW5BcHBsaWNhdGlvbiA9PiBmYWxzZTsKCiAgQ2xhc3MgZ2V0IHN1cGVyY2xhc3MgPT4gX3N1cGVyY2xhc3M7CgogIHZvaWQgc2V0U3VwZXJjbGFzcyhDbGFzcyBzdXBlcmNsYXNzKSB7CiAgICBfc3VwZXJjbGFzcyA9IHN1cGVyY2xhc3M7CiAgfQoKICBDbGFzcyBnZXQgbWl4aW5DbGFzcyA9PiBfbWl4aW5DbGFzczsKCiAgdm9pZCBzZXRNaXhpbkNsYXNzKENsYXNzIG1peGluQ2xhc3MpIHsKICAgIF9taXhpbkNsYXNzID0gbWl4aW5DbGFzczsKICB9CgogIGpzLk5hbWUgZ2V0IHN1cGVyY2xhc3NOYW1lID0+IHN1cGVyY2xhc3MgPT0gbnVsbCA/IG51bGwgOiBzdXBlcmNsYXNzLm5hbWU7CgogIGludCBnZXQgc3VwZXJjbGFzc0hvbGRlckluZGV4ID0+CiAgICAgIChzdXBlcmNsYXNzID09IG51bGwpID8gMCA6IHN1cGVyY2xhc3MuaG9sZGVyLmluZGV4OwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQ2xhc3MobmFtZT0ke25hbWUua2V5fSxlbGVtZW50PSRlbGVtZW50KSc7Cn0KCmNsYXNzIE1peGluQXBwbGljYXRpb24gZXh0ZW5kcyBDbGFzcyB7CiAgTWl4aW5BcHBsaWNhdGlvbigKICAgICAgQ2xhc3NFbnRpdHkgZWxlbWVudCwKICAgICAganMuTmFtZSBuYW1lLAogICAgICBIb2xkZXIgaG9sZGVyLAogICAgICBMaXN0PEZpZWxkPiBpbnN0YW5jZUZpZWxkcywKICAgICAgTGlzdDxGaWVsZD4gc3RhdGljRmllbGRzRm9yUmVmbGVjdGlvbiwKICAgICAgTGlzdDxTdHViTWV0aG9kPiBjYWxsU3R1YnMsCiAgICAgIExpc3Q8U3R1Yk1ldGhvZD4gY2hlY2tlZFNldHRlcnMsCiAgICAgIExpc3Q8U3R1Yk1ldGhvZD4gaXNDaGVja3MsCiAgICAgIENsYXNzQ2hlY2tzIGNsYXNzQ2hlY2tzTmV3UnRpLAogICAgICBqcy5FeHByZXNzaW9uIGZ1bmN0aW9uVHlwZUluZGV4LAogICAgICB7Ym9vbCBoYXNSdGlGaWVsZCwKICAgICAgYm9vbCBvbmx5Rm9yUnRpLAogICAgICBib29sIGlzRGlyZWN0bHlJbnN0YW50aWF0ZWR9KQogICAgICA6IHN1cGVyKAogICAgICAgICAgICBlbGVtZW50LAogICAgICAgICAgICBuYW1lLAogICAgICAgICAgICBob2xkZXIsCiAgICAgICAgICAgIGNvbnN0IDxNZXRob2Q+W10sCiAgICAgICAgICAgIGluc3RhbmNlRmllbGRzLAogICAgICAgICAgICBzdGF0aWNGaWVsZHNGb3JSZWZsZWN0aW9uLAogICAgICAgICAgICBjYWxsU3R1YnMsCiAgICAgICAgICAgIGNvbnN0IDxTdHViTWV0aG9kPltdLAogICAgICAgICAgICBjaGVja2VkU2V0dGVycywKICAgICAgICAgICAgaXNDaGVja3MsCiAgICAgICAgICAgIGNsYXNzQ2hlY2tzTmV3UnRpLAogICAgICAgICAgICBmdW5jdGlvblR5cGVJbmRleCwKICAgICAgICAgICAgaGFzUnRpRmllbGQ6IGhhc1J0aUZpZWxkLAogICAgICAgICAgICBvbmx5Rm9yUnRpOiBvbmx5Rm9yUnRpLAogICAgICAgICAgICBpc0RpcmVjdGx5SW5zdGFudGlhdGVkOiBpc0RpcmVjdGx5SW5zdGFudGlhdGVkLAogICAgICAgICAgICBpc05hdGl2ZTogZmFsc2UsCiAgICAgICAgICAgIGlzQ2xvc3VyZUJhc2VDbGFzczogZmFsc2UsCiAgICAgICAgICAgIGlzU3VwZXJNaXhpbkFwcGxpY2F0aW9uOiBmYWxzZSk7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzU2ltcGxlTWl4aW5BcHBsaWNhdGlvbiA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnTWl4aW4obmFtZT0ke25hbWUua2V5fSxlbGVtZW50PSRlbGVtZW50KSc7Cn0KCi8vLyBBIGZpZWxkLgovLy8KLy8vIEluIGdlbmVyYWwgcmVwcmVzZW50cyBhbiBpbnN0YW5jZSBmaWVsZCwgYnV0IGZvciByZWZsZWN0aW9uIG1heSBhbHNvCi8vLyByZXByZXNlbnQgc3RhdGljIGZpZWxkcy4KY2xhc3MgRmllbGQgewogIC8vLyBUaGUgZWxlbWVudCBzaG91bGQgb25seSBiZSB1c2VkIGR1cmluZyB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1vZGVsLgogIC8vLyBVc2VzIGluZGljYXRlIG1pc3NpbmcgaW5mb3JtYXRpb24gaW4gdGhlIG1vZGVsLgogIGZpbmFsIEZpZWxkRW50aXR5IGVsZW1lbnQ7CgogIGZpbmFsIGpzLk5hbWUgbmFtZTsKICBmaW5hbCBqcy5OYW1lIGFjY2Vzc29yTmFtZTsKCiAgLy8vIDAwOiBEb2VzIG5vdCBuZWVkIGFueSBnZXR0ZXIuCiAgLy8vIDAxOiAgZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzLmZpZWxkOyB9CiAgLy8vIDEwOiAgZnVuY3Rpb24ocmVjZWl2ZXIpIHsgcmV0dXJuIHJlY2VpdmVyLmZpZWxkOyB9CiAgLy8vIDExOiAgZnVuY3Rpb24ocmVjZWl2ZXIpIHsgcmV0dXJuIHRoaXMuZmllbGQ7IH0KICBmaW5hbCBpbnQgZ2V0dGVyRmxhZ3M7CgogIC8vLyAwMDogRG9lcyBub3QgbmVlZCBhbnkgc2V0dGVyLgogIC8vLyAwMTogIGZ1bmN0aW9uKHZhbHVlKSB7IHRoaXMuZmllbGQgPSB2YWx1ZTsgfQogIC8vLyAxMDogIGZ1bmN0aW9uKHJlY2VpdmVyLCB2YWx1ZSkgeyByZWNlaXZlci5maWVsZCA9IHZhbHVlOyB9CiAgLy8vIDExOiAgZnVuY3Rpb24ocmVjZWl2ZXIsIHZhbHVlKSB7IHRoaXMuZmllbGQgPSB2YWx1ZTsgfQogIGZpbmFsIGludCBzZXR0ZXJGbGFnczsKCiAgZmluYWwgYm9vbCBuZWVkc0NoZWNrZWRTZXR0ZXI7CgogIGZpbmFsIENvbnN0YW50VmFsdWUgaW5pdGlhbGl6ZXJJbkFsbG9jYXRvcjsKCiAgZmluYWwgQ29uc3RhbnRWYWx1ZSBjb25zdGFudFZhbHVlOwoKICBmaW5hbCBib29sIGlzRWxpZGVkOwoKICAvLyBUT0RPKGZsb2l0c2NoKTogc3VwcG9ydCByZW5hbWVkIGZpZWxkcy4KICBGaWVsZCgKICAgICAgdGhpcy5lbGVtZW50LAogICAgICB0aGlzLm5hbWUsCiAgICAgIHRoaXMuYWNjZXNzb3JOYW1lLAogICAgICB0aGlzLmdldHRlckZsYWdzLAogICAgICB0aGlzLnNldHRlckZsYWdzLAogICAgICB0aGlzLm5lZWRzQ2hlY2tlZFNldHRlciwKICAgICAgdGhpcy5pbml0aWFsaXplckluQWxsb2NhdG9yLAogICAgICB0aGlzLmNvbnN0YW50VmFsdWUsCiAgICAgIHRoaXMuaXNFbGlkZWQpOwoKICBib29sIGdldCBuZWVkc0dldHRlciA9PiBnZXR0ZXJGbGFncyAhPSAwOwogIGJvb2wgZ2V0IG5lZWRzVW5jaGVja2VkU2V0dGVyID0+IHNldHRlckZsYWdzICE9IDA7CgogIGJvb2wgZ2V0IG5lZWRzSW50ZXJjZXB0ZWRHZXR0ZXIgPT4gZ2V0dGVyRmxhZ3MgPiAxOwogIGJvb2wgZ2V0IG5lZWRzSW50ZXJjZXB0ZWRTZXR0ZXIgPT4gc2V0dGVyRmxhZ3MgPiAxOwoKICBib29sIGdldCBuZWVkc0ludGVyY2VwdGVkR2V0dGVyT25SZWNlaXZlciA9PiBnZXR0ZXJGbGFncyA9PSAyOwogIGJvb2wgZ2V0IG5lZWRzSW50ZXJjZXB0ZWRTZXR0ZXJPblJlY2VpdmVyID0+IHNldHRlckZsYWdzID09IDI7CgogIGJvb2wgZ2V0IG5lZWRzSW50ZXJjZXB0ZWRHZXR0ZXJPblRoaXMgPT4gZ2V0dGVyRmxhZ3MgPT0gMzsKICBib29sIGdldCBuZWVkc0ludGVyY2VwdGVkU2V0dGVyT25UaGlzID0+IHNldHRlckZsYWdzID09IDM7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnRmllbGQobmFtZT0ke25hbWUua2V5fSxlbGVtZW50PSR7ZWxlbWVudH0pJzsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIE1ldGhvZCB7CiAgLy8vIFRoZSBlbGVtZW50IHNob3VsZCBvbmx5IGJlIHVzZWQgZHVyaW5nIHRoZSB0cmFuc2l0aW9uIHRvIHRoZSBuZXcgbW9kZWwuCiAgLy8vIFVzZXMgaW5kaWNhdGUgbWlzc2luZyBpbmZvcm1hdGlvbiBpbiB0aGUgbW9kZWwuCiAgZmluYWwgTWVtYmVyRW50aXR5IGVsZW1lbnQ7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGUgbWV0aG9kLiBJZiB0aGUgbWV0aG9kIGlzIGEgW1BhcmFtZXRlclN0dWJNZXRob2RdIGZvciBhCiAgLy8vIHN0YXRpYyBmdW5jdGlvbiwgdGhlbiB0aGUgbmFtZSBjYW4gYmUgYG51bGxgLiBJbiB0aGF0IGNhc2UsIG9ubHkgdGhlCiAgLy8vIFtQYXJhbWV0ZXJTdHViTWV0aG9kLmNhbGxOYW1lXSBzaG91bGQgYmUgdXNlZC4KICBmaW5hbCBqcy5OYW1lIG5hbWU7CiAgZmluYWwganMuRXhwcmVzc2lvbiBjb2RlOwoKICBNZXRob2QodGhpcy5lbGVtZW50LCB0aGlzLm5hbWUsIHRoaXMuY29kZSk7Cn0KCi8vLyBBIG1ldGhvZCB0aGF0IGNvcnJlc3BvbmRzIHRvIGEgbWV0aG9kIGluIHRoZSBvcmlnaW5hbCBEYXJ0IHByb2dyYW0uCmFic3RyYWN0IGNsYXNzIERhcnRNZXRob2QgZXh0ZW5kcyBNZXRob2QgewogIGZpbmFsIGJvb2wgbmVlZHNUZWFyT2ZmOwogIGZpbmFsIGpzLk5hbWUgdGVhck9mZk5hbWU7CiAgZmluYWwgTGlzdDxQYXJhbWV0ZXJTdHViTWV0aG9kPiBwYXJhbWV0ZXJTdHViczsKICBmaW5hbCBib29sIGNhbkJlQXBwbGllZDsKICBmaW5hbCBpbnQgYXBwbHlJbmRleDsKCiAgLy8gSXMgbm9uLW51bGwgaWYgW25lZWRzVGVhck9mZl0uCiAgLy8KICAvLyBJZiB0aGUgdHlwZSBpcyBlbmNvZGVkIGluIHRoZSBtZXRhZGF0YSB0YWJsZSB0aGlzIGZpZWxkIGNvbnRhaW5zIGFuIGluZGV4CiAgLy8gaW50byB0aGUgdGFibGUuIE90aGVyd2lzZSB0aGUgdHlwZSBjb250YWlucyB0eXBlIHZhcmlhYmxlcyBpbiB3aGljaCBjYXNlCiAgLy8gdGhpcyBmaWVsZCBob2xkcyBhIGZ1bmN0aW9uIGNvbXB1dGluZyB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLgogIGZpbmFsIGpzLkV4cHJlc3Npb24gZnVuY3Rpb25UeXBlOwoKICAvLyBTaWduYXR1cmUgaW5mb3JtYXRpb24gZm9yIHRoaXMgbWV0aG9kLiBbb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzXSBpcwogIC8vIG9ubHkgcmVxdWlyZWQgYW5kIHN0b3JlZCBoZXJlIGlmIHRoZSBtZXRob2QgW2NhbkJlQXBwbGllZF0uIFRoZSBjb3VudCBpcwogIC8vIGFsd2F5cyBzdG9yZWQgdG8gaGVscCBzZWxlY3Qgc3BlY2lhbGl6ZWQgdGVhci1vZmYgcGF0aHMuCiAgZmluYWwgaW50IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CiAgZmluYWwgLyogTWFwIHwgTGlzdCAqLyBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXM7CgogIC8vIElmIHRoaXMgbWV0aG9kIGNhbiBiZSB0b3JuIG9mZiwgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcKICAvLyBjYWxsIG1ldGhvZC4gRm9yIGV4YW1wbGUsIGZvciB0aGUgbWVtYmVyIGBmb28kMSRuYW1lYCBpdCB3b3VsZCBiZQogIC8vIGBjYWxsJDEkbmFtZWAgKGluIHVubWluaWZpZWQgbW9kZSkuCiAgZmluYWwganMuTmFtZSBjYWxsTmFtZTsKCiAgRGFydE1ldGhvZChGdW5jdGlvbkVudGl0eSBlbGVtZW50LCBqcy5OYW1lIG5hbWUsIGpzLkV4cHJlc3Npb24gY29kZSwKICAgICAgdGhpcy5wYXJhbWV0ZXJTdHVicywgdGhpcy5jYWxsTmFtZSwKICAgICAge3RoaXMubmVlZHNUZWFyT2ZmLAogICAgICB0aGlzLnRlYXJPZmZOYW1lLAogICAgICB0aGlzLmNhbkJlQXBwbGllZCwKICAgICAgdGhpcy5yZXF1aXJlZFBhcmFtZXRlckNvdW50LAogICAgICB0aGlzLm9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgdGhpcy5mdW5jdGlvblR5cGUsCiAgICAgIHRoaXMuYXBwbHlJbmRleH0pCiAgICAgIDogc3VwZXIoZWxlbWVudCwgbmFtZSwgY29kZSkgewogICAgYXNzZXJ0KG5lZWRzVGVhck9mZiAhPSBudWxsKTsKICAgIGFzc2VydCghbmVlZHNUZWFyT2ZmIHx8IHRlYXJPZmZOYW1lICE9IG51bGwpOwogICAgYXNzZXJ0KGNhbkJlQXBwbGllZCAhPSBudWxsKTsKICAgIGFzc2VydCghY2FuQmVBcHBsaWVkIHx8CiAgICAgICAgKHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgIT0gbnVsbCAmJgogICAgICAgICAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMgIT0gbnVsbCkpOwogIH0KCiAgYm9vbCBnZXQgaXNTdGF0aWM7Cn0KCmNsYXNzIEluc3RhbmNlTWV0aG9kIGV4dGVuZHMgRGFydE1ldGhvZCB7CiAgLy8vIEFuIGFsdGVybmF0aXZlIG5hbWUgZm9yIHRoaXMgbWV0aG9kLiBUaGlzIGlzIHVzZWQgdG8gbW9kZWwgY2FsbHMgdG8KICAvLy8gYSBtZXRob2QgdmlhIGBzdXBlcmAuIElmIFthbGlhc05hbWVdIGlzIG5vbi1udWxsLCB0aGUgZW1pdHRlciBoYXMgdG8KICAvLy8gZW5zdXJlIHRoYXQgdGhpcyBtZXRob2QgaXMgcmVnaXN0ZXJlZCBvbiB0aGUgcHJvdG90eXBlIHVuZGVyIGJvdGggW25hbWVdCiAgLy8vIGFuZCBbYWxpYXNOYW1lXS4KICBmaW5hbCBqcy5OYW1lIGFsaWFzTmFtZTsKCiAgLy8vIFRydWUgaWYgdGhpcyBpcyB0aGUgaW1wbGljaXQgYGNhbGxgIGluc3RhbmNlIG1ldGhvZCBvZiBhbiBhbm9ueW1vdXMKICAvLy8gY2xvc3VyZS4gVGhpcyBwcmVkaWNhdGUgaXMgZmFsc2UgZm9yIGV4cGxpY2l0IGBjYWxsYCBtZXRob2RzIGFuZCBmb3IKICAvLy8gZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRvcm4gb2ZmLgogIGZpbmFsIGJvb2wgaXNDbG9zdXJlQ2FsbE1ldGhvZDsKCiAgLy8vIFRydWUgaWYgdGhlIGludGVyY2VwdG9yIGNhbGxpbmcgY29udmVudGlvbiBpcyB1c2VkIGZvciB0aGlzIG1ldGhvZC4KICBmaW5hbCBib29sIGlzSW50ZXJjZXB0ZWQ7CgogIC8vLyBOYW1lIGNhbGxlZCB2aWEgdGhlIGdlbmVyYWwgJ2NhdGNoIGFsbCcgcGF0aCBvZiBGdW5jdGlvbi5hcHBseS4KICAvLy9maW5hbCBqcy5OYW1lIGFwcGx5TmFtZTsKCiAgSW5zdGFuY2VNZXRob2QoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwganMuTmFtZSBuYW1lLCBqcy5FeHByZXNzaW9uIGNvZGUsCiAgICAgIExpc3Q8UGFyYW1ldGVyU3R1Yk1ldGhvZD4gcGFyYW1ldGVyU3R1YnMsIGpzLk5hbWUgY2FsbE5hbWUsCiAgICAgIHtib29sIG5lZWRzVGVhck9mZiwKICAgICAganMuTmFtZSB0ZWFyT2ZmTmFtZSwKICAgICAgdGhpcy5hbGlhc05hbWUsCiAgICAgIGJvb2wgY2FuQmVBcHBsaWVkLAogICAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgLyogTGlzdCB8IE1hcCAqLyBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgIHRoaXMuaXNDbG9zdXJlQ2FsbE1ldGhvZCwKICAgICAgdGhpcy5pc0ludGVyY2VwdGVkLAogICAgICBqcy5FeHByZXNzaW9uIGZ1bmN0aW9uVHlwZSwKICAgICAgaW50IGFwcGx5SW5kZXh9KQogICAgICA6IHN1cGVyKGVsZW1lbnQsIG5hbWUsIGNvZGUsIHBhcmFtZXRlclN0dWJzLCBjYWxsTmFtZSwKICAgICAgICAgICAgbmVlZHNUZWFyT2ZmOiBuZWVkc1RlYXJPZmYsCiAgICAgICAgICAgIHRlYXJPZmZOYW1lOiB0ZWFyT2ZmTmFtZSwKICAgICAgICAgICAgY2FuQmVBcHBsaWVkOiBjYW5CZUFwcGxpZWQsCiAgICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ6IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgICAgIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlczogb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICAgICAgICBmdW5jdGlvblR5cGU6IGZ1bmN0aW9uVHlwZSwKICAgICAgICAgICAgYXBwbHlJbmRleDogYXBwbHlJbmRleCkgewogICAgYXNzZXJ0KGlzQ2xvc3VyZUNhbGxNZXRob2QgIT0gbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1N0YXRpYyA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdJbnN0YW5jZU1ldGhvZChuYW1lPSR7bmFtZS5rZXl9LGVsZW1lbnQ9JHtlbGVtZW50fScKICAgICAgICAnLGNvZGU9JHtqcy5ub2RlVG9TdHJpbmcoY29kZSl9KSc7CiAgfQp9CgovLy8gQSBtZXRob2QgdGhhdCBpcyBnZW5lcmF0ZWQgYnkgdGhlIGJhY2tlbmQgYW5kIGhhcyBub3QgZGlyZWN0IGNvcnJlc3BvbmRlbmNlCi8vLyB0byBhIG1ldGhvZCBpbiB0aGUgb3JpZ2luYWwgRGFydCBwcm9ncmFtLiBFeGFtcGxlcyBhcmUgZ2V0dGVyIGFuZCBzZXR0ZXIKLy8vIHN0dWJzIGFuZCBzdHVicyB0byBkaXNwYXRjaCBjYWxscyB0byBtZXRob2RzIHdpdGggb3B0aW9uYWwgcGFyYW1ldGVycy4KY2xhc3MgU3R1Yk1ldGhvZCBleHRlbmRzIE1ldGhvZCB7CiAgU3R1Yk1ldGhvZChqcy5OYW1lIG5hbWUsIGpzLkV4cHJlc3Npb24gY29kZSwge01lbWJlckVudGl0eSBlbGVtZW50fSkKICAgICAgOiBzdXBlcihlbGVtZW50LCBuYW1lLCBjb2RlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdTdHViTWV0aG9kKG5hbWU9JHtuYW1lLmtleX0sZWxlbWVudD0ke2VsZW1lbnR9JwogICAgICAgICcsY29kZT0ke2pzLm5vZGVUb1N0cmluZyhjb2RlKX0pJzsKICB9Cn0KCi8vLyBBIHN0dWIgdGhhdCBhZGFwdHMgYW5kIHJlZGlyZWN0cyB0byB0aGUgbWFpbiBtZXRob2QgKHRoZSBvbmUgY29udGFpbmluZykKLy8vIHRoZSBhY3R1YWwgY29kZS4KLy8vCi8vLyBGb3IgZXhhbXBsZSwgZ2l2ZW4gYSBtZXRob2QgYGZvbyQyKHgsIFt5OiA0OTldKWAgYSBwb3NzaWJsZSBwYXJhbWV0ZXIKLy8vIHN0dWItbWV0aG9kIGNvdWxkIGJlIGBmb28kMSh4KSA9PiBmb28kMih4LCA0OTkpYC4KLy8vCi8vLyBQYXJhbWV0ZXJTdHViTWV0aG9kcyBhcmUgYWx3YXlzIGF0dGFjaGVkIHRvIChzdGF0aWMgb3IgaW5zdGFuY2UpIG1ldGhvZHMuCmNsYXNzIFBhcmFtZXRlclN0dWJNZXRob2QgZXh0ZW5kcyBTdHViTWV0aG9kIHsKICAvLy8gVGhlIGBjYWxsYCBuYW1lIG9mIHRoaXMgc3R1Yi4KICAvLy8KICAvLy8gV2hlbiBhbiBpbnN0YW5jZSBtZXRob2QgaXMgdG9ybiBvZmYsIGl0IGlzIGludm9rZWQgYXMgYSBgY2FsbGAgbWVtYmVyIGFuZAogIC8vLyBub3QgaXQncyBvcmlnaW5hbCBuYW1lIGFueW1vcmUuIFRoZSBbY2FsbE5hbWVdIHByb3ZpZGVzIHRoZSBzdHViJ3MKICAvLy8gbmFtZSB3aGVuIGl0IGlzIHVzZWQgdGhpcyB3YXkuCiAgLy8vCiAgLy8vIElmIGEgc3R1YidzIG1lbWJlciBjYW4gbm90IGJlIHRvcm4gb2ZmLCB0aGUgW2NhbGxOYW1lXSBpcyBgbnVsbGAuCiAganMuTmFtZSBjYWxsTmFtZTsKCiAgUGFyYW1ldGVyU3R1Yk1ldGhvZChqcy5OYW1lIG5hbWUsIHRoaXMuY2FsbE5hbWUsIGpzLkV4cHJlc3Npb24gY29kZSwKICAgICAge01lbWJlckVudGl0eSBlbGVtZW50fSkKICAgICAgOiBzdXBlcihuYW1lLCBjb2RlLCBlbGVtZW50OiBlbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdQYXJhbWV0ZXJTdHViTWV0aG9kKG5hbWU9JHtuYW1lLmtleX0sIGNhbGxOYW1lPSR7Y2FsbE5hbWU/LmtleX0nCiAgICAgICAgJywgZWxlbWVudD0ke2VsZW1lbnR9JwogICAgICAgICcsIGNvZGU9JHtqcy5ub2RlVG9TdHJpbmcoY29kZSl9KSc7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBTdGF0aWNNZXRob2QgaW1wbGVtZW50cyBNZXRob2QgewogIEhvbGRlciBnZXQgaG9sZGVyOwp9CgpjbGFzcyBTdGF0aWNEYXJ0TWV0aG9kIGV4dGVuZHMgRGFydE1ldGhvZCBpbXBsZW1lbnRzIFN0YXRpY01ldGhvZCB7CiAgQG92ZXJyaWRlCiAgZmluYWwgSG9sZGVyIGhvbGRlcjsKCiAgU3RhdGljRGFydE1ldGhvZCgKICAgICAgRnVuY3Rpb25FbnRpdHkgZWxlbWVudCwKICAgICAganMuTmFtZSBuYW1lLAogICAgICB0aGlzLmhvbGRlciwKICAgICAganMuRXhwcmVzc2lvbiBjb2RlLAogICAgICBMaXN0PFBhcmFtZXRlclN0dWJNZXRob2Q+IHBhcmFtZXRlclN0dWJzLAogICAgICBqcy5OYW1lIGNhbGxOYW1lLAogICAgICB7Ym9vbCBuZWVkc1RlYXJPZmYsCiAgICAgIGpzLk5hbWUgdGVhck9mZk5hbWUsCiAgICAgIGJvb2wgY2FuQmVBcHBsaWVkLAogICAgICBpbnQgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgLyogTGlzdCB8IE1hcCAqLyBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgIGpzLkV4cHJlc3Npb24gZnVuY3Rpb25UeXBlLAogICAgICBpbnQgYXBwbHlJbmRleH0pCiAgICAgIDogc3VwZXIoZWxlbWVudCwgbmFtZSwgY29kZSwgcGFyYW1ldGVyU3R1YnMsIGNhbGxOYW1lLAogICAgICAgICAgICBuZWVkc1RlYXJPZmY6IG5lZWRzVGVhck9mZiwKICAgICAgICAgICAgdGVhck9mZk5hbWU6IHRlYXJPZmZOYW1lLAogICAgICAgICAgICBjYW5CZUFwcGxpZWQ6IGNhbkJlQXBwbGllZCwKICAgICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudDogcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgICAgICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzOiBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgICAgICAgIGZ1bmN0aW9uVHlwZTogZnVuY3Rpb25UeXBlLAogICAgICAgICAgICBhcHBseUluZGV4OiBhcHBseUluZGV4KTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNTdGF0aWMgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdTdGF0aWNEYXJ0TWV0aG9kKG5hbWU9JHtuYW1lLmtleX0sZWxlbWVudD0ke2VsZW1lbnR9JwogICAgICAgICcsY29kZT0ke2pzLm5vZGVUb1N0cmluZyhjb2RlKX0pJzsKICB9Cn0KCmNsYXNzIFN0YXRpY1N0dWJNZXRob2QgZXh0ZW5kcyBTdHViTWV0aG9kIGltcGxlbWVudHMgU3RhdGljTWV0aG9kIHsKICBAb3ZlcnJpZGUKICBIb2xkZXIgaG9sZGVyOwogIFN0YXRpY1N0dWJNZXRob2QoanMuTmFtZSBuYW1lLCB0aGlzLmhvbGRlciwganMuRXhwcmVzc2lvbiBjb2RlKQogICAgICA6IHN1cGVyKG5hbWUsIGNvZGUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gJ1N0YXRpY1N0dWJNZXRob2QobmFtZT0ke25hbWUua2V5fSxlbGVtZW50PSR7ZWxlbWVudH19JwogICAgICAgICcsY29kZT0ke2pzLm5vZGVUb1N0cmluZyhjb2RlKX0pJzsKICB9Cn0KgokATk48ASYBNjAkTzYzMQEQIh4pISUBSi0BUFEsAU5FLjABUTAgJyYoMAQBSgZNPk4dBk1JSww5PgQBRgZNT1EGTVAUPjsEASxBMAIBTxoPFRMiIAEgSQEMFiMEAgErBEQUGlE2HwEhIk0wSzkBKh8BDBcbFiEqFwEbAgEaBFIfJiEBEB0dFx8uNyBLNwEMIwEMFh0EAgEoKhUBFB0dER8uNyBLNwEMJAEMFi0EAgERFhcdATABDBZLBAIBIC0CASpONh8BFCQdAQwvAT4nAQwWNQQCARRONh0BFhxMQhccFhUmAVBJAQwWPwQCAShONh0BFhcVFR4cIycpAUMkAUcsDC9RGSUXRAEyBk4dASYBTUkpATMYATsfAT8iAUMgAQkUERMUEyYWHhsVHh4ZFyMVHyMnICweKAQBLgEnASkeBAEnASkeBAFNASM6AQxDAgEnFBsUFSItIichJScZFyQPFRIUHhwnFyIcFh8fJiQ8HSctAQwtAQxDAgENBEkdDk42HQEWHgEkLTk1GQEkM0E9GQEhAS4BJQEXAS0JFBEZGBgfIxoWASw1ATY2AUFBAT09AQwWOQQCARhONh4BTUs1FhwBLgIBSCsbHTIbGAEkBU9OQyQBUE4+JDkBTEcpGgFHKhoYGSMrGRglIjIiHCs2BAEVAgEqSktPFxsBSksmIgFKHAFGHgFLQhobFhkiNyAaIhc9KCYoPEwoJikEAQweAQwWQCsEAgFQTUsiRyQBDBY8KwQCAU0VBEo2BE4vJAZQSSUGSBQBRx4tAQwWTR8sBAIBMBUCAUQMFwEUHhQTGjAYGhsZIjciFz0oJig8TCglAQwdAQwWQisEAgFEDBFCGwEMFkMrBAIBKnBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvbW9kZWwuZGFydDxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL25hdGl2ZV9lbWl0dGVyLmRhcnS18y8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuanNfZW1pdHRlci5uYXRpdmVfZW1pdHRlcjsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IEpDb21tb25FbGVtZW50cywgSkVsZW1lbnRFbnZpcm9ubWVudDsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JyBzaG93IERhcnRUeXBlLCBGdW5jdGlvblR5cGU7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganNBc3Q7CmltcG9ydCAnLi4vanMvanMuZGFydCcgc2hvdyBqczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvZW5xdWV1ZS5kYXJ0JyBzaG93IE5hdGl2ZUNvZGVnZW5FbnF1ZXVlcjsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKCmltcG9ydCAnY29kZV9lbWl0dGVyX3Rhc2suZGFydCcgc2hvdyBDb2RlRW1pdHRlclRhc2s7CmltcG9ydCAnbW9kZWwuZGFydCc7CgpjbGFzcyBOYXRpdmVFbWl0dGVyIHsKICBmaW5hbCBDb2RlRW1pdHRlclRhc2sgX2VtaXR0ZXJUYXNrOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgTmF0aXZlQ29kZWdlbkVucXVldWVyIF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXI7CgogIC8vIFdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIGNvbnRhaW5zIG5hdGl2ZSBjbGFzc2VzLgogIGJvb2wgaGFzTmF0aXZlQ2xhc3NlcyA9IGZhbHNlOwoKICAvLyBDYWNoZXMgdGhlIG5hdGl2ZSBzdWJ0eXBlcyBvZiBhIG5hdGl2ZSBjbGFzcy4KICBNYXA8Q2xhc3NFbnRpdHksIExpc3Q8Q2xhc3NFbnRpdHk+PiBzdWJ0eXBlcyA9CiAgICAgIDxDbGFzc0VudGl0eSwgTGlzdDxDbGFzc0VudGl0eT4+e307CgogIC8vIENhY2hlcyB0aGUgZGlyZWN0IG5hdGl2ZSBzdWJ0eXBlcyBvZiBhIG5hdGl2ZSBjbGFzcy4KICBNYXA8Q2xhc3NFbnRpdHksIExpc3Q8Q2xhc3NFbnRpdHk+PiBkaXJlY3RTdWJ0eXBlcyA9CiAgICAgIDxDbGFzc0VudGl0eSwgTGlzdDxDbGFzc0VudGl0eT4+e307CgogIC8vIENhY2hlcyB0aGUgbWV0aG9kcyB0aGF0IGhhdmUgYSBuYXRpdmUgYm9keS4KICBTZXQ8RnVuY3Rpb25FbnRpdHk+IG5hdGl2ZU1ldGhvZHMgPSBuZXcgU2V0PEZ1bmN0aW9uRW50aXR5PigpOwoKICBOYXRpdmVFbWl0dGVyKAogICAgICB0aGlzLl9lbWl0dGVyVGFzaywgdGhpcy5fY2xvc2VkV29ybGQsIHRoaXMuX25hdGl2ZUNvZGVnZW5FbnF1ZXVlcik7CgogIEpDb21tb25FbGVtZW50cyBnZXQgX2NvbW1vbkVsZW1lbnRzID0+IF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50czsKICBKRWxlbWVudEVudmlyb25tZW50IGdldCBfZWxlbWVudEVudmlyb25tZW50ID0+CiAgICAgIF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQ7CiAgTmF0aXZlRGF0YSBnZXQgX25hdGl2ZURhdGEgPT4gX2Nsb3NlZFdvcmxkLm5hdGl2ZURhdGE7CiAgSW50ZXJjZXB0b3JEYXRhIGdldCBfaW50ZXJjZXB0b3JEYXRhID0+IF9jbG9zZWRXb3JsZC5pbnRlcmNlcHRvckRhdGE7CgogIC8vLyBQcmVwYXJlcyBuYXRpdmUgY2xhc3NlcyBmb3IgZW1pc3Npb24uIFJldHVybnMgdGhlIHVubmVlZGVkIGNsYXNzZXMuCiAgLy8vCiAgLy8vIFJlbW92ZXMgdHJpdmlhbCBjbGFzc2VzICh0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBieSBhIHN1cGVyIHR5cGUpIGFuZAogIC8vLyBnZW5lcmF0ZXMgcHJvcGVydGllcyB0aGF0IGhhdmUgdG8gYmUgYWRkZWQgdG8gY2xhc3NlcyAobmF0aXZlIG9yIG5vdCkuCiAgLy8vCiAgLy8vIFVwZGF0ZXMgdGhlIGBuYXRpdmVMZWFmVGFnc2AsIGBuYXRpdmVOb25MZWFmVGFnc2AgYW5kIGBuYXRpdmVFeHRlbnNpb25zYAogIC8vLyBmaWVsZHMgb2YgdGhlIGdpdmVuIGNsYXNzZXMuIFRoaXMgZGF0YSBtdXN0IGJlIGVtaXR0ZWQgd2l0aCB0aGUKICAvLy8gY29ycmVzcG9uZGluZyBjbGFzc2VzLgogIC8vLwogIC8vLyBUaGUgaW50ZXJjZXB0b3JzIGFyZSBmaWx0ZXJlZCB0byBhdm9pZCBlbWl0dGluZyB0cml2aWFsIGludGVyY2VwdG9ycy4gIEZvcgogIC8vLyBleGFtcGxlLCBpZiB0aGUgcHJvZ3JhbSBjb250YWlucyBubyBjb2RlIHRoYXQgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlCiAgLy8vIG51bWVyb3VzIHN1YmNsYXNzZXMgb2YgYEVsZW1lbnRgIHRoZW4gd2UgY2FuIHByZXRlbmQgdGhhdCBgRWxlbWVudGAgaXMgYQogIC8vLyBsZWFmIGNsYXNzLCBhbmQgYWxsIGluc3RhbmNlcyBvZiBzdWJjbGFzc2VzIG9mIGBFbGVtZW50YCBhcmUgaW5zdGFuY2VzIG9mCiAgLy8vIGBFbGVtZW50YC4KICAvLy8KICAvLy8gVGhlcmUgaXMgYWxzbyBhIHBlcmZvcm1hbmNlIGJlbmVmaXQgKGluIGFkZGl0aW9uIHRvIHRoZSBvYnZpb3VzIGNvZGUgc2l6ZQogIC8vLyBiZW5lZml0KSwgZHVlIHRvIGhvdyBbZ2V0TmF0aXZlSW50ZXJjZXB0b3JdIHdvcmtzLiAgRmluZGluZyB0aGUKICAvLy8gaW50ZXJjZXB0b3Igb2YgYSBsZWFmIGNsYXNzIGluIHRoZSBoaWVyYXJjaHkgaXMgbW9yZSBlZmZpY2llbnQgdGhhdCBhCiAgLy8vIG5vbi1sZWFmLCBzbyBpdCBpbXByb3ZlcyBwZXJmb3JtYW5jZSB3aGVuIG1vcmUgY2xhc3NlcyBjYW4gYmUgdHJlYXRlZCBhcwogIC8vLyBsZWF2ZXMuCiAgLy8vCiAgLy8vIFtjbGFzc2VzXSBjb250YWlucyBuYXRpdmUgY2xhc3NlcywgbWl4aW4gYXBwbGljYXRpb25zLCBhbmQgdXNlciBzdWJjbGFzc2VzCiAgLy8vIG9mIG5hdGl2ZSBjbGFzc2VzLgogIC8vLwogIC8vLyBbaW50ZXJjZXB0b3JDbGFzc2VzTmVlZGVkQnlDb25zdGFudHNdIGNvbnRhaW5zIHRoZSBpbnRlcmNlcHRvcnMgdGhhdCBhcmUKICAvLy8gcmVmZXJlbmNlZCBieSBjb25zdGFudHMuCiAgLy8vCiAgLy8vIFtjbGFzc2VzTW9kaWZpZWRCeUVtaXRSVElTdXBwb3J0XSBjb250YWlucyB0aGUgbGlzdCBvZiBjbGFzc2VzIHRoYXQgbXVzdAogIC8vLyBleGlzdCwgYmVjYXVzZSBydW50aW1lLXR5cGUgc3VwcG9ydCBhZGRzIGluZm9ybWF0aW9uIHRvIHRoZSBjbGFzcy4KICBTZXQ8Q2xhc3M+IHByZXBhcmVOYXRpdmVDbGFzc2VzKAogICAgICBMaXN0PENsYXNzPiBjbGFzc2VzLAogICAgICBTZXQ8Q2xhc3NFbnRpdHk+IGludGVyY2VwdG9yQ2xhc3Nlc05lZWRlZEJ5Q29uc3RhbnRzLAogICAgICBJdGVyYWJsZTxDbGFzc0VudGl0eT4gY2xhc3Nlc05lZWRlZEZvclJ0aSkgewogICAgYXNzZXJ0KGNsYXNzZXMuZXZlcnkoKENsYXNzIGNscykgPT4gY2xzICE9IG51bGwpKTsKCiAgICBoYXNOYXRpdmVDbGFzc2VzID0gY2xhc3Nlcy5pc05vdEVtcHR5OwoKICAgIC8vIENvbXB1dGUgYSBwcmUtb3JkZXIgdHJhdmVyc2FsIG9mIHRoZSBzdWJjbGFzcyBmb3Jlc3QuICBXZSBhY3R1YWxseSB3YW50IGEKICAgIC8vIHBvc3Qtb3JkZXIgdHJhdmVyc2FsIGJ1dCBpdCBpcyBlYXNpZXIgdG8gY29tcHV0ZSB0aGUgcHJlLW9yZGVyIGFuZCB1c2UgaXQKICAgIC8vIGluIHJldmVyc2UuCiAgICBMaXN0PENsYXNzPiBwcmVPcmRlciA9IDxDbGFzcz5bXTsKICAgIFNldDxDbGFzcz4gc2VlbiA9IG5ldyBTZXQ8Q2xhc3M+KCk7CgogICAgQ2xhc3Mgb2JqZWN0Q2xhc3MgPSBudWxsOwogICAgQ2xhc3MganNJbnRlcmNlcHRvckNsYXNzID0gbnVsbDsKCiAgICB2b2lkIHdhbGsoQ2xhc3MgY2xzKSB7CiAgICAgIGlmIChjbHMuZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MpIHsKICAgICAgICBvYmplY3RDbGFzcyA9IGNsczsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGNscy5lbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc0ludGVyY2VwdG9yQ2xhc3MpIHsKICAgICAgICBqc0ludGVyY2VwdG9yQ2xhc3MgPSBjbHM7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChzZWVuLmNvbnRhaW5zKGNscykpIHJldHVybjsKICAgICAgc2Vlbi5hZGQoY2xzKTsKICAgICAgd2FsayhjbHMuc3VwZXJjbGFzcyk7CiAgICAgIHByZU9yZGVyLmFkZChjbHMpOwogICAgfQoKICAgIGNsYXNzZXMuZm9yRWFjaCh3YWxrKTsKCiAgICAvLyBGaW5kIHdoaWNoIGNsYXNzZXMgYXJlIG5lZWRlZCBhbmQgd2hpY2ggYXJlIG5vbi1sZWFmIGNsYXNzZXMuICBBbnkgY2xhc3MKICAgIC8vIHRoYXQgaXMgbm90IG5lZWRlZCBjYW4gYmUgdHJlYXRlZCBhcyBhIGxlYWYgY2xhc3MgZXF1aXZhbGVudCB0byBzb21lCiAgICAvLyBuZWVkZWQgY2xhc3MuCgogICAgU2V0PENsYXNzPiBuZWVkZWRDbGFzc2VzID0gbmV3IFNldDxDbGFzcz4oKTsKICAgIFNldDxDbGFzcz4gbm9uTGVhZkNsYXNzZXMgPSBuZXcgU2V0PENsYXNzPigpOwoKICAgIE1hcDxDbGFzcywgTGlzdDxDbGFzcz4+IGV4dGVuc2lvblBvaW50cyA9IGNvbXB1dGVFeHRlbnNpb25Qb2ludHMocHJlT3JkZXIpOwoKICAgIG5lZWRlZENsYXNzZXMuYWRkKG9iamVjdENsYXNzKTsKCiAgICBmb3IgKENsYXNzIGNscyBpbiBwcmVPcmRlci5yZXZlcnNlZCkgewogICAgICBDbGFzc0VudGl0eSBjbGFzc0VsZW1lbnQgPSBjbHMuZWxlbWVudDsKICAgICAgLy8gUG9zdC1vcmRlciB0cmF2ZXJzYWwgZW5zdXJlcyB3ZSB2aXNpdCB0aGUgc3ViY2xhc3NlcyBiZWZvcmUgdGhlaXIKICAgICAgLy8gc3VwZXJjbGFzcy4gIFRoaXMgbWFrZXMgaXQgZWFzeSB0byB0ZWxsIGlmIGEgY2xhc3MgaXMgbmVlZGVkIGJlY2F1c2UgYQogICAgICAvLyBzdWJjbGFzcyBpcyBuZWVkZWQuCiAgICAgIGJvb2wgbmVlZGVkID0gZmFsc2U7CiAgICAgIGlmICghY2xzLmlzTmF0aXZlKSB7CiAgICAgICAgLy8gTWl4aW4gYXBwbGljYXRpb25zIChuYXRpdmUrbWl4aW4pIGFyZSBub24tbmF0aXZlLCBzbyBbY2xhc3NFbGVtZW50XQogICAgICAgIC8vIGhhcyBhbHJlYWR5IGJlZW4gZW1pdHRlZCBhcyBhIHJlZ3VsYXIgY2xhc3MuICBNYXJrIFtjbGFzc0VsZW1lbnRdIGFzCiAgICAgICAgLy8gJ25lZWRlZCcgdG8gZW5zdXJlIHRoZSBuYXRpdmUgc3VwZXJjbGFzcyBpcyBuZWVkZWQuCiAgICAgICAgbmVlZGVkID0gdHJ1ZTsKICAgICAgfSBlbHNlIGlmICghaXNUcml2aWFsQ2xhc3MoY2xzKSkgewogICAgICAgIG5lZWRlZCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAoaW50ZXJjZXB0b3JDbGFzc2VzTmVlZGVkQnlDb25zdGFudHMuY29udGFpbnMoY2xhc3NFbGVtZW50KSkgewogICAgICAgIG5lZWRlZCA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAoY2xhc3Nlc05lZWRlZEZvclJ0aS5jb250YWlucyhjbGFzc0VsZW1lbnQpKSB7CiAgICAgICAgbmVlZGVkID0gdHJ1ZTsKICAgICAgfSBlbHNlIGlmIChleHRlbnNpb25Qb2ludHMuY29udGFpbnNLZXkoY2xzKSkgewogICAgICAgIG5lZWRlZCA9IHRydWU7CiAgICAgIH0KICAgICAgaWYgKF9uYXRpdmVEYXRhLmlzSnNJbnRlcm9wQ2xhc3MoY2xhc3NFbGVtZW50KSkgewogICAgICAgIG5lZWRlZCA9IHRydWU7IC8vIFRPRE8oamFjb2JyKTogd2UgZG9uJ3QgbmVlZCBhbGwgaW50ZXJvcCBjbGFzc2VzLgogICAgICB9IGVsc2UgaWYgKGNscy5pc05hdGl2ZSAmJgogICAgICAgICAgX25hdGl2ZURhdGEuaGFzTmF0aXZlVGFnc0ZvcmNlZE5vbkxlYWYoY2xhc3NFbGVtZW50KSkgewogICAgICAgIG5lZWRlZCA9IHRydWU7CiAgICAgICAgbm9uTGVhZkNsYXNzZXMuYWRkKGNscyk7CiAgICAgIH0KCiAgICAgIGlmIChuZWVkZWQgfHwgbmVlZGVkQ2xhc3Nlcy5jb250YWlucyhjbHMpKSB7CiAgICAgICAgbmVlZGVkQ2xhc3Nlcy5hZGQoY2xzKTsKICAgICAgICBuZWVkZWRDbGFzc2VzLmFkZChjbHMuc3VwZXJjbGFzcyk7CiAgICAgICAgbm9uTGVhZkNsYXNzZXMuYWRkKGNscy5zdXBlcmNsYXNzKTsKICAgICAgfQogICAgfQoKICAgIC8vIENvbGxlY3QgYWxsIHRoZSB0YWdzIHRoYXQgbWFwIHRvIGVhY2ggbmF0aXZlIGNsYXNzLgoKICAgIE1hcDxDbGFzcywgU2V0PFN0cmluZz4+IGxlYWZUYWdzID0gbmV3IE1hcDxDbGFzcywgU2V0PFN0cmluZz4+KCk7CiAgICBNYXA8Q2xhc3MsIFNldDxTdHJpbmc+PiBub25sZWFmVGFncyA9IG5ldyBNYXA8Q2xhc3MsIFNldDxTdHJpbmc+PigpOwoKICAgIGZvciAoQ2xhc3MgY2xzIGluIGNsYXNzZXMpIHsKICAgICAgaWYgKCFjbHMuaXNOYXRpdmUpIGNvbnRpbnVlOwogICAgICBDbGFzc0VudGl0eSBlbGVtZW50ID0gY2xzLmVsZW1lbnQ7CiAgICAgIGlmIChfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcENsYXNzKGVsZW1lbnQpKSBjb250aW51ZTsKICAgICAgTGlzdDxTdHJpbmc+IG5hdGl2ZVRhZ3MgPSBfbmF0aXZlRGF0YS5nZXROYXRpdmVUYWdzT2ZDbGFzcyhjbHMuZWxlbWVudCk7CgogICAgICBpZiAobm9uTGVhZkNsYXNzZXMuY29udGFpbnMoY2xzKSB8fCBleHRlbnNpb25Qb2ludHMuY29udGFpbnNLZXkoY2xzKSkgewogICAgICAgIG5vbmxlYWZUYWdzCiAgICAgICAgICAgIC5wdXRJZkFic2VudChjbHMsICgpID0+IG5ldyBTZXQ8U3RyaW5nPigpKQogICAgICAgICAgICAuYWRkQWxsKG5hdGl2ZVRhZ3MpOwogICAgICB9IGVsc2UgewogICAgICAgIENsYXNzIHN1ZmZpY2luZ0ludGVyY2VwdG9yID0gY2xzOwogICAgICAgIHdoaWxlICghbmVlZGVkQ2xhc3Nlcy5jb250YWlucyhzdWZmaWNpbmdJbnRlcmNlcHRvcikpIHsKICAgICAgICAgIHN1ZmZpY2luZ0ludGVyY2VwdG9yID0gc3VmZmljaW5nSW50ZXJjZXB0b3Iuc3VwZXJjbGFzczsKICAgICAgICB9CiAgICAgICAgaWYgKHN1ZmZpY2luZ0ludGVyY2VwdG9yID09IG9iamVjdENsYXNzKSB7CiAgICAgICAgICBzdWZmaWNpbmdJbnRlcmNlcHRvciA9IGpzSW50ZXJjZXB0b3JDbGFzczsKICAgICAgICB9CiAgICAgICAgbGVhZlRhZ3MKICAgICAgICAgICAgLnB1dElmQWJzZW50KHN1ZmZpY2luZ0ludGVyY2VwdG9yLCAoKSA9PiBuZXcgU2V0PFN0cmluZz4oKSkKICAgICAgICAgICAgLmFkZEFsbChuYXRpdmVUYWdzKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgZmlsbE5hdGl2ZUluZm8oQ2xhc3MgY2xzKSB7CiAgICAgIGFzc2VydChjbHMubmF0aXZlTGVhZlRhZ3MgPT0gbnVsbCAmJgogICAgICAgICAgY2xzLm5hdGl2ZU5vbkxlYWZUYWdzID09IG51bGwgJiYKICAgICAgICAgIGNscy5uYXRpdmVFeHRlbnNpb25zID09IG51bGwpOwogICAgICBpZiAobGVhZlRhZ3NbY2xzXSAhPSBudWxsKSB7CiAgICAgICAgY2xzLm5hdGl2ZUxlYWZUYWdzID0gbGVhZlRhZ3NbY2xzXS50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgfQogICAgICBpZiAobm9ubGVhZlRhZ3NbY2xzXSAhPSBudWxsKSB7CiAgICAgICAgY2xzLm5hdGl2ZU5vbkxlYWZUYWdzID0gbm9ubGVhZlRhZ3NbY2xzXS50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgfQogICAgICBjbHMubmF0aXZlRXh0ZW5zaW9ucyA9IGV4dGVuc2lvblBvaW50c1tjbHNdOwogICAgfQoKICAgIC8vIEFkZCBwcm9wZXJ0aWVzIGNvbnRhaW5pbmcgdGhlIGluZm9ybWF0aW9uIG5lZWRlZCB0byBjb25zdHJ1Y3QgbWFwcyB1c2VkCiAgICAvLyBieSBnZXROYXRpdmVJbnRlcmNlcHRvciBhbmQgY3VzdG9tIGVsZW1lbnRzLgogICAgaWYgKF9uYXRpdmVDb2RlZ2VuRW5xdWV1ZXIuaGFzSW5zdGFudGlhdGVkTmF0aXZlQ2xhc3NlcykgewogICAgICBmaWxsTmF0aXZlSW5mbyhqc0ludGVyY2VwdG9yQ2xhc3MpOwogICAgICBmb3IgKENsYXNzIGNscyBpbiBjbGFzc2VzKSB7CiAgICAgICAgaWYgKCFjbHMuaXNOYXRpdmUgfHwgbmVlZGVkQ2xhc3Nlcy5jb250YWlucyhjbHMpKSB7CiAgICAgICAgICBmaWxsTmF0aXZlSW5mbyhjbHMpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIFRPRE8oc3JhKTogSXNzdWUgIzEzNzMxLSB0aGlzIGlzIGNvbW1lbnRlZCBvdXQgYXMgcGFydCBvZiBjdXN0b20KICAgIC8vIGVsZW1lbnQgY29uc3RydWN0b3Igd29yay4KICAgIC8vIChmbG9pdHNjaDogd2FzIHJ1biBvbiBldmVyeSBuYXRpdmUgY2xhc3MuKQogICAgLy9hc3NlcnQoIWNsYXNzRWxlbWVudC5oYXNCYWNrZW5kTWVtYmVycyk7CgogICAgcmV0dXJuIGNsYXNzZXMKICAgICAgICAud2hlcmUoKENsYXNzIGNscykgPT4gY2xzLmlzTmF0aXZlICYmICFuZWVkZWRDbGFzc2VzLmNvbnRhaW5zKGNscykpCiAgICAgICAgLnRvU2V0KCk7CiAgfQoKICAvLy8gQ29tcHV0ZXMgdGhlIG5hdGl2ZSBjbGFzc2VzIHRoYXQgYXJlIGV4dGVuZGVkIChzdWJjbGFzc2VkKSBieSBub24tbmF0aXZlCiAgLy8vIGNsYXNzZXMgYW5kIHRoZSBzZXQgbm9uLW1hdGl2ZSBjbGFzc2VzIHRoYXQgZXh0ZW5kIHRoZW0uICAoQSBMaXN0IGlzIHVzZWQKICAvLy8gaW5zdGVhZCBvZiBhIFNldCBmb3Igb3V0IHN0YWJpbGl0eSkuCiAgTWFwPENsYXNzLCBMaXN0PENsYXNzPj4gY29tcHV0ZUV4dGVuc2lvblBvaW50cyhMaXN0PENsYXNzPiBjbGFzc2VzKSB7CiAgICBDbGFzcyBuYXRpdmVTdXBlcmNsYXNzT2YoQ2xhc3MgY2xzKSB7CiAgICAgIGlmIChjbHMgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIGlmIChjbHMuaXNOYXRpdmUpIHJldHVybiBjbHM7CiAgICAgIHJldHVybiBuYXRpdmVTdXBlcmNsYXNzT2YoY2xzLnN1cGVyY2xhc3MpOwogICAgfQoKICAgIENsYXNzIG5hdGl2ZUFuY2VzdG9yT2YoQ2xhc3MgY2xzKSB7CiAgICAgIHJldHVybiBuYXRpdmVTdXBlcmNsYXNzT2YoY2xzLnN1cGVyY2xhc3MpOwogICAgfQoKICAgIE1hcDxDbGFzcywgTGlzdDxDbGFzcz4+IG1hcCA9IG5ldyBNYXA8Q2xhc3MsIExpc3Q8Q2xhc3M+PigpOwoKICAgIGZvciAoQ2xhc3MgY2xzIGluIGNsYXNzZXMpIHsKICAgICAgaWYgKGNscy5pc05hdGl2ZSkgY29udGludWU7CiAgICAgIENsYXNzIG5hdGl2ZUFuY2VzdG9yID0gbmF0aXZlQW5jZXN0b3JPZihjbHMpOwogICAgICBpZiAobmF0aXZlQW5jZXN0b3IgIT0gbnVsbCkgewogICAgICAgIG1hcC5wdXRJZkFic2VudChuYXRpdmVBbmNlc3RvciwgKCkgPT4gPENsYXNzPltdKS5hZGQoY2xzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG1hcDsKICB9CgogIGJvb2wgaXNUcml2aWFsQ2xhc3MoQ2xhc3MgY2xzKSB7CiAgICBib29sIG5lZWRzQWNjZXNzb3IoRmllbGQgZmllbGQpIHsKICAgICAgcmV0dXJuIGZpZWxkLm5lZWRzR2V0dGVyIHx8CiAgICAgICAgICBmaWVsZC5uZWVkc1VuY2hlY2tlZFNldHRlciB8fAogICAgICAgICAgZmllbGQubmVlZHNDaGVja2VkU2V0dGVyOwogICAgfQoKICAgIHJldHVybiBjbHMubWV0aG9kcy5pc0VtcHR5ICYmCiAgICAgICAgY2xzLmlzQ2hlY2tzLmlzRW1wdHkgJiYKICAgICAgICBjbHMuY2FsbFN0dWJzLmlzRW1wdHkgJiYKICAgICAgICAhY2xzLnN1cGVyY2xhc3MuaXNTaW1wbGVNaXhpbkFwcGxpY2F0aW9uICYmCiAgICAgICAgIWNscy5maWVsZHMuYW55KG5lZWRzQWNjZXNzb3IpOwogIH0KCiAgdm9pZCBwb3RlbnRpYWxseUNvbnZlcnREYXJ0Q2xvc3VyZXNUb0pzKExpc3Q8anNBc3QuU3RhdGVtZW50PiBzdGF0ZW1lbnRzLAogICAgICBGdW5jdGlvbkVudGl0eSBtZW1iZXIsIExpc3Q8anNBc3QuUGFyYW1ldGVyPiBzdHViUGFyYW1ldGVycykgewogICAganNBc3QuRXhwcmVzc2lvbiBjbG9zdXJlQ29udmVydGVyOwogICAgX2VsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoUGFyYW1ldGVyKG1lbWJlciwKICAgICAgICAoRGFydFR5cGUgdHlwZSwgU3RyaW5nIG5hbWUsIF8pIHsKICAgICAgLy8gSWYgW25hbWVdIGlzIG5vdCBpbiBbc3R1YlBhcmFtZXRlcnNdLCB0aGVuIHRoZSBwYXJhbWV0ZXIgaXMgYW4gb3B0aW9uYWwKICAgICAgLy8gcGFyYW1ldGVyIHRoYXQgd2FzIG5vdCBwcm92aWRlZCBmb3IgdGhpcyBzdHViLgogICAgICBmb3IgKGpzQXN0LlBhcmFtZXRlciBzdHViUGFyYW1ldGVyIGluIHN0dWJQYXJhbWV0ZXJzKSB7CiAgICAgICAgaWYgKHN0dWJQYXJhbWV0ZXIubmFtZSA9PSBuYW1lKSB7CiAgICAgICAgICB0eXBlID0gdHlwZS51bmFsaWFzZWQ7CiAgICAgICAgICBpZiAodHlwZS5pc0Z1bmN0aW9uVHlwZSkgewogICAgICAgICAgICBjbG9zdXJlQ29udmVydGVyID8/PSBfZW1pdHRlclRhc2suZW1pdHRlcgogICAgICAgICAgICAgICAgLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKF9jb21tb25FbGVtZW50cy5jbG9zdXJlQ29udmVydGVyKTsKCiAgICAgICAgICAgIC8vIFRoZSBwYXJhbWV0ZXIgdHlwZSBpcyBhIGZ1bmN0aW9uIHR5cGUgZWl0aGVyIGRpcmVjdGx5IG9yIHRocm91Z2gKICAgICAgICAgICAgLy8gdHlwZWRlZihzKS4KICAgICAgICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IHR5cGU7CiAgICAgICAgICAgIGludCBhcml0eSA9IGZ1bmN0aW9uVHlwZS5wYXJhbWV0ZXJUeXBlcy5sZW5ndGg7CiAgICAgICAgICAgIHN0YXRlbWVudHMuYWRkKGpzCiAgICAgICAgICAgICAgICAuc3RhdGVtZW50KCcjID0gIygjLCAkYXJpdHkpJywgW25hbWUsIGNsb3N1cmVDb252ZXJ0ZXIsIG5hbWVdKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQoKICBMaXN0PGpzQXN0LlN0YXRlbWVudD4gZ2VuZXJhdGVQYXJhbWV0ZXJTdHViU3RhdGVtZW50cygKICAgICAgRnVuY3Rpb25FbnRpdHkgbWVtYmVyLAogICAgICBib29sIGlzSW50ZXJjZXB0ZWRNZXRob2QsCiAgICAgIGpzQXN0Lk5hbWUgaW52b2NhdGlvbk5hbWUsCiAgICAgIExpc3Q8anNBc3QuUGFyYW1ldGVyPiBzdHViUGFyYW1ldGVycywKICAgICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmd1bWVudHNCdWZmZXIsCiAgICAgIGludCBpbmRleE9mTGFzdE9wdGlvbmFsQXJndW1lbnRJblBhcmFtZXRlcnMpIHsKICAgIC8vIFRoZSB0YXJnZXQgSlMgZnVuY3Rpb24gbWF5IGNoZWNrIGFyZ3VtZW50cy5sZW5ndGggc28gd2UgbmVlZCB0bwogICAgLy8gbWFrZSBzdXJlIG5vdCB0byBwYXNzIGFueSB1bnNwZWNpZmllZCBvcHRpb25hbCBhcmd1bWVudHMgdG8gaXQuCiAgICAvLyBGb3IgZXhhbXBsZSwgZm9yIHRoZSBmb2xsb3dpbmcgRGFydCBtZXRob2Q6CiAgICAvLyAgIGZvbyh7eCwgeSwgen0pOwogICAgLy8gVGhlIGNhbGw6CiAgICAvLyAgIGZvbyh5OiAxKQogICAgLy8gbXVzdCBiZSB0dXJuZWQgaW50byBhIEpTIGNhbGwgdG86CiAgICAvLyAgIGZvbyhudWxsLCB5KS4KCiAgICBMaXN0PGpzQXN0LlN0YXRlbWVudD4gc3RhdGVtZW50cyA9IDxqc0FzdC5TdGF0ZW1lbnQ+W107CiAgICBwb3RlbnRpYWxseUNvbnZlcnREYXJ0Q2xvc3VyZXNUb0pzKHN0YXRlbWVudHMsIG1lbWJlciwgc3R1YlBhcmFtZXRlcnMpOwoKICAgIFN0cmluZyB0YXJnZXQ7CiAgICBqc0FzdC5FeHByZXNzaW9uIHJlY2VpdmVyOwogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmd1bWVudHM7CgogICAgYXNzZXJ0KG5hdGl2ZU1ldGhvZHMuY29udGFpbnMobWVtYmVyKSwgZmFpbGVkQXQobWVtYmVyKSk7CiAgICAvLyBXaGVuIGNhbGxpbmcgYSBKUyBtZXRob2QsIHdlIGNhbGwgaXQgd2l0aCB0aGUgbmF0aXZlIG5hbWUsIGFuZCBvbmx5IHRoZQogICAgLy8gYXJndW1lbnRzIHVwIHVudGlsIHRoZSBsYXN0IG9uZSBwcm92aWRlZC4KICAgIHRhcmdldCA9IF9uYXRpdmVEYXRhLmdldEZpeGVkQmFja2VuZE5hbWUobWVtYmVyKTsKCiAgICBpZiAoaXNJbnRlcmNlcHRlZE1ldGhvZCkgewogICAgICByZWNlaXZlciA9IGFyZ3VtZW50c0J1ZmZlclswXTsKICAgICAgYXJndW1lbnRzID0gYXJndW1lbnRzQnVmZmVyLnN1Ymxpc3QoCiAgICAgICAgICAxLCBpbmRleE9mTGFzdE9wdGlvbmFsQXJndW1lbnRJblBhcmFtZXRlcnMgKyAxKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIE5hdGl2ZSBtZXRob2RzIHRoYXQgYXJlIG5vdCBpbnRlcmNlcHRlZCBtdXN0IGJlIHN0YXRpYy4KICAgICAgYXNzZXJ0KG1lbWJlci5pc1N0YXRpYywgZmFpbGVkQXQobWVtYmVyKSk7CiAgICAgIGFyZ3VtZW50cyA9IGFyZ3VtZW50c0J1ZmZlci5zdWJsaXN0KAogICAgICAgICAgMCwgaW5kZXhPZkxhc3RPcHRpb25hbEFyZ3VtZW50SW5QYXJhbWV0ZXJzICsgMSk7CiAgICAgIGlmIChfbmF0aXZlRGF0YS5pc0pzSW50ZXJvcE1lbWJlcihtZW1iZXIpKSB7CiAgICAgICAgLy8gZml4ZWRCYWNrZW5kUGF0aCBpcyBhbGxvd2VkIHRvIGhhdmUgdGhlIGZvcm0gZm9vLmJhci5iYXogZm9yCiAgICAgICAgLy8gaW50ZXJvcC4gVGhpcyB0ZW1wbGF0ZSBpcyB1bmNhY2hlZCB0byBhdm9pZCBwb3NzaWJseSBydW5uaW5nIG91dCBvZgogICAgICAgIC8vIG1lbW9yeSB3aGVuIERhcnQySnMgaXMgcnVuIGluIHNlcnZlciBtb2RlLiBJbiByZWFsaXR5IHRoZSByaXNrIG9mCiAgICAgICAgLy8gY2FjaGluZyB0aGVzZSB0ZW1wbGF0ZXMgY2F1c2luZyBhbiBpc3N1ZSAgaXMgdmVyeSBsb3cgYXMgZWFjaCBjbGFzcwogICAgICAgIC8vIGFuZCBsaWJyYXJ5IHRoYXQgdXNlcyB0eXBlZCBKYXZhU2NyaXB0IGludGVyb3Agd2lsbCBjcmVhdGUgb25seSAxCiAgICAgICAgLy8gdW5pcXVlIHRlbXBsYXRlLgogICAgICAgIHJlY2VpdmVyID0ganMKICAgICAgICAgICAgLnVuY2FjaGVkRXhwcmVzc2lvblRlbXBsYXRlKAogICAgICAgICAgICAgICAgX25hdGl2ZURhdGEuZ2V0Rml4ZWRCYWNrZW5kTWV0aG9kUGF0aChtZW1iZXIpKQogICAgICAgICAgICAuaW5zdGFudGlhdGUoW10pOwogICAgICB9IGVsc2UgewogICAgICAgIHJlY2VpdmVyID0ganMoJ3RoaXMnKTsKICAgICAgfQogICAgfQogICAgc3RhdGVtZW50cwogICAgICAgIC5hZGQoanMuc3RhdGVtZW50KCdyZXR1cm4gIy4jKCMpJywgW3JlY2VpdmVyLCB0YXJnZXQsIGFyZ3VtZW50c10pKTsKCiAgICByZXR1cm4gc3RhdGVtZW50czsKICB9CgogIGJvb2wgaXNTdXBlcnR5cGVPZk5hdGl2ZUNsYXNzKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIGlmIChfaW50ZXJjZXB0b3JEYXRhLmlzTWl4ZWRJbnRvSW50ZXJjZXB0ZWRDbGFzcyhlbGVtZW50KSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICByZXR1cm4gc3VidHlwZXNbZWxlbWVudF0gIT0gbnVsbDsKICB9CgogIGJvb2wgcmVxdWlyZXNOYXRpdmVJc0NoZWNrKENsYXNzRW50aXR5IGVsZW1lbnQpIHsKICAgIC8vIFRPRE8oc3JhKTogUmVtb3ZlIHRoaXMgZnVuY3Rpb24uICBJdCBkZXRlcm1pbmVzIGlmIGEgbmF0aXZlIHR5cGUgbWF5CiAgICAvLyBzYXRpc2Z5IGEgY2hlY2sgYWdhaW5zdCBbZWxlbWVudF0sIGluIHdoaWNoIGNhc2UgYW4gaW50ZXJjZXB0b3IgbXVzdCBiZQogICAgLy8gdXNlZC4gIFdlIHNob3VsZCBhbHNvIHVzZSBhbiBpbnRlcmNlcHRvciBpZiB0aGUgY2hlY2sgY2FuJ3QgYmUgc2F0aXNmaWVkCiAgICAvLyBieSBhIG5hdGl2ZSBjbGFzcyBpbiBjYXNlIHdlIGdldCBhIG5hdGl2ZSBpbnN0YW5jZSB0aGF0IHRyaWVzIHRvIHNwb29mCiAgICAvLyB0aGUgdHlwZSBpbmZvLiAgaS5lIHRoZSBjcml0ZXJpYSBmb3Igd2hldGhlciBvciBub3QgdG8gdXNlIGFuIGludGVyY2VwdG9yCiAgICAvLyBpcyB3aGV0aGVyIHRoZSByZWNlaXZlciBjYW4gYmUgbmF0aXZlLCBub3QgdGhlIHR5cGUgb2YgdGhlIHRlc3QuCiAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50OwogICAgaWYgKF9uYXRpdmVEYXRhLmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlKGNscykpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGlzU3VwZXJ0eXBlT2ZOYXRpdmVDbGFzcyhlbGVtZW50KTsKICB9Cn0KgW8ATk48ASsBGUw9JCEgLik8KgE2FQEWJiM2ATYhATMxKgE6NyoBMUEBEUoBRjEnOUgBSgZMTQZPRh0GUVBPUBEGUEZMTw4GURkGTx8GT0kjGzwzNwErAVFREyYoAR4lARs4GxAIPyIQCCYVHBkGARsBUEwVATEyAVABJAErLktQHRsbT1A/FykXTxc/FzUXCDhLIUIXIQgBMyArLAgGATsBRkkBISMpO08BThQ3IQ8qQEIKMzUKEUghCAYBJSsrKSNECCZKCDMGAU80PyojPB8KCAYBSCEyLwETTBIEAU9QK0gqJCQxBgEoMQYBQQEhIjQkQwgGEAQBIyYiKCQGASIgITQoBAFMRScxKlE4PiohJTZJAVAbLjweURMMCggIBAE5HSAhLC41R0czGRETKRcBPEwBEx8mAT5PMTYBHyUrOw1BMSs7M0hPTU9NHBYpPx4PHwgGD0wBFwQBN0ETBgEmBAE0TE9QTlFIHz8uBAIBM3BhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvbmF0aXZlX2VtaXR0ZXIuZGFydEBzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL3R5cGVfdGVzdF9yZWdpc3RyeS5kYXJ0iXYvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX2VtaXR0ZXIudHlwZV90ZXN0X3JlZ2lzdHJ5OwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlcy5kYXJ0JwogICAgc2hvdyBSdW50aW1lVHlwZXNDaGVja3MsIFJ1bnRpbWVUeXBlc0NoZWNrc0J1aWxkZXI7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX2NvZGVnZW4uZGFydCcKICAgIHNob3cgUnVudGltZVR5cGVzU3Vic3RpdHV0aW9uczsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0JzsKCmNsYXNzIFR5cGVUZXN0UmVnaXN0cnkgewogIGZpbmFsIEVsZW1lbnRFbnZpcm9ubWVudCBfZWxlbWVudEVudmlyb25tZW50OwoKICAvLy8gQWZ0ZXIgW2NvbXB1dGVOZWVkZWRDbGFzc2VzXSB0aGlzIHNldCBvbmx5IGNvbnRhaW5zIGNsYXNzZXMgdGhhdCBhcmUgb25seQogIC8vLyB1c2VkIGZvciBSVEkuCiAgU2V0PENsYXNzRW50aXR5PiBfcnRpTmVlZGVkQ2xhc3NlczsKCiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwoKICBSdW50aW1lVHlwZXNDaGVja3MgX3J0aUNoZWNrczsKCiAgVHlwZVRlc3RSZWdpc3RyeSh0aGlzLl9vcHRpb25zLCB0aGlzLl9lbGVtZW50RW52aXJvbm1lbnQpOwoKICBSdW50aW1lVHlwZXNDaGVja3MgZ2V0IHJ0aUNoZWNrcyB7CiAgICBhc3NlcnQoCiAgICAgICAgX3J0aUNoZWNrcyAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgIlJ1bnRpbWVUeXBlc0NoZWNrcyBoYXMgbm90IGJlZW4gY29tcHV0ZWQgeWV0LiIpKTsKICAgIHJldHVybiBfcnRpQ2hlY2tzOwogIH0KCiAgSXRlcmFibGU8Q2xhc3NFbnRpdHk+IGdldCBydGlOZWVkZWRDbGFzc2VzIHsKICAgIGFzc2VydCgKICAgICAgICBfcnRpTmVlZGVkQ2xhc3NlcyAhPSBudWxsLAogICAgICAgIGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgInJ0aU5lZWRlZENsYXNzZXMgaGFzIG5vdCBiZWVuIGNvbXB1dGVkIHlldC4iKSk7CiAgICByZXR1cm4gX3J0aU5lZWRlZENsYXNzZXM7CiAgfQoKICB2b2lkIGNvbXB1dGVSdGlOZWVkZWRDbGFzc2VzKFJ1bnRpbWVUeXBlc1N1YnN0aXR1dGlvbnMgcnRpU3Vic3RpdHV0aW9ucywKICAgICAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBsaXZlTWVtYmVycykgewogICAgX3J0aU5lZWRlZENsYXNzZXMgPSBuZXcgU2V0PENsYXNzRW50aXR5PigpOwoKICAgIHZvaWQgYWRkQ2xhc3NXaXRoU3VwZXJjbGFzc2VzKENsYXNzRW50aXR5IGNscykgewogICAgICBfcnRpTmVlZGVkQ2xhc3Nlcy5hZGQoY2xzKTsKICAgICAgZm9yIChDbGFzc0VudGl0eSBzdXBlcmNsYXNzID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyk7CiAgICAgICAgICBzdXBlcmNsYXNzICE9IG51bGw7CiAgICAgICAgICBzdXBlcmNsYXNzID0gX2VsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKHN1cGVyY2xhc3MpKSB7CiAgICAgICAgX3J0aU5lZWRlZENsYXNzZXMuYWRkKHN1cGVyY2xhc3MpOwogICAgICB9CiAgICB9CgogICAgdm9pZCBhZGRDbGFzc2VzV2l0aFN1cGVyY2xhc3NlcyhJdGVyYWJsZTxDbGFzc0VudGl0eT4gY2xhc3NlcykgewogICAgICBmb3IgKENsYXNzRW50aXR5IGNscyBpbiBjbGFzc2VzKSB7CiAgICAgICAgYWRkQ2xhc3NXaXRoU3VwZXJjbGFzc2VzKGNscyk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBBZGQgY2xhc3NlcyB0aGF0IGFyZSByZWZlcmVuY2VkIGJ5IHR5cGUgYXJndW1lbnRzIG9yIHN1YnN0aXR1dGlvbnMgaW4KICAgIC8vIGFyZ3VtZW50IGNoZWNrcy4KICAgIGFkZENsYXNzZXNXaXRoU3VwZXJjbGFzc2VzKHJ0aUNoZWNrcy5yZXF1aXJlZENsYXNzZXMpOwogIH0KCiAgdm9pZCBjb21wdXRlUmVxdWlyZWRUeXBlQ2hlY2tzKAogICAgICBSdW50aW1lVHlwZXNDaGVja3NCdWlsZGVyIHJ0aUNoZWNrc0J1aWxkZXIsIENvZGVnZW5Xb3JsZCBjb2RlZ2VuV29ybGQpIHsKICAgIF9ydGlDaGVja3MgPSBydGlDaGVja3NCdWlsZGVyLmNvbXB1dGVSZXF1aXJlZENoZWNrcyhjb2RlZ2VuV29ybGQsIF9vcHRpb25zKTsKICB9Cn0KTABOTjwBLwEZIiQqODIkGjEBGTABUBQmASIBIQE9ASUMHCg/FwQBLwwjKD0eBAFLLDABNSJMHkgrCAYBRSknCAYBTRg7BAEiT1EEAgE3cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci90eXBlX3Rlc3RfcmVnaXN0cnkuZGFydDNzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9lbGVtZW50cy9pbmRleGVkLmRhcnShQC8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gSW5kZXhlZCBlbnRpdHkgaW50ZXJmYWNlcyBmb3IgbW9kZWxpbmcgZWxlbWVudHMgZGVyaXZlZCBmcm9tIEtlcm5lbCBJUi4KCmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CgphYnN0cmFjdCBjbGFzcyBfSW5kZXhlZCB7CiAgaW50IF9pbmRleDsKfQoKYWJzdHJhY3QgY2xhc3MgSW5kZXhlZExpYnJhcnkgZXh0ZW5kcyBfSW5kZXhlZCBpbXBsZW1lbnRzIExpYnJhcnlFbnRpdHkgewogIC8vLyBMaWJyYXJ5IGluZGV4IHVzZWQgZm9yIGZhc3QgbG9va3VwIGluIFtLZXJuZWxUb0VsZW1lbnRNYXBCYXNlXS4KICBpbnQgZ2V0IGxpYnJhcnlJbmRleCA9PiBfaW5kZXg7CiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiA3ICogX2luZGV4ICsgMjsKfQoKYWJzdHJhY3QgY2xhc3MgSW5kZXhlZENsYXNzIGV4dGVuZHMgX0luZGV4ZWQgaW1wbGVtZW50cyBDbGFzc0VudGl0eSB7CiAgLy8vIENsYXNzIGluZGV4IHVzZWQgZm9yIGZhc3QgbG9va3VwIGluIFtLZXJuZWxUb0VsZW1lbnRNYXBCYXNlXS4KICBpbnQgZ2V0IGNsYXNzSW5kZXggPT4gX2luZGV4OwogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gNyAqIF9pbmRleCArIDE7Cn0KCmFic3RyYWN0IGNsYXNzIEluZGV4ZWRNZW1iZXIgZXh0ZW5kcyBfSW5kZXhlZCBpbXBsZW1lbnRzIE1lbWJlckVudGl0eSB7CiAgLy8vIE1lbWJlciBpbmRleCB1c2VkIGZvciBmYXN0IGxvb2t1cCBpbiBbS2VybmVsVG9FbGVtZW50TWFwQmFzZV0uCiAgaW50IGdldCBtZW1iZXJJbmRleCA9PiBfaW5kZXg7CiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiA3ICogX2luZGV4Owp9CgphYnN0cmFjdCBjbGFzcyBJbmRleGVkRnVuY3Rpb24gZXh0ZW5kcyBfSW5kZXhlZAogICAgaW1wbGVtZW50cyBJbmRleGVkTWVtYmVyLCBGdW5jdGlvbkVudGl0eSB7fQoKYWJzdHJhY3QgY2xhc3MgSW5kZXhlZENvbnN0cnVjdG9yCiAgICBpbXBsZW1lbnRzIEluZGV4ZWRGdW5jdGlvbiwgQ29uc3RydWN0b3JFbnRpdHkge30KCmFic3RyYWN0IGNsYXNzIEluZGV4ZWRGaWVsZCBpbXBsZW1lbnRzIEluZGV4ZWRNZW1iZXIsIEZpZWxkRW50aXR5IHt9CgphYnN0cmFjdCBjbGFzcyBJbmRleGVkVHlwZVZhcmlhYmxlIGV4dGVuZHMgX0luZGV4ZWQKICAgIGltcGxlbWVudHMgVHlwZVZhcmlhYmxlRW50aXR5IHsKICAvLy8gVHlwZSB2YXJpYWJsZSBpbmRleCB1c2VkIGZvciBmYXN0IGxvb2t1cCBpbiBbS2VybmVsVG9FbGVtZW50TWFwQmFzZV0uCiAgaW50IGdldCB0eXBlVmFyaWFibGVJbmRleCA9PiBfaW5kZXg7Cn0KCmFic3RyYWN0IGNsYXNzIEluZGV4ZWRUeXBlZGVmIGV4dGVuZHMgX0luZGV4ZWQgaW1wbGVtZW50cyBUeXBlZGVmRW50aXR5IHsKICAvLy8gVHlwZWRlZiBpbmRleCB1c2VkIGZvciBmYXN0IGxvb2t1cCBpbiBbS2VybmVsVG9FbGVtZW50TWFwQmFzZV0uCiAgaW50IGdldCB0eXBlZGVmSW5kZXggPT4gX2luZGV4Owp9CgphYnN0cmFjdCBjbGFzcyBJbmRleGVkTG9jYWwgZXh0ZW5kcyBfSW5kZXhlZCBpbXBsZW1lbnRzIExvY2FsIHsKICBpbnQgZ2V0IGxvY2FsSW5kZXggPT4gX2luZGV4Owp9CgovLy8gQmFzZSBpbXBsZW1lbnRhdGlvbiBmb3IgYW4gaW5kZXggYmFzZWQgbWFwIG9mIGVudGl0aWVzIG9mIHR5cGUgW0VdLgphYnN0cmFjdCBjbGFzcyBFbnRpdHlNYXBCYXNlPEUgZXh0ZW5kcyBfSW5kZXhlZD4gewogIGJvb2wgX2Nsb3NlZCA9IGZhbHNlOwoKICBpbnQgX3NpemUgPSAwOwogIExpc3Q8RT4gX2xpc3QgPSA8RT5bXTsKCiAgLy8vIFJldHVybnMgdGhlIFtpbmRleF10aCBlbnRpdHkgaW4gdGhlIG1hcC4KICBFIGdldEVudGl0eShpbnQgaW5kZXgpID0+IF9saXN0W2luZGV4XTsKCiAgLy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBub24tbnVsbCBlbnRpdGllcyBpbiB0aGUgbWFwLgogIGludCBnZXQgc2l6ZSA9PiBfc2l6ZTsKCiAgLy8vIFJldHVybnMgdGhlIG51bWJlciAobnVsbCBhbmQgbm9uLW51bGwpIGVudGl0aWVzIGluIHRoZSBtYXAuCiAgaW50IGdldCBsZW5ndGggPT4gX2xpc3QubGVuZ3RoOwoKICAvLy8gQ2xvc2VzIHRoZSBlbnRpdHkgbWFwLCBwcm9oaWJpdGluZyBmdXJ0aGVyIHJlZ2lzdHJhdGlvbi4KICAvLy8KICAvLy8gVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB0aGF0IG5vIG5ldyBlbnRpdGllcyBhcmUgYWRkZWQgd2hpbGUgc2VyaWFsaXppbmcKICAvLy8gbW9kdWxhciBjb2RlIGdlbmVyYXRpb24gZGF0YS4KICB2b2lkIGNsb3NlKCkgewogICAgX2Nsb3NlZCA9IHRydWU7CiAgfQp9CgovLy8gSW5kZXggYmFzZWQgbWFwIG9mIGVudGl0aWVzIG9mIHR5cGUgW0VdLgpjbGFzcyBFbnRpdHlNYXA8RSBleHRlbmRzIF9JbmRleGVkPiBleHRlbmRzIEVudGl0eU1hcEJhc2U8RT4gewogIC8vLyBSZWdpc3RlcnMgYSBuZXcgW2VudGl0eV0uCiAgLy8vCiAgLy8vIFRoZSBpbmRleCBvZiBbZW50aXR5XSBpcyBzZXQgdG8gbWF0Y2ggaXRzIGluZGV4IGluIHRoZSBlbnRpdHkgbGlzdCBpbiB0aGlzCiAgLy8vIG1hcC4KICBFMCByZWdpc3RlcjxFMCBleHRlbmRzIEU+KEUwIGVudGl0eSkgewogICAgYXNzZXJ0KAogICAgICAgICFfY2xvc2VkLCAiVHJ5aW5nIHRvIHJlZ2lzdGVyICRlbnRpdHkgQCAke19saXN0Lmxlbmd0aH0gd2hlbiBjbG9zZWQuIik7CiAgICBhc3NlcnQoZW50aXR5ICE9IG51bGwpOwogICAgYXNzZXJ0KGVudGl0eS5faW5kZXggPT0gbnVsbCk7CiAgICBlbnRpdHkuX2luZGV4ID0gX2xpc3QubGVuZ3RoOwogICAgX2xpc3QuYWRkKGVudGl0eSk7CiAgICBfc2l6ZSsrOwogICAgcmV0dXJuIGVudGl0eTsKICB9CgogIC8vLyBSZWdpc3RlcnMgYSBuZXcgW2VudGl0eV0gYnkgdGhlIGdpdmVuIFtpbmRleF0uCiAgRTAgcmVnaXN0ZXJCeUluZGV4PEUwIGV4dGVuZHMgRT4oaW50IGluZGV4LCBFMCBlbnRpdHkpIHsKICAgIGFzc2VydChpbmRleCA+PSBfbGlzdC5sZW5ndGgpOwogICAgX2xpc3QubGVuZ3RoID0gaW5kZXg7CiAgICByZXR1cm4gcmVnaXN0ZXIoZW50aXR5KTsKICB9CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggbm9uLW51bGwgZW50aXR5LgogIHZvaWQgZm9yRWFjaDxFMCBleHRlbmRzIEU+KHZvaWQgZihFMCBlbnRpdHkpKSB7CiAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgX2xpc3QubGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgIEUgZW50aXR5ID0gX2xpc3RbaW5kZXhdOwogICAgICBpZiAoZW50aXR5ICE9IG51bGwpIHsKICAgICAgICBmKGVudGl0eSk7CiAgICAgIH0KICAgIH0KICB9Cn0KCi8vLyBCYXNlIGltcGxlbWVudGF0aW9uIG9mIGFuIGluZGV4IGJhc2VkIG1hcCBvZiBlbnRpdGllcyBvZiB0eXBlIFtFXSB3aXRoIGEKLy8vIGNvcnJlc3BvbmRpbmcgZGF0YSBvYmplY3Qgb2YgdHlwZSBbRF0uCmFic3RyYWN0IGNsYXNzIEVudGl0eURhdGFNYXBCYXNlPEUgZXh0ZW5kcyBfSW5kZXhlZCwgRD4KICAgIGV4dGVuZHMgRW50aXR5TWFwQmFzZTxFPiB7CiAgTGlzdDxEPiBfZGF0YSA9IDxEPltdOwoKICAvLy8gUmV0dXJucyB0aGUgZGF0YSBvYmplY3Qgc3RvcmVkIGZvciB0aGUgW2luZGV4XXRoIGVudGl0eS4KICBEIGdldERhdGEoRSBlbnRpdHkpIHsKICAgIGludCBpbmRleCA9IGVudGl0eS5faW5kZXg7CiAgICBpZiAoaW5kZXggPCBfbGlzdC5sZW5ndGggJiYgaW5kZXggPj0gX2RhdGEubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKAogICAgICAgICAgJ0RhdGEgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY3JlYXRlZCBmb3IgJHtfbGlzdFtpbmRleF19LicpOwogICAgfQogICAgcmV0dXJuIF9kYXRhW2luZGV4XTsKICB9Cn0KCi8vLyBJbmRleCBiYXNlZCBtYXAgb2YgZW50aXRpZXMgb2YgdHlwZSBbRV0gd2l0aCBhIGNvcnJlc3BvbmRpbmcgZGF0YSBvYmplY3QKLy8vIG9mIHR5cGUgW0RdLgpjbGFzcyBFbnRpdHlEYXRhTWFwPEUgZXh0ZW5kcyBfSW5kZXhlZCwgRD4gZXh0ZW5kcyBFbnRpdHlEYXRhTWFwQmFzZTxFLCBEPiB7CiAgLy8vIE1hcmsgZW50aXR5IFtpbmRleF0gYXMgbWlzc2luZwogIHZvaWQgc2tpcEluZGV4KGludCBpbmRleCkgewogICAgYXNzZXJ0KGluZGV4ID09IF9saXN0Lmxlbmd0aCk7CiAgICBfbGlzdC5hZGQobnVsbCk7CiAgICBfZGF0YS5hZGQobnVsbCk7CiAgfQoKICAvLy8gUmVnaXN0ZXJzIGEgbmV3IFtlbnRpdHldIHdpdGggYW4gYXNzb2NpYXRlZCBbZGF0YV0gb2JqZWN0LgogIC8vLwogIC8vLyBUaGUgaW5kZXggb2YgW2VudGl0eV0gaXMgc2V0IHRvIG1hdGNoIGl0cyBpbmRleCBpbiB0aGUgZW50aXR5IGFuZCBkYXRhCiAgLy8vIGxpc3RzIGluIHRoaXMgbWFwLgogIEUwIHJlZ2lzdGVyPEUwIGV4dGVuZHMgRSwgRDAgZXh0ZW5kcyBEPihFMCBlbnRpdHksIEQwIGRhdGEpIHsKICAgIGFzc2VydCgKICAgICAgICAhX2Nsb3NlZCwgIlRyeWluZyB0byByZWdpc3RlciAkZW50aXR5IEAgJHtfbGlzdC5sZW5ndGh9IHdoZW4gY2xvc2VkLiIpOwogICAgYXNzZXJ0KGVudGl0eSAhPSBudWxsKTsKICAgIGFzc2VydChlbnRpdHkuX2luZGV4ID09IG51bGwpOwogICAgYXNzZXJ0KAogICAgICAgIF9saXN0Lmxlbmd0aCA9PSBfZGF0YS5sZW5ndGgsCiAgICAgICAgJ0RhdGEgbGlzdCBsZW5ndGggJHtfZGF0YS5sZW5ndGh9IGluY29uc2lzdGVudCAnCiAgICAgICAgJ3dpdGggZW50aXR5IGxpc3QgbGVuZ3RoICR7X2xpc3QubGVuZ3RofS4nKTsKICAgIGVudGl0eS5faW5kZXggPSBfbGlzdC5sZW5ndGg7CiAgICBfbGlzdC5hZGQoZW50aXR5KTsKICAgIF9zaXplKys7CiAgICBhc3NlcnQoZGF0YSAhPSBudWxsKTsKICAgIF9kYXRhLmFkZChkYXRhKTsKICAgIHJldHVybiBlbnRpdHk7CiAgfQoKICAvLy8gUmVnaXN0ZXJzIGEgbmV3IFtlbnRpdHldIHdpdGggYW4gYXNzb2NpYXRlZCBbZGF0YV0gb2JqZWN0IGJ5IHRoZSBnaXZlbgogIC8vLyBbaW5kZXhdLgogIEUwIHJlZ2lzdGVyQnlJbmRleDxFMCBleHRlbmRzIEUsIEQwIGV4dGVuZHMgRD4oCiAgICAgIGludCBpbmRleCwgRTAgZW50aXR5LCBEMCBkYXRhKSB7CiAgICBhc3NlcnQoaW5kZXggPj0gX2xpc3QubGVuZ3RoKTsKICAgIF9saXN0Lmxlbmd0aCA9IF9kYXRhLmxlbmd0aCA9IGluZGV4OwogICAgcmV0dXJuIHJlZ2lzdGVyKGVudGl0eSwgZGF0YSk7CiAgfQoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIG5vbi1udWxsIGVudGl0eSB3aXRoIGl0cyBjb3JyZXNwb25kaW5nIGRhdGEgb2JqZWN0LgogIHZvaWQgZm9yRWFjaDxFMCBleHRlbmRzIEUsIEQwIGV4dGVuZHMgRD4odm9pZCBmKEUwIGVudGl0eSwgRDAgZGF0YSkpIHsKICAgIGlmIChfbGlzdC5sZW5ndGggIT0gX2RhdGEubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCdEYXRhIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQuJyk7CiAgICB9CiAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgX2xpc3QubGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgIEUgZW50aXR5ID0gX2xpc3RbaW5kZXhdOwogICAgICBpZiAoZW50aXR5ICE9IG51bGwpIHsKICAgICAgICBmKGVudGl0eSwgX2RhdGFbaW5kZXhdKTsKICAgICAgfQogICAgfQogIH0KfQoKLy8vIEJhc2UgaW1wbGVtZW50YXRpb24gZm9yIGFuIGluZGV4IGJhc2VkIG9mIGVudGl0aWVzIG9mIHR5cGUgW0VdIHdpdGggYQovLy8gY29ycmVzcG9uZGluZyBkYXRhIG9iamVjdCBvZiB0eXBlIFtEXSBhbmQgYW4gZW52aXJvbm1lbnQgb2YgdHlwZSBbVl0uCmFic3RyYWN0IGNsYXNzIEVudGl0eURhdGFFbnZNYXBCYXNlPEUgZXh0ZW5kcyBfSW5kZXhlZCwgRCwgVj4KICAgIGV4dGVuZHMgRW50aXR5RGF0YU1hcEJhc2U8RSwgRD4gewogIExpc3Q8Vj4gX2VudiA9IDxWPltdOwoKICAvLy8gUmV0dXJucyB0aGUgZW52aXJvbm1lbnQgb2JqZWN0IHN0b3JlZCBmb3IgdGhlIFtpbmRleF10aCBlbnRpdHkuCiAgViBnZXRFbnYoRSBlbnRpdHkpIHsKICAgIGludCBpbmRleCA9IGVudGl0eS5faW5kZXg7CiAgICBpZiAoaW5kZXggPCBfbGlzdC5sZW5ndGggJiYgaW5kZXggPj0gX2Vudi5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoCiAgICAgICAgICAnRW52IGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQgZm9yICR7X2xpc3RbaW5kZXhdfS4nKTsKICAgIH0KICAgIHJldHVybiBfZW52W2luZGV4XTsKICB9Cn0KCi8vLyBJbmRleCBiYXNlZCBvZiBlbnRpdGllcyBvZiB0eXBlIFtFXSB3aXRoIGEgY29ycmVzcG9uZGluZyBkYXRhIG9iamVjdCBvZgovLy8gdHlwZSBbRF0gYW5kIGFuIGVudmlyb25tZW50IG9mIHR5cGUgW1ZdLgpjbGFzcyBFbnRpdHlEYXRhRW52TWFwPEUgZXh0ZW5kcyBfSW5kZXhlZCwgRCwgVj4KICAgIGV4dGVuZHMgRW50aXR5RGF0YUVudk1hcEJhc2U8RSwgRCwgVj4gewogIC8vLyBSZWdpc3RlcnMgYSBuZXcgW2VudGl0eV0gd2l0aCBhbiBhc3NvY2lhdGVkIFtkYXRhXSBvYmplY3QgYW5kIGVudmlyb25tZW50CiAgLy8vIFtlbnZdLgogIC8vLwogIC8vLyBUaGUgaW5kZXggb2YgW2VudGl0eV0gaXMgc2V0IHRvIG1hdGNoIGl0cyBpbmRleCBpbiB0aGUgZW50aXR5LCBkYXRhIGFuZAogIC8vLyBlbnZpcm9ubWVudCBsaXN0cyBpbiB0aGlzIG1hcC4KICBFMCByZWdpc3RlcjxFMCBleHRlbmRzIEUsIEQwIGV4dGVuZHMgRCwgVjAgZXh0ZW5kcyBWPigKICAgICAgRTAgZW50aXR5LCBEMCBkYXRhLCBWMCBlbnYpIHsKICAgIGFzc2VydCgKICAgICAgICAhX2Nsb3NlZCwgIlRyeWluZyB0byByZWdpc3RlciAkZW50aXR5IEAgJHtfbGlzdC5sZW5ndGh9IHdoZW4gY2xvc2VkLiIpOwogICAgYXNzZXJ0KGVudGl0eSAhPSBudWxsKTsKICAgIGFzc2VydChlbnRpdHkuX2luZGV4ID09IG51bGwpOwogICAgYXNzZXJ0KAogICAgICAgIF9saXN0Lmxlbmd0aCA9PSBfZGF0YS5sZW5ndGgsCiAgICAgICAgJ0RhdGEgbGlzdCBsZW5ndGggJHtfZGF0YS5sZW5ndGh9IGluY29uc2lzdGVudCAnCiAgICAgICAgJ3dpdGggZW50aXR5IGxpc3QgbGVuZ3RoICR7X2xpc3QubGVuZ3RofS4nKTsKICAgIGFzc2VydCgKICAgICAgICBfbGlzdC5sZW5ndGggPT0gX2Vudi5sZW5ndGgsCiAgICAgICAgJ0VudiBsaXN0IGxlbmd0aCAke19lbnYubGVuZ3RofSBpbmNvbnNpc3RlbnQgJwogICAgICAgICd3aXRoIGVudGl0eSBsaXN0IGxlbmd0aCAke19saXN0Lmxlbmd0aH0uJyk7CiAgICBlbnRpdHkuX2luZGV4ID0gX2xpc3QubGVuZ3RoOwogICAgX2xpc3QuYWRkKGVudGl0eSk7CiAgICBfc2l6ZSsrOwogICAgYXNzZXJ0KGRhdGEgIT0gbnVsbCk7CiAgICBfZGF0YS5hZGQoZGF0YSk7CiAgICBhc3NlcnQoZW52ICE9IG51bGwpOwogICAgX2Vudi5hZGQoZW52KTsKICAgIHJldHVybiBlbnRpdHk7CiAgfQoKICAvLy8gUmVnaXN0ZXJzIGEgbmV3IFtlbnRpdHldIHdpdGggYW4gYXNzb2NpYXRlZCBbZGF0YV0gb2JqZWN0IGFuZCBlbnZpcm9ubWVudAogIC8vLyBbZW52XSBieSB0aGUgZ2l2ZW4gW2luZGV4XS4KICBFMCByZWdpc3RlckJ5SW5kZXg8RTAgZXh0ZW5kcyBFLCBEMCBleHRlbmRzIEQsIFYwIGV4dGVuZHMgVj4oCiAgICAgIGludCBpbmRleCwgRTAgZW50aXR5LCBEMCBkYXRhLCBWMCBlbnYpIHsKICAgIGFzc2VydChpbmRleCA+PSBfbGlzdC5sZW5ndGgpOwogICAgX2xpc3QubGVuZ3RoID0gX2RhdGEubGVuZ3RoID0gX2Vudi5sZW5ndGggPSBpbmRleDsKICAgIHJldHVybiByZWdpc3RlcihlbnRpdHksIGRhdGEsIGVudik7CiAgfQoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIG5vbi1udWxsIGVudGl0eSB3aXRoIGl0cyBjb3JyZXNwb25kaW5nIGRhdGEgb2JqZWN0IGFuZAogIC8vLyBlbnZpcm9ubWVudC4KICB2b2lkIGZvckVhY2g8RTAgZXh0ZW5kcyBFLCBEMCBleHRlbmRzIEQsIFYwIGV4dGVuZHMgVj4oCiAgICAgIHZvaWQgZihFMCBlbnRpdHksIEQwIGRhdGEsIFYwIGVudikpIHsKICAgIGlmIChfbGlzdC5sZW5ndGggIT0gX2RhdGEubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCdEYXRhIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQuJyk7CiAgICB9CiAgICBpZiAoX2xpc3QubGVuZ3RoICE9IF9lbnYubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCdFbnYgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY3JlYXRlZC4nKTsKICAgIH0KICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBfbGlzdC5sZW5ndGg7IGluZGV4KyspIHsKICAgICAgRSBlbnRpdHkgPSBfbGlzdFtpbmRleF07CiAgICAgIGlmIChlbnRpdHkgIT0gbnVsbCkgewogICAgICAgIGYoZW50aXR5LCBfZGF0YVtpbmRleF0sIF9lbnZbaW5kZXhdKTsKICAgICAgfQogICAgfQogIH0KfQqBCgBOTjwBTAEkARoOAgFKRiIMJgIBRkQgDCYCAUhFIQwiAgEwMAEiNQFFATQkTCcCAUpGIgIBQCACAUgzGAERGQEvKgE6GQFCIgE/Bk4kERQEAgEtPyAGUQspDFAcIyIXDRMEATU7IxodBAEqMjkfHBMIBgQCAU0rOB8ZAT8YHzkcSwYZBAIBTRFNJR4jFRUEAUEGTRlADFAcIwwmOTUiFw0aFRMEAU0PMicjKSMEAU1JKEgGOR8cIQgGBAIBSko+JhgBRhcfOBxKBhgEAgFMLTEsUA0GTiU5JAxQHCMMJjk1DCU3NSIXDRoVGRMTBAFQIkAvIzcoBAFQEzosKEgGJ0cGOR8cLggGBAIBKnBhY2thZ2U6Y29tcGlsZXIvc3JjL2VsZW1lbnRzL2luZGV4ZWQuZGFydC9zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pci9jb25zdGFudHMuZGFydJY0Ly8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvY29uc3RhbnRfZXZhbHVhdG9yLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4va2VybmVsL2RhcnQyanNfdGFyZ2V0LmRhcnQnOwoKdHlwZWRlZiBSZXBvcnRFcnJvckZ1bmN0aW9uID0gdm9pZCBGdW5jdGlvbigKICAgIGlyLkxvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UsIExpc3Q8aXIuTG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQpOwoKY2xhc3MgRGFydDJqc0NvbnN0YW50RXZhbHVhdG9yIGV4dGVuZHMgaXIuQ29uc3RhbnRFdmFsdWF0b3IgewogIGZpbmFsIGJvb2wgX3N1cHBvcnRSZWV2YWx1YXRpb25Gb3JUZXN0aW5nOwoKICBib29sIHJlcXVpcmVzQ29uc3RhbnQ7CgogIERhcnQyanNDb25zdGFudEV2YWx1YXRvcigKICAgICAgaXIuVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwgUmVwb3J0RXJyb3JGdW5jdGlvbiByZXBvcnRFcnJvciwKICAgICAge01hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQ6IGNvbnN0IHt9LAogICAgICBib29sIHN1cHBvcnRSZWV2YWx1YXRpb25Gb3JUZXN0aW5nOiBmYWxzZX0pCiAgICAgIDogX3N1cHBvcnRSZWV2YWx1YXRpb25Gb3JUZXN0aW5nID0gc3VwcG9ydFJlZXZhbHVhdGlvbkZvclRlc3RpbmcsCiAgICAgICAgc3VwZXIoCiAgICAgICAgICAgIGNvbnN0IERhcnQyanNDb25zdGFudHNCYWNrZW5kKHN1cHBvcnRzVW5ldmFsdWF0ZWRDb25zdGFudHM6IGZhbHNlKSwKICAgICAgICAgICAgZW52aXJvbm1lbnQsCiAgICAgICAgICAgIHR5cGVFbnZpcm9ubWVudCwKICAgICAgICAgICAgbmV3IEVycm9yUmVwb3J0ZXIocmVwb3J0RXJyb3IpKTsKCiAgQG92ZXJyaWRlCiAgRXJyb3JSZXBvcnRlciBnZXQgZXJyb3JSZXBvcnRlciA9PiBzdXBlci5lcnJvclJlcG9ydGVyOwoKICBAb3ZlcnJpZGUKICBpci5Db25zdGFudCBldmFsdWF0ZShpci5FeHByZXNzaW9uIG5vZGUsIHtib29sIHJlcXVpcmVDb25zdGFudDogdHJ1ZX0pIHsKICAgIGVycm9yUmVwb3J0ZXIucmVxdWlyZXNDb25zdGFudCA9IHJlcXVpcmVDb25zdGFudDsKICAgIGlmIChub2RlIGlzIGlyLkNvbnN0YW50RXhwcmVzc2lvbikgewogICAgICBpci5Db25zdGFudCBjb25zdGFudCA9IG5vZGUuY29uc3RhbnQ7CiAgICAgIGlmIChjb25zdGFudCBpcyBpci5VbmV2YWx1YXRlZENvbnN0YW50KSB7CiAgICAgICAgaXIuQ29uc3RhbnQgcmVzdWx0ID0gc3VwZXIuZXZhbHVhdGUoY29uc3RhbnQuZXhwcmVzc2lvbik7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICByZXN1bHQgaXMgaXIuVW5ldmFsdWF0ZWRDb25zdGFudCB8fAogICAgICAgICAgICAgICAgIXJlc3VsdC5hY2NlcHQoY29uc3QgVW5ldmFsdWF0ZWRDb25zdGFudEZpbmRlcigpKSwKICAgICAgICAgICAgIkludmFsaWQgY29uc3RhbnQgcmVzdWx0ICRyZXN1bHQgZnJvbSAke2NvbnN0YW50LmV4cHJlc3Npb259LiIpOwogICAgICAgIGlmICghX3N1cHBvcnRSZWV2YWx1YXRpb25Gb3JUZXN0aW5nKSB7CiAgICAgICAgICBub2RlLmNvbnN0YW50ID0gcmVzdWx0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb25zdGFudDsKICAgIH0KICAgIGlmIChyZXF1aXJlQ29uc3RhbnQpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSGFuZGxlIHJlcG9ydGluZyBvZiBjb21waWxlLXRpbWUgY29uc3RhbnQKICAgICAgLy8gZXZhbHVhdGlvbiBlcnJvcnMuCiAgICAgIHJldHVybiBzdXBlci5ldmFsdWF0ZShub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIHN1cGVyLmV2YWx1YXRlKG5vZGUpOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICB9Cn0KCmNsYXNzIEVycm9yUmVwb3J0ZXIgaW1wbGVtZW50cyBpci5FcnJvclJlcG9ydGVyIHsKICBmaW5hbCBSZXBvcnRFcnJvckZ1bmN0aW9uIF9yZXBvcnRFcnJvcjsKICBib29sIHJlcXVpcmVzQ29uc3RhbnQ7CgogIEVycm9yUmVwb3J0ZXIodGhpcy5fcmVwb3J0RXJyb3IpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHJlcG9ydEludmFsaWRFeHByZXNzaW9uKGlyLkludmFsaWRFeHByZXNzaW9uIG5vZGUpIHsKICAgIC8vIElnbm9yZS4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVwb3J0KGlyLkxvY2F0ZWRNZXNzYWdlIG1lc3NhZ2UsIExpc3Q8aXIuTG9jYXRlZE1lc3NhZ2U+IGNvbnRleHQpIHsKICAgIGlmIChyZXF1aXJlc0NvbnN0YW50KSB7CiAgICAgIF9yZXBvcnRFcnJvcihtZXNzYWdlLCBjb250ZXh0KTsKICAgIH0KICB9Cn0KCi8vLyBbaXIuQ29uc3RhbnRdIHZpc2l0b3IgdGhhdCByZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmlzaXRvciBjb25zdGFudCBjb250YWlucwovLy8gYW4gW2lyLlVuZXZhbHVhdGVkQ29uc3RhbnRdLgpjbGFzcyBVbmV2YWx1YXRlZENvbnN0YW50RmluZGVyIGV4dGVuZHMgaXIuQ29uc3RhbnRWaXNpdG9yPGJvb2w+IHsKICBjb25zdCBVbmV2YWx1YXRlZENvbnN0YW50RmluZGVyKCk7CgogIEBvdmVycmlkZQogIGJvb2wgZGVmYXVsdENvbnN0YW50KGlyLkNvbnN0YW50IG5vZGUpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VW5ldmFsdWF0ZWRDb25zdGFudChpci5VbmV2YWx1YXRlZENvbnN0YW50IG5vZGUpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KGlyLlBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIG5vZGUudGVhck9mZkNvbnN0YW50LmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnN0YW5jZUNvbnN0YW50KGlyLkluc3RhbmNlQ29uc3RhbnQgbm9kZSkgewogICAgZm9yIChpci5Db25zdGFudCB2YWx1ZSBpbiBub2RlLmZpZWxkVmFsdWVzLnZhbHVlcykgewogICAgICBpZiAodmFsdWUuYWNjZXB0KHRoaXMpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTZXRDb25zdGFudChpci5TZXRDb25zdGFudCBub2RlKSB7CiAgICBmb3IgKGlyLkNvbnN0YW50IHZhbHVlIGluIG5vZGUuZW50cmllcykgewogICAgICBpZiAodmFsdWUuYWNjZXB0KHRoaXMpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMaXN0Q29uc3RhbnQoaXIuTGlzdENvbnN0YW50IG5vZGUpIHsKICAgIGZvciAoaXIuQ29uc3RhbnQgdmFsdWUgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgIGlmICh2YWx1ZS5hY2NlcHQodGhpcykpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdE1hcENvbnN0YW50KGlyLk1hcENvbnN0YW50IG5vZGUpIHsKICAgIGZvciAoaXIuQ29uc3RhbnRNYXBFbnRyeSBlbnRyeSBpbiBub2RlLmVudHJpZXMpIHsKICAgICAgaWYgKGVudHJ5LmtleS5hY2NlcHQodGhpcykpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoZW50cnkudmFsdWUuYWNjZXB0KHRoaXMpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9Cn0KCi8vLyBDbGFzcyB0byByZXByZXNlbnQgYSByZWZlcmVuY2UgdG8gYSBjb25zdGFudCBpbiBhbGxvY2F0aW9uIG5vZGVzLgovLy8KLy8vIFRoaXMgY2xhc3MgaXMgbmVlZGVkIGluIG9yZGVyIHRvIHN1cHBvcnQgc2VyaWFsaXphdGlvbiBvZiByZWZlcmVuY2VzIHRvCi8vLyBjb25zdGFudCBub2Rlcy4gU2luY2UgdGhlIGNvbnN0YW50IG5vZGVzIGFyZSBub3QgW2lyLlRyZWVOb2RlXXMgd2UgY2FuIG9ubHkKLy8vIHNlcmlhbGl6ZSB0aGUgY29uc3RhbnRzIGFzIHZhbHVlcyB3aGljaCB3b3VsZCBieXBhc3MgYnkgdGhlIGNhbm9uaWNhbGl6YXRpb24KLy8vIHBlcmZvcm1lZCBieSB0aGUgQ0ZFLiBUaGlzIGNsYXNzIGV4dGVuZHMgb25seSBhcyBhIHRyaWNrIHRvIGVhc2lseSBwYXNzCi8vLyBpdCB0aHJvdWdoIHNlcmlhbGl6YXRpb24uCi8vLwovLy8gQnkgYWRkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBjb25zdGFudCBleHByZXNzaW9uIGluIHdoaWNoIHRoZSBjb25zdGFudAovLy8gb2NjdXJyZWQsIHdlIGNhbiBzZXJpYWxpemUgcmVmZXJlbmNlcyB0byBjb25zdGFudHMgaW4gdHdvIHN0ZXBzOiBhIHJlZmVyZW5jZQovLy8gdG8gdGhlIGNvbnN0YW50IGV4cHJlc3Npb24gZm9sbG93ZWQgYnkgYW4gaW5kZXggb2YgdGhlIHJlZmVycmVkIGNvbnN0YW50Ci8vLyBpbiB0aGUgdHJhdmVyc2FsIG9yZGVyIG9mIHRoZSBjb25zdGFudCBoZWxkIGJ5IHRoZSBjb25zdGFudCBleHByZXNzaW9uLgovLy8KLy8vIFRoaXMgaXMgdXNlZCBmb3IgbGlzdCwgbWFwLCBhbmQgc2V0IGxpdGVyYWxzLgpjbGFzcyBDb25zdGFudFJlZmVyZW5jZSBleHRlbmRzIGlyLlRyZWVOb2RlIHsKICBmaW5hbCBpci5Db25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKICBmaW5hbCBpci5Db25zdGFudCBjb25zdGFudDsKCiAgQ29uc3RhbnRSZWZlcmVuY2UodGhpcy5leHByZXNzaW9uLCB0aGlzLmNvbnN0YW50KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENoaWxkcmVuKGlyLlZpc2l0b3IgdikgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNvbnN0YW50UmVmZXJlbmNlLnZpc2l0Q2hpbGRyZW4iKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChpci5UcmVlVmlzaXRvciB2KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ29uc3RhbnRSZWZlcmVuY2UuYWNjZXB0Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB0cmFuc2Zvcm1DaGlsZHJlbihpci5UcmFuc2Zvcm1lciB2KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ29uc3RhbnRSZWZlcmVuY2UudHJhbnNmb3JtQ2hpbGRyZW4iKTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gMTMgKiBjb25zdGFudC5oYXNoQ29kZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBvdGhlciBpcyBDb25zdGFudFJlZmVyZW5jZSAmJiBjb25zdGFudCA9PSBvdGhlci5jb25zdGFudDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdDb25zdGFudFJlZmVyZW5jZShjb25zdGFudD0kY29uc3RhbnQpJzsKfQqAwQBOTjwBKDVMQAEoAS1BAT4tARkBHEsyMkgPUBkdLQEMOgEMSzYpLDBCEDBDTS8iChcIFwYbSBwjDQwlFBUIBgQCATIqGQEkAQw8DwQBDEwcJgYEAgFPIUMlAQwzAQxGAQxRLgQBDDk5IBUIBhIEAQwvLiAVCAYSBAEMMS4gFQgGEgQBDC82JBUIJhUIBhIEAgFGBExQUUweBEtRTUwEMi4qHgE1AQwlQwQBDB08BAEMKEcEAQwuAQwjLUUEAQxAAgEmcGFja2FnZTpjb21waWxlci9zcmMvaXIvY29uc3RhbnRzLmRhcnQ2c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvc3RhdGljX3R5cGVfYmFzZS5kYXJ0mkcvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgovLy8gU3BlY2lhbCBib3R0b20gdHlwZSB1c2VkIHRvIHNpZ25hbCB0aGF0IGFuIGV4cHJlc3Npb24gb3Igc3RhdGVtZW50IGRvZXMKLy8vIG5vdCBjb21wbGV0ZSBub3JtYWxseS4gVGhpcyBpcyB0aGUgY2FzZSBmb3IgaW5zdGFuY2Ugb2YgdGhyb3cgZXhwcmVzc2lvbnMKLy8vIGFuZCByZXR1cm4gc3RhdGVtZW50cy4KY2xhc3MgRG9lc05vdENvbXBsZXRlVHlwZSBleHRlbmRzIGlyLkJvdHRvbVR5cGUgewogIGNvbnN0IERvZXNOb3RDb21wbGV0ZVR5cGUoKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0RvZXNOb3RDb21wbGV0ZVR5cGUoKSc7Cn0KCi8vLyBTcGVjaWFsIGludGVyZmFjZSB0eXBlIHVzZWQgdG8gc2lnbmFsIHRoYXQgdGhlIHN0YXRpYyB0eXBlIG9mIGFuIGV4cHJlc3Npb24KLy8vIGhhcyBwcmVjaXNpb24gb2YgYSB0aGlzLWV4cHJlc3Npb24uCmNsYXNzIFRoaXNJbnRlcmZhY2VUeXBlIGV4dGVuZHMgaXIuSW50ZXJmYWNlVHlwZSB7CiAgVGhpc0ludGVyZmFjZVR5cGUoaXIuQ2xhc3MgY2xhc3NOb2RlLCBbTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50c10pCiAgICAgIDogc3VwZXIoY2xhc3NOb2RlLCB0eXBlQXJndW1lbnRzKTsKCiAgZmFjdG9yeSBUaGlzSW50ZXJmYWNlVHlwZS5mcm9tKGlyLkludGVyZmFjZVR5cGUgdHlwZSkgPT4gdHlwZSAhPSBudWxsCiAgICAgID8gbmV3IFRoaXNJbnRlcmZhY2VUeXBlKHR5cGUuY2xhc3NOb2RlLCB0eXBlLnR5cGVBcmd1bWVudHMpCiAgICAgIDogbnVsbDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ3RoaXM6JHtzdXBlci50b1N0cmluZygpfSc7Cn0KCi8vLyBTcGVjaWFsIGludGVyZmFjZSB0eXBlIHVzZWQgdG8gc2lnbmFsIHRoYXQgdGhlIHN0YXRpYyB0eXBlIG9mIGFuIGV4cHJlc3Npb24KLy8vIGlzIGV4YWN0LCBpLmUuIHRoZSBydW50aW1lIHR5cGUgaXMgbm90IGEgc3VidHlwZSBvciBzdWJjbGFzcyBvZiB0aGUgdHlwZS4KY2xhc3MgRXhhY3RJbnRlcmZhY2VUeXBlIGV4dGVuZHMgaXIuSW50ZXJmYWNlVHlwZSB7CiAgRXhhY3RJbnRlcmZhY2VUeXBlKGlyLkNsYXNzIGNsYXNzTm9kZSwgW0xpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHNdKQogICAgICA6IHN1cGVyKGNsYXNzTm9kZSwgdHlwZUFyZ3VtZW50cyk7CgogIGZhY3RvcnkgRXhhY3RJbnRlcmZhY2VUeXBlLmZyb20oaXIuSW50ZXJmYWNlVHlwZSB0eXBlKSA9PiB0eXBlICE9IG51bGwKICAgICAgPyBuZXcgRXhhY3RJbnRlcmZhY2VUeXBlKHR5cGUuY2xhc3NOb2RlLCB0eXBlLnR5cGVBcmd1bWVudHMpCiAgICAgIDogbnVsbDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ2V4YWN0OiR7c3VwZXIudG9TdHJpbmcoKX0nOwp9CgovLy8gQmFzZSBjbGFzcyBmb3IgY29tcHV0aW5nIHN0YXRpYyB0eXBlcy4KLy8vCi8vLyBUaGlzIGNsYXNzIHVzZXMgdGhlIHZpc2l0b3IgcGF0dGVybiB0byBjb21wdXRlIHRoZSBzdGF0aWMgdHlwZSB0aGF0IGFyZQovLy8gZGlyZWN0bHkgZGVmaW5lZCBieSB0aGUgZXhwcmVzc2lvbiBraW5kLgovLy8KLy8vIFN1YmNsYXNzZXMgd2lsbCBjb21wdXRlIHRoZSBzdGF0aWMgdHlwZSBvciB1c2UgYSBjYWNoZSB0byBsb29rIHVwIHRoZSBzdGF0aWMKLy8vIHR5cGUgb2YgZXhwcmVzc2lvbiB3aG9zZSBzdGF0aWMgdHlwZSBpcyBub3QgZGlyZWN0bHkgZGVmaW5lZCBieSB0aGUKLy8vIGV4cHJlc3Npb24ga2luZC4gRm9yIGluc3RhbmNlIG1ldGhvZCBpbnZvY2F0aW9ucyB3aG9zZSBzdGF0aWMgdHlwZSBkZXBlbmQKLy8vIG9uIHRoZSBzdGF0aWMgdHlwZXMgb2YgdGhlIHJlY2VpdmVyIGFuZCB0eXBlIGFyZ3VtZW50cyBhbmQgdGhlIHNpZ25hdHVyZQovLy8gb2YgdGhlIHRhcmdldGVkIHByb2NlZHVyZS4KYWJzdHJhY3QgY2xhc3MgU3RhdGljVHlwZUJhc2UgZXh0ZW5kcyBpci5WaXNpdG9yPGlyLkRhcnRUeXBlPiB7CiAgZmluYWwgaXIuVHlwZUVudmlyb25tZW50IF90eXBlRW52aXJvbm1lbnQ7CgogIFN0YXRpY1R5cGVCYXNlKHRoaXMuX3R5cGVFbnZpcm9ubWVudCk7CgogIGZhaWwoU3RyaW5nIG1lc3NhZ2UpID0+IG1lc3NhZ2U7CgogIGlyLlR5cGVFbnZpcm9ubWVudCBnZXQgdHlwZUVudmlyb25tZW50ID0+IF90eXBlRW52aXJvbm1lbnQ7CgogIFRoaXNJbnRlcmZhY2VUeXBlIGdldCB0aGlzVHlwZTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgZGVmYXVsdE5vZGUoaXIuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGlyLkRhcnRUeXBlIHZpc2l0Tm9kZShpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBub2RlPy5hY2NlcHQodGhpcyk7CiAgfQoKICBOdWxsIHZpc2l0Tm9kZXMoTGlzdDxpci5Ob2RlPiBub2RlcykgewogICAgZm9yIChpci5Ob2RlIG5vZGUgaW4gbm9kZXMpIHsKICAgICAgdmlzaXROb2RlKG5vZGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgZGVmYXVsdEV4cHJlc3Npb24oaXIuRXhwcmVzc2lvbiBub2RlKSB7CiAgICB0aHJvdyBmYWlsKCdVbmhhbmRsZWQgbm9kZSAkbm9kZSAoJHtub2RlLnJ1bnRpbWVUeXBlfSknKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0QXNFeHByZXNzaW9uKGlyLkFzRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbm9kZS50eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRBd2FpdEV4cHJlc3Npb24oaXIuQXdhaXRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiB0eXBlRW52aXJvbm1lbnQudW5mdXR1cmVUeXBlKHZpc2l0Tm9kZShub2RlLm9wZXJhbmQpKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0Qm9vbExpdGVyYWwoaXIuQm9vbExpdGVyYWwgbm9kZSkgPT4gdHlwZUVudmlyb25tZW50LmJvb2xUeXBlOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdENoZWNrTGlicmFyeUlzTG9hZGVkKGlyLkNoZWNrTGlicmFyeUlzTG9hZGVkIG5vZGUpID0+CiAgICAgIHR5cGVFbnZpcm9ubWVudC5vYmplY3RUeXBlOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFN0cmluZ0xpdGVyYWwoaXIuU3RyaW5nTGl0ZXJhbCBub2RlKSA9PgogICAgICB0eXBlRW52aXJvbm1lbnQuc3RyaW5nVHlwZTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTdHJpbmdDb25jYXRlbmF0aW9uKGlyLlN0cmluZ0NvbmNhdGVuYXRpb24gbm9kZSkgewogICAgcmV0dXJuIHR5cGVFbnZpcm9ubWVudC5zdHJpbmdUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXROdWxsTGl0ZXJhbChpci5OdWxsTGl0ZXJhbCBub2RlKSA9PiB0eXBlRW52aXJvbm1lbnQubnVsbFR5cGU7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0SW50TGl0ZXJhbChpci5JbnRMaXRlcmFsIG5vZGUpID0+IHR5cGVFbnZpcm9ubWVudC5pbnRUeXBlOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdERvdWJsZUxpdGVyYWwoaXIuRG91YmxlTGl0ZXJhbCBub2RlKSA9PgogICAgICB0eXBlRW52aXJvbm1lbnQuZG91YmxlVHlwZTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTeW1ib2xMaXRlcmFsKGlyLlN5bWJvbExpdGVyYWwgbm9kZSkgPT4KICAgICAgdHlwZUVudmlyb25tZW50LnN5bWJvbFR5cGU7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0TGlzdExpdGVyYWwoaXIuTGlzdExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIHR5cGVFbnZpcm9ubWVudC5saXRlcmFsTGlzdFR5cGUobm9kZS50eXBlQXJndW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTZXRMaXRlcmFsKGlyLlNldExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIHR5cGVFbnZpcm9ubWVudC5saXRlcmFsU2V0VHlwZShub2RlLnR5cGVBcmd1bWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdE1hcExpdGVyYWwoaXIuTWFwTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gdHlwZUVudmlyb25tZW50LmxpdGVyYWxNYXBUeXBlKG5vZGUua2V5VHlwZSwgbm9kZS52YWx1ZVR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRWYXJpYWJsZVNldChpci5WYXJpYWJsZVNldCBub2RlKSB7CiAgICByZXR1cm4gdmlzaXROb2RlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRQcm9wZXJ0eVNldChpci5Qcm9wZXJ0eVNldCBub2RlKSB7CiAgICByZXR1cm4gdmlzaXROb2RlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXREaXJlY3RQcm9wZXJ0eVNldChpci5EaXJlY3RQcm9wZXJ0eVNldCBub2RlKSB7CiAgICByZXR1cm4gdmlzaXROb2RlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVGhpc0ludGVyZmFjZVR5cGUgdmlzaXRUaGlzRXhwcmVzc2lvbihpci5UaGlzRXhwcmVzc2lvbiBub2RlKSA9PiB0aGlzVHlwZTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTdGF0aWNHZXQoaXIuU3RhdGljR2V0IG5vZGUpID0+IG5vZGUudGFyZ2V0LmdldHRlclR5cGU7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0U3RhdGljU2V0KGlyLlN0YXRpY1NldCBub2RlKSB7CiAgICByZXR1cm4gdmlzaXROb2RlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTdXBlclByb3BlcnR5U2V0KGlyLlN1cGVyUHJvcGVydHlTZXQgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0Tm9kZShub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0VGhyb3coaXIuVGhyb3cgbm9kZSkgPT4gY29uc3QgRG9lc05vdENvbXBsZXRlVHlwZSgpOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFJldGhyb3coaXIuUmV0aHJvdyBub2RlKSA9PiBjb25zdCBEb2VzTm90Q29tcGxldGVUeXBlKCk7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0TG9naWNhbEV4cHJlc3Npb24oaXIuTG9naWNhbEV4cHJlc3Npb24gbm9kZSkgPT4KICAgICAgdHlwZUVudmlyb25tZW50LmJvb2xUeXBlOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdE5vdChpci5Ob3Qgbm9kZSkgewogICAgcmV0dXJuIHR5cGVFbnZpcm9ubWVudC5ib29sVHlwZTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKGlyLkNvbmRpdGlvbmFsRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbm9kZS5zdGF0aWNUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRJc0V4cHJlc3Npb24oaXIuSXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiB0eXBlRW52aXJvbm1lbnQuYm9vbFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdFR5cGVMaXRlcmFsKGlyLlR5cGVMaXRlcmFsIG5vZGUpID0+IHR5cGVFbnZpcm9ubWVudC50eXBlVHlwZTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRGdW5jdGlvbkV4cHJlc3Npb24oaXIuRnVuY3Rpb25FeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiBub2RlLmZ1bmN0aW9uLmZ1bmN0aW9uVHlwZTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0TGV0KGlyLkxldCBub2RlKSB7CiAgICByZXR1cm4gdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdEJsb2NrRXhwcmVzc2lvbihpci5CbG9ja0V4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIHZpc2l0Tm9kZShub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0SW52YWxpZEV4cHJlc3Npb24oaXIuSW52YWxpZEV4cHJlc3Npb24gbm9kZSkgPT4KICAgICAgY29uc3QgRG9lc05vdENvbXBsZXRlVHlwZSgpOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdExvYWRMaWJyYXJ5KGlyLkxvYWRMaWJyYXJ5IG5vZGUpIHsKICAgIHJldHVybiB0eXBlRW52aXJvbm1lbnQuZnV0dXJlVHlwZShjb25zdCBpci5EeW5hbWljVHlwZSgpKTsKICB9CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKGlyLkNvbnN0YW50RXhwcmVzc2lvbiBub2RlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBJbmNsdWRlIGludGVyZmFjZSBleGFjdG5lc3Mgd2hlcmUgYXBwbGljYWJsZS4KICAgIHJldHVybiBub2RlLmdldFN0YXRpY1R5cGUodHlwZUVudmlyb25tZW50KTsKICB9Cn0KgOsATk48ASg0LzE1AUxOGzIfAQwwAgFQKDNLKQFIQg4BDDMCAVBONEwpAUlDDgEMNAIBKwRMLQRRSE5NH0AtASkBIwE+ASIBDCoRBAEoHwQBKSIXBgQBDDY+BAEMOBYEAQw+QgQBDFEBDEkiAQw7IgEMRicEAQxRAQxOAQw7IgEMOyIBDDY/BAEMND4EAQw0SQQBDDYiBAEMNiIEAQxCIgQBDE0BDEsBDDIiBAEMQCIEAQxIAQxMAQxDIAEMJiUEAQxKHAQBDDglBAEMUQEMRCcEAQwmIQQBDD4iBAEMQyMBDDY/BAEMREowBAIBLXBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3N0YXRpY190eXBlX2Jhc2UuZGFydDNzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qcy9yZXdyaXRlX2FzeW5jLmRhcnTAAXemLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgcmV3cml0ZV9hc3luYzsKCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKaW1wb3J0ICdkYXJ0Om1hdGgnIHNob3cgbWF4OwoKaW1wb3J0ICdwYWNrYWdlOmpzX3J1bnRpbWUvc2hhcmVkL2FzeW5jX2F3YWl0X2Vycm9yX2NvZGVzLmRhcnQnIGFzIGVycm9yX2NvZGVzOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnIHNob3cgU291cmNlSW5mb3JtYXRpb247CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgUGFpcjsKaW1wb3J0ICdqcy5kYXJ0JyBhcyBqczsKCi8vLyBSZXdyaXRlcyBhIFtqcy5GdW5dIHdpdGggYXN5bmMvc3luYyovYXN5bmMqIGZ1bmN0aW9ucyBhbmQgYXdhaXQgYW5kIHlpZWxkCi8vLyAod2l0aCBkYXJ0LWxpa2Ugc2VtYW50aWNzKSB0byBhbiBlcXVpdmFsZW50IGZ1bmN0aW9uIHdpdGhvdXQgdGhlc2UuCi8vLyBhd2FpdC1mb3IgaXMgbm90IGhhbmRsZWQgYW5kIG11c3QgYmUgcmV3cml0dGVuIGJlZm9yZS4gKEN1cnJlbnRseSBoYW5kbGVkCi8vLyBpbiBzc2EvYnVpbGRlci5kYXJ0KS4KLy8vCi8vLyBXaGVuIGdlbmVyYXRpbmcgdGhlIGlucHV0IHRvIHRoaXMsIHNwZWNpYWwgY2FyZSBtdXN0IGJlIHRha2VuIHRoYXQKLy8vIHBhcmFtZXRlcnMgdG8gc3luYyogZnVuY3Rpb25zIHRoYXQgYXJlIG11dGF0ZWQgaW4gdGhlIGJvZHkgbXVzdCBiZSBib3hlZC4KLy8vIChDdXJyZW50bHkgaGFuZGxlZCBpbiBjbG9zdXJlLmRhcnQpLgovLy8KLy8vIExvb2sgYXQgW3Jld3JpdGVGdW5jdGlvbl0sIFt2aXNpdERhcnRZaWVsZF0gYW5kIFt2aXNpdEF3YWl0XSBmb3IgbW9yZQovLy8gZXhwbGFuYXRpb24uCmFic3RyYWN0IGNsYXNzIEFzeW5jUmV3cml0ZXJCYXNlIGV4dGVuZHMganMuTm9kZVZpc2l0b3IgewogIC8vIExvY2FsIHZhcmlhYmxlcyBhcmUgaG9pc3RlZCB0byB0aGUgdG9wIG9mIHRoZSBmdW5jdGlvbiwgc28gdGhleSBhcmUKICAvLyBjb2xsZWN0ZWQgaGVyZS4KICBMaXN0PGpzLlZhcmlhYmxlRGVjbGFyYXRpb24+IGxvY2FsVmFyaWFibGVzID0gPGpzLlZhcmlhYmxlRGVjbGFyYXRpb24+W107CgogIE1hcDxqcy5Ob2RlLCBpbnQ+IGNvbnRpbnVlTGFiZWxzID0gbmV3IE1hcDxqcy5Ob2RlLCBpbnQ+KCk7CiAgTWFwPGpzLk5vZGUsIGludD4gYnJlYWtMYWJlbHMgPSBuZXcgTWFwPGpzLk5vZGUsIGludD4oKTsKCiAgLy8vIFRoZSBsYWJlbCBvZiBhIGZpbmFsbHkgcGFydC4KICBNYXA8anMuQmxvY2ssIGludD4gZmluYWxseUxhYmVscyA9IG5ldyBNYXA8anMuQmxvY2ssIGludD4oKTsKCiAgLy8vIFRoZSBsYWJlbCBvZiB0aGUgY2F0Y2ggaGFuZGxlciBvZiBhIFtqcy5UcnldIG9yIGEgW2pzLkZ1bl0gb3IgW2pzLkNhdGNoXS4KICAvLy8KICAvLy8gVGhlc2UgbWFyayB0aGUgcG9pbnRzIGFuIGVycm9yIGNhbiBiZSBjb25zdW1lZC4KICAvLy8KICAvLy8gLSBUaGUgaGFuZGxlciBvZiBhIFtqcy5GdW5dIGlzIHRoZSBvdXRlcm1vc3QgYW5kIHdpbGwgcmV0aHJvdyB0aGUgZXJyb3IuCiAgLy8vIC0gVGhlIGhhbmRsZXIgb2YgYSBbanMuVHJ5XSB3aWxsIHJ1biB0aGUgY2F0Y2ggaGFuZGxlci4KICAvLy8gLSBUaGUgaGFuZGxlciBvZiBhIFtqcy5DYXRjaF0gaXMgYSBzeW50aGV0aWMgaGFuZGxlciB0aGF0IGVuc3VyZXMgdGhlCiAgLy8vICAgcmlnaHQgZmluYWxseSBibG9ja3MgYXJlIHJ1biBpZiBhbiBlcnJvciBpcyB0aHJvd24gaW5zaWRlIGEKICAvLy8gICBjYXRjaC1oYW5kbGVyLgogIE1hcDxqcy5Ob2RlLCBpbnQ+IGhhbmRsZXJMYWJlbHMgPSBuZXcgTWFwPGpzLk5vZGUsIGludD4oKTsKCiAgaW50IGV4aXRMYWJlbDsKICBpbnQgcmV0aHJvd0xhYmVsOwoKICAvLy8gQSBzdGFjayBvZiBhbGwgKHN1cnJvdW5kaW5nKSBqdW1wIHRhcmdldHMuCiAgLy8vCiAgLy8vIEp1bXAgdGFyZ2V0cyBhcmU6CiAgLy8vCiAgLy8vICogVGhlIGZ1bmN0aW9uLCBzaWduYWxsaW5nIGEgcmV0dXJuIG9yIHVuY2F1Z2h0IHRocm93LgogIC8vLyAqIExvb3BzLgogIC8vLyAqIExhYmVsZWRTdGF0ZW1lbnRzIChhbHNvIHVzZWQgZm9yICdjb250aW51ZScgd2hlbiBhdHRhY2hlZCB0byBsb29wcykuCiAgLy8vICogVHJ5IHN0YXRlbWVudHMsIGZvciBjYXRjaCBhbmQgZmluYWxseSBoYW5kbGVycy4KICAvLy8gKiBDYXRjaCBoYW5kbGVycywgd2hlbiBpbnNpZGUgYSBjYXRjaC1wYXJ0IG9mIGEgdHJ5LCB0aGUgY2F0Y2gtaGFuZGxlciBpcwogIC8vLyAgIHVzZWQgdG8gYXNzb2NpYXRlIHdpdGggYSBzeW50aGV0aWMgaGFuZGxlciB0aGF0IHdpbGwgZW5zdXJlIHRoZSByaWdodAogIC8vLyAgIGZpbmFsbHkgYmxvY2tzIGFyZSB2aXNpdGVkLgogIC8vLwogIC8vLyBXaGVuIGp1bXBpbmcgdG8gYSB0YXJnZXQgaXQgaXMgbmVjZXNzYXJ5IHRvIHZpc2l0IGFsbCBmaW5hbGxpZXMgdGhhdAogIC8vLyBhcmUgb24gdGhlIHdheSB0byB0YXJnZXQgKGkuZS4gbW9yZSBuZXN0ZWQgdGhhbiB0aGUganVtcCB0YXJnZXQpLgogIExpc3Q8anMuTm9kZT4ganVtcFRhcmdldHMgPSA8anMuTm9kZT5bXTsKCiAgTGlzdDxpbnQ+IGNvbnRpbnVlU3RhY2sgPSA8aW50PltdOwogIExpc3Q8aW50PiBicmVha1N0YWNrID0gPGludD5bXTsKICBMaXN0PGludD4gcmV0dXJuU3RhY2sgPSA8aW50PltdOwoKICBMaXN0PFBhaXI8U3RyaW5nLCBTdHJpbmc+PiB2YXJpYWJsZVJlbmFtaW5ncyA9IDxQYWlyPFN0cmluZywgU3RyaW5nPj5bXTsKCiAgUHJlVHJhbnNsYXRpb25BbmFseXNpcyBhbmFseXNpczsKCiAgZmluYWwgRnVuY3Rpb24gc2FmZVZhcmlhYmxlTmFtZTsKCiAgLy8gQWxsIHRoZSA8eD5OYW1lIHZhcmlhYmxlcyBhcmUgbmFtZXMgb2YgSmF2YXNjcmlwdCB2YXJpYWJsZXMgdXNlZCBpbiB0aGUKICAvLyB0cmFuc2Zvcm1lZCBjb2RlLgoKICAvLy8gQ29udGFpbnMgdGhlIHJlc3VsdCBvZiBhbiBhd2FpdGVkIGV4cHJlc3Npb24sIG9yIGEgY29uZGl0aW9uYWwgb3IKICAvLy8gbGF6eSBib29sZWFuIG9wZXJhdG9yLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSBhIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24gaXMgcm91Z2hseSB0cmFuc2xhdGVkIGxpa2U6CiAgLy8vIFtbY29uZCA/IGEgOiBiXV0KICAvLy8KICAvLy8gQmVjb21lczoKICAvLy8KICAvLy8gd2hpbGUgdHJ1ZSB7IC8vIG91dGVyIHdoaWxlIGxvb3AKICAvLy8gICBzd2l0Y2ggKGdvdG8pIHsgLy8gU2ltdWxhdGVzIGdvdG8KICAvLy8gICAgIC4uLgogIC8vLyAgICAgICBnb3RvID0gW1tjb25kXV0gPyB0aGVuTGFiZWwgOiBlbHNlTGFiZWwKICAvLy8gICAgICAgYnJlYWs7CiAgLy8vICAgICBjYXNlIHRoZW5MYWJlbDoKICAvLy8gICAgICAgcmVzdWx0ID0gW1thXV07CiAgLy8vICAgICAgIGdvdG8gPSBqb2luTGFiZWw7CiAgLy8vICAgICBjYXNlIGVsc2VMYWJlbDoKICAvLy8gICAgICAgcmVzdWx0ID0gW1tiXV07CiAgLy8vICAgICBjYXNlIGpvaW5MYWJlbDoKICAvLy8gICAgICAgLy8gTm93IHRoZSByZXN1bHQgb2YgY29tcHV0aW5nIHRoZSBjb25kaXRpb24gaXMgaW4gcmVzdWx0LgogIC8vLyAgICAgLi4uLgogIC8vLyAgIH0KICAvLy8gfQogIC8vLwogIC8vLyBJdCBpcyBhIHBhcmFtZXRlciB0byB0aGUgW2JvZHldIGZ1bmN0aW9uLCBzbyB0aGF0IFthd2FpdFN0YXRlbWVudF0gY2FuCiAgLy8vIGNhbGwgW2JvZHldIHdpdGggdGhlIHJlc3VsdCBvZiBhbiBhd2FpdGVkIEZ1dHVyZS4KICBqcy5WYXJpYWJsZVVzZSBnZXQgcmVzdWx0ID0+IG5ldyBqcy5WYXJpYWJsZVVzZShyZXN1bHROYW1lKTsKICBTdHJpbmcgcmVzdWx0TmFtZTsKCiAgLy8vIEEgcGFyYW1ldGVyIHRvIHRoZSBbYm9keU5hbWVdIGZ1bmN0aW9uLiBJbmRpY2F0aW5nIGlmIHdlIGFyZSBpbiBzdWNjZXNzCiAgLy8vIG9yIGVycm9yIGNhc2UuCiAgU3RyaW5nIGVycm9yQ29kZU5hbWU7CgogIC8vLyBUaGUgaW5uZXIgZnVuY3Rpb24gdGhhdCBpcyBzY2hlZHVsZWQgdG8gZG8gZWFjaCBhd2FpdC95aWVsZCwKICAvLy8gYW5kIGNhbGxlZCB0byBkbyBhIG5ldyBpdGVyYXRpb24gZm9yIHN5bmMqLgogIGpzLk5hbWUgYm9keU5hbWU7CgogIC8vLyBVc2VkIHRvIHNpbXVsYXRlIGEgZ290by4KICAvLy8KICAvLy8gVG8gImdvdG8iIGEgbGFiZWwsIHRoZSBsYWJlbCBpcyBhc3NpZ25lZCB0byB0aGlzIHZhcmlhYmxlLCBhbmQgYnJlYWsgb3V0CiAgLy8vIG9mIHRoZSBzd2l0Y2ggdG8gdGFrZSBhbm90aGVyIGl0ZXJhdGlvbiBpbiB0aGUgd2hpbGUgbG9vcC4gU2VlIFthZGRHb3RvXQogIGpzLlZhcmlhYmxlVXNlIGdldCBnb3RvID0+IG5ldyBqcy5WYXJpYWJsZVVzZShnb3RvTmFtZSk7CiAgU3RyaW5nIGdvdG9OYW1lOwoKICAvLy8gVmFyaWFibGUgY29udGFpbmluZyB0aGUgbGFiZWwgb2YgdGhlIGN1cnJlbnQgZXJyb3IgaGFuZGxlci4KICBqcy5WYXJpYWJsZVVzZSBnZXQgaGFuZGxlciA9PiBuZXcganMuVmFyaWFibGVVc2UoaGFuZGxlck5hbWUpOwogIFN0cmluZyBoYW5kbGVyTmFtZTsKCiAgLy8vIFNldCB0byBgdHJ1ZWAgaWYgYW55IG9mIHRoZSBzd2l0Y2ggc3RhdGVtZW50IGxhYmVscyBpcyBhIGhhbmRsZXIuIEF0IHRoZQogIC8vLyBlbmQgb2YgcmV3cml0aW5nIHRoaXMgaXMgdXNlZCB0byBzZWUgaWYgYSBzaG9ydGVyIGZvcm0gb2YgZXJyb3IgaGFuZGxpbmcKICAvLy8gY2FuIGJlIHVzZWQuIFRoZSBzaG9ydGVyIGZvcm0gY291bGQgYmUgYSBjaGFuZ2UgaW4gdGhlIG1ldGhvZCBib2lsZXJwbGF0ZSwKICAvLy8gaW4gdGhlIHN0YXRlIG1hY2hpbmUgd3JhcHBlciwgb3Igbm90IGltcGxlbWVudGVkLiBbYWRkRXJyb3JFeGl0XSBjYW4gdGVzdAogIC8vLyB0aGlzIHRvIGVsaWRlIHRoZSBlcnJvciBleGl0IGhhbmRsZXIgd2hlbiB0aGVyZSBhcmUgbm8gb3RoZXIgaGFuZGxlcnMsIG9yCiAgLy8vIHNldCBpdCB0byBgdHJ1ZWAgaWYgdGhlcmUgaXMgbm8gc2hvcnRlciBmb3JtLgogIGJvb2wgaGFzSGFuZGxlckxhYmVscyA9IGZhbHNlOwoKICAvLy8gQSBzdGFjayBvZiBsYWJlbHMgb2YgZmluYWxseSBibG9ja3MgdG8gdmlzaXQsIGFuZCB0aGUgbGFiZWwgdG8gZ28gdG8gYWZ0ZXIKICAvLy8gdGhlIGxhc3QuCiAganMuVmFyaWFibGVVc2UgZ2V0IG5leHQgPT4gbmV3IGpzLlZhcmlhYmxlVXNlKG5leHROYW1lKTsKICBTdHJpbmcgbmV4dE5hbWU7CgogIC8vLyBUaGUgY3VycmVudCByZXR1cm5lZCB2YWx1ZSAoYSBmaW5hbGx5IGJsb2NrIG1heSBvdmVyd3JpdGUgaXQpLgogIGpzLlZhcmlhYmxlVXNlIGdldCByZXR1cm5WYWx1ZSA9PiBuZXcganMuVmFyaWFibGVVc2UocmV0dXJuVmFsdWVOYW1lKTsKICBTdHJpbmcgcmV0dXJuVmFsdWVOYW1lOwoKICAvLy8gU3RvcmVzIHRoZSBjdXJyZW50IGVycm9yIHdoZW4gd2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGhhbmRsaW5nIGFuIGVycm9yLgogIGpzLlZhcmlhYmxlVXNlIGdldCBjdXJyZW50RXJyb3IgPT4gbmV3IGpzLlZhcmlhYmxlVXNlKGN1cnJlbnRFcnJvck5hbWUpOwogIFN0cmluZyBjdXJyZW50RXJyb3JOYW1lOwoKICAvLy8gVGhlIGxhYmVsIG9mIHRoZSBvdXRlciBsb29wLgogIC8vLwogIC8vLyBVc2VkIGlmIHRoZXJlIGFyZSB1bnRyYW5zZm9ybWVkIGxvb3BzIGNvbnRhaW5pbmcgYnJlYWsgb3IgY29udGludWVzIHRvCiAgLy8vIHRhcmdldHMgb3V0c2lkZSB0aGUgbG9vcC4KICBTdHJpbmcgb3V0ZXJMYWJlbE5hbWU7CgogIC8vLyBJZiBqYXZhc2NyaXB0IGB0aGlzYCBpcyB1c2VkLCBpdCBpcyBhY2Nlc3NlZCB2aWEgdGhpcyB2YXJpYWJsZSwgaW4gdGhlCiAgLy8vIFtib2R5TmFtZV0gZnVuY3Rpb24uCiAganMuVmFyaWFibGVVc2UgZ2V0IHNlbGYgPT4gbmV3IGpzLlZhcmlhYmxlVXNlKHNlbGZOYW1lKTsKICBTdHJpbmcgc2VsZk5hbWU7CgogIC8vLyBUaGUgcmV3cml0dGVuIGNvZGUgY2FuIHRha2UgdHlwZSBhcmd1bWVudHMuIFRoZXNlIGFyZSBhZGRlZCBpZiBuZWVkZWQuCiAgTGlzdDxTdHJpbmc+IHR5cGVBcmd1bWVudE5hbWVzID0gPFN0cmluZz5bXTsKCiAgZmluYWwgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyOwogIC8vIEZvciBlcnJvciByZXBvcnRpbmcgb25seS4KICBTcGFubmFibGUgZ2V0IHNwYW5uYWJsZSB7CiAgICByZXR1cm4gKF9zcGFubmFibGUgPT0gbnVsbCkgPyBOT19MT0NBVElPTl9TUEFOTkFCTEUgOiBfc3Bhbm5hYmxlOwogIH0KCiAgU3Bhbm5hYmxlIF9zcGFubmFibGU7CgogIGludCBfY3VycmVudExhYmVsID0gMDsKCiAgLy8gVGhlIGhpZ2hlc3QgdGVtcG9yYXJ5IHZhcmlhYmxlIGluZGV4IGN1cnJlbnRseSBpbiB1c2UuCiAgaW50IGN1cnJlbnRUZW1wVmFySW5kZXggPSAwOwogIC8vIFRoZSBoaWdoZXN0IHRlbXBvcmFyeSB2YXJpYWJsZSBpbmRleCBldmVyIGluIHVzZSBpbiB0aGlzIGZ1bmN0aW9uLgogIGludCB0ZW1wVmFySGlnaFdhdGVyTWFyayA9IDA7CiAgTWFwPGludCwganMuRXhwcmVzc2lvbj4gdGVtcFZhck5hbWVzID0gbmV3IE1hcDxpbnQsIGpzLkV4cHJlc3Npb24+KCk7CgogIGJvb2wgZ2V0IGlzQXN5bmMgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNTeW5jU3RhciA9PiBmYWxzZTsKICBib29sIGdldCBpc0FzeW5jU3RhciA9PiBmYWxzZTsKCiAgQXN5bmNSZXdyaXRlckJhc2UoCiAgICAgIHRoaXMucmVwb3J0ZXIsIHRoaXMuX3NwYW5uYWJsZSwgdGhpcy5zYWZlVmFyaWFibGVOYW1lLCB0aGlzLmJvZHlOYW1lKTsKCiAgLy8vIEluaXRpYWxpemUgbmFtZXMgdXNlZCBieSB0aGUgc3ViQ2xhc3MuCiAgdm9pZCBpbml0aWFsaXplTmFtZXMoKTsKCiAgLy8vIE1haW4gZW50cnkgcG9pbnQuCiAgLy8vIFJld3JpdGVzIGEgc3luYyovYXN5bmMvYXN5bmMqIGZ1bmN0aW9uIHRvIGFuIGVxdWl2YWxlbnQgbm9ybWFsIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBbc3Bhbm5hYmxlXSBjYW4gYmUgcGFzc2VkIHRvIGhhdmUgYSBsb2NhdGlvbiBmb3IgZXJyb3IgbWVzc2FnZXMuCiAganMuRnVuIHJld3JpdGUoanMuRnVuIG5vZGUsIFNvdXJjZUluZm9ybWF0aW9uIGJvZHlTb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgU291cmNlSW5mb3JtYXRpb24gZXhpdFNvdXJjZUluZm9ybWF0aW9uLAogICAgICBbU3Bhbm5hYmxlIHNwYW5uYWJsZV0pIHsKICAgIF9zcGFubmFibGUgPSBzcGFubmFibGU7CgogICAgYW5hbHlzaXMgPSBuZXcgUHJlVHJhbnNsYXRpb25BbmFseXNpcyh1bnN1cHBvcnRlZCk7CiAgICBhbmFseXNpcy5hbmFseXplKG5vZGUpOwoKICAgIC8vIFRvIGF2b2lkIG5hbWUgY29sbGlzaW9ucyB3aXRoIGV4aXN0aW5nIG5hbWVzLCB0aGUgZnJlc2ggbmFtZXMgYXJlCiAgICAvLyBnZW5lcmF0ZWQgYWZ0ZXIgdGhlIGFuYWx5c2lzLgogICAgcmVzdWx0TmFtZSA9IGZyZXNoTmFtZSgicmVzdWx0Iik7CiAgICBlcnJvckNvZGVOYW1lID0gZnJlc2hOYW1lKCJlcnJvckNvZGUiKTsKICAgIGdvdG9OYW1lID0gZnJlc2hOYW1lKCJnb3RvIik7CiAgICBoYW5kbGVyTmFtZSA9IGZyZXNoTmFtZSgiaGFuZGxlciIpOwogICAgbmV4dE5hbWUgPSBmcmVzaE5hbWUoIm5leHQiKTsKICAgIHJldHVyblZhbHVlTmFtZSA9IGZyZXNoTmFtZSgicmV0dXJuVmFsdWUiKTsKICAgIGN1cnJlbnRFcnJvck5hbWUgPSBmcmVzaE5hbWUoImN1cnJlbnRFcnJvciIpOwogICAgb3V0ZXJMYWJlbE5hbWUgPSBmcmVzaE5hbWUoIm91dGVyIik7CiAgICBzZWxmTmFtZSA9IGZyZXNoTmFtZSgic2VsZiIpOwogICAgLy8gSW5pdGlhbGl6ZSBuYW1lcyBzcGVjaWZpYyB0byB0aGUgc3ViY2xhc3MuCiAgICBpbml0aWFsaXplTmFtZXMoKTsKCiAgICByZXR1cm4gcmV3cml0ZUZ1bmN0aW9uKG5vZGUsIGJvZHlTb3VyY2VJbmZvcm1hdGlvbiwgZXhpdFNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIGpzLkV4cHJlc3Npb24gZ2V0IGN1cnJlbnRFcnJvckhhbmRsZXIgewogICAgcmV0dXJuIGpzLm51bWJlcihoYW5kbGVyTGFiZWxzWwogICAgICAgIGp1bXBUYXJnZXRzLmxhc3RXaGVyZSgobm9kZSkgPT4gaGFuZGxlckxhYmVsc1tub2RlXSAhPSBudWxsKV0pOwogIH0KCiAgaW50IGFsbG9jYXRlVGVtcFZhcigpIHsKICAgIGFzc2VydCh0ZW1wVmFySGlnaFdhdGVyTWFyayA+PSBjdXJyZW50VGVtcFZhckluZGV4KTsKICAgIGN1cnJlbnRUZW1wVmFySW5kZXgrKzsKICAgIHRlbXBWYXJIaWdoV2F0ZXJNYXJrID0gbWF4KGN1cnJlbnRUZW1wVmFySW5kZXgsIHRlbXBWYXJIaWdoV2F0ZXJNYXJrKTsKICAgIHJldHVybiBjdXJyZW50VGVtcFZhckluZGV4OwogIH0KCiAganMuVmFyaWFibGVVc2UgdXNlVGVtcFZhcihpbnQgaSkgewogICAgcmV0dXJuIHRlbXBWYXJOYW1lcy5wdXRJZkFic2VudCgKICAgICAgICBpLCAoKSA9PiBuZXcganMuVmFyaWFibGVVc2UoZnJlc2hOYW1lKCJ0ZW1wJGkiKSkpOwogIH0KCiAgLy8vIEdlbmVyYXRlcyBhIHZhcmlhYmxlIG5hbWUgd2l0aCBbc2FmZVZhcmlhYmxlTmFtZV0gYmFzZWQgb24gW29yaWdpbmFsTmFtZV0KICAvLy8gd2l0aCBhIHN1ZmZpeCB0byBndWFyYW50ZWUgaXQgZG9lcyBub3QgY29sbGlkZSB3aXRoIGFscmVhZHkgdXNlZCBuYW1lcy4KICBTdHJpbmcgZnJlc2hOYW1lKFN0cmluZyBvcmlnaW5hbE5hbWUpIHsKICAgIFN0cmluZyBzYWZlTmFtZSA9IHNhZmVWYXJpYWJsZU5hbWUob3JpZ2luYWxOYW1lKTsKICAgIFN0cmluZyByZXN1bHQgPSBzYWZlTmFtZTsKICAgIGludCBjb3VudGVyID0gMTsKICAgIHdoaWxlIChhbmFseXNpcy51c2VkTmFtZXMuY29udGFpbnMocmVzdWx0KSkgewogICAgICByZXN1bHQgPSAiJHNhZmVOYW1lJGNvdW50ZXIiOwogICAgICArK2NvdW50ZXI7CiAgICB9CiAgICBhbmFseXNpcy51c2VkTmFtZXMuYWRkKHJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgTGlzdDxqcy5FeHByZXNzaW9uPiBwcm9jZXNzVHlwZUFyZ3VtZW50cyhMaXN0PGpzLkV4cHJlc3Npb24+IHR5cGVzKSB7CiAgICBpZiAodHlwZXMgPT0gbnVsbCkgewogICAgICBTdHJpbmcgbmFtZSA9IGZyZXNoTmFtZSgndHlwZScpOwogICAgICB0eXBlQXJndW1lbnROYW1lcy5hZGQobmFtZSk7CiAgICAgIHJldHVybiA8anMuRXhwcmVzc2lvbj5bbmV3IGpzLlZhcmlhYmxlVXNlKG5hbWUpXTsKICAgIH0KICAgIHJldHVybiB0eXBlczsKICB9CgogIC8vLyBBbGwgdGhlIHBpZWNlcyBhcmUgY29sbGVjdGVkIGluIHRoaXMgbWFwLCB0byBjcmVhdGUgYSBzd2l0Y2ggd2l0aCBhIGNhc2UKICAvLy8gZm9yIGVhY2ggbGFiZWwuCiAgLy8vCiAgLy8vIFRoZSBvcmRlciBpcyBpbXBvcnRhbnQsIHRoZXJlZm9yZSB0aGUgdHlwZSBpcyBleHBsaWNpdGx5IExpbmtlZEhhc2hNYXAuCiAgTGlua2VkSGFzaE1hcDxpbnQsIExpc3Q8anMuU3RhdGVtZW50Pj4gbGFiZWxsZWRQYXJ0cyA9CiAgICAgIG5ldyBMaW5rZWRIYXNoTWFwPGludCwgTGlzdDxqcy5TdGF0ZW1lbnQ+PigpOwoKICAvLy8gRGVzY3JpcHRpb24gb2YgZWFjaCBsYWJlbCBmb3IgcmVhZGFiaWxpdHkgb2YgdGhlIG5vbi1taW5pZmllZCBvdXRwdXQuCiAgTWFwPGludCwgU3RyaW5nPiBsYWJlbENvbW1lbnRzID0gbmV3IE1hcDxpbnQsIFN0cmluZz4oKTsKCiAgLy8vIFRydWUgaWYgdGhlIGZ1bmN0aW9uIGhhcyBhbnkgdHJ5IGJsb2NrcyBjb250YWluaW5nIGF3YWl0LgogIGJvb2wgaGFzVHJ5QmxvY2tzID0gZmFsc2U7CgogIC8vLyBUcnVlIGlmIHRoZSB0cmF2ZXJzaW9uIGN1cnJlbnRseSBpcyBpbnNpZGUgYSBsb29wIG9yIHN3aXRjaCBmb3Igd2hpY2gKICAvLy8gW3Nob3VsZFRyYW5zZm9ybV0gaXMgZmFsc2UuCiAgYm9vbCBpbnNpZGVVbnRyYW5zbGF0ZWRCcmVha2FibGUgPSBmYWxzZTsKCiAgLy8vIFRydWUgaWYgYSBsYWJlbCBpcyB1c2VkIHRvIGJyZWFrIHRvIGFuIG91dGVyIHN3aXRjaC1zdGF0ZW1lbnQuCiAgYm9vbCBoYXNKdW1wVGhvdWdoT3V0ZXJMYWJlbCA9IGZhbHNlOwoKICAvLy8gVHJ1ZSBpZiB0aGVyZSBpcyBhIGNhdGNoLWhhbmRsZXIgcHJvdGVjdGVkIGJ5IGEgZmluYWxseSB3aXRoIG5vIGVuY2xvc2luZwogIC8vLyBjYXRjaC1oYW5kbGVycy4KICBib29sIG5lZWRzUmV0aHJvdyA9IGZhbHNlOwoKICAvLy8gQnVmZmVyIGZvciBjb2xsZWN0aW5nIHRyYW5zbGF0ZWQgc3RhdGVtZW50cyBiZWxvbmdpbmcgdG8gdGhlIHNhbWUgc3dpdGNoCiAgLy8vIGNhc2UuCiAgTGlzdDxqcy5TdGF0ZW1lbnQ+IGN1cnJlbnRTdGF0ZW1lbnRCdWZmZXI7CgogIC8vIExhYmVscyB3aWxsIGJlY29tZSBjYXNlcyBpbiB0aGUgYmlnIHN3aXRjaCBleHByZXNzaW9uLCBhbmQgYGdvdG8gbGFiZWxgCiAgLy8gaXMgZXhwcmVzc2VkIGJ5IGFzc2lnbmluZyB0byB0aGUgc3dpdGNoIGtleSBbZ290b05hbWVdIGFuZCBicmVha2luZyBvdXQgb2YKICAvLyB0aGUgc3dpdGNoLgoKICBpbnQgbmV3TGFiZWwoW1N0cmluZyBjb21tZW50XSkgewogICAgaW50IHJlc3VsdCA9IF9jdXJyZW50TGFiZWw7CiAgICBfY3VycmVudExhYmVsKys7CiAgICBpZiAoY29tbWVudCAhPSBudWxsKSB7CiAgICAgIGxhYmVsQ29tbWVudHNbcmVzdWx0XSA9IGNvbW1lbnQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIEJlZ2lucyBvdXRwdXR0aW5nIHN0YXRlbWVudHMgdG8gYSBuZXcgYnVmZmVyIHdpdGggbGFiZWwgW2xhYmVsXS4KICAvLy8KICAvLy8gRWFjaCBidWZmZXIgZW5kcyB1cCBhcyBpdHMgb3duIGNhc2UgcGFydCBpbiB0aGUgYmlnIHN0YXRlLXN3aXRjaC4KICB2b2lkIGJlZ2luTGFiZWwoaW50IGxhYmVsKSB7CiAgICBhc3NlcnQoIWxhYmVsbGVkUGFydHMuY29udGFpbnNLZXkobGFiZWwpKTsKICAgIGN1cnJlbnRTdGF0ZW1lbnRCdWZmZXIgPSA8anMuU3RhdGVtZW50PltdOwogICAgbGFiZWxsZWRQYXJ0c1tsYWJlbF0gPSBjdXJyZW50U3RhdGVtZW50QnVmZmVyOwogICAgYWRkU3RhdGVtZW50KG5ldyBqcy5Db21tZW50KGxhYmVsQ29tbWVudHNbbGFiZWxdKSk7CiAgfQoKICAvLy8gUmV0dXJucyBhIHN0YXRlbWVudCBhc3NpZ25pbmcgdG8gdGhlIHZhcmlhYmxlIG5hbWVkIFtnb3RvTmFtZV0uCiAgLy8vIFRoaXMgc2hvdWxkIGJlIGZvbGxvd2VkIGJ5IGEgYnJlYWsgZm9yIHRoZSBnb3RvIHRvIGJlIGV4ZWN1dGVkLiBVc2UKICAvLy8gW2dvdG9XaXRoQnJlYWtdIG9yIFthZGRHb3RvXSBmb3IgdGhpcy4KICBqcy5TdGF0ZW1lbnQgc2V0R290b1ZhcmlhYmxlKGludCBsYWJlbCwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIHJldHVybiBuZXcganMuRXhwcmVzc2lvblN0YXRlbWVudChqcy5qcygnIyA9ICMnLAogICAgICAgIFtnb3RvLCBqcy5udW1iZXIobGFiZWwpXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICAvLy8gUmV0dXJucyBhIGJsb2NrIHRoYXQgaGFzIGEgZ290byB0byBbbGFiZWxdIGluY2x1ZGluZyB0aGUgYnJlYWsuCiAgLy8vCiAgLy8vIEFsc28gaW5zZXJ0cyBhIGNvbW1lbnQgZGVzY3JpYmluZyB0aGUgbGFiZWwgaWYgYXZhaWxhYmxlLgogIGpzLkJsb2NrIGdvdG9BbmRCcmVhayhpbnQgbGFiZWwsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBMaXN0PGpzLlN0YXRlbWVudD4gc3RhdGVtZW50cyA9IDxqcy5TdGF0ZW1lbnQ+W107CiAgICBpZiAobGFiZWxDb21tZW50cy5jb250YWluc0tleShsYWJlbCkpIHsKICAgICAgc3RhdGVtZW50cy5hZGQobmV3IGpzLkNvbW1lbnQoImdvdG8gJHtsYWJlbENvbW1lbnRzW2xhYmVsXX0iKSk7CiAgICB9CiAgICBzdGF0ZW1lbnRzLmFkZChzZXRHb3RvVmFyaWFibGUobGFiZWwsIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICBpZiAoaW5zaWRlVW50cmFuc2xhdGVkQnJlYWthYmxlKSB7CiAgICAgIGhhc0p1bXBUaG91Z2hPdXRlckxhYmVsID0gdHJ1ZTsKICAgICAgc3RhdGVtZW50cy5hZGQobmV3IGpzLkJyZWFrKG91dGVyTGFiZWxOYW1lKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSBlbHNlIHsKICAgICAgc3RhdGVtZW50cwogICAgICAgICAgLmFkZChuZXcganMuQnJlYWsobnVsbCkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgICByZXR1cm4gbmV3IGpzLkJsb2NrKHN0YXRlbWVudHMpOwogIH0KCiAgLy8vIEFkZHMgYSBnb3RvIHRvIFtsYWJlbF0gaW5jbHVkaW5nIHRoZSBicmVhay4KICAvLy8KICAvLy8gQWxzbyBpbnNlcnRzIGEgY29tbWVudCBkZXNjcmliaW5nIHRoZSBsYWJlbCBpZiBhdmFpbGFibGUuCiAgdm9pZCBhZGRHb3RvKGludCBsYWJlbCwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGlmIChsYWJlbENvbW1lbnRzLmNvbnRhaW5zS2V5KGxhYmVsKSkgewogICAgICBhZGRTdGF0ZW1lbnQobmV3IGpzLkNvbW1lbnQoImdvdG8gJHtsYWJlbENvbW1lbnRzW2xhYmVsXX0iKSk7CiAgICB9CiAgICBhZGRTdGF0ZW1lbnQoc2V0R290b1ZhcmlhYmxlKGxhYmVsLCBzb3VyY2VJbmZvcm1hdGlvbikpOwoKICAgIGFkZEJyZWFrKHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIHZvaWQgYWRkU3RhdGVtZW50KGpzLlN0YXRlbWVudCBub2RlKSB7CiAgICBjdXJyZW50U3RhdGVtZW50QnVmZmVyLmFkZChub2RlKTsKICB9CgogIHZvaWQgYWRkRXhwcmVzc2lvblN0YXRlbWVudChqcy5FeHByZXNzaW9uIG5vZGUpIHsKICAgIGFkZFN0YXRlbWVudChuZXcganMuRXhwcmVzc2lvblN0YXRlbWVudChub2RlKSk7CiAgfQoKICAvLy8gVHJ1ZSBpZiB0aGVyZSBpcyBhbiBhd2FpdCBvciB5aWVsZCBpbiBbbm9kZV0gb3Igc29tZSBzdWJleHByZXNzaW9uLgogIGJvb2wgc2hvdWxkVHJhbnNmb3JtKGpzLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIGFuYWx5c2lzLmhhc0F3YWl0T3JZaWVsZC5jb250YWlucyhub2RlKTsKICB9CgogIHZvaWQgdW5zdXBwb3J0ZWQoanMuTm9kZSBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiTm9kZSAkbm9kZSBjYW5ub3QgYmUgdHJhbnNmb3JtZWQgYnkgdGhlIGF3YWl0LXN5bmMgdHJhbnNmb3JtZXIiKTsKICB9CgogIHZvaWQgdW5yZWFjaGFibGUoanMuTm9kZSBub2RlKSB7CiAgICByZXBvcnRlci5pbnRlcm5hbEVycm9yKHNwYW5uYWJsZSwgIkludGVybmFsIGVycm9yLCB0cnlpbmcgdG8gdmlzaXQgJG5vZGUiKTsKICB9CgogIHZpc2l0U3RhdGVtZW50KGpzLlN0YXRlbWVudCBub2RlKSB7CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICB9CgogIC8vLyBWaXNpdHMgW25vZGVdIHRvIGVuc3VyZSBpdHMgc2lkZWVmZmVjdHMgYXJlIHBlcmZvcm1lZCwgYnV0IHRocm93aW5nIGF3YXkKICAvLy8gdGhlIHJlc3VsdC4KICAvLy8KICAvLy8gSWYgdGhlIHJldHVybiB2YWx1ZSBvZiB2aXNpdGluZyBbbm9kZV0gaXMgYW4gZXhwcmVzc2lvbiBndWFyYW50ZWVkIHRvIGhhdmUKICAvLy8gbm8gc2lkZSBlZmZlY3QsIGl0IGlzIGRyb3BwZWQuCiAgdm9pZCB2aXNpdEV4cHJlc3Npb25JZ25vcmVSZXN1bHQoanMuRXhwcmVzc2lvbiBub2RlKSB7CiAgICAvLyBUT0RPKDI4NzYzKTogUmVtb3ZlIGA8ZHluYW1pYz5gIHdoZW4gaXNzdWUgMjg3NjMgaXMgZml4ZWQuCiAgICBqcy5FeHByZXNzaW9uIHJlc3VsdCA9IG5vZGUuYWNjZXB0PGR5bmFtaWM+KHRoaXMpOwogICAgaWYgKCEocmVzdWx0IGlzIGpzLkxpdGVyYWwgfHwgcmVzdWx0IGlzIGpzLlZhcmlhYmxlVXNlKSkgewogICAgICBhZGRFeHByZXNzaW9uU3RhdGVtZW50KHJlc3VsdCk7CiAgICB9CiAgfQoKICBqcy5FeHByZXNzaW9uIHZpc2l0RXhwcmVzc2lvbihqcy5FeHByZXNzaW9uIG5vZGUpIHsKICAgIC8vIFRPRE8oMjg3NjMpOiBSZW1vdmUgYDxkeW5hbWljPmAgd2hlbiBpc3N1ZSAyODc2MyBpcyBmaXhlZC4KICAgIHJldHVybiBub2RlLmFjY2VwdDxkeW5hbWljPih0aGlzKTsKICB9CgogIC8vLyBDYWxscyBbZm5dIHdpdGggdGhlIHZhbHVlIG9mIGV2YWx1YXRpbmcgW25vZGUxXSBhbmQgW25vZGUyXS4KICAvLy8KICAvLy8gQm90aCBub2RlcyBhcmUgZXZhbHVhdGVkIGluIG9yZGVyLgogIC8vLwogIC8vLyBJZiBub2RlMiBtdXN0IGJlIHRyYW5zZm9ybWVkIChzZWUgW3Nob3VsZFRyYW5zZm9ybV0pLCB0aGVuIHRoZSBldmFsdWF0aW9uCiAgLy8vIG9mIG5vZGUxIGlzIGFkZGVkIHRvIHRoZSBjdXJyZW50IHN0YXRlbWVudC1saXN0IGFuZCB0aGUgcmVzdWx0IGlzIHN0b3JlZAogIC8vLyBpbiBhIHRlbXBvcmFyeSB2YXJpYWJsZS4gVGhlIGV2YWx1YXRpb24gb2Ygbm9kZTIgaXMgdGhlbiBmcmVlIHRvIGVtaXQKICAvLy8gc3RhdGVtZW50cyB3aXRob3V0IGFmZmVjdGluZyB0aGUgcmVzdWx0IG9mIG5vZGUxLgogIC8vLwogIC8vLyBUaGlzIGlzIG5lY2Vzc2FyeSwgYmVjYXVzZSBhd2FpdCBvciB5aWVsZCBleHByZXNzaW9ucyBoYXZlIHRvIGVtaXQKICAvLy8gc3RhdGVtZW50cywgYW5kIHRoZXNlIHN0YXRlbWVudHMgY291bGQgYWZmZWN0IHRoZSB2YWx1ZSBvZiBub2RlMS4KICAvLy8KICAvLy8gRm9yIGV4YW1wbGU6CiAgLy8vCiAgLy8vIC0gX3N0b3JlSWZOZWNlc3Nhcnkoc29tZUxpdGVyYWwpIHJldHVybnMgc29tZUxpdGVyYWwuCiAgLy8vIC0gX3N0b3JlSWZOZWNlc3Nhcnkoc29tZVZhcmlhYmxlKQogIC8vLyAgIGluc2VydHM6IHZhciB0ZW1wWCA9IHNvbWVWYXJpYWJsZQogIC8vLyAgIHJldHVybnM6IHRlbXBYCiAgLy8vICAgd2hlcmUgdGVtcFggaXMgYSBmcmVzaCB0ZW1wb3JhcnkgdmFyaWFibGUuCiAganMuRXhwcmVzc2lvbiBfc3RvcmVJZk5lY2Vzc2FyeShqcy5FeHByZXNzaW9uIHJlc3VsdCkgewogICAgLy8gTm90ZSB0aGF0IFJlZ0V4ZXMsIGpzLkFycmF5SW5pdGlhbGl6ZXIgYW5kIGpzLk9iamVjdEluaXRpYWxpemVyIGFyZSBub3QKICAgIC8vIFtqcy5MaXRlcmFsXXMuCiAgICBpZiAocmVzdWx0IGlzIGpzLkxpdGVyYWwpIHJldHVybiByZXN1bHQ7CiAgICBpZiAocmVzdWx0IGlzIGpzLlZhcmlhYmxlVXNlKSB7CiAgICAgIGlmIChyZXN1bHQubmFtZSA9PSBzZWxmTmFtZSkgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICBqcy5FeHByZXNzaW9uIHRlbXBWYXIgPSB1c2VUZW1wVmFyKGFsbG9jYXRlVGVtcFZhcigpKTsKICAgIGFkZFN0YXRlbWVudChqcy5qcy5zdGF0ZW1lbnQoJyMgPSAjOycsIFt0ZW1wVmFyLCByZXN1bHRdKSk7CiAgICByZXR1cm4gdGVtcFZhcjsKICB9CgogIC8vIFRPRE8oc2lndXJkbSk6IFRoaXMgaXMgb2Jzb2xldGUgLSBhbGwgY2FsbHMgdXNlIHN0b3JlOiBmYWxzZS4gUmVwbGFjZSB3aXRoCiAgLy8gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwogIHdpdGhFeHByZXNzaW9uKGpzLkV4cHJlc3Npb24gbm9kZSwgZm4oanMuRXhwcmVzc2lvbiByZXN1bHQpLCB7Ym9vbCBzdG9yZX0pIHsKICAgIGludCBvbGRUZW1wVmFySW5kZXggPSBjdXJyZW50VGVtcFZhckluZGV4OwogICAganMuRXhwcmVzc2lvbiB2aXNpdGVkID0gdmlzaXRFeHByZXNzaW9uKG5vZGUpOwogICAgaWYgKHN0b3JlKSB7CiAgICAgIHZpc2l0ZWQgPSBfc3RvcmVJZk5lY2Vzc2FyeSh2aXNpdGVkKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBmbih2aXNpdGVkKTsKICAgIGN1cnJlbnRUZW1wVmFySW5kZXggPSBvbGRUZW1wVmFySW5kZXg7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIENhbGxzIFtmbl0gd2l0aCB0aGUgcmVzdWx0IG9mIGV2YWx1YXRpbmcgW25vZGVdLiBUYWtpbmcgc3BlY2lhbCBjYXJlIG9mCiAgLy8vIHByb3BlcnR5IGFjY2Vzc2VzLgogIC8vLwogIC8vLyBJZiBbc3RvcmVdIGlzIHRydWUgdGhlIHJlc3VsdCBvZiBldmFsdWF0aW5nIFtub2RlXSBpcyBzdG9yZWQgaW4gYQogIC8vLyB0ZW1wb3JhcnkuCiAgLy8vCiAgLy8vIFdlIGNhbm5vdCByZXdyaXRlIGA8cmVjZWl2ZXI+Lm0oKWAgdG86CiAgLy8vICAgICB0ZW1wID0gPHJlY2VpdmVyPi5tOwogIC8vLyAgICAgdGVtcCgpOwogIC8vLyBCZWNhdXNlIHRoaXMgbGVhdmVzIGB0aGlzYCB1bmJvdW5kIGluIHRoZSBjYWxsLiBCdXQgYmVjYXVzZSBvZiBkYXJ0CiAgLy8vIGV2YWx1YXRpb24gb3JkZXIgd2UgY2FuIHdyaXRlOgogIC8vLyAgICAgdGVtcCA9IDxyZWNlaXZlcj47CiAgLy8vICAgICB0ZW1wLm0oKTsKICB3aXRoQ2FsbFRhcmdldEV4cHJlc3Npb24oanMuRXhwcmVzc2lvbiBub2RlLCBmbihqcy5FeHByZXNzaW9uIHJlc3VsdCksCiAgICAgIHtib29sIHN0b3JlfSkgewogICAgaW50IG9sZFRlbXBWYXJJbmRleCA9IGN1cnJlbnRUZW1wVmFySW5kZXg7CiAgICBqcy5FeHByZXNzaW9uIHZpc2l0ZWQgPSB2aXNpdEV4cHJlc3Npb24obm9kZSk7CiAgICBqcy5FeHByZXNzaW9uIHNlbGVjdG9yOwogICAganMuRXhwcmVzc2lvbiBzdG9yZWRJZk5lZWRlZDsKICAgIGlmIChzdG9yZSkgewogICAgICBpZiAodmlzaXRlZCBpcyBqcy5Qcm9wZXJ0eUFjY2VzcykgewogICAgICAgIGpzLlByb3BlcnR5QWNjZXNzIHByb3BlcnR5QWNjZXNzID0gdmlzaXRlZDsKICAgICAgICBzZWxlY3RvciA9IHByb3BlcnR5QWNjZXNzLnNlbGVjdG9yOwogICAgICAgIHZpc2l0ZWQgPSBwcm9wZXJ0eUFjY2Vzcy5yZWNlaXZlcjsKICAgICAgfQogICAgICBzdG9yZWRJZk5lZWRlZCA9IF9zdG9yZUlmTmVjZXNzYXJ5KHZpc2l0ZWQpOwogICAgfSBlbHNlIHsKICAgICAgc3RvcmVkSWZOZWVkZWQgPSB2aXNpdGVkOwogICAgfQogICAganMuRXhwcmVzc2lvbiByZXN1bHQ7CiAgICBpZiAoc2VsZWN0b3IgPT0gbnVsbCkgewogICAgICByZXN1bHQgPSBmbihzdG9yZWRJZk5lZWRlZCk7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQgPSBmbihuZXcganMuUHJvcGVydHlBY2Nlc3Moc3RvcmVkSWZOZWVkZWQsIHNlbGVjdG9yKSk7CiAgICB9CiAgICBjdXJyZW50VGVtcFZhckluZGV4ID0gb2xkVGVtcFZhckluZGV4OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBDYWxscyBbZm5dIHdpdGggdGhlIHZhbHVlIG9mIGV2YWx1YXRpbmcgW25vZGUxXSBhbmQgW25vZGUyXS4KICAvLy8KICAvLy8gSWYgYHNob3VsZFRyYW5zZm9ybShub2RlMilgIHRoZSBmaXJzdCBleHByZXNzaW9uIGlzIHN0b3JlZCBpbiBhIHRlbXBvcmFyeQogIC8vLyB2YXJpYWJsZS4KICAvLy8KICAvLy8gVGhpcyBpcyBiZWNhdXNlIG5vZGUxIG11c3QgYmUgZXZhbHVhdGVkIGJlZm9yZSB2aXNpdGluZyBub2RlMiwKICAvLy8gYmVjYXVzZSB0aGUgZXZhbHVhdGlvbiBvZiBhbiBhd2FpdCBvciB5aWVsZCBjYW5ub3QgYmUgZXhwcmVzc2VkIGFzCiAgLy8vIGFuIGV4cHJlc3Npb24sIHZpc2l0aW5nIG5vZGUyIGl0IHdpbGwgb3V0cHV0IHN0YXRlbWVudHMgdGhhdAogIC8vLyBtaWdodCBoYXZlIGFuIGluZmx1ZW5jZSBvbiB0aGUgdmFsdWUgb2Ygbm9kZTEuCiAgd2l0aEV4cHJlc3Npb24yKGpzLkV4cHJlc3Npb24gbm9kZTEsIGpzLkV4cHJlc3Npb24gbm9kZTIsCiAgICAgIGZuKGpzLkV4cHJlc3Npb24gcmVzdWx0MSwganMuRXhwcmVzc2lvbiByZXN1bHQyKSkgewogICAgaW50IG9sZFRlbXBWYXJJbmRleCA9IGN1cnJlbnRUZW1wVmFySW5kZXg7CiAgICBqcy5FeHByZXNzaW9uIHIxID0gdmlzaXRFeHByZXNzaW9uKG5vZGUxKTsKICAgIGlmIChzaG91bGRUcmFuc2Zvcm0obm9kZTIpKSB7CiAgICAgIHIxID0gX3N0b3JlSWZOZWNlc3NhcnkocjEpOwogICAgfQogICAganMuRXhwcmVzc2lvbiByMiA9IHZpc2l0RXhwcmVzc2lvbihub2RlMik7CiAgICB2YXIgcmVzdWx0ID0gZm4ocjEsIHIyKTsKICAgIGN1cnJlbnRUZW1wVmFySW5kZXggPSBvbGRUZW1wVmFySW5kZXg7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIENhbGxzIFtmbl0gd2l0aCB0aGUgdmFsdWUgb2YgZXZhbHVhdGluZyBhbGwgW25vZGVzXS4KICAvLy8KICAvLy8gQWxsIHJlc3VsdHMgYmVmb3JlIHRoZSBsYXN0IG5vZGUgd2hlcmUgYHNob3VsZFRyYW5zZm9ybShub2RlKWAgYXJlIHN0b3JlZAogIC8vLyBpbiB0ZW1wb3JhcnkgdmFyaWFibGVzLgogIC8vLwogIC8vLyBTZWUgbW9yZSBleHBsYW5hdGlvbiBvbiBbd2l0aEV4cHJlc3Npb24yXS4KICAvLy8KICAvLy8gSWYgYW55IG9mIHRoZSBub2RlcyBhcmUgbnVsbCwgdGhleSBhcmUgaWdub3JlZCwgYW5kIGEgbnVsbCBpcyBwYXNzZWQgdG8KICAvLy8gW2ZuXSBpbiB0aGF0IHBsYWNlLgogIHdpdGhFeHByZXNzaW9ucyhMaXN0PGpzLkV4cHJlc3Npb24+IG5vZGVzLCBmbihMaXN0PGpzLkV4cHJlc3Npb24+IHJlc3VsdHMpKSB7CiAgICBpbnQgb2xkVGVtcFZhckluZGV4ID0gY3VycmVudFRlbXBWYXJJbmRleDsKICAgIC8vIEZpbmQgbGFzdCBvY2N1cmVuY2Ugb2YgYSAndHJhbnNmb3JtJyBleHByZXNzaW9uIGluIFtub2Rlc10uCiAgICAvLyBBbGwgZXhwcmVzc2lvbnMgYmVmb3JlIHRoYXQgbXVzdCBiZSBzdG9yZWQgaW4gdGVtcC12YXJzLgogICAgaW50IGxhc3RUcmFuc2Zvcm1JbmRleCA9IDA7CiAgICBmb3IgKGludCBpID0gbm9kZXMubGVuZ3RoIC0gMTsgaSA+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/IGZhbHNlIDogdmlzaXQobm9kZS5jYXRjaFBhcnQpOwogICAgYm9vbCBmaW5hbGx5UGFydCA9CiAgICAgICAgKG5vZGUuZmluYWxseVBhcnQgPT0gbnVsbCkgPyBmYWxzZSA6IHZpc2l0KG5vZGUuZmluYWxseVBhcnQpOwogICAgaWYgKGZpbmFsbHlQYXJ0ICE9IG51bGwpIGhhc0ZpbmFsbHkgPSB0cnVlOwogICAgcmV0dXJuIGJvZHkgfHwgY2F0Y2hQYXJ0IHx8IGZpbmFsbHlQYXJ0OwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oanMuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICB1c2VkTmFtZXMuYWRkKG5vZGUubmFtZSk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoanMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Qgbm9kZSkgewogICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAgIGZvciAoanMuVmFyaWFibGVJbml0aWFsaXphdGlvbiBpbml0IGluIG5vZGUuZGVjbGFyYXRpb25zKSB7CiAgICAgIGlmICh2aXNpdChpbml0KSkgcmVzdWx0ID0gdHJ1ZTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbihqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9u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ZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDptYXRoJyBhcyBtYXRoOwppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicgc2hvdyBRdWV1ZTsKCmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV91bnN0YWJsZS9kYXJ0MmpzLmRhcnQnIHNob3cgTGluazsKCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vY29kZWdlbi5kYXJ0JyBzaG93IENvZGVnZW5SZWdpc3RyeTsKaW1wb3J0ICcuLi9jb21tb24vdGFza3MuZGFydCcgc2hvdyBNZWFzdXJlciwgQ29tcGlsZXJUYXNrOwppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgSkNvbW1vbkVsZW1lbnRzOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2p1bXBzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvYmFja2VuZC5kYXJ0JyBzaG93IENvZGVnZW5JbnB1dHM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9jaGVja2VkX21vZGVfaGVscGVycy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCcgc2hvdyBNb2R1bGFyTmFtZXI7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19uZXcuZGFydCcgc2hvdyBSZWNpcGVFbmNvZGVyOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIvY29kZV9lbWl0dGVyX3Rhc2suZGFydCcgc2hvdyBNb2R1bGFyRW1pdHRlcjsKaW1wb3J0ICcuLi9qc19tb2RlbC9lbGVtZW50cy5kYXJ0JyBzaG93IEpHZW5lcmF0b3JCb2R5OwppbXBvcnQgJy4uL2pzX21vZGVsL3R5cGVfcmVjaXBlLmRhcnQnIHNob3cgVHlwZUV4cHJlc3Npb25SZWNpcGU7CmltcG9ydCAnLi4vbmF0aXZlL2JlaGF2aW9yLmRhcnQnOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdHJhY2VyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnIHNob3cgQ2FsbFN0cnVjdHVyZTsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJy4uL3VuaXZlcnNlL3VzZS5kYXJ0JyBzaG93IENvbnN0YW50VXNlLCBEeW5hbWljVXNlLCBTdGF0aWNVc2UsIFR5cGVVc2U7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CmltcG9ydCAnY29kZWdlbl9oZWxwZXJzLmRhcnQnOwppbXBvcnQgJ25vZGVzLmRhcnQnOwppbXBvcnQgJ3ZhcmlhYmxlX2FsbG9jYXRvci5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIENvZGVnZW5QaGFzZSB7CiAgU3RyaW5nIGdldCBuYW1lID0+ICckcnVudGltZVR5cGUnOwogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpOwp9CgpjbGFzcyBTc2FDb2RlR2VuZXJhdG9yVGFzayBleHRlbmRzIENvbXBpbGVyVGFzayB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgc291cmNlSW5mb3JtYXRpb25TdHJhdGVneTsKCiAgU3NhQ29kZUdlbmVyYXRvclRhc2soCiAgICAgIE1lYXN1cmVyIG1lYXN1cmVyLCB0aGlzLl9vcHRpb25zLCB0aGlzLnNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kpCiAgICAgIDogc3VwZXIobWVhc3VyZXIpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ1NTQSBjb2RlIGdlbmVyYXRvcic7CgogIGpzLkZ1biBidWlsZEphdmFTY3JpcHRGdW5jdGlvbihib29sIG5lZWRzQXN5bmNSZXdyaXRlLCBGdW5jdGlvbkVudGl0eSBlbGVtZW50LAogICAgICBMaXN0PGpzLlBhcmFtZXRlcj4gcGFyYW1ldGVycywganMuQmxvY2sgYm9keSkgewogICAganMuRnVuIGZpbmlzaChqcy5Bc3luY01vZGlmaWVyIGFzeW5jTW9kaWZpZXIpIHsKICAgICAgcmV0dXJuIG5ldyBqcy5GdW4ocGFyYW1ldGVycywgYm9keSwgYXN5bmNNb2RpZmllcjogYXN5bmNNb2RpZmllcikKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb25TdHJhdGVneQogICAgICAgICAgICAgIC5jcmVhdGVCdWlsZGVyRm9yQ29udGV4dChlbGVtZW50KQogICAgICAgICAgICAgIC5idWlsZERlY2xhcmF0aW9uKGVsZW1lbnQpKTsKICAgIH0KCiAgICBpZiAobmVlZHNBc3luY1Jld3JpdGUpIHsKICAgICAgcmV0dXJuIGZpbmlzaChlbGVtZW50LmFzeW5jTWFya2VyLmlzQXN5bmMKICAgICAgICAgID8gKGVsZW1lbnQuYXN5bmNNYXJrZXIuaXNZaWVsZGluZwogICAgICAgICAgICAgID8ganMuQXN5bmNNb2RpZmllci5hc3luY1N0YXIKICAgICAgICAgICAgICA6IGpzLkFzeW5jTW9kaWZpZXIuYXN5bmMpCiAgICAgICAgICA6IChlbGVtZW50LmFzeW5jTWFya2VyLmlzWWllbGRpbmcKICAgICAgICAgICAgICA/IGpzLkFzeW5jTW9kaWZpZXIuc3luY1N0YXIKICAgICAgICAgICAgICA6IGpzLkFzeW5jTW9kaWZpZXIuc3luYykpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZpbmlzaChqcy5Bc3luY01vZGlmaWVyLnN5bmMpOwogICAgfQogIH0KCiAganMuRXhwcmVzc2lvbiBnZW5lcmF0ZUNvZGUoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIENvZGVnZW5SZWdpc3RyeSByZWdpc3RyeSwKICAgICAgTW9kdWxhck5hbWVyIG5hbWVyLAogICAgICBNb2R1bGFyRW1pdHRlciBlbWl0dGVyKSB7CiAgICBpZiAobWVtYmVyLmlzRmllbGQpIHsKICAgICAgcmV0dXJuIGdlbmVyYXRlTGF6eUluaXRpYWxpemVyKAogICAgICAgICAgbWVtYmVyLCBncmFwaCwgY29kZWdlbiwgY2xvc2VkV29ybGQsIHJlZ2lzdHJ5LCBuYW1lciwgZW1pdHRlcik7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZ2VuZXJhdGVNZXRob2QoCiAgICAgICAgICBtZW1iZXIsIGdyYXBoLCBjb2RlZ2VuLCBjbG9zZWRXb3JsZCwgcmVnaXN0cnksIG5hbWVyLCBlbWl0dGVyKTsKICAgIH0KICB9CgogIGpzLkV4cHJlc3Npb24gZ2VuZXJhdGVMYXp5SW5pdGlhbGl6ZXIoCiAgICAgIEZpZWxkRW50aXR5IGZpZWxkLAogICAgICBIR3JhcGggZ3JhcGgsCiAgICAgIENvZGVnZW5JbnB1dHMgY29kZWdlbiwKICAgICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkLAogICAgICBDb2RlZ2VuUmVnaXN0cnkgcmVnaXN0cnksCiAgICAgIE1vZHVsYXJOYW1lciBuYW1lciwKICAgICAgTW9kdWxhckVtaXR0ZXIgZW1pdHRlcikgewogICAgcmV0dXJuIG1lYXN1cmUoKCkgewogICAgICBjb2RlZ2VuLnRyYWNlci50cmFjZUdyYXBoKCJjb2RlZ2VuIiwgZ3JhcGgpOwogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kKICAgICAgICAgIC5jcmVhdGVCdWlsZGVyRm9yQ29udGV4dChmaWVsZCkKICAgICAgICAgIC5idWlsZERlY2xhcmF0aW9uKGZpZWxkKTsKICAgICAgU3NhQ29kZUdlbmVyYXRvciBjb2RlR2VuZXJhdG9yID0gbmV3IFNzYUNvZGVHZW5lcmF0b3IoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgX29wdGlvbnMsCiAgICAgICAgICBlbWl0dGVyLAogICAgICAgICAgY29kZWdlbi5jaGVja2VkTW9kZUhlbHBlcnMsCiAgICAgICAgICBjb2RlZ2VuLnJ0aVN1YnN0aXR1dGlvbnMsCiAgICAgICAgICBjb2RlZ2VuLnJ0aUVuY29kZXIsCiAgICAgICAgICBjb2RlZ2VuLnJ0aVJlY2lwZUVuY29kZXIsCiAgICAgICAgICBuYW1lciwKICAgICAgICAgIGNvZGVnZW4udHJhY2VyLAogICAgICAgICAgY2xvc2VkV29ybGQsCiAgICAgICAgICByZWdpc3RyeSk7CiAgICAgIGNvZGVHZW5lcmF0b3IudmlzaXRHcmFwaChncmFwaCk7CiAgICAgIHJldHVybiBuZXcganMuRnVuKGNvZGVHZW5lcmF0b3IucGFyYW1ldGVycywgY29kZUdlbmVyYXRvci5ib2R5KQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9KTsKICB9CgogIGpzLkV4cHJlc3Npb24gZ2VuZXJhdGVNZXRob2QoCiAgICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCwKICAgICAgSEdyYXBoIGdyYXBoLAogICAgICBDb2RlZ2VuSW5wdXRzIGNvZGVnZW4sCiAgICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwKICAgICAgQ29kZWdlblJlZ2lzdHJ5IHJlZ2lzdHJ5LAogICAgICBNb2R1bGFyTmFtZXIgbmFtZXIsCiAgICAgIE1vZHVsYXJFbWl0dGVyIGVtaXR0ZXIpIHsKICAgIHJldHVybiBtZWFzdXJlKCgpIHsKICAgICAgaWYgKG1ldGhvZC5hc3luY01hcmtlciAhPSBBc3luY01hcmtlci5TWU5DKSB7CiAgICAgICAgcmVnaXN0cnkucmVnaXN0ZXJBc3luY01hcmtlcihtZXRob2QuYXN5bmNNYXJrZXIpOwogICAgICB9CiAgICAgIFNzYUNvZGVHZW5lcmF0b3IgY29kZUdlbmVyYXRvciA9IG5ldyBTc2FDb2RlR2VuZXJhdG9yKAogICAgICAgICAgdGhpcywKICAgICAgICAgIF9vcHRpb25zLAogICAgICAgICAgZW1pdHRlciwKICAgICAgICAgIGNvZGVnZW4uY2hlY2tlZE1vZGVIZWxwZXJzLAogICAgICAgICAgY29kZWdlbi5ydGlTdWJzdGl0dXRpb25zLAogICAgICAgICAgY29kZWdlbi5ydGlFbmNvZGVyLAogICAgICAgICAgY29kZWdlbi5ydGlSZWNpcGVFbmNvZGVyLAogICAgICAgICAgbmFtZXIsCiAgICAgICAgICBjb2RlZ2VuLnRyYWNlciwKICAgICAgICAgIGNsb3NlZFdvcmxkLAogICAgICAgICAgcmVnaXN0cnkpOwogICAgICBjb2RlR2VuZXJhdG9yLnZpc2l0R3JhcGgoZ3JhcGgpOwogICAgICBjb2RlZ2VuLnRyYWNlci50cmFjZUdyYXBoKCJjb2RlZ2VuIiwgZ3JhcGgpOwogICAgICByZXR1cm4gYnVpbGRKYXZhU2NyaXB0RnVuY3Rpb24oZ3JhcGgubmVlZHNBc3luY1Jld3JpdGUsIG1ldGhvZCwKICAgICAgICAgIGNvZGVHZW5lcmF0b3IucGFyYW1ldGVycywgY29kZUdlbmVyYXRvci5ib2R5KTsKICAgIH0pOwogIH0KfQoKY2xhc3MgU3NhQ29kZUdlbmVyYXRvciBpbXBsZW1lbnRzIEhWaXNpdG9yLCBIQmxvY2tJbmZvcm1hdGlvblZpc2l0b3IgewogIC8vLyBSZXR1cm5lZCBieSBbZXhwcmVzc2lvblR5cGVdIHRvIHRlbGwgaG93IGNvZGUgY2FuIGJlIGdlbmVyYXRlZCBmb3IKICAvLy8gYSBzdWJncmFwaC4KICAvLy8gLSBbVFlQRV9TVEFURU1FTlRdIG1lYW5zIHRoYXQgdGhlIGdyYXBoIG11c3QgYmUgZ2VuZXJhdGVkIGFzIGEgc3RhdGVtZW50LAogIC8vLyB3aGljaCBpcyBhbHdheXMgcG9zc2libGUuCiAgLy8vIC0gW1RZUEVfRVhQUkVTU0lPTl0gbWVhbnMgdGhhdCB0aGUgZ3JhcGggY2FuIGJlIGdlbmVyYXRlZCBhcyBhbiBleHByZXNzaW9uLAogIC8vLyBvciBwb3NzaWJseSBzZXZlcmFsIGNvbW1hLXNlcGFyYXRlZCBleHByZXNzaW9ucy4KICAvLy8gLSBbVFlQRV9ERUNMQVJBVElPTl0gbWVhbnMgdGhhdCB0aGUgZ3JhcGggY2FuIGJlIGdlbmVyYXRlZCBhcyBhbgogIC8vLyBleHByZXNzaW9uLCBhbmQgdGhhdCBpdCBvbmx5IGdlbmVyYXRlcyBleHByZXNzaW9ucyBvZiB0aGUgZm9ybQogIC8vLyAgIHZhcmlhYmxlID0gZXhwcmVzc2lvbgogIC8vLyB3aGljaCBhcmUgYWxzbyB2YWxpZCBhcyBwYXJ0cyBvZiBhICJ2YXIiIGRlY2xhcmF0aW9uLgogIHN0YXRpYyBjb25zdCBpbnQgVFlQRV9TVEFURU1FTlQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgVFlQRV9FWFBSRVNTSU9OID0gMTsKICBzdGF0aWMgY29uc3QgaW50IFRZUEVfREVDTEFSQVRJT04gPSAyOwoKICAvLy8gV2hldGhlciB3ZSBhcmUgY3VycmVudGx5IGdlbmVyYXRpbmcgZXhwcmVzc2lvbnMgaW5zdGVhZCBvZiBzdGF0ZW1lbnRzLgogIC8vLyBUaGlzIGluY2x1ZGVzIGRlY2xhcmF0aW9ucywgd2hpY2ggYXJlIGdlbmVyYXRlZCBhcyBleHByZXNzaW9ucy4KICBib29sIGlzR2VuZXJhdGluZ0V4cHJlc3Npb24gPSBmYWxzZTsKCiAgZmluYWwgQ29tcGlsZXJUYXNrIF9jb2RlZ2VuVGFzazsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgTW9kdWxhckVtaXR0ZXIgX2VtaXR0ZXI7CiAgZmluYWwgQ2hlY2tlZE1vZGVIZWxwZXJzIF9jaGVja2VkTW9kZUhlbHBlcnM7CiAgZmluYWwgUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyBfcnRpU3Vic3RpdHV0aW9uczsKICBmaW5hbCBSdW50aW1lVHlwZXNFbmNvZGVyIF9ydGlFbmNvZGVyOwogIGZpbmFsIFJlY2lwZUVuY29kZXIgX3J0aVJlY2lwZUVuY29kZXI7CiAgZmluYWwgTW9kdWxhck5hbWVyIF9uYW1lcjsKICBmaW5hbCBUcmFjZXIgX3RyYWNlcjsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIENvZGVnZW5SZWdpc3RyeSBfcmVnaXN0cnk7CgogIGZpbmFsIFNldDxISW5zdHJ1Y3Rpb24+IGdlbmVyYXRlQXRVc2VTaXRlOwogIGZpbmFsIFNldDxISW5zdHJ1Y3Rpb24+IGNvbnRyb2xGbG93T3BlcmF0b3JzOwogIGZpbmFsIFNldDxKdW1wVGFyZ2V0PiBicmVha0FjdGlvbjsKICBmaW5hbCBTZXQ8TGFiZWxEZWZpbml0aW9uPiBjb250aW51ZUFjdGlvbjsKICBmaW5hbCBTZXQ8SnVtcFRhcmdldD4gaW1wbGljaXRDb250aW51ZUFjdGlvbjsKICBmaW5hbCBMaXN0PGpzLlBhcmFtZXRlcj4gcGFyYW1ldGVyczsKCiAganMuQmxvY2sgY3VycmVudENvbnRhaW5lcjsKICBqcy5CbG9jayBnZXQgYm9keSA9PiBjdXJyZW50Q29udGFpbmVyOwogIExpc3Q8anMuRXhwcmVzc2lvbj4gZXhwcmVzc2lvblN0YWNrOwogIExpc3Q8anMuQmxvY2s+IG9sZENvbnRhaW5lclN0YWNrOwoKICAvLy8gQ29udGFpbnMgdGhlIG5hbWVzIG9mIHRoZSBpbnN0cnVjdGlvbnMsIGFzIHdlbGwgYXMgdGhlIHBhcmFsbGVsCiAgLy8vIGNvcGllcyB0byBwZXJmb3JtIG9uIGJsb2NrIHRyYW5zaXRpb25pbmcuCiAgVmFyaWFibGVOYW1lcyB2YXJpYWJsZU5hbWVzOwoKICAvLy8gYHRydWVgIHdoZW4gd2UgbmVlZCB0byBnZW5lcmF0ZSBhIGB2YXJgIGRlY2xhcmF0aW9uIGF0IGZ1bmN0aW9uIGVudHJ5LAogIC8vLyBgZmFsc2VgIGlmIHdlIGNhbiBnZW5lcmF0ZSBhIGB2YXJgIGRlY2xhcmF0aW9uIGF0IGZpcnN0IGFzc2lnbm1lbnQgaW4gdGhlCiAgLy8vIG1pZGRsZSBvZiB0aGUgZnVuY3Rpb24uCiAgYm9vbCBzaG91bGRHcm91cFZhckRlY2xhcmF0aW9ucyA9IGZhbHNlOwoKICAvLy8gV2hpbGUgZ2VuZXJhdGluZyBleHByZXNzaW9ucywgd2UgY2FuJ3QgaW5zZXJ0IHZhcmlhYmxlIGRlY2xhcmF0aW9ucy4KICAvLy8gSW5zdGVhZCB3ZSBkZWNsYXJlIHRoZW0gYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbi4gIFdoZW4gbWluaWZ5aW5nCiAgLy8vIHdlIGRvIHRoaXMgbW9zdCBvZiB0aGUgdGltZSwgYmVjYXVzZSBpdCByZWR1Y2VzIHRoZSBzaXplIHVubGVzcyB0aGVyZQogIC8vLyBpcyBvbmx5IG9uZSB2YXJpYWJsZS4KICBmaW5hbCBTZXQ8U3RyaW5nPiBjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9uczsKCiAgLy8vIFNldCBvZiB2YXJpYWJsZXMgYW5kIHBhcmFtZXRlcnMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBkZWNsYXJlZC4KICBmaW5hbCBTZXQ8U3RyaW5nPiBkZWNsYXJlZExvY2FsczsKCiAgSEdyYXBoIGN1cnJlbnRHcmFwaDsKCiAgLy8gUmVjb3JkcyBhIGJsb2NrLWluZm9ybWF0aW9uIHRoYXQgaXMgYmVpbmcgaGFuZGxlZCBzcGVjaWFsbHkuCiAgLy8gVXNlZCB0byBicmVhayBiYWQgcmVjdXJzaW9uLgogIEhCbG9ja0luZm9ybWF0aW9uIGN1cnJlbnRCbG9ja0luZm9ybWF0aW9uOwogIC8vIFRoZSBzdWJncmFwaCBpcyB1c2VkIHRvIGRlbGltaXQgdHJhdmVyc2FsIGZvciBzb21lIGNvbnN0cnVjdGlvbnMsIGUuZy4sCiAgLy8gaWYgYnJhbmNoZXMuCiAgU3ViR3JhcGggc3ViR3JhcGg7CgogIC8vIFBlbmRpbmcgYmxvY2tzIHRoYW4gbmVlZCB0byBiZSB2aXNpdGVkIGFzIHBhcnQgb2YgY3VycmVudCBzdWJncmFwaC4KICBRdWV1ZTxIQmFzaWNCbG9jaz4gYmxvY2tRdWV1ZTsKCiAgU3NhQ29kZUdlbmVyYXRvcigKICAgICAgdGhpcy5fY29kZWdlblRhc2ssCiAgICAgIHRoaXMuX29wdGlvbnMsCiAgICAgIHRoaXMuX2VtaXR0ZXIsCiAgICAgIHRoaXMuX2NoZWNrZWRNb2RlSGVscGVycywKICAgICAgdGhpcy5fcnRpU3Vic3RpdHV0aW9ucywKICAgICAgdGhpcy5fcnRpRW5jb2RlciwKICAgICAgdGhpcy5fcnRpUmVjaXBlRW5jb2RlciwKICAgICAgdGhpcy5fbmFtZXIsCiAgICAgIHRoaXMuX3RyYWNlciwKICAgICAgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuX3JlZ2lzdHJ5LAogICAgICB7U291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb259KQogICAgICA6IGRlY2xhcmVkTG9jYWxzID0gbmV3IFNldDxTdHJpbmc+KCksCiAgICAgICAgY29sbGVjdGVkVmFyaWFibGVEZWNsYXJhdGlvbnMgPSBuZXcgU2V0PFN0cmluZz4oKSwKICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gbmV3IGpzLkJsb2NrLmVtcHR5KCksCiAgICAgICAgcGFyYW1ldGVycyA9IDxqcy5QYXJhbWV0ZXI+W10sCiAgICAgICAgZXhwcmVzc2lvblN0YWNrID0gPGpzLkV4cHJlc3Npb24+W10sCiAgICAgICAgb2xkQ29udGFpbmVyU3RhY2sgPSA8anMuQmxvY2s+W10sCiAgICAgICAgZ2VuZXJhdGVBdFVzZVNpdGUgPSBuZXcgU2V0PEhJbnN0cnVjdGlvbj4oKSwKICAgICAgICBjb250cm9sRmxvd09wZXJhdG9ycyA9IG5ldyBTZXQ8SEluc3RydWN0aW9uPigpLAogICAgICAgIGJyZWFrQWN0aW9uID0gbmV3IFNldDxKdW1wVGFyZ2V0PigpLAogICAgICAgIGNvbnRpbnVlQWN0aW9uID0gbmV3IFNldDxMYWJlbERlZmluaXRpb24+KCksCiAgICAgICAgaW1wbGljaXRDb250aW51ZUFjdGlvbiA9IG5ldyBTZXQ8SnVtcFRhcmdldD4oKTsKCiAgSkNvbW1vbkVsZW1lbnRzIGdldCBfY29tbW9uRWxlbWVudHMgPT4gX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwoKICBOYXRpdmVEYXRhIGdldCBfbmF0aXZlRGF0YSA9PiBfY2xvc2VkV29ybGQubmF0aXZlRGF0YTsKCiAgSW50ZXJjZXB0b3JEYXRhIGdldCBfaW50ZXJjZXB0b3JEYXRhID0+IF9jbG9zZWRXb3JsZC5pbnRlcmNlcHRvckRhdGE7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIF9jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBib29sIGlzR2VuZXJhdGVBdFVzZVNpdGUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICByZXR1cm4gZ2VuZXJhdGVBdFVzZVNpdGUuY29udGFpbnMoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgYm9vbCBoYXNOb25CaXRPcFVzZXIoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBTZXQ8SFBoaT4gcGhpU2V0KSB7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIGluc3RydWN0aW9uLnVzZWRCeSkgewogICAgICBpZiAodXNlciBpcyBIUGhpKSB7CiAgICAgICAgaWYgKCFwaGlTZXQuY29udGFpbnModXNlcikpIHsKICAgICAgICAgIHBoaVNldC5hZGQodXNlcik7CiAgICAgICAgICBpZiAoaGFzTm9uQml0T3BVc2VyKHVzZXIsIHBoaVNldCkpIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh1c2VyIGlzISBIQml0Tm90ICYmIHVzZXIgaXMhIEhCaW5hcnlCaXRPcCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYml0cyBvY2N1cGllZCBieSB0aGUgdmFsdWUgY29tcHV0ZWQgYnkgW2luc3RydWN0aW9uXS4KICAvLyBSZXR1cm5zIGAzMmAgaWYgdGhlIHZhbHVlIGlzIG5lZ2F0aXZlIG9yIGRvZXMgbm90IGZpdCBpbiBhIHNtYWxsZXIgbnVtYmVyCiAgLy8gb2YgYml0cy4KICBpbnQgYml0V2lkdGgoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBjb25zdCBpbnQgTUFYID0gMzI7CiAgICBpbnQgY29uc3RhbnQoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQ29uc3RhbnQgJiYgaW5zdHJ1Y3Rpb24uaXNDb25zdGFudEludGVnZXIoKSkgewogICAgICAgIEludENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBpbnN0cnVjdGlvbi5jb25zdGFudDsKICAgICAgICByZXR1cm4gY29uc3RhbnQuaW50VmFsdWUudG9JbnQoKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBpZiAoaW5zdHJ1Y3Rpb24uaXNDb25zdGFudEludGVnZXIoKSkgewogICAgICBpbnQgdmFsdWUgPSBjb25zdGFudChpbnN0cnVjdGlvbik7CiAgICAgIGlmICh2YWx1ZSA8IDApIHJldHVybiBNQVg7CiAgICAgIGlmICh2YWx1ZSA+ICgoMSA8PCAzMSkgLSAxKSkgcmV0dXJuIE1BWDsKICAgICAgcmV0dXJuIHZhbHVlLmJpdExlbmd0aDsKICAgIH0KICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQml0QW5kKSB7CiAgICAgIHJldHVybiBtYXRoLm1pbihiaXRXaWR0aChpbnN0cnVjdGlvbi5sZWZ0KSwgYml0V2lkdGgoaW5zdHJ1Y3Rpb24ucmlnaHQpKTsKICAgIH0KICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQml0T3IgfHwgaW5zdHJ1Y3Rpb24gaXMgSEJpdFhvcikgewogICAgICBIQmluYXJ5Qml0T3AgYml0T3AgPSBpbnN0cnVjdGlvbjsKICAgICAgaW50IGxlZnRXaWR0aCA9IGJpdFdpZHRoKGJpdE9wLmxlZnQpOwogICAgICBpZiAobGVmdFdpZHRoID09IE1BWCkgcmV0dXJuIE1BWDsKICAgICAgcmV0dXJuIG1hdGgubWF4KGxlZnRXaWR0aCwgYml0V2lkdGgoYml0T3AucmlnaHQpKTsKICAgIH0KICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIU2hpZnRMZWZ0KSB7CiAgICAgIGludCBzaGlmdENvdW50ID0gY29uc3RhbnQoaW5zdHJ1Y3Rpb24ucmlnaHQpOwogICAgICBpZiAoc2hpZnRDb3VudCA9PSBudWxsIHx8IHNoaWZ0Q291bnQgPCAwIHx8IHNoaWZ0Q291bnQgPiAzMSkgcmV0dXJuIE1BWDsKICAgICAgaW50IGxlZnRXaWR0aCA9IGJpdFdpZHRoKGluc3RydWN0aW9uLmxlZnQpOwogICAgICBpbnQgd2lkdGggPSBsZWZ0V2lkdGggKyBzaGlmdENvdW50OwogICAgICByZXR1cm4gbWF0aC5taW4od2lkdGgsIE1BWCk7CiAgICB9CiAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSFNoaWZ0UmlnaHQpIHsKICAgICAgaW50IHNoaWZ0Q291bnQgPSBjb25zdGFudChpbnN0cnVjdGlvbi5yaWdodCk7CiAgICAgIGlmIChzaGlmdENvdW50ID09IG51bGwgfHwgc2hpZnRDb3VudCA8IDAgfHwgc2hpZnRDb3VudCA+IDMxKSByZXR1cm4gTUFYOwogICAgICBpbnQgbGVmdFdpZHRoID0gYml0V2lkdGgoaW5zdHJ1Y3Rpb24ubGVmdCk7CiAgICAgIGlmIChsZWZ0V2lkdGggPj0gTUFYKSByZXR1cm4gTUFYOwogICAgICByZXR1cm4gbWF0aC5tYXgobGVmdFdpZHRoIC0gc2hpZnRDb3VudCwgMCk7CiAgICB9CiAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSEFkZCkgewogICAgICByZXR1cm4gbWF0aC5taW4oCiAgICAgICAgICAxICsgbWF0aC5tYXgoYml0V2lkdGgoaW5zdHJ1Y3Rpb24ubGVmdCksIGJpdFdpZHRoKGluc3RydWN0aW9uLnJpZ2h0KSksCiAgICAgICAgICBNQVgpOwogICAgfQogICAgcmV0dXJuIE1BWDsKICB9CgogIGJvb2wgcmVxdWlyZXNVaW50Q29udmVyc2lvbihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGlmIChpbnN0cnVjdGlvbi5pc1VJbnQzMShfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpZiAoYml0V2lkdGgoaW5zdHJ1Y3Rpb24pIDw9IDMxKSByZXR1cm4gZmFsc2U7CiAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIGEgYml0LW9wZXJhdGlvbiBpcyBvbmx5IHVzZWQgYnkgb3RoZXIgYml0CiAgICAvLyBvcGVyYXRpb25zLCB3ZSBkbyBub3QgaGF2ZSB0byBjb252ZXJ0IHRvIGFuIHVuc2lnbmVkIGludGVnZXIuCiAgICByZXR1cm4gaGFzTm9uQml0T3BVc2VyKGluc3RydWN0aW9uLCBuZXcgU2V0PEhQaGk+KCkpOwogIH0KCiAgLy8vIElmIHRoZSBbaW5zdHJ1Y3Rpb25dIGlzIG5vdCBgbnVsbGAgaXQgd2lsbCBiZSB1c2VkIHRvIGF0dGFjaCB0aGUgcG9zaXRpb24KICAvLy8gdG8gdGhlIFtzdGF0ZW1lbnRdLgogIHZvaWQgcHVzaFN0YXRlbWVudChqcy5TdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICBhc3NlcnQoZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkpOwogICAgY3VycmVudENvbnRhaW5lci5zdGF0ZW1lbnRzLmFkZChzdGF0ZW1lbnQpOwogIH0KCiAgdm9pZCBpbnNlcnRTdGF0ZW1lbnRBdFN0YXJ0KGpzLlN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgIGN1cnJlbnRDb250YWluZXIuc3RhdGVtZW50cy5pbnNlcnQoMCwgc3RhdGVtZW50KTsKICB9CgogIC8vLyBJZiB0aGUgW2luc3RydWN0aW9uXSBpcyBub3QgYG51bGxgIGl0IHdpbGwgYmUgdXNlZCB0byBhdHRhY2ggdGhlIHBvc2l0aW9uCiAgLy8vIHRvIHRoZSBbZXhwcmVzc2lvbl0uCiAgcHVzaEV4cHJlc3Npb25Bc1N0YXRlbWVudCgKICAgICAganMuRXhwcmVzc2lvbiBleHByZXNzaW9uLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgcHVzaFN0YXRlbWVudChuZXcganMuRXhwcmVzc2lvblN0YXRlbWVudChleHByZXNzaW9uKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIC8vLyBJZiB0aGUgW2luc3RydWN0aW9uXSBpcyBub3QgYG51bGxgIGl0IHdpbGwgYmUgdXNlZCB0byBhdHRhY2ggdGhlIHBvc2l0aW9uCiAgLy8vIHRvIHRoZSBbZXhwcmVzc2lvbl0uCiAgcHVzaChqcy5FeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgIGV4cHJlc3Npb25TdGFjay5hZGQoZXhwcmVzc2lvbik7CiAgfQoKICBqcy5FeHByZXNzaW9uIHBvcCgpIHsKICAgIHJldHVybiBleHByZXNzaW9uU3RhY2sucmVtb3ZlTGFzdCgpOwogIH0KCiAgdm9pZCBwcmVHZW5lcmF0ZU1ldGhvZChIR3JhcGggZ3JhcGgpIHsKICAgIHZvaWQgcnVuUGhhc2UoQ29kZWdlblBoYXNlIHBoYXNlLCB7Ym9vbCB0cmFjZUdyYXBoID0gdHJ1ZX0pIHsKICAgICAgX2NvZGVnZW5UYXNrLm1lYXN1cmVTdWJ0YXNrKHBoYXNlLm5hbWUsICgpID0+IHBoYXNlLnZpc2l0R3JhcGgoZ3JhcGgpKTsKICAgICAgaWYgKHRyYWNlR3JhcGgpIHsKICAgICAgICBfdHJhY2VyLnRyYWNlR3JhcGgocGhhc2UubmFtZSwgZ3JhcGgpOwogICAgICB9CiAgICAgIGFzc2VydChncmFwaC5pc1ZhbGlkKCksICdHcmFwaCBub3QgdmFsaWQgYWZ0ZXIgJHtwaGFzZS5uYW1lfScpOwogICAgfQoKICAgIHJ1blBoYXNlKAogICAgICAgIG5ldyBTc2FJbnN0cnVjdGlvblNlbGVjdGlvbihfb3B0aW9ucywgX2Nsb3NlZFdvcmxkLCBfaW50ZXJjZXB0b3JEYXRhKSk7CiAgICBydW5QaGFzZShuZXcgU3NhVHlwZUtub3duUmVtb3ZlcigpKTsKICAgIHJ1blBoYXNlKG5ldyBTc2FUcnVzdGVkQ2hlY2tSZW1vdmVyKF9vcHRpb25zKSk7CiAgICBydW5QaGFzZShuZXcgU3NhQXNzaWdubWVudENoYWluaW5nKF9vcHRpb25zLCBfY2xvc2VkV29ybGQpKTsKICAgIHJ1blBoYXNlKG5ldyBTc2FJbnN0cnVjdGlvbk1lcmdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbiwgZ2VuZXJhdGVBdFVzZVNpdGUpKTsKICAgIHJ1blBoYXNlKG5ldyBTc2FDb25kaXRpb25NZXJnZXIoZ2VuZXJhdGVBdFVzZVNpdGUsIGNvbnRyb2xGbG93T3BlcmF0b3JzKSk7CiAgICBydW5QaGFzZShuZXcgU3NhU2hhcmVSZWdpb25Db25zdGFudHMoX29wdGlvbnMpKTsKCiAgICBTc2FMaXZlSW50ZXJ2YWxCdWlsZGVyIGludGVydmFsQnVpbGRlciA9CiAgICAgICAgbmV3IFNzYUxpdmVJbnRlcnZhbEJ1aWxkZXIoZ2VuZXJhdGVBdFVzZVNpdGUsIGNvbnRyb2xGbG93T3BlcmF0b3JzKTsKICAgIHJ1blBoYXNlKGludGVydmFsQnVpbGRlciwgdHJhY2VHcmFwaDogZmFsc2UpOwogICAgU3NhVmFyaWFibGVBbGxvY2F0b3IgYWxsb2NhdG9yID0gbmV3IFNzYVZhcmlhYmxlQWxsb2NhdG9yKAogICAgICAgIF9uYW1lciwKICAgICAgICBpbnRlcnZhbEJ1aWxkZXIubGl2ZUluc3RydWN0aW9ucywKICAgICAgICBpbnRlcnZhbEJ1aWxkZXIubGl2ZUludGVydmFscywKICAgICAgICBnZW5lcmF0ZUF0VXNlU2l0ZSk7CiAgICBydW5QaGFzZShhbGxvY2F0b3IsIHRyYWNlR3JhcGg6IGZhbHNlKTsKICAgIHZhcmlhYmxlTmFtZXMgPSBhbGxvY2F0b3IubmFtZXM7CiAgICBzaG91bGRHcm91cFZhckRlY2xhcmF0aW9ucyA9IGFsbG9jYXRvci5uYW1lcy5udW1iZXJPZlZhcmlhYmxlcyA+IDE7CiAgfQoKICB2b2lkIGhhbmRsZURlbGF5ZWRWYXJpYWJsZURlY2xhcmF0aW9ucyhTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gQ3JlYXRlICd2YXInIGxpc3QgYXQgdGhlIHN0YXJ0IG9mIGZ1bmN0aW9uLiAgTW92ZSBhc3NpZ25tZW50IHN0YXRlbWVudHMKICAgIC8vIGZyb20gdGhlIHRvcCBvZiB0aGUgYm9keSBpbnRvIHRoZSB2YXJpYWJsZSBpbml0aWFsaXplcnMuCiAgICBpZiAoY29sbGVjdGVkVmFyaWFibGVEZWNsYXJhdGlvbnMuaXNFbXB0eSkgcmV0dXJuOwoKICAgIExpc3Q8anMuVmFyaWFibGVJbml0aWFsaXphdGlvbj4gZGVjbGFyYXRpb25zID0gW107CiAgICBMaXN0PGpzLlN0YXRlbWVudD4gc3RhdGVtZW50cyA9IGN1cnJlbnRDb250YWluZXIuc3RhdGVtZW50czsKICAgIGludCBuZXh0U3RhdGVtZW50ID0gMDsKCiAgICB3aGlsZSAobmV4dFN0YXRlbWVudCA8IHN0YXRlbWVudHMubGVuZ3RoKSB7CiAgICAgIGlmIChjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucy5pc0VtcHR5KSBicmVhazsKICAgICAganMuU3RhdGVtZW50IHN0YXRlbWVudCA9IHN0YXRlbWVudHNbbmV4dFN0YXRlbWVudF07CiAgICAgIGlmIChzdGF0ZW1lbnQgaXMganMuRXhwcmVzc2lvblN0YXRlbWVudCkgewogICAgICAgIGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHN0YXRlbWVudC5leHByZXNzaW9uOwogICAgICAgIGlmIChleHByZXNzaW9uIGlzIGpzLkFzc2lnbm1lbnQgJiYgIWV4cHJlc3Npb24uaXNDb21wb3VuZCkgewogICAgICAgICAganMuRXhwcmVzc2lvbiBsZWZ0ID0gZXhwcmVzc2lvbi5sZWZ0SGFuZFNpZGU7CiAgICAgICAgICBpZiAobGVmdCBpcyBqcy5WYXJpYWJsZVJlZmVyZW5jZSkgewogICAgICAgICAgICBTdHJpbmcgbmFtZSA9IGxlZnQubmFtZTsKICAgICAgICAgICAganMuRXhwcmVzc2lvbiB2YWx1ZSA9IGV4cHJlc3Npb24udmFsdWU7CiAgICAgICAgICAgIGlmIChfc2FmZUluSW5pdGlhbGl6ZXIodmFsdWUpICYmCiAgICAgICAgICAgICAgICBjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucy5yZW1vdmUobmFtZSkpIHsKICAgICAgICAgICAgICB2YXIgaW5pdGlhbGl6YXRpb24gPSBuZXcganMuVmFyaWFibGVJbml0aWFsaXphdGlvbigKICAgICAgICAgICAgICAgICAgICAgIG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uKG5hbWUpLCB2YWx1ZSkKICAgICAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihleHByZXNzaW9uLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICAgICAgICBkZWNsYXJhdGlvbnMuYWRkKGluaXRpYWxpemF0aW9uKTsKICAgICAgICAgICAgICArK25leHRTdGF0ZW1lbnQ7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICB9CgogICAgTGlzdDxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPiB1bmluaXRpYWxpemVkID0gW107CiAgICBmb3IgKFN0cmluZyBuYW1lIGluIGNvbGxlY3RlZFZhcmlhYmxlRGVjbGFyYXRpb25zKSB7CiAgICAgIHVuaW5pdGlhbGl6ZWQuYWRkKG5ldyBqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uKAogICAgICAgICAgbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb24obmFtZSksIG51bGwpKTsKICAgIH0KICAgIHZhciBkZWNsYXJhdGlvbkxpc3QgPQogICAgICAgIG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uTGlzdCh1bmluaXRpYWxpemVkICsgZGVjbGFyYXRpb25zKQogICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIHN0YXRlbWVudHMucmVwbGFjZVJhbmdlKAogICAgICAgIDAsIG5leHRTdGF0ZW1lbnQsIFtuZXcganMuRXhwcmVzc2lvblN0YXRlbWVudChkZWNsYXJhdGlvbkxpc3QpXSk7CiAgfQoKICAvLyBBbiBleHByZXNzaW9uIGlzIHNhZmUgdG8gYmUgcHVsbGVkIGludG8gYSAndmFyJyBpbml0aWFsaXplciBpZiBpdCBkb2VzIG5vdAogIC8vIGNvbnRhaW4gYXNzaWdubWVudHMgdG8gbG9jYWxzLiBXZSBkb24ndCBnZW5lcmF0ZSBhc3NpZ25tZW50cyB0byBsb2NhbHMKICAvLyBpbnNpZGUgZXhwcmVzc2lvbnMuCiAgYm9vbCBfc2FmZUluSW5pdGlhbGl6ZXIoanMuRXhwcmVzc2lvbiBub2RlKSA9PiB0cnVlOwoKICB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgcHJlR2VuZXJhdGVNZXRob2QoZ3JhcGgpOwogICAgY3VycmVudEdyYXBoID0gZ3JhcGg7CiAgICB2aXNpdFN1YkdyYXBoKG5ldyBTdWJHcmFwaChncmFwaC5lbnRyeSwgZ3JhcGguZXhpdCkpOwogICAgaGFuZGxlRGVsYXllZFZhcmlhYmxlRGVjbGFyYXRpb25zKGdyYXBoLnNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIHZvaWQgdmlzaXRTdWJHcmFwaChTdWJHcmFwaCBuZXdTdWJHcmFwaCkgewogICAgU3ViR3JhcGggb2xkU3ViR3JhcGggPSBzdWJHcmFwaDsKICAgIFF1ZXVlPEhCYXNpY0Jsb2NrPiBvbGRCbG9ja1F1ZXVlID0gYmxvY2tRdWV1ZTsKICAgIHN1YkdyYXBoID0gbmV3U3ViR3JhcGg7CiAgICBibG9ja1F1ZXVlID0gbmV3IFF1ZXVlPEhCYXNpY0Jsb2NrPigpOwogICAgZW50ZXJTdWJHcmFwaChzdWJHcmFwaC5zdGFydCk7CiAgICBibG9ja1F1ZXVlID0gb2xkQmxvY2tRdWV1ZTsKICAgIHN1YkdyYXBoID0gb2xkU3ViR3JhcGg7CiAgfQoKICAvLy8gQ2hlY2sgd2hldGhlciBhIHN1Yi1ncmFwaCBjYW4gYmUgZ2VuZXJhdGVkIGFzIGFuIGV4cHJlc3Npb24sIG9yIGV2ZW4KICAvLy8gYXMgYSBkZWNsYXJhdGlvbiwgb3IgaWYgaXQgaGFzIHRvIGZhbGwgYmFjayB0byBiZWluZyBnZW5lcmF0ZWQgYXMKICAvLy8gYSBzdGF0ZW1lbnQuCiAgLy8vIEV4cHJlc3Npb25zIGFyZSBhbnl0aGluZyB0aGF0IGRvZXNuJ3QgZ2VuZXJhdGUgY29udHJvbCBmbG93IGNvbnN0cnVjdHMuCiAgLy8vIERlY2xhcmF0aW9ucyBtdXN0IG9ubHkgZ2VuZXJhdGUgYXNzaWdubWVudHMgb24gdGhlIGZvcm0gImlkID0gZXhwcmVzc2lvbiIsCiAgLy8vIGFuZCBub3QsIGUuZy4sIGV4cHJlc3Npb25zIHdoZXJlIHRoZSB2YWx1ZSBpc24ndCBhc3NpZ25lZCwgb3Igd2hlcmUgaXQncwogIC8vLyBhc3NpZ25lZCB0byBzb21ldGhpbmcgdGhhdCdzIG5vdCBhIHNpbXBsZSB2YXJpYWJsZS4KICBpbnQgZXhwcmVzc2lvblR5cGUoSEV4cHJlc3Npb25JbmZvcm1hdGlvbiBpbmZvKSB7CiAgICAvLyBUaGUgb25seSBIRXhwcmVzc2lvbkluZm9ybWF0aW9uIHVzZWQgYXMgcGFydCBvZiBhIEhCbG9ja0luZm9ybWF0aW9uIGlzCiAgICAvLyBjdXJyZW50IEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbiwgc28gaXQncyB0aGUgb25seSBvbmUgcmVhY2hpbmcKICAgIC8vIGhlcmUuIElmIHdlIHN0YXJ0IHVzaW5nIHRoZSBvdGhlciBIRXhwcmVzc2lvbkluZm9ybWF0aW9uIHR5cGVzIHRvbywKICAgIC8vIHRoaXMgY29kZSBzaG91bGQgYmUgZ2VuZXJhbGl6ZWQuCiAgICBhc3NlcnQoaW5mbyBpcyBIU3ViRXhwcmVzc2lvbkJsb2NrSW5mb3JtYXRpb24pOwogICAgSFN1YkV4cHJlc3Npb25CbG9ja0luZm9ybWF0aW9uIGV4cHJlc3Npb25JbmZvID0gaW5mbzsKICAgIFN1YkdyYXBoIGxpbWl0cyA9IGV4cHJlc3Npb25JbmZvLnN1YkV4cHJlc3Npb247CgogICAgLy8gU3RhcnQgYXNzdW1pbmcgdGhhdCB3ZSBjYW4gZ2VuZXJhdGUgZGVjbGFyYXRpb25zLiBJZiB3ZSBmaW5kIGEKICAgIC8vIGNvdW50ZXItZXhhbXBsZSwgd2UgZGVncmFkZSBvdXIgYXNzdW1wdGlvbiB0byBlaXRoZXIgZXhwcmVzc2lvbiBvcgogICAgLy8gc3RhdGVtZW50LCBhbmQgaW4gdGhlIGxhdHRlciBjYXNlLCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5IHNpbmNlCiAgICAvLyBpdCBjYW4ndCBnZXQgYW55IHdvcnNlLiBFLmcuLCBhIGZ1bmN0aW9uIGNhbGwgd2hlcmUgdGhlIHJldHVybiB2YWx1ZQogICAgLy8gaXNuJ3QgdXNlZCBjYW4ndCBiZSBpbiBhIGRlY2xhcmF0aW9uLgogICAgaW50IHJlc3VsdCA9IFRZUEVfREVDTEFSQVRJT047CiAgICBIQmFzaWNCbG9jayBiYXNpY0Jsb2NrID0gbGltaXRzLnN0YXJ0OwogICAgZG8gewogICAgICBISW5zdHJ1Y3Rpb24gY3VycmVudCA9IGJhc2ljQmxvY2suZmlyc3Q7CiAgICAgIHdoaWxlIChjdXJyZW50ICE9IGJhc2ljQmxvY2subGFzdCkgewogICAgICAgIC8vIEUuZywgYm91bmRzIGNoZWNrLgogICAgICAgIGlmIChjdXJyZW50LmlzQ29udHJvbEZsb3coKSkgewogICAgICAgICAgcmV0dXJuIFRZUEVfU1RBVEVNRU5UOwogICAgICAgIH0KICAgICAgICAvLyBIRmllbGRTZXQgZ2VuZXJhdGVzIGNvZGUgb24gdGhlIGZvcm0gIngueSA9IC4uLiIsIHdoaWNoIGlzbid0IHZhbGlkCiAgICAgICAgLy8gaW4gYSBkZWNsYXJhdGlvbi4KICAgICAgICBpZiAoY3VycmVudC51c2VkQnkuaXNFbXB0eSB8fCBjdXJyZW50IGlzIEhGaWVsZFNldCkgewogICAgICAgICAgcmVzdWx0ID0gVFlQRV9FWFBSRVNTSU9OOwogICAgICAgIH0KICAgICAgICBjdXJyZW50ID0gY3VycmVudC5uZXh0OwogICAgICB9CiAgICAgIGlmIChjdXJyZW50IGlzIEhHb3RvKSB7CiAgICAgICAgYmFzaWNCbG9jayA9IGJhc2ljQmxvY2suc3VjY2Vzc29yc1swXTsKICAgICAgfSBlbHNlIGlmIChjdXJyZW50IGlzIEhDb25kaXRpb25hbEJyYW5jaCkgewogICAgICAgIGlmIChnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyhjdXJyZW50KSkgewogICAgICAgICAgLy8gU2hvcnQtY2lyY3VpdCBjb250cm9sIGZsb3cgb3BlcmF0b3IgdHJpY2tlcnkuCiAgICAgICAgICAvLyBDaGVjayB0aGUgc2Vjb25kIGhhbGYsIHdoaWNoIHdpbGwgY29udGludWUgaW50byB0aGUgam9pbi4KICAgICAgICAgIC8vIChUaGUgZmlyc3QgaGFsZiBpcyBbaW5wdXRzWzBdXSwgdGhlIHNlY29uZCBoYWxmIGlzIFtzdWNjZXNzb3JzWzBdXSwKICAgICAgICAgIC8vIGFuZCBbc3VjY2Vzc29yc1sxXV0gaXMgdGhlIGpvaW4tYmxvY2spLgogICAgICAgICAgYmFzaWNCbG9jayA9IGJhc2ljQmxvY2suc3VjY2Vzc29yc1swXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gV2UgYWxsb3cgYW4gZXhwcmVzc2lvbiB0byBlbmQgb24gYW4gSElmIChhIGNvbmRpdGlvbiBleHByZXNzaW9uKS4KICAgICAgICAgIHJldHVybiBpZGVudGljYWwoYmFzaWNCbG9jaywgbGltaXRzLmVuZCkgPyByZXN1bHQgOiBUWVBFX1NUQVRFTUVOVDsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gRXhwcmVzc2lvbi1pbmNvbXBhdGlibGUgY29udHJvbCBmbG93LgogICAgICAgIHJldHVybiBUWVBFX1NUQVRFTUVOVDsKICAgICAgfQogICAgfSB3aGlsZSAobGltaXRzLmNvbnRhaW5zKGJhc2ljQmxvY2spKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBib29sIGlzSlNFeHByZXNzaW9uKEhFeHByZXNzaW9uSW5mb3JtYXRpb24gaW5mbykgewogICAgcmV0dXJuICFpZGVudGljYWwoZXhwcmVzc2lvblR5cGUoaW5mbyksIFRZUEVfU1RBVEVNRU5UKTsKICB9CgogIGJvb2wgaXNKU0NvbmRpdGlvbihIRXhwcmVzc2lvbkluZm9ybWF0aW9uIGluZm8pIHsKICAgIEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbiBncmFwaCA9IGluZm87CiAgICBTdWJFeHByZXNzaW9uIGxpbWl0cyA9IGdyYXBoLnN1YkV4cHJlc3Npb247CiAgICByZXR1cm4gIWlkZW50aWNhbChleHByZXNzaW9uVHlwZShpbmZvKSwgVFlQRV9TVEFURU1FTlQpICYmCiAgICAgICAgKGxpbWl0cy5lbmQubGFzdCBpcyBIQ29uZGl0aW9uYWxCcmFuY2gpOwogIH0KCiAgLy8vIEdlbmVyYXRlIHN0YXRlbWVudHMgZnJvbSBibG9jayBpbmZvcm1hdGlvbi4KICAvLy8gSWYgdGhlIGJsb2NrIGluZm9ybWF0aW9uIGNvbnRhaW5zIGV4cHJlc3Npb25zLCBnZW5lcmF0ZSBvbmx5CiAgLy8vIGFzc2lnbm1lbnRzLCBhbmQgaWYgaXQgZW5kcyBpbiBhIGNvbmRpdGlvbmFsIGJyYW5jaCwgZG9uJ3QgZ2VuZXJhdGUKICAvLy8gdGhlIGNvbmRpdGlvbi4KICB2b2lkIGdlbmVyYXRlU3RhdGVtZW50cyhIQmxvY2tJbmZvcm1hdGlvbiBibG9jaykgewogICAgaWYgKGJsb2NrIGlzIEhTdGF0ZW1lbnRJbmZvcm1hdGlvbikgewogICAgICBibG9jay5hY2NlcHQodGhpcyk7CiAgICB9IGVsc2UgewogICAgICBIU3ViRXhwcmVzc2lvbkJsb2NrSW5mb3JtYXRpb24gZXhwcmVzc2lvbiA9IGJsb2NrOwogICAgICB2aXNpdFN1YkdyYXBoKGV4cHJlc3Npb24uc3ViRXhwcmVzc2lvbik7CiAgICB9CiAgfQoKICBqcy5CbG9jayBnZW5lcmF0ZVN0YXRlbWVudHNJbk5ld0Jsb2NrKEhCbG9ja0luZm9ybWF0aW9uIGJsb2NrKSB7CiAgICBqcy5CbG9jayByZXN1bHQgPSBuZXcganMuQmxvY2suZW1wdHkoKTsKICAgIGpzLkJsb2NrIG9sZENvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXI7CiAgICBjdXJyZW50Q29udGFpbmVyID0gcmVzdWx0OwogICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGJsb2NrKTsKICAgIGN1cnJlbnRDb250YWluZXIgPSBvbGRDb250YWluZXI7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIElmIHRoZSBbYmxvY2tdIG9ubHkgY29udGFpbnMgb25lIHN0YXRlbWVudCByZXR1cm5zIHRoYXQgc3RhdGVtZW50LiBJZiB0aGUKICAvLy8gdGhhdCBzdGF0ZW1lbnQgaXRzZWxmIGlzIGEgYmxvY2ssIHJlY3Vyc2l2ZWx5IGNhbGxzIHRoaXMgbWV0aG9kLgogIC8vLwogIC8vLyBJZiB0aGUgYmxvY2sgaXMgZW1wdHksIHJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgW2pzLk5PUF0uCiAganMuU3RhdGVtZW50IHVud3JhcFN0YXRlbWVudChqcy5CbG9jayBibG9jaykgewogICAgaW50IGxlbiA9IGJsb2NrLnN0YXRlbWVudHMubGVuZ3RoOwogICAgaWYgKGxlbiA9PSAwKSByZXR1cm4gbmV3IGpzLkVtcHR5U3RhdGVtZW50KCk7CiAgICBpZiAobGVuID09IDEpIHsKICAgICAganMuU3RhdGVtZW50IHJlc3VsdCA9IGJsb2NrLnN0YXRlbWVudHNbMF07CiAgICAgIGlmIChyZXN1bHQgaXMganMuQmxvY2spIHJldHVybiB1bndyYXBTdGF0ZW1lbnQocmVzdWx0KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBibG9jazsKICB9CgogIC8vLyBHZW5lcmF0ZSBleHByZXNzaW9ucyBmcm9tIGJsb2NrIGluZm9ybWF0aW9uLgogIGpzLkV4cHJlc3Npb24gZ2VuZXJhdGVFeHByZXNzaW9uKEhFeHByZXNzaW9uSW5mb3JtYXRpb24gZXhwcmVzc2lvbikgewogICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgaGFuZGxlIHN1Yi1leHByZXNzaW9uIGdyYXBocy4KICAgIGFzc2VydChleHByZXNzaW9uIGlzIEhTdWJFeHByZXNzaW9uQmxvY2tJbmZvcm1hdGlvbik7CgogICAgYm9vbCBvbGRJc0dlbmVyYXRpbmdFeHByZXNzaW9uID0gaXNHZW5lcmF0aW5nRXhwcmVzc2lvbjsKICAgIGlzR2VuZXJhdGluZ0V4cHJlc3Npb24gPSB0cnVlOwogICAgTGlzdDxqcy5FeHByZXNzaW9uPiBvbGRFeHByZXNzaW9uU3RhY2sgPSBleHByZXNzaW9uU3RhY2s7CiAgICBMaXN0PGpzLkV4cHJlc3Npb24+IHNlcXVlbmNlRWxlbWVudHMgPSA8anMuRXhwcmVzc2lvbj5bXTsKICAgIGV4cHJlc3Npb25TdGFjayA9IHNlcXVlbmNlRWxlbWVudHM7CiAgICBIU3ViRXhwcmVzc2lvbkJsb2NrSW5mb3JtYXRpb24gZXhwcmVzc2lvblN1YkdyYXBoID0gZXhwcmVzc2lvbjsKICAgIHZpc2l0U3ViR3JhcGgoZXhwcmVzc2lvblN1YkdyYXBoLnN1YkV4cHJlc3Npb24pOwogICAgZXhwcmVzc2lvblN0YWNrID0gb2xkRXhwcmVzc2lvblN0YWNrOwogICAgaXNHZW5lcmF0aW5nRXhwcmVzc2lvbiA9IG9sZElzR2VuZXJhdGluZ0V4cHJlc3Npb247CiAgICBpZiAoc2VxdWVuY2VFbGVtZW50cy5pc0VtcHR5KSB7CiAgICAgIC8vIEhhcHBlbnMgd2hlbiB0aGUgaW5pdGlhbGl6ZXIsIGNvbmRpdGlvbiBvciB1cGRhdGUgb2YgYSBsb29wIGlzIGVtcHR5LgogICAgICByZXR1cm4gbnVsbDsKICAgIH0gZWxzZSBpZiAoc2VxdWVuY2VFbGVtZW50cy5sZW5ndGggPT0gMSkgewogICAgICByZXR1cm4gc2VxdWVuY2VFbGVtZW50c1swXTsKICAgIH0gZWxzZSB7CiAgICAgIGpzLkV4cHJlc3Npb24gcmVzdWx0ID0gc2VxdWVuY2VFbGVtZW50cy5yZW1vdmVMYXN0KCk7CiAgICAgIHdoaWxlIChzZXF1ZW5jZUVsZW1lbnRzLmlzTm90RW1wdHkpIHsKICAgICAgICByZXN1bHQgPSBuZXcganMuQmluYXJ5KCcsJywgc2VxdWVuY2VFbGVtZW50cy5yZW1vdmVMYXN0KCksIHJlc3VsdCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9CgogIC8vLyBPbmx5IHZpc2l0cyB0aGUgYXJndW1lbnRzIHN0YXJ0aW5nIGF0IGlucHV0c1tISW52b2tlLkFSR1VNRU5UU19PRkZTRVRdLgogIExpc3Q8anMuRXhwcmVzc2lvbj4gdmlzaXRBcmd1bWVudHMoTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cywKICAgICAge2ludCBzdGFydDogSEludm9rZS5BUkdVTUVOVFNfT0ZGU0VUfSkgewogICAgYXNzZXJ0KGlucHV0cy5sZW5ndGggPj0gc3RhcnQpOwogICAgTGlzdDxqcy5FeHByZXNzaW9uPiByZXN1bHQgPSBuZXcgTGlzdDxqcy5FeHByZXNzaW9uPihpbnB1dHMubGVuZ3RoIC0gc3RhcnQpOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHVzZShpbnB1dHNbaV0pOwogICAgICByZXN1bHRbaSAtIHN0YXJ0XSA9IHBvcCgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGJvb2wgaXNWYXJpYWJsZURlY2xhcmVkKFN0cmluZyB2YXJpYWJsZU5hbWUpIHsKICAgIHJldHVybiBkZWNsYXJlZExvY2Fscy5jb250YWlucyh2YXJpYWJsZU5hbWUpIHx8CiAgICAgICAgY29sbGVjdGVkVmFyaWFibGVEZWNsYXJhdGlvbnMuY29udGFpbnModmFyaWFibGVOYW1lKTsKICB9CgogIGpzLkV4cHJlc3Npb24gZ2VuZXJhdGVFeHByZXNzaW9uQXNzaWdubWVudChTdHJpbmcgdmFyaWFibGVOYW1lLAogICAgICBqcy5FeHByZXNzaW9uIHZhbHVlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogSW50cm9kdWNlIGEgRGVmZXJyZWRWYXJpYWJsZVVzZSB0byBoYW5kbGUgdGhpcwogICAgLy8gaW4gdGhlIFNTQSBjb2RlZ2VuIG9yIGxldCB0aGUgSlMgcHJpbnRlciBoYW5kbGUgaXQgZnVsbHkgYW5kIHJlbW92ZSBpdAogICAgLy8gaGVyZS4KICAgIGlmICh2YWx1ZSBpcyBqcy5CaW5hcnkpIHsKICAgICAganMuQmluYXJ5IGJpbmFyeSA9IHZhbHVlOwogICAgICBTdHJpbmcgb3AgPSBiaW5hcnkub3A7CiAgICAgIGlmIChvcCA9PSAnKycgfHwKICAgICAgICAgIG9wID09ICctJyB8fAogICAgICAgICAgb3AgPT0gJy8nIHx8CiAgICAgICAgICBvcCA9PSAnKicgfHwKICAgICAgICAgIG9wID09ICclJyB8fAogICAgICAgICAgb3AgPT0gJ14nIHx8CiAgICAgICAgICBvcCA9PSAnJicgfHwKICAgICAgICAgIG9wID09ICd8JykgewogICAgICAgIGpzLkV4cHJlc3Npb24gbGVmdCA9IGJpbmFyeS5sZWZ0OwogICAgICAgIGlmIChsZWZ0IGlzIGpzLlZhcmlhYmxlVXNlICYmIGxlZnQubmFtZSA9PSB2YXJpYWJsZU5hbWUpIHsKICAgICAgICAgIC8vIFdlIGtub3cgbm93LCB0aGF0IHdlIGNhbiBzaG9ydGVuIHggPSB4ICsgeSBpbnRvIHggKz0geS4KICAgICAgICAgIC8vIEFsc28gY2hlY2sgZm9yIHRoZSBzaG9ydGN1dCB3aGVyZSB5IGVxdWFscyAxOiB4KysgYW5kIHgtLS4KICAgICAgICAgIGpzLkV4cHJlc3Npb24gcmlnaHQgPSBiaW5hcnkucmlnaHQ7CiAgICAgICAgICBpZiAoKG9wID09ICcrJyB8fCBvcCA9PSAnLScpICYmCiAgICAgICAgICAgICAgcmlnaHQgaXMganMuTGl0ZXJhbE51bWJlciAmJgogICAgICAgICAgICAgIHJpZ2h0LnZhbHVlID09ICIxIikgewogICAgICAgICAgICByZXR1cm4gbmV3IGpzLlByZWZpeChvcCA9PSAnKycgPyAnKysnIDogJy0tJywgbGVmdCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gbmV3IGpzLkFzc2lnbm1lbnQuY29tcG91bmQoYmluYXJ5LmxlZnQsIG9wLCBiaW5hcnkucmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBqcy5Bc3NpZ25tZW50KG5ldyBqcy5WYXJpYWJsZVVzZSh2YXJpYWJsZU5hbWUpLCB2YWx1ZSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHZhbHVlLnNvdXJjZUluZm9ybWF0aW9uID8/IHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIHZvaWQgYXNzaWduVmFyaWFibGUoU3RyaW5nIHZhcmlhYmxlTmFtZSwganMuRXhwcmVzc2lvbiB2YWx1ZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGlmIChpc0dlbmVyYXRpbmdFeHByZXNzaW9uKSB7CiAgICAgIC8vIElmIHdlIGFyZSBpbiBhbiBleHByZXNzaW9uIHRoZW4gd2UgY2FuJ3QgZGVjbGFyZSB0aGUgdmFyaWFibGUgaGVyZS4KICAgICAgLy8gV2UgaGF2ZSBubyBjaG9pY2UsIGJ1dCB0byB1c2UgaXQgYW5kIHRoZW4gZGVjbGFyZSBpdCBzZXBhcmF0ZWx5LgogICAgICBpZiAoIWlzVmFyaWFibGVEZWNsYXJlZCh2YXJpYWJsZU5hbWUpKSB7CiAgICAgICAgY29sbGVjdGVkVmFyaWFibGVEZWNsYXJhdGlvbnMuYWRkKHZhcmlhYmxlTmFtZSk7CiAgICAgIH0KICAgICAgcHVzaCgKICAgICAgICAgIGdlbmVyYXRlRXhwcmVzc2lvbkFzc2lnbm1lbnQodmFyaWFibGVOYW1lLCB2YWx1ZSwgc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgLy8gT3RoZXJ3aXNlIGlmIHdlIGFyZSB0cnlpbmcgdG8gZGVjbGFyZSBpbmxpbmUgYW5kIHdlIGFyZSBpbiBhIHN0YXRlbWVudAogICAgICAvLyB0aGVuIHdlIGRlY2xhcmUgKHVubGVzcyBpdCB3YXMgYWxyZWFkeSBkZWNsYXJlZCkuCiAgICB9IGVsc2UgaWYgKCFzaG91bGRHcm91cFZhckRlY2xhcmF0aW9ucyAmJgogICAgICAgICFkZWNsYXJlZExvY2Fscy5jb250YWlucyh2YXJpYWJsZU5hbWUpKSB7CiAgICAgIC8vIEl0IG1heSBiZSBuZWNlc3NhcnkgdG8gcmVtb3ZlIGl0IGZyb20gdGhlIG9uZXMgdG8gYmUgZGVjbGFyZWQgbGF0ZXIuCiAgICAgIGNvbGxlY3RlZFZhcmlhYmxlRGVjbGFyYXRpb25zLnJlbW92ZSh2YXJpYWJsZU5hbWUpOwogICAgICBkZWNsYXJlZExvY2Fscy5hZGQodmFyaWFibGVOYW1lKTsKICAgICAganMuVmFyaWFibGVEZWNsYXJhdGlvbiBkZWNsID0gbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb24odmFyaWFibGVOYW1lKTsKICAgICAganMuVmFyaWFibGVJbml0aWFsaXphdGlvbiBpbml0aWFsaXphdGlvbiA9CiAgICAgICAgICBuZXcganMuVmFyaWFibGVJbml0aWFsaXphdGlvbihkZWNsLCB2YWx1ZSk7CgogICAgICBwdXNoRXhwcmVzc2lvbkFzU3RhdGVtZW50KAogICAgICAgICAgbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KAogICAgICAgICAgICAgIDxqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uPltpbml0aWFsaXphdGlvbl0pLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgLy8gT3RoZXJ3aXNlIHdlIGFyZSBqdXN0IGdvaW5nIHRvIHVzZSBpdC4gIElmIHdlIGhhdmUgbm90IGFscmVhZHkgZGVjbGFyZWQKICAgICAgLy8gaXQgdGhlbiB3ZSBtYWtlIHN1cmUgd2Ugd2lsbCBkZWNsYXJlIGl0IGxhdGVyLgogICAgICBpZiAoIWRlY2xhcmVkTG9jYWxzLmNvbnRhaW5zKHZhcmlhYmxlTmFtZSkpIHsKICAgICAgICBjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucy5hZGQodmFyaWFibGVOYW1lKTsKICAgICAgfQogICAgICBwdXNoRXhwcmVzc2lvbkFzU3RhdGVtZW50KAogICAgICAgICAgZ2VuZXJhdGVFeHByZXNzaW9uQXNzaWdubWVudCh2YXJpYWJsZU5hbWUsIHZhbHVlLCBzb3VyY2VJbmZvcm1hdGlvbiksCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIGRlZmluZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIEZvciBzaW1wbGUgdHlwZSBjaGVja3MgbGlrZSBpID0gaW50VHlwZUNoZWNrKGkpLCB3ZSBkb24ndCBoYXZlIHRvCiAgICAvLyBlbWl0IGFuIGFzc2lnbm1lbnQsIGJlY2F1c2UgdGhlIGludFR5cGVDaGVjayBqdXN0IHJldHVybnMgaXRzCiAgICAvLyBhcmd1bWVudC4KICAgIGJvb2wgbmVlZHNBc3NpZ25tZW50ID0gdHJ1ZTsKICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQ2hlY2spIHsKICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhUeXBlQ29udmVyc2lvbiB8fAogICAgICAgICAgaW5zdHJ1Y3Rpb24gaXMgSFByaW1pdGl2ZUNoZWNrIHx8CiAgICAgICAgICBpbnN0cnVjdGlvbiBpcyBIQXNDaGVjayB8fAogICAgICAgICAgaW5zdHJ1Y3Rpb24gaXMgSEFzQ2hlY2tTaW1wbGUgfHwKICAgICAgICAgIGluc3RydWN0aW9uIGlzIEhCb29sQ29udmVyc2lvbikgewogICAgICAgIFN0cmluZyBpbnB1dE5hbWUgPSB2YXJpYWJsZU5hbWVzLmdldE5hbWUoaW5zdHJ1Y3Rpb24uY2hlY2tlZElucHV0KTsKICAgICAgICBpZiAodmFyaWFibGVOYW1lcy5nZXROYW1lKGluc3RydWN0aW9uKSA9PSBpbnB1dE5hbWUpIHsKICAgICAgICAgIG5lZWRzQXNzaWdubWVudCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGluc3RydWN0aW9uIGlzIEhMb2NhbFZhbHVlKSB7CiAgICAgIG5lZWRzQXNzaWdubWVudCA9IGZhbHNlOwogICAgfQoKICAgIGlmIChuZWVkc0Fzc2lnbm1lbnQgJiYKICAgICAgICAhaW5zdHJ1Y3Rpb24uaXNDb250cm9sRmxvdygpICYmCiAgICAgICAgdmFyaWFibGVOYW1lcy5oYXNOYW1lKGluc3RydWN0aW9uKSkgewogICAgICB2aXNpdEV4cHJlc3Npb24oaW5zdHJ1Y3Rpb24pOwogICAgICBhc3NpZ25WYXJpYWJsZSh2YXJpYWJsZU5hbWVzLmdldE5hbWUoaW5zdHJ1Y3Rpb24pLCBwb3AoKSwKICAgICAgICAgIGluc3RydWN0aW9uLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChpc0dlbmVyYXRpbmdFeHByZXNzaW9uKSB7CiAgICAgIHZpc2l0RXhwcmVzc2lvbihpbnN0cnVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICB2aXNpdFN0YXRlbWVudChpbnN0cnVjdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIHVzZShISW5zdHJ1Y3Rpb24gYXJndW1lbnQpIHsKICAgIGlmIChpc0dlbmVyYXRlQXRVc2VTaXRlKGFyZ3VtZW50KSkgewogICAgICB2aXNpdEV4cHJlc3Npb24oYXJndW1lbnQpOwogICAgfSBlbHNlIGlmIChhcmd1bWVudCBpcyBIQ2hlY2sgJiYgIXZhcmlhYmxlTmFtZXMuaGFzTmFtZShhcmd1bWVudCkpIHsKICAgICAgSENoZWNrIGNoZWNrID0gYXJndW1lbnQ7CiAgICAgIC8vIFRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHRoZSBjaGVja2VkIG5vZGUgZG9lcyBub3QgaGF2ZSBhIG5hbWUuCiAgICAgIGFzc2VydCghdmFyaWFibGVOYW1lcy5oYXNOYW1lKGNoZWNrLmNoZWNrZWRJbnB1dCkpOwogICAgICB1c2UoY2hlY2suY2hlY2tlZElucHV0KTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydCh2YXJpYWJsZU5hbWVzLmhhc05hbWUoYXJndW1lbnQpKTsKICAgICAgcHVzaChuZXcganMuVmFyaWFibGVVc2UodmFyaWFibGVOYW1lcy5nZXROYW1lKGFyZ3VtZW50KSkpOwogICAgfQogIH0KCiAgdmlzaXQoSEluc3RydWN0aW9uIG5vZGUpIHsKICAgIG5vZGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgdmlzaXRFeHByZXNzaW9uKEhJbnN0cnVjdGlvbiBub2RlKSB7CiAgICBib29sIG9sZElzR2VuZXJhdGluZ0V4cHJlc3Npb24gPSBpc0dlbmVyYXRpbmdFeHByZXNzaW9uOwogICAgaXNHZW5lcmF0aW5nRXhwcmVzc2lvbiA9IHRydWU7CiAgICB2aXNpdChub2RlKTsKICAgIGlzR2VuZXJhdGluZ0V4cHJlc3Npb24gPSBvbGRJc0dlbmVyYXRpbmdFeHByZXNzaW9uOwogIH0KCiAgdmlzaXRTdGF0ZW1lbnQoSEluc3RydWN0aW9uIG5vZGUpIHsKICAgIGFzc2VydCghaXNHZW5lcmF0aW5nRXhwcmVzc2lvbik7CiAgICB2aXNpdChub2RlKTsKICAgIGlmICghZXhwcmVzc2lvblN0YWNrLmlzRW1wdHkpIHsKICAgICAgYXNzZXJ0KGV4cHJlc3Npb25TdGFjay5sZW5ndGggPT0gMSk7CiAgICAgIGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBvcCgpOwogICAgICBwdXNoRXhwcmVzc2lvbkFzU3RhdGVtZW50KGV4cHJlc3Npb24sIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogIH0KCiAgdm9pZCBjb250aW51ZUFzQnJlYWsoTGFiZWxEZWZpbml0aW9uIHRhcmdldCkgewogICAgcHVzaFN0YXRlbWVudChuZXcganMuQnJlYWsoX25hbWVyLmNvbnRpbnVlTGFiZWxOYW1lKHRhcmdldCkpKTsKICB9CgogIHZvaWQgaW1wbGljaXRDb250aW51ZUFzQnJlYWsoSnVtcFRhcmdldCB0YXJnZXQpIHsKICAgIHB1c2hTdGF0ZW1lbnQobmV3IGpzLkJyZWFrKF9uYW1lci5pbXBsaWNpdENvbnRpbnVlTGFiZWxOYW1lKHRhcmdldCkpKTsKICB9CgogIHZvaWQgaW1wbGljaXRCcmVha1dpdGhMYWJlbChKdW1wVGFyZ2V0IHRhcmdldCkgewogICAgcHVzaFN0YXRlbWVudChuZXcganMuQnJlYWsoX25hbWVyLmltcGxpY2l0QnJlYWtMYWJlbE5hbWUodGFyZ2V0KSkpOwogIH0KCiAganMuU3RhdGVtZW50IHdyYXBJbnRvTGFiZWxzKAogICAgICBqcy5TdGF0ZW1lbnQgcmVzdWx0LCBMaXN0PExhYmVsRGVmaW5pdGlvbj4gbGFiZWxzKSB7CiAgICBmb3IgKExhYmVsRGVmaW5pdGlvbiBsYWJlbCBpbiBsYWJlbHMpIHsKICAgICAgaWYgKGxhYmVsLmlzVGFyZ2V0KSB7CiAgICAgICAgU3RyaW5nIGJyZWFrTGFiZWxTdHJpbmcgPSBfbmFtZXIuYnJlYWtMYWJlbE5hbWUobGFiZWwpOwogICAgICAgIHJlc3VsdCA9IG5ldyBqcy5MYWJlbGVkU3RhdGVtZW50KGJyZWFrTGFiZWxTdHJpbmcsIHJlc3VsdCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBUaGUgcmVndWxhciBbdmlzaXRJZl0gbWV0aG9kIGltcGxlbWVudHMgdGhlIG5lZWRlZCBsb2dpYy4KICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SWZJbmZvKEhJZkJsb2NrSW5mb3JtYXRpb24gaW5mbykgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTd2l0Y2hJbmZvKEhTd2l0Y2hCbG9ja0luZm9ybWF0aW9uIGluZm8pIHsKICAgIGJvb2wgaXNFeHByZXNzaW9uID0gaXNKU0V4cHJlc3Npb24oaW5mby5leHByZXNzaW9uKTsKICAgIGlmICghaXNFeHByZXNzaW9uKSB7CiAgICAgIGdlbmVyYXRlU3RhdGVtZW50cyhpbmZvLmV4cHJlc3Npb24pOwogICAgfQoKICAgIGlmIChpc0V4cHJlc3Npb24pIHsKICAgICAgcHVzaChnZW5lcmF0ZUV4cHJlc3Npb24oaW5mby5leHByZXNzaW9uKSk7CiAgICB9IGVsc2UgewogICAgICB1c2UoaW5mby5leHByZXNzaW9uLmNvbmRpdGlvbkV4cHJlc3Npb24pOwogICAgfQogICAganMuRXhwcmVzc2lvbiBrZXkgPSBwb3AoKTsKICAgIGJvb2wgaGFuZGxlZERlZmF1bHQgPSBmYWxzZTsKICAgIExpc3Q8anMuU3dpdGNoQ2xhdXNlPiBjYXNlcyA9IDxqcy5Td2l0Y2hDbGF1c2U+W107CiAgICBIU3dpdGNoIHN3aXRjaEluc3RydWN0aW9uID0gaW5mby5leHByZXNzaW9uLmVuZC5sYXN0OwogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IHN3aXRjaEluc3RydWN0aW9uLmlucHV0czsKICAgIExpc3Q8SEJhc2ljQmxvY2s+IHN1Y2Nlc3NvcnMgPSBzd2l0Y2hJbnN0cnVjdGlvbi5ibG9jay5zdWNjZXNzb3JzOwoKICAgIGpzLkJsb2NrIG9sZENvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXI7CiAgICBmb3IgKGludCBpbnB1dEluZGV4ID0gMSwgc3RhdGVtZW50SW5kZXggPSAwOwogICAgICAgIGlucHV0SW5kZXggPCBpbnB1dHMubGVuZ3RoOwogICAgICAgIHN0YXRlbWVudEluZGV4KyspIHsKICAgICAgSEJhc2ljQmxvY2sgc3VjY2Vzc29yID0gc3VjY2Vzc29yc1tpbnB1dEluZGV4IC0gMV07CiAgICAgIC8vIElmIGxpdmVuZXNzIGFuYWx5c2lzIGhhcyBmaWd1cmVkIG91dCB0aGF0IHRoaXMgY2FzZSBpcyBkZWFkLAogICAgICAvLyBvbWl0IHRoZSBjb2RlIGZvciBpdC4KICAgICAgaWYgKHN1Y2Nlc3Nvci5pc0xpdmUpIHsKICAgICAgICBkbyB7CiAgICAgICAgICB2aXNpdChpbnB1dHNbaW5wdXRJbmRleF0pOwogICAgICAgICAgY3VycmVudENvbnRhaW5lciA9IG5ldyBqcy5CbG9jay5lbXB0eSgpOwogICAgICAgICAgY2FzZXMuYWRkKG5ldyBqcy5DYXNlKHBvcCgpLCBjdXJyZW50Q29udGFpbmVyKSk7CiAgICAgICAgICBpbnB1dEluZGV4Kys7CiAgICAgICAgfSB3aGlsZSAoKHN1Y2Nlc3NvcnNbaW5wdXRJbmRleCAtIDFdID09IHN1Y2Nlc3NvcikgJiYKICAgICAgICAgICAgKGlucHV0SW5kZXggPCBpbnB1dHMubGVuZ3RoKSk7CgogICAgICAgIC8vIElmIHRoaXMgaXMgdGhlIGxhc3Qgc3RhdGVtZW50LCB0aGVuIHRoZXNlIGNhc2VzIGFsc28gYmVsb25nIHRvIHRoZQogICAgICAgIC8vIGRlZmF1bHQgYmxvY2suCiAgICAgICAgaWYgKHN0YXRlbWVudEluZGV4ID09IGluZm8uc3RhdGVtZW50cy5sZW5ndGggLSAxKSB7CiAgICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICAgICAgICBjYXNlcy5hZGQobmV3IGpzLkRlZmF1bHQoY3VycmVudENvbnRhaW5lcikpOwogICAgICAgICAgaGFuZGxlZERlZmF1bHQgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGluZm8uc3RhdGVtZW50c1tzdGF0ZW1lbnRJbmRleF0pOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFNraXAgYWxsIHRoZSBjYXNlIHN0YXRlbWVudHMgdGhhdCBiZWxvbmcgdG8gdGhpcwogICAgICAgIC8vIGJsb2NrLgogICAgICAgIHdoaWxlICgoc3VjY2Vzc29yc1tpbnB1dEluZGV4IC0gMV0gPT0gc3VjY2Vzc29yKSAmJgogICAgICAgICAgICAoaW5wdXRJbmRleCA8IGlucHV0cy5sZW5ndGgpKSB7CiAgICAgICAgICArK2lucHV0SW5kZXg7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgLy8gSWYgdGhlIGRlZmF1bHQgY2FzZSBpcyBkZWFkLCB3ZSBvbWl0IGl0LiBMaWtld2lzZSwgaWYgaXQgaXMgYW4KICAgIC8vIGVtcHR5IGJsb2NrLCB3ZSBvbWl0IGl0LCB0b28uCiAgICBpZiAoaW5mby5zdGF0ZW1lbnRzLmxhc3Quc3RhcnQuaXNMaXZlICYmICFoYW5kbGVkRGVmYXVsdCkgewogICAgICBjdXJyZW50Q29udGFpbmVyID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICAgIGdlbmVyYXRlU3RhdGVtZW50cyhpbmZvLnN0YXRlbWVudHMubGFzdCk7CiAgICAgIGlmIChjdXJyZW50Q29udGFpbmVyLnN0YXRlbWVudHMuaXNOb3RFbXB0eSkgewogICAgICAgIGNhc2VzLmFkZChuZXcganMuRGVmYXVsdChjdXJyZW50Q29udGFpbmVyKSk7CiAgICAgIH0KICAgIH0KCiAgICBjdXJyZW50Q29udGFpbmVyID0gb2xkQ29udGFpbmVyOwoKICAgIGpzLlN0YXRlbWVudCByZXN1bHQgPQogICAgICAgIG5ldyBqcy5Td2l0Y2goa2V5LCBjYXNlcykud2l0aFNvdXJjZUluZm9ybWF0aW9uKGluZm8uc291cmNlSW5mb3JtYXRpb24pOwogICAgcHVzaFN0YXRlbWVudCh3cmFwSW50b0xhYmVscyhyZXN1bHQsIGluZm8ubGFiZWxzKSk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTZXF1ZW5jZUluZm8oSFN0YXRlbWVudFNlcXVlbmNlSW5mb3JtYXRpb24gaW5mbykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFN1YkdyYXBoSW5mbyhIU3ViR3JhcGhCbG9ja0luZm9ybWF0aW9uIGluZm8pIHsKICAgIHZpc2l0U3ViR3JhcGgoaW5mby5zdWJHcmFwaCk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTdWJFeHByZXNzaW9uSW5mbyhIU3ViRXhwcmVzc2lvbkJsb2NrSW5mb3JtYXRpb24gaW5mbykgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEFuZE9ySW5mbyhIQW5kT3JCbG9ja0luZm9ybWF0aW9uIGluZm8pIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUcnlJbmZvKEhUcnlCbG9ja0luZm9ybWF0aW9uIGluZm8pIHsKICAgIGpzLkJsb2NrIGJvZHkgPSBnZW5lcmF0ZVN0YXRlbWVudHNJbk5ld0Jsb2NrKGluZm8uYm9keSk7CiAgICBqcy5DYXRjaCBjYXRjaFBhcnQgPSBudWxsOwogICAganMuQmxvY2sgZmluYWxseVBhcnQgPSBudWxsOwogICAgaWYgKGluZm8uY2F0Y2hCbG9jayAhPSBudWxsKSB7CiAgICAgIHZvaWQgcmVnaXN0ZXIoQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50KSB7CiAgICAgICAgaWYgKGNsYXNzRWxlbWVudCAhPSBudWxsKSB7CiAgICAgICAgICBfcmVnaXN0cnkKICAgICAgICAgICAgICAvLyBpZ25vcmU6ZGVwcmVjYXRlZF9tZW1iZXJfdXNlX2Zyb21fc2FtZV9wYWNrYWdlCiAgICAgICAgICAgICAgLnJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3MoY2xhc3NFbGVtZW50KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJlZ2lzdGVyKF9jb21tb25FbGVtZW50cy5qc1BsYWluSmF2YVNjcmlwdE9iamVjdENsYXNzKTsKICAgICAgcmVnaXN0ZXIoX2NvbW1vbkVsZW1lbnRzLmpzVW5rbm93bkphdmFTY3JpcHRPYmplY3RDbGFzcyk7CgogICAgICBITG9jYWxWYWx1ZSBleGNlcHRpb24gPSBpbmZvLmNhdGNoVmFyaWFibGU7CiAgICAgIFN0cmluZyBuYW1lID0gdmFyaWFibGVOYW1lcy5nZXROYW1lKGV4Y2VwdGlvbik7CiAgICAgIGpzLlZhcmlhYmxlRGVjbGFyYXRpb24gZGVjbCA9IG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uKG5hbWUpOwogICAgICBqcy5CbG9jayBjYXRjaEJsb2NrID0gZ2VuZXJhdGVTdGF0ZW1lbnRzSW5OZXdCbG9jayhpbmZvLmNhdGNoQmxvY2spOwogICAgICBjYXRjaFBhcnQgPSBuZXcganMuQ2F0Y2goZGVjbCwgY2F0Y2hCbG9jayk7CiAgICB9CiAgICBpZiAoaW5mby5maW5hbGx5QmxvY2sgIT0gbnVsbCkgewogICAgICBmaW5hbGx5UGFydCA9IGdlbmVyYXRlU3RhdGVtZW50c0luTmV3QmxvY2soaW5mby5maW5hbGx5QmxvY2spOwogICAgfQogICAgcHVzaFN0YXRlbWVudChuZXcganMuVHJ5KGJvZHksIGNhdGNoUGFydCwgZmluYWxseVBhcnQpKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgdm9pZCB2aXNpdEJvZHlJZ25vcmVMYWJlbHMoSExvb3BCbG9ja0luZm9ybWF0aW9uIGluZm8pIHsKICAgIGlmIChpbmZvLmJvZHkuc3RhcnQuaXNMYWJlbGVkQmxvY2soKSkgewogICAgICBIQmxvY2tJbmZvcm1hdGlvbiBvbGRJbmZvID0gY3VycmVudEJsb2NrSW5mb3JtYXRpb247CiAgICAgIGN1cnJlbnRCbG9ja0luZm9ybWF0aW9uID0gaW5mby5ib2R5LnN0YXJ0LmJsb2NrRmxvdy5ib2R5OwogICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoaW5mby5ib2R5KTsKICAgICAgY3VycmVudEJsb2NrSW5mb3JtYXRpb24gPSBvbGRJbmZvOwogICAgfSBlbHNlIHsKICAgICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGluZm8uYm9keSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TG9vcEluZm8oSExvb3BCbG9ja0luZm9ybWF0aW9uIGluZm8pIHsKICAgIEhFeHByZXNzaW9uSW5mb3JtYXRpb24gY29uZGl0aW9uID0gaW5mby5jb25kaXRpb247CiAgICBib29sIGlzQ29uZGl0aW9uRXhwcmVzc2lvbiA9IGlzSlNDb25kaXRpb24oY29uZGl0aW9uKTsKCiAgICBqcy5Mb29wIGxvb3A7CgogICAgc3dpdGNoIChpbmZvLmtpbmQpIHsKICAgICAgLy8gVHJlYXQgYWxsIHRocmVlICJ0ZXN0LWZpcnN0IiBsb29wcyB0aGUgc2FtZSB3YXkuCiAgICAgIGNhc2UgSExvb3BCbG9ja0luZm9ybWF0aW9uLkZPUl9MT09QOgogICAgICBjYXNlIEhMb29wQmxvY2tJbmZvcm1hdGlvbi5XSElMRV9MT09QOgogICAgICBjYXNlIEhMb29wQmxvY2tJbmZvcm1hdGlvbi5GT1JfSU5fTE9PUDoKICAgICAgY2FzZSBITG9vcEJsb2NrSW5mb3JtYXRpb24uU1dJVENIX0NPTlRJTlVFX0xPT1A6CiAgICAgICAgSEJsb2NrSW5mb3JtYXRpb24gaW5pdGlhbGl6YXRpb24gPSBpbmZvLmluaXRpYWxpemVyOwogICAgICAgIGludCBpbml0aWFsaXphdGlvblR5cGUgPSBUWVBFX1NUQVRFTUVOVDsKICAgICAgICBpZiAoaW5pdGlhbGl6YXRpb24gIT0gbnVsbCkgewogICAgICAgICAgaW5pdGlhbGl6YXRpb25UeXBlID0gZXhwcmVzc2lvblR5cGUoaW5pdGlhbGl6YXRpb24pOwogICAgICAgICAgaWYgKGluaXRpYWxpemF0aW9uVHlwZSA9PSBUWVBFX1NUQVRFTUVOVCkgewogICAgICAgICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoaW5pdGlhbGl6YXRpb24pOwogICAgICAgICAgICBpbml0aWFsaXphdGlvbiA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBXZSBpbnNlcnRlZCBhIGJhc2ljIGJsb2NrIHRvIGF2b2lkIGNyaXRpY2FsIGVkZ2VzLiBUaGlzIGJsb2NrIGlzCiAgICAgICAgLy8gcGFydCBvZiB0aGUgTG9vcEJsb2NrSW5mb3JtYXRpb24gYW5kIG11c3QgdGhlcmVmb3JlIGJlIGhhbmRsZWQgaGVyZS4KICAgICAgICBqcy5CbG9jayBvbGRDb250YWluZXIgPSBjdXJyZW50Q29udGFpbmVyOwogICAgICAgIGpzLkJsb2NrIGF2b2lkQ29udGFpbmVyID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICAgICAgY3VycmVudENvbnRhaW5lciA9IGF2b2lkQ29udGFpbmVyOwogICAgICAgIGFzc2lnblBoaXNPZlN1Y2Nlc3NvcnMoY29uZGl0aW9uLmVuZC5zdWNjZXNzb3JzLmxhc3QpOwogICAgICAgIGJvb2wgaGFzUGhpVXBkYXRlcyA9ICFhdm9pZENvbnRhaW5lci5zdGF0ZW1lbnRzLmlzRW1wdHk7CiAgICAgICAgY3VycmVudENvbnRhaW5lciA9IG9sZENvbnRhaW5lcjsKCiAgICAgICAgaWYgKGlzQ29uZGl0aW9uRXhwcmVzc2lvbiAmJgogICAgICAgICAgICAhaGFzUGhpVXBkYXRlcyAmJgogICAgICAgICAgICBpbmZvLnVwZGF0ZXMgIT0gbnVsbCAmJgogICAgICAgICAgICBpc0pTRXhwcmVzc2lvbihpbmZvLnVwZGF0ZXMpKSB7CiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIHVwZGF0ZXMgZ3JhcGgsIGFuZCBpdCdzIGV4cHJlc3NpYmxlIGFzIGFuCiAgICAgICAgICAvLyBleHByZXNzaW9uLCBnZW5lcmF0ZSBhIGZvci1sb29wLgogICAgICAgICAganMuRXhwcmVzc2lvbiBqc0luaXRpYWxpemF0aW9uID0gbnVsbDsKICAgICAgICAgIGlmIChpbml0aWFsaXphdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICAgIGludCBkZWxheWVkVmFyaWFibGVzQ291bnQgPSBjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucy5sZW5ndGg7CiAgICAgICAgICAgIGpzSW5pdGlhbGl6YXRpb24gPSBnZW5lcmF0ZUV4cHJlc3Npb24oaW5pdGlhbGl6YXRpb24pOwogICAgICAgICAgICBpZiAoIXNob3VsZEdyb3VwVmFyRGVjbGFyYXRpb25zICYmCiAgICAgICAgICAgICAgICBkZWxheWVkVmFyaWFibGVzQ291bnQgPCBjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucy5sZW5ndGgpIHsKICAgICAgICAgICAgICAvLyBXZSBqdXN0IGFkZGVkIGEgbmV3IGRlbGF5ZWQgdmFyaWFibGUtZGVjbGFyYXRpb24uIFNlZSBpZiB3ZSBjYW4KICAgICAgICAgICAgICAvLyBwdXQgaW4gYSAndmFyJyBpbiBmcm9udCBvZiB0aGUgaW5pdGlhbGl6YXRpb24gdG8gbWFrZSBpdCBnbwogICAgICAgICAgICAgIC8vIGF3YXkuIFdlIHdhbGsgdGhlICd0cmVlJyBvZiBjb21tYS1vcGVyYXRvcnMgdG8gZmluZCB0aGUKICAgICAgICAgICAgICAvLyBleHByZXNzaW9ucyBhbmQgc2VlIGlmIHRoZXkgYXJlIGFsbCBhc3NpZ25tZW50cyB0aGF0IGNhbiBiZQogICAgICAgICAgICAgIC8vIGNvbnZlcnRlZCBpbnRvIGRlY2xhcmF0aW9ucy4KCiAgICAgICAgICAgICAgTGlzdDxqcy5Bc3NpZ25tZW50PiBhc3NpZ25tZW50czsKCiAgICAgICAgICAgICAgYm9vbCBhbGxTaW1wbGVBc3NpZ25tZW50cyhqcy5FeHByZXNzaW9uIGV4cHJlc3Npb24pIHsKICAgICAgICAgICAgICAgIGlmIChleHByZXNzaW9uIGlzIGpzLkFzc2lnbm1lbnQpIHsKICAgICAgICAgICAgICAgICAganMuQXNzaWdubWVudCBhc3NpZ25tZW50ID0gZXhwcmVzc2lvbjsKICAgICAgICAgICAgICAgICAgaWYgKGFzc2lnbm1lbnQubGVmdEhhbmRTaWRlIGlzIGpzLlZhcmlhYmxlVXNlICYmCiAgICAgICAgICAgICAgICAgICAgICAhYXNzaWdubWVudC5pc0NvbXBvdW5kKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKGFzc2lnbm1lbnRzID09IG51bGwpIGFzc2lnbm1lbnRzID0gPGpzLkFzc2lnbm1lbnQ+W107CiAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudHMuYWRkKGV4cHJlc3Npb24pOwogICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24uaXNDb21tYU9wZXJhdG9yKSB7CiAgICAgICAgICAgICAgICAgIGpzLkJpbmFyeSBiaW5hcnkgPSBleHByZXNzaW9uOwogICAgICAgICAgICAgICAgICByZXR1cm4gYWxsU2ltcGxlQXNzaWdubWVudHMoYmluYXJ5LmxlZnQpICYmCiAgICAgICAgICAgICAgICAgICAgICBhbGxTaW1wbGVBc3NpZ25tZW50cyhiaW5hcnkucmlnaHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgaWYgKGFsbFNpbXBsZUFzc2lnbm1lbnRzKGpzSW5pdGlhbGl6YXRpb24pKSB7CiAgICAgICAgICAgICAgICBMaXN0PGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+IGluaXRzID0KICAgICAgICAgICAgICAgICAgICA8anMuVmFyaWFibGVJbml0aWFsaXphdGlvbj5bXTsKICAgICAgICAgICAgICAgIGZvciAoanMuQXNzaWdubWVudCBhc3NpZ25tZW50IGluIGFzc2lnbm1lbnRzKSB7CiAgICAgICAgICAgICAgICAgIFN0cmluZyBpZCA9IChhc3NpZ25tZW50LmxlZnRIYW5kU2lkZSBhcyBqcy5WYXJpYWJsZVVzZSkubmFtZTsKICAgICAgICAgICAgICAgICAganMuTm9kZSBkZWNsYXJhdGlvbiA9IG5ldyBqcy5WYXJpYWJsZURlY2xhcmF0aW9uKGlkKTsKICAgICAgICAgICAgICAgICAgaW5pdHMuYWRkKG5ldyBqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uKAogICAgICAgICAgICAgICAgICAgICAgZGVjbGFyYXRpb24sIGFzc2lnbm1lbnQudmFsdWUpKTsKICAgICAgICAgICAgICAgICAgY29sbGVjdGVkVmFyaWFibGVEZWNsYXJhdGlvbnMucmVtb3ZlKGlkKTsKICAgICAgICAgICAgICAgICAgZGVjbGFyZWRMb2NhbHMuYWRkKGlkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGpzSW5pdGlhbGl6YXRpb24gPSBuZXcganMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoaW5pdHMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAganMuRXhwcmVzc2lvbiBqc0NvbmRpdGlvbiA9IGdlbmVyYXRlRXhwcmVzc2lvbihjb25kaXRpb24pOwogICAgICAgICAganMuRXhwcmVzc2lvbiBqc1VwZGF0ZXMgPSBnZW5lcmF0ZUV4cHJlc3Npb24oaW5mby51cGRhdGVzKTsKICAgICAgICAgIC8vIFRoZSBib2R5IG1pZ2h0IGJlIGxhYmVsZWQuIElnbm9yZSB0aGlzIHdoZW4gcmVjdXJzaW5nIG9uIHRoZQogICAgICAgICAgLy8gc3ViZ3JhcGguCiAgICAgICAgICAvLyBUT0RPKGxybik6IFJlbW92ZSB0aGlzIGV4dHJhIGxhYmVsaW5nIHdoZW4gaGFuZGxpbmcgYWxsIGxvb3BzCiAgICAgICAgICAvLyB1c2luZyBzdWJncmFwaHMuCiAgICAgICAgICBvbGRDb250YWluZXIgPSBjdXJyZW50Q29udGFpbmVyOwogICAgICAgICAganMuU3RhdGVtZW50IGJvZHkgPSBuZXcganMuQmxvY2suZW1wdHkoKTsKICAgICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBib2R5OwogICAgICAgICAgdmlzaXRCb2R5SWdub3JlTGFiZWxzKGluZm8pOwogICAgICAgICAgY3VycmVudENvbnRhaW5lciA9IG9sZENvbnRhaW5lcjsKICAgICAgICAgIGJvZHkgPSB1bndyYXBTdGF0ZW1lbnQoYm9keSk7CiAgICAgICAgICBsb29wID0gbmV3IGpzLkZvcihqc0luaXRpYWxpemF0aW9uLCBqc0NvbmRpdGlvbiwganNVcGRhdGVzLCBib2R5KQogICAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oaW5mby5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFdlIGhhdmUgZWl0aGVyIG5vIHVwZGF0ZSBncmFwaCwgb3IgaXQncyB0b28gY29tcGxleCB0bwogICAgICAgICAgLy8gcHV0IGluIGFuIGV4cHJlc3Npb24uCiAgICAgICAgICBpZiAoaW5pdGlhbGl6YXRpb24gIT0gbnVsbCkgewogICAgICAgICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoaW5pdGlhbGl6YXRpb24pOwogICAgICAgICAgfQogICAgICAgICAganMuRXhwcmVzc2lvbiBqc0NvbmRpdGlvbjsKICAgICAgICAgIGpzLkJsb2NrIG9sZENvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXI7CiAgICAgICAgICBqcy5TdGF0ZW1lbnQgYm9keSA9IG5ldyBqcy5CbG9jay5lbXB0eSgpOwogICAgICAgICAgaWYgKGlzQ29uZGl0aW9uRXhwcmVzc2lvbiAmJiAhaGFzUGhpVXBkYXRlcykgewogICAgICAgICAgICBqc0NvbmRpdGlvbiA9IGdlbmVyYXRlRXhwcmVzc2lvbihjb25kaXRpb24pOwogICAgICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gYm9keTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGpzQ29uZGl0aW9uID0gbmV3TGl0ZXJhbEJvb2wodHJ1ZSwgaW5mby5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBib2R5OwogICAgICAgICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoY29uZGl0aW9uKTsKICAgICAgICAgICAgdXNlKGNvbmRpdGlvbi5jb25kaXRpb25FeHByZXNzaW9uKTsKICAgICAgICAgICAganMuRXhwcmVzc2lvbiBpZlRlc3QgPSBuZXcganMuUHJlZml4KCIhIiwgcG9wKCkpOwogICAgICAgICAgICBqcy5TdGF0ZW1lbnQganNCcmVhayA9IG5ldyBqcy5CcmVhayhudWxsKTsKICAgICAgICAgICAganMuU3RhdGVtZW50IGV4aXRMb29wOwogICAgICAgICAgICBpZiAoYXZvaWRDb250YWluZXIuc3RhdGVtZW50cy5pc0VtcHR5KSB7CiAgICAgICAgICAgICAgZXhpdExvb3AgPSBqc0JyZWFrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGF2b2lkQ29udGFpbmVyLnN0YXRlbWVudHMuYWRkKGpzQnJlYWspOwogICAgICAgICAgICAgIGV4aXRMb29wID0gYXZvaWRDb250YWluZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHVzaFN0YXRlbWVudChuZXcganMuSWYubm9FbHNlKGlmVGVzdCwgZXhpdExvb3ApKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChpbmZvLnVwZGF0ZXMgIT0gbnVsbCkgewogICAgICAgICAgICB3cmFwTG9vcEJvZHlGb3JDb250aW51ZShpbmZvKTsKICAgICAgICAgICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGluZm8udXBkYXRlcyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2aXNpdEJvZHlJZ25vcmVMYWJlbHMoaW5mbyk7CiAgICAgICAgICB9CiAgICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gb2xkQ29udGFpbmVyOwogICAgICAgICAgYm9keSA9IHVud3JhcFN0YXRlbWVudChib2R5KTsKICAgICAgICAgIGxvb3AgPSBuZXcganMuV2hpbGUoanNDb25kaXRpb24sIGJvZHkpCiAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihpbmZvLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgSExvb3BCbG9ja0luZm9ybWF0aW9uLkRPX1dISUxFX0xPT1A6CiAgICAgICAgaWYgKGluZm8uaW5pdGlhbGl6ZXIgIT0gbnVsbCkgewogICAgICAgICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGluZm8uaW5pdGlhbGl6ZXIpOwogICAgICAgIH0KICAgICAgICAvLyBXZSBpbnNlcnRlZCBhIGJhc2ljIGJsb2NrIHRvIGF2b2lkIGNyaXRpY2FsIGVkZ2VzLiBUaGlzIGJsb2NrIGlzCiAgICAgICAgLy8gcGFydCBvZiB0aGUgTG9vcEJsb2NrSW5mb3JtYXRpb24gYW5kIG11c3QgdGhlcmVmb3JlIGJlIGhhbmRsZWQgaGVyZS4KICAgICAgICBqcy5CbG9jayBvbGRDb250YWluZXIgPSBjdXJyZW50Q29udGFpbmVyOwogICAgICAgIGpzLkJsb2NrIGV4aXRBdm9pZENvbnRhaW5lciA9IG5ldyBqcy5CbG9jay5lbXB0eSgpOwogICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBleGl0QXZvaWRDb250YWluZXI7CiAgICAgICAgYXNzaWduUGhpc09mU3VjY2Vzc29ycyhjb25kaXRpb24uZW5kLnN1Y2Nlc3NvcnMubGFzdCk7CiAgICAgICAgYm9vbCBoYXNFeGl0UGhpVXBkYXRlcyA9ICFleGl0QXZvaWRDb250YWluZXIuc3RhdGVtZW50cy5pc0VtcHR5OwogICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBvbGRDb250YWluZXI7CgogICAgICAgIG9sZENvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXI7CiAgICAgICAganMuQmxvY2sgYm9keSA9IG5ldyBqcy5CbG9jay5lbXB0eSgpOwogICAgICAgIC8vIElmIHRoZXJlIGFyZSBwaGkgY29waWVzIGluIHRoZSBibG9jayB0aGF0IGp1bXBzIHRvIHRoZQogICAgICAgIC8vIGxvb3AgZW50cnksIHdlIG11c3QgZW1pdCB0aGUgY29uZGl0aW9uIGxpa2UgdGhpczoKICAgICAgICAvLyBkbyB7CiAgICAgICAgLy8gICBib2R5OwogICAgICAgIC8vICAgaWYgKGNvbmRpdGlvbikgewogICAgICAgIC8vICAgICBwaGkgdXBkYXRlczsKICAgICAgICAvLyAgICAgY29udGludWU7CiAgICAgICAgLy8gICB9IGVsc2UgewogICAgICAgIC8vICAgICBicmVhazsKICAgICAgICAvLyAgIH0KICAgICAgICAvLyB9IHdoaWxlICh0cnVlKTsKICAgICAgICBIQmFzaWNCbG9jayBhdm9pZEVkZ2UgPSBpbmZvLmVuZC5zdWNjZXNzb3JzWzBdOwogICAgICAgIGpzLkJsb2NrIHVwZGF0ZUJvZHkgPSBuZXcganMuQmxvY2suZW1wdHkoKTsKICAgICAgICBjdXJyZW50Q29udGFpbmVyID0gdXBkYXRlQm9keTsKICAgICAgICBhc3NpZ25QaGlzT2ZTdWNjZXNzb3JzKGF2b2lkRWRnZSk7CiAgICAgICAgYm9vbCBoYXNQaGlVcGRhdGVzID0gIXVwZGF0ZUJvZHkuc3RhdGVtZW50cy5pc0VtcHR5OwogICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBib2R5OwogICAgICAgIHZpc2l0Qm9keUlnbm9yZUxhYmVscyhpbmZvKTsKICAgICAgICBpZiAoaW5mby51cGRhdGVzICE9IG51bGwpIHsKICAgICAgICAgIGdlbmVyYXRlU3RhdGVtZW50cyhpbmZvLnVwZGF0ZXMpOwogICAgICAgIH0KICAgICAgICBpZiAoaXNDb25kaXRpb25FeHByZXNzaW9uKSB7CiAgICAgICAgICBwdXNoKGdlbmVyYXRlRXhwcmVzc2lvbihjb25kaXRpb24pKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGNvbmRpdGlvbik7CiAgICAgICAgICB1c2UoY29uZGl0aW9uLmNvbmRpdGlvbkV4cHJlc3Npb24pOwogICAgICAgIH0KICAgICAgICBqcy5FeHByZXNzaW9uIGpzQ29uZGl0aW9uID0gcG9wKCk7CiAgICAgICAgaWYgKGpzQ29uZGl0aW9uID09IG51bGwpIHsKICAgICAgICAgIC8vIElmIHRoZSBjb25kaXRpb24gaXMgZGVhZCBjb2RlLCB3ZSB0dXJuIHRoZSBkby13aGlsZSBpbnRvCiAgICAgICAgICAvLyBhIHNpbXBsZXIgd2hpbGUgYmVjYXVzZSB3ZSB3aWxsIG5ldmVyIHJlYWNoIHRoZSBjb25kaXRpb24KICAgICAgICAgIC8vIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AgYW55d2F5LgogICAgICAgICAgbG9vcCA9IG5ldyBqcy5XaGlsZShuZXdMaXRlcmFsQm9vbCh0cnVlLCBpbmZvLnNvdXJjZUluZm9ybWF0aW9uKSwKICAgICAgICAgICAgICAgICAgdW53cmFwU3RhdGVtZW50KGJvZHkpKQogICAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oaW5mby5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChoYXNQaGlVcGRhdGVzIHx8IGhhc0V4aXRQaGlVcGRhdGVzKSB7CiAgICAgICAgICAgIHVwZGF0ZUJvZHkuc3RhdGVtZW50cy5hZGQobmV3IGpzLkNvbnRpbnVlKG51bGwpKTsKICAgICAgICAgICAganMuU3RhdGVtZW50IGpzQnJlYWsgPSBuZXcganMuQnJlYWsobnVsbCk7CiAgICAgICAgICAgIGpzLlN0YXRlbWVudCBleGl0TG9vcDsKICAgICAgICAgICAgaWYgKGV4aXRBdm9pZENvbnRhaW5lci5zdGF0ZW1lbnRzLmlzRW1wdHkpIHsKICAgICAgICAgICAgICBleGl0TG9vcCA9IGpzQnJlYWs7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgZXhpdEF2b2lkQ29udGFpbmVyLnN0YXRlbWVudHMuYWRkKGpzQnJlYWspOwogICAgICAgICAgICAgIGV4aXRMb29wID0gZXhpdEF2b2lkQ29udGFpbmVyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJvZHkuc3RhdGVtZW50cy5hZGQobmV3IGpzLklmKGpzQ29uZGl0aW9uLCB1cGRhdGVCb2R5LCBleGl0TG9vcCkpOwogICAgICAgICAgICBqc0NvbmRpdGlvbiA9IG5ld0xpdGVyYWxCb29sKHRydWUsIGluZm8uc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgICAgfQogICAgICAgICAgbG9vcCA9IG5ldyBqcy5Ebyh1bndyYXBTdGF0ZW1lbnQoYm9keSksIGpzQ29uZGl0aW9uKQogICAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oaW5mby5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgfQogICAgICAgIGN1cnJlbnRDb250YWluZXIgPSBvbGRDb250YWluZXI7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgZmFpbGVkQXQoY29uZGl0aW9uLmNvbmRpdGlvbkV4cHJlc3Npb24sCiAgICAgICAgICAgICdVbmV4cGVjdGVkIGxvb3Aga2luZDogJHtpbmZvLmtpbmR9LicpOwogICAgfQogICAganMuU3RhdGVtZW50IHJlc3VsdCA9IGxvb3A7CiAgICBpZiAoaW5mby5raW5kID09IEhMb29wQmxvY2tJbmZvcm1hdGlvbi5TV0lUQ0hfQ09OVElOVUVfTE9PUCkgewogICAgICBTdHJpbmcgY29udGludWVMYWJlbFN0cmluZyA9CiAgICAgICAgICBfbmFtZXIuaW1wbGljaXRDb250aW51ZUxhYmVsTmFtZShpbmZvLnRhcmdldCk7CiAgICAgIHJlc3VsdCA9IG5ldyBqcy5MYWJlbGVkU3RhdGVtZW50KGNvbnRpbnVlTGFiZWxTdHJpbmcsIHJlc3VsdCk7CiAgICB9CiAgICBwdXNoU3RhdGVtZW50KHdyYXBJbnRvTGFiZWxzKHJlc3VsdCwgaW5mby5sYWJlbHMpKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExhYmVsZWRCbG9ja0luZm8oSExhYmVsZWRCbG9ja0luZm9ybWF0aW9uIGxhYmVsZWRCbG9ja0luZm8pIHsKICAgIExpbms8RW50aXR5PiBjb250aW51ZU92ZXJyaWRlcyA9IGNvbnN0IExpbms8RW50aXR5PigpOwoKICAgIGpzLkJsb2NrIG9sZENvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXI7CiAgICBqcy5CbG9jayBib2R5ID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICBqcy5TdGF0ZW1lbnQgcmVzdWx0ID0gYm9keTsKCiAgICBjdXJyZW50Q29udGFpbmVyID0gYm9keTsKCiAgICAvLyBJZiBbbGFiZWxlZEJsb2NrSW5mby5pc0NvbnRpbnVlXSwgdGhlIGJsb2NrIGlzIGFuIGFydGlmaWNpYWwKICAgIC8vIGJsb2NrIGFyb3VuZCB0aGUgYm9keSBvZiBhIGxvb3Agd2l0aCBhbiB1cGRhdGUgYmxvY2ssIHNvIHRoYXQKICAgIC8vIGNvbnRpbnVlcyBvZiB0aGUgbG9vcCBjYW4gYmUgd3JpdHRlbiBhcyBicmVha3Mgb2YgdGhlIGJvZHkKICAgIC8vIGJsb2NrLgogICAgaWYgKGxhYmVsZWRCbG9ja0luZm8uaXNDb250aW51ZSkgewogICAgICBmb3IgKExhYmVsRGVmaW5pdGlvbiBsYWJlbCBpbiBsYWJlbGVkQmxvY2tJbmZvLmxhYmVscykgewogICAgICAgIGlmIChsYWJlbC5pc0NvbnRpbnVlVGFyZ2V0KSB7CiAgICAgICAgICBTdHJpbmcgbGFiZWxOYW1lID0gX25hbWVyLmNvbnRpbnVlTGFiZWxOYW1lKGxhYmVsKTsKICAgICAgICAgIHJlc3VsdCA9IG5ldyBqcy5MYWJlbGVkU3RhdGVtZW50KGxhYmVsTmFtZSwgcmVzdWx0KTsKICAgICAgICAgIGNvbnRpbnVlQWN0aW9uLmFkZChsYWJlbCk7CiAgICAgICAgICBjb250aW51ZU92ZXJyaWRlcyA9IGNvbnRpbnVlT3ZlcnJpZGVzLnByZXBlbmQobGFiZWwpOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBGb3IgaGFuZGxpbmcgdW5sYWJlbGVkIGNvbnRpbnVlcyBmcm9tIHRoZSBib2R5IG9mIGEgbG9vcC4KICAgICAgLy8gVE9ETyhscm4pOiBDb25zaWRlciByZWNvcmRpbmcgd2hldGhlciB0aGUgdGFyZ2V0IGlzIGluIGZhY3QKICAgICAgLy8gYSB0YXJnZXQgb2YgYW4gdW5sYWJlbGVkIGNvbnRpbnVlLCBhbmQgbm90IGdlbmVyYXRlIHRoaXMgaWYgaXQgaXNuJ3QuCiAgICAgIEp1bXBUYXJnZXQgdGFyZ2V0ID0gbGFiZWxlZEJsb2NrSW5mby50YXJnZXQ7CiAgICAgIFN0cmluZyBsYWJlbE5hbWUgPSBfbmFtZXIuaW1wbGljaXRDb250aW51ZUxhYmVsTmFtZSh0YXJnZXQpOwogICAgICByZXN1bHQgPSBuZXcganMuTGFiZWxlZFN0YXRlbWVudChsYWJlbE5hbWUsIHJlc3VsdCk7CiAgICAgIGltcGxpY2l0Q29udGludWVBY3Rpb24uYWRkKHRhcmdldCk7CiAgICAgIGNvbnRpbnVlT3ZlcnJpZGVzID0gY29udGludWVPdmVycmlkZXMucHJlcGVuZCh0YXJnZXQpOwogICAgfSBlbHNlIHsKICAgICAgZm9yIChMYWJlbERlZmluaXRpb24gbGFiZWwgaW4gbGFiZWxlZEJsb2NrSW5mby5sYWJlbHMpIHsKICAgICAgICBpZiAobGFiZWwuaXNCcmVha1RhcmdldCkgewogICAgICAgICAgU3RyaW5nIGxhYmVsTmFtZSA9IF9uYW1lci5icmVha0xhYmVsTmFtZShsYWJlbCk7CiAgICAgICAgICByZXN1bHQgPSBuZXcganMuTGFiZWxlZFN0YXRlbWVudChsYWJlbE5hbWUsIHJlc3VsdCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IGxhYmVsZWRCbG9ja0luZm8udGFyZ2V0OwogICAgaWYgKHRhcmdldC5pc1N3aXRjaCkgewogICAgICAvLyBUaGlzIGlzIGFuIGV4dHJhIGJsb2NrIGFyb3VuZCBhIHN3aXRjaCB0aGF0IGlzIGdlbmVyYXRlZAogICAgICAvLyBhcyBhIG5lc3RlZCBpZi9lbHNlIGNoYWluLiBXZSBhZGQgYW4gZXh0cmEgYnJlYWsgdGFyZ2V0CiAgICAgIC8vIHNvIHRoYXQgY2FzZSBjb2RlIGNhbiBicmVhay4KICAgICAgU3RyaW5nIGxhYmVsTmFtZSA9IF9uYW1lci5pbXBsaWNpdEJyZWFrTGFiZWxOYW1lKHRhcmdldCk7CiAgICAgIHJlc3VsdCA9IG5ldyBqcy5MYWJlbGVkU3RhdGVtZW50KGxhYmVsTmFtZSwgcmVzdWx0KTsKICAgICAgYnJlYWtBY3Rpb24uYWRkKHRhcmdldCk7CiAgICB9CgogICAgY3VycmVudENvbnRhaW5lciA9IGJvZHk7CiAgICBnZW5lcmF0ZVN0YXRlbWVudHMobGFiZWxlZEJsb2NrSW5mby5ib2R5KTsKCiAgICBpZiAobGFiZWxlZEJsb2NrSW5mby5pc0NvbnRpbnVlKSB7CiAgICAgIHdoaWxlICghY29udGludWVPdmVycmlkZXMuaXNFbXB0eSkgewogICAgICAgIGNvbnRpbnVlQWN0aW9uLnJlbW92ZShjb250aW51ZU92ZXJyaWRlcy5oZWFkKTsKICAgICAgICBpbXBsaWNpdENvbnRpbnVlQWN0aW9uLnJlbW92ZShjb250aW51ZU92ZXJyaWRlcy5oZWFkKTsKICAgICAgICBjb250aW51ZU92ZXJyaWRlcyA9IGNvbnRpbnVlT3ZlcnJpZGVzLnRhaWw7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGJyZWFrQWN0aW9uLnJlbW92ZShsYWJlbGVkQmxvY2tJbmZvLnRhcmdldCk7CiAgICB9CgogICAgY3VycmVudENvbnRhaW5lciA9IG9sZENvbnRhaW5lcjsKICAgIHB1c2hTdGF0ZW1lbnQocmVzdWx0KTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgLy8gV3JhcHMgYSBsb29wIGJvZHkgaW4gYSBibG9jayB0byBtYWtlIGNvbnRpbnVlcyBoYXZlIGEgdGFyZ2V0IHRvIGJyZWFrCiAgLy8gdG8gKGlmIG5lY2Vzc2FyeSkuCiAgdm9pZCB3cmFwTG9vcEJvZHlGb3JDb250aW51ZShITG9vcEJsb2NrSW5mb3JtYXRpb24gaW5mbykgewogICAgSnVtcFRhcmdldCB0YXJnZXQgPSBpbmZvLnRhcmdldDsKICAgIGlmICh0YXJnZXQgIT0gbnVsbCAmJiB0YXJnZXQuaXNDb250aW51ZVRhcmdldCkgewogICAgICBqcy5CbG9jayBvbGRDb250YWluZXIgPSBjdXJyZW50Q29udGFpbmVyOwogICAgICBqcy5CbG9jayBib2R5ID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICAgIGN1cnJlbnRDb250YWluZXIgPSBib2R5OwogICAgICBqcy5TdGF0ZW1lbnQgcmVzdWx0ID0gYm9keTsKICAgICAgZm9yIChMYWJlbERlZmluaXRpb24gbGFiZWwgaW4gaW5mby5sYWJlbHMpIHsKICAgICAgICBpZiAobGFiZWwuaXNDb250aW51ZVRhcmdldCkgewogICAgICAgICAgU3RyaW5nIGxhYmVsTmFtZSA9IF9uYW1lci5jb250aW51ZUxhYmVsTmFtZShsYWJlbCk7CiAgICAgICAgICByZXN1bHQgPSBuZXcganMuTGFiZWxlZFN0YXRlbWVudChsYWJlbE5hbWUsIHJlc3VsdCk7CiAgICAgICAgICBjb250aW51ZUFjdGlvbi5hZGQobGFiZWwpOwogICAgICAgIH0KICAgICAgfQogICAgICBTdHJpbmcgbGFiZWxOYW1lID0gX25hbWVyLmltcGxpY2l0Q29udGludWVMYWJlbE5hbWUodGFyZ2V0KTsKICAgICAgcmVzdWx0ID0gbmV3IGpzLkxhYmVsZWRTdGF0ZW1lbnQobGFiZWxOYW1lLCByZXN1bHQpOwogICAgICBpbXBsaWNpdENvbnRpbnVlQWN0aW9uLmFkZChpbmZvLnRhcmdldCk7CiAgICAgIHZpc2l0Qm9keUlnbm9yZUxhYmVscyhpbmZvKTsKICAgICAgaW1wbGljaXRDb250aW51ZUFjdGlvbi5yZW1vdmUoaW5mby50YXJnZXQpOwogICAgICBmb3IgKExhYmVsRGVmaW5pdGlvbiBsYWJlbCBpbiBpbmZvLmxhYmVscykgewogICAgICAgIGlmIChsYWJlbC5pc0NvbnRpbnVlVGFyZ2V0KSB7CiAgICAgICAgICBjb250aW51ZUFjdGlvbi5yZW1vdmUobGFiZWwpOwogICAgICAgIH0KICAgICAgfQogICAgICBjdXJyZW50Q29udGFpbmVyID0gb2xkQ29udGFpbmVyOwogICAgICBwdXNoU3RhdGVtZW50KHJlc3VsdCk7CiAgICB9IGVsc2UgewogICAgICAvLyBMb29wIGJvZHkgY29udGFpbnMgbm8gY29udGludWVzLCBzbyB3ZSBkb24ndCBuZWVkIGEgYnJlYWsgdGFyZ2V0LgogICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoaW5mby5ib2R5KTsKICAgIH0KICB9CgogIGJvb2wgaGFuZGxlQmxvY2tGbG93KEhCbG9ja0Zsb3cgYmxvY2spIHsKICAgIEhCbG9ja0luZm9ybWF0aW9uIGluZm8gPSBibG9jay5ib2R5OwogICAgLy8gSWYgd2UgcmVhY2ggaGVyZSBhZ2FpbiB3aGlsZSBoYW5kbGluZyB0aGUgYXR0YWNoZWQgaW5mb3JtYXRpb24sCiAgICAvLyBlLmcuLCBiZWNhdXNlIHdlIGNhbGwgdmlzaXRTdWJHcmFwaCBvbiBhIHN1YmdyYXBoIHN0YXJ0aW5nIG9uCiAgICAvLyB0aGUgc2FtZSBibG9jaywgZG9uJ3QgaGFuZGxlIGl0IGFnYWluLgogICAgLy8gV2hlbiB0aGUgc3RydWN0dXJlIGdyYXBoIGlzIGNvbXBsZXRlLCB3ZSB3aWxsIGJlIGFibGUgdG8gaGF2ZQogICAgLy8gZGlmZmVyZW50IHN0cnVjdHVyZXMgc3RhcnRpbmcgb24gdGhlIHNhbWUgYmFzaWMgYmxvY2sgKGUuZy4sIGFuCiAgICAvLyAiaWYiIGFuZCBpdHMgY29uZGl0aW9uKS4KICAgIGlmIChpZGVudGljYWwoaW5mbywgY3VycmVudEJsb2NrSW5mb3JtYXRpb24pKSByZXR1cm4gZmFsc2U7CgogICAgSEJsb2NrSW5mb3JtYXRpb24gb2xkQmxvY2tJbmZvcm1hdGlvbiA9IGN1cnJlbnRCbG9ja0luZm9ybWF0aW9uOwogICAgY3VycmVudEJsb2NrSW5mb3JtYXRpb24gPSBpbmZvOwogICAgYm9vbCBzdWNjZXNzID0gaW5mby5hY2NlcHQodGhpcyk7CiAgICBjdXJyZW50QmxvY2tJbmZvcm1hdGlvbiA9IG9sZEJsb2NrSW5mb3JtYXRpb247CgogICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgSEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gYmxvY2suY29udGludWF0aW9uOwogICAgICBpZiAoY29udGludWF0aW9uICE9IG51bGwpIHsKICAgICAgICBjb250aW51ZVN1YkdyYXBoKGNvbnRpbnVhdGlvbik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBzdWNjZXNzOwogIH0KCiAgdm9pZCBlbnRlclN1YkdyYXBoKEhCYXNpY0Jsb2NrIG5vZGUpIHsKICAgIGFzc2VydChibG9ja1F1ZXVlLmlzRW1wdHkpOwogICAgYXNzZXJ0KG5vZGUgIT0gbnVsbCk7CiAgICBjb250aW51ZVN1YkdyYXBoKG5vZGUpOwogICAgd2hpbGUgKGJsb2NrUXVldWUuaXNOb3RFbXB0eSkgewogICAgICBub2RlID0gYmxvY2tRdWV1ZS5yZW1vdmVGaXJzdCgpOwogICAgICBhc3NlcnQobm9kZS5pc0xpdmUpOwogICAgICBhc3NlcnQoc3ViR3JhcGguY29udGFpbnMobm9kZSkpOwoKICAgICAgLy8gSWYgdGhpcyBub2RlIGhhcyBibG9jay1zdHJ1Y3R1cmUgYmFzZWQgaW5mb3JtYXRpb24gYXR0YWNoZWQsCiAgICAgIC8vIHRyeSB1c2luZyB0aGF0IHRvIHRyYXZlcnNlIGZyb20gaGVyZS4KICAgICAgaWYgKG5vZGUuYmxvY2tGbG93ICE9IG51bGwgJiYgaGFuZGxlQmxvY2tGbG93KG5vZGUuYmxvY2tGbG93KSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CgogICAgICBpdGVyYXRlQmFzaWNCbG9jayhub2RlKTsKICAgIH0KICB9CgogIHZvaWQgY29udGludWVTdWJHcmFwaChIQmFzaWNCbG9jayBub2RlKSB7CiAgICBpZiAoIW5vZGUuaXNMaXZlKSByZXR1cm47CiAgICAvLyBEb24ndCBmb2xsb3cgZWRnZXMgb3V0IG9mIHRoZSBjdXJyZW50IHN1Yi1ncmFwaC4KICAgIGlmICghc3ViR3JhcGguY29udGFpbnMobm9kZSkpIHJldHVybjsKICAgIGJsb2NrUXVldWUuYWRkKG5vZGUpOwogIH0KCiAgdm9pZCBlbWl0QXNzaWdubWVudCgKICAgICAgU3RyaW5nIGRlc3RpbmF0aW9uLCBTdHJpbmcgc291cmNlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgYXNzaWduVmFyaWFibGUoZGVzdGluYXRpb24sIG5ldyBqcy5WYXJpYWJsZVVzZShzb3VyY2UpLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICAvLy8gU2VxdWVudGlhbGl6ZSBhIGxpc3Qgb2YgY29uY2VwdHVhbGx5IHBhcmFsbGVsIGNvcGllcy4gUGFyYWxsZWwKICAvLy8gY29waWVzIG1heSBjb250YWluIGN5Y2xlcywgdGhhdCB0aGlzIG1ldGhvZCBicmVha3MuCiAgdm9pZCBzZXF1ZW50aWFsaXplQ29waWVzKAogICAgICBJdGVyYWJsZTxDb3B5PEhJbnN0cnVjdGlvbj4+IGluc3RydWN0aW9uQ29waWVzLAogICAgICBTdHJpbmcgdGVtcE5hbWUsCiAgICAgIHZvaWQgZG9Bc3NpZ25tZW50KAogICAgICAgICAgU3RyaW5nIHRhcmdldCwgU3RyaW5nIHNvdXJjZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pKSB7CiAgICBNYXA8U3RyaW5nLCBTb3VyY2VJbmZvcm1hdGlvbj4gc291cmNlSW5mb3JtYXRpb25NYXAgPQogICAgICAgIDxTdHJpbmcsIFNvdXJjZUluZm9ybWF0aW9uPnt9OwoKICAgIC8vIE1hcCB0aGUgaW5zdHJ1Y3Rpb25zIHRvIHN0cmluZ3MuCiAgICBJdGVyYWJsZTxDb3B5PFN0cmluZz4+IGNvcGllcyA9CiAgICAgICAgaW5zdHJ1Y3Rpb25Db3BpZXMubWFwKChDb3B5PEhJbnN0cnVjdGlvbj4gY29weSkgewogICAgICBTdHJpbmcgc291cmNlTmFtZSA9IHZhcmlhYmxlTmFtZXMuZ2V0TmFtZShjb3B5LnNvdXJjZSk7CiAgICAgIHNvdXJjZUluZm9ybWF0aW9uTWFwW3NvdXJjZU5hbWVdID0gY29weS5zb3VyY2Uuc291cmNlSW5mb3JtYXRpb247CiAgICAgIFN0cmluZyBkZXN0aW5hdGlvbk5hbWUgPSB2YXJpYWJsZU5hbWVzLmdldE5hbWUoY29weS5kZXN0aW5hdGlvbik7CiAgICAgIHNvdXJjZUluZm9ybWF0aW9uTWFwW3NvdXJjZU5hbWVdID0gY29weS5kZXN0aW5hdGlvbi5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgcmV0dXJuIG5ldyBDb3B5PFN0cmluZz4oc291cmNlTmFtZSwgZGVzdGluYXRpb25OYW1lKTsKICAgIH0pOwoKICAgIC8vIE1hcCB0byBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IGxvY2F0aW9uIChpZSB0aGUgdmFyaWFibGUgdGhhdAogICAgLy8gaG9sZHMgdGhlIGluaXRpYWwgdmFsdWUpIG9mIGEgdmFyaWFibGUuCiAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGN1cnJlbnRMb2NhdGlvbiA9IG5ldyBNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CgogICAgLy8gTWFwIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGluaXRpYWwgdmFsdWUgb2YgYSB2YXJpYWJsZS4KICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gaW5pdGlhbFZhbHVlID0gbmV3IE1hcDxTdHJpbmcsIFN0cmluZz4oKTsKCiAgICAvLyBMaXN0IG9mIHZhcmlhYmxlcyB0byBhc3NpZ24gYSB2YWx1ZS4KICAgIExpc3Q8U3RyaW5nPiB3b3JrbGlzdCA9IDxTdHJpbmc+W107CgogICAgLy8gTGlzdCBvZiB2YXJpYWJsZXMgdGhhdCB3ZSBjYW4gYXNzaWduIGEgdmFsdWUgdG8gKGllIGFyZSBub3QKICAgIC8vIGJlaW5nIHVzZWQgYW55bW9yZSkuCiAgICBMaXN0PFN0cmluZz4gcmVhZHkgPSA8U3RyaW5nPltdOwoKICAgIC8vIFBydW5lIFtjb3BpZXNdIGJ5IHJlbW92aW5nIHNlbGYtY29waWVzLgogICAgTGlzdDxDb3B5PFN0cmluZz4+IHBydW5lZENvcGllcyA9IDxDb3B5PFN0cmluZz4+W107CiAgICBmb3IgKENvcHk8U3RyaW5nPiBjb3B5IGluIGNvcGllcykgewogICAgICBpZiAoY29weS5zb3VyY2UgIT0gY29weS5kZXN0aW5hdGlvbikgewogICAgICAgIHBydW5lZENvcGllcy5hZGQoY29weSk7CiAgICAgIH0KICAgIH0KICAgIGNvcGllcyA9IHBydW5lZENvcGllczsKCiAgICAvLyBGb3IgZWFjaCBjb3B5LCBzZXQgdGhlIGN1cnJlbnQgbG9jYXRpb24gb2YgdGhlIHNvdXJjZSB0bwogICAgLy8gaXRzZWxmLCBhbmQgdGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlIGRlc3RpbmF0aW9uIHRvIHRoZSBzb3VyY2UuCiAgICAvLyBBZGQgdGhlIGRlc3RpbmF0aW9uIHRvIHRoZSBsaXN0IG9mIGNvcGllcyB0byBtYWtlLgogICAgZm9yIChDb3B5PFN0cmluZz4gY29weSBpbiBjb3BpZXMpIHsKICAgICAgY3VycmVudExvY2F0aW9uW2NvcHkuc291cmNlXSA9IGNvcHkuc291cmNlOwogICAgICBpbml0aWFsVmFsdWVbY29weS5kZXN0aW5hdGlvbl0gPSBjb3B5LnNvdXJjZTsKICAgICAgd29ya2xpc3QuYWRkKGNvcHkuZGVzdGluYXRpb24pOwogICAgfQoKICAgIC8vIEZvciBlYWNoIGNvcHksIGlmIHRoZSBkZXN0aW5hdGlvbiBkb2VzIG5vdCBoYXZlIGEgY3VycmVudAogICAgLy8gbG9jYXRpb24sIHRoZW4gd2UgY2FuIHNhZmVseSBhc3NpZ24gdG8gaXQuCiAgICBmb3IgKENvcHk8U3RyaW5nPiBjb3B5IGluIGNvcGllcykgewogICAgICBpZiAoY3VycmVudExvY2F0aW9uW2NvcHkuZGVzdGluYXRpb25dID09IG51bGwpIHsKICAgICAgICByZWFkeS5hZGQoY29weS5kZXN0aW5hdGlvbik7CiAgICAgIH0KICAgIH0KCiAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkpIHsKICAgICAgd2hpbGUgKCFyZWFkeS5pc0VtcHR5KSB7CiAgICAgICAgU3RyaW5nIGRlc3RpbmF0aW9uID0gcmVhZHkucmVtb3ZlTGFzdCgpOwogICAgICAgIFN0cmluZyBzb3VyY2UgPSBpbml0aWFsVmFsdWVbZGVzdGluYXRpb25dOwogICAgICAgIC8vIFNpbmNlIFtzb3VyY2VdIG1pZ2h0IGhhdmUgYmVlbiB1cGRhdGVkLCB1c2UgdGhlIGN1cnJlbnQKICAgICAgICAvLyBsb2NhdGlvbiBvZiBbc291cmNlXQogICAgICAgIFN0cmluZyBjb3B5ID0gY3VycmVudExvY2F0aW9uW3NvdXJjZV07CiAgICAgICAgZG9Bc3NpZ25tZW50KGRlc3RpbmF0aW9uLCBjb3B5LAogICAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbk1hcFtjb3B5XSA/PyBzb3VyY2VJbmZvcm1hdGlvbk1hcFtkZXN0aW5hdGlvbl0pOwogICAgICAgIC8vIE5vdyBbZGVzdGluYXRpb25dIGlzIHRoZSBjdXJyZW50IGxvY2F0aW9uIG9mIFtzb3VyY2VdLgogICAgICAgIGN1cnJlbnRMb2NhdGlvbltzb3VyY2VdID0gZGVzdGluYXRpb247CiAgICAgICAgLy8gSWYgW3NvdXJjZV0gaGFzbid0IGJlZW4gdXBkYXRlZCBhbmQgbmVlZHMgdG8gaGF2ZSBhIHZhbHVlLAogICAgICAgIC8vIGFkZCBpdCB0byB0aGUgbGlzdCBvZiB2YXJpYWJsZXMgdGhhdCBjYW4gYmUgdXBkYXRlZC4gQ29waWVzCiAgICAgICAgLy8gb2YgW3NvdXJjZV0gd2lsbCBub3cgdXNlIFtkZXN0aW5hdGlvbl0uCiAgICAgICAgaWYgKHNvdXJjZSA9PSBjb3B5ICYmIGluaXRpYWxWYWx1ZVtzb3VyY2VdICE9IG51bGwpIHsKICAgICAgICAgIHJlYWR5LmFkZChzb3VyY2UpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSBhIGN5Y2xlLgogICAgICBTdHJpbmcgY3VycmVudCA9IHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKICAgICAgLy8gSWYgW2N1cnJlbnRdIGlzIHVzZWQgYXMgYSBzb3VyY2UsIGFuZCB0aGUgYXNzaWdubWVudCBoYXMgYmVlbgogICAgICAvLyBkb25lLCB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgdmFyaWFibGUuIE90aGVyd2lzZSB0aGVyZSBpcyBhCiAgICAgIC8vIGN5Y2xlIHRoYXQgd2UgYnJlYWsgYnkgdXNpbmcgYSB0ZW1wb3JhcnkgbmFtZS4KICAgICAgaWYgKGN1cnJlbnRMb2NhdGlvbltjdXJyZW50XSAhPSBudWxsICYmCiAgICAgICAgICBjdXJyZW50ICE9IGN1cnJlbnRMb2NhdGlvbltpbml0aWFsVmFsdWVbY3VycmVudF1dKSB7CiAgICAgICAgZG9Bc3NpZ25tZW50KHRlbXBOYW1lLCBjdXJyZW50LCBzb3VyY2VJbmZvcm1hdGlvbk1hcFtjdXJyZW50XSk7CiAgICAgICAgY3VycmVudExvY2F0aW9uW2N1cnJlbnRdID0gdGVtcE5hbWU7CiAgICAgICAgLy8gW2N1cnJlbnRdIGNhbiBub3cgYmUgc2FmZWx5IHVwZGF0ZWQuIENvcGllcyBvZiBbY3VycmVudF0KICAgICAgICAvLyB3aWxsIG5vdyB1c2UgW3RlbXBOYW1lXS4KICAgICAgICByZWFkeS5hZGQoY3VycmVudCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgYXNzaWduUGhpc09mU3VjY2Vzc29ycyhIQmFzaWNCbG9jayBub2RlKSB7CiAgICBDb3B5SGFuZGxlciBoYW5kbGVyID0gdmFyaWFibGVOYW1lcy5nZXRDb3B5SGFuZGxlcihub2RlKTsKICAgIGlmIChoYW5kbGVyID09IG51bGwpIHJldHVybjsKCiAgICBzZXF1ZW50aWFsaXplQ29waWVzKAogICAgICAgIGhhbmRsZXIuY29waWVzLCB2YXJpYWJsZU5hbWVzLmdldFN3YXBUZW1wKCksIGVtaXRBc3NpZ25tZW50KTsKCiAgICBmb3IgKENvcHk8SEluc3RydWN0aW9uPiBjb3B5IGluIGhhbmRsZXIuYXNzaWdubWVudHMpIHsKICAgICAgU3RyaW5nIG5hbWUgPSB2YXJpYWJsZU5hbWVzLmdldE5hbWUoY29weS5kZXN0aW5hdGlvbik7CiAgICAgIHVzZShjb3B5LnNvdXJjZSk7CiAgICAgIGFzc2lnblZhcmlhYmxlKG5hbWUsIHBvcCgpLAogICAgICAgICAgY29weS5zb3VyY2Uuc291cmNlSW5mb3JtYXRpb24gPz8gY29weS5kZXN0aW5hdGlvbi5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIGl0ZXJhdGVCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IG5vZGUuZmlyc3Q7CiAgICB3aGlsZSAoIWlkZW50aWNhbChpbnN0cnVjdGlvbiwgbm9kZS5sYXN0KSkgewogICAgICBpZiAoIWlzR2VuZXJhdGVBdFVzZVNpdGUoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgZGVmaW5lKGluc3RydWN0aW9uKTsKICAgICAgfQogICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLm5leHQ7CiAgICB9CiAgICBhc3NpZ25QaGlzT2ZTdWNjZXNzb3JzKG5vZGUpOwogICAgdmlzaXQoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgdm9pZCBoYW5kbGVJbnZva2VCaW5hcnkoCiAgICAgIEhJbnZva2VCaW5hcnkgbm9kZSwgU3RyaW5nIG9wLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgdXNlKG5vZGUubGVmdCk7CiAgICBqcy5FeHByZXNzaW9uIGpzTGVmdCA9IHBvcCgpOwogICAgdXNlKG5vZGUucmlnaHQpOwogICAgcHVzaChuZXcganMuQmluYXJ5KG9wLCBqc0xlZnQsIHBvcCgpKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TGF0ZVZhbHVlKEhMYXRlVmFsdWUgbm9kZSkgewogICAgdXNlKG5vZGUudGFyZ2V0KTsKICB9CgogIHZpc2l0SW52b2tlQmluYXJ5KEhJbnZva2VCaW5hcnkgbm9kZSwgU3RyaW5nIG9wKSB7CiAgICBoYW5kbGVJbnZva2VCaW5hcnkobm9kZSwgb3AsIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgdmlzaXRSZWxhdGlvbmFsKEhSZWxhdGlvbmFsIG5vZGUsIFN0cmluZyBvcCkgewogICAgaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsIG9wLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIC8vIFdlIHdhbnQgdGhlIG91dGNvbWUgb2YgYml0LW9wZXJhdGlvbnMgdG8gYmUgcG9zaXRpdmUuIFdlIHVzZSB0aGUgdW5zaWduZWQKICAvLyBzaGlmdCBvcGVyYXRvciB0byBhY2hpZXZlIHRoaXMuCiAgdmlzaXRCaXRJbnZva2VCaW5hcnkoSEJpbmFyeUJpdE9wIG5vZGUsIFN0cmluZyBvcCkgewogICAgdmlzaXRJbnZva2VCaW5hcnkobm9kZSwgb3ApOwogICAgaWYgKG9wICE9ICc+Pj4nICYmIHJlcXVpcmVzVWludENvbnZlcnNpb24obm9kZSkpIHsKICAgICAgcHVzaChuZXcganMuQmluYXJ5KCI+Pj4iLCBwb3AoKSwgbmV3IGpzLkxpdGVyYWxOdW1iZXIoIjAiKSkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgdmlzaXRJbnZva2VVbmFyeShISW52b2tlVW5hcnkgbm9kZSwgU3RyaW5nIG9wKSB7CiAgICB1c2Uobm9kZS5vcGVyYW5kKTsKICAgIHB1c2goCiAgICAgICAgbmV3IGpzLlByZWZpeChvcCwgcG9wKCkpLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICAvLyBXZSB3YW50IHRoZSBvdXRjb21lIG9mIGJpdC1vcGVyYXRpb25zIHRvIGJlIHBvc2l0aXZlLiBXZSB1c2UgdGhlIHVuc2lnbmVkCiAgLy8gc2hpZnQgb3BlcmF0b3IgdG8gYWNoaWV2ZSB0aGlzLgogIHZpc2l0Qml0SW52b2tlVW5hcnkoSEludm9rZVVuYXJ5IG5vZGUsIFN0cmluZyBvcCkgewogICAgdmlzaXRJbnZva2VVbmFyeShub2RlLCBvcCk7CiAgICBpZiAocmVxdWlyZXNVaW50Q29udmVyc2lvbihub2RlKSkgewogICAgICBwdXNoKG5ldyBqcy5CaW5hcnkoIj4+PiIsIHBvcCgpLCBuZXcganMuTGl0ZXJhbE51bWJlcigiMCIpKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICB2b2lkIGVtaXRJZGVudGl0eUNvbXBhcmlzb24oCiAgICAgIEhJZGVudGl0eSBpbnN0cnVjdGlvbiwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIGludmVyc2U6IGZhbHNlfSkgewogICAgU3RyaW5nIG9wID0gaW5zdHJ1Y3Rpb24uc2luZ2xlQ29tcGFyaXNvbk9wOwogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5sZWZ0OwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24ucmlnaHQ7CiAgICBpZiAob3AgIT0gbnVsbCkgewogICAgICB1c2UobGVmdCk7CiAgICAgIGpzLkV4cHJlc3Npb24ganNMZWZ0ID0gcG9wKCk7CiAgICAgIHVzZShyaWdodCk7CiAgICAgIHB1c2gobmV3IGpzLkJpbmFyeShtYXBSZWxhdGlvbmFsT3BlcmF0b3Iob3AsIGludmVyc2UpLCBqc0xlZnQsIHBvcCgpKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KE51bGxDb25zdGFudFZhbHVlLkpzTnVsbCA9PSAnbnVsbCcpOwogICAgICB1c2UobGVmdCk7CiAgICAgIGpzLkJpbmFyeSBsZWZ0RXF1YWxzTnVsbCA9CiAgICAgICAgICBuZXcganMuQmluYXJ5KCI9PSIsIHBvcCgpLCBuZXcganMuTGl0ZXJhbE51bGwoKSk7CiAgICAgIHVzZShyaWdodCk7CiAgICAgIGpzLkJpbmFyeSByaWdodEVxdWFsc051bGwgPSBuZXcganMuQmluYXJ5KAogICAgICAgICAgbWFwUmVsYXRpb25hbE9wZXJhdG9yKCI9PSIsIGludmVyc2UpLCBwb3AoKSwgbmV3IGpzLkxpdGVyYWxOdWxsKCkpOwogICAgICB1c2UocmlnaHQpOwogICAgICB1c2UobGVmdCk7CiAgICAgIGpzLkJpbmFyeSB0cmlwbGVFcSA9CiAgICAgICAgICBuZXcganMuQmluYXJ5KG1hcFJlbGF0aW9uYWxPcGVyYXRvcigiPT09IiwgaW52ZXJzZSksIHBvcCgpLCBwb3AoKSk7CgogICAgICBwdXNoKG5ldyBqcy5Db25kaXRpb25hbChsZWZ0RXF1YWxzTnVsbCwgcmlnaHRFcXVhbHNOdWxsLCB0cmlwbGVFcSkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0SWRlbnRpdHkoSElkZW50aXR5IG5vZGUpIHsKICAgIGVtaXRJZGVudGl0eUNvbXBhcmlzb24obm9kZSwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbiwgaW52ZXJzZTogZmFsc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRBZGQoSEFkZCBub2RlKSA9PiB2aXNpdEludm9rZUJpbmFyeShub2RlLCAnKycpOwogIEBvdmVycmlkZQogIHZpc2l0RGl2aWRlKEhEaXZpZGUgbm9kZSkgPT4gdmlzaXRJbnZva2VCaW5hcnkobm9kZSwgJy8nKTsKICBAb3ZlcnJpZGUKICB2aXNpdE11bHRpcGx5KEhNdWx0aXBseSBub2RlKSA9PiB2aXNpdEludm9rZUJpbmFyeShub2RlLCAnKicpOwogIEBvdmVycmlkZQogIHZpc2l0U3VidHJhY3QoSFN1YnRyYWN0IG5vZGUpID0+IHZpc2l0SW52b2tlQmluYXJ5KG5vZGUsICctJyk7CiAgQG92ZXJyaWRlCiAgdmlzaXRCaXRBbmQoSEJpdEFuZCBub2RlKSA9PiB2aXNpdEJpdEludm9rZUJpbmFyeShub2RlLCAnJicpOwogIEBvdmVycmlkZQogIHZpc2l0Qml0Tm90KEhCaXROb3Qgbm9kZSkgPT4gdmlzaXRCaXRJbnZva2VVbmFyeShub2RlLCAnficpOwogIEBvdmVycmlkZQogIHZpc2l0Qml0T3IoSEJpdE9yIG5vZGUpID0+IHZpc2l0Qml0SW52b2tlQmluYXJ5KG5vZGUsICd8Jyk7CiAgQG92ZXJyaWRlCiAgdmlzaXRCaXRYb3IoSEJpdFhvciBub2RlKSA9PiB2aXNpdEJpdEludm9rZUJpbmFyeShub2RlLCAnXicpOwogIEBvdmVycmlkZQogIHZpc2l0U2hpZnRMZWZ0KEhTaGlmdExlZnQgbm9kZSkgPT4gdmlzaXRCaXRJbnZva2VCaW5hcnkobm9kZSwgJzw8Jyk7CiAgQG92ZXJyaWRlCiAgdmlzaXRTaGlmdFJpZ2h0KEhTaGlmdFJpZ2h0IG5vZGUpID0+IHZpc2l0Qml0SW52b2tlQmluYXJ5KG5vZGUsICc+Pj4nKTsKCiAgQG92ZXJyaWRlCiAgdmlzaXRUcnVuY2F0aW5nRGl2aWRlKEhUcnVuY2F0aW5nRGl2aWRlIG5vZGUpIHsKICAgIGFzc2VydChub2RlLmlzVUludDMxKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKTsKICAgIC8vIFRPRE8oa2FybGtsb3NlKTogRW5hYmxlIHRoaXMgYXNzZXJ0aW9uIGFnYWluIHdoZW4gdHlwZSBwcm9wYWdhdGlvbiBpcwogICAgLy8gZml4ZWQuIElzc3VlIDIzNTU1LgovLyAgICBhc3NlcnQobm9kZS5sZWZ0LmlzVUludDMyKGNvbXBpbGVyKSk7CiAgICBhc3NlcnQobm9kZS5yaWdodC5pc1Bvc2l0aXZlSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSk7CiAgICB1c2Uobm9kZS5sZWZ0KTsKICAgIGpzLkV4cHJlc3Npb24ganNMZWZ0ID0gcG9wKCk7CiAgICB1c2Uobm9kZS5yaWdodCk7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkoJy8nLCBqc0xlZnQsIHBvcCgpKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgcHVzaChuZXcganMuQmluYXJ5KCd8JywgcG9wKCksIG5ldyBqcy5MaXRlcmFsTnVtYmVyKCIwIikpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFJlbWFpbmRlcihIUmVtYWluZGVyIG5vZGUpIHsKICAgIHJldHVybiB2aXNpdEludm9rZUJpbmFyeShub2RlLCAnJScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXROZWdhdGUoSE5lZ2F0ZSBub2RlKSA9PiB2aXNpdEludm9rZVVuYXJ5KG5vZGUsICctJyk7CgogIEBvdmVycmlkZQogIHZpc2l0QWJzKEhBYnMgbm9kZSkgewogICAgdXNlKG5vZGUub3BlcmFuZCk7CiAgICBwdXNoKGpzCiAgICAgICAgLmpzKCdNYXRoLmFicygjKScsIHBvcCgpKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRMZXNzKEhMZXNzIG5vZGUpID0+IHZpc2l0UmVsYXRpb25hbChub2RlLCAnPCcpOwogIEBvdmVycmlkZQogIHZpc2l0TGVzc0VxdWFsKEhMZXNzRXF1YWwgbm9kZSkgPT4gdmlzaXRSZWxhdGlvbmFsKG5vZGUsICc8PScpOwogIEBvdmVycmlkZQogIHZpc2l0R3JlYXRlcihIR3JlYXRlciBub2RlKSA9PiB2aXNpdFJlbGF0aW9uYWwobm9kZSwgJz4nKTsKICBAb3ZlcnJpZGUKICB2aXNpdEdyZWF0ZXJFcXVhbChIR3JlYXRlckVxdWFsIG5vZGUpID0+IHZpc2l0UmVsYXRpb25hbChub2RlLCAnPj0nKTsKCiAgQG92ZXJyaWRlCiAgdmlzaXRFeGl0KEhFeGl0IG5vZGUpIHsKICAgIC8vIERvbid0IGRvIGFueXRoaW5nLgogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRHb3RvKEhHb3RvIG5vZGUpIHsKICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gbm9kZS5ibG9jazsKICAgIGFzc2VydChibG9jay5zdWNjZXNzb3JzLmxlbmd0aCA9PSAxKTsKICAgIExpc3Q8SEJhc2ljQmxvY2s+IGRvbWluYXRlZCA9IGJsb2NrLmRvbWluYXRlZEJsb2NrczsKICAgIC8vIFdpdGggdGhlIGV4Y2VwdGlvbiBvZiB0aGUgZW50cnktbm9kZSB3aGljaCBkb21pbmF0ZXMgaXRzIHN1Y2Nlc3NvcgogICAgLy8gYW5kIHRoZSBleGl0IG5vZGUsIG5vIGJsb2NrIGZpbmlzaGluZyB3aXRoIGEgJ2dvdG8nIGNhbiBoYXZlIG1vcmUgdGhhbgogICAgLy8gb25lIGRvbWluYXRlZCBibG9jayAoc2luY2UgaXQgaGFzIG9ubHkgb25lIHN1Y2Nlc3NvcikuCiAgICAvLyBJZiB0aGUgc3VjY2Vzc29yIGlzIGRvbWluYXRlZCBieSBhbm90aGVyIGJsb2NrLCB0aGVuIHRoZSBvdGhlciBibG9jawogICAgLy8gaXMgcmVzcG9uc2libGUgZm9yIHZpc2l0aW5nIHRoZSBzdWNjZXNzb3IuCiAgICBpZiAoZG9taW5hdGVkLmlzRW1wdHkpIHJldHVybjsKICAgIGlmIChkb21pbmF0ZWQubGVuZ3RoID4gMikgewogICAgICBmYWlsZWRBdChub2RlLCAnZG9taW5hdGVkLmxlbmd0aCA9ICR7ZG9taW5hdGVkLmxlbmd0aH0nKTsKICAgIH0KICAgIGlmIChkb21pbmF0ZWQubGVuZ3RoID09IDIgJiYgYmxvY2sgIT0gY3VycmVudEdyYXBoLmVudHJ5KSB7CiAgICAgIGZhaWxlZEF0KG5vZGUsICdub2RlLmJsb2NrICE9IGN1cnJlbnRHcmFwaC5lbnRyeScpOwogICAgfQogICAgYXNzZXJ0KGRvbWluYXRlZFswXSA9PSBibG9jay5zdWNjZXNzb3JzWzBdKTsKICAgIGNvbnRpbnVlU3ViR3JhcGgoZG9taW5hdGVkLmZpcnN0KTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TG9vcEJyYW5jaChITG9vcEJyYW5jaCBub2RlKSB7CiAgICBhc3NlcnQobm9kZS5ibG9jayA9PSBzdWJHcmFwaC5lbmQpOwogICAgLy8gV2UgYXJlIGdlbmVyYXRpbmcgY29kZSBmb3IgYSBsb29wIGNvbmRpdGlvbi4KICAgIC8vIElmIHdlIGFyZSBnZW5lcmF0aW5nIHRoZSBzdWJncmFwaCBhcyBhbiBleHByZXNzaW9uLCB0aGUKICAgIC8vIGNvbmRpdGlvbiB3aWxsIGJlIGdlbmVyYXRlZCBhcyB0aGUgZXhwcmVzc2lvbi4KICAgIC8vIE90aGVyd2lzZSwgd2UgZG9uJ3QgZ2VuZXJhdGUgdGhlIGV4cHJlc3Npb24sIGFuZCBsZWF2ZSB0aGF0CiAgICAvLyB0byB0aGUgY29kZSB0aGF0IGNhbGxlZCBbdmlzaXRTdWJHcmFwaF0uCiAgICBpZiAoaXNHZW5lcmF0aW5nRXhwcmVzc2lvbikgewogICAgICB1c2Uobm9kZS5pbnB1dHNbMF0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRCcmVhayhIQnJlYWsgbm9kZSkgewogICAgYXNzZXJ0KG5vZGUuYmxvY2suc3VjY2Vzc29ycy5sZW5ndGggPT0gMSk7CiAgICBpZiAobm9kZS5sYWJlbCAhPSBudWxsKSB7CiAgICAgIExhYmVsRGVmaW5pdGlvbiBsYWJlbCA9IG5vZGUubGFiZWw7CiAgICAgIGlmIChicmVha0FjdGlvbi5jb250YWlucyhsYWJlbC50YXJnZXQpKSB7CiAgICAgICAgaW1wbGljaXRCcmVha1dpdGhMYWJlbChsYWJlbC50YXJnZXQpOwogICAgICB9IGVsc2UgewogICAgICAgIHB1c2hTdGF0ZW1lbnQobmV3IGpzLkJyZWFrKF9uYW1lci5icmVha0xhYmVsTmFtZShsYWJlbCkpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IG5vZGUudGFyZ2V0OwogICAgICBpZiAoYnJlYWtBY3Rpb24uY29udGFpbnModGFyZ2V0KSkgewogICAgICAgIGltcGxpY2l0QnJlYWtXaXRoTGFiZWwodGFyZ2V0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAobm9kZS5icmVha1N3aXRjaENvbnRpbnVlTG9vcCkgewogICAgICAgICAgcHVzaFN0YXRlbWVudChuZXcganMuQnJlYWsoX25hbWVyLmltcGxpY2l0Q29udGludWVMYWJlbE5hbWUodGFyZ2V0KSkKICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHVzaFN0YXRlbWVudCgKICAgICAgICAgICAgICBuZXcganMuQnJlYWsobnVsbCkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q29udGludWUoSENvbnRpbnVlIG5vZGUpIHsKICAgIGFzc2VydChub2RlLmJsb2NrLnN1Y2Nlc3NvcnMubGVuZ3RoID09IDEpOwogICAgaWYgKG5vZGUubGFiZWwgIT0gbnVsbCkgewogICAgICBMYWJlbERlZmluaXRpb24gbGFiZWwgPSBub2RlLmxhYmVsOwogICAgICBpZiAoY29udGludWVBY3Rpb24uY29udGFpbnMobGFiZWwpKSB7CiAgICAgICAgY29udGludWVBc0JyZWFrKGxhYmVsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogc2hvdWxkIHRoaXMgcmVhbGx5IGJlIHRoZSBicmVha0xhYmVsTmFtZT8KICAgICAgICBwdXNoU3RhdGVtZW50KG5ldyBqcy5Db250aW51ZShfbmFtZXIuYnJlYWtMYWJlbE5hbWUobGFiZWwpKQogICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgSnVtcFRhcmdldCB0YXJnZXQgPSBub2RlLnRhcmdldDsKICAgICAgaWYgKGltcGxpY2l0Q29udGludWVBY3Rpb24uY29udGFpbnModGFyZ2V0KSkgewogICAgICAgIGltcGxpY2l0Q29udGludWVBc0JyZWFrKHRhcmdldCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHRhcmdldC5pc1N3aXRjaCkgewogICAgICAgICAgcHVzaFN0YXRlbWVudCgKICAgICAgICAgICAgICBuZXcganMuQ29udGludWUoX25hbWVyLmltcGxpY2l0Q29udGludWVMYWJlbE5hbWUodGFyZ2V0KSkKICAgICAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHB1c2hTdGF0ZW1lbnQobmV3IGpzLkNvbnRpbnVlKG51bGwpCiAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEV4aXRUcnkoSEV4aXRUcnkgbm9kZSkgewogICAgLy8gQW4gW0hFeGl0VHJ5XSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgY29udHJvbCBmbG93IGdyYXBoIG9mIGEKICAgIC8vIHRyeS9jYXRjaCBibG9jaywgaWUgdGhlIHRyeSBib2R5IGlzIGFsd2F5cyBhIHByZWRlY2Vzc29yCiAgICAvLyBvZiB0aGUgY2F0Y2ggYW5kIGZpbmFsbHkuIEhlcmUsIHdlIGNvbnRpbnVlIHZpc2l0aW5nIHRoZSB0cnkKICAgIC8vIGJvZHkgYnkgdmlzaXRpbmcgdGhlIGJsb2NrIHRoYXQgY29udGFpbnMgdGhlIHVzZXItbGV2ZWwgY29udHJvbAogICAgLy8gZmxvdyBpbnN0cnVjdGlvbi4KICAgIGNvbnRpbnVlU3ViR3JhcGgobm9kZS5ib2R5VHJ5U3VjY2Vzc29yKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0VHJ5KEhUcnkgbm9kZSkgewogICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLiBUcnkvY2F0Y2gvZmluYWxseSBpcyBhbHdheXMgaGFuZGxlZCB1c2luZyBibG9jawogICAgLy8gaW5mb3JtYXRpb24gaW4gW3Zpc2l0VHJ5SW5mb10uCiAgICBmYWlsZWRBdChub2RlLCAndmlzaXRUcnkgc2hvdWxkIG5vdCBiZSBjYWxsZWQuJyk7CiAgfQoKICBib29sIHRyeUNvbnRyb2xGbG93T3BlcmF0aW9uKEhJZiBub2RlKSB7CiAgICBpZiAoIWNvbnRyb2xGbG93T3BlcmF0b3JzLmNvbnRhaW5zKG5vZGUpKSByZXR1cm4gZmFsc2U7CiAgICBIUGhpIHBoaSA9IG5vZGUuam9pbkJsb2NrLnBoaXMuZmlyc3Q7CiAgICBib29sIGF0VXNlU2l0ZSA9IGlzR2VuZXJhdGVBdFVzZVNpdGUocGhpKTsKICAgIC8vIERvbid0IGdlbmVyYXRlIGEgY29uZGl0aW9uYWwgb3BlcmF0b3IgaW4gdGhpcyBzaXR1YXRpb246CiAgICAvLyBpID0gY29uZGl0aW9uID8gYmFyKCkgOiBpOwogICAgLy8gQnV0IGdlbmVyYXRlIHRoaXMgaW5zdGVhZDoKICAgIC8vIGlmIChjb25kaXRpb24pIGkgPSBiYXIoKTsKICAgIC8vIFVzdWFsbHksIHRoZSB2YXJpYWJsZSBuYW1lIGlzIGxvbmdlciB0aGFuICdpZicgYW5kIGl0IHRha2VzIHVwCiAgICAvLyBtb3JlIHNwYWNlIHRvIGR1cGxpY2F0ZSB0aGUgbmFtZS4KICAgIGlmICghYXRVc2VTaXRlICYmCiAgICAgICAgdmFyaWFibGVOYW1lcy5nZXROYW1lKHBoaSkgPT0gdmFyaWFibGVOYW1lcy5nZXROYW1lKHBoaS5pbnB1dHNbMV0pKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmICghYXRVc2VTaXRlKSBkZWZpbmUocGhpKTsKICAgIGNvbnRpbnVlU3ViR3JhcGgobm9kZS5qb2luQmxvY2spOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIGdlbmVyYXRlSWYoSElmIG5vZGUsIEhJZkJsb2NrSW5mb3JtYXRpb24gaW5mbykgewogICAgSFN0YXRlbWVudEluZm9ybWF0aW9uIHRoZW5HcmFwaCA9IGluZm8udGhlbkdyYXBoOwogICAgSFN0YXRlbWVudEluZm9ybWF0aW9uIGVsc2VHcmFwaCA9IGluZm8uZWxzZUdyYXBoOwogICAgSEluc3RydWN0aW9uIGNvbmRpdGlvbiA9IG5vZGUuaW5wdXRzLnNpbmdsZTsKCiAgICBqcy5FeHByZXNzaW9uIHRlc3Q7CiAgICBqcy5TdGF0ZW1lbnQgdGhlblBhcnQ7CiAgICBqcy5TdGF0ZW1lbnQgZWxzZVBhcnQ7CgogICAgSEJhc2ljQmxvY2sgdGhlbkJsb2NrID0gbm9kZS5ibG9jay5zdWNjZXNzb3JzWzBdOwogICAgLy8gSWYgd2UgYmVsaWV2ZSB3ZSB3aWxsIGdlbmVyYXRlIFMxIGFzIGVtcHR5LCBpbnN0ZWFkIG9mCiAgICAvLwogICAgLy8gICAgIGlmIChlKSBTMTsgZWxzZSBTMjsKICAgIC8vCiAgICAvLyB0cnkgdG8gZ2VuZXJhdGUKICAgIC8vCiAgICAvLyAgICAgaWYgKCFlKSBTMjsgZWxzZSBTMTsKICAgIC8vCiAgICAvLyBJdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYCFlYCByYXRoZXIgdGhhbiB0cnkgYW5kIG5lZ2F0ZSBpdCBsYXRlci4KICAgIC8vIFJlY29nbml6ZSBhIHNpbmdsZSB0aGVuLWJsb2NrIHdpdGggbm8gY29kZSBhbmQgbm8gY29udHJvbGxlZCBwaGlzLgogICAgaWYgKGlzR2VuZXJhdGVBdFVzZVNpdGUoY29uZGl0aW9uKSAmJgogICAgICAgIHRoZW5CbG9jay5zdWNjZXNzb3JzLmxlbmd0aCA9PSAxICYmCiAgICAgICAgdGhlbkJsb2NrLnN1Y2Nlc3NvcnMuc2luZ2xlID09IG5vZGUuam9pbkJsb2NrICYmCiAgICAgICAgbm9kZS5qb2luQmxvY2sucGhpcy5pc0VtcHR5ICYmCiAgICAgICAgdGhlbkJsb2NrLmZpcnN0IGlzIEhHb3RvKSB7CiAgICAgIGdlbmVyYXRlTm90KGNvbmRpdGlvbiwgY29uZGl0aW9uLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgdGVzdCA9IHBvcCgpOwogICAgICAvLyBTd2FwIGJyYW5jaGVzIGJ1dCB2aXNpdCBpbiBzYW1lIG9yZGVyIGFzIHJlZ2lzdGVyIGFsbG9jYXRvci4KICAgICAgZWxzZVBhcnQgPSB1bndyYXBTdGF0ZW1lbnQoZ2VuZXJhdGVTdGF0ZW1lbnRzSW5OZXdCbG9jayh0aGVuR3JhcGgpKTsKICAgICAgdGhlblBhcnQgPSB1bndyYXBTdGF0ZW1lbnQoZ2VuZXJhdGVTdGF0ZW1lbnRzSW5OZXdCbG9jayhlbHNlR3JhcGgpKTsKICAgICAgYXNzZXJ0KGVsc2VQYXJ0IGlzIGpzLkVtcHR5U3RhdGVtZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIHVzZShjb25kaXRpb24pOwogICAgICB0ZXN0ID0gcG9wKCk7CiAgICAgIHRoZW5QYXJ0ID0gdW53cmFwU3RhdGVtZW50KGdlbmVyYXRlU3RhdGVtZW50c0luTmV3QmxvY2sodGhlbkdyYXBoKSk7CiAgICAgIGVsc2VQYXJ0ID0gdW53cmFwU3RhdGVtZW50KGdlbmVyYXRlU3RhdGVtZW50c0luTmV3QmxvY2soZWxzZUdyYXBoKSk7CiAgICB9CgogICAganMuU3RhdGVtZW50IGNvZGUgPSBfYXNzZW1ibGVJZlRoZW5FbHNlKHRlc3QsIHRoZW5QYXJ0LCBlbHNlUGFydCk7CiAgICBwdXNoU3RhdGVtZW50KGNvZGUud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIGpzLlN0YXRlbWVudCBfYXNzZW1ibGVJZlRoZW5FbHNlKAogICAgICBqcy5FeHByZXNzaW9uIHRlc3QsIGpzLlN0YXRlbWVudCB0aGVuUGFydCwganMuU3RhdGVtZW50IGVsc2VQYXJ0KSB7CiAgICAvLyBQZWVwaG9sZSByZXdyaXRlczoKICAgIC8vCiAgICAvLyAgICAgaWYgKGUpOyBlbHNlIFM7ICAgLS0+ICAgaWYgKCFlKSBTOwogICAgLy8KICAgIC8vICAgICBpZiAoZSk7ICAgLS0+ICAgZTsKICAgIC8vCiAgICAvLyBUT0RPKHNyYSk6IFdlIG1pZ2h0IGJlIGFibGUgdG8gZG8gYmV0dGVyIHdpdGggcmVzaGFwaW5nIHRoZSBDRkcuCiAgICBpZiAodGhlblBhcnQgaXMganMuRW1wdHlTdGF0ZW1lbnQpIHsKICAgICAgaWYgKGVsc2VQYXJ0IGlzIGpzLkVtcHR5U3RhdGVtZW50KSB7CiAgICAgICAgcmV0dXJuIGpzLkV4cHJlc3Npb25TdGF0ZW1lbnQodGVzdCk7CiAgICAgIH0KICAgICAgdGVzdCA9IGpzLlByZWZpeCgnIScsIHRlc3QpOwogICAgICB2YXIgdGVtcCA9IHRoZW5QYXJ0OwogICAgICB0aGVuUGFydCA9IGVsc2VQYXJ0OwogICAgICBlbHNlUGFydCA9IHRlbXA7CiAgICB9CgogICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnRUb0Jvb2xlYW4pIHsKICAgICAgaWYgKGVsc2VQYXJ0IGlzIGpzLkVtcHR5U3RhdGVtZW50ICYmCiAgICAgICAgICB0aGVuUGFydCBpcyBqcy5FeHByZXNzaW9uU3RhdGVtZW50ICYmCiAgICAgICAgICB0aGVuUGFydC5leHByZXNzaW9uIGlzIGpzLkNhbGwpIHsKICAgICAgICByZXR1cm4ganMuRXhwcmVzc2lvblN0YXRlbWVudCgKICAgICAgICAgICAganMuQmluYXJ5KCcmJicsIHRlc3QsIHRoZW5QYXJ0LmV4cHJlc3Npb24pKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBqcy5JZih0ZXN0LCB0aGVuUGFydCwgZWxzZVBhcnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJZihISWYgbm9kZSkgewogICAgaWYgKHRyeUNvbnRyb2xGbG93T3BlcmF0aW9uKG5vZGUpKSByZXR1cm47CgogICAgSEluc3RydWN0aW9uIGNvbmRpdGlvbiA9IG5vZGUuaW5wdXRzWzBdOwogICAgSElmQmxvY2tJbmZvcm1hdGlvbiBpbmZvID0gbm9kZS5ibG9ja0luZm9ybWF0aW9uLmJvZHk7CgogICAgaWYgKGNvbmRpdGlvbi5pc0NvbnN0YW50KCkpIHsKICAgICAgSENvbnN0YW50IGNvbnN0YW50ID0gY29uZGl0aW9uOwogICAgICBpZiAoY29uc3RhbnQuY29uc3RhbnQuaXNUcnVlKSB7CiAgICAgICAgZ2VuZXJhdGVTdGF0ZW1lbnRzKGluZm8udGhlbkdyYXBoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBnZW5lcmF0ZVN0YXRlbWVudHMoaW5mby5lbHNlR3JhcGgpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBnZW5lcmF0ZUlmKG5vZGUsIGluZm8pOwogICAgfQoKICAgIEhCYXNpY0Jsb2NrIGpvaW5CbG9jayA9IG5vZGUuam9pbkJsb2NrOwogICAgaWYgKGpvaW5CbG9jayAhPSBudWxsICYmICFpZGVudGljYWwoam9pbkJsb2NrLmRvbWluYXRvciwgbm9kZS5ibG9jaykpIHsKICAgICAgLy8gVGhlIGpvaW4gYmxvY2sgaXMgZG9taW5hdGVkIGJ5IGEgYmxvY2sgaW4gb25lIG9mIHRoZSBicmFuY2hlcy4KICAgICAgLy8gVGhlIHN1YmdyYXBoIHRyYXZlcnNhbCBuZXZlciByZWFjaGVkIGl0LCBzbyB3ZSB2aXNpdCBpdCBoZXJlCiAgICAgIC8vIGluc3RlYWQuCiAgICAgIGNvbnRpbnVlU3ViR3JhcGgoam9pbkJsb2NrKTsKICAgIH0KCiAgICAvLyBWaXNpdCBhbGwgdGhlIGRvbWluYXRlZCBibG9ja3MgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIHRoZW4gb3IgZWxzZQogICAgLy8gYnJhbmNoZXMsIGFuZCBpcyBub3QgdGhlIGpvaW4gYmxvY2suCiAgICAvLyBEZXBlbmRpbmcgb24gaG93IHRoZSB0aGVuL2Vsc2UgYnJhbmNoZXMgdGVybWluYXRlCiAgICAvLyAoZS5nLiwgcmV0dXJuL3Rocm93L2JyZWFrKSB0aGVyZSBjYW4gYmUgYW55IG51bWJlciBvZiB0aGVzZS4KICAgIExpc3Q8SEJhc2ljQmxvY2s+IGRvbWluYXRlZCA9IG5vZGUuYmxvY2suZG9taW5hdGVkQmxvY2tzOwogICAgZm9yIChpbnQgaSA9IDI7IGkgPCBkb21pbmF0ZWQubGVuZ3RoOyBpKyspIHsKICAgICAgY29udGludWVTdWJHcmFwaChkb21pbmF0ZWRbaV0pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVyY2VwdG9yKEhJbnRlcmNlcHRvciBub2RlKSB7CiAgICBpZiAobm9kZS5pc0NvbmRpdGlvbmFsQ29uc3RhbnRJbnRlcmNlcHRvcikgewogICAgICBhc3NlcnQobm9kZS5pbnB1dHMubGVuZ3RoID09IDIpOwogICAgICB1c2Uobm9kZS5yZWNlaXZlcik7CiAgICAgIGpzLkV4cHJlc3Npb24gcmVjZWl2ZXJFeHByZXNzaW9uID0gcG9wKCk7CiAgICAgIHVzZShub2RlLmNvbmRpdGlvbmFsQ29uc3RhbnRJbnRlcmNlcHRvcik7CiAgICAgIGpzLkV4cHJlc3Npb24gY29uc3RhbnQgPSBwb3AoKTsKICAgICAgcHVzaChqcy5qcygnIyAmJiAjJywgW3JlY2VpdmVyRXhwcmVzc2lvbiwgY29uc3RhbnRdKSk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQobm9kZS5pbnB1dHMubGVuZ3RoID09IDEpOwogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTcGVjaWFsaXplZEdldEludGVyY2VwdG9yKG5vZGUuaW50ZXJjZXB0ZWRDbGFzc2VzKTsKICAgICAganMuTmFtZSBuYW1lID0gX25hbWVyLm5hbWVGb3JHZXRJbnRlcmNlcHRvcihub2RlLmludGVyY2VwdGVkQ2xhc3Nlcyk7CiAgICAgIGpzLkV4cHJlc3Npb24gaXNvbGF0ZSA9IF9uYW1lcgogICAgICAgICAgLnJlYWRHbG9iYWxPYmplY3RGb3JMaWJyYXJ5KF9jb21tb25FbGVtZW50cy5pbnRlcmNlcHRvcnNMaWJyYXJ5KTsKICAgICAgdXNlKG5vZGUucmVjZWl2ZXIpOwogICAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IDxqcy5FeHByZXNzaW9uPltwb3AoKV07CiAgICAgIHB1c2goanMKICAgICAgICAgIC5wcm9wZXJ0eUNhbGwoaXNvbGF0ZSwgbmFtZSwgYXJndW1lbnRzKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclVzZUludGVyY2VwdG9yKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEludm9rZUR5bmFtaWNNZXRob2QoSEludm9rZUR5bmFtaWNNZXRob2Qgbm9kZSkgewogICAgdXNlKG5vZGUucmVjZWl2ZXIpOwogICAganMuRXhwcmVzc2lvbiBvYmplY3QgPSBwb3AoKTsKICAgIFN0cmluZyBtZXRob2ROYW1lOwogICAgTGlzdDxqcy5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSB2aXNpdEFyZ3VtZW50cyhub2RlLmlucHV0cyk7CiAgICBNZW1iZXJFbnRpdHkgdGFyZ2V0ID0gbm9kZS5lbGVtZW50OwoKICAgIC8vIFRPRE8oaGVyaHV0KTogVGhlIG5hbWVyIHNob3VsZCByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIGJhY2tlbmRuYW1lIGhlcmUuCiAgICBpZiAodGFyZ2V0ICE9IG51bGwgJiYgIW5vZGUuaXNJbnRlcmNlcHRlZENhbGwpIHsKICAgICAgaWYgKHRhcmdldCA9PSBfY29tbW9uRWxlbWVudHMuanNBcnJheUFkZCkgewogICAgICAgIG1ldGhvZE5hbWUgPSAncHVzaCc7CiAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09IF9jb21tb25FbGVtZW50cy5qc0FycmF5UmVtb3ZlTGFzdCkgewogICAgICAgIG1ldGhvZE5hbWUgPSAncG9wJzsKICAgICAgfSBlbHNlIGlmIChfY29tbW9uRWxlbWVudHMuaXNKc1N0cmluZ1NwbGl0KHRhcmdldCkpIHsKICAgICAgICBtZXRob2ROYW1lID0gJ3NwbGl0JzsKICAgICAgICAvLyBTcGxpdCByZXR1cm5zIGEgTGlzdCwgc28gd2UgbWFrZSBzdXJlIHRoZSBiYWNrZW5kIGtub3dzIHRoZQogICAgICAgIC8vIGxpc3QgY2xhc3MgaXMgaW5zdGFudGlhdGVkLgogICAgICAgIF9yZWdpc3RyeQogICAgICAgICAgICAvLyBpZ25vcmU6ZGVwcmVjYXRlZF9tZW1iZXJfdXNlX2Zyb21fc2FtZV9wYWNrYWdlCiAgICAgICAgICAgIC5yZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKF9jb21tb25FbGVtZW50cy5saXN0Q2xhc3MpOwogICAgICB9IGVsc2UgaWYgKF9uYXRpdmVEYXRhLmlzTmF0aXZlTWVtYmVyKHRhcmdldCkgJiYKICAgICAgICAgIHRhcmdldC5pc0Z1bmN0aW9uICYmCiAgICAgICAgICAhbm9kZS5pc0ludGVyY2VwdGVkQ2FsbCkgewogICAgICAgIC8vIEEgZGlyZWN0IChpLmUuIG5vbi1pbnRlcmNlcHRvcikgbmF0aXZlIGNhbGwgaXMgdGhlIHJlc3VsdCBvZgogICAgICAgIC8vIG9wdGltaXphdGlvbi4gIFRoZSBvcHRpbWl6YXRpb24gZW5zdXJlcyBhbnkgdHlwZSBjaGVja3Mgb3IKICAgICAgICAvLyBjb252ZXJzaW9ucyBoYXZlIGJlZW4gc2F0aXNmaWVkLgogICAgICAgIG1ldGhvZE5hbWUgPSBfbmF0aXZlRGF0YS5nZXRGaXhlZEJhY2tlbmROYW1lKHRhcmdldCk7CiAgICAgIH0KICAgIH0KCiAgICBqcy5OYW1lIG1ldGhvZExpdGVyYWw7CiAgICBpZiAobWV0aG9kTmFtZSA9PSBudWxsKSB7CiAgICAgIG1ldGhvZExpdGVyYWwgPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUobm9kZS5zZWxlY3Rvcik7CiAgICAgIHJlZ2lzdGVyTWV0aG9kSW52b2tlKG5vZGUpOwogICAgfSBlbHNlIHsKICAgICAgbWV0aG9kTGl0ZXJhbCA9IF9uYW1lci5hc05hbWUobWV0aG9kTmFtZSk7CiAgICB9CiAgICBwdXNoKGpzCiAgICAgICAgLnByb3BlcnR5Q2FsbChvYmplY3QsIG1ldGhvZExpdGVyYWwsIGFyZ3VtZW50cykKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnZva2VDb25zdHJ1Y3RvckJvZHkoSEludm9rZUNvbnN0cnVjdG9yQm9keSBub2RlKSB7CiAgICB1c2Uobm9kZS5pbnB1dHNbMF0pOwogICAganMuRXhwcmVzc2lvbiBvYmplY3QgPSBwb3AoKTsKICAgIGpzLk5hbWUgbWV0aG9kTmFtZSA9IF9uYW1lci5pbnN0YW5jZU1ldGhvZE5hbWUobm9kZS5lbGVtZW50KTsKICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gdmlzaXRBcmd1bWVudHMobm9kZS5pbnB1dHMpOwogICAgcHVzaChqcwogICAgICAgIC5wcm9wZXJ0eUNhbGwob2JqZWN0LCBtZXRob2ROYW1lLCBhcmd1bWVudHMpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5jb25zdHJ1Y3RvckJvZHlJbnZva2UoCiAgICAgICAgbm9kZS5lbGVtZW50LCBuZXcgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKGFyZ3VtZW50cy5sZW5ndGgpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW52b2tlR2VuZXJhdG9yQm9keShISW52b2tlR2VuZXJhdG9yQm9keSBub2RlKSB7CiAgICBKR2VuZXJhdG9yQm9keSBlbGVtZW50ID0gbm9kZS5lbGVtZW50OwogICAgaWYgKGVsZW1lbnQuaXNJbnN0YW5jZU1lbWJlcikgewogICAgICB1c2Uobm9kZS5pbnB1dHNbMF0pOwogICAgICBqcy5FeHByZXNzaW9uIG9iamVjdCA9IHBvcCgpOwogICAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IHZpc2l0QXJndW1lbnRzKG5vZGUuaW5wdXRzKTsKICAgICAganMuTmFtZSBtZXRob2ROYW1lID0gX25hbWVyLmluc3RhbmNlTWV0aG9kTmFtZShlbGVtZW50KTsKICAgICAgcHVzaChqcwogICAgICAgICAgLnByb3BlcnR5Q2FsbChvYmplY3QsIG1ldGhvZE5hbWUsIGFyZ3VtZW50cykKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhlbGVtZW50KSk7CiAgICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gdmlzaXRBcmd1bWVudHMobm9kZS5pbnB1dHMsIHN0YXJ0OiAwKTsKICAgICAgcHVzaChuZXcganMuQ2FsbChwb3AoKSwgYXJndW1lbnRzLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KCiAgICBfcmVnaXN0cnkKICAgICAgICAucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5nZW5lcmF0b3JCb2R5SW52b2tlKG5vZGUuZWxlbWVudCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE9uZVNob3RJbnRlcmNlcHRvcihIT25lU2hvdEludGVyY2VwdG9yIG5vZGUpIHsKICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gdmlzaXRBcmd1bWVudHMobm9kZS5pbnB1dHMpOwogICAganMuRXhwcmVzc2lvbiBpc29sYXRlID0KICAgICAgICBfbmFtZXIucmVhZEdsb2JhbE9iamVjdEZvckxpYnJhcnkoX2NvbW1vbkVsZW1lbnRzLmludGVyY2VwdG9yc0xpYnJhcnkpOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBub2RlLnNlbGVjdG9yOwogICAgU2V0PENsYXNzRW50aXR5PiBjbGFzc2VzID0KICAgICAgICBfaW50ZXJjZXB0b3JEYXRhLmdldEludGVyY2VwdGVkQ2xhc3Nlc09uKHNlbGVjdG9yLm5hbWUsIF9jbG9zZWRXb3JsZCk7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJPbmVTaG90SW50ZXJjZXB0b3Ioc2VsZWN0b3IpOwogICAganMuTmFtZSBtZXRob2ROYW1lID0gX25hbWVyLm5hbWVGb3JPbmVTaG90SW50ZXJjZXB0b3Ioc2VsZWN0b3IsIGNsYXNzZXMpOwogICAgcHVzaChqcwogICAgICAgIC5wcm9wZXJ0eUNhbGwoaXNvbGF0ZSwgbWV0aG9kTmFtZSwgYXJndW1lbnRzKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgaWYgKHNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgIHJlZ2lzdGVyR2V0dGVyKG5vZGUpOwogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc1NldHRlcikgewogICAgICByZWdpc3RlclNldHRlcihub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlZ2lzdGVyTWV0aG9kSW52b2tlKG5vZGUpOwogICAgfQogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyVXNlSW50ZXJjZXB0b3IoKTsKICB9CgogIEFic3RyYWN0VmFsdWUgZ2V0T3B0aW1pemVkU2VsZWN0b3JGb3IoCiAgICAgIEhJbnZva2VEeW5hbWljIG5vZGUsIFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIGlmIChub2RlLmVsZW1lbnQgIT0gbnVsbCkgewogICAgICAvLyBDcmVhdGUgYW4gYXJ0aWZpY2lhbCB0eXBlIG1hc2sgdG8gbWFrZSBzdXJlIG9ubHkKICAgICAgLy8gW25vZGUuZWxlbWVudF0gd2lsbCBiZSBlbnF1ZXVlZC4gV2UncmUgbm90IHVzaW5nIHRoZSByZWNlaXZlcgogICAgICAvLyB0eXBlIGJlY2F1c2Ugb3VyIG9wdGltaXphdGlvbnMgbWlnaHQgZW5kIHVwIGluIGEgc3RhdGUgd2hlcmUgdGhlCiAgICAgIC8vIGludm9rZSBkeW5hbWljIGtub3dzIG1vcmUgdGhhbiB0aGUgcmVjZWl2ZXIuCiAgICAgIENsYXNzRW50aXR5IGVuY2xvc2luZyA9IG5vZGUuZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgICAgaWYgKF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZChlbmNsb3NpbmcpKSB7CiAgICAgICAgcmV0dXJuIF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU5vbk51bGxFeGFjdChlbmNsb3NpbmcpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRoZSBlbGVtZW50IGlzIG1peGVkIGluIHNvIGEgbm9uLW51bGwgc3VidHlwZSBtYXNrIGlzIHRoZSBtb3N0CiAgICAgICAgLy8gcHJlY2lzZSB3ZSBoYXZlLgogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmlzVXNlZEFzTWl4aW4oZW5jbG9zaW5nKSwKICAgICAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgICAgICBub2RlLAogICAgICAgICAgICAgICAgIkVsZW1lbnQgJHtub2RlLmVsZW1lbnR9IGZyb20gJGVuY2xvc2luZyBleHBlY3RlZCAiCiAgICAgICAgICAgICAgICAidG8gYmUgbWl4ZWQgaW4uIikpOwogICAgICAgIHJldHVybiBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsU3VidHlwZShlbmNsb3NpbmcpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbWFzayA/PyBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZTsKICB9CgogIHZvaWQgcmVnaXN0ZXJNZXRob2RJbnZva2UoSEludm9rZUR5bmFtaWMgbm9kZSkgewogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBub2RlLnNlbGVjdG9yOwoKICAgIC8vIElmIHdlIGRvbid0IGtub3cgd2hhdCB3ZSdyZSBjYWxsaW5nIG9yIGlmIHdlIGFyZSBjYWxsaW5nIGEgZ2V0dGVyLAogICAgLy8gd2UgbmVlZCB0byByZWdpc3RlciB0aGF0IGZhY3QgdGhhdCB3ZSBtYXkgYmUgY2FsbGluZyBhIGNsb3N1cmUKICAgIC8vIHdpdGggdGhlIHNhbWUgYXJndW1lbnRzLgogICAgTWVtYmVyRW50aXR5IHRhcmdldCA9IG5vZGUuZWxlbWVudDsKICAgIGlmICgodGFyZ2V0ID09IG51bGwgfHwgdGFyZ2V0LmlzR2V0dGVyKSAmJgogICAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4ga2VybmVsIGFkZHMgYW4gYGlzRnVuY3Rpb25DYWxsYAogICAgICAgIC8vIGZsYWcgdG8gW2lyLk1ldGhvZEludm9jYXRpb25dLiBDdXJyZW50bHkgd2UgY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZQogICAgICAgIC8vIGJldHdlZW4gYSBkeW5hbWljIGNhbGwgYW5kIGEgZnVuY3Rpb24gY2FsbCwgYnV0IHdlIGF0IGxlYXN0IGtub3cgdGhhdAogICAgICAgIC8vIHRvU3RyaW5nIGlzIG5vdCBhIGdldHRlciAoYSBwb3RlbnRpYWwgZnVuY3Rpb24gY2FsbCBzaG91bGQgb3RoZXJ3aXNlCiAgICAgICAgLy8gaGF2ZSBiZWVuIHJlZ2lzdGVyIGZvciBzdHJpbmcgY29uY2F0ZW5hdGlvbikuCiAgICAgICAgc2VsZWN0b3IgIT0gU2VsZWN0b3JzLnRvU3RyaW5nXykgewogICAgICAvLyBUT0RPKGthc3BlcmwpOiBJZiB3ZSBoYXZlIGEgdHlwZWQgc2VsZWN0b3IgZm9yIHRoZSBjYWxsLCB3ZQogICAgICAvLyBtYXkga25vdyBzb21ldGhpbmcgYWJvdXQgdGhlIHR5cGVzIG9mIGNsb3N1cmVzIHRoYXQgbmVlZAogICAgICAvLyB0aGUgc3BlY2lmaWMgY2xvc3VyZSBjYWxsIG1ldGhvZC4KICAgICAgU2VsZWN0b3IgY2FsbCA9IG5ldyBTZWxlY3Rvci5jYWxsQ2xvc3VyZUZyb20oc2VsZWN0b3IpOwogICAgICBfcmVnaXN0cnkKICAgICAgICAgIC5yZWdpc3RlckR5bmFtaWNVc2UobmV3IER5bmFtaWNVc2UoY2FsbCwgbnVsbCwgbm9kZS50eXBlQXJndW1lbnRzKSk7CiAgICB9CiAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHsKICAgICAgLy8gVGhpcyBpcyBhIGR5bmFtaWMgaW52b2NhdGlvbiB3aGljaCB3ZSBoYXZlIGZvdW5kIHRvIGhhdmUgYSBzaW5nbGUKICAgICAgLy8gdGFyZ2V0IGJ1dCBmb3Igc29tZSByZWFzb24gaGF2ZW4ndCBpbmxpbmVkLiBXZSBhcmUgX3N0aWxsXyBhY2Nlc3NpbmcKICAgICAgLy8gdGhlIHRhcmdldCBkeW5hbWljYWxseSBidXQgd2UgZG9uJ3QgbmVlZCB0byBlbnF1ZXVlIG1vcmUgdGhhbiB0YXJnZXQKICAgICAgLy8gZm9yIHRoaXMgdG8gd29yay4KICAgICAgYXNzZXJ0KHNlbGVjdG9yLmFwcGxpZXModGFyZ2V0KSwKICAgICAgICAgIGZhaWxlZEF0KG5vZGUsICckc2VsZWN0b3IgZG9lcyBub3QgYXBwbHkgdG8gJHRhcmdldCcpKTsKICAgICAgYXNzZXJ0KCFzZWxlY3Rvci5pc0dldHRlciAmJiAhc2VsZWN0b3IuaXNTZXR0ZXIsCiAgICAgICAgICAiVW5leHBlY3RlZCBkaXJlY3QgaW52b2NhdGlvbiBzZWxlY3RvcjogJHNlbGVjdG9yLiIpOwogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5kaXJlY3RJbnZva2UoCiAgICAgICAgICB0YXJnZXQsIHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmUsIG5vZGUudHlwZUFyZ3VtZW50cykpOwogICAgfSBlbHNlIHsKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0KICAgICAgICAgIGdldE9wdGltaXplZFNlbGVjdG9yRm9yKG5vZGUsIHNlbGVjdG9yLCBub2RlLnJlY2VpdmVyVHlwZSk7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlckR5bmFtaWNVc2UoCiAgICAgICAgICBuZXcgRHluYW1pY1VzZShzZWxlY3RvciwgbWFzaywgbm9kZS50eXBlQXJndW1lbnRzKSk7CiAgICB9CiAgfQoKICB2b2lkIHJlZ2lzdGVyU2V0dGVyKEhJbnZva2VEeW5hbWljIG5vZGUsIHtib29sIG5lZWRzQ2hlY2s6IGZhbHNlfSkgewogICAgaWYgKG5vZGUuZWxlbWVudCBpcyBGaWVsZEVudGl0eSAmJiAhbmVlZHNDaGVjaykgewogICAgICAvLyBUaGlzIGlzIGEgZHluYW1pYyB1cGRhdGUgd2hpY2ggd2UgaGF2ZSBmb3VuZCB0byBoYXZlIGEgc2luZ2xlCiAgICAgIC8vIHRhcmdldCBidXQgZm9yIHNvbWUgcmVhc29uIGhhdmVuJ3QgaW5saW5lZC4gV2UgYXJlIF9zdGlsbF8gYWNjZXNzaW5nCiAgICAgIC8vIHRoZSB0YXJnZXQgZHluYW1pY2FsbHkgYnV0IHdlIGRvbid0IG5lZWQgdG8gZW5xdWV1ZSBtb3JlIHRoYW4gdGFyZ2V0CiAgICAgIC8vIGZvciB0aGlzIHRvIHdvcmsuCiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmRpcmVjdFNldChub2RlLmVsZW1lbnQpKTsKICAgIH0gZWxzZSB7CiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gbm9kZS5zZWxlY3RvcjsKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0KICAgICAgICAgIGdldE9wdGltaXplZFNlbGVjdG9yRm9yKG5vZGUsIHNlbGVjdG9yLCBub2RlLnJlY2VpdmVyVHlwZSk7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlckR5bmFtaWNVc2UoCiAgICAgICAgICBuZXcgRHluYW1pY1VzZShzZWxlY3RvciwgbWFzaywgbm9kZS50eXBlQXJndW1lbnRzKSk7CiAgICB9CiAgfQoKICB2b2lkIHJlZ2lzdGVyR2V0dGVyKEhJbnZva2VEeW5hbWljIG5vZGUpIHsKICAgIGlmIChub2RlLmVsZW1lbnQgIT0gbnVsbCAmJgogICAgICAgIChub2RlLmVsZW1lbnQuaXNHZXR0ZXIgfHwgbm9kZS5lbGVtZW50LmlzRmllbGQpKSB7CiAgICAgIC8vIFRoaXMgaXMgYSBkeW5hbWljIHJlYWQgd2hpY2ggd2UgaGF2ZSBmb3VuZCB0byBoYXZlIGEgc2luZ2xlIHRhcmdldCBidXQKICAgICAgLy8gZm9yIHNvbWUgcmVhc29uIGhhdmVuJ3QgaW5saW5lZC4gV2UgYXJlIF9zdGlsbF8gYWNjZXNzaW5nIHRoZSB0YXJnZXQKICAgICAgLy8gZHluYW1pY2FsbHkgYnV0IHdlIGRvbid0IG5lZWQgdG8gZW5xdWV1ZSBtb3JlIHRoYW4gdGFyZ2V0IGZvciB0aGlzIHRvCiAgICAgIC8vIHdvcmsuIFRoZSB0ZXN0IGFib3ZlIGV4Y2x1ZGVzIG5vbi1nZXR0ZXIgZnVuY3Rpb25zIHNpbmNlIHRoZSBlbGVtZW50CiAgICAgIC8vIHJlcHJlc2VudHMgdHdvIHRhcmdldHMgLSBhIHRlYXJvZmYgZ2V0dGVyIGFuZCB0aGUgdG9ybi1vZmYgbWV0aG9kLgogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5kaXJlY3RHZXQobm9kZS5lbGVtZW50KSk7CiAgICB9IGVsc2UgewogICAgICBTZWxlY3RvciBzZWxlY3RvciA9IG5vZGUuc2VsZWN0b3I7CiAgICAgIEFic3RyYWN0VmFsdWUgbWFzayA9CiAgICAgICAgICBnZXRPcHRpbWl6ZWRTZWxlY3RvckZvcihub2RlLCBzZWxlY3Rvciwgbm9kZS5yZWNlaXZlclR5cGUpOwogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJEeW5hbWljVXNlKAogICAgICAgICAgbmV3IER5bmFtaWNVc2Uoc2VsZWN0b3IsIG1hc2ssIG5vZGUudHlwZUFyZ3VtZW50cykpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJbnZva2VEeW5hbWljU2V0dGVyKEhJbnZva2VEeW5hbWljU2V0dGVyIG5vZGUpIHsKICAgIHVzZShub2RlLnJlY2VpdmVyKTsKICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5pbnZvY2F0aW9uTmFtZShub2RlLnNlbGVjdG9yKTsKICAgIHB1c2goanMKICAgICAgICAucHJvcGVydHlDYWxsKHBvcCgpLCBuYW1lLCB2aXNpdEFyZ3VtZW50cyhub2RlLmlucHV0cykpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICByZWdpc3RlclNldHRlcihub2RlLCBuZWVkc0NoZWNrOiBub2RlLm5lZWRzQ2hlY2spOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRJbnZva2VEeW5hbWljR2V0dGVyKEhJbnZva2VEeW5hbWljR2V0dGVyIG5vZGUpIHsKICAgIHVzZShub2RlLnJlY2VpdmVyKTsKICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5pbnZvY2F0aW9uTmFtZShub2RlLnNlbGVjdG9yKTsKICAgIHB1c2goanMKICAgICAgICAucHJvcGVydHlDYWxsKHBvcCgpLCBuYW1lLCB2aXNpdEFyZ3VtZW50cyhub2RlLmlucHV0cykpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICByZWdpc3RlckdldHRlcihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW52b2tlQ2xvc3VyZShISW52b2tlQ2xvc3VyZSBub2RlKSB7CiAgICBTZWxlY3RvciBjYWxsID0gbmV3IFNlbGVjdG9yLmNhbGxDbG9zdXJlRnJvbShub2RlLnNlbGVjdG9yKTsKICAgIHVzZShub2RlLnJlY2VpdmVyKTsKICAgIHB1c2goanMKICAgICAgICAucHJvcGVydHlDYWxsKAogICAgICAgICAgICBwb3AoKSwgX25hbWVyLmludm9jYXRpb25OYW1lKGNhbGwpLCB2aXNpdEFyZ3VtZW50cyhub2RlLmlucHV0cykpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAvLyBUT0RPKGthc3BlcmwpOiBJZiB3ZSBoYXZlIGEgdHlwZWQgc2VsZWN0b3IgZm9yIHRoZSBjYWxsLCB3ZQogICAgLy8gbWF5IGtub3cgc29tZXRoaW5nIGFib3V0IHRoZSB0eXBlcyBvZiBjbG9zdXJlcyB0aGF0IG5lZWQKICAgIC8vIHRoZSBzcGVjaWZpYyBjbG9zdXJlIGNhbGwgbWV0aG9kLgogICAgX3JlZ2lzdHJ5CiAgICAgICAgLnJlZ2lzdGVyRHluYW1pY1VzZShuZXcgRHluYW1pY1VzZShjYWxsLCBudWxsLCBub2RlLnR5cGVBcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW52b2tlU3RhdGljKEhJbnZva2VTdGF0aWMgbm9kZSkgewogICAgTWVtYmVyRW50aXR5IGVsZW1lbnQgPSBub2RlLmVsZW1lbnQ7CiAgICBub2RlLmluc3RhbnRpYXRlZFR5cGVzPy5mb3JFYWNoKF9yZWdpc3RyeS5yZWdpc3Rlckluc3RhbnRpYXRpb24pOwoKICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gdmlzaXRBcmd1bWVudHMobm9kZS5pbnB1dHMsIHN0YXJ0OiAwKTsKCiAgICBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuY2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IpIHsKICAgICAgLy8gTWFudWFsbHkgaW5saW5lIHRoZSBbY2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3JdIGZ1bmN0aW9uLiAgVGhpcwogICAgICAvLyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCBmcm9tIGEgZm9yLWxvb3AgdXBkYXRlLiAgSWRlYWxseSB3ZSB3b3VsZCBqdXN0CiAgICAgIC8vIGdlbmVyYXRlIHRoZSBjb25kaXRpb25hbGNvbnRyb2wgZmxvdyBpbiB0aGUgYnVpbGRlciBidXQgaXQgYWRkcyBiYXNpYwogICAgICAvLyBibG9ja3MgaW4gdGhlIGxvb3AgdXBkYXRlIHRoYXQgaW50ZXJmZXJlIHdpdGggb3RoZXIgb3B0aW1pemF0aW9ucyBhbmQKICAgICAgLy8gY29uZnVzZXMgbG9vcCByZWNvZ25pdGlvbi4KCiAgICAgIGFzc2VydChhcmd1bWVudHMubGVuZ3RoID09IDIpOwogICAgICBGdW5jdGlvbkVudGl0eSB0aHJvd0Z1bmN0aW9uID0KICAgICAgICAgIF9jb21tb25FbGVtZW50cy50aHJvd0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcjsKICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UodGhyb3dGdW5jdGlvbiwgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSk7CgogICAgICAvLyBDYWxsaW5nIHVzaW5nIGAoMCwgIykoIylgIGluc3RlYWQgb2YgYCMoIylgIHNlcGFyYXRlcyB0aGUgcHJvcGVydHkgbG9hZAogICAgICAvLyBvZiB0aGUgc3RhdGljIGZ1bmN0aW9uIGFjY2VzcyBmcm9tIHRoZSBjYWxsLiAgRm9yIHNvbWUgcmVhc29uIHRoaXMKICAgICAgLy8gaGVscHMgVjggc2VlIHRoYXQgdGhlIGNhbGwgbmV2ZXIgaGFwcGVucyBzbyBWOCBtYWtlcyB0aGUgY2FsbCBhCiAgICAgIC8vIGRlb3B0aW1pemF0aW9uLiBUaGlzIHJlbW92ZXMgdGhlIGNhbGwgZnJvbSB0aGUgb3B0aW1pemVkIGxvb3AsIG1ha2luZwogICAgICAvLyBtb3JlIG9wdGltaXphdGlvbnMgYXZhaWxhYmxlIHRvIHRoZSBsb29wLiAgVGhpcyBmb3JtIGlzIDUwJSBmYXN0ZXIgb24KICAgICAgLy8gc29tZSBzbWFsbCBsb29wLCBhbG1vc3QgYXMgZmFzdCBhcyBsb29wcyB3aXRoIG5vIGNvbmN1cnJlbnQKICAgICAgLy8gbW9kaWZpY2F0aW9uIGNoZWNrLgoKICAgICAgLy8gQ3JlYXRlIFtyaWdodF0gYXMgYSBzZXBhcmF0ZSBKUyBub2RlIHRvIGdpdmUgdGhlIGNhbGwgYSBzb3VyY2UKICAgICAgLy8gbG9jYXRpb24uCiAgICAgIGpzLkV4cHJlc3Npb24gcmlnaHQgPSBqcy5qcygnKDAsICMpKCMpJywgWwogICAgICAgIF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKHRocm93RnVuY3Rpb24pLAogICAgICAgIGFyZ3VtZW50c1sxXQogICAgICBdKS53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIHB1c2goanMuanMoJyMgfHwgIycsIFthcmd1bWVudHNbMF0sIHJpZ2h0XSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKAogICAgICAgICAgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfSBlbHNlIHsKICAgICAgU3RhdGljVXNlIHN0YXRpY1VzZTsKICAgICAgaWYgKGVsZW1lbnQuaXNDb25zdHJ1Y3RvcikgewogICAgICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBDYWxsU3RydWN0dXJlLnVubmFtZWQoCiAgICAgICAgICAgIGFyZ3VtZW50cy5sZW5ndGgsIG5vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgICAgIHN0YXRpY1VzZSA9IG5ldyBTdGF0aWNVc2UuY29uc3RydWN0b3JJbnZva2UoZWxlbWVudCwgY2FsbFN0cnVjdHVyZSk7CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5pc0dldHRlcikgewogICAgICAgIHN0YXRpY1VzZSA9IG5ldyBTdGF0aWNVc2Uuc3RhdGljR2V0KGVsZW1lbnQpOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNTZXR0ZXIpIHsKICAgICAgICBzdGF0aWNVc2UgPSBuZXcgU3RhdGljVXNlLnN0YXRpY1NldChlbGVtZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoZWxlbWVudC5pc0Z1bmN0aW9uKTsKICAgICAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKAogICAgICAgICAgICBhcmd1bWVudHMubGVuZ3RoLCBub2RlLnR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgICAgICBzdGF0aWNVc2UgPSBuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICAgICAgZWxlbWVudCwgY2FsbFN0cnVjdHVyZSwgbm9kZS50eXBlQXJndW1lbnRzKTsKICAgICAgfQogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2Uoc3RhdGljVXNlKTsKICAgICAgcHVzaChfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhlbGVtZW50KSk7CiAgICAgIHB1c2gobmV3IGpzLkNhbGwocG9wKCksIGFyZ3VtZW50cywKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEludm9rZVN1cGVyKEhJbnZva2VTdXBlciBub2RlKSB7CiAgICBNZW1iZXJFbnRpdHkgc3VwZXJFbGVtZW50ID0gbm9kZS5lbGVtZW50OwogICAgQ2xhc3NFbnRpdHkgc3VwZXJDbGFzcyA9IHN1cGVyRWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gbm9kZS5zZWxlY3RvcjsKICAgIGJvb2wgdXNlQWxpYXNlZFN1cGVyID0gY2FuVXNlQWxpYXNlZFN1cGVyTWVtYmVyKHN1cGVyRWxlbWVudCwgc2VsZWN0b3IpOwogICAgaWYgKHNlbGVjdG9yLmlzR2V0dGVyKSB7CiAgICAgIGlmIChzdXBlckVsZW1lbnQuaXNGaWVsZCB8fCBzdXBlckVsZW1lbnQuaXNHZXR0ZXIpIHsKICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlckdldChzdXBlckVsZW1lbnQpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlclRlYXJPZmYobm9kZS5lbGVtZW50KSk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNTZXR0ZXIpIHsKICAgICAgaWYgKHN1cGVyRWxlbWVudC5pc0ZpZWxkKSB7CiAgICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3VwZXJGaWVsZFNldChzdXBlckVsZW1lbnQpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoc3VwZXJFbGVtZW50LmlzU2V0dGVyKTsKICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlclNldHRlclNldChzdXBlckVsZW1lbnQpKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKHVzZUFsaWFzZWRTdXBlcikgewogICAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVySW52b2tlKAogICAgICAgICAgICBzdXBlckVsZW1lbnQsIG5ldyBDYWxsU3RydWN0dXJlLnVubmFtZWQobm9kZS5pbnB1dHMubGVuZ3RoKSkpOwogICAgICB9IGVsc2UgewogICAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVySW52b2tlKAogICAgICAgICAgICBzdXBlckVsZW1lbnQsIG5ldyBDYWxsU3RydWN0dXJlLnVubmFtZWQobm9kZS5pbnB1dHMubGVuZ3RoIC0gMSkpKTsKICAgICAgfQogICAgfQoKICAgIGlmIChzdXBlckVsZW1lbnQuaXNGaWVsZCkgewogICAgICBqcy5OYW1lIGZpZWxkTmFtZSA9IF9uYW1lci5pbnN0YW5jZUZpZWxkUHJvcGVydHlOYW1lKHN1cGVyRWxlbWVudCk7CiAgICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICAgIGpzLlByb3BlcnR5QWNjZXNzIGFjY2VzcyA9IG5ldyBqcy5Qcm9wZXJ0eUFjY2Vzcyhwb3AoKSwgZmllbGROYW1lKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgaWYgKG5vZGUuaXNTZXR0ZXIpIHsKICAgICAgICB1c2Uobm9kZS52YWx1ZSk7CiAgICAgICAgcHVzaChuZXcganMuQXNzaWdubWVudChhY2Nlc3MsIHBvcCgpKQogICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwdXNoKGFjY2Vzcyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmICghdXNlQWxpYXNlZFN1cGVyKSB7CiAgICAgICAganMuTmFtZSBtZXRob2ROYW1lOwogICAgICAgIGlmIChzZWxlY3Rvci5pc0dldHRlciAmJiAhc3VwZXJFbGVtZW50LmlzR2V0dGVyKSB7CiAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgdGVhci1vZmYsIHJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgYSB0ZWFyLW9mZiBjbG9zdXJlCiAgICAgICAgICAvLyB3aWxsIGJlIGNyZWF0ZWQsIGFuZCB0aGF0IHRoaXMgdGVhci1vZmYgbXVzdCBieXBhc3Mgb3JkaW5hcnkKICAgICAgICAgIC8vIGRpc3BhdGNoIHRvIGVuc3VyZSB0aGUgc3VwZXIgbWV0aG9kIGlzIGludm9rZWQuCiAgICAgICAgICBGdW5jdGlvbkVudGl0eSBoZWxwZXIgPSBfY29tbW9uRWxlbWVudHMuY2xvc3VyZUZyb21UZWFyT2ZmOwogICAgICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgICAgICAgIGhlbHBlciwKICAgICAgICAgICAgICBuZXcgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKAogICAgICAgICAgICAgICAgICBub2RlLmlucHV0cy5sZW5ndGgsIG5vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGgpLAogICAgICAgICAgICAgIG5vZGUudHlwZUFyZ3VtZW50cykpOwogICAgICAgICAgbWV0aG9kTmFtZSA9IF9uYW1lci5pbnZvY2F0aW9uTmFtZShzZWxlY3Rvcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1ldGhvZE5hbWUgPSBfbmFtZXIuaW5zdGFuY2VNZXRob2ROYW1lKHN1cGVyRWxlbWVudCk7CiAgICAgICAgfQoKICAgICAgICBwdXNoKGpzLmpzKCcjLiMuY2FsbCgjKScsIFsKICAgICAgICAgIF9lbWl0dGVyLnByb3RvdHlwZUFjY2VzcyhzdXBlckNsYXNzLCBoYXNCZWVuSW5zdGFudGlhdGVkOiB0cnVlKSwKICAgICAgICAgIG1ldGhvZE5hbWUsCiAgICAgICAgICB2aXNpdEFyZ3VtZW50cyhub2RlLmlucHV0cywgc3RhcnQ6IDApCiAgICAgICAgXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB1c2Uobm9kZS5yZWNlaXZlcik7CiAgICAgICAgcHVzaChqcy5qcygnIy4jKCMpJywgWwogICAgICAgICAgcG9wKCksCiAgICAgICAgICBfbmFtZXIuYWxpYXNlZFN1cGVyTWVtYmVyUHJvcGVydHlOYW1lKHN1cGVyRWxlbWVudCksCiAgICAgICAgICB2aXNpdEFyZ3VtZW50cyhub2RlLmlucHV0cywgc3RhcnQ6IDEpCiAgICAgICAgXSkgLy8gU2tpcCByZWNlaXZlciBhcmd1bWVudC4KICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0RmllbGRHZXQoSEZpZWxkR2V0IG5vZGUpIHsKICAgIHVzZShub2RlLnJlY2VpdmVyKTsKICAgIGlmIChub2RlLmlzTnVsbENoZWNrKSB7CiAgICAgIC8vIFdlIGFjY2VzcyBhIEphdmFTY3JpcHQgbWVtYmVyIHdlIGtub3cgYWxsIG9iamVjdHMgYmVzaWRlcwogICAgICAvLyBudWxsIGFuZCB1bmRlZmluZWQgaGF2ZTogVjggZG9lcyBub3QgbGlrZSBhY2Nlc3NpbmcgYSBtZW1iZXIKICAgICAgLy8gdGhhdCBkb2VzIG5vdCBleGlzdC4KICAgICAgcHVzaChuZXcganMuUHJvcGVydHlBY2Nlc3MuZmllbGQocG9wKCksICd0b1N0cmluZycpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIEZpZWxkRW50aXR5IGZpZWxkID0gbm9kZS5lbGVtZW50OwogICAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuaW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZShmaWVsZCk7CiAgICAgIHB1c2gobmV3IGpzLlByb3BlcnR5QWNjZXNzKHBvcCgpLCBuYW1lKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmZpZWxkR2V0KGZpZWxkKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEZpZWxkU2V0KEhGaWVsZFNldCBub2RlKSB7CiAgICBGaWVsZEVudGl0eSBlbGVtZW50ID0gbm9kZS5lbGVtZW50OwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2UuZmllbGRTZXQoZWxlbWVudCkpOwogICAganMuTmFtZSBuYW1lID0gX25hbWVyLmluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoZWxlbWVudCk7CiAgICB1c2Uobm9kZS5yZWNlaXZlcik7CiAgICBqcy5FeHByZXNzaW9uIHJlY2VpdmVyID0gcG9wKCk7CiAgICB1c2Uobm9kZS52YWx1ZSk7CiAgICBwdXNoKG5ldyBqcy5Bc3NpZ25tZW50KAogICAgICAgICAgICBuZXcganMuUHJvcGVydHlBY2Nlc3MocmVjZWl2ZXIsIG5hbWUpCiAgICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pLAogICAgICAgICAgICBwb3AoKSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0R2V0TGVuZ3RoKEhHZXRMZW5ndGggbm9kZSkgewogICAgdXNlKG5vZGUucmVjZWl2ZXIpOwogICAgcHVzaChuZXcganMuUHJvcGVydHlBY2Nlc3MuZmllbGQocG9wKCksICdsZW5ndGgnKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRSZWFkTW9kaWZ5V3JpdGUoSFJlYWRNb2RpZnlXcml0ZSBub2RlKSB7CiAgICBGaWVsZEVudGl0eSBlbGVtZW50ID0gbm9kZS5lbGVtZW50OwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2UuZmllbGRHZXQoZWxlbWVudCkpOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2UuZmllbGRTZXQoZWxlbWVudCkpOwogICAganMuTmFtZSBuYW1lID0gX25hbWVyLmluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUoZWxlbWVudCk7CiAgICB1c2Uobm9kZS5yZWNlaXZlcik7CiAgICBqcy5FeHByZXNzaW9uIGZpZWxkUmVmZXJlbmNlID0gbmV3IGpzLlByb3BlcnR5QWNjZXNzKHBvcCgpLCBuYW1lKTsKICAgIGlmIChub2RlLmlzUHJlT3ApIHsKICAgICAgcHVzaChuZXcganMuUHJlZml4KG5vZGUuanNPcCwgZmllbGRSZWZlcmVuY2UpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSBpZiAobm9kZS5pc1Bvc3RPcCkgewogICAgICBwdXNoKG5ldyBqcy5Qb3N0Zml4KG5vZGUuanNPcCwgZmllbGRSZWZlcmVuY2UpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIHVzZShub2RlLnZhbHVlKTsKICAgICAgcHVzaChuZXcganMuQXNzaWdubWVudC5jb21wb3VuZChmaWVsZFJlZmVyZW5jZSwgbm9kZS5qc09wLCBwb3AoKSkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRMb2NhbEdldChITG9jYWxHZXQgbm9kZSkgewogICAgdXNlKG5vZGUucmVjZWl2ZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRMb2NhbFNldChITG9jYWxTZXQgbm9kZSkgewogICAgdXNlKG5vZGUudmFsdWUpOwogICAgYXNzaWduVmFyaWFibGUoCiAgICAgICAgdmFyaWFibGVOYW1lcy5nZXROYW1lKG5vZGUucmVjZWl2ZXIpLCBwb3AoKSwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICB2b2lkIHJlZ2lzdGVyRm9yZWlnblR5cGVzKEhGb3JlaWduIG5vZGUpIHsKICAgIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yID0gbm9kZS5uYXRpdmVCZWhhdmlvcjsKICAgIGlmIChuYXRpdmVCZWhhdmlvciA9PSBudWxsKSByZXR1cm47CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJOYXRpdmVCZWhhdmlvcihuYXRpdmVCZWhhdmlvcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEZvcmVpZ25Db2RlKEhGb3JlaWduQ29kZSBub2RlKSB7CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gbm9kZS5pbnB1dHM7CiAgICBpZiAobm9kZS5pc0pzU3RhdGVtZW50KCkpIHsKICAgICAgTGlzdDxqcy5FeHByZXNzaW9uPiBpbnRlcnBvbGF0ZWRFeHByZXNzaW9ucyA9IDxqcy5FeHByZXNzaW9uPltdOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICAgIHVzZShpbnB1dHNbaV0pOwogICAgICAgIGludGVycG9sYXRlZEV4cHJlc3Npb25zLmFkZChwb3AoKSk7CiAgICAgIH0KICAgICAgcHVzaFN0YXRlbWVudChub2RlLmNvZGVUZW1wbGF0ZQogICAgICAgICAgLmluc3RhbnRpYXRlKGludGVycG9sYXRlZEV4cHJlc3Npb25zKQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9IGVsc2UgewogICAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGludGVycG9sYXRlZEV4cHJlc3Npb25zID0gPGpzLkV4cHJlc3Npb24+W107CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdXNlKGlucHV0c1tpXSk7CiAgICAgICAgaW50ZXJwb2xhdGVkRXhwcmVzc2lvbnMuYWRkKHBvcCgpKTsKICAgICAgfQogICAgICBwdXNoKG5vZGUuY29kZVRlbXBsYXRlCiAgICAgICAgICAuaW5zdGFudGlhdGUoaW50ZXJwb2xhdGVkRXhwcmVzc2lvbnMpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KCiAgICAvLyBUT0RPKHNyYSk6IFRlbGwgd29ybGQubmF0aXZlRW5xdWV1ZXIgYWJvdXQgdGhlIHR5cGVzIGNyZWF0ZWQgaGVyZS4KICAgIHJlZ2lzdGVyRm9yZWlnblR5cGVzKG5vZGUpOwoKICAgIGlmIChub2RlLmZvcmVpZ25GdW5jdGlvbiAhPSBudWxsKSB7CiAgICAgIF9yZWdpc3RyeT8ucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgICBuZXcgU3RhdGljVXNlLmltcGxpY2l0SW52b2tlKG5vZGUuZm9yZWlnbkZ1bmN0aW9uKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENyZWF0ZShIQ3JlYXRlIG5vZGUpIHsKICAgIGpzLkV4cHJlc3Npb24ganNDbGFzc1JlZmVyZW5jZSA9IF9lbWl0dGVyLmNvbnN0cnVjdG9yQWNjZXNzKG5vZGUuZWxlbWVudCk7CiAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IHZpc2l0QXJndW1lbnRzKG5vZGUuaW5wdXRzLCBzdGFydDogMCk7CiAgICBwdXNoKG5ldyBqcy5OZXcoanNDbGFzc1JlZmVyZW5jZSwgYXJndW1lbnRzKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgLy8gV2UgYWxzbyB1c2UgSENyZWF0ZSB0byBpbnN0YW50aWF0ZSBjbG9zdXJlIGNsYXNzZXMgdGhhdCBiZWxvbmcgdG8KICAgIC8vIGZ1bmN0aW9uIGV4cHJlc3Npb25zLiBXZSBoYXZlIHRvIHJlZ2lzdGVyIHRoZWlyIHVzZSBoZXJlLCBhcyBvdGhlcndpc2UKICAgIC8vIGNvZGUgZm9yIHRoZW0gbWlnaHQgbm90IGJlIGVtaXR0ZWQuCiAgICBpZiAobm9kZS5lbGVtZW50LmlzQ2xvc3VyZSkgewogICAgICBfcmVnaXN0cnkKICAgICAgICAgIC8vIGlnbm9yZTpkZXByZWNhdGVkX21lbWJlcl91c2VfZnJvbV9zYW1lX3BhY2thZ2UKICAgICAgICAgIC5yZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKG5vZGUuZWxlbWVudCk7CiAgICB9CiAgICBub2RlLmluc3RhbnRpYXRlZFR5cGVzPy5mb3JFYWNoKF9yZWdpc3RyeS5yZWdpc3Rlckluc3RhbnRpYXRpb24pOwogICAgaWYgKG5vZGUuY2FsbE1ldGhvZCAhPSBudWxsKSB7CiAgICAgIF9yZWdpc3RyeQogICAgICAgICAgPy5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmltcGxpY2l0SW52b2tlKG5vZGUuY2FsbE1ldGhvZCkpOwogICAgICBfcmVnaXN0cnk/LnJlZ2lzdGVySW5zdGFudGlhdGVkQ2xvc3VyZShub2RlLmNhbGxNZXRob2QpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDcmVhdGVCb3goSENyZWF0ZUJveCBub2RlKSB7CiAgICBwdXNoKG5ldyBqcy5PYmplY3RJbml0aWFsaXplcig8anMuUHJvcGVydHk+W10pKTsKICB9CgogIGpzLkV4cHJlc3Npb24gbmV3TGl0ZXJhbEJvb2woCiAgICAgIGJvb2wgdmFsdWUsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICBpZiAoX29wdGlvbnMuZW5hYmxlTWluaWZpY2F0aW9uKSB7CiAgICAgIC8vIFVzZSAhMCBmb3IgdHJ1ZSwgITEgZm9yIGZhbHNlLgogICAgICByZXR1cm4gbmV3IGpzLlByZWZpeCgiISIsIG5ldyBqcy5MaXRlcmFsTnVtYmVyKHZhbHVlID8gIjAiIDogIjEiKSkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBqcy5MaXRlcmFsQm9vbCh2YWx1ZSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICB9CgogIHZvaWQgZ2VuZXJhdGVDb25zdGFudCgKICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIGpzLkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IF9lbWl0dGVyLmNvbnN0YW50UmVmZXJlbmNlKGNvbnN0YW50KTsKICAgIGlmICghY29uc3RhbnQuaXNEdW1teSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IHNvdXJjZSBpbmZvcm1hdGlvbiBvbiBzeW50aGV0aWMgY29uc3RhbnRzLgogICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbi53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogICAgcHVzaChleHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q29uc3RhbnQoSENvbnN0YW50IG5vZGUpIHsKICAgIGFzc2VydChpc0dlbmVyYXRlQXRVc2VTaXRlKG5vZGUpKTsKICAgIGdlbmVyYXRlQ29uc3RhbnQobm9kZS5jb25zdGFudCwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CgogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyQ29uc3RhbnRVc2UobmV3IENvbnN0YW50VXNlLmxpdGVyYWwobm9kZS5jb25zdGFudCkpOwogICAgaWYgKG5vZGUuY29uc3RhbnQuaXNUeXBlKSB7CiAgICAgIFR5cGVDb25zdGFudFZhbHVlIHR5cGVDb25zdGFudCA9IG5vZGUuY29uc3RhbnQ7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclR5cGVVc2UoCiAgICAgICAgICBuZXcgVHlwZVVzZS5jb25zdFR5cGVMaXRlcmFsKHR5cGVDb25zdGFudC5yZXByZXNlbnRlZFR5cGUpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0Tm90KEhOb3Qgbm9kZSkgewogICAgYXNzZXJ0KG5vZGUuaW5wdXRzLmxlbmd0aCA9PSAxKTsKICAgIGdlbmVyYXRlTm90KG5vZGUuaW5wdXRzWzBdLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgbWFwUmVsYXRpb25hbE9wZXJhdG9yKFN0cmluZyBvcCwgYm9vbCBpbnZlcnNlKSB7CiAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGludmVyc2VPcGVyYXRvciA9IGNvbnN0IDxTdHJpbmcsIFN0cmluZz57CiAgICAgICI9PSI6ICIhPSIsCiAgICAgICIhPSI6ICI9PSIsCiAgICAgICI9PT0iOiAiIT09IiwKICAgICAgIiE9PSI6ICI9PT0iLAogICAgICAiPCI6ICI+PSIsCiAgICAgICI8PSI6ICI+IiwKICAgICAgIj4iOiAiPD0iLAogICAgICAiPj0iOiAiPCIKICAgIH07CiAgICByZXR1cm4gaW52ZXJzZSA/IGludmVyc2VPcGVyYXRvcltvcF0gOiBvcDsKICB9CgogIHZvaWQgZ2VuZXJhdGVOb3QoSEluc3RydWN0aW9uIGlucHV0LCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgYm9vbCBjYW5HZW5lcmF0ZU9wdGltaXplZENvbXBhcmlzb24oSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyEgSFJlbGF0aW9uYWwpIHJldHVybiBmYWxzZTsKCiAgICAgIEhSZWxhdGlvbmFsIHJlbGF0aW9uYWwgPSBpbnN0cnVjdGlvbjsKCiAgICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gcmVsYXRpb25hbC5sZWZ0OwogICAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSByZWxhdGlvbmFsLnJpZ2h0OwogICAgICBpZiAobGVmdC5pc1N0cmluZ09yTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICAgcmlnaHQuaXNTdHJpbmdPck51bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQoKICAgICAgLy8gVGhpcyBvcHRpbWl6YXRpb24gZG9lc24ndCB3b3JrIGZvciBOYU4sIHNvIHdlIG9ubHkgZG8gaXQgaWYgdGhlCiAgICAgIC8vIHR5cGUgaXMga25vd24gdG8gYmUgYW4gaW50ZWdlci4KICAgICAgcmV0dXJuIGxlZnQuaXNJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICByaWdodC5pc0ludGVnZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWU7CiAgICB9CgogICAgYm9vbCBoYW5kbGVkQnlTcGVjaWFsQ2FzZSA9IGZhbHNlOwogICAgaWYgKGlzR2VuZXJhdGVBdFVzZVNpdGUoaW5wdXQpKSB7CiAgICAgIGhhbmRsZWRCeVNwZWNpYWxDYXNlID0gdHJ1ZTsKICAgICAgaWYgKGlucHV0IGlzIEhJcykgewogICAgICAgIGVtaXRJcyhpbnB1dCwgJyE9PScsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgfSBlbHNlIGlmIChpbnB1dCBpcyBISXNWaWFJbnRlcmNlcHRvcikgewogICAgICAgIGVtaXRJc1ZpYUludGVyY2VwdG9yKGlucHV0LCBzb3VyY2VJbmZvcm1hdGlvbiwgbmVnYXRpdmU6IHRydWUpOwogICAgICB9IGVsc2UgaWYgKGlucHV0IGlzIEhOb3QpIHsKICAgICAgICB1c2UoaW5wdXQuaW5wdXRzWzBdKTsKICAgICAgfSBlbHNlIGlmIChpbnB1dCBpcyBISWRlbnRpdHkpIHsKICAgICAgICBlbWl0SWRlbnRpdHlDb21wYXJpc29uKGlucHV0LCBzb3VyY2VJbmZvcm1hdGlvbiwgaW52ZXJzZTogdHJ1ZSk7CiAgICAgIH0gZWxzZSBpZiAoY2FuR2VuZXJhdGVPcHRpbWl6ZWRDb21wYXJpc29uKGlucHV0KSkgewogICAgICAgIEhSZWxhdGlvbmFsIHJlbGF0aW9uYWwgPSBpbnB1dDsKICAgICAgICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9IHJlbGF0aW9uYWwub3BlcmF0aW9uKCk7CiAgICAgICAgU3RyaW5nIG9wID0gbWFwUmVsYXRpb25hbE9wZXJhdG9yKG9wZXJhdGlvbi5uYW1lLCB0cnVlKTsKICAgICAgICBoYW5kbGVJbnZva2VCaW5hcnkoaW5wdXQsIG9wLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaGFuZGxlZEJ5U3BlY2lhbENhc2UgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaWYgKCFoYW5kbGVkQnlTcGVjaWFsQ2FzZSkgewogICAgICB1c2UoaW5wdXQpOwogICAgICBwdXNoKG5ldyBqcy5QcmVmaXgoIiEiLCBwb3AoKSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFBhcmFtZXRlclZhbHVlKEhQYXJhbWV0ZXJWYWx1ZSBub2RlKSB7CiAgICBhc3NlcnQoIWlzR2VuZXJhdGVBdFVzZVNpdGUobm9kZSkpOwogICAgU3RyaW5nIG5hbWUgPSB2YXJpYWJsZU5hbWVzLmdldE5hbWUobm9kZSk7CiAgICBwYXJhbWV0ZXJzLmFkZChuZXcganMuUGFyYW1ldGVyKG5hbWUpKTsKICAgIGRlY2xhcmVkTG9jYWxzLmFkZChuYW1lKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TG9jYWxWYWx1ZShITG9jYWxWYWx1ZSBub2RlKSB7CiAgICBhc3NlcnQoIWlzR2VuZXJhdGVBdFVzZVNpdGUobm9kZSkpOwogICAgU3RyaW5nIG5hbWUgPSB2YXJpYWJsZU5hbWVzLmdldE5hbWUobm9kZSk7CiAgICBjb2xsZWN0ZWRWYXJpYWJsZURlY2xhcmF0aW9ucy5hZGQobmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFBoaShIUGhpIG5vZGUpIHsKICAgIC8vIFRoaXMgbWV0aG9kIGlzIG9ubHkgY2FsbGVkIGZvciBwaGlzIHRoYXQgYXJlIGdlbmVyYXRlZCBhdCB1c2UKICAgIC8vIHNpdGUuIEEgcGhpIGNhbiBiZSBnZW5lcmF0ZWQgYXQgdXNlIHNpdGUgb25seSBpZiBpdCBpcyB0aGUKICAgIC8vIHJlc3VsdCBvZiBhIGNvbnRyb2wgZmxvdyBvcGVyYXRpb24uCiAgICBIQmFzaWNCbG9jayBpZkJsb2NrID0gbm9kZS5ibG9jay5kb21pbmF0b3I7CiAgICBhc3NlcnQoY29udHJvbEZsb3dPcGVyYXRvcnMuY29udGFpbnMoaWZCbG9jay5sYXN0KSk7CiAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBpZkJsb2NrLmxhc3QuaW5wdXRzWzBdOwogICAgaWYgKGlucHV0LmlzQ29uc3RhbnRGYWxzZSgpKSB7CiAgICAgIHVzZShub2RlLmlucHV0c1sxXSk7CiAgICB9IGVsc2UgaWYgKGlucHV0LmlzQ29uc3RhbnRUcnVlKCkpIHsKICAgICAgdXNlKG5vZGUuaW5wdXRzWzBdKTsKICAgIH0gZWxzZSBpZiAobm9kZS5pbnB1dHNbMV0uaXNDb25zdGFudEJvb2xlYW4oKSkgewogICAgICBTdHJpbmcgb3BlcmF0aW9uID0gbm9kZS5pbnB1dHNbMV0uaXNDb25zdGFudEZhbHNlKCkgPyAnJiYnIDogJ3x8JzsKICAgICAgaWYgKG9wZXJhdGlvbiA9PSAnfHwnKSB7CiAgICAgICAgZ2VuZXJhdGVOb3QoaW5wdXQsIGlucHV0LnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB1c2UoaW5wdXQpOwogICAgICB9CiAgICAgIGpzLkV4cHJlc3Npb24gbGVmdCA9IHBvcCgpOwogICAgICB1c2Uobm9kZS5pbnB1dHNbMF0pOwogICAgICBwdXNoKG5ldyBqcy5CaW5hcnkob3BlcmF0aW9uLCBsZWZ0LCBwb3AoKSkpOwogICAgfSBlbHNlIHsKICAgICAgdXNlKGlucHV0KTsKICAgICAganMuRXhwcmVzc2lvbiB0ZXN0ID0gcG9wKCk7CiAgICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICAgIGpzLkV4cHJlc3Npb24gdGhlbiA9IHBvcCgpOwogICAgICB1c2Uobm9kZS5pbnB1dHNbMV0pOwogICAgICBwdXNoKG5ldyBqcy5Db25kaXRpb25hbCh0ZXN0LCB0aGVuLCBwb3AoKSkpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRSZXR1cm4oSFJldHVybiBub2RlKSB7CiAgICBhc3NlcnQobm9kZS5pbnB1dHMubGVuZ3RoID09IDEpOwogICAgSEluc3RydWN0aW9uIGlucHV0ID0gbm9kZS5pbnB1dHNbMF07CiAgICBpZiAoaW5wdXQuaXNDb25zdGFudE51bGwoKSkgewogICAgICBwdXNoU3RhdGVtZW50KAogICAgICAgICAgbmV3IGpzLlJldHVybigpLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9IGVsc2UgewogICAgICB1c2Uobm9kZS5pbnB1dHNbMF0pOwogICAgICBwdXNoU3RhdGVtZW50KAogICAgICAgICAgbmV3IGpzLlJldHVybihwb3AoKSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0VGhpcyhIVGhpcyBub2RlKSB7CiAgICBwdXNoKG5ldyBqcy5UaGlzKCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUaHJvdyhIVGhyb3cgbm9kZSkgewogICAgaWYgKG5vZGUuaXNSZXRocm93KSB7CiAgICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICAgIHB1c2hTdGF0ZW1lbnQoCiAgICAgICAgICBuZXcganMuVGhyb3cocG9wKCkpLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9IGVsc2UgewogICAgICBnZW5lcmF0ZVRocm93V2l0aEhlbHBlcigKICAgICAgICAgIF9jb21tb25FbGVtZW50cy53cmFwRXhjZXB0aW9uSGVscGVyLCBub2RlLmlucHV0c1swXSwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0QXdhaXQoSEF3YWl0IG5vZGUpIHsKICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICBwdXNoKG5ldyBqcy5Bd2FpdChwb3AoKSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0WWllbGQoSFlpZWxkIG5vZGUpIHsKICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICBwdXNoU3RhdGVtZW50KG5ldyBqcy5EYXJ0WWllbGQocG9wKCksIG5vZGUuaGFzU3RhcikKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0UmFuZ2VDb252ZXJzaW9uKEhSYW5nZUNvbnZlcnNpb24gbm9kZSkgewogICAgLy8gUmFuZ2UgY29udmVyc2lvbiBpbnN0cnVjdGlvbnMgYXJlIHJlbW92ZWQgYnkgdGhlIHZhbHVlIHJhbmdlCiAgICAvLyBhbmFseXplci4KICAgIGFzc2VydChmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEJvdW5kc0NoZWNrKEhCb3VuZHNDaGVjayBub2RlKSB7CiAgICAvLyBUT0RPKG5nZW9mZnJheSk6IFNlcGFyYXRlIHRoZSB0d28gY2hlY2tzIG9mIHRoZSBib3VuZHMgY2hlY2ssIHNvLAogICAgLy8gZS5nLiwgdGhlIHplcm8gY2hlY2tzIGNhbiBiZSBzaGFyZWQgaWYgcG9zc2libGUuCgogICAgLy8gSWYgdGhlIGNoZWNrcyBhbHdheXMgc3VjY2VlZHMsIHdlIHdvdWxkIGhhdmUgcmVtb3ZlZCB0aGUgYm91bmRzIGNoZWNrCiAgICAvLyBjb21wbGV0ZWx5LgogICAgYXNzZXJ0KG5vZGUuc3RhdGljQ2hlY2tzICE9IEhCb3VuZHNDaGVjay5BTFdBWVNfVFJVRSk7CiAgICBpZiAobm9kZS5zdGF0aWNDaGVja3MgIT0gSEJvdW5kc0NoZWNrLkFMV0FZU19GQUxTRSkgewogICAgICBqcy5FeHByZXNzaW9uIHVuZGVyOwogICAgICBqcy5FeHByZXNzaW9uIG92ZXI7CiAgICAgIGlmIChub2RlLnN0YXRpY0NoZWNrcyAhPSBIQm91bmRzQ2hlY2suQUxXQVlTX0FCT1ZFX1pFUk8pIHsKICAgICAgICB1c2Uobm9kZS5pbmRleCk7CiAgICAgICAgaWYgKG5vZGUuaW5kZXguaXNJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgICB1bmRlciA9IGpzLmpzKCIjIDwgMCIsIHBvcCgpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAganMuRXhwcmVzc2lvbiBqc0luZGV4ID0gcG9wKCk7CiAgICAgICAgICB1bmRlciA9IGpzLmpzKCIjID4+PiAwICE9PSAjIiwgW2pzSW5kZXgsIGpzSW5kZXhdKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAobm9kZS5pbmRleAogICAgICAgICAgLmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgIC5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgICBjaGVja0ludChub2RlLmluZGV4LCAnIT09Jyk7CiAgICAgICAgdW5kZXIgPSBwb3AoKTsKICAgICAgfQogICAgICBpZiAobm9kZS5zdGF0aWNDaGVja3MgIT0gSEJvdW5kc0NoZWNrLkFMV0FZU19CRUxPV19MRU5HVEgpIHsKICAgICAgICB2YXIgaW5kZXggPSBub2RlLmluZGV4OwogICAgICAgIHVzZShpbmRleCk7CiAgICAgICAganMuRXhwcmVzc2lvbiBqc0luZGV4ID0gcG9wKCk7CiAgICAgICAgdXNlKG5vZGUubGVuZ3RoKTsKICAgICAgICBvdmVyID0gbmV3IGpzLkJpbmFyeSgiPj0iLCBqc0luZGV4LCBwb3AoKSk7CiAgICAgIH0KICAgICAgYXNzZXJ0KG92ZXIgIT0gbnVsbCB8fCB1bmRlciAhPSBudWxsKTsKICAgICAganMuRXhwcmVzc2lvbiB1bmRlck92ZXIgPSB1bmRlciA9PSBudWxsCiAgICAgICAgICA/IG92ZXIKICAgICAgICAgIDogb3ZlciA9PSBudWxsID8gdW5kZXIgOiBuZXcganMuQmluYXJ5KCJ8fCIsIHVuZGVyLCBvdmVyKTsKICAgICAganMuU3RhdGVtZW50IHRoZW5Cb2R5ID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICAgIGpzLkJsb2NrIG9sZENvbnRhaW5lciA9IGN1cnJlbnRDb250YWluZXI7CiAgICAgIGN1cnJlbnRDb250YWluZXIgPSB0aGVuQm9keTsKICAgICAgZ2VuZXJhdGVUaHJvd1dpdGhIZWxwZXIoX2NvbW1vbkVsZW1lbnRzLnRocm93SW5kZXhPdXRPZlJhbmdlRXhjZXB0aW9uLAogICAgICAgICAgW25vZGUuYXJyYXksIG5vZGUucmVwb3J0ZWRJbmRleF0sCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIGN1cnJlbnRDb250YWluZXIgPSBvbGRDb250YWluZXI7CiAgICAgIHRoZW5Cb2R5ID0gdW53cmFwU3RhdGVtZW50KHRoZW5Cb2R5KTsKICAgICAgcHVzaFN0YXRlbWVudChuZXcganMuSWYubm9FbHNlKHVuZGVyT3ZlciwgdGhlbkJvZHkpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIGdlbmVyYXRlVGhyb3dXaXRoSGVscGVyKF9jb21tb25FbGVtZW50cy50aHJvd0luZGV4T3V0T2ZSYW5nZUV4Y2VwdGlvbiwKICAgICAgICAgIFtub2RlLmFycmF5LCBub2RlLmluZGV4XSk7CiAgICB9CiAgfQoKICB2b2lkIGdlbmVyYXRlVGhyb3dXaXRoSGVscGVyKEZ1bmN0aW9uRW50aXR5IGhlbHBlciwgYXJndW1lbnQsCiAgICAgIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIGpzLkV4cHJlc3Npb24ganNIZWxwZXIgPSBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhoZWxwZXIpOwogICAgTGlzdCBhcmd1bWVudHMgPSA8anMuRXhwcmVzc2lvbj5bXTsKICAgIGlmIChhcmd1bWVudCBpcyBMaXN0KSB7CiAgICAgIGFyZ3VtZW50LmZvckVhY2goKGluc3RydWN0aW9uKSB7CiAgICAgICAgdXNlKGluc3RydWN0aW9uKTsKICAgICAgICBhcmd1bWVudHMuYWRkKHBvcCgpKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICB1c2UoYXJndW1lbnQpOwogICAgICBhcmd1bWVudHMuYWRkKHBvcCgpKTsKICAgIH0KICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICBoZWxwZXIsIG5ldyBDYWxsU3RydWN0dXJlLnVubmFtZWQoYXJndW1lbnRzLmxlbmd0aCkpKTsKICAgIGpzLkNhbGwgdmFsdWUgPSBuZXcganMuQ2FsbChqc0hlbHBlciwgYXJndW1lbnRzLnRvTGlzdChncm93YWJsZTogZmFsc2UpLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAvLyBCVUcoNDkwNik6IFVzaW5nIHRocm93L3JldHVybiBoZXJlIGFkZHMgdG8gdGhlIHNpemUgb2YgdGhlIGdlbmVyYXRlZCBjb2RlCiAgICAvLyBidXQgaXQgaGFzIHRoZSBhZHZhbnRhZ2Ugb2YgZXhwbGljaXRseSB0ZWxsaW5nIHRoZSBKUyBlbmdpbmUgdGhhdAogICAgLy8gdGhpcyBjb2RlIHBhdGggd2lsbCB0ZXJtaW5hdGUgYWJydXB0bHkuIE5lZWRzIG1vcmUgd29yay4KICAgIGlmIChoZWxwZXIgPT0gX2NvbW1vbkVsZW1lbnRzLndyYXBFeGNlcHRpb25IZWxwZXIpIHsKICAgICAgcHVzaFN0YXRlbWVudCgKICAgICAgICAgIG5ldyBqcy5UaHJvdyh2YWx1ZSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9IGVsc2UgewogICAgICBwdXNoU3RhdGVtZW50KAogICAgICAgICAgbmV3IGpzLlJldHVybih2YWx1ZSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFRocm93RXhwcmVzc2lvbihIVGhyb3dFeHByZXNzaW9uIG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9IG5vZGUuaW5wdXRzWzBdOwogICAgdXNlKGFyZ3VtZW50KTsKCiAgICBGdW5jdGlvbkVudGl0eSBoZWxwZXIgPSBfY29tbW9uRWxlbWVudHMudGhyb3dFeHByZXNzaW9uSGVscGVyOwogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgIG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKGhlbHBlciwgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSk7CgogICAganMuRXhwcmVzc2lvbiBqc0hlbHBlciA9IF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGhlbHBlcik7CiAgICBqcy5DYWxsIHZhbHVlID0gbmV3IGpzLkNhbGwoanNIZWxwZXIsIFtwb3AoKV0pCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIHB1c2godmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN3aXRjaChIU3dpdGNoIG5vZGUpIHsKICAgIC8vIFN3aXRjaGVzIGFyZSBoYW5kbGVkIHVzaW5nIFt2aXNpdFN3aXRjaEluZm9dLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0YXRpYyhIU3RhdGljIG5vZGUpIHsKICAgIE1lbWJlckVudGl0eSBlbGVtZW50ID0gbm9kZS5lbGVtZW50OwogICAgYXNzZXJ0KGVsZW1lbnQuaXNGdW5jdGlvbiB8fCBlbGVtZW50LmlzRmllbGQpOwogICAgaWYgKGVsZW1lbnQuaXNGdW5jdGlvbikgewogICAgICBwdXNoKF9lbWl0dGVyCiAgICAgICAgICAuc3RhdGljQ2xvc3VyZUFjY2VzcyhlbGVtZW50KQogICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY1RlYXJPZmYoZWxlbWVudCkpOwogICAgfSBlbHNlIHsKICAgICAgcHVzaChfZW1pdHRlcgogICAgICAgICAgLnN0YXRpY0ZpZWxkQWNjZXNzKGVsZW1lbnQpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljR2V0KGVsZW1lbnQpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMYXp5U3RhdGljKEhMYXp5U3RhdGljIG5vZGUpIHsKICAgIEZpZWxkRW50aXR5IGVsZW1lbnQgPSBub2RlLmVsZW1lbnQ7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbml0KGVsZW1lbnQpKTsKICAgIGpzLkV4cHJlc3Npb24gbGF6eUdldHRlciA9IF9lbWl0dGVyLmlzb2xhdGVMYXp5SW5pdGlhbGl6ZXJBY2Nlc3MoZWxlbWVudCk7CiAgICBqcy5DYWxsIGNhbGwgPSBuZXcganMuQ2FsbChsYXp5R2V0dGVyLCA8anMuRXhwcmVzc2lvbj5bXSwKICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICBwdXNoKGNhbGwpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0YXRpY1N0b3JlKEhTdGF0aWNTdG9yZSBub2RlKSB7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNTZXQobm9kZS5lbGVtZW50KSk7CiAgICBqcy5Ob2RlIHZhcmlhYmxlID0gX2VtaXR0ZXIuc3RhdGljRmllbGRBY2Nlc3Mobm9kZS5lbGVtZW50KTsKICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICBwdXNoKG5ldyBqcy5Bc3NpZ25tZW50KHZhcmlhYmxlLCBwb3AoKSkKICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdHJpbmdDb25jYXQoSFN0cmluZ0NvbmNhdCBub2RlKSB7CiAgICB1c2Uobm9kZS5sZWZ0KTsKICAgIGpzLkV4cHJlc3Npb24ganNMZWZ0ID0gcG9wKCk7CiAgICB1c2Uobm9kZS5yaWdodCk7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkoJysnLCBqc0xlZnQsIHBvcCgpKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ2lmeShIU3RyaW5naWZ5IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IG5vZGUuaW5wdXRzLmZpcnN0OwogICAgaWYgKGlucHV0LmlzU3RyaW5nKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHVzZShpbnB1dCk7CiAgICB9IGVsc2UgaWYgKGlucHV0LmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSB8fAogICAgICAgIGlucHV0LmlzQm9vbGVhbihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAvLyBKYXZhU2NyaXB0J3MgKyBvcGVyYXRvciB3aXRoIGEgc3RyaW5nIGZvciB0aGUgbGVmdCBvcGVyYW5kIHdpbGwgY29udmVydAogICAgICAvLyB0aGUgcmlnaHQgb3BlcmFuZCB0byBhIHN0cmluZywgYW5kIHRoZSBjb252ZXJzaW9uIHJlc3VsdCBpcyBjb3JyZWN0LgogICAgICB1c2UoaW5wdXQpOwogICAgICBpZiAobm9kZS51c2VkQnkubGVuZ3RoID09IDEgJiYKICAgICAgICAgIG5vZGUudXNlZEJ5WzBdIGlzIEhTdHJpbmdDb25jYXQgJiYKICAgICAgICAgIG5vZGUudXNlZEJ5WzBdLmlucHV0c1sxXSA9PSBub2RlKSB7CiAgICAgICAgLy8gVGhlIGNvbnRleHQgaXMgYWxyZWFkeSA8c3RyaW5nPiArIHZhbHVlLgogICAgICB9IGVsc2UgewogICAgICAgIC8vIEZvcmNlIGFuIGVtcHR5IHN0cmluZyBmb3IgdGhlIGZpcnN0IG9wZXJhbmQuCiAgICAgICAgcHVzaChuZXcganMuQmluYXJ5KCcrJywganMuc3RyaW5nKCIiKSwgcG9wKCkpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBGdW5jdGlvbkVudGl0eSBjb252ZXJ0VG9TdHJpbmcgPQogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLnN0cmluZ0ludGVycG9sYXRpb25IZWxwZXI7CiAgICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZSgKICAgICAgICAgIG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKGNvbnZlcnRUb1N0cmluZywgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSk7CiAgICAgIGpzLkV4cHJlc3Npb24ganNIZWxwZXIgPSBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2Vzcyhjb252ZXJ0VG9TdHJpbmcpOwogICAgICB1c2UoaW5wdXQpOwogICAgICBwdXNoKG5ldyBqcy5DYWxsKGpzSGVscGVyLCA8anMuRXhwcmVzc2lvbj5bcG9wKCldLAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsTGlzdChITGl0ZXJhbExpc3Qgbm9kZSkgewogICAgX3JlZ2lzdHJ5CiAgICAgICAgLy8gaWdub3JlOmRlcHJlY2F0ZWRfbWVtYmVyX3VzZV9mcm9tX3NhbWVfcGFja2FnZQogICAgICAgIC5yZWdpc3Rlckluc3RhbnRpYXRlZENsYXNzKF9jb21tb25FbGVtZW50cy5saXN0Q2xhc3MpOwogICAgZ2VuZXJhdGVBcnJheUxpdGVyYWwobm9kZSk7CiAgfQoKICB2b2lkIGdlbmVyYXRlQXJyYXlMaXRlcmFsKEhMaXRlcmFsTGlzdCBub2RlKSB7CiAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGVsZW1lbnRzID0gbm9kZS5pbnB1dHMubWFwKChISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgICAgdXNlKGlucHV0KTsKICAgICAgcmV0dXJuIHBvcCgpOwogICAgfSkudG9MaXN0KCk7CiAgICBwdXNoKG5ldyBqcy5BcnJheUluaXRpYWxpemVyKGVsZW1lbnRzKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluZGV4KEhJbmRleCBub2RlKSB7CiAgICB1c2Uobm9kZS5yZWNlaXZlcik7CiAgICBqcy5FeHByZXNzaW9uIHJlY2VpdmVyID0gcG9wKCk7CiAgICB1c2Uobm9kZS5pbmRleCk7CiAgICBwdXNoKG5ldyBqcy5Qcm9wZXJ0eUFjY2VzcyhyZWNlaXZlciwgcG9wKCkpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5kZXhBc3NpZ24oSEluZGV4QXNzaWduIG5vZGUpIHsKICAgIHVzZShub2RlLnJlY2VpdmVyKTsKICAgIGpzLkV4cHJlc3Npb24gcmVjZWl2ZXIgPSBwb3AoKTsKICAgIHVzZShub2RlLmluZGV4KTsKICAgIGpzLkV4cHJlc3Npb24gaW5kZXggPSBwb3AoKTsKICAgIHVzZShub2RlLnZhbHVlKTsKICAgIHB1c2gobmV3IGpzLkFzc2lnbm1lbnQobmV3IGpzLlByb3BlcnR5QWNjZXNzKHJlY2VpdmVyLCBpbmRleCksIHBvcCgpKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgdm9pZCBjaGVja0ludChISW5zdHJ1Y3Rpb24gaW5wdXQsIFN0cmluZyBjbXApIHsKICAgIHVzZShpbnB1dCk7CiAgICBqcy5FeHByZXNzaW9uIGxlZnQgPSBwb3AoKTsKICAgIHVzZShpbnB1dCk7CiAgICBqcy5FeHByZXNzaW9uIG9yMCA9IG5ldyBqcy5CaW5hcnkoInwiLCBwb3AoKSwgbmV3IGpzLkxpdGVyYWxOdW1iZXIoIjAiKSk7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkoY21wLCBsZWZ0LCBvcjApKTsKICB9CgogIHZvaWQgY2hlY2tCaWdJbnQoCiAgICAgIEhJbnN0cnVjdGlvbiBpbnB1dCwgU3RyaW5nIGNtcCwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIHVzZShpbnB1dCk7CiAgICBqcy5FeHByZXNzaW9uIGxlZnQgPSBwb3AoKTsKICAgIHVzZShpbnB1dCk7CiAgICBqcy5FeHByZXNzaW9uIHJpZ2h0ID0gcG9wKCk7CiAgICAvLyBUT0RPKDQ5ODQpOiBEZWFsIHdpdGggaW5maW5pdHkgYW5kIC0wLjAuCiAgICBqcy5FeHByZXNzaW9uIG1hdGhGbG9vckNhbGwgPSBqcy5qcygnTWF0aC5mbG9vcigjKScsCiAgICAgICAgPGpzLkV4cHJlc3Npb24+W2xlZnRdKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgcHVzaChqcy5qcygnIyAkY21wICMnLCA8anMuRXhwcmVzc2lvbj5bCiAgICAgIG1hdGhGbG9vckNhbGwsCiAgICAgIHJpZ2h0CiAgICBdKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIHZvaWQgY2hlY2tUeXBlT2YoSEluc3RydWN0aW9uIGlucHV0LCBTdHJpbmcgY21wLCBTdHJpbmcgdHlwZU5hbWUsCiAgICAgIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICB1c2UoaW5wdXQpOwogICAganMuRXhwcmVzc2lvbiB0eXBlT2YgPSBuZXcganMuUHJlZml4KCJ0eXBlb2YiLCBwb3AoKSk7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkoY21wLCB0eXBlT2YsIGpzLnN0cmluZyh0eXBlTmFtZSkpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgdm9pZCBjaGVja051bSgKICAgICAgSEluc3RydWN0aW9uIGlucHV0LCBTdHJpbmcgY21wLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgcmV0dXJuIGNoZWNrVHlwZU9mKGlucHV0LCBjbXAsICdudW1iZXInLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICB2b2lkIGNoZWNrRG91YmxlKAogICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQsIFN0cmluZyBjbXAsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uKSB7CiAgICByZXR1cm4gY2hlY2tOdW0oaW5wdXQsIGNtcCwgc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgdm9pZCBjaGVja1N0cmluZygKICAgICAgSEluc3RydWN0aW9uIGlucHV0LCBTdHJpbmcgY21wLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgcmV0dXJuIGNoZWNrVHlwZU9mKGlucHV0LCBjbXAsICdzdHJpbmcnLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgfQoKICB2b2lkIGNoZWNrQm9vbCgKICAgICAgSEluc3RydWN0aW9uIGlucHV0LCBTdHJpbmcgY21wLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgcmV0dXJuIGNoZWNrVHlwZU9mKGlucHV0LCBjbXAsICdib29sZWFuJywgc291cmNlSW5mb3JtYXRpb24pOwogIH0KCiAgdm9pZCBjaGVja09iamVjdCgKICAgICAgSEluc3RydWN0aW9uIGlucHV0LCBTdHJpbmcgY21wLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgYXNzZXJ0KE51bGxDb25zdGFudFZhbHVlLkpzTnVsbCA9PSAnbnVsbCcpOwogICAgaWYgKGNtcCA9PSAiPT09IikgewogICAgICBjaGVja1R5cGVPZihpbnB1dCwgJz09PScsICdvYmplY3QnLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIGpzLkV4cHJlc3Npb24gbGVmdCA9IHBvcCgpOwogICAgICB1c2UoaW5wdXQpOwogICAgICBqcy5FeHByZXNzaW9uIG5vdE51bGwgPSBuZXcganMuQmluYXJ5KCIhPT0iLCBwb3AoKSwgbmV3IGpzLkxpdGVyYWxOdWxsKCkpOwogICAgICBwdXNoKG5ldyBqcy5CaW5hcnkoIiYmIiwgbGVmdCwgbm90TnVsbCkKICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChjbXAgPT0gIiE9PSIpOwogICAgICBjaGVja1R5cGVPZihpbnB1dCwgJyE9PScsICdvYmplY3QnLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIGpzLkV4cHJlc3Npb24gbGVmdCA9IHBvcCgpOwogICAgICB1c2UoaW5wdXQpOwogICAgICBqcy5FeHByZXNzaW9uIGVxTnVsbCA9IG5ldyBqcy5CaW5hcnkoIj09PSIsIHBvcCgpLCBuZXcganMuTGl0ZXJhbE51bGwoKSk7CiAgICAgIHB1c2gobmV3IGpzLkJpbmFyeSgifHwiLCBsZWZ0LCBlcU51bGwpCiAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICB9CiAgfQoKICB2b2lkIGNoZWNrQXJyYXkoSEluc3RydWN0aW9uIGlucHV0LCBTdHJpbmcgY21wKSB7CiAgICB1c2UoaW5wdXQpOwogICAganMuUHJvcGVydHlBY2Nlc3MgY29uc3RydWN0b3IgPQogICAgICAgIG5ldyBqcy5Qcm9wZXJ0eUFjY2Vzcy5maWVsZChwb3AoKSwgJ2NvbnN0cnVjdG9yJyk7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkoY21wLCBjb25zdHJ1Y3RvciwgbmV3IGpzLlZhcmlhYmxlVXNlKCdBcnJheScpKSk7CiAgfQoKICB2b2lkIGNoZWNrRmllbGRFeGlzdHMoSEluc3RydWN0aW9uIGlucHV0LCBTdHJpbmcgZmllbGROYW1lKSB7CiAgICB1c2UoaW5wdXQpOwogICAganMuUHJvcGVydHlBY2Nlc3MgZmllbGQgPSBuZXcganMuUHJvcGVydHlBY2Nlc3MuZmllbGQocG9wKCksIGZpZWxkTmFtZSk7CiAgICAvLyBEb3VibGUgbmVnYXRlIHRvIGJvb2xpZnkgdGhlIHJlc3VsdC4KICAgIHB1c2gobmV3IGpzLlByZWZpeCgnIScsIG5ldyBqcy5QcmVmaXgoJyEnLCBmaWVsZCkpKTsKICB9CgogIHZvaWQgY2hlY2tGaWVsZERvZXNOb3RFeGlzdChISW5zdHJ1Y3Rpb24gaW5wdXQsIFN0cmluZyBmaWVsZE5hbWUpIHsKICAgIHVzZShpbnB1dCk7CiAgICBqcy5Qcm9wZXJ0eUFjY2VzcyBmaWVsZCA9IG5ldyBqcy5Qcm9wZXJ0eUFjY2Vzcy5maWVsZChwb3AoKSwgZmllbGROYW1lKTsKICAgIHB1c2gobmV3IGpzLlByZWZpeCgnIScsIGZpZWxkKSk7CiAgfQoKICB2b2lkIGNoZWNrSW1tdXRhYmxlQXJyYXkoSEluc3RydWN0aW9uIGlucHV0KSB7CiAgICBjaGVja0ZpZWxkRXhpc3RzKGlucHV0LCAnaW1tdXRhYmxlXCRsaXN0Jyk7CiAgfQoKICB2b2lkIGNoZWNrTXV0YWJsZUFycmF5KEhJbnN0cnVjdGlvbiBpbnB1dCkgewogICAgY2hlY2tGaWVsZERvZXNOb3RFeGlzdChpbnB1dCwgJ2ltbXV0YWJsZVwkbGlzdCcpOwogIH0KCiAgdm9pZCBjaGVja0V4dGVuZGFibGVBcnJheShISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgIGNoZWNrRmllbGREb2VzTm90RXhpc3QoaW5wdXQsICdmaXhlZFwkbGVuZ3RoJyk7CiAgfQoKICB2b2lkIGNoZWNrRml4ZWRBcnJheShISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgIGNoZWNrRmllbGRFeGlzdHMoaW5wdXQsICdmaXhlZFwkbGVuZ3RoJyk7CiAgfQoKICB2b2lkIGNoZWNrTnVsbChISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgIHVzZShpbnB1dCk7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkoJz09JywgcG9wKCksIG5ldyBqcy5MaXRlcmFsTnVsbCgpKSk7CiAgfQoKICB2b2lkIGNoZWNrTm9uTnVsbChISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgIHVzZShpbnB1dCk7CiAgICBwdXNoKG5ldyBqcy5CaW5hcnkoJyE9JywgcG9wKCksIG5ldyBqcy5MaXRlcmFsTnVsbCgpKSk7CiAgfQoKICB2b2lkIGNoZWNrVHlwZShISW5zdHJ1Y3Rpb24gaW5wdXQsIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRvciwgRGFydFR5cGUgdHlwZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIG5lZ2F0aXZlOiBmYWxzZX0pIHsKICAgIGlmICh0eXBlLmlzSW50ZXJmYWNlVHlwZSkgewogICAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZVR5cGUgPSB0eXBlOwogICAgICBDbGFzc0VudGl0eSBlbGVtZW50ID0gaW50ZXJmYWNlVHlwZS5lbGVtZW50OwogICAgICBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKSB7CiAgICAgICAgY2hlY2tBcnJheShpbnB1dCwgbmVnYXRpdmUgPyAnIT09JyA6ICc9PT0nKTsKICAgICAgICByZXR1cm47CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuanNNdXRhYmxlQXJyYXlDbGFzcykgewogICAgICAgIGlmIChuZWdhdGl2ZSkgewogICAgICAgICAgY2hlY2tJbW11dGFibGVBcnJheShpbnB1dCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNoZWNrTXV0YWJsZUFycmF5KGlucHV0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRXh0ZW5kYWJsZUFycmF5Q2xhc3MpIHsKICAgICAgICBpZiAobmVnYXRpdmUpIHsKICAgICAgICAgIGNoZWNrRml4ZWRBcnJheShpbnB1dCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNoZWNrRXh0ZW5kYWJsZUFycmF5KGlucHV0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmpzRml4ZWRBcnJheUNsYXNzKSB7CiAgICAgICAgaWYgKG5lZ2F0aXZlKSB7CiAgICAgICAgICBjaGVja0V4dGVuZGFibGVBcnJheShpbnB1dCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNoZWNrRml4ZWRBcnJheShpbnB1dCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfSBlbHNlIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc1VubW9kaWZpYWJsZUFycmF5Q2xhc3MpIHsKICAgICAgICBpZiAobmVnYXRpdmUpIHsKICAgICAgICAgIGNoZWNrTXV0YWJsZUFycmF5KGlucHV0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2hlY2tJbW11dGFibGVBcnJheShpbnB1dCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgaWYgKGludGVyY2VwdG9yICE9IG51bGwpIHsKICAgICAgY2hlY2tUeXBlVmlhUHJvcGVydHkoaW50ZXJjZXB0b3IsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgIH0gZWxzZSB7CiAgICAgIGNoZWNrVHlwZVZpYVByb3BlcnR5KGlucHV0LCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tUeXBlVmlhUHJvcGVydHkoCiAgICAgIEhJbnN0cnVjdGlvbiBpbnB1dCwgRGFydFR5cGUgdHlwZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIG5lZ2F0aXZlOiBmYWxzZX0pIHsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaXNDaGVjayh0eXBlKSk7CgogICAgdXNlKGlucHV0KTsKCiAgICBqcy5Qcm9wZXJ0eUFjY2VzcyBmaWVsZCA9CiAgICAgICAgbmV3IGpzLlByb3BlcnR5QWNjZXNzKHBvcCgpLCBfbmFtZXIub3BlcmF0b3JJc1R5cGUodHlwZSkpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwogICAgLy8gV2UgYWx3YXlzIG5lZ2F0ZSBhdCBsZWFzdCBvbmNlIHNvIHRoYXQgdGhlIHJlc3VsdCBpcyBib29saWZpZWQuCiAgICBwdXNoKG5ldyBqcy5QcmVmaXgoJyEnLCBmaWVsZCkud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIG5vdCBuZWdhdGVkLCBwdXQgYW5vdGhlciAnIScgaW4gZnJvbnQuCiAgICBpZiAoIW5lZ2F0aXZlKSB7CiAgICAgIHB1c2gobmV3IGpzLlByZWZpeCgnIScsIHBvcCgpKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tUeXBlVmlhSW5zdGFuY2VvZihISW5zdHJ1Y3Rpb24gaW5wdXQsIEludGVyZmFjZVR5cGUgdHlwZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIG5lZ2F0aXZlOiBmYWxzZX0pIHsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaW5zdGFuY2VDb25zdHJ1Y3Rvcih0eXBlKSk7CgogICAgdXNlKGlucHV0KTsKCiAgICBqcy5FeHByZXNzaW9uIGpzQ2xhc3NSZWZlcmVuY2UgPSBfZW1pdHRlci5jb25zdHJ1Y3RvckFjY2Vzcyh0eXBlLmVsZW1lbnQpOwogICAgcHVzaChqcy5qcygnIyBpbnN0YW5jZW9mICMnLAogICAgICAgIFtwb3AoKSwganNDbGFzc1JlZmVyZW5jZV0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgaWYgKG5lZ2F0aXZlKSB7CiAgICAgIHB1c2gobmV3IGpzLlByZWZpeCgnIScsIHBvcCgpKS53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICB9CgogIHZvaWQgaGFuZGxlTnVtYmVyT3JTdHJpbmdTdXBlcnR5cGVDaGVjaygKICAgICAgSEluc3RydWN0aW9uIGlucHV0LAogICAgICBISW5zdHJ1Y3Rpb24gaW50ZXJjZXB0b3IsCiAgICAgIEludGVyZmFjZVR5cGUgdHlwZSwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIG5lZ2F0aXZlOiBmYWxzZX0pIHsKICAgIGFzc2VydCghaWRlbnRpY2FsKHR5cGUuZWxlbWVudCwgX2NvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcykgJiYKICAgICAgICAhX2NvbW1vbkVsZW1lbnRzLmlzTGlzdFN1cGVydHlwZSh0eXBlLmVsZW1lbnQpICYmCiAgICAgICAgIV9jb21tb25FbGVtZW50cy5pc1N0cmluZ09ubHlTdXBlcnR5cGUodHlwZS5lbGVtZW50KSk7CiAgICBTdHJpbmcgcmVsYXRpb24gPSBuZWdhdGl2ZSA/ICchPT0nIDogJz09PSc7CiAgICBjaGVja051bShpbnB1dCwgcmVsYXRpb24sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLkV4cHJlc3Npb24gbnVtYmVyVGVzdCA9IHBvcCgpOwogICAgY2hlY2tTdHJpbmcoaW5wdXQsIHJlbGF0aW9uLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5FeHByZXNzaW9uIHN0cmluZ1Rlc3QgPSBwb3AoKTsKICAgIGNoZWNrT2JqZWN0KGlucHV0LCByZWxhdGlvbiwgc291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiBvYmplY3RUZXN0ID0gcG9wKCk7CiAgICBjaGVja1R5cGUoaW5wdXQsIGludGVyY2VwdG9yLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgIFN0cmluZyBjb21iaW5lciA9IG5lZ2F0aXZlID8gJyYmJyA6ICd8fCc7CiAgICBTdHJpbmcgY29tYmluZXIyID0gbmVnYXRpdmUgPyAnfHwnIDogJyYmJzsKICAgIHB1c2gobmV3IGpzLkJpbmFyeSgKICAgICAgICAgICAgY29tYmluZXIsCiAgICAgICAgICAgIG5ldyBqcy5CaW5hcnkoY29tYmluZXIsIG51bWJlclRlc3QsIHN0cmluZ1Rlc3QpCiAgICAgICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSwKICAgICAgICAgICAgbmV3IGpzLkJpbmFyeShjb21iaW5lcjIsIG9iamVjdFRlc3QsIHBvcCgpKQogICAgICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgdm9pZCBoYW5kbGVTdHJpbmdTdXBlcnR5cGVDaGVjayhISW5zdHJ1Y3Rpb24gaW5wdXQsIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRvciwKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge2Jvb2wgbmVnYXRpdmU6IGZhbHNlfSkgewogICAgYXNzZXJ0KCFpZGVudGljYWwodHlwZS5lbGVtZW50LCBfY29tbW9uRWxlbWVudHMubGlzdENsYXNzKSAmJgogICAgICAgICFfY29tbW9uRWxlbWVudHMuaXNMaXN0U3VwZXJ0eXBlKHR5cGUuZWxlbWVudCkgJiYKICAgICAgICAhX2NvbW1vbkVsZW1lbnRzLmlzTnVtYmVyT3JTdHJpbmdTdXBlcnR5cGUodHlwZS5lbGVtZW50KSk7CiAgICBTdHJpbmcgcmVsYXRpb24gPSBuZWdhdGl2ZSA/ICchPT0nIDogJz09PSc7CiAgICBjaGVja1N0cmluZyhpbnB1dCwgcmVsYXRpb24sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGpzLkV4cHJlc3Npb24gc3RyaW5nVGVzdCA9IHBvcCgpOwogICAgY2hlY2tPYmplY3QoaW5wdXQsIHJlbGF0aW9uLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBqcy5FeHByZXNzaW9uIG9iamVjdFRlc3QgPSBwb3AoKTsKICAgIGNoZWNrVHlwZShpbnB1dCwgaW50ZXJjZXB0b3IsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLCBuZWdhdGl2ZTogbmVnYXRpdmUpOwogICAgU3RyaW5nIGNvbWJpbmVyID0gbmVnYXRpdmUgPyAnfHwnIDogJyYmJzsKICAgIHB1c2gobmV3IGpzLkJpbmFyeShuZWdhdGl2ZSA/ICcmJicgOiAnfHwnLCBzdHJpbmdUZXN0LAogICAgICAgIG5ldyBqcy5CaW5hcnkoY29tYmluZXIsIG9iamVjdFRlc3QsIHBvcCgpKSkpOwogIH0KCiAgdm9pZCBoYW5kbGVMaXN0T3JTdXBlcnR5cGVDaGVjayhISW5zdHJ1Y3Rpb24gaW5wdXQsIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRvciwKICAgICAgSW50ZXJmYWNlVHlwZSB0eXBlLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAge2Jvb2wgbmVnYXRpdmU6IGZhbHNlfSkgewogICAgYXNzZXJ0KCFpZGVudGljYWwodHlwZS5lbGVtZW50LCBfY29tbW9uRWxlbWVudHMuc3RyaW5nQ2xhc3MpICYmCiAgICAgICAgIV9jb21tb25FbGVtZW50cy5pc1N0cmluZ09ubHlTdXBlcnR5cGUodHlwZS5lbGVtZW50KSAmJgogICAgICAgICFfY29tbW9uRWxlbWVudHMuaXNOdW1iZXJPclN0cmluZ1N1cGVydHlwZSh0eXBlLmVsZW1lbnQpKTsKICAgIFN0cmluZyByZWxhdGlvbiA9IG5lZ2F0aXZlID8gJyE9PScgOiAnPT09JzsKICAgIGNoZWNrT2JqZWN0KGlucHV0LCByZWxhdGlvbiwgc291cmNlSW5mb3JtYXRpb24pOwogICAganMuRXhwcmVzc2lvbiBvYmplY3RUZXN0ID0gcG9wKCk7CiAgICBjaGVja0FycmF5KGlucHV0LCByZWxhdGlvbik7CiAgICBqcy5FeHByZXNzaW9uIGFycmF5VGVzdCA9IHBvcCgpOwogICAgY2hlY2tUeXBlKGlucHV0LCBpbnRlcmNlcHRvciwgdHlwZSwgc291cmNlSW5mb3JtYXRpb24sIG5lZ2F0aXZlOiBuZWdhdGl2ZSk7CiAgICBTdHJpbmcgY29tYmluZXIgPSBuZWdhdGl2ZSA/ICcmJicgOiAnfHwnOwogICAgcHVzaChuZXcganMuQmluYXJ5KG5lZ2F0aXZlID8gJ3x8JyA6ICcmJicsIG9iamVjdFRlc3QsCiAgICAgICAgICAgIG5ldyBqcy5CaW5hcnkoY29tYmluZXIsIGFycmF5VGVzdCwgcG9wKCkpKQogICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJcyhISXMgbm9kZSkgewogICAgZW1pdElzKG5vZGUsICI9PT0iLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJc1ZpYUludGVyY2VwdG9yKEhJc1ZpYUludGVyY2VwdG9yIG5vZGUpIHsKICAgIGVtaXRJc1ZpYUludGVyY2VwdG9yKG5vZGUsIG5vZGUuc291cmNlSW5mb3JtYXRpb24sIG5lZ2F0aXZlOiBmYWxzZSk7CiAgfQoKICB2b2lkIGVtaXRJcyhISXMgbm9kZSwgU3RyaW5nIHJlbGF0aW9uLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgRGFydFR5cGUgdHlwZSA9IG5vZGUudHlwZUV4cHJlc3Npb247CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmlzQ2hlY2sodHlwZSkpOwogICAgSEluc3RydWN0aW9uIGlucHV0ID0gbm9kZS5leHByZXNzaW9uOwoKICAgIC8vIElmIHRoaXMgaXMgY2hhbmdlZCB0byBzaW5nbGUgPT0gdGhlcmUgYXJlIHNldmVyYWwgcGxhY2VzIGJlbG93IHRoYXQgbXVzdAogICAgLy8gYmUgY2hhbmdlZCB0byBtYXRjaC4KICAgIGFzc2VydChyZWxhdGlvbiA9PSAnPT09JyB8fCByZWxhdGlvbiA9PSAnIT09Jyk7CiAgICBib29sIG5lZ2F0aXZlID0gcmVsYXRpb24gPT0gJyE9PSc7CgogICAgaWYgKG5vZGUuaXNWYXJpYWJsZUNoZWNrIHx8IG5vZGUuaXNDb21wb3VuZENoZWNrKSB7CiAgICAgIHVzZShub2RlLmNoZWNrQ2FsbCk7CiAgICAgIGlmIChuZWdhdGl2ZSkgcHVzaChuZXcganMuUHJlZml4KCchJywgcG9wKCkpKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChub2RlLmlzUmF3Q2hlY2spOwogICAgICBISW5zdHJ1Y3Rpb24gaW50ZXJjZXB0b3IgPSBub2RlLmludGVyY2VwdG9yOwogICAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZVR5cGUgPSB0eXBlOwogICAgICBDbGFzc0VudGl0eSBlbGVtZW50ID0gaW50ZXJmYWNlVHlwZS5lbGVtZW50OwogICAgICBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMubnVsbENsYXNzKSB7CiAgICAgICAgaWYgKG5lZ2F0aXZlKSB7CiAgICAgICAgICBjaGVja05vbk51bGwoaW5wdXQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjaGVja051bGwoaW5wdXQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChlbGVtZW50ID09CiAgICAgICAgICBfY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3MgLyogfHwgdHlwZS50cmVhdEFzRHluYW1pYyovKSB7CiAgICAgICAgLy8gVGhlIGNvbnN0YW50IGZvbGRlciBhbHNvIGRvZXMgdGhpcyBvcHRpbWl6YXRpb24sIGJ1dCB3ZSBtYWtlCiAgICAgICAgLy8gaXQgc2FmZSBieSBhc3N1bWluZyBpdCBtYXkgaGF2ZSBub3QgcnVuLgogICAgICAgIHB1c2gobmV3TGl0ZXJhbEJvb2woIW5lZ2F0aXZlLCBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzKSB7CiAgICAgICAgY2hlY2tTdHJpbmcoaW5wdXQsIHJlbGF0aW9uLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuZG91YmxlQ2xhc3MpIHsKICAgICAgICBjaGVja0RvdWJsZShpbnB1dCwgcmVsYXRpb24sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgfSBlbHNlIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5udW1DbGFzcykgewogICAgICAgIGNoZWNrTnVtKGlucHV0LCByZWxhdGlvbiwgc291cmNlSW5mb3JtYXRpb24pOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gX2NvbW1vbkVsZW1lbnRzLmJvb2xDbGFzcykgewogICAgICAgIGNoZWNrQm9vbChpbnB1dCwgcmVsYXRpb24sIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgfSBlbHNlIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5pbnRDbGFzcykgewogICAgICAgIC8vIFRoZSBpcyBjaGVjayBpbiB0aGUgY29kZSB0ZWxscyB1cyB0aGF0IGl0IG1pZ2h0IG5vdCBiZSBhbgogICAgICAgIC8vIGludC4gU28gd2UgZG8gYSB0eXBlb2YgZmlyc3QgdG8gYXZvaWQgcG9zc2libGUKICAgICAgICAvLyBkZW9wdGltaXphdGlvbnMgb24gdGhlIEpTIGVuZ2luZSBkdWUgdG8gdGhlIE1hdGguZmxvb3IgY2hlY2suCiAgICAgICAgY2hlY2tOdW0oaW5wdXQsIHJlbGF0aW9uLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAganMuRXhwcmVzc2lvbiBudW1UZXN0ID0gcG9wKCk7CiAgICAgICAgY2hlY2tCaWdJbnQoaW5wdXQsIHJlbGF0aW9uLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgcHVzaChuZXcganMuQmluYXJ5KG5lZ2F0aXZlID8gJ3x8JyA6ICcmJicsIG51bVRlc3QsIHBvcCgpKQogICAgICAgICAgICAud2l0aFNvdXJjZUluZm9ybWF0aW9uKHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIH0gZWxzZSBpZiAobm9kZS51c2VJbnN0YW5jZU9mKSB7CiAgICAgICAgYXNzZXJ0KGludGVyY2VwdG9yID09IG51bGwpOwogICAgICAgIGNoZWNrVHlwZVZpYUluc3RhbmNlb2YoaW5wdXQsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICBuZWdhdGl2ZTogbmVnYXRpdmUpOwogICAgICB9IGVsc2UgaWYgKF9jb21tb25FbGVtZW50cy5pc051bWJlck9yU3RyaW5nU3VwZXJ0eXBlKGVsZW1lbnQpKSB7CiAgICAgICAgaGFuZGxlTnVtYmVyT3JTdHJpbmdTdXBlcnR5cGVDaGVjaygKICAgICAgICAgICAgaW5wdXQsIGludGVyY2VwdG9yLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgICAgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgICAgfSBlbHNlIGlmIChfY29tbW9uRWxlbWVudHMuaXNTdHJpbmdPbmx5U3VwZXJ0eXBlKGVsZW1lbnQpKSB7CiAgICAgICAgaGFuZGxlU3RyaW5nU3VwZXJ0eXBlQ2hlY2soaW5wdXQsIGludGVyY2VwdG9yLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgICAgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgICAgfSBlbHNlIGlmIChlbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5saXN0Q2xhc3MgfHwKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5pc0xpc3RTdXBlcnR5cGUoZWxlbWVudCkpIHsKICAgICAgICBoYW5kbGVMaXN0T3JTdXBlcnR5cGVDaGVjayhpbnB1dCwgaW50ZXJjZXB0b3IsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICBuZWdhdGl2ZTogbmVnYXRpdmUpOwogICAgICB9IGVsc2UgaWYgKHR5cGUuaXNGdW5jdGlvblR5cGUpIHsKICAgICAgICBjaGVja1R5cGUoaW5wdXQsIGludGVyY2VwdG9yLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgICAgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgICAgfSBlbHNlIGlmICgoaW5wdXQuaXNQcmltaXRpdmUoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlUcnVlICYmCiAgICAgICAgICAgICAgaW5wdXQuaXNQcmltaXRpdmVBcnJheShfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5RmFsc2UpIHx8CiAgICAgICAgICBpbnB1dC5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgY2hlY2tPYmplY3QoaW5wdXQsIHJlbGF0aW9uLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICBqcy5FeHByZXNzaW9uIG9iamVjdFRlc3QgPSBwb3AoKTsKICAgICAgICBjaGVja1R5cGUoaW5wdXQsIGludGVyY2VwdG9yLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgICAgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgICAgICBwdXNoKG5ldyBqcy5CaW5hcnkobmVnYXRpdmUgPyAnfHwnIDogJyYmJywgb2JqZWN0VGVzdCwgcG9wKCkpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjaGVja1R5cGUoaW5wdXQsIGludGVyY2VwdG9yLCB0eXBlLCBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgICAgbmVnYXRpdmU6IG5lZ2F0aXZlKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBlbWl0SXNWaWFJbnRlcmNlcHRvcigKICAgICAgSElzVmlhSW50ZXJjZXB0b3Igbm9kZSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIG5lZ2F0aXZlOiBmYWxzZX0pIHsKICAgIGNoZWNrVHlwZVZpYVByb3BlcnR5KAogICAgICAgIG5vZGUuaW50ZXJjZXB0b3IsIG5vZGUudHlwZUV4cHJlc3Npb24sIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgIG5lZ2F0aXZlOiBuZWdhdGl2ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUNvbnZlcnNpb24oSFR5cGVDb252ZXJzaW9uIG5vZGUpIHsKICAgIGFzc2VydChub2RlLmlzVHlwZUNoZWNrIHx8IG5vZGUuaXNDYXN0Q2hlY2spOwogICAgRGFydFR5cGUgdHlwZSA9IG5vZGUudHlwZUV4cHJlc3Npb247CiAgICBhc3NlcnQoIXR5cGUuaXNUeXBlZGVmKTsKICAgIGFzc2VydCghdHlwZS5pc0R5bmFtaWMpOwogICAgYXNzZXJ0KCF0eXBlLmlzVm9pZCk7CiAgICBpZiAodHlwZS5pc0Z1bmN0aW9uVHlwZSkgewogICAgICAvLyBUT0RPKDUwMjIpOiBXZSBjdXJyZW50bHkgZ2VuZXJhdGUgJGlzRnVuY3Rpb24gY2hlY2tzIGZvcgogICAgICAvLyBmdW5jdGlvbiB0eXBlcy4KICAgICAgX3JlZ2lzdHJ5CiAgICAgICAgICAucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmlzQ2hlY2soX2NvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uVHlwZSkpOwogICAgfQogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pc0NoZWNrKHR5cGUpKTsKCiAgICBDaGVja2VkTW9kZUhlbHBlciBoZWxwZXIgPSBfY2hlY2tlZE1vZGVIZWxwZXJzLmdldENoZWNrZWRNb2RlSGVscGVyKAogICAgICAgIHR5cGUsIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywKICAgICAgICB0eXBlQ2FzdDogbm9kZS5pc0Nhc3RDaGVjayk7CgogICAgU3RhdGljVXNlIHN0YXRpY1VzZSA9IGhlbHBlci5nZXRTdGF0aWNVc2UoX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzKTsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShzdGF0aWNVc2UpOwogICAgTGlzdDxqcy5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSA8anMuRXhwcmVzc2lvbj5bXTsKICAgIHVzZShub2RlLmNoZWNrZWRJbnB1dCk7CiAgICBhcmd1bWVudHMuYWRkKHBvcCgpKTsKICAgIGhlbHBlci5nZW5lcmF0ZUFkZGl0aW9uYWxBcmd1bWVudHModGhpcywgX25hbWVyLCBub2RlLCBhcmd1bWVudHMpOwogICAgcHVzaCgKICAgICAgICBuZXcganMuQ2FsbChfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhzdGF0aWNVc2UuZWxlbWVudCksIGFyZ3VtZW50cykKICAgICAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJpbWl0aXZlQ2hlY2soSFByaW1pdGl2ZUNoZWNrIG5vZGUpIHsKICAgIGpzLkV4cHJlc3Npb24gdGVzdCA9IF9nZW5lcmF0ZVJlY2VpdmVyT3JBcmd1bWVudFR5cGVUZXN0KG5vZGUpOwogICAganMuQmxvY2sgb2xkQ29udGFpbmVyID0gY3VycmVudENvbnRhaW5lcjsKICAgIGpzLlN0YXRlbWVudCBib2R5ID0gbmV3IGpzLkJsb2NrLmVtcHR5KCk7CiAgICBjdXJyZW50Q29udGFpbmVyID0gYm9keTsKICAgIGlmIChub2RlLmlzQXJndW1lbnRUeXBlQ2hlY2spIHsKICAgICAgZ2VuZXJhdGVUaHJvd1dpdGhIZWxwZXIoCiAgICAgICAgICBfY29tbW9uRWxlbWVudHMudGhyb3dJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24sIG5vZGUuY2hlY2tlZElucHV0LAogICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIGlmIChub2RlLmlzUmVjZWl2ZXJUeXBlQ2hlY2spIHsKICAgICAgdXNlKG5vZGUuY2hlY2tlZElucHV0KTsKICAgICAganMuTmFtZSBtZXRob2ROYW1lID0KICAgICAgICAgIF9uYW1lci5pbnZvY2F0aW9uTmFtZShub2RlLnJlY2VpdmVyVHlwZUNoZWNrU2VsZWN0b3IpOwogICAgICBqcy5FeHByZXNzaW9uIGNhbGwgPSBqcy5wcm9wZXJ0eUNhbGwoCiAgICAgICAgICBwb3AoKSwgbWV0aG9kTmFtZSwgW10pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgcHVzaFN0YXRlbWVudCgKICAgICAgICAgIG5ldyBqcy5SZXR1cm4oY2FsbCkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICAgIH0KICAgIGN1cnJlbnRDb250YWluZXIgPSBvbGRDb250YWluZXI7CiAgICBib2R5ID0gdW53cmFwU3RhdGVtZW50KGJvZHkpOwogICAgcHVzaFN0YXRlbWVudChuZXcganMuSWYubm9FbHNlKHRlc3QsIGJvZHkpCiAgICAgICAgLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBqcy5FeHByZXNzaW9uIF9nZW5lcmF0ZVJlY2VpdmVyT3JBcmd1bWVudFR5cGVUZXN0KEhQcmltaXRpdmVDaGVjayBub2RlKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gbm9kZS50eXBlRXhwcmVzc2lvbjsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IG5vZGUuY2hlY2tlZElucHV0OwogICAgQWJzdHJhY3RWYWx1ZSBjaGVja2VkVHlwZSA9IG5vZGUuY2hlY2tlZFR5cGU7CiAgICAvLyBUaGlzIHBhdGggaXMgbm8gbG9uZ2VyIHVzZWQgZm9yIGluZGV4YWJsZSBwcmltaXRpdmUgdHlwZXMuCiAgICBhc3NlcnQoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNKc0luZGV4YWJsZShjaGVja2VkVHlwZSkuaXNQb3RlbnRpYWxseUZhbHNlKTsKICAgIC8vIEZpZ3VyZSBvdXQgaWYgaXQgaXMgYmVuZWZpY2lhbCB0byB1c2UgYSBudWxsIGNoZWNrLiAgVjggZ2VuZXJhbGx5IHByZWZlcnMKICAgIC8vICd0eXBlb2YnIGNoZWNrcywgYnV0IGZvciBpbnRlZ2VycyB3ZSBjYW5ub3QgY29tcGlsZSB0aGlzIHRlc3QgaW50byBhCiAgICAvLyBzaW5nbGUgdHlwZW9mIGNoZWNrIHNvIHRoZSBudWxsIGNoZWNrIGlzIGNoZWFwZXIuCiAgICBpZiAodHlwZSA9PSBfY29tbW9uRWxlbWVudHMubnVtVHlwZSkgewogICAgICAvLyBpbnB1dCBpcyAhbnVtCiAgICAgIGNoZWNrTnVtKGlucHV0LCAnIT09JywgaW5wdXQuc291cmNlSW5mb3JtYXRpb24pOwogICAgICByZXR1cm4gcG9wKCk7CiAgICB9CiAgICBpZiAodHlwZSA9PSBfY29tbW9uRWxlbWVudHMuYm9vbFR5cGUpIHsKICAgICAgLy8gaW5wdXQgaXMgIWJvb2wKICAgICAgY2hlY2tCb29sKGlucHV0LCAnIT09JywgaW5wdXQuc291cmNlSW5mb3JtYXRpb24pOwogICAgICByZXR1cm4gcG9wKCk7CiAgICB9CiAgICB0aHJvdyBmYWlsZWRBdChpbnB1dCwgJ1VuZXhwZWN0ZWQgY2hlY2s6ICR0eXBlLicpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvb2xDb252ZXJzaW9uKEhCb29sQ29udmVyc2lvbiBub2RlKSB7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmlzQ2hlY2soX2NvbW1vbkVsZW1lbnRzLmJvb2xUeXBlKSk7CiAgICBDaGVja2VkTW9kZUhlbHBlciBoZWxwZXIgPSBjb25zdCBDaGVja2VkTW9kZUhlbHBlcignYm9vbENvbnZlcnNpb25DaGVjaycpOwogICAgU3RhdGljVXNlIHN0YXRpY1VzZSA9IGhlbHBlci5nZXRTdGF0aWNVc2UoX2NvbW1vbkVsZW1lbnRzKTsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShzdGF0aWNVc2UpOwogICAgdXNlKG5vZGUuY2hlY2tlZElucHV0KTsKICAgIExpc3Q8anMuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gW3BvcCgpXTsKICAgIHB1c2goCiAgICAgICAgbmV3IGpzLkNhbGwoX2VtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3Moc3RhdGljVXNlLmVsZW1lbnQpLCBhcmd1bWVudHMpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVLbm93bihIVHlwZUtub3duIG5vZGUpIHsKICAgIC8vIFtIVHlwZUtub3duXSBpbnN0cnVjdGlvbnMgYXJlIHJlbW92ZWQgYmVmb3JlIGdlbmVyYXRpbmcgY29kZS4KICAgIGFzc2VydChmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUluZm9SZWFkUmF3KEhUeXBlSW5mb1JlYWRSYXcgbm9kZSkgewogICAgdXNlKG5vZGUuaW5wdXRzWzBdKTsKICAgIGpzLkV4cHJlc3Npb24gcmVjZWl2ZXIgPSBwb3AoKTsKICAgIHB1c2goanMuanMocicjLiMnLCBbcmVjZWl2ZXIsIF9uYW1lci5ydGlGaWVsZEpzTmFtZV0pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlSW5mb1JlYWRWYXJpYWJsZShIVHlwZUluZm9SZWFkVmFyaWFibGUgbm9kZSkgewogICAgVHlwZVZhcmlhYmxlRW50aXR5IGVsZW1lbnQgPSBub2RlLnZhcmlhYmxlLmVsZW1lbnQ7CiAgICBpbnQgaW5kZXggPSBlbGVtZW50LmluZGV4OwoKICAgIGpzLkV4cHJlc3Npb24gaW50ZXJjZXB0b3I7CiAgICBpZiAobm9kZS5pc0ludGVyY2VwdGVkKSB7CiAgICAgIHVzZShub2RlLmludGVyY2VwdG9yKTsKICAgICAgaW50ZXJjZXB0b3IgPSBwb3AoKTsKICAgIH0KICAgIEhJbnN0cnVjdGlvbiBvYmplY3QgPSBub2RlLm9iamVjdDsKICAgIHVzZShvYmplY3QpOwogICAganMuRXhwcmVzc2lvbiByZWNlaXZlciA9IHBvcCgpOwoKICAgIGlmICh0eXBlVmFyaWFibGVBY2Nlc3NOZWVkc1N1YnN0aXR1dGlvbihlbGVtZW50LCBvYmplY3QuaW5zdHJ1Y3Rpb25UeXBlKSkgewogICAgICBqcy5FeHByZXNzaW9uIHR5cGVOYW1lID0KICAgICAgICAgIGpzLnF1b3RlTmFtZShfbmFtZXIucnVudGltZVR5cGVOYW1lKGVsZW1lbnQudHlwZURlY2xhcmF0aW9uKSk7CiAgICAgIGlmIChub2RlLmlzSW50ZXJjZXB0ZWQpIHsKICAgICAgICBGdW5jdGlvbkVudGl0eSBoZWxwZXJFbGVtZW50ID0KICAgICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmdldFJ1bnRpbWVUeXBlQXJndW1lbnRJbnRlcmNlcHRlZDsKICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgICAgIG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKGhlbHBlckVsZW1lbnQsIENhbGxTdHJ1Y3R1cmUuRk9VUl9BUkdTKSk7CiAgICAgICAganMuRXhwcmVzc2lvbiBoZWxwZXIgPSBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhoZWxwZXJFbGVtZW50KTsKICAgICAgICBwdXNoKGpzLmpzKHInIygjLCAjLCAjLCAjKScsIFsKICAgICAgICAgIGhlbHBlciwKICAgICAgICAgIGludGVyY2VwdG9yLAogICAgICAgICAgcmVjZWl2ZXIsCiAgICAgICAgICB0eXBlTmFtZSwKICAgICAgICAgIGpzLmpzLm51bWJlcihpbmRleCkKICAgICAgICBdKS53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgICB9IGVsc2UgewogICAgICAgIEZ1bmN0aW9uRW50aXR5IGhlbHBlckVsZW1lbnQgPSBfY29tbW9uRWxlbWVudHMuZ2V0UnVudGltZVR5cGVBcmd1bWVudDsKICAgICAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgICAgIGhlbHBlckVsZW1lbnQsIENhbGxTdHJ1Y3R1cmUuVEhSRUVfQVJHUykpOwogICAgICAgIGpzLkV4cHJlc3Npb24gaGVscGVyID0gX2VtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoaGVscGVyRWxlbWVudCk7CiAgICAgICAgcHVzaChqcy5qcyhyJyMoIywgIywgIyknLCBbCiAgICAgICAgICBoZWxwZXIsCiAgICAgICAgICByZWNlaXZlciwKICAgICAgICAgIHR5cGVOYW1lLAogICAgICAgICAganMuanMubnVtYmVyKGluZGV4KQogICAgICAgIF0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IGhlbHBlckVsZW1lbnQgPSBfY29tbW9uRWxlbWVudHMuZ2V0VHlwZUFyZ3VtZW50QnlJbmRleDsKICAgICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoaGVscGVyRWxlbWVudCwgQ2FsbFN0cnVjdHVyZS5UV09fQVJHUykpOwogICAgICBqcy5FeHByZXNzaW9uIGhlbHBlciA9IF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGhlbHBlckVsZW1lbnQpOwogICAgICBwdXNoKGpzLmpzKHInIygjLCAjKScsIFsKICAgICAgICBoZWxwZXIsCiAgICAgICAgcmVjZWl2ZXIsCiAgICAgICAganMuanMubnVtYmVyKGluZGV4KQogICAgICBdKS53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVJbmZvRXhwcmVzc2lvbihIVHlwZUluZm9FeHByZXNzaW9uIG5vZGUpIHsKICAgIERhcnRUeXBlIHR5cGUgPSBub2RlLmRhcnRUeXBlOwogICAgaWYgKG5vZGUuaXNUeXBlVmFyaWFibGVSZXBsYWNlbWVudCkgewogICAgICBfcmVnaXN0cnkucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLnR5cGVBcmd1bWVudCh0eXBlKSk7CiAgICB9CgogICAgTGlzdDxqcy5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSA8anMuRXhwcmVzc2lvbj5bXTsKICAgIGZvciAoSEluc3RydWN0aW9uIGlucHV0IGluIG5vZGUuaW5wdXRzKSB7CiAgICAgIHVzZShpbnB1dCk7CiAgICAgIGFyZ3VtZW50cy5hZGQocG9wKCkpOwogICAgfQoKICAgIHN3aXRjaCAobm9kZS5raW5kKSB7CiAgICAgIGNhc2UgVHlwZUluZm9FeHByZXNzaW9uS2luZC5DT01QTEVURToKICAgICAgICBpbnQgaW5kZXggPSAwOwogICAgICAgIGpzLkV4cHJlc3Npb24gcmVzdWx0ID0gX3J0aUVuY29kZXIuZ2V0VHlwZVJlcHJlc2VudGF0aW9uKAogICAgICAgICAgICBfZW1pdHRlciwgdHlwZSwgKFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUpID0+IGFyZ3VtZW50c1tpbmRleCsrXSk7CiAgICAgICAgYXNzZXJ0KAogICAgICAgICAgICBpbmRleCA9PSBub2RlLmlucHV0cy5sZW5ndGgsCiAgICAgICAgICAgICJOb3QgYWxsIGlucHV0IGlzIHJlYWQgZm9yIHR5cGUgJHt0eXBlfTogIgogICAgICAgICAgICAiJGluZGV4IG9mICR7bm9kZS5pbnB1dHN9LiIpOwogICAgICAgIHB1c2gocmVzdWx0KTsKICAgICAgICByZXR1cm47CgogICAgICBjYXNlIFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuSU5TVEFOQ0U6CiAgICAgICAgLy8gV2UgZXhwZWN0IG9ubHkgZmxhdCB0eXBlcyBmb3IgdGhlIElOU1RBTkNFIHJlcHJlc2VudGF0aW9uLgogICAgICAgIGFzc2VydCgKICAgICAgICAgICAgKHR5cGUgYXMgSW50ZXJmYWNlVHlwZSkudHlwZUFyZ3VtZW50cy5sZW5ndGggPT0gYXJndW1lbnRzLmxlbmd0aCk7CiAgICAgICAgX3JlZ2lzdHJ5CiAgICAgICAgICAgIC8vIGlnbm9yZTpkZXByZWNhdGVkX21lbWJlcl91c2VfZnJvbV9zYW1lX3BhY2thZ2UKICAgICAgICAgICAgLnJlZ2lzdGVySW5zdGFudGlhdGVkQ2xhc3MoX2NvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcyk7CiAgICAgICAgcHVzaChuZXcganMuQXJyYXlJbml0aWFsaXplcihhcmd1bWVudHMpCiAgICAgICAgICAgIC53aXRoU291cmNlSW5mb3JtYXRpb24obm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogIH0KCiAgYm9vbCB0eXBlVmFyaWFibGVBY2Nlc3NOZWVkc1N1YnN0aXR1dGlvbigKICAgICAgVHlwZVZhcmlhYmxlRW50aXR5IGVsZW1lbnQsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJNYXNrKSB7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBlbGVtZW50LnR5cGVEZWNsYXJhdGlvbjsKCiAgICAvLyBTZWUgaWYgdGhlIHJlY2VpdmVyIHR5cGUgbmFycm93cyB0aGUgc2V0IG9mIGNsYXNzZXMgdG8gb25lcyB0aGF0IGNhbiBiZQogICAgLy8gaW5kZXhlZC4KICAgIC8vIFRPRE8oc3JhKTogQ3VycmVudGx5IHRoZSBvbmx5IGNvbnZlbmllbnQgcXVlcnkgaXMgW3NpbmdsZUNsYXNzXS4gV2UKICAgIC8vIHNob3VsZCBpdGVyYXRlIG92ZXIgYWxsIHRoZSBjb25jcmV0ZSBjbGFzc2VzIGluIFtyZWNlaXZlck1hc2tdLgogICAgQ2xhc3NFbnRpdHkgcmVjZWl2ZXJDbGFzcyA9CiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZ2V0RXhhY3RDbGFzcyhyZWNlaXZlck1hc2spOwogICAgaWYgKHJlY2VpdmVyQ2xhc3MgIT0gbnVsbCkgewogICAgICBpZiAoX3J0aVN1YnN0aXR1dGlvbnMuaXNUcml2aWFsU3Vic3RpdHV0aW9uKHJlY2VpdmVyQ2xhc3MsIGNscykpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoX2Nsb3NlZFdvcmxkLmlzVXNlZEFzTWl4aW4oY2xzKSkgcmV0dXJuIHRydWU7CgogICAgcmV0dXJuIF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5hbnlTdHJpY3RTdWJjbGFzc09mKGNscywKICAgICAgICAoQ2xhc3NFbnRpdHkgc3ViY2xhc3MpIHsKICAgICAgcmV0dXJuICFfcnRpU3Vic3RpdHV0aW9ucy5pc1RyaXZpYWxTdWJzdGl0dXRpb24oc3ViY2xhc3MsIGNscyk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRSZWYoSFJlZiBub2RlKSB7CiAgICB2aXNpdChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0SXNUZXN0KEhJc1Rlc3Qgbm9kZSkgewogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pc0NoZWNrKG5vZGUuZGFydFR5cGUpKTsKCiAgICB1c2Uobm9kZS50eXBlSW5wdXQpOwogICAganMuRXhwcmVzc2lvbiBmaXJzdCA9IHBvcCgpOwogICAgdXNlKG5vZGUuY2hlY2tlZElucHV0KTsKICAgIGpzLkV4cHJlc3Npb24gc2Vjb25kID0gcG9wKCk7CgogICAgRmllbGRFbnRpdHkgZmllbGQgPSBfY29tbW9uRWxlbWVudHMucnRpSXNGaWVsZDsKICAgIGpzLk5hbWUgbmFtZSA9IF9uYW1lci5pbnN0YW5jZUZpZWxkUHJvcGVydHlOYW1lKGZpZWxkKTsKCiAgICBwdXNoKGpzLmpzKCcjLiMoIyknLCBbZmlyc3QsIG5hbWUsIHNlY29uZF0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbigKICAgICAgICBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEFzQ2hlY2soSEFzQ2hlY2sgbm9kZSkgewogICAgdXNlKG5vZGUudHlwZUlucHV0KTsKICAgIGpzLkV4cHJlc3Npb24gZmlyc3QgPSBwb3AoKTsKICAgIHVzZShub2RlLmNoZWNrZWRJbnB1dCk7CiAgICBqcy5FeHByZXNzaW9uIHNlY29uZCA9IHBvcCgpOwoKICAgIF9yZWdpc3RyeS5yZWdpc3RlclR5cGVVc2UoVHlwZVVzZS5pc0NoZWNrKG5vZGUuY2hlY2tlZFR5cGVFeHByZXNzaW9uKSk7CgogICAgRmllbGRFbnRpdHkgZmllbGQgPSBub2RlLmlzVHlwZUVycm9yCiAgICAgICAgPyBfY29tbW9uRWxlbWVudHMucnRpQ2hlY2tGaWVsZAogICAgICAgIDogX2NvbW1vbkVsZW1lbnRzLnJ0aUFzRmllbGQ7CiAgICBqcy5OYW1lIG5hbWUgPSBfbmFtZXIuaW5zdGFuY2VGaWVsZFByb3BlcnR5TmFtZShmaWVsZCk7CgogICAgcHVzaChqcy5qcygnIy4jKCMpJywgW2ZpcnN0LCBuYW1lLCBzZWNvbmRdKS53aXRoU291cmNlSW5mb3JtYXRpb24oCiAgICAgICAgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRBc0NoZWNrU2ltcGxlKEhBc0NoZWNrU2ltcGxlIG5vZGUpIHsKICAgIHVzZShub2RlLmNoZWNrZWRJbnB1dCk7CiAgICBNZW1iZXJFbnRpdHkgbWV0aG9kID0gbm9kZS5tZXRob2Q7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgU3RhdGljVXNlLnN0YXRpY0ludm9rZShtZXRob2QsIENhbGxTdHJ1Y3R1cmUuT05FX0FSRykpOwogICAganMuRXhwcmVzc2lvbiBtZXRob2RBY2Nlc3MgPSBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhtZXRob2QpOwogICAgcHVzaChqcy5qcyhyJyMoIyknLCBbbWV0aG9kQWNjZXNzLCBwb3AoKV0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbigKICAgICAgICBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN1YnR5cGVDaGVjayhIU3VidHlwZUNoZWNrIG5vZGUpIHsKICAgIHRocm93IFVuaW1wbGVtZW50ZWRFcnJvcignU3NhQ29kZUdlbmVyYXRvci52aXNpdFN1YnR5cGVDaGVjayAgJG5vZGUnKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TG9hZFR5cGUoSExvYWRUeXBlIG5vZGUpIHsKICAgIEZ1bmN0aW9uRW50aXR5IGhlbHBlckVsZW1lbnQgPSBfY29tbW9uRWxlbWVudHMuZmluZFR5cGU7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoaGVscGVyRWxlbWVudCwgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSk7CiAgICBqcy5FeHByZXNzaW9uIHJlY2lwZSA9IF9ydGlSZWNpcGVFbmNvZGVyLmVuY29kZUdyb3VuZFJlY2lwZSgKICAgICAgICBfZW1pdHRlciwgVHlwZUV4cHJlc3Npb25SZWNpcGUobm9kZS50eXBlRXhwcmVzc2lvbikpOwogICAganMuRXhwcmVzc2lvbiBoZWxwZXIgPSBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhoZWxwZXJFbGVtZW50KTsKICAgIHB1c2goanMuanMocicjKCMpJywgW2hlbHBlciwgcmVjaXBlXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKAogICAgICAgIG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0SW5zdGFuY2VFbnZpcm9ubWVudChISW5zdGFuY2VFbnZpcm9ubWVudCBub2RlKSB7CiAgICB1c2Uobm9kZS5pbnB1dHMuc2luZ2xlKTsKICAgIGpzLkV4cHJlc3Npb24gcmVjZWl2ZXIgPSBwb3AoKTsKICAgIC8vIFRPRE8oc3JhKTogT3B0aW1pemUgdG8gZGlyZWN0IGZpZWxkIGFjY2VzcyB3aGVyZSBwb3NzaWJsZS4KICAgIC8vCiAgICAvLyAgICBwdXNoKGpzLmpzKHInIy4jJywgW3JlY2VpdmVyLCBfbmFtZXIucnRpRmllbGRKc05hbWVdKSk7CgogICAgRnVuY3Rpb25FbnRpdHkgaGVscGVyRWxlbWVudCA9IF9jb21tb25FbGVtZW50cy5pbnN0YW5jZVR5cGU7CiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgbmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoaGVscGVyRWxlbWVudCwgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSk7CiAgICBqcy5FeHByZXNzaW9uIGhlbHBlciA9IF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKGhlbHBlckVsZW1lbnQpOwogICAgcHVzaChqcy5qcyhyJyMoIyknLCBbaGVscGVyLCByZWNlaXZlcl0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbigKICAgICAgICBub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFR5cGVFdmFsKEhUeXBlRXZhbCBub2RlKSB7CiAgICAvLyBDYWxsIGBlbnYuX2V2YWwoInJlY2lwZSIpYC4KICAgIHVzZShub2RlLmlucHV0c1swXSk7CiAgICBqcy5FeHByZXNzaW9uIGVudmlyb25tZW50ID0gcG9wKCk7CiAgICBqcy5FeHByZXNzaW9uIHJlY2lwZSA9IF9ydGlSZWNpcGVFbmNvZGVyLmVuY29kZVJlY2lwZSgKICAgICAgICBfZW1pdHRlciwgbm9kZS5lbnZTdHJ1Y3R1cmUsIG5vZGUudHlwZUV4cHJlc3Npb24pOwoKICAgIE1lbWJlckVudGl0eSBtZXRob2QgPSBfY29tbW9uRWxlbWVudHMucnRpRXZhbE1ldGhvZDsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gU2VsZWN0b3IuZnJvbUVsZW1lbnQobWV0aG9kKTsKICAgIGpzLk5hbWUgbWV0aG9kTGl0ZXJhbCA9IF9uYW1lci5pbnZvY2F0aW9uTmFtZShzZWxlY3Rvcik7CiAgICBwdXNoKGpzLmpzKCcjLiMoIyknLCBbCiAgICAgIGVudmlyb25tZW50LAogICAgICBtZXRob2RMaXRlcmFsLAogICAgICByZWNpcGUKICAgIF0pLndpdGhTb3VyY2VJbmZvcm1hdGlvbihub2RlLnNvdXJjZUluZm9ybWF0aW9uKSk7CgogICAgX3JlZ2lzdHJ5LnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgIG5ldyBTdGF0aWNVc2UuZGlyZWN0SW52b2tlKG1ldGhvZCwgc2VsZWN0b3IuY2FsbFN0cnVjdHVyZSwgbnVsbCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRUeXBlQmluZChIVHlwZUJpbmQgbm9kZSkgewogICAgLy8gQ2FsbCBgZW52MS5fYmluZChlbnYyKWAuCiAgICBhc3NlcnQobm9kZS5pbnB1dHMubGVuZ3RoID09IDIpOwogICAgdXNlKG5vZGUuaW5wdXRzWzBdKTsKICAgIGpzLkV4cHJlc3Npb24gZW52aXJvbm1lbnQgPSBwb3AoKTsKICAgIHVzZShub2RlLmlucHV0c1sxXSk7CiAgICBqcy5FeHByZXNzaW9uIGV4dGVuc2lvbnMgPSBwb3AoKTsKCiAgICBNZW1iZXJFbnRpdHkgbWV0aG9kID0gX2NvbW1vbkVsZW1lbnRzLnJ0aUJpbmRNZXRob2Q7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IFNlbGVjdG9yLmZyb21FbGVtZW50KG1ldGhvZCk7CiAgICBqcy5OYW1lIG1ldGhvZExpdGVyYWwgPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUoc2VsZWN0b3IpOwogICAgcHVzaChqcy5qcygnIy4jKCMpJywgWwogICAgICBlbnZpcm9ubWVudCwKICAgICAgbWV0aG9kTGl0ZXJhbCwKICAgICAgZXh0ZW5zaW9ucwogICAgXSkud2l0aFNvdXJjZUluZm9ybWF0aW9uKG5vZGUuc291cmNlSW5mb3JtYXRpb24pKTsKCiAgICBfcmVnaXN0cnkucmVnaXN0ZXJTdGF0aWNVc2UoCiAgICAgICAgbmV3IFN0YXRpY1VzZS5kaXJlY3RJbnZva2UobWV0aG9kLCBzZWxlY3Rvci5jYWxsU3RydWN0dXJlLCBudWxsKSk7CiAgfQp9Co2JAE5OPAEc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bGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9jb2RlZ2VuLmRhcnQnIHNob3cgQ29kZWdlblJlZ2lzdHJ5OwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JyBzaG93IFNlbGVjdG9yczsKaW1wb3J0ICcuLi9jb21tb24vdGFza3MuZGFydCcgc2hvdyBNZWFzdXJlciwgQ29tcGlsZXJUYXNrOwppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgSkNvbW1vbkVsZW1lbnRzOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ZpZWxkX2FuYWx5c2lzLmRhcnQnCiAgICBzaG93IEZpZWxkQW5hbHlzaXNEYXRhLCBKRmllbGRBbmFseXNpczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2JhY2tlbmQuZGFydCcgc2hvdyBDb2RlZ2VuSW5wdXRzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCcgc2hvdyBOYXRpdmVEYXRhOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL3R5cGVfcmVjaXBlLmRhcnQnIHNob3cgVHlwZVJlY2lwZTsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL3NwZWNpYWxpemVkX2NoZWNrcy5kYXJ0JzsKaW1wb3J0ICcuLi9uYXRpdmUvYmVoYXZpb3IuZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NpZGVfZWZmZWN0cy5kYXJ0JyBzaG93IFNpZGVFZmZlY3RzOwppbXBvcnQgJy4uL3VuaXZlcnNlL3VzZS5kYXJ0JyBzaG93IFN0YXRpY1VzZTsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CmltcG9ydCAnaW50ZXJjZXB0b3Jfc2ltcGxpZmllci5kYXJ0JzsKaW1wb3J0ICdsb2dnaW5nLmRhcnQnOwppbXBvcnQgJ25vZGVzLmRhcnQnOwppbXBvcnQgJ3R5cGVzLmRhcnQnOwppbXBvcnQgJ3R5cGVzX3Byb3BhZ2F0aW9uLmRhcnQnOwppbXBvcnQgJ3ZhbHVlX3JhbmdlX2FuYWx5emVyLmRhcnQnOwppbXBvcnQgJ3ZhbHVlX3NldC5kYXJ0JzsKCmFic3RyYWN0IGNsYXNzIE9wdGltaXphdGlvblBoYXNlIHsKICBTdHJpbmcgZ2V0IG5hbWU7CiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCk7Cn0KCmNsYXNzIFNzYU9wdGltaXplclRhc2sgZXh0ZW5kcyBDb21waWxlclRhc2sgewogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKCiAgTWFwPEhJbnN0cnVjdGlvbiwgUmFuZ2U+IHJhbmdlcyA9IDxISW5zdHJ1Y3Rpb24sIFJhbmdlPnt9OwoKICBNYXA8TWVtYmVyRW50aXR5LCBPcHRpbWl6YXRpb25UZXN0TG9nPiBsb2dnZXJzRm9yVGVzdGluZzsKCiAgU3NhT3B0aW1pemVyVGFzayhNZWFzdXJlciBtZWFzdXJlciwgdGhpcy5fb3B0aW9ucykgOiBzdXBlcihtZWFzdXJlcik7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiAnU1NBIG9wdGltaXplcic7CgogIHZvaWQgb3B0aW1pemUoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIEhHcmFwaCBncmFwaCwKICAgICAgQ29kZWdlbklucHV0cyBjb2RlZ2VuLAogICAgICBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsCiAgICAgIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsCiAgICAgIENvZGVnZW5SZWdpc3RyeSByZWdpc3RyeSkgewogICAgdm9pZCBydW5QaGFzZShPcHRpbWl6YXRpb25QaGFzZSBwaGFzZSkgewogICAgICBtZWFzdXJlU3VidGFzayhwaGFzZS5uYW1lLCAoKSA9PiBwaGFzZS52aXNpdEdyYXBoKGdyYXBoKSk7CiAgICAgIGNvZGVnZW4udHJhY2VyLnRyYWNlR3JhcGgocGhhc2UubmFtZSwgZ3JhcGgpOwogICAgICBhc3NlcnQoZ3JhcGguaXNWYWxpZCgpLCAnR3JhcGggbm90IHZhbGlkIGFmdGVyICR7cGhhc2UubmFtZX0nKTsKICAgIH0KCiAgICBib29sIHRydXN0UHJpbWl0aXZlcyA9IF9vcHRpb25zLnRydXN0UHJpbWl0aXZlczsKICAgIFNldDxISW5zdHJ1Y3Rpb24+IGJvdW5kc0NoZWNrZWQgPSBuZXcgU2V0PEhJbnN0cnVjdGlvbj4oKTsKICAgIFNzYUNvZGVNb3Rpb24gY29kZU1vdGlvbjsKICAgIFNzYUxvYWRFbGltaW5hdGlvbiBsb2FkRWxpbWluYXRpb247CgogICAgT3B0aW1pemF0aW9uVGVzdExvZyBsb2c7CiAgICBpZiAocmV0YWluRGF0YUZvclRlc3RpbmcpIHsKICAgICAgbG9nZ2Vyc0ZvclRlc3RpbmcgPz89IHt9OwogICAgICBsb2dnZXJzRm9yVGVzdGluZ1ttZW1iZXJdID0gbG9nID0gbmV3IE9wdGltaXphdGlvblRlc3RMb2coKTsKICAgIH0KCiAgICBtZWFzdXJlKCgpIHsKICAgICAgTGlzdDxPcHRpbWl6YXRpb25QaGFzZT4gcGhhc2VzID0gPE9wdGltaXphdGlvblBoYXNlPlsKICAgICAgICAvLyBSdW4gdHJpdmlhbCBpbnN0cnVjdGlvbiBzaW1wbGlmaWNhdGlvbiBmaXJzdCB0byBvcHRpbWl6ZQogICAgICAgIC8vIHNvbWUgcGF0dGVybnMgdXNlZnVsIGZvciB0eXBlIGNvbnZlcnNpb24uCiAgICAgICAgbmV3IFNzYUluc3RydWN0aW9uU2ltcGxpZmllcihnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLCBfb3B0aW9ucywKICAgICAgICAgICAgY29kZWdlbi5ydGlTdWJzdGl0dXRpb25zLCBjbG9zZWRXb3JsZCwgcmVnaXN0cnksIGxvZyksCiAgICAgICAgbmV3IFNzYVR5cGVDb252ZXJzaW9uSW5zZXJ0ZXIoY2xvc2VkV29ybGQpLAogICAgICAgIG5ldyBTc2FSZWR1bmRhbnRQaGlFbGltaW5hdG9yKCksCiAgICAgICAgbmV3IFNzYURlYWRQaGlFbGltaW5hdG9yKCksCiAgICAgICAgbmV3IFNzYVR5cGVQcm9wYWdhdG9yKGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsCiAgICAgICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLCBjbG9zZWRXb3JsZCwgbG9nKSwKICAgICAgICAvLyBBZnRlciB0eXBlIHByb3BhZ2F0aW9uLCBtb3JlIGluc3RydWN0aW9ucyBjYW4gYmUKICAgICAgICAvLyBzaW1wbGlmaWVkLgogICAgICAgIG5ldyBTc2FJbnN0cnVjdGlvblNpbXBsaWZpZXIoZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywgX29wdGlvbnMsCiAgICAgICAgICAgIGNvZGVnZW4ucnRpU3Vic3RpdHV0aW9ucywgY2xvc2VkV29ybGQsIHJlZ2lzdHJ5LCBsb2cpLAogICAgICAgIG5ldyBTc2FDaGVja0luc2VydGVyKHRydXN0UHJpbWl0aXZlcywgY2xvc2VkV29ybGQsIGJvdW5kc0NoZWNrZWQpLAogICAgICAgIG5ldyBTc2FJbnN0cnVjdGlvblNpbXBsaWZpZXIoZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywgX29wdGlvbnMsCiAgICAgICAgICAgIGNvZGVnZW4ucnRpU3Vic3RpdHV0aW9ucywgY2xvc2VkV29ybGQsIHJlZ2lzdHJ5LCBsb2cpLAogICAgICAgIG5ldyBTc2FDaGVja0luc2VydGVyKHRydXN0UHJpbWl0aXZlcywgY2xvc2VkV29ybGQsIGJvdW5kc0NoZWNrZWQpLAogICAgICAgIG5ldyBTc2FUeXBlUHJvcGFnYXRvcihnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLAogICAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywgY2xvc2VkV29ybGQsIGxvZyksCiAgICAgICAgLy8gUnVuIGEgZGVhZCBjb2RlIGVsaW1pbmF0b3IgYmVmb3JlIExJQ00gYmVjYXVzZSBkZWFkCiAgICAgICAgLy8gaW50ZXJjZXB0b3JzIGFyZSBvZnRlbiBpbiB0aGUgd2F5IG9mIExJQ00nYWJsZSBpbnN0cnVjdGlvbnMuCiAgICAgICAgbmV3IFNzYURlYWRDb2RlRWxpbWluYXRvcihjbG9zZWRXb3JsZCwgdGhpcyksCiAgICAgICAgbmV3IFNzYUdsb2JhbFZhbHVlTnVtYmVyZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbiksCiAgICAgICAgLy8gQWZ0ZXIgR1ZOLCBzb21lIGluc3RydWN0aW9ucyBtaWdodCBuZWVkIHRoZWlyIHR5cGUgdG8gYmUKICAgICAgICAvLyB1cGRhdGVkIGJlY2F1c2UgdGhleSBub3cgaGF2ZSBkaWZmZXJlbnQgaW5wdXRzLgogICAgICAgIG5ldyBTc2FUeXBlUHJvcGFnYXRvcihnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLAogICAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywgY2xvc2VkV29ybGQsIGxvZyksCiAgICAgICAgY29kZU1vdGlvbiA9IG5ldyBTc2FDb2RlTW90aW9uKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLAogICAgICAgIGxvYWRFbGltaW5hdGlvbiA9IG5ldyBTc2FMb2FkRWxpbWluYXRpb24oY2xvc2VkV29ybGQpLAogICAgICAgIG5ldyBTc2FSZWR1bmRhbnRQaGlFbGltaW5hdG9yKCksCiAgICAgICAgbmV3IFNzYURlYWRQaGlFbGltaW5hdG9yKCksCiAgICAgICAgLy8gQWZ0ZXIgR1ZOIGFuZCBsb2FkIGVsaW1pbmF0aW9uIHRoZSBzYW1lIHZhbHVlIG1heSBiZSB1c2VkIGluIGNvZGUKICAgICAgICAvLyBjb250cm9sbGVkIGJ5IGEgdGVzdCBvbiB0aGUgdmFsdWUsIHNvIHJlZG8gJ2NvbnZlcnNpb24gaW5zZXJ0aW9uJyB0bwogICAgICAgIC8vIGxlYXJuIGZyb20gdGhlIHJlZmluZWQgdHlwZS4KICAgICAgICBuZXcgU3NhVHlwZUNvbnZlcnNpb25JbnNlcnRlcihjbG9zZWRXb3JsZCksCiAgICAgICAgbmV3IFNzYVR5cGVQcm9wYWdhdG9yKGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsCiAgICAgICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLCBjbG9zZWRXb3JsZCwgbG9nKSwKICAgICAgICBuZXcgU3NhVmFsdWVSYW5nZUFuYWx5emVyKGNsb3NlZFdvcmxkLCB0aGlzKSwKICAgICAgICAvLyBQcmV2aW91cyBvcHRpbWl6YXRpb25zIG1heSBoYXZlIGdlbmVyYXRlZCBuZXcKICAgICAgICAvLyBvcHBvcnR1bml0aWVzIGZvciBpbnN0cnVjdGlvbiBzaW1wbGlmaWNhdGlvbi4KICAgICAgICBuZXcgU3NhSW5zdHJ1Y3Rpb25TaW1wbGlmaWVyKGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsIF9vcHRpb25zLAogICAgICAgICAgICBjb2RlZ2VuLnJ0aVN1YnN0aXR1dGlvbnMsIGNsb3NlZFdvcmxkLCByZWdpc3RyeSwgbG9nKSwKICAgICAgICBuZXcgU3NhQ2hlY2tJbnNlcnRlcih0cnVzdFByaW1pdGl2ZXMsIGNsb3NlZFdvcmxkLCBib3VuZHNDaGVja2VkKSwKICAgICAgXTsKICAgICAgcGhhc2VzLmZvckVhY2gocnVuUGhhc2UpOwoKICAgICAgLy8gU2ltcGxpZnlpbmcgaW50ZXJjZXB0b3JzIGlzIG5vdCBzdHJpY3RseSBqdXN0IGFuIG9wdGltaXphdGlvbiwgaXQgaXMKICAgICAgLy8gcmVxdWlyZWQgZm9yIGltcGxlbWVudGF0aW9uIGNvcnJlY3RuZXNzIGJlY2F1c2UgdGhlIGNvZGUgZ2VuZXJhdG9yCiAgICAgIC8vIGFzc3VtZXMgaXQgaXMgYWx3YXlzIHBlcmZvcm1lZC4KICAgICAgcnVuUGhhc2UobmV3IFNzYVNpbXBsaWZ5SW50ZXJjZXB0b3JzKGNsb3NlZFdvcmxkLCBtZW1iZXIuZW5jbG9zaW5nQ2xhc3MpKTsKCiAgICAgIFNzYURlYWRDb2RlRWxpbWluYXRvciBkY2UgPSBuZXcgU3NhRGVhZENvZGVFbGltaW5hdG9yKGNsb3NlZFdvcmxkLCB0aGlzKTsKICAgICAgcnVuUGhhc2UoZGNlKTsKICAgICAgaWYgKGNvZGVNb3Rpb24ubW92ZWRDb2RlIHx8CiAgICAgICAgICBkY2UuZWxpbWluYXRlZFNpZGVFZmZlY3RzIHx8CiAgICAgICAgICBsb2FkRWxpbWluYXRpb24ubmV3R3ZuQ2FuZGlkYXRlcykgewogICAgICAgIHBoYXNlcyA9IDxPcHRpbWl6YXRpb25QaGFzZT5bCiAgICAgICAgICBuZXcgU3NhVHlwZVByb3BhZ2F0b3IoZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywKICAgICAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywgY2xvc2VkV29ybGQsIGxvZyksCiAgICAgICAgICBuZXcgU3NhR2xvYmFsVmFsdWVOdW1iZXJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKSwKICAgICAgICAgIG5ldyBTc2FDb2RlTW90aW9uKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLAogICAgICAgICAgbmV3IFNzYVZhbHVlUmFuZ2VBbmFseXplcihjbG9zZWRXb3JsZCwgdGhpcyksCiAgICAgICAgICBuZXcgU3NhSW5zdHJ1Y3Rpb25TaW1wbGlmaWVyKGdsb2JhbEluZmVyZW5jZVJlc3VsdHMsIF9vcHRpb25zLAogICAgICAgICAgICAgIGNvZGVnZW4ucnRpU3Vic3RpdHV0aW9ucywgY2xvc2VkV29ybGQsIHJlZ2lzdHJ5LCBsb2cpLAogICAgICAgICAgbmV3IFNzYUNoZWNrSW5zZXJ0ZXIodHJ1c3RQcmltaXRpdmVzLCBjbG9zZWRXb3JsZCwgYm91bmRzQ2hlY2tlZCksCiAgICAgICAgICBuZXcgU3NhU2ltcGxpZnlJbnRlcmNlcHRvcnMoY2xvc2VkV29ybGQsIG1lbWJlci5lbmNsb3NpbmdDbGFzcyksCiAgICAgICAgICBuZXcgU3NhRGVhZENvZGVFbGltaW5hdG9yKGNsb3NlZFdvcmxkLCB0aGlzKSwKICAgICAgICBdOwogICAgICB9IGVsc2UgewogICAgICAgIHBoYXNlcyA9IDxPcHRpbWl6YXRpb25QaGFzZT5bCiAgICAgICAgICBuZXcgU3NhVHlwZVByb3BhZ2F0b3IoZ2xvYmFsSW5mZXJlbmNlUmVzdWx0cywKICAgICAgICAgICAgICBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywgY2xvc2VkV29ybGQsIGxvZyksCiAgICAgICAgICAvLyBSdW4gdGhlIHNpbXBsaWZpZXIgdG8gcmVtb3ZlIHVubmVlZGVkIHR5cGUgY2hlY2tzIGluc2VydGVkIGJ5CiAgICAgICAgICAvLyB0eXBlIHByb3BhZ2F0aW9uLgogICAgICAgICAgbmV3IFNzYUluc3RydWN0aW9uU2ltcGxpZmllcihnbG9iYWxJbmZlcmVuY2VSZXN1bHRzLCBfb3B0aW9ucywKICAgICAgICAgICAgICBjb2RlZ2VuLnJ0aVN1YnN0aXR1dGlvbnMsIGNsb3NlZFdvcmxkLCByZWdpc3RyeSwgbG9nKSwKICAgICAgICBdOwogICAgICB9CiAgICAgIHBoYXNlcy5mb3JFYWNoKHJ1blBoYXNlKTsKICAgIH0pOwogIH0KfQoKLy8vIFJldHVybnMgYHRydWVgIGlmIFttYXNrXSByZXByZXNlbnRzIG9ubHkgdHlwZXMgdGhhdCBoYXZlIGEgbGVuZ3RoIHRoYXQKLy8vIGNhbm5vdCBjaGFuZ2UuICBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBpcyBjb25zZXJ2YXRpdmUgZm9yIHRoZSBwdXJwb3NlCi8vLyBvZiBpZGVudGlmeWluZyBndm4tYWJsZSBsZW5ndGhzIGFuZCBtaXMtaWRlbnRpZmllcyBzb21lIHVuaW9ucyBvZiBmaXhlZAovLy8gbGVuZ3RoIGluZGV4YWJsZXMgKHNlZSBUT0RPKSBhcyBub3QgZml4ZWQgbGVuZ3RoLgpib29sIGlzRml4ZWRMZW5ndGgoQWJzdHJhY3RWYWx1ZSBtYXNrLCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQpIHsKICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwogIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzQ29udGFpbmVyKG1hc2spICYmCiAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0Q29udGFpbmVyTGVuZ3RoKG1hc2spICE9IG51bGwpIHsKICAgIC8vIEEgY29udGFpbmVyIG9uIHdoaWNoIHdlIGhhdmUgaW5mZXJyZWQgdGhlIGxlbmd0aC4KICAgIHJldHVybiB0cnVlOwogIH0KICAvLyBUT0RPKHNyYSk6IFJlY29nbml6ZSBhbnkgY29tYmluYXRpb24gb2YgZml4ZWQgbGVuZ3RoIGluZGV4YWJsZXMuCiAgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uaXNGaXhlZEFycmF5KG1hc2spLmlzRGVmaW5pdGVseVRydWUgfHwKICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5pc1N0cmluZ09yTnVsbChtYXNrKS5pc0RlZmluaXRlbHlUcnVlIHx8CiAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uaXNUeXBlZEFycmF5KG1hc2spLmlzRGVmaW5pdGVseVRydWUpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KCi8vLyBJZiBib3RoIGlucHV0cyB0byBrbm93biBvcGVyYXRpb25zIGFyZSBhdmFpbGFibGUgZXhlY3V0ZSB0aGUgb3BlcmF0aW9uIGF0Ci8vLyBjb21waWxlLXRpbWUuCmNsYXNzIFNzYUluc3RydWN0aW9uU2ltcGxpZmllciBleHRlbmRzIEhCYXNlVmlzaXRvcgogICAgaW1wbGVtZW50cyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgLy8gV2UgZG9uJ3QgcHJvZHVjZSBjb25zdGFudC1mb2xkZWQgc3RyaW5ncyBsb25nZXIgdGhhbiB0aGlzIHVubGVzcyB0aGV5IGhhdmUKICAvLyBhIHNpbmdsZSB1c2UuICBUaGlzIHByb3RlY3RzIGFnYWluc3QgZXhwb25lbnRpYWxseSBsYXJnZSBjb25zdGFudCBmb2xkZWQKICAvLyBzdHJpbmdzLgogIHN0YXRpYyBjb25zdCBNQVhfU0hBUkVEX0NPTlNUQU5UX0ZPTERFRF9TVFJJTkdfTEVOR1RIID0gNTEyOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICJTc2FJbnN0cnVjdGlvblNpbXBsaWZpZXIiOwogIGZpbmFsIEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzOwogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBmaW5hbCBSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zIF9ydGlTdWJzdGl0dXRpb25zOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgQ29kZWdlblJlZ2lzdHJ5IF9yZWdpc3RyeTsKICBmaW5hbCBPcHRpbWl6YXRpb25UZXN0TG9nIF9sb2c7CiAgSEdyYXBoIF9ncmFwaDsKCiAgU3NhSW5zdHJ1Y3Rpb25TaW1wbGlmaWVyKHRoaXMuX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMsIHRoaXMuX29wdGlvbnMsCiAgICAgIHRoaXMuX3J0aVN1YnN0aXR1dGlvbnMsIHRoaXMuX2Nsb3NlZFdvcmxkLCB0aGlzLl9yZWdpc3RyeSwgdGhpcy5fbG9nKTsKCiAgSkNvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50cyA9PiBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIF9jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBOYXRpdmVEYXRhIGdldCBfbmF0aXZlRGF0YSA9PiBfY2xvc2VkV29ybGQubmF0aXZlRGF0YTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCB2aXNpdGVlKSB7CiAgICBfZ3JhcGggPSB2aXNpdGVlOwogICAgdmlzaXREb21pbmF0b3JUcmVlKHZpc2l0ZWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBzaW1wbGlmeVBoaXMoYmxvY2spOwogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gYmxvY2suZmlyc3Q7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBISW5zdHJ1Y3Rpb24gbmV4dCA9IGluc3RydWN0aW9uLm5leHQ7CiAgICAgIEhJbnN0cnVjdGlvbiByZXBsYWNlbWVudCA9IGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgaWYgKHJlcGxhY2VtZW50ICE9IGluc3RydWN0aW9uKSB7CiAgICAgICAgYmxvY2sucmV3cml0ZShpbnN0cnVjdGlvbiwgcmVwbGFjZW1lbnQpOwoKICAgICAgICAvLyBUaGUgaW50ZXJzZWN0aW9uIG9mIGRvdWJsZSBhbmQgaW50IHJldHVybiBjb25mbGljdGluZywgYW5kCiAgICAgICAgLy8gYmVjYXVzZSBvZiBvdXIgbnVtYmVyIGltcGxlbWVudGF0aW9uIGZvciBKYXZhU2NyaXB0LCBpdAogICAgICAgIC8vIG1pZ2h0IGJlIHRoYXQgYW4gb3BlcmF0aW9uIHRob3VnaHQgdG8gcmV0dXJuIGRvdWJsZSwgY2FuIGJlCiAgICAgICAgLy8gc2ltcGxpZmllZCB0byBhbiBpbnQuIEZvciBleGFtcGxlOgogICAgICAgIC8vIGAyLjUgKiAxMGAuCiAgICAgICAgaWYgKCEocmVwbGFjZW1lbnQKICAgICAgICAgICAgICAgIC5pc051bWJlck9yTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICAgIGluc3RydWN0aW9uCiAgICAgICAgICAgICAgICAuaXNOdW1iZXJPck51bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkpIHsKICAgICAgICAgIC8vIElmIHdlIGNhbiByZXBsYWNlIFtpbnN0cnVjdGlvbl0gd2l0aCBbcmVwbGFjZW1lbnRdLCB0aGVuCiAgICAgICAgICAvLyBbcmVwbGFjZW1lbnRdJ3MgdHlwZSBjYW4gYmUgbmFycm93ZWQuCiAgICAgICAgICBBYnN0cmFjdFZhbHVlIG5ld1R5cGUgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRlcnNlY3Rpb24oCiAgICAgICAgICAgICAgcmVwbGFjZW1lbnQuaW5zdHJ1Y3Rpb25UeXBlLCBpbnN0cnVjdGlvbi5pbnN0cnVjdGlvblR5cGUpOwogICAgICAgICAgcmVwbGFjZW1lbnQuaW5zdHJ1Y3Rpb25UeXBlID0gbmV3VHlwZTsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSByZXBsYWNlbWVudCBpbnN0cnVjdGlvbiBkb2VzIG5vdCBrbm93IGl0cwogICAgICAgIC8vIHNvdXJjZSBlbGVtZW50LCB1c2UgdGhlIHNvdXJjZSBlbGVtZW50IG9mIHRoZQogICAgICAgIC8vIGluc3RydWN0aW9uLgogICAgICAgIHJlcGxhY2VtZW50LnNvdXJjZUVsZW1lbnQgPz89IGluc3RydWN0aW9uLnNvdXJjZUVsZW1lbnQ7CiAgICAgICAgcmVwbGFjZW1lbnQuc291cmNlSW5mb3JtYXRpb24gPz89IGluc3RydWN0aW9uLnNvdXJjZUluZm9ybWF0aW9uOwogICAgICAgIGlmICghcmVwbGFjZW1lbnQuaXNJbkJhc2ljQmxvY2soKSkgewogICAgICAgICAgLy8gVGhlIGNvbnN0YW50IGZvbGRpbmcgY2FuIHJldHVybiBhbiBpbnN0cnVjdGlvbiB0aGF0IGlzIGFscmVhZHkKICAgICAgICAgIC8vIHBhcnQgb2YgdGhlIGdyYXBoIChsaWtlIGFuIGlucHV0KSwgc28gd2Ugb25seSBhZGQgdGhlIHJlcGxhY2VtZW50CiAgICAgICAgICAvLyBpZiBuZWNlc3NhcnkuCiAgICAgICAgICBibG9jay5hZGRBZnRlcihpbnN0cnVjdGlvbiwgcmVwbGFjZW1lbnQpOwogICAgICAgICAgLy8gVmlzaXQgdGhlIHJlcGxhY2VtZW50IGFzIHRoZSBuZXh0IGluc3RydWN0aW9uIGluIGNhc2UgaXQKICAgICAgICAgIC8vIGNhbiBhbHNvIGJlIGNvbnN0YW50IGZvbGRlZCBhd2F5LgogICAgICAgICAgbmV4dCA9IHJlcGxhY2VtZW50OwogICAgICAgIH0KICAgICAgICBibG9jay5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogICAgICB9CiAgICAgIGluc3RydWN0aW9uID0gbmV4dDsKICAgIH0KICB9CgogIC8vIFNpbXBsaWZ5IHNvbWUgQ0ZHIGRpYW1vbmRzIHRvIGVxdWl2YWxlbnQgZXhwcmVzc2lvbnMuCiAgc2ltcGxpZnlQaGlzKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICAvLyBJcyBbYmxvY2tdIHRoZSBqb2luIHBvaW50IGZvciBhIHNpbXBsZSBkaWFtb25kIHRoYXQgZ2VuZXJhdGVzIGEgc2luZ2xlCiAgICAvLyBwaGkgbm9kZT8KICAgIGlmIChibG9jay5waGlzLmlzRW1wdHkpIHJldHVybjsKICAgIEhQaGkgcGhpID0gYmxvY2sucGhpcy5maXJzdDsKICAgIGlmIChwaGkubmV4dCAhPSBudWxsKSByZXR1cm47CiAgICBpZiAoYmxvY2sucHJlZGVjZXNzb3JzLmxlbmd0aCAhPSAyKSByZXR1cm47CiAgICBhc3NlcnQocGhpLmlucHV0cy5sZW5ndGggPT0gMik7CiAgICBIQmFzaWNCbG9jayBiMSA9IGJsb2NrLnByZWRlY2Vzc29yc1swXTsKICAgIEhCYXNpY0Jsb2NrIGIyID0gYmxvY2sucHJlZGVjZXNzb3JzWzFdOwogICAgSEJhc2ljQmxvY2sgZG9taW5hdG9yID0gYmxvY2suZG9taW5hdG9yOwogICAgaWYgKCEoYjEuZG9taW5hdG9yID09IGRvbWluYXRvciAmJiBiMi5kb21pbmF0b3IgPT0gZG9taW5hdG9yKSkgcmV0dXJuOwoKICAgIC8vIEV4dHJhY3QgdGhlIGNvbnRyb2xsaW5nIGNvbmRpdGlvbi4KICAgIEhJbnN0cnVjdGlvbiBjb250cm9sRmxvdyA9IGRvbWluYXRvci5sYXN0OwogICAgaWYgKGNvbnRyb2xGbG93IGlzISBISWYpIHJldHVybjsKICAgIEhJbnN0cnVjdGlvbiB0ZXN0ID0gY29udHJvbEZsb3cuaW5wdXRzLnNpbmdsZTsKICAgIGlmICh0ZXN0LnVzZWRCeS5sZW5ndGggPiAxKSByZXR1cm47CgogICAgYm9vbCBuZWdhdGVkID0gZmFsc2U7CiAgICB3aGlsZSAodGVzdCBpcyBITm90KSB7CiAgICAgIHRlc3QgPSB0ZXN0LmlucHV0cy5zaW5nbGU7CiAgICAgIGlmICh0ZXN0LnVzZWRCeS5sZW5ndGggPiAxKSByZXR1cm47CiAgICAgIG5lZ2F0ZWQgPSAhbmVnYXRlZDsKICAgIH0KCiAgICBpZiAodGVzdCBpcyEgSElkZW50aXR5KSByZXR1cm47CiAgICBISW5zdHJ1Y3Rpb24gdGVzdGVkOwogICAgaWYgKHRlc3QuaW5wdXRzWzBdLmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICB0ZXN0ZWQgPSB0ZXN0LmlucHV0c1sxXTsKICAgIH0gZWxzZSBpZiAodGVzdC5pbnB1dHNbMV0uaXNOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHRlc3RlZCA9IHRlc3QuaW5wdXRzWzBdOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiB3aGVuTnVsbFZhbHVlID0gcGhpLmlucHV0c1tuZWdhdGVkID8gMSA6IDBdOwogICAgSEluc3RydWN0aW9uIHdoZW5Ob3ROdWxsVmFsdWUgPSBwaGkuaW5wdXRzW25lZ2F0ZWQgPyAwIDogMV07CiAgICBIQmFzaWNCbG9jayB3aGVuTnVsbEJsb2NrID0gYmxvY2sucHJlZGVjZXNzb3JzW25lZ2F0ZWQgPyAxIDogMF07CiAgICBIQmFzaWNCbG9jayB3aGVuTm90TnVsbEJsb2NrID0gYmxvY2sucHJlZGVjZXNzb3JzW25lZ2F0ZWQgPyAwIDogMV07CgogICAgLy8gSWYgJ3gnIGlzIG51bGxhYmxlIGJvb2xlYW4sCiAgICAvLwogICAgLy8gICAgIHggPT0gbnVsbCA/IGZhbHNlIDogeCAgLS0tPiAgeCA9PSB0cnVlCiAgICAvLwogICAgLy8gVGhpcyBvZmVuIGNvbWVzIGZyb20gdGhlIGRhcnQgY29kZSBgeCA/PyBmYWxzZWAuCiAgICBpZiAoX3NhbWVPclJlZmluZW1lbnRPZih0ZXN0ZWQsIHdoZW5Ob3ROdWxsVmFsdWUpICYmCiAgICAgICAgX2lzQm9vbENvbnN0YW50KHdoZW5OdWxsVmFsdWUsIGZhbHNlKSAmJgogICAgICAgIHdoZW5Ob3ROdWxsVmFsdWUKICAgICAgICAgICAgLmlzQm9vbGVhbk9yTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICBfbW9zdGx5RW1wdHkod2hlbk51bGxCbG9jaykgJiYKICAgICAgICBfbW9zdGx5RW1wdHkod2hlbk5vdE51bGxCbG9jaykpIHsKICAgICAgSEluc3RydWN0aW9uIHRydWVDb25zdGFudCA9IF9ncmFwaC5hZGRDb25zdGFudEJvb2wodHJ1ZSwgX2Nsb3NlZFdvcmxkKTsKICAgICAgSEluc3RydWN0aW9uIHJlcGxhY2VtZW50ID0gbmV3IEhJZGVudGl0eSgKICAgICAgICAgIHRlc3RlZCwgdHJ1ZUNvbnN0YW50LCBudWxsLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSkKICAgICAgICAuLnNvdXJjZUVsZW1lbnQgPSBwaGkuc291cmNlRWxlbWVudAogICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBwaGkuc291cmNlSW5mb3JtYXRpb247CiAgICAgIGJsb2NrLnJld3JpdGUocGhpLCByZXBsYWNlbWVudCk7CiAgICAgIGJsb2NrLmFkZEF0RW50cnkocmVwbGFjZW1lbnQpOwogICAgICBibG9jay5yZW1vdmVQaGkocGhpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gSWYgJ3gnaXMgbnVsbGFibGUgYm9vbGVhbiwKICAgIC8vCiAgICAvLyAgICAgeCA9PSBudWxsID8gdHJ1ZSA6IHggIC0tLT4gICEoeCA9PSBmYWxzZSkKICAgIC8vCiAgICAvLyBUaGlzIG9mZW4gY29tZXMgZnJvbSB0aGUgZGFydCBjb2RlIGB4ID8/IHRydWVgLgogICAgaWYgKF9zYW1lT3JSZWZpbmVtZW50T2YodGVzdGVkLCB3aGVuTm90TnVsbFZhbHVlKSAmJgogICAgICAgIF9pc0Jvb2xDb25zdGFudCh3aGVuTnVsbFZhbHVlLCB0cnVlKSAmJgogICAgICAgIHdoZW5Ob3ROdWxsVmFsdWUKICAgICAgICAgICAgLmlzQm9vbGVhbk9yTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICBfbW9zdGx5RW1wdHkod2hlbk51bGxCbG9jaykgJiYKICAgICAgICBfbW9zdGx5RW1wdHkod2hlbk5vdE51bGxCbG9jaykpIHsKICAgICAgSEluc3RydWN0aW9uIGZhbHNlQ29uc3RhbnQgPSBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKGZhbHNlLCBfY2xvc2VkV29ybGQpOwogICAgICBISW5zdHJ1Y3Rpb24gY29tcGFyZSA9IG5ldyBISWRlbnRpdHkoCiAgICAgICAgICB0ZXN0ZWQsIGZhbHNlQ29uc3RhbnQsIG51bGwsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICAgICAgYmxvY2suYWRkQXRFbnRyeShjb21wYXJlKTsKICAgICAgSEluc3RydWN0aW9uIHJlcGxhY2VtZW50ID0KICAgICAgICAgIG5ldyBITm90KGNvbXBhcmUsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKQogICAgICAgICAgICAuLnNvdXJjZUVsZW1lbnQgPSBwaGkuc291cmNlRWxlbWVudAogICAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gcGhpLnNvdXJjZUluZm9ybWF0aW9uOwogICAgICBibG9jay5yZXdyaXRlKHBoaSwgcmVwbGFjZW1lbnQpOwogICAgICBibG9jay5hZGRBZnRlcihjb21wYXJlLCByZXBsYWNlbWVudCk7CiAgICAgIGJsb2NrLnJlbW92ZVBoaShwaGkpOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gVE9ETyhzcmEpOiBDb25zaWRlciBvdGhlciBzaW1wbGUgZGlhbW9uZHMsIGUuZy4gd2l0aCB0aGUgYWRkaXRpb24gb2YgYSBzcGVjaWFsIGluc3RydWN0aW9uLAogICAgLy8KICAgIC8vICAgICBzID09IG51bGwgPyAiIiA6IHMgIC0tLT4gIHMgfHwgIiIuCiAgICByZXR1cm47CiAgfQoKICBib29sIF9pc0Jvb2xDb25zdGFudChISW5zdHJ1Y3Rpb24gbm9kZSwgYm9vbCB2YWx1ZSkgewogICAgaWYgKG5vZGUgaXMgSENvbnN0YW50KSB7CiAgICAgIENvbnN0YW50VmFsdWUgYyA9IG5vZGUuY29uc3RhbnQ7CiAgICAgIGlmIChjIGlzIEJvb2xDb25zdGFudFZhbHVlKSB7CiAgICAgICAgcmV0dXJuIGMuYm9vbFZhbHVlID09IHZhbHVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIF9zYW1lT3JSZWZpbmVtZW50T2YoSEluc3RydWN0aW9uIGJhc2UsIEhJbnN0cnVjdGlvbiBpbnNuKSB7CiAgICBpZiAoYmFzZSA9PSBpbnNuKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChpbnNuIGlzIEhUeXBlS25vd24pIHJldHVybiBfc2FtZU9yUmVmaW5lbWVudE9mKGJhc2UsIGluc24uY2hlY2tlZElucHV0KTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgX21vc3RseUVtcHR5KEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiBpbnNuID0gYmxvY2suZmlyc3Q7IGluc24gIT0gbnVsbDsgaW5zbiA9IGluc24ubmV4dCkgewogICAgICBpZiAoaW5zbiBpcyBIVHlwZUtub3duKSBjb250aW51ZTsKICAgICAgaWYgKGluc24gaXMgSEdvdG8pIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEluc3RydWN0aW9uKEhJbnN0cnVjdGlvbiBub2RlKSB7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIENvbnN0YW50VmFsdWUgZ2V0Q29uc3RhbnRGcm9tVHlwZShISW5zdHJ1Y3Rpb24gbm9kZSkgewogICAgaWYgKG5vZGUuaXNWYWx1ZShfYWJzdHJhY3RWYWx1ZURvbWFpbikgJiYKICAgICAgICBub2RlLmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9CiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRQcmltaXRpdmVWYWx1ZShub2RlLmluc3RydWN0aW9uVHlwZSk7CiAgICAgIGlmICh2YWx1ZS5pc0Jvb2wpIHsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0KICAgICAgLy8gVE9ETyhoZXQpOiBjb25zaWRlciBzdXBwb3J0aW5nIG90aGVyIHZhbHVlcyAoc2hvcnQgc3RyaW5ncz8pCiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgcHJvcGFnYXRlQ29uc3RhbnRWYWx1ZVRvVXNlcyhISW5zdHJ1Y3Rpb24gbm9kZSkgewogICAgaWYgKG5vZGUudXNlZEJ5LmlzRW1wdHkpIHJldHVybjsKICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBnZXRDb25zdGFudEZyb21UeXBlKG5vZGUpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgSENvbnN0YW50IGNvbnN0YW50ID0gX2dyYXBoLmFkZENvbnN0YW50KHZhbHVlLCBfY2xvc2VkV29ybGQpOwogICAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIG5vZGUudXNlZEJ5LnRvTGlzdCgpKSB7CiAgICAgICAgdXNlci5jaGFuZ2VVc2Uobm9kZSwgY29uc3RhbnQpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRQYXJhbWV0ZXJWYWx1ZShIUGFyYW1ldGVyVmFsdWUgbm9kZSkgewogICAgLy8gW0hQYXJhbWV0ZXJWYWx1ZV1zIGFyZSBlaXRoZXIgdGhlIHZhbHVlIG9mIHRoZSBwYXJhbWV0ZXIgKGluIGZ1bGx5IFNTQQogICAgLy8gY29udmVydGVkIGNvZGUpLCBvciB0aGUgbXV0YWJsZSB2YXJpYWJsZSBjb250YWluaW5nIHRoZSB2YWx1ZSAoaW4KICAgIC8vIGluY29tcGxldGVseSBTU0EgY29udmVydGVkIGNvZGUsIGUuZy4gbWV0aG9kcyBjb250YWluaW5nIGV4Y2VwdGlvbnMpLgogICAgLy8KICAgIC8vIElmIHRoZSBwYXJhbWV0ZXIgaXMgdXNlZCBhcyBhIG11dGFibGUgdmFyaWFibGUgd2UgY2Fubm90IHJlcGxhY2UgdGhlCiAgICAvLyB2YXJpYWJsZSB3aXRoIGEgdmFsdWUuCiAgICAvLwogICAgLy8gSWYgdGhlIHBhcmFtZXRlciBpcyB1c2VkIGFzIGEgbXV0YWJsZSB2YXJpYWJsZSBidXQgbmV2ZXIgd3JpdHRlbiwgZmlyc3QKICAgIC8vIGNvbnZlcnQgdG8gYSB2YWx1ZSBwYXJhbWV0ZXIuCgogICAgaWYgKG5vZGUudXNlZEFzVmFyaWFibGUoKSkgewogICAgICBpZiAoIW5vZGUudXNlZEJ5LmV2ZXJ5KCh1c2VyKSA9PiB1c2VyIGlzIEhMb2NhbEdldCkpIHJldHVybiBub2RlOwogICAgICAvLyBUcml2aWFsIFNTQS1jb252ZXJzaW9uLiBSZXBsYWNlIGFsbCBITG9jYWxHZXQgaW5zdHJ1Y3Rpb25zIHdpdGggdGhlCiAgICAgIC8vIHBhcmFtZXRlci4KICAgICAgZm9yIChITG9jYWxHZXQgdXNlciBpbiBub2RlLnVzZWRCeS50b0xpc3QoKSkgewogICAgICAgIHVzZXIuYmxvY2sucmV3cml0ZSh1c2VyLCBub2RlKTsKICAgICAgICB1c2VyLmJsb2NrLnJlbW92ZSh1c2VyKTsKICAgICAgfQogICAgfQoKICAgIHByb3BhZ2F0ZUNvbnN0YW50VmFsdWVUb1VzZXMobm9kZSk7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdE5vdChITm90IG5vZGUpIHsKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSBub2RlLmlucHV0czsKICAgIGFzc2VydChpbnB1dHMubGVuZ3RoID09IDEpOwogICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5wdXRzWzBdOwogICAgaWYgKGlucHV0IGlzIEhDb25zdGFudCkgewogICAgICBIQ29uc3RhbnQgY29uc3RhbnQgPSBpbnB1dDsKICAgICAgYm9vbCBpc1RydWUgPSBjb25zdGFudC5jb25zdGFudC5pc1RydWU7CiAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKCFpc1RydWUsIF9jbG9zZWRXb3JsZCk7CiAgICB9IGVsc2UgaWYgKGlucHV0IGlzIEhOb3QpIHsKICAgICAgcmV0dXJuIGlucHV0LmlucHV0c1swXTsKICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0SW52b2tlVW5hcnkoSEludm9rZVVuYXJ5IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBmb2xkZWQgPSBmb2xkVW5hcnkobm9kZS5vcGVyYXRpb24oKSwgbm9kZS5vcGVyYW5kKTsKICAgIHJldHVybiBmb2xkZWQgIT0gbnVsbCA/IGZvbGRlZCA6IG5vZGU7CiAgfQoKICBISW5zdHJ1Y3Rpb24gZm9sZFVuYXJ5KAogICAgICBjb25zdGFudF9zeXN0ZW0uVW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uLCBISW5zdHJ1Y3Rpb24gb3BlcmFuZCkgewogICAgaWYgKG9wZXJhbmQgaXMgSENvbnN0YW50KSB7CiAgICAgIEhDb25zdGFudCByZWNlaXZlciA9IG9wZXJhbmQ7CiAgICAgIENvbnN0YW50VmFsdWUgZm9sZGVkID0gb3BlcmF0aW9uLmZvbGQocmVjZWl2ZXIuY29uc3RhbnQpOwogICAgICBpZiAoZm9sZGVkICE9IG51bGwpIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnQoZm9sZGVkLCBfY2xvc2VkV29ybGQpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBISW5zdHJ1Y3Rpb24gdHJ5T3B0aW1pemVMZW5ndGhJbnRlcmNlcHRlZEdldHRlcihISW52b2tlRHluYW1pYyBub2RlKSB7CiAgICBISW5zdHJ1Y3Rpb24gYWN0dWFsUmVjZWl2ZXIgPSBub2RlLmlucHV0c1sxXTsKICAgIGlmIChhY3R1YWxSZWNlaXZlcgogICAgICAgIC5pc0luZGV4YWJsZVByaW1pdGl2ZShfYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBpZiAoYWN0dWFsUmVjZWl2ZXIuaXNDb25zdGFudFN0cmluZygpKSB7CiAgICAgICAgSENvbnN0YW50IGNvbnN0YW50SW5wdXQgPSBhY3R1YWxSZWNlaXZlcjsKICAgICAgICBTdHJpbmdDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gY29uc3RhbnRJbnB1dC5jb25zdGFudDsKICAgICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50SW50KGNvbnN0YW50Lmxlbmd0aCwgX2Nsb3NlZFdvcmxkKTsKICAgICAgfSBlbHNlIGlmIChhY3R1YWxSZWNlaXZlci5pc0NvbnN0YW50TGlzdCgpKSB7CiAgICAgICAgSENvbnN0YW50IGNvbnN0YW50SW5wdXQgPSBhY3R1YWxSZWNlaXZlcjsKICAgICAgICBMaXN0Q29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IGNvbnN0YW50SW5wdXQuY29uc3RhbnQ7CiAgICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEludChjb25zdGFudC5sZW5ndGgsIF9jbG9zZWRXb3JsZCk7CiAgICAgIH0KICAgICAgYm9vbCBpc0ZpeGVkID0KICAgICAgICAgIGlzRml4ZWRMZW5ndGgoYWN0dWFsUmVjZWl2ZXIuaW5zdHJ1Y3Rpb25UeXBlLCBfY2xvc2VkV29ybGQpOwogICAgICBBYnN0cmFjdFZhbHVlIGFjdHVhbFR5cGUgPSBub2RlLmluc3RydWN0aW9uVHlwZTsKICAgICAgQWJzdHJhY3RWYWx1ZSByZXN1bHRUeXBlID0gX2Fic3RyYWN0VmFsdWVEb21haW4ucG9zaXRpdmVJbnRUeXBlOwogICAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgY29tcHV0ZWQgYSBtb3JlIHNwZWNpZmljIHR5cGUsIGtlZXAgdGhhdCB0eXBlLgogICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgIC5pc0luc3RhbmNlT2ZPck51bGwoYWN0dWFsVHlwZSwgY29tbW9uRWxlbWVudHMuanNVSW50MzFDbGFzcykKICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgcmVzdWx0VHlwZSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLnVpbnQzMVR5cGU7CiAgICAgIH0gZWxzZSBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgIC5pc0luc3RhbmNlT2ZPck51bGwoYWN0dWFsVHlwZSwgY29tbW9uRWxlbWVudHMuanNVSW50MzJDbGFzcykKICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgcmVzdWx0VHlwZSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLnVpbnQzMlR5cGU7CiAgICAgIH0KICAgICAgSEdldExlbmd0aCByZXN1bHQgPQogICAgICAgICAgbmV3IEhHZXRMZW5ndGgoYWN0dWFsUmVjZWl2ZXIsIHJlc3VsdFR5cGUsIGlzQXNzaWduYWJsZTogIWlzRml4ZWQpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSBlbHNlIGlmIChhY3R1YWxSZWNlaXZlci5pc0NvbnN0YW50TWFwKCkpIHsKICAgICAgSENvbnN0YW50IGNvbnN0YW50SW5wdXQgPSBhY3R1YWxSZWNlaXZlcjsKICAgICAgTWFwQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IGNvbnN0YW50SW5wdXQuY29uc3RhbnQ7CiAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRJbnQoY29uc3RhbnQubGVuZ3RoLCBfY2xvc2VkV29ybGQpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBISW5zdHJ1Y3Rpb24gaGFuZGxlSW50ZXJjZXB0ZWRDYWxsKEhJbnZva2VEeW5hbWljIG5vZGUpIHsKICAgIC8vIFRyeSBjb25zdGFudCBmb2xkaW5nIHRoZSBpbnN0cnVjdGlvbi4KICAgIGNvbnN0YW50X3N5c3RlbS5PcGVyYXRpb24gb3BlcmF0aW9uID0gbm9kZS5zcGVjaWFsaXplci5vcGVyYXRpb24oKTsKICAgIGlmIChvcGVyYXRpb24gIT0gbnVsbCkgewogICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBub2RlLmlucHV0cy5sZW5ndGggPT0gMgogICAgICAgICAgPyBmb2xkVW5hcnkob3BlcmF0aW9uLCBub2RlLmlucHV0c1sxXSkKICAgICAgICAgIDogZm9sZEJpbmFyeShvcGVyYXRpb24sIG5vZGUuaW5wdXRzWzFdLCBub2RlLmlucHV0c1syXSk7CiAgICAgIGlmIChpbnN0cnVjdGlvbiAhPSBudWxsKSByZXR1cm4gaW5zdHJ1Y3Rpb247CiAgICB9CgogICAgLy8gVHJ5IGNvbnZlcnRpbmcgdGhlIGluc3RydWN0aW9uIHRvIGEgYnVpbHRpbiBpbnN0cnVjdGlvbi4KICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IG5vZGUuc3BlY2lhbGl6ZXIudHJ5Q29udmVydFRvQnVpbHRpbihub2RlLAogICAgICAgIF9ncmFwaCwgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMsIGNvbW1vbkVsZW1lbnRzLCBfY2xvc2VkV29ybGQsIF9sb2cpOwogICAgaWYgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGluc3RydWN0aW9uOwogICAgfQoKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gbm9kZS5zZWxlY3RvcjsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IG5vZGUucmVjZWl2ZXJUeXBlOwogICAgSEluc3RydWN0aW9uIGlucHV0ID0gbm9kZS5pbnB1dHNbMV07CgogICAgYm9vbCBhcHBsaWVzKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAgIHJldHVybiBzZWxlY3Rvci5hcHBsaWVzKGVsZW1lbnQpICYmCiAgICAgICAgICAobWFzayA9PSBudWxsIHx8CiAgICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgICAgICAgICAgLmlzVGFyZ2V0aW5nTWVtYmVyKG1hc2ssIGVsZW1lbnQsIHNlbGVjdG9yLm1lbWJlck5hbWUpCiAgICAgICAgICAgICAgICAgIC5pc1BvdGVudGlhbGx5VHJ1ZSk7CiAgICB9CgogICAgaWYgKHNlbGVjdG9yLmlzQ2FsbCB8fCBzZWxlY3Rvci5pc09wZXJhdG9yKSB7CiAgICAgIEZ1bmN0aW9uRW50aXR5IHRhcmdldDsKICAgICAgaWYgKGlucHV0LmlzRXh0ZW5kYWJsZUFycmF5KF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgaWYgKGFwcGxpZXMoY29tbW9uRWxlbWVudHMuanNBcnJheVJlbW92ZUxhc3QpKSB7CiAgICAgICAgICB0YXJnZXQgPSBjb21tb25FbGVtZW50cy5qc0FycmF5UmVtb3ZlTGFzdDsKICAgICAgICB9IGVsc2UgaWYgKGFwcGxpZXMoY29tbW9uRWxlbWVudHMuanNBcnJheUFkZCkpIHsKICAgICAgICAgIC8vIFRoZSBjb2RlZ2VuIHNwZWNpYWwgY2FzZXMgYXJyYXkgY2FsbHMsIGJ1dCBkb2VzIG5vdAogICAgICAgICAgLy8gaW5saW5lIGFyZ3VtZW50IHR5cGUgY2hlY2tzLgogICAgICAgICAgaWYgKCFfY2xvc2VkV29ybGQuYW5ub3RhdGlvbnNEYXRhCiAgICAgICAgICAgICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShjb21tb25FbGVtZW50cy5qc0FycmF5QWRkKQogICAgICAgICAgICAgICAgICAuaXNFbWl0dGVkIHx8CiAgICAgICAgICAgICAgaW5wdXQgaXMgSExpdGVyYWxMaXN0KSB7CiAgICAgICAgICAgIHRhcmdldCA9IGNvbW1vbkVsZW1lbnRzLmpzQXJyYXlBZGQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGlucHV0LmlzU3RyaW5nT3JOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgaWYgKGNvbW1vbkVsZW1lbnRzLmFwcGxpZXNUb0pzU3RyaW5nU3BsaXQoCiAgICAgICAgICAgIHNlbGVjdG9yLCBtYXNrLCBfYWJzdHJhY3RWYWx1ZURvbWFpbikpIHsKICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpbmdTcGxpdChub2RlKTsKICAgICAgICB9IGVsc2UgaWYgKGFwcGxpZXMoY29tbW9uRWxlbWVudHMuanNTdHJpbmdPcGVyYXRvckFkZCkpIHsKICAgICAgICAgIC8vIGBvcGVyYXRvcitgIGlzIHR1cm5lZCBpbnRvIGEgSmF2YVNjcmlwdCAnKycgc28gd2UgbmVlZCB0bwogICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSByZWNlaXZlciBhbmQgdGhlIGFyZ3VtZW50IGFyZSBub3QgbnVsbC4KICAgICAgICAgIC8vIFRPRE8oc3JhKTogRG8gdGhpcyB2aWEgW25vZGUuc3BlY2lhbGl6ZXJdLgogICAgICAgICAgSEluc3RydWN0aW9uIGFyZ3VtZW50ID0gbm9kZS5pbnB1dHNbMl07CiAgICAgICAgICBpZiAoYXJndW1lbnQuaXNTdHJpbmcoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICAgICAgICBpbnB1dC5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgSFN0cmluZ0NvbmNhdChpbnB1dCwgYXJndW1lbnQsIG5vZGUuaW5zdHJ1Y3Rpb25UeXBlKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGFwcGxpZXMoY29tbW9uRWxlbWVudHMuanNTdHJpbmdUb1N0cmluZykgJiYKICAgICAgICAgICAgaW5wdXQuaXNOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlGYWxzZSkgewogICAgICAgICAgcmV0dXJuIGlucHV0OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0ICE9IG51bGwpIHsKICAgICAgICAvLyBUT0RPKG5nZW9mZnJheSk6IFRoZXJlIGlzIGEgc3Ryb25nIGRlcGVuZGVuY3kgYmV0d2VlbiBjb2RlZ2VuCiAgICAgICAgLy8gYW5kIHRoaXMgb3B0aW1pemF0aW9uIHRoYXQgdGhlIGR5bmFtaWMgaW52b2tlIGRvZXMgbm90IG5lZWQgYW4KICAgICAgICAvLyBpbnRlcmNlcHRvci4gV2UgY3VycmVudGx5IG5lZWQgdG8ga2VlcCBhCiAgICAgICAgLy8gSEludm9rZUR5bmFtaWNNZXRob2QgYW5kIG5vdCBjcmVhdGUgYSBIRm9yZWlnbiBiZWNhdXNlCiAgICAgICAgLy8gSEZvcmVpZ24gaXMgdG9vIG9wYXF1ZSBmb3IgdGhlIFNzYUNoZWNrSW5zZXJ0ZXIgKHRoYXQgYWRkcyBhCiAgICAgICAgLy8gYm91bmRzIGNoZWNrIG9uIHJlbW92ZUxhc3QpLiBPbmNlIHdlIHN0YXJ0IGlubGluaW5nLCB0aGUKICAgICAgICAvLyBib3VuZHMgY2hlY2sgd2lsbCBiZWNvbWUgZXhwbGljaXQsIHNvIHdlIHdvbid0IG5lZWQgdGhpcwogICAgICAgIC8vIG9wdGltaXphdGlvbi4KICAgICAgICBISW52b2tlRHluYW1pY01ldGhvZCByZXN1bHQgPSBuZXcgSEludm9rZUR5bmFtaWNNZXRob2QoCiAgICAgICAgICAgIG5vZGUuc2VsZWN0b3IsCiAgICAgICAgICAgIG5vZGUucmVjZWl2ZXJUeXBlLAogICAgICAgICAgICBub2RlLmlucHV0cy5zdWJsaXN0KDEpLCAvLyBEcm9wIGludGVyY2VwdG9yLgogICAgICAgICAgICBub2RlLmluc3RydWN0aW9uVHlwZSwKICAgICAgICAgICAgbm9kZS50eXBlQXJndW1lbnRzLAogICAgICAgICAgICBub2RlLnNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICBpc0ludGVyY2VwdGVkOiBmYWxzZSk7CiAgICAgICAgcmVzdWx0LmVsZW1lbnQgPSB0YXJnZXQ7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc0dldHRlcikgewogICAgICBpZiAoY29tbW9uRWxlbWVudHMuYXBwbGllc1RvSnNJbmRleGFibGVMZW5ndGgoc2VsZWN0b3IpKSB7CiAgICAgICAgSEluc3RydWN0aW9uIG9wdGltaXplZCA9IHRyeU9wdGltaXplTGVuZ3RoSW50ZXJjZXB0ZWRHZXR0ZXIobm9kZSk7CiAgICAgICAgaWYgKG9wdGltaXplZCAhPSBudWxsKSByZXR1cm4gb3B0aW1pemVkOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBISW5zdHJ1Y3Rpb24gaGFuZGxlU3RyaW5nU3BsaXQoSEludm9rZUR5bmFtaWMgbm9kZSkgewogICAgSEluc3RydWN0aW9uIGFyZ3VtZW50ID0gbm9kZS5pbnB1dHNbMl07CiAgICBpZiAoIWFyZ3VtZW50LmlzU3RyaW5nKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBub2RlOwogICAgfQoKICAgIC8vIFJlcGxhY2UgYHMuc3BsaXQkMShwYXR0ZXJuKWAgd2l0aAogICAgLy8KICAgIC8vICAgICB0MSA9IHMuc3BsaXQocGF0dGVybik7CiAgICAvLyAgICAgdDIgPSBTdHJpbmc7CiAgICAvLyAgICAgdDMgPSBKU0FycmF5PHQyPjsKICAgIC8vICAgICB0NCA9IHNldFJ1bnRpbWVUeXBlSW5mbyh0MSwgdDMpOwogICAgLy8KCiAgICBBYnN0cmFjdFZhbHVlIHJlc3VsdE1hc2sgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ncm93YWJsZUxpc3RUeXBlOwoKICAgIEhJbnZva2VEeW5hbWljTWV0aG9kIHNwbGl0SW5zdHJ1Y3Rpb24gPSBuZXcgSEludm9rZUR5bmFtaWNNZXRob2QoCiAgICAgICAgbm9kZS5zZWxlY3RvciwKICAgICAgICBub2RlLnJlY2VpdmVyVHlwZSwKICAgICAgICBub2RlLmlucHV0cy5zdWJsaXN0KDEpLCAvLyBEcm9wIGludGVyY2VwdG9yLgogICAgICAgIHJlc3VsdE1hc2ssCiAgICAgICAgY29uc3QgPERhcnRUeXBlPltdLAogICAgICAgIG5vZGUuc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgaXNJbnRlcmNlcHRlZDogZmFsc2UpCiAgICAgIC4uZWxlbWVudCA9IGNvbW1vbkVsZW1lbnRzLmpzU3RyaW5nU3BsaXQKICAgICAgLi5zZXRBbGxvY2F0aW9uKHRydWUpOwoKICAgIGlmICghX2Nsb3NlZFdvcmxkLnJ0aU5lZWQKICAgICAgICAuY2xhc3NOZWVkc1R5cGVBcmd1bWVudHMoY29tbW9uRWxlbWVudHMuanNBcnJheUNsYXNzKSkgewogICAgICByZXR1cm4gc3BsaXRJbnN0cnVjdGlvbjsKICAgIH0KCiAgICAvLyBUT0RPKHNyYSk6IEltcGxlbWVudCB0YWdnaW5nIHdpdGggYEpTQXJyYXk8U3RyaW5nPmAgZm9yIG5ldyBydGkuCgogICAgbm9kZS5ibG9jay5hZGRCZWZvcmUobm9kZSwgc3BsaXRJbnN0cnVjdGlvbik7CgogICAgSEluc3RydWN0aW9uIHN0cmluZ1R5cGVJbmZvID0gbmV3IEhUeXBlSW5mb0V4cHJlc3Npb24oCiAgICAgICAgVHlwZUluZm9FeHByZXNzaW9uS2luZC5DT01QTEVURSwKICAgICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzKSwKICAgICAgICA8SEluc3RydWN0aW9uPltdLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKTsKICAgIG5vZGUuYmxvY2suYWRkQmVmb3JlKG5vZGUsIHN0cmluZ1R5cGVJbmZvKTsKCiAgICBISW5zdHJ1Y3Rpb24gdHlwZUluZm8gPSBuZXcgSFR5cGVJbmZvRXhwcmVzc2lvbigKICAgICAgICBUeXBlSW5mb0V4cHJlc3Npb25LaW5kLklOU1RBTkNFLAogICAgICAgIF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQKICAgICAgICAgICAgLmdldFRoaXNUeXBlKGNvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcyksCiAgICAgICAgPEhJbnN0cnVjdGlvbj5bc3RyaW5nVHlwZUluZm9dLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKTsKICAgIG5vZGUuYmxvY2suYWRkQmVmb3JlKG5vZGUsIHR5cGVJbmZvKTsKCiAgICBISW52b2tlU3RhdGljIHRhZ0luc3RydWN0aW9uID0gbmV3IEhJbnZva2VTdGF0aWMoCiAgICAgICAgY29tbW9uRWxlbWVudHMuc2V0UnVudGltZVR5cGVJbmZvLAogICAgICAgIDxISW5zdHJ1Y3Rpb24+W3NwbGl0SW5zdHJ1Y3Rpb24sIHR5cGVJbmZvXSwKICAgICAgICByZXN1bHRNYXNrLAogICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSk7CiAgICAvLyAnTGluZWFyIHR5cGluZycgdHJpY2s6IFt0YWdJbnN0cnVjdGlvbl0gaXMgdGhlIG9ubHkgdXNlIG9mIHRoZQogICAgLy8gW3NwbGl0SW5zdHJ1Y3Rpb25dLCBzbyBpdCBiZWNvbWVzIHRoZSBzb2xlIGFsaWFzLgogICAgLy8gVE9ETyhzcmEpOiBCdWlsZCB0aGlzIGtub3dsZWRnZSBpbnRvIGFsaWFzIGFuYWx5c2lzLgogICAgdGFnSW5zdHJ1Y3Rpb24uc2V0QWxsb2NhdGlvbih0cnVlKTsKCiAgICByZXR1cm4gdGFnSW5zdHJ1Y3Rpb247CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJbnZva2VEeW5hbWljTWV0aG9kKEhJbnZva2VEeW5hbWljTWV0aG9kIG5vZGUpIHsKICAgIHByb3BhZ2F0ZUNvbnN0YW50VmFsdWVUb1VzZXMobm9kZSk7CiAgICBpZiAobm9kZS5pc0ludGVyY2VwdGVkQ2FsbCkgewogICAgICBISW5zdHJ1Y3Rpb24gZm9sZGVkID0gaGFuZGxlSW50ZXJjZXB0ZWRDYWxsKG5vZGUpOwogICAgICBpZiAoZm9sZGVkICE9IG5vZGUpIHJldHVybiBmb2xkZWQ7CiAgICB9CgogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gbm9kZS5nZXREYXJ0UmVjZWl2ZXIoX2Nsb3NlZFdvcmxkKTsKICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlID0gcmVjZWl2ZXIuaW5zdHJ1Y3Rpb25UeXBlOwogICAgTWVtYmVyRW50aXR5IGVsZW1lbnQgPQogICAgICAgIF9jbG9zZWRXb3JsZC5sb2NhdGVTaW5nbGVNZW1iZXIobm9kZS5zZWxlY3RvciwgcmVjZWl2ZXJUeXBlKTsKICAgIC8vIFRPRE8obmdlb2ZmcmF5KTogQWxzbyBmb2xkIGlmIGl0J3MgYSBnZXR0ZXIgb3IgdmFyaWFibGUuCiAgICBpZiAoZWxlbWVudCAhPSBudWxsICYmCiAgICAgICAgZWxlbWVudC5pc0Z1bmN0aW9uICYmCiAgICAgICAgLy8gSWYgd2UgZm91bmQgb3V0IHRoYXQgdGhlIG9ubHkgdGFyZ2V0IGlzIGFuIGltcGxpY2l0bHkgY2FsbGVkCiAgICAgICAgLy8gWzpub1N1Y2hNZXRob2Q6XSB3ZSBqdXN0IGlnbm9yZSBpdC4KICAgICAgICBub2RlLnNlbGVjdG9yLmFwcGxpZXMoZWxlbWVudCkpIHsKICAgICAgRnVuY3Rpb25FbnRpdHkgbWV0aG9kID0gZWxlbWVudDsKCiAgICAgIGlmIChfbmF0aXZlRGF0YS5pc05hdGl2ZU1lbWJlcihtZXRob2QpKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGZvbGRlZCA9IHRyeUlubGluZU5hdGl2ZU1ldGhvZChub2RlLCBtZXRob2QpOwogICAgICAgIGlmIChmb2xkZWQgIT0gbnVsbCkgcmV0dXJuIGZvbGRlZDsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUT0RPKG5nZW9mZnJheSk6IElmIHRoZSBtZXRob2QgaGFzIG9wdGlvbmFsIHBhcmFtZXRlcnMsCiAgICAgICAgLy8gd2Ugc2hvdWxkIHBhc3MgdGhlIGRlZmF1bHQgdmFsdWVzLgogICAgICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJzID0gbWV0aG9kLnBhcmFtZXRlclN0cnVjdHVyZTsKICAgICAgICBpZiAocGFyYW1ldGVycy50b3RhbFBhcmFtZXRlcnMgPT0gbm9kZS5zZWxlY3Rvci5hcmd1bWVudENvdW50ICYmCiAgICAgICAgICAgIHBhcmFtZXRlcnMudHlwZVBhcmFtZXRlcnMgPT0KICAgICAgICAgICAgICAgIG5vZGUuc2VsZWN0b3IuY2FsbFN0cnVjdHVyZS50eXBlQXJndW1lbnRDb3VudCkgewogICAgICAgICAgbm9kZS5lbGVtZW50ID0gbWV0aG9kOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbm9kZTsKICAgIH0KCiAgICAvLyBSZXBsYWNlIG1ldGhvZCBjYWxscyB0aHJvdWdoIGZpZWxkcyB3aXRoIGEgY2xvc3VyZSBjYWxsIG9uIHRoZSB2YWx1ZSBvZgogICAgLy8gdGhlIGZpZWxkLiBUaGlzIHVzdWFsbHkgcmVtb3ZlcyB0aGUgZGVtYW5kIGZvciB0aGUgY2FsbC10aHJvdWdoIHN0dWIgYW5kCiAgICAvLyBtYWtlcyB0aGUgZmllbGQgbG9hZCBhdmFpbGFibGUgdG8gZnVydGhlciBvcHRpbWl6YXRpb24sIGUuZy4gTElDTS4KCiAgICBpZiAoZWxlbWVudCAhPSBudWxsICYmCiAgICAgICAgZWxlbWVudC5pc0ZpZWxkICYmCiAgICAgICAgZWxlbWVudC5uYW1lID09IG5vZGUuc2VsZWN0b3IubmFtZSkgewogICAgICBGaWVsZEVudGl0eSBmaWVsZCA9IGVsZW1lbnQ7CiAgICAgIGlmICghX25hdGl2ZURhdGEuaXNOYXRpdmVNZW1iZXIoZmllbGQpICYmCiAgICAgICAgICAhbm9kZS5pc0NhbGxPbkludGVyY2VwdG9yKF9jbG9zZWRXb3JsZCkpIHsKICAgICAgICAvLyBJbnNlcnRpb24gcG9pbnQgZm9yIHRoZSBjbG9zdXJlIGNhbGwuCiAgICAgICAgSEluc3RydWN0aW9uIGluc2VydGlvblBvaW50ID0gbm9kZTsKICAgICAgICBISW5zdHJ1Y3Rpb24gbG9hZDsKICAgICAgICBGaWVsZEFuYWx5c2lzRGF0YSBmaWVsZERhdGEgPQogICAgICAgICAgICBfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpOwogICAgICAgIGlmIChmaWVsZERhdGEuaXNFZmZlY3RpdmVseUNvbnN0YW50KSB7CiAgICAgICAgICAvLyBUaGUgZmllbGQgaXMgZWxpZGVkIGFuZCByZXBsYWNlIGl0IHdpdGggaXRzIGNvbnN0YW50IHZhbHVlLgogICAgICAgICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVsbChyZWNlaXZlclR5cGUpLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgICAgIC8vIFRoZSByZWNlaXZlciBpcyBwb3RlbnRpYWxseSBgbnVsbGAgc28gd2UgaW5zZXJ0IGEgbnVsbCByZWNlaXZlcgogICAgICAgICAgICAvLyBndWFyZCB0byB0cmlnZ2VyIGEgbnVsbCBwb2ludGVyIGV4Y2VwdGlvbi4KICAgICAgICAgICAgLy8KICAgICAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBpbnNlcnRlZCB1bmNvbmRpdGlvbmFsbHkgYW5kIHJlbW92ZWQgYnkgbGF0ZXIKICAgICAgICAgICAgLy8gb3B0aW1pemF0aW9ucyBpZiB1bm5lY2Vzc2FyeSwgYnV0IHBlcmZvcm1hbmNlIHdlIGRvIGl0CiAgICAgICAgICAgIC8vIGNvbmRpdGlvbmFsbHkgaGVyZS4KICAgICAgICAgICAgLy8gVE9ETygzNTk5Nik6IFJlcGxhY2Ugd2l0aCBudWxsIHJlY2VpdmVyIGd1YXJkIGluc3RydWN0aW9uLgogICAgICAgICAgICBISW5zdHJ1Y3Rpb24gZHVtbXlHZXQgPSBuZXcgSEZpZWxkR2V0KG51bGwsIHJlY2VpdmVyLAogICAgICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsIG5vZGUuc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgICAgICAgICBpc0Fzc2lnbmFibGU6IGZhbHNlKTsKICAgICAgICAgICAgX2xvZz8ucmVnaXN0ZXJGaWVsZENhbGwobm9kZSwgZHVtbXlHZXQpOwogICAgICAgICAgICBub2RlLmJsb2NrLmFkZEJlZm9yZShub2RlLCBkdW1teUdldCk7CiAgICAgICAgICAgIGluc2VydGlvblBvaW50ID0gZHVtbXlHZXQ7CiAgICAgICAgICB9CiAgICAgICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gZmllbGREYXRhLmNvbnN0YW50VmFsdWU7CiAgICAgICAgICBsb2FkID0gX2dyYXBoLmFkZENvbnN0YW50KHZhbHVlLCBfY2xvc2VkV29ybGQsCiAgICAgICAgICAgICAgc291cmNlSW5mb3JtYXRpb246IG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgICAgICAgX2xvZz8ucmVnaXN0ZXJDb25zdGFudEZpZWxkQ2FsbChub2RlLCBmaWVsZCwgbG9hZCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSA9IEFic3RyYWN0VmFsdWVGYWN0b3J5LmluZmVycmVkVHlwZUZvck1lbWJlcigKICAgICAgICAgICAgICBmaWVsZCwgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMpOwogICAgICAgICAgbG9hZCA9IG5ldyBIRmllbGRHZXQoZmllbGQsIHJlY2VpdmVyLCB0eXBlLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICAgIF9sb2c/LnJlZ2lzdGVyRmllbGRDYWxsKG5vZGUsIGxvYWQpOwogICAgICAgICAgbm9kZS5ibG9jay5hZGRCZWZvcmUobm9kZSwgbG9hZCk7CiAgICAgICAgICBpbnNlcnRpb25Qb2ludCA9IGxvYWQ7CiAgICAgICAgfQogICAgICAgIFNlbGVjdG9yIGNhbGxTZWxlY3RvciA9IG5ldyBTZWxlY3Rvci5jYWxsQ2xvc3VyZUZyb20obm9kZS5zZWxlY3Rvcik7CiAgICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+W2xvYWRdCiAgICAgICAgICAuLmFkZEFsbChub2RlLmlucHV0cy5za2lwKG5vZGUuaXNJbnRlcmNlcHRlZENhbGwgPyAyIDogMSkpOwogICAgICAgIERhcnRUeXBlIGZpZWxkVHlwZSA9CiAgICAgICAgICAgIF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0RmllbGRUeXBlKGZpZWxkKTsKICAgICAgICBISW5zdHJ1Y3Rpb24gY2xvc3VyZUNhbGwgPSBuZXcgSEludm9rZUNsb3N1cmUoCiAgICAgICAgICAgIGNhbGxTZWxlY3RvciwKICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlRnJvbVN0YXRpY1R5cGUoZmllbGRUeXBlKS5hYnN0cmFjdFZhbHVlLAogICAgICAgICAgICBpbnB1dHMsCiAgICAgICAgICAgIG5vZGUuaW5zdHJ1Y3Rpb25UeXBlLAogICAgICAgICAgICBub2RlLnR5cGVBcmd1bWVudHMpCiAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gbm9kZS5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgICBub2RlLmJsb2NrLmFkZEFmdGVyKGluc2VydGlvblBvaW50LCBjbG9zdXJlQ2FsbCk7CiAgICAgICAgcmV0dXJuIGNsb3N1cmVDYWxsOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBISW5zdHJ1Y3Rpb24gdHJ5SW5saW5lTmF0aXZlTWV0aG9kKAogICAgICBISW52b2tlRHluYW1pY01ldGhvZCBub2RlLCBGdW5jdGlvbkVudGl0eSBtZXRob2QpIHsKICAgIC8vIFdlIGNhbiByZXBsYWNlIHRoZSBjYWxsIHRvIHRoZSBuYXRpdmUgY2xhc3MgaW50ZXJjZXB0b3IgbWV0aG9kICh0YXJnZXQpCiAgICAvLyBpZiB0aGUgdGFyZ2V0IGRvZXMgbm8gY29udmVyc2lvbnMgb3IgdXNlZnVsIHR5cGUgY2hlY2tzLgogICAgaWYgKF9vcHRpb25zLmRpc2FibGVJbmxpbmluZykgcmV0dXJuIG51bGw7CiAgICBpZiAoX2Nsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YS5oYXNOb0lubGluZShtZXRob2QpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKCFub2RlLmlzSW50ZXJjZXB0ZWRDYWxsKSByZXR1cm4gbnVsbDsKCiAgICBGdW5jdGlvblR5cGUgdHlwZSA9IF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKG1ldGhvZCk7CiAgICBpZiAodHlwZS5uYW1lZFBhcmFtZXRlcnMuaXNOb3RFbXB0eSkgcmV0dXJuIG51bGw7CgogICAgLy8gVGhlIGNhbGwgc2l0ZSBtaWdodCBvbWl0IG9wdGlvbmFsIGFyZ3VtZW50cy4gVGhlIGlubGluZWQgY29kZSBtdXN0CiAgICAvLyBwcmVzZXJ2ZSB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cywgc28gY2hlY2sgb25seSB0aGUgYWN0dWFsIGFyZ3VtZW50cy4KCiAgICBib29sIGNhbklubGluZSA9IHRydWU7CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gbm9kZS5pbnB1dHM7CiAgICBpbnQgaW5wdXRQb3NpdGlvbiA9IDI7IC8vIFNraXAgaW50ZXJjZXB0b3IgYW5kIHJlY2VpdmVyLgoKICAgIHZvaWQgY2hlY2tQYXJhbWV0ZXJUeXBlKERhcnRUeXBlIHBhcmFtZXRlclR5cGUpIHsKICAgICAgaWYgKCFjYW5JbmxpbmUpIHJldHVybjsKICAgICAgaWYgKGlucHV0UG9zaXRpb24gPj0gaW5wdXRzLmxlbmd0aCkgcmV0dXJuOwogICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBpbnB1dHNbaW5wdXRQb3NpdGlvbisrXTsKICAgICAgaWYgKHBhcmFtZXRlclR5cGUudW5hbGlhc2VkLmlzRnVuY3Rpb25UeXBlKSB7CiAgICAgICAgLy8gTXVzdCBjYWxsIHRoZSB0YXJnZXQgc2luY2UgaXQgY29udGFpbnMgYSBmdW5jdGlvbiBjb252ZXJzaW9uLgogICAgICAgIGNhbklubGluZSA9IGZhbHNlOwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgLy8gSWYgdGhlIHRhcmdldCBoYXMgbm8gY2hlY2tzIGRvbid0IGxldCBhIGJhZCB0eXBlIHN0b3AgdXMgaW5saW5pbmcuCiAgICAgIGlmICghX2Nsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgICAgLmdldFBhcmFtZXRlckNoZWNrUG9saWN5KG1ldGhvZCkKICAgICAgICAgIC5pc0VtaXR0ZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIEFic3RyYWN0VmFsdWUgcGFyYW1ldGVyQWJzdHJhY3RWYWx1ZSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAuZ2V0QWJzdHJhY3RWYWx1ZUZvck5hdGl2ZU1ldGhvZFBhcmFtZXRlclR5cGUocGFyYW1ldGVyVHlwZSk7CgogICAgICBpZiAocGFyYW1ldGVyQWJzdHJhY3RWYWx1ZSA9PSBudWxsIHx8CiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgICAgIC5pc0luKGlucHV0Lmluc3RydWN0aW9uVHlwZSwgcGFyYW1ldGVyQWJzdHJhY3RWYWx1ZSkKICAgICAgICAgICAgICAuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgICAgY2FuSW5saW5lID0gZmFsc2U7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CgogICAgdHlwZS5wYXJhbWV0ZXJUeXBlcy5mb3JFYWNoKGNoZWNrUGFyYW1ldGVyVHlwZSk7CiAgICB0eXBlLm9wdGlvbmFsUGFyYW1ldGVyVHlwZXMuZm9yRWFjaChjaGVja1BhcmFtZXRlclR5cGUpOwogICAgYXNzZXJ0KHR5cGUubmFtZWRQYXJhbWV0ZXJUeXBlcy5pc0VtcHR5KTsKCiAgICBpZiAoIWNhbklubGluZSkgcmV0dXJuIG51bGw7CgogICAgLy8gU3RyZW5ndGhlbiBpbnN0cnVjdGlvbiB0eXBlIGZyb20gYW5ub3RhdGlvbnMgdG8gaGVscCBvcHRpbWl6ZQogICAgLy8gZGVwZW5kZW50IGluc3RydWN0aW9ucy4KICAgIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yID0gX25hdGl2ZURhdGEuZ2V0TmF0aXZlTWV0aG9kQmVoYXZpb3IobWV0aG9kKTsKICAgIEFic3RyYWN0VmFsdWUgcmV0dXJuVHlwZSA9CiAgICAgICAgQWJzdHJhY3RWYWx1ZUZhY3RvcnkuZnJvbU5hdGl2ZUJlaGF2aW9yKG5hdGl2ZUJlaGF2aW9yLCBfY2xvc2VkV29ybGQpOwogICAgSEludm9rZUR5bmFtaWNNZXRob2QgcmVzdWx0ID0gbmV3IEhJbnZva2VEeW5hbWljTWV0aG9kKAogICAgICAgIG5vZGUuc2VsZWN0b3IsCiAgICAgICAgbm9kZS5yZWNlaXZlclR5cGUsCiAgICAgICAgaW5wdXRzLnN1Ymxpc3QoMSksIC8vIERyb3AgaW50ZXJjZXB0b3IuCiAgICAgICAgcmV0dXJuVHlwZSwKICAgICAgICBub2RlLnR5cGVBcmd1bWVudHMsCiAgICAgICAgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbik7CiAgICByZXN1bHQuZWxlbWVudCA9IG1ldGhvZDsKICAgIF9yZWdpc3RyeS5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLm1ldGhvZElubGluaW5nKG1ldGhvZCwgbnVsbCkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEJvdW5kc0NoZWNrKEhCb3VuZHNDaGVjayBub2RlKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5kZXggPSBub2RlLmluZGV4OwogICAgaWYgKGluZGV4LmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gbm9kZTsKICAgIH0KICAgIGlmIChpbmRleC5pc0NvbnN0YW50KCkpIHsKICAgICAgSENvbnN0YW50IGNvbnN0YW50SW5zdHJ1Y3Rpb24gPSBpbmRleDsKICAgICAgYXNzZXJ0KCFjb25zdGFudEluc3RydWN0aW9uLmNvbnN0YW50LmlzSW50KTsKICAgICAgaWYgKCFjb25zdGFudF9zeXN0ZW0uaXNJbnQoY29uc3RhbnRJbnN0cnVjdGlvbi5jb25zdGFudCkpIHsKICAgICAgICAvLyAtMC4wIGlzIGEgZG91YmxlIGJ1dCB3aWxsIHBhc3MgdGhlIHJ1bnRpbWUgaW50ZWdlciBjaGVjay4KICAgICAgICBub2RlLnN0YXRpY0NoZWNrcyA9IEhCb3VuZHNDaGVjay5BTFdBWVNfRkFMU0U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgSEluc3RydWN0aW9uIGZvbGRCaW5hcnkoY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24sCiAgICAgIEhJbnN0cnVjdGlvbiBsZWZ0LCBISW5zdHJ1Y3Rpb24gcmlnaHQpIHsKICAgIGlmIChsZWZ0IGlzIEhDb25zdGFudCAmJiByaWdodCBpcyBIQ29uc3RhbnQpIHsKICAgICAgSENvbnN0YW50IG9wMSA9IGxlZnQ7CiAgICAgIEhDb25zdGFudCBvcDIgPSByaWdodDsKICAgICAgQ29uc3RhbnRWYWx1ZSBmb2xkZWQgPSBvcGVyYXRpb24uZm9sZChvcDEuY29uc3RhbnQsIG9wMi5jb25zdGFudCk7CiAgICAgIGlmIChmb2xkZWQgIT0gbnVsbCkgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudChmb2xkZWQsIF9jbG9zZWRXb3JsZCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEFkZChIQWRkIG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gbm9kZS5sZWZ0OwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gbm9kZS5yaWdodDsKICAgIC8vIFdlIGNhbiBvbmx5IHBlcmZvcm0gdGhpcyByZXdyaXRpbmcgb24gSW50ZWdlciwgYXMgaXQgaXMgbm90CiAgICAvLyB2YWxpZCBmb3IgLTAuMC4KICAgIGlmIChsZWZ0LmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHJpZ2h0LmlzSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBpZiAobGVmdCBpcyBIQ29uc3RhbnQgJiYgbGVmdC5jb25zdGFudC5pc1plcm8pIHJldHVybiByaWdodDsKICAgICAgaWYgKHJpZ2h0IGlzIEhDb25zdGFudCAmJiByaWdodC5jb25zdGFudC5pc1plcm8pIHJldHVybiBsZWZ0OwogICAgfQogICAgcmV0dXJuIHN1cGVyLnZpc2l0QWRkKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0TXVsdGlwbHkoSE11bHRpcGx5IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gbm9kZS5sZWZ0OwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gbm9kZS5yaWdodDsKICAgIGlmIChsZWZ0LmlzTnVtYmVyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcmlnaHQuaXNOdW1iZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaWYgKGxlZnQgaXMgSENvbnN0YW50ICYmIGxlZnQuY29uc3RhbnQuaXNPbmUpIHJldHVybiByaWdodDsKICAgICAgaWYgKHJpZ2h0IGlzIEhDb25zdGFudCAmJiByaWdodC5jb25zdGFudC5pc09uZSkgcmV0dXJuIGxlZnQ7CiAgICB9CiAgICByZXR1cm4gc3VwZXIudmlzaXRNdWx0aXBseShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEludm9rZUJpbmFyeShISW52b2tlQmluYXJ5IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gbm9kZS5sZWZ0OwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gbm9kZS5yaWdodDsKICAgIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uID0gbm9kZS5vcGVyYXRpb24oKTsKICAgIEhDb25zdGFudCBmb2xkZWQgPSBmb2xkQmluYXJ5KG9wZXJhdGlvbiwgbGVmdCwgcmlnaHQpOwogICAgaWYgKGZvbGRlZCAhPSBudWxsKSByZXR1cm4gZm9sZGVkOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRSZWxhdGlvbmFsKEhSZWxhdGlvbmFsIG5vZGUpIHsKICAgIHJldHVybiBzdXBlci52aXNpdFJlbGF0aW9uYWwobm9kZSk7CiAgfQoKICBISW5zdHJ1Y3Rpb24gaGFuZGxlSWRlbnRpdHlDaGVjayhIUmVsYXRpb25hbCBub2RlKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IG5vZGUubGVmdDsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IG5vZGUucmlnaHQ7CiAgICBBYnN0cmFjdFZhbHVlIGxlZnRUeXBlID0gbGVmdC5pbnN0cnVjdGlvblR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIHJpZ2h0VHlwZSA9IHJpZ2h0Lmluc3RydWN0aW9uVHlwZTsKCiAgICBISW5zdHJ1Y3Rpb24gbWFrZVRydWUoKSA9PiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIF9jbG9zZWRXb3JsZCk7CiAgICBISW5zdHJ1Y3Rpb24gbWFrZUZhbHNlKCkgPT4gX2dyYXBoLmFkZENvbnN0YW50Qm9vbChmYWxzZSwgX2Nsb3NlZFdvcmxkKTsKCiAgICAvLyBJbnRlcnNlY3Rpb24gb2YgaW50IGFuZCBkb3VibGUgcmV0dXJuIGNvbmZsaWN0aW5nLCBzbwogICAgLy8gd2UgZG9uJ3Qgb3B0aW1pemUgb24gbnVtYmVycyB0byBwcmVzZXJ2ZSB0aGUgcnVudGltZSBzZW1hbnRpY3MuCiAgICBpZiAoIShsZWZ0LmlzTnVtYmVyT3JOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcmlnaHQuaXNOdW1iZXJPck51bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpKSB7CiAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgICAgLmFyZURpc2pvaW50KGxlZnRUeXBlLCByaWdodFR5cGUpCiAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJldHVybiBtYWtlRmFsc2UoKTsKICAgICAgfQogICAgfQoKICAgIGlmIChsZWZ0LmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHJpZ2h0LmlzTnVsbChfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gbWFrZVRydWUoKTsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gY29tcGFyZUNvbnN0YW50KEhDb25zdGFudCBjb25zdGFudCwgSEluc3RydWN0aW9uIGlucHV0KSB7CiAgICAgIGlmIChjb25zdGFudC5jb25zdGFudC5pc1RydWUpIHsKICAgICAgICByZXR1cm4gaW5wdXQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5ldyBITm90KGlucHV0LCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAobGVmdC5pc0NvbnN0YW50Qm9vbGVhbigpICYmCiAgICAgICAgcmlnaHQuaXNCb29sZWFuKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBjb21wYXJlQ29uc3RhbnQobGVmdCwgcmlnaHQpOwogICAgfQoKICAgIGlmIChyaWdodC5pc0NvbnN0YW50Qm9vbGVhbigpICYmCiAgICAgICAgbGVmdC5pc0Jvb2xlYW4oX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGNvbXBhcmVDb25zdGFudChyaWdodCwgbGVmdCk7CiAgICB9CgogICAgaWYgKGlkZW50aWNhbChsZWZ0Lm5vbkNoZWNrKCksIHJpZ2h0Lm5vbkNoZWNrKCkpKSB7CiAgICAgIC8vIEF2b2lkIGNvbnN0YW50LWZvbGRpbmcgYGlkZW50aWNhbCh4LCB4KWAgd2hlbiBgeGAgbWlnaHQgYmUgZG91YmxlLiAgVGhlCiAgICAgIC8vIGRhcnQyanMgcnVudGltZSBoYXMgbm90IGFsd2F5cyBiZWVuIGNvbnNpc3RlbnQgd2l0aCB0aGUgRGFydAogICAgICAvLyBzcGVjaWZpY2F0aW9uIChzZWN0aW9uIDE2LjAuMSksIHdoaWNoIG1ha2VzIGRpc3RpbmN0aW9ucyBvbiBOYU5zIGFuZAogICAgICAvLyAtMC4wIHRoYXQgYXJlIGhhcmQgdG8gaW1wbGVtZW50IGVmZmljaWVudGx5LgogICAgICBpZiAobGVmdC5pc0ludGVnZXJPck51bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICByZXR1cm4gbWFrZVRydWUoKTsKICAgICAgfQogICAgICBpZiAobGVmdC5pc1ByaW1pdGl2ZU51bWJlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgICByZXR1cm4gbWFrZVRydWUoKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0SWRlbnRpdHkoSElkZW50aXR5IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBuZXdJbnN0cnVjdGlvbiA9IGhhbmRsZUlkZW50aXR5Q2hlY2sobm9kZSk7CiAgICByZXR1cm4gbmV3SW5zdHJ1Y3Rpb24gPT0gbnVsbCA/IHN1cGVyLnZpc2l0SWRlbnRpdHkobm9kZSkgOiBuZXdJbnN0cnVjdGlvbjsKICB9CgogIHZvaWQgc2ltcGxpZnlDb25kaXRpb24oCiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrLCBISW5zdHJ1Y3Rpb24gY29uZGl0aW9uLCBib29sIHZhbHVlKSB7CiAgICAvLyBgZXhjbHVkZVBoaU91dEVkZ2VzOiB0cnVlYCBwcmV2ZW50cyByZXBsYWNpbmcgYSBwYXJ0aWFsbHkgZG9taW5hdGVkIHBoaQogICAgLy8gbm9kZSBpbnB1dCB3aXRoIGEgY29uc3RhbnQuIFRoaXMgdGVuZHMgdG8gYWRkIHVubmVjZXNzYXJ5IGFzc2lnbm1lbnRzLCBieQogICAgLy8gdHJhbnNmb3JtaW5nIHRoZSBmb2xsb3dpbmcsIHdoaWNoIGhhcyBwaGkoZmFsc2UsIHgpLAogICAgLy8KICAgIC8vICAgIGlmICh4KSB7IGluaXQoKTsgeCA9IGZhbHNlOyB9CiAgICAvLwogICAgLy8gaW50byB0aGlzLCB3aGljaCBoYXMgcGhpKGZhbHNlLCBmYWxzZSkKICAgIC8vCiAgICAvLyAgICBpZiAoeCkgeyBpbml0KCk7IHggPSBmYWxzZTsgfSBlbHNlIHsgeCA9IGZhbHNlOyB9CiAgICAvLwogICAgLy8gd2hpY2ggaXMgZnVydGhlciBzaW1wbGlmaWVkIHRvOgogICAgLy8KICAgIC8vICAgIGlmICh4KSB7IGluaXQoKTsgfQogICAgLy8gICAgLi4uCiAgICAvLyAgICB4ID0gZmFsc2U7CiAgICAvLwogICAgLy8gVGhpcyBpcyBtb3N0bHkgaGFybWxlc3MgKGlmIGEgbGl0dGxlIGNvbmZ1c2luZykgYnV0IGRvZXMgY2F1c2UgYSBsb3Qgb2YKICAgIC8vIGB4ID0gZmFsc2U7YCBjb3BpZXMgdG8gYmUgaW5zZXJ0ZWQgd2hlbiBhIGxvb3AgYm9keSBoYXMgbWFueSBjb250aW51ZQogICAgLy8gc3RhdGVtZW50cyBvciBlbmRzIHdpdGggYSBzd2l0Y2guCiAgICBEb21pbmF0ZWRVc2VzIHVzZXMgPQogICAgICAgIERvbWluYXRlZFVzZXMub2YoY29uZGl0aW9uLCBibG9jay5maXJzdCwgZXhjbHVkZVBoaU91dEVkZ2VzOiB0cnVlKTsKICAgIGlmICh1c2VzLmlzRW1wdHkpIHJldHVybjsKICAgIHVzZXMucmVwbGFjZVdpdGgoX2dyYXBoLmFkZENvbnN0YW50Qm9vbCh2YWx1ZSwgX2Nsb3NlZFdvcmxkKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJZihISWYgbm9kZSkgewogICAgSEluc3RydWN0aW9uIGNvbmRpdGlvbiA9IG5vZGUuY29uZGl0aW9uOwogICAgaWYgKGNvbmRpdGlvbi5pc0NvbnN0YW50KCkpIHJldHVybiBub2RlOwogICAgYm9vbCBpc05lZ2F0ZWQgPSBjb25kaXRpb24gaXMgSE5vdDsKCiAgICBpZiAoaXNOZWdhdGVkKSB7CiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbi5pbnB1dHNbMF07CiAgICB9IGVsc2UgewogICAgICAvLyBJdCBpcyBwb3NzaWJsZSBmb3IgTElDTSB0byBtb3ZlIGEgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZQogICAgICAvLyBjb25kaXRpb24gb3V0IG9mIHRoZSBsb29wIHdoZXJlIGl0IHVzZWQuIFdlIHN0aWxsIHdhbnQgdG8KICAgICAgLy8gc2ltcGxpZnkgdGhlIG5lc3RlZCB1c2Ugb2YgdGhlIGNvbmRpdGlvbiBpbiB0aGF0IGNhc2UsIHNvCiAgICAgIC8vIHdlIGxvb2sgZm9yIGFsbCBkb21pbmF0aW5nIG5lZ2F0ZWQgY29uZGl0aW9ucyBhbmQgcmVwbGFjZQogICAgICAvLyBuZXN0ZWQgdXNlcyBvZiB0aGVtIHdpdGggdHJ1ZSBvciBmYWxzZS4KICAgICAgSXRlcmFibGU8SEluc3RydWN0aW9uPiBkb21pbmF0aW5nID0gY29uZGl0aW9uLnVzZWRCeQogICAgICAgICAgLndoZXJlKCh1c2VyKSA9PiB1c2VyIGlzIEhOb3QgJiYgdXNlci5kb21pbmF0ZXMobm9kZSkpOwogICAgICBkb21pbmF0aW5nLmZvckVhY2goKGhvaXN0ZWQpIHsKICAgICAgICBzaW1wbGlmeUNvbmRpdGlvbihub2RlLnRoZW5CbG9jaywgaG9pc3RlZCwgZmFsc2UpOwogICAgICAgIHNpbXBsaWZ5Q29uZGl0aW9uKG5vZGUuZWxzZUJsb2NrLCBob2lzdGVkLCB0cnVlKTsKICAgICAgfSk7CiAgICB9CiAgICBzaW1wbGlmeUNvbmRpdGlvbihub2RlLnRoZW5CbG9jaywgY29uZGl0aW9uLCAhaXNOZWdhdGVkKTsKICAgIHNpbXBsaWZ5Q29uZGl0aW9uKG5vZGUuZWxzZUJsb2NrLCBjb25kaXRpb24sIGlzTmVnYXRlZCk7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdElzKEhJcyBub2RlKSB7CiAgICBEYXJ0VHlwZSB0eXBlID0gbm9kZS50eXBlRXhwcmVzc2lvbjsKCiAgICBpZiAoIW5vZGUuaXNSYXdDaGVjaykgewogICAgICByZXR1cm4gbm9kZTsKICAgIH0gZWxzZSBpZiAodHlwZS5pc1R5cGVkZWYpIHsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9IGVsc2UgaWYgKHR5cGUuaXNGdW5jdGlvblR5cGUpIHsKICAgICAgcmV0dXJuIG5vZGU7CiAgICB9IGVsc2UgaWYgKHR5cGUuaXNGdXR1cmVPcikgewogICAgICByZXR1cm4gbm9kZTsKICAgIH0KCiAgICBpZiAodHlwZSA9PSBjb21tb25FbGVtZW50cy5vYmplY3RUeXBlIHx8IHR5cGUudHJlYXRBc0R5bmFtaWMpIHsKICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEJvb2wodHJ1ZSwgX2Nsb3NlZFdvcmxkKTsKICAgIH0KICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IHR5cGU7CiAgICBDbGFzc0VudGl0eSBlbGVtZW50ID0gaW50ZXJmYWNlVHlwZS5lbGVtZW50OwogICAgSEluc3RydWN0aW9uIGV4cHJlc3Npb24gPSBub2RlLmV4cHJlc3Npb247CiAgICBpZiAoZXhwcmVzc2lvbi5pc0ludGVnZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuaW50Q2xhc3MgfHwKICAgICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMubnVtQ2xhc3MgfHwKICAgICAgICAgIGNvbW1vbkVsZW1lbnRzLmlzTnVtYmVyT3JTdHJpbmdTdXBlcnR5cGUoZWxlbWVudCkpIHsKICAgICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50Qm9vbCh0cnVlLCBfY2xvc2VkV29ybGQpOwogICAgICB9IGVsc2UgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuZG91YmxlQ2xhc3MpIHsKICAgICAgICAvLyBXZSBsZXQgdGhlIEpTIHNlbWFudGljcyBkZWNpZGUgZm9yIHRoYXQgY2hlY2suIEN1cnJlbnRseQogICAgICAgIC8vIHRoZSBjb2RlIHdlIGVtaXQgd2lsbCBhbHdheXMgcmV0dXJuIHRydWUuCiAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEJvb2woZmFsc2UsIF9jbG9zZWRXb3JsZCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbi5pc0RvdWJsZShfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5kb3VibGVDbGFzcyB8fAogICAgICAgICAgZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5udW1DbGFzcyB8fAogICAgICAgICAgY29tbW9uRWxlbWVudHMuaXNOdW1iZXJPclN0cmluZ1N1cGVydHlwZShlbGVtZW50KSkgewogICAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIF9jbG9zZWRXb3JsZCk7CiAgICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5pbnRDbGFzcykgewogICAgICAgIC8vIFdlIGxldCB0aGUgSlMgc2VtYW50aWNzIGRlY2lkZSBmb3IgdGhhdCBjaGVjay4gQ3VycmVudGx5CiAgICAgICAgLy8gdGhlIGNvZGUgd2UgZW1pdCB3aWxsIHJldHVybiB0cnVlIGZvciBhIGRvdWJsZSB0aGF0IGNhbiBiZQogICAgICAgIC8vIHJlcHJlc2VudGVkIGFzIGEgMzEtYml0IGludGVnZXIgYW5kIGZvciAtMC4wLgogICAgICAgIHJldHVybiBub2RlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKGZhbHNlLCBfY2xvc2VkV29ybGQpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24uaXNOdW1iZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMubnVtQ2xhc3MpIHsKICAgICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50Qm9vbCh0cnVlLCBfY2xvc2VkV29ybGQpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFdlIGNhbm5vdCBqdXN0IHJldHVybiBmYWxzZSwgYmVjYXVzZSB0aGUgZXhwcmVzc2lvbiBtYXkgYmUgb2YKICAgICAgICAvLyB0eXBlIGludCBvciBkb3VibGUuCiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZXhwcmVzc2lvbgogICAgICAgICAgICAuaXNQcmltaXRpdmVOdW1iZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgIC5pc1BvdGVudGlhbGx5VHJ1ZSAmJgogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuaW50Q2xhc3MpIHsKICAgICAgLy8gV2UgbGV0IHRoZSBKUyBzZW1hbnRpY3MgZGVjaWRlIGZvciB0aGF0IGNoZWNrLgogICAgICByZXR1cm4gbm9kZTsKICAgICAgLy8gV2UgbmVlZCB0aGUgWzpoYXNUeXBlQXJndW1lbnRzOl0gY2hlY2sgYmVjYXVzZSB3ZSBkb24ndCBoYXZlCiAgICAgIC8vIHRoZSBub3Rpb24gb2YgZ2VuZXJpY3MgaW4gdGhlIGJhY2tlbmQuIEZvciBleGFtcGxlLCBbOnRoaXM6XSBpbgogICAgICAvLyBhIGNsYXNzIFs6QTxUPjpdLCBpcyBjdXJyZW50bHkgYWx3YXlzIGNvbnNpZGVyZWQgdG8gaGF2ZSB0aGUKICAgICAgLy8gcmF3IHR5cGUuCiAgICB9IGVsc2UgaWYgKCFSdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zLmhhc1R5cGVBcmd1bWVudHModHlwZSkpIHsKICAgICAgQWJzdHJhY3RWYWx1ZSBleHByZXNzaW9uTWFzayA9IGV4cHJlc3Npb24uaW5zdHJ1Y3Rpb25UeXBlOwogICAgICBBYnN0cmFjdEJvb2wgaXNJbnN0YW5jZU9mID0KICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzSW5zdGFuY2VPZihleHByZXNzaW9uTWFzaywgZWxlbWVudCk7CiAgICAgIGlmIChpc0luc3RhbmNlT2YuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJldHVybiBfZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIF9jbG9zZWRXb3JsZCk7CiAgICAgIH0gZWxzZSBpZiAoaXNJbnN0YW5jZU9mLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEJvb2woZmFsc2UsIF9jbG9zZWRXb3JsZCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0VHlwZUNvbnZlcnNpb24oSFR5cGVDb252ZXJzaW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmlzUmVkdW5kYW50KF9jbG9zZWRXb3JsZCkpIHJldHVybiBub2RlLmNoZWNrZWRJbnB1dDsKCiAgICAvLyBTaW1wbGlmeSAnYXMgVCcgd2hlcmUgVCBpcyBhIHNpbXBsZSB0eXBlLgogICAgRGFydFR5cGUgY2hlY2tlZFR5cGUgPSBub2RlLnR5cGVFeHByZXNzaW9uOwogICAgaWYgKGNoZWNrZWRUeXBlIGlzIFR5cGVWYXJpYWJsZVR5cGUgJiYgbm9kZS5pbnB1dHMubGVuZ3RoID09IDIpIHsKICAgICAgSEluc3RydWN0aW9uIHJlcCA9IG5vZGUudHlwZVJlcHJlc2VudGF0aW9uOwogICAgICBpZiAocmVwIGlzIEhUeXBlSW5mb0V4cHJlc3Npb24gJiYKICAgICAgICAgIHJlcC5raW5kID09IFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuQ09NUExFVEUgJiYKICAgICAgICAgIHJlcC5pbnB1dHMuaXNFbXB0eSkgewogICAgICAgIERhcnRUeXBlIHR5cGUgPSByZXAuZGFydFR5cGU7CiAgICAgICAgaWYgKHR5cGUuaXNJbnRlcmZhY2VUeXBlICYmIHR5cGUudHJlYXRBc1JhdykgewogICAgICAgICAgcmV0dXJuIG5vZGUuY2hlY2tlZElucHV0LmNvbnZlcnRUeXBlKF9jbG9zZWRXb3JsZCwgdHlwZSwgbm9kZS5raW5kKQogICAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gbm9kZS5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdFByaW1pdGl2ZUNoZWNrKEhQcmltaXRpdmVDaGVjayBub2RlKSB7CiAgICBpZiAobm9kZS5pc1JlZHVuZGFudChfY2xvc2VkV29ybGQpKSByZXR1cm4gbm9kZS5jaGVja2VkSW5wdXQ7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEJvb2xDb252ZXJzaW9uKEhCb29sQ29udmVyc2lvbiBub2RlKSB7CiAgICBpZiAobm9kZS5pc1JlZHVuZGFudChfY2xvc2VkV29ybGQpKSByZXR1cm4gbm9kZS5jaGVja2VkSW5wdXQ7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdFR5cGVLbm93bihIVHlwZUtub3duIG5vZGUpIHsKICAgIHJldHVybiBub2RlLmlzUmVkdW5kYW50KF9jbG9zZWRXb3JsZCkgPyBub2RlLmNoZWNrZWRJbnB1dCA6IG5vZGU7CiAgfQoKICBGaWVsZEVudGl0eSBmaW5kQ29uY3JldGVGaWVsZEZvckR5bmFtaWNBY2Nlc3MoCiAgICAgIEhJbnZva2VEeW5hbWljRmllbGQgbm9kZSwgSEluc3RydWN0aW9uIHJlY2VpdmVyKSB7CiAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLmluc3RydWN0aW9uVHlwZTsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBub2RlLmVsZW1lbnQgaXMgRmllbGRFbnRpdHkKICAgICAgICA/IG5vZGUuZWxlbWVudAogICAgICAgIDogX2Nsb3NlZFdvcmxkLmxvY2F0ZVNpbmdsZU1lbWJlcihub2RlLnNlbGVjdG9yLCByZWNlaXZlclR5cGUpOwogICAgcmV0dXJuIG1lbWJlciBpcyBGaWVsZEVudGl0eSA/IG1lbWJlciA6IG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRGaWVsZEdldChIRmllbGRHZXQgbm9kZSkgewogICAgaWYgKG5vZGUuaXNOdWxsQ2hlY2spIHJldHVybiBub2RlOwogICAgdmFyIHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKCiAgICAvLyBIRmllbGRHZXQgb2YgYSBjb25zdHJ1Y3RlZCBjb25zdGFudCBjYW4gYmUgcmVwbGFjZWQgd2l0aCB0aGUgY29uc3RhbnQncwogICAgLy8gZmllbGQuCiAgICBpZiAocmVjZWl2ZXIgaXMgSENvbnN0YW50KSB7CiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSByZWNlaXZlci5jb25zdGFudDsKICAgICAgaWYgKGNvbnN0YW50LmlzQ29uc3RydWN0ZWRPYmplY3QpIHsKICAgICAgICBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUgY29uc3RydWN0ZWRDb25zdGFudCA9IGNvbnN0YW50OwogICAgICAgIE1hcDxGaWVsZEVudGl0eSwgQ29uc3RhbnRWYWx1ZT4gZmllbGRzID0gY29uc3RydWN0ZWRDb25zdGFudC5maWVsZHM7CiAgICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGZpZWxkc1tub2RlLmVsZW1lbnRdOwogICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50KHZhbHVlLCBfY2xvc2VkV29ybGQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0R2V0TGVuZ3RoKEhHZXRMZW5ndGggbm9kZSkgewogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKICAgIGlmIChfZ3JhcGguYWxsb2NhdGVkRml4ZWRMaXN0cy5jb250YWlucyhyZWNlaXZlcikpIHsKICAgICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBjaGVja2luZyBpZiB0aGUgc2Vjb25kIGlucHV0IGlzIGFuIGludGVnZXIKICAgICAgLy8gc2hvdWxkIG5vdCBiZSBuZWNlc3NhcnkgYnV0IGl0IGN1cnJlbnRseSBtYWtlcyBpdCBlYXNpZXIgZm9yCiAgICAgIC8vIG90aGVyIG9wdGltaXphdGlvbnMgdG8gcmVhc29uIGFib3V0IGEgZml4ZWQgbGVuZ3RoIGNvbnN0cnVjdG9yCiAgICAgIC8vIHRoYXQgd2Uga25vdyB0YWtlcyBhbiBpbnQuCiAgICAgIGlmIChyZWNlaXZlci5pbnB1dHNbMF0uaXNJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgICAgcmV0dXJuIHJlY2VpdmVyLmlucHV0c1swXTsKICAgICAgfQogICAgfSBlbHNlIGlmIChyZWNlaXZlci5pc0NvbnN0YW50TGlzdCgpKSB7CiAgICAgIEhDb25zdGFudCBjb25zdGFudFJlY2VpdmVyID0gcmVjZWl2ZXI7CiAgICAgIExpc3RDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gY29uc3RhbnRSZWNlaXZlci5jb25zdGFudDsKICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEludChjb25zdGFudC5sZW5ndGgsIF9jbG9zZWRXb3JsZCk7CiAgICB9IGVsc2UgaWYgKHJlY2VpdmVyLmlzQ29uc3RhbnRTdHJpbmcoKSkgewogICAgICBIQ29uc3RhbnQgY29uc3RhbnRSZWNlaXZlciA9IHJlY2VpdmVyOwogICAgICBTdHJpbmdDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gY29uc3RhbnRSZWNlaXZlci5jb25zdGFudDsKICAgICAgcmV0dXJuIF9ncmFwaC5hZGRDb25zdGFudEludChjb25zdGFudC5sZW5ndGgsIF9jbG9zZWRXb3JsZCk7CiAgICB9IGVsc2UgewogICAgICBBYnN0cmFjdFZhbHVlIHR5cGUgPSByZWNlaXZlci5pbnN0cnVjdGlvblR5cGU7CiAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0NvbnRhaW5lcih0eXBlKSAmJgogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZ2V0Q29udGFpbmVyTGVuZ3RoKHR5cGUpICE9IG51bGwpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gY29uc3RhbnQgPSBfZ3JhcGguYWRkQ29uc3RhbnRJbnQoCiAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmdldENvbnRhaW5lckxlbmd0aCh0eXBlKSwgX2Nsb3NlZFdvcmxkKTsKICAgICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKHR5cGUpLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgICAgICAvLyBJZiB0aGUgY29udGFpbmVyIGNhbiBiZSBudWxsLCB3ZSB1cGRhdGUgYWxsIHVzZXMgb2YgdGhlIGxlbmd0aAogICAgICAgICAgLy8gYWNjZXNzIHRvIHVzZSB0aGUgY29uc3RhbnQgaW5zdGVhZCwgYnV0IGtlZXAgdGhlIGxlbmd0aCBhY2Nlc3MgaW4KICAgICAgICAgIC8vIHRoZSBncmFwaCwgdG8gZW5zdXJlIHdlIHN0aWxsIGhhdmUgYSBudWxsIGNoZWNrLgogICAgICAgICAgbm9kZS5ibG9jay5yZXdyaXRlKG5vZGUsIGNvbnN0YW50KTsKICAgICAgICAgIHJldHVybiBub2RlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gY29uc3RhbnQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgaWYgKG5vZGUuaXNBc3NpZ25hYmxlICYmCiAgICAgICAgaXNGaXhlZExlbmd0aChyZWNlaXZlci5pbnN0cnVjdGlvblR5cGUsIF9jbG9zZWRXb3JsZCkpIHsKICAgICAgLy8gVGhlIGlucHV0IHR5cGUgaGFzIGNoYW5nZWQgdG8gZml4ZWQtbGVuZ3RoIHNvIGNoYW5nZSB0byBhbiB1bmFzc2lnbmFibGUKICAgICAgLy8gSEdldExlbmd0aCB0byBhbGxvdyBtb3JlIEdWTiBvcHRpbWl6YXRpb25zLgogICAgICByZXR1cm4gbmV3IEhHZXRMZW5ndGgocmVjZWl2ZXIsIG5vZGUuaW5zdHJ1Y3Rpb25UeXBlLAogICAgICAgICAgaXNBc3NpZ25hYmxlOiBmYWxzZSk7CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEluZGV4KEhJbmRleCBub2RlKSB7CiAgICBpZiAobm9kZS5yZWNlaXZlci5pc0NvbnN0YW50TGlzdCgpICYmIG5vZGUuaW5kZXguaXNDb25zdGFudEludGVnZXIoKSkgewogICAgICBIQ29uc3RhbnQgaW5zdHJ1Y3Rpb24gPSBub2RlLnJlY2VpdmVyOwogICAgICBMaXN0Q29uc3RhbnRWYWx1ZSBsaXN0ID0gaW5zdHJ1Y3Rpb24uY29uc3RhbnQ7CiAgICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZW50cmllcyA9IGxpc3QuZW50cmllczsKICAgICAgSENvbnN0YW50IGluZGV4SW5zdHJ1Y3Rpb24gPSBub2RlLmluZGV4OwogICAgICBJbnRDb25zdGFudFZhbHVlIGluZGV4Q29uc3RhbnQgPSBpbmRleEluc3RydWN0aW9uLmNvbnN0YW50OwogICAgICBpbnQgaW5kZXggPSBpbmRleENvbnN0YW50LmludFZhbHVlLnRvSW50KCk7CiAgICAgIGlmIChpbmRleCA+PSAwICYmIGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50KGVudHJpZXNbaW5kZXhdLCBfY2xvc2VkV29ybGQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEludm9rZUR5bmFtaWNHZXR0ZXIoSEludm9rZUR5bmFtaWNHZXR0ZXIgbm9kZSkgewogICAgcHJvcGFnYXRlQ29uc3RhbnRWYWx1ZVRvVXNlcyhub2RlKTsKICAgIGlmIChub2RlLmlzSW50ZXJjZXB0ZWRDYWxsKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBmb2xkZWQgPSBoYW5kbGVJbnRlcmNlcHRlZENhbGwobm9kZSk7CiAgICAgIGlmIChmb2xkZWQgIT0gbm9kZSkgcmV0dXJuIGZvbGRlZDsKICAgIH0KICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IG5vZGUuZ2V0RGFydFJlY2VpdmVyKF9jbG9zZWRXb3JsZCk7CiAgICBBYnN0cmFjdFZhbHVlIHJlY2VpdmVyVHlwZSA9IHJlY2VpdmVyLmluc3RydWN0aW9uVHlwZTsKICAgIEZpZWxkRW50aXR5IGZpZWxkID0gbm9kZS5lbGVtZW50IGlzIEZpZWxkRW50aXR5CiAgICAgICAgPyBub2RlLmVsZW1lbnQKICAgICAgICA6IGZpbmRDb25jcmV0ZUZpZWxkRm9yRHluYW1pY0FjY2Vzcyhub2RlLCByZWNlaXZlcik7CiAgICBpZiAoZmllbGQgIT0gbnVsbCkgewogICAgICBGaWVsZEFuYWx5c2lzRGF0YSBmaWVsZERhdGEgPQogICAgICAgICAgX2Nsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKTsKICAgICAgaWYgKGZpZWxkRGF0YS5pc0VmZmVjdGl2ZWx5Q29uc3RhbnQpIHsKICAgICAgICAvLyBUaGUgZmllbGQgaXMgZWxpZGVkIGFuZCByZXBsYWNlIGl0IHdpdGggaXRzIGNvbnN0YW50IHZhbHVlLgogICAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwocmVjZWl2ZXJUeXBlKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICAgICAgLy8gVGhlIHJlY2VpdmVyIGlzIHBvdGVudGlhbGx5IGBudWxsYCBzbyB3ZSBpbnNlcnQgYSBudWxsIHJlY2VpdmVyCiAgICAgICAgICAvLyBndWFyZCB0byB0cmlnZ2VyIGEgbnVsbCBwb2ludGVyIGV4Y2VwdGlvbi4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIGluc2VydGVkIHVuY29uZGl0aW9uYWxseSBhbmQgcmVtb3ZlZCBieSBsYXRlcgogICAgICAgICAgLy8gb3B0aW1pemF0aW9ucyBpZiB1bm5lY2Vzc2FyeSwgYnV0IHBlcmZvcm1hbmNlIHdlIGRvIGl0CiAgICAgICAgICAvLyBjb25kaXRpb25hbGx5IGhlcmUuCiAgICAgICAgICAvLyBUT0RPKDM1OTk2KTogUmVwbGFjZSB3aXRoIG51bGwgcmVjZWl2ZXIgZ3VhcmQgaW5zdHJ1Y3Rpb24uCiAgICAgICAgICBISW5zdHJ1Y3Rpb24gZHVtbXlHZXQgPSBuZXcgSEZpZWxkR2V0KG51bGwsIHJlY2VpdmVyLAogICAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlLCBub2RlLnNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgICAgIGlzQXNzaWduYWJsZTogZmFsc2UpOwogICAgICAgICAgX2xvZz8ucmVnaXN0ZXJGaWVsZEdldChub2RlLCBkdW1teUdldCk7CiAgICAgICAgICBub2RlLmJsb2NrLmFkZEJlZm9yZShub2RlLCBkdW1teUdldCk7CiAgICAgICAgfQogICAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBmaWVsZERhdGEuY29uc3RhbnRWYWx1ZTsKICAgICAgICBIQ29uc3RhbnQgcmVzdWx0ID0gX2dyYXBoLmFkZENvbnN0YW50KGNvbnN0YW50LCBfY2xvc2VkV29ybGQsCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICBfbG9nPy5yZWdpc3RlckNvbnN0YW50RmllbGRHZXQobm9kZSwgZmllbGQsIHJlc3VsdCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfSBlbHNlIHsKICAgICAgICBIRmllbGRHZXQgcmVzdWx0ID0gX2RpcmVjdEZpZWxkR2V0KHJlY2VpdmVyLCBmaWVsZCwgbm9kZSk7CiAgICAgICAgX2xvZz8ucmVnaXN0ZXJGaWVsZEdldChub2RlLCByZXN1bHQpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgIH0KCiAgICBub2RlLmVsZW1lbnQgPz89CiAgICAgICAgX2Nsb3NlZFdvcmxkLmxvY2F0ZVNpbmdsZU1lbWJlcihub2RlLnNlbGVjdG9yLCByZWNlaXZlclR5cGUpOwogICAgaWYgKG5vZGUuZWxlbWVudCAhPSBudWxsICYmCiAgICAgICAgbm9kZS5lbGVtZW50Lm5hbWUgPT0gbm9kZS5zZWxlY3Rvci5uYW1lICYmCiAgICAgICAgbm9kZS5lbGVtZW50LmlzRnVuY3Rpb24pIHsKICAgICAgLy8gQSBwcm9wZXJ0eSBleHRyYWN0aW9uIGdldHRlciwgYWthIGEgdGVhci1vZmYuCiAgICAgIG5vZGUuc2lkZUVmZmVjdHMuY2xlYXJBbGxEZXBlbmRlbmNpZXMoKTsKICAgICAgbm9kZS5zaWRlRWZmZWN0cy5jbGVhckFsbFNpZGVFZmZlY3RzKCk7CiAgICAgIG5vZGUuc2V0VXNlR3ZuKCk7IC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgaWRlbnRpdHkgb2YgdGVhci1vZmZzLgogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBISW5zdHJ1Y3Rpb24gX2RpcmVjdEZpZWxkR2V0KAogICAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEZpZWxkRW50aXR5IGZpZWxkLCBISW5zdHJ1Y3Rpb24gbm9kZSkgewogICAgYm9vbCBpc0Fzc2lnbmFibGUgPSAhX2Nsb3NlZFdvcmxkLmZpZWxkTmV2ZXJDaGFuZ2VzKGZpZWxkKTsKCiAgICBBYnN0cmFjdFZhbHVlIHR5cGU7CiAgICBpZiAoX25hdGl2ZURhdGEuaXNOYXRpdmVDbGFzcyhmaWVsZC5lbmNsb3NpbmdDbGFzcykpIHsKICAgICAgdHlwZSA9IEFic3RyYWN0VmFsdWVGYWN0b3J5LmZyb21OYXRpdmVCZWhhdmlvcigKICAgICAgICAgIF9uYXRpdmVEYXRhLmdldE5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yKGZpZWxkKSwgX2Nsb3NlZFdvcmxkKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSB0aGUgcG90ZW50aWFsbHkgbW9yZSBwcmVjaXNlIHR5cGUgb2YgdGhlCiAgICAgIC8vIG5vZGUgKyBmaW5kIGEgdGVzdCB0aGF0IHNob3dzIGl0cyB1c2VmdWxuZXNzLgogICAgICAvLyB0eXBlID0gX2Fic3RyYWN0VmFsdWVEb21haW4uaW50ZXJzZWN0aW9uKAogICAgICAvLyAgICAgbm9kZS5pbnN0cnVjdGlvblR5cGUsCiAgICAgIC8vICAgICBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFR5cGVGb3JNZW1iZXIoCiAgICAgIC8vICAgICAgICAgZmllbGQsIF9nbG9iYWxJbmZlcmVuY2VSZXN1bHRzKSk7CiAgICAgIHR5cGUgPSBBYnN0cmFjdFZhbHVlRmFjdG9yeS5pbmZlcnJlZFR5cGVGb3JNZW1iZXIoCiAgICAgICAgICBmaWVsZCwgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMpOwogICAgfQoKICAgIHJldHVybiBuZXcgSEZpZWxkR2V0KGZpZWxkLCByZWNlaXZlciwgdHlwZSwgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICBpc0Fzc2lnbmFibGU6IGlzQXNzaWduYWJsZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJbnZva2VEeW5hbWljU2V0dGVyKEhJbnZva2VEeW5hbWljU2V0dGVyIG5vZGUpIHsKICAgIGlmIChub2RlLmlzSW50ZXJjZXB0ZWRDYWxsKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBmb2xkZWQgPSBoYW5kbGVJbnRlcmNlcHRlZENhbGwobm9kZSk7CiAgICAgIGlmIChmb2xkZWQgIT0gbm9kZSkgcmV0dXJuIGZvbGRlZDsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBub2RlLmdldERhcnRSZWNlaXZlcihfY2xvc2VkV29ybGQpOwogICAgRmllbGRFbnRpdHkgZmllbGQgPSBmaW5kQ29uY3JldGVGaWVsZEZvckR5bmFtaWNBY2Nlc3Mobm9kZSwgcmVjZWl2ZXIpOwogICAgaWYgKGZpZWxkID09IG51bGwgfHwgIWZpZWxkLmlzQXNzaWduYWJsZSkgcmV0dXJuIG5vZGU7CiAgICAvLyBVc2UgYG5vZGUuaW5wdXRzLmxhc3RgIGluIGNhc2UgdGhlIGNhbGwgZm9sbG93cyB0aGUgaW50ZXJjZXB0b3IgY2FsbGluZwogICAgLy8gY29udmVudGlvbiwgYnV0IGlzIG5vdCBhIGNhbGwgb24gYW4gaW50ZXJjZXB0b3IuCiAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBub2RlLmlucHV0cy5sYXN0OwogICAgaWYgKF9jbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3koZmllbGQpLmlzRW1pdHRlZCkgewogICAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICAgIC8vIFRPRE8oc3JhKTogSW1wbGVtZW50IGlubGluaW5nIG9mIHNldHRlcnMgd2l0aCBjaGVja3MgZm9yIG5ldyBydGkuCiAgICAgICAgbm9kZS5uZWVkc0NoZWNrID0gdHJ1ZTsKICAgICAgICByZXR1cm4gbm9kZTsKICAgICAgfQogICAgICBEYXJ0VHlwZSB0eXBlID0gX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRGaWVsZFR5cGUoZmllbGQpOwogICAgICBpZiAoIXR5cGUudHJlYXRBc1JhdyB8fAogICAgICAgICAgdHlwZS5pc1R5cGVWYXJpYWJsZSB8fAogICAgICAgICAgdHlwZS51bmFsaWFzZWQuaXNGdW5jdGlvblR5cGUgfHwKICAgICAgICAgIHR5cGUudW5hbGlhc2VkLmlzRnV0dXJlT3IpIHsKICAgICAgICAvLyBXZSBjYW5ub3QgZ2VuZXJhdGUgdGhlIGNvcnJlY3QgdHlwZSByZXByZXNlbnRhdGlvbiBoZXJlLCBzbyBkb24ndAogICAgICAgIC8vIGlubGluZSB0aGlzIGFjY2Vzcy4KICAgICAgICAvLyBUT0RPKHNyYSk6IElmIHRoZSBpbnB1dCBpcyBzdWNoIHRoYXQgd2UgZG9uJ3QgbmVlZCBhIHR5cGUgY2hlY2ssIHdlCiAgICAgICAgLy8gY2FuIHNraXAgdGhlIHRlc3QgYW4gZ2VuZXJhdGUgdGhlIEhGaWVsZFNldC4KICAgICAgICBub2RlLm5lZWRzQ2hlY2sgPSB0cnVlOwogICAgICAgIHJldHVybiBub2RlOwogICAgICB9CiAgICAgIEhJbnN0cnVjdGlvbiBvdGhlciA9CiAgICAgICAgICB2YWx1ZS5jb252ZXJ0VHlwZShfY2xvc2VkV29ybGQsIHR5cGUsIEhUeXBlQ29udmVyc2lvbi5UWVBFX0NIRUNLKTsKICAgICAgaWYgKG90aGVyICE9IHZhbHVlKSB7CiAgICAgICAgbm9kZS5ibG9jay5hZGRCZWZvcmUobm9kZSwgb3RoZXIpOwogICAgICAgIHZhbHVlID0gb3RoZXI7CiAgICAgIH0KICAgIH0KICAgIGlmIChfY2xvc2VkV29ybGQuZmllbGRBbmFseXNpcy5nZXRGaWVsZERhdGEoZmllbGQpLmlzRWxpZGVkKSB7CiAgICAgIF9sb2c/LnJlZ2lzdGVyRmllbGRTZXQobm9kZSk7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIEhGaWVsZFNldCByZXN1bHQgPQogICAgICAgICAgbmV3IEhGaWVsZFNldChfYWJzdHJhY3RWYWx1ZURvbWFpbiwgZmllbGQsIHJlY2VpdmVyLCB2YWx1ZSkKICAgICAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IG5vZGUuc291cmNlSW5mb3JtYXRpb247CiAgICAgIF9sb2c/LnJlZ2lzdGVyRmllbGRTZXQobm9kZSwgcmVzdWx0KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEludm9rZUNsb3N1cmUoSEludm9rZUNsb3N1cmUgbm9kZSkgewogICAgSEluc3RydWN0aW9uIGNsb3N1cmUgPSBub2RlLmdldERhcnRSZWNlaXZlcihfY2xvc2VkV29ybGQpOwoKICAgIC8vIFJlcGxhY2UgaW5kaXJlY3QgY2FsbCB0byBzdGF0aWMgbWV0aG9kIHRlYXItb2ZmIGNsb3N1cmUgd2l0aCBkaXJlY3QgY2FsbAogICAgLy8gdG8gc3RhdGljIG1ldGhvZC4KICAgIGlmIChjbG9zdXJlIGlzIEhDb25zdGFudCkgewogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gY2xvc3VyZS5jb25zdGFudDsKICAgICAgaWYgKGNvbnN0YW50IGlzIEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSkgewogICAgICAgIEZ1bmN0aW9uRW50aXR5IHRhcmdldCA9IGNvbnN0YW50LmVsZW1lbnQ7CiAgICAgICAgUGFyYW1ldGVyU3RydWN0dXJlIHBhcmFtZXRlclN0cnVjdHVyZSA9IHRhcmdldC5wYXJhbWV0ZXJTdHJ1Y3R1cmU7CiAgICAgICAgaWYgKHBhcmFtZXRlclN0cnVjdHVyZS5jYWxsU3RydWN0dXJlID09IG5vZGUuc2VsZWN0b3IuY2FsbFN0cnVjdHVyZSkgewogICAgICAgICAgLy8gVE9ETyhzcmEpOiBIYW5kbGUgYWRkaW5nIG9wdGlvbmFsIGFyZ3VtZW50cyBkZWZhdWx0IHZhbHVlcy4KICAgICAgICAgIGFzc2VydCghbm9kZS5pc0ludGVyY2VwdGVkQ2FsbCk7CiAgICAgICAgICByZXR1cm4gbmV3IEhJbnZva2VTdGF0aWModGFyZ2V0LCBub2RlLmlucHV0cy5za2lwKDEpLnRvTGlzdCgpLAogICAgICAgICAgICAgIG5vZGUuaW5zdHJ1Y3Rpb25UeXBlLCBub2RlLnR5cGVBcmd1bWVudHMpCiAgICAgICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBub2RlLnNvdXJjZUluZm9ybWF0aW9uOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRJbnZva2VTdGF0aWMoSEludm9rZVN0YXRpYyBub2RlKSB7CiAgICBwcm9wYWdhdGVDb25zdGFudFZhbHVlVG9Vc2VzKG5vZGUpOwogICAgTWVtYmVyRW50aXR5IGVsZW1lbnQgPSBub2RlLmVsZW1lbnQ7CgogICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuaWRlbnRpY2FsRnVuY3Rpb24pIHsKICAgICAgaWYgKG5vZGUuaW5wdXRzLmxlbmd0aCA9PSAyKSB7CiAgICAgICAgcmV0dXJuIG5ldyBISWRlbnRpdHkoCiAgICAgICAgICAgIG5vZGUuaW5wdXRzWzBdLCBub2RlLmlucHV0c1sxXSwgbnVsbCwgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpCiAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gbm9kZS5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgfQogICAgfSBlbHNlIGlmIChlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLnNldFJ1bnRpbWVUeXBlSW5mbykgewogICAgICBpZiAobm9kZS5pbnB1dHMubGVuZ3RoID09IDIpIHsKICAgICAgICByZXR1cm4gaGFuZGxlQXJyYXlUeXBlSW5mbyhub2RlKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmNoZWNrQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKSB7CiAgICAgIGlmIChub2RlLmlucHV0cy5sZW5ndGggPT0gMikgewogICAgICAgIEhJbnN0cnVjdGlvbiBmaXJzdEFyZ3VtZW50ID0gbm9kZS5pbnB1dHNbMF07CiAgICAgICAgaWYgKGZpcnN0QXJndW1lbnQgaXMgSENvbnN0YW50KSB7CiAgICAgICAgICBIQ29uc3RhbnQgY29uc3RhbnQgPSBmaXJzdEFyZ3VtZW50OwogICAgICAgICAgaWYgKGNvbnN0YW50LmNvbnN0YW50LmlzVHJ1ZSkgcmV0dXJuIGNvbnN0YW50OwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmIChjb21tb25FbGVtZW50cy5pc0NoZWNrSW50KGVsZW1lbnQpKSB7CiAgICAgIGlmIChub2RlLmlucHV0cy5sZW5ndGggPT0gMSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBhcmd1bWVudCA9IG5vZGUuaW5wdXRzWzBdOwogICAgICAgIGlmIChhcmd1bWVudC5pc0ludGVnZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICAgIHJldHVybiBhcmd1bWVudDsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY29tbW9uRWxlbWVudHMuaXNDaGVja051bShlbGVtZW50KSkgewogICAgICBpZiAobm9kZS5pbnB1dHMubGVuZ3RoID09IDEpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPSBub2RlLmlucHV0c1swXTsKICAgICAgICBpZiAoYXJndW1lbnQuaXNOdW1iZXIoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICAgIHJldHVybiBhcmd1bWVudDsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY29tbW9uRWxlbWVudHMuaXNDaGVja1N0cmluZyhlbGVtZW50KSkgewogICAgICBpZiAobm9kZS5pbnB1dHMubGVuZ3RoID09IDEpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gYXJndW1lbnQgPSBub2RlLmlucHV0c1swXTsKICAgICAgICBpZiAoYXJndW1lbnQuaXNTdHJpbmcoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICAgIHJldHVybiBhcmd1bWVudDsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5hc3NlcnRIZWxwZXIgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmFzc2VydFRlc3QpIHsKICAgICAgaWYgKG5vZGUuaW5wdXRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGFyZ3VtZW50ID0gbm9kZS5pbnB1dHNbMF07CiAgICAgICAgaWYgKGFyZ3VtZW50IGlzIEhDb25zdGFudCkgewogICAgICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IGFyZ3VtZW50LmNvbnN0YW50OwogICAgICAgICAgaWYgKGNvbnN0YW50LmlzQm9vbCkgewogICAgICAgICAgICBib29sIHZhbHVlID0gY29uc3RhbnQuaXNUcnVlOwogICAgICAgICAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5hc3NlcnRUZXN0KSB7CiAgICAgICAgICAgICAgLy8gYGFzc2VydFRlc3QoYXJndW1lbnQpYCBlZmZlY3RpdmVseSBuZWdhdGVzIHRoZSBhcmd1bWVudC4KICAgICAgICAgICAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50Qm9vbCghdmFsdWUsIF9jbG9zZWRXb3JsZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gYGFzc2VydEhlbHBlcih0cnVlKWAgaXMgYSBuby1vcCwgb3RoZXIgdmFsdWVzIHRocm93LgogICAgICAgICAgICBpZiAodmFsdWUpIHJldHVybiBhcmd1bWVudDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbm9kZTsKICB9CgogIEhJbnN0cnVjdGlvbiBoYW5kbGVBcnJheVR5cGVJbmZvKEhJbnZva2VTdGF0aWMgbm9kZSkgewogICAgLy8gSWYgdHlwZSBpbmZvcm1hdGlvbiBpcyBub3QgbmVlZGVkLCB1c2UgdGhlIHJhdyBBcnJheS4KICAgIEhJbnN0cnVjdGlvbiBzb3VyY2UgPSBub2RlLmlucHV0c1swXTsKICAgIGlmIChzb3VyY2UudXNlZEJ5Lmxlbmd0aCAhPSAxKSByZXR1cm4gbm9kZTsKICAgIGlmIChzb3VyY2UuaXNBcnJheShfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgIHJldHVybiBub2RlOwogICAgfQogICAgZm9yIChISW5zdHJ1Y3Rpb24gdXNlciBpbiBub2RlLnVzZWRCeSkgewogICAgICBpZiAodXNlciBpcyBIR2V0TGVuZ3RoKSBjb250aW51ZTsKICAgICAgaWYgKHVzZXIgaXMgSEluZGV4KSBjb250aW51ZTsKICAgICAgLy8gQm91bmRzIGNoZWNrIGVzY2FwZXMgdGhlIGFycmF5LCBidXQgd2UgZG9uJ3QgY2FyZS4KICAgICAgaWYgKHVzZXIgaXMgSEJvdW5kc0NoZWNrKSBjb250aW51ZTsKICAgICAgLy8gSW50ZXJjZXB0b3Igb25seSBlc2NhcGVzIHRoZSBBcnJheSBpZiBhcnJheSBwYXNzZWQgdG8gYW4gaW50ZXJjZXB0ZWQKICAgICAgLy8gbWV0aG9kLgogICAgICBpZiAodXNlciBpcyBISW50ZXJjZXB0b3IpIGNvbnRpbnVlOwogICAgICBpZiAodXNlciBpcyBISW52b2tlU3RhdGljKSB7CiAgICAgICAgTWVtYmVyRW50aXR5IGVsZW1lbnQgPSB1c2VyLmVsZW1lbnQ7CiAgICAgICAgaWYgKGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuY2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IpIHsKICAgICAgICAgIC8vIENNRSBjaGVjayBlc2NhcGVzIHRoZSBhcnJheSwgYnV0IHdlIGRvbid0IGNhcmUuCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHVzZXIgaXMgSEludm9rZUR5bmFtaWNHZXR0ZXIpIHsKICAgICAgICBTdHJpbmcgbmFtZSA9IHVzZXIuc2VsZWN0b3IubmFtZTsKICAgICAgICAvLyBUaGVzZSBnZXR0ZXJzIGRvbid0IHVzZSB0aGUgQXJyYXkgdHlwZS4KICAgICAgICBpZiAobmFtZSA9PSAnbGFzdCcpIGNvbnRpbnVlOwogICAgICAgIGlmIChuYW1lID09ICdmaXJzdCcpIGNvbnRpbnVlOwogICAgICB9CiAgICAgIC8vIFRPRE8oc3JhKTogSW1wbGVtZW50IGEgbW9yZSBnZW5lcmFsIGFsZ29yaXRobSAtIG1hbnkgbWV0aG9kcyBkb24ndCB1c2UKICAgICAgLy8gdGhlIGVsZW1lbnQgdHlwZS4KICAgICAgcmV0dXJuIG5vZGU7CiAgICB9CiAgICByZXR1cm4gc291cmNlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0U3RyaW5nQ29uY2F0KEhTdHJpbmdDb25jYXQgbm9kZSkgewogICAgLy8gU2ltcGxpZnkgc3RyaW5nIGNvbmNhdDoKICAgIC8vCiAgICAvLyAgICAgIiIgKyBSICAgICAgICAgICAgICAgIC0+ICBSCiAgICAvLyAgICAgTCArICIiICAgICAgICAgICAgICAgIC0+ICBMCiAgICAvLyAgICAgIkwiICsgIlIiICAgICAgICAgICAgIC0+ICAiTFIiCiAgICAvLyAgICAgKHByZWZpeCArICJMIikgKyAiUiIgIC0+ICBwcmVmaXggKyAiTFIiCiAgICAvLwogICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBnZXRTdHJpbmcoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIGlmICghaW5zdHJ1Y3Rpb24uaXNDb25zdGFudFN0cmluZygpKSByZXR1cm4gbnVsbDsKICAgICAgSENvbnN0YW50IGNvbnN0YW50ID0gaW5zdHJ1Y3Rpb247CiAgICAgIHJldHVybiBjb25zdGFudC5jb25zdGFudDsKICAgIH0KCiAgICBTdHJpbmdDb25zdGFudFZhbHVlIGxlZnRTdHJpbmcgPSBnZXRTdHJpbmcobm9kZS5sZWZ0KTsKICAgIGlmIChsZWZ0U3RyaW5nICE9IG51bGwgJiYgbGVmdFN0cmluZy5zdHJpbmdWYWx1ZS5sZW5ndGggPT0gMCkgewogICAgICByZXR1cm4gbm9kZS5yaWdodDsKICAgIH0KCiAgICBTdHJpbmdDb25zdGFudFZhbHVlIHJpZ2h0U3RyaW5nID0gZ2V0U3RyaW5nKG5vZGUucmlnaHQpOwogICAgaWYgKHJpZ2h0U3RyaW5nID09IG51bGwpIHJldHVybiBub2RlOwogICAgaWYgKHJpZ2h0U3RyaW5nLnN0cmluZ1ZhbHVlLmxlbmd0aCA9PSAwKSByZXR1cm4gbm9kZS5sZWZ0OwoKICAgIEhJbnN0cnVjdGlvbiBwcmVmaXggPSBudWxsOwogICAgaWYgKGxlZnRTdHJpbmcgPT0gbnVsbCkgewogICAgICBpZiAobm9kZS5sZWZ0IGlzISBIU3RyaW5nQ29uY2F0KSByZXR1cm4gbm9kZTsKICAgICAgSFN0cmluZ0NvbmNhdCBsZWZ0Q29uY2F0ID0gbm9kZS5sZWZ0OwogICAgICAvLyBEb24ndCB1bmRvIENTRS4KICAgICAgaWYgKGxlZnRDb25jYXQudXNlZEJ5Lmxlbmd0aCAhPSAxKSByZXR1cm4gbm9kZTsKICAgICAgcHJlZml4ID0gbGVmdENvbmNhdC5sZWZ0OwogICAgICBsZWZ0U3RyaW5nID0gZ2V0U3RyaW5nKGxlZnRDb25jYXQucmlnaHQpOwogICAgICBpZiAobGVmdFN0cmluZyA9PSBudWxsKSByZXR1cm4gbm9kZTsKICAgIH0KCiAgICBpZiAobGVmdFN0cmluZy5zdHJpbmdWYWx1ZS5sZW5ndGggKyByaWdodFN0cmluZy5zdHJpbmdWYWx1ZS5sZW5ndGggPgogICAgICAgIE1BWF9TSEFSRURfQ09OU1RBTlRfRk9MREVEX1NUUklOR19MRU5HVEgpIHsKICAgICAgaWYgKG5vZGUudXNlZEJ5Lmxlbmd0aCA+IDEpIHJldHVybiBub2RlOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiBmb2xkZWQgPSBfZ3JhcGguYWRkQ29uc3RhbnQoCiAgICAgICAgY29uc3RhbnRfc3lzdGVtCiAgICAgICAgICAgIC5jcmVhdGVTdHJpbmcobGVmdFN0cmluZy5zdHJpbmdWYWx1ZSArIHJpZ2h0U3RyaW5nLnN0cmluZ1ZhbHVlKSwKICAgICAgICBfY2xvc2VkV29ybGQpOwogICAgaWYgKHByZWZpeCA9PSBudWxsKSByZXR1cm4gZm9sZGVkOwogICAgcmV0dXJuIG5ldyBIU3RyaW5nQ29uY2F0KHByZWZpeCwgZm9sZGVkLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5zdHJpbmdUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdFN0cmluZ2lmeShIU3RyaW5naWZ5IG5vZGUpIHsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IG5vZGUuaW5wdXRzWzBdOwogICAgaWYgKGlucHV0LmlzU3RyaW5nKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBpbnB1dDsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gYXNTdHJpbmcoU3RyaW5nIHN0cmluZykgPT4KICAgICAgICBfZ3JhcGguYWRkQ29uc3RhbnQoY29uc3RhbnRfc3lzdGVtLmNyZWF0ZVN0cmluZyhzdHJpbmcpLCBfY2xvc2VkV29ybGQpOwoKICAgIEhJbnN0cnVjdGlvbiB0cnlDb25zdGFudCgpIHsKICAgICAgaWYgKCFpbnB1dC5pc0NvbnN0YW50KCkpIHJldHVybiBudWxsOwogICAgICBIQ29uc3RhbnQgY29uc3RhbnQgPSBpbnB1dDsKICAgICAgaWYgKCFjb25zdGFudC5jb25zdGFudC5pc1ByaW1pdGl2ZSkgcmV0dXJuIG51bGw7CiAgICAgIFByaW1pdGl2ZUNvbnN0YW50VmFsdWUgdmFsdWUgPSBjb25zdGFudC5jb25zdGFudDsKICAgICAgaWYgKHZhbHVlIGlzIEludENvbnN0YW50VmFsdWUpIHsKICAgICAgICAvLyBPbmx5IGNvbnN0YW50LWZvbGQgaW50LnRvU3RyaW5nKCkgd2hlbiBEYXJ0IGFuZCBKUyByZXN1bHRzIHRoZSBzYW1lLgogICAgICAgIC8vIFRPRE8oMTgxMDMpOiBXZSBzaG91bGQgYmUgYWJsZSB0byByZW1vdmUgdGhpcyB3b3JrLWFyb3VuZCB3aGVuIGlzc3VlCiAgICAgICAgLy8gMTgxMDMgaXMgcmVzb2x2ZWQgYnkgcHJvdmlkaW5nIHRoZSBjb3JyZWN0IHN0cmluZy4KICAgICAgICBpZiAoIXZhbHVlLmlzVUludDMyKCkpIHJldHVybiBudWxsOwogICAgICAgIHJldHVybiBhc1N0cmluZygnJHt2YWx1ZS5pbnRWYWx1ZX0nKTsKICAgICAgfQogICAgICBpZiAodmFsdWUgaXMgQm9vbENvbnN0YW50VmFsdWUpIHsKICAgICAgICByZXR1cm4gYXNTdHJpbmcodmFsdWUuYm9vbFZhbHVlID8gJ3RydWUnIDogJ2ZhbHNlJyk7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlIGlzIE51bGxDb25zdGFudFZhbHVlKSB7CiAgICAgICAgcmV0dXJuIGFzU3RyaW5nKCdudWxsJyk7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlIGlzIERvdWJsZUNvbnN0YW50VmFsdWUpIHsKICAgICAgICAvLyBUT0RPKHNyYSk6IEl0IHNlZW1zIHVubGlrZWx5IHRoYXQgYWxsIGRhcnQyanMgaG9zdCBpbXBsZW1lbnRhdGlvbnMKICAgICAgICAvLyBwcm9kdWNlIGV4YWN0bHkgdGhlIHNhbWUgY2hhcmFjdGVycyBhcyBhbGwgSmF2YVNjcmlwdCB0YXJnZXRzLgogICAgICAgIHJldHVybiBhc1N0cmluZygnJHt2YWx1ZS5kb3VibGVWYWx1ZX0nKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gdHJ5VG9TdHJpbmcoKSB7CiAgICAgIC8vIElmIHRoZSBgdG9TdHJpbmdgIG1ldGhvZCBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBhIHN0cmluZyB3ZSBjYW4gY2FsbAogICAgICAvLyBpdCBkaXJlY3RseS4gS2VlcCB0aGUgc3RyaW5naWZpZXIgZm9yIHByaW1pdGl2ZXMgKHNpbmNlIHRoZXkgaGF2ZSBmYXN0CiAgICAgIC8vIHBhdGggY29kZSBpbiB0aGUgc3RyaW5naWZpZXIpIGFuZCBmb3IgY2xhc3NlcyByZXF1aXJpbmcgaW50ZXJjZXB0b3JzCiAgICAgIC8vIChzaW5jZSBTc2FJbnN0cnVjdGlvblNpbXBsaWZpZXIgcnVucyBhZnRlciBTc2FTaW1wbGlmeUludGVyY2VwdG9ycykuCiAgICAgIGlmIChpbnB1dC5pc1ByaW1pdGl2ZShfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBpZiAoaW5wdXQuaXNOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gU2VsZWN0b3JzLnRvU3RyaW5nXzsKICAgICAgQWJzdHJhY3RWYWx1ZSB0b1N0cmluZ1R5cGUgPQogICAgICAgICAgQWJzdHJhY3RWYWx1ZUZhY3RvcnkuaW5mZXJyZWRSZXN1bHRUeXBlRm9yU2VsZWN0b3IoCiAgICAgICAgICAgICAgc2VsZWN0b3IsIGlucHV0Lmluc3RydWN0aW9uVHlwZSwgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMpOwogICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAgIC5jb250YWluc09ubHlUeXBlKAogICAgICAgICAgICAgIHRvU3RyaW5nVHlwZSwgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MpCiAgICAgICAgICAuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgLy8gQWxsIGludGVyY2VwdGVkIGNsYXNzZXMgZXh0ZW5kIGBJbnRlcmNlcHRvcmAsIHNvIGlmIHRoZSByZWNlaXZlciBjYW4ndAogICAgICAvLyBiZSBhIGNsYXNzIGV4dGVuZGluZyBgSW50ZXJjZXB0b3JgIHRoZW4gaXQgY2FuIGJlIGNhbGxlZCBkaXJlY3RseS4KICAgICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAuaXNJbnRlcmNlcHRvcihpbnB1dC5pbnN0cnVjdGlvblR5cGUpCiAgICAgICAgICAuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgICB2YXIgaW5wdXRzID0gPEhJbnN0cnVjdGlvbj5baW5wdXQsIGlucHV0XTsgLy8gW2ludGVyY2VwdG9yLCByZWNlaXZlcl0uCiAgICAgICAgSEluc3RydWN0aW9uIHJlc3VsdCA9IG5ldyBISW52b2tlRHluYW1pY01ldGhvZCgKICAgICAgICAgICAgc2VsZWN0b3IsCiAgICAgICAgICAgIGlucHV0Lmluc3RydWN0aW9uVHlwZSwgLy8gcmVjZWl2ZXIgdHlwZS4KICAgICAgICAgICAgaW5wdXRzLAogICAgICAgICAgICB0b1N0cmluZ1R5cGUsCiAgICAgICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgICAgICAgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgICAgaXNJbnRlcmNlcHRlZDogdHJ1ZSk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICByZXR1cm4gdHJ5Q29uc3RhbnQoKSA/PyB0cnlUb1N0cmluZygpID8/IG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRPbmVTaG90SW50ZXJjZXB0b3IoSE9uZVNob3RJbnRlcmNlcHRvciBub2RlKSB7CiAgICByZXR1cm4gaGFuZGxlSW50ZXJjZXB0ZWRDYWxsKG5vZGUpOwogIH0KCiAgYm9vbCBuZWVkc1N1YnN0aXR1dGlvbkZvclR5cGVWYXJpYWJsZUFjY2VzcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIGlmIChfY2xvc2VkV29ybGQuaXNVc2VkQXNNaXhpbihjbHMpKSByZXR1cm4gdHJ1ZTsKCiAgICByZXR1cm4gX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmFueVN0cmljdFN1YmNsYXNzT2YoY2xzLAogICAgICAgIChDbGFzc0VudGl0eSBzdWJjbGFzcykgewogICAgICByZXR1cm4gIV9ydGlTdWJzdGl0dXRpb25zLmlzVHJpdmlhbFN1YnN0aXR1dGlvbihzdWJjbGFzcywgY2xzKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0VHlwZUluZm9FeHByZXNzaW9uKEhUeXBlSW5mb0V4cHJlc3Npb24gbm9kZSkgewogICAgLy8gSWRlbnRpZnkgdGhlIGNhc2Ugd2hlcmUgdGhlIHR5cGUgaW5mbyBleHByZXNzaW9uIHdvdWxkIGJlIG9mIHRoZSBmb3JtOgogICAgLy8KICAgIC8vICBbZ2V0VHlwZUFyZ3VtZW50QnlJbmRleCh0aGlzLCAwKSwgLi4sIGdldFR5cGVBcmd1bWVudEJ5SW5kZXgodGhpcywgayldCiAgICAvLwogICAgLy8gYW5kIGsgaXMgdGhlIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyBvZiAndGhpcycuICBXZSBjYW4gc2ltcGx5IGNvcHkgdGhlCiAgICAvLyBsaXN0IGZyb20gJ3RoaXMnLgogICAgSEluc3RydWN0aW9uIHRyeUNvcHlJbmZvKCkgewogICAgICBpZiAobm9kZS5raW5kICE9IFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuSU5TVEFOQ0UpIHJldHVybiBudWxsOwoKICAgICAgSEluc3RydWN0aW9uIHNvdXJjZTsKICAgICAgaW50IGV4cGVjdGVkSW5kZXggPSAwOwoKICAgICAgZm9yIChISW5zdHJ1Y3Rpb24gYXJndW1lbnQgaW4gbm9kZS5pbnB1dHMpIHsKICAgICAgICBpZiAoYXJndW1lbnQgaXMgSFR5cGVJbmZvUmVhZFZhcmlhYmxlKSB7CiAgICAgICAgICBDbGFzc0VudGl0eSBjb250ZXh0ID0gRGFydFR5cGVzLmdldENsYXNzQ29udGV4dChhcmd1bWVudC52YXJpYWJsZSk7CiAgICAgICAgICBISW5zdHJ1Y3Rpb24gbmV4dFNvdXJjZSA9IGFyZ3VtZW50Lm9iamVjdDsKICAgICAgICAgIGlmIChuZXh0U291cmNlIGlzIEhSZWYpIHsKICAgICAgICAgICAgSFJlZiByZWYgPSBuZXh0U291cmNlOwogICAgICAgICAgICBuZXh0U291cmNlID0gcmVmLnZhbHVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG5leHRTb3VyY2UgaXMgSFRoaXMpIHsKICAgICAgICAgICAgaWYgKHNvdXJjZSA9PSBudWxsKSB7CiAgICAgICAgICAgICAgc291cmNlID0gbmV4dFNvdXJjZTsKICAgICAgICAgICAgICBDbGFzc0VudGl0eSB0aGlzQ2xhc3MgPSBuZXh0U291cmNlLnNvdXJjZUVsZW1lbnQuZW5jbG9zaW5nQ2xhc3M7CiAgICAgICAgICAgICAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSA9CiAgICAgICAgICAgICAgICAgIF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUodGhpc0NsYXNzKTsKICAgICAgICAgICAgICBpZiAobm9kZS5pbnB1dHMubGVuZ3RoICE9IHRoaXNUeXBlLnR5cGVBcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKG5lZWRzU3Vic3RpdHV0aW9uRm9yVHlwZVZhcmlhYmxlQWNjZXNzKHRoaXNDbGFzcykpIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoY29udGV4dCAhPSBudWxsICYmCiAgICAgICAgICAgICAgICAgICFfcnRpU3Vic3RpdHV0aW9ucy5pc1RyaXZpYWxTdWJzdGl0dXRpb24oCiAgICAgICAgICAgICAgICAgICAgICB0aGlzQ2xhc3MsIGNvbnRleHQpKSB7CiAgICAgICAgICAgICAgICAvLyBJZiBpbmxpbmluZywgdGhlIFtjb250ZXh0XSBpcyBub3QgdGhlIHNhbWUgYXMgW3RoaXNDbGFzc10uCiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGVuIHRoZSBzdWJzdGl0dXRpb24gbXVzdCBiZSB0cml2aWFsLgogICAgICAgICAgICAgICAgLy8gQ29uc2lkZXIgdGhpczoKICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAvLyAgICBjbGFzcyBBIHsKICAgICAgICAgICAgICAgIC8vICAgICAgZmluYWwgT2JqZWN0IHZhbHVlOwogICAgICAgICAgICAgICAgLy8gICAgICBBKHRoaXMudmFsdWUpOwogICAgICAgICAgICAgICAgLy8gICAgfQogICAgICAgICAgICAgICAgLy8gICAgY2xhc3MgQjxUPiBleHRlbmRzIEEgewogICAgICAgICAgICAgICAgLy8gICAgICBCKFQgdmFsdWUpIDogc3VwZXIodmFsdWUpOwogICAgICAgICAgICAgICAgLy8gICAgICBUIGdldCB2YWx1ZSA9PiBzdXBlci52YWx1ZSBhcyBUOwogICAgICAgICAgICAgICAgLy8gICAgfQogICAgICAgICAgICAgICAgLy8gICAgY2xhc3MgQzxTPiBleHRlbmRzIEI8TGlzdDxTPj4gewogICAgICAgICAgICAgICAgLy8gICAgICBDKExpc3Q8Uz4gdmFsdWUpIDogc3VwZXIodmFsdWUpOwogICAgICAgICAgICAgICAgLy8gICAgICBTIGdldCBmaXJzdCA9PiB2YWx1ZS5maXJzdDsKICAgICAgICAgICAgICAgIC8vICAgIH0KICAgICAgICAgICAgICAgIC8vCiAgICAgICAgICAgICAgICAvLyBJZiBgQi52YWx1ZWAgaXMgaW5saW5lZCBpbnRvIGBDLmZpcnN0YCB0aGUgdHlwZSBpbmZvCiAgICAgICAgICAgICAgICAvLyBleHByZXNzaW9uIGlzIHRoZSBsaXN0IGBbQi5UXWAgb24gYSBgdGhpc2Agb2YgdHlwZSBgQzxTPmAuCiAgICAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgc3Vic3RpdHV0aW9uIGZyb20gQyB0byBCIGlzIG5vdCB0cml2aWFsCiAgICAgICAgICAgICAgICAvLyAoUyAtPiBMaXN0PFM+KSB0aGlzIHR5cGUgaW5mbyBleHByZXNzaW9uIGNhbm5vdCBiZSByZXBsYWNlZAogICAgICAgICAgICAgICAgLy8gd2l0aCB0aGUgdHlwZSBhcmd1bWVudHMgYEM8Uz5gIChpdCB3b3VsZCB5aWVsZCBbU10gaW5zdGVhZCBvZgogICAgICAgICAgICAgICAgLy8gW0xpc3Q8Uz5dKS4KICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAobmV4dFNvdXJjZSAhPSBzb3VyY2UpIHJldHVybiBudWxsOwogICAgICAgICAgICAvLyBDaGVjayB0aGF0IHRoZSBpbmRleCBpcyB0aGUgb25lIHdlIGV4cGVjdC4KICAgICAgICAgICAgaW50IGluZGV4ID0gYXJndW1lbnQudmFyaWFibGUuZWxlbWVudC5pbmRleDsKICAgICAgICAgICAgaWYgKGluZGV4ICE9IGV4cGVjdGVkSW5kZXgrKykgcmV0dXJuIG51bGw7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBUT0RPKHNyYSk6IEhhbmRsZSBub24tdGhpcyBjYXNlcyAoaS5lLiBpbmxpbmVkIGNvZGUpLiBTb21lCiAgICAgICAgICAgIC8vIG5vbi10aGlzIGNhc2VzIHdpbGwgaGF2ZSBhIFR5cGVNYXNrIHRoYXQgZG9lcyBub3QgbmVlZAogICAgICAgICAgICAvLyBzdWJzdGl0dXRpb24sIGV2ZW4gdGhvdWdoIHRoZSBnZW5lcmFsIGNhc2UgZG9lcywgZS5nLiBpbmxpbmluZyBhCiAgICAgICAgICAgIC8vIG1ldGhvZCBvbiBhbiBleGFjdCBjbGFzcy4KICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIG5ldyBIVHlwZUluZm9SZWFkUmF3KHNvdXJjZSwgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgfQoKICAgIC8vIFRPRE8oc3JhKTogQ29uc2lkZXIgZnVzaW5nIHR5cGUgZXhwcmVzc2lvbiB0cmVlcyB3aXRoIG5vIHR5cGUgdmFyaWFibGVzLAogICAgLy8gYXMgdGhlc2UgY291bGQgYmUgcmVwcmVzZW50ZWQgbGlrZSBjb25zdGFudHMuCgogICAgcmV0dXJuIHRyeUNvcHlJbmZvKCkgPz8gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdFR5cGVJbmZvUmVhZFZhcmlhYmxlKEhUeXBlSW5mb1JlYWRWYXJpYWJsZSBub2RlKSB7CiAgICBUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlID0gbm9kZS52YXJpYWJsZTsKICAgIENsYXNzRW50aXR5IGNvbnRleHRDbGFzcyA9IHZhcmlhYmxlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uOwogICAgSEluc3RydWN0aW9uIG9iamVjdCA9IG5vZGUub2JqZWN0OwoKICAgIEhJbnN0cnVjdGlvbiBmaW5pc2hHcm91bmRUeXBlKEludGVyZmFjZVR5cGUgZ3JvdW5kVHlwZSkgewogICAgICBJbnRlcmZhY2VUeXBlIHR5cGVBdFZhcmlhYmxlID0KICAgICAgICAgIF9jbG9zZWRXb3JsZC5kYXJ0VHlwZXMuYXNJbnN0YW5jZU9mKGdyb3VuZFR5cGUsIGNvbnRleHRDbGFzcyk7CiAgICAgIGlmICh0eXBlQXRWYXJpYWJsZSAhPSBudWxsKSB7CiAgICAgICAgaW50IGluZGV4ID0gdmFyaWFibGUuZWxlbWVudC5pbmRleDsKICAgICAgICBEYXJ0VHlwZSB0eXBlQXJndW1lbnQgPSB0eXBlQXRWYXJpYWJsZS50eXBlQXJndW1lbnRzW2luZGV4XTsKICAgICAgICBISW5zdHJ1Y3Rpb24gcmVwbGFjZW1lbnQgPSBuZXcgSFR5cGVJbmZvRXhwcmVzc2lvbigKICAgICAgICAgICAgVHlwZUluZm9FeHByZXNzaW9uS2luZC5DT01QTEVURSwKICAgICAgICAgICAgdHlwZUFyZ3VtZW50LAogICAgICAgICAgICBjb25zdCA8SEluc3RydWN0aW9uPltdLAogICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSwKICAgICAgICAgICAgaXNUeXBlVmFyaWFibGVSZXBsYWNlbWVudDogdHJ1ZSk7CiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OwogICAgICB9CiAgICAgIHJldHVybiBub2RlOwogICAgfQoKICAgIC8vLyBSZWFkIHRoZSB0eXBlIHZhcmlhYmxlIGZyb20gYW4gYWxsb2NhdGlvbiBvZiB0eXBlIFtjcmVhdGVkQ2xhc3NdLCB3aGVyZQogICAgLy8vIFtzZWxlY3RUeXBlQXJndW1lbnRGcm9tT2JqZWN0Q3JlYXRpb25dIGV4dHJhY3RzIHRoZSB0eXBlIGFyZ3VtZW50IGZyb20KICAgIC8vLyB0aGUgYWxsb2NhdGlvbiBmb3IgZmFjdG9yeSBjb25zdHJ1Y3RvciBjYWxsLgogICAgSEluc3RydWN0aW9uIGZpbmlzaFN1YnN0aXR1dGVkKENsYXNzRW50aXR5IGNyZWF0ZWRDbGFzcywKICAgICAgICBISW5zdHJ1Y3Rpb24gc2VsZWN0VHlwZUFyZ3VtZW50RnJvbU9iamVjdENyZWF0aW9uKGludCBpbmRleCkpIHsKICAgICAgSW50ZXJmYWNlVHlwZSB0aGlzVHlwZSA9IF9jbG9zZWRXb3JsZC5kYXJ0VHlwZXMuZ2V0VGhpc1R5cGUoY3JlYXRlZENsYXNzKTsKCiAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbkZvclR5cGVWYXJpYWJsZShUeXBlVmFyaWFibGVUeXBlIHR2KSB7CiAgICAgICAgcmV0dXJuIHNlbGVjdFR5cGVBcmd1bWVudEZyb21PYmplY3RDcmVhdGlvbigKICAgICAgICAgICAgdGhpc1R5cGUudHlwZUFyZ3VtZW50cy5pbmRleE9mKHR2KSk7CiAgICAgIH0KCiAgICAgIERhcnRUeXBlIHR5cGUgPSBfY2xvc2VkV29ybGQuZGFydFR5cGVzCiAgICAgICAgICAuYXNJbnN0YW5jZU9mKHRoaXNUeXBlLCBjb250ZXh0Q2xhc3MpCiAgICAgICAgICAudHlwZUFyZ3VtZW50c1t2YXJpYWJsZS5lbGVtZW50LmluZGV4XTsKICAgICAgaWYgKHR5cGUgaXMgVHlwZVZhcmlhYmxlVHlwZSkgewogICAgICAgIHJldHVybiBpbnN0cnVjdGlvbkZvclR5cGVWYXJpYWJsZSh0eXBlKTsKICAgICAgfQogICAgICBMaXN0PEhJbnN0cnVjdGlvbj4gYXJndW1lbnRzID0gPEhJbnN0cnVjdGlvbj5bXTsKICAgICAgdHlwZS5mb3JFYWNoVHlwZVZhcmlhYmxlKCh2KSB7CiAgICAgICAgYXJndW1lbnRzLmFkZChpbnN0cnVjdGlvbkZvclR5cGVWYXJpYWJsZSh2KSk7CiAgICAgIH0pOwogICAgICBISW5zdHJ1Y3Rpb24gcmVwbGFjZW1lbnQgPSBuZXcgSFR5cGVJbmZvRXhwcmVzc2lvbigKICAgICAgICAgIFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuQ09NUExFVEUsCiAgICAgICAgICB0eXBlLAogICAgICAgICAgYXJndW1lbnRzLAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsCiAgICAgICAgICBpc1R5cGVWYXJpYWJsZVJlcGxhY2VtZW50OiB0cnVlKTsKICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OwogICAgfQoKICAgIC8vIFR5cGUgdmFyaWFibGUgZXZhbHVhdGVkIGluIHRoZSBjb250ZXh0IG9mIGEgY29uc3RhbnQgY2FuIGJlIHJlcGxhY2VkIHdpdGgKICAgIC8vIGEgZ3JvdW5kIHRlcm0gdHlwZS4KICAgIGlmIChvYmplY3QgaXMgSENvbnN0YW50KSB7CiAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBvYmplY3QuY29uc3RhbnQ7CiAgICAgIGlmICh2YWx1ZSBpcyBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUpIHsKICAgICAgICByZXR1cm4gZmluaXNoR3JvdW5kVHlwZSh2YWx1ZS50eXBlKTsKICAgICAgfQogICAgICByZXR1cm4gbm9kZTsKICAgIH0KCiAgICAvLyBMb29rIGZvciBhbiBhbGxvY2F0aW9uIHdpdGggdHlwZSBpbmZvcm1hdGlvbiBhbmQgcmUtd3JpdGUgdHlwZSB2YXJpYWJsZQogICAgLy8gYXMgYSBmdW5jdGlvbiBvZiB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9mIHRoZSBhbGxvY2F0aW9uLiAgVGhpcyBlZmZlY3RpdmVseQogICAgLy8gc3RvcmUtZm9yd2FyZHMgYSB0eXBlIHZhcmlhYmxlIHJlYWQgdGhyb3VnaCBhbiBhbGxvY2F0aW9uLgoKICAgIC8vIE1hdGNoOgogICAgLy8KICAgIC8vICAgICBIQ3JlYXRlKENsYXNzRWxlbWVudCwKICAgIC8vICAgICAgIFthcmdfaSwKICAgIC8vICAgICAgICAuLi4sCiAgICAvLyAgICAgICAgSFR5cGVJbmZvRXhwcmVzc2lvbih0XzAsIHRfMSwgdF8yLCAuLi4pXSk7CiAgICAvLwogICAgLy8gVGhlIGB0X2lgIGFyZSB0aGUgdmFsdWVzIG9mIHRoZSB0eXBlIHBhcmFtZXRlcnMgb2YgQ2xhc3NFbGVtZW50LgoKICAgIGlmIChvYmplY3QgaXMgSENyZWF0ZSkgewogICAgICB2b2lkIHJlZ2lzdGVySW5zdGFudGlhdGlvbnMoKSB7CiAgICAgICAgLy8gRm9yd2FyZGluZyB0aGUgdHlwZSB2YXJpYWJsZSByZWZlcmVuY2VzIG1pZ2h0IGNhdXNlIHRoZSBIQ3JlYXRlIHRvCiAgICAgICAgLy8gYmVjb21lIGRlYWQuIFRoaXMgYnJlYWtzIHRoZSBhbGdvcml0aG0gZm9yIGdlbmVyYXRpbmcgdGhlIHBlci10eXBlCiAgICAgICAgLy8gcnVudGltZSB0eXBlIGluZm9ybWF0aW9uLCBzbyB3ZSBpbnN0YW50aWF0ZSB0aGVtIGhlcmUgaW4gY2FzZSB0aGUKICAgICAgICAvLyBIQ3JlYXRlIGJlY29tZXMgZGVhZC4KICAgICAgICBvYmplY3QuaW5zdGFudGlhdGVkVHlwZXM/LmZvckVhY2goX3JlZ2lzdHJ5LnJlZ2lzdGVySW5zdGFudGlhdGlvbik7CiAgICAgIH0KCiAgICAgIGlmIChvYmplY3QuaGFzUnRpSW5wdXQpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gdHlwZUluZm8gPSBvYmplY3QucnRpSW5wdXQ7CiAgICAgICAgaWYgKHR5cGVJbmZvIGlzIEhUeXBlSW5mb0V4cHJlc3Npb24pIHsKICAgICAgICAgIHJlZ2lzdGVySW5zdGFudGlhdGlvbnMoKTsKICAgICAgICAgIHJldHVybiBmaW5pc2hTdWJzdGl0dXRlZCgKICAgICAgICAgICAgICBvYmplY3QuZWxlbWVudCwgKGludCBpbmRleCkgPT4gdHlwZUluZm8uaW5wdXRzW2luZGV4XSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIE5vbi1nZW5lcmljIHR5cGUgKHdoaWNoIGV4dGVuZHMgb3IgbWl4ZXMgaW4gYSBnZW5lcmljIHR5cGUsIGZvcgogICAgICAgIC8vIGV4YW1wbGUgQ29kZVVuaXRzIGV4dGVuZHMgVW5tb2RpZmlhYmxlTGlzdEJhc2U8aW50PikuICBBbHNvIHVzZWQgZm9yCiAgICAgICAgLy8gcmF3LXR5cGUgd2hlbiB0aGUgdHlwZSBwYXJhbWV0ZXJzIGFyZSBlbGlkZWQuCiAgICAgICAgcmVnaXN0ZXJJbnN0YW50aWF0aW9ucygpOwogICAgICAgIHJldHVybiBmaW5pc2hTdWJzdGl0dXRlZCgKICAgICAgICAgICAgb2JqZWN0LmVsZW1lbnQsCiAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSB0eXBlIGFyZ3VtZW50cywgYWxsIHR5cGUgYXJndW1lbnRzIGFyZSAnZHluYW1pYycuCiAgICAgICAgICAgIChpbnQgaSkgPT4gX2dyYXBoLmFkZENvbnN0YW50TnVsbChfY2xvc2VkV29ybGQpKTsKICAgICAgfQogICAgfQoKICAgIC8vIFRPRE8oc3JhKTogRmFjdG9yeSBjb25zdHJ1Y3RvcnMgcGFzcyB0eXBlIGFyZ3VtZW50cyBhZnRlciB0aGUgdmFsdWUKICAgIC8vIGFyZ3VtZW50cy4gVGhlIFtzZWxlY3RUeXBlQXJndW1lbnRGcm9tT2JqZWN0Q3JlYXRpb25dIGFyZ3VtZW50IG9mCiAgICAvLyBbZmluaXNoU3Vic3RpdHV0ZWRdIGluZGV4ZXMgaW50byB0aGVzZSB0eXBlIGFyZ3VtZW50cy4KCiAgICAvLyBUcnkgdG8gcmVtb3ZlIHRoZSBpbnRlcmNlcHRvci4gVGhlIGludGVyY2VwdG9yIGlzIHVzZWQgZm9yIGFjY2Vzc2luZyB0aGUKICAgIC8vIHN1YnN0aXR1dGlvbiBtZXRob2RzLgogICAgaWYgKG5vZGUuaXNJbnRlcmNlcHRlZCkgewogICAgICAvLyBJZiB3ZSBkb24ndCBuZWVkIHRoZSBzdWJzdGl0dXRpb24gbWV0aG9kcyB0aGVuIHdlIGRvbid0IG5lZWQgdGhlCiAgICAgIC8vIGludGVyY2VwdG9yIHRvIGFjY2VzcyB0aGVtLgogICAgICBpZiAoIW5lZWRzU3Vic3RpdHV0aW9uRm9yVHlwZVZhcmlhYmxlQWNjZXNzKGNvbnRleHRDbGFzcykpIHsKICAgICAgICByZXR1cm4gbmV3IEhUeXBlSW5mb1JlYWRWYXJpYWJsZS5ub0ludGVyY2VwdG9yKAogICAgICAgICAgICB2YXJpYWJsZSwgb2JqZWN0LCBub2RlLmluc3RydWN0aW9uVHlwZSk7CiAgICAgIH0KICAgICAgLy8gQWxsIGludGVyY2VwdGVkIGNsYXNzZXMgZXh0ZW5kIGBJbnRlcmNlcHRvcmAsIHNvIGlmIHRoZSByZWNlaXZlciBjYW4ndAogICAgICAvLyBiZSBhIGNsYXNzIGV4dGVuZGluZyBgSW50ZXJjZXB0b3JgIHRoZW4gdGhlIHN1YnN0aXR1dGlvbiBtZXRob2RzIGNhbiBiZQogICAgICAvLyBjYWxsZWQgZGlyZWN0bHkuIChXZSBkb24ndCBjYXJlIGFib3V0IE51bGwgc2luY2UgY29udGV4dHMgcmVhZGluZyBjbGFzcwogICAgICAvLyB0eXBlIHZhcmlhYmxlcyBvcmlnaW5hdGUgZnJvbSBpbnN0YW5jZSBtZXRob2RzLikKICAgICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAuaXNJbnRlcmNlcHRvcihvYmplY3QuaW5zdHJ1Y3Rpb25UeXBlKQogICAgICAgICAgLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBIVHlwZUluZm9SZWFkVmFyaWFibGUubm9JbnRlcmNlcHRvcigKICAgICAgICAgICAgdmFyaWFibGUsIG9iamVjdCwgbm9kZS5pbnN0cnVjdGlvblR5cGUpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRUeXBlRXZhbChIVHlwZUV2YWwgbm9kZSkgewogICAgaWYgKFR5cGVSZWNpcGUuaXNJZGVudGl0eShub2RlLnR5cGVFeHByZXNzaW9uLCBub2RlLmVudlN0cnVjdHVyZSkpIHsKICAgICAgcmV0dXJuIG5vZGUuaW5wdXRzLnNpbmdsZTsKICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0QXNDaGVjayhIQXNDaGVjayBub2RlKSB7CiAgICBpZiAobm9kZS5pc1JlZHVuZGFudChfY2xvc2VkV29ybGQpKSByZXR1cm4gbm9kZS5jaGVja2VkSW5wdXQ7CgogICAgLy8gU2VlIGlmIHRoaXMgY2hlY2sgY2FuIGJlIGxvd2VyZWQgdG8gYSBzaW1wbGUgb25lLgogICAgSEluc3RydWN0aW9uIHR5cGVJbnB1dCA9IG5vZGUudHlwZUlucHV0OwogICAgaWYgKHR5cGVJbnB1dCBpcyBITG9hZFR5cGUpIHsKICAgICAgRGFydFR5cGUgZGFydFR5cGUgPSB0eXBlSW5wdXQudHlwZUV4cHJlc3Npb247CiAgICAgIE1lbWJlckVudGl0eSBzcGVjaWFsaXplZENoZWNrID0gU3BlY2lhbGl6ZWRDaGVja3MuZmluZEFzQ2hlY2soCiAgICAgICAgICBkYXJ0VHlwZSwgbm9kZS5pc1R5cGVFcnJvciwgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzKTsKICAgICAgaWYgKHNwZWNpYWxpemVkQ2hlY2sgIT0gbnVsbCkgewogICAgICAgIEFic3RyYWN0VmFsdWVXaXRoUHJlY2lzaW9uIGNoZWNrZWRUeXBlID0KICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlRnJvbVN0YXRpY1R5cGUoZGFydFR5cGUpOwogICAgICAgIHJldHVybiBIQXNDaGVja1NpbXBsZShub2RlLmNoZWNrZWRJbnB1dCwgZGFydFR5cGUsIGNoZWNrZWRUeXBlLAogICAgICAgICAgICBub2RlLmlzVHlwZUVycm9yLCBzcGVjaWFsaXplZENoZWNrLCBub2RlLmluc3RydWN0aW9uVHlwZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0QXNDaGVja1NpbXBsZShIQXNDaGVja1NpbXBsZSBub2RlKSB7CiAgICBpZiAobm9kZS5pc1JlZHVuZGFudChfY2xvc2VkV29ybGQpKSByZXR1cm4gbm9kZS5jaGVja2VkSW5wdXQ7CiAgICByZXR1cm4gbm9kZTsKICB9Cn0KCmNsYXNzIFNzYUNoZWNrSW5zZXJ0ZXIgZXh0ZW5kcyBIQmFzZVZpc2l0b3IgaW1wbGVtZW50cyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgZmluYWwgU2V0PEhJbnN0cnVjdGlvbj4gYm91bmRzQ2hlY2tlZDsKICBmaW5hbCBib29sIHRydXN0UHJpbWl0aXZlczsKICBmaW5hbCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQ7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhQ2hlY2tJbnNlcnRlciI7CiAgSEdyYXBoIGdyYXBoOwoKICBTc2FDaGVja0luc2VydGVyKHRoaXMudHJ1c3RQcmltaXRpdmVzLCB0aGlzLmNsb3NlZFdvcmxkLCB0aGlzLmJvdW5kc0NoZWNrZWQpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB0aGlzLmdyYXBoID0gZ3JhcGg7CgogICAgLy8gSW4gLS10cnVzdC1wcmltaXRpdmVzIG1vZGUgd2UgZG9uJ3QgYWRkIGJvdW5kcyBjaGVja3MuICBUaGlzIGlzIGJldHRlcgogICAgLy8gdGhhbiB0cnlpbmcgdG8gcmVtb3ZlIHRoZW0gbGF0ZXIgYXMgdGhlIGxpbWl0IGV4cHJlc3Npb24gd291bGQgYmVjb21lCiAgICAvLyBkZWFkIGFuZCByZXF1aXJlIERDRS4KICAgIGlmICh0cnVzdFByaW1pdGl2ZXMpIHJldHVybjsKCiAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmZpcnN0OwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIG5leHQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXh0OwogICAgfQogIH0KCiAgSEJvdW5kc0NoZWNrIGluc2VydEJvdW5kc0NoZWNrKAogICAgICBISW5zdHJ1Y3Rpb24gaW5kZXhOb2RlLCBISW5zdHJ1Y3Rpb24gYXJyYXksIEhJbnN0cnVjdGlvbiBpbmRleEFyZ3VtZW50KSB7CiAgICBIR2V0TGVuZ3RoIGxlbmd0aCA9IG5ldyBIR2V0TGVuZ3RoKAogICAgICAgIGFycmF5LCBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLnBvc2l0aXZlSW50VHlwZSwKICAgICAgICBpc0Fzc2lnbmFibGU6ICFpc0ZpeGVkTGVuZ3RoKGFycmF5Lmluc3RydWN0aW9uVHlwZSwgY2xvc2VkV29ybGQpKTsKICAgIGluZGV4Tm9kZS5ibG9jay5hZGRCZWZvcmUoaW5kZXhOb2RlLCBsZW5ndGgpOwoKICAgIEFic3RyYWN0VmFsdWUgdHlwZSA9CiAgICAgICAgaW5kZXhBcmd1bWVudC5pc1Bvc2l0aXZlSW50ZWdlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZQogICAgICAgICAgICA/IGluZGV4QXJndW1lbnQuaW5zdHJ1Y3Rpb25UeXBlCiAgICAgICAgICAgIDogY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5wb3NpdGl2ZUludFR5cGU7CiAgICBIQm91bmRzQ2hlY2sgY2hlY2sgPSBuZXcgSEJvdW5kc0NoZWNrKGluZGV4QXJndW1lbnQsIGxlbmd0aCwgYXJyYXksIHR5cGUpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBpbmRleE5vZGUuc291cmNlSW5mb3JtYXRpb247CiAgICBpbmRleE5vZGUuYmxvY2suYWRkQmVmb3JlKGluZGV4Tm9kZSwgY2hlY2spOwogICAgLy8gSWYgdGhlIGluZGV4IGlucHV0IHRvIHRoZSBib3VuZHMgY2hlY2sgd2FzIG5vdCBrbm93biB0byBiZSBhbiBpbnRlZ2VyCiAgICAvLyB0aGVuIHdlIHJlcGxhY2UgaXRzIHVzZXMgd2l0aCB0aGUgYm91bmRzIGNoZWNrLCB3aGljaCBpcyBrbm93biB0byBiZSBhbgogICAgLy8gaW50ZWdlci4gIEhvd2V2ZXIsIGlmIHRoZSBpbnB1dCB3YXMgYWxyZWFkeSBhbiBpbnRlZ2VyIHdlIGRvbid0IGRvIHRoaXMKICAgIC8vIGJlY2F1c2UgcHV0dGluZyBpbiBhIGNoZWNrIGluc3RydWN0aW9uIG1pZ2h0IG9ic2N1cmUgdGhlIHJlYWwgbmF0dXJlIG9mCiAgICAvLyB0aGUgaW5kZXggZWcuIGlmIGl0IGlzIGEgY29uc3RhbnQuICBUaGUgcmFuZ2UgaW5mb3JtYXRpb24gZnJvbSB0aGUKICAgIC8vIEJvdW5kc0NoZWNrIGluc3RydWN0aW9uIGlzIGF0dGFjaGVkIHRvIHRoZSBpbnB1dCBkaXJlY3RseSBieQogICAgLy8gdmlzaXRCb3VuZHNDaGVjayBpbiB0aGUgU3NhVmFsdWVSYW5nZUFuYWx5emVyLgogICAgaWYgKGluZGV4QXJndW1lbnQuaXNJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgaW5kZXhBcmd1bWVudC5yZXBsYWNlQWxsVXNlcnNEb21pbmF0ZWRCeShpbmRleE5vZGUsIGNoZWNrKTsKICAgIH0KICAgIGJvdW5kc0NoZWNrZWQuYWRkKGluZGV4Tm9kZSk7CiAgICByZXR1cm4gY2hlY2s7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5kZXgoSEluZGV4IG5vZGUpIHsKICAgIGlmIChib3VuZHNDaGVja2VkLmNvbnRhaW5zKG5vZGUpKSByZXR1cm47CiAgICBISW5zdHJ1Y3Rpb24gaW5kZXggPSBub2RlLmluZGV4OwogICAgaW5kZXggPSBpbnNlcnRCb3VuZHNDaGVjayhub2RlLCBub2RlLnJlY2VpdmVyLCBpbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5kZXhBc3NpZ24oSEluZGV4QXNzaWduIG5vZGUpIHsKICAgIGlmIChib3VuZHNDaGVja2VkLmNvbnRhaW5zKG5vZGUpKSByZXR1cm47CiAgICBISW5zdHJ1Y3Rpb24gaW5kZXggPSBub2RlLmluZGV4OwogICAgaW5kZXggPSBpbnNlcnRCb3VuZHNDaGVjayhub2RlLCBub2RlLnJlY2VpdmVyLCBpbmRleCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW52b2tlRHluYW1pY01ldGhvZChISW52b2tlRHluYW1pY01ldGhvZCBub2RlKSB7CiAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCA9IG5vZGUuZWxlbWVudDsKICAgIGlmIChub2RlLmlzSW50ZXJjZXB0ZWRDYWxsKSByZXR1cm47CiAgICBpZiAoZWxlbWVudCAhPSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc0FycmF5UmVtb3ZlTGFzdCkgcmV0dXJuOwogICAgaWYgKGJvdW5kc0NoZWNrZWQuY29udGFpbnMobm9kZSkpIHJldHVybjsKICAgIC8vIGAwYCBpcyB0aGUgaW5kZXggd2Ugd2FudCB0byBjaGVjaywgYnV0IHdlIHdhbnQgdG8gcmVwb3J0IGAtMWAsIGFzIGlmIHdlCiAgICAvLyBleGVjdXRlZCBgYVthLmxlbmd0aC0xXWAKICAgIEhCb3VuZHNDaGVjayBjaGVjayA9IGluc2VydEJvdW5kc0NoZWNrKAogICAgICAgIG5vZGUsIG5vZGUucmVjZWl2ZXIsIGdyYXBoLmFkZENvbnN0YW50SW50KDAsIGNsb3NlZFdvcmxkKSk7CiAgICBISW5zdHJ1Y3Rpb24gbWludXNPbmUgPSBncmFwaC5hZGRDb25zdGFudEludCgtMSwgY2xvc2VkV29ybGQpOwogICAgY2hlY2suaW5wdXRzLmFkZChtaW51c09uZSk7CiAgICBtaW51c09uZS51c2VkQnkuYWRkKGNoZWNrKTsKICB9Cn0KCmNsYXNzIFNzYURlYWRDb2RlRWxpbWluYXRvciBleHRlbmRzIEhHcmFwaFZpc2l0b3IgaW1wbGVtZW50cyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhRGVhZENvZGVFbGltaW5hdG9yIjsKCiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwogIGZpbmFsIFNzYU9wdGltaXplclRhc2sgb3B0aW1pemVyOwogIEhHcmFwaCBfZ3JhcGg7CiAgU3NhTGl2ZUJsb2NrQW5hbHl6ZXIgYW5hbHl6ZXI7CiAgTWFwPEhJbnN0cnVjdGlvbiwgYm9vbD4gdHJpdmlhbERlYWRTdG9yZVJlY2VpdmVycyA9CiAgICAgIG5ldyBNYXBsZXQ8SEluc3RydWN0aW9uLCBib29sPigpOwogIGJvb2wgZWxpbWluYXRlZFNpZGVFZmZlY3RzID0gZmFsc2U7CgogIFNzYURlYWRDb2RlRWxpbWluYXRvcih0aGlzLmNsb3NlZFdvcmxkLCB0aGlzLm9wdGltaXplcik7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CgogIEhJbnN0cnVjdGlvbiB6YXBJbnN0cnVjdGlvbkNhY2hlOwogIEhJbnN0cnVjdGlvbiBnZXQgemFwSW5zdHJ1Y3Rpb24gewogICAgaWYgKHphcEluc3RydWN0aW9uQ2FjaGUgPT0gbnVsbCkgewogICAgICAvLyBBIGNvbnN0YW50IHdpdGggbm8gdHlwZSBkb2VzIG5vdCBwb2xsdXRlIHR5cGVzIGF0IHBoaSBub2Rlcy4KICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IGNvbnN0IFVucmVhY2hhYmxlQ29uc3RhbnRWYWx1ZSgpOwogICAgICB6YXBJbnN0cnVjdGlvbkNhY2hlID0gYW5hbHl6ZXIuZ3JhcGguYWRkQ29uc3RhbnQoY29uc3RhbnQsIGNsb3NlZFdvcmxkKTsKICAgIH0KICAgIHJldHVybiB6YXBJbnN0cnVjdGlvbkNhY2hlOwogIH0KCiAgLy8vIFJldHVybnMgdHJ1ZSBvZiBbZm9yZWlnbl0gd2lsbCB0aHJvdyBhbiBub1N1Y2hNZXRob2QgZXJyb3IgaWYKICAvLy8gcmVjZWl2ZXIgaXMgYG51bGxgIGJlZm9yZSBoYXZpbmcgYW55IG90aGVyIHNpZGUtZWZmZWN0cy4KICBib29sIHRlbXBsYXRlVGhyb3dzTlNNb25OdWxsKEhGb3JlaWduQ29kZSBmb3JlaWduLCBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIpIHsKICAgIGlmIChmb3JlaWduLmlucHV0cy5sZW5ndGggPCAxKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoZm9yZWlnbi5pbnB1dHMuZmlyc3QgIT0gcmVjZWl2ZXIpIHJldHVybiBmYWxzZTsKICAgIGlmIChmb3JlaWduLnRocm93QmVoYXZpb3IuaXNOdWxsTlNNR3VhcmQpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGUgbmV4dCB0aHJvd2luZyBpbnN0cnVjdGlvbiB0aGF0IG1heSBoYXZlIHNpZGUKICAvLy8gZWZmZWN0cyBhZnRlciBbaW5zdHJ1Y3Rpb25dLCB0aHJvd3MgW05vU3VjaE1ldGhvZEVycm9yXSBvbiB0aGUKICAvLy8gc2FtZSByZWNlaXZlciBvZiBbaW5zdHJ1Y3Rpb25dLgogIGJvb2wgaGFzRm9sbG93aW5nVGhyb3dpbmdOU00oSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBpbnN0cnVjdGlvbi5nZXREYXJ0UmVjZWl2ZXIoY2xvc2VkV29ybGQpOwogICAgSEluc3RydWN0aW9uIGN1cnJlbnQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgZG8gewogICAgICBpZiAoKGN1cnJlbnQuZ2V0RGFydFJlY2VpdmVyKGNsb3NlZFdvcmxkKSA9PSByZWNlaXZlcikgJiYKICAgICAgICAgIGN1cnJlbnQuY2FuVGhyb3coX2Fic3RyYWN0VmFsdWVEb21haW4pKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgaWYgKGN1cnJlbnQgaXMgSEZvcmVpZ25Db2RlICYmCiAgICAgICAgICB0ZW1wbGF0ZVRocm93c05TTW9uTnVsbChjdXJyZW50LCByZWNlaXZlcikpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoY3VycmVudC5jYW5UaHJvdyhfYWJzdHJhY3RWYWx1ZURvbWFpbikgfHwKICAgICAgICAgIGN1cnJlbnQuc2lkZUVmZmVjdHMuaGFzU2lkZUVmZmVjdHMoKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBISW5zdHJ1Y3Rpb24gbmV4dCA9IGN1cnJlbnQubmV4dDsKICAgICAgaWYgKG5leHQgPT0gbnVsbCkgewogICAgICAgIC8vIFdlIGRvIG5vdCBtZXJnZSBibG9ja3MgaW4gb3VyIFNTQSBncmFwaCwgc28gaWYgdGhpcyBibG9jayBqdXN0IGp1bXBzCiAgICAgICAgLy8gdG8gYSBzaW5nbGUgc3VjY2Vzc29yLCB2aXNpdCB0aGUgc3VjY2Vzc29yLCBhdm9pZGluZyBiYWNrLWVkZ2VzLgogICAgICAgIEhCYXNpY0Jsb2NrIHN1Y2Nlc3NvcjsKICAgICAgICBpZiAoY3VycmVudCBpcyBIR290bykgewogICAgICAgICAgc3VjY2Vzc29yID0gY3VycmVudC5ibG9jay5zdWNjZXNzb3JzLnNpbmdsZTsKICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgaXMgSElmKSB7CiAgICAgICAgICAvLyBXZSBhbHNvIGxlYXZlIEhJZiBub2RlcyBpbiBwbGFjZSB3aGVuIG9uZSBicmFuY2ggaXMgZGVhZC4KICAgICAgICAgIEhJbnN0cnVjdGlvbiBjb25kaXRpb24gPSBjdXJyZW50LmlucHV0cy5maXJzdDsKICAgICAgICAgIGlmIChjb25kaXRpb24gaXMgSENvbnN0YW50KSB7CiAgICAgICAgICAgIGJvb2wgaXNUcnVlID0gY29uZGl0aW9uLmNvbnN0YW50LmlzVHJ1ZTsKICAgICAgICAgICAgc3VjY2Vzc29yID0gaXNUcnVlID8gY3VycmVudC50aGVuQmxvY2sgOiBjdXJyZW50LmVsc2VCbG9jazsKICAgICAgICAgICAgYXNzZXJ0KCFhbmFseXplci5pc0RlYWRCbG9jayhzdWNjZXNzb3IpKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHN1Y2Nlc3NvciAhPSBudWxsICYmIHN1Y2Nlc3Nvci5pZCA+IGN1cnJlbnQuYmxvY2suaWQpIHsKICAgICAgICAgIG5leHQgPSBzdWNjZXNzb3IuZmlyc3Q7CiAgICAgICAgfQogICAgICB9CiAgICAgIGN1cnJlbnQgPSBuZXh0OwogICAgfSB3aGlsZSAoY3VycmVudCAhPSBudWxsKTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgaXNUcml2aWFsRGVhZFN0b3JlUmVjZWl2ZXIoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAvLyBGb3IgYW4gYWxsb2NhdGlvbiwgaWYgYWxsIHRoZSBsb2FkcyBhcmUgZGVhZCAoYXdhaXRpbmcgcmVtb3ZhbCBhZnRlcgogICAgLy8gU3NhTG9hZEVsaW1pbmF0aW9uKSBhbmQgdGhlIG9ubHkgb3RoZXIgdXNlcyBhcmUgc3RvcmVzLCB0aGVuIHRoZQogICAgLy8gYWxsb2NhdGlvbiBkb2VzIG5vdCBlc2NhcGUgd2hpY2ggbWFrZXMgYWxsIHRoZSBzdG9yZXMgZGVhZCB0b28uCiAgICBib29sIGlzRGVhZFVzZShISW5zdHJ1Y3Rpb24gdXNlKSB7CiAgICAgIGlmICh1c2UgaXMgSEZpZWxkU2V0KSB7CiAgICAgICAgLy8gVGhlIHVzZSBtdXN0IGJlIHRoZSByZWNlaXZlci4gIEV2ZW4gaWYgdGhlIHVzZSBpcyBhbHNvIHRoZSBhcmd1bWVudCwKICAgICAgICAvLyBpLmUuICBhLnggPSBhLCB0aGUgc3RvcmUgaXMgc3RpbGwgZGVhZCBpZiBhbGwgb3RoZXIgdXNlcyBhcmUgZGVhZC4KICAgICAgICBpZiAodXNlLmdldERhcnRSZWNlaXZlcihjbG9zZWRXb3JsZCkgPT0gaW5zdHJ1Y3Rpb24pIHJldHVybiB0cnVlOwogICAgICB9IGVsc2UgaWYgKHVzZSBpcyBIRmllbGRHZXQpIHsKICAgICAgICBhc3NlcnQodXNlLmdldERhcnRSZWNlaXZlcihjbG9zZWRXb3JsZCkgPT0gaW5zdHJ1Y3Rpb24pOwogICAgICAgIGlmIChpc0RlYWRDb2RlKHVzZSkpIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24uaXNBbGxvY2F0aW9uKF9hYnN0cmFjdFZhbHVlRG9tYWluKSAmJgogICAgICAgIGluc3RydWN0aW9uLmlzUHVyZShfYWJzdHJhY3RWYWx1ZURvbWFpbikgJiYKICAgICAgICB0cml2aWFsRGVhZFN0b3JlUmVjZWl2ZXJzLnB1dElmQWJzZW50KAogICAgICAgICAgICBpbnN0cnVjdGlvbiwgKCkgPT4gaW5zdHJ1Y3Rpb24udXNlZEJ5LmV2ZXJ5KGlzRGVhZFVzZSkpOwogIH0KCiAgYm9vbCBpc1RyaXZpYWxEZWFkU3RvcmUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gaXMgSEZpZWxkU2V0ICYmCiAgICAgICAgaXNUcml2aWFsRGVhZFN0b3JlUmVjZWl2ZXIoaW5zdHJ1Y3Rpb24uZ2V0RGFydFJlY2VpdmVyKGNsb3NlZFdvcmxkKSk7CiAgfQoKICBib29sIGlzRGVhZENvZGUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBpZiAoIWluc3RydWN0aW9uLnVzZWRCeS5pc0VtcHR5KSByZXR1cm4gZmFsc2U7CiAgICBpZiAoaXNUcml2aWFsRGVhZFN0b3JlKGluc3RydWN0aW9uKSkgcmV0dXJuIHRydWU7CiAgICBpZiAoaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuaGFzU2lkZUVmZmVjdHMoKSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGluc3RydWN0aW9uLmNhblRocm93KF9hYnN0cmFjdFZhbHVlRG9tYWluKSkgewogICAgICBpZiAoaW5zdHJ1Y3Rpb24ub25seVRocm93c05TTSgpICYmIGhhc0ZvbGxvd2luZ1Rocm93aW5nTlNNKGluc3RydWN0aW9uKSkgewogICAgICAgIC8vIFtpbnN0cnVjdGlvbl0gaXMgYSBudWxsIHJlY2lldmVyIGd1YXJkIHRoYXQgaXMgZm9sbG93ZWQgYnkgYW4KICAgICAgICAvLyBpbnN0cnVjdGlvbiB0aGF0IGZhaWxzIHRoZSBzYW1lIHdheSAoYnkgYWNjZXNzaW5nIGEgcHJvcGVydHkgb2YKICAgICAgICAvLyBgbnVsbGAgb3IgYHVuZGVmaW5lZGApLgogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIUGFyYW1ldGVyVmFsdWUpIHJldHVybiBmYWxzZTsKICAgIGlmIChpbnN0cnVjdGlvbiBpcyBITG9jYWxTZXQpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgX2dyYXBoID0gZ3JhcGg7CiAgICBhbmFseXplciA9IG5ldyBTc2FMaXZlQmxvY2tBbmFseXplcihncmFwaCwgY2xvc2VkV29ybGQsIG9wdGltaXplcik7CiAgICBhbmFseXplci5hbmFseXplKCk7CiAgICB2aXNpdFBvc3REb21pbmF0b3JUcmVlKGdyYXBoKTsKICAgIGNsZWFuUGhpcygpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGJvb2wgaXNEZWFkQmxvY2sgPSBhbmFseXplci5pc0RlYWRCbG9jayhibG9jayk7CiAgICBibG9jay5pc0xpdmUgPSAhaXNEZWFkQmxvY2s7CiAgICBzaW1wbGlmeUNvbnRyb2xGbG93KGJsb2NrKTsKICAgIC8vIFN0YXJ0IGZyb20gdGhlIGxhc3Qgbm9uLWNvbnRyb2wgZmxvdyBpbnN0cnVjdGlvbiBpbiB0aGUgYmxvY2suCiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5sYXN0LnByZXZpb3VzOwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgdmFyIHByZXZpb3VzID0gaW5zdHJ1Y3Rpb24ucHJldmlvdXM7CiAgICAgIGlmIChpc0RlYWRCbG9jaykgewogICAgICAgIGVsaW1pbmF0ZWRTaWRlRWZmZWN0cyA9CiAgICAgICAgICAgIGVsaW1pbmF0ZWRTaWRlRWZmZWN0cyB8fCBpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cy5oYXNTaWRlRWZmZWN0cygpOwogICAgICAgIHJlbW92ZVVzZXJzKGluc3RydWN0aW9uKTsKICAgICAgICBibG9jay5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogICAgICB9IGVsc2UgaWYgKGlzRGVhZENvZGUoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICAgICAgfQogICAgICBpbnN0cnVjdGlvbiA9IHByZXZpb3VzOwogICAgfQogICAgYmxvY2suZm9yRWFjaFBoaShzaW1wbGlmeVBoaSk7CiAgICBldmFjdWF0ZVRha2VuQnJhbmNoKGJsb2NrKTsKICB9CgogIHZvaWQgc2ltcGxpZnlQaGkoSFBoaSBwaGkpIHsKICAgIC8vIElmIHRoZSBwaGkgaXMgb2YgdGhlIGZvcm0gYHBoaSh4LCBIVHlwZUtub3duKHgpKWAsIGl0IGRvZXMgbm90IHN0cmVuZ3RoZW4KICAgIC8vIGB4YC4gIFdlIGNhbiByZXBsYWNlIHRoZSBwaGkgd2l0aCBgeGAgdG8gcG90ZW50aWFsbHkgbWFrZSB0aGUgSFR5cGVLbm93bgogICAgLy8gcmVmaW5lbWVudCBub2RlIGRlYWQgYW5kIHBvdGVudGlhbGx5IG1ha2UgYSBISWYgY29udHJvbCBubyBIUGhpcy4KCiAgICAvLyBUT0RPKHNyYSk6IEltcGxlbWVudCB2ZXJzaW9uIG9mIHRoaXMgdGVzdCB0aGF0IHdvcmtzIGZvciBhIHN1YmdyYXBoIG9mCiAgICAvLyBIUGhpIG5vZGVzLgogICAgSEluc3RydWN0aW9uIGJhc2UgPSBudWxsOwogICAgYm9vbCBzZWVuVW5yZWZpbmVkQmFzZSA9IGZhbHNlOwogICAgZm9yIChISW5zdHJ1Y3Rpb24gaW5wdXQgaW4gcGhpLmlucHV0cykgewogICAgICBISW5zdHJ1Y3Rpb24gdmFsdWUgPSBpbnB1dDsKICAgICAgd2hpbGUgKHZhbHVlIGlzIEhUeXBlS25vd24pIHsKICAgICAgICBIVHlwZUtub3duIHJlZmluZW1lbnQgPSB2YWx1ZTsKICAgICAgICB2YWx1ZSA9IHJlZmluZW1lbnQuY2hlY2tlZElucHV0OwogICAgICB9CiAgICAgIGlmICh2YWx1ZSA9PSBpbnB1dCkgc2VlblVucmVmaW5lZEJhc2UgPSB0cnVlOwogICAgICBiYXNlID8/PSB2YWx1ZTsKICAgICAgaWYgKGJhc2UgIT0gdmFsdWUpIHJldHVybjsKICAgIH0KCiAgICBpZiAoc2VlblVucmVmaW5lZEJhc2UpIHsKICAgICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBwaGkuYmxvY2s7CiAgICAgIGJsb2NrLnJld3JpdGUocGhpLCBiYXNlKTsKICAgICAgYmxvY2sucmVtb3ZlUGhpKHBoaSk7CiAgICB9CiAgfQoKICB2b2lkIHNpbXBsaWZ5Q29udHJvbEZsb3coSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIEhDb250cm9sRmxvdyBpbnN0cnVjdGlvbiA9IGJsb2NrLmxhc3Q7CiAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSElmKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBjb25kaXRpb24gPSBpbnN0cnVjdGlvbi5jb25kaXRpb247CiAgICAgIGlmIChjb25kaXRpb24uaXNDb25zdGFudCgpKSByZXR1cm47CgogICAgICAvLyBXZSB3YW50IHRvIHJlbW92ZSBhbiBpZi10aGVuLWVsc2UgZGlhbW9uZCB3aGVuIHRoZSB0aGVuLSBhbmQgZWxzZS0KICAgICAgLy8gYnJhbmNoZXMgYXJlIGVtcHR5IGFuZCB0aGUgY29uZGl0aW9uIGRvZXMgbm90IGNvbnRyb2wgYSBIUGhpLiBXZSBjYW5ub3QKICAgICAgLy8gY2hhbmdlIHRoZSBDRkcgc3RydWN0dXJlIHNvIHdlIHJlcGxhY2UgdGhlIEhJZiBjb25kaXRpb24gd2l0aCBhCiAgICAgIC8vIGNvbnN0YW50LiBUaGlzIG1heSBsZWF2ZSB0aGUgb3JpZ2luYWwgY29uZGl0aW9uIHVudXNlZC4gaS5lLiBhCiAgICAgIC8vIGNhbmRpZGF0ZSBmb3IgYmVpbmcgZGVhZCBjb2RlLgoKICAgICAgTGlzdDxIQmFzaWNCbG9jaz4gZG9taW5hdGVkID0gYmxvY2suZG9taW5hdGVkQmxvY2tzOwogICAgICAvLyBEaWFtb25kLWxpa2UgY29udHJvbCBmbG93IGRvbWluYXRlcyB0aGUgdGhlbi0sIGVsc2UtIGFuZCBqb2luLSBibG9ja3MuCiAgICAgIGlmIChkb21pbmF0ZWQubGVuZ3RoICE9IDMpIHJldHVybjsKICAgICAgSEJhc2ljQmxvY2sgam9pbiA9IGRvbWluYXRlZC5sYXN0OwogICAgICBpZiAoIWpvaW4ucGhpcy5pc0VtcHR5KSByZXR1cm47IC8vIGNvbmRpdGlvbiBjb250cm9scyBhIHBoaS4KICAgICAgLy8gSWdub3JlIGV4aXQgYmxvY2sgLSB1c3VhbGx5IHRoZSBqb2luIGluIGBpZiAoLi4uKSByZXR1cm4gLi4uYAogICAgICBpZiAoam9pbi5pc0V4aXRCbG9jaygpKSByZXR1cm47CgogICAgICBpbnQgdGhlblNpemUgPSBtZWFzdXJlRW1wdHlJbnRlcnZhbChpbnN0cnVjdGlvbi50aGVuQmxvY2ssIGpvaW4pOwogICAgICBpZiAodGhlblNpemUgPT0gbnVsbCkgcmV0dXJuOwogICAgICBpbnQgZWxzZVNpemUgPSBtZWFzdXJlRW1wdHlJbnRlcnZhbChpbnN0cnVjdGlvbi5lbHNlQmxvY2ssIGpvaW4pOwogICAgICBpZiAoZWxzZVNpemUgPT0gbnVsbCkgcmV0dXJuOwoKICAgICAgLy8gUGljayB0aGUgJ2xpdmUnIGJyYW5jaCB0byBiZSB0aGUgc21hbGxlc3Qgc3ViZ3JhcGguCiAgICAgIGJvb2wgdmFsdWUgPSB0aGVuU2l6ZSA8PSBlbHNlU2l6ZTsKICAgICAgSEluc3RydWN0aW9uIG5ld0NvbmRpdGlvbiA9IF9ncmFwaC5hZGRDb25zdGFudEJvb2wodmFsdWUsIGNsb3NlZFdvcmxkKTsKICAgICAgaW5zdHJ1Y3Rpb24uaW5wdXRzWzBdID0gbmV3Q29uZGl0aW9uOwogICAgICBjb25kaXRpb24udXNlZEJ5LnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICAgIG5ld0NvbmRpdGlvbi51c2VkQnkuYWRkKGluc3RydWN0aW9uKTsKICAgIH0KICB9CgogIC8vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgYmxvY2tzIGZyb20gW3N0YXJ0XSB1cCB0byBidXQgbm90IGluY2x1ZGluZyBbZW5kXS4KICAvLy8gUmV0dXJucyBgbnVsbGAgaWYgYW55IG9mIHRoZSBibG9ja3MgaXMgbm9uLWVtcHR5IChvdGhlciB0aGFuIGNvbnRyb2wKICAvLy8gZmxvdykuICBSZXR1cm5zIGBudWxsYCBpZiB0aGVyZSBpcyBhbiBleGl0IGZyb20gdGhlIHJlZ2lvbiBvdGhlciB0aGFuCiAgLy8vIFtlbmRdIG9yIHZpYSBjb250cm9sIGZsb3cgb3RoZXIgdGhhbiBIR290byBhbmQgSElmLgogIGludCBtZWFzdXJlRW1wdHlJbnRlcnZhbChIQmFzaWNCbG9jayBzdGFydCwgSEJhc2ljQmxvY2sgZW5kKSB7CiAgICBpZiAoc3RhcnQuZmlyc3QgIT0gc3RhcnQubGFzdCkgcmV0dXJuIG51bGw7IC8vIHN0YXJ0IGlzIG5vdCBlbXB0eS4KICAgIC8vIERvIGEgc2ltcGxlIHNpbmdsZS1ibG9jayByZWdpb24gdGVzdCBmaXJzdC4KICAgIGlmIChzdGFydC5sYXN0IGlzIEhHb3RvICYmCiAgICAgICAgc3RhcnQuc3VjY2Vzc29ycy5sZW5ndGggPT0gMSAmJgogICAgICAgIHN0YXJ0LnN1Y2Nlc3NvcnMuc2luZ2xlID09IGVuZCkgewogICAgICByZXR1cm4gMTsKICAgIH0KICAgIC8vIFRPRE8oc3JhKTogSW1wbGVtZW50IGZ1bGxlciB0ZXN0LgogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gSWYgW2Jsb2NrXSBpcyBhbiBhbHdheXMtdGFrZW4gYnJhbmNoLCBtb3ZlIHRoZSBjb2RlIGZyb20gdGhlIHRha2VuIGJyYW5jaAogIC8vLyBpbnRvIFtibG9ja10uIFRoaXMgaGFzIHRoZSBlZmZlY3Qgb2YgbWFraW5nIHRoZSBpbnN0cnVjdGlvbnMgYXZhaWxhYmxlIGZvcgogIC8vLyBmdXJ0aGVyIG9wdGltaXphdGlvbnMgYnkgbW92aW5nIHRoZW0gdG8gYSBwb3NpdGlvbiB0aGF0IGRvbWluYXRlcyB0aGUgam9pbgogIC8vLyBwb2ludCBvZiB0aGUgaWYtdGhlbi1lbHNlLgogIC8vIFRPRE8oMjk0NzUpOiBEZWxldGUgZGVhZCBibG9ja3MgaW5zdGVhZC4KICB2b2lkIGV2YWN1YXRlVGFrZW5CcmFuY2goSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGlmICghYmxvY2suaXNMaXZlKSByZXR1cm47CiAgICBIQ29udHJvbEZsb3cgYnJhbmNoID0gYmxvY2subGFzdDsKICAgIGlmIChicmFuY2ggaXMgSElmKSB7CiAgICAgIGlmIChicmFuY2gudGhlbkJsb2NrLmlzTGl2ZSA9PSBicmFuY2guZWxzZUJsb2NrLmlzTGl2ZSkgcmV0dXJuOwogICAgICBhc3NlcnQoYnJhbmNoLmNvbmRpdGlvbi5pc0NvbnN0YW50KCkpOwogICAgICBIQmFzaWNCbG9jayB0YXJnZXQgPQogICAgICAgICAgYnJhbmNoLnRoZW5CbG9jay5pc0xpdmUgPyBicmFuY2gudGhlbkJsb2NrIDogYnJhbmNoLmVsc2VCbG9jazsKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gdGFyZ2V0LmZpcnN0OwogICAgICB3aGlsZSAoIWluc3RydWN0aW9uLmlzQ29udHJvbEZsb3coKSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBuZXh0ID0gaW5zdHJ1Y3Rpb24ubmV4dDsKICAgICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSFR5cGVLbm93biAmJiBpbnN0cnVjdGlvbi5pc1Bpbm5lZCkgYnJlYWs7CiAgICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2suZGV0YWNoKGluc3RydWN0aW9uKTsKICAgICAgICBibG9jay5tb3ZlQXRFeGl0KGluc3RydWN0aW9uKTsKICAgICAgICBpbnN0cnVjdGlvbiA9IG5leHQ7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgY2xlYW5QaGlzKCkgewogICAgTDoKICAgIGZvciAoSEJhc2ljQmxvY2sgYmxvY2sgaW4gX2dyYXBoLmJsb2NrcykgewogICAgICBMaXN0PEhCYXNpY0Jsb2NrPiBwcmVkZWNlc3NvcnMgPSBibG9jay5wcmVkZWNlc3NvcnM7CiAgICAgIC8vIFphcCBhbGwgaW5wdXRzIHRvIHBoaXMgdGhhdCBjb3JyZXNwb25kIHRvIGRlYWQgYmxvY2tzLgogICAgICBibG9jay5mb3JFYWNoUGhpKChIUGhpIHBoaSkgewogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGhpLmlucHV0cy5sZW5ndGg7ICsraSkgewogICAgICAgICAgaWYgKCFwcmVkZWNlc3NvcnNbaV0uaXNMaXZlICYmIHBoaS5pbnB1dHNbaV0gIT0gemFwSW5zdHJ1Y3Rpb24pIHsKICAgICAgICAgICAgcmVwbGFjZUlucHV0KGksIHBoaSwgemFwSW5zdHJ1Y3Rpb24pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmIChwcmVkZWNlc3NvcnMubGVuZ3RoIDwgMikgY29udGludWUgTDsKICAgICAgLy8gRmluZCB0aGUgaW5kZXggb2YgdGhlIHNpbmdsZSBsaXZlIHByZWRlY2Vzc29yIGlmIGl0IGV4aXN0cy4KICAgICAgaW50IGluZGV4T2ZMaXZlID0gLTE7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXS5pc0xpdmUpIHsKICAgICAgICAgIGlmIChpbmRleE9mTGl2ZSA+PSAwKSBjb250aW51ZSBMOwogICAgICAgICAgaW5kZXhPZkxpdmUgPSBpOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyBSdW4gdGhyb3VnaCB0aGUgcGhpcyBvZiB0aGUgYmxvY2sgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHRoZWlyIGlucHV0CiAgICAgIC8vIHRoYXQgY29tZXMgZnJvbSB0aGUgb25seSBsaXZlIHByZWRlY2Vzc29yIGlmIHRoYXQgZG9taW5hdGVzIHRoZSBwaGkuCiAgICAgIC8vCiAgICAgIC8vIFRPRE8oc3JhKTogSWYgdGhlIGlucHV0IGlzIGRpcmVjdGx5IGluIHRoZSBvbmx5IGxpdmUgcHJlZGVjZXNzb3IsIGl0CiAgICAgIC8vIG1pZ2h0IGJlIHBvc3NpYmxlIHRvIG1vdmUgaXQgaW50byBbYmxvY2tdIChlLmcuIGFsbCBpdHMgaW5wdXRzIGFyZQogICAgICAvLyBkb21pbmF0aW5nLikKICAgICAgYmxvY2suZm9yRWFjaFBoaSgoSFBoaSBwaGkpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gcmVwbGFjZW1lbnQgPQogICAgICAgICAgICAoaW5kZXhPZkxpdmUgPj0gMCkgPyBwaGkuaW5wdXRzW2luZGV4T2ZMaXZlXSA6IHphcEluc3RydWN0aW9uOwogICAgICAgIGlmIChyZXBsYWNlbWVudC5kb21pbmF0ZXMocGhpKSkgewogICAgICAgICAgYmxvY2sucmV3cml0ZShwaGksIHJlcGxhY2VtZW50KTsKICAgICAgICAgIGJsb2NrLnJlbW92ZVBoaShwaGkpOwogICAgICAgICAgaWYgKHJlcGxhY2VtZW50LnNvdXJjZUVsZW1lbnQgPT0gbnVsbCAmJgogICAgICAgICAgICAgIHBoaS5zb3VyY2VFbGVtZW50ICE9IG51bGwgJiYKICAgICAgICAgICAgICByZXBsYWNlbWVudCBpcyEgSFRoaXMpIHsKICAgICAgICAgICAgcmVwbGFjZW1lbnQuc291cmNlRWxlbWVudCA9IHBoaS5zb3VyY2VFbGVtZW50OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQoKICB2b2lkIHJlcGxhY2VJbnB1dChpbnQgaSwgSEluc3RydWN0aW9uIGZyb20sIEhJbnN0cnVjdGlvbiBieSkgewogICAgZnJvbS5pbnB1dHNbaV0udXNlZEJ5LnJlbW92ZShmcm9tKTsKICAgIGZyb20uaW5wdXRzW2ldID0gYnk7CiAgICBieS51c2VkQnkuYWRkKGZyb20pOwogIH0KCiAgdm9pZCByZW1vdmVVc2VycyhISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGluc3RydWN0aW9uLnVzZWRCeS5mb3JFYWNoKCh1c2VyKSB7CiAgICAgIHJlbW92ZUlucHV0KHVzZXIsIGluc3RydWN0aW9uKTsKICAgIH0pOwogICAgaW5zdHJ1Y3Rpb24udXNlZEJ5LmNsZWFyKCk7CiAgfQoKICB2b2lkIHJlbW92ZUlucHV0KEhJbnN0cnVjdGlvbiB1c2VyLCBISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSB1c2VyLmlucHV0czsKICAgIGZvciAoaW50IGkgPSAwLCBsZW5ndGggPSBpbnB1dHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGlucHV0ID09IGlucHV0c1tpXSkgewogICAgICAgIHVzZXIuaW5wdXRzW2ldID0gemFwSW5zdHJ1Y3Rpb247CiAgICAgICAgemFwSW5zdHJ1Y3Rpb24udXNlZEJ5LmFkZCh1c2VyKTsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgU3NhTGl2ZUJsb2NrQW5hbHl6ZXIgZXh0ZW5kcyBIQmFzZVZpc2l0b3IgewogIGZpbmFsIEhHcmFwaCBncmFwaDsKICBmaW5hbCBTZXQ8SEJhc2ljQmxvY2s+IGxpdmUgPSBuZXcgU2V0PEhCYXNpY0Jsb2NrPigpOwogIGZpbmFsIExpc3Q8SEJhc2ljQmxvY2s+IHdvcmtsaXN0ID0gPEhCYXNpY0Jsb2NrPltdOwogIGZpbmFsIFNzYU9wdGltaXplclRhc2sgb3B0aW1pemVyOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKCiAgU3NhTGl2ZUJsb2NrQW5hbHl6ZXIodGhpcy5ncmFwaCwgdGhpcy5jbG9zZWRXb3JsZCwgdGhpcy5vcHRpbWl6ZXIpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBNYXA8SEluc3RydWN0aW9uLCBSYW5nZT4gZ2V0IHJhbmdlcyA9PiBvcHRpbWl6ZXIucmFuZ2VzOwoKICBib29sIGlzRGVhZEJsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSA9PiAhbGl2ZS5jb250YWlucyhibG9jayk7CgogIHZvaWQgYW5hbHl6ZSgpIHsKICAgIG1hcmtCbG9ja0xpdmUoZ3JhcGguZW50cnkpOwogICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KSB7CiAgICAgIEhCYXNpY0Jsb2NrIGxpdmUgPSB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgIGxpdmUubGFzdC5hY2NlcHQodGhpcyk7CiAgICB9CiAgfQoKICB2b2lkIG1hcmtCbG9ja0xpdmUoSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGlmICghbGl2ZS5jb250YWlucyhibG9jaykpIHsKICAgICAgd29ya2xpc3QuYWRkKGJsb2NrKTsKICAgICAgbGl2ZS5hZGQoYmxvY2spOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnRyb2xGbG93KEhDb250cm9sRmxvdyBpbnN0cnVjdGlvbikgewogICAgaW5zdHJ1Y3Rpb24uYmxvY2suc3VjY2Vzc29ycy5mb3JFYWNoKG1hcmtCbG9ja0xpdmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdElmKEhJZiBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGNvbmRpdGlvbiA9IGluc3RydWN0aW9uLmNvbmRpdGlvbjsKICAgIGlmIChjb25kaXRpb24uaXNDb25zdGFudCgpKSB7CiAgICAgIGlmIChjb25kaXRpb24uaXNDb25zdGFudFRydWUoKSkgewogICAgICAgIG1hcmtCbG9ja0xpdmUoaW5zdHJ1Y3Rpb24udGhlbkJsb2NrKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtYXJrQmxvY2tMaXZlKGluc3RydWN0aW9uLmVsc2VCbG9jayk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZpc2l0Q29udHJvbEZsb3coaW5zdHJ1Y3Rpb24pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN3aXRjaChIU3dpdGNoIG5vZGUpIHsKICAgIGlmIChub2RlLmV4cHJlc3Npb24uaXNJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIFJhbmdlIHN3aXRjaFJhbmdlID0gcmFuZ2VzW25vZGUuZXhwcmVzc2lvbl07CiAgICAgIGlmIChzd2l0Y2hSYW5nZSAhPSBudWxsICYmCiAgICAgICAgICBzd2l0Y2hSYW5nZS5sb3dlciBpcyBJbnRWYWx1ZSAmJgogICAgICAgICAgc3dpdGNoUmFuZ2UudXBwZXIgaXMgSW50VmFsdWUpIHsKICAgICAgICBJbnRWYWx1ZSBsb3dlclZhbHVlID0gc3dpdGNoUmFuZ2UubG93ZXI7CiAgICAgICAgSW50VmFsdWUgdXBwZXJWYWx1ZSA9IHN3aXRjaFJhbmdlLnVwcGVyOwogICAgICAgIEJpZ0ludCBsb3dlciA9IGxvd2VyVmFsdWUudmFsdWU7CiAgICAgICAgQmlnSW50IHVwcGVyID0gdXBwZXJWYWx1ZS52YWx1ZTsKICAgICAgICBTZXQ8QmlnSW50PiBsaXZlTGFiZWxzID0gbmV3IFNldDxCaWdJbnQ+KCk7CiAgICAgICAgZm9yIChpbnQgcG9zID0gMTsgcG9zIDwgbm9kZS5pbnB1dHMubGVuZ3RoOyBwb3MrKykgewogICAgICAgICAgSENvbnN0YW50IGlucHV0ID0gbm9kZS5pbnB1dHNbcG9zXTsKICAgICAgICAgIGlmICghaW5wdXQuaXNDb25zdGFudEludGVnZXIoKSkgY29udGludWU7CiAgICAgICAgICBJbnRDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gaW5wdXQuY29uc3RhbnQ7CiAgICAgICAgICBCaWdJbnQgbGFiZWwgPSBjb25zdGFudC5pbnRWYWx1ZTsKICAgICAgICAgIGlmICghbGl2ZUxhYmVscy5jb250YWlucyhsYWJlbCkgJiYgbGFiZWwgPD0gdXBwZXIgJiYgbGFiZWwgPj0gbG93ZXIpIHsKICAgICAgICAgICAgbWFya0Jsb2NrTGl2ZShub2RlLmJsb2NrLnN1Y2Nlc3NvcnNbcG9zIC0gMV0pOwogICAgICAgICAgICBsaXZlTGFiZWxzLmFkZChsYWJlbCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChuZXcgQmlnSW50LmZyb20obGl2ZUxhYmVscy5sZW5ndGgpICE9IHVwcGVyIC0gbG93ZXIgKyBCaWdJbnQub25lKSB7CiAgICAgICAgICBtYXJrQmxvY2tMaXZlKG5vZGUuZGVmYXVsdFRhcmdldCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgdmlzaXRDb250cm9sRmxvdyhub2RlKTsKICB9Cn0KCmNsYXNzIFNzYURlYWRQaGlFbGltaW5hdG9yIGltcGxlbWVudHMgT3B0aW1pemF0aW9uUGhhc2UgewogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gIlNzYURlYWRQaGlFbGltaW5hdG9yIjsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgZmluYWwgTGlzdDxIUGhpPiB3b3JrbGlzdCA9IDxIUGhpPltdOwogICAgLy8gQSBzZXQgdG8ga2VlcCB0cmFjayBvZiB0aGUgbGl2ZSBwaGlzIHRoYXQgd2UgZm91bmQuCiAgICBmaW5hbCBTZXQ8SFBoaT4gbGl2ZVBoaXMgPSBuZXcgU2V0PEhQaGk+KCk7CgogICAgLy8gQWRkIHRvIHRoZSB3b3JrbGlzdCBhbGwgbGl2ZSBwaGlzOiBwaGlzIHJlZmVyZW5jZWQgYnkgbm9uLXBoaQogICAgLy8gaW5zdHJ1Y3Rpb25zLgogICAgZm9yIChmaW5hbCBibG9jayBpbiBncmFwaC5ibG9ja3MpIHsKICAgICAgYmxvY2suZm9yRWFjaFBoaSgoSFBoaSBwaGkpIHsKICAgICAgICBmb3IgKGZpbmFsIHVzZXIgaW4gcGhpLnVzZWRCeSkgewogICAgICAgICAgaWYgKHVzZXIgaXMhIEhQaGkpIHsKICAgICAgICAgICAgd29ya2xpc3QuYWRkKHBoaSk7CiAgICAgICAgICAgIGxpdmVQaGlzLmFkZChwaGkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgfQoKICAgIC8vIFByb2Nlc3MgdGhlIHdvcmtsaXN0IGJ5IHByb3BhZ2F0aW5nIGxpdmVuZXNzIHRvIHBoaSBpbnB1dHMuCiAgICB3aGlsZSAoIXdvcmtsaXN0LmlzRW1wdHkpIHsKICAgICAgSFBoaSBwaGkgPSB3b3JrbGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgIGZvciAoZmluYWwgaW5wdXQgaW4gcGhpLmlucHV0cykgewogICAgICAgIGlmIChpbnB1dCBpcyBIUGhpICYmICFsaXZlUGhpcy5jb250YWlucyhpbnB1dCkpIHsKICAgICAgICAgIHdvcmtsaXN0LmFkZChpbnB1dCk7CiAgICAgICAgICBsaXZlUGhpcy5hZGQoaW5wdXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIC8vIFJlbW92ZSBwaGlzIHRoYXQgYXJlIG5vdCBsaXZlLgogICAgLy8gVHJhdmVyc2UgaW4gcmV2ZXJzZSBvcmRlciB0byByZW1vdmUgcGhpcyB3aXRoIG5vIHVzZXMgYmVmb3JlIHRoZQogICAgLy8gcGhpcyB0aGF0IHRoZXkgbWlnaHQgdXNlLgogICAgLy8gTk9USUNFOiBEb2Vzbid0IGhhbmRsZSBjaXJjdWxhciByZWZlcmVuY2VzLCBidXQgd2UgZG9uJ3QgY3VycmVudGx5CiAgICAvLyBjcmVhdGUgYW55LgogICAgTGlzdDxIQmFzaWNCbG9jaz4gYmxvY2tzID0gZ3JhcGguYmxvY2tzOwogICAgZm9yIChpbnQgaSA9IGJsb2Nrcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICBIQmFzaWNCbG9jayBibG9jayA9IGJsb2Nrc1tpXTsKICAgICAgSFBoaSBjdXJyZW50ID0gYmxvY2sucGhpcy5maXJzdDsKICAgICAgSFBoaSBuZXh0ID0gbnVsbDsKICAgICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCkgewogICAgICAgIG5leHQgPSBjdXJyZW50Lm5leHQ7CiAgICAgICAgaWYgKCFsaXZlUGhpcy5jb250YWlucyhjdXJyZW50KQogICAgICAgICAgICAvLyBUT0RPKGFoZSk6IE5vdCBzdXJlIHRoZSBmb2xsb3dpbmcgaXMgY29ycmVjdC4KICAgICAgICAgICAgJiYKICAgICAgICAgICAgY3VycmVudC51c2VkQnkuaXNFbXB0eSkgewogICAgICAgICAgYmxvY2sucmVtb3ZlUGhpKGN1cnJlbnQpOwogICAgICAgIH0KICAgICAgICBjdXJyZW50ID0gbmV4dDsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgU3NhUmVkdW5kYW50UGhpRWxpbWluYXRvciBpbXBsZW1lbnRzIE9wdGltaXphdGlvblBoYXNlIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZSA9ICJTc2FSZWR1bmRhbnRQaGlFbGltaW5hdG9yIjsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgZmluYWwgTGlzdDxIUGhpPiB3b3JrbGlzdCA9IDxIUGhpPltdOwoKICAgIC8vIEFkZCBhbGwgcGhpcyBpbiB0aGUgd29ya2xpc3QuCiAgICBmb3IgKGZpbmFsIGJsb2NrIGluIGdyYXBoLmJsb2NrcykgewogICAgICBibG9jay5mb3JFYWNoUGhpKChIUGhpIHBoaSkgPT4gd29ya2xpc3QuYWRkKHBoaSkpOwogICAgfQoKICAgIHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSkgewogICAgICBIUGhpIHBoaSA9IHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKCiAgICAgIC8vIElmIHRoZSBwaGkgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQsIGNvbnRpbnVlLgogICAgICBpZiAoIXBoaS5pc0luQmFzaWNCbG9jaygpKSBjb250aW51ZTsKCiAgICAgIC8vIEZpbmQgaWYgdGhlIGlucHV0cyBvZiB0aGUgcGhpIGFyZSB0aGUgc2FtZSBpbnN0cnVjdGlvbi4KICAgICAgLy8gVGhlIGJ1aWxkZXIgZW5zdXJlcyB0aGF0IHBoaS5pbnB1dHNbMF0gY2Fubm90IGJlIHRoZSBwaGkKICAgICAgLy8gaXRzZWxmLgogICAgICBhc3NlcnQoIWlkZW50aWNhbChwaGkuaW5wdXRzWzBdLCBwaGkpKTsKICAgICAgSEluc3RydWN0aW9uIGNhbmRpZGF0ZSA9IHBoaS5pbnB1dHNbMF07CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcGhpLmlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IHBoaS5pbnB1dHNbaV07CiAgICAgICAgLy8gSWYgdGhlIGlucHV0IGlzIHRoZSBwaGksIHRoZSBwaGkgaXMgc3RpbGwgY2FuZGlkYXRlIGZvcgogICAgICAgIC8vIGVsaW1pbmF0aW9uLgogICAgICAgIGlmICghaWRlbnRpY2FsKGlucHV0LCBjYW5kaWRhdGUpICYmICFpZGVudGljYWwoaW5wdXQsIHBoaSkpIHsKICAgICAgICAgIGNhbmRpZGF0ZSA9IG51bGw7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIElmIHRoZSBpbnB1dHMgYXJlIG5vdCB0aGUgc2FtZSwgY29udGludWUuCiAgICAgIGlmIChjYW5kaWRhdGUgPT0gbnVsbCkgY29udGludWU7CgogICAgICAvLyBCZWNhdXNlIHdlJ3JlIHVwZGF0aW5nIHRoZSB1c2VycyBvZiB0aGlzIHBoaSwgd2UgbWF5IGhhdmUgbmV3CiAgICAgIC8vIHBoaXMgY2FuZGlkYXRlIGZvciBlbGltaW5hdGlvbi4gQWRkIHBoaXMgdGhhdCB1c2VkIHRoaXMgcGhpCiAgICAgIC8vIHRvIHRoZSB3b3JrbGlzdC4KICAgICAgZm9yIChmaW5hbCB1c2VyIGluIHBoaS51c2VkQnkpIHsKICAgICAgICBpZiAodXNlciBpcyBIUGhpKSB3b3JrbGlzdC5hZGQodXNlcik7CiAgICAgIH0KICAgICAgcGhpLmJsb2NrLnJld3JpdGUocGhpLCBjYW5kaWRhdGUpOwogICAgICBwaGkuYmxvY2sucmVtb3ZlUGhpKHBoaSk7CiAgICAgIGlmIChjYW5kaWRhdGUuc291cmNlRWxlbWVudCA9PSBudWxsICYmCiAgICAgICAgICBwaGkuc291cmNlRWxlbWVudCAhPSBudWxsICYmCiAgICAgICAgICBjYW5kaWRhdGUgaXMhIEhUaGlzKSB7CiAgICAgICAgY2FuZGlkYXRlLnNvdXJjZUVsZW1lbnQgPSBwaGkuc291cmNlRWxlbWVudDsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgR3ZuV29ya0l0ZW0gewogIGZpbmFsIEhCYXNpY0Jsb2NrIGJsb2NrOwogIGZpbmFsIFZhbHVlU2V0IHZhbHVlU2V0OwogIEd2bldvcmtJdGVtKHRoaXMuYmxvY2ssIHRoaXMudmFsdWVTZXQpOwp9CgpjbGFzcyBTc2FHbG9iYWxWYWx1ZU51bWJlcmVyIGltcGxlbWVudHMgT3B0aW1pemF0aW9uUGhhc2UgewogIGZpbmFsIEFic3RyYWN0VmFsdWVEb21haW4gX2Fic3RyYWN0VmFsdWVEb21haW47CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhR2xvYmFsVmFsdWVOdW1iZXJlciI7CiAgZmluYWwgU2V0PGludD4gdmlzaXRlZDsKCiAgTGlzdDxpbnQ+IGJsb2NrQ2hhbmdlc0ZsYWdzOwogIExpc3Q8aW50PiBsb29wQ2hhbmdlc0ZsYWdzOwoKICBTc2FHbG9iYWxWYWx1ZU51bWJlcmVyKHRoaXMuX2Fic3RyYWN0VmFsdWVEb21haW4pIDogdmlzaXRlZCA9IG5ldyBTZXQ8aW50PigpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICBjb21wdXRlQ2hhbmdlc0ZsYWdzKGdyYXBoKTsKICAgIG1vdmVMb29wSW52YXJpYW50Q29kZShncmFwaCk7CiAgICBMaXN0PEd2bldvcmtJdGVtPiB3b3JrUXVldWUgPSA8R3ZuV29ya0l0ZW0+WwogICAgICBuZXcgR3ZuV29ya0l0ZW0oZ3JhcGguZW50cnksIG5ldyBWYWx1ZVNldCgpKQogICAgXTsKICAgIGRvIHsKICAgICAgR3ZuV29ya0l0ZW0gaXRlbSA9IHdvcmtRdWV1ZS5yZW1vdmVMYXN0KCk7CiAgICAgIHZpc2l0QmFzaWNCbG9jayhpdGVtLmJsb2NrLCBpdGVtLnZhbHVlU2V0LCB3b3JrUXVldWUpOwogICAgfSB3aGlsZSAoIXdvcmtRdWV1ZS5pc0VtcHR5KTsKICB9CgogIHZvaWQgbW92ZUxvb3BJbnZhcmlhbnRDb2RlKEhHcmFwaCBncmFwaCkgewogICAgZm9yIChpbnQgaSA9IGdyYXBoLmJsb2Nrcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICBIQmFzaWNCbG9jayBibG9jayA9IGdyYXBoLmJsb2Nrc1tpXTsKICAgICAgaWYgKGJsb2NrLmlzTG9vcEhlYWRlcigpKSB7CiAgICAgICAgaW50IGNoYW5nZXNGbGFncyA9IGxvb3BDaGFuZ2VzRmxhZ3NbYmxvY2suaWRdOwogICAgICAgIEhMb29wSW5mb3JtYXRpb24gaW5mbyA9IGJsb2NrLmxvb3BJbmZvcm1hdGlvbjsKICAgICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGJsb2NrcyBvZiB0aGlzIGxvb3AuIE5vdGUgdGhhdCBibG9ja3MgaW4KICAgICAgICAvLyBpbm5lciBsb29wcyBhcmUgbm90IHZpc2l0ZWQgaGVyZSwgYnV0IHdlIGtub3cgdGhleQogICAgICAgIC8vIHdlcmUgdmlzaXRlZCBiZWZvcmUgYmVjYXVzZSB3ZSBhcmUgaXRlcmF0aW5nIGluIHBvc3Qtb3JkZXIuCiAgICAgICAgLy8gU28gaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIEdWTidlZCBpbiBhbiBpbm5lciBsb29wIGFyZSBpbiB0aGVpcgogICAgICAgIC8vIGxvb3AgZW50cnksIGFuZCBbaW5mby5ibG9ja3NdIGNvbnRhaW5zIHRoaXMgbG9vcCBlbnRyeS4KICAgICAgICBtb3ZlTG9vcEludmFyaWFudENvZGVGcm9tQmxvY2soYmxvY2ssIGJsb2NrLCBjaGFuZ2VzRmxhZ3MpOwogICAgICAgIGZvciAoSEJhc2ljQmxvY2sgb3RoZXIgaW4gaW5mby5ibG9ja3MpIHsKICAgICAgICAgIG1vdmVMb29wSW52YXJpYW50Q29kZUZyb21CbG9jayhvdGhlciwgYmxvY2ssIGNoYW5nZXNGbGFncyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIG1vdmVMb29wSW52YXJpYW50Q29kZUZyb21CbG9jaygKICAgICAgSEJhc2ljQmxvY2sgYmxvY2ssIEhCYXNpY0Jsb2NrIGxvb3BIZWFkZXIsIGludCBjaGFuZ2VzRmxhZ3MpIHsKICAgIGFzc2VydChibG9jay5wYXJlbnRMb29wSGVhZGVyID09IGxvb3BIZWFkZXIgfHwgYmxvY2sgPT0gbG9vcEhlYWRlcik7CiAgICBIQmFzaWNCbG9jayBwcmVoZWFkZXIgPSBsb29wSGVhZGVyLnByZWRlY2Vzc29yc1swXTsKICAgIGludCBkZXBlbmRzRmxhZ3MgPSBTaWRlRWZmZWN0cy5jb21wdXRlRGVwZW5kc09uRmxhZ3MoY2hhbmdlc0ZsYWdzKTsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmZpcnN0OwogICAgYm9vbCBpc0xvb3BBbHdheXNUYWtlbigpIHsKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gbG9vcEhlYWRlci5sYXN0OwogICAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24gaXMgSEdvdG8gfHwgaW5zdHJ1Y3Rpb24gaXMgSExvb3BCcmFuY2gpOwogICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24gaXMgSEdvdG8gfHwgaW5zdHJ1Y3Rpb24uaW5wdXRzWzBdLmlzQ29uc3RhbnRUcnVlKCk7CiAgICB9CgogICAgYm9vbCBmaXJzdEluc3RydWN0aW9uSW5Mb29wID0gYmxvY2sgPT0gbG9vcEhlYWRlcgogICAgICAgIC8vIENvbXBlbnNhdGUgZm9yIGxhY2sgb2YgY29kZSBtb3Rpb24uCiAgICAgICAgfHwKICAgICAgICAoYmxvY2tDaGFuZ2VzRmxhZ3NbbG9vcEhlYWRlci5pZF0gPT0gMCAmJgogICAgICAgICAgICBpc0xvb3BBbHdheXNUYWtlbigpICYmCiAgICAgICAgICAgIGxvb3BIZWFkZXIuc3VjY2Vzc29yc1swXSA9PSBibG9jayk7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBISW5zdHJ1Y3Rpb24gbmV4dCA9IGluc3RydWN0aW9uLm5leHQ7CiAgICAgIGlmIChpbnN0cnVjdGlvbi51c2VHdm4oKSAmJgogICAgICAgICAgaW5zdHJ1Y3Rpb24uaXNNb3ZhYmxlICYmCiAgICAgICAgICAoIWluc3RydWN0aW9uLmNhblRocm93KF9hYnN0cmFjdFZhbHVlRG9tYWluKSB8fAogICAgICAgICAgICAgIGZpcnN0SW5zdHJ1Y3Rpb25Jbkxvb3ApICYmCiAgICAgICAgICAhaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuZGVwZW5kc09uKGRlcGVuZHNGbGFncykpIHsKICAgICAgICBib29sIGxvb3BJbnZhcmlhbnRJbnB1dHMgPSB0cnVlOwogICAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSBpbnN0cnVjdGlvbi5pbnB1dHM7CiAgICAgICAgZm9yIChpbnQgaSA9IDAsIGxlbmd0aCA9IGlucHV0cy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgICAgaWYgKGlzSW5wdXREZWZpbmVkQWZ0ZXJEb21pbmF0b3IoaW5wdXRzW2ldLCBwcmVoZWFkZXIpKSB7CiAgICAgICAgICAgIGxvb3BJbnZhcmlhbnRJbnB1dHMgPSBmYWxzZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBJZiB0aGUgaW5wdXRzIGFyZSBsb29wIGludmFyaWFudCwgd2UgY2FuIG1vdmUgdGhlCiAgICAgICAgLy8gaW5zdHJ1Y3Rpb24gZnJvbSB0aGUgY3VycmVudCBibG9jayB0byB0aGUgcHJlLWhlYWRlciBibG9jay4KICAgICAgICBpZiAobG9vcEludmFyaWFudElucHV0cykgewogICAgICAgICAgYmxvY2suZGV0YWNoKGluc3RydWN0aW9uKTsKICAgICAgICAgIHByZWhlYWRlci5tb3ZlQXRFeGl0KGluc3RydWN0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZmlyc3RJbnN0cnVjdGlvbkluTG9vcCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBpbnQgb2xkQ2hhbmdlc0ZsYWdzID0gY2hhbmdlc0ZsYWdzOwogICAgICBjaGFuZ2VzRmxhZ3MgfD0gaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuZ2V0Q2hhbmdlc0ZsYWdzKCk7CiAgICAgIGlmIChvbGRDaGFuZ2VzRmxhZ3MgIT0gY2hhbmdlc0ZsYWdzKSB7CiAgICAgICAgZGVwZW5kc0ZsYWdzID0gU2lkZUVmZmVjdHMuY29tcHV0ZURlcGVuZHNPbkZsYWdzKGNoYW5nZXNGbGFncyk7CiAgICAgIH0KICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXh0OwogICAgfQogIH0KCiAgYm9vbCBpc0lucHV0RGVmaW5lZEFmdGVyRG9taW5hdG9yKEhJbnN0cnVjdGlvbiBpbnB1dCwgSEJhc2ljQmxvY2sgZG9taW5hdG9yKSB7CiAgICByZXR1cm4gaW5wdXQuYmxvY2suaWQgPiBkb21pbmF0b3IuaWQ7CiAgfQoKICB2b2lkIHZpc2l0QmFzaWNCbG9jaygKICAgICAgSEJhc2ljQmxvY2sgYmxvY2ssIFZhbHVlU2V0IHZhbHVlcywgTGlzdDxHdm5Xb3JrSXRlbT4gd29ya1F1ZXVlKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5maXJzdDsKICAgIGlmIChibG9jay5pc0xvb3BIZWFkZXIoKSkgewogICAgICBpbnQgZmxhZ3MgPSBsb29wQ2hhbmdlc0ZsYWdzW2Jsb2NrLmlkXTsKICAgICAgdmFsdWVzLmtpbGwoZmxhZ3MpOwogICAgfQogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIG5leHQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICBpbnQgZmxhZ3MgPSBpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cy5nZXRDaGFuZ2VzRmxhZ3MoKTsKICAgICAgYXNzZXJ0KGZsYWdzID09IDAgfHwgIWluc3RydWN0aW9uLnVzZUd2bigpKTsKICAgICAgdmFsdWVzLmtpbGwoZmxhZ3MpOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24udXNlR3ZuKCkpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gb3RoZXIgPSB2YWx1ZXMubG9va3VwKGluc3RydWN0aW9uKTsKICAgICAgICBpZiAob3RoZXIgIT0gbnVsbCkgewogICAgICAgICAgYXNzZXJ0KG90aGVyLmd2bkVxdWFscyhpbnN0cnVjdGlvbikgJiYgaW5zdHJ1Y3Rpb24uZ3ZuRXF1YWxzKG90aGVyKSk7CiAgICAgICAgICBibG9jay5yZXdyaXRlV2l0aEJldHRlclVzZXIoaW5zdHJ1Y3Rpb24sIG90aGVyKTsKICAgICAgICAgIGJsb2NrLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHZhbHVlcy5hZGQoaW5zdHJ1Y3Rpb24pOwogICAgICAgIH0KICAgICAgfQogICAgICBpbnN0cnVjdGlvbiA9IG5leHQ7CiAgICB9CgogICAgTGlzdDxIQmFzaWNCbG9jaz4gZG9taW5hdGVkQmxvY2tzID0gYmxvY2suZG9taW5hdGVkQmxvY2tzOwogICAgZm9yIChpbnQgaSA9IDAsIGxlbmd0aCA9IGRvbWluYXRlZEJsb2Nrcy5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBIQmFzaWNCbG9jayBkb21pbmF0ZWQgPSBkb21pbmF0ZWRCbG9ja3NbaV07CiAgICAgIC8vIE5vIG5lZWQgdG8gY29weSB0aGUgdmFsdWUgc2V0IGZvciB0aGUgbGFzdCBjaGlsZC4KICAgICAgVmFsdWVTZXQgc3VjY2Vzc29yVmFsdWVzID0gKGkgPT0gbGVuZ3RoIC0gMSkgPyB2YWx1ZXMgOiB2YWx1ZXMuY29weSgpOwogICAgICAvLyBJZiB3ZSBoYXZlIG5vIHZhbHVlcyBpbiBvdXIgc2V0LCB3ZSBkbyBub3QgaGF2ZSB0byBraWxsCiAgICAgIC8vIGFueXRoaW5nLiBBbHNvLCBpZiB0aGUgcmFuZ2Ugb2YgYmxvY2sgaWRzIGZyb20gdGhlIGN1cnJlbnQKICAgICAgLy8gYmxvY2sgdG8gdGhlIGRvbWluYXRlZCBibG9jayBpcyBlbXB0eSwgdGhlcmUgaXMgbm8gYmxvY2tzIG9uCiAgICAgIC8vIGFueSBwYXRoIGZyb20gdGhlIGN1cnJlbnQgYmxvY2sgdG8gdGhlIGRvbWluYXRlZCBibG9jayBzbyB3ZQogICAgICAvLyBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGVpdGhlci4KICAgICAgYXNzZXJ0KGJsb2NrLmlkIDwgZG9taW5hdGVkLmlkKTsKICAgICAgaWYgKCFzdWNjZXNzb3JWYWx1ZXMuaXNFbXB0eSAmJiBibG9jay5pZCArIDEgPCBkb21pbmF0ZWQuaWQpIHsKICAgICAgICB2aXNpdGVkLmNsZWFyKCk7CiAgICAgICAgTGlzdDxIQmFzaWNCbG9jaz4gd29ya1F1ZXVlID0gPEhCYXNpY0Jsb2NrPltkb21pbmF0ZWRdOwogICAgICAgIGludCBjaGFuZ2VzRmxhZ3MgPSAwOwogICAgICAgIGRvIHsKICAgICAgICAgIEhCYXNpY0Jsb2NrIGN1cnJlbnQgPSB3b3JrUXVldWUucmVtb3ZlTGFzdCgpOwogICAgICAgICAgY2hhbmdlc0ZsYWdzIHw9CiAgICAgICAgICAgICAgZ2V0Q2hhbmdlc0ZsYWdzRm9yRG9taW5hdGVkQmxvY2soYmxvY2ssIGN1cnJlbnQsIHdvcmtRdWV1ZSk7CiAgICAgICAgfSB3aGlsZSAoIXdvcmtRdWV1ZS5pc0VtcHR5KTsKICAgICAgICBzdWNjZXNzb3JWYWx1ZXMua2lsbChjaGFuZ2VzRmxhZ3MpOwogICAgICB9CiAgICAgIHdvcmtRdWV1ZS5hZGQobmV3IEd2bldvcmtJdGVtKGRvbWluYXRlZCwgc3VjY2Vzc29yVmFsdWVzKSk7CiAgICB9CiAgfQoKICB2b2lkIGNvbXB1dGVDaGFuZ2VzRmxhZ3MoSEdyYXBoIGdyYXBoKSB7CiAgICAvLyBDcmVhdGUgdGhlIGNoYW5nZXMgZmxhZ3MgbGlzdHMuIE1ha2Ugc3VyZSB0byBpbml0aWFsaXplIHRoZQogICAgLy8gbG9vcCBjaGFuZ2VzIGZsYWdzIGxpc3QgdG8gemVybyBzbyB3ZSBjYW4gdXNlIGJpdHdpc2Ugb3Igd2hlbgogICAgLy8gcHJvcGFnYXRpbmcgbG9vcCBjaGFuZ2VzIHVwd2FyZHMuCiAgICBmaW5hbCBpbnQgbGVuZ3RoID0gZ3JhcGguYmxvY2tzLmxlbmd0aDsKICAgIGJsb2NrQ2hhbmdlc0ZsYWdzID0gbmV3IExpc3Q8aW50PihsZW5ndGgpOwogICAgbG9vcENoYW5nZXNGbGFncyA9IG5ldyBMaXN0PGludD4obGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIGxvb3BDaGFuZ2VzRmxhZ3NbaV0gPSAwOwoKICAgIC8vIFJ1biB0aHJvdWdoIGFsbCB0aGUgYmFzaWMgYmxvY2tzIGluIHRoZSBncmFwaCBhbmQgZmlsbCBpbiB0aGUKICAgIC8vIGNoYW5nZXMgZmxhZ3MgbGlzdHMuCiAgICBmb3IgKGludCBpID0gbGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgZmluYWwgSEJhc2ljQmxvY2sgYmxvY2sgPSBncmFwaC5ibG9ja3NbaV07CiAgICAgIGZpbmFsIGludCBpZCA9IGJsb2NrLmlkOwoKICAgICAgLy8gQ29tcHV0ZSBibG9jayBjaGFuZ2VzIGZsYWdzIGZvciB0aGUgYmxvY2suCiAgICAgIGludCBjaGFuZ2VzRmxhZ3MgPSAwOwogICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5maXJzdDsKICAgICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgICBjaGFuZ2VzRmxhZ3MgfD0gaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuZ2V0Q2hhbmdlc0ZsYWdzKCk7CiAgICAgICAgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICB9CiAgICAgIGFzc2VydChibG9ja0NoYW5nZXNGbGFnc1tpZF0gPT0gbnVsbCk7CiAgICAgIGJsb2NrQ2hhbmdlc0ZsYWdzW2lkXSA9IGNoYW5nZXNGbGFnczsKCiAgICAgIC8vIExvb3AgaGVhZGVycyBhcmUgcGFydCBvZiB0aGVpciBsb29wLCBzbyB1cGRhdGUgdGhlIGxvb3AKICAgICAgLy8gY2hhbmdlcyBmbGFncyBhY2NvcmRpbmdseS4KICAgICAgaWYgKGJsb2NrLmlzTG9vcEhlYWRlcigpKSB7CiAgICAgICAgbG9vcENoYW5nZXNGbGFnc1tpZF0gfD0gY2hhbmdlc0ZsYWdzOwogICAgICB9CgogICAgICAvLyBQcm9wYWdhdGUgbG9vcCBjaGFuZ2VzIGZsYWdzIHVwd2FyZHMuCiAgICAgIEhCYXNpY0Jsb2NrIHBhcmVudExvb3BIZWFkZXIgPSBibG9jay5wYXJlbnRMb29wSGVhZGVyOwogICAgICBpZiAocGFyZW50TG9vcEhlYWRlciAhPSBudWxsKSB7CiAgICAgICAgbG9vcENoYW5nZXNGbGFnc1twYXJlbnRMb29wSGVhZGVyLmlkXSB8PQogICAgICAgICAgICAoYmxvY2suaXNMb29wSGVhZGVyKCkpID8gbG9vcENoYW5nZXNGbGFnc1tpZF0gOiBjaGFuZ2VzRmxhZ3M7CiAgICAgIH0KICAgIH0KICB9CgogIGludCBnZXRDaGFuZ2VzRmxhZ3NGb3JEb21pbmF0ZWRCbG9jayhIQmFzaWNCbG9jayBkb21pbmF0b3IsCiAgICAgIEhCYXNpY0Jsb2NrIGRvbWluYXRlZCwgTGlzdDxIQmFzaWNCbG9jaz4gd29ya1F1ZXVlKSB7CiAgICBpbnQgY2hhbmdlc0ZsYWdzID0gMDsKICAgIExpc3Q8SEJhc2ljQmxvY2s+IHByZWRlY2Vzc29ycyA9IGRvbWluYXRlZC5wcmVkZWNlc3NvcnM7CiAgICBmb3IgKGludCBpID0gMCwgbGVuZ3RoID0gcHJlZGVjZXNzb3JzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gcHJlZGVjZXNzb3JzW2ldOwogICAgICBpbnQgaWQgPSBibG9jay5pZDsKICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgcHJlZGVjZXNzb3IgYmxvY2sgaXMgb24gdGhlIHBhdGggZnJvbSB0aGUKICAgICAgLy8gZG9taW5hdG9yIHRvIHRoZSBkb21pbmF0ZWQsIGl0IG11c3QgaGF2ZSBhbiBpZCB0aGF0IGlzIGluIHRoZQogICAgICAvLyByYW5nZSBmcm9tIHRoZSBkb21pbmF0b3IgdG8gdGhlIGRvbWluYXRlZC4KICAgICAgaWYgKGRvbWluYXRvci5pZCA8IGlkICYmIGlkIDwgZG9taW5hdGVkLmlkICYmICF2aXNpdGVkLmNvbnRhaW5zKGlkKSkgewogICAgICAgIHZpc2l0ZWQuYWRkKGlkKTsKICAgICAgICBjaGFuZ2VzRmxhZ3MgfD0gYmxvY2tDaGFuZ2VzRmxhZ3NbaWRdOwogICAgICAgIC8vIExvb3AgYm9kaWVzIG1pZ2h0IG5vdCBiZSBvbiB0aGUgcGF0aCBmcm9tIGRvbWluYXRvciB0byBkb21pbmF0ZWQsCiAgICAgICAgLy8gYnV0IHRoZXkgY2FuIGludmFsaWRhdGUgdmFsdWVzLgogICAgICAgIGNoYW5nZXNGbGFncyB8PSBsb29wQ2hhbmdlc0ZsYWdzW2lkXTsKICAgICAgICB3b3JrUXVldWUuYWRkKGJsb2NrKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNoYW5nZXNGbGFnczsKICB9Cn0KCi8vIFRoaXMgcGhhc2UgbWVyZ2VzIGVxdWl2YWxlbnQgaW5zdHJ1Y3Rpb25zIG9uIGRpZmZlcmVudCBwYXRocyBpbnRvCi8vIG9uZSBpbnN0cnVjdGlvbiBpbiBhIGRvbWluYXRvciBibG9jay4gSXQgcnVucyB0aHJvdWdoIHRoZSBncmFwaAovLyBwb3N0IGRvbWluYXRvciBvcmRlciBhbmQgY29tcHV0ZXMgYSBWYWx1ZVNldCBmb3IgZWFjaCBibG9jayBvZgovLyBpbnN0cnVjdGlvbnMgdGhhdCBjYW4gYmUgbW92ZWQgdG8gYSBkb21pbmF0b3IgYmxvY2suIFRoZXNlCi8vIGluc3RydWN0aW9ucyBhcmUgdGhlIG9uZXMgdGhhdDoKLy8gMSkgY2FuIGJlIHVzZWQgZm9yIEdWTiwgYW5kCi8vIDIpIGRvIG5vdCB1c2UgZGVmaW5pdGlvbnMgb2YgdGhlaXIgb3duIGJsb2NrLgovLwovLyBBIGJhc2ljIGJsb2NrIGxvb2tzIGF0IGl0cyBzdWNlc3NvcnMgYW5kIGZpbmRzIHRoZSBpbnRlcnNlY3Rpb24gb2YKLy8gdGhlc2UgY29tcHV0ZWQgVmFsdWVTZXQuIEl0IG1vdmVzIGFsbCBpbnN0cnVjdGlvbnMgb2YgdGhlCi8vIGludGVyc2VjdGlvbiBpbnRvIGl0cyBvd24gbGlzdCBvZiBpbnN0cnVjdGlvbnMuCmNsYXNzIFNzYUNvZGVNb3Rpb24gZXh0ZW5kcyBIQmFzZVZpc2l0b3IgaW1wbGVtZW50cyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZURvbWFpbiBfYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhQ29kZU1vdGlvbiI7CgogIGJvb2wgbW92ZWRDb2RlID0gZmFsc2U7CiAgTGlzdDxWYWx1ZVNldD4gdmFsdWVzOwoKICBTc2FDb2RlTW90aW9uKHRoaXMuX2Fic3RyYWN0VmFsdWVEb21haW4pOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB2YWx1ZXMgPSBuZXcgTGlzdDxWYWx1ZVNldD4oZ3JhcGguYmxvY2tzLmxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGdyYXBoLmJsb2Nrcy5sZW5ndGg7IGkrKykgewogICAgICB2YWx1ZXNbZ3JhcGguYmxvY2tzW2ldLmlkXSA9IG5ldyBWYWx1ZVNldCgpOwogICAgfQogICAgdmlzaXRQb3N0RG9taW5hdG9yVHJlZShncmFwaCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgTGlzdDxIQmFzaWNCbG9jaz4gc3VjY2Vzc29ycyA9IGJsb2NrLnN1Y2Nlc3NvcnM7CgogICAgLy8gUGhhc2UgMTogZ2V0IHRoZSBWYWx1ZVNldCBvZiBhbGwgc3VjY2Vzc29ycyAoaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUpLAogICAgLy8gY29tcHV0ZSB0aGUgaW50ZXJzZWN0aW9uIGFuZCBtb3ZlIHRoZSBpbnN0cnVjdGlvbnMgb2YgdGhlIGludGVyc2VjdGlvbgogICAgLy8gaW50byB0aGlzIGJsb2NrLgogICAgaWYgKHN1Y2Nlc3NvcnMubGVuZ3RoID4gMSkgewogICAgICBWYWx1ZVNldCBpbnN0cnVjdGlvbnMgPSB2YWx1ZXNbc3VjY2Vzc29yc1swXS5pZF07CiAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgc3VjY2Vzc29ycy5sZW5ndGg7IGkrKykgewogICAgICAgIFZhbHVlU2V0IG90aGVyID0gdmFsdWVzW3N1Y2Nlc3NvcnNbaV0uaWRdOwogICAgICAgIGluc3RydWN0aW9ucyA9IGluc3RydWN0aW9ucy5pbnRlcnNlY3Rpb24ob3RoZXIpOwogICAgICB9CgogICAgICBpZiAoIWluc3RydWN0aW9ucy5pc0VtcHR5KSB7CiAgICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGxpc3QgPSBpbnN0cnVjdGlvbnMudG9MaXN0KCk7CiAgICAgICAgLy8gU29ydCBieSBpbnN0cnVjdGlvbiAnaWQnIGZvciBtb3JlIHN0YWJsZSBvcmRlcmluZyB1bmRlciBjaGFuZ2VzIHRvCiAgICAgICAgLy8gdW5yZWxhdGVkIHNvdXJjZSBjb2RlLiAnaWQnIGlzIGEgZnVuY3Rpb24gb2YgdGhlIG9wZXJhdGlvbnMgb2YKICAgICAgICAvLyBjb21waWxpbmcgdGhlIGN1cnJlbnQgbWV0aG9kLCB3aGVyZWFzIHRoZSBWYWx1ZVNldCBvcmRlciBpcyBkZXBlbmRlbnQKICAgICAgICAvLyBoYXNoQ29kZXMgdGhhdCBhcmUgYSBmdW5jdGlvbiBvZiB0aGUgd2hvbGUgcHJvZ3JhbS4KICAgICAgICBsaXN0LnNvcnQoKGluc24xLCBpbnNuMikgPT4gaW5zbjEuaWQuY29tcGFyZVRvKGluc24yLmlkKSk7CiAgICAgICAgZm9yIChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gaW4gbGlzdCkgewogICAgICAgICAgLy8gTW92ZSB0aGUgaW5zdHJ1Y3Rpb24gdG8gdGhlIGN1cnJlbnQgYmxvY2suCiAgICAgICAgICBpbnN0cnVjdGlvbi5ibG9jay5kZXRhY2goaW5zdHJ1Y3Rpb24pOwogICAgICAgICAgYmxvY2subW92ZUF0RXhpdChpbnN0cnVjdGlvbik7CiAgICAgICAgICAvLyBHbyB0aHJvdWdoIGFsbCBzdWNjZXNzb3JzIGFuZCByZXdyaXRlIHRoZWlyIGluc3RydWN0aW9uCiAgICAgICAgICAvLyB0byB0aGUgc2hhcmVkIG9uZS4KICAgICAgICAgIGZvciAoZmluYWwgc3VjY2Vzc29yIGluIHN1Y2Nlc3NvcnMpIHsKICAgICAgICAgICAgSEluc3RydWN0aW9uIHRvUmV3cml0ZSA9IHZhbHVlc1tzdWNjZXNzb3IuaWRdLmxvb2t1cChpbnN0cnVjdGlvbik7CiAgICAgICAgICAgIGlmICh0b1Jld3JpdGUgIT0gaW5zdHJ1Y3Rpb24pIHsKICAgICAgICAgICAgICBzdWNjZXNzb3IucmV3cml0ZVdpdGhCZXR0ZXJVc2VyKHRvUmV3cml0ZSwgaW5zdHJ1Y3Rpb24pOwogICAgICAgICAgICAgIHN1Y2Nlc3Nvci5yZW1vdmUodG9SZXdyaXRlKTsKICAgICAgICAgICAgICBtb3ZlZENvZGUgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIFRPRE8oc3JhKTogVGhlcmUgYXJlIHNvbWUgbm9uLWd2bi1hYmxlIGluc3RydWN0aW9ucyB0aGF0IHdlIGNvdWxkIG1vdmUsCiAgICAgIC8vIGUuZy4gYWxsb2NhdGlvbnMuIFdlIHNob3VsZCBwcm9iYWJseSBub3QgbW92ZSBpbnN0cnVjdGlvbnMgdGhhdCBjYW4KICAgICAgLy8gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdyBzaW5jZSB0aGUgcmVwb3J0ZWQgbG9jYXRpb24gbWlnaHQgYmUgaW4KICAgICAgLy8gdGhlICd3cm9uZycgYnJhbmNoLgogICAgfQoKICAgIC8vIERvbid0IHRyeSB0byBtZXJnZSBpbnN0cnVjdGlvbnMgdG8gYSBkb21pbmF0b3IgaWYgd2UgaGF2ZQogICAgLy8gbXVsdGlwbGUgcHJlZGVjZXNzb3JzLgogICAgaWYgKGJsb2NrLnByZWRlY2Vzc29ycy5sZW5ndGggIT0gMSkgcmV0dXJuOwoKICAgIC8vIFBoYXNlIDI6IEdvIHRocm91Z2ggYWxsIGluc3RydWN0aW9ucyBvZiB0aGlzIGJsb2NrIGFuZCBmaW5kCiAgICAvLyB3aGljaCBpbnN0cnVjdGlvbnMgY2FuIGJlIG1vdmVkIHRvIGEgZG9taW5hdG9yIGJsb2NrLgogICAgVmFsdWVTZXQgc2V0XyA9IHZhbHVlc1tibG9jay5pZF07CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5maXJzdDsKICAgIGludCBmbGFncyA9IDA7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBpbnQgZGVwZW5kc0ZsYWdzID0gU2lkZUVmZmVjdHMuY29tcHV0ZURlcGVuZHNPbkZsYWdzKGZsYWdzKTsKICAgICAgZmxhZ3MgfD0gaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuZ2V0Q2hhbmdlc0ZsYWdzKCk7CgogICAgICBISW5zdHJ1Y3Rpb24gY3VycmVudCA9IGluc3RydWN0aW9uOwogICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLm5leHQ7CiAgICAgIGlmICghY3VycmVudC51c2VHdm4oKSB8fCAhY3VycmVudC5pc01vdmFibGUpIGNvbnRpbnVlOwogICAgICAvLyBUT0RPKHNyYSk6IFdlIGNvdWxkIG1vdmUgdGhyb3dpbmcgaW5zdHJ1Y3Rpb25zIHByb3ZpZGVkIHdlIGtlZXAgdGhlCiAgICAgIC8vIGV4Y2VwdGlvbnMgaW4gdGhlIHNhbWUgb3JkZXIuICBUaGlzIHJlcXVpcmVzIHRoZXkgYXJlIGluIHRoZSBzYW1lIG9yZGVyCiAgICAgIC8vIGluIGFsbCBzdWNjZXNzb3JzLCB3aGljaCBpcyBub3QgdHJhY2tlZCBieSB0aGUgVmFsdWVTZXQuCiAgICAgIGlmIChjdXJyZW50LmNhblRocm93KF9hYnN0cmFjdFZhbHVlRG9tYWluKSkgY29udGludWU7CiAgICAgIGlmIChjdXJyZW50LnNpZGVFZmZlY3RzLmRlcGVuZHNPbihkZXBlbmRzRmxhZ3MpKSBjb250aW51ZTsKCiAgICAgIGJvb2wgY2FuQmVNb3ZlZCA9IHRydWU7CiAgICAgIGZvciAoZmluYWwgSEluc3RydWN0aW9uIGlucHV0IGluIGN1cnJlbnQuaW5wdXRzKSB7CiAgICAgICAgaWYgKGlucHV0LmJsb2NrID09IGJsb2NrKSB7CiAgICAgICAgICBjYW5CZU1vdmVkID0gZmFsc2U7CiAgICAgICAgICBicmVhazsKICAgICAgICAgIC8vIFRPRE8oc3JhKTogV2UgY291bGQgbW92ZSB0cmVlcyBvZiBpbnN0cnVjdGlvbnMgcHJvdmlkZWQgd2UgbW92ZSB0aGUKICAgICAgICAgIC8vIHJvb3RzIGJlZm9yZSB0aGUgbGVhdmVzLgogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIWNhbkJlTW92ZWQpIGNvbnRpbnVlOwoKICAgICAgSEluc3RydWN0aW9uIGV4aXN0aW5nID0gc2V0Xy5sb29rdXAoY3VycmVudCk7CiAgICAgIGlmIChleGlzdGluZyA9PSBudWxsKSB7CiAgICAgICAgc2V0Xy5hZGQoY3VycmVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYmxvY2sucmV3cml0ZVdpdGhCZXR0ZXJVc2VyKGN1cnJlbnQsIGV4aXN0aW5nKTsKICAgICAgICBibG9jay5yZW1vdmUoY3VycmVudCk7CiAgICAgICAgbW92ZWRDb2RlID0gdHJ1ZTsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgU3NhVHlwZUNvbnZlcnNpb25JbnNlcnRlciBleHRlbmRzIEhCYXNlVmlzaXRvcgogICAgaW1wbGVtZW50cyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhVHlwZWNvbnZlcnNpb25JbnNlcnRlciI7CiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwoKICBTc2FUeXBlQ29udmVyc2lvbkluc2VydGVyKHRoaXMuY2xvc2VkV29ybGQpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogIH0KCiAgLy8gVXBkYXRlIHVzZXJzIG9mIFtpbnB1dF0gdGhhdCBhcmUgZG9taW5hdGVkIGJ5IFs6ZG9taW5hdG9yLmZpcnN0Ol0KICAvLyB0byB1c2UgW1R5cGVLbm93bl0gb2YgW2lucHV0XSBpbnN0ZWFkLiBBcyB0aGUgdHlwZSBpbmZvcm1hdGlvbiBkZXBlbmRzCiAgLy8gb24gdGhlIGNvbnRyb2wgZmxvdywgd2UgbWFyayB0aGUgaW5zZXJ0ZWQgW0hUeXBlS25vd25dIG5vZGVzIGFzCiAgLy8gbm9uLW1vdmFibGUuCiAgdm9pZCBpbnNlcnRUeXBlUHJvcGFnYXRpb25Gb3JEb21pbmF0ZWRVc2VycygKICAgICAgSEJhc2ljQmxvY2sgZG9taW5hdG9yLCBISW5zdHJ1Y3Rpb24gaW5wdXQsIEFic3RyYWN0VmFsdWUgY29udmVydGVkVHlwZSkgewogICAgRG9taW5hdGVkVXNlcyBkb21pbmF0ZWRVc2VzID0gRG9taW5hdGVkVXNlcy5vZihpbnB1dCwgZG9taW5hdG9yLmZpcnN0KTsKICAgIGlmIChkb21pbmF0ZWRVc2VzLmlzRW1wdHkpIHJldHVybjsKCiAgICAvLyBDaGVjayB0byBhdm9pZCBhZGRpbmcgYSBkdXBsaWNhdGUgSFR5cGVLbm93biBub2RlLgogICAgaWYgKGRvbWluYXRlZFVzZXMuaXNTaW5nbGV0b24pIHsKICAgICAgSEluc3RydWN0aW9uIHVzZXIgPSBkb21pbmF0ZWRVc2VzLnNpbmdsZTsKICAgICAgaWYgKHVzZXIgaXMgSFR5cGVLbm93biAmJgogICAgICAgICAgdXNlci5pc1Bpbm5lZCAmJgogICAgICAgICAgdXNlci5rbm93blR5cGUgPT0gY29udmVydGVkVHlwZSAmJgogICAgICAgICAgdXNlci5jaGVja2VkSW5wdXQgPT0gaW5wdXQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KCiAgICBIVHlwZUtub3duIG5ld0lucHV0ID0gbmV3IEhUeXBlS25vd24ucGlubmVkKGNvbnZlcnRlZFR5cGUsIGlucHV0KTsKICAgIGRvbWluYXRvci5hZGRCZWZvcmUoZG9taW5hdG9yLmZpcnN0LCBuZXdJbnB1dCk7CiAgICBkb21pbmF0ZWRVc2VzLnJlcGxhY2VXaXRoKG5ld0lucHV0KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJcyhISXMgaW5zdHJ1Y3Rpb24pIHsKICAgIERhcnRUeXBlIHR5cGUgPSBpbnN0cnVjdGlvbi50eXBlRXhwcmVzc2lvbjsKICAgIGlmICghaW5zdHJ1Y3Rpb24uaXNSYXdDaGVjaykgewogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKHR5cGUuaXNUeXBlZGVmKSB7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZiAodHlwZS5pc0Z1dHVyZU9yKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZSA9IHR5cGU7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBpbnRlcmZhY2VUeXBlLmVsZW1lbnQ7CgogICAgTGlzdDxIQmFzaWNCbG9jaz4gdHJ1ZVRhcmdldHMgPSA8SEJhc2ljQmxvY2s+W107CiAgICBMaXN0PEhCYXNpY0Jsb2NrPiBmYWxzZVRhcmdldHMgPSA8SEJhc2ljQmxvY2s+W107CgogICAgY29sbGVjdFRhcmdldHMoaW5zdHJ1Y3Rpb24sIHRydWVUYXJnZXRzLCBmYWxzZVRhcmdldHMpOwoKICAgIGlmICh0cnVlVGFyZ2V0cy5pc0VtcHR5ICYmIGZhbHNlVGFyZ2V0cy5pc0VtcHR5KSByZXR1cm47CgogICAgQWJzdHJhY3RWYWx1ZSBjb252ZXJ0ZWRUeXBlID0KICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsU3VidHlwZShjbHMpOwogICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5zdHJ1Y3Rpb24uZXhwcmVzc2lvbjsKCiAgICBmb3IgKEhCYXNpY0Jsb2NrIGJsb2NrIGluIHRydWVUYXJnZXRzKSB7CiAgICAgIGluc2VydFR5cGVQcm9wYWdhdGlvbkZvckRvbWluYXRlZFVzZXJzKGJsb2NrLCBpbnB1dCwgY29udmVydGVkVHlwZSk7CiAgICB9CiAgICAvLyBUT0RPKHNyYSk6IEFsc28gc3RyZW5ndGhlbiB1c2VzIGZvciB3aGVuIHRoZSBjb25kaXRpb24gaXMga25vd24KICAgIC8vIGZhbHNlLiBBdm9pZCBzdHJlbmd0aGVuaW5nIHRvIGBudWxsYC4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJZGVudGl0eShISWRlbnRpdHkgaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIEF0IEhJZihISWRlbnRpdHkoeCwgbnVsbCkpIHN0cmVuZ3RoZW5zIHggdG8gbm9uLW51bGwgb24gZWxzZSBicmFuY2guCiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmxlZnQ7CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5yaWdodDsKICAgIEhJbnN0cnVjdGlvbiBpbnB1dDsKCiAgICBpZiAobGVmdC5pc0NvbnN0YW50TnVsbCgpKSB7CiAgICAgIGlucHV0ID0gcmlnaHQ7CiAgICB9IGVsc2UgaWYgKHJpZ2h0LmlzQ29uc3RhbnROdWxsKCkpIHsKICAgICAgaW5wdXQgPSBsZWZ0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwoaW5wdXQuaW5zdHJ1Y3Rpb25UeXBlKS5pc0RlZmluaXRlbHlGYWxzZSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgTGlzdDxIQmFzaWNCbG9jaz4gdHJ1ZVRhcmdldHMgPSA8SEJhc2ljQmxvY2s+W107CiAgICBMaXN0PEhCYXNpY0Jsb2NrPiBmYWxzZVRhcmdldHMgPSA8SEJhc2ljQmxvY2s+W107CgogICAgY29sbGVjdFRhcmdldHMoaW5zdHJ1Y3Rpb24sIHRydWVUYXJnZXRzLCBmYWxzZVRhcmdldHMpOwoKICAgIGlmICh0cnVlVGFyZ2V0cy5pc0VtcHR5ICYmIGZhbHNlVGFyZ2V0cy5pc0VtcHR5KSByZXR1cm47CgogICAgQWJzdHJhY3RWYWx1ZSBub25OdWxsVHlwZSA9CiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZXhjbHVkZU51bGwoaW5wdXQuaW5zdHJ1Y3Rpb25UeXBlKTsKCiAgICBmb3IgKEhCYXNpY0Jsb2NrIGJsb2NrIGluIGZhbHNlVGFyZ2V0cykgewogICAgICBpbnNlcnRUeXBlUHJvcGFnYXRpb25Gb3JEb21pbmF0ZWRVc2VycyhibG9jaywgaW5wdXQsIG5vbk51bGxUeXBlKTsKICAgIH0KICAgIC8vIFdlIGRvbid0IHN0cmVuZ3RoZW4gdGhlIGtub3duLXRydWUgcmVmZXJlbmNlcy4gSXQgZG9lc24ndCBoYXBwZW4gb2Z0ZW4KICAgIC8vIGFuZCB3ZSBkb24ndCB3YW50ICJpZiAoeD09bnVsbCkgcmV0dXJuIHg7IiB0byBjb252ZXJ0IGJldHdlZW4gSmF2YVNjcmlwdAogICAgLy8gJ251bGwnIGFuZCAndW5kZWZpbmVkJy4KICB9CgogIGNvbGxlY3RUYXJnZXRzKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgTGlzdDxIQmFzaWNCbG9jaz4gdHJ1ZVRhcmdldHMsCiAgICAgIExpc3Q8SEJhc2ljQmxvY2s+IGZhbHNlVGFyZ2V0cykgewogICAgZm9yIChISW5zdHJ1Y3Rpb24gdXNlciBpbiBpbnN0cnVjdGlvbi51c2VkQnkpIHsKICAgICAgaWYgKHVzZXIgaXMgSElmKSB7CiAgICAgICAgdHJ1ZVRhcmdldHM/LmFkZCh1c2VyLnRoZW5CbG9jayk7CiAgICAgICAgZmFsc2VUYXJnZXRzPy5hZGQodXNlci5lbHNlQmxvY2spOwogICAgICB9IGVsc2UgaWYgKHVzZXIgaXMgSExvb3BCcmFuY2gpIHsKICAgICAgICB0cnVlVGFyZ2V0cz8uYWRkKHVzZXIuYmxvY2suc3VjY2Vzc29ycy5maXJzdCk7CiAgICAgICAgLy8gRG9uJ3QgaW5zZXJ0IHJlZmluZW1lbnRzIG9uIGVsc2UtYnJhbmNoIC0gbWF5IGJlIGEgY3JpdGljYWwgZWRnZQogICAgICAgIC8vIGJsb2NrIHdoaWNoIHdlIGN1cnJlbnRseSBuZWVkIHRvIGtlZXAgZW1wdHkgKGV4Y2VwdCBmb3IgcGhpcykuCiAgICAgIH0gZWxzZSBpZiAodXNlciBpcyBITm90KSB7CiAgICAgICAgY29sbGVjdFRhcmdldHModXNlciwgZmFsc2VUYXJnZXRzLCB0cnVlVGFyZ2V0cyk7CiAgICAgIH0gZWxzZSBpZiAodXNlciBpcyBIUGhpKSB7CiAgICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IHVzZXIuaW5wdXRzOwogICAgICAgIGlmIChpbnB1dHMubGVuZ3RoID09IDIpIHsKICAgICAgICAgIGFzc2VydChpbnB1dHMuY29udGFpbnMoaW5zdHJ1Y3Rpb24pKTsKICAgICAgICAgIEhJbnN0cnVjdGlvbiBvdGhlciA9IGlucHV0c1soaW5wdXRzWzBdID09IGluc3RydWN0aW9uKSA/IDEgOiAwXTsKICAgICAgICAgIGlmIChvdGhlci5pc0NvbnN0YW50VHJ1ZSgpKSB7CiAgICAgICAgICAgIC8vIFRoZSBjb25kaXRpb24gZmxvd3MgdG8gYSBIUGhpKHRydWUsIHVzZXIpLCB3aGljaCBtZWFucyB0aGF0IGEKICAgICAgICAgICAgLy8gZG93bnN0cmVhbSBISWYgaGFzIHRydWUtYnJhbmNoIGNvbnRyb2wgZmxvdyB0aGF0IGRvZXMgbm90IGRlcGVuZAogICAgICAgICAgICAvLyBvbiB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24sIHNvIHN0b3AgY29sbGVjdGluZyBbdHJ1ZVRhcmdldHNdLgogICAgICAgICAgICBjb2xsZWN0VGFyZ2V0cyh1c2VyLCBudWxsLCBmYWxzZVRhcmdldHMpOwogICAgICAgICAgfSBlbHNlIGlmIChvdGhlci5pc0NvbnN0YW50RmFsc2UoKSkgewogICAgICAgICAgICAvLyBEaXR0byBmb3IgZmFsc2UuCiAgICAgICAgICAgIGNvbGxlY3RUYXJnZXRzKHVzZXIsIHRydWVUYXJnZXRzLCBudWxsKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn0KCi8vLyBPcHRpbWl6YXRpb24gcGhhc2UgdGhhdCB0cmllcyB0byBlbGltaW5hdGUgbWVtb3J5IGxvYWRzIChmb3IgZXhhbXBsZQovLy8gW0hGaWVsZEdldF0pLCB3aGVuIGl0IGtub3dzIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhhdCBtZW1vcnkgbG9jYXRpb24sIGFuZAovLy8gc3RvcmVzIHRoYXQgb3ZlcndyaXRlIHdpdGggdGhlIHNhbWUgdmFsdWUuCmNsYXNzIFNzYUxvYWRFbGltaW5hdGlvbiBleHRlbmRzIEhCYXNlVmlzaXRvciBpbXBsZW1lbnRzIE9wdGltaXphdGlvblBoYXNlIHsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIEpGaWVsZEFuYWx5c2lzIF9maWVsZEFuYWx5c2lzOwogIEBvdmVycmlkZQogIGZpbmFsIFN0cmluZyBuYW1lID0gIlNzYUxvYWRFbGltaW5hdGlvbiI7CiAgTWVtb3J5U2V0IG1lbW9yeVNldDsKICBMaXN0PE1lbW9yeVNldD4gbWVtb3JpZXM7CiAgYm9vbCBuZXdHdm5DYW5kaWRhdGVzID0gZmFsc2U7CiAgSEdyYXBoIF9ncmFwaDsKCiAgU3NhTG9hZEVsaW1pbmF0aW9uKHRoaXMuX2Nsb3NlZFdvcmxkKQogICAgICA6IF9maWVsZEFuYWx5c2lzID0gX2Nsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXM7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIF9jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICBfZ3JhcGggPSBncmFwaDsKICAgIG1lbW9yaWVzID0gbmV3IExpc3Q8TWVtb3J5U2V0PihncmFwaC5ibG9ja3MubGVuZ3RoKTsKICAgIExpc3Q8SEJhc2ljQmxvY2s+IGJsb2NrcyA9IGdyYXBoLmJsb2NrczsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmxvY2tzLmxlbmd0aDsgaSsrKSB7CiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gYmxvY2tzW2ldOwogICAgICB2aXNpdEJhc2ljQmxvY2soYmxvY2spOwogICAgICBpZiAoYmxvY2suc3VjY2Vzc29ycy5pc05vdEVtcHR5ICYmIGJsb2NrLnN1Y2Nlc3NvcnNbMF0uaXNMb29wSGVhZGVyKCkpIHsKICAgICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmRpbmcgYmxvY2sgb2YgYSBsb29wLiBJdGVyYXRlIG92ZXIgdGhlCiAgICAgICAgLy8gYmxvY2tzIG9mIHRoZSBsb29wIGFnYWluIHRvIHRha2UgdmFsdWVzIHRoYXQgZmxvdyBmcm9tIHRoYXQKICAgICAgICAvLyBlbmRpbmcgYmxvY2sgaW50byBhY2NvdW50LgogICAgICAgIGZvciAoaW50IGogPSBibG9jay5zdWNjZXNzb3JzWzBdLmlkOyBqIDw9IGJsb2NrLmlkOyBqKyspIHsKICAgICAgICAgIHZpc2l0QmFzaWNCbG9jayhibG9ja3Nbal0pOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGlmIChibG9jay5wcmVkZWNlc3NvcnMubGVuZ3RoID09IDApIHsKICAgICAgLy8gRW50cnkgYmxvY2suCiAgICAgIG1lbW9yeVNldCA9IG5ldyBNZW1vcnlTZXQoX2Nsb3NlZFdvcmxkKTsKICAgIH0gZWxzZSBpZiAoYmxvY2sucHJlZGVjZXNzb3JzLmxlbmd0aCA9PSAxICYmCiAgICAgICAgYmxvY2sucHJlZGVjZXNzb3JzWzBdLnN1Y2Nlc3NvcnMubGVuZ3RoID09IDEpIHsKICAgICAgLy8gTm8gbmVlZCB0byBjbG9uZSwgdGhlcmUgaXMgbm8gb3RoZXIgc3VjY2Vzc29yIGZvcgogICAgICAvLyBgYmxvY2sucHJlZGVjZXNzb3JzWzBdYCwgYW5kIHRoaXMgYmxvY2sgaGFzIG9ubHkgb25lCiAgICAgIC8vIHByZWRlY2Vzc29yLiBTaW5jZSB3ZSBhcmUgbm90IGdvaW5nIHRvIHZpc2l0CiAgICAgIC8vIGBibG9jay5wcmVkZWNlc3NvcnNbMF1gIGFnYWluLCB3ZSBjYW4ganVzdCByZS11c2UgaXRzCiAgICAgIC8vIFttZW1vcnlTZXRdLgogICAgICBtZW1vcnlTZXQgPSBtZW1vcmllc1tibG9jay5wcmVkZWNlc3NvcnNbMF0uaWRdOwogICAgfSBlbHNlIGlmIChibG9jay5wcmVkZWNlc3NvcnMubGVuZ3RoID09IDEpIHsKICAgICAgLy8gQ2xvbmUgdGhlIG1lbW9yeVNldCBvZiB0aGUgcHJlZGVjZXNzb3IsIGJlY2F1c2UgaXQgaXMgYWxzbyB1c2VkCiAgICAgIC8vIGJ5IG90aGVyIHN1Y2Nlc3NvcnMgb2YgaXQuCiAgICAgIG1lbW9yeVNldCA9IG1lbW9yaWVzW2Jsb2NrLnByZWRlY2Vzc29yc1swXS5pZF0uY2xvbmUoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIENvbXB1dGUgdGhlIGludGVyc2VjdGlvbiBvZiBhbGwgcHJlZGVjZXNzb3JzLgogICAgICBtZW1vcnlTZXQgPSBtZW1vcmllc1tibG9jay5wcmVkZWNlc3NvcnNbMF0uaWRdOwogICAgICBmb3IgKGludCBpID0gMTsgaSA8IGJsb2NrLnByZWRlY2Vzc29ycy5sZW5ndGg7IGkrKykgewogICAgICAgIG1lbW9yeVNldCA9IG1lbW9yeVNldC5pbnRlcnNlY3Rpb25Gb3IoCiAgICAgICAgICAgIG1lbW9yaWVzW2Jsb2NrLnByZWRlY2Vzc29yc1tpXS5pZF0sIGJsb2NrLCBpKTsKICAgICAgfQogICAgfQoKICAgIG1lbW9yaWVzW2Jsb2NrLmlkXSA9IG1lbW9yeVNldDsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmZpcnN0OwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIG5leHQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICBpbnN0cnVjdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgIGluc3RydWN0aW9uID0gbmV4dDsKICAgIH0KICB9CgogIHZvaWQgY2hlY2tOZXdHdm5DYW5kaWRhdGVzKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uIGV4aXN0aW5nKSB7CiAgICBpZiAobmV3R3ZuQ2FuZGlkYXRlcykgcmV0dXJuOwogICAgYm9vbCBoYXNVc2VHdm4oSEluc3RydWN0aW9uIGluc24pID0+IGluc24ubm9uQ2hlY2soKS51c2VHdm4oKTsKICAgIGlmIChpbnN0cnVjdGlvbi51c2VkQnkuYW55KGhhc1VzZUd2bikgJiYgZXhpc3RpbmcudXNlZEJ5LmFueShoYXNVc2VHdm4pKSB7CiAgICAgIG5ld0d2bkNhbmRpZGF0ZXMgPSB0cnVlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEZpZWxkR2V0KEhGaWVsZEdldCBpbnN0cnVjdGlvbikgewogICAgaWYgKGluc3RydWN0aW9uLmlzTnVsbENoZWNrKSByZXR1cm47CiAgICBGaWVsZEVudGl0eSBlbGVtZW50ID0gaW5zdHJ1Y3Rpb24uZWxlbWVudDsKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9CiAgICAgICAgaW5zdHJ1Y3Rpb24uZ2V0RGFydFJlY2VpdmVyKF9jbG9zZWRXb3JsZCkubm9uQ2hlY2soKTsKICAgIF92aXNpdEZpZWxkR2V0KGVsZW1lbnQsIHJlY2VpdmVyLCBpbnN0cnVjdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R2V0TGVuZ3RoKEhHZXRMZW5ndGggaW5zdHJ1Y3Rpb24pIHsKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IGluc3RydWN0aW9uLnJlY2VpdmVyLm5vbkNoZWNrKCk7CiAgICBISW5zdHJ1Y3Rpb24gZXhpc3RpbmcgPQogICAgICAgIG1lbW9yeVNldC5sb29rdXBGaWVsZFZhbHVlKE1lbW9yeUZlYXR1cmUubGVuZ3RoLCByZWNlaXZlcik7CiAgICBpZiAoZXhpc3RpbmcgIT0gbnVsbCkgewogICAgICBjaGVja05ld0d2bkNhbmRpZGF0ZXMoaW5zdHJ1Y3Rpb24sIGV4aXN0aW5nKTsKICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmV3cml0ZVdpdGhCZXR0ZXJVc2VyKGluc3RydWN0aW9uLCBleGlzdGluZyk7CiAgICAgIGluc3RydWN0aW9uLmJsb2NrLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICB9IGVsc2UgewogICAgICBtZW1vcnlTZXQucmVnaXN0ZXJGaWVsZFZhbHVlKE1lbW9yeUZlYXR1cmUubGVuZ3RoLCByZWNlaXZlciwgaW5zdHJ1Y3Rpb24pOwogICAgfQogIH0KCiAgdm9pZCBfdmlzaXRGaWVsZEdldCgKICAgICAgRmllbGRFbnRpdHkgZWxlbWVudCwgSEluc3RydWN0aW9uIHJlY2VpdmVyLCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIEhJbnN0cnVjdGlvbiBleGlzdGluZyA9IG1lbW9yeVNldC5sb29rdXBGaWVsZFZhbHVlKGVsZW1lbnQsIHJlY2VpdmVyKTsKICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgIGNoZWNrTmV3R3ZuQ2FuZGlkYXRlcyhpbnN0cnVjdGlvbiwgZXhpc3RpbmcpOwogICAgICBpbnN0cnVjdGlvbi5ibG9jay5yZXdyaXRlV2l0aEJldHRlclVzZXIoaW5zdHJ1Y3Rpb24sIGV4aXN0aW5nKTsKICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIG1lbW9yeVNldC5yZWdpc3RlckZpZWxkVmFsdWUoZWxlbWVudCwgcmVjZWl2ZXIsIGluc3RydWN0aW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGaWVsZFNldChIRmllbGRTZXQgaW5zdHJ1Y3Rpb24pIHsKICAgIEZpZWxkRW50aXR5IGVsZW1lbnQgPSBpbnN0cnVjdGlvbi5lbGVtZW50OwogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0KICAgICAgICBpbnN0cnVjdGlvbi5nZXREYXJ0UmVjZWl2ZXIoX2Nsb3NlZFdvcmxkKS5ub25DaGVjaygpOwogICAgaWYgKG1lbW9yeVNldC5yZWdpc3RlckZpZWxkVmFsdWVVcGRhdGUoCiAgICAgICAgZWxlbWVudCwgcmVjZWl2ZXIsIGluc3RydWN0aW9uLnZhbHVlKSkgewogICAgICBpbnN0cnVjdGlvbi5ibG9jay5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENyZWF0ZShIQ3JlYXRlIGluc3RydWN0aW9uKSB7CiAgICBtZW1vcnlTZXQucmVnaXN0ZXJBbGxvY2F0aW9uKGluc3RydWN0aW9uKTsKICAgIGlmIChzaG91bGRUcmFja0luaXRpYWxWYWx1ZXMoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgIGludCBhcmd1bWVudEluZGV4ID0gMDsKICAgICAgX2Nsb3NlZFdvcmxkLmVsZW1lbnRFbnZpcm9ubWVudC5mb3JFYWNoSW5zdGFuY2VGaWVsZChpbnN0cnVjdGlvbi5lbGVtZW50LAogICAgICAgICAgKF8sIEZpZWxkRW50aXR5IG1lbWJlcikgewogICAgICAgIEZpZWxkQW5hbHlzaXNEYXRhIGZpZWxkRGF0YSA9IF9maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShtZW1iZXIpOwogICAgICAgIGlmIChmaWVsZERhdGEuaXNFbGlkZWQpIHJldHVybjsKICAgICAgICBpZiAoZmllbGREYXRhLmlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvcikgewogICAgICAgICAgLy8gVE9ETyhzcmEpOiBDYW4gd2UgYXZvaWQgY2FsbGluZyBIR3JhcGguYWRkQ29uc3RhbnQ/CiAgICAgICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gZmllbGREYXRhLmluaXRpYWxWYWx1ZTsKICAgICAgICAgIEhDb25zdGFudCBjb25zdGFudCA9IF9ncmFwaC5hZGRDb25zdGFudCh2YWx1ZSwgX2Nsb3NlZFdvcmxkKTsKICAgICAgICAgIG1lbW9yeVNldC5yZWdpc3RlckZpZWxkVmFsdWUobWVtYmVyLCBpbnN0cnVjdGlvbiwgY29uc3RhbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBtZW1vcnlTZXQucmVnaXN0ZXJGaWVsZFZhbHVlKAogICAgICAgICAgICAgIG1lbWJlciwgaW5zdHJ1Y3Rpb24sIGluc3RydWN0aW9uLmlucHV0c1thcmd1bWVudEluZGV4KytdKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgLy8gSW4gY2FzZSB0aGlzIGluc3RydWN0aW9uIGhhcyBhcyBpbnB1dCBub24tZXNjYXBpbmcgb2JqZWN0cywgd2UKICAgIC8vIG5lZWQgdG8gbWFyayB0aGVzZSBvYmplY3RzIGFzIGVzY2FwaW5nLgogICAgbWVtb3J5U2V0LmtpbGxBZmZlY3RlZEJ5KGluc3RydWN0aW9uKTsKICB9CgogIGJvb2wgc2hvdWxkVHJhY2tJbml0aWFsVmFsdWVzKEhDcmVhdGUgaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIERvbid0IHRyYWNrIGluaXRpYWwgZmllbGQgdmFsdWVzIG9mIGFuIGFsbG9jYXRpb24gdGhhdCBhcmUKICAgIC8vIHVucHJvZml0YWJsZS4gV2Ugc2VhcmNoIHRoZSBjaGFpbiBvZiBzaW5nbGUgdXNlcyBpbiBhbGxvY2F0aW9ucyBmb3IgYQogICAgLy8gbGltaXRlZCBkZXB0aC4KCiAgICBjb25zdCBNQVhfSEVBUF9ERVBUSCA9IDU7CgogICAgYm9vbCBpbnRlcmVzdGluZ1VzZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIGludCBoZWFwRGVwdGgpIHsKICAgICAgLy8gSGV1cmlzdGljOiBpZiB0aGUgYWxsb2NhdGlvbiBpcyB0b28gZGVlcCBpbiBoZWFwIGl0IGlzIHVubGlrZWx5IHdlIHdpbGwKICAgICAgLy8gcmVjb3ZlciBhIGZpZWxkIGJ5IGxvYWQtZWxpbWluYXRpb24uCiAgICAgIC8vIFRPRE8oc3JhKTogV2UgY2FuIG1lYXN1cmUgdGhpcyBkZXB0aCBieSBsb29raW5nIGF0IGxvYWQgY2hhaW5zLgogICAgICBpZiAoaGVhcERlcHRoID09IE1BWF9IRUFQX0RFUFRIKSByZXR1cm4gZmFsc2U7CiAgICAgIC8vIFRoZXJlIGFyZSBtdWx0aXBsZSB1c2VzIHNvIGRvIHRoZSBmdWxsIHN0b3JlIGFuYWx5c2lzLgogICAgICBpZiAoaW5zdHJ1Y3Rpb24udXNlZEJ5Lmxlbmd0aCAhPSAxKSByZXR1cm4gdHJ1ZTsKICAgICAgSEluc3RydWN0aW9uIHVzZSA9IGluc3RydWN0aW9uLnVzZWRCeS5zaW5nbGU7CiAgICAgIC8vIFdoZW4gdGhlIG9ubHkgdXNlIGlzIGFuIGFsbG9jYXRpb24sIHRoZSBhbGxvY2F0aW9uIGJlY29tZXMgdGhlIG9ubHkKICAgICAgLy8gaGVhcCBhbGlhcyBmb3IgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24uCiAgICAgIGlmICh1c2UgaXMgSENyZWF0ZSkgcmV0dXJuIGludGVyZXN0aW5nVXNlKHVzZSwgaGVhcERlcHRoICsgMSk7CiAgICAgIGlmICh1c2UgaXMgSExpdGVyYWxMaXN0KSByZXR1cm4gaW50ZXJlc3RpbmdVc2UodXNlLCBoZWFwRGVwdGggKyAxKTsKICAgICAgaWYgKHVzZSBpcyBISW52b2tlU3RhdGljKSB7CiAgICAgICAgLy8gQXNzdW1lIHRoZSBhcmd1bWVudCBlc2NhcGVzLiBBbGwgd2UgZG8gd2l0aCBvdXIgaW5pdGlhbCBhbGxvY2F0aW9uIGlzCiAgICAgICAgLy8gaGF2ZSBpdCBlc2NhcGUgb3Igc3RvcmUgaXQgaW50byBhbiBvYmplY3QgdGhhdCBlc2NhcGVzLgogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAvLyBUT0RPKHNyYSk6IEhhbmRsZSBsaWJyYXJ5IGZ1bmN0aW9ucyB0aGF0IHdlIGtub3cgZG8gbm90IG1vZGlmeSBvcgogICAgICAgIC8vIGxlYWsgdGhlIGlucHV0cy4gRm9yIGV4YW1wbGUgYHNldFJ1bnRpbWVUeXBlSW5mb2AgaXMgdXNlZCB0byBtYXJrCiAgICAgICAgLy8gbGlzdCBsaXRlcmFscyB3aXRoIHR5cGUgaW5mb3JtYXRpb24uCiAgICAgIH0KICAgICAgaWYgKHVzZSBpcyBIUGhpKSB7CiAgICAgICAgLy8gVGhlIGluaXRpYWwgYWxsb2NhdGlvbiAoaXQncyBvbmx5IGFsaWFzKSBnZXRzIG1lcmdlZCBvdXQgb2YgdGhlIG1vZGVsCiAgICAgICAgLy8gb2YgdGhlIGhlYXAgYmVmb3JlIGxvYWQuCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHJldHVybiBpbnRlcmVzdGluZ1VzZShpbnN0cnVjdGlvbiwgMCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5zdHJ1Y3Rpb24oSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBpZiAoaW5zdHJ1Y3Rpb24uaXNBbGxvY2F0aW9uKF9hYnN0cmFjdFZhbHVlRG9tYWluKSkgewogICAgICBtZW1vcnlTZXQucmVnaXN0ZXJBbGxvY2F0aW9uKGluc3RydWN0aW9uKTsKICAgIH0KICAgIG1lbW9yeVNldC5raWxsQWZmZWN0ZWRCeShpbnN0cnVjdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGF6eVN0YXRpYyhITGF6eVN0YXRpYyBpbnN0cnVjdGlvbikgewogICAgRmllbGRFbnRpdHkgZmllbGQgPSBpbnN0cnVjdGlvbi5lbGVtZW50OwogICAgaGFuZGxlU3RhdGljTG9hZChmaWVsZCwgaW5zdHJ1Y3Rpb24pOwogIH0KCiAgdm9pZCBoYW5kbGVTdGF0aWNMb2FkKE1lbWJlckVudGl0eSBlbGVtZW50LCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIEhJbnN0cnVjdGlvbiBleGlzdGluZyA9IG1lbW9yeVNldC5sb29rdXBGaWVsZFZhbHVlKGVsZW1lbnQsIG51bGwpOwogICAgaWYgKGV4aXN0aW5nICE9IG51bGwpIHsKICAgICAgY2hlY2tOZXdHdm5DYW5kaWRhdGVzKGluc3RydWN0aW9uLCBleGlzdGluZyk7CiAgICAgIGluc3RydWN0aW9uLmJsb2NrLnJld3JpdGVXaXRoQmV0dGVyVXNlcihpbnN0cnVjdGlvbiwgZXhpc3RpbmcpOwogICAgICBpbnN0cnVjdGlvbi5ibG9jay5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogICAgfSBlbHNlIHsKICAgICAgbWVtb3J5U2V0LnJlZ2lzdGVyRmllbGRWYWx1ZShlbGVtZW50LCBudWxsLCBpbnN0cnVjdGlvbik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RhdGljKEhTdGF0aWMgaW5zdHJ1Y3Rpb24pIHsKICAgIGhhbmRsZVN0YXRpY0xvYWQoaW5zdHJ1Y3Rpb24uZWxlbWVudCwgaW5zdHJ1Y3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0YXRpY1N0b3JlKEhTdGF0aWNTdG9yZSBpbnN0cnVjdGlvbikgewogICAgaWYgKG1lbW9yeVNldC5yZWdpc3RlckZpZWxkVmFsdWVVcGRhdGUoCiAgICAgICAgaW5zdHJ1Y3Rpb24uZWxlbWVudCwgbnVsbCwgaW5zdHJ1Y3Rpb24uaW5wdXRzLmxhc3QpKSB7CiAgICAgIGluc3RydWN0aW9uLmJsb2NrLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGl0ZXJhbExpc3QoSExpdGVyYWxMaXN0IGluc3RydWN0aW9uKSB7CiAgICBtZW1vcnlTZXQucmVnaXN0ZXJBbGxvY2F0aW9uKGluc3RydWN0aW9uKTsKICAgIG1lbW9yeVNldC5raWxsQWZmZWN0ZWRCeShpbnN0cnVjdGlvbik7CiAgICAvLyBUT0RPKHNyYSk6IFNldCBpbml0aWFsIGtleWVkIHZhbHVlcy4KICAgIC8vIFRPRE8oc3JhKTogU2V0IGluaXRpYWwgbGVuZ3RoLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEluZGV4KEhJbmRleCBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gaW5zdHJ1Y3Rpb24ucmVjZWl2ZXIubm9uQ2hlY2soKTsKICAgIEhJbnN0cnVjdGlvbiBleGlzdGluZyA9CiAgICAgICAgbWVtb3J5U2V0Lmxvb2t1cEtleWVkVmFsdWUocmVjZWl2ZXIsIGluc3RydWN0aW9uLmluZGV4KTsKICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgIGNoZWNrTmV3R3ZuQ2FuZGlkYXRlcyhpbnN0cnVjdGlvbiwgZXhpc3RpbmcpOwogICAgICBpbnN0cnVjdGlvbi5ibG9jay5yZXdyaXRlV2l0aEJldHRlclVzZXIoaW5zdHJ1Y3Rpb24sIGV4aXN0aW5nKTsKICAgICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIG1lbW9yeVNldC5yZWdpc3RlcktleWVkVmFsdWUocmVjZWl2ZXIsIGluc3RydWN0aW9uLmluZGV4LCBpbnN0cnVjdGlvbik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW5kZXhBc3NpZ24oSEluZGV4QXNzaWduIGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSBpbnN0cnVjdGlvbi5yZWNlaXZlci5ub25DaGVjaygpOwogICAgbWVtb3J5U2V0LnJlZ2lzdGVyS2V5ZWRWYWx1ZVVwZGF0ZSgKICAgICAgICByZWNlaXZlciwgaW5zdHJ1Y3Rpb24uaW5kZXgsIGluc3RydWN0aW9uLnZhbHVlKTsKICB9CgogIC8vIFB1cmUgb3BlcmF0aW9ucyB0aGF0IGRvIG5vdCBlc2NhcGUgdGhlaXIgaW5wdXRzLgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCaW5hcnlBcml0aG1ldGljKEhCaW5hcnlBcml0aG1ldGljIGluc3RydWN0aW9uKSB7fQogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCb3VuZHNDaGVjayhIQm91bmRzQ2hlY2sgaW5zdHJ1Y3Rpb24pIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0YW50KEhDb25zdGFudCBpbnN0cnVjdGlvbikge30KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SWYoSElmIGluc3RydWN0aW9uKSB7fQogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcmNlcHRvcihISW50ZXJjZXB0b3IgaW5zdHJ1Y3Rpb24pIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdElzKEhJcyBpbnN0cnVjdGlvbikge30KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SXNWaWFJbnRlcmNlcHRvcihISXNWaWFJbnRlcmNlcHRvciBpbnN0cnVjdGlvbikge30KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Tm90KEhOb3QgaW5zdHJ1Y3Rpb24pIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFBhcmFtZXRlclZhbHVlKEhQYXJhbWV0ZXJWYWx1ZSBpbnN0cnVjdGlvbikge30KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UmVsYXRpb25hbChIUmVsYXRpb25hbCBpbnN0cnVjdGlvbikge30KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nQ29uY2F0KEhTdHJpbmdDb25jYXQgaW5zdHJ1Y3Rpb24pIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVLbm93bihIVHlwZUtub3duIGluc3RydWN0aW9uKSB7fQogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlSW5mb1JlYWRSYXcoSFR5cGVJbmZvUmVhZFJhdyBpbnN0cnVjdGlvbikge30KICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUluZm9SZWFkVmFyaWFibGUoSFR5cGVJbmZvUmVhZFZhcmlhYmxlIGluc3RydWN0aW9uKSB7fQogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlSW5mb0V4cHJlc3Npb24oSFR5cGVJbmZvRXhwcmVzc2lvbiBpbnN0cnVjdGlvbikge30KfQoKLy8vIEEgbm9uLWZpZWxkIGJhc2VkIGZlYXR1cmUgb2YgYW4gb2JqZWN0LgplbnVtIE1lbW9yeUZlYXR1cmUgewogIC8vIEFjY2VzcyB0byB0aGUgYGxlbmd0aGAgcHJvcGVydHkgb2YgYSBgSlNJbmRleGFibGVgLgogIGxlbmd0aCwKfQoKLy8vIEhvbGRzIHZhbHVlcyBvZiBtZW1vcnkgcGxhY2VzLgovLy8KLy8vIEdlbmVyYWxseSwgdmFsdWVzIHRoYXQgbmFtZSBhIHBsYWNlIChhIHJlY2VpdmVyKSBoYXZlIHR5cGUgcmVmaW5lbWVudHMgYW5kCi8vLyBvdGhlciBjaGVja3MgcmVtb3ZlZCB0byBlbnN1cmUgdGhhdCBjaGVja3MgYW5kIHR5cGUgcmVmaW5lbWVudHMgZG8gbm90Ci8vLyBjb25mdXNlIGFsaWFzaW5nLiAgVmFsdWVzIHN0b3JlZCBpbnRvIGEgbWVtb3J5IHBsYWNlIGtlZXAgdGhlIHR5cGUKLy8vIHJlZmluZW1lbnRzIHRvIGhlbHAgZnVydGhlciBvcHRpbWl6YXRpb25zLgpjbGFzcyBNZW1vcnlTZXQgewogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKCiAgLy8vIE1hcHMgYSBmaWVsZCB0byBhIG1hcCBvZiByZWNlaXZlcnMgdG8gdGhlaXIgY3VycmVudCBmaWVsZCB2YWx1ZXMuCiAgLy8vCiAgLy8vIFRoZSBmaWVsZCBpcyBlaXRoZXIgYSBbRmllbGRFbnRpdHldLCBhIFtGdW5jdGlvbkVudGl0eV0gaW4gY2FzZSBvZgogIC8vLyBpbnN0YW5jZSBtZXRob2RzLCBvciBhIFtNZW1vcnlGZWF0dXJlXSBmb3IgYGxlbmd0aGAgYWNjZXNzIG9uCiAgLy8vIGBKU0luZGV4YWJsZWAuCiAgLy8vCiAgLy8gVE9ETygyNTU0NCk6IFNwbGl0IGxlbmd0aCBlZmZlY3RzIGZyb20gb3RoZXIgZWZmZWN0cyBhbmQgbW9kZWwgbGVuZ3RocwogIC8vIHNlcGFyYXRlbHkuCiAgZmluYWwgTWFwPE9iamVjdCAvKk1lbWJlckVudGl0eXxNZW1vcnlGZWF0dXJlKi8sCiAgICAgICAgICBNYXA8SEluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24+PgogICAgICBmaWVsZFZhbHVlcyA9IDxPYmplY3QsIE1hcDxISW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbj4+e307CgogIC8vLyBNYXBzIGEgcmVjZWl2ZXIgdG8gYSBtYXAgb2Yga2V5cyB0byB2YWx1ZS4KICBmaW5hbCBNYXA8SEluc3RydWN0aW9uLCBNYXA8SEluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24+PiBrZXllZFZhbHVlcyA9CiAgICAgIDxISW5zdHJ1Y3Rpb24sIE1hcDxISW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbj4+e307CgogIC8vLyBTZXQgb2Ygb2JqZWN0cyB0aGF0IHdlIGtub3cgZG9uJ3QgZXNjYXBlIHRoZSBjdXJyZW50IGZ1bmN0aW9uLgogIGZpbmFsIFNldGxldDxISW5zdHJ1Y3Rpb24+IG5vbkVzY2FwaW5nUmVjZWl2ZXJzID0gbmV3IFNldGxldDxISW5zdHJ1Y3Rpb24+KCk7CgogIE1lbW9yeVNldCh0aGlzLmNsb3NlZFdvcmxkKTsKCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgX2Fic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgLy8vIFJldHVybnMgd2hldGhlciBbZmlyc3RdIGFuZCBbc2Vjb25kXSBhbHdheXMgYWxpYXMgdG8gdGhlIHNhbWUgb2JqZWN0LgogIGJvb2wgbXVzdEFsaWFzKEhJbnN0cnVjdGlvbiBmaXJzdCwgSEluc3RydWN0aW9uIHNlY29uZCkgewogICAgcmV0dXJuIGZpcnN0ID09IHNlY29uZDsKICB9CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgW2ZpcnN0XSBhbmQgW3NlY29uZF0gbWF5IGFsaWFzIHRvIHRoZSBzYW1lIG9iamVjdC4KICBib29sIG1heUFsaWFzKEhJbnN0cnVjdGlvbiBmaXJzdCwgSEluc3RydWN0aW9uIHNlY29uZCkgewogICAgaWYgKG11c3RBbGlhcyhmaXJzdCwgc2Vjb25kKSkgcmV0dXJuIHRydWU7CiAgICBpZiAoaXNDb25jcmV0ZShmaXJzdCkgJiYgaXNDb25jcmV0ZShzZWNvbmQpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAobm9uRXNjYXBpbmdSZWNlaXZlcnMuY29udGFpbnMoZmlyc3QpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAobm9uRXNjYXBpbmdSZWNlaXZlcnMuY29udGFpbnMoc2Vjb25kKSkgcmV0dXJuIGZhbHNlOwogICAgLy8gVHlwZWQgYXJyYXlzIG9mIGRpZmZlcmVudCB0eXBlcyBtaWdodCBoYXZlIGEgc2hhcmVkIGJ1ZmZlci4KICAgIGlmIChjb3VsZEJlVHlwZWRBcnJheShmaXJzdCkgJiYgY291bGRCZVR5cGVkQXJyYXkoc2Vjb25kKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuYXJlRGlzam9pbnQoZmlyc3QuaW5zdHJ1Y3Rpb25UeXBlLCBzZWNvbmQuaW5zdHJ1Y3Rpb25UeXBlKQogICAgICAgIC5pc1BvdGVudGlhbGx5RmFsc2U7CiAgfQoKICBib29sIGlzRmluYWwoT2JqZWN0IGVsZW1lbnQpIHsKICAgIHJldHVybiBlbGVtZW50IGlzIE1lbWJlckVudGl0eSAmJiBjbG9zZWRXb3JsZC5maWVsZE5ldmVyQ2hhbmdlcyhlbGVtZW50KTsKICB9CgogIGJvb2wgaXNDb25jcmV0ZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIHJldHVybiBpbnN0cnVjdGlvbiBpcyBIQ3JlYXRlIHx8CiAgICAgICAgaW5zdHJ1Y3Rpb24gaXMgSENvbnN0YW50IHx8CiAgICAgICAgaW5zdHJ1Y3Rpb24gaXMgSExpdGVyYWxMaXN0OwogIH0KCiAgYm9vbCBjb3VsZEJlVHlwZWRBcnJheShISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIpIHsKICAgIHJldHVybiBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgLmNvdWxkQmVUeXBlZEFycmF5KHJlY2VpdmVyLmluc3RydWN0aW9uVHlwZSkKICAgICAgICAuaXNQb3RlbnRpYWxseVRydWU7CiAgfQoKICAvLy8gUmV0dXJucyB3aGV0aGVyIFtyZWNlaXZlcl0gZXNjYXBlcyB0aGUgY3VycmVudCBmdW5jdGlvbi4KICBib29sIGVzY2FwZXMoSEluc3RydWN0aW9uIHJlY2VpdmVyKSB7CiAgICBhc3NlcnQocmVjZWl2ZXIgPT0gbnVsbCB8fCByZWNlaXZlciA9PSByZWNlaXZlci5ub25DaGVjaygpKTsKICAgIHJldHVybiAhbm9uRXNjYXBpbmdSZWNlaXZlcnMuY29udGFpbnMocmVjZWl2ZXIpOwogIH0KCiAgdm9pZCByZWdpc3RlckFsbG9jYXRpb24oSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24gPT0gaW5zdHJ1Y3Rpb24ubm9uQ2hlY2soKSk7CiAgICBub25Fc2NhcGluZ1JlY2VpdmVycy5hZGQoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgLy8vIFNldHMgdGhlIFtmaWVsZF0gb24gW3JlY2VpdmVyXSB0byBjb250YWluIFt2YWx1ZV0uIEtpbGxzIGFsbCBwb3RlbnRpYWwKICAvLy8gcGxhY2VzIHRoYXQgbWF5IGJlIGFmZmVjdGVkIGJ5IHRoaXMgdXBkYXRlLiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdXBkYXRlCiAgLy8vIGlzIHJlZHVuZGFudC4KICBib29sIHJlZ2lzdGVyRmllbGRWYWx1ZVVwZGF0ZSgKICAgICAgT2JqZWN0IGZpZWxkLCBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsIEhJbnN0cnVjdGlvbiB2YWx1ZSkgewogICAgYXNzZXJ0KGZpZWxkIGlzIE1lbWJlckVudGl0eSB8fCBmaWVsZCBpcyBNZW1vcnlGZWF0dXJlLAogICAgICAgICJVbmV4cGVjdGVkIG1lbWJlci9mZWF0dXJlOiAkZmllbGQiKTsKICAgIGFzc2VydChyZWNlaXZlciA9PSBudWxsIHx8IHJlY2VpdmVyID09IHJlY2VpdmVyLm5vbkNoZWNrKCkpOwogICAgaWYgKGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNOYXRpdmVNZW1iZXIoZmllbGQpKSB7CiAgICAgIHJldHVybiBmYWxzZTsgLy8gVE9ETygxNDk1NSk6IFJlbW92ZSB0aGlzIHJlc3RyaWN0aW9uPwogICAgfQogICAgLy8gW3ZhbHVlXSBpcyBiZWluZyBzZXQgaW4gc29tZSBwbGFjZSBpbiBtZW1vcnksIHdlIHJlbW92ZSBpdCBmcm9tIHRoZQogICAgLy8gbm9uLWVzY2FwaW5nIHNldC4KICAgIG5vbkVzY2FwaW5nUmVjZWl2ZXJzLnJlbW92ZSh2YWx1ZS5ub25DaGVjaygpKTsKICAgIE1hcDxISW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbj4gbWFwID0KICAgICAgICBmaWVsZFZhbHVlcy5wdXRJZkFic2VudChmaWVsZCwgKCkgPT4gPEhJbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uPnt9KTsKICAgIGJvb2wgaXNSZWR1bmRhbnQgPSBtYXBbcmVjZWl2ZXJdID09IHZhbHVlOwogICAgbWFwLmZvckVhY2goKGtleSwgdmFsdWUpIHsKICAgICAgaWYgKG1heUFsaWFzKHJlY2VpdmVyLCBrZXkpKSBtYXBba2V5XSA9IG51bGw7CiAgICB9KTsKICAgIG1hcFtyZWNlaXZlcl0gPSB2YWx1ZTsKICAgIHJldHVybiBpc1JlZHVuZGFudDsKICB9CgogIC8vLyBSZWdpc3RlcnMgdGhhdCB0aGUgW2ZpZWxkXSBvbiBbcmVjZWl2ZXJdIGlzIG5vdyBbdmFsdWVdLgogIHZvaWQgcmVnaXN0ZXJGaWVsZFZhbHVlKAogICAgICBPYmplY3QgZmllbGQsIEhJbnN0cnVjdGlvbiByZWNlaXZlciwgSEluc3RydWN0aW9uIHZhbHVlKSB7CiAgICBhc3NlcnQoZmllbGQgaXMgTWVtYmVyRW50aXR5IHx8IGZpZWxkIGlzIE1lbW9yeUZlYXR1cmUsCiAgICAgICAgIlVuZXhwZWN0ZWQgbWVtYmVyL2ZlYXR1cmU6ICRmaWVsZCIpOwogICAgYXNzZXJ0KHJlY2VpdmVyID09IG51bGwgfHwgcmVjZWl2ZXIgPT0gcmVjZWl2ZXIubm9uQ2hlY2soKSk7CiAgICBpZiAoZmllbGQgaXMgTWVtYmVyRW50aXR5ICYmIGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNOYXRpdmVNZW1iZXIoZmllbGQpKSB7CiAgICAgIHJldHVybjsgLy8gVE9ETygxNDk1NSk6IFJlbW92ZSB0aGlzIHJlc3RyaWN0aW9uPwogICAgfQogICAgTWFwPEhJbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uPiBtYXAgPQogICAgICAgIGZpZWxkVmFsdWVzLnB1dElmQWJzZW50KGZpZWxkLCAoKSA9PiA8SEluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24+e30pOwogICAgbWFwW3JlY2VpdmVyXSA9IHZhbHVlOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHZhbHVlIHN0b3JlZCBmb3IgW2ZpZWxkXSBvbiBbcmVjZWl2ZXJdLiBSZXR1cm5zIGBudWxsYCBpZiB3ZQogIC8vLyBkb24ndCBrbm93LgogIEhJbnN0cnVjdGlvbiBsb29rdXBGaWVsZFZhbHVlKE9iamVjdCBmaWVsZCwgSEluc3RydWN0aW9uIHJlY2VpdmVyKSB7CiAgICBhc3NlcnQoZmllbGQgaXMgTWVtYmVyRW50aXR5IHx8IGZpZWxkIGlzIE1lbW9yeUZlYXR1cmUsCiAgICAgICAgIlVuZXhwZWN0ZWQgbWVtYmVyL2ZlYXR1cmU6ICRmaWVsZCIpOwogICAgYXNzZXJ0KHJlY2VpdmVyID09IG51bGwgfHwgcmVjZWl2ZXIgPT0gcmVjZWl2ZXIubm9uQ2hlY2soKSk7CiAgICBNYXA8SEluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24+IG1hcCA9IGZpZWxkVmFsdWVzW2ZpZWxkXTsKICAgIHJldHVybiAobWFwID09IG51bGwpID8gbnVsbCA6IG1hcFtyZWNlaXZlcl07CiAgfQoKICAvLy8gS2lsbCBhbGwgcGxhY2VzIHRoYXQgbWF5IGJlIGFmZmVjdGVkIGJ5IHRoaXMgW2luc3RydWN0aW9uXS4gQWxzbyB1cGRhdGUKICAvLy8gdGhlIHNldCBvZiBub24tZXNjYXBpbmcgb2JqZWN0cyBpbiBjYXNlIFtpbnN0cnVjdGlvbl0gaGFzIG5vbi1lc2NhcGluZwogIC8vLyBvYmplY3RzIGluIGl0cyBpbnB1dHMuCiAgdm9pZCBraWxsQWZmZWN0ZWRCeShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIEV2ZW4gaWYgW2luc3RydWN0aW9uXSBkb2VzIG5vdCBoYXZlIHNpZGUgZWZmZWN0cywgaXQgbWF5IHVzZSBub24tZXNjYXBpbmcKICAgIC8vIG9iamVjdHMgYW5kIHN0b3JlIHRoZW0gaW4gYSBuZXcgb2JqZWN0LCB3aGljaCBtYWtlIHRoZXNlIG9iamVjdHMKICAgIC8vIGVzY2FwaW5nLgogICAgaW5zdHJ1Y3Rpb24uaW5wdXRzLmZvckVhY2goKGlucHV0KSB7CiAgICAgIG5vbkVzY2FwaW5nUmVjZWl2ZXJzLnJlbW92ZShpbnB1dC5ub25DaGVjaygpKTsKICAgIH0pOwoKICAgIGlmIChpbnN0cnVjdGlvbi5zaWRlRWZmZWN0cy5jaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eSgpIHx8CiAgICAgICAgaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuY2hhbmdlc1N0YXRpY1Byb3BlcnR5KCkpIHsKICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IHJlY2VpdmVyc1RvUmVtb3ZlID0gPEhJbnN0cnVjdGlvbj5bXTsKCiAgICAgIExpc3Q8T2JqZWN0PiBmaWVsZHNUb1JlbW92ZTsKICAgICAgZmllbGRWYWx1ZXMuZm9yRWFjaCgoT2JqZWN0IGVsZW1lbnQsIG1hcCkgewogICAgICAgIGlmIChpc0ZpbmFsKGVsZW1lbnQpKSByZXR1cm47CiAgICAgICAgbWFwLmZvckVhY2goKHJlY2VpdmVyLCB2YWx1ZSkgewogICAgICAgICAgaWYgKGVzY2FwZXMocmVjZWl2ZXIpKSB7CiAgICAgICAgICAgIHJlY2VpdmVyc1RvUmVtb3ZlLmFkZChyZWNlaXZlcik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHJlY2VpdmVyc1RvUmVtb3ZlLmxlbmd0aCA9PSBtYXAubGVuZ3RoKSB7CiAgICAgICAgICAvLyBSZW1vdmUgdGhlbSBhbGwgYnkgcmVtb3ZpbmcgdGhlIGVudGlyZSBtYXAuCiAgICAgICAgICAoZmllbGRzVG9SZW1vdmUgPz89IDxPYmplY3Q+W10pLmFkZChlbGVtZW50KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVjZWl2ZXJzVG9SZW1vdmUuZm9yRWFjaChtYXAucmVtb3ZlKTsKICAgICAgICB9CiAgICAgICAgcmVjZWl2ZXJzVG9SZW1vdmUuY2xlYXIoKTsKICAgICAgfSk7CiAgICAgIGZpZWxkc1RvUmVtb3ZlPy5mb3JFYWNoKGZpZWxkVmFsdWVzLnJlbW92ZSk7CiAgICB9CgogICAgaWYgKGluc3RydWN0aW9uLnNpZGVFZmZlY3RzLmNoYW5nZXNJbmRleCgpKSB7CiAgICAgIGtleWVkVmFsdWVzLmZvckVhY2goKHJlY2VpdmVyLCBtYXApIHsKICAgICAgICBpZiAoZXNjYXBlcyhyZWNlaXZlcikpIHsKICAgICAgICAgIG1hcC5mb3JFYWNoKChpbmRleCwgdmFsdWUpIHsKICAgICAgICAgICAgbWFwW2luZGV4XSA9IG51bGw7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgdGhlIHZhbHVlIHN0b3JlZCBpbiBgcmVjZWl2ZXJbaW5kZXhdYC4gUmV0dXJucyBudWxsIGlmIHdlIGRvbid0CiAgLy8vIGtub3cuCiAgSEluc3RydWN0aW9uIGxvb2t1cEtleWVkVmFsdWUoSEluc3RydWN0aW9uIHJlY2VpdmVyLCBISW5zdHJ1Y3Rpb24gaW5kZXgpIHsKICAgIE1hcDxISW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbj4gbWFwID0ga2V5ZWRWYWx1ZXNbcmVjZWl2ZXJdOwogICAgcmV0dXJuIChtYXAgPT0gbnVsbCkgPyBudWxsIDogbWFwW2luZGV4XTsKICB9CgogIC8vLyBSZWdpc3RlcnMgdGhhdCBgcmVjZWl2ZXJbaW5kZXhdYCBpcyBub3cgW3ZhbHVlXS4KICB2b2lkIHJlZ2lzdGVyS2V5ZWRWYWx1ZSgKICAgICAgSEluc3RydWN0aW9uIHJlY2VpdmVyLCBISW5zdHJ1Y3Rpb24gaW5kZXgsIEhJbnN0cnVjdGlvbiB2YWx1ZSkgewogICAgTWFwPEhJbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uPiBtYXAgPQogICAgICAgIGtleWVkVmFsdWVzLnB1dElmQWJzZW50KHJlY2VpdmVyLCAoKSA9PiA8SEluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24+e30pOwogICAgbWFwW2luZGV4XSA9IHZhbHVlOwogIH0KCiAgLy8vIFNldHMgYHJlY2VpdmVyW2luZGV4XWAgdG8gY29udGFpbiBbdmFsdWVdLiBLaWxscyBhbGwgcG90ZW50aWFsIHBsYWNlcyB0aGF0CiAgLy8vIG1heSBiZSBhZmZlY3RlZCBieSB0aGlzIHVwZGF0ZS4KICB2b2lkIHJlZ2lzdGVyS2V5ZWRWYWx1ZVVwZGF0ZSgKICAgICAgSEluc3RydWN0aW9uIHJlY2VpdmVyLCBISW5zdHJ1Y3Rpb24gaW5kZXgsIEhJbnN0cnVjdGlvbiB2YWx1ZSkgewogICAgbm9uRXNjYXBpbmdSZWNlaXZlcnMucmVtb3ZlKHZhbHVlLm5vbkNoZWNrKCkpOwogICAga2V5ZWRWYWx1ZXMuZm9yRWFjaCgoa2V5LCB2YWx1ZXMpIHsKICAgICAgaWYgKG1heUFsaWFzKHJlY2VpdmVyLCBrZXkpKSB7CiAgICAgICAgLy8gVHlwZWQgYXJyYXlzIHRoYXQgYXJlIHZpZXdzIG9mIHRoZSBzYW1lIGJ1ZmZlciBtYXkgaGF2ZSBkaWZmZXJlbnQKICAgICAgICAvLyBvZmZzZXRzIG9yIGVsZW1lbnQgc2l6ZXMsIHVubGVzcyB0aGV5IGFyZSB0aGUgc2FtZSB0eXBlZCBhcnJheS4KICAgICAgICBib29sIHdlYWtJbmRleCA9IGNvdWxkQmVUeXBlZEFycmF5KGtleSkgJiYgIW11c3RBbGlhcyhyZWNlaXZlciwga2V5KTsKICAgICAgICB2YWx1ZXMuZm9yRWFjaCgob3RoZXJJbmRleCwgb3RoZXJWYWx1ZSkgewogICAgICAgICAgaWYgKHdlYWtJbmRleCB8fCBtYXlBbGlhcyhpbmRleCwgb3RoZXJJbmRleCkpIHsKICAgICAgICAgICAgdmFsdWVzW290aGVySW5kZXhdID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfSk7CgogICAgLy8gVHlwZWQgYXJyYXlzIG1heSBuYXJyb3cgaW5jb21pbmcgdmFsdWVzLgogICAgaWYgKGNvdWxkQmVUeXBlZEFycmF5KHJlY2VpdmVyKSkgcmV0dXJuOwoKICAgIE1hcDxISW5zdHJ1Y3Rpb24sIEhJbnN0cnVjdGlvbj4gbWFwID0KICAgICAgICBrZXllZFZhbHVlcy5wdXRJZkFic2VudChyZWNlaXZlciwgKCkgPT4gPEhJbnN0cnVjdGlvbiwgSEluc3RydWN0aW9uPnt9KTsKICAgIG1hcFtpbmRleF0gPSB2YWx1ZTsKICB9CgogIC8vLyBSZXR1cm5zIGEgY29tbW9uIGluc3RydWN0aW9uIGZvciBbZmlyc3RdIGFuZCBbc2Vjb25kXS4KICAvLy8KICAvLy8gUmV0dXJucyBgbnVsbGAgaWYgZWl0aGVyIFtmaXJzdF0gb3IgW3NlY29uZF0gaXMgbnVsbC4gUmV0dXJucyBbZmlyc3RdIGlmCiAgLy8vIFtmaXJzdF0gYW5kIFtzZWNvbmRdIGFyZSBlcXVhbC4gT3RoZXJ3aXNlIGNyZWF0ZXMgb3IgcmUtdXNlcyBhIHBoaSBpbgogIC8vLyBbYmxvY2tdIHRoYXQgaG9sZHMgW2ZpcnN0XSBhbmQgW3NlY29uZF0uCiAgSEluc3RydWN0aW9uIGZpbmRDb21tb25JbnN0cnVjdGlvbihISW5zdHJ1Y3Rpb24gZmlyc3QsIEhJbnN0cnVjdGlvbiBzZWNvbmQsCiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrLCBpbnQgcHJlZGVjZXNzb3JJbmRleCkgewogICAgaWYgKGZpcnN0ID09IG51bGwgfHwgc2Vjb25kID09IG51bGwpIHJldHVybiBudWxsOwogICAgaWYgKGZpcnN0ID09IHNlY29uZCkgcmV0dXJuIGZpcnN0OwogICAgaWYgKHNlY29uZCBpcyBIR2V0TGVuZ3RoKSB7CiAgICAgIC8vIERvbid0IGFsd2F5cyBjcmVhdGUgcGhpcyBmb3IgSEdldExlbmd0aC4gVGhlIHBoaSBjb25mdXNlcyBhcnJheSBib3VuZHMKICAgICAgLy8gY2hlY2sgZWxpbWluYXRpb24gYW5kIHRoZSByZXN1bHRpbmcgdmFyaWFibGUtaGVhdnkgY29kZSBwcm9iYWJseSBpcwogICAgICAvLyBjb25mdXNpbmcgZm9yIEphdmFTY3JpcHQgVk1zLiBJbiBwcmFjdGljZSwgdGhpcyBtb3N0bHkgYWZmZWN0cyB0aGUKICAgICAgLy8gZXhwYW5zaW9uIG9mIGZvci1pbiBsb29wcyBvbiBBcnJheXMsIHNvIHdlIG1hdGNoIHRoZSBleHByZXNzaW9uCiAgICAgIC8vCiAgICAgIC8vICAgICBjaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcihhcnJheS5sZW5ndGggPT0gX2VuZCwgYXJyYXkpCiAgICAgIC8vCiAgICAgIC8vIHN0YXJ0aW5nIHdpdGggdGhlIEhHZXRMZW5ndGggb2YgdGhlIGBhcnJheS5sZW5ndGhgLCBpbiB0aGUgY2FzZSB3aGVyZQogICAgICAvLyBgYXJyYXkubGVuZ3RoYCBpcyBub3QgdXNlZCBlbHNld2hlcmUgKGkuZS4gbm90IGFscmVhZHkgb3B0aW1pemVkIHRvIHVzZQogICAgICAvLyBhIHByZXZpb3VzIHVzZSwgaW4gdGhlIGxvb3AgY29uZGl0aW9uKS4KICAgICAgLy8KICAgICAgLy8gVE9ETyhzcmEpOiBGaWd1cmUgb3V0IGEgYmV0dGVyIHdheSBlbnN1cmUgJ25pY2UnIGxvb3AgY29kZS4KICAgICAgLy8gVE9ETygyMjQwNyk6IFRoZSBwaGkgd291bGQgbm90IGJlIHNvIGJhZCBpZiBpdCBkaWQgbm90IGNvbmZ1c2UgYm91bmRzCiAgICAgIC8vIGNoZWNrIGVsaW1pbmF0aW9uLgogICAgICAvLyBUT0RPKDI1NDM3KTogV2UgY291bGQgYWRkIGEgcGhpIGlmIHdlIHVuZGlkIHRoZSBoYXJtZnVsIGNhc2VzLgogICAgICBpZiAoc2Vjb25kLnVzZWRCeS5sZW5ndGggPT0gMSkgewogICAgICAgIHZhciB1c2VyID0gc2Vjb25kLnVzZWRCeS5zaW5nbGU7CiAgICAgICAgaWYgKHVzZXIgaXMgSElkZW50aXR5ICYmIHVzZXIudXNlZEJ5Lmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICBISW5zdHJ1Y3Rpb24gdXNlcjIgPSB1c2VyLnVzZWRCeS5zaW5nbGU7CiAgICAgICAgICBpZiAodXNlcjIgaXMgSEludm9rZVN0YXRpYyAmJgogICAgICAgICAgICAgIHVzZXIyLmVsZW1lbnQgPT0KICAgICAgICAgICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuY2hlY2tDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBBYnN0cmFjdFZhbHVlIHBoaVR5cGUgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi51bmlvbigKICAgICAgICBzZWNvbmQuaW5zdHJ1Y3Rpb25UeXBlLCBmaXJzdC5pbnN0cnVjdGlvblR5cGUpOwogICAgaWYgKGZpcnN0IGlzIEhQaGkgJiYgZmlyc3QuYmxvY2sgPT0gYmxvY2spIHsKICAgICAgSFBoaSBwaGkgPSBmaXJzdDsKICAgICAgcGhpLmFkZElucHV0KHNlY29uZCk7CiAgICAgIHBoaS5pbnN0cnVjdGlvblR5cGUgPSBwaGlUeXBlOwogICAgICByZXR1cm4gcGhpOwogICAgfSBlbHNlIHsKICAgICAgSFBoaSBwaGkgPSBuZXcgSFBoaS5ub0lucHV0cyhudWxsLCBwaGlUeXBlKTsKICAgICAgYmxvY2suYWRkUGhpKHBoaSk7CiAgICAgIC8vIFByZXZpb3VzIHByZWRlY2Vzc29ycyBoYWQgdGhlIHNhbWUgaW5wdXQuIEEgcGhpIG11c3QgaGF2ZQogICAgICAvLyB0aGUgc2FtZSBudW1iZXIgb2YgaW5wdXRzIGFzIGl0cyBibG9jayBoYXMgcHJlZGVjZXNzb3JzLgogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHByZWRlY2Vzc29ySW5kZXg7IGkrKykgewogICAgICAgIHBoaS5hZGRJbnB1dChmaXJzdCk7CiAgICAgIH0KICAgICAgcGhpLmFkZElucHV0KHNlY29uZCk7CiAgICAgIHJldHVybiBwaGk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgaW50ZXJzZWN0aW9uIGJldHdlZW4gW3RoaXNdIGFuZCB0aGUgW290aGVyXSBtZW1vcnkgc2V0LgogIE1lbW9yeVNldCBpbnRlcnNlY3Rpb25Gb3IoCiAgICAgIE1lbW9yeVNldCBvdGhlciwgSEJhc2ljQmxvY2sgYmxvY2ssIGludCBwcmVkZWNlc3NvckluZGV4KSB7CiAgICBNZW1vcnlTZXQgcmVzdWx0ID0gbmV3IE1lbW9yeVNldChjbG9zZWRXb3JsZCk7CiAgICBpZiAob3RoZXIgPT0gbnVsbCkgewogICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB2aXNpdCB0byBhIGxvb3AgaGVhZGVyIChbb3RoZXJdIGlzIGBudWxsYCBiZWNhdXNlIHdlCiAgICAgIC8vIGhhdmUgbm90IHZpc2l0ZWQgdGhlIGJhY2sgZWRnZSkuIENvcHkgdGhlIG5vbkVzY2FwaW5nUmVjZWl2ZXJzIHRoYXQgYXJlCiAgICAgIC8vIGd1YXJhbnRlZWQgdG8gc3Vydml2ZSB0aGUgbG9vcCBiZWNhdXNlIHRoZXkgYXJlIG5vdCBlc2NhcGVkIGJlZm9yZQogICAgICAvLyBtZXRob2QgZXhpdC4KICAgICAgLy8gVE9ETyhzcmEpOiBXZSBzaG91bGQgZG8gYSBwcm9wZXIgZGF0YWZsb3cgdG8gZmluZCB0aGUgbWF4aW1hbAogICAgICAvLyBub25Fc2NhcGluZ1JlY2VpdmVycyAoYSB2YXJpYW50IG9mIEF2YWlsYWJsZS1FeHByZXNzaW9ucyksIHdoaWNoIG11c3QKICAgICAgLy8gY29udmVyZ2UgYmVmb3JlIHdlIGVkaXQgdGhlIHByb2dyYW0gaW4gW2ZpbmRDb21tb25JbnN0cnVjdGlvbl0uCiAgICAgIGZvciAoSEluc3RydWN0aW9uIGluc3RydWN0aW9uIGluIG5vbkVzY2FwaW5nUmVjZWl2ZXJzKSB7CiAgICAgICAgYm9vbCBpc05vbkVzY2FwaW5nVXNlKEhJbnN0cnVjdGlvbiB1c2UpIHsKICAgICAgICAgIGlmICh1c2UgaXMgSFJldHVybikgcmV0dXJuIHRydWU7IC8vIEVzY2FwZXMsIGJ1dCBzbyBkb2VzIGNvbnRyb2wuCiAgICAgICAgICBpZiAodXNlIGlzIEhGaWVsZEdldCkgcmV0dXJuIHRydWU7CiAgICAgICAgICBpZiAodXNlIGlzIEhGaWVsZFNldCkgewogICAgICAgICAgICByZXR1cm4gdXNlLnZhbHVlLm5vbkNoZWNrKCkgIT0gaW5zdHJ1Y3Rpb247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodXNlIGlzIEhUeXBlSW5mb1JlYWRWYXJpYWJsZSkgcmV0dXJuIHRydWU7CiAgICAgICAgICBpZiAodXNlIGlzIEhHZXRMZW5ndGgpIHJldHVybiB0cnVlOwogICAgICAgICAgaWYgKHVzZSBpcyBIQm91bmRzQ2hlY2spIHJldHVybiB0cnVlOwogICAgICAgICAgaWYgKHVzZSBpcyBISW5kZXgpIHJldHVybiB0cnVlOwogICAgICAgICAgaWYgKHVzZSBpcyBISW5kZXhBc3NpZ24pIHsKICAgICAgICAgICAgcmV0dXJuIHVzZS52YWx1ZS5ub25DaGVjaygpICE9IGluc3RydWN0aW9uOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHVzZSBpcyBISW50ZXJjZXB0b3IpIHJldHVybiB0cnVlOwogICAgICAgICAgaWYgKHVzZSBpcyBISW52b2tlRHluYW1pY01ldGhvZCkgewogICAgICAgICAgICBNZW1iZXJFbnRpdHkgZWxlbWVudCA9IHVzZS5lbGVtZW50OwogICAgICAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsKSB7CiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNBcnJheUFkZCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHVzZS5pbnB1dHMubGFzdCAhPSBpbnN0cnVjdGlvbjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmICh1c2UgaXMgSEludm9rZVN0YXRpYykgewogICAgICAgICAgICBpZiAodXNlLmVsZW1lbnQgPT0KICAgICAgICAgICAgICAgIGNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmNoZWNrQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKQogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfQoKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmIChpbnN0cnVjdGlvbi51c2VkQnkuZXZlcnkoaXNOb25Fc2NhcGluZ1VzZSkpIHsKICAgICAgICAgIHJlc3VsdC5ub25Fc2NhcGluZ1JlY2VpdmVycy5hZGQoaW5zdHJ1Y3Rpb24pOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIGZpZWxkVmFsdWVzLmZvckVhY2goKGVsZW1lbnQsIHZhbHVlcykgewogICAgICB2YXIgb3RoZXJWYWx1ZXMgPSBvdGhlci5maWVsZFZhbHVlc1tlbGVtZW50XTsKICAgICAgaWYgKG90aGVyVmFsdWVzID09IG51bGwpIHJldHVybjsKICAgICAgdmFsdWVzLmZvckVhY2goKHJlY2VpdmVyLCB2YWx1ZSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGZpbmRDb21tb25JbnN0cnVjdGlvbigKICAgICAgICAgICAgdmFsdWUsIG90aGVyVmFsdWVzW3JlY2VpdmVyXSwgYmxvY2ssIHByZWRlY2Vzc29ySW5kZXgpOwogICAgICAgIGlmIChpbnN0cnVjdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICByZXN1bHQucmVnaXN0ZXJGaWVsZFZhbHVlKGVsZW1lbnQsIHJlY2VpdmVyLCBpbnN0cnVjdGlvbik7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIGtleWVkVmFsdWVzLmZvckVhY2goKHJlY2VpdmVyLCB2YWx1ZXMpIHsKICAgICAgdmFyIG90aGVyVmFsdWVzID0gb3RoZXIua2V5ZWRWYWx1ZXNbcmVjZWl2ZXJdOwogICAgICBpZiAob3RoZXJWYWx1ZXMgPT0gbnVsbCkgcmV0dXJuOwogICAgICB2YWx1ZXMuZm9yRWFjaCgoaW5kZXgsIHZhbHVlKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gZmluZENvbW1vbkluc3RydWN0aW9uKAogICAgICAgICAgICB2YWx1ZSwgb3RoZXJWYWx1ZXNbaW5kZXhdLCBibG9jaywgcHJlZGVjZXNzb3JJbmRleCk7CiAgICAgICAgaWYgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgICAgIHJlc3VsdC5yZWdpc3RlcktleWVkVmFsdWUocmVjZWl2ZXIsIGluZGV4LCBpbnN0cnVjdGlvbik7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwoKICAgIG5vbkVzY2FwaW5nUmVjZWl2ZXJzLmZvckVhY2goKHJlY2VpdmVyKSB7CiAgICAgIGlmIChvdGhlci5ub25Fc2NhcGluZ1JlY2VpdmVycy5jb250YWlucyhyZWNlaXZlcikpIHsKICAgICAgICByZXN1bHQubm9uRXNjYXBpbmdSZWNlaXZlcnMuYWRkKHJlY2VpdmVyKTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFJldHVybnMgYSBjb3B5IG9mIFt0aGlzXSBtZW1vcnkgc2V0LgogIE1lbW9yeVNldCBjbG9uZSgpIHsKICAgIE1lbW9yeVNldCByZXN1bHQgPSBuZXcgTWVtb3J5U2V0KGNsb3NlZFdvcmxkKTsKCiAgICBmaWVsZFZhbHVlcy5mb3JFYWNoKChlbGVtZW50LCB2YWx1ZXMpIHsKICAgICAgcmVzdWx0LmZpZWxkVmFsdWVzW2VsZW1lbnRdID0KICAgICAgICAgIG5ldyBNYXA8SEluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24+LmZyb20odmFsdWVzKTsKICAgIH0pOwoKICAgIGtl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MypOLx80CBsYBAE/G0E8LkFRNwYqThsEAU8SRzwuQT4xBAFOTR0yUUgRKTUIAT07PwEjMiYoIy0MDDY5OBExCiMKMwYBMiwhJx8OCgoGBAFODE1BLgQBNxtHKlEYBAFRJiFHMyglTUtOMjonDAwICAEwLQEqURgEAT0GT0wvTjE2JyBQTUxJCUsJT1ExCUVPHEgnKTwzKB9RGQwKCAY4ODEYHCUSDTMZQ0IzHQgcEgYEAUodQjMZUFFMFkdPST8yTC0iOAw5LjAqJTgMMC0wI0Y3EA4MJh9NGwwBGAoBOjgKCBUGASw0Jyk6RCNFCgoIAS01JyY6QSNDCgoIAS47MwgIEwQBKxYzASwkPAgBLSU8CAE+EwQCASZwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2Evb3B0aW1pemUuZGFydCNzZGtyb290Oi9wa2cvanNfYXN0L2xpYi9qc19hc3QuZGFydIHoLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkganNfYXN0OwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgSXRlcmFibGVCYXNlOwppbXBvcnQgJ3NyYy9wcmVjZWRlbmNlLmRhcnQnOwppbXBvcnQgJ3NyYy9jaGFyYWN0ZXJzLmRhcnQnIGFzIGNoYXJDb2RlczsKCnBhcnQgJ3NyYy9ub2Rlcy5kYXJ0JzsKcGFydCAnc3JjL2J1aWxkZXIuZGFydCc7CnBhcnQgJ3NyYy9wcmludGVyLmRhcnQnOwpwYXJ0ICdzcmMvdGVtcGxhdGUuZGFydCc7CnBhcnQgJ3NyYy9lcXVpdmFsZW5jZV92aXNpdG9yLmRhcnQnOwoRAE5OPAEQASweKwEXGRkaJQEacGFja2FnZTpqc19hc3QvanNfYXN0LmRhcnQoc2Rrcm9vdDovcGtnL2pzX2FzdC9saWIvc3JjL3ByaW50ZXIuZGFydMAAuiEvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBqc19hc3Q7Cgp0eXBlZGVmIFN0cmluZyBSZW5hbWVyKE5hbWUgbmFtZSk7CgpjbGFzcyBKYXZhU2NyaXB0UHJpbnRpbmdPcHRpb25zIHsKICBmaW5hbCBib29sIHNob3VsZENvbXByZXNzT3V0cHV0OwogIGZpbmFsIGJvb2wgbWluaWZ5TG9jYWxWYXJpYWJsZXM7CiAgZmluYWwgYm9vbCBwcmVmZXJTZW1pY29sb25Ub05ld2xpbmVJbk1pbmlmaWVkT3V0cHV0OwogIGZpbmFsIFJlbmFtZXIgcmVuYW1lckZvck5hbWVzOwoKICBjb25zdCBKYXZhU2NyaXB0UHJpbnRpbmdPcHRpb25zKAogICAgICB7dGhpcy5zaG91bGRDb21wcmVzc091dHB1dDogZmFsc2UsCiAgICAgIHRoaXMubWluaWZ5TG9jYWxWYXJpYWJsZXM6IGZhbHNlLAogICAgICB0aGlzLnByZWZlclNlbWljb2xvblRvTmV3bGluZUluTWluaWZpZWRPdXRwdXQ6IGZhbHNlLAogICAgICB0aGlzLnJlbmFtZXJGb3JOYW1lczogaWRlbnRpdHlSZW5hbWVyfSk7CgogIHN0YXRpYyBTdHJpbmcgaWRlbnRpdHlSZW5hbWVyKE5hbWUgbmFtZSkgPT4gbmFtZS5uYW1lOwp9CgovLy8gQW4gZW52aXJvbm1lbnQgaW4gd2hpY2ggSmF2YVNjcmlwdCBwcmludGluZyBpcyBkb25lLiAgUHJvdmlkZXMgZW1pdHRpbmcgb2YKLy8vIHRleHQgYW5kIHByZS0gYW5kIHBvc3QtdmlzaXQgY2FsbGJhY2tzLgphYnN0cmFjdCBjbGFzcyBKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0IHsKICAvLy8gU2lnbmFscyBhbiBlcnJvci4gIFRoaXMgc2hvdWxkIGhhcHBlbiBvbmx5IGZvciBzZXJpb3VzIGludGVybmFsIGVycm9ycy4KICB2b2lkIGVycm9yKFN0cmluZyBtZXNzYWdlKSB7CiAgICB0aHJvdyBtZXNzYWdlOwogIH0KCiAgLy8vIEFkZHMgW3N0cmluZ10gdG8gdGhlIG91dHB1dC4KICB2b2lkIGVtaXQoU3RyaW5nIHN0cmluZyk7CgogIC8vLyBDYWxsYmFjayBmb3IgdGhlIHN0YXJ0IG9mIHByaW50aW5nIG9mIFtub2RlXS4gW3N0YXJ0UG9zaXRpb25dIGlzIHRoZQogIC8vLyBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIG9mIFtub2RlXS4KICAvLy8KICAvLy8gW2VudGVyTm9kZV0gaXMgY2FsbGVkIGluIHByZS10cmF2ZXJzYWwgb3JkZXIuCiAgdm9pZCBlbnRlck5vZGUoTm9kZSBub2RlLCBpbnQgc3RhcnRQb3NpdGlvbikge30KCiAgLy8vIENhbGxiYWNrIGZvciB0aGUgZW5kIG9mIHByaW50aW5nIG9mIFtub2RlXS4gW3N0YXJ0UG9zaXRpb25dIGlzIHRoZQogIC8vLyBwb3NpdGlvbiBvZiB0aGUgZmlyc3Qgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIG9mIFtub2RlXSAoYWxzbyBwcm92aWRlZAogIC8vLyBpbiB0aGUgW2VudGVyTm9kZV0gY2FsbGJhY2spLCBbZW5kUG9zaXRpb25dIGlzIHRoZSBwb3NpdGlvbiBpbW1lZGlhdGVseQogIC8vLyBmb2xsb3dpbmcgdGhlIGxhc3QgY2hhcmFjdGVyIG9mIFtub2RlXS4gW2Nsb3NpbmdQb3NpdGlvbl0gaXMgdGhlCiAgLy8vIHBvc2l0aW9uIG9mIHRoZSBlbmRpbmcgZGVsaW1pdGVyIG9mIFtub2RlXS4gVGhpcyBpcyBvbmx5IHByb3ZpZGVkIGZvcgogIC8vLyBbRnVuXSBub2RlcyBhbmQgaXMgYG51bGxgIG90aGVyd2lzZS4KICAvLy8KICAvLy8gW2VudGVyTm9kZV0gaXMgY2FsbGVkIGluIHBvc3QtdHJhdmVyc2FsIG9yZGVyLgogIHZvaWQgZXhpdE5vZGUoCiAgICAgIE5vZGUgbm9kZSwgaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbiwgaW50IGNsb3NpbmdQb3NpdGlvbikge30KfQoKLy8vIEEgc2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIFtKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0XSBzdWl0YWJsZSBmb3IgdGVzdHMuCmNsYXNzIFNpbXBsZUphdmFTY3JpcHRQcmludGluZ0NvbnRleHQgZXh0ZW5kcyBKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0IHsKICBmaW5hbCBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwoKICB2b2lkIGVtaXQoU3RyaW5nIHN0cmluZykgewogICAgYnVmZmVyLndyaXRlKHN0cmluZyk7CiAgfQoKICBTdHJpbmcgZ2V0VGV4dCgpID0+IGJ1ZmZlci50b1N0cmluZygpOwp9CgpTdHJpbmcgRGVidWdQcmludChOb2RlIG5vZGUpIHsKICBKYXZhU2NyaXB0UHJpbnRpbmdPcHRpb25zIG9wdGlvbnMgPSBuZXcgSmF2YVNjcmlwdFByaW50aW5nT3B0aW9ucygpOwogIFNpbXBsZUphdmFTY3JpcHRQcmludGluZ0NvbnRleHQgY29udGV4dCA9CiAgICAgIG5ldyBTaW1wbGVKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0KCk7CiAgUHJpbnRlciBwcmludGVyID0gbmV3IFByaW50ZXIob3B0aW9ucywgY29udGV4dCk7CiAgcHJpbnRlci52aXNpdChub2RlKTsKICByZXR1cm4gY29udGV4dC5nZXRUZXh0KCk7Cn0KCmNsYXNzIFByaW50ZXIgaW1wbGVtZW50cyBOb2RlVmlzaXRvciB7CiAgZmluYWwgSmF2YVNjcmlwdFByaW50aW5nT3B0aW9ucyBvcHRpb25zOwogIGZpbmFsIEphdmFTY3JpcHRQcmludGluZ0NvbnRleHQgY29udGV4dDsKICBmaW5hbCBib29sIHNob3VsZENvbXByZXNzT3V0cHV0OwogIGZpbmFsIERhbmdsaW5nRWxzZVZpc2l0b3IgZGFuZ2xpbmdFbHNlVmlzaXRvcjsKICBmaW5hbCBMb2NhbE5hbWVyIGxvY2FsTmFtZXI7CgogIGludCBfY2hhckNvdW50ID0gMDsKICBib29sIGluRm9ySW5pdCA9IGZhbHNlOwogIGJvb2wgYXRTdGF0ZW1lbnRCZWdpbiA9IGZhbHNlOwogIGJvb2wgcGVuZGluZ1NlbWljb2xvbiA9IGZhbHNlOwogIGJvb2wgcGVuZGluZ1NwYWNlID0gZmFsc2U7CgogIC8vIFRoZSBjdXJyZW50IGluZGVudGF0aW9uIGxldmVsLgogIGludCBfaW5kZW50TGV2ZWwgPSAwOwogIC8vIEEgY2FjaGUgb2YgYWxsIGluZGVudGF0aW9uIHN0cmluZ3MgdXNlZCBzbyBmYXIuCiAgTGlzdDxTdHJpbmc+IF9pbmRlbnRMaXN0ID0gPFN0cmluZz5bIiJdOwoKICBzdGF0aWMgZmluYWwgaWRlbnRpZmllckNoYXJhY3RlclJlZ0V4cCA9IG5ldyBSZWdFeHAocideW2EtekEtWl8wLTkkXScpOwogIHN0YXRpYyBmaW5hbCBleHByZXNzaW9uQ29udGludWF0aW9uUmVnRXhwID0gbmV3IFJlZ0V4cChyJ15bLSsoW10nKTsKCiAgUHJpbnRlcihKYXZhU2NyaXB0UHJpbnRpbmdPcHRpb25zIG9wdGlvbnMsIEphdmFTY3JpcHRQcmludGluZ0NvbnRleHQgY29udGV4dCkKICAgICAgOiBvcHRpb25zID0gb3B0aW9ucywKICAgICAgICBjb250ZXh0ID0gY29udGV4dCwKICAgICAgICBzaG91bGRDb21wcmVzc091dHB1dCA9IG9wdGlvbnMuc2hvdWxkQ29tcHJlc3NPdXRwdXQsCiAgICAgICAgZGFuZ2xpbmdFbHNlVmlzaXRvciA9IG5ldyBEYW5nbGluZ0Vsc2VWaXNpdG9yKGNvbnRleHQpLAogICAgICAgIGxvY2FsTmFtZXIgPSBkZXRlcm1pbmVSZW5hbWVyKAogICAgICAgICAgICBvcHRpb25zLnNob3VsZENvbXByZXNzT3V0cHV0LCBvcHRpb25zLm1pbmlmeUxvY2FsVmFyaWFibGVzKTsKCiAgc3RhdGljIExvY2FsTmFtZXIgZGV0ZXJtaW5lUmVuYW1lcigKICAgICAgYm9vbCBzaG91bGRDb21wcmVzc091dHB1dCwgYm9vbCBhbGxvd1ZhcmlhYmxlTWluaWZpY2F0aW9uKSB7CiAgICByZXR1cm4gKHNob3VsZENvbXByZXNzT3V0cHV0ICYmIGFsbG93VmFyaWFibGVNaW5pZmljYXRpb24pCiAgICAgICAgPyBuZXcgTWluaWZ5UmVuYW1lcigpCiAgICAgICAgOiBuZXcgSWRlbnRpdHlOYW1lcigpOwogIH0KCiAgLy8gVGhlIGN1cnJlbnQgaW5kZW50YXRpb24gc3RyaW5nLgogIFN0cmluZyBnZXQgaW5kZW50YXRpb24gewogICAgLy8gTGF6aWx5IGFkZCBuZXcgaW5kZW50YXRpb24gc3RyaW5ncyBhcyByZXF1aXJlZC4KICAgIHdoaWxlIChfaW5kZW50TGlzdC5sZW5ndGggPD0gX2luZGVudExldmVsKSB7CiAgICAgIF9pbmRlbnRMaXN0LmFkZChfaW5kZW50TGlzdC5sYXN0ICsgIiAgIik7CiAgICB9CiAgICByZXR1cm4gX2luZGVudExpc3RbX2luZGVudExldmVsXTsKICB9CgogIHZvaWQgaW5kZW50TW9yZSgpIHsKICAgIF9pbmRlbnRMZXZlbCsrOwogIH0KCiAgdm9pZCBpbmRlbnRMZXNzKCkgewogICAgX2luZGVudExldmVsLS07CiAgfQoKICAvLy8gQWx3YXlzIGVtaXQgYSBuZXdsaW5lLCBldmVuIHVuZGVyIGBlbmFibGVNaW5pZmljYXRpb25gLgogIHZvaWQgZm9yY2VMaW5lKCkgewogICAgb3V0KCJcbiIsIGlzV2hpdGVzcGFjZTogdHJ1ZSk7CiAgfQoKICAvLy8gRW1pdHMgYSBuZXdsaW5lIGZvciByZWFkYWJpbGl0eS4KICB2b2lkIGxpbmVPdXQoKSB7CiAgICBpZiAoIXNob3VsZENvbXByZXNzT3V0cHV0KSBmb3JjZUxpbmUoKTsKICB9CgogIHZvaWQgc3BhY2VPdXQoKSB7CiAgICBpZiAoIXNob3VsZENvbXByZXNzT3V0cHV0KSBvdXQoIiAiLCBpc1doaXRlc3BhY2U6IHRydWUpOwogIH0KCiAgU3RyaW5nIGxhc3RBZGRlZFN0cmluZyA9IG51bGw7CgogIGludCBnZXQgbGFzdENoYXJDb2RlIHsKICAgIGlmIChsYXN0QWRkZWRTdHJpbmcgPT0gbnVsbCkgcmV0dXJuIDA7CiAgICBhc3NlcnQobGFzdEFkZGVkU3RyaW5nLmxlbmd0aCAhPSAwKTsKICAgIHJldHVybiBsYXN0QWRkZWRTdHJpbmcuY29kZVVuaXRBdChsYXN0QWRkZWRTdHJpbmcubGVuZ3RoIC0gMSk7CiAgfQoKICB2b2lkIG91dChTdHJpbmcgc3RyLCB7Ym9vbCBpc1doaXRlc3BhY2U6IGZhbHNlfSkgewogICAgaWYgKHN0ciAhPSAiIikgewogICAgICBpZiAocGVuZGluZ1NlbWljb2xvbikgewogICAgICAgIGlmICghc2hvdWxkQ29tcHJlc3NPdXRwdXQpIHsKICAgICAgICAgIF9lbWl0KCI7Iik7CiAgICAgICAgfSBlbHNlIGlmIChzdHIgIT0gIn0iKSB7CiAgICAgICAgICAvLyBXZSB3YW50IHRvIG91dHB1dCBuZXdsaW5lIGluc3RlYWQgb2Ygc2VtaWNvbG9uIGJlY2F1c2UgaXQgbWFrZXMKICAgICAgICAgIC8vIHRoZSByYXcgc3RhY2sgdHJhY2VzIG11Y2ggZWFzaWVyIHRvIHJlYWQgYW5kIGl0IGFsc28gbWFrZXMgbGluZS0KICAgICAgICAgIC8vIGJhc2VkIHRvb2xzIGxpa2UgZGlmZiB3b3JrIG11Y2ggYmV0dGVyLiAgSmF2YVNjcmlwdCB3aWxsCiAgICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IGluc2VydCB0aGUgc2VtaWNvbG9uIGF0IHRoZSBuZXdsaW5lIGlmIGl0IG1lYW5zIGEKICAgICAgICAgIC8vIHBhcnNpbmcgZXJyb3IgaXMgYXZvaWRlZCwgc28gd2UgY2FuIG9ubHkgZG8gdGhpcyB0cmljayBpZiB0aGUKICAgICAgICAgIC8vIG5leHQgbGluZSBpcyBub3Qgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGdsdWVkIG9udG8gYSB2YWxpZAogICAgICAgICAgLy8gZXhwcmVzc2lvbiB0byBtYWtlIGEgbmV3IHZhbGlkIGV4cHJlc3Npb24uCgogICAgICAgICAgLy8gSWYgd2UncmUgdXNpbmcgdGhlIG5ldyBlbWl0dGVyIHdoZXJlIG1vc3QgcHJldHR5IHByaW50ZWQgY29kZQogICAgICAgICAgLy8gaXMgZXNjYXBlZCBpbiBzdHJpbmdzLCBpdCBpcyBhIGxvdCBlYXNpZXIgdG8gZGVhbCB3aXRoIHNlbWljb2xvbnMKICAgICAgICAgIC8vIHRoYW4gbmV3bGluZXMgYmVjYXVzZSB0aGUgZm9ybWVyIGRvZXNuJ3QgbmVlZCBlc2NhcGluZy4KICAgICAgICAgIGlmIChvcHRpb25zLnByZWZlclNlbWljb2xvblRvTmV3bGluZUluTWluaWZpZWRPdXRwdXQgfHwKICAgICAgICAgICAgICBleHByZXNzaW9uQ29udGludWF0aW9uUmVnRXhwLmhhc01hdGNoKHN0cikpIHsKICAgICAgICAgICAgX2VtaXQoIjsiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9lbWl0KCJcbiIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAocGVuZGluZ1NwYWNlICYmCiAgICAgICAgICAoIXNob3VsZENvbXByZXNzT3V0cHV0IHx8IGlkZW50aWZpZXJDaGFyYWN0ZXJSZWdFeHAuaGFzTWF0Y2goc3RyKSkpIHsKICAgICAgICBfZW1pdCgiICIpOwogICAgICB9CiAgICAgIHBlbmRpbmdTcGFjZSA9IGZhbHNlOwogICAgICBwZW5kaW5nU2VtaWNvbG9uID0gZmFsc2U7CiAgICAgIGlmICghaXNXaGl0ZXNwYWNlKSB7CiAgICAgICAgZW50ZXJOb2RlKCk7CiAgICAgIH0KICAgICAgX2VtaXQoc3RyKTsKICAgICAgbGFzdEFkZGVkU3RyaW5nID0gc3RyOwogICAgfQogIH0KCiAgdm9pZCBvdXRMbihTdHJpbmcgc3RyKSB7CiAgICBvdXQoc3RyKTsKICAgIGxpbmVPdXQoKTsKICB9CgogIHZvaWQgb3V0U2VtaWNvbG9uTG4oKSB7CiAgICBpZiAoc2hvdWxkQ29tcHJlc3NPdXRwdXQpIHsKICAgICAgcGVuZGluZ1NlbWljb2xvbiA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICBvdXQoIjsiKTsKICAgICAgZm9yY2VMaW5lKCk7CiAgICB9CiAgfQoKICB2b2lkIG91dEluZGVudChTdHJpbmcgc3RyKSB7CiAgICBpbmRlbnQoKTsKICAgIG91dChzdHIpOwogIH0KCiAgdm9pZCBvdXRJbmRlbnRMbihTdHJpbmcgc3RyKSB7CiAgICBpbmRlbnQoKTsKICAgIG91dExuKHN0cik7CiAgfQoKICB2b2lkIGluZGVudCgpIHsKICAgIGlmICghc2hvdWxkQ29tcHJlc3NPdXRwdXQpIHsKICAgICAgb3V0KGluZGVudGF0aW9uLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgfQogIH0KCiAgRW50ZXJFeGl0Tm9kZSBjdXJyZW50Tm9kZTsKCiAgdm9pZCBfZW1pdChTdHJpbmcgdGV4dCkgewogICAgY29udGV4dC5lbWl0KHRleHQpOwogICAgX2NoYXJDb3VudCArPSB0ZXh0Lmxlbmd0aDsKICB9CgogIHZvaWQgc3RhcnROb2RlKE5vZGUgbm9kZSkgewogICAgY3VycmVudE5vZGUgPSBuZXcgRW50ZXJFeGl0Tm9kZShjdXJyZW50Tm9kZSwgbm9kZSk7CiAgICBpZiAobm9kZSBpcyBEZWZlcnJlZEV4cHJlc3Npb24pIHsKICAgICAgc3RhcnROb2RlKG5vZGUudmFsdWUpOwogICAgfQogIH0KCiAgdm9pZCBlbnRlck5vZGUoKSB7CiAgICBjdXJyZW50Tm9kZS5hZGRUb05vZGUoY29udGV4dCwgX2NoYXJDb3VudCk7CiAgfQoKICB2b2lkIGVuZE5vZGUoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBEZWZlcnJlZEV4cHJlc3Npb24pIHsKICAgICAgZW5kTm9kZShub2RlLnZhbHVlKTsKICAgIH0KICAgIGFzc2VydChjdXJyZW50Tm9kZS5ub2RlID09IG5vZGUpOwogICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5leGl0Tm9kZShjb250ZXh0LCBfY2hhckNvdW50KTsKICB9CgogIHZvaWQgdmlzaXQoTm9kZSBub2RlKSB7CiAgICBzdGFydE5vZGUobm9kZSk7CiAgICBub2RlLmFjY2VwdCh0aGlzKTsKICAgIGVuZE5vZGUobm9kZSk7CiAgfQoKICB2b2lkIHZpc2l0Q29tbWFTZXBhcmF0ZWQoTGlzdDxOb2RlPiBub2RlcywgaW50IGhhc1JlcXVpcmVkVHlwZSwKICAgICAge2Jvb2wgbmV3SW5Gb3JJbml0LCBib29sIG5ld0F0U3RhdGVtZW50QmVnaW59KSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChpICE9IDApIHsKICAgICAgICBhdFN0YXRlbWVudEJlZ2luID0gZmFsc2U7CiAgICAgICAgb3V0KCIsIik7CiAgICAgICAgc3BhY2VPdXQoKTsKICAgICAgfQogICAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obm9kZXNbaV0sIGhhc1JlcXVpcmVkVHlwZSwKICAgICAgICAgIG5ld0luRm9ySW5pdDogbmV3SW5Gb3JJbml0LCBuZXdBdFN0YXRlbWVudEJlZ2luOiBuZXdBdFN0YXRlbWVudEJlZ2luKTsKICAgIH0KICB9CgogIHZvaWQgdmlzaXRBbGwoTGlzdDxOb2RlPiBub2RlcykgewogICAgbm9kZXMuZm9yRWFjaCh2aXNpdCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJvZ3JhbShQcm9ncmFtIHByb2dyYW0pIHsKICAgIGlmIChwcm9ncmFtLmJvZHkuaXNOb3RFbXB0eSkgewogICAgICB2aXNpdEFsbChwcm9ncmFtLmJvZHkpOwogICAgfQogIH0KCiAgU3RhdGVtZW50IHVud3JhcEJsb2NrSWZTaW5nbGVTdGF0ZW1lbnQoU3RhdGVtZW50IGJvZHkpIHsKICAgIFN0YXRlbWVudCByZXN1bHQgPSBib2R5OwogICAgd2hpbGUgKHJlc3VsdCBpcyBCbG9jaykgewogICAgICBCbG9jayBibG9jayA9IHJlc3VsdDsKICAgICAgaWYgKGJsb2NrLnN0YXRlbWVudHMubGVuZ3RoICE9IDEpIGJyZWFrOwogICAgICByZXN1bHQgPSBibG9jay5zdGF0ZW1lbnRzLnNpbmdsZTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBib29sIGJsb2NrQm9keShTdGF0ZW1lbnQgYm9keSwge2Jvb2wgbmVlZHNTZXBhcmF0aW9uLCBib29sIG5lZWRzTmV3bGluZX0pIHsKICAgIGlmIChib2R5IGlzIEJsb2NrKSB7CiAgICAgIHNwYWNlT3V0KCk7CiAgICAgIGJsb2NrT3V0KGJvZHksIHNob3VsZEluZGVudDogZmFsc2UsIG5lZWRzTmV3bGluZTogbmVlZHNOZXdsaW5lKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAoc2hvdWxkQ29tcHJlc3NPdXRwdXQgJiYgbmVlZHNTZXBhcmF0aW9uKSB7CiAgICAgIC8vIElmIFtzaG91bGRDb21wcmVzc091dHB1dF0gaXMgZmFsc2UsIHRoZW4gdGhlICdsaW5lT3V0JyB3aWxsIGluc2VydAogICAgICAvLyB0aGUgc2VwYXJhdGlvbi4KICAgICAgb3V0KCIgIiwgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGxpbmVPdXQoKTsKICAgIH0KICAgIGluZGVudE1vcmUoKTsKICAgIHZpc2l0KGJvZHkpOwogICAgaW5kZW50TGVzcygpOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBibG9ja091dFdpdGhvdXRCcmFjZXMoTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBCbG9jaykgewogICAgICBzdGFydE5vZGUobm9kZSk7CiAgICAgIEJsb2NrIGJsb2NrID0gbm9kZTsKICAgICAgYmxvY2suc3RhdGVtZW50cy5mb3JFYWNoKGJsb2NrT3V0V2l0aG91dEJyYWNlcyk7CiAgICAgIGVuZE5vZGUobm9kZSk7CiAgICB9IGVsc2UgewogICAgICB2aXNpdChub2RlKTsKICAgIH0KICB9CgogIGludCBibG9ja091dChCbG9jayBub2RlLCB7Ym9vbCBzaG91bGRJbmRlbnQsIGJvb2wgbmVlZHNOZXdsaW5lfSkgewogICAgaWYgKHNob3VsZEluZGVudCkgaW5kZW50KCk7CiAgICBzdGFydE5vZGUobm9kZSk7CiAgICBvdXQoInsiKTsKICAgIGxpbmVPdXQoKTsKICAgIGluZGVudE1vcmUoKTsKICAgIG5vZGUuc3RhdGVtZW50cy5mb3JFYWNoKGJsb2NrT3V0V2l0aG91dEJyYWNlcyk7CiAgICBpbmRlbnRMZXNzKCk7CiAgICBpbmRlbnQoKTsKICAgIG91dCgifSIpOwogICAgaW50IGNsb3NpbmdQb3NpdGlvbiA9IF9jaGFyQ291bnQgLSAxOwogICAgZW5kTm9kZShub2RlKTsKICAgIGlmIChuZWVkc05ld2xpbmUpIGxpbmVPdXQoKTsKICAgIHJldHVybiBjbG9zaW5nUG9zaXRpb247CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmxvY2soQmxvY2sgYmxvY2spIHsKICAgIGJsb2NrT3V0KGJsb2NrLCBzaG91bGRJbmRlbnQ6IHRydWUsIG5lZWRzTmV3bGluZTogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIGluZGVudCgpOwogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbiwgRVhQUkVTU0lPTiwKICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiB0cnVlKTsKICAgIG91dFNlbWljb2xvbkxuKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RW1wdHlTdGF0ZW1lbnQoRW1wdHlTdGF0ZW1lbnQgbm9kZSkgewogICAgb3V0SW5kZW50TG4oIjsiKTsKICB9CgogIHZvaWQgaWZPdXQoSWYgbm9kZSwgYm9vbCBzaG91bGRJbmRlbnQpIHsKICAgIFN0YXRlbWVudCB0aGVuID0gdW53cmFwQmxvY2tJZlNpbmdsZVN0YXRlbWVudChub2RlLnRoZW4pOwogICAgU3RhdGVtZW50IGVsc2VQYXJ0ID0gbm9kZS5vdGhlcndpc2U7CiAgICBib29sIGhhc0Vsc2UgPSBub2RlLmhhc0Vsc2U7CgogICAgLy8gSGFuZGxlIGRhbmdsaW5nIGVsc2VzIGFuZCBhIHdvcmstYXJvdW5kIGZvciBBbmRyb2lkIDQuMCBzdG9jayBicm93c2VyLgogICAgLy8gQW5kcm9pZCA0LjAgcmVxdWlyZXMgYnJhY2VzIGZvciBhIHNpbmdsZSBkby13aGlsZSBpbiB0aGUgYHRoZW5gIGJyYW5jaC4KICAgIC8vIFNlZSBpc3N1ZSAxMDkyMy4KICAgIGlmIChoYXNFbHNlKSB7CiAgICAgIGJvb2wgbmVlZHNCcmFjZXMgPSB0aGVuLmFjY2VwdChkYW5nbGluZ0Vsc2VWaXNpdG9yKSB8fCB0aGVuIGlzIERvOwogICAgICBpZiAobmVlZHNCcmFjZXMpIHsKICAgICAgICB0aGVuID0gbmV3IEJsb2NrKDxTdGF0ZW1lbnQ+W3RoZW5dKTsKICAgICAgfQogICAgfQogICAgaWYgKHNob3VsZEluZGVudCkgaW5kZW50KCk7CiAgICBvdXQoImlmIik7CiAgICBzcGFjZU91dCgpOwogICAgb3V0KCIoIik7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obm9kZS5jb25kaXRpb24sIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCIpIik7CiAgICBib29sIHRoZW5XYXNCbG9jayA9CiAgICAgICAgYmxvY2tCb2R5KHRoZW4sIG5lZWRzU2VwYXJhdGlvbjogZmFsc2UsIG5lZWRzTmV3bGluZTogIWhhc0Vsc2UpOwogICAgaWYgKGhhc0Vsc2UpIHsKICAgICAgaWYgKHRoZW5XYXNCbG9jaykgewogICAgICAgIHNwYWNlT3V0KCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5kZW50KCk7CiAgICAgIH0KICAgICAgb3V0KCJlbHNlIik7CiAgICAgIGlmIChlbHNlUGFydCBpcyBJZikgewogICAgICAgIHBlbmRpbmdTcGFjZSA9IHRydWU7CiAgICAgICAgc3RhcnROb2RlKGVsc2VQYXJ0KTsKICAgICAgICBpZk91dChlbHNlUGFydCwgZmFsc2UpOwogICAgICAgIGVuZE5vZGUoZWxzZVBhcnQpOwogICAgICB9IGVsc2UgewogICAgICAgIGJsb2NrQm9keSh1bndyYXBCbG9ja0lmU2luZ2xlU3RhdGVtZW50KGVsc2VQYXJ0KSwKICAgICAgICAgICAgbmVlZHNTZXBhcmF0aW9uOiB0cnVlLCBuZWVkc05ld2xpbmU6IHRydWUpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SWYoSWYgbm9kZSkgewogICAgaWZPdXQobm9kZSwgdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Rm9yKEZvciBsb29wKSB7CiAgICBvdXRJbmRlbnQoImZvciIpOwogICAgc3BhY2VPdXQoKTsKICAgIG91dCgiKCIpOwogICAgaWYgKGxvb3AuaW5pdCAhPSBudWxsKSB7CiAgICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihsb29wLmluaXQsIEVYUFJFU1NJT04sCiAgICAgICAgICBuZXdJbkZvckluaXQ6IHRydWUsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIH0KICAgIG91dCgiOyIpOwogICAgaWYgKGxvb3AuY29uZGl0aW9uICE9IG51bGwpIHsKICAgICAgc3BhY2VPdXQoKTsKICAgICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKGxvb3AuY29uZGl0aW9uLCBFWFBSRVNTSU9OLAogICAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgfQogICAgb3V0KCI7Iik7CiAgICBpZiAobG9vcC51cGRhdGUgIT0gbnVsbCkgewogICAgICBzcGFjZU91dCgpOwogICAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obG9vcC51cGRhdGUsIEVYUFJFU1NJT04sCiAgICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICB9CiAgICBvdXQoIikiKTsKICAgIGJsb2NrQm9keSh1bndyYXBCbG9ja0lmU2luZ2xlU3RhdGVtZW50KGxvb3AuYm9keSksCiAgICAgICAgbmVlZHNTZXBhcmF0aW9uOiBmYWxzZSwgbmVlZHNOZXdsaW5lOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRGb3JJbihGb3JJbiBsb29wKSB7CiAgICBvdXRJbmRlbnQoImZvciIpOwogICAgc3BhY2VPdXQoKTsKICAgIG91dCgiKCIpOwogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKGxvb3AubGVmdEhhbmRTaWRlLCBFWFBSRVNTSU9OLAogICAgICAgIG5ld0luRm9ySW5pdDogdHJ1ZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCIgaW4iKTsKICAgIHBlbmRpbmdTcGFjZSA9IHRydWU7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obG9vcC5vYmplY3QsIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCIpIik7CiAgICBibG9ja0JvZHkodW53cmFwQmxvY2tJZlNpbmdsZVN0YXRlbWVudChsb29wLmJvZHkpLAogICAgICAgIG5lZWRzU2VwYXJhdGlvbjogZmFsc2UsIG5lZWRzTmV3bGluZTogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0V2hpbGUoV2hpbGUgbG9vcCkgewogICAgb3V0SW5kZW50KCJ3aGlsZSIpOwogICAgc3BhY2VPdXQoKTsKICAgIG91dCgiKCIpOwogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKGxvb3AuY29uZGl0aW9uLCBFWFBSRVNTSU9OLAogICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIG91dCgiKSIpOwogICAgYmxvY2tCb2R5KHVud3JhcEJsb2NrSWZTaW5nbGVTdGF0ZW1lbnQobG9vcC5ib2R5KSwKICAgICAgICBuZWVkc1NlcGFyYXRpb246IGZhbHNlLCBuZWVkc05ld2xpbmU6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdERvKERvIGxvb3ApIHsKICAgIG91dEluZGVudCgiZG8iKTsKICAgIGlmIChibG9ja0JvZHkodW53cmFwQmxvY2tJZlNpbmdsZVN0YXRlbWVudChsb29wLmJvZHkpLAogICAgICAgIG5lZWRzU2VwYXJhdGlvbjogdHJ1ZSwgbmVlZHNOZXdsaW5lOiBmYWxzZSkpIHsKICAgICAgc3BhY2VPdXQoKTsKICAgIH0gZWxzZSB7CiAgICAgIGluZGVudCgpOwogICAgfQogICAgb3V0KCJ3aGlsZSIpOwogICAgc3BhY2VPdXQoKTsKICAgIG91dCgiKCIpOwogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKGxvb3AuY29uZGl0aW9uLCBFWFBSRVNTSU9OLAogICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIG91dCgiKSIpOwogICAgb3V0U2VtaWNvbG9uTG4oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb250aW51ZShDb250aW51ZSBub2RlKSB7CiAgICBpZiAobm9kZS50YXJnZXRMYWJlbCA9PSBudWxsKSB7CiAgICAgIG91dEluZGVudCgiY29udGludWUiKTsKICAgIH0gZWxzZSB7CiAgICAgIG91dEluZGVudCgiY29udGludWUgJHtub2RlLnRhcmdldExhYmVsfSIpOwogICAgfQogICAgb3V0U2VtaWNvbG9uTG4oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCcmVhayhCcmVhayBub2RlKSB7CiAgICBpZiAobm9kZS50YXJnZXRMYWJlbCA9PSBudWxsKSB7CiAgICAgIG91dEluZGVudCgiYnJlYWsiKTsKICAgIH0gZWxzZSB7CiAgICAgIG91dEluZGVudCgiYnJlYWsgJHtub2RlLnRhcmdldExhYmVsfSIpOwogICAgfQogICAgb3V0U2VtaWNvbG9uTG4oKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRSZXR1cm4oUmV0dXJuIG5vZGUpIHsKICAgIGlmIChub2RlLnZhbHVlID09IG51bGwpIHsKICAgICAgb3V0SW5kZW50KCJyZXR1cm4iKTsKICAgIH0gZWxzZSB7CiAgICAgIG91dEluZGVudCgicmV0dXJuIik7CiAgICAgIHBlbmRpbmdTcGFjZSA9IHRydWU7CiAgICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihub2RlLnZhbHVlLCBFWFBSRVNTSU9OLAogICAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgfQogICAgLy8gU2V0IHRoZSBjbG9zaW5nIHBvc2l0aW9uIHRvIGJlIGJlZm9yZSB0aGUgb3B0aW9uYWwgc2VtaWNvbG9uLgogICAgY3VycmVudE5vZGUuY2xvc2luZ1Bvc2l0aW9uID0gX2NoYXJDb3VudDsKICAgIG91dFNlbWljb2xvbkxuKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RGFydFlpZWxkKERhcnRZaWVsZCBub2RlKSB7CiAgICBpZiAobm9kZS5oYXNTdGFyKSB7CiAgICAgIG91dEluZGVudCgieWllbGQqIik7CiAgICB9IGVsc2UgewogICAgICBvdXRJbmRlbnQoInlpZWxkIik7CiAgICB9CiAgICBwZW5kaW5nU3BhY2UgPSB0cnVlOwogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKG5vZGUuZXhwcmVzc2lvbiwgRVhQUkVTU0lPTiwKICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICBvdXRTZW1pY29sb25MbigpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFRocm93KFRocm93IG5vZGUpIHsKICAgIG91dEluZGVudCgidGhyb3ciKTsKICAgIHBlbmRpbmdTcGFjZSA9IHRydWU7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obm9kZS5leHByZXNzaW9uLCBFWFBSRVNTSU9OLAogICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIG91dFNlbWljb2xvbkxuKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHJ5KFRyeSBub2RlKSB7CiAgICBvdXRJbmRlbnQoInRyeSIpOwogICAgYmxvY2tCb2R5KG5vZGUuYm9keSwgbmVlZHNTZXBhcmF0aW9uOiB0cnVlLCBuZWVkc05ld2xpbmU6IGZhbHNlKTsKICAgIGlmIChub2RlLmNhdGNoUGFydCAhPSBudWxsKSB7CiAgICAgIHZpc2l0KG5vZGUuY2F0Y2hQYXJ0KTsKICAgIH0KICAgIGlmIChub2RlLmZpbmFsbHlQYXJ0ICE9IG51bGwpIHsKICAgICAgc3BhY2VPdXQoKTsKICAgICAgb3V0KCJmaW5hbGx5Iik7CiAgICAgIGJsb2NrQm9keShub2RlLmZpbmFsbHlQYXJ0LCBuZWVkc1NlcGFyYXRpb246IHRydWUsIG5lZWRzTmV3bGluZTogdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBsaW5lT3V0KCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q2F0Y2goQ2F0Y2ggbm9kZSkgewogICAgc3BhY2VPdXQoKTsKICAgIG91dCgiY2F0Y2giKTsKICAgIHNwYWNlT3V0KCk7CiAgICBvdXQoIigiKTsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihub2RlLmRlY2xhcmF0aW9uLCBFWFBSRVNTSU9OLAogICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIG91dCgiKSIpOwogICAgYmxvY2tCb2R5KG5vZGUuYm9keSwgbmVlZHNTZXBhcmF0aW9uOiBmYWxzZSwgbmVlZHNOZXdsaW5lOiBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3dpdGNoKFN3aXRjaCBub2RlKSB7CiAgICBvdXRJbmRlbnQoInN3aXRjaCIpOwogICAgc3BhY2VPdXQoKTsKICAgIG91dCgiKCIpOwogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKG5vZGUua2V5LCBFWFBSRVNTSU9OLAogICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIG91dCgiKSIpOwogICAgc3BhY2VPdXQoKTsKICAgIG91dExuKCJ7Iik7CiAgICBpbmRlbnRNb3JlKCk7CiAgICB2aXNpdEFsbChub2RlLmNhc2VzKTsKICAgIGluZGVudExlc3MoKTsKICAgIG91dEluZGVudExuKCJ9Iik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q2FzZShDYXNlIG5vZGUpIHsKICAgIG91dEluZGVudCgiY2FzZSIpOwogICAgcGVuZGluZ1NwYWNlID0gdHJ1ZTsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihub2RlLmV4cHJlc3Npb24sIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0TG4oIjoiKTsKICAgIGlmICghbm9kZS5ib2R5LnN0YXRlbWVudHMuaXNFbXB0eSkgewogICAgICBpbmRlbnRNb3JlKCk7CiAgICAgIGJsb2NrT3V0V2l0aG91dEJyYWNlcyhub2RlLmJvZHkpOwogICAgICBpbmRlbnRMZXNzKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RGVmYXVsdChEZWZhdWx0IG5vZGUpIHsKICAgIG91dEluZGVudExuKCJkZWZhdWx0OiIpOwogICAgaWYgKCFub2RlLmJvZHkuc3RhdGVtZW50cy5pc0VtcHR5KSB7CiAgICAgIGluZGVudE1vcmUoKTsKICAgICAgYmxvY2tPdXRXaXRob3V0QnJhY2VzKG5vZGUuYm9keSk7CiAgICAgIGluZGVudExlc3MoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMYWJlbGVkU3RhdGVtZW50KExhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgU3RhdGVtZW50IGJvZHkgPSB1bndyYXBCbG9ja0lmU2luZ2xlU3RhdGVtZW50KG5vZGUuYm9keSk7CiAgICAvLyBgbGFiZWw6IGJyZWFrIGxhYmVsO2AKICAgIC8vIERvZXMgbm90IHdvcmsgb24gSUUuIFRoZSBzdGF0ZW1lbnQgaXMgYSBub3AsIHNvIHJlcGxhY2UgaXQgYnkgYW4gZW1wdHkKICAgIC8vIHN0YXRlbWVudC4KICAgIC8vIFNlZToKICAgIC8vIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvODkxODg5L3BhcnNlci1idWdzCiAgICBpZiAoYm9keSBpcyBCcmVhayAmJiBib2R5LnRhcmdldExhYmVsID09IG5vZGUubGFiZWwpIHsKICAgICAgdmlzaXQobmV3IEVtcHR5U3RhdGVtZW50KCkpOwogICAgICByZXR1cm47CiAgICB9CiAgICBvdXRJbmRlbnQoIiR7bm9kZS5sYWJlbH06Iik7CiAgICBibG9ja0JvZHkoYm9keSwgbmVlZHNTZXBhcmF0aW9uOiBmYWxzZSwgbmVlZHNOZXdsaW5lOiB0cnVlKTsKICB9CgogIGludCBmdW5jdGlvbk91dChGdW4gZnVuLCBOb2RlIG5hbWUsIFZhckNvbGxlY3RvciB2YXJzKSB7CiAgICBvdXQoImZ1bmN0aW9uIik7CiAgICBpZiAobmFtZSAhPSBudWxsKSB7CiAgICAgIG91dCgiICIpOwogICAgICAvLyBOYW1lIG11c3QgYmUgYSBbRGVjbF0uIFRoZXJlZm9yZSBvbmx5IHRlc3QgZm9yIHByaW1hcnkgZXhwcmVzc2lvbnMuCiAgICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihuYW1lLCBQUklNQVJZLAogICAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgfQogICAgbG9jYWxOYW1lci5lbnRlclNjb3BlKHZhcnMpOwogICAgb3V0KCIoIik7CiAgICBpZiAoZnVuLnBhcmFtcyAhPSBudWxsKSB7CiAgICAgIHZpc2l0Q29tbWFTZXBhcmF0ZWQoZnVuLnBhcmFtcywgUFJJTUFSWSwKICAgICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIH0KICAgIG91dCgiKSIpOwogICAgc3dpdGNoIChmdW4uYXN5bmNNb2RpZmllcikgewogICAgICBjYXNlIEFzeW5jTW9kaWZpZXIuc3luYzoKICAgICAgICBicmVhazsKICAgICAgY2FzZSBBc3luY01vZGlmaWVyLmFzeW5jOgogICAgICAgIG91dCgnICcsIGlzV2hpdGVzcGFjZTogdHJ1ZSk7CiAgICAgICAgb3V0KCdhc3luYycpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEFzeW5jTW9kaWZpZXIuc3luY1N0YXI6CiAgICAgICAgb3V0KCcgJywgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICAgICAgICBvdXQoJ3N5bmMqJyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQXN5bmNNb2RpZmllci5hc3luY1N0YXI6CiAgICAgICAgb3V0KCcgJywgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICAgICAgICBvdXQoJ2FzeW5jKicpOwogICAgICAgIGJyZWFrOwogICAgfQogICAgc3BhY2VPdXQoKTsKICAgIGludCBjbG9zaW5nUG9zaXRpb24gPQogICAgICAgIGJsb2NrT3V0KGZ1bi5ib2R5LCBzaG91bGRJbmRlbnQ6IGZhbHNlLCBuZWVkc05ld2xpbmU6IGZhbHNlKTsKICAgIGxvY2FsTmFtZXIubGVhdmVTY29wZSgpOwogICAgcmV0dXJuIGNsb3NpbmdQb3NpdGlvbjsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uIGRlY2xhcmF0aW9uKSB7CiAgICBWYXJDb2xsZWN0b3IgdmFycyA9IG5ldyBWYXJDb2xsZWN0b3IoKTsKICAgIHZhcnMudmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKGRlY2xhcmF0aW9uKTsKICAgIGluZGVudCgpOwogICAgc3RhcnROb2RlKGRlY2xhcmF0aW9uLmZ1bmN0aW9uKTsKICAgIGN1cnJlbnROb2RlLmNsb3NpbmdQb3NpdGlvbiA9CiAgICAgICAgZnVuY3Rpb25PdXQoZGVjbGFyYXRpb24uZnVuY3Rpb24sIGRlY2xhcmF0aW9uLm5hbWUsIHZhcnMpOwogICAgZW5kTm9kZShkZWNsYXJhdGlvbi5mdW5jdGlvbik7CiAgICBsaW5lT3V0KCk7CiAgfQoKICB2aXNpdE5lc3RlZEV4cHJlc3Npb24oRXhwcmVzc2lvbiBub2RlLCBpbnQgcmVxdWlyZWRQcmVjZWRlbmNlLAogICAgICB7Ym9vbCBuZXdJbkZvckluaXQsIGJvb2wgbmV3QXRTdGF0ZW1lbnRCZWdpbn0pIHsKICAgIGJvb2wgbmVlZHNQYXJlbnRoZXNlcyA9CiAgICAgICAgLy8gYSAtIChiICsgYykuCiAgICAgICAgKHJlcXVpcmVkUHJlY2VkZW5jZSAhPSBFWFBSRVNTSU9OICYmCiAgICAgICAgICAgICAgICBub2RlLnByZWNlZGVuY2VMZXZlbCA8IHJlcXVpcmVkUHJlY2VkZW5jZSkgfHwKICAgICAgICAgICAgLy8gZm9yIChhID0gKHggaW4gbyk7IC4uLiA7IC4uLiApIHsgLi4uIH0KICAgICAgICAgICAgKG5ld0luRm9ySW5pdCAmJiBub2RlIGlzIEJpbmFyeSAmJiBub2RlLm9wID09ICJpbiIpIHx8CiAgICAgICAgICAgIC8vIChmdW5jdGlvbigpIHsgLi4uIH0pKCkuCiAgICAgICAgICAgIC8vICh7YTogMiwgYjogM30udG9TdHJpbmcoKSkuCiAgICAgICAgICAgIChuZXdBdFN0YXRlbWVudEJlZ2luICYmCiAgICAgICAgICAgICAgICAobm9kZSBpcyBOYW1lZEZ1bmN0aW9uIHx8CiAgICAgICAgICAgICAgICAgICAgbm9kZSBpcyBGdW4gfHwKICAgICAgICAgICAgICAgICAgICBub2RlIGlzIE9iamVjdEluaXRpYWxpemVyKSk7CiAgICBpZiAobmVlZHNQYXJlbnRoZXNlcykgewogICAgICBpbkZvckluaXQgPSBmYWxzZTsKICAgICAgYXRTdGF0ZW1lbnRCZWdpbiA9IGZhbHNlOwogICAgICBvdXQoIigiKTsKICAgICAgdmlzaXQobm9kZSk7CiAgICAgIG91dCgiKSIpOwogICAgfSBlbHNlIHsKICAgICAgaW5Gb3JJbml0ID0gbmV3SW5Gb3JJbml0OwogICAgICBhdFN0YXRlbWVudEJlZ2luID0gbmV3QXRTdGF0ZW1lbnRCZWdpbjsKICAgICAgdmlzaXQobm9kZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IGxpc3QpIHsKICAgIG91dCgidmFyICIpOwogICAgTGlzdDxOb2RlPiBub2RlcyA9IGxpc3QuZGVjbGFyYXRpb25zOwogICAgaWYgKGluRm9ySW5pdCkgewogICAgICB2aXNpdENvbW1hU2VwYXJhdGVkKG5vZGVzLCBBU1NJR05NRU5ULAogICAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFByaW50ICdiaWcnIGRlY2xhcmF0aW9ucyBvbiB0aGVpciBvd24gbGluZSwgd2hpbGUga2VlcGluZyBhZGphY2VudAogICAgICAvLyBzbWFsbCBhbmQgdW5pbml0aWFsaXplZCBkZWNsYXJhdGlvbnMgb24gdGhlIHNhbWUgbGluZS4KICAgICAgYm9vbCB1c2VJbmRlbnQgPSBub2Rlcy5sZW5ndGggPiAxICYmIGxpc3QuaW5kZW50U3BsaXRzOwogICAgICBpZiAodXNlSW5kZW50KSB7CiAgICAgICAgaW5kZW50TW9yZSgpOwogICAgICB9CiAgICAgIGJvb2wgbGFzdFdhc0JpZyA9IGZhbHNlOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgTm9kZSBub2RlID0gbm9kZXNbaV07CiAgICAgICAgYm9vbCB0aGlzSXNCaWcgPSAhX2lzU21hbGxJbml0aWFsaXphdGlvbihub2RlKTsKICAgICAgICBpZiAoaSA+IDApIHsKICAgICAgICAgIGF0U3RhdGVtZW50QmVnaW4gPSBmYWxzZTsKICAgICAgICAgIG91dCgiLCIpOwogICAgICAgICAgaWYgKGxhc3RXYXNCaWcgfHwgdGhpc0lzQmlnKSB7CiAgICAgICAgICAgIGxpbmVPdXQoKTsKICAgICAgICAgICAgaW5kZW50KCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzcGFjZU91dCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24obm9kZSwgQVNTSUdOTUVOVCwKICAgICAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgICAgICBsYXN0V2FzQmlnID0gdGhpc0lzQmlnOwogICAgICB9CiAgICAgIGlmICh1c2VJbmRlbnQpIHsKICAgICAgICBpbmRlbnRMZXNzKCk7CiAgICAgIH0KICAgIH0KICB9CgogIHN0YXRpYyBib29sIF9pc1NtYWxsSW5pdGlhbGl6YXRpb24oTm9kZSBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBWYXJpYWJsZUluaXRpYWxpemF0aW9uKSB7CiAgICAgIE5vZGUgdmFsdWUgPSB1bmRlZmVyKG5vZGUudmFsdWUpOwogICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAgIGlmICh2YWx1ZSBpcyBUaGlzKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKHZhbHVlIGlzIExpdGVyYWxOdWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKHZhbHVlIGlzIExpdGVyYWxOdW1iZXIpIHJldHVybiB0cnVlOwogICAgICBpZiAodmFsdWUgaXMgTGl0ZXJhbFN0cmluZyAmJiB2YWx1ZS52YWx1ZS5sZW5ndGggPD0gOCkgcmV0dXJuIHRydWU7CiAgICAgIGlmICh2YWx1ZSBpcyBPYmplY3RJbml0aWFsaXplciAmJiB2YWx1ZS5wcm9wZXJ0aWVzLmlzRW1wdHkpIHJldHVybiB0cnVlOwogICAgICBpZiAodmFsdWUgaXMgQXJyYXlJbml0aWFsaXplciAmJiB2YWx1ZS5lbGVtZW50cy5pc0VtcHR5KSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKHZhbHVlIGlzIE5hbWUgJiYgdmFsdWUubmFtZS5sZW5ndGggPD0gOCkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIF9vdXRwdXRJbmNEZWMoU3RyaW5nIG9wLCBFeHByZXNzaW9uIHZhcmlhYmxlLCBbRXhwcmVzc2lvbiBhbGlhc10pIHsKICAgIGlmIChvcCA9PSAnKycpIHsKICAgICAgaWYgKGxhc3RDaGFyQ29kZSA9PSBjaGFyQ29kZXMuJFBMVVMpIG91dCgiICIsIGlzV2hpdGVzcGFjZTogdHJ1ZSk7CiAgICAgIG91dCgnKysnKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChsYXN0Q2hhckNvZGUgPT0gY2hhckNvZGVzLiRNSU5VUykgb3V0KCIgIiwgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICAgICAgb3V0KCctLScpOwogICAgfQogICAgaWYgKGFsaWFzICE9IG51bGwpIHN0YXJ0Tm9kZShhbGlhcyk7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24odmFyaWFibGUsIFVOQVJZLAogICAgICAgIG5ld0luRm9ySW5pdDogaW5Gb3JJbml0LCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICBpZiAoYWxpYXMgIT0gbnVsbCkgZW5kTm9kZShhbGlhcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEFzc2lnbm1lbnQoQXNzaWdubWVudCBhc3NpZ25tZW50KSB7CiAgICAvLy8gVG8gcHJpbnQgYXNzaWdubWVudHMgbGlrZSBgYSA9IGEgKyAxYCBhbmQgYGEgPSBhICsgYmAgY29tcGFjdGx5IGFzCiAgICAvLy8gYCsrYWAgYW5kIGBhICs9IGJgIGluIHRoZSBmYWNlIG9mIFtEZWZlcnJlZEV4cHJlc3Npb25dcyB3ZSBkZXRlY3QgdGhlCiAgICAvLy8gcGF0dGVybiBvZiB0aGUgdW5kZWZlcnJlZCBhc3NpZ25tZW50LgogICAgU3RyaW5nIG9wID0gYXNzaWdubWVudC5vcDsKICAgIE5vZGUgbGVmdEhhbmRTaWRlID0gdW5kZWZlcihhc3NpZ25tZW50LmxlZnRIYW5kU2lkZSk7CiAgICBOb2RlIHJpZ2h0SGFuZFNpZGUgPSB1bmRlZmVyKGFzc2lnbm1lbnQudmFsdWUpOwogICAgaWYgKChvcCA9PSAnKycgfHwgb3AgPT0gJy0nKSAmJgogICAgICAgIGxlZnRIYW5kU2lkZSBpcyBWYXJpYWJsZVVzZSAmJgogICAgICAgIHJpZ2h0SGFuZFNpZGUgaXMgTGl0ZXJhbE51bWJlciAmJgogICAgICAgIHJpZ2h0SGFuZFNpZGUudmFsdWUgPT0gIjEiKSB7CiAgICAgIC8vIE91dHB1dCAnYSArPSAxJyBhcyAnKythJyBhbmQgJ2EgLT0gMScgYXMgJy0tYScuCiAgICAgIF9vdXRwdXRJbmNEZWMob3AsIGFzc2lnbm1lbnQubGVmdEhhbmRTaWRlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFhc3NpZ25tZW50LmlzQ29tcG91bmQgJiYKICAgICAgICBsZWZ0SGFuZFNpZGUgaXMgVmFyaWFibGVVc2UgJiYKICAgICAgICByaWdodEhhbmRTaWRlIGlzIEJpbmFyeSkgewogICAgICBOb2RlIHJMZWZ0ID0gdW5kZWZlcihyaWdodEhhbmRTaWRlLmxlZnQpOwogICAgICBOb2RlIHJSaWdodCA9IHVuZGVmZXIocmlnaHRIYW5kU2lkZS5yaWdodCk7CiAgICAgIFN0cmluZyBvcCA9IHJpZ2h0SGFuZFNpZGUub3A7CiAgICAgIGlmIChvcCA9PSAnKycgfHwKICAgICAgICAgIG9wID09ICctJyB8fAogICAgICAgICAgb3AgPT0gJy8nIHx8CiAgICAgICAgICBvcCA9PSAnKicgfHwKICAgICAgICAgIG9wID09ICclJyB8fAogICAgICAgICAgb3AgPT0gJ14nIHx8CiAgICAgICAgICBvcCA9PSAnJicgfHwKICAgICAgICAgIG9wID09ICd8JykgewogICAgICAgIGlmIChyTGVmdCBpcyBWYXJpYWJsZVVzZSAmJiByTGVmdC5uYW1lID09IGxlZnRIYW5kU2lkZS5uYW1lKSB7CiAgICAgICAgICAvLyBPdXRwdXQgJ2EgPSBhICsgMScgYXMgJysrYScgYW5kICdhID0gYSAtIDEnIGFzICctLWEnLgogICAgICAgICAgaWYgKChvcCA9PSAnKycgfHwgb3AgPT0gJy0nKSAmJgogICAgICAgICAgICAgIHJSaWdodCBpcyBMaXRlcmFsTnVtYmVyICYmCiAgICAgICAgICAgICAgclJpZ2h0LnZhbHVlID09ICIxIikgewogICAgICAgICAgICBfb3V0cHV0SW5jRGVjKG9wLCBhc3NpZ25tZW50LmxlZnRIYW5kU2lkZSwgcmlnaHRIYW5kU2lkZS5sZWZ0KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgLy8gT3V0cHV0ICdhID0gYSArIGInIGFzICdhICs9IGInLgogICAgICAgICAgc3RhcnROb2RlKHJpZ2h0SGFuZFNpZGUubGVmdCk7CiAgICAgICAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24oYXNzaWdubWVudC5sZWZ0SGFuZFNpZGUsIENBTEwsCiAgICAgICAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGF0U3RhdGVtZW50QmVnaW4pOwogICAgICAgICAgZW5kTm9kZShyaWdodEhhbmRTaWRlLmxlZnQpOwogICAgICAgICAgc3BhY2VPdXQoKTsKICAgICAgICAgIG91dChvcCk7CiAgICAgICAgICBvdXQoIj0iKTsKICAgICAgICAgIHNwYWNlT3V0KCk7CiAgICAgICAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24oclJpZ2h0LCBBU1NJR05NRU5ULAogICAgICAgICAgICAgIG5ld0luRm9ySW5pdDogaW5Gb3JJbml0LCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24oYXNzaWdubWVudC5sZWZ0SGFuZFNpZGUsIENBTEwsCiAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGF0U3RhdGVtZW50QmVnaW4pOwogICAgaWYgKGFzc2lnbm1lbnQudmFsdWUgIT0gbnVsbCkgewogICAgICBzcGFjZU91dCgpOwogICAgICBpZiAob3AgIT0gbnVsbCkgb3V0KG9wKTsKICAgICAgb3V0KCI9Iik7CiAgICAgIHNwYWNlT3V0KCk7CiAgICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihhc3NpZ25tZW50LnZhbHVlLCBBU1NJR05NRU5ULAogICAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbihWYXJpYWJsZUluaXRpYWxpemF0aW9uIGluaXRpYWxpemF0aW9uKSB7CiAgICB2aXNpdEFzc2lnbm1lbnQoaW5pdGlhbGl6YXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDb25kaXRpb25hbChDb25kaXRpb25hbCBjb25kKSB7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24oY29uZC5jb25kaXRpb24sIExPR0lDQUxfT1IsCiAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGF0U3RhdGVtZW50QmVnaW4pOwogICAgc3BhY2VPdXQoKTsKICAgIG91dCgiPyIpOwogICAgc3BhY2VPdXQoKTsKICAgIC8vIFRoZSB0aGVuIHBhcnQgaXMgYWxsb3dlZCB0byBoYXZlIGFuICdpbicuCiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24oY29uZC50aGVuLCBBU1NJR05NRU5ULAogICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIHNwYWNlT3V0KCk7CiAgICBvdXQoIjoiKTsKICAgIHNwYWNlT3V0KCk7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24oY29uZC5vdGhlcndpc2UsIEFTU0lHTk1FTlQsCiAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TmV3KE5ldyBub2RlKSB7CiAgICBvdXQoIm5ldyAiKTsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihub2RlLnRhcmdldCwgTEVGVF9IQU5EX1NJREUsCiAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIG91dCgiKCIpOwogICAgdmlzaXRDb21tYVNlcGFyYXRlZChub2RlLmFyZ3VtZW50cywgQVNTSUdOTUVOVCwKICAgICAgICBuZXdJbkZvckluaXQ6IGZhbHNlLCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgICBvdXQoIikiKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2FsbChDYWxsIGNhbGwpIHsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihjYWxsLnRhcmdldCwgQ0FMTCwKICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogYXRTdGF0ZW1lbnRCZWdpbik7CiAgICBvdXQoIigiKTsKICAgIHZpc2l0Q29tbWFTZXBhcmF0ZWQoY2FsbC5hcmd1bWVudHMsIEFTU0lHTk1FTlQsCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCIpIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmluYXJ5KEJpbmFyeSBiaW5hcnkpIHsKICAgIEV4cHJlc3Npb24gbGVmdCA9IGJpbmFyeS5sZWZ0OwogICAgRXhwcmVzc2lvbiByaWdodCA9IGJpbmFyeS5yaWdodDsKICAgIFN0cmluZyBvcCA9IGJpbmFyeS5vcDsKICAgIGludCBsZWZ0UHJlY2VkZW5jZVJlcXVpcmVtZW50OwogICAgaW50IHJpZ2h0UHJlY2VkZW5jZVJlcXVpcmVtZW50OwogICAgYm9vbCBsZWZ0U3BhY2UgPSB0cnVlOyAvLyBsZWZ0PEhFUkU+b3AgcmlnaHQKICAgIHN3aXRjaCAob3ApIHsKICAgICAgY2FzZSAnLCc6CiAgICAgICAgLy8gIHgsICh5LCB6KSA8PT4gKHgsIHkpLCB6LgogICAgICAgIGxlZnRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBFWFBSRVNTSU9OOwogICAgICAgIHJpZ2h0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gRVhQUkVTU0lPTjsKICAgICAgICBsZWZ0U3BhY2UgPSBmYWxzZTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAifHwiOgogICAgICAgIGxlZnRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBMT0dJQ0FMX09SOwogICAgICAgIC8vIHggfHwgKHkgfHwgeikgPD0+ICh4IHx8IHkpIHx8IHouCiAgICAgICAgcmlnaHRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBMT0dJQ0FMX09SOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICImJiI6CiAgICAgICAgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IExPR0lDQUxfQU5EOwogICAgICAgIC8vIHggJiYgKHkgJiYgeikgPD0+ICh4ICYmIHkpICYmIHouCiAgICAgICAgcmlnaHRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBMT0dJQ0FMX0FORDsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAifCI6CiAgICAgICAgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IEJJVF9PUjsKICAgICAgICAvLyB4IHwgKHkgfCB6KSA8PT4gKHggfCB5KSB8IHouCiAgICAgICAgcmlnaHRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBCSVRfT1I7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIl4iOgogICAgICAgIGxlZnRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBCSVRfWE9SOwogICAgICAgIC8vIHggXiAoeSBeIHopIDw9PiAoeCBeIHkpIF4gei4KICAgICAgICByaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IEJJVF9YT1I7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIiYiOgogICAgICAgIGxlZnRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBCSVRfQU5EOwogICAgICAgIC8vIHggJiAoeSAmIHopIDw9PiAoeCAmIHkpICYgei4KICAgICAgICByaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IEJJVF9BTkQ7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIj09IjoKICAgICAgY2FzZSAiIT0iOgogICAgICBjYXNlICI9PT0iOgogICAgICBjYXNlICIhPT0iOgogICAgICAgIGxlZnRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBFUVVBTElUWTsKICAgICAgICByaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IFJFTEFUSU9OQUw7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIjwiOgogICAgICBjYXNlICI+IjoKICAgICAgY2FzZSAiPD0iOgogICAgICBjYXNlICI+PSI6CiAgICAgIGNhc2UgImluc3RhbmNlb2YiOgogICAgICBjYXNlICJpbiI6CiAgICAgICAgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IFJFTEFUSU9OQUw7CiAgICAgICAgcmlnaHRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBTSElGVDsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiPj4iOgogICAgICBjYXNlICI8PCI6CiAgICAgIGNhc2UgIj4+PiI6CiAgICAgICAgbGVmdFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IFNISUZUOwogICAgICAgIHJpZ2h0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gQURESVRJVkU7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIisiOgogICAgICBjYXNlICItIjoKICAgICAgICBsZWZ0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gQURESVRJVkU7CiAgICAgICAgLy8gV2UgY2Fubm90IHJlbW92ZSBwYXJlbnRoZXNpcyBmb3IgIisiIGJlY2F1c2UKICAgICAgICAvLyAgIHggKyAoeSArIHopIDwhPT4gKHggKyB5KSArIHo6CiAgICAgICAgLy8gRXhhbXBsZToKICAgICAgICAvLyAgICJhIiArICgxICsgMikgPT4gImEzIjsKICAgICAgICAvLyAgICgiYSIgKyAxKSArIDIgPT4gImExMiI7CiAgICAgICAgcmlnaHRQcmVjZWRlbmNlUmVxdWlyZW1lbnQgPSBNVUxUSVBMSUNBVElWRTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiKiI6CiAgICAgIGNhc2UgIi8iOgogICAgICBjYXNlICIlIjoKICAgICAgICBsZWZ0UHJlY2VkZW5jZVJlcXVpcmVtZW50ID0gTVVMVElQTElDQVRJVkU7CiAgICAgICAgLy8gV2UgY2Fubm90IHJlbW92ZSBwYXJlbnRoZXNpcyBmb3IgIioiIGJlY2F1c2Ugb2YgcHJlY2lzaW9uIGlzc3Vlcy4KICAgICAgICByaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudCA9IFVOQVJZOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIGNvbnRleHQuZXJyb3IoIkZvcmdvdCBvcGVyYXRvcjogJG9wIik7CiAgICB9CgogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKGxlZnQsIGxlZnRQcmVjZWRlbmNlUmVxdWlyZW1lbnQsCiAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGF0U3RhdGVtZW50QmVnaW4pOwoKICAgIGlmIChvcCA9PSAiaW4iIHx8IG9wID09ICJpbnN0YW5jZW9mIikgewogICAgICAvLyBUaGVyZSBhcmUgY2FzZXMgd2hlcmUgdGhlIHNwYWNlIGlzIG5vdCByZXF1aXJlZCBidXQgd2l0aG91dCBmdXJ0aGVyCiAgICAgIC8vIGFuYWx5c2lzIHdlIGNhbm5vdCBrbm93LgogICAgICBvdXQoIiAiLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgICBvdXQob3ApOwogICAgICBvdXQoIiAiLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgaWYgKGxlZnRTcGFjZSkgc3BhY2VPdXQoKTsKICAgICAgb3V0KG9wKTsKICAgICAgc3BhY2VPdXQoKTsKICAgIH0KICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihyaWdodCwgcmlnaHRQcmVjZWRlbmNlUmVxdWlyZW1lbnQsCiAgICAgICAgbmV3SW5Gb3JJbml0OiBpbkZvckluaXQsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQcmVmaXgoUHJlZml4IHVuYXJ5KSB7CiAgICBTdHJpbmcgb3AgPSB1bmFyeS5vcDsKICAgIHN3aXRjaCAob3ApIHsKICAgICAgY2FzZSAiZGVsZXRlIjoKICAgICAgY2FzZSAidm9pZCI6CiAgICAgIGNhc2UgInR5cGVvZiI6CiAgICAgICAgLy8gVGhlcmUgYXJlIGNhc2VzIHdoZXJlIHRoZSBzcGFjZSBpcyBub3QgcmVxdWlyZWQgYnV0IHdpdGhvdXQgZnVydGhlcgogICAgICAgIC8vIGFuYWx5c2lzIHdlIGNhbm5vdCBrbm93LgogICAgICAgIG91dChvcCk7CiAgICAgICAgb3V0KCIgIiwgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiKyI6CiAgICAgIGNhc2UgIisrIjoKICAgICAgICBpZiAobGFzdENoYXJDb2RlID09IGNoYXJDb2Rlcy4kUExVUykgb3V0KCIgIiwgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICAgICAgICBvdXQob3ApOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICItIjoKICAgICAgY2FzZSAiLS0iOgogICAgICAgIGlmIChsYXN0Q2hhckNvZGUgPT0gY2hhckNvZGVzLiRNSU5VUykgb3V0KCIgIiwgaXNXaGl0ZXNwYWNlOiB0cnVlKTsKICAgICAgICBvdXQob3ApOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIG91dChvcCk7CiAgICB9CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24odW5hcnkuYXJndW1lbnQsIFVOQVJZLAogICAgICAgIG5ld0luRm9ySW5pdDogaW5Gb3JJbml0LCBuZXdBdFN0YXRlbWVudEJlZ2luOiBmYWxzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UG9zdGZpeChQb3N0Zml4IHBvc3RmaXgpIHsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihwb3N0Zml4LmFyZ3VtZW50LCBDQUxMLAogICAgICAgIG5ld0luRm9ySW5pdDogaW5Gb3JJbml0LCBuZXdBdFN0YXRlbWVudEJlZ2luOiBhdFN0YXRlbWVudEJlZ2luKTsKICAgIG91dChwb3N0Zml4Lm9wKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWYXJpYWJsZVVzZShWYXJpYWJsZVVzZSByZWYpIHsKICAgIG91dChsb2NhbE5hbWVyLmdldE5hbWUocmVmLm5hbWUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUaGlzKFRoaXMgbm9kZSkgewogICAgb3V0KCJ0aGlzIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIGRlY2wpIHsKICAgIG91dChsb2NhbE5hbWVyLmdldE5hbWUoZGVjbC5uYW1lKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UGFyYW1ldGVyKFBhcmFtZXRlciBwYXJhbSkgewogICAgb3V0KGxvY2FsTmFtZXIuZ2V0TmFtZShwYXJhbS5uYW1lKSk7CiAgfQoKICBib29sIGlzRGlnaXQoaW50IGNoYXJDb2RlKSB7CiAgICByZXR1cm4gY2hhckNvZGVzLiQwIDw9IGNoYXJDb2RlICYmIGNoYXJDb2RlIDw9IGNoYXJDb2Rlcy4kOTsKICB9CgogIGJvb2wgaXNWYWxpZEphdmFTY3JpcHRJZChTdHJpbmcgZmllbGQpIHsKICAgIGlmIChmaWVsZC5sZW5ndGggPCAzKSByZXR1cm4gZmFsc2U7CiAgICAvLyBJZ25vcmUgdGhlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHN0cmluZy1kZWxpbWl0ZXIuCiAgICBmb3IgKGludCBpID0gMTsgaSA8IGZpZWxkLmxlbmd0aCAtIDE7IGkrKykgewogICAgICAvLyBUT0RPKGZsb2l0c2NoKTogYWxsb3cgbW9yZSBjaGFyYWN0ZXJzLgogICAgICBpbnQgY2hhckNvZGUgPSBmaWVsZC5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoIShjaGFyQ29kZXMuJGEgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gY2hhckNvZGVzLiR6IHx8CiAgICAgICAgICBjaGFyQ29kZXMuJEEgPD0gY2hhckNvZGUgJiYgY2hhckNvZGUgPD0gY2hhckNvZGVzLiRaIHx8CiAgICAgICAgICBjaGFyQ29kZSA9PSBjaGFyQ29kZXMuJCQgfHwKICAgICAgICAgIGNoYXJDb2RlID09IGNoYXJDb2Rlcy4kXyB8fAogICAgICAgICAgaSAhPSAxICYmIGlzRGlnaXQoY2hhckNvZGUpKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgLy8gVE9ETyhmbG9pdHNjaCk6IG5vcm1hbGx5IHdlIHNob3VsZCBhbHNvIGNoZWNrIHRoYXQgdGhlIGZpZWxkIGlzIG5vdCBhCiAgICAvLyByZXNlcnZlZCB3b3JkLiAgV2UgZG9uJ3QgZ2VuZXJhdGUgZmllbGRzIHdpdGggcmVzZXJ2ZWQgd29yZCBuYW1lcyBleGNlcHQKICAgIC8vIGZvciAnc3VwZXInLgogICAgaWYgKGZpZWxkID09ICcic3VwZXIiJykgcmV0dXJuIGZhbHNlOwogICAgaWYgKGZpZWxkID09ICciY2F0Y2giJykgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QWNjZXNzKFByb3BlcnR5QWNjZXNzIGFjY2VzcykgewogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKGFjY2Vzcy5yZWNlaXZlciwgQ0FMTCwKICAgICAgICBuZXdJbkZvckluaXQ6IGluRm9ySW5pdCwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogYXRTdGF0ZW1lbnRCZWdpbik7CiAgICBOb2RlIHNlbGVjdG9yID0gdW5kZWZlcihhY2Nlc3Muc2VsZWN0b3IpOwogICAgaWYgKHNlbGVjdG9yIGlzIExpdGVyYWxTdHJpbmcpIHsKICAgICAgU3RyaW5nIGZpZWxkV2l0aFF1b3RlcyA9IHNlbGVjdG9yLnZhbHVlOwogICAgICBpZiAoaXNWYWxpZEphdmFTY3JpcHRJZChmaWVsZFdpdGhRdW90ZXMpKSB7CiAgICAgICAgaWYgKGFjY2Vzcy5yZWNlaXZlciBpcyBMaXRlcmFsTnVtYmVyICYmCiAgICAgICAgICAgIGxhc3RDaGFyQ29kZSAhPSBjaGFyQ29kZXMuJENMT1NFX1BBUkVOKSB7CiAgICAgICAgICBvdXQoIiAiLCBpc1doaXRlc3BhY2U6IHRydWUpOwogICAgICAgIH0KICAgICAgICBvdXQoIi4iKTsKICAgICAgICBzdGFydE5vZGUoYWNjZXNzLnNlbGVjdG9yKTsKICAgICAgICBvdXQoZmllbGRXaXRoUXVvdGVzLnN1YnN0cmluZygxLCBmaWVsZFdpdGhRdW90ZXMubGVuZ3RoIC0gMSkpOwogICAgICAgIGVuZE5vZGUoYWNjZXNzLnNlbGVjdG9yKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IgaXMgTmFtZSkgewogICAgICBOb2RlIHJlY2VpdmVyID0gdW5kZWZlcihhY2Nlc3MucmVjZWl2ZXIpOwogICAgICBpZiAocmVjZWl2ZXIgaXMgTGl0ZXJhbE51bWJlciAmJiBsYXN0Q2hhckNvZGUgIT0gY2hhckNvZGVzLiRDTE9TRV9QQVJFTikgewogICAgICAgIG91dCgiICIsIGlzV2hpdGVzcGFjZTogdHJ1ZSk7CiAgICAgIH0KICAgICAgb3V0KCIuIik7CiAgICAgIHN0YXJ0Tm9kZShhY2Nlc3Muc2VsZWN0b3IpOwogICAgICBzZWxlY3Rvci5hY2NlcHQodGhpcyk7CiAgICAgIGVuZE5vZGUoYWNjZXNzLnNlbGVjdG9yKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgb3V0KCJbIik7CiAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24oYWNjZXNzLnNlbGVjdG9yLCBFWFBSRVNTSU9OLAogICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgIG91dCgiXSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5hbWVkRnVuY3Rpb24oTmFtZWRGdW5jdGlvbiBuYW1lZEZ1bmN0aW9uKSB7CiAgICBWYXJDb2xsZWN0b3IgdmFycyA9IG5ldyBWYXJDb2xsZWN0b3IoKTsKICAgIHZhcnMudmlzaXROYW1lZEZ1bmN0aW9uKG5hbWVkRnVuY3Rpb24pOwogICAgc3RhcnROb2RlKG5hbWVkRnVuY3Rpb24uZnVuY3Rpb24pOwogICAgaW50IGNsb3NpbmdQb3NpdGlvbiA9IGN1cnJlbnROb2RlLmNsb3NpbmdQb3NpdGlvbiA9CiAgICAgICAgZnVuY3Rpb25PdXQobmFtZWRGdW5jdGlvbi5mdW5jdGlvbiwgbmFtZWRGdW5jdGlvbi5uYW1lLCB2YXJzKTsKICAgIGVuZE5vZGUobmFtZWRGdW5jdGlvbi5mdW5jdGlvbik7CiAgICAvLyBVc2UgY2xvc2luZyBwb3NpdGlvbiBvZiBgbmFtZWRGdW5jdGlvbi5mdW5jdGlvbmAgYXMgdGhlIGNsb3NpbmcgcG9zaXRpb24KICAgIC8vIG9mIHRoZSBuYW1lZCBmdW5jdGlvbiBpdHNlbGYuCiAgICBjdXJyZW50Tm9kZS5jbG9zaW5nUG9zaXRpb24gPSBjbG9zaW5nUG9zaXRpb247CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RnVuKEZ1biBmdW4pIHsKICAgIFZhckNvbGxlY3RvciB2YXJzID0gbmV3IFZhckNvbGxlY3RvcigpOwogICAgdmFycy52aXNpdEZ1bihmdW4pOwogICAgY3VycmVudE5vZGUuY2xvc2luZ1Bvc2l0aW9uID0gZnVuY3Rpb25PdXQoZnVuLCBudWxsLCB2YXJzKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RGVmZXJyZWRFeHByZXNzaW9uKERlZmVycmVkRXhwcmVzc2lvbiBub2RlKSB7CiAgICAvLyBDb250aW51ZSBwcmludGluZyB3aXRoIHRoZSBleHByZXNzaW9uIHZhbHVlLgogICAgYXNzZXJ0KG5vZGUucHJlY2VkZW5jZUxldmVsID09IG5vZGUudmFsdWUucHJlY2VkZW5jZUxldmVsKTsKICAgIG5vZGUudmFsdWUuYWNjZXB0KHRoaXMpOwogIH0KCiAgb3V0cHV0TnVtYmVyV2l0aFJlcXVpcmVkV2hpdGVzcGFjZShTdHJpbmcgbnVtYmVyKSB7CiAgICBpbnQgY2hhckNvZGUgPSBudW1iZXIuY29kZVVuaXRBdCgwKTsKICAgIGlmIChjaGFyQ29kZSA9PSBjaGFyQ29kZXMuJE1JTlVTICYmIGxhc3RDaGFyQ29kZSA9PSBjaGFyQ29kZXMuJE1JTlVTKSB7CiAgICAgIG91dCgiICIsIGlzV2hpdGVzcGFjZTogdHJ1ZSk7CiAgICB9CiAgICBvdXQobnVtYmVyKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RGVmZXJyZWROdW1iZXIoRGVmZXJyZWROdW1iZXIgbm9kZSkgewogICAgb3V0cHV0TnVtYmVyV2l0aFJlcXVpcmVkV2hpdGVzcGFjZSgiJHtub2RlLnZhbHVlfSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREZWZlcnJlZFN0cmluZyhEZWZlcnJlZFN0cmluZyBub2RlKSB7CiAgICBvdXQobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdExpdGVyYWxCb29sKExpdGVyYWxCb29sIG5vZGUpIHsKICAgIG91dChub2RlLnZhbHVlID8gInRydWUiIDogImZhbHNlIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGl0ZXJhbFN0cmluZyhMaXRlcmFsU3RyaW5nIG5vZGUpIHsKICAgIG91dChub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihTdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0TmFtZShOYW1lIG5vZGUpIHsKICAgIG91dChvcHRpb25zLnJlbmFtZXJGb3JOYW1lcyhub2RlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFBhcmVudGhlc2VzKFBhcmVudGhlc2VzIG5vZGUpIHsKICAgIG91dCgiKCIpOwogICAgdmlzaXROZXN0ZWRFeHByZXNzaW9uKG5vZGUuZW5jbG9zZWQsIEVYUFJFU1NJT04sCiAgICAgICAgbmV3SW5Gb3JJbml0OiBmYWxzZSwgbmV3QXRTdGF0ZW1lbnRCZWdpbjogZmFsc2UpOwogICAgb3V0KCIpIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdExpdGVyYWxOdW1iZXIoTGl0ZXJhbE51bWJlciBub2RlKSB7CiAgICBvdXRwdXROdW1iZXJXaXRoUmVxdWlyZWRXaGl0ZXNwYWNlKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpdGVyYWxOdWxsKExpdGVyYWxOdWxsIG5vZGUpIHsKICAgIG91dCgibnVsbCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFycmF5SW5pdGlhbGl6ZXIoQXJyYXlJbml0aWFsaXplciBub2RlKSB7CiAgICBvdXQoIlsiKTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gZWxlbWVudHMgPSBub2RlLmVsZW1lbnRzOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBlbGVtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBFeHByZXNzaW9uIGVsZW1lbnQgPSBlbGVtZW50c1tpXTsKICAgICAgaWYgKGVsZW1lbnQgaXMgQXJyYXlIb2xlKSB7CiAgICAgICAgLy8gTm90ZSB0aGF0IGFycmF5IGhvbGVzIG11c3QgaGF2ZSBhIHRyYWlsaW5nICIsIiBldmVuIGlmIHRoZXkgYXJlCiAgICAgICAgLy8gaW4gbGFzdCBwb3NpdGlvbi4gT3RoZXJ3aXNlIGBbLF1gIChoYXZpbmcgbGVuZ3RoIDEpIHdvdWxkIGJlY29tZQogICAgICAgIC8vIGVxdWFsIHRvIGBbXWAgKHRoZSBlbXB0eSBhcnJheSkKICAgICAgICAvLyBhbmQgWzEsLF0gKGFycmF5IHdpdGggMSBhbmQgYSBob2xlKSB3b3VsZCBiZWNvbWUgWzEsXSA9IFsxXS4KICAgICAgICBzdGFydE5vZGUoZWxlbWVudCk7CiAgICAgICAgb3V0KCIsIik7CiAgICAgICAgZW5kTm9kZShlbGVtZW50KTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoaSAhPSAwKSBzcGFjZU91dCgpOwogICAgICB2aXNpdE5lc3RlZEV4cHJlc3Npb24oZWxlbWVudCwgQVNTSUdOTUVOVCwKICAgICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICAgICAgLy8gV2UgY2FuIHNraXAgdGhlIHRyYWlsaW5nICIsIiBmb3IgdGhlIGxhc3QgZWxlbWVudCAoc2luY2UgaXQncyBub3QKICAgICAgLy8gYW4gYXJyYXkgaG9sZSkuCiAgICAgIGlmIChpICE9IGVsZW1lbnRzLmxlbmd0aCAtIDEpIG91dCgiLCIpOwogICAgfQogICAgb3V0KCJdIik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXJyYXlIb2xlKEFycmF5SG9sZSBub2RlKSB7CiAgICBjb250ZXh0LmVycm9yKCJVbnJlYWNoYWJsZSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE9iamVjdEluaXRpYWxpemVyKE9iamVjdEluaXRpYWxpemVyIG5vZGUpIHsKICAgIC8vIFByaW50IGFsbCB0aGUgcHJvcGVydGllcyBvbiBvbmUgbGluZSB1bnRpbCB3ZSBzZWUgYSBmdW5jdGlvbi12YWx1ZWQKICAgIC8vIHByb3BlcnR5LiAgSWRlYWxseSwgd2Ugd291bGQgdXNlIGEgcHJvcGVyIHByZXR0eS1wcmludGVyIHRvIG1ha2UgdGhlCiAgICAvLyBkZWNpc2lvbiBiYXNlZCBvbiBsYXlvdXQuCiAgICBib29sIGV4aXRPbmVMaW5lck1vZGUoRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgICByZXR1cm4gdmFsdWUgaXMgRnVuIHx8CiAgICAgICAgICB2YWx1ZSBpcyBBcnJheUluaXRpYWxpemVyICYmIHZhbHVlLmVsZW1lbnRzLmFueSgoZSkgPT4gZSBpcyBGdW4pOwogICAgfQoKICAgIGJvb2wgaXNPbmVMaW5lciA9IG5vZGUuaXNPbmVMaW5lciB8fCBzaG91bGRDb21wcmVzc091dHB1dDsKICAgIExpc3Q8UHJvcGVydHk+IHByb3BlcnRpZXMgPSBub2RlLnByb3BlcnRpZXM7CiAgICBvdXQoInsiKTsKICAgIGluZGVudE1vcmUoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykgewogICAgICBOb2RlIHZhbHVlID0gcHJvcGVydGllc1tpXS52YWx1ZTsKICAgICAgaWYgKGlzT25lTGluZXIgJiYgZXhpdE9uZUxpbmVyTW9kZSh2YWx1ZSkpIGlzT25lTGluZXIgPSBmYWxzZTsKICAgICAgaWYgKGkgIT0gMCkgewogICAgICAgIG91dCgiLCIpOwogICAgICAgIGlmIChpc09uZUxpbmVyKSBzcGFjZU91dCgpOwogICAgICB9CiAgICAgIGlmICghaXNPbmVMaW5lcikgewogICAgICAgIGZvcmNlTGluZSgpOwogICAgICAgIGluZGVudCgpOwogICAgICB9CiAgICAgIHZpc2l0KHByb3BlcnRpZXNbaV0pOwogICAgfQogICAgaW5kZW50TGVzcygpOwogICAgaWYgKCFpc09uZUxpbmVyICYmICFwcm9wZXJ0aWVzLmlzRW1wdHkpIHsKICAgICAgbGluZU91dCgpOwogICAgICBpbmRlbnQoKTsKICAgIH0KICAgIG91dCgifSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByb3BlcnR5KFByb3BlcnR5IG5vZGUpIHsKICAgIHN0YXJ0Tm9kZShub2RlLm5hbWUpOwogICAgTm9kZSBuYW1lID0gdW5kZWZlcihub2RlLm5hbWUpOwogICAgaWYgKG5hbWUgaXMgTGl0ZXJhbFN0cmluZykgewogICAgICBTdHJpbmcgdGV4dCA9IG5hbWUudmFsdWU7CiAgICAgIGlmIChpc1ZhbGlkSmF2YVNjcmlwdElkKHRleHQpKSB7CiAgICAgICAgb3V0KHRleHQuc3Vic3RyaW5nKDEsIHRleHQubGVuZ3RoIC0gMSkpOwogICAgICB9IGVsc2UgewogICAgICAgIG91dCh0ZXh0KTsKICAgICAgfQogICAgfSBlbHNlIGlmIChuYW1lIGlzIE5hbWUpIHsKICAgICAgbm9kZS5uYW1lLmFjY2VwdCh0aGlzKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChuYW1lIGlzIExpdGVyYWxOdW1iZXIpOwogICAgICBMaXRlcmFsTnVtYmVyIG5hbWVOdW1iZXIgPSBub2RlLm5hbWU7CiAgICAgIG91dChuYW1lTnVtYmVyLnZhbHVlKTsKICAgIH0KICAgIGVuZE5vZGUobm9kZS5uYW1lKTsKICAgIG91dCgiOiIpOwogICAgc3BhY2VPdXQoKTsKICAgIHZpc2l0TmVzdGVkRXhwcmVzc2lvbihub2RlLnZhbHVlLCBBU1NJR05NRU5ULAogICAgICAgIG5ld0luRm9ySW5pdDogZmFsc2UsIG5ld0F0U3RhdGVtZW50QmVnaW46IGZhbHNlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRSZWdFeHBMaXRlcmFsKFJlZ0V4cExpdGVyYWwgbm9kZSkgewogICAgb3V0KG5vZGUucGF0dGVybik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGl0ZXJhbEV4cHJlc3Npb24oTGl0ZXJhbEV4cHJlc3Npb24gbm9kZSkgewogICAgU3RyaW5nIHRlbXBsYXRlID0gbm9kZS50ZW1wbGF0ZTsKICAgIExpc3Q8RXhwcmVzc2lvbj4gaW5wdXRzID0gbm9kZS5pbnB1dHM7CgogICAgTGlzdDxTdHJpbmc+IHBhcnRzID0gdGVtcGxhdGUuc3BsaXQoJyMnKTsKICAgIGludCBpbnB1dHNMZW5ndGggPSBpbnB1dHMgPT0gbnVsbCA/IDAgOiBpbnB1dHMubGVuZ3RoOwogICAgaWYgKHBhcnRzLmxlbmd0aCAhPSBpbnB1dHNMZW5ndGggKyAxKSB7CiAgICAgIGNvbnRleHQuZXJyb3IoJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIEpTOiAkdGVtcGxhdGUnKTsKICAgIH0KICAgIC8vIENvZGUgdGhhdCB1c2VzIEpTIG11c3QgdGFrZSBjYXJlIG9mIG9wZXJhdG9yIHByZWNlZGVuY2VzLCBhbmQKICAgIC8vIHB1dCBwYXJlbnRoZXNpcyBpZiBuZWVkZWQuCiAgICBvdXQocGFydHNbMF0pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnB1dHNMZW5ndGg7IGkrKykgewogICAgICB2aXNpdChpbnB1dHNbaV0pOwogICAgICBvdXQocGFydHNbaSArIDFdKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXRlcmFsU3RhdGVtZW50KExpdGVyYWxTdGF0ZW1lbnQgbm9kZSkgewogICAgb3V0TG4obm9kZS5jb2RlKTsKICB9CgogIHZvaWQgdmlzaXRJbnRlcnBvbGF0ZWROb2RlKEludGVycG9sYXRlZE5vZGUgbm9kZSkgewogICAgb3V0KCcjJHtub2RlLm5hbWVPclBvc2l0aW9ufScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVycG9sYXRlZEV4cHJlc3Npb24oSW50ZXJwb2xhdGVkRXhwcmVzc2lvbiBub2RlKSA9PgogICAgICB2aXNpdEludGVycG9sYXRlZE5vZGUobm9kZSk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcnBvbGF0ZWRMaXRlcmFsKEludGVycG9sYXRlZExpdGVyYWwgbm9kZSkgPT4KICAgICAgdmlzaXRJbnRlcnBvbGF0ZWROb2RlKG5vZGUpOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50ZXJwb2xhdGVkUGFyYW1ldGVyKEludGVycG9sYXRlZFBhcmFtZXRlciBub2RlKSA9PgogICAgICB2aXNpdEludGVycG9sYXRlZE5vZGUobm9kZSk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcnBvbGF0ZWRTZWxlY3RvcihJbnRlcnBvbGF0ZWRTZWxlY3RvciBub2RlKSA9PgogICAgICB2aXNpdEludGVycG9sYXRlZE5vZGUobm9kZSk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQoSW50ZXJwb2xhdGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIG91dExuKCcjJHtub2RlLm5hbWVPclBvc2l0aW9ufScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEludGVycG9sYXRlZERlY2xhcmF0aW9uKEludGVycG9sYXRlZERlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHZpc2l0SW50ZXJwb2xhdGVkTm9kZShub2RlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb21tZW50KENvbW1lbnQgbm9kZSkgewogICAgaWYgKHNob3VsZENvbXByZXNzT3V0cHV0KSByZXR1cm47CiAgICBTdHJpbmcgY29tbWVudCA9IG5vZGUuY29tbWVudC50cmltKCk7CiAgICBpZiAoY29tbWVudC5pc0VtcHR5KSByZXR1cm47CiAgICBmb3IgKHZhciBsaW5lIGluIGNvbW1lbnQuc3BsaXQoJ1xuJykpIHsKICAgICAgaWYgKGNvbW1lbnQuc3RhcnRzV2l0aCgnLy8nKSkgewogICAgICAgIG91dEluZGVudExuKGxpbmUudHJpbSgpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBvdXRJbmRlbnRMbignLy8gJHtsaW5lLnRyaW0oKX0nKTsKICAgICAgfQogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEF3YWl0KEF3YWl0IG5vZGUpIHsKICAgIG91dCgiYXdhaXQgIik7CiAgICB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogIH0KfQoKY2xhc3MgT3JkZXJlZFNldDxUPiB7CiAgZmluYWwgU2V0PFQ+IHNldDsKICBmaW5hbCBMaXN0PFQ+IGxpc3Q7CgogIE9yZGVyZWRTZXQoKQogICAgICA6IHNldCA9IG5ldyBTZXQ8VD4oKSwKICAgICAgICBsaXN0ID0gPFQ+W107CgogIHZvaWQgYWRkKFQgeCkgewogICAgaWYgKHNldC5hZGQoeCkpIHsKICAgICAgLy8gW1NldC5hZGRdIHJldHVybnMgYHRydWVgIGlmICd4JyB3YXMgYWRkZWQuCiAgICAgIGxpc3QuYWRkKHgpOwogICAgfQogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZnVuKFQgeCkpIHsKICAgIGxpc3QuZm9yRWFjaChmdW4pOwogIH0KfQoKLy8gQ29sbGVjdHMgYWxsIHRoZSB2YXIgZGVjbGFyYXRpb25zIGluIHRoZSBmdW5jdGlvbi4gIFdlIG5lZWQgdG8gZG8gdGhpcyBpbiBhCi8vIHNlcGFyYXRlIHBhc3MgYmVjYXVzZSBKUyB2YXJzIGFyZSBsaWZ0ZWQgdG8gdGhlIHRvcCBvZiB0aGUgZnVuY3Rpb24uCmNsYXNzIFZhckNvbGxlY3RvciBleHRlbmRzIEJhc2VWaXNpdG9yIHsKICBib29sIG5lc3RlZDsKICBib29sIGVuYWJsZVJlbmFtaW5nID0gdHJ1ZTsKICBmaW5hbCBPcmRlcmVkU2V0PFN0cmluZz4gdmFyczsKICBmaW5hbCBPcmRlcmVkU2V0PFN0cmluZz4gcGFyYW1zOwoKICBzdGF0aWMgZmluYWwgU3RyaW5nIGRpc2FibGVWYXJpYWJsZU1pbmlmaWNhdGlvblBhdHRlcm4gPSAiOjpub3JlbmFtaW5nOjoiOwogIHN0YXRpYyBmaW5hbCBTdHJpbmcgZW5hYmxlVmFyaWFibGVNaW5pZmljYXRpb25QYXR0ZXJuID0gIjo6ZG9yZW5hbWluZzo6IjsKCiAgVmFyQ29sbGVjdG9yKCkKICAgICAgOiBuZXN0ZWQgPSBmYWxzZSwKICAgICAgICB2YXJzID0gbmV3IE9yZGVyZWRTZXQ8U3RyaW5nPigpLAogICAgICAgIHBhcmFtcyA9IG5ldyBPcmRlcmVkU2V0PFN0cmluZz4oKTsKCiAgdm9pZCBmb3JFYWNoVmFyKHZvaWQgZm4oU3RyaW5nIHYpKSA9PiB2YXJzLmZvckVhY2goZm4pOwogIHZvaWQgZm9yRWFjaFBhcmFtKHZvaWQgZm4oU3RyaW5nIHApKSA9PiBwYXJhbXMuZm9yRWFjaChmbik7CgogIHZvaWQgY29sbGVjdFZhcnNJbkZ1bmN0aW9uKEZ1biBmdW4pIHsKICAgIGlmICghbmVzdGVkKSB7CiAgICAgIG5lc3RlZCA9IHRydWU7CiAgICAgIGlmIChmdW4ucGFyYW1zICE9IG51bGwpIHsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGZ1bi5wYXJhbXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHBhcmFtcy5hZGQoZnVuLnBhcmFtc1tpXS5uYW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmlzaXRCbG9jayhmdW4uYm9keSk7CiAgICAgIG5lc3RlZCA9IGZhbHNlOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oRnVuY3Rpb25EZWNsYXJhdGlvbiBkZWNsYXJhdGlvbikgewogICAgLy8gTm90ZSB0aGF0IHdlIGRvbid0IGJvdGhlciBjb2xsZWN0aW5nIHRoZSBuYW1lIG9mIHRoZSBmdW5jdGlvbi4KICAgIGNvbGxlY3RWYXJzSW5GdW5jdGlvbihkZWNsYXJhdGlvbi5mdW5jdGlvbik7CiAgfQoKICB2b2lkIHZpc2l0TmFtZWRGdW5jdGlvbihOYW1lZEZ1bmN0aW9uIG5hbWVkRnVuY3Rpb24pIHsKICAgIC8vIE5vdGUgdGhhdCB3ZSBkb24ndCBib3RoZXIgY29sbGVjdGluZyB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24uCiAgICBjb2xsZWN0VmFyc0luRnVuY3Rpb24obmFtZWRGdW5jdGlvbi5mdW5jdGlvbik7CiAgfQoKICB2b2lkIHZpc2l0RnVuKEZ1biBmdW4pIHsKICAgIGNvbGxlY3RWYXJzSW5GdW5jdGlvbihmdW4pOwogIH0KCiAgdm9pZCB2aXNpdFRoaXMoVGhpcyBub2RlKSB7fQoKICB2b2lkIHZpc2l0Q29tbWVudChDb21tZW50IG5vZGUpIHsKICAgIGlmIChub2RlLmNvbW1lbnQuY29udGFpbnMoZGlzYWJsZVZhcmlhYmxlTWluaWZpY2F0aW9uUGF0dGVybikpIHsKICAgICAgZW5hYmxlUmVuYW1pbmcgPSBmYWxzZTsKICAgIH0gZWxzZSBpZiAobm9kZS5jb21tZW50LmNvbnRhaW5zKGVuYWJsZVZhcmlhYmxlTWluaWZpY2F0aW9uUGF0dGVybikpIHsKICAgICAgZW5hYmxlUmVuYW1pbmcgPSB0cnVlOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oVmFyaWFibGVEZWNsYXJhdGlvbiBkZWNsKSB7CiAgICBpZiAoZW5hYmxlUmVuYW1pbmcgJiYgZGVjbC5hbGxvd1JlbmFtZSkgdmFycy5hZGQoZGVjbC5uYW1lKTsKICB9Cn0KCi8qKgogKiBSZXR1cm5zIHRydWUsIGlmIHRoZSBnaXZlbiBub2RlIG11c3QgYmUgd3JhcHBlZCBpbnRvIGJyYWNlcyB3aGVuIHVzZWQKICogYXMgdGhlbi1zdGF0ZW1lbnQgaW4gYW4gW0lmXSB0aGF0IGhhcyBhbiBlbHNlIGJyYW5jaC4KICovCmNsYXNzIERhbmdsaW5nRWxzZVZpc2l0b3IgZXh0ZW5kcyBCYXNlVmlzaXRvcjxib29sPiB7CiAgSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCBjb250ZXh0OwoKICBEYW5nbGluZ0Vsc2VWaXNpdG9yKHRoaXMuY29udGV4dCk7CgogIGJvb2wgdmlzaXRQcm9ncmFtKFByb2dyYW0gbm9kZSkgPT4gZmFsc2U7CgogIGJvb2wgdmlzaXROb2RlKE5vZGUgbm9kZSkgewogICAgY29udGV4dC5lcnJvcigiRm9yZ290IG5vZGU6ICRub2RlIik7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGJvb2wgdmlzaXRCbG9jayhCbG9jayBub2RlKSA9PiBmYWxzZTsKICBib29sIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpID0+IGZhbHNlOwogIGJvb2wgdmlzaXRFbXB0eVN0YXRlbWVudChFbXB0eVN0YXRlbWVudCBub2RlKSA9PiBmYWxzZTsKICBib29sIHZpc2l0SWYoSWYgbm9kZSkgewogICAgaWYgKCFub2RlLmhhc0Vsc2UpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG5vZGUub3RoZXJ3aXNlLmFjY2VwdCh0aGlzKTsKICB9CgogIGJvb2wgdmlzaXRGb3IoRm9yIG5vZGUpID0+IG5vZGUuYm9keS5hY2NlcHQodGhpcyk7CiAgYm9vbCB2aXNpdEZvckluKEZvckluIG5vZGUpID0+IG5vZGUuYm9keS5hY2NlcHQodGhpcyk7CiAgYm9vbCB2aXNpdFdoaWxlKFdoaWxlIG5vZGUpID0+IG5vZGUuYm9keS5hY2NlcHQodGhpcyk7CiAgYm9vbCB2aXNpdERvKERvIG5vZGUpID0+IGZhbHNlOwogIGJvb2wgdmlzaXRDb250aW51ZShDb250aW51ZSBub2RlKSA9PiBmYWxzZTsKICBib29sIHZpc2l0QnJlYWsoQnJlYWsgbm9kZSkgPT4gZmFsc2U7CiAgYm9vbCB2aXNpdFJldHVybihSZXR1cm4gbm9kZSkgPT4gZmFsc2U7CiAgYm9vbCB2aXNpdFRocm93KFRocm93IG5vZGUpID0+IGZhbHNlOwogIGJvb2wgdmlzaXRUcnkoVHJ5IG5vZGUpIHsKICAgIGlmIChub2RlLmZpbmFsbHlQYXJ0ICE9IG51bGwpIHsKICAgICAgcmV0dXJuIG5vZGUuZmluYWxseVBhcnQuYWNjZXB0KHRoaXMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5vZGUuY2F0Y2hQYXJ0LmFjY2VwdCh0aGlzKTsKICAgIH0KICB9CgogIGJvb2wgdmlzaXRDYXRjaChDYXRjaCBub2RlKSA9PiBub2RlLmJvZHkuYWNjZXB0KHRoaXMpOwogIGJvb2wgdmlzaXRTd2l0Y2goU3dpdGNoIG5vZGUpID0+IGZhbHNlOwogIGJvb2wgdmlzaXRDYXNlKENhc2Ugbm9kZSkgPT4gZmFsc2U7CiAgYm9vbCB2aXNpdERlZmF1bHQoRGVmYXVsdCBub2RlKSA9PiBmYWxzZTsKICBib29sIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpID0+IGZhbHNlOwogIGJvb2wgdmlzaXRMYWJlbGVkU3RhdGVtZW50KExhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgPT4gbm9kZS5ib2R5LmFjY2VwdCh0aGlzKTsKICBib29sIHZpc2l0TGl0ZXJhbFN0YXRlbWVudChMaXRlcmFsU3RhdGVtZW50IG5vZGUpID0+IHRydWU7CgogIGJvb2wgdmlzaXRFeHByZXNzaW9uKEV4cHJlc3Npb24gbm9kZSkgPT4gZmFsc2U7Cn0KCmFic3RyYWN0IGNsYXNzIExvY2FsTmFtZXIgewogIFN0cmluZyBnZXROYW1lKFN0cmluZyBvbGROYW1lKTsKICBTdHJpbmcgZGVjbGFyZVZhcmlhYmxlKFN0cmluZyBvbGROYW1lKTsKICBTdHJpbmcgZGVjbGFyZVBhcmFtZXRlcihTdHJpbmcgb2xkTmFtZSk7CiAgdm9pZCBlbnRlclNjb3BlKFZhckNvbGxlY3RvciB2YXJzKTsKICB2b2lkIGxlYXZlU2NvcGUoKTsKfQoKY2xhc3MgSWRlbnRpdHlOYW1lciBpbXBsZW1lbnRzIExvY2FsTmFtZXIgewogIFN0cmluZyBnZXROYW1lKFN0cmluZyBvbGROYW1lKSA9PiBvbGROYW1lOwogIFN0cmluZyBkZWNsYXJlVmFyaWFibGUoU3RyaW5nIG9sZE5hbWUpID0+IG9sZE5hbWU7CiAgU3RyaW5nIGRlY2xhcmVQYXJhbWV0ZXIoU3RyaW5nIG9sZE5hbWUpID0+IG9sZE5hbWU7CiAgdm9pZCBlbnRlclNjb3BlKFZhckNvbGxlY3RvciB2YXJzKSB7fQogIHZvaWQgbGVhdmVTY29wZSgpIHt9Cn0KCmNsYXNzIE1pbmlmeVJlbmFtZXIgaW1wbGVtZW50cyBMb2NhbE5hbWVyIHsKICBmaW5hbCBMaXN0PE1hcDxTdHJpbmcsIFN0cmluZz4+IG1hcHMgPSBbXTsKICBmaW5hbCBMaXN0PGludD4gcGFyYW1ldGVyTnVtYmVyU3RhY2sgPSBbXTsKICBmaW5hbCBMaXN0PGludD4gdmFyaWFibGVOdW1iZXJTdGFjayA9IFtdOwogIGludCBwYXJhbWV0ZXJOdW1iZXIgPSAwOwogIGludCB2YXJpYWJsZU51bWJlciA9IDA7CgogIE1pbmlmeVJlbmFtZXIoKTsKCiAgdm9pZCBlbnRlclNjb3BlKFZhckNvbGxlY3RvciB2YXJzKSB7CiAgICBtYXBzLmFkZChuZXcgTWFwPFN0cmluZywgU3RyaW5nPigpKTsKICAgIHZhcmlhYmxlTnVtYmVyU3RhY2suYWRkKHZhcmlhYmxlTnVtYmVyKTsKICAgIHBhcmFtZXRlck51bWJlclN0YWNrLmFkZChwYXJhbWV0ZXJOdW1iZXIpOwogICAgdmFycy5mb3JFYWNoVmFyKGRlY2xhcmVWYXJpYWJsZSk7CiAgICB2YXJzLmZvckVhY2hQYXJhbShkZWNsYXJlUGFyYW1ldGVyKTsKICB9CgogIHZvaWQgbGVhdmVTY29wZSgpIHsKICAgIG1hcHMucmVtb3ZlTGFzdCgpOwogICAgdmFyaWFibGVOdW1iZXIgPSB2YXJpYWJsZU51bWJlclN0YWNrLnJlbW92ZUxhc3QoKTsKICAgIHBhcmFtZXRlck51bWJlciA9IHBhcmFtZXRlck51bWJlclN0YWNrLnJlbW92ZUxhc3QoKTsKICB9CgogIFN0cmluZyBnZXROYW1lKFN0cmluZyBvbGROYW1lKSB7CiAgICAvLyBHbyBmcm9tIGlubmVyIHNjb3BlIHRvIG91dGVyIGxvb2tpbmcgZm9yIG1hcHBpbmcgb2YgbmFtZS4KICAgIGZvciAoaW50IGkgPSBtYXBzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIHZhciBtYXAgPSBtYXBzW2ldOwogICAgICB2YXIgcmVwbGFjZW1lbnQgPSBtYXBbb2xkTmFtZV07CiAgICAgIGlmIChyZXBsYWNlbWVudCAhPSBudWxsKSByZXR1cm4gcmVwbGFjZW1lbnQ7CiAgICB9CiAgICByZXR1cm4gb2xkTmFtZTsKICB9CgogIHN0YXRpYyBjb25zdCBMT1dFUl9DQVNFX0xFVFRFUlMgPSAyNjsKICBzdGF0aWMgY29uc3QgTEVUVEVSUyA9IExPV0VSX0NBU0VfTEVUVEVSUzsKICBzdGF0aWMgY29uc3QgRElHSVRTID0gMTA7CgogIHN0YXRpYyBpbnQgbnRoTGV0dGVyKGludCBuKSB7CiAgICByZXR1cm4gKG4gPCBMT1dFUl9DQVNFX0xFVFRFUlMpCiAgICAgICAgPyBjaGFyQ29kZXMuJGEgKyBuCiAgICAgICAgOiBjaGFyQ29kZXMuJEEgKyBuIC0gTE9XRVJfQ0FTRV9MRVRURVJTOwogIH0KCiAgLy8gUGFyYW1ldGVycyBnbyBmcm9tIGEgdG8geiBhbmQgdmFyaWFibGVzIGdvIGZyb20geiB0byBhLiAgVGhpcyBtYWtlcyBlYWNoCiAgLy8gYXJndW1lbnQgbGlzdCBhbmQgZWFjaCB0b3Atb2YtZnVuY3Rpb24gdmFyIGRlY2xhcmF0aW9uIGxvb2sgc2ltaWxhciBhbmQKICAvLyBoZWxwcyBnemlwIGNvbXByZXNzIHRoZSBmaWxlLiAgSWYgd2UgaGF2ZSBtb3JlIHRoYW4gMjYgYXJndW1lbnRzIGFuZAogIC8vIHZhcmlhYmxlcyB0aGVuIHdlIG1lZXQgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhlIGFscGhhYmV0LiAgQWZ0ZXIKICAvLyB0aGF0IHdlIGdpdmUgdXAgdHJ5aW5nIHRvIGJlIG5pY2UgdG8gdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobSBhbmQganVzdAogIC8vIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UgZm9yIGFyZ3VtZW50cyBhbmQgdmFyaWFibGVzLCBzdGFydGluZyB3aXRoIEEsIGFuZAogIC8vIG1vdmluZyBvbiB0byBhMCwgYTEsIGV0Yy4KICBTdHJpbmcgZGVjbGFyZVZhcmlhYmxlKFN0cmluZyBvbGROYW1lKSB7CiAgICBpZiAoYXZvaWRSZW5hbWluZyhvbGROYW1lKSkgcmV0dXJuIG9sZE5hbWU7CiAgICB2YXIgbmV3TmFtZTsKICAgIGlmICh2YXJpYWJsZU51bWJlciArIHBhcmFtZXRlck51bWJlciA8IExPV0VSX0NBU0VfTEVUVEVSUykgewogICAgICAvLyBWYXJpYWJsZXMgc3RhcnQgZnJvbSB6IGFuZCBnbyBiYWNrd2FyZHMsIGZvciBiZXR0ZXIgZ3ppcGFiaWxpdHkuCiAgICAgIG5ld05hbWUgPSBnZXROYW1lTnVtYmVyKG9sZE5hbWUsIExPV0VSX0NBU0VfTEVUVEVSUyAtIDEgLSB2YXJpYWJsZU51bWJlcik7CiAgICB9IGVsc2UgewogICAgICAvLyBBZnRlciAyNiB2YXJpYWJsZXMgYW5kIHBhcmFtZXRlcnMgd2UgYWxsb2NhdGUgdGhlbSBpbiB0aGUgc2FtZSBvcmRlci4KICAgICAgbmV3TmFtZSA9IGdldE5hbWVOdW1iZXIob2xkTmFtZSwgdmFyaWFibGVOdW1iZXIgKyBwYXJhbWV0ZXJOdW1iZXIpOwogICAgfQogICAgdmFyaWFibGVOdW1iZXIrKzsKICAgIHJldHVybiBuZXdOYW1lOwogIH0KCiAgU3RyaW5nIGRlY2xhcmVQYXJhbWV0ZXIoU3RyaW5nIG9sZE5hbWUpIHsKICAgIGlmIChhdm9pZFJlbmFtaW5nKG9sZE5hbWUpKSByZXR1cm4gb2xkTmFtZTsKICAgIHZhciBuZXdOYW1lOwogICAgaWYgKHZhcmlhYmxlTnVtYmVyICsgcGFyYW1ldGVyTnVtYmVyIDwgTE9XRVJfQ0FTRV9MRVRURVJTKSB7CiAgICAgIG5ld05hbWUgPSBnZXROYW1lTnVtYmVyKG9sZE5hbWUsIHBhcmFtZXRlck51bWJlcik7CiAgICB9IGVsc2UgewogICAgICBuZXdOYW1lID0gZ2V0TmFtZU51bWJlcihvbGROYW1lLCB2YXJpYWJsZU51bWJlciArIHBhcmFtZXRlck51bWJlcik7CiAgICB9CiAgICBwYXJhbWV0ZXJOdW1iZXIrKzsKICAgIHJldHVybiBuZXdOYW1lOwogIH0KCiAgYm9vbCBhdm9pZFJlbmFtaW5nKFN0cmluZyBvbGROYW1lKSB7CiAgICAvLyBWYXJpYWJsZXMgb2YgdGhpcyAkZm9ybSQgYXJlIHVzZWQgaW4gcGF0dGVybiBtYXRjaGluZyB0aGUgbWVzc2FnZSBvZiBKUwogICAgLy8gZXhjZXB0aW9ucywgc28gc2hvdWxkIG5vdCBiZSByZW5hbWVkLgogICAgLy8gVE9ETyhzcmEpOiBJbnRyb2R1Y2UgYSB3YXkgZm9yIGluZGljYXRpbmcgaW4gdGhlIEpTIHRleHQgd2hpY2ggdmFyaWFibGVzCiAgICAvLyBzaG91bGQgbm90IGJlIHJlbmFtZWQuCiAgICByZXR1cm4gb2xkTmFtZS5zdGFydHNXaXRoKHInJCcpICYmIG9sZE5hbWUuZW5kc1dpdGgocickJyk7CiAgfQoKICBTdHJpbmcgZ2V0TmFtZU51bWJlcihTdHJpbmcgb2xkTmFtZSwgaW50IG4pIHsKICAgIGlmIChtYXBzLmlzRW1wdHkpIHJldHVybiBvbGROYW1lOwoKICAgIFN0cmluZyBuZXdOYW1lOwogICAgaWYgKG4gPCBMRVRURVJTKSB7CiAgICAgIC8vIFN0YXJ0IG5hbWluZyB2YXJpYWJsZXMgYSwgYiwgYywgLi4uLCB6LCBBLCBCLCBDLCAuLi4sIFouCiAgICAgIG5ld05hbWUgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoW250aExldHRlcihuKV0pOwogICAgfSBlbHNlIHsKICAgICAgLy8gVGhlbiBuYW1lIHZhcmlhYmxlcyBhMCwgYTEsIGEyLCAuLi4sIGE5LCBiMCwgYjEsIC4uLiwgWjksIGFhMCwgYWExLCAuLi4KICAgICAgLy8gRm9yIGFsbCBmdW5jdGlvbnMgd2l0aCBmZXdlciB0aGFuIDUwMCBsb2NhbHMgdGhpcyBpcyBqdXN0IGFzIGNvbXBhY3QKICAgICAgLy8gYXMgdXNpbmcgYWEsIGFiLCBldGMuIGJ1dCBhdm9pZHMgY2xhc2hlcyB3aXRoIGtleXdvcmRzLgogICAgICBuIC09IExFVFRFUlM7CiAgICAgIGludCBkaWdpdCA9IG4gJSBESUdJVFM7CiAgICAgIG4gfi89IERJR0lUUzsKICAgICAgaW50IGFscGhhQ2hhcnMgPSAxOwogICAgICBpbnQgbmFtZVNwYWNlU2l6ZSA9IExFVFRFUlM7CiAgICAgIC8vIEZpbmQgb3V0IHdoZXRoZXIgd2Ugc2hvdWxkIHVzZSB0aGUgMS1jaGFyYWN0ZXIgbmFtZXNwYWNlIChzaXplIDUyKSwgdGhlCiAgICAgIC8vIDItY2hhcmFjdGVyIG5hbWVzcGFjZSAoc2l6ZSA1Mio1MiksIGV0Yy4KICAgICAgd2hpbGUgKG4gPj0gbmFtZVNwYWNlU2l6ZSkgewogICAgICAgIG4gLT0gbmFtZVNwYWNlU2l6ZTsKICAgICAgICBhbHBoYUNoYXJzKys7CiAgICAgICAgbmFtZVNwYWNlU2l6ZSAqPSBMRVRURVJTOwogICAgICB9CiAgICAgIHZhciBjb2RlcyA9IDxpbnQ+W107CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxwaGFDaGFyczsgaSsrKSB7CiAgICAgICAgbmFtZVNwYWNlU2l6ZSB+Lz0gTEVUVEVSUzsKICAgICAgICBjb2Rlcy5hZGQobnRoTGV0dGVyKChuIH4vIG5hbWVTcGFjZVNpemUpICUgTEVUVEVSUykpOwogICAgICB9CiAgICAgIGNvZGVzLmFkZChjaGFyQ29kZXMuJDAgKyBkaWdpdCk7CiAgICAgIG5ld05hbWUgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZXMpOwogICAgfQogICAgYXNzZXJ0KG5ldyBSZWdFeHAocidbYS16QS1aXVthLXpBLVowLTldKicpLmhhc01hdGNoKG5ld05hbWUpKTsKICAgIG1hcHMubGFzdFtvbGROYW1lXSA9IG5ld05hbWU7CiAgICByZXR1cm4gbmV3TmFtZTsKICB9Cn0KCi8vLyBJbmZvcm1hdGlvbiBwZXJ0YWluaW5nIHRoZSBlbnRlciBhbmQgZXhpdCBjYWxsYmFja3MgZm9yIFtub2RlXS4KY2xhc3MgRW50ZXJFeGl0Tm9kZSB7CiAgZmluYWwgRW50ZXJFeGl0Tm9kZSBwYXJlbnQ7CiAgZmluYWwgTm9kZSBub2RlOwoKICBpbnQgc3RhcnRQb3NpdGlvbjsKICBpbnQgY2xvc2luZ1Bvc2l0aW9uOwoKICBFbnRlckV4aXROb2RlKHRoaXMucGFyZW50LCB0aGlzLm5vZGUpOwoKICB2b2lkIGFkZFRvTm9kZShKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0IGNvbnRleHQsIGludCBwb3NpdGlvbikgewogICAgaWYgKHN0YXJ0UG9zaXRpb24gPT0gbnVsbCkgewogICAgICAvLyBbcG9zaXRpb25dIGlzIHRoZSBzdGFydCBwb3NpdGlvbiBvZiBbbm9kZV0uCiAgICAgIGlmIChwYXJlbnQgIT0gbnVsbCkgewogICAgICAgIC8vIFRoaXMgbWlnaHQgYmUgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBwYXJlbnQgYXMgd2VsbC4KICAgICAgICBwYXJlbnQuYWRkVG9Ob2RlKGNvbnRleHQsIHBvc2l0aW9uKTsKICAgICAgfQogICAgICBzdGFydFBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgIGNvbnRleHQuZW50ZXJOb2RlKG5vZGUsIHBvc2l0aW9uKTsKICAgIH0KICB9CgogIEVudGVyRXhpdE5vZGUgZXhpdE5vZGUoSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dCBjb250ZXh0LCBpbnQgcG9zaXRpb24pIHsKICAgIC8vIEVudGVyIG11c3QgaGFwcGVuIGJlZm9yZSBleGl0LgogICAgYWRkVG9Ob2RlKGNvbnRleHQsIHBvc2l0aW9uKTsKICAgIGNvbnRleHQuZXhpdE5vZGUobm9kZSwgc3RhcnRQb3NpdGlvbiwgcG9zaXRpb24sIGNsb3NpbmdQb3NpdGlvbik7CiAgICByZXR1cm4gcGFyZW50OwogIH0KfQqGXgBOTjwBEAEjASIjIzch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ZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBqc19hc3Q7CgpjbGFzcyBUZW1wbGF0ZU1hbmFnZXIgewogIE1hcDxTdHJpbmcsIFRlbXBsYXRlPiBleHByZXNzaW9uVGVtcGxhdGVzID0gbmV3IE1hcDxTdHJpbmcsIFRlbXBsYXRlPigpOwogIE1hcDxTdHJpbmcsIFRlbXBsYXRlPiBzdGF0ZW1lbnRUZW1wbGF0ZXMgPSBuZXcgTWFwPFN0cmluZywgVGVtcGxhdGU+KCk7CgogIFRlbXBsYXRlTWFuYWdlcigpOwoKICBUZW1wbGF0ZSBsb29rdXBFeHByZXNzaW9uVGVtcGxhdGUoU3RyaW5nIHNvdXJjZSkgewogICAgcmV0dXJuIGV4cHJlc3Npb25UZW1wbGF0ZXNbc291cmNlXTsKICB9CgogIFRlbXBsYXRlIGRlZmluZUV4cHJlc3Npb25UZW1wbGF0ZShTdHJpbmcgc291cmNlLCBOb2RlIGFzdCkgewogICAgVGVtcGxhdGUgdGVtcGxhdGUgPQogICAgICAgIG5ldyBUZW1wbGF0ZShzb3VyY2UsIGFzdCwgaXNFeHByZXNzaW9uOiB0cnVlLCBmb3JjZUNvcHk6IGZhbHNlKTsKICAgIGV4cHJlc3Npb25UZW1wbGF0ZXNbc291cmNlXSA9IHRlbXBsYXRlOwogICAgcmV0dXJuIHRlbXBsYXRlOwogIH0KCiAgVGVtcGxhdGUgbG9va3VwU3RhdGVtZW50VGVtcGxhdGUoU3RyaW5nIHNvdXJjZSkgewogICAgcmV0dXJuIHN0YXRlbWVudFRlbXBsYXRlc1tzb3VyY2VdOwogIH0KCiAgVGVtcGxhdGUgZGVmaW5lU3RhdGVtZW50VGVtcGxhdGUoU3RyaW5nIHNvdXJjZSwgTm9kZSBhc3QpIHsKICAgIFRlbXBsYXRlIHRlbXBsYXRlID0KICAgICAgICBuZXcgVGVtcGxhdGUoc291cmNlLCBhc3QsIGlzRXhwcmVzc2lvbjogZmFsc2UsIGZvcmNlQ29weTogZmFsc2UpOwogICAgc3RhdGVtZW50VGVtcGxhdGVzW3NvdXJjZV0gPSB0ZW1wbGF0ZTsKICAgIHJldHVybiB0ZW1wbGF0ZTsKICB9Cn0KCi8qKgogKiBBIFRlbXBsYXRlIGlzIGNyZWF0ZWQgd2l0aCBKYXZhU2NyaXB0IEFTVCBjb250YWluaW5nIHBsYWNlaG9sZGVycyAoaW50ZXJmYWNlCiAqIEludGVycG9sYXRlZE5vZGUpLiAgVGhlIFtpbnN0YW50aWF0ZV0gbWV0aG9kIGNyZWF0ZXMgYW4gQVNUIHRoYXQgbG9va3MgbGlrZQogKiB0aGUgb3JpZ2luYWwgd2l0aCB0aGUgcGxhY2Vob2xkZXJzIHJlcGxhY2VkIGJ5IHRoZSBhcmd1bWVudHMgdG8KICogW2luc3RhbnRpYXRlXS4KICovCmNsYXNzIFRlbXBsYXRlIHsKICBmaW5hbCBTdHJpbmcgc291cmNlOwogIGZpbmFsIGJvb2wgaXNFeHByZXNzaW9uOwogIGZpbmFsIGJvb2wgZm9yY2VDb3B5OwogIGZpbmFsIE5vZGUgYXN0OwoKICBJbnN0YW50aWF0b3IgaW5zdGFudGlhdG9yOwoKICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50Q291bnQgPSAtMTsKCiAgLy8gTnVsbCwgdW5sZXNzIHRoZXJlIGFyZSBuYW1lZCBob2xlcy4KICBMaXN0PFN0cmluZz4gaG9sZU5hbWVzOwogIGJvb2wgZ2V0IGlzUG9zaXRpb25hbCA9PiBob2xlTmFtZXMgPT0gbnVsbDsKCiAgVGVtcGxhdGUodGhpcy5zb3VyY2UsIHRoaXMuYXN0LAogICAgICB7dGhpcy5pc0V4cHJlc3Npb246IHRydWUsIHRoaXMuZm9yY2VDb3B5OiBmYWxzZX0pIHsKICAgIGFzc2VydCh0aGlzLmlzRXhwcmVzc2lvbiA/IGFzdCBpcyBFeHByZXNzaW9uIDogYXN0IGlzIFN0YXRlbWVudCk7CiAgICBfY29tcGlsZSgpOwogIH0KCiAgVGVtcGxhdGUud2l0aEV4cHJlc3Npb25SZXN1bHQodGhpcy5hc3QpCiAgICAgIDogc291cmNlID0gbnVsbCwKICAgICAgICBpc0V4cHJlc3Npb24gPSB0cnVlLAogICAgICAgIGZvcmNlQ29weSA9IGZhbHNlIHsKICAgIGFzc2VydChhc3QgaXMgRXhwcmVzc2lvbik7CiAgICBhc3NlcnQoX2NoZWNrTm9QbGFjZWhvbGRlcnMoKSk7CiAgICBwb3NpdGlvbmFsQXJndW1lbnRDb3VudCA9IDA7CiAgICBpbnN0YW50aWF0b3IgPSAoYXJndW1lbnRzKSA9PiBhc3Q7CiAgfQoKICBUZW1wbGF0ZS53aXRoU3RhdGVtZW50UmVzdWx0KHRoaXMuYXN0KQogICAgICA6IHNvdXJjZSA9IG51bGwsCiAgICAgICAgaXNFeHByZXNzaW9uID0gZmFsc2UsCiAgICAgICAgZm9yY2VDb3B5ID0gZmFsc2UgewogICAgYXNzZXJ0KGFzdCBpcyBTdGF0ZW1lbnQpOwogICAgYXNzZXJ0KF9jaGVja05vUGxhY2Vob2xkZXJzKCkpOwogICAgcG9zaXRpb25hbEFyZ3VtZW50Q291bnQgPSAwOwogICAgaW5zdGFudGlhdG9yID0gKGFyZ3VtZW50cykgPT4gYXN0OwogIH0KCiAgYm9vbCBfY2hlY2tOb1BsYWNlaG9sZGVycygpIHsKICAgIEluc3RhbnRpYXRvckdlbmVyYXRvclZpc2l0b3IgZ2VuZXJhdG9yID0KICAgICAgICBuZXcgSW5zdGFudGlhdG9yR2VuZXJhdG9yVmlzaXRvcihmYWxzZSk7CiAgICBnZW5lcmF0b3IuY29tcGlsZShhc3QpOwogICAgcmV0dXJuIGdlbmVyYXRvci5hbmFseXNpcy5jb3VudCA9PSAwOwogIH0KCiAgdm9pZCBfY29tcGlsZSgpIHsKICAgIEluc3RhbnRpYXRvckdlbmVyYXRvclZpc2l0b3IgZ2VuZXJhdG9yID0KICAgICAgICBuZXcgSW5zdGFudGlhdG9yR2VuZXJhdG9yVmlzaXRvcihmb3JjZUNvcHkpOwogICAgaW5zdGFudGlhdG9yID0gZ2VuZXJhdG9yLmNvbXBpbGUoYXN0KTsKICAgIHBvc2l0aW9uYWxBcmd1bWVudENvdW50ID0gZ2VuZXJhdG9yLmFuYWx5c2lzLmNvdW50OwogICAgU2V0PFN0cmluZz4gbmFtZXMgPSBnZW5lcmF0b3IuYW5hbHlzaXMuaG9sZU5hbWVzOwogICAgaG9sZU5hbWVzID0gbmFtZXMudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgfQoKICAvLy8gSW5zdGFudGlhdGVzIHRoZSB0ZW1wbGF0ZSB3aXRoIHRoZSBnaXZlbiBbYXJndW1lbnRzXS4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgZmlsbHMgaW4gdGhlIGhvbGVzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4gVGhlIFthcmd1bWVudHNdCiAgLy8vIG11c3QgYmUgZWl0aGVyIGEgW0xpc3RdIG9yIGEgW01hcF0uCiAgTm9kZSBpbnN0YW50aWF0ZSh2YXIgYXJndW1lbnRzKSB7CiAgICBpZiAoYXJndW1lbnRzIGlzIExpc3QpIHsKICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT0gcG9zaXRpb25hbEFyZ3VtZW50Q291bnQpIHsKICAgICAgICB0aHJvdyAnV3JvbmcgbnVtYmVyIG9mIHRlbXBsYXRlIGFyZ3VtZW50cywgZ2l2ZW4gJHthcmd1bWVudHMubGVuZ3RofSwgJwogICAgICAgICAgICAnZXhwZWN0ZWQgJHBvc2l0aW9uYWxBcmd1bWVudENvdW50JwogICAgICAgICAgICAnLCBzb3VyY2U6ICIkc291cmNlIic7CiAgICAgIH0KICAgICAgcmV0dXJuIGluc3RhbnRpYXRvcihhcmd1bWVudHMpOwogICAgfQogICAgYXNzZXJ0KGFyZ3VtZW50cyBpcyBNYXApOwogICAgaWYgKGhvbGVOYW1lcy5sZW5ndGggPCBhcmd1bWVudHMubGVuZ3RoKSB7CiAgICAgIC8vIFRoaXMgc2VhcmNoIGlzIGluIE8obiksIGJ1dCB3ZSBvbmx5IGRvIGl0IGluIGNhc2Ugb2YgYW4gZXJyb3IsIGFuZCB0aGUKICAgICAgLy8gbnVtYmVyIG9mIGhvbGVzIHNob3VsZCBiZSBxdWl0ZSBsaW1pdGVkLgogICAgICBTdHJpbmcgdW51c2VkTmFtZXMgPQogICAgICAgICAgYXJndW1lbnRzLmtleXMud2hlcmUoKG5hbWUpID0+ICFob2xlTmFtZXMuY29udGFpbnMobmFtZSkpLmpvaW4oIiwgIik7CiAgICAgIHRocm93ICJUZW1wbGF0ZSBhcmd1bWVudHMgaGFzIHVudXNlZCBtYXBwaW5nczogJHVudXNlZE5hbWVzIjsKICAgIH0KICAgIGlmICghaG9sZU5hbWVzLmV2ZXJ5KChTdHJpbmcgbmFtZSkgPT4gYXJndW1lbnRzLmNvbnRhaW5zS2V5KG5hbWUpKSkgewogICAgICBTdHJpbmcgbm90Rm91bmQgPQogICAgICAgICAgaG9sZU5hbWVzLndoZXJlKChuYW1lKSA9PiAhYXJndW1lbnRzLmNvbnRhaW5zS2V5KG5hbWUpKS5qb2luKCIsICIpOwogICAgICB0aHJvdyAiVGVtcGxhdGUgYXJndW1lbnRzIGlzIG1pc3NpbmcgbWFwcGluZ3MgZm9yOiAkbm90Rm91bmQiOwogICAgfQogICAgcmV0dXJuIGluc3RhbnRpYXRvcihhcmd1bWVudHMpOwogIH0KfQoKLyoqCiAqIEFuIEluc3RhbnRpYXRvciBpcyBhIEZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIGEgSlMgQVNUIHRyZWUgb3IgTGlzdCBvZgogKiB0cmVlcy4gW2FyZ3VtZW50c10gaXMgYSBMaXN0IGZvciBwb3NpdGlvbmFsIHRlbXBsYXRlcywgb3IgTWFwIGZvcgogKiBuYW1lZCB0ZW1wbGF0ZXMuCiAqLwp0eXBlZGVmIC8qTm9kZXxJdGVyYWJsZTxOb2RlPiovIEluc3RhbnRpYXRvcih2YXIgYXJndW1lbnRzKTsKCi8qKgogKiBJbnN0YW50aWF0b3JHZW5lcmF0b3JWaXNpdG9yIGNvbXBpbGVzIGEgdGVtcGxhdGUuICBUaGlzIGNsYXNzIGNvbXBpbGVzIGEgdHJlZQogKiBjb250YWluaW5nIFtJbnRlcnBvbGF0ZWROb2RlXXMgaW50byBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBjcmVhdGUgYSBjb3B5IG9mIHRoZQogKiB0cmVlIHdpdGggdGhlIGludGVycG9sYXRlZCBub2RlcyBzdWJzdGl0dXRlZCB3aXRoIHByb3ZpZGVkIHZhbHVlcy4KICovCmNsYXNzIEluc3RhbnRpYXRvckdlbmVyYXRvclZpc2l0b3IgaW1wbGVtZW50cyBOb2RlVmlzaXRvcjxJbnN0YW50aWF0b3I+IHsKICBmaW5hbCBib29sIGZvcmNlQ29weTsKCiAgSW50ZXJwb2xhdGVkTm9kZUFuYWx5c2lzIGFuYWx5c2lzID0gbmV3IEludGVycG9sYXRlZE5vZGVBbmFseXNpcygpOwoKICAvKioKICAgKiBUaGUgZW50aXJlIHRyZWUgaXMgY2xvbmVkIGlmIFtmb3JjZUNvcHldIGlzIHRydWUuCiAgICovCiAgSW5zdGFudGlhdG9yR2VuZXJhdG9yVmlzaXRvcih0aGlzLmZvcmNlQ29weSk7CgogIEluc3RhbnRpYXRvciBjb21waWxlKE5vZGUgbm9kZSkgewogICAgYW5hbHlzaXMudmlzaXQobm9kZSk7CiAgICBJbnN0YW50aWF0b3IgcmVzdWx0ID0gdmlzaXQobm9kZSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIGVycm9yKFN0cmluZyBtZXNzYWdlKSB7CiAgICB0aHJvdyBtZXNzYWdlOwogIH0KCiAgc3RhdGljIEluc3RhbnRpYXRvciBzYW1lKE5vZGUgbm9kZSkgPT4gKGFyZ3VtZW50cykgPT4gbm9kZTsKICBzdGF0aWMgTm9kZSBtYWtlTnVsbChhcmd1bWVudHMpID0+IG51bGw7CgogIEluc3RhbnRpYXRvciB2aXNpdChOb2RlIG5vZGUpIHsKICAgIGlmIChmb3JjZUNvcHkgfHwgYW5hbHlzaXMuY29udGFpbnNJbnRlcnBvbGF0ZWROb2Rlcyhub2RlKSkgewogICAgICByZXR1cm4gbm9kZS5hY2NlcHQodGhpcyk7CiAgICB9CiAgICByZXR1cm4gc2FtZShub2RlKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdE51bGxhYmxlKE5vZGUgbm9kZSkgewogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIG1ha2VOdWxsOwogICAgcmV0dXJuIHZpc2l0KG5vZGUpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0U3BsYXlhYmxlKE5vZGUgbm9kZSkgewogICAgLy8gVE9ETyhzcmEpOiBQcm9jZXNzIGltbWVkaWF0ZSBbSW50ZXJwb2xhdGVkTm9kZV1zLCBwZXJtaXR0aW5nIHNwbGF5aW5nLgogICAgcmV0dXJuIHZpc2l0KG5vZGUpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0Tm9kZShOb2RlIG5vZGUpIHsKICAgIHRocm93ICdVbmltcGxlbWVudGVkIEluc3RhbnRpYXRvckdlbmVyYXRvclZpc2l0b3IgZm9yICRub2RlJzsKICB9CgogIHN0YXRpYyBSZWdFeHAgaWRlbnRpZmllclJFID0gbmV3IFJlZ0V4cChyJ15bQS1aYS16XyRdW0EtWmEtel8kMC05XSokJyk7CgogIHN0YXRpYyBFeHByZXNzaW9uIGNvbnZlcnRTdHJpbmdUb1ZhcmlhYmxlVXNlKFN0cmluZyB2YWx1ZSkgewogICAgYXNzZXJ0KGlkZW50aWZpZXJSRS5oYXNNYXRjaCh2YWx1ZSkpOwogICAgcmV0dXJuIG5ldyBWYXJpYWJsZVVzZSh2YWx1ZSk7CiAgfQoKICBzdGF0aWMgRXhwcmVzc2lvbiBjb252ZXJ0U3RyaW5nVG9WYXJpYWJsZURlY2xhcmF0aW9uKFN0cmluZyB2YWx1ZSkgewogICAgYXNzZXJ0KGlkZW50aWZpZXJSRS5oYXNNYXRjaCh2YWx1ZSkpOwogICAgcmV0dXJuIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKHZhbHVlKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdEludGVycG9sYXRlZEV4cHJlc3Npb24oSW50ZXJwb2xhdGVkRXhwcmVzc2lvbiBub2RlKSB7CiAgICB2YXIgbmFtZU9yUG9zaXRpb24gPSBub2RlLm5hbWVPclBvc2l0aW9uOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgdmFyIHZhbHVlID0gYXJndW1lbnRzW25hbWVPclBvc2l0aW9uXTsKICAgICAgaWYgKHZhbHVlIGlzIEV4cHJlc3Npb24pIHJldHVybiB2YWx1ZTsKICAgICAgaWYgKHZhbHVlIGlzIFN0cmluZykgcmV0dXJuIGNvbnZlcnRTdHJpbmdUb1ZhcmlhYmxlVXNlKHZhbHVlKTsKICAgICAgdGhyb3cgZXJyb3IoCiAgICAgICAgICAnSW50ZXJwb2xhdGVkIHZhbHVlICMkbmFtZU9yUG9zaXRpb24gaXMgbm90IGFuIEV4cHJlc3Npb246ICR2YWx1ZScpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdEludGVycG9sYXRlZERlY2xhcmF0aW9uKEludGVycG9sYXRlZERlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHZhciBuYW1lT3JQb3NpdGlvbiA9IG5vZGUubmFtZU9yUG9zaXRpb247CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHNbbmFtZU9yUG9zaXRpb25dOwogICAgICBpZiAodmFsdWUgaXMgRGVjbGFyYXRpb24pIHJldHVybiB2YWx1ZTsKICAgICAgaWYgKHZhbHVlIGlzIFN0cmluZykgcmV0dXJuIGNvbnZlcnRTdHJpbmdUb1ZhcmlhYmxlRGVjbGFyYXRpb24odmFsdWUpOwogICAgICB0aHJvdyBlcnJvcigKICAgICAgICAgICdJbnRlcnBvbGF0ZWQgdmFsdWUgIyRuYW1lT3JQb3NpdGlvbiBpcyBub3QgYSBkZWNsYXJhdGlvbjogJHZhbHVlJyk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0U3BsYXlhYmxlRXhwcmVzc2lvbihOb2RlIG5vZGUpIHsKICAgIGlmIChub2RlIGlzIEludGVycG9sYXRlZEV4cHJlc3Npb24pIHsKICAgICAgdmFyIG5hbWVPclBvc2l0aW9uID0gbm9kZS5uYW1lT3JQb3NpdGlvbjsKICAgICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHNbbmFtZU9yUG9zaXRpb25dOwogICAgICAgIEV4cHJlc3Npb24gdG9FeHByZXNzaW9uKGl0ZW0pIHsKICAgICAgICAgIGlmIChpdGVtIGlzIEV4cHJlc3Npb24pIHJldHVybiBpdGVtOwogICAgICAgICAgaWYgKGl0ZW0gaXMgU3RyaW5nKSByZXR1cm4gY29udmVydFN0cmluZ1RvVmFyaWFibGVVc2UoaXRlbSk7CiAgICAgICAgICB0aHJvdyBlcnJvcignSW50ZXJwb2xhdGVkIHZhbHVlICMkbmFtZU9yUG9zaXRpb24gaXMgbm90ICcKICAgICAgICAgICAgICAnYW4gRXhwcmVzc2lvbiBvciBMaXN0IG9mIEV4cHJlc3Npb25zOiAkdmFsdWUnKTsKICAgICAgICB9CgogICAgICAgIGlmICh2YWx1ZSBpcyBJdGVyYWJsZSkgcmV0dXJuIHZhbHVlLm1hcCh0b0V4cHJlc3Npb24pOwogICAgICAgIHJldHVybiB0b0V4cHJlc3Npb24odmFsdWUpOwogICAgICB9OwogICAgfQogICAgcmV0dXJuIHZpc2l0KG5vZGUpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0SW50ZXJwb2xhdGVkTGl0ZXJhbChJbnRlcnBvbGF0ZWRMaXRlcmFsIG5vZGUpIHsKICAgIHZhciBuYW1lT3JQb3NpdGlvbiA9IG5vZGUubmFtZU9yUG9zaXRpb247CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHNbbmFtZU9yUG9zaXRpb25dOwogICAgICBpZiAodmFsdWUgaXMgTGl0ZXJhbCB8fCB2YWx1ZSBpcyBEZWZlcnJlZEV4cHJlc3Npb24pIHJldHVybiB2YWx1ZTsKICAgICAgZXJyb3IoJ0ludGVycG9sYXRlZCB2YWx1ZSAjJG5hbWVPclBvc2l0aW9uIGlzIG5vdCBhIExpdGVyYWw6ICR2YWx1ZScpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdEludGVycG9sYXRlZFBhcmFtZXRlcihJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIgbm9kZSkgewogICAgdmFyIG5hbWVPclBvc2l0aW9uID0gbm9kZS5uYW1lT3JQb3NpdGlvbjsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tuYW1lT3JQb3NpdGlvbl07CgogICAgICBQYXJhbWV0ZXIgdG9QYXJhbWV0ZXIoaXRlbSkgewogICAgICAgIGlmIChpdGVtIGlzIFBhcmFtZXRlcikgcmV0dXJuIGl0ZW07CiAgICAgICAgaWYgKGl0ZW0gaXMgU3RyaW5nKSByZXR1cm4gbmV3IFBhcmFtZXRlcihpdGVtKTsKICAgICAgICB0aHJvdyBlcnJvcignSW50ZXJwb2xhdGVkIHZhbHVlICMkbmFtZU9yUG9zaXRpb24gaXMgbm90IGEgUGFyYW1ldGVyIG9yJwogICAgICAgICAgICAnIExpc3Qgb2YgUGFyYW1ldGVyczogJHZhbHVlJyk7CiAgICAgIH0KCiAgICAgIGlmICh2YWx1ZSBpcyBJdGVyYWJsZSkgcmV0dXJuIHZhbHVlLm1hcCh0b1BhcmFtZXRlcik7CiAgICAgIHJldHVybiB0b1BhcmFtZXRlcih2YWx1ZSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0SW50ZXJwb2xhdGVkU2VsZWN0b3IoSW50ZXJwb2xhdGVkU2VsZWN0b3Igbm9kZSkgewogICAgLy8gQSBzZWxlY3RvciBpcyBhbiBleHByZXNzaW9uLCBhcyBpbiBgYVtzZWxlY3Rvcl1gLgogICAgLy8gQSBTdHJpbmcgYXJndW1lbnQgY29udmVydGVkIGludG8gYSBMaXRlcmFsU3RyaW5nLCBzbyBgYS4jYCB3aXRoIGFyZ3VtZW50CiAgICAvLyAnZm9vJyBnZW5lcmF0ZXMgYGFbImZvbyJdYCB3aGljaCBwcmludHMgYXMgYGEuZm9vYC4KICAgIHZhciBuYW1lT3JQb3NpdGlvbiA9IG5vZGUubmFtZU9yUG9zaXRpb247CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHNbbmFtZU9yUG9zaXRpb25dOwogICAgICBpZiAodmFsdWUgaXMgRXhwcmVzc2lvbikgcmV0dXJuIHZhbHVlOwogICAgICBpZiAodmFsdWUgaXMgU3RyaW5nKSByZXR1cm4gbmV3IExpdGVyYWxTdHJpbmcoJyIkdmFsdWUiJyk7CiAgICAgIHRocm93IGVycm9yKAogICAgICAgICAgJ0ludGVycG9sYXRlZCB2YWx1ZSAjJG5hbWVPclBvc2l0aW9uIGlzIG5vdCBhIHNlbGVjdG9yOiAkdmFsdWUnKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQoSW50ZXJwb2xhdGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIHZhciBuYW1lT3JQb3NpdGlvbiA9IG5vZGUubmFtZU9yUG9zaXRpb247CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHNbbmFtZU9yUG9zaXRpb25dOwogICAgICBpZiAodmFsdWUgaXMgTm9kZSkgcmV0dXJuIHZhbHVlLnRvU3RhdGVtZW50KCk7CiAgICAgIHRocm93IGVycm9yKAogICAgICAgICAgJ0ludGVycG9sYXRlZCB2YWx1ZSAjJG5hbWVPclBvc2l0aW9uIGlzIG5vdCBhIFN0YXRlbWVudDogJHZhbHVlJyk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0U3BsYXlhYmxlU3RhdGVtZW50KE5vZGUgbm9kZSkgewogICAgaWYgKG5vZGUgaXMgSW50ZXJwb2xhdGVkU3RhdGVtZW50KSB7CiAgICAgIHZhciBuYW1lT3JQb3NpdGlvbiA9IG5vZGUubmFtZU9yUG9zaXRpb247CiAgICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgICAgdmFyIHZhbHVlID0gYXJndW1lbnRzW25hbWVPclBvc2l0aW9uXTsKICAgICAgICBTdGF0ZW1lbnQgdG9TdGF0ZW1lbnQoaXRlbSkgewogICAgICAgICAgaWYgKGl0ZW0gaXMgU3RhdGVtZW50KSByZXR1cm4gaXRlbTsKICAgICAgICAgIGlmIChpdGVtIGlzIEV4cHJlc3Npb24pIHJldHVybiBpdGVtLnRvU3RhdGVtZW50KCk7CiAgICAgICAgICB0aHJvdyBlcnJvcignSW50ZXJwb2xhdGVkIHZhbHVlICMkbmFtZU9yUG9zaXRpb24gaXMgbm90ICcKICAgICAgICAgICAgICAnYSBTdGF0ZW1lbnQgb3IgTGlzdCBvZiBTdGF0ZW1lbnRzOiAkdmFsdWUnKTsKICAgICAgICB9CgogICAgICAgIGlmICh2YWx1ZSBpcyBJdGVyYWJsZSkgcmV0dXJuIHZhbHVlLm1hcCh0b1N0YXRlbWVudCk7CiAgICAgICAgcmV0dXJuIHRvU3RhdGVtZW50KHZhbHVlKTsKICAgICAgfTsKICAgIH0KICAgIHJldHVybiB2aXNpdChub2RlKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdFByb2dyYW0oUHJvZ3JhbSBub2RlKSB7CiAgICBMaXN0PEluc3RhbnRpYXRvcj4gaW5zdGFudGlhdG9ycyA9CiAgICAgICAgbm9kZS5ib2R5Lm1hcCh2aXNpdFNwbGF5YWJsZVN0YXRlbWVudCkudG9MaXN0KCk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICBMaXN0PFN0YXRlbWVudD4gc3RhdGVtZW50cyA9IDxTdGF0ZW1lbnQ+W107CiAgICAgIHZvaWQgYWRkKG5vZGUpIHsKICAgICAgICBpZiAobm9kZSBpcyBFbXB0eVN0YXRlbWVudCkgcmV0dXJuOwogICAgICAgIGlmIChub2RlIGlzIEl0ZXJhYmxlKSB7CiAgICAgICAgICBzdGF0ZW1lbnRzLmFkZEFsbChub2RlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3RhdGVtZW50cy5hZGQobm9kZS50b1N0YXRlbWVudCgpKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGZvciAoSW5zdGFudGlhdG9yIGluc3RhbnRpYXRvciBpbiBpbnN0YW50aWF0b3JzKSB7CiAgICAgICAgYWRkKGluc3RhbnRpYXRvcihhcmd1bWVudHMpKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFByb2dyYW0oc3RhdGVtZW50cyk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0QmxvY2soQmxvY2sgbm9kZSkgewogICAgTGlzdDxJbnN0YW50aWF0b3I+IGluc3RhbnRpYXRvcnMgPQogICAgICAgIG5vZGUuc3RhdGVtZW50cy5tYXAodmlzaXRTcGxheWFibGVTdGF0ZW1lbnQpLnRvTGlzdCgpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgTGlzdDxTdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSA8U3RhdGVtZW50PltdOwogICAgICB2b2lkIGFkZChub2RlKSB7CiAgICAgICAgaWYgKG5vZGUgaXMgRW1wdHlTdGF0ZW1lbnQpIHJldHVybjsKICAgICAgICBpZiAobm9kZSBpcyBJdGVyYWJsZSkgewogICAgICAgICAgc3RhdGVtZW50cy5hZGRBbGwobm9kZSk7CiAgICAgICAgfSBlbHNlIGlmIChub2RlIGlzIEJsb2NrKSB7CiAgICAgICAgICBzdGF0ZW1lbnRzLmFkZEFsbChub2RlLnN0YXRlbWVudHMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdGF0ZW1lbnRzLmFkZChub2RlLnRvU3RhdGVtZW50KCkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgZm9yIChJbnN0YW50aWF0b3IgaW5zdGFudGlhdG9yIGluIGluc3RhbnRpYXRvcnMpIHsKICAgICAgICBhZGQoaW5zdGFudGlhdG9yKGFyZ3VtZW50cykpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgQmxvY2soc3RhdGVtZW50cyk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudChFeHByZXNzaW9uU3RhdGVtZW50IG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBidWlsZEV4cHJlc3Npb24gPSB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgcmV0dXJuIGJ1aWxkRXhwcmVzc2lvbihhcmd1bWVudHMpLnRvU3RhdGVtZW50KCk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0RW1wdHlTdGF0ZW1lbnQoRW1wdHlTdGF0ZW1lbnQgbm9kZSkgPT4KICAgICAgKGFyZ3VtZW50cykgPT4gbmV3IEVtcHR5U3RhdGVtZW50KCk7CgogIEluc3RhbnRpYXRvciB2aXNpdElmKElmIG5vZGUpIHsKICAgIGlmIChub2RlLmNvbmRpdGlvbiBpcyBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uKSB7CiAgICAgIHJldHVybiB2aXNpdElmQ29uZGl0aW9uYWxDb21waWxhdGlvbihub2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB2aXNpdElmTm9ybWFsKG5vZGUpOwogICAgfQogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0SWZDb25kaXRpb25hbENvbXBpbGF0aW9uKElmIG5vZGUpIHsKICAgIC8vIFNwZWNpYWwgdmVyc2lvbiBvZiB2aXNpdEludGVycG9sYXRlZEV4cHJlc3Npb24gdGhhdCBwZXJtaXRzIGJvb2xzLgogICAgY29tcGlsZUNvbmRpdGlvbihJbnRlcnBvbGF0ZWRFeHByZXNzaW9uIG5vZGUpIHsKICAgICAgdmFyIG5hbWVPclBvc2l0aW9uID0gbm9kZS5uYW1lT3JQb3NpdGlvbjsKICAgICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHNbbmFtZU9yUG9zaXRpb25dOwogICAgICAgIGlmICh2YWx1ZSBpcyBib29sKSByZXR1cm4gdmFsdWU7CiAgICAgICAgaWYgKHZhbHVlIGlzIEV4cHJlc3Npb24pIHJldHVybiB2YWx1ZTsKICAgICAgICBpZiAodmFsdWUgaXMgU3RyaW5nKSByZXR1cm4gY29udmVydFN0cmluZ1RvVmFyaWFibGVVc2UodmFsdWUpOwogICAgICAgIHRocm93IGVycm9yKCdJbnRlcnBvbGF0ZWQgdmFsdWUgIyRuYW1lT3JQb3NpdGlvbiAnCiAgICAgICAgICAgICdpcyBub3QgYW4gRXhwcmVzc2lvbjogJHZhbHVlJyk7CiAgICAgIH07CiAgICB9CgogICAgdmFyIG1ha2VDb25kaXRpb24gPSBjb21waWxlQ29uZGl0aW9uKG5vZGUuY29uZGl0aW9uKTsKICAgIEluc3RhbnRpYXRvciBtYWtlVGhlbiA9IHZpc2l0KG5vZGUudGhlbik7CiAgICBJbnN0YW50aWF0b3IgbWFrZU90aGVyd2lzZSA9IHZpc2l0KG5vZGUub3RoZXJ3aXNlKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHZhciBjb25kaXRpb24gPSBtYWtlQ29uZGl0aW9uKGFyZ3VtZW50cyk7CiAgICAgIGlmIChjb25kaXRpb24gaXMgYm9vbCkgewogICAgICAgIGlmIChjb25kaXRpb24gPT0gdHJ1ZSkgewogICAgICAgICAgcmV0dXJuIG1ha2VUaGVuKGFyZ3VtZW50cyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBtYWtlT3RoZXJ3aXNlKGFyZ3VtZW50cyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBuZXcgSWYoY29uZGl0aW9uLCBtYWtlVGhlbihhcmd1bWVudHMpLCBtYWtlT3RoZXJ3aXNlKGFyZ3VtZW50cykpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdElmTm9ybWFsKElmIG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlQ29uZGl0aW9uID0gdmlzaXQobm9kZS5jb25kaXRpb24pOwogICAgSW5zdGFudGlhdG9yIG1ha2VUaGVuID0gdmlzaXQobm9kZS50aGVuKTsKICAgIEluc3RhbnRpYXRvciBtYWtlT3RoZXJ3aXNlID0gdmlzaXQobm9kZS5vdGhlcndpc2UpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgcmV0dXJuIG5ldyBJZihtYWtlQ29uZGl0aW9uKGFyZ3VtZW50cyksIG1ha2VUaGVuKGFyZ3VtZW50cyksCiAgICAgICAgICBtYWtlT3RoZXJ3aXNlKGFyZ3VtZW50cykpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdEZvcihGb3Igbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VJbml0ID0gdmlzaXROdWxsYWJsZShub2RlLmluaXQpOwogICAgSW5zdGFudGlhdG9yIG1ha2VDb25kaXRpb24gPSB2aXNpdE51bGxhYmxlKG5vZGUuY29uZGl0aW9uKTsKICAgIEluc3RhbnRpYXRvciBtYWtlVXBkYXRlID0gdmlzaXROdWxsYWJsZShub2RlLnVwZGF0ZSk7CiAgICBJbnN0YW50aWF0b3IgbWFrZUJvZHkgPSB2aXNpdChub2RlLmJvZHkpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgcmV0dXJuIG5ldyBGb3IobWFrZUluaXQoYXJndW1lbnRzKSwgbWFrZUNvbmRpdGlvbihhcmd1bWVudHMpLAogICAgICAgICAgbWFrZVVwZGF0ZShhcmd1bWVudHMpLCBtYWtlQm9keShhcmd1bWVudHMpKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRGb3JJbihGb3JJbiBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUxlZnRIYW5kU2lkZSA9IHZpc2l0KG5vZGUubGVmdEhhbmRTaWRlKTsKICAgIEluc3RhbnRpYXRvciBtYWtlT2JqZWN0ID0gdmlzaXQobm9kZS5vYmplY3QpOwogICAgSW5zdGFudGlhdG9yIG1ha2VCb2R5ID0gdmlzaXQobm9kZS5ib2R5KTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHJldHVybiBuZXcgRm9ySW4obWFrZUxlZnRIYW5kU2lkZShhcmd1bWVudHMpLCBtYWtlT2JqZWN0KGFyZ3VtZW50cyksCiAgICAgICAgICBtYWtlQm9keShhcmd1bWVudHMpKTsKICAgIH07CiAgfQoKICBUT0RPKFN0cmluZyBuYW1lKSB7CiAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCckdGhpcy4kbmFtZScpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0V2hpbGUoV2hpbGUgbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VDb25kaXRpb24gPSB2aXNpdChub2RlLmNvbmRpdGlvbik7CiAgICBJbnN0YW50aWF0b3IgbWFrZUJvZHkgPSB2aXNpdChub2RlLmJvZHkpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgcmV0dXJuIG5ldyBXaGlsZShtYWtlQ29uZGl0aW9uKGFyZ3VtZW50cyksIG1ha2VCb2R5KGFyZ3VtZW50cykpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdERvKERvIG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlQm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICBJbnN0YW50aWF0b3IgbWFrZUNvbmRpdGlvbiA9IHZpc2l0KG5vZGUuY29uZGl0aW9uKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHJldHVybiBuZXcgRG8obWFrZUJvZHkoYXJndW1lbnRzKSwgbWFrZUNvbmRpdGlvbihhcmd1bWVudHMpKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRDb250aW51ZShDb250aW51ZSBub2RlKSA9PgogICAgICAoYXJndW1lbnRzKSA9PiBuZXcgQ29udGludWUobm9kZS50YXJnZXRMYWJlbCk7CgogIEluc3RhbnRpYXRvciB2aXNpdEJyZWFrKEJyZWFrIG5vZGUpID0+CiAgICAgIChhcmd1bWVudHMpID0+IG5ldyBCcmVhayhub2RlLnRhcmdldExhYmVsKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0UmV0dXJuKFJldHVybiBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUV4cHJlc3Npb24gPSB2aXNpdE51bGxhYmxlKG5vZGUudmFsdWUpOwogICAgcmV0dXJuIChhcmd1bWVudHMpID0+IG5ldyBSZXR1cm4obWFrZUV4cHJlc3Npb24oYXJndW1lbnRzKSk7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXREYXJ0WWllbGQoRGFydFlpZWxkIG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlRXhwcmVzc2lvbiA9IHZpc2l0KG5vZGUuZXhwcmVzc2lvbik7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgPT4KICAgICAgICBuZXcgRGFydFlpZWxkKG1ha2VFeHByZXNzaW9uKGFyZ3VtZW50cyksIG5vZGUuaGFzU3Rhcik7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRUaHJvdyhUaHJvdyBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUV4cHJlc3Npb24gPSB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgcmV0dXJuIChhcmd1bWVudHMpID0+IG5ldyBUaHJvdyhtYWtlRXhwcmVzc2lvbihhcmd1bWVudHMpKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdFRyeShUcnkgbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VCb2R5ID0gdmlzaXQobm9kZS5ib2R5KTsKICAgIEluc3RhbnRpYXRvciBtYWtlQ2F0Y2ggPSB2aXNpdE51bGxhYmxlKG5vZGUuY2F0Y2hQYXJ0KTsKICAgIEluc3RhbnRpYXRvciBtYWtlRmluYWxseSA9IHZpc2l0TnVsbGFibGUobm9kZS5maW5hbGx5UGFydCk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgPT4gbmV3IFRyeSgKICAgICAgICBtYWtlQm9keShhcmd1bWVudHMpLCBtYWtlQ2F0Y2goYXJndW1lbnRzKSwgbWFrZUZpbmFsbHkoYXJndW1lbnRzKSk7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRDYXRjaChDYXRjaCBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZURlY2xhcmF0aW9uID0gdmlzaXQobm9kZS5kZWNsYXJhdGlvbik7CiAgICBJbnN0YW50aWF0b3IgbWFrZUJvZHkgPSB2aXNpdChub2RlLmJvZHkpOwogICAgcmV0dXJuIChhcmd1bWVudHMpID0+CiAgICAgICAgbmV3IENhdGNoKG1ha2VEZWNsYXJhdGlvbihhcmd1bWVudHMpLCBtYWtlQm9keShhcmd1bWVudHMpKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdFN3aXRjaChTd2l0Y2ggbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VLZXkgPSB2aXNpdChub2RlLmtleSk7CiAgICBJdGVyYWJsZTxJbnN0YW50aWF0b3I+IG1ha2VDYXNlcyA9IG5vZGUuY2FzZXMubWFwKHZpc2l0KTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHJldHVybiBuZXcgU3dpdGNoKAogICAgICAgICAgbWFrZUtleShhcmd1bWVudHMpLAogICAgICAgICAgbWFrZUNhc2VzCiAgICAgICAgICAgICAgLm1hcDxTd2l0Y2hDbGF1c2U+KChJbnN0YW50aWF0b3IgbWFrZUNhc2UpID0+IG1ha2VDYXNlKGFyZ3VtZW50cykpCiAgICAgICAgICAgICAgLnRvTGlzdCgpKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRDYXNlKENhc2Ugbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VFeHByZXNzaW9uID0gdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIEluc3RhbnRpYXRvciBtYWtlQm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICByZXR1cm4gbmV3IENhc2UobWFrZUV4cHJlc3Npb24oYXJndW1lbnRzKSwgbWFrZUJvZHkoYXJndW1lbnRzKSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0RGVmYXVsdChEZWZhdWx0IG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlQm9keSA9IHZpc2l0KG5vZGUuYm9keSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICByZXR1cm4gbmV3IERlZmF1bHQobWFrZUJvZHkoYXJndW1lbnRzKSk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlTmFtZSA9IHZpc2l0KG5vZGUubmFtZSk7CiAgICBJbnN0YW50aWF0b3IgbWFrZUZ1bmN0aW9uID0gdmlzaXQobm9kZS5mdW5jdGlvbik7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgPT4KICAgICAgICBuZXcgRnVuY3Rpb25EZWNsYXJhdGlvbihtYWtlTmFtZShhcmd1bWVudHMpLCBtYWtlRnVuY3Rpb24oYXJndW1lbnRzKSk7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRMYWJlbGVkU3RhdGVtZW50KExhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VCb2R5ID0gdmlzaXQobm9kZS5ib2R5KTsKICAgIHJldHVybiAoYXJndW1lbnRzKSA9PiBuZXcgTGFiZWxlZFN0YXRlbWVudChub2RlLmxhYmVsLCBtYWtlQm9keShhcmd1bWVudHMpKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdExpdGVyYWxTdGF0ZW1lbnQoTGl0ZXJhbFN0YXRlbWVudCBub2RlKSA9PgogICAgICBUT0RPKCd2aXNpdExpdGVyYWxTdGF0ZW1lbnQnKTsKICBJbnN0YW50aWF0b3IgdmlzaXRMaXRlcmFsRXhwcmVzc2lvbihMaXRlcmFsRXhwcmVzc2lvbiBub2RlKSA9PgogICAgICBUT0RPKCd2aXNpdExpdGVyYWxFeHByZXNzaW9uJyk7CgogIEluc3RhbnRpYXRvciB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IG5vZGUpIHsKICAgIExpc3Q8SW5zdGFudGlhdG9yPiBkZWNsYXJhdGlvbk1ha2VycyA9CiAgICAgICAgbm9kZS5kZWNsYXJhdGlvbnMubWFwKHZpc2l0KS50b0xpc3QoKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIExpc3Q8VmFyaWFibGVJbml0aWFsaXphdGlvbj4gZGVjbGFyYXRpb25zID0gPFZhcmlhYmxlSW5pdGlhbGl6YXRpb24+W107CiAgICAgIGZvciAoSW5zdGFudGlhdG9yIGluc3RhbnRpYXRvciBpbiBkZWNsYXJhdGlvbk1ha2VycykgewogICAgICAgIHZhciByZXN1bHQgPSBpbnN0YW50aWF0b3IoYXJndW1lbnRzKTsKICAgICAgICBkZWNsYXJhdGlvbnMuYWRkKHJlc3VsdCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChkZWNsYXJhdGlvbnMpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdEFzc2lnbm1lbnQoQXNzaWdubWVudCBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUxlZnRIYW5kU2lkZSA9IHZpc2l0KG5vZGUubGVmdEhhbmRTaWRlKTsKICAgIFN0cmluZyBvcCA9IG5vZGUub3A7CiAgICBJbnN0YW50aWF0b3IgbWFrZVZhbHVlID0gdmlzaXROdWxsYWJsZShub2RlLnZhbHVlKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHJldHVybiBuZXcgQXNzaWdubWVudC5jb21wb3VuZCgKICAgICAgICAgIG1ha2VMZWZ0SGFuZFNpZGUoYXJndW1lbnRzKSwgb3AsIG1ha2VWYWx1ZShhcmd1bWVudHMpKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRWYXJpYWJsZUluaXRpYWxpemF0aW9uKFZhcmlhYmxlSW5pdGlhbGl6YXRpb24gbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VEZWNsYXJhdGlvbiA9IHZpc2l0KG5vZGUuZGVjbGFyYXRpb24pOwogICAgSW5zdGFudGlhdG9yIG1ha2VWYWx1ZSA9IHZpc2l0TnVsbGFibGUobm9kZS52YWx1ZSk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICByZXR1cm4gbmV3IFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oCiAgICAgICAgICBtYWtlRGVjbGFyYXRpb24oYXJndW1lbnRzKSwgbWFrZVZhbHVlKGFyZ3VtZW50cykpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdENvbmRpdGlvbmFsKENvbmRpdGlvbmFsIGNvbmQpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlQ29uZGl0aW9uID0gdmlzaXQoY29uZC5jb25kaXRpb24pOwogICAgSW5zdGFudGlhdG9yIG1ha2VUaGVuID0gdmlzaXQoY29uZC50aGVuKTsKICAgIEluc3RhbnRpYXRvciBtYWtlT3RoZXJ3aXNlID0gdmlzaXQoY29uZC5vdGhlcndpc2UpOwogICAgcmV0dXJuIChhcmd1bWVudHMpID0+IG5ldyBDb25kaXRpb25hbChtYWtlQ29uZGl0aW9uKGFyZ3VtZW50cyksCiAgICAgICAgbWFrZVRoZW4oYXJndW1lbnRzKSwgbWFrZU90aGVyd2lzZShhcmd1bWVudHMpKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdE5ldyhOZXcgbm9kZSkgPT4KICAgICAgaGFuZGxlQ2FsbE9yTmV3KG5vZGUsICh0YXJnZXQsIGFyZ3VtZW50cykgPT4gbmV3IE5ldyh0YXJnZXQsIGFyZ3VtZW50cykpOwoKICBJbnN0YW50aWF0b3IgdmlzaXRDYWxsKENhbGwgbm9kZSkgPT4KICAgICAgaGFuZGxlQ2FsbE9yTmV3KG5vZGUsICh0YXJnZXQsIGFyZ3VtZW50cykgPT4gbmV3IENhbGwodGFyZ2V0LCBhcmd1bWVudHMpKTsKCiAgSW5zdGFudGlhdG9yIGhhbmRsZUNhbGxPck5ldyhDYWxsIG5vZGUsIGZpbmlzaCh0YXJnZXQsIGFyZ3VtZW50cykpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlVGFyZ2V0ID0gdmlzaXQobm9kZS50YXJnZXQpOwogICAgSXRlcmFibGU8SW5zdGFudGlhdG9yPiBhcmd1bWVudE1ha2VycyA9CiAgICAgICAgbm9kZS5hcmd1bWVudHMubWFwKHZpc2l0U3BsYXlhYmxlRXhwcmVzc2lvbikudG9MaXN0KCk7CgogICAgLy8gVE9ETyhzcmEpOiBBdm9pZCBjb3B5aW5nIGNhbGwgYXJndW1lbnRzIGlmIG5vIGludGVycG9sYXRpb24gb3IgZm9yY2VkCiAgICAvLyBjb3B5aW5nLgogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgTm9kZSB0YXJnZXQgPSBtYWtlVGFyZ2V0KGFyZ3VtZW50cyk7CiAgICAgIExpc3Q8RXhwcmVzc2lvbj4gY2FsbEFyZ3VtZW50cyA9IDxFeHByZXNzaW9uPltdOwogICAgICBmb3IgKEluc3RhbnRpYXRvciBpbnN0YW50aWF0b3IgaW4gYXJndW1lbnRNYWtlcnMpIHsKICAgICAgICB2YXIgcmVzdWx0ID0gaW5zdGFudGlhdG9yKGFyZ3VtZW50cyk7CiAgICAgICAgaWYgKHJlc3VsdCBpcyBJdGVyYWJsZSkgewogICAgICAgICAgY2FsbEFyZ3VtZW50cy5hZGRBbGwocmVzdWx0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2FsbEFyZ3VtZW50cy5hZGQocmVzdWx0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGZpbmlzaCh0YXJnZXQsIGNhbGxBcmd1bWVudHMudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSkpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdEJpbmFyeShCaW5hcnkgbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VMZWZ0ID0gdmlzaXQobm9kZS5sZWZ0KTsKICAgIEluc3RhbnRpYXRvciBtYWtlUmlnaHQgPSB2aXNpdChub2RlLnJpZ2h0KTsKICAgIFN0cmluZyBvcCA9IG5vZGUub3A7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgPT4KICAgICAgICBuZXcgQmluYXJ5KG9wLCBtYWtlTGVmdChhcmd1bWVudHMpLCBtYWtlUmlnaHQoYXJndW1lbnRzKSk7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRQcmVmaXgoUHJlZml4IG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlT3BlcmFuZCA9IHZpc2l0KG5vZGUuYXJndW1lbnQpOwogICAgU3RyaW5nIG9wID0gbm9kZS5vcDsKICAgIHJldHVybiAoYXJndW1lbnRzKSA9PiBuZXcgUHJlZml4KG9wLCBtYWtlT3BlcmFuZChhcmd1bWVudHMpKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdFBvc3RmaXgoUG9zdGZpeCBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZU9wZXJhbmQgPSB2aXNpdChub2RlLmFyZ3VtZW50KTsKICAgIFN0cmluZyBvcCA9IG5vZGUub3A7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgPT4gbmV3IFBvc3RmaXgob3AsIG1ha2VPcGVyYW5kKGFyZ3VtZW50cykpOwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0VmFyaWFibGVVc2UoVmFyaWFibGVVc2Ugbm9kZSkgPT4KICAgICAgKGFyZ3VtZW50cykgPT4gbmV3IFZhcmlhYmxlVXNlKG5vZGUubmFtZSk7CgogIEluc3RhbnRpYXRvciB2aXNpdFRoaXMoVGhpcyBub2RlKSA9PiAoYXJndW1lbnRzKSA9PiBuZXcgVGhpcygpOwoKICBJbnN0YW50aWF0b3IgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgPT4KICAgICAgKGFyZ3VtZW50cykgPT4gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb24obm9kZS5uYW1lKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0UGFyYW1ldGVyKFBhcmFtZXRlciBub2RlKSA9PgogICAgICAoYXJndW1lbnRzKSA9PiBuZXcgUGFyYW1ldGVyKG5vZGUubmFtZSk7CgogIEluc3RhbnRpYXRvciB2aXNpdEFjY2VzcyhQcm9wZXJ0eUFjY2VzcyBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZVJlY2VpdmVyID0gdmlzaXQobm9kZS5yZWNlaXZlcik7CiAgICBJbnN0YW50aWF0b3IgbWFrZVNlbGVjdG9yID0gdmlzaXQobm9kZS5zZWxlY3Rvcik7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgPT4KICAgICAgICBuZXcgUHJvcGVydHlBY2Nlc3MobWFrZVJlY2VpdmVyKGFyZ3VtZW50cyksIG1ha2VTZWxlY3Rvcihhcmd1bWVudHMpKTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdE5hbWVkRnVuY3Rpb24oTmFtZWRGdW5jdGlvbiBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZURlY2xhcmF0aW9uID0gdmlzaXQobm9kZS5uYW1lKTsKICAgIEluc3RhbnRpYXRvciBtYWtlRnVuY3Rpb24gPSB2aXNpdChub2RlLmZ1bmN0aW9uKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSA9PgogICAgICAgIG5ldyBOYW1lZEZ1bmN0aW9uKG1ha2VEZWNsYXJhdGlvbihhcmd1bWVudHMpLCBtYWtlRnVuY3Rpb24oYXJndW1lbnRzKSk7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRGdW4oRnVuIG5vZGUpIHsKICAgIExpc3Q8SW5zdGFudGlhdG9yPiBwYXJhbU1ha2VycyA9IG5vZGUucGFyYW1zLm1hcCh2aXNpdFNwbGF5YWJsZSkudG9MaXN0KCk7CiAgICBJbnN0YW50aWF0b3IgbWFrZUJvZHkgPSB2aXNpdChub2RlLmJvZHkpOwogICAgLy8gVE9ETyhzcmEpOiBBdm9pZCBjb3B5aW5nIHBhcmFtcyBpZiBubyBpbnRlcnBvbGF0aW9uIG9yIGZvcmNlZCBjb3B5aW5nLgogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgTGlzdDxQYXJhbWV0ZXI+IHBhcmFtcyA9IDxQYXJhbWV0ZXI+W107CiAgICAgIGZvciAoSW5zdGFudGlhdG9yIGluc3RhbnRpYXRvciBpbiBwYXJhbU1ha2VycykgewogICAgICAgIHZhciByZXN1bHQgPSBpbnN0YW50aWF0b3IoYXJndW1lbnRzKTsKICAgICAgICBpZiAocmVzdWx0IGlzIEl0ZXJhYmxlKSB7CiAgICAgICAgICBwYXJhbXMuYWRkQWxsKHJlc3VsdCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHBhcmFtcy5hZGQocmVzdWx0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgU3RhdGVtZW50IGJvZHkgPSBtYWtlQm9keShhcmd1bWVudHMpOwogICAgICByZXR1cm4gbmV3IEZ1bihwYXJhbXMsIGJvZHkpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdERlZmVycmVkRXhwcmVzc2lvbihEZWZlcnJlZEV4cHJlc3Npb24gbm9kZSkgPT4gc2FtZShub2RlKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0RGVmZXJyZWROdW1iZXIoRGVmZXJyZWROdW1iZXIgbm9kZSkgPT4gc2FtZShub2RlKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0RGVmZXJyZWRTdHJpbmcoRGVmZXJyZWRTdHJpbmcgbm9kZSkgPT4gKGFyZ3VtZW50cykgPT4gbm9kZTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0TGl0ZXJhbEJvb2woTGl0ZXJhbEJvb2wgbm9kZSkgPT4KICAgICAgKGFyZ3VtZW50cykgPT4gbmV3IExpdGVyYWxCb29sKG5vZGUudmFsdWUpOwoKICBJbnN0YW50aWF0b3IgdmlzaXRMaXRlcmFsU3RyaW5nKExpdGVyYWxTdHJpbmcgbm9kZSkgPT4KICAgICAgKGFyZ3VtZW50cykgPT4gbmV3IExpdGVyYWxTdHJpbmcobm9kZS52YWx1ZSk7CgogIEluc3RhbnRpYXRvciB2aXNpdExpdGVyYWxOdW1iZXIoTGl0ZXJhbE51bWJlciBub2RlKSA9PgogICAgICAoYXJndW1lbnRzKSA9PiBuZXcgTGl0ZXJhbE51bWJlcihub2RlLnZhbHVlKTsKCiAgSW5zdGFudGlhdG9yIHZpc2l0TGl0ZXJhbE51bGwoTGl0ZXJhbE51bGwgbm9kZSkgPT4KICAgICAgKGFyZ3VtZW50cykgPT4gbmV3IExpdGVyYWxOdWxsKCk7CgogIEluc3RhbnRpYXRvciB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICBMaXN0PEluc3RhbnRpYXRvcj4gcGFydE1ha2VycyA9CiAgICAgICAgbm9kZS5wYXJ0cy5tYXAodmlzaXQpLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgTGlzdDxMaXRlcmFsPiBwYXJ0cyA9IHBhcnRNYWtlcnMKICAgICAgICAgIC5tYXAoKEluc3RhbnRpYXRvciBpbnN0YW50aWF0b3IpID0+IGluc3RhbnRpYXRvcihhcmd1bWVudHMpKQogICAgICAgICAgLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgICByZXR1cm4gbmV3IFN0cmluZ0NvbmNhdGVuYXRpb24ocGFydHMpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdE5hbWUoTmFtZSBub2RlKSA9PiBzYW1lKG5vZGUpOwoKICBJbnN0YW50aWF0b3IgdmlzaXRQYXJlbnRoZXNlcyhQYXJlbnRoZXNlcyBub2RlKSB7CiAgICBJbnN0YW50aWF0b3IgbWFrZUVuY2xvc2VkID0gdmlzaXQobm9kZS5lbmNsb3NlZCk7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICBFeHByZXNzaW9uIGVuY2xvc2VkID0gbWFrZUVuY2xvc2VkKGFyZ3VtZW50cyk7CiAgICAgIHJldHVybiBQYXJlbnRoZXNlcyhlbmNsb3NlZCk7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0QXJyYXlJbml0aWFsaXplcihBcnJheUluaXRpYWxpemVyIG5vZGUpIHsKICAgIC8vIFRPRE8oc3JhKTogSW1wbGVtZW50IHNwbGljaW5nPwogICAgTGlzdDxJbnN0YW50aWF0b3I+IGVsZW1lbnRNYWtlcnMgPQogICAgICAgIG5vZGUuZWxlbWVudHMubWFwKHZpc2l0KS50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIExpc3Q8RXhwcmVzc2lvbj4gZWxlbWVudHMgPSBlbGVtZW50TWFrZXJzCiAgICAgICAgICAubWFwPEV4cHJlc3Npb24+KAogICAgICAgICAgICAgIChJbnN0YW50aWF0b3IgaW5zdGFudGlhdG9yKSA9PiBpbnN0YW50aWF0b3IoYXJndW1lbnRzKSkKICAgICAgICAgIC50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgcmV0dXJuIG5ldyBBcnJheUluaXRpYWxpemVyKGVsZW1lbnRzKTsKICAgIH07CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRBcnJheUhvbGUoQXJyYXlIb2xlIG5vZGUpIHsKICAgIHJldHVybiAoYXJndW1lbnRzKSA9PiBuZXcgQXJyYXlIb2xlKCk7CiAgfQoKICBJbnN0YW50aWF0b3IgdmlzaXRPYmplY3RJbml0aWFsaXplcihPYmplY3RJbml0aWFsaXplciBub2RlKSB7CiAgICBMaXN0PEluc3RhbnRpYXRvcj4gcHJvcGVydHlNYWtlcnMgPQogICAgICAgIG5vZGUucHJvcGVydGllcy5tYXAodmlzaXRTcGxheWFibGUpLnRvTGlzdCgpOwogICAgYm9vbCBpc09uZUxpbmVyID0gbm9kZS5pc09uZUxpbmVyOwogICAgcmV0dXJuIChhcmd1bWVudHMpIHsKICAgICAgTGlzdDxQcm9wZXJ0eT4gcHJvcGVydGllcyA9IDxQcm9wZXJ0eT5bXTsKICAgICAgZm9yIChJbnN0YW50aWF0b3IgaW5zdGFudGlhdG9yIGluIHByb3BlcnR5TWFrZXJzKSB7CiAgICAgICAgdmFyIHJlc3VsdCA9IGluc3RhbnRpYXRvcihhcmd1bWVudHMpOwogICAgICAgIGlmIChyZXN1bHQgaXMgSXRlcmFibGUpIHsKICAgICAgICAgIHByb3BlcnRpZXMuYWRkQWxsKHJlc3VsdCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHByb3BlcnRpZXMuYWRkKHJlc3VsdCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBuZXcgT2JqZWN0SW5pdGlhbGl6ZXIocHJvcGVydGllcywgaXNPbmVMaW5lcjogaXNPbmVMaW5lcik7CiAgICB9OwogIH0KCiAgSW5zdGFudGlhdG9yIHZpc2l0UHJvcGVydHkoUHJvcGVydHkgbm9kZSkgewogICAgSW5zdGFudGlhdG9yIG1ha2VOYW1lID0gdmlzaXQobm9kZS5uYW1lKTsKICAgIEluc3RhbnRpYXRvciBtYWtlVmFsdWUgPSB2aXNpdChub2RlLnZhbHVlKTsKICAgIHJldHVybiAoYXJndW1lbnRzKSB7CiAgICAgIHJldHVybiBuZXcgUHJvcGVydHkobWFrZU5hbWUoYXJndW1lbnRzKSwgbWFrZVZhbHVlKGFyZ3VtZW50cykpOwogICAgfTsKICB9CgogIEluc3RhbnRpYXRvciB2aXNpdFJlZ0V4cExpdGVyYWwoUmVnRXhwTGl0ZXJhbCBub2RlKSA9PgogICAgICAoYXJndW1lbnRzKSA9PiBuZXcgUmVnRXhwTGl0ZXJhbChub2RlLnBhdHRlcm4pOwoKICBJbnN0YW50aWF0b3IgdmlzaXRDb21tZW50KENvbW1lbnQgbm9kZSkgPT4gVE9ETygndmlzaXRDb21tZW50Jyk7CgogIEluc3RhbnRpYXRvciB2aXNpdEF3YWl0KEF3YWl0IG5vZGUpIHsKICAgIEluc3RhbnRpYXRvciBtYWtlRXhwcmVzc2lvbiA9IHZpc2l0KG5vZGUuZXhwcmVzc2lvbik7CiAgICByZXR1cm4gKGFyZ3VtZW50cykgewogICAgICByZXR1cm4gbmV3IEF3YWl0KG1ha2VFeHByZXNzaW9uKGFyZ3VtZW50cykpOwogICAgfTsKICB9Cn0KCi8qKgogKiBJbnRlcnBvbGF0ZWROb2RlQW5hbHlzaXMgZGV0ZXJtaW5lcyB3aGljaCBBU1QgdHJlZXMgY29udGFpbgogKiBbSW50ZXJwb2xhdGVkTm9kZV1zLCBhbmQgdGhlIG5hbWVzIG9mIHRoZSBuYW1lZCBpbnRlcnBvbGF0ZWQgbm9kZXMuCiAqLwpjbGFzcyBJbnRlcnBvbGF0ZWROb2RlQW5hbHlzaXMgZXh0ZW5kcyBC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YW5kIGEgcGFyc2VyIHRoYXQgcGFyc2VzIHBhcnQgb2YgdGhlIGxhbmd1YWdlLgoKcGFydCBvZiBqc19hc3Q7CgovKioKICogR2xvYmFsIHRlbXBsYXRlIG1hbmFnZXIuICBXZSBzaG91bGQgYWltIHRvIGhhdmUgYSBmaXhlZCBudW1iZXIgb2YKICogdGVtcGxhdGVzLiBUaGlzIGltcGxpZXMgdGhhdCB3ZSBkbyBub3QgdXNlIGpzKCd4eHgnKSB0byBwYXJzZSB0ZXh0IHRoYXQgaXMKICogY29uc3RydWN0ZWQgZnJvbSB2YWx1ZXMgdGhhdCBkZXBlbmQgb24gbmFtZXMgaW4gdGhlIERhcnQgcHJvZ3JhbS4KICoKICogVE9ETyhzcmEpOiBGaW5kIHRoZSByZW1haW5pbmcgcGxhY2VzIHdoZXJlIGpzKCd4eHgnKSB1c2VkIHRvIHBhcnNlIGFuCiAqIHVuYm91bmRlZCBudW1iZXIgb2YgZXhwcmVzc2lvbiwgb3IgaW5zdGl0dXRlIGEgY2FjaGUgcG9saWN5LgogKi8KVGVtcGxhdGVNYW5hZ2VyIHRlbXBsYXRlTWFuYWdlciA9IG5ldyBUZW1wbGF0ZU1hbmFnZXIoKTsKCi8qKgoKW2pzXSBpcyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBKc0J1aWxkZXIuICBKc0J1aWxkZXIgaXMgYSBzZXQgb2YgY29udmVuaWVuY2VzCmZvciBjb25zdHJ1Y3RpbmcgSmF2YVNjcmlwdCBBU1RzLgoKW3N0cmluZ10gYW5kIFtudW1iZXJdIGFyZSB1c2VkIHRvIGNyZWF0ZSBsZWFmIEFTVCBub2RlczoKCiAgICB2YXIgcyA9IGpzLnN0cmluZygnaGVsbG8nKTsgICAgLy8gIHMgPSBuZXcgTGl0ZXJhbFN0cmluZygnImhlbGxvIicpCiAgICB2YXIgbiA9IGpzLm51bWJlcigxMjMpOyAgICAgICAgLy8gIG4gPSBuZXcgTGl0ZXJhbE51bWJlcigxMjMpCgpJbiB0aGUgbGluZSBhYm92ZSBgYSAtLT4gYmAgbWVhbnMgRGFydCBleHByZXNzaW9uIGBhYCBldmFsdWF0ZXMgdG8gYSBKYXZhU2NyaXB0CkFTVCB0aGF0IHdvdWxkIHByZXR0eS1wcmludCBhcyBgYmAuCgpUaGUgW2NhbGxdIG1ldGhvZCBjb25zdHJ1Y3RzIGFuIEV4cHJlc3Npb24gQVNULgoKTm8gYXJndW1lbnQKCiAgICBqcygnd2luZG93LmFsZXJ0KCJoZWxsbyIpJykgIC0tPiAgd2luZG93LmFsZXJ0KCJoZWxsbyIpCgpUaGUgaW5wdXQgdGV4dCBjYW4gY29udGFpbiBwbGFjZWhvbGRlcnMgYCNgIHRoYXQgYXJlIHJlcGxhY2VkIHdpdGggcHJvdmlkZWQKYXJndW1lbnRzLiAgQSBzaW5nbGUgYXJndW1lbnQgY2FuIGJlIHBhc3NlZCBkaXJlY3RseToKCiAgICBqcygnd2luZG93LmFsZXJ0KCMpJywgcykgICAtLT4gIHdpbmRvdy5hbGVydCgiaGVsbG8iKQoKTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgYXMgYSBsaXN0OgoKICAgIGpzKCcjICsgIycsIFtzLCBzXSkgIC0tPiAgImhlbGxvIiArICJoZWxsbyIKClRoZSBbc3RhdGVtZW50XSBtZXRob2QgY29uc3RydWN0cyBhIFN0YXRlbWVudCBBU1QsIGJ1dCBpcyBvdGhlcndpc2UgbGlrZSB0aGUKW2NhbGxdIG1ldGhvZC4gIFRoaXMgY29uc3RydWN0cyBhIFJldHVybiBBU1Q6CgogICAgdmFyIHJldCA9IGpzLnN0YXRlbWVudCgncmV0dXJuICM7Jywgbik7ICAtLT4gIHJldHVybiAxMjM7CgpBIHBsYWNlaG9sZGVyIGluIGEgU3RhdGVtZW50IGNvbnRleHQgbXVzdCBiZSBmb2xsb3dlZCBieSBhIHNlbWljb2xvbiAnOycuICBZb3UKY2FuIHRoaW5rIG9mIGEgc3RhdGVtZW50IHBsYWNlaG9sZGVyIGFzIGJlaW5nIGAjO2AgdG8gZXhwbGFpbiB3aHkgdGhlIG91dHB1dApzdGlsbCBoYXMgb25lIHNlbWljb2xvbjoKCiAgICBqcy5zdGF0ZW1lbnQoJ2lmIChoYXBweSkgIzsnLCByZXQpCiAgICAtLT4KICAgIGlmIChoYXBweSkKICAgICAgcmV0dXJuIDEyMzsKCklmIHRoZSBwbGFjZWhvbGRlciBpcyBub3QgZm9sbG93ZWQgYnkgYSBzZW1pY29sb24sIGl0IGlzIHBhcnQgb2YgYW4gZXhwcmVzc2lvbi4KSGVyZSB0aGUgcGxhY2Vob2xkZXIgaXMgaW4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmdW5jdGlvbiBpbiBhIGZ1bmN0aW9uIGNhbGw6CgogICAgdmFyIHZGb28gPSBuZXcgVmFyaWFibGVVc2UoJ2ZvbycpOwogICAganMuc3RhdGVtZW50KCdpZiAoaGFwcHkpICMoIkhhcHB5ISIpJywgdkZvbykKICAgIC0tPgogICAgaWYgKGhhcHB5KQogICAgICBmb28oIkhhcHB5ISIpOwoKR2VuZXJhbGx5LCBhIHBsYWNlaG9sZGVyIGluIGFuIGV4cHJlc3Npb24gcG9zaXRpb24gcmVxdWlyZXMgYW4gRXhwcmVzc2lvbiBBU1QgYXMKYW4gYXJndW1lbnQgYW5kIGEgcGxhY2Vob2xkZXIgaW4gYSBzdGF0ZW1lbnQgcG9zaXRpb24gcmVxdWlyZXMgYSBTdGF0ZW1lbnQgQVNULgpBbiBleHByZXNzaW9uIHdpbGwgYmUgY29udmVydGVkIHRvIGEgU3RhdGVtZW50IGlmIG5lZWRlZCBieSBjcmVhdGluZyBhbgpFeHByZXNzaW9uU3RhdGVtZW50LiAgQSBTdHJpbmcgYXJndW1lbnQgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBhIFZhcmlhYmxlVXNlIGFuZApyZXF1aXJlcyB0aGF0IHRoZSBzdHJpbmcgaXMgYSBKYXZhU2NyaXB0IGlkZW50aWZpZXIuCgogICAganMoJyMgKyAxJywgdkZvbykgICAgICAgLS0+ICBmb28gKyAxCiAgICBqcygnIyArIDEnLCAnZm9vJykgICAgICAtLT4gIGZvbyArIDEKICAgIGpzKCcjICsgMScsICdmb28uYmFyJykgIC0tPiAgYXNzZXJ0aW9uIGZhaWx1cmUKClNvbWUgcGxhY2Vob2xkZXIgcG9zaXRpb25zIGFyZSBfc3BsaWNpbmcgY29udGV4dHNfLiAgQSBmdW5jdGlvbiBhcmd1bWVudCBsaXN0IGlzCmEgc3BsaWNpbmcgZXhwcmVzc2lvbiBjb250ZXh0LiAgQSBwbGFjZWhvbGRlciBpbiBhIHNwbGljaW5nIGV4cHJlc3Npb24gY29udGV4dApjYW4gdGFrZSBhIHNpbmdsZSBFeHByZXNzaW9uIChvciBTdHJpbmcsIGNvbnZlcnRlZCB0byBWYXJpYWJsZVVzZSkgb3IgYW4KSXRlcmFibGUgb2YgRXhwcmVzc2lvbnMgKGFuZC9vciBTdHJpbmdzKS4KCiAgICAvLyBub24tc3BsaWNpbmcgYXJndW1lbnQ6CiAgICBqcygnIygjKScsIFsnc2F5Jywgc10pICAgICAgICAtLT4gIHNheSgiaGVsbG8iKQogICAgLy8gc3BsaWNpbmcgYXJndW1lbnRzOgogICAganMoJyMoIyknLCBbJ3NheScsIFtdXSkgICAgICAgLS0+ICBzYXkoKQogICAganMoJyMoIyknLCBbJ3NheScsIFtzXV0pICAgICAgLS0+ICBzYXkoImhlbGxvIikKICAgIGpzKCcjKCMpJywgWydzYXknLCBbcywgbl1dKSAgIC0tPiAgc2F5KCJoZWxsbyIsIDEyMykKCkEgc3BsaWNpbmcgY29udGV4dCBjYW4gYmUgdXNlZCB0byBhcHBlbmQgJ2xpc3RzJyBhbmQgYWRkIGV4dHJhIGVsZW1lbnRzOgoKICAgIGpzKCdmb28oIywgIywgMSknLCBbIFsnYScsIG5dLCBzXSkgICAgICAgLS0+ICBmb28oYSwgMTIzLCAiaGVsbG8iLCAxKQogICAganMoJ2ZvbygjLCAjLCAxKScsIFsgWydhJywgbl0sIFtzLCBuXV0pICAtLT4gIGZvbyhhLCAxMjMsICJoZWxsbyIsIDEyMywgMSkKICAgIGpzKCdmb28oIywgIywgMSknLCBbIFtdLCBbcywgbl1dKSAgICAgICAgLS0+ICBmb28oImhlbGxvIiwgMTIzLCAxKQogICAganMoJ2ZvbygjLCAjLCAxKScsIFsgW10sIFtdIF0pICAgICAgICAgICAtLT4gIGZvbygxKQoKVGhlIGdlbmVyYXRpb24gb2YgYSBjb21waWxlLXRpbWUgb3B0aW9uYWwgYXJndW1lbnQgZXhwcmVzc2lvbiBjYW4gYmUgY2hvc2VuIGJ5CnByb3ZpZGluZyBhbiBlbXB0eSBvciBzaW5nbGV0b24gbGlzdC4KCkluIGFkZGl0aW9uIHRvIEV4cHJlc3Npb25zIGFuZCBTdGF0ZW1lbnRzLCB0aGVyZSBhcmUgUGFyYW1ldGVycywgd2hpY2ggb2NjdXIKb25seSBpbiB0aGUgcGFyYW1ldGVyIGxpc3Qgb2YgYSBmdW5jdGlvbiBleHByZXNzaW9uIG9yIGRlY2xhcmF0aW9uLgpQbGFjZWhvbGRlcnMgaW4gcGFyYW1ldGVyIHBvc2l0aW9ucyBiZWhhdmUgbGlrZSBwbGFjZWhvbGRlcnMgaW4gRXhwcmVzc2lvbgpwb3NpdGlvbnMsIGV4Y2VwdCBvbmx5IFBhcmFtZXRlciBBU1Qgbm9kZXMgYXJlIHBlcm1pdHRlZC4gIFN0cmluZyBhcmd1bWVudHMgZm9yCnBhcmFtZXRlciBwbGFjZWhvbGRlcnMgYXJlIGNvbnZlcnRlZCB0byBQYXJhbWV0ZXIgQVNUIG5vZGVzLgoKICAgIHZhciBwRm9vID0gbmV3IFBhcmFtZXRlcignZm9vJykKICAgIGpzKCdmdW5jdGlvbigjKSB7IHJldHVybiAjOyB9JywgW3BGb28sIHZGb29dKQogICAgLS0+CiAgICBmdW5jdGlvbihmb28pIHsgcmV0dXJuIGZvbzsgfQoKRXhwcmVzc2lvbnMgYW5kIFBhcmFtZXRlcnMgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggZWFjaCBvdGhlcidzIGNvbnRleHQ6CgogICAganMoJ2Z1bmN0aW9uKCMpIHsgcmV0dXJuICM7IH0nLCBbdkZvbywgdkZvb10pIC0tPiBlcnJvcgogICAganMoJ2Z1bmN0aW9uKCMpIHsgcmV0dXJuICM7IH0nLCBbcEZvbywgcEZvb10pIC0tPiBlcnJvcgoKVGhlIHBhcmFtZXRlciBjb250ZXh0IGlzIGEgc3BsaWNpbmcgY29udGV4dC4gIFdoZW4gY29tYmluZWQgd2l0aCB0aGUKY29udGV4dC1zZW5zaXRpdmUgY29udmVyc2lvbiBvZiBTdHJpbmdzLCB0aGlzIHNpbXBsaWZpZXMgdGhlIGNvbnN0cnVjdGlvbiBvZgp0cmFtcG9saW5lLWxpa2UgZnVuY3Rpb25zOgoKICAgIHZhciBhcmdzID0gWydhJywgJ2InXTsKICAgIGpzKCdmdW5jdGlvbigjKSB7IHJldHVybiBmKHRoaXMsICMpOyB9JywgW2FyZ3MsIGFyZ3NdKQogICAgLS0+CiAgICBmdW5jdGlvbihhLCBiKSB7IHJldHVybiBmKHRoaXMsIGEsIGIpOyB9CgpBIHN0YXRlbWVudCBwbGFjZWhvbGRlciBpbiBhIEJsb2NrIGlzIGFsc28gaW4gYSBzcGxpY2luZyBjb250ZXh0LiAgSW4gYWRkaXRpb24KdG8gc3BsaWNpbmcgSXRlcmFibGVzLCBzdGF0ZW1lbnQgcGxhY2Vob2xkZXJzIGluIGEgQmxvY2sgd2lsbCBhbHNvIHNwbGljZSBhCkJsb2NrIG9yIGFuIEVtcHR5U3RhdGVtZW50LiAgVGhpcyBmbGF0dGVucyBuZXN0ZWQgYmxvY2tzIGFuZCBhbGxvd3MgYmxvY2tzIHRvIGJlCmFwcGVuZGVkLgoKICAgIHZhciBiMSA9IGpzLnN0YXRlbWVudCgneyAxOyAyOyB9Jyk7CiAgICB2YXIgc0VtcHR5ID0gbmV3IEVtcHR5c3RhdGVtZW50KCk7CiAgICBqcy5zdGF0ZW1lbnQoJ3sgIzsgIzsgIzsgIzsgfScsIFtzRW1wdHksIGIxLCBiMSwgc0VtcHR5XSkKICAgIC0tPgogICAgeyAxOyAyOyAxOyAyOyB9CgpBIHBsYWNlaG9sZGVyIGluIHRoZSBjb250ZXh0IG9mIGFuIGlmLXN0YXRlbWVudCBjb25kaXRpb24gYWxzbyBhY2NlcHRzIGEgRGFydApib29sIGFyZ3VtZW50LCB3aGljaCBzZWxlY3RzIHRoZSB0aGVuLXBhcnQgb3IgZWxzZS1wYXJ0IG9mIHRoZSBpZi1zdGF0ZW1lbnQ6CgogICAganMuc3RhdGVtZW50KCdpZiAoIykgcmV0dXJuOycsIHZGb28pICAgLS0+ICBpZiAoZm9vKSByZXR1cm47CiAgICBqcy5zdGF0ZW1lbnQoJ2lmICgjKSByZXR1cm47JywgdHJ1ZSkgICAtLT4gIHJldHVybjsKICAgIGpzLnN0YXRlbWVudCgnaWYgKCMpIHJldHVybjsnLCBmYWxzZSkgIC0tPiAgOyAgIC8vIGVtcHR5IHN0YXRlbWVudAogICAgdmFyIGVUcnVlID0gbmV3IExpdGVyYWxCb29sKHRydWUpOwogICAganMuc3RhdGVtZW50KCdpZiAoIykgcmV0dXJuOycsIGVUcnVlKSAgLS0+ICBpZiAodHJ1ZSkgcmV0dXJuOwoKQ29tYmluZWQgd2l0aCBibG9jayBzcGxpY2luZywgaWYtc3RhdGVtZW50IGNvbmRpdGlvbiBjb250ZXh0IHBsYWNlaG9sZGVycyBhbGxvd3MKdGhlIGNyZWF0aW9uIG9mIHRlbXBsYXRlcyB0aGF0IHNlbGVjdCBjb2RlIGRlcGVuZGluZyBvbiB2YXJpYWJsZXMuCgogICAganMuc3RhdGVtZW50KCd7IDE7IGlmICgjKSAyOyBlbHNlIHsgMzsgNDsgfSA1O30nLCB0cnVlKQogICAgLS0+IHsgMTsgMjsgNTsgfQoKICAgIGpzLnN0YXRlbWVudCgneyAxOyBpZiAoIykgMjsgZWxzZSB7IDM7IDQ7IH0gNTt9JywgZmFsc2UpCiAgICAtLT4geyAxOyAzOyA0OyA1OyB9CgpBIHBsYWNlaG9sZGVyIGZvbGxvd2luZyBhIHBlcmlvZCBpbiBhIHByb3BlcnR5IGFjY2VzcyBpcyBpbiBhIHByb3BlcnR5IGFjY2Vzcwpjb250ZXh0LiAgVGhpcyBpcyBqdXN0IGxpa2UgYW4gZXhwcmVzc2lvbiBjb250ZXh0LCBleGNlcHQgU3RyaW5nIGFyZ3VtZW50cyBhcmUKY29udmVydGVkIHRvIEphdmFTY3JpcHQgcHJvcGVydHkgYWNjZXNzZXMuICBJbiBKYXZhU2NyaXB0LCBgYS5iYCBpcyBzaG9ydC1oYW5kCmZvciBgYVsiYiJdYDoKCiAgICBqcygnYVsjXScsIHZGb28pICAtLT4gIGFbZm9vXQogICAganMoJ2FbI10nLCBzKSAgICAgLS0+ICBhLmhlbGxvICAgIChpLmUuIGFbImhlbGxvIl0pLgogICAganMoJ2FbI10nLCAneCcpICAgLS0+ICBhW3hdCgogICAganMoJ2EuIycsIHZGb28pICAgLS0+ICBhW2Zvb10KICAgIGpzKCdhLiMnLCBzKSAgICAgIC0tPiAgYS5oZWxsbyAgICAoaS5lLiBhWyJoZWxsbyJdKQogICAganMoJ2EuIycsICd4JykgICAgLS0+ICBhLnggICAgICAgIChpLmUuIGFbIngiXSkKCihRdWVzdGlvbiAtIHNob3VsZCBgLiNgIGJlIHJlc3RyaWN0ZWQgdG8gcGVybWl0IG9ubHkgU3RyaW5nIGFyZ3VtZW50cz8gVGhlCnRlbXBsYXRlIHNob3VsZCBwcm9iYWJseSBiZSB3cml0dGVuIHdpdGggYFtdYCBpZiBub24tc3RyaW5ncyBhcmUgYWNjZXB0ZWQuKQoKCk9iamVjdCBpbml0aWFsaXplcnMgYWxsb3cgcGxhY2Vob2xkZXJzIGluIHRoZSBrZXkgcHJvcGVydHkgbmFtZSBwb3NpdGlvbjoKCiAgICBqcygneyM6MSwgIzoyfScsICBbcywgJ2J5ZSddKSAgICAtLT4gIHtoZWxsbzogMSwgYnllOiAyfQoKCldoYXQgaXMgbm90IGltcGxlbWVudGVkOgoKIC0gIEFycmF5IGluaXRpYWxpemVycyBhbmQgb2JqZWN0IGluaXRpYWxpemVycyBjb3VsZCBzdXBwb3J0IHNwbGljaW5nLiAgSW4gdGhlCiAgICBhcnJheSBjYXNlLCB3ZSB3b3VsZCBuZWVkIHNvbWUgd2F5IHRvIGtub3cgaWYgYW4gQXJyYXlJbml0aWFsaXplciBhcmd1bWVudAogICAgc2hvdWxkIGJlIHNwbGljZSBvciBpcyBpbnRlbmRlZCBhcyBhIHNpbmdsZSB2YWx1ZS4KCiovCmNvbnN0IEpzQnVpbGRlciBqcyA9IGNvbnN0IEpzQnVpbGRlcigpOwoKY2xhc3MgSnNCdWlsZGVyIHsKICBjb25zdCBKc0J1aWxkZXIoKTsKCiAgLyoqCiAgICogUGFyc2VzIGEgYml0IG9mIEphdmFTY3JpcHQsIGFuZCByZXR1cm5zIGFuIGV4cHJlc3Npb24uCiAgICoKICAgKiBTZWUgdGhlIE1pbmlKc1BhcnNlciBjbGFzcy4KICAgKgogICAqIFthcmd1bWVudHNdIGNhbiBiZSBhIHNpbmdsZSBbTm9kZV0gKGUuZy4gYW4gW0V4cHJlc3Npb25dIG9yIFtTdGF0ZW1lbnRdKSBvcgogICAqIGEgbGlzdCBvZiBbTm9kZV1zLCB3aGljaCB3aWxsIGJlIGludGVycG9sYXRlZCBpbnRvIHRoZSBzb3VyY2UgYXQgdGhlICcjJwogICAqIHNpZ25zLgogICAqLwogIEV4cHJlc3Npb24gY2FsbChTdHJpbmcgc291cmNlLCBbdmFyIGFyZ3VtZW50c10pIHsKICAgIFRlbXBsYXRlIHRlbXBsYXRlID0gX2ZpbmRFeHByZXNzaW9uVGVtcGxhdGUoc291cmNlKTsKICAgIGlmIChhcmd1bWVudHMgPT0gbnVsbCkgcmV0dXJuIHRlbXBsYXRlLmluc3RhbnRpYXRlKFtdKTsKICAgIC8vIFdlIGFsbG93IGEgc2luZ2xlIGFyZ3VtZW50IHRvIGJlIGdpdmVuIGRpcmVjdGx5LgogICAgaWYgKGFyZ3VtZW50cyBpcyEgTGlzdCAmJiBhcmd1bWVudHMgaXMhIE1hcCkgYXJndW1lbnRzID0gW2FyZ3VtZW50c107CiAgICByZXR1cm4gdGVtcGxhdGUuaW5zdGFudGlhdGUoYXJndW1lbnRzKTsKICB9CgogIC8qKgogICAqIFBhcnNlcyBhIEphdmFTY3JpcHQgU3RhdGVtZW50LCBvdGhlcndpc2UganVzdCBsaWtlIFtjYWxsXS4KICAgKi8KICBTdGF0ZW1lbnQgc3RhdGVtZW50KFN0cmluZyBzb3VyY2UsIFt2YXIgYXJndW1lbnRzXSkgewogICAgVGVtcGxhdGUgdGVtcGxhdGUgPSBfZmluZFN0YXRlbWVudFRlbXBsYXRlKHNvdXJjZSk7CiAgICBpZiAoYXJndW1lbnRzID09IG51bGwpIHJldHVybiB0ZW1wbGF0ZS5pbnN0YW50aWF0ZShbXSk7CiAgICAvLyBXZSBhbGxvdyBhIHNpbmdsZSBhcmd1bWVudCB0byBiZSBnaXZlbiBkaXJlY3RseS4KICAgIGlmIChhcmd1bWVudHMgaXMhIExpc3QgJiYgYXJndW1lbnRzIGlzISBNYXApIGFyZ3VtZW50cyA9IFthcmd1bWVudHNdOwogICAgcmV0dXJuIHRlbXBsYXRlLmluc3RhbnRpYXRlKGFyZ3VtZW50cyk7CiAgfQoKICAvKioKICAgKiBQYXJzZXMgSmF2YVNjcmlwdCB3cml0dGVuIGluIHRoZSBgSlNgIGZvcmVpZ24gaW5zdHJ1Y3Rpb24uCiAgICoKICAgKiBUaGUgW3NvdXJjZV0gbXVzdCBiZSBhIEphdmFTY3JpcHQgZXhwcmVzc2lvbiBvciBhIEphdmFTY3JpcHQgdGhyb3cKICAgKiBzdGF0ZW1lbnQuCiAgICovCiAgVGVtcGxhdGUgcGFyc2VGb3JlaWduSlMoU3RyaW5nIHNvdXJjZSkgewogICAgLy8gVE9ETyhzcmEpOiBQYXJzZSB3aXRoIGV4dHJhIHZhbGlkYXRpb24gdG8gZm9yYmlkIGAjYCBpbnRlcnBvbGF0aW9uIGluCiAgICAvLyBmdW5jdGlvbnMsIGFzIHRoaXMgbGVhZHMgdG8gdW5hbnRpY2lwYXRlZCBjYXB0dXJlIG9mIHRlbXBvcmFyaWVzIHRoYXQgYXJlCiAgICAvLyByZXVzZWQgYWZ0ZXIgY2FwdHVyZS4KICAgIGlmIChzb3VyY2Uuc3RhcnRzV2l0aCgidGhyb3cgIikpIHsKICAgICAgcmV0dXJuIF9maW5kU3RhdGVtZW50VGVtcGxhdGUoc291cmNlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfZmluZEV4cHJlc3Npb25UZW1wbGF0ZShzb3VyY2UpOwogICAgfQogIH0KCiAgVGVtcGxhdGUgX2ZpbmRFeHByZXNzaW9uVGVtcGxhdGUoU3RyaW5nIHNvdXJjZSkgewogICAgVGVtcGxhdGUgdGVtcGxhdGUgPSB0ZW1wbGF0ZU1hbmFnZXIubG9va3VwRXhwcmVzc2lvblRlbXBsYXRlKHNvdXJjZSk7CiAgICBpZiAodGVtcGxhdGUgPT0gbnVsbCkgewogICAgICBNaW5pSnNQYXJzZXIgcGFyc2VyID0gbmV3IE1pbmlKc1BhcnNlcihzb3VyY2UpOwogICAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZXIuZXhwcmVzc2lvbigpOwogICAgICB0ZW1wbGF0ZSA9IHRlbXBsYXRlTWFuYWdlci5kZWZpbmVFeHByZXNzaW9uVGVtcGxhdGUoc291cmNlLCBleHByZXNzaW9uKTsKICAgIH0KICAgIHJldHVybiB0ZW1wbGF0ZTsKICB9CgogIFRlbXBsYXRlIF9maW5kU3RhdGVtZW50VGVtcGxhdGUoU3RyaW5nIHNvdXJjZSkgewogICAgVGVtcGxhdGUgdGVtcGxhdGUgPSB0ZW1wbGF0ZU1hbmFnZXIubG9va3VwU3RhdGVtZW50VGVtcGxhdGUoc291cmNlKTsKICAgIGlmICh0ZW1wbGF0ZSA9PSBudWxsKSB7CiAgICAgIE1pbmlKc1BhcnNlciBwYXJzZXIgPSBuZXcgTWluaUpzUGFyc2VyKHNvdXJjZSk7CiAgICAgIFN0YXRlbWVudCBzdGF0ZW1lbnQgPSBwYXJzZXIuc3RhdGVtZW50KCk7CiAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGVNYW5hZ2VyLmRlZmluZVN0YXRlbWVudFRlbXBsYXRlKHNvdXJjZSwgc3RhdGVtZW50KTsKICAgIH0KICAgIHJldHVybiB0ZW1wbGF0ZTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYW4gRXhwcmVzc2lvbiB0ZW1wbGF0ZSBmb3IgdGhlIGdpdmVuIFtzb3VyY2VdLgogICAqCiAgICogVGhlIHJldHVybmVkIHRlbXBsYXRlIGlzIGNhY2hlZC4KICAgKi8KICBUZW1wbGF0ZSBleHByZXNzaW9uVGVtcGxhdGVGb3IoU3RyaW5nIHNvdXJjZSkgewogICAgcmV0dXJuIF9maW5kRXhwcmVzc2lvblRlbXBsYXRlKHNvdXJjZSk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGFuIEV4cHJlc3Npb24gdGVtcGxhdGUgd2l0aG91dCBjYWNoaW5nIHRoZSByZXN1bHQuCiAgICovCiAgVGVtcGxhdGUgdW5jYWNoZWRFeHByZXNzaW9uVGVtcGxhdGUoU3RyaW5nIHNvdXJjZSkgewogICAgTWluaUpzUGFyc2VyIHBhcnNlciA9IG5ldyBNaW5pSnNQYXJzZXIoc291cmNlKTsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlci5leHByZXNzaW9uKCk7CiAgICByZXR1cm4gbmV3IFRlbXBsYXRlKHNvdXJjZSwgZXhwcmVzc2lvbiwKICAgICAgICBpc0V4cHJlc3Npb246IHRydWUsIGZvcmNlQ29weTogZmFsc2UpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIFN0YXRlbWVudCB0ZW1wbGF0ZSB3aXRob3V0IGNhY2hpbmcgdGhlIHJlc3VsdC4KICAgKi8KICBUZW1wbGF0ZSB1bmNhY2hlZFN0YXRlbWVudFRlbXBsYXRlKFN0cmluZyBzb3VyY2UpIHsKICAgIE1pbmlKc1BhcnNlciBwYXJzZXIgPSBuZXcgTWluaUpzUGFyc2VyKHNvdXJjZSk7CiAgICBTdGF0ZW1lbnQgc3RhdGVtZW50ID0gcGFyc2VyLnN0YXRlbWVudCgpOwogICAgcmV0dXJuIG5ldyBUZW1wbGF0ZShzb3VyY2UsIHN0YXRlbWVudCwKICAgICAgICBpc0V4cHJlc3Npb246IGZhbHNlLCBmb3JjZUNvcHk6IGZhbHNlKTsKICB9CgogIC8qKgogICAqIENyZWF0ZSBhbiBFeHByZXNzaW9uIHRlbXBsYXRlIHdoaWNoIGhhcyBbYXN0XSBhcyB0aGUgcmVzdWx0LiAgVGhpcyBpcyB1c2VkCiAgICogdG8gd3JhcCBhIGdlbmVyYXRlZCBBU1QgaW4gYSB6ZXJvLWFyZ3VtZW50IFRlbXBsYXRlIHNvIGl0IGNhbiBiZSBwYXNzZWQgdG8KICAgKiBjb250ZXh0IHRoYXQgZXhwZWN0cyBhIHRlbXBsYXRlLgogICAqLwogIFRlbXBsYXRlIGV4cHJlc3Npb25UZW1wbGF0ZVlpZWxkaW5nKE5vZGUgYXN0KSB7CiAgICByZXR1cm4gbmV3IFRlbXBsYXRlLndpdGhFeHByZXNzaW9uUmVzdWx0KGFzdCk7CiAgfQoKICBUZW1wbGF0ZSBzdGF0ZW1lbnRUZW1wbGF0ZVlpZWxkaW5nKE5vZGUgYXN0KSB7CiAgICByZXR1cm4gbmV3IFRlbXBsYXRlLndpdGhTdGF0ZW1lbnRSZXN1bHQoYXN0KTsKICB9CgogIC8vLyBDcmVhdGVzIGEgbGl0ZXJhbCBqcyBzdHJpbmcgZnJvbSBbdmFsdWVdLgogIExpdGVyYWxTdHJpbmcgX2xlZ2FjeUVzY2FwZWRTdHJpbmcoU3RyaW5nIHZhbHVlKSB7CiAgICAvLyBTdGFydCBieSBlc2NhcGluZyB0aGUgYmFja3NsYXNoZXMuCiAgICBTdHJpbmcgZXNjYXBlZCA9IHZhbHVlLnJlcGxhY2VBbGwoJ1xcJywgJ1xcXFwnKTsKICAgIC8vIERvIG5vdCBlc2NhcGUgdW5pY29kZSBjaGFyYWN0ZXJzIGFuZCAnIGJlY2F1c2UgdGhleSBhcmUgYWxsb3dlZCBpbiB0aGUKICAgIC8vIHN0cmluZyBsaXRlcmFsIGFueXdheS4KICAgIGVzY2FwZWQgPSBlc2NhcGVkLnJlcGxhY2VBbGxNYXBwZWQobmV3IFJlZ0V4cCgnXG58InxcYnxcdHxcdnxccicpLCAobWF0Y2gpIHsKICAgICAgc3dpdGNoIChtYXRjaC5ncm91cCgwKSkgewogICAgICAgIGNhc2UgIlxuIjoKICAgICAgICAgIHJldHVybiByIlxuIjsKICAgICAgICBjYXNlICJcIiI6CiAgICAgICAgICByZXR1cm4gcidcIic7CiAgICAgICAgY2FzZSAiXGIiOgogICAgICAgICAgcmV0dXJuIHIiXGIiOwogICAgICAgIGNhc2UgIlx0IjoKICAgICAgICAgIHJldHVybiByIlx0IjsKICAgICAgICBjYXNlICJcZiI6CiAgICAgICAgICByZXR1cm4gciJcZiI7CiAgICAgICAgY2FzZSAiXHIiOgogICAgICAgICAgcmV0dXJuIHIiXHIiOwogICAgICAgIGNhc2UgIlx2IjoKICAgICAgICAgIHJldHVybiByIlx2IjsKICAgICAgfQogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBtYXRjaDogJHttYXRjaC5ncm91cCgwKX0iKTsKICAgIH0pOwogICAgTGl0ZXJhbFN0cmluZyByZXN1bHQgPSBzdHJpbmcoZXNjYXBlZCk7CiAgICAvLyBXZSBkb24ndCBlc2NhcGUgJyB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBzdHJpbmcgaXMgd3JhcHBlZAogICAgLy8gaW50byAiLiBWZXJpZnkgdGhhdCBhc3N1bXB0aW9uLgogICAgYXNzZXJ0KHJlc3VsdC52YWx1ZS5jb2RlVW5pdEF0KDApID09ICciJy5jb2RlVW5pdEF0KDApKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIGxpdGVyYWwganMgc3RyaW5nIGZyb20gW3ZhbHVlXS4KICBMaXRlcmFsU3RyaW5nIGVzY2FwZWRTdHJpbmcoU3RyaW5nIHZhbHVlLAogICAgICB7Ym9vbCB1dGY4OiBmYWxzZSwgYm9vbCBhc2NpaTogZmFsc2V9KSB7CiAgICBpZiAodXRmOCA9PSBmYWxzZSAmJiBhc2NpaSA9PSBmYWxzZSkgcmV0dXJuIF9sZWdhY3lFc2NhcGVkU3RyaW5nKHZhbHVlKTsKICAgIGlmICh1dGY4ICYmIGFzY2lpKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignQ2Fubm90IGJlIGJvdGggVVRGOCBhbmQgQVNDSUknKTsKCiAgICBpbnQgc2luZ2xlUXVvdGVzID0gMDsKICAgIGludCBkb3VibGVRdW90ZXMgPSAwOwogICAgaW50IG90aGVyRXNjYXBlcyA9IDA7CiAgICBpbnQgdW5wYWlyZWRTdXJyb2dhdGVzID0gMDsKCiAgICBmb3IgKGludCBydW5lIGluIHZhbHVlLnJ1bmVzKSB7CiAgICAgIGlmIChydW5lID09IGNoYXJDb2Rlcy4kQkFDS1NMQVNIKSB7CiAgICAgICAgKytvdGhlckVzY2FwZXM7CiAgICAgIH0gZWxzZSBpZiAocnVuZSA9PSBjaGFyQ29kZXMuJFNRKSB7CiAgICAgICAgKytzaW5nbGVRdW90ZXM7CiAgICAgIH0gZWxzZSBpZiAocnVuZSA9PSBjaGFyQ29kZXMuJERRKSB7CiAgICAgICAgKytkb3VibGVRdW90ZXM7CiAgICAgIH0gZWxzZSBpZiAocnVuZSA9PSBjaGFyQ29kZXMuJExGIHx8CiAgICAgICAgICBydW5lID09IGNoYXJDb2Rlcy4kQ1IgfHwKICAgICAgICAgIHJ1bmUgPT0gY2hhckNvZGVzLiRMUyB8fAogICAgICAgICAgcnVuZSA9PSBjaGFyQ29kZXMuJFBTKSB7CiAgICAgICAgLy8gTGluZSB0ZXJtaW5hdG9ycy4KICAgICAgICArK290aGVyRXNjYXBlczsKICAgICAgfSBlbHNlIGlmIChydW5lID09IGNoYXJDb2Rlcy4kQlMgfHwKICAgICAgICAgIHJ1bmUgPT0gY2hhckNvZGVzLiRUQUIgfHwKICAgICAgICAgIHJ1bmUgPT0gY2hhckNvZGVzLiRWVEFCIHx8CiAgICAgICAgICBydW5lID09IGNoYXJDb2Rlcy4kRkYpIHsKICAgICAgICArK290aGVyRXNjYXBlczsKICAgICAgfSBlbHNlIGlmIChfaXNVbnBhaXJlZFN1cnJvZ2F0ZShydW5lKSkgewogICAgICAgICsrdW5wYWlyZWRTdXJyb2dhdGVzOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChhc2NpaSAmJiAocnVuZSA8IGNoYXJDb2Rlcy4kU1BBQ0UgfHwgcnVuZSA+PSBjaGFyQ29kZXMuJERFTCkpIHsKICAgICAgICAgICsrb3RoZXJFc2NhcGVzOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIExpdGVyYWxTdHJpbmcgZmluaXNoKFN0cmluZyBxdW90ZSwgU3RyaW5nIGNvbnRlbnRzKSB7CiAgICAgIHJldHVybiBuZXcgTGl0ZXJhbFN0cmluZygnJHF1b3RlJGNvbnRlbnRzJHF1b3RlJyk7CiAgICB9CgogICAgaWYgKG90aGVyRXNjYXBlcyA9PSAwICYmIHVucGFpcmVkU3Vycm9nYXRlcyA9PSAwKSB7CiAgICAgIGlmIChkb3VibGVRdW90ZXMgPT0gMCkgcmV0dXJuIGZpbmlzaCgnIicsIHZhbHVlKTsKICAgICAgaWYgKHNpbmdsZVF1b3RlcyA9PSAwKSByZXR1cm4gZmluaXNoKCInIiwgdmFsdWUpOwogICAgfQoKICAgIGJvb2wgdXNlU2luZ2xlUXVvdGVzID0gc2luZ2xlUXVvdGVzIDwgZG91YmxlUXVvdGVzOwoKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKCiAgICBmb3IgKGludCBydW5lIGluIHZhbHVlLnJ1bmVzKSB7CiAgICAgIFN0cmluZyBlc2NhcGUgPSBfaXJyZWd1bGFyRXNjYXBlKHJ1bmUsIHVzZVNpbmdsZVF1b3Rlcyk7CiAgICAgIGlmIChlc2NhcGUgIT0gbnVsbCkgewogICAgICAgIHNiLndyaXRlKGVzY2FwZSk7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKHJ1bmUgPT0gY2hhckNvZGVzLiRMUyB8fAogICAgICAgICAgcnVuZSA9PSBjaGFyQ29kZXMuJFBTIHx8CiAgICAgICAgICBfaXNVbnBhaXJlZFN1cnJvZ2F0ZShydW5lKSB8fAogICAgICAgICAgYXNjaWkgJiYgKHJ1bmUgPCBjaGFyQ29kZXMuJFNQQUNFIHx8IHJ1bmUgPj0gY2hhckNvZGVzLiRERUwpKSB7CiAgICAgICAgaWYgKHJ1bmUgPCAweDEwMCkgewogICAgICAgICAgc2Iud3JpdGUocidceCcpOwogICAgICAgICAgc2Iud3JpdGUocnVuZS50b1JhZGl4U3RyaW5nKDE2KS5wYWRMZWZ0KDIsICcwJykpOwogICAgICAgIH0gZWxzZSBpZiAocnVuZSA8IDB4MTAwMDApIHsKICAgICAgICAgIHNiLndyaXRlKHInXHUnKTsKICAgICAgICAgIHNiLndyaXRlKHJ1bmUudG9SYWRpeFN0cmluZygxNikucGFkTGVmdCg0LCAnMCcpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gTm90IGFsbCBicm93c2VycyBhY2NlcHQgdGhlIEVTNiBcdXt6enp6enp9IGVuY29kaW5nLCBzbyBlbWl0IHR3bwogICAgICAgICAgLy8gc3Vycm9nYXRlIHBhaXJzLgogICAgICAgICAgdmFyIGJpdHMgPSBydW5lIC0gMHgxMDAwMDsKICAgICAgICAgIHZhciBsZWFkaW5nID0gMHhEODAwIHwgKGJpdHMgPj4gMTApOwogICAgICAgICAgdmFyIHRyYWlsaW5nID0gMHhEQzAwIHwgKGJpdHMgJiAweDNmZik7CiAgICAgICAgICBzYi53cml0ZShyJ1x1Jyk7CiAgICAgICAgICBzYi53cml0ZShsZWFkaW5nLnRvUmFkaXhTdHJpbmcoMTYpKTsKICAgICAgICAgIHNiLndyaXRlKHInXHUnKTsKICAgICAgICAgIHNiLndyaXRlKHRyYWlsaW5nLnRvUmFkaXhTdHJpbmcoMTYpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2Iud3JpdGVDaGFyQ29kZShydW5lKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBmaW5pc2godXNlU2luZ2xlUXVvdGVzID8gIiciIDogJyInLCBzYi50b1N0cmluZygpKTsKICB9CgogIHN0YXRpYyBib29sIF9pc1VucGFpcmVkU3Vycm9nYXRlKGludCBjb2RlKSA9PiAoY29kZSAmIDB4RkZGRkY4MDApID09IDB4RDgwMDsKCiAgc3RhdGljIFN0cmluZyBfaXJyZWd1bGFyRXNjYXBlKGludCBjb2RlLCBib29sIHVzZVNpbmdsZVF1b3RlcykgewogICAgc3dpdGNoIChjb2RlKSB7CiAgICAgIGNhc2UgY2hhckNvZGVzLiRTUToKICAgICAgICByZXR1cm4gdXNlU2luZ2xlUXVvdGVzID8gciJcJyIgOiByIiciOwogICAgICBjYXNlIGNoYXJDb2Rlcy4kRFE6CiAgICAgICAgcmV0dXJuIHVzZVNpbmdsZVF1b3RlcyA/IHInIicgOiByJ1wiJzsKICAgICAgY2FzZSBjaGFyQ29kZXMuJEJBQ0tTTEFTSDoKICAgICAgICByZXR1cm4gcidcXCc7CiAgICAgIGNhc2UgY2hhckNvZGVzLiRCUzoKICAgICAgICByZXR1cm4gcidcYic7CiAgICAgIGNhc2UgY2hhckNvZGVzLiRUQUI6CiAgICAgICAgcmV0dXJuIHInXHQnOwogICAgICBjYXNlIGNoYXJDb2Rlcy4kTEY6CiAgICAgICAgcmV0dXJuIHInXG4nOwogICAgICBjYXNlIGNoYXJDb2Rlcy4kVlRBQjoKICAgICAgICByZXR1cm4gcidcdic7CiAgICAgIGNhc2UgY2hhckNvZGVzLiRGRjoKICAgICAgICByZXR1cm4gcidcZic7CiAgICAgIGNhc2UgY2hhckNvZGVzLiRDUjoKICAgICAgICByZXR1cm4gcidccic7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBDcmVhdGVzIGEgbGl0ZXJhbCBqcyBzdHJpbmcgZnJvbSBbdmFsdWVdLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBvbmx5IHB1dHMgcXVvdGVzIGFyb3VuZCBbdmFsdWVdLiBJdCBkb2VzIG5vdCBkbwogIC8vLyBhbnkgZXNjYXBpbmcsIHNvIHVzZSBvbmx5IHdoZW4geW91IGNhbiBndWFyYW50ZWUgdGhhdCBbdmFsdWVdIGRvZXMgbm90CiAgLy8vIGNvbnRhaW4gbmV3bGluZXMgb3IgYmFja3NsYXNoZXMuIEZvciBlc2NhcGluZyB0aGUgc3RyaW5nIHVzZQogIC8vLyBbZXNjYXBlZFN0cmluZ10uCiAgTGl0ZXJhbFN0cmluZyBzdHJpbmcoU3RyaW5nIHZhbHVlKSA9PiBuZXcgTGl0ZXJhbFN0cmluZygnIiR2YWx1ZSInKTsKCiAgLy8vIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2YgW0xpdGVyYWxTdHJpbmddIGZyb20gW3ZhbHVlXS4KICAvLy8KICAvLy8gRG9lcyBub3QgYWRkIHF1b3RlcyBvciBkbyBhbnkgZXNjYXBpbmcuCiAgTGl0ZXJhbFN0cmluZyBzdHJpbmdQYXJ0KFN0cmluZyB2YWx1ZSkgPT4gbmV3IExpdGVyYWxTdHJpbmcodmFsdWUpOwoKICBTdHJpbmdDb25jYXRlbmF0aW9uIGNvbmNhdGVuYXRlU3RyaW5ncyhJdGVyYWJsZTxMaXRlcmFsPiBwYXJ0cywKICAgICAge2FkZFF1b3RlczogZmFsc2V9KSB7CiAgICBMaXN0PExpdGVyYWw+IF9wYXJ0czsKICAgIGlmIChhZGRRdW90ZXMpIHsKICAgICAgTGl0ZXJhbCBxdW90ZSA9IHN0cmluZ1BhcnQoJyInKTsKICAgICAgX3BhcnRzID0gPExpdGVyYWw+W3F1b3RlXQogICAgICAgIC4uYWRkQWxsKHBhcnRzKQogICAgICAgIC4uYWRkKHF1b3RlKTsKICAgIH0gZWxzZSB7CiAgICAgIF9wYXJ0cyA9IG5ldyBMaXN0LmZyb20ocGFydHMsIGdyb3dhYmxlOiBmYWxzZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IFN0cmluZ0NvbmNhdGVuYXRpb24oX3BhcnRzKTsKICB9CgogIEl0ZXJhYmxlPExpdGVyYWw+IGpvaW5MaXRlcmFscyhJdGVyYWJsZTxMaXRlcmFsPiBsaXN0LCBMaXRlcmFsIHNlcGFyYXRvcikgewogICAgcmV0dXJuIG5ldyBfSW50ZXJsZWF2ZUl0ZXJhYmxlPExpdGVyYWw+KGxpc3QsIHNlcGFyYXRvcik7CiAgfQoKICBMaXRlcmFsU3RyaW5nIHF1b3RlTmFtZShOYW1lIG5hbWUsIHthbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKG5hbWUgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsU3RyaW5nKCciIicpOwogICAgfQogICAgcmV0dXJuIG5ldyBMaXRlcmFsU3RyaW5nRnJvbU5hbWUobmFtZSk7CiAgfQoKICBMaXRlcmFsTnVtYmVyIG51bWJlcihudW0gdmFsdWUpID0+IG5ldyBMaXRlcmFsTnVtYmVyKCckdmFsdWUnKTsKCiAgTGl0ZXJhbEJvb2wgYm9vbGVhbihib29sIHZhbHVlKSA9PiBuZXcgTGl0ZXJhbEJvb2wodmFsdWUpOwoKICBBcnJheUluaXRpYWxpemVyIG51bUFycmF5KEl0ZXJhYmxlPGludD4gbGlzdCkgPT4KICAgICAgbmV3IEFycmF5SW5pdGlhbGl6ZXIobGlzdC5tYXAobnVtYmVyKS50b0xpc3QoKSk7CgogIEFycmF5SW5pdGlhbGl6ZXIgc3RyaW5nQXJyYXkoSXRlcmFibGU8U3RyaW5nPiBsaXN0KSA9PgogICAgICBuZXcgQXJyYXlJbml0aWFsaXplcihsaXN0Lm1hcChzdHJpbmcpLnRvTGlzdCgpKTsKCiAgQ29tbWVudCBjb21tZW50KFN0cmluZyB0ZXh0KSA9PiBuZXcgQ29tbWVudCh0ZXh0KTsKCiAgQ2FsbCBwcm9wZXJ0eUNhbGwoCiAgICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsIEV4cHJlc3Npb24gZmllbGROYW1lLCBMaXN0PEV4cHJlc3Npb24+IGFyZ3VtZW50cykgewogICAgcmV0dXJuIG5ldyBDYWxsKG5ldyBQcm9wZXJ0eUFjY2VzcyhyZWNlaXZlciwgZmllbGROYW1lKSwgYXJndW1lbnRzKTsKICB9CgogIE9iamVjdEluaXRpYWxpemVyIG9iamVjdExpdGVyYWwoTWFwPFN0cmluZywgRXhwcmVzc2lvbj4gbWFwKSB7CiAgICBMaXN0PFByb3BlcnR5PiBwcm9wZXJ0aWVzID0gPFByb3BlcnR5PltdOwogICAgbWFwLmZvckVhY2goKG5hbWUsIHZhbHVlKSB7CiAgICAgIHByb3BlcnRpZXMuYWRkKG5ldyBQcm9wZXJ0eShzdHJpbmcobmFtZSksIHZhbHVlKSk7CiAgICB9KTsKICAgIHJldHVybiBuZXcgT2JqZWN0SW5pdGlhbGl6ZXIocHJvcGVydGllcyk7CiAgfQp9CgpMaXRlcmFsU3RyaW5nIHN0cmluZyhTdHJpbmcgdmFsdWUpID0+IGpzLnN0cmluZyh2YWx1ZSk7CkxpdGVyYWxTdHJpbmcgcXVvdGVOYW1lKE5hbWUgbmFtZSwge2FsbG93TnVsbDogZmFsc2V9KSB7CiAgcmV0dXJuIGpzLnF1b3RlTmFtZShuYW1lLCBhbGxvd051bGw6IGFsbG93TnVsbCk7Cn0KCkxpdGVyYWxTdHJpbmcgc3RyaW5nUGFydChTdHJpbmcgdmFsdWUpID0+IGpzLnN0cmluZ1BhcnQodmFsdWUpOwpJdGVyYWJsZTxMaXRlcmFsPiBqb2luTGl0ZXJhbHMoSXRlcmFibGU8TGl0ZXJhbD4gbGlzdCwgTGl0ZXJhbCBzZXBhcmF0b3IpIHsKICByZXR1cm4ganMuam9pbkxpdGVyYWxzKGxpc3QsIHNlcGFyYXRvcik7Cn0KClN0cmluZ0NvbmNhdGVuYXRpb24gY29uY2F0ZW5hdGVTdHJpbmdzKEl0ZXJhYmxlPExpdGVyYWw+IHBhcnRzLAogICAge2FkZFF1b3RlczogZmFsc2V9KSB7CiAgcmV0dXJuIGpzLmNvbmNhdGVuYXRlU3RyaW5ncyhwYXJ0cywgYWRkUXVvdGVzOiBhZGRRdW90ZXMpOwp9CgpMaXRlcmFsTnVtYmVyIG51bWJlcihudW0gdmFsdWUpID0+IGpzLm51bWJlcih2YWx1ZSk7CkFycmF5SW5pdGlhbGl6ZXIgbnVtQXJyYXkoSXRlcmFibGU8aW50PiBsaXN0KSA9PiBqcy5udW1BcnJheShsaXN0KTsKQXJyYXlJbml0aWFsaXplciBzdHJpbmdBcnJheShJdGVyYWJsZTxTdHJpbmc+IGxpc3QpID0+IGpzLnN0cmluZ0FycmF5KGxpc3QpOwpDYWxsIHByb3BlcnR5Q2FsbCgKICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIsIEV4cHJlc3Npb24gZmllbGROYW1lLCBMaXN0PEV4cHJlc3Npb24+IGFyZ3VtZW50cykgewogIHJldHVybiBqcy5wcm9wZXJ0eUNhbGwocmVjZWl2ZXIsIGZpZWxkTmFtZSwgYXJndW1lbnRzKTsKfQoKT2JqZWN0SW5pdGlhbGl6ZXIgb2JqZWN0TGl0ZXJhbChNYXA8U3RyaW5nLCBFeHByZXNzaW9uPiBtYXApIHsKICByZXR1cm4ganMub2JqZWN0TGl0ZXJhbChtYXApOwp9CgpjbGFzcyBNaW5pSnNQYXJzZXJFcnJvciB7CiAgTWluaUpzUGFyc2VyRXJyb3IodGhpcy5wYXJzZXIsIHRoaXMubWVzc2FnZSkge30KCiAgZmluYWwgTWluaUpzUGFyc2VyIHBhcnNlcjsKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaW50IHBvcyA9IHBhcnNlci5sYXN0UG9zaXRpb247CgogICAgLy8gRGlzY2FyZCBsaW5lcyBmb2xsb3dpbmcgdGhlIGxpbmUgY29udGFpbmluZyBsYXN0UG9zaXRpb24uCiAgICBTdHJpbmcgc3JjID0gcGFyc2VyLnNyYzsKICAgIGludCBuZXdsaW5lUG9zID0gc3JjLmluZGV4T2YoJ1xuJywgcG9zKTsKICAgIGlmIChuZXdsaW5lUG9zID49IHBvcykgc3JjID0gc3JjLnN1YnN0cmluZygwLCBuZXdsaW5lUG9zKTsKCiAgICAvLyBFeHRyYWN0IHRoZSBwcmVmaXggb2YgdGhlIGVycm9yIGxpbmUgYmVmb3JlIGxhc3RQb3NpdGlvbi4KICAgIFN0cmluZyBsaW5lID0gc3JjOwogICAgaW50IGxhc3RMaW5lU3RhcnQgPSBsaW5lLmxhc3RJbmRleE9mKCdcbicpOwogICAgaWYgKGxhc3RMaW5lU3RhcnQgPj0gMCkgbGluZSA9IGxpbmUuc3Vic3RyaW5nKGxhc3RMaW5lU3RhcnQgKyAxKTsKICAgIFN0cmluZyBwcmVmaXggPSBsaW5lLnN1YnN0cmluZygwLCBwb3MgLSAoc3JjLmxlbmd0aCAtIGxpbmUubGVuZ3RoKSk7CgogICAgLy8gUmVwbGFjZSBub24tdGFicyB3aXRoIHNwYWNlcywgZ2l2aW5nIGEgcHJpbnQgaW5kZW50IHRoYXQgbWF0Y2hlcyB0aGUgdGV4dAogICAgLy8gZm9yIHRhYmJpbmcuCiAgICBTdHJpbmcgc3BhY2VzID0gcHJlZml4LnJlcGxhY2VBbGwobmV3IFJlZ0V4cChyJ1teXHRdJyksICcgJyk7CiAgICByZXR1cm4gJ0Vycm9yIGluIE1pbmlKc1BhcnNlcjpcbiR7c3JjfVxuJHNwYWNlc15cbiRzcGFjZXMkbWVzc2FnZVxuJzsKICB9Cn0KCi8vLyBNaW5pIEphdmFTY3JpcHQgcGFyc2VyIGZvciB0aW55IHNuaXBwZXRzIG9mIGNvZGUgdGhhdCB3ZSB3YW50IHRvIG1ha2UgaW50bwovLy8gQVNUIG5vZGVzLiAgSGFuZGxlczoKLy8vICogaWRlbnRpZmllcnMuCi8vLyAqIGRvdCBhY2Nlc3MuCi8vLyAqIG1ldGhvZCBjYWxscy4KLy8vICogW10gYWNjZXNzLgovLy8gKiBhcnJheSwgc3RyaW5nLCByZWdleHAsIGJvb2xlYW4sIG51bGwgYW5kIG51bWVyaWMgbGl0ZXJhbHMuCi8vLyAqIG1vc3Qgb3BlcmF0b3JzLgovLy8gKiBicmFja2V0cy4KLy8vICogdmFyIGRlY2xhcmF0aW9ucy4KLy8vICogb3BlcmF0b3IgcHJlY2VkZW5jZS4KLy8vICogYW5vbnltb3VzIGZ1bmN0aW9ucyBhbmQgbmFtZWQgZnVuY3Rpb24gZXhwcmVzc2lvbnMgYW5kIGRlY2xhcmF0aW9ucy4KLy8vIE5vdGFibGUgdGhpbmdzIGl0IGNhbid0IGRvIHlldCBpbmNsdWRlOgovLy8gKiBzb21lIHN0YXRlbWVudHMgYXJlIHN0aWxsIG1pc3NpbmcgKGRvLXdoaWxlLCB3aGlsZSwgc3dpdGNoKS4KLy8vCi8vLyBJdCdzIGEgZmFpcmx5IHN0YW5kYXJkIHJlY3Vyc2l2ZSBkZXNjZW50IHBhcnNlci4KLy8vCi8vLyBMaXRlcmFsIHN0cmluZ3MgYXJlIHBhc3NlZCB0aHJvdWdoIHRvIHRoZSBmaW5hbCBKUyBzb3VyY2UgY29kZSB1bmNoYW5nZWQsCi8vLyBpbmNsdWRpbmcgdGhlIGNob2ljZSBvZiBzdXJyb3VuZGluZyBxdW90ZXMsIHNvIGlmIHlvdSBwYXJzZQovLy8gcid2YXIgeCA9ICJmb29cblwiYmFyXCIiJyB5b3Ugd2lsbCBlbmQgdXAgd2l0aAovLy8gICB2YXIgeCA9ICJmb29cblwiYmFyXCIiIGluIHRoZSBmaW5hbCBwcm9ncmFtLiAgXHggYW5kIFx1IGVzY2FwZXMgYXJlIG5vdAovLy8gYWxsb3dlZCBpbiBzdHJpbmcgYW5kIHJlZ2V4cCBsaXRlcmFscyBiZWNhdXNlIHRoZSBtYWNoaW5lcnkgZm9yIGNoZWNraW5nCi8vLyB0aGVpciBjb3JyZWN0bmVzcyBpcyByYXRoZXIgaW52b2x2ZWQuCmNsYXNzIE1pbmlKc1BhcnNlciB7CiAgTWluaUpzUGFyc2VyKHRoaXMuc3JjKQogICAgICA6IGxhc3RDYXRlZ29yeSA9IE5PTkUsCiAgICAgICAgbGFzdFRva2VuID0gbnVsbCwKICAgICAgICBsYXN0UG9zaXRpb24gPSAwLAogICAgICAgIHBvc2l0aW9uID0gMCB7CiAgICBnZXRUb2tlbigpOwogIH0KCiAgaW50IGxhc3RDYXRlZ29yeSA9IE5PTkU7CiAgU3RyaW5nIGxhc3RUb2tlbiA9IG51bGw7CiAgaW50IGxhc3RQb3NpdGlvbiA9IDA7CiAgaW50IHBvc2l0aW9uID0gMDsKICBib29sIHNraXBwZWROZXdsaW5lID0gZmFsc2U7IC8vIHNraXBwZWQgbmV3bGluZSBpbiBsYXN0IGdldFRva2VuPwogIGZpbmFsIFN0cmluZyBzcmM7CgogIGZpbmFsIExpc3Q8SW50ZXJwb2xhdGVkTm9kZT4gaW50ZXJwb2xhdGVkVmFsdWVzID0gPEludGVycG9sYXRlZE5vZGU+W107CiAgYm9vbCBnZXQgaGFzTmFtZWRIb2xlcyA9PgogICAgICBpbnRlcnBvbGF0ZWRWYWx1ZXMuaXNOb3RFbXB0eSAmJiBpbnRlcnBvbGF0ZWRWYWx1ZXMuZmlyc3QuaXNOYW1lZDsKICBib29sIGdldCBoYXNQb3NpdGlvbmFsSG9sZXMgPT4KICAgICAgaW50ZXJwb2xhdGVkVmFsdWVzLmlzTm90RW1wdHkgJiYgaW50ZXJwb2xhdGVkVmFsdWVzLmZpcnN0LmlzUG9zaXRpb25hbDsKCiAgc3RhdGljIGNvbnN0IE5PTkUgPSAtMTsKICBzdGF0aWMgY29uc3QgQUxQSEEgPSAwOwogIHN0YXRpYyBjb25zdCBOVU1FUklDID0gMTsKICBzdGF0aWMgY29uc3QgU1RSSU5HID0gMjsKICBzdGF0aWMgY29uc3QgU1lNQk9MID0gMzsKICBzdGF0aWMgY29uc3QgQVNTSUdOTUVOVCA9IDQ7CiAgc3RhdGljIGNvbnN0IERPVCA9IDU7CiAgc3RhdGljIGNvbnN0IExQQVJFTiA9IDY7CiAgc3RhdGljIGNvbnN0IFJQQVJFTiA9IDc7CiAgc3RhdGljIGNvbnN0IExCUkFDRSA9IDg7CiAgc3RhdGljIGNvbnN0IFJCUkFDRSA9IDk7CiAgc3RhdGljIGNvbnN0IExTUVVBUkUgPSAxMDsKICBzdGF0aWMgY29uc3QgUlNRVUFSRSA9IDExOwogIHN0YXRpYyBjb25zdCBDT01NQSA9IDEyOwogIHN0YXRpYyBjb25zdCBRVUVSWSA9IDEzOwogIHN0YXRpYyBjb25zdCBDT0xPTiA9IDE0OwogIHN0YXRpYyBjb25zdCBTRU1JQ09MT04gPSAxNTsKICBzdGF0aWMgY29uc3QgSEFTSCA9IDE2OwogIHN0YXRpYyBjb25zdCBXSElURVNQQUNFID0gMTc7CiAgc3RhdGljIGNvbnN0IE9USEVSID0gMTg7CgogIC8vIE1ha2Ugc3VyZSB0aGF0IF1dIGlzIHR3byBzeW1ib2xzLgogIGJvb2wgc2luZ2xlQ2hhckNhdGVnb3J5KGludCBjYXRlZ29yeSkgPT4gY2F0ZWdvcnkgPj0gRE9UOwoKICBzdGF0aWMgU3RyaW5nIGNhdGVnb3J5VG9TdHJpbmcoaW50IGNhdCkgewogICAgc3dpdGNoIChjYXQpIHsKICAgICAgY2FzZSBOT05FOgogICAgICAgIHJldHVybiAiTk9ORSI7CiAgICAgIGNhc2UgQUxQSEE6CiAgICAgICAgcmV0dXJuICJBTFBIQSI7CiAgICAgIGNhc2UgTlVNRVJJQzoKICAgICAgICByZXR1cm4gIk5VTUVSSUMiOwogICAgICBjYXNlIFNZTUJPTDoKICAgICAgICByZXR1cm4gIlNZTUJPTCI7CiAgICAgIGNhc2UgQVNTSUdOTUVOVDoKICAgICAgICByZXR1cm4gIkFTU0lHTk1FTlQiOwogICAgICBjYXNlIERPVDoKICAgICAgICByZXR1cm4gIkRPVCI7CiAgICAgIGNhc2UgTFBBUkVOOgogICAgICAgIHJldHVybiAiTFBBUkVOIjsKICAgICAgY2FzZSBSUEFSRU46CiAgICAgICAgcmV0dXJuICJSUEFSRU4iOwogICAgICBjYXNlIExCUkFDRToKICAgICAgICByZXR1cm4gIkxCUkFDRSI7CiAgICAgIGNhc2UgUkJSQUNFOgogICAgICAgIHJldHVybiAiUkJSQUNFIjsKICAgICAgY2FzZSBMU1FVQVJFOgogICAgICAgIHJldHVybiAiTFNRVUFSRSI7CiAgICAgIGNhc2UgUlNRVUFSRToKICAgICAgICByZXR1cm4gIlJTUVVBUkUiOwogICAgICBjYXNlIFNUUklORzoKICAgICAgICByZXR1cm4gIlNUUklORyI7CiAgICAgIGNhc2UgQ09NTUE6CiAgICAgICAgcmV0dXJuICJDT01NQSI7CiAgICAgIGNhc2UgUVVFUlk6CiAgICAgICAgcmV0dXJuICJRVUVSWSI7CiAgICAgIGNhc2UgQ09MT046CiAgICAgICAgcmV0dXJuICJDT0xPTiI7CiAgICAgIGNhc2UgU0VNSUNPTE9OOgogICAgICAgIHJldHVybiAiU0VNSUNPTE9OIjsKICAgICAgY2FzZSBIQVNIOgogICAgICAgIHJldHVybiAiSEFTSCI7CiAgICAgIGNhc2UgV0hJVEVTUEFDRToKICAgICAgICByZXR1cm4gIldISVRFU1BBQ0UiOwogICAgICBjYXNlIE9USEVSOgogICAgICAgIHJldHVybiAiT1RIRVIiOwogICAgfQogICAgcmV0dXJuICJVbmtub3duOiAkY2F0IjsKICB9CgogIHN0YXRpYyBjb25zdCBDQVRFR09SSUVTID0gY29uc3QgPGludD5bCiAgICBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIC8vIDAtNwogICAgT1RIRVIsIFdISVRFU1BBQ0UsIFdISVRFU1BBQ0UsIE9USEVSLCBPVEhFUiwgV0hJVEVTUEFDRSwgLy8gOC0xMwogICAgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCAvLyAxNC0yMQogICAgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCBPVEhFUiwgT1RIRVIsIE9USEVSLCAvLyAyMi0yOQogICAgT1RIRVIsIE9USEVSLCBXSElURVNQQUNFLCAvLyAzMC0zMgogICAgU1lNQk9MLCBPVEhFUiwgSEFTSCwgQUxQSEEsIFNZTUJPTCwgU1lNQk9MLCBPVEhFUiwgLy8gISIjJCUmwrQKICAgIExQQVJFTiwgUlBBUkVOLCBTWU1CT0wsIFNZTUJPTCwgQ09NTUEsIFNZTUJPTCwgRE9ULCBTWU1CT0wsIC8vICgpKissLS4vCiAgICBOVU1FUklDLCBOVU1FUklDLCBOVU1FUklDLCBOVU1FUklDLCBOVU1FUklDLCAvLyAwMTIzNAogICAgTlVNRVJJQywgTlVNRVJJQywgTlVNRVJJQywgTlVNRVJJQywgTlVNRVJJQywgLy8gNTY3ODkKICAgIENPTE9OLCBTRU1JQ09MT04sIFNZTUJPTCwgU1lNQk9MLCBTWU1CT0wsIFFVRVJZLCBPVEhFUiwgLy8gOjs8PT4/QAogICAgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCAvLyBBQkNERUZHSAogICAgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCAvLyBJSktMTU5PUAogICAgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCAvLyBRUlNUVVZXWAogICAgQUxQSEEsIEFMUEhBLCBMU1FVQVJFLCBPVEhFUiwgUlNRVUFSRSwgU1lNQk9MLCBBTFBIQSwgT1RIRVIsIC8vIFlaW1xdXl8nCiAgICBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIC8vIGFiY2RlZmdoCiAgICBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIC8vIGlqa2xtbm9wCiAgICBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIEFMUEhBLCBBTFBIQSwgQUxQSEEsIC8vIHFyc3R1dnd4CiAgICBBTFBIQSwgQUxQSEEsIExCUkFDRSwgU1lNQk9MLCBSQlJBQ0UsIFNZTUJPTAogIF07IC8vIHl6e3x9fgoKICAvLyBUaGlzIG11c3QgYmUgYSA+PSB0aGUgaGlnaGVzdCBwcmVjZWRlbmNlIG51bWJlciBoYW5kbGVkIGJ5IHBhcnNlQmluYXJ5LgogIHN0YXRpYyB2YXIgSElHSEVTVF9QQVJTRV9CSU5BUllfUFJFQ0VERU5DRSA9IDE2OwogIHN0YXRpYyBib29sIGlzQXNzaWdubWVudChTdHJpbmcgc3ltYm9sKSA9PiBCSU5BUllfUFJFQ0VERU5DRVtzeW1ib2xdID09IDE3OwoKICAvLyBGcm9tIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT3BlcmF0b3JzL09wZXJhdG9yX1ByZWNlZGVuY2UKICBzdGF0aWMgZmluYWwgQklOQVJZX1BSRUNFREVOQ0UgPSB7CiAgICAnKz0nOiAxNywKICAgICctPSc6IDE3LAogICAgJyo9JzogMTcsCiAgICAnLz0nOiAxNywKICAgICclPSc6IDE3LAogICAgJ149JzogMTcsCiAgICAnfD0nOiAxNywKICAgICcmPSc6IDE3LAogICAgJzw8PSc6IDE3LAogICAgJz4+PSc6IDE3LAogICAgJz4+Pj0nOiAxNywKICAgICc9JzogMTcsCiAgICAnfHwnOiAxNCwKICAgICcmJic6IDEzLAogICAgJ3wnOiAxMiwKICAgICdeJzogMTEsCiAgICAnJic6IDEwLAogICAgJyE9JzogOSwKICAgICc9PSc6IDksCiAgICAnIT09JzogOSwKICAgICc9PT0nOiA5LAogICAgJzwnOiA4LAogICAgJzw9JzogOCwKICAgICc+PSc6IDgsCiAgICAnPic6IDgsCiAgICAnaW4nOiA4LAogICAgJ2luc3RhbmNlb2YnOiA4LAogICAgJzw8JzogNywKICAgICc+Pic6IDcsCiAgICAnPj4+JzogNywKICAgICcrJzogNiwKICAgICctJzogNiwKICAgICcqJzogNSwKICAgICcvJzogNSwKICAgICclJzogNQogIH07CiAgc3RhdGljIGZpbmFsIFVOQVJZX09QRVJBVE9SUyA9IFsKICAgICcrKycsCiAgICAnLS0nLAogICAgJysnLAogICAgJy0nLAogICAgJ34nLAogICAgJyEnLAogICAgJ3R5cGVvZicsCiAgICAndm9pZCcsCiAgICAnZGVsZXRlJywKICAgICdhd2FpdCcKICBdLnRvU2V0KCk7CgogIHN0YXRpYyBmaW5hbCBPUEVSQVRPUlNfVEhBVF9MT09LX0xJS0VfSURFTlRJRklFUlMgPQogICAgICBbJ3R5cGVvZicsICd2b2lkJywgJ2RlbGV0ZScsICdpbicsICdpbnN0YW5jZW9mJywgJ2F3YWl0J10udG9TZXQoKTsKCiAgc3RhdGljIGludCBjYXRlZ29yeShpbnQgY29kZSkgewogICAgaWYgKGNvZGUgPj0gQ0FURUdPUklFUy5sZW5ndGgpIHJldHVybiBPVEhFUjsKICAgIHJldHVybiBDQVRFR09SSUVTW2NvZGVdOwogIH0KCiAgU3RyaW5nIGdldERlbGltaXRlZChpbnQgc3RhcnRQb3NpdGlvbikgewogICAgcG9zaXRpb24gPSBzdGFydFBvc2l0aW9uOwogICAgaW50IGRlbGltaXRlciA9IHNyYy5jb2RlVW5pdEF0KHN0YXJ0UG9zaXRpb24pOwogICAgaW50IGN1cnJlbnRDb2RlOwogICAgZG8gewogICAgICBwb3NpdGlvbisrOwogICAgICBpZiAocG9zaXRpb24gPj0gc3JjLmxlbmd0aCkgZXJyb3IoIlVudGVybWluYXRlZCBsaXRlcmFsIik7CiAgICAgIGN1cnJlbnRDb2RlID0gc3JjLmNvZGVVbml0QXQocG9zaXRpb24pOwogICAgICBpZiAoY3VycmVudENvZGUgPT0gY2hhckNvZGVzLiRMRikgZXJyb3IoIlVudGVybWluYXRlZCBsaXRlcmFsIik7CiAgICAgIGlmIChjdXJyZW50Q29kZSA9PSBjaGFyQ29kZXMuJEJBQ0tTTEFTSCkgewogICAgICAgIGlmICgrK3Bvc2l0aW9uID49IHNyYy5sZW5ndGgpIGVycm9yKCJVbnRlcm1pbmF0ZWQgbGl0ZXJhbCIpOwogICAgICAgIGludCBlc2NhcGVkID0gc3JjLmNvZGVVbml0QXQocG9zaXRpb24pOwogICAgICAgIGlmIChlc2NhcGVkID09IGNoYXJDb2Rlcy4keCB8fAogICAgICAgICAgICBlc2NhcGVkID09IGNoYXJDb2Rlcy4kWCB8fAogICAgICAgICAgICBlc2NhcGVkID09IGNoYXJDb2Rlcy4kdSB8fAogICAgICAgICAgICBlc2NhcGVkID09IGNoYXJDb2Rlcy4kVSB8fAogICAgICAgICAgICBjYXRlZ29yeShlc2NhcGVkKSA9PSBOVU1FUklDKSB7CiAgICAgICAgICBlcnJvcignTnVtZXJpYyBhbmQgaGV4IGVzY2FwZXMgYXJlIG5vdCBhbGxvd2VkIGluIGxpdGVyYWxzJyk7CiAgICAgICAgfQogICAgICB9CiAgICB9IHdoaWxlIChjdXJyZW50Q29kZSAhPSBkZWxpbWl0ZXIpOwogICAgcG9zaXRpb24rKzsKICAgIHJldHVybiBzcmMuc3Vic3RyaW5nKGxhc3RQb3NpdGlvbiwgcG9zaXRpb24pOwogIH0KCiAgdm9pZCBnZXRUb2tlbigpIHsKICAgIHNraXBwZWROZXdsaW5lID0gZmFsc2U7CiAgICBmb3IgKDs7KSB7CiAgICAgIGlmIChwb3NpdGlvbiA+PSBzcmMubGVuZ3RoKSBicmVhazsKICAgICAgaW50IGNvZGUgPSBzcmMuY29kZVVuaXRBdChwb3NpdGlvbik7CiAgICAgIC8vICBTa2lwICcvLycgYW5kICcvKicgc3R5bGUgY29tbWVudHMuCiAgICAgIGlmIChjb2RlID09IGNoYXJDb2Rlcy4kU0xBU0ggJiYgcG9zaXRpb24gKyAxIDwgc3JjLmxlbmd0aCkgewogICAgICAgIGlmIChzcmMuY29kZVVuaXRBdChwb3NpdGlvbiArIDEpID09IGNoYXJDb2Rlcy4kU0xBU0gpIHsKICAgICAgICAgIGludCBuZXh0UG9zaXRpb24gPSBzcmMuaW5kZXhPZignXG4nLCBwb3NpdGlvbik7CiAgICAgICAgICBpZiAobmV4dFBvc2l0aW9uID09IC0xKSBuZXh0UG9zaXRpb24gPSBzcmMubGVuZ3RoOwogICAgICAgICAgcG9zaXRpb24gPSBuZXh0UG9zaXRpb247CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9IGVsc2UgaWYgKHNyYy5jb2RlVW5pdEF0KHBvc2l0aW9uICsgMSkgPT0gY2hhckNvZGVzLiRTVEFSKSB7CiAgICAgICAgICBpbnQgbmV4dFBvc2l0aW9uID0gc3JjLmluZGV4T2YoJyovJywgcG9zaXRpb24gKyAyKTsKICAgICAgICAgIGlmIChuZXh0UG9zaXRpb24gPT0gLTEpIGVycm9yKCdVbnRlcm1pbmF0ZWQgY29tbWVudCcpOwogICAgICAgICAgcG9zaXRpb24gPSBuZXh0UG9zaXRpb24gKyAyOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChjYXRlZ29yeShjb2RlKSAhPSBXSElURVNQQUNFKSBicmVhazsKICAgICAgaWYgKGNvZGUgPT0gY2hhckNvZGVzLiRMRikgc2tpcHBlZE5ld2xpbmUgPSB0cnVlOwogICAgICArK3Bvc2l0aW9uOwogICAgfQoKICAgIGlmIChwb3NpdGlvbiA9PSBzcmMubGVuZ3RoKSB7CiAgICAgIGxhc3RDYXRlZ29yeSA9IE5PTkU7CiAgICAgIGxhc3RUb2tlbiA9IG51bGw7CiAgICAgIGxhc3RQb3NpdGlvbiA9IHBvc2l0aW9uOwogICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgY29kZSA9IHNyYy5jb2RlVW5pdEF0KHBvc2l0aW9uKTsKICAgIGxhc3RQb3NpdGlvbiA9IHBvc2l0aW9uOwogICAgaWYgKGNvZGUgPT0gY2hhckNvZGVzLiRTUSB8fCBjb2RlID09IGNoYXJDb2Rlcy4kRFEpIHsKICAgICAgLy8gU3RyaW5nIGxpdGVyYWwuCiAgICAgIGxhc3RDYXRlZ29yeSA9IFNUUklORzsKICAgICAgbGFzdFRva2VuID0gZ2V0RGVsaW1pdGVkKHBvc2l0aW9uKTsKICAgIH0gZWxzZSBpZiAoY29kZSA9PSBjaGFyQ29kZXMuJDAgJiYKICAgICAgICBwb3NpdGlvbiArIDIgPCBzcmMubGVuZ3RoICYmCiAgICAgICAgc3JjLmNvZGVVbml0QXQocG9zaXRpb24gKyAxKSA9PSBjaGFyQ29kZXMuJHgpIHsKICAgICAgLy8gSGV4IGxpdGVyYWwuCiAgICAgIGZvciAocG9zaXRpb24gKz0gMjsgcG9zaXRpb24gPCBzcmMubGVuZ3RoOyBwb3NpdGlvbisrKSB7CiAgICAgICAgaW50IGNhdCA9IGNhdGVnb3J5KHNyYy5jb2RlVW5pdEF0KHBvc2l0aW9uKSk7CiAgICAgICAgaWYgKGNhdCAhPSBOVU1FUklDICYmIGNhdCAhPSBBTFBIQSkgYnJlYWs7CiAgICAgIH0KICAgICAgbGFzdENhdGVnb3J5ID0gTlVNRVJJQzsKICAgICAgbGFzdFRva2VuID0gc3JjLnN1YnN0cmluZyhsYXN0UG9zaXRpb24sIHBvc2l0aW9uKTsKICAgICAgaWYgKGludC50cnlQYXJzZShsYXN0VG9rZW4pID09IG51bGwpIHsKICAgICAgICBlcnJvcigiVW5wYXJzZWFibGUgbnVtYmVyIik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoY29kZSA9PSBjaGFyQ29kZXMuJFNMQVNIKSB7CiAgICAgIC8vIFRva2VucyB0aGF0IHN0YXJ0IHdpdGggLyBhcmUgc3BlY2lhbCBkdWUgdG8gcmVnZXhwIGxpdGVyYWxzLgogICAgICBsYXN0Q2F0ZWdvcnkgPSBTWU1CT0w7CiAgICAgIHBvc2l0aW9uKys7CiAgICAgIGlmIChwb3NpdGlvbiA8IHNyYy5sZW5ndGggJiYgc3JjLmNvZGVVbml0QXQocG9zaXRpb24pID09IGNoYXJDb2Rlcy4kRVEpIHsKICAgICAgICBwb3NpdGlvbisrOwogICAgICB9CiAgICAgIGxhc3RUb2tlbiA9IHNyYy5zdWJzdHJpbmcobGFzdFBvc2l0aW9uLCBwb3NpdGlvbik7CiAgICB9IGVsc2UgewogICAgICAvLyBBbGwgb3RoZXIgdG9rZW5zIGhhbmRsZWQgaGVyZS4KICAgICAgaW50IGNhdCA9IGNhdGVnb3J5KHNyYy5jb2RlVW5pdEF0KHBvc2l0aW9uKSk7CiAgICAgIGludCBuZXdDYXQ7CiAgICAgIGRvIHsKICAgICAgICBwb3NpdGlvbisrOwogICAgICAgIGlmIChwb3NpdGlvbiA9PSBzcmMubGVuZ3RoKSBicmVhazsKICAgICAgICBpbnQgY29kZSA9IHNyYy5jb2RlVW5pdEF0KHBvc2l0aW9uKTsKICAgICAgICAvLyBTcGVjaWFsIGNvZGUgdG8gZGlzYWxsb3cgISwgfiBhbmQgLyBpbiBub24tZmlyc3QgcG9zaXRpb24gaW4gdG9rZW4sCiAgICAgICAgLy8gc28gdGhhdCAhISBhbmQgfn4gcGFyc2UgYXMgdHdvIHRva2VucyBhbmQgIT0gcGFyc2VzIGFzIG9uZSwgd2hpbGUgPS8KICAgICAgICAvLyBwYXJzZXMgYXMgYSBhbiBlcXVhbHMgdG9rZW4gZm9sbG93ZWQgYnkgYSByZWdleHAgbGl0ZXJhbCBzdGFydC4KICAgICAgICBuZXdDYXQgPSAoY29kZSA9PSBjaGFyQ29kZXMuJEJBTkcgfHwKICAgICAgICAgICAgICAgIGNvZGUgPT0gY2hhckNvZGVzLiRTTEFTSCB8fAogICAgICAgICAgICAgICAgY29kZSA9PSBjaGFyQ29kZXMuJFRJTERFKQogICAgICAgICAgICA/IE5PTkUKICAgICAgICAgICAgOiBjYXRlZ29yeShjb2RlKTsKICAgICAgfSB3aGlsZSAoIXNpbmdsZUNoYXJDYXRlZ29yeShjYXQpICYmCiAgICAgICAgICAoY2F0ID09IG5ld0NhdCB8fAogICAgICAgICAgICAgIChjYXQgPT0gQUxQSEEgJiYgbmV3Q2F0ID09IE5VTUVSSUMpIHx8IC8vIGVnLiBsZXZlbDQyLgogICAgICAgICAgICAgIChjYXQgPT0gTlVNRVJJQyAmJiBuZXdDYXQgPT0gRE9UKSkpOyAvLyBlZy4gMy4xNDE1CiAgICAgIGxhc3RDYXRlZ29yeSA9IGNhdDsKICAgICAgbGFzdFRva2VuID0gc3JjLnN1YnN0cmluZyhsYXN0UG9zaXRpb24sIHBvc2l0aW9uKTsKICAgICAgaWYgKGNhdCA9PSBOVU1FUklDKSB7CiAgICAgICAgaWYgKGRvdWJsZS50cnlQYXJzZShsYXN0VG9rZW4pID09IG51bGwpIHsKICAgICAgICAgIGVycm9yKCJVbnBhcnNlYWJsZSBudW1iZXIiKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY2F0ID09IFNZTUJPTCkgewogICAgICAgIGludCBiaW5hcnlQcmVjZW5kZW5jZSA9IEJJTkFSWV9QUkVDRURFTkNFW2xhc3RUb2tlbl07CiAgICAgICAgaWYgKGJpbmFyeVByZWNlbmRlbmNlID09IG51bGwgJiYgIVVOQVJZX09QRVJBVE9SUy5jb250YWlucyhsYXN0VG9rZW4pKSB7CiAgICAgICAgICBlcnJvcigiVW5rbm93biBvcGVyYXRvciIpOwogICAgICAgIH0KICAgICAgICBpZiAoaXNBc3NpZ25tZW50KGxhc3RUb2tlbikpIGxhc3RDYXRlZ29yeSA9IEFTU0lHTk1FTlQ7CiAgICAgIH0gZWxzZSBpZiAoY2F0ID09IEFMUEhBKSB7CiAgICAgICAgaWYgKE9QRVJBVE9SU19USEFUX0xPT0tfTElLRV9JREVOVElGSUVSUy5jb250YWlucyhsYXN0VG9rZW4pKSB7CiAgICAgICAgICBsYXN0Q2F0ZWdvcnkgPSBTWU1CT0w7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIGV4cGVjdENhdGVnb3J5KGludCBjYXQpIHsKICAgIGlmIChjYXQgIT0gbGFzdENhdGVnb3J5KSBlcnJvcigiRXhwZWN0ZWQgJHtjYXRlZ29yeVRvU3RyaW5nKGNhdCl9Iik7CiAgICBnZXRUb2tlbigpOwogIH0KCiAgYm9vbCBhY2NlcHRDYXRlZ29yeShpbnQgY2F0KSB7CiAgICBpZiAoY2F0ID09IGxhc3RDYXRlZ29yeSkgewogICAgICBnZXRUb2tlbigpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgZXhwZWN0U2VtaWNvbG9uKCkgewogICAgaWYgKGFjY2VwdFNlbWljb2xvbigpKSByZXR1cm47CiAgICBlcnJvcignRXhwZWN0ZWQgU0VNSUNPTE9OJyk7CiAgfQoKICBib29sIGFjY2VwdFNlbWljb2xvbigpIHsKICAgIC8vIEFjY2VwdCBzZW1pY29sb24gb3IgYXV0b21hdGljYWxseSBpbnNlcnRlZCBzZW1pY29sb24gYmVmb3JlIGNsb3NlIGJyYWNlLgogICAgLy8gTWluaXBhcnNlciBmb3JiaWRzIG90aGVyIGtpbmRzIG9mIHNlbWljb2xvbiBpbnNlcnRpb24uCiAgICBpZiAoUkJSQUNFID09IGxhc3RDYXRlZ29yeSkgcmV0dXJuIHRydWU7CiAgICBpZiAoTk9ORSA9PSBsYXN0Q2F0ZWdvcnkpIHJldHVybiB0cnVlOyAvLyBlbmQgb2YgaW5wdXQKICAgIGlmIChza2lwcGVkTmV3bGluZSkgewogICAgICBlcnJvcignTm8gYXV0b21hdGljIHNlbWljb2xvbiBpbnNlcnRpb24gYXQgcHJlY2VkaW5nIG5ld2xpbmUnKTsKICAgIH0KICAgIHJldHVybiBhY2NlcHRDYXRlZ29yeShTRU1JQ09MT04pOwogIH0KCiAgYm9vbCBhY2NlcHRTdHJpbmcoU3RyaW5nIHN0cmluZykgewogICAgaWYgKGxhc3RUb2tlbiA9PSBzdHJpbmcpIHsKICAgICAgZ2V0VG9rZW4oKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICB2b2lkIGVycm9yKG1lc3NhZ2UpIHsKICAgIHRocm93IG5ldyBNaW5pSnNQYXJzZXJFcnJvcih0aGlzLCBtZXNzYWdlKTsKICB9CgogIC8vLyBSZXR1cm5zIGVpdGhlciB0aGUgbmFtZSBmb3IgdGhlIGhvbGUsIG9yIGl0cyBpbnRlZ2VyIHBvc2l0aW9uLgogIHBhcnNlSGFzaCgpIHsKICAgIFN0cmluZyBob2xlTmFtZSA9IGxhc3RUb2tlbjsKICAgIGlmIChhY2NlcHRDYXRlZ29yeShBTFBIQSkpIHsKICAgICAgLy8gTmFtZWQgaG9sZS4gRXhhbXBsZTogJ2Z1bmN0aW9uICNmdW5OYW1lKCkgeyAuLi4gfScKICAgICAgaWYgKGhhc1Bvc2l0aW9uYWxIb2xlcykgewogICAgICAgIGVycm9yKCdIb2xlcyBtdXN0IGFsbCBiZSBwb3NpdGlvbmFsIG9yIG5hbWVkLiAkaG9sZU5hbWUnKTsKICAgICAgfQogICAgICByZXR1cm4gaG9sZU5hbWU7CiAgICB9IGVsc2UgewogICAgICBpZiAoaGFzTmFtZWRIb2xlcykgewogICAgICAgIGVycm9yKCdIb2xlcyBtdXN0IGFsbCBiZSBwb3NpdGlvbmFsIG9yIG5hbWVkLiAkaG9sZU5hbWUnKTsKICAgICAgfQogICAgICBpbnQgcG9zaXRpb24gPSBpbnRlcnBvbGF0ZWRWYWx1ZXMubGVuZ3RoOwogICAgICByZXR1cm4gcG9zaXRpb247CiAgICB9CiAgfQoKICBFeHByZXNzaW9uIHBhcnNlUHJpbWFyeSgpIHsKICAgIFN0cmluZyBsYXN0ID0gbGFzdFRva2VuOwogICAgaWYgKGFjY2VwdENhdGVnb3J5KEFMUEhBKSkgewogICAgICBpZiAobGFzdCA9PSAidHJ1ZSIpIHsKICAgICAgICByZXR1cm4gbmV3IExpdGVyYWxCb29sKHRydWUpOwogICAgICB9IGVsc2UgaWYgKGxhc3QgPT0gImZhbHNlIikgewogICAgICAgIHJldHVybiBuZXcgTGl0ZXJhbEJvb2woZmFsc2UpOwogICAgICB9IGVsc2UgaWYgKGxhc3QgPT0gIm51bGwiKSB7CiAgICAgICAgcmV0dXJuIG5ldyBMaXRlcmFsTnVsbCgpOwogICAgICB9IGVsc2UgaWYgKGxhc3QgPT0gImZ1bmN0aW9uIikgewogICAgICAgIHJldHVybiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpOwogICAgICB9IGVsc2UgaWYgKGxhc3QgPT0gInRoaXMiKSB7CiAgICAgICAgcmV0dXJuIG5ldyBUaGlzKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG5ldyBWYXJpYWJsZVVzZShsYXN0KTsKICAgICAgfQogICAgfSBlbHNlIGlmIChhY2NlcHRDYXRlZ29yeShMUEFSRU4pKSB7CiAgICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbigpOwogICAgICBleHBlY3RDYXRlZ29yeShSUEFSRU4pOwogICAgICByZXR1cm4gZXhwcmVzc2lvbjsKICAgIH0gZWxzZSBpZiAoYWNjZXB0Q2F0ZWdvcnkoU1RSSU5HKSkgewogICAgICByZXR1cm4gbmV3IExpdGVyYWxTdHJpbmcobGFzdCk7CiAgICB9IGVsc2UgaWYgKGFjY2VwdENhdGVnb3J5KE5VTUVSSUMpKSB7CiAgICAgIHJldHVybiBuZXcgTGl0ZXJhbE51bWJlcihsYXN0KTsKICAgIH0gZWxzZSBpZiAoYWNjZXB0Q2F0ZWdvcnkoTEJSQUNFKSkgewogICAgICByZXR1cm4gcGFyc2VPYmplY3RJbml0aWFsaXplcigpOwogICAgfSBlbHNlIGlmIChhY2NlcHRDYXRlZ29yeShMU1FVQVJFKSkgewogICAgICB2YXIgdmFsdWVzID0gPEV4cHJlc3Npb24+W107CgogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGlmIChhY2NlcHRDYXRlZ29yeShDT01NQSkpIHsKICAgICAgICAgIHZhbHVlcy5hZGQobmV3IEFycmF5SG9sZSgpKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoUlNRVUFSRSkpIGJyZWFrOwogICAgICAgIHZhbHVlcy5hZGQocGFyc2VBc3NpZ25tZW50KCkpOwogICAgICAgIGlmIChhY2NlcHRDYXRlZ29yeShSU1FVQVJFKSkgYnJlYWs7CiAgICAgICAgZXhwZWN0Q2F0ZWdvcnkoQ09NTUEpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgQXJyYXlJbml0aWFsaXplcih2YWx1ZXMpOwogICAgfSBlbHNlIGlmIChsYXN0ICE9IG51bGwgJiYgbGFzdC5zdGFydHNXaXRoKCIvIikpIHsKICAgICAgU3RyaW5nIHJlZ2V4cCA9IGdldERlbGltaXRlZChsYXN0UG9zaXRpb24pOwogICAgICBnZXRUb2tlbigpOwogICAgICBTdHJpbmcgZmxhZ3MgPSBsYXN0VG9rZW47CiAgICAgIGlmICghYWNjZXB0Q2F0ZWdvcnkoQUxQSEEpKSBmbGFncyA9ICIiOwogICAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBuZXcgUmVnRXhwTGl0ZXJhbChyZWdleHAgKyBmbGFncyk7CiAgICAgIHJldHVybiBleHByZXNzaW9uOwogICAgfSBlbHNlIGlmIChhY2NlcHRDYXRlZ29yeShIQVNIKSkgewogICAgICB2YXIgbmFtZU9yUG9zaXRpb24gPSBwYXJzZUhhc2goKTsKICAgICAgSW50ZXJwb2xhdGVkRXhwcmVzc2lvbiBleHByZXNzaW9uID0KICAgICAgICAgIG5ldyBJbnRlcnBvbGF0ZWRFeHByZXNzaW9uKG5hbWVPclBvc2l0aW9uKTsKICAgICAgaW50ZXJwb2xhdGVkVmFsdWVzLmFkZChleHByZXNzaW9uKTsKICAgICAgcmV0dXJuIGV4cHJlc3Npb247CiAgICB9IGVsc2UgewogICAgICBlcnJvcigiRXhwZWN0ZWQgcHJpbWFyeSBleHByZXNzaW9uIik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZUZ1bmN0aW9uRXhwcmVzc2lvbigpIHsKICAgIGlmIChsYXN0Q2F0ZWdvcnkgPT0gQUxQSEEgfHwgbGFzdENhdGVnb3J5ID09IEhBU0gpIHsKICAgICAgRGVjbGFyYXRpb24gbmFtZSA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgICByZXR1cm4gbmV3IE5hbWVkRnVuY3Rpb24obmFtZSwgcGFyc2VGdW4oKSk7CiAgICB9CiAgICByZXR1cm4gcGFyc2VGdW4oKTsKICB9CgogIEV4cHJlc3Npb24gcGFyc2VGdW4oKSB7CiAgICBMaXN0PFBhcmFtZXRlcj4gcGFyYW1zID0gPFBhcmFtZXRlcj5bXTsKCiAgICBleHBlY3RDYXRlZ29yeShMUEFSRU4pOwogICAgaWYgKCFhY2NlcHRDYXRlZ29yeShSUEFSRU4pKSB7CiAgICAgIGZvciAoOzspIHsKICAgICAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoSEFTSCkpIHsKICAgICAgICAgIHZhciBuYW1lT3JQb3NpdGlvbiA9IHBhcnNlSGFzaCgpOwogICAgICAgICAgSW50ZXJwb2xhdGVkUGFyYW1ldGVyIHBhcmFtZXRlciA9CiAgICAgICAgICAgICAgbmV3IEludGVycG9sYXRlZFBhcmFtZXRlcihuYW1lT3JQb3NpdGlvbik7CiAgICAgICAgICBpbnRlcnBvbGF0ZWRWYWx1ZXMuYWRkKHBhcmFtZXRlcik7CiAgICAgICAgICBwYXJhbXMuYWRkKHBhcmFtZXRlcik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIFN0cmluZyBhcmd1bWVudE5hbWUgPSBsYXN0VG9rZW47CiAgICAgICAgICBleHBlY3RDYXRlZ29yeShBTFBIQSk7CiAgICAgICAgICBwYXJhbXMuYWRkKG5ldyBQYXJhbWV0ZXIoYXJndW1lbnROYW1lKSk7CiAgICAgICAgfQogICAgICAgIGlmIChhY2NlcHRDYXRlZ29yeShDT01NQSkpIGNvbnRpbnVlOwogICAgICAgIGV4cGVjdENhdGVnb3J5KFJQQVJFTik7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIEFzeW5jTW9kaWZpZXIgYXN5bmNNb2RpZmllcjsKICAgIGlmIChhY2NlcHRTdHJpbmcoJ2FzeW5jJykpIHsKICAgICAgaWYgKGFjY2VwdFN0cmluZygnKicpKSB7CiAgICAgICAgYXN5bmNNb2RpZmllciA9IEFzeW5jTW9kaWZpZXIuYXN5bmNTdGFyOwogICAgICB9IGVsc2UgewogICAgICAgIGFzeW5jTW9kaWZpZXIgPSBBc3luY01vZGlmaWVyLmFzeW5jOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGFjY2VwdFN0cmluZygnc3luYycpKSB7CiAgICAgIGlmICghYWNjZXB0U3RyaW5nKCcqJykpIGVycm9yKCJPbmx5IHN5bmMqIGlzIHZhbGlkIC0gc3luYyBpcyBpbXBsaWVkIik7CiAgICAgIGFzeW5jTW9kaWZpZXIgPSBBc3luY01vZGlmaWVyLnN5bmNTdGFyOwogICAgfSBlbHNlIHsKICAgICAgYXN5bmNNb2RpZmllciA9IEFzeW5jTW9kaWZpZXIuc3luYzsKICAgIH0KICAgIGV4cGVjdENhdGVnb3J5KExCUkFDRSk7CiAgICBCbG9jayBibG9jayA9IHBhcnNlQmxvY2soKTsKICAgIHJldHVybiBuZXcgRnVuKHBhcmFtcywgYmxvY2ssIGFzeW5jTW9kaWZpZXI6IGFzeW5jTW9kaWZpZXIpOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZU9iamVjdEluaXRpYWxpemVyKCkgewogICAgTGlzdDxQcm9wZXJ0eT4gcHJvcGVydGllcyA9IDxQcm9wZXJ0eT5bXTsKICAgIGZvciAoOzspIHsKICAgICAgaWYgKGFjY2VwdENhdGVnb3J5KFJCUkFDRSkpIGJyZWFrOwogICAgICAvLyBMaW1pdGVkIHN1YnNldDoga2V5cyBhcmUgaWRlbnRpZmllcnMsIG5vICdnZXQnIG9yICdzZXQnIHByb3BlcnRpZXMuCiAgICAgIExpdGVyYWwgcHJvcGVydHlOYW1lOwogICAgICBTdHJpbmcgaWRlbnRpZmllciA9IGxhc3RUb2tlbjsKICAgICAgaWYgKGFjY2VwdENhdGVnb3J5KEFMUEhBKSkgewogICAgICAgIHByb3BlcnR5TmFtZSA9IG5ldyBMaXRlcmFsU3RyaW5nKCciJGlkZW50aWZpZXIiJyk7CiAgICAgIH0gZWxzZSBpZiAoYWNjZXB0Q2F0ZWdvcnkoU1RSSU5HKSkgewogICAgICAgIHByb3BlcnR5TmFtZSA9IG5ldyBMaXRlcmFsU3RyaW5nKGlkZW50aWZpZXIpOwogICAgICB9IGVsc2UgaWYgKGFjY2VwdENhdGVnb3J5KFNZTUJPTCkpIHsKICAgICAgICAvLyBlLmcuIHZvaWQKICAgICAgICBwcm9wZXJ0eU5hbWUgPSBuZXcgTGl0ZXJhbFN0cmluZygnIiRpZGVudGlmaWVyIicpOwogICAgICB9IGVsc2UgaWYgKGFjY2VwdENhdGVnb3J5KEhBU0gpKSB7CiAgICAgICAgdmFyIG5hbWVPclBvc2l0aW9uID0gcGFyc2VIYXNoKCk7CiAgICAgICAgSW50ZXJwb2xhdGVkTGl0ZXJhbCBpbnRlcnBvbGF0ZWRMaXRlcmFsID0KICAgICAgICAgICAgbmV3IEludGVycG9sYXRlZExpdGVyYWwobmFtZU9yUG9zaXRpb24pOwogICAgICAgIGludGVycG9sYXRlZFZhbHVlcy5hZGQoaW50ZXJwb2xhdGVkTGl0ZXJhbCk7CiAgICAgICAgcHJvcGVydHlOYW1lID0gaW50ZXJwb2xhdGVkTGl0ZXJhbDsKICAgICAgfSBlbHNlIHsKICAgICAgICBlcnJvcignRXhwZWN0ZWQgcHJvcGVydHkgbmFtZScpOwogICAgICB9CiAgICAgIGV4cGVjdENhdGVnb3J5KENPTE9OKTsKICAgICAgRXhwcmVzc2lvbiB2YWx1ZSA9IHBhcnNlQXNzaWdubWVudCgpOwogICAgICBwcm9wZXJ0aWVzLmFkZChuZXcgUHJvcGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSkpOwogICAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoUkJSQUNFKSkgYnJlYWs7CiAgICAgIGV4cGVjdENhdGVnb3J5KENPTU1BKTsKICAgIH0KICAgIHJldHVybiBuZXcgT2JqZWN0SW5pdGlhbGl6ZXIocHJvcGVydGllcyk7CiAgfQoKICBFeHByZXNzaW9uIHBhcnNlTWVtYmVyKCkgewogICAgRXhwcmVzc2lvbiByZWNlaXZlciA9IHBhcnNlUHJpbWFyeSgpOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKGFjY2VwdENhdGVnb3J5KERPVCkpIHsKICAgICAgICByZWNlaXZlciA9IGdldERvdFJocyhyZWNlaXZlcik7CiAgICAgIH0gZWxzZSBpZiAoYWNjZXB0Q2F0ZWdvcnkoTFNRVUFSRSkpIHsKICAgICAgICBFeHByZXNzaW9uIGluQnJhY2VzID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICAgICAgZXhwZWN0Q2F0ZWdvcnkoUlNRVUFSRSk7CiAgICAgICAgcmVjZWl2ZXIgPSBuZXcgUHJvcGVydHlBY2Nlc3MocmVjZWl2ZXIsIGluQnJhY2VzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlY2VpdmVyOwogIH0KCiAgRXhwcmVzc2lvbiBwYXJzZUNhbGwoKSB7CiAgICBib29sIGNvbnN0cnVjdG9yID0gYWNjZXB0U3RyaW5nKCJuZXciKTsKICAgIEV4cHJlc3Npb24gcmVjZWl2ZXIgPSBwYXJzZU1lbWJlcigpOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgaWYgKGFjY2VwdENhdGVnb3J5KExQQVJFTikpIHsKICAgICAgICBmaW5hbCBhcmd1bWVudHMgPSA8RXhwcmVzc2lvbj5bXTsKICAgICAgICBpZiAoIWFjY2VwdENhdGVnb3J5KFJQQVJFTikpIHsKICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgIEV4cHJlc3Npb24gYXJndW1lbnQgPSBwYXJzZUFzc2lnbm1lbnQoKTsKICAgICAgICAgICAgYXJndW1lbnRzLmFkZChhcmd1bWVudCk7CiAgICAgICAgICAgIGlmIChhY2NlcHRDYXRlZ29yeShSUEFSRU4pKSBicmVhazsKICAgICAgICAgICAgZXhwZWN0Q2F0ZWdvcnkoQ09NTUEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZWNlaXZlciA9IGNvbnN0cnVjdG9yCiAgICAgICAgICAgID8gbmV3IE5ldyhyZWNlaXZlciwgYXJndW1lbnRzKQogICAgICAgICAgICA6IG5ldyBDYWxsKHJlY2VpdmVyLCBhcmd1bWVudHMpOwogICAgICAgIGNvbnN0cnVjdG9yID0gZmFsc2U7CiAgICAgIH0gZWxzZSBpZiAoIWNvbnN0cnVjdG9yICYmIGFjY2VwdENhdGVnb3J5KExTUVVBUkUpKSB7CiAgICAgICAgRXhwcmVzc2lvbiBpbkJyYWNlcyA9IHBhcnNlRXhwcmVzc2lvbigpOwogICAgICAgIGV4cGVjdENhdGVnb3J5KFJTUVVBUkUpOwogICAgICAgIHJlY2VpdmVyID0gbmV3IFByb3BlcnR5QWNjZXNzKHJlY2VpdmVyLCBpbkJyYWNlcyk7CiAgICAgIH0gZWxzZSBpZiAoIWNvbnN0cnVjdG9yICYmIGFjY2VwdENhdGVnb3J5KERPVCkpIHsKICAgICAgICByZWNlaXZlciA9IGdldERvdFJocyhyZWNlaXZlcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gSlMgYWxsb3dzIG5ldyB3aXRob3V0ICgpLCBidXQgd2UgZG9uJ3QuCiAgICAgICAgaWYgKGNvbnN0cnVjdG9yKSBlcnJvcigiUGFyZW50aGVzZXMgYXJlIHJlcXVpcmVkIGZvciBuZXciKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlY2VpdmVyOwogIH0KCiAgRXhwcmVzc2lvbiBnZXREb3RSaHMoRXhwcmVzc2lvbiByZWNlaXZlcikgewogICAgaWYgKGFjY2VwdENhdGVnb3J5KEhBU0gpKSB7CiAgICAgIHZhciBuYW1lT3JQb3NpdGlvbiA9IHBhcnNlSGFzaCgpOwogICAgICBJbnRlcnBvbGF0ZWRTZWxlY3RvciBwcm9wZXJ0eSA9IG5ldyBJbnRlcnBvbGF0ZWRTZWxlY3RvcihuYW1lT3JQb3NpdGlvbik7CiAgICAgIGludGVycG9sYXRlZFZhbHVlcy5hZGQocHJvcGVydHkpOwogICAgICByZXR1cm4gbmV3IFByb3BlcnR5QWNjZXNzKHJlY2VpdmVyLCBwcm9wZXJ0eSk7CiAgICB9CiAgICBTdHJpbmcgaWRlbnRpZmllciA9IGxhc3RUb2tlbjsKICAgIC8vIEluIEVTNSBrZXl3b3JkcyBsaWtlIGRlbGV0ZSBhbmQgY29udGludWUgYXJlIGFsbG93ZWQgYXMgcHJvcGVydHkKICAgIC8vIG5hbWVzLCBhbmQgdGhlIEluZGV4ZWREQiBBUEkgdXNlcyB0aGF0LCBzbyB3ZSBuZWVkIHRvIGFsbG93IGl0IGhlcmUuCiAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoU1lNQk9MKSkgewogICAgICBpZiAoIU9QRVJBVE9SU19USEFUX0xPT0tfTElLRV9JREVOVElGSUVSUy5jb250YWlucyhpZGVudGlmaWVyKSkgewogICAgICAgIGVycm9yKCJFeHBlY3RlZCBhbHBoYW51bWVyaWMgaWRlbnRpZmllciIpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBleHBlY3RDYXRlZ29yeShBTFBIQSk7CiAgICB9CiAgICByZXR1cm4gbmV3IFByb3BlcnR5QWNjZXNzLmZpZWxkKHJlY2VpdmVyLCBpZGVudGlmaWVyKTsKICB9CgogIEV4cHJlc3Npb24gcGFyc2VQb3N0Zml4KCkgewogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VDYWxsKCk7CiAgICBTdHJpbmcgb3BlcmF0b3IgPSBsYXN0VG9rZW47CiAgICAvLyBKYXZhU2NyaXB0IGdyYW1tYXIgaXM6CiAgICAvLyAgICAgTGVmdEhhbmRTaWRlRXhwcmVzc2lvbiBbbm8gTGluZVRlcm1pbmF0b3IgaGVyZV0gKysKICAgIGlmIChsYXN0Q2F0ZWdvcnkgPT0gU1lNQk9MICYmCiAgICAgICAgIXNraXBwZWROZXdsaW5lICYmCiAgICAgICAgKGFjY2VwdFN0cmluZygiKysiKSB8fCBhY2NlcHRTdHJpbmcoIi0tIikpKSB7CiAgICAgIHJldHVybiBuZXcgUG9zdGZpeChvcGVyYXRvciwgZXhwcmVzc2lvbik7CiAgICB9CiAgICAvLyBJZiB3ZSBkb24ndCBhY2NlcHQgJysrJyBvciAnLS0nIGR1ZSB0byBza2lwcGVkTmV3bGluZSBhIG5ld2xpbmUsIG5vIG90aGVyCiAgICAvLyBwYXJ0IG9mIHRoZSBwYXJzZXIgd2lsbCBhY2NlcHQgdGhlIHRva2VuIGFuZCB3ZSB3aWxsIGdldCBhbiBlcnJvciBhdCB0aGUKICAgIC8vIHdob2xlIGV4cHJlc3Npb24gbGV2ZWwuCiAgICByZXR1cm4gZXhwcmVzc2lvbjsKICB9CgogIEV4cHJlc3Npb24gcGFyc2VVbmFyeUhpZ2goKSB7CiAgICBTdHJpbmcgb3BlcmF0b3IgPSBsYXN0VG9rZW47CiAgICBpZiAobGFzdENhdGVnb3J5ID09IFNZTUJPTCAmJgogICAgICAgIFVOQVJZX09QRVJBVE9SUy5jb250YWlucyhvcGVyYXRvcikgJiYKICAgICAgICAoYWNjZXB0U3RyaW5nKCIrKyIpIHx8IGFjY2VwdFN0cmluZygiLS0iKSB8fCBhY2NlcHRTdHJpbmcoJ2F3YWl0JykpKSB7CiAgICAgIGlmIChvcGVyYXRvciA9PSAiYXdhaXQiKSByZXR1cm4gbmV3IEF3YWl0KHBhcnNlUG9zdGZpeCgpKTsKICAgICAgcmV0dXJuIG5ldyBQcmVmaXgob3BlcmF0b3IsIHBhcnNlUG9zdGZpeCgpKTsKICAgIH0KICAgIHJldHVybiBwYXJzZVBvc3RmaXgoKTsKICB9CgogIEV4cHJlc3Npb24gcGFyc2VVbmFyeUxvdygpIHsKICAgIFN0cmluZyBvcGVyYXRvciA9IGxhc3RUb2tlbjsKICAgIGlmIChsYXN0Q2F0ZWdvcnkgPT0gU1lNQk9MICYmCiAgICAgICAgVU5BUllfT1BFUkFUT1JTLmNvbnRhaW5zKG9wZXJhdG9yKSAmJgogICAgICAgIG9wZXJhdG9yICE9ICIrKyIgJiYKICAgICAgICBvcGVyYXRvciAhPSAiLS0iKSB7CiAgICAgIGV4cGVjdENhdGVnb3J5KFNZTUJPTCk7CiAgICAgIGlmIChvcGVyYXRvciA9PSAiYXdhaXQiKSByZXR1cm4gbmV3IEF3YWl0KHBhcnNlUG9zdGZpeCgpKTsKICAgICAgcmV0dXJuIG5ldyBQcmVmaXgob3BlcmF0b3IsIHBhcnNlVW5hcnlMb3coKSk7CiAgICB9CiAgICByZXR1cm4gcGFyc2VVbmFyeUhpZ2goKTsKICB9CgogIEV4cHJlc3Npb24gcGFyc2VCaW5hcnkoaW50IG1heFByZWNlZGVuY2UpIHsKICAgIEV4cHJlc3Npb24gbGhzID0gcGFyc2VVbmFyeUxvdygpOwogICAgaW50IG1pblByZWNlZGVuY2U7CiAgICBTdHJpbmcgbGFzdFN5bWJvbDsKICAgIEV4cHJlc3Npb24gcmhzOyAvLyBUaGlzIGlzIG51bGwgZmlyc3QgdGltZSBhcm91bmQuCiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBTdHJpbmcgc3ltYm9sID0gbGFzdFRva2VuOwogICAgICBpZiAobGFzdENhdGVnb3J5ICE9IFNZTUJPTCB8fAogICAgICAgICAgIUJJTkFSWV9QUkVDRURFTkNFLmNvbnRhaW5zS2V5KHN5bWJvbCkgfHwKICAgICAgICAgIEJJTkFSWV9QUkVDRURFTkNFW3N5bWJvbF0gPiBtYXhQcmVjZWRlbmNlKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZXhwZWN0Q2F0ZWdvcnkoU1lNQk9MKTsKICAgICAgaWYgKHJocyA9PSBudWxsIHx8IEJJTkFSWV9QUkVDRURFTkNFW3N5bWJvbF0gPj0gbWluUHJlY2VkZW5jZSkgewogICAgICAgIGlmIChyaHMgIT0gbnVsbCkgbGhzID0gbmV3IEJpbmFyeShsYXN0U3ltYm9sLCBsaHMsIHJocyk7CiAgICAgICAgbWluUHJlY2VkZW5jZSA9IEJJTkFSWV9QUkVDRURFTkNFW3N5bWJvbF07CiAgICAgICAgcmhzID0gcGFyc2VVbmFyeUxvdygpOwogICAgICAgIGxhc3RTeW1ib2wgPSBzeW1ib2w7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgRXhwcmVzc2lvbiBoaWdoZXIgPSBwYXJzZUJpbmFyeShCSU5BUllfUFJFQ0VERU5DRVtzeW1ib2xdKTsKICAgICAgICByaHMgPSBuZXcgQmluYXJ5KHN5bWJvbCwgcmhzLCBoaWdoZXIpOwogICAgICB9CiAgICB9CiAgICBpZiAocmhzID09IG51bGwpIHJldHVybiBsaHM7CiAgICByZXR1cm4gbmV3IEJpbmFyeShsYXN0U3ltYm9sLCBsaHMsIHJocyk7CiAgfQoKICBFeHByZXNzaW9uIHBhcnNlQ29uZGl0aW9uYWwoKSB7CiAgICBFeHByZXNzaW9uIGxocyA9IHBhcnNlQmluYXJ5KEhJR0hFU1RfUEFSU0VfQklOQVJZX1BSRUNFREVOQ0UpOwogICAgaWYgKCFhY2NlcHRDYXRlZ29yeShRVUVSWSkpIHJldHVybiBsaHM7CiAgICBFeHByZXNzaW9uIGlmVHJ1ZSA9IHBhcnNlQXNzaWdubWVudCgpOwogICAgZXhwZWN0Q2F0ZWdvcnkoQ09MT04pOwogICAgRXhwcmVzc2lvbiBpZkZhbHNlID0gcGFyc2VBc3NpZ25tZW50KCk7CiAgICByZXR1cm4gbmV3IENvbmRpdGlvbmFsKGxocywgaWZUcnVlLCBpZkZhbHNlKTsKICB9CgogIEV4cHJlc3Npb24gcGFyc2VBc3NpZ25tZW50KCkgewogICAgRXhwcmVzc2lvbiBsaHMgPSBwYXJzZUNvbmRpdGlvbmFsKCk7CiAgICBTdHJpbmcgYXNzaWdubWVudE9wZXJhdG9yID0gbGFzdFRva2VuOwogICAgaWYgKGFjY2VwdENhdGVnb3J5KEFTU0lHTk1FTlQpKSB7CiAgICAgIEV4cHJlc3Npb24gcmhzID0gcGFyc2VBc3NpZ25tZW50KCk7CiAgICAgIGlmIChhc3NpZ25tZW50T3BlcmF0b3IgPT0gIj0iKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50KGxocywgcmhzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBIYW5kbGUgKz0sIC09LCBldGMuCiAgICAgICAgU3RyaW5nIG9wZXJhdG9yID0KICAgICAgICAgICAgYXNzaWdubWVudE9wZXJhdG9yLnN1YnN0cmluZygwLCBhc3NpZ25tZW50T3BlcmF0b3IubGVuZ3RoIC0gMSk7CiAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50LmNvbXBvdW5kKGxocywgb3BlcmF0b3IsIHJocyk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBsaHM7CiAgfQoKICBFeHByZXNzaW9uIHBhcnNlRXhwcmVzc2lvbigpIHsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlQXNzaWdubWVudCgpOwogICAgd2hpbGUgKGFjY2VwdENhdGVnb3J5KENPTU1BKSkgewogICAgICBFeHByZXNzaW9uIHJpZ2h0ID0gcGFyc2VBc3NpZ25tZW50KCk7CiAgICAgIGV4cHJlc3Npb24gPSBuZXcgQmluYXJ5KCcsJywgZXhwcmVzc2lvbiwgcmlnaHQpOwogICAgfQogICAgcmV0dXJuIGV4cHJlc3Npb247CiAgfQoKICBWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCkgewogICAgRGVjbGFyYXRpb24gZmlyc3RWYXJpYWJsZSA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgcmV0dXJuIGZpbmlzaFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGZpcnN0VmFyaWFibGUpOwogIH0KCiAgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QgZmluaXNoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoCiAgICAgIERlY2xhcmF0aW9uIGZpcnN0VmFyaWFibGUpIHsKICAgIHZhciBpbml0aWFsaXphdGlvbiA9IDxWYXJpYWJsZUluaXRpYWxpemF0aW9uPltdOwoKICAgIHZvaWQgZGVjbGFyZShEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbikgewogICAgICBFeHByZXNzaW9uIGluaXRpYWxpemVyID0gbnVsbDsKICAgICAgaWYgKGFjY2VwdFN0cmluZygiPSIpKSB7CiAgICAgICAgaW5pdGlhbGl6ZXIgPSBwYXJzZUFzc2lnbm1lbnQoKTsKICAgICAgfQogICAgICBpbml0aWFsaXphdGlvbi5hZGQobmV3IFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oZGVjbGFyYXRpb24sIGluaXRpYWxpemVyKSk7CiAgICB9CgogICAgZGVjbGFyZShmaXJzdFZhcmlhYmxlKTsKICAgIHdoaWxlIChhY2NlcHRDYXRlZ29yeShDT01NQSkpIHsKICAgICAgRGVjbGFyYXRpb24gdmFyaWFibGUgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oKTsKICAgICAgZGVjbGFyZSh2YXJpYWJsZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGluaXRpYWxpemF0aW9uKTsKICB9CgogIEV4cHJlc3Npb24gcGFyc2VWYXJEZWNsYXJhdGlvbk9yRXhwcmVzc2lvbigpIHsKICAgIGlmIChhY2NlcHRTdHJpbmcoInZhciIpKSB7CiAgICAgIHJldHVybiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gcGFyc2VFeHByZXNzaW9uKCk7CiAgICB9CiAgfQoKICBFeHByZXNzaW9uIGV4cHJlc3Npb24oKSB7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBwYXJzZVZhckRlY2xhcmF0aW9uT3JFeHByZXNzaW9uKCk7CiAgICBpZiAobGFzdENhdGVnb3J5ICE9IE5PTkUgfHwgcG9zaXRpb24gIT0gc3JjLmxlbmd0aCkgewogICAgICBlcnJvcigiVW5wYXJzZWQganVuazogJHtjYXRlZ29yeVRvU3RyaW5nKGxhc3RDYXRlZ29yeSl9Iik7CiAgICB9CiAgICByZXR1cm4gZXhwcmVzc2lvbjsKICB9CgogIFN0YXRlbWVudCBzdGF0ZW1lbnQoKSB7CiAgICBTdGF0ZW1lbnQgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoKTsKICAgIGlmIChsYXN0Q2F0ZWdvcnkgIT0gTk9ORSB8fCBwb3NpdGlvbiAhPSBzcmMubGVuZ3RoKSB7CiAgICAgIGVycm9yKCJVbnBhcnNlZCBqdW5rOiAke2NhdGVnb3J5VG9TdHJpbmcobGFzdENhdGVnb3J5KX0iKTsKICAgIH0KICAgIC8vIFRPRE8oc3JhKTogaW50ZXJwb2xhdGVkIGNhcHR1cmUgaGVyZT8KICAgIHJldHVybiBzdGF0ZW1lbnQ7CiAgfQoKICBCbG9jayBwYXJzZUJsb2NrKCkgewogICAgTGlzdDxTdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSA8U3RhdGVtZW50PltdOwoKICAgIHdoaWxlICghYWNjZXB0Q2F0ZWdvcnkoUkJSQUNFKSkgewogICAgICBTdGF0ZW1lbnQgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoKTsKICAgICAgc3RhdGVtZW50cy5hZGQoc3RhdGVtZW50KTsKICAgIH0KICAgIHJldHVybiBuZXcgQmxvY2soc3RhdGVtZW50cyk7CiAgfQoKICBTdGF0ZW1lbnQgcGFyc2VTdGF0ZW1lbnQoKSB7CiAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoTEJSQUNFKSkgcmV0dXJuIHBhcnNlQmxvY2soKTsKCiAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoU0VNSUNPTE9OKSkgcmV0dXJuIG5ldyBFbXB0eVN0YXRlbWVudCgpOwoKICAgIGlmIChsYXN0Q2F0ZWdvcnkgPT0gQUxQSEEpIHsKICAgICAgaWYgKGFjY2VwdFN0cmluZygncmV0dXJuJykpIHJldHVybiBwYXJzZVJldHVybigpOwoKICAgICAgaWYgKGFjY2VwdFN0cmluZygndGhyb3cnKSkgcmV0dXJuIHBhcnNlVGhyb3coKTsKCiAgICAgIGlmIChhY2NlcHRTdHJpbmcoJ2JyZWFrJykpIHsKICAgICAgICByZXR1cm4gcGFyc2VCcmVha09yQ29udGludWUoKGxhYmVsKSA9PiBuZXcgQnJlYWsobGFiZWwpKTsKICAgICAgfQoKICAgICAgaWYgKGFjY2VwdFN0cmluZygnY29udGludWUnKSkgewogICAgICAgIHJldHVybiBwYXJzZUJyZWFrT3JDb250aW51ZSgobGFiZWwpID0+IG5ldyBDb250aW51ZShsYWJlbCkpOwogICAgICB9CgogICAgICBpZiAoYWNjZXB0U3RyaW5nKCdpZicpKSByZXR1cm4gcGFyc2VJZlRoZW5FbHNlKCk7CgogICAgICBpZiAoYWNjZXB0U3RyaW5nKCdmb3InKSkgcmV0dXJuIHBhcnNlRm9yKCk7CgogICAgICBpZiAoYWNjZXB0U3RyaW5nKCdmdW5jdGlvbicpKSByZXR1cm4gcGFyc2VGdW5jdGlvbkRlY2xhcmF0aW9uKCk7CgogICAgICBpZiAoYWNjZXB0U3RyaW5nKCd0cnknKSkgcmV0dXJuIHBhcnNlVHJ5KCk7CgogICAgICBpZiAoYWNjZXB0U3RyaW5nKCd2YXInKSkgewogICAgICAgIEV4cHJlc3Npb24gZGVjbGFyYXRpb25zID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCgpOwogICAgICAgIGV4cGVjdFNlbWljb2xvbigpOwogICAgICAgIHJldHVybiBuZXcgRXhwcmVzc2lvblN0YXRlbWVudChkZWNsYXJhdGlvbnMpOwogICAgICB9CgogICAgICBpZiAoYWNjZXB0U3RyaW5nKCd3aGlsZScpKSByZXR1cm4gcGFyc2VXaGlsZSgpOwoKICAgICAgaWYgKGFjY2VwdFN0cmluZygnZG8nKSkgcmV0dXJuIHBhcnNlRG8oKTsKCiAgICAgIGlmIChhY2NlcHRTdHJpbmcoJ3N3aXRjaCcpKSByZXR1cm4gcGFyc2VTd2l0Y2goKTsKCiAgICAgIGlmIChsYXN0VG9rZW4gPT0gJ2Nhc2UnKSBlcnJvcigiQ2FzZSBvdXRzaWRlIHN3aXRjaC4iKTsKCiAgICAgIGlmIChsYXN0VG9rZW4gPT0gJ2RlZmF1bHQnKSBlcnJvcigiRGVmYXVsdCBvdXRzaWRlIHN3aXRjaC4iKTsKCiAgICAgIGlmIChsYXN0VG9rZW4gPT0gJ3lpZWxkJykgcmV0dXJuIHBhcnNlWWllbGQoKTsKCiAgICAgIGlmIChsYXN0VG9rZW4gPT0gJ3dpdGgnKSB7CiAgICAgICAgZXJyb3IoJ05vdCBpbXBsZW1lbnRlZCBpbiBtaW5pIHBhcnNlcicpOwogICAgICB9CiAgICB9CgogICAgYm9vbCBjaGVja0ZvckludGVycG9sYXRlZFN0YXRlbWVudCA9IGxhc3RDYXRlZ29yeSA9PSBIQVNIOwoKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbigpOwoKICAgIGlmIChleHByZXNzaW9uIGlzIFZhcmlhYmxlVXNlICYmIGFjY2VwdENhdGVnb3J5KENPTE9OKSkgewogICAgICByZXR1cm4gbmV3IExhYmVsZWRTdGF0ZW1lbnQoZXhwcmVzc2lvbi5uYW1lLCBwYXJzZVN0YXRlbWVudCgpKTsKICAgIH0KCiAgICBleHBlY3RTZW1pY29sb24oKTsKCiAgICBpZiAoY2hlY2tGb3JJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQpIHsKICAgICAgLy8gJ1Byb21vdGUnIHRoZSBpbnRlcnBvbGF0ZWQgZXhwcmVzc2lvbiBgIztgIHRvIGFuIGludGVycG9sYXRlZAogICAgICAvLyBzdGF0ZW1lbnQuCiAgICAgIGlmIChleHByZXNzaW9uIGlzIEludGVycG9sYXRlZEV4cHJlc3Npb24pIHsKICAgICAgICBhc3NlcnQoaWRlbnRpY2FsKGludGVycG9sYXRlZFZhbHVlcy5sYXN0LCBleHByZXNzaW9uKSk7CiAgICAgICAgSW50ZXJwb2xhdGVkU3RhdGVtZW50IHN0YXRlbWVudCA9CiAgICAgICAgICAgIG5ldyBJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQoZXhwcmVzc2lvbi5uYW1lT3JQb3NpdGlvbik7CiAgICAgICAgaW50ZXJwb2xhdGVkVmFsdWVzW2ludGVycG9sYXRlZFZhbHVlcy5sZW5ndGggLSAxXSA9IHN0YXRlbWVudDsKICAgICAgICByZXR1cm4gc3RhdGVtZW50OwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIG5ldyBFeHByZXNzaW9uU3RhdGVtZW50KGV4cHJlc3Npb24pOwogIH0KCiAgU3RhdGVtZW50IHBhcnNlUmV0dXJuKCkgewogICAgaWYgKGFjY2VwdFNlbWljb2xvbigpKSByZXR1cm4gbmV3IFJldHVybigpOwogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICBleHBlY3RTZW1pY29sb24oKTsKICAgIHJldHVybiBuZXcgUmV0dXJuKGV4cHJlc3Npb24pOwogIH0KCiAgU3RhdGVtZW50IHBhcnNlWWllbGQoKSB7CiAgICBib29sIGhhc1N0YXIgPSBhY2NlcHRTdHJpbmcoJyonKTsKICAgIEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHBhcnNlRXhwcmVzc2lvbigpOwogICAgZXhwZWN0U2VtaWNvbG9uKCk7CiAgICByZXR1cm4gbmV3IERhcnRZaWVsZChleHByZXNzaW9uLCBoYXNTdGFyKTsKICB9CgogIFN0YXRlbWVudCBwYXJzZVRocm93KCkgewogICAgaWYgKHNraXBwZWROZXdsaW5lKSBlcnJvcigndGhyb3cgZXhwcmVzc2lvbiBtdXN0IGJlIG9uIHNhbWUgbGluZScpOwogICAgRXhwcmVzc2lvbiBleHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICBleHBlY3RTZW1pY29sb24oKTsKICAgIHJldHVybiBuZXcgVGhyb3coZXhwcmVzc2lvbik7CiAgfQoKICBTdGF0ZW1lbnQgcGFyc2VCcmVha09yQ29udGludWUoY29uc3RydWN0b3IpIHsKICAgIHZhciBpZGVudGlmaWVyID0gbGFzdFRva2VuOwogICAgaWYgKCFza2lwcGVkTmV3bGluZSAmJiBhY2NlcHRDYXRlZ29yeShBTFBIQSkpIHsKICAgICAgZXhwZWN0U2VtaWNvbG9uKCk7CiAgICAgIHJldHVybiBjb25zdHJ1Y3RvcihpZGVudGlmaWVyKTsKICAgIH0KICAgIGV4cGVjdFNlbWljb2xvbigpOwogICAgcmV0dXJuIGNvbnN0cnVjdG9yKG51bGwpOwogIH0KCiAgU3RhdGVtZW50IHBhcnNlSWZUaGVuRWxzZSgpIHsKICAgIGV4cGVjdENhdGVnb3J5KExQQVJFTik7CiAgICBFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHBhcnNlRXhwcmVzc2lvbigpOwogICAgZXhwZWN0Q2F0ZWdvcnkoUlBBUkVOKTsKICAgIFN0YXRlbWVudCB0aGVuU3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1lbnQoKTsKICAgIGlmIChhY2NlcHRTdHJpbmcoJ2Vsc2UnKSkgewogICAgICAvLyBSZXNvbHZlcyBkYW5nbGluZyBlbHNlIGJ5IGJpbmRpbmcgJ2Vsc2UnIHRvIGNsb3Nlc3QgJ2lmJy4KICAgICAgU3RhdGVtZW50IGVsc2VTdGF0ZW1lbnQgPSBwYXJzZVN0YXRlbWVudCgpOwogICAgICByZXR1cm4gbmV3IElmKGNvbmRpdGlvbiwgdGhlblN0YXRlbWVudCwgZWxzZVN0YXRlbWVudCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IElmLm5vRWxzZShjb25kaXRpb24sIHRoZW5TdGF0ZW1lbnQpOwogICAgfQogIH0KCiAgU3RhdGVtZW50IHBhcnNlRm9yKCkgewogICAgLy8gRm9yLWluaXQtY29uZGl0aW9uLWluY3JlbWVudCBzdHlsZSBsb29wcyBhcmUgZnVsbHkgc3VwcG9ydGVkLgogICAgLy8KICAgIC8vIE9ubHkgb25lIGZvci1pbiB2YXJpYW50IGlzIGN1cnJlbnRseSBpbXBsZW1lbnRlZDoKICAgIC8vCiAgICAvLyAgICAgZm9yICh2YXIgdmFyaWFibGUgaW4gRXhwcmVzc2lvbikgU3RhdGVtZW50CiAgICAvLwogICAgU3RhdGVtZW50IGZpbmlzaEZvcihFeHByZXNzaW9uIGluaXQpIHsKICAgICAgRXhwcmVzc2lvbiBjb25kaXRpb24gPSBudWxsOwogICAgICBpZiAoIWFjY2VwdENhdGVnb3J5KFNFTUlDT0xPTikpIHsKICAgICAgICBjb25kaXRpb24gPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgICAgICBleHBlY3RDYXRlZ29yeShTRU1JQ09MT04pOwogICAgICB9CiAgICAgIEV4cHJlc3Npb24gdXBkYXRlID0gbnVsbDsKICAgICAgaWYgKCFhY2NlcHRDYXRlZ29yeShSUEFSRU4pKSB7CiAgICAgICAgdXBkYXRlID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICAgICAgZXhwZWN0Q2F0ZWdvcnkoUlBBUkVOKTsKICAgICAgfQogICAgICBTdGF0ZW1lbnQgYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7CiAgICAgIHJldHVybiBuZXcgRm9yKGluaXQsIGNvbmRpdGlvbiwgdXBkYXRlLCBib2R5KTsKICAgIH0KCiAgICBleHBlY3RDYXRlZ29yeShMUEFSRU4pOwogICAgaWYgKGFjY2VwdENhdGVnb3J5KFNFTUlDT0xPTikpIHsKICAgICAgcmV0dXJuIGZpbmlzaEZvcihudWxsKTsKICAgIH0KCiAgICBpZiAoYWNjZXB0U3RyaW5nKCd2YXInKSkgewogICAgICBEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiA9IHBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbigpOwogICAgICBpZiAoYWNjZXB0U3RyaW5nKCdpbicpKSB7CiAgICAgICAgRXhwcmVzc2lvbiBvYmplY3RFeHByZXNzaW9uID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICAgICAgZXhwZWN0Q2F0ZWdvcnkoUlBBUkVOKTsKICAgICAgICBTdGF0ZW1lbnQgYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7CiAgICAgICAgcmV0dXJuIG5ldyBGb3JJbigKICAgICAgICAgICAgbmV3IFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KAogICAgICAgICAgICAgICAgW25ldyBWYXJpYWJsZUluaXRpYWxpemF0aW9uKGRlY2xhcmF0aW9uLCBudWxsKV0pLAogICAgICAgICAgICBvYmplY3RFeHByZXNzaW9uLAogICAgICAgICAgICBib2R5KTsKICAgICAgfQogICAgICBFeHByZXNzaW9uIGRlY2xhcmF0aW9ucyA9IGZpbmlzaFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGRlY2xhcmF0aW9uKTsKICAgICAgZXhwZWN0Q2F0ZWdvcnkoU0VNSUNPTE9OKTsKICAgICAgcmV0dXJuIGZpbmlzaEZvcihkZWNsYXJhdGlvbnMpOwogICAgfQoKICAgIEV4cHJlc3Npb24gaW5pdCA9IHBhcnNlRXhwcmVzc2lvbigpOwogICAgZXhwZWN0Q2F0ZWdvcnkoU0VNSUNPTE9OKTsKICAgIHJldHVybiBmaW5pc2hGb3IoaW5pdCk7CiAgfQoKICBEZWNsYXJhdGlvbiBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oKSB7CiAgICBpZiAoYWNjZXB0Q2F0ZWdvcnkoSEFTSCkpIHsKICAgICAgdmFyIG5hbWVPclBvc2l0aW9uID0gcGFyc2VIYXNoKCk7CiAgICAgIEludGVycG9sYXRlZERlY2xhcmF0aW9uIGRlY2xhcmF0aW9uID0KICAgICAgICAgIG5ldyBJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbihuYW1lT3JQb3NpdGlvbik7CiAgICAgIGludGVycG9sYXRlZFZhbHVlcy5hZGQoZGVjbGFyYXRpb24pOwogICAgICByZXR1cm4gZGVjbGFyYXRpb247CiAgICB9IGVsc2UgewogICAgICBTdHJpbmcgdG9rZW4gPSBsYXN0VG9rZW47CiAgICAgIGV4cGVjdENhdGVnb3J5KEFMUEhBKTsKICAgICAgcmV0dXJuIG5ldyBWYXJpYWJsZURlY2xhcmF0aW9uKHRva2VuKTsKICAgIH0KICB9CgogIFN0YXRlbWVudCBwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb24oKSB7CiAgICBEZWNsYXJhdGlvbiBuYW1lID0gcGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uKCk7CiAgICBFeHByZXNzaW9uIGZ1biA9IHBhcnNlRnVuKCk7CiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uRGVjbGFyYXRpb24obmFtZSwgZnVuKTsKICB9CgogIFN0YXRlbWVudCBwYXJzZVRyeSgpIHsKICAgIGV4cGVjdENhdGVnb3J5KExCUkFDRSk7CiAgICBCbG9jayBib2R5ID0gcGFyc2VCbG9jaygpOwogICAgQ2F0Y2ggY2F0Y2hQYXJ0ID0gbnVsbDsKICAgIGlmIChhY2NlcHRTdHJpbmcoJ2NhdGNoJykpIGNhdGNoUGFydCA9IHBhcnNlQ2F0Y2goKTsKICAgIEJsb2NrIGZpbmFsbHlQYXJ0ID0gbnVsbDsKICAgIGlmIChhY2NlcHRTdHJpbmcoJ2ZpbmFsbHknKSkgewogICAgICBleHBlY3RDYXRlZ29yeShMQlJBQ0UpOwogICAgICBmaW5hbGx5UGFydCA9IHBhcnNlQmxvY2soKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChjYXRjaFBhcnQgPT0gbnVsbCkgZXJyb3IoImV4cGVjdGVkICdmaW5hbGx5JyIpOwogICAgfQogICAgcmV0dXJuIG5ldyBUcnkoYm9keSwgY2F0Y2hQYXJ0LCBmaW5hbGx5UGFydCk7CiAgfQoKICBTd2l0Y2hDbGF1c2UgcGFyc2VTd2l0Y2hDbGF1c2UoKSB7CiAgICBFeHByZXNzaW9uIGV4cHJlc3Npb24gPSBudWxsOwogICAgaWYgKGFjY2VwdFN0cmluZygnY2FzZScpKSB7CiAgICAgIGV4cHJlc3Npb24gPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgICAgZXhwZWN0Q2F0ZWdvcnkoQ09MT04pOwogICAgfSBlbHNlIHsKICAgICAgaWYgKCFhY2NlcHRTdHJpbmcoJ2RlZmF1bHQnKSkgewogICAgICAgIGVycm9yKCdleHBlY3RlZCBjYXNlIG9yIGRlZmF1bHQnKTsKICAgICAgfQogICAgICBleHBlY3RDYXRlZ29yeShDT0xPTik7CiAgICB9CiAgICBMaXN0IHN0YXRlbWVudHMgPSBuZXcgTGlzdDxTdGF0ZW1lbnQ+KCk7CiAgICB3aGlsZSAobGFzdENhdGVnb3J5ICE9IFJCUkFDRSAmJgogICAgICAgIGxhc3RUb2tlbiAhPSAnY2FzZScgJiYKICAgICAgICBsYXN0VG9rZW4gIT0gJ2RlZmF1bHQnKSB7CiAgICAgIHN0YXRlbWVudHMuYWRkKHBhcnNlU3RhdGVtZW50KCkpOwogICAgfQogICAgcmV0dXJuIGV4cHJlc3Npb24gPT0gbnVsbAogICAgICAgID8gbmV3IERlZmF1bHQobmV3IEJsb2NrKHN0YXRlbWVudHMpKQogICAgICAgIDogbmV3IENhc2UoZXhwcmVzc2lvbiwgbmV3IEJsb2NrKHN0YXRlbWVudHMpKTsKICB9CgogIFN0YXRlbWVudCBwYXJzZVdoaWxlKCkgewogICAgZXhwZWN0Q2F0ZWdvcnkoTFBBUkVOKTsKICAgIEV4cHJlc3Npb24gY29uZGl0aW9uID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICBleHBlY3RDYXRlZ29yeShSUEFSRU4pOwogICAgU3RhdGVtZW50IGJvZHkgPSBwYXJzZVN0YXRlbWVudCgpOwogICAgcmV0dXJuIG5ldyBXaGlsZShjb25kaXRpb24sIGJvZHkpOwogIH0KCiAgU3RhdGVtZW50IHBhcnNlRG8oKSB7CiAgICBTdGF0ZW1lbnQgYm9keSA9IHBhcnNlU3RhdGVtZW50KCk7CiAgICBpZiAobGFzdFRva2VuICE9ICJ3aGlsZSIpIGVycm9yKCJNaXNzaW5nIHdoaWxlIGFmdGVyIGRvIGJvZHkuIik7CiAgICBnZXRUb2tlbigpOwogICAgZXhwZWN0Q2F0ZWdvcnkoTFBBUkVOKTsKICAgIEV4cHJlc3Npb24gY29uZGl0aW9uID0gcGFyc2VFeHByZXNzaW9uKCk7CiAgICBleHBlY3RDYXRlZ29yeShSUEFSRU4pOwogICAgZXhwZWN0U2VtaWNvbG9uKCk7CiAgICByZXR1cm4gbmV3IERvKGJvZHksIGNvbmRpdGlvbik7CiAgfQoKICBTdGF0ZW1lbnQgcGFyc2VTd2l0Y2goKSB7CiAgICBleHBlY3RDYXRlZ29yeShMUEFSRU4pOwogICAgRXhwcmVzc2lvbiBrZXkgPSBwYXJzZUV4cHJlc3Npb24oKTsKICAgIGV4cGVjdENhdGVnb3J5KFJQQVJFTik7CiAgICBleHBlY3RDYXRlZ29yeShMQlJBQ0UpOwogICAgTGlzdDxTd2l0Y2hDbGF1c2U+IGNsYXVzZXMgPSBuZXcgTGlzdDxTd2l0Y2hDbGF1c2U+KCk7CiAgICB3aGlsZSAobGFzdENhdGVnb3J5ICE9IFJCUkFDRSkgewogICAgICBjbGF1c2VzLmFkZChwYXJzZVN3aXRjaENsYXVzZSgpKTsKICAgIH0KICAgIGV4cGVjdENhdGVnb3J5KFJCUkFDRSk7CiAgICByZXR1cm4gbmV3IFN3aXRjaChrZXksIGNsYXVzZXMpOwogIH0KCiAgQ2F0Y2ggcGFyc2VDYXRjaCgpIHsKICAgIGV4cGVjdENhdGVnb3J5KExQQVJFTik7CiAgICBEZWNsYXJhdGlvbiBlcnJvck5hbWUgPSBwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb24oKTsKICAgIGV4cGVjdENhdGVnb3J5KFJQQVJFTik7CiAgICBleHBlY3RDYXRlZ29yeShMQlJBQ0UpOwogICAgQmxvY2sgYm9keSA9IHBhcnNlQmxvY2soKTsKICAgIHJldHVybiBuZXcgQ2F0Y2goZXJyb3JOYW1lLCBib2R5KTsKICB9Cn0KCmNsYXNzIF9JbnRlcmxlYXZlSXRlcmF0b3I8VCBleHRlbmRzIE5vZGU+IGltcGxlbWVudHMgSXRlcmF0b3I8VD4gewogIEl0ZXJhdG9yPFQ+IHNvdXJjZTsKICBUIHNlcGFyYXRvcjsKICBib29sIGlzTmV4dFNlcGFyYXRvciA9IGZhbHNlOwogIGJvb2wgaXNJbml0aWFsaXplZCA9IGZhbHNlOwoKICBfSW50ZXJsZWF2ZUl0ZXJhdG9yKHRoaXMuc291cmNlLCB0aGlzLnNlcGFyYXRvcik7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoIWlzSW5pdGlhbGl6ZWQpIHsKICAgICAgaXNJbml0aWFsaXplZCA9IHRydWU7CiAgICAgIHJldHVybiBzb3VyY2UubW92ZU5leHQoKTsKICAgIH0gZWxzZSBpZiAoaXNOZXh0U2VwYXJhdG9yKSB7CiAgICAgIGlzTmV4dFNlcGFyYXRvciA9IGZhbHNlOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBpc05leHRTZXBhcmF0b3IgPSBzb3VyY2UubW92ZU5leHQoKTsKICAgIH0KICB9CgogIFQgZ2V0IGN1cnJlbnQgewogICAgaWYgKGlzTmV4dFNlcGFyYXRvcikgcmV0dXJuIHNlcGFyYXRvcjsKICAgIHJldHVybiBzb3VyY2UuY3VycmVudDsKICB9Cn0KCmNsYXNzIF9JbnRlcmxlYXZlSXRlcmFibGU8VCBleHRlbmRzIE5vZGU+IGV4dGVuZHMgSXRlcmFibGVCYXNlPFQ+IHsKICBJdGVyYWJsZTxUPiBzb3VyY2U7CiAgVCBzZXBhcmF0b3I7CgogIF9JbnRlcmxlYXZlSXRlcmFibGUodGhpcy5zb3VyY2UsIHRoaXMuc2VwYXJhdG9yKTsKCiAgSXRlcmF0b3I8VD4gZ2V0IGl0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IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YganNfYXN0OwoKLy8vIFZpc2l0b3IgdGhhdCBjb21wdXRlcyB3aGV0aGVyIHR3byBbTm9kZV1zIGFyZSBzdHJ1Y3R1cmFsbHkgZXF1aXZhbGVudC4KY2xhc3MgRXF1aXZhbGVuY2VWaXNpdG9yIGltcGxlbWVudHMgTm9kZVZpc2l0b3IxPGJvb2wsIE5vZGU+IHsKICBjb25zdCBFcXVpdmFsZW5jZVZpc2l0b3IoKTsKCiAgLy8vIENhbGxlZCB3aGVuIFtub2RlMV0gYW5kIFtub2RlMl0gYXJlIG5vdCBlcXVpdmFsZW50LgogIC8vLwogIC8vLyBPdmVycmlkZSB0aGlzIHRvIGNvbGxlY3Qgb3IgcmVwb3J0IGluZm9ybWF0aW9uIG9uIHRoZSBpbmVxdWl2YWxlbnQgbm9kZXMuCiAgYm9vbCBmYWlsQXQoTm9kZSBub2RlMSwgTm9kZSBub2RlMikgPT4gZmFsc2U7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIG5vbi1ub2RlIHZhbHVlcyBbdmFsdWUxXSBhbmQgW3ZhbHVlMl0gYXJlIGVxdWl2YWxlbnQuCiAgYm9vbCB0ZXN0VmFsdWVzKE5vZGUgbm9kZTEsIE9iamVjdCB2YWx1ZTEsIE5vZGUgbm9kZTIsIE9iamVjdCB2YWx1ZTIpID0+CiAgICAgIHZhbHVlMSA9PSB2YWx1ZTI7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGxhYmVscyBbbGFiZWwxXSBhbmQgW2xhYmVsMl0gYXJlIGVxdWl2YWxlbnQuCiAgYm9vbCB0ZXN0TGFiZWxzKE5vZGUgbm9kZTEsIFN0cmluZyBsYWJlbDEsIE5vZGUgbm9kZTIsIFN0cmluZyBsYWJlbDIpID0+CiAgICAgIGxhYmVsMSA9PSBsYWJlbDI7CgogIGJvb2wgdGVzdE5vZGVzKE5vZGUgbm9kZTEsIE5vZGUgbm9kZTIpIHsKICAgIGlmIChpZGVudGljYWwobm9kZTEsIG5vZGUyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAobm9kZTEgPT0gbnVsbCB8fCBub2RlMiA9PSBudWxsKSByZXR1cm4gZmFpbEF0KG5vZGUxLCBub2RlMik7CiAgICByZXR1cm4gbm9kZTEuYWNjZXB0MSh0aGlzLCBub2RlMik7CiAgfQoKICBib29sIHRlc3ROb2RlTGlzdHMoTGlzdDxOb2RlPiBsaXN0MSwgTGlzdDxOb2RlPiBsaXN0MikgewogICAgaW50IGluZGV4ID0gMDsKICAgIHdoaWxlIChpbmRleCA8IGxpc3QxLmxlbmd0aCAmJiBpbmRleCA8IGxpc3QyLmxlbmd0aCkgewogICAgICBpZiAoIXRlc3ROb2RlcyhsaXN0MVtpbmRleF0sIGxpc3QyW2luZGV4XSkpIHJldHVybiBmYWxzZTsKICAgICAgaW5kZXgrKzsKICAgIH0KICAgIGlmIChpbmRleCA8IGxpc3QxLmxlbmd0aCkgewogICAgICByZXR1cm4gZmFpbEF0KGxpc3QxW2luZGV4XSwgbnVsbCk7CiAgICB9IGVsc2UgaWYgKGluZGV4IDwgbGlzdDIubGVuZ3RoKSB7CiAgICAgIHJldHVybiBmYWlsQXQobGlzdDJbaW5kZXhdLCBudWxsKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFByb2dyYW0oUHJvZ3JhbSBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgUHJvZ3JhbSkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgUHJvZ3JhbSBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZUxpc3RzKG5vZGUuYm9keSwgb3RoZXIuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJwb2xhdGVkRGVjbGFyYXRpb24oSW50ZXJwb2xhdGVkRGVjbGFyYXRpb24gbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEludGVycG9sYXRlZERlY2xhcmF0aW9uKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbiBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUubmFtZU9yUG9zaXRpb24sIG90aGVyLCBvdGhlci5uYW1lT3JQb3NpdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJwb2xhdGVkU3RhdGVtZW50KEludGVycG9sYXRlZFN0YXRlbWVudCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgSW50ZXJwb2xhdGVkU3RhdGVtZW50KSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBJbnRlcnBvbGF0ZWRTdGF0ZW1lbnQgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLm5hbWVPclBvc2l0aW9uLCBvdGhlciwgb3RoZXIubmFtZU9yUG9zaXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEludGVycG9sYXRlZFNlbGVjdG9yKEludGVycG9sYXRlZFNlbGVjdG9yIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBJbnRlcnBvbGF0ZWRTZWxlY3RvcikgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgSW50ZXJwb2xhdGVkU2VsZWN0b3Igb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLm5hbWVPclBvc2l0aW9uLCBvdGhlciwgb3RoZXIubmFtZU9yUG9zaXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEludGVycG9sYXRlZFBhcmFtZXRlcihJbnRlcnBvbGF0ZWRQYXJhbWV0ZXIgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEludGVycG9sYXRlZFBhcmFtZXRlcikgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgSW50ZXJwb2xhdGVkUGFyYW1ldGVyIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS5uYW1lT3JQb3NpdGlvbiwgb3RoZXIsIG90aGVyLm5hbWVPclBvc2l0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcnBvbGF0ZWRMaXRlcmFsKEludGVycG9sYXRlZExpdGVyYWwgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEludGVycG9sYXRlZExpdGVyYWwpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEludGVycG9sYXRlZExpdGVyYWwgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLm5hbWVPclBvc2l0aW9uLCBvdGhlciwgb3RoZXIubmFtZU9yUG9zaXRpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEludGVycG9sYXRlZEV4cHJlc3Npb24oSW50ZXJwb2xhdGVkRXhwcmVzc2lvbiBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgSW50ZXJwb2xhdGVkRXhwcmVzc2lvbikgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgSW50ZXJwb2xhdGVkRXhwcmVzc2lvbiBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUubmFtZU9yUG9zaXRpb24sIG90aGVyLCBvdGhlci5uYW1lT3JQb3NpdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Q29tbWVudChDb21tZW50IG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBDb21tZW50KSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBDb21tZW50IG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS5jb21tZW50LCBvdGhlciwgb3RoZXIuY29tbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0QXdhaXQoQXdhaXQgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEF3YWl0KSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBBd2FpdCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5leHByZXNzaW9uLCBvdGhlci5leHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRSZWdFeHBMaXRlcmFsKFJlZ0V4cExpdGVyYWwgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIFJlZ0V4cExpdGVyYWwpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFJlZ0V4cExpdGVyYWwgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLnBhdHRlcm4sIG90aGVyLCBvdGhlci5wYXR0ZXJuKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRQcm9wZXJ0eShQcm9wZXJ0eSBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgUHJvcGVydHkpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFByb3BlcnR5IG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLm5hbWUsIG90aGVyLm5hbWUpICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUudmFsdWUsIG90aGVyLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRPYmplY3RJbml0aWFsaXplcihPYmplY3RJbml0aWFsaXplciBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgT2JqZWN0SW5pdGlhbGl6ZXIpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIE9iamVjdEluaXRpYWxpemVyIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2RlTGlzdHMobm9kZS5wcm9wZXJ0aWVzLCBvdGhlci5wcm9wZXJ0aWVzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRBcnJheUhvbGUoQXJyYXlIb2xlIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBBcnJheUhvbGUpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEFycmF5SW5pdGlhbGl6ZXIoQXJyYXlJbml0aWFsaXplciBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgQXJyYXlJbml0aWFsaXplcikgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgQXJyYXlJbml0aWFsaXplciBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZUxpc3RzKG5vZGUuZWxlbWVudHMsIG90aGVyLmVsZW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXROYW1lKE5hbWUgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIE5hbWUpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIE5hbWUgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLmtleSwgb3RoZXIsIG90aGVyLmtleSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0UGFyZW50aGVzZXMoUGFyZW50aGVzZXMgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIFBhcmVudGhlc2VzKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBQYXJlbnRoZXNlcyBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUuZW5jbG9zZWQsIG90aGVyLCBvdGhlci5lbmNsb3NlZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihTdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBTdHJpbmdDb25jYXRlbmF0aW9uKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBTdHJpbmdDb25jYXRlbmF0aW9uIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2RlTGlzdHMobm9kZS5wYXJ0cywgb3RoZXIucGFydHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExpdGVyYWxOdWxsKExpdGVyYWxOdWxsIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBMaXRlcmFsTnVsbCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TGl0ZXJhbE51bWJlcihMaXRlcmFsTnVtYmVyIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBMaXRlcmFsTnVtYmVyKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBMaXRlcmFsTnVtYmVyIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS52YWx1ZSwgb3RoZXIsIG90aGVyLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMaXRlcmFsU3RyaW5nKExpdGVyYWxTdHJpbmcgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIExpdGVyYWxTdHJpbmcpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIExpdGVyYWxTdHJpbmcgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLnZhbHVlLCBvdGhlciwgb3RoZXIudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdExpdGVyYWxCb29sKExpdGVyYWxCb29sIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBMaXRlcmFsQm9vbCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgTGl0ZXJhbEJvb2wgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLnZhbHVlLCBvdGhlciwgb3RoZXIudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdERlZmVycmVkU3RyaW5nKERlZmVycmVkU3RyaW5nIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBEZWZlcnJlZFN0cmluZykgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgRGVmZXJyZWRTdHJpbmcgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLnZhbHVlLCBvdGhlciwgb3RoZXIudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdERlZmVycmVkTnVtYmVyKERlZmVycmVkTnVtYmVyIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBEZWZlcnJlZE51bWJlcikgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgRGVmZXJyZWROdW1iZXIgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLnZhbHVlLCBvdGhlciwgb3RoZXIudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdERlZmVycmVkRXhwcmVzc2lvbihEZWZlcnJlZEV4cHJlc3Npb24gbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIERlZmVycmVkRXhwcmVzc2lvbikgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgRGVmZXJyZWRFeHByZXNzaW9uIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLnZhbHVlLCBvdGhlci52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RnVuKEZ1biBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgRnVuKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBGdW4gb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVMaXN0cyhub2RlLnBhcmFtcywgb3RoZXIucGFyYW1zKSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLmJvZHksIG90aGVyLmJvZHkpICYmCiAgICAgICAgdGVzdFZhbHVlcyhub2RlLCBub2RlLmFzeW5jTW9kaWZpZXIsIG90aGVyLCBvdGhlci5hc3luY01vZGlmaWVyKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXROYW1lZEZ1bmN0aW9uKE5hbWVkRnVuY3Rpb24gbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIE5hbWVkRnVuY3Rpb24pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIE5hbWVkRnVuY3Rpb24gb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUubmFtZSwgb3RoZXIubmFtZSkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5mdW5jdGlvbiwgb3RoZXIuZnVuY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEFjY2VzcyhQcm9wZXJ0eUFjY2VzcyBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgUHJvcGVydHlBY2Nlc3MpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFByb3BlcnR5QWNjZXNzIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLnJlY2VpdmVyLCBvdGhlci5yZWNlaXZlcikgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5zZWxlY3Rvciwgb3RoZXIuc2VsZWN0b3IpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFBhcmFtZXRlcihQYXJhbWV0ZXIgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIFBhcmFtZXRlcikgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgUGFyYW1ldGVyIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS5uYW1lLCBvdGhlciwgb3RoZXIubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihWYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBWYXJpYWJsZURlY2xhcmF0aW9uKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBWYXJpYWJsZURlY2xhcmF0aW9uIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS5uYW1lLCBvdGhlciwgb3RoZXIubmFtZSkgJiYKICAgICAgICB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUuYWxsb3dSZW5hbWUsIG90aGVyLCBvdGhlci5hbGxvd1JlbmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VGhpcyhUaGlzIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBUaGlzKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRWYXJpYWJsZVVzZShWYXJpYWJsZVVzZSBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgVmFyaWFibGVVc2UpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFZhcmlhYmxlVXNlIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS5uYW1lLCBvdGhlciwgb3RoZXIubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0UG9zdGZpeChQb3N0Zml4IG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBQb3N0Zml4KSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBQb3N0Zml4IG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS5vcCwgb3RoZXIsIG90aGVyLm9wKSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLmFyZ3VtZW50LCBvdGhlci5hcmd1bWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0UHJlZml4KFByZWZpeCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgUHJlZml4KSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBQcmVmaXggb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLm9wLCBvdGhlciwgb3RoZXIub3ApICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUuYXJndW1lbnQsIG90aGVyLmFyZ3VtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRCaW5hcnkoQmluYXJ5IG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBCaW5hcnkpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEJpbmFyeSBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5sZWZ0LCBvdGhlci5sZWZ0KSAmJgogICAgICAgIHRlc3RWYWx1ZXMobm9kZSwgbm9kZS5vcCwgb3RoZXIsIG90aGVyLm9wKSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLnJpZ2h0LCBvdGhlci5yaWdodCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Q2FsbChDYWxsIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBDYWxsKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBDYWxsIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLnRhcmdldCwgb3RoZXIudGFyZ2V0KSAmJgogICAgICAgIHRlc3ROb2RlTGlzdHMobm9kZS5hcmd1bWVudHMsIG90aGVyLmFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TmV3KE5ldyBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgTmV3KSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBOZXcgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUudGFyZ2V0LCBvdGhlci50YXJnZXQpICYmCiAgICAgICAgdGVzdE5vZGVMaXN0cyhub2RlLmFyZ3VtZW50cywgb3RoZXIuYXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDb25kaXRpb25hbChDb25kaXRpb25hbCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgQ29uZGl0aW9uYWwpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIENvbmRpdGlvbmFsIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLmNvbmRpdGlvbiwgb3RoZXIuY29uZGl0aW9uKSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLnRoZW4sIG90aGVyLnRoZW4pICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUub3RoZXJ3aXNlLCBvdGhlci5vdGhlcndpc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oVmFyaWFibGVJbml0aWFsaXphdGlvbiBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgVmFyaWFibGVJbml0aWFsaXphdGlvbikgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgVmFyaWFibGVJbml0aWFsaXphdGlvbiBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5kZWNsYXJhdGlvbiwgb3RoZXIuZGVjbGFyYXRpb24pICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUubGVmdEhhbmRTaWRlLCBvdGhlci5sZWZ0SGFuZFNpZGUpICYmCiAgICAgICAgdGVzdFZhbHVlcyhub2RlLCBub2RlLm9wLCBvdGhlciwgb3RoZXIub3ApICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUudmFsdWUsIG90aGVyLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRBc3NpZ25tZW50KEFzc2lnbm1lbnQgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEFzc2lnbm1lbnQpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEFzc2lnbm1lbnQgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUubGVmdEhhbmRTaWRlLCBvdGhlci5sZWZ0SGFuZFNpZGUpICYmCiAgICAgICAgdGVzdFZhbHVlcyhub2RlLCBub2RlLm9wLCBvdGhlciwgb3RoZXIub3ApICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUudmFsdWUsIG90aGVyLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uTGlzdChWYXJpYWJsZURlY2xhcmF0aW9uTGlzdCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0IG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2RlTGlzdHMobm9kZS5kZWNsYXJhdGlvbnMsIG90aGVyLmRlY2xhcmF0aW9ucyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0TGl0ZXJhbEV4cHJlc3Npb24oTGl0ZXJhbEV4cHJlc3Npb24gbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIExpdGVyYWxFeHByZXNzaW9uKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBMaXRlcmFsRXhwcmVzc2lvbiBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0VmFsdWVzKG5vZGUsIG5vZGUudGVtcGxhdGUsIG90aGVyLCBvdGhlci50ZW1wbGF0ZSkgJiYKICAgICAgICB0ZXN0Tm9kZUxpc3RzKG5vZGUuaW5wdXRzLCBvdGhlci5pbnB1dHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdERhcnRZaWVsZChEYXJ0WWllbGQgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIERhcnRZaWVsZCkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgRGFydFlpZWxkIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLmV4cHJlc3Npb24sIG90aGVyLmV4cHJlc3Npb24pICYmCiAgICAgICAgdGVzdFZhbHVlcyhub2RlLCBub2RlLmhhc1N0YXIsIG90aGVyLCBvdGhlci5oYXNTdGFyKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMaXRlcmFsU3RhdGVtZW50KExpdGVyYWxTdGF0ZW1lbnQgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIExpdGVyYWxTdGF0ZW1lbnQpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIExpdGVyYWxTdGF0ZW1lbnQgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdFZhbHVlcyhub2RlLCBub2RlLmNvZGUsIG90aGVyLCBvdGhlci5jb2RlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMYWJlbGVkU3RhdGVtZW50KExhYmVsZWRTdGF0ZW1lbnQgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIExhYmVsZWRTdGF0ZW1lbnQpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIExhYmVsZWRTdGF0ZW1lbnQgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdExhYmVscyhub2RlLCBub2RlLmxhYmVsLCBvdGhlciwgb3RoZXIubGFiZWwpICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUuYm9keSwgb3RoZXIuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihGdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBGdW5jdGlvbkRlY2xhcmF0aW9uKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBGdW5jdGlvbkRlY2xhcmF0aW9uIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLm5hbWUsIG90aGVyLm5hbWUpICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUuZnVuY3Rpb24sIG90aGVyLmZ1bmN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXREZWZhdWx0KERlZmF1bHQgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIERlZmF1bHQpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIERlZmF1bHQgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUuYm9keSwgb3RoZXIuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Q2FzZShDYXNlIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBDYXNlKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBDYXNlIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLmV4cHJlc3Npb24sIG90aGVyLmV4cHJlc3Npb24pICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUuYm9keSwgb3RoZXIuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0U3dpdGNoKFN3aXRjaCBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgU3dpdGNoKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBTd2l0Y2ggb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUua2V5LCBvdGhlci5rZXkpICYmCiAgICAgICAgdGVzdE5vZGVMaXN0cyhub2RlLmNhc2VzLCBvdGhlci5jYXNlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Q2F0Y2goQ2F0Y2ggbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIENhdGNoKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBDYXRjaCBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5kZWNsYXJhdGlvbiwgb3RoZXIuZGVjbGFyYXRpb24pICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUuYm9keSwgb3RoZXIuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VHJ5KFRyeSBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgVHJ5KSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBUcnkgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUuYm9keSwgb3RoZXIuYm9keSkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5jYXRjaFBhcnQsIG90aGVyLmNhdGNoUGFydCkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5maW5hbGx5UGFydCwgb3RoZXIuZmluYWxseVBhcnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFRocm93KFRocm93IG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBUaHJvdykgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgVGhyb3cgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUuZXhwcmVzc2lvbiwgb3RoZXIuZXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0UmV0dXJuKFJldHVybiBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgUmV0dXJuKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBSZXR1cm4gb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUudmFsdWUsIG90aGVyLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRCcmVhayhCcmVhayBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgQnJlYWspIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEJyZWFrIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RMYWJlbHMobm9kZSwgbm9kZS50YXJnZXRMYWJlbCwgb3RoZXIsIG90aGVyLnRhcmdldExhYmVsKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDb250aW51ZShDb250aW51ZSBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgQ29udGludWUpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIENvbnRpbnVlIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3RMYWJlbHMobm9kZSwgbm9kZS50YXJnZXRMYWJlbCwgb3RoZXIsIG90aGVyLnRhcmdldExhYmVsKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXREbyhEbyBub2RlLCBOb2RlIGFyZykgewogICAgaWYgKGFyZyBpcyEgRG8pIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIERvIG90aGVyID0gYXJnOwogICAgcmV0dXJuIHRlc3ROb2Rlcyhub2RlLmNvbmRpdGlvbiwgb3RoZXIuY29uZGl0aW9uKSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLmJvZHksIG90aGVyLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFdoaWxlKFdoaWxlIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBXaGlsZSkgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgV2hpbGUgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUuY29uZGl0aW9uLCBvdGhlci5jb25kaXRpb24pICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUuYm9keSwgb3RoZXIuYm9keSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Rm9ySW4oRm9ySW4gbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEZvckluKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBGb3JJbiBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5sZWZ0SGFuZFNpZGUsIG90aGVyLmxlZnRIYW5kU2lkZSkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5vYmplY3QsIG90aGVyLm9iamVjdCkgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5ib2R5LCBvdGhlci5ib2R5KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGb3IoRm9yIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBGb3IpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEZvciBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZXMobm9kZS5pbml0LCBvdGhlci5pbml0KSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLmNvbmRpdGlvbiwgb3RoZXIuY29uZGl0aW9uKSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLnVwZGF0ZSwgb3RoZXIudXBkYXRlKSAmJgogICAgICAgIHRlc3ROb2Rlcyhub2RlLmJvZHksIG90aGVyLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdElmKElmIG5vZGUsIE5vZGUgYXJnKSB7CiAgICBpZiAoYXJnIGlzISBJZikgcmV0dXJuIGZhaWxBdChub2RlLCBhcmcpOwogICAgSWYgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUuY29uZGl0aW9uLCBvdGhlci5jb25kaXRpb24pICYmCiAgICAgICAgdGVzdE5vZGVzKG5vZGUudGhlbiwgb3RoZXIudGhlbikgJiYKICAgICAgICB0ZXN0Tm9kZXMobm9kZS5vdGhlcndpc2UsIG90aGVyLm90aGVyd2lzZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0RW1wdHlTdGF0ZW1lbnQoRW1wdHlTdGF0ZW1lbnQgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEVtcHR5U3RhdGVtZW50KSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRFeHByZXNzaW9uU3RhdGVtZW50KEV4cHJlc3Npb25TdGF0ZW1lbnQgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEV4cHJlc3Npb25TdGF0ZW1lbnQpIHJldHVybiBmYWlsQXQobm9kZSwgYXJnKTsKICAgIEV4cHJlc3Npb25TdGF0ZW1lbnQgb3RoZXIgPSBhcmc7CiAgICByZXR1cm4gdGVzdE5vZGVzKG5vZGUuZXhwcmVzc2lvbiwgb3RoZXIuZXhwcmVzc2lvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0QmxvY2soQmxvY2sgbm9kZSwgTm9kZSBhcmcpIHsKICAgIGlmIChhcmcgaXMhIEJsb2NrKSByZXR1cm4gZmFpbEF0KG5vZGUsIGFyZyk7CiAgICBCbG9jayBvdGhlciA9IGFyZzsKICAgIHJldHVybiB0ZXN0Tm9kZUxpc3RzKG5vZGUuc3RhdGVtZW50cywgb3RoZXIuc3RhdGVtZW50cyk7CiAgfQp9CoIAAE5OPAEQAUs/HgE6BlAwAVBLGAFHSxgBKy5FJwQBOxM7QA8GICknKQYRBAEMLjMZMQQBDE5DKU8EAQxKQSdPBAEMSEAmTwQBDEpBJ08EAQxGPyVPBAEMTEIoTwQBDC4zGUEEAQwqMRc5BAEMOjkfQQQBDDA0Gi8sBAEMQj0jPQQBDDI1EQQBDEA8IjkEAQwoMBY5BAEMNjcdQwQBDEY/JTMEAQw2NxEEAQw6OR89BAEMOjkfPQQBDDY3HT0EAQw8OiA9BAEMPDogPQQBDEQ+JC8EAQwmLxU3LEoEAQw6OR8vMgQBDDQ6IDcyBAEMMjUbOwQBDEY/JT1GBAEMKDARBAEMNjcdOwQBDC4zGTkyBAEMLDIYOTIEAQwsMhgvNiwEAQwoMBYzOAQBDCYvFTM4BAEMNjcdOSw0BAEMTEIoPTw2LAQBDDQ2HD82LAQBDE5DKUEEAQxCPSNFMgQBDDI1Gzs+BAEMQDwiOwQBDEA8Ij8qBAEMRj8lLzIEAQwuMxktBAEMKDAWOyoEAQwsMhgtMAQBDCoxFz0qBAEMJi8VLzY4BAEMKjEXOQQBDCwyGC8EAQwqMRdJBAEMMDQaSQQBDCQuFDkqBAEMKjEXOSoEAQwqMRc/MCoEAQwmLxUvNjAqBAEMJC4UOSw0BAEMPDoRBAEMRj8lOQQBDCoxFz0EAgErcGFja2FnZTpqc19hc3Qvc3JjL2VxdWl2YWxlbmNlX3Zpc2l0b3IuZGFydC5zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qcy9qc19kZWJ1Zy5kYXJ0iEsvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIEhlbHBlciBmb3IgZGVidWcgSlMgbm9kZXMuCgpsaWJyYXJ5IGpzLmRlYnVnOwoKaW1wb3J0ICdwYWNrYWdlOmpzX2FzdC9qc19hc3QuZGFydCc7CgppbXBvcnQgJy4uL2lvL2NvZGVfb3V0cHV0LmRhcnQnIHNob3cgQnVmZmVyZWRDb2RlT3V0cHV0OwppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JyBzaG93IEluZGVudGF0aW9uLCBUYWdnaW5nOwoKLy8vIFVucGFyc2UgdGhlIEphdmFTY3JpcHQgW25vZGVdLgpTdHJpbmcgbm9kZVRvU3RyaW5nKE5vZGUgbm9kZSwge2Jvb2wgcHJldHR5OiBmYWxzZX0pIHsKICBKYXZhU2NyaXB0UHJpbnRpbmdPcHRpb25zIG9wdGlvbnMgPSBuZXcgSmF2YVNjcmlwdFByaW50aW5nT3B0aW9ucygKICAgICAgc2hvdWxkQ29tcHJlc3NPdXRwdXQ6ICFwcmV0dHksCiAgICAgIHByZWZlclNlbWljb2xvblRvTmV3bGluZUluTWluaWZpZWRPdXRwdXQ6ICFwcmV0dHkpOwogIExlbmllbnRQcmludGluZ0NvbnRleHQgcHJpbnRpbmdDb250ZXh0ID0gbmV3IExlbmllbnRQcmludGluZ0NvbnRleHQoKTsKICBuZXcgUHJpbnRlcihvcHRpb25zLCBwcmludGluZ0NvbnRleHQpLnZpc2l0KG5vZGUpOwogIHJldHVybiBwcmludGluZ0NvbnRleHQuZ2V0VGV4dCgpOwp9CgovLy8gVmlzaXRvciB0aGF0IGNyZWF0ZXMgYW4gWE1MLWxpa2UgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0cnVjdHVyZSBvZiBhCi8vLyBKYXZhU2NyaXB0IFtOb2RlXS4KY2xhc3MgRGVidWdQcmludGVyIGV4dGVuZHMgQmFzZVZpc2l0b3Igd2l0aCBJbmRlbnRhdGlvbiwgVGFnZ2luZzxOb2RlPiB7CiAgQG92ZXJyaWRlCiAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwoKICB2b2lkIHZpc2l0Tm9kZVdpdGhDaGlsZHJlbihOb2RlIG5vZGUsIFN0cmluZyB0eXBlLCBbTWFwIHBhcmFtc10pIHsKICAgIG9wZW5Ob2RlKG5vZGUsIHR5cGUsIHBhcmFtcyk7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgICBjbG9zZU5vZGUoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXROb2RlKE5vZGUgbm9kZSkgewogICAgdmlzaXROb2RlV2l0aENoaWxkcmVuKG5vZGUsICcke25vZGUucnVudGltZVR5cGV9Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TmFtZShOYW1lIG5vZGUpIHsKICAgIG9wZW5BbmRDbG9zZU5vZGUobm9kZSwgJyR7bm9kZS5ydW50aW1lVHlwZX0nLCB7J25hbWUnOiBub2RlLm5hbWV9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCaW5hcnkoQmluYXJ5IG5vZGUpIHsKICAgIHZpc2l0Tm9kZVdpdGhDaGlsZHJlbihub2RlLCAnJHtub2RlLnJ1bnRpbWVUeXBlfScsIHsnb3AnOiBub2RlLm9wfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGl0ZXJhbFN0cmluZyhMaXRlcmFsU3RyaW5nIG5vZGUpIHsKICAgIG9wZW5BbmRDbG9zZU5vZGUobm9kZSwgJyR7bm9kZS5ydW50aW1lVHlwZX0nLCB7J3ZhbHVlJzogbm9kZS52YWx1ZX0pOwogIH0KCiAgLy8vIFByZXR0eS1wcmludHMgZ2l2ZW4gbm9kZSB0cmVlIGludG8gc3RyaW5nLgogIHN0YXRpYyBTdHJpbmcgcHJldHR5UHJpbnQoTm9kZSBub2RlKSB7CiAgICB2YXIgcCA9IG5ldyBEZWJ1Z1ByaW50ZXIoKTsKICAgIG5vZGUuYWNjZXB0KHApOwogICAgcmV0dXJuIHAuc2IudG9TdHJpbmcoKTsKICB9Cn0KCi8vLyBTaW1wbGUgcHJpbnRpbmcgY29udGV4dCB0aGF0IGRvZXNuJ3QgdGhyb3cgb24gZXJyb3JzLgpjbGFzcyBMZW5pZW50UHJpbnRpbmdDb250ZXh0IGV4dGVuZHMgU2ltcGxlSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dAogICAgaW1wbGVtZW50cyBCdWZmZXJlZENvZGVPdXRwdXQgewogIEBvdmVycmlkZQogIHZvaWQgZXJyb3IoU3RyaW5nIG1lc3NhZ2UpIHsKICAgIGJ1ZmZlci53cml0ZSgnPj4kbWVzc2FnZTw8Jyk7CiAgfQp9CkkATk48AR8BEgElATk2ASM3RSU6STUkAgFKF0kMKAFFIh4RBAEMHjgEAQweSAQBDCJJBAEMMEoEATEpIBQcBAIBOkUkDB8iBAIBJXBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzL2pzX2RlYnVnLmRhcnREc2Rrcm9vdDovc2RrL2xpYi9faW50ZXJuYWwvanNfcnVudGltZS9saWIvc2hhcmVkL2VtYmVkZGVkX25hbWVzLmRhcnS+TC8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gQ29udGFpbnMgdGhlIG5hbWVzIG9mIGdsb2JhbHMgdGhhdCBhcmUgZW1iZWRkZWQgaW50byB0aGUgb3V0cHV0IGJ5IHRoZQovLy8gY29tcGlsZXIuCi8vLwovLy8gVmFyaWFibGVzIGVtYmVkZGVkIHRoaXMgd2F5IHNob3VsZCBiZSBhY2Nlc3Mgd2l0aCBgSlNfRU1CRURERURfR0xPQkFMYCBmcm9tCi8vLyB0aGUgYF9mb3JlaWduX2hlbHBlcmAgbGlicmFyeS4KLy8vCi8vLyBUaGlzIGxpYnJhcnkgaXMgc2hhcmVkIGJldHdlZW4gdGhlIGNvbXBpbGVyIGFuZCB0aGUgcnVudGltZSBzeXN0ZW0uCmxpYnJhcnkgZGFydDJqcy5fZW1iZWRkZWRfbmFtZXM7CgovLy8gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgaXMgdXNlZCB0byBtYXJrIGEgdHlwZSBhcyB0eXBlZGVmLgovLy8KLy8vIFdpdGhvdXQgcmVmbGVjdGlvbiB0eXBlZGVmcyBhcmUgcmVtb3ZlZCAoZXhwYW5kZWQgdG8gdGhlaXIgZnVuY3Rpb24gdHlwZSkKLy8vIGJ1dCB3aXRoIHJlZmxlY3Rpb24gYW4gb2JqZWN0IGlzIG5lZWRlZCB0byBoYXZlIHRoZSB0eXBlZGVmJ3MgbmFtZS4gVGhlCi8vLyBvYmplY3QgaXMgbWFya2VkIHdpdGggdGhpcyBwcm9wZXJ0eS4KLy8vCi8vLyBUaGlzIHByb3BlcnR5IG5hbWUgb25seSBsaXZlcyBvbiBpbnRlcm5hbCB0eXBlLW9iamVjdHMgYW5kIGlzIG9ubHkgdXNlZAovLy8gd2hlbiByZWZsZWN0aW9uIGlzIGVuYWJsZWQuCmNvbnN0IFRZUEVERUZfUFJFRElDQVRFX1BST1BFUlRZX05BTUUgPSByIiQkaXNUeXBlZGVmIjsKCi8vLyBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBpcyB1c2VkIHRvIGZpbmQgdGhlIGZ1bmN0aW9uIHR5cGUgb2YgYQovLy8gdHlwZWRlZi4KLy8vCi8vLyBXaXRob3V0IHJlZmxlY3Rpb24gdHlwZWRlZnMgYXJlIHJlbW92ZWQgKGV4cGFuZGVkIHRvIHRoZWlyIGZ1bmN0aW9uIHR5cGUpCi8vLyBidXQgd2l0aCByZWZsZWN0aW9uIGFuIG9iamVjdCBpcyBuZWVkZWQgdG8gaGF2ZSB0aGUgdHlwZWRlZidzIG5hbWUuCi8vLwovLy8gVGhlIHR5cGVkZWYncyBvYmplY3QgY29udGFpbnMgYSBwb2ludGVyIHRvIGl0cyBmdW5jdGlvbiB0eXBlIChhcyBhbiBpbmRleAovLy8gaW50byB0aGUgZW1iZWRkZWQgZ2xvYmFsIFtUWVBFU10pIGluIHRoaXMgcHJvcGVydHkuCi8vLwovLy8gVGhpcyBwcm9wZXJ0eSBuYW1lIG9ubHkgbGl2ZXMgb24gaW50ZXJuYWwgdHlwZS1vYmplY3RzIGFuZCBpcyBvbmx5IHVzZWQKLy8vIHdoZW4gcmVmbGVjdGlvbiBpcyBlbmFibGVkLgpjb25zdCBUWVBFREVGX1RZUEVfUFJPUEVSVFlfTkFNRSA9IHIiJHR5cGVkZWZUeXBlIjsKCi8vLyBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdGhhdCBpcyB1c2VkIHRvIGZpbmQgdGhlIG5hdGl2ZSBzdXBlcmNsYXNzIG9mCi8vLyBhbiBleHRlbmRlZCBjbGFzcy4KLy8vCi8vLyBFdmVyeSBjbGFzcyB0aGF0IGV4dGVuZHMgYSBuYXRpdmUgY2xhc3MgaGFzIHRoaXMgcHJvcGVydHkgc2V0IG9uIGl0cwovLy8gbmF0aXZlIGNsYXNzLgpjb25zdCBOQVRJVkVfU1VQRVJDTEFTU19UQUdfTkFNRSA9IHIiJG5hdGl2ZVN1cGVyY2xhc3NUYWciOwoKLy8vIFRoZSBuYW1lIG9mIHRoZSBzdGF0aWMtZnVuY3Rpb24gcHJvcGVydHkgbmFtZS4KLy8vCi8vLyBUaGlzIHByb3BlcnR5IGlzIHNldCBmb3IgYWxsIHRlYXItb2ZmcyBvZiBzdGF0aWMgZnVuY3Rpb25zLCBhbmQgcHJvdmlkZXMKLy8vIHRoZSBzdGF0aWMgZnVuY3Rpb24ncyB1bmlxdWUgKHBvdGVudGlhbGx5IG1pbmlmaWVkKSBuYW1lLgpjb25zdCBTVEFUSUNfRlVOQ1RJT05fTkFNRV9QUk9QRVJUWV9OQU1FID0gcickc3RhdGljX25hbWUnOwoKLy8vIFRoZSBuYW1lIG9mIHRoZSBlbWJlZGRlZCBnbG9iYWwgZm9yIG1ldGFkYXRhLgovLy8KLy8vIFVzZSBbSnNCdWlsdGluLmdldE1ldGFkYXRhXSBpbnN0ZWFkIG9mIGRpcmVjdGx5IGFjY2Vzc2luZyB0aGlzIGVtYmVkZGVkCi8vLyBnbG9iYWwuCmNvbnN0IE1FVEFEQVRBID0gJ21ldGFkYXRhJzsKCi8vLyBBIGxpc3Qgb2YgdHlwZXMgdXNlZCBpbiB0aGUgcHJvZ3JhbSBlLmcuIGZvciByZWZsZWN0aW9uIG9yIGVuY29kaW5nIG9mCi8vLyBmdW5jdGlvbiB0eXBlcy4KLy8vCi8vLyBVc2UgW0pzQnVpbHRpbi5nZXRUeXBlXSBpbnN0ZWFkIG9mIGRpcmVjdGx5IGFjY2Vzc2luZyB0aGlzIGVtYmVkZGVkIGdsb2JhbC4KY29uc3QgVFlQRVMgPSAndHlwZXMnOwoKLy8vIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IG1hcHMgYSBuYW1lIG9mIGEgY2xhc3MgdG8gaXRzIHR5cGUuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgdXNlZCBieSB0aGUgcnVudGltZSB3aGVuIGNvbXB1dGluZyB0aGUgaW50ZXJuYWwKLy8vIHJ1bnRpbWUtdHlwZS1pbmZvcm1hdGlvbiAocnRpKSBvYmplY3QuCmNvbnN0IEdFVF9UWVBFX0ZST01fTkFNRSA9ICdnZXRUeXBlRnJvbU5hbWUnOwoKLy8vIEEgSlMgbWFwIGZyb20gbWFuZ2xlZCBnbG9iYWwgbmFtZXMgdG8gdGhlaXIgdW5tYW5nbGVkIG5hbWVzLgovLy8KLy8vIElmIHRoZSBwcm9ncmFtIGRvZXMgbm90IHVzZSByZWZsZWN0aW9uLCB0aGlzIGVtYmVkZGVkIGdsb2JhbCBtYXkgYmUgZW1wdHkKLy8vIChidXQgbm90IG51bGwgb3IgdW5kZWZpbmVkKS4KY29uc3QgTUFOR0xFRF9HTE9CQUxfTkFNRVMgPSAnbWFuZ2xlZEdsb2JhbE5hbWVzJzsKCi8vLyBBIEpTIG1hcCBmcm9tIG1hbmdsZWQgaW5zdGFuY2UgbmFtZXMgdG8gdGhlaXIgdW5tYW5nbGVkIG5hbWVzLgovLy8KLy8vIFRoaXMgZW1iZWRkZWQgZ2xvYmFsIGlzIG1haW5seSB1c2VkIGZvciByZWZsZWN0aW9uLCBidXQgaXMgYWxzbyB1c2VkIHRvCi8vLyBtYXAgY29uc3Qtc3ltYm9scyAoYGNvbnN0IFN5bWJvbCgneCcpYCkgdG8gdGhlIG1hbmdsZWQgaW5zdGFuY2UgbmFtZXMuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgbWF5IGJlIGVtcHR5IChidXQgbm90IG51bGwgb3IgdW5kZWZpbmVkKS4KY29uc3QgTUFOR0xFRF9OQU1FUyA9ICdtYW5nbGVkTmFtZXMnOwoKLy8vIEEgSlMgbWFwIGZyb20gZGlzcGF0Y2ggdGFncyAodXN1YWxseSBjb25zdHJ1Y3RvciBuYW1lcyBvZiBET00gY2xhc3NlcykgdG8KLy8vIGludGVyY2VwdG9yIGNsYXNzLiBUaGlzIG1hcCBpcyB1c2VkIHRvIGZpbmQgdGhlIGNvcnJlY3QgaW50ZXJjZXB0b3IgZm9yCi8vLyBuYXRpdmUgY2xhc3Nlcy4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBpcyB1c2VkIGZvciBuYXRpdmVzLgpjb25zdCBJTlRFUkNFUFRPUlNfQllfVEFHID0gJ2ludGVyY2VwdG9yc0J5VGFnJzsKCi8vLyBBIEpTIG1hcCBmcm9tIGRpc3BhdGNoIHRhZ3MgKHVzdWFsbHkgY29uc3RydWN0b3IgbmFtZXMgb2YgRE9NIGNsYXNzZXMpIHRvCi8vLyBib29sZWFucy4gRXZlcnkgdGFnIGVudHJ5IG9mIFtJTlRFUkNFUFRPUlNfQllfVEFHXSBoYXMgYSBjb3JyZXNwb25kaW5nCi8vLyBlbnRyeSBpbiB0aGUgbGVhZi10YWdzIG1hcC4KLy8vCi8vLyBBIHRhZy1lbnRyeSBpcyB0cnVlLCB3aGVuIGEgY2xhc3MgY2FuIGJlIHRyZWF0ZWQgYXMgbGVhZiBjbGFzcyBpbiB0aGUKLy8vIGhpZXJhcmNoeS4gVGhhdCBpcywgZXZlbiB0aG91Z2ggaXQgbWlnaHQgaGF2ZSBzdWJjbGFzc2VzLCBhbGwgc3ViY2xhc3NlcwovLy8gaGF2ZSB0aGUgc2FtZSBjb2RlIGZvciB0aGUgdXNlZCBtZXRob2RzLgovLy8KLy8vIFRoaXMgZW1iZWRkZWQgZ2xvYmFsIGlzIHVzZWQgZm9yIG5hdGl2ZXMuCmNvbnN0IExFQUZfVEFHUyA9ICdsZWFmVGFncyc7CgovLy8gQSBKUyBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIGlzb2xhdGUgdGFnIGZvciBhIGdpdmVuIG5hbWUuCi8vLwovLy8gVGhpcyBmdW5jdGlvbiB1c2VzIHRoZSBbSVNPTEFURV9UQUddIChiZWxvdykgdG8gY29uc3RydWN0IGEgbmFtZSB0aGF0IGlzCi8vLyB1bmlxdWUgcGVyIGlzb2xhdGUuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgdXNlZCBmb3IgbmF0aXZlcy4KLy8gVE9ETyhmbG9pdHNjaCk6IHNob3VsZCB3ZSByZW5hbWUgdGhpcyB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpb24gd2l0aAovLyAgICBbSU5URVJDRVBUT1JTX0JZX1RBR10gYW5kIFtMRUFGX1RBR1NdLgpjb25zdCBHRVRfSVNPTEFURV9UQUcgPSAnZ2V0SXNvbGF0ZVRhZyc7CgovLy8gQSBzdHJpbmcgdGhhdCBpcyBkaWZmZXJlbnQgZm9yIGVhY2ggcnVubmluZyBpc29sYXRlLgovLy8KLy8vIFdoZW4gdGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgaW5pdGlhbGl6ZWQgYSBnbG9iYWwgdmFyaWFibGUgaXMgdXNlZCB0bwovLy8gZW5zdXJlIHRoYXQgbm8gb3RoZXIgcnVubmluZyBpc29sYXRlIHVzZXMgdGhlIHNhbWUgaXNvbGF0ZS10YWcgc3RyaW5nLgovLy8KLy8vIFRoaXMgZW1iZWRkZWQgZ2xvYmFsIGlzIHVzZWQgZm9yIG5hdGl2ZXMuCi8vIFRPRE8oZmxvaXRzY2gpOiBzaG91bGQgd2UgcmVuYW1lIHRoaXMgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW9uIHdpdGgKLy8gICAgW0lOVEVSQ0VQVE9SU19CWV9UQUddIGFuZCBbTEVBRl9UQUdTXS4KY29uc3QgSVNPTEFURV9UQUcgPSAnaXNvbGF0ZVRhZyc7CgovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgKGEgZnVuY3Rpb24pIHJldHVybnMgdGhlIGlzb2xhdGUtc3BlY2lmaWMgZGlzcGF0Y2gtdGFnCi8vLyB0aGF0IGlzIHVzZWQgdG8gYWNjZWxlcmF0ZSBpbnRlcmNlcHRvciBjYWxscy4KY29uc3QgRElTUEFUQ0hfUFJPUEVSVFlfTkFNRSA9ICJkaXNwYXRjaFByb3BlcnR5TmFtZSI7CgovLy8gQW4gZW1iZWRkZWQgZ2xvYmFsIHRoYXQgbWFwcyBhIFtUeXBlXSB0byB0aGUgW0ludGVyY2VwdG9yXSBhbmQgY29uc3RydWN0b3JzCi8vLyBmb3IgdGhhdCB0eXBlLgovLy8KLy8vIE1vcmUgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlIGludGVyY2VwdG9ycyBsaWJyYXJ5IChjbG9zZSB0byBpdHMKLy8vIHVzZSkuCmNvbnN0IFRZUEVfVE9fSU5URVJDRVBUT1JfTUFQID0gInR5cGVUb0ludGVyY2VwdG9yTWFwIjsKCi8vLyBUaGUgY3VycmVudCBzY3JpcHQncyBVUkkgd2hlbiB0aGUgcHJvZ3JhbSB3YXMgbG9hZGVkLgovLy8KLy8vIFRoaXMgZW1iZWRkZWQgZ2xvYmFsIGlzIHNldCBhdCBzdGFydHVwLCBqdXN0IGJlZm9yZSBpbnZva2luZyBgbWFpbmAuCmNvbnN0IENVUlJFTlRfU0NSSVBUID0gJ2N1cnJlbnRTY3JpcHQnOwoKLy8vIENvbnRhaW5zIGEgbWFwIGZyb20gbG9hZC1pZHMgdG8gbGlzdHMgb2YgcGFydCBpbmRleGVzLgovLy8KLy8vIFRvIGxvYWQgdGhlIGRlZmVycmVkIGxpYnJhcnkgdGhhdCBpcyByZXByZXNlbnRlZCBieSB0aGUgbG9hZC1pZCwgdGhlIHJ1bnRpbWUKLy8vIG11c3QgbG9hZCBhbGwgYXNzb2NpYXRlZCBVUklzIChuYW1lZCBpbiBERUZFUlJFRF9QQVJUX1VSSVMpIGFuZCBpbml0aWFsaXplCi8vLyBhbGwgdGhlIGxvYWRlZCBodW5rcyAoREVGRVJSRURfUEFSVF9IQVNIRVMpLgovLy8KLy8vIFRoaXMgZW1iZWRkZWQgZ2xvYmFsIGlzIG9ubHkgdXNlZCBmb3IgZGVmZXJyZWQgbG9hZGluZy4KY29uc3QgREVGRVJSRURfTElCUkFSWV9QQVJUUyA9ICdkZWZlcnJlZExpYnJhcnlQYXJ0cyc7CgovLy8gQ29udGFpbnMgYSBsaXN0IG9mIFVSSXMgKFN0cmluZ3MpLCBpbmRleGVkIGJ5IHBhcnQuCi8vLwovLy8gVGhlIGxpc3RzIGluIHRoZSBERUZFUlJFRF9MSUJSQVJZX1BBUlRTIG1hcCBjb250YWluIGluZGV4ZXMgaW50byB0aGlzIGxpc3QuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGZvciBkZWZlcnJlZCBsb2FkaW5nLgpjb25zdCBERUZFUlJFRF9QQVJUX1VSSVMgPSAnZGVmZXJyZWRQYXJ0VXJpcyc7CgovLy8gQ29udGFpbnMgYSBsaXN0IG9mIGhhc2hlcywgaW5kZXhlZCBieSBwYXJ0LgovLy8KLy8vIFRoZSBsaXN0cyBpbiB0aGUgREVGRVJSRURfTElCUkFSWV9QQVJUUyBtYXAgY29udGFpbiBpbmRleGVzIGludG8gdGhpcyBsaXN0LgovLy8KLy8vIFRoZSBoYXNoZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgVVJJcyBvZiB0aGUgbG9hZC1pZHMgKHNlZQovLy8gW0RFRkVSUkVEX1BBUlRfVVJJU10pLiBUaGV5IGFyZSBTSEExIChvciBzaW1pbGFyKSBoYXNoZXMgb2YgdGhlIGNvZGUgdGhhdAovLy8gbXVzdCBiZSBsb2FkZWQuIEJ5IHVzaW5nIGNyeXB0b2dyYXBoaWMgaGFzaGVzIHdlIGNhbiAoMSkgaGFuZGxlIGxvYWRpbmcgaW4KLy8vIHRoZSBzYW1lIHdlYiBwYWdlIHRoZSBwYXJ0cyBmcm9tIG11bHRpcGxlIERhcnQgYXBwbGljYXRpb25zICgyKSBhdm9pZAovLy8gbG9hZGluZyBzaW1pbGFyIGNvZGUgbXVsdGlwbGUgdGltZXMuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGZvciBkZWZlcnJlZCBsb2FkaW5nLgpjb25zdCBERUZFUlJFRF9QQVJUX0hBU0hFUyA9ICdkZWZlcnJlZFBhcnRIYXNoZXMnOwoKLy8vIEluaXRpYWxpemUgYSBsb2FkZWQgaHVuay4KLy8vCi8vLyBPbmNlIGEgaHVuayAodGhlIGNvZGUgZnJvbSBhIGRlZmVycmVkIFVSSSkgaGFzIGJlZW4gbG9hZGVkIGl0IG11c3QgYmUKLy8vIGluaXRpYWxpemVkLiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCB0aGUgY29ycmVzcG9uZGluZyBoYXNoIChzZWUKLy8vIFtERUZFUlJFRF9MSUJSQVJZX0hBU0hFU10pIGluaXRpYWxpemVzIHRoZSBjb2RlLgovLy8KLy8vIFRoaXMgZW1iZWRkZWQgZ2xvYmFsIGlzIG9ubHkgdXNlZCBmb3IgZGVmZXJyZWQgbG9hZGluZy4KY29uc3QgSU5JVElBTElaRV9MT0FERURfSFVOSyA9ICdpbml0aWFsaXplTG9hZGVkSHVuayc7CgovLy8gUmV0dXJucywgd2hldGhlciBhIGh1bmsgKGlkZW50aWZpZWQgYnkgaXRzIGhhc2gpIGhhcyBhbHJlYWR5IGJlZW4gbG9hZGVkLgovLy8KLy8vIFRoaXMgZW1iZWRkZWQgZ2xvYmFsIGlzIG9ubHkgdXNlZCBmb3IgZGVmZXJyZWQgbG9hZGluZy4KY29uc3QgSVNfSFVOS19MT0FERUQgPSAnaXNIdW5rTG9hZGVkJzsKCi8vLyBSZXR1cm5zLCB3aGV0aGVyIGEgaHVuayAoaWRlbnRpZmllZCBieSBpdHMgaGFzaCkgaGFzIGFscmVhZHkgYmVlbgovLy8gaW5pdGlhbGl6ZWQuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGZvciBkZWZlcnJlZCBsb2FkaW5nLgpjb25zdCBJU19IVU5LX0lOSVRJQUxJWkVEID0gJ2lzSHVua0luaXRpYWxpemVkJzsKCi8vLyBBIHNldCAoaW1wbGVtZW50ZWQgYXMgbWFwIHRvIGJvb2xlYW5zKSBvZiBodW5rcyAoaWRlbnRpZmllZCBieSBoYXNoZXMpIHRoYXQKLy8vIGhhdmUgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLgovLy8KLy8vIFRoaXMgZW1iZWRkZWQgZ2xvYmFsIGlzIG9ubHkgdXNlZCBmb3IgZGVmZXJyZWQgbG9hZGluZy4KLy8vCi8vLyBUaGlzIGdsb2JhbCBpcyBhbiBlbWl0dGVyLWludGVybmFsIGVtYmVkZGVkIGdsb2JhbCwgYW5kIG5vdCB1c2VkIGJ5IHRoZQovLy8gcnVudGltZS4gVGhlIGNvbnN0YW50IHJlbWFpbnMgaW4gdGhpcyBmaWxlIHRvIG1ha2Ugc3VyZSB0aGF0IG90aGVyIGVtYmVkZGVkCi8vLyBnbG9iYWxzIGRvbid0IGNsYXNoIHdpdGggaXQuCmNvbnN0IERFRkVSUkVEX0lOSVRJQUxJWkVEID0gJ2RlZmVycmVkSW5pdGlhbGl6ZWQnOwoKLy8vIEEgJ1VuaXZlcnNlJyBvYmplY3QgdXNlZCBieSAnZGFydDpfcnRpJy4KLy8vCi8vLyBUaGlzIGVtYmVkZGVkIGdsb2JhbCBpcyB1c2VkIGZvciAtLWV4cGVyaW1lbnQtbmV3LXJ0aS4KY29uc3QgUlRJX1VOSVZFUlNFID0gJ3R5cGVVbml2ZXJzZSc7CgovLy8gUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhbGwgcHJlY29tcGlsZWQgZnVuY3Rpb25zIChpbiBwYXJ0aWN1bGFyCi8vLyBjb25zdHJ1Y3RvcnMpLgovLy8KLy8vIFRoYXQgaXMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBhcnJheSB0aGF0IHRoZSBmdWxsIGVtaXR0ZXIgd291bGQKLy8vIG90aGVyd2lzZSBidWlsZCBkeW5hbWljYWxseSB3aGVuIGl0IGZpbmlzaGVzIGFsbCBjbGFzc2VzLgovLy8KLy8vIFRoaXMgY29uc3RhbnQgaXMgb25seSB1c2VkIGluIENTUCBtb2RlLgovLy8KLy8vIFRoaXMgZ2xvYmFsIGlzIGFuIGVtaXR0ZXItaW50ZXJuYWwgZW1iZWRkZWQgZ2xvYmFsLCBhbmQgbm90IHVzZWQgYnkgdGhlCi8vLyBydW50aW1lLiBUaGUgY29uc3RhbnQgcmVtYWlucyBpbiB0aGlzIGZpbGUgdG8gbWFrZSBzdXJlIHRoYXQgb3RoZXIgZW1iZWRkZWQKLy8vIGdsb2JhbHMgZG9uJ3QgY2xhc2ggd2l0aCBpdC4KY29uc3QgUFJFQ09NUElMRUQgPSAncHJlY29tcGlsZWQnOwoKLy8vIEFuIGVtaXR0ZXItaW50ZXJuYWwgZW1iZWRkZWQgZ2xvYmFsLiBUaGlzIGdsb2JhbCBpcyBub3QgdXNlZCBieSB0aGUgcnVudGltZS4KY29uc3QgRklOSVNIRURfQ0xBU1NFUyA9ICdmaW5pc2hlZENsYXNzZXMnOwoKLy8vIEEgSmF2YVNjcmlwdCBvYmplY3QgbGl0ZXJhbCB0aGF0IG1hcHMgdGhlIChtaW5pZmllZCkgSmF2YVNjcmlwdCBjb25zdHJ1Y3RvcgovLy8gbmFtZSAoYXMgZ2l2ZW4gYnkgW0pzQnVpbHRpbi5yYXdSdGlUb0pzQ29uc3RydWN0b3JOYW1lXSB0byB0aGUKLy8vIEphdmFTY3JpcHQgY29uc3RydWN0b3IuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGJ5IHJlZmxlY3Rpb24uCmNvbnN0IEFMTF9DTEFTU0VTID0gJ2FsbENsYXNzZXMnOwoKLy8vIEEgbWFwIGZyb20gZWxlbWVudCB0byB0eXBlIGluZm9ybWF0aW9uLgovLy8KLy8vIFRoaXMgZW1iZWRkZWQgZ2xvYmFsIGlzIG9ubHkgdXNlZCBieSByZWZsZWN0aW9uLgpjb25zdCBUWVBFX0lORk9STUFUSU9OID0gJ3R5cGVJbmZvcm1hdGlvbic7CgovLy8gQSBtYXAgZnJvbSBzdGF0aWNzIHRvIHRoZWlyIGRlc2NyaXB0b3JzLgovLy8KLy8vIFRoaXMgZW1iZWRkZWQgZ2xvYmFsIGlzIG9ubHkgdXNlZCBieSByZWZsZWN0aW9uLgpjb25zdCBTVEFUSUNTID0gJ3N0YXRpY3MnOwoKLy8vIEFuIGFycmF5IG9mIGxpYnJhcnkgZGVzY3JpcHRvcnMuCi8vLwovLy8gVGhlIGRlc2NyaXB0b3IgY29udGFpbnMgaW5mb3JtYXRpb24gc3VjaCBhcyBuYW1lLCB1cmksIGNsYXNzZXMsIC4uLgovLy8KLy8vIFRoaXMgZW1iZWRkZWQgZ2xvYmFsIGlzIG9ubHkgdXNlZCBieSByZWZsZWN0aW9uLgpjb25zdCBMSUJSQVJJRVMgPSAnbGlicmFyaWVzJzsKCi8vLyBBIG1hcCBmcm9tIGxhenkgc3RhdGljcyB0byB0aGVpciBpbml0aWFsaXplcnMuCi8vLwovLy8gVGhpcyBlbWJlZGRlZCBnbG9iYWwgaXMgb25seSB1c2VkIGJ5IHJlZmxlY3Rpb24uCmNvbnN0IExBWklFUyA9ICdsYXppZXMnOwoKLy8vIE5hbWVzIHRoYXQgYXJlIHN1cHBvcnRlZCBieSBbSlNfR0VUX05BTUVdLgovLyBUT0RPKGhlcmh1dCk6IE1ha2UgZW50cmllcyBsb3dlciBjYXNlIChhcyBpbiBmaWVsZHMpIGFuZCBmaW5kIGEgYmV0dGVyIG5hbWUuCmVudW0gSnNHZXROYW1lIHsKICBHRVRURVJfUFJFRklYLAogIFNFVFRFUl9QUkVGSVgsCiAgQ0FMTF9QUkVGSVgsCiAgQ0FMTF9QUkVGSVgwLAogIENBTExfUFJFRklYMSwKICBDQUxMX1BSRUZJWDIsCiAgQ0FMTF9QUkVGSVgzLAogIENBTExfUFJFRklYNCwKICBDQUxMX1BSRUZJWDUsCiAgQ0FMTF9DQVRDSF9BTEwsCiAgUkVGTEVDVEFCTEUsCiAgQ0xBU1NfREVTQ1JJUFRPUl9QUk9QRVJUWSwKICBSRVFVSVJFRF9QQVJBTUVURVJfUFJPUEVSVFksCiAgREVGQVVMVF9WQUxVRVNfUFJPUEVSVFksCiAgQ0FMTF9OQU1FX1BST1BFUlRZLAogIERFRkVSUkVEX0FDVElPTl9QUk9QRVJUWSwKCiAgLy8vIFByZWZpeCB1c2VkIGZvciBnZW5lcmF0ZWQgdHlwZSBhcmd1bWVudCBzdWJzdGl0dXRpb25zIG9uIGNsYXNzZXMuCiAgT1BFUkFUT1JfQVNfUFJFRklYLAoKICAvLy8gTmFtZSB1c2VkIGZvciBnZW5lcmF0ZWQgZnVuY3Rpb24gdHlwZXMgb24gY2xhc3NlcyBhbmQgbWV0aG9kcy4KICBTSUdOQVRVUkVfTkFNRSwKCiAgLy8vIE5hbWUgb2YgSmF2YVNjcmlwdCBwcm9wZXJ0eSB1c2VkIHRvIHN0b3JlIHJ1bnRpbWUtdHlwZSBpbmZvcm1hdGlvbiBvbgogIC8vLyBpbnN0YW5jZXMgb2YgcGFyYW1ldGVyaXplZCBjbGFzc2VzLgogIFJUSV9OQU1FLAoKICAvLy8gTmFtZSB1c2VkIHRvIHRhZyB0eXBlZGVmcy4KICBUWVBFREVGX1RBRywKCiAgLy8vIE5hbWUgdXNlZCB0byB0YWcgYSBmdW5jdGlvbiB0eXBlLgogIEZVTkNUSU9OX1RZUEVfVEFHLAoKICAvLy8gTmFtZSB1c2VkIHRvIHRhZyBib3VuZHMgb2YgYSBnZW5lcmljIGZ1bmN0aW9uIHR5cGUuIElmIGJvdW5kcyBhcmUgcHJlc2VudCwKICAvLy8gdGhlIHByb3BlcnR5IHZhbHVlIGlzIGFuIEFycmF5IG9mIGJvdW5kcyAodGhlIGxlbmd0aCBnaXZlcyB0aGUgbnVtYmVyIG9mCiAgLy8vIHR5cGUgcGFyYW1ldGVycykuIElmIGFic2VudCwgdGhlIHR5cGUgaXMgbm90IGEgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlLgogIEZVTkNUSU9OX1RZUEVfR0VORVJJQ19CT1VORFNfVEFHLAoKICAvLy8gTmFtZSB1c2VkIHRvIHRhZyB2b2lkIHJldHVybiBpbiBmdW5jdGlvbiB0eXBlIHJlcHJlc2VudGF0aW9ucyBpbgogIC8vLyBKYXZhU2NyaXB0LgogIEZVTkNUSU9OX1RZUEVfVk9JRF9SRVRVUk5fVEFHLAoKICAvLy8gTmFtZSB1c2VkIHRvIHRhZyByZXR1cm4gdHlwZXMgaW4gZnVuY3Rpb24gdHlwZSByZXByZXNlbnRhdGlvbnMgaW4KICAvLy8gSmF2YVNjcmlwdC4KICBGVU5DVElPTl9UWVBFX1JFVFVSTl9UWVBFX1RBRywKCiAgLy8vIE5hbWUgdXNlZCB0byB0YWcgcmVxdWlyZWQgcGFyYW1ldGVycyBpbiBmdW5jdGlvbiB0eXBlIHJlcHJlc2VudGF0aW9ucwogIC8vLyBpbiBKYXZhU2NyaXB0LgogIEZVTkNUSU9OX1RZUEVfUkVRVUlSRURfUEFSQU1FVEVSU19UQUcsCgogIC8vLyBOYW1lIHVzZWQgdG8gdGFnIG9wdGlvbmFsIHBhcmFtZXRlcnMgaW4gZnVuY3Rpb24gdHlwZSByZXByZXNlbnRhdGlvbnMKICAvLy8gaW4gSmF2YVNjcmlwdC4KICBGVU5DVElPTl9UWVBFX09QVElPTkFMX1BBUkFNRVRFUlNfVEFHLAoKICAvLy8gTmFtZSB1c2VkIHRvIHRhZyBuYW1lZCBwYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIHR5cGUgcmVwcmVzZW50YXRpb25zIGluCiAgLy8vIEphdmFTY3JpcHQuCiAgRlVOQ1RJT05fVFlQRV9OQU1FRF9QQVJBTUVURVJTX1RBRywKCiAgLy8vIE5hbWUgdXNlZCB0byB0YWcgYSBGdXR1cmVPciB0eXBlLgogIEZVVFVSRV9PUl9UQUcsCgogIC8vLyBOYW1lIHVzZWQgdG8gdGFnIHR5cGUgYXJndW1lbnRzIHR5cGVzIGluIEZ1dHVyZU9yIHR5cGUgcmVwcmVzZW50YXRpb25zIGluCiAgLy8vIEphdmFTY3JpcHQuCiAgRlVUVVJFX09SX1RZUEVfQVJHVU1FTlRfVEFHLAoKICAvLy8gU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0eXBlIG9mIHRoZSBGdXR1cmUgY2xhc3MuCiAgRlVUVVJFX0NMQVNTX1RZUEVfTkFNRSwKCiAgLy8vIEZpZWxkIG5hbWUgdXNlZCBmb3IgZGV0ZXJtaW5pbmcgaWYgYW4gb2JqZWN0IG9yIGl0cyBpbnRlcmNlcHRvciBoYXMKICAvLy8gSmF2YVNjcmlwdCBpbmRleGluZyBiZWhhdmlvci4KICBJU19JTkRFWEFCTEVfRklFTERfTkFNRSwKCiAgLy8vIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHlwZSBvZiB0aGUgbnVsbCBjbGFzcy4KICBOVUxMX0NMQVNTX1RZUEVfTkFNRSwKCiAgLy8vIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IGNsYXNzLgogIE9CSkVDVF9DTEFTU19UWVBFX05BTUUsCgogIC8vLyBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHR5cGUgb2YgdGhlIGZ1bmN0aW9uIGNsYXNzLgogIEZVTkNUSU9OX0NMQVNTX1RZUEVfTkFNRSwKCiAgLy8vIFN0cmluZyByZWNpcGUgZm9yIHRoZSBbYm9vbF0gdHlwZS4KICBCT09MX1JFQ0lQRSwKCiAgLy8vIFN0cmluZyByZWNpcGUgZm9yIHRoZSBbZG91YmxlXSB0eXBlLgogIERPVUJMRV9SRUNJUEUsCgogIC8vLyBTdHJpbmcgcmVjaXBlIGZvciB0aGUgW2ludF0gdHlwZS4KICBJTlRfUkVDSVBFLAoKICAvLy8gU3RyaW5nIHJlY2lwZSBmb3IgdGhlIFtudW1dIHR5cGUuCiAgTlVNX1JFQ0lQRSwKCiAgLy8vIFN0cmluZyByZWNpcGUgZm9yIHRoZSBbU3RyaW5nXSB0eXBlLgogIFNUUklOR19SRUNJUEUsCgogIC8vLyBQcm9wZXJ0eSBuYW1lIGZvciBSdGkuX2lzIGZpZWxkLgogIFJUSV9GSUVMRF9JUywKfQoKZW51bSBKc0J1aWx0aW4gewogIC8vLyBSZXR1cm5zIHRoZSBKYXZhU2NyaXB0IGNvbnN0cnVjdG9yIGZ1bmN0aW9uIGZvciBEYXJ0J3MgT2JqZWN0IGNsYXNzLgogIC8vLyBUaGlzIGNhbiBiZSB1c2VkIGZvciB0eXBlIHRlc3RzLCBhcyBpbgogIC8vLwogIC8vLyAgICAgdmFyIGNvbnN0cnVjdG9yID0gSlNfQlVJTFRJTignJywgSnNCdWlsdGluLmRhcnRPYmplY3RDb25zdHJ1Y3Rvcik7CiAgLy8vICAgICBpZiAoSlMoJ2Jvb2wnLCAnIyBpbnN0YW5jZW9mICMnLCBvYmosIGNvbnN0cnVjdG9yKSkKICAvLy8gICAgICAgLi4uCiAgZGFydE9iamVjdENvbnN0cnVjdG9yLAoKICAvLy8gUmV0dXJucyB0aGUgSmF2YVNjcmlwdCBjb25zdHJ1Y3RvciBmdW5jdGlvbiBmb3IgdGhlIHJ1bnRpbWUncyBDbG9zdXJlCiAgLy8vIGNsYXNzLCB0aGUgYmFzZSBjbGFzcyBvZiBhbGwgY2xvc3VyZSBvYmplY3RzLiAgVGhpcyBjYW4gYmUgdXNlZCBmb3IgdHlwZQogIC8vLyB0ZXN0cywgYXMgaW4KICAvLy8KICAvLy8gICAgIHZhciBjb25zdHJ1Y3RvciA9IEpTX0JVSUxUSU4oJycsIEpzQnVpbHRpbi5kYXJ0Q2xvc3VyZUNvbnN0cnVjdG9yKTsKICAvLy8gICAgIGlmIChKUygnYm9vbCcsICcjIGluc3RhbmNlb2YgIycsIG9iaiwgY29uc3RydWN0b3IpKQogIC8vLyAgICAgICAuLi4KICBkYXJ0Q2xvc3VyZUNvbnN0cnVjdG9yLAoKICAvLy8gUmV0dXJucyB0aGUgSmF2YVNjcmlwdC1jb25zdHJ1Y3RvciBuYW1lIGdpdmVuIGFuIFtpc0NoZWNrUHJvcGVydHldLgogIC8vLwogIC8vLyBUaGlzIHJlbGllcyBvbiBhIGRldGVybWluaXN0aWMgZW5jb2Rpbmcgb2YgaXMtY2hlY2sgcHJvcGVydGllcyAoZm9yCiAgLy8vIGV4YW1wbGUgYCRpc0Zvb2AgZm9yIGEgY2xhc3MgYEZvb2ApLiBJbiBtaW5pZmllZCBjb2RlIHRoZSByZXR1cm5lZAogIC8vLyBjbGFzc25hbWUgaXMgdGhlIG1pbmlmaWVkIG5hbWUgb2YgdGhlIGNsYXNzLgogIC8vLwogIC8vLyAgICAgSlNfQlVJTFRJTigncmV0dXJuczpTdHJpbmc7ZGVwZW5kczpub25lO2VmZmVjdHM6bm9uZScsCiAgLy8vICAgICAgICAgICAgICAgIEpzQnVpbHRpbi5pc0NoZWNrUHJvcGVydHlUb0pzQ29uc3RydWN0b3JOYW1lLAogIC8vLyAgICAgICAgICAgICAgICBpc0NoZWNrUHJvcGVydHkpOwogIGlzQ2hlY2tQcm9wZXJ0eVRvSnNDb25zdHJ1Y3Rvck5hbWUsCgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHR5cGUgaXMgYSBmdW5jdGlvbiB0eXBlLiBSZXR1cm5zIGZhbHNlIGZvcgogIC8vLyB0aGUgb25lIGBGdW5jdGlvbmAgdHlwZSBzaW5nbGV0b24uIChTZWUgW2lzRnVuY3Rpb25UeXBlU2luZ2xldG9uXSkuCiAgLy8vCiAgLy8vICAgICBKU19CVUlMVElOKCdib29sJywgSnNCdWlsdGluLmlzRnVuY3Rpb25UeXBlLCBvKQogIGlzRnVuY3Rpb25UeXBlLAoKICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiB0eXBlIGlzIGEgRnV0dXJlT3IgdHlwZS4KICAvLy8KICAvLy8gICAgIEpTX0JVSUxUSU4oJ2Jvb2wnLCBKc0J1aWx0aW4uaXNGdXR1cmVPclR5cGUsIG8pCiAgaXNGdXR1cmVPclR5cGUsCgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHR5cGUgaXMgdGhlIGB2b2lkYCB0eXBlLgogIC8vLwogIC8vLyAgICAgSlNfQlVJTFRJTignYm9vbCcsIEpzQnVpbHRpbi5pc1ZvaWRUeXBlLCBvKQogIGlzVm9pZFR5cGUsCgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHR5cGUgaXMgdGhlIGBkeW5hbWljYCB0eXBlLgogIC8vLwogIC8vLyAgICAgSlNfQlVJTFRJTignYm9vbCcsIEpzQnVpbHRpbi5pc0R5bmFtaWNUeXBlLCBvKQogIGlzRHluYW1pY1R5cGUsCgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHR5cGUgaXMgYSB0eXBlIGFyZ3VtZW50IG9mIGEganMtaW50ZXJvcCBjbGFzcwogIC8vLyBvciBhIHN1cGVydHlwZSBvZiBhIGpzLWludGVyb3AgY2xhc3MuCiAgLy8vCiAgLy8vICAgICBKU19CVUlMVElOKCdib29sJywgSnNCdWlsdGluLmlzSnNJbnRlcm9wVHlwZUFyZ3VtZW50LCBvKQogIGlzSnNJbnRlcm9wVHlwZUFyZ3VtZW50LAoKICAvLy8gUmV0dXJucyB0aGUgSmF2YVNjcmlwdC1jb25zdHJ1Y3RvciBuYW1lIGdpdmVuIGFuIHJ0aSBlbmNvZGluZy4KICAvLy8KICAvLy8gICAgIEpTX0JVSUxUSU4oJ1N0cmluZycsIEpzQnVpbHRpbi5yYXdSdGlUb0pzQ29uc3RydWN0b3JOYW1lLCBydGkpCiAgcmF3UnRpVG9Kc0NvbnN0cnVjdG9yTmFtZSwKCiAgLy8vIFJldHVybnMgdGhlIHJhdyBydW50aW1lIHR5cGUgb2YgdGhlIGdpdmVuIG9iamVjdC4gVGhlIGdpdmVuIGFyZ3VtZW50CiAgLy8vIFtvXSBzaG91bGQgYmUgdGhlIGludGVyY2VwdG9yIChmb3Igbm9uLURhcnQgb2JqZWN0cykuCiAgLy8vCiAgLy8vICAgICBKU19CVUlMVElOKCcnLCBKc0J1aWx0aW4ucmF3UnVudGltZVR5cGUsIG8pCiAgcmF3UnVudGltZVR5cGUsCgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIGdpdmVuIHR5cGUgaXMgYSBzdWJ0eXBlIG9mIG90aGVyLgogIC8vLwogIC8vLyBUaGUgYXJndW1lbnQgYG90aGVyYCBpcyB0aGUgbmFtZSBvZiB0aGUgcG90ZW50aWFsIHN1cGVydHlwZS4gSXQgaXMKICAvLy8gY29tcHV0ZWQgYnkgYHJ1bnRpbWVUeXBlVG9TdHJpbmdgOwogIC8vLwogIC8vLyAqVGhlIGBvdGhlcmAgbmFtZSBtdXN0IGJlIHBhc3NlZCBpbiBiZWZvcmUgdGhlIGB0eXBlYC4qCiAgLy8vCiAgLy8vICAgICBKU19CVUlMVElOKCdyZXR1cm5zOmJvb2w7ZWZmZWN0czpub25lO2RlcGVuZHM6bm9uZScsCiAgLy8vICAgICAgICAgICAgICAgIEpzQnVpbHRpbi5pc1N1YnR5cGUsIG90aGVyLCB0eXBlKTsKICBpc1N1YnR5cGUsCgogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIHR5cGUgZXF1YWxzIHRoZSB0eXBlIGdpdmVuIGFzIHNlY29uZAogIC8vLyBhcmd1bWVudC4gVXNlIHRoZSBKU19HRVRfTkFNRSBoZWxwZXJzIHRvIGdldCB0aGUgdHlwZSByZXByZXNlbnRhdGlvbgogIC8vLyBmb3IgdmFyaW91cyBEYXJ0IGNsYXNzZXMuCiAgLy8vCiAgLy8vICAgICBKU19CVUlMVElOKCdyZXR1cm5zOmJvb2w7ZWZmZWN0czpub25lO2RlcGVuZHM6bm9uZScsCiAgLy8vICAgICAgICAgICAgICAgIEpzQnVpbHRpbi5pc0Z1bmN0aW9uVHlwZUxpdGVyYWwsIHR5cGUsIG5hbWUpOwogIGlzR2l2ZW5UeXBlUnRpLAoKICAvLy8gUmV0dXJucyB0aGUgbWV0YWRhdGEgb2YgdGhlIGdpdmVuIFtpbmRleF0uCiAgLy8vCiAgLy8vICAgICBKU19CVUlMVElOKCdyZXR1cm5zOnZhcjtlZmZlY3RzOm5vbmU7ZGVwZW5kczpub25lJywKICAvLy8gICAgICAgICAgICAgICAgSnNCdWlsdGluLmdldE1ldGFkYXRhLCBpbmRleCk7CiAgZ2V0TWV0YWRhdGEsCgogIC8vLyBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSBnaXZlbiBbaW5kZXhdLgogIC8vLwogIC8vLyAgICAgSlNfQlVJTFRJTigncmV0dXJuczp2YXI7ZWZmZWN0czpub25lO2RlcGVuZHM6bm9uZScsCiAgLy8vICAgICAgICAgICAgICAgIEpzQnVpbHRpbi5nZXRUeXBlLCBpbmRleCk7CiAgZ2V0VHlwZSwKfQoKLy8vIE5hbWVzIG9mIGZpZWxkcyBvZiB0aGUgUnRpIFVuaXZlcnNlIG9iamVjdC4KY2xhc3MgUnRpVW5pdmVyc2VGaWVsZE5hbWVzIHsKICBzdGF0aWMgU3RyaW5nIGV2YWxDYWNoZSA9ICdlQyc7CiAgc3RhdGljIFN0cmluZyB0eXBlUnVsZXMgPSAndFInOwogIHN0YXRpYyBTdHJpbmcgc2hhcmVkRW1wdHlBcnJheSA9ICdzRUEnOwp9CoHGAE5OPAFLDgRQIwRIIQFFBE5MKQRMIDgBSQ0ETkgETjgETCA0AUsXBEkSPAEzBE0+PAEyBEwMHQFLFARQFwFABEwrLgFBBE4hMwFDBExLBEMmAU5MFAQuMQFOSyAESk0tBC4eAUEETRgELkotKQE5BEpLBC5KLSIBUDI3AVATBE4KOAE6BEkoATsEUU8xBDw3ATgEUAQ8LwEwBFAEQU5PSikEPDMBHgRKSDUEPDcBTgQ8JwFGEQQ8MQFQIwQ8BExQITQBLQQ7JQFNEwRIPgQsBExQISMBUSwBUEMcBDUiASwENSwBLQQ1GwElBEgENR8BMwQ1GQEvUBEREQ8QEBAQEBASDx0fGxYcAUgWAUUSAUwqDAEhDwEoFQFRT0wkAUcSIQFIEiEBTBUpAUwVKQFMEiYBKBEBUBIfAT0aAUokGwE7GAE9GgE/HAEpDwErEQEoDgEoDgErEQEnEAIBEUstBk0+EBkBTE8TBk4+EBoBSgZKSTMGQUMnJgFLSgY6EgE5BjoSATkGNg4BPAY5EQFOLAZDGwFFBkkdAUs8BjYSATwGSSkGPgY/OA0BRUsgBj9DEgExBj40DwEtBj4wCwIBMB4iIioCAS1wYWNrYWdlOmpzX3J1bnRpbWUvc2hhcmVkL2VtYmVkZGVkX25hbWVzLmRhcnQsc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvbmF0aXZlL2pzLmRhcnSkbS8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NpZGVfZWZmZWN0cy5kYXJ0JyBzaG93IFNpZGVFZmZlY3RzOwppbXBvcnQgJ2JlaGF2aW9yLmRhcnQnOwoKY2xhc3MgSGFzQ2FwdHVyZWRQbGFjZWhvbGRlcnMgZXh0ZW5kcyBqcy5CYXNlVmlzaXRvciB7CiAgSGFzQ2FwdHVyZWRQbGFjZWhvbGRlcnMuXygpOwoKICBzdGF0aWMgYm9vbCBjaGVjayhqcy5Ob2RlIG5vZGUpIHsKICAgIEhhc0NhcHR1cmVkUGxhY2Vob2xkZXJzIHZpc2l0b3IgPSBuZXcgSGFzQ2FwdHVyZWRQbGFjZWhvbGRlcnMuXygpOwogICAgbm9kZS5hY2NlcHQodmlzaXRvcik7CiAgICByZXR1cm4gdmlzaXRvci5mb3VuZDsKICB9CgogIGludCBlbmNsb3NpbmdGdW5jdGlvbnMgPSAwOwogIGJvb2wgZm91bmQgPSBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgdmlzaXRGdW4oanMuRnVuIG5vZGUpIHsKICAgICsrZW5jbG9zaW5nRnVuY3Rpb25zOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogICAgLS1lbmNsb3NpbmdGdW5jdGlvbnM7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEludGVycG9sYXRlZE5vZGUoanMuSW50ZXJwb2xhdGVkTm9kZSBub2RlKSB7CiAgICBpZiAoZW5jbG9zaW5nRnVuY3Rpb25zID4gMCkgewogICAgICBmb3VuZCA9IHRydWU7CiAgICB9CiAgfQp9CgpjbGFzcyBTaWRlRWZmZWN0c1Zpc2l0b3IgZXh0ZW5kcyBqcy5CYXNlVmlzaXRvciB7CiAgZmluYWwgU2lkZUVmZmVjdHMgc2lkZUVmZmVjdHM7CiAgU2lkZUVmZmVjdHNWaXNpdG9yKHRoaXMuc2lkZUVmZmVjdHMpOwoKICB2b2lkIHZpc2l0KGpzLk5vZGUgbm9kZSkgewogICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGl0ZXJhbEV4cHJlc3Npb24oanMuTGl0ZXJhbEV4cHJlc3Npb24gbm9kZSkgewogICAgc2lkZUVmZmVjdHMuc2V0QWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPblNvbWV0aGluZygpOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdExpdGVyYWxTdGF0ZW1lbnQoanMuTGl0ZXJhbFN0YXRlbWVudCBub2RlKSB7CiAgICBzaWRlRWZmZWN0cy5zZXRBbGxTaWRlRWZmZWN0cygpOwogICAgc2lkZUVmZmVjdHMuc2V0RGVwZW5kc09uU29tZXRoaW5nKCk7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXNzaWdubWVudChqcy5Bc3NpZ25tZW50IG5vZGUpIHsKICAgIHNpZGVFZmZlY3RzLnNldENoYW5nZXNTdGF0aWNQcm9wZXJ0eSgpOwogICAgc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc0luc3RhbmNlUHJvcGVydHkoKTsKICAgIHNpZGVFZmZlY3RzLnNldENoYW5nZXNJbmRleCgpOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlSW5pdGlhbGl6YXRpb24oanMuVmFyaWFibGVJbml0aWFsaXphdGlvbiBub2RlKSB7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q2FsbChqcy5DYWxsIG5vZGUpIHsKICAgIHNpZGVFZmZlY3RzLnNldEFsbFNpZGVFZmZlY3RzKCk7CiAgICBzaWRlRWZmZWN0cy5zZXREZXBlbmRzT25Tb21ldGhpbmcoKTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCaW5hcnkoanMuQmluYXJ5IG5vZGUpIHsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUaHJvdyhqcy5UaHJvdyBub2RlKSB7CiAgICAvLyBUT0RPKG5nZW9mZnJheSk6IEluY29ycG9yYXRlIGEgbWF5VGhyb3cgZmxhZyBpbiB0aGUKICAgIC8vIFtTaWRlRWZmZWN0c10gY2xhc3MuCiAgICBzaWRlRWZmZWN0cy5zZXRBbGxTaWRlRWZmZWN0cygpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5ldyhqcy5OZXcgbm9kZSkgewogICAgc2lkZUVmZmVjdHMuc2V0QWxsU2lkZUVmZmVjdHMoKTsKICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPblNvbWV0aGluZygpOwogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFByZWZpeChqcy5QcmVmaXggbm9kZSkgewogICAgaWYgKG5vZGUub3AgPT0gJ2RlbGV0ZScpIHsKICAgICAgc2lkZUVmZmVjdHMuc2V0Q2hhbmdlc1N0YXRpY1Byb3BlcnR5KCk7CiAgICAgIHNpZGVFZmZlY3RzLnNldENoYW5nZXNJbnN0YW5jZVByb3BlcnR5KCk7CiAgICAgIHNpZGVFZmZlY3RzLnNldENoYW5nZXNJbmRleCgpOwogICAgfQogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFZhcmlhYmxlVXNlKGpzLlZhcmlhYmxlVXNlIG5vZGUpIHsKICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmUoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQb3N0Zml4KGpzLlBvc3RmaXggbm9kZSkgewogICAgbm9kZS52aXNpdENoaWxkcmVuKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEFjY2Vzcyhqcy5Qcm9wZXJ0eUFjY2VzcyBub2RlKSB7CiAgICBzaWRlRWZmZWN0cy5zZXREZXBlbmRzT25JbmRleFN0b3JlKCk7CiAgICBzaWRlRWZmZWN0cy5zZXREZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmUoKTsKICAgIHNpZGVFZmZlY3RzLnNldERlcGVuZHNPblN0YXRpY1Byb3BlcnR5U3RvcmUoKTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9Cn0KCi8vLyBUaHJvd0JlaGF2aW9yVmlzaXRvciBnZW5lcmF0ZXMgYSBOYXRpdmVUaHJvd0JlaGF2aW9yIGRlc2NyaWJpbmcgdGhlCi8vLyBleGNlcHRpb24gYmVoYXZpb3Igb2YgYSBKYXZhU2NyaXB0IGV4cHJlc3Npb24uCi8vLwovLy8gVGhlIHJlc3VsdCBpcyBzZW1pLWNvbnNlcnZhdGl2ZSwgZ2l2aW5nIHJlYXNvbmFibGUgcmVzdWx0cyBmb3IgbWFueSBzaW1wbGUKLy8vIEpTIGZyYWdtZW50cy4gVGhlIG5vbi1jb25zZXJ2YXRpdmUgcGFydCBpcyB0aGUgYXNzdW1wdGlvbiB0aGF0IGJpbmFyeQovLy8gb3BlcmF0b3JzIGFyZSB1c2VkIG9uICdnb29kJyBvcGVyYW5kcyB0aGF0IGRvIG5vdCBmb3JjZSBhcmJpdHJhcnkgY29kZSB0byBiZQovLy8gZXhlY3V0ZWQgdmlhIGNvbnZlcnNpb25zICh2YWx1ZU9mKCkgYW5kIHRvU3RyaW5nKCkgbWV0aG9kcykuCi8vLwovLy8gSW4gbWFueSBjYXNlcyBhIEpTIGZyYWdtZW50IGhhcyBtb3JlIHByZWNpc2UgYmVoYXZpb3IuIEluIHRoZXNlIGNhc2VzIHRoZQovLy8gYmVoYXZpb3Igc2hvdWxkIGJlIGRlc2NyaWJlZCBhcyBhIHByb3BlcnR5IG9mIHRoZSBKUyBmcmFnbWVudC4gRm9yIGV4YW1wbGUsCi8vLyBPYmplY3Qua2V5cygjKSBoYXMgYSBUeXBlRXJyb3Igb24gbnVsbCAvIHVuZGVmaW5lZCwgd2hpY2ggY2FuIG9ubHkgYmUga25vd24KLy8vIGluIHRoZSBjYWxsaW5nIGNvbnRleHQuCi8vLwpjbGFzcyBUaHJvd0JlaGF2aW9yVmlzaXRvciBleHRlbmRzIGpzLkJhc2VWaXNpdG9yPE5hdGl2ZVRocm93QmVoYXZpb3I+IHsKICBUaHJvd0JlaGF2aW9yVmlzaXRvcigpOwoKICBOYXRpdmVUaHJvd0JlaGF2aW9yIGFuYWx5emUoanMuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gdmlzaXQobm9kZSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgY29tYmluZWQgYmVoYXZpb3Igb2Ygc2VxdWVudGlhbCBleGVjdXRpb24gb2YgY29kZSBoYXZpbmcKICAvLy8gYmVoYXZpb3IgW2ZpcnN0XSBmb2xsb3dlZCBieSBjb2RlIGhhdmluZyBiZWhhdmlvciBbc2Vjb25kXS4KICBzdGF0aWMgTmF0aXZlVGhyb3dCZWhhdmlvciBzZXF1ZW5jZSgKICAgICAgTmF0aXZlVGhyb3dCZWhhdmlvciBmaXJzdCwgTmF0aXZlVGhyb3dCZWhhdmlvciBzZWNvbmQpIHsKICAgIHJldHVybiBmaXJzdC50aGVuKHNlY29uZCk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgY29tYmluZWQgYmVoYXZpb3Igb2YgYSBjaG9pY2UgYmV0d2VlbiB0d28gcGF0aHMgd2l0aCBiZWhhdmlvcnMKICAvLy8gW2ZpcnN0XSBhbmQgW3NlY29uZF0uCiAgc3RhdGljIE5hdGl2ZVRocm93QmVoYXZpb3IgY2hvaWNlKAogICAgICBOYXRpdmVUaHJvd0JlaGF2aW9yIGZpcnN0LCBOYXRpdmVUaHJvd0JlaGF2aW9yIHNlY29uZCkgewogICAgcmV0dXJuIGZpcnN0Lm9yKHNlY29uZCk7CiAgfQoKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0KGpzLk5vZGUgbm9kZSkgewogICAgcmV0dXJuIG5vZGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlVGhyb3dCZWhhdmlvciB2aXNpdE5vZGUoanMuTm9kZSBub2RlKSB7CiAgICByZXR1cm4gTmF0aXZlVGhyb3dCZWhhdmlvci5NQVk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0TGl0ZXJhbChqcy5MaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBOYXRpdmVUaHJvd0JlaGF2aW9yLk5FVkVSOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlVGhyb3dCZWhhdmlvciB2aXNpdEludGVycG9sYXRlZEV4cHJlc3Npb24oanMuSW50ZXJwb2xhdGVkTm9kZSBub2RlKSB7CiAgICByZXR1cm4gTmF0aXZlVGhyb3dCZWhhdmlvci5ORVZFUjsKICB9CgogIEBvdmVycmlkZQogIE5hdGl2ZVRocm93QmVoYXZpb3IgdmlzaXRJbnRlcnBvbGF0ZWRTZWxlY3Rvcihqcy5JbnRlcnBvbGF0ZWROb2RlIG5vZGUpIHsKICAgIHJldHVybiBOYXRpdmVUaHJvd0JlaGF2aW9yLk5FVkVSOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlVGhyb3dCZWhhdmlvciB2aXNpdEFycmF5SW5pdGlhbGl6ZXIoanMuQXJyYXlJbml0aWFsaXplciBub2RlKSB7CiAgICByZXR1cm4gbm9kZS5lbGVtZW50cy5tYXAodmlzaXQpLmZvbGQoTmF0aXZlVGhyb3dCZWhhdmlvci5ORVZFUiwgc2VxdWVuY2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlVGhyb3dCZWhhdmlvciB2aXNpdEFycmF5SG9sZShqcy5BcnJheUhvbGUgbm9kZSkgewogICAgcmV0dXJuIE5hdGl2ZVRocm93QmVoYXZpb3IuTkVWRVI7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0T2JqZWN0SW5pdGlhbGl6ZXIoanMuT2JqZWN0SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgcmV0dXJuIG5vZGUucHJvcGVydGllcy5tYXAodmlzaXQpLmZvbGQoTmF0aXZlVGhyb3dCZWhhdmlvci5ORVZFUiwgc2VxdWVuY2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlVGhyb3dCZWhhdmlvciB2aXNpdFByb3BlcnR5KGpzLlByb3BlcnR5IG5vZGUpIHsKICAgIHJldHVybiBzZXF1ZW5jZSh2aXNpdChub2RlLm5hbWUpLCB2aXNpdChub2RlLnZhbHVlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0QXNzaWdubWVudChqcy5Bc3NpZ25tZW50IG5vZGUpIHsKICAgIC8vIFRPRE8oc3JhKTogQ2FuIHdlIG1ha2UgIiMucCA9ICMiIGJlIG51bGwoMSk/CiAgICByZXR1cm4gTmF0aXZlVGhyb3dCZWhhdmlvci5NQVk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0Q2FsbChqcy5DYWxsIG5vZGUpIHsKICAgIGpzLkV4cHJlc3Npb24gdGFyZ2V0ID0gbm9kZS50YXJnZXQ7CiAgICBpZiAodGFyZ2V0IGlzIGpzLlByb3BlcnR5QWNjZXNzICYmIF9pc0ZpcnN0SW50ZXJwb2xhdGVkUHJvcGVydHkodGFyZ2V0KSkgewogICAgICAvLyAjLmYoLi4uKTogRXZhbHVhdGUgc2VsZWN0b3IgJ2YnLCBkZXJlZmVyZW5jZSwgZXZhbHVhdGUgYXJndW1lbnRzLCBhbmQKICAgICAgLy8gZmluYWxseSBjYWxsIHRhcmdldC4KICAgICAgTmF0aXZlVGhyb3dCZWhhdmlvciByZXN1bHQgPQogICAgICAgICAgc2VxdWVuY2UodmlzaXQodGFyZ2V0LnNlbGVjdG9yKSwgTmF0aXZlVGhyb3dCZWhhdmlvci5OVUxMX05TTSk7CiAgICAgIGZvciAoanMuRXhwcmVzc2lvbiBhcmd1bWVudCBpbiBub2RlLmFyZ3VtZW50cykgewogICAgICAgIHJlc3VsdCA9IHNlcXVlbmNlKHJlc3VsdCwgdmlzaXQoYXJndW1lbnQpKTsKICAgICAgfQogICAgICByZXR1cm4gc2VxdWVuY2UocmVzdWx0LCBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWSk7IC8vIFRhcmdldCBtYXkgdGhyb3cuCiAgICB9CiAgICByZXR1cm4gTmF0aXZlVGhyb3dCZWhhdmlvci5NQVk7CiAgfQoKICBAb3ZlcnJpZGUKICBOYXRpdmVUaHJvd0JlaGF2aW9yIHZpc2l0TmV3KGpzLk5ldyBub2RlKSB7CiAgICAvLyBUT0RPKHNyYSk6IGBuZXcgQXJyYXkoeClgIHdoZXJlIGB4YCBpcyBhIHNtYWxsIG51bWJlci4KICAgIHJldHVybiBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWTsKICB9CgogIEBvdmVycmlkZQogIE5hdGl2ZVRocm93QmVoYXZpb3IgdmlzaXRCaW5hcnkoanMuQmluYXJ5IG5vZGUpIHsKICAgIE5hdGl2ZVRocm93QmVoYXZpb3IgbGVmdCA9IHZpc2l0KG5vZGUubGVmdCk7CiAgICBOYXRpdmVUaHJvd0JlaGF2aW9yIHJpZ2h0ID0gdmlzaXQobm9kZS5yaWdodCk7CiAgICBzd2l0Y2ggKG5vZGUub3ApIHsKICAgICAgLy8gV2UgbWFrZSB0aGUgbm9uLWNvbnNlcnZhdGl2ZSBhc3N1bXB0aW9uIHRoYXQgdGhlc2Ugb3BlcmF0aW9ucyBhcmUgbm90CiAgICAgIC8vIHVzZWQgaW4gd2F5cyB0aGF0IGZvcmNlIGNhbGxpbmcgYXJiaXRyYXJ5IGNvZGUgdmlhIHZhbHVlT2Ygb3IKICAgICAgLy8gdG9TdHJpbmcoKS4KICAgICAgY2FzZSAiKiI6CiAgICAgIGNhc2UgIi8iOgogICAgICBjYXNlICIlIjoKICAgICAgY2FzZSAiKyI6CiAgICAgIGNhc2UgIi0iOgogICAgICBjYXNlICI8PCI6CiAgICAgIGNhc2UgIj4+IjoKICAgICAgY2FzZSAiPj4+IjoKICAgICAgY2FzZSAiPCI6CiAgICAgIGNhc2UgIj4iOgogICAgICBjYXNlICI8PSI6CiAgICAgIGNhc2UgIj49IjoKICAgICAgY2FzZSAiPT0iOgogICAgICBjYXNlICI9PT0iOgogICAgICBjYXNlICIhPSI6CiAgICAgIGNhc2UgIiE9PSI6CiAgICAgIGNhc2UgIiYiOgogICAgICBjYXNlICJeIjoKICAgICAgY2FzZSAifCI6CiAgICAgICAgcmV0dXJuIHNlcXVlbmNlKGxlZnQsIHJpZ2h0KTsKCiAgICAgIGNhc2UgJywnOgogICAgICAgIHJldHVybiBzZXF1ZW5jZShsZWZ0LCByaWdodCk7CgogICAgICBjYXNlICImJiI6CiAgICAgIGNhc2UgInx8IjoKICAgICAgICByZXR1cm4gY2hvaWNlKGxlZnQsIHNlcXVlbmNlKGxlZnQsIHJpZ2h0KSk7CgogICAgICBjYXNlICJpbnN0YW5jZW9mIjoKICAgICAgY2FzZSAiaW4iOgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIE5hdGl2ZVRocm93QmVoYXZpb3IgdmlzaXRUaHJvdyhqcy5UaHJvdyBub2RlKSB7CiAgICByZXR1cm4gc2VxdWVuY2UodmlzaXQobm9kZS5leHByZXNzaW9uKSwgTmF0aXZlVGhyb3dCZWhhdmlvci5NQVkpOwogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlVGhyb3dCZWhhdmlvciB2aXNpdFByZWZpeChqcy5QcmVmaXggbm9kZSkgewogICAgaWYgKG5vZGUub3AgPT0gJ3R5cGVvZicgJiYgbm9kZS5hcmd1bWVudCBpcyBqcy5WYXJpYWJsZVVzZSkKICAgICAgcmV0dXJuIE5hdGl2ZVRocm93QmVoYXZpb3IuTkVWRVI7CiAgICBOYXRpdmVUaHJvd0JlaGF2aW9yIHJlc3VsdCA9IHZpc2l0KG5vZGUuYXJndW1lbnQpOwogICAgc3dpdGNoIChub2RlLm9wKSB7CiAgICAgIGNhc2UgJysnOgogICAgICBjYXNlICctJzoKICAgICAgY2FzZSAnISc6CiAgICAgIGNhc2UgJ34nOgogICAgICBjYXNlICd2b2lkJzoKICAgICAgY2FzZSAndHlwZW9mJzoKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBOYXRpdmVUaHJvd0JlaGF2aW9yLk1BWTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIE5hdGl2ZVRocm93QmVoYXZpb3IgdmlzaXRWYXJpYWJsZVVzZShqcy5WYXJpYWJsZVVzZSBub2RlKSB7CiAgICAvLyBXZSBjb3VsZCBnZXQgYSBSZWZlcmVuY2VFcnJvciB1bmxlc3MgdGhlIHZhcmlhYmxlIGlzIGluIHNjb3BlLiBUaGUgQVNUCiAgICAvLyBjb3VsZCBkaXN0aW5ndWlzaCBpbi1zY29wZSBhbmQgb3V0LW9mIHNjb3BlIHJlZmVyZW5jZXMuIEZvciBKUyBmcmFnbWVudHMsCiAgICAvLyB0aGUgb25seSB1c2Ugb2YgVmFyaWFibGVVc2Ugc2hvdWxkIGJlIGZvciBnbG9iYWwgcmVmZXJlbmNlcy4gQ2VydGFpbgogICAgLy8gZ2xvYmFsIG5hbWVzIGFyZSBhbG1vc3QgY2VydGFpbmx5IG5vdCByZWZlcmVuY2UgZXJyb3JzLCBlLmcgJ0FycmF5Jy4KICAgIHN3aXRjaCAobm9kZS5uYW1lKSB7CiAgICAgIGNhc2UgJ0FycmF5JzoKICAgICAgY2FzZSAnTWF0aCc6CiAgICAgIGNhc2UgJ09iamVjdCc6CiAgICAgICAgcmV0dXJuIE5hdGl2ZVRocm93QmVoYXZpb3IuTkVWRVI7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIE5hdGl2ZVRocm93QmVoYXZpb3IuTUFZOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgTmF0aXZlVGhyb3dCZWhhdmlvciB2aXNpdEFjY2Vzcyhqcy5Qcm9wZXJ0eUFjY2VzcyBub2RlKSB7CiAgICBqcy5Ob2RlIHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKICAgIE5hdGl2ZVRocm93QmVoYXZpb3IgZmlyc3QgPSB2aXNpdChyZWNlaXZlcik7CiAgICBOYXRpdmVUaHJvd0JlaGF2aW9yIHNlY29uZCA9IHZpc2l0KG5vZGUuc2VsZWN0b3IpOwoKICAgIGlmIChfaXNGaXJzdEludGVycG9sYXRlZFByb3BlcnR5KG5vZGUpKSB7CiAgICAgIGZpcnN0ID0gTmF0aXZlVGhyb3dCZWhhdmlvci5OVUxMX05TTTsKICAgIH0gZWxzZSB7CiAgICAgIGZpcnN0ID0gTmF0aXZlVGhyb3dCZWhhdmlvci5NQVk7CiAgICB9CgogICAgcmV0dXJuIHNlcXVlbmNlKGZpcnN0LCBzZWNvbmQpOwogIH0KCiAgYm9vbCBfaXNGaXJzdEludGVycG9sYXRlZFByb3BlcnR5KGpzLlByb3BlcnR5QWNjZXNzIG5vZGUpIHsKICAgIGpzLk5vZGUgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgaWYgKHJlY2VpdmVyIGlzIGpzLkludGVycG9sYXRlZEV4cHJlc3Npb24gJiYKICAgICAgICByZWNlaXZlci5pc1Bvc2l0aW9uYWwgJiYKICAgICAgICByZWNlaXZlci5uYW1lT3JQb3NpdGlvbiA9PSAwKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQqBVABOTjwBHjkYATcfASRHGhoEAR4WAQwaGh4aBAEMNCIUBgQCATIhKAEdFwQBDDslKR4EAQw5JSkeBAEMLSwuIx4EAQxFHgQBDCElKR4EAQwlHgQBDCM7HCUEAQwfJSkeBAEMJR8uMCUGHgQBDC8zBAEMJx4EAQwtKjUzHgQCAUgzBE9KUUEETlBQHARJGgEuGAQBS0InPx8EAVEcJT8dBAEsHgQBDDAkBAEMNiYEAQxOJgQBDEwmBAEMSE8EAQw6JgQBDEpRBAEMODoEAQw8NCQEAQwwKE9PHiNKNzQITQYkBAEMLj4kBAEMNDEzF09HFRAQEBAQERESEBARERESERIQEBAmARAmARERNAEZEQ8oBgQBDDJGBAEMNEAoNxcQEBAQExUXDygGBAEMPk5RTEwZFBMVKg8oBgQBDDwmMTcBLiwNJwYBJAQBPiYxISgTBhIEAgEjcGFja2FnZTpjb21waWxlci9zcmMvbmF0aXZlL2pzLmRhcnQ7c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvcnVudGltZV90eXBlX2FuYWx5c2lzLmRhcnS5zi8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKCmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnOwppbXBvcnQgJ3V0aWwuZGFydCc7CgovLy8gRW51bSBmb3IgcmVjb2duaXplZCB1c2Uga2luZHMgb2YgYE9iamVjdC5ydW50aW1lVHlwZWAuCmVudW0gUnVudGltZVR5cGVVc2VLaW5kIHsKICAvLy8gVW5rbm93biB1c2Ugb2YgYE9iamVjdC5ydW50aW1lVHlwZWAuIFRoaXMgaXMgdGhlIGZhbGxiYWNrIHZhbHVlIGlmIHRoZQogIC8vLyB1c2FnZSBkaWRuJ3QgbWF0Y2ggYW55IG9mIHRoZSByZWNvZ25pemVkIHBhdHRlcm5zLgogIHVua25vd24sCgogIC8vLyBgT2JqZWN0LnJ1bnRpbWVUeXBlYCB1c2VkIGluIGEgcGF0dGVybiBsaWtlCiAgLy8vIGBhLnJ1bnRpbWVUeXBlID09IGIucnVudGltZVR5cGVgLgogIGVxdWFscywKCiAgLy8vIGBPYmplY3QucnVudGltZVR5cGVgIHVzZWQgaW4gYSBwYXR0ZXJuIGxpa2UgYCcke2UucnVudGltZVR5cGV9J2Agb3IKICAvLy8gYGUucnVudGltZVR5cGUudG9TdHJpbmcoKWAuCiAgc3RyaW5nLAp9CgovLy8gRGF0YSBvYmplY3QgdXNlIGZvciBjb21wdXRpbmcgc3RhdGljIHR5cGUgaW5mb3JtYXRpb24gb24gdXNlcyBvZgovLy8gYE9iamVjdC5ydW50aW1lVHlwZWAuCmNsYXNzIFJ1bnRpbWVUeXBlVXNlRGF0YSB7CiAgLy8vIFRoZSB1c2Uga2luZCBvZiBgT2JqZWN0LnJ1bnRpbWVUeXBlYC4KICBmaW5hbCBSdW50aW1lVHlwZVVzZUtpbmQga2luZDsKCiAgLy8vIFRoZSBwcm9wZXJ0eSBnZXQgZm9yIHRoZSBsZWZ0IChvciBzaW5nbGUpIG9jY3VycmVuY2Ugb2YgYC5ydW50aW1lVHlwZWAuCiAgZmluYWwgaXIuUHJvcGVydHlHZXQgbGVmdFJ1bnRpbWVUeXBlRXhwcmVzc2lvbjsKCiAgLy8vIFRoZSByZWNlaXZlciBleHByZXNzaW9uLgogIGZpbmFsIGlyLkV4cHJlc3Npb24gcmVjZWl2ZXI7CgogIC8vLyBUaGUgc3RhdGljIHR5cGUgb2YgdGhlIHJlY2VpdmVyIGV4cHJlc3Npb24uIFRoaXMgaXMgc2V0IGluIHRoZSBzdGF0aWMgdHlwZQogIC8vLyB2aXNpdG9yLgogIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZTsKCiAgLy8vIFRoZSBwcm9wZXJ0eSBnZXQgZm9yIHRoZSByaWdodCBvY2N1cnJlbmNlIG9mIGAucnVudGltZVR5cGVgIHdoZW4gW2tpbmRdCiAgLy8vIGlzIGBSdW50aW1lVHlwZVVzZUtpbmQuZXF1YWxzYC4KICBmaW5hbCBpci5Qcm9wZXJ0eUdldCByaWdodFJ1bnRpbWVUeXBlRXhwcmVzc2lvbjsKCiAgLy8vIFRoZSBhcmd1bWVudCBleHByZXNzaW9uIGlmIFtraW5kXSBpcyBgUnVudGltZVR5cGVVc2VLaW5kLmVxdWFsc2AuCiAgZmluYWwgaXIuRXhwcmVzc2lvbiBhcmd1bWVudDsKCiAgLy8vIFRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgYXJndW1lbnQgZXhwcmVzc2lvbi4gVGhpcyBpcyBzZXQgaW4gdGhlIHN0YXRpYyB0eXBlCiAgLy8vIHZpc2l0b3IuCiAgaXIuRGFydFR5cGUgYXJndW1lbnRUeXBlOwoKICBSdW50aW1lVHlwZVVzZURhdGEodGhpcy5raW5kLCB0aGlzLmxlZnRSdW50aW1lVHlwZUV4cHJlc3Npb24sIHRoaXMucmVjZWl2ZXIsCiAgICAgIHRoaXMucmlnaHRSdW50aW1lVHlwZUV4cHJlc3Npb24sIHRoaXMuYXJndW1lbnQpOwoKICBib29sIGdldCBpc0NvbXBsZXRlIHsKICAgIHN3aXRjaCAoa2luZCkgewogICAgICBjYXNlIFJ1bnRpbWVUeXBlVXNlS2luZC51bmtub3duOgogICAgICBjYXNlIFJ1bnRpbWVUeXBlVXNlS2luZC5zdHJpbmc6CiAgICAgICAgcmV0dXJuIHJlY2VpdmVyVHlwZSAhPSBudWxsOwogICAgICBjYXNlIFJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHM6CiAgICAgICAgcmV0dXJuIHJlY2VpdmVyVHlwZSAhPSBudWxsICYmIGFyZ3VtZW50VHlwZSAhPSBudWxsOwogICAgfQogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgUnVudGltZVR5cGVVc2VLaW5kICRraW5kLiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICJSdW50aW1lVHlwZVVzZURhdGEoa2luZD0ka2luZCwiCiAgICAgICAgInJlY2VpdmVyR2V0PSRsZWZ0UnVudGltZVR5cGVFeHByZXNzaW9uLHJlY2VpdmVyPSRyZWNlaXZlciwiCiAgICAgICAgInJlY2VpdmVyVHlwZT0kcmVjZWl2ZXJUeXBlLGFyZ3VtZW50R2V0PSRyaWdodFJ1bnRpbWVUeXBlRXhwcmVzc2lvbiwiCiAgICAgICAgImFyZ3VtZW50PSRhcmd1bWVudCxhcmd1bWVudFR5cGU9JGFyZ3VtZW50VHlwZSkiOwogIH0KfQoKLy8vIENvbXB1dGVzIHRoZSBbUnVudGltZVR5cGVVc2VEYXRhXSBjb3JyZXNwb25kaW5nIHRvIHRoZSBgZS5ydW50aW1lVHlwZWAKLy8vIFtub2RlXS4KLy8vCi8vLyBbY2FjaGVdIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgb25seSBvbmUgW1J1bnRpbWVUeXBlVXNlRGF0YV0gb2JqZWN0IGlzCi8vLyBjcmVhdGVkIHBlciBjYXNlLCBldmVuIGZvciB0aGUgYD09YCBjYXNlLgpSdW50aW1lVHlwZVVzZURhdGEgY29tcHV0ZVJ1bnRpbWVUeXBlVXNlKAogICAgTWFwPGlyLlByb3BlcnR5R2V0LCBSdW50aW1lVHlwZVVzZURhdGE+IGNhY2hlLCBpci5Qcm9wZXJ0eUdldCBub2RlKSB7CiAgUnVudGltZVR5cGVVc2VEYXRhIHJlY2VpdmVyRGF0YSA9IGNhY2hlW25vZGVdOwogIGlmIChyZWNlaXZlckRhdGEgIT0gbnVsbCkgcmV0dXJuIHJlY2VpdmVyRGF0YTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtub2RlXSBpcyBvZiB0aGUgZm9ybSBgZS5ydW50aW1lVHlwZWAuCiAgYm9vbCBpc0dldFJ1bnRpbWVUeXBlKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIHJldHVybiBub2RlIGlzIGlyLlByb3BlcnR5R2V0ICYmIG5vZGUubmFtZS5uYW1lID09IElkZW50aWZpZXJzLnJ1bnRpbWVUeXBlXzsKICB9CgogIC8vLyBSZXR1cm5zIFtub2RlXSBpZiBbbm9kZV0gaXMgb2YgdGhlIGZvcm0gYGUucnVudGltZVR5cGVgIGFuZCBgbnVsbGAKICAvLy8gb3RoZXJ3aXNlLgogIGlyLlByb3BlcnR5R2V0IGFzR2V0UnVudGltZVR5cGUoaXIuVHJlZU5vZGUgbm9kZSkgewogICAgcmV0dXJuIGlzR2V0UnVudGltZVR5cGUobm9kZSkgPyBub2RlIDogbnVsbDsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbbm9kZV0gaXMgb2YgdGhlIGZvcm0gYGUudG9TdHJpbmcoKWAuCiAgYm9vbCBpc0ludm9rZVRvU3RyaW5nKGlyLlRyZWVOb2RlIG5vZGUpIHsKICAgIHJldHVybiBub2RlIGlzIGlyLk1ldGhvZEludm9jYXRpb24gJiYgbm9kZS5uYW1lLm5hbWUgPT0gJ3RvU3RyaW5nJzsKICB9CgogIGFzc2VydChpc0dldFJ1bnRpbWVUeXBlKG5vZGUpKTsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3BlY2lhbC1jYXNlIGB0aGlzLnJ1bnRpbWVUeXBlYC4KICBpci5Qcm9wZXJ0eUdldCByZWNlaXZlckdldDsKICBpci5FeHByZXNzaW9uIHJlY2VpdmVyOwogIGlyLlByb3BlcnR5R2V0IGFyZ3VtZW50R2V0OwogIGlyLkV4cHJlc3Npb24gYXJndW1lbnQ7CiAgUnVudGltZVR5cGVVc2VLaW5kIGtpbmQ7CgogIGlmIChub2RlLnJlY2VpdmVyIGlzIGlyLlZhcmlhYmxlR2V0ICYmCiAgICAgIG5vZGUucGFyZW50IGlzIGlyLkNvbmRpdGlvbmFsRXhwcmVzc2lvbiAmJgogICAgICBub2RlLnBhcmVudC5wYXJlbnQgaXMgaXIuTGV0KSB7CiAgICBOdWxsQXdhcmVFeHByZXNzaW9uIG51bGxBd2FyZSA9IGdldE51bGxBd2FyZUV4cHJlc3Npb24obm9kZS5wYXJlbnQucGFyZW50KTsKICAgIGlmIChudWxsQXdhcmUgIT0gbnVsbCkgewogICAgICAvLyBUaGUgbm9kZSBpcyBvZiB0aGUgZm9ybToKICAgICAgLy8KICAgICAgLy8gICAgIGxldCAjdDEgPSBlIGluICN0MSA9PSBudWxsID8gbnVsbCA6ICN0MS5ydW50aW1lVHlwZQogICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KCiAgICAgIGlmIChudWxsQXdhcmUucGFyZW50IGlzIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gJiYKICAgICAgICAgIG51bGxBd2FyZS5wYXJlbnQucGFyZW50IGlzIGlyLkxldCkgewogICAgICAgIE51bGxBd2FyZUV4cHJlc3Npb24gb3V0ZXIgPQogICAgICAgICAgICBnZXROdWxsQXdhcmVFeHByZXNzaW9uKG51bGxBd2FyZS5wYXJlbnQucGFyZW50KTsKICAgICAgICBpZiAob3V0ZXIgIT0gbnVsbCAmJgogICAgICAgICAgICBvdXRlci5yZWNlaXZlciA9PSBudWxsQXdhcmUubGV0ICYmCiAgICAgICAgICAgIGlzSW52b2tlVG9TdHJpbmcob3V0ZXIuZXhwcmVzc2lvbikpIHsKICAgICAgICAgIC8vIERldGVjdGVkCiAgICAgICAgICAvLwogICAgICAgICAgLy8gICAgIGU/LnJ1bnRpbWVUeXBlPy50b1N0cmluZygpCiAgICAgICAgICAvLyAgICAgICAgXgogICAgICAgICAgLy8gZW5jb2RlZCBhcwogICAgICAgICAgLy8KICAgICAgICAgIC8vICAgICBsZXQgI3QyID0gKGxldCAjdDEgPSBlIGluICN0MSA9PSBudWxsID8gbnVsbCA6ICN0MS5ydW50aW1lVHlwZSkKICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgICAgICAgICAvLyAgICAgICAgaW4gI3QyID09IG51bGwgPyBudWxsIDogI3QyLnRvU3RyaW5nKCkKICAgICAgICAgIC8vCiAgICAgICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLnN0cmluZzsKICAgICAgICAgIHJlY2VpdmVyID0gbnVsbEF3YXJlLnJlY2VpdmVyOwogICAgICAgICAgcmVjZWl2ZXJHZXQgPSBub2RlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChudWxsQXdhcmUucGFyZW50IGlzIGlyLk1ldGhvZEludm9jYXRpb24pIHsKICAgICAgICBpci5NZXRob2RJbnZvY2F0aW9uIG1ldGhvZEludm9jYXRpb24gPSBudWxsQXdhcmUucGFyZW50OwogICAgICAgIGlmIChtZXRob2RJbnZvY2F0aW9uLnJlY2VpdmVyID09IG51bGxBd2FyZS5sZXQgJiYKICAgICAgICAgICAgbWV0aG9kSW52b2NhdGlvbi5uYW1lLm5hbWUgPT0gJz09JykgewogICAgICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgICAgIC8vCiAgICAgICAgICAvLyAgZTA/LnJ1bnRpbWVUeXBlID09IG90aGVyCiAgICAgICAgICBpci5Qcm9wZXJ0eUdldCBvdGhlckdldFJ1bnRpbWVUeXBlID0KICAgICAgICAgICAgICBhc0dldFJ1bnRpbWVUeXBlKG1ldGhvZEludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3QpOwogICAgICAgICAgaWYgKG90aGVyR2V0UnVudGltZVR5cGUgIT0gbnVsbCkgewogICAgICAgICAgICAvLyBEZXRlY3RlZAogICAgICAgICAgICAvLwogICAgICAgICAgICAvLyAgICAgZTA/LnJ1bnRpbWVUeXBlID09IGUxLnJ1bnRpbWVUeXBlCiAgICAgICAgICAgIC8vICAgICAgICAgXgogICAgICAgICAgICAvLyBlbmNvZGVkIGFzCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vICAgICAobGV0ICN0MSA9IGUwIGluICN0MSA9PSBudWxsID8gbnVsbCA6ICN0MS5ydW50aW1lVHlwZSkKICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgLy8gICAgICAgIC49PShlMS5ydW50aW1lVHlwZSkKICAgICAgICAgICAga2luZCA9IFJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHM7CiAgICAgICAgICAgIHJlY2VpdmVyID0gbnVsbEF3YXJlLnJlY2VpdmVyOwogICAgICAgICAgICByZWNlaXZlckdldCA9IG5vZGU7CiAgICAgICAgICAgIGFyZ3VtZW50ID0gb3RoZXJHZXRSdW50aW1lVHlwZS5yZWNlaXZlcjsKICAgICAgICAgICAgYXJndW1lbnRHZXQgPSBtZXRob2RJbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmZpcnN0OwogICAgICAgICAgfQoKICAgICAgICAgIE51bGxBd2FyZUV4cHJlc3Npb24gb3RoZXJOdWxsQXdhcmUgPSBnZXROdWxsQXdhcmVFeHByZXNzaW9uKAogICAgICAgICAgICAgIG1ldGhvZEludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3QpOwogICAgICAgICAgaWYgKG90aGVyTnVsbEF3YXJlICE9IG51bGwgJiYKICAgICAgICAgICAgICBpc0dldFJ1bnRpbWVUeXBlKG90aGVyTnVsbEF3YXJlLmV4cHJlc3Npb24pKSB7CiAgICAgICAgICAgIC8vIERldGVjdGVkCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vICAgICBlMD8ucnVudGltZVR5cGUgPT0gZTE/LnJ1bnRpbWVUeXBlCiAgICAgICAgICAgIC8vICAgICAgICAgXgogICAgICAgICAgICAvLyBlbmNvZGVkIGFzCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vICAgICAobGV0ICN0MSA9IGUwIGluICN0MSA9PSBudWxsID8gbnVsbCA6ICN0MS5ydW50aW1lVHlwZSkKICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAgICAgLy8gICAgICAgICAuPT0obGV0ICN0MiA9IGUxIGluICN0MiA9PSBudWxsID8gbnVsbCA6ICN0Mi5ydW50aW1lVHlwZSkKICAgICAgICAgICAgLy8KICAgICAgICAgICAga2luZCA9IFJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHM7CiAgICAgICAgICAgIHJlY2VpdmVyID0gbnVsbEF3YXJlLnJlY2VpdmVyOwogICAgICAgICAgICByZWNlaXZlckdldCA9IG5vZGU7CiAgICAgICAgICAgIGFyZ3VtZW50ID0gb3RoZXJOdWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgICAgIGFyZ3VtZW50R2V0ID0gb3RoZXJOdWxsQXdhcmUuZXhwcmVzc2lvbjsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGlzSW52b2tlVG9TdHJpbmcobnVsbEF3YXJlLnBhcmVudCkpIHsKICAgICAgICAgIC8vIERldGVjdGVkCiAgICAgICAgICAvLwogICAgICAgICAgLy8gICAgIGU/LnJ1bnRpbWVUeXBlLnRvU3RyaW5nKCkKICAgICAgICAgIC8vICAgICAgICBeCiAgICAgICAgICAvLyBlbmNvZGVkIGFzCiAgICAgICAgICAvLwogICAgICAgICAgLy8gICAgIChsZXQgI3QxID0gZSBpbiAjdDEgPT0gbnVsbCA/IG51bGwgOiAjdDEucnVudGltZVR5cGUpCiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAgIC8vICAgICAgICAgLnRvU3RyaW5nKCkKICAgICAgICAgIC8vCiAgICAgICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLnN0cmluZzsKICAgICAgICAgIHJlY2VpdmVyID0gbnVsbEF3YXJlLnJlY2VpdmVyOwogICAgICAgICAgcmVjZWl2ZXJHZXQgPSBub2RlOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChudWxsQXdhcmUucGFyZW50IGlzIGlyLkFyZ3VtZW50cyAmJgogICAgICAgICAgbnVsbEF3YXJlLnBhcmVudC5wYXJlbnQgaXMgaXIuTWV0aG9kSW52b2NhdGlvbikgewogICAgICAgIGlyLk1ldGhvZEludm9jYXRpb24gbWV0aG9kSW52b2NhdGlvbiA9IG51bGxBd2FyZS5wYXJlbnQucGFyZW50OwogICAgICAgIGlmIChtZXRob2RJbnZvY2F0aW9uLm5hbWUubmFtZSA9PSAnPT0nICYmCiAgICAgICAgICAgIG1ldGhvZEludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3QgPT0gbnVsbEF3YXJlLmxldCkgewogICAgICAgICAgLy8gW251bGxBd2FyZV0gaXMgdGhlIHJpZ2h0IGhhbmQgc2lkZSBvZiA9PS4KCiAgICAgICAgICBpci5Qcm9wZXJ0eUdldCBvdGhlckdldFJ1bnRpbWVUeXBlID0KICAgICAgICAgICAgICBhc0dldFJ1bnRpbWVUeXBlKG1ldGhvZEludm9jYXRpb24ucmVjZWl2ZXIpOwogICAgICAgICAgTnVsbEF3YXJlRXhwcmVzc2lvbiBvdGhlck51bGxBd2FyZSA9CiAgICAgICAgICAgICAgZ2V0TnVsbEF3YXJlRXhwcmVzc2lvbihtZXRob2RJbnZvY2F0aW9uLnJlY2VpdmVyKTsKCiAgICAgICAgICBpZiAob3RoZXJHZXRSdW50aW1lVHlwZSAhPSBudWxsKSB7CiAgICAgICAgICAgIC8vIERldGVjdGVkCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vICAgICBlMC5ydW50aW1lVHlwZSA9PSBlMT8ucnVudGltZVR5cGUKICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgICAgICAgICAgIC8vIGVuY29kZWQgYXMKICAgICAgICAgICAgLy8KICAgICAgICAgICAgLy8gICAgIGUwLnJ1bnRpbWVUeXBlLj09KAogICAgICAgICAgICAvLyAgICAgICAgIGxldCAjdDEgPSBlMSBpbiAjdDEgPT0gbnVsbCA/IG51bGwgOiAjdDEucnVudGltZVR5cGUpCiAgICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgICAgICAgICAgIGtpbmQgPSBSdW50aW1lVHlwZVVzZUtpbmQuZXF1YWxzOwogICAgICAgICAgICByZWNlaXZlciA9IG90aGVyR2V0UnVudGltZVR5cGUucmVjZWl2ZXI7CiAgICAgICAgICAgIHJlY2VpdmVyR2V0ID0gb3RoZXJHZXRSdW50aW1lVHlwZTsKICAgICAgICAgICAgYXJndW1lbnQgPSBudWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgICAgIGFyZ3VtZW50R2V0ID0gbm9kZTsKICAgICAgICAgIH0KCiAgICAgICAgICBpZiAob3RoZXJOdWxsQXdhcmUgIT0gbnVsbCAmJgogICAgICAgICAgICAgIGlzR2V0UnVudGltZVR5cGUob3RoZXJOdWxsQXdhcmUuZXhwcmVzc2lvbikpIHsKICAgICAgICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgICAgICAgLy8KICAgICAgICAgICAgLy8gICAgIGUwPy5ydW50aW1lVHlwZSA9PSBlMT8ucnVudGltZVR5cGUKICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAgICAgICAvLyBlbmNvZGVkIGFzCiAgICAgICAgICAgIC8vCiAgICAgICAgICAgIC8vICAgICAobGV0ICN0MSA9IGUwIGluICN0MSA9PSBudWxsID8gbnVsbCA6ICN0MS5ydW50aW1lVHlwZSkKICAgICAgICAgICAgLy8gICAgICAgICAuPT0obGV0ICN0MiA9IGUxIGluICN0MiA9PSBudWxsID8gbnVsbCA6ICN0Mi5ydW50aW1lVHlwZSkKICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgICAgICAgICAgIGtpbmQgPSBSdW50aW1lVHlwZVVzZUtpbmQuZXF1YWxzOwogICAgICAgICAgICByZWNlaXZlciA9IG90aGVyTnVsbEF3YXJlLnJlY2VpdmVyOwogICAgICAgICAgICByZWNlaXZlckdldCA9IG90aGVyTnVsbEF3YXJlLmV4cHJlc3Npb247CiAgICAgICAgICAgIGFyZ3VtZW50ID0gbnVsbEF3YXJlLnJlY2VpdmVyOwogICAgICAgICAgICBhcmd1bWVudEdldCA9IG5vZGU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKG51bGxBd2FyZS5wYXJlbnQgaXMgaXIuU3RyaW5nQ29uY2F0ZW5hdGlvbikgewogICAgICAgIC8vIERldGVjdGVkCiAgICAgICAgLy8KICAgICAgICAvLyAgICAgJyR7ZT8ucnVudGltZVR5cGV9JwogICAgICAgIC8vICAgICAgICAgICBeCiAgICAgICAgLy8gZW5jb2RlZCBhcwogICAgICAgIC8vCiAgICAgICAgLy8gICAgICcke2xldCAjdDEgPSBlIGluICN0MSA9PSBudWxsID8gbnVsbCA6ICN0MS5ydW50aW1lVHlwZX0nCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAgICAgICAga2luZCA9IFJ1bnRpbWVUeXBlVXNlS2luZC5zdHJpbmc7CiAgICAgICAgcmVjZWl2ZXIgPSBudWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgcmVjZWl2ZXJHZXQgPSBub2RlOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIERlZmF1bHQgdG8gdW5rbm93bgogICAgICAgIC8vCiAgICAgICAgLy8gICAgIGU/LnJ1bnRpbWVUeXBlCiAgICAgICAgLy8gICAgICAgIF4KICAgICAgICAvLyBlbmNvZGVkIGFzCiAgICAgICAgLy8KICAgICAgICAvLyAgICAgbGV0ICN0MSA9IGUgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnJ1bnRpbWVUeXBlCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLnVua25vd247CiAgICAgICAgcmVjZWl2ZXIgPSBudWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgcmVjZWl2ZXJHZXQgPSBub2RlOwogICAgICB9CiAgICB9CiAgfSBlbHNlIGlmIChub2RlLnBhcmVudCBpcyBpci5WYXJpYWJsZURlY2xhcmF0aW9uICYmCiAgICAgIG5vZGUucGFyZW50LnBhcmVudCBpcyBpci5MZXQpIHsKICAgIE51bGxBd2FyZUV4cHJlc3Npb24gbnVsbEF3YXJlID0gZ2V0TnVsbEF3YXJlRXhwcmVzc2lvbihub2RlLnBhcmVudC5wYXJlbnQpOwogICAgaWYgKG51bGxBd2FyZSAhPSBudWxsICYmIGlzSW52b2tlVG9TdHJpbmcobnVsbEF3YXJlLmV4cHJlc3Npb24pKSB7CiAgICAgIC8vIERldGVjdGVkCiAgICAgIC8vCiAgICAgIC8vICAgICBlLnJ1bnRpbWVUeXBlPy50b1N0cmluZygpCiAgICAgIC8vICAgICAgIF4KICAgICAgLy8gZW5jb2RlZCBhcwogICAgICAvLwogICAgICAvLyAgICAgbGV0ICN0MSA9IGUucnVudGltZVR5cGUgaW4gI3QxID09IG51bGwgPyBudWxsIDogI3QxLnRvU3RyaW5nKCkKICAgICAgLy8gICAgICAgICAgICAgICAgIF4KICAgICAga2luZCA9IFJ1bnRpbWVUeXBlVXNlS2luZC5zdHJpbmc7CiAgICAgIHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKICAgICAgcmVjZWl2ZXJHZXQgPSBub2RlOwogICAgfQogIH0gZWxzZSBpZiAobm9kZS5wYXJlbnQgaXMgaXIuTWV0aG9kSW52b2NhdGlvbikgewogICAgaXIuTWV0aG9kSW52b2NhdGlvbiBtZXRob2RJbnZvY2F0aW9uID0gbm9kZS5wYXJlbnQ7CiAgICBpZiAobWV0aG9kSW52b2NhdGlvbi5uYW1lLm5hbWUgPT0gJz09JyAmJgogICAgICAgIG1ldGhvZEludm9jYXRpb24ucmVjZWl2ZXIgPT0gbm9kZSkgewogICAgICAvLyBbbm9kZV0gaXMgdGhlIGxlZnQgaGFuZCBzaWRlIG9mID09LgoKICAgICAgaXIuUHJvcGVydHlHZXQgb3RoZXJHZXRSdW50aW1lVHlwZSA9CiAgICAgICAgICBhc0dldFJ1bnRpbWVUeXBlKG1ldGhvZEludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3QpOwogICAgICBOdWxsQXdhcmVFeHByZXNzaW9uIG51bGxBd2FyZSA9CiAgICAgICAgICBnZXROdWxsQXdhcmVFeHByZXNzaW9uKG1ldGhvZEludm9jYXRpb24uYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3QpOwogICAgICBpZiAob3RoZXJHZXRSdW50aW1lVHlwZSAhPSBudWxsKSB7CiAgICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgICAvLwogICAgICAgIC8vICAgICBlMC5ydW50aW1lVHlwZSA9PSBlMS5ydW50aW1lVHlwZQogICAgICAgIC8vICAgICAgICBeCiAgICAgICAgLy8gZW5jb2RlZCBhcwogICAgICAgIC8vCiAgICAgICAgLy8gICAgIGUwLnJ1bnRpbWVUeXBlLj09KGUxLnJ1bnRpbWVUeXBlKQogICAgICAgIC8vICAgICAgICBeCiAgICAgICAga2luZCA9IFJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHM7CiAgICAgICAgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgICAgIHJlY2VpdmVyR2V0ID0gbm9kZTsKICAgICAgICBhcmd1bWVudCA9IG90aGVyR2V0UnVudGltZVR5cGUucmVjZWl2ZXI7CiAgICAgICAgYXJndW1lbnRHZXQgPSBvdGhlckdldFJ1bnRpbWVUeXBlOwogICAgICB9IGVsc2UgaWYgKG51bGxBd2FyZSAhPSBudWxsICYmIGlzR2V0UnVudGltZVR5cGUobnVsbEF3YXJlLmV4cHJlc3Npb24pKSB7CiAgICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgICAvLwogICAgICAgIC8vICAgICBlMC5ydW50aW1lVHlwZSA9PSBlMT8ucnVudGltZVR5cGUKICAgICAgICAvLyAgICAgICAgXgogICAgICAgIC8vIGVuY29kZWQgYXMKICAgICAgICAvLwogICAgICAgIC8vICAgICBlMC5ydW50aW1lVHlwZS49PSgKICAgICAgICAvLyAgICAgICAgXgogICAgICAgIC8vICAgICAgICAgbGV0ICN0MSA9IGUxIGluICN0MSA9PSBudWxsID8gbnVsbCA6ICN0MS5ydW50aW1lVHlwZSkKICAgICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLmVxdWFsczsKICAgICAgICByZWNlaXZlciA9IG5vZGUucmVjZWl2ZXI7CiAgICAgICAgcmVjZWl2ZXJHZXQgPSBub2RlOwogICAgICAgIGFyZ3VtZW50ID0gbnVsbEF3YXJlLnJlY2VpdmVyOwogICAgICAgIGFyZ3VtZW50R2V0ID0gbnVsbEF3YXJlLmV4cHJlc3Npb247CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNJbnZva2VUb1N0cmluZyhub2RlLnBhcmVudCkpIHsKICAgICAgLy8gRGV0ZWN0ZWQKICAgICAgLy8KICAgICAgLy8gICAgIGUucnVudGltZVR5cGUudG9TdHJpbmcoKQogICAgICAvLyAgICAgICBeCiAgICAgIGtpbmQgPSBSdW50aW1lVHlwZVVzZUtpbmQuc3RyaW5nOwogICAgICByZWNlaXZlciA9IG5vZGUucmVjZWl2ZXI7CiAgICAgIHJlY2VpdmVyR2V0ID0gbm9kZTsKICAgIH0KICB9IGVsc2UgaWYgKG5vZGUucGFyZW50IGlzIGlyLkFyZ3VtZW50cyAmJgogICAgICBub2RlLnBhcmVudC5wYXJlbnQgaXMgaXIuTWV0aG9kSW52b2NhdGlvbikgewogICAgaXIuTWV0aG9kSW52b2NhdGlvbiBtZXRob2RJbnZvY2F0aW9uID0gbm9kZS5wYXJlbnQucGFyZW50OwogICAgaWYgKG1ldGhvZEludm9jYXRpb24ubmFtZS5uYW1lID09ICc9PScgJiYKICAgICAgICBtZXRob2RJbnZvY2F0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmZpcnN0ID09IG5vZGUpIHsKICAgICAgLy8gW25vZGVdIGlzIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgPT0uCiAgICAgIGlyLlByb3BlcnR5R2V0IG90aGVyR2V0UnVudGltZVR5cGUgPQogICAgICAgICAgYXNHZXRSdW50aW1lVHlwZShtZXRob2RJbnZvY2F0aW9uLnJlY2VpdmVyKTsKICAgICAgTnVsbEF3YXJlRXhwcmVzc2lvbiBudWxsQXdhcmUgPQogICAgICAgICAgZ2V0TnVsbEF3YXJlRXhwcmVzc2lvbihtZXRob2RJbnZvY2F0aW9uLnJlY2VpdmVyKTsKCiAgICAgIGlmIChvdGhlckdldFJ1bnRpbWVUeXBlICE9IG51bGwpIHsKICAgICAgICAvLyBEZXRlY3RlZAogICAgICAgIC8vCiAgICAgICAgLy8gICAgIGUwLnJ1bnRpbWVUeXBlID09IGUxLnJ1bnRpbWVUeXBlCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICAvLyBlbmNvZGVkIGFzCiAgICAgICAgLy8KICAgICAgICAvLyAgICAgZTAucnVudGltZVR5cGUuPT0oZTEucnVudGltZVR5cGUpCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIF4KICAgICAgICBraW5kID0gUnVudGltZVR5cGVVc2VLaW5kLmVxdWFsczsKICAgICAgICByZWNlaXZlciA9IG90aGVyR2V0UnVudGltZVR5cGUucmVjZWl2ZXI7CiAgICAgICAgcmVjZWl2ZXJHZXQgPSBvdGhlckdldFJ1bnRpbWVUeXBlOwogICAgICAgIGFyZ3VtZW50ID0gbm9kZS5yZWNlaXZlcjsKICAgICAgICBhcmd1bWVudEdldCA9IG5vZGU7CiAgICAgIH0gZWxzZSBpZiAobnVsbEF3YXJlICE9IG51bGwgJiYgaXNHZXRSdW50aW1lVHlwZShudWxsQXdhcmUuZXhwcmVzc2lvbikpIHsKICAgICAgICAvLyBEZXRlY3RlZAogICAgICAgIC8vCiAgICAgICAgLy8gICAgIGUwPy5ydW50aW1lVHlwZSA9PSBlMS5ydW50aW1lVHlwZQogICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAgIC8vIGVuY29kZWQgYXMKICAgICAgICAvLwogICAgICAgIC8vICAgICAobGV0ICN0MSA9IGUwIGluICN0MSA9PSBudWxsID8gbnVsbCA6ICN0MS5ydW50aW1lVHlwZSkKICAgICAgICAvLyAgICAgICAgIC49PShlMS5ydW50aW1lVHlwZSkKICAgICAgICAvLyAgICAgICAgICAgICAgICBeCiAgICAgICAga2luZCA9IFJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHM7CiAgICAgICAgcmVjZWl2ZXIgPSBudWxsQXdhcmUucmVjZWl2ZXI7CiAgICAgICAgcmVjZWl2ZXJHZXQgPSBudWxsQXdhcmUuZXhwcmVzc2lvbjsKICAgICAgICBhcmd1bWVudCA9IG5vZGUucmVjZWl2ZXI7CiAgICAgICAgYXJndW1lbnRHZXQgPSBub2RlOwogICAgICB9CiAgICB9CiAgfSBlbHNlIGlmIChub2RlLnBhcmVudCBpcyBpci5TdHJpbmdDb25jYXRlbmF0aW9uKSB7CiAgICAvLyBEZXRlY3RlZAogICAgLy8KICAgIC8vICAgICAnJHtlLnJ1bnRpbWVUeXBlfScKICAgIC8vICAgICAgICAgIF4KICAgIGtpbmQgPSBSdW50aW1lVHlwZVVzZUtpbmQuc3RyaW5nOwogICAgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgcmVjZWl2ZXJHZXQgPSBub2RlOwogIH0KCiAgaWYgKGtpbmQgPT0gbnVsbCkgewogICAgLy8gRGVmYXVsdCB0byB1bmtub3duCiAgICAvLwogICAgLy8gICAgIGUucnVudGltZVR5cGUKICAgIC8vICAgICAgIF4KICAgIGtpbmQgPSBSdW50aW1lVHlwZVVzZUtpbmQudW5rbm93bjsKICAgIHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKICAgIHJlY2VpdmVyR2V0ID0gbm9kZTsKICB9CgogIFJ1bnRpbWVUeXBlVXNlRGF0YSBkYXRhID0gbmV3IFJ1bnRpbWVUeXBlVXNlRGF0YSgKICAgICAga2luZCwgcmVjZWl2ZXJHZXQsIHJlY2VpdmVyLCBhcmd1bWVudEdldCwgYXJndW1lbnQpOwogIGNhY2hlW3JlY2VpdmVyR2V0XSA9IGRhdGE7CiAgaWYgKGFyZ3VtZW50R2V0ICE9IG51bGwpIHsKICAgIGNhY2hlW2FyZ3VtZW50R2V0XSA9IGRhdGE7CiAgfQoKICBhc3NlcnQocmVjZWl2ZXJHZXQgIT0gbnVsbCwgIk1pc3NpbmcgcmVjZWl2ZXJHZXQgaW4gJGRhdGEgZm9yICRub2RlLiIpOwogIGFzc2VydCghKGFyZ3VtZW50ICE9IG51bGwgJiYgYXJndW1lbnRHZXQgPT0gbnVsbCksCiAgICAgICJNaXNzaW5nIGFyZ3VtZW50R2V0IGluICRkYXRhIGZvciAkbm9kZS4iKTsKICBhc3NlcnQoCiAgICAgIHJlY2VpdmVyR2V0ICE9IGFyZ3VtZW50R2V0LCAiRHVwbGljYXRlIHByb3BlcnR5IGdldCBpbiAkZGF0YSBmb3IgJG5vZGUuIik7CiAgcmV0dXJuIGRhdGE7Cn0KgaEATk48ASgBHxQBOxpNOQsBMigKAUoiCgIBRRobLCEBTjIBHyABUQ8cAU4mMwFIIAFRDxwBTzcBGBQnJiUmPQZIBAEMFixFTjoEAgFLDARLLipKMTEBPyxRBAFJETYxBAE+LEgEASIBOx4aHhobASkxJlAdIglBNwE4LyQ9HS8yFg0sFhgNUUY7DSwpHgo8QToyFg0nL00tGA81GRoPSj8qLisgNUcMAUc8KD0YDzYZGg9KP1EPLisgMDUMORYNKxYYDUc4IQ0sKR4KNTxIMkw3AS87L0EBLRgPNSsaDyZNQi41LysgDAEoPRgPNiwaD0pRRi4wNSsgDAo/FAsjFxYLSDwqJxwPHgseFBYLQzUrJxwIBjYmUEcSCScRFAlMGyggGgYzOC4tLQErSSZPKRQLMBQWCzEUKiIcMStQFAsxFBYLIhRJKiIcJywIMBIJJhEoIBoGLDM/Lj8uKzcmPQEpFAswJhYLMSYqMSsiHFAUCzEnFgtGJxwqJywiHAgGNhAHHhImHhgEARYaBxkPJx4YBAE0Ox0dHwQBSjUyClEPAgEycGFja2FnZTpjb21waWxlci9zcmMvaXIvcnVudGltZV90eXBlX2FuYWx5c2lzLmRhcnQ3c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL2NvbGxlY3Rpb24uZGFydIM6Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmV4cG9ydCAic3JjL2FsZ29yaXRobXMuZGFydCI7CmV4cG9ydCAic3JjL2Nhbm9uaWNhbGl6ZWRfbWFwLmRhcnQiOwpleHBvcnQgInNyYy9jb21iaW5lZF93cmFwcGVycy9jb21iaW5lZF9pdGVyYWJsZS5kYXJ0IjsKZXhwb3J0ICJzcmMvY29tYmluZWRfd3JhcHBlcnMvY29tYmluZWRfbGlzdC5kYXJ0IjsKZXhwb3J0ICJzcmMvY29tYmluZWRfd3JhcHBlcnMvY29tYmluZWRfbWFwLmRhcnQiOwpleHBvcnQgInNyYy9jb21wYXJhdG9ycy5kYXJ0IjsKZXhwb3J0ICJzcmMvZXF1YWxpdHkuZGFydCI7CmV4cG9ydCAic3JjL2VxdWFsaXR5X21hcC5kYXJ0IjsKZXhwb3J0ICJzcmMvZXF1YWxpdHlfc2V0LmRhcnQiOwpleHBvcnQgInNyYy9mdW5jdGlvbnMuZGFydCI7CmV4cG9ydCAic3JjL2l0ZXJhYmxlX3ppcC5kYXJ0IjsKZXhwb3J0ICJzcmMvcHJpb3JpdHlfcXVldWUuZGFydCI7CmV4cG9ydCAic3JjL3F1ZXVlX2xpc3QuZGFydCI7CmV4cG9ydCAic3JjL3VuaW9uX3NldC5kYXJ0IjsKZXhwb3J0ICJzcmMvdW5pb25fc2V0X2NvbnRyb2xsZXIuZGFydCI7CmV4cG9ydCAic3JjL3VubW9kaWZpYWJsZV93cmFwcGVycy5kYXJ0IjsKZXhwb3J0ICJzcmMvd3JhcHBlcnMuZGFydCI7ChcATk48AR4lNzMyHxwgIB0gIh4dKCkcASJwYWNrYWdlOmNvbGxlY3Rpb24vY29sbGVjdGlvbi5kYXJ0N3Nka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9kYXJ0MmpzX2luZm8vbGliL3NyYy91dGlsLmRhcnSMrS8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanNfaW5mby5zcmMudXRpbDsKCmltcG9ydCAncGFja2FnZTpkYXJ0MmpzX2luZm8vaW5mby5kYXJ0JzsKCmltcG9ydCAnZ3JhcGguZGFydCc7CgovLy8gQ29tcHV0ZXMgYSBncmFwaCBvZiBkZXBlbmRlbmNpZXMgZnJvbSBbaW5mb10uCkdyYXBoPEluZm8+IGdyYXBoRnJvbUluZm8oQWxsSW5mbyBpbmZvKSB7CiAgcHJpbnQoJyAgaW5mbzogZGVwZW5kZW5jeSBncmFwaCBpbmZvcm1hdGlvbiBpcyB3b3JrIGluIHByb2dyZXNzIGFuZCcKICAgICAgJyBtaWdodCBiZSBpbmNvbXBsZXRlJyk7CiAgLy8gTm90ZTogd2UgYXJlIGNvbWJpbmluZyBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIHRoYXQgaXMgY29tcHV0ZWQgaW4gdHdvIHdheXMKICAvLyAoZnVuY3Rpb25JbmZvLnVzZXMgdnMgYWxsSW5mby5kZXBlbmRlbmNpZXMpLgogIC8vIFRPRE8oc2lnbXVuZCk6IGZpeCBpbmNvbnNpc3RlbmNpZXMgYmV0d2VlbiB0aGVzZSB0d28gd2F5cywgc3RpY2sgd2l0aCBvbmUKICAvLyBvZiB0aGVtLgogIC8vIFRPRE8oc2lnbXVuZCk6IGNyZWF0ZSBhIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIG9mIEluZm9HcmFwaCwgaW5zdGVhZCBvZgogIC8vIHVzaW5nIHRoZSBFZGdlTGlzdEdyYXBoLgogIHZhciBncmFwaCA9IG5ldyBFZGdlTGlzdEdyYXBoPEluZm8+KCk7CiAgZm9yICh2YXIgZiBpbiBpbmZvLmZ1bmN0aW9ucykgewogICAgZ3JhcGguYWRkTm9kZShmKTsKICAgIGZvciAodmFyIGcgaW4gZi51c2VzKSB7CiAgICAgIGdyYXBoLmFkZEVkZ2UoZiwgZy50YXJnZXQpOwogICAgfQogICAgaWYgKGluZm8uZGVwZW5kZW5jaWVzW2ZdICE9IG51bGwpIHsKICAgICAgZm9yICh2YXIgZyBpbiBpbmZvLmRlcGVuZGVuY2llc1tmXSkgewogICAgICAgIGdyYXBoLmFkZEVkZ2UoZiwgZyk7CiAgICAgIH0KICAgIH0KICB9CgogIGZvciAodmFyIGYgaW4gaW5mby5maWVsZHMpIHsKICAgIGdyYXBoLmFkZE5vZGUoZik7CiAgICBmb3IgKHZhciBnIGluIGYudXNlcykgewogICAgICBncmFwaC5hZGRFZGdlKGYsIGcudGFyZ2V0KTsKICAgIH0KICAgIGlmIChpbmZvLmRlcGVuZGVuY2llc1tmXSAhPSBudWxsKSB7CiAgICAgIGZvciAodmFyIGcgaW4gaW5mby5kZXBlbmRlbmNpZXNbZl0pIHsKICAgICAgICBncmFwaC5hZGRFZGdlKGYsIGcpOwogICAgICB9CiAgICB9CiAgfQoKICByZXR1cm4gZ3JhcGg7Cn0KCi8vLyBQcm92aWRlIGEgdW5pcXVlIGxvbmcgbmFtZSBhc3NvY2lhdGVkIHdpdGggW2luZm9dLgovLyBUT0RPKHNpZ211bmQpOiBndWFyYW50ZWUgdGhhdCB0aGUgbmFtZSBpcyBhY3R1YWxseSB1bmlxdWUuClN0cmluZyBsb25nTmFtZShJbmZvIGluZm8sIHtib29sIHVzZUxpYnJhcnlVcmk6IGZhbHNlLCBib29sIGZvcklkOiBmYWxzZX0pIHsKICB2YXIgaW5mb1BhdGggPSBbXTsKICB3aGlsZSAoaW5mbyAhPSBudWxsKSB7CiAgICBpbmZvUGF0aC5hZGQoaW5mbyk7CiAgICBpbmZvID0gaW5mby5wYXJlbnQ7CiAgfQogIHZhciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICB2YXIgZmlyc3QgPSB0cnVlOwogIGZvciAodmFyIHNlZ21lbnQgaW4gaW5mb1BhdGgucmV2ZXJzZWQpIHsKICAgIGlmICghZmlyc3QpIHNiLndyaXRlKCcuJyk7CiAgICAvLyBUT0RPKHNpZ211bmQpOiBlbnN1cmUgdGhhdCB0aGUgZmlyc3Qgc2VnbWVudCBpcyBhIExpYnJhcnlJbmZvLgogICAgLy8gYXNzZXJ0KCFmaXJzdCB8fCBzZWdtZW50IGlzIExpYnJhcnlJbmZvKTsKICAgIC8vICh0b2RheSBtaWdodCBub3QgYmUgdHJ1ZSBmb3IgZm9yIGNsb3N1cmUgY2xhc3NlcykuCiAgICBpZiAoc2VnbWVudCBpcyBMaWJyYXJ5SW5mbykgewogICAgICAvLyBUT0RPKGtldm1vbyk6IFJlbW92ZSB0aGlzIHdoZW4gZGFydDJqcyBjYW4gYmUgaW52b2tlZCB3aXRoIGFuIGFwcC1yb290CiAgICAgIC8vIGN1c3RvbSBVUkkKICAgICAgaWYgKHVzZUxpYnJhcnlVcmkgJiYgZm9ySWQgJiYgc2VnbWVudC51cmkuaXNTY2hlbWUoJ2ZpbGUnKSkgewogICAgICAgIGFzc2VydChVcmkuYmFzZS5pc1NjaGVtZSgnZmlsZScpKTsKICAgICAgICB2YXIgY3VycmVudEJhc2UgPSBVcmkuYmFzZS5wYXRoOwogICAgICAgIHZhciBzZWdtZW50U3RyaW5nID0gc2VnbWVudC51cmkucGF0aDsKCiAgICAgICAgLy8gSWYgbG9uZ05hbWUgaXMgYmVpbmcgY2FsbGVkIHRvIGNhbGN1bGF0ZSBhbiBlbGVtZW50IElEIChmb3JJZCA9IHRydWUpCiAgICAgICAgLy8gdGhlbiB1c2UgYSByZWxhdGl2ZSBwYXRoIGZvciB0aGUgbG9uZ05hbWUgY2FsY3VsYXRpb24KICAgICAgICAvLyBUaGlzIGFsbG93cyBhIG1vcmUgc3RhYmxlIElEIGZvciBjYXNlcyB3aGVuIGZpbGVzIGFyZSBnZW5lcmF0ZWQgaW50bwogICAgICAgIC8vIHRlbXAgZGlyZWN0b3JpZXMg4oCTIGUuZy4gd2l0aCBwa2c6YnVpbGRfd2ViX2NvbXBpbGVycwogICAgICAgIGlmIChzZWdtZW50U3RyaW5nLnN0YXJ0c1dpdGgoY3VycmVudEJhc2UpKSB7CiAgICAgICAgICBzZWdtZW50U3RyaW5nID0gc2VnbWVudFN0cmluZy5zdWJzdHJpbmcoY3VycmVudEJhc2UubGVuZ3RoKTsKICAgICAgICB9CgogICAgICAgIHNiLndyaXRlKHNlZ21lbnRTdHJpbmcpOwogICAgICB9IGVsc2UgewogICAgICAgIHNiLndyaXRlKHVzZUxpYnJhcnlVcmkgPyBzZWdtZW50LnVyaSA6IHNlZ21lbnQubmFtZSk7CiAgICAgIH0KICAgICAgc2Iud3JpdGUoJzo6Jyk7CiAgICB9IGVsc2UgewogICAgICBmaXJzdCA9IGZhbHNlOwogICAgICBzYi53cml0ZShzZWdtZW50Lm5hbWUpOwogICAgfQogIH0KICByZXR1cm4gc2IudG9TdHJpbmcoKTsKfQoKLy8vIFByb2R1Y2UgYSBzdHJpbmcgY29udGFpbmluZyBbdmFsdWVdIHBhZGRlZCB3aXRoIHdoaXRlIHNwYWNlIHVwIHRvIFtuXSBjaGFycy4KcGFkKHZhbHVlLCBuLCB7Ym9vbCByaWdodDogZmFsc2V9KSB7CiAgdmFyIHMgPSAnJHZhbHVlJzsKICBpZiAocy5sZW5ndGggPj0gbikgcmV0dXJuIHM7CiAgdmFyIHBhZCA9ICcgJyAqIChuIC0gcy5sZW5ndGgpOwogIHJldHVybiByaWdodCA/ICckcyRwYWQnIDogJyRwYWQkcyc7Cn0KZQBOTjwBHwEpARUBMipHH1AyTw5OHikiFhwiBigsHQgGBAEfFhwiBigsHQgGBAEQAgE3Pk0VGRgYBB8UKx9GMToiUBREKykuAVFBUEA1RwoBIQ8+CBYNFR4GBBgCAVElFB8iJgIBInBhY2thZ2U6ZGFydDJqc19pbmZvL3NyYy91dGlsLmRhcnQ+c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2RhcnQyanNfaW5mby9saWIvc3JjL2JpbmFyeS9zaW5rLmRhcnSsKS8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29udmVydCc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKCi8vLyBJbnRlcmZhY2UgZm9yIHNlcmlhbGl6YXRpb24uCi8vIFRPRE8oc2lnbXVuZCk6IHNoYXJlIHRoaXMgd2l0aCBwa2c6Y29tcGlsZXIvc3JjL3NlcmlhbGl6YXRpb24vKgphYnN0cmFjdCBjbGFzcyBEYXRhU2luayB7CiAgLy8vIFRoZSBhbW91bnQgb2YgZGF0YSB3cml0dGVuIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGUgdW5pdHMgaXMgYmFzZWQgb24gdGhlIHVuZGVybHlpbmcgZGF0YSBzdHJ1Y3R1cmUgZm9yIHRoaXMgZGF0YSBzaW5rLgogIGludCBnZXQgbGVuZ3RoOwoKICAvLy8gRmx1c2hlcyBhbnkgcGVuZGluZyBkYXRhIGFuZCBjbG9zZXMgdGhpcyBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIFRoZSBkYXRhIHNpbmsgY2FuIG5vIGxvbmdlciBiZSB3cml0dGVuIHRvIGFmdGVyIGNsb3NpbmcuCiAgdm9pZCBjbG9zZSgpOwoKICAvLy8gV3JpdGVzIGEgcmVmZXJlbmNlIHRvIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuIElmIFt2YWx1ZV0gaGFzIG5vdCB5ZXQKICAvLy8gYmVlbiBzZXJpYWxpemVkLCBbZl0gaXMgY2FsbGVkIHRvIHNlcmlhbGl6ZSB0aGUgdmFsdWUgaXRzZWxmLgogIHZvaWQgd3JpdGVDYWNoZWQ8RT4oRSB2YWx1ZSwgdm9pZCBmKEUgdmFsdWUpKTsKCiAgLy8vIFdyaXRlcyB0aGUgcG90ZW50aWFsbHkgYG51bGxgIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuIElmIFt2YWx1ZV0gaXMKICAvLy8gbm9uLW51bGwgW2ZdIGlzIGNhbGxlZCB0byB3cml0ZSB0aGUgbm9uLW51bGwgdmFsdWUgdG8gdGhlIGRhdGEgc2luay4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZFZhbHVlT3JOdWxsXS4KICB2b2lkIHdyaXRlVmFsdWVPck51bGw8RT4oRSB2YWx1ZSwgdm9pZCBmKEUgdmFsdWUpKTsKCiAgLy8vIFdyaXRlcyB0aGUgW3ZhbHVlc10gdG8gdGhpcyBkYXRhIHNpbmsgY2FsbGluZyBbZl0gdG8gd3JpdGUgZWFjaCB2YWx1ZSB0bwogIC8vLyB0aGUgZGF0YSBzaW5rLiBJZiBbYWxsb3dOdWxsXSBpcyBgdHJ1ZWAsIFt2YWx1ZXNdIGlzIGFsbG93ZWQgdG8gYmUgYG51bGxgLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkTGlzdF0uCiAgdm9pZCB3cml0ZUxpc3Q8RT4oSXRlcmFibGU8RT4gdmFsdWVzLCB2b2lkIGYoRSB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KTsKCiAgLy8vIFdyaXRlcyB0aGUgYm9vbGVhbiBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVCb29sKGJvb2wgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHRoZSBub24tbmVnYXRpdmUgaW50ZWdlciBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVJbnQoaW50IHZhbHVlKTsKCiAgLy8vIFdyaXRlcyB0aGUgcG90ZW50aWFsbHkgYG51bGxgIG5vbi1uZWdhdGl2ZSBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkSW50T3JOdWxsXS4KICB2b2lkIHdyaXRlSW50T3JOdWxsKGludCB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgdGhlIHN0cmluZyBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIHZvaWQgd3JpdGVTdHJpbmcoU3RyaW5nIHZhbHVlKTsKCiAgLy8vIFdyaXRlcyB0aGUgcG90ZW50aWFsbHkgYG51bGxgIHN0cmluZyBbdmFsdWVdIHRvIHRoaXMgZGF0YSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNvdXJjZS5yZWFkU3RyaW5nT3JOdWxsXS4KICB2b2lkIHdyaXRlU3RyaW5nT3JOdWxsKFN0cmluZyB2YWx1ZSk7CgogIC8vLyBXcml0ZXMgdGhlIHN0cmluZyBbdmFsdWVzXSB0byB0aGlzIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0gaXMgYHRydWVgLAogIC8vLyBbdmFsdWVzXSBpcyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZFN0cmluZ3NdLgogIHZvaWQgd3JpdGVTdHJpbmdzKEl0ZXJhYmxlPFN0cmluZz4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSk7CgogIC8vLyBXcml0ZXMgdGhlIFttYXBdIGZyb20gc3RyaW5nIHRvIFtWXSB2YWx1ZXMgdG8gdGhpcyBkYXRhIHNpbmssIGNhbGxpbmcgW2ZdCiAgLy8vIHRvIHdyaXRlIGVhY2ggdmFsdWUgdG8gdGhlIGRhdGEgc2luay4gSWYgW2FsbG93TnVsbF0gaXMgYHRydWVgLCBbbWFwXSBpcwogIC8vLyBhbGxvd2VkIHRvIGJlIGBudWxsYC4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTb3VyY2UucmVhZFN0cmluZ01hcF0uCiAgdm9pZCB3cml0ZVN0cmluZ01hcDxWPihNYXA8U3RyaW5nLCBWPiBtYXAsIHZvaWQgZihWIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pOwoKICAvLy8gV3JpdGVzIHRoZSBlbnVtIHZhbHVlIFt2YWx1ZV0gdG8gdGhpcyBkYXRhIHNpbmsuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2hhbmdlIHRoZSBzaWduYXR1cmUgdG8KICAvLyBgdm9pZCB3cml0ZUVudW08RSBleHRlbmRzIEVudW08RT4+KEUgdmFsdWUpO2Agd2hlbiBhbiBpbnRlcmZhY2UgZm9yIGVudW1zCiAgLy8gaXMgYWRkZWQgdG8gdGhlIGxhbmd1YWdlLgogIHZvaWQgd3JpdGVFbnVtKGR5bmFtaWMgdmFsdWUpOwoKICAvLy8gV3JpdGVzIHRoZSBVUkkgW3ZhbHVlXSB0byB0aGlzIGRhdGEgc2luay4KICB2b2lkIHdyaXRlVXJpKFVyaSB2YWx1ZSk7Cn0KCi8vLyBNaXhpbiB0aGF0IGltcGxlbWVudHMgYWxsIGNvbnZlbmllbmNlIG1ldGhvZHMgb2YgW0RhdGFTaW5rXS4KYWJzdHJhY3QgY2xhc3MgRGF0YVNpbmtNaXhpbiBpbXBsZW1lbnRzIERhdGFTaW5rIHsKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlSW50T3JOdWxsKGludCB2YWx1ZSkgewogICAgd3JpdGVCb29sKHZhbHVlICE9IG51bGwpOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgd3JpdGVJbnQodmFsdWUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZVN0cmluZ09yTnVsbChTdHJpbmcgdmFsdWUpIHsKICAgIHdyaXRlQm9vbCh2YWx1ZSAhPSBudWxsKTsKICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgIHdyaXRlU3RyaW5nKHZhbHVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVTdHJpbmdzKEl0ZXJhYmxlPFN0cmluZz4gdmFsdWVzLCB7Ym9vbCBhbGxvd051bGw6IGZhbHNlfSkgewogICAgaWYgKHZhbHVlcyA9PSBudWxsKSB7CiAgICAgIGFzc2VydChhbGxvd051bGwpOwogICAgICB3cml0ZUludCgwKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlSW50KHZhbHVlcy5sZW5ndGgpOwogICAgICBmb3IgKFN0cmluZyB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgICB3cml0ZVN0cmluZyh2YWx1ZSk7CiAgICAgIH0KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVTdHJpbmdNYXA8Vj4oTWFwPFN0cmluZywgVj4gbWFwLCB2b2lkIGYoViB2YWx1ZSksCiAgICAgIHtib29sIGFsbG93TnVsbDogZmFsc2V9KSB7CiAgICBpZiAobWFwID09IG51bGwpIHsKICAgICAgYXNzZXJ0KGFsbG93TnVsbCk7CiAgICAgIHdyaXRlSW50KDApOwogICAgfSBlbHNlIHsKICAgICAgd3JpdGVJbnQobWFwLmxlbmd0aCk7CiAgICAgIG1hcC5mb3JFYWNoKChTdHJpbmcga2V5LCBWIHZhbHVlKSB7CiAgICAgICAgd3JpdGVTdHJpbmcoa2V5KTsKICAgICAgICBmKHZhbHVlKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlTGlzdDxFPihJdGVyYWJsZTxFPiB2YWx1ZXMsIHZvaWQgZihFIHZhbHVlKSwKICAgICAge2Jvb2wgYWxsb3dOdWxsOiBmYWxzZX0pIHsKICAgIGlmICh2YWx1ZXMgPT0gbnVsbCkgewogICAgICBhc3NlcnQoYWxsb3dOdWxsKTsKICAgICAgd3JpdGVJbnQoMCk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZUludCh2YWx1ZXMubGVuZ3RoKTsKICAgICAgdmFsdWVzLmZvckVhY2goZik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVmFsdWVPck51bGw8RT4oRSB2YWx1ZSwgdm9pZCBmKEUgdmFsdWUpKSB7CiAgICB3cml0ZUJvb2wodmFsdWUgIT0gbnVsbCk7CiAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICBmKHZhbHVlKTsKICAgIH0KICB9Cn0KCi8vLyBEYXRhIHNpbmsgaGVscGVyIHRoYXQgY2Fub25pY2FsaXplcyBbRV0gdmFsdWVzIHVzaW5nIGluZGljZXMuCmNsYXNzIEluZGV4ZWRTaW5rPEU+IHsKICBmaW5hbCB2b2lkIEZ1bmN0aW9uKGludCkgX3dyaXRlSW50OwogIGZpbmFsIE1hcDxFLCBpbnQ+IF9jYWNoZSA9IHt9OwoKICBJbmRleGVkU2luayh0aGlzLl93cml0ZUludCk7CgogIC8vLyBXcml0ZSBhIHJlZmVyZW5jZSB0byBbdmFsdWVdIHRvIHRoZSBkYXRhIHNpbmsuCiAgLy8vCiAgLy8vIElmIFt2YWx1ZV0gaGFzIG5vdCBiZWVuIGNhbm9uaWNhbGl6ZWQgeWV0LCBbd3JpdGVWYWx1ZV0gaXMgY2FsbGVkIHRvCiAgLy8vIHNlcmlhbGl6ZSB0aGUgW3ZhbHVlXSBpdHNlbGYuCiAgdm9pZCB3cml0ZShFIHZhbHVlLCB2b2lkIHdyaXRlVmFsdWUoRSB2YWx1ZSkpIHsKICAgIGludCBpbmRleCA9IF9jYWNoZVt2YWx1ZV07CiAgICBpZiAoaW5kZXggPT0gbnVsbCkgewogICAgICBpbmRleCA9IF9jYWNoZS5sZW5ndGg7CiAgICAgIF9jYWNoZVt2YWx1ZV0gPSBpbmRleDsKICAgICAgX3dyaXRlSW50KGluZGV4KTsKICAgICAgd3JpdGVWYWx1ZSh2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICBfd3JpdGVJbnQoaW5kZXgpOwogICAgfQogIH0KfQoKLy8vIEJhc2UgaW1wbGVtZW50YXRpb24gb2YgW0RhdGFTaW5rXSB1c2luZyBbRGF0YVNpbmtNaXhpbl0gdG8gaW1wbGVtZW50Ci8vLyBjb252ZW5pZW5jZSBtZXRob2RzLgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdERhdGFTaW5rIGV4dGVuZHMgRGF0YVNpbmtNaXhpbiBpbXBsZW1lbnRzIERhdGFTaW5rIHsKICBJbmRleGVkU2luazxTdHJpbmc+IF9zdHJpbmdJbmRleDsKICBJbmRleGVkU2luazxVcmk+IF91cmlJbmRleDsKICBNYXA8VHlwZSwgSW5kZXhlZFNpbms+IF9nZW5lcmFsQ2FjaGVzID0ge307CgogIEFic3RyYWN0RGF0YVNpbmsoKSB7CiAgICBfc3RyaW5nSW5kZXggPSBuZXcgSW5kZXhlZFNpbms8U3RyaW5nPihfd3JpdGVJbnRJbnRlcm5hbCk7CiAgICBfdXJpSW5kZXggPSBuZXcgSW5kZXhlZFNpbms8VXJpPihfd3JpdGVJbnRJbnRlcm5hbCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlQ2FjaGVkPEU+KEUgdmFsdWUsIHZvaWQgZihFIHZhbHVlKSkgewogICAgSW5kZXhlZFNpbmsgc2luayA9CiAgICAgICAgX2dlbmVyYWxDYWNoZXNbRV0gPz89IG5ldyBJbmRleGVkU2luazxFPihfd3JpdGVJbnRJbnRlcm5hbCk7CiAgICBzaW5rLndyaXRlKHZhbHVlLCAodikgPT4gZih2KSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlRW51bShkeW5hbWljIHZhbHVlKSB7CiAgICBfd3JpdGVFbnVtSW50ZXJuYWwodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUJvb2woYm9vbCB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgX3dyaXRlSW50SW50ZXJuYWwodmFsdWUgPyAxIDogMCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHdyaXRlVXJpKFVyaSB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlICE9IG51bGwpOwogICAgX3dyaXRlVXJpKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgd3JpdGVTdHJpbmcoU3RyaW5nIHZhbHVlKSB7CiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CiAgICBfd3JpdGVTdHJpbmcodmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB3cml0ZUludChpbnQgdmFsdWUpIHsKICAgIGFzc2VydCh2YWx1ZSAhPSBudWxsKTsKICAgIGFzc2VydCh2YWx1ZSA+PSAwICYmIHZhbHVlID4+IDMwID09IDApOwogICAgX3dyaXRlSW50SW50ZXJuYWwodmFsdWUpOwogIH0KCiAgdm9pZCBfd3JpdGVTdHJpbmcoU3RyaW5nIHZhbHVlKSB7CiAgICBfc3RyaW5nSW5kZXgud3JpdGUodmFsdWUsIF93cml0ZVN0cmluZ0ludGVybmFsKTsKICB9CgogIHZvaWQgX3dyaXRlVXJpKFVyaSB2YWx1ZSkgewogICAgX3VyaUluZGV4LndyaXRlKHZhbHVlLCBfd3JpdGVVcmlJbnRlcm5hbCk7CiAgfQoKICAvLy8gQWN0dWFsIHNlcmlhbGl6YXRpb24gb2YgYSBVUkkgdmFsdWUsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgdm9pZCBfd3JpdGVVcmlJbnRlcm5hbChVcmkgdmFsdWUpOwoKICAvLy8gQWN0dWFsIHNlcmlhbGl6YXRpb24gb2YgYSBTdHJpbmcgdmFsdWUsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgdm9pZCBfd3JpdGVTdHJpbmdJbnRlcm5hbChTdHJpbmcgdmFsdWUpOwoKICAvLy8gQWN0dWFsIHNlcmlhbGl6YXRpb24gb2YgYSBub24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSwgaW1wbGVtZW50ZWQgYnkKICAvLy8gc3ViY2xhc3Nlcy4KICB2b2lkIF93cml0ZUludEludGVybmFsKGludCB2YWx1ZSk7CgogIC8vLyBBY3R1YWwgc2VyaWFsaXphdGlvbiBvZiBhbiBlbnVtIHZhbHVlLCBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgogIHZvaWQgX3dyaXRlRW51bUludGVybmFsKGR5bmFtaWMgdmFsdWUpOwp9CgovLy8gW0RhdGFTaW5rXSB0aGF0IHdyaXRlcyBkYXRhIGFzIGEgc2VxdWVuY2Ugb2YgYnl0ZXMuCi8vLwovLy8gVGhpcyBkYXRhIHNpbmsgd29ya3MgdG9nZXRoZXIgd2l0aCBbQmluYXJ5U291cmNlXS4KY2xhc3MgQmluYXJ5U2luayBleHRlbmRzIEFic3RyYWN0RGF0YVNpbmsgewogIGZpbmFsIFNpbms8TGlzdDxpbnQ+PiBzaW5rOwogIEJ1ZmZlcmVkU2luayBfYnVmZmVyZWRTaW5rOwogIGludCBfbGVuZ3RoID0gMDsKCiAgQmluYXJ5U2luayh0aGlzLnNpbmspIDogX2J1ZmZlcmVkU2luayA9IG5ldyBCdWZmZXJlZFNpbmsoc2luayk7CgogIEBvdmVycmlkZQogIHZvaWQgX3dyaXRlVXJpSW50ZXJuYWwoVXJpIHZhbHVlKSB7CiAgICBfd3JpdGVTdHJpbmcodmFsdWUudG9TdHJpbmcoKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF93cml0ZVN0cmluZ0ludGVybmFsKFN0cmluZyB2YWx1ZSkgewogICAgTGlzdDxpbnQ+IGJ5dGVzID0gdXRmOC5lbmNvZGUodmFsdWUpOwogICAgX3dyaXRlSW50SW50ZXJuYWwoYnl0ZXMubGVuZ3RoKTsKICAgIF9idWZmZXJlZFNpbmsuYWRkQnl0ZXMoYnl0ZXMpOwogICAgX2xlbmd0aCArPSBieXRlcy5sZW5ndGg7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIF93cml0ZUludEludGVybmFsKGludCB2YWx1ZSkgewogICAgYXNzZXJ0KHZhbHVlID49IDAgJiYgdmFsdWUgPj4gMzAgPT0gMCk7CiAgICBpZiAodmFsdWUgPCAweDgwKSB7CiAgICAgIF9idWZmZXJlZFNpbmsuYWRkQnl0ZSh2YWx1ZSk7CiAgICAgIF9sZW5ndGggKz0gMTsKICAgIH0gZWxzZSBpZiAodmFsdWUgPCAweDQwMDApIHsKICAgICAgX2J1ZmZlcmVkU2luay5hZGRCeXRlMigodmFsdWUgPj4gOCkgfCAweDgwLCB2YWx1ZSAmIDB4RkYpOwogICAgICBfbGVuZ3RoICs9IDI7CiAgICB9IGVsc2UgewogICAgICBfYnVmZmVyZWRTaW5rLmFkZEJ5dGU0KCh2YWx1ZSA+PiAyNCkgfCAweEMwLCAodmFsdWUgPj4gMTYpICYgMHhGRiwKICAgICAgICAgICh2YWx1ZSA+PiA4KSAmIDB4RkYsIHZhbHVlICYgMHhGRik7CiAgICAgIF9sZW5ndGggKz0gNDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgX3dyaXRlRW51bUludGVybmFsKGR5bmFtaWMgdmFsdWUpIHsKICAgIF93cml0ZUludEludGVybmFsKHZhbHVlLmluZGV4KTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfYnVmZmVyZWRTaW5rLmZsdXNoQW5kRGVzdHJveSgpOwogICAgX2J1ZmZlcmVkU2luayA9IG51bGw7CiAgICBzaW5rLmNsb3NlKCk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gdGhpcyBkYXRhIHNpbmsuCiAgaW50IGdldCBsZW5ndGggPT4gX2xlbmd0aDsKfQoKLy8vIFB1dHMgYSBidWZmZXIgaW4gZnJvbnQgb2YgYSBbU2luazxMaXN0PGludD4+XS4KLy8gVE9ETyhzaWdtdW5kKTogc2hhcmUgd2l0aCB0aGUgaW1wbGVtZW50YXRpb24gaW4KLy8gcGFja2FnZTprZXJuZWwvYmluYXJ5L2FzdF90b19iaW5hcnkuZGFydApjbGFzcyBCdWZmZXJlZFNpbmsgewogIHN0YXRpYyBjb25zdCBpbnQgU0laRSA9IDEwMDAwMDsKICBzdGF0aWMgY29uc3QgaW50IFNBRkVfU0laRSA9IFNJWkUgLSA1OwogIHN0YXRpYyBjb25zdCBpbnQgU01BTEwgPSAxMDAwMDsKICBmaW5hbCBTaW5rPExpc3Q8aW50Pj4gX3Npbms7CiAgVWludDhMaXN0IF9idWZmZXIgPSBuZXcgVWludDhMaXN0KFNJWkUpOwogIGludCBsZW5ndGggPSAwOwogIGludCBmbHVzaGVkTGVuZ3RoID0gMDsKCiAgRmxvYXQ2NExpc3QgX2RvdWJsZUJ1ZmZlciA9IG5ldyBGbG9hdDY0TGlzdCgxKTsKICBVaW50OExpc3QgX2RvdWJsZUJ1ZmZlclVpbnQ4OwoKICBpbnQgZ2V0IG9mZnNldCA9PiBsZW5ndGggKyBmbHVzaGVkTGVuZ3RoOwoKICBCdWZmZXJlZFNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgYWRkRG91YmxlKGRvdWJsZSBkKSB7CiAgICBfZG91YmxlQnVmZmVyVWludDggPz89IF9kb3VibGVCdWZmZXIuYnVmZmVyLmFzVWludDhMaXN0KCk7CiAgICBfZG91YmxlQnVmZmVyWzBdID0gZDsKICAgIGFkZEJ5dGU0KF9kb3VibGVCdWZmZXJVaW50OFswXSwgX2RvdWJsZUJ1ZmZlclVpbnQ4WzFdLAogICAgICAgIF9kb3VibGVCdWZmZXJVaW50OFsyXSwgX2RvdWJsZUJ1ZmZlclVpbnQ4WzNdKTsKICAgIGFkZEJ5dGU0KF9kb3VibGVCdWZmZXJVaW50OFs0XSwgX2RvdWJsZUJ1ZmZlclVpbnQ4WzVdLAogICAgICAgIF9kb3VibGVCdWZmZXJVaW50OFs2XSwgX2RvdWJsZUJ1ZmZlclVpbnQ4WzddKTsKICB9CgogIHZvaWQgYWRkQnl0ZShpbnQgYnl0ZSkgewogICAgX2J1ZmZlcltsZW5ndGgrK10gPSBieXRlOwogICAgaWYgKGxlbmd0aCA9PSBTSVpFKSB7CiAgICAgIF9zaW5rLmFkZChfYnVmZmVyKTsKICAgICAgX2J1ZmZlciA9IG5ldyBVaW50OExpc3QoU0laRSk7CiAgICAgIGxlbmd0aCA9IDA7CiAgICAgIGZsdXNoZWRMZW5ndGggKz0gU0laRTsKICAgIH0KICB9CgogIHZvaWQgYWRkQnl0ZTIoaW50IGJ5dGUxLCBpbnQgYnl0ZTIpIHsKICAgIGlmIChsZW5ndGggPCBTQUZFX1NJWkUpIHsKICAgICAgX2J1ZmZlcltsZW5ndGgrK10gPSBieXRlMTsKICAgICAgX2J1ZmZlcltsZW5ndGgrK10gPSBieXRlMjsKICAgIH0gZWxzZSB7CiAgICAgIGFkZEJ5dGUoYnl0ZTEpOwogICAgICBhZGRCeXRlKGJ5dGUyKTsKICAgIH0KICB9CgogIHZvaWQgYWRkQnl0ZTQoaW50IGJ5dGUxLCBpbnQgYnl0ZTIsIGludCBieXRlMywgaW50IGJ5dGU0KSB7CiAgICBpZiAobGVuZ3RoIDwgU0FGRV9TSVpFKSB7CiAgICAgIF9idWZmZXJbbGVuZ3RoKytdID0gYnl0ZTE7CiAgICAgIF9idWZmZXJbbGVuZ3RoKytdID0gYnl0ZTI7CiAgICAgIF9idWZmZXJbbGVuZ3RoKytdID0gYnl0ZTM7CiAgICAgIF9idWZmZXJbbGVuZ3RoKytdID0gYnl0ZTQ7CiAgICB9IGVsc2UgewogICAgICBhZGRCeXRlKGJ5dGUxKTsKICAgICAgYWRkQnl0ZShieXRlMik7CiAgICAgIGFkZEJ5dGUoYnl0ZTMpOwogICAgICBhZGRCeXRlKGJ5dGU0KTsKICAgIH0KICB9CgogIHZvaWQgYWRkQnl0ZXMoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICAvLyBBdm9pZCBjb3B5aW5nIGEgbGFyZ2UgYnVmZmVyIGludG8gdGhlIGFub3RoZXIgbGFyZ2UgYnVmZmVyLiBBbHNvLCBpZgogICAgLy8gdGhlIGJ5dGVzIGJ1ZmZlciBpcyB0b28gbGFyZ2UgdG8gZml0IGluIG91ciBvd24gYnVmZmVyLCBqdXN0IGVtaXQgYm90aC4KICAgIGlmIChsZW5ndGggKyBieXRlcy5sZW5ndGggPCBTSVpFICYmCiAgICAgICAgKGJ5dGVzLmxlbmd0aCA8IFNNQUxMIHx8IGxlbmd0aCA8IFNNQUxMKSkgewogICAgICBfYnVmZmVyLnNldFJhbmdlKGxlbmd0aCwgbGVuZ3RoICsgYnl0ZXMubGVuZ3RoLCBieXRlcyk7CiAgICAgIGxlbmd0aCArPSBieXRlcy5sZW5ndGg7CiAgICB9IGVsc2UgaWYgKGJ5dGVzLmxlbmd0aCA8IFNNQUxMKSB7CiAgICAgIC8vIEZsdXNoIGFzIG11Y2ggYXMgd2UgY2FuIGluIHRoZSBjdXJyZW50IGJ1ZmZlci4KICAgICAgX2J1ZmZlci5zZXRSYW5nZShsZW5ndGgsIFNJWkUsIGJ5dGVzKTsKICAgICAgX3NpbmsuYWRkKF9idWZmZXIpOwogICAgICAvLyBDb3B5IG92ZXIgdGhlIHJlbWFpbmRlciBpbnRvIGEgbmV3IGJ1ZmZlci4gSXQgaXMgZ3VhcmFudGVlZCB0byBmaXQKICAgICAgLy8gYmVjYXVzZSB0aGUgaW5wdXQgYnl0ZSBhcnJheSBpcyBzbWFsbC4KICAgICAgaW50IGFscmVhZHlFbWl0dGVkID0gU0laRSAtIGxlbmd0aDsKICAgICAgaW50IHJlbWFpbmRlciA9IGJ5dGVzLmxlbmd0aCAtIGFscmVhZHlFbWl0dGVkOwogICAgICBfYnVmZmVyID0gbmV3IFVpbnQ4TGlzdChTSVpFKTsKICAgICAgX2J1ZmZlci5zZXRSYW5nZSgwLCByZW1haW5kZXIsIGJ5dGVzLCBhbHJlYWR5RW1pdHRlZCk7CiAgICAgIGxlbmd0aCA9IHJlbWFpbmRlcjsKICAgICAgZmx1c2hlZExlbmd0aCArPSBTSVpFOwogICAgfSBlbHNlIHsKICAgICAgZmx1c2goKTsKICAgICAgX3NpbmsuYWRkKGJ5dGVzKTsKICAgICAgZmx1c2hlZExlbmd0aCArPSBieXRlcy5sZW5ndGg7CiAgICB9CiAgfQoKICB2b2lkIGZsdXNoKCkgewogICAgX3NpbmsuYWRkKF9idWZmZXIuc3VibGlzdCgwLCBsZW5ndGgpKTsKICAgIF9idWZmZXIgPSBuZXcgVWludDhMaXN0KFNJWkUpOwogICAgZmx1c2hlZExlbmd0aCArPSBsZW5ndGg7CiAgICBsZW5ndGggPSAwOwogIH0KCiAgdm9pZCBmbHVzaEFuZERlc3Ryb3koKSB7CiAgICBfc2luay5hZGQoX2J1ZmZlci5zdWJsaXN0KDAsIGxlbmd0aCkpOwogIH0KfQqBkwBOTjwBFxoBIUMaNAZOEgE6Bj8QAU5EMQFNSwY8JDYBT1EGPB05IAE0HgFBHAFMBjwiIgEzIgFGBjwlKAFOKAY8IEcBUE8cBjwiPiABNzJPHyEBMBwCAUEzDCMeGRcGBAEMKR4ZGgYEAQxIGhkTDR8lHAgGBAEMPiEXGRMNHCoaEgoGBAEMOSEaGRMNHxkGBAEMNx4ZEAYEAgFCFyYhAR8BNQZLJDIfGR0dGBkNGAYEAgFJGUwkHi4BFz85BAEMMhdFJAQBDCIfBAEMHxsmBAEMHRsWBAEMIxsZBAEMHRssHgQBJDUEAR4vBAFGJQFJKwFLEiUBSCoCATgENyweHhMBQgEMJiQEAQwsKiUjHQQBDCYsGCQUIUEUDUkuFAYEAQwrJAQBESUaEgQBPR0CATMzLBUiKSIfKxIZATIgASwBHAEdPxo7Nzs3BAEbHhoaJRIdBgQBKB4hIQ0WFgYEAT4eISEhIQ0WFhYWBgQBI0xPKDQ+Hic4LRpMMCo1JT0aHQ0PGCUGBAERKyMdEAQBGysEAgEpcGFja2FnZTpkYXJ0MmpzX2luZm8vc3JjL2JpbmFyeS9zaW5rLmRhcnRAc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2RhcnQyanNfaW5mby9saWIvc3JjL2JpbmFyeS9zb3VyY2UuZGFydJ9yLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwoKLy8vIEludGVyZmFjZSBmb3IgZGVzZXJpYWxpemF0aW9uLgovLyBUT0RPKHNpZ211bmQpOiBzaGFyZSB0aGlzIHdpdGggcGtnOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uLyoKYWJzdHJhY3QgY2xhc3MgRGF0YVNvdXJjZSB7CiAgLy8vIFJlYWRzIGEgcmVmZXJlbmNlIHRvIGFuIFtFXSB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuIElmIHRoZSB2YWx1ZSBoYXMKICAvLy8gbm90IHlldCBiZWVuIGRlc2VyaWFsaXplZCwgW2ZdIGlzIGNhbGxlZCB0byBkZXNlcmlhbGl6ZSB0aGUgdmFsdWUgaXRzZWxmLgogIEUgcmVhZENhY2hlZDxFPihFIGYoKSk7CgogIC8vLyBSZWFkcyBhIHBvdGVudGlhbGx5IGBudWxsYCBbRV0gdmFsdWUgZnJvbSB0aGlzIGRhdGEgc291cmNlLCBjYWxsaW5nIFtmXSB0bwogIC8vLyByZWFkIHRoZSBub24tbnVsbCB2YWx1ZSBmcm9tIHRoZSBkYXRhIHNvdXJjZS4KICAvLy8KICAvLy8gVGhpcyBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKICAvLy8gW0RhdGFTaW5rLndyaXRlVmFsdWVPck51bGxdLgogIEUgcmVhZFZhbHVlT3JOdWxsPEU+KEUgZigpKTsKCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiBbRV0gdmFsdWVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZUxpc3RdLgogIExpc3Q8RT4gcmVhZExpc3Q8RT4oRSBmKCksIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYSBib29sZWFuIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBib29sIHJlYWRCb29sKCk7CgogIC8vLyBSZWFkcyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBpbnQgcmVhZEludCgpOwoKICAvLy8gUmVhZHMgYSBwb3RlbnRpYWxseSBgbnVsbGAgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgZnJvbSB0aGlzIGRhdGEKICAvLy8gc291cmNlLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVJbnRPck51bGxdLgogIGludCByZWFkSW50T3JOdWxsKCk7CgogIC8vLyBSZWFkcyBhIHN0cmluZyB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgU3RyaW5nIHJlYWRTdHJpbmcoKTsKCiAgLy8vIFJlYWRzIGEgcG90ZW50aWFsbHkgYG51bGxgIHN0cmluZyB2YWx1ZSBmcm9tIHRoaXMgZGF0YSBzb3VyY2UuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZVN0cmluZ09yTnVsbF0uCiAgU3RyaW5nIHJlYWRTdHJpbmdPck51bGwoKTsKCiAgLy8vIFJlYWRzIGEgbGlzdCBvZiBzdHJpbmcgdmFsdWVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4gSWYgW2VtcHR5QXNOdWxsXSBpcwogIC8vLyBgdHJ1ZWAsIGBudWxsYCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGFuIGVtcHR5IGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdG8gYmUgdXNlZCB0b2dldGhlciB3aXRoCiAgLy8vIFtEYXRhU2luay53cml0ZVN0cmluZ3NdLgogIExpc3Q8U3RyaW5nPiByZWFkU3RyaW5ncyh7Ym9vbCBlbXB0eUFzTnVsbDogZmFsc2V9KTsKCiAgLy8vIFJlYWRzIGEgbWFwIGZyb20gc3RyaW5nIHZhbHVlcyB0byBbVl0gdmFsdWVzIGZyb20gdGhpcyBkYXRhIHNvdXJjZSwKICAvLy8gY2FsbGluZyBbZl0gdG8gcmVhZCBlYWNoIHZhbHVlIGZyb20gdGhlIGRhdGEgc291cmNlLiBJZiBbZW1wdHlBc051bGxdIGlzCiAgLy8vIGB0cnVlYCwgYG51bGxgIGlzIHJldHVybmVkIGluc3RlYWQgb2YgYW4gZW1wdHkgbWFwLgogIC8vLwogIC8vLyBUaGlzIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHRvIGJlIHVzZWQgdG9nZXRoZXIgd2l0aAogIC8vLyBbRGF0YVNpbmsud3JpdGVTdHJpbmdNYXBdLgogIE1hcDxTdHJpbmcsIFY+IHJlYWRTdHJpbmdNYXA8Vj4oViBmKCksIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pOwoKICAvLy8gUmVhZHMgYW4gZW51bSB2YWx1ZSBmcm9tIHRoZSBsaXN0IG9mIGVudW0gW3ZhbHVlc10gZnJvbSB0aGlzIGRhdGEgc291cmNlLgogIC8vLwogIC8vLyBUaGUgW3ZhbHVlc10gYXJndW1lbnQgaXMgaW50ZW5kZWQgdG8gYmUgdGhlIHN0YXRpYyBgLnZhbHVlc2AgZmllbGQgb24KICAvLy8gZW51bSBjbGFzc2VzLCBmb3IgaW5zdGFuY2U6CiAgLy8vCiAgLy8vICAgIGVudW0gRm9vIHsgYmFyLCBiYXogfQogIC8vLyAgICAuLi4KICAvLy8gICAgRm9vIGZvbyA9IHNvdXJjZS5yZWFkRW51bShGb28udmFsdWVzKTsKICAvLy8KICBFIHJlYWRFbnVtPEU+KExpc3Q8RT4gdmFsdWVzKTsKCiAgLy8vIFJlYWRzIGEgVVJJIHZhbHVlIGZyb20gdGhpcyBkYXRhIHNvdXJjZS4KICBVcmkgcmVhZFVyaSgpOwp9CgovLy8gTWl4aW4gdGhhdCBpbXBsZW1lbnRzIGFsbCBjb252ZW5pZW5jZSBtZXRob2RzIG9mIFtEYXRhU291cmNlXS4KYWJzdHJhY3QgY2xhc3MgRGF0YVNvdXJjZU1peGluIGltcGxlbWVudHMgRGF0YVNvdXJjZSB7CiAgQG92ZXJyaWRlCiAgRSByZWFkVmFsdWVPck51bGw8RT4oRSBmKCkpIHsKICAgIGJvb2wgaGFzVmFsdWUgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc1ZhbHVlKSB7CiAgICAgIHJldHVybiBmKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIExpc3Q8RT4gcmVhZExpc3Q8RT4oRSBmKCksIHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8RT4gbGlzdCA9IG5ldyBMaXN0PEU+KGNvdW50KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICBsaXN0W2ldID0gZigpOwogICAgfQogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgcmVhZEludE9yTnVsbCgpIHsKICAgIGJvb2wgaGFzVmFsdWUgPSByZWFkQm9vbCgpOwogICAgaWYgKGhhc1ZhbHVlKSB7CiAgICAgIHJldHVybiByZWFkSW50KCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyByZWFkU3RyaW5nT3JOdWxsKCkgewogICAgYm9vbCBoYXNWYWx1ZSA9IHJlYWRCb29sKCk7CiAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgcmV0dXJuIHJlYWRTdHJpbmcoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgTGlzdDxTdHJpbmc+IHJlYWRTdHJpbmdzKHtib29sIGVtcHR5QXNOdWxsOiBmYWxzZX0pIHsKICAgIGludCBjb3VudCA9IHJlYWRJbnQoKTsKICAgIGlmIChjb3VudCA9PSAwICYmIGVtcHR5QXNOdWxsKSByZXR1cm4gbnVsbDsKICAgIExpc3Q8U3RyaW5nPiBsaXN0ID0gbmV3IExpc3Q8U3RyaW5nPihjb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgbGlzdFtpXSA9IHJlYWRTdHJpbmcoKTsKICAgIH0KICAgIHJldHVybiBsaXN0OwogIH0KCiAgQG92ZXJyaWRlCiAgTWFwPFN0cmluZywgVj4gcmVhZFN0cmluZ01hcDxWPihWIGYoKSwge2Jvb2wgZW1wdHlBc051bGw6IGZhbHNlfSkgewogICAgaW50IGNvdW50ID0gcmVhZEludCgpOwogICAgaWYgKGNvdW50ID09IDAgJiYgZW1wdHlBc051bGwpIHJldHVybiBudWxsOwogICAgTWFwPFN0cmluZywgVj4gbWFwID0ge307CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgU3RyaW5nIGtleSA9IHJlYWRTdHJpbmcoKTsKICAgICAgViB2YWx1ZSA9IGYoKTsKICAgICAgbWFwW2tleV0gPSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiBtYXA7CiAgfQp9CgovLy8gRGF0YSBzb3VyY2UgaGVscGVyIHJlYWRzIGNhbm9uaWNhbGl6ZWQgW0VdIHZhbHVlcyB0aHJvdWdoIGluZGljZXMuCmNsYXNzIEluZGV4ZWRTb3VyY2U8RT4gewogIGZpbmFsIGludCBGdW5jdGlvbigpIF9yZWFkSW50OwogIGZpbmFsIExpc3Q8RT4gX2NhY2hlID0gW107CiAgZmluYWwgU2V0PGludD4gX3BlbmRpbmcgPSBuZXcgU2V0KCk7CgogIEluZGV4ZWRTb3VyY2UodGhpcy5fcmVhZEludCk7CgogIC8vLyBSZWFkcyBhIHJlZmVyZW5jZSB0byBhbiBbRV0gdmFsdWUgZnJvbSB0aGUgZGF0YSBzb3VyY2UuCiAgLy8vCiAgLy8vIElmIHRoZSB2YWx1ZSBoYXNuJ3QgeWV0IGJlZW4gcmVhZCwgW3JlYWRWYWx1ZV0gaXMgY2FsbGVkIHRvIGRlc2VyaWFsaXplCiAgLy8vIHRoZSB2YWx1ZSBpdHNlbGYuCiAgRSByZWFkKEUgcmVhZFZhbHVlKCkpIHsKICAgIGludCBpbmRleCA9IF9yZWFkSW50KCk7CiAgICBpZiAoX3BlbmRpbmcuY29udGFpbnMoaW5kZXgpKSB0aHJvdyAic2VyaWFsaXphdGlvbiBjeWNsZXMgbm90IHN1cHBvcnRlZCI7CiAgICBpZiAoaW5kZXggPj0gX2NhY2hlLmxlbmd0aCkgewogICAgICBfcGVuZGluZy5hZGQoaW5kZXgpOwogICAgICBfY2FjaGUuYWRkKG51bGwpOwogICAgICBFIHZhbHVlID0gcmVhZFZhbHVlKCk7CiAgICAgIF9wZW5kaW5nLnJlbW92ZShpbmRleCk7CiAgICAgIF9jYWNoZVtpbmRleF0gPSB2YWx1ZTsKICAgICAgcmV0dXJuIHZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9jYWNoZVtpbmRleF07CiAgICB9CiAgfQp9CgovLy8gQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBbRGF0YVNvdXJjZV0gdXNpbmcgW0RhdGFTb3VyY2VNaXhpbl0gdG8gaW1wbGVtZW50Ci8vLyBjb252ZW5pZW5jZSBtZXRob2RzLgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdERhdGFTb3VyY2UgZXh0ZW5kcyBEYXRhU291cmNlTWl4aW4KICAgIGltcGxlbWVudHMgRGF0YVNvdXJjZSB7CiAgSW5kZXhlZFNvdXJjZTxTdHJpbmc+IF9zdHJpbmdJbmRleDsKICBJbmRleGVkU291cmNlPFVyaT4gX3VyaUluZGV4OwogIE1hcDxUeXBlLCBJbmRleGVkU291cmNlPiBfZ2VuZXJhbENhY2hlcyA9IHt9OwoKICBBYnN0cmFjdERhdGFTb3VyY2UoKSB7CiAgICBfc3RyaW5nSW5kZXggPSBuZXcgSW5kZXhlZFNvdXJjZTxTdHJpbmc+KF9yZWFkSW50SW50ZXJuYWwpOwogICAgX3VyaUluZGV4ID0gbmV3IEluZGV4ZWRTb3VyY2U8VXJpPihfcmVhZEludEludGVybmFsKTsKICB9CgogIEBvdmVycmlkZQogIEUgcmVhZENhY2hlZDxFPihFIGYoKSkgewogICAgSW5kZXhlZFNvdXJjZSBzb3VyY2UgPQogICAgICAgIF9nZW5lcmFsQ2FjaGVzW0VdID8/PSBuZXcgSW5kZXhlZFNvdXJjZTxFPihfcmVhZEludEludGVybmFsKTsKICAgIHJldHVybiBzb3VyY2UucmVhZChmKTsKICB9CgogIEBvdmVycmlkZQogIEUgcmVhZEVudW08RT4oTGlzdDxFPiB2YWx1ZXMpIHsKICAgIHJldHVybiBfcmVhZEVudW1JbnRlcm5hbCh2YWx1ZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgVXJpIHJlYWRVcmkoKSB7CiAgICByZXR1cm4gX3JlYWRVcmkoKTsKICB9CgogIFVyaSBfcmVhZFVyaSgpIHsKICAgIHJldHVybiBfdXJpSW5kZXgucmVhZChfcmVhZFVyaUludGVybmFsKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgcmVhZEJvb2woKSB7CiAgICBpbnQgdmFsdWUgPSBfcmVhZEludEludGVybmFsKCk7CiAgICBhc3NlcnQodmFsdWUgPT0gMCB8fCB2YWx1ZSA9PSAxKTsKICAgIHJldHVybiB2YWx1ZSA9PSAxOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHJlYWRTdHJpbmcoKSB7CiAgICByZXR1cm4gX3JlYWRTdHJpbmcoKTsKICB9CgogIFN0cmluZyBfcmVhZFN0cmluZygpIHsKICAgIHJldHVybiBfc3RyaW5nSW5kZXgucmVhZChfcmVhZFN0cmluZ0ludGVybmFsKTsKICB9CgogIEBvdmVycmlkZQogIGludCByZWFkSW50KCkgewogICAgcmV0dXJuIF9yZWFkSW50SW50ZXJuYWwoKTsKICB9CgogIC8vLyBBY3R1YWwgZGVzZXJpYWxpemF0aW9uIG9mIGEgc3RyaW5nIHZhbHVlLCBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc2VzLgogIFN0cmluZyBfcmVhZFN0cmluZ0ludGVybmFsKCk7CgogIC8vLyBBY3R1YWwgZGVzZXJpYWxpemF0aW9uIG9mIGEgbm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUsIGltcGxlbWVudGVkIGJ5CiAgLy8vIHN1YmNsYXNzZXMuCiAgaW50IF9yZWFkSW50SW50ZXJuYWwoKTsKCiAgLy8vIEFjdHVhbCBkZXNlcmlhbGl6YXRpb24gb2YgYSBVUkkgdmFsdWUsIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuCiAgVXJpIF9yZWFkVXJpSW50ZXJuYWwoKTsKCiAgLy8vIEFjdHVhbCBkZXNlcmlhbGl6YXRpb24gb2YgYW4gZW51bSB2YWx1ZSBpbiBbdmFsdWVzXSwgaW1wbGVtZW50ZWQgYnkKICAvLy8gc3ViY2xhc3Nlcy4KICBFIF9yZWFkRW51bUludGVybmFsPEU+KExpc3Q8RT4gdmFsdWVzKTsKfQoKLy8vIFtEYXRhU291cmNlXSB0aGF0IHJlYWRzIGRhdGEgZnJvbSBhIHNlcXVlbmNlIG9mIGJ5dGVzLgovLy8KLy8vIFRoaXMgZGF0YSBzb3VyY2Ugd29ya3MgdG9nZXRoZXIgd2l0aCBbQmluYXJ5U2lua10uCmNsYXNzIEJpbmFyeVNvdXJjZSBleHRlbmRzIEFic3RyYWN0RGF0YVNvdXJjZSB7CiAgaW50IF9ieXRlT2Zmc2V0ID0gMDsKICBmaW5hbCBMaXN0PGludD4gX2J5dGVzOwoKICBCaW5hcnlTb3VyY2UodGhpcy5fYnl0ZXMpOwogIGludCBfcmVhZEJ5dGUoKSA9PiBfYnl0ZXNbX2J5dGVPZmZzZXQrK107CgogIEBvdmVycmlkZQogIFN0cmluZyBfcmVhZFN0cmluZ0ludGVybmFsKCkgewogICAgaW50IGxlbmd0aCA9IF9yZWFkSW50SW50ZXJuYWwoKTsKICAgIExpc3Q8aW50PiBieXRlcyA9IG5ldyBVaW50OExpc3QobGVuZ3RoKTsKICAgIGJ5dGVzLnNldFJhbmdlKDAsIGJ5dGVzLmxlbmd0aCwgX2J5dGVzLCBfYnl0ZU9mZnNldCk7CiAgICBfYnl0ZU9mZnNldCArPSBieXRlcy5sZW5ndGg7CiAgICByZXR1cm4gdXRmOC5kZWNvZGUoYnl0ZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IF9yZWFkSW50SW50ZXJuYWwoKSB7CiAgICB2YXIgYnl0ZSA9IF9yZWFkQnl0ZSgpOwogICAgaWYgKGJ5dGUgJiAweDgwID09IDApIHsKICAgICAgLy8gMHh4eHh4eHgKICAgICAgcmV0dXJuIGJ5dGU7CiAgICB9IGVsc2UgaWYgKGJ5dGUgJiAweDQwID09IDApIHsKICAgICAgLy8gMTB4eHh4eHgKICAgICAgcmV0dXJuICgoYnl0ZSAmIDB4M0YpIDw8IDgpIHwgX3JlYWRCeXRlKCk7CiAgICB9IGVsc2UgewogICAgICAvLyAxMXh4eHh4eAogICAgICByZXR1cm4gKChieXRlICYgMHgzRikgPDwgMjQpIHwKICAgICAgICAgIChfcmVhZEJ5dGUoKSA8PCAxNikgfAogICAgICAgICAgKF9yZWFkQnl0ZSgpIDw8IDgpIHwKICAgICAgICAgIF9yZWFkQnl0ZSgpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgVXJpIF9yZWFkVXJpSW50ZXJuYWwoKSB7CiAgICBTdHJpbmcgdGV4dCA9IF9yZWFkU3RyaW5nKCk7CiAgICByZXR1cm4gVXJpLnBhcnNlKHRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRSBfcmVhZEVudW1JbnRlcm5hbDxFPihMaXN0PEU+IHZhbHVlcykgewogICAgaW50IGluZGV4ID0gX3JlYWRJbnRJbnRlcm5hbCgpOwogICAgYXNzZXJ0KAogICAgICAgIDAgPD0gaW5kZXggJiYgaW5kZXggPCB2YWx1ZXMubGVuZ3RoLAogICAgICAgICJJbnZhbGlkIGRhdGEga2luZCBpbmRleC4gIgogICAgICAgICJFeHBlY3RlZCBvbmUgb2YgJHZhbHVlcywgZm91bmQgaW5kZXggJGluZGV4LiIpOwogICAgcmV0dXJuIHZhbHVlc1tpbmRleF07CiAgfQp9CoEqAE5OPAEaFwEjQxxQUBoBUTQGPCMfAUw7BjwcOQEzEwFAEQFLDgY8IRcBMhcBRQY8JB0BTzsGPB83AUpPOgY8IUUBUAZMIgYfDTAGIQEvEQIBQzcMICAUEgYRBAEMOhswJyYVBhEEAQwYIBQYBhEEAQweIBQbBhEEAQw4GzAxJh4GEQQBDEYbMB0mIRUYBhAEAgFHGSEdJwEgAT4GThgaHE4iGxgdHh0UDRwGBAIBTRk6HCYgMAEZQDoEAQwbG0YbBAEMIiYEAQwSFwQBEy0EAQwUJCYXBAEMGBoEARkzBAEMEh8EAUsgAU0SGgFIGgFKEioCATsENzAXGgEdLAEMISUtOiEfBAEMGxwcEhMjEjENEiUgHxcGBAEMGyEcBAEMKyQMLSQ5GgQCAStwYWNrYWdlOmRhcnQyanNfaW5mby9zcmMvYmluYXJ5L3NvdXJjZS5kYXJ0M3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL3Njb3BlX3Zpc2l0b3IuZGFydMAAnlkvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvY29uc3RhbnRfZXZhbHVhdG9yLmRhcnQnIGFzIGlyOwoKaW1wb3J0ICdjbG9zdXJlLmRhcnQnOwppbXBvcnQgJ3Njb3BlLmRhcnQnOwoKLy8vIFRoaXMgYnVpbGRlciB3YWxrcyB0aGUgY29kZSB0byBkZXRlcm1pbmUgd2hhdCB2YXJpYWJsZXMgYXJlCi8vLyBhc3NpZ25lZC9jYXB0dXJlZC9mcmVlIGF0IHZhcmlvdXMgcG9pbnRzIHRvIGJ1aWxkIGEgW0Nsb3N1cmVTY29wZU1vZGVsXSBhbmQKLy8vIGEgW1ZhcmlhYmxlU2NvcGVNb2RlbF0gdGhhdCBjYW4gcmVzcG9uZCB0byBxdWVyaWVzIGFib3V0IGhvdyBhIHBhcnRpY3VsYXIKLy8vIHZhcmlhYmxlIGlzIGJlaW5nIHVzZWQgYXQgYW55IHBvaW50IGluIHRoZSBjb2RlLgpjbGFzcyBTY29wZU1vZGVsQnVpbGRlciBleHRlbmRzIGlyLlZpc2l0b3I8SW5pdGlhbGl6ZXJDb21wbGV4aXR5PgogICAgd2l0aCBWYXJpYWJsZUNvbGxlY3Rvck1peGluIHsKICBmaW5hbCBpci5Db25zdGFudEV2YWx1YXRvciBfY29uc3RhbnRFdmFsdWF0b3I7CgogIGZpbmFsIENsb3N1cmVTY29wZU1vZGVsIF9tb2RlbCA9IG5ldyBDbG9zdXJlU2NvcGVNb2RlbCgpOwoKICAvLy8gQSBtYXAgb2YgZWFjaCB2aXNpdGVkIGNhbGwgbm9kZSB3aXRoIHRoZSBhc3NvY2lhdGVkIGluZm9ybWF0aW9uIGFib3V0IHdoYXQKICAvLy8gdmFyaWFibGVzIGFyZSBjYXB0dXJlZC91c2VkLiBFYWNoIGlyLk5vZGUga2V5IGNvcnJlc3BvbmRzIHRvIGEgc2NvcGUgdGhhdAogIC8vLyB3YXMgZW5jb3VudGVyZWQgd2hpbGUgdmlzaXRpbmcgYSBjbG9zdXJlIChpbml0aWFsbHkgY2FsbGVkIHRocm91Z2gKICAvLy8gW3RyYW5zbGF0ZUxhenlJbml0aWFsaXplcl0gb3IgW3RyYW5zbGF0ZUNvbnN0cnVjdG9yT3JQcm9jZWR1cmVdKS4KICBNYXA8aXIuTm9kZSwgS2VybmVsQ2FwdHVyZWRTY29wZT4gZ2V0IF9zY29wZXNDYXB0dXJlZEluQ2xvc3VyZU1hcCA9PgogICAgICBfbW9kZWwuY2FwdHVyZWRTY29wZXNNYXA7CgogIC8vLyBBIG1hcCBvZiB0aGUgbm9kZXMgdGhhdCB3ZSBoYXZlIGZsYWdnZWQgYXMgbmVjZXNzYXJ5IHRvIGdlbmVyYXRlIGNsb3N1cmUKICAvLy8gY2xhc3NlcyBmb3IgaW4gYSBsYXRlciBzdGFnZS4gV2UgbWFwIHRoYXQgbm9kZSB0byBpbmZvcm1hdGlvbiBhc2NlcnRhaW5lZAogIC8vLyBhYm91dCB2YXJpYWJsZSB1c2FnZSBpbiB0aGUgc3Vycm91bmRpbmcgc2NvcGUuCiAgTWFwPGlyLlRyZWVOb2RlLCBLZXJuZWxTY29wZUluZm8+IGdldCBfY2xvc3VyZXNUb0dlbmVyYXRlID0+CiAgICAgIF9tb2RlbC5jbG9zdXJlc1RvR2VuZXJhdGU7CgogIC8vLyBUaGUgbG9jYWwgdmFyaWFibGVzIHRoYXQgaGF2ZSBiZWVuIGRlY2xhcmVkIGluIHRoZSBjdXJyZW50IHNjb3BlLgogIExpc3Q8aXIuTm9kZSAvKiBpci5WYXJpYWJsZURlY2xhcmF0aW9uIHwgVHlwZVBhcmFtZXRlclR5cGVXaXRoQ29udGV4dCAqLyA+CiAgICAgIF9zY29wZVZhcmlhYmxlczsKCiAgLy8vIFBvaW50ZXIgdG8gdGhlIGNvbnRleHQgaW4gd2hpY2ggdGhpcyBjbG9zdXJlIGlzIGV4ZWN1dGVkLgogIC8vLyBGb3IgZXhhbXBsZSwgaW4gdGhlIGV4cHJlc3Npb24gYHZhciBmb28gPSAoKSA9PiAzICsgaTtgLCB0aGUgZXhlY3V0YWJsZQogIC8vLyBjb250ZXh0IGFzIHdlIHdhbGsgdGhlIG5vZGVzIGluIHRoYXQgZXhwcmVzc2lvbiBpcyB0aGUgaXIuRmllbGQgYGZvb2AuCiAgaXIuVHJlZU5vZGUgX2V4ZWN1dGFibGVDb250ZXh0OwoKICAvLy8gQSBmbGFnIHRvIGluZGljYXRlIGlmIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlIGEgY2xvc3VyZS4KICBib29sIF9pc0luc2lkZUNsb3N1cmUgPSBmYWxzZTsKCiAgLy8vIFBvaW50ZXIgdG8gdGhlIG9yaWdpbmFsIG5vZGUgd2hlcmUgdGhpcyBjbG9zdXJlIGJ1aWxkZXIgc3RhcnRlZC4KICBpci5Ob2RlIF9vdXRlcm1vc3ROb2RlOwoKICAvLy8gS2VlcCB0cmFjayBvZiB0aGUgbXV0YXRlZCBsb2NhbCB2YXJpYWJsZXMgc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGJveAogIC8vLyBub24tbXV0YXRlZCB2YXJpYWJsZXMuIFdlIGtub3cgdGhlc2UgYXJlIG9ubHkgVmFyaWFibGVEZWNsYXJhdGlvbnMgYmVjYXVzZQogIC8vLyB0eXBlIHZhcmlhYmxlIHR5cGVzIGFuZCBgdGhpc2AgdHlwZXMgY2FuJ3QgYmUgbXV0YXRlZCEKICBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gX211dGF0ZWRWYXJpYWJsZXMgPQogICAgICBuZXcgU2V0PGlyLlZhcmlhYmxlRGVjbGFyYXRpb24+KCk7CgogIC8vLyBUaGUgc2V0IG9mIHZhcmlhYmxlcyB0aGF0IGFyZSBhY2Nlc3NlZCBpbiBzb21lIGZvcm0sIHdoZXRoZXIgdGhleSBhcmUKICAvLy8gbXV0YXRlZCBvciBub3QuCiAgU2V0PGlyLk5vZGUgLyogaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB8IFR5cGVQYXJhbWV0ZXJUeXBlV2l0aENvbnRleHQgKi8gPgogICAgICBfY2FwdHVyZWRWYXJpYWJsZXMgPSBuZXcgU2V0PGlyLk5vZGU+KCk7CgogIC8vLyBJZiB0cnVlLCB0aGUgdmlzaXRvciBpcyBjdXJyZW50bHkgdHJhdmVyc2luZyBzb21lIG5vZGVzIHRoYXQgYXJlIGluc2lkZSBhCiAgLy8vIHRyeSBibG9jay4KICBib29sIF9pblRyeSA9IGZhbHNlOwoKICAvLy8gVGhlIGN1cnJlbnQgc2NvcGUgd2UgYXJlIGluLgogIEtlcm5lbFNjb3BlSW5mbyBfY3VycmVudFNjb3BlSW5mbzsKCiAgYm9vbCBfaGFzVGhpc0xvY2FsOwoKICAvLy8gS2VlcHMgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBib3hlcyB0aGF0IHdlJ3ZlIGNyZWF0ZWQgc28gdGhhdCB0aGV5IGVhY2gKICAvLy8gaGF2ZSB1bmlxdWUgbmFtZXMuCiAgaW50IF9ib3hDb3VudGVyID0gMDsKCiAgLy8vIFRoZSBjdXJyZW50IHVzYWdlIG9mIGEgdHlwZSBhbm5vdGF0aW9uLgogIC8vLwogIC8vLyBUaGlzIGlzIHVwZGF0ZWQgaW4gdGhlIHZpc2l0b3IgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1bmNvbmRpdGlvbmFsCiAgLy8vIHR5cGUgdmFyaWFibGUgdXNhZ2UsIHN1Y2ggYXMgdHlwZSBsaXRlcmFscyBhbmQgaXMgdGVzdHMsIGFuZCBjb25kaXRpb25hbAogIC8vLyB0eXBlIHZhcmlhYmxlIHVzYWdlLCBzdWNoIGFzIHR5cGUgYXJndW1lbnQgaW4gbWV0aG9kIGludm9jYXRpb25zLgogIFZhcmlhYmxlVXNlIF9jdXJyZW50VHlwZVVzYWdlOwoKICBTY29wZU1vZGVsQnVpbGRlcih0aGlzLl9jb25zdGFudEV2YWx1YXRvcik7CgogIFNjb3BlTW9kZWwgY29tcHV0ZU1vZGVsKGlyLk1lbWJlciBub2RlKSB7CiAgICBpZiAobm9kZS5pc0Fic3RyYWN0ICYmICFub2RlLmlzRXh0ZXJuYWwpIHsKICAgICAgcmV0dXJuIGNvbnN0IFNjb3BlTW9kZWwoCiAgICAgICAgICBpbml0aWFsaXplckNvbXBsZXhpdHk6IGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCkpOwogICAgfQoKICAgIGlmIChub2RlIGlzIGlyLkNvbnN0cnVjdG9yKSB7CiAgICAgIF9oYXNUaGlzTG9jYWwgPSB0cnVlOwogICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLlByb2NlZHVyZSAmJiBub2RlLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5KSB7CiAgICAgIF9oYXNUaGlzTG9jYWwgPSBmYWxzZTsKICAgIH0gZWxzZSBpZiAobm9kZS5pc0luc3RhbmNlTWVtYmVyKSB7CiAgICAgIF9oYXNUaGlzTG9jYWwgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgX2hhc1RoaXNMb2NhbCA9IGZhbHNlOwogICAgfQoKICAgIEluaXRpYWxpemVyQ29tcGxleGl0eSBpbml0aWFsaXplckNvbXBsZXhpdHkgPQogICAgICAgIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgICBpZiAobm9kZSBpcyBpci5GaWVsZCkgewogICAgICBpZiAobm9kZS5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgaW5pdGlhbGl6ZXJDb21wbGV4aXR5ID0gbm9kZS5hY2NlcHQodGhpcyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5pdGlhbGl6ZXJDb21wbGV4aXR5ID0gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCk7CiAgICAgICAgX21vZGVsLnNjb3BlSW5mbyA9IG5ldyBLZXJuZWxTY29wZUluZm8oX2hhc1RoaXNMb2NhbCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChub2RlIGlzIGlyLlByb2NlZHVyZSB8fCBub2RlIGlzIGlyLkNvbnN0cnVjdG9yKTsKICAgICAgbm9kZS5hY2NlcHQodGhpcyk7CiAgICB9CiAgICByZXR1cm4gbmV3IFNjb3BlTW9kZWwoCiAgICAgICAgY2xvc3VyZVNjb3BlTW9kZWw6IF9tb2RlbCwKICAgICAgICB2YXJpYWJsZVNjb3BlTW9kZWw6IHZhcmlhYmxlU2NvcGVNb2RlbCwKICAgICAgICBpbml0aWFsaXplckNvbXBsZXhpdHk6IGluaXRpYWxpemVyQ29tcGxleGl0eSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgZGVmYXVsdE5vZGUoaXIuTm9kZSBub2RlKSA9PgogICAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCdVbmhhbmRsZWQgbm9kZSAkbm9kZSAoJHtub2RlLnJ1bnRpbWVUeXBlfSknKTsKCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Tm9kZShpci5Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBub2RlPy5hY2NlcHQodGhpcyk7CiAgfQoKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXROb2RlcyhMaXN0PGlyLk5vZGU+IG5vZGVzKSB7CiAgICBJbml0aWFsaXplckNvbXBsZXhpdHkgY29tcGxleGl0eSA9IGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwogICAgZm9yIChpci5Ob2RlIG5vZGUgaW4gbm9kZXMpIHsKICAgICAgY29tcGxleGl0eSA9IGNvbXBsZXhpdHkuY29tYmluZSh2aXNpdE5vZGUobm9kZSkpOwogICAgfQogICAgcmV0dXJuIGNvbXBsZXhpdHk7CiAgfQoKICAvLy8gVXBkYXRlIHRoZSBbQ2FwdHVyZWRTY29wZV0gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8KICAvLy8gdGhpcyBub2RlIGlmIGFueSB2YXJpYWJsZXMgYXJlIGNhcHR1cmVkLgogIHZvaWQgYXR0YWNoQ2FwdHVyZWRTY29wZVZhcmlhYmxlcyhpci5UcmVlTm9kZSBub2RlKSB7CiAgICBTZXQ8aXIuVmFyaWFibGVEZWNsYXJhdGlvbj4gY2FwdHVyZWRWYXJpYWJsZXNGb3JTY29wZSA9CiAgICAgICAgbmV3IFNldDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPigpOwoKICAgIGZvciAoaXIuTm9kZSB2YXJpYWJsZSBpbiBfc2NvcGVWYXJpYWJsZXMpIHsKICAgICAgLy8gTm8gbmVlZCB0byBib3ggbm9uLWFzc2lnbmFibGUgZWxlbWVudHMuCiAgICAgIGlmICh2YXJpYWJsZSBpcyBpci5WYXJpYWJsZURlY2xhcmF0aW9uKSB7CiAgICAgICAgaWYgKHZhcmlhYmxlLmlzRmluYWwgfHwgdmFyaWFibGUuaXNDb25zdCkgY29udGludWU7CiAgICAgICAgaWYgKCFfbXV0YXRlZFZhcmlhYmxlcy5jb250YWlucyh2YXJpYWJsZSkpIGNvbnRpbnVlOwogICAgICAgIGlmIChfY2FwdHVyZWRWYXJpYWJsZXMuY29udGFpbnModmFyaWFibGUpKSB7CiAgICAgICAgICBjYXB0dXJlZFZhcmlhYmxlc0ZvclNjb3BlLmFkZCh2YXJpYWJsZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoIWNhcHR1cmVkVmFyaWFibGVzRm9yU2NvcGUuaXNFbXB0eSkgewogICAgICBhc3NlcnQoX21vZGVsLnNjb3BlSW5mbyAhPSBudWxsKTsKICAgICAgS2VybmVsU2NvcGVJbmZvIGZyb20gPSBfbW9kZWwuc2NvcGVJbmZvOwoKICAgICAgS2VybmVsQ2FwdHVyZWRTY29wZSBjYXB0dXJlZFNjb3BlOwogICAgICB2YXIgbm9kZUJveCA9IG5ldyBOb2RlQm94KGdldEJveE5hbWUoKSwgX2V4ZWN1dGFibGVDb250ZXh0KTsKICAgICAgaWYgKG5vZGUgaXMgaXIuRm9yU3RhdGVtZW50IHx8CiAgICAgICAgICBub2RlIGlzIGlyLkZvckluU3RhdGVtZW50IHx8CiAgICAgICAgICBub2RlIGlzIGlyLldoaWxlU3RhdGVtZW50IHx8CiAgICAgICAgICBub2RlIGlzIGlyLkRvU3RhdGVtZW50KSB7CiAgICAgICAgY2FwdHVyZWRTY29wZSA9IG5ldyBLZXJuZWxDYXB0dXJlZExvb3BTY29wZSgKICAgICAgICAgICAgY2FwdHVyZWRWYXJpYWJsZXNGb3JTY29wZSwKICAgICAgICAgICAgbm9kZUJveCwKICAgICAgICAgICAgW10sCiAgICAgICAgICAgIGZyb20ubG9jYWxzVXNlZEluVHJ5T3JTeW5jLAogICAgICAgICAgICBmcm9tLmZyZWVWYXJpYWJsZXMsCiAgICAgICAgICAgIGZyb20uZnJlZVZhcmlhYmxlc0ZvclJ0aSwKICAgICAgICAgICAgZnJvbS50aGlzVXNlZEFzRnJlZVZhcmlhYmxlLAogICAgICAgICAgICBmcm9tLnRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpLAogICAgICAgICAgICBfaGFzVGhpc0xvY2FsKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjYXB0dXJlZFNjb3BlID0gbmV3IEtlcm5lbENhcHR1cmVkU2NvcGUoCiAgICAgICAgICAgIGNhcHR1cmVkVmFyaWFibGVzRm9yU2NvcGUsCiAgICAgICAgICAgIG5vZGVCb3gsCiAgICAgICAgICAgIGZyb20ubG9jYWxzVXNlZEluVHJ5T3JTeW5jLAogICAgICAgICAgICBmcm9tLmZyZWVWYXJpYWJsZXMsCiAgICAgICAgICAgIGZyb20uZnJlZVZhcmlhYmxlc0ZvclJ0aSwKICAgICAgICAgICAgZnJvbS50aGlzVXNlZEFzRnJlZVZhcmlhYmxlLAogICAgICAgICAgICBmcm9tLnRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpLAogICAgICAgICAgICBfaGFzVGhpc0xvY2FsKTsKICAgICAgfQogICAgICBfbW9kZWwuc2NvcGVJbmZvID0gX3Njb3Blc0NhcHR1cmVkSW5DbG9zdXJlTWFwW25vZGVdID0gY2FwdHVyZWRTY29wZTsKICAgIH0KICB9CgogIC8vLyBHZW5lcmF0ZSBhIHVuaXF1ZSBuYW1lIGZvciB0aGUgW19ib3hDb3VudGVyXXRoIGJveCBmaWVsZC4KICAvLy8KICAvLy8gVGhlIHJlc3VsdCBpcyB1c2VkIGFzIHRoZSBuYW1lIG9mIFtOb2RlQm94XXMgYW5kIFtCb3hMb2NhbF1zLCBhbmQgbXVzdAogIC8vLyB0aGVyZWZvcmUgYmUgdW5pcXVlIHRvIGF2b2lkIGJyZWFraW5nIGFuIGludmFyaWFudCBpbiB0aGUgZWxlbWVudCBtb2RlbAogIC8vLyAoY2xhc3NlcyBjYW5ub3QgZGVjbGFyZSBtdWx0aXBsZSBmaWVsZHMgd2l0aCB0aGUgc2FtZSBuYW1lKS4KICAvLy8KICAvLy8gQWxzbywgdGhlIG5hbWVzIHNob3VsZCBiZSBkaXN0aW5jdCBmcm9tIHJlYWwgZmllbGQgbmFtZXMgdG8gcHJldmVudAogIC8vLyBjbGFzaGVzIHdpdGggc2VsZWN0b3JzIGZvciB0aG9zZSBmaWVsZHMuCiAgLy8vCiAgLy8vIFRoZXNlIG5hbWVzIGFyZSBub3QgdXNlZCBpbiBnZW5lcmF0ZWQgY29kZSwganVzdCBhcyBlbGVtZW50IG5hbWUuCiAgU3RyaW5nIGdldEJveE5hbWUoKSB7CiAgICByZXR1cm4gIl9ib3hfJHtfYm94Q291bnRlcisrfSI7CiAgfQoKICAvLy8gUGVyZm9ybSBib29rLWtlZXBpbmcgd2l0aCB0aGUgY3VycmVudCBzZXQgb2YgbG9jYWwgdmFyaWFibGVzIHRoYXQgaGF2ZQogIC8vLyBiZWVuIHNlZW4gdGh1cyBmYXIgYmVmb3JlIGVudGVyaW5nIHRoaXMgbmV3IHNjb3BlLgogIHZvaWQgZW50ZXJOZXdTY29wZShpci5Ob2RlIG5vZGUsIHZvaWQgdmlzaXROZXdTY29wZSgpKSB7CiAgICBMaXN0PGlyLk5vZGU+IG9sZFNjb3BlVmFyaWFibGVzID0gX3Njb3BlVmFyaWFibGVzOwogICAgX3Njb3BlVmFyaWFibGVzID0gPGlyLk5vZGU+W107CiAgICB2aXNpdE5ld1Njb3BlKCk7CiAgICBhdHRhY2hDYXB0dXJlZFNjb3BlVmFyaWFibGVzKG5vZGUpOwogICAgX211dGF0ZWRWYXJpYWJsZXMucmVtb3ZlQWxsKF9zY29wZVZhcmlhYmxlcyk7CiAgICBfc2NvcGVWYXJpYWJsZXMgPSBvbGRTY29wZVZhcmlhYmxlczsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdE5hbWVkRXhwcmVzc2lvbihpci5OYW1lZEV4cHJlc3Npb24gbm9kZSkgewogICAgcmV0dXJuIHZpc2l0Tm9kZShub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFRyeUNhdGNoKGlyLlRyeUNhdGNoIG5vZGUpIHsKICAgIGJvb2wgb2xkSW5UcnkgPSBfaW5Ucnk7CiAgICBfaW5UcnkgPSB0cnVlOwogICAgdmlzaXRJblZhcmlhYmxlU2NvcGUobm9kZSwgKCkgewogICAgICB2aXNpdE5vZGUobm9kZS5ib2R5KTsKICAgIH0pOwogICAgdmlzaXROb2Rlcyhub2RlLmNhdGNoZXMpOwogICAgX2luVHJ5ID0gb2xkSW5Ucnk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFRyeUZpbmFsbHkoaXIuVHJ5RmluYWxseSBub2RlKSB7CiAgICBib29sIG9sZEluVHJ5ID0gX2luVHJ5OwogICAgX2luVHJ5ID0gdHJ1ZTsKICAgIHZpc2l0SW5WYXJpYWJsZVNjb3BlKG5vZGUsICgpIHsKICAgICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICB9KTsKICAgIHZpc2l0Tm9kZShub2RlLmZpbmFsaXplcik7CiAgICBfaW5UcnkgPSBvbGRJblRyeTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0VmFyaWFibGVHZXQoaXIuVmFyaWFibGVHZXQgbm9kZSkgewogICAgX21hcmtWYXJpYWJsZUFzVXNlZChub2RlLnZhcmlhYmxlLCBWYXJpYWJsZVVzZS5leHBsaWNpdCk7CiAgICAvLyBEb24ndCB2aXNpdCBgbm9kZS5wcm9tb3RlZFR5cGVgLgogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRWYXJpYWJsZVNldChpci5WYXJpYWJsZVNldCBub2RlKSB7CiAgICBfbXV0YXRlZFZhcmlhYmxlcy5hZGQobm9kZS52YXJpYWJsZSk7CiAgICBfbWFya1ZhcmlhYmxlQXNVc2VkKG5vZGUudmFyaWFibGUsIFZhcmlhYmxlVXNlLmV4cGxpY2l0KTsKICAgIHZpc2l0SW5Db250ZXh0KG5vZGUudmFyaWFibGUudHlwZSwgVmFyaWFibGVVc2UubG9jYWxUeXBlKTsKICAgIHZpc2l0Tm9kZShub2RlLnZhbHVlKTsKICAgIHJlZ2lzdGVyQXNzaWduZWRWYXJpYWJsZShub2RlLnZhcmlhYmxlKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgdm9pZCBfaGFuZGxlVmFyaWFibGVEZWNsYXJhdGlvbigKICAgICAgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlLCBWYXJpYWJsZVVzZSB1c2FnZSkgewogICAgaWYgKCFub2RlLmlzRmllbGRGb3JtYWwpIHsKICAgICAgX3Njb3BlVmFyaWFibGVzLmFkZChub2RlKTsKICAgIH0KCiAgICB2aXNpdEluQ29udGV4dChub2RlLnR5cGUsIHVzYWdlKTsKICAgIHZpc2l0Tm9kZShub2RlLmluaXRpYWxpemVyKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb24oaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBub2RlKSB7CiAgICBfaGFuZGxlVmFyaWFibGVEZWNsYXJhdGlvbihub2RlLCBWYXJpYWJsZVVzZS5sb2NhbFR5cGUpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICAvLy8gQWRkIHRoaXMgdmFyaWFibGUgdG8gdGhlIHNldCBvZiBmcmVlIHZhcmlhYmxlcyBpZiBhcHByb3ByaWF0ZSBhbmQgYWRkIHRvCiAgLy8vIHRoZSB0YWxseSBvZiB2YXJpYWJsZXMgdXNlZCBpbiB0cnkgb3Igc3luYyBibG9ja3MuCiAgLy8vIElmIFtvbmx5Rm9yUnRpQ2hlY2tzXSBpcyB0cnVlLCBhZGQgdG8gdGhlIGZyZWVWYXJpYWJsZXNGb3JSdGkgc2V0IGluc3RlYWQKICAvLy8gb2YgZnJlZVZhcmlhYmxlcyBhcyB3ZSB3aWxsIG9ubHkgdXNlIGl0IGlmIHJ1bnRpbWUgdHlwZSBpbmZvcm1hdGlvbiBpcwogIC8vLyBjaGVja2VkLgogIHZvaWQgX21hcmtWYXJpYWJsZUFzVXNlZCgKICAgICAgaXIuTm9kZSAvKiBWYXJpYWJsZURlY2xhcmF0aW9uIHwgVHlwZVBhcmFtZXRlclR5cGVXaXRoQ29udGV4dCAqLyB2YXJpYWJsZSwKICAgICAgVmFyaWFibGVVc2UgdXNhZ2UpIHsKICAgIGFzc2VydCh2YXJpYWJsZSBpcyBpci5WYXJpYWJsZURlY2xhcmF0aW9uIHx8CiAgICAgICAgdmFyaWFibGUgaXMgVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0KTsKICAgIGFzc2VydCh1c2FnZSAhPSBudWxsKTsKICAgIGlmIChfaXNJbnNpZGVDbG9zdXJlICYmICFfaW5DdXJyZW50Q29udGV4dCh2YXJpYWJsZSkpIHsKICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgbm90IGRlY2xhcmVkIGluIHRoZSBjdXJyZW50IGZ1bmN0aW9uIGFuZCB0aGUgZWxlbWVudAogICAgICAvLyBpcyBub3QgdGhlIGNsb3N1cmUgaXRzZWxmIHdlIG5lZWQgdG8gbWFyayB0aGUgZWxlbWVudCBhcyBmcmVlIHZhcmlhYmxlLgogICAgICAvLyBOb3RlIHRoYXQgdGhlIGNoZWNrIG9uIFtpbnNpZGVDbG9zdXJlXSBpcyBub3QganVzdCBhbgogICAgICAvLyBvcHRpbWl6YXRpb246IGZhY3RvcmllcyBoYXZlIHR5cGUgcGFyYW1ldGVycyBhcyBmdW5jdGlvbgogICAgICAvLyBwYXJhbWV0ZXJzLCBhbmQgdHlwZSBwYXJhbWV0ZXJzIGFyZSBkZWNsYXJlZCBpbiB0aGUgY2xhc3MsIG5vdAogICAgICAvLyB0aGUgZmFjdG9yeS4KICAgICAgaWYgKHVzYWdlID09IFZhcmlhYmxlVXNlLmV4cGxpY2l0KSB7CiAgICAgICAgX2N1cnJlbnRTY29wZUluZm8uZnJlZVZhcmlhYmxlcy5hZGQodmFyaWFibGUpOwogICAgICB9IGVsc2UgewogICAgICAgIF9jdXJyZW50U2NvcGVJbmZvLmZyZWVWYXJpYWJsZXNGb3JSdGkKICAgICAgICAgICAgLnB1dElmQWJzZW50KHZhcmlhYmxlLCAoKSA9PiBuZXcgU2V0PFZhcmlhYmxlVXNlPigpKQogICAgICAgICAgICAuYWRkKHVzYWdlKTsKICAgICAgfQogICAgfQogICAgaWYgKF9pblRyeSAmJiB2YXJpYWJsZSBpcyBpci5WYXJpYWJsZURlY2xhcmF0aW9uKSB7CiAgICAgIF9jdXJyZW50U2NvcGVJbmZvLmxvY2Fsc1VzZWRJblRyeU9yU3luYy5hZGQodmFyaWFibGUpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0VGhpc0V4cHJlc3Npb24oaXIuVGhpc0V4cHJlc3Npb24gdGhpc0V4cHJlc3Npb24pIHsKICAgIGlmIChfaGFzVGhpc0xvY2FsKSB7CiAgICAgIF9yZWdpc3Rlck5lZWRzVGhpcyhWYXJpYWJsZVVzZS5leHBsaWNpdCk7CiAgICB9CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFR5cGVQYXJhbWV0ZXIoaXIuVHlwZVBhcmFtZXRlciB0eXBlUGFyYW1ldGVyKSB7CiAgICBpci5UcmVlTm9kZSBjb250ZXh0ID0gX2V4ZWN1dGFibGVDb250ZXh0OwogICAgVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0IHR5cGVWYXJpYWJsZSA9IG5ldyBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQoCiAgICAgICAgbmV3IGlyLlR5cGVQYXJhbWV0ZXJUeXBlKHR5cGVQYXJhbWV0ZXIpLAogICAgICAgIC8vIElmIHRoaXMgdHlwZVBhcmFtZXRlciBpcyBwYXJ0IG9mIGEgdHlwZWRlZiB0aGVuIGl0cyBwYXJlbnQgaXMKICAgICAgICAvLyBudWxsIGJlY2F1c2UgaXQgaGFzIG5vIGNvbnRleHQuIEp1c3QgcGFzcyBpbiBudWxsIGZvciB0aGUKICAgICAgICAvLyBjb250ZXh0IGluIHRoYXQgY2FzZS4KICAgICAgICB0eXBlUGFyYW1ldGVyLnBhcmVudCAhPSBudWxsID8gdHlwZVBhcmFtZXRlci5wYXJlbnQucGFyZW50IDogbnVsbCk7CiAgICBpZiAoX2lzSW5zaWRlQ2xvc3VyZSAmJiBjb250ZXh0IGlzIGlyLlByb2NlZHVyZSAmJiBjb250ZXh0LmlzRmFjdG9yeSkgewogICAgICAvLyBUaGlzIGlzIGEgY2xvc3VyZSBpbiBhIGZhY3RvcnkgY29uc3RydWN0b3IuICBTaW5jZSB0aGVyZSBpcyBubwogICAgICAvLyBbOnRoaXM6XSwgd2UgaGF2ZSB0byBtYXJrIHRoZSB0eXBlIGFyZ3VtZW50cyBhcyBmcmVlIHZhcmlhYmxlcyB0bwogICAgICAvLyBjYXB0dXJlIHRoZW0gaW4gdGhlIGNsb3N1cmUuCiAgICAgIF91c2VUeXBlVmFyaWFibGVBc0xvY2FsKHR5cGVWYXJpYWJsZSwgX2N1cnJlbnRUeXBlVXNhZ2UpOwogICAgfQoKICAgIGlmIChfZXhlY3V0YWJsZUNvbnRleHQgaXMgaXIuTWVtYmVyICYmIF9leGVjdXRhYmxlQ29udGV4dCBpcyEgaXIuRmllbGQpIHsKICAgICAgLy8gSW4gY2hlY2tlZCBtb2RlLCB1c2luZyBhIHR5cGUgdmFyaWFibGUgaW4gYSB0eXBlIGFubm90YXRpb24gbWF5IGxlYWQKICAgICAgLy8gdG8gYSBydW50aW1lIHR5cGUgY2hlY2sgdGhhdCBuZWVkcyB0byBhY2Nlc3MgdGhlIHR5cGUgYXJndW1lbnQgYW5kCiAgICAgIC8vIHRoZXJlZm9yZSB0aGUgY2xvc3VyZSBuZWVkcyBhIHRoaXMtZWxlbWVudCwgaWYgaXQgaXMgbm90IGluIGEgZmllbGQKICAgICAgLy8gaW5pdGlhbGl6ZXI7IGZpZWxkIGluaXRpYWxpemVycyBhcmUgZXZhbHVhdGVkIGluIGEgY29udGV4dCB3aGVyZQogICAgICAvLyB0aGUgdHlwZSBhcmd1bWVudHMgYXJlIGF2YWlsYWJsZSBpbiBsb2NhbHMuCgogICAgICBpZiAoX2hhc1RoaXNMb2NhbCkgewogICAgICAgIF9yZWdpc3Rlck5lZWRzVGhpcyhfY3VycmVudFR5cGVVc2FnZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3VzZVR5cGVWYXJpYWJsZUFzTG9jYWwodHlwZVZhcmlhYmxlLCBfY3VycmVudFR5cGVVc2FnZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKTsKICB9CgogIC8vLyBBZGQgYHRoaXNgIGFzIGEgdmFyaWFibGUgdGhhdCBuZWVkcyB0byBiZSBhY2Nlc3NlZCAoYW5kIHRodXMgbWF5IGJlY29tZSBhCiAgLy8vIGZyZWUvY2FwdHVyZWQgdmFyaWFibGUuCiAgLy8vIElmIFtvbmx5SWZOZWVkc1J0aV0gaXMgdHJ1ZSwgc2V0IHRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpIHRvIHRydWUKICAvLy8gaW5zdGVhZCBvZiB0aGlzVXNlZEFzRnJlZVZhcmlhYmxlIGFzIHdlIHdpbGwgb25seSB1c2UgYHRoaXNgIGlmIHJ1bnRpbWUKICAvLy8gdHlwZSBpbmZvcm1hdGlvbiBpcyBjaGVja2VkLgogIHZvaWQgX3JlZ2lzdGVyTmVlZHNUaGlzKFZhcmlhYmxlVXNlIHVzYWdlKSB7CiAgICBpZiAoX2lzSW5zaWRlQ2xvc3VyZSkgewogICAgICBpZiAodXNhZ2UgPT0gVmFyaWFibGVVc2UuZXhwbGljaXQpIHsKICAgICAgICBfY3VycmVudFNjb3BlSW5mby50aGlzVXNlZEFzRnJlZVZhcmlhYmxlID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfY3VycmVudFNjb3BlSW5mby50aGlzVXNlZEFzRnJlZVZhcmlhYmxlSWZOZWVkc1J0aS5hZGQodXNhZ2UpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRGb3JJblN0YXRlbWVudChpci5Gb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICAvLyBXZSBuZWVkIHRvIHNldCBgaW5UcnlgIHRvIHRydWUgaWYgdGhpcyBpcyBhbiBhc3luYyBmb3ItaW4gYmVjYXVzZSB3ZQogICAgLy8gZGVzdWdhciBpdCBpbnRvIGEgdHJ5LWZpbmFsbHkgaW4gdGhlIFNTQSBwaGFzZS4KICAgIGJvb2wgb2xkSW5UcnkgPSBfaW5Ucnk7CiAgICBpZiAobm9kZS5pc0FzeW5jKSB7CiAgICAgIF9pblRyeSA9IHRydWU7CiAgICB9CiAgICBlbnRlck5ld1Njb3BlKG5vZGUsICgpIHsKICAgICAgdmlzaXROb2RlKG5vZGUudmFyaWFibGUpOwogICAgICB2aXNpdEluVmFyaWFibGVTY29wZShub2RlLCAoKSB7CiAgICAgICAgdmlzaXROb2RlKG5vZGUuaXRlcmFibGUpOwogICAgICAgIHZpc2l0Tm9kZShub2RlLmJvZHkpOwogICAgICB9KTsKICAgIH0pOwogICAgaWYgKG5vZGUuaXNBc3luYykgewogICAgICBfaW5UcnkgPSBvbGRJblRyeTsKICAgIH0KICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0V2hpbGVTdGF0ZW1lbnQoaXIuV2hpbGVTdGF0ZW1lbnQgbm9kZSkgewogICAgZW50ZXJOZXdTY29wZShub2RlLCAoKSB7CiAgICAgIHZpc2l0SW5WYXJpYWJsZVNjb3BlKG5vZGUsICgpIHsKICAgICAgICB2aXNpdE5vZGUobm9kZS5jb25kaXRpb24pOwogICAgICAgIHZpc2l0Tm9kZShub2RlLmJvZHkpOwogICAgICB9KTsKICAgIH0pOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXREb1N0YXRlbWVudChpci5Eb1N0YXRlbWVudCBub2RlKSB7CiAgICBlbnRlck5ld1Njb3BlKG5vZGUsICgpIHsKICAgICAgdmlzaXRJblZhcmlhYmxlU2NvcGUobm9kZSwgKCkgewogICAgICAgIHZpc2l0Tm9kZShub2RlLmJvZHkpOwogICAgICAgIHZpc2l0Tm9kZShub2RlLmNvbmRpdGlvbik7CiAgICAgIH0pOwogICAgfSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEZvclN0YXRlbWVudChpci5Gb3JTdGF0ZW1lbnQgbm9kZSkgewogICAgTGlzdDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPiBib3hlZExvb3BWYXJpYWJsZXMgPQogICAgICAgIDxpci5WYXJpYWJsZURlY2xhcmF0aW9uPltdOwogICAgZW50ZXJOZXdTY29wZShub2RlLCAoKSB7CiAgICAgIC8vIEZpcnN0IHZpc2l0IGluaXRpYWxpemVkIHZhcmlhYmxlcyBhbmQgdXBkYXRlIHN0ZXBzIHNvIHdlIGNhbiBlYXNpbHkKICAgICAgLy8gY2hlY2sgaWYgYSBsb29wIHZhcmlhYmxlIHdhcyBjYXB0dXJlZCBpbiBvbmUgb2YgdGhlc2Ugc3ViZXhwcmVzc2lvbnMuCiAgICAgIHZpc2l0Tm9kZXMobm9kZS52YXJpYWJsZXMpOwogICAgICB2aXNpdEluVmFyaWFibGVTY29wZShub2RlLCAoKSB7CiAgICAgICAgdmlzaXROb2Rlcyhub2RlLnVwZGF0ZXMpOwogICAgICB9KTsKCiAgICAgIC8vIExvb3AgdmFyaWFibGVzIHRoYXQgaGF2ZSBub3QgYmVlbiBjYXB0dXJlZCB5ZXQgY2FuIHNhZmVseSBiZSBmbGFnZ2VkIGFzCiAgICAgIC8vIG5vbi1tdXRhdGVkLCBiZWNhdXNlIG5vIG5lc3RlZCBmdW5jdGlvbiBjYW4gb2JzZXJ2ZSB0aGUgbXV0YXRpb24uCiAgICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSBpbiBub2RlLnZhcmlhYmxlcykgewogICAgICAgIGlmICghX2NhcHR1cmVkVmFyaWFibGVzLmNvbnRhaW5zKHZhcmlhYmxlKSkgewogICAgICAgICAgX211dGF0ZWRWYXJpYWJsZXMucmVtb3ZlKHZhcmlhYmxlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIFZpc2l0IGNvbmRpdGlvbiBhbmQgYm9keS4KICAgICAgLy8gVGhpcyBtdXN0IGhhcHBlbiBhZnRlciB0aGUgYWJvdmUsIHNvIGFueSBsb29wIHZhcmlhYmxlcyBtdXRhdGVkIGluIHRoZQogICAgICAvLyBjb25kaXRpb24gb3IgYm9keSBhcmUgaW5kZWVkIGZsYWdnZWQgYXMgbXV0YXRlZC4KICAgICAgdmlzaXRJblZhcmlhYmxlU2NvcGUobm9kZSwgKCkgewogICAgICAgIHZpc2l0Tm9kZShub2RlLmNvbmRpdGlvbik7CiAgICAgICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICAgIH0pOwoKICAgICAgLy8gU2VlIGlmIHdlIGhhdmUgZGVjbGFyZWQgbG9vcCB2YXJpYWJsZXMgdGhhdCBuZWVkIHRvIGJlIGJveGVkLgogICAgICBmb3IgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUgaW4gbm9kZS52YXJpYWJsZXMpIHsKICAgICAgICAvLyBOb24tbXV0YXRlZCB2YXJpYWJsZXMgc2hvdWxkIG5vdCBiZSBib3hlZC4gIFRoZSBfbXV0YXRlZFZhcmlhYmxlcyBzZXQKICAgICAgICAvLyBnZXRzIGNsZWFyZWQgd2hlbiBgZW50ZXJOZXdTY29wZWAgcmV0dXJucywgc28gY2hlY2sgaXQgaGVyZS4KICAgICAgICBpZiAoX2NhcHR1cmVkVmFyaWFibGVzLmNvbnRhaW5zKHZhcmlhYmxlKSAmJgogICAgICAgICAgICBfbXV0YXRlZFZhcmlhYmxlcy5jb250YWlucyh2YXJpYWJsZSkpIHsKICAgICAgICAgIGJveGVkTG9vcFZhcmlhYmxlcy5hZGQodmFyaWFibGUpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgICBLZXJuZWxDYXB0dXJlZFNjb3BlIHNjb3BlID0gX3Njb3Blc0NhcHR1cmVkSW5DbG9zdXJlTWFwW25vZGVdOwogICAgaWYgKHNjb3BlICE9IG51bGwpIHsKICAgICAgX3Njb3Blc0NhcHR1cmVkSW5DbG9zdXJlTWFwW25vZGVdID0gbmV3IEtlcm5lbENhcHR1cmVkTG9vcFNjb3BlKAogICAgICAgICAgc2NvcGUuYm94ZWRWYXJpYWJsZXMsCiAgICAgICAgICBzY29wZS5jYXB0dXJlZFZhcmlhYmxlc0FjY2Vzc29yLAogICAgICAgICAgYm94ZWRMb29wVmFyaWFibGVzLAogICAgICAgICAgc2NvcGUubG9jYWxzVXNlZEluVHJ5T3JTeW5jLAogICAgICAgICAgc2NvcGUuZnJlZVZhcmlhYmxlcywKICAgICAgICAgIHNjb3BlLmZyZWVWYXJpYWJsZXNGb3JSdGksCiAgICAgICAgICBzY29wZS50aGlzVXNlZEFzRnJlZVZhcmlhYmxlLAogICAgICAgICAgc2NvcGUudGhpc1VzZWRBc0ZyZWVWYXJpYWJsZUlmTmVlZHNSdGksCiAgICAgICAgICBzY29wZS5oYXNUaGlzTG9jYWwpOwogICAgfQogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRTdXBlck1ldGhvZEludm9jYXRpb24oCiAgICAgIGlyLlN1cGVyTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICBpZiAoX2hhc1RoaXNMb2NhbCkgewogICAgICBfcmVnaXN0ZXJOZWVkc1RoaXMoVmFyaWFibGVVc2UuZXhwbGljaXQpOwogICAgfQogICAgaWYgKG5vZGUuYXJndW1lbnRzLnR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgdmlzaXROb2Rlc0luQ29udGV4dChub2RlLmFyZ3VtZW50cy50eXBlcywKICAgICAgICAgIG5ldyBWYXJpYWJsZVVzZS5zdGF0aWNUeXBlQXJndW1lbnQobm9kZS5pbnRlcmZhY2VUYXJnZXQpKTsKICAgIH0KICAgIHZpc2l0Tm9kZXMobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbCk7CiAgICB2aXNpdE5vZGVzKG5vZGUuYXJndW1lbnRzLm5hbWVkKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0U3VwZXJQcm9wZXJ0eVNldChpci5TdXBlclByb3BlcnR5U2V0IG5vZGUpIHsKICAgIGlmIChfaGFzVGhpc0xvY2FsKSB7CiAgICAgIF9yZWdpc3Rlck5lZWRzVGhpcyhWYXJpYWJsZVVzZS5leHBsaWNpdCk7CiAgICB9CiAgICB2aXNpdE5vZGUobm9kZS52YWx1ZSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFN1cGVyUHJvcGVydHlHZXQoaXIuU3VwZXJQcm9wZXJ0eUdldCBub2RlKSB7CiAgICBpZiAoX2hhc1RoaXNMb2NhbCkgewogICAgICBfcmVnaXN0ZXJOZWVkc1RoaXMoVmFyaWFibGVVc2UuZXhwbGljaXQpOwogICAgfQogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICB2b2lkIHZpc2l0SW52b2thYmxlKGlyLlRyZWVOb2RlIG5vZGUsIHZvaWQgZigpKSB7CiAgICBhc3NlcnQobm9kZSBpcyBpci5NZW1iZXIgfHwgbm9kZSBpcyBpci5Mb2NhbEZ1bmN0aW9uKTsKICAgIGJvb2wgb2xkSXNJbnNpZGVDbG9zdXJlID0gX2lzSW5zaWRlQ2xvc3VyZTsKICAgIGlyLlRyZWVOb2RlIG9sZEV4ZWN1dGFibGVDb250ZXh0ID0gX2V4ZWN1dGFibGVDb250ZXh0OwogICAgS2VybmVsU2NvcGVJbmZvIG9sZFNjb3BlSW5mbyA9IF9jdXJyZW50U2NvcGVJbmZvOwoKICAgIC8vIF9vdXRlcm1vc3ROb2RlIGlzIG9ubHkgbnVsbCB0aGUgZmlyc3QgdGltZSB3ZSBlbnRlciB0aGUgYm9keSBvZiB0aGUKICAgIC8vIGZpZWxkLCBjb25zdHJ1Y3Rvciwgb3IgbWV0aG9kIHRoYXQgaXMgYmVpbmcgYW5hbHl6ZWQuCiAgICBfaXNJbnNpZGVDbG9zdXJlID0gX291dGVybW9zdE5vZGUgIT0gbnVsbDsKICAgIF9leGVjdXRhYmxlQ29udGV4dCA9IG5vZGU7CgogICAgX2N1cnJlbnRTY29wZUluZm8gPSBuZXcgS2VybmVsU2NvcGVJbmZvKF9oYXNUaGlzTG9jYWwpOwoKICAgIGlmIChfaXNJbnNpZGVDbG9zdXJlKSB7CiAgICAgIF9jbG9zdXJlc1RvR2VuZXJhdGVbbm9kZV0gPSBfY3VycmVudFNjb3BlSW5mbzsKICAgIH0gZWxzZSB7CiAgICAgIF9vdXRlcm1vc3ROb2RlID0gbm9kZTsKICAgICAgX21vZGVsLnNjb3BlSW5mbyA9IF9jdXJyZW50U2NvcGVJbmZvOwogICAgfQoKICAgIGVudGVyTmV3U2NvcGUobm9kZSwgZik7CgogICAgS2VybmVsU2NvcGVJbmZvIHNhdmVkU2NvcGVJbmZvID0gX2N1cnJlbnRTY29wZUluZm87CiAgICBib29sIHNhdmVkSXNJbnNpZGVDbG9zdXJlID0gX2lzSW5zaWRlQ2xvc3VyZTsKCiAgICAvLyBSZXN0b3JlIG9sZCB2YWx1ZXMuCiAgICBfaXNJbnNpZGVDbG9zdXJlID0gb2xkSXNJbnNpZGVDbG9zdXJlOwogICAgX2N1cnJlbnRTY29wZUluZm8gPSBvbGRTY29wZUluZm87CiAgICBfZXhlY3V0YWJsZUNvbnRleHQgPSBvbGRFeGVjdXRhYmxlQ29udGV4dDsKCiAgICAvLyBNYXJrIGFsbCBmcmVlIHZhcmlhYmxlcyBhcyBjYXB0dXJlZCBhbmQgZXhwZWN0IHRvIGVuY291bnRlciB0aGVtIGluIHRoZQogICAgLy8gb3V0ZXIgZnVuY3Rpb24uCiAgICBJdGVyYWJsZTxpci5Ob2RlPiBmcmVlVmFyaWFibGVzID0gc2F2ZWRTY29wZUluZm8uZnJlZVZhcmlhYmxlczsKICAgIGFzc2VydChmcmVlVmFyaWFibGVzLmlzRW1wdHkgfHwgc2F2ZWRJc0luc2lkZUNsb3N1cmUpOwogICAgZm9yIChpci5Ob2RlIGZyZWVWYXJpYWJsZSBpbiBmcmVlVmFyaWFibGVzKSB7CiAgICAgIF9jYXB0dXJlZFZhcmlhYmxlcy5hZGQoZnJlZVZhcmlhYmxlKTsKICAgICAgX21hcmtWYXJpYWJsZUFzVXNlZChmcmVlVmFyaWFibGUsIFZhcmlhYmxlVXNlLmV4cGxpY2l0KTsKICAgIH0KICAgIHNhdmVkU2NvcGVJbmZvLmZyZWVWYXJpYWJsZXNGb3JSdGkuZm9yRWFjaCgKICAgICAgICAoVHlwZVZhcmlhYmxlVHlwZVdpdGhDb250ZXh0IGZyZWVWYXJpYWJsZUZvclJ0aSwKICAgICAgICAgICAgU2V0PFZhcmlhYmxlVXNlPiB1c2VTZXQpIHsKICAgICAgZm9yIChWYXJpYWJsZVVzZSB1c2FnZSBpbiB1c2VTZXQpIHsKICAgICAgICBfbWFya1ZhcmlhYmxlQXNVc2VkKGZyZWVWYXJpYWJsZUZvclJ0aSwgdXNhZ2UpOwogICAgICB9CiAgICB9KTsKICAgIGlmIChfaXNJbnNpZGVDbG9zdXJlICYmIHNhdmVkU2NvcGVJbmZvLnRoaXNVc2VkQXNGcmVlVmFyaWFibGUpIHsKICAgICAgX2N1cnJlbnRTY29wZUluZm8udGhpc1VzZWRBc0ZyZWVWYXJpYWJsZSA9IHRydWU7CiAgICB9CiAgICBpZiAoX2lzSW5zaWRlQ2xvc3VyZSkgewogICAgICBfY3VycmVudFNjb3BlSW5mby50aGlzVXNlZEFzRnJlZVZhcmlhYmxlSWZOZWVkc1J0aQogICAgICAgICAgLmFkZEFsbChzYXZlZFNjb3BlSW5mby50aGlzVXNlZEFzRnJlZVZhcmlhYmxlSWZOZWVkc1J0aSk7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJuIHRydWUgaWYgW3ZhcmlhYmxlXSdzIGNvbnRleHQgaXMgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnQgZXhlY3V0YWJsZQogIC8vLyBjb250ZXh0LgogIGJvb2wgX2luQ3VycmVudENvbnRleHQoaXIuTm9kZSB2YXJpYWJsZSkgewogICAgYXNzZXJ0KHZhcmlhYmxlIGlzIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gfHwKICAgICAgICB2YXJpYWJsZSBpcyBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQpOwogICAgaWYgKHZhcmlhYmxlIGlzIFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCkgewogICAgICByZXR1cm4gdmFyaWFibGUuY29udGV4dCA9PSBfZXhlY3V0YWJsZUNvbnRleHQ7CiAgICB9CiAgICBpci5UcmVlTm9kZSBub2RlID0gdmFyaWFibGU7CiAgICB3aGlsZSAobm9kZSAhPSBfb3V0ZXJtb3N0Tm9kZSAmJiBub2RlICE9IF9leGVjdXRhYmxlQ29udGV4dCkgewogICAgICBub2RlID0gbm9kZS5wYXJlbnQ7CiAgICB9CiAgICByZXR1cm4gbm9kZSA9PSBfZXhlY3V0YWJsZUNvbnRleHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRGaWVsZChpci5GaWVsZCBub2RlKSB7CiAgICBfY3VycmVudFR5cGVVc2FnZSA9IFZhcmlhYmxlVXNlLmZpZWxkVHlwZTsKICAgIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21wbGV4aXR5OwogICAgdmlzaXRJbnZva2FibGUobm9kZSwgKCkgewogICAgICBjb21wbGV4aXR5ID0gdmlzaXROb2RlKG5vZGUuaW5pdGlhbGl6ZXIpOwogICAgfSk7CiAgICBfY3VycmVudFR5cGVVc2FnZSA9IG51bGw7CiAgICByZXR1cm4gY29tcGxleGl0eTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdENvbnN0cnVjdG9yKGlyLkNvbnN0cnVjdG9yIG5vZGUpIHsKICAgIHZpc2l0SW52b2thYmxlKG5vZGUsICgpIHsKICAgICAgdmlzaXROb2Rlcyhub2RlLmluaXRpYWxpemVycyk7CiAgICAgIHZpc2l0Tm9kZShub2RlLmZ1bmN0aW9uKTsKICAgIH0pOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRQcm9jZWR1cmUoaXIuUHJvY2VkdXJlIG5vZGUpIHsKICAgIHZpc2l0SW52b2thYmxlKG5vZGUsICgpIHsKICAgICAgdmlzaXROb2RlKG5vZGUuZnVuY3Rpb24pOwogICAgfSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEZ1bmN0aW9uRXhwcmVzc2lvbihpci5GdW5jdGlvbkV4cHJlc3Npb24gbm9kZSkgewogICAgdmlzaXRJbnZva2FibGUobm9kZSwgKCkgewogICAgICB2aXNpdEluVmFyaWFibGVTY29wZShub2RlLCAoKSB7CiAgICAgICAgdmlzaXROb2RlKG5vZGUuZnVuY3Rpb24pOwogICAgICB9KTsKICAgIH0pOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRGdW5jdGlvbkRlY2xhcmF0aW9uKGlyLkZ1bmN0aW9uRGVjbGFyYXRpb24gbm9kZSkgewogICAgdmlzaXRJbnZva2FibGUobm9kZSwgKCkgewogICAgICB2aXNpdEluVmFyaWFibGVTY29wZShub2RlLCAoKSB7CiAgICAgICAgdmlzaXROb2RlKG5vZGUuZnVuY3Rpb24pOwogICAgICB9KTsKICAgIH0pOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXREeW5hbWljVHlwZShpci5EeW5hbWljVHlwZSBub2RlKSA9PgogICAgICBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKTsKCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Qm90dG9tVHlwZShpci5Cb3R0b21UeXBlIG5vZGUpID0+CiAgICAgIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEludmFsaWRUeXBlKGlyLkludmFsaWRUeXBlIG5vZGUpID0+CiAgICAgIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFZvaWRUeXBlKGlyLlZvaWRUeXBlIG5vZGUpID0+CiAgICAgIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRJbnRlcmZhY2VUeXBlKGlyLkludGVyZmFjZVR5cGUgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0Tm9kZXMobm9kZS50eXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEZ1bmN0aW9uVHlwZShpci5GdW5jdGlvblR5cGUgbm9kZSkgewogICAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGNvbXBsZXhpdHkgPSB2aXNpdE5vZGUobm9kZS5yZXR1cm5UeXBlKTsKICAgIGNvbXBsZXhpdHkgPSBjb21wbGV4aXR5LmNvbWJpbmUodmlzaXROb2Rlcyhub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSk7CiAgICBjb21wbGV4aXR5ID0gY29tcGxleGl0eS5jb21iaW5lKHZpc2l0Tm9kZXMobm9kZS5uYW1lZFBhcmFtZXRlcnMpKTsKICAgIHJldHVybiBjb21wbGV4aXR5LmNvbWJpbmUodmlzaXROb2Rlcyhub2RlLnR5cGVQYXJhbWV0ZXJzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXROYW1lZFR5cGUoaXIuTmFtZWRUeXBlIG5vZGUpIHsKICAgIHJldHVybiB2aXNpdE5vZGUobm9kZS50eXBlKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKGlyLlR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIF9hbmFseXplVHlwZVZhcmlhYmxlKG5vZGUsIF9jdXJyZW50VHlwZVVzYWdlKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0SW5Db250ZXh0KGlyLk5vZGUgbm9kZSwgVmFyaWFibGVVc2UgdXNlKSB7CiAgICBWYXJpYWJsZVVzZSBvbGRDdXJyZW50VHlwZVVzYWdlID0gX2N1cnJlbnRUeXBlVXNhZ2U7CiAgICBfY3VycmVudFR5cGVVc2FnZSA9IHVzZTsKICAgIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21wbGV4aXR5ID0gdmlzaXROb2RlKG5vZGUpOwogICAgX2N1cnJlbnRUeXBlVXNhZ2UgPSBvbGRDdXJyZW50VHlwZVVzYWdlOwogICAgcmV0dXJuIGNvbXBsZXhpdHk7CiAgfQoKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXROb2Rlc0luQ29udGV4dCgKICAgICAgTGlzdDxpci5Ob2RlPiBub2RlcywgVmFyaWFibGVVc2UgdXNlKSB7CiAgICBWYXJpYWJsZVVzZSBvbGRDdXJyZW50VHlwZVVzYWdlID0gX2N1cnJlbnRUeXBlVXNhZ2U7CiAgICBfY3VycmVudFR5cGVVc2FnZSA9IHVzZTsKICAgIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21wbGV4aXR5ID0gdmlzaXROb2Rlcyhub2Rlcyk7CiAgICBfY3VycmVudFR5cGVVc2FnZSA9IG9sZEN1cnJlbnRUeXBlVXNhZ2U7CiAgICByZXR1cm4gY29tcGxleGl0eTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFR5cGVMaXRlcmFsKGlyLlR5cGVMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiB2aXNpdEluQ29udGV4dChub2RlLnR5cGUsIFZhcmlhYmxlVXNlLmV4cGxpY2l0KTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdElzRXhwcmVzc2lvbihpci5Jc0V4cHJlc3Npb24gbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUub3BlcmFuZCk7CiAgICB2aXNpdEluQ29udGV4dChub2RlLnR5cGUsIFZhcmlhYmxlVXNlLmV4cGxpY2l0KTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0QXNFeHByZXNzaW9uKGlyLkFzRXhwcmVzc2lvbiBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5vcGVyYW5kKTsKICAgIHZpc2l0SW5Db250ZXh0KG5vZGUudHlwZSwKICAgICAgICBub2RlLmlzVHlwZUVycm9yID8gVmFyaWFibGVVc2UuaW1wbGljaXRDYXN0IDogVmFyaWFibGVVc2UuZXhwbGljaXQpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRBd2FpdEV4cHJlc3Npb24oaXIuQXdhaXRFeHByZXNzaW9uIG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLm9wZXJhbmQpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRZaWVsZFN0YXRlbWVudChpci5ZaWVsZFN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0TG9hZExpYnJhcnkoaXIuTG9hZExpYnJhcnkgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRDaGVja0xpYnJhcnlJc0xvYWRlZCgKICAgICAgaXIuQ2hlY2tMaWJyYXJ5SXNMb2FkZWQgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRGdW5jdGlvbk5vZGUoaXIuRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIFZhcmlhYmxlVXNlIHBhcmFtZXRlclVzYWdlID0gbm9kZS5wYXJlbnQgaXMgaXIuTWVtYmVyCiAgICAgICAgPyBuZXcgVmFyaWFibGVVc2UubWVtYmVyUGFyYW1ldGVyKG5vZGUucGFyZW50KQogICAgICAgIDogbmV3IFZhcmlhYmxlVXNlLmxvY2FsUGFyYW1ldGVyKG5vZGUucGFyZW50KTsKICAgIHZpc2l0Tm9kZXNJbkNvbnRleHQobm9kZS50eXBlUGFyYW1ldGVycywgcGFyYW1ldGVyVXNhZ2UpOwogICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIGRlY2xhcmF0aW9uIGluIG5vZGUucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgX2hhbmRsZVZhcmlhYmxlRGVjbGFyYXRpb24oZGVjbGFyYXRpb24sIHBhcmFtZXRlclVzYWdlKTsKICAgIH0KICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBkZWNsYXJhdGlvbiBpbiBub2RlLm5hbWVkUGFyYW1ldGVycykgewogICAgICBfaGFuZGxlVmFyaWFibGVEZWNsYXJhdGlvbihkZWNsYXJhdGlvbiwgcGFyYW1ldGVyVXNhZ2UpOwogICAgfQogICAgdmlzaXRJbkNvbnRleHQoCiAgICAgICAgbm9kZS5yZXR1cm5UeXBlLAogICAgICAgIG5vZGUucGFyZW50IGlzIGlyLk1lbWJlcgogICAgICAgICAgICA/IG5ldyBWYXJpYWJsZVVzZS5tZW1iZXJSZXR1cm5UeXBlKG5vZGUucGFyZW50KQogICAgICAgICAgICA6IG5ldyBWYXJpYWJsZVVzZS5sb2NhbFJldHVyblR5cGUobm9kZS5wYXJlbnQpKTsKICAgIHZpc2l0Tm9kZShub2RlLmJvZHkpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRMaXN0TGl0ZXJhbChpci5MaXN0TGl0ZXJhbCBub2RlKSB7CiAgICBJbml0aWFsaXplckNvbXBsZXhpdHkgY29tcGxleGl0eSA9CiAgICAgICAgdmlzaXRJbkNvbnRleHQobm9kZS50eXBlQXJndW1lbnQsIFZhcmlhYmxlVXNlLmxpc3RMaXRlcmFsKTsKICAgIGNvbXBsZXhpdHkgPSBjb21wbGV4aXR5LmNvbWJpbmUodmlzaXROb2Rlcyhub2RlLmV4cHJlc3Npb25zKSk7CiAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBjb21wbGV4aXR5Lm1ha2VFYWdlcigpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0U2V0TGl0ZXJhbChpci5TZXRMaXRlcmFsIG5vZGUpIHsKICAgIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21wbGV4aXR5ID0KICAgICAgICB2aXNpdEluQ29udGV4dChub2RlLnR5cGVBcmd1bWVudCwgVmFyaWFibGVVc2Uuc2V0TGl0ZXJhbCk7CiAgICBjb21wbGV4aXR5ID0gY29tcGxleGl0eS5jb21iaW5lKHZpc2l0Tm9kZXMobm9kZS5leHByZXNzaW9ucykpOwogICAgaWYgKG5vZGUuaXNDb25zdCkgewogICAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gY29tcGxleGl0eS5tYWtlRWFnZXIoKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdE1hcExpdGVyYWwoaXIuTWFwTGl0ZXJhbCBub2RlKSB7CiAgICBJbml0aWFsaXplckNvbXBsZXhpdHkgY29tcGxleGl0eSA9CiAgICAgICAgdmlzaXRJbkNvbnRleHQobm9kZS5rZXlUeXBlLCBWYXJpYWJsZVVzZS5tYXBMaXRlcmFsKTsKICAgIGNvbXBsZXhpdHkgPSBjb21wbGV4aXR5CiAgICAgICAgLmNvbWJpbmUodmlzaXRJbkNvbnRleHQobm9kZS52YWx1ZVR5cGUsIFZhcmlhYmxlVXNlLm1hcExpdGVyYWwpKTsKICAgIGNvbXBsZXhpdHkgPSBjb21wbGV4aXR5LmNvbWJpbmUodmlzaXROb2Rlcyhub2RlLmVudHJpZXMpKTsKICAgIGlmIChub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGNvbXBsZXhpdHkubWFrZUVhZ2VyKCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRNYXBFbnRyeShpci5NYXBFbnRyeSBub2RlKSB7CiAgICBJbml0aWFsaXplckNvbXBsZXhpdHkgY29tcGxleGl0eSA9IHZpc2l0Tm9kZShub2RlLmtleSk7CiAgICByZXR1cm4gY29tcGxleGl0eS5jb21iaW5lKHZpc2l0Tm9kZShub2RlLnZhbHVlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXROdWxsTGl0ZXJhbChpci5OdWxsTGl0ZXJhbCBub2RlKSA9PgogICAgICBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKTsKCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0U3RyaW5nTGl0ZXJhbChpci5TdHJpbmdMaXRlcmFsIG5vZGUpID0+CiAgICAgIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRJbnRMaXRlcmFsKGlyLkludExpdGVyYWwgbm9kZSkgPT4KICAgICAgY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCk7CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdERvdWJsZUxpdGVyYWwoaXIuRG91YmxlTGl0ZXJhbCBub2RlKSA9PgogICAgICBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKTsKCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0U3ltYm9sTGl0ZXJhbChpci5TeW1ib2xMaXRlcmFsIG5vZGUpID0+CiAgICAgIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpOwoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRCb29sTGl0ZXJhbChpci5Cb29sTGl0ZXJhbCBub2RlKSA9PgogICAgICBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKTsKCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihpci5TdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIHZpc2l0Tm9kZXMobm9kZS5leHByZXNzaW9ucyk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFN0YXRpY0dldChpci5TdGF0aWNHZXQgbm9kZSkgewogICAgaXIuTWVtYmVyIHRhcmdldCA9IG5vZGUudGFyZ2V0OwogICAgaWYgKHRhcmdldCBpcyBpci5GaWVsZCkgewogICAgICByZXR1cm4gdGFyZ2V0LmlzQ29uc3QKICAgICAgICAgID8gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCkKICAgICAgICAgIDogbmV3IEluaXRpYWxpemVyQ29tcGxleGl0eS5lYWdlcihmaWVsZHM6IDxpci5GaWVsZD57dGFyZ2V0fSk7CiAgICB9IGVsc2UgaWYgKHRhcmdldCBpcyBpci5Qcm9jZWR1cmUgJiYKICAgICAgICB0YXJnZXQua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLk1ldGhvZCkgewogICAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCk7CiAgICB9CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFN0YXRpY1NldChpci5TdGF0aWNTZXQgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUudmFsdWUpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgewogICAgaWYgKG5vZGUuYXJndW1lbnRzLnR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgVmFyaWFibGVVc2UgdXNhZ2U7CiAgICAgIGlmIChub2RlLnRhcmdldC5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuRmFjdG9yeSkgewogICAgICAgIHVzYWdlID0gbmV3IFZhcmlhYmxlVXNlLmNvbnN0cnVjdG9yVHlwZUFyZ3VtZW50KG5vZGUudGFyZ2V0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB1c2FnZSA9IG5ldyBWYXJpYWJsZVVzZS5zdGF0aWNUeXBlQXJndW1lbnQobm9kZS50YXJnZXQpOwogICAgICB9CgogICAgICB2aXNpdE5vZGVzSW5Db250ZXh0KG5vZGUuYXJndW1lbnRzLnR5cGVzLCB1c2FnZSk7CiAgICB9CiAgICB2aXNpdE5vZGVzKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwpOwogICAgdmlzaXROb2Rlcyhub2RlLmFyZ3VtZW50cy5uYW1lZCk7CiAgICByZXR1cm4gbm9kZS5pc0NvbnN0CiAgICAgICAgPyBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkuY29uc3RhbnQoKQogICAgICAgIDogY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmFyZ3VtZW50cy50eXBlcy5pc05vdEVtcHR5KSB7CiAgICAgIHZpc2l0Tm9kZXNJbkNvbnRleHQobm9kZS5hcmd1bWVudHMudHlwZXMsCiAgICAgICAgICBuZXcgVmFyaWFibGVVc2UuY29uc3RydWN0b3JUeXBlQXJndW1lbnQobm9kZS50YXJnZXQpKTsKICAgIH0KICAgIHZpc2l0Tm9kZXMobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbCk7CiAgICB2aXNpdE5vZGVzKG5vZGUuYXJndW1lbnRzLm5hbWVkKTsKICAgIHJldHVybiBub2RlLmlzQ29uc3QKICAgICAgICA/IGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5jb25zdGFudCgpCiAgICAgICAgOiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKAogICAgICBpci5Db25kaXRpb25hbEV4cHJlc3Npb24gbm9kZSkgewogICAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGNvbXBsZXhpdHkgPSB2aXNpdE5vZGUobm9kZS5jb25kaXRpb24pOwogICAgY29tcGxleGl0eSA9IGNvbXBsZXhpdHkuY29tYmluZSh2aXNpdE5vZGUobm9kZS50aGVuKSk7CiAgICByZXR1cm4gY29tcGxleGl0eS5jb21iaW5lKHZpc2l0Tm9kZShub2RlLm90aGVyd2lzZSkpOwogICAgLy8gRG9uJ3QgdmlzaXQgYG5vZGUuc3RhdGljVHlwZWAuCiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRNZXRob2RJbnZvY2F0aW9uKGlyLk1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgaXIuVHJlZU5vZGUgcmVjZWl2ZXIgPSBub2RlLnJlY2VpdmVyOwogICAgdmlzaXROb2RlKHJlY2VpdmVyKTsKICAgIGlmIChub2RlLmFyZ3VtZW50cy50eXBlcy5pc05vdEVtcHR5KSB7CiAgICAgIFZhcmlhYmxlVXNlIHVzYWdlOwogICAgICBpZiAocmVjZWl2ZXIgaXMgaXIuVmFyaWFibGVHZXQgJiYKICAgICAgICAgIChyZWNlaXZlci52YXJpYWJsZS5wYXJlbnQgaXMgaXIuTG9jYWxGdW5jdGlvbikpIHsKICAgICAgICB1c2FnZSA9CiAgICAgICAgICAgIG5ldyBWYXJpYWJsZVVzZS5sb2NhbFR5cGVBcmd1bWVudChyZWNlaXZlci52YXJpYWJsZS5wYXJlbnQsIG5vZGUpOwogICAgICB9IGVsc2UgewogICAgICAgIHVzYWdlID0gbmV3IFZhcmlhYmxlVXNlLmluc3RhbmNlVHlwZUFyZ3VtZW50KG5vZGUpOwogICAgICB9CiAgICAgIHZpc2l0Tm9kZXNJbkNvbnRleHQobm9kZS5hcmd1bWVudHMudHlwZXMsIHVzYWdlKTsKICAgIH0KICAgIHZpc2l0Tm9kZXMobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbCk7CiAgICB2aXNpdE5vZGVzKG5vZGUuYXJndW1lbnRzLm5hbWVkKTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlY29nbml6ZSBjb25zdGFudCBvcGVyYXRpb25zLgogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRQcm9wZXJ0eUdldChpci5Qcm9wZXJ0eUdldCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5yZWNlaXZlcik7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFByb3BlcnR5U2V0KGlyLlByb3BlcnR5U2V0IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLnJlY2VpdmVyKTsKICAgIHZpc2l0Tm9kZShub2RlLnZhbHVlKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0RGlyZWN0UHJvcGVydHlHZXQoaXIuRGlyZWN0UHJvcGVydHlHZXQgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUucmVjZWl2ZXIpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXREaXJlY3RQcm9wZXJ0eVNldChpci5EaXJlY3RQcm9wZXJ0eVNldCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5yZWNlaXZlcik7CiAgICB2aXNpdE5vZGUobm9kZS52YWx1ZSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdE5vdChpci5Ob3Qgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0Tm9kZShub2RlLm9wZXJhbmQpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0TG9naWNhbEV4cHJlc3Npb24oaXIuTG9naWNhbEV4cHJlc3Npb24gbm9kZSkgewogICAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IGNvbXBsZXhpdHkgPSB2aXNpdE5vZGUobm9kZS5sZWZ0KTsKICAgIHJldHVybiBjb21wbGV4aXR5LmNvbWJpbmUodmlzaXROb2RlKG5vZGUucmlnaHQpKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdExldChpci5MZXQgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUudmFyaWFibGUpOwogICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEJsb2NrRXhwcmVzc2lvbihpci5CbG9ja0V4cHJlc3Npb24gbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICB2aXNpdE5vZGUobm9kZS52YWx1ZSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdENhdGNoKGlyLkNhdGNoIG5vZGUpIHsKICAgIHZpc2l0SW5Db250ZXh0KG5vZGUuZ3VhcmQsIFZhcmlhYmxlVXNlLmV4cGxpY2l0KTsKICAgIHZpc2l0Tm9kZShub2RlLmV4Y2VwdGlvbik7CiAgICB2aXNpdE5vZGUobm9kZS5zdGFja1RyYWNlKTsKICAgIHZpc2l0SW5WYXJpYWJsZVNjb3BlKG5vZGUsICgpIHsKICAgICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICB9KTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0SW5zdGFudGlhdGlvbihpci5JbnN0YW50aWF0aW9uIG5vZGUpIHsKICAgIEluaXRpYWxpemVyQ29tcGxleGl0eSBjb21wbGV4aXR5ID0gdmlzaXROb2Rlc0luQ29udGV4dCgKICAgICAgICBub2RlLnR5cGVBcmd1bWVudHMsIG5ldyBWYXJpYWJsZVVzZS5pbnN0YW50aWF0aW9uVHlwZUFyZ3VtZW50KG5vZGUpKTsKICAgIHJldHVybiBjb21wbGV4aXR5LmNvbWJpbmUodmlzaXROb2RlKG5vZGUuZXhwcmVzc2lvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0VGhyb3coaXIuVGhyb3cgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUuZXhwcmVzc2lvbik7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdFJldGhyb3coaXIuUmV0aHJvdyBub2RlKSA9PgogICAgICBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRCbG9jayhpci5CbG9jayBub2RlKSB7CiAgICB2aXNpdE5vZGVzKG5vZGUuc3RhdGVtZW50cyk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEFzc2VydFN0YXRlbWVudChpci5Bc3NlcnRTdGF0ZW1lbnQgbm9kZSkgewogICAgdmlzaXRJblZhcmlhYmxlU2NvcGUobm9kZSwgKCkgewogICAgICB2aXNpdE5vZGUobm9kZS5jb25kaXRpb24pOwogICAgICB2aXNpdE5vZGUobm9kZS5tZXNzYWdlKTsKICAgIH0pOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRSZXR1cm5TdGF0ZW1lbnQoaXIuUmV0dXJuU3RhdGVtZW50IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLmV4cHJlc3Npb24pOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRFbXB0eVN0YXRlbWVudChpci5FbXB0eVN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoaXIuRXhwcmVzc2lvblN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0U3dpdGNoU3RhdGVtZW50KGlyLlN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdE5vZGUobm9kZS5leHByZXNzaW9uKTsKICAgIHZpc2l0SW5WYXJpYWJsZVNjb3BlKG5vZGUsICgpIHsKICAgICAgdmlzaXROb2Rlcyhub2RlLmNhc2VzKTsKICAgIH0pOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRTd2l0Y2hDYXNlKGlyLlN3aXRjaENhc2Ugbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUuYm9keSk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KAogICAgICBpci5Db250aW51ZVN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICByZWdpc3RlckNvbnRpbnVlU3dpdGNoKCk7CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmxhenkoKTsKICB9CgogIEBvdmVycmlkZQogIEluaXRpYWxpemVyQ29tcGxleGl0eSB2aXNpdEJyZWFrU3RhdGVtZW50KGlyLkJyZWFrU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0TGFiZWxlZFN0YXRlbWVudChpci5MYWJlbGVkU3RhdGVtZW50IG5vZGUpIHsKICAgIHZpc2l0Tm9kZShub2RlLmJvZHkpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRGaWVsZEluaXRpYWxpemVyKGlyLkZpZWxkSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUudmFsdWUpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRMb2NhbEluaXRpYWxpemVyKGlyLkxvY2FsSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUudmFyaWFibGUuaW5pdGlhbGl6ZXIpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRTdXBlckluaXRpYWxpemVyKGlyLlN1cGVySW5pdGlhbGl6ZXIgbm9kZSkgewogICAgaWYgKG5vZGUuYXJndW1lbnRzLnR5cGVzLmlzTm90RW1wdHkpIHsKICAgICAgdmlzaXROb2Rlc0luQ29udGV4dChub2RlLmFyZ3VtZW50cy50eXBlcywKICAgICAgICAgIG5ldyBWYXJpYWJsZVVzZS5jb25zdHJ1Y3RvclR5cGVBcmd1bWVudChub2RlLnRhcmdldCkpOwogICAgfQogICAgdmlzaXROb2Rlcyhub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsKTsKICAgIHZpc2l0Tm9kZXMobm9kZS5hcmd1bWVudHMubmFtZWQpOwogICAgcmV0dXJuIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbml0aWFsaXplckNvbXBsZXhpdHkgdmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVyKAogICAgICBpci5SZWRpcmVjdGluZ0luaXRpYWxpemVyIG5vZGUpIHsKICAgIGlmIChub2RlLmFyZ3VtZW50cy50eXBlcy5pc05vdEVtcHR5KSB7CiAgICAgIHZpc2l0Tm9kZXNJbkNvbnRleHQobm9kZS5hcmd1bWVudHMudHlwZXMsCiAgICAgICAgICBuZXcgVmFyaWFibGVVc2UuY29uc3RydWN0b3JUeXBlQXJndW1lbnQobm9kZS50YXJnZXQpKTsKICAgIH0KICAgIHZpc2l0Tm9kZXMobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbCk7CiAgICB2aXNpdE5vZGVzKG5vZGUuYXJndW1lbnRzLm5hbWVkKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0QXNzZXJ0SW5pdGlhbGl6ZXIoaXIuQXNzZXJ0SW5pdGlhbGl6ZXIgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUuc3RhdGVtZW50KTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0SWZTdGF0ZW1lbnQoaXIuSWZTdGF0ZW1lbnQgbm9kZSkgewogICAgdmlzaXROb2RlKG5vZGUuY29uZGl0aW9uKTsKICAgIHZpc2l0Tm9kZShub2RlLnRoZW4pOwogICAgdmlzaXROb2RlKG5vZGUub3RoZXJ3aXNlKTsKICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW5pdGlhbGl6ZXJDb21wbGV4aXR5IHZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKGlyLkNvbnN0YW50RXhwcmVzc2lvbiBub2RlKSB7CiAgICBpZiAobm9kZS5jb25zdGFudCBpcyBpci5VbmV2YWx1YXRlZENvbnN0YW50KSB7CiAgICAgIG5vZGUuY29uc3RhbnQgPSBfY29uc3RhbnRFdmFsdWF0b3IuZXZhbHVhdGUobm9kZSk7CiAgICB9CiAgICByZXR1cm4gY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCk7CiAgfQoKICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBub2RlIGlzIGEgZmllbGQsIG9yIGEgY29uc3RydWN0b3IgKGZhY3Rvcnkgb3IKICAvLy8gZ2VuZXJhdGl2ZSkuCiAgYm9vbCBfaXNGaWVsZE9yQ29uc3RydWN0b3IoaXIuTm9kZSBub2RlKSA9PgogICAgICBub2RlIGlzIGlyLkNvbnN0cnVjdG9yIHx8CiAgICAgIG5vZGUgaXMgaXIuRmllbGQgfHwKICAgICAgKG5vZGUgaXMgaXIuUHJvY2VkdXJlICYmIG5vZGUuaXNGYWN0b3J5KTsKCiAgdm9pZCBfYW5hbHl6ZVR5cGVWYXJpYWJsZShpci5UeXBlUGFyYW1ldGVyVHlwZSB0eXBlLCBWYXJpYWJsZVVzZSB1c2FnZSkgewogICAgYXNzZXJ0KHVzYWdlICE9IG51bGwpOwogICAgaWYgKF9vdXRlcm1vc3ROb2RlIGlzIGlyLk1lbWJlcikgewogICAgICBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQgdHlwZVZhcmlhYmxlID0KICAgICAgICAgIG5ldyBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQodHlwZSwgX291dGVybW9zdE5vZGUpOwogICAgICBzd2l0Y2ggKHR5cGVWYXJpYWJsZS5raW5kKSB7CiAgICAgICAgY2FzZSBUeXBlVmFyaWFibGVLaW5kLmNsczoKICAgICAgICAgIGlmIChfaXNGaWVsZE9yQ29uc3RydWN0b3IoX291dGVybW9zdE5vZGUpKSB7CiAgICAgICAgICAgIC8vIENsYXNzIHR5cGUgdmFyaWFibGUgdXNlZCBpbiBhIGZpZWxkIG9yIGNvbnN0cnVjdG9yLgogICAgICAgICAgICBfdXNlVHlwZVZhcmlhYmxlQXNMb2NhbCh0eXBlVmFyaWFibGUsIHVzYWdlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIENsYXNzIHR5cGUgdmFyaWFibGUgdXNlZCBpbiBhIG1ldGhvZC4KICAgICAgICAgICAgX3JlZ2lzdGVyTmVlZHNUaGlzKHVzYWdlKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgVHlwZVZhcmlhYmxlS2luZC5tZXRob2Q6CiAgICAgICAgY2FzZSBUeXBlVmFyaWFibGVLaW5kLmxvY2FsOgogICAgICAgICAgX3VzZVR5cGVWYXJpYWJsZUFzTG9jYWwodHlwZVZhcmlhYmxlLCB1c2FnZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFR5cGVWYXJpYWJsZUtpbmQuZnVuY3Rpb246CiAgICAgICAgLy8gVGhlIHR5cGUgdmFyaWFibGUgaXMgYSBmdW5jdGlvbiB0eXBlIHZhcmlhYmxlLCBsaWtlIGBUYCBpbgogICAgICAgIC8vCiAgICAgICAgLy8gICAgIExpc3Q8dm9pZCBGdW5jdGlvbjxUPihUKT4gbGlzdDsKICAgICAgICAvLwogICAgICAgIC8vIHdoaWNoIGRvZXNuJ3QgY29ycmVzcG9uZCB0byBhIGNhcHR1cmVkIGxvY2FsIHZhcmlhYmxlLgogICAgICB9CiAgICB9CiAgfQoKICAvLy8gSWYgW29ubHlGb3JSdGlDaGVja3NdIGlzIHRydWUsIHRoZSB2YXJpYWJsZSB3aWxsIGJlIGFkZGVkIHRvIGEgbGlzdAogIC8vLyBpbmRpY2F0aW5nIGl0ICptYXkqIGJlIHVzZWQgb25seSBpZiBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24gaXMgY2hlY2tlZC4KICB2b2lkIF91c2VUeXBlVmFyaWFibGVBc0xvY2FsKAogICAgICBUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQgdHlwZVZhcmlhYmxlLCBWYXJpYWJsZVVzZSB1c2FnZSkgewogICAgX21hcmtWYXJpYWJsZUFzVXNlZCh0eXBlVmFyaWFibGUsIHVzYWdlKTsKICB9Cn0KCmVudW0gQ29tcGxleGl0eUxldmVsIHsKICBjb25zdGFudCwKICBwb3RlbnRpYWxseUVhZ2VyLAogIGRlZmluaXRlbHlMYXp5LAp9CgpjbGFzcyBJbml0aWFsaXplckNvbXBsZXhpdHkgewogIGZpbmFsIENvbXBsZXhpdHlMZXZlbCBsZXZlbDsKICBmaW5hbCBTZXQ8aXIuRmllbGQ+IGZpZWxkczsKCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVGhpcyBzaG91bGQgaG9sZCB0aGUgY29uc3RhbnQgbGl0ZXJhbCBmcm9tIENGRSB3aGVuCiAgLy8gcHJvdmlkZWQuCiAgY29uc3QgSW5pdGlhbGl6ZXJDb21wbGV4aXR5LmNvbnN0YW50KCkKICAgICAgOiBsZXZlbCA9IENvbXBsZXhpdHlMZXZlbC5jb25zdGFudCwKICAgICAgICBmaWVsZHMgPSBudWxsOwoKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgdGhpcyB0byBjb2xsZWN0IGRhdGEgb24gdGhlIHNpemUgb2YgdGhlCiAgLy8gIGluaXRpYWxpemVyLgogIEluaXRpYWxpemVyQ29tcGxleGl0eS5lYWdlcih7dGhpcy5maWVsZHN9KQogICAgICA6IGxldmVsID0gQ29tcGxleGl0eUxldmVsLnBvdGVudGlhbGx5RWFnZXI7CgogIGNvbnN0IEluaXRpYWxpemVyQ29tcGxleGl0eS5sYXp5KCkKICAgICAgOiBsZXZlbCA9IENvbXBsZXhpdHlMZXZlbC5kZWZpbml0ZWx5TGF6eSwKICAgICAgICBmaWVsZHMgPSBudWxsOwoKICBJbml0aWFsaXplckNvbXBsZXhpdHkgY29tYmluZShJbml0aWFsaXplckNvbXBsZXhpdHkgb3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlIGlmIChpc0xhenkgfHwgb3RoZXIuaXNMYXp5KSB7CiAgICAgIHJldHVybiBjb25zdCBJbml0aWFsaXplckNvbXBsZXhpdHkubGF6eSgpOwogICAgfSBlbHNlIGlmIChpc0VhZ2VyIHx8IG90aGVyLmlzRWFnZXIpIHsKICAgICAgaWYgKGZpZWxkcyAhPSBudWxsICYmIG90aGVyLmZpZWxkcyAhPSBudWxsKSB7CiAgICAgICAgZmllbGRzLmFkZEFsbChvdGhlci5maWVsZHMpOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9IGVsc2UgaWYgKGZpZWxkcyAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG90aGVyOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzQ29uc3RhbnQgJiYgb3RoZXIuaXNDb25zdGFudCkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGlzIGlzIGNhc2UgZG9lc24ndCB3b3JrIGlmIEluaXRpYWxpemVyQ29tcGxleGl0eQogICAgICAvLyBvYmplY3RzIG9mIGNvbnN0YW50IGNvbXBsZXhpdHkgaG9sZCB0aGUgY29uc3RhbnQgbGl0ZXJhbC4KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UgaWYgKGlzRWFnZXIpIHsKICAgICAgYXNzZXJ0KG90aGVyLmlzQ29uc3RhbnQpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChpc0NvbnN0YW50KTsKICAgICAgYXNzZXJ0KG90aGVyLmlzRWFnZXIpOwogICAgICByZXR1cm4gb3RoZXI7CiAgICB9CiAgfQoKICBJbml0aWFsaXplckNvbXBsZXhpdHkgbWFrZUVhZ2VyKCkgewogICAgaWYgKGlzTGF6eSB8fCBpc0VhZ2VyKSB7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBJbml0aWFsaXplckNvbXBsZXhpdHkuZWFnZXIoKTsKICAgIH0KICB9CgogIGJvb2wgZ2V0IGlzQ29uc3RhbnQgPT4gbGV2ZWwgPT0gQ29tcGxleGl0eUxldmVsLmNvbnN0YW50OwoKICBib29sIGdldCBpc0VhZ2VyID0+IGxldmVsID09IENvbXBsZXhpdHlMZXZlbC5wb3RlbnRpYWxseUVhZ2VyOwoKICBib29sIGdldCBpc0xhenkgPT4gbGV2ZWwgPT0gQ29tcGxleGl0eUxldmVsLmRlZmluaXRlbHlMYXp5OwoKICAvLy8gUmV0dXJucyBhIHNob3J0IHRleHR1YWwgcmVwcmVzZW50YXRpb24gdXNlZCBmb3IgdGVzdGluZy4KICBTdHJpbmcgZ2V0IHNob3J0VGV4dCB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzd2l0Y2ggKGxldmVsKSB7CiAgICAgIGNhc2UgQ29tcGxleGl0eUxldmVsLmNvbnN0YW50OgogICAgICAgIHNiLndyaXRlKCdjb25zdGFudCcpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENvbXBsZXhpdHlMZXZlbC5wb3RlbnRpYWxseUVhZ2VyOgogICAgICAgIHNiLndyaXRlKCdlYWdlcicpOwogICAgICAgIGlmIChmaWVsZHMgIT0gbnVsbCkgewogICAgICAgICAgc2Iud3JpdGUoJyZmaWVsZHM9WycpOwogICAgICAgICAgTGlzdDxTdHJpbmc+IG5hbWVzID0gZmllbGRzLm1hcCgoZikgPT4gZi5uYW1lLm5hbWUpLnRvTGlzdCgpLi5zb3J0KCk7CiAgICAgICAgICBzYi53cml0ZShuYW1lcy5qb2luKCcsJykpOwogICAgICAgICAgc2Iud3JpdGUoJ10nKTsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ29tcGxleGl0eUxldmVsLmRlZmluaXRlbHlMYXp5OgogICAgICAgIHNiLndyaXRlKCdsYXp5Jyk7CiAgICAgICAgYnJlYWs7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgY29tcGxleGl0eSBsZXZlbCAkbGV2ZWwiKTsKICAgIH0KICAg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dmlyb25tZW50LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CgovLy8gUmV0dXJucyBhIHRleHR1YWwgcmVwcmVzZW50YXRpb24gb2YgW25vZGVdIHRoYXQgaW5jbHVkZSB0aGUgcnVudGltZSB0eXBlIGFuZAovLy8gaGFzaCBjb2RlIG9mIHRoZSBub2RlIGFuZCBhIG9uZSBsaW5lIHByZWZpeCBvZiB0aGUgbm9kZSB0b1N0cmluZyB0ZXh0LgpTdHJpbmcgbm9kZVRvRGVidWdTdHJpbmcoaXIuTm9kZSBub2RlLCBbaW50IHRleHRMZW5ndGggPSA0MF0pIHsKICBTdHJpbmcgYmxvY2tUZXh0ID0gbm9kZS50b1N0cmluZygpLnJlcGxhY2VBbGwoJ1xuJywgJyAnKTsKICBpZiAoYmxvY2tUZXh0Lmxlbmd0aCA+IHRleHRMZW5ndGgpIHsKICAgIGJsb2NrVGV4dCA9IGJsb2NrVGV4dC5zdWJzdHJpbmcoMCwgdGV4dExlbmd0aCAtIDMpICsgJy4uLic7CiAgfQogIHJldHVybiAnKCR7bm9kZS5ydW50aW1lVHlwZX06JHtub2RlLmhhc2hDb2RlfSkke2Jsb2NrVGV4dH0nOwp9CgovLy8gQ29tcGFyYXRvciBmb3IgdGhlIGNhbm9uaWNhbCBvcmRlciBvciBuYW1lZCBwYXJhbWV0ZXJzLgovLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgdGhpcyB3aGVuIG5hbWVkIHBhcmFtZXRlcnMgYXJlIHNvcnRlZCBpbiBkaWxsLgppbnQgbmFtZWRPcmRlcmluZyhpci5WYXJpYWJsZURlY2xhcmF0aW9uIGEsIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gYikgewogIHJldHVybiBhLm5hbWUuY29tcGFyZVRvKGIubmFtZSk7Cn0KCi8vLyBDb21wYXJhdG9yIGZvciB0aGUgZGVjbGFyYXRpb24gb3JkZXIgb2YgcGFyYW1ldGVycy4KaW50IG5hdGl2ZU9yZGVyaW5nKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gYSwgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBiKSB7CiAgcmV0dXJuIGEuZmlsZU9mZnNldC5jb21wYXJlVG8oYi5maWxlT2Zmc2V0KTsKfQoKU291cmNlU3BhbiBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShpci5UcmVlTm9kZSBub2RlKSB7CiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIFtpci5Mb2NhdGlvbl0gZGlyZWN0bHkgYXMgYSBbU291cmNlU3Bhbl0uCiAgVXJpIHVyaTsKICBpbnQgb2Zmc2V0OwogIHdoaWxlIChub2RlICE9IG51bGwpIHsKICAgIGlmIChub2RlLmZpbGVPZmZzZXQgIT0gaXIuVHJlZU5vZGUubm9PZmZzZXQpIHsKICAgICAgb2Zmc2V0ID0gbm9kZS5maWxlT2Zmc2V0OwogICAgICAvLyBAcGF0Y2ggYW5ub3RhdGlvbnMgaGF2ZSBubyBsb2NhdGlvbi4KICAgICAgdXJpID0gbm9kZS5sb2NhdGlvbj8uZmlsZTsKICAgICAgYnJlYWs7CiAgICB9CiAgICBub2RlID0gbm9kZS5wYXJlbnQ7CiAgfQogIGlmICh1cmkgIT0gbnVsbCkgewogICAgcmV0dXJuIG5ldyBTb3VyY2VTcGFuKHVyaSwgb2Zmc2V0LCBvZmZzZXQgKyAxKTsKICB9CiAgcmV0dXJuIG51bGw7Cn0KCi8vLyBSZXR1cm5zIHRoZSBgQXN5bmNNYXJrZXJgIGNvcnJlc3BvbmRpbmcgdG8gYG5vZGUuYXN5bmNNYXJrZXJgLgpBc3luY01hcmtlciBnZXRBc3luY01hcmtlcihpci5GdW5jdGlvbk5vZGUgbm9kZSkgewogIHN3aXRjaCAobm9kZS5hc3luY01hcmtlcikgewogICAgY2FzZSBpci5Bc3luY01hcmtlci5Bc3luYzoKICAgICAgcmV0dXJuIEFzeW5jTWFya2VyLkFTWU5DOwogICAgY2FzZSBpci5Bc3luY01hcmtlci5Bc3luY1N0YXI6CiAgICAgIHJldHVybiBBc3luY01hcmtlci5BU1lOQ19TVEFSOwogICAgY2FzZSBpci5Bc3luY01hcmtlci5TeW5jOgogICAgICByZXR1cm4gQXN5bmNNYXJrZXIuU1lOQzsKICAgIGNhc2UgaXIuQXN5bmNNYXJrZXIuU3luY1N0YXI6CiAgICAgIHJldHVybiBBc3luY01hcmtlci5TWU5DX1NUQVI7CiAgICBjYXNlIGlyLkFzeW5jTWFya2VyLlN5bmNZaWVsZGluZzoKICAgIGRlZmF1bHQ6CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIkFzeW5jIG1hcmtlciAke25vZGUuYXN5bmNNYXJrZXJ9IGlzIG5vdCBzdXBwb3J0ZWQuIik7CiAgfQp9CgovLy8gS2VybmVsIGVuY29kZXMgYSBudWxsLWF3YXJlIGV4cHJlc3Npb24gYGE/LmJgIGFzCi8vLwovLy8gICAgIGxldCBmaW5hbCAjMSA9IGEgaW4gIzEgPT0gbnVsbCA/IG51bGwgOiAjMS5iCi8vLwovLy8gW2dldE51bGxBd2FyZUV4cHJlc3Npb25dIHJlY29nbml6ZXMgc3VjaCBleHByZXNzaW9ucyBzdG9yaW5nIHRoZSByZXN1bHQgaW4KLy8vIGEgW051bGxBd2FyZUV4cHJlc3Npb25dIG9iamVjdC4KLy8vCi8vLyBbc3ludGhldGljVmFyaWFibGVdIGhvbGRzIHRoZSBzeW50aGVzaXplZCBgIzFgIHZhcmlhYmxlLiBbZXhwcmVzc2lvbl0gaG9sZHMKLy8vIHRoZSBgIzEuYmAgZXhwcmVzc2lvbi4gW3JlY2VpdmVyXSByZXR1cm5zIGBhYCBleHByZXNzaW9uLiBbcGFyZW50XSByZXR1cm5zCi8vLyB0aGUgcGFyZW50IG9mIHRoZSBsZXQgbm9kZSwgaS5lLiB0aGUgcGFyZW50IG5vZGUgb2YgdGhlIG9yaWdpbmFsIG51bGwtYXdhcmUKLy8vIGV4cHJlc3Npb24uIFtsZXRdIHJldHVybnMgdGhlIGxldCBub2RlIGNyZWF0ZWQgZm9yIHRoZSBlbmNvZGluZy4KY2xhc3MgTnVsbEF3YXJlRXhwcmVzc2lvbiB7CiAgZmluYWwgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBzeW50aGV0aWNWYXJpYWJsZTsKICBmaW5hbCBpci5FeHByZXNzaW9uIGV4cHJlc3Npb247CgogIE51bGxBd2FyZUV4cHJlc3Npb24odGhpcy5zeW50aGV0aWNWYXJpYWJsZSwgdGhpcy5leHByZXNzaW9uKTsKCiAgaXIuRXhwcmVzc2lvbiBnZXQgcmVjZWl2ZXIgPT4gc3ludGhldGljVmFyaWFibGUuaW5pdGlhbGl6ZXI7CgogIGlyLlRyZWVOb2RlIGdldCBwYXJlbnQgPT4gc3ludGhldGljVmFyaWFibGUucGFyZW50LnBhcmVudDsKCiAgaXIuTGV0IGdldCBsZXQgPT4gc3ludGhldGljVmFyaWFibGUucGFyZW50OwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBsZXQudG9TdHJpbmcoKTsKfQoKTnVsbEF3YXJlRXhwcmVzc2lvbiBnZXROdWxsQXdhcmVFeHByZXNzaW9uKGlyLlRyZWVOb2RlIG5vZGUpIHsKICBpZiAobm9kZSBpcyBpci5MZXQpIHsKICAgIGlyLkV4cHJlc3Npb24gYm9keSA9IG5vZGUuYm9keTsKICAgIGlmIChub2RlLnZhcmlhYmxlLm5hbWUgPT0gbnVsbCAmJgogICAgICAgIG5vZGUudmFyaWFibGUuaXNGaW5hbCAmJgogICAgICAgIGJvZHkgaXMgaXIuQ29uZGl0aW9uYWxFeHByZXNzaW9uICYmCiAgICAgICAgYm9keS5jb25kaXRpb24gaXMgaXIuTWV0aG9kSW52b2NhdGlvbiAmJgogICAgICAgIGJvZHkudGhlbiBpcyBpci5OdWxsTGl0ZXJhbCkgewogICAgICBpci5NZXRob2RJbnZvY2F0aW9uIGludm9jYXRpb24gPSBib2R5LmNvbmRpdGlvbjsKICAgICAgaXIuRXhwcmVzc2lvbiByZWNlaXZlciA9IGludm9jYXRpb24ucmVjZWl2ZXI7CiAgICAgIGlmIChpbnZvY2F0aW9uLm5hbWUubmFtZSA9PSAnPT0nICYmCiAgICAgICAgICByZWNlaXZlciBpcyBpci5WYXJpYWJsZUdldCAmJgogICAgICAgICAgcmVjZWl2ZXIudmFyaWFibGUgPT0gbm9kZS52YXJpYWJsZSAmJgogICAgICAgICAgaW52b2NhdGlvbi5hcmd1bWVudHMucG9zaXRpb25hbC5zaW5nbGUgaXMgaXIuTnVsbExpdGVyYWwpIHsKICAgICAgICAvLyBXZSBoYXZlCiAgICAgICAgLy8gICBsZXQgI3QxID0gZTAgaW4gI3QxID09IG51bGwgPyBudWxsIDogZTEKICAgICAgICByZXR1cm4gbmV3IE51bGxBd2FyZUV4cHJlc3Npb24obm9kZS52YXJpYWJsZSwgYm9keS5vdGhlcndpc2UpOwogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBudWxsOwp9CgovLy8gQ2hlY2sgd2hldGhlciBbbm9kZV0gaXMgaW1tZWRpYXRlbHkgZ3VhcmRlZCBieSBhCi8vLyBbaXIuQ2hlY2tMaWJyYXJ5SXNMb2FkZWRdLCBhbmQgaGVuY2UgdGhlIG5vZGUgaXMgYSBkZWZlcnJlZCBhY2Nlc3MuCmlyLkxpYnJhcnlEZXBlbmRlbmN5IGdldERlZmVycmVkSW1wb3J0KGlyLlRyZWVOb2RlIG5vZGUpIHsKICAvLyBOb3RlOiB0aGlzIGNvZGUgcmVsaWVzIG9uIHRoZSBDRkUgZ2VuZXJhdGluZyB0aGUgY29kZSBhcyB3ZSBleHBlY3QgaXQgaGVyZS4KICAvLyBJZiBvbmUgZGF5IHdlIG9wdGltaXplIGF3YXkgcmVkdW5kYW50IENoZWNrTGlicmFyeUlzTG9hZGVkIGluc3RydWN0aW9ucywKICAvLyB3ZSdkIG5lZWQgdG8gZGVyaXZlIHRoaXMgaW5mb3JtYXRpb24gZGlyZWN0bHkgZnJvbSB0aGUgQ0ZFIChTZWUgIzM1MDA1KSwKICBpci5UcmVlTm9kZSBwYXJlbnQgPSBub2RlLnBhcmVudDsKCiAgLy8gVE9ETyhzaWdtdW5kKTogcmVtb3ZlIHdoZW4gQ0ZFIGdlbmVyYXRlcyB0aGUgY29ycmVjdCB0cmVlICgjMzUzMjApLiBGb3IKICAvLyBpbnN0YW5jZSwgaXQgY3VycmVudGx5IGdlbmVyYXRlcwogIC8vCiAgLy8gICBsZXQgXyA9IGNoZWNrKHByZWZpeCkgaW4gKHByZWZpeDo6ZmllbGQucHJvcGVydHkpCiAgLy8KICAvLyBpbnN0ZWFkIG9mOgogIC8vCiAgLy8gICAobGV0IF8gPSBjaGVjayhwcmVmaXgpIGluIHByZWZpeDo6ZmllbGQpLnByb3BlcnR5CiAgaWYgKG5vZGUgaXMgaXIuU3RhdGljR2V0IHx8IG5vZGUgaXMgaXIuQ29uc3RhbnRFeHByZXNzaW9uKSB7CiAgICB3aGlsZSAocGFyZW50IGlzIGlyLlByb3BlcnR5R2V0IHx8IHBhcmVudCBpcyBpci5NZXRob2RJbnZvY2F0aW9uKSB7CiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7CiAgICB9CiAgfQoKICBpZiAocGFyZW50IGlzIGlyLkxldCkgewogICAgdmFyIGluaXRpYWxpemVyID0gcGFyZW50LnZhcmlhYmxlLmluaXRpYWxpemVyOwogICAgaWYgKGluaXRpYWxpemVyIGlzIGlyLkNoZWNrTGlicmFyeUlzTG9hZGVkKSB7CiAgICAgIHJldHVybiBpbml0aWFsaXplci5pbXBvcnQ7CiAgICB9CiAgfQogIHJldHVybiBudWxsOwp9CgpjbGFzcyBfRnJlZVZhcmlhYmxlVmlzaXRvciBpbXBsZW1lbnRzIGlyLkRhcnRUeXBlVmlzaXRvcjxib29sPiB7CiAgY29uc3QgX0ZyZWVWYXJpYWJsZVZpc2l0b3IoKTsKCiAgYm9vbCB2aXNpdChpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSAhPSBudWxsKSByZXR1cm4gdHlwZS5hY2NlcHQodGhpcyk7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIHZpc2l0TGlzdChMaXN0PGlyLkRhcnRUeXBlPiB0eXBlcykgewogICAgZm9yIChpci5EYXJ0VHlwZSB0eXBlIGluIHR5cGVzKSB7CiAgICAgIGlmICh2aXNpdCh0eXBlKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0VHlwZWRlZlR5cGUoaXIuVHlwZWRlZlR5cGUgbm9kZSkgewogICAgcmV0dXJuIHZpc2l0TGlzdChub2RlLnR5cGVBcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFR5cGVQYXJhbWV0ZXJUeXBlKGlyLlR5cGVQYXJhbWV0ZXJUeXBlIG5vZGUpIHsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1bmN0aW9uVHlwZShpci5GdW5jdGlvblR5cGUgbm9kZSkgewogICAgaWYgKHZpc2l0KG5vZGUucmV0dXJuVHlwZSkpIHJldHVybiB0cnVlOwogICAgaWYgKHZpc2l0TGlzdChub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzKSkgcmV0dXJuIHRydWU7CiAgICBmb3IgKGlyLk5hbWVkVHlwZSBuYW1lZFR5cGUgaW4gbm9kZS5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgaWYgKHZpc2l0KG5hbWVkVHlwZS50eXBlKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW50ZXJmYWNlVHlwZShpci5JbnRlcmZhY2VUeXBlIG5vZGUpIHsKICAgIHJldHVybiB2aXNpdExpc3Qobm9kZS50eXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRCb3R0b21UeXBlKGlyLkJvdHRvbVR5cGUgbm9kZSkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRWb2lkVHlwZShpci5Wb2lkVHlwZSBub2RlKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdER5bmFtaWNUeXBlKGlyLkR5bmFtaWNUeXBlIG5vZGUpID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SW52YWxpZFR5cGUoaXIuSW52YWxpZFR5cGUgbm9kZSkgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZGVmYXVsdERhcnRUeXBlKGlyLkRhcnRUeXBlIG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJGcmVlVmFyaWFibGVWaXNpdG9yLmRlZmF1bHRUeXBlTm9kZSIpOwogIH0KfQoKLy8vIFJldHVybnMgYHRydWVgIGlmIFt0eXBlXSBjb250YWlucyBhIHR5cGUgdmFyaWFibGUuCi8vLwovLy8gQWxsIHR5cGUgdmFyaWFibGVzIChjbGFzcyB0eXBlIHZhcmlhYmxlcywgZ2VuZXJpYyBtZXRob2QgdHlwZSB2YXJpYWJsZXMsCi8vLyBhbmQgZnVuY3Rpb24gdHlwZSB2YXJpYWJsZXMpIGFyZSBjb25zaWRlcmVkLgpib29sIGNvbnRhaW5zRnJlZVZhcmlhYmxlcyhpci5EYXJ0VHlwZSB0eXBlKSA9PgogICAgdHlwZS5hY2NlcHQoY29uc3QgX0ZyZWVWYXJpYWJsZVZpc2l0b3IoKSk7CoDZAE5OPAEoNC81ARkkAVFLQDwnQAQ/AgE8TkgjAgE4SS8CAT1ICw4ZMyAuIQ0GGAQVNAQPAgFDMx4fICMlHh8iJCYNIkEEAgE1BDUETyQEUE9QRRwyIgFAAT8BPQEuAQwnAgE/GCQmISwxJzc0KigwRhM1RwgGBA8CATVIO1FOTiQBTSYFOQURBTk/SB4GBAEaMzIhBgQPAgFBIAEhMBIEASwmJAYSBAEMLyoEAQw7EQQBDDEtOzsuBhIEAQwzKgQBDDUBDDEBDDcBDDcBDCtHBAIBNwRNMTAvASFwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci91dGlsLmRhcnQ3c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvc3RhdGljX3R5cGVfY2FjaGUuZGFydId+Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydCc7CgpjbGFzcyBTdGF0aWNUeXBlQ2FjaGUgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgdGFnID0gJ3N0YXRpYy10eXBlLWNhY2hlJzsKCiAgZmluYWwgTWFwPGlyLkV4cHJlc3Npb24sIGlyLkRhcnRUeXBlPiBfZXhwcmVzc2lvblR5cGVzOwogIGZpbmFsIE1hcDxpci5Gb3JJblN0YXRlbWVudCwgaXIuRGFydFR5cGU+IF9mb3JJbkl0ZXJhdG9yVHlwZXM7CgogIGNvbnN0IFN0YXRpY1R5cGVDYWNoZSgKICAgICAgW3RoaXMuX2V4cHJlc3Npb25UeXBlcyA9IGNvbnN0IHt9LCB0aGlzLl9mb3JJbkl0ZXJhdG9yVHlwZXNdKTsKCiAgZmFjdG9yeSBTdGF0aWNUeXBlQ2FjaGUucmVhZEZyb21EYXRhU291cmNlKAogICAgICBEYXRhU291cmNlIHNvdXJjZSwgaXIuTWVtYmVyIGNvbnRleHQpIHsKICAgIHJldHVybiBzb3VyY2UuaW5NZW1iZXJDb250ZXh0KGNvbnRleHQsICgpIHsKICAgICAgc291cmNlLmJlZ2luKHRhZyk7CiAgICAgIE1hcDxpci5FeHByZXNzaW9uLCBpci5EYXJ0VHlwZT4gZXhwcmVzc2lvblR5cGVzID0KICAgICAgICAgIHNvdXJjZS5yZWFkVHJlZU5vZGVNYXBJbkNvbnRleHQoc291cmNlLnJlYWREYXJ0VHlwZU5vZGUpOwogICAgICBNYXA8aXIuRm9ySW5TdGF0ZW1lbnQsIGlyLkRhcnRUeXBlPiBmb3JJbkl0ZXJhdG9yVHlwZXMgPSBzb3VyY2UKICAgICAgICAgIC5yZWFkVHJlZU5vZGVNYXBJbkNvbnRleHQoc291cmNlLnJlYWREYXJ0VHlwZU5vZGUsIGVtcHR5QXNOdWxsOiB0cnVlKTsKICAgICAgc291cmNlLmVuZCh0YWcpOwogICAgICByZXR1cm4gbmV3IFN0YXRpY1R5cGVDYWNoZShleHByZXNzaW9uVHlwZXMsIGZvckluSXRlcmF0b3JUeXBlcyk7CiAgICB9KTsKICB9CgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmssIGlyLk1lbWJlciBjb250ZXh0KSB7CiAgICBzaW5rLmluTWVtYmVyQ29udGV4dChjb250ZXh0LCAoKSB7CiAgICAgIHNpbmsuYmVnaW4odGFnKTsKICAgICAgc2luay53cml0ZVRyZWVOb2RlTWFwSW5Db250ZXh0KF9leHByZXNzaW9uVHlwZXMsIHNpbmsud3JpdGVEYXJ0VHlwZU5vZGUpOwogICAgICBzaW5rLndyaXRlVHJlZU5vZGVNYXBJbkNvbnRleHQoCiAgICAgICAgICBfZm9ySW5JdGVyYXRvclR5cGVzLCBzaW5rLndyaXRlRGFydFR5cGVOb2RlLAogICAgICAgICAgYWxsb3dOdWxsOiB0cnVlKTsKICAgICAgc2luay5lbmQodGFnKTsKICAgIH0pOwogIH0KCiAgaXIuRGFydFR5cGUgb3BlcmF0b3IgW10oaXIuRXhwcmVzc2lvbiBub2RlKSA9PiBfZXhwcmVzc2lvblR5cGVzW25vZGVdOwoKICBpci5EYXJ0VHlwZSBnZXRGb3JJbkl0ZXJhdG9yVHlwZShpci5Gb3JJblN0YXRlbWVudCBub2RlKSB7CiAgICByZXR1cm4gX2ZvckluSXRlcmF0b3JUeXBlcyAhPSBudWxsID8gX2ZvckluSXRlcmF0b3JUeXBlc1tub2RlXSA6IG51bGw7CiAgfQp9CjUATk48ASg0LzE1AS4BGDEBOkEBGUUBLi4wGThERlEXRwgEATsnF1AmNxwVCAQBSQE9SwQCAS5wYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9zdGF0aWNfdHlwZV9jYWNoZS5kYXJ0PHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2luZmVycmVyL3R5cGVfZ3JhcGhfbm9kZXMuZGFydMABFIAvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBjb21waWxlci5zcmMuaW5mZXJyZXIudHlwZV9ncmFwaF9ub2RlczsKCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJyBzaG93IEl0ZXJhYmxlQmFzZTsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBJZGVudGlmaWVyczsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgSW1tdXRhYmxlRW1wdHlTZXQsIFNldGxldDsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICdhYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnZGVidWcuZGFydCcgYXMgZGVidWc7CmltcG9ydCAnbG9jYWxzX2hhbmRsZXIuZGFydCcgc2hvdyBBcmd1bWVudHNUeXBlczsKaW1wb3J0ICdpbmZlcnJlcl9lbmdpbmUuZGFydCc7CmltcG9ydCAndHlwZV9zeXN0ZW0uZGFydCc7CgovLy8gQ29tbW9uIGNsYXNzIGZvciBhbGwgbm9kZXMgaW4gdGhlIGdyYXBoLiBUaGUgY3VycmVudCBub2RlcyBhcmU6Ci8vLwovLy8gLSBDb25jcmV0ZSB0eXBlcwovLy8gLSBFbGVtZW50cwovLy8gLSBDYWxsIHNpdGVzCi8vLyAtIE5hcnJvd2luZyBpbnN0cnVjdGlvbnMKLy8vIC0gUGhpIGluc3RydWN0aW9ucwovLy8gLSBDb250YWluZXJzIChmb3IgbGlzdHMpCi8vLyAtIFR5cGUgb2YgdGhlIGVsZW1lbnQgaW4gYSBjb250YWluZXIKLy8vCi8vLyBBIG5vZGUgaGFzIGEgc2V0IG9mIGFzc2lnbm1lbnRzIGFuZCB1c2Vycy4gQXNzaWdubWVudHMgYXJlIHVzZWQgdG8KLy8vIGNvbXB1dGUgdGhlIHR5cGUgb2YgdGhlIG5vZGUgKFtUeXBlSW5mb3JtYXRpb24uY29tcHV0ZVR5cGVdKS4gVXNlcnMgYXJlCi8vLyBhZGRlZCB0byB0aGUgaW5mZXJyZXIncyB3b3JrIHF1ZXVlIHdoZW4gdGhlIHR5cGUgb2YgdGhlIG5vZGUKLy8vIGNoYW5nZXMuCmFic3RyYWN0IGNsYXNzIFR5cGVJbmZvcm1hdGlvbiB7CiAgU2V0PFR5cGVJbmZvcm1hdGlvbj4gdXNlcnM7CiAgdmFyIC8qIExpc3R8UGFyYW1ldGVyQXNzaWdubWVudHMgKi8gX2Fzc2lnbm1lbnRzOwoKICAvLy8gVGhlIHR5cGUgdGhlIGluZmVycmVyIGhhcyBmb3VuZCBmb3IgdGhpcyBbVHlwZUluZm9ybWF0aW9uXS4KICAvLy8gSW5pdGlhbGx5IGVtcHR5LgogIEFic3RyYWN0VmFsdWUgdHlwZTsKCiAgLy8vIFRoZSBncmFwaCBub2RlIG9mIHRoZSBtZW1iZXIgdGhpcyBbVHlwZUluZm9ybWF0aW9uXSBub2RlIGJlbG9uZ3MgdG8uCiAgZmluYWwgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQ7CgogIC8vLyBUaGUgZWxlbWVudCB0aGlzIFtUeXBlSW5mb3JtYXRpb25dIG5vZGUgYmVsb25ncyB0by4KICBNZW1iZXJFbnRpdHkgZ2V0IGNvbnRleHRNZW1iZXIgPT4gY29udGV4dCA9PSBudWxsID8gbnVsbCA6IGNvbnRleHQubWVtYmVyOwoKICBJdGVyYWJsZTxUeXBlSW5mb3JtYXRpb24+IGdldCBhc3NpZ25tZW50cyA9PiBfYXNzaWdubWVudHM7CgogIC8vLyBXZSBhYmFuZG9uIGluZmVyZW5jZSBpbiBjZXJ0YWluIGNhc2VzIChjb21wbGV4IGN5Y2xpYyBmbG93LCBuYXRpdmUKICAvLy8gYmVoYXZpb3VycywgZXRjLikuIEluIHNvbWUgY2FzZSwgd2UgbWlnaHQgcmVzdW1lIGluZmVyZW5jZSBpbiB0aGUKICAvLy8gY2xvc3VyZSB0cmFjZXIsIHdoaWNoIGlzIGhhbmRsZWQgYnkgY2hlY2tpbmcgd2hldGhlciBbYXNzaWdubWVudHNdIGhhcwogIC8vLyBiZWVuIHNldCB0byBbU1RPUF9UUkFDS0lOR19BU1NJR05NRU5UU19NQVJLRVJdLgogIGJvb2wgYWJhbmRvbkluZmVyZW5jaW5nID0gZmFsc2U7CiAgYm9vbCBnZXQgbWlnaHRSZXN1bWUgPT4KICAgICAgIWlkZW50aWNhbChhc3NpZ25tZW50cywgU1RPUF9UUkFDS0lOR19BU1NJR05NRU5UU19NQVJLRVIpOwoKICAvLy8gTnVtYmVyIG9mIHRpbWVzIHRoaXMgW1R5cGVJbmZvcm1hdGlvbl0gaGFzIGNoYW5nZWQgdHlwZS4KICBpbnQgcmVmaW5lQ291bnQgPSAwOwoKICAvLy8gV2hldGhlciB0aGlzIFtUeXBlSW5mb3JtYXRpb25dIGlzIGN1cnJlbnRseSBpbiB0aGUgaW5mZXJyZXIncwogIC8vLyB3b3JrIHF1ZXVlLgogIGJvb2wgaW5RdWV1ZSA9IGZhbHNlOwoKICAvLy8gVXNlZCB0byBkaXNhYmxlIGVucXVldWVpbmcgb2YgdHlwZSBpbmZvcm1hdGlvbnMgd2hlcmUgd2Uga25vdyB0aGF0IHRoZWlyCiAgLy8vIHR5cGUgd2lsbCBub3QgY2hhbmdlIGZvciBvdGhlciByZWFzb25zIHRoYW4gYmVpbmcgc3RhYmxlLiBGb3IgZXhhbXBsZSwKICAvLy8gaWYgaW5mZXJlbmNlIGlzIGRpc2FibGVkIGZvciBhIHR5cGUgYW5kIGl0IGlzIGhhcmR3aXJlZCB0byBkeW5hbWljLCB0aGlzCiAgLy8vIGlzIHNldCB0byB0cnVlIHRvIHNwYXJlIHJlY29tcHV0aW5nIGR5bmFtaWMgYWdhaW4gYW5kIGFnYWluLiBDaGFuZ2luZyB0aGlzCiAgLy8vIHRvIGZhbHNlIHNob3VsZCBuZXZlciBjaGFuZ2UgaW5mZXJlbmNlIG91dGNvbWUsIGp1c3QgbWFrZSBpcyBzbG93ZXIuCiAgYm9vbCBkb05vdEVucXVldWUgPSBmYWxzZTsKCiAgLy8vIFdoZXRoZXIgdGhpcyBbVHlwZUluZm9ybWF0aW9uXSBoYXMgYSBzdGFibGUgW3R5cGVdIHRoYXQgd2lsbCBub3QKICAvLy8gY2hhbmdlLgogIGJvb2wgaXNTdGFibGUgPSBmYWxzZTsKCiAgLy8gVHlwZUluZm9ybWF0aW9ucyBhcmUgdW5pcXVlLiBTdG9yZSBhbiBhcmJpdHJhcnkgaWRlbnRpdHkgaGFzaCBjb2RlLgogIHN0YXRpYyBpbnQgX3N0YXRpY0hhc2hDb2RlID0gMDsKICBAb3ZlcnJpZGUKICBmaW5hbCBpbnQgaGFzaENvZGUgPSBfc3RhdGljSGFzaENvZGUgPSAoX3N0YXRpY0hhc2hDb2RlICsgMSkudG9VbnNpZ25lZCgzMCk7CgogIGJvb2wgZ2V0IGlzQ29uY3JldGUgPT4gZmFsc2U7CgogIFR5cGVJbmZvcm1hdGlvbih0aGlzLnR5cGUsIHRoaXMuY29udGV4dCkKICAgICAgOiBfYXNzaWdubWVudHMgPSA8VHlwZUluZm9ybWF0aW9uPltdLAogICAgICAgIHVzZXJzID0gbmV3IFNldGxldDxUeXBlSW5mb3JtYXRpb24+KCk7CgogIFR5cGVJbmZvcm1hdGlvbi5ub0Fzc2lnbm1lbnRzKHRoaXMudHlwZSwgdGhpcy5jb250ZXh0KQogICAgICA6IF9hc3NpZ25tZW50cyA9IGNvbnN0IDxUeXBlSW5mb3JtYXRpb24+W10sCiAgICAgICAgdXNlcnMgPSBuZXcgU2V0bGV0PFR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgVHlwZUluZm9ybWF0aW9uLnVudHJhY2tlZCh0aGlzLnR5cGUpCiAgICAgIDogX2Fzc2lnbm1lbnRzID0gY29uc3QgPFR5cGVJbmZvcm1hdGlvbj5bXSwKICAgICAgICB1c2VycyA9IGNvbnN0IEltbXV0YWJsZUVtcHR5U2V0KCksCiAgICAgICAgY29udGV4dCA9IG51bGw7CgogIFR5cGVJbmZvcm1hdGlvbi53aXRoQXNzaWdubWVudHModGhpcy50eXBlLCB0aGlzLmNvbnRleHQsIHRoaXMuX2Fzc2lnbm1lbnRzKQogICAgICA6IHVzZXJzID0gbmV3IFNldGxldDxUeXBlSW5mb3JtYXRpb24+KCk7CgogIHZvaWQgYWRkVXNlcihUeXBlSW5mb3JtYXRpb24gdXNlcikgewogICAgYXNzZXJ0KCF1c2VyLmlzQ29uY3JldGUpOwogICAgdXNlcnMuYWRkKHVzZXIpOwogIH0KCiAgdm9pZCBhZGRVc2Vyc09mKFR5cGVJbmZvcm1hdGlvbiBvdGhlcikgewogICAgdXNlcnMuYWRkQWxsKG90aGVyLnVzZXJzKTsKICB9CgogIHZvaWQgcmVtb3ZlVXNlcihUeXBlSW5mb3JtYXRpb24gdXNlcikgewogICAgYXNzZXJ0KCF1c2VyLmlzQ29uY3JldGUpOwogICAgdXNlcnMucmVtb3ZlKHVzZXIpOwogIH0KCiAgLy8gVGhlIGJlbG93IGlzIG5vdCBhIGNvbXBpbGUgdGltZSBjb25zdGFudCB0byBtYWtlIGl0IGRpZmZlcmVudGlhYmxlCiAgLy8gZnJvbSBvdGhlciBlbXB0eSBsaXN0cyBvZiBbVHlwZUluZm9ybWF0aW9uXS4KICBzdGF0aWMgZmluYWwgU1RPUF9UUkFDS0lOR19BU1NJR05NRU5UU19NQVJLRVIgPSBuZXcgTGlzdDxUeXBlSW5mb3JtYXRpb24+KDApOwoKICBib29sIGFyZUFzc2lnbm1lbnRzVHJhY2tlZCgpIHsKICAgIHJldHVybiBhc3NpZ25tZW50cyAhPSBTVE9QX1RSQUNLSU5HX0FTU0lHTk1FTlRTX01BUktFUjsKICB9CgogIHZvaWQgYWRkQXNzaWdubWVudChUeXBlSW5mb3JtYXRpb24gYXNzaWdubWVudCkgewogICAgLy8gQ2hlYXAgb25lLWxldmVsIGN5Y2xlIGRldGVjdGlvbi4KICAgIGlmIChhc3NpZ25tZW50ID09IHRoaXMpIHJldHVybjsKICAgIGlmIChhcmVBc3NpZ25tZW50c1RyYWNrZWQoKSkgewogICAgICBfYXNzaWdubWVudHMuYWRkKGFzc2lnbm1lbnQpOwogICAgfQogICAgLy8gRXZlbiBpZiB3ZSBhYmFuZG9uIGluZmVyZW5jaW5nIG9uIHRoaXMgW1R5cGVJbmZvcm1hdGlvbl0gd2UKICAgIC8vIG5lZWQgdG8gY29sbGVjdCB0aGUgdXNlcnMsIHNvIHRoYXQgcGhhc2VzIHRoYXQgdHJhY2sgd2hlcmUKICAgIC8vIGVsZW1lbnRzIGZsb3cgaW4gc3RpbGwgd29yay4KICAgIGFzc2lnbm1lbnQuYWRkVXNlcih0aGlzKTsKICB9CgogIHZvaWQgcmVtb3ZlQXNzaWdubWVudChUeXBlSW5mb3JtYXRpb24gYXNzaWdubWVudCkgewogICAgaWYgKCFhYmFuZG9uSW5mZXJlbmNpbmcgfHwgbWlnaHRSZXN1bWUpIHsKICAgICAgX2Fzc2lnbm1lbnRzLnJlbW92ZShhc3NpZ25tZW50KTsKICAgIH0KICAgIC8vIFdlIGNhbiBoYXZlIG11bHRpcGxlIGFzc2lnbm1lbnRzIG9mIHRoZSBzYW1lIFtUeXBlSW5mb3JtYXRpb25dLgogICAgaWYgKCFhc3NpZ25tZW50cy5jb250YWlucyhhc3NpZ25tZW50KSkgewogICAgICBhc3NpZ25tZW50LnJlbW92ZVVzZXIodGhpcyk7CiAgICB9CiAgfQoKICBBYnN0cmFjdFZhbHVlIHJlZmluZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIGFiYW5kb25JbmZlcmVuY2luZyA/IHNhZmVUeXBlKGluZmVycmVyKSA6IGNvbXB1dGVUeXBlKGluZmVycmVyKTsKICB9CgogIC8vLyBDb21wdXRlcyBhIG5ldyB0eXBlIGZvciB0aGlzIFtUeXBlSW5mb3JtYXRpb25dIG5vZGUgZGVwZW5kaW5nIG9uIGl0cwogIC8vLyBwb3RlbnRpYWxseSB1cGRhdGVkIGlucHV0cy4KICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKTsKCiAgLy8vIFJldHVybnMgYW4gYXBwcm94aW1hdGlvbiBmb3IgdGhpcyBbVHlwZUluZm9ybWF0aW9uXSBub2RlIHRoYXQgaXMgYWx3YXlzCiAgLy8vIHNhZmUgdG8gdXNlLiBVc2VkIHdoZW4gYWJhbmRvbmluZyBpbmZlcmVuY2Ugb24gYSBub2RlLgogIEFic3RyYWN0VmFsdWUgc2FmZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci50eXBlcy5keW5hbWljVHlwZS50eXBlOwogIH0KCiAgdm9pZCBnaXZlVXAoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIHtib29sIGNsZWFyQXNzaWdubWVudHM6IHRydWV9KSB7CiAgICBhYmFuZG9uSW5mZXJlbmNpbmcgPSB0cnVlOwogICAgLy8gRG8gbm90IHJlbW92ZSBbdGhpc10gYXMgYSB1c2VyIG9mIG5vZGVzIGluIFthc3NpZ25tZW50c10sCiAgICAvLyBiZWNhdXNlIG91ciB0cmFjaW5nIGFuYWx5c2lzIGNvdWxkIGJlIGludGVyZXN0ZWQgaW4gdHJhY2luZwogICAgLy8gdGhpcyBub2RlLgogICAgaWYgKGNsZWFyQXNzaWdubWVudHMpIF9hc3NpZ25tZW50cyA9IFNUT1BfVFJBQ0tJTkdfQVNTSUdOTUVOVFNfTUFSS0VSOwogICAgLy8gRG8gbm90IHJlbW92ZSB1c2VycyBiZWNhdXNlIG91ciB0cmFjaW5nIGFuYWx5c2lzIGNvdWxkIGJlCiAgICAvLyBpbnRlcmVzdGVkIGluIHRyYWNpbmcgdGhlIHVzZXJzIG9mIHRoaXMgbm9kZS4KICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfYXNzaWdubWVudHMgPSBTVE9QX1RSQUNLSU5HX0FTU0lHTk1FTlRTX01BUktFUjsKICAgIHVzZXJzID0gY29uc3QgSW1tdXRhYmxlRW1wdHlTZXQoKTsKICB9CgogIC8vLyBSZXNldCB0aGUgYW5hbHlzaXMgb2YgdGhpcyBub2RlIGJ5IG1ha2luZyBpdHMgdHlwZSBlbXB0eS4KCiAgYm9vbCByZXNldChJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgaWYgKGFiYW5kb25JbmZlcmVuY2luZykgcmV0dXJuIGZhbHNlOwogICAgdHlwZSA9IGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlOwogICAgcmVmaW5lQ291bnQgPSAwOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKTsKCiAgLy8vIFRoZSBbRWxlbWVudF0gd2hlcmUgdGhpcyBbVHlwZUluZm9ybWF0aW9uXSB3YXMgY3JlYXRlZC4gTWF5IGJlIGBudWxsYAogIC8vLyBmb3Igc29tZSBbVHlwZUluZm9ybWF0aW9uXSBub2Rlcywgd2hlcmUgd2UgZG8gbm90IG5lZWQgdG8gc3RvcmUKICAvLy8gdGhlIGluZm9ybWF0aW9uLgogIE1lbWJlckVudGl0eSBnZXQgb3duZXIgPT4gKGNvbnRleHQgIT0gbnVsbCkgPyBjb250ZXh0Lm1lbWJlciA6IG51bGw7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgdGhlIHR5cGUgY2Fubm90IGNoYW5nZSBhZnRlciBpdCBoYXMgYmVlbgogIC8vLyBpbmZlcnJlZC4KICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiAhbWlnaHRSZXN1bWUgJiYgYXNzaWdubWVudHMuZXZlcnkoKGUpID0+IGUuaXNTdGFibGUpOwogIH0KCiAgdm9pZCByZW1vdmVBbmRDbGVhclJlZmVyZW5jZXMoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGFzc2lnbm1lbnRzLmZvckVhY2goKGluZm8pIHsKICAgICAgaW5mby5yZW1vdmVVc2VyKHRoaXMpOwogICAgfSk7CiAgfQoKICB2b2lkIHN0YWJpbGl6ZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmVtb3ZlQW5kQ2xlYXJSZWZlcmVuY2VzKGluZmVycmVyKTsKICAgIC8vIERvIG5vdCByZW1vdmUgdXNlcnMgYmVjYXVzZSB0aGUgdHJhY2luZyBhbmFseXNpcyBjb3VsZCBiZSBpbnRlcmVzdGVkCiAgICAvLyBpbiB0cmFjaW5nIHRoZSB1c2VycyBvZiB0aGlzIG5vZGUuCiAgICBfYXNzaWdubWVudHMgPSBTVE9QX1RSQUNLSU5HX0FTU0lHTk1FTlRTX01BUktFUjsKICAgIGFiYW5kb25JbmZlcmVuY2luZyA9IHRydWU7CiAgICBpc1N0YWJsZSA9IHRydWU7CiAgfQoKICB2b2lkIG1heWJlUmVzdW1lKCkgewogICAgaWYgKCFtaWdodFJlc3VtZSkgcmV0dXJuOwogICAgYWJhbmRvbkluZmVyZW5jaW5nID0gZmFsc2U7CiAgICBkb05vdEVucXVldWUgPSBmYWxzZTsKICB9CgogIC8vLyBEZXN0cm95cyBpbmZvcm1hdGlvbiBub3QgbmVlZGVkIGFmdGVyIHR5cGUgaW5mZXJlbmNlLgogIHZvaWQgY2xlYW51cCgpIHsKICAgIHVzZXJzID0gbnVsbDsKICAgIF9hc3NpZ25tZW50cyA9IG51bGw7CiAgfQoKICBTdHJpbmcgdG9TdHJ1Y3R1cmVkVGV4dChTdHJpbmcgaW5kZW50KSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBfdG9TdHJ1Y3R1cmVkVGV4dChzYiwgaW5kZW50LCBuZXcgU2V0PFR5cGVJbmZvcm1hdGlvbj4oKSk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIHZvaWQgX3RvU3RydWN0dXJlZFRleHQoCiAgICAgIFN0cmluZ0J1ZmZlciBzYiwgU3RyaW5nIGluZGVudCwgU2V0PFR5cGVJbmZvcm1hdGlvbj4gc2VlbikgewogICAgc2Iud3JpdGUodG9TdHJpbmcoKSk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBBcHBseWFibGVUeXBlSW5mb3JtYXRpb24gaW1wbGVtZW50cyBUeXBlSW5mb3JtYXRpb24gewogIGJvb2wgbWlnaHRCZVBhc3NlZFRvRnVuY3Rpb25BcHBseSA9IGZhbHNlOwp9CgovLy8gTWFya2VyIG5vZGUgdXNlZCBvbmx5IGR1cmluZyB0cmVlIGNvbnN0cnVjdGlvbiBidXQgbm90IGR1cmluZyBhY3R1YWwgdHlwZQovLy8gcmVmaW5lbWVudC4KLy8vCi8vLyBDdXJyZW50bHksIHRoaXMgaXMgdXNlZCB0byBnaXZlIGEgdHlwZSB0byBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgZXZlbiBiZWZvcmUKLy8vIHRoZSBjb3JyZXNwb25kaW5nIGRlZmF1bHQgZXhwcmVzc2lvbiBoYXMgYmVlbiBhbmFseXplZC4gU2VlCi8vLyBbZ2V0RGVmYXVsdFR5cGVPZlBhcmFtZXRlcl0gYW5kIFtzZXREZWZhdWx0VHlwZU9mUGFyYW1ldGVyXSBmb3IgZGV0YWlscy4KY2xhc3MgUGxhY2Vob2xkZXJUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBUeXBlSW5mb3JtYXRpb24gewogIFBsYWNlaG9sZGVyVHlwZUluZm9ybWF0aW9uKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0KQogICAgICA6IHN1cGVyKGFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlLCBjb250ZXh0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHZpc2l0IHBsYWNlaG9sZGVyIik7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlZmluZSBwbGFjZWhvbGRlciIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAiUGxhY2Vob2xkZXIgWyRoYXNoQ29kZV0iOwp9CgovLy8gUGFyYW1ldGVycyBvZiBpbnN0YW5jZSBmdW5jdGlvbnMgYmVoYXZlIGRpZmZlcmVudGx5IHRoYW4gb3RoZXIKLy8vIGVsZW1lbnRzIGJlY2F1c2UgdGhlIGluZmVycmVyIG1heSByZW1vdmUgYXNzaWdubWVudHMuIFRoaXMgaGFwcGVucwovLy8gd2hlbiB0aGUgcmVjZWl2ZXIgb2YgYSBkeW5hbWljIGNhbGwgc2l0ZSBjYW4gYmUgcmVmaW5lZAovLy8gdG8gYSB0eXBlIHdoZXJlIHdlIGtub3cgbW9yZSBhYm91dCB3aGljaCBpbnN0YW5jZSBtZXRob2QgaXMgYmVpbmcKLy8vIGNhbGxlZC4KY2xhc3MgUGFyYW1ldGVyQXNzaWdubWVudHMgZXh0ZW5kcyBJdGVyYWJsZUJhc2U8VHlwZUluZm9ybWF0aW9uPiB7CiAgZmluYWwgTWFwPFR5cGVJbmZvcm1hdGlvbiwgaW50PiBhc3NpZ25tZW50cyA9IG5ldyBNYXA8VHlwZUluZm9ybWF0aW9uLCBpbnQ+KCk7CgogIHZvaWQgcmVtb3ZlKFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBpbnQgZXhpc3RpbmcgPSBhc3NpZ25tZW50c1tpbmZvXTsKICAgIGlmIChleGlzdGluZyA9PSBudWxsKSByZXR1cm47CiAgICBpZiAoZXhpc3RpbmcgPT0gMSkgewogICAgICBhc3NpZ25tZW50cy5yZW1vdmUoaW5mbyk7CiAgICB9IGVsc2UgewogICAgICBhc3NpZ25tZW50c1tpbmZvXSA9IGV4aXN0aW5nIC0gMTsKICAgIH0KICB9CgogIHZvaWQgYWRkKFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBpbnQgZXhpc3RpbmcgPSBhc3NpZ25tZW50c1tpbmZvXTsKICAgIGlmIChleGlzdGluZyA9PSBudWxsKSB7CiAgICAgIGFzc2lnbm1lbnRzW2luZm9dID0gMTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2lnbm1lbnRzW2luZm9dID0gZXhpc3RpbmcgKyAxOwogICAgfQogIH0KCiAgdm9pZCByZXBsYWNlKFR5cGVJbmZvcm1hdGlvbiBvbGQsIFR5cGVJbmZvcm1hdGlvbiByZXBsYWNlbWVudCkgewogICAgaW50IGV4aXN0aW5nID0gYXNzaWdubWVudHNbb2xkXTsKICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgIGludCBvdGhlciA9IGFzc2lnbm1lbnRzW3JlcGxhY2VtZW50XTsKICAgICAgaWYgKG90aGVyICE9IG51bGwpIGV4aXN0aW5nICs9IG90aGVyOwogICAgICBhc3NpZ25tZW50c1tyZXBsYWNlbWVudF0gPSBleGlzdGluZzsKICAgICAgYXNzaWdubWVudHMucmVtb3ZlKG9sZCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYXRvcjxUeXBlSW5mb3JtYXRpb24+IGdldCBpdGVyYXRvciA9PiBhc3NpZ25tZW50cy5rZXlzLml0ZXJhdG9yOwogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFR5cGVJbmZvcm1hdGlvbj4gd2hlcmUoRnVuY3Rpb24gZikgPT4gYXNzaWdubWVudHMua2V5cy53aGVyZShmKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBjb250YWlucyhPYmplY3QgaW5mbykgPT4gYXNzaWdubWVudHMuY29udGFpbnNLZXkoaW5mbyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IGFzc2lnbm1lbnRzLmtleXMudG9MaXN0KCkudG9TdHJpbmcoKTsKfQoKLy8vIEEgbm9kZSByZXByZXNlbnRpbmcgYSByZXNvbHZlZCBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQuIFRoZSBraW5kIG9mCi8vLyBlbGVtZW50cyB0aGF0IG5lZWQgYW4gW0VsZW1lbnRUeXBlSW5mb3JtYXRpb25dIGFyZToKLy8vCi8vLyAtIEZ1bmN0aW9ucyAoaW5jbHVkaW5nIGdldHRlcnMgYW5kIHNldHRlcnMpCi8vLyAtIENvbnN0cnVjdG9ycyAoZmFjdG9yeSBvciBnZW5lcmF0aXZlKQovLy8gLSBGaWVsZHMKLy8vIC0gUGFyYW1ldGVycwovLy8gLSBMb2NhbCB2YXJpYWJsZXMgbXV0YXRlZCBpbiBjbG9zdXJlcwovLy8KLy8vIFRoZSBbRWxlbWVudFR5cGVJbmZvcm1hdGlvbl0gb2YgYSBmdW5jdGlvbiBhbmQgYSBjb25zdHJ1Y3RvciBpcyBpdHMKLy8vIHJldHVybiB0eXBlLgovLy8KLy8vIE5vdGUgdGhhdCBhIGZldyBlbGVtZW50cyBvZiB0aGVzZSBraW5kcyBtdXN0IGJlIHRyZWF0ZWQgc3BlY2lhbGx5LAovLy8gYW5kIHRoZXkgYXJlIGRlYWx0IGluIFtFbGVtZW50VHlwZUluZm9ybWF0aW9uLmhhbmRsZVNwZWNpYWxDYXNlc106Ci8vLwovLy8gLSBQYXJhbWV0ZXJzIG9mIGNsb3N1cmVzLCBgbm9TdWNoTWV0aG9kYCBhbmQgYGNhbGxgIGluc3RhbmNlCi8vLyAgIG1ldGhvZHM6IHdlIGN1cnJlbnRseSBkbyBub3QgaW5mZXIgdHlwZXMgZm9yIHRob3NlLgovLy8KLy8vIC0gRmllbGRzIGFuZCBwYXJhbWV0ZXJzIGJlaW5nIGFzc2lnbmVkIGJ5IHN5bnRoZXNpemVkIGNhbGxzIGRvbmUgYnkKLy8vICAgdGhlIGJhY2tlbmQ6IHdlIGRvIG5vdCBrbm93IHdoYXQgdHlwZXMgdGhlIGJhY2tlbmQgd2lsbCB1c2UuCi8vLwovLy8gLSBOYXRpdmUgZnVuY3Rpb25zIGFuZCBmaWVsZHM6IGJlY2F1c2UgbmF0aXZlIG1ldGhvZHMgY29udGFpbiBubyBEYXJ0Ci8vLyAgIGNvZGUsIGFuZCBuYXRpdmUgZmllbGRzIGRvIG5vdCBoYXZlIERhcnQgYXNzaWdubWVudHMsIHdlIGp1c3QKLy8vICAgdHJ1c3QgdGhlaXIgdHlwZSBhbm5vdGF0aW9uLgovLy8KYWJzdHJhY3QgY2xhc3MgRWxlbWVudFR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIFR5cGVJbmZvcm1hdGlvbiB7CiAgLy8vIE1hcmtlciB0byBkaXNhYmxlIGluZmVyZW5jZSBmb3IgY2xvc3VyZXMgaW4gW2hhbmRsZVNwZWNpYWxDYXNlc10uCiAgYm9vbCBkaXNhYmxlSW5mZXJlbmNlRm9yQ2xvc3VyZXMgPSB0cnVlOwoKICBFbGVtZW50VHlwZUluZm9ybWF0aW9uLl9pbnRlcm5hbCgKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLCBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZSwgY29udGV4dCk7CiAgRWxlbWVudFR5cGVJbmZvcm1hdGlvbi5fd2l0aEFzc2lnbm1lbnRzKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LAogICAgICBQYXJhbWV0ZXJBc3NpZ25tZW50cyBhc3NpZ25tZW50cykKICAgICAgOiBzdXBlci53aXRoQXNzaWdubWVudHMoCiAgICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlLCBjb250ZXh0LCBhc3NpZ25tZW50cyk7CgogIFN0cmluZyBnZXRJbmZlcnJlZFNpZ25hdHVyZShUeXBlU3lzdGVtIHR5cGVzKTsKCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWU7Cn0KCi8vLyBBIG5vZGUgcmVwcmVzZW50aW5nIG1lbWJlcnMgaW4gdGhlIGJyb2FkZXN0IHNlbnNlOgovLy8KLy8vIC0gRnVuY3Rpb25zCi8vLyAtIENvbnN0cnVjdG9ycwovLy8gLSBGaWVsZHMgKGFsc28gc3ludGhldGljIG9uZXMgZHVlIHRvIGNsb3N1cmVzKQovLy8gLSBMb2NhbCBmdW5jdGlvbnMgKGNsb3N1cmVzKQovLy8KLy8vIFRoZXNlIHNob3VsZCBuZXZlciBiZSBjcmVhdGVkIGRpcmVjdGx5IGJ1dCBpbnN0ZWFkIGFyZSBjb25zdHJ1Y3RlZCBieQovLy8gdGhlIFtFbGVtZW50VHlwZUluZm9ybWF0aW9uXSBmYWN0b3J5LgphYnN0cmFjdCBjbGFzcyBNZW1iZXJUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBFbGVtZW50VHlwZUluZm9ybWF0aW9uCiAgICB3aXRoIEFwcGx5YWJsZVR5cGVJbmZvcm1hdGlvbiB7CiAgZmluYWwgTWVtYmVyRW50aXR5IF9tZW1iZXI7CgogIC8vLyBJZiBbZWxlbWVudF0gaXMgYSBmdW5jdGlvbiwgW2Nsb3N1cml6ZWRDb3VudF0gaXMgdGhlIG51bWJlciBvZgogIC8vLyB0aW1lcyBpdCBpcyBjbG9zdXJpemVkLiBUaGUgdmFsdWUgZ2V0cyB1cGRhdGVkIHdoaWxlIGluZmVycmluZy4KICBpbnQgY2xvc3VyaXplZENvdW50ID0gMDsKCiAgLy8gU3RyaWN0IGBib29sYCB2YWx1ZSBpcyBjb21wdXRlZCBpbiBjbGVhbnVwKCkuIEFsc28gdXNlZCBhcyBhIGZsYWcgdG8gc2VlIGlmCiAgLy8gY2xlYW51cCBoYXMgYmVlbiBjYWxsZWQuCiAgYm9vbCBfaXNDYWxsZWRPbmNlID0gbnVsbDsKCiAgLy8vIFRoaXMgbWFwIGNvbnRhaW5zIHRoZSBjYWxsZXJzIG9mIFtlbGVtZW50XS4gSXQgc3RvcmVzIGFsbCB1bmlxdWUgY2FsbAogIC8vLyBzaXRlcyB0byBlbmFibGUgY291bnRpbmcgdGhlIGdsb2JhbCBudW1iZXIgb2YgY2FsbCBzaXRlcyBvZiBbZWxlbWVudF0uCiAgLy8vCiAgLy8vIEEgY2FsbCBzaXRlIGlzIGVpdGhlciBhbiBBU1QgW2FzdC5Ob2RlXSwgYW4gW0VsZW1lbnRdIChzZWUgdXNlcyBvZgogIC8vLyBbc3ludGhlc2l6ZUZvcndhcmRpbmdDYWxsXSBpbiBbU2ltcGxlVHlwZUluZmVycmVyVmlzaXRvcl0pIG9yIGFuIElSCiAgLy8vIFtpci5Ob2RlXS4KICAvLy8KICAvLy8gVGhlIGdsb2JhbCBpbmZvcm1hdGlvbiBpcyBzdW1tYXJpemVkIGluIFtjbGVhbnVwXSwgYWZ0ZXIgd2hpY2ggW19jYWxsZXJzXQogIC8vLyBpcyBzZXQgdG8gYG51bGxgLgogIE1hcDxNZW1iZXJFbnRpdHksIFNldGxldDxPYmplY3Q+PiBfY2FsbGVyczsKCiAgTWVtYmVyVHlwZUluZm9ybWF0aW9uLl9pbnRlcm5hbCgKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLCB0aGlzLl9tZW1iZXIpCiAgICAgIDogc3VwZXIuX2ludGVybmFsKGFic3RyYWN0VmFsdWVEb21haW4sIG51bGwpOwoKICBNZW1iZXJFbnRpdHkgZ2V0IG1lbWJlciA9PiBfbWVtYmVyOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiAnJG1lbWJlcic7CgogIHZvaWQgYWRkQ2FsbChNZW1iZXJFbnRpdHkgY2FsbGVyLCBPYmplY3Qgbm9kZSkgewogICAgX2NhbGxlcnMgPz89IDxNZW1iZXJFbnRpdHksIFNldGxldDxPYmplY3Q+Pnt9OwogICAgX2NhbGxlcnMucHV0SWZBYnNlbnQoY2FsbGVyLCAoKSA9PiBuZXcgU2V0bGV0KCkpLmFkZChub2RlKTsKICB9CgogIHZvaWQgcmVtb3ZlQ2FsbChNZW1iZXJFbnRpdHkgY2FsbGVyLCBPYmplY3Qgbm9kZSkgewogICAgaWYgKF9jYWxsZXJzID09IG51bGwpIHJldHVybjsKICAgIFNldGxldCBjYWxscyA9IF9jYWxsZXJzW2NhbGxlcl07CiAgICBpZiAoY2FsbHMgPT0gbnVsbCkgcmV0dXJuOwogICAgY2FsbHMucmVtb3ZlKG5vZGUpOwogICAgaWYgKGNhbGxzLmlzRW1wdHkpIHsKICAgICAgX2NhbGxlcnMucmVtb3ZlKGNhbGxlcik7CiAgICB9CiAgfQoKICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGdldCBjYWxsZXJzRm9yVGVzdGluZyB7CiAgICByZXR1cm4gX2NhbGxlcnM/LmtleXM7CiAgfQoKICBib29sIGlzQ2FsbGVkT25jZSgpIHsKICAgIC8vIElmIHRoaXMgYXNzZXJ0IGZpcmVzIGl0IG1lYW5zIHRoYXQgdGhpcyBNZW1iZXJUeXBlSW5mb3JtYXRpb24gZm9yIHRoZQogICAgLy8gZWxlbWVudCB3YXMgbm90IHBhcnQgb2YgdHlwZSBpbmZlcmVuY2UuIFRoaXMgaGFwcGVucyBmb3IKICAgIC8vIENvbnN0cnVjdG9yQm9keUVsZW1lbnRzLCBzbyBndWFyZCB0aGUgY2FsbCB3aXRoIGEgdGVzdCBmb3IKICAgIC8vIENvbnN0cnVjdG9yQm9keUVsZW1lbnQuIEZvciBvdGhlciBlbGVtZW50cywgaW52ZXN0aWdhdGUgd2h5IHRoZSBlbGVtZW50CiAgICAvLyB3YXMgbm90IHByZXNlbnQgZm9yIHR5cGUgaW5mZXJlbmNlLgogICAgYXNzZXJ0KF9pc0NhbGxlZE9uY2UgIT0gbnVsbCk7CiAgICByZXR1cm4gX2lzQ2FsbGVkT25jZSA/PyBmYWxzZTsKICB9CgogIGJvb2wgX2NvbXB1dGVJc0NhbGxlZE9uY2UoKSB7CiAgICBpZiAoX2NhbGxlcnMgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgaW50IGNvdW50ID0gMDsKICAgIGZvciAodmFyIHNldCBpbiBfY2FsbGVycy52YWx1ZXMpIHsKICAgICAgY291bnQgKz0gc2V0Lmxlbmd0aDsKICAgICAgaWYgKGNvdW50ID4gMSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIGNvdW50ID09IDE7CiAgfQoKICB2b2lkIGNvbXB1dGVJc0NhbGxlZE9uY2UoKSB7CiAgICBhc3NlcnQoX2lzQ2FsbGVkT25jZSA9PSBudWxsLCAiaXNDYWxsZWRPbmNlIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQuIik7CiAgICBfaXNDYWxsZWRPbmNlID0gX2NvbXB1dGVJc0NhbGxlZE9uY2UoKTsKICB9CgogIGJvb2wgZ2V0IGlzQ2xvc3VyaXplZCA9PiBjbG9zdXJpemVkQ291bnQgPiAwOwoKICAvLyBDbG9zdXJpemVkIG1ldGhvZHMgbmV2ZXIgYmVjb21lIHN0YWJsZSB0byBlbnN1cmUgdGhhdCB0aGUgaW5mb3JtYXRpb24gaW4KICAvLyBbdXNlcnNdIGlzIGFjY3VyYXRlLiBUaGUgaW5mZXJlbmNlIHN0b3BzIHRyYWNraW5nIHVzZXJzIGZvciBzdGFibGUgdHlwZXMuCiAgLy8gTm90ZSB0aGF0IHdlIG9ubHkgb3ZlcnJpZGUgdGhlIGdldHRlciwgdGhlIHNldHRlciB3aWxsIHN0aWxsIG1vZGlmeSB0aGUKICAvLyBzdGF0ZSBvZiB0aGUgW2lzU3RhYmxlXSBmaWVsZCBpbmhlcml0ZWQgZnJvbSBbVHlwZUluZm9ybWF0aW9uXS4KICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1N0YWJsZSA9PiBzdXBlci5pc1N0YWJsZSAmJiAhaXNDbG9zdXJpemVkOwoKICBBYnN0cmFjdFZhbHVlIGhhbmRsZVNwZWNpYWxDYXNlcyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlcik7CgogIEFic3RyYWN0VmFsdWUgX2hhbmRsZUZ1bmN0aW9uQ2FzZSgKICAgICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24sIEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBpZiAoaW5mZXJyZXIuY2xvc2VkV29ybGQubmF0aXZlRGF0YS5pc05hdGl2ZU1lbWJlcihmdW5jdGlvbikpIHsKICAgICAgLy8gVXNlIHRoZSB0eXBlIGFubm90YXRpb24gYXMgdGhlIHR5cGUgZm9yIG5hdGl2ZSBlbGVtZW50cy4gV2UKICAgICAgLy8gYWxzbyBnaXZlIHVwIG9uIGluZmVycmluZyB0byBtYWtlIHN1cmUgdGhpcyBlbGVtZW50IG5ldmVyCiAgICAgIC8vIGdvZXMgaW4gdGhlIHdvcmsgcXVldWUuCiAgICAgIGdpdmVVcChpbmZlcnJlcik7CiAgICAgIHJldHVybiBpbmZlcnJlcgogICAgICAgICAgLnR5cGVPZk5hdGl2ZUJlaGF2aW9yKAogICAgICAgICAgICAgIGluZmVycmVyLmNsb3NlZFdvcmxkLm5hdGl2ZURhdGEuZ2V0TmF0aXZlTWV0aG9kQmVoYXZpb3IoZnVuY3Rpb24pKQogICAgICAgICAgLnR5cGU7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEFic3RyYWN0VmFsdWUgcG90ZW50aWFsbHlOYXJyb3dUeXBlKAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssIEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gX3BvdGVudGlhbGx5TmFycm93VHlwZShtYXNrLCBpbmZlcnJlcik7CiAgfQoKICBBYnN0cmFjdFZhbHVlIF9wb3RlbnRpYWxseU5hcnJvd1R5cGUoCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBBYnN0cmFjdFZhbHVlIHNwZWNpYWwgPSBoYW5kbGVTcGVjaWFsQ2FzZXMoaW5mZXJyZXIpOwogICAgaWYgKHNwZWNpYWwgIT0gbnVsbCkgcmV0dXJuIHBvdGVudGlhbGx5TmFycm93VHlwZShzcGVjaWFsLCBpbmZlcnJlcik7CiAgICByZXR1cm4gcG90ZW50aWFsbHlOYXJyb3dUeXBlKAogICAgICAgIGluZmVycmVyLnR5cGVzLmNvbXB1dGVUeXBlTWFzayhhc3NpZ25tZW50cyksIGluZmVycmVyKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgc2FmZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBwb3RlbnRpYWxseU5hcnJvd1R5cGUoc3VwZXIuc2FmZVR5cGUoaW5mZXJyZXIpLCBpbmZlcnJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnTWVtYmVyICRfbWVtYmVyICR0eXBlJzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRNZW1iZXJUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFudXAoKSB7CiAgICBfY2FsbGVycyA9IG51bGw7CiAgICBzdXBlci5jbGVhbnVwKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0SW5mZXJyZWRTaWduYXR1cmUoVHlwZVN5c3RlbSB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmdldEluZmVycmVkU2lnbmF0dXJlT2ZNZXRob2QoX21lbWJlcik7CiAgfQp9CgpjbGFzcyBGaWVsZFR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIE1lbWJlclR5cGVJbmZvcm1hdGlvbiB7CiAgRmllbGRFbnRpdHkgZ2V0IF9maWVsZCA9PiBfbWVtYmVyOwogIGZpbmFsIERhcnRUeXBlIF90eXBlOwoKICBGaWVsZFR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLCBGaWVsZEVudGl0eSBlbGVtZW50LCB0aGlzLl90eXBlKQogICAgICA6IHN1cGVyLl9pbnRlcm5hbChhYnN0cmFjdFZhbHVlRG9tYWluLCBlbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBoYW5kbGVTcGVjaWFsQ2FzZXMoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGlmICghaW5mZXJyZXIuY2FuRmllbGRCZVVzZWRGb3JHbG9iYWxPcHRpbWl6YXRpb25zKF9maWVsZCkgfHwKICAgICAgICBpbmZlcnJlci5hc3N1bWVEeW5hbWljKF9maWVsZCkpIHsKICAgICAgLy8gRG8gbm90IGluZmVyIHR5cGVzIGZvciBmaWVsZHMgdGhhdCBoYXZlIGEgY29ycmVzcG9uZGluZyBhbm5vdGF0aW9uIG9yCiAgICAgIC8vIGFyZSBhc3NpZ25lZCBieSBzeW50aGVzaXplZCBjYWxscwoKICAgICAgZ2l2ZVVwKGluZmVycmVyKTsKICAgICAgcmV0dXJuIHNhZmVUeXBlKGluZmVycmVyKTsKICAgIH0KICAgIGlmIChpbmZlcnJlci5jbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmlzTmF0aXZlTWVtYmVyKF9maWVsZCkpIHsKICAgICAgLy8gVXNlIHRoZSB0eXBlIGFubm90YXRpb24gYXMgdGhlIHR5cGUgZm9yIG5hdGl2ZSBlbGVtZW50cy4gV2UKICAgICAgLy8gYWxzbyBnaXZlIHVwIG9uIGluZmVycmluZyB0byBtYWtlIHN1cmUgdGhpcyBlbGVtZW50IG5ldmVyCiAgICAgIC8vIGdvZXMgaW4gdGhlIHdvcmsgcXVldWUuCiAgICAgIGdpdmVVcChpbmZlcnJlcik7CiAgICAgIHJldHVybiBpbmZlcnJlcgogICAgICAgICAgLnR5cGVPZk5hdGl2ZUJlaGF2aW9yKGluZmVycmVyLmNsb3NlZFdvcmxkLm5hdGl2ZURhdGEKICAgICAgICAgICAgICAuZ2V0TmF0aXZlRmllbGRMb2FkQmVoYXZpb3IoX2ZpZWxkKSkKICAgICAgICAgIC50eXBlOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIF9wb3RlbnRpYWxseU5hcnJvd1R5cGUoCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBfbmFycm93VHlwZShpbmZlcnJlci5jbG9zZWRXb3JsZCwgbWFzaywgX3R5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNTdGFibGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICAvLyBUaGUgbnVtYmVyIG9mIGFzc2lnbm1lbnRzIG9mIG5vbi1maW5hbCBmaWVsZHMgaXMKICAgIC8vIG5vdCBzdGFibGUuIFRoZXJlZm9yZSBzdWNoIGEgZmllbGQgY2Fubm90IGJlIHN0YWJsZS4KICAgIGlmICghX2ZpZWxkLmlzQXNzaWduYWJsZSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuaGFzU3RhYmxlVHlwZShpbmZlcnJlcik7CiAgfQp9CgpjbGFzcyBHZXR0ZXJUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBNZW1iZXJUeXBlSW5mb3JtYXRpb24gewogIEZ1bmN0aW9uRW50aXR5IGdldCBfZ2V0dGVyID0+IF9tZW1iZXI7CiAgZmluYWwgRnVuY3Rpb25UeXBlIF90eXBlOwoKICBHZXR0ZXJUeXBlSW5mb3JtYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBGdW5jdGlvbkVudGl0eSBlbGVtZW50LCB0aGlzLl90eXBlKQogICAgICA6IHN1cGVyLl9pbnRlcm5hbChhYnN0cmFjdFZhbHVlRG9tYWluLCBlbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBoYW5kbGVTcGVjaWFsQ2FzZXMoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBfaGFuZGxlRnVuY3Rpb25DYXNlKF9nZXR0ZXIsIGluZmVycmVyKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgX3BvdGVudGlhbGx5TmFycm93VHlwZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLCBJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIF9uYXJyb3dUeXBlKGluZmVycmVyLmNsb3NlZFdvcmxkLCBtYXNrLCBfdHlwZS5yZXR1cm5UeXBlKTsKICB9Cn0KCmNsYXNzIFNldHRlclR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIE1lbWJlclR5cGVJbmZvcm1hdGlvbiB7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IF9zZXR0ZXIgPT4gX21lbWJlcjsKCiAgU2V0dGVyVHlwZUluZm9ybWF0aW9uKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQpCiAgICAgIDogc3VwZXIuX2ludGVybmFsKGFic3RyYWN0VmFsdWVEb21haW4sIGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGhhbmRsZVNwZWNpYWxDYXNlcyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIF9oYW5kbGVGdW5jdGlvbkNhc2UoX3NldHRlciwgaW5mZXJyZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBfcG90ZW50aWFsbHlOYXJyb3dUeXBlKAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssIEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gbWFzazsKICB9Cn0KCmNsYXNzIE1ldGhvZFR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIE1lbWJlclR5cGVJbmZvcm1hdGlvbiB7CiAgRnVuY3Rpb25FbnRpdHkgZ2V0IF9tZXRob2QgPT4gX21lbWJlcjsKICBmaW5hbCBGdW5jdGlvblR5cGUgX3R5cGU7CgogIE1ldGhvZFR5cGVJbmZvcm1hdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIEZ1bmN0aW9uRW50aXR5IGVsZW1lbnQsIHRoaXMuX3R5cGUpCiAgICAgIDogc3VwZXIuX2ludGVybmFsKGFic3RyYWN0VmFsdWVEb21haW4sIGVsZW1lbnQpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGhhbmRsZVNwZWNpYWxDYXNlcyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIF9oYW5kbGVGdW5jdGlvbkNhc2UoX21ldGhvZCwgaW5mZXJyZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBfcG90ZW50aWFsbHlOYXJyb3dUeXBlKAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssIEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gX25hcnJvd1R5cGUoaW5mZXJyZXIuY2xvc2VkV29ybGQsIG1hc2ssIF90eXBlLnJldHVyblR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNTdGFibGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSA9PiBmYWxzZTsKfQoKY2xhc3MgRmFjdG9yeUNvbnN0cnVjdG9yVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgTWVtYmVyVHlwZUluZm9ybWF0aW9uIHsKICBDb25zdHJ1Y3RvckVudGl0eSBnZXQgX2NvbnN0cnVjdG9yID0+IF9tZW1iZXI7CiAgZmluYWwgRnVuY3Rpb25UeXBlIF90eXBlOwoKICBGYWN0b3J5Q29uc3RydWN0b3JUeXBlSW5mb3JtYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBDb25zdHJ1Y3RvckVudGl0eSBlbGVtZW50LCB0aGlzLl90eXBlKQogICAgICA6IHN1cGVyLl9pbnRlcm5hbChhYnN0cmFjdFZhbHVlRG9tYWluLCBlbGVtZW50KTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBoYW5kbGVTcGVjaWFsQ2FzZXMoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW47CiAgICBpZiAoX2NvbnN0cnVjdG9yLmlzRnJvbUVudmlyb25tZW50Q29uc3RydWN0b3IpIHsKICAgICAgaWYgKF9jb25zdHJ1Y3Rvci5lbmNsb3NpbmdDbGFzcyA9PSBpbmZlcnJlci5jb21tb25FbGVtZW50cy5pbnRDbGFzcykgewogICAgICAgIGdpdmVVcChpbmZlcnJlcik7CiAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uaW5jbHVkZU51bGwoYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRUeXBlKTsKICAgICAgfSBlbHNlIGlmIChfY29uc3RydWN0b3IuZW5jbG9zaW5nQ2xhc3MgPT0KICAgICAgICAgIGluZmVycmVyLmNvbW1vbkVsZW1lbnRzLmJvb2xDbGFzcykgewogICAgICAgIGdpdmVVcChpbmZlcnJlcik7CiAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uaW5jbHVkZU51bGwoYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSk7CiAgICAgIH0gZWxzZSBpZiAoX2NvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzID09CiAgICAgICAgICBpbmZlcnJlci5jb21tb25FbGVtZW50cy5zdHJpbmdDbGFzcykgewogICAgICAgIGdpdmVVcChpbmZlcnJlcik7CiAgICAgICAgcmV0dXJuIGFic3RyYWN0VmFsdWVEb21haW4uaW5jbHVkZU51bGwoYWJzdHJhY3RWYWx1ZURvbWFpbi5zdHJpbmdUeXBlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9oYW5kbGVGdW5jdGlvbkNhc2UoX2NvbnN0cnVjdG9yLCBpbmZlcnJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIF9wb3RlbnRpYWxseU5hcnJvd1R5cGUoCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBfbmFycm93VHlwZShpbmZlcnJlci5jbG9zZWRXb3JsZCwgbWFzaywgX3R5cGUucmV0dXJuVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBzdXBlci5oYXNTdGFibGVUeXBlKGluZmVycmVyKTsKICB9Cn0KCmNsYXNzIEdlbmVyYXRpdmVDb25zdHJ1Y3RvclR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIE1lbWJlclR5cGVJbmZvcm1hdGlvbiB7CiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0IF9jb25zdHJ1Y3RvciA9PiBfbWVtYmVyOwoKICBHZW5lcmF0aXZlQ29uc3RydWN0b3JUeXBlSW5mb3JtYXRpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwgQ29uc3RydWN0b3JFbnRpdHkgZWxlbWVudCkKICAgICAgOiBzdXBlci5faW50ZXJuYWwoYWJzdHJhY3RWYWx1ZURvbWFpbiwgZWxlbWVudCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgaGFuZGxlU3BlY2lhbENhc2VzKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gX2hhbmRsZUZ1bmN0aW9uQ2FzZShfY29uc3RydWN0b3IsIGluZmVycmVyKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgX3BvdGVudGlhbGx5TmFycm93VHlwZSgKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLCBJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIG1hc2s7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBzdXBlci5oYXNTdGFibGVUeXBlKGluZmVycmVyKTsKICB9Cn0KCi8vLyBBIG5vZGUgcmVwcmVzZW50aW5nIHBhcmFtZXRlcnM6Ci8vLwovLy8gLSBQYXJhbWV0ZXJzCi8vLyAtIEluaXRpYWxpemluZyBmb3JtYWxzCi8vLwovLy8gVGhlc2Ugc2hvdWxkIG5ldmVyIGJlIGNyZWF0ZWQgZGlyZWN0bHkgYnV0IGluc3RlYWQgYXJlIGNvbnN0cnVjdGVkIGJ5Ci8vLyB0aGUgW0VsZW1lbnRUeXBlSW5mb3JtYXRpb25dIGZhY3RvcnkuCmNsYXNzIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIEVsZW1lbnRUeXBlSW5mb3JtYXRpb24gewogIGZpbmFsIExvY2FsIF9wYXJhbWV0ZXI7CiAgZmluYWwgRGFydFR5cGUgX3R5cGU7CiAgZmluYWwgRnVuY3Rpb25FbnRpdHkgX21ldGhvZDsKICBmaW5hbCBib29sIF9pc0luc3RhbmNlTWVtYmVyUGFyYW1ldGVyOwogIGZpbmFsIGJvb2wgX2lzQ2xvc3VyZVBhcmFtZXRlcjsKICBmaW5hbCBib29sIF9pc0luaXRpYWxpemluZ0Zvcm1hbDsKICBib29sIF9pc1RlYXJPZmZDbG9zdXJlUGFyYW1ldGVyID0gZmFsc2U7CgogIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbi5sb2NhbEZ1bmN0aW9uKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LAogICAgICB0aGlzLl9wYXJhbWV0ZXIsCiAgICAgIHRoaXMuX3R5cGUsCiAgICAgIHRoaXMuX21ldGhvZCkKICAgICAgOiBfaXNJbnN0YW5jZU1lbWJlclBhcmFtZXRlciA9IGZhbHNlLAogICAgICAgIF9pc0Nsb3N1cmVQYXJhbWV0ZXIgPSB0cnVlLAogICAgICAgIF9pc0luaXRpYWxpemluZ0Zvcm1hbCA9IGZhbHNlLAogICAgICAgIHN1cGVyLl9pbnRlcm5hbChhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0KTsKCiAgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uLnN0YXRpYyhBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LCB0aGlzLl9wYXJhbWV0ZXIsIHRoaXMuX3R5cGUsIHRoaXMuX21ldGhvZCwKICAgICAge2Jvb2wgaXNJbml0aWFsaXppbmdGb3JtYWw6IGZhbHNlfSkKICAgICAgOiBfaXNJbnN0YW5jZU1lbWJlclBhcmFtZXRlciA9IGZhbHNlLAogICAgICAgIF9pc0Nsb3N1cmVQYXJhbWV0ZXIgPSBmYWxzZSwKICAgICAgICBfaXNJbml0aWFsaXppbmdGb3JtYWwgPSBpc0luaXRpYWxpemluZ0Zvcm1hbCwKICAgICAgICBzdXBlci5faW50ZXJuYWwoYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29udGV4dCk7CgogIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbi5pbnN0YW5jZU1lbWJlcigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwKICAgICAgdGhpcy5fcGFyYW1ldGVyLAogICAgICB0aGlzLl90eXBlLAogICAgICB0aGlzLl9tZXRob2QsCiAgICAgIFBhcmFtZXRlckFzc2lnbm1lbnRzIGFzc2lnbm1lbnRzKQogICAgICA6IF9pc0luc3RhbmNlTWVtYmVyUGFyYW1ldGVyID0gdHJ1ZSwKICAgICAgICBfaXNDbG9zdXJlUGFyYW1ldGVyID0gZmFsc2UsCiAgICAgICAgX2lzSW5pdGlhbGl6aW5nRm9ybWFsID0gZmFsc2UsCiAgICAgICAgc3VwZXIuX3dpdGhBc3NpZ25tZW50cyhhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0LCBhc3NpZ25tZW50cyk7CgogIEZ1bmN0aW9uRW50aXR5IGdldCBtZXRob2QgPT4gX21ldGhvZDsKCiAgTG9jYWwgZ2V0IHBhcmFtZXRlciA9PiBfcGFyYW1ldGVyOwoKICBib29sIGdldCBpc1JlZ3VsYXJQYXJhbWV0ZXIgPT4gIV9pc0luaXRpYWxpemluZ0Zvcm1hbDsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gJyRwYXJhbWV0ZXInOwoKICB2b2lkIHRhZ0FzVGVhck9mZkNsb3N1cmVQYXJhbWV0ZXIoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGFzc2VydCghX2lzSW5pdGlhbGl6aW5nRm9ybWFsKTsKICAgIF9pc1RlYXJPZmZDbG9zdXJlUGFyYW1ldGVyID0gdHJ1ZTsKICAgIC8vIFdlIGhhdmUgdG8gYWRkIGEgZmxvdy1lZGdlIGZvciB0aGUgZGVmYXVsdCB2YWx1ZSAoaWYgaXQgZXhpc3RzKSwgYXMgd2UKICAgIC8vIG1pZ2h0IG5vdCBzZWUgYWxsIGNhbGwtc2l0ZXMgYW5kIHRodXMgbWlzcyB0aGUgdXNlIG9mIGl0LgogICAgVHlwZUluZm9ybWF0aW9uIGRlZmF1bHRUeXBlID0KICAgICAgICBpbmZlcnJlci5nZXREZWZhdWx0VHlwZU9mUGFyYW1ldGVyKF9wYXJhbWV0ZXIpOwogICAgaWYgKGRlZmF1bHRUeXBlICE9IG51bGwpIGRlZmF1bHRUeXBlLmFkZFVzZXIodGhpcyk7CiAgfQoKICAvLyBUT0RPKGhlcmh1dCk6IENsZWFudXAgaW50byBvbmUgY29uZGl0aW9uYWwuCiAgQWJzdHJhY3RWYWx1ZSBoYW5kbGVTcGVjaWFsQ2FzZXMoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGlmICghaW5mZXJyZXIuY2FuRnVuY3Rpb25QYXJhbWV0ZXJzQmVVc2VkRm9yR2xvYmFsT3B0aW1pemF0aW9ucyhfbWV0aG9kKSB8fAogICAgICAgIGluZmVycmVyLmFzc3VtZUR5bmFtaWMoX21ldGhvZCkpIHsKICAgICAgLy8gRG8gbm90IGluZmVyIHR5cGVzIGZvciBwYXJhbWV0ZXJzIHRoYXQgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgYW5ub3RhdGlvbgogICAgICAvLyBvciB0aGF0IGFyZSBhc3NpZ25lZCBieSBzeW50aGVzaXplZCBjYWxscy4KICAgICAgZ2l2ZVVwKGluZmVycmVyKTsKICAgICAgcmV0dXJuIHNhZmVUeXBlKGluZmVycmVyKTsKICAgIH0KCiAgICAvLyBUaGUgYmVsb3cgZG8gbm90IGFwcGx5IHRvIHBhcmFtZXRlcnMgb2YgY29uc3RydWN0b3JzLCBzbyBza2lwCiAgICAvLyBpbml0aWFsaXppbmcgZm9ybWFscy4KICAgIGlmIChfaXNJbml0aWFsaXppbmdGb3JtYWwpIHJldHVybiBudWxsOwoKICAgIGlmICgoX2lzVGVhck9mZkNsb3N1cmVQYXJhbWV0ZXIgfHwgX2lzQ2xvc3VyZVBhcmFtZXRlcikgJiYKICAgICAgICBkaXNhYmxlSW5mZXJlbmNlRm9yQ2xvc3VyZXMpIHsKICAgICAgLy8gRG8gbm90IGluZmVyIHR5cGVzIGZvciBwYXJhbWV0ZXJzIG9mIGNsb3N1cmVzLiBXZSBkbyBub3QKICAgICAgLy8gY2xlYXIgdGhlIGFzc2lnbm1lbnRzIGluIGNhc2UgdGhlIGNsb3N1cmUgaXMgc3VjY2Vzc2Z1bGx5CiAgICAgIC8vIHRyYWNlZC4KICAgICAgZ2l2ZVVwKGluZmVycmVyLCBjbGVhckFzc2lnbm1lbnRzOiBmYWxzZSk7CiAgICAgIHJldHVybiBzYWZlVHlwZShpbmZlcnJlcik7CiAgICB9CiAgICBpZiAoX2lzSW5zdGFuY2VNZW1iZXJQYXJhbWV0ZXIgJiYKICAgICAgICAoX21ldGhvZC5uYW1lID09IElkZW50aWZpZXJzLm5vU3VjaE1ldGhvZF8gfHwKICAgICAgICAgICAgKF9tZXRob2QubmFtZSA9PSBJZGVudGlmaWVycy5jYWxsICYmCiAgICAgICAgICAgICAgICBkaXNhYmxlSW5mZXJlbmNlRm9yQ2xvc3VyZXMpKSkgewogICAgICAvLyBEbyBub3QgaW5mZXIgdHlwZXMgZm9yIHBhcmFtZXRlcnMgb2YgW25vU3VjaE1ldGhvZF0gYW5kIFtjYWxsXSBpbnN0YW5jZQogICAgICAvLyBtZXRob2RzLgogICAgICBnaXZlVXAoaW5mZXJyZXIpOwogICAgICByZXR1cm4gc2FmZVR5cGUoaW5mZXJyZXIpOwogICAgfQogICAgaWYgKGluZmVycmVyLmluZmVycmVkRGF0YUJ1aWxkZXIKICAgICAgICAuZ2V0Q3VycmVudGx5S25vd25NaWdodEJlUGFzc2VkVG9BcHBseShfbWV0aG9kKSkgewogICAgICBnaXZlVXAoaW5mZXJyZXIpOwogICAgICByZXR1cm4gc2FmZVR5cGUoaW5mZXJyZXIpOwogICAgfQogICAgaWYgKF9tZXRob2QgPT0gaW5mZXJyZXIubWFpbkVsZW1lbnQpIHsKICAgICAgLy8gVGhlIGltcGxpY2l0IGNhbGwgdG8gbWFpbiBpcyBub3Qgc2VlbiBieSB0aGUgaW5mZXJyZXIsCiAgICAgIC8vIHRoZXJlZm9yZSB3ZSBleHBsaWNpdGx5IHNldCB0aGUgdHlwZSBvZiBpdHMgcGFyYW1ldGVycyBhcwogICAgICAvLyBkeW5hbWljLgogICAgICAvLyBUT0RPKDE0NTY2KTogc3ludGhlc2l6ZSBhIGNhbGwgaW5zdGVhZCB0byBnZXQgdGhlIGV4YWN0CiAgICAgIC8vIHR5cGVzLgogICAgICBnaXZlVXAoaW5mZXJyZXIpOwogICAgICByZXR1cm4gc2FmZVR5cGUoaW5mZXJyZXIpOwogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0KCiAgQWJzdHJhY3RWYWx1ZSBwb3RlbnRpYWxseU5hcnJvd1R5cGUoCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGlmIChpbmZlcnJlci5jbG9zZWRXb3JsZC5hbm5vdGF0aW9uc0RhdGEKICAgICAgICAuZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3kobWV0aG9kKQogICAgICAgIC5pc1RydXN0ZWQpIHsKICAgICAgLy8gSW4gY2hlY2tlZCBvciBzdHJvbmcgbW9kZSB3ZSBkb24ndCB0cnVzdCB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cwogICAgICAvLyBwYXNzZWQgdG8gYSBwYXJhbWV0ZXIuIFRoZSBtZWFucyB0aGF0IHRoZSBjaGVja2luZyBvZiBhIHBhcmFtZXRlciBpcwogICAgICAvLyBiYXNlZCBvbiB0aGUgYWN0dWFsIGFyZ3VtZW50cy4KICAgICAgLy8KICAgICAgLy8gV2l0aCAtLXRydXN0LXR5cGUtYW5ub3RhdGlvbnMgb3IgLS1vbWl0LWltcGxpY2l0LWNoZWNrcyB3ZSBfZG9fIHRydXN0CiAgICAgIC8vIHRoZSBhcmd1bWVudHMgcGFzc2VkIHRvIGEgcGFyYW1ldGVyIC0gYW5kIHdlIG5ldmVyIGNoZWNrIHRoZW0uCiAgICAgIC8vCiAgICAgIC8vIEluIGFsbCB0aGVzZSBjYXNlcyB3ZSBfZG9fIHRydXN0IHRoZSBzdGF0aWMgdHlwZSBvZiBhIHBhcmFtZXRlciB3aXRoaW4KICAgICAgLy8gdGhlIG1ldGhvZCBpdHNlbGYuIEZvciBpbnN0YW5jZToKICAgICAgLy8KICAgICAgLy8gICAgIG1ldGhvZChpbnQgaSkgPT4gaTsKICAgICAgLy8gICAgIG1haW4oKSB7CiAgICAgIC8vICAgICAgIGR5bmFtaWMgZiA9IG1ldGhvZDsKICAgICAgLy8gICAgICAgZigwKTsgLy8gdmFsaWQgY2FsbAogICAgICAvLyAgICAgICBmKCcnKTsgLy8gaW52YWxpZCBjYWxsCiAgICAgIC8vICAgICB9CiAgICAgIC8vCiAgICAgIC8vIEhlcmUsIGluIGFsbCBjYXNlcywgd2UgaW5mZXIgdGhlIHJldHVybmVkIHZhbHVlIG9mIGBtZXRob2RgIHRvIGJlIGFuCiAgICAgIC8vIGBpbnRgLiBJbiBjaGVja2VkIGFuZCBzdHJvbmcgbW9kZSB3ZSBpbmZlciB0aGUgcGFyYW1ldGVyIG9mIGBtZXRob2RgIHRvCiAgICAgIC8vIGJlIGVpdGhlciBgaW50YCBvciBgU3RyaW5nYCBhbmQgdGhlcmVmb3JlIGluc2VydCBhIGNoZWNrIGF0IHRoZSBlbnRyeQogICAgICAvLyBvZiAnbWV0aG9kJy4gV2l0aCAtLXRydXN0LXR5cGUtYW5ub3RhdGlvbnMgb3IgLS1vbWl0LWltcGxpY2l0LWNoZWNrcyB3ZQogICAgICAvLyAodW5zb3VuZGx5KSBpbmZlciB0aGUgcGFyYW1ldGVyIHRvIGJlIGBpbnRgIGFuZCBsZWF2ZSB0aGUgcGFyYW1ldGVyCiAgICAgIC8vIHVuY2hlY2tlZCwgYW5kIGBtZXRob2RgIHdpbGwgYXQgcnVudGltZSBhY3R1YWxseSByZXR1cm4gYSBgU3RyaW5nYCBmcm9tCiAgICAgIC8vIHRoZSBzZWNvbmQgaW52b2NhdGlvbi4KICAgICAgLy8KICAgICAgLy8gVGhlIHRydXN0aW5nIG9mIHRoZSBwYXJhbWV0ZXIgdHlwZXMgd2l0aGluIHRoZSBib2R5IG9mIHRoZSBtZXRob2QgaXMKICAgICAgLy8gaXMgZG9uZSB0aHJvdWdoIGBMb2NhbHNIYW5kbGVyLnVwZGF0ZWAgY2FsbGVkIGluCiAgICAgIC8vIGBLZXJuZWxUeXBlR3JhcGhCdWlsZGVyLmhhbmRsZVBhcmFtZXRlcmAuCiAgICAgIHJldHVybiBfbmFycm93VHlwZShpbmZlcnJlci5jbG9zZWRXb3JsZCwgbWFzaywgX3R5cGUpOwogICAgfQogICAgcmV0dXJuIG1hc2s7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBBYnN0cmFjdFZhbHVlIHNwZWNpYWwgPSBoYW5kbGVTcGVjaWFsQ2FzZXMoaW5mZXJyZXIpOwogICAgaWYgKHNwZWNpYWwgIT0gbnVsbCkgcmV0dXJuIHNwZWNpYWw7CiAgICByZXR1cm4gcG90ZW50aWFsbHlOYXJyb3dUeXBlKAogICAgICAgIGluZmVycmVyLnR5cGVzLmNvbXB1dGVUeXBlTWFzayhhc3NpZ25tZW50cyksIGluZmVycmVyKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgc2FmZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBwb3RlbnRpYWxseU5hcnJvd1R5cGUoc3VwZXIuc2FmZVR5cGUoaW5mZXJyZXIpLCBpbmZlcnJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIC8vIFRoZSBudW1iZXIgb2YgYXNzaWdubWVudHMgb2YgcGFyYW1ldGVycyBvZiBpbnN0YW5jZSBtZXRob2RzIGlzCiAgICAvLyBub3Qgc3RhYmxlLiBUaGVyZWZvcmUgc3VjaCBhIHBhcmFtZXRlciBjYW5ub3QgYmUgc3RhYmxlLgogICAgaWYgKF9pc0luc3RhbmNlTWVtYmVyUGFyYW1ldGVyKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiBzdXBlci5oYXNTdGFibGVUeXBlKGluZmVycmVyKTsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0UGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1BhcmFtZXRlciAkX3BhcmFtZXRlciAkdHlwZSc7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXRJbmZlcnJlZFNpZ25hdHVyZShUeXBlU3lzdGVtIHR5cGVzKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uLmdldEluZmVycmVkU2lnbmF0dXJlJyk7CiAgfQp9CgplbnVtIENhbGxUeXBlIHsKICBhY2Nlc3MsCiAgZm9ySW4sCn0KCmJvb2wgdmFsaWRDYWxsVHlwZShDYWxsVHlwZSBjYWxsVHlwZSwgT2JqZWN0IGNhbGwpIHsKICBzd2l0Y2ggKGNhbGxUeXBlKSB7CiAgICBjYXNlIENhbGxUeXBlLmFjY2VzczoKICAgICAgcmV0dXJuIGNhbGwgaXMgaXIuTm9kZTsKICAgIGNhc2UgQ2FsbFR5cGUuZm9ySW46CiAgICAgIHJldHVybiBjYWxsIGlzIGlyLkZvckluU3RhdGVtZW50OwogIH0KICB0aHJvdyBuZXcgU3RhdGVFcnJvcignVW5leHBlY3RlZCBjYWxsIHR5cGUgJGNhbGxUeXBlLicpOwp9CgovLy8gQSBbQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb25dIGlzIGEgY2FsbCBmb3VuZCBpbiB0aGUgQVNULCBvciBhCi8vLyBzeW50aGVzaXplZCBjYWxsIGZvciBpbXBsaWNpdCBjYWxscyBpbiBEYXJ0IChzdWNoIGFzIGZvcndhcmRpbmcKLy8vIGZhY3RvcmllcykuIFRoZSBbX2NhbGxdIGZpZWxkIGlzIGEgW2FzdC5Ob2RlXSBmb3IgdGhlIGZvcm1lciwgYW5kIGFuCi8vLyBbRWxlbWVudF0gZm9yIHRoZSBsYXR0ZXIuCi8vLwovLy8gSW4gdGhlIGluZmVycmVyIGdyYXBoLCBbQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb25dIG5vZGVzIGRvIG5vdCBoYXZlCi8vLyBhbnkgYXNzaWdubWVudC4gVGhleSByZWx5IG9uIHRoZSBbY2FsbGVyXSBmaWVsZCBmb3Igc3RhdGljIGNhbGxzLAovLy8gYW5kIFtzZWxlY3Rvcl0gYW5kIFtyZWNlaXZlcl0gZmllbGRzIGZvciBkeW5hbWljIGNhbGxzLgphYnN0cmFjdCBjbGFzcyBDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIFR5cGVJbmZvcm1hdGlvbgogICAgd2l0aCBBcHBseWFibGVUeXBlSW5mb3JtYXRpb24gewogIGZpbmFsIE9iamVjdCBfY2FsbDsKICBmaW5hbCBNZW1iZXJFbnRpdHkgY2FsbGVyOwogIGZpbmFsIFNlbGVjdG9yIHNlbGVjdG9yOwogIGZpbmFsIEFic3RyYWN0VmFsdWUgbWFzazsKICBmaW5hbCBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHM7CiAgZmluYWwgYm9vbCBpbkxvb3A7CgogIENhbGxTaXRlVHlwZUluZm9ybWF0aW9uKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LAogICAgICB0aGlzLl9jYWxsLAogICAgICB0aGlzLmNhbGxlciwKICAgICAgdGhpcy5zZWxlY3RvciwKICAgICAgdGhpcy5tYXNrLAogICAgICB0aGlzLmFyZ3VtZW50cywKICAgICAgdGhpcy5pbkxvb3ApCiAgICAgIDogc3VwZXIubm9Bc3NpZ25tZW50cyhhYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZSwgY29udGV4dCkgewogICAgYXNzZXJ0KF9jYWxsIGlzIGlyLk5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0NhbGwgc2l0ZSAkZGVidWdOYW1lICR0eXBlJzsKCiAgLy8vIEFkZCBbdGhpc10gdG8gdGhlIGdyYXBoIGJlaW5nIGNvbXB1dGVkIGJ5IFtlbmdpbmVdLgogIHZvaWQgYWRkVG9HcmFwaChJbmZlcnJlckVuZ2luZSBlbmdpbmUpOwoKICAvLy8gUmV0dXJuIGFuIGl0ZXJhYmxlIG92ZXIgdGhlIHRhcmdldHMgb2YgdGhpcyBjYWxsLgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IGNhbGxlZXM7CgogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICckX2NhbGwnOwp9CgpjbGFzcyBTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIENhbGxTaXRlVHlwZUluZm9ybWF0aW9uIHsKICBmaW5hbCBNZW1iZXJFbnRpdHkgY2FsbGVkRWxlbWVudDsKCiAgU3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsCiAgICAgIE9iamVjdCBjYWxsLAogICAgICBNZW1iZXJFbnRpdHkgZW5jbG9zaW5nLAogICAgICB0aGlzLmNhbGxlZEVsZW1lbnQsCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssCiAgICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cywKICAgICAgYm9vbCBpbkxvb3ApCiAgICAgIDogc3VwZXIoYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29udGV4dCwgY2FsbCwgZW5jbG9zaW5nLCBzZWxlY3RvciwgbWFzaywKICAgICAgICAgICAgYXJndW1lbnRzLCBpbkxvb3ApOwoKICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gX2dldENhbGxlZFR5cGVJbmZvKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gaW5mZXJyZXIudHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoY2FsbGVkRWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFRvR3JhcGgoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjYWxsZWUgPSBfZ2V0Q2FsbGVkVHlwZUluZm8oaW5mZXJyZXIpOwogICAgY2FsbGVlLmFkZENhbGwoY2FsbGVyLCBfY2FsbCk7CiAgICBjYWxsZWUuYWRkVXNlcih0aGlzKTsKICAgIGlmIChhcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBhcmd1bWVudHMuZm9yRWFjaCgoaW5mbykgPT4gaW5mby5hZGRVc2VyKHRoaXMpKTsKICAgIH0KICAgIGluZmVycmVyLnVwZGF0ZVBhcmFtZXRlckFzc2lnbm1lbnRzKAogICAgICAgIHRoaXMsIGNhbGxlZEVsZW1lbnQsIGFyZ3VtZW50cywgc2VsZWN0b3IsIG1hc2ssCiAgICAgICAgcmVtb3ZlOiBmYWxzZSwgYWRkVG9RdWV1ZTogZmFsc2UpOwogIH0KCiAgYm9vbCBnZXQgaXNTeW50aGVzaXplZCB7CiAgICAvLyBTb21lIGNhbGxzIGRvIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBzZWxlY3RvciwgZm9yIGV4YW1wbGUKICAgIC8vIGZvcndhcmRpbmcgZmFjdG9yeSBjb25zdHJ1Y3RvcnMsIG9yIHN5bnRoZXNpemVkIHN1cGVyCiAgICAvLyBjb25zdHJ1Y3RvciBjYWxscy4gV2Ugc3ludGhlc2l6ZSB0aGVzZSBjYWxscyBidXQgZG8KICAgIC8vIG5vdCBjcmVhdGUgYSBzZWxlY3RvciBmb3IgdGhlbS4KICAgIHJldHVybiBzZWxlY3RvciA9PSBudWxsOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIF9nZXRDYWxsZWRUeXBlSW5mb1dpdGhTZWxlY3RvcihJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLnR5cGVPZk1lbWJlcldpdGhTZWxlY3RvcihjYWxsZWRFbGVtZW50LCBzZWxlY3Rvcik7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBpZiAoaXNTeW50aGVzaXplZCkgewogICAgICBhc3NlcnQoYXJndW1lbnRzICE9IG51bGwpOwogICAgICByZXR1cm4gX2dldENhbGxlZFR5cGVJbmZvKGluZmVycmVyKS50eXBlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9nZXRDYWxsZWRUeXBlSW5mb1dpdGhTZWxlY3RvcihpbmZlcnJlcikudHlwZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IGNhbGxlZXMgPT4gW2NhbGxlZEVsZW1lbnRdOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNTdGFibGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBib29sIGlzU3RhYmxlID0gX2dldENhbGxlZFR5cGVJbmZvKGluZmVycmVyKS5pc1N0YWJsZTsKICAgIHJldHVybiBpc1N0YWJsZSAmJgogICAgICAgIChhcmd1bWVudHMgPT0gbnVsbCB8fCBhcmd1bWVudHMuZXZlcnkoKGluZm8pID0+IGluZm8uaXNTdGFibGUpKSAmJgogICAgICAgIHN1cGVyLmhhc1N0YWJsZVR5cGUoaW5mZXJyZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVBbmRDbGVhclJlZmVyZW5jZXMoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIEVsZW1lbnRUeXBlSW5mb3JtYXRpb24gY2FsbGVlID0gX2dldENhbGxlZFR5cGVJbmZvKGluZmVycmVyKTsKICAgIGNhbGxlZS5yZW1vdmVVc2VyKHRoaXMpOwogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGFyZ3VtZW50cy5mb3JFYWNoKChpbmZvKSA9PiBpbmZvLnJlbW92ZVVzZXIodGhpcykpOwogICAgfQogICAgc3VwZXIucmVtb3ZlQW5kQ2xlYXJSZWZlcmVuY2VzKGluZmVycmVyKTsKICB9Cn0KCmNsYXNzIER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbjxUPiBleHRlbmRzIENhbGxTaXRlVHlwZUluZm9ybWF0aW9uIHsKICBmaW5hbCBDYWxsVHlwZSBfY2FsbFR5cGU7CiAgZmluYWwgVHlwZUluZm9ybWF0aW9uIHJlY2VpdmVyOwogIGZpbmFsIGJvb2wgaXNDb25kaXRpb25hbDsKICBib29sIF9oYXNDbG9zdXJlQ2FsbFRhcmdldHM7CgogIC8vLyBDYWNoZWQgY29uY3JldGUgdGFyZ2V0cyBvZiB0aGlzIGNhbGwuCiAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBfY29uY3JldGVUYXJnZXRzOwoKICBEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsCiAgICAgIHRoaXMuX2NhbGxUeXBlLAogICAgICBUIGNhbGwsCiAgICAgIE1lbWJlckVudGl0eSBlbmNsb3NpbmcsCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssCiAgICAgIHRoaXMucmVjZWl2ZXIsCiAgICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cywKICAgICAgYm9vbCBpbkxvb3AsCiAgICAgIHRoaXMuaXNDb25kaXRpb25hbCkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLCBjb250ZXh0LCBjYWxsLCBlbmNsb3NpbmcsIHNlbGVjdG9yLCBtYXNrLAogICAgICAgICAgICBhcmd1bWVudHMsIGluTG9vcCkgewogICAgYXNzZXJ0KHZhbGlkQ2FsbFR5cGUoX2NhbGxUeXBlLCBfY2FsbCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRUb0dyYXBoKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBhc3NlcnQocmVjZWl2ZXIgIT0gbnVsbCk7CiAgICBBYnN0cmFjdFZhbHVlIHR5cGVNYXNrID0gY29tcHV0ZVR5cGVkU2VsZWN0b3IoaW5mZXJyZXIpOwogICAgX2hhc0Nsb3N1cmVDYWxsVGFyZ2V0cyA9CiAgICAgICAgaW5mZXJyZXIuY2xvc2VkV29ybGQuaW5jbHVkZXNDbG9zdXJlQ2FsbChzZWxlY3RvciwgdHlwZU1hc2spOwogICAgX2NvbmNyZXRlVGFyZ2V0cyA9IGluZmVycmVyLmNsb3NlZFdvcmxkLmxvY2F0ZU1lbWJlcnMoc2VsZWN0b3IsIHR5cGVNYXNrKTsKICAgIHJlY2VpdmVyLmFkZFVzZXIodGhpcyk7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXJndW1lbnRzLmZvckVhY2goKGluZm8pID0+IGluZm8uYWRkVXNlcih0aGlzKSk7CiAgICB9CiAgICBmb3IgKE1lbWJlckVudGl0eSBlbGVtZW50IGluIF9jb25jcmV0ZVRhcmdldHMpIHsKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNhbGxlZSA9CiAgICAgICAgICBpbmZlcnJlci50eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihlbGVtZW50KTsKICAgICAgY2FsbGVlLmFkZENhbGwoY2FsbGVyLCBfY2FsbCk7CiAgICAgIGNhbGxlZS5hZGRVc2VyKHRoaXMpOwogICAgICBpbmZlcnJlci51cGRhdGVQYXJhbWV0ZXJBc3NpZ25tZW50cygKICAgICAgICAgIHRoaXMsIGVsZW1lbnQsIGFyZ3VtZW50cywgc2VsZWN0b3IsIHR5cGVNYXNrLAogICAgICAgICAgcmVtb3ZlOiBmYWxzZSwgYWRkVG9RdWV1ZTogZmFsc2UpOwogICAgfQogIH0KCiAgLy8vIGB0cnVlYCBpZiB0aGlzIGludm9jYXRpb24gY2FuIGhpdCBhICdjYWxsJyBtZXRob2Qgb24gYSBjbG9zdXJlLgogIGJvb2wgZ2V0IGhhc0Nsb3N1cmVDYWxsVGFyZ2V0cyA9PiBfaGFzQ2xvc3VyZUNhbGxUYXJnZXRzOwoKICAvLy8gQWxsIGNvbmNyZXRlIHRhcmdldHMgb2YgdGhpcyBpbnZvY2F0aW9uLiBJZiBbaGFzQ2xvc3VyZUNhbGxUYXJnZXRzXSBpcwogIC8vLyBgdHJ1ZWAgdGhlIGludm9jYXRpb24gY2FuIGFkZGl0aW9uYWwgdGFyZ2V0IGFuIHVua25vd24gc2V0IG9mICdjYWxsJwogIC8vLyBtZXRob2RzIG9uIGNsb3N1cmVzLgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IGNvbmNyZXRlVGFyZ2V0cyA9PiBfY29uY3JldGVUYXJnZXRzOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGdldCBjYWxsZWVzID0+IF9jb25jcmV0ZVRhcmdldHM7CgogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVkU2VsZWN0b3IoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlID0gcmVjZWl2ZXIudHlwZTsKCiAgICBpZiAobWFzayAhPSByZWNlaXZlclR5cGUpIHsKICAgICAgcmV0dXJuIHJlY2VpdmVyVHlwZSA9PSBpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlCiAgICAgICAgICA/IG51bGwKICAgICAgICAgIDogcmVjZWl2ZXJUeXBlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG1hc2s7CiAgICB9CiAgfQoKICBib29sIHRhcmdldHNJbmNsdWRlQ29tcGxleE5vU3VjaE1ldGhvZChJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIF9jb25jcmV0ZVRhcmdldHMuYW55KChNZW1iZXJFbnRpdHkgZSkgewogICAgICByZXR1cm4gZS5pc0Z1bmN0aW9uICYmCiAgICAgICAgICBlLmlzSW5zdGFuY2VNZW1iZXIgJiYKICAgICAgICAgIGUubmFtZSA9PSBJZGVudGlmaWVycy5ub1N1Y2hNZXRob2RfICYmCiAgICAgICAgICBpbmZlcnJlci5ub1N1Y2hNZXRob2REYXRhLmlzQ29tcGxleChlKTsKICAgIH0pOwogIH0KCiAgLy8vIFdlIG9wdGltaXplIGNlcnRhaW4gb3BlcmF0aW9ucyBvbiB0aGUgW2ludF0gY2xhc3MgYmVjYXVzZSB3ZSBrbm93IG1vcmUKICAvLy8gYWJvdXQgdGhlaXIgcmV0dXJuIHR5cGUgdGhhbiB0aGUgYWN0dWFsIERhcnQgY29kZS4gRm9yIGV4YW1wbGUsIHdlIGtub3cKICAvLy8gaW50ICsgaW50IHJldHVybnMgYW4gaW50LiBUaGUgRGFydCBsaWJyYXJ5IGNvZGUgZm9yIFtpbnQub3BlcmF0b3IrXSBvbmx5CiAgLy8vIHNheXMgaXQgcmV0dXJucyBhIFtudW1dLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSBtb3JlIHByZWNpc2UgVHlwZUluZm9ybWF0aW9uLCBvciBgbnVsbGAgdG8gZGVmZXIgdG8gdGhlCiAgLy8vIGxpYnJhcnkgY29kZS4KICBUeXBlSW5mb3JtYXRpb24gaGFuZGxlSW50cmlzaWZpZWRTZWxlY3RvcigKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgbWFzaywgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCA9IGluZmVycmVyLmNsb3NlZFdvcmxkOwogICAgaWYgKG1hc2sgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0ludGVnZXJPck51bGwobWFzaykuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKCFzZWxlY3Rvci5pc0NhbGwgJiYgIXNlbGVjdG9yLmlzT3BlcmF0b3IpIHJldHVybiBudWxsOwogICAgaWYgKCFhcmd1bWVudHMubmFtZWQuaXNFbXB0eSkgcmV0dXJuIG51bGw7CiAgICBpZiAoYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoID4gMSkgcmV0dXJuIG51bGw7CgogICAgQ2xhc3NFbnRpdHkgdWludDMxSW1wbGVtZW50YXRpb24gPSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5qc1VJbnQzMUNsYXNzOwogICAgYm9vbCBpc0ludChpbmZvKSA9PiBpbmZvLnR5cGUuY29udGFpbnNPbmx5SW50KGNsb3NlZFdvcmxkKTsKICAgIGJvb2wgaXNFbXB0eShpbmZvKSA9PiBpbmZvLnR5cGUuaXNFbXB0eTsKICAgIGJvb2wgaXNVSW50MzEoaW5mbykgewogICAgICByZXR1cm4gaW5mby50eXBlLnNhdGlzZmllcyh1aW50MzFJbXBsZW1lbnRhdGlvbiwgY2xvc2VkV29ybGQpOwogICAgfQoKICAgIGJvb2wgaXNQb3NpdGl2ZUludChpbmZvKSB7CiAgICAgIHJldHVybiBpbmZvLnR5cGUuc2F0aXNmaWVzKAogICAgICAgICAgY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuanNQb3NpdGl2ZUludENsYXNzLCBjbG9zZWRXb3JsZCk7CiAgICB9CgogICAgVHlwZUluZm9ybWF0aW9uIHRyeUxhdGVyKCkgPT4gaW5mZXJyZXIudHlwZXMubm9uTnVsbEVtcHR5VHlwZTsKCiAgICBUeXBlSW5mb3JtYXRpb24gYXJndW1lbnQgPQogICAgICAgIGFyZ3VtZW50cy5pc0VtcHR5ID8gbnVsbCA6IGFyZ3VtZW50cy5wb3NpdGlvbmFsLmZpcnN0OwoKICAgIFN0cmluZyBuYW1lID0gc2VsZWN0b3IubmFtZTsKICAgIC8vIFRoZXNlIGFyZSB0eXBlIGluZmVyZW5jZSBydWxlcyBvbmx5IGZvciB1c2VmdWwgY2FzZXMgdGhhdCBhcmUgbm90CiAgICAvLyBleHByZXNzZWQgaW4gdGhlIGxpYnJhcnkgY29kZSwgZm9yIGV4YW1wbGU6CiAgICAvLwogICAgLy8gICAgIGludCArIGludCAgICAgICAgLT4gIGludAogICAgLy8gICAgIHVpbnQzMSB8IHVpbnQzMSAgLT4gIHVpbnQzMQogICAgLy8KICAgIHN3aXRjaCAobmFtZSkgewogICAgICBjYXNlICcqJzoKICAgICAgY2FzZSAnKyc6CiAgICAgIGNhc2UgJyUnOgogICAgICBjYXNlICdyZW1haW5kZXInOgogICAgICBjYXNlICd+Lyc6CiAgICAgICAgaWYgKGlzRW1wdHkoYXJndW1lbnQpKSByZXR1cm4gdHJ5TGF0ZXIoKTsKICAgICAgICBpZiAoaXNQb3NpdGl2ZUludChyZWNlaXZlcikgJiYgaXNQb3NpdGl2ZUludChhcmd1bWVudCkpIHsKICAgICAgICAgIC8vIHVpbnQzMSArIHVpbnQzMSAtPiB1aW50MzIKICAgICAgICAgIGlmIChuYW1lID09ICcrJyAmJiBpc1VJbnQzMShyZWNlaXZlcikgJiYgaXNVSW50MzEoYXJndW1lbnQpKSB7CiAgICAgICAgICAgIHJldHVybiBpbmZlcnJlci50eXBlcy51aW50MzJUeXBlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLnBvc2l0aXZlSW50VHlwZTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzSW50KGFyZ3VtZW50KSkgewogICAgICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLmludFR5cGU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwoKICAgICAgY2FzZSAnfCc6CiAgICAgIGNhc2UgJ14nOgogICAgICAgIGlmIChpc0VtcHR5KGFyZ3VtZW50KSkgcmV0dXJuIHRyeUxhdGVyKCk7CiAgICAgICAgaWYgKGlzVUludDMxKHJlY2VpdmVyKSAmJiBpc1VJbnQzMShhcmd1bWVudCkpIHsKICAgICAgICAgIHJldHVybiBpbmZlcnJlci50eXBlcy51aW50MzFUeXBlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKCiAgICAgIGNhc2UgJz4+JzoKICAgICAgICBpZiAoaXNFbXB0eShhcmd1bWVudCkpIHJldHVybiB0cnlMYXRlcigpOwogICAgICAgIGlmIChpc1VJbnQzMShyZWNlaXZlcikpIHsKICAgICAgICAgIHJldHVybiBpbmZlcnJlci50eXBlcy51aW50MzFUeXBlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKCiAgICAgIGNhc2UgJyYnOgogICAgICAgIGlmIChpc0VtcHR5KGFyZ3VtZW50KSkgcmV0dXJuIHRyeUxhdGVyKCk7CiAgICAgICAgaWYgKGlzVUludDMxKHJlY2VpdmVyKSB8fCBpc1VJbnQzMShhcmd1bWVudCkpIHsKICAgICAgICAgIHJldHVybiBpbmZlcnJlci50eXBlcy51aW50MzFUeXBlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKCiAgICAgIGNhc2UgJy0nOgogICAgICAgIGlmIChpc0VtcHR5KGFyZ3VtZW50KSkgcmV0dXJuIHRyeUxhdGVyKCk7CiAgICAgICAgaWYgKGlzSW50KGFyZ3VtZW50KSkgewogICAgICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLmludFR5cGU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBudWxsOwoKICAgICAgY2FzZSAndW5hcnktJzoKICAgICAgICAvLyBUaGUgcmVjZWl2ZXIgYmVpbmcgYW4gaW50LCB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYWxzbyBiZSBhbiBpbnQuCiAgICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLmludFR5cGU7CgogICAgICBjYXNlICdhYnMnOgogICAgICAgIHJldHVybiBhcmd1bWVudHMuaGFzTm9Bcmd1bWVudHMoKQogICAgICAgICAgICA/IGluZmVycmVyLnR5cGVzLnBvc2l0aXZlSW50VHlwZQogICAgICAgICAgICA6IG51bGw7CgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkID0gaW5mZXJyZXIuY2xvc2VkV29ybGQ7CiAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBvbGRUYXJnZXRzID0gX2NvbmNyZXRlVGFyZ2V0czsKICAgIEFic3RyYWN0VmFsdWUgdHlwZU1hc2sgPSBjb21wdXRlVHlwZWRTZWxlY3RvcihpbmZlcnJlcik7CiAgICBpbmZlcnJlci51cGRhdGVTZWxlY3RvckluTWVtYmVyKAogICAgICAgIGNhbGxlciwgX2NhbGxUeXBlLCBfY2FsbCwgc2VsZWN0b3IsIHR5cGVNYXNrKTsKCiAgICBfaGFzQ2xvc3VyZUNhbGxUYXJnZXRzID0KICAgICAgICBjbG9zZWRXb3JsZC5pbmNsdWRlc0Nsb3N1cmVDYWxsKHNlbGVjdG9yLCB0eXBlTWFzayk7CiAgICBfY29uY3JldGVUYXJnZXRzID0gY2xvc2VkV29ybGQubG9jYXRlTWVtYmVycyhzZWxlY3RvciwgdHlwZU1hc2spOwoKICAgIC8vIFVwZGF0ZSB0aGUgY2FsbCBncmFwaCBpZiB0aGUgdGFyZ2V0cyBjb3VsZCBoYXZlIGNoYW5nZWQuCiAgICBpZiAoIWlkZW50aWNhbChfY29uY3JldGVUYXJnZXRzLCBvbGRUYXJnZXRzKSkgewogICAgICAvLyBBZGQgY2FsbHMgdG8gbmV3IHRhcmdldHMgdG8gdGhlIGdyYXBoLgogICAgICBfY29uY3JldGVUYXJnZXRzCiAgICAgICAgICAud2hlcmUoKHRhcmdldCkgPT4gIW9sZFRhcmdldHMuY29udGFpbnModGFyZ2V0KSkKICAgICAgICAgIC5mb3JFYWNoKChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjYWxsZWUgPQogICAgICAgICAgICBpbmZlcnJlci50eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihlbGVtZW50KTsKICAgICAgICBjYWxsZWUuYWRkQ2FsbChjYWxsZXIsIF9jYWxsKTsKICAgICAgICBjYWxsZWUuYWRkVXNlcih0aGlzKTsKICAgICAgICBpbmZlcnJlci51cGRhdGVQYXJhbWV0ZXJBc3NpZ25tZW50cygKICAgICAgICAgICAgdGhpcywgZWxlbWVudCwgYXJndW1lbnRzLCBzZWxlY3RvciwgdHlwZU1hc2ssCiAgICAgICAgICAgIHJlbW92ZTogZmFsc2UsIGFkZFRvUXVldWU6IHRydWUpOwogICAgICB9KTsKCiAgICAgIC8vIFdhbGsgb3ZlciB0aGUgb2xkIHRhcmdldHMsIGFuZCByZW1vdmUgY2FsbHMgdGhhdCBjYW5ub3QgaGFwcGVuIGFueW1vcmUuCiAgICAgIG9sZFRhcmdldHMKICAgICAgICAgIC53aGVyZSgodGFyZ2V0KSA9PiAhX2NvbmNyZXRlVGFyZ2V0cy5jb250YWlucyh0YXJnZXQpKQogICAgICAgICAgLmZvckVhY2goKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNhbGxlZSA9CiAgICAgICAgICAgIGluZmVycmVyLnR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVsZW1lbnQpOwogICAgICAgIGNhbGxlZS5yZW1vdmVDYWxsKGNhbGxlciwgX2NhbGwpOwogICAgICAgIGNhbGxlZS5yZW1vdmVVc2VyKHRoaXMpOwogICAgICAgIGluZmVycmVyLnVwZGF0ZVBhcmFtZXRlckFzc2lnbm1lbnRzKAogICAgICAgICAgICB0aGlzLCBlbGVtZW50LCBhcmd1bWVudHMsIHNlbGVjdG9yLCB0eXBlTWFzaywKICAgICAgICAgICAgcmVtb3ZlOiB0cnVlLCBhZGRUb1F1ZXVlOiB0cnVlKTsKICAgICAgfSk7CiAgICB9CgogICAgLy8gV2FsayBvdmVyIHRoZSBmb3VuZCB0YXJnZXRzLCBhbmQgY29tcHV0ZSB0aGUgam9pbmVkIHVuaW9uIHR5cGUgbWFzawogICAgLy8gZm9yIGFsbCB0aGVzZSB0YXJnZXRzLgogICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQ7CiAgICBpZiAoX2hhc0Nsb3N1cmVDYWxsVGFyZ2V0cykgewogICAgICByZXN1bHQgPSBhYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0ID0gaW5mZXJyZXIudHlwZXMKICAgICAgICAgIC5qb2luVHlwZU1hc2tzKF9jb25jcmV0ZVRhcmdldHMubWFwKChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgICAgIGlmIChpbmZlcnJlci5yZXR1cm5zTGlzdEVsZW1lbnRUeXBlKHNlbGVjdG9yLCB0eXBlTWFzaykpIHsKICAgICAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmdldENvbnRhaW5lckVsZW1lbnRUeXBlKHJlY2VpdmVyLnR5cGUpOwogICAgICAgIH0gZWxzZSBpZiAoaW5mZXJyZXIucmV0dXJuc01hcFZhbHVlVHlwZShzZWxlY3RvciwgdHlwZU1hc2spKSB7CiAgICAgICAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0RpY3Rpb25hcnkodHlwZU1hc2spKSB7CiAgICAgICAgICAgIEFic3RyYWN0VmFsdWUgYXJnID0gYXJndW1lbnRzLnBvc2l0aW9uYWxbMF0udHlwZTsKICAgICAgICAgICAgQ29uc3RhbnRWYWx1ZSB2YWx1ZSA9IGFic3RyYWN0VmFsdWVEb21haW4uZ2V0UHJpbWl0aXZlVmFsdWUoYXJnKTsKICAgICAgICAgICAgaWYgKHZhbHVlIGlzIFN0cmluZ0NvbnN0YW50VmFsdWUpIHsKICAgICAgICAgICAgICBTdHJpbmcga2V5ID0gdmFsdWUuc3RyaW5nVmFsdWU7CiAgICAgICAgICAgICAgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uY29udGFpbnNEaWN0aW9uYXJ5S2V5KHR5cGVNYXNrLCBrZXkpKSB7CiAgICAgICAgICAgICAgICBpZiAoZGVidWcuVkVSQk9TRSkgewogICAgICAgICAgICAgICAgICBwcmludCgiRGljdGlvbmFyeSBsb29rdXAgZm9yICRrZXkgeWllbGRzICIKICAgICAgICAgICAgICAgICAgICAgICIke2Fic3RyYWN0VmFsdWVEb21haW4uZ2V0RGljdGlvbmFyeVZhbHVlRm9yS2V5KHR5cGVNYXNrLCBrZXkpfS4iKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmdldERpY3Rpb25hcnlWYWx1ZUZvcktleSgKICAgICAgICAgICAgICAgICAgICB0eXBlTWFzaywga2V5KTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gVGhlIHR5cGVNYXAgaXMgcHJlY2lzZSwgc28gaWYgd2UgZG8gbm90IGZpbmQgdGhlIGtleSwgdGhlCiAgICAgICAgICAgICAgICAvLyBsb29rdXAgd2lsbCBiZSBbbnVsbF0gYXQgcnVudGltZS4KICAgICAgICAgICAgICAgIGlmIChkZWJ1Zy5WRVJCT1NFKSB7CiAgICAgICAgICAgICAgICAgIHByaW50KCJEaWN0aW9uYXJ5IGxvb2t1cCBmb3IgJGtleSB5aWVsZHMgW251bGxdLiIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLm51bGxUeXBlLnR5cGU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBhc3NlcnQoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc01hcCh0eXBlTWFzaykpOwogICAgICAgICAgaWYgKGRlYnVnLlZFUkJPU0UpIHsKICAgICAgICAgICAgcHJpbnQoIk1hcCBsb29rdXAgZm9yICRzZWxlY3RvciB5aWVsZHMgIgogICAgICAgICAgICAgICAgIiR7YWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRNYXBWYWx1ZVR5cGUodHlwZU1hc2spfS4iKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmdldE1hcFZhbHVlVHlwZSh0eXBlTWFzayk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIFR5cGVJbmZvcm1hdGlvbiBpbmZvID0KICAgICAgICAgICAgICBoYW5kbGVJbnRyaXNpZmllZFNlbGVjdG9yKHNlbGVjdG9yLCB0eXBlTWFzaywgaW5mZXJyZXIpOwogICAgICAgICAgaWYgKGluZm8gIT0gbnVsbCkgcmV0dXJuIGluZm8udHlwZTsKICAgICAgICAgIHJldHVybiBpbmZlcnJlci50eXBlT2ZNZW1iZXJXaXRoU2VsZWN0b3IoZWxlbWVudCwgc2VsZWN0b3IpLnR5cGU7CiAgICAgICAgfQogICAgICB9KSk7CiAgICB9CiAgICBpZiAoaXNDb25kaXRpb25hbCAmJgogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKHJlY2VpdmVyLnR5cGUpLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgIC8vIENvbmRpdGlvbmFsIGNhbGwgc2l0ZXMgKGUuZy4gYGE/LmJgKSBtYXkgYmUgbnVsbCBpZiB0aGUgcmVjZWl2ZXIgaXMKICAgICAgLy8gbnVsbC4KICAgICAgcmVzdWx0ID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5pbmNsdWRlTnVsbChyZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZ2l2ZVVwKEluZmVycmVyRW5naW5lIGluZmVycmVyLCB7Ym9vbCBjbGVhckFzc2lnbm1lbnRzOiB0cnVlfSkgewogICAgaWYgKCFhYmFuZG9uSW5mZXJlbmNpbmcpIHsKICAgICAgaW5mZXJyZXIudXBkYXRlU2VsZWN0b3JJbk1lbWJlcihjYWxsZXIsIF9jYWxsVHlwZSwgX2NhbGwsIHNlbGVjdG9yLCBtYXNrKTsKICAgICAgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBvbGRUYXJnZXRzID0gX2NvbmNyZXRlVGFyZ2V0czsKICAgICAgX2hhc0Nsb3N1cmVDYWxsVGFyZ2V0cyA9CiAgICAgICAgICBpbmZlcnJlci5jbG9zZWRXb3JsZC5pbmNsdWRlc0Nsb3N1cmVDYWxsKHNlbGVjdG9yLCBtYXNrKTsKICAgICAgX2NvbmNyZXRlVGFyZ2V0cyA9IGluZmVycmVyLmNsb3NlZFdvcmxkLmxvY2F0ZU1lbWJlcnMoc2VsZWN0b3IsIG1hc2spOwogICAgICBmb3IgKE1lbWJlckVudGl0eSBlbGVtZW50IGluIF9jb25jcmV0ZVRhcmdldHMpIHsKICAgICAgICBpZiAoIW9sZFRhcmdldHMuY29udGFpbnMoZWxlbWVudCkpIHsKICAgICAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjYWxsZWUgPQogICAgICAgICAgICAgIGluZmVycmVyLnR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVsZW1lbnQpOwogICAgICAgICAgY2FsbGVlLmFkZENhbGwoY2FsbGVyLCBfY2FsbCk7CiAgICAgICAgICBpbmZlcnJlci51cGRhdGVQYXJhbWV0ZXJBc3NpZ25tZW50cygKICAgICAgICAgICAgICB0aGlzLCBlbGVtZW50LCBhcmd1bWVudHMsIHNlbGVjdG9yLCBtYXNrLAogICAgICAgICAgICAgIHJlbW92ZTogZmFsc2UsIGFkZFRvUXVldWU6IHRydWUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgc3VwZXIuZ2l2ZVVwKGluZmVycmVyLCBjbGVhckFzc2lnbm1lbnRzOiBjbGVhckFzc2lnbm1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlQW5kQ2xlYXJSZWZlcmVuY2VzKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBmb3IgKE1lbWJlckVudGl0eSBlbGVtZW50IGluIF9jb25jcmV0ZVRhcmdldHMpIHsKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNhbGxlZSA9CiAgICAgICAgICBpbmZlcnJlci50eXBlcy5nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihlbGVtZW50KTsKICAgICAgY2FsbGVlLnJlbW92ZVVzZXIodGhpcyk7CiAgICB9CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYXJndW1lbnRzLmZvckVhY2goKGluZm8pID0+IGluZm8ucmVtb3ZlVXNlcih0aGlzKSk7CiAgICB9CiAgICBzdXBlci5yZW1vdmVBbmRDbGVhclJlZmVyZW5jZXMoaW5mZXJyZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0NhbGwgc2l0ZSAkZGVidWdOYW1lIG9uICR7cmVjZWl2ZXIudHlwZX0gJHR5cGUnOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzU3RhYmxlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIHJlY2VpdmVyLmlzU3RhYmxlICYmCiAgICAgICAgX2NvbmNyZXRlVGFyZ2V0cy5ldmVyeSgoTWVtYmVyRW50aXR5IGVsZW1lbnQpID0+CiAgICAgICAgICAgIGluZmVycmVyLnR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVsZW1lbnQpLmlzU3RhYmxlKSAmJgogICAgICAgIChhcmd1bWVudHMgPT0gbnVsbCB8fCBhcmd1bWVudHMuZXZlcnkoKGluZm8pID0+IGluZm8uaXNTdGFibGUpKSAmJgogICAgICAgIHN1cGVyLmhhc1N0YWJsZVR5cGUoaW5mZXJyZXIpOwogIH0KfQoKY2xhc3MgQ2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gewogIGZpbmFsIFR5cGVJbmZvcm1hdGlvbiBjbG9zdXJlOwoKICBDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsCiAgICAgIE9iamVjdCBjYWxsLAogICAgICBNZW1iZXJFbnRpdHkgZW5jbG9zaW5nLAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLAogICAgICB0aGlzLmNsb3N1cmUsCiAgICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cywKICAgICAgYm9vbCBpbkxvb3ApCiAgICAgIDogc3VwZXIoYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29udGV4dCwgY2FsbCwgZW5jbG9zaW5nLCBzZWxlY3RvciwgbWFzaywKICAgICAgICAgICAgYXJndW1lbnRzLCBpbkxvb3ApOwoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZFRvR3JhcGgoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIGFyZ3VtZW50cy5mb3JFYWNoKChpbmZvKSA9PiBpbmZvLmFkZFVzZXIodGhpcykpOwogICAgY2xvc3VyZS5hZGRVc2VyKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgPT4gc2FmZVR5cGUoaW5mZXJyZXIpOwoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGdldCBjYWxsZWVzIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY29tcHV0ZSBjYWxsZWVzIG9mIGEgY2xvc3VyZSBjYWxsLiIpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0Nsb3N1cmUgY2FsbCAkZGVidWdOYW1lIG9uICRjbG9zdXJlJzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlbW92ZUFuZENsZWFyUmVmZXJlbmNlcyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgLy8gVGhpcyBtZXRob2QgaXMgYSBwbGFjZWhvbGRlciBmb3IgdGhlIGZvbGxvd2luZyBjb21tZW50OgogICAgLy8gV2Ugc2hvdWxkIG1haW50YWluIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHRoZSBjbG9zdXJlIGlzIGEgdXNlcgogICAgLy8gb2YgaXRzIGFyZ3VtZW50cyBiZWNhdXNlIHdlIGRvIG5vdCBjaGVjayB0aGF0IHRoZSBhcmd1bWVudHMKICAgIC8vIGhhdmUgYSBzdGFibGUgdHlwZSBmb3IgYSBjbG9zdXJlIGNhbGwgdG8gYmUgc3RhYmxlOyBvdXIgdHJhY2luZwogICAgLy8gYW5hbHlzaXMgd2FudCB0byBrbm93IHdoZXRoZXIgYW4gKG5vbi1zdGFibGUpIGFyZ3VtZW50IGlzCiAgICAvLyBwYXNzZWQgdG8gYSBjbG9zdXJlLgogICAgcmV0dXJuIHN1cGVyLnJlbW92ZUFuZENsZWFyUmVmZXJlbmNlcyhpbmZlcnJlcik7CiAgfQp9CgovLy8gQSBbQ29uY3JldGVUeXBlSW5mb3JtYXRpb25dIHJlcHJlc2VudHMgYSB0eXBlIHRoYXQgbmVlZGVkCi8vLyB0byBiZSBtYXRlcmlhbGl6ZWQgZHVyaW5nIHRoZSBjcmVhdGlvbiBvZiB0aGUgZ3JhcGguIEZvciBleGFtcGxlLAovLy8gbGl0ZXJhbHMsIFs6dGhpczpdIG9yIFs6c3VwZXI6XSBuZWVkIGEgW0NvbmNyZXRlVHlwZUluZm9ybWF0aW9uXS4KLy8vCi8vLyBbQ29uY3JldGVUeXBlSW5mb3JtYXRpb25dIG5vZGVzIGhhdmUgbm8gYXNzaWdubWVudC4gQWxzbywgdG8gc2F2ZQovLy8gb24gbWVtb3J5LCB3ZSBkbyBub3QgYWRkIHVzZXJzIHRvIFtDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbl0gbm9kZXMsCi8vLyBiZWNhdXNlIHdlIGtub3cgc3VjaCBub2RlIHdpbGwgbmV2ZXIgYmUgcmVmaW5lZCB0byBhIGRpZmZlcmVudAovLy8gdHlwZS4KY2xhc3MgQ29uY3JldGVUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBUeXBlSW5mb3JtYXRpb24gewogIENvbmNyZXRlVHlwZUluZm9ybWF0aW9uKEFic3RyYWN0VmFsdWUgdHlwZSkgOiBzdXBlci51bnRyYWNrZWQodHlwZSkgewogICAgdGhpcy5pc1N0YWJsZSA9IHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0NvbmNyZXRlID0+IHRydWU7CgogIEBvdmVycmlkZQogIHZvaWQgYWRkVXNlcihUeXBlSW5mb3JtYXRpb24gdXNlcikgewogICAgLy8gTm90aGluZyB0byBkbywgYSBjb25jcmV0ZSB0eXBlIGRvZXMgbm90IGdldCB1cGRhdGVkIHNvIG5ldmVyCiAgICAvLyBuZWVkcyB0byBub3RpZnkgaXRzIHVzZXJzLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBhZGRVc2Vyc09mKFR5cGVJbmZvcm1hdGlvbiBvdGhlcikgewogICAgLy8gTm90aGluZyB0byBkbywgYSBjb25jcmV0ZSB0eXBlIGRvZXMgbm90IGdldCB1cGRhdGVkIHNvIG5ldmVyCiAgICAvLyBuZWVkcyB0byBub3RpZnkgaXRzIHVzZXJzLgogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZW1vdmVVc2VyKFR5cGVJbmZvcm1hdGlvbiB1c2VyKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIGFkZEFzc2lnbm1lbnQoVHlwZUluZm9ybWF0aW9uIGFzc2lnbm1lbnQpIHsKICAgIHRocm93ICJOb3Qgc3VwcG9ydGVkIjsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVtb3ZlQXNzaWdubWVudChUeXBlSW5mb3JtYXRpb24gYXNzaWdubWVudCkgewogICAgdGhyb3cgIk5vdCBzdXBwb3J0ZWQiOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgPT4gdHlwZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCByZXNldChJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgdGhyb3cgIk5vdCBzdXBwb3J0ZWQiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1R5cGUgJHR5cGUnOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdENvbmNyZXRlVHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNTdGFibGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSA9PiB0cnVlOwp9CgpjbGFzcyBTdHJpbmdMaXRlcmFsVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgQ29uY3JldGVUeXBlSW5mb3JtYXRpb24gewogIGZpbmFsIFN0cmluZyB2YWx1ZTsKCiAgU3RyaW5nTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLCB0aGlzLnZhbHVlLCBBYnN0cmFjdFZhbHVlIG1hc2spCiAgICAgIDogc3VwZXIoYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVQcmltaXRpdmVWYWx1ZSgKICAgICAgICAgICAgbWFzaywgbmV3IFN0cmluZ0NvbnN0YW50VmFsdWUodmFsdWUpKSk7CgogIFN0cmluZyBhc1N0cmluZygpID0+IHZhbHVlOwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdUeXBlICR0eXBlIHZhbHVlICR7dmFsdWV9JzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRTdHJpbmdMaXRlcmFsVHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KfQoKY2xhc3MgQm9vbExpdGVyYWxUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbiB7CiAgZmluYWwgYm9vbCB2YWx1ZTsKCiAgQm9vbExpdGVyYWxUeXBlSW5mb3JtYXRpb24oCiAgICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwgdGhpcy52YWx1ZSwgQWJzdHJhY3RWYWx1ZSBtYXNrKQogICAgICA6IHN1cGVyKGFic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlUHJpbWl0aXZlVmFsdWUoCiAgICAgICAgICAgIG1hc2ssIHZhbHVlID8gbmV3IFRydWVDb25zdGFudFZhbHVlKCkgOiBuZXcgRmFsc2VDb25zdGFudFZhbHVlKCkpKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1R5cGUgJHR5cGUgdmFsdWUgJHt2YWx1ZX0nOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEJvb2xMaXRlcmFsVHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KfQoKLy8vIEEgW05hcnJvd1R5cGVJbmZvcm1hdGlvbl0gbmFycm93cyBhIFtUeXBlSW5mb3JtYXRpb25dIHRvIGEgdHlwZSwKLy8vIHJlcHJlc2VudGVkIGluIFt0eXBlQW5ub3RhdGlvbl0uCi8vLwovLy8gQSBbTmFycm93VHlwZUluZm9ybWF0aW9uXSBub2RlIGhhcyBvbmx5IG9uZSBhc3NpZ25tZW50OiB0aGUKLy8vIFtUeXBlSW5mb3JtYXRpb25dIGl0IG5hcnJvd3MuCi8vLwovLy8gW05hcnJvd1R5cGVJbmZvcm1hdGlvbl0gbm9kZXMgYXJlIGNyZWF0ZWQgZm9yOgovLy8KLy8vIC0gQ29kZSBhZnRlciBgaXNgIGFuZCBgYXNgIGNoZWNrcywgd2hlcmUgd2UgaGF2ZSBtb3JlIGluZm9ybWF0aW9uCi8vLyAgIG9uIHRoZSB0eXBlIG9mIHRoZSByaWdodCBoYW5kIHNpZGUgb2YgdGhlIGV4cHJlc3Npb24uCi8vLwovLy8gLSBDb2RlIGFmdGVyIGEgZHluYW1pYyBjYWxsLCB3aGVyZSB3ZSBoYXZlIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlCi8vLyAgIHR5cGUgb2YgdGhlIHJlY2VpdmVyOiBpdCBjYW4gb25seSBiZSBvZiBhIGNsYXNzIHRoYXQgaG9sZHMgYQovLy8gICBwb3RlbnRpYWwgdGFyZ2V0IG9mIHRoaXMgZHluYW1pYyBjYWxsLgovLy8KLy8vIC0gSW4gY2hlY2tlZCBtb2RlLCBhZnRlciBhIHR5cGUgYW5ub3RhdGlvbiwgd2UgaGF2ZSBtb3JlCi8vLyAgIGluZm9ybWF0aW9uIG9uIHRoZSB0eXBlIG9mIGEgbG9jYWwuCmNsYXNzIE5hcnJvd1R5cGVJbmZvcm1hdGlvbiBleHRlbmRzIFR5cGVJbmZvcm1hdGlvbiB7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZSB0eXBlQW5ub3RhdGlvbjsKCiAgTmFycm93VHlwZUluZm9ybWF0aW9uKEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgVHlwZUluZm9ybWF0aW9uIG5hcnJvd2VkVHlwZSwgdGhpcy50eXBlQW5ub3RhdGlvbikKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZSwgbmFycm93ZWRUeXBlLmNvbnRleHQpIHsKICAgIGFkZEFzc2lnbm1lbnQobmFycm93ZWRUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIGFkZEFzc2lnbm1lbnQoVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIHN1cGVyLmFkZEFzc2lnbm1lbnQoaW5mbyk7CiAgICBhc3NlcnQoYXNzaWdubWVudHMubGVuZ3RoID09IDEpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluID0gaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICAgIEFic3RyYWN0VmFsdWUgaW5wdXQgPSBhc3NpZ25tZW50cy5maXJzdC50eXBlOwogICAgQWJzdHJhY3RWYWx1ZSBpbnRlcnNlY3Rpb24gPQogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uaW50ZXJzZWN0aW9uKGlucHV0LCB0eXBlQW5ub3RhdGlvbik7CiAgICBpZiAoZGVidWcuQU5PTUFMWV9XQVJOKSB7CiAgICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmNvbnRhaW5zKGlucHV0LCBpbnRlcnNlY3Rpb24pLmlzRGVmaW5pdGVseUZhbHNlIHx8CiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgICAgLmNvbnRhaW5zKHR5cGVBbm5vdGF0aW9uLCBpbnRlcnNlY3Rpb24pCiAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseUZhbHNlKSB7CiAgICAgICAgcHJpbnQoIkFOT01BTFkgV0FSTklORzogbmFycm93ZWQgJGlucHV0IHRvICRpbnRlcnNlY3Rpb24gdmlhICIKICAgICAgICAgICAgIiR0eXBlQW5ub3RhdGlvbiIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaW50ZXJzZWN0aW9uOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdOYXJyb3cgdG8gJHR5cGVBbm5vdGF0aW9uICR0eXBlJzsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TmFycm93VHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KfQoKLy8vIEFuIFtJbmZlcnJlZFR5cGVJbmZvcm1hdGlvbl0gaXMgYSBbVHlwZUluZm9ybWF0aW9uXSB0aGF0Ci8vLyBkZWZhdWx0cyB0byB0aGUgZHluYW1pYyB0eXBlIHVudGlsIGl0IGlzIG1hcmtlZCBhcyBiZWluZwovLy8gaW5mZXJyZWQsIGF0IHdoaWNoIHBvaW50IGl0IGNvbXB1dGVzIGl0cyB0eXBlIGJhc2VkIG9uCi8vLyBpdHMgYXNzaWdubWVudHMuCmFic3RyYWN0IGNsYXNzIEluZmVycmVkVHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgVHlwZUluZm9ybWF0aW9uIHsKICAvLy8gV2hldGhlciB0aGUgZWxlbWVudCB0eXBlIGluIHRoYXQgY29udGFpbmVyIGhhcyBiZWVuIGluZmVycmVkLgogIGJvb2wgaW5mZXJyZWQgPSBmYWxzZTsKCiAgSW5mZXJyZWRUeXBlSW5mb3JtYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwgVHlwZUluZm9ybWF0aW9uIHBhcmVudFR5cGUpCiAgICAgIDogc3VwZXIoYWJzdHJhY3RWYWx1ZURvbWFpbi5lbXB0eVR5cGUsIGNvbnRleHQpIHsKICAgIGlmIChwYXJlbnRUeXBlICE9IG51bGwpIGFkZEFzc2lnbm1lbnQocGFyZW50VHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBpZiAoIWluZmVycmVkKSByZXR1cm4gc2FmZVR5cGUoaW5mZXJyZXIpOwogICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLmNvbXB1dGVUeXBlTWFzayhhc3NpZ25tZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc1N0YWJsZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlZCAmJiBzdXBlci5oYXNTdGFibGVUeXBlKGluZmVycmVyKTsKICB9Cn0KCi8vLyBBIFtMaXN0VHlwZUluZm9ybWF0aW9uXSBpcyBhIFtUeXBlSW5mb3JtYXRpb25dIGNyZWF0ZWQKLy8vIGZvciBlYWNoIGBMaXN0YCBpbnN0YW50aWF0aW9ucy4KY2xhc3MgTGlzdFR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIFR5cGVJbmZvcm1hdGlvbiB3aXRoIFRyYWNlZFR5cGVJbmZvcm1hdGlvbiB7CiAgZmluYWwgRWxlbWVudEluQ29udGFpbmVyVHlwZUluZm9ybWF0aW9uIGVsZW1lbnRUeXBlOwoKICAvLy8gVGhlIGNvbnRhaW5lciB0eXBlIGJlZm9yZSBpdCBpcyBpbmZlcnJlZC4KICBmaW5hbCBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVHlwZTsKCiAgLy8vIFRoZSBsZW5ndGggYXQgdGhlIGFsbG9jYXRpb24gc2l0ZS4KICBmaW5hbCBpbnQgb3JpZ2luYWxMZW5ndGg7CgogIC8vLyBUaGUgbGVuZ3RoIGFmdGVyIHRoZSBjb250YWluZXIgaGFzIGJlZW4gdHJhY2VkLgogIGludCBpbmZlcnJlZExlbmd0aDsKCiAgLy8vIFdoZXRoZXIgdGhpcyBsaXN0IGdvZXMgdGhyb3VnaCBhIGdyb3dhYmxlIGNoZWNrLgogIC8vLyBXZSBjb25zZXJ2YXRpdmVseSBhc3N1bWUgaXQgZG9lcy4KICBib29sIGNoZWNrc0dyb3dhYmxlID0gdHJ1ZTsKCiAgTGlzdFR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwKICAgICAgdGhpcy5vcmlnaW5hbFR5cGUsCiAgICAgIHRoaXMuZWxlbWVudFR5cGUsCiAgICAgIHRoaXMub3JpZ2luYWxMZW5ndGgpCiAgICAgIDogc3VwZXIob3JpZ2luYWxUeXBlLCBjb250ZXh0KSB7CiAgICBpbmZlcnJlZExlbmd0aCA9IGFic3RyYWN0VmFsdWVEb21haW4uZ2V0Q29udGFpbmVyTGVuZ3RoKG9yaWdpbmFsVHlwZSk7CiAgICBlbGVtZW50VHlwZS5hZGRVc2VyKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0xpc3QgdHlwZSAkdHlwZSc7CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TGlzdFR5cGVJbmZvcm1hdGlvbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaGFzU3RhYmxlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIGVsZW1lbnRUeXBlLmlzU3RhYmxlICYmIHN1cGVyLmhhc1N0YWJsZVR5cGUoaW5mZXJyZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluID0gaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbjsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IHR5cGU7CiAgICBpZiAoIWFic3RyYWN0VmFsdWVEb21haW4uaXNDb250YWluZXIodHlwZSkgfHwKICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldENvbnRhaW5lckVsZW1lbnRUeXBlKHR5cGUpICE9IGVsZW1lbnRUeXBlLnR5cGUgfHwKICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldENvbnRhaW5lckxlbmd0aCh0eXBlKSAhPSBpbmZlcnJlZExlbmd0aCkgewogICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVDb250YWluZXJWYWx1ZSgKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0R2VuZXJhbGl6YXRpb24ob3JpZ2luYWxUeXBlKSwKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0QWxsb2NhdGlvbk5vZGUob3JpZ2luYWxUeXBlKSwKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0QWxsb2NhdGlvbkVsZW1lbnQob3JpZ2luYWxUeXBlKSwKICAgICAgICAgIGVsZW1lbnRUeXBlLnR5cGUsCiAgICAgICAgICBpbmZlcnJlZExlbmd0aCk7CiAgICB9CiAgICByZXR1cm4gbWFzazsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgc2FmZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpID0+IG9yaWdpbmFsVHlwZTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBjbGVhbnVwKCkgewogICAgc3VwZXIuY2xlYW51cCgpOwogICAgZWxlbWVudFR5cGUuY2xlYW51cCgpOwogICAgX2Zsb3dzSW50byA9IG51bGw7CiAgfQp9CgovLy8gQW4gW0VsZW1lbnRJbkNvbnRhaW5lclR5cGVJbmZvcm1hdGlvbl0gaG9sZHMgdGhlIGNvbW1vbiB0eXBlIG9mIHRoZQovLy8gZWxlbWVudHMgaW4gYSBbTGlzdFR5cGVJbmZvcm1hdGlvbl0uCmNsYXNzIEVsZW1lbnRJbkNvbnRhaW5lclR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIEluZmVycmVkVHlwZUluZm9ybWF0aW9uIHsKICBFbGVtZW50SW5Db250YWluZXJUeXBlSW5mb3JtYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwgZWxlbWVudFR5cGUpCiAgICAgIDogc3VwZXIoYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29udGV4dCwgZWxlbWVudFR5cGUpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnRWxlbWVudCBpbiBjb250YWluZXIgJHR5cGUnOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEVsZW1lbnRJbkNvbnRhaW5lclR5cGVJbmZvcm1hdGlvbih0aGlzKTsKICB9Cn0KCi8vLyBBIFtTZXRUeXBlSW5mb3JtYXRpb25dIGlzIGEgW1R5cGVJbmZvcm1hdGlvbl0gY3JlYXRlZCBmb3Igc2V0cy4KY2xhc3MgU2V0VHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgVHlwZUluZm9ybWF0aW9uIHdpdGggVHJhY2VkVHlwZUluZm9ybWF0aW9uIHsKICBmaW5hbCBFbGVtZW50SW5TZXRUeXBlSW5mb3JtYXRpb24gZWxlbWVudFR5cGU7CgogIGZpbmFsIEFic3RyYWN0VmFsdWUgb3JpZ2luYWxUeXBlOwoKICBTZXRUeXBlSW5mb3JtYXRpb24oCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LCB0aGlzLm9yaWdpbmFsVHlwZSwgdGhpcy5lbGVtZW50VHlwZSkKICAgICAgOiBzdXBlcihvcmlnaW5hbFR5cGUsIGNvbnRleHQpIHsKICAgIGVsZW1lbnRUeXBlLmFkZFVzZXIodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnU2V0IHR5cGUgJHR5cGUnOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFNldFR5cGVJbmZvcm1hdGlvbih0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiA9IGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW47CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSB0eXBlOwogICAgaWYgKCFhYnN0cmFjdFZhbHVlRG9tYWluLmlzU2V0KHR5cGUpIHx8CiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRTZXRFbGVtZW50VHlwZSh0eXBlKSAhPSBlbGVtZW50VHlwZS50eXBlKSB7CiAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZVNldFZhbHVlKAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRHZW5lcmFsaXphdGlvbihvcmlnaW5hbFR5cGUpLAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRBbGxvY2F0aW9uTm9kZShvcmlnaW5hbFR5cGUpLAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRBbGxvY2F0aW9uRWxlbWVudChvcmlnaW5hbFR5cGUpLAogICAgICAgICAgZWxlbWVudFR5cGUudHlwZSk7CiAgICB9CiAgICByZXR1cm4gbWFzazsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgc2FmZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpID0+IG9yaWdpbmFsVHlwZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNTdGFibGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gZWxlbWVudFR5cGUuaXNTdGFibGUgJiYgc3VwZXIuaGFzU3RhYmxlVHlwZShpbmZlcnJlcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGNsZWFudXAoKSB7CiAgICBzdXBlci5jbGVhbnVwKCk7CiAgICBlbGVtZW50VHlwZS5jbGVhbnVwKCk7CiAgICBfZmxvd3NJbnRvID0gbnVsbDsKICB9Cn0KCi8vLyBBbiBbRWxlbWVudEluU2V0VHlwZUluZm9ybWF0aW9uXSBob2xkcyB0aGUgY29tbW9uIHR5cGUgb2YgdGhlIGVsZW1lbnRzIGluIGEKLy8vIFtTZXRUeXBlSW5mb3JtYXRpb25dLgpjbGFzcyBFbGVtZW50SW5TZXRUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBJbmZlcnJlZFR5cGVJbmZvcm1hdGlvbiB7CiAgRWxlbWVudEluU2V0VHlwZUluZm9ybWF0aW9uKEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsIGVsZW1lbnRUeXBlKQogICAgICA6IHN1cGVyKGFic3RyYWN0VmFsdWVEb21haW4sIGNvbnRleHQsIGVsZW1lbnRUeXBlKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0VsZW1lbnQgaW4gc2V0ICR0eXBlJzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRFbGVtZW50SW5TZXRUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQp9CgovLy8gQSBbTWFwVHlwZUluZm9ybWF0aW9uXSBpcyBhIFtUeXBlSW5mb3JtYXRpb25dIGNyZWF0ZWQKLy8vIGZvciBtYXBzLgpjbGFzcyBNYXBUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBUeXBlSW5mb3JtYXRpb24gd2l0aCBUcmFjZWRUeXBlSW5mb3JtYXRpb24gewogIC8vIFdoZW4gaW4gRGljdGlvbmFyeSBtb2RlLCB0aGlzIG1hcCB0cmFja3MgdGhlIHR5cGUgb2YgdGhlIHZhbHVlcyB0aGF0CiAgLy8gaGF2ZSBiZWVuIGFzc2lnbmVkIHRvIGEgc3BlY2lmaWMgW1N0cmluZ10ga2V5LgogIGZpbmFsIE1hcDxTdHJpbmcsIFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb24+IHR5cGVJbmZvTWFwID0ge307CiAgLy8gVGhlc2UgZmllbGRzIHRyYWNrIHRoZSBvdmVyYWxsIHR5cGUgb2YgdGhlIGtleXMvdmFsdWVzIGluIHRoZSBtYXAuCiAgZmluYWwgS2V5SW5NYXBUeXBlSW5mb3JtYXRpb24ga2V5VHlwZTsKICBmaW5hbCBWYWx1ZUluTWFwVHlwZUluZm9ybWF0aW9uIHZhbHVlVHlwZTsKICBmaW5hbCBBYnN0cmFjdFZhbHVlIG9yaWdpbmFsVHlwZTsKCiAgLy8gU2V0IHRvIGZhbHNlIGlmIGEgc3RhdGljYWxseSB1bmtub3duIGtleSBmbG93cyBpbnRvIHRoaXMgbWFwLgogIGJvb2wgX2FsbEtleXNBcmVTdHJpbmdzID0gdHJ1ZTsKCiAgYm9vbCBnZXQgaW5EaWN0aW9uYXJ5TW9kZSA9PiAhYmFpbGVkT3V0ICYmIF9hbGxLZXlzQXJlU3RyaW5nczsKCiAgTWFwVHlwZUluZm9ybWF0aW9uKE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LCB0aGlzLm9yaWdpbmFsVHlwZSwKICAgICAgdGhpcy5rZXlUeXBlLCB0aGlzLnZhbHVlVHlwZSkKICAgICAgOiBzdXBlcihvcmlnaW5hbFR5cGUsIGNvbnRleHQpIHsKICAgIGtleVR5cGUuYWRkVXNlcih0aGlzKTsKICAgIHZhbHVlVHlwZS5hZGRVc2VyKHRoaXMpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGFkZEVudHJ5QXNzaWdubWVudChBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIFR5cGVJbmZvcm1hdGlvbiBrZXksIFR5cGVJbmZvcm1hdGlvbiB2YWx1ZSwKICAgICAgW2Jvb2wgbm9uTnVsbCA9IGZhbHNlXSkgewogICAgVHlwZUluZm9ybWF0aW9uIG5ld0luZm8gPSBudWxsOwogICAgaWYgKF9hbGxLZXlzQXJlU3RyaW5ncyAmJiBrZXkgaXMgU3RyaW5nTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbikgewogICAgICBTdHJpbmcga2V5U3RyaW5nID0ga2V5LmFzU3RyaW5nKCk7CiAgICAgIHR5cGVJbmZvTWFwLnB1dElmQWJzZW50KGtleVN0cmluZywgKCkgewogICAgICAgIG5ld0luZm8gPSBuZXcgVmFsdWVJbk1hcFR5cGVJbmZvcm1hdGlvbigKICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29udGV4dCwgbnVsbCwgbm9uTnVsbCk7CiAgICAgICAgcmV0dXJuIG5ld0luZm87CiAgICAgIH0pOwogICAgICB0eXBlSW5mb01hcFtrZXlTdHJpbmddLmFkZEFzc2lnbm1lbnQodmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgX2FsbEtleXNBcmVTdHJpbmdzID0gZmFsc2U7CiAgICAgIHR5cGVJbmZvTWFwLmNsZWFyKCk7CiAgICB9CiAgICBrZXlUeXBlLmFkZEFzc2lnbm1lbnQoa2V5KTsKICAgIHZhbHVlVHlwZS5hZGRBc3NpZ25tZW50KHZhbHVlKTsKICAgIGlmIChuZXdJbmZvICE9IG51bGwpIG5ld0luZm8uYWRkVXNlcih0aGlzKTsKCiAgICByZXR1cm4gbmV3SW5mbzsKICB9CgogIExpc3Q8VHlwZUluZm9ybWF0aW9uPiBhZGRNYXBBc3NpZ25tZW50KAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sIE1hcFR5cGVJbmZvcm1hdGlvbiBvdGhlcikgewogICAgTGlzdDxUeXBlSW5mb3JtYXRpb24+IG5ld0luZm9zID0gPFR5cGVJbmZvcm1hdGlvbj5bXTsKICAgIGlmIChfYWxsS2V5c0FyZVN0cmluZ3MgJiYgb3RoZXIuaW5EaWN0aW9uYXJ5TW9kZSkgewogICAgICBvdGhlci50eXBlSW5mb01hcC5mb3JFYWNoKChrZXlTdHJpbmcsIHZhbHVlKSB7CiAgICAgICAgdHlwZUluZm9NYXAucHV0SWZBYnNlbnQoa2V5U3RyaW5nLCAoKSB7CiAgICAgICAgICBUeXBlSW5mb3JtYXRpb24gbmV3SW5mbyA9IG5ldyBWYWx1ZUluTWFwVHlwZUluZm9ybWF0aW9uKAogICAgICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4sIGNvbnRleHQsIG51bGwsIGZhbHNlKTsKICAgICAgICAgIG5ld0luZm9zLmFkZChuZXdJbmZvKTsKICAgICAgICAgIHJldHVybiBuZXdJbmZvOwogICAgICAgIH0pOwogICAgICAgIHR5cGVJbmZvTWFwW2tleVN0cmluZ10uYWRkQXNzaWdubWVudCh2YWx1ZSk7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgX2FsbEtleXNBcmVTdHJpbmdzID0gZmFsc2U7CiAgICAgIHR5cGVJbmZvTWFwLmNsZWFyKCk7CiAgICB9CiAgICBrZXlUeXBlLmFkZEFzc2lnbm1lbnQob3RoZXIua2V5VHlwZSk7CiAgICB2YWx1ZVR5cGUuYWRkQXNzaWdubWVudChvdGhlci52YWx1ZVR5cGUpOwoKICAgIHJldHVybiBuZXdJbmZvczsKICB9CgogIG1hcmtBc0luZmVycmVkKCkgewogICAga2V5VHlwZS5pbmZlcnJlZCA9IHZhbHVlVHlwZS5pbmZlcnJlZCA9IHRydWU7CiAgICB0eXBlSW5mb01hcC52YWx1ZXMuZm9yRWFjaCgodikgPT4gdi5pbmZlcnJlZCA9IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYWRkQXNzaWdubWVudChUeXBlSW5mb3JtYXRpb24gb3RoZXIpIHsKICAgIHRocm93ICJub3Qgc3VwcG9ydGVkIjsKICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0TWFwVHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KCiAgQWJzdHJhY3RWYWx1ZSB0b1R5cGVNYXNrKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgaWYgKGluRGljdGlvbmFyeU1vZGUpIHsKICAgICAgTWFwPFN0cmluZywgQWJzdHJhY3RWYWx1ZT4gbWFwcGluZ3MgPSBuZXcgTWFwPFN0cmluZywgQWJzdHJhY3RWYWx1ZT4oKTsKICAgICAgZm9yICh2YXIga2V5IGluIHR5cGVJbmZvTWFwLmtleXMpIHsKICAgICAgICBtYXBwaW5nc1trZXldID0gdHlwZUluZm9NYXBba2V5XS50eXBlOwogICAgICB9CiAgICAgIHJldHVybiBpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZURpY3Rpb25hcnlWYWx1ZSgKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0R2VuZXJhbGl6YXRpb24ob3JpZ2luYWxUeXBlKSwKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0QWxsb2NhdGlvbk5vZGUob3JpZ2luYWxUeXBlKSwKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZ2V0QWxsb2NhdGlvbkVsZW1lbnQob3JpZ2luYWxUeXBlKSwKICAgICAgICAgIGtleVR5cGUudHlwZSwKICAgICAgICAgIHZhbHVlVHlwZS50eXBlLAogICAgICAgICAgbWFwcGluZ3MpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTWFwVmFsdWUoCiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldEdlbmVyYWxpemF0aW9uKG9yaWdpbmFsVHlwZSksCiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldEFsbG9jYXRpb25Ob2RlKG9yaWdpbmFsVHlwZSksCiAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmdldEFsbG9jYXRpb25FbGVtZW50KG9yaWdpbmFsVHlwZSksCiAgICAgICAgICBrZXlUeXBlLnR5cGUsCiAgICAgICAgICB2YWx1ZVR5cGUudHlwZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluOwogICAgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uaXNEaWN0aW9uYXJ5KHR5cGUpICE9IGluRGljdGlvbmFyeU1vZGUpIHsKICAgICAgcmV0dXJuIHRvVHlwZU1hc2soaW5mZXJyZXIpOwogICAgfSBlbHNlIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzRGljdGlvbmFyeSh0eXBlKSkgewogICAgICBhc3NlcnQoaW5EaWN0aW9uYXJ5TW9kZSk7CiAgICAgIGZvciAoU3RyaW5nIGtleSBpbiB0eXBlSW5mb01hcC5rZXlzKSB7CiAgICAgICAgVHlwZUluZm9ybWF0aW9uIHZhbHVlID0gdHlwZUluZm9NYXBba2V5XTsKICAgICAgICBpZiAoIWFic3RyYWN0VmFsdWVEb21haW4uY29udGFpbnNEaWN0aW9uYXJ5S2V5KHR5cGUsIGtleSkgJiYKICAgICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5jb250YWluc0FsbCh2YWx1ZS50eXBlKS5pc0RlZmluaXRlbHlGYWxzZSAmJgogICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVsbCh2YWx1ZS50eXBlKS5pc0RlZmluaXRlbHlGYWxzZSkgewogICAgICAgICAgcmV0dXJuIHRvVHlwZU1hc2soaW5mZXJyZXIpOwogICAgICAgIH0KICAgICAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXREaWN0aW9uYXJ5VmFsdWVGb3JLZXkodHlwZSwga2V5KSAhPQogICAgICAgICAgICB0eXBlSW5mb01hcFtrZXldLnR5cGUpIHsKICAgICAgICAgIHJldHVybiB0b1R5cGVNYXNrKGluZmVycmVyKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc01hcCh0eXBlKSkgewogICAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRNYXBLZXlUeXBlKHR5cGUpICE9IGtleVR5cGUudHlwZSB8fAogICAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRNYXBWYWx1ZVR5cGUodHlwZSkgIT0gdmFsdWVUeXBlLnR5cGUpIHsKICAgICAgICByZXR1cm4gdG9UeXBlTWFzayhpbmZlcnJlcik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB0b1R5cGVNYXNrKGluZmVycmVyKTsKICAgIH0KCiAgICByZXR1cm4gdHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgc2FmZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpID0+IG9yaWdpbmFsVHlwZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNTdGFibGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4ga2V5VHlwZS5pc1N0YWJsZSAmJgogICAgICAgIHZhbHVlVHlwZS5pc1N0YWJsZSAmJgogICAgICAgIHN1cGVyLmhhc1N0YWJsZVR5cGUoaW5mZXJyZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbGVhbnVwKCkgewogICAgc3VwZXIuY2xlYW51cCgpOwogICAga2V5VHlwZS5jbGVhbnVwKCk7CiAgICB2YWx1ZVR5cGUuY2xlYW51cCgpOwogICAgZm9yIChUeXBlSW5mb3JtYXRpb24gaW5mbyBpbiB0eXBlSW5mb01hcC52YWx1ZXMpIHsKICAgICAgaW5mby5jbGVhbnVwKCk7CiAgICB9CiAgICBfZmxvd3NJbnRvID0gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAnTWFwICR0eXBlIChLOiRrZXlUeXBlLCBWOiR2YWx1ZVR5cGUpIGNvbnRlbnRzICR0eXBlSW5mb01hcCc7CiAgfQp9CgovLy8gQSBbS2V5SW5NYXBUeXBlSW5mb3JtYXRpb25dIGhvbGRzIHRoZSBjb21tb24gdHlwZQovLy8gZm9yIHRoZSBrZXlzIGluIGEgW01hcFR5cGVJbmZvcm1hdGlvbl0KY2xhc3MgS2V5SW5NYXBUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBJbmZlcnJlZFR5cGVJbmZvcm1hdGlvbiB7CiAgS2V5SW5NYXBUeXBlSW5mb3JtYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwgVHlwZUluZm9ybWF0aW9uIGtleVR5cGUpCiAgICAgIDogc3VwZXIoYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29udGV4dCwga2V5VHlwZSk7CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0S2V5SW5NYXBUeXBlSW5mb3JtYXRpb24odGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnS2V5IGluIE1hcCAkdHlwZSc7Cn0KCi8vLyBBIFtWYWx1ZUluTWFwVHlwZUluZm9ybWF0aW9uXSBob2xkcyB0aGUgY29tbW9uIHR5cGUKLy8vIGZvciB0aGUgdmFsdWVzIGluIGEgW01hcFR5cGVJbmZvcm1hdGlvbl0KY2xhc3MgVmFsdWVJbk1hcFR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIEluZmVycmVkVHlwZUluZm9ybWF0aW9uIHsKICAvLyBbbm9uTnVsbF0gaXMgc2V0IHRvIHRydWUgaWYgdGhpcyB2YWx1ZSBpcyBrbm93biB0byBiZSBwYXJ0IG9mIHRoZSBtYXAuCiAgLy8gTm90ZSB0aGF0IG9ubHkgdmFsdWVzIGFzc2lnbmVkIHRvIGEgc3BlY2lmaWMga2V5IHZhbHVlIGluIGRpY3Rpb25hcnkKICAvLyBtb2RlIGNhbiBldmVyIGJlIG1hcmtlZCBhcyBbbm9uTnVsbF0uCiAgZmluYWwgYm9vbCBub25OdWxsOwoKICBWYWx1ZUluTWFwVHlwZUluZm9ybWF0aW9uKEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsIFR5cGVJbmZvcm1hdGlvbiB2YWx1ZVR5cGUsCiAgICAgIFt0aGlzLm5vbk51bGwgPSBmYWxzZV0pCiAgICAgIDogc3VwZXIoYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29udGV4dCwgdmFsdWVUeXBlKTsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRWYWx1ZUluTWFwVHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBjb21wdXRlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIG5vbk51bGwKICAgICAgICA/IHN1cGVyLmNvbXB1dGVUeXBlKGluZmVycmVyKQogICAgICAgIDogaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbi5pbmNsdWRlTnVsbChzdXBlci5jb21wdXRlVHlwZShpbmZlcnJlcikpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1ZhbHVlIGluIE1hcCAkdHlwZSc7Cn0KCi8vLyBBIFtQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uXSBpcyBhbiB1bmlvbiBvZgovLy8gW0VsZW1lbnRUeXBlSW5mb3JtYXRpb25dLCB0aGF0IGlzIGxvY2FsIHRvIGEgbWV0aG9kLgpjbGFzcyBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uIGV4dGVuZHMgVHlwZUluZm9ybWF0aW9uIHsKICBmaW5hbCBpci5Ob2RlIGJyYW5jaE5vZGU7CiAgZmluYWwgTG9jYWwgdmFyaWFibGU7CiAgZmluYWwgYm9vbCBpc1RyeTsKCiAgUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LCB0aGlzLmJyYW5jaE5vZGUsIHRoaXMudmFyaWFibGUsCiAgICAgIHt0aGlzLmlzVHJ5fSkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZSwgY29udGV4dCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpIHsKICAgIHJldHVybiBpbmZlcnJlci50eXBlcy5jb21wdXRlVHlwZU1hc2soYXNzaWdubWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ1BoaSgkaGFzaENvZGUpICR2YXJpYWJsZSAkdHlwZSc7CgogIEBvdmVycmlkZQogIHZvaWQgX3RvU3RydWN0dXJlZFRleHQoCiAgICAgIFN0cmluZ0J1ZmZlciBzYiwgU3RyaW5nIGluZGVudCwgU2V0PFR5cGVJbmZvcm1hdGlvbj4gc2VlbikgewogICAgaWYgKHNlZW4uYWRkKHRoaXMpKSB7CiAgICAgIHNiLndyaXRlKCcke3RvU3RyaW5nKCl9IFsnKTsKICAgICAgZm9yIChUeXBlSW5mb3JtYXRpb24gYXNzaWdubWVudCBpbiBhc3NpZ25tZW50cykgewogICAgICAgIHNiLndyaXRlKCdcbiRpbmRlbnQgICcpOwogICAgICAgIGFzc2lnbm1lbnQuX3RvU3RydWN0dXJlZFRleHQoc2IsICckaW5kZW50ICAnLCBzZWVuKTsKICAgICAgfQogICAgICBzYi53cml0ZSgnIF0nKTsKICAgIH0gZWxzZSB7CiAgICAgIHNiLndyaXRlKCcke3RvU3RyaW5nKCl9IFsgLi4uIF0nKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGFjY2VwdChUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHZpc2l0b3IpIHsKICAgIHJldHVybiB2aXNpdG9yLnZpc2l0UGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbih0aGlzKTsKICB9Cn0KCmNsYXNzIENsb3N1cmVUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBUeXBlSW5mb3JtYXRpb24KICAgIHdpdGggQXBwbHlhYmxlVHlwZUluZm9ybWF0aW9uIHsKICBmaW5hbCBGdW5jdGlvbkVudGl0eSBfZWxlbWVudDsKCiAgQ2xvc3VyZVR5cGVJbmZvcm1hdGlvbihBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sCiAgICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBjb250ZXh0LCB0aGlzLl9lbGVtZW50KQogICAgICA6IHN1cGVyKGFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlLCBjb250ZXh0KTsKCiAgRnVuY3Rpb25FbnRpdHkgZ2V0IGNsb3N1cmUgPT4gX2VsZW1lbnQ7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpID0+IHNhZmVUeXBlKGluZmVycmVyKTsKCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSBzYWZlVHlwZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlcikgewogICAgcmV0dXJuIGluZmVycmVyLnR5cGVzLmZ1bmN0aW9uVHlwZS50eXBlOwogIH0KCiAgU3RyaW5nIGdldCBkZWJ1Z05hbWUgPT4gJyRjbG9zdXJlJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0Nsb3N1cmUgJF9lbGVtZW50JzsKCiAgQG92ZXJyaWRlCiAgYWNjZXB0KFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgdmlzaXRvcikgewogICAgcmV0dXJuIHZpc2l0b3IudmlzaXRDbG9zdXJlVHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNTdGFibGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBTdHJpbmcgZ2V0SW5mZXJyZWRTaWduYXR1cmUoVHlwZVN5c3RlbSB0eXBlcykgewogICAgcmV0dXJuIHR5cGVzLmdldEluZmVycmVkU2lnbmF0dXJlT2ZNZXRob2QoX2VsZW1lbnQpOwogIH0KfQoKLy8vIE1peGluIGZvciBbVHlwZUluZm9ybWF0aW9uXSBub2RlcyB0aGF0IGNhbiBiYWlsIG91dCBkdXJpbmcgdHJhY2luZy4KYWJzdHJhY3QgY2xhc3MgVHJhY2VkVHlwZUluZm9ybWF0aW9uIGltcGxlbWVudHMgVHlwZUluZm9ybWF0aW9uIHsKICAvLy8gU2V0IHRvIGZhbHNlIG9uY2UgYW5hbHlzaXMgaGFzIHN1Y2NlZWRlZC4KICBib29sIGJhaWxlZE91dCA9IHRydWU7CgogIC8vLyBTZXQgdG8gdHJ1ZSBvbmNlIGFuYWx5c2lzIGlzIGNvbXBsZXRlZC4KICBib29sIGFuYWx5emVkID0gZmFsc2U7CgogIFNldDxUeXBlSW5mb3JtYXRpb24+IF9mbG93c0ludG87CgogIC8vLyBUaGUgc2V0IG9mIFtUeXBlSW5mb3JtYXRpb25dIG5vZGVzIHdoZXJlIHZhbHVlcyBmcm9tIHRoZSB0cmFjZWQgbm9kZSBjb3VsZAogIC8vLyBmbG93IGluLgogIFNldDxUeXBlSW5mb3JtYXRpb24+IGdldCBmbG93c0ludG8gewogICAgcmV0dXJuIChfZmxvd3NJbnRvID09IG51bGwpCiAgICAgICAgPyBjb25zdCBJbW11dGFibGVFbXB0eVNldDxUeXBlSW5mb3JtYXRpb24+KCkKICAgICAgICA6IF9mbG93c0ludG87CiAgfQoKICAvLy8gQWRkcyBbbm9kZXNdIHRvIHRoZSBzZXRzIG9mIHZhbHVlcyB0aGlzIFtUcmFjZWRUeXBlSW5mb3JtYXRpb25dIGZsb3dzCiAgLy8vIGludG8uCiAgdm9pZCBhZGRGbG93c0ludG9UYXJnZXRzKEl0ZXJhYmxlPFR5cGVJbmZvcm1hdGlvbj4gbm9kZXMpIHsKICAgIGlmIChfZmxvd3NJbnRvID09IG51bGwpIHsKICAgICAgX2Zsb3dzSW50byA9IG5vZGVzLnRvU2V0KCk7CiAgICB9IGVsc2UgewogICAgICBfZmxvd3NJbnRvLmFkZEFsbChub2Rlcyk7CiAgICB9CiAgfQp9CgpjbGFzcyBBd2FpdFR5cGVJbmZvcm1hdGlvbiBleHRlbmRzIFR5cGVJbmZvcm1hdGlvbiB7CiAgZmluYWwgaXIuTm9kZSBfbm9kZTsKCiAgQXdhaXRUeXBlSW5mb3JtYXRpb24oQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY29udGV4dCwgdGhpcy5fbm9kZSkKICAgICAgOiBzdXBlcihhYnN0cmFjdFZhbHVlRG9tYWluLmVtcHR5VHlwZSwgY29udGV4dCk7CgogIC8vIFRPRE8oMjI4OTQpOiBDb21wdXRlIGEgYmV0dGVyIHR5cGUgaGVyZS4KICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSA9PiBzYWZlVHlwZShpbmZlcnJlcik7CgogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICckX25vZGUnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnQXdhaXQnOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdEF3YWl0VHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KfQoKY2xhc3MgWWllbGRUeXBlSW5mb3JtYXRpb24gZXh0ZW5kcyBUeXBlSW5mb3JtYXRpb24gewogIGZpbmFsIGlyLk5vZGUgX25vZGU7CgogIFlpZWxkVHlwZUluZm9ybWF0aW9uKEFic3RyYWN0VmFsdWVEb21haW4gYWJzdHJhY3RWYWx1ZURvbWFpbiwKICAgICAgTWVtYmVyVHlwZUluZm9ybWF0aW9uIGNvbnRleHQsIHRoaXMuX25vZGUpCiAgICAgIDogc3VwZXIoYWJzdHJhY3RWYWx1ZURvbWFpbi5lbXB0eVR5cGUsIGNvbnRleHQpOwoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVUeXBlKEluZmVycmVyRW5naW5lIGluZmVycmVyKSA9PiBzYWZlVHlwZShpbmZlcnJlcik7CgogIFN0cmluZyBnZXQgZGVidWdOYW1lID0+ICckX25vZGUnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnWWllbGQnOwoKICBAb3ZlcnJpZGUKICBhY2NlcHQoVHlwZUluZm9ybWF0aW9uVmlzaXRvciB2aXNpdG9yKSB7CiAgICByZXR1cm4gdmlzaXRvci52aXNpdFlpZWxkVHlwZUluZm9ybWF0aW9uKHRoaXMpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgVHlwZUluZm9ybWF0aW9uVmlzaXRvcjxUPiB7CiAgVCB2aXNpdE5hcnJvd1R5cGVJbmZvcm1hdGlvbihOYXJyb3dUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb24oUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0RWxlbWVudEluQ29udGFpbmVyVHlwZUluZm9ybWF0aW9uKAogICAgICBFbGVtZW50SW5Db250YWluZXJUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbihFbGVtZW50SW5TZXRUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdEtleUluTWFwVHlwZUluZm9ybWF0aW9uKEtleUluTWFwVHlwZUluZm9ybWF0aW9uIGluZm8pOwogIFQgdmlzaXRWYWx1ZUluTWFwVHlwZUluZm9ybWF0aW9uKFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdExpc3RUeXBlSW5mb3JtYXRpb24oTGlzdFR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0U2V0VHlwZUluZm9ybWF0aW9uKFNldFR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0TWFwVHlwZUluZm9ybWF0aW9uKE1hcFR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0Q29uY3JldGVUeXBlSW5mb3JtYXRpb24oQ29uY3JldGVUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdFN0cmluZ0xpdGVyYWxUeXBlSW5mb3JtYXRpb24oU3RyaW5nTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKICBUIHZpc2l0Qm9vbExpdGVyYWxUeXBlSW5mb3JtYXRpb24oQm9vbExpdGVyYWxUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pOwogIFQgdmlzaXREeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pOwogIFQgdmlzaXRNZW1iZXJUeXBlSW5mb3JtYXRpb24oTWVtYmVyVHlwZUluZm9ybWF0aW9uIGluZm8pOwogIFQgdmlzaXRQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24oUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uIGluZm8pOwogIFQgdmlzaXRDbG9zdXJlVHlwZUluZm9ybWF0aW9uKENsb3N1cmVUeXBlSW5mb3JtYXRpb24gaW5mbyk7CiAgVCB2aXNpdEF3YWl0VHlwZUluZm9ybWF0aW9uKEF3YWl0VHlwZUluZm9ybWF0aW9uIGluZm8pOwogIFQgdmlzaXRZaWVsZFR5cGVJbmZvcm1hdGlvbihZaWVsZFR5cGVJbmZvcm1hdGlvbiBpbmZvKTsKfQoKQWJzdHJhY3RWYWx1ZSBfbmFycm93VHlwZSgKICAgIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZCwgQWJzdHJhY3RWYWx1ZSB0eXBlLCBEYXJ0VHlwZSBhbm5vdGF0aW9uLAogICAge2Jvb2wgaXNOdWxsYWJsZTogdHJ1ZX0pIHsKICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4gPSBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwogIEFic3RyYWN0VmFsdWUgb3RoZXJUeXBlOwogIGlmIChhbm5vdGF0aW9uLnRyZWF0QXNEeW5hbWljKSB7CiAgICByZXR1cm4gdHlwZTsKICB9IGVsc2UgaWYgKGFubm90YXRpb24uaXNJbnRlcmZhY2VUeXBlKSB7CiAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZVR5cGUgPSBhbm5vdGF0aW9uOwogICAgaWYgKGludGVyZmFjZVR5cGUuZWxlbWVudCA9PSBjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RDbGFzcykgewogICAgICByZXR1cm4gdHlwZTsKICAgIH0KICAgIG90aGVyVHlwZSA9IGFic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTm9uTnVsbFN1YnR5cGUoaW50ZXJmYWNlVHlwZS5lbGVtZW50KTsKICB9IGVsc2UgaWYgKGFubm90YXRpb24uaXNWb2lkKSB7CiAgICByZXR1cm4gdHlwZTsKICB9IGVsc2UgaWYgKGFubm90YXRpb24uaXNUeXBlZGVmIHx8IGFubm90YXRpb24uaXNGdW5jdGlvblR5cGUpIHsKICAgIG90aGVyVHlwZSA9IGNsb3NlZFdvcmxkLmFic3Ry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L2NvbXBpbGVyL2xpYi9zcmMvaXIvc3RhdGljX3R5cGVfcHJvdmlkZXIuZGFydIKXLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIGFzIGlyOwoKLy8vIEludGVyZmFjZSBmb3IgYWNjZXNzaW5nIHN0YXRpYyB0eXBlcyBvbiBleHByZXNzaW9ucy4KYWJzdHJhY3QgY2xhc3MgU3RhdGljVHlwZVByb3ZpZGVyIHsKICBpci5EYXJ0VHlwZSBnZXRTdGF0aWNUeXBlKGlyLkV4cHJlc3Npb24gbm9kZSk7CiAgaXIuRGFydFR5cGUgZ2V0Rm9ySW5JdGVyYXRvclR5cGUoaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSk7Cn0KEQBOTjwBKDQvMTUBOSQxPAIBMXBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3N0YXRpY190eXBlX3Byb3ZpZGVyLmRhcnQzc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL3R5cGVfYnVpbGRlci5kYXJ0wABOGS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2J1aWxkZXJfa2VybmVsLmRhcnQnOwppbXBvcnQgJ25vZGVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9qc19tb2RlbC90eXBlX3JlY2lwZS5kYXJ0JzsKaW1wb3J0ICcuLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS91c2UuZGFydCcgc2hvdyBUeXBlVXNlOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnOwoKLy8vIEVudW0gdGhhdCBkZWZpbmVzIGhvdyBhIG1lbWJlciBoYXMgYWNjZXNzIHRvIHRoZSBjdXJyZW50IHR5cGUgdmFyaWFibGVzLgplbnVtIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIHsKICAvLy8gVGhlIG1lbWJlciBoYXMgbm8gYWNjZXNzIHRvIHR5cGUgdmFyaWFibGVzLgogIG5vbmUsCgogIC8vLyBUeXBlIHZhcmlhYmxlcyBhcmUgYWNjZXNzaWJsZSBhcyBhIHByb3BlcnR5IG9uIGB0aGlzYC4KICBwcm9wZXJ0eSwKCiAgLy8vIFR5cGUgdmFyaWFibGVzIGFyZSBhY2Nlc3NpYmxlIGFzIHBhcmFtZXRlcnMgaW4gdGhlIGN1cnJlbnQgY29udGV4dC4KICBwYXJhbWV0ZXIsCgogIC8vLyBJZiB0aGUgY3VycmVudCBjb250ZXh0IGlzIGEgZ2VuZXJhdGl2ZSBjb25zdHJ1Y3RvciwgdHlwZSB2YXJpYWJsZXMgYXJlCiAgLy8vIGFjY2Vzc2libGUgYXMgcGFyYW1ldGVycywgb3RoZXJ3aXNlIHR5cGUgdmFyaWFibGVzIGFyZSBhY2Nlc3NpYmxlIGFzCiAgLy8vIGEgcHJvcGVydHkgb24gYHRoaXNgLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgZm9yIGluc3RhbmNlIGZpZWxkcyB3aG9zZSBpbml0aWFsaXplcnMgYXJlIGV4ZWN1dGVkIGluIHRoZQogIC8vLyBjb25zdHJ1Y3RvcnMuCiAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgdGhlIG5lZWQgZm9yIHRoaXMgYnkgYWRkaW5nIGEgZmllbGQtc2V0dGVyCiAgLy8gdG8gdGhlIEotbW9kZWwuCiAgaW5zdGFuY2VGaWVsZCwKfQoKLy8vIEZ1bmN0aW9ucyB0byBpbnNlcnQgdHlwZSBjaGVja2luZywgY29lcmNpb24sIGFuZCBpbnN0cnVjdGlvbiBpbnNlcnRpb24KLy8vIGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQgZm9yIGRhcnQgY29kZS4KYWJzdHJhY3QgY2xhc3MgVHlwZUJ1aWxkZXIgewogIGZpbmFsIEtlcm5lbFNzYUdyYXBoQnVpbGRlciBidWlsZGVyOwoKICBUeXBlQnVpbGRlcih0aGlzLmJ1aWxkZXIpOwoKICBKQ2xvc2VkV29ybGQgZ2V0IF9jbG9zZWRXb3JsZCA9PiBidWlsZGVyLmNsb3NlZFdvcmxkOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBfY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgLy8vIENyZWF0ZSBhIHR5cGUgbWFzayBmb3IgJ3RydXN0aW5nJyBhIERhcnRUeXBlLiBSZXR1cm5zIGBudWxsYCBpZiB0aGVyZSBpcwogIC8vLyBubyBhcHByb3hpbWF0aW5nIHR5cGUgbWFzayAoaS5lLiB0aGUgdHlwZSBtYXNrIHdvdWxkIGJlIGBkeW5hbWljYCkuCiAgQWJzdHJhY3RWYWx1ZSB0cnVzdFR5cGVNYXNrKERhcnRUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlID09IG51bGwpIHJldHVybiBudWxsOwogICAgdHlwZSA9IGJ1aWxkZXIubG9jYWxzSGFuZGxlci5zdWJzdEluQ29udGV4dCh0eXBlKTsKICAgIHR5cGUgPSB0eXBlLnVuYWxpYXNlZDsKICAgIGlmICh0eXBlLmlzRHluYW1pYykgcmV0dXJuIG51bGw7CiAgICBpZiAoIXR5cGUuaXNJbnRlcmZhY2VUeXBlKSByZXR1cm4gbnVsbDsKICAgIGlmICh0eXBlID09IF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5vYmplY3RUeXBlKSByZXR1cm4gbnVsbDsKICAgIC8vIFRoZSB0eXBlIGVsZW1lbnQgaXMgZWl0aGVyIGEgY2xhc3Mgb3IgdGhlIHZvaWQgZWxlbWVudC4KICAgIENsYXNzRW50aXR5IGVsZW1lbnQgPSAodHlwZSBhcyBJbnRlcmZhY2VUeXBlKS5lbGVtZW50OwogICAgcmV0dXJuIF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU51bGxhYmxlU3VidHlwZShlbGVtZW50KTsKICB9CgogIC8vLyBDcmVhdGUgYW4gaW5zdHJ1Y3Rpb24gdG8gc2ltcGx5IHRydXN0IHRoZSBwcm92aWRlZCB0eXBlLgogIEhJbnN0cnVjdGlvbiBfdHJ1c3RUeXBlKEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgRGFydFR5cGUgdHlwZSkgewogICAgYXNzZXJ0KHR5cGUgIT0gbnVsbCk7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSB0cnVzdFR5cGVNYXNrKHR5cGUpOwogICAgaWYgKG1hc2sgPT0gbnVsbCkgcmV0dXJuIG9yaWdpbmFsOwogICAgcmV0dXJuIG5ldyBIVHlwZUtub3duLnBpbm5lZChtYXNrLCBvcmlnaW5hbCk7CiAgfQoKICAvLy8gUHJvZHVjZXMgY29kZSB0aGF0IGNoZWNrcyB0aGUgcnVudGltZSB0eXBlIGlzIGFjdHVhbGx5IHRoZSB0eXBlIHNwZWNpZmllZAogIC8vLyBieSBhdHRlbXB0aW5nIGEgdHlwZSBjb252ZXJzaW9uLgogIEhJbnN0cnVjdGlvbiBfY2hlY2tUeXBlKEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgRGFydFR5cGUgdHlwZSkgewogICAgYXNzZXJ0KHR5cGUgIT0gbnVsbCk7CiAgICB0eXBlID0gYnVpbGRlci5sb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0KHR5cGUpOwogICAgSEluc3RydWN0aW9uIG90aGVyID0KICAgICAgICBidWlsZFR5cGVDb252ZXJzaW9uKG9yaWdpbmFsLCB0eXBlLCBIVHlwZUNvbnZlcnNpb24uVFlQRV9DSEVDSyk7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGlzIG9wZXJhdGlvbiBvbiBgcmVnaXN0cnlgIG1heSBiZSBpbmNvbnNpc3RlbnQuCiAgICAvLyBJZiBpdCBpcyBuZWVkZWQgdGhlbiBpdCBzZWVtcyBsaWtlbHkgdGhhdCBzaW1pbGFyIGludm9jYXRpb25zIG9mCiAgICAvLyBgYnVpbGRUeXBlQ29udmVyc2lvbmAgaW4gYFNzYUJ1aWxkZXIudmlzaXRBc2Agc2hvdWxkIGFsc28gYmUgZm9sbG93ZWQgYnkKICAgIC8vIGEgc2ltaWxhciBvcGVyYXRpb24gb24gYHJlZ2lzdHJ5YDsgb3RoZXJ3aXNlLCB0aGlzIG9uZSBtaWdodCBub3QgYmUKICAgIC8vIG5lZWRlZC4KICAgIGJ1aWxkZXIucmVnaXN0cnk/LnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5pc0NoZWNrKHR5cGUpKTsKICAgIGlmIChvdGhlciBpcyBIVHlwZUNvbnZlcnNpb24gJiYgb3RoZXIuaXNSZWR1bmRhbnQoYnVpbGRlci5jbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIG9yaWdpbmFsOwogICAgfQogICAgcmV0dXJuIG90aGVyOwogIH0KCiAgLy8vIFByb2R1Y2VzIGNvZGUgdGhhdCBjaGVja3MgdGhlIHJ1bnRpbWUgdHlwZSBpcyBhY3R1YWxseSB0aGUgdHlwZSBzcGVjaWZpZWQKICAvLy8gYnkgYXR0ZW1wdGluZyBhIHR5cGUgY29udmVyc2lvbi4KICBISW5zdHJ1Y3Rpb24gX2NoZWNrQm9vbENvbnZlcmlvbihISW5zdHJ1Y3Rpb24gb3JpZ2luYWwpIHsKICAgIHZhciBjaGVja0luc3RydWN0aW9uID0KICAgICAgICBIQm9vbENvbnZlcnNpb24ob3JpZ2luYWwsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmJvb2xUeXBlKTsKICAgIGlmIChjaGVja0luc3RydWN0aW9uLmlzUmVkdW5kYW50KF9jbG9zZWRXb3JsZCkpIHsKICAgICAgcmV0dXJuIG9yaWdpbmFsOwogICAgfQogICAgRGFydFR5cGUgYm9vbFR5cGUgPSBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuYm9vbFR5cGU7CiAgICBidWlsZGVyLnJlZ2lzdHJ5Py5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UuaXNDaGVjayhib29sVHlwZSkpOwogICAgcmV0dXJuIGNoZWNrSW5zdHJ1Y3Rpb247CiAgfQoKICBISW5zdHJ1Y3Rpb24gdHJ1c3RUeXBlT2ZQYXJhbWV0ZXIoSEluc3RydWN0aW9uIG9yaWdpbmFsLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSByZXR1cm4gb3JpZ2luYWw7CiAgICBISW5zdHJ1Y3Rpb24gdHJ1c3RlZCA9IF90cnVzdFR5cGUob3JpZ2luYWwsIHR5cGUpOwogICAgaWYgKHRydXN0ZWQgPT0gb3JpZ2luYWwpIHJldHVybiBvcmlnaW5hbDsKICAgIGlmICh0cnVzdGVkIGlzIEhUeXBlS25vd24gJiYgdHJ1c3RlZC5pc1JlZHVuZGFudChidWlsZGVyLmNsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm4gb3JpZ2luYWw7CiAgICB9CiAgICBidWlsZGVyLmFkZCh0cnVzdGVkKTsKICAgIHJldHVybiB0cnVzdGVkOwogIH0KCiAgSEluc3RydWN0aW9uIHBvdGVudGlhbGx5Q2hlY2tPclRydXN0VHlwZU9mUGFyYW1ldGVyKAogICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyQ29udGV4dCwgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBEYXJ0VHlwZSB0eXBlKSB7CiAgICBpZiAodHlwZSA9PSBudWxsKSByZXR1cm4gb3JpZ2luYWw7CiAgICBISW5zdHJ1Y3Rpb24gY2hlY2tlZE9yVHJ1c3RlZCA9IG9yaWdpbmFsOwogICAgQ2hlY2tQb2xpY3kgcGFyYW1ldGVyQ2hlY2tQb2xpY3kgPSBidWlsZGVyLmNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgIC5nZXRQYXJhbWV0ZXJDaGVja1BvbGljeShtZW1iZXJDb250ZXh0KTsKICAgIGlmIChwYXJhbWV0ZXJDaGVja1BvbGljeS5pc1RydXN0ZWQpIHsKICAgICAgY2hlY2tlZE9yVHJ1c3RlZCA9IF90cnVzdFR5cGUob3JpZ2luYWwsIHR5cGUpOwogICAgfSBlbHNlIGlmIChwYXJhbWV0ZXJDaGVja1BvbGljeS5pc0VtaXR0ZWQpIHsKICAgICAgY2hlY2tlZE9yVHJ1c3RlZCA9IF9jaGVja1R5cGUob3JpZ2luYWwsIHR5cGUpOwogICAgfQogICAgaWYgKGNoZWNrZWRPclRydXN0ZWQgPT0gb3JpZ2luYWwpIHJldHVybiBvcmlnaW5hbDsKICAgIGJ1aWxkZXIuYWRkKGNoZWNrZWRPclRydXN0ZWQpOwogICAgcmV0dXJuIGNoZWNrZWRPclRydXN0ZWQ7CiAgfQoKICAvLy8gRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0IGFuZCB0aGUgbW9kZSwgd3JhcCB0aGUgZ2l2ZW4gdHlwZSBpbiBhbgogIC8vLyBpbnN0cnVjdGlvbiB0aGF0IGNoZWNrcyB0aGUgdHlwZSBpcyB3aGF0IHdlIGV4cGVjdCBvciBhdXRvbWF0aWNhbGx5CiAgLy8vIHRydXN0cyB0aGUgd3JpdHRlbiB0eXBlLgogIEhJbnN0cnVjdGlvbiBwb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZkFzc2lnbm1lbnQoCiAgICAgIE1lbWJlckVudGl0eSBtZW1iZXJDb250ZXh0LCBISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIERhcnRUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlID09IG51bGwpIHJldHVybiBvcmlnaW5hbDsKICAgIEhJbnN0cnVjdGlvbiBjaGVja2VkT3JUcnVzdGVkID0gX3RydXN0VHlwZShvcmlnaW5hbCwgdHlwZSk7CiAgICBpZiAoY2hlY2tlZE9yVHJ1c3RlZCA9PSBvcmlnaW5hbCkgcmV0dXJuIG9yaWdpbmFsOwogICAgYnVpbGRlci5hZGQoY2hlY2tlZE9yVHJ1c3RlZCk7CiAgICByZXR1cm4gY2hlY2tlZE9yVHJ1c3RlZDsKICB9CgogIEhJbnN0cnVjdGlvbiBwb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZkNvbmRpdGlvbigKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlckNvbnRleHQsIEhJbnN0cnVjdGlvbiBvcmlnaW5hbCkgewogICAgRGFydFR5cGUgYm9vbFR5cGUgPSBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuYm9vbFR5cGU7CiAgICBISW5zdHJ1Y3Rpb24gY2hlY2tlZE9yVHJ1c3RlZCA9IG9yaWdpbmFsOwogICAgQ2hlY2tQb2xpY3kgY29uZGl0aW9uQ2hlY2tQb2xpY3kgPSBidWlsZGVyLmNsb3NlZFdvcmxkLmFubm90YXRpb25zRGF0YQogICAgICAgIC5nZXRDb25kaXRpb25DaGVja1BvbGljeShtZW1iZXJDb250ZXh0KTsKICAgIGlmIChjb25kaXRpb25DaGVja1BvbGljeS5pc1RydXN0ZWQpIHsKICAgICAgY2hlY2tlZE9yVHJ1c3RlZCA9IF90cnVzdFR5cGUob3JpZ2luYWwsIGJvb2xUeXBlKTsKICAgIH0gZWxzZSBpZiAoY29uZGl0aW9uQ2hlY2tQb2xpY3kuaXNFbWl0dGVkKSB7CiAgICAgIGNoZWNrZWRPclRydXN0ZWQgPSBfY2hlY2tCb29sQ29udmVyaW9uKG9yaWdpbmFsKTsKICAgIH0KICAgIGlmIChjaGVja2VkT3JUcnVzdGVkID09IG9yaWdpbmFsKSByZXR1cm4gb3JpZ2luYWw7CiAgICBidWlsZGVyLmFkZChjaGVja2VkT3JUcnVzdGVkKTsKICAgIHJldHVybiBjaGVja2VkT3JUcnVzdGVkOwogIH0KCiAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgY29tcHV0ZVR5cGVWYXJpYWJsZUFjY2VzcyhNZW1iZXJFbnRpdHkgbWVtYmVyKTsKCiAgLy8vIEhlbHBlciB0byBjcmVhdGUgYW4gaW5zdHJ1Y3Rpb24gdGhhdCBnZXRzIHRoZSB2YWx1ZSBvZiBhIHR5cGUgdmFyaWFibGUuCiAgSEluc3RydWN0aW9uIGFkZFR5cGVWYXJpYWJsZVJlZmVyZW5jZSgKICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlLCBNZW1iZXJFbnRpdHkgbWVtYmVyLAogICAgICB7U291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb259KSB7CiAgICBMb2NhbCB0eXBlVmFyaWFibGVMb2NhbCA9CiAgICAgICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyLmdldFR5cGVWYXJpYWJsZUFzTG9jYWwodHlwZSk7CgogICAgLy8vIFJlYWQgW3R5cGVWYXJpYWJsZV0gYXMgYSBwcm9wZXJ0eSBvZiBvbiBgdGhpc2AuCiAgICBISW5zdHJ1Y3Rpb24gcmVhZEFzUHJvcGVydHkoKSB7CiAgICAgIHJldHVybiByZWFkVHlwZVZhcmlhYmxlKHR5cGUsIG1lbWJlciwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CgogICAgLy8vIFJlYWQgW3R5cGVWYXJpYWJsZV0gYXMgYSBwYXJhbWV0ZXIuCiAgICBISW5zdHJ1Y3Rpb24gcmVhZEFzUGFyYW1ldGVyKCkgewogICAgICByZXR1cm4gYnVpbGRlci5sb2NhbHNIYW5kbGVyCiAgICAgICAgICAucmVhZExvY2FsKHR5cGVWYXJpYWJsZUxvY2FsLCBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgfQoKICAgIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzIHR5cGVWYXJpYWJsZUFjY2VzczsKICAgIGlmICh0eXBlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uIGlzIENsYXNzRW50aXR5KSB7CiAgICAgIHR5cGVWYXJpYWJsZUFjY2VzcyA9IGNvbXB1dGVUeXBlVmFyaWFibGVBY2Nlc3MobWVtYmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHR5cGVWYXJpYWJsZUFjY2VzcyA9IENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnBhcmFtZXRlcjsKICAgIH0KICAgIHN3aXRjaCAodHlwZVZhcmlhYmxlQWNjZXNzKSB7CiAgICAgIGNhc2UgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MucGFyYW1ldGVyOgogICAgICAgIHJldHVybiByZWFkQXNQYXJhbWV0ZXIoKTsKICAgICAgY2FzZSBDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5pbnN0YW5jZUZpZWxkOgogICAgICAgIGlmIChtZW1iZXIgIT0gYnVpbGRlci50YXJnZXRFbGVtZW50KSB7CiAgICAgICAgICAvLyBXaGVuIFttZW1iZXJdIGlzIGEgZmllbGQsIHdlIGNhbiBlaXRoZXIgYmUgZ2VuZXJhdGluZyBhIGNoZWNrZWQKICAgICAgICAgIC8vIHNldHRlciBvciBpbmxpbmluZyBpdHMgaW5pdGlhbGl6ZXIgaW4gYSBjb25zdHJ1Y3Rvci4gQW4gaW5pdGlhbGl6ZXIKICAgICAgICAgIC8vIGlzIG5ldmVyIGJ1aWx0IHN0YW5kYWxvbmUsIHNvIGluIHRoYXQgY2FzZSBbdGFyZ2V0XSBpcyBub3QgdGhlCiAgICAgICAgICAvLyBbbWVtYmVyXSBpdHNlbGYuCiAgICAgICAgICByZXR1cm4gcmVhZEFzUGFyYW1ldGVyKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZWFkQXNQcm9wZXJ0eSgpOwogICAgICBjYXNlIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnByb3BlcnR5OgogICAgICAgIHJldHVybiByZWFkQXNQcm9wZXJ0eSgpOwogICAgICBjYXNlIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLm5vbmU6CiAgICAgICAgYnVpbGRlci5yZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgICB0eXBlLmVsZW1lbnQsICdVbmV4cGVjdGVkIHR5cGUgdmFyaWFibGUgaW4gc3RhdGljIGNvbnRleHQuJyk7CiAgICB9CiAgICBidWlsZGVyLnJlcG9ydGVyLmludGVybmFsRXJyb3IoCiAgICAgICAgdHlwZS5lbGVtZW50LCAnVW5leHBlY3RlZCB0eXBlIHZhcmlhYmxlIGFjY2VzczogJHR5cGVWYXJpYWJsZUFjY2Vzcy4nKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIEdlbmVyYXRlIGNvZGUgdG8gZXh0cmFjdCB0aGUgdHlwZSBhcmd1bWVudCBmcm9tIHRoZSBvYmplY3QuCiAgSEluc3RydWN0aW9uIHJlYWRUeXBlVmFyaWFibGUoVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSwgTWVtYmVyRW50aXR5IG1lbWJlciwKICAgICAge1NvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgYXNzZXJ0KG1lbWJlci5pc0luc3RhbmNlTWVtYmVyKTsKICAgIGFzc2VydCh2YXJpYWJsZS5lbGVtZW50LnR5cGVEZWNsYXJhdGlvbiBpcyBDbGFzc0VudGl0eSk7CiAgICBISW5zdHJ1Y3Rpb24gdGFyZ2V0ID0KICAgICAgICBidWlsZGVyLmxvY2Fsc0hhbmRsZXIucmVhZFRoaXMoc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIEhJbnN0cnVjdGlvbiBpbnRlcmNlcHRvciA9CiAgICAgICAgbmV3IEhJbnRlcmNlcHRvcih0YXJnZXQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLm5vbk51bGxUeXBlKQogICAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgYnVpbGRlci5hZGQoaW50ZXJjZXB0b3IpOwogICAgYnVpbGRlci5wdXNoKG5ldyBIVHlwZUluZm9SZWFkVmFyaWFibGUuaW50ZXJjZXB0ZWQoCiAgICAgICAgdmFyaWFibGUsIGludGVyY2VwdG9yLCB0YXJnZXQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKQogICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb24pOwogICAgcmV0dXJuIGJ1aWxkZXIucG9wKCk7CiAgfQoKICBISW5zdHJ1Y3Rpb24gYnVpbGRUeXBlQXJndW1lbnRSZXByZXNlbnRhdGlvbnMoCiAgICAgIERhcnRUeXBlIHR5cGUsIE1lbWJlckVudGl0eSBzb3VyY2VFbGVtZW50LAogICAgICBbU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb25dKSB7CiAgICBhc3NlcnQoIXR5cGUuaXNUeXBlVmFyaWFibGUpOwogICAgLy8gQ29tcHV0ZSB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHR5cGUgYXJndW1lbnRzLCBpbmNsdWRpbmcgYWNjZXNzCiAgICAvLyB0byB0aGUgcnVudGltZSB0eXBlIGluZm9ybWF0aW9uIGZvciB0eXBlIHZhcmlhYmxlcyBhcyBpbnN0cnVjdGlvbnMuCiAgICBhc3NlcnQodHlwZS5pc0ludGVyZmFjZVR5cGUpOwogICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2UgPSB0eXBlOwogICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IDxISW5zdHJ1Y3Rpb24+W107CiAgICBmb3IgKERhcnRUeXBlIGFyZ3VtZW50IGluIGludGVyZmFjZS50eXBlQXJndW1lbnRzKSB7CiAgICAgIGlucHV0cy5hZGQoYW5hbHl6ZVR5cGVBcmd1bWVudChhcmd1bWVudCwgc291cmNlRWxlbWVudCwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbikpOwogICAgfQogICAgSEluc3RydWN0aW9uIHJlcHJlc2VudGF0aW9uID0gbmV3IEhUeXBlSW5mb0V4cHJlc3Npb24oCiAgICAgICAgVHlwZUluZm9FeHByZXNzaW9uS2luZC5JTlNUQU5DRSwKICAgICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGludGVyZmFjZS5lbGVtZW50KSwKICAgICAgICBpbnB1dHMsCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIHJldHVybiByZXByZXNlbnRhdGlvbjsKICB9CgogIEhJbnN0cnVjdGlvbiBhbmFseXplVHlwZUFyZ3VtZW50KAogICAgICBEYXJ0VHlwZSBhcmd1bWVudCwgTWVtYmVyRW50aXR5IHNvdXJjZUVsZW1lbnQsCiAgICAgIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIGlmIChidWlsZGVyLm9wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSkgewogICAgICByZXR1cm4gYW5hbHl6ZVR5cGVBcmd1bWVudE5ld1J0aShhcmd1bWVudCwgc291cmNlRWxlbWVudCwKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgICBhcmd1bWVudCA9IGFyZ3VtZW50LnVuYWxpYXNlZDsKICAgIGlmIChhcmd1bWVudC50cmVhdEFzRHluYW1pYykgewogICAgICAvLyBSZXByZXNlbnQgW2R5bmFtaWNdIGFzIFtudWxsXS4KICAgICAgcmV0dXJuIGJ1aWxkZXIuZ3JhcGguYWRkQ29uc3RhbnROdWxsKF9jbG9zZWRXb3JsZCk7CiAgICB9CgogICAgaWYgKGFyZ3VtZW50LmlzVHlwZVZhcmlhYmxlKSB7CiAgICAgIHJldHVybiBhZGRUeXBlVmFyaWFibGVSZWZlcmVuY2UoYXJndW1lbnQsIHNvdXJjZUVsZW1lbnQsCiAgICAgICAgICBzb3VyY2VJbmZvcm1hdGlvbjogc291cmNlSW5mb3JtYXRpb24pOwogICAgfQoKICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSA8SEluc3RydWN0aW9uPltdOwogICAgYXJndW1lbnQuZm9yRWFjaFR5cGVWYXJpYWJsZSgoVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBbHNvIG1ha2UgdGhpcyBjb25kaXRpb25hbCBvbiB3aGV0aGVyIHdlIGhhdmUKICAgICAgLy8gY2FsY3VsYXRlZCB3ZSBuZWVkIHRoYXQgcGFydGljdWxhciBtZXRob2Qgc2lnbmF0dXJlLgogICAgICBpbnB1dHMuYWRkKGFuYWx5emVUeXBlQXJndW1lbnQodmFyaWFibGUsIHNvdXJjZUVsZW1lbnQpKTsKICAgIH0pOwogICAgSEluc3RydWN0aW9uIHJlc3VsdCA9IG5ldyBIVHlwZUluZm9FeHByZXNzaW9uKAogICAgICAgIFR5cGVJbmZvRXhwcmVzc2lvbktpbmQuQ09NUExFVEUsCiAgICAgICAgYXJndW1lbnQsCiAgICAgICAgaW5wdXRzLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKQogICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICBidWlsZGVyLmFkZChyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEhJbnN0cnVjdGlvbiBhbmFseXplVHlwZUFyZ3VtZW50TmV3UnRpKAogICAgICBEYXJ0VHlwZSBhcmd1bWVudCwgTWVtYmVyRW50aXR5IHNvdXJjZUVsZW1lbnQsCiAgICAgIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIGFyZ3VtZW50ID0gYXJndW1lbnQudW5hbGlhc2VkOwoKICAgIGlmICghYXJndW1lbnQuY29udGFpbnNUeXBlVmFyaWFibGVzKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBydGkgPSBITG9hZFR5cGUoYXJndW1lbnQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKQogICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgYnVpbGRlci5hZGQocnRpKTsKICAgICAgcmV0dXJuIHJ0aTsKICAgIH0KICAgIC8vIFRPRE8oc3JhKTogTG9jYXRlIHR5cGUgZW52aXJvbm1lbnQuCiAgICBfRW52aXJvbm1lbnRFeHByZXNzaW9uQW5kU3RydWN0dXJlIGVudmlyb25tZW50QWNjZXNzID0KICAgICAgICBfYnVpbGRFbnZpcm9ubWVudEZvclR5cGUoYXJndW1lbnQsIHNvdXJjZUVsZW1lbnQsCiAgICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CgogICAgSEluc3RydWN0aW9uIHJ0aSA9IEhUeXBlRXZhbCgKICAgICAgICBlbnZpcm9ubWVudEFjY2Vzcy5leHByZXNzaW9uLAogICAgICAgIGVudmlyb25tZW50QWNjZXNzLnN0cnVjdHVyZSwKICAgICAgICBUeXBlRXhwcmVzc2lvblJlY2lwZShhcmd1bWVudCksCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIGJ1aWxkZXIuYWRkKHJ0aSk7CiAgICByZXR1cm4gcnRpOwogIH0KCiAgX0Vudmlyb25tZW50RXhwcmVzc2lvbkFuZFN0cnVjdHVyZSBfYnVpbGRFbnZpcm9ubWVudEZvclR5cGUoCiAgICAgIERhcnRUeXBlIHR5cGUsIE1lbWJlckVudGl0eSBtZW1iZXIsCiAgICAgIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIGFzc2VydCh0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcyk7CiAgICAvLyBCdWlsZCB0aGUgZW52aXJvbm1lbnQgZm9yIGVhY2ggYWNjZXNzLCBhbmQgaG9wZSBHVk4gcmVkdWNlcyB0aGUgbGFyZ2VyCiAgICAvLyBudW1iZXIgb2YgZXhwcmVzc2lvbnMuIEFub3RoZXIgb3B0aW9uIGlzIHRvIHByZWNvbXB1dGUgdGhlIGVudmlyb25tZW50IGF0CiAgICAvLyBwcm9jZWR1cmUgZW50cnkgYW5kIG9wdGltaXplIGVhcmx5LWV4aXRzIGJ5IHNpbmtpbmcgdGhlIHByZWNvbXB1dGVkCiAgICAvLyBlbnZpcm9ubWVudC4KCiAgICAvLyBTcGxpdCB0aGUgdHlwZSB2YXJpYWJsZXMgaW50byBjbGFzcy1zY29wZSBhbmQgZnVuY3Rpb24tc2NvcGUocykuCiAgICBib29sIHVzZXNJbnN0YW5jZVBhcmFtZXRlcnMgPSBmYWxzZTsKICAgIEludGVyZmFjZVR5cGUgaW50ZXJmYWNlVHlwZTsKICAgIFNldDxUeXBlVmFyaWFibGVUeXBlPiBwYXJhbWV0ZXJzID0gU2V0KCk7CgogICAgdm9pZCBwcm9jZXNzVHlwZVZhcmlhYmxlKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSkgewogICAgICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyB0eXBlVmFyaWFibGVBY2Nlc3M7CiAgICAgIGlmICh0eXBlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uIGlzIENsYXNzRW50aXR5KSB7CiAgICAgICAgdHlwZVZhcmlhYmxlQWNjZXNzID0gY29tcHV0ZVR5cGVWYXJpYWJsZUFjY2VzcyhtZW1iZXIpOwogICAgICAgIGludGVyZmFjZVR5cGUgPSBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50CiAgICAgICAgICAgIC5nZXRUaGlzVHlwZSh0eXBlLmVsZW1lbnQudHlwZURlY2xhcmF0aW9uKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0eXBlVmFyaWFibGVBY2Nlc3MgPSBDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5wYXJhbWV0ZXI7CiAgICAgIH0KICAgICAgc3dpdGNoICh0eXBlVmFyaWFibGVBY2Nlc3MpIHsKICAgICAgICBjYXNlIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnBhcmFtZXRlcjoKICAgICAgICAgIHBhcmFtZXRlcnMuYWRkKHR5cGUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MuaW5zdGFuY2VGaWVsZDoKICAgICAgICAgIGlmIChtZW1iZXIgIT0gYnVpbGRlci50YXJnZXRFbGVtZW50KSB7CiAgICAgICAgICAgIC8vIFdoZW4gW21lbWJlcl0gaXMgYSBmaWVsZCwgd2UgY2FuIGVpdGhlciBiZSBnZW5lcmF0aW5nIGEgY2hlY2tlZAogICAgICAgICAgICAvLyBzZXR0ZXIgb3IgaW5saW5pbmcgaXRzIGluaXRpYWxpemVyIGluIGEgY29uc3RydWN0b3IuIEFuCiAgICAgICAgICAgIC8vIGluaXRpYWxpemVyIGlzIG5ldmVyIGJ1aWx0IHN0YW5kYWxvbmUsIHNvIGluIHRoYXQgY2FzZSBbdGFyZ2V0XQogICAgICAgICAgICAvLyBpcyBub3QgdGhlIFttZW1iZXJdIGl0c2VsZi4KICAgICAgICAgICAgcGFyYW1ldGVycy5hZGQodHlwZSk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHVzZXNJbnN0YW5jZVBhcmFtZXRlcnMgPSB0cnVlOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIGNhc2UgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MucHJvcGVydHk6CiAgICAgICAgICB1c2VzSW5zdGFuY2VQYXJhbWV0ZXJzID0gdHJ1ZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgYnVpbGRlci5yZXBvcnRlci5pbnRlcm5hbEVycm9yKAogICAgICAgICAgICAgIHR5cGUuZWxlbWVudCwgJ1VuZXhwZWN0ZWQgdHlwZSB2YXJpYWJsZSBpbiBzdGF0aWMgY29udGV4dC4nKTsKICAgICAgfQogICAgfQoKICAgIHR5cGUuZm9yRWFjaFR5cGVWYXJpYWJsZShwcm9jZXNzVHlwZVZhcmlhYmxlKTsKCiAgICBISW5zdHJ1Y3Rpb24gZW52aXJvbm1lbnQ7CiAgICBUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUgc3RydWN0dXJlOwoKICAgIGlmICh1c2VzSW5zdGFuY2VQYXJhbWV0ZXJzKSB7CiAgICAgIEhJbnN0cnVjdGlvbiB0YXJnZXQgPQogICAgICAgICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyLnJlYWRUaGlzKHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIC8vIFRPRE8oc3JhKTogSEluc3RhbmNlRW52aXJvbm1lbnQgc2hvdWxkIHByb2JhYmx5IHRha2UgYW4gaW50ZXJjZXB0b3IgdG8KICAgICAgLy8gYWxsb3cgdGhlIGdldEludGVyY2VwdG9yIGNhbGwgdG8gYmUgcmV1c2VkLgogICAgICBlbnZpcm9ubWVudCA9CiAgICAgICAgICBISW5zdGFuY2VFbnZpcm9ubWVudCh0YXJnZXQsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKQogICAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICAgIGJ1aWxkZXIuYWRkKGVudmlyb25tZW50KTsKICAgICAgc3RydWN0dXJlID0gRnVsbFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZShjbGFzc1R5cGU6IGludGVyZmFjZVR5cGUpOwogICAgfQoKICAgIC8vIFRPRE8oc3JhKTogVmlzaXQgcGFyYW1ldGVycyBpbiBzb3VyY2Utb3JkZXIuCiAgICBmb3IgKFR5cGVWYXJpYWJsZVR5cGUgcGFyYW1ldGVyIGluIHBhcmFtZXRlcnMpIHsKICAgICAgTG9jYWwgdHlwZVZhcmlhYmxlTG9jYWwgPQogICAgICAgICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyLmdldFR5cGVWYXJpYWJsZUFzTG9jYWwocGFyYW1ldGVyKTsKICAgICAgSEluc3RydWN0aW9uIGFjY2VzcyA9IGJ1aWxkZXIubG9jYWxzSGFuZGxlcgogICAgICAgICAgLnJlYWRMb2NhbCh0eXBlVmFyaWFibGVMb2NhbCwgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICAgIGlmIChlbnZpcm9ubWVudCA9PSBudWxsKSB7CiAgICAgICAgZW52aXJvbm1lbnQgPSBhY2Nlc3M7CiAgICAgICAgc3RydWN0dXJlID0gU2luZ2xldG9uVHlwZUVudmlyb25tZW50U3RydWN0dXJlKHBhcmFtZXRlcik7CiAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlIGlzIFNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSkgewogICAgICAgIFNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBzaW5nbGV0b25TdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgICAgLy8gQ29udmVydCBhIHNpbmdsZXRvbiBlbnZpcm9ubWVudCBpbnRvIGEgc2luZ2xldG9uIHR1cGxlIGFuZCBleHRlbmQgaXQKICAgICAgICAvLyB2aWEgJ2JpbmQnLiBpLmUuIGdlbmVyYXRlIGBlbnYxLl9ldmFsKCJAPDA+IikuX2JpbmQoZW52MilgIFRPRE8oc3JhKToKICAgICAgICAvLyBIYXZlIGEgYmluZDEgaW5zdHJ1Y3Rpb24uCiAgICAgICAgLy8gVE9ETyhzcmEpOiBBZGQgYSAnUnRpLl9iaW5kMScgbWV0aG9kIHRvIHNob3J0ZW4gYW5kIGFjY2VsZXJhdGUgdGhpcwogICAgICAgIC8vIGNvbW1vbiBjYXNlLgogICAgICAgIEhJbnN0cnVjdGlvbiBzaW5nbGV0b25UdXBsZSA9IEhUeXBlRXZhbCgKICAgICAgICAgICAgZW52aXJvbm1lbnQsCiAgICAgICAgICAgIHN0cnVjdHVyZSwKICAgICAgICAgICAgRnVsbFR5cGVFbnZpcm9ubWVudFJlY2lwZSh0eXBlczogW3NpbmdsZXRvblN0cnVjdHVyZS52YXJpYWJsZV0pLAogICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSkKICAgICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgICBidWlsZGVyLmFkZChzaW5nbGV0b25UdXBsZSk7CiAgICAgICAgZW52aXJvbm1lbnQgPQogICAgICAgICAgICBIVHlwZUJpbmQoc2luZ2xldG9uVHVwbGUsIGFjY2VzcywgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICAgIGJ1aWxkZXIuYWRkKGVudmlyb25tZW50KTsKICAgICAgICBzdHJ1Y3R1cmUgPSBGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlKAogICAgICAgICAgICBiaW5kaW5nczogW3NpbmdsZXRvblN0cnVjdHVyZS52YXJpYWJsZSwgcGFyYW1ldGVyXSk7CiAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlIGlzIEZ1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUpIHsKICAgICAgICBGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlIGZ1bGxTdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmU7CiAgICAgICAgZW52aXJvbm1lbnQgPQogICAgICAgICAgICBIVHlwZUJpbmQoZW52aXJvbm1lbnQsIGFjY2VzcywgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICAgIGJ1aWxkZXIuYWRkKGVudmlyb25tZW50KTsKICAgICAgICBzdHJ1Y3R1cmUgPSBGdWxsVHlwZUVudmlyb25tZW50U3RydWN0dXJlKAogICAgICAgICAgICBjbGFzc1R5cGU6IGZ1bGxTdHJ1Y3R1cmUuY2xhc3NUeXBlLAogICAgICAgICAgICBiaW5kaW5nczogWy4uLmZ1bGxTdHJ1Y3R1cmUuYmluZGluZ3MsIHBhcmFtZXRlcl0pOwogICAgICB9IGVsc2UgewogICAgICAgIGJ1aWxkZXIucmVwb3J0ZXIuaW50ZXJuYWxFcnJvcihwYXJhbWV0ZXIuZWxlbWVudCwgJ1VuZXhwZWN0ZWQnKTsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBfRW52aXJvbm1lbnRFeHByZXNzaW9uQW5kU3RydWN0dXJlKGVudmlyb25tZW50LCBzdHJ1Y3R1cmUpOwogIH0KCiAgLy8vIEJ1aWxkIGEgW0hUeXBlQ29udmVyc2lvbl0gZm9yIGNvbnZlcnRpbmcgW29yaWdpbmFsXSB0byB0eXBlIFt0eXBlXS4KICAvLy8KICAvLy8gSW52YXJpYW50OiBbdHlwZV0gbXVzdCBiZSB2YWxpZCBpbiB0aGUgY29udGV4dC4KICAvLy8gU2VlIFtMb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0XS4KICBISW5zdHJ1Y3Rpb24gYnVpbGRUeXBlQ29udmVyc2lvbigKICAgICAgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBEYXJ0VHlwZSB0eXBlLCBpbnQga2luZCwKICAgICAge1NvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgaWYgKGJ1aWxkZXIub3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgIHJldHVybiBidWlsZEFzQ2hlY2sob3JpZ2luYWwsIHR5cGUsCiAgICAgICAgICBpc1R5cGVFcnJvcjoga2luZCA9PSBIVHlwZUNvbnZlcnNpb24uVFlQRV9DSEVDSywKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CgogICAgaWYgKHR5cGUgPT0gbnVsbCkgcmV0dXJuIG9yaWdpbmFsOwogICAgdHlwZSA9IHR5cGUudW5hbGlhc2VkOwogICAgaWYgKHR5cGUuaXNJbnRlcmZhY2VUeXBlICYmICF0eXBlLnRyZWF0QXNSYXcpIHsKICAgICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2VUeXBlID0gdHlwZTsKICAgICAgQWJzdHJhY3RWYWx1ZSBzdWJ0eXBlID0KICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU51bGxhYmxlU3VidHlwZShpbnRlcmZhY2VUeXBlLmVsZW1lbnQpOwogICAgICBISW5zdHJ1Y3Rpb24gcmVwcmVzZW50YXRpb25zID0gYnVpbGRUeXBlQXJndW1lbnRSZXByZXNlbnRhdGlvbnMoCiAgICAgICAgICB0eXBlLCBidWlsZGVyLnNvdXJjZUVsZW1lbnQsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgYnVpbGRlci5hZGQocmVwcmVzZW50YXRpb25zKTsKICAgICAgcmV0dXJuIG5ldyBIVHlwZUNvbnZlcnNpb24ud2l0aFR5cGVSZXByZXNlbnRhdGlvbigKICAgICAgICAgIHR5cGUsIGtpbmQsIHN1YnR5cGUsIG9yaWdpbmFsLCByZXByZXNlbnRhdGlvbnMpCiAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgfSBlbHNlIGlmICh0eXBlLmlzVHlwZVZhcmlhYmxlKSB7CiAgICAgIEFic3RyYWN0VmFsdWUgc3VidHlwZSA9IG9yaWdpbmFsLmluc3RydWN0aW9uVHlwZTsKICAgICAgSEluc3RydWN0aW9uIHR5cGVWYXJpYWJsZSA9CiAgICAgICAgICBhZGRUeXBlVmFyaWFibGVSZWZlcmVuY2UodHlwZSwgYnVpbGRlci5zb3VyY2VFbGVtZW50KTsKICAgICAgcmV0dXJuIG5ldyBIVHlwZUNvbnZlcnNpb24ud2l0aFR5cGVSZXByZXNlbnRhdGlvbigKICAgICAgICAgIHR5cGUsIGtpbmQsIHN1YnR5cGUsIG9yaWdpbmFsLCB0eXBlVmFyaWFibGUpCiAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgfSBlbHNlIGlmICh0eXBlLmlzRnVuY3Rpb25UeXBlIHx8IHR5cGUuaXNGdXR1cmVPcikgewogICAgICBISW5zdHJ1Y3Rpb24gcmVpZmllZFR5cGUgPQogICAgICAgICAgYW5hbHl6ZVR5cGVBcmd1bWVudCh0eXBlLCBidWlsZGVyLnNvdXJjZUVsZW1lbnQpOwogICAgICAvLyBUeXBlTWFza3MgZG9uJ3QgZW5jb2RlIGZ1bmN0aW9uIHR5cGVzIG9yIEZ1dHVyZU9yIHR5cGVzLgogICAgICBBYnN0cmFjdFZhbHVlIHJlZmluZWRNYXNrID0gb3JpZ2luYWwuaW5zdHJ1Y3Rpb25UeXBlOwogICAgICByZXR1cm4gbmV3IEhUeXBlQ29udmVyc2lvbi53aXRoVHlwZVJlcHJlc2VudGF0aW9uKAogICAgICAgICAgdHlwZSwga2luZCwgcmVmaW5lZE1hc2ssIG9yaWdpbmFsLCByZWlmaWVkVHlwZSkKICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gb3JpZ2luYWwuY29udmVydFR5cGUoX2Nsb3NlZFdvcmxkLCB0eXBlLCBraW5kKQogICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIH0KICB9CgogIC8vLyBCdWlsZCBhIFtIQXNDaGVja10gZm9yIGNvbnZlcnRpbmcgW29yaWdpbmFsXSB0byB0eXBlIFt0eXBlXS4KICAvLy8KICAvLy8gSW52YXJpYW50OiBbdHlwZV0gbXVzdCBiZSB2YWxpZCBpbiB0aGUgY29udGV4dC4KICAvLy8gU2VlIFtMb2NhbHNIYW5kbGVyLnN1YnN0SW5Db250ZXh0XS4KICBISW5zdHJ1Y3Rpb24gYnVpbGRBc0NoZWNrKEhJbnN0cnVjdGlvbiBvcmlnaW5hbCwgRGFydFR5cGUgdHlwZSwKICAgICAge2Jvb2wgaXNUeXBlRXJyb3IsIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgaWYgKHR5cGUgPT0gbnVsbCkgcmV0dXJuIG9yaWdpbmFsOwogICAgdHlwZSA9IHR5cGUudW5hbGlhc2VkOwoKICAgIGlmICh0eXBlLmlzRHluYW1pYykgcmV0dXJuIG9yaWdpbmFsOwogICAgaWYgKHR5cGUuaXNWb2lkKSByZXR1cm4gb3JpZ2luYWw7CiAgICBpZiAodHlwZSA9PSBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMub2JqZWN0VHlwZSkgcmV0dXJuIG9yaWdpbmFsOwoKICAgIEhJbnN0cnVjdGlvbiByZWlmaWVkVHlwZSA9IGFuYWx5emVUeXBlQXJndW1lbnROZXdSdGkoCiAgICAgICAgdHlwZSwgYnVpbGRlci5zb3VyY2VFbGVtZW50LAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBBYnN0cmFjdFZhbHVlV2l0aFByZWNpc2lvbiBjaGVja2VkVHlwZSA9CiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlRnJvbVN0YXRpY1R5cGUodHlwZSk7CiAgICBBYnN0cmFjdFZhbHVlIGluc3RydWN0aW9uVHlwZSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLmludGVyc2VjdGlvbigKICAgICAgICBvcmlnaW5hbC5pbnN0cnVjdGlvblR5cGUsIGNoZWNrZWRUeXBlLmFic3RyYWN0VmFsdWUpOwogICAgcmV0dXJuIEhBc0NoZWNrKAogICAgICAgIG9yaWdpbmFsLCByZWlmaWVkVHlwZSwgY2hlY2tlZFR5cGUsIHR5cGUsIGlzVHlwZUVycm9yLCBpbnN0cnVjdGlvblR5cGUpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICB9Cn0KCmNsYXNzIF9FbnZpcm9ubWVudEV4cHJlc3Npb25BbmRTdHJ1Y3R1cmUgewogIGZpbmFsIEhJbnN0cnVjdGlvbiBleHByZXNzaW9uOwogIGZpbmFsIFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZSBzdHJ1Y3R1cmU7CiAgX0Vudmlyb25tZW50RXhwcmVzc2lvbkFuZFN0cnVjdHVyZSh0aGlzLmV4cHJlc3Npb24sIHRoaXMuc3RydWN0dXJlKTsKfQqB7wBOTjwBHhUkITEnKBosGAFNHzIIAT0MAUoNAU1LHAZOFEsVEQIBSzAdJwEdATgBMigBT0ovIzcbJSxFPztABAE/QhouJzIEAVAnQho3GUlOSFBLD0JOFwYSBAFQJzwbQjYXBj5GHQQBTCc3Lk0XBhoUBAE3SicuSzEqNTE1BjcjHQQBR0ofOEonQDcjHQQBNzs+LksxKjkxOAY3Ix0EAUoBTikyLx48ATgkLDEGASwlI08GATA3Pg0+BiIuIjIvTVFMHiQKIS0hKShKBiRQEQQBQlAvJT0aTh9DMx44STAaBAExMS8iSksiJDI5PjIGOylIECovGwQBJDUvLEAxBiMjKDoGASM/MQYBMj9MPkAIMykSECovGRMEASo1LyMBK08xGBIGKzs6MwEiJiUoKi8WEAQBPyovKE5RSxQBSCkhLgE2MjlAODgPQAgkMCASNDFPR08rIhQMKRIvKRIRKkwIBgEzAR4oASIcUFA1FEk1IEoGATQ1IEMyTwEhHkJDSlBRJU8YMRkXTS4zJRZRIjJBPkAWTiIyMD8PSQgGAUcEAUoGNiokNi8sKjsxBgEnGzQqHk1HOyQ5OjEmOCJBOTcxOSE8Qjw5OjENPDEGBAFDBjYqQkEnGwEpJkkBOiUvLTlHPhVQLwQCASshLEcCASpwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvdHlwZV9idWlsZGVyLmRhcnQ6c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvYnVpbGRlcl9rZXJuZWwuZGFydMABMmYvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2Nsb3N1cmUuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi9uYW1lcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RhbnRfc3lzdGVtLmRhcnQnIGFzIGNvbnN0YW50X3N5c3RlbTsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2p1bXBzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9jb25zdGFudHMuZGFydCc7CmltcG9ydCAnLi4vaXIvc3RhdGljX3R5cGVfcHJvdmlkZXIuZGFydCc7CmltcG9ydCAnLi4vaXIvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ZpZWxkX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2xvY2Fscy5kYXJ0JyBzaG93IEp1bXBWaXNpdG9yOwppbXBvcnQgJy4uL2pzX21vZGVsL2pzX3dvcmxkLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9iZWhhdmlvci5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NpZGVfZWZmZWN0cy5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CmltcG9ydCAnaW5mZXJyZXJfZW5naW5lLmRhcnQnOwppbXBvcnQgJ2xvY2Fsc19oYW5kbGVyLmRhcnQnOwppbXBvcnQgJ3R5cGVfZ3JhcGhfbm9kZXMuZGFydCc7CmltcG9ydCAndHlwZV9zeXN0ZW0uZGFydCc7CgovLy8gW0tlcm5lbFR5cGVHcmFwaEJ1aWxkZXJdIGNvbnN0cnVjdHMgYSB0eXBlLWluZmVyZW5jZSBncmFwaCBmb3IgYSBwYXJ0aWN1bGFyCi8vLyBlbGVtZW50LgovLy8KLy8vIENhbGxpbmcgW3J1bl0gd2lsbCBzdGFydCB0aGUgd29yayBvZiB2aXNpdGluZyB0aGUgYm9keSBvZiB0aGUgY29kZSB0bwovLy8gY29uc3RydWN0IGEgc2V0IG9mIGluZmVyZW5jZS1ub2RlcyB0aGF0IGFic3RyYWN0bHkgcmVwcmVzZW50IHdoYXQgdGhlIGNvZGUKLy8vIGlzIGRvaW5nLgpjbGFzcyBLZXJuZWxUeXBlR3JhcGhCdWlsZGVyIGV4dGVuZHMgaXIuVmlzaXRvcjxUeXBlSW5mb3JtYXRpb24+IHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgSnNDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgSW5mZXJyZXJFbmdpbmUgX2luZmVycmVyOwogIGZpbmFsIFR5cGVTeXN0ZW0gX3R5cGVzOwogIGZpbmFsIE1lbWJlckVudGl0eSBfYW5hbHl6ZWRNZW1iZXI7CiAgZmluYWwgaXIuTm9kZSBfYW5hbHl6ZWROb2RlOwogIGZpbmFsIEtlcm5lbFRvTG9jYWxzTWFwIF9sb2NhbHNNYXA7CiAgZmluYWwgR2xvYmFsVHlwZUluZmVyZW5jZUVsZW1lbnREYXRhIF9tZW1iZXJEYXRhOwogIGZpbmFsIGJvb2wgX2luR2VuZXJhdGl2ZUNvbnN0cnVjdG9yOwoKICBMb2NhbFN0YXRlIF9zdGF0ZUludGVybmFsOwogIExvY2FsU3RhdGUgX3N0YXRlQWZ0ZXJXaGVuVHJ1ZUludGVybmFsOwogIExvY2FsU3RhdGUgX3N0YXRlQWZ0ZXJXaGVuRmFsc2VJbnRlcm5hbDsKCiAgLy8vIFJldHVybnMgdGhlIGN1cnJlbnQgbG9jYWwgc3RhdGUgZm9yIHdoZW4gdGhlIGJvb2xlYW4gdmFsdWUgb2YgdGhlIG1vc3QKICAvLy8gcmVjZW50bHkgdmlzaXRlZCBub2RlIGlzIG5vdCB0YWtlbiBpbnRvIGFjY291bnQKICBMb2NhbFN0YXRlIGdldCBfc3RhdGUgewogICAgcmV0dXJuIF9zdGF0ZUludGVybmFsOwogIH0KCiAgLy8vIFNldHMgdGhlIGN1cnJlbnQgbG9jYWwgc3RhdGUgZm9yIHdoZW4gdGhlIGJvb2xlYW4gdmFsdWUgb2YgdGhlIG1vc3QKICAvLy8gcmVjZW50bHkgdmlzaXRlZCBub2RlIGlzIG5vdCB0YWtlbiBpbnRvIGFjY291bnQKICAvLy8KICAvLy8gVGhpcyB1c2VkIGZvciB3aGVuIHRoZSBtb3N0IHJlY2VudGx5IHZpc2l0ZWQgbm9kZSBpcyBub3QgYSBib29sZWFuCiAgLy8vIGV4cHJlc3Npb24gYW5kIHRoZXJlIGZvciBhbHNvIHJlc2V0cyBbX3N0YXRlQWZ0ZXJXaGVuVHJ1ZV0gYW5kCiAgLy8vIFtfc3RhdGVBZnRlcldoZW5GYWxzZV0gdG8gdGhlIHNhbWUgdmFsdWUuCiAgdm9pZCBzZXQgX3N0YXRlKExvY2FsU3RhdGUgdmFsdWUpIHsKICAgIF9zdGF0ZUludGVybmFsID0gdmFsdWU7CiAgICBfc3RhdGVBZnRlcldoZW5UcnVlSW50ZXJuYWwgPSBfc3RhdGVBZnRlcldoZW5GYWxzZUludGVybmFsID0gbnVsbDsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBjdXJyZW50IGxvY2FsIHN0YXRlIGZvciB3aGVuIHRoZSBtb3N0IHJlY2VudGx5IHZpc2l0ZWQgbm9kZQogIC8vLyBoYXMgZXZhbHVhdGVkIHRvIGB0cnVlYC4KICAvLy8KICAvLy8gSWYgdGhlIG1vc3QgcmVjZW50bHkgdmlzaXRlZCBub2RlIGlzIG5vdCBhIGJvb2xlYW4gZXhwcmVzc2lvbiB0aGVuIHRoaXMgaXMKICAvLy8gdGhlIHNhbWUgYXMgW19zdGF0ZV0uCiAgTG9jYWxTdGF0ZSBnZXQgX3N0YXRlQWZ0ZXJXaGVuVHJ1ZSA9PgogICAgICBfc3RhdGVBZnRlcldoZW5UcnVlSW50ZXJuYWwgPz8gX3N0YXRlSW50ZXJuYWw7CgogIC8vLyBSZXR1cm5zIHRoZSBjdXJyZW50IGxvY2FsIHN0YXRlIGZvciB3aGVuIHRoZSBtb3N0IHJlY2VudGx5IHZpc2l0ZWQgbm9kZQogIC8vLyBoYXMgZXZhbHVhdGVkIHRvIGBmYWxzZWAuCiAgLy8vCiAgLy8vIElmIHRoZSBtb3N0IHJlY2VudGx5IHZpc2l0ZWQgbm9kZSBpcyBub3QgYSBib29sZWFuIGV4cHJlc3Npb24gdGhlbiB0aGlzIGlzCiAgLy8vIHRoZSBzYW1lIGFzIFtfc3RhdGVdLgogIExvY2FsU3RhdGUgZ2V0IF9zdGF0ZUFmdGVyV2hlbkZhbHNlID0+CiAgICAgIF9zdGF0ZUFmdGVyV2hlbkZhbHNlSW50ZXJuYWwgPz8gX3N0YXRlSW50ZXJuYWw7CgogIC8vLyBTZXRzIHRoZSBjdXJyZW50IGxvY2FsIHN0YXRlLiBbYmFzZV0gaXMgdGhlIGxvY2FsIHN0YXRlIGZvciB3aGVuIHRoZQogIC8vLyBib29sZWFuIHZhbHVlIG9mIHRoZSBtb3N0IHJlY2VudGx5IHZpc2l0ZWQgbm9kZSBpcyBub3QgdGFrZW4gaW50byBhY2NvdW50LgogIC8vLyBbd2hlblRydWVdIGFuZCBbd2hlbkZhbHNlXSBhcmUgdGhlIGxvY2FsIHN0YXRlIGZvciB3aGVuIHRoZSBib29sZWFuIHZhbHVlCiAgLy8vIG9mIHRoZSBtb3N0IHJlY2VudGx5IHZpc2l0ZWQgbm9kZSBpcyBgdHJ1ZWAgb3IgYGZhbHNlYCwgcmVzcGVjdGl2ZWx5LgogIHZvaWQgX3NldFN0YXRlQWZ0ZXIoCiAgICAgIExvY2FsU3RhdGUgYmFzZSwgTG9jYWxTdGF0ZSB3aGVuVHJ1ZSwgTG9jYWxTdGF0ZSB3aGVuRmFsc2UpIHsKICAgIF9zdGF0ZUludGVybmFsID0gYmFzZTsKICAgIF9zdGF0ZUFmdGVyV2hlblRydWVJbnRlcm5hbCA9IHdoZW5UcnVlOwogICAgX3N0YXRlQWZ0ZXJXaGVuRmFsc2VJbnRlcm5hbCA9IHdoZW5GYWxzZTsKICB9CgogIGZpbmFsIFNpZGVFZmZlY3RzQnVpbGRlciBfc2lkZUVmZmVjdHNCdWlsZGVyOwogIGZpbmFsIE1hcDxKdW1wVGFyZ2V0LCBMaXN0PExvY2FsU3RhdGU+PiBfYnJlYWtzRm9yID0KICAgICAgPEp1bXBUYXJnZXQsIExpc3Q8TG9jYWxTdGF0ZT4+e307CiAgZmluYWwgTWFwPEp1bXBUYXJnZXQsIExpc3Q8TG9jYWxTdGF0ZT4+IF9jb250aW51ZXNGb3IgPQogICAgICA8SnVtcFRhcmdldCwgTGlzdDxMb2NhbFN0YXRlPj57fTsKICBUeXBlSW5mb3JtYXRpb24gX3JldHVyblR5cGU7CiAgZmluYWwgU2V0PExvY2FsPiBfY2FwdHVyZWRWYXJpYWJsZXMgPSBuZXcgU2V0PExvY2FsPigpOwogIGZpbmFsIE1hcDxMb2NhbCwgRmllbGRFbnRpdHk+IF9jYXB0dXJlZEFuZEJveGVkOwoKICBmaW5hbCBTdGF0aWNUeXBlUHJvdmlkZXIgX3N0YXRpY1R5cGVQcm92aWRlcjsKCiAgLy8vIFdoZXRoZXIgd2UgY3VycmVudGx5IHRha2VuIHRoZSBib29sZWFuIHJlc3VsdCBvZiBpcy1jaGVja3Mgb3IgbnVsbC1jaGVja3MKICAvLy8gaW50byBhY2NvdW50IGluIHRoZSBsb2NhbCBzdGF0ZS4KICBib29sIF9hY2N1bXVsYXRlSXNDaGVja3MgPSBmYWxzZTsKCiAgS2VybmVsVHlwZUdyYXBoQnVpbGRlcigKICAgICAgdGhpcy5fb3B0aW9ucywKICAgICAgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuX2luZmVycmVyLAogICAgICB0aGlzLl9hbmFseXplZE1lbWJlciwKICAgICAgdGhpcy5fYW5hbHl6ZWROb2RlLAogICAgICB0aGlzLl9sb2NhbHNNYXAsCiAgICAgIHRoaXMuX3N0YXRpY1R5cGVQcm92aWRlciwKICAgICAgW3RoaXMuX3N0YXRlSW50ZXJuYWwsCiAgICAgIE1hcDxMb2NhbCwgRmllbGRFbnRpdHk+IGNhcHR1cmVkQW5kQm94ZWRdKQogICAgICA6IHRoaXMuX3R5cGVzID0gX2luZmVycmVyLnR5cGVzLAogICAgICAgIHRoaXMuX21lbWJlckRhdGEgPSBfaW5mZXJyZXIuZGF0YU9mTWVtYmVyKF9hbmFseXplZE1lbWJlciksCiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU2hvdWxkIHNpZGUgZWZmZWN0cyBhbHNvIGJlIHRyYWNrZWQgZm9yIGZpZWxkCiAgICAgICAgLy8gaW5pdGlhbGl6ZXJzPwogICAgICAgIHRoaXMuX3NpZGVFZmZlY3RzQnVpbGRlciA9IF9hbmFseXplZE1lbWJlciBpcyBGdW5jdGlvbkVudGl0eQogICAgICAgICAgICA/IF9pbmZlcnJlci5pbmZlcnJlZERhdGFCdWlsZGVyCiAgICAgICAgICAgICAgICAuZ2V0U2lkZUVmZmVjdHNCdWlsZGVyKF9hbmFseXplZE1lbWJlcikKICAgICAgICAgICAgOiBuZXcgU2lkZUVmZmVjdHNCdWlsZGVyLmZyZWUoX2FuYWx5emVkTWVtYmVyKSwKICAgICAgICB0aGlzLl9pbkdlbmVyYXRpdmVDb25zdHJ1Y3RvciA9IF9hbmFseXplZE5vZGUgaXMgaXIuQ29uc3RydWN0b3IsCiAgICAgICAgdGhpcy5fY2FwdHVyZWRBbmRCb3hlZCA9IGNhcHR1cmVkQW5kQm94ZWQgIT0gbnVsbAogICAgICAgICAgICA/IG5ldyBNYXA8TG9jYWwsIEZpZWxkRW50aXR5Pi5mcm9tKGNhcHR1cmVkQW5kQm94ZWQpCiAgICAgICAgICAgIDogPExvY2FsLCBGaWVsZEVudGl0eT57fSB7CiAgICBpZiAoX3N0YXRlICE9IG51bGwpIHJldHVybjsKCiAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5pbml0aWFsKAogICAgICAgIGluR2VuZXJhdGl2ZUNvbnN0cnVjdG9yOiBfaW5HZW5lcmF0aXZlQ29uc3RydWN0b3IpOwogIH0KCiAgSnNUb0VsZW1lbnRNYXAgZ2V0IF9lbGVtZW50TWFwID0+IF9jbG9zZWRXb3JsZC5lbGVtZW50TWFwOwoKICBDbG9zdXJlRGF0YSBnZXQgX2Nsb3N1cmVEYXRhTG9va3VwID0+IF9jbG9zZWRXb3JsZC5jbG9zdXJlRGF0YUxvb2t1cDsKCiAgRGFydFR5cGUgX2dldFN0YXRpY1R5cGUoaXIuRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUoX3N0YXRpY1R5cGVQcm92aWRlci5nZXRTdGF0aWNUeXBlKG5vZGUpKTsKICB9CgogIGludCBfbG9vcExldmVsID0gMDsKCiAgYm9vbCBnZXQgaW5Mb29wID0+IF9sb29wTGV2ZWwgPiAwOwoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgW21lbWJlcl0gaXMgZGVmaW5lZCBpbiBhIHN1YmNsYXNzIG9mIHRoZSBjdXJyZW50IHRoaXMKICAvLy8gdHlwZS4KICBib29sIF9pc0luQ2xhc3NPclN1YmNsYXNzKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIENsYXNzRW50aXR5IGNscyA9IF9lbGVtZW50TWFwLmdldE1lbWJlclRoaXNUeXBlKF9hbmFseXplZE1lbWJlcik/LmVsZW1lbnQ7CiAgICBpZiAoY2xzID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkuaXNTdWJjbGFzc09mKG1lbWJlci5lbmNsb3NpbmdDbGFzcywgY2xzKTsKICB9CgogIC8vLyBDaGVja3Mgd2hldGhlciB0aGUgYWNjZXNzIG9yIHVwZGF0ZSBvZiBbc2VsZWN0b3JdIG9uIFttYXNrXSBwb3RlbnRpYWxseQogIC8vLyBleHBvc2VzIGB0aGlzYC4KICAvLy8KICAvLy8gSWYgYWxsIG1hdGNoaW5nIG1lbWJlcnMgYXJlIGluc3RhbmNlIGZpZWxkcyBvbiB0aGUgY3VycmVudCBgdGhpc2AKICAvLy8gY2xhc3Mgb3Igc3ViY2xhc3NlcywgYHRoaXNgIGlzIG5vdCBjb25zaWRlcmVkIHRvIGJlIGV4cG9zZWQuCiAgLy8vCiAgLy8vIElmIGFuIGluc3RhbmNlIGZpZWxkIG1hdGNoZWQgd2l0aCBhIFtzZWxlY3Rvcl0gdGhhdCBpcyBfbm90XyBhIHNldHRlciwgdGhlCiAgLy8vIGZpZWxkIGlzIGNvbnNpZGVyZWQgdG8gaGF2ZSBiZWVuIHJlYWQgYmVmb3JlIGluaXRpYWxpemF0aW9uIGFuZCB0aGUgZmllbGQKICAvLy8gaXMgYXNzdW1lZCB0byBiZSBwb3RlbnRpYWxseSBgbnVsbGAuCiAgdm9pZCBfY2hlY2tJZkV4cG9zZXNUaGlzKFNlbGVjdG9yIHNlbGVjdG9yLCBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIGlmIChfc3RhdGUuaXNUaGlzRXhwb3NlZCkgewogICAgICAvLyBXZSBhbHJlYWR5IGNvbnNpZGVyIGB0aGlzYCB0byBoYXZlIGJlZW4gZXhwb3NlZC4KICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKF9pbmZlcnJlci5jbG9zZWRXb3JsZC5pbmNsdWRlc0Nsb3N1cmVDYWxsKHNlbGVjdG9yLCBtYXNrKSkgewogICAgICAvLyBUT0RPKG5nZW9mZnJheSk6IFdlIGNvdWxkIGRvIGJldHRlciBoZXJlIGlmIHdlIGtuZXcgd2hhdCB3ZQogICAgICAvLyBhcmUgY2FsbGluZyBkb2VzIG5vdCBleHBvc2UgdGhpcy4KICAgICAgX3N0YXRlLm1hcmtUaGlzQXNFeHBvc2VkKCk7CiAgICB9IGVsc2UgewogICAgICBfaW5mZXJyZXIuZm9yRWFjaEVsZW1lbnRNYXRjaGluZyhzZWxlY3RvciwgbWFzaywgKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJiBlbGVtZW50LmlzRmllbGQpIHsKICAgICAgICAgIEZpZWxkRW50aXR5IGZpZWxkID0gZWxlbWVudDsKICAgICAgICAgIGlmICghc2VsZWN0b3IuaXNTZXR0ZXIgJiYKICAgICAgICAgICAgICBfaXNJbkNsYXNzT3JTdWJjbGFzcyhmaWVsZCkgJiYKICAgICAgICAgICAgICBmaWVsZC5pc0Fzc2lnbmFibGUgJiYKICAgICAgICAgICAgICBfc3RhdGUucmVhZEZpZWxkKGZpZWxkKSA9PSBudWxsICYmCiAgICAgICAgICAgICAgZ2V0RmllbGRJbml0aWFsaXplcihfZWxlbWVudE1hcCwgZmllbGQpID09IG51bGwpIHsKICAgICAgICAgICAgLy8gSWYgdGhlIGZpZWxkIGlzIGJlaW5nIHVzZWQgYmVmb3JlIHRoaXMgY29uc3RydWN0b3IKICAgICAgICAgICAgLy8gYWN0dWFsbHkgaGFkIGEgY2hhbmNlIHRvIGluaXRpYWxpemUgaXQsIHNheSBpdCBjYW4gYmUKICAgICAgICAgICAgLy8gbnVsbC4KICAgICAgICAgICAgX2luZmVycmVyLnJlY29yZFR5cGVPZkZpZWxkKGZpZWxkLCBfdHlwZXMubnVsbFR5cGUpOwogICAgICAgICAgfQogICAgICAgICAgLy8gQWNjZXNzaW5nIGEgZmllbGQgZG9lcyBub3QgZXhwb3NlIGB0aGlzYC4KICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAvLyBUT0RPKG5nZW9mZnJheSk6IFdlIGNvdWxkIGRvIGJldHRlciBoZXJlIGlmIHdlIGtuZXcgd2hhdCB3ZQogICAgICAgIC8vIGFyZSBjYWxsaW5nIGRvZXMgbm90IGV4cG9zZSB0aGlzLgogICAgICAgIF9zdGF0ZS5tYXJrVGhpc0FzRXhwb3NlZCgpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfSk7CiAgICB9CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gcnVuKCkgewogICAgaWYgKF9hbmFseXplZE1lbWJlci5pc0ZpZWxkKSB7CiAgICAgIGlmIChfYW5hbHl6ZWROb2RlID09IG51bGwgfHwgX2FuYWx5emVkTm9kZSBpcyBpci5OdWxsTGl0ZXJhbCkgewogICAgICAgIC8vIEVhZ2VybHkgYmFpbG91dCwgYmVjYXVzZSBjb21wdXRpbmcgdGhlIGNsb3N1cmUgZGF0YSBvbmx5CiAgICAgICAgLy8gd29ya3MgZm9yIGZ1bmN0aW9ucyBhbmQgZmllbGQgYXNzaWdubWVudHMuCiAgICAgICAgcmV0dXJuIF90eXBlcy5udWxsVHlwZTsKICAgICAgfQogICAgfQoKICAgIC8vIFVwZGF0ZSB0aGUgbG9jYWxzIHRoYXQgYXJlIGJveGVkIGluIFtsb2NhbHNdLiBUaGVzZSBsb2NhbHMgd2lsbAogICAgLy8gYmUgaGFuZGxlZCBzcGVjaWFsbHksIGluIHRoYXQgd2UgYXJlIGNvbXB1dGluZyB0aGVpciBMVUIgYXQKICAgIC8vIGVhY2ggdXBkYXRlLCBhbmQgcmVhZGluZyB0aGVtIHlpZWxkcyB0aGUgdHlwZSB0aGF0IHdhcyBmb3VuZCBpbiBhCiAgICAvLyBwcmV2aW91cyBhbmFseXNpcyBvZiBbb3V0ZXJtb3N0RWxlbWVudF0uCiAgICBTY29wZUluZm8gc2NvcGVJbmZvID0gX2Nsb3N1cmVEYXRhTG9va3VwLmdldFNjb3BlSW5mbyhfYW5hbHl6ZWRNZW1iZXIpOwogICAgc2NvcGVJbmZvLmZvckVhY2hCb3hlZFZhcmlhYmxlKCh2YXJpYWJsZSwgZmllbGQpIHsKICAgICAgX2NhcHR1cmVkQW5kQm94ZWRbdmFyaWFibGVdID0gZmllbGQ7CiAgICB9KTsKCiAgICByZXR1cm4gdmlzaXQoX2FuYWx5emVkTm9kZSk7CiAgfQoKICBib29sIGlzSW5jb21wYXRpYmxlSW52b2tlKEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLCBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMpIHsKICAgIFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUgPSBmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmU7CgogICAgcmV0dXJuIGFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA8CiAgICAgICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZS5yZXF1aXJlZFBhcmFtZXRlcnMgfHwKICAgICAgICBhcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPiBwYXJhbWV0ZXJTdHJ1Y3R1cmUucG9zaXRpb25hbFBhcmFtZXRlcnMgfHwKICAgICAgICBhcmd1bWVudHMubmFtZWQua2V5cwogICAgICAgICAgICAuYW55KChuYW1lKSA9PiAhcGFyYW1ldGVyU3RydWN0dXJlLm5hbWVkUGFyYW1ldGVycy5jb250YWlucyhuYW1lKSk7CiAgfQoKICB2b2lkIHJlY29yZFJldHVyblR5cGUoVHlwZUluZm9ybWF0aW9uIHR5cGUpIHsKICAgIEZ1bmN0aW9uRW50aXR5IGFuYWx5emVkTWV0aG9kID0gX2FuYWx5emVkTWVtYmVyOwogICAgX3JldHVyblR5cGUgPQogICAgICAgIF9pbmZlcnJlci5hZGRSZXR1cm5UeXBlRm9yTWV0aG9kKGFuYWx5emVkTWV0aG9kLCBfcmV0dXJuVHlwZSwgdHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gX3RoaXNUeXBlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgdGhpc1R5cGUgewogICAgaWYgKF90aGlzVHlwZSAhPSBudWxsKSByZXR1cm4gX3RoaXNUeXBlOwogICAgQ2xhc3NFbnRpdHkgY2xzID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyVGhpc1R5cGUoX2FuYWx5emVkTWVtYmVyKT8uZWxlbWVudDsKICAgIGlmIChfY2xvc2VkV29ybGQuaXNVc2VkQXNNaXhpbihjbHMpKSB7CiAgICAgIHJldHVybiBfdGhpc1R5cGUgPSBfdHlwZXMubm9uTnVsbFN1YnR5cGUoY2xzKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfdGhpc1R5cGUgPSBfdHlwZXMubm9uTnVsbFN1YmNsYXNzKGNscyk7CiAgICB9CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gdmlzaXQoaXIuTm9kZSBub2RlLCB7Ym9vbCBjb25kaXRpb25Db250ZXh0OiBmYWxzZX0pIHsKICAgIHZhciBvbGRBY2N1bXVsYXRlSXNDaGVja3MgPSBfYWNjdW11bGF0ZUlzQ2hlY2tzOwogICAgX2FjY3VtdWxhdGVJc0NoZWNrcyA9IGNvbmRpdGlvbkNvbnRleHQ7CiAgICB2YXIgcmVzdWx0ID0gbm9kZT8uYWNjZXB0KHRoaXMpOwogICAgX2FjY3VtdWxhdGVJc0NoZWNrcyA9IG9sZEFjY3VtdWxhdGVJc0NoZWNrczsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIHZpc2l0TGlzdChMaXN0PGlyLk5vZGU+IG5vZGVzKSB7CiAgICBpZiAobm9kZXMgPT0gbnVsbCkgcmV0dXJuOwogICAgbm9kZXMuZm9yRWFjaCh2aXNpdCk7CiAgfQoKICB2b2lkIGhhbmRsZVBhcmFtZXRlcihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUsIHtib29sIGlzT3B0aW9uYWx9KSB7CiAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShub2RlKTsKICAgIERhcnRUeXBlIHR5cGUgPSBfbG9jYWxzTWFwLmdldExvY2FsVHlwZShfZWxlbWVudE1hcCwgbG9jYWwpOwogICAgX3N0YXRlLnVwZGF0ZUxvY2FsKF9pbmZlcnJlciwgX2NhcHR1cmVkQW5kQm94ZWQsIGxvY2FsLAogICAgICAgIF9pbmZlcnJlci50eXBlT2ZQYXJhbWV0ZXIobG9jYWwpLCBub2RlLCB0eXBlKTsKICAgIGlmIChpc09wdGlvbmFsKSB7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlOwogICAgICBpZiAobm9kZS5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgdHlwZSA9IHZpc2l0KG5vZGUuaW5pdGlhbGl6ZXIpOwogICAgICB9IGVsc2UgewogICAgICAgIHR5cGUgPSBfdHlwZXMubnVsbFR5cGU7CiAgICAgIH0KICAgICAgX2luZmVycmVyLnNldERlZmF1bHRUeXBlT2ZQYXJhbWV0ZXIobG9jYWwsIHR5cGUsCiAgICAgICAgICBpc0luc3RhbmNlTWVtYmVyOiBfYW5hbHl6ZWRNZW1iZXIuaXNJbnN0YW5jZU1lbWJlcik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRDb25zdHJ1Y3Rvcihpci5Db25zdHJ1Y3RvciBub2RlKSB7CiAgICBoYW5kbGVQYXJhbWV0ZXJzKG5vZGUuZnVuY3Rpb24pOwogICAgbm9kZS5pbml0aWFsaXplcnMuZm9yRWFjaCh2aXNpdCk7CiAgICB2aXNpdChub2RlLmZ1bmN0aW9uLmJvZHkpOwoKICAgIENsYXNzRW50aXR5IGNscyA9IF9hbmFseXplZE1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgIGlmICghKG5vZGUuaW5pdGlhbGl6ZXJzLmlzTm90RW1wdHkgJiYKICAgICAgICBub2RlLmluaXRpYWxpemVycy5maXJzdCBpcyBpci5SZWRpcmVjdGluZ0luaXRpYWxpemVyKSkgewogICAgICAvLyBJdGVyYXRlIG92ZXIgYWxsIGluc3RhbmNlIGZpZWxkcywgYW5kIGdpdmUgYSBudWxsIHR5cGUgdG8KICAgICAgLy8gZmllbGRzIHRoYXQgd2UgaGF2ZW4ndCBpbml0aWFsaXplZCBmb3Igc3VyZS4KICAgICAgX2VsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hMb2NhbENsYXNzTWVtYmVyKGNscywKICAgICAgICAgIChNZW1iZXJFbnRpdHkgbWVtYmVyKSB7CiAgICAgICAgaWYgKG1lbWJlci5pc0ZpZWxkICYmIG1lbWJlci5pc0luc3RhbmNlTWVtYmVyICYmIG1lbWJlci5pc0Fzc2lnbmFibGUpIHsKICAgICAgICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlID0gX3N0YXRlLnJlYWRGaWVsZChtZW1iZXIpOwogICAgICAgICAgTWVtYmVyRGVmaW5pdGlvbiBkZWZpbml0aW9uID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyRGVmaW5pdGlvbihtZW1iZXIpOwogICAgICAgICAgYXNzZXJ0KGRlZmluaXRpb24ua2luZCA9PSBNZW1iZXJLaW5kLnJlZ3VsYXIpOwogICAgICAgICAgaXIuRmllbGQgbm9kZSA9IGRlZmluaXRpb24ubm9kZTsKICAgICAgICAgIGlmICh0eXBlID09IG51bGwgJiYKICAgICAgICAgICAgICAobm9kZS5pbml0aWFsaXplciA9PSBudWxsIHx8CiAgICAgICAgICAgICAgICAgIG5vZGUuaW5pdGlhbGl6ZXIgaXMgaXIuTnVsbExpdGVyYWwpKSB7CiAgICAgICAgICAgIF9pbmZlcnJlci5yZWNvcmRUeXBlT2ZGaWVsZChtZW1iZXIsIF90eXBlcy5udWxsVHlwZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIF9pbmZlcnJlci5yZWNvcmRFeHBvc2VzVGhpcyhfYW5hbHl6ZWRNZW1iZXIsIF9zdGF0ZS5pc1RoaXNFeHBvc2VkKTsKCiAgICBpZiAoY2xzLmlzQWJzdHJhY3QpIHsKICAgICAgaWYgKF9jbG9zZWRXb3JsZC5jbGFzc0hpZXJhcmNoeS5pc0luc3RhbnRpYXRlZChjbHMpKSB7CiAgICAgICAgX3JldHVyblR5cGUgPSBfdHlwZXMubm9uTnVsbFN1YmNsYXNzKGNscyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQXZvaWQgYW5hbHl6aW5nIFtfYW5hbHl6ZWRNZW1iZXJdIGluIHRoaXMKICAgICAgICAvLyBjYXNlOyBpdCdzIG5ldmVyIGNhbGxlZC4KICAgICAgICBfcmV0dXJuVHlwZSA9IF90eXBlcy5ub25OdWxsRW1wdHkoKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgX3JldHVyblR5cGUgPSBfdHlwZXMubm9uTnVsbEV4YWN0KGNscyk7CiAgICB9CiAgICBhc3NlcnQoX2JyZWFrc0Zvci5pc0VtcHR5KTsKICAgIGFzc2VydChfY29udGludWVzRm9yLmlzRW1wdHkpOwogICAgcmV0dXJuIF9yZXR1cm5UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRGaWVsZEluaXRpYWxpemVyKGlyLkZpZWxkSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgVHlwZUluZm9ybWF0aW9uIHJoc1R5cGUgPSB2aXNpdChub2RlLnZhbHVlKTsKICAgIEZpZWxkRW50aXR5IGZpZWxkID0gX2VsZW1lbnRNYXAuZ2V0RmllbGQobm9kZS5maWVsZCk7CiAgICBfc3RhdGUudXBkYXRlRmllbGQoZmllbGQsIHJoc1R5cGUpOwogICAgX2luZmVycmVyLnJlY29yZFR5cGVPZkZpZWxkKGZpZWxkLCByaHNUeXBlKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdXBlckluaXRpYWxpemVyKGlyLlN1cGVySW5pdGlhbGl6ZXIgbm9kZSkgewogICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPSBfZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3Rvcihub2RlLnRhcmdldCk7CiAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMgPSBhbmFseXplQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gbmV3IFNlbGVjdG9yKFNlbGVjdG9yS2luZC5DQUxMLCBjb25zdHJ1Y3Rvci5tZW1iZXJOYW1lLAogICAgICAgIF9lbGVtZW50TWFwLmdldENhbGxTdHJ1Y3R1cmUobm9kZS5hcmd1bWVudHMpKTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CiAgICBoYW5kbGVDb25zdHJ1Y3Rvckludm9rZSgKICAgICAgICBub2RlLCBub2RlLmFyZ3VtZW50cywgc2VsZWN0b3IsIG1hc2ssIGNvbnN0cnVjdG9yLCBhcmd1bWVudHMpOwoKICAgIF9pbmZlcnJlci5hbmFseXplKGNvbnN0cnVjdG9yKTsKICAgIGlmIChfaW5mZXJyZXIuY2hlY2tJZkV4cG9zZXNUaGlzKGNvbnN0cnVjdG9yKSkgewogICAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVyKGlyLlJlZGlyZWN0aW5nSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPSBfZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3Rvcihub2RlLnRhcmdldCk7CiAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMgPSBhbmFseXplQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gbmV3IFNlbGVjdG9yKFNlbGVjdG9yS2luZC5DQUxMLCBjb25zdHJ1Y3Rvci5tZW1iZXJOYW1lLAogICAgICAgIF9lbGVtZW50TWFwLmdldENhbGxTdHJ1Y3R1cmUobm9kZS5hcmd1bWVudHMpKTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CiAgICBoYW5kbGVDb25zdHJ1Y3Rvckludm9rZSgKICAgICAgICBub2RlLCBub2RlLmFyZ3VtZW50cywgc2VsZWN0b3IsIG1hc2ssIGNvbnN0cnVjdG9yLCBhcmd1bWVudHMpOwoKICAgIF9pbmZlcnJlci5hbmFseXplKGNvbnN0cnVjdG9yKTsKICAgIGlmIChfaW5mZXJyZXIuY2hlY2tJZkV4cG9zZXNUaGlzKGNvbnN0cnVjdG9yKSkgewogICAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRMb2NhbEluaXRpYWxpemVyKGlyLkxvY2FsSW5pdGlhbGl6ZXIgbm9kZSkgewogICAgdmlzaXQobm9kZS52YXJpYWJsZSk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgaGFuZGxlUGFyYW1ldGVycyhpci5GdW5jdGlvbk5vZGUgbm9kZSkgewogICAgaW50IHBvc2l0aW9uID0gMDsKICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgaW4gbm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycykgewogICAgICBoYW5kbGVQYXJhbWV0ZXIocGFyYW1ldGVyLAogICAgICAgICAgaXNPcHRpb25hbDogcG9zaXRpb24gPj0gbm9kZS5yZXF1aXJlZFBhcmFtZXRlckNvdW50KTsKICAgICAgcG9zaXRpb24rKzsKICAgIH0KICAgIGZvciAoaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBwYXJhbWV0ZXIgaW4gbm9kZS5uYW1lZFBhcmFtZXRlcnMpIHsKICAgICAgaGFuZGxlUGFyYW1ldGVyKHBhcmFtZXRlciwgaXNPcHRpb25hbDogdHJ1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRGdW5jdGlvbk5vZGUoaXIuRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIGhhbmRsZVBhcmFtZXRlcnMobm9kZSk7CgogICAgaWYgKF9jbG9zZWRXb3JsZC5uYXRpdmVEYXRhLmlzTmF0aXZlTWVtYmVyKF9hbmFseXplZE1lbWJlcikpIHsKICAgICAgLy8gTmF0aXZlIG1ldGhvZHMgZG8gbm90IGhhdmUgYSBib2R5LCBhbmQgd2UgY3VycmVudGx5IGp1c3Qgc2F5CiAgICAgIC8vIHRoZXkgcmV0dXJuIGR5bmFtaWMuCiAgICAgIHJldHVybiBfdHlwZXMuZHluYW1pY1R5cGU7CiAgICB9CgogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIHN3aXRjaCAobm9kZS5hc3luY01hcmtlcikgewogICAgICBjYXNlIGlyLkFzeW5jTWFya2VyLlN5bmM6CiAgICAgICAgaWYgKF9yZXR1cm5UeXBlID09IG51bGwpIHsKICAgICAgICAgIC8vIE5vIHJldHVybiBpbiB0aGUgYm9keS4KICAgICAgICAgIF9yZXR1cm5UeXBlID0gX3N0YXRlLnNlZW5SZXR1cm5PclRocm93CiAgICAgICAgICAgICAgPyBfdHlwZXMubm9uTnVsbEVtcHR5KCkgLy8gQm9keSBhbHdheXMgdGhyb3dzLgogICAgICAgICAgICAgIDogX3R5cGVzLm51bGxUeXBlOwogICAgICAgIH0gZWxzZSBpZiAoIV9zdGF0ZS5zZWVuUmV0dXJuT3JUaHJvdykgewogICAgICAgICAgLy8gV2UgaGF2ZW4nVHlwZUluZm9ybWF0aW9uIHNlZW4gcmV0dXJucyBvbiBhbGwgYnJhbmNoZXMuIFNvIHRoZQogICAgICAgICAgLy8gbWV0aG9kIG1heSBhbHNvIHJldHVybiBudWxsLgogICAgICAgICAgcmVjb3JkUmV0dXJuVHlwZShfdHlwZXMubnVsbFR5cGUpOwogICAgICAgIH0KICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgaXIuQXN5bmNNYXJrZXIuU3luY1N0YXI6CiAgICAgICAgLy8gVE9ETyhhc2dlcmYpOiBNYXliZSBtYWtlIGEgQ29udGFpbmVyVHlwZU1hc2sgZm9yIHRoZXNlPyBUaGUgdHlwZQogICAgICAgIC8vICAgICAgICAgICAgICAgY29udGFpbmVkIGlzIHRoZSBtZXRob2QgYm9keSdzIHJldHVybiB0eXBlLgogICAgICAgIHJlY29yZFJldHVyblR5cGUoX3R5cGVzLnN5bmNTdGFySXRlcmFibGVUeXBlKTsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgaXIuQXN5bmNNYXJrZXIuQXN5bmM6CiAgICAgICAgcmVjb3JkUmV0dXJuVHlwZShfdHlwZXMuYXN5bmNGdXR1cmVUeXBlKTsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgaXIuQXN5bmNNYXJrZXIuQXN5bmNTdGFyOgogICAgICAgIHJlY29yZFJldHVyblR5cGUoX3R5cGVzLmFzeW5jU3RhclN0cmVhbVR5cGUpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIGlyLkFzeW5jTWFya2VyLlN5bmNZaWVsZGluZzoKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgX2FuYWx5emVkTWVtYmVyLCAiVW5leHBlY3RlZCBhc3luYyBtYXJrZXI6ICR7bm9kZS5hc3luY01hcmtlcn0iKTsKICAgICAgICBicmVhazsKICAgIH0KICAgIGFzc2VydChfYnJlYWtzRm9yLmlzRW1wdHkpOwogICAgYXNzZXJ0KF9jb250aW51ZXNGb3IuaXNFbXB0eSk7CiAgICByZXR1cm4gX3JldHVyblR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRJbnN0YW50aWF0aW9uKGlyLkluc3RhbnRpYXRpb24gbm9kZSkgewogICAgcmV0dXJuIGNyZWF0ZUluc3RhbnRpYXRpb25UeXBlSW5mb3JtYXRpb24odmlzaXQobm9kZS5leHByZXNzaW9uKSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gY3JlYXRlSW5zdGFudGlhdGlvblR5cGVJbmZvcm1hdGlvbigKICAgICAgVHlwZUluZm9ybWF0aW9uIGV4cHJlc3Npb25UeXBlKSB7CiAgICAvLyBUT0RPKHNyYSk6IEFkZCBhIFR5cGVJbmZvcm1hdGlvbiBmb3IgSW5zdGFudGlhdGlvbnMuICBJbnN0YW50aWF0ZWQKICAgIC8vIGdlbmVyaWMgbWV0aG9kcyB3aWxsIG5lZWQgdG8gYmUgdHJhY2VkIHNlcGFyYXRlbHksIGFuZCBoYXZlIHRoZQogICAgLy8gaW5mb3JtYXRpb24gZ2F0aGVyZWQgaW4gdHJhY2luZyByZWZsZWN0ZWQgYmFjayB0byB0aGUgZ2VuZXJpYyBtZXRob2QuIEZvcgogICAgLy8gbm93LCBwYXNzIGFsb25nIHRoZSB1bmluc3RhbnRpYXRlZCBtZXRob2QuCiAgICByZXR1cm4gZXhwcmVzc2lvblR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gZGVmYXVsdEV4cHJlc3Npb24oaXIuRXhwcmVzc2lvbiBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKAogICAgICAgICdVbmhhbmRsZWQgZXhwcmVzc2lvbjogJHtub2RlfSAoJHtub2RlLnJ1bnRpbWVUeXBlfSknKTsKICB9CgogIEBvdmVycmlkZQogIGRlZmF1bHRTdGF0ZW1lbnQoaXIuU3RhdGVtZW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbmltcGxlbWVudGVkRXJyb3IoCiAgICAgICAgJ1VuaGFuZGxlZCBzdGF0ZW1lbnQ6ICR7bm9kZX0gKCR7bm9kZS5ydW50aW1lVHlwZX0pJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXROdWxsTGl0ZXJhbChpci5OdWxsTGl0ZXJhbCBsaXRlcmFsKSB7CiAgICByZXR1cm4gY3JlYXRlTnVsbFR5cGVJbmZvcm1hdGlvbigpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGNyZWF0ZU51bGxUeXBlSW5mb3JtYXRpb24oKSB7CiAgICByZXR1cm4gX3R5cGVzLm51bGxUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRCbG9jayhpci5CbG9jayBibG9jaykgewogICAgZm9yIChpci5TdGF0ZW1lbnQgc3RhdGVtZW50IGluIGJsb2NrLnN0YXRlbWVudHMpIHsKICAgICAgdmlzaXQoc3RhdGVtZW50KTsKICAgICAgaWYgKF9zdGF0ZS5hYm9ydHMpIGJyZWFrOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnQoaXIuRXhwcmVzc2lvblN0YXRlbWVudCBub2RlKSB7CiAgICB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEVtcHR5U3RhdGVtZW50KGlyLkVtcHR5U3RhdGVtZW50IG5vZGUpIHsKICAgIC8vIE5vdGhpbmcgdG8gZG8uCiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0QXNzZXJ0U3RhdGVtZW50KGlyLkFzc2VydFN0YXRlbWVudCBub2RlKSB7CiAgICAvLyBBdm9pZCBwb2xsdXRpb24gZnJvbSBhc3NlcnQgc3RhdGVtZW50IHVubGVzcyBlbmFibGVkLgogICAgaWYgKCFfb3B0aW9ucy5lbmFibGVVc2VyQXNzZXJ0aW9ucykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFNob3VsZCBhc3NlcnQgYmUgdXNlZCB3aXRoIC0tdHJ1c3QtdHlwZS1hbm5vdGF0aW9ucz8KICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRyYWNrIHJlYWNoYWJsZSBmb3IgYXNzZXJ0aW9ucyBrbm93biB0byBmYWlsLgogICAgTG9jYWxTdGF0ZSBzdGF0ZUJlZm9yZSA9IF9zdGF0ZTsKICAgIGhhbmRsZUNvbmRpdGlvbihub2RlLmNvbmRpdGlvbik7CiAgICBMb2NhbFN0YXRlIGFmdGVyQ29uZGl0aW9uV2hlblRydWUgPSBfc3RhdGVBZnRlcldoZW5UcnVlOwogICAgTG9jYWxTdGF0ZSBhZnRlckNvbmRpdGlvbldoZW5GYWxzZSA9IF9zdGF0ZUFmdGVyV2hlbkZhbHNlOwogICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKGFmdGVyQ29uZGl0aW9uV2hlbkZhbHNlKTsKICAgIHZpc2l0KG5vZGUubWVzc2FnZSk7CiAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJNZXNzYWdlID0gX3N0YXRlOwogICAgc3RhdGVBZnRlck1lc3NhZ2Uuc2VlblJldHVybk9yVGhyb3cgPSB0cnVlOwogICAgX3N0YXRlID0gc3RhdGVCZWZvcmUubWVyZ2VEaWFtb25kRmxvdygKICAgICAgICBfaW5mZXJyZXIsIGFmdGVyQ29uZGl0aW9uV2hlblRydWUsIHN0YXRlQWZ0ZXJNZXNzYWdlKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRCcmVha1N0YXRlbWVudChpci5CcmVha1N0YXRlbWVudCBub2RlKSB7CiAgICBKdW1wVGFyZ2V0IHRhcmdldCA9IF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvckJyZWFrKG5vZGUpOwogICAgX3N0YXRlLnNlZW5CcmVha09yQ29udGludWUgPSB0cnVlOwogICAgLy8gRG8gYSBkZWVwLWNvcHkgb2YgdGhlIGxvY2FscywgYmVjYXVzZSB0aGUgY29kZSBmb2xsb3dpbmcgdGhlCiAgICAvLyBicmVhayB3aWxsIGNoYW5nZSB0aGVtLgogICAgaWYgKF9sb2NhbHNNYXAuZ2VuZXJhdGVDb250aW51ZUZvckJyZWFrKG5vZGUpKSB7CiAgICAgIF9jb250aW51ZXNGb3JbdGFyZ2V0XS5hZGQobmV3IExvY2FsU3RhdGUuZGVlcENvcHlPZihfc3RhdGUpKTsKICAgIH0gZWxzZSB7CiAgICAgIF9icmVha3NGb3JbdGFyZ2V0XS5hZGQobmV3IExvY2FsU3RhdGUuZGVlcENvcHlPZihfc3RhdGUpKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRMYWJlbGVkU3RhdGVtZW50KGlyLkxhYmVsZWRTdGF0ZW1lbnQgbm9kZSkgewogICAgaXIuU3RhdGVtZW50IGJvZHkgPSBub2RlLmJvZHk7CiAgICBpZiAoSnVtcFZpc2l0b3IuY2FuQmVCcmVha1RhcmdldChib2R5KSkgewogICAgICAvLyBMb29wcyBhbmQgc3dpdGNoZXMgaGFuZGxlIHRoZWlyIG93biBsYWJlbHMuCiAgICAgIHZpc2l0KGJvZHkpOwogICAgfSBlbHNlIHsKICAgICAgSnVtcFRhcmdldCBqdW1wVGFyZ2V0ID0gX2xvY2Fsc01hcC5nZXRKdW1wVGFyZ2V0Rm9yTGFiZWwobm9kZSk7CiAgICAgIF9zZXR1cEJyZWFrc0FuZENvbnRpbnVlcyhqdW1wVGFyZ2V0KTsKICAgICAgdmlzaXQoYm9keSk7CiAgICAgIF9zdGF0ZS5tZXJnZUFmdGVyQnJlYWtzKF9pbmZlcnJlciwgX2dldEJyZWFrcyhqdW1wVGFyZ2V0KSk7CiAgICAgIF9jbGVhckJyZWFrc0FuZENvbnRpbnVlcyhqdW1wVGFyZ2V0KTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoaXIuU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIHZpc2l0KG5vZGUuZXhwcmVzc2lvbik7CgogICAgSnVtcFRhcmdldCBqdW1wVGFyZ2V0ID0gX2xvY2Fsc01hcC5nZXRKdW1wVGFyZ2V0Rm9yU3dpdGNoKG5vZGUpOwogICAgX3NldHVwQnJlYWtzQW5kQ29udGludWVzKGp1bXBUYXJnZXQpOwoKICAgIExpc3Q8SnVtcFRhcmdldD4gY29udGludWVUYXJnZXRzID0gPEp1bXBUYXJnZXQ+W107CiAgICBmb3IgKGlyLlN3aXRjaENhc2Ugc3dpdGNoQ2FzZSBpbiBub2RlLmNhc2VzKSB7CiAgICAgIEp1bXBUYXJnZXQgY29udGludWVUYXJnZXQgPQogICAgICAgICAgX2xvY2Fsc01hcC5nZXRKdW1wVGFyZ2V0Rm9yU3dpdGNoQ2FzZShzd2l0Y2hDYXNlKTsKICAgICAgaWYgKGNvbnRpbnVlVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgICBjb250aW51ZVRhcmdldHMuYWRkKGNvbnRpbnVlVGFyZ2V0KTsKICAgICAgfQogICAgfQogICAgaWYgKGNvbnRpbnVlVGFyZ2V0cy5pc05vdEVtcHR5KSB7CiAgICAgIGNvbnRpbnVlVGFyZ2V0cy5mb3JFYWNoKF9zZXR1cEJyZWFrc0FuZENvbnRpbnVlcyk7CgogICAgICAvLyBJZiB0aGUgc3dpdGNoIHN0YXRlbWVudCBoYXMgYSBjb250aW51ZSwgd2UgY29uc2VydmF0aXZlbHkKICAgICAgLy8gdmlzaXQgYWxsIGNhc2VzIGFuZCB1cGRhdGUgW2xvY2Fsc10gdW50aWwgd2UgaGF2ZSByZWFjaGVkIGEKICAgICAgLy8gZml4ZWQgcG9pbnQuCiAgICAgIGJvb2wgY2hhbmdlZDsKICAgICAgX3N0YXRlLnN0YXJ0TG9vcChfaW5mZXJyZXIsIG5vZGUpOwogICAgICBkbyB7CiAgICAgICAgY2hhbmdlZCA9IGZhbHNlOwogICAgICAgIGZvciAoaXIuU3dpdGNoQ2FzZSBzd2l0Y2hDYXNlIGluIG5vZGUuY2FzZXMpIHsKICAgICAgICAgIExvY2FsU3RhdGUgc3RhdGVCZWZvcmVDYXNlID0gX3N0YXRlOwogICAgICAgICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKHN0YXRlQmVmb3JlQ2FzZSk7CiAgICAgICAgICB2aXNpdChzd2l0Y2hDYXNlKTsKICAgICAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlckNhc2UgPSBfc3RhdGU7CiAgICAgICAgICBjaGFuZ2VkID0KICAgICAgICAgICAgICBzdGF0ZUJlZm9yZUNhc2UubWVyZ2VBbGwoX2luZmVycmVyLCBbc3RhdGVBZnRlckNhc2VdKSB8fCBjaGFuZ2VkOwogICAgICAgICAgX3N0YXRlID0gc3RhdGVCZWZvcmVDYXNlOwogICAgICAgIH0KICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CiAgICAgIF9zdGF0ZS5lbmRMb29wKF9pbmZlcnJlciwgbm9kZSk7CgogICAgICBjb250aW51ZVRhcmdldHMuZm9yRWFjaChfY2xlYXJCcmVha3NBbmRDb250aW51ZXMpOwogICAgfSBlbHNlIHsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUJlZm9yZUNhc2UgPSBfc3RhdGU7CiAgICAgIExpc3Q8TG9jYWxTdGF0ZT4gc3RhdGVzVG9NZXJnZSA9IDxMb2NhbFN0YXRlPltdOwogICAgICBib29sIGhhc0RlZmF1bHRDYXNlID0gZmFsc2U7CgogICAgICBmb3IgKGlyLlN3aXRjaENhc2Ugc3dpdGNoQ2FzZSBpbiBub2RlLmNhc2VzKSB7CiAgICAgICAgaWYgKHN3aXRjaENhc2UuaXNEZWZhdWx0KSB7CiAgICAgICAgICBoYXNEZWZhdWx0Q2FzZSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIF9zdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChzdGF0ZUJlZm9yZUNhc2UpOwogICAgICAgIHZpc2l0KHN3aXRjaENhc2UpOwogICAgICAgIHN0YXRlc1RvTWVyZ2UuYWRkKF9zdGF0ZSk7CiAgICAgIH0KICAgICAgc3RhdGVCZWZvcmVDYXNlLm1lcmdlQWZ0ZXJCcmVha3MoX2luZmVycmVyLCBzdGF0ZXNUb01lcmdlLAogICAgICAgICAga2VlcE93bkxvY2FsczogIWhhc0RlZmF1bHRDYXNlKTsKICAgICAgX3N0YXRlID0gc3RhdGVCZWZvcmVDYXNlOwogICAgfQogICAgX2NsZWFyQnJlYWtzQW5kQ29udGludWVzKGp1bXBUYXJnZXQpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN3aXRjaENhc2UoaXIuU3dpdGNoQ2FzZSBub2RlKSB7CiAgICB2aXNpdChub2RlLmJvZHkpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENvbnRpbnVlU3dpdGNoU3RhdGVtZW50KGlyLkNvbnRpbnVlU3dpdGNoU3RhdGVtZW50IG5vZGUpIHsKICAgIEp1bXBUYXJnZXQgdGFyZ2V0ID0gX2xvY2Fsc01hcC5nZXRKdW1wVGFyZ2V0Rm9yQ29udGludWVTd2l0Y2gobm9kZSk7CiAgICBfc3RhdGUuc2VlbkJyZWFrT3JDb250aW51ZSA9IHRydWU7CiAgICAvLyBEbyBhIGRlZXAtY29weSBvZiB0aGUgbG9jYWxzLCBiZWNhdXNlIHRoZSBjb2RlIGZvbGxvd2luZyB0aGUKICAgIC8vIGJyZWFrIHdpbGwgY2hhbmdlIHRoZW0uCiAgICBfY29udGludWVzRm9yW3RhcmdldF0uYWRkKG5ldyBMb2NhbFN0YXRlLmRlZXBDb3B5T2YoX3N0YXRlKSk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdExpc3RMaXRlcmFsKGlyLkxpc3RMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBjcmVhdGVMaXN0VHlwZUluZm9ybWF0aW9uKAogICAgICAgIG5vZGUsIG5vZGUuZXhwcmVzc2lvbnMubWFwKChlKSA9PiB2aXNpdChlKSksCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjcmVhdGVMaXN0VHlwZUluZm9ybWF0aW9uKAogICAgICBpci5UcmVlTm9kZSBub2RlLCBJdGVyYWJsZTxUeXBlSW5mb3JtYXRpb24+IGVsZW1lbnRUeXBlcywKICAgICAge2Jvb2wgaXNDb25zdH0pIHsKICAgIC8vIFdlIG9ubHkgc2V0IHRoZSB0eXBlIG9uY2UuIFdlIGRvbid0IG5lZWQgdG8gcmUtdmlzaXQgdGhlIGNoaWxkcmVuCiAgICAvLyB3aGVuIHJlLWFuYWx5emluZyB0aGUgbm9kZS4KICAgIHJldHVybiBfaW5mZXJyZXIuY29uY3JldGVUeXBlcy5wdXRJZkFic2VudChub2RlLCAoKSB7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiBlbGVtZW50VHlwZTsKICAgICAgaW50IGxlbmd0aCA9IDA7CiAgICAgIGZvciAoVHlwZUluZm9ybWF0aW9uIHR5cGUgaW4gZWxlbWVudFR5cGVzKSB7CiAgICAgICAgZWxlbWVudFR5cGUgPSBlbGVtZW50VHlwZSA9PSBudWxsCiAgICAgICAgICAgID8gX3R5cGVzLmFsbG9jYXRlUGhpKG51bGwsIG51bGwsIHR5cGUsIGlzVHJ5OiBmYWxzZSkKICAgICAgICAgICAgOiBfdHlwZXMuYWRkUGhpSW5wdXQobnVsbCwgZWxlbWVudFR5cGUsIHR5cGUpOwogICAgICAgIGxlbmd0aCsrOwogICAgICB9CiAgICAgIGVsZW1lbnRUeXBlID0gZWxlbWVudFR5cGUgPT0gbnVsbAogICAgICAgICAgPyBfdHlwZXMubm9uTnVsbEVtcHR5KCkKICAgICAgICAgIDogX3R5cGVzLnNpbXBsaWZ5UGhpKG51bGwsIG51bGwsIGVsZW1lbnRUeXBlKTsKICAgICAgVHlwZUluZm9ybWF0aW9uIGNvbnRhaW5lclR5cGUgPQogICAgICAgICAgaXNDb25zdCA/IF90eXBlcy5jb25zdExpc3RUeXBlIDogX3R5cGVzLmdyb3dhYmxlTGlzdFR5cGU7CiAgICAgIHJldHVybiBfdHlwZXMuYWxsb2NhdGVMaXN0KAogICAgICAgICAgY29udGFpbmVyVHlwZSwgbm9kZSwgX2FuYWx5emVkTWVtYmVyLCBlbGVtZW50VHlwZSwgbGVuZ3RoKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0U2V0TGl0ZXJhbChpci5TZXRMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBjcmVhdGVTZXRUeXBlSW5mb3JtYXRpb24obm9kZSwgbm9kZS5leHByZXNzaW9ucy5tYXAoKGUpID0+IHZpc2l0KGUpKSwKICAgICAgICBpc0NvbnN0OiBub2RlLmlzQ29uc3QpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGNyZWF0ZVNldFR5cGVJbmZvcm1hdGlvbigKICAgICAgaXIuVHJlZU5vZGUgbm9kZSwgSXRlcmFibGU8VHlwZUluZm9ybWF0aW9uPiBlbGVtZW50VHlwZXMsCiAgICAgIHtib29sIGlzQ29uc3R9KSB7CiAgICByZXR1cm4gX2luZmVycmVyLmNvbmNyZXRlVHlwZXMucHV0SWZBYnNlbnQobm9kZSwgKCkgewogICAgICBUeXBlSW5mb3JtYXRpb24gZWxlbWVudFR5cGU7CiAgICAgIGZvciAoVHlwZUluZm9ybWF0aW9uIHR5cGUgaW4gZWxlbWVudFR5cGVzKSB7CiAgICAgICAgZWxlbWVudFR5cGUgPSBlbGVtZW50VHlwZSA9PSBudWxsCiAgICAgICAgICAgID8gX3R5cGVzLmFsbG9jYXRlUGhpKG51bGwsIG51bGwsIHR5cGUsIGlzVHJ5OiBmYWxzZSkKICAgICAgICAgICAgOiBfdHlwZXMuYWRkUGhpSW5wdXQobnVsbCwgZWxlbWVudFR5cGUsIHR5cGUpOwogICAgICB9CiAgICAgIGVsZW1lbnRUeXBlID0gZWxlbWVudFR5cGUgPT0gbnVsbAogICAgICAgICAgPyBfdHlwZXMubm9uTnVsbEVtcHR5KCkKICAgICAgICAgIDogX3R5cGVzLnNpbXBsaWZ5UGhpKG51bGwsIG51bGwsIGVsZW1lbnRUeXBlKTsKICAgICAgVHlwZUluZm9ybWF0aW9uIGNvbnRhaW5lclR5cGUgPQogICAgICAgICAgaXNDb25zdCA/IF90eXBlcy5jb25zdFNldFR5cGUgOiBfdHlwZXMuc2V0VHlwZTsKICAgICAgcmV0dXJuIF90eXBlcy5hbGxvY2F0ZVNldCgKICAgICAgICAgIGNvbnRhaW5lclR5cGUsIG5vZGUsIF9hbmFseXplZE1lbWJlciwgZWxlbWVudFR5cGUpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRNYXBMaXRlcmFsKGlyLk1hcExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIGNyZWF0ZU1hcFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBub2RlLCBub2RlLmVudHJpZXMubWFwKChlKSA9PiBuZXcgUGFpcih2aXNpdChlLmtleSksIHZpc2l0KGUudmFsdWUpKSksCiAgICAgICAgaXNDb25zdDogbm9kZS5pc0NvbnN0KTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjcmVhdGVNYXBUeXBlSW5mb3JtYXRpb24oaXIuVHJlZU5vZGUgbm9kZSwKICAgICAgSXRlcmFibGU8UGFpcjxUeXBlSW5mb3JtYXRpb24sIFR5cGVJbmZvcm1hdGlvbj4+IGVudHJ5VHlwZXMsCiAgICAgIHtib29sIGlzQ29uc3R9KSB7CiAgICByZXR1cm4gX2luZmVycmVyLmNvbmNyZXRlVHlwZXMucHV0SWZBYnNlbnQobm9kZSwgKCkgewogICAgICBMaXN0IGtleVR5cGVzID0gPFR5cGVJbmZvcm1hdGlvbj5bXTsKICAgICAgTGlzdCB2YWx1ZVR5cGVzID0gPFR5cGVJbmZvcm1hdGlvbj5bXTsKCiAgICAgIGZvciAoUGFpcjxUeXBlSW5mb3JtYXRpb24sIFR5cGVJbmZvcm1hdGlvbj4gZW50cnlUeXBlIGluIGVudHJ5VHlwZXMpIHsKICAgICAgICBrZXlUeXBlcy5hZGQoZW50cnlUeXBlLmEpOwogICAgICAgIHZhbHVlVHlwZXMuYWRkKGVudHJ5VHlwZS5iKTsKICAgICAgfQoKICAgICAgVHlwZUluZm9ybWF0aW9uIHR5cGUgPSBpc0NvbnN0ID8gX3R5cGVzLmNvbnN0TWFwVHlwZSA6IF90eXBlcy5tYXBUeXBlOwogICAgICByZXR1cm4gX3R5cGVzLmFsbG9jYXRlTWFwKAogICAgICAgICAgdHlwZSwgbm9kZSwgX2FuYWx5emVkTWVtYmVyLCBrZXlUeXBlcywgdmFsdWVUeXBlcyk7CiAgICB9KTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFJldHVyblN0YXRlbWVudChpci5SZXR1cm5TdGF0ZW1lbnQgbm9kZSkgewogICAgaXIuTm9kZSBleHByZXNzaW9uID0gbm9kZS5leHByZXNzaW9uOwogICAgcmVjb3JkUmV0dXJuVHlwZShleHByZXNzaW9uID09IG51bGwgPyBfdHlwZXMubnVsbFR5cGUgOiB2aXNpdChleHByZXNzaW9uKSk7CiAgICBfc3RhdGUuc2VlblJldHVybk9yVGhyb3cgPSB0cnVlOwogICAgX3N0YXRlLm1hcmtJbml0aWFsaXphdGlvbkFzSW5kZWZpbml0ZSgpOwogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRCb29sTGl0ZXJhbChpci5Cb29sTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gY3JlYXRlQm9vbFR5cGVJbmZvcm1hdGlvbihub2RlLnZhbHVlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjcmVhdGVCb29sVHlwZUluZm9ybWF0aW9uKGJvb2wgdmFsdWUpIHsKICAgIHJldHVybiBfdHlwZXMuYm9vbExpdGVyYWxUeXBlKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdEludExpdGVyYWwoaXIuSW50TGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gY3JlYXRlSW50VHlwZUluZm9ybWF0aW9uKG5vZGUudmFsdWUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGNyZWF0ZUludFR5cGVJbmZvcm1hdGlvbihpbnQgdmFsdWUpIHsKICAgIC8vIFRoZSBKYXZhU2NyaXB0IGJhY2tlbmQgbWF5IHR1cm4gdGhpcyBsaXRlcmFsIGludG8gYSBkb3VibGUgYXQKICAgIC8vIHJ1bnRpbWUuCiAgICByZXR1cm4gX3R5cGVzLmdldENvbmNyZXRlVHlwZUZvcihfY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgIC5jb21wdXRlQWJzdHJhY3RWYWx1ZUZvckNvbnN0YW50KAogICAgICAgICAgICBjb25zdGFudF9zeXN0ZW0uY3JlYXRlSW50RnJvbUludCh2YWx1ZSkpKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdERvdWJsZUxpdGVyYWwoaXIuRG91YmxlTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gY3JlYXRlRG91YmxlVHlwZUluZm9ybWF0aW9uKG5vZGUudmFsdWUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGNyZWF0ZURvdWJsZVR5cGVJbmZvcm1hdGlvbihkb3VibGUgdmFsdWUpIHsKICAgIC8vIFRoZSBKYXZhU2NyaXB0IGJhY2tlbmQgbWF5IHR1cm4gdGhpcyBsaXRlcmFsIGludG8gYSBkb3VibGUgYXQKICAgIC8vIHJ1bnRpbWUuCiAgICByZXR1cm4gX3R5cGVzLmdldENvbmNyZXRlVHlwZUZvcihfY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbgogICAgICAgIC5jb21wdXRlQWJzdHJhY3RWYWx1ZUZvckNvbnN0YW50KGNvbnN0YW50X3N5c3RlbS5jcmVhdGVEb3VibGUodmFsdWUpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTdHJpbmdMaXRlcmFsKGlyLlN0cmluZ0xpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIGNyZWF0ZVN0cmluZ1R5cGVJbmZvcm1hdGlvbihub2RlLnZhbHVlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjcmVhdGVTdHJpbmdUeXBlSW5mb3JtYXRpb24oU3RyaW5nIHZhbHVlKSB7CiAgICByZXR1cm4gX3R5cGVzLnN0cmluZ0xpdGVyYWxUeXBlKHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oaXIuU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICAvLyBJbnRlcnBvbGF0aW9uIGNvdWxkIGhhdmUgYW55IGVmZmVjdHMgc2luY2UgaXQgY291bGQgY2FsbCBhbnkgdG9TdHJpbmcoKQogICAgLy8gbWV0aG9kLgogICAgLy8gVE9ETyhzcmEpOiBUaGlzIGNvdWxkIGJlIG1vZGVsbGVkIGJ5IGEgY2FsbCB0byB0b1N0cmluZygpIGJ1dCB3aXRoIGEKICAgIC8vIGd1YXJhbnRlZWQgU3RyaW5nIHJldHVybiB0eXBlLiAgSW50ZXJwb2xhdGlvbiBvZiBrbm93biB0eXBlcyB3b3VsZCBnZXQKICAgIC8vIHNwZWNpYWxpemVkIGVmZmVjdHMuICBUaGlzIHdvdWxkIG5vdCBjdXJyZW50bHkgYmUgZWZmZWN0aXZlIHNpbmNlIHRoZSBKUwogICAgLy8gY29kZSBpbiB0aGUgdG9TdHJpbmcgbWV0aG9kcyBmb3IgaW50ZXJjZXB0ZWQgcHJpbWl0aXZlIHR5cGVzIGlzIGFzc3VtZWQKICAgIC8vIHRvIGhhdmUgYWxsIGVmZmVjdHMuICBFZmZlY3QgYW5ub3RhdGlvbnMgb24gSlMgY29kZSB3b3VsZCBiZSBuZWVkZWQgdG8KICAgIC8vIGdldCB0aGUgYmVuZWZpdC4KICAgIF9zaWRlRWZmZWN0c0J1aWxkZXIuc2V0QWxsU2lkZUVmZmVjdHMoKTsKCiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgICByZXR1cm4gX3R5cGVzLnN0cmluZ1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTeW1ib2xMaXRlcmFsKGlyLlN5bWJvbExpdGVyYWwgbm9kZSkgewogICAgcmV0dXJuIGNyZWF0ZVN5bWJvbExpdGVyYWxUeXBlSW5mb3JtYXRpb24oKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjcmVhdGVTeW1ib2xMaXRlcmFsVHlwZUluZm9ybWF0aW9uKCkgewogICAgcmV0dXJuIF90eXBlcwogICAgICAgIC5ub25OdWxsU3VidHlwZShfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuc3ltYm9sSW1wbGVtZW50YXRpb25DbGFzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRUeXBlTGl0ZXJhbChpci5UeXBlTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gY3JlYXRlVHlwZUxpdGVyYWxJbmZvcm1hdGlvbigpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGNyZWF0ZVR5cGVMaXRlcmFsSW5mb3JtYXRpb24oKSB7CiAgICByZXR1cm4gX3R5cGVzLnR5cGVUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0VmFyaWFibGVEZWNsYXJhdGlvbihpci5WYXJpYWJsZURlY2xhcmF0aW9uIG5vZGUpIHsKICAgIGFzc2VydCgKICAgICAgICBub2RlLnBhcmVudCBpcyEgaXIuRnVuY3Rpb25Ob2RlLCAiVW5leHBlY3RlZCBwYXJhbWV0ZXIgZGVjbGFyYXRpb24uIik7CiAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShub2RlKTsKICAgIERhcnRUeXBlIHR5cGUgPSBfbG9jYWxzTWFwLmdldExvY2FsVHlwZShfZWxlbWVudE1hcCwgbG9jYWwpOwogICAgaWYgKG5vZGUuaW5pdGlhbGl6ZXIgPT0gbnVsbCkgewogICAgICBfc3RhdGUudXBkYXRlTG9jYWwoCiAgICAgICAgICBfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwgX3R5cGVzLm51bGxUeXBlLCBub2RlLCB0eXBlKTsKICAgIH0gZWxzZSB7CiAgICAgIF9zdGF0ZS51cGRhdGVMb2NhbChfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwKICAgICAgICAgIHZpc2l0KG5vZGUuaW5pdGlhbGl6ZXIpLCBub2RlLCB0eXBlKTsKICAgIH0KICAgIGlmIChub2RlLmluaXRpYWxpemVyIGlzIGlyLlRoaXNFeHByZXNzaW9uKSB7CiAgICAgIF9zdGF0ZS5tYXJrVGhpc0FzRXhwb3NlZCgpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRWYXJpYWJsZUdldChpci5WYXJpYWJsZUdldCBub2RlKSB7CiAgICBMb2NhbCBsb2NhbCA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShub2RlLnZhcmlhYmxlKTsKICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlID0KICAgICAgICBfc3RhdGUucmVhZExvY2FsKF9pbmZlcnJlciwgX2NhcHR1cmVkQW5kQm94ZWQsIGxvY2FsKTsKICAgIGFzc2VydCh0eXBlICE9IG51bGwsICJNaXNzaW5nIHR5cGUgaW5mb3JtYXRpb24gZm9yICRsb2NhbC4iKTsKICAgIHJldHVybiB0eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0VmFyaWFibGVTZXQoaXIuVmFyaWFibGVTZXQgbm9kZSkgewogICAgVHlwZUluZm9ybWF0aW9uIHJoc1R5cGUgPSB2aXNpdChub2RlLnZhbHVlKTsKICAgIGlmIChub2RlLnZhbHVlIGlzIGlyLlRoaXNFeHByZXNzaW9uKSB7CiAgICAgIF9zdGF0ZS5tYXJrVGhpc0FzRXhwb3NlZCgpOwogICAgfQogICAgTG9jYWwgbG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUobm9kZS52YXJpYWJsZSk7CiAgICBEYXJ0VHlwZSB0eXBlID0gX2xvY2Fsc01hcC5nZXRMb2NhbFR5cGUoX2VsZW1lbnRNYXAsIGxvY2FsKTsKICAgIF9zdGF0ZS51cGRhdGVMb2NhbCgKICAgICAgICBfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwgcmhzVHlwZSwgbm9kZSwgdHlwZSk7CiAgICByZXR1cm4gcmhzVHlwZTsKICB9CgogIEFyZ3VtZW50c1R5cGVzIGFuYWx5emVBcmd1bWVudHMoaXIuQXJndW1lbnRzIGFyZ3VtZW50cykgewogICAgTGlzdDxUeXBlSW5mb3JtYXRpb24+IHBvc2l0aW9uYWwgPSA8VHlwZUluZm9ybWF0aW9uPltdOwogICAgTWFwPFN0cmluZywgVHlwZUluZm9ybWF0aW9uPiBuYW1lZDsKICAgIGZvciAoaXIuRXhwcmVzc2lvbiBhcmd1bWVudCBpbiBhcmd1bWVudHMucG9zaXRpb25hbCkgewogICAgICAvLyBUT0RPKG5nZW9mZnJheSk6IFdlIGNvdWxkIGRvIGJldHRlciBoZXJlIGlmIHdlIGtuZXcgd2hhdCB3ZQogICAgICAvLyBhcmUgY2FsbGluZyBkb2VzIG5vdCBleHBvc2UgdGhpcy4KICAgICAgaWYgKGFyZ3VtZW50IGlzIGlyLlRoaXNFeHByZXNzaW9uKSB7CiAgICAgICAgX3N0YXRlLm1hcmtUaGlzQXNFeHBvc2VkKCk7CiAgICAgIH0KICAgICAgcG9zaXRpb25hbC5hZGQodmlzaXQoYXJndW1lbnQpKTsKICAgIH0KICAgIGZvciAoaXIuTmFtZWRFeHByZXNzaW9uIGFyZ3VtZW50IGluIGFyZ3VtZW50cy5uYW1lZCkgewogICAgICBuYW1lZCA/Pz0gPFN0cmluZywgVHlwZUluZm9ybWF0aW9uPnt9OwogICAgICBpci5FeHByZXNzaW9uIHZhbHVlID0gYXJndW1lbnQudmFsdWU7CiAgICAgIC8vIFRPRE8obmdlb2ZmcmF5KTogV2UgY291bGQgZG8gYmV0dGVyIGhlcmUgaWYgd2Uga25ldyB3aGF0IHdlCiAgICAgIC8vIGFyZSBjYWxsaW5nIGRvZXMgbm90IGV4cG9zZSB0aGlzLgogICAgICBpZiAodmFsdWUgaXMgaXIuVGhpc0V4cHJlc3Npb24pIHsKICAgICAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKICAgICAgfQogICAgICBuYW1lZFthcmd1bWVudC5uYW1lXSA9IHZpc2l0KHZhbHVlKTsKICAgIH0KCiAgICByZXR1cm4gbmV3IEFyZ3VtZW50c1R5cGVzKHBvc2l0aW9uYWwsIG5hbWVkKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdE1ldGhvZEludm9jYXRpb24oaXIuTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IF9lbGVtZW50TWFwLmdldFNlbGVjdG9yKG5vZGUpOwogICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0gX21lbWJlckRhdGEudHlwZU9mU2VuZChub2RlKTsKCiAgICBpci5UcmVlTm9kZSByZWNlaXZlciA9IG5vZGUucmVjZWl2ZXI7CiAgICBpZiAocmVjZWl2ZXIgaXMgaXIuVmFyaWFibGVHZXQgJiYKICAgICAgICByZWNlaXZlci52YXJpYWJsZS5wYXJlbnQgaXMgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbikgewogICAgICAvLyBUaGlzIGlzIGFuIGludm9jYXRpb24gb2YgYSBuYW1lZCBsb2NhbCBmdW5jdGlvbi4KICAgICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzID0gYW5hbHl6ZUFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICAgIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8gaW5mbyA9CiAgICAgICAgICBfY2xvc3VyZURhdGFMb29rdXAuZ2V0Q2xvc3VyZUluZm8ocmVjZWl2ZXIudmFyaWFibGUucGFyZW50KTsKICAgICAgaWYgKGlzSW5jb21wYXRpYmxlSW52b2tlKGluZm8uY2FsbE1ldGhvZCwgYXJndW1lbnRzKSkgewogICAgICAgIHJldHVybiBfdHlwZXMuZHluYW1pY1R5cGU7CiAgICAgIH0KCiAgICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlID0KICAgICAgICAgIGhhbmRsZVN0YXRpY0ludm9rZShub2RlLCBzZWxlY3RvciwgbWFzaywgaW5mby5jYWxsTWV0aG9kLCBhcmd1bWVudHMpOwogICAgICBGdW5jdGlvblR5cGUgZnVuY3Rpb25UeXBlID0KICAgICAgICAgIF9lbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRGdW5jdGlvblR5cGUoaW5mby5jYWxsTWV0aG9kKTsKICAgICAgaWYgKGZ1bmN0aW9uVHlwZS5yZXR1cm5UeXBlLmNvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXMpIHsKICAgICAgICAvLyBUaGUgcmV0dXJuIHR5cGUgdmFyaWVzIHdpdGggdGhlIGNhbGwgc2l0ZSBzbyB3ZSBuYXJyb3cgdGhlIHN0YXRpYwogICAgICAgIC8vIHJldHVybiB0eXBlLgogICAgICAgIHR5cGUgPSBfdHlwZXMubmFycm93VHlwZSh0eXBlLCBfZ2V0U3RhdGljVHlwZShub2RlKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHR5cGU7CiAgICB9CgogICAgVHlwZUluZm9ybWF0aW9uIHJlY2VpdmVyVHlwZSA9IHZpc2l0KHJlY2VpdmVyKTsKICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cyA9IGFuYWx5emVBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpOwogICAgaWYgKHNlbGVjdG9yLm5hbWUgPT0gJz09JykgewogICAgICBpZiAoX3R5cGVzLmlzTnVsbChyZWNlaXZlclR5cGUpKSB7CiAgICAgICAgLy8gbnVsbCA9PSBvCiAgICAgICAgX3BvdGVudGlhbGx5QWRkTnVsbENoZWNrKG5vZGUsIG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3QpOwogICAgICAgIHJldHVybiBfdHlwZXMuYm9vbFR5cGU7CiAgICAgIH0gZWxzZSBpZiAoX3R5cGVzLmlzTnVsbChhcmd1bWVudHMucG9zaXRpb25hbFswXSkpIHsKICAgICAgICAvLyBvID09IG51bGwKICAgICAgICBfcG90ZW50aWFsbHlBZGROdWxsQ2hlY2sobm9kZSwgbm9kZS5yZWNlaXZlcik7CiAgICAgICAgcmV0dXJuIF90eXBlcy5ib29sVHlwZTsKICAgICAgfQogICAgfQogICAgaWYgKG5vZGUucmVjZWl2ZXIgaXMgaXIuVGhpc0V4cHJlc3Npb24pIHsKICAgICAgX2NoZWNrSWZFeHBvc2VzVGhpcygKICAgICAgICAgIHNlbGVjdG9yLCBfdHlwZXMubmV3VHlwZWRTZWxlY3RvcihyZWNlaXZlclR5cGUsIG1hc2spKTsKICAgIH0KICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlID0gaGFuZGxlRHluYW1pY0ludm9rZSgKICAgICAgICBDYWxsVHlwZS5hY2Nlc3MsIG5vZGUsIHNlbGVjdG9yLCBtYXNrLCByZWNlaXZlclR5cGUsIGFyZ3VtZW50cyk7CiAgICBpci5NZW1iZXIgaW50ZXJmYWNlVGFyZ2V0ID0gbm9kZS5pbnRlcmZhY2VUYXJnZXQ7CiAgICBpZiAoaW50ZXJmYWNlVGFyZ2V0ICE9IG51bGwpIHsKICAgICAgaWYgKGludGVyZmFjZVRhcmdldCBpcyBpci5Qcm9jZWR1cmUgJiYKICAgICAgICAgIChpbnRlcmZhY2VUYXJnZXQua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLk1ldGhvZCB8fAogICAgICAgICAgICAgIGludGVyZmFjZVRhcmdldC5raW5kID09IGlyLlByb2NlZHVyZUtpbmQuT3BlcmF0b3IpKSB7CiAgICAgICAgLy8gUHVsbCB0aGUgdHlwZSBmcm9tIGtlcm5lbCAoaW5zdGVhZCBvZiBmcm9tIHRoZSBKLW1vZGVsKSBiZWNhdXNlIHRoZQogICAgICAgIC8vIGludGVyZmFjZSB0YXJnZXQgbWlnaHQgYmUgYWJzdHJhY3QgYW5kIHRoZXJlZm9yZSBub3QgcGFydCBvZiB0aGUKICAgICAgICAvLyBKLW1vZGVsLgogICAgICAgIGlyLkRhcnRUeXBlIHJldHVyblR5cGUgPSBpbnRlcmZhY2VUYXJnZXQuZnVuY3Rpb24ucmV0dXJuVHlwZTsKICAgICAgICAvLyBUaGUgcmV0dXJuIHR5cGUgdmFyaWVzIHdpdGggdGhlIGNhbGwgc2l0ZSBzbyB3ZSBuYXJyb3cgdGhlIHN0YXRpYwogICAgICAgIC8vIHJldHVybiB0eXBlLgogICAgICAgIGlmIChjb250YWluc0ZyZWVWYXJpYWJsZXMocmV0dXJuVHlwZSkpIHsKICAgICAgICAgIHR5cGUgPSBfdHlwZXMubmFycm93VHlwZSh0eXBlLCBfZ2V0U3RhdGljVHlwZShub2RlKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRoZSByZXR1cm4gdHlwZSBpcyB0aHJvd24gYXdheSB3aGVuIHVzaW5nIFtUeXBlTWFza11zOyBuYXJyb3cgdG8gdGhlCiAgICAgICAgLy8gc3RhdGljIHJldHVybiB0eXBlLgogICAgICAgIHR5cGUgPSBfdHlwZXMubmFycm93VHlwZSh0eXBlLCBfZ2V0U3RhdGljVHlwZShub2RlKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIFdlIGRvbid0IGhhdmUgYSBrbm93biB0YXJnZXQgYnV0IHRoZSBzdGF0aWMgdHlwZSBob2xkIHNvbWUgaW5mb3JtYXRpb24KICAgICAgLy8gaWYgaXQgaXMgYSBmdW5jdGlvbiB0eXBlLgogICAgICB0eXBlID0gX3R5cGVzLm5hcnJvd1R5cGUodHlwZSwgX2dldFN0YXRpY1R5cGUobm9kZSkpOwogICAgfQogICAgcmV0dXJuIHR5cGU7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gX2hhbmRsZUR5bmFtaWMoCiAgICAgIENhbGxUeXBlIGNhbGxUeXBlLAogICAgICBpci5Ob2RlIG5vZGUsCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssCiAgICAgIFR5cGVJbmZvcm1hdGlvbiByZWNlaXZlclR5cGUsCiAgICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cykgewogICAgYXNzZXJ0KHJlY2VpdmVyVHlwZSAhPSBudWxsKTsKICAgIGlmIChfdHlwZXMuc2VsZWN0b3JOZWVkc1VwZGF0ZShyZWNlaXZlclR5cGUsIG1hc2spKSB7CiAgICAgIG1hc2sgPSByZWNlaXZlclR5cGUgPT0gX3R5cGVzLmR5bmFtaWNUeXBlCiAgICAgICAgICA/IG51bGwKICAgICAgICAgIDogX3R5cGVzLm5ld1R5cGVkU2VsZWN0b3IocmVjZWl2ZXJUeXBlLCBtYXNrKTsKICAgICAgX2luZmVycmVyLnVwZGF0ZVNlbGVjdG9ySW5NZW1iZXIoCiAgICAgICAgICBfYW5hbHl6ZWRNZW1iZXIsIGNhbGxUeXBlLCBub2RlLCBzZWxlY3RvciwgbWFzayk7CiAgICB9CgogICAgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZTsKICAgIGlmIChub2RlIGlzIGlyLk1ldGhvZEludm9jYXRpb24gJiYgbm9kZS5yZWNlaXZlciBpcyBpci5WYXJpYWJsZUdldCkgewogICAgICBpci5WYXJpYWJsZUdldCBnZXQgPSBub2RlLnJlY2VpdmVyOwogICAgICB2YXJpYWJsZSA9IGdldC52YXJpYWJsZTsKICAgIH0gZWxzZSBpZiAobm9kZSBpcyBpci5Qcm9wZXJ0eUdldCAmJiBub2RlLnJlY2VpdmVyIGlzIGlyLlZhcmlhYmxlR2V0KSB7CiAgICAgIGlyLlZhcmlhYmxlR2V0IGdldCA9IG5vZGUucmVjZWl2ZXI7CiAgICAgIHZhcmlhYmxlID0gZ2V0LnZhcmlhYmxlOwogICAgfSBlbHNlIGlmIChub2RlIGlzIGlyLlByb3BlcnR5U2V0ICYmIG5vZGUucmVjZWl2ZXIgaXMgaXIuVmFyaWFibGVHZXQpIHsKICAgICAgaXIuVmFyaWFibGVHZXQgZ2V0ID0gbm9kZS5yZWNlaXZlcjsKICAgICAgdmFyaWFibGUgPSBnZXQudmFyaWFibGU7CiAgICB9CgogICAgaWYgKHZhcmlhYmxlICE9IG51bGwpIHsKICAgICAgTG9jYWwgbG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUodmFyaWFibGUpOwogICAgICBpZiAoIV9jYXB0dXJlZFZhcmlhYmxlcy5jb250YWlucyhsb2NhbCkpIHsKICAgICAgICBEYXJ0VHlwZSB0eXBlID0gX2xvY2Fsc01hcC5nZXRMb2NhbFR5cGUoX2VsZW1lbnRNYXAsIGxvY2FsKTsKICAgICAgICBfc3RhdGUudXBkYXRlTG9jYWwoCiAgICAgICAgICAgIF9pbmZlcnJlciwgX2NhcHR1cmVkQW5kQm94ZWQsIGxvY2FsLCByZWNlaXZlclR5cGUsIG5vZGUsIHR5cGUsCiAgICAgICAgICAgIGlzTnVsbGFibGU6IHNlbGVjdG9yLmFwcGxpZXNUb051bGxXaXRob3V0VGhyb3coKSk7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gX2luZmVycmVyLnJlZ2lzdGVyQ2FsbGVkU2VsZWN0b3IoY2FsbFR5cGUsIG5vZGUsIHNlbGVjdG9yLCBtYXNrLAogICAgICAgIHJlY2VpdmVyVHlwZSwgX2FuYWx5emVkTWVtYmVyLCBhcmd1bWVudHMsIF9zaWRlRWZmZWN0c0J1aWxkZXIsCiAgICAgICAgaW5Mb29wOiBpbkxvb3AsIGlzQ29uZGl0aW9uYWw6IGZhbHNlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBoYW5kbGVEeW5hbWljR2V0KGlyLk5vZGUgbm9kZSwgU2VsZWN0b3Igc2VsZWN0b3IsCiAgICAgIEFic3RyYWN0VmFsdWUgbWFzaywgVHlwZUluZm9ybWF0aW9uIHJlY2VpdmVyVHlwZSkgewogICAgcmV0dXJuIF9oYW5kbGVEeW5hbWljKAogICAgICAgIENhbGxUeXBlLmFjY2Vzcywgbm9kZSwgc2VsZWN0b3IsIG1hc2ssIHJlY2VpdmVyVHlwZSwgbnVsbCk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gaGFuZGxlRHluYW1pY1NldCgKICAgICAgaXIuTm9kZSBub2RlLAogICAgICBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLAogICAgICBUeXBlSW5mb3JtYXRpb24gcmVjZWl2ZXJUeXBlLAogICAgICBUeXBlSW5mb3JtYXRpb24gcmhzVHlwZSkgewogICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzID0gbmV3IEFyZ3VtZW50c1R5cGVzKFtyaHNUeXBlXSwgbnVsbCk7CiAgICByZXR1cm4gX2hhbmRsZUR5bmFtaWMoCiAgICAgICAgQ2FsbFR5cGUuYWNjZXNzLCBub2RlLCBzZWxlY3RvciwgbWFzaywgcmVjZWl2ZXJUeXBlLCBhcmd1bWVudHMpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGhhbmRsZUR5bmFtaWNJbnZva2UoCiAgICAgIENhbGxUeXBlIGNhbGxUeXBlLAogICAgICBpci5Ob2RlIG5vZGUsCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssCiAgICAgIFR5cGVJbmZvcm1hdGlvbiByZWNlaXZlclR5cGUsCiAgICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cykgewogICAgcmV0dXJuIF9oYW5kbGVEeW5hbWljKAogICAgICAgIGNhbGxUeXBlLCBub2RlLCBzZWxlY3RvciwgbWFzaywgcmVjZWl2ZXJUeXBlLCBhcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0TGV0KGlyLkxldCBub2RlKSB7CiAgICB2aXNpdChub2RlLnZhcmlhYmxlKTsKICAgIHJldHVybiB2aXNpdChub2RlLmJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0QmxvY2tFeHByZXNzaW9uKGlyLkJsb2NrRXhwcmVzc2lvbiBub2RlKSB7CiAgICB2aXNpdChub2RlLmJvZHkpOwogICAgcmV0dXJuIHZpc2l0KG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgaWYgKG5vZGUuaXRlcmFibGUgaXMgaXIuVGhpc0V4cHJlc3Npb24pIHsKICAgICAgLy8gQW55IHJlYXNvbmFibGUgaW1wbGVtZW50YXRpb24gb2YgYW4gaXRlcmF0b3Igd291bGQgZXhwb3NlCiAgICAgIC8vIHRoaXMsIHNvIHdlIHBsYXkgaXQgc2FmZSBhbmQgYXNzdW1lIGl0IHdpbGwuCiAgICAgIF9zdGF0ZS5tYXJrVGhpc0FzRXhwb3NlZCgpOwogICAgfQoKICAgIEFic3RyYWN0VmFsdWUgY3VycmVudE1hc2s7CiAgICBBYnN0cmFjdFZhbHVlIG1vdmVOZXh0TWFzazsKICAgIFR5cGVJbmZvcm1hdGlvbiBpdGVyYXRvclR5cGU7CiAgICBpZiAobm9kZS5pc0FzeW5jKSB7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiBleHByZXNzaW9uVHlwZSA9IHZpc2l0KG5vZGUuaXRlcmFibGUpOwoKICAgICAgY3VycmVudE1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZJdGVyYXRvckN1cnJlbnQobm9kZSk7CiAgICAgIG1vdmVOZXh0TWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZkl0ZXJhdG9yTW92ZU5leHQobm9kZSk7CgogICAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciA9CiAgICAgICAgICBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuc3RyZWFtSXRlcmF0b3JDb25zdHJ1Y3RvcjsKCiAgICAgIC8vLyBTeW50aGVzaXplIGEgY2FsbCB0byB0aGUgW1N0cmVhbUl0ZXJhdG9yXSBjb25zdHJ1Y3Rvci4KICAgICAgaXRlcmF0b3JUeXBlID0gaGFuZGxlU3RhdGljSW52b2tlKG5vZGUsIG51bGwsIG51bGwsIGNvbnN0cnVjdG9yLAogICAgICAgICAgbmV3IEFyZ3VtZW50c1R5cGVzKFtleHByZXNzaW9uVHlwZV0sIG51bGwpKTsKICAgIH0gZWxzZSB7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiBleHByZXNzaW9uVHlwZSA9IHZpc2l0KG5vZGUuaXRlcmFibGUpOwogICAgICBTZWxlY3RvciBpdGVyYXRvclNlbGVjdG9yID0gU2VsZWN0b3JzLml0ZXJhdG9yOwogICAgICBBYnN0cmFjdFZhbHVlIGl0ZXJhdG9yTWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZkl0ZXJhdG9yKG5vZGUpOwogICAgICBjdXJyZW50TWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZkl0ZXJhdG9yQ3VycmVudChub2RlKTsKICAgICAgbW92ZU5leHRNYXNrID0gX21lbWJlckRhdGEudHlwZU9mSXRlcmF0b3JNb3ZlTmV4dChub2RlKTsKCiAgICAgIGl0ZXJhdG9yVHlwZSA9IGhhbmRsZUR5bmFtaWNJbnZva2UoQ2FsbFR5cGUuZm9ySW4sIG5vZGUsIGl0ZXJhdG9yU2VsZWN0b3IsCiAgICAgICAgICBpdGVyYXRvck1hc2ssIGV4cHJlc3Npb25UeXBlLCBuZXcgQXJndW1lbnRzVHlwZXMuZW1wdHkoKSk7CiAgICB9CgogICAgaGFuZGxlRHluYW1pY0ludm9rZShDYWxsVHlwZS5mb3JJbiwgbm9kZSwgU2VsZWN0b3JzLm1vdmVOZXh0LCBtb3ZlTmV4dE1hc2ssCiAgICAgICAgaXRlcmF0b3JUeXBlLCBuZXcgQXJndW1lbnRzVHlwZXMuZW1wdHkoKSk7CiAgICBUeXBlSW5mb3JtYXRpb24gY3VycmVudFR5cGUgPSBoYW5kbGVEeW5hbWljSW52b2tlKAogICAgICAgIENhbGxUeXBlLmZvckluLAogICAgICAgIG5vZGUsCiAgICAgICAgU2VsZWN0b3JzLmN1cnJlbnQsCiAgICAgICAgY3VycmVudE1hc2ssCiAgICAgICAgaXRlcmF0b3JUeXBlLAogICAgICAgIG5ldyBBcmd1bWVudHNUeXBlcy5lbXB0eSgpKTsKCiAgICBMb2NhbCB2YXJpYWJsZSA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxWYXJpYWJsZShub2RlLnZhcmlhYmxlKTsKICAgIERhcnRUeXBlIHZhcmlhYmxlVHlwZSA9IF9sb2NhbHNNYXAuZ2V0TG9jYWxUeXBlKF9lbGVtZW50TWFwLCB2YXJpYWJsZSk7CiAgICBfc3RhdGUudXBkYXRlTG9jYWwoX2luZmVycmVyLCBfY2FwdHVyZWRBbmRCb3hlZCwgdmFyaWFibGUsIGN1cnJlbnRUeXBlLAogICAgICAgIG5vZGUudmFyaWFibGUsIHZhcmlhYmxlVHlwZSk7CgogICAgSnVtcFRhcmdldCB0YXJnZXQgPSBfbG9jYWxzTWFwLmdldEp1bXBUYXJnZXRGb3JGb3JJbihub2RlKTsKICAgIHJldHVybiBoYW5kbGVMb29wKG5vZGUsIHRhcmdldCwgKCkgewogICAgICB2aXNpdChub2RlLmJvZHkpOwogICAgfSk7CiAgfQoKICB2b2lkIF9zZXR1cEJyZWFrc0FuZENvbnRpbnVlcyhKdW1wVGFyZ2V0IHRhcmdldCkgewogICAgaWYgKHRhcmdldCA9PSBudWxsKSByZXR1cm47CiAgICBpZiAodGFyZ2V0LmlzQ29udGludWVUYXJnZXQpIHsKICAgICAgX2NvbnRpbnVlc0Zvclt0YXJnZXRdID0gPExvY2FsU3RhdGU+W107CiAgICB9CiAgICBpZiAodGFyZ2V0LmlzQnJlYWtUYXJnZXQpIHsKICAgICAgX2JyZWFrc0Zvclt0YXJnZXRdID0gPExvY2FsU3RhdGU+W107CiAgICB9CiAgfQoKICB2b2lkIF9jbGVhckJyZWFrc0FuZENvbnRpbnVlcyhKdW1wVGFyZ2V0IGVsZW1lbnQpIHsKICAgIF9jb250aW51ZXNGb3IucmVtb3ZlKGVsZW1lbnQpOwogICAgX2JyZWFrc0Zvci5yZW1vdmUoZWxlbWVudCk7CiAgfQoKICBMaXN0PExvY2FsU3RhdGU+IF9nZXRCcmVha3MoSnVtcFRhcmdldCB0YXJnZXQpIHsKICAgIExpc3Q8TG9jYWxTdGF0ZT4gbGlzdCA9IDxMb2NhbFN0YXRlPltfc3RhdGVdOwogICAgaWYgKHRhcmdldCA9PSBudWxsKSByZXR1cm4gbGlzdDsKICAgIGlmICghdGFyZ2V0LmlzQnJlYWtUYXJnZXQpIHJldHVybiBsaXN0OwogICAgcmV0dXJuIGxpc3QuLmFkZEFsbChfYnJlYWtzRm9yW3RhcmdldF0pOwogIH0KCiAgTGlzdDxMb2NhbFN0YXRlPiBfZ2V0TG9vcEJhY2tFZGdlcyhKdW1wVGFyZ2V0IHRhcmdldCkgewogICAgTGlzdDxMb2NhbFN0YXRlPiBsaXN0ID0gPExvY2FsU3RhdGU+W19zdGF0ZV07CiAgICBpZiAodGFyZ2V0ID09IG51bGwpIHJldHVybiBsaXN0OwogICAgaWYgKCF0YXJnZXQuaXNDb250aW51ZVRhcmdldCkgcmV0dXJuIGxpc3Q7CiAgICByZXR1cm4gbGlzdC4uYWRkQWxsKF9jb250aW51ZXNGb3JbdGFyZ2V0XSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gaGFuZGxlTG9vcChpci5Ob2RlIG5vZGUsIEp1bXBUYXJnZXQgdGFyZ2V0LCB2b2lkIGxvZ2ljKCkpIHsKICAgIF9sb29wTGV2ZWwrKzsKICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUJlZm9yZSA9IF9zdGF0ZTsKICAgIHN0YXRlQmVmb3JlLnN0YXJ0TG9vcChfaW5mZXJyZXIsIG5vZGUpOwogICAgZG8gewogICAgICAvLyBTZXR1cCAoYW5kIGNsZWFyIGluIGNhc2Ugb2YgbXVsdGlwbGUgaXRlcmF0aW9ucyBvZiB0aGUgbG9vcCkKICAgICAgLy8gdGhlIGxpc3RzIG9mIGJyZWFrcyBhbmQgY29udGludWVzIHNlZW4gaW4gdGhlIGxvb3AuCiAgICAgIF9zZXR1cEJyZWFrc0FuZENvbnRpbnVlcyh0YXJnZXQpOwogICAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVCZWZvcmUpOwogICAgICBsb2dpYygpOwogICAgICBjaGFuZ2VkID0gc3RhdGVCZWZvcmUubWVyZ2VBbGwoX2luZmVycmVyLCBfZ2V0TG9vcEJhY2tFZGdlcyh0YXJnZXQpKTsKICAgIH0gd2hpbGUgKGNoYW5nZWQpOwogICAgX2xvb3BMZXZlbC0tOwogICAgc3RhdGVCZWZvcmUuZW5kTG9vcChfaW5mZXJyZXIsIG5vZGUpOwogICAgYm9vbCBrZWVwT3duTG9jYWxzID0gbm9kZSBpcyEgaXIuRG9TdGF0ZW1lbnQ7CiAgICBfc3RhdGUgPSBzdGF0ZUJlZm9yZS5tZXJnZUFmdGVyQnJlYWtzKF9pbmZlcnJlciwgX2dldEJyZWFrcyh0YXJnZXQpLAogICAgICAgIGtlZXBPd25Mb2NhbHM6IGtlZXBPd25Mb2NhbHMpOwogICAgX2NsZWFyQnJlYWtzQW5kQ29udGludWVzKHRhcmdldCk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPSBfZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3Rvcihub2RlLnRhcmdldCk7CiAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMgPSBhbmFseXplQXJndW1lbnRzKG5vZGUuYXJndW1lbnRzKTsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gX2VsZW1lbnRNYXAuZ2V0U2VsZWN0b3Iobm9kZSk7CiAgICBBYnN0cmFjdFZhbHVlIG1hc2sgPSBfbWVtYmVyRGF0YS50eXBlT2ZTZW5kKG5vZGUpOwogICAgcmV0dXJuIGhhbmRsZUNvbnN0cnVjdG9ySW52b2tlKAogICAgICAgIG5vZGUsIG5vZGUuYXJndW1lbnRzLCBzZWxlY3RvciwgbWFzaywgY29uc3RydWN0b3IsIGFyZ3VtZW50cyk7CiAgfQoKICAvLy8gVHJ5IHRvIGZpbmQgdGhlIGxlbmd0aCBnaXZlbiB0byBhIGZpeGVkIGFycmF5IGNvbnN0cnVjdG9yIGNhbGwuCiAgaW50IF9maW5kTGVuZ3RoKGlyLkFyZ3VtZW50cyBhcmd1bWVudHMpIHsKICAgIGludCBmaW5pc2goaW50IGxlbmd0aCkgewogICAgICAvLyBGaWx0ZXIgb3V0IGxlbmd0aHMgdGhhdCBzaG91bGQgbm90IGJlIHRyYWNrZWQuCiAgICAgIGlmIChsZW5ndGggPCAwKSByZXR1cm4gbnVsbDsKICAgICAgLy8gU2VyaWFsaXphdGlvbiBsaW1pdC4KICAgICAgaWYgKGxlbmd0aCA+PSAoMSA8PCAzMCkpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gbGVuZ3RoOwogICAgfQoKICAgIGlyLkV4cHJlc3Npb24gZmlyc3RBcmd1bWVudCA9IGFyZ3VtZW50cy5wb3NpdGlvbmFsLmZpcnN0OwogICAgaWYgKGZpcnN0QXJndW1lbnQgaXMgaXIuQ29uc3RhbnRFeHByZXNzaW9uICYmCiAgICAgICAgZmlyc3RBcmd1bWVudC5jb25zdGFudCBpcyBpci5Eb3VibGVDb25zdGFudCkgewogICAgICBpci5Eb3VibGVDb25zdGFudCBjb25zdGFudCA9IGZpcnN0QXJndW1lbnQuY29uc3RhbnQ7CiAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IGNvbnN0YW50LnZhbHVlOwogICAgICBpbnQgdHJ1bmNhdGVkVmFsdWUgPSBkb3VibGVWYWx1ZS50cnVuY2F0ZSgpOwogICAgICBpZiAoZG91YmxlVmFsdWUgPT0gdHJ1bmNhdGVkVmFsdWUpIHsKICAgICAgICByZXR1cm4gZmluaXNoKHRydW5jYXRlZFZhbHVlKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChmaXJzdEFyZ3VtZW50IGlzIGlyLkludExpdGVyYWwpIHsKICAgICAgcmV0dXJuIGZpbmlzaChmaXJzdEFyZ3VtZW50LnZhbHVlKTsKICAgIH0gZWxzZSBpZiAoZmlyc3RBcmd1bWVudCBpcyBpci5TdGF0aWNHZXQpIHsKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IF9lbGVtZW50TWFwLmdldE1lbWJlcihmaXJzdEFyZ3VtZW50LnRhcmdldCk7CiAgICAgIGlmIChtZW1iZXIuaXNGaWVsZCkgewogICAgICAgIEZpZWxkQW5hbHlzaXNEYXRhIGZpZWxkRGF0YSA9CiAgICAgICAgICAgIF9jbG9zZWRXb3JsZC5maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShtZW1iZXIpOwogICAgICAgIGlmIChmaWVsZERhdGEuaXNFZmZlY3RpdmVseUNvbnN0YW50ICYmIGZpZWxkRGF0YS5jb25zdGFudFZhbHVlLmlzSW50KSB7CiAgICAgICAgICBJbnRDb25zdGFudFZhbHVlIGludFZhbHVlID0gZmllbGREYXRhLmNvbnN0YW50VmFsdWU7CiAgICAgICAgICBpZiAoaW50VmFsdWUuaW50VmFsdWUuaXNWYWxpZEludCkgewogICAgICAgICAgICByZXR1cm4gZmluaXNoKGludFZhbHVlLmludFZhbHVlLnRvSW50KCkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYKICBib29sIF9pc0NvbnN0cnVjdG9yT2ZUeXBlZEFycmF5U3ViY2xhc3MoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpIHsKICAgIENsYXNzRW50aXR5IGNscyA9IGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzOwogICAgcmV0dXJuIGNscy5saWJyYXJ5LmNhbm9uaWNhbFVyaSA9PSBVcmlzLmRhcnRfX25hdGl2ZV90eXBlZF9kYXRhICYmCiAgICAgICAgX2Nsb3NlZFdvcmxkLm5hdGl2ZURhdGEuaXNOYXRpdmVDbGFzcyhjbHMpICYmCiAgICAgICAgX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5CiAgICAgICAgICAgIC5pc1N1YnR5cGVPZihjbHMsIF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy50eXBlZERhdGFDbGFzcykgJiYKICAgICAgICBfY2xvc2VkV29ybGQuY2xhc3NIaWVyYXJjaHkKICAgICAgICAgICAgLmlzU3VidHlwZU9mKGNscywgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcykgJiYKICAgICAgICBjb25zdHJ1Y3Rvci5uYW1lID09ICcnOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGhhbmRsZUNvbnN0cnVjdG9ySW52b2tlKAogICAgICBpci5Ob2RlIG5vZGUsCiAgICAgIGlyLkFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssCiAgICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yLAogICAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHNUeXBlcykgewogICAgVHlwZUluZm9ybWF0aW9uIHJldHVyblR5cGUgPQogICAgICAgIGhhbmRsZVN0YXRpY0ludm9rZShub2RlLCBzZWxlY3RvciwgbWFzaywgY29uc3RydWN0b3IsIGFyZ3VtZW50c1R5cGVzKTsKICAgIGlmIChfZWxlbWVudE1hcC5jb21tb25FbGVtZW50cy5pc1VubmFtZWRMaXN0Q29uc3RydWN0b3IoY29uc3RydWN0b3IpKSB7CiAgICAgIC8vIFdlIGhhdmUgYG5ldyBMaXN0KC4uLilgLgogICAgICBpZiAoYXJndW1lbnRzLnBvc2l0aW9uYWwuaXNFbXB0eSAmJiBhcmd1bWVudHMubmFtZWQuaXNFbXB0eSkgewogICAgICAgIC8vIFdlIGhhdmUgYG5ldyBMaXN0KClgLgogICAgICAgIHJldHVybiBfaW5mZXJyZXIuY29uY3JldGVUeXBlcy5wdXRJZkFic2VudCgKICAgICAgICAgICAgbm9kZSwKICAgICAgICAgICAgKCkgPT4gX3R5cGVzLmFsbG9jYXRlTGlzdChfdHlwZXMuZ3Jvd2FibGVMaXN0VHlwZSwgbm9kZSwKICAgICAgICAgICAgICAgIF9hbmFseXplZE1lbWJlciwgX3R5cGVzLm5vbk51bGxFbXB0eSgpLCAwKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gV2UgaGF2ZSBgbmV3IExpc3QobGVuKWAuCiAgICAgICAgaW50IGxlbmd0aCA9IF9maW5kTGVuZ3RoKGFyZ3VtZW50cyk7CiAgICAgICAgcmV0dXJuIF9pbmZlcnJlci5jb25jcmV0ZVR5cGVzLnB1dElmQWJzZW50KAogICAgICAgICAgICBub2RlLAogICAgICAgICAgICAoKSA9PiBfdHlwZXMuYWxsb2NhdGVMaXN0KF90eXBlcy5maXhlZExpc3RUeXBlLCBub2RlLAogICAgICAgICAgICAgICAgX2FuYWx5emVkTWVtYmVyLCBfdHlwZXMubnVsbFR5cGUsIGxlbmd0aCkpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKF9lbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzCiAgICAgICAgLmlzRmlsbGVkTGlzdENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSkgewogICAgICAvLyBXZSBoYXZlIGBuZXcgVWludDMyTGlzdChsZW4sIGZpbGwpYC4KICAgICAgaW50IGxlbmd0aCA9IF9maW5kTGVuZ3RoKGFyZ3VtZW50cyk7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiBlbGVtZW50VHlwZSA9IGFyZ3VtZW50c1R5cGVzLnBvc2l0aW9uYWxbMV07CgogICAgICByZXR1cm4gX2luZmVycmVyLmNvbmNyZXRlVHlwZXMucHV0SWZBYnNlbnQoCiAgICAgICAgICBub2RlLAogICAgICAgICAgKCkgPT4gX3R5cGVzLmFsbG9jYXRlTGlzdChfdHlwZXMuZml4ZWRMaXN0VHlwZSwgbm9kZSwgX2FuYWx5emVkTWVtYmVyLAogICAgICAgICAgICAgIGVsZW1lbnRUeXBlLCBsZW5ndGgpKTsKICAgIH0gZWxzZSBpZiAoX2lzQ29uc3RydWN0b3JPZlR5cGVkQXJyYXlTdWJjbGFzcyhjb25zdHJ1Y3RvcikpIHsKICAgICAgLy8gV2UgaGF2ZSBzb21ldGhpbmcgbGlrZSBgbmV3IExpc3QuZmlsbGVkKGxlbiwgZmlsbClgLgogICAgICBpbnQgbGVuZ3RoID0gX2ZpbmRMZW5ndGgoYXJndW1lbnRzKTsKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IF9lbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudAogICAgICAgICAgLmxvb2t1cENsYXNzTWVtYmVyKGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzLCAnW10nKTsKICAgICAgVHlwZUluZm9ybWF0aW9uIGVsZW1lbnRUeXBlID0gX2luZmVycmVyLnJldHVyblR5cGVPZk1lbWJlcihtZW1iZXIpOwogICAgICByZXR1cm4gX2luZmVycmVyLmNvbmNyZXRlVHlwZXMucHV0SWZBYnNlbnQoCiAgICAgICAgICBub2RlLAogICAgICAgICAgKCkgPT4gX3R5cGVzLmFsbG9jYXRlTGlzdCgKICAgICAgICAgICAgICBfdHlwZXMubm9uTnVsbEV4YWN0KGNvbnN0cnVjdG9yLmVuY2xvc2luZ0NsYXNzKSwKICAgICAgICAgICAgICBub2RlLAogICAgICAgICAgICAgIF9hbmFseXplZE1lbWJlciwKICAgICAgICAgICAgICBlbGVtZW50VHlwZSwKICAgICAgICAgICAgICBsZW5ndGgpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiByZXR1cm5UeXBlOwogICAgfQogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGhhbmRsZVN0YXRpY0ludm9rZShpci5Ob2RlIG5vZGUsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssIE1lbWJlckVudGl0eSBlbGVtZW50LCBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaW5mZXJyZXIucmVnaXN0ZXJDYWxsZWRNZW1iZXIobm9kZSwgc2VsZWN0b3IsIG1hc2ssIF9hbmFseXplZE1lbWJlciwKICAgICAgICBlbGVtZW50LCBhcmd1bWVudHMsIF9zaWRlRWZmZWN0c0J1aWxkZXIsIGluTG9vcCk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gaGFuZGxlQ2xvc3VyZUNhbGwoaXIuTm9kZSBub2RlLCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgQWJzdHJhY3RWYWx1ZSBtYXNrLCBNZW1iZXJFbnRpdHkgbWVtYmVyLCBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMpIHsKICAgIHJldHVybiBfaW5mZXJyZXIucmVnaXN0ZXJDYWxsZWRDbG9zdXJlKAogICAgICAgIG5vZGUsCiAgICAgICAgc2VsZWN0b3IsCiAgICAgICAgbWFzaywKICAgICAgICBfaW5mZXJyZXIudHlwZU9mTWVtYmVyKG1lbWJlciksCiAgICAgICAgX2FuYWx5emVkTWVtYmVyLAogICAgICAgIGFyZ3VtZW50cywKICAgICAgICBfc2lkZUVmZmVjdHNCdWlsZGVyLAogICAgICAgIGluTG9vcDogaW5Mb29wKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBoYW5kbGVGb3JlaWduSW52b2tlKAogICAgICBpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUsCiAgICAgIEZ1bmN0aW9uRW50aXR5IGZ1bmN0aW9uLAogICAgICBBcmd1bWVudHNUeXBlcyBhcmd1bWVudHMsCiAgICAgIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2spIHsKICAgIFN0cmluZyBuYW1lID0gZnVuY3Rpb24ubmFtZTsKICAgIGhhbmRsZVN0YXRpY0ludm9rZShub2RlLCBzZWxlY3RvciwgbWFzaywgZnVuY3Rpb24sIGFyZ3VtZW50cyk7CiAgICBpZiAobmFtZSA9PSBJZGVudGlmaWVycy5KUykgewogICAgICBOYXRpdmVCZWhhdmlvciBuYXRpdmVCZWhhdmlvciA9CiAgICAgICAgICBfZWxlbWVudE1hcC5nZXROYXRpdmVCZWhhdmlvckZvckpzQ2FsbChub2RlKTsKICAgICAgX3NpZGVFZmZlY3RzQnVpbGRlci5hZGQobmF0aXZlQmVoYXZpb3Iuc2lkZUVmZmVjdHMpOwogICAgICByZXR1cm4gX2luZmVycmVyLnR5cGVPZk5hdGl2ZUJlaGF2aW9yKG5hdGl2ZUJlaGF2aW9yKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSBJZGVudGlmaWVycy5KU19FTUJFRERFRF9HTE9CQUwpIHsKICAgICAgTmF0aXZlQmVoYXZpb3IgbmF0aXZlQmVoYXZpb3IgPQogICAgICAgICAgX2VsZW1lbnRNYXAuZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0VtYmVkZGVkR2xvYmFsQ2FsbChub2RlKTsKICAgICAgX3NpZGVFZmZlY3RzQnVpbGRlci5hZGQobmF0aXZlQmVoYXZpb3Iuc2lkZUVmZmVjdHMpOwogICAgICByZXR1cm4gX2luZmVycmVyLnR5cGVPZk5hdGl2ZUJlaGF2aW9yKG5hdGl2ZUJlaGF2aW9yKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSBJZGVudGlmaWVycy5KU19CVUlMVElOKSB7CiAgICAgIE5hdGl2ZUJlaGF2aW9yIG5hdGl2ZUJlaGF2aW9yID0KICAgICAgICAgIF9lbGVtZW50TWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9ySnNCdWlsdGluQ2FsbChub2RlKTsKICAgICAgX3NpZGVFZmZlY3RzQnVpbGRlci5hZGQobmF0aXZlQmVoYXZpb3Iuc2lkZUVmZmVjdHMpOwogICAgICByZXR1cm4gX2luZmVycmVyLnR5cGVPZk5hdGl2ZUJlaGF2aW9yKG5hdGl2ZUJlaGF2aW9yKTsKICAgIH0gZWxzZSBpZiAobmFtZSA9PSBJZGVudGlmaWVycy5KU19TVFJJTkdfQ09OQ0FUKSB7CiAgICAgIHJldHVybiBfdHlwZXMuc3RyaW5nVHlwZTsKICAgIH0gZWxzZSB7CiAgICAgIF9zaWRlRWZmZWN0c0J1aWxkZXIuc2V0QWxsU2lkZUVmZmVjdHMoKTsKICAgICAgcmV0dXJuIF90eXBlcy5keW5hbWljVHlwZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFN0YXRpY0ludm9jYXRpb24oaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gX2VsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUudGFyZ2V0KTsKICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cyA9IGFuYWx5emVBcmd1bWVudHMobm9kZS5hcmd1bWVudHMpOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBfZWxlbWVudE1hcC5nZXRTZWxlY3Rvcihub2RlKTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CiAgICBpZiAoX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmlzRm9yZWlnbihtZW1iZXIpKSB7CiAgICAgIHJldHVybiBoYW5kbGVGb3JlaWduSW52b2tlKG5vZGUsIG1lbWJlciwgYXJndW1lbnRzLCBzZWxlY3RvciwgbWFzayk7CiAgICB9IGVsc2UgaWYgKG1lbWJlci5pc0NvbnN0cnVjdG9yKSB7CiAgICAgIHJldHVybiBoYW5kbGVDb25zdHJ1Y3Rvckludm9rZSgKICAgICAgICAgIG5vZGUsIG5vZGUuYXJndW1lbnRzLCBzZWxlY3RvciwgbWFzaywgbWVtYmVyLCBhcmd1bWVudHMpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KG1lbWJlci5pc0Z1bmN0aW9uLCAiVW5leHBlY3RlZCBzdGF0aWMgaW52b2NhdGlvbiB0YXJnZXQ6ICRtZW1iZXIiKTsKICAgICAgVHlwZUluZm9ybWF0aW9uIHR5cGUgPQogICAgICAgICAgaGFuZGxlU3RhdGljSW52b2tlKG5vZGUsIHNlbGVjdG9yLCBtYXNrLCBtZW1iZXIsIGFyZ3VtZW50cyk7CiAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPQogICAgICAgICAgX2VsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50LmdldEZ1bmN0aW9uVHlwZShtZW1iZXIpOwogICAgICBpZiAoZnVuY3Rpb25UeXBlLnJldHVyblR5cGUuY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlcykgewogICAgICAgIC8vIFRoZSByZXR1cm4gdHlwZSB2YXJpZXMgd2l0aCB0aGUgY2FsbCBzaXRlIHNvIHdlIG5hcnJvdyB0aGUgc3RhdGljCiAgICAgICAgLy8gcmV0dXJuIHR5cGUuCiAgICAgICAgdHlwZSA9IF90eXBlcy5uYXJyb3dUeXBlKHR5cGUsIF9nZXRTdGF0aWNUeXBlKG5vZGUpKTsKICAgICAgfQogICAgICByZXR1cm4gdHlwZTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdExvYWRMaWJyYXJ5KGlyLkxvYWRMaWJyYXJ5IG5vZGUpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEltcHJvdmUgdGhpcyBieSByZXR1cm5pbmcgYSBGdXR1cmUgdHlwZSBpbnN0ZWFkLgogICAgcmV0dXJuIF90eXBlcy5keW5hbWljVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFN0YXRpY0dldChpci5TdGF0aWNHZXQgbm9kZSkgewogICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0gX21lbWJlckRhdGEudHlwZU9mU2VuZChub2RlKTsKICAgIGFzc2VydChtYXNrID09IG51bGwpOwogICAgcmV0dXJuIGNyZWF0ZVN0YXRpY0dldFR5cGVJbmZvcm1hdGlvbihub2RlLCBub2RlLnRhcmdldCwgbWFzazogbWFzayk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gY3JlYXRlU3RhdGljR2V0VHlwZUluZm9ybWF0aW9uKGlyLk5vZGUgbm9kZSwgaXIuTWVtYmVyIHRhcmdldCwKICAgICAge0Fic3RyYWN0VmFsdWUgbWFza30pIHsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXIodGFyZ2V0KTsKICAgIHJldHVybiBoYW5kbGVTdGF0aWNJbnZva2UoCiAgICAgICAgbm9kZSwgbmV3IFNlbGVjdG9yLmdldHRlcihtZW1iZXIubWVtYmVyTmFtZSksIG1hc2ssIG1lbWJlciwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTdGF0aWNTZXQoaXIuU3RhdGljU2V0IG5vZGUpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiByaHNUeXBlID0gdmlzaXQobm9kZS52YWx1ZSk7CiAgICBpZiAobm9kZS52YWx1ZSBpcyBpci5UaGlzRXhwcmVzc2lvbikgewogICAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKICAgIH0KICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBfZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZS50YXJnZXQpOwogICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0gX21lbWJlckRhdGEudHlwZU9mU2VuZChub2RlKTsKICAgIGhhbmRsZVN0YXRpY0ludm9rZShub2RlLCBuZXcgU2VsZWN0b3Iuc2V0dGVyKG1lbWJlci5tZW1iZXJOYW1lKSwgbWFzaywKICAgICAgICBtZW1iZXIsIG5ldyBBcmd1bWVudHNUeXBlcyhbcmhzVHlwZV0sIG51bGwpKTsKICAgIHJldHVybiByaHNUeXBlOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGhhbmRsZVByb3BlcnR5R2V0KAogICAgICBpci5UcmVlTm9kZSBub2RlLCBUeXBlSW5mb3JtYXRpb24gcmVjZWl2ZXJUeXBlLCBpci5NZW1iZXIgaW50ZXJmYWNlVGFyZ2V0LAogICAgICB7Ym9vbCBpc1RoaXN9KSB7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IF9lbGVtZW50TWFwLmdldFNlbGVjdG9yKG5vZGUpOwogICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0gX21lbWJlckRhdGEudHlwZU9mU2VuZChub2RlKTsKICAgIGlmIChpc1RoaXMpIHsKICAgICAgX2NoZWNrSWZFeHBvc2VzVGhpcygKICAgICAgICAgIHNlbGVjdG9yLCBfdHlwZXMubmV3VHlwZWRTZWxlY3RvcihyZWNlaXZlclR5cGUsIG1hc2spKTsKICAgIH0KICAgIFR5cGVJbmZvcm1hdGlvbiB0eXBlID0gaGFuZGxlRHluYW1pY0dldChub2RlLCBzZWxlY3RvciwgbWFzaywgcmVjZWl2ZXJUeXBlKTsKICAgIGlmIChpbnRlcmZhY2VUYXJnZXQgIT0gbnVsbCkgewogICAgICAvLyBQdWxsIHRoZSB0eXBlIGZyb20ga2VybmVsIChpbnN0ZWFkIG9mIGZyb20gdGhlIEotbW9kZWwpIGJlY2F1c2UgdGhlCiAgICAgIC8vIGludGVyZmFjZSB0YXJnZXQgbWlnaHQgYmUgYWJzdHJhY3QgYW5kIHRoZXJlZm9yZSBub3QgcGFydCBvZiB0aGUKICAgICAgLy8gSi1tb2RlbC4KICAgICAgaXIuRGFydFR5cGUgcmVzdWx0VHlwZSA9IGludGVyZmFjZVRhcmdldC5nZXR0ZXJUeXBlOwogICAgICAvLyBUaGUgcmVzdWx0IHR5cGUgdmFyaWVzIHdpdGggdGhlIGNhbGwgc2l0ZSBzbyB3ZSBuYXJyb3cgdGhlIHN0YXRpYwogICAgICAvLyByZXN1bHQgdHlwZS4KICAgICAgaWYgKGNvbnRhaW5zRnJlZVZhcmlhYmxlcyhyZXN1bHRUeXBlKSkgewogICAgICAgIHR5cGUgPSBfdHlwZXMubmFycm93VHlwZSh0eXBlLCBfZ2V0U3RhdGljVHlwZShub2RlKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0UHJvcGVydHlHZXQoaXIuUHJvcGVydHlHZXQgbm9kZSkgewogICAgVHlwZUluZm9ybWF0aW9uIHJlY2VpdmVyVHlwZSA9IHZpc2l0KG5vZGUucmVjZWl2ZXIpOwogICAgcmV0dXJuIGhhbmRsZVByb3BlcnR5R2V0KG5vZGUsIHJlY2VpdmVyVHlwZSwgbm9kZS5pbnRlcmZhY2VUYXJnZXQsCiAgICAgICAgaXNUaGlzOiBub2RlLnJlY2VpdmVyIGlzIGlyLlRoaXNFeHByZXNzaW9uKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdERpcmVjdFByb3BlcnR5R2V0KGlyLkRpcmVjdFByb3BlcnR5R2V0IG5vZGUpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiByZWNlaXZlclR5cGUgPSB0aGlzVHlwZTsKICAgIHJldHVybiBoYW5kbGVQcm9wZXJ0eUdldChub2RlLCByZWNlaXZlclR5cGUsIG5vZGUudGFyZ2V0LCBpc1RoaXM6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0UHJvcGVydHlTZXQoaXIuUHJvcGVydHlTZXQgbm9kZSkgewogICAgVHlwZUluZm9ybWF0aW9uIHJlY2VpdmVyVHlwZSA9IHZpc2l0KG5vZGUucmVjZWl2ZXIpOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBfZWxlbWVudE1hcC5nZXRTZWxlY3Rvcihub2RlKTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CgogICAgVHlwZUluZm9ybWF0aW9uIHJoc1R5cGUgPSB2aXNpdChub2RlLnZhbHVlKTsKICAgIGlmIChub2RlLnZhbHVlIGlzIGlyLlRoaXNFeHByZXNzaW9uKSB7CiAgICAgIF9zdGF0ZS5tYXJrVGhpc0FzRXhwb3NlZCgpOwogICAgfQoKICAgIGlmIChfaW5HZW5lcmF0aXZlQ29uc3RydWN0b3IgJiYgbm9kZS5yZWNlaXZlciBpcyBpci5UaGlzRXhwcmVzc2lvbikgewogICAgICBBYnN0cmFjdFZhbHVlIHR5cGVkTWFzayA9IF90eXBlcy5uZXdUeXBlZFNlbGVjdG9yKHJlY2VpdmVyVHlwZSwgbWFzayk7CiAgICAgIGlmICghX2Nsb3NlZFdvcmxkLmluY2x1ZGVzQ2xvc3VyZUNhbGwoc2VsZWN0b3IsIHR5cGVkTWFzaykpIHsKICAgICAgICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IHRhcmdldHMgPQogICAgICAgICAgICBfY2xvc2VkV29ybGQubG9jYXRlTWVtYmVycyhzZWxlY3RvciwgdHlwZWRNYXNrKTsKICAgICAgICAvLyBXZSBqdXN0IHJlY29nbml6ZWQgYSBmaWVsZCBpbml0aWFsaXphdGlvbiBvZiB0aGUgZm9ybToKICAgICAgICAvLyBgdGhpcy5mb28gPSA0MmAuIElmIHRoZXJlIGlzIG9ubHkgb25lIHRhcmdldCwgd2UgY2FuIHVwZGF0ZQogICAgICAgIC8vIGl0cyB0eXBlLgogICAgICAgIGlmICh0YXJnZXRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICBNZW1iZXJFbnRpdHkgc2luZ2xlID0gdGFyZ2V0cy5maXJzdDsKICAgICAgICAgIGlmIChzaW5nbGUuaXNGaWVsZCkgewogICAgICAgICAgICBGaWVsZEVudGl0eSBmaWVsZCA9IHNpbmdsZTsKICAgICAgICAgICAgX3N0YXRlLnVwZGF0ZUZpZWxkKGZpZWxkLCByaHNUeXBlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGlmIChub2RlLnJlY2VpdmVyIGlzIGlyLlRoaXNFeHByZXNzaW9uKSB7CiAgICAgIF9jaGVja0lmRXhwb3Nlc1RoaXMoCiAgICAgICAgICBzZWxlY3RvciwgX3R5cGVzLm5ld1R5cGVkU2VsZWN0b3IocmVjZWl2ZXJUeXBlLCBtYXNrKSk7CiAgICB9CiAgICBoYW5kbGVEeW5hbWljU2V0KG5vZGUsIHNlbGVjdG9yLCBtYXNrLCByZWNlaXZlclR5cGUsIHJoc1R5cGUpOwogICAgcmV0dXJuIHJoc1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRUaGlzRXhwcmVzc2lvbihpci5UaGlzRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gdGhpc1R5cGU7CiAgfQoKICB2b2lkIGhhbmRsZUNvbmRpdGlvbihpci5Ob2RlIG5vZGUpIHsKICAgIGJvb2wgb2xkQWNjdW11bGF0ZUlzQ2hlY2tzID0gX2FjY3VtdWxhdGVJc0NoZWNrczsKICAgIF9hY2N1bXVsYXRlSXNDaGVja3MgPSB0cnVlOwogICAgdmlzaXQobm9kZSwgY29uZGl0aW9uQ29udGV4dDogdHJ1ZSk7CiAgICBfYWNjdW11bGF0ZUlzQ2hlY2tzID0gb2xkQWNjdW11bGF0ZUlzQ2hlY2tzOwogIH0KCiAgdm9pZCBfcG90ZW50aWFsbHlBZGRJc0NoZWNrKGlyLklzRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpZiAoIV9hY2N1bXVsYXRlSXNDaGVja3MpIHJldHVybjsKICAgIGlyLkV4cHJlc3Npb24gb3BlcmFuZCA9IG5vZGUub3BlcmFuZDsKICAgIGlmIChvcGVyYW5kIGlzIGlyLlZhcmlhYmxlR2V0KSB7CiAgICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKG9wZXJhbmQudmFyaWFibGUpOwogICAgICBEYXJ0VHlwZSB0eXBlID0gX2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS50eXBlKTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyQ2hlY2tXaGVuVHJ1ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChfc3RhdGUpOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJDaGVja1doZW5GYWxzZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChfc3RhdGUpOwogICAgICBzdGF0ZUFmdGVyQ2hlY2tXaGVuVHJ1ZS5uYXJyb3dMb2NhbCgKICAgICAgICAgIF9pbmZlcnJlciwgX2NhcHR1cmVkQW5kQm94ZWQsIGxvY2FsLCB0eXBlLCBub2RlKTsKICAgICAgX3NldFN0YXRlQWZ0ZXIoX3N0YXRlLCBzdGF0ZUFmdGVyQ2hlY2tXaGVuVHJ1ZSwgc3RhdGVBZnRlckNoZWNrV2hlbkZhbHNlKTsKICAgIH0KICB9CgogIHZvaWQgX3BvdGVudGlhbGx5QWRkTnVsbENoZWNrKAogICAgICBpci5NZXRob2RJbnZvY2F0aW9uIG5vZGUsIGlyLkV4cHJlc3Npb24gcmVjZWl2ZXIpIHsKICAgIGlmICghX2FjY3VtdWxhdGVJc0NoZWNrcykgcmV0dXJuOwogICAgaWYgKHJlY2VpdmVyIGlzIGlyLlZhcmlhYmxlR2V0KSB7CiAgICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKHJlY2VpdmVyLnZhcmlhYmxlKTsKICAgICAgRGFydFR5cGUgbG9jYWxUeXBlID0gX2xvY2Fsc01hcC5nZXRMb2NhbFR5cGUoX2VsZW1lbnRNYXAsIGxvY2FsKTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyQ2hlY2tXaGVuVHJ1ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChfc3RhdGUpOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJDaGVja1doZW5GYWxzZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChfc3RhdGUpOwogICAgICBzdGF0ZUFmdGVyQ2hlY2tXaGVuVHJ1ZS51cGRhdGVMb2NhbChfaW5mZXJyZXIsIF9jYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwKICAgICAgICAgIF90eXBlcy5udWxsVHlwZSwgbm9kZSwgbG9jYWxUeXBlKTsKICAgICAgc3RhdGVBZnRlckNoZWNrV2hlbkZhbHNlLm5hcnJvd0xvY2FsKF9pbmZlcnJlciwgX2NhcHR1cmVkQW5kQm94ZWQsIGxvY2FsLAogICAgICAgICAgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdFR5cGUsIG5vZGUpOwogICAgICBfc2V0U3RhdGVBZnRlcihfc3RhdGUsIHN0YXRlQWZ0ZXJDaGVja1doZW5UcnVlLCBzdGF0ZUFmdGVyQ2hlY2tXaGVuRmFsc2UpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0SWZTdGF0ZW1lbnQoaXIuSWZTdGF0ZW1lbnQgbm9kZSkgewogICAgTG9jYWxTdGF0ZSBzdGF0ZUJlZm9yZSA9IF9zdGF0ZTsKICAgIGhhbmRsZUNvbmRpdGlvbihub2RlLmNvbmRpdGlvbik7CiAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJDb25kaXRpb25XaGVuVHJ1ZSA9IF9zdGF0ZUFmdGVyV2hlblRydWU7CiAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJDb25kaXRpb25XaGVuRmFsc2UgPSBfc3RhdGVBZnRlcldoZW5GYWxzZTsKICAgIF9zdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChzdGF0ZUFmdGVyQ29uZGl0aW9uV2hlblRydWUpOwogICAgdmlzaXQobm9kZS50aGVuKTsKICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlclRoZW4gPSBfc3RhdGU7CiAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVBZnRlckNvbmRpdGlvbldoZW5GYWxzZSk7CiAgICB2aXNpdChub2RlLm90aGVyd2lzZSk7CiAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJFbHNlID0gX3N0YXRlOwogICAgX3N0YXRlID0KICAgICAgICBzdGF0ZUJlZm9yZS5tZXJnZURpYW1vbmRGbG93KF9pbmZlcnJlciwgc3RhdGVBZnRlclRoZW4sIHN0YXRlQWZ0ZXJFbHNlKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0SXNFeHByZXNzaW9uKGlyLklzRXhwcmVzc2lvbiBub2RlKSB7CiAgICB2aXNpdChub2RlLm9wZXJhbmQpOwogICAgX3BvdGVudGlhbGx5QWRkSXNDaGVjayhub2RlKTsKICAgIHJldHVybiBfdHlwZXMuYm9vbFR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXROb3QoaXIuTm90IG5vZGUpIHsKICAgIHZpc2l0KG5vZGUub3BlcmFuZCwgY29uZGl0aW9uQ29udGV4dDogX2FjY3VtdWxhdGVJc0NoZWNrcyk7CiAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJPcGVyYW5kV2hlblRydWUgPSBfc3RhdGVBZnRlcldoZW5UcnVlOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyT3BlcmFuZFdoZW5GYWxzZSA9IF9zdGF0ZUFmdGVyV2hlbkZhbHNlOwogICAgX3NldFN0YXRlQWZ0ZXIoCiAgICAgICAgX3N0YXRlLCBzdGF0ZUFmdGVyT3BlcmFuZFdoZW5GYWxzZSwgc3RhdGVBZnRlck9wZXJhbmRXaGVuVHJ1ZSk7CiAgICByZXR1cm4gX3R5cGVzLmJvb2xUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0TG9naWNhbEV4cHJlc3Npb24oaXIuTG9naWNhbEV4cHJlc3Npb24gbm9kZSkgewogICAgaWYgKG5vZGUub3BlcmF0b3IgPT0gJyYmJykgewogICAgICBMb2NhbFN0YXRlIHN0YXRlQmVmb3JlID0gX3N0YXRlOwogICAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVCZWZvcmUpOwogICAgICBoYW5kbGVDb25kaXRpb24obm9kZS5sZWZ0KTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyTGVmdFdoZW5UcnVlID0gX3N0YXRlQWZ0ZXJXaGVuVHJ1ZTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyTGVmdFdoZW5GYWxzZSA9IF9zdGF0ZUFmdGVyV2hlbkZhbHNlOwogICAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVBZnRlckxlZnRXaGVuVHJ1ZSk7CiAgICAgIGhhbmRsZUNvbmRpdGlvbihub2RlLnJpZ2h0KTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyUmlnaHRXaGVuVHJ1ZSA9IF9zdGF0ZUFmdGVyV2hlblRydWU7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlclJpZ2h0V2hlbkZhbHNlID0gX3N0YXRlQWZ0ZXJXaGVuRmFsc2U7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlcldoZW5UcnVlID0gc3RhdGVBZnRlclJpZ2h0V2hlblRydWU7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlcldoZW5GYWxzZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChzdGF0ZUJlZm9yZSkKICAgICAgICAgIC5tZXJnZURpYW1vbmRGbG93KAogICAgICAgICAgICAgIF9pbmZlcnJlciwgc3RhdGVBZnRlckxlZnRXaGVuRmFsc2UsIHN0YXRlQWZ0ZXJSaWdodFdoZW5GYWxzZSk7CiAgICAgIExvY2FsU3RhdGUgYWZ0ZXIgPSBzdGF0ZUJlZm9yZS5tZXJnZURpYW1vbmRGbG93KAogICAgICAgICAgX2luZmVycmVyLCBzdGF0ZUFmdGVyV2hlblRydWUsIHN0YXRlQWZ0ZXJXaGVuRmFsc2UpOwogICAgICBfc2V0U3RhdGVBZnRlcihhZnRlciwgc3RhdGVBZnRlcldoZW5UcnVlLCBzdGF0ZUFmdGVyV2hlbkZhbHNlKTsKICAgICAgcmV0dXJuIF90eXBlcy5ib29sVHlwZTsKICAgIH0gZWxzZSBpZiAobm9kZS5vcGVyYXRvciA9PSAnfHwnKSB7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVCZWZvcmUgPSBfc3RhdGU7CiAgICAgIF9zdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChzdGF0ZUJlZm9yZSk7CiAgICAgIGhhbmRsZUNvbmRpdGlvbihub2RlLmxlZnQpOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJMZWZ0V2hlblRydWUgPSBfc3RhdGVBZnRlcldoZW5UcnVlOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJMZWZ0V2hlbkZhbHNlID0gX3N0YXRlQWZ0ZXJXaGVuRmFsc2U7CiAgICAgIF9zdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChzdGF0ZUFmdGVyTGVmdFdoZW5GYWxzZSk7CiAgICAgIGhhbmRsZUNvbmRpdGlvbihub2RlLnJpZ2h0KTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyUmlnaHRXaGVuVHJ1ZSA9IF9zdGF0ZUFmdGVyV2hlblRydWU7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlclJpZ2h0V2hlbkZhbHNlID0gX3N0YXRlQWZ0ZXJXaGVuRmFsc2U7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlcldoZW5UcnVlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKHN0YXRlQmVmb3JlKQogICAgICAgICAgLm1lcmdlRGlhbW9uZEZsb3coCiAgICAgICAgICAgICAgX2luZmVycmVyLCBzdGF0ZUFmdGVyTGVmdFdoZW5UcnVlLCBzdGF0ZUFmdGVyUmlnaHRXaGVuVHJ1ZSk7CiAgICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlcldoZW5GYWxzZSA9IHN0YXRlQWZ0ZXJSaWdodFdoZW5GYWxzZTsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyID0gc3RhdGVCZWZvcmUubWVyZ2VEaWFtb25kRmxvdygKICAgICAgICAgIF9pbmZlcnJlciwgc3RhdGVBZnRlcldoZW5UcnVlLCBzdGF0ZUFmdGVyV2hlbkZhbHNlKTsKICAgICAgX3NldFN0YXRlQWZ0ZXIoc3RhdGVBZnRlciwgc3RhdGVBZnRlcldoZW5UcnVlLCBzdGF0ZUFmdGVyV2hlbkZhbHNlKTsKICAgICAgcmV0dXJuIF90eXBlcy5ib29sVHlwZTsKICAgIH0KICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgIlVuZXhwZWN0ZWQgbG9naWNhbCBvcGVyYXRvciAnJHtub2RlLm9wZXJhdG9yfScuIik7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdENvbmRpdGlvbmFsRXhwcmVzc2lvbihpci5Db25kaXRpb25hbEV4cHJlc3Npb24gbm9kZSkgewogICAgTG9jYWxTdGF0ZSBzdGF0ZUJlZm9yZSA9IF9zdGF0ZTsKICAgIGhhbmRsZUNvbmRpdGlvbihub2RlLmNvbmRpdGlvbik7CiAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJXaGVuVHJ1ZSA9IF9zdGF0ZUFmdGVyV2hlblRydWU7CiAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJXaGVuRmFsc2UgPSBfc3RhdGVBZnRlcldoZW5GYWxzZTsKICAgIF9zdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChzdGF0ZUFmdGVyV2hlblRydWUpOwogICAgVHlwZUluZm9ybWF0aW9uIGZpcnN0VHlwZSA9IHZpc2l0KG5vZGUudGhlbik7CiAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJUaGVuID0gX3N0YXRlOwogICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKHN0YXRlQWZ0ZXJXaGVuRmFsc2UpOwogICAgVHlwZUluZm9ybWF0aW9uIHNlY29uZFR5cGUgPSB2aXNpdChub2RlLm90aGVyd2lzZSk7CiAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJFbHNlID0gX3N0YXRlOwogICAgX3N0YXRlID0KICAgICAgICBzdGF0ZUJlZm9yZS5tZXJnZURpYW1vbmRGbG93KF9pbmZlcnJlciwgc3RhdGVBZnRlclRoZW4sIHN0YXRlQWZ0ZXJFbHNlKTsKICAgIHJldHVybiBfdHlwZXMuYWxsb2NhdGVEaWFtb25kUGhpKGZpcnN0VHlwZSwgc2Vjb25kVHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gaGFuZGxlTG9jYWxGdW5jdGlvbigKICAgICAgaXIuVHJlZU5vZGUgbm9kZSwgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZSwKICAgICAgW2lyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGVdKSB7CiAgICAvLyBXZSBsb29zZSB0cmFjayBvZiBbdGhpc10gaW4gY2xvc3VyZXMgKHNlZSBpc3N1ZSAyMDg0MCkuIFRvIGJlIG9uCiAgICAvLyB0aGUgc2FmZSBzaWRlLCB3ZSBtYXJrIFt0aGlzXSBhcyBleHBvc2VkIGhlcmUuIFdlIGNvdWxkIGRvIGJldHRlciBieQogICAgLy8gYW5hbHl6aW5nIHRoZSBjbG9zdXJlLgogICAgLy8gVE9ETyhoZXJodXQpOiBBbmFseXplIHdoZXRoZXIgY2xvc3VyZSBleHBvc2VzIHRoaXMuIFBvc3NpYmx5IHVzaW5nCiAgICAvLyB3aGV0aGVyIHRoZSBjcmVhdGVkIGNsb3N1cmUgYXMgYSBgdGhpc0xvY2FsYC4KICAgIF9zdGF0ZS5tYXJrVGhpc0FzRXhwb3NlZCgpOwoKICAgIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8gaW5mbyA9IF9jbG9zdXJlRGF0YUxvb2t1cC5nZXRDbG9zdXJlSW5mbyhub2RlKTsKCiAgICAvLyBSZWNvcmQgdGhlIHR5cGVzIG9mIGNhcHR1cmVkIG5vbi1ib3hlZCB2YXJpYWJsZXMuIFR5cGVzIG9mCiAgICAvLyB0aGVzZSB2YXJpYWJsZXMgbWF5IGFscmVhZHkgYmUgdGhlcmUsIGJlY2F1c2Ugb2YgYW4gYW5hbHlzaXMgb2YKICAgIC8vIGEgcHJldmlvdXMgY2xvc3VyZS4KICAgIGluZm8uZm9yRWFjaEZyZWVWYXJpYWJsZSgoTG9jYWwgdmFyaWFibGUsIEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICAgIGlmICghaW5mby5pc0JveGVkVmFyaWFibGUodmFyaWFibGUpKSB7CiAgICAgICAgaWYgKHZhcmlhYmxlID09IGluZm8udGhpc0xvY2FsKSB7CiAgICAgICAgICBfaW5mZXJyZXIucmVjb3JkVHlwZU9mRmllbGQoZmllbGQsIHRoaXNUeXBlKTsKICAgICAgICB9CiAgICAgICAgVHlwZUluZm9ybWF0aW9uIGxvY2FsVHlwZSA9CiAgICAgICAgICAgIF9zdGF0ZS5yZWFkTG9jYWwoX2luZmVycmVyLCBfY2FwdHVyZWRBbmRCb3hlZCwgdmFyaWFibGUpOwogICAgICAgIC8vIFRoZSB0eXBlIGlzIG51bGwgZm9yIHR5cGUgcGFyYW1ldGVycy4KICAgICAgICBpZiAobG9jYWxUeXBlICE9IG51bGwpIHsKICAgICAgICAgIF9pbmZlcnJlci5yZWNvcmRUeXBlT2ZGaWVsZChmaWVsZCwgbG9jYWxUeXBlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgX2NhcHR1cmVkVmFyaWFibGVzLmFkZCh2YXJpYWJsZSk7CiAgICB9KTsKCiAgICBUeXBlSW5mb3JtYXRpb24gbG9jYWxGdW5jdGlvblR5cGUgPQogICAgICAgIF9pbmZlcnJlci5jb25jcmV0ZVR5cGVzLnB1dElmQWJzZW50KG5vZGUsICgpIHsKICAgICAgcmV0dXJuIF90eXBlcy5hbGxvY2F0ZUNsb3N1cmUoaW5mby5jYWxsTWV0aG9kKTsKICAgIH0pOwogICAgaWYgKHZhcmlhYmxlICE9IG51bGwpIHsKICAgICAgTG9jYWwgbG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUodmFyaWFibGUpOwogICAgICBEYXJ0VHlwZSB0eXBlID0gX2xvY2Fsc01hcC5nZXRMb2NhbFR5cGUoX2VsZW1lbnRNYXAsIGxvY2FsKTsKICAgICAgX3N0YXRlLnVwZGF0ZUxvY2FsKAogICAgICAgICAgX2luZmVycmVyLCBfY2FwdHVyZWRBbmRCb3hlZCwgbG9jYWwsIGxvY2FsRnVuY3Rpb25UeXBlLCBub2RlLCB0eXBlLAogICAgICAgICAgaXNOdWxsYWJsZTogZmFsc2UpOwogICAgfQoKICAgIC8vIFdlIGRvbid0IHB1dCB0aGUgY2xvc3VyZSBpbiB0aGUgd29yayBxdWV1ZSBvZiB0aGUKICAgIC8vIGluZmVycmVyLCBiZWNhdXNlIGl0IHdpbGwgc2hhcmUgaW5mb3JtYXRpb24gd2l0aCBpdHMgZW5jbG9zaW5nCiAgICAvLyBtZXRob2QsIGxpa2UgZm9yIGV4YW1wbGUgdGhlIHR5cGVzIG9mIGxvY2FsIHZhcmlhYmxlcy4KICAgIExvY2FsU3RhdGUgY2xvc3VyZVN0YXRlID0gbmV3IExvY2FsU3RhdGUuY2xvc3VyZShfc3RhdGUpOwogICAgS2VybmVsVHlwZUdyYXBoQnVpbGRlciB2aXNpdG9yID0gbmV3IEtlcm5lbFR5cGVHcmFwaEJ1aWxkZXIoCiAgICAgICAgX29wdGlvbnMsCiAgICAgICAgX2Nsb3NlZFdvcmxkLAogICAgICAgIF9pbmZlcnJlciwKICAgICAgICBpbmZvLmNhbGxNZXRob2QsCiAgICAgICAgZnVuY3Rpb25Ob2RlLAogICAgICAgIF9sb2NhbHNNYXAsCiAgICAgICAgX3N0YXRpY1R5cGVQcm92aWRlciwKICAgICAgICBjbG9zdXJlU3RhdGUsCiAgICAgICAgX2NhcHR1cmVkQW5kQm94ZWQpOwogICAgdmlzaXRvci5ydW4oKTsKICAgIF9pbmZlcnJlci5yZWNvcmRSZXR1cm5UeXBlKGluZm8uY2FsbE1ldGhvZCwgdmlzaXRvci5fcmV0dXJuVHlwZSk7CgogICAgcmV0dXJuIGxvY2FsRnVuY3Rpb25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbihpci5GdW5jdGlvbkRlY2xhcmF0aW9uIG5vZGUpIHsKICAgIHJldHVybiBoYW5kbGVMb2NhbEZ1bmN0aW9uKG5vZGUsIG5vZGUuZnVuY3Rpb24sIG5vZGUudmFyaWFibGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0RnVuY3Rpb25FeHByZXNzaW9uKGlyLkZ1bmN0aW9uRXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gaGFuZGxlTG9jYWxGdW5jdGlvbihub2RlLCBub2RlLmZ1bmN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0V2hpbGVTdGF0ZW1lbnQoaXIuV2hpbGVTdGF0ZW1lbnQgbm9kZSkgewogICAgcmV0dXJuIGhhbmRsZUxvb3Aobm9kZSwgX2xvY2Fsc01hcC5nZXRKdW1wVGFyZ2V0Rm9yV2hpbGUobm9kZSksICgpIHsKICAgICAgaGFuZGxlQ29uZGl0aW9uKG5vZGUuY29uZGl0aW9uKTsKICAgICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUuY2hpbGRQYXRoKF9zdGF0ZUFmdGVyV2hlblRydWUpOwogICAgICB2aXNpdChub2RlLmJvZHkpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdERvU3RhdGVtZW50KGlyLkRvU3RhdGVtZW50IG5vZGUpIHsKICAgIHJldHVybiBoYW5kbGVMb29wKG5vZGUsIF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvckRvKG5vZGUpLCAoKSB7CiAgICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgICAgIGhhbmRsZUNvbmRpdGlvbihub2RlLmNvbmRpdGlvbik7CiAgICAgIC8vIFRPRE8oMjkzMDkpOiBUaGlzIGNvbmRpdGlvbiBhcHBlYXJzIHRvIHN0cmVuZ3RoZW4gYm90aCB0aGUgYmFjay1lZGdlCiAgICAgIC8vIGFuZCBleGl0LWVkZ2UuIEZvciBub3csIGF2b2lkIHN0cmVuZ3RoZW5pbmcgb24gdGhlIGNvbmRpdGlvbiB1bnRpbCB0aGUKICAgICAgLy8gcHJvcGVyIGZpeCBpcyBmb3VuZC4KICAgICAgLy8KICAgICAgLy8gICAgIF9zdGF0ZSA9IG5ldyBMb2NhbFN0YXRlLmNoaWxkUGF0aChfc3RhdGVBZnRlcldoZW5UcnVlLCBub2RlLmJvZHkpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEZvclN0YXRlbWVudChpci5Gb3JTdGF0ZW1lbnQgbm9kZSkgewogICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHZhcmlhYmxlIGluIG5vZGUudmFyaWFibGVzKSB7CiAgICAgIHZpc2l0KHZhcmlhYmxlKTsKICAgIH0KICAgIHJldHVybiBoYW5kbGVMb29wKG5vZGUsIF9sb2NhbHNNYXAuZ2V0SnVtcFRhcmdldEZvckZvcihub2RlKSwgKCkgewogICAgICBoYW5kbGVDb25kaXRpb24obm9kZS5jb25kaXRpb24pOwogICAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoX3N0YXRlQWZ0ZXJXaGVuVHJ1ZSk7CiAgICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgICAgIGZvciAoaXIuRXhwcmVzc2lvbiB1cGRhdGUgaW4gbm9kZS51cGRhdGVzKSB7CiAgICAgICAgdmlzaXQodXBkYXRlKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFRyeUNhdGNoKGlyLlRyeUNhdGNoIG5vZGUpIHsKICAgIExvY2FsU3RhdGUgc3RhdGVCZWZvcmUgPSBfc3RhdGU7CiAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS50cnlCbG9jayhzdGF0ZUJlZm9yZSwgbm9kZSk7CiAgICBfc3RhdGUubWFya0luaXRpYWxpemF0aW9uQXNJbmRlZmluaXRlKCk7CiAgICB2aXNpdChub2RlLmJvZHkpOwogICAgTG9jYWxTdGF0ZSBzdGF0ZUFmdGVyQm9keSA9IF9zdGF0ZTsKICAgIF9zdGF0ZSA9IHN0YXRlQmVmb3JlLm1lcmdlRmxvdyhfaW5mZXJyZXIsIHN0YXRlQWZ0ZXJCb2R5KTsKICAgIGZvciAoaXIuQ2F0Y2ggY2F0Y2hCbG9jayBpbiBub2RlLmNhdGNoZXMpIHsKICAgICAgTG9jYWxTdGF0ZSBzdGF0ZUJlZm9yZUNhdGNoID0gX3N0YXRlOwogICAgICBfc3RhdGUgPSBuZXcgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoc3RhdGVCZWZvcmVDYXRjaCk7CiAgICAgIHZpc2l0KGNhdGNoQmxvY2spOwogICAgICBMb2NhbFN0YXRlIHN0YXRlQWZ0ZXJDYXRjaCA9IF9zdGF0ZTsKICAgICAgX3N0YXRlID0gc3RhdGVCZWZvcmVDYXRjaC5tZXJnZUZsb3coX2luZmVycmVyLCBzdGF0ZUFmdGVyQ2F0Y2gpOwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFRyeUZpbmFsbHkoaXIuVHJ5RmluYWxseSBub2RlKSB7CiAgICBMb2NhbFN0YXRlIHN0YXRlQmVmb3JlID0gX3N0YXRlOwogICAgX3N0YXRlID0gbmV3IExvY2FsU3RhdGUudHJ5QmxvY2soc3RhdGVCZWZvcmUsIG5vZGUpOwogICAgX3N0YXRlLm1hcmtJbml0aWFsaXphdGlvbkFzSW5kZWZpbml0ZSgpOwogICAgdmlzaXQobm9kZS5ib2R5KTsKICAgIExvY2FsU3RhdGUgc3RhdGVBZnRlckJvZHkgPSBfc3RhdGU7CiAgICBfc3RhdGUgPSBzdGF0ZUJlZm9yZS5tZXJnZUZsb3coX2luZmVycmVyLCBzdGF0ZUFmdGVyQm9keSk7CiAgICB2aXNpdChub2RlLmZpbmFsaXplcik7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2F0Y2goaXIuQ2F0Y2ggbm9kZSkgewogICAgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBleGNlcHRpb24gPSBub2RlLmV4Y2VwdGlvbjsKICAgIGlmIChleGNlcHRpb24gIT0gbnVsbCkgewogICAgICBUeXBlSW5mb3JtYXRpb24gbWFzazsKICAgICAgRGFydFR5cGUgdHlwZSA9IG5vZGUuZ3VhcmQgIT0gbnVsbAogICAgICAgICAgPyBfZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLmd1YXJkKQogICAgICAgICAgOiBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgICBpZiAodHlwZS5pc0ludGVyZmFjZVR5cGUpIHsKICAgICAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZVR5cGUgPSB0eXBlOwogICAgICAgIG1hc2sgPSBfdHlwZXMubm9uTnVsbFN1YnR5cGUoaW50ZXJmYWNlVHlwZS5lbGVtZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtYXNrID0gX3R5cGVzLmR5bmFtaWNUeXBlOwogICAgICB9CiAgICAgIExvY2FsIGxvY2FsID0gX2xvY2Fsc01hcC5nZXRMb2NhbFZhcmlhYmxlKGV4Y2VwdGlvbik7CiAgICAgIF9zdGF0ZS51cGRhdGVMb2NhbCgKICAgICAgICAgIF9pbmZlcnJlciwgX2NhcHR1cmVkQW5kQm94ZWQsIGxvY2FsLCBtYXNrLCBub2RlLCBjb25zdCBEeW5hbWljVHlwZSgpLAogICAgICAgICAgaXNOdWxsYWJsZTogZmFsc2UgLyogYHRocm93IG51bGxgIHByb2R1Y2VzIGEgTnVsbFRocm93bkVycm9yICovKTsKICAgIH0KICAgIGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gc3RhY2tUcmFjZSA9IG5vZGUuc3RhY2tUcmFjZTsKICAgIGlmIChzdGFja1RyYWNlICE9IG51bGwpIHsKICAgICAgTG9jYWwgbG9jYWwgPSBfbG9jYWxzTWFwLmdldExvY2FsVmFyaWFibGUoc3RhY2tUcmFjZSk7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFVzZSBhIG1hc2sgYmFzZWQgb24gW1N0YWNrVHJhY2VdLgogICAgICAvLyBOb3RlOiBzdGFjayB0cmFjZSBtYXkgYmUgbnVsbCBpZiB1c2VycyBvbWl0IGEgc3RhY2sgaW4KICAgICAgLy8gYGNvbXBsZXRlci5jb21wbGV0ZUVycm9yYC4KICAgICAgX3N0YXRlLnVwZGF0ZUxvY2FsKF9pbmZlcnJlciwgX2NhcHR1cmVkQW5kQm94ZWQsIGxvY2FsLAogICAgICAgICAgX3R5cGVzLmR5bmFtaWNUeXBlLCBub2RlLCBjb25zdCBEeW5hbWljVHlwZSgpKTsKICAgIH0KICAgIHZpc2l0KG5vZGUuYm9keSk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFRocm93KGlyLlRocm93IG5vZGUpIHsKICAgIHZpc2l0KG5vZGUuZXhwcmVzc2lvbik7CiAgICBfc3RhdGUuc2VlblJldHVybk9yVGhyb3cgPSB0cnVlOwogICAgcmV0dXJuIF90eXBlcy5ub25OdWxsRW1wdHkoKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFJldGhyb3coaXIuUmV0aHJvdyBub2RlKSB7CiAgICBfc3RhdGUuc2VlblJldHVybk9yVGhyb3cgPSB0cnVlOwogICAgcmV0dXJuIF90eXBlcy5ub25OdWxsRW1wdHkoKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBoYW5kbGVTdXBlck5vU3VjaE1ldGhvZChpci5Ob2RlIG5vZGUsIFNlbGVjdG9yIHNlbGVjdG9yLAogICAgICBBYnN0cmFjdFZhbHVlIG1hc2ssIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cykgewogICAgLy8gRW5zdXJlIHdlIGNyZWF0ZSBhIG5vZGUsIHRvIG1ha2UgZXhwbGljaXQgdGhlIGNhbGwgdG8gdGhlCiAgICAvLyBgbm9TdWNoTWV0aG9kYCBoYW5kbGVyLgogICAgRnVuY3Rpb25FbnRpdHkgbm9TdWNoTWV0aG9kID0KICAgICAgICBfZWxlbWVudE1hcC5nZXRTdXBlck5vU3VjaE1ldGhvZChfYW5hbHl6ZWRNZW1iZXIuZW5jbG9zaW5nQ2xhc3MpOwogICAgcmV0dXJuIGhhbmRsZVN0YXRpY0ludm9rZShub2RlLCBzZWxlY3RvciwgbWFzaywgbm9TdWNoTWV0aG9kLCBhcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0U3VwZXJQcm9wZXJ0eUdldChpci5TdXBlclByb3BlcnR5R2V0IG5vZGUpIHsKICAgIC8vIFRPRE8oaGVyaHV0KTogV2UgY291bGQgZG8gYmV0dGVyIGhlcmUgaWYgd2Uga25ldyB3aGF0IHdlCiAgICAvLyBhcmUgY2FsbGluZyBkb2VzIG5vdCBleHBvc2UgdGhpcy4KICAgIF9zdGF0ZS5tYXJrVGhpc0FzRXhwb3NlZCgpOwoKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPQogICAgICAgIF9lbGVtZW50TWFwLmdldFN1cGVyTWVtYmVyKF9hbmFseXplZE1lbWJlciwgbm9kZS5uYW1lKTsKICAgIGFzc2VydChtZW1iZXIgIT0gbnVsbCwgIk5vIG1lbWJlciBmb3VuZCBmb3Igc3VwZXIgcHJvcGVydHkgZ2V0OiAkbm9kZSIpOwogICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0gX21lbWJlckRhdGEudHlwZU9mU2VuZChub2RlKTsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gbmV3IFNlbGVjdG9yLmdldHRlcihfZWxlbWVudE1hcC5nZXROYW1lKG5vZGUubmFtZSkpOwogICAgVHlwZUluZm9ybWF0aW9uIHR5cGUgPQogICAgICAgIGhhbmRsZVN0YXRpY0ludm9rZShub2RlLCBzZWxlY3RvciwgbWFzaywgbWVtYmVyLCBudWxsKTsKICAgIGlmIChtZW1iZXIuaXNHZXR0ZXIpIHsKICAgICAgRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9CiAgICAgICAgICBfZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKG1lbWJlcik7CiAgICAgIGlmIChmdW5jdGlvblR5cGUucmV0dXJuVHlwZS5jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKSB7CiAgICAgICAgLy8gVGhlIHJlc3VsdCB0eXBlIHZhcmllcyB3aXRoIHRoZSBjYWxsIHNpdGUgc28gd2UgbmFycm93IHRoZSBzdGF0aWMKICAgICAgICAvLyByZXN1bHQgdHlwZS4KICAgICAgICB0eXBlID0gX3R5cGVzLm5hcnJvd1R5cGUodHlwZSwgX2dldFN0YXRpY1R5cGUobm9kZSkpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG1lbWJlci5pc0ZpZWxkKSB7CiAgICAgIERhcnRUeXBlIGZpZWxkVHlwZSA9IF9lbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRGaWVsZFR5cGUobWVtYmVyKTsKICAgICAgaWYgKGZpZWxkVHlwZS5jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzKSB7CiAgICAgICAgLy8gVGhlIHJlc3VsdCB0eXBlIHZhcmllcyB3aXRoIHRoZSBjYWxsIHNpdGUgc28gd2UgbmFycm93IHRoZSBzdGF0aWMKICAgICAgICAvLyByZXN1bHQgdHlwZS4KICAgICAgICB0eXBlID0gX3R5cGVzLm5hcnJvd1R5cGUodHlwZSwgX2dldFN0YXRpY1R5cGUobm9kZSkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFN1cGVyUHJvcGVydHlTZXQoaXIuU3VwZXJQcm9wZXJ0eVNldCBub2RlKSB7CiAgICAvLyBUT0RPKGhlcmh1dCk6IFdlIGNvdWxkIGRvIGJldHRlciBoZXJlIGlmIHdlIGtuZXcgd2hhdCB3ZQogICAgLy8gYXJlIGNhbGxpbmcgZG9lcyBub3QgZXhwb3NlIHRoaXMuCiAgICBfc3RhdGUubWFya1RoaXNBc0V4cG9zZWQoKTsKCiAgICBUeXBlSW5mb3JtYXRpb24gcmhzVHlwZSA9IHZpc2l0KG5vZGUudmFsdWUpOwogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3VwZXJNZW1iZXIoX2FuYWx5emVkTWVtYmVyLCBub2RlLm5hbWUsIHNldHRlcjogdHJ1ZSk7CiAgICBhc3NlcnQobWVtYmVyICE9IG51bGwsICJObyBtZW1iZXIgZm91bmQgZm9yIHN1cGVyIHByb3BlcnR5IHNldDogJG5vZGUiKTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9tZW1iZXJEYXRhLnR5cGVPZlNlbmQobm9kZSk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IG5ldyBTZWxlY3Rvci5zZXR0ZXIoX2VsZW1lbnRNYXAuZ2V0TmFtZShub2RlLm5hbWUpKTsKICAgIEFyZ3VtZW50c1R5cGVzIGFyZ3VtZW50cyA9IG5ldyBBcmd1bWVudHNUeXBlcyhbcmhzVHlwZV0sIG51bGwpOwogICAgaGFuZGxlU3RhdGljSW52b2tlKG5vZGUsIHNlbGVjdG9yLCBtYXNrLCBtZW1iZXIsIGFyZ3VtZW50cyk7CiAgICByZXR1cm4gcmhzVHlwZTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvbihpci5TdXBlck1ldGhvZEludm9jYXRpb24gbm9kZSkgewogICAgLy8gVE9ETyhoZXJodXQpOiBXZSBjb3VsZCBkbyBiZXR0ZXIgaGVyZSBpZiB3ZSBrbmV3IHdoYXQgd2UKICAgIC8vIGFyZSBjYWxsaW5nIGRvZXMgbm90IGV4cG9zZSB0aGlzLgogICAgX3N0YXRlLm1hcmtUaGlzQXNFeHBvc2VkKCk7CgogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9CiAgICAgICAgX2VsZW1lbnRNYXAuZ2V0U3VwZXJNZW1iZXIoX2FuYWx5emVkTWVtYmVyLCBub2RlLm5hbWUpOwogICAgQXJndW1lbnRzVHlwZXMgYXJndW1lbnRzID0gYW5hbHl6ZUFyZ3VtZW50cyhub2RlLmFyZ3VtZW50cyk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IF9lbGVtZW50TWFwLmdldFNlbGVjdG9yKG5vZGUpOwogICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0gX21lbWJlckRhdGEudHlwZU9mU2VuZChub2RlKTsKICAgIGlmIChtZW1iZXIgPT0gbnVsbCkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBUaGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnkuCiAgICAgIHJldHVybiBoYW5kbGVTdXBlck5vU3VjaE1ldGhvZChub2RlLCBzZWxlY3RvciwgbWFzaywgYXJndW1lbnRzKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChtZW1iZXIuaXNGdW5jdGlvbiwgIlVuZXhwZWN0ZWQgc3VwZXIgaW52b2NhdGlvbiB0YXJnZXQ6ICRtZW1iZXIiKTsKICAgICAgaWYgKGlzSW5jb21wYXRpYmxlSW52b2tlKG1lbWJlciwgYXJndW1lbnRzKSkgewogICAgICAgIHJldHVybiBoYW5kbGVTdXBlck5vU3VjaE1ldGhvZChub2RlLCBzZWxlY3RvciwgbWFzaywgYXJndW1lbnRzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBUeXBlSW5mb3JtYXRpb24gdHlwZSA9CiAgICAgICAgICAgIGhhbmRsZVN0YXRpY0ludm9rZShub2RlLCBzZWxlY3RvciwgbWFzaywgbWVtYmVyLCBhcmd1bWVudHMpOwogICAgICAgIEZ1bmN0aW9uVHlwZSBmdW5jdGlvblR5cGUgPQogICAgICAgICAgICBfZWxlbWVudE1hcC5lbGVtZW50RW52aXJvbm1lbnQuZ2V0RnVuY3Rpb25UeXBlKG1lbWJlcik7CiAgICAgICAgaWYgKGZ1bmN0aW9uVHlwZS5yZXR1cm5UeXBlLmNvbnRhaW5zRnJlZVR5cGVWYXJpYWJsZXMpIHsKICAgICAgICAgIC8vIFRoZSByZXR1cm4gdHlwZSB2YXJpZXMgd2l0aCB0aGUgY2FsbCBzaXRlIHNvIHdlIG5hcnJvdyB0aGUgc3RhdGljCiAgICAgICAgICAvLyByZXR1cm4gdHlwZS4KICAgICAgICAgIHR5cGUgPSBfdHlwZXMubmFycm93VHlwZSh0eXBlLCBfZ2V0U3RhdGljVHlwZShub2RlKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0eXBlOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRBc0V4cHJlc3Npb24oaXIuQXNFeHByZXNzaW9uIG5vZGUpIHsKICAgIFR5cGVJbmZvcm1hdGlvbiBvcGVyYW5kVHlwZSA9IHZpc2l0KG5vZGUub3BlcmFuZCk7CiAgICByZXR1cm4gX3R5cGVzLm5hcnJvd1R5cGUob3BlcmFuZFR5cGUsIF9lbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0QXdhaXRFeHByZXNzaW9uKGlyLkF3YWl0RXhwcmVzc2lvbiBub2RlKSB7CiAgICBUeXBlSW5mb3JtYXRpb24gZnV0dXJlVHlwZSA9IHZpc2l0KG5vZGUub3BlcmFuZCk7CiAgICByZXR1cm4gX2luZmVycmVyLnJlZ2lzdGVyQXdhaXQobm9kZSwgZnV0dXJlVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRZaWVsZFN0YXRlbWVudChpci5ZaWVsZFN0YXRlbWVudCBub2RlKSB7CiAgICBUeXBlSW5mb3JtYXRpb24gb3BlcmFuZFR5cGUgPSB2aXNpdChub2RlLmV4cHJlc3Npb24pOwogICAgcmV0dXJuIF9pbmZlcnJlci5yZWdpc3RlcllpZWxkKG5vZGUsIG9wZXJhbmRUeXBlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdENoZWNrTGlicmFyeUlzTG9hZGVkKGlyLkNoZWNrTGlicmFyeUlzTG9hZGVkIG5vZGUpIHsKICAgIHJldHVybiBfdHlwZXMubm9uTnVsbEVtcHR5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRJbnZhbGlkRXhwcmVzc2lvbihpci5JbnZhbGlkRXhwcmVzc2lvbiBub2RlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYXliZSB0aGlzIHNob3VsZCBiZSBbZW1wdHldIGluc3RlYWQ/CiAgICByZXR1cm4gX3R5cGVzLmR5bmFtaWNUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0Q29uc3RhbnRFeHByZXNzaW9uKGlyLkNvbnN0YW50RXhwcmVzc2lvbiBub2RlKSB7CiAgICByZXR1cm4gbmV3IFR5cGVJbmZvcm1hdGlvbkNvbnN0YW50VmlzaXRvcih0aGlzLCBub2RlKQogICAgICAgIC52aXNpdENvbnN0YW50KG5vZGUuY29uc3RhbnQpOwogIH0KfQoKY2xhc3MgVHlwZUluZm9ybWF0aW9uQ29uc3RhbnRWaXNpdG9yCiAgICBleHRlbmRzIGlyLkNvbXB1dGVPbmNlQ29uc3RhbnRWaXNpdG9yPFR5cGVJbmZvcm1hdGlvbj4gewogIGZpbmFsIEtlcm5lbFR5cGVHcmFwaEJ1aWxkZXIgYnVpbGRlcjsKICBmaW5hbCBpci5Db25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbjsKCiAgVHlwZUluZm9ybWF0aW9uQ29uc3RhbnRWaXNpdG9yKHRoaXMuYnVpbGRlciwgdGhpcy5leHByZXNzaW9uKTsKCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIGRlZmF1bHRDb25zdGFudChpci5Db25zdGFudCBub2RlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBjb25zdGFudDogIgogICAgICAgICIke25vZGV9ICgke25vZGUucnVudGltZVR5cGV9KSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0TnVsbENvbnN0YW50KGlyLk51bGxDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVOdWxsVHlwZUluZm9ybWF0aW9uKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRCb29sQ29uc3RhbnQoaXIuQm9vbENvbnN0YW50IG5vZGUpIHsKICAgIHJldHVybiBidWlsZGVyLmNyZWF0ZUJvb2xUeXBlSW5mb3JtYXRpb24obm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRJbnRDb25zdGFudChpci5JbnRDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVJbnRUeXBlSW5mb3JtYXRpb24obm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXREb3VibGVDb25zdGFudChpci5Eb3VibGVDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVEb3VibGVUeXBlSW5mb3JtYXRpb24obm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTdHJpbmdDb25zdGFudChpci5TdHJpbmdDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVTdHJpbmdUeXBlSW5mb3JtYXRpb24obm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRTeW1ib2xDb25zdGFudChpci5TeW1ib2xDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVTeW1ib2xMaXRlcmFsVHlwZUluZm9ybWF0aW9uKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRNYXBDb25zdGFudChpci5NYXBDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVNYXBUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgbmV3IENvbnN0YW50UmVmZXJlbmNlKGV4cHJlc3Npb24sIG5vZGUpLAogICAgICAgIG5vZGUuZW50cmllcwogICAgICAgICAgICAubWFwKChlKSA9PiBuZXcgUGFpcih2aXNpdENvbnN0YW50KGUua2V5KSwgdmlzaXRDb25zdGFudChlLnZhbHVlKSkpLAogICAgICAgIGlzQ29uc3Q6IHRydWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0TGlzdENvbnN0YW50KGlyLkxpc3RDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVMaXN0VHlwZUluZm9ybWF0aW9uKAogICAgICAgIG5ldyBDb25zdGFudFJlZmVyZW5jZShleHByZXNzaW9uLCBub2RlKSwKICAgICAgICBub2RlLmVudHJpZXMubWFwKChlKSA9PiB2aXNpdENvbnN0YW50KGUpKSwKICAgICAgICBpc0NvbnN0OiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFNldENvbnN0YW50KGlyLlNldENvbnN0YW50IG5vZGUpIHsKICAgIHJldHVybiBidWlsZGVyLmNyZWF0ZVNldFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBuZXcgQ29uc3RhbnRSZWZlcmVuY2UoZXhwcmVzc2lvbiwgbm9kZSksCiAgICAgICAgbm9kZS5lbnRyaWVzLm1hcCgoZSkgPT4gdmlzaXRDb25zdGFudChlKSksCiAgICAgICAgaXNDb25zdDogdHJ1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRJbnN0YW5jZUNvbnN0YW50KGlyLkluc3RhbmNlQ29uc3RhbnQgbm9kZSkgewogICAgbm9kZS5maWVsZFZhbHVlcy5mb3JFYWNoKChpci5SZWZlcmVuY2UgcmVmZXJlbmNlLCBpci5Db25zdGFudCB2YWx1ZSkgewogICAgICBidWlsZGVyLl9pbmZlcnJlci5yZWNvcmRUeXBlT2ZGaWVsZCgKICAgICAgICAgIGJ1aWxkZXIuX2VsZW1lbnRNYXAuZ2V0RmllbGQocmVmZXJlbmNlLmFzRmllbGQpLAogICAgICAgICAgdmlzaXRDb25zdGFudCh2YWx1ZSkpOwogICAgfSk7CiAgICByZXR1cm4gYnVpbGRlci5fdHlwZXMuZ2V0Q29uY3JldGVUeXBlRm9yKGJ1aWxkZXIKICAgICAgICAuX2Nsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuY3JlYXRlTm9uTnVsbEV4YWN0KGJ1aWxkZXIuX2VsZW1lbnRNYXAuZ2V0Q2xhc3Mobm9kZS5jbGFzc05vZGUpKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBUeXBlSW5mb3JtYXRpb24gdmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50KAogICAgICBpci5QYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50IG5vZGUpIHsKICAgIHJldHVybiBidWlsZGVyLmNyZWF0ZUluc3RhbnRpYXRpb25UeXBlSW5mb3JtYXRpb24oCiAgICAgICAgdmlzaXRDb25zdGFudChub2RlLnRlYXJPZmZDb25zdGFudCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0VGVhck9mZkNvbnN0YW50KGlyLlRlYXJPZmZDb25zdGFudCBub2RlKSB7CiAgICByZXR1cm4gYnVpbGRlci5jcmVhdGVTdGF0aWNHZXRUeXBlSW5mb3JtYXRpb24obm9kZSwgbm9kZS5wcm9jZWR1cmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVHlwZUluZm9ybWF0aW9uIHZpc2l0VHlwZUxpdGVyYWxDb25zdGFudChpci5UeXBlTGl0ZXJhbENvbnN0YW50IG5vZGUpIHsKICAgIHJldHVybiBidWlsZGVyLmNyZWF0ZVR5cGVMaXRlcmFsSW5mb3JtYXRpb24oKTsKICB9CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiB2aXNpdFVuZXZhbHVhdGVkQ29uc3RhbnQoaXIuVW5ldmFsdWF0ZWRDb25zdGFudCBub2RlKSB7CiAgICBhc3NlcnQoZmFsc2UsICJVbmV4cGVjdGVkIHVuZXZhbHVhdGVkIGNvbnN0YW50OiAkbm9kZSIpOwogICAgcmV0dXJuIGJ1aWxkZXIuX3R5cGVzLmR5bmFtaWNUeXBlOwogIH0KfQoKY2xhc3MgUmVmaW5lbWVudCB7CiAgZmluYWwgU2VsZWN0b3Igc2VsZWN0b3I7CiAgZmluYWwgQWJzdHJhY3RWYWx1ZSBtYXNrOwoKICBSZWZpbmVtZW50KHRoaXMuc2VsZWN0b3IsIHRoaXMubWFzayk7Cn0KCmNsYXNzIExvY2FsU3RhdGUgewogIGZpbmFsIExvY2Fsc0hhbmRsZXIgX2xvY2FsczsKICBmaW5hbCBGaWVsZEluaXRpYWxpemF0aW9uU2NvcGUgX2ZpZWxkczsKICBib29sIHNlZW5SZXR1cm5PclRocm93ID0gZmFsc2U7CiAgYm9vbCBzZWVuQnJlYWtPckNvbnRpbnVlID0gZmFsc2U7CiAgTG9jYWxzSGFuZGxlciBfdHJ5QmxvY2s7CgogIExvY2FsU3RhdGUuaW5pdGlhbCh7Ym9vbCBpbkdlbmVyYXRpdmVDb25zdHJ1Y3Rvcn0pCiAgICAgIDogdGhpcy5pbnRlcm5hbCgKICAgICAgICAgICAgbmV3IExvY2Fsc0hhbmRsZXIoKSwKICAgICAgICAgICAgaW5HZW5lcmF0aXZlQ29uc3RydWN0b3IgPyBuZXcgRmllbGRJbml0aWFsaXphdGlvblNjb3BlKCkgOiBudWxsLAogICAgICAgICAgICBudWxsLAogICAgICAgICAgICBzZWVuUmV0dXJuT3JUaHJvdzogZmFsc2UsCiAgICAgICAgICAgIHNlZW5CcmVha09yQ29udGludWU6IGZhbHNlKTsKCiAgTG9jYWxTdGF0ZS5jaGlsZFBhdGgoTG9jYWxTdGF0ZSBvdGhlcikKICAgICAgOiB0aGlzLmludGVybmFsKG5ldyBMb2NhbHNIYW5kbGVyLmZyb20ob3RoZXIuX2xvY2FscyksCiAgICAgICAgICAgIG5ldyBGaWVsZEluaXRpYWxpemF0aW9uU2NvcGUuZnJvbShvdGhlci5fZmllbGRzKSwgb3RoZXIuX3RyeUJsb2NrLAogICAgICAgICAgICBzZWVuUmV0dXJuT3JUaHJvdzogZmFsc2UsIHNlZW5CcmVha09yQ29udGludWU6IGZhbHNlKTsKCiAgTG9jYWxTdGF0ZS5jbG9zdXJlKExvY2FsU3RhdGUgb3RoZXIpCiAgICAgIDogdGhpcy5pbnRlcm5hbChuZXcgTG9jYWxzSGFuZGxlci5mcm9tKG90aGVyLl9sb2NhbHMpLAogICAgICAgICAgICBuZXcgRmllbGRJbml0aWFsaXphdGlvblNjb3BlLmZyb20ob3RoZXIuX2ZpZWxkcyksIG51bGwsCiAgICAgICAgICAgIHNlZW5SZXR1cm5PclRocm93OiBmYWxzZSwgc2VlbkJyZWFrT3JDb250aW51ZTogZmFsc2UpOwoKICBmYWN0b3J5IExvY2FsU3RhdGUudHJ5QmxvY2soTG9jYWxTdGF0ZSBvdGhlciwgaXIuVHJlZU5vZGUgbm9kZSkgewogICAgTG9jYWxzSGFuZGxlciBsb2NhbHMgPSBuZXcgTG9jYWxzSGFuZGxlci50cnlCbG9jayhvdGhlci5fbG9jYWxzLCBub2RlKTsKICAgIEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZSBmaWVsZFNjb3BlID0KICAgICAgICBuZXcgRmllbGRJbml0aWFsaXphdGlvblNjb3BlLmZyb20ob3RoZXIuX2ZpZWxkcyk7CiAgICBMb2NhbHNIYW5kbGVyIHRyeUJsb2NrID0gbG9jYWxzOwogICAgcmV0dXJuIG5ldyBMb2NhbFN0YXRlLmludGVybmFsKGxvY2FscywgZmllbGRTY29wZSwgdHJ5QmxvY2ssCiAgICAgICAgc2VlblJldHVybk9yVGhyb3c6IGZhbHNlLCBzZWVuQnJlYWtPckNvbnRpbnVlOiBmYWxzZSk7CiAgfQoKICBMb2NhbFN0YXRlLmRlZXBDb3B5T2YoTG9jYWxTdGF0ZSBvdGhlcikKICAgICAgOiBfbG9jYWxzID0gbmV3IExvY2Fsc0hhbmRsZXIuZGVlcENvcHlPZihvdGhlci5fbG9jYWxzKSwKICAgICAgICBfdHJ5QmxvY2sgPSBvdGhlci5fdHJ5QmxvY2ssCiAgICAgICAgX2ZpZWxkcyA9IG90aGVyLl9maWVsZHM7CgogIExvY2FsU3RhdGUuaW50ZXJuYWwodGhpcy5fbG9jYWxzLCB0aGlzLl9maWVsZHMsIHRoaXMuX3RyeUJsb2NrLAogICAgICB7dGhpcy5zZWVuUmV0dXJuT3JUaHJvdywgdGhpcy5zZWVuQnJlYWtPckNvbnRpbnVlfSk7CgogIGJvb2wgZ2V0IGFib3J0cyB7CiAgICByZXR1cm4gc2VlblJldHVybk9yVGhyb3cgfHwgc2VlbkJyZWFrT3JDb250aW51ZTsKICB9CgogIGJvb2wgZ2V0IGlzVGhpc0V4cG9zZWQgewogICAgcmV0dXJuIF9maWVsZHMgPT0gbnVsbCB8fCBfZmllbGRzLmlzVGhpc0V4cG9zZWQ7CiAgfQoKICB2b2lkIG1hcmtUaGlzQXNFeHBvc2VkKCkgewogICAgX2ZpZWxkcz8uaXNUaGlzRXhwb3NlZCA9IHRydWU7CiAgfQoKICB2b2lkIG1hcmtJbml0aWFsaXphdGlvbkFzSW5kZWZpbml0ZSgpIHsKICAgIF9maWVsZHM/LmlzSW5kZWZpbml0ZSA9IHRydWU7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gcmVhZEZpZWxkKEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICByZXR1cm4gX2ZpZWxkcy5yZWFkRmllbGQoZmllbGQpOwogIH0KCiAgdm9pZCB1cGRhdGVGaWVsZChGaWVsZEVudGl0eSBmaWVsZCwgVHlwZUluZm9ybWF0aW9uIHR5cGUpIHsKICAgIF9maWVsZHMudXBkYXRlRmllbGQoZmllbGQsIHR5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIHJlYWRMb2NhbChJbmZlcnJlckVuZ2luZSBpbmZlcnJlciwKICAgICAgTWFwPExvY2FsLCBGaWVsZEVudGl0eT4gY2FwdHVyZWRBbmRCb3hlZCwgTG9jYWwgbG9jYWwpIHsKICAgIEZpZWxkRW50aXR5IGZpZWxkID0gY2FwdHVyZWRBbmRCb3hlZFtsb2NhbF07CiAgICBpZiAoZmllbGQgIT0gbnVsbCkgewogICAgICByZXR1cm4gaW5mZXJyZXIudHlwZU9mTWVtYmVyKGZpZWxkKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfbG9jYWxzLnVzZShpbmZlcnJlciwgbG9jYWwpOwogICAgfQogIH0KCiAgdm9pZCB1cGRhdGVMb2NhbCgKICAgICAgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsCiAgICAgIE1hcDxMb2NhbCwgRmllbGRFbnRpdHk+IGNhcHR1cmVkQW5kQm94ZWQsCiAgICAgIExvY2FsIGxvY2FsLAogICAgICBUeXBlSW5mb3JtYXRpb24gdHlwZSwKICAgICAgaXIuTm9kZSBub2RlLAogICAgICBEYXJ0VHlwZSBzdGF0aWNUeXBlLAogICAgICB7aXNOdWxsYWJsZTogdHJ1ZX0pIHsKICAgIGFzc2VydCh0eXBlICE9IG51bGwpOwogICAgdHlwZSA9IGluZmVycmVyLnR5cGVzLm5hcnJvd1R5cGUodHlwZSwgc3RhdGljVHlwZSwgaXNOdWxsYWJsZTogaXNOdWxsYWJsZSk7CgogICAgRmllbGRFbnRpdHkgZmllbGQgPSBjYXB0dXJlZEFuZEJveGVkW2xvY2FsXTsKICAgIGlmIChmaWVsZCAhPSBudWxsKSB7CiAgICAgIGluZmVycmVyLnJlY29yZFR5cGVPZkZpZWxkKGZpZWxkLCB0eXBlKTsKICAgIH0gZWxzZSB7CiAgICAgIF9sb2NhbHMudXBkYXRlKGluZmVycmVyLCBsb2NhbCwgdHlwZSwgbm9kZSwgc3RhdGljVHlwZSwgX3RyeUJsb2NrKTsKICAgIH0KICB9CgogIHZvaWQgbmFycm93TG9jYWwoCiAgICAgIEluZmVycmVyRW5naW5lIGluZmVycmVyLAogICAgICBNYXA8TG9jYWwsIEZpZWxkRW50aXR5PiBjYXB0dXJlZEFuZEJveGVkLAogICAgICBMb2NhbCBsb2NhbCwKICAgICAgRGFydFR5cGUgdHlwZSwKICAgICAgaXIuTm9kZSBub2RlKSB7CiAgICBUeXBlSW5mb3JtYXRpb24gY3VycmVudFR5cGUgPSByZWFkTG9jYWwoaW5mZXJyZXIsIGNhcHR1cmVkQW5kQm94ZWQsIGxvY2FsKTsKICAgIHVwZGF0ZUxvY2FsKGluZmVycmVyLCBjYXB0dXJlZEFuZEJveGVkLCBsb2NhbCwgY3VycmVudFR5cGUsIG5vZGUsIHR5cGUsCiAgICAgICAgaXNOdWxsYWJsZTogZmFsc2UpOwogIH0KCiAgTG9jYWxTdGF0ZSBtZXJnZUZsb3coSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIExvY2FsU3RhdGUgb3RoZXIpIHsKICAgIHNlZW5SZXR1cm5PclRocm93ID0gZmFsc2U7CiAgICBzZWVuQnJlYWtPckNvbnRpbnVlID0gZmFsc2U7CgogICAgaWYgKG90aGVyLmFib3J0cykgewogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIExvY2Fsc0hhbmRsZXIgbG9jYWxzID0gX2xvY2Fscy5tZXJnZUZsb3coaW5mZXJyZXIsIG90aGVyLl9sb2NhbHMpOwogICAgcmV0dXJuIG5ldyBMb2NhbFN0YXRlLmludGVybmFsKGxvY2FscywgX2ZpZWxkcywgX3RyeUJsb2NrLAogICAgICAgIHNlZW5SZXR1cm5PclRocm93OiBzZWVuUmV0dXJuT3JUaHJvdywKICAgICAgICBzZWVuQnJlYWtPckNvbnRpbnVlOiBzZWVuQnJlYWtPckNvbnRpbnVlKTsKICB9CgogIExvY2FsU3RhdGUgbWVyZ2VEaWFtb25kRmxvdygKICAgICAgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIExvY2FsU3RhdGUgdGhlbkJyYW5jaCwgTG9jYWxTdGF0ZSBlbHNlQnJhbmNoKSB7CiAgICBzZWVuUmV0dXJuT3JUaHJvdyA9CiAgICAgICAgdGhlbkJyYW5jaC5zZWVuUmV0dXJuT3JUaHJvdyAmJiBlbHNlQnJhbmNoLnNlZW5SZXR1cm5PclRocm93OwogICAgc2VlbkJyZWFrT3JDb250aW51ZSA9CiAgICAgICAgdGhlbkJyYW5jaC5zZWVuQnJlYWtPckNvbnRpbnVlICYmIGVsc2VCcmFuY2guc2VlbkJyZWFrT3JDb250aW51ZTsKCiAgICBMb2NhbHNIYW5kbGVyIGxvY2FsczsKICAgIGlmIChhYm9ydHMpIHsKICAgICAgbG9jYWxzID0gX2xvY2FsczsKICAgIH0gZWxzZSBpZiAodGhlbkJyYW5jaC5hYm9ydHMpIHsKICAgICAgbG9jYWxzID0gX2xvY2Fscy5tZXJnZUZsb3coaW5mZXJyZXIsIGVsc2VCcmFuY2guX2xvY2FscywgaW5QbGFjZTogdHJ1ZSk7CiAgICB9IGVsc2UgaWYgKGVsc2VCcmFuY2guYWJvcnRzKSB7CiAgICAgIGxvY2FscyA9IF9sb2NhbHMubWVyZ2VGbG93KGluZmVycmVyLCB0aGVuQnJhbmNoLl9sb2NhbHMsIGluUGxhY2U6IHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgbG9jYWxzID0gX2xvY2Fscy5tZXJnZURpYW1vbmRGbG93KAogICAgICAgICAgaW5mZXJyZXIsIHRoZW5CcmFuY2guX2xvY2FscywgZWxzZUJyYW5jaC5fbG9jYWxzKTsKICAgIH0KCiAgICBGaWVsZEluaXRpYWxpemF0aW9uU2NvcGUgZmllbGRTY29wZSA9IF9maWVsZHM/Lm1lcmdlRGlhbW9uZEZsb3coCiAgICAgICAgaW5mZXJyZXIsIHRoZW5CcmFuY2guX2ZpZWxkcywgZWxzZUJyYW5jaC5fZmllbGRzKTsKICAgIHJldHVybiBuZXcgTG9jYWxTdGF0ZS5pbnRlcm5hbChsb2NhbHMsIGZpZWxkU2NvcGUsIF90cnlCbG9jaywKICAgICAgICBzZWVuUmV0dXJuT3JUaHJvdzogc2VlblJldHVybk9yVGhyb3csCiAgICAgICAgc2VlbkJyZWFrT3JDb250aW51ZTogc2VlbkJyZWFrT3JDb250aW51ZSk7CiAgfQoKICBMb2NhbFN0YXRlIG1lcmdlQWZ0ZXJCcmVha3MoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIExpc3Q8TG9jYWxTdGF0ZT4gc3RhdGVzLAogICAgICB7Ym9vbCBrZWVwT3duTG9jYWxzOiB0cnVlfSkgewogICAgYm9vbCBhbGxCcmFuY2hlc0Fib3J0ID0gdHJ1ZTsKICAgIGZvciAoTG9jYWxTdGF0ZSBzdGF0ZSBpbiBzdGF0ZXMpIHsKICAgICAgYWxsQnJhbmNoZXNBYm9ydCA9IGFsbEJyYW5jaGVzQWJvcnQgJiYgc3RhdGUuc2VlblJldHVybk9yVGhyb3c7CiAgICB9CgogICAga2VlcE93bkxvY2FscyA9IGtlZXBPd25Mb2NhbHMgJiYgIXNlZW5SZXR1cm5PclRocm93OwoKICAgIExvY2Fsc0hhbmRsZXIgbG9jYWxzID0gX2xvY2Fscy5tZXJnZUFmdGVyQnJlYWtzKAogICAgICAgIGluZmVycmVyLAogICAgICAgIHN0YXRlcwogICAgICAgICAgICAud2hlcmUoKExvY2FsU3RhdGUgc3RhdGUpID0+ICFzdGF0ZS5zZWVuUmV0dXJuT3JUaHJvdykKICAgICAgICAgICAgLm1hcCgoTG9jYWxTdGF0ZSBzdGF0ZSkgPT4gc3RhdGUuX2xvY2FscyksCiAgICAgICAga2VlcE93bkxvY2Fsczoga2VlcE93bkxvY2Fscyk7CiAgICBzZWVuUmV0dXJuT3JUaHJvdyA9IGFsbEJyYW5jaGVzQWJvcnQgJiYgIWtlZXBPd25Mb2NhbHM7CiAgICByZXR1cm4gbmV3IExvY2FsU3RhdGUuaW50ZXJuYWwobG9jYWxzLCBfZmllbGRzLCBfdHJ5QmxvY2ssCiAgICAgICAgc2VlblJldHVybk9yVGhyb3c6IHNlZW5SZXR1cm5PclRocm93LAogICAgICAgIHNlZW5CcmVha09yQ29udGludWU6IHNlZW5CcmVha09yQ29udGludWUpOwogIH0KCiAgYm9vbCBtZXJnZUFsbChJbmZlcnJlckVuZ2luZSBpbmZlcnJlciwgTGlzdDxMb2NhbFN0YXRlPiBzdGF0ZXMpIHsKICAgIGFzc2VydCghc2VlblJldHVybk9yVGhyb3cpOwogICAgcmV0dXJuIF9sb2NhbHMubWVyZ2VBbGwoCiAgICAgICAgaW5mZXJyZXIsCiAgICAgICAgc3RhdGVzCiAgICAgICAgICAgIC53aGVyZSgoTG9jYWxTdGF0ZSBzdGF0ZSkgPT4gIXN0YXRlLnNlZW5SZXR1cm5PclRocm93KQogICAgICAgICAgICAubWFwKChMb2NhbFN0YXRlIHN0YXRlKSA9PiBzdGF0ZS5fbG9jYWxzKSk7CiAgfQoKICB2b2lkIHN0YXJ0TG9vcChJbmZlcnJlckVuZ2luZSBpbmZlcnJlciwgaXIuTm9kZSBsb29wKSB7CiAgICBfbG9jYWxzLnN0YXJ0TG9vcChpbmZlcnJlciwgbG9vcCk7CiAgfQoKICB2b2lkIGVuZExvb3AoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIGlyLk5vZGUgbG9vcCkgewogICAgX2xvY2Fscy5lbmRMb29wKGluZmVycmVyLCBsb29wKTsKICB9CgogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KFN0cmluZyBpbmRlbnQpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIF90b1N0cnVjdHVyZWRUZXh0KHNiLCBpbmRlbnQpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICB2b2lkIF90b1N0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYiwgU3RyaW5nIGluZGVudCkgewogICAgc2Iud3JpdGUoJ0xvY2FsU3RhdGUoJGhhc2hDb2RlKSBbJyk7CiAgICBzYi53cml0ZSgnXG4ke2luZGVudH0gIGxvY2FsczonKTsKICAgIHNiLndyaXRlKF9sb2NhbHMudG9TdHJ1Y3R1cmVkVGV4dCgnJHtpbmRlbnR9ICAgICcpKTsKICAgIHNiLndyaXRlKCdcbl0nKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdMb2NhbFN0YXRlKCcpOwogICAgc2Iud3JpdGUoJ2xvY2Fscz0kX2xvY2FscycpOwogICAgaWYgKF9maWVsZHMgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnLGZpZWxkcz0kX2ZpZWxkcycpOwogICAgfQogICAgaWYgKHNlZW5SZXR1cm5PclRocm93KSB7CiAgICAgIHNiLndyaXRlKCcsc2VlblJldHVybk9yVGhyb3cnKTsKICAgIH0KICAgIGlmIChzZWVuQnJlYWtPckNvbnRpbnVlKSB7CiAgICAgIHNiLndyaXRlKCcsc2VlbkJyZWFrT3JDb250aW51ZScpOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQqIiQBOTjwBKAEaGR8/IyQhITEhHyoaLCczJCIaJCgc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bi5kYXJ0JzsKaW1wb3J0ICdkZWJ1Zy5kYXJ0JyBhcyBkZWJ1ZzsKaW1wb3J0ICdpbmZlcnJlcl9lbmdpbmUuZGFydCc7CmltcG9ydCAnbm9kZV90cmFjZXIuZGFydCc7CmltcG9ydCAndHlwZV9ncmFwaF9ub2Rlcy5kYXJ0JzsKCmNsYXNzIENsb3N1cmVUcmFjZXJWaXNpdG9yIGV4dGVuZHMgVHJhY2VyVmlzaXRvciB7CiAgZmluYWwgSXRlcmFibGU8RnVuY3Rpb25FbnRpdHk+IHRyYWNlZEVsZW1lbnRzOwogIGZpbmFsIExpc3Q8Q2FsbFNpdGVUeXBlSW5mb3JtYXRpb24+IF9jYWxsc1RvQW5hbHl6ZSA9CiAgICAgIG5ldyBMaXN0PENhbGxTaXRlVHlwZUluZm9ybWF0aW9uPigpOwoKICBDbG9zdXJlVHJhY2VyVmlzaXRvcih0aGlzLnRyYWNlZEVsZW1lbnRzLCBBcHBseWFibGVUeXBlSW5mb3JtYXRpb24gdHJhY2VkVHlwZSwKICAgICAgSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIpCiAgICAgIDogc3VwZXIodHJhY2VkVHlwZSwgaW5mZXJyZXIpIHsKICAgIGFzc2VydCgKICAgICAgICB0cmFjZWRFbGVtZW50cy5ldmVyeSgoZikgPT4gIWYuaXNBYnN0cmFjdCksCiAgICAgICAgIlRyYWNpbmcgYWJzdHJhY3QgbWV0aG9kczogIgogICAgICAgICIke3RyYWNlZEVsZW1lbnRzLndoZXJlKChmKSA9PiBmLmlzQWJzdHJhY3QpfSIpOwogIH0KCiAgQG92ZXJyaWRlCiAgQXBwbHlhYmxlVHlwZUluZm9ybWF0aW9uIGdldCB0cmFjZWRUeXBlID0+IHN1cGVyLnRyYWNlZFR5cGU7CgogIHZvaWQgcnVuKCkgewogICAgYW5hbHl6ZSgpOwogICAgaWYgKCFjb250aW51ZUFuYWx5emluZykgcmV0dXJuOwogICAgX2NhbGxzVG9BbmFseXplLmZvckVhY2goX2FuYWx5emVDYWxsKTsKICAgIGZvciAoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCBpbiB0cmFjZWRFbGVtZW50cykgewogICAgICBpbmZlcnJlci50eXBlcy5zdHJhdGVneS5mb3JFYWNoUGFyYW1ldGVyKGVsZW1lbnQsIChMb2NhbCBwYXJhbWV0ZXIpIHsKICAgICAgICBFbGVtZW50VHlwZUluZm9ybWF0aW9uIGluZm8gPQogICAgICAgICAgICBpbmZlcnJlci50eXBlcy5nZXRJbmZlcnJlZFR5cGVPZlBhcmFtZXRlcihwYXJhbWV0ZXIpOwogICAgICAgIGluZm8uZGlzYWJsZUluZmVyZW5jZUZvckNsb3N1cmVzID0gZmFsc2U7CiAgICAgIH0pOwogICAgfQogIH0KCiAgdm9pZCBfdGFnQXNGdW5jdGlvbkFwcGx5VGFyZ2V0KFtTdHJpbmcgcmVhc29uXSkgewogICAgdHJhY2VkVHlwZS5taWdodEJlUGFzc2VkVG9GdW5jdGlvbkFwcGx5ID0gdHJ1ZTsKICAgIGlmIChkZWJ1Zy5WRVJCT1NFKSB7CiAgICAgIHByaW50KCJDbG9zdXJlICR0cmFjZWRUeXBlIG1pZ2h0IGJlIHBhc3NlZCB0byBhcHBseTogJHJlYXNvbiIpOwogICAgfQogIH0KCiAgdm9pZCBfcmVnaXN0ZXJDYWxsRm9yTGF0ZXJBbmFseXNpcyhDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBfY2FsbHNUb0FuYWx5emUuYWRkKGluZm8pOwogIH0KCiAgdm9pZCBfYW5hbHl6ZUNhbGwoQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBpbmZvLnNlbGVjdG9yOwogICAgQWJzdHJhY3RWYWx1ZSBtYXNrID0gaW5mby5tYXNrOwogICAgdHJhY2VkRWxlbWVudHMuZm9yRWFjaCgoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb25FbGVtZW50KSB7CiAgICAgIGlmICghc2VsZWN0b3IuY2FsbFN0cnVjdHVyZQogICAgICAgICAgLnNpZ25hdHVyZUFwcGxpZXMoZnVuY3Rpb25FbGVtZW50LnBhcmFtZXRlclN0cnVjdHVyZSkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaW5mZXJyZXIudXBkYXRlUGFyYW1ldGVyQXNzaWdubWVudHMoCiAgICAgICAgICBpbmZvLCBmdW5jdGlvbkVsZW1lbnQsIGluZm8uYXJndW1lbnRzLCBzZWxlY3RvciwgbWFzaywKICAgICAgICAgIHJlbW92ZTogZmFsc2UsIGFkZFRvUXVldWU6IGZhbHNlKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oQ2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIHN1cGVyLnZpc2l0Q2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uKGluZm8pOwogICAgaWYgKGluZm8uY2xvc3VyZSA9PSBjdXJyZW50VXNlcikgewogICAgICBfcmVnaXN0ZXJDYWxsRm9yTGF0ZXJBbmFseXNpcyhpbmZvKTsKICAgIH0gZWxzZSB7CiAgICAgIGJhaWxvdXQoJ1Bhc3NlZCB0byBhIGNsb3N1cmUnKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oU3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgc3VwZXIudmlzaXRTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihpbmZvKTsKICAgIE1lbWJlckVudGl0eSBjYWxsZWQgPSBpbmZvLmNhbGxlZEVsZW1lbnQ7CiAgICBpZiAoaW5mZXJyZXIuY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuaXNGb3JlaWduKGNhbGxlZCkpIHsKICAgICAgU3RyaW5nIG5hbWUgPSBjYWxsZWQubmFtZTsKICAgICAgaWYgKG5hbWUgPT0gSWRlbnRpZmllcnMuSlMgfHwgbmFtZSA9PSBJZGVudGlmaWVycy5EQVJUX0NMT1NVUkVfVE9fSlMpIHsKICAgICAgICBiYWlsb3V0KCdVc2VkIGluIEpTICR7aW5mby5kZWJ1Z05hbWV9Jyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChjYWxsZWQuaXNHZXR0ZXIgJiYKICAgICAgICBpbmZvLnNlbGVjdG9yICE9IG51bGwgJiYKICAgICAgICBpbmZvLnNlbGVjdG9yLmlzQ2FsbCAmJgogICAgICAgIGluZmVycmVyLnR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGNhbGxlZCkgPT0gY3VycmVudFVzZXIpIHsKICAgICAgLy8gVGhpcyBub2RlIGNhbiBiZSBhIGNsb3N1cmUgY2FsbCBhcyB3ZWxsLiBGb3IgZXhhbXBsZSwgYGZvbygpYAogICAgICAvLyB3aGVyZSBgZm9vYCBpcyBhIGdldHRlci4KICAgICAgX3JlZ2lzdGVyQ2FsbEZvckxhdGVyQW5hbHlzaXMoaW5mbyk7CiAgICB9CiAgICBpZiAoX2NoZWNrSWZGdW5jdGlvbkFwcGx5KGNhbGxlZCkgJiYKICAgICAgICBpbmZvLmFyZ3VtZW50cyAhPSBudWxsICYmCiAgICAgICAgaW5mby5hcmd1bWVudHMuY29udGFpbnMoY3VycmVudFVzZXIpKSB7CiAgICAgIF90YWdBc0Z1bmN0aW9uQXBwbHlUYXJnZXQoInN0YXRpYyBjYWxsIik7CiAgICB9CiAgfQoKICBib29sIF9jaGVja0lmQ3VycmVudFVzZXIoTWVtYmVyRW50aXR5IGVsZW1lbnQpID0+CiAgICAgIGluZmVycmVyLnR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVsZW1lbnQpID09IGN1cnJlbnRVc2VyOwoKICBib29sIF9jaGVja0lmRnVuY3Rpb25BcHBseShNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGluZmVycmVyLmNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmlzRnVuY3Rpb25BcHBseU1ldGhvZChlbGVtZW50KTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0RHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBzdXBlci52aXNpdER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihpbmZvKTsKICAgIGlmIChpbmZvLnNlbGVjdG9yLmlzQ2FsbCkgewogICAgICBpZiAoaW5mby5hcmd1bWVudHMuY29udGFpbnMoY3VycmVudFVzZXIpKSB7CiAgICAgICAgaWYgKGluZm8uaGFzQ2xvc3VyZUNhbGxUYXJnZXRzIHx8CiAgICAgICAgICAgIGluZm8uY29uY3JldGVUYXJnZXRzLmFueSgoZWxlbWVudCkgPT4gIWVsZW1lbnQuaXNGdW5jdGlvbikpIHsKICAgICAgICAgIGJhaWxvdXQoJ1Bhc3NlZCB0byBhIGNsb3N1cmUnKTsKICAgICAgICB9CiAgICAgICAgaWYgKGluZm8uY29uY3JldGVUYXJnZXRzLmFueShfY2hlY2tJZkZ1bmN0aW9uQXBwbHkpKSB7CiAgICAgICAgICBfdGFnQXNGdW5jdGlvbkFwcGx5VGFyZ2V0KCJkeW5hbWljIGNhbGwiKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoaW5mby5jb25jcmV0ZVRhcmdldHMuYW55KF9jaGVja0lmQ3VycmVudFVzZXIpKSB7CiAgICAgICAgX3JlZ2lzdGVyQ2FsbEZvckxhdGVyQW5hbHlzaXMoaW5mbyk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaW5mby5zZWxlY3Rvci5pc0dldHRlciAmJgogICAgICAgIGluZm8uc2VsZWN0b3IubWVtYmVyTmFtZSA9PSBOYW1lcy5jYWxsKSB7CiAgICAgIC8vIFdlIGFyZSBwb3RlbnRpYWxseSB0ZWFyaW5nIG9mZiBvdXJzZWxmIGhlcmUKICAgICAgYWRkTmV3RXNjYXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgICB9CiAgfQp9CgpjbGFzcyBTdGF0aWNUZWFyT2ZmQ2xvc3VyZVRyYWNlclZpc2l0b3IgZXh0ZW5kcyBDbG9zdXJlVHJhY2VyVmlzaXRvciB7CiAgU3RhdGljVGVhck9mZkNsb3N1cmVUcmFjZXJWaXNpdG9yKAogICAgICBGdW5jdGlvbkVudGl0eSB0cmFjZWRFbGVtZW50LCB0cmFjZWRUeXBlLCBpbmZlcnJlcikKICAgICAgOiBzdXBlcihbdHJhY2VkRWxlbWVudF0sIHRyYWNlZFR5cGUsIGluZmVycmVyKTsKCiAgQG92ZXJyaWRlCiAgdmlzaXRTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBzdXBlci52aXNpdFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKGluZm8pOwogICAgaWYgKGluZm8uY2FsbGVkRWxlbWVudCA9PSB0cmFjZWRFbGVtZW50cy5maXJzdCAmJgogICAgICAgIGluZm8uc2VsZWN0b3IgIT0gbnVsbCAmJgogICAgICAgIGluZm8uc2VsZWN0b3IuaXNHZXR0ZXIpIHsKICAgICAgYWRkTmV3RXNjYXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgICB9CiAgfQp9CoCYAE5OPAEuATckMiUeHxsgATMxOCsBUR8mDDQlOQQBDD8BDw8kKzVMJkIyCgYEATQ0GUYGBAFFHwQBNCckPiJDEAgrQS0IBAEMTTUnKw0mBgQBDEs0LkEhTjEIBhshIElHIisGKSIwMAYEATRGATVPBAEMTTUgMipKKgo/NQpCLQgpMjUlBgQCAUclOjYBDEs0NiEiJQYEAgExcGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvY2xvc3VyZV90cmFjZXIuZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci9kZWJ1Zy5kYXJ0gekvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIFZhbHVlcyB1c2VkIG9ubHkgZm9yIGRlYnVnZ2luZyB0eXBlIGluZmVyZW5jZS4KbGlicmFyeSBjb21waWxlci5zcmMuaW5mZXJyZXIuZGVidWc7Cgpjb25zdCBib29sIFZFUkJPU0UgPSBmYWxzZTsKY29uc3QgYm9vbCBQUklOVF9TVU1NQVJZID0gZmFsc2U7CmNvbnN0IGJvb2wgQU5PTUFMWV9XQVJOID0gZmFsc2U7CmJvb2wgUFJJTlRfR1JBUEggPSBmYWxzZTsKYm9vbCBQUklOVF9HUkFQSF9BTExfTk9ERVMgPSBmYWxzZTsgLy8gSW5jbHVkZSB1c2VsZXNzIG5vZGVzPwoOAE5OPAEzJQEcIiEaPgEocGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvZGVidWcuZGFydDpzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci9sb2NhbHNfaGFuZGxlci5kYXJ0wABRji8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGxvY2Fsc19oYW5kbGVyOwoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nIHNob3cgSXRlcmFibGVNaXhpbjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaXIvdXRpbC5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCc7CmltcG9ydCAnaW5mZXJyZXJfZW5naW5lLmRhcnQnOwppbXBvcnQgJ3R5cGVfZ3JhcGhfbm9kZXMuZGFydCc7CgovLy8gQSB2YXJpYWJsZSBzY29wZSBob2xkcyB0eXBlcyBmb3IgdmFyaWFibGVzLiBJdCBoYXMgYSBsaW5rIHRvIGEKLy8vIHBhcmVudCBzY29wZSwgYnV0IG5ldmVyIGNoYW5nZXMgdGhlIHR5cGVzIGluIHRoYXQgcGFyZW50LiBJbnN0ZWFkLAovLy8gdXBkYXRlcyB0byBsb2NhbHMgb2YgYSBwYXJlbnQgc2NvcGUgYXJlIHB1dCBpbiB0aGUgY3VycmVudCBzY29wZS4KLy8vIFRoZSBpbmZlcnJlciBtYWtlcyBzdXJlIHVwZGF0ZXMgZ2V0IG1lcmdlZCBpbnRvIHRoZSBwYXJlbnQgc2NvcGUsCi8vLyBvbmNlIHRoZSBjb250cm9sIGZsb3cgYmxvY2sgaGFzIGJlZW4gdmlzaXRlZC4KY2xhc3MgVmFyaWFibGVTY29wZSB7CiAgLy8vIFRoZSBudW1iZXIgb2YgcGFyZW50IHNjb3BlcyBvZiB0aGlzIHNjb3BlLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgZm9yIGNvbXB1dGluZyBjb21tb24gcGFyZW50cyBlZmZpY2llbnRseS4KICBmaW5hbCBpbnQgX2xldmVsOwoKICBNYXA8TG9jYWwsIFR5cGVJbmZvcm1hdGlvbj4gdmFyaWFibGVzOwoKICAvLy8gVGhlIHBhcmVudCBvZiB0aGlzIHNjb3BlLiBOdWxsIGZvciB0aGUgcm9vdCBzY29wZS4KICBmaW5hbCBWYXJpYWJsZVNjb3BlIHBhcmVudDsKCiAgLy8vIFRoZSBbaXIuTm9kZV0gdGhhdCBjcmVhdGVkIHRoaXMgc2NvcGUuCiAgZmluYWwgaXIuTm9kZSB0cnlCbG9jazsKCiAgZmluYWwgVmFyaWFibGVTY29wZSBjb3B5T2Y7CgogIFZhcmlhYmxlU2NvcGUoe3RoaXMucGFyZW50fSkKICAgICAgOiB0aGlzLnZhcmlhYmxlcyA9IG51bGwsCiAgICAgICAgdGhpcy5jb3B5T2YgPSBudWxsLAogICAgICAgIHRoaXMudHJ5QmxvY2sgPSBudWxsLAogICAgICAgIF9sZXZlbCA9IChwYXJlbnQ/Ll9sZXZlbCA/PyAtMSkgKyAxOwoKICBWYXJpYWJsZVNjb3BlLnRyeUJsb2NrKHRoaXMudHJ5QmxvY2ssIHt0aGlzLnBhcmVudH0pCiAgICAgIDogdGhpcy52YXJpYWJsZXMgPSBudWxsLAogICAgICAgIHRoaXMuY29weU9mID0gbnVsbCwKICAgICAgICBfbGV2ZWwgPSAocGFyZW50Py5fbGV2ZWwgPz8gLTEpICsgMSB7CiAgICBhc3NlcnQodHJ5QmxvY2sgaXMgaXIuVHJ5Q2F0Y2ggfHwgdHJ5QmxvY2sgaXMgaXIuVHJ5RmluYWxseSwKICAgICAgICAiVW5leHBlY3RlZCBibG9jayAkdHJ5QmxvY2sgZm9yIFZhcmlhYmxlU2NvcGUudHJ5QmxvY2siKTsKICB9CgogIFZhcmlhYmxlU2NvcGUuZGVlcENvcHlPZihWYXJpYWJsZVNjb3BlIG90aGVyKQogICAgICA6IHZhcmlhYmxlcyA9IG90aGVyLnZhcmlhYmxlcyA9PSBudWxsCiAgICAgICAgICAgID8gbnVsbAogICAgICAgICAgICA6IG5ldyBNYXA8TG9jYWwsIFR5cGVJbmZvcm1hdGlvbj4uZnJvbShvdGhlci52YXJpYWJsZXMpLAogICAgICAgIHRyeUJsb2NrID0gb3RoZXIudHJ5QmxvY2ssCiAgICAgICAgY29weU9mID0gb3RoZXIuY29weU9mID8/IG90aGVyLAogICAgICAgIF9sZXZlbCA9IG90aGVyLl9sZXZlbCwKICAgICAgICBwYXJlbnQgPSBvdGhlci5wYXJlbnQgPT0gbnVsbAogICAgICAgICAgICA/IG51bGwKICAgICAgICAgICAgOiBuZXcgVmFyaWFibGVTY29wZS5kZWVwQ29weU9mKG90aGVyLnBhcmVudCk7CgogIC8vLyBgdHJ1ZWAgaWYgdGhpcyBzY29wZSBpcyBmb3IgYSB0cnkgYmxvY2suCiAgYm9vbCBnZXQgaXNUcnkgPT4gdHJ5QmxvY2sgIT0gbnVsbDsKCiAgLy8vIFJldHVybnMgdGhlIFtWYXJpYWJsZVNjb3BlXSB0aGF0IGRlZmluZXMgdGhlIGlkZW50aXR5IG9mIHRoaXMgc2NvcGUuCiAgLy8vCiAgLy8vIElmIHRoaXMgc2NvcGUgaXMgYSBjb3B5IG9mIGFub3RoZXIgc2NvcGUsIHRoZSBpZGVudGl0eSBpcyB0aGUgaWRlbnRpdHkKICAvLy8gb2YgdGhlIG90aGVyIHNjb3BlLCBvdGhlcndpc2UgdGhlIGlkZW50aXR5IGlzIHRoZSBzY29wZSBpdHNlbGYuCiAgVmFyaWFibGVTY29wZSBnZXQgaWRlbnRpdHkgPT4gY29weU9mID8/IHRoaXM7CgogIC8vLyBSZXR1cm5zIHRoZSBjb21tb24gcGFyZW50IGJldHdlZW4gdGhpcyBhbmQgW290aGVyXSBiYXNlZCBvbiBbaWRlbnRpdHldLgogIFZhcmlhYmxlU2NvcGUgY29tbW9uUGFyZW50KFZhcmlhYmxlU2NvcGUgb3RoZXIpIHsKICAgIGlmIChpZGVudGl0eSA9PSBvdGhlci5pZGVudGl0eSkgewogICAgICByZXR1cm4gaWRlbnRpdHk7CiAgICB9IGVsc2UgaWYgKF9sZXZlbCA+IG90aGVyLl9sZXZlbCkgewogICAgICByZXR1cm4gcGFyZW50LmNvbW1vblBhcmVudChvdGhlcik7CiAgICB9IGVsc2UgaWYgKF9sZXZlbCA8IG90aGVyLl9sZXZlbCkgewogICAgICByZXR1cm4gY29tbW9uUGFyZW50KG90aGVyLnBhcmVudCk7CiAgICB9IGVsc2UgaWYgKF9sZXZlbCA+IDApIHsKICAgICAgcmV0dXJuIHBhcmVudC5jb21tb25QYXJlbnQob3RoZXIucGFyZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgVHlwZUluZm9ybWF0aW9uIG9wZXJhdG9yIFtdKExvY2FsIHZhcmlhYmxlKSB7CiAgICBUeXBlSW5mb3JtYXRpb24gcmVzdWx0OwogICAgaWYgKHZhcmlhYmxlcyA9PSBudWxsIHx8IChyZXN1bHQgPSB2YXJpYWJsZXNbdmFyaWFibGVdKSA9PSBudWxsKSB7CiAgICAgIHJldHVybiBwYXJlbnQgPT0gbnVsbCA/IG51bGwgOiBwYXJlbnRbdmFyaWFibGVdOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KExvY2FsIHZhcmlhYmxlLCBUeXBlSW5mb3JtYXRpb24gbWFzaykgewogICAgYXNzZXJ0KG1hc2sgIT0gbnVsbCk7CiAgICBpZiAodmFyaWFibGVzID09IG51bGwpIHsKICAgICAgdmFyaWFibGVzID0gbmV3IE1hcDxMb2NhbCwgVHlwZUluZm9ybWF0aW9uPigpOwogICAgfQogICAgdmFyaWFibGVzW3ZhcmlhYmxlXSA9IG1hc2s7CiAgfQoKICAvLy8gQ2FsbHMgW2ZdIGZvciBhbGwgdmFyaWFibGVzIGluIHRoaXMgYW5kIHBhcmVudCBzY29wZXMgdW50aWwgYW5kIGluY2x1ZGluZwogIC8vLyBbc2NvcGVdLiBbZl0gaXMgY2FsbGVkIGF0IG1vc3Qgb25jZSBmb3IgZWFjaCB2YXJpYWJsZS4KICB2b2lkIGZvckVhY2hMb2NhbFVudGlsU2NvcGUoCiAgICAgIFZhcmlhYmxlU2NvcGUgc2NvcGUsIHZvaWQgZihMb2NhbCB2YXJpYWJsZSwgVHlwZUluZm9ybWF0aW9uIHR5cGUpKSB7CiAgICBfZm9yRWFjaExvY2FsVW50aWxTY29wZShzY29wZSwgZiwgbmV3IFNldGxldDxMb2NhbD4oKSwgdGhpcyk7CiAgfQoKICB2b2lkIF9mb3JFYWNoTG9jYWxVbnRpbFNjb3BlKAogICAgICBWYXJpYWJsZVNjb3BlIHNjb3BlLAogICAgICB2b2lkIGYoTG9jYWwgdmFyaWFibGUsIFR5cGVJbmZvcm1hdGlvbiB0eXBlKSwKICAgICAgU2V0bGV0PExvY2FsPiBzZWVuTG9jYWxzLAogICAgICBWYXJpYWJsZVNjb3BlIG9yaWdpbikgewogICAgaWYgKHZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIHZhcmlhYmxlcy5mb3JFYWNoKCh2YXJpYWJsZSwgdHlwZSkgewogICAgICAgIGlmIChzZWVuTG9jYWxzLmNvbnRhaW5zKHZhcmlhYmxlKSkgcmV0dXJuOwogICAgICAgIHNlZW5Mb2NhbHMuYWRkKHZhcmlhYmxlKTsKICAgICAgICBmKHZhcmlhYmxlLCB0eXBlKTsKICAgICAgfSk7CiAgICB9CiAgICBpZiAoc2NvcGU/LmlkZW50aXR5ID09IGlkZW50aXR5KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChwYXJlbnQgIT0gbnVsbCkgewogICAgICBwYXJlbnQuX2ZvckVhY2hMb2NhbFVudGlsU2NvcGUoc2NvcGUsIGYsIHNlZW5Mb2NhbHMsIG9yaWdpbik7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoCiAgICAgICAgICBzY29wZSA9PSBudWxsLAogICAgICAgICAgIlNjb3BlIG5vdCBmb3VuZDogXG4iCiAgICAgICAgICAib3JpZ2luPSR7b3JpZ2luLnRvU3RydWN0dXJlZFRleHQoJycpfVxuIgogICAgICAgICAgInNjb3BlPSR7c2NvcGUudG9TdHJ1Y3R1cmVkVGV4dCgnJyl9Iik7CiAgICB9CiAgfQoKICB2b2lkIGZvckVhY2hMb2NhbCh2b2lkIGYoTG9jYWwgdmFyaWFibGUsIFR5cGVJbmZvcm1hdGlvbiB0eXBlKSkgewogICAgZm9yRWFjaExvY2FsVW50aWxTY29wZShudWxsLCBmKTsKICB9CgogIGJvb2wgdXBkYXRlcyhMb2NhbCB2YXJpYWJsZSkgewogICAgaWYgKHZhcmlhYmxlcyA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdmFyaWFibGVzLmNvbnRhaW5zS2V5KHZhcmlhYmxlKTsKICB9CgogIFN0cmluZyB0b1N0cnVjdHVyZWRUZXh0KFN0cmluZyBpbmRlbnQpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIF90b1N0cnVjdHVyZWRUZXh0KHNiLCBpbmRlbnQpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQoKICB2b2lkIF90b1N0cnVjdHVyZWRUZXh0KFN0cmluZ0J1ZmZlciBzYiwgU3RyaW5nIGluZGVudCkgewogICAgc2Iud3JpdGUoJ1ZhcmlhYmxlU2NvcGUoJGhhc2hDb2RlKSBbJyk7CiAgICBzYi53cml0ZSgnXG4ke2luZGVudH0gIGxldmVsOiRfbGV2ZWwnKTsKICAgIGlmIChjb3B5T2YgIT0gbnVsbCkgewogICAgICBzYi53cml0ZSgnXG4ke2luZGVudH0gIGNvcHlPZjpWYXJpYWJsZVNjb3BlKCR7Y29weU9mLmhhc2hDb2RlfSknKTsKICAgIH0KICAgIGlmICh0cnlCbG9jayAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCdcbiR7aW5kZW50fSAgdHJ5QmxvY2s6ICR7bm9kZVRvRGVidWdTdHJpbmcodHJ5QmxvY2spfScpOwogICAgfQogICAgaWYgKHZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCdcbiR7aW5kZW50fSAgdmFyaWFibGVzOicpOwogICAgICB2YXJpYWJsZXMuZm9yRWFjaCgoTG9jYWwgbG9jYWwsIFR5cGVJbmZvcm1hdGlvbiB0eXBlKSB7CiAgICAgICAgc2Iud3JpdGUoJ1xuJHtpbmRlbnR9ICAgICRsb2NhbDogJyk7CiAgICAgICAgc2Iud3JpdGUodHlwZS50b1N0cnVjdHVyZWRUZXh0KCcke2luZGVudH0gICAgICAnKSk7CiAgICAgIH0pOwogICAgfQogICAgaWYgKHBhcmVudCAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCdcbiR7aW5kZW50fSAgcGFyZW50OicpOwogICAgICBwYXJlbnQuX3RvU3RydWN0dXJlZFRleHQoc2IsICcke2luZGVudH0gICAgICcpOwogICAgfQogICAgc2Iud3JpdGUoJ10nKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZyByZXN0ID0gcGFyZW50ID09IG51bGwgPyAibnVsbCIgOiBwYXJlbnQudG9TdHJpbmcoKTsKICAgIHJldHVybiAneyR2YXJpYWJsZXN9ICRyZXN0JzsKICB9Cn0KCi8vLyBUcmFja3MgaW5pdGlhbGl6ZXJzIHZpYSBpbml0aWFsaXphdGlvbnMgYW5kIGFzc2lnbm1lbnRzLgpjbGFzcyBGaWVsZEluaXRpYWxpemF0aW9uU2NvcGUgewogIE1hcDxGaWVsZEVudGl0eSwgVHlwZUluZm9ybWF0aW9uPiBmaWVsZHM7CiAgYm9vbCBpc1RoaXNFeHBvc2VkOwoKICAvLy8gYHRydWVgIHdoZW4gY29udHJvbCBmbG93IHByZXZlbnRzIGFjY3VtdWxhdGluZyBkZWZpbml0ZSBhc3NpZ25tZW50cywKICAvLy8gZS5nLiBhbiBlYXJseSByZXR1cm4gb3IgY2F1Z2h0IGV4Y2VwdGlvbi4KICBib29sIGlzSW5kZWZpbml0ZTsKCiAgRmllbGRJbml0aWFsaXphdGlvblNjb3BlKCkKICAgICAgOiBpc1RoaXNFeHBvc2VkID0gZmFsc2UsCiAgICAgICAgaXNJbmRlZmluaXRlID0gZmFsc2U7CgogIEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZS5pbnRlcm5hbEZyb20oRmllbGRJbml0aWFsaXphdGlvblNjb3BlIG90aGVyKQogICAgICA6IGlzVGhpc0V4cG9zZWQgPSBvdGhlci5pc1RoaXNFeHBvc2VkLAogICAgICAgIGlzSW5kZWZpbml0ZSA9IG90aGVyLmlzSW5kZWZpbml0ZTsKCiAgZmFjdG9yeSBGaWVsZEluaXRpYWxpemF0aW9uU2NvcGUuZnJvbShGaWVsZEluaXRpYWxpemF0aW9uU2NvcGUgb3RoZXIpIHsKICAgIGlmIChvdGhlciA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuZXcgRmllbGRJbml0aWFsaXphdGlvblNjb3BlLmludGVybmFsRnJvbShvdGhlcik7CiAgfQoKICB2b2lkIHVwZGF0ZUZpZWxkKEZpZWxkRW50aXR5IGZpZWxkLCBUeXBlSW5mb3JtYXRpb24gdHlwZSkgewogICAgaWYgKGlzVGhpc0V4cG9zZWQpIHJldHVybjsKICAgIGlmIChpc0luZGVmaW5pdGUpIHJldHVybjsKICAgIGZpZWxkcyA/Pz0gbmV3IE1hcDxGaWVsZEVudGl0eSwgVHlwZUluZm9ybWF0aW9uPigpOwogICAgZmllbGRzW2ZpZWxkXSA9IHR5cGU7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gcmVhZEZpZWxkKEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICByZXR1cm4gZmllbGRzID09IG51bGwgPyBudWxsIDogZmllbGRzW2ZpZWxkXTsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoRmllbGRFbnRpdHkgZWxlbWVudCwgVHlwZUluZm9ybWF0aW9uIHR5cGUpKSB7CiAgICBmaWVsZHM/LmZvckVhY2goZik7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgam9pbiBiZXR3ZWVuIFt0aGVuU2NvcGVdIGFuZCBbZWxzZVNjb3BlXSB3aGljaCBtb2RlbHMgdGhlCiAgLy8vIGZsb3cgdGhyb3VnaCBlaXRoZXIgW3RoZW5TY29wZV0gb3IgW2Vsc2VTY29wZV0uCiAgRmllbGRJbml0aWFsaXphdGlvblNjb3BlIG1lcmdlRGlhbW9uZEZsb3coSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsCiAgICAgIEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZSB0aGVuU2NvcGUsIEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZSBlbHNlU2NvcGUpIHsKICAgIGFzc2VydChlbHNlU2NvcGUgIT0gbnVsbCk7CgogICAgLy8gUXVpY2sgYmFpbG91dCBjaGVjay4gSWYgW2lzVGhpc0V4cG9zZWRdIG9yIFtpc0luZGVmaW5pdGVdIGlzIHRydWUsIHdlCiAgICAvLyBrbm93IHRoZSBjb2RlIGZvbGxvd2luZyB3b24nVHlwZUluZm9ybWF0aW9uIGRvIGFueXRoaW5nLgogICAgaWYgKGlzVGhpc0V4cG9zZWQpIHJldHVybiB0aGlzOwogICAgaWYgKGlzSW5kZWZpbml0ZSkgcmV0dXJuIHRoaXM7CgogICAgRmllbGRJbml0aWFsaXphdGlvblNjb3BlIG90aGVyU2NvcGUgPQogICAgICAgIGVsc2VTY29wZS5maWVsZHMgPT0gbnVsbCA/IHRoaXMgOiBlbHNlU2NvcGU7CgogICAgdGhlblNjb3BlLmZvckVhY2goKEZpZWxkRW50aXR5IGZpZWxkLCBUeXBlSW5mb3JtYXRpb24gdHlwZSkgewogICAgICBUeXBlSW5mb3JtYXRpb24gb3RoZXJUeXBlID0gb3RoZXJTY29wZS5yZWFkRmllbGQoZmllbGQpOwogICAgICBpZiAob3RoZXJUeXBlID09IG51bGwpIHJldHVybjsKICAgICAgdXBkYXRlRmllbGQoZmllbGQsIGluZmVycmVyLnR5cGVzLmFsbG9jYXRlRGlhbW9uZFBoaSh0eXBlLCBvdGhlclR5cGUpKTsKICAgIH0pOwoKICAgIGlzVGhpc0V4cG9zZWQgPSB0aGVuU2NvcGUuaXNUaGlzRXhwb3NlZCB8fCBlbHNlU2NvcGUuaXNUaGlzRXhwb3NlZDsKICAgIGlzSW5kZWZpbml0ZSA9IHRoZW5TY29wZS5pc0luZGVmaW5pdGUgfHwgZWxzZVNjb3BlLmlzSW5kZWZpbml0ZTsKICAgIHJldHVybiB0aGlzOwogIH0KfQoKLy8vIFBsYWNlaG9sZGVyIGZvciBpbmZlcnJlZCBhcmd1bWVudHMgdHlwZXMgb24gc2VuZHMuCmNsYXNzIEFyZ3VtZW50c1R5cGVzIGV4dGVuZHMgSXRlcmFibGVNaXhpbjxUeXBlSW5mb3JtYXRpb24+IHsKICBmaW5hbCBMaXN0PFR5cGVJbmZvcm1hdGlvbj4gcG9zaXRpb25hbDsKICBmaW5hbCBNYXA8U3RyaW5nLCBUeXBlSW5mb3JtYXRpb24+IG5hbWVkOwogIEFyZ3VtZW50c1R5cGVzKHRoaXMucG9zaXRpb25hbCwgbmFtZWQpCiAgICAgIDogdGhpcy5uYW1lZCA9IChuYW1lZCA9PSBudWxsIHx8IG5hbWVkLmlzRW1wdHkpID8gY29uc3Qge30gOiBuYW1lZCB7CiAgICBhc3NlcnQodGhpcy5wb3NpdGlvbmFsLmV2ZXJ5KChUeXBlSW5mb3JtYXRpb24gdHlwZSkgPT4gdHlwZSAhPSBudWxsKSk7CiAgICBhc3NlcnQodGhpcy5uYW1lZC52YWx1ZXMuZXZlcnkoKFR5cGVJbmZvcm1hdGlvbiB0eXBlKSA9PiB0eXBlICE9IG51bGwpKTsKICB9CgogIEFyZ3VtZW50c1R5cGVzLmVtcHR5KCkKICAgICAgOiBwb3NpdGlvbmFsID0gY29uc3QgW10sCiAgICAgICAgbmFtZWQgPSBjb25zdCB7fTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBsZW5ndGggPT4gcG9zaXRpb25hbC5sZW5ndGggKyBuYW1lZC5sZW5ndGg7CgogIEBvdmVycmlkZQogIEl0ZXJhdG9yPFR5cGVJbmZvcm1hdGlvbj4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBBcmd1bWVudHNUeXBlc0l0ZXJhdG9yKHRoaXMpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAieyBwb3NpdGlvbmFsID0gJHBvc2l0aW9uYWwsIG5hbWVkID0gJG5hbWVkIH0iOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAocG9zaXRpb25hbC5sZW5ndGggIT0gb3RoZXIucG9zaXRpb25hbC5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGlmIChuYW1lZC5sZW5ndGggIT0gb3RoZXIubmFtZWQubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHBvc2l0aW9uYWwubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKHBvc2l0aW9uYWxbaV0gIT0gb3RoZXIucG9zaXRpb25hbFtpXSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyIHJlc3VsdCA9IHRydWU7CiAgICBuYW1lZC5mb3JFYWNoKChuYW1lLCB0eXBlKSB7CiAgICAgIGlmIChvdGhlci5uYW1lZFtuYW1lXSAhPSB0eXBlKSByZXN1bHQgPSBmYWxzZTsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ0FyZ3VtZW50c1R5cGVzLmhhc2hDb2RlJyk7CgogIGJvb2wgaGFzTm9Bcmd1bWVudHMoKSA9PiBwb3NpdGlvbmFsLmlzRW1wdHkgJiYgbmFtZWQuaXNFbXB0eTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihUeXBlSW5mb3JtYXRpb24gdHlwZSkpIHsKICAgIHBvc2l0aW9uYWwuZm9yRWFjaChmKTsKICAgIG5hbWVkLnZhbHVlcy5mb3JFYWNoKGYpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBldmVyeShib29sIGYoVHlwZUluZm9ybWF0aW9uIHR5cGUpKSB7CiAgICByZXR1cm4gcG9zaXRpb25hbC5ldmVyeShmKSAmJiBuYW1lZC52YWx1ZXMuZXZlcnkoZik7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGNvbnRhaW5zKE9iamVjdCB0eXBlKSB7CiAgICByZXR1cm4gcG9zaXRpb25hbC5jb250YWlucyh0eXBlKSB8fCBuYW1lZC5jb250YWluc1ZhbHVlKHR5cGUpOwogIH0KfQoKY2xhc3MgQXJndW1lbnRzVHlwZXNJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yPFR5cGVJbmZvcm1hdGlvbj4gewogIGZpbmFsIEl0ZXJhdG9yPFR5cGVJbmZvcm1hdGlvbj4gcG9zaXRpb25hbDsKICBmaW5hbCBJdGVyYXRvcjxUeXBlSW5mb3JtYXRpb24+IG5hbWVkOwogIGJvb2wgX2l0ZXJhdGVQb3NpdGlvbmFsID0gdHJ1ZTsKCiAgQXJndW1lbnRzVHlwZXNJdGVyYXRvcihBcmd1bWVudHNUeXBlcyBpdGVyYXRlZSkKICAgICAgOiBwb3NpdGlvbmFsID0gaXRlcmF0ZWUucG9zaXRpb25hbC5pdGVyYXRvciwKICAgICAgICBuYW1lZCA9IGl0ZXJhdGVlLm5hbWVkLnZhbHVlcy5pdGVyYXRvcjsKCiAgSXRlcmF0b3I8VHlwZUluZm9ybWF0aW9uPiBnZXQgX2N1cnJlbnRJdGVyYXRvciA9PgogICAgICBfaXRlcmF0ZVBvc2l0aW9uYWwgPyBwb3NpdGlvbmFsIDogbmFtZWQ7CgogIEBvdmVycmlkZQogIFR5cGVJbmZvcm1hdGlvbiBnZXQgY3VycmVudCA9PiBfY3VycmVudEl0ZXJhdG9yLmN1cnJlbnQ7CgogIEBvdmVycmlkZQogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX2l0ZXJhdGVQb3NpdGlvbmFsICYmIHBvc2l0aW9uYWwubW92ZU5leHQoKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIF9pdGVyYXRlUG9zaXRpb25hbCA9IGZhbHNlOwogICAgcmV0dXJuIG5hbWVkLm1vdmVOZXh0KCk7CiAgfQp9CgovLy8gUGxhY2Vob2xkZXIgZm9yIGluZmVycmVkIHR5cGVzIG9mIGxvY2FsIHZhcmlhYmxlcy4KY2xhc3MgTG9jYWxzSGFuZGxlciB7CiAgZmluYWwgVmFyaWFibGVTY29wZSBfbG9jYWxzOwoKICBMb2NhbHNIYW5kbGVyKCkgOiBfbG9jYWxzID0gbmV3IFZhcmlhYmxlU2NvcGUoKTsKCiAgTG9jYWxzSGFuZGxlci5mcm9tKExvY2Fsc0hhbmRsZXIgb3RoZXIpCiAgICAgIDogX2xvY2FscyA9IG5ldyBWYXJpYWJsZVNjb3BlKHBhcmVudDogb3RoZXIuX2xvY2Fscyk7CgogIExvY2Fsc0hhbmRsZXIudHJ5QmxvY2soTG9jYWxzSGFuZGxlciBvdGhlciwgaXIuVHJlZU5vZGUgYmxvY2spCiAgICAgIDogX2xvY2FscyA9IG5ldyBWYXJpYWJsZVNjb3BlLnRyeUJsb2NrKGJsb2NrLCBwYXJlbnQ6IG90aGVyLl9sb2NhbHMpOwoKICBMb2NhbHNIYW5kbGVyLmRlZXBDb3B5T2YoTG9jYWxzSGFuZGxlciBvdGhlcikKICAgICAgOiBfbG9jYWxzID0gbmV3IFZhcmlhYmxlU2NvcGUuZGVlcENvcHlPZihvdGhlci5fbG9jYWxzKTsKCiAgVHlwZUluZm9ybWF0aW9uIHVzZShJbmZlcnJlckVuZ2luZSBpbmZlcnJlciwgTG9jYWwgbG9jYWwpIHsKICAgIHJldHVybiBfbG9jYWxzW2xvY2FsXTsKICB9CgogIHZvaWQgdXBkYXRlKEluZmVycmVyRW5naW5lIGluZmVycmVyLCBMb2NhbCBsb2NhbCwgVHlwZUluZm9ybWF0aW9uIHR5cGUsCiAgICAgIGlyLk5vZGUgbm9kZSwgRGFydFR5cGUgc3RhdGljVHlwZSwgTG9jYWxzSGFuZGxlciB0cnlCbG9jaykgewogICAgaWYgKHRyeUJsb2NrICE9IG51bGwpIHsKICAgICAgLy8gV2UgZG9uJ3Qga25vdyBpZiBhbiBhc3NpZ25tZW50IGluIGEgdHJ5IGJsb2NrCiAgICAgIC8vIHdpbGwgYmUgZXhlY3V0ZWQsIHNvIGFsbCBhc3NpZ25tZW50cyBpbiB0aGF0IGJsb2NrIGFyZQogICAgICAvLyBwb3RlbnRpYWwgdHlwZXMgYWZ0ZXIgd2UgaGF2ZSBsZWZ0IGl0LiBXZSB1cGRhdGUgdGhlIHBhcmVudAogICAgICAvLyBvZiB0aGUgdHJ5IGJsb2NrIHNvIHRoYXQsIGF0IGV4aXQgb2YgdGhlIHRyeSBibG9jaywgd2UgZ2V0CiAgICAgIC8vIHRoZSByaWdodCBwaGkgZm9yIGl0LgogICAgICBUeXBlSW5mb3JtYXRpb24gZXhpc3RpbmcgPSB0cnlCbG9jay5fbG9jYWxzLnBhcmVudFtsb2NhbF07CiAgICAgIGlmIChleGlzdGluZyAhPSBudWxsKSB7CiAgICAgICAgVHlwZUluZm9ybWF0aW9uIHBoaVR5cGUgPSBpbmZlcnJlci50eXBlcy5hbGxvY2F0ZVBoaSgKICAgICAgICAgICAgdHJ5QmxvY2suX2xvY2Fscy50cnlCbG9jaywgbG9jYWwsIGV4aXN0aW5nLAogICAgICAgICAgICBpc1RyeTogdHJ5QmxvY2suX2xvY2Fscy5pc1RyeSk7CiAgICAgICAgVHlwZUluZm9ybWF0aW9uIGlucHV0VHlwZSA9CiAgICAgICAgICAgIGluZmVycmVyLnR5cGVzLmFkZFBoaUlucHV0KGxvY2FsLCBwaGlUeXBlLCB0eXBlKTsKICAgICAgICB0cnlCbG9jay5fbG9jYWxzLnBhcmVudFtsb2NhbF0gPSBpbnB1dFR5cGU7CiAgICAgIH0KICAgICAgLy8gVXBkYXRlIHRoZSBjdXJyZW50IGhhbmRsZXIgdW5jb25kaXRpb25hbGx5IHdpdGggdGhlIG5ldwogICAgICAvLyB0eXBlLgogICAgICBfbG9jYWxzW2xvY2FsXSA9IHR5cGU7CiAgICB9IGVsc2UgewogICAgICBfbG9jYWxzW2xvY2FsXSA9IHR5cGU7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgam9pbiBiZXR3ZWVuIHRoaXMgbG9jYWxzIGhhbmRsZXIgYW5kIFtvdGhlcl0gd2hpY2ggbW9kZWxzIHRoZQogIC8vLyBmbG93IHRocm91Z2ggZWl0aGVyIHRoaXMgb3IgW290aGVyXS4KICAvLy8KICAvLy8gSWYgW2luUGxhY2VdIGlzIGB0cnVlYCwgdGhlIHZhcmlhYmxlIHR5cGVzIGluIHRoaXMgbG9jYWxzIGhhbmRsZXIgYXJlCiAgLy8vIHJlcGxhY2VkIGJ5IHRoZSB2YXJpYWJsZXMgdHlwZXMgaW4gW290aGVyXS4gT3RoZXJ3aXNlIHRoZSB2YXJpYWJsZSB0eXBlcwogIC8vLyBmcm9tIGJvdGggYXJlIG1lcmdlZCB3aXRoIGEgcGhpIHR5cGUuCiAgTG9jYWxzSGFuZGxlciBtZXJnZUZsb3coSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIExvY2Fsc0hhbmRsZXIgb3RoZXIsCiAgICAgIHtib29sIGluUGxhY2U6IGZhbHNlfSkgewogICAgVmFyaWFibGVTY29wZSBjb21tb24gPSBfbG9jYWxzLmNvbW1vblBhcmVudChvdGhlci5fbG9jYWxzKTsKICAgIGFzc2VydCgKICAgICAgICBjb21tb24gIT0gbnVsbCwKICAgICAgICAiTm8gY29tbW9uIHBhcmVudCBmb3JcbiIKICAgICAgICAiMToke19sb2NhbHMudG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX1cbiIKICAgICAgICAiMjoke290aGVyLl9sb2NhbHMudG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX0iKTsKICAgIGFzc2VydCgKICAgICAgICBjb21tb24gPT0gX2xvY2FscyB8fCBfbG9jYWxzLnZhcmlhYmxlcyA9PSBudWxsLAogICAgICAgICJOb24tZW1wdHkgY29tbW9uIHBhcmVudCBmb3JcbiIKICAgICAgICAiMToke2NvbW1vbi50b1N0cnVjdHVyZWRUZXh0KCcgICcpfVxuIgogICAgICAgICIyOiR7X2xvY2Fscy50b1N0cnVjdHVyZWRUZXh0KCcgICcpfSIpOwogICAgb3RoZXIuX2xvY2Fscy5mb3JFYWNoTG9jYWxVbnRpbFNjb3BlKGNvbW1vbiwKICAgICAgICAoTG9jYWwgbG9jYWwsIFR5cGVJbmZvcm1hdGlvbiB0eXBlKSB7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiBteVR5cGUgPSBfbG9jYWxzW2xvY2FsXTsKICAgICAgaWYgKG15VHlwZSA9PSBudWxsKSByZXR1cm47IC8vIFZhcmlhYmxlIGlzIG9ubHkgZGVmaW5lZCBpbiBbb3RoZXJdLgogICAgICBpZiAodHlwZSA9PSBteVR5cGUpIHJldHVybjsKICAgICAgX2xvY2Fsc1tsb2NhbF0gPQogICAgICAgICAgaW5QbGFjZSA/IHR5cGUgOiBpbmZlcnJlci50eXBlcy5hbGxvY2F0ZURpYW1vbmRQaGkobXlUeXBlLCB0eXBlKTsKICAgIH0pOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgam9pbiBiZXR3ZWVuIFt0aGVuQnJhbmNoXSBhbmQgW2Vsc2VCcmFuY2hdIHdoaWNoIG1vZGVscyB0aGUKICAvLy8gZmxvdyB0aHJvdWdoIGVpdGhlciBbdGhlbkJyYW5jaF0gb3IgW2Vsc2VCcmFuY2hdLgogIExvY2Fsc0hhbmRsZXIgbWVyZ2VEaWFtb25kRmxvdyhJbmZlcnJlckVuZ2luZSBpbmZlcnJlciwKICAgICAgTG9jYWxzSGFuZGxlciB0aGVuQnJhbmNoLCBMb2NhbHNIYW5kbGVyIGVsc2VCcmFuY2gpIHsKICAgIGFzc2VydChlbHNlQnJhbmNoICE9IG51bGwpOwoKICAgIHZvaWQgbWVyZ2VMb2NhbChMb2NhbCBsb2NhbCkgewogICAgICBUeXBlSW5mb3JtYXRpb24gbXlUeXBlID0gX2xvY2Fsc1tsb2NhbF07CiAgICAgIGlmIChteVR5cGUgPT0gbnVsbCkgcmV0dXJuOwogICAgICBUeXBlSW5mb3JtYXRpb24gZWxzZVR5cGUgPSBlbHNlQnJhbmNoLl9sb2NhbHNbbG9jYWxdOwogICAgICBUeXBlSW5mb3JtYXRpb24gdGhlblR5cGUgPSB0aGVuQnJhbmNoLl9sb2NhbHNbbG9jYWxdOwogICAgICBpZiAodGhlblR5cGUgPT0gZWxzZVR5cGUpIHsKICAgICAgICBfbG9jYWxzW2xvY2FsXSA9IHRoZW5UeXBlOwogICAgICB9IGVsc2UgewogICAgICAgIF9sb2NhbHNbbG9jYWxdID0gaW5mZXJyZXIudHlwZXMuYWxsb2NhdGVEaWFtb25kUGhpKHRoZW5UeXBlLCBlbHNlVHlwZSk7CiAgICAgIH0KICAgIH0KCiAgICBWYXJpYWJsZVNjb3BlIGNvbW1vbiA9IF9sb2NhbHMuY29tbW9uUGFyZW50KHRoZW5CcmFuY2guX2xvY2Fscyk7CiAgICBhc3NlcnQoCiAgICAgICAgY29tbW9uICE9IG51bGwsCiAgICAgICAgIk5vIGNvbW1vbiBwYXJlbnQgZm9yXG4iCiAgICAgICAgIjE6JHtfbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9XG4iCiAgICAgICAgIjI6JHt0aGVuQnJhbmNoLl9sb2NhbHMudG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX0iKTsKICAgIGFzc2VydCgKICAgICAgICBfbG9jYWxzLmNvbW1vblBhcmVudChlbHNlQnJhbmNoLl9sb2NhbHMpID09IGNvbW1vbiwKICAgICAgICAiRGlmZiBjb21tb24gcGFyZW50IGZvclxuIgogICAgICAgICIxOiR7Y29tbW9uLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9XG4yOiIKICAgICAgICAiJHtfbG9jYWxzLmNvbW1vblBhcmVudChlbHNlQnJhbmNoLl9sb2NhbHMpPy50b1N0cnVjdHVyZWRUZXh0KCcgICcpfSIpOwogICAgYXNzZXJ0KAogICAgICAgIGNvbW1vbiA9PSBfbG9jYWxzIHx8IF9sb2NhbHMudmFyaWFibGVzID09IG51bGwsCiAgICAgICAgIk5vbi1lbXB0eSBjb21tb24gcGFyZW50IGZvclxuIgogICAgICAgICJjb21tb246JHtjb21tb24udG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX1cbiIKICAgICAgICAiMToke19sb2NhbHMudG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX1cbiIKICAgICAgICAiMjoke3RoZW5CcmFuY2guX2xvY2Fscy50b1N0cnVjdHVyZWRUZXh0KCcgICcpfSIpOwogICAgdGhlbkJyYW5jaC5fbG9jYWxzLmZvckVhY2hMb2NhbFVudGlsU2NvcGUoY29tbW9uLCAoTG9jYWwgbG9jYWwsIF8pIHsKICAgICAgbWVyZ2VMb2NhbChsb2NhbCk7CiAgICB9KTsKICAgIGVsc2VCcmFuY2guX2xvY2Fscy5mb3JFYWNoTG9jYWxVbnRpbFNjb3BlKGNvbW1vbiwgKExvY2FsIGxvY2FsLCBfKSB7CiAgICAgIC8vIERpc2NhcmQgbG9jYWxzIHdlIGFscmVhZHkgcHJvY2Vzc2VkIHdoZW4gaXRlcmF0aW5nIG92ZXIKICAgICAgLy8gW3RoZW5CcmFuY2hdJ3MgbG9jYWxzLgogICAgICBpZiAoIXRoZW5CcmFuY2guX2xvY2Fscy51cGRhdGVzKGxvY2FsKSkgbWVyZ2VMb2NhbChsb2NhbCk7CiAgICB9KTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLy8vIE1lcmdlIGFsbCBbTG9jYWxzSGFuZGxlcl0gaW4gW2hhbmRsZXJzXSBpbnRvIFs6dGhpczpdLgogIC8vLwogIC8vLyBJZiBba2VlcE93bkxvY2Fsc10gaXMgdHJ1ZSwgdGhlIHR5cGVzIG9mIGxvY2FscyBpbiB0aGlzCiAgLy8vIFtMb2NhbHNIYW5kbGVyXSBhcmUgYmVpbmcgdXNlZCBpbiB0aGUgbWVyZ2UuIFtrZWVwT3duTG9jYWxzXQogIC8vLyBzaG91bGQgYmUgdHJ1ZSBpZiB0aGlzIFtMb2NhbHNIYW5kbGVyXSwgdGhlIGRvbWluYXRvciBvZgogIC8vLyBhbGwgW2hhbmRsZXJzXSwgYWxzbyBkaXJlY3RseSBmbG93cyBpbnRvIHRoZSBqb2luIHBvaW50LAogIC8vLyB0aGF0IGlzIHRoZSBjb2RlIGFmdGVyIGFsbCBbaGFuZGxlcnNdLiBGb3IgZXhhbXBsZSwgY29uc2lkZXI6CiAgLy8vCiAgLy8vIFs6IHN3aXRjaCAoLi4uKSB7CiAgLy8vICAgICAgY2FzZSAxOiAuLi47IGJyZWFrOwogIC8vLyAgICB9CiAgLy8vIDpdCiAgLy8vCiAgLy8vIFRoZSBbTG9jYWxzSGFuZGxlcl0gYXQgZW50cnkgb2YgdGhlIHN3aXRjaCBhbHNvIGZsb3dzIGludG8gdGhlCiAgLy8vIGV4aXQgb2YgdGhlIHN3aXRjaCwgYmVjYXVzZSB0aGVyZSBpcyBubyBkZWZhdWx0IGNhc2UuIFNvIHRoZQogIC8vLyB0eXBlcyBvZiBsb2NhbHMgYXQgZW50cnkgb2YgdGhlIHN3aXRjaCBoYXZlIHRvIHRha2UgcGFydCB0byB0aGUKICAvLy8gbWVyZ2UuCiAgLy8vCiAgLy8vIFRoZSBhYm92ZSBzaXR1YXRpb24gaXMgYWxzbyB0cnVlIGZvciBsYWJlbGVkIHN0YXRlbWVudHMgbGlrZQogIC8vLwogIC8vLyBbOiBMOiB7CiAgLy8vICAgICAgaWYgKC4uLikgYnJlYWs7CiAgLy8vICAgICAgLi4uCiAgLy8vICAgIH0KICAvLy8gOl0KICAvLy8KICAvLy8gd2hlcmUgWzp0aGlzOl0gaXMgdGhlIFtMb2NhbHNIYW5kbGVyXSBmb3IgdGhlIHBhdGhzIHRocm91Z2ggdGhlCiAgLy8vIGxhYmVsZWQgc3RhdGVtZW50IHRoYXQgZG8gbm90IGJyZWFrIG91dC4KICBMb2NhbHNIYW5kbGVyIG1lcmdlQWZ0ZXJCcmVha3MoCiAgICAgIEluZmVycmVyRW5naW5lIGluZmVycmVyLCBJdGVyYWJsZTxMb2NhbHNIYW5kbGVyPiBoYW5kbGVycywKICAgICAge2Jvb2wga2VlcE93bkxvY2FsczogdHJ1ZX0pIHsKICAgIGlyLk5vZGUgdHJ5QmxvY2sgPSBfbG9jYWxzLnRyeUJsb2NrOwogICAgLy8gVXNlIGEgc2VwYXJhdGUgbG9jYWxzIGhhbmRsZXIgdG8gcGVyZm9ybSB0aGUgbWVyZ2UgaW4sIHNvIHRoYXQgUGhpCiAgICAvLyBjcmVhdGlvbiBkb2VzIG5vdCBpbnZhbGlkYXRlIHByZXZpb3VzIHR5cGUga25vd2xlZGdlIHdoaWxlIHdlIG1pZ2h0CiAgICAvLyBzdGlsbCBsb29rIGl0IHVwLgogICAgVmFyaWFibGVTY29wZSBtZXJnZWQgPSB0cnlCbG9jayAhPSBudWxsCiAgICAgICAgPyBuZXcgVmFyaWFibGVTY29wZS50cnlCbG9jayh0cnlCbG9jaywgcGFyZW50OiBfbG9jYWxzKQogICAgICAgIDogbmV3IFZhcmlhYmxlU2NvcGUocGFyZW50OiBfbG9jYWxzKTsKICAgIFNldDxMb2NhbD4gc2VlbkxvY2FscyA9IG5ldyBTZXRsZXQ8TG9jYWw+KCk7CiAgICAvLyBNZXJnZSBhbGwgb3RoZXIgaGFuZGxlcnMuCiAgICBmb3IgKExvY2Fsc0hhbmRsZXIgaGFuZGxlciBpbiBoYW5kbGVycykgewogICAgICBWYXJpYWJsZVNjb3BlIGNvbW1vbiA9IF9sb2NhbHMuY29tbW9uUGFyZW50KGhhbmRsZXIuX2xvY2Fscyk7CiAgICAgIGFzc2VydCgKICAgICAgICAgIGNvbW1vbiAhPSBudWxsLAogICAgICAgICAgIk5vIGNvbW1vbiBwYXJlbnQgZm9yXG4iCiAgICAgICAgICAiMToke19sb2NhbHMudG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX1cbiIKICAgICAgICAgICIyOiR7aGFuZGxlci5fbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9Iik7CiAgICAgIGFzc2VydCgKICAgICAgICAgIGNvbW1vbiA9PSBfbG9jYWxzIHx8IF9sb2NhbHMudmFyaWFibGVzID09IG51bGwsCiAgICAgICAgICAiTm9uLWVtcHR5IGNvbW1vbiBwYXJlbnQgZm9yXG4iCiAgICAgICAgICAiY29tbW9uOiR7Y29tbW9uLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9XG4iCiAgICAgICAgICAiMToke19sb2NhbHMudG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX1cbiIKICAgICAgICAgICIyOiR7aGFuZGxlci5fbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9Iik7CiAgICAgIGhhbmRsZXIuX2xvY2Fscy5mb3JFYWNoTG9jYWxVbnRpbFNjb3BlKGNvbW1vbiwgKGxvY2FsLCBvdGhlclR5cGUpIHsKICAgICAgICBUeXBlSW5mb3JtYXRpb24gbXlUeXBlID0gbWVyZ2VkW2xvY2FsXTsKICAgICAgICBpZiAobXlUeXBlID09IG51bGwpIHJldHVybjsKICAgICAgICBUeXBlSW5mb3JtYXRpb24gbmV3VHlwZTsKICAgICAgICBpZiAoIXNlZW5Mb2NhbHMuY29udGFpbnMobG9jYWwpKSB7CiAgICAgICAgICBuZXdUeXBlID0gaW5mZXJyZXIudHlwZXMuYWxsb2NhdGVQaGkoCiAgICAgICAgICAgICAgbWVyZ2VkLnRyeUJsb2NrLCBsb2NhbCwgb3RoZXJUeXBlLAogICAgICAgICAgICAgIGlzVHJ5OiBtZXJnZWQuaXNUcnkpOwogICAgICAgICAgc2VlbkxvY2Fscy5hZGQobG9jYWwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBuZXdUeXBlID0gaW5mZXJyZXIudHlwZXMuYWRkUGhpSW5wdXQobG9jYWwsIG15VHlwZSwgb3RoZXJUeXBlKTsKICAgICAgICB9CiAgICAgICAgaWYgKG5ld1R5cGUgIT0gbXlUeXBlKSB7CiAgICAgICAgICBtZXJnZWRbbG9jYWxdID0gbmV3VHlwZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgLy8gSWYgd2Ugd2FudCB0byBrZWVwIG93biBsb2NhbHMsIHdlIG1lcmdlIFtzZWVuTG9jYWxzXSBmcm9tIFt0aGlzXSBpbnRvCiAgICAvLyBbbWVyZ2VkXSB0byB1cGRhdGUgdGhlIFBoaSBub2RlcyB3aXRoIG9yaWdpbmFsIHZhbHVlcy4KICAgIGlmIChrZWVwT3duTG9jYWxzKSB7CiAgICAgIGZvciAoTG9jYWwgdmFyaWFibGUgaW4gc2VlbkxvY2FscykgewogICAgICAgIFR5cGVJbmZvcm1hdGlvbiBvcmlnaW5hbFR5cGUgPSBfbG9jYWxzW3ZhcmlhYmxlXTsKICAgICAgICBpZiAob3JpZ2luYWxUeXBlICE9IG51bGwpIHsKICAgICAgICAgIG1lcmdlZFt2YXJpYWJsZV0gPSBpbmZlcnJlci50eXBlcwogICAgICAgICAgICAgIC5hZGRQaGlJbnB1dCh2YXJpYWJsZSwgbWVyZ2VkW3ZhcmlhYmxlXSwgb3JpZ2luYWxUeXBlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIC8vIENsZWFuIHVwIFBoaSBub2RlcyB3aXRoIHNpbmdsZSBpbnB1dCBhbmQgc3RvcmUgYmFjayByZXN1bHQgaW50bwogICAgLy8gYWN0dWFsIGxvY2FscyBoYW5kbGVyLgogICAgbWVyZ2VkLmZvckVhY2hMb2NhbFVudGlsU2NvcGUobWVyZ2VkLAogICAgICAgIChMb2NhbCB2YXJpYWJsZSwgVHlwZUluZm9ybWF0aW9uIHR5cGUpIHsKICAgICAgX2xvY2Fsc1t2YXJpYWJsZV0gPSBpbmZlcnJlci50eXBlcy5zaW1wbGlmeVBoaSh0cnlCbG9jaywgdmFyaWFibGUsIHR5cGUpOwogICAgfSk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8vLyBNZXJnZSBhbGwgW0xvY2Fsc0hhbmRsZXJdIGluIFtoYW5kbGVyc10gaW50byB0aGlzIGhhbmRsZXIuCiAgLy8vIFJldHVybnMgd2hldGhlciBhIGxvY2FsIGluIHRoaXMgaGFuZGxlciBoYXMgY2hhbmdlZC4KICBib29sIG1lcmdlQWxsKEluZmVycmVyRW5naW5lIGluZmVycmVyLCBJdGVyYWJsZTxMb2NhbHNIYW5kbGVyPiBoYW5kbGVycykgewogICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAgICBoYW5kbGVycy5mb3JFYWNoKChMb2NhbHNIYW5kbGVyIG90aGVyKSB7CiAgICAgIFZhcmlhYmxlU2NvcGUgY29tbW9uID0gX2xvY2Fscy5jb21tb25QYXJlbnQob3RoZXIuX2xvY2Fscyk7CiAgICAgIGFzc2VydCgKICAgICAgICAgIGNvbW1vbiAhPSBudWxsLAogICAgICAgICAgIk5vIGNvbW1vbiBwYXJlbnQgZm9yXG4iCiAgICAgICAgICAiMToke19sb2NhbHMudG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX1cbiIKICAgICAgICAgICIyOiR7b3RoZXIuX2xvY2Fscy50b1N0cnVjdHVyZWRUZXh0KCcgICcpfSIpOwogICAgICBhc3NlcnQoCiAgICAgICAgICBjb21tb24gPT0gX2xvY2FscyB8fCBfbG9jYWxzLnZhcmlhYmxlcyA9PSBudWxsLAogICAgICAgICAgIk5vbi1lbXB0eSBjb21tb24gcGFyZW50IGZvclxuIgogICAgICAgICAgImNvbW1vbjoke2NvbW1vbi50b1N0cnVjdHVyZWRUZXh0KCcgICcpfVxuIgogICAgICAgICAgIjE6JHtfbG9jYWxzLnRvU3RydWN0dXJlZFRleHQoJyAgJyl9XG4iCiAgICAgICAgICAiMjoke290aGVyLl9sb2NhbHMudG9TdHJ1Y3R1cmVkVGV4dCgnICAnKX0iKTsKICAgICAgb3RoZXIuX2xvY2Fscy5mb3JFYWNoTG9jYWxVbnRpbFNjb3BlKGNvbW1vbiwgKGxvY2FsLCBvdGhlclR5cGUpIHsKICAgICAgICBUeXBlSW5mb3JtYXRpb24gbXlUeXBlID0gX2xvY2Fsc1tsb2NhbF07CiAgICAgICAgaWYgKG15VHlwZSA9PSBudWxsKSByZXR1cm47CiAgICAgICAgVHlwZUluZm9ybWF0aW9uIG5ld1R5cGUgPQogICAgICAgICAgICBpbmZlcnJlci50eXBlcy5hZGRQaGlJbnB1dChsb2NhbCwgbXlUeXBlLCBvdGhlclR5cGUpOwogICAgICAgIGlmIChuZXdUeXBlICE9IG15VHlwZSkgewogICAgICAgICAgY2hhbmdlZCA9IHRydWU7CiAgICAgICAgICBfbG9jYWxzW2xvY2FsXSA9IG5ld1R5cGU7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogICAgcmV0dXJuIGNoYW5nZWQ7CiAgfQoKICB2b2lkIHN0YXJ0TG9vcChJbmZlcnJlckVuZ2luZSBpbmZlcnJlciwgaXIuTm9kZSBsb29wKSB7CiAgICBfbG9jYWxzLmZvckVhY2hMb2NhbCgoTG9jYWwgdmFyaWFibGUsIFR5cGVJbmZvcm1hdGlvbiB0eXBlKSB7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiBuZXdUeXBlID0KICAgICAgICAgIGluZmVycmVyLnR5cGVzLmFsbG9jYXRlTG9vcFBoaShsb29wLCB2YXJpYWJsZSwgdHlwZSwgaXNUcnk6IGZhbHNlKTsKICAgICAgaWYgKG5ld1R5cGUgIT0gdHlwZSkgewogICAgICAgIF9sb2NhbHNbdmFyaWFibGVdID0gbmV3VHlwZTsKICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIGVuZExvb3AoSW5mZXJyZXJFbmdpbmUgaW5mZXJyZXIsIGlyLk5vZGUgbG9vcCkgewogICAgX2xvY2Fscy5mb3JFYWNoTG9jYWwoKExvY2FsIHZhcmlhYmxlLCBUeXBlSW5mb3JtYXRpb24gdHlwZSkgewogICAgICBUeXBlSW5mb3JtYXRpb24gbmV3VHlwZSA9CiAgICAgICAgICBpbmZlcnJlci50eXBlcy5zaW1wbGlmeVBoaShsb29wLCB2YXJpYWJsZSwgdHlwZSk7CiAgICAgIGlmIChuZXdUeXBlICE9IHR5cGUpIHsKICAgICAgICBfbG9jYWxzW3ZhcmlhYmxlXSA9IG5ld1R5cGU7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgU3RyaW5nIHRvU3RydWN0dXJlZFRleHQoU3RyaW5nIGluZGVudCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgX3RvU3RydWN0dXJlZFRleHQoc2IsIGluZGVudCk7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIHZvaWQgX3RvU3RydWN0dXJlZFRleHQoU3RyaW5nQnVmZmVyIHNiLCBTdHJpbmcgaW5kZW50KSB7CiAgICBzYi53cml0ZSgnTG9jYWxzSGFuZGxlcigkaGFzaENvZGUpIFsnKTsKICAgIHNiLndyaXRlKCdcbiR7aW5kZW50fSAgbG9jYWxzOicpOwogICAgX2xvY2Fscy5fdG9TdHJ1Y3R1cmVkVGV4dChzYiwgJyR7aW5kZW50fSAgICAnKTsKICAgIHNiLndyaXRlKCdcbl0nKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdMb2NhbHNIYW5kbGVyKCcpOwogICAgc2Iud3JpdGUoJ2xvY2Fscz0kX2xvY2FscycpOwogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQqCYwBOTjwBGAEtKCQhGhwfIAFDR0ZGMhYxBj0UASkBOR4BLRoBHgEfHxweLQE3HxwuQUIEATAsE0UjKB8mEzoBLyYBSwZNRjABTjQmFygpKCkdMA0TBgQBMBxHNwYTBAE8Gh01BiAEAVA9H0tCBAEgGzQgHh0rMyIbCgYnDgYaRA0OGSA0MgYEAUQlBAEhKSwEASsqIxoEATssLBpJBhxJBh0rPi08CgYaKDYGEwQBDBY/IQQCAT0hLBYBSzAVAR0fHgFILSsBSiQ9BAE+Hx44GgQBMTIEAUQYBAFMNkVQHwFNQCQjASo1AUI/JU4IAUhFEQQCATc+KiwpS0tNBAEZHxoBDDYBDE4BDEcBDBxEOjI+BhchNQgTBAEMTQFAAQwvGx0EAQwtOQQBDB9DBAIBRC4pIgEyMzABNC8BDDsBDBQ3EwYgHQQCATcWHwEzASo8AUFMATA/AT4bBAFKQxw3QEVEH0EePjgsJD40CEEPHQ0dBgQBUCsGTE8sSB9ADBghMDYMOCgvMDEuL0oiF0wIEQQBTjg6PCABIy8iPDwiIw9QCAYBRQwYITA7DDwjMVAMOCg0MDtJGQhJQSBBCBEEAT0GPkM/P0QGGB8LCQZFQ0YNBkMGDhsPCwkGRi8iQSQpSksZLEAuMSEuRA4aIzI6DjoqNjI6SjAkISswMSQhEUoKISMKCgZNPhkrOiQsRgoIBkceKjFQCBEEAUE7TRotQg4aIzI4DjoqNjI4SDEkIkIhGiQKCggUBAE6QiBOHSUICAQBOEIgPB0lCAgEASsqIxoEATssJjQVBAEMFiogIRMaBAIBMXBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL2xvY2Fsc19oYW5kbGVyLmRhcnQ3c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvbGlzdF90cmFjZXIuZGFydJPsLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgY29tcGlsZXIuc3JjLmluZmVycmVyLmxpc3RfdHJhY2VyOwoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCcgc2hvdyBTZXRsZXQ7CmltcG9ydCAnbm9kZV90cmFjZXIuZGFydCc7CmltcG9ydCAndHlwZV9ncmFwaF9ub2Rlcy5kYXJ0JzsKCi8vLyBBIHNldCBvZiBzZWxlY3RvciBuYW1lcyB0aGF0IFtMaXN0XSBpbXBsZW1lbnRzLCB0aGF0IHdlIGtub3cgZG8gbm90Ci8vLyBjaGFuZ2UgdGhlIGVsZW1lbnQgdHlwZSBvZiB0aGUgbGlzdCwgb3IgbGV0IHRoZSBsaXN0IGVzY2FwZSB0byBjb2RlCi8vLyB0aGF0IG1pZ2h0IGNoYW5nZSB0aGUgZWxlbWVudCB0eXBlLgpTZXQ8U3RyaW5nPiBva0xpc3RTZWxlY3RvcnNTZXQgPSBuZXcgU2V0PFN0cmluZz4uZnJvbShjb25zdCA8U3RyaW5nPlsKICAvLyBGcm9tIE9iamVjdC4KICAnPT0nLAogICdoYXNoQ29kZScsCiAgJ3RvU3RyaW5nJywKICAnbm9TdWNoTWV0aG9kJywKICAncnVudGltZVR5cGUnLAoKICAvLyBGcm9tIEl0ZXJhYmxlLgogICdpdGVyYXRvcicsCiAgJ21hcCcsCiAgJ3doZXJlJywKICAnZXhwYW5kJywKICAnY29udGFpbnMnLAogICdmb3JFYWNoJywKICAncmVkdWNlJywKICAnZm9sZCcsCiAgJ2V2ZXJ5JywKICAnam9pbicsCiAgJ2FueScsCiAgJ3RvTGlzdCcsCiAgJ3RvU2V0JywKICAnbGVuZ3RoJywKICAnaXNFbXB0eScsCiAgJ2lzTm90RW1wdHknLAogICd0YWtlJywKICAndGFrZVdoaWxlJywKICAnc2tpcCcsCiAgJ3NraXBXaGlsZScsCiAgJ2ZpcnN0JywKICAnbGFzdCcsCiAgJ3NpbmdsZScsCiAgJ2ZpcnN0V2hlcmUnLAogICdsYXN0V2hlcmUnLAogICdzaW5nbGVXaGVyZScsCiAgJ2VsZW1lbnRBdCcsCgogIC8vIEZyb20gTGlzdC4KICAnW10nLAogICdsZW5ndGgnLAogICdyZXZlcnNlZCcsCiAgJ3NvcnQnLAogICdpbmRleE9mJywKICAnbGFzdEluZGV4T2YnLAogICdjbGVhcicsCiAgJ3JlbW92ZScsCiAgJ3JlbW92ZUF0JywKICAncmVtb3ZlTGFzdCcsCiAgJ3JlbW92ZVdoZXJlJywKICAncmV0YWluV2hlcmUnLAogICdzdWJsaXN0JywKICAnZ2V0UmFuZ2UnLAogICdyZW1vdmVSYW5nZScsCiAgJ2FzTWFwJywKCiAgLy8gRnJvbSBKU0FycmF5LgogICdjaGVja011dGFibGUnLAogICdjaGVja0dyb3dhYmxlJywKXSk7CgpTZXQ8U3RyaW5nPiBkb05vdENoYW5nZUxlbmd0aFNlbGVjdG9yc1NldCA9IG5ldyBTZXQ8U3RyaW5nPi5mcm9tKGNvbnN0IDxTdHJpbmc+WwogIC8vIEZyb20gT2JqZWN0LgogICc9PScsCiAgJ2hhc2hDb2RlJywKICAndG9TdHJpbmcnLAogICdub1N1Y2hNZXRob2QnLAogICdydW50aW1lVHlwZScsCgogIC8vIEZyb20gSXRlcmFibGUuCiAgJ2l0ZXJhdG9yJywKICAnbWFwJywKICAnd2hlcmUnLAogICdleHBhbmQnLAogICdjb250YWlucycsCiAgJ2ZvckVhY2gnLAogICdyZWR1Y2UnLAogICdmb2xkJywKICAnZXZlcnknLAogICdqb2luJywKICAnYW55JywKICAndG9MaXN0JywKICAndG9TZXQnLAogICdsZW5ndGgnLAogICdpc0VtcHR5JywKICAnaXNOb3RFbXB0eScsCiAgJ3Rha2UnLAogICd0YWtlV2hpbGUnLAogICdza2lwJywKICAnc2tpcFdoaWxlJywKICAnZmlyc3QnLAogICdsYXN0JywKICAnc2luZ2xlJywKICAnZmlyc3RXaGVyZScsCiAgJ2xhc3RXaGVyZScsCiAgJ3NpbmdsZVdoZXJlJywKICAnZWxlbWVudEF0JywKCiAgLy8gRnJvbSBMaXN0LgogICdbXScsCiAgJ1tdPScsCiAgJ2xlbmd0aCcsCiAgJ3JldmVyc2VkJywKICAnc29ydCcsCiAgJ2luZGV4T2YnLAogICdsYXN0SW5kZXhPZicsCiAgJ3N1Ymxpc3QnLAogICdnZXRSYW5nZScsCiAgJ2FzTWFwJywKCiAgLy8gRnJvbSBKU0FycmF5LgogICdjaGVja011dGFibGUnLAogICdjaGVja0dyb3dhYmxlJywKXSk7CgpjbGFzcyBMaXN0VHJhY2VyVmlzaXRvciBleHRlbmRzIFRyYWNlclZpc2l0b3IgewogIC8vIFRoZSBbU2V0XSBvZiBmb3VuZCBhc3NpZ25tZW50cyB0byB0aGUgbGlzdC4KICBTZXQ8VHlwZUluZm9ybWF0aW9uPiBhc3NpZ25tZW50cyA9IG5ldyBTZXRsZXQ8VHlwZUluZm9ybWF0aW9uPigpOwogIGJvb2wgY2FsbHNHcm93YWJsZU1ldGhvZCA9IGZhbHNlOwoKICBMaXN0VHJhY2VyVmlzaXRvcih0cmFjZWRUeXBlLCBpbmZlcnJlcikgOiBzdXBlcih0cmFjZWRUeXBlLCBpbmZlcnJlcik7CgogIC8vLyBSZXR1cm5zIFt0cnVlXSBpZiB0aGUgYW5hbHlzaXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSwgW2ZhbHNlXSBpZiBpdAogIC8vLyBiYWlsZWQgb3V0LiBJbiB0aGUgZm9ybWVyIGNhc2UsIFthc3NpZ25tZW50c10gaG9sZHMgYSBsaXN0IG9mCiAgLy8vIFtUeXBlSW5mb3JtYXRpb25dIG5vZGVzIHRoYXQgZmxvdyBpbnRvIHRoZSBlbGVtZW50IHR5cGUgb2YgdGhpcyBsaXN0LgogIGJvb2wgcnVuKCkgewogICAgYW5hbHl6ZSgpOwogICAgTGlzdFR5cGVJbmZvcm1hdGlvbiBsaXN0ID0gdHJhY2VkVHlwZTsKICAgIGlmIChjb250aW51ZUFuYWx5emluZykgewogICAgICBpZiAoIWNhbGxzR3Jvd2FibGVNZXRob2QgJiYgbGlzdC5pbmZlcnJlZExlbmd0aCA9PSBudWxsKSB7CiAgICAgICAgbGlzdC5pbmZlcnJlZExlbmd0aCA9IGxpc3Qub3JpZ2luYWxMZW5ndGg7CiAgICAgIH0KICAgICAgbGlzdC5hZGRGbG93c0ludG9UYXJnZXRzKGZsb3dzSW50byk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgY2FsbHNHcm93YWJsZU1ldGhvZCA9IHRydWU7CiAgICAgIGFzc2lnbm1lbnRzID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oQ2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGJhaWxvdXQoJ1Bhc3NlZCB0byBhIGNsb3N1cmUnKTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oU3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgc3VwZXIudmlzaXRTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihpbmZvKTsKICAgIE1lbWJlckVudGl0eSBjYWxsZWQgPSBpbmZvLmNhbGxlZEVsZW1lbnQ7CiAgICBpZiAoaW5mZXJyZXIuY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMuaXNGb3JlaWduKGNhbGxlZCkgJiYKICAgICAgICBjYWxsZWQubmFtZSA9PSBJZGVudGlmaWVycy5KUykgewogICAgICBiYWlsb3V0KCdVc2VkIGluIEpTICR7aW5mby5kZWJ1Z05hbWV9Jyk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgc3VwZXIudmlzaXREeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IGluZm8uc2VsZWN0b3I7CiAgICBTdHJpbmcgc2VsZWN0b3JOYW1lID0gc2VsZWN0b3IubmFtZTsKICAgIGlmIChjdXJyZW50VXNlciA9PSBpbmZvLnJlY2VpdmVyKSB7CiAgICAgIGlmICghb2tMaXN0U2VsZWN0b3JzU2V0LmNvbnRhaW5zKHNlbGVjdG9yTmFtZSkpIHsKICAgICAgICBpZiAoc2VsZWN0b3IuaXNDYWxsKSB7CiAgICAgICAgICBpbnQgcG9zaXRpb25hbExlbmd0aCA9IGluZm8uYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoOwogICAgICAgICAgaWYgKHNlbGVjdG9yTmFtZSA9PSAnYWRkJykgewogICAgICAgICAgICBpZiAocG9zaXRpb25hbExlbmd0aCA9PSAxKSB7CiAgICAgICAgICAgICAgYXNzaWdubWVudHMuYWRkKGluZm8uYXJndW1lbnRzLnBvc2l0aW9uYWxbMF0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yTmFtZSA9PSAnaW5zZXJ0JykgewogICAgICAgICAgICBpZiAocG9zaXRpb25hbExlbmd0aCA9PSAyKSB7CiAgICAgICAgICAgICAgYXNzaWdubWVudHMuYWRkKGluZm8uYXJndW1lbnRzLnBvc2l0aW9uYWxbMV0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBiYWlsb3V0KCdVc2VkIGluIGEgbm90LW9rIHNlbGVjdG9yJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzSW5kZXhTZXQpIHsKICAgICAgICAgIGFzc2lnbm1lbnRzLmFkZChpbmZvLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzFdKTsKICAgICAgICB9IGVsc2UgaWYgKCFzZWxlY3Rvci5pc0luZGV4KSB7CiAgICAgICAgICBiYWlsb3V0KCdVc2VkIGluIGEgbm90LW9rIHNlbGVjdG9yJyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghZG9Ob3RDaGFuZ2VMZW5ndGhTZWxlY3RvcnNTZXQuY29udGFpbnMoc2VsZWN0b3JOYW1lKSkgewogICAgICAgIGNhbGxzR3Jvd2FibGVNZXRob2QgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChzZWxlY3Rvck5hbWUgPT0gJ2xlbmd0aCcgJiYgc2VsZWN0b3IuaXNTZXR0ZXIpIHsKICAgICAgICBjYWxsc0dyb3dhYmxlTWV0aG9kID0gdHJ1ZTsKICAgICAgICBhc3NpZ25tZW50cy5hZGQoaW5mZXJyZXIudHlwZXMubnVsbFR5cGUpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzQ2FsbCAmJgogICAgICAgIChpbmZvLmhhc0Nsb3N1cmVDYWxsVGFyZ2V0cyB8fAogICAgICAgICAgICBpbmZvLmNvbmNyZXRlVGFyZ2V0cy5hbnkoKGVsZW1lbnQpID0+ICFlbGVtZW50LmlzRnVuY3Rpb24pKSkgewogICAgICBiYWlsb3V0KCdQYXNzZWQgdG8gYSBjbG9zdXJlJyk7CiAgICAgIHJldHVybjsKICAgIH0KICB9Cn0KgNgATk48ASsBHyQyKBsgAUhIKEYSCA4OEhEBFA4JCwwODQwKCwoJDAsMDRAKDwoPCwoMEA8RDwEQCAwOCg0RCwwOEBERDQ4RCwETEhMEAVESCA4OEhEBFA4JCwwODQwKCwoJDAsMDRAKDwoPCwoMEA8RDwEQCAkMDgoNEQ0OCwETEhMEATAxRCQBSQFLREwPDysdQTMIKxMNIhoUBgQBDE0kBAEMSzQuQSkvBgQBDE01JykoOB9DJyk9DjEpPQ4TMhQMKjkoMBIKCEMkCDskMggiJ0smDgYEAgEucGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvbGlzdF90cmFjZXIuZGFydDZzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci9tYXBfdHJhY2VyLmRhcnSTHi8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGNvbXBpbGVyLnNyYy5pbmZlcnJlci5tYXBfdHJhY2VyOwoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICdub2RlX3RyYWNlci5kYXJ0JzsKaW1wb3J0ICd0eXBlX2dyYXBoX25vZGVzLmRhcnQnOwoKU2V0PFN0cmluZz4gb2tNYXBTZWxlY3RvcnNTZXQgPSBuZXcgU2V0LmZyb20oY29uc3QgPFN0cmluZz5bCiAgLy8gRnJvbSBPYmplY3QuCiAgIj09IiwKICAiaGFzaENvZGUiLAogICJ0b1N0cmluZyIsCiAgIm5vU3VjaE1ldGhvZCIsCiAgInJ1bnRpbWVUeXBlIiwKICAvLyBGcm9tIE1hcAogICJbXSIsCiAgImlzRW1wdHkiLAogICJpc05vdEVtcHR5IiwKICAia2V5cyIsCiAgImxlbmd0aCIsCiAgInZhbHVlcyIsCiAgImNsZWFyIiwKICAiY29udGFpbnNLZXkiLAogICJjb250YWluc1ZhbHVlIiwKICAiZm9yRWFjaCIsCiAgInJlbW92ZSIKXSk7CgpjbGFzcyBNYXBUcmFjZXJWaXNpdG9yIGV4dGVuZHMgVHJhY2VyVmlzaXRvciB7CiAgLy8gVGhlc2UgbGlzdHMgYXJlIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBuZXdseSBkaXNjb3ZlcmVkIGFzc2lnbm1lbnRzIHRvCiAgLy8gdGhlIG1hcC4gTm90ZSB0aGF0IGVsZW1lbnRzIGF0IGNvcnJlc3BvbmRpbmcgaW5kaWNlcyBhcmUgZXhwZWN0ZWQgdG8KICAvLyBiZWxvbmcgdG8gdGhlIHNhbWUgYXNzaWdubWVudCBvcGVyYXRpb24uCiAgTGlzdDxUeXBlSW5mb3JtYXRpb24+IGtleUFzc2lnbm1lbnRzID0gPFR5cGVJbmZvcm1hdGlvbj5bXTsKICBMaXN0PFR5cGVJbmZvcm1hdGlvbj4gdmFsdWVBc3NpZ25tZW50cyA9IDxUeXBlSW5mb3JtYXRpb24+W107CiAgLy8gVGhpcyBsaXN0IGlzIHVzZWQgdG8ga2VlcCB0cmFjayBvZiBhc3NpZ25tZW50cyBvZiBlbnRpcmUgbWFwcyB0bwogIC8vIHRoaXMgbWFwLgogIExpc3Q8TWFwVHlwZUluZm9ybWF0aW9uPiBtYXBBc3NpZ25tZW50cyA9IDxNYXBUeXBlSW5mb3JtYXRpb24+W107CgogIE1hcFRyYWNlclZpc2l0b3IodHJhY2VkVHlwZSwgaW5mZXJyZXIpIDogc3VwZXIodHJhY2VkVHlwZSwgaW5mZXJyZXIpOwoKICAvLy8gUmV0dXJucyBbdHJ1ZV0gaWYgdGhlIGFuYWx5c2lzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIFtmYWxzZV0KICAvLy8gaWYgaXQgYmFpbGVkIG91dC4gSW4gdGhlIGZvcm1lciBjYXNlLCBba2V5QXNzaWdubWVudHNdIGFuZAogIC8vLyBbdmFsdWVBc3NpZ25tZW50c10gaG9sZCBhIGxpc3Qgb2YgW1R5cGVJbmZvcm1hdGlvbl0gbm9kZXMgdGhhdAogIC8vLyBmbG93IGludG8gdGhlIGtleSBhbmQgdmFsdWUgdHlwZXMgb2YgdGhpcyBtYXAuCiAgYm9vbCBydW4oKSB7CiAgICBhbmFseXplKCk7CiAgICBNYXBUeXBlSW5mb3JtYXRpb24gbWFwID0gdHJhY2VkVHlwZTsKICAgIGlmIChjb250aW51ZUFuYWx5emluZykgewogICAgICBtYXAuYWRkRmxvd3NJbnRvVGFyZ2V0cyhmbG93c0ludG8pOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGtleUFzc2lnbm1lbnRzID0gdmFsdWVBc3NpZ25tZW50cyA9IG1hcEFzc2lnbm1lbnRzID0gbnVsbDsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIHZpc2l0Q2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uKENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBiYWlsb3V0KCdQYXNzZWQgdG8gYSBjbG9zdXJlJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIHN1cGVyLnZpc2l0U3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgICBNZW1iZXJFbnRpdHkgY2FsbGVkID0gaW5mby5jYWxsZWRFbGVtZW50OwogICAgaWYgKGluZmVycmVyLmNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmlzRm9yZWlnbihjYWxsZWQpICYmCiAgICAgICAgY2FsbGVkLm5hbWUgPT0gSWRlbnRpZmllcnMuSlMpIHsKICAgICAgYmFpbG91dCgnVXNlZCBpbiBKUyAke2luZm8uZGVidWdOYW1lfScpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXREeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIHN1cGVyLnZpc2l0RHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKGluZm8pOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBpbmZvLnNlbGVjdG9yOwogICAgU3RyaW5nIHNlbGVjdG9yTmFtZSA9IHNlbGVjdG9yLm5hbWU7CiAgICBpZiAoY3VycmVudFVzZXIgPT0gaW5mby5yZWNlaXZlcikgewogICAgICBpZiAoIW9rTWFwU2VsZWN0b3JzU2V0LmNvbnRhaW5zKHNlbGVjdG9yTmFtZSkpIHsKICAgICAgICBpZiAoc2VsZWN0b3IuaXNDYWxsKSB7CiAgICAgICAgICBpZiAoc2VsZWN0b3JOYW1lID09ICdhZGRBbGwnKSB7CiAgICAgICAgICAgIC8vIEFsbCBrZXlzIGFuZCB2YWx1ZXMgZnJvbSB0aGUgYXJndW1lbnQgZmxvdyBpbnRvCiAgICAgICAgICAgIC8vIHRoZSBtYXAuCiAgICAgICAgICAgIFR5cGVJbmZvcm1hdGlvbiBtYXAgPSBpbmZvLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzBdOwogICAgICAgICAgICBpZiAobWFwIGlzIE1hcFR5cGVJbmZvcm1hdGlvbikgewogICAgICAgICAgICAgIGluZmVycmVyLmFuYWx5emVNYXBBbmRFbnF1ZXVlKG1hcCk7CiAgICAgICAgICAgICAgbWFwQXNzaWdubWVudHMuYWRkKG1hcCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgLy8gSWYgd2UgY291bGQgc2VsZWN0IGEgY29tcG9uZW50IGZyb20gYSBbVHlwZUluZm9ybWF0aW9uXSwKICAgICAgICAgICAgICAvLyBsaWtlIHRoZSBrZXl0eXBlIG9yIHZhbHVldHlwZSBpbiB0aGlzIGNhc2UsIHdlIGNvdWxkCiAgICAgICAgICAgICAgLy8gcHJvcGFnYXRlIG1vcmUgaGVyZS4KICAgICAgICAgICAgICAvLyBUT0RPKGhlcmh1dCk6IGltcGxlbWVudCBzZWxlY3Rpb24gb24gW1R5cGVJbmZvcm1hdGlvbl0uCiAgICAgICAgICAgICAgYmFpbG91dCgnQWRkaW5nIG1hcCB3aXRoIHVua25vd24gdHlwZWluZm8gdG8gY3VycmVudCBtYXAnKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvck5hbWUgPT0gJ3B1dElmQWJzZW50JykgewogICAgICAgICAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYSBuZXcga2V5LCB0aGUgcmVzdWx0IHR5cGUgb2YKICAgICAgICAgICAgLy8gdGhlIHNlY29uZCBhcmd1bWVudCBiZWNvbWVzIGEgbmV3IHZhbHVlLgogICAgICAgICAgICAvLyBVbmZvcnR1bmF0ZWx5LCB0aGUgdHlwZSBpbmZvcm1hdGlvbiBkb2VzIG5vdAogICAgICAgICAgICAvLyBleHBsaWNpdGx5IHRyYWNrIHRoZSByZXR1cm4gdHlwZSwgeWV0LCBzbyB3ZSBoYXZlCiAgICAgICAgICAgIC8vIHRvIGdvIHRvIGR5bmFtaWMuCiAgICAgICAgICAgIC8vIFRPRE8oaGVyaHV0LDE2NTA3KTogVXNlIHJldHVybiB0eXBlIG9mIGNsb3N1cmUgaW4KICAgICAgICAgICAgLy8gTWFwLnB1dElmQWJzZW50LgogICAgICAgICAgICBrZXlBc3NpZ25tZW50cy5hZGQoaW5mby5hcmd1bWVudHMucG9zaXRpb25hbFswXSk7CiAgICAgICAgICAgIHZhbHVlQXNzaWdubWVudHMuYWRkKGluZmVycmVyLnR5cGVzLmR5bmFtaWNUeXBlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIEl0IHdvdWxkIGJlIG5pY2UgdG8gaGFuZGxlIFtNYXAua2V5c10gYW5kIFtNYXAudmFsdWVzXSwgdG9vLgogICAgICAgICAgICAvLyBIb3dldmVyLCBjdXJyZW50bHkgdGhvc2UgY2FsbHMgZG8gbm90IHRyaWdnZXIgdGhlIGNyZWF0aW9uCiAgICAgICAgICAgIC8vIG9mIGEgW0xpc3RUeXBlSW5mb3JtYXRpb25dLCBzbyBJIGhhdmUgbm93aGVyZSB0byBwcm9wYWdhdGUKICAgICAgICAgICAgLy8gdGhhdCBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgLy8gVE9ETyhoZXJodXQpOiBhZGQgc3VwcG9ydCBmb3IgTWFwLmtleXMgYW5kIE1hcC52YWx1ZXMuCiAgICAgICAgICAgIGJhaWxvdXQoJ01hcCB1c2VkIGluIGEgbm90LW9rIHNlbGVjdG9yIFskc2VsZWN0b3JOYW1lXScpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc0luZGV4U2V0KSB7CiAgICAgICAgICBrZXlBc3NpZ25tZW50cy5hZGQoaW5mby5hcmd1bWVudHMucG9zaXRpb25hbFswXSk7CiAgICAgICAgICB2YWx1ZUFzc2lnbm1lbnRzLmFkZChpbmZvLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzFdKTsKICAgICAgICB9IGVsc2UgaWYgKCFzZWxlY3Rvci5pc0luZGV4KSB7CiAgICAgICAgICBiYWlsb3V0KCdNYXAgdXNlZCBpbiBhIG5vdC1vayBzZWxlY3RvciBbJHNlbGVjdG9yTmFtZV0nKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNDYWxsICYmCiAgICAgICAgKGluZm8uaGFzQ2xvc3VyZUNhbGxUYXJnZXRzIHx8CiAgICAgICAgICAgIGluZm8uY29uY3JldGVUYXJnZXRzLmFueSgoZWxlbWVudCkgPT4gIWVsZW1lbnQuaXNGdW5jdGlvbikpKSB7CiAgICAgIGJhaWxvdXQoJ1Bhc3NlZCB0byBhIGNsb3N1cmUnKTsKICAgICAgcmV0dXJuOwogICAgfQogIH0KfQqAhgBOTjwBKgEfJDIbIAE9EggODhIRDggNEAoMDAsREw0LBAEvS0ouPkBGD0QBSAFFQUU1Dw8pHSoTBj8SBAEMTSQEAQxLNC5BKS8GBAEMTTUnKSg3Hyo/GEAtMicVSkYmSUoONkM4PEEhQSA+PhNMSkohRkYUDCo8PihEEgoIIidLJg4GBAIBLXBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL21hcF90cmFjZXIuZGFydDZzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci9zZXRfdHJhY2VyLmRhcnSNkS8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGNvbXBpbGVyLnNyYy5pbmZlcnJlci5zZXRfdHJhY2VyOwoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICdub2RlX3RyYWNlci5kYXJ0JzsKaW1wb3J0ICd0eXBlX2dyYXBoX25vZGVzLmRhcnQnOwoKLy8vIEEgc2V0IG9mIHNlbGVjdG9yIG5hbWVzIHRoYXQgW1NldF0gaW1wbGVtZW50cyBhbmQgd2hpY2ggd2Uga25vdyBkbyBub3QKLy8vIGNoYW5nZSB0aGUgZWxlbWVudCB0eXBlIG9mIHRoZSBzZXQgb3IgbGV0IHRoZSBzZXQgZXNjYXBlIHRvIGNvZGUgdGhhdCBtaWdodAovLy8gY2hhbmdlIHRoZSBlbGVtZW50IHR5cGUuClNldDxTdHJpbmc+IG9rU2V0U2VsZWN0b3JTZXQgPSBuZXcgU2V0PFN0cmluZz4uZnJvbShjb25zdCA8U3RyaW5nPlsKICAvLyBGcm9tIE9iamVjdC4KICAnPT0nLAogICdoYXNoQ29kZScsCiAgJ3RvU3RyaW5nJywKICAnbm9TdWNoTWV0aG9kJywKICAncnVudGltZVR5cGUnLAoKICAvLyBGcm9tIEl0ZXJhYmxlLgogICdpdGVyYXRvcicsCiAgJ21hcCcsCiAgJ3doZXJlJywKICAnZXhwYW5kJywKICAnY29udGFpbnMnLAogICdmb3JFYWNoJywKICAncmVkdWNlJywKICAnZm9sZCcsCiAgJ2V2ZXJ5JywKICAnam9pbicsCiAgJ2FueScsCiAgJ3RvTGlzdCcsCiAgJ3RvU2V0JywKICAnbGVuZ3RoJywKICAnaXNFbXB0eScsCiAgJ2lzTm90RW1wdHknLAogICd0YWtlJywKICAndGFrZVdoaWxlJywKICAnc2tpcCcsCiAgJ3NraXBXaGlsZScsCiAgJ2ZpcnN0JywKICAnbGFzdCcsCiAgJ3NpbmdsZScsCiAgJ2ZpcnN0V2hlcmUnLAogICdsYXN0V2hlcmUnLAogICdzaW5nbGVXaGVyZScsCiAgJ2VsZW1lbnRBdCcsCgogIC8vIEZyb20gU2V0LgogICdjbGVhcicsCiAgJ2NvbnRhaW5zQWxsJywKICAnZGlmZmVyZW5jZScsCiAgJ2ludGVyc2VjdGlvbicsCiAgJ2xvb2t1cCcsCiAgJ3JlbW92ZScsCiAgJ3JlbW92ZUFsbCcsCiAgJ3JlbW92ZVdoZXJlJywKICAncmV0YWluQWxsJywKICAncmV0YWluV2hlcmUnLAogICd1bmlvbicsCl0pOwoKY2xhc3MgU2V0VHJhY2VyVmlzaXRvciBleHRlbmRzIFRyYWNlclZpc2l0b3IgewogIExpc3Q8VHlwZUluZm9ybWF0aW9uPiBhc3NpZ25tZW50cyA9IDxUeXBlSW5mb3JtYXRpb24+W107CgogIFNldFRyYWNlclZpc2l0b3IodHJhY2VkVHlwZSwgaW5mZXJyZXIpIDogc3VwZXIodHJhY2VkVHlwZSwgaW5mZXJyZXIpOwoKICAvLy8gUmV0dXJucyBbdHJ1ZV0gaWYgdGhlIGFuYWx5c2lzIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHksIFtmYWxzZV0gaWYgaXQKICAvLy8gYmFpbGVkIG91dC4gSW4gdGhlIGZvcm1lciBjYXNlLCBbYXNzaWdubWVudHNdIGhvbGRzIGEgbGlzdCBvZgogIC8vLyBbVHlwZUluZm9ybWF0aW9uXSBub2RlcyB0aGF0IGZsb3cgaW50byB0aGUgZWxlbWVudCB0eXBlIG9mIHRoaXMgc2V0LgogIGJvb2wgcnVuKCkgewogICAgYW5hbHl6ZSgpOwogICAgU2V0VHlwZUluZm9ybWF0aW9uIHNldCA9IHRyYWNlZFR5cGU7CiAgICBpZiAoY29udGludWVBbmFseXppbmcpIHsKICAgICAgc2V0LmFkZEZsb3dzSW50b1RhcmdldHMoZmxvd3NJbnRvKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBhc3NpZ25tZW50cyA9IG51bGw7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYmFpbG91dCgnUGFzc2VkIHRvIGEgY2xvc3VyZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBzdXBlci52aXNpdFN0YXRpY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKGluZm8pOwogICAgTWVtYmVyRW50aXR5IGNhbGxlZCA9IGluZm8uY2FsbGVkRWxlbWVudDsKICAgIGlmIChpbmZlcnJlci5jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5pc0ZvcmVpZ24oY2FsbGVkKSAmJgogICAgICAgIGNhbGxlZC5uYW1lID09IElkZW50aWZpZXJzLkpTKSB7CiAgICAgIGJhaWxvdXQoJ1VzZWQgaW4gSlMgJHtpbmZvLmRlYnVnTmFtZX0nKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZpc2l0RHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBzdXBlci52aXNpdER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihpbmZvKTsKICAgIFNlbGVjdG9yIHNlbGVjdG9yID0gaW5mby5zZWxlY3RvcjsKICAgIFN0cmluZyBzZWxlY3Rvck5hbWUgPSBzZWxlY3Rvci5uYW1lOwogICAgaWYgKGN1cnJlbnRVc2VyID09IGluZm8ucmVjZWl2ZXIpIHsKICAgICAgaWYgKCFva1NldFNlbGVjdG9yU2V0LmNvbnRhaW5zKHNlbGVjdG9yTmFtZSkpIHsKICAgICAgICBpZiAoc2VsZWN0b3IuaXNDYWxsKSB7CiAgICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yTmFtZSkgewogICAgICAgICAgICBjYXNlICdhZGQnOgogICAgICAgICAgICAgIGFzc2lnbm1lbnRzLmFkZChpbmZvLmFyZ3VtZW50cy5wb3NpdGlvbmFsWzBdKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnYWRkQWxsJzoKICAgICAgICAgICAgICAvLyBUT0RPKGZpc2h5dGhlZmlzaCk6IEV4dHJhY3QgdHlwZSBhcmd1bWVudCBmcm9tIHR5cGUKICAgICAgICAgICAgICAvLyBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICBiYWlsb3V0KCdBZGRpbmcgaXRlcmFibGUgd2l0aCB1bmtub3duIHR5cGVpbmZvIHRvIGN1cnJlbnQgc2V0Jyk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgYmFpbG91dCgnU2V0IHVzZWQgaW4gYSBub3Qtb2sgc2VsZWN0b3IgWyRzZWxlY3Rvck5hbWVdJyk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgaWYgKHNlbGVjdG9yLmlzQ2FsbCAmJgogICAgICAgIChpbmZvLmhhc0Nsb3N1cmVDYWxsVGFyZ2V0cyB8fAogICAgICAgICAgICBpbmZvLmNvbmNyZXRlVGFyZ2V0cy5hbnkoKGVsZW1lbnQpID0+ICFlbGVtZW50LmlzRnVuY3Rpb24pKSkgewogICAgICBiYWlsb3V0KCdQYXNzZWQgdG8gYSBjbG9zdXJlJyk7CiAgICAgIHJldHVybjsKICAgIH0KICB9Cn0KgIUATk48ASoBHyQyGyABS1AdRBIIDg4SEQEUDgkLDA4NDAoLCgkMCwwNEAoPCg8LCgwQDxEPAQ8LERASDAwPEQ8RCwQBLzsBSAFLREsPDykdKhMGGBIEAQxNJAQBDEs0LkEpLwYEAQxNNScpKDYfIhg9FRtFHk8VFUgMEgoIIidLJg4GBAIBLXBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3NldF90cmFjZXIuZGFydDtzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci90eXBlX2dyYXBoX2R1bXAuZGFydLqvLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KbGlicmFyeSBkYXJ0MmpzLmluZmVycmVyLnR5cGVfZ3JhcGhfZHVtcDsKCmltcG9ydCAnLi4vLi4vY29tcGlsZXJfbmV3LmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0eV91dGlscy5kYXJ0JyBhcyB1dGlsczsKaW1wb3J0ICdhYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnaW5mZXJyZXJfZW5naW5lLmRhcnQnOwppbXBvcnQgJ3R5cGVfZ3JhcGhfbm9kZXMuZGFydCc7CmltcG9ydCAnZGVidWcuZGFydCc7CgovLy8gRHVtcHMgdGhlIHR5cGUgaW5mZXJlbmNlIGdyYXBoIGluIEdyYXBodml6IERvdCBmb3JtYXQgaW50byB0aGUgYHR5cGVncmFwaGAKLy8vIHN1YmZvbGRlciBvZiB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4gRWFjaCBmdW5jdGlvbiBib2R5IGlzIGR1bXBlZCBpbgovLy8gYSBzZXBhcmF0ZSBmaWxlLgovLy8KLy8vIFRoZSByZXN1bHRpbmcgLmRvdCBmaWxlcyBtdXN0IGJlIHByb2Nlc3NlZCB1c2luZyB0aGUgR3JhcGh2aXogYGRvdGAgY29tbWFuZCwKLy8vIHdoaWNoIGNhbiBiZSBvYnRhaW5lZCBmcm9tIGBodHRwOi8vd3d3LmdyYXBodml6Lm9yZ2AsIG9yIGluc3RhbGxlZCB1c2luZwovLy8gbW9zdCBwYWNrYWdlIG1hbmFnZXJzIChzZWFyY2ggZm9yIGBncmFwaHZpemAgb3IgYGRvdGApLgovLy8KLy8vIEV4YW1wbGUgY29tbWFuZHM6Ci8vLwovLy8gICAgIGRvdCAtVHBuZyAtTyB0eXBlZ3JhcGgvbWFpbi5kb3QKLy8vICAgICBvcGVuIHR5cGVncmFwaC9tYWluLmRvdC5wbmcKLy8vCi8vLyAgICAgZG90IC1UcG5nIC1PIHR5cGVncmFwaC9kYXJ0Ll9pbnRlcm5hbC5Tb3J0Ll9kdWFsUGl2b3RRdWlja3NvcnQuZG90Ci8vLyAgICAgb3BlbiB0eXBlZ3JhcGgvZGFydC5faW50ZXJuYWwuU29ydC5fZHVhbFBpdm90UXVpY2tzb3J0LmRvdC5wbmcKLy8vCmNsYXNzIFR5cGVHcmFwaER1bXAgewogIHN0YXRpYyBjb25zdCBTdHJpbmcgb3V0cHV0RGlyID0gJ3R5cGVncmFwaCc7CgogIGZpbmFsIENvbXBpbGVyT3V0cHV0IGNvbXBpbGVyT3V0cHV0OwogIGZpbmFsIEluZmVycmVyRW5naW5lIGluZmVycmVyOwogIGZpbmFsIE1hcDxUeXBlSW5mb3JtYXRpb24sIFNldDxUeXBlSW5mb3JtYXRpb24+PiBhc3NpZ25tZW50c0JlZm9yZUFuYWx5c2lzID0KICAgICAgPFR5cGVJbmZvcm1hdGlvbiwgU2V0PFR5cGVJbmZvcm1hdGlvbj4+e307CiAgZmluYWwgTWFwPFR5cGVJbmZvcm1hdGlvbiwgU2V0PFR5cGVJbmZvcm1hdGlvbj4+IGFzc2lnbm1lbnRzQmVmb3JlVHJhY2luZyA9CiAgICAgIDxUeXBlSW5mb3JtYXRpb24sIFNldDxUeXBlSW5mb3JtYXRpb24+Pnt9OwogIGZpbmFsIFNldDxTdHJpbmc+IHVzZWRGaWxlbmFtZXMgPSBuZXcgU2V0PFN0cmluZz4oKTsKCiAgVHlwZUdyYXBoRHVtcCh0aGlzLmNvbXBpbGVyT3V0cHV0LCB0aGlzLmluZmVycmVyKTsKCiAgLy8vIFRha2UgYSBjb3B5IG9mIHRoZSBhc3NpZ25tZW50IHNldCBmb3IgZWFjaCBub2RlLCBzaW5jZSB0aGF0IG1heSBjaGFuZ2UKICAvLy8gZHVyaW5nIHRoZSBhbmFseXNpcy4KICB2b2lkIGJlZm9yZUFuYWx5c2lzKCkgewogICAgZm9yIChUeXBlSW5mb3JtYXRpb24gbm9kZSBpbiBpbmZlcnJlci50eXBlcy5hbGxUeXBlcykgewogICAgICBTZXQ8VHlwZUluZm9ybWF0aW9uPiBjb3B5ID0gbm9kZS5hc3NpZ25tZW50cy50b1NldCgpOwogICAgICBpZiAoIWNvcHkuaXNFbXB0eSkgewogICAgICAgIGFzc2lnbm1lbnRzQmVmb3JlQW5hbHlzaXNbbm9kZV0gPSBjb3B5OwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gTGlrZSBbYmVmb3JlQW5hbHlzaXNdLCB0YWtlcyBhIGNvcHkgb2YgdGhlIGFzc2lnbm1lbnQgc2V0cy4KICB2b2lkIGJlZm9yZVRyYWNpbmcoKSB7CiAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiBub2RlIGluIGluZmVycmVyLnR5cGVzLmFsbFR5cGVzKSB7CiAgICAgIFNldDxUeXBlSW5mb3JtYXRpb24+IGNvcHkgPSBub2RlLmFzc2lnbm1lbnRzLnRvU2V0KCk7CiAgICAgIGlmICghY29weS5pc0VtcHR5KSB7CiAgICAgICAgYXNzaWdubWVudHNCZWZvcmVUcmFjaW5nW25vZGVdID0gY29weTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIER1bXBzIHRoZSBlbnRpcmUgZ3JhcGguCiAgdm9pZCBhZnRlckFuYWx5c2lzKCkgewogICAgLy8gR3JvdXAgYWxsIHRoZSB0eXBlIG5vZGVzIGJ5IHRoZWlyIGNvbnRleHQgbWVtYmVyLgogICAgTWFwPE1lbWJlckVudGl0eSwgTGlzdDxUeXBlSW5mb3JtYXRpb24+PiBub2RlcyA9CiAgICAgICAgPE1lbWJlckVudGl0eSwgTGlzdDxUeXBlSW5mb3JtYXRpb24+Pnt9OwogICAgZm9yIChUeXBlSW5mb3JtYXRpb24gbm9kZSBpbiBpbmZlcnJlci50eXBlcy5hbGxUeXBlcykgewogICAgICBpZiAobm9kZS5jb250ZXh0TWVtYmVyICE9IG51bGwpIHsKICAgICAgICBub2RlcwogICAgICAgICAgICAucHV0SWZBYnNlbnQobm9kZS5jb250ZXh0TWVtYmVyLCAoKSA9PiA8VHlwZUluZm9ybWF0aW9uPltdKQogICAgICAgICAgICAuYWRkKG5vZGUpOwogICAgICB9CiAgICB9CiAgICAvLyBQcmludCBldmVyeSBncm91cCBzZXBhcmF0ZWx5LgogICAgZm9yIChNZW1iZXJFbnRpdHkgZWxlbWVudCBpbiBub2Rlcy5rZXlzKSB7CiAgICAgIE91dHB1dFNpbmsgb3V0cHV0OwogICAgICB0cnkgewogICAgICAgIFN0cmluZyBuYW1lID0gZmlsZW5hbWVGcm9tRWxlbWVudChlbGVtZW50KTsKICAgICAgICBvdXRwdXQgPSBjb21waWxlck91dHB1dC5jcmVhdGVPdXRwdXRTaW5rKAogICAgICAgICAgICAnJG91dHB1dERpci8kbmFtZScsICdkb3QnLCBPdXRwdXRUeXBlLmRlYnVnKTsKICAgICAgICBfR3JhcGhHZW5lcmF0b3IgdmlzaXRvciA9IG5ldyBfR3JhcGhHZW5lcmF0b3IoCiAgICAgICAgICAgIHRoaXMsIGVsZW1lbnQsIG91dHB1dCwgaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRDb21wYWN0VGV4dCk7CiAgICAgICAgZm9yIChUeXBlSW5mb3JtYXRpb24gbm9kZSBpbiBub2Rlc1tlbGVtZW50XSkgewogICAgICAgICAgdmlzaXRvci52aXNpdChub2RlKTsKICAgICAgICB9CiAgICAgICAgdmlzaXRvci5hZGRNaXNzaW5nTm9kZXMoKTsKICAgICAgICB2aXNpdG9yLmZpbmlzaCgpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIGlmIChvdXRwdXQgIT0gbnVsbCkgewogICAgICAgICAgb3V0cHV0LmNsb3NlKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgZmlsZW5hbWUgKHdpdGhvdXQgZXh0ZW5zaW9uKSBpbiB3aGljaCB0byBkdW1wIHRoZSB0eXBlCiAgLy8vIGdyYXBoIGZvciBbZWxlbWVudF0uCiAgLy8vCiAgLy8vIFdpbGwgbmV2ZXIgcmV0dXJuIHRoZSBhIGdpdmVuIGZpbGVuYW1lIG1vcmUgdGhhbiBvbmNlLCBldmVuIGlmIGNhbGxlZCB3aXRoCiAgLy8vIHRoZSBzYW1lIGVsZW1lbnQuCiAgU3RyaW5nIGZpbGVuYW1lRnJvbUVsZW1lbnQoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIC8vIFRoZSB0b1N0cmluZyBtZXRob2Qgb2YgZWxlbWVudHMgaW5jbHVkZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIHVuc3VpdGFibGUKICAgIC8vIGZvciBVUklzIGFuZCBmaWxlIHN5c3RlbXMuCiAgICBMaXN0PFN0cmluZz4gcGFydHMgPSA8U3RyaW5nPltdOwogICAgcGFydHMuYWRkKGVsZW1lbnQubGlicmFyeS5jYW5vbmljYWxVcmkucGF0aFNlZ21lbnRzLmxhc3QpOwogICAgcGFydHMuYWRkKGVsZW1lbnQuZW5jbG9zaW5nQ2xhc3M/Lm5hbWUpOwogICAgaWYgKGVsZW1lbnQuaXNHZXR0ZXIpIHsKICAgICAgcGFydHMuYWRkKCdnZXQtJHtlbGVtZW50Lm5hbWV9Jyk7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNTZXR0ZXIpIHsKICAgICAgcGFydHMuYWRkKCdzZXQtJHtlbGVtZW50Lm5hbWV9Jyk7CiAgICB9IGVsc2UgaWYgKGVsZW1lbnQuaXNDb25zdHJ1Y3RvcikgewogICAgICBpZiAoZWxlbWVudC5uYW1lLmlzRW1wdHkpIHsKICAgICAgICBwYXJ0cy5hZGQoJy1jb25zdHJ1Y3RvcicpOwogICAgICB9IGVsc2UgewogICAgICAgIHBhcnRzLmFkZChlbGVtZW50Lm5hbWUpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBwYXJ0cy5hZGQoCiAgICAgICAgICB1dGlscy5vcGVyYXRvck5hbWVUb0lkZW50aWZpZXIoZWxlbWVudC5uYW1lKS5yZXBsYWNlQWxsKHInJCcsICctJykpOwogICAgfQogICAgU3RyaW5nIGZpbGVuYW1lID0gcGFydHMud2hlcmUoKHgpID0+IHggIT0gbnVsbCAmJiB4ICE9ICcnKS5qb2luKCcuJyk7CiAgICBpZiAodXNlZEZpbGVuYW1lcy5hZGQoZmlsZW5hbWUpKSByZXR1cm4gZmlsZW5hbWU7CiAgICAvLyBUaGUgZmlsZW5hbWUgaGFzIGFscmVhZHkgYmVlbiB1c2VkIGJ5IGFub3RoZXIgbWV0aG9kLiBBcHBlbmQgYSBzZXJpYWwKICAgIC8vIG51bWJlciB0byBlbnN1cmUgd2UgZG9uJ3Qgb3ZlcndyaXRlIGl0LgogICAgaW50IHNlcmlhbE51bWJlciA9IDI7CiAgICB3aGlsZSAoIXVzZWRGaWxlbmFtZXMuYWRkKCckZmlsZW5hbWUtJHNlcmlhbE51bWJlcicpKSB7CiAgICAgICsrc2VyaWFsTnVtYmVyOwogICAgfQogICAgcmV0dXJuICckZmlsZW5hbWUtJHNlcmlhbE51bWJlcic7CiAgfQp9CgovLy8gQnVpbGRzIHRoZSBHcmFwaHZpeiBEb3QgZmlsZSBmb3Igb25lIGZ1bmN0aW9uIGJvZHkuCmNsYXNzIF9HcmFwaEdlbmVyYXRvciBleHRlbmRzIFR5cGVJbmZvcm1hdGlvblZpc2l0b3IgewogIGZpbmFsIFR5cGVHcmFwaER1bXAgZ2xvYmFsOwogIGZpbmFsIFNldDxUeXBlSW5mb3JtYXRpb24+IHNlZW4gPSBuZXcgU2V0PFR5cGVJbmZvcm1hdGlvbj4oKTsKICBmaW5hbCBMaXN0PFR5cGVJbmZvcm1hdGlvbj4gd29ya2xpc3QgPSBuZXcgTGlzdDxUeXBlSW5mb3JtYXRpb24+KCk7CiAgZmluYWwgTWFwPFR5cGVJbmZvcm1hdGlvbiwgaW50PiBub2RlSWQgPSA8VHlwZUluZm9ybWF0aW9uLCBpbnQ+e307CiAgZmluYWwgU3RyaW5nIEZ1bmN0aW9uKEFic3RyYWN0VmFsdWUpIGZvcm1hdFR5cGU7CiAgaW50IHVzZWRJZHMgPSAwOwogIGZpbmFsIE91dHB1dFNpbmsgb3V0cHV0OwogIGZpbmFsIE1lbWJlckVudGl0eSBlbGVtZW50OwogIFR5cGVJbmZvcm1hdGlvbiByZXR1cm5WYWx1ZTsKCiAgX0dyYXBoR2VuZXJhdG9yKHRoaXMuZ2xvYmFsLCB0aGlzLmVsZW1lbnQsIHRoaXMub3V0cHV0LCB0aGlzLmZvcm1hdFR5cGUpIHsKICAgIHJldHVyblZhbHVlID0gZ2xvYmFsLmluZmVycmVyLnR5cGVzLmdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVsZW1lbnQpOwogICAgZ2V0Tm9kZShyZXR1cm5WYWx1ZSk7IC8vIEVuc3VyZSByZXR1cm4gdmFsdWUgaXMgcGFydCBvZiBncmFwaC4KICAgIGFwcGVuZCgnZGlncmFwaCB7Jyk7CiAgfQoKICB2b2lkIGZpbmlzaCgpIHsKICAgIGFwcGVuZCgnfScpOwogIH0KCiAgLy8vIEVuc3VyZXMgdGhhdCBhbGwgbm9kZXMgd2hpY2ggaGF2ZSBiZWVuIHJlZmVyZW5jZWQgYXJlIGdlbmVyYXRlZC4KICAvLy8KICAvLy8gU29tZXRpbWVzIGFuIGlucHV0IHRvIGEgVHlwZUluZm9ybWF0aW9uIG5vZGUgZG9lcyBub3QgYmVsb25nIHRvIHRoZSBzYW1lCiAgLy8vIGZ1bmN0aW9uIGJvZHksIGFuZCB0aGUgZ3JhcGggbG9va3MgY29uZnVzaW5nIGlmIHRoZXkgYXJlIG1pc3NpbmcuCiAgdm9pZCBhZGRNaXNzaW5nTm9kZXMoKSB7CiAgICB3aGlsZSAod29ya2xpc3QuaXNOb3RFbXB0eSkgewogICAgICBUeXBlSW5mb3JtYXRpb24gbm9kZSA9IHdvcmtsaXN0LnJlbW92ZUxhc3QoKTsKICAgICAgYXNzZXJ0KG5vZGVJZC5jb250YWluc0tleShub2RlKSk7CiAgICAgIHZpc2l0KG5vZGUpOwogICAgfQogIH0KCiAgdm9pZCB2aXNpdChUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgaWYgKHNlZW4uY29udGFpbnMoaW5mbykpIHJldHVybjsKICAgIGluZm8uYWNjZXB0KHRoaXMpOwogIH0KCiAgdm9pZCBhcHBlbmQoU3RyaW5nIHN0cmluZykgewogICAgb3V0cHV0Li5hZGQoc3RyaW5nKS4uYWRkKCdcbicpOwogIH0KCiAgU3RyaW5nIHNob3J0ZW4oU3RyaW5nIHRleHQpIHsKICAgIGlmICh0ZXh0Lmxlbmd0aCA+IDQwKSB7CiAgICAgIHJldHVybiB0ZXh0LnN1YnN0cmluZygwLCAxOSkgKyAnLi4uJyArIHRleHQuc3Vic3RyaW5nKHRleHQubGVuZ3RoIC0gMTgpOwogICAgfQogICAgcmV0dXJuIHRleHQ7CiAgfQoKICBpbnQgZ2V0RnJlc2hJZCgpID0+ICsrdXNlZElkczsKCiAgLy8vIE9idGFpbnMgYSB1bmlxdWUgSUQgZm9yIHRoZSBub2RlIHJlcHJlc2VudGluZyBbaW5mb10uCiAgU3RyaW5nIGdldE5vZGUoVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGludCBpZCA9IG5vZGVJZC5wdXRJZkFic2VudChpbmZvLCAoKSB7CiAgICAgIHdvcmtsaXN0LmFkZChpbmZvKTsgLy8gRW5zdXJlIHRoYXQgdGhlIHJlZmVyZW5jZWQgbm9kZSBpcyBnZW5lcmF0ZWQuCiAgICAgIHJldHVybiBnZXRGcmVzaElkKCk7CiAgICB9KTsKICAgIHJldHVybiAnJGlkJzsKICB9CgogIGZpbmFsIFJlZ0V4cCBlc2NhcGVSZWdleHAgPSBuZXcgUmVnRXhwKCdbInt9PD58XScpOwoKICAvLy8gRXNjYXBlcyBjaGFyYWN0ZXJzIGluIFt0ZXh0XSBzbyBpdCBjYW4gYmUgdXNlZCBhcyBwYXJ0IG9mIGEgbGFiZWwuCiAgU3RyaW5nIGVzY2FwZUxhYmVsKFN0cmluZyB0ZXh0KSB7CiAgICByZXR1cm4gdGV4dC5yZXBsYWNlQWxsTWFwcGVkKGVzY2FwZVJlZ2V4cCwgKG0pID0+ICdcXCR7bS5ncm91cCgwKX0nKTsKICB9CgogIC8vLyBDcmVhdGVzIGFuIGVkZ2UgZnJvbSBbc3JjXSB0byBbZHN0XS4KICAvLy8KICAvLy8gSWYgW2RzdF0gaXMgYSByZWNvcmQgdHlwZSBub2RlLCBbcG9ydF0gbWF5IHJlZmVyIHRvIG9uZSBvZiB0aGUgZmllbGRzCiAgLy8vIGRlZmluZWQgaW4gdGhhdCByZWNvcmQgKGUuZy4gYG9iamAsIGBhcmcwYCwgYGFyZzFgLCBldGMpCiAgdm9pZCBhZGRFZGdlKFR5cGVJbmZvcm1hdGlvbiBzcmMsIFR5cGVJbmZvcm1hdGlvbiBkc3QsCiAgICAgIHtTdHJpbmcgcG9ydCwgU3RyaW5nIGNvbG9yOiAnYmxhY2snfSkgewogICAgaWYgKGlzRXh0ZXJuYWwoc3JjKSAmJiBpc0V4dGVybmFsKGRzdCkpIHsKICAgICAgcmV0dXJuOyAvLyBEbyBub3QgYWRkIGVkZ2VzIGJldHdlZW4gZXh0ZXJuYWwgbm9kZXMuCiAgICB9CiAgICBTdHJpbmcgZHN0VGV4dCA9IGdldE5vZGUoZHN0KTsKICAgIGlmIChwb3J0ICE9IG51bGwpIHsKICAgICAgZHN0VGV4dCArPSAnOiRwb3J0JzsKICAgIH0KICAgIGlmIChzcmMgaXMgQ29uY3JldGVUeXBlSW5mb3JtYXRpb24pIHsKICAgICAgLy8gQ29uY3JldGUgdHlwZXMgY2FuIGhhdmUgYSBodWdlIG51bWJlciBvZiB1c2VzIHdoaWNoIHdpbGwgZmxvb2QgdGhlCiAgICAgIC8vIGdyYXBoIHdpdGggdmVyeSBsb25nIGhhcmQtdG8tZm9sbG93IGVkZ2VzLiBDb3B5IHRoZSBjb25jcmV0ZSBub2RlcwogICAgICAvLyBmb3IgZXZlcnkgdXNlIHRvIGVuaGFuY2UgcmVhZGFiaWxpdHkuCiAgICAgIGludCBpZCA9IGdldEZyZXNoSWQoKTsKICAgICAgU3RyaW5nIHR5cGUgPSBlc2NhcGVMYWJlbCgnJHtmb3JtYXRUeXBlKHNyYy50eXBlKX0nKTsKICAgICAgU3RyaW5nIHRleHQgPSAnQ29uY3JldGUnOwogICAgICBTdHJpbmcgbGFiZWwgPSAneyR0ZXh0fDxyZXR1cm5UeXBlPiAkdHlwZX0nOwogICAgICBhcHBlbmQoJyRpZCBbc2hhcGU9cmVjb3JkLHN0eWxlPWRvdHRlZCxsYWJlbD0iJGxhYmVsIl0nKTsKICAgICAgYXBwZW5kKCckaWQgLT4gJGRzdFRleHQgW2NvbG9yPSIkY29sb3IiXScpOwogICAgfSBlbHNlIHsKICAgICAgYXBwZW5kKCcke2dldE5vZGUoc3JjKX06cmV0dXJuVHlwZSAtPiAkZHN0VGV4dCBbY29sb3I9IiRjb2xvciJdJyk7CiAgICB9CiAgfQoKICAvLyBTb21lIGdyYXBocyBhcmUgZmxvb2RlZCBieSBhIGh1Z2UgbnVtYmVyIG9mIHBoaSBhbmQgbmFycm93IG5vZGVzLgogIC8vIFdlIGNvbG9yIHRoZSBub2RlcyBzbyB0aGUgImludGVyZXN0aW5nIiBub2RlcyBzdGFuZCBvdXQgbW9yZS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIGRlZmF1bHROb2RlQ29sb3IgPSAnI2VlZmZlZSc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBwaGlDb2xvciA9ICcjZWVmZmZmJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG5hcnJvd0NvbG9yID0gcGhpQ29sb3I7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBjYWxsQ29sb3IgPSAnI2ZmZmZlZSc7CgogIC8vIENvbG9ycyBmb3IgZWRnZXMgYmFzZWQgb24gd2hldGhlciB0aGV5IHdlcmUgYWRkZWQgb3IgcmVtb3ZlZCBkdXJpbmcgdGhlCiAgLy8gYW5hbHlzaXMuCiAgc3RhdGljIGNvbnN0IFN0cmluZyB1bmNoYW5nZWRFZGdlID0gJ2JsYWNrJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGFkZGVkRWRnZSA9ICdncmVlbjQnOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgcmVtb3ZlZEVkZ2UgPSAncmVkMyc7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB0ZW1wb3JhcnlFZGdlID0gJ29yYW5nZSc7IC8vIEFkZGVkIGFuZCB0aGVuIHJlbW92ZWQgYWdhaW4uCgogIGJvb2wgaXNFeHRlcm5hbChUeXBlSW5mb3JtYXRpb24gbm9kZSkgewogICAgcmV0dXJuIG5vZGUgIT0gcmV0dXJuVmFsdWUgJiYgbm9kZS5jb250ZXh0TWVtYmVyICE9IGVsZW1lbnQ7CiAgfQoKICBTdHJpbmcgZ2V0U3R5bGVGb3JOb2RlKFR5cGVJbmZvcm1hdGlvbiBub2RlLCBTdHJpbmcgY29sb3IpIHsKICAgIHJldHVybiBpc0V4dGVybmFsKG5vZGUpCiAgICAgICAgPyAnc3R5bGU9ZG90dGVkJwogICAgICAgIDogJ3N0eWxlPWZpbGxlZCxmaWxsY29sb3I9IiRjb2xvciInOwogIH0KCiAgLy8vIEFkZHMgZGV0YWlscyB0aGF0IGFyZSBub3Qgc3BlY2lmaWMgdG8gYSBzdWJjbGFzcyBvZiBbVHlwZUluZm9ybWF0aW9uXS4KICBTdHJpbmcgYXBwZW5kRGV0YWlscyhUeXBlSW5mb3JtYXRpb24gbm9kZSwgU3RyaW5nIHRleHQpIHsKICAgIGlmIChub2RlID09IHJldHVyblZhbHVlKSB7CiAgICAgIHJldHVybiAnJHRleHRcbihyZXR1cm4gdmFsdWUpJzsKICAgIH0KICAgIGlmIChub2RlLmNvbnRleHRNZW1iZXIgIT0gbnVsbCAmJiBub2RlLmNvbnRleHRNZW1iZXIgIT0gZWxlbWVudCkgewogICAgICByZXR1cm4gJyR0ZXh0XG4oZnJvbSAke25vZGUuY29udGV4dE1lbWJlcn0pJzsKICAgIH0KICAgIHJldHVybiB0ZXh0OwogIH0KCiAgLy8vIENyZWF0ZXMgYSBub2RlIGZvciBbbm9kZV0gZGlzcGxheWluZyB0aGUgZ2l2ZW4gW3RleHRdIGluIGl0cyBib3guCiAgLy8vCiAgLy8vIFtpbnB1dHNdIHNwZWNpZnkgbmFtZWQgaW5wdXRzIHRvIHRoZSBub2RlLiBJZiBvbWl0dGVkLCBlZGdlcyB3aWxsIGJlCiAgLy8vIGJhc2VkIG9uIFtub2RlLmFzc2lnbm1lbnRzXS4KICB2b2lkIGFkZE5vZGUoVHlwZUluZm9ybWF0aW9uIG5vZGUsIFN0cmluZyB0ZXh0LAogICAgICB7U3RyaW5nIGNvbG9yOiBkZWZhdWx0Tm9kZUNvbG9yLCBNYXA8U3RyaW5nLCBUeXBlSW5mb3JtYXRpb24+IGlucHV0c30pIHsKICAgIHNlZW4uYWRkKG5vZGUpOwogICAgU3RyaW5nIHN0eWxlID0gZ2V0U3R5bGVGb3JOb2RlKG5vZGUsIGNvbG9yKTsKICAgIHRleHQgPSBhcHBlbmREZXRhaWxzKG5vZGUsIHRleHQpOwogICAgdGV4dCA9IGVzY2FwZUxhYmVsKHRleHQpOwogICAgU3RyaW5nIGlkID0gZ2V0Tm9kZShub2RlKTsKICAgIFN0cmluZyByZXR1cm5UeXBlID0gZXNjYXBlTGFiZWwoZm9ybWF0VHlwZShub2RlLnR5cGUpKTsKICAgIGlmIChpbnB1dHMgIT0gbnVsbCkgewogICAgICBJdGVyYWJsZTxTdHJpbmc+IGtleXMgPSBpbnB1dHMua2V5cy53aGVyZSgoa2V5KSA9PiBpbnB1dHNba2V5XSAhPSBudWxsKTsKICAgICAgU3RyaW5nIGhlYWRlciA9IGtleXMubWFwKChrZXkpID0+ICc8YSRrZXk+ICRrZXknKS5qb2luKCd8Jyk7CiAgICAgIFN0cmluZyBsYWJlbCA9ICd7eyRoZWFkZXJ9fCR0ZXh0fDxyZXR1cm5UeXBlPiAkcmV0dXJuVHlwZX0nOwogICAgICBhcHBlbmQoJyRpZCBbc2hhcGU9cmVjb3JkLGxhYmVsPSIkbGFiZWwiLCRzdHlsZV0nKTsKICAgICAgZm9yIChTdHJpbmcga2V5IGluIGtleXMpIHsKICAgICAgICBhZGRFZGdlKGlucHV0c1trZXldLCBub2RlLCBwb3J0OiAnYSRrZXknKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgU3RyaW5nIGxhYmVsID0gJ3skdGV4dHw8cmV0dXJuVHlwZT4gJHJldHVyblR5cGV9JzsKICAgICAgYXBwZW5kKCckaWQgW3NoYXBlPXJlY29yZCxsYWJlbD0iJGxhYmVsIiwkc3R5bGVdJyk7CiAgICAgIC8vIEFkZCBhc3NpZ25tZW50IGVkZ2VzLiBDb2xvciB0aGUgZWRnZXMgYmFzZWQgb24gd2hldGhlciB0aGV5IHdlcmUKICAgICAgLy8gYWRkZWQsIHJlbW92ZWQsIHRlbXBvcmFyeSwgb3IgdW5jaGFuZ2VkLgogICAgICBkeW5hbWljIG9yaWdpbmFsU2V0ID0gZ2xvYmFsLmFzc2lnbm1lbnRzQmVmb3JlQW5hbHlzaXNbbm9kZV0gPz8gY29uc3QgW107CiAgICAgIHZhciB0cmFjZXJTZXQgPSBnbG9iYWwuYXNzaWdubWVudHNCZWZvcmVUcmFjaW5nW25vZGVdID8/IGNvbnN0IFtdOwogICAgICB2YXIgY3VycmVudFNldCA9IG5vZGUuYXNzaWdubWVudHMudG9TZXQoKTsKICAgICAgZm9yIChUeXBlSW5mb3JtYXRpb24gYXNzaWdubWVudCBpbiBjdXJyZW50U2V0KSB7CiAgICAgICAgU3RyaW5nIGNvbG9yID0KICAgICAgICAgICAgb3JpZ2luYWxTZXQuY29udGFpbnMoYXNzaWdubWVudCkgPyB1bmNoYW5nZWRFZGdlIDogYWRkZWRFZGdlOwogICAgICAgIGFkZEVkZ2UoYXNzaWdubWVudCwgbm9kZSwgY29sb3I6IGNvbG9yKTsKICAgICAgfQogICAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiBhc3NpZ25tZW50IGluIG9yaWdpbmFsU2V0KSB7CiAgICAgICAgaWYgKCFjdXJyZW50U2V0LmNvbnRhaW5zKGFzc2lnbm1lbnQpKSB7CiAgICAgICAgICBhZGRFZGdlKGFzc2lnbm1lbnQsIG5vZGUsIGNvbG9yOiByZW1vdmVkRWRnZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoVHlwZUluZm9ybWF0aW9uIGFzc2lnbm1lbnQgaW4gdHJhY2VyU2V0KSB7CiAgICAgICAgaWYgKCFjdXJyZW50U2V0LmNvbnRhaW5zKGFzc2lnbm1lbnQpICYmCiAgICAgICAgICAgICFvcmlnaW5hbFNldC5jb250YWlucyhhc3NpZ25tZW50KSkgewogICAgICAgICAgYWRkRWRnZShhc3NpZ25tZW50LCBub2RlLCBjb2xvcjogdGVtcG9yYXJ5RWRnZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoUFJJTlRfR1JBUEhfQUxMX05PREVTKSB7CiAgICAgIGZvciAoVHlwZUluZm9ybWF0aW9uIHVzZXIgaW4gbm9kZS51c2VycykgewogICAgICAgIGlmICghaXNFeHRlcm5hbCh1c2VyKSkgewogICAgICAgICAgdmlzaXQodXNlcik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TmFycm93VHlwZUluZm9ybWF0aW9uKE5hcnJvd1R5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICAvLyBPbWl0IHVudXNlZCBOYXJyb3dzLgogICAgaWYgKCFQUklOVF9HUkFQSF9BTExfTk9ERVMgJiYgaW5mby51c2Vycy5pc0VtcHR5KSByZXR1cm47CiAgICBhZGROb2RlKGluZm8sICdOYXJyb3dcbiR7Zm9ybWF0VHlwZShpbmZvLnR5cGVBbm5vdGF0aW9uKX0nLAogICAgICAgIGNvbG9yOiBuYXJyb3dDb2xvcik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbihQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIC8vIE9taXQgdW51c2VkIFBoaXMuCiAgICBpZiAoIVBSSU5UX0dSQVBIX0FMTF9OT0RFUyAmJiBpbmZvLnVzZXJzLmlzRW1wdHkpIHJldHVybjsKICAgIGFkZE5vZGUoaW5mbywgJ1BoaSAke2luZm8udmFyaWFibGU/Lm5hbWUgPz8gJyd9JywgY29sb3I6IHBoaUNvbG9yKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRFbGVtZW50SW5Db250YWluZXJUeXBlSW5mb3JtYXRpb24oCiAgICAgIEVsZW1lbnRJbkNvbnRhaW5lclR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROb2RlKGluZm8sICdFbGVtZW50SW5Db250YWluZXInKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRFbGVtZW50SW5TZXRUeXBlSW5mb3JtYXRpb24oRWxlbWVudEluU2V0VHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGFkZE5vZGUoaW5mbywgJ0VsZW1lbnRJblNldCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEtleUluTWFwVHlwZUluZm9ybWF0aW9uKEtleUluTWFwVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGFkZE5vZGUoaW5mbywgJ0tleUluTWFwJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFsdWVJbk1hcFR5cGVJbmZvcm1hdGlvbihWYWx1ZUluTWFwVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGFkZE5vZGUoaW5mbywgJ1ZhbHVlSW5NYXAnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRMaXN0VHlwZUluZm9ybWF0aW9uKExpc3RUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYWRkTm9kZShpbmZvLCAnTGlzdCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFNldFR5cGVJbmZvcm1hdGlvbihTZXRUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYWRkTm9kZShpbmZvLCAnU2V0Jyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TWFwVHlwZUluZm9ybWF0aW9uKE1hcFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROb2RlKGluZm8sICdNYXAnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbihDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBhZGROb2RlKGluZm8sICdDb25jcmV0ZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0xpdGVyYWxUeXBlSW5mb3JtYXRpb24oU3RyaW5nTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBTdHJpbmcgdGV4dCA9IHNob3J0ZW4oaW5mby52YWx1ZSkucmVwbGFjZUFsbCgnXG4nLCAnXFxuJyk7CiAgICBhZGROb2RlKGluZm8sICdTdHJpbmdMaXRlcmFsXG4iJHRleHQiJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm9vbExpdGVyYWxUeXBlSW5mb3JtYXRpb24oQm9vbExpdGVyYWxUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYWRkTm9kZShpbmZvLCAnQm9vbExpdGVyYWxcbiR7aW5mby52YWx1ZX0nKTsKICB9CgogIHZvaWQgaGFuZGxlQ2FsbChDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvLCBTdHJpbmcgdGV4dCwKICAgICAgTWFwPFN0cmluZywgVHlwZUluZm9ybWF0aW9uPiBpbnB1dHMpIHsKICAgIFN0cmluZyBzb3VyY2VDb2RlID0gc2hvcnRlbignJHtpbmZvLmRlYnVnTmFtZX0nKTsKICAgIHRleHQgPSAnJHRleHRcbiRzb3VyY2VDb2RlJzsKICAgIGlmIChpbmZvLmFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgaW5mby5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGg7ICsraSkgewogICAgICAgIGlucHV0c1snYXJnJGknXSA9IGluZm8uYXJndW1lbnRzLnBvc2l0aW9uYWxbaV07CiAgICAgIH0KICAgICAgZm9yIChTdHJpbmcgYXJnTmFtZSBpbiBpbmZvLmFyZ3VtZW50cy5uYW1lZC5rZXlzKSB7CiAgICAgICAgaW5wdXRzW2FyZ05hbWVdID0gaW5mby5hcmd1bWVudHMubmFtZWRbYXJnTmFtZV07CiAgICAgIH0KICAgIH0KICAgIGFkZE5vZGUoaW5mbywgdGV4dCwgY29sb3I6IGNhbGxDb2xvciwgaW5wdXRzOiBpbnB1dHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENsb3N1cmVDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbigKICAgICAgQ2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGhhbmRsZUNhbGwoaW5mbywgJ0Nsb3N1cmVDYWxsU2l0ZScsIHt9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBoYW5kbGVDYWxsKGluZm8sICdTdGF0aWNDYWxsU2l0ZScsIHt9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXREeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24oCiAgICAgIER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBoYW5kbGVDYWxsKGluZm8sICdEeW5hbWljQ2FsbFNpdGUnLCB7J29iaic6IGluZm8ucmVjZWl2ZXJ9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRNZW1iZXJUeXBlSW5mb3JtYXRpb24oTWVtYmVyVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGFkZE5vZGUoaW5mbywgJ01lbWJlclxuJHtpbmZvLmRlYnVnTmFtZX0nKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24oUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGFkZE5vZGUoaW5mbywgJ1BhcmFtZXRlciAke2luZm8uZGVidWdOYW1lfScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENsb3N1cmVUeXBlSW5mb3JtYXRpb24oQ2xvc3VyZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBTdHJpbmcgdGV4dCA9IHNob3J0ZW4oJyR7aW5mby5kZWJ1Z05hbWV9Jyk7CiAgICBhZGROb2RlKGluZm8sICdDbG9zdXJlXG4kdGV4dCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEF3YWl0VHlwZUluZm9ybWF0aW9uKEF3YWl0VHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIFN0cmluZyB0ZXh0ID0gc2hvcnRlbignJHtpbmZvLmRlYnVnTmFtZX0nKTsKICAgIGFkZE5vZGUoaW5mbywgJ0F3YWl0XG4kdGV4dCcpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFlpZWxkVHlwZUluZm9ybWF0aW9uKFlpZWxkVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIFN0cmluZyB0ZXh0ID0gc2hvcnRlbignJHtpbmZvLmRlYnVnTmFtZX0nKTsKICAgIGFkZE5vZGUoaW5mbywgJ1lpZWxkXG4kdGV4dCcpOwogIH0KfQqBwABOTjwqASIkMSUfIBUBT1AVBFFNPAQWBCgkBEtHBBYvASchTzFOMTcBNQFNGxo8PBswCAYEAUIZPDwbLwgGBAEeGTk1MTwoDkgYCAYlLxkMNDI6N1E3HwojGhIeGgoIBgQBSRsGURg1TiIlPy0cKCMoKCIjDyEIDRFPBko2TS8aPBYGJgQCATg3HkBGRTMTGx4fAU1KQxkEARIRBAFHBk9IGyI0KBMGBAElJRcEAR8kBAEgHE8GEQQBIQE8KStLGwgSBAE2AUkkSgQBKwZMPzkuLjoGIxgbBipMTC8dPCAzQDINSQYEAUdDNCwuLQFNDy8sLFEBKkEEAT8cGS0EAU08HyYGRzQGEQQBSAZLIzJPFDEmHh88Gk9DQzohMwgNOTpKMlBJMTcXSjEIODA5Cgg2MDE7CggGITEhFwoIBgQBDEAcPkAdBAEMSBk+SAQBDC8wKQQBDEwjBAEMRB8EAQxIIQQBDDwbBAEMOhoEAQw6GgQBDEQfBAEMTj8tBAEMSjEEAT0tNiEiQzgIOjkIBjsEAQwsLS0EAQxQLAQBDCwtQQQBDEAwBAEMRjIEAQxCMCUEAQw+MCMEAQw+MCMEAgEycGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZV9ncmFwaF9kdW1wLmRhcnQ3c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaW5mZXJyZXIvdHlwZV9zeXN0ZW0uZGFydMAAYeAvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnOwppbXBvcnQgJ2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICd0eXBlX2dyYXBoX25vZGVzLmRhcnQnOwoKLy8vIFN0cmF0ZWd5IGZvciBjcmVhdGluZyB0eXBlIGluZm9ybWF0aW9uIGZyb20gbWVtYmVycyBhbmQgcGFyYW1ldGVycyBhbmQgdHlwZQovLy8gaW5mb3JtYXRpb24gZm9yIG5vZGVzLgphYnN0cmFjdCBjbGFzcyBUeXBlU3lzdGVtU3RyYXRlZ3kgewogIC8vLyBDcmVhdGVzIFtNZW1iZXJUeXBlSW5mb3JtYXRpb25dIGZvciBbbWVtYmVyXS4KICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gY3JlYXRlTWVtYmVyVHlwZUluZm9ybWF0aW9uKAogICAgICBBYnN0cmFjdFZhbHVlRG9tYWluIGFic3RyYWN0VmFsdWVEb21haW4sIE1lbWJlckVudGl0eSBtZW1iZXIpOwoKICAvLy8gQ3JlYXRlcyBbUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uXSBmb3IgW3BhcmFtZXRlcl0uCiAgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uIGNyZWF0ZVBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbigKICAgICAgQWJzdHJhY3RWYWx1ZURvbWFpbiBhYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICBMb2NhbCBwYXJhbWV0ZXIsCiAgICAgIFR5cGVTeXN0ZW0gdHlwZXMpOwoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIHBhcmFtZXRlciBpbiBbZnVuY3Rpb25dLgogIHZvaWQgZm9yRWFjaFBhcmFtZXRlcihGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiwgdm9pZCBmKExvY2FsIHBhcmFtZXRlcikpOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIFtub2RlXSBpcyB2YWxpZCBhcyBhIGdlbmVyYWwgcGhpIG5vZGUuCiAgYm9vbCBjaGVja1BoaU5vZGUoaXIuTm9kZSBub2RlKTsKCiAgLy8vIFJldHVybnMgd2hldGhlciBbbm9kZV0gaXMgdmFsaWQgYXMgYSBsb29wIHBoaSBub2RlLgogIGJvb2wgY2hlY2tMb29wUGhpTm9kZShpci5Ob2RlIG5vZGUpOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIFtub2RlXSBpcyB2YWxpZCBhcyBhIGxpc3QgYWxsb2NhdGlvbiBub2RlLgogIGJvb2wgY2hlY2tMaXN0Tm9kZShpci5Ob2RlIG5vZGUpOwoKICAvLy8gUmV0dXJucyB3aGV0aGVyIFtub2RlXSBpcyB2YWxpZCBhcyBhIHNldCBhbGxvY2F0aW9uIG5vZGUuCiAgYm9vbCBjaGVja1NldE5vZGUoaXIuTm9kZSBub2RlKTsKCiAgLy8vIFJldHVybnMgd2hldGhlciBbbm9kZV0gaXMgdmFsaWQgYXMgYSBtYXAgYWxsb2NhdGlvbiBub2RlLgogIGJvb2wgY2hlY2tNYXBOb2RlKGlyLk5vZGUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgW2Nsc10gaXMgdmFsaWQgYXMgYSB0eXBlIG1hc2sgYmFzZSBjbGFzcy4KICBib29sIGNoZWNrQ2xhc3NFbnRpdHkoQ2xhc3NFbnRpdHkgY2xzKTsKfQoKLy8vIFRoZSBjbGFzcyBbU2ltcGxlSW5mZXJyZXJWaXNpdG9yXSB3aWxsIHVzZSB3aGVuIHdvcmtpbmcgb24gdHlwZXMuCmNsYXNzIFR5cGVTeXN0ZW0gewogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgVHlwZVN5c3RlbVN0cmF0ZWd5IHN0cmF0ZWd5OwoKICAvLy8gW3BhcmFtZXRlclR5cGVJbmZvcm1hdGlvbnNdIGFuZCBbbWVtYmVyVHlwZUluZm9ybWF0aW9uc10gb3JkZXJlZCBieQogIC8vLyBjcmVhdGlvbiB0aW1lLiBUaGlzIGlzIHVzZWQgYXMgdGhlIGluZmVyZW5jZSBlbnF1ZXVlaW5nIG9yZGVyLgogIGZpbmFsIExpc3Q8VHlwZUluZm9ybWF0aW9uPiBfb3JkZXJlZFR5cGVJbmZvcm1hdGlvbnMgPSA8VHlwZUluZm9ybWF0aW9uPltdOwoKICAvLy8gW1BhcmFtZXRlclR5cGVJbmZvcm1hdGlvbl1zIGZvciBwYXJhbWV0ZXJzLgogIGZpbmFsIE1hcDxMb2NhbCwgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uPiBwYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25zID0KICAgICAgbmV3IE1hcDxMb2NhbCwgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uPigpOwoKICAvLy8gW01lbWJlclR5cGVJbmZvcm1hdGlvbl1zIGZvciBtZW1iZXJzLgogIGZpbmFsIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclR5cGVJbmZvcm1hdGlvbj4gbWVtYmVyVHlwZUluZm9ybWF0aW9ucyA9CiAgICAgIG5ldyBNYXA8TWVtYmVyRW50aXR5LCBNZW1iZXJUeXBlSW5mb3JtYXRpb24+KCk7CgogIC8vLyBbTGlzdFR5cGVJbmZvcm1hdGlvbl0gZm9yIGFsbG9jYXRlZCBsaXN0cy4KICBmaW5hbCBNYXA8aXIuVHJlZU5vZGUsIExpc3RUeXBlSW5mb3JtYXRpb24+IGFsbG9jYXRlZExpc3RzID0KICAgICAgbmV3IE1hcDxpci5UcmVlTm9kZSwgTGlzdFR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgLy8vIFtTZXRUeXBlSW5mb3JtYXRpb25dIGZvciBhbGxvY2F0ZWQgU2V0cy4KICBmaW5hbCBNYXA8aXIuVHJlZU5vZGUsIFNldFR5cGVJbmZvcm1hdGlvbj4gYWxsb2NhdGVkU2V0cyA9CiAgICAgIG5ldyBNYXA8aXIuVHJlZU5vZGUsIFNldFR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgLy8vIFtNYXBUeXBlSW5mb3JtYXRpb25dIGZvciBhbGxvY2F0ZWQgTWFwcy4KICBmaW5hbCBNYXA8aXIuVHJlZU5vZGUsIFR5cGVJbmZvcm1hdGlvbj4gYWxsb2NhdGVkTWFwcyA9CiAgICAgIG5ldyBNYXA8aXIuVHJlZU5vZGUsIFR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgLy8vIENsb3N1cmVzIGZvdW5kIGR1cmluZyB0aGUgYW5hbHlzaXMuCiAgZmluYWwgU2V0PFR5cGVJbmZvcm1hdGlvbj4gYWxsb2NhdGVkQ2xvc3VyZXMgPSBuZXcgU2V0PFR5cGVJbmZvcm1hdGlvbj4oKTsKCiAgLy8vIENhY2hlIG9mIFtDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbl0uCiAgZmluYWwgTWFwPEFic3RyYWN0VmFsdWUsIFR5cGVJbmZvcm1hdGlvbj4gY29uY3JldGVUeXBlcyA9CiAgICAgIG5ldyBNYXA8QWJzdHJhY3RWYWx1ZSwgVHlwZUluZm9ybWF0aW9uPigpOwoKICAvLy8gTGlzdCBvZiBbVHlwZUluZm9ybWF0aW9uXXMgZm9yIGNhbGxzIGluc2lkZSBtZXRob2QgYm9kaWVzLgogIGZpbmFsIExpc3Q8Q2FsbFNpdGVUeXBlSW5mb3JtYXRpb24+IGFsbG9jYXRlZENhbGxzID0KICAgICAgPENhbGxTaXRlVHlwZUluZm9ybWF0aW9uPltdOwoKICAvLy8gTGlzdCBvZiBbVHlwZUluZm9ybWF0aW9uXXMgYWxsb2NhdGVkIGluc2lkZSBtZXRob2QgYm9kaWVzIChuYXJyb3dpbmcsCiAgLy8vIHBoaXMsIGFuZCBjb250YWluZXJzKS4KICBmaW5hbCBMaXN0PFR5cGVJbmZvcm1hdGlvbj4gYWxsb2NhdGVkVHlwZXMgPSA8VHlwZUluZm9ybWF0aW9uPltdOwoKICAvLy8gW3BhcmFtZXRlclR5cGVJbmZvcm1hdGlvbnNdIGFuZCBbbWVtYmVyVHlwZUluZm9ybWF0aW9uc10gb3JkZXJlZCBieQogIC8vLyBjcmVhdGlvbiB0aW1lLiBUaGlzIGlzIHVzZWQgYXMgdGhlIGluZmVyZW5jZSBlbnF1ZXVlaW5nIG9yZGVyLgogIEl0ZXJhYmxlPFR5cGVJbmZvcm1hdGlvbj4gZ2V0IG9yZGVyZWRUeXBlSW5mb3JtYXRpb25zID0+CiAgICAgIF9vcmRlcmVkVHlwZUluZm9ybWF0aW9uczsKCiAgSXRlcmFibGU8VHlwZUluZm9ybWF0aW9uPiBnZXQgYWxsVHlwZXMgPT4gWwogICAgICAgIHBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbnMudmFsdWVzLAogICAgICAgIG1lbWJlclR5cGVJbmZvcm1hdGlvbnMudmFsdWVzLAogICAgICAgIGFsbG9jYXRlZExpc3RzLnZhbHVlcywKICAgICAgICBhbGxvY2F0ZWRTZXRzLnZhbHVlcywKICAgICAgICBhbGxvY2F0ZWRNYXBzLnZhbHVlcywKICAgICAgICBhbGxvY2F0ZWRDbG9zdXJlcywKICAgICAgICBjb25jcmV0ZVR5cGVzLnZhbHVlcywKICAgICAgICBhbGxvY2F0ZWRDYWxscywKICAgICAgICBhbGxvY2F0ZWRUeXBlcwogICAgICBdLmV4cGFuZCgoeCkgPT4geCk7CgogIFR5cGVTeXN0ZW0odGhpcy5fY2xvc2VkV29ybGQsIHRoaXMuc3RyYXRlZ3kpIHsKICAgIG5vbk51bGxFbXB0eVR5cGUgPSBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlKTsKICB9CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIF9jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICAvLy8gVXNlZCB0byBncm91cCBbVHlwZUluZm9ybWF0aW9uXSBub2RlcyBieSB0aGUgZWxlbWVudCB0aGF0IHRyaWdnZXJlZCB0aGVpcgogIC8vLyBjcmVhdGlvbi4KICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gX2N1cnJlbnRNZW1iZXIgPSBudWxsOwogIE1lbWJlclR5cGVJbmZvcm1hdGlvbiBnZXQgY3VycmVudE1lbWJlciA9PiBfY3VycmVudE1lbWJlcjsKCiAgdm9pZCB3aXRoTWVtYmVyKE1lbWJlckVudGl0eSBlbGVtZW50LCB2b2lkIGFjdGlvbigpKSB7CiAgICBhc3NlcnQoX2N1cnJlbnRNZW1iZXIgPT0gbnVsbCwKICAgICAgICBmYWlsZWRBdChlbGVtZW50LCAiQWxyZWFkeSBjb25zdHJ1Y3RpbmcgZ3JhcGggZm9yICRfY3VycmVudE1lbWJlci4iKSk7CiAgICBfY3VycmVudE1lbWJlciA9IGdldEluZmVycmVkVHlwZU9mTWVtYmVyKGVsZW1lbnQpOwogICAgYWN0aW9uKCk7CiAgICBfY3VycmVudE1lbWJlciA9IG51bGw7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gbnVsbFR5cGVDYWNoZTsKICBUeXBlSW5mb3JtYXRpb24gZ2V0IG51bGxUeXBlIHsKICAgIGlmIChudWxsVHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBudWxsVHlwZUNhY2hlOwogICAgcmV0dXJuIG51bGxUeXBlQ2FjaGUgPSBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4ubnVsbFR5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGludFR5cGVDYWNoZTsKICBUeXBlSW5mb3JtYXRpb24gZ2V0IGludFR5cGUgewogICAgaWYgKGludFR5cGVDYWNoZSAhPSBudWxsKSByZXR1cm4gaW50VHlwZUNhY2hlOwogICAgcmV0dXJuIGludFR5cGVDYWNoZSA9IGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiB1aW50MzJUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCB1aW50MzJUeXBlIHsKICAgIGlmICh1aW50MzJUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIHVpbnQzMlR5cGVDYWNoZTsKICAgIHJldHVybiB1aW50MzJUeXBlQ2FjaGUgPQogICAgICAgIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi51aW50MzJUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiB1aW50MzFUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCB1aW50MzFUeXBlIHsKICAgIGlmICh1aW50MzFUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIHVpbnQzMVR5cGVDYWNoZTsKICAgIHJldHVybiB1aW50MzFUeXBlQ2FjaGUgPQogICAgICAgIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi51aW50MzFUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBwb3NpdGl2ZUludFR5cGVDYWNoZTsKICBUeXBlSW5mb3JtYXRpb24gZ2V0IHBvc2l0aXZlSW50VHlwZSB7CiAgICBpZiAocG9zaXRpdmVJbnRUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIHBvc2l0aXZlSW50VHlwZUNhY2hlOwogICAgcmV0dXJuIHBvc2l0aXZlSW50VHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4ucG9zaXRpdmVJbnRUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBkb3VibGVUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBkb3VibGVUeXBlIHsKICAgIGlmIChkb3VibGVUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGRvdWJsZVR5cGVDYWNoZTsKICAgIHJldHVybiBkb3VibGVUeXBlQ2FjaGUgPQogICAgICAgIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5kb3VibGVUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBudW1UeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBudW1UeXBlIHsKICAgIGlmIChudW1UeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIG51bVR5cGVDYWNoZTsKICAgIHJldHVybiBudW1UeXBlQ2FjaGUgPSBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4ubnVtVHlwZSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gYm9vbFR5cGVDYWNoZTsKICBUeXBlSW5mb3JtYXRpb24gZ2V0IGJvb2xUeXBlIHsKICAgIGlmIChib29sVHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBib29sVHlwZUNhY2hlOwogICAgcmV0dXJuIGJvb2xUeXBlQ2FjaGUgPSBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGZ1bmN0aW9uVHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgZnVuY3Rpb25UeXBlIHsKICAgIGlmIChmdW5jdGlvblR5cGVDYWNoZSAhPSBudWxsKSByZXR1cm4gZnVuY3Rpb25UeXBlQ2FjaGU7CiAgICByZXR1cm4gZnVuY3Rpb25UeXBlQ2FjaGUgPQogICAgICAgIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5mdW5jdGlvblR5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGxpc3RUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBsaXN0VHlwZSB7CiAgICBpZiAobGlzdFR5cGVDYWNoZSAhPSBudWxsKSByZXR1cm4gbGlzdFR5cGVDYWNoZTsKICAgIHJldHVybiBsaXN0VHlwZUNhY2hlID0gZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLmxpc3RUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBjb25zdExpc3RUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBjb25zdExpc3RUeXBlIHsKICAgIGlmIChjb25zdExpc3RUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGNvbnN0TGlzdFR5cGVDYWNoZTsKICAgIHJldHVybiBjb25zdExpc3RUeXBlQ2FjaGUgPQogICAgICAgIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5jb25zdExpc3RUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBmaXhlZExpc3RUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBmaXhlZExpc3RUeXBlIHsKICAgIGlmIChmaXhlZExpc3RUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGZpeGVkTGlzdFR5cGVDYWNoZTsKICAgIHJldHVybiBmaXhlZExpc3RUeXBlQ2FjaGUgPQogICAgICAgIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5maXhlZExpc3RUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBncm93YWJsZUxpc3RUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBncm93YWJsZUxpc3RUeXBlIHsKICAgIGlmIChncm93YWJsZUxpc3RUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGdyb3dhYmxlTGlzdFR5cGVDYWNoZTsKICAgIHJldHVybiBncm93YWJsZUxpc3RUeXBlQ2FjaGUgPQogICAgICAgIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5ncm93YWJsZUxpc3RUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBzZXRUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBzZXRUeXBlID0+CiAgICAgIHNldFR5cGVDYWNoZSA/Pz0gZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLnNldFR5cGUpOwoKICBUeXBlSW5mb3JtYXRpb24gY29uc3RTZXRUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBjb25zdFNldFR5cGUgPT4gY29uc3RTZXRUeXBlQ2FjaGUgPz89CiAgICAgIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5jb25zdFNldFR5cGUpOwoKICBUeXBlSW5mb3JtYXRpb24gbWFwVHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgbWFwVHlwZSB7CiAgICBpZiAobWFwVHlwZUNhY2hlICE9IG51bGwpIHJldHVybiBtYXBUeXBlQ2FjaGU7CiAgICByZXR1cm4gbWFwVHlwZUNhY2hlID0gZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLm1hcFR5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGNvbnN0TWFwVHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgY29uc3RNYXBUeXBlIHsKICAgIGlmIChjb25zdE1hcFR5cGVDYWNoZSAhPSBudWxsKSByZXR1cm4gY29uc3RNYXBUeXBlQ2FjaGU7CiAgICByZXR1cm4gY29uc3RNYXBUeXBlQ2FjaGUgPQogICAgICAgIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5jb25zdE1hcFR5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIHN0cmluZ1R5cGVDYWNoZTsKICBUeXBlSW5mb3JtYXRpb24gZ2V0IHN0cmluZ1R5cGUgewogICAgaWYgKHN0cmluZ1R5cGVDYWNoZSAhPSBudWxsKSByZXR1cm4gc3RyaW5nVHlwZUNhY2hlOwogICAgcmV0dXJuIHN0cmluZ1R5cGVDYWNoZSA9CiAgICAgICAgZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLnN0cmluZ1R5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIHR5cGVUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCB0eXBlVHlwZSB7CiAgICBpZiAodHlwZVR5cGVDYWNoZSAhPSBudWxsKSByZXR1cm4gdHlwZVR5cGVDYWNoZTsKICAgIHJldHVybiB0eXBlVHlwZUNhY2hlID0gZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLnR5cGVUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBkeW5hbWljVHlwZUNhY2hlOwogIFR5cGVJbmZvcm1hdGlvbiBnZXQgZHluYW1pY1R5cGUgewogICAgaWYgKGR5bmFtaWNUeXBlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIGR5bmFtaWNUeXBlQ2FjaGU7CiAgICByZXR1cm4gZHluYW1pY1R5cGVDYWNoZSA9CiAgICAgICAgZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBhc3luY0Z1dHVyZVR5cGVDYWNoZTsKICAvLyBTdWJ0eXBlIG9mIEZ1dHVyZSByZXR1cm5lZCBieSBhc3luYyBtZXRob2RzLgogIFR5cGVJbmZvcm1hdGlvbiBnZXQgYXN5bmNGdXR1cmVUeXBlIHsKICAgIGlmIChhc3luY0Z1dHVyZVR5cGVDYWNoZSAhPSBudWxsKSByZXR1cm4gYXN5bmNGdXR1cmVUeXBlQ2FjaGU7CiAgICByZXR1cm4gYXN5bmNGdXR1cmVUeXBlQ2FjaGUgPQogICAgICAgIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5hc3luY0Z1dHVyZVR5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIHN5bmNTdGFySXRlcmFibGVUeXBlQ2FjaGU7CiAgVHlwZUluZm9ybWF0aW9uIGdldCBzeW5jU3Rhckl0ZXJhYmxlVHlwZSB7CiAgICBpZiAoc3luY1N0YXJJdGVyYWJsZVR5cGVDYWNoZSAhPSBudWxsKSByZXR1cm4gc3luY1N0YXJJdGVyYWJsZVR5cGVDYWNoZTsKICAgIHJldHVybiBzeW5jU3Rhckl0ZXJhYmxlVHlwZUNhY2hlID0KICAgICAgICBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uc3luY1N0YXJJdGVyYWJsZVR5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGFzeW5jU3RhclN0cmVhbVR5cGVDYWNoZTsKICBUeXBlSW5mb3JtYXRpb24gZ2V0IGFzeW5jU3RhclN0cmVhbVR5cGUgewogICAgaWYgKGFzeW5jU3RhclN0cmVhbVR5cGVDYWNoZSAhPSBudWxsKSByZXR1cm4gYXN5bmNTdGFyU3RyZWFtVHlwZUNhY2hlOwogICAgcmV0dXJuIGFzeW5jU3RhclN0cmVhbVR5cGVDYWNoZSA9CiAgICAgICAgZ2V0Q29uY3JldGVUeXBlRm9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLmFzeW5jU3RhclN0cmVhbVR5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIG5vbk51bGxFbXB0eVR5cGU7CgogIFR5cGVJbmZvcm1hdGlvbiBzdHJpbmdMaXRlcmFsVHlwZShTdHJpbmcgdmFsdWUpIHsKICAgIHJldHVybiBuZXcgU3RyaW5nTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgdmFsdWUsIF9hYnN0cmFjdFZhbHVlRG9tYWluLnN0cmluZ1R5cGUpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIGJvb2xMaXRlcmFsVHlwZShib29sIHZhbHVlKSB7CiAgICByZXR1cm4gbmV3IEJvb2xMaXRlcmFsVHlwZUluZm9ybWF0aW9uKAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLCB2YWx1ZSwgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIGxlYXN0IHVwcGVyIGJvdW5kIGJldHdlZW4gW2ZpcnN0VHlwZV0gYW5kCiAgLy8vIFtzZWNvbmRUeXBlXS4KICBUeXBlSW5mb3JtYXRpb24gY29tcHV0ZUxVQigKICAgICAgVHlwZUluZm9ybWF0aW9uIGZpcnN0VHlwZSwgVHlwZUluZm9ybWF0aW9uIHNlY29uZFR5cGUpIHsKICAgIGlmIChmaXJzdFR5cGUgPT0gbnVsbCkgcmV0dXJuIHNlY29uZFR5cGU7CiAgICBpZiAoZmlyc3RUeXBlID09IHNlY29uZFR5cGUpIHJldHVybiBmaXJzdFR5cGU7CiAgICBpZiAoZmlyc3RUeXBlID09IG5vbk51bGxFbXB0eVR5cGUpIHJldHVybiBzZWNvbmRUeXBlOwogICAgaWYgKHNlY29uZFR5cGUgPT0gbm9uTnVsbEVtcHR5VHlwZSkgcmV0dXJuIGZpcnN0VHlwZTsKICAgIGlmIChmaXJzdFR5cGUgPT0gZHluYW1pY1R5cGUgfHwgc2Vjb25kVHlwZSA9PSBkeW5hbWljVHlwZSkgewogICAgICByZXR1cm4gZHluYW1pY1R5cGU7CiAgICB9CiAgICByZXR1cm4gZ2V0Q29uY3JldGVUeXBlRm9yKAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLnVuaW9uKGZpcnN0VHlwZS50eXBlLCBzZWNvbmRUeXBlLnR5cGUpKTsKICB9CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBgc2VsZWN0b3JgIHNob3VsZCBiZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIG5ldwogIC8vLyBgcmVjZWl2ZXJUeXBlYC4KICBib29sIHNlbGVjdG9yTmVlZHNVcGRhdGUoVHlwZUluZm9ybWF0aW9uIGluZm8sIEFic3RyYWN0VmFsdWUgbWFzaykgewogICAgcmV0dXJuIGluZm8udHlwZSAhPSBtYXNrOwogIH0KCiAgYm9vbCBfaXNOb25OdWxsTmFycm93KFR5cGVJbmZvcm1hdGlvbiB0eXBlKSA9PgogICAgICB0eXBlIGlzIE5hcnJvd1R5cGVJbmZvcm1hdGlvbiAmJgogICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwodHlwZS50eXBlQW5ub3RhdGlvbikuaXNEZWZpbml0ZWx5RmFsc2U7CgogIC8vLyBSZXR1cm5zIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiBbdHlwZV0gYW5kIFthbm5vdGF0aW9uXS4KICAvLy8gW2lzTnVsbGFibGVdIGluZGljYXRlcyB3aGV0aGVyIHRoZSBhbm5vdGF0aW9uIGltcGxpZXMgYSBudWxsCiAgLy8vIHR5cGUuCiAgVHlwZUluZm9ybWF0aW9uIG5hcnJvd1R5cGUoVHlwZUluZm9ybWF0aW9uIHR5cGUsIERhcnRUeXBlIGFubm90YXRpb24sCiAgICAgIHtib29sIGlzTnVsbGFibGU6IHRydWV9KSB7CiAgICBBYnN0cmFjdFZhbHVlIG90aGVyVHlwZTsKICAgIGlmIChhbm5vdGF0aW9uLmlzVm9pZCkgcmV0dXJuIHR5cGU7CiAgICBpZiAoYW5ub3RhdGlvbi50cmVhdEFzRHluYW1pYykgewogICAgICBpZiAoaXNOdWxsYWJsZSkgcmV0dXJuIHR5cGU7CiAgICAgIC8vIElmIHRoZSBpbnB1dCBpcyBhbHJlYWR5IG5hcnJvd2VkIHRvIGJlIG5vdC1udWxsLCB0aGVyZSBpcyBubyB2YWx1ZQogICAgICAvLyBpbiBhZGRpbmcgYW5vdGhlciBuYXJyb3dpbmcgbm9kZS4KICAgICAgaWYgKF9pc05vbk51bGxOYXJyb3codHlwZSkpIHJldHVybiB0eXBlOwogICAgICBvdGhlclR5cGUgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5leGNsdWRlTnVsbChkeW5hbWljVHlwZS50eXBlKTsKICAgIH0gZWxzZSBpZiAoYW5ub3RhdGlvbi5pc0ludGVyZmFjZVR5cGUpIHsKICAgICAgSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2UgPSBhbm5vdGF0aW9uOwogICAgICBpZiAoaW50ZXJmYWNlLmVsZW1lbnQgPT0gX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLm9iamVjdENsYXNzKSB7CiAgICAgICAgaWYgKGlzTnVsbGFibGUpIHJldHVybiB0eXBlOwogICAgICAgIGlmIChfaXNOb25OdWxsTmFycm93KHR5cGUpKSByZXR1cm4gdHlwZTsKICAgICAgICBvdGhlclR5cGUgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5leGNsdWRlTnVsbChkeW5hbWljVHlwZS50eXBlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBvdGhlclR5cGUgPQogICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsU3VidHlwZShpbnRlcmZhY2UuZWxlbWVudCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoYW5ub3RhdGlvbi5pc1R5cGVkZWYgfHwgYW5ub3RhdGlvbi5pc0Z1bmN0aW9uVHlwZSkgewogICAgICBvdGhlclR5cGUgPSBmdW5jdGlvblR5cGUudHlwZTsKICAgIH0gZWxzZSBpZiAoYW5ub3RhdGlvbi5pc0Z1dHVyZU9yKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgbmFycm93aW5nIG9mIEZ1dHVyZU9yLgogICAgICByZXR1cm4gdHlwZTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChhbm5vdGF0aW9uLmlzVHlwZVZhcmlhYmxlKTsKICAgICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBOYXJyb3cgdG8gYm91bmQuCiAgICAgIHJldHVybiB0eXBlOwogICAgfQogICAgaWYgKGlzTnVsbGFibGUpIHsKICAgICAgb3RoZXJUeXBlID0gX2Fic3RyYWN0VmFsdWVEb21haW4uaW5jbHVkZU51bGwob3RoZXJUeXBlKTsKICAgIH0KICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0V4YWN0KHR5cGUudHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSkgcmV0dXJuIHR5cGU7CiAgICBUeXBlSW5mb3JtYXRpb24gbmV3VHlwZSA9CiAgICAgICAgbmV3IE5hcnJvd1R5cGVJbmZvcm1hdGlvbihfYWJzdHJhY3RWYWx1ZURvbWFpbiwgdHlwZSwgb3RoZXJUeXBlKTsKICAgIGFsbG9jYXRlZFR5cGVzLmFkZChuZXdUeXBlKTsKICAgIHJldHVybiBuZXdUeXBlOwogIH0KCiAgUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uIGdldEluZmVycmVkVHlwZU9mUGFyYW1ldGVyKExvY2FsIHBhcmFtZXRlcikgewogICAgcmV0dXJuIHBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbnMucHV0SWZBYnNlbnQocGFyYW1ldGVyLCAoKSB7CiAgICAgIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbiB0eXBlSW5mb3JtYXRpb24gPQogICAgICAgICAgc3RyYXRlZ3kuY3JlYXRlUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uKAogICAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLCBwYXJhbWV0ZXIsIHRoaXMpOwogICAgICBfb3JkZXJlZFR5cGVJbmZvcm1hdGlvbnMuYWRkKHR5cGVJbmZvcm1hdGlvbik7CiAgICAgIHJldHVybiB0eXBlSW5mb3JtYXRpb247CiAgICB9KTsKICB9CgogIHZvaWQgZm9yRWFjaFBhcmFtZXRlclR5cGUoCiAgICAgIHZvaWQgZihMb2NhbCBwYXJhbWV0ZXIsIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbiB0eXBlSW5mb3JtYXRpb24pKSB7CiAgICBwYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25zLmZvckVhY2goZik7CiAgfQoKICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoTWVtYmVyRW50aXR5IG1lbWJlcikgewogICAgYXNzZXJ0KCFtZW1iZXIuaXNBYnN0cmFjdCwKICAgICAgICBmYWlsZWRBdChtZW1iZXIsICJVbmV4cGVjdGVkIGFic3RyYWN0IG1lbWJlciAkbWVtYmVyLiIpKTsKICAgIHJldHVybiBtZW1iZXJUeXBlSW5mb3JtYXRpb25zW21lbWJlcl0gPz89IF9nZXRJbmZlcnJlZFR5cGVPZk1lbWJlcihtZW1iZXIpOwogIH0KCiAgdm9pZCBmb3JFYWNoTWVtYmVyVHlwZSgKICAgICAgdm9pZCBmKE1lbWJlckVudGl0eSBtZW1iZXIsIE1lbWJlclR5cGVJbmZvcm1hdGlvbiB0eXBlSW5mb3JtYXRpb24pKSB7CiAgICBtZW1iZXJUeXBlSW5mb3JtYXRpb25zLmZvckVhY2goZik7CiAgfQoKICBNZW1iZXJUeXBlSW5mb3JtYXRpb24gX2dldEluZmVycmVkVHlwZU9mTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIpIHsKICAgIE1lbWJlclR5cGVJbmZvcm1hdGlvbiB0eXBlSW5mb3JtYXRpb24gPQogICAgICAgIHN0cmF0ZWd5LmNyZWF0ZU1lbWJlclR5cGVJbmZvcm1hdGlvbihfYWJzdHJhY3RWYWx1ZURvbWFpbiwgbWVtYmVyKTsKICAgIF9vcmRlcmVkVHlwZUluZm9ybWF0aW9ucy5hZGQodHlwZUluZm9ybWF0aW9uKTsKICAgIHJldHVybiB0eXBlSW5mb3JtYXRpb247CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgaW50ZXJuYWwgaW5mZXJyZXIgcmVwcmVzZW50YXRpb24gZm9yIFttYXNrXS4KICBDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbiBnZXRDb25jcmV0ZVR5cGVGb3IoQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICBhc3NlcnQobWFzayAhPSBudWxsKTsKICAgIHJldHVybiBjb25jcmV0ZVR5cGVzLnB1dElmQWJzZW50KG1hc2ssICgpIHsKICAgICAgcmV0dXJuIG5ldyBDb25jcmV0ZVR5cGVJbmZvcm1hdGlvbihtYXNrKTsKICAgIH0pOwogIH0KCiAgU3RyaW5nIGdldEluZmVycmVkU2lnbmF0dXJlT2ZNZXRob2QoRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24pIHsKICAgIEVsZW1lbnRUeXBlSW5mb3JtYXRpb24gaW5mbyA9IGdldEluZmVycmVkVHlwZU9mTWVtYmVyKGZ1bmN0aW9uKTsKICAgIHZhciByZXMgPSAiIjsKICAgIHN0cmF0ZWd5LmZvckVhY2hQYXJhbWV0ZXIoZnVuY3Rpb24sIChMb2NhbCBwYXJhbWV0ZXIpIHsKICAgICAgVHlwZUluZm9ybWF0aW9uIHR5cGUgPSBnZXRJbmZlcnJlZFR5cGVPZlBhcmFtZXRlcihwYXJhbWV0ZXIpOwogICAgICByZXMgKz0gIiR7cmVzLmlzRW1wdHkgPyAnKCcgOiAnLCAnfSR7dHlwZS50eXBlfSAke3BhcmFtZXRlci5uYW1lfSI7CiAgICB9KTsKICAgIHJlcyArPSAiKSAtPiAke2luZm8udHlwZX0iOwogICAgcmV0dXJuIHJlczsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBub25OdWxsU3VidHlwZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIGFzc2VydChzdHJhdGVneS5jaGVja0NsYXNzRW50aXR5KGNscykpOwogICAgcmV0dXJuIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsU3VidHlwZShjbHMpKTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBub25OdWxsU3ViY2xhc3MoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICBhc3NlcnQoc3RyYXRlZ3kuY2hlY2tDbGFzc0VudGl0eShjbHMpKTsKICAgIHJldHVybiBnZXRDb25jcmV0ZVR5cGVGb3IoX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTm9uTnVsbFN1YmNsYXNzKGNscykpOwogIH0KCiAgVHlwZUluZm9ybWF0aW9uIG5vbk51bGxFeGFjdChDbGFzc0VudGl0eSBjbHMpIHsKICAgIGFzc2VydChzdHJhdGVneS5jaGVja0NsYXNzRW50aXR5KGNscykpOwogICAgcmV0dXJuIGdldENvbmNyZXRlVHlwZUZvcihfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsRXhhY3QoY2xzKSk7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gbm9uTnVsbEVtcHR5KCkgewogICAgcmV0dXJuIG5vbk51bGxFbXB0eVR5cGU7CiAgfQoKICBib29sIGlzTnVsbChUeXBlSW5mb3JtYXRpb24gdHlwZSkgewogICAgcmV0dXJuIHR5cGUgPT0gbnVsbFR5cGU7CiAgfQoKICBUeXBlSW5mb3JtYXRpb24gYWxsb2NhdGVMaXN0KAogICAgICBUeXBlSW5mb3JtYXRpb24gdHlwZSwgaXIuVHJlZU5vZGUgbm9kZSwgTWVtYmVyRW50aXR5IGVuY2xvc2luZywKICAgICAgW1R5cGVJbmZvcm1hdGlvbiBlbGVtZW50VHlwZSwgaW50IGxlbmd0aF0pIHsKICAgIGFzc2VydChzdHJhdGVneS5jaGVja0xpc3ROb2RlKG5vZGUpKTsKICAgIENsYXNzRW50aXR5IHR5cGVkRGF0YUNsYXNzID0gX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLnR5cGVkRGF0YUNsYXNzOwogICAgYm9vbCBpc1R5cGVkQXJyYXkgPSB0eXBlZERhdGFDbGFzcyAhPSBudWxsICYmCiAgICAgICAgX2Nsb3NlZFdvcmxkLmNsYXNzSGllcmFyY2h5LmlzSW5zdGFudGlhdGVkKHR5cGVkRGF0YUNsYXNzKSAmJgogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgIC5pc0luc3RhbmNlT2ZPck51bGwodHlwZS50eXBlLCB0eXBlZERhdGFDbGFzcykKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWU7CiAgICBib29sIGlzQ29uc3QgPSAodHlwZS50eXBlID09IF9hYnN0cmFjdFZhbHVlRG9tYWluLmNvbnN0TGlzdFR5cGUpOwogICAgYm9vbCBpc0ZpeGVkID0gKHR5cGUudHlwZSA9PSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5maXhlZExpc3RUeXBlKSB8fAogICAgICAgIGlzQ29uc3QgfHwKICAgICAgICBpc1R5cGVkQXJyYXk7CiAgICBib29sIGlzRWxlbWVudEluZmVycmVkID0gaXNDb25zdCB8fCBpc1R5cGVkQXJyYXk7CgogICAgaW50IGluZmVycmVkTGVuZ3RoID0gaXNGaXhlZCA/IGxlbmd0aCA6IG51bGw7CiAgICBBYnN0cmFjdFZhbHVlIGVsZW1lbnRUeXBlTWFzayA9CiAgICAgICAgaXNFbGVtZW50SW5mZXJyZWQgPyBlbGVtZW50VHlwZS50eXBlIDogZHluYW1pY1R5cGUudHlwZTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZUNvbnRhaW5lclZhbHVlKAogICAgICAgIHR5cGUudHlwZSwgbm9kZSwgZW5jbG9zaW5nLCBlbGVtZW50VHlwZU1hc2ssIGluZmVycmVkTGVuZ3RoKTsKICAgIEVsZW1lbnRJbkNvbnRhaW5lclR5cGVJbmZvcm1hdGlvbiBlbGVtZW50ID0KICAgICAgICBuZXcgRWxlbWVudEluQ29udGFpbmVyVHlwZUluZm9ybWF0aW9uKAogICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY3VycmVudE1lbWJlciwgZWxlbWVudFR5cGUpOwogICAgZWxlbWVudC5pbmZlcnJlZCA9IGlzRWxlbWVudEluZmVycmVkOwoKICAgIGFsbG9jYXRlZFR5cGVzLmFkZChlbGVtZW50KTsKICAgIHJldHVybiBhbGxvY2F0ZWRMaXN0c1tub2RlXSA9IG5ldyBMaXN0VHlwZUluZm9ybWF0aW9uKAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLCBjdXJyZW50TWVtYmVyLCBtYXNrLCBlbGVtZW50LCBsZW5ndGgpOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBbVHlwZUluZm9ybWF0aW9uXSBvYmplY3QgZWl0aGVyIGZvciB0aGUgY2xvc3VyaXphdGlvbiBvZiBhCiAgLy8vIHN0YXRpYyBvciB0b3AtbGV2ZWwgbWV0aG9kIFtlbGVtZW50XSB1c2VkIGFzIGEgZnVuY3Rpb24gY29uc3RhbnQgb3IgZm9yCiAgLy8vIHRoZSBzeW50aGVzaXplZCAnY2FsbCcgbWV0aG9kIFtlbGVtZW50XSBjcmVhdGVkIGZvciBhIGxvY2FsIGZ1bmN0aW9uLgogIFR5cGVJbmZvcm1hdGlvbiBhbGxvY2F0ZUNsb3N1cmUoRnVuY3Rpb25FbnRpdHkgZWxlbWVudCkgewogICAgVHlwZUluZm9ybWF0aW9uIHJlc3VsdCA9IG5ldyBDbG9zdXJlVHlwZUluZm9ybWF0aW9uKAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLCBjdXJyZW50TWVtYmVyLCBlbGVtZW50KTsKICAgIGFsbG9jYXRlZENsb3N1cmVzLmFkZChyZXN1bHQpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBhbGxvY2F0ZVNldCgKICAgICAgVHlwZUluZm9ybWF0aW9uIHR5cGUsIGlyLlRyZWVOb2RlIG5vZGUsIE1lbWJlckVudGl0eSBlbmNsb3NpbmcsCiAgICAgIFtUeXBlSW5mb3JtYXRpb24gZWxlbWVudFR5cGVdKSB7CiAgICBhc3NlcnQoc3RyYXRlZ3kuY2hlY2tTZXROb2RlKG5vZGUpKTsKICAgIGJvb2wgaXNDb25zdCA9IHR5cGUudHlwZSA9PSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jb25zdFNldFR5cGU7CgogICAgQWJzdHJhY3RWYWx1ZSBlbGVtZW50VHlwZU1hc2sgPQogICAgICAgIGlzQ29uc3QgPyBlbGVtZW50VHlwZS50eXBlIDogZHluYW1pY1R5cGUudHlwZTsKICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZVNldFZhbHVlKAogICAgICAgIHR5cGUudHlwZSwgbm9kZSwgZW5jbG9zaW5nLCBlbGVtZW50VHlwZU1hc2spOwogICAgRWxlbWVudEluU2V0VHlwZUluZm9ybWF0aW9uIGVsZW1lbnQgPSBuZXcgRWxlbWVudEluU2V0VHlwZUluZm9ybWF0aW9uKAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLCBjdXJyZW50TWVtYmVyLCBlbGVtZW50VHlwZSk7CiAgICBlbGVtZW50LmluZmVycmVkID0gaXNDb25zdDsKCiAgICBhbGxvY2F0ZWRUeXBlcy5hZGQoZWxlbWVudCk7CiAgICByZXR1cm4gYWxsb2NhdGVkU2V0c1tub2RlXSA9CiAgICAgICAgbmV3IFNldFR5cGVJbmZvcm1hdGlvbihjdXJyZW50TWVtYmVyLCBtYXNrLCBlbGVtZW50KTsKICB9CgogIFR5cGVJbmZvcm1hdGlvbiBhbGxvY2F0ZU1hcCgKICAgICAgQ29uY3JldGVUeXBlSW5mb3JtYXRpb24gdHlwZSwgaXIuVHJlZU5vZGUgbm9kZSwgTWVtYmVyRW50aXR5IGVsZW1lbnQsCiAgICAgIFtMaXN0PFR5cGVJbmZvcm1hdGlvbj4ga2V5VHlwZXMsIExpc3Q8VHlwZUluZm9ybWF0aW9uPiB2YWx1ZVR5cGVzXSkgewogICAgYXNzZXJ0KHN0cmF0ZWd5LmNoZWNrTWFwTm9kZShub2RlKSk7CiAgICBhc3NlcnQoa2V5VHlwZXMubGVuZ3RoID09IHZhbHVlVHlwZXMubGVuZ3RoKTsKICAgIGJvb2wgaXNGaXhlZCA9ICh0eXBlLnR5cGUgPT0gX2Fic3RyYWN0VmFsdWVEb21haW4uY29uc3RNYXBUeXBlKTsKCiAgICBUeXBlSW5mb3JtYXRpb24ga2V5VHlwZSwgdmFsdWVUeXBlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrZXlUeXBlcy5sZW5ndGg7ICsraSkgewogICAgICBUeXBlSW5mb3JtYXRpb24gdHlwZSA9IGtleVR5cGVzW2ldOwogICAgICBrZXlUeXBlID0ga2V5VHlwZSA9PSBudWxsCiAgICAgICAgICA/IGFsbG9jYXRlUGhpKG51bGwsIG51bGwsIHR5cGUsIGlzVHJ5OiBmYWxzZSkKICAgICAgICAgIDogYWRkUGhpSW5wdXQobnVsbCwga2V5VHlwZSwgdHlwZSk7CgogICAgICB0eXBlID0gdmFsdWVUeXBlc1tpXTsKICAgICAgdmFsdWVUeXBlID0gdmFsdWVUeXBlID09IG51bGwKICAgICAgICAgID8gYWxsb2NhdGVQaGkobnVsbCwgbnVsbCwgdHlwZSwgaXNUcnk6IGZhbHNlKQogICAgICAgICAgOiBhZGRQaGlJbnB1dChudWxsLCB2YWx1ZVR5cGUsIHR5cGUpOwogICAgfQoKICAgIGtleVR5cGUgPQogICAgICAgIGtleVR5cGUgPT0gbnVsbCA/IG5vbk51bGxFbXB0eSgpIDogc2ltcGxpZnlQaGkobnVsbCwgbnVsbCwga2V5VHlwZSk7CiAgICB2YWx1ZVR5cGUgPQogICAgICAgIHZhbHVlVHlwZSA9PSBudWxsID8gbm9uTnVsbEVtcHR5KCkgOiBzaW1wbGlmeVBoaShudWxsLCBudWxsLCB2YWx1ZVR5cGUpOwoKICAgIEFic3RyYWN0VmFsdWUga2V5VHlwZU1hc2ssIHZhbHVlVHlwZU1hc2s7CiAgICBpZiAoaXNGaXhlZCkgewogICAgICBrZXlUeXBlTWFzayA9IGtleVR5cGUudHlwZTsKICAgICAgdmFsdWVUeXBlTWFzayA9IHZhbHVlVHlwZS50eXBlOwogICAgfSBlbHNlIHsKICAgICAga2V5VHlwZU1hc2sgPSB2YWx1ZVR5cGVNYXNrID0gZHluYW1pY1R5cGUudHlwZTsKICAgIH0KICAgIEFic3RyYWN0VmFsdWUgbWFzayA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLmNyZWF0ZU1hcFZhbHVlKAogICAgICAgIHR5cGUudHlwZSwgbm9kZSwgZWxlbWVudCwga2V5VHlwZU1hc2ssIHZhbHVlVHlwZU1hc2spOwoKICAgIFR5cGVJbmZvcm1hdGlvbiBrZXlUeXBlSW5mbyA9IG5ldyBLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbigKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY3VycmVudE1lbWJlciwga2V5VHlwZSk7CiAgICBUeXBlSW5mb3JtYXRpb24gdmFsdWVUeXBlSW5mbyA9IG5ldyBWYWx1ZUluTWFwVHlwZUluZm9ybWF0aW9uKAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLCBjdXJyZW50TWVtYmVyLCB2YWx1ZVR5cGUpOwogICAgYWxsb2NhdGVkVHlwZXMuYWRkKGtleVR5cGVJbmZvKTsKICAgIGFsbG9jYXRlZFR5cGVzLmFkZCh2YWx1ZVR5cGVJbmZvKTsKCiAgICBNYXBUeXBlSW5mb3JtYXRpb24gbWFwID0KICAgICAgICBuZXcgTWFwVHlwZUluZm9ybWF0aW9uKGN1cnJlbnRNZW1iZXIsIG1hc2ssIGtleVR5cGVJbmZvLCB2YWx1ZVR5cGVJbmZvKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGtleVR5cGVzLmxlbmd0aDsgKytpKSB7CiAgICAgIFR5cGVJbmZvcm1hdGlvbiBuZXdUeXBlID0gbWFwLmFkZEVudHJ5QXNzaWdubWVudCgKICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLCBrZXlUeXBlc1tpXSwgdmFsdWVUeXBlc1tpXSwgdHJ1ZSk7CiAgICAgIGlmIChuZXdUeXBlICE9IG51bGwpIGFsbG9jYXRlZFR5cGVzLmFkZChuZXdUeXBlKTsKICAgIH0KCiAgICAvLyBTaG9ydGN1dDogSWYgd2UgYWxyZWFkeSBoYXZlIGEgZmlyc3QgYXBwcm94aW1hdGlvbiBvZiB0aGUga2V5L3ZhbHVlIHR5cGUsCiAgICAvLyBzdGFydCBwcm9wYWdhdGluZyBpdCBlYXJseS4KICAgIGlmIChpc0ZpeGVkKSBtYXAubWFya0FzSW5mZXJyZWQoKTsKCiAgICBhbGxvY2F0ZWRNYXBzW25vZGVdID0gbWFwOwogICAgcmV0dXJuIG1hcDsKICB9CgogIEFic3RyYWN0VmFsdWUgbmV3VHlwZWRTZWxlY3RvcihUeXBlSW5mb3JtYXRpb24gaW5mbywgQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICAvLyBPbmx5IHR5cGUgdGhlIHNlbGVjdG9yIGlmIFtpbmZvXSBpcyBjb25jcmV0ZSwgYmVjYXVzZSB0aGUgb3RoZXIKICAgIC8vIGtpbmRzIG9mIFtUeXBlSW5mb3JtYXRpb25dIGhhdmUgdGhlIGVtcHR5IHR5cGUgYXQgdGhpcyBwb2ludCBvZgogICAgLy8gYW5hbHlzaXMuCiAgICByZXR1cm4gaW5mby5pc0NvbmNyZXRlID8gaW5mby50eXBlIDogbWFzazsKICB9CgogIC8vLyBSZXR1cm5zIGEgbmV3IHR5cGUgdGhhdCB1bmlvbnMgW2ZpcnN0SW5wdXRdIGFuZCBbc2Vjb25kSW5wdXRdLgogIFR5cGVJbmZvcm1hdGlvbiBhbGxvY2F0ZURpYW1vbmRQaGkoCiAgICAgIFR5cGVJbmZvcm1hdGlvbiBmaXJzdElucHV0LCBUeXBlSW5mb3JtYXRpb24gc2Vjb25kSW5wdXQpIHsKICAgIFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb24gcmVzdWx0ID0gbmV3IFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb24oCiAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4sIGN1cnJlbnRNZW1iZXIsIG51bGwsIG51bGwsCiAgICAgICAgaXNUcnk6IGZhbHNlKTsKICAgIHJlc3VsdC5hZGRBc3NpZ25tZW50KGZpcnN0SW5wdXQpOwogICAgcmVzdWx0LmFkZEFzc2lnbm1lbnQoc2Vjb25kSW5wdXQpOwogICAgYWxsb2NhdGVkVHlwZXMuYWRkKHJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbiBfYWRkUGhpKAogICAgICBpci5Ob2RlIG5vZGUsIExvY2FsIHZhcmlhYmxlLCBUeXBlSW5mb3JtYXRpb24gaW5wdXRUeXBlLCBib29sIGlzVHJ5KSB7CiAgICBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uIHJlc3VsdCA9IG5ldyBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uKAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLCBjdXJyZW50TWVtYmVyLCBub2RlLCB2YXJpYWJsZSwKICAgICAgICBpc1RyeTogaXNUcnkpOwogICAgYWxsb2NhdGVkVHlwZXMuYWRkKHJlc3VsdCk7CiAgICByZXN1bHQuYWRkQXNzaWdubWVudChpbnB1dFR5cGUpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBSZXR1cm5zIGEgbmV3IHR5cGUgZm9yIGhvbGRpbmcgdGhlIHBvdGVudGlhbCB0eXBlcyBvZiBbZWxlbWVudF0uCiAgLy8vIFtpbnB1dFR5cGVdIGlzIHRoZSBmaXJzdCBpbmNvbWluZyB0eXBlIG9mIHRoZSBwaGkuCiAgUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbiBhbGxvY2F0ZVBoaSgKICAgICAgaXIuTm9kZSBub2RlLCBMb2NhbCB2YXJpYWJsZSwgVHlwZUluZm9ybWF0aW9uIGlucHV0VHlwZSwKICAgICAge2Jvb2wgaXNUcnl9KSB7CiAgICBhc3NlcnQoc3RyYXRlZ3kuY2hlY2tQaGlOb2RlKG5vZGUpKTsKICAgIC8vIENoZWNrIGlmIFtpbnB1dFR5cGVdIGlzIGEgcGhpIGZvciBhIGxvY2FsIHVwZGF0ZWQgaW4KICAgIC8vIHRoZSB0cnkvY2F0Y2ggYmxvY2sgW25vZGVdLiBJZiBpdCBpcywgbm8gbmVlZCB0byBhbGxvY2F0ZSBhIG5ldwogICAgLy8gcGhpLgogICAgaWYgKGlucHV0VHlwZSBpcyBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uICYmCiAgICAgICAgaW5wdXRUeXBlLmJyYW5jaE5vZGUgPT0gbm9kZSAmJgogICAgICAgIGlucHV0VHlwZS5pc1RyeSkgewogICAgICByZXR1cm4gaW5wdXRUeXBlOwogICAgfQogICAgcmV0dXJuIF9hZGRQaGkobm9kZSwgdmFyaWFibGUsIGlucHV0VHlwZSwgaXNUcnkpOwogIH0KCiAgLy8vIFJldHVybnMgYSBuZXcgdHlwZSBmb3IgaG9sZGluZyB0aGUgcG90ZW50aWFsIHR5cGVzIG9mIFtlbGVtZW50XS4KICAvLy8gW2lucHV0VHlwZV0gaXMgdGhlIGZpcnN0IGluY29taW5nIHR5cGUgb2YgdGhlIHBoaS4gW2FsbG9jYXRlTG9vcFBoaV0KICAvLy8gb25seSBkaWZmZXJzIGZyb20gW2FsbG9jYXRlUGhpXSBpbiB0aGF0IGl0IGFsbG93cyB0aGUgdW5kZXJseWluZwogIC8vLyBpbXBsZW1lbnRhdGlvbiBvZiBbVHlwZVN5c3RlbV0gdG8gZGlmZmVyZW50aWF0ZSBQaGkgbm9kZXMgZHVlIHRvIGxvb3BzCiAgLy8vIGZyb20gb3RoZXIgbWVyZ2luZyB1c2VzLgogIFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb24gYWxsb2NhdGVMb29wUGhpKAogICAgICBpci5Ob2RlIG5vZGUsIExvY2FsIHZhcmlhYmxlLCBUeXBlSW5mb3JtYXRpb24gaW5wdXRUeXBlLAogICAgICB7Ym9vbCBpc1RyeX0pIHsKICAgIGFzc2VydChzdHJhdGVneS5jaGVja0xvb3BQaGlOb2RlKG5vZGUpKTsKICAgIHJldHVybiBfYWRkUGhpKG5vZGUsIHZhcmlhYmxlLCBpbnB1dFR5cGUsIGlzVHJ5KTsKICB9CgogIC8vLyBTaW1wbGllcyB0aGUgcGhpIHJlcHJlc2VudGluZyBbZWxlbWVudF0gYW5kIG9mIHRoZSB0eXBlCiAgLy8vIFtwaGlUeXBlXS4gRm9yIGV4YW1wbGUsIGlmIHRoaXMgcGhpIGhhcyBvbmUgaW5jb21pbmcgaW5wdXQsIGFuCiAgLy8vIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIGNvdWxkIGp1c3QgcmV0dXJuIHRoYXQgaW5jb21pbmcKICAvLy8gaW5wdXQgdHlwZS4KICBUeXBlSW5mb3JtYXRpb24gc2ltcGxpZnlQaGkoCiAgICAgIGlyLk5vZGUgbm9kZSwgTG9jYWwgdmFyaWFibGUsIFBoaUVsZW1lbnRUeXBlSW5mb3JtYXRpb24gcGhpVHlwZSkgewogICAgYXNzZXJ0KHBoaVR5cGUuYnJhbmNoTm9kZSA9PSBub2RlKTsKICAgIGlmIChwaGlUeXBlLmFzc2lnbm1lbnRzLmxlbmd0aCA9PSAxKSByZXR1cm4gcGhpVHlwZS5hc3NpZ25tZW50cy5maXJzdDsKICAgIHJldHVybiBwaGlUeXBlOwogIH0KCiAgLy8vIEFkZHMgW25ld1R5cGVdIGFzIGFuIGlucHV0IG9mIFtwaGlUeXBlXS4KICBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uIGFkZFBoaUlucHV0KExvY2FsIHZhcmlhYmxlLAogICAgICBQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uIHBoaVR5cGUsIFR5cGVJbmZvcm1hdGlvbiBuZXdUeXBlKSB7CiAgICBwaGlUeXBlLmFkZEFzc2lnbm1lbnQobmV3VHlwZSk7CiAgICByZXR1cm4gcGhpVHlwZTsKICB9CgogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGVNYXNrKEl0ZXJhYmxlPFR5cGVJbmZvcm1hdGlvbj4gYXNzaWdubWVudHMpIHsKICAgIHJldHVybiBqb2luVHlwZU1hc2tzKGFzc2lnbm1lbnRzLm1hcCgoZSkgPT4gZS50eXBlKSk7CiAgfQoKICBBYnN0cmFjdFZhbHVlIGpvaW5UeXBlTWFza3MoSXRlcmFibGU8QWJzdHJhY3RWYWx1ZT4gbWFza3MpIHsKICAgIHZhciBkeW5hbWljVHlwZSA9IF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlOwogICAgLy8gT3B0aW1pemF0aW9uOiB3ZSBhcmUgaXRlcmF0aW5nIG92ZXIgbWFza3MgdHdpY2UsIGJ1dCBiZWNhdXNlIGBtYXNrc2AgaXMgYQogICAgLy8gbWFwcGVkIGl0ZXJhYmxlLCB3ZSBzYXZlIHRoZSBpbnRlcm1lZGlhdGUgcmVzdWx0cyB0byBhdm9pZCBjb21wdXRpbmcgdGhlbQogICAgLy8gYWdhaW4uCiAgICB2YXIgbGlzdCA9IFtdOwogICAgYm9vbCBpc0R5bmFtaWNJbmdvcmluZ051bGwgPSBmYWxzZTsKICAgIGJvb2wgbWF5QmVOdWxsID0gZmFsc2U7CiAgICBmb3IgKEFic3RyYWN0VmFsdWUgbWFzayBpbiBtYXNrcykgewogICAgICAvLyBEb24ndCBkbyBhbnkgd29yayBvbiBjb21wdXRpbmcgdW5pb25zIGlmIHdlIGtub3cgdGhhdCBhZnRlciBhbGwgdGhhdAogICAgICAvLyB3b3JrIHRoZSByZXN1bHQgd2lsbCBiZSBgZHluYW1pY2AuCiAgICAgIC8vIFRPRE8oc2lnbXVuZCk6IGNoYW5nZSB0byBgbWFzayA9PSBkeW5hbWljVHlwZWAgc28gd2UgY2FuIGNvbnRpbnVlIHRvCiAgICAgIC8vIHRyYWNrIHRoZSBub24tbnVsbGFibGUgYml0LgogICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uY29udGFpbnNBbGwobWFzaykuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgICBpc0R5bmFtaWNJbmdvcmluZ051bGwgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwobWFzaykuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgICBtYXlCZU51bGwgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChpc0R5bmFtaWNJbmdvcmluZ051bGwgJiYgbWF5QmVOdWxsKSByZXR1cm4gZHluYW1pY1R5cGU7CiAgICAgIGxpc3QuYWRkKG1hc2spOwogICAgfQoKICAgIEFic3RyYWN0VmFsdWUgbmV3VHlwZSA9IG51bGw7CiAgICBmb3IgKEFic3RyYWN0VmFsdWUgbWFzayBpbiBsaXN0KSB7CiAgICAgIG5ld1R5cGUgPQogICAgICAgICAgbmV3VHlwZSA9PSBudWxsID8gbWFzayA6IF9hYnN0cmFjdFZhbHVlRG9tYWluLnVuaW9uKG5ld1R5cGUsIG1hc2spOwogICAgICAvLyBMaWtld2lzZSAtIHN0b3AgZWFybHkgaWYgd2UgYWxyZWFkeSByZWFjaCBkeW5hbWljLgogICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uY29udGFpbnNBbGwobmV3VHlwZSkuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgICBpc0R5bmFtaWNJbmdvcmluZ051bGwgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwobmV3VHlwZSkuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgICBtYXlCZU51bGwgPSB0cnVlOwogICAgICB9CiAgICAgIGlmIChpc0R5bmFtaWNJbmdvcmluZ051bGwgJiYgbWF5QmVOdWxsKSByZXR1cm4gZHluYW1pY1R5cGU7CiAgICB9CgogICAgcmV0dXJuIG5ld1R5cGUgPz8gX2Fic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlOwogIH0KfQqCoQBOTjwBKBkkIRglIAFQGyQ0NUUBOjsvFxkBMksBPSMBOicBQSQBQCMBQCMBQCoCAUYTIyUBSkVOATJJMgEsSjYBMT8zAS89MgEvOi8BKk0BKjwxAUE3IwFMHUQBSkU7IAEuKicfHh4bHhgXGgExSwQBMigBUBAvPQE5I083DhsEASEhNU4EASAgM0wEASMjOR09BAEjIzkdPQQBKChDIkIEASMjOR09BAEgIDNMBAEhITVOBAElJT0fPwQBISE1TgQBJiY/IEAEASYmPyBABAEpKUUjQwQBICFJASU8PQEgIDNMBAElJT0fPwQBIyM5HT0EASEhNU4EASQkOx4+BAEoMihDIkIEAS0tTSdHBAEsLEsmRgQBJAE0LUcEATArRQQBPBQePy4zOjpBGgYfRgQBSBZHHgQBMSdKAUBDDEghHSglI0wrL0YtLEolMUgPFEoIRCUoPRMNKSsTBhY/Bk8eSiEUBAFJQTEzNjUeCAQBHUsqBAFHH0JQBAEaTCcEAUgsTDMcBAE/QxowMAgEAUFFEjxESgggEAQBNCxPBAE1LFAEATIsTQQBIx0EASYdBAEgRjMqTTJGHTsfRkgTFjYBMiRBREYwLz8qASE7RQQBS05MPDk3IxMEAR9GJylDASQ3PjZLOyABISE+BAEfTEwpMkUBKDAqIDguARwkODAGAQ5NEFEBLhMiJg02Bj4/AT83QzklJwEdUQEwOEM4BgFRIycBHxAEAU1HRxEvBAFFJkFGORcmJyATBAElTUY9FyAlEwQBRzkpPxYpPEcMMigbGAY2BAFHS0dNHy0/Fi02BAE+RUQSH0koSxQEAS84RCQUBAFJOgQBPzhRUQ4TKBwoTixOJUYmCEEaCEIWBgEiJxBOPEkmCEQaCEIGATYEAgEucGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZV9zeXN0ZW0uZGFydDFzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2Evc3NhX3RyYWNlci5kYXJ0wABVMS8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IHNzYS50cmFjZXI7CgppbXBvcnQgJy4uLy4uL2NvbXBpbGVyX25ldy5kYXJ0JyBzaG93IE91dHB1dFNpbms7CmltcG9ydCAnLi4vZGlhZ25vc3RpY3MvaW52YXJpYW50LmRhcnQnIHNob3cgREVCVUdfTU9ERTsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9uYW1lci5kYXJ0JyBzaG93IHN1ZmZpeEZvckdldEludGVyY2VwdG9yOwppbXBvcnQgJy4uL3RyYWNlci5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKCi8vLyBPdXRwdXRzIFNTQSBjb2RlIGluIGEgZm9ybWF0IHJlYWRhYmxlIGJ5IEh5ZHJhIElSLgovLy8gVHJhY2luZyBpcyBkaXNhYmxlZCBieSBkZWZhdWx0LCBzZWUgLi4vdHJhY2VyLmRhcnQgZm9yIGhvdwovLy8gdG8gZW5hYmxlIGl0LgpjbGFzcyBIVHJhY2VyIGV4dGVuZHMgSEdyYXBoVmlzaXRvciB3aXRoIFRyYWNlclV0aWwgewogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKICBAb3ZlcnJpZGUKICBmaW5hbCBPdXRwdXRTaW5rIG91dHB1dDsKCiAgSFRyYWNlcih0aGlzLm91dHB1dCwgdGhpcy5jbG9zZWRXb3JsZCk7CgogIHZvaWQgdHJhY2VHcmFwaChTdHJpbmcgbmFtZSwgSEdyYXBoIGdyYXBoKSB7CiAgICBERUJVR19NT0RFID0gdHJ1ZTsKICAgIHRhZygiY2ZnIiwgKCkgewogICAgICBwcmludFByb3BlcnR5KCJuYW1lIiwgbmFtZSk7CiAgICAgIHZpc2l0RG9taW5hdG9yVHJlZShncmFwaCk7CiAgICB9KTsKICB9CgogIHZvaWQgYWRkUHJlZGVjZXNzb3JzKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBpZiAoYmxvY2sucHJlZGVjZXNzb3JzLmlzRW1wdHkpIHsKICAgICAgcHJpbnRFbXB0eVByb3BlcnR5KCJwcmVkZWNlc3NvcnMiKTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZEluZGVudCgpOwogICAgICBhZGQoInByZWRlY2Vzc29ycyIpOwogICAgICBmb3IgKEhCYXNpY0Jsb2NrIHByZWRlY2Vzc29yIGluIGJsb2NrLnByZWRlY2Vzc29ycykgewogICAgICAgIGFkZCgnICJCJHtwcmVkZWNlc3Nvci5pZH0iJyk7CiAgICAgIH0KICAgICAgYWRkKCJcbiIpOwogICAgfQogIH0KCiAgdm9pZCBhZGRTdWNjZXNzb3JzKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBpZiAoYmxvY2suc3VjY2Vzc29ycy5pc0VtcHR5KSB7CiAgICAgIHByaW50RW1wdHlQcm9wZXJ0eSgic3VjY2Vzc29ycyIpOwogICAgfSBlbHNlIHsKICAgICAgYWRkSW5kZW50KCk7CiAgICAgIGFkZCgic3VjY2Vzc29ycyIpOwogICAgICBmb3IgKEhCYXNpY0Jsb2NrIHN1Y2Nlc3NvciBpbiBibG9jay5zdWNjZXNzb3JzKSB7CiAgICAgICAgYWRkKCcgIkIke3N1Y2Nlc3Nvci5pZH0iJyk7CiAgICAgIH0KICAgICAgYWRkKCJcbiIpOwogICAgfQogIH0KCiAgdm9pZCBhZGRJbnN0cnVjdGlvbnMoCiAgICAgIEhJbnN0cnVjdGlvblN0cmluZ2lmaWVyIHN0cmluZ2lmaWVyLCBISW5zdHJ1Y3Rpb25MaXN0IGxpc3QpIHsKICAgIGZvciAoSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gbGlzdC5maXJzdDsKICAgICAgICBpbnN0cnVjdGlvbiAhPSBudWxsOwogICAgICAgIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24ubmV4dCkgewogICAgICBpbnQgYmNpID0gMDsKICAgICAgaW50IHVzZXMgPSBpbnN0cnVjdGlvbi51c2VkQnkubGVuZ3RoOwogICAgICBTdHJpbmcgY2hhbmdlcyA9IGluc3RydWN0aW9uLnNpZGVFZmZlY3RzLmhhc1NpZGVFZmZlY3RzKCkgPyAnIScgOiAnICc7CiAgICAgIFN0cmluZyBkZXBlbmRzID0gaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuZGVwZW5kc09uU29tZXRoaW5nKCkgPyAnPycgOiAnJzsKICAgICAgYWRkSW5kZW50KCk7CiAgICAgIFN0cmluZyB0ZW1wb3JhcnlJZCA9IHN0cmluZ2lmaWVyLnRlbXBvcmFyeUlkKGluc3RydWN0aW9uKTsKICAgICAgU3RyaW5nIGluc3RydWN0aW9uU3RyaW5nID0gc3RyaW5naWZpZXIudmlzaXQoaW5zdHJ1Y3Rpb24pOwogICAgICBhZGQoIiRiY2kgJHVzZXMgJHRlbXBvcmFyeUlkICRpbnN0cnVjdGlvblN0cmluZyAkY2hhbmdlcyAkZGVwZW5kcyA8fEBcbiIpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIEhJbnN0cnVjdGlvblN0cmluZ2lmaWVyIHN0cmluZ2lmaWVyID0KICAgICAgICBuZXcgSEluc3RydWN0aW9uU3RyaW5naWZpZXIoYmxvY2ssIGNsb3NlZFdvcmxkKTsKICAgIGFzc2VydChibG9jay5pZCAhPSBudWxsKTsKICAgIHRhZygiYmxvY2siLCAoKSB7CiAgICAgIHByaW50UHJvcGVydHkoIm5hbWUiLCAiQiR7YmxvY2suaWR9Iik7CiAgICAgIHByaW50UHJvcGVydHkoImZyb21fYmNpIiwgLTEpOwogICAgICBwcmludFByb3BlcnR5KCJ0b19iY2kiLCAtMSk7CiAgICAgIGFkZFByZWRlY2Vzc29ycyhibG9jayk7CiAgICAgIGFkZFN1Y2Nlc3NvcnMoYmxvY2spOwogICAgICBwcmludEVtcHR5UHJvcGVydHkoInhoYW5kbGVycyIpOwogICAgICBwcmludEVtcHR5UHJvcGVydHkoImZsYWdzIik7CiAgICAgIGlmIChibG9jay5kb21pbmF0b3IgIT0gbnVsbCkgewogICAgICAgIHByaW50UHJvcGVydHkoImRvbWluYXRvciIsICJCJHtibG9jay5kb21pbmF0b3IuaWR9Iik7CiAgICAgIH0KICAgICAgdGFnKCJzdGF0ZXMiLCAoKSB7CiAgICAgICAgdGFnKCJsb2NhbHMiLCAoKSB7CiAgICAgICAgICBwcmludFByb3BlcnR5KCJzaXplIiwgMCk7CiAgICAgICAgICBwcmludFByb3BlcnR5KCJtZXRob2QiLCAiTm9uZSIpOwogICAgICAgICAgYmxvY2suZm9yRWFjaFBoaSgocGhpKSB7CiAgICAgICAgICAgIFN0cmluZyBwaGlJZCA9IHN0cmluZ2lmaWVyLnRlbXBvcmFyeUlkKHBoaSk7CiAgICAgICAgICAgIFN0cmluZ0J1ZmZlciBpbnB1dElkcyA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwaGkuaW5wdXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgaW5wdXRJZHMud3JpdGUoc3RyaW5naWZpZXIudGVtcG9yYXJ5SWQocGhpLmlucHV0c1tpXSkpOwogICAgICAgICAgICAgIGlucHV0SWRzLndyaXRlKCIgIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJpbnRsbigiJHtwaGkuaWR9ICRwaGlJZCBbICRpbnB1dElkc10iKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgdGFnKCJISVIiLCAoKSB7CiAgICAgICAgYWRkSW5zdHJ1Y3Rpb25zKHN0cmluZ2lmaWVyLCBibG9jay5waGlzKTsKICAgICAgICBhZGRJbnN0cnVjdGlvbnMoc3RyaW5naWZpZXIsIGJsb2NrKTsKICAgICAgfSk7CiAgICB9KTsKICB9Cn0KCmNsYXNzIEhJbnN0cnVjdGlvblN0cmluZ2lmaWVyIGltcGxlbWVudHMgSFZpc2l0b3I8U3RyaW5nPiB7CiAgZmluYWwgSkNsb3NlZFdvcmxkIGNsb3NlZFdvcmxkOwogIGZpbmFsIEhCYXNpY0Jsb2NrIGN1cnJlbnRCbG9jazsKCiAgSEluc3RydWN0aW9uU3RyaW5naWZpZXIodGhpcy5jdXJyZW50QmxvY2ssIHRoaXMuY2xvc2VkV29ybGQpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICB2aXNpdChISW5zdHJ1Y3Rpb24gbm9kZSkgPT4gJyR7bm9kZS5hY2NlcHQodGhpcyl9ICR7bm9kZS5pbnN0cnVjdGlvblR5cGV9JzsKCiAgU3RyaW5nIHRlbXBvcmFyeUlkKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgU3RyaW5nIHByZWZpeDsKICAgIGlmIChpbnN0cnVjdGlvbi5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcHJlZml4ID0gJ3UnOwogICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbgogICAgICAgIC5pc0NvbmZsaWN0aW5nKF9hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHByZWZpeCA9ICdjJzsKICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24KICAgICAgICAuaXNFeHRlbmRhYmxlQXJyYXkoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcHJlZml4ID0gJ2UnOwogICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbgogICAgICAgIC5pc0ZpeGVkQXJyYXkoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcHJlZml4ID0gJ2YnOwogICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbgogICAgICAgIC5pc011dGFibGVBcnJheShfYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBwcmVmaXggPSAnbSc7CiAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uLmlzQXJyYXkoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcHJlZml4ID0gJ2EnOwogICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi5pc1N0cmluZyhfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBwcmVmaXggPSAncyc7CiAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uCiAgICAgICAgLmlzSW5kZXhhYmxlUHJpbWl0aXZlKF9hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHByZWZpeCA9ICdyJzsKICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24uaXNCb29sZWFuKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHByZWZpeCA9ICdiJzsKICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24uaXNJbnRlZ2VyKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHByZWZpeCA9ICdpJzsKICAgIH0gZWxzZSBpZiAoaW5zdHJ1Y3Rpb24uaXNEb3VibGUoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcHJlZml4ID0gJ2QnOwogICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi5pc051bWJlcihfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICBwcmVmaXggPSAnbic7CiAgICB9IGVsc2UgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgLmNvbnRhaW5zQWxsKGluc3RydWN0aW9uLmluc3RydWN0aW9uVHlwZSkKICAgICAgICAuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgcHJlZml4ID0gJ3YnOwogICAgfSBlbHNlIHsKICAgICAgcHJlZml4ID0gJ1UnOwogICAgfQogICAgcmV0dXJuICIkcHJlZml4JHtpbnN0cnVjdGlvbi5pZH0iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0TGF0ZVZhbHVlKEhMYXRlVmFsdWUgbm9kZSkgewogICAgcmV0dXJuICJMYXRlVmFsdWU6ICR7dGVtcG9yYXJ5SWQobm9kZS5pbnB1dHNbMF0pfSI7CiAgfQoKICBTdHJpbmcgaGFuZGxlSW52b2tlQmluYXJ5KEhJbnZva2VCaW5hcnkgbm9kZSwgU3RyaW5nIG9wY29kZSkgewogICAgU3RyaW5nIGxlZnQgPSB0ZW1wb3JhcnlJZChub2RlLmxlZnQpOwogICAgU3RyaW5nIHJpZ2h0ID0gdGVtcG9yYXJ5SWQobm9kZS5yaWdodCk7CiAgICByZXR1cm4gJyRvcGNvZGU6ICRsZWZ0ICRyaWdodCc7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRBYnMoSEFicyBub2RlKSB7CiAgICBTdHJpbmcgb3BlcmFuZCA9IHRlbXBvcmFyeUlkKG5vZGUub3BlcmFuZCk7CiAgICByZXR1cm4gIkFiczogJG9wZXJhbmQiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0QWRkKEhBZGQgbm9kZSkgPT4gaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsICdBZGQnKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0Qml0QW5kKEhCaXRBbmQgbm9kZSkgPT4gaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsICdCaXRBbmQnKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0Qml0Tm90KEhCaXROb3Qgbm9kZSkgewogICAgU3RyaW5nIG9wZXJhbmQgPSB0ZW1wb3JhcnlJZChub2RlLm9wZXJhbmQpOwogICAgcmV0dXJuICJCaXROb3Q6ICRvcGVyYW5kIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEJpdE9yKEhCaXRPciBub2RlKSA9PiBoYW5kbGVJbnZva2VCaW5hcnkobm9kZSwgJ0JpdE9yJyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEJpdFhvcihIQml0WG9yIG5vZGUpID0+IGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnQml0WG9yJyk7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEJvdW5kc0NoZWNrKEhCb3VuZHNDaGVjayBub2RlKSB7CiAgICBTdHJpbmcgbGVuZ3RoSWQgPSB0ZW1wb3JhcnlJZChub2RlLmxlbmd0aCk7CiAgICBTdHJpbmcgaW5kZXhJZCA9IHRlbXBvcmFyeUlkKG5vZGUuaW5kZXgpOwogICAgcmV0dXJuICJCb3VuZHNDaGVjazogbGVuZ3RoID0gJGxlbmd0aElkLCBpbmRleCA9ICRpbmRleElkIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEJyZWFrKEhCcmVhayBub2RlKSB7CiAgICBIQmFzaWNCbG9jayB0YXJnZXQgPSBjdXJyZW50QmxvY2suc3VjY2Vzc29yc1swXTsKICAgIGlmIChub2RlLmxhYmVsICE9IG51bGwpIHsKICAgICAgcmV0dXJuICJCcmVhayAke25vZGUubGFiZWwubGFiZWxOYW1lfTogKEIke3RhcmdldC5pZH0pIjsKICAgIH0KICAgIHJldHVybiAiQnJlYWs6IChCJHt0YXJnZXQuaWR9KSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRDb25zdGFudChIQ29uc3RhbnQgY29uc3RhbnQpID0+ICJDb25zdGFudDogJHtjb25zdGFudC5jb25zdGFudH0iOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRDb250aW51ZShIQ29udGludWUgbm9kZSkgewogICAgSEJhc2ljQmxvY2sgdGFyZ2V0ID0gY3VycmVudEJsb2NrLnN1Y2Nlc3NvcnNbMF07CiAgICBpZiAobm9kZS5sYWJlbCAhPSBudWxsKSB7CiAgICAgIHJldHVybiAiQ29udGludWUgJHtub2RlLmxhYmVsLmxhYmVsTmFtZX06IChCJHt0YXJnZXQuaWR9KSI7CiAgICB9CiAgICByZXR1cm4gIkNvbnRpbnVlOiAoQiR7dGFyZ2V0LmlkfSkiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0Q3JlYXRlKEhDcmVhdGUgbm9kZSkgewogICAgcmV0dXJuIGhhbmRsZUdlbmVyaWNJbnZva2UoIkNyZWF0ZSIsICIke25vZGUuZWxlbWVudC5uYW1lfSIsIG5vZGUuaW5wdXRzKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdENyZWF0ZUJveChIQ3JlYXRlQm94IG5vZGUpIHsKICAgIHJldHVybiBoYW5kbGVHZW5lcmljSW52b2tlKCJDcmVhdGVCb3giLCAiIiwgbm9kZS5pbnB1dHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0RGl2aWRlKEhEaXZpZGUgbm9kZSkgPT4gaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsICdEaXZpZGUnKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0RXhpdChIRXhpdCBub2RlKSA9PiAiRXhpdCI7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEZpZWxkR2V0KEhGaWVsZEdldCBub2RlKSB7CiAgICBpZiAobm9kZS5pc051bGxDaGVjaykgewogICAgICByZXR1cm4gJ0ZpZWxkR2V0OiBOdWxsQ2hlY2sgJHt0ZW1wb3JhcnlJZChub2RlLnJlY2VpdmVyKX0nOwogICAgfQogICAgU3RyaW5nIGZpZWxkTmFtZSA9IG5vZGUuZWxlbWVudC5uYW1lOwogICAgcmV0dXJuICdGaWVsZEdldDogJHt0ZW1wb3JhcnlJZChub2RlLnJlY2VpdmVyKX0uJGZpZWxkTmFtZSc7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRGaWVsZFNldChIRmllbGRTZXQgbm9kZSkgewogICAgU3RyaW5nIHZhbHVlSWQgPSB0ZW1wb3JhcnlJZChub2RlLnZhbHVlKTsKICAgIFN0cmluZyBmaWVsZE5hbWUgPSBub2RlLmVsZW1lbnQubmFtZTsKICAgIHJldHVybiAnRmllbGRTZXQ6ICR7dGVtcG9yYXJ5SWQobm9kZS5yZWNlaXZlcil9LiRmaWVsZE5hbWUgdG8gJHZhbHVlSWQnOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0UmVhZE1vZGlmeVdyaXRlKEhSZWFkTW9kaWZ5V3JpdGUgbm9kZSkgewogICAgU3RyaW5nIGZpZWxkTmFtZSA9IG5vZGUuZWxlbWVudC5uYW1lOwogICAgU3RyaW5nIHJlY2VpdmVySWQgPSB0ZW1wb3JhcnlJZChub2RlLnJlY2VpdmVyKTsKICAgIFN0cmluZyBvcCA9IG5vZGUuanNPcDsKICAgIGlmIChub2RlLmlzQXNzaWduT3ApIHsKICAgICAgU3RyaW5nIHZhbHVlSWQgPSB0ZW1wb3JhcnlJZChub2RlLnZhbHVlKTsKICAgICAgcmV0dXJuICdSZWFkTW9kaWZ5V3JpdGU6ICRyZWNlaXZlcklkLiRmaWVsZE5hbWUgJG9wPSAkdmFsdWVJZCc7CiAgICB9IGVsc2UgaWYgKG5vZGUuaXNQcmVPcCkgewogICAgICByZXR1cm4gJ1JlYWRNb2RpZnlXcml0ZTogJG9wJHJlY2VpdmVySWQuJGZpZWxkTmFtZSc7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJ1JlYWRNb2RpZnlXcml0ZTogJHJlY2VpdmVySWQuJGZpZWxkTmFtZSRvcCc7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRHZXRMZW5ndGgoSEdldExlbmd0aCBub2RlKSB7CiAgICByZXR1cm4gJ0dldExlbmd0aDogJHt0ZW1wb3JhcnlJZChub2RlLnJlY2VpdmVyKX0nOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0TG9jYWxHZXQoSExvY2FsR2V0IG5vZGUpIHsKICAgIFN0cmluZyBsb2NhbE5hbWUgPSBub2RlLnZhcmlhYmxlLm5hbWU7CiAgICByZXR1cm4gJ0xvY2FsR2V0OiAke3RlbXBvcmFyeUlkKG5vZGUubG9jYWwpfS4kbG9jYWxOYW1lJzsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdExvY2FsU2V0KEhMb2NhbFNldCBub2RlKSB7CiAgICBTdHJpbmcgdmFsdWVJZCA9IHRlbXBvcmFyeUlkKG5vZGUudmFsdWUpOwogICAgU3RyaW5nIGxvY2FsTmFtZSA9IG5vZGUudmFyaWFibGUubmFtZTsKICAgIHJldHVybiAnTG9jYWxTZXQ6ICR7dGVtcG9yYXJ5SWQobm9kZS5sb2NhbCl9LiRsb2NhbE5hbWUgdG8gJHZhbHVlSWQnOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0R290byhIR290byBub2RlKSB7CiAgICBIQmFzaWNCbG9jayB0YXJnZXQgPSBjdXJyZW50QmxvY2suc3VjY2Vzc29yc1swXTsKICAgIHJldHVybiAiR290bzogKEIke3RhcmdldC5pZH0pIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEdyZWF0ZXIoSEdyZWF0ZXIgbm9kZSkgPT4gaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsICdHcmVhdGVyJyk7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0R3JlYXRlckVxdWFsKEhHcmVhdGVyRXF1YWwgbm9kZSkgewogICAgcmV0dXJuIGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnR3JlYXRlckVxdWFsJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRJZGVudGl0eShISWRlbnRpdHkgbm9kZSkgPT4gaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsICdJZGVudGl0eScpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRJZihISWYgbm9kZSkgewogICAgSEJhc2ljQmxvY2sgdGhlbkJsb2NrID0gY3VycmVudEJsb2NrLnN1Y2Nlc3NvcnNbMF07CiAgICBIQmFzaWNCbG9jayBlbHNlQmxvY2sgPSBjdXJyZW50QmxvY2suc3VjY2Vzc29yc1sxXTsKICAgIFN0cmluZyBjb25kaXRpb25JZCA9IHRlbXBvcmFyeUlkKG5vZGUuaW5wdXRzWzBdKTsKICAgIHJldHVybiAiSWYgKCRjb25kaXRpb25JZCk6IChCJHt0aGVuQmxvY2suaWR9KSBlbHNlIChCJHtlbHNlQmxvY2suaWR9KSI7CiAgfQoKICBTdHJpbmcgaGFuZGxlR2VuZXJpY0ludm9rZSgKICAgICAgU3RyaW5nIGludm9rZVR5cGUsIFN0cmluZyBmdW5jdGlvbk5hbWUsIExpc3Q8SEluc3RydWN0aW9uPiBhcmd1bWVudHMpIHsKICAgIFN0cmluZ0J1ZmZlciBhcmd1bWVudHNTdHJpbmcgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaSAhPSAwKSBhcmd1bWVudHNTdHJpbmcud3JpdGUoIiwgIik7CiAgICAgIGFyZ3VtZW50c1N0cmluZy53cml0ZSh0ZW1wb3JhcnlJZChhcmd1bWVudHNbaV0pKTsKICAgIH0KICAgIHJldHVybiAiJGludm9rZVR5cGU6ICRmdW5jdGlvbk5hbWUoJGFyZ3VtZW50c1N0cmluZykiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW5kZXgoSEluZGV4IG5vZGUpIHsKICAgIFN0cmluZyByZWNlaXZlciA9IHRlbXBvcmFyeUlkKG5vZGUucmVjZWl2ZXIpOwogICAgU3RyaW5nIGluZGV4ID0gdGVtcG9yYXJ5SWQobm9kZS5pbmRleCk7CiAgICByZXR1cm4gIkluZGV4OiAkcmVjZWl2ZXJbJGluZGV4XSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRJbmRleEFzc2lnbihISW5kZXhBc3NpZ24gbm9kZSkgewogICAgU3RyaW5nIHJlY2VpdmVyID0gdGVtcG9yYXJ5SWQobm9kZS5yZWNlaXZlcik7CiAgICBTdHJpbmcgaW5kZXggPSB0ZW1wb3JhcnlJZChub2RlLmluZGV4KTsKICAgIFN0cmluZyB2YWx1ZSA9IHRlbXBvcmFyeUlkKG5vZGUudmFsdWUpOwogICAgcmV0dXJuICJJbmRleEFzc2lnbjogJHJlY2VpdmVyWyRpbmRleF0gPSAkdmFsdWUiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW50ZXJjZXB0b3IoSEludGVyY2VwdG9yIG5vZGUpIHsKICAgIFN0cmluZyB2YWx1ZSA9IHRlbXBvcmFyeUlkKG5vZGUuaW5wdXRzWzBdKTsKICAgIGlmIChub2RlLmludGVyY2VwdGVkQ2xhc3NlcyAhPSBudWxsKSB7CiAgICAgIFN0cmluZyBjbHMgPSBzdWZmaXhGb3JHZXRJbnRlcmNlcHRvcihjbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cywKICAgICAgICAgIGNsb3NlZFdvcmxkLm5hdGl2ZURhdGEsIG5vZGUuaW50ZXJjZXB0ZWRDbGFzc2VzKTsKICAgICAgcmV0dXJuICJJbnRlcmNlcHRvciAoJHtjbHN9KTogJHZhbHVlIjsKICAgIH0KICAgIHJldHVybiAiSW50ZXJjZXB0b3I6ICR2YWx1ZSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRJbnZva2VDbG9zdXJlKEhJbnZva2VDbG9zdXJlIG5vZGUpID0+CiAgICAgIGhhbmRsZUludm9rZUR5bmFtaWMobm9kZSwgIkludm9rZUNsb3N1cmUiKTsKCiAgU3RyaW5nIGhhbmRsZUludm9rZUR5bmFtaWMoSEludm9rZUR5bmFtaWMgaW52b2tlLCBTdHJpbmcga2luZCkgewogICAgU3RyaW5nIHJlY2VpdmVyID0gdGVtcG9yYXJ5SWQoaW52b2tlLnJlY2VpdmVyKTsKICAgIFN0cmluZyBuYW1lID0gaW52b2tlLnNlbGVjdG9yLm5hbWU7CiAgICBTdHJpbmcgdGFyZ2V0ID0gIiRyZWNlaXZlci4kbmFtZSI7CiAgICBpbnQgb2Zmc2V0ID0gSEludm9rZS5BUkdVTUVOVFNfT0ZGU0VUOwogICAgTGlzdCBhcmd1bWVudHMgPSBpbnZva2UuaW5wdXRzLnN1Ymxpc3Qob2Zmc2V0KTsKICAgIHJldHVybiBoYW5kbGVHZW5lcmljSW52b2tlKGtpbmQsIHRhcmdldCwgYXJndW1lbnRzKSArCiAgICAgICAgIigke2ludm9rZS5yZWNlaXZlclR5cGV9KSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRJbnZva2VEeW5hbWljTWV0aG9kKEhJbnZva2VEeW5hbWljTWV0aG9kIG5vZGUpID0+CiAgICAgIGhhbmRsZUludm9rZUR5bmFtaWMobm9kZSwgIkludm9rZUR5bmFtaWNNZXRob2QiKTsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRJbnZva2VEeW5hbWljR2V0dGVyKEhJbnZva2VEeW5hbWljR2V0dGVyIG5vZGUpID0+CiAgICAgIGhhbmRsZUludm9rZUR5bmFtaWMobm9kZSwgIkludm9rZUR5bmFtaWNHZXR0ZXIiKTsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRJbnZva2VEeW5hbWljU2V0dGVyKEhJbnZva2VEeW5hbWljU2V0dGVyIG5vZGUpID0+CiAgICAgIGhhbmRsZUludm9rZUR5bmFtaWMobm9kZSwgIkludm9rZUR5bmFtaWNTZXR0ZXIiKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW52b2tlU3RhdGljKEhJbnZva2VTdGF0aWMgaW52b2tlKSB7CiAgICBTdHJpbmcgdGFyZ2V0ID0gaW52b2tlLmVsZW1lbnQubmFtZTsKICAgIHJldHVybiBoYW5kbGVHZW5lcmljSW52b2tlKCJJbnZva2VTdGF0aWMiLCB0YXJnZXQsIGludm9rZS5pbnB1dHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW52b2tlU3VwZXIoSEludm9rZVN1cGVyIGludm9rZSkgewogICAgU3RyaW5nIHRhcmdldCA9IGludm9rZS5lbGVtZW50Lm5hbWU7CiAgICByZXR1cm4gaGFuZGxlR2VuZXJpY0ludm9rZSgiSW52b2tlU3VwZXIiLCB0YXJnZXQsIGludm9rZS5pbnB1dHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW52b2tlQ29uc3RydWN0b3JCb2R5KEhJbnZva2VDb25zdHJ1Y3RvckJvZHkgaW52b2tlKSB7CiAgICBTdHJpbmcgdGFyZ2V0ID0gaW52b2tlLmVsZW1lbnQubmFtZTsKICAgIHJldHVybiBoYW5kbGVHZW5lcmljSW52b2tlKCJJbnZva2VDb25zdHJ1Y3RvckJvZHkiLCB0YXJnZXQsIGludm9rZS5pbnB1dHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW52b2tlR2VuZXJhdG9yQm9keShISW52b2tlR2VuZXJhdG9yQm9keSBpbnZva2UpIHsKICAgIFN0cmluZyB0YXJnZXQgPSBpbnZva2UuZWxlbWVudC5uYW1lOwogICAgcmV0dXJuIGhhbmRsZUdlbmVyaWNJbnZva2UoIkludm9rZUdlbmVyYXRvckJvZHkiLCB0YXJnZXQsIGludm9rZS5pbnB1dHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0Rm9yZWlnbkNvZGUoSEZvcmVpZ25Db2RlIG5vZGUpIHsKICAgIHZhciB0ZW1wbGF0ZSA9IG5vZGUuY29kZVRlbXBsYXRlOwogICAgU3RyaW5nIGNvZGUgPSAnJHt0ZW1wbGF0ZS5hc3R9JzsKICAgIHZhciBpbnB1dHMgPSBub2RlLmlucHV0cy5tYXAodGVtcG9yYXJ5SWQpLmpvaW4oJywgJyk7CiAgICByZXR1cm4gIkZvcmVpZ25Db2RlOiAkY29kZSAoJGlucHV0cykiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0TGVzcyhITGVzcyBub2RlKSA9PiBoYW5kbGVJbnZva2VCaW5hcnkobm9kZSwgJ0xlc3MnKTsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRMZXNzRXF1YWwoSExlc3NFcXVhbCBub2RlKSA9PgogICAgICBoYW5kbGVJbnZva2VCaW5hcnkobm9kZSwgJ0xlc3NFcXVhbCcpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRMaXRlcmFsTGlzdChITGl0ZXJhbExpc3Qgbm9kZSkgewogICAgU3RyaW5nQnVmZmVyIGVsZW1lbnRzU3RyaW5nID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub2RlLmlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoaSAhPSAwKSBlbGVtZW50c1N0cmluZy53cml0ZSgiLCAiKTsKICAgICAgZWxlbWVudHNTdHJpbmcud3JpdGUodGVtcG9yYXJ5SWQobm9kZS5pbnB1dHNbaV0pKTsKICAgIH0KICAgIHJldHVybiAiTGl0ZXJhbExpc3Q6IFskZWxlbWVudHNTdHJpbmddIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdExvb3BCcmFuY2goSExvb3BCcmFuY2ggYnJhbmNoKSB7CiAgICBIQmFzaWNCbG9jayBib2R5QmxvY2sgPSBjdXJyZW50QmxvY2suc3VjY2Vzc29yc1swXTsKICAgIEhCYXNpY0Jsb2NrIGV4aXRCbG9jayA9IGN1cnJlbnRCbG9jay5zdWNjZXNzb3JzWzFdOwogICAgU3RyaW5nIGNvbmRpdGlvbklkID0gdGVtcG9yYXJ5SWQoYnJhbmNoLmlucHV0c1swXSk7CiAgICByZXR1cm4gIkxvb3BCcmFuY2ggKCRjb25kaXRpb25JZCk6IChCJHtib2R5QmxvY2suaWR9KSB0aGVuIChCJHtleGl0QmxvY2suaWR9KSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRNdWx0aXBseShITXVsdGlwbHkgbm9kZSkgPT4gaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsICdNdWx0aXBseScpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXROZWdhdGUoSE5lZ2F0ZSBub2RlKSB7CiAgICBTdHJpbmcgb3BlcmFuZCA9IHRlbXBvcmFyeUlkKG5vZGUub3BlcmFuZCk7CiAgICByZXR1cm4gIk5lZ2F0ZTogJG9wZXJhbmQiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0Tm90KEhOb3Qgbm9kZSkgPT4gIk5vdDogJHt0ZW1wb3JhcnlJZChub2RlLmlucHV0c1swXSl9IjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0UGFyYW1ldGVyVmFsdWUoSFBhcmFtZXRlclZhbHVlIG5vZGUpIHsKICAgIHJldHVybiAiUGFyYW1ldGVyVmFsdWU6ICR7bm9kZS5zb3VyY2VFbGVtZW50Lm5hbWV9IjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdExvY2FsVmFsdWUoSExvY2FsVmFsdWUgbm9kZSkgewogICAgcmV0dXJuICJMb2NhbFZhbHVlOiAke25vZGUuc291cmNlRWxlbWVudC5uYW1lfSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRQaGkoSFBoaSBwaGkpIHsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBidWZmZXIud3JpdGUoIlBoaTogIik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHBoaS5pbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGkgPiAwKSBidWZmZXIud3JpdGUoIiwgIik7CiAgICAgIGJ1ZmZlci53cml0ZSh0ZW1wb3JhcnlJZChwaGkuaW5wdXRzW2ldKSk7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRSZWYoSFJlZiBub2RlKSB7CiAgICByZXR1cm4gJ1JlZjogJHt0ZW1wb3JhcnlJZChub2RlLnZhbHVlKX0nOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0UmV0dXJuKEhSZXR1cm4gbm9kZSkgPT4gIlJldHVybjogJHt0ZW1wb3JhcnlJZChub2RlLmlucHV0c1swXSl9IjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0U2hpZnRMZWZ0KEhTaGlmdExlZnQgbm9kZSkgPT4KICAgICAgaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsICdTaGlmdExlZnQnKTsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRTaGlmdFJpZ2h0KEhTaGlmdFJpZ2h0IG5vZGUpID0+CiAgICAgIGhhbmRsZUludm9rZUJpbmFyeShub2RlLCAnU2hpZnRSaWdodCcpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRTdGF0aWMoSFN0YXRpYyBub2RlKSA9PiAiU3RhdGljOiAke25vZGUuZWxlbWVudC5uYW1lfSI7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdExhenlTdGF0aWMoSExhenlTdGF0aWMgbm9kZSkgPT4KICAgICAgIkxhenlTdGF0aWM6ICR7bm9kZS5lbGVtZW50Lm5hbWV9IjsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0T25lU2hvdEludGVyY2VwdG9yKEhPbmVTaG90SW50ZXJjZXB0b3Igbm9kZSkgPT4KICAgICAgaGFuZGxlSW52b2tlRHluYW1pYyhub2RlLCAiT25lU2hvdEludGVyY2VwdG9yIik7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFN0YXRpY1N0b3JlKEhTdGF0aWNTdG9yZSBub2RlKSB7CiAgICBTdHJpbmcgbGhzID0gbm9kZS5lbGVtZW50Lm5hbWU7CiAgICByZXR1cm4gIlN0YXRpY1N0b3JlOiAkbGhzID0gJHt0ZW1wb3JhcnlJZChub2RlLmlucHV0c1swXSl9IjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFN0cmluZ0NvbmNhdChIU3RyaW5nQ29uY2F0IG5vZGUpIHsKICAgIHZhciBsZWZ0SWQgPSB0ZW1wb3JhcnlJZChub2RlLmxlZnQpOwogICAgdmFyIHJpZ2h0SWQgPSB0ZW1wb3JhcnlJZChub2RlLnJpZ2h0KTsKICAgIHJldHVybiAiU3RyaW5nQ29uY2F0OiAkbGVmdElkICsgJHJpZ2h0SWQiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0U3RyaW5naWZ5KEhTdHJpbmdpZnkgbm9kZSkgewogICAgcmV0dXJuICJTdHJpbmdpZnk6ICR7dGVtcG9yYXJ5SWQobm9kZS5pbnB1dHNbMF0pfSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRTdWJ0cmFjdChIU3VidHJhY3Qgbm9kZSkgPT4gaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsICdTdWJ0cmFjdCcpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRTd2l0Y2goSFN3aXRjaCBub2RlKSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYnVmLndyaXRlKCJTd2l0Y2g6ICgiKTsKICAgIGJ1Zi53cml0ZSh0ZW1wb3JhcnlJZChub2RlLmlucHV0c1swXSkpOwogICAgYnVmLndyaXRlKCIpICIpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBub2RlLmlucHV0cy5sZW5ndGg7IGkrKykgewogICAgICBidWYud3JpdGUodGVtcG9yYXJ5SWQobm9kZS5pbnB1dHNbaV0pKTsKICAgICAgYnVmLndyaXRlKCI6IEIiKTsKICAgICAgYnVmLndyaXRlKG5vZGUuYmxvY2suc3VjY2Vzc29yc1tpIC0gMV0uaWQpOwogICAgICBidWYud3JpdGUoIiwgIik7CiAgICB9CiAgICBidWYud3JpdGUoImRlZmF1bHQ6IEIiKTsKICAgIGJ1Zi53cml0ZShub2RlLmRlZmF1bHRUYXJnZXQuaWQpOwogICAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0VGhpcyhIVGhpcyBub2RlKSA9PiAiVGhpcyI7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFRocm93KEhUaHJvdyBub2RlKSA9PiAiVGhyb3c6ICR7dGVtcG9yYXJ5SWQobm9kZS5pbnB1dHNbMF0pfSI7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFRocm93RXhwcmVzc2lvbihIVGhyb3dFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiAiVGhyb3dFeHByZXNzaW9uOiAke3RlbXBvcmFyeUlkKG5vZGUuaW5wdXRzWzBdKX0iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0VHJ1bmNhdGluZ0RpdmlkZShIVHJ1bmNhdGluZ0RpdmlkZSBub2RlKSB7CiAgICByZXR1cm4gaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsICdUcnVuY2F0aW5nRGl2aWRlJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRSZW1haW5kZXIoSFJlbWFpbmRlciBub2RlKSB7CiAgICByZXR1cm4gaGFuZGxlSW52b2tlQmluYXJ5KG5vZGUsICdSZW1haW5kZXInKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEV4aXRUcnkoSEV4aXRUcnkgbm9kZSkgewogICAgcmV0dXJuICJFeGl0VHJ5IjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFRyeShIVHJ5IG5vZGUpIHsKICAgIExpc3Q8SEJhc2ljQmxvY2s+IHN1Y2Nlc3NvcnMgPSBjdXJyZW50QmxvY2suc3VjY2Vzc29yczsKICAgIFN0cmluZyB0cnlCbG9jayA9ICdCJHtzdWNjZXNzb3JzWzBdLmlkfSc7CiAgICBTdHJpbmcgY2F0Y2hCbG9jayA9ICdub25lJzsKICAgIGlmIChub2RlLmNhdGNoQmxvY2sgIT0gbnVsbCkgewogICAgICBjYXRjaEJsb2NrID0gJ0Ike3N1Y2Nlc3NvcnNbMV0uaWR9JzsKICAgIH0KCiAgICBTdHJpbmcgZmluYWxseUJsb2NrID0gJ25vbmUnOwogICAgaWYgKG5vZGUuZmluYWxseUJsb2NrICE9IG51bGwpIHsKICAgICAgZmluYWxseUJsb2NrID0gJ0Ike25vZGUuZmluYWxseUJsb2NrLmlkfSc7CiAgICB9CgogICAgcmV0dXJuICJUcnk6ICR0cnlCbG9jaywgQ2F0Y2g6ICRjYXRjaEJsb2NrLCBGaW5hbGx5OiAkZmluYWxseUJsb2NrLCAiCiAgICAgICAgIkpvaW46IEIke3N1Y2Nlc3NvcnMubGFzdC5pZH0iOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SXMoSElzIG5vZGUpIHsKICAgIFN0cmluZyB0eXBlID0gbm9kZS50eXBlRXhwcmVzc2lvbi50b1N0cmluZygpOwogICAgcmV0dXJuICJJczogJHt0ZW1wb3JhcnlJZChub2RlLmV4cHJlc3Npb24pfSBpcyAkdHlwZSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRJc1ZpYUludGVyY2VwdG9yKEhJc1ZpYUludGVyY2VwdG9yIG5vZGUpIHsKICAgIFN0cmluZyB0eXBlID0gbm9kZS50eXBlRXhwcmVzc2lvbi50b1N0cmluZygpOwogICAgcmV0dXJuICJJc1ZpYUludGVyY2VwdG9yOiAke3RlbXBvcmFyeUlkKG5vZGUuaW5wdXRzWzBdKX0gaXMgJHR5cGUiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0VHlwZUNvbnZlcnNpb24oSFR5cGVDb252ZXJzaW9uIG5vZGUpIHsKICAgIFN0cmluZyBjaGVja2VkSW5wdXQgPSB0ZW1wb3JhcnlJZChub2RlLmNoZWNrZWRJbnB1dCk7CiAgICBTdHJpbmcgcmVzdDsKICAgIGlmIChub2RlLmlucHV0cy5sZW5ndGggPT0gMikgewogICAgICByZXN0ID0gIiAke3RlbXBvcmFyeUlkKG5vZGUuaW5wdXRzLmxhc3QpfSI7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQobm9kZS5pbnB1dHMubGVuZ3RoID09IDEpOwogICAgICByZXN0ID0gIiI7CiAgICB9CiAgICBTdHJpbmcga2luZCA9IF90eXBlQ29udmVyc2lvbktpbmQobm9kZSk7CiAgICByZXR1cm4gIlR5cGVDb252ZXJzaW9uOiAka2luZCAkY2hlY2tlZElucHV0IHRvICR7bm9kZS5pbnN0cnVjdGlvblR5cGV9JHJlc3QiOwogIH0KCiAgU3RyaW5nIF90eXBlQ29udmVyc2lvbktpbmQoSFR5cGVDb252ZXJzaW9uIG5vZGUpIHsKICAgIGlmIChub2RlLmlzVHlwZUNoZWNrKSByZXR1cm4gJ1RZUEVfQ0hFQ0snOwogICAgaWYgKG5vZGUuaXNDYXN0Q2hlY2spIHJldHVybiAnQ0FTVF9DSEVDSyc7CiAgICByZXR1cm4gJz8nOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0UHJpbWl0aXZlQ2hlY2soSFByaW1pdGl2ZUNoZWNrIG5vZGUpIHsKICAgIFN0cmluZyBjaGVja2VkSW5wdXQgPSB0ZW1wb3JhcnlJZChub2RlLmNoZWNrZWRJbnB1dCk7CiAgICBhc3NlcnQobm9kZS5pbnB1dHMubGVuZ3RoID09IDEpOwogICAgU3RyaW5nIGtpbmQgPSBfcHJpbWl0aXZlQ2hlY2tLaW5kKG5vZGUpOwogICAgcmV0dXJuICJQcmltaXRpdmVDaGVjazogJGtpbmQgJGNoZWNrZWRJbnB1dCB0byAke25vZGUuaW5zdHJ1Y3Rpb25UeXBlfSI7CiAgfQoKICBTdHJpbmcgX3ByaW1pdGl2ZUNoZWNrS2luZChIUHJpbWl0aXZlQ2hlY2sgbm9kZSkgewogICAgaWYgKG5vZGUuaXNSZWNlaXZlclR5cGVDaGVjaykgcmV0dXJuICdSRUNFSVZFUic7CiAgICBpZiAobm9kZS5pc0FyZ3VtZW50VHlwZUNoZWNrKSByZXR1cm4gJ0FSR1VNRU5UJzsKICAgIHJldHVybiAnPyc7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRCb29sQ29udmVyc2lvbihIQm9vbENvbnZlcnNpb24gbm9kZSkgewogICAgU3RyaW5nIGNoZWNrZWRJbnB1dCA9IHRlbXBvcmFyeUlkKG5vZGUuY2hlY2tlZElucHV0KTsKICAgIHJldHVybiAiQm9vbENvbnZlcnNpb246ICRjaGVja2VkSW5wdXQiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0VHlwZUtub3duKEhUeXBlS25vd24gbm9kZSkgewogICAgYXNzZXJ0KG5vZGUuaW5wdXRzLmxlbmd0aCA8PSAyKTsKICAgIFN0cmluZyByZXN1bHQgPQogICAgICAgICJUeXBlS25vd246ICR7dGVtcG9yYXJ5SWQobm9kZS5jaGVja2VkSW5wdXQpfSBpcyAke25vZGUua25vd25UeXBlfSI7CiAgICBpZiAobm9kZS53aXRuZXNzICE9IG51bGwpIHsKICAgICAgcmVzdWx0ICs9ICIgd2l0bmVzc2VkIGJ5ICR7dGVtcG9yYXJ5SWQobm9kZS53aXRuZXNzKX0iOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFJhbmdlQ29udmVyc2lvbihIUmFuZ2VDb252ZXJzaW9uIG5vZGUpIHsKICAgIHJldHVybiAiUmFuZ2VDb252ZXJzaW9uOiAke25vZGUuY2hlY2tlZElucHV0fSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRUeXBlSW5mb1JlYWRSYXcoSFR5cGVJbmZvUmVhZFJhdyBub2RlKSB7CiAgICB2YXIgaW5wdXRzID0gbm9kZS5pbnB1dHMubWFwKHRlbXBvcmFyeUlkKS5qb2luKCcsICcpOwogICAgcmV0dXJuICJUeXBlSW5mb1JlYWRSYXc6ICRpbnB1dHMiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0VHlwZUluZm9SZWFkVmFyaWFibGUoSFR5cGVJbmZvUmVhZFZhcmlhYmxlIG5vZGUpIHsKICAgIHZhciBpbnB1dHMgPSBub2RlLmlucHV0cy5tYXAodGVtcG9yYXJ5SWQpLmpvaW4oJywgJyk7CiAgICByZXR1cm4gIlR5cGVJbmZvUmVhZFZhcmlhYmxlOiAke25vZGUudmFyaWFibGV9ICAkaW5wdXRzIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFR5cGVJbmZvRXhwcmVzc2lvbihIVHlwZUluZm9FeHByZXNzaW9uIG5vZGUpIHsKICAgIHZhciBpbnB1dHMgPSBub2RlLmlucHV0cy5tYXAodGVtcG9yYXJ5SWQpLmpvaW4oJywgJyk7CiAgICByZXR1cm4gIlR5cGVJbmZvRXhwcmVzc2lvbjogJHtub2RlLmtpbmRBc1N0cmluZ30gJHtub2RlLmRhcnRUeXBlfSIKICAgICAgICAiICgkaW5wdXRzKSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRBd2FpdChIQXdhaXQgbm9kZSkgewogICAgcmV0dXJuICJBd2FpdDogJHt0ZW1wb3JhcnlJZChub2RlLmlucHV0c1swXSl9IjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFlpZWxkKEhZaWVsZCBub2RlKSB7CiAgICByZXR1cm4gIllpZWxkJHtub2RlLmhhc1N0YXIgPyAiKiIgOiAiIn06ICR7dGVtcG9yYXJ5SWQobm9kZS5pbnB1dHNbMF0pfSI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRJc1Rlc3QoSElzVGVzdCBub2RlKSB7CiAgICB2YXIgaW5wdXRzID0gbm9kZS5pbnB1dHMubWFwKHRlbXBvcmFyeUlkKS5qb2luKCcsICcpOwogICAgcmV0dXJuICJJc1Rlc3Q6ICRpbnB1dHMiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0QXNDaGVjayhIQXNDaGVjayBub2RlKSB7CiAgICB2YXIgaW5wdXRzID0gbm9kZS5pbnB1dHMubWFwKHRlbXBvcmFyeUlkKS5qb2luKCcsICcpOwogICAgU3RyaW5nIGVycm9yID0gbm9kZS5pc1R5cGVFcnJvciA/ICdUeXBlRXJyb3InIDogJ0Nhc3RFcnJvcic7CiAgICByZXR1cm4gIkFzQ2hlY2s6ICRlcnJvciAkaW5wdXRzIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdEFzQ2hlY2tTaW1wbGUoSEFzQ2hlY2tTaW1wbGUgbm9kZSkgewogICAgdmFyIGlucHV0cyA9IG5vZGUuaW5wdXRzLm1hcCh0ZW1wb3JhcnlJZCkuam9pbignLCAnKTsKICAgIFN0cmluZyBlcnJvciA9IG5vZGUuaXNUeXBlRXJyb3IgPyAnVHlwZUVycm9yJyA6ICdDYXN0RXJyb3InOwogICAgcmV0dXJuICJBc0NoZWNrU2ltcGxlOiAkZXJyb3IgJHtub2RlLmRhcnRUeXBlfSAkaW5wdXRzIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFN1YnR5cGVDaGVjayhIU3VidHlwZUNoZWNrIG5vZGUpIHsKICAgIHZhciBpbnB1dHMgPSBub2RlLmlucHV0cy5tYXAodGVtcG9yYXJ5SWQpLmpvaW4oJywgJyk7CiAgICByZXR1cm4gIlN1YnR5cGVDaGVjazogJGlucHV0cyI7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdmlzaXRMb2FkVHlwZShITG9hZFR5cGUgbm9kZSkgewogICAgdmFyIGlucHV0cyA9IG5vZGUuaW5wdXRzLm1hcCh0ZW1wb3JhcnlJZCkuam9pbignLCAnKTsKICAgIHJldHVybiAiTG9hZFR5cGU6ICR7bm9kZS50eXBlRXhwcmVzc2lvbn0gICRpbnB1dHMiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0SW5zdGFuY2VFbnZpcm9ubWVudChISW5zdGFuY2VFbnZpcm9ubWVudCBub2RlKSB7CiAgICB2YXIgaW5wdXRzID0gbm9kZS5pbnB1dHMubWFwKHRlbXBvcmFyeUlkKS5qb2luKCcsICcpOwogICAgcmV0dXJuICJJbnN0YW5jZUVudmlyb25tZW50OiAkaW5wdXRzIjsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFR5cGVFdmFsKEhUeXBlRXZhbCBub2RlKSB7CiAgICB2YXIgaW5wdXRzID0gbm9kZS5pbnB1dHMubWFwKHRlbXBvcmFyeUlkKS5qb2luKCcsICcpOwogICAgcmV0dXJuICJUeXBlRXZhbDogJHtub2RlLnR5cGVFeHByZXNzaW9ufSAgJHtub2RlLmVudlN0cnVjdHVyZX0gICRpbnB1dHMiOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0VHlwZUJpbmQoSFR5cGVCaW5kIG5vZGUpIHsKICAgIHZhciBpbnB1dHMgPSBub2RlLmlucHV0cy5tYXAodGVtcG9yYXJ5SWQpLmpvaW4oJywgJyk7CiAgICByZXR1cm4gIlR5cGVCaW5kOiAkaW5wdXRzIjsKICB9Cn0KgtgATk48ARQBMjgxQBkqFQE3PxI2IgwbASoBLxcUIyEIBAEsJioNExs8JggRBgQBKiQoDRMZOCQIEQYEARhEMB0qEyxNUBNBQVEGBAEMLCo5HhYtJSMeHCcjJT4IGRskKyM5ODpGIw42DgwKFjItCggEAgE8IiIBQAEyJwFOATETRRQbLR0UGzEdFBssHRQbLh0UTRROFBs0HRRPFE8UThROFCQyHhQNFAYnBAEMKzgEAUEqLCQEAQwfMBwEAQxBAQxKAQwlMB8EAQxHAQxKAQwvMC5ABAEMIzUePwYlBAEMUAEMKTUeQgYoBAEMJU8EAQwrPgQBDEoBDCoBDCkcQgYqQQQBDCkuKk0EAQw3KjQbGzBGHzsNOwYEAQwrNwQBDCkrPgQBDCkuK0oEAQwhNSQEAQxNDDE1BAEMUAEMHTg4NkwEAR5ONzEvOAY7BAEMIzIsJwQBDC8yLCw2BAEMLzArRzwtBiIEAQw0MgFDNCgnKzQ6JAQBDEA4DEA4DEA4AQwzKUcEAQwxKUYEAQxFKVAEAQxBKU4EAQwvJiU6KwQBDEQMLC0BDC82My45Bi0EAQwvODg4VAQBDFABDCUwHwQBDEcBDDU5BAEMLTUEAQweLhsyJTAGHgQBDB8uBAEMUAEMLC0MLi4BDEYBDC4qAQw+NwEMLyRBBAEMMSkrLwQBDCs4BAEMUAEMJSscLBUzLhgyFwYdJhsEAQwqAQxNAQw3PgQBDDk5BAEMKzIEAQwnFgQBDB88LiAjKwYBIiUxBgFKKAQBDB0yOwQBDDkySAQBDDU6ESMyDScRBi1SBAE1Ly8QBAEMNTolLU0EATU1NRAEAQw1OiwEAQwrJRRNID4GEwQBDDc0BAEMNzonBAEMQTo+BAEMPTpHFgQBDCM0BAEMI04EAQwlOh4EAQwnOkEmBAEMMzpBPQQBDDE6JAQBDCk6OAQBDD86KwQBDCk6TgQBDCk6IAQCAShwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2Evc3NhX3RyYWNlci5kYXJ0Q3Nka3Jvb3Q6L3Nkay9saWIvX2ludGVybmFsL2pzX3J1bnRpbWUvbGliL3NoYXJlZC9yZWNpcGVfc3ludGF4LmRhcnSk1C8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gQ29uc3RhbnRzIGFuZCBwcmVkaWNhdGVzIHVzZWQgZm9yIGVuY29kaW5nIGFuZCBkZWNvZGluZyB0eXBlIHJlY2lwZXMuCi8vLwovLy8gVGhpcyBsaWJyYXJ5IGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBjb21waWxlciBhbmQgdGhlIHJ1bnRpbWUgc3lzdGVtLgpsaWJyYXJ5IGRhcnQyanMuX3JlY2lwZV9zeW50YXg7CgphYnN0cmFjdCBjbGFzcyBSZWNpcGUgewogIFJlY2lwZS5fKCk7CgogIC8vIE9wZXJhdG9ycy4KCiAgc3RhdGljIGNvbnN0IGludCBzZXBhcmF0b3IgPSBfY29tbWE7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzZXBhcmF0b3JTdHJpbmcgPSBfY29tbWFTdHJpbmc7CgogIHN0YXRpYyBjb25zdCBpbnQgdG9UeXBlID0gX3NlbWljb2xvbjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHRvVHlwZVN0cmluZyA9IF9zZW1pY29sb25TdHJpbmc7CgogIHN0YXRpYyBjb25zdCBpbnQgcHVzaER5bmFtaWMgPSBfYXQ7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBwdXNoRHluYW1pY1N0cmluZyA9IF9hdFN0cmluZzsKICBzdGF0aWMgY29uc3QgaW50IHB1c2hWb2lkID0gX3RpbGRlOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgcHVzaFZvaWRTdHJpbmcgPSBfdGlsZGVTdHJpbmc7CgogIHN0YXRpYyBjb25zdCBpbnQgd3JhcFN0YXIgPSBfYXN0ZXJpc2s7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB3cmFwU3RhclN0cmluZyA9IF9hc3Rlcmlza1N0cmluZzsKICBzdGF0aWMgY29uc3QgaW50IHdyYXBRdWVzdGlvbiA9IF9xdWVzdGlvbjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHdyYXBRdWVzdGlvblN0cmluZyA9IF9xdWVzdGlvblN0cmluZzsKICBzdGF0aWMgY29uc3QgaW50IHdyYXBGdXR1cmVPciA9IF9zbGFzaDsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHdyYXBGdXR1cmVPclN0cmluZyA9IF9zbGFzaFN0cmluZzsKCiAgc3RhdGljIGNvbnN0IGludCBzdGFydFR5cGVBcmd1bWVudHMgPSBfbGVzc1RoYW47CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzdGFydFR5cGVBcmd1bWVudHNTdHJpbmcgPSBfbGVzc1RoYW5TdHJpbmc7CiAgc3RhdGljIGNvbnN0IGludCBlbmRUeXBlQXJndW1lbnRzID0gX2dyZWF0ZXJUaGFuOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZW5kVHlwZUFyZ3VtZW50c1N0cmluZyA9IF9ncmVhdGVyVGhhblN0cmluZzsKCiAgc3RhdGljIGNvbnN0IGludCBzdGFydEZ1bmN0aW9uQXJndW1lbnRzID0gX2xlZnRQYXJlbjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHN0YXJ0RnVuY3Rpb25Bcmd1bWVudHNTdHJpbmcgPSBfbGVmdFBhcmVuU3RyaW5nOwogIHN0YXRpYyBjb25zdCBpbnQgZW5kRnVuY3Rpb25Bcmd1bWVudHMgPSBfcmlnaHRQYXJlbjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGVuZEZ1bmN0aW9uQXJndW1lbnRzU3RyaW5nID0gX3JpZ2h0UGFyZW5TdHJpbmc7CiAgc3RhdGljIGNvbnN0IGludCBzdGFydE9wdGlvbmFsR3JvdXAgPSBfbGVmdEJyYWNrZXQ7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBzdGFydE9wdGlvbmFsR3JvdXBTdHJpbmcgPSBfbGVmdEJyYWNrZXRTdHJpbmc7CiAgc3RhdGljIGNvbnN0IGludCBlbmRPcHRpb25hbEdyb3VwID0gX3JpZ2h0QnJhY2tldDsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGVuZE9wdGlvbmFsR3JvdXBTdHJpbmcgPSBfcmlnaHRCcmFja2V0U3RyaW5nOwogIHN0YXRpYyBjb25zdCBpbnQgc3RhcnROYW1lZEdyb3VwID0gX2xlZnRCcmFjZTsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHN0YXJ0TmFtZWRHcm91cFN0cmluZyA9IF9sZWZ0QnJhY2VTdHJpbmc7CiAgc3RhdGljIGNvbnN0IGludCBlbmROYW1lZEdyb3VwID0gX3JpZ2h0QnJhY2U7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBlbmROYW1lZEdyb3VwU3RyaW5nID0gX3JpZ2h0QnJhY2VTdHJpbmc7CiAgc3RhdGljIGNvbnN0IGludCBuYW1lU2VwYXJhdG9yID0gX2NvbG9uOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgbmFtZVNlcGFyYXRvclN0cmluZyA9IF9jb2xvblN0cmluZzsKCiAgc3RhdGljIGNvbnN0IGludCBnZW5lcmljRnVuY3Rpb25UeXBlUGFyYW1ldGVySW5kZXggPSBfY2lyY3VtZmxleDsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGdlbmVyaWNGdW5jdGlvblR5cGVQYXJhbWV0ZXJJbmRleFN0cmluZyA9CiAgICAgIF9jaXJjdW1mbGV4U3RyaW5nOwoKICBzdGF0aWMgY29uc3QgaW50IGV4dGVuc2lvbk9wID0gX2FtcGVyc2FuZDsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGV4dGVuc2lvbk9wU3RyaW5nID0gX2FtcGVyc2FuZFN0cmluZzsKICBzdGF0aWMgY29uc3QgaW50IHB1c2hOZXZlckV4dGVuc2lvbiA9IDA7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBwdXNoTmV2ZXJFeHRlbnNpb25TdHJpbmcgPSAnJHB1c2hOZXZlckV4dGVuc2lvbic7CiAgc3RhdGljIGNvbnN0IGludCBwdXNoQW55RXh0ZW5zaW9uID0gMTsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHB1c2hBbnlFeHRlbnNpb25TdHJpbmcgPSAnJHB1c2hBbnlFeHRlbnNpb24nOwoKICAvLyBOdW1iZXIgYW5kIG5hbWUgY29tcG9uZW50cy4KCiAgc3RhdGljIGJvb2wgaXNEaWdpdChpbnQgY29kZSkgPT4gY29kZSA+PSBfZGlnaXQwICYmIGNvZGUgPD0gX2RpZ2l0OTsKICBzdGF0aWMgaW50IGRpZ2l0VmFsdWUoaW50IGNvZGUpID0+IGNvZGUgLSBfZGlnaXQwOwoKICBzdGF0aWMgYm9vbCBpc0lkZW50aWZpZXJTdGFydChpbnQgY2gpID0+CiAgICAgICgoKGNoIHwgMzIpIC0gX2xvd2VyY2FzZUEpICYgMHhmZmZmKSA8IDI2IHx8CiAgICAgIChjaCA9PSBfdW5kZXJzY29yZSkgfHwKICAgICAgKGNoID09IF9kb2xsYXIpOwoKICBzdGF0aWMgY29uc3QgaW50IHBlcmlvZCA9IF9wZXJpb2Q7CgogIC8vIFByaXZhdGUgbmFtZXMuCgogIHN0YXRpYyBjb25zdCBpbnQgX2Zvcm1mZWVkID0gMHgwQzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9mb3JtZmVlZFN0cmluZyA9ICdcZic7CgogIHN0YXRpYyBjb25zdCBpbnQgX3NwYWNlID0gMHgyMDsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9zcGFjZVN0cmluZyA9ICcgJzsKICBzdGF0aWMgY29uc3QgaW50IF9leGNsYW1hdGlvbiA9IDB4MjE7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfZXhjbGFtYXRpb25TdHJpbmcgPSAnISc7CiAgc3RhdGljIGNvbnN0IGludCBfaGFzaCA9IDB4MjM7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfaGFzaFN0cmluZyA9ICcjJzsKICBzdGF0aWMgY29uc3QgaW50IF9kb2xsYXIgPSAweDI0OwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2RvbGxhclN0cmluZyA9IHInJCc7CiAgc3RhdGljIGNvbnN0IGludCBfcGVyY2VudCA9IDB4MjU7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfcGVyY2VudFN0cmluZyA9ICclJzsKICBzdGF0aWMgY29uc3QgaW50IF9hbXBlcnNhbmQgPSAweDI2OwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2FtcGVyc2FuZFN0cmluZyA9ICcmJzsKICBzdGF0aWMgY29uc3QgaW50IF9hcG9zdHJvcGhlID0gMHgyNzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9hcG9zdHJvcGhlU3RyaW5nID0gIiciOwogIHN0YXRpYyBjb25zdCBpbnQgX2xlZnRQYXJlbiA9IDB4Mjg7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfbGVmdFBhcmVuU3RyaW5nID0gJygnOwogIHN0YXRpYyBjb25zdCBpbnQgX3JpZ2h0UGFyZW4gPSAweDI5OwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3JpZ2h0UGFyZW5TdHJpbmcgPSAnKSc7CiAgc3RhdGljIGNvbnN0IGludCBfYXN0ZXJpc2sgPSAweDJBOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2FzdGVyaXNrU3RyaW5nID0gJyonOwogIHN0YXRpYyBjb25zdCBpbnQgX3BsdXMgPSAweDJCOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3BsdXNTdHJpbmcgPSAnKyc7CiAgc3RhdGljIGNvbnN0IGludCBfY29tbWEgPSAweDJDOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2NvbW1hU3RyaW5nID0gJywnOwogIHN0YXRpYyBjb25zdCBpbnQgX21pbnVzID0gMHgyRDsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9taW51c1N0cmluZyA9ICctJzsKICBzdGF0aWMgY29uc3QgaW50IF9wZXJpb2QgPSAweDJFOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3BlcmlvZFN0cmluZyA9ICcuJzsKICBzdGF0aWMgY29uc3QgaW50IF9zbGFzaCA9IDB4MkY7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfc2xhc2hTdHJpbmcgPSAnLyc7CgogIHN0YXRpYyBjb25zdCBpbnQgX2RpZ2l0MCA9IDB4MzA7CiAgc3RhdGljIGNvbnN0IGludCBfZGlnaXQ5ID0gMHgzOTsKCiAgc3RhdGljIGNvbnN0IGludCBfY29sb24gPSAweDNBOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2NvbG9uU3RyaW5nID0gJzonOwogIHN0YXRpYyBjb25zdCBpbnQgX3NlbWljb2xvbiA9IDB4M0I7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfc2VtaWNvbG9uU3RyaW5nID0gJzsnOwogIHN0YXRpYyBjb25zdCBpbnQgX2xlc3NUaGFuID0gMHgzQzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9sZXNzVGhhblN0cmluZyA9ICc8JzsKICBzdGF0aWMgY29uc3QgaW50IF9lcXVhbHMgPSAweDNEOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2VxdWFsc1N0cmluZyA9ICc9JzsKICBzdGF0aWMgY29uc3QgaW50IF9ncmVhdGVyVGhhbiA9IDB4M0U7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfZ3JlYXRlclRoYW5TdHJpbmcgPSAnPic7CiAgc3RhdGljIGNvbnN0IGludCBfcXVlc3Rpb24gPSAweDNGOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX3F1ZXN0aW9uU3RyaW5nID0gJz8nOwogIHN0YXRpYyBjb25zdCBpbnQgX2F0ID0gMHg0MDsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9hdFN0cmluZyA9ICdAJzsKCiAgc3RhdGljIGNvbnN0IGludCBfdXBwZXJjYXNlQSA9IDB4NDE7CiAgc3RhdGljIGNvbnN0IGludCBfdXBwZXJjYXNlWiA9IDB4NUE7CgogIHN0YXRpYyBjb25zdCBpbnQgX2xlZnRCcmFja2V0ID0gMHg1QjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9sZWZ0QnJhY2tldFN0cmluZyA9ICdbJzsKICBzdGF0aWMgY29uc3QgaW50IF9iYWNrc2xhc2ggPSAweDVDOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2JhY2tzbGFzaFN0cmluZyA9IHInXCc7CiAgc3RhdGljIGNvbnN0IGludCBfcmlnaHRCcmFja2V0ID0gMHg1RDsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9yaWdodEJyYWNrZXRTdHJpbmcgPSAnXSc7CiAgc3RhdGljIGNvbnN0IGludCBfY2lyY3VtZmxleCA9IDB4NUU7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfY2lyY3VtZmxleFN0cmluZyA9ICdeJzsKICBzdGF0aWMgY29uc3QgaW50IF91bmRlcnNjb3JlID0gMHg1RjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF91bmRlcnNjb3JlU3RyaW5nID0gJ18nOwogIHN0YXRpYyBjb25zdCBpbnQgX2JhY2t0aWNrID0gMHg2MDsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9iYWNrdGlja1N0cmluZyA9ICdgJzsKCiAgc3RhdGljIGNvbnN0IGludCBfbG93ZXJjYXNlQSA9IDB4NjE7CiAgc3RhdGljIGNvbnN0IGludCBfbG93ZXJjYXNlWiA9IDB4N0E7CgogIHN0YXRpYyBjb25zdCBpbnQgX2xlZnRCcmFjZSA9IDB4N0I7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfbGVmdEJyYWNlU3RyaW5nID0gJ3snOwogIHN0YXRpYyBjb25zdCBpbnQgX3ZlcnRpY2FsID0gMHg3QzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF92ZXJ0aWNhbFN0cmluZyA9ICd8JzsKICBzdGF0aWMgY29uc3QgaW50IF9yaWdodEJyYWNlID0gMHg3RDsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9yaWdodEJyYWNlU3RyaW5nID0gJ30nOwogIHN0YXRpYyBjb25zdCBpbnQgX3RpbGRlID0gMHg3RTsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF90aWxkZVN0cmluZyA9ICd+JzsKCiAgc3RhdGljIHZvaWQgdGVzdEVxdWl2YWxlbmNlKCkgewogICAgdm9pZCB0ZXN0KFN0cmluZyBsYWJlbCwgaW50IGNoYXJDb2RlLCBTdHJpbmcgc3RyKSB7CiAgICAgIGlmIChTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKSAhPSBzdHIpIHsKICAgICAgICB0aHJvdyBTdGF0ZUVycm9yKCIkbGFiZWw6IFN0cmluZy5mcm9tQ2hhckNvZGUoJGNoYXJDb2RlKSAhPSAkc3RyIik7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIHRlc3RFeHRlbnNpb24oU3RyaW5nIGxhYmVsLCBpbnQgb3AsIFN0cmluZyBzdHIpIHsKICAgICAgaWYgKCckb3AnICE9IHN0cikgewogICAgICAgIHRocm93IFN0YXRlRXJyb3IoIiRsYWJlbDogJG9wLnRvU3RyaW5nKCkgIT0gJHN0ciIpOwogICAgICB9CiAgICB9CgogICAgdGVzdCgic2VwYXJhdG9yIiwgc2VwYXJhdG9yLCBzZXBhcmF0b3JTdHJpbmcpOwogICAgdGVzdCgidG9UeXBlIiwgdG9UeXBlLCB0b1R5cGVTdHJpbmcpOwogICAgdGVzdCgicHVzaER5bmFtaWMiLCBwdXNoRHluYW1pYywgcHVzaER5bmFtaWNTdHJpbmcpOwogICAgdGVzdCgicHVzaFZvaWQiLCBwdXNoVm9pZCwgcHVzaFZvaWRTdHJpbmcpOwogICAgdGVzdCgid3JhcFN0YXIiLCB3cmFwU3Rhciwgd3JhcFN0YXJTdHJpbmcpOwogICAgdGVzdCgid3JhcFF1ZXN0aW9uIiwgd3JhcFF1ZXN0aW9uLCB3cmFwUXVlc3Rpb25TdHJpbmcpOwogICAgdGVzdCgid3JhcEZ1dHVyZU9yIiwgd3JhcEZ1dHVyZU9yLCB3cmFwRnV0dXJlT3JTdHJpbmcpOwogICAgdGVzdCgic3RhcnRUeXBlQXJndW1lbnRzIiwgc3RhcnRUeXBlQXJndW1lbnRzLCBzdGFydFR5cGVBcmd1bWVudHNTdHJpbmcpOwogICAgdGVzdCgiZW5kVHlwZUFyZ3VtZW50cyIsIGVuZFR5cGVBcmd1bWVudHMsIGVuZFR5cGVBcmd1bWVudHNTdHJpbmcpOwogICAgdGVzdCgic3RhcnRGdW5jdGlvbkFyZ3VtZW50cyIsIHN0YXJ0RnVuY3Rpb25Bcmd1bWVudHMsCiAgICAgICAgc3RhcnRGdW5jdGlvbkFyZ3VtZW50c1N0cmluZyk7CiAgICB0ZXN0KCJlbmRGdW5jdGlvbkFyZ3VtZW50cyIsIGVuZEZ1bmN0aW9uQXJndW1lbnRzLAogICAgICAgIGVuZEZ1bmN0aW9uQXJndW1lbnRzU3RyaW5nKTsKICAgIHRlc3QoInN0YXJ0T3B0aW9uYWxHcm91cCIsIHN0YXJ0T3B0aW9uYWxHcm91cCwgc3RhcnRPcHRpb25hbEdyb3VwU3RyaW5nKTsKICAgIHRlc3QoImVuZE9wdGlvbmFsR3JvdXAiLCBlbmRPcHRpb25hbEdyb3VwLCBlbmRPcHRpb25hbEdyb3VwU3RyaW5nKTsKICAgIHRlc3QoInN0YXJ0TmFtZWRHcm91cCIsIHN0YXJ0TmFtZWRHcm91cCwgc3RhcnROYW1lZEdyb3VwU3RyaW5nKTsKICAgIHRlc3QoImVuZE5hbWVkR3JvdXAiLCBlbmROYW1lZEdyb3VwLCBlbmROYW1lZEdyb3VwU3RyaW5nKTsKICAgIHRlc3QoIm5hbWVTZXBhcmF0b3IiLCBuYW1lU2VwYXJhdG9yLCBuYW1lU2VwYXJhdG9yU3RyaW5nKTsKICAgIHRlc3QoImdlbmVyaWNGdW5jdGlvblR5cGVQYXJhbWV0ZXJJbmRleCIsIGdlbmVyaWNGdW5jdGlvblR5cGVQYXJhbWV0ZXJJbmRleCwKICAgICAgICBnZW5lcmljRnVuY3Rpb25UeXBlUGFyYW1ldGVySW5kZXhTdHJpbmcpOwogICAgdGVzdCgiZXh0ZW5zaW9uT3AiLCBleHRlbnNpb25PcCwgZXh0ZW5zaW9uT3BTdHJpbmcpOwogICAgdGVzdEV4dGVuc2lvbigKICAgICAgICAicHVzaE5ldmVyRXh0ZW5zaW9uIiwgcHVzaE5ldmVyRXh0ZW5zaW9uLCBwdXNoTmV2ZXJFeHRlbnNpb25TdHJpbmcpOwogICAgdGVzdEV4dGVuc2lvbigicHVzaEFueUV4dGVuc2lvbiIsIHB1c2hBbnlFeHRlbnNpb24sIHB1c2hBbnlFeHRlbnNpb25TdHJpbmcpOwoKICAgIHRlc3QoIl9mb3JtZmVlZCIsIF9mb3JtZmVlZCwgX2Zvcm1mZWVkU3RyaW5nKTsKICAgIHRlc3QoIl9zcGFjZSIsIF9zcGFjZSwgX3NwYWNlU3RyaW5nKTsKICAgIHRlc3QoIl9leGNsYW1hdGlvbiIsIF9leGNsYW1hdGlvbiwgX2V4Y2xhbWF0aW9uU3RyaW5nKTsKICAgIHRlc3QoIl9oYXNoIiwgX2hhc2gsIF9oYXNoU3RyaW5nKTsKICAgIHRlc3QoIl9kb2xsYXIiLCBfZG9sbGFyLCBfZG9sbGFyU3RyaW5nKTsKICAgIHRlc3QoIl9wZXJjZW50IiwgX3BlcmNlbnQsIF9wZXJjZW50U3RyaW5nKTsKICAgIHRlc3QoIl9hbXBlcnNhbmQiLCBfYW1wZXJzYW5kLCBfYW1wZXJzYW5kU3RyaW5nKTsKICAgIHRlc3QoIl9hcG9zdHJvcGhlIiwgX2Fwb3N0cm9waGUsIF9hcG9zdHJvcGhlU3RyaW5nKTsKICAgIHRlc3QoIl9sZWZ0UGFyZW4iLCBfbGVmdFBhcmVuLCBfbGVmdFBhcmVuU3RyaW5nKTsKICAgIHRlc3QoIl9yaWdodFBhcmVuIiwgX3JpZ2h0UGFyZW4sIF9yaWdodFBhcmVuU3RyaW5nKTsKICAgIHRlc3QoIl9hc3RlcmlzayIsIF9hc3RlcmlzaywgX2FzdGVyaXNrU3RyaW5nKTsKICAgIHRlc3QoIl9wbHVzIiwgX3BsdXMsIF9wbHVzU3RyaW5nKTsKICAgIHRlc3QoIl9jb21tYSIsIF9jb21tYSwgX2NvbW1hU3RyaW5nKTsKICAgIHRlc3QoIl9taW51cyIsIF9taW51cywgX21pbnVzU3RyaW5nKTsKICAgIHRlc3QoIl9wZXJpb2QiLCBfcGVyaW9kLCBfcGVyaW9kU3RyaW5nKTsKICAgIHRlc3QoIl9zbGFzaCIsIF9zbGFzaCwgX3NsYXNoU3RyaW5nKTsKICAgIHRlc3QoIl9jb2xvbiIsIF9jb2xvbiwgX2NvbG9uU3RyaW5nKTsKICAgIHRlc3QoIl9zZW1pY29sb24iLCBfc2VtaWNvbG9uLCBfc2VtaWNvbG9uU3RyaW5nKTsKICAgIHRlc3QoIl9sZXNzVGhhbiIsIF9sZXNzVGhhbiwgX2xlc3NUaGFuU3RyaW5nKTsKICAgIHRlc3QoIl9lcXVhbHMiLCBfZXF1YWxzLCBfZXF1YWxzU3RyaW5nKTsKICAgIHRlc3QoIl9ncmVhdGVyVGhhbiIsIF9ncmVhdGVyVGhhbiwgX2dyZWF0ZXJUaGFuU3RyaW5nKTsKICAgIHRlc3QoIl9xdWVzdGlvbiIsIF9xdWVzdGlvbiwgX3F1ZXN0aW9uU3RyaW5nKTsKICAgIHRlc3QoIl9hdCIsIF9hdCwgX2F0U3RyaW5nKTsKICAgIHRlc3QoIl9sZWZ0QnJhY2tldCIsIF9sZWZ0QnJhY2tldCwgX2xlZnRCcmFja2V0U3RyaW5nKTsKICAgIHRlc3QoIl9iYWNrc2xhc2giLCBfYmFja3NsYXNoLCBfYmFja3NsYXNoU3RyaW5nKTsKICAgIHRlc3QoIl9yaWdodEJyYWNrZXQiLCBfcmlnaHRCcmFja2V0LCBfcmlnaHRCcmFja2V0U3RyaW5nKTsKICAgIHRlc3QoIl9jaXJjdW1mbGV4IiwgX2NpcmN1bWZsZXgsIF9jaXJjdW1mbGV4U3RyaW5nKTsKICAgIHRlc3QoIl91bmRlcnNjb3JlIiwgX3VuZGVyc2NvcmUsIF91bmRlcnNjb3JlU3RyaW5nKTsKICAgIHRlc3QoIl9iYWNrdGljayIsIF9iYWNrdGljaywgX2JhY2t0aWNrU3RyaW5nKTsKICAgIHRlc3QoIl9sZWZ0QnJhY2UiLCBfbGVmdEJyYWNlLCBfbGVmdEJyYWNlU3RyaW5nKTsKICAgIHRlc3QoIl92ZXJ0aWNhbCIsIF92ZXJ0aWNhbCwgX3ZlcnRpY2FsU3RyaW5nKTsKICAgIHRlc3QoIl9yaWdodEJyYWNlIiwgX3JpZ2h0QnJhY2UsIF9yaWdodEJyYWNlU3RyaW5nKTsKICAgIHRlc3QoIl90aWxkZSIsIF90aWxkZSwgX3RpbGRlU3RyaW5nKTsKICB9Cn0KgOgATk48AUoESCABGA4BEAEnNgEoNwEmNSY1ASk4LTwqOQEzQjRDAThHN0Y2RTVEMUAwPys6AURAGQEtPCtIKUQBIQFHNQErMx0XASUBFAElLgEiKigwISkjLCQsJi4nLyYuJy8lLSEpIioiKiMrIioBIyMBIiomLiUtIysoMCUtHycBJycBKDAmLykxJy8nLyUtAScnASYuJS0nLyIqASI4MkwIBgE7GjwIBgEzKjkwMDw8Tkg7JzclTkhFPz9RMjkTTVEBMyo8Jy0wNjk2OTMnKiotKio2My08MyE8Nj85OTM2MzkqBAIBLHBhY2thZ2U6anNfcnVudGltZS9zaGFyZWQvcmVjaXBlX3N5bnRheC5kYXJ0QnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvY2xhc3Nfc3R1Yl9nZW5lcmF0b3IuZGFydLlQLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLmNsYXNzX3N0dWJfZ2VuZXJhdG9yOwoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBJZGVudGlmaWVycywgU2VsZWN0b3JzOwppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzQXN0OwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIHNob3cganM7CmltcG9ydCAnLi4vanNfYmFja2VuZC9maWVsZF9hbmFseXNpcy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnIHNob3cgTmFtZXI7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnIHNob3cgSW50ZXJjZXB0b3JEYXRhOwppbXBvcnQgJy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfYnVpbGRlci5kYXJ0JyBzaG93IFNlbGVjdG9yQ29uc3RyYWludHM7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CgppbXBvcnQgJ2NvZGVfZW1pdHRlcl90YXNrLmRhcnQnOwppbXBvcnQgJ21vZGVsLmRhcnQnOwoKY2xhc3MgQ2xhc3NTdHViR2VuZXJhdG9yIHsKICBmaW5hbCBOYW1lciBfbmFtZXI7CiAgZmluYWwgQ29kZWdlbldvcmxkIF9jb2RlZ2VuV29ybGQ7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBib29sIGVuYWJsZU1pbmlmaWNhdGlvbjsKICBmaW5hbCBFbWl0dGVyIF9lbWl0dGVyOwogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKCiAgQ2xhc3NTdHViR2VuZXJhdG9yKHRoaXMuX2VtaXR0ZXIsIHRoaXMuX2NvbW1vbkVsZW1lbnRzLCB0aGlzLl9uYW1lciwKICAgICAgdGhpcy5fY29kZWdlbldvcmxkLCB0aGlzLl9jbG9zZWRXb3JsZCwKICAgICAge3RoaXMuZW5hYmxlTWluaWZpY2F0aW9ufSk7CgogIEludGVyY2VwdG9yRGF0YSBnZXQgX2ludGVyY2VwdG9yRGF0YSA9PiBfY2xvc2VkV29ybGQuaW50ZXJjZXB0b3JEYXRhOwoKICBqc0FzdC5FeHByZXNzaW9uIGdlbmVyYXRlQ2xhc3NDb25zdHJ1Y3RvcigKICAgICAgQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50LCBMaXN0PGpzQXN0Lk5hbWU+IGZpZWxkcywgYm9vbCBoYXNSdGlGaWVsZCkgewogICAgLy8gVE9ETyhzcmEpOiBJbXBsZW1lbnQgcGxhY2Vob2xkZXJzIGluIFZhcmlhYmxlRGVjbGFyYXRpb24gcG9zaXRpb246CiAgICAvLwogICAgLy8gICAgIFN0cmluZyBjb25zdHJ1Y3Rvck5hbWUgPSBuYW1lci5nZXROYW1lT2ZDbGFzcyhjbGFzc0VsZW1lbnQpOwogICAgLy8gICAgIHJldHVybiBqcy5zdGF0ZW1lbnQoJ2Z1bmN0aW9uICMoIykgeyAjOyB9JywKICAgIC8vICAgICAgICBbIGNvbnN0cnVjdG9yTmFtZSwgZmllbGRzLAogICAgLy8gICAgICAgICAgICBmaWVsZHMubWFwKAogICAgLy8gICAgICAgICAgICAgICAgKG5hbWUpID0+IGpzKCd0aGlzLiMgPSAjJywgW25hbWUsIG5hbWVdKSldKSk7CiAgICBkeW5hbWljIHR5cGVQYXJhbWV0ZXJzID0gY29uc3QgPGpzQXN0LlBhcmFtZXRlcj5bXTsKICAgIGR5bmFtaWMgdHlwZUluaXRzID0gY29uc3QgPGpzQXN0LkV4cHJlc3Npb24+W107CiAgICBpZiAoaGFzUnRpRmllbGQpIHsKICAgICAgZHluYW1pYyBydGlOYW1lID0gX25hbWVyLnJ0aUZpZWxkSnNOYW1lOwogICAgICB0eXBlUGFyYW1ldGVycyA9IHJ0aU5hbWU7CiAgICAgIHR5cGVJbml0cyA9IGpzKCd0aGlzLiMgPSAjJywgW3J0aU5hbWUsIHJ0aU5hbWVdKTsKICAgIH0KICAgIExpc3Q8anNBc3QuUGFyYW1ldGVyPiBwYXJhbWV0ZXJzID0gbmV3IExpc3Q8anNBc3QuUGFyYW1ldGVyPi5nZW5lcmF0ZSgKICAgICAgICBmaWVsZHMubGVuZ3RoLCAoaSkgPT4gbmV3IGpzQXN0LlBhcmFtZXRlcigndCRpJykpOwogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBmaWVsZEluaXRpYWxpemVycyA9CiAgICAgICAgbmV3IExpc3Q8anNBc3QuRXhwcmVzc2lvbj4uZ2VuZXJhdGUoZmllbGRzLmxlbmd0aCwgKGkpIHsKICAgICAgcmV0dXJuIGpzKCd0aGlzLiMgPSAjJywgW2ZpZWxkc1tpXSwgcGFyYW1ldGVyc1tpXV0pOwogICAgfSk7CiAgICByZXR1cm4ganMoJ2Z1bmN0aW9uKCMsICMpIHsgIzsgIzsgdGhpcy4jKCk7fScsIFsKICAgICAgcGFyYW1ldGVycywKICAgICAgdHlwZVBhcmFtZXRlcnMsCiAgICAgIGZpZWxkSW5pdGlhbGl6ZXJzLAogICAgICB0eXBlSW5pdHMsCiAgICAgIF9uYW1lci5maXhlZE5hbWVzLmRlZmVycmVkQWN0aW9uCiAgICBdKTsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gZ2VuZXJhdGVHZXR0ZXIoTWVtYmVyRW50aXR5IG1lbWJlciwganNBc3QuTmFtZSBmaWVsZE5hbWUpIHsKICAgIENsYXNzRW50aXR5IGNscyA9IG1lbWJlci5lbmNsb3NpbmdDbGFzczsKICAgIFN0cmluZyByZWNlaXZlciA9CiAgICAgICAgX2ludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkQ2xhc3MoY2xzKSA/ICdyZWNlaXZlcicgOiAndGhpcyc7CiAgICBMaXN0PFN0cmluZz4gYXJncyA9CiAgICAgICAgX2ludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkTWV0aG9kKG1lbWJlcikgPyBbJ3JlY2VpdmVyJ10gOiBbXTsKICAgIHJldHVybiBqcygnZnVuY3Rpb24oIykgeyByZXR1cm4gIy4jIH0nLCBbYXJncywgcmVjZWl2ZXIsIGZpZWxkTmFtZV0pOwogIH0KCiAganNBc3QuRXhwcmVzc2lvbiBnZW5lcmF0ZVNldHRlcihNZW1iZXJFbnRpdHkgbWVtYmVyLCBqc0FzdC5OYW1lIGZpZWxkTmFtZSkgewogICAgQ2xhc3NFbnRpdHkgY2xzID0gbWVtYmVyLmVuY2xvc2luZ0NsYXNzOwogICAgU3RyaW5nIHJlY2VpdmVyID0KICAgICAgICBfaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWRDbGFzcyhjbHMpID8gJ3JlY2VpdmVyJyA6ICd0aGlzJzsKICAgIExpc3Q8U3RyaW5nPiBhcmdzID0KICAgICAgICBfaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWRNZXRob2QobWVtYmVyKSA/IFsncmVjZWl2ZXInXSA6IFtdOwogICAgLy8gVE9ETyhmbG9pdHNjaCk6IHJlbW92ZSAncmV0dXJuJz8KICAgIHJldHVybiBqcygKICAgICAgICAnZnVuY3Rpb24oIywgdikgeyByZXR1cm4gIy4jID0gdjsgfScsIFthcmdzLCByZWNlaXZlciwgZmllbGROYW1lXSk7CiAgfQoKICAvLy8gRG9jdW1lbnRhdGlvbiB3YW50ZWQgLS0gam9obm5pd2ludGhlcgogIC8vLwogIC8vLyBJbnZhcmlhbnQ6IFttZW1iZXJdIG11c3QgYmUgYSBkZWNsYXJhdGlvbiBlbGVtZW50LgogIE1hcDxqc0FzdC5OYW1lLCBqc0FzdC5FeHByZXNzaW9uPiBnZW5lcmF0ZUNhbGxTdHVic0ZvckdldHRlcigKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciwgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBzZWxlY3RvcnMpIHsKICAgIC8vIElmIHRoZSBtZXRob2QgaXMgaW50ZXJjZXB0ZWQsIHRoZSBzdHViIGdldHMgdGhlCiAgICAvLyByZWNlaXZlciBleHBsaWNpdGx5IGFuZCB3ZSBuZWVkIHRvIHBhc3MgaXQgdG8gdGhlIGdldHRlciBjYWxsLgogICAgYm9vbCBpc0ludGVyY2VwdGVkTWV0aG9kID0gX2ludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkTWV0aG9kKG1lbWJlcik7CiAgICBib29sIGlzSW50ZXJjZXB0ZWRDbGFzcyA9CiAgICAgICAgX2ludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkQ2xhc3MobWVtYmVyLmVuY2xvc2luZ0NsYXNzKTsKCiAgICBjb25zdCBTdHJpbmcgcmVjZWl2ZXJBcmd1bWVudE5hbWUgPSByJyRyZWNlaXZlcic7CgogICAganNBc3QuRXhwcmVzc2lvbiBidWlsZEdldHRlcigpIHsKICAgICAganNBc3QuRXhwcmVzc2lvbiByZWNlaXZlciA9CiAgICAgICAgICBqcyhpc0ludGVyY2VwdGVkQ2xhc3MgPyByZWNlaXZlckFyZ3VtZW50TmFtZSA6ICd0aGlzJyk7CiAgICAgIGlmIChtZW1iZXIuaXNHZXR0ZXIpIHsKICAgICAgICBqc0FzdC5OYW1lIGdldHRlck5hbWUgPSBfbmFtZXIuZ2V0dGVyRm9yRWxlbWVudChtZW1iZXIpOwogICAgICAgIGlmIChpc0ludGVyY2VwdGVkTWV0aG9kKSB7CiAgICAgICAgICByZXR1cm4ganMoJ3RoaXMuIygjKScsIFtnZXR0ZXJOYW1lLCByZWNlaXZlcl0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4ganMoJyMuIygpJywgW3JlY2VpdmVyLCBnZXR0ZXJOYW1lXSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgRmllbGRBbmFseXNpc0RhdGEgZmllbGREYXRhID0KICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKG1lbWJlcik7CiAgICAgICAgaWYgKGZpZWxkRGF0YS5pc0VmZmVjdGl2ZWx5Q29uc3RhbnQpIHsKICAgICAgICAgIHJldHVybiBfZW1pdHRlci5jb25zdGFudFJlZmVyZW5jZShmaWVsZERhdGEuY29uc3RhbnRWYWx1ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGpzQXN0Lk5hbWUgZmllbGROYW1lID0gX25hbWVyLmluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWUobWVtYmVyKTsKICAgICAgICAgIHJldHVybiBqcygnIy4jJywgW3JlY2VpdmVyLCBmaWVsZE5hbWVdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBNYXA8anNBc3QuTmFtZSwganNBc3QuRXhwcmVzc2lvbj4gZ2VuZXJhdGVkU3R1YnMgPQogICAgICAgIDxqc0FzdC5OYW1lLCBqc0FzdC5FeHByZXNzaW9uPnt9OwoKICAgIC8vIFR3byBzZWxlY3RvcnMgbWF5IG1hdGNoIGJ1dCBkaWZmZXIgb25seSBpbiB0eXBlLiAgVG8gYXZvaWQgZ2VuZXJhdGluZwogICAgLy8gaWRlbnRpY2FsIHN0dWJzIGZvciBlYWNoIHdlIHRyYWNrIHVudHlwZWQgc2VsZWN0b3JzIHdoaWNoIGFscmVhZHkgaGF2ZQogICAgLy8gc3R1YnMuCiAgICBTZXQ8U2VsZWN0b3I+IGdlbmVyYXRlZFNlbGVjdG9ycyA9IG5ldyBTZXQ8U2VsZWN0b3I+KCk7CiAgICBmb3IgKFNlbGVjdG9yIHNlbGVjdG9yIGluIHNlbGVjdG9ycy5rZXlzKSB7CiAgICAgIGlmIChnZW5lcmF0ZWRTZWxlY3RvcnMuY29udGFpbnMoc2VsZWN0b3IpKSBjb250aW51ZTsKICAgICAgaWYgKCFzZWxlY3Rvci5hcHBsaWVzVW5uYW1lZChtZW1iZXIpKSBjb250aW51ZTsKICAgICAgaWYgKHNlbGVjdG9yc1tzZWxlY3Rvcl0KICAgICAgICAgIC5jYW5IaXQobWVtYmVyLCBzZWxlY3Rvci5tZW1iZXJOYW1lLCBfY2xvc2VkV29ybGQpKSB7CiAgICAgICAgZ2VuZXJhdGVkU2VsZWN0b3JzLmFkZChzZWxlY3Rvcik7CgogICAgICAgIGpzQXN0Lk5hbWUgaW52b2NhdGlvbk5hbWUgPSBfbmFtZXIuaW52b2NhdGlvbk5hbWUoc2VsZWN0b3IpOwogICAgICAgIFNlbGVjdG9yIGNhbGxTZWxlY3RvciA9IG5ldyBTZWxlY3Rvci5jYWxsQ2xvc3VyZUZyb20oc2VsZWN0b3IpOwogICAgICAgIGpzQXN0Lk5hbWUgY2xvc3VyZUNhbGxOYW1lID0gX25hbWVyLmludm9jYXRpb25OYW1lKGNhbGxTZWxlY3Rvcik7CgogICAgICAgIExpc3Q8anNBc3QuUGFyYW1ldGVyPiBwYXJhbWV0ZXJzID0gPGpzQXN0LlBhcmFtZXRlcj5bXTsKICAgICAgICBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IDxqc0FzdC5FeHByZXNzaW9uPltdOwogICAgICAgIGlmIChpc0ludGVyY2VwdGVkTWV0aG9kKSB7CiAgICAgICAgICBwYXJhbWV0ZXJzLmFkZChuZXcganNBc3QuUGFyYW1ldGVyKHJlY2VpdmVyQXJndW1lbnROYW1lKSk7CiAgICAgICAgfQoKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNlbGVjdG9yLmFyZ3VtZW50Q291bnQ7IGkrKykgewogICAgICAgICAgU3RyaW5nIG5hbWUgPSAnYXJnJGknOwogICAgICAgICAgcGFyYW1ldGVycy5hZGQobmV3IGpzQXN0LlBhcmFtZXRlcihuYW1lKSk7CiAgICAgICAgICBhcmd1bWVudHMuYWRkKGpzKCcjJywgbmFtZSkpOwogICAgICAgIH0KCiAgICAgICAganNBc3QuRnVuIGZ1bmN0aW9uID0ganMoJ2Z1bmN0aW9uKCMpIHsgcmV0dXJuICMuIygjKTsgfScsCiAgICAgICAgICAgIFtwYXJhbWV0ZXJzLCBidWlsZEdldHRlcigpLCBjbG9zdXJlQ2FsbE5hbWUsIGFyZ3VtZW50c10pOwoKICAgICAgICBnZW5lcmF0ZWRTdHVic1tpbnZvY2F0aW9uTmFtZV0gPSBmdW5jdGlvbjsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBnZW5lcmF0ZWRTdHViczsKICB9CgogIE1hcDxqc0FzdC5OYW1lLCBTZWxlY3Rvcj4gY29tcHV0ZVNlbGVjdG9yc0Zvck5zbUhhbmRsZXJzKCkgewogICAgTWFwPGpzQXN0Lk5hbWUsIFNlbGVjdG9yPiBqc05hbWVzID0gPGpzQXN0Lk5hbWUsIFNlbGVjdG9yPnt9OwoKICAgIC8vIERvIG5vdCBnZW5lcmF0ZSBubyBzdWNoIG1ldGhvZCBoYW5kbGVycyBpZiB0aGVyZSBpcyBubyBjbGFzcy4KICAgIGlmIChfY29kZWdlbldvcmxkLmRpcmVjdGx5SW5zdGFudGlhdGVkQ2xhc3Nlcy5pc0VtcHR5KSB7CiAgICAgIHJldHVybiBqc05hbWVzOwogICAgfQoKICAgIHZvaWQgYWRkTm9TdWNoTWV0aG9kSGFuZGxlcnMoCiAgICAgICAgU3RyaW5nIGlnbm9yZSwgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBzZWxlY3RvcnMpIHsKICAgICAgZm9yIChTZWxlY3RvciBzZWxlY3RvciBpbiBzZWxlY3RvcnMua2V5cykgewogICAgICAgIGlmIChzZWxlY3RvciA9PSBTZWxlY3RvcnMucnVudGltZVR5cGVfIHx8CiAgICAgICAgICAgIHNlbGVjdG9yID09IFNlbGVjdG9ycy5lcXVhbHMgfHwKICAgICAgICAgICAgc2VsZWN0b3IgPT0gU2VsZWN0b3JzLnRvU3RyaW5nXyB8fAogICAgICAgICAgICBzZWxlY3RvciA9PSBTZWxlY3RvcnMuaGFzaENvZGVfIHx8CiAgICAgICAgICAgIHNlbGVjdG9yID09IFNlbGVjdG9ycy5ub1N1Y2hNZXRob2RfKSB7CiAgICAgICAgICAvLyBTa2lwIE9iamVjdCBtZXRob2RzIHNpbmNlIHRoZXNlIG5lZWQgbm8gbm9TdWNoTWV0aG9kIGhhbmRsaW5nCiAgICAgICAgICAvLyByZWdhcmRsZXNzIG9mIHRoZSBwcmVjaXNpb24gb2YgdGhlIHNlbGVjdG9yIGNvbnN0cmFpbnRzLgogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBTZWxlY3RvckNvbnN0cmFpbnRzIG1hc2tTZXQgPSBzZWxlY3RvcnNbc2VsZWN0b3JdOwogICAgICAgIGlmIChtYXNrU2V0Lm5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoc2VsZWN0b3IsIF9jbG9zZWRXb3JsZCkpIHsKICAgICAgICAgIGpzQXN0Lk5hbWUganNOYW1lID0gX25hbWVyLmludm9jYXRpb25NaXJyb3JJbnRlcm5hbE5hbWUoc2VsZWN0b3IpOwogICAgICAgICAganNOYW1lc1tqc05hbWVdID0gc2VsZWN0b3I7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgX2NvZGVnZW5Xb3JsZC5mb3JFYWNoSW52b2tlZE5hbWUoYWRkTm9TdWNoTWV0aG9kSGFuZGxlcnMpOwogICAgX2NvZGVnZW5Xb3JsZC5mb3JFYWNoSW52b2tlZEdldHRlcihhZGROb1N1Y2hNZXRob2RIYW5kbGVycyk7CiAgICBfY29kZWdlbldvcmxkLmZvckVhY2hJbnZva2VkU2V0dGVyKGFkZE5vU3VjaE1ldGhvZEhhbmRsZXJzKTsKICAgIHJldHVybiBqc05hbWVzOwogIH0KCiAgU3R1Yk1ldGhvZCBnZW5lcmF0ZVN0dWJGb3JOb1N1Y2hNZXRob2QoanNBc3QuTmFtZSBuYW1lLCBTZWxlY3RvciBzZWxlY3RvcikgewogICAgLy8gVmFsdWVzIG1hdGNoIEpTSW52b2NhdGlvbk1pcnJvciBpbiBqcy1oZWxwZXIgbGlicmFyeS4KICAgIGludCB0eXBlID0gc2VsZWN0b3IuaW52b2NhdGlvbk1pcnJvcktpbmQ7CiAgICBMaXN0PFN0cmluZz4gcGFyYW1ldGVyTmFtZXMgPQogICAgICAgIG5ldyBMaXN0LmdlbmVyYXRlKHNlbGVjdG9yLmFyZ3VtZW50Q291bnQsIChpKSA9PiAnXCQkaScpICsKICAgICAgICAgICAgbmV3IExpc3QuZ2VuZXJhdGUoc2VsZWN0b3IudHlwZUFyZ3VtZW50Q291bnQsIChpKSA9PiAnXCRUJHtpICsgMX0nKTsKCiAgICBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGFyZ05hbWVzID0gc2VsZWN0b3IuY2FsbFN0cnVjdHVyZQogICAgICAgIC5nZXRPcmRlcmVkTmFtZWRBcmd1bWVudHMoKQogICAgICAgIC5tYXAoKFN0cmluZyBuYW1lKSA9PiBqcy5zdHJpbmcobmFtZSkpCiAgICAgICAgLnRvTGlzdCgpOwoKICAgIGpzQXN0Lk5hbWUgbWV0aG9kTmFtZSA9IF9uYW1lci5hc05hbWUoc2VsZWN0b3IuaW52b2NhdGlvbk1pcnJvck1lbWJlck5hbWUpOwogICAganNBc3QuTmFtZSBpbnRlcm5hbE5hbWUgPSBfbmFtZXIuaW52b2NhdGlvbk1pcnJvckludGVybmFsTmFtZShzZWxlY3Rvcik7CgogICAgYXNzZXJ0KF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZE5hbWUoSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kXykpOwogICAgYm9vbCBpc0ludGVyY2VwdGVkID0gX2ludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkTmFtZShzZWxlY3Rvci5uYW1lKTsKICAgIGpzQXN0LkV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IGpzKCcnJ3RoaXMuI25vU3VjaE1ldGhvZE5hbWUoI3JlY2VpdmVyLAogICAgICAgICAgICAgICAgICAgICNjcmVhdGVJbnZvY2F0aW9uTWlycm9yKCNtZXRob2ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNpbnRlcm5hbE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FyZ3VtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbmFtZWRBcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3R5cGVBcmd1bWVudENvdW50KSknJycsIHsKICAgICAgJ3JlY2VpdmVyJzogaXNJbnRlcmNlcHRlZCA/IHInJHJlY2VpdmVyJyA6ICd0aGlzJywKICAgICAgJ25vU3VjaE1ldGhvZE5hbWUnOiBfbmFtZXIubm9TdWNoTWV0aG9kTmFtZSwKICAgICAgJ2NyZWF0ZUludm9jYXRpb25NaXJyb3InOgogICAgICAgICAgX2VtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoX2NvbW1vbkVsZW1lbnRzLmNyZWF0ZUludm9jYXRpb25NaXJyb3IpLAogICAgICAnbWV0aG9kTmFtZSc6CiAgICAgICAgICBqcy5xdW90ZU5hbWUoZW5hYmxlTWluaWZpY2F0aW9uID8gaW50ZXJuYWxOYW1lIDogbWV0aG9kTmFtZSksCiAgICAgICdpbnRlcm5hbE5hbWUnOiBqcy5xdW90ZU5hbWUoaW50ZXJuYWxOYW1lKSwKICAgICAgJ3R5cGUnOiBqcy5udW1iZXIodHlwZSksCiAgICAgICdhcmd1bWVudHMnOiBuZXcganNBc3QuQXJyYXlJbml0aWFsaXplcigKICAgICAgICAgIHBhcmFtZXRlck5hbWVzLm1hcDxqc0FzdC5FeHByZXNzaW9uPihqcykudG9MaXN0KCkpLAogICAgICAnbmFtZWRBcmd1bWVudHMnOiBuZXcganNBc3QuQXJyYXlJbml0aWFsaXplcihhcmdOYW1lcyksCiAgICAgICd0eXBlQXJndW1lbnRDb3VudCc6IGpzLm51bWJlcihzZWxlY3Rvci50eXBlQXJndW1lbnRDb3VudCkKICAgIH0pOwoKICAgIGpzQXN0LkV4cHJlc3Npb24gZnVuY3Rpb247CiAgICBpZiAoaXNJbnRlcmNlcHRlZCkgewogICAgICBmdW5jdGlvbiA9IGpzKAogICAgICAgICAgcidmdW5jdGlvbigkcmVjZWl2ZXIsICMpIHsgcmV0dXJuICMgfScsIFtwYXJhbWV0ZXJOYW1lcywgZXhwcmVzc2lvbl0pOwogICAgfSBlbHNlIHsKICAgICAgZnVuY3Rpb24gPSBqcyhyJ2Z1bmN0aW9uKCMpIHsgcmV0dXJuICMgfScsIFtwYXJhbWV0ZXJOYW1lcywgZXhwcmVzc2lvbl0pOwogICAgfQogICAgcmV0dXJuIG5ldyBTdHViTWV0aG9kKG5hbWUsIGZ1bmN0aW9uKTsKICB9Cn0KCi8vLyBDcmVhdGVzIHR3byBKYXZhU2NyaXB0IGZ1bmN0aW9uczogYHRlYXJPZmZHZXR0ZXJgIGFuZCBgdGVhck9mZmAuCi8vLwovLy8gYHRlYXJPZmZHZXR0ZXJgIGlzIGludGVybmFsIGFuZCBvbmx5IHVzZWQgYnkgYHRlYXJPZmZgLgovLy8KLy8vIGB0ZWFyT2ZmYCB0YWtlcyB0aGUgZm9sbG93aW5nIGFyZ3VtZW50czoKLy8vICAgKiBgZnVuY3NgOiBhIGxpc3Qgb2YgZnVuY3Rpb25zLiBUaGVzZSBhcmUgdGhlIGZ1bmN0aW9ucyByZXByZXNlbnRpbmcgdGhlCi8vLyAgICAgbWVtYmVyIHRoYXQgaXMgdG9ybiBvZmYuIFRoZXJlIGNhbiBiZSBtb3JlIHRoYW4gb25lLCBzaW5jZSBhIG1lbWJlcgovLy8gICAgIGNhbiBoYXZlIHNldmVyYWwgc3R1YnMuCi8vLyAgICAgRWFjaCBmdW5jdGlvbiBtdXN0IGhhdmUgdGhlIGAkY2FsbE5hbWVgIHByb3BlcnR5IHNldC4KLy8vICAgKiBgYXBwbHlUcmFtcG9saW5lSW5kZXhgIGlzIHRoZSBpbmRleCBvZiB0aGUgc3R1YiB0byBiZSB1c2VkIGZvcgovLy8gICAgIEZ1bmN0aW9uLmFwcGx5Ci8vLyAgICogYHJlZmxlY3Rpb25JbmZvYDogY29udGFpbnMgcmVmbGVjdGl2ZSBpbmZvcm1hdGlvbiwgYW5kIHRoZSBmdW5jdGlvbgovLy8gICAgIHR5cGUuIFRPRE8oZmxvaXRzY2gpOiBwb2ludCB0byB3aGVyZSB0aGlzIGlzIHNwZWNpZmllZC4KLy8vICAgKiBgaXNTdGF0aWNgLgovLy8gICAqIGBuYW1lYC4KLy8vICAgKiBgaXNJbnRlcmNlcHRlZC4KTGlzdDxqc0FzdC5TdGF0ZW1lbnQ+IGJ1aWxkVGVhck9mZkNvZGUoQ29tcGlsZXJPcHRpb25zIG9wdGlvbnMsIEVtaXR0ZXIgZW1pdHRlciwKICAgIE5hbWVyIG5hbWVyLCBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cykgewogIEZ1bmN0aW9uRW50aXR5IGNsb3N1cmVGcm9tVGVhck9mZiA9IGNvbW1vbkVsZW1lbnRzLmNsb3N1cmVGcm9tVGVhck9mZjsKICBqc0FzdC5FeHByZXNzaW9uIHRlYXJPZmZBY2Nlc3NFeHByZXNzaW9uOwogIGpzQXN0LkV4cHJlc3Npb24gdGVhck9mZkdsb2JhbE9iamVjdFN0cmluZzsKICBqc0FzdC5FeHByZXNzaW9uIHRlYXJPZmZHbG9iYWxPYmplY3Q7CiAgaWYgKGNsb3N1cmVGcm9tVGVhck9mZiAhPSBudWxsKSB7CiAgICB0ZWFyT2ZmQWNjZXNzRXhwcmVzc2lvbiA9IGVtaXR0ZXIuc3RhdGljRnVuY3Rpb25BY2Nlc3MoY2xvc3VyZUZyb21UZWFyT2ZmKTsKICAgIHRlYXJPZmZHbG9iYWxPYmplY3QgPQogICAgICAgIGpzLnN0cmluZ1BhcnQobmFtZXIuZ2xvYmFsT2JqZWN0Rm9yTWVtYmVyKGNsb3N1cmVGcm9tVGVhck9mZikpOwogICAgdGVhck9mZkdsb2JhbE9iamVjdFN0cmluZyA9CiAgICAgICAganMuc3RyaW5nKG5hbWVyLmdsb2JhbE9iamVjdEZvck1lbWJlcihjbG9zdXJlRnJvbVRlYXJPZmYpKTsKICB9IGVsc2UgewogICAgLy8gRGVmYXVsdCB2YWx1ZXMgZm9yIG1vY2tlZC11cCB0ZXN0IGxpYnJhcmllcy4KICAgIHRlYXJPZmZBY2Nlc3NFeHByZXNzaW9uID0KICAgICAgICBqcyhyJycnZnVuY3Rpb24oKSB7IHRocm93ICJIZWxwZXIgJ2Nsb3N1cmVGcm9tVGVhck9mZicgbWlzc2luZy4iIH0nJycpOwogICAgdGVhck9mZkdsb2JhbE9iamVjdFN0cmluZyA9IGpzLnN0cmluZygnTWlzc2luZ0hlbHBlckZ1bmN0aW9uJyk7CiAgICB0ZWFyT2ZmR2xvYmFsT2JqZWN0ID0ganMoCiAgICAgICAgcicnJyhmdW5jdGlvbigpIHsgdGhyb3cgIkhlbHBlciAnY2xvc3VyZUZyb21UZWFyT2ZmJyBtaXNzaW5nLiIgfSkoKScnJyk7CiAgfQoKICBqc0FzdC5TdGF0ZW1lbnQgdGVhck9mZkdldHRlcjsKICBpZiAoIW9wdGlvbnMudXNlQ29udGVudFNlY3VyaXR5UG9saWN5KSB7CiAgICBqc0FzdC5FeHByZXNzaW9uIHRlYXJPZmZBY2Nlc3NUZXh0ID0gbmV3IGpzQXN0LlVucGFyc2VkTm9kZSgKICAgICAgICB0ZWFyT2ZmQWNjZXNzRXhwcmVzc2lvbiwgb3B0aW9ucy5lbmFibGVNaW5pZmljYXRpb24sIGZhbHNlKTsKICAgIHRlYXJPZmZHZXR0ZXIgPSBqcy5zdGF0ZW1lbnQoJycnCmZ1bmN0aW9uIHRlYXJPZmZHZXR0ZXIoZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LCByZWZsZWN0aW9uSW5mbywgbmFtZSwgaXNJbnRlcmNlcHRlZCkgewogIHJldHVybiBpc0ludGVyY2VwdGVkCiAgICAgID8gbmV3IEZ1bmN0aW9uKCJmdW5jcyIsICJhcHBseVRyYW1wb2xpbmVJbmRleCIsICJyZWZsZWN0aW9uSW5mbyIsICJuYW1lIiwKICAgICAgICAgICAgICAgICAgICAgI3RlYXJPZmZHbG9iYWxPYmplY3RTdHJpbmcsICJjIiwKICAgICAgICAgICJyZXR1cm4gZnVuY3Rpb24gdGVhck9mZl8iICsgbmFtZSArIChmdW5jdGlvbkNvdW50ZXIrKykgKyAiKHJlY2VpdmVyKSB7IiArCiAgICAgICAgICAgICJpZiAoYyA9PT0gbnVsbCkgYyA9ICIgKyAjdGVhck9mZkFjY2Vzc1RleHQgKyAiKCIgKwogICAgICAgICAgICAgICAgInRoaXMsIGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwgcmVmbGVjdGlvbkluZm8sIGZhbHNlLCB0cnVlLCBuYW1lKTsiICsKICAgICAgICAgICAgICAgICJyZXR1cm4gbmV3IGModGhpcywgZnVuY3NbMF0sIHJlY2VpdmVyLCBuYW1lKTsiICsKICAgICAgICAgICAifSIpKGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwgcmVmbGVjdGlvbkluZm8sIG5hbWUsICN0ZWFyT2ZmR2xvYmFsT2JqZWN0LCBudWxsKQogICAgICA6IG5ldyBGdW5jdGlvbigiZnVuY3MiLCAiYXBwbHlUcmFtcG9saW5lSW5kZXgiLCAicmVmbGVjdGlvbkluZm8iLCAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICN0ZWFyT2ZmR2xvYmFsT2JqZWN0U3RyaW5nLCAiYyIsCiAgICAgICAgICAicmV0dXJuIGZ1bmN0aW9uIHRlYXJPZmZfIiArIG5hbWUgKyAoZnVuY3Rpb25Db3VudGVyKyspKyAiKCkgeyIgKwogICAgICAgICAgICAiaWYgKGMgPT09IG51bGwpIGMgPSAiICsgI3RlYXJPZmZBY2Nlc3NUZXh0ICsgIigiICsKICAgICAgICAgICAgICAgICJ0aGlzLCBmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBmYWxzZSwgZmFsc2UsIG5hbWUpOyIgKwogICAgICAgICAgICAgICAgInJldHVybiBuZXcgYyh0aGlzLCBmdW5jc1swXSwgbnVsbCwgbmFtZSk7IiArCiAgICAgICAgICAgICAifSIpKGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwgcmVmbGVjdGlvbkluZm8sIG5hbWUsICN0ZWFyT2ZmR2xvYmFsT2JqZWN0LCBudWxsKTsKfScnJywgewogICAgICAndGVhck9mZkFjY2Vzc1RleHQnOiB0ZWFyT2ZmQWNjZXNzVGV4dCwKICAgICAgJ3RlYXJPZmZHbG9iYWxPYmplY3QnOiB0ZWFyT2ZmR2xvYmFsT2JqZWN0LAogICAgICAndGVhck9mZkdsb2JhbE9iamVjdFN0cmluZyc6IHRlYXJPZmZHbG9iYWxPYmplY3RTdHJpbmcKICAgIH0pOwogIH0gZWxzZSB7CiAgICB0ZWFyT2ZmR2V0dGVyID0ganMuc3RhdGVtZW50KCcnJwogICAgICBmdW5jdGlvbiB0ZWFyT2ZmR2V0dGVyKGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwgcmVmbGVjdGlvbkluZm8sIG5hbWUsIGlzSW50ZXJjZXB0ZWQpIHsKICAgICAgICB2YXIgY2FjaGUgPSBudWxsOwogICAgICAgIHJldHVybiBpc0ludGVyY2VwdGVkCiAgICAgICAgICAgID8gZnVuY3Rpb24ocmVjZWl2ZXIpIHsKICAgICAgICAgICAgICAgIGlmIChjYWNoZSA9PT0gbnVsbCkgY2FjaGUgPSAjKAogICAgICAgICAgICAgICAgICAgIHRoaXMsIGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwgcmVmbGVjdGlvbkluZm8sIGZhbHNlLCB0cnVlLCBuYW1lKTsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgY2FjaGUodGhpcywgZnVuY3NbMF0sIHJlY2VpdmVyLCBuYW1lKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoY2FjaGUgPT09IG51bGwpIGNhY2hlID0gIygKICAgICAgICAgICAgICAgICAgICB0aGlzLCBmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBmYWxzZSwgZmFsc2UsIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBjYWNoZSh0aGlzLCBmdW5jc1swXSwgbnVsbCwgbmFtZSk7CiAgICAgICAgICAgICAgfTsKICAgICAgfScnJywgW3RlYXJPZmZBY2Nlc3NFeHByZXNzaW9uLCB0ZWFyT2ZmQWNjZXNzRXhwcmVzc2lvbl0pOwogIH0KCiAganNBc3QuU3RhdGVtZW50IHRlYXJPZmYgPSBqcy5zdGF0ZW1lbnQoJycnCiAgICAgIGZ1bmN0aW9uIHRlYXJPZmYoZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LAogICAgICAgICAgcmVmbGVjdGlvbkluZm8sIGlzU3RhdGljLCBuYW1lLCBpc0ludGVyY2VwdGVkKSB7CiAgICAgIHZhciBjYWNoZSA9IG51bGw7CiAgICAgIHJldHVybiBpc1N0YXRpYwogICAgICAgICAgPyBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBpZiAoY2FjaGUgPT09IG51bGwpIGNhY2hlID0gI3RlYXJPZmYoCiAgICAgICAgICAgICAgICAgIHRoaXMsIGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwKICAgICAgICAgICAgICAgICAgcmVmbGVjdGlvbkluZm8sIHRydWUsIGZhbHNlLCBuYW1lKS5wcm90b3R5cGU7CiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlOwogICAgICAgICAgICB9CiAgICAgICAgICA6IHRlYXJPZmZHZXR0ZXIoZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LAogICAgICAgICAgICAgIHJlZmxlY3Rpb25JbmZvLCBuYW1lLCBpc0ludGVyY2VwdGVkKTsKICAgIH0nJycsIHsndGVhck9mZic6IHRlYXJPZmZBY2Nlc3NFeHByZXNzaW9ufSk7CgogIHJldHVybiA8anNBc3QuU3RhdGVtZW50Plt0ZWFyT2ZmR2V0dGVyLCB0ZWFyT2ZmXTsKfQqBWgBOTjwBMQE7NiQhICwuQxoxMkIqASEVARsWJCMhGigBRy0iAUgBLU1KB0g3KR5EODQXLyA4Bks7L0E7CDUSFhkRJwgEAU8tFkgYSkoEAU8tFkgYSigPTAQBLAY5QEs3Rk0eRAE2ASUiQh1BIzoKNA8mPS9GEUszCggGATcqAU1ODjwwOzYeQCoBRUhKAUBBI0UKATshNSgKAUJGATMIBgEbBAE/QgFFPRYGASJHMjIsLy8zS0YUCgE7SU0mCggGAT9BQRQEAU89LiJDUQE9JC8TAVBNAUtMSjk7Mzg9RzkzIFEUSDIfLz4+QQgBHxkVUQ1QBisEAgFFBDwELU9MID5HF0xAFBAYUTJJLC4oJFAaSCBECzQeUEQeUQQBIStBRSVbF1A2VUBbQl9QNkxAXD5iCC4yPQgLJWEaHSMvW0IQGy9cPhFBBAEtNDsYFhk0NUAcDjc0MQE0AgE5cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9jbGFzc19zdHViX2dlbmVyYXRvci5kYXJ0SnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvaW5zdGFudGlhdGlvbl9zdHViX2dlbmVyYXRvci5kYXJ0nVIvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX2VtaXR0ZXIuaW5zdGFudGlhdGlvbl9zdHViX2dlbmVyYXRvcjsKCmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgSkNvbW1vbkVsZW1lbnRzLCBKRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2lvL3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBzaG93IGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCcgc2hvdyBOYW1lcjsKaW1wb3J0ICcuLi91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0JyBzaG93IENhbGxTdHJ1Y3R1cmU7CmltcG9ydCAnLi4vdW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfYnVpbGRlci5kYXJ0JyBzaG93IFNlbGVjdG9yQ29uc3RyYWludHM7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CgppbXBvcnQgJ21vZGVsLmRhcnQnOwoKaW1wb3J0ICdjb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JyBzaG93IENvZGVFbWl0dGVyVGFzaywgRW1pdHRlcjsKCi8vIEdlbmVyYXRvciBvZiBzdHVicyByZXF1aXJlZCBmb3IgSW5zdGFudGlhdGlvbiBjbGFzc2VzLgpjbGFzcyBJbnN0YW50aWF0aW9uU3R1YkdlbmVyYXRvciB7CiAgZmluYWwgQ29kZUVtaXR0ZXJUYXNrIF9lbWl0dGVyVGFzazsKICBmaW5hbCBOYW1lciBfbmFtZXI7CiAgZmluYWwgQ29kZWdlbldvcmxkIF9jb2RlZ2VuV29ybGQ7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICAvLyBpZ25vcmU6IFVOVVNFRF9GSUVMRAogIGZpbmFsIFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3kgX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3k7CgogIEluc3RhbnRpYXRpb25TdHViR2VuZXJhdG9yKHRoaXMuX2VtaXR0ZXJUYXNrLCB0aGlzLl9uYW1lciwgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuX2NvZGVnZW5Xb3JsZCwgdGhpcy5fc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSk7CgogIEVtaXR0ZXIgZ2V0IF9lbWl0dGVyID0+IF9lbWl0dGVyVGFzay5lbWl0dGVyOwoKICBKQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50cyA9PiBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHM7CiAgSkVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PgogICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50OwoKICAvLy8gR2VuZXJhdGVzIGEgc3R1YiB0byBmb3J3YXJkIGEgY2FsbCBzZWxlY3RvciB3aXRoIG5vIHR5cGUgYXJndW1lbnRzIHRvIGEKICAvLy8gY2FsbCBzZWxlY3RvciB3aXRoIHN0b3JlZCB0eXBlcy4KICAvLy8KICAvLy8gW2luc3RhbnRpYXRpb25DbGFzc10gaXMgdGhlIGNsYXNzIGNvbnRhaW5pbmcgdGhlIGNhcHR1cmVkIHR5cGUgYXJndW1lbnRzLgogIC8vLyBbY2FsbFNlbGVjdG9yXSBpcyB0aGUgc2VsZWN0b3Igd2l0aCBubyB0eXBlIGFyZ3VtZW50cy4gW3RhcmdldFNlbGVjdG9yXSBpcwogIC8vLyB0aGUgc2VsZWN0b3IgYWNjZXB0aW5nIHRoZSB0eXBlIGFyZ3VtZW50cy4KICBQYXJhbWV0ZXJTdHViTWV0aG9kIF9nZW5lcmF0ZVN0dWIoCiAgICAgIENsYXNzRW50aXR5IGluc3RhbnRpYXRpb25DbGFzcywKICAgICAgRmllbGRFbnRpdHkgZnVuY3Rpb25GaWVsZCwKICAgICAgU2VsZWN0b3IgY2FsbFNlbGVjdG9yLAogICAgICBTZWxlY3RvciB0YXJnZXRTZWxlY3RvcikgewogICAgLy8gVE9ETyhzcmEpOiBHZW5lcmF0ZSBzb3VyY2UgaW5mb3JtYXRpb24gZm9yIHN0dWIgdGhhdCBoYXMgbm8gbWVtYmVyLgogICAgLy8KICAgIC8vU291cmNlSW5mb3JtYXRpb25CdWlsZGVyIHNvdXJjZUluZm9ybWF0aW9uQnVpbGRlciA9CiAgICAvLyAgICBfc291cmNlSW5mb3JtYXRpb25TdHJhdGVneS5jcmVhdGVCdWlsZGVyRm9yQ29udGV4dChtZW1iZXIpOwogICAgLy9Tb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiA9CiAgICAvLyAgICBzb3VyY2VJbmZvcm1hdGlvbkJ1aWxkZXIuYnVpbGRTdHViKG1lbWJlciwgY2FsbFN0cnVjdHVyZSk7CgogICAgYXNzZXJ0KGNhbGxTZWxlY3Rvci50eXBlQXJndW1lbnRDb3VudCA9PSAwKTsKICAgIGludCB0eXBlQXJndW1lbnRDb3VudCA9IHRhcmdldFNlbGVjdG9yLnR5cGVBcmd1bWVudENvdW50OwogICAgYXNzZXJ0KHR5cGVBcmd1bWVudENvdW50ID4gMCk7CgogICAgLy8gVGhlIGZvcndhcmRpbmcgc3R1YiBmb3IgdGhyZWUgYXJndW1lbnRzIG9mIGFuIGluc3RhbnRpYXRpb24gd2l0aCB0d28gdHlwZQogICAgLy8gYXJndW1lbnRzIGxvb2tzIGxpa2UgdGhpczoKICAgIC8vCiAgICAvLyBgYGAKICAgIC8vIGNhbGwkMzogZnVuY3Rpb24oYTAsIGExLCBhMikgewogICAgLy8gICByZXR1cm4gdGhpcy5fZi5jYWxsJDIkMyhhMCwgYTEsIGEyLCB0aGlzLiR0aVswXSwgdGhpcy4kdGlbMV0pOwogICAgLy8gfQogICAgLy8gYGBgCgogICAgTGlzdDxqc0FzdC5QYXJhbWV0ZXI+IHBhcmFtZXRlcnMgPSA8anNBc3QuUGFyYW1ldGVyPltdOwogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSA8anNBc3QuRXhwcmVzc2lvbj5bXTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGNhbGxTZWxlY3Rvci5hcmd1bWVudENvdW50OyBpKyspIHsKICAgICAgU3RyaW5nIGpzTmFtZSA9ICdhJGknOwogICAgICBhcmd1bWVudHMuYWRkKGpzKCcjJywganNOYW1lKSk7CiAgICAgIHBhcmFtZXRlcnMuYWRkKG5ldyBqc0FzdC5QYXJhbWV0ZXIoanNOYW1lKSk7CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0YXJnZXRTZWxlY3Rvci50eXBlQXJndW1lbnRDb3VudDsgaSsrKSB7CiAgICAgIGFyZ3VtZW50cy5hZGQoanMoJ3RoaXMuI1sjXScsIFtfbmFtZXIucnRpRmllbGRKc05hbWUsIGpzLm51bWJlcihpKV0pKTsKICAgIH0KCiAgICBqc0FzdC5GdW4gZnVuY3Rpb24gPSBqcygnZnVuY3Rpb24oIykgeyByZXR1cm4gdGhpcy4jLiMoIyk7IH0nLCBbCiAgICAgIHBhcmFtZXRlcnMsCiAgICAgIF9uYW1lci5maWVsZFByb3BlcnR5TmFtZShmdW5jdGlvbkZpZWxkKSwKICAgICAgX25hbWVyLmludm9jYXRpb25OYW1lKHRhcmdldFNlbGVjdG9yKSwKICAgICAgYXJndW1lbnRzLAogICAgXSk7CiAgICAvLyBUT0RPKHNyYSk6IC53aXRoU291cmNlSW5mb3JtYXRpb24oc291cmNlSW5mb3JtYXRpb24pOwoKICAgIGpzQXN0Lk5hbWUgbmFtZSA9IF9uYW1lci5pbnZvY2F0aW9uTmFtZShjYWxsU2VsZWN0b3IpOwogICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJTdHViTWV0aG9kKG5hbWUsIG51bGwsIGZ1bmN0aW9uKTsKICB9CgogIC8vLyBHZW5lcmF0ZXMgYSBzdHViIGZvciBhICdzaWduYXR1cmUnIHNlbGVjdG9yLiBUaGUgc3R1YiBjYWxscyB0aGUgdW5kZXJseWluZwogIC8vLyBmdW5jdGlvbidzICdzaWduYXR1cmUnIG1ldGhvZCBhbmQgY2FsbHMgYSBoZWxwZXIgdG8gc3Vic2l0dXRlIHRoZSB0eXBlCiAgLy8vIHBhcmFtZXRlcnMgaW4gdGhlIHR5cGUgdGVybS4gVGhlIHN0dWIgbG9va3MgbGlrZSB0aGlzOgogIC8vLwogIC8vLyBgYGAKICAvLy8gJHNpZ25hdHVyZTo6IGZ1bmN0aW9uKCkgewogIC8vLyAgIHJldHVybiBILmluc3RhbnRpYXRlZEdlbmVyaWNGdW5jdGlvblR5cGUoCiAgLy8vICAgICAgIEguZXh0cmFjdEZ1bmN0aW9uVHlwZU9iamVjdEZyb21JbnRlcm5hbCh0aGlzLl9nZW5lcmljQ2xvc3VyZSksCiAgLy8vICAgICAgIHRoaXMuJHRpKTsKICAvLy8gfQogIC8vLyBgYGAKICBQYXJhbWV0ZXJTdHViTWV0aG9kIF9nZW5lcmF0ZVNpZ25hdHVyZVN0dWIoRmllbGRFbnRpdHkgZnVuY3Rpb25GaWVsZCkgewogICAganNBc3QuTmFtZSBvcGVyYXRvclNpZ25hdHVyZSA9CiAgICAgICAgX25hbWVyLmFzTmFtZShfbmFtZXIuZml4ZWROYW1lcy5vcGVyYXRvclNpZ25hdHVyZSk7CgogICAganNBc3QuRnVuIGZ1bmN0aW9uID0ganMoJ2Z1bmN0aW9uKCkgeyByZXR1cm4gIygjKHRoaXMuIyksIHRoaXMuIyk7IH0nLCBbCiAgICAgIF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKAogICAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmluc3RhbnRpYXRlZEdlbmVyaWNGdW5jdGlvblR5cGUpLAogICAgICBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcygKICAgICAgICAgIF9jb21tb25FbGVtZW50cy5leHRyYWN0RnVuY3Rpb25UeXBlT2JqZWN0RnJvbUludGVybmFsKSwKICAgICAgX25hbWVyLmZpZWxkUHJvcGVydHlOYW1lKGZ1bmN0aW9uRmllbGQpLAogICAgICBfbmFtZXIucnRpRmllbGRKc05hbWUsCiAgICBdKTsKICAgIC8vIFRPRE8oc3JhKTogR2VuZXJhdGUgc291cmNlIGluZm9ybWF0aW9uIGZvciBzdHViIHRoYXQgaGFzIG5vIG1lbWJlci4KICAgIC8vIFRPRE8oc3JhKTogLndpdGhTb3VyY2VJbmZvcm1hdGlvbihzb3VyY2VJbmZvcm1hdGlvbik7CgogICAgcmV0dXJuIG5ldyBQYXJhbWV0ZXJTdHViTWV0aG9kKG9wZXJhdG9yU2lnbmF0dXJlLCBudWxsLCBmdW5jdGlvbik7CiAgfQoKICAvLyBSZXR1cm5zIGFsbCBzdHVicyBmb3IgYW4gaW5zdGFudGlhdGlvbiBjbGFzcy4KICAvLwogIExpc3Q8U3R1Yk1ldGhvZD4gZ2VuZXJhdGVTdHVicygKICAgICAgQ2xhc3NFbnRpdHkgaW5zdGFudGlhdGlvbkNsYXNzLCBGdW5jdGlvbkVudGl0eSBtZW1iZXIpIHsKICAgIC8vIDEuIEZpbmQgdGhlIG51bWJlciBvZiB0eXBlIHBhcmFtZXRlcnMgaW4gW2luc3RhbnRpYXRpb25DbGFzc10uCiAgICBpbnQgdHlwZUFyZ3VtZW50Q291bnQgPSBfY2xvc2VkV29ybGQuZGFydFR5cGVzCiAgICAgICAgLmdldFRoaXNUeXBlKGluc3RhbnRpYXRpb25DbGFzcykKICAgICAgICAudHlwZUFyZ3VtZW50cwogICAgICAgIC5sZW5ndGg7CiAgICBhc3NlcnQodHlwZUFyZ3VtZW50Q291bnQgPiAwKTsKCiAgICAvLyAyLiBGaW5kIHRoZSBmdW5jdGlvbiBmaWVsZCBhY2Nlc3MgcGF0aC4KICAgIEZpZWxkRW50aXR5IGZ1bmN0aW9uRmllbGQ7CiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hJbnN0YW5jZUZpZWxkKGluc3RhbnRpYXRpb25DbGFzcywKICAgICAgICAoQ2xhc3NFbnRpdHkgZW5jbG9zaW5nLCBGaWVsZEVudGl0eSBmaWVsZCkgewogICAgICBpZiAoX2Nsb3NlZFdvcmxkLmZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKS5pc0VsaWRlZCkgcmV0dXJuOwogICAgICBpZiAoZmllbGQubmFtZSA9PSAnX2dlbmVyaWNDbG9zdXJlJykgZnVuY3Rpb25GaWVsZCA9IGZpZWxkOwogICAgfSk7CiAgICBhc3NlcnQoZnVuY3Rpb25GaWVsZCAhPSBudWxsLAogICAgICAgICJDYW4ndCBmaW5kIENsb3N1cmUgZmllbGQgb2YgJGluc3RhbnRpYXRpb25DbGFzcyIpOwoKICAgIFN0cmluZyBjYWxsID0gX25hbWVyLmNsb3N1cmVJbnZvY2F0aW9uU2VsZWN0b3JOYW1lOwogICAgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBjYWxsU2VsZWN0b3JzID0KICAgICAgICBfY29kZWdlbldvcmxkLmludm9jYXRpb25zQnlOYW1lKGNhbGwpOwoKICAgIFNldDxQYXJhbWV0ZXJTdHJ1Y3R1cmU+IGNvbXB1dGVMaXZlUGFyYW1ldGVyU3RydWN0dXJlcygpIHsKICAgICAgU2V0PFBhcmFtZXRlclN0cnVjdHVyZT4gcGFyYW1ldGVyU3RydWN0dXJlcyA9CiAgICAgICAgICBuZXcgU2V0PFBhcmFtZXRlclN0cnVjdHVyZT4oKTsKCiAgICAgIHZvaWQgcHJvY2VzcyhGdW5jdGlvbkVudGl0eSBmdW5jdGlvbikgewogICAgICAgIGlmIChmdW5jdGlvbi5wYXJhbWV0ZXJTdHJ1Y3R1cmUudHlwZVBhcmFtZXRlcnMgPT0gdHlwZUFyZ3VtZW50Q291bnQpIHsKICAgICAgICAgIHBhcmFtZXRlclN0cnVjdHVyZXMuYWRkKGZ1bmN0aW9uLnBhcmFtZXRlclN0cnVjdHVyZSk7CiAgICAgICAgfQogICAgICB9CgogICAgICBfY29kZWdlbldvcmxkLmNsb3N1cml6ZWRTdGF0aWNzLmZvckVhY2gocHJvY2Vzcyk7CiAgICAgIF9jb2RlZ2VuV29ybGQuY2xvc3VyaXplZE1lbWJlcnMuZm9yRWFjaChwcm9jZXNzKTsKICAgICAgX2NvZGVnZW5Xb3JsZC5mb3JFYWNoR2VuZXJpY0Nsb3N1cmVDYWxsTWV0aG9kKHByb2Nlc3MpOwoKICAgICAgcmV0dXJuIHBhcmFtZXRlclN0cnVjdHVyZXM7CiAgICB9CgogICAgTGlzdDxTdHViTWV0aG9kPiBzdHVicyA9IDxTdHViTWV0aG9kPltdOwoKICAgIC8vIEZvciBldmVyeSBjYWxsLXNlbGVjdG9yIGdlbmVyYXRlIGEgc3R1YiB0byB0aGUgY29ycmVzcG9uZGluZyBzZWxlY3RvcgogICAgLy8gd2l0aCBmaWxsZWQtaW4gdHlwZSBhcmd1bWVudHMuCgogICAgaWYgKGNhbGxTZWxlY3RvcnMgIT0gbnVsbCkgewogICAgICBTZXQ8UGFyYW1ldGVyU3RydWN0dXJlPiBwYXJhbWV0ZXJTdHJ1Y3R1cmVzOwogICAgICBmb3IgKFNlbGVjdG9yIHNlbGVjdG9yIGluIGNhbGxTZWxlY3RvcnMua2V5cykgewogICAgICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IHNlbGVjdG9yLmNhbGxTdHJ1Y3R1cmU7CiAgICAgICAgaWYgKGNhbGxTdHJ1Y3R1cmUudHlwZUFyZ3VtZW50Q291bnQgIT0gMCkgY29udGludWU7CiAgICAgICAgQ2FsbFN0cnVjdHVyZSBnZW5lcmljQ2FsbFN0cnVjdHVyZSA9CiAgICAgICAgICAgIGNhbGxTdHJ1Y3R1cmUud2l0aFR5cGVBcmd1bWVudENvdW50KHR5cGVBcmd1bWVudENvdW50KTsKICAgICAgICBwYXJhbWV0ZXJTdHJ1Y3R1cmVzID8/PSBjb21wdXRlTGl2ZVBhcmFtZXRlclN0cnVjdHVyZXMoKTsKICAgICAgICBmb3IgKFBhcmFtZXRlclN0cnVjdHVyZSBwYXJhbWV0ZXJTdHJ1Y3R1cmUgaW4gcGFyYW1ldGVyU3RydWN0dXJlcykgewogICAgICAgICAgaWYgKGdlbmVyaWNDYWxsU3RydWN0dXJlLnNpZ25hdHVyZUFwcGxpZXMocGFyYW1ldGVyU3RydWN0dXJlKSkgewogICAgICAgICAgICBTZWxlY3RvciBnZW5lcmljU2VsZWN0b3IgPQogICAgICAgICAgICAgICAgbmV3IFNlbGVjdG9yLmNhbGwoc2VsZWN0b3IubWVtYmVyTmFtZSwgZ2VuZXJpY0NhbGxTdHJ1Y3R1cmUpOwogICAgICAgICAgICBzdHVicy5hZGQoX2dlbmVyYXRlU3R1YigKICAgICAgICAgICAgICAgIGluc3RhbnRpYXRpb25DbGFzcywgZnVuY3Rpb25GaWVsZCwgc2VsZWN0b3IsIGdlbmVyaWNTZWxlY3RvcikpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBzdHVicy5hZGQoX2dlbmVyYXRlU2lnbmF0dXJlU3R1YihmdW5jdGlvbkZpZWxkKSk7CgogICAgcmV0dXJuIHN0dWJzOwogIH0KfQqAxwBOTjwBOQFMJCghIC49MTJCKgEVAT8BOiMmFiQjGj4BUDwBMAFGMScBTicGUFExJSYhHSFLBzpGLEUBMT4jAVEiBwsmSAkLATw9ATsdJjMGAUFNBgFFEi8tEQg9ATs6BAFRTT0GCiAySxcICkojPAFNJTwlQi8dCEs9AUcEATMFIj9GMykXESMBLx9BNUtCCCI8ATg3LwE/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+ATcBUCA0Tj4oUCFPAS8oIUkcFwYBNCFIMQE1EggBMCNGHBsKCAFLS05OCU07KEkhJUFGAUUnUD5MIB8ODAoIBgFOUEQ0PTYjQBIIASkjOxwbCggGARIEAgE9cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9wYXJhbWV0ZXJfc3R1Yl9nZW5lcmF0b3IuZGFydERzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL3J1bnRpbWVfdHlwZV9nZW5lcmF0b3IuZGFydLc0Ly8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLnJ1bnRpbWVfdHlwZV9nZW5lcmF0b3I7CgppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzOwppbXBvcnQgJy4uL2RlZmVycmVkX2xvYWQuZGFydCcgc2hvdyBPdXRwdXRVbml0LCBPdXRwdXRVbml0RGF0YTsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBhcyBqc0FzdDsKaW1wb3J0ICcuLi9qcy9qcy5kYXJ0JyBzaG93IGpzOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvanNfaW50ZXJvcF9hbmFseXNpcy5kYXJ0JyBhcyBqc0ludGVyb3BBbmFseXNpczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hbWVyLmRhcnQnIHNob3cgTmFtZXI7CmltcG9ydCAnLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnQnCiAgICBzaG93IFJ1bnRpbWVUeXBlc0NoZWNrcywgUnVudGltZVR5cGVzRW5jb2RlciwgT25WYXJpYWJsZUNhbGxiYWNrOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19jb2RlZ2VuLmRhcnQnCiAgICBzaG93IENsYXNzQ2hlY2tzLCBDbGFzc0Z1bmN0aW9uVHlwZSwgU3Vic3RpdHV0aW9uLCBUeXBlQ2hlY2s7CmltcG9ydCAnLi4vanNfZW1pdHRlci9zb3J0ZXIuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgU2V0bGV0OwoKaW1wb3J0ICdjb2RlX2VtaXR0ZXJfdGFzay5kYXJ0JyBzaG93IENvZGVFbWl0dGVyVGFzaywgRW1pdHRlcjsKCi8vIEZ1bmN0aW9uIHNpZ25hdHVyZXMgdXNlZCBpbiB0aGUgZ2VuZXJhdGlvbiBvZiBydW50aW1lIHR5cGUgaW5mb3JtYXRpb24uCnR5cGVkZWYgdm9pZCBGdW5jdGlvblR5cGVTaWduYXR1cmVFbWl0dGVyKENsYXNzRnVuY3Rpb25UeXBlIGNsYXNzRnVuY3Rpb25UeXBlKTsKCmNsYXNzIFR5cGVUZXN0IHsKICBmaW5hbCBqc0FzdC5OYW1lIG5hbWU7CiAgZmluYWwganNBc3QuTm9kZSBleHByZXNzaW9uOwoKICBUeXBlVGVzdCh0aGlzLm5hbWUsIHRoaXMuZXhwcmVzc2lvbik7Cn0KCmNsYXNzIFR5cGVUZXN0cyB7CiAgVHlwZVRlc3QgaXNUZXN0OwogIFR5cGVUZXN0IHN1YnN0aXR1dGlvbjsKICBUeXBlVGVzdCBzaWduYXR1cmU7Cn0KCmNsYXNzIFR5cGVUZXN0UHJvcGVydGllcyB7CiAgLy8vIFRoZSBpbmRleCBvZiB0aGUgZnVuY3Rpb24gdHlwZSBpbnRvIHRoZSBtZXRhZGF0YS4KICAvLy8KICAvLy8gSWYgdGhlIGNsYXNzIGRvZXNuJ3QgaGF2ZSBhIGZ1bmN0aW9uIHR5cGUgdGhpcyBmaWVsZCBpcyBgbnVsbGAuCiAgLy8vCiAgLy8vIElmIHRoZSBpcyB0ZXN0cyB3ZXJlIGdlbmVyYXRlZCB3aXRoIGBzdG9yZUZ1bmN0aW9uVHlwZUluTWV0YWRhdGFgIHNldCB0bwogIC8vLyBgZmFsc2VgLCB0aGlzIGZpZWxkIGlzIGBudWxsYCwgYW5kIHRoZSBbcHJvcGVydGllc10gY29udGFpbiBhIHByb3BlcnR5CiAgLy8vIHRoYXQgZW5jb2RlcyB0aGUgZnVuY3Rpb24gdHlwZS4KICBqc0FzdC5FeHByZXNzaW9uIGZ1bmN0aW9uVHlwZUluZGV4OwoKICAvLy8gVGhlIHByb3BlcnRpZXMgdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBvbiB0aGUgcHJvdG90eXBlIG9mIHRoZQogIC8vLyBKUyBjb25zdHJ1Y3RvciBvZiB0aGUgW0NsYXNzRW50aXR5XSBmb3Igd2hpY2ggdGhlIGlzIGNoZWNrcyB3ZXJlCiAgLy8vIGdlbmVyYXRlZC4KICBmaW5hbCBNYXA8Q2xhc3NFbnRpdHksIFR5cGVUZXN0cz4gX3Byb3BlcnRpZXMgPSA8Q2xhc3NFbnRpdHksIFR5cGVUZXN0cz57fTsKCiAgdm9pZCBhZGRJc1Rlc3QoQ2xhc3NFbnRpdHkgY2xzLCBqc0FzdC5OYW1lIG5hbWUsIGpzQXN0Lk5vZGUgZXhwcmVzc2lvbikgewogICAgVHlwZVRlc3RzIHR5cGVUZXN0cyA9IF9wcm9wZXJ0aWVzLnB1dElmQWJzZW50KGNscywgKCkgPT4gbmV3IFR5cGVUZXN0cygpKTsKICAgIHR5cGVUZXN0cy5pc1Rlc3QgPSBuZXcgVHlwZVRlc3QobmFtZSwgZXhwcmVzc2lvbik7CiAgfQoKICB2b2lkIGFkZFN1YnN0aXR1dGlvbigKICAgICAgQ2xhc3NFbnRpdHkgY2xzLCBqc0FzdC5OYW1lIG5hbWUsIGpzQXN0Lk5vZGUgZXhwcmVzc2lvbikgewogICAgVHlwZVRlc3RzIHR5cGVUZXN0cyA9IF9wcm9wZXJ0aWVzLnB1dElmQWJzZW50KGNscywgKCkgPT4gbmV3IFR5cGVUZXN0cygpKTsKICAgIHR5cGVUZXN0cy5zdWJzdGl0dXRpb24gPSBuZXcgVHlwZVRlc3QobmFtZSwgZXhwcmVzc2lvbik7CiAgfQoKICB2b2lkIGFkZFNpZ25hdHVyZShDbGFzc0VudGl0eSBjbHMsIGpzQXN0Lk5hbWUgbmFtZSwganNBc3QuTm9kZSBleHByZXNzaW9uKSB7CiAgICBUeXBlVGVzdHMgdHlwZVRlc3RzID0gX3Byb3BlcnRpZXMucHV0SWZBYnNlbnQoY2xzLCAoKSA9PiBuZXcgVHlwZVRlc3RzKCkpOwogICAgdHlwZVRlc3RzLnNpZ25hdHVyZSA9IG5ldyBUeXBlVGVzdChuYW1lLCBleHByZXNzaW9uKTsKICB9CgogIHZvaWQgZm9yRWFjaFByb3BlcnR5KAogICAgICBTb3J0ZXIgc29ydGVyLCB2b2lkIGYoanNBc3QuTmFtZSBuYW1lLCBqc0FzdC5Ob2RlIGV4cHJlc3Npb24pKSB7CiAgICB2b2lkIGhhbmRsZVR5cGVUZXN0KFR5cGVUZXN0IHR5cGVUZXN0KSB7CiAgICAgIGlmICh0eXBlVGVzdCA9PSBudWxsKSByZXR1cm47CiAgICAgIGYodHlwZVRlc3QubmFtZSwgdHlwZVRlc3QuZXhwcmVzc2lvbik7CiAgICB9CgogICAgZm9yIChDbGFzc0VudGl0eSBjbHMgaW4gc29ydGVyLnNvcnRDbGFzc2VzKF9wcm9wZXJ0aWVzLmtleXMpKSB7CiAgICAgIFR5cGVUZXN0cyB0eXBlVGVzdHMgPSBfcHJvcGVydGllc1tjbHNdOwogICAgICBoYW5kbGVUeXBlVGVzdCh0eXBlVGVzdHMuaXNUZXN0KTsKICAgICAgaGFuZGxlVHlwZVRlc3QodHlwZVRlc3RzLnN1YnN0aXR1dGlvbik7CiAgICAgIGhhbmRsZVR5cGVUZXN0KHR5cGVUZXN0cy5zaWduYXR1cmUpOwogICAgfQogIH0KfQoKY2xhc3MgUnVudGltZVR5cGVHZW5lcmF0b3IgewogIGZpbmFsIENvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBPdXRwdXRVbml0RGF0YSBfb3V0cHV0VW5pdERhdGE7CiAgZmluYWwgQ29kZUVtaXR0ZXJUYXNrIGVtaXR0ZXJUYXNrOwogIGZpbmFsIE5hbWVyIF9uYW1lcjsKICBmaW5hbCBSdW50aW1lVHlwZXNDaGVja3MgX3J0aUNoZWNrczsKICBmaW5hbCBSdW50aW1lVHlwZXNFbmNvZGVyIF9ydGlFbmNvZGVyOwogIGZpbmFsIF9UeXBlQ29udGFpbmVkSW5PdXRwdXRVbml0VmlzaXRvciBfb3V0cHV0VW5pdFZpc2l0b3I7CgogIFJ1bnRpbWVUeXBlR2VuZXJhdG9yKHRoaXMuX2NvbW1vbkVsZW1lbnRzLCB0aGlzLl9vdXRwdXRVbml0RGF0YSwKICAgICAgdGhpcy5lbWl0dGVyVGFzaywgdGhpcy5fbmFtZXIsIHRoaXMuX3J0aUNoZWNrcywgdGhpcy5fcnRpRW5jb2RlcikKICAgICAgOiBfb3V0cHV0VW5pdFZpc2l0b3IgPSBuZXcgX1R5cGVDb250YWluZWRJbk91dHB1dFVuaXRWaXNpdG9yKAogICAgICAgICAgICBfY29tbW9uRWxlbWVudHMsIF9vdXRwdXRVbml0RGF0YSk7CgogIC8vLyBHZW5lcmF0ZSAiaXMgdGVzdHMiIGZvciBbY2xzXSBpdHNlbGYsIGFuZCB0aGUgImlzIHRlc3RzIiBmb3IgdGhlCiAgLy8vIGNsYXNzZXMgaXQgaW1wbGVtZW50cyBhbmQgdHlwZSBhcmd1bWVudCBzdWJzdGl0dXRpb24gZnVuY3Rpb25zIGZvciB0aGVzZQogIC8vLyB0ZXN0cy4gICBXZSBkb24ndCBuZWVkIHRvIGFkZCB0aGUgImlzIHRlc3RzIiBvZiB0aGUgc3VwZXIgY2xhc3MgYmVjYXVzZQogIC8vLyB0aGV5IHdpbGwgYmUgaW5oZXJpdGVkIGF0IHJ1bnRpbWUsIGJ1dCB3ZSBtYXkgbmVlZCB0byBnZW5lcmF0ZSB0aGUKICAvLy8gc3Vic3RpdHV0aW9ucywgYmVjYXVzZSB0aGV5IG1heSBoYXZlIGNoYW5nZWQuCgogIC8vLyBHZW5lcmF0ZXMgYWxsIHByb3BlcnRpZXMgbmVjZXNzYXJ5IGZvciBpcy1jaGVja3Mgb24gdGhlIFtjbGFzc0VsZW1lbnRdLgogIC8vLwogIC8vLyBSZXR1cm5zIGFuIGluc3RhbmNlIG9mIFtUeXBlVGVzdFByb3BlcnRpZXNdIHRoYXQgY29udGFpbnMgdGhlIHByb3BlcnRpZXMKICAvLy8gdGhhdCBtdXN0IGJlIGluc3RhbGxlZCBvbiB0aGUgcHJvdG90eXBlIG9mIHRoZSBKUyBjb25zdHJ1Y3RvciBvZiB0aGUKICAvLy8gW2NsYXNzRWxlbWVudF0uCiAgLy8vCiAgLy8vIElmIFtzdG9yZUZ1bmN0aW9uVHlwZUluTWV0YWRhdGFdIGlzIGB0cnVlYCwgc3RvcmVzIHRoZSByZWlmaWVkIGZ1bmN0aW9uCiAgLy8vIHR5cGUgKGlmIGNsYXNzIGhhcyBvbmUpIGluIHRoZSBtZXRhZGF0YSBvYmplY3QgYW5kIHN0b3JlcyBpdHMgaW5kZXggaW4KICAvLy8gdGhlIHJlc3VsdC4gVGhpcyBpcyBvbmx5IHBvc3NpYmxlIGZvciBmdW5jdGlvbiB0eXBlcyB0aGF0IGRvIG5vdCBjb250YWluCiAgLy8vIHR5cGUgdmFyaWFibGVzLgogIFR5cGVUZXN0UHJvcGVydGllcyBnZW5lcmF0ZUlzVGVzdHMoQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50LAogICAgICBNYXA8TWVtYmVyRW50aXR5LCBqc0FzdC5FeHByZXNzaW9uPiBnZW5lcmF0ZWRDb2RlLAogICAgICB7Ym9vbCBzdG9yZUZ1bmN0aW9uVHlwZUluTWV0YWRhdGE6IHRydWV9KSB7CiAgICBUeXBlVGVzdFByb3BlcnRpZXMgcmVzdWx0ID0gbmV3IFR5cGVUZXN0UHJvcGVydGllcygpOwoKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEluY2x1ZGUgZnVuY3Rpb24gc2lnbmF0dXJlcyBpbiBbQ2xhc3NDaGVja3NdLgogICAgdm9pZCBnZW5lcmF0ZUZ1bmN0aW9uVHlwZVNpZ25hdHVyZShDbGFzc0Z1bmN0aW9uVHlwZSBjbGFzc0Z1bmN0aW9uVHlwZSkgewogICAgICBGdW5jdGlvbkVudGl0eSBtZXRob2QgPSBjbGFzc0Z1bmN0aW9uVHlwZS5jYWxsRnVuY3Rpb247CiAgICAgIEZ1bmN0aW9uVHlwZSB0eXBlID0gY2xhc3NGdW5jdGlvblR5cGUuY2FsbFR5cGU7CgogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBBdm9pZCB1bm5lZWRlZCBmdW5jdGlvbiB0eXBlIGluZGljZXMgb3IKICAgICAgLy8gc2lnbmF0dXJlcy4gV2UgZWl0aGVyIG5lZWQgdGhlbSBmb3IgbWlycm9ycyBvciBiZWNhdXNlIFt0eXBlXSBpcwogICAgICAvLyBwb3RlbnRpYWxseSBhIHN1YnR5cGUgb2YgYSBjaGVja2VkIGZ1bmN0aW9uLiBDdXJyZW50bHkgd2UgZWFnZXJseQogICAgICAvLyBnZW5lcmF0ZSBhIGZ1bmN0aW9uIHR5cGUgaW5kZXggb3Igc2lnbmF0dXJlIGZvciBhbGwgY2FsbGFibGUgY2xhc3Nlcy4KICAgICAganNBc3QuRXhwcmVzc2lvbiBmdW5jdGlvblR5cGVJbmRleDsKICAgICAgYm9vbCBpc0RlZmVycmVkID0gZmFsc2U7CiAgICAgIGlmICghdHlwZS5jb250YWluc1R5cGVWYXJpYWJsZXMpIHsKICAgICAgICAvLyBUT0RPKHNpZ211bmQpOiB1c2Ugb3V0cHV0IHVuaXQgb2YgW21ldGhvZF0gd2hlbiB0aGUgY2xhc3NlcyBtZW50aW9uZWQKICAgICAgICAvLyBpbiBbdHlwZV0gYXJlbid0IGluIHRoZSBtYWluIG91dHB1dCB1bml0LiAoSXNzdWUgIzMxMDMyKQogICAgICAgIE91dHB1dFVuaXQgbWFpbk91dHB1dFVuaXQgPSBfb3V0cHV0VW5pdERhdGEubWFpbk91dHB1dFVuaXQ7CiAgICAgICAgaWYgKF9vdXRwdXRVbml0VmlzaXRvci5pc1R5cGVDb250YWluZWRJbih0eXBlLCBtYWluT3V0cHV0VW5pdCkpIHsKICAgICAgICAgIGZ1bmN0aW9uVHlwZUluZGV4ID0KICAgICAgICAgICAgICBlbWl0dGVyVGFzay5tZXRhZGF0YUNvbGxlY3Rvci5yZWlmeVR5cGUodHlwZSwgbWFpbk91dHB1dFVuaXQpOwogICAgICAgIH0gZWxzZSBpZiAoIXN0b3JlRnVuY3Rpb25UeXBlSW5NZXRhZGF0YSkgewogICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogU3VwcG9ydCBzaGFyaW5nIGRlZmVycmVkIHNpZ25hdHVyZXMgd2l0aCB0aGUKICAgICAgICAgIC8vIGZ1bGwgZW1pdHRlci4KICAgICAgICAgIGlzRGVmZXJyZWQgPSB0cnVlOwogICAgICAgICAgZnVuY3Rpb25UeXBlSW5kZXggPSBlbWl0dGVyVGFzay5tZXRhZGF0YUNvbGxlY3RvcgogICAgICAgICAgICAgIC5yZWlmeVR5cGUodHlwZSwgX291dHB1dFVuaXREYXRhLm91dHB1dFVuaXRGb3JNZW1iZXIobWV0aG9kKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdG9yZUZ1bmN0aW9uVHlwZUluTWV0YWRhdGEgJiYgZnVuY3Rpb25UeXBlSW5kZXggIT0gbnVsbCkgewogICAgICAgIHJlc3VsdC5mdW5jdGlvblR5cGVJbmRleCA9IGZ1bmN0aW9uVHlwZUluZGV4OwogICAgICB9IGVsc2UgewogICAgICAgIGpzQXN0LkV4cHJlc3Npb24gZW5jb2RpbmcgPQogICAgICAgICAgICBnZW5lcmF0ZWRDb2RlW2NsYXNzRnVuY3Rpb25UeXBlLnNpZ25hdHVyZUZ1bmN0aW9uXTsKICAgICAgICBpZiAoY2xhc3NGdW5jdGlvblR5cGUuc2lnbmF0dXJlRnVuY3Rpb24gPT0gbnVsbCkgewogICAgICAgICAgLy8gVGhlIHNpZ25hdHVyZSBmdW5jdGlvbiBpc24ndCBsaXZlLgogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoZnVuY3Rpb25UeXBlSW5kZXggIT0gbnVsbCkgewogICAgICAgICAgaWYgKGlzRGVmZXJyZWQpIHsKICAgICAgICAgICAgLy8gVGhlIGZ1bmN0aW9uIHR5cGUgaW5kZXggbXVzdCBiZSBvZmZzZXQgYnkgdGhlIG51bWJlciBvZiB0eXBlcwogICAgICAgICAgICAvLyBhbHJlYWR5IGxvYWRlZC4KICAgICAgICAgICAgZW5jb2RpbmcgPSBuZXcganNBc3QuQmluYXJ5KAogICAgICAgICAgICAgICAgJysnLAogICAgICAgICAgICAgICAgbmV3IGpzQXN0LlZhcmlhYmxlVXNlKF9uYW1lci50eXBlc09mZnNldE5hbWUpLAogICAgICAgICAgICAgICAgZnVuY3Rpb25UeXBlSW5kZXgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZW5jb2RpbmcgPSBmdW5jdGlvblR5cGVJbmRleDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGVuY29kaW5nICE9IG51bGwpIHsKICAgICAgICAgIGpzQXN0Lk5hbWUgb3BlcmF0b3JTaWduYXR1cmUgPQogICAgICAgICAgICAgIF9uYW1lci5hc05hbWUoX25hbWVyLmZpeGVkTmFtZXMub3BlcmF0b3JTaWduYXR1cmUpOwogICAgICAgICAgcmVzdWx0LmFkZFNpZ25hdHVyZShjbGFzc0VsZW1lbnQsIG9wZXJhdG9yU2lnbmF0dXJlLCBlbmNvZGluZyk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgdm9pZCBnZW5lcmF0ZVR5cGVDaGVjayhUeXBlQ2hlY2sgY2hlY2spIHsKICAgICAgQ2xhc3NFbnRpdHkgY2hlY2tlZENsYXNzID0gY2hlY2suY2xzOwogICAgICBpZiAoY2hlY2submVlZHNJcykgewogICAgICAgIHJlc3VsdC5hZGRJc1Rlc3QoCiAgICAgICAgICAgIGNoZWNrZWRDbGFzcywgX25hbWVyLm9wZXJhdG9ySXMoY2hlY2tlZENsYXNzKSwganMoJzEnKSk7CiAgICAgIH0KICAgICAgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbiA9IGNoZWNrLnN1YnN0aXR1dGlvbjsKICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPSBudWxsKSB7CiAgICAgICAganNBc3QuRXhwcmVzc2lvbiBib2R5ID0KICAgICAgICAgICAgX2dldFN1YnN0aXR1dGlvbkNvZGUoZW1pdHRlclRhc2suZW1pdHRlciwgc3Vic3RpdHV0aW9uKTsKICAgICAgICByZXN1bHQuYWRkU3Vic3RpdHV0aW9uKAogICAgICAgICAgICBjaGVja2VkQ2xhc3MsIF9uYW1lci5zdWJzdGl0dXRpb25OYW1lKGNoZWNrZWRDbGFzcyksIGJvZHkpOwogICAgICB9CiAgICB9CgogICAgX2dlbmVyYXRlSXNUZXN0c09uKAogICAgICAgIGNsYXNzRWxlbWVudCwgZ2VuZXJhdGVGdW5jdGlvblR5cGVTaWduYXR1cmUsIGdlbmVyYXRlVHlwZUNoZWNrKTsKCiAgICBpZiAoY2xhc3NFbGVtZW50ID09IF9jb21tb25FbGVtZW50cy5qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzKSB7CiAgICAgIHZhciB0eXBlID0ganNJbnRlcm9wQW5hbHlzaXMuYnVpbGRKc0Z1bmN0aW9uVHlwZSgpOwogICAgICBpZiAodHlwZSAhPSBudWxsKSB7CiAgICAgICAganNBc3QuRXhwcmVzc2lvbiB0aGlzQWNjZXNzID0gbmV3IGpzQXN0LlRoaXMoKTsKICAgICAgICBqc0FzdC5FeHByZXNzaW9uIGVuY29kaW5nID0gX3J0aUVuY29kZXIuZ2V0U2lnbmF0dXJlRW5jb2RpbmcoCiAgICAgICAgICAgIF9uYW1lciwgZW1pdHRlclRhc2suZW1pdHRlciwgdHlwZSwgdGhpc0FjY2Vzcyk7CiAgICAgICAganNBc3QuTmFtZSBvcGVyYXRvclNpZ25hdHVyZSA9CiAgICAgICAgICAgIF9uYW1lci5hc05hbWUoX25hbWVyLmZpeGVkTmFtZXMub3BlcmF0b3JTaWduYXR1cmUpOwogICAgICAgIHJlc3VsdC5hZGRTaWduYXR1cmUoY2xhc3NFbGVtZW50LCBvcGVyYXRvclNpZ25hdHVyZSwgZW5jb2RpbmcpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIENvbXB1dGUgYSBKYXZhU2NyaXB0IGV4cHJlc3Npb24gdGhhdCBkZXNjcmliZXMgdGhlIG5lY2Vzc2FyeSBzdWJzdGl0dXRpb24KICAvLy8gZm9yIHR5cGUgYXJndW1lbnRzIGluIGEgc3VidHlwZSB0ZXN0LgogIC8vLwogIC8vLyBUaGUgcmVzdWx0IGNhbiBiZToKICAvLy8gIDEpIGBudWxsYCwgaWYgbm8gc3Vic3RpdHV0ZWQgY2hlY2sgaXMgbmVjZXNzYXJ5LCBiZWNhdXNlIHRoZSB0eXBlCiAgLy8vICAgICB2YXJpYWJsZXMgYXJlIHRoZSBzYW1lIG9yIHRoZXJlIGFyZSBubyB0eXBlIHZhcmlhYmxlcyBpbiB0aGUgY2xhc3MKICAvLy8gICAgIHRoYXQgaXMgY2hlY2tlZCBmb3IuCiAgLy8vICAyKSBBIGxpc3QgZXhwcmVzc2lvbiBkZXNjcmliaW5nIHRoZSB0eXBlIGFyZ3VtZW50cyB0byBiZSB1c2VkIGluIHRoZQogIC8vLyAgICAgc3VidHlwZSBjaGVjaywgaWYgdGhlIHR5cGUgYXJndW1lbnRzIHRvIGJlIHVzZWQgaW4gdGhlIGNoZWNrIGRvIG5vdAogIC8vLyAgICAgZGVwZW5kIG9uIHRoZSB0eXBlIGFyZ3VtZW50cyBvZiB0aGUgb2JqZWN0LgogIC8vLyAgMykgQSBmdW5jdGlvbiBtYXBwaW5nIHRoZSB0eXBlIHZhcmlhYmxlcyBvZiB0aGUgb2JqZWN0IHRvIGJlIGNoZWNrZWQgdG8KICAvLy8gICAgIGEgbGlzdCBleHByZXNzaW9uLgogIGpzQXN0LkV4cHJlc3Npb24gX2dldFN1YnN0aXR1dGlvbkNvZGUoCiAgICAgIEVtaXR0ZXIgZW1pdHRlciwgU3Vic3RpdHV0aW9uIHN1YnN0aXR1dGlvbikgewogICAgaWYgKHN1YnN0aXR1dGlvbi5pc1RyaXZpYWwpIHsKICAgICAgcmV0dXJuIG5ldyBqc0FzdC5MaXRlcmFsTnVsbCgpOwogICAgfQoKICAgIGlmIChzdWJzdGl0dXRpb24uaXNKc0ludGVyb3ApIHsKICAgICAgcmV0dXJuIGpzKCdmdW5jdGlvbigpIHsgcmV0dXJuICMgfScsCiAgICAgICAgICBfcnRpRW5jb2Rlci5nZXRKc0ludGVyb3BUeXBlQXJndW1lbnRzKHN1YnN0aXR1dGlvbi5sZW5ndGgpKTsKICAgIH0KCiAgICBqc0FzdC5FeHByZXNzaW9uIGRlY2xhcmF0aW9uKFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUpIHsKICAgICAgcmV0dXJuIG5ldyBqc0FzdC5QYXJhbWV0ZXIoX2dldFZhcmlhYmxlTmFtZSh2YXJpYWJsZS5lbGVtZW50Lm5hbWUpKTsKICAgIH0KCiAgICBqc0FzdC5FeHByZXNzaW9uIHVzZShUeXBlVmFyaWFibGVUeXBlIHZhcmlhYmxlKSB7CiAgICAgIHJldHVybiBuZXcganNBc3QuVmFyaWFibGVVc2UoX2dldFZhcmlhYmxlTmFtZSh2YXJpYWJsZS5lbGVtZW50Lm5hbWUpKTsKICAgIH0KCiAgICBpZiAoc3Vic3RpdHV0aW9uLmFyZ3VtZW50cy5ldmVyeSgoRGFydFR5cGUgdHlwZSkgPT4gdHlwZS5pc0R5bmFtaWMpKSB7CiAgICAgIHJldHVybiBlbWl0dGVyLmdlbmVyYXRlRnVuY3Rpb25UaGF0UmV0dXJuc051bGwoKTsKICAgIH0gZWxzZSB7CiAgICAgIGpzQXN0LkV4cHJlc3Npb24gdmFsdWUgPQogICAgICAgICAgX2dldFN1YnN0aXR1dGlvblJlcHJlc2VudGF0aW9uKGVtaXR0ZXIsIHN1YnN0aXR1dGlvbi5hcmd1bWVudHMsIHVzZSk7CiAgICAgIGlmIChzdWJzdGl0dXRpb24uaXNGdW5jdGlvbikgewogICAgICAgIEl0ZXJhYmxlPGpzQXN0LkV4cHJlc3Npb24+IGZvcm1hbHMgPQogICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBQYXNzIFtkZWNsYXJhdGlvbl0gZGlyZWN0bHkgdG8gYG1hcGAgd2hlbgogICAgICAgICAgICAvLyBgc3Vic3RpdHV0aW9uLnBhcmFtZXRlcnNgIGNhbiBubyBsb25nZXIgYmUgYQogICAgICAgICAgICAvLyBgTGlzdDxSZXNvbHV0aW9uRGFydFR5cGU+YC4KICAgICAgICAgICAgc3Vic3RpdHV0aW9uLnBhcmFtZXRlcnMubWFwKCh0eXBlKSA9PiBkZWNsYXJhdGlvbih0eXBlKSk7CiAgICAgICAgcmV0dXJuIGpzKCdmdW5jdGlvbigjKSB7IHJldHVybiAjIH0nLCBbZm9ybWFscywgdmFsdWVdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4ganMoJ2Z1bmN0aW9uKCkgeyByZXR1cm4gIyB9JywgdmFsdWUpOwogICAgICB9CiAgICB9CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIF9nZXRTdWJzdGl0dXRpb25SZXByZXNlbnRhdGlvbigKICAgICAgRW1pdHRlciBlbWl0dGVyLCBMaXN0PERhcnRUeXBlPiB0eXBlcywgT25WYXJpYWJsZUNhbGxiYWNrIG9uVmFyaWFibGUpIHsKICAgIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gZWxlbWVudHMgPSB0eXBlcwogICAgICAgIC5tYXAoKERhcnRUeXBlIHR5cGUpID0+CiAgICAgICAgICAgIF9ydGlFbmNvZGVyLmdldFR5cGVSZXByZXNlbnRhdGlvbihlbWl0dGVyLCB0eXBlLCBvblZhcmlhYmxlKSkKICAgICAgICAudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICByZXR1cm4gbmV3IGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIoZWxlbWVudHMpOwogIH0KCiAgU3RyaW5nIF9nZXRWYXJpYWJsZU5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIC8vIEtlcm5lbCB0eXBlIHZhcmlhYmxlIG5hbWVzIGZvciBhbm9ueW1vdXMgbWl4aW4gYXBwbGljYXRpb25zIGhhdmUgbmFtZXMKICAgIC8vIGNhbm9uaWNhbGl6ZWQgdG8gYSBub24taWRlbnRpZmllZCwgZS5nLiAnI1UwJy4KICAgIG5hbWUgPSBuYW1lLnJlcGxhY2VBbGwoJyMnLCAnXycpOwogICAgcmV0dXJuIF9uYW1lci5zYWZlVmFyaWFibGVOYW1lKG5hbWUpOwogIH0KCiAgdm9pZCBfZ2VuZXJhdGVJc1Rlc3RzT24oCiAgICAgIENsYXNzRW50aXR5IGNscywKICAgICAgRnVuY3Rpb25UeXBlU2lnbmF0dXJlRW1pdHRlciBnZW5lcmF0ZUZ1bmN0aW9uVHlwZVNpZ25hdHVyZSwKICAgICAgdm9pZCBlbWl0VHlwZUNoZWNrKFR5cGVDaGVjayBjaGVjaykpIHsKICAgIFNldGxldDxDbGFzc0VudGl0eT4gZ2VuZXJhdGVkID0gbmV3IFNldGxldDxDbGFzc0VudGl0eT4oKTsKCiAgICAvLyBQcmVjb21wdXRlZCBpcyBjaGVja3MuCiAgICBDbGFzc0NoZWNrcyBjbGFzc0NoZWNrcyA9IF9ydGlDaGVja3MucmVxdWlyZWRDaGVja3NbY2xzXTsKICAgIEl0ZXJhYmxlPFR5cGVDaGVjaz4gdHlwZUNoZWNrcyA9IGNsYXNzQ2hlY2tzLmNoZWNrczsKICAgIGlmICh0eXBlQ2hlY2tzICE9IG51bGwpIHsKICAgICAgZm9yIChUeXBlQ2hlY2sgdHlwZUNoZWNrIGluIHR5cGVDaGVja3MpIHsKICAgICAgICBpZiAoIWdlbmVyYXRlZC5jb250YWlucyh0eXBlQ2hlY2suY2xzKSkgewogICAgICAgICAgZW1pdFR5cGVDaGVjayh0eXBlQ2hlY2spOwogICAgICAgICAgZ2VuZXJhdGVkLmFkZCh0eXBlQ2hlY2suY2xzKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBpZiAoY2xhc3NDaGVja3MuZnVuY3Rpb25UeXBlICE9IG51bGwpIHsKICAgICAgZ2VuZXJhdGVGdW5jdGlvblR5cGVTaWduYXR1cmUoY2xhc3NDaGVja3MuZnVuY3Rpb25UeXBlKTsKICAgIH0KICB9Cn0KCi8vLyBWaXNpdG9yIHRoYXQgY2hlY2tzIHdoZXRoZXIgYSB0eXBlIGlzIGNvbnRhaW5lZCB3aXRoaW4gb25lIG91dHB1dCB1bml0LgpjbGFzcyBfVHlwZUNvbnRhaW5lZEluT3V0cHV0VW5pdFZpc2l0b3IKICAgIGltcGxlbWVudHMgRGFydFR5cGVWaXNpdG9yPGJvb2wsIE91dHB1dFVuaXQ+IHsKICBmaW5hbCBDb21tb25FbGVtZW50cyBfY29tbW9uRWxlbWVudHM7CiAgZmluYWwgT3V0cHV0VW5pdERhdGEgX291dHB1dFVuaXREYXRhOwoKICBfVHlwZUNvbnRhaW5lZEluT3V0cHV0VW5pdFZpc2l0b3IodGhpcy5fY29tbW9uRWxlbWVudHMsIHRoaXMuX291dHB1dFVuaXREYXRhKTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGFsbCBjbGFzc2VzIG1lbnRpb25lZCBpbiBbdHlwZV0gYXJlIGluIFtvdXRwdXRVbml0XS4KICBib29sIGlzVHlwZUNvbnRhaW5lZEluKERhcnRUeXBlIHR5cGUsIE91dHB1dFVuaXQgb3V0cHV0VW5pdCkgPT4KICAgICAgdmlzaXQodHlwZSwgb3V0cHV0VW5pdCk7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXQoRGFydFR5cGUgdHlwZSwgT3V0cHV0VW5pdCBhcmd1bWVudCkgPT4gdHlwZS5hY2NlcHQodGhpcywgYXJndW1lbnQpOwoKICBib29sIHZpc2l0TGlzdChMaXN0PERhcnRUeXBlPiB0eXBlcywgT3V0cHV0VW5pdCBhcmd1bWVudCkgewogICAgZm9yIChEYXJ0VHlwZSB0eXBlIGluIHR5cGVzKSB7CiAgICAgIGlmICghdmlzaXQodHlwZSwgYXJndW1lbnQpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdXR1cmVPclR5cGUoRnV0dXJlT3JUeXBlIHR5cGUsIE91dHB1dFVuaXQgYXJndW1lbnQpIHsKICAgIGlmIChfb3V0cHV0VW5pdERhdGEub3V0cHV0VW5pdEZvckNsYXNzKF9jb21tb25FbGVtZW50cy5mdW5jdGlvbkNsYXNzKSAhPQogICAgICAgIGFyZ3VtZW50KSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB2aXNpdCh0eXBlLnR5cGVBcmd1bWVudCwgYXJndW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdER5bmFtaWNUeXBlKER5bmFtaWNUeXBlIHR5cGUsIE91dHB1dFVuaXQgYXJndW1lbnQpID0+IHRydWU7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUeXBlZGVmVHlwZShUeXBlZGVmVHlwZSB0eXBlLCBPdXRwdXRVbml0IGFyZ3VtZW50KSB7CiAgICByZXR1cm4gdmlzaXQodHlwZS51bmFsaWFzZWQsIGFyZ3VtZW50KTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgdHlwZSwgT3V0cHV0VW5pdCBhcmd1bWVudCkgewogICAgaWYgKF9vdXRwdXRVbml0RGF0YS5vdXRwdXRVbml0Rm9yQ2xhc3ModHlwZS5lbGVtZW50KSAhPSBhcmd1bWVudCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdmlzaXRMaXN0KHR5cGUudHlwZUFyZ3VtZW50cywgYXJndW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1bmN0aW9uVHlwZShGdW5jdGlvblR5cGUgdHlwZSwgT3V0cHV0VW5pdCBhcmd1bWVudCkgewogICAgYm9vbCByZXN1bHQgPSB2aXNpdCh0eXBlLnJldHVyblR5cGUsIGFyZ3VtZW50KSAmJgogICAgICAgIHZpc2l0TGlzdCh0eXBlLnBhcmFtZXRlclR5cGVzLCBhcmd1bWVudCkgJiYKICAgICAgICB2aXNpdExpc3QodHlwZS5vcHRpb25hbFBhcmFtZXRlclR5cGVzLCBhcmd1bWVudCkgJiYKICAgICAgICB2aXNpdExpc3QodHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzLCBhcmd1bWVudCk7CiAgICBpZiAoIXJlc3VsdCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlVmFyaWFibGUgaW4gdHlwZS50eXBlVmFyaWFibGVzKSB7CiAgICAgIGlmICghdmlzaXQodHlwZVZhcmlhYmxlLmJvdW5kLCBhcmd1bWVudCkpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1bmN0aW9uVHlwZVZhcmlhYmxlKAogICAgICBGdW5jdGlvblR5cGVWYXJpYWJsZSB0eXBlLCBPdXRwdXRVbml0IGFyZ3VtZW50KSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUeXBlVmFyaWFibGVUeXBlKFR5cGVWYXJpYWJsZVR5cGUgdHlwZSwgT3V0cHV0VW5pdCBhcmd1bWVudCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdFZvaWRUeXBlKFZvaWRUeXBlIHR5cGUsIE91dHB1dFVuaXQgYXJndW1lbnQpIHsKICAgIHJldHVybiB0cnVlOwogIH0KfQqBewBOTjwBMwE2QCQhISBGLipGMkIkKAE/AUtQAREZHwEoAgESExkWAgEbOAZGBk9NJiYBREcRTgFMTzcEARhBTz0EAU9POgQBGEctJC0GAUQuKC4rBgQCAR0oKCUWJyk+AUNIRC8BR09OSTQBTgZPSxYGTk1PFj85MjoBSk4+NgFGSktPKh8pUURESh5NM08bHTxNCghGNg8kQDswEgopHE0fKRU/JBMqDAogKUJKCggGAS4sGxpFCDYiIEUgSAgGARhJAUU6GjhGPCdASAgGEwQBUCwGGUlNH0xONk8dKTQiJgYBJCtHBgE+SwYBNk0GAUs4DR9QJS1OPCtGQQ81CAYEATNOLCBKIjEEASlONiYqBAEbF0ItPwEePjkeMDIkKAoIBgEsPwYEAgFMKDMoKAFRAU1CHwEMUQE+IyQWCAYRBAEMQ00UFAYvBAEMSAEMQSwEAQxFSBQGNAQBDEM2NDw3H0QyFggGEQQBDCI4EQQBDEsSBAEMOxEEAgE7cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9ydW50aW1lX3R5cGVfZ2VuZXJhdG9yLmRhcnQ5c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvdW5pdmVyc2UvdGFyZ2V0X2NoZWNrcy5kYXJ0iFcvLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLnRhcmdldF9jaGVja3M7CgovLy8gQSBzdW1tYXJ5IG9mIHRoZSBjaGVja3MgcmVxdWlyZWQgd2hlbiBlbnRlcmluZyBhIHRhcmdldCBtZXRob2QuCi8vLwovLy8gVGhlIHRhcmdldCBjaGVja3MgYXJlIHVzZWQgdG8gYW5ub3RhdGUgY2FsbCBzaXRlcyB3aXRoIHRoZSBjaGVja2luZyByZXF1aXJlZAovLy8gZnJvbSB0aGF0IGNhbGwgc2l0ZS4KLy8vCi8vLyBUaGUgdGFyZ2V0IGNhbiBlaXRoZXIgcGVyZm9ybSB3b3JzdC1jYXNlIGNoZWNrcyBvdmVyIGFsbCBjYWxsIHNpdGVzLCBvciBjYW4KLy8vIGJlIGdlbmVyYXRlZCBhcyBtdWx0aXBsZSBlbnRyeSBwb2ludHMgZm9yIGRpZmZlcmVudCBUYXJnZXRDaGVja3MuCi8vLwovLy8gVGhlIFRhcmdldENoZWNrcyBhdCBhIGNhbGwgc2l0ZSBjYW4gYmUgcmVmaW5lZCBieSBhbmFseXNpcy4gIEZvciBleGFtcGxlLAovLy8gdGhlIGdlbmVyaWMgY292YXJpYW50IGNoZWNrIGZvciB3cml0aW5nIGludG8gYSBMaXN0IG1pZ2h0IG5vdCBiZSByZXF1aXJlZAovLy8gd2hlbiBjb3B5aW5nIHZhbHVlcyBmcm9tIGEgTGlzdCBhbGxvY2F0ZWQgd2l0aCB0aGUgc2FtZSB0eXBlIHZhcmlhYmxlIHZhbHVlLgovLy8KLy8vIFRoZSBUYXJnZXRDaGVja3MgYXQgYSBjYWxsIHNpdGUgY2FuIGJlIHVzZWQgdG8gaW5mb3JtIG9wdGltaXphdGlvbnMsIGZvcgovLy8gZXhhbXBsZSwgb25seSBsb3dlcmluZyB0byBzaW1wbGVyIGluc3RydWN0aW9ucyB3aGVuIGdlbmVyaWMgY292YXJpYW50IGNoZWNrCi8vLyBpcyByZXF1aXJlZC4KLy8vCi8vLyBVbnNvdW5kIG1vZGVzIGNhbiBiZSBpbXBsZW1lbnRlZCBpbiBhIHNjb3BlZCBtYW5uZXIgYnkgdXNpbmcgYSBUYXJnZXRDaGVja3MKLy8vIHRoYXQgaGFzIGZld2VyIGNoZWNrcyB0aGFuIHJlcXVpcmVkIChvciBubyBjaGVja3MpIGluIHRoZSB1bnNvdW5kIHJlZ2lvbi4KY2xhc3MgVGFyZ2V0Q2hlY2tzIHsKICAvLyBUeXBpY2FsIG9mIGRpcmVjdCBzdGF0aWMgY2FsbCBzaXRlcy4KICAvLyBUeXBpY2FsIG9mIHN0YXRpYyBtZXRob2QgdGFyZ2V0cyB3aXRoIG5vIHRlYXItb2Zmcy4KICBzdGF0aWMgZmluYWwgVGFyZ2V0Q2hlY2tzIG5vbmUgPSBjb25zdCBUYXJnZXRDaGVja3MuXyhmYWxzZSwgZmFsc2UsIGZhbHNlKTsKCiAgLy8gVHlwaWNhbCBvZiBjbG9zdXJlIGNhbGxzIGFuZCBkeW5hbWljIGNhbGxzLgogIHN0YXRpYyBmaW5hbCBUYXJnZXRDaGVja3MgZHluYW1pY0NoZWNrcyA9CiAgICAgIGNvbnN0IFRhcmdldENoZWNrcy5fKHRydWUsIHRydWUsIHRydWUpOwoKICAvLyBUeXBpY2FsIG9mIG1ldGhvZCBjYWxscy4KICBzdGF0aWMgZmluYWwgVGFyZ2V0Q2hlY2tzIGNvdmFyaWFudENoZWNrcyA9CiAgICAgIGNvbnN0IFRhcmdldENoZWNrcy5fKGZhbHNlLCB0cnVlLCBmYWxzZSk7CgogIC8vIFRPRE8oc3JhKTogVGhpcyBjYW4gYmUgbW9yZSBmaW5lLWdyYWluZWQsIHRhbGtpbmcgYWJvdXQgaW5kaXZpZHVhbAogIC8vIHBhcmFtZXRlcnMuCiAgZmluYWwgYm9vbCBfY2hlY2tPdGhlclBhcmFtZXRlcnM7CiAgZmluYWwgYm9vbCBfY2hlY2tDb3ZhcmlhbnRQYXJhbWV0ZXJzOwogIGZpbmFsIGJvb2wgX2NoZWNrVHlwZVBhcmFtZXRlcnM7CiAgY29uc3QgVGFyZ2V0Q2hlY2tzLl8oCiAgICB0aGlzLl9jaGVja090aGVyUGFyYW1ldGVycywKICAgIHRoaXMuX2NoZWNrQ292YXJpYW50UGFyYW1ldGVycywKICAgIHRoaXMuX2NoZWNrVHlwZVBhcmFtZXRlcnMsCiAgKTsKCiAgYm9vbCBnZXQgY2hlY2tUeXBlUGFyYW1ldGVycyA9PiBfY2hlY2tUeXBlUGFyYW1ldGVyczsKICBib29sIGdldCBjaGVja0NvdmFyaWFudFBhcmFtZXRlcnMgPT4gX2NoZWNrQ292YXJpYW50UGFyYW1ldGVyczsKICBib29sIGdldCBjaGVja0FsbFBhcmFtZXRlcnMgPT4gX2NoZWNrT3RoZXJQYXJhbWV0ZXJzOwp9CjYATk48AR8BRARRGQRQRgROTlEETVARBFBOFSo5TgExLC4BHi4wAUgRJCgjGCAkHwUBOEI4AgEwcGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvdGFyZ2V0X2NoZWNrcy5kYXJ0M3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS9qdW1wX2hhbmRsZXIuZGFydJ+gLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2p1bXBzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CgppbXBvcnQgJ2J1aWxkZXJfa2VybmVsLmRhcnQnOwppbXBvcnQgJ2xvY2Fsc19oYW5kbGVyLmRhcnQnOwppbXBvcnQgJ25vZGVzLmRhcnQnOwoKLy8vIEEgc2luZ2xlIGJyZWFrL2NvbnRpbnVlIGluc3RydWN0aW9uLgpjbGFzcyBfSnVtcEhhbmRsZXJFbnRyeSB7CiAgZmluYWwgSEp1bXAganVtcEluc3RydWN0aW9uOwogIGZpbmFsIExvY2Fsc0hhbmRsZXIgbG9jYWxzOwogIGJvb2wgaXNCcmVhaygpID0+IGp1bXBJbnN0cnVjdGlvbiBpcyBIQnJlYWs7CiAgYm9vbCBpc0NvbnRpbnVlKCkgPT4ganVtcEluc3RydWN0aW9uIGlzIEhDb250aW51ZTsKICBfSnVtcEhhbmRsZXJFbnRyeSh0aGlzLmp1bXBJbnN0cnVjdGlvbiwgdGhpcy5sb2NhbHMpOwp9CgphYnN0cmFjdCBjbGFzcyBKdW1wSGFuZGxlciB7CiAgZmFjdG9yeSBKdW1wSGFuZGxlcihLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgYnVpbGRlciwgSnVtcFRhcmdldCB0YXJnZXQpIHsKICAgIHJldHVybiBuZXcgVGFyZ2V0SnVtcEhhbmRsZXIoYnVpbGRlciwgdGFyZ2V0KTsKICB9CiAgdm9pZCBnZW5lcmF0ZUJyZWFrKFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICBbTGFiZWxEZWZpbml0aW9uIGxhYmVsXSk7CiAgdm9pZCBnZW5lcmF0ZUNvbnRpbnVlKFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICBbTGFiZWxEZWZpbml0aW9uIGxhYmVsXSk7CiAgdm9pZCBmb3JFYWNoQnJlYWsodm9pZCBhY3Rpb24oSEJyZWFrIGluc3RydWN0aW9uLCBMb2NhbHNIYW5kbGVyIGxvY2FscykpOwogIHZvaWQgZm9yRWFjaENvbnRpbnVlKAogICAgICB2b2lkIGFjdGlvbihIQ29udGludWUgaW5zdHJ1Y3Rpb24sIExvY2Fsc0hhbmRsZXIgbG9jYWxzKSk7CiAgYm9vbCBoYXNBbnlDb250aW51ZSgpOwogIGJvb2wgaGFzQW55QnJlYWsoKTsKICB2b2lkIGNsb3NlKCk7CiAgZmluYWwgSnVtcFRhcmdldCB0YXJnZXQ7CiAgTGlzdDxMYWJlbERlZmluaXRpb24+IGdldCBsYWJlbHM7Cn0KCi8vLyBKdW1wIGhhbmRsZXIgdXNlZCB0byBhdm9pZCBudWxsIGNoZWNrcyB3aGVuIGEgdGFyZ2V0IGlzbid0IHVzZWQgYXMgdGhlCi8vLyB0YXJnZXQgb2YgYSBicmVhaywgYW5kIHRoZXJlZm9yZSBkb2Vzbid0IG5lZWQgYSBicmVhayBoYW5kbGVyIGFzc29jaWF0ZWQKLy8vIHdpdGggaXQuCmNsYXNzIE51bGxKdW1wSGFuZGxlciBpbXBsZW1lbnRzIEp1bXBIYW5kbGVyIHsKICBmaW5hbCBEaWFnbm9zdGljUmVwb3J0ZXIgcmVwb3J0ZXI7CgogIE51bGxKdW1wSGFuZGxlcih0aGlzLnJlcG9ydGVyKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBnZW5lcmF0ZUJyZWFrKFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICBbTGFiZWxEZWZpbml0aW9uIGxhYmVsXSkgewogICAgcmVwb3J0ZXIuaW50ZXJuYWxFcnJvcihDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICdOdWxsSnVtcEhhbmRsZXIuZ2VuZXJhdGVCcmVhayBzaG91bGQgbm90IGJlIGNhbGxlZC4nKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZ2VuZXJhdGVDb250aW51ZShTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgW0xhYmVsRGVmaW5pdGlvbiBsYWJlbF0pIHsKICAgIHJlcG9ydGVyLmludGVybmFsRXJyb3IoQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRSwKICAgICAgICAnTnVsbEp1bXBIYW5kbGVyLmdlbmVyYXRlQ29udGludWUgc2hvdWxkIG5vdCBiZSBjYWxsZWQuJyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hCcmVhayhGdW5jdGlvbiBpZ25vcmVkKSB7fQogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaENvbnRpbnVlKEZ1bmN0aW9uIGlnbm9yZWQpIHt9CiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpIHt9CiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNBbnlDb250aW51ZSgpID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgaGFzQW55QnJlYWsoKSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgTGlzdDxMYWJlbERlZmluaXRpb24+IGdldCBsYWJlbHMgPT4gY29uc3QgPExhYmVsRGVmaW5pdGlvbj5bXTsKICBAb3ZlcnJpZGUKICBKdW1wVGFyZ2V0IGdldCB0YXJnZXQgPT4gbnVsbDsKfQoKLy8vIEp1bXAgaGFuZGxlciB0aGF0IHJlY29yZHMgYnJlYWtzIHVudGlsIGEgdGFyZ2V0IGJsb2NrIGlzIGF2YWlsYWJsZS4KLy8vCi8vLyBCcmVha3MgYXJlIGFsd2F5cyBmb3J3YXJkIGp1bXBzLiBDb250aW51ZXMgaW4gbG9vcHMgYXJlIGltcGxlbWVudGVkIGFzCi8vLyBicmVha3Mgb2YgdGhlIGJvZHkuIENvbnRpbnVlcyBpbiBzd2l0Y2hlcyBpcyBjdXJyZW50bHkgbm90IGhhbmRsZWQuCmNsYXNzIFRhcmdldEp1bXBIYW5kbGVyIGltcGxlbWVudHMgSnVtcEhhbmRsZXIgewogIGZpbmFsIEtlcm5lbFNzYUdyYXBoQnVpbGRlciBidWlsZGVyOwogIEBvdmVycmlkZQogIGZpbmFsIEp1bXBUYXJnZXQgdGFyZ2V0OwogIGZpbmFsIExpc3Q8X0p1bXBIYW5kbGVyRW50cnk+IGp1bXBzOwoKICBUYXJnZXRKdW1wSGFuZGxlcihLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgYnVpbGRlciwgdGhpcy50YXJnZXQpCiAgICAgIDogdGhpcy5idWlsZGVyID0gYnVpbGRlciwKICAgICAgICBqdW1wcyA9IDxfSnVtcEhhbmRsZXJFbnRyeT5bXSB7CiAgICBhc3NlcnQoYnVpbGRlci5qdW1wVGFyZ2V0c1t0YXJnZXRdID09IG51bGwpOwogICAgYnVpbGRlci5qdW1wVGFyZ2V0c1t0YXJnZXRdID0gdGhpczsKICB9CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIGJ1aWxkZXIuY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgQG92ZXJyaWRlCiAgdm9pZCBnZW5lcmF0ZUJyZWFrKFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICBbTGFiZWxEZWZpbml0aW9uIGxhYmVsXSkgewogICAgSEluc3RydWN0aW9uIGJyZWFrSW5zdHJ1Y3Rpb247CiAgICBpZiAobGFiZWwgPT0gbnVsbCkgewogICAgICBicmVha0luc3RydWN0aW9uID0KICAgICAgICAgIG5ldyBIQnJlYWsoX2Fic3RyYWN0VmFsdWVEb21haW4sIHRhcmdldCwgc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgYnJlYWtJbnN0cnVjdGlvbiA9CiAgICAgICAgICBuZXcgSEJyZWFrLnRvTGFiZWwoX2Fic3RyYWN0VmFsdWVEb21haW4sIGxhYmVsLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgICBMb2NhbHNIYW5kbGVyIGxvY2FscyA9IG5ldyBMb2NhbHNIYW5kbGVyLmZyb20oYnVpbGRlci5sb2NhbHNIYW5kbGVyKTsKICAgIGJ1aWxkZXIuY2xvc2UoYnJlYWtJbnN0cnVjdGlvbik7CiAgICBqdW1wcy5hZGQobmV3IF9KdW1wSGFuZGxlckVudHJ5KGJyZWFrSW5zdHJ1Y3Rpb24sIGxvY2FscykpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBnZW5lcmF0ZUNvbnRpbnVlKFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICBbTGFiZWxEZWZpbml0aW9uIGxhYmVsXSkgewogICAgSEluc3RydWN0aW9uIGNvbnRpbnVlSW5zdHJ1Y3Rpb247CiAgICBpZiAobGFiZWwgPT0gbnVsbCkgewogICAgICBjb250aW51ZUluc3RydWN0aW9uID0KICAgICAgICAgIG5ldyBIQ29udGludWUoX2Fic3RyYWN0VmFsdWVEb21haW4sIHRhcmdldCwgc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIHsKICAgICAgY29udGludWVJbnN0cnVjdGlvbiA9CiAgICAgICAgICBuZXcgSENvbnRpbnVlLnRvTGFiZWwoX2Fic3RyYWN0VmFsdWVEb21haW4sIGxhYmVsLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIC8vIFN3aXRjaCBjYXNlIGNvbnRpbnVlIHN0YXRlbWVudHMgbXVzdCBiZSBoYW5kbGVkIGJ5IHRoZQogICAgICAvLyBbU3dpdGNoQ2FzZUp1bXBIYW5kbGVyXS4KICAgICAgYXNzZXJ0KCFsYWJlbC50YXJnZXQuaXNTd2l0Y2hDYXNlKTsKICAgIH0KICAgIExvY2Fsc0hhbmRsZXIgbG9jYWxzID0gbmV3IExvY2Fsc0hhbmRsZXIuZnJvbShidWlsZGVyLmxvY2Fsc0hhbmRsZXIpOwogICAgYnVpbGRlci5jbG9zZShjb250aW51ZUluc3RydWN0aW9uKTsKICAgIGp1bXBzLmFkZChuZXcgX0p1bXBIYW5kbGVyRW50cnkoY29udGludWVJbnN0cnVjdGlvbiwgbG9jYWxzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hCcmVhayhGdW5jdGlvbiBhY3Rpb24pIHsKICAgIGZvciAoX0p1bXBIYW5kbGVyRW50cnkgZW50cnkgaW4ganVtcHMpIHsKICAgICAgaWYgKGVudHJ5LmlzQnJlYWsoKSkgYWN0aW9uKGVudHJ5Lmp1bXBJbnN0cnVjdGlvbiwgZW50cnkubG9jYWxzKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaENvbnRpbnVlKEZ1bmN0aW9uIGFjdGlvbikgewogICAgZm9yIChfSnVtcEhhbmRsZXJFbnRyeSBlbnRyeSBpbiBqdW1wcykgewogICAgICBpZiAoZW50cnkuaXNDb250aW51ZSgpKSBhY3Rpb24oZW50cnkuanVtcEluc3RydWN0aW9uLCBlbnRyeS5sb2NhbHMpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBoYXNBbnlDb250aW51ZSgpIHsKICAgIGZvciAoX0p1bXBIYW5kbGVyRW50cnkgZW50cnkgaW4ganVtcHMpIHsKICAgICAgaWYgKGVudHJ5LmlzQ29udGludWUoKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGhhc0FueUJyZWFrKCkgewogICAgZm9yIChfSnVtcEhhbmRsZXJFbnRyeSBlbnRyeSBpbiBqdW1wcykgewogICAgICBpZiAoZW50cnkuaXNCcmVhaygpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2xvc2UoKSB7CiAgICAvLyBUaGUgbWFwcGluZyBmcm9tIFRhcmdldEVsZW1lbnQgdG8gSnVtcEhhbmRsZXIgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KICAgIGJ1aWxkZXIuanVtcFRhcmdldHMucmVtb3ZlKHRhcmdldCk7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXN0PExhYmVsRGVmaW5pdGlvbj4gZ2V0IGxhYmVscyB7CiAgICBMaXN0PExhYmVsRGVmaW5pdGlvbj4gcmVzdWx0ID0gbnVsbDsKICAgIGZvciAoTGFiZWxEZWZpbml0aW9uIGVsZW1lbnQgaW4gdGFyZ2V0LmxhYmVscykgewogICAgICByZXN1bHQgPz89IDxMYWJlbERlZmluaXRpb24+W107CiAgICAgIHJlc3VsdC5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0ID8/IGNvbnN0IDxMYWJlbERlZmluaXRpb24+W107CiAgfQp9CgovLy8gU3BlY2lhbCBbSnVtcEhhbmRsZXJdIGltcGxlbWVudGF0aW9uIHVzZWQgdG8gaGFuZGxlIGNvbnRpbnVlIHN0YXRlbWVudHMKLy8vIHRhcmdldGluZyBzd2l0Y2ggY2FzZXMuCmFic3RyYWN0IGNsYXNzIFN3aXRjaENhc2VKdW1wSGFuZGxlciBleHRlbmRzIFRhcmdldEp1bXBIYW5kbGVyIHsKICAvLy8gTWFwIGZyb20gc3dpdGNoIGNhc2UgdGFyZ2V0cyB0byBpbmRpY2VzIHVzZWQgdG8gZW5jb2RlIHRoZSBmbG93IG9mIHRoZQogIC8vLyBzd2l0Y2ggY2FzZSBsb29wLgogIGZpbmFsIE1hcDxKdW1wVGFyZ2V0LCBpbnQ+IHRhcmdldEluZGV4TWFwID0gbmV3IE1hcDxKdW1wVGFyZ2V0LCBpbnQ+KCk7CgogIFN3aXRjaENhc2VKdW1wSGFuZGxlcihLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgYnVpbGRlciwgSnVtcFRhcmdldCB0YXJnZXQpCiAgICAgIDogc3VwZXIoYnVpbGRlciwgdGFyZ2V0KTsKCiAgQG92ZXJyaWRlCiAgdm9pZCBnZW5lcmF0ZUJyZWFrKFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICBbTGFiZWxEZWZpbml0aW9uIGxhYmVsXSkgewogICAgaWYgKGxhYmVsID09IG51bGwpIHsKICAgICAgLy8gQ3JlYXRlcyBhIHNwZWNpYWwgYnJlYWsgaW5zdHJ1Y3Rpb24gZm9yIHRoZSBzeW50aGV0aWMgbG9vcCBnZW5lcmF0ZWQKICAgICAgLy8gZm9yIGEgc3dpdGNoIHN0YXRlbWVudCB3aXRoIGNvbnRpbnVlIHN0YXRlbWVudHMuIFNlZQogICAgICAvLyBbU3NhRnJvbUFzdE1peGluLmJ1aWxkQ29tcGxleFN3aXRjaFN0YXRlbWVudF0gZm9yIGRldGFpbC4KCiAgICAgIEhJbnN0cnVjdGlvbiBicmVha0luc3RydWN0aW9uID0gbmV3IEhCcmVhaygKICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLCB0YXJnZXQsIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICAgICAgYnJlYWtTd2l0Y2hDb250aW51ZUxvb3A6IHRydWUpOwogICAgICBMb2NhbHNIYW5kbGVyIGxvY2FscyA9IG5ldyBMb2NhbHNIYW5kbGVyLmZyb20oYnVpbGRlci5sb2NhbHNIYW5kbGVyKTsKICAgICAgYnVpbGRlci5jbG9zZShicmVha0luc3RydWN0aW9uKTsKICAgICAganVtcHMuYWRkKG5ldyBfSnVtcEhhbmRsZXJFbnRyeShicmVha0luc3RydWN0aW9uLCBsb2NhbHMpKTsKICAgIH0gZWxzZSB7CiAgICAgIHN1cGVyLmdlbmVyYXRlQnJlYWsoc291cmNlSW5mb3JtYXRpb24sIGxhYmVsKTsKICAgIH0KICB9CgogIGJvb2wgaXNDb250aW51ZVRvU3dpdGNoQ2FzZShMYWJlbERlZmluaXRpb24gbGFiZWwpIHsKICAgIHJldHVybiBsYWJlbCAhPSBudWxsICYmIHRhcmdldEluZGV4TWFwLmNvbnRhaW5zS2V5KGxhYmVsLnRhcmdldCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGdlbmVyYXRlQ29udGludWUoU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIFtMYWJlbERlZmluaXRpb24gbGFiZWxdKSB7CiAgICBpZiAoaXNDb250aW51ZVRvU3dpdGNoQ2FzZShsYWJlbCkpIHsKICAgICAgLy8gQ3JlYXRlcyB0aGUgc3BlY2lhbCBpbnN0cnVjdGlvbnMgJ2xhYmVsID0gaTsgY29udGludWUgbDsnIHVzZWQgaW4KICAgICAgLy8gc3dpdGNoIHN0YXRlbWVudHMgd2l0aCBjb250aW51ZSBzdGF0ZW1lbnRzLiBTZWUKICAgICAgLy8gW1NzYUZyb21Bc3RNaXhpbi5idWlsZENvbXBsZXhTd2l0Y2hTdGF0ZW1lbnRdIGZvciBkZXRhaWwuCgogICAgICBhc3NlcnQobGFiZWwgIT0gbnVsbCk7CiAgICAgIEhJbnN0cnVjdGlvbiB2YWx1ZSA9IGJ1aWxkZXIuZ3JhcGgKICAgICAgICAgIC5hZGRDb25zdGFudEludCh0YXJnZXRJbmRleE1hcFtsYWJlbC50YXJnZXRdLCBidWlsZGVyLmNsb3NlZFdvcmxkKTsKICAgICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyLnVwZGF0ZUxvY2FsKHRhcmdldCwgdmFsdWUpOwoKICAgICAgYXNzZXJ0KGxhYmVsLnRhcmdldC5sYWJlbHMuY29udGFpbnMobGFiZWwpKTsKICAgICAgSEluc3RydWN0aW9uIGNvbnRpbnVlSW5zdHJ1Y3Rpb24gPQogICAgICAgICAgbmV3IEhDb250aW51ZShfYWJzdHJhY3RWYWx1ZURvbWFpbiwgdGFyZ2V0LCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgIExvY2Fsc0hhbmRsZXIgbG9jYWxzID0gbmV3IExvY2Fsc0hhbmRsZXIuZnJvbShidWlsZGVyLmxvY2Fsc0hhbmRsZXIpOwogICAgICBidWlsZGVyLmNsb3NlKGNvbnRpbnVlSW5zdHJ1Y3Rpb24pOwogICAgICBqdW1wcy5hZGQobmV3IF9KdW1wSGFuZGxlckVudHJ5KGNvbnRpbnVlSW5zdHJ1Y3Rpb24sIGxvY2FscykpOwogICAgfSBlbHNlIHsKICAgICAgc3VwZXIuZ2VuZXJhdGVDb250aW51ZShzb3VyY2VJbmZvcm1hdGlvbiwgbGFiZWwpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBjbG9zZSgpIHsKICAgIC8vIFRoZSBtYXBwaW5nIGZyb20gVGFyZ2V0RWxlbWVudCB0byBKdW1wSGFuZGxlciBpcyBubyBsb25nZXIgbmVlZGVkLgogICAgZm9yIChKdW1wVGFyZ2V0IHRhcmdldCBpbiB0YXJnZXRJbmRleE1hcC5rZXlzKSB7CiAgICAgIGJ1aWxkZXIuanVtcFRhcmdldHMucmVtb3ZlKHRhcmdldCk7CiAgICB9CiAgICBzdXBlci5jbG9zZSgpOwogIH0KfQqA+QBOTjwBGSExKAEeHhUBKRofHi81OAIBHUozBDogPSBMGEEZFhAbJAIBS00NLyUBIgEMOiE2QAQBDD0hNkMEAQwpDCwMEgwiDB8BDEEMIQIBSARLSDEnDBsnAUAgKDEoBAEyLwEMOiEjGRlHDRlOBkolQAQBDD0hJhkcSg0cUUAiKgZKKEMEAQwnLUgGBAEMKi1LBgQBDBotKwYSBAEMFy0oBhIEAQwRSigEAQwlKTUmGwYwBAIBTBxBTRhKAUogAQw6IRlOPkMBMjsqTCdCDTUGBAE3RgQBDD0hKUs5QwEdKU44ATMpSkwqRQ04BgQBDBFKNSoGEwQCASpwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvanVtcF9oYW5kbGVyLmRhcnQ8c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL2tlcm5lbF9zdHJpbmdfYnVpbGRlci5kYXJ0ieEvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnYnVpbGRlcl9rZXJuZWwuZGFydCc7CmltcG9ydCAnbm9kZXMuZGFydCc7CgovLy8gVmlzaXRzIGFuZCBjb25jYXRlbmF0ZXMgdGhlIGV4cHJlc3Npb25zIGluIGEgc3RyaW5nIGNvbmNhdGVuYXRpb24uCmNsYXNzIEtlcm5lbFN0cmluZ0J1aWxkZXIgZXh0ZW5kcyBpci5WaXNpdG9yIHsKICBmaW5hbCBLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgYnVpbGRlcjsKCiAgLy8vIFRoZSBzdHJpbmcgdmFsdWUgZ2VuZXJhdGVkIHNvIGZhci4KICBISW5zdHJ1Y3Rpb24gcmVzdWx0ID0gbnVsbDsKCiAgS2VybmVsU3RyaW5nQnVpbGRlcih0aGlzLmJ1aWxkZXIpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBfYWJzdHJhY3RWYWx1ZURvbWFpbiA9PgogICAgICBidWlsZGVyLmNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CgogIEBvdmVycmlkZQogIHZvaWQgZGVmYXVsdE5vZGUoaXIuTm9kZSBub2RlKSB7CiAgICBmYWlsZWRBdChDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLCAnVW5leHBlY3RlZCBub2RlOiAkbm9kZScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0RXhwcmVzc2lvbihpci5FeHByZXNzaW9uIG5vZGUpIHsKICAgIG5vZGUuYWNjZXB0KGJ1aWxkZXIpOwogICAgSEluc3RydWN0aW9uIGV4cHJlc3Npb24gPSBidWlsZGVyLnBvcCgpOwoKICAgIC8vIFdlIHdhbnQgdG8gdXNlIEhTdHJpbmdpZnkgd2hlbjoKICAgIC8vICAgMS4gVGhlIHZhbHVlIGlzIGtub3duIHRvIGJlIGEgcHJpbWl0aXZlIHR5cGUsIGJlY2F1c2UgaXQgbWlnaHQgZ2V0CiAgICAvLyAgICAgIGNvbnN0YW50LWZvbGRlZCBhbmQgY29kZWdlbiBoYXMgc29tZSB0cmlja3Mgd2l0aCBKYXZhU2NyaXB0CiAgICAvLyAgICAgIGNvbnZlcnNpb25zLgogICAgLy8gICAyLiBUaGUgdmFsdWUgY2FuIGJlIHByaW1pdGl2ZSwgYmVjYXVzZSB0aGUgbGlicmFyeSBzdHJpbmdpZmllciBoYXMKICAgIC8vICAgICAgZmFzdC1wYXRoIGNvZGUgZm9yIG1vc3QgcHJpbWl0aXZlcy4KICAgIGlmIChleHByZXNzaW9uLmlzUHJpbWl0aXZlKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICBhcHBlbmQoc3RyaW5naWZ5KGV4cHJlc3Npb24pKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFRPRE8oZWZvcnR1bmEpOiBJZiB3ZSBkZWNpZGUgdG8gZG8gaW5saW5pbmcgYmVmb3JlIGZpbmlzaGluZyBjb25zdHJ1Y3RpbmcKICAgIC8vIHRoZSBjb250cm9sIGZsb3cgZ3JhcGgsIHdlJ2Qgd2FudCB0byBkbyB0aGUgb3B0aW1pemF0aW9uIG9mCiAgICAvLyBjYWxsaW5nIHRvU3RyaW5nIGhlcmUgaWYgdGhlIHR5cGUgaXMgcHJvdmFibHkgYSBzdHJpbmcgcmF0aGVyIHRoYW4gaW4gdGhlCiAgICAvLyBvcHRpbWl6YXRpb24gcGhhc2UgKHdoaWNoIGlzIHdoZXJlIHdlIGN1cnJlbnRseSBkbyBpdCkuCgogICAgYXBwZW5kKHN0cmluZ2lmeShleHByZXNzaW9uKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihpci5TdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICB9CgogIHZvaWQgYXBwZW5kKEhJbnN0cnVjdGlvbiBleHByZXNzaW9uKSB7CiAgICByZXN1bHQgPSAocmVzdWx0ID09IG51bGwpID8gZXhwcmVzc2lvbiA6IGNvbmNhdChyZXN1bHQsIGV4cHJlc3Npb24pOwogIH0KCiAgSEluc3RydWN0aW9uIGNvbmNhdChISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0KSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPQogICAgICAgIG5ldyBIU3RyaW5nQ29uY2F0KGxlZnQsIHJpZ2h0LCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5zdHJpbmdUeXBlKTsKICAgIGJ1aWxkZXIuYWRkKGluc3RydWN0aW9uKTsKICAgIHJldHVybiBpbnN0cnVjdGlvbjsKICB9CgogIEhJbnN0cnVjdGlvbiBzdHJpbmdpZnkoSEluc3RydWN0aW9uIGV4cHJlc3Npb24pIHsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9CiAgICAgICAgbmV3IEhTdHJpbmdpZnkoZXhwcmVzc2lvbiwgX2Fic3RyYWN0VmFsdWVEb21haW4uc3RyaW5nVHlwZSkKICAgICAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBleHByZXNzaW9uLnNvdXJjZUluZm9ybWF0aW9uOwogICAgYnVpbGRlci5hZGQoaW5zdHJ1Y3Rpb24pOwogICAgcmV0dXJuIGluc3RydWN0aW9uOwogIH0KfQpOAE5OPAEoARkxHhUBRy8nASkeASUBMi8BDCNDBAEMLxotASdMSBlMMEolDgYBUUNRPwEjBAEMPx4EASlJBAE/H0keGAQBNB9EPh4YBAIBM3BhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9rZXJuZWxfc3RyaW5nX2J1aWxkZXIuZGFydDVzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2EvbG9jYWxzX2hhbmRsZXIuZGFydMAAcccvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jbG9zdXJlLmRhcnQnOwppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmF0aXZlX2RhdGEuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9pbnRlcmNlcHRvcl9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL2pzX21vZGVsL2Nsb3N1cmUuZGFydCcgc2hvdyBKUmVjb3JkRmllbGQsIEpDbG9zdXJlRmllbGQ7CmltcG9ydCAnLi4vanNfbW9kZWwvbG9jYWxzLmRhcnQnIHNob3cgSkxvY2FsOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwoKaW1wb3J0ICdidWlsZGVyX2tlcm5lbC5kYXJ0JzsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKaW1wb3J0ICd0eXBlcy5kYXJ0JzsKCi8vLyBLZWVwcyB0cmFjayBvZiBsb2NhbHMgKGluY2x1ZGluZyBwYXJhbWV0ZXJzIGFuZCBwaGlzKSB3aGVuIGJ1aWxkaW5nLiBUaGUKLy8vICd0aGlzJyByZWZlcmVuY2UgaXMgdHJlYXRlZCBhcyBwYXJhbWV0ZXIgYW5kIGhlbmNlIGhhbmRsZWQgYnkgdGhpcyBjbGFzcywKLy8vIHRvby4KY2xhc3MgTG9jYWxzSGFuZGxlciB7CiAgLy8vIFRoZSB2YWx1ZXMgb2YgbG9jYWxzIHRoYXQgY2FuIGJlIGRpcmVjdGx5IGFjY2Vzc2VkICh3aXRob3V0IHJlZGlyZWN0aW9ucwogIC8vLyB0byBib3hlcyBvciBjbG9zdXJlLWZpZWxkcykuCiAgLy8vCiAgLy8vIFtkaXJlY3RMb2NhbHNdIGlzIGl0ZXJhdGVkLCBzbyBpdCBpcyAiaW5zZXJ0aW9uIG9yZGVyZWQiIHRvIG1ha2UgdGhlCiAgLy8vIGl0ZXJhdGlvbiBvcmRlciBhIGZ1bmN0aW9uIG9ubHkgb2YgaW5zZXJ0aW9ucyBhbmQgbm90IGEgZnVuY3Rpb24gb2YKICAvLy8gZS5nLiBFbGVtZW50IGhhc2ggY29kZXMuICBJJ2QgcHJlZmVyIHRvIHVzZSBhIFNvcnRlZE1hcCBidXQgc29tZSBlbGVtZW50cwogIC8vLyBkb24ndCBoYXZlIHNvdXJjZSBsb2NhdGlvbnMgZm9yIFtFbGVtZW50cy5jb21wYXJlQnlQb3NpdGlvbl0uCiAgTWFwPExvY2FsLCBISW5zdHJ1Y3Rpb24+IGRpcmVjdExvY2FscyA9IG5ldyBNYXA8TG9jYWwsIEhJbnN0cnVjdGlvbj4oKTsKICBNYXA8TG9jYWwsIEZpZWxkRW50aXR5PiByZWRpcmVjdGlvbk1hcHBpbmcgPSBuZXcgTWFwPExvY2FsLCBGaWVsZEVudGl0eT4oKTsKICBmaW5hbCBLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgYnVpbGRlcjsKICBTY29wZUluZm8gc2NvcGVJbmZvOwogIE1hcDxUeXBlVmFyaWFibGVUeXBlLCBUeXBlVmFyaWFibGVMb2NhbD4gdHlwZVZhcmlhYmxlTG9jYWxzID0KICAgICAgbmV3IE1hcDxUeXBlVmFyaWFibGVUeXBlLCBUeXBlVmFyaWFibGVMb2NhbD4oKTsKICBmaW5hbCBFbnRpdHkgZXhlY3V0YWJsZUNvbnRleHQ7CiAgZmluYWwgTWVtYmVyRW50aXR5IG1lbWJlckNvbnRleHQ7CgogIC8vLyBUaGUgdHlwZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZS4gYG51bGxgIGlmIGluIGEgc3RhdGljIGNvbnRleHQuCiAgLy8vCiAgLy8vIFRoaXMgaXMgdGhlIHR5cGUgb2YgYHRoaXNgIGlzIHRoZSBjdXJyZW50IGNvbnRleHQsIGFuZCBpcyBvZnRlbiB0aGUKICAvLy8gJ3RoaXMgdHlwZScgb2YgdGhlIGVuY2xvc2luZyBjbGFzcyBvZiBhIG1lbWJlci4KICAvLy8KICAvLy8gSWYgdGhlIGN1cnJlbnQgaW5zdGFuY2UgaXMgY29uY3JldGUsIHdlIGNhbiBoYW5kbGUgZml4ZWQgdHlwZSBhcmd1bWVudCBpbgogIC8vLyBjYXNlIG9mIGlubGluaW5nLiBGb3IgaW5zdGFuY2UsIGNoZWNraW5nIGAnZm9vJ2AgYWdhaW5zdCBgU3RyaW5nYCBpbnN0ZWFkCiAgLy8vIG9mIGBUYCBpbiBgbWFpbmA6CiAgLy8vCiAgLy8vICAgICBjbGFzcyBGb288VD4gewogIC8vLyAgICAgICBUIGZpZWxkOwogIC8vLyAgICAgICBGb28odGhpcy5maWVsZCk7CiAgLy8vICAgICB9CiAgLy8vICAgICBtYWluKCkgewogIC8vLyAgICAgICBuZXcgRm9vPFN0cmluZz4oJ2ZvbycpOwogIC8vLyAgICAgfQogIC8vLwogIGZpbmFsIEludGVyZmFjZVR5cGUgaW5zdGFuY2VUeXBlOwoKICBmaW5hbCBOYXRpdmVEYXRhIF9uYXRpdmVEYXRhOwoKICBmaW5hbCBJbnRlcmNlcHRvckRhdGEgX2ludGVyY2VwdG9yRGF0YTsKCiAgTG9jYWxzSGFuZGxlcih0aGlzLmJ1aWxkZXIsIHRoaXMuZXhlY3V0YWJsZUNvbnRleHQsIHRoaXMubWVtYmVyQ29udGV4dCwKICAgICAgdGhpcy5pbnN0YW5jZVR5cGUsIHRoaXMuX25hdGl2ZURhdGEsIHRoaXMuX2ludGVyY2VwdG9yRGF0YSk7CgogIEpDbG9zZWRXb3JsZCBnZXQgX2Nsb3NlZFdvcmxkID0+IGJ1aWxkZXIuY2xvc2VkV29ybGQ7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIF9jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0cyBnZXQgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMgPT4KICAgICAgYnVpbGRlci5nbG9iYWxJbmZlcmVuY2VSZXN1bHRzOwoKICAvLy8gU3Vic3RpdHV0ZWQgdHlwZSB2YXJpYWJsZXMgb2NjdXJyaW5nIGluIFt0eXBlXSBpbnRvIHRoZSBjb250ZXh0IG9mCiAgLy8vIFtjb250ZXh0Q2xhc3NdLgogIERhcnRUeXBlIHN1YnN0SW5Db250ZXh0KERhcnRUeXBlIHR5cGUpIHsKICAgIERhcnRUeXBlIG5ld1R5cGUgPSB0eXBlOwogICAgaWYgKGluc3RhbmNlVHlwZSAhPSBudWxsKSB7CiAgICAgIENsYXNzRW50aXR5IHR5cGVDb250ZXh0ID0gRGFydFR5cGVzLmdldENsYXNzQ29udGV4dChuZXdUeXBlKTsKICAgICAgaWYgKHR5cGVDb250ZXh0ICE9IG51bGwpIHsKICAgICAgICBuZXdUeXBlID0gX2Nsb3NlZFdvcmxkLmRhcnRUeXBlcy5zdWJzdEJ5Q29udGV4dCgKICAgICAgICAgICAgbmV3VHlwZSwKICAgICAgICAgICAgX2Nsb3NlZFdvcmxkLmRhcnRUeXBlcy5hc0luc3RhbmNlT2YoCiAgICAgICAgICAgICAgICBfY2xvc2VkV29ybGQuZGFydFR5cGVzLmdldFRoaXNUeXBlKGluc3RhbmNlVHlwZS5lbGVtZW50KSwKICAgICAgICAgICAgICAgIHR5cGVDb250ZXh0KSk7CiAgICAgIH0KICAgICAgaWYgKCFpbnN0YW5jZVR5cGUuY29udGFpbnNUeXBlVmFyaWFibGVzKSB7CiAgICAgICAgbmV3VHlwZSA9IF9jbG9zZWRXb3JsZC5kYXJ0VHlwZXMuc3Vic3RCeUNvbnRleHQobmV3VHlwZSwgaW5zdGFuY2VUeXBlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ld1R5cGU7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIG5ldyBbTG9jYWxzSGFuZGxlcl0gYmFzZWQgb24gW290aGVyXS4gV2Ugb25seSBuZWVkIHRvCiAgLy8vIGNvcHkgdGhlIFtkaXJlY3RMb2NhbHNdLCBzaW5jZSB0aGUgb3RoZXIgZmllbGRzIGNhbiBiZSBzaGFyZWQKICAvLy8gdGhyb3VnaG91dCB0aGUgQVNUIHZpc2l0LgogIExvY2Fsc0hhbmRsZXIuZnJvbShMb2NhbHNIYW5kbGVyIG90aGVyKQogICAgICA6IGRpcmVjdExvY2FscyA9IG5ldyBNYXA8TG9jYWwsIEhJbnN0cnVjdGlvbj4uZnJvbShvdGhlci5kaXJlY3RMb2NhbHMpLAogICAgICAgIHJlZGlyZWN0aW9uTWFwcGluZyA9IG90aGVyLnJlZGlyZWN0aW9uTWFwcGluZywKICAgICAgICBleGVjdXRhYmxlQ29udGV4dCA9IG90aGVyLmV4ZWN1dGFibGVDb250ZXh0LAogICAgICAgIG1lbWJlckNvbnRleHQgPSBvdGhlci5tZW1iZXJDb250ZXh0LAogICAgICAgIGluc3RhbmNlVHlwZSA9IG90aGVyLmluc3RhbmNlVHlwZSwKICAgICAgICBidWlsZGVyID0gb3RoZXIuYnVpbGRlciwKICAgICAgICBzY29wZUluZm8gPSBvdGhlci5zY29wZUluZm8sCiAgICAgICAgX25hdGl2ZURhdGEgPSBvdGhlci5fbmF0aXZlRGF0YSwKICAgICAgICBfaW50ZXJjZXB0b3JEYXRhID0gb3RoZXIuX2ludGVyY2VwdG9yRGF0YSwKICAgICAgICBhY3RpdmF0aW9uVmFyaWFibGVzID0gb3RoZXIuYWN0aXZhdGlvblZhcmlhYmxlcywKICAgICAgICBjYWNoZWRUeXBlT2ZUaGlzID0gb3RoZXIuY2FjaGVkVHlwZU9mVGhpcywKICAgICAgICBjYWNoZWRUeXBlc09mQ2FwdHVyZWRWYXJpYWJsZXMgPSBvdGhlci5jYWNoZWRUeXBlc09mQ2FwdHVyZWRWYXJpYWJsZXM7CgogIC8vLyBSZWRpcmVjdHMgYWNjZXNzZXMgZnJvbSBlbGVtZW50IFtmcm9tXSB0byBlbGVtZW50IFt0b10uIFRoZSBbdG9dIGVsZW1lbnQKICAvLy8gbXVzdCBiZSBhIGJveGVkIHZhcmlhYmxlIG9yIGEgdmFyaWFibGUgdGhhdCBpcyBzdG9yZWQgaW4gYSBjbG9zdXJlLWZpZWxkLgogIHZvaWQgcmVkaXJlY3RFbGVtZW50KExvY2FsIGZyb20sIEZpZWxkRW50aXR5IHRvKSB7CiAgICBhc3NlcnQocmVkaXJlY3Rpb25NYXBwaW5nW2Zyb21dID09IG51bGwpOwogICAgcmVkaXJlY3Rpb25NYXBwaW5nW2Zyb21dID0gdG87CiAgICBhc3NlcnQoaXNTdG9yZWRJbkNsb3N1cmVGaWVsZChmcm9tKSB8fCBpc0JveGVkKGZyb20pKTsKICB9CgogIEhJbnN0cnVjdGlvbiBjcmVhdGVCb3goU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIEhJbnN0cnVjdGlvbiBib3ggPSBuZXcgSENyZWF0ZUJveChfYWJzdHJhY3RWYWx1ZURvbWFpbi5ub25OdWxsVHlwZSkKICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgYnVpbGRlci5hZGQoYm94KTsKICAgIHJldHVybiBib3g7CiAgfQoKICAvLy8gSWYgdGhlIHNjb3BlIChmdW5jdGlvbiBvciBsb29wKSBbbm9kZV0gaGFzIGNhcHR1cmVkIHZhcmlhYmxlcyB0aGVuIHRoaXMKICAvLy8gbWV0aG9kIGNyZWF0ZXMgYSBib3ggYW5kIHNldHMgdXAgdGhlIHJlZGlyZWN0aW9ucy4KICB2b2lkIGVudGVyU2NvcGUoCiAgICAgIENhcHR1cmVkU2NvcGUgY2xvc3VyZUluZm8sIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9uLAogICAgICB7Ym9vbCBmb3JHZW5lcmF0aXZlQ29uc3RydWN0b3JCb2R5OiBmYWxzZSwgSEluc3RydWN0aW9uIGlubGluZWRCb3h9KSB7CiAgICAvLyBTZWUgaWYgYW55IHZhcmlhYmxlIGluIHRoZSB0b3Atc2NvcGUgb2YgdGhlIGZ1bmN0aW9uIGlzIGNhcHR1cmVkLiBJZiB5ZXMKICAgIC8vIHdlIG5lZWQgdG8gY3JlYXRlIGEgYm94LW9iamVjdC4KICAgIGlmICghY2xvc3VyZUluZm8ucmVxdWlyZXNDb250ZXh0Qm94KSByZXR1cm47CiAgICBISW5zdHJ1Y3Rpb24gYm94OwogICAgLy8gVGhlIHNjb3BlIGhhcyBjYXB0dXJlZCB2YXJpYWJsZXMuCiAgICBpZiAoZm9yR2VuZXJhdGl2ZUNvbnN0cnVjdG9yQm9keSkgewogICAgICAvLyBUaGUgYm94IGlzIHBhc3NlZCBhcyBhIHBhcmFtZXRlciB0byBhIGdlbmVyYXRpdmUgY29uc3RydWN0b3IgYm9keS4KICAgICAgYm94ID0gaW5saW5lZEJveCA/PwogICAgICAgICAgYnVpbGRlci5hZGRQYXJhbWV0ZXIoCiAgICAgICAgICAgICAgY2xvc3VyZUluZm8uY29udGV4dCwgX2Fic3RyYWN0VmFsdWVEb21haW4ubm9uTnVsbFR5cGUpOwogICAgfSBlbHNlIHsKICAgICAgYm94ID0gY3JlYXRlQm94KHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICAgIC8vIEFkZCB0aGUgYm94IHRvIHRoZSBrbm93biBsb2NhbHMuCiAgICBkaXJlY3RMb2NhbHNbY2xvc3VyZUluZm8uY29udGV4dF0gPSBib3g7CiAgICAvLyBNYWtlIHN1cmUgdGhhdCBhY2Nlc3NlcyB0byB0aGUgYm94ZWQgbG9jYWxzIGdvIGludG8gdGhlIGJveC4gV2UgYWxzbwogICAgLy8gbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBwYXJhbWV0ZXJzIGFyZSBjb3BpZWQgaW50byB0aGUgYm94IGlmIG5lY2Vzc2FyeS4KICAgIGNsb3N1cmVJbmZvLmZvckVhY2hCb3hlZFZhcmlhYmxlKChMb2NhbCBmcm9tLCBGaWVsZEVudGl0eSB0bykgewogICAgICAvLyBUaGUgW2Zyb21dIGNhbiBvbmx5IGJlIGEgcGFyYW1ldGVyIGZvciBmdW5jdGlvbi1zY29wZXMgYW5kIG5vdAogICAgICAvLyBsb29wIHNjb3Blcy4KICAgICAgSkxvY2FsIGpGcm9tID0gZnJvbTsKICAgICAgYm9vbCBpc1BhcmFtZXRlciA9IGpGcm9tLmlzUmVndWxhclBhcmFtZXRlcjsKICAgICAgYXNzZXJ0KGlzUGFyYW1ldGVyICE9IG51bGwpOwogICAgICBpZiAoaXNQYXJhbWV0ZXIgJiYgIWZvckdlbmVyYXRpdmVDb25zdHJ1Y3RvckJvZHkpIHsKICAgICAgICAvLyBOb3cgdGhhdCB0aGUgcmVkaXJlY3Rpb24gaXMgc2V0IHVwLCB0aGUgdXBkYXRlIHRvIHRoZSBsb2NhbCB3aWxsCiAgICAgICAgLy8gd3JpdGUgdGhlIHBhcmFtZXRlciB2YWx1ZSBpbnRvIHRoZSBib3guCiAgICAgICAgLy8gU3RvcmUgdGhlIGNhcHR1cmVkIHBhcmFtZXRlciBpbiB0aGUgYm94LiBHZXQgdGhlIGN1cnJlbnQgdmFsdWUKICAgICAgICAvLyBiZWZvcmUgd2UgcHV0IHRoZSByZWRpcmVjdGlvbiBpbiBwbGFjZS4KICAgICAgICAvLyBXZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUgbG9jYWwgZm9yIGEgZ2VuZXJhdGl2ZQogICAgICAgIC8vIGNvbnN0cnVjdG9yIGJvZHksIGJlY2F1c2UgaXQgcmVjZWl2ZXMgYSBib3ggdGhhdCBhbHJlYWR5CiAgICAgICAgLy8gY29udGFpbnMgdGhlIHVwZGF0ZXMgYXMgdGhlIGxhc3QgcGFyYW1ldGVyLgogICAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IHJlYWRMb2NhbChmcm9tKTsKICAgICAgICByZWRpcmVjdEVsZW1lbnQoZnJvbSwgdG8pOwogICAgICAgIHVwZGF0ZUxvY2FsKGZyb20sIGluc3RydWN0aW9uKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZWRpcmVjdEVsZW1lbnQoZnJvbSwgdG8pOwogICAgICB9CiAgICB9KTsKICB9CgogIC8vLyBSZXBsYWNlcyB0aGUgY3VycmVudCBib3ggd2l0aCBhIG5ldyBib3ggYW5kIGNvcGllcyBvdmVyIHRoZSBnaXZlbiBsaXN0CiAgLy8vIG9mIGVsZW1lbnRzIGZyb20gdGhlIG9sZCBib3ggaW50byB0aGUgbmV3IGJveC4KICB2b2lkIHVwZGF0ZUNhcHR1cmVCb3goTG9jYWwgY3VycmVudEJveCwgTGlzdDxMb2NhbD4gdG9CZUNvcGllZEVsZW1lbnRzLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gQ3JlYXRlIGEgbmV3IGJveCBhbmQgY29weSBvdmVyIHRoZSB2YWx1ZXMgZnJvbSB0aGUgb2xkIGJveCBpbnRvIHRoZQogICAgLy8gbmV3IG9uZS4KICAgIEhJbnN0cnVjdGlvbiBvbGRCb3ggPSByZWFkTG9jYWwoY3VycmVudEJveCk7CiAgICBISW5zdHJ1Y3Rpb24gbmV3Qm94ID0gY3JlYXRlQm94KHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIGZvciAoTG9jYWwgYm94ZWRWYXJpYWJsZSBpbiB0b0JlQ29waWVkRWxlbWVudHMpIHsKICAgICAgLy8gW3JlYWRMb2NhbF0gdXNlcyB0aGUgW2N1cnJlbnRCb3hdIHRvIGZpbmQgaXRzIGJveC4gQnkgcmVwbGFjaW5nIGl0CiAgICAgIC8vIGJlaGluZCBpdHMgYmFjayB3ZSBjYW4gc3RpbGwgZ2V0IHRvIHRoZSBvbGQgdmFsdWVzLgogICAgICB1cGRhdGVMb2NhbChjdXJyZW50Qm94LCBvbGRCb3gpOwogICAgICBISW5zdHJ1Y3Rpb24gb2xkVmFsdWUgPSByZWFkTG9jYWwoYm94ZWRWYXJpYWJsZSk7CiAgICAgIHVwZGF0ZUxvY2FsKGN1cnJlbnRCb3gsIG5ld0JveCk7CiAgICAgIHVwZGF0ZUxvY2FsKGJveGVkVmFyaWFibGUsIG9sZFZhbHVlKTsKICAgIH0KICAgIHVwZGF0ZUxvY2FsKGN1cnJlbnRCb3gsIG5ld0JveCk7CiAgfQoKICAvLy8gRG9jdW1lbnRhdGlvbiB3YW50ZWQgLS0gam9obm5pd2ludGhlcgogIC8vLwogIC8vLyBJbnZhcmlhbnQ6IFtmdW5jdGlvbl0gbXVzdCBiZSBhbiBpbXBsZW1lbnRhdGlvbiBlbGVtZW50LgogIHZvaWQgc3RhcnRGdW5jdGlvbigKICAgICAgTWVtYmVyRW50aXR5IGVsZW1lbnQsCiAgICAgIFNjb3BlSW5mbyBzY29wZUluZm8sCiAgICAgIENhcHR1cmVkU2NvcGUgc2NvcGVEYXRhLAogICAgICBNYXA8TG9jYWwsIEFic3RyYWN0VmFsdWU+IHBhcmFtZXRlcnMsCiAgICAgIFNldDxMb2NhbD4gZWxpZGVkUGFyYW1ldGVycywKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yQm9keX0pIHsKICAgIHRoaXMuc2NvcGVJbmZvID0gc2NvcGVJbmZvOwoKICAgIHBhcmFtZXRlcnMuZm9yRWFjaCgoTG9jYWwgbG9jYWwsIEFic3RyYWN0VmFsdWUgdHlwZU1hc2spIHsKICAgICAgaWYgKGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yQm9keSkgewogICAgICAgIGlmIChzY29wZURhdGEuaXNCb3hlZFZhcmlhYmxlKGxvY2FsKSkgewogICAgICAgICAgLy8gVGhlIHBhcmFtZXRlciB3aWxsIGJlIGEgZmllbGQgaW4gdGhlIGJveCBwYXNzZWQgYXMgdGhlCiAgICAgICAgICAvLyBsYXN0IHBhcmFtZXRlci4gU28gbm8gbmVlZCB0byBoYXZlIGl0LgogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBISW5zdHJ1Y3Rpb24gcGFyYW1ldGVyID0gYnVpbGRlci5hZGRQYXJhbWV0ZXIobG9jYWwsIHR5cGVNYXNrLAogICAgICAgICAgaXNFbGlkZWQ6IGVsaWRlZFBhcmFtZXRlcnMuY29udGFpbnMobG9jYWwpKTsKICAgICAgYnVpbGRlci5wYXJhbWV0ZXJzW2xvY2FsXSA9IHBhcmFtZXRlcjsKICAgICAgZGlyZWN0TG9jYWxzW2xvY2FsXSA9IHBhcmFtZXRlcjsKICAgIH0pOwogICAgYnVpbGRlci5lbGlkZWRQYXJhbWV0ZXJzID0gZWxpZGVkUGFyYW1ldGVyczsKCiAgICBlbnRlclNjb3BlKHNjb3BlRGF0YSwgc291cmNlSW5mb3JtYXRpb24sCiAgICAgICAgZm9yR2VuZXJhdGl2ZUNvbnN0cnVjdG9yQm9keTogaXNHZW5lcmF0aXZlQ29uc3RydWN0b3JCb2R5KTsKCiAgICAvLyBXaGVuIHdlIHJlbW92ZSB0aGUgZWxlbWVudCBtb2RlbCwgd2UgY2FuIGp1c3QgdXNlIHRoZSBmaXJzdCBjaGVjawogICAgLy8gKGJlY2F1c2UgdGhlIHVuZGVybHlpbmcgZWxlbWVudHMgd29uJ3QgYWxsIGJlICpib3RoKiBTY29wZUluZm9zIGFuZAogICAgLy8gQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mb3MpLgogICAgaWYgKHNjb3BlSW5mbyBpcyBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvICYmIHNjb3BlSW5mby5pc0Nsb3N1cmUpIHsKICAgICAgQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbyBjbG9zdXJlRGF0YSA9IHNjb3BlSW5mbzsKICAgICAgLy8gSWYgdGhlIGZyZWVWYXJpYWJsZU1hcHBpbmcgaXMgbm90IGVtcHR5LCB0aGVuIHRoaXMgZnVuY3Rpb24gd2FzIGEKICAgICAgLy8gbmVzdGVkIGNsb3N1cmUgdGhhdCBjYXB0dXJlcyB2YXJpYWJsZXMuIFJlZGlyZWN0IHRoZSBjYXB0dXJlZAogICAgICAvLyB2YXJpYWJsZXMgdG8gZmllbGRzIGluIHRoZSBjbG9zdXJlLgogICAgICBjbG9zdXJlRGF0YS5mb3JFYWNoRnJlZVZhcmlhYmxlKChMb2NhbCBmcm9tLCBGaWVsZEVudGl0eSB0bykgewogICAgICAgIHJlZGlyZWN0RWxlbWVudChmcm9tLCB0byk7CiAgICAgIH0pOwogICAgICAvLyBJbnNpZGUgY2xvc3VyZSByZWRpcmVjdCByZWZlcmVuY2VzIHRvIGl0c2VsZiB0byBbOnRoaXM6XS4KICAgICAgSFRoaXMgdGhpc0luc3RydWN0aW9uID0KICAgICAgICAgIG5ldyBIVGhpcyhjbG9zdXJlRGF0YS50aGlzTG9jYWwsIF9hYnN0cmFjdFZhbHVlRG9tYWluLm5vbk51bGxUeXBlKTsKICAgICAgYnVpbGRlci5ncmFwaC50aGlzSW5zdHJ1Y3Rpb24gPSB0aGlzSW5zdHJ1Y3Rpb247CiAgICAgIGJ1aWxkZXIuZ3JhcGguZW50cnkuYWRkQXRFbnRyeSh0aGlzSW5zdHJ1Y3Rpb24pOwogICAgICB1cGRhdGVMb2NhbChjbG9zdXJlRGF0YS5jbG9zdXJlRW50aXR5LCB0aGlzSW5zdHJ1Y3Rpb24pOwogICAgfSBlbHNlIGlmIChlbGVtZW50LmlzSW5zdGFuY2VNZW1iZXIpIHsKICAgICAgLy8gT25jZSBjbG9zdXJlcyBoYXZlIGJlZW4gbWFwcGVkIHRvIGNsYXNzZXMgdGhlaXIgaW5zdGFuY2UgbWVtYmVycyBtaWdodAogICAgICAvLyBub3QgaGF2ZSBhbnkgdGhpc0VsZW1lbnQgaWYgdGhlIGNsb3N1cmUgd2FzIGNyZWF0ZWQgaW5zaWRlIGEgc3RhdGljCiAgICAgIC8vIGNvbnRleHQuCiAgICAgIEhUaGlzIHRoaXNJbnN0cnVjdGlvbiA9IG5ldyBIVGhpcyhzY29wZUluZm8udGhpc0xvY2FsLCBnZXRUeXBlT2ZUaGlzKCkpOwogICAgICBidWlsZGVyLmdyYXBoLnRoaXNJbnN0cnVjdGlvbiA9IHRoaXNJbnN0cnVjdGlvbjsKICAgICAgYnVpbGRlci5ncmFwaC5lbnRyeS5hZGRBdEVudHJ5KHRoaXNJbnN0cnVjdGlvbik7CiAgICAgIGRpcmVjdExvY2Fsc1tzY29wZUluZm8udGhpc0xvY2FsXSA9IHRoaXNJbnN0cnVjdGlvbjsKICAgIH0KCiAgICAvLyBJZiB0aGlzIG1ldGhvZCBpcyBhbiBpbnRlcmNlcHRlZCBtZXRob2QsIGFkZCB0aGUgZXh0cmEKICAgIC8vIHBhcmFtZXRlciB0byBpdCwgdGhhdCBpcyB0aGUgYWN0dWFsIHJlY2VpdmVyIGZvciBpbnRlcmNlcHRlZAogICAgLy8gY2xhc3Nlcywgb3IgdGhlIHNhbWUgYXMgWzp0aGlzOl0gZm9yIG5vbi1pbnRlcmNlcHRlZCBjbGFzc2VzLgogICAgQ2xhc3NFbnRpdHkgY2xzID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKCiAgICAvLyBXaGVuIHRoZSBjbGFzcyBleHRlbmRzIGEgbmF0aXZlIGNsYXNzLCB0aGUgaW5zdGFuY2UgaXMgcHJlLWNvbnN0cnVjdGVkCiAgICAvLyBhbmQgcGFzc2VkIHRvIHRoZSBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yIGZhY3RvcnkgZnVuY3Rpb24gYXMgYSBwYXJhbWV0ZXIuCiAgICAvLyBJbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYW5kIGluaXRpYWxpemluZyB0aGUgb2JqZWN0LCB0aGUgY29uc3RydWN0b3IKICAgIC8vICd1cGdyYWRlcycgdGhlIG5hdGl2ZSBzdWJjbGFzcyBvYmplY3QgYnkgaW5pdGlhbGl6aW5nIHRoZSBEYXJ0IGZpZWxkcy4KICAgIGJvb2wgaXNOYXRpdmVVcGdyYWRlRmFjdG9yeSA9IGVsZW1lbnQgaXMgQ29uc3RydWN0b3JFbnRpdHkgJiYKICAgICAgICBlbGVtZW50LmlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yICYmCiAgICAgICAgX25hdGl2ZURhdGEuaXNOYXRpdmVPckV4dGVuZHNOYXRpdmUoY2xzKTsKICAgIGlmIChfaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWRNZXRob2QoZWxlbWVudCkpIHsKICAgICAgYm9vbCBpc0ludGVyY2VwdGVkQ2xhc3MgPSBfaW50ZXJjZXB0b3JEYXRhLmlzSW50ZXJjZXB0ZWRDbGFzcyhjbHMpOwogICAgICBTdHJpbmcgbmFtZSA9IGlzSW50ZXJjZXB0ZWRDbGFzcyA/ICdyZWNlaXZlcicgOiAnXyc7CiAgICAgIFN5bnRoZXRpY0xvY2FsIHBhcmFtZXRlciA9IGNyZWF0ZUxvY2FsKG5hbWUpOwogICAgICBIUGFyYW1ldGVyVmFsdWUgdmFsdWUgPSBuZXcgSFBhcmFtZXRlclZhbHVlKHBhcmFtZXRlciwgZ2V0VHlwZU9mVGhpcygpKTsKICAgICAgYnVpbGRlci5ncmFwaC5leHBsaWNpdFJlY2VpdmVyUGFyYW1ldGVyID0gdmFsdWU7CiAgICAgIGJ1aWxkZXIuZ3JhcGguZW50cnkuYWRkQWZ0ZXIoZGlyZWN0TG9jYWxzW3Njb3BlSW5mby50aGlzTG9jYWxdLCB2YWx1ZSk7CiAgICAgIGlmIChidWlsZGVyLmxhc3RBZGRlZFBhcmFtZXRlciA9PSBudWxsKSB7CiAgICAgICAgLy8gSWYgdGhpcyBpcyB0aGUgZmlyc3QgcGFyYW1ldGVyIGluc2VydGVkLCBtYWtlIHN1cmUgaXQgc3RheXMgZmlyc3QuCiAgICAgICAgYnVpbGRlci5sYXN0QWRkZWRQYXJhbWV0ZXIgPSB2YWx1ZTsKICAgICAgfQogICAgICBpZiAoaXNJbnRlcmNlcHRlZENsYXNzKSB7CiAgICAgICAgLy8gT25seSB1c2UgdGhlIGV4dHJhIHBhcmFtZXRlciBpbiBpbnRlcmNlcHRlZCBjbGFzc2VzLgogICAgICAgIGRpcmVjdExvY2Fsc1tzY29wZUluZm8udGhpc0xvY2FsXSA9IHZhbHVlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGlzTmF0aXZlVXBncmFkZUZhY3RvcnkpIHsKICAgICAgU3ludGhldGljTG9jYWwgcGFyYW1ldGVyID0gY3JlYXRlTG9jYWwoJ3JlY2VpdmVyJyk7CiAgICAgIC8vIFVubGlrZSBgdGhpc2AsIHJlY2VpdmVyIGlzIG51bGxhYmxlIHNpbmNlIGRpcmVjdCBjYWxscyB0byBnZW5lcmF0aXZlCiAgICAgIC8vIGNvbnN0cnVjdG9yIGNhbGwgdGhlIGNvbnN0cnVjdG9yIHdpdGggYG51bGxgLgogICAgICBIUGFyYW1ldGVyVmFsdWUgdmFsdWUgPSBuZXcgSFBhcmFtZXRlclZhbHVlKAogICAgICAgICAgcGFyYW1ldGVyLCBfY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOdWxsYWJsZUV4YWN0KGNscykpOwogICAgICBidWlsZGVyLmdyYXBoLmV4cGxpY2l0UmVjZWl2ZXJQYXJhbWV0ZXIgPSB2YWx1ZTsKICAgICAgYnVpbGRlci5ncmFwaC5lbnRyeS5hZGRBdEVudHJ5KHZhbHVlKTsKICAgICAgaWYgKGJ1aWxkZXIubGFzdEFkZGVkUGFyYW1ldGVyID09IG51bGwpIHsKICAgICAgICAvLyBJZiB0aGlzIGlzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgaW5zZXJ0ZWQsIG1ha2Ugc3VyZSBpdCBzdGF5cyBmaXJzdC4KICAgICAgICBidWlsZGVyLmxhc3RBZGRlZFBhcmFtZXRlciA9IHZhbHVlOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBsb2NhbCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkuIEJveGVkIHZhcmlhYmxlcyBvcgogIC8vLyBjYXB0dXJlZCB2YXJpYWJsZXMgdGhhdCBhcmUgc3RvcmVkIGluIHRoZSBjbG9zdXJlLWZpZWxkIHJldHVybiBbOmZhbHNlOl0uCiAgYm9vbCBpc0FjY2Vzc2VkRGlyZWN0bHkoTG9jYWwgbG9jYWwpIHsKICAgIGFzc2VydChsb2NhbCAhPSBudWxsKTsKICAgIHJldHVybiAhcmVkaXJlY3Rpb25NYXBwaW5nLmNvbnRhaW5zS2V5KGxvY2FsKSAmJgogICAgICAgICFzY29wZUluZm8ubG9jYWxJc1VzZWRJblRyeU9yU3luYyhsb2NhbCk7CiAgfQoKICBib29sIGlzU3RvcmVkSW5DbG9zdXJlRmllbGQoTG9jYWwgbG9jYWwpIHsKICAgIGFzc2VydChsb2NhbCAhPSBudWxsKTsKICAgIGlmIChpc0FjY2Vzc2VkRGlyZWN0bHkobG9jYWwpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoc2NvcGVJbmZvIGlzISBDbG9zdXJlUmVwcmVzZW50YXRpb25JbmZvKSByZXR1cm4gZmFsc2U7CiAgICBGaWVsZEVudGl0eSByZWRpcmVjdFRhcmdldCA9IHJlZGlyZWN0aW9uTWFwcGluZ1tsb2NhbF07CiAgICBpZiAocmVkaXJlY3RUYXJnZXQgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHJlZGlyZWN0VGFyZ2V0IGlzIEpDbG9zdXJlRmllbGQ7CiAgfQoKICBib29sIGlzQm94ZWQoTG9jYWwgbG9jYWwpIHsKICAgIGlmIChpc0FjY2Vzc2VkRGlyZWN0bHkobG9jYWwpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoaXNTdG9yZWRJbkNsb3N1cmVGaWVsZChsb2NhbCkpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiByZWRpcmVjdGlvbk1hcHBpbmcuY29udGFpbnNLZXkobG9jYWwpOwogIH0KCiAgYm9vbCBfaXNVc2VkSW5UcnlPckdlbmVyYXRvcihMb2NhbCBsb2NhbCkgewogICAgcmV0dXJuIHNjb3BlSW5mby5sb2NhbElzVXNlZEluVHJ5T3JTeW5jKGxvY2FsKTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIFtISW5zdHJ1Y3Rpb25dIGZvciB0aGUgZ2l2ZW4gZWxlbWVudC4gSWYgdGhlIGVsZW1lbnQgaXMKICAvLy8gYm94ZWQgb3Igc3RvcmVkIGluIGEgY2xvc3VyZSB0aGVuIHRoZSBtZXRob2QgZ2VuZXJhdGVzIGNvZGUgdG8gcmV0cmlldmUKICAvLy8gdGhlIHZhbHVlLgogIEhJbnN0cnVjdGlvbiByZWFkTG9jYWwoTG9jYWwgbG9jYWwsIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIGlmIChpc0FjY2Vzc2VkRGlyZWN0bHkobG9jYWwpKSB7CiAgICAgIGlmIChkaXJlY3RMb2NhbHNbbG9jYWxdID09IG51bGwpIHsKICAgICAgICBpZiAobG9jYWwgaXMgVHlwZVZhcmlhYmxlTG9jYWwpIHsKICAgICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICAgIENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsCiAgICAgICAgICAgICAgIlJ1bnRpbWUgdHlwZSBpbmZvcm1hdGlvbiBub3QgYXZhaWxhYmxlIGZvciAkbG9jYWwgIgogICAgICAgICAgICAgICJpbiAke2RpcmVjdExvY2Fscy5rZXlzfSBmb3IgJGV4ZWN1dGFibGVDb250ZXh0LiIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgICBsb2NhbCwKICAgICAgICAgICAgICAiQ2Fubm90IGZpbmQgdmFsdWUgJGxvY2FsIGluICR7ZGlyZWN0TG9jYWxzLmtleXN9IGZvciAiCiAgICAgICAgICAgICAgIiRleGVjdXRhYmxlQ29udGV4dC4iKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgSEluc3RydWN0aW9uIHZhbHVlID0gZGlyZWN0TG9jYWxzW2xvY2FsXTsKICAgICAgaWYgKHNvdXJjZUluZm9ybWF0aW9uICE9IG51bGwpIHsKICAgICAgICB2YWx1ZSA9IG5ldyBIUmVmKHZhbHVlLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICAgICAgYnVpbGRlci5hZGQodmFsdWUpOwogICAgICB9CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0gZWxzZSBpZiAoaXNTdG9yZWRJbkNsb3N1cmVGaWVsZChsb2NhbCkpIHsKICAgICAgQ2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mbyBjbG9zdXJlRGF0YSA9IHNjb3BlSW5mbzsKICAgICAgRmllbGRFbnRpdHkgcmVkaXJlY3QgPSByZWRpcmVjdGlvbk1hcHBpbmdbbG9jYWxdOwogICAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIgPSByZWFkTG9jYWwoY2xvc3VyZURhdGEuY2xvc3VyZUVudGl0eSk7CiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSA9IGxvY2FsIGlzIEJveExvY2FsCiAgICAgICAgICA/IF9hYnN0cmFjdFZhbHVlRG9tYWluLm5vbk51bGxUeXBlCiAgICAgICAgICA6IGdldFR5cGVPZkNhcHR1cmVkVmFyaWFibGUocmVkaXJlY3QpOwogICAgICBISW5zdHJ1Y3Rpb24gZmllbGRHZXQgPQogICAgICAgICAgbmV3IEhGaWVsZEdldChyZWRpcmVjdCwgcmVjZWl2ZXIsIHR5cGUsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgYnVpbGRlci5hZGQoZmllbGRHZXQpOwogICAgICByZXR1cm4gZmllbGRHZXQ7CiAgICB9IGVsc2UgaWYgKGlzQm94ZWQobG9jYWwpKSB7CiAgICAgIEZpZWxkRW50aXR5IHJlZGlyZWN0ID0gcmVkaXJlY3Rpb25NYXBwaW5nW2xvY2FsXTsKICAgICAgQm94TG9jYWwgbG9jYWxCb3g7CiAgICAgIC8vIEluIHRoZSBmdW5jdGlvbiB0aGF0IGRlY2xhcmVzIHRoZSBjYXB0dXJlZCB2YXJpYWJsZSB0aGUgYm94IGlzCiAgICAgIC8vIGFjY2Vzc2VkIGFzIGRpcmVjdCBsb2NhbC4gSW5zaWRlIHRoZSBuZXN0ZWQgY2xvc3VyZSB0aGUgYm94IGlzCiAgICAgIC8vIGFjY2Vzc2VkIHRocm91Z2ggYSBjbG9zdXJlLWZpZWxkLgogICAgICAvLyBDYWxsaW5nIFtyZWFkTG9jYWxdIG1ha2VzIHN1cmUgd2UgZ2VuZXJhdGUgdGhlIGNvcnJlY3QgY29kZSB0byBnZXQKICAgICAgLy8gdGhlIGJveC4KICAgICAgaWYgKHJlZGlyZWN0IGlzIEpSZWNvcmRGaWVsZCkgewogICAgICAgIGxvY2FsQm94ID0gcmVkaXJlY3QuYm94OwogICAgICB9CiAgICAgIGFzc2VydChsb2NhbEJveCAhPSBudWxsKTsKCiAgICAgIEhJbnN0cnVjdGlvbiBib3ggPSByZWFkTG9jYWwobG9jYWxCb3gpOwogICAgICBISW5zdHJ1Y3Rpb24gbG9va3VwID0gbmV3IEhGaWVsZEdldChyZWRpcmVjdCwgYm94LAogICAgICAgICAgZ2V0VHlwZU9mQ2FwdHVyZWRWYXJpYWJsZShyZWRpcmVjdCksIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgYnVpbGRlci5hZGQobG9va3VwKTsKICAgICAgcmV0dXJuIGxvb2t1cDsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChfaXNVc2VkSW5UcnlPckdlbmVyYXRvcihsb2NhbCkpOwogICAgICBITG9jYWxWYWx1ZSBsb2NhbFZhbHVlID0gZ2V0TG9jYWwobG9jYWwpOwogICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBuZXcgSExvY2FsR2V0KGxvY2FsLCBsb2NhbFZhbHVlLAogICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUsIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgYnVpbGRlci5hZGQoaW5zdHJ1Y3Rpb24pOwogICAgICByZXR1cm4gaW5zdHJ1Y3Rpb247CiAgICB9CiAgfQoKICBISW5zdHJ1Y3Rpb24gcmVhZFRoaXMoe1NvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgSEluc3RydWN0aW9uIHJlcyA9CiAgICAgICAgcmVhZExvY2FsKHNjb3BlSW5mby50aGlzTG9jYWwsIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBpZiAocmVzLmluc3RydWN0aW9uVHlwZSA9PSBudWxsKSB7CiAgICAgIHJlcy5pbnN0cnVjdGlvblR5cGUgPSBnZXRUeXBlT2ZUaGlzKCk7CiAgICB9CiAgICByZXR1cm4gcmVzOwogIH0KCiAgSExvY2FsVmFsdWUgZ2V0TG9jYWwoTG9jYWwgbG9jYWwsIHtTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbn0pIHsKICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGEgcGFyYW1ldGVyLCB3ZSBhbHJlYWR5IGhhdmUgYQogICAgLy8gSFBhcmFtZXRlclZhbHVlIGZvciBpdC4gV2UgY2Fubm90IGNyZWF0ZSBhbm90aGVyIG9uZSBiZWNhdXNlCiAgICAvLyBpdCBjb3VsZCB0aGVuIGhhdmUgYW5vdGhlciBuYW1lIHRoYW4gdGhlIHJlYWwgcGFyYW1ldGVyLiBBbmQKICAgIC8vIHRoZSBvdGhlciBvbmUgd291bGQgbm90IGtub3cgaXQgaXMganVzdCBhIGNvcHkgb2YgdGhlIHJlYWwKICAgIC8vIHBhcmFtZXRlci4KICAgIGlmIChidWlsZGVyLnBhcmFtZXRlcnMuY29udGFpbnNLZXkobG9jYWwpKSB7CiAgICAgIHJldHVybiBidWlsZGVyLnBhcmFtZXRlcnNbbG9jYWxdOwogICAgfQoKICAgIHJldHVybiBhY3RpdmF0aW9uVmFyaWFibGVzLnB1dElmQWJzZW50KGxvY2FsLCAoKSB7CiAgICAgIEhMb2NhbFZhbHVlIGxvY2FsVmFsdWUgPQogICAgICAgICAgbmV3IEhMb2NhbFZhbHVlKGxvY2FsLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ub25OdWxsVHlwZSkKICAgICAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uOwogICAgICBidWlsZGVyLmdyYXBoLmVudHJ5LmFkZEF0RXhpdChsb2NhbFZhbHVlKTsKICAgICAgcmV0dXJuIGxvY2FsVmFsdWU7CiAgICB9KTsKICB9CgogIExvY2FsIGdldFR5cGVWYXJpYWJsZUFzTG9jYWwoVHlwZVZhcmlhYmxlVHlwZSB0eXBlKSB7CiAgICByZXR1cm4gdHlwZVZhcmlhYmxlTG9jYWxzLnB1dElmQWJzZW50KHR5cGUsICgpIHsKICAgICAgcmV0dXJuIG5ldyBUeXBlVmFyaWFibGVMb2NhbCh0eXBlKTsKICAgIH0pOwogIH0KCiAgLy8vIFNldHMgdGhlIFtlbGVtZW50XSB0byBbdmFsdWVdLiBJZiB0aGUgZWxlbWVudCBpcyBib3hlZCBvciBzdG9yZWQgaW4gYQogIC8vLyBjbG9zdXJlIHRoZW4gdGhlIG1ldGhvZCBnZW5lcmF0ZXMgY29kZSB0byBzZXQgdGhlIHZhbHVlLgogIHZvaWQgdXBkYXRlTG9jYWwoTG9jYWwgbG9jYWwsIEhJbnN0cnVjdGlvbiB2YWx1ZSwKICAgICAge1NvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgaWYgKHZhbHVlIGlzIEhSZWYpIHsKICAgICAgSFJlZiByZWYgPSB2YWx1ZTsKICAgICAgdmFsdWUgPSByZWYudmFsdWU7CiAgICB9CiAgICBhc3NlcnQoIWlzU3RvcmVkSW5DbG9zdXJlRmllbGQobG9jYWwpLAogICAgICAgICJMb2NhbCAkbG9jYWwgaXMgc3RvcmVkIGluIGEgY2xvc3VyZSBmaWVsZC4iKTsKICAgIGlmIChpc0FjY2Vzc2VkRGlyZWN0bHkobG9jYWwpKSB7CiAgICAgIGRpcmVjdExvY2Fsc1tsb2NhbF0gPSB2YWx1ZTsKICAgIH0gZWxzZSBpZiAoaXNCb3hlZChsb2NhbCkpIHsKICAgICAgRmllbGRFbnRpdHkgcmVkaXJlY3QgPSByZWRpcmVjdGlvbk1hcHBpbmdbbG9jYWxdOwogICAgICBhc3NlcnQocmVkaXJlY3QgIT0gbnVsbCk7CiAgICAgIEJveExvY2FsIGxvY2FsQm94OwogICAgICBpZiAocmVkaXJlY3QgaXMgSlJlY29yZEZpZWxkKSB7CiAgICAgICAgbG9jYWxCb3ggPSByZWRpcmVjdC5ib3g7CiAgICAgIH0KICAgICAgYXNzZXJ0KGxvY2FsQm94ICE9IG51bGwpOwoKICAgICAgLy8gVGhlIGJveCBpdHNlbGYgY291bGQgYmUgY2FwdHVyZWQsIG9yIGJlIGxvY2FsLiBBIGxvY2FsIHZhcmlhYmxlIHRoYXQKICAgICAgLy8gaXMgY2FwdHVyZWQgd2lsbCBiZSBib3hlZCwgYnV0IHRoZSBib3ggaXRzZWxmIHdpbGwgYmUgYSBsb2NhbC4KICAgICAgLy8gSW5zaWRlIHRoZSBjbG9zdXJlIHRoZSBib3ggaXMgc3RvcmVkIGluIGEgY2xvc3VyZS1maWVsZCBhbmQgY2Fubm90CiAgICAgIC8vIGJlIGFjY2Vzc2VkIGRpcmVjdGx5LgogICAgICBISW5zdHJ1Y3Rpb24gYm94ID0gcmVhZExvY2FsKGxvY2FsQm94KTsKICAgICAgYnVpbGRlci5hZGQobmV3IEhGaWVsZFNldChfYWJzdHJhY3RWYWx1ZURvbWFpbiwgcmVkaXJlY3QsIGJveCwgdmFsdWUpCiAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChfaXNVc2VkSW5UcnlPckdlbmVyYXRvcihsb2NhbCkpOwogICAgICBITG9jYWxWYWx1ZSBsb2NhbFZhbHVlID0gZ2V0TG9jYWwobG9jYWwpOwogICAgICBidWlsZGVyLmFkZChuZXcgSExvY2FsU2V0KF9hYnN0cmFjdFZhbHVlRG9tYWluLCBsb2NhbCwgbG9jYWxWYWx1ZSwgdmFsdWUpCiAgICAgICAgLi5zb3VyY2VJbmZvcm1hdGlvbiA9IHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0KICB9CgogIC8vLyBUaGlzIGZ1bmN0aW9uLCBzdGFydExvb3AsIG11c3QgYmUgY2FsbGVkIGJlZm9yZSB2aXNpdGluZyBhbnkgY2hpbGRyZW4gb2YKICAvLy8gdGhlIGxvb3AuIEluIHBhcnRpY3VsYXIgaXQgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSBleGVjdXRpbmcgdGhlCiAgLy8vIGluaXRpYWxpemVycy4KICAvLy8KICAvLy8gVGhlIFtMb2NhbHNIYW5kbGVyXSB3aWxsIG1ha2UgdGhlIGJveGVzIGFuZCB1cGRhdGVzIGF0IHRoZSByaWdodCBtb21lbnQuCiAgLy8vIFRoZSBidWlsZGVyIGp1c3QgbmVlZHMgdG8gY2FsbCBbZW50ZXJMb29wQm9keV0gYW5kIFtlbnRlckxvb3BVcGRhdGVzXQogIC8vLyAoZm9yIFthc3QuRm9yXSBsb29wcykgYXQgdGhlIGNvcnJlY3QgcGxhY2VzLiBGb3IgcGhpLWhhbmRsaW5nCiAgLy8vIFtiZWdpbkxvb3BIZWFkZXJdIGFuZCBbZW5kTG9vcF0gbXVzdCBhbHNvIGJlIGNhbGxlZC4KICAvLy8KICAvLy8gVGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRoZSBib3ggZGVwZW5kcyBvbiB0aGUgZ2l2ZW4gbG9vcC4gSW4gbW9zdCBjYXNlcwogIC8vLyB0aGUgYm94IHdpbGwgYmUgY3JlYXRlZCB3aGVuIGVudGVyaW5nIHRoZSBsb29wLWJvZHk6IHdoaWxlLCBkby13aGlsZSwgYW5kCiAgLy8vIGZvci1pbiAoYXNzdW1pbmcgdGhlIGNhbGwgdG8gWzpuZXh0Ol0gaXMgaW5zaWRlIHRoZSBib2R5KSBjYW4gYWx3YXlzIGJlCiAgLy8vIGNvbnN0cnVjdGVkIHRoaXMgd2F5LgogIC8vLwogIC8vLyBUaGluZ3MgYXJlIHNsaWdodGx5IG1vcmUgY29tcGxpY2F0ZWQgZm9yIFthc3QuRm9yXSBsb29wcy4gSWYgbm8gZGVjbGFyZWQKICAvLy8gbG9vcCB2YXJpYWJsZSBpcyBib3hlZCB0aGVuIHRoZSBsb29wLWJvZHkgYXBwcm9hY2ggd29ya3MgaGVyZSB0b28uIElmIGEKICAvLy8gbG9vcC12YXJpYWJsZSBpcyBib3hlZCB3ZSBuZWVkIHRvIGludHJvZHVjZSBhIG5ldyBib3ggZm9yIHRoZQogIC8vLyBsb29wLXZhcmlhYmxlIGJlZm9yZSB3ZSBlbnRlciB0aGUgaW5pdGlhbGl6ZXIgc28gdGhhdCB0aGUgaW5pdGlhbGl6ZXIKICAvLy8gd3JpdGVzIHRoZSB2YWx1ZXMgaW50byB0aGUgYm94LiBJbiBhbnkgY2FzZSB3ZSBuZWVkIHRvIGNyZWF0ZSB0aGUgYm94CiAgLy8vIGJlZm9yZSB0aGUgY29uZGl0aW9uIHNpbmNlIHRoZSBjb25kaXRpb24gY291bGQgYm94IHRoZSB2YXJpYWJsZS4KICAvLy8gU2luY2UgdGhlIGZpcnN0IGJveCBpcyBjcmVhdGVkIG91dHNpZGUgdGhlIGFjdHVhbCBsb29wIHdlIGhhdmUgYSBzZWNvbmQKICAvLy8gbG9jYXRpb24gd2hlcmUgYSBib3ggaXMgY3JlYXRlZDoganVzdCBiZWZvcmUgdGhlIHVwZGF0ZXMuIFRoaXMgaXMKICAvLy8gbmVjZXNzYXJ5IHNpbmNlIHVwZGF0ZXMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgcGFydCBvZiB0aGUgbmV4dCBpdGVyYXRpb24KICAvLy8gKGFuZCBjYW4gYWdhaW4gY2FwdHVyZSB2YXJpYWJsZXMpLgogIC8vLwogIC8vLyBGb3IgZXhhbXBsZSB0aGUgZm9sbG93aW5nIERhcnQgY29kZSBwcmludHMgMSAzIC0tIDMgNC4KICAvLy8KICAvLy8gICAgIHZhciBmcyA9IFtdOwogIC8vLyAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzOyAoZigpIHsgZnMuYWRkKGYpOyBwcmludChpKTsgaSsrOyB9KSgpKSB7CiAgLy8vICAgICAgIGkrKzsKICAvLy8gICAgIH0KICAvLy8gICAgIHByaW50KCItLSIpOwogIC8vLyAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyOyBpKyspIGZzW2ldKCk7CiAgLy8vCiAgLy8vIFdlIHNvbHZlIHRoaXMgYnkgZW1pdHRpbmcgdGhlIGZvbGxvd2luZyBjb2RlIChvbmx5IGZvciBbYXN0LkZvcl0gbG9vcHMpOgogIC8vLyAgPENyZWF0ZSBib3g+ICAgIDw9PSBtb3ZlIHRoZSBmaXJzdCBib3ggY3JlYXRpb24gb3V0c2lkZSB0aGUgbG9vcC4KICAvLy8gIDxpbml0aWFsaXplcj47CiAgLy8vICBsb29wLWVudHJ5OgogIC8vLyAgICBpZiAoITxjb25kaXRpb24+KSBnb3RvIGxvb3AtZXhpdDsKICAvLy8gICAgPGJvZHk+CiAgLy8vICAgIDx1cGRhdGUgYm94PiAgLy8gY3JlYXRlIGEgbmV3IGJveCBhbmQgY29weSB0aGUgY2FwdHVyZWQgbG9vcC12YXJpYWJsZXMuCiAgLy8vICAgIDx1cGRhdGVzPgogIC8vLyAgICBnb3RvIGxvb3AtZW50cnk7CiAgLy8vICBsb29wLWV4aXQ6CiAgdm9pZCBzdGFydExvb3AoCiAgICAgIENhcHR1cmVkTG9vcFNjb3BlIGxvb3BJbmZvLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgaWYgKGxvb3BJbmZvLmhhc0JveGVkTG9vcFZhcmlhYmxlcykgewogICAgICAvLyBJZiB0aGVyZSBhcmUgYm94ZWQgbG9vcCB2YXJpYWJsZXMgdGhlbiB3ZSBzZXQgdXAgdGhlIGJveCBhbmQKICAgICAgLy8gcmVkaXJlY3Rpb25zIGFscmVhZHkgbm93LiBUaGlzIHdheSB0aGUgaW5pdGlhbGl6ZXIgY2FuIHdyaXRlIGl0cwogICAgICAvLyB2YWx1ZXMgaW50byB0aGUgYm94LgogICAgICAvLyBGb3Igb3RoZXIgbG9vcHMgdGhlIGJveCB3aWxsIGJlIGNyZWF0ZWQgd2hlbiBlbnRlcmluZyB0aGUgYm9keS4KICAgICAgZW50ZXJTY29wZShsb29wSW5mbywgc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogIH0KCiAgLy8vIENyZWF0ZSBwaGlzIGF0IHRoZSBsb29wIGVudHJ5IGZvciBsb2NhbCB2YXJpYWJsZXMgKHJlYWR5IGZvciB0aGUgdmFsdWVzCiAgLy8vIGZyb20gdGhlIGJhY2sgZWRnZSkuICBQb3B1bGF0ZSB0aGUgcGhpcyB3aXRoIHRoZSBjdXJyZW50IHZhbHVlcy4KICB2b2lkIGJlZ2luTG9vcEhlYWRlcihIQmFzaWNCbG9jayBsb29wRW50cnkpIHsKICAgIC8vIENyZWF0ZSBhIGNvcHkgYmVjYXVzZSB3ZSBtb2RpZnkgdGhlIG1hcCB3aGlsZSBpdGVyYXRpbmcgb3ZlciBpdC4KICAgIE1hcDxMb2NhbCwgSEluc3RydWN0aW9uPiBzYXZlZERpcmVjdExvY2FscyA9CiAgICAgICAgbmV3IE1hcDxMb2NhbCwgSEluc3RydWN0aW9uPi5mcm9tKGRpcmVjdExvY2Fscyk7CgogICAgLy8gQ3JlYXRlIHBoaXMgZm9yIGFsbCBlbGVtZW50cyBpbiB0aGUgZGVmaW5pdGlvbnMgZW52aXJvbm1lbnQuCiAgICBzYXZlZERpcmVjdExvY2Fscy5mb3JFYWNoKChMb2NhbCBsb2NhbCwgSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIGlmIChpc0FjY2Vzc2VkRGlyZWN0bHkobG9jYWwpKSB7CiAgICAgICAgLy8gV2Uga25vdyAndGhpcycgY2Fubm90IGJlIG1vZGlmaWVkLgogICAgICAgIGlmIChsb2NhbCAhPSBzY29wZUluZm8udGhpc0xvY2FsKSB7CiAgICAgICAgICBIUGhpIHBoaSA9IG5ldyBIUGhpLnNpbmdsZUlucHV0KAogICAgICAgICAgICAgIGxvY2FsLCBpbnN0cnVjdGlvbiwgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICAgICAgbG9vcEVudHJ5LmFkZFBoaShwaGkpOwogICAgICAgICAgZGlyZWN0TG9jYWxzW2xvY2FsXSA9IHBoaTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGlyZWN0TG9jYWxzW2xvY2FsXSA9IGluc3RydWN0aW9uOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIGVudGVyTG9vcEJvZHkoCiAgICAgIENhcHR1cmVkTG9vcFNjb3BlIGxvb3BJbmZvLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gSWYgdGhlcmUgYXJlIG5vIGRlY2xhcmVkIGJveGVkIGxvb3AgdmFyaWFibGVzIHRoZW4gd2UgZGlkIG5vdCBjcmVhdGUgdGhlCiAgICAvLyBib3ggYmVmb3JlIHRoZSBpbml0aWFsaXplciBhbmQgd2UgaGF2ZSB0byBjcmVhdGUgdGhlIGJveCBub3cuCiAgICBpZiAoIWxvb3BJbmZvLmhhc0JveGVkTG9vcFZhcmlhYmxlcykgewogICAgICBlbnRlclNjb3BlKGxvb3BJbmZvLCBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIGVudGVyTG9vcFVwZGF0ZXMoCiAgICAgIENhcHR1cmVkTG9vcFNjb3BlIGxvb3BJbmZvLCBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gSWYgdGhlcmUgYXJlIGRlY2xhcmVkIGJveGVkIGxvb3AgdmFyaWFibGVzIHRoZW4gdGhlIHVwZGF0ZXMgbWlnaHQgaGF2ZQogICAgLy8gYWNjZXNzIHRvIHRoZSBib3ggYW5kIHdlIG11c3Qgc3dpdGNoIHRvIGEgbmV3IGJveCBiZWZvcmUgZXhlY3V0aW5nIHRoZQogICAgLy8gdXBkYXRlcy4KICAgIC8vIEluIGFsbCBvdGhlciBjYXNlcyBhIG5ldyBib3ggd2lsbCBiZSBjcmVhdGVkIHdoZW4gZW50ZXJpbmcgdGhlIGJvZHkgb2YKICAgIC8vIHRoZSBuZXh0IGl0ZXJhdGlvbi4KICAgIGlmIChsb29wSW5mby5oYXNCb3hlZExvb3BWYXJpYWJsZXMpIHsKICAgICAgdXBkYXRlQ2FwdHVyZUJveCgKICAgICAgICAgIGxvb3BJbmZvLmNvbnRleHQsIGxvb3BJbmZvLmJveGVkTG9vcFZhcmlhYmxlcywgc291cmNlSW5mb3JtYXRpb24pOwogICAgfQogIH0KCiAgLy8vIEdvZXMgdGhyb3VnaCB0aGUgcGhpcyBjcmVhdGVkIGluIGJlZ2luTG9vcEhlYWRlciBlbnRyeSBhbmQgYWRkcyB0aGUKICAvLy8gaW5wdXQgZnJvbSB0aGUgYmFjayBlZGdlIChmcm9tIHRoZSBjdXJyZW50IHZhbHVlIG9mIGRpcmVjdExvY2FscykgdG8gdGhlbS4KICB2b2lkIGVuZExvb3AoSEJhc2ljQmxvY2sgbG9vcEVudHJ5KSB7CiAgICAvLyBJZiB0aGUgbG9vcCBoYXMgYW4gYWJvcnRpbmcgYm9keSwgd2UgZG9uJ3QgdXBkYXRlIHRoZSBsb29wCiAgICAvLyBwaGlzLgogICAgaWYgKGxvb3BFbnRyeS5wcmVkZWNlc3NvcnMubGVuZ3RoID09IDEpIHJldHVybjsKICAgIGxvb3BFbnRyeS5mb3JFYWNoUGhpKChIUGhpIHBoaSkgewogICAgICBMb2NhbCBlbGVtZW50ID0gcGhpLnNvdXJjZUVsZW1lbnQ7CiAgICAgIEhJbnN0cnVjdGlvbiBwb3N0TG9vcERlZmluaXRpb24gPSBkaXJlY3RMb2NhbHNbZWxlbWVudF07CiAgICAgIHBoaS5hZGRJbnB1dChwb3N0TG9vcERlZmluaXRpb24pOwogICAgfSk7CiAgfQoKICAvLy8gTWVyZ2UgW290aGVyTG9jYWxzXSBpbnRvIHRoaXMgbG9jYWxzIGhhbmRsZXIsIGNyZWF0aW5nIHBoaS1ub2RlcyB3aGVuCiAgLy8vIHRoZXJlIGlzIGEgY29uZmxpY3QuCiAgLy8vIElmIGEgcGhpIG5vZGUgaXMgbmVjZXNzYXJ5LCBpdCB3aWxsIHVzZSB0aGlzIGhhbmRsZXIncyBpbnN0cnVjdGlvbiBhcyB0aGUKICAvLy8gZmlyc3QgaW5wdXQsIGFuZCB0aGUgb3RoZXJMb2NhbHMgaW5zdHJ1Y3Rpb24gYXMgdGhlIHNlY29uZC4KICB2b2lkIG1lcmdlV2l0aChMb2NhbHNIYW5kbGVyIG90aGVyTG9jYWxzLCBIQmFzaWNCbG9jayBqb2luQmxvY2spIHsKICAgIC8vIElmIGFuIGVsZW1lbnQgaXMgaW4gb25lIG1hcCBidXQgbm90IHRoZSBvdGhlciB3ZSBjYW4gc2FmZWx5CiAgICAvLyBpZ25vcmUgaXQuIEl0IG1lYW5zIHRoYXQgYSB2YXJpYWJsZSB3YXMgZGVjbGFyZWQgaW4gdGhlCiAgICAvLyBibG9jay4gU2luY2UgdmFyaWFibGUgZGVjbGFyYXRpb25zIGFyZSBzY29wZWQgdGhlIGRlY2xhcmVkCiAgICAvLyB2YXJpYWJsZSBjYW5ub3QgYmUgYWxpdmUgb3V0c2lkZSB0aGUgYmxvY2suIE5vdGU6IHRoaXMgaXMgb25seQogICAgLy8gdHJ1ZSBmb3Igbm9kZXMgd2hlcmUgd2UgZG8gam9pbnMuCiAgICBNYXA8TG9jYWwsIEhJbnN0cnVjdGlvbj4gam9pbmVkTG9jYWxzID0gbmV3IE1hcDxMb2NhbCwgSEluc3RydWN0aW9uPigpOwogICAgb3RoZXJMb2NhbHMuZGlyZWN0TG9jYWxzLmZvckVhY2goKExvY2FsIGxvY2FsLCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgLy8gV2Uga25vdyAndGhpcycgY2Fubm90IGJlIG1vZGlmaWVkLgogICAgICBpZiAobG9jYWwgPT0gc2NvcGVJbmZvLnRoaXNMb2NhbCkgewogICAgICAgIGFzc2VydChkaXJlY3RMb2NhbHNbbG9jYWxdID09IGluc3RydWN0aW9uKTsKICAgICAgICBqb2luZWRMb2NhbHNbbG9jYWxdID0gaW5zdHJ1Y3Rpb247CiAgICAgIH0gZWxzZSB7CiAgICAgICAgSEluc3RydWN0aW9uIG1pbmUgPSBkaXJlY3RMb2NhbHNbbG9jYWxdOwogICAgICAgIGlmIChtaW5lID09IG51bGwpIHJldHVybjsKICAgICAgICBpZiAoaWRlbnRpY2FsKGluc3RydWN0aW9uLCBtaW5lKSkgewogICAgICAgICAgam9pbmVkTG9jYWxzW2xvY2FsXSA9IGluc3RydWN0aW9uOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBISW5zdHJ1Y3Rpb24gcGhpID0gbmV3IEhQaGkubWFueUlucHV0cygKICAgICAgICAgICAgICBsb2NhbCwKICAgICAgICAgICAgICA8SEluc3RydWN0aW9uPlttaW5lLCBpbnN0cnVjdGlvbl0sCiAgICAgICAgICAgICAgX2Fic3RyYWN0VmFsdWVEb21haW4uZHluYW1pY1R5cGUpOwogICAgICAgICAgam9pbkJsb2NrLmFkZFBoaShwaGkpOwogICAgICAgICAgam9pbmVkTG9jYWxzW2xvY2FsXSA9IHBoaTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgZGlyZWN0TG9jYWxzID0gam9pbmVkTG9jYWxzOwogIH0KCiAgLy8vIFdoZW4gY29udHJvbCBmbG93IG1lcmdlcywgdGhpcyBtZXRob2QgY2FuIGJlIHVzZWQgdG8gbWVyZ2Ugc2V2ZXJhbAogIC8vLyBsb2NhbHNIYW5kbGVycyBpbnRvIGEgbmV3IG9uZSB1c2luZyBwaGlzLiAgVGhlIG5ldyBsb2NhbHNIYW5kbGVyIGlzCiAgLy8vIHJldHVybmVkLiAgVW5sZXNzIGl0IGlzIGFsc28gaW4gdGhlIGxpc3QsIHRoZSBjdXJyZW50IGxvY2Fsc0hhbmRsZXIgaXMgbm90CiAgLy8vIHVzZWQgZm9yIGl0cyB2YWx1ZXMsIG9ubHkgZm9yIGl0cyBkZWNsYXJlZCB2YXJpYWJsZXMuIFRoaXMgaXMgYSB3YXkgdG8KICAvLy8gZXhjbHVkZSBsb2NhbCB2YWx1ZXMgZnJvbSB0aGUgcmVzdWx0IHdoZW4gdGhleSBhcmUgbm8gbG9uZ2VyIGluIHNjb3BlLgogIExvY2Fsc0hhbmRsZXIgbWVyZ2VNdWx0aXBsZSgKICAgICAgTGlzdDxMb2NhbHNIYW5kbGVyPiBsb2NhbHNIYW5kbGVycywgSEJhc2ljQmxvY2sgam9pbkJsb2NrKSB7CiAgICBhc3NlcnQobG9jYWxzSGFuZGxlcnMubGVuZ3RoID4gMCk7CiAgICBpZiAobG9jYWxzSGFuZGxlcnMubGVuZ3RoID09IDEpIHJldHVybiBsb2NhbHNIYW5kbGVycy5zaW5nbGU7CiAgICBNYXA8TG9jYWwsIEhJbnN0cnVjdGlvbj4gam9pbmVkTG9jYWxzID0gbmV3IE1hcDxMb2NhbCwgSEluc3RydWN0aW9uPigpOwogICAgSEluc3RydWN0aW9uIHRoaXNWYWx1ZSA9IG51bGw7CiAgICBkaXJlY3RMb2NhbHMuZm9yRWFjaCgoTG9jYWwgbG9jYWwsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgICBpZiAobG9jYWwgIT0gc2NvcGVJbmZvLnRoaXNMb2NhbCkgewogICAgICAgIEhQaGkgcGhpID0gbmV3IEhQaGkubm9JbnB1dHMobG9jYWwsIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKTsKICAgICAgICBqb2luZWRMb2NhbHNbbG9jYWxdID0gcGhpOwogICAgICAgIGpvaW5CbG9jay5hZGRQaGkocGhpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBXZSBrbm93IHRoYXQgInRoaXMiIG5ldmVyIGNoYW5nZXMsIGlmIGl0J3MgdGhlcmUuCiAgICAgICAgLy8gU2F2ZSBpdCBmb3IgbGF0ZXIuIFdoaWxlIG1lcmdpbmcsIHRoZXJlIGlzIG5vIHBoaSBmb3IgInRoaXMiLAogICAgICAgIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8gc3BlY2lhbCBjYXNlIGl0IGluIHRoZSBtZXJnZSBsb29wLgogICAgICAgIHRoaXNWYWx1ZSA9IGluc3RydWN0aW9uOwogICAgICB9CiAgICB9KTsKICAgIGZvciAoTG9jYWxzSGFuZGxlciBoYW5kbGVyIGluIGxvY2Fsc0hhbmRsZXJzKSB7CiAgICAgIGhhbmRsZXIuZGlyZWN0TG9jYWxzLmZvckVhY2goKExvY2FsIGxvY2FsLCBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgICBIUGhpIHBoaSA9IGpvaW5lZExvY2Fsc1tsb2NhbF07CiAgICAgICAgaWYgKHBoaSAhPSBudWxsKSB7CiAgICAgICAgICBwaGkuYWRkSW5wdXQoaW5zdHJ1Y3Rpb24pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBpZiAodGhpc1ZhbHVlICE9IG51bGwpIHsKICAgICAgLy8gSWYgdGhlcmUgd2FzIGEgInRoaXMiIGZvciB0aGUgc2NvcGUsIGFkZCBpdCB0byB0aGUgbmV3IGxvY2Fscy4KICAgICAgam9pbmVkTG9jYWxzW3Njb3BlSW5mby50aGlzTG9jYWxdID0gdGhpc1ZhbHVlOwogICAgfQoKICAgIC8vIFJlbW92ZSBsb2NhbHMgdGhhdCBhcmUgbm90IGluIGFsbCBoYW5kbGVycy4KICAgIGRpcmVjdExvY2FscyA9IG5ldyBNYXA8TG9jYWwsIEhJbnN0cnVjdGlvbj4oKTsKICAgIGpvaW5lZExvY2Fscy5mb3JFYWNoKChMb2NhbCBsb2NhbCwgSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIGlmIChsb2NhbCAhPSBzY29wZUluZm8udGhpc0xvY2FsICYmCiAgICAgICAgICBpbnN0cnVjdGlvbi5pbnB1dHMubGVuZ3RoICE9IGxvY2Fsc0hhbmRsZXJzLmxlbmd0aCkgewogICAgICAgIGpvaW5CbG9jay5yZW1vdmVQaGkoaW5zdHJ1Y3Rpb24pOwogICAgICB9IGVsc2UgewogICAgICAgIGRpcmVjdExvY2Fsc1tsb2NhbF0gPSBpbnN0cnVjdGlvbjsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIEFic3RyYWN0VmFsdWUgY2FjaGVkVHlwZU9mVGhpczsKCiAgQWJzdHJhY3RWYWx1ZSBnZXRUeXBlT2ZUaGlzKCkgewogICAgQWJzdHJhY3RWYWx1ZSByZXN1bHQgPSBjYWNoZWRUeXBlT2ZUaGlzOwogICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgIFRoaXNMb2NhbCBsb2NhbCA9IHNjb3BlSW5mby50aGlzTG9jYWw7CiAgICAgIENsYXNzRW50aXR5IGNscyA9IGxvY2FsLmVuY2xvc2luZ0NsYXNzOwogICAgICBpZiAoX2Nsb3NlZFdvcmxkLmlzVXNlZEFzTWl4aW4oY2xzKSkgewogICAgICAgIC8vIElmIHRoZSBlbmNsb3NpbmcgY2xhc3MgaXMgdXNlZCBhcyBhIG1peGluLCBbOnRoaXM6XSBjYW4gYmUKICAgICAgICAvLyBvZiB0aGUgY2xhc3MgdGhhdCBtaXhpbnMgdGhlIGVuY2xvc2luZyBjbGFzcy4gVGhlc2UgdHdvCiAgICAgICAgLy8gY2xhc3NlcyBkbyBub3QgaGF2ZSBhIHN1YmNsYXNzIHJlbGF0aW9uc2hpcCwgc28sIGZvcgogICAgICAgIC8vIHNpbXBsaWNpdHksIHdlIG1hcmsgdGhlIHR5cGUgYXMgYW4gaW50ZXJmYWNlIHR5cGUuCiAgICAgICAgcmVzdWx0ID0gX2Fic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTm9uTnVsbFN1YnR5cGUoY2xzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHQgPSBfYWJzdHJhY3RWYWx1ZURvbWFpbi5jcmVhdGVOb25OdWxsU3ViY2xhc3MoY2xzKTsKICAgICAgfQogICAgICBjYWNoZWRUeXBlT2ZUaGlzID0gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIE1hcDxGaWVsZEVudGl0eSwgQWJzdHJhY3RWYWx1ZT4gY2FjaGVkVHlwZXNPZkNhcHR1cmVkVmFyaWFibGVzID0KICAgICAgbmV3IE1hcDxGaWVsZEVudGl0eSwgQWJzdHJhY3RWYWx1ZT4oKTsKCiAgQWJzdHJhY3RWYWx1ZSBnZXRUeXBlT2ZDYXB0dXJlZFZhcmlhYmxlKEZpZWxkRW50aXR5IGVsZW1lbnQpIHsKICAgIHJldHVybiBjYWNoZWRUeXBlc09mQ2FwdHVyZWRWYXJpYWJsZXMucHV0SWZBYnNlbnQoZWxlbWVudCwgKCkgewogICAgICByZXR1cm4gQWJzdHJhY3RWYWx1ZUZhY3RvcnkuaW5mZXJyZWRUeXBlRm9yTWVtYmVyKAogICAgICAgICAgZWxlbWVudCwgX2dsb2JhbEluZmVyZW5jZVJlc3VsdHMpOwogICAgfSk7CiAgfQoKICAvLy8gVmFyaWFibGVzIHN0b3JlZCBpbiB0aGUgY3VycmVudCBhY3RpdmF0aW9uLiBUaGVzZSB2YXJpYWJsZXMgYXJlCiAgLy8vIGJlaW5nIHVwZGF0ZWQgaW4gdHJ5L2NhdGNoIGJsb2NrcywgYW5kIHNob3VsZCBiZQogIC8vLyBhY2Nlc3NlZCBpbmRpcmVjdGx5IHRocm91Z2ggW0hMb2NhbEdldF0gYW5kIFtITG9jYWxTZXRdLgogIE1hcDxMb2NhbCwgSExvY2FsVmFsdWU+IGFjdGl2YXRpb25WYXJpYWJsZXMgPSA8TG9jYWwsIEhMb2NhbFZhbHVlPnt9OwoKICBTeW50aGV0aWNMb2NhbCBjcmVhdGVMb2NhbChTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIG5ldyBTeW50aGV0aWNMb2NhbChuYW1lLCBleGVjdXRhYmxlQ29udGV4dCwgbWVtYmVyQ29udGV4dCk7CiAgfQp9CgovLy8gQSBzeW50aGV0aWMgbG9jYWwgdmFyaWFibGUgb25seSB1c2VkIHdpdGggdGhlIFNTQSBncmFwaC4KLy8vCi8vLyBGb3IgaW5zdGFuY2UgdXNlZCBmb3IgaG9sZGluZyByZXR1cm4gdmFsdWUgb2YgZnVuY3Rpb24gb3IgdGhlIGV4Y2VwdGlvbiBvZiBhCi8vLyB0cnktY2F0Y2ggc3RhdGVtZW50LgpjbGFzcyBTeW50aGV0aWNMb2NhbCBleHRlbmRzIExvY2FsIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBFbnRpdHkgZXhlY3V0YWJsZUNvbnRleHQ7CiAgZmluYWwgTWVtYmVyRW50aXR5IG1lbWJlckNvbnRleHQ7CgogIC8vIEF2b2lkIHNsb3cgT2JqZWN0Lmhhc2hDb2RlLgogIEBvdmVycmlkZQogIGZpbmFsIGludCBoYXNoQ29kZSA9IF9uZXh0SGFzaENvZGUgPSAoX25leHRIYXNoQ29kZSArIDEpLnRvVW5zaWduZWQoMzApOwogIHN0YXRpYyBpbnQgX25leHRIYXNoQ29kZSA9IDA7CgogIFN5bnRoZXRpY0xvY2FsKHRoaXMubmFtZSwgdGhpcy5leGVjdXRhYmxlQ29udGV4dCwgdGhpcy5tZW1iZXJDb250ZXh0KTsKCiAgQG92ZXJyaWRlCiAgdG9TdHJpbmcoKSA9PiAnU3ludGhldGljTG9jYWwoJG5hbWUpJzsKfQqCxgBOTjwBGhkkITEhKCkuRC4qAR4VFQFNTgkWTyMGS0pQREpOJxdANiIkAUcGSjYGUFAYBhkVHQwTJAwGJAEgASoBSkMBOAEyKAE8JgFJFisdIEQhORUxSh8IMVAIBhQEAUZEICpONzUtKyElKTM5M08BT1A1LiM7BAFASC8WEAQBTjkTRk1QJzEWKShMGiBGDSoGKC1MT0RIFhszIzpMM0ozPkQ3NCMoDyMICAQBTTVKLUsQMTg2TD0nOCcsBiUEASwGPxYcGx8sIyssIAE/KTBENBIKCEU3LScIMQEtRAFJSyRJOUtHLUUjCkMeTjc3PytQTRJPNzc7BgE+REUuAU5RSk5CKzI5Sjs0TzdOME4sCCBAMwgpOk43M1E3LTBOLAgGBAFNUCkbNTIEAS0bMT88LiwEAR4xNTIEAS40BAFJThFPJSkqFClDQhEUFUYmCggwJzQcCBQwOThELS0xHkYdFyE4GUhIK0wSJiEIIAEuOUMbFQ0uMEJAIBoGBAFBF04nLQYQBAFNOEREQhIxKAYBNx9DNTEZCAQBODUqCAQBTD80LxkYGQYrNyUjITggGSYhCCABTkhMHy5MMg0uMFAyBgQBT0kUBk9MRDsGTVBOHAZPTkRMTEdOSE4pBj0GF0oRDBcvBk9JFhMrEFETGhISSSpGSh5JLwYEAU5HMEgxOQFESCcuLCtFISURLQoICAQBFklQRSsvBgQBGUlOThBOGyoYTQYEAUpRKEINNCYpPygIBAFMG1BCRUM/QkYpTE8sKjQrDzEiLC0RMhUxMSElCggIIQQBSUpRTU0fQydCTCNDKk8jHw89SUIhCAg0TSgbJQoKBh1INQYBMzNDKkAqDysICBEEASIBIi0aLS4tRkNAPkEPQgghBhMEAUMtAUFEOS0IBAFGNz9IASxHBAIBPQRRGSUMFSIkASEMSyABSQEMKQIBLHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9sb2NhbHNfaGFuZGxlci5kYXJ0M3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS9sb29wX2hhbmRsZXIuZGFydLTxLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jbG9zdXJlLmRhcnQnIHNob3cgQ2FwdHVyZWRMb29wU2NvcGU7CmltcG9ydCAnLi4vZWxlbWVudHMvanVtcHMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2lvL3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0JzsKCmltcG9ydCAnYnVpbGRlcl9rZXJuZWwuZGFydCc7CmltcG9ydCAnanVtcF9oYW5kbGVyLmRhcnQnOwppbXBvcnQgJ2xvY2Fsc19oYW5kbGVyLmRhcnQnOwppbXBvcnQgJ25vZGVzLmRhcnQnOwoKLy8vIEJ1aWxkcyB0aGUgU1NBIGdyYXBoIGZvciBsb29wIG5vZGVzLgphYnN0cmFjdCBjbGFzcyBMb29wSGFuZGxlciB7CiAgZmluYWwgS2VybmVsU3NhR3JhcGhCdWlsZGVyIGJ1aWxkZXI7CgogIExvb3BIYW5kbGVyKHRoaXMuYnVpbGRlcik7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIGJ1aWxkZXIuY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgLy8vIEJ1aWxkcyBhIGdyYXBoIGZvciB0aGUgZ2l2ZW4gW2xvb3BdIG5vZGUuCiAgLy8vCiAgLy8vIEZvciB3aGlsZSBsb29wcywgW2luaXRpYWxpemVdIGFuZCBbdXBkYXRlXSBhcmUgbnVsbC4KICAvLy8gVGhlIFtjb25kaXRpb25dIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbiByZXN1bHQuCiAgLy8vIE5vbmUgb2YgdGhlIGZ1bmN0aW9ucyBtdXN0IGxlYXZlIGFueXRoaW5nIG9uIHRoZSBzdGFjay4KICB2b2lkIGhhbmRsZUxvb3AoCiAgICAgIGlyLk5vZGUgbG9vcCwKICAgICAgQ2FwdHVyZWRMb29wU2NvcGUgbG9vcENsb3N1cmVJbmZvLAogICAgICBKdW1wVGFyZ2V0IGp1bXBUYXJnZXQsCiAgICAgIHZvaWQgaW5pdGlhbGl6ZSgpLAogICAgICBISW5zdHJ1Y3Rpb24gY29uZGl0aW9uKCksCiAgICAgIHZvaWQgdXBkYXRlKCksCiAgICAgIHZvaWQgYm9keSgpLAogICAgICBTb3VyY2VJbmZvcm1hdGlvbiBzb3VyY2VJbmZvcm1hdGlvbikgewogICAgLy8gR2VuZXJhdGU6CiAgICAvLyAgPGluaXRpYWxpemVyPgogICAgLy8gIGxvb3AtZW50cnk6CiAgICAvLyAgICBpZiAoITxjb25kaXRpb24+KSBnb3RvIGxvb3AtZXhpdDsKICAgIC8vICAgIDxib2R5PgogICAgLy8gICAgPHVwZGF0ZXM+CiAgICAvLyAgICBnb3RvIGxvb3AtZW50cnk7CiAgICAvLyAgbG9vcC1leGl0OgoKICAgIGJ1aWxkZXIubG9jYWxzSGFuZGxlci5zdGFydExvb3AobG9vcENsb3N1cmVJbmZvLCBzb3VyY2VJbmZvcm1hdGlvbik7CgogICAgLy8gVGhlIGluaXRpYWxpemVyLgogICAgU3ViRXhwcmVzc2lvbiBpbml0aWFsaXplckdyYXBoID0gbnVsbDsKICAgIEhCYXNpY0Jsb2NrIHN0YXJ0QmxvY2s7CiAgICBpZiAoaW5pdGlhbGl6ZSAhPSBudWxsKSB7CiAgICAgIEhCYXNpY0Jsb2NrIGluaXRpYWxpemVyQmxvY2sgPSBidWlsZGVyLm9wZW5OZXdCbG9jaygpOwogICAgICBzdGFydEJsb2NrID0gaW5pdGlhbGl6ZXJCbG9jazsKICAgICAgaW5pdGlhbGl6ZSgpOwogICAgICBhc3NlcnQoIWJ1aWxkZXIuaXNBYm9ydGVkKCkpOwogICAgICBpbml0aWFsaXplckdyYXBoID0gbmV3IFN1YkV4cHJlc3Npb24oaW5pdGlhbGl6ZXJCbG9jaywgYnVpbGRlci5jdXJyZW50KTsKICAgIH0KCiAgICBidWlsZGVyLmxvb3BEZXB0aCsrOwogICAgSnVtcEhhbmRsZXIganVtcEhhbmRsZXIgPSBiZWdpbkxvb3BIZWFkZXIobG9vcCwganVtcFRhcmdldCk7CiAgICBITG9vcEluZm9ybWF0aW9uIGxvb3BJbmZvID0gYnVpbGRlci5jdXJyZW50Lmxvb3BJbmZvcm1hdGlvbjsKICAgIEhCYXNpY0Jsb2NrIGNvbmRpdGlvbkJsb2NrID0gYnVpbGRlci5jdXJyZW50OwogICAgaWYgKHN0YXJ0QmxvY2sgPT0gbnVsbCkgc3RhcnRCbG9jayA9IGNvbmRpdGlvbkJsb2NrOwoKICAgIEhJbnN0cnVjdGlvbiBjb25kaXRpb25JbnN0cnVjdGlvbiA9IGNvbmRpdGlvbigpOwogICAgSEJhc2ljQmxvY2sgY29uZGl0aW9uRW5kQmxvY2sgPSBidWlsZGVyCiAgICAgICAgLmNsb3NlKG5ldyBITG9vcEJyYW5jaChfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29uZGl0aW9uSW5zdHJ1Y3Rpb24pKTsKICAgIFN1YkV4cHJlc3Npb24gY29uZGl0aW9uRXhwcmVzc2lvbiA9CiAgICAgICAgbmV3IFN1YkV4cHJlc3Npb24oY29uZGl0aW9uQmxvY2ssIGNvbmRpdGlvbkVuZEJsb2NrKTsKCiAgICAvLyBTYXZlIHRoZSB2YWx1ZXMgb2YgdGhlIGxvY2FsIHZhcmlhYmxlcyBhdCB0aGUgZW5kIG9mIHRoZSBjb25kaXRpb24KICAgIC8vIGJsb2NrLiAgVGhlc2UgYXJlIHRoZSB2YWx1ZXMgdGhhdCB3aWxsIGZsb3cgdG8gdGhlIGxvb3AgZXhpdCBpZiB0aGUKICAgIC8vIGNvbmRpdGlvbiBmYWlscy4KICAgIExvY2Fsc0hhbmRsZXIgc2F2ZWRMb2NhbHMgPSBuZXcgTG9jYWxzSGFuZGxlci5mcm9tKGJ1aWxkZXIubG9jYWxzSGFuZGxlcik7CgogICAgLy8gVGhlIGJvZHkuCiAgICBIQmFzaWNCbG9jayBiZWdpbkJvZHlCbG9jayA9IGJ1aWxkZXIuYWRkTmV3QmxvY2soKTsKICAgIGNvbmRpdGlvbkVuZEJsb2NrLmFkZFN1Y2Nlc3NvcihiZWdpbkJvZHlCbG9jayk7CiAgICBidWlsZGVyLm9wZW4oYmVnaW5Cb2R5QmxvY2spOwoKICAgIGJ1aWxkZXIubG9jYWxzSGFuZGxlci5lbnRlckxvb3BCb2R5KGxvb3BDbG9zdXJlSW5mbywgc291cmNlSW5mb3JtYXRpb24pOwogICAgYm9keSgpOwoKICAgIFN1YkdyYXBoIGJvZHlHcmFwaCA9IG5ldyBTdWJHcmFwaChiZWdpbkJvZHlCbG9jaywgYnVpbGRlci5sYXN0T3BlbmVkQmxvY2spOwogICAgSEJhc2ljQmxvY2sgYm9keUJsb2NrID0gYnVpbGRlci5jdXJyZW50OwogICAgaWYgKGJ1aWxkZXIuY3VycmVudCAhPSBudWxsKSBidWlsZGVyLmNsb3NlKG5ldyBIR290byhfYWJzdHJhY3RWYWx1ZURvbWFpbikpOwoKICAgIFN1YkV4cHJlc3Npb24gdXBkYXRlR3JhcGg7CgogICAgYm9vbCBsb29wSXNEZWdlbmVyYXRlID0gIWp1bXBIYW5kbGVyLmhhc0FueUNvbnRpbnVlKCkgJiYgYm9keUJsb2NrID09IG51bGw7CiAgICBpZiAoIWxvb3BJc0RlZ2VuZXJhdGUpIHsKICAgICAgLy8gVXBkYXRlLgogICAgICAvLyBXZSBjcmVhdGUgYW4gdXBkYXRlIGJsb2NrLCBldmVuIHdoZW4gd2UgYXJlIGluIGEgd2hpbGUgbG9vcC4gVGhlcmUgdGhlCiAgICAgIC8vIHVwZGF0ZSBibG9jayBpcyB0aGUganVtcC10YXJnZXQgZm9yIGNvbnRpbnVlIHN0YXRlbWVudHMuIFdlIGNvdWxkIGF2b2lkCiAgICAgIC8vIHRoZSBjcmVhdGlvbiBpZiB0aGVyZSBpcyBubyBjb250aW51ZSwgYnV0IGZvciBub3cgd2UgYWx3YXlzIGNyZWF0ZSBpdC4KICAgICAgSEJhc2ljQmxvY2sgdXBkYXRlQmxvY2sgPSBidWlsZGVyLmFkZE5ld0Jsb2NrKCk7CgogICAgICBMaXN0PExvY2Fsc0hhbmRsZXI+IGNvbnRpbnVlSGFuZGxlcnMgPSA8TG9jYWxzSGFuZGxlcj5bXTsKICAgICAganVtcEhhbmRsZXIKICAgICAgICAgIC5mb3JFYWNoQ29udGludWUoKEhDb250aW51ZSBpbnN0cnVjdGlvbiwgTG9jYWxzSGFuZGxlciBsb2NhbHMpIHsKICAgICAgICBpbnN0cnVjdGlvbi5ibG9jay5hZGRTdWNjZXNzb3IodXBkYXRlQmxvY2spOwogICAgICAgIGNvbnRpbnVlSGFuZGxlcnMuYWRkKGxvY2Fscyk7CiAgICAgIH0pOwoKICAgICAgaWYgKGJvZHlCbG9jayAhPSBudWxsKSB7CiAgICAgICAgY29udGludWVIYW5kbGVycy5hZGQoYnVpbGRlci5sb2NhbHNIYW5kbGVyKTsKICAgICAgICBib2R5QmxvY2suYWRkU3VjY2Vzc29yKHVwZGF0ZUJsb2NrKTsKICAgICAgfQoKICAgICAgYnVpbGRlci5vcGVuKHVwZGF0ZUJsb2NrKTsKICAgICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyID0KICAgICAgICAgIGNvbnRpbnVlSGFuZGxlcnNbMF0ubWVyZ2VNdWx0aXBsZShjb250aW51ZUhhbmRsZXJzLCB1cGRhdGVCbG9jayk7CgogICAgICBMaXN0PExhYmVsRGVmaW5pdGlvbj4gbGFiZWxzID0ganVtcEhhbmRsZXIubGFiZWxzOwogICAgICBpZiAobGFiZWxzLmlzTm90RW1wdHkpIHsKICAgICAgICBiZWdpbkJvZHlCbG9jay5zZXRCbG9ja0Zsb3coCiAgICAgICAgICAgIG5ldyBITGFiZWxlZEJsb2NrSW5mb3JtYXRpb24oCiAgICAgICAgICAgICAgICBuZXcgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbihib2R5R3JhcGgpLCBqdW1wSGFuZGxlci5sYWJlbHMsCiAgICAgICAgICAgICAgICBpc0NvbnRpbnVlOiB0cnVlKSwKICAgICAgICAgICAgdXBkYXRlQmxvY2spOwogICAgICB9IGVsc2UgaWYgKGp1bXBUYXJnZXQgIT0gbnVsbCAmJiBqdW1wVGFyZ2V0LmlzQ29udGludWVUYXJnZXQpIHsKICAgICAgICBiZWdpbkJvZHlCbG9jay5zZXRCbG9ja0Zsb3coCiAgICAgICAgICAgIG5ldyBITGFiZWxlZEJsb2NrSW5mb3JtYXRpb24uaW1wbGljaXQoCiAgICAgICAgICAgICAgICBuZXcgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbihib2R5R3JhcGgpLCBqdW1wVGFyZ2V0LAogICAgICAgICAgICAgICAgaXNDb250aW51ZTogdHJ1ZSksCiAgICAgICAgICAgIHVwZGF0ZUJsb2NrKTsKICAgICAgfQoKICAgICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyCiAgICAgICAgICAuZW50ZXJMb29wVXBkYXRlcyhsb29wQ2xvc3VyZUluZm8sIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICAgIHVwZGF0ZSgpOwoKICAgICAgSEJhc2ljQmxvY2sgdXBkYXRlRW5kQmxvY2sgPQogICAgICAgICAgYnVpbGRlci5jbG9zZShuZXcgSEdvdG8oX2Fic3RyYWN0VmFsdWVEb21haW4pKTsKICAgICAgLy8gVGhlIGJhY2stZWRnZSBjb21wbGV0aW5nIHRoZSBjeWNsZS4KICAgICAgdXBkYXRlRW5kQmxvY2suYWRkU3VjY2Vzc29yKGNvbmRpdGlvbkJsb2NrKTsKICAgICAgdXBkYXRlR3JhcGggPSBuZXcgU3ViRXhwcmVzc2lvbih1cGRhdGVCbG9jaywgdXBkYXRlRW5kQmxvY2spOwoKICAgICAgLy8gQXZvaWQgYSBjcml0aWNhbCBlZGdlIGZyb20gdGhlIGNvbmRpdGlvbiB0byB0aGUgbG9vcC1leGl0IGJvZHkuCiAgICAgIEhCYXNpY0Jsb2NrIGNvbmRpdGlvbkV4aXRCbG9jayA9IGJ1aWxkZXIuYWRkTmV3QmxvY2soKTsKICAgICAgYnVpbGRlci5vcGVuKGNvbmRpdGlvbkV4aXRCbG9jayk7CiAgICAgIGJ1aWxkZXIuY2xvc2UobmV3IEhHb3RvKF9hYnN0cmFjdFZhbHVlRG9tYWluKSk7CiAgICAgIGNvbmRpdGlvbkVuZEJsb2NrLmFkZFN1Y2Nlc3Nvcihjb25kaXRpb25FeGl0QmxvY2spOwoKICAgICAgZW5kTG9vcChjb25kaXRpb25CbG9jaywgY29uZGl0aW9uRXhpdEJsb2NrLCBqdW1wSGFuZGxlciwgc2F2ZWRMb2NhbHMpOwoKICAgICAgY29uZGl0aW9uQmxvY2sucG9zdFByb2Nlc3NMb29wSGVhZGVyKCk7CiAgICAgIEhMb29wQmxvY2tJbmZvcm1hdGlvbiBpbmZvID0gbmV3IEhMb29wQmxvY2tJbmZvcm1hdGlvbigKICAgICAgICAgIGxvb3BLaW5kKGxvb3ApLAogICAgICAgICAgYnVpbGRlci53cmFwRXhwcmVzc2lvbkdyYXBoKGluaXRpYWxpemVyR3JhcGgpLAogICAgICAgICAgYnVpbGRlci53cmFwRXhwcmVzc2lvbkdyYXBoKGNvbmRpdGlvbkV4cHJlc3Npb24pLAogICAgICAgICAgYnVpbGRlci53cmFwU3RhdGVtZW50R3JhcGgoYm9keUdyYXBoKSwKICAgICAgICAgIGJ1aWxkZXIud3JhcEV4cHJlc3Npb25HcmFwaCh1cGRhdGVHcmFwaCksCiAgICAgICAgICBjb25kaXRpb25CbG9jay5sb29wSW5mb3JtYXRpb24udGFyZ2V0LAogICAgICAgICAgY29uZGl0aW9uQmxvY2subG9vcEluZm9ybWF0aW9uLmxhYmVscywKICAgICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKCiAgICAgIHN0YXJ0QmxvY2suc2V0QmxvY2tGbG93KGluZm8sIGJ1aWxkZXIuY3VycmVudCk7CiAgICAgIGxvb3BJbmZvLmxvb3BCbG9ja0luZm9ybWF0aW9uID0gaW5mbzsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRoZSBib2R5IG9mIHRoZSBmb3Ivd2hpbGUgbG9vcCBhbHdheXMgYWJvcnRzLCBzbyB0aGVyZSBpcyBubyBiYWNrIGVkZ2UuCiAgICAgIC8vIFdlIHR1cm4gdGhlIGNvZGUgaW50bzoKICAgICAgLy8gaWYgKGNvbmRpdGlvbikgewogICAgICAvLyAgIGJvZHk7CiAgICAgIC8vIH0gZWxzZSB7CiAgICAgIC8vICAgLy8gV2UgYWx3YXlzIGNyZWF0ZSBhbiBlbXB0eSBlbHNlIGJsb2NrIHRvIGF2b2lkIGNyaXRpY2FsIGVkZ2VzLgogICAgICAvLyB9CiAgICAgIC8vCiAgICAgIC8vIElmIHRoZXJlIGlzIGFueSBicmVhayBpbiB0aGUgYm9keSwgd2UgYXR0YWNoIGEgc3ludGhldGljCiAgICAgIC8vIGxhYmVsIHRvIHRoZSBpZi4KICAgICAgSEJhc2ljQmxvY2sgZWxzZUJsb2NrID0gYnVpbGRlci5hZGROZXdCbG9jaygpOwogICAgICBidWlsZGVyLm9wZW4oZWxzZUJsb2NrKTsKICAgICAgYnVpbGRlci5jbG9zZShuZXcgSEdvdG8oX2Fic3RyYWN0VmFsdWVEb21haW4pKTsKICAgICAgLy8gUGFzcyB0aGUgZWxzZUJsb2NrIGFzIHRoZSBicmFuY2hCbG9jaywgYmVjYXVzZSB0aGF0J3MgdGhlIGJsb2NrIHdlIGdvCiAgICAgIC8vIHRvIGp1c3QgYmVmb3JlIGxlYXZpbmcgdGhlICdsb29wJy4KICAgICAgZW5kTG9vcChjb25kaXRpb25CbG9jaywgZWxzZUJsb2NrLCBqdW1wSGFuZGxlciwgc2F2ZWRMb2NhbHMpOwoKICAgICAgU3ViR3JhcGggZWxzZUdyYXBoID0gbmV3IFN1YkdyYXBoKGVsc2VCbG9jaywgZWxzZUJsb2NrKTsKICAgICAgLy8gUmVtb3ZlIHRoZSBsb29wIGluZm9ybWF0aW9uIGF0dGFjaGVkIHRvIHRoZSBoZWFkZXIuCiAgICAgIGNvbmRpdGlvbkJsb2NrLmxvb3BJbmZvcm1hdGlvbiA9IG51bGw7CgogICAgICAvLyBSZW1vdmUgdGhlIFtITG9vcEJyYW5jaF0gaW5zdHJ1Y3Rpb24gYW5kIHJlcGxhY2UgaXQgd2l0aAogICAgICAvLyBbSElmXS4KICAgICAgSEluc3RydWN0aW9uIGNvbmRpdGlvbiA9IGNvbmRpdGlvbkVuZEJsb2NrLmxhc3QuaW5wdXRzWzBdOwogICAgICBjb25kaXRpb25FbmRCbG9jay5hZGRBdEV4aXQobmV3IEhJZihfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29uZGl0aW9uKSk7CiAgICAgIGNvbmRpdGlvbkVuZEJsb2NrLmFkZFN1Y2Nlc3NvcihlbHNlQmxvY2spOwogICAgICBjb25kaXRpb25FbmRCbG9jay5yZW1vdmUoY29uZGl0aW9uRW5kQmxvY2subGFzdCk7CiAgICAgIEhJZkJsb2NrSW5mb3JtYXRpb24gaW5mbyA9IG5ldyBISWZCbG9ja0luZm9ybWF0aW9uKAogICAgICAgICAgYnVpbGRlci53cmFwRXhwcmVzc2lvbkdyYXBoKGNvbmRpdGlvbkV4cHJlc3Npb24pLAogICAgICAgICAgYnVpbGRlci53cmFwU3RhdGVtZW50R3JhcGgoYm9keUdyYXBoKSwKICAgICAgICAgIGJ1aWxkZXIud3JhcFN0YXRlbWVudEdyYXBoKGVsc2VHcmFwaCkpOwoKICAgICAgY29uZGl0aW9uRW5kQmxvY2suc2V0QmxvY2tGbG93KGluZm8sIGJ1aWxkZXIuY3VycmVudCk7CiAgICAgIEhJZiBpZkJsb2NrID0gY29uZGl0aW9uRW5kQmxvY2subGFzdDsKICAgICAgaWZCbG9jay5ibG9ja0luZm9ybWF0aW9uID0gY29uZGl0aW9uRW5kQmxvY2suYmxvY2tGbG93OwoKICAgICAgLy8gSWYgdGhlIGJvZHkgaGFzIGFueSBicmVhaywgYXR0YWNoIGEgc3ludGhlc2l6ZWQgbGFiZWwgdG8gdGhlCiAgICAgIC8vIGlmIGJsb2NrLgogICAgICBpZiAoanVtcEhhbmRsZXIuaGFzQW55QnJlYWsoKSkgewogICAgICAgIExhYmVsRGVmaW5pdGlvbiBsYWJlbCA9CiAgICAgICAgICAgIGp1bXBUYXJnZXQuYWRkTGFiZWwoJ2xvb3AnLCBpc0JyZWFrVGFyZ2V0OiB0cnVlKTsKICAgICAgICBTdWJHcmFwaCBsYWJlbEdyYXBoID0gbmV3IFN1YkdyYXBoKGNvbmRpdGlvbkJsb2NrLCBidWlsZGVyLmN1cnJlbnQpOwogICAgICAgIEhMYWJlbGVkQmxvY2tJbmZvcm1hdGlvbiBsYWJlbEluZm8gPSBuZXcgSExhYmVsZWRCbG9ja0luZm9ybWF0aW9uKAogICAgICAgICAgICBuZXcgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbihsYWJlbEdyYXBoKSwKICAgICAgICAgICAgPExhYmVsRGVmaW5pdGlvbj5bbGFiZWxdKTsKCiAgICAgICAgY29uZGl0aW9uQmxvY2suc2V0QmxvY2tGbG93KGxhYmVsSW5mbywgYnVpbGRlci5jdXJyZW50KTsKCiAgICAgICAganVtcEhhbmRsZXIuZm9yRWFjaEJyZWFrKChIQnJlYWsgYnJlYWtJbnN0cnVjdGlvbiwgXykgewogICAgICAgICAgSEJhc2ljQmxvY2sgYmxvY2sgPSBicmVha0luc3RydWN0aW9uLmJsb2NrOwogICAgICAgICAgYmxvY2suYWRkQXRFeGl0KG5ldyBIQnJlYWsudG9MYWJlbCgKICAgICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbiwgbGFiZWwsIHNvdXJjZUluZm9ybWF0aW9uKSk7CiAgICAgICAgICBibG9jay5yZW1vdmUoYnJlYWtJbnN0cnVjdGlvbik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGp1bXBIYW5kbGVyLmNsb3NlKCk7CiAgICBidWlsZGVyLmxvb3BEZXB0aC0tOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBuZXcgbG9vcC1oZWFkZXIgYmxvY2suIFRoZSBwcmV2aW91cyBbY3VycmVudF0gYmxvY2sKICAvLy8gaXMgY2xvc2VkIHdpdGggYW4gW0hHb3RvXSBhbmQgcmVwbGFjZWQgYnkgdGhlIG5ld2x5IGNyZWF0ZWQgYmxvY2suCiAgLy8vIEFsc28gbm90aWZpZXMgdGhlIGxvY2FscyBoYW5kbGVyIHRoYXQgd2UncmUgZW50ZXJpbmcgYSBsb29wLgogIEp1bXBIYW5kbGVyIGJlZ2luTG9vcEhlYWRlcihpci5UcmVlTm9kZSBub2RlLCBKdW1wVGFyZ2V0IGp1bXBUYXJnZXQpIHsKICAgIGFzc2VydCghYnVpbGRlci5pc0Fib3J0ZWQoKSk7CiAgICBIQmFzaWNCbG9jayBwcmV2aW91c0Jsb2NrID0gYnVpbGRlci5jbG9zZShuZXcgSEdvdG8oX2Fic3RyYWN0VmFsdWVEb21haW4pKTsKCiAgICBKdW1wSGFuZGxlciBqdW1wSGFuZGxlciA9CiAgICAgICAgY3JlYXRlSnVtcEhhbmRsZXIobm9kZSwganVtcFRhcmdldCwgaXNMb29wSnVtcDogdHJ1ZSk7CiAgICBIQmFzaWNCbG9jayBsb29wRW50cnkgPSBidWlsZGVyLmdyYXBoCiAgICAgICAgLmFkZE5ld0xvb3BIZWFkZXJCbG9jayhqdW1wSGFuZGxlci50YXJnZXQsIGp1bXBIYW5kbGVyLmxhYmVscyk7CiAgICBwcmV2aW91c0Jsb2NrLmFkZFN1Y2Nlc3Nvcihsb29wRW50cnkpOwogICAgYnVpbGRlci5vcGVuKGxvb3BFbnRyeSk7CgogICAgYnVpbGRlci5sb2NhbHNIYW5kbGVyLmJlZ2luTG9vcEhlYWRlcihsb29wRW50cnkpOwogICAgcmV0dXJuIGp1bXBIYW5kbGVyOwogIH0KCiAgLy8vIEVuZHMgdGhlIGxvb3AuCiAgLy8vCiAgLy8vIEl0IGRvZXMgdGhpcyBieToKICAvLy8gLSBjcmVhdGluZyBhIG5ldyBibG9jayBhbmQgYWRkaW5nIGl0IGFzIHN1Y2Nlc3NvciB0byB0aGUgW2JyYW5jaEV4aXRCbG9ja10KICAvLy8gICBhbmQgYW55IGJsb2NrcyB0aGF0IGVuZCBpbiBicmVhay4KICAvLy8gLSBvcGVuaW5nIHRoZSBuZXcgYmxvY2sgKHNldHRpbmcgYXMgW2N1cnJlbnRdKS4KICAvLy8gLSBub3RpZnlpbmcgdGhlIGxvY2FscyBoYW5kbGVyIHRoYXQgd2UncmUgZXhpdGluZyBhIGxvb3AuCiAgLy8vCiAgLy8vIFtzYXZlZExvY2Fsc10gYXJlIHRoZSBsb2NhbHMgZnJvbSB0aGUgZW5kIG9mIHRoZSBsb29wIGNvbmRpdGlvbi4KICAvLy8KICAvLy8gW2JyYW5jaEV4aXRCbG9ja10gaXMgdGhlIGV4aXQgKGJyYW5jaGluZykgYmxvY2sgb2YgdGhlIGNvbmRpdGlvbi4KICAvLy8gR2VuZXJhbGx5IHRoaXMgaXMgbm90IHRoZSB0b3Agb2YgdGhlIGxvb3AsIHNpbmNlIHRoaXMgd291bGQgbGVhZCB0bwogIC8vLyBjcml0aWNhbCBlZGdlcy4gSXQgaXMgbnVsbCBmb3IgZGVnZW5lcmF0ZSBkby13aGlsZSBsb29wcyB0aGF0IGhhdmUgbm8gYmFjawogIC8vLyBlZGdlIGJlY2F1c2UgdGhleSBhYm9ydCAodGhyb3cvcmV0dXJuL2JyZWFrIGluIHRoZSBib2R5IGFuZCBoYXZlIG5vCiAgLy8vIGNvbnRpbnVlcykuCiAgdm9pZCBlbmRMb29wKEhCYXNpY0Jsb2NrIGxvb3BFbnRyeSwgSEJhc2ljQmxvY2sgYnJhbmNoRXhpdEJsb2NrLAogICAgICBKdW1wSGFuZGxlciBqdW1wSGFuZGxlciwgTG9jYWxzSGFuZGxlciBzYXZlZExvY2FscykgewogICAgSEJhc2ljQmxvY2sgbG9vcEV4aXRCbG9jayA9IGJ1aWxkZXIuYWRkTmV3QmxvY2soKTsKCiAgICBMaXN0PExvY2Fsc0hhbmRsZXI+IGJyZWFrSGFuZGxlcnMgPSA8TG9jYWxzSGFuZGxlcj5bXTsKICAgIC8vIENvbGxlY3QgZGF0YSBmb3IgdGhlIHN1Y2Nlc3NvcnMgYW5kIHRoZSBwaGlzIGF0IGVhY2ggYnJlYWsuCiAgICBqdW1wSGFuZGxlci5mb3JFYWNoQnJlYWsoKEhCcmVhayBicmVha0luc3RydWN0aW9uLCBMb2NhbHNIYW5kbGVyIGxvY2FscykgewogICAgICBicmVha0luc3RydWN0aW9uLmJsb2NrLmFkZFN1Y2Nlc3Nvcihsb29wRXhpdEJsb2NrKTsKICAgICAgYnJlYWtIYW5kbGVycy5hZGQobG9jYWxzKTsKICAgIH0pOwoKICAgIC8vIFRoZSBleGl0IGJsb2NrIGlzIGEgc3VjY2Vzc29yIG9mIHRoZSBsb29wIGNvbmRpdGlvbiBpZiBpdCBpcyByZWFjaGVkLgogICAgLy8gV2UgZG9uJ3QgYWRkIHRoZSBzdWNjZXNzb3IgaW4gdGhlIGNhc2Ugb2YgYSB3aGlsZS9mb3IgbG9vcCB0aGF0IGFib3J0cwogICAgLy8gYmVjYXVzZSB0aGUgY2FsbGVyIG9mIGVuZExvb3Agd2lsbCBiZSB3aXJpbmcgdXAgYSBzcGVjaWFsIGVtcHR5IGVsc2UKICAgIC8vIGJsb2NrIGluc3RlYWQuCiAgICBpZiAoYnJhbmNoRXhpdEJsb2NrICE9IG51bGwpIHsKICAgICAgYnJhbmNoRXhpdEJsb2NrLmFkZFN1Y2Nlc3Nvcihsb29wRXhpdEJsb2NrKTsKICAgIH0KICAgIC8vIFVwZGF0ZSB0aGUgcGhpcyBhdCB0aGUgbG9vcCBlbnRyeSB3aXRoIHRoZSBjdXJyZW50IHZhbHVlcyBvZiBsb2NhbHMuCiAgICBidWlsZGVyLmxvY2Fsc0hhbmRsZXIuZW5kTG9vcChsb29wRW50cnkpOwoKICAgIC8vIFN0YXJ0IGdlbmVyYXRpbmcgY29kZSBmb3IgdGhlIGV4aXQgYmxvY2suCiAgICBidWlsZGVyLm9wZW4obG9vcEV4aXRCbG9jayk7CgogICAgLy8gQ3JlYXRlIGEgbmV3IGxvY2Fsc0hhbmRsZXIgZm9yIHRoZSBsb29wRXhpdEJsb2NrIHdpdGggdGhlIGNvcnJlY3QgcGhpcy4KICAgIGlmICghYnJlYWtIYW5kbGVycy5pc0VtcHR5KSB7CiAgICAgIGlmIChicmFuY2hFeGl0QmxvY2sgIT0gbnVsbCkgewogICAgICAgIC8vIEFkZCB0aGUgdmFsdWVzIG9mIHRoZSBsb2NhbHMgYXQgdGhlIGVuZCBvZiB0aGUgY29uZGl0aW9uIGJsb2NrIHRvCiAgICAgICAgLy8gdGhlIHBoaXMuICBUaGVzZSBhcmUgdGhlIHZhbHVlcyB0aGF0IGZsb3cgdG8gdGhlIGV4aXQgaWYgdGhlCiAgICAgICAgLy8gY29uZGl0aW9uIGZhaWxzLgogICAgICAgIGJyZWFrSGFuZGxlcnMuYWRkKHNhdmVkTG9jYWxzKTsKICAgICAgfQogICAgICBidWlsZGVyLmxvY2Fsc0hhbmRsZXIgPQogICAgICAgICAgc2F2ZWRMb2NhbHMubWVyZ2VNdWx0aXBsZShicmVha0hhbmRsZXJzLCBsb29wRXhpdEJsb2NrKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1aWxkZXIubG9jYWxzSGFuZGxlciA9IHNhdmVkTG9jYWxzOwogICAgfQogIH0KCiAgLy8vIERldGVybWluZSB3aGF0IGtpbmQgb2YgbG9vcCBbbm9kZV0gcmVwcmVzZW50cy4KICAvLy8KICAvLy8gVGhlIHJlc3VsdCBpcyBvbmUgb2YgdGhlIGtpbmRzIGRlZmluZWQgaW4gW0hMb29wQmxvY2tJbmZvcm1hdGlvbl0uCiAgaW50IGxvb3BLaW5kKGlyLlRyZWVOb2RlIG5vZGUpOwoKICAvLy8gQ3JlYXRlcyBhIFtKdW1wSGFuZGxlcl0gZm9yIGEgc3RhdGVtZW50LiBUaGUgbm9kZSBtdXN0IGJlIGEganVtcAogIC8vLyB0YXJnZXQuIElmIHRoZXJlIGFyZSBubyBicmVha3Mgb3IgY29udGludWVzIHRhcmdldGluZyB0aGUgc3RhdGVtZW50LAogIC8vLyBhIHNwZWNpYWwgIm51bGwgaGFuZGxlciIgaXMgcmV0dXJuZWQuCiAgLy8vCiAgLy8vIFtpc0xvb3BKdW1wXSBpcyBbOnRydWU6XSB3aGVuIHRoZSBqdW1wIGhhbmRsZXIgaXMgZm9yIGEgbG9vcC4gVGhpcyBpcyB1c2VkCiAgLy8vIHRvIGRpc3Rpbmd1aXNoIHRoZSBzeW50aGVzaXplZCBsb29wIGNyZWF0ZWQgZm9yIGEgc3dpdGNoIHN0YXRlbWVudCB3aXRoCiAgLy8vIGNvbnRpbnVlIHN0YXRlbWVudHMgZnJvbSBzaW1wbGUgc3dpdGNoIHN0YXRlbWVudHMuCiAgSnVtcEhhbmRsZXIgY3JlYXRlSnVtcEhhbmRsZXIoaXIuVHJlZU5vZGUgbm9kZSwgSnVtcFRhcmdldCBqdW1wVGFyZ2V0LAogICAgICB7Ym9vbCBpc0xvb3BKdW1wfSk7Cn0KCi8vIFRPRE8oaGV0KTogU2luY2Uga2VybmVsIHNpbXBsaWZpZXMgbG9vcCBicmVha3MgYW5kIGNvbnRpbnVlcywgd2Ugc2hvdWxkCi8vIHJld3JpdGUgdGhlIGxvb3AgaGFuZGxlciBmcm9tIHNjcmF0Y2ggdG8gYWNjb3VudCBmb3IgdGhlIHNpbXBsaWZpZWQgc3RydWN0dXJlCmNsYXNzIEtlcm5lbExvb3BIYW5kbGVyIGV4dGVuZHMgTG9vcEhhbmRsZXIgewogIEBvdmVycmlkZQogIGZpbmFsIEtlcm5lbFNzYUdyYXBoQnVpbGRlciBidWlsZGVyOwoKICBLZXJuZWxMb29wSGFuZGxlcihLZXJuZWxTc2FHcmFwaEJ1aWxkZXIgYnVpbGRlcikKICAgICAgOiB0aGlzLmJ1aWxkZXIgPSBidWlsZGVyLAogICAgICAgIHN1cGVyKGJ1aWxkZXIpOwoKICBAb3ZlcnJpZGUKICBKdW1wSGFuZGxlciBjcmVhdGVKdW1wSGFuZGxlcihpci5UcmVlTm9kZSBub2RlLCBKdW1wVGFyZ2V0IGp1bXBUYXJnZXQsCiAgICAgICAgICB7Ym9vbCBpc0xvb3BKdW1wfSkgPT4KICAgICAgYnVpbGRlci5jcmVhdGVKdW1wSGFuZGxlcihub2RlLCBqdW1wVGFyZ2V0LCBpc0xvb3BKdW1wOiBpc0xvb3BKdW1wKTsKCiAgQG92ZXJyaWRlCiAgaW50IGxvb3BLaW5kKGlyLlRyZWVOb2RlIG5vZGUpID0+IG5vZGUuYWNjZXB0KG5ldyBfS2VybmVsTG9vcFR5cGVWaXNpdG9yKCkpOwp9CgpjbGFzcyBfS2VybmVsTG9vcFR5cGVWaXNpdG9yIGV4dGVuZHMgaXIuVmlzaXRvcjxpbnQ+IHsKICBAb3ZlcnJpZGUKICBpbnQgZGVmYXVsdE5vZGUoaXIuTm9kZSBub2RlKSA9PiBITG9vcEJsb2NrSW5mb3JtYXRpb24uTk9UX0FfTE9PUDsKCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0V2hpbGVTdGF0ZW1lbnQoaXIuV2hpbGVTdGF0ZW1lbnQgbm9kZSkgPT4KICAgICAgSExvb3BCbG9ja0luZm9ybWF0aW9uLldISUxFX0xPT1A7CgogIEBvdmVycmlkZQogIGludCB2aXNpdEZvclN0YXRlbWVudChpci5Gb3JTdGF0ZW1lbnQgbm9kZSkgPT4gSExvb3BCbG9ja0luZm9ybWF0aW9uLkZPUl9MT09QOwoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXREb1N0YXRlbWVudChpci5Eb1N0YXRlbWVudCBub2RlKSA9PgogICAgICBITG9vcEJsb2NrSW5mb3JtYXRpb24uRE9fV0hJTEVfTE9PUDsKCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0Rm9ySW5TdGF0ZW1lbnQoaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgPT4KICAgICAgSExvb3BCbG9ja0luZm9ybWF0aW9uLkZPUl9JTl9MT09QOwoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoaXIuU3dpdGNoU3RhdGVtZW50IG5vZGUpID0+CiAgICAgIEhMb29wQmxvY2tJbmZvcm1hdGlvbi5TV0lUQ0hfQ09OVElOVUVfTE9PUDsKfQqBZABOTjwBKAExITEoAR4cHhUBKR0nAR0BMi8BMAY7PT4TFCkdGSAVEy0RFhQsERQbEwFJARgrHB49JRQkTwYBGUFBMjkBNSxNKD4BSksYTwERODQiAU0MAVAtUQEfAVAdEVBRUDcBQBJLNSYKAR81LQgBIR5MATkfJSpOIxpGJTNGIxoIARxBARABIzotM0QBST4oNjoBTQEuPho5PDE0MTEeATYsDVEgGhESTAsJQho1HzZPLEQBPz0tAUIQQU0xODo8MTIBPSw+AUYTJyA+TUs3JwFBAUA2LkAqDAgGGRkEAURJQ0kiUAEePypIKx0BNhgEARUGF1EqNkAGRwZISlFKEkM8NwE7Q086IQgBTU5MFiMzBkwuATEhAU8iJU1IHCgIHkMNKwYEATUGSSIBR0ssBlFOOUkaAgFLUS4MJwEzIBgBDEkgSwEMTwIBNwxFAQw1KAEMUQEMLysBDDUpAQw3MgIBKnBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9sb29wX2hhbmRsZXIuZGFydDlzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2Evc3NhX2JyYW5jaF9idWlsZGVyLmRhcnSepS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW8vc291cmNlX2luZm9ybWF0aW9uLmRhcnQnOwoKaW1wb3J0ICdidWlsZGVyX2tlcm5lbC5kYXJ0JzsKaW1wb3J0ICdsb2NhbHNfaGFuZGxlci5kYXJ0JzsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKCmNsYXNzIFNzYUJyYW5jaCB7CiAgZmluYWwgU3NhQnJhbmNoQnVpbGRlciBicmFuY2hCdWlsZGVyOwogIGZpbmFsIEhCYXNpY0Jsb2NrIGJsb2NrOwogIExvY2Fsc0hhbmRsZXIgc3RhcnRMb2NhbHM7CiAgTG9jYWxzSGFuZGxlciBleGl0TG9jYWxzOwogIFN1YkdyYXBoIGdyYXBoOwoKICBTc2FCcmFuY2godGhpcy5icmFuY2hCdWlsZGVyKSA6IGJsb2NrID0gbmV3IEhCYXNpY0Jsb2NrKCk7Cn0KCmNsYXNzIFNzYUJyYW5jaEJ1aWxkZXIgewogIGZpbmFsIEtlcm5lbFNzYUdyYXBoQnVpbGRlciBidWlsZGVyOwogIGZpbmFsIFNwYW5uYWJsZSBkaWFnbm9zdGljTm9kZTsKCiAgU3NhQnJhbmNoQnVpbGRlcih0aGlzLmJ1aWxkZXIsIFt0aGlzLmRpYWdub3N0aWNOb2RlXSk7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIGJ1aWxkZXIuY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbjsKCiAgdm9pZCBjaGVja05vdEFib3J0ZWQoKSB7CiAgICBpZiAoYnVpbGRlci5pc0Fib3J0ZWQoKSkgewogICAgICBmYWlsZWRBdChkaWFnbm9zdGljTm9kZSwgImFib3J0ZWQgY29udHJvbCBmbG93Iik7CiAgICB9CiAgfQoKICB2b2lkIGJ1aWxkQ29uZGl0aW9uKAogICAgICB2b2lkIHZpc2l0Q29uZGl0aW9uKCksCiAgICAgIFNzYUJyYW5jaCBjb25kaXRpb25CcmFuY2gsCiAgICAgIFNzYUJyYW5jaCB0aGVuQnJhbmNoLAogICAgICBTc2FCcmFuY2ggZWxzZUJyYW5jaCwKICAgICAgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24pIHsKICAgIHN0YXJ0QnJhbmNoKGNvbmRpdGlvbkJyYW5jaCk7CiAgICB2aXNpdENvbmRpdGlvbigpOwogICAgY2hlY2tOb3RBYm9ydGVkKCk7CiAgICBhc3NlcnQoaWRlbnRpY2FsKGJ1aWxkZXIuY3VycmVudCwgYnVpbGRlci5sYXN0T3BlbmVkQmxvY2spKTsKICAgIEhJbnN0cnVjdGlvbiBjb25kaXRpb25WYWx1ZSA9IGJ1aWxkZXIucG9wQm9vbGlmaWVkKCk7CiAgICBISWYgYnJhbmNoID0gbmV3IEhJZihfYWJzdHJhY3RWYWx1ZURvbWFpbiwgY29uZGl0aW9uVmFsdWUpCiAgICAgIC4uc291cmNlSW5mb3JtYXRpb24gPSBzb3VyY2VJbmZvcm1hdGlvbjsKICAgIEhCYXNpY0Jsb2NrIGNvbmRpdGlvbkV4aXRCbG9jayA9IGJ1aWxkZXIuY3VycmVudDsKICAgIGJ1aWxkZXIuY2xvc2UoYnJhbmNoKTsKICAgIGNvbmRpdGlvbkJyYW5jaC5leGl0TG9jYWxzID0gYnVpbGRlci5sb2NhbHNIYW5kbGVyOwogICAgY29uZGl0aW9uRXhpdEJsb2NrLmFkZFN1Y2Nlc3Nvcih0aGVuQnJhbmNoLmJsb2NrKTsKICAgIGNvbmRpdGlvbkV4aXRCbG9jay5hZGRTdWNjZXNzb3IoZWxzZUJyYW5jaC5ibG9jayk7CiAgICBib29sIGNvbmRpdGlvbkJyYW5jaExvY2Fsc0NhbkJlUmV1c2VkID0KICAgICAgICBtZXJnZUxvY2Fscyhjb25kaXRpb25CcmFuY2gsIHRoZW5CcmFuY2gsIG1heVJldXNlRnJvbUxvY2FsczogdHJ1ZSk7CiAgICBtZXJnZUxvY2Fscyhjb25kaXRpb25CcmFuY2gsIGVsc2VCcmFuY2gsCiAgICAgICAgbWF5UmV1c2VGcm9tTG9jYWxzOiBjb25kaXRpb25CcmFuY2hMb2NhbHNDYW5CZVJldXNlZCk7CgogICAgY29uZGl0aW9uQnJhbmNoLmdyYXBoID0KICAgICAgICBuZXcgU3ViRXhwcmVzc2lvbihjb25kaXRpb25CcmFuY2guYmxvY2ssIGNvbmRpdGlvbkV4aXRCbG9jayk7CiAgfQoKICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBsb2NhbHMgb2YgdGhlIFtmcm9tQnJhbmNoXSBtYXkgYmUgcmV1c2VkLiBBIFs6dHJ1ZTpdCiAgLy8vIHJldHVybiB2YWx1ZSBpbXBsaWVzIHRoYXQgW21heVJldXNlRnJvbUxvY2Fsc10gd2FzIHNldCB0byBbOnRydWU6XS4KICBib29sIG1lcmdlTG9jYWxzKFNzYUJyYW5jaCBmcm9tQnJhbmNoLCBTc2FCcmFuY2ggdG9CcmFuY2gsCiAgICAgIHtib29sIG1heVJldXNlRnJvbUxvY2Fsc30pIHsKICAgIExvY2Fsc0hhbmRsZXIgZnJvbUxvY2FscyA9IGZyb21CcmFuY2guZXhpdExvY2FsczsKICAgIGlmICh0b0JyYW5jaC5zdGFydExvY2FscyA9PSBudWxsKSB7CiAgICAgIGlmIChtYXlSZXVzZUZyb21Mb2NhbHMpIHsKICAgICAgICB0b0JyYW5jaC5zdGFydExvY2FscyA9IGZyb21Mb2NhbHM7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIHRvQnJhbmNoLnN0YXJ0TG9jYWxzID0gbmV3IExvY2Fsc0hhbmRsZXIuZnJvbShmcm9tTG9jYWxzKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgdG9CcmFuY2guc3RhcnRMb2NhbHMubWVyZ2VXaXRoKGZyb21Mb2NhbHMsIHRvQnJhbmNoLmJsb2NrKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfQoKICB2b2lkIHN0YXJ0QnJhbmNoKFNzYUJyYW5jaCBicmFuY2gpIHsKICAgIGJ1aWxkZXIuZ3JhcGguYWRkQmxvY2soYnJhbmNoLmJsb2NrKTsKICAgIGJ1aWxkZXIubG9jYWxzSGFuZGxlciA9IGJyYW5jaC5zdGFydExvY2FsczsKICAgIGJ1aWxkZXIub3BlbihicmFuY2guYmxvY2spOwogIH0KCiAgSEluc3RydWN0aW9uIGJ1aWxkQnJhbmNoKFNzYUJyYW5jaCBicmFuY2gsIHZvaWQgdmlzaXRCcmFuY2goKSwKICAgICAgU3NhQnJhbmNoIGpvaW5CcmFuY2gsIGJvb2wgaXNFeHByZXNzaW9uKSB7CiAgICBzdGFydEJyYW5jaChicmFuY2gpOwogICAgdmlzaXRCcmFuY2goKTsKICAgIGJyYW5jaC5ncmFwaCA9IG5ldyBTdWJHcmFwaChicmFuY2guYmxvY2ssIGJ1aWxkZXIubGFzdE9wZW5lZEJsb2NrKTsKICAgIGJyYW5jaC5leGl0TG9jYWxzID0gYnVpbGRlci5sb2NhbHNIYW5kbGVyOwogICAgaWYgKCFidWlsZGVyLmlzQWJvcnRlZCgpKSB7CiAgICAgIGJ1aWxkZXIuZ290byhidWlsZGVyLmN1cnJlbnQsIGpvaW5CcmFuY2guYmxvY2spOwogICAgICBtZXJnZUxvY2FscyhicmFuY2gsIGpvaW5CcmFuY2gsIG1heVJldXNlRnJvbUxvY2FsczogdHJ1ZSk7CiAgICB9CiAgICBpZiAoaXNFeHByZXNzaW9uKSB7CiAgICAgIGNoZWNrTm90QWJvcnRlZCgpOwogICAgICByZXR1cm4gYnVpbGRlci5wb3AoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgaGFuZGxlSWYodm9pZCB2aXNpdENvbmRpdGlvbigpLCB2b2lkIHZpc2l0VGhlbigpLCB2b2lkIHZpc2l0RWxzZSgpLAogICAgICB7U291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb259KSB7CiAgICBpZiAodmlzaXRFbHNlID09IG51bGwpIHsKICAgICAgLy8gTWFrZSBzdXJlIHRvIGhhdmUgYW4gZWxzZSBwYXJ0IHRvIGF2b2lkIGEgY3JpdGljYWwgZWRnZS4gQQogICAgICAvLyBjcml0aWNhbCBlZGdlIGlzIGFuIGVkZ2UgdGhhdCBjb25uZWN0cyBhIGJsb2NrIHdpdGggbXVsdGlwbGUKICAgICAgLy8gc3VjY2Vzc29ycyB0byBhIGJsb2NrIHdpdGggbXVsdGlwbGUgcHJlZGVjZXNzb3JzLiBXZSBhdm9pZAogICAgICAvLyBzdWNoIGVkZ2VzIGJlY2F1c2UgdGhleSBwcmV2ZW50IGluc2VydGluZyBjb3BpZXMgZHVyaW5nIGNvZGUKICAgICAgLy8gZ2VuZXJhdGlvbiBvZiBwaGkgaW5zdHJ1Y3Rpb25zLgogICAgICB2aXNpdEVsc2UgPSAoKSB7fTsKICAgIH0KCiAgICBfaGFuZGxlRGlhbW9uZEJyYW5jaCh2aXNpdENvbmRpdGlvbiwgdmlzaXRUaGVuLCB2aXNpdEVsc2UsCiAgICAgICAgaXNFeHByZXNzaW9uOiBmYWxzZSwgc291cmNlSW5mb3JtYXRpb246IHNvdXJjZUluZm9ybWF0aW9uKTsKICB9CgogIGhhbmRsZUNvbmRpdGlvbmFsKHZvaWQgdmlzaXRDb25kaXRpb24oKSwgdm9pZCB2aXNpdFRoZW4oKSwgdm9pZCB2aXNpdEVsc2UoKSkgewogICAgYXNzZXJ0KHZpc2l0RWxzZSAhPSBudWxsKTsKICAgIF9oYW5kbGVEaWFtb25kQnJhbmNoKHZpc2l0Q29uZGl0aW9uLCB2aXNpdFRoZW4sIHZpc2l0RWxzZSwKICAgICAgICBpc0V4cHJlc3Npb246IHRydWUpOwogIH0KCiAgaGFuZGxlSWZOdWxsKHZvaWQgbGVmdCgpLCB2b2lkIHJpZ2h0KCkpIHsKICAgIC8vIHggPz8geSBpcyB0cmFuc2Zvcm1lZCBpbnRvOiB4ID09IG51bGwgPyB5IDogeAogICAgSEluc3RydWN0aW9uIGxlZnRFeHByZXNzaW9uOwogICAgaGFuZGxlQ29uZGl0aW9uYWwoKCkgewogICAgICBsZWZ0KCk7CiAgICAgIGxlZnRFeHByZXNzaW9uID0gYnVpbGRlci5wb3AoKTsKICAgICAgYnVpbGRlci5wdXNoQ2hlY2tOdWxsKGxlZnRFeHByZXNzaW9uKTsKICAgIH0sIHJpZ2h0LCAoKSA9PiBidWlsZGVyLnN0YWNrLmFkZChsZWZ0RXhwcmVzc2lvbikpOwogIH0KCiAgLy8vIENyZWF0ZXMgdGhlIGdyYXBoIGZvciAnJiYnIG9yICd8fCcgb3BlcmF0b3JzLgogIC8vLwogIC8vLyB4ICYmIHkgaXMgdHJhbnNmb3JtZWQgaW50bzoKICAvLy8KICAvLy8gICAgIHQwID0gYm9vbGlmeSh4KTsKICAvLy8gICAgIGlmICh0MCkgewogIC8vLyAgICAgICB0MSA9IGJvb2xpZnkoeSk7CiAgLy8vICAgICB9CiAgLy8vICAgICByZXN1bHQgPSBwaGkodDEsIGZhbHNlKTsKICAvLy8KICAvLy8geCB8fCB5IGlzIHRyYW5zZm9ybWVkIGludG86CiAgLy8vCiAgLy8vICAgICB0MCA9IGJvb2xpZnkoeCk7CiAgLy8vICAgICBpZiAobm90KHQwKSkgewogIC8vLyAgICAgICB0MSA9IGJvb2xpZnkoeSk7CiAgLy8vICAgICB9CiAgLy8vICAgICByZXN1bHQgPSBwaGkodDEsIHRydWUpOwogIHZvaWQgaGFuZGxlTG9naWNhbEJpbmFyeSgKICAgICAgdm9pZCBsZWZ0KCksIHZvaWQgcmlnaHQoKSwgU291cmNlSW5mb3JtYXRpb24gc291cmNlSW5mb3JtYXRpb24sCiAgICAgIHtib29sIGlzQW5kfSkgewogICAgSEluc3RydWN0aW9uIGJvb2xpZmllZExlZnQ7CiAgICBISW5zdHJ1Y3Rpb24gYm9vbGlmaWVkUmlnaHQ7CgogICAgdm9pZCB2aXNpdENvbmRpdGlvbigpIHsKICAgICAgbGVmdCgpOwogICAgICBib29saWZpZWRMZWZ0ID0gYnVpbGRlci5wb3BCb29saWZpZWQoKTsKICAgICAgYnVpbGRlci5zdGFjay5hZGQoYm9vbGlmaWVkTGVmdCk7CiAgICAgIGlmICghaXNBbmQpIHsKICAgICAgICBidWlsZGVyLnB1c2gobmV3IEhOb3QoYnVpbGRlci5wb3AoKSwgX2Fic3RyYWN0VmFsdWVEb21haW4uYm9vbFR5cGUpCiAgICAgICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb24pOwogICAgICB9CiAgICB9CgogICAgdm9pZCB2aXNpdFRoZW4oKSB7CiAgICAgIHJpZ2h0KCk7CiAgICAgIGJvb2xpZmllZFJpZ2h0ID0gYnVpbGRlci5wb3BCb29saWZpZWQoKTsKICAgIH0KCiAgICBoYW5kbGVJZih2aXNpdENvbmRpdGlvbiwgdmlzaXRUaGVuLCBudWxsLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uOiBzb3VyY2VJbmZvcm1hdGlvbik7CiAgICBIQ29uc3RhbnQgbm90SXNBbmQgPQogICAgICAgIGJ1aWxkZXIuZ3JhcGguYWRkQ29uc3RhbnRCb29sKCFpc0FuZCwgYnVpbGRlci5jbG9zZWRXb3JsZCk7CiAgICBIUGhpIHJlc3VsdCA9IG5ldyBIUGhpLm1hbnlJbnB1dHMoCiAgICAgICAgbnVsbCwKICAgICAgICA8SEluc3RydWN0aW9uPltib29saWZpZWRSaWdodCwgbm90SXNBbmRdLAogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmR5bmFtaWNUeXBlKQogICAgICAuLnNvdXJjZUluZm9ybWF0aW9uID0gc291cmNlSW5mb3JtYXRpb247CiAgICBidWlsZGVyLmN1cnJlbnQuYWRkUGhpKHJlc3VsdCk7CiAgICBidWlsZGVyLnN0YWNrLmFkZChyZXN1bHQpOwogIH0KCiAgdm9pZCBfaGFuZGxlRGlhbW9uZEJyYW5jaCgKICAgICAgdm9pZCB2aXNpdENvbmRpdGlvbigpLCB2b2lkIHZpc2l0VGhlbigpLCB2b2lkIHZpc2l0RWxzZSgpLAogICAgICB7Ym9vbCBpc0V4cHJlc3Npb24sIFNvdXJjZUluZm9ybWF0aW9uIHNvdXJjZUluZm9ybWF0aW9ufSkgewogICAgU3NhQnJhbmNoIGNvbmRpdGlvbkJyYW5jaCA9IG5ldyBTc2FCcmFuY2godGhpcyk7CiAgICBTc2FCcmFuY2ggdGhlbkJyYW5jaCA9IG5ldyBTc2FCcmFuY2godGhpcyk7CiAgICBTc2FCcmFuY2ggZWxzZUJyYW5jaCA9IG5ldyBTc2FCcmFuY2godGhpcyk7CiAgICBTc2FCcmFuY2ggam9pbkJyYW5jaCA9IG5ldyBTc2FCcmFuY2godGhpcyk7CgogICAgY29uZGl0aW9uQnJhbmNoLnN0YXJ0TG9jYWxzID0gYnVpbGRlci5sb2NhbHNIYW5kbGVyOwogICAgYnVpbGRlci5nb3RvKGJ1aWxkZXIuY3VycmVudCwgY29uZGl0aW9uQnJhbmNoLmJsb2NrKTsKCiAgICBidWlsZENvbmRpdGlvbih2aXNpdENvbmRpdGlvbiwgY29uZGl0aW9uQnJhbmNoLCB0aGVuQnJhbmNoLCBlbHNlQnJhbmNoLAogICAgICAgIHNvdXJjZUluZm9ybWF0aW9uKTsKICAgIEhJbnN0cnVjdGlvbiB0aGVuVmFsdWUgPQogICAgICAgIGJ1aWxkQnJhbmNoKHRoZW5CcmFuY2gsIHZpc2l0VGhlbiwgam9pbkJyYW5jaCwgaXNFeHByZXNzaW9uKTsKICAgIEhJbnN0cnVjdGlvbiBlbHNlVmFsdWUgPQogICAgICAgIGJ1aWxkQnJhbmNoKGVsc2VCcmFuY2gsIHZpc2l0RWxzZSwgam9pbkJyYW5jaCwgaXNFeHByZXNzaW9uKTsKCiAgICBpZiAoaXNFeHByZXNzaW9uKSB7CiAgICAgIGFzc2VydCh0aGVuVmFsdWUgIT0gbnVsbCAmJiBlbHNlVmFsdWUgIT0gbnVsbCk7CiAgICAgIEhQaGkgcGhpID0gbmV3IEhQaGkubWFueUlucHV0cyhudWxsLCA8SEluc3RydWN0aW9uPlt0aGVuVmFsdWUsIGVsc2VWYWx1ZV0sCiAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5keW5hbWljVHlwZSk7CiAgICAgIGpvaW5CcmFuY2guYmxvY2suYWRkUGhpKHBoaSk7CiAgICAgIGJ1aWxkZXIuc3RhY2suYWRkKHBoaSk7CiAgICB9CgogICAgSEJhc2ljQmxvY2sgam9pbkJsb2NrOwogICAgLy8gSWYgYXQgbGVhc3Qgb25lIGJyYW5jaCBkaWQgbm90IGFib3J0LCBvcGVuIHRoZSBqb2luQnJhbmNoLgogICAgaWYgKCFqb2luQnJhbmNoLmJsb2NrLnByZWRlY2Vzc29ycy5pc0VtcHR5KSB7CiAgICAgIHN0YXJ0QnJhbmNoKGpvaW5CcmFuY2gpOwogICAgICBqb2luQmxvY2sgPSBqb2luQnJhbmNoLmJsb2NrOwogICAgfQoKICAgIEhJZkJsb2NrSW5mb3JtYXRpb24gaW5mbyA9IG5ldyBISWZCbG9ja0luZm9ybWF0aW9uKAogICAgICAgIG5ldyBIU3ViRXhwcmVzc2lvbkJsb2NrSW5mb3JtYXRpb24oY29uZGl0aW9uQnJhbmNoLmdyYXBoKSwKICAgICAgICBuZXcgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbih0aGVuQnJhbmNoLmdyYXBoKSwKICAgICAgICBuZXcgSFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbihlbHNlQnJhbmNoLmdyYXBoKSk7CgogICAgSEJhc2ljQmxvY2sgY29uZGl0aW9uU3RhcnRCbG9jayA9IGNvbmRpdGlvbkJyYW5jaC5ibG9jazsKICAgIGNvbmRpdGlvblN0YXJ0QmxvY2suc2V0QmxvY2tGbG93KGluZm8sIGpvaW5CbG9jayk7CiAgICBTdWJHcmFwaCBjb25kaXRpb25HcmFwaCA9IGNvbmRpdGlvbkJyYW5jaC5ncmFwaDsKICAgIEhJZiBicmFuY2ggPSBjb25kaXRpb25HcmFwaC5lbmQubGFzdDsKICAgIGFzc2VydChicmFuY2ggaXMgSElmKTsKICAgIGJyYW5jaC5ibG9ja0luZm9ybWF0aW9uID0gY29uZGl0aW9uU3RhcnRCbG9jay5ibG9ja0Zsb3c7CiAgfQp9CoDsAE5OPAEZMSgBHh4VARIoGx0cEgE9AgEZJyIBOQEyLwEbHzgGBAEXHSEcHC0iFhdBOj8vNhs4NzcsTC0/ARxGBAFPSj0jNiggKxYPQxUIDUITBgQBJyowIAQBQTEZE0gvIDdBBhgZHAYRBAFGLx1ERkRGKRkGAT9EBAFRHz8dBAEsNSEbDiYtOAQBNAYiBhsUHQwjBiIGGxkdDCIcRhYgIQEcDi4oFEw0CAYBFw8vBgEuLxlEJw4yKi8kHwQBHUFCNTAwMAE5OgFMHB1GHUYBGDZRLSQeBgEbQjIfJAYBOEM5OgE9NzUqGz0EAgEwcGFja2FnZTpjb21waWxlci9zcmMvc3NhL3NzYV9icmFuY2hfYnVpbGRlci5kYXJ0P3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS9zd2l0Y2hfY29udGludWVfYW5hbHlzaXMuZGFydI4yLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwoKLy8vIEhlbHBlciBjbGFzcyB0aGF0IHRyYXZlcnNlcyBhIGtlcm5lbCBBU1Qgc3VidHJlZSB0byBzZWUgaWYgaXQgaGFzIGFueQovLy8gY29udGludWUgc3RhdGVtZW50cyBpbiB0aGUgYm9keSBvZiBhbnkgc3dpdGNoIGNhc2VzIChoYXZpbmcgY29udGludWUKLy8vIHN0YXRlbWVudHMgcmVzdWx0cyBpbiBhIG1vcmUgY29tcGxleCBnZW5lcmF0ZWQgY29kZSkuCmNsYXNzIFN3aXRjaENvbnRpbnVlQW5hbHlzaXMgZXh0ZW5kcyBpci5WaXNpdG9yPGJvb2w+IHsKICBTd2l0Y2hDb250aW51ZUFuYWx5c2lzLl8oKTsKCiAgc3RhdGljIGJvb2wgY29udGFpbnNDb250aW51ZShpci5TdGF0ZW1lbnQgc3dpdGNoQ2FzZUJvZHkpIHsKICAgIHJldHVybiBzd2l0Y2hDYXNlQm9keS5hY2NlcHQobmV3IFN3aXRjaENvbnRpbnVlQW5hbHlzaXMuXygpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRDb250aW51ZVN3aXRjaFN0YXRlbWVudChpci5Db250aW51ZVN3aXRjaFN0YXRlbWVudCBjb250aW51ZVN0bXQpIHsKICAgIC8vIFRPRE8oZWZvcnR1bmEpOiBDaGVjayB3aGF0IHRoZSB0YXJnZXQgb2YgdGhpcyBjb250aW51ZSBzdGF0ZW1lbnQgYWN0dWFsbHkKICAgIC8vIElTLCBiZWNhdXNlIGRlcGVuZGluZyBvbiB3aGVyZSB0aGUgbGFiZWwgcG9pbnRzIGlmIHdlIGhhdmUgYSBuZXN0ZWQKICAgIC8vIHN3aXRjaCBzdGF0ZW1lbnQgd2UgbWlnaHQgYmUgYWJsZSB0byBvdXRwdXQgc2ltcGxlciBjb2RlIChub3QgdGhlIGNvbXBsZXgKICAgIC8vIHN3aXRjaCBzdGF0ZW1lbnQpLgogICAgcmV0dXJuIHRydWU7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0QmxvY2soaXIuQmxvY2sgYmxvY2spIHsKICAgIGZvciAoaXIuU3RhdGVtZW50IHN0YXRlbWVudCBpbiBibG9jay5zdGF0ZW1lbnRzKSB7CiAgICAgIGlmIChzdGF0ZW1lbnQuYWNjZXB0KHRoaXMpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRMYWJlbGVkU3RhdGVtZW50KGlyLkxhYmVsZWRTdGF0ZW1lbnQgc3RhdGVtZW50KSB7CiAgICByZXR1cm4gc3RhdGVtZW50LmJvZHkuYWNjZXB0KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdERvU3RhdGVtZW50KGlyLkRvU3RhdGVtZW50IGRvU3RhdGVtZW50KSB7CiAgICByZXR1cm4gZG9TdGF0ZW1lbnQuYm9keS5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Rm9yU3RhdGVtZW50KGlyLkZvclN0YXRlbWVudCBmb3JTdGF0ZW1lbnQpIHsKICAgIHJldHVybiBmb3JTdGF0ZW1lbnQuYm9keS5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Rm9ySW5TdGF0ZW1lbnQoaXIuRm9ySW5TdGF0ZW1lbnQgZm9ySW5TdGF0ZW1lbnQpIHsKICAgIHJldHVybiBmb3JJblN0YXRlbWVudC5ib2R5LmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTd2l0Y2hTdGF0ZW1lbnQoaXIuU3dpdGNoU3RhdGVtZW50IHN3aXRjaFN0YXRlbWVudCkgewogICAgZm9yICh2YXIgc3dpdGNoQ2FzZSBpbiBzd2l0Y2hTdGF0ZW1lbnQuY2FzZXMpIHsKICAgICAgaWYgKHN3aXRjaENhc2UuYWNjZXB0KHRoaXMpKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRTd2l0Y2hDYXNlKGlyLlN3aXRjaENhc2Ugc3dpdGNoQ2FzZSkgewogICAgcmV0dXJuIHN3aXRjaENhc2UuYm9keS5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0SWZTdGF0ZW1lbnQoaXIuSWZTdGF0ZW1lbnQgaWZTdGF0ZW1lbnQpIHsKICAgIHJldHVybiBpZlN0YXRlbWVudC50aGVuLmFjY2VwdCh0aGlzKSB8fAogICAgICAgIChpZlN0YXRlbWVudC5vdGhlcndpc2UgIT0gbnVsbCAmJiBpZlN0YXRlbWVudC5vdGhlcndpc2UuYWNjZXB0KHRoaXMpKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUcnlDYXRjaChpci5UcnlDYXRjaCB0cnlDYXRjaCkgewogICAgaWYgKHRyeUNhdGNoLmJvZHkuYWNjZXB0KHRoaXMpKSB7CiAgICAgIGZvciAodmFyIGNhdGNoU3RhdGVtZW50IGluIHRyeUNhdGNoLmNhdGNoZXMpIHsKICAgICAgICBpZiAoY2F0Y2hTdGF0ZW1lbnQuYWNjZXB0KHRoaXMpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRXaGlsZVN0YXRlbWVudChpci5XaGlsZVN0YXRlbWVudCBzdGF0ZW1lbnQpIHsKICAgIHJldHVybiBzdGF0ZW1lbnQuYm9keS5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0Q2F0Y2goaXIuQ2F0Y2ggY2F0Y2hTdGF0ZW1lbnQpIHsKICAgIHJldHVybiBjYXRjaFN0YXRlbWVudC5ib2R5LmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRUcnlGaW5hbGx5KGlyLlRyeUZpbmFsbHkgdHJ5RmluYWxseSkgewogICAgcmV0dXJuIHRyeUZpbmFsbHkuYm9keS5hY2NlcHQodGhpcykgJiYgdHJ5RmluYWxseS5maW5hbGl6ZXIuYWNjZXB0KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEZ1bmN0aW9uRGVjbGFyYXRpb24oaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBkZWNsYXJhdGlvbikgewogICAgcmV0dXJuIGRlY2xhcmF0aW9uLmZ1bmN0aW9uLmFjY2VwdCh0aGlzKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRGdW5jdGlvbk5vZGUoaXIuRnVuY3Rpb25Ob2RlIG5vZGUpIHsKICAgIHJldHVybiBub2RlLmJvZHkuYWNjZXB0KHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBkZWZhdWx0U3RhdGVtZW50KGlyLlN0YXRlbWVudCBub2RlKSB7CiAgICBpZiAobm9kZSBpcyBpci5FeHByZXNzaW9uU3RhdGVtZW50IHx8CiAgICAgICAgbm9kZSBpcyBpci5FbXB0eVN0YXRlbWVudCB8fAogICAgICAgIG5vZGUgaXMgaXIuQnJlYWtTdGF0ZW1lbnQgfHwKICAgICAgICBub2RlIGlzIGlyLlJldHVyblN0YXRlbWVudCB8fAogICAgICAgIG5vZGUgaXMgaXIuQXNzZXJ0U3RhdGVtZW50IHx8CiAgICAgICAgbm9kZSBpcyBpci5ZaWVsZFN0YXRlbWVudCB8fAogICAgICAgIG5vZGUgaXMgaXIuVmFyaWFibGVEZWNsYXJhdGlvbikgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB0aHJvdyAnU3RhdGVtZW50IHR5cGUgJHtub2RlLnJ1bnRpbWVUeXBlfSBub3QgaGFuZGxlZCBpbiAnCiAgICAgICAgJ1N3aXRjaENvbnRpbnVlQW5hbHlzaXMnOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBkZWZhdWx0Tm9kZShpci5Ob2RlIG5vZGUpID0+IGZhbHNlOwp9CoCFAE5OPAEoAUpJOjgeAT5CBAEMT1FLURoRBAEMJDckFQgGEgQBDD4oBAEMNioEAQw5KwQBDD8tBAEMQjQlFQgGEgQBDDMpBAEMNixPBAEMLSY1KxcKCAYSBAEMOigEAQwtLQQBDDNOBAEMRi4EAQwxIwQBDC0qJSUmJiUqFAY/IgQBDCsCATZwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2Evc3dpdGNoX2NvbnRpbnVlX2FuYWx5c2lzLmRhcnQxc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvaXIvZWxlbWVudF9tYXAuZGFydIsoLy8gQ29weXJpZ2h0IChjKSAyMDE4LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvaW5kZXhlZC5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9vcmRlcmVkX3R5cGVzZXQuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvY2FsbF9zdHJ1Y3R1cmUuZGFydCc7CgovLy8gSW50ZXJmYWNlIHRoYXQgdHJhbnNsYXRlcyBiZXR3ZWVuIEtlcm5lbCBJUiBub2RlcyBhbmQgZW50aXRpZXMuCi8vLwovLy8gVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCBpbnRlcm5hbGx5IHRvIGltcGxlbWVudCBbS2VybmVsVG9FbGVtZW50TWFwXSBpbiB0aGUKLy8vIGZyb250ZW5kIGFuZCBbSnNUb0VsZW1lbnRNYXBdIGluIHRoZSBiYWNrZW5kLgphYnN0cmFjdCBjbGFzcyBJclRvRWxlbWVudE1hcCB7CiAgLy8vIFJldHVybnMgdGhlIFtEYXJ0VHlwZV0gY29ycmVzcG9uZGluZyB0byBbdHlwZV0uCiAgRGFydFR5cGUgZ2V0RGFydFR5cGUoaXIuRGFydFR5cGUgdHlwZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbTWVtYmVyRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtZW1iZXIgW25vZGVdLgogIE1lbWJlckVudGl0eSBnZXRNZW1iZXIoaXIuTWVtYmVyIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0Z1bmN0aW9uRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm9jZWR1cmUgW25vZGVdLgogIEZ1bmN0aW9uRW50aXR5IGdldE1ldGhvZChpci5Qcm9jZWR1cmUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbQ29uc3RydWN0b3JFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdlbmVyYXRpdmUgb3IgZmFjdG9yeQogIC8vLyBjb25zdHJ1Y3RvciBbbm9kZV0uCiAgQ29uc3RydWN0b3JFbnRpdHkgZ2V0Q29uc3RydWN0b3IoaXIuTWVtYmVyIG5vZGUpOwoKICAvLy8gUmV0dXJucyB0aGUgW0ZpZWxkRW50aXR5XSBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaWVsZCBbbm9kZV0uCiAgRmllbGRFbnRpdHkgZ2V0RmllbGQoaXIuRmllbGQgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbQ2xhc3NFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNsYXNzIFtub2RlXS4KICBDbGFzc0VudGl0eSBnZXRDbGFzcyhpci5DbGFzcyBub2RlKTsKCiAgLy8vIFJldHVybnMgdGhlIFtGdW5jdGlvblR5cGVdIG9mIHRoZSBbbm9kZV0uCiAgRnVuY3Rpb25UeXBlIGdldEZ1bmN0aW9uVHlwZShpci5GdW5jdGlvbk5vZGUgbm9kZSk7CgogIC8vLyBSZXR1cm5zIHRoZSBbVHlwZWRlZlR5cGVdIGNvcnJlc3BvbmRpbmcgdG8gcmF3IHR5cGUgb2YgdGhlIHR5cGVkZWYgW25vZGVdLgogIFR5cGVkZWZUeXBlIGdldFR5cGVkZWZUeXBlKGlyLlR5cGVkZWYgbm9kZSk7CgogIC8vLyBSZXR1cm4gdGhlIFtJbnRlcmZhY2VUeXBlXSBjb3JyZXNwb25kaW5nIHRvIHRoZSBbY2xzXSB3aXRoIHRoZSBnaXZlbgogIC8vLyBbdHlwZUFyZ3VtZW50c10uCiAgSW50ZXJmYWNlVHlwZSBjcmVhdGVJbnRlcmZhY2VUeXBlKAogICAgICBpci5DbGFzcyBjbHMsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpOwoKICAvLy8gUmV0dXJucyB0aGUgW0NhbGxTdHJ1Y3R1cmVdIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFthcmd1bWVudHNdLgogIENhbGxTdHJ1Y3R1cmUgZ2V0Q2FsbFN0cnVjdHVyZShpci5Bcmd1bWVudHMgYXJndW1lbnRzKTsKCiAgLy8vIFJldHVybnMgdGhlIFtUeXBlVmFyaWFibGVFbnRpdHldIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHR5cGUgcGFyYW1ldGVyCiAgLy8vIFtub2RlXS4KICBUeXBlVmFyaWFibGVFbnRpdHkgZ2V0VHlwZVZhcmlhYmxlKGlyLlR5cGVQYXJhbWV0ZXIgbm9kZSk7CgogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50czsKICBEaWFnbm9zdGljUmVwb3J0ZXIgZ2V0IHJlcG9ydGVyOwogIEludGVyZmFjZVR5cGUgZ2V0VGhpc1R5cGUoSW5kZXhlZENsYXNzIGNscyk7CiAgSW50ZXJmYWNlVHlwZSBnZXRTdXBlclR5cGUoSW5kZXhlZENsYXNzIGNscyk7CiAgT3JkZXJlZFR5cGVTZXQgZ2V0T3JkZXJlZFR5cGVTZXQoSW5kZXhlZENsYXNzIGNscyk7CiAgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gZ2V0SW50ZXJmYWNlcyhJbmRleGVkQ2xhc3MgY2xzKTsKICBJbnRlcmZhY2VUeXBlIGFzSW5zdGFuY2VPZihJbnRlcmZhY2VUeXBlIHR5cGUsIENsYXNzRW50aXR5IGNscyk7CiAgRGFydFR5cGUgc3Vic3RCeUNvbnRleHQoRGFydFR5cGUgdHlwZSwgSW50ZXJmYWNlVHlwZSBjb250ZXh0KTsKICBEYXJ0VHlwZSBnZXRDYWxsVHlwZShJbnRlcmZhY2VUeXBlIHR5cGUpOwogIGludCBnZXRIaWVyYXJjaHlEZXB0aChJbmRleGVkQ2xhc3MgY2xzKTsKICBEYXJ0VHlwZSBnZXRUeXBlVmFyaWFibGVCb3VuZChJbmRleGVkVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSk7Cn0KSQBOTjwBKDQvNQEZIiQjISIqAUQETzIgNioBRSoBSi8BURo0AUMnAUMnATA2AVEvAUsXJTYBRDoBSw49ASUjLzA2O0NBLCtDAgEocGFja2FnZTpjb21waWxlci9zcmMvaXIvZWxlbWVudF9tYXAuZGFydDJzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9vcmRlcmVkX3R5cGVzZXQuZGFydKd+Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgb3JkZXJlZF90eXBlc2V0OwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcKICAgIHNob3cgTGluaywgTGlua0J1aWxkZXIsIExpbmtFbnRyeTsKCmltcG9ydCAnY29tbW9uLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJ2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJ3NlcmlhbGl6YXRpb24vc2VyaWFsaXphdGlvbi5kYXJ0JzsKCi8vLyBBbiBvcmRlcmVkIHNldCBvZiB0aGUgc3VwZXJ0eXBlcyBvZiBhIGNsYXNzLiBUaGUgc3VwZXJ0eXBlcyBvZiBhIGNsYXNzIGFyZQovLy8gb3JkZXJlZCBieSBkZWNyZWFzaW5nIGhpZXJhcmNoeSBkZXB0aCBhbmQgYnkgdGhlIG9yZGVyIHRoZXkgYXJlIGV4dGVuZGVkLAovLy8gbWl4ZWQgaW4sIG9yIGltcGxlbWVudGVkLgovLy8KLy8vIEZvciB0aGVzZSBjbGFzc2VzCi8vLwovLy8gICAgIGNsYXNzIEEge30gLy8gRGVwdGggPSAxLgovLy8gICAgIGNsYXNzIEIge30gLy8gRGVwdGggPSAxLgovLy8gICAgIGNsYXNzIEMgZXh0ZW5kcyBCIGltcGxlbWVudHMgQSB7fSAvLyBEZXB0aCAyLgovLy8KLy8vIHRoZSBvcmRlcmVkIHN1cGVydHlwZXMgYXJlCi8vLwovLy8gICAgIEE6IFtBLCBPYmplY3RdCi8vLyAgICAgQjogW0IsIE9iamVjdF0KLy8vICAgICBDOiBbQywgQiwgQSwgT2JqZWN0XQpjbGFzcyBPcmRlcmVkVHlwZVNldCB7CiAgLy8vIFRhZyB1c2VkIGZvciBpZGVudGlmeWluZyBzZXJpYWxpemVkIFtPcmRlcmVkVHlwZVNldF0gb2JqZWN0cyBpbiBhCiAgLy8vIGRlYnVnZ2luZyBkYXRhIHN0cmVhbS4KICBzdGF0aWMgY29uc3QgU3RyaW5nIHRhZyA9ICdvcmRlcmVkLXR5cGUtc2V0JzsKCiAgZmluYWwgTGlzdDxMaW5rPEludGVyZmFjZVR5cGU+PiBfbGV2ZWxzOwogIGZpbmFsIExpbms8SW50ZXJmYWNlVHlwZT4gdHlwZXM7CgogIE9yZGVyZWRUeXBlU2V0LmludGVybmFsKHRoaXMuX2xldmVscywgdGhpcy50eXBlcyk7CgogIC8vLyBEZXNlcmlhbGl6ZXMgYSBbT3JkZXJlZFR5cGVTZXRdIG9iamVjdCBmcm9tIFtzb3VyY2VdLgogIGZhY3RvcnkgT3JkZXJlZFR5cGVTZXQucmVhZEZyb21EYXRhU291cmNlKERhdGFTb3VyY2Ugc291cmNlKSB7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBNYWtlIHRoZSBkZXNlcmlhbGl6ZWQgdHlwZSBzZXRzIHNoYXJlIHRoZWlyCiAgICAvLyBpbnRlcm5hbCBsaW5rcyBsaWtlIHRoZSBvcmlnaW5hbCB0eXBlIHNldHMgZG8/CiAgICBzb3VyY2UuYmVnaW4odGFnKTsKICAgIGludCB0eXBlc0NvdW50ID0gc291cmNlLnJlYWRJbnQoKTsKICAgIExpbmtCdWlsZGVyPEludGVyZmFjZVR5cGU+IHR5cGVMaW5rQnVpbGRlciA9CiAgICAgICAgbmV3IExpbmtCdWlsZGVyPEludGVyZmFjZVR5cGU+KCk7CiAgICBMaXN0PExpbms8SW50ZXJmYWNlVHlwZT4+IGxpbmtzID0gW107CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHR5cGVzQ291bnQ7IGkrKykgewogICAgICBsaW5rcy5hZGQodHlwZUxpbmtCdWlsZGVyLmFkZExhc3Qoc291cmNlLnJlYWREYXJ0VHlwZSgpKSk7CiAgICB9CiAgICBMaW5rPEludGVyZmFjZVR5cGU+IHR5cGVzID0KICAgICAgICB0eXBlTGlua0J1aWxkZXIudG9MaW5rKGNvbnN0IExpbms8SW50ZXJmYWNlVHlwZT4oKSk7CiAgICBsaW5rcy5hZGQoY29uc3QgTGluazxJbnRlcmZhY2VUeXBlPigpKTsKCiAgICBpbnQgbGV2ZWxDb3VudCA9IHNvdXJjZS5yZWFkSW50KCk7CiAgICBMaXN0PExpbms8SW50ZXJmYWNlVHlwZT4+IGxldmVscyA9CiAgICAgICAgbmV3IExpc3Q8TGluazxJbnRlcmZhY2VUeXBlPj4obGV2ZWxDb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsQ291bnQ7IGkrKykgewogICAgICBsZXZlbHNbaV0gPSBsaW5rc1tzb3VyY2UucmVhZEludCgpXTsKICAgIH0KICAgIHNvdXJjZS5lbmQodGFnKTsKICAgIHJldHVybiBuZXcgT3JkZXJlZFR5cGVTZXQuaW50ZXJuYWwobGV2ZWxzLCB0eXBlcyk7CiAgfQoKICAvLy8gU2VyaWFsaXplcyB0aGlzIFtPcmRlcmVkVHlwZVNldF0gdG8gW3NpbmtdLgogIHZvaWQgd3JpdGVUb0RhdGFTaW5rKERhdGFTaW5rIHNpbmspIHsKICAgIHNpbmsuYmVnaW4odGFnKTsKICAgIExpc3Q8SW50ZXJmYWNlVHlwZT4gdHlwZUxpc3QgPSB0eXBlcy50b0xpc3QoKTsKICAgIHNpbmsud3JpdGVJbnQodHlwZUxpc3QubGVuZ3RoKTsKICAgIGZvciAoSW50ZXJmYWNlVHlwZSB0eXBlIGluIHR5cGVMaXN0KSB7CiAgICAgIHNpbmsud3JpdGVEYXJ0VHlwZSh0eXBlKTsKICAgIH0KICAgIExpc3Q8aW50PiBsZXZlbExpc3QgPSBbXTsKICAgIExpbms8SW50ZXJmYWNlVHlwZT4gbGluayA9IHR5cGVzOwogICAgd2hpbGUgKGxpbmsgIT0gbnVsbCkgewogICAgICBpbnQgaW5kZXggPSBfbGV2ZWxzLmluZGV4T2YobGluayk7CiAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgIGxldmVsTGlzdC5hZGQoaW5kZXgpOwogICAgICB9CiAgICAgIGxpbmsgPSBsaW5rLnRhaWw7CiAgICB9CiAgICBzaW5rLndyaXRlSW50KGxldmVsTGlzdC5sZW5ndGgpOwogICAgZm9yIChpbnQgbGV2ZWwgaW4gbGV2ZWxMaXN0KSB7CiAgICAgIHNpbmsud3JpdGVJbnQobGV2ZWwpOwogICAgfQogICAgc2luay5lbmQodGFnKTsKICB9CgogIGZhY3RvcnkgT3JkZXJlZFR5cGVTZXQuc2luZ2xldG9uKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgTGluazxJbnRlcmZhY2VUeXBlPiB0eXBlcyA9CiAgICAgICAgbmV3IExpbmtFbnRyeTxJbnRlcmZhY2VUeXBlPih0eXBlLCBjb25zdCBMaW5rPEludGVyZmFjZVR5cGU+KCkpOwogICAgTGlzdDxMaW5rPEludGVyZmFjZVR5cGU+PiBsaXN0ID0gbmV3IExpc3Q8TGluazxJbnRlcmZhY2VUeXBlPj4oMSk7CiAgICBsaXN0WzBdID0gdHlwZXM7CiAgICByZXR1cm4gbmV3IE9yZGVyZWRUeXBlU2V0LmludGVybmFsKGxpc3QsIHR5cGVzKTsKICB9CgogIC8vLyBDcmVhdGVzIGEgbmV3IFtPcmRlcmVkVHlwZVNldF0gZm9yIFt0eXBlXSB3aGVuIGl0IGRpcmVjdGx5IGV4dGVuZHMgdGhlCiAgLy8vIGNsYXNzIHdoaWNoIHRoaXMgc2V0IHJlcHJlc2VudHMuIFRoaXMgaXMgZm9yIGluc3RhbmNlIHVzZWQgdG8gY3JlYXRlIHRoZQogIC8vLyB0eXBlIHNldCBmb3IgW0Nsb3N1cmVDbGFzc0VsZW1lbnRdIHdoaWNoIGV4dGVuZHMgW0Nsb3N1cmVdLgogIE9yZGVyZWRUeXBlU2V0IGV4dGVuZENsYXNzKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgYXNzZXJ0KAogICAgICAgIHR5cGVzLmhlYWQudHJlYXRBc1JhdywKICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgdHlwZS5lbGVtZW50LAogICAgICAgICAgICAnQ2Fubm90IGV4dGVuZCBnZW5lcmljIGNsYXNzICR7dHlwZXMuaGVhZH0gdXNpbmcgJwogICAgICAgICAgICAnT3JkZXJlZFR5cGVTZXQuZXh0ZW5kQ2xhc3MnKSk7CiAgICBMaW5rPEludGVyZmFjZVR5cGU+IGV4dGVuZGVkVHlwZXMgPQogICAgICAgIG5ldyBMaW5rRW50cnk8SW50ZXJmYWNlVHlwZT4odHlwZSwgdHlwZXMpOwogICAgTGlzdDxMaW5rPEludGVyZmFjZVR5cGU+PiBsaXN0ID0gbmV3IExpc3Q8TGluazxJbnRlcmZhY2VUeXBlPj4obGV2ZWxzICsgMSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxldmVsczsgaSsrKSB7CiAgICAgIGxpc3RbaV0gPSBfbGV2ZWxzW2ldOwogICAgfQogICAgbGlzdFtsZXZlbHNdID0gZXh0ZW5kZWRUeXBlczsKICAgIHJldHVybiBuZXcgT3JkZXJlZFR5cGVTZXQuaW50ZXJuYWwobGlzdCwgZXh0ZW5kZWRUeXBlcyk7CiAgfQoKICBMaW5rPEludGVyZmFjZVR5cGU+IGdldCBzdXBlcnR5cGVzID0+IHR5cGVzLnRhaWw7CgogIGludCBnZXQgbGV2ZWxzID0+IF9sZXZlbHMubGVuZ3RoOwoKICBpbnQgZ2V0IG1heERlcHRoID0+IGxldmVscyAtIDE7CgogIExpbms8SW50ZXJmYWNlVHlwZT4gb3BlcmF0b3IgW10oaW50IGluZGV4KSB7CiAgICBpZiAoaW5kZXggPCBsZXZlbHMpIHsKICAgICAgcmV0dXJuIF9sZXZlbHNbaW5kZXhdOwogICAgfQogICAgcmV0dXJuIGNvbnN0IExpbms8SW50ZXJmYWNlVHlwZT4oKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBvZmZzZXRzIGludG8gW3R5cGVzXSBhdCB3aGljaCBlYWNoIGxldmVsIGJlZ2lucy4KICBMaXN0PGludD4gZ2V0IGxldmVsT2Zmc2V0cyB7CiAgICBMaXN0PGludD4gb2Zmc2V0cyA9IG5ldyBMaXN0LmZpbGxlZChsZXZlbHMsIC0xKTsKICAgIGludCBvZmZzZXQgPSAwOwogICAgTGluazxJbnRlcmZhY2VUeXBlPiBwb2ludGVyID0gdHlwZXM7CiAgICBmb3IgKGludCBkZXB0aCA9IG1heERlcHRoOyBkZXB0aCA+PSAwOyBkZXB0aC0tKSB7CiAgICAgIHdoaWxlICghaWRlbnRpY2FsKHBvaW50ZXIsIF9sZXZlbHNbZGVwdGhdKSkgewogICAgICAgIHBvaW50ZXIgPSBwb2ludGVyLnRhaWw7CiAgICAgICAgb2Zmc2V0Kys7CiAgICAgIH0KICAgICAgb2Zmc2V0c1tkZXB0aF0gPSBvZmZzZXQ7CiAgICB9CiAgICByZXR1cm4gb2Zmc2V0czsKICB9CgogIHZvaWQgZm9yRWFjaChpbnQgbGV2ZWwsIHZvaWQgZihJbnRlcmZhY2VUeXBlIHR5cGUpKSB7CiAgICBpZiAobGV2ZWwgPCBsZXZlbHMpIHsKICAgICAgTGluazxJbnRlcmZhY2VUeXBlPiBwb2ludGVyID0gX2xldmVsc1tsZXZlbF07CiAgICAgIExpbms8SW50ZXJmYWNlVHlwZT4gZW5kID0KICAgICAgICAgIGxldmVsID4gMCA/IF9sZXZlbHNbbGV2ZWwgLSAxXSA6IGNvbnN0IExpbms8SW50ZXJmYWNlVHlwZT4oKTsKICAgICAgLy8gVE9ETyhoZXQpOiBjaGVja2luZyBgaXNOb3RFbXB0eWAgc2hvdWxkIGJlIHVubmVjZXNzYXJ5LCByZW1vdmUgd2hlbgogICAgICAvLyBjb25zdGFudHMgYXJlIHByb3Blcmx5IGNhbm9uaWNhbGl6ZWQKICAgICAgd2hpbGUgKHBvaW50ZXIuaXNOb3RFbXB0eSAmJiAhaWRlbnRpY2FsKHBvaW50ZXIsIGVuZCkpIHsKICAgICAgICBmKHBvaW50ZXIuaGVhZCk7CiAgICAgICAgcG9pbnRlciA9IHBvaW50ZXIudGFpbDsKICAgICAgfQogICAgfQogIH0KCiAgSW50ZXJmYWNlVHlwZSBhc0luc3RhbmNlT2YoQ2xhc3NFbnRpdHkgY2xzLCBpbnQgaGllcmFyY2h5RGVwdGgpIHsKICAgIGludCBsZXZlbCA9IGhpZXJhcmNoeURlcHRoOwogICAgaWYgKGxldmVsIDwgbGV2ZWxzKSB7CiAgICAgIExpbms8SW50ZXJmYWNlVHlwZT4gcG9pbnRlciA9IF9sZXZlbHNbbGV2ZWxdOwogICAgICBMaW5rPEludGVyZmFjZVR5cGU+IGVuZCA9CiAgICAgICAgICBsZXZlbCA+IDAgPyBfbGV2ZWxzW2xldmVsIC0gMV0gOiBjb25zdCBMaW5rPEludGVyZmFjZVR5cGU+KCk7CiAgICAgIC8vIFRPRE8oaGV0KTogY2hlY2tpbmcgYGlzTm90RW1wdHlgIHNob3VsZCBiZSB1bm5lY2Vzc2FyeSwgcmVtb3ZlIHdoZW4KICAgICAgLy8gY29uc3RhbnRzIGFyZSBwcm9wZXJseSBjYW5vbmljYWxpemVkCiAgICAgIHdoaWxlIChwb2ludGVyLmlzTm90RW1wdHkgJiYgIWlkZW50aWNhbChwb2ludGVyLCBlbmQpKSB7CiAgICAgICAgaWYgKGNscyA9PSBwb2ludGVyLmhlYWQuZWxlbWVudCkgewogICAgICAgICAgcmV0dXJuIHBvaW50ZXIuaGVhZDsKICAgICAgICB9CiAgICAgICAgcG9pbnRlciA9IHBvaW50ZXIudGFpbDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiB0eXBlcy50b1N0cmluZygpOwp9CgovLy8gQnVpbGRlciBmb3IgY3JlYXRpb24gYW4gb3JkZXJlZCBzZXQgb2YgdGhlIHN1cGVydHlwZXMgb2YgYSBjbGFzcy4gVGhlCi8vLyBzdXBlcnR5cGVzIGFyZSBvcmRlcmVkIGJ5IGRlY3JlYXNpbmcgaGllcmFyY2h5IGRlcHRoIGFuZCBieSB0aGUgb3JkZXIgdGhleQovLy8gYXJlIGV4dGVuZGVkLCBtaXhlZCBpbiwgb3IgaW1wbGVtZW50ZWQuCi8vLwovLy8gRm9yIHRoZXNlIGNsYXNzZXMKLy8vCi8vLyAgICAgY2xhc3MgQSB7fSAvLyBEZXB0aCA9IDEuCi8vLyAgICAgY2xhc3MgQiB7fSAvLyBEZXB0aCA9IDEuCi8vLyAgICAgY2xhc3MgQyBleHRlbmRzIEIgaW1wbGVtZW50cyBBIHt9IC8vIERlcHRoIDIuCi8vLwovLy8gdGhlIG9yZGVyZWQgc3VwZXJ0eXBlcyBhcmUKLy8vCi8vLyAgICAgQTogW0EsIE9iamVjdF0KLy8vICAgICBCOiBbQiwgT2JqZWN0XQovLy8gICAgIEM6IFtDLCBCLCBBLCBPYmplY3RdCmFic3RyYWN0IGNsYXNzIE9yZGVyZWRUeXBlU2V0QnVpbGRlciB7CiAgT3JkZXJlZFR5cGVTZXQgY3JlYXRlT3JkZXJlZFR5cGVTZXQoCiAgICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlLCBMaW5rPERhcnRUeXBlPiBpbnRlcmZhY2VzKTsKfQoKYWJzdHJhY3QgY2xhc3MgT3JkZXJlZFR5cGVTZXRCdWlsZGVyQmFzZSBpbXBsZW1lbnRzIE9yZGVyZWRUeXBlU2V0QnVpbGRlciB7CiAgTWFwPGludCwgTGlua0VudHJ5PEludGVyZmFjZVR5cGU+PiBtYXAgPQogICAgICBuZXcgTWFwPGludCwgTGlua0VudHJ5PEludGVyZmFjZVR5cGU+PigpOwogIGludCBtYXhEZXB0aCA9IC0xOwoKICBmaW5hbCBDbGFzc0VudGl0eSBjbHM7CgogIE9yZGVyZWRUeXBlU2V0QnVpbGRlckJhc2UodGhpcy5jbHMpOwoKICBJbnRlcmZhY2VUeXBlIGdldFRoaXNUeXBlKGNvdmFyaWFudCBDbGFzc0VudGl0eSBjbHMpOwogIEludGVyZmFjZVR5cGUgc3Vic3RCeUNvbnRleHQoCiAgICAgIGNvdmFyaWFudCBJbnRlcmZhY2VUeXBlIHR5cGUsIGNvdmFyaWFudCBJbnRlcmZhY2VUeXBlIGNvbnRleHQpOwogIGludCBnZXRIaWVyYXJjaHlEZXB0aChjb3ZhcmlhbnQgQ2xhc3NFbnRpdHkgY2xzKTsKICBPcmRlcmVkVHlwZVNldCBnZXRPcmRlcmVkVHlwZVNldChjb3ZhcmlhbnQgQ2xhc3NFbnRpdHkgY2xzKTsKCiAgQG92ZXJyaWRlCiAgT3JkZXJlZFR5cGVTZXQgY3JlYXRlT3JkZXJlZFR5cGVTZXQoCiAgICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlLCBMaW5rPERhcnRUeXBlPiBpbnRlcmZhY2VzKSB7CiAgICAvLyBUT0RPKDE1Mjk2KTogQ29sbGFwc2UgdGhlc2UgaXRlcmF0aW9ucyB0byBvbmUgd2hlbiB0aGUgb3JkZXIgaXMgbm90CiAgICAvLyBuZWVkZWQuCiAgICBhZGQoc3VwZXJ0eXBlKTsKICAgIGZvciAoTGluazxEYXJ0VHlwZT4gbGluayA9IGludGVyZmFjZXM7ICFsaW5rLmlzRW1wdHk7IGxpbmsgPSBsaW5rLnRhaWwpIHsKICAgICAgYWRkKGxpbmsuaGVhZCk7CiAgICB9CgogICAgX2FkZEFsbFN1cGVydHlwZXMoc3VwZXJ0eXBlKTsKICAgIGZvciAoTGluazxEYXJ0VHlwZT4gbGluayA9IGludGVyZmFjZXM7ICFsaW5rLmlzRW1wdHk7IGxpbmsgPSBsaW5rLnRhaWwpIHsKICAgICAgX2FkZEFsbFN1cGVydHlwZXMobGluay5oZWFkKTsKICAgIH0KICAgIGFkZChnZXRUaGlzVHlwZShjbHMpKTsKICAgIHJldHVybiB0b1R5cGVTZXQoKTsKICB9CgogIC8vLyBBZGRzIFt0eXBlXSBhbmQgYWxsIHN1cGVydHlwZXMgb2YgW3R5cGVdIHRvIFthbGxTdXBlcnR5cGVzXSB3aGlsZQogIC8vLyBzdWJzdGl0dXRpbmcgdHlwZSB2YXJpYWJsZXMuCiAgdm9pZCBfYWRkQWxsU3VwZXJ0eXBlcyhJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgIENsYXNzRW50aXR5IGNsYXNzRWxlbWVudCA9IHR5cGUuZWxlbWVudDsKICAgIExpbms8SW50ZXJmYWNlVHlwZT4gc3VwZXJ0eXBlcyA9IGdldE9yZGVyZWRUeXBlU2V0KGNsYXNzRWxlbWVudCkuc3VwZXJ0eXBlczsKICAgIGFzc2VydCgKICAgICAgICBzdXBlcnR5cGVzICE9IG51bGwsCiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGNscywKICAgICAgICAgICAgIlN1cGVydHlwZXMgbm90IGNvbXB1dGVkIG9uICRjbGFzc0VsZW1lbnQgIgogICAgICAgICAgICAiZHVyaW5nIHJlc29sdXRpb24gb2YgJGNscyIpKTsKICAgIHdoaWxlICghc3VwZXJ0eXBlcy5pc0VtcHR5KSB7CiAgICAgIEludGVyZmFjZVR5cGUgc3VwZXJ0eXBlID0gc3VwZXJ0eXBlcy5oZWFkOwogICAgICBhZGQoc3Vic3RCeUNvbnRleHQoc3VwZXJ0eXBlLCB0eXBlKSk7CiAgICAgIHN1cGVydHlwZXMgPSBzdXBlcnR5cGVzLnRhaWw7CiAgICB9CiAgfQoKICB2b2lkIGFkZChJbnRlcmZhY2VUeXBlIHR5cGUpIHsKICAgIGlmICh0eXBlLmVsZW1lbnQgPT0gY2xzKSB7CiAgICAgIF9hZGRBdERlcHRoKHR5cGUsIG1heERlcHRoICsgMSk7CiAgICB9IGVsc2UgewogICAgICBfYWRkQXREZXB0aCh0eXBlLCBnZXRIaWVyYXJjaHlEZXB0aCh0eXBlLmVsZW1lbnQpKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZEF0RGVwdGgoSW50ZXJmYWNlVHlwZSB0eXBlLCBpbnQgZGVwdGgpIHsKICAgIExpbmtFbnRyeTxJbnRlcmZhY2VUeXBlPiBwcmV2ID0gbnVsbDsKICAgIExpbmtFbnRyeTxJbnRlcmZhY2VUeXBlPiBsaW5rID0gbWFwW2RlcHRoXTsKICAgIHdoaWxlIChsaW5rICE9IG51bGwpIHsKICAgICAgSW50ZXJmYWNlVHlwZSBleGlzdGluZ1R5cGUgPSBsaW5rLmhlYWQ7CiAgICAgIGlmIChleGlzdGluZ1R5cGUgPT0gdHlwZSkgcmV0dXJuOwogICAgICBpZiAoZXhpc3RpbmdUeXBlLmVsZW1lbnQgPT0gdHlwZS5lbGVtZW50KSB7CiAgICAgICAgYXNzZXJ0KGZhbHNlLCBmYWlsZWRBdChjbHMsICdJbnZhbGlkIG9yZGVyZWQgdHlwZXNldCBmb3IgJGNscycpKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgcHJldiA9IGxpbms7CiAgICAgIGxpbmsgPSBsaW5rLnRhaWw7CiAgICB9CiAgICBMaW5rRW50cnk8SW50ZXJmYWNlVHlwZT4gbmV4dCA9IG5ldyBMaW5rRW50cnk8SW50ZXJmYWNlVHlwZT4odHlwZSk7CiAgICBuZXh0LnRhaWwgPSBudWxsOwogICAgaWYgKHByZXYgPT0gbnVsbCkgewogICAgICBtYXBbZGVwdGhdID0gbmV4dDsKICAgIH0gZWxzZSB7CiAgICAgIHByZXYudGFpbCA9IG5leHQ7CiAgICB9CiAgICBpZiAoZGVwdGggPiBtYXhEZXB0aCkgewogICAgICBtYXhEZXB0aCA9IGRlcHRoOwogICAgfQogIH0KCiAgT3JkZXJlZFR5cGVTZXQgdG9UeXBlU2V0KCkgewogICAgTGlzdDxMaW5rPEludGVyZmFjZVR5cGU+PiBsZXZlbHMgPQogICAgICAgIG5ldyBMaXN0PExpbms8SW50ZXJmYWNlVHlwZT4+KG1heERlcHRoICsgMSk7CiAgICBpZiAobWF4RGVwdGggPCAwKSB7CiAgICAgIHJldHVybiBuZXcgT3JkZXJlZFR5cGVTZXQuaW50ZXJuYWwobGV2ZWxzLCBjb25zdCBMaW5rPEludGVyZmFjZVR5cGU+KCkpOwogICAgfQogICAgTGluazxJbnRlcmZhY2VUeXBlPiBuZXh0ID0gY29uc3QgTGluazxJbnRlcmZhY2VUeXBlPigpOwogICAgZm9yIChpbnQgZGVwdGggPSAwOyBkZXB0aCA8PSBtYXhEZXB0aDsgZGVwdGgrKykgewogICAgICBMaW5rRW50cnk8SW50ZXJmYWNlVHlwZT4gZmlyc3QgPSBtYXBbZGVwdGhdOwogICAgICBpZiAoZmlyc3QgPT0gbnVsbCkgewogICAgICAgIGxldmVsc1tkZXB0aF0gPSBuZXh0OwogICAgICB9IGVsc2UgewogICAgICAgIGxldmVsc1tkZXB0aF0gPSBmaXJzdDsKICAgICAgICBMaW5rRW50cnk8SW50ZXJmYWNlVHlwZT4gbGFzdCA9IGZpcnN0OwogICAgICAgIHdoaWxlIChsYXN0LnRhaWwgIT0gbnVsbCkgewogICAgICAgICAgbGFzdCA9IGxhc3QudGFpbDsKICAgICAgICB9CiAgICAgICAgbGFzdC50YWlsID0gbmV4dDsKICAgICAgICBuZXh0ID0gZmlyc3Q7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcgT3JkZXJlZFR5cGVTZXQuaW50ZXJuYWwobGV2ZWxzLCBsZXZlbHMubGFzdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKGludCBkZXB0aCA9IDA7IGRlcHRoIDw9IG1heERlcHRoOyBkZXB0aCsrKSB7CiAgICAgIHNiLndyaXRlKCckZGVwdGg6ICcpOwogICAgICBMaW5rRW50cnk8SW50ZXJmYWNlVHlwZT4gZmlyc3QgPSBtYXBbZGVwdGhdOwogICAgICBmaXJzdC5wcmludE9uKHNiLCAiLCAiKTsKICAgICAgc2Iud3JpdGUoJ1xuJyk7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KgUMATk48ARkBOScBFiEeKwFPTh4EFgQhITYEHwQXFx0XSB0wASsjATUBPEFINhcnMSoqK0EGID0sAScnMysrBhU3BAEyKBUzJCsgBh4mGykZHggYBiUjHAYTBAE5IElHFTUEAU1PQjMMHxIaPywoM1AnHAYiPQQBNAEkASIBLxodBigEAUMfNRQpNjQgEggfBhQEATgaNCBITS4/GSAIBgQBRCAaNCBITS4/Kx8KIAgGEQQBDCkCAUpPLAQWBCEhNgQfBBcXHScnOwIBTCswFQEZAScBOCBGND8BDCc8Sw8UThYGASJOJAYbGAQBSCMvLVEMHBIROCsiMSwkBgQBIR8nDToGBAE0KjAbLigyShAIExgGSBYYGQ0YBhwYBgQBHyc1GE8GPDYzGx4PHy8kHAoaFggGPQQBDBYqNhwzHxYGGgQCASlwYWNrYWdlOmNvbXBpbGVyL3NyYy9vcmRlcmVkX3R5cGVzZXQuZGFydDlzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9jb21waWxlX3RpbWVfY29uc3RhbnRzLmRhcnSENC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQyanMuY29tcGlsZV90aW1lX2NvbnN0YW50X2V2YWx1YXRvcjsKCmltcG9ydCAnY29tbW9uL3Rhc2tzLmRhcnQnIHNob3cgQ29tcGlsZXJUYXNrLCBNZWFzdXJlcjsKaW1wb3J0ICdlbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKCi8vLyBBIFtDb25zdGFudEVudmlyb25tZW50XSBwcm92aWRlcyBhY2Nlc3MgZm9yIGNvbnN0YW50cyBjb21waWxlZCBmb3IgdmFyaWFibGUKLy8vIGluaXRpYWxpemVycy4KYWJzdHJhY3QgY2xhc3MgQ29uc3RhbnRFbnZpcm9ubWVudCB7fQoKLy8vIEEgW0JhY2tlbmRDb25zdGFudEVudmlyb25tZW50XSBwcm92aWRlcyBhY2Nlc3MgdG8gY29uc3RhbnRzIG5lZWRlZCBmb3IKLy8vIGJhY2tlbmQgaW1wbGVtZW50YXRpb24uCmFic3RyYWN0IGNsYXNzIEJhY2tlbmRDb25zdGFudEVudmlyb25tZW50IGV4dGVuZHMgQ29uc3RhbnRFbnZpcm9ubWVudCB7CiAgLy8vIFJlZ2lzdGVyIHRoYXQgW2VsZW1lbnRdIG5lZWRzIGxhenkgaW5pdGlhbGl6YXRpb24uCiAgdm9pZCByZWdpc3RlckxhenlTdGF0aWMoRmllbGRFbnRpdHkgZWxlbWVudCk7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHRoZSB0YXNrIHRoYXQgY29tcGlsZXMgdGhlIGNvbnN0YW50IGVudmlyb25tZW50cyBmb3IgdGhlCi8vLyBmcm9udGVuZCBhbmQgYmFja2VuZCBpbnRlcnByZXRhdGlvbiBvZiBjb21waWxlLXRpbWUgY29uc3RhbnRzLgphYnN0cmFjdCBjbGFzcyBDb25zdGFudENvbXBpbGVyVGFzayBleHRlbmRzIENvbXBpbGVyVGFzawogICAgaW1wbGVtZW50cyBDb25zdGFudEVudmlyb25tZW50IHsKICBDb25zdGFudENvbXBpbGVyVGFzayhNZWFzdXJlciBtZWFzdXJlcikgOiBzdXBlcihtZWFzdXJlcik7Cn0KHABOTjwBMQE4IQFQEiYBSxxIOTACAUtDOSU9AgEwcGFja2FnZTpjb21waWxlci9zcmMvY29tcGlsZV90aW1lX2NvbnN0YW50cy5kYXJ0OHNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL2NhY2hlZF9zdGF0aWNfdHlwZS5kYXJ0ilMvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9hc3QuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NvcmVfdHlwZXMuZGFydCcgYXMgaXI7CmltcG9ydCAncGFja2FnZTprZXJuZWwvdHlwZV9hbGdlYnJhLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CmltcG9ydCAnc3RhdGljX3R5cGVfYmFzZS5kYXJ0JzsKaW1wb3J0ICdzdGF0aWNfdHlwZV9jYWNoZS5kYXJ0JzsKaW1wb3J0ICdzdGF0aWNfdHlwZV9wcm92aWRlci5kYXJ0JzsKCi8vLyBDbGFzcyB0aGF0IHByb3ZpZGVzIHRoZSBzdGF0aWMgdHlwZSBvZiBleHByZXNzaW9uIHVzaW5nIHRoZSB2aXNpdG9yIHBhdHRlcm4KLy8vIGFuZCBhIHByZWNvbXB1dGVkIGNhY2hlIGZvciBjb21wbGV4IGV4cHJlc3Npb24gdHlwZS4KY2xhc3MgQ2FjaGVkU3RhdGljVHlwZSBleHRlbmRzIFN0YXRpY1R5cGVCYXNlIGltcGxlbWVudHMgU3RhdGljVHlwZVByb3ZpZGVyIHsKICBmaW5hbCBTdGF0aWNUeXBlQ2FjaGUgX2NhY2hlOwoKICBAb3ZlcnJpZGUKICBmaW5hbCBUaGlzSW50ZXJmYWNlVHlwZSB0aGlzVHlwZTsKCiAgQ2FjaGVkU3RhdGljVHlwZSgKICAgICAgaXIuVHlwZUVudmlyb25tZW50IHR5cGVFbnZpcm9ubWVudCwgdGhpcy5fY2FjaGUsIHRoaXMudGhpc1R5cGUpCiAgICAgIDogc3VwZXIodHlwZUVudmlyb25tZW50KTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgZ2V0U3RhdGljVHlwZShpci5FeHByZXNzaW9uIG5vZGUpIHsKICAgIGlyLkRhcnRUeXBlIHR5cGUgPSBub2RlLmFjY2VwdCh0aGlzKTsKICAgIGFzc2VydCh0eXBlICE9IG51bGwsICJObyBzdGF0aWMgdHlwZSBmb3VuZCBmb3IgJHtub2RlLnJ1bnRpbWVUeXBlfS4iKTsKICAgIHJldHVybiB0eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgZ2V0Rm9ySW5JdGVyYXRvclR5cGUoaXIuRm9ySW5TdGF0ZW1lbnQgbm9kZSkgewogICAgaXIuRGFydFR5cGUgdHlwZSA9IF9jYWNoZS5nZXRGb3JJbkl0ZXJhdG9yVHlwZShub2RlKTsKICAgIGFzc2VydCh0eXBlICE9IG51bGwsICJObyBmb3ItaW4gaXRlcmF0b3IgdHlwZSBmb3VuZCBmb3IgJHtub2RlfS4iKTsKICAgIHJldHVybiB0eXBlOwogIH0KCiAgaXIuRGFydFR5cGUgX2dldFN0YXRpY1R5cGUoaXIuRXhwcmVzc2lvbiBub2RlKSB7CiAgICBpci5EYXJ0VHlwZSB0eXBlID0gX2NhY2hlW25vZGVdOwogICAgYXNzZXJ0KHR5cGUgIT0gbnVsbCwgIk5vIHN0YXRpYyB0eXBlIGNhY2hlZCBmb3IgJHtub2RlLnJ1bnRpbWVUeXBlfS4iKTsKICAgIHJldHVybiB0eXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRWYXJpYWJsZUdldChpci5WYXJpYWJsZUdldCBub2RlKSA9PiBfZ2V0U3RhdGljVHlwZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRQcm9wZXJ0eUdldChpci5Qcm9wZXJ0eUdldCBub2RlKSA9PiBfZ2V0U3RhdGljVHlwZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXREaXJlY3RQcm9wZXJ0eUdldChpci5EaXJlY3RQcm9wZXJ0eUdldCBub2RlKSA9PgogICAgICBfZ2V0U3RhdGljVHlwZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTdXBlclByb3BlcnR5R2V0KGlyLlN1cGVyUHJvcGVydHlHZXQgbm9kZSkgPT4KICAgICAgX2dldFN0YXRpY1R5cGUobm9kZSk7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0TWV0aG9kSW52b2NhdGlvbihpci5NZXRob2RJbnZvY2F0aW9uIG5vZGUpID0+CiAgICAgIF9nZXRTdGF0aWNUeXBlKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdERpcmVjdE1ldGhvZEludm9jYXRpb24oaXIuRGlyZWN0TWV0aG9kSW52b2NhdGlvbiBub2RlKSA9PgogICAgICBfZ2V0U3RhdGljVHlwZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRTdGF0aWNJbnZvY2F0aW9uKGlyLlN0YXRpY0ludm9jYXRpb24gbm9kZSkgPT4KICAgICAgX2dldFN0YXRpY1R5cGUobm9kZSk7CgogIEBvdmVycmlkZQogIGlyLkRhcnRUeXBlIHZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uKGlyLlN1cGVyTWV0aG9kSW52b2NhdGlvbiBub2RlKSA9PgogICAgICBfZ2V0U3RhdGljVHlwZShub2RlKTsKCiAgQG92ZXJyaWRlCiAgaXIuRGFydFR5cGUgdmlzaXRDb25zdHJ1Y3Rvckludm9jYXRpb24oaXIuQ29uc3RydWN0b3JJbnZvY2F0aW9uIG5vZGUpID0+CiAgICAgIF9nZXRTdGF0aWNUeXBlKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBpci5EYXJ0VHlwZSB2aXNpdEluc3RhbnRpYXRpb24oaXIuSW5zdGFudGlhdGlvbiBub2RlKSA9PiBfZ2V0U3RhdGljVHlwZShub2RlKTsKfQpUAE5OPAEoNC8xNSAhJAFQOU4gAQwkARRGIAEMMipLEQQBDD06SBEEATMlTBEEAQxNAQxNAQxDHAEMQRwBDEEcAQxNHAEMQRwBDEscAQxLHAEMUQIBL3BhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL2NhY2hlZF9zdGF0aWNfdHlwZS5kYXJ0K3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL2RlYnVnLmRhcnSIMS8vIENvcHlyaWdodCAoYykgMjAxNiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gSGVscGVyIGZvciBkZWJ1ZyBLZXJuZWwgbm9kZXMuCgpsaWJyYXJ5IGtlcm5lbC5kZWJ1ZzsKCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3Zpc2l0b3IuZGFydCc7CgppbXBvcnQgJy4uL3V0aWwvdXRpbC5kYXJ0JyBzaG93IEluZGVudGF0aW9uLCBUYWdnaW5nOwoKY2xhc3MgRGVidWdQcmludGVyIGV4dGVuZHMgVmlzaXRvciB3aXRoIEluZGVudGF0aW9uLCBUYWdnaW5nPE5vZGU+IHsKICBAb3ZlcnJpZGUKICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CgogIHZvaWQgdmlzaXROb2RlV2l0aENoaWxkcmVuKE5vZGUgbm9kZSwgU3RyaW5nIHR5cGUsIFtNYXAgcGFyYW1zXSkgewogICAgb3Blbk5vZGUobm9kZSwgdHlwZSwgcGFyYW1zKTsKICAgIG5vZGUudmlzaXRDaGlsZHJlbih0aGlzKTsKICAgIGNsb3NlTm9kZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBkZWZhdWx0Tm9kZShOb2RlIG5vZGUpIHsKICAgIHZpc2l0Tm9kZVdpdGhDaGlsZHJlbihub2RlLCAnJHtub2RlLnJ1bnRpbWVUeXBlfScpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5hbWUoTmFtZSBub2RlKSB7CiAgICBvcGVuQW5kQ2xvc2VOb2RlKG5vZGUsICcke25vZGUucnVudGltZVR5cGV9JywKICAgICAgICB7J25hbWUnOiBub2RlLm5hbWUsICdsaWJyYXJ5Jzogbm9kZS5saWJyYXJ5Py5uYW1lfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW50TGl0ZXJhbChJbnRMaXRlcmFsIG5vZGUpIHsKICAgIG9wZW5BbmRDbG9zZU5vZGUobm9kZSwgJyR7bm9kZS5ydW50aW1lVHlwZX0nLCB7J3ZhbHVlJzogJyR7bm9kZS52YWx1ZX0nfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VmFyaWFibGVHZXQoVmFyaWFibGVHZXQgbm9kZSkgewogICAgb3BlbkFuZENsb3NlTm9kZSgKICAgICAgICBub2RlLCAnJHtub2RlLnJ1bnRpbWVUeXBlfScsIHsndmFyaWFibGUnOiAnJHtub2RlLnZhcmlhYmxlfSd9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTdGF0aWNHZXQoU3RhdGljR2V0IG5vZGUpIHsKICAgIG9wZW5BbmRDbG9zZU5vZGUobm9kZSwgJyR7bm9kZS5ydW50aW1lVHlwZX0nLCB7J3RhcmdldCc6ICcke25vZGUudGFyZ2V0fSd9KTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uKFZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSkgewogICAgb3Blbk5vZGUobm9kZSwgJyR7bm9kZS5ydW50aW1lVHlwZX0nLCB7CiAgICAgICduYW1lJzogJyR7bm9kZS5uYW1lID8/ICctLXVubmFtZWQtLSd9JywKICAgICAgJ2lzRmluYWwnOiAnJHtub2RlLmlzRmluYWx9JywKICAgICAgJ2lzQ29uc3QnOiAnJHtub2RlLmlzQ29uc3R9JywKICAgICAgJ2lzRmllbGRGb3JtYWwnOiAnJHtub2RlLmlzRmllbGRGb3JtYWx9JwogICAgfSk7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgICBjbG9zZU5vZGUoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnRlcmZhY2VUeXBlKEludGVyZmFjZVR5cGUgbm9kZSkgewogICAgb3Blbk5vZGUobm9kZSwgJyR7bm9kZS5ydW50aW1lVHlwZX0nLCB7CiAgICAgICduYW1lJzogJyR7bm9kZS5jbGFzc05vZGUubmFtZX0nLAogICAgfSk7CiAgICBub2RlLnZpc2l0Q2hpbGRyZW4odGhpcyk7CiAgICBjbG9zZU5vZGUoKTsKICB9CgogIC8vLyBQcmV0dHktcHJpbnRzIGdpdmVuIG5vZGUgdHJlZSBpbnRvIHN0cmluZy4KICBzdGF0aWMgU3RyaW5nIHByZXR0eVByaW50KE5vZGUgbm9kZSkgewogICAgdmFyIHAgPSBuZXcgRGVidWdQcmludGVyKCk7CiAgICBub2RlLmFjY2VwdChwKTsKICAgIHJldHVybiBwLnNiLnRvU3RyaW5nKCk7CiAgfQp9ClAATk48ASMBFgEiJgE2AUUMKAFFIh4RBAEMIDgEAQweMj0EAQwqTwQBDCwWSAQBDChRBAEMPCwvJCQvCB4RBAEMMCwoCB4RBAExKSAUHAQCASJwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9kZWJ1Zy5kYXJ0K3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL3R5cGVzLmRhcnSSDS8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9vcmRlcmVkX3R5cGVzZXQuZGFydCc7CmltcG9ydCAnZWxlbWVudF9tYXAuZGFydCc7CgovLy8gU3VwcG9ydCBmb3Igc3VidHlwZSBjaGVja3Mgb2Yga2VybmVsIGJhc2VkIFtEYXJ0VHlwZV1zLgpjbGFzcyBLZXJuZWxEYXJ0VHlwZXMgZXh0ZW5kcyBEYXJ0VHlwZXMgewogIGZpbmFsIElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXA7CiAgZmluYWwgU3VidHlwZVZpc2l0b3I8RGFydFR5cGU+IHN1YnR5cGVWaXNpdG9yOwogIGZpbmFsIFBvdGVudGlhbFN1YnR5cGVWaXNpdG9yPERhcnRUeXBlPiBwb3RlbnRpYWxTdWJ0eXBlVmlzaXRvcjsKCiAgS2VybmVsRGFydFR5cGVzKHRoaXMuZWxlbWVudE1hcCkKICAgICAgOiB0aGlzLnN1YnR5cGVWaXNpdG9yID0gbmV3IEtlcm5lbFN1YnR5cGVWaXNpdG9yKGVsZW1lbnRNYXApLAogICAgICAgIHRoaXMucG90ZW50aWFsU3VidHlwZVZpc2l0b3IgPQogICAgICAgICAgICBuZXcgX0tlcm5lbFBvdGVudGlhbFN1YnR5cGVWaXNpdG9yKGVsZW1lbnRNYXApOwoKICBAb3ZlcnJpZGUKICBib29sIGlzUG90ZW50aWFsU3VidHlwZShEYXJ0VHlwZSB0LCBEYXJ0VHlwZSBzLAogICAgICB7Ym9vbCBhc3N1bWVJbnN0YW50aWF0aW9uczogdHJ1ZX0pIHsKICAgIHJldHVybiBwb3RlbnRpYWxTdWJ0eXBlVmlzaXRvci5pc1BvdGVudGlhbFN1YnR5cGUodCwgcywKICAgICAgICBhc3N1bWVJbnN0YW50aWF0aW9uczogYXNzdW1lSW5zdGFudGlhdGlvbnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBpc0Fzc2lnbmFibGUoRGFydFR5cGUgdCwgRGFydFR5cGUgcykgewogICAgcmV0dXJuIGlzU3VidHlwZSh0LCBzKSB8fCBpc1N1YnR5cGUocywgdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzU3VidHlwZShEYXJ0VHlwZSB0LCBEYXJ0VHlwZSBzKSB7CiAgICByZXR1cm4gc3VidHlwZVZpc2l0b3IuaXNTdWJ0eXBlKHQsIHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRUaGlzVHlwZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldFRoaXNUeXBlKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGdldFN1cGVydHlwZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldFN1cGVyVHlwZShjbHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8SW50ZXJmYWNlVHlwZT4gZ2V0U3VwZXJ0eXBlcyhDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldE9yZGVyZWRUeXBlU2V0KGNscykuc3VwZXJ0eXBlczsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEludGVyZmFjZVR5cGU+IGdldEludGVyZmFjZXMoQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5nZXRJbnRlcmZhY2VzKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIGFzSW5zdGFuY2VPZihJbnRlcmZhY2VUeXBlIHR5cGUsIENsYXNzRW50aXR5IGNscykgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuYXNJbnN0YW5jZU9mKHR5cGUsIGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBzdWJzdEJ5Q29udGV4dChEYXJ0VHlwZSBiYXNlLCBJbnRlcmZhY2VUeXBlIGNvbnRleHQpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLnN1YnN0QnlDb250ZXh0KGJhc2UsIGNvbnRleHQpOwogIH0KCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25UeXBlIGdldENhbGxUeXBlKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgRGFydFR5cGUgY2FsbFR5cGUgPSBlbGVtZW50TWFwLmdldENhbGxUeXBlKHR5cGUpOwogICAgcmV0dXJuIGNhbGxUeXBlIGlzIEZ1bmN0aW9uVHlwZSA/IGNhbGxUeXBlIDogbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgY2hlY2tUeXBlVmFyaWFibGVCb3VuZHM8VD4oCiAgICAgIFQgY29udGV4dCwKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgTGlzdDxEYXJ0VHlwZT4gdHlwZVZhcmlhYmxlcywKICAgICAgdm9pZCBjaGVja1R5cGVWYXJpYWJsZUJvdW5kKFQgY29udGV4dCwgRGFydFR5cGUgdHlwZUFyZ3VtZW50LAogICAgICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUsIERhcnRUeXBlIGJvdW5kKSkgewogICAgYXNzZXJ0KHR5cGVWYXJpYWJsZXMubGVuZ3RoID09IHR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlQXJndW1lbnRzLmxlbmd0aDsgaW5kZXgrKykgewogICAgICBEYXJ0VHlwZSB0eXBlQXJndW1lbnQgPSB0eXBlQXJndW1lbnRzW2luZGV4XTsKICAgICAgVHlwZVZhcmlhYmxlVHlwZSB0eXBlVmFyaWFibGUgPSB0eXBlVmFyaWFibGVzW2luZGV4XTsKICAgICAgRGFydFR5cGUgYm91bmQgPSBlbGVtZW50TWFwCiAgICAgICAgICAuZ2V0VHlwZVZhcmlhYmxlQm91bmQodHlwZVZhcmlhYmxlLmVsZW1lbnQpCiAgICAgICAgICAuc3Vic3QodHlwZUFyZ3VtZW50cywgdHlwZVZhcmlhYmxlcyk7CiAgICAgIGNoZWNrVHlwZVZhcmlhYmxlQm91bmQoY29udGV4dCwgdHlwZUFyZ3VtZW50LCB0eXBlVmFyaWFibGUsIGJvdW5kKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50cyA9PiBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwp9CgpjbGFzcyBLZXJuZWxPcmRlcmVkVHlwZVNldEJ1aWxkZXIgZXh0ZW5kcyBPcmRlcmVkVHlwZVNldEJ1aWxkZXJCYXNlIHsKICBmaW5hbCBJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwOwoKICBLZXJuZWxPcmRlcmVkVHlwZVNldEJ1aWxkZXIodGhpcy5lbGVtZW50TWFwLCBDbGFzc0VudGl0eSBjbHMpIDogc3VwZXIoY2xzKTsKCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRUaGlzVHlwZShDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldFRoaXNUeXBlKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIHN1YnN0QnlDb250ZXh0KEludGVyZmFjZVR5cGUgdHlwZSwgSW50ZXJmYWNlVHlwZSBjb250ZXh0KSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5zdWJzdEJ5Q29udGV4dCh0eXBlLCBjb250ZXh0KTsKICB9CgogIEBvdmVycmlkZQogIGludCBnZXRIaWVyYXJjaHlEZXB0aChDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldEhpZXJhcmNoeURlcHRoKGNscyk7CiAgfQoKICBAb3ZlcnJpZGUKICBPcmRlcmVkVHlwZVNldCBnZXRPcmRlcmVkVHlwZVNldChDbGFzc0VudGl0eSBjbHMpIHsKICAgIHJldHVybiBlbGVtZW50TWFwLmdldE9yZGVyZWRUeXBlU2V0KGNscyk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFR5cGVSZWxhdGlvbk1peGluCiAgICBpbXBsZW1lbnRzIEFic3RyYWN0VHlwZVJlbGF0aW9uPERhcnRUeXBlPiB7CiAgSXJUb0VsZW1lbnRNYXAgZ2V0IGVsZW1lbnRNYXA7CgogIEBvdmVycmlkZQogIENvbW1vbkVsZW1lbnRzIGdldCBjb21tb25FbGVtZW50cyA9PiBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRUeXBlVmFyaWFibGVCb3VuZChUeXBlVmFyaWFibGVFbnRpdHkgZWxlbWVudCkgewogICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0VHlwZVZhcmlhYmxlQm91bmQoZWxlbWVudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdW5jdGlvblR5cGUgZ2V0Q2FsbFR5cGUoSW50ZXJmYWNlVHlwZSB0eXBlKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5nZXRDYWxsVHlwZSh0eXBlKTsKICB9CgogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgYXNJbnN0YW5jZU9mKEludGVyZmFjZVR5cGUgdHlwZSwgQ2xhc3NFbnRpdHkgY2xzKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5hc0luc3RhbmNlT2YodHlwZSwgY2xzKTsKICB9Cn0KCmNsYXNzIEtlcm5lbFN1YnR5cGVWaXNpdG9yIGV4dGVuZHMgU3VidHlwZVZpc2l0b3I8RGFydFR5cGU+CiAgICB3aXRoIEFic3RyYWN0VHlwZVJlbGF0aW9uTWl4aW4gewogIEBvdmVycmlkZQogIGZpbmFsIElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXA7CgogIEtlcm5lbFN1YnR5cGVWaXNpdG9yKHRoaXMuZWxlbWVudE1hcCk7Cn0KCmNsYXNzIF9LZXJuZWxQb3RlbnRpYWxTdWJ0eXBlVmlzaXRvciBleHRlbmRzIFBvdGVudGlhbFN1YnR5cGVWaXNpdG9yPERhcnRUeXBlPgogICAgd2l0aCBBYnN0cmFjdFR5cGVSZWxhdGlvbk1peGluIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwOwoKICBfS2VybmVsUG90ZW50aWFsU3VidHlwZVZpc2l0b3IodGhpcy5lbGVtZW50TWFwKTsKfQqAogBOTjwBIiQhIhsBPCojMUMBI0QnPAEMMis8NQQBDC4vBAEMKysEAQwvKAQBDDApBAEMOzkEAQw7KgQBDEQvBAEMQjUEAQwxNjcEAQwjESQkRDw6QTQ8IjYwSgYEAQxCAgFGIwFOAQwvKAQBDEw1BAEMKy4EAQw2LgQCASkwIQEMQgEMPjUEAQwxKQQBDEQvBAIBPCUMIwEpAgFPJQwjATMCASJwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci90eXBlcy5kYXJ0LnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2lyL3Zpc2l0b3JzLmRhcnTAAG6JLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2NsYXNzX2hpZXJhcmNoeS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfYWxnZWJyYS5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2Vudmlyb25tZW50LmRhcnQnIGFzIGlyOwoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0JyBhcyBjb25zdGFudF9zeXN0ZW07CmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0cnVjdG9ycy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydCc7CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvb3BlcmF0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL2lyL3V0aWwuZGFydCc7CgovLy8gVmlzaXRvciB0aGF0IGNvbnZlcnRzIHN0cmluZyBsaXRlcmFscyBhbmQgY29uY2F0ZW5hdGlvbnMgb2Ygc3RyaW5nIGxpdGVyYWxzCi8vLyBpbnRvIHRoZSBzdHJpbmcgdmFsdWUuCmNsYXNzIFN0cmluZ2lmaWVyIGV4dGVuZHMgaXIuRXhwcmVzc2lvblZpc2l0b3I8U3RyaW5nPiB7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHZpc2l0U3RyaW5nTGl0ZXJhbChpci5TdHJpbmdMaXRlcmFsIG5vZGUpID0+IG5vZGUudmFsdWU7CgogIEBvdmVycmlkZQogIFN0cmluZyB2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb24oaXIuU3RyaW5nQ29uY2F0ZW5hdGlvbiBub2RlKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBmb3IgKGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBub2RlLmV4cHJlc3Npb25zKSB7CiAgICAgIFN0cmluZyB2YWx1ZSA9IGV4cHJlc3Npb24uYWNjZXB0KHRoaXMpOwogICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIHNiLndyaXRlKHZhbHVlKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIFZpc2l0b3IgdGhhdCBjb252ZXJ0cyBhIGtlcm5lbCBjb25zdGFudCBleHByZXNzaW9uIGludG8gYQovLy8gW0NvbnN0YW50RXhwcmVzc2lvbl0uCmNsYXNzIENvbnN0YW50aWZpZXIgZXh0ZW5kcyBpci5FeHByZXNzaW9uVmlzaXRvcjxDb25zdGFudEV4cHJlc3Npb24+IHsKICBmaW5hbCBib29sIHJlcXVpcmVDb25zdGFudDsKICBmaW5hbCBJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwOwogIGlyLlRyZWVOb2RlIGZhaWxOb2RlOwogIGZpbmFsIE1hcDxpci5WYXJpYWJsZURlY2xhcmF0aW9uLCBDb25zdGFudEV4cHJlc3Npb24+IF9pbml0aWFsaXplckxvY2FscyA9CiAgICAgIDxpci5WYXJpYWJsZURlY2xhcmF0aW9uLCBDb25zdGFudEV4cHJlc3Npb24+e307CgogIENvbnN0YW50aWZpZXIodGhpcy5lbGVtZW50TWFwLCB7dGhpcy5yZXF1aXJlQ29uc3RhbnQ6IHRydWV9KTsKCiAgQ29tbW9uRWxlbWVudHMgZ2V0IF9jb21tb25FbGVtZW50cyA9PiBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzOwoKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXQoaXIuRXhwcmVzc2lvbiBub2RlKSB7CiAgICBDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQgPSBub2RlLmFjY2VwdCh0aGlzKTsKICAgIGlmIChjb25zdGFudCA9PSBudWxsICYmIHJlcXVpcmVDb25zdGFudCkgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IGNvbnRleHR1YWwgZXJyb3IgbWVzc2FnZXMuCiAgICAgIGVsZW1lbnRNYXAucmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUoZmFpbE5vZGUgPz8gbm9kZSksCiAgICAgICAgICBNZXNzYWdlS2luZC5OT1RfQV9DT01QSUxFX1RJTUVfQ09OU1RBTlQpOwogICAgICByZXR1cm4gbmV3IEVycm9uZW91c0NvbnN0YW50RXhwcmVzc2lvbigpOwogICAgfQogICAgcmV0dXJuIGNvbnN0YW50OwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIGRlZmF1bHRFeHByZXNzaW9uKGlyLkV4cHJlc3Npb24gbm9kZSkgewogICAgaWYgKHJlcXVpcmVDb25zdGFudCkgewogICAgICBmYWlsTm9kZSA/Pz0gbm9kZTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IF9jb21wdXRlTGlzdChMaXN0PGlyLkV4cHJlc3Npb24+IGV4cHJlc3Npb25zKSB7CiAgICBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gbGlzdCA9IDxDb25zdGFudEV4cHJlc3Npb24+W107CiAgICBmb3IgKGlyLkV4cHJlc3Npb24gZXhwcmVzc2lvbiBpbiBleHByZXNzaW9ucykgewogICAgICBDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQgPSB2aXNpdChleHByZXNzaW9uKTsKICAgICAgaWYgKGNvbnN0YW50ID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBsaXN0LmFkZChjb25zdGFudCk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBfY29tcHV0ZUFyZ3VtZW50cyhpci5Bcmd1bWVudHMgbm9kZSkgewogICAgTGlzdDxDb25zdGFudEV4cHJlc3Npb24+IGFyZ3VtZW50cyA9IDxDb25zdGFudEV4cHJlc3Npb24+W107CiAgICBmb3IgKGlyLkV4cHJlc3Npb24gYXJndW1lbnQgaW4gbm9kZS5wb3NpdGlvbmFsKSB7CiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCA9IHZpc2l0KGFyZ3VtZW50KTsKICAgICAgaWYgKGNvbnN0YW50ID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBhcmd1bWVudHMuYWRkKGNvbnN0YW50KTsKICAgIH0KICAgIGZvciAoaXIuTmFtZWRFeHByZXNzaW9uIGFyZ3VtZW50IGluIG5vZGUubmFtZWQpIHsKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50ID0gdmlzaXQoYXJndW1lbnQudmFsdWUpOwogICAgICBpZiAoY29uc3RhbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIGFyZ3VtZW50cy5hZGQoY29uc3RhbnQpOwogICAgfQogICAgcmV0dXJuIGFyZ3VtZW50czsKICB9CgogIENvbnN0cnVjdGVkQ29uc3RhbnRFeHByZXNzaW9uIF9jb21wdXRlQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICBpci5Db25zdHJ1Y3RvciB0YXJnZXQsCiAgICAgIGlyLkFyZ3VtZW50cyBhcmd1bWVudHMsCiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIHdoZW4gY29ycmVjdCB0eXBlIGFyZ3VtZW50cyBhcmUgcGFzc2VkCiAgICAgIC8vIHRocm91Z2ggW2FyZ3VtZW50c10uIEN1cnJlbnQgW2lyLlJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJdIGRvZXNuJ3QgaGF2ZQogICAgICAvLyBhbnkgdHlwZSBhcmd1bWVudHMuCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVzKSB7CiAgICBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gZXhwcmVzc2lvbnMgPSBfY29tcHV0ZUFyZ3VtZW50cyhhcmd1bWVudHMpOwogICAgaWYgKGV4cHJlc3Npb25zID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RlZENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgICBlbGVtZW50TWFwLmNyZWF0ZUludGVyZmFjZVR5cGUodGFyZ2V0LmVuY2xvc2luZ0NsYXNzLCB0eXBlcyksCiAgICAgICAgZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3Rvcih0YXJnZXQpLAogICAgICAgIGVsZW1lbnRNYXAuZ2V0Q2FsbFN0cnVjdHVyZShhcmd1bWVudHMpLAogICAgICAgIGV4cHJlc3Npb25zKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbihpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgaWYgKCFub2RlLmlzQ29uc3QpIHJldHVybiBudWxsOwogICAgcmV0dXJuIF9jb21wdXRlQ29uc3RydWN0b3JJbnZvY2F0aW9uKAogICAgICAgIG5vZGUudGFyZ2V0LCBub2RlLmFyZ3VtZW50cywgbm9kZS5hcmd1bWVudHMudHlwZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0VmFyaWFibGVHZXQoaXIuVmFyaWFibGVHZXQgbm9kZSkgewogICAgQ29uc3RhbnRFeHByZXNzaW9uIGNvbnN0YW50ID0gX2luaXRpYWxpemVyTG9jYWxzW25vZGUudmFyaWFibGVdOwogICAgaWYgKGNvbnN0YW50ICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGNvbnN0YW50OwogICAgfQogICAgaWYgKG5vZGUudmFyaWFibGUucGFyZW50IGlzIGlyLkZ1bmN0aW9uTm9kZSkgewogICAgICBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb24gPSBub2RlLnZhcmlhYmxlLnBhcmVudDsKICAgICAgaW50IGluZGV4ID0gZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMuaW5kZXhPZihub2RlLnZhcmlhYmxlKTsKICAgICAgaWYgKGluZGV4ICE9IC0xKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQb3NpdGlvbmFsQXJndW1lbnRSZWZlcmVuY2UoaW5kZXgpOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydChmdW5jdGlvbi5uYW1lZFBhcmFtZXRlcnMuY29udGFpbnMobm9kZS52YXJpYWJsZSkpOwogICAgICAgIHJldHVybiBuZXcgTmFtZWRBcmd1bWVudFJlZmVyZW5jZShub2RlLnZhcmlhYmxlLm5hbWUpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKG5vZGUudmFyaWFibGUuaXNDb25zdCkgewogICAgICByZXR1cm4gdmlzaXQobm9kZS52YXJpYWJsZS5pbml0aWFsaXplcik7CiAgICB9CiAgICByZXR1cm4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRTdGF0aWNHZXQoaXIuU3RhdGljR2V0IG5vZGUpIHsKICAgIGlyLk1lbWJlciB0YXJnZXQgPSBub2RlLnRhcmdldDsKICAgIGlmICh0YXJnZXQgaXMgaXIuRmllbGQgJiYgdGFyZ2V0LmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIG5ldyBGaWVsZENvbnN0YW50RXhwcmVzc2lvbihlbGVtZW50TWFwLmdldEZpZWxkKG5vZGUudGFyZ2V0KSk7CiAgICB9IGVsc2UgaWYgKHRhcmdldCBpcyBpci5Qcm9jZWR1cmUgJiYKICAgICAgICB0YXJnZXQua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLk1ldGhvZCkgewogICAgICBGdW5jdGlvbkVudGl0eSBmdW5jdGlvbiA9IGVsZW1lbnRNYXAuZ2V0TWV0aG9kKG5vZGUudGFyZ2V0KTsKICAgICAgRGFydFR5cGUgdHlwZSA9IGVsZW1lbnRNYXAuZ2V0RnVuY3Rpb25UeXBlKG5vZGUudGFyZ2V0LmZ1bmN0aW9uKTsKICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbkNvbnN0YW50RXhwcmVzc2lvbihmdW5jdGlvbiwgdHlwZSk7CiAgICB9CiAgICByZXR1cm4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXROdWxsTGl0ZXJhbChpci5OdWxsTGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gbmV3IE51bGxDb25zdGFudEV4cHJlc3Npb24oKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdEJvb2xMaXRlcmFsKGlyLkJvb2xMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBuZXcgQm9vbENvbnN0YW50RXhwcmVzc2lvbihub2RlLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdEludExpdGVyYWwoaXIuSW50TGl0ZXJhbCBub2RlKSB7CiAgICByZXR1cm4gbmV3IEludENvbnN0YW50RXhwcmVzc2lvbigKICAgICAgICBuZXcgQmlnSW50LmZyb20obm9kZS52YWx1ZSkudG9VbnNpZ25lZCg2NCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0RG91YmxlTGl0ZXJhbChpci5Eb3VibGVMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBuZXcgRG91YmxlQ29uc3RhbnRFeHByZXNzaW9uKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0U3RyaW5nTGl0ZXJhbChpci5TdHJpbmdMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBuZXcgU3RyaW5nQ29uc3RhbnRFeHByZXNzaW9uKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0U3ltYm9sTGl0ZXJhbChpci5TeW1ib2xMaXRlcmFsIG5vZGUpIHsKICAgIHJldHVybiBuZXcgU3ltYm9sQ29uc3RhbnRFeHByZXNzaW9uKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0U3RyaW5nQ29uY2F0ZW5hdGlvbihpci5TdHJpbmdDb25jYXRlbmF0aW9uIG5vZGUpIHsKICAgIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBleHByZXNzaW9ucyA9IF9jb21wdXRlTGlzdChub2RlLmV4cHJlc3Npb25zKTsKICAgIGlmIChleHByZXNzaW9ucyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuZXcgQ29uY2F0ZW5hdGVDb25zdGFudEV4cHJlc3Npb24oZXhwcmVzc2lvbnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0TWFwTGl0ZXJhbChpci5NYXBMaXRlcmFsIG5vZGUpIHsKICAgIGlmICghbm9kZS5pc0NvbnN0KSB7CiAgICAgIHJldHVybiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICAgIH0KICAgIERhcnRUeXBlIGtleVR5cGUgPSBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUua2V5VHlwZSk7CiAgICBEYXJ0VHlwZSB2YWx1ZVR5cGUgPSBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudmFsdWVUeXBlKTsKICAgIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiBrZXlzID0gPENvbnN0YW50RXhwcmVzc2lvbj5bXTsKICAgIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiB2YWx1ZXMgPSA8Q29uc3RhbnRFeHByZXNzaW9uPltdOwogICAgZm9yIChpci5NYXBFbnRyeSBlbnRyeSBpbiBub2RlLmVudHJpZXMpIHsKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGtleSA9IHZpc2l0KGVudHJ5LmtleSk7CiAgICAgIGlmIChrZXkgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIGtleXMuYWRkKGtleSk7CiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiB2YWx1ZSA9IHZpc2l0KGVudHJ5LnZhbHVlKTsKICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBudWxsOwogICAgICB2YWx1ZXMuYWRkKHZhbHVlKTsKICAgIH0KICAgIHJldHVybiBuZXcgTWFwQ29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgIF9jb21tb25FbGVtZW50cy5tYXBUeXBlKGtleVR5cGUsIHZhbHVlVHlwZSksIGtleXMsIHZhbHVlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRTZXRMaXRlcmFsKGlyLlNldExpdGVyYWwgbm9kZSkgewogICAgaWYgKCFub2RlLmlzQ29uc3QpIHsKICAgICAgcmV0dXJuIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogICAgfQogICAgRGFydFR5cGUgZWxlbWVudFR5cGUgPSBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZUFyZ3VtZW50KTsKICAgIExpc3Q8Q29uc3RhbnRFeHByZXNzaW9uPiB2YWx1ZXMgPSA8Q29uc3RhbnRFeHByZXNzaW9uPltdOwogICAgZm9yIChpci5FeHByZXNzaW9uIGV4cHJlc3Npb24gaW4gbm9kZS5leHByZXNzaW9ucykgewogICAgICBDb25zdGFudEV4cHJlc3Npb24gdmFsdWUgPSB2aXNpdChleHByZXNzaW9uKTsKICAgICAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBudWxsOwogICAgICB2YWx1ZXMuYWRkKHZhbHVlKTsKICAgIH0KICAgIHJldHVybiBuZXcgU2V0Q29uc3RhbnRFeHByZXNzaW9uKAogICAgICAgIF9jb21tb25FbGVtZW50cy5zZXRUeXBlKGVsZW1lbnRUeXBlKSwgdmFsdWVzKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdExpc3RMaXRlcmFsKGlyLkxpc3RMaXRlcmFsIG5vZGUpIHsKICAgIGlmICghbm9kZS5pc0NvbnN0KSB7CiAgICAgIHJldHVybiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICAgIH0KICAgIERhcnRUeXBlIGVsZW1lbnRUeXBlID0gZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnR5cGVBcmd1bWVudCk7CiAgICBMaXN0PENvbnN0YW50RXhwcmVzc2lvbj4gdmFsdWVzID0gPENvbnN0YW50RXhwcmVzc2lvbj5bXTsKICAgIGZvciAoaXIuRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIG5vZGUuZXhwcmVzc2lvbnMpIHsKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIHZhbHVlID0gdmlzaXQoZXhwcmVzc2lvbik7CiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgdmFsdWVzLmFkZCh2YWx1ZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IExpc3RDb25zdGFudEV4cHJlc3Npb24oCiAgICAgICAgX2NvbW1vbkVsZW1lbnRzLmxpc3RUeXBlKGVsZW1lbnRUeXBlKSwgdmFsdWVzKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdFR5cGVMaXRlcmFsKGlyLlR5cGVMaXRlcmFsIG5vZGUpIHsKICAgIFN0cmluZyBuYW1lOwogICAgRGFydFR5cGUgdHlwZSA9IGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS50eXBlKTsKICAgIGlmICh0eXBlLmlzRHluYW1pYykgewogICAgICBuYW1lID0gJ2R5bmFtaWMnOwogICAgfSBlbHNlIGlmICh0eXBlIGlzIEludGVyZmFjZVR5cGUpIHsKICAgICAgbmFtZSA9IHR5cGUuZWxlbWVudC5uYW1lOwogICAgfSBlbHNlIGlmICh0eXBlLmlzVHlwZWRlZikgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBDb21wdXRlIGEgbmFtZSBmb3IgdGhlIHR5cGUgbGl0ZXJhbD8gSXQgaXMgb25seQogICAgICAvLyB1c2VkIGluIGVycm9yIG1lc3NhZ2VzIGluIHRoZSBvbGQgU1NBIGJ1aWxkZXIuCiAgICAgIG5hbWUgPSAnPyc7CiAgICB9IGVsc2UgaWYgKG5vZGUudHlwZSBpcyBpci5GdW5jdGlvblR5cGUpIHsKICAgICAgaXIuRnVuY3Rpb25UeXBlIGZ1bmN0aW9uVHlwZSA9IG5vZGUudHlwZTsKICAgICAgYXNzZXJ0KGZ1bmN0aW9uVHlwZS50eXBlZGVmICE9IG51bGwpOwogICAgICB0eXBlID0gZWxlbWVudE1hcC5nZXRUeXBlZGVmVHlwZShmdW5jdGlvblR5cGUudHlwZWRlZik7CiAgICAgIG5hbWUgPSBmdW5jdGlvblR5cGUudHlwZWRlZi5uYW1lOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogICAgfQogICAgcmV0dXJuIG5ldyBUeXBlQ29uc3RhbnRFeHByZXNzaW9uKHR5cGUsIG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0QXNFeHByZXNzaW9uKGlyLkFzRXhwcmVzc2lvbiBub2RlKSB7CiAgICBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHZpc2l0KG5vZGUub3BlcmFuZCk7CiAgICBpZiAoZXhwcmVzc2lvbiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIERhcnRUeXBlIHR5cGUgPSBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZSk7CiAgICByZXR1cm4gbmV3IEFzQ29uc3RhbnRFeHByZXNzaW9uKGV4cHJlc3Npb24sIHR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0SW5zdGFudGlhdGlvbihpci5JbnN0YW50aWF0aW9uIG5vZGUpIHsKICAgIExpc3Q8RGFydFR5cGU+IHR5cGVBcmd1bWVudHMgPQogICAgICAgIG5vZGUudHlwZUFyZ3VtZW50cy5tYXAoZWxlbWVudE1hcC5nZXREYXJ0VHlwZSkudG9MaXN0KCk7CiAgICBmb3IgKERhcnRUeXBlIHR5cGVBcmd1bWVudCBpbiB0eXBlQXJndW1lbnRzKSB7CiAgICAgIGlmICh0eXBlQXJndW1lbnQuY29udGFpbnNUeXBlVmFyaWFibGVzKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIENvbnN0YW50RXhwcmVzc2lvbiBleHByZXNzaW9uID0gdmlzaXQobm9kZS5leHByZXNzaW9uKTsKICAgIGlmIChleHByZXNzaW9uID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIG5ldyBJbnN0YW50aWF0aW9uQ29uc3RhbnRFeHByZXNzaW9uKHR5cGVBcmd1bWVudHMsIGV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0Tm90KGlyLk5vdCBub2RlKSB7CiAgICBDb25zdGFudEV4cHJlc3Npb24gZXhwcmVzc2lvbiA9IHZpc2l0KG5vZGUub3BlcmFuZCk7CiAgICBpZiAoZXhwcmVzc2lvbiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuZXcgVW5hcnlDb25zdGFudEV4cHJlc3Npb24oVW5hcnlPcGVyYXRvci5OT1QsIGV4cHJlc3Npb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0Q29uZGl0aW9uYWxFeHByZXNzaW9uKGlyLkNvbmRpdGlvbmFsRXhwcmVzc2lvbiBub2RlKSB7CiAgICBDb25zdGFudEV4cHJlc3Npb24gY29uZGl0aW9uID0gdmlzaXQobm9kZS5jb25kaXRpb24pOwogICAgaWYgKGNvbmRpdGlvbiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIENvbnN0YW50RXhwcmVzc2lvbiB0cnVlRXhwID0gdmlzaXQobm9kZS50aGVuKTsKICAgIGlmICh0cnVlRXhwID09IG51bGwpIHJldHVybiBudWxsOwogICAgQ29uc3RhbnRFeHByZXNzaW9uIGZhbHNlRXhwID0gdmlzaXQobm9kZS5vdGhlcndpc2UpOwogICAgaWYgKGZhbHNlRXhwID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbENvbnN0YW50RXhwcmVzc2lvbihjb25kaXRpb24sIHRydWVFeHAsIGZhbHNlRXhwKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdFByb3BlcnR5R2V0KGlyLlByb3BlcnR5R2V0IG5vZGUpIHsKICAgIGlmIChub2RlLm5hbWUubmFtZSAhPSAnbGVuZ3RoJykgewogICAgICBmYWlsTm9kZSA/Pz0gbm9kZTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBDb25zdGFudEV4cHJlc3Npb24gcmVjZWl2ZXIgPSB2aXNpdChub2RlLnJlY2VpdmVyKTsKICAgIGlmIChyZWNlaXZlciA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuZXcgU3RyaW5nTGVuZ3RoQ29uc3RhbnRFeHByZXNzaW9uKHJlY2VpdmVyKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdE1ldGhvZEludm9jYXRpb24oaXIuTWV0aG9kSW52b2NhdGlvbiBub2RlKSB7CiAgICAvLyBNZXRob2QgaW52b2NhdGlvbnMgYXJlIGdlbmVyYWxseSBub3QgY29uc3RhbnQgZXhwcmVzc2lvbnMgYnV0IHVuYXJ5CiAgICAvLyBhbmQgYmluYXJ5IGV4cHJlc3Npb25zIGFyZSBlbmNvZGVkIGFzIG1ldGhvZCBpbnZvY2F0aW9ucyBpbiBrZXJuZWwuCiAgICBpZiAobm9kZS5hcmd1bWVudHMubmFtZWQuaXNOb3RFbXB0eSkgewogICAgICByZXR1cm4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgICB9CiAgICBpZiAobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5sZW5ndGggPT0gMCkgewogICAgICBVbmFyeU9wZXJhdG9yIG9wZXJhdG9yOwogICAgICBpZiAobm9kZS5uYW1lLm5hbWUgPT0gVW5hcnlPcGVyYXRvci5ORUdBVEUuc2VsZWN0b3JOYW1lKSB7CiAgICAgICAgb3BlcmF0b3IgPSBVbmFyeU9wZXJhdG9yLk5FR0FURTsKICAgICAgfSBlbHNlIHsKICAgICAgICBvcGVyYXRvciA9IFVuYXJ5T3BlcmF0b3IucGFyc2Uobm9kZS5uYW1lLm5hbWUpOwogICAgICB9CiAgICAgIGlmIChvcGVyYXRvciAhPSBudWxsKSB7CiAgICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGV4cHJlc3Npb24gPSB2aXNpdChub2RlLnJlY2VpdmVyKTsKICAgICAgICBpZiAoZXhwcmVzc2lvbiA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICByZXR1cm4gbmV3IFVuYXJ5Q29uc3RhbnRFeHByZXNzaW9uKG9wZXJhdG9yLCBleHByZXNzaW9uKTsKICAgICAgfQogICAgfQogICAgaWYgKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoID09IDEpIHsKICAgICAgQmluYXJ5T3BlcmF0b3Igb3BlcmF0b3IgPSBCaW5hcnlPcGVyYXRvci5wYXJzZShub2RlLm5hbWUubmFtZSk7CiAgICAgIGlmIChvcGVyYXRvciAhPSBudWxsKSB7CiAgICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGxlZnQgPSB2aXNpdChub2RlLnJlY2VpdmVyKTsKICAgICAgICBpZiAobGVmdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICBDb25zdGFudEV4cHJlc3Npb24gcmlnaHQgPSB2aXNpdChub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLnNpbmdsZSk7CiAgICAgICAgaWYgKHJpZ2h0ID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIHJldHVybiBuZXcgQmluYXJ5Q29uc3RhbnRFeHByZXNzaW9uKGxlZnQsIG9wZXJhdG9yLCByaWdodCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50RXhwcmVzc2lvbiB2aXNpdFN0YXRpY0ludm9jYXRpb24oaXIuU3RhdGljSW52b2NhdGlvbiBub2RlKSB7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZS50YXJnZXQpOwogICAgaWYgKG1lbWJlciA9PSBfY29tbW9uRWxlbWVudHMuaWRlbnRpY2FsRnVuY3Rpb24pIHsKICAgICAgaWYgKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwubGVuZ3RoID09IDIgJiYKICAgICAgICAgIG5vZGUuYXJndW1lbnRzLm5hbWVkLmlzRW1wdHkpIHsKICAgICAgICBDb25zdGFudEV4cHJlc3Npb24gbGVmdCA9IHZpc2l0KG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWxbMF0pOwogICAgICAgIGlmIChsZWZ0ID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIENvbnN0YW50RXhwcmVzc2lvbiByaWdodCA9IHZpc2l0KG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWxbMV0pOwogICAgICAgIGlmIChyaWdodCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICByZXR1cm4gbmV3IElkZW50aWNhbENvbnN0YW50RXhwcmVzc2lvbihsZWZ0LCByaWdodCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAobWVtYmVyLm5hbWUgPT0gJ2Zyb21FbnZpcm9ubWVudCcgJiYKICAgICAgICBub2RlLmFyZ3VtZW50cy5wb3NpdGlvbmFsLmxlbmd0aCA9PSAxKSB7CiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBuYW1lID0gdmlzaXQobm9kZS5hcmd1bWVudHMucG9zaXRpb25hbC5zaW5nbGUpOwogICAgICBpZiAobmFtZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGRlZmF1bHRWYWx1ZTsKICAgICAgaWYgKG5vZGUuYXJndW1lbnRzLm5hbWVkLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgaWYgKG5vZGUuYXJndW1lbnRzLm5hbWVkLnNpbmdsZS5uYW1lICE9ICdkZWZhdWx0VmFsdWUnKSB7CiAgICAgICAgICByZXR1cm4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgICAgICAgfQogICAgICAgIGRlZmF1bHRWYWx1ZSA9IHZpc2l0KG5vZGUuYXJndW1lbnRzLm5hbWVkLnNpbmdsZS52YWx1ZSk7CiAgICAgICAgaWYgKGRlZmF1bHRWYWx1ZSA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBpZiAobWVtYmVyLmVuY2xvc2luZ0NsYXNzID09IF9jb21tb25FbGVtZW50cy5ib29sQ2xhc3MpIHsKICAgICAgICByZXR1cm4gbmV3IEJvb2xGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24obmFtZSwgZGVmYXVsdFZhbHVlKTsKICAgICAgfSBlbHNlIGlmIChtZW1iZXIuZW5jbG9zaW5nQ2xhc3MgPT0gX2NvbW1vbkVsZW1lbnRzLmludENsYXNzKSB7CiAgICAgICAgcmV0dXJuIG5ldyBJbnRGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24obmFtZSwgZGVmYXVsdFZhbHVlKTsKICAgICAgfSBlbHNlIGlmIChtZW1iZXIuZW5jbG9zaW5nQ2xhc3MgPT0gX2NvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzKSB7CiAgICAgICAgcmV0dXJuIG5ldyBTdHJpbmdGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb24obmFtZSwgZGVmYXVsdFZhbHVlKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0TG9naWNhbEV4cHJlc3Npb24oaXIuTG9naWNhbEV4cHJlc3Npb24gbm9kZSkgewogICAgQmluYXJ5T3BlcmF0b3Igb3BlcmF0b3IgPSBCaW5hcnlPcGVyYXRvci5wYXJzZShub2RlLm9wZXJhdG9yKTsKICAgIGlmIChvcGVyYXRvciAhPSBudWxsICYmCiAgICAgICAgQmluYXJ5Q29uc3RhbnRFeHByZXNzaW9uLnBvdGVudGlhbE9wZXJhdG9yKG9wZXJhdG9yKSkgewogICAgICBDb25zdGFudEV4cHJlc3Npb24gbGVmdCA9IHZpc2l0KG5vZGUubGVmdCk7CiAgICAgIGlmIChsZWZ0ID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBDb25zdGFudEV4cHJlc3Npb24gcmlnaHQgPSB2aXNpdChub2RlLnJpZ2h0KTsKICAgICAgaWYgKHJpZ2h0ID09IG51bGwpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gbmV3IEJpbmFyeUNvbnN0YW50RXhwcmVzc2lvbihsZWZ0LCBvcGVyYXRvciwgcmlnaHQpOwogICAgfQogICAgcmV0dXJuIGRlZmF1bHRFeHByZXNzaW9uKG5vZGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRFeHByZXNzaW9uIHZpc2l0TGV0KGlyLkxldCBub2RlKSB7CiAgICBpci5FeHByZXNzaW9uIGJvZHkgPSBub2RlLmJvZHk7CiAgICBpZiAoYm9keSBpcyBpci5Db25kaXRpb25hbEV4cHJlc3Npb24pIHsKICAgICAgaXIuRXhwcmVzc2lvbiBjb25kaXRpb24gPSBib2R5LmNvbmRpdGlvbjsKICAgICAgaWYgKGNvbmRpdGlvbiBpcyBpci5NZXRob2RJbnZvY2F0aW9uKSB7CiAgICAgICAgaXIuRXhwcmVzc2lvbiByZWNlaXZlciA9IGNvbmRpdGlvbi5yZWNlaXZlcjsKICAgICAgICBpci5FeHByZXNzaW9uIG90aGVyd2lzZSA9IGJvZHkub3RoZXJ3aXNlOwogICAgICAgIGlmIChjb25kaXRpb24ubmFtZS5uYW1lID09IEJpbmFyeU9wZXJhdG9yLkVRLm5hbWUgJiYKICAgICAgICAgICAgcmVjZWl2ZXIgaXMgaXIuVmFyaWFibGVHZXQgJiYKICAgICAgICAgICAgY29uZGl0aW9uLmFyZ3VtZW50cy5wb3NpdGlvbmFsLnNpbmdsZSBpcyBpci5OdWxsTGl0ZXJhbCAmJgogICAgICAgICAgICBvdGhlcndpc2UgaXMgaXIuVmFyaWFibGVHZXQpIHsKICAgICAgICAgIGlmIChyZWNlaXZlci52YXJpYWJsZSA9PSBub2RlLnZhcmlhYmxlICYmCiAgICAgICAgICAgICAgb3RoZXJ3aXNlLnZhcmlhYmxlID09IG5vZGUudmFyaWFibGUpIHsKICAgICAgICAgICAgLy8gV2UgaGF2ZSA8bGVmdD4gPz8gPHJpZ2h0PiBlbmNvZGVkIGFzOgogICAgICAgICAgICAvLyAgICBsZXQgIzEgPSA8bGVmdD4gaW4gIzEgPT0gbnVsbCA/IDxyaWdodD4gOiAjMQogICAgICAgICAgICBDb25zdGFudEV4cHJlc3Npb24gbGVmdCA9IHZpc2l0KG5vZGUudmFyaWFibGUuaW5pdGlhbGl6ZXIpOwogICAgICAgICAgICBpZiAobGVmdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgICAgICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIHJpZ2h0ID0gdmlzaXQoYm9keS50aGVuKTsKICAgICAgICAgICAgaWYgKHJpZ2h0ID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBSZW1vdmUgW0lGX05VTExdIGJpbmFyeSBjb25zdGFudCBleHByZXNzaW9uCiAgICAgICAgICAgIC8vIHdoZW4gdGhlIHJlc29sdmVyIGlzIHJlbW92ZWQ7IHRoZW4gd2Ugbm8gbG9uZ2VyIG5lZWQgdGhlCiAgICAgICAgICAgIC8vIGV4cHJlc3Npb25zIHRvIGJlIHN0cnVjdHVyYWxseSBlcXVpdmFsZW5jZSBmb3IgZXF1aXZhbGVuY2UKICAgICAgICAgICAgLy8gdGVzdGluZy4KICAgICAgICAgICAgcmV0dXJuIG5ldyBCaW5hcnlDb25zdGFudEV4cHJlc3Npb24oCiAgICAgICAgICAgICAgICBsZWZ0LCBCaW5hcnlPcGVyYXRvci5JRl9OVUxMLCByaWdodCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gZGVmYXVsdEV4cHJlc3Npb24obm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gdmlzaXRCbG9ja0V4cHJlc3Npb24oaXIuQmxvY2tFeHByZXNzaW9uIG5vZGUpIHsKICAgIHJldHVybiBkZWZhdWx0RXhwcmVzc2lvbihub2RlKTsKICB9CgogIC8vLyBDb21wdXRlIHRoZSBbQ29uc3RhbnRDb25zdHJ1Y3Rvcl0gY29ycmVzcG9uZGluZyB0byB0aGUgY29uc3QgY29uc3RydWN0b3IKICAvLy8gW25vZGVdLgogIENvbnN0YW50Q29uc3RydWN0b3IgY29tcHV0ZUNvbnN0YW50Q29uc3RydWN0b3IoaXIuQ29uc3RydWN0b3Igbm9kZSkgewogICAgYXNzZXJ0KG5vZGUuaXNDb25zdCk7CiAgICBpci5DbGFzcyBjbHMgPSBub2RlLmVuY2xvc2luZ0NsYXNzOwogICAgSW50ZXJmYWNlVHlwZSB0eXBlID0gZWxlbWVudE1hcC5nZXRUaGlzVHlwZShlbGVtZW50TWFwLmdldENsYXNzKGNscykpOwoKICAgIE1hcDxkeW5hbWljLCBDb25zdGFudEV4cHJlc3Npb24+IGRlZmF1bHRWYWx1ZXMgPQogICAgICAgIDxkeW5hbWljLCBDb25zdGFudEV4cHJlc3Npb24+e307CiAgICBpbnQgcGFyYW1ldGVySW5kZXggPSAwOwogICAgZm9yIChpci5WYXJpYWJsZURlY2xhcmF0aW9uIHBhcmFtZXRlcgogICAgICAgIGluIG5vZGUuZnVuY3Rpb24ucG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgaWYgKHBhcmFtZXRlckluZGV4ID49IG5vZGUuZnVuY3Rpb24ucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkgewogICAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBkZWZhdWx0VmFsdWU7CiAgICAgICAgaWYgKHBhcmFtZXRlci5pbml0aWFsaXplciAhPSBudWxsKSB7CiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB2aXNpdChwYXJhbWV0ZXIuaW5pdGlhbGl6ZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBuZXcgTnVsbENvbnN0YW50RXhwcmVzc2lvbigpOwogICAgICAgIH0KICAgICAgICBpZiAoZGVmYXVsdFZhbHVlID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIGRlZmF1bHRWYWx1ZXNbcGFyYW1ldGVySW5kZXhdID0gZGVmYXVsdFZhbHVlOwogICAgICB9CiAgICAgIHBhcmFtZXRlckluZGV4Kys7CiAgICB9CiAgICBmb3IgKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gcGFyYW1ldGVyIGluIG5vZGUuZnVuY3Rpb24ubmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBkZWZhdWx0VmFsdWUgPSB2aXNpdChwYXJhbWV0ZXIuaW5pdGlhbGl6ZXIpOwogICAgICBpZiAoZGVmYXVsdFZhbHVlID09IG51bGwpIHJldHVybiBudWxsOwogICAgICBkZWZhdWx0VmFsdWVzW3BhcmFtZXRlci5uYW1lXSA9IGRlZmF1bHRWYWx1ZTsKICAgIH0KCiAgICBib29sIGlzUmVkaXJlY3RpbmcgPSBub2RlLmluaXRpYWxpemVycy5sZW5ndGggPT0gMSAmJgogICAgICAgIG5vZGUuaW5pdGlhbGl6ZXJzLnNpbmdsZSBpcyBpci5SZWRpcmVjdGluZ0luaXRpYWxpemVyOwoKICAgIE1hcDxGaWVsZEVudGl0eSwgQ29uc3RhbnRFeHByZXNzaW9uPiBmaWVsZE1hcCA9CiAgICAgICAgPEZpZWxkRW50aXR5LCBDb25zdGFudEV4cHJlc3Npb24+e307CgogICAgdm9pZCByZWdpc3RlckZpZWxkKGlyLkZpZWxkIGZpZWxkLCBDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQpIHsKICAgICAgZmllbGRNYXBbZWxlbWVudE1hcC5nZXRGaWVsZChmaWVsZCldID0gY29uc3RhbnQ7CiAgICB9CgogICAgaWYgKCFpc1JlZGlyZWN0aW5nKSB7CiAgICAgIGZvciAoaXIuRmllbGQgZmllbGQgaW4gY2xzLmZpZWxkcykgewogICAgICAgIGlmIChmaWVsZC5pc1N0YXRpYykgY29udGludWU7CiAgICAgICAgaWYgKGZpZWxkLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICAgIHJlZ2lzdGVyRmllbGQoZmllbGQsIHZpc2l0KGZpZWxkLmluaXRpYWxpemVyKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgQ29uc3RydWN0ZWRDb25zdGFudEV4cHJlc3Npb24gc3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb247CiAgICBMaXN0PEFzc2VydENvbnN0YW50RXhwcmVzc2lvbj4gYXNzZXJ0aW9ucyA9IDxBc3NlcnRDb25zdGFudEV4cHJlc3Npb24+W107CiAgICBmb3IgKGlyLkluaXRpYWxpemVyIGluaXRpYWxpemVyIGluIG5vZGUuaW5pdGlhbGl6ZXJzKSB7CiAgICAgIGlmIChpbml0aWFsaXplciBpcyBpci5GaWVsZEluaXRpYWxpemVyKSB7CiAgICAgICAgcmVnaXN0ZXJGaWVsZChpbml0aWFsaXplci5maWVsZCwgdmlzaXQoaW5pdGlhbGl6ZXIudmFsdWUpKTsKICAgICAgfSBlbHNlIGlmIChpbml0aWFsaXplciBpcyBpci5TdXBlckluaXRpYWxpemVyKSB7CiAgICAgICAgc3VwZXJDb25zdHJ1Y3Rvckludm9jYXRpb24gPSBfY29tcHV0ZUNvbnN0cnVjdG9ySW52b2NhdGlvbigKICAgICAgICAgICAgaW5pdGlhbGl6ZXIudGFyZ2V0LAogICAgICAgICAgICBpbml0aWFsaXplci5hcmd1bWVudHMsCiAgICAgICAgICAgIGluaXRpYWxpemVyLmFyZ3VtZW50cy50eXBlcyk7CiAgICAgIH0gZWxzZSBpZiAoaW5pdGlhbGl6ZXIgaXMgaXIuUmVkaXJlY3RpbmdJbml0aWFsaXplcikgewogICAgICAgIHN1cGVyQ29uc3RydWN0b3JJbnZvY2F0aW9uID0gX2NvbXB1dGVDb25zdHJ1Y3Rvckludm9jYXRpb24oCiAgICAgICAgICAgIGluaXRpYWxpemVyLnRhcmdldCwKICAgICAgICAgICAgaW5pdGlhbGl6ZXIuYXJndW1lbnRzLAogICAgICAgICAgICBub2RlLmVuY2xvc2luZ0NsYXNzLnRoaXNUeXBlLnR5cGVBcmd1bWVudHMpOwogICAgICB9IGVsc2UgaWYgKGluaXRpYWxpemVyIGlzIGlyLkFzc2VydEluaXRpYWxpemVyKSB7CiAgICAgICAgQ29uc3RhbnRFeHByZXNzaW9uIGNvbmRpdGlvbiA9IHZpc2l0KGluaXRpYWxpemVyLnN0YXRlbWVudC5jb25kaXRpb24pOwogICAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBtZXNzYWdlID0gaW5pdGlhbGl6ZXIuc3RhdGVtZW50Lm1lc3NhZ2UgIT0gbnVsbAogICAgICAgICAgICA/IHZpc2l0KGluaXRpYWxpemVyLnN0YXRlbWVudC5tZXNzYWdlKQogICAgICAgICAgICA6IG51bGw7CiAgICAgICAgYXNzZXJ0aW9ucy5hZGQobmV3IEFzc2VydENvbnN0YW50RXhwcmVzc2lvbihjb25kaXRpb24sIG1lc3NhZ2UpKTsKICAgICAgfSBlbHNlIGlmIChpbml0aWFsaXplciBpcyBpci5JbnZhbGlkSW5pdGlhbGl6ZXIpIHsKICAgICAgICBTdHJpbmcgY29uc3RydWN0b3JOYW1lID0gJyR7Y2xzLm5hbWV9LiR7bm9kZS5uYW1lfSc7CiAgICAgICAgZWxlbWVudE1hcC5yZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKGluaXRpYWxpemVyKSwKICAgICAgICAgICAgTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9DT05TVFJVQ1RPUiwKICAgICAgICAgICAgeydjb25zdHJ1Y3Rvck5hbWUnOiBjb25zdHJ1Y3Rvck5hbWV9KTsKICAgICAgICByZXR1cm4gbmV3IEVycm9uZW91c0NvbnN0YW50Q29uc3RydWN0b3IoKTsKICAgICAgfSBlbHNlIGlmIChpbml0aWFsaXplciBpcyBpci5Mb2NhbEluaXRpYWxpemVyKSB7CiAgICAgICAgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiB2YXJpYWJsZSA9IGluaXRpYWxpemVyLnZhcmlhYmxlOwogICAgICAgIENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCA9IHZpc2l0KHZhcmlhYmxlLmluaXRpYWxpemVyKTsKICAgICAgICBpZiAoY29uc3RhbnQgIT0gbnVsbCkgewogICAgICAgICAgX2luaXRpYWxpemVyTG9jYWxzW3ZhcmlhYmxlXSA9IGNvbnN0YW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgW19FcnJvbmVvdXNJbml0aWFsaXplclZpc2l0b3JdIGluCiAgICAgICAgICAvLyBgc3NhL2J1aWxkZXJfa2VybmVsLmRhcnRgIHRvIGlkZW50aWZ5IGVycm9uZW91cyBpbml0aWFsaXplci4KICAgICAgICAgIFN0cmluZyBjb25zdHJ1Y3Rvck5hbWUgPSAnJHtjbHMubmFtZX0uJHtub2RlLm5hbWV9JzsKICAgICAgICAgIGVsZW1lbnRNYXAucmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKGluaXRpYWxpemVyKSwKICAgICAgICAgICAgICBNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NPTlNUUlVDVE9SLAogICAgICAgICAgICAgIHsnY29uc3RydWN0b3JOYW1lJzogY29uc3RydWN0b3JOYW1lfSk7CiAgICAgICAgICByZXR1cm4gbmV3IEVycm9uZW91c0NvbnN0YW50Q29uc3RydWN0b3IoKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAgICdVbmV4cGVjdGVkIGluaXRpYWxpemVyICRpbml0aWFsaXplciAoJHtpbml0aWFsaXplci5ydW50aW1lVHlwZX0pJyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc1JlZGlyZWN0aW5nKSB7CiAgICAgIHJldHVybiBuZXcgUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RhbnRDb25zdHJ1Y3RvcigKICAgICAgICAgIGRlZmF1bHRWYWx1ZXMsIHN1cGVyQ29uc3RydWN0b3JJbnZvY2F0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBuZXcgR2VuZXJhdGl2ZUNvbnN0YW50Q29uc3RydWN0b3IodHlwZSwgZGVmYXVsdFZhbHVlcywgZmllbGRNYXAsCiAgICAgICAgICBhc3NlcnRpb25zLCBzdXBlckNvbnN0cnVjdG9ySW52b2NhdGlvbik7CiAgICB9CiAgfQp9CgovLy8gVmlzaXRvciB0aGF0IGNvbnZlcnRzIGtlcm5lbCBkYXJ0IHR5cGVzIGludG8gW0RhcnRUeXBlXS4KY2xhc3MgRGFydFR5cGVDb252ZXJ0ZXIgZXh0ZW5kcyBpci5EYXJ0VHlwZVZpc2l0b3I8RGFydFR5cGU+IHsKICBmaW5hbCBJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwOwogIGZpbmFsIE1hcDxpci5UeXBlUGFyYW1ldGVyLCBEYXJ0VHlwZT4gY3VycmVudEZ1bmN0aW9uVHlwZVBhcmFtZXRlcnMgPQogICAgICA8aXIuVHlwZVBhcmFtZXRlciwgRGFydFR5cGU+e307CiAgYm9vbCB0b3BMZXZlbCA9IHRydWU7CgogIERhcnRUeXBlQ29udmVydGVyKHRoaXMuZWxlbWVudE1hcCk7CgogIERhcnRUeXBlIGNvbnZlcnQoaXIuRGFydFR5cGUgdHlwZSkgewogICAgdG9wTGV2ZWwgPSB0cnVlOwogICAgcmV0dXJuIHR5cGUuYWNjZXB0KHRoaXMpOwogIH0KCiAgLy8vIFZpc2l0IGEgaW5uZXIgdHlwZS4KICBEYXJ0VHlwZSB2aXNpdFR5cGUoaXIuRGFydFR5cGUgdHlwZSkgewogICAgdG9wTGV2ZWwgPSBmYWxzZTsKICAgIHJldHVybiB0eXBlLmFjY2VwdCh0aGlzKTsKICB9CgogIEludGVyZmFjZVR5cGUgdmlzaXRTdXBlcnR5cGUoaXIuU3VwZXJ0eXBlIG5vZGUpIHsKICAgIENsYXNzRW50aXR5IGNscyA9IGVsZW1lbnRNYXAuZ2V0Q2xhc3Mobm9kZS5jbGFzc05vZGUpOwogICAgcmV0dXJuIG5ldyBJbnRlcmZhY2VUeXBlKGNscywgdmlzaXRUeXBlcyhub2RlLnR5cGVBcmd1bWVudHMpKTsKICB9CgogIExpc3Q8RGFydFR5cGU+IHZpc2l0VHlwZXMoTGlzdDxpci5EYXJ0VHlwZT4gdHlwZXMpIHsKICAgIHRvcExldmVsID0gZmFsc2U7CiAgICByZXR1cm4gbmV3IExpc3QuZ2VuZXJhdGUoCiAgICAgICAgdHlwZXMubGVuZ3RoLCAoaW50IGluZGV4KSA9PiB0eXBlc1tpbmRleF0uYWNjZXB0KHRoaXMpKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0VHlwZVBhcmFtZXRlclR5cGUoaXIuVHlwZVBhcmFtZXRlclR5cGUgbm9kZSkgewogICAgRGFydFR5cGUgdHlwZVBhcmFtZXRlciA9IGN1cnJlbnRGdW5jdGlvblR5cGVQYXJhbWV0ZXJzW25vZGUucGFyYW1ldGVyXTsKICAgIGlmICh0eXBlUGFyYW1ldGVyICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHR5cGVQYXJhbWV0ZXI7CiAgICB9CiAgICBpZiAobm9kZS5wYXJhbWV0ZXIucGFyZW50IGlzIGlyLlR5cGVkZWYpIHsKICAgICAgLy8gVHlwZWRlZnMgYXJlIG9ubHkgdXNlZCBpbiB0eXBlIGxpdGVyYWxzIHNvIHdlIG5ldmVyIG5lZWQgdGhlaXIgdHlwZQogICAgICAvLyB2YXJpYWJsZXMuCiAgICAgIHJldHVybiBjb25zdCBEeW5hbWljVHlwZSgpOwogICAgfQogICAgcmV0dXJuIG5ldyBUeXBlVmFyaWFibGVUeXBlKGVsZW1lbnRNYXAuZ2V0VHlwZVZhcmlhYmxlKG5vZGUucGFyYW1ldGVyKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEZ1bmN0aW9uVHlwZShpci5GdW5jdGlvblR5cGUgbm9kZSkgewogICAgaW50IGluZGV4ID0gMDsKICAgIExpc3Q8RnVuY3Rpb25UeXBlVmFyaWFibGU+IHR5cGVWYXJpYWJsZXM7CiAgICBmb3IgKGlyLlR5cGVQYXJhbWV0ZXIgdHlwZVBhcmFtZXRlciBpbiBub2RlLnR5cGVQYXJhbWV0ZXJzKSB7CiAgICAgIEZ1bmN0aW9uVHlwZVZhcmlhYmxlIHR5cGVWYXJpYWJsZSA9IG5ldyBGdW5jdGlvblR5cGVWYXJpYWJsZShpbmRleCk7CiAgICAgIGN1cnJlbnRGdW5jdGlvblR5cGVQYXJhbWV0ZXJzW3R5cGVQYXJhbWV0ZXJdID0gdHlwZVZhcmlhYmxlOwogICAgICB0eXBlVmFyaWFibGVzID8/PSA8RnVuY3Rpb25UeXBlVmFyaWFibGU+W107CiAgICAgIHR5cGVWYXJpYWJsZXMuYWRkKHR5cGVWYXJpYWJsZSk7CiAgICAgIGluZGV4Kys7CiAgICB9CiAgICBpZiAodHlwZVZhcmlhYmxlcyAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCB0eXBlVmFyaWFibGVzLmxlbmd0aDsgaW5kZXgrKykgewogICAgICAgIHR5cGVWYXJpYWJsZXNbaW5kZXhdLmJvdW5kID0KICAgICAgICAgICAgbm9kZS50eXBlUGFyYW1ldGVyc1tpbmRleF0uYm91bmQuYWNjZXB0KHRoaXMpOwogICAgICB9CiAgICB9CgogICAgRnVuY3Rpb25UeXBlIHR5cGUgPSBuZXcgRnVuY3Rpb25UeXBlKAogICAgICAgIHZpc2l0VHlwZShub2RlLnJldHVyblR5cGUpLAogICAgICAgIHZpc2l0VHlwZXMobm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycwogICAgICAgICAgICAudGFrZShub2RlLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQpCiAgICAgICAgICAgIC50b0xpc3QoKSksCiAgICAgICAgdmlzaXRUeXBlcyhub2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzCiAgICAgICAgICAgIC5za2lwKG5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCkKICAgICAgICAgICAgLnRvTGlzdCgpKSwKICAgICAgICBub2RlLm5hbWVkUGFyYW1ldGVycy5tYXAoKG4pID0+IG4ubmFtZSkudG9MaXN0KCksCiAgICAgICAgbm9kZS5uYW1lZFBhcmFtZXRlcnMubWFwKChuKSA9PiB2aXNpdFR5cGUobi50eXBlKSkudG9MaXN0KCksCiAgICAgICAgdHlwZVZhcmlhYmxlcyA/PyBjb25zdCA8RnVuY3Rpb25UeXBlVmFyaWFibGU+W10pOwogICAgZm9yIChpci5UeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIgaW4gbm9kZS50eXBlUGFyYW1ldGVycykgewogICAgICBjdXJyZW50RnVuY3Rpb25UeXBlUGFyYW1ldGVycy5yZW1vdmUodHlwZVBhcmFtZXRlcik7CiAgICB9CiAgICByZXR1cm4gdHlwZTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0SW50ZXJmYWNlVHlwZShpci5JbnRlcmZhY2VUeXBlIG5vZGUpIHsKICAgIENsYXNzRW50aXR5IGNscyA9IGVsZW1lbnRNYXAuZ2V0Q2xhc3Mobm9kZS5jbGFzc05vZGUpOwogICAgaWYgKGNscy5uYW1lID09ICdGdXR1cmVPcicgJiYKICAgICAgICBjbHMubGlicmFyeSA9PSBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLmFzeW5jTGlicmFyeSkgewogICAgICByZXR1cm4gbmV3IEZ1dHVyZU9yVHlwZSh2aXNpdFR5cGVzKG5vZGUudHlwZUFyZ3VtZW50cykuc2luZ2xlKTsKICAgIH0KICAgIHJldHVybiBuZXcgSW50ZXJmYWNlVHlwZShjbHMsIHZpc2l0VHlwZXMobm9kZS50eXBlQXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdFZvaWRUeXBlKGlyLlZvaWRUeXBlIG5vZGUpIHsKICAgIHJldHVybiBjb25zdCBWb2lkVHlwZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgdmlzaXREeW5hbWljVHlwZShpci5EeW5hbWljVHlwZSBub2RlKSB7CiAgICByZXR1cm4gY29uc3QgRHluYW1pY1R5cGUoKTsKICB9CgogIEBvdmVycmlkZQogIERhcnRUeXBlIHZpc2l0SW52YWxpZFR5cGUoaXIuSW52YWxpZFR5cGUgbm9kZSkgewogICAgLy8gUm9vdCB1c2VzIHN1Y2ggYSBgbyBpcyBVbnJlc29sdmVkYCBhbmQgYG8gYXMgVW5yZXNvbHZlZGAgbXVzdCBiZSBzcGVjaWFsCiAgICAvLyBjYXNlZCBpbiB0aGUgYnVpbGRlciwgbmVzdGVkIGludmFsaWQgdHlwZXMgYXJlIHRyZWF0ZWQgYXMgYGR5bmFtaWNgLgogICAgcmV0dXJuIGNvbnN0IER5bmFtaWNUeXBlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSB2aXNpdEJvdHRvbVR5cGUoaXIuQm90dG9tVHlwZSBub2RlKSB7CiAgICByZXR1cm4gZWxlbWVudE1hcC5jb21tb25FbGVtZW50cy5udWxsVHlwZTsKICB9Cn0KCmNsYXNzIENvbnN0YW50VmFsdWVmaWVyIGV4dGVuZHMgaXIuQ29tcHV0ZU9uY2VDb25zdGFudFZpc2l0b3I8Q29uc3RhbnRWYWx1ZT4gewogIGZpbmFsIElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXA7CgogIENvbnN0YW50VmFsdWVmaWVyKHRoaXMuZWxlbWVudE1hcCk7CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgZGVmYXVsdENvbnN0YW50KGlyLkNvbnN0YW50IG5vZGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJVbmV4cGVjdGVkIGNvbnN0YW50ICRub2RlICgke25vZGUucnVudGltZVR5cGV9KS4iKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRVbmV2YWx1YXRlZENvbnN0YW50KGlyLlVuZXZhbHVhdGVkQ29uc3RhbnQgbm9kZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlVuZXhwZWN0ZWQgdW5ldmFsdWF0ZWQgY29uc3RhbnQgJG5vZGUuIik7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0VHlwZUxpdGVyYWxDb25zdGFudChpci5UeXBlTGl0ZXJhbENvbnN0YW50IG5vZGUpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlVHlwZSgKICAgICAgICBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLCBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdFRlYXJPZmZDb25zdGFudChpci5UZWFyT2ZmQ29uc3RhbnQgbm9kZSkgewogICAgRnVuY3Rpb25FbnRpdHkgZnVuY3Rpb24gPSBlbGVtZW50TWFwLmdldE1ldGhvZChub2RlLnByb2NlZHVyZSk7CiAgICBEYXJ0VHlwZSB0eXBlID0gZWxlbWVudE1hcC5nZXRGdW5jdGlvblR5cGUobm9kZS5wcm9jZWR1cmUuZnVuY3Rpb24pOwogICAgcmV0dXJuIG5ldyBGdW5jdGlvbkNvbnN0YW50VmFsdWUoZnVuY3Rpb24sIHR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQoCiAgICAgIGlyLlBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgbm9kZSkgewogICAgTGlzdDxEYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cyA9IFtdOwogICAgZm9yIChpci5EYXJ0VHlwZSB0eXBlIGluIG5vZGUudHlwZXMpIHsKICAgICAgdHlwZUFyZ3VtZW50cy5hZGQoZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh0eXBlKSk7CiAgICB9CiAgICBGdW5jdGlvbkNvbnN0YW50VmFsdWUgZnVuY3Rpb24gPSB2aXNpdENvbnN0YW50KG5vZGUudGVhck9mZkNvbnN0YW50KTsKICAgIHJldHVybiBuZXcgSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUodHlwZUFyZ3VtZW50cywgZnVuY3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdEluc3RhbmNlQ29uc3RhbnQoaXIuSW5zdGFuY2VDb25zdGFudCBub2RlKSB7CiAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPQogICAgICAgIGVsZW1lbnRNYXAuY3JlYXRlSW50ZXJmYWNlVHlwZShub2RlLmNsYXNzTm9kZSwgbm9kZS50eXBlQXJndW1lbnRzKTsKICAgIE1hcDxGaWVsZEVudGl0eSwgQ29uc3RhbnRWYWx1ZT4gZmllbGRzID0ge307CiAgICBub2RlLmZpZWxkVmFsdWVzLmZvckVhY2goKGlyLlJlZmVyZW5jZSByZWZlcmVuY2UsIGlyLkNvbnN0YW50IHZhbHVlKSB7CiAgICAgIEZpZWxkRW50aXR5IGZpZWxkID0gZWxlbWVudE1hcC5nZXRGaWVsZChyZWZlcmVuY2UuYXNGaWVsZCk7CiAgICAgIGZpZWxkc1tmaWVsZF0gPSB2aXNpdENvbnN0YW50KHZhbHVlKTsKICAgIH0pOwogICAgcmV0dXJuIG5ldyBDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUodHlwZSwgZmllbGRzKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRMaXN0Q29uc3RhbnQoaXIuTGlzdENvbnN0YW50IG5vZGUpIHsKICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4gZWxlbWVudHMgPSBbXTsKICAgIGZvciAoaXIuQ29uc3RhbnQgZWxlbWVudCBpbiBub2RlLmVudHJpZXMpIHsKICAgICAgZWxlbWVudHMuYWRkKHZpc2l0Q29uc3RhbnQoZWxlbWVudCkpOwogICAgfQogICAgRGFydFR5cGUgdHlwZSA9IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMKICAgICAgICAubGlzdFR5cGUoZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnR5cGVBcmd1bWVudCkpOwogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVMaXN0KHR5cGUsIGVsZW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIENvbnN0YW50VmFsdWUgdmlzaXRTZXRDb25zdGFudChpci5TZXRDb25zdGFudCBub2RlKSB7CiAgICBMaXN0PENvbnN0YW50VmFsdWU+IGVsZW1lbnRzID0gW107CiAgICBmb3IgKGlyLkNvbnN0YW50IGVsZW1lbnQgaW4gbm9kZS5lbnRyaWVzKSB7CiAgICAgIGVsZW1lbnRzLmFkZCh2aXNpdENvbnN0YW50KGVsZW1lbnQpKTsKICAgIH0KICAgIERhcnRUeXBlIHR5cGUgPSBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzCiAgICAgICAgLnNldFR5cGUoZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLnR5cGVBcmd1bWVudCkpOwogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVTZXQoZWxlbWVudE1hcC5jb21tb25FbGVtZW50cywgdHlwZSwgZWxlbWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdE1hcENvbnN0YW50KGlyLk1hcENvbnN0YW50IG5vZGUpIHsKICAgIExpc3Q8Q29uc3RhbnRWYWx1ZT4ga2V5cyA9IFtdOwogICAgTGlzdDxDb25zdGFudFZhbHVlPiB2YWx1ZXMgPSBbXTsKICAgIGZvciAoaXIuQ29uc3RhbnRNYXBFbnRyeSBlbGVtZW50IGluIG5vZGUuZW50cmllcykgewogICAgICBrZXlzLmFkZCh2aXNpdENvbnN0YW50KGVsZW1lbnQua2V5KSk7CiAgICAgIHZhbHVlcy5hZGQodmlzaXRDb25zdGFudChlbGVtZW50LnZhbHVlKSk7CiAgICB9CiAgICBEYXJ0VHlwZSB0eXBlID0gZWxlbWVudE1hcC5jb21tb25FbGVtZW50cy5tYXBUeXBlKAogICAgICAgIGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS5rZXlUeXBlKSwKICAgICAgICBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudmFsdWVUeXBlKSk7CiAgICByZXR1cm4gY29uc3RhbnRfc3lzdGVtLmNyZWF0ZU1hcCgKICAgICAgICBlbGVtZW50TWFwLmNvbW1vbkVsZW1lbnRzLCB0eXBlLCBrZXlzLCB2YWx1ZXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdFN5bWJvbENvbnN0YW50KGlyLlN5bWJvbENvbnN0YW50IG5vZGUpIHsKICAgIHJldHVybiBjb25zdGFudF9zeXN0ZW0uY3JlYXRlU3ltYm9sKGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMsIG5vZGUubmFtZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0U3RyaW5nQ29uc3RhbnQoaXIuU3RyaW5nQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVTdHJpbmcobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0RG91YmxlQ29uc3RhbnQoaXIuRG91YmxlQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVEb3VibGUobm9kZS52YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudFZhbHVlIHZpc2l0SW50Q29uc3RhbnQoaXIuSW50Q29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVJbnRGcm9tSW50KG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdEJvb2xDb25zdGFudChpci5Cb29sQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVCb29sKG5vZGUudmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgQ29uc3RhbnRWYWx1ZSB2aXNpdE51bGxDb25zdGFudChpci5OdWxsQ29uc3RhbnQgbm9kZSkgewogICAgcmV0dXJuIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVOdWxsKCk7CiAgfQp9CoMOAE5OPAEoNC8xNQEZPykoIyIkJSEhGgFQGzkMQgEMQSo5LiYXBhoEAgE+GkceIxhNNgFAAUMBMTUvQS47NDAGFQQBDD0bGQYRBAFLPDQ3KRoGEQQBQkE2NSkfBjY7KR8GFgQBPx0eUU8dIUkqLkYrMBYEAQxRJCo8BAEMPUUcFwYzN0gZNw9CPwgoLwYkBAEMOSQwTCkyQ0g9BiQEAQw9KQQBDD0zBAEMOyY1BAEMQTUEAQxBNQQBDEE1BAEMTUsqOwQBDDsZJgY9QTw+LjEkFTUmGQYmRAQBDDsZJgZGPjk0JhkGJjcEAQw9GSYGRj45NCYZBic4BAEMPRE3GhgoICFOOBIvMCw+KA0mBjMEAQw/OSk3NwQBDEEjQTMwFQgGPClLBAEMLTkpRwQBDFE6KDMmOSdMBAEMPSYZEwY4JzkEAQxHS0srJgYxHkEpDzgIHj4tQggGMUYeOCdMKEQIBiQEAQxHPTczKkcnSCg9CDMxSSUnLkIqCkEvCEBORk1JUAgGJAQBDElDHEAyJTQmQgYkBAEMLSQsMC41Mj0qRys0NTU/SCs5LFBIShgxNgwKCAYkBAEMRSQEAU8OSBooSwE1KRwqMUQpLTcRNwovNggYBk5GLTQGATo/ATQtAUY3BgEaKyYpOgoIBgE+TjwwRDdEICMqPUQgIzk4T0szFEo5PTA4NjMzN0BDIDMRSEo/Mjo4NTUKDyRRCAYZOzYNTjMGBAIBPT8jSCYYASYBJxUeBAEaKRYeBAE0O0MEATcWHkEEAQw/TCEcBi9NFCIGTQQBDDUTLkJLQzInDwYhQyU7CAYBKiQtLxgtLxg6RTpCOwYRBAEMNzsiQUYGQwQBDC0dBAEMMyAEAQwzUEwgBAEMMS8EAgFPIwEmAQw0ID0EAQxISgQBDEgnRwQBDEBESTYEAQwzLicrNwZKRAQBDEIZTDFLQiwINwQBDDonMCwGLj43BAEMOCcwLAYuPVEEAQw4IyU4LDAGNy4xJjgEAQw+TwQBDD41BAEMPjUEAQw4OQQBDDozBAEMOikEAgElcGFja2FnZTpjb21waWxlci9zcmMvaXIvdmlzaXRvcnMuZGFydC1zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9rZXJuZWwvZW52LmRhcnTAAHK7Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5rZXJuZWwuZW52OwoKaW1wb3J0ICdwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2RhcnQyanMuZGFydCcKICAgIHNob3cgaXNSZWRpcmVjdGluZ0ZhY3Rvcnk7CgppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL2FzdC5kYXJ0JyBhcyBpcjsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC9jbG9uZS5kYXJ0JzsKaW1wb3J0ICdwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydCc7CmltcG9ydCAncGFja2FnZTpjb2xsZWN0aW9uL2NvbGxlY3Rpb24uZGFydCcgc2hvdyBtZXJnZVNvcnQ7IC8vIGEgc3RhYmxlIHNvcnQuCgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvY29uc3RydWN0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9leHByZXNzaW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL2VsZW1lbnRfbWFwLmRhcnQnOwppbXBvcnQgJy4uL2lyL3N0YXRpY190eXBlX2NhY2hlLmRhcnQnOwppbXBvcnQgJy4uL2lyL3Zpc2l0b3JzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3V0aWwuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvZWxlbWVudF9tYXAuZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvZW52LmRhcnQnOwppbXBvcnQgJy4uL29yZGVyZWRfdHlwZXNldC5kYXJ0JzsKaW1wb3J0ICcuLi9zc2EvdHlwZV9idWlsZGVyLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL21lbWJlcl91c2FnZS5kYXJ0JzsKaW1wb3J0ICdlbGVtZW50X21hcF9pbXBsLmRhcnQnOwoKLy8vIEVudmlyb25tZW50IGZvciBmYXN0IGxvb2t1cCBvZiBjb21wb25lbnQgbGlicmFyaWVzLgpjbGFzcyBLUHJvZ3JhbUVudiB7CiAgZmluYWwgU2V0PGlyLkNvbXBvbmVudD4gX2NvbXBvbmVudHMgPSBuZXcgU2V0PGlyLkNvbXBvbmVudD4oKTsKCiAgTWFwPFVyaSwgS0xpYnJhcnlFbnY+IF9saWJyYXJ5TWFwOwoKICAvLy8gVE9ETyhqb2hubml3aW50aGVyKTogSGFuZGxlIGFyYml0cmFyeSBsb2FkIG9yZGVyIGlmIG5lZWRlZC4KICBpci5NZW1iZXIgZ2V0IG1haW5NZXRob2QgPT4gX2NvbXBvbmVudHMuZmlyc3Q/Lm1haW5NZXRob2Q7CgogIGlyLkNvbXBvbmVudCBnZXQgbWFpbkNvbXBvbmVudCA9PiBfY29tcG9uZW50cy5maXJzdDsKCiAgdm9pZCBhZGRDb21wb25lbnQoaXIuQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgaWYgKF9jb21wb25lbnRzLmFkZChjb21wb25lbnQpKSB7CiAgICAgIGlmIChfbGlicmFyeU1hcCAhPSBudWxsKSB7CiAgICAgICAgX2FkZExpYnJhcmllcyhjb21wb25lbnQpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9hZGRMaWJyYXJpZXMoaXIuQ29tcG9uZW50IGNvbXBvbmVudCkgewogICAgZm9yIChpci5MaWJyYXJ5IGxpYnJhcnkgaW4gY29tcG9uZW50LmxpYnJhcmllcykgewogICAgICBfbGlicmFyeU1hcFtsaWJyYXJ5LmltcG9ydFVyaV0gPSBuZXcgS0xpYnJhcnlFbnYobGlicmFyeSk7CiAgICB9CiAgfQoKICB2b2lkIF9lbnN1cmVMaWJyYXJ5TWFwKCkgewogICAgaWYgKF9saWJyYXJ5TWFwID09IG51bGwpIHsKICAgICAgX2xpYnJhcnlNYXAgPSA8VXJpLCBLTGlicmFyeUVudj57fTsKICAgICAgZm9yIChpci5Db21wb25lbnQgY29tcG9uZW50IGluIF9jb21wb25lbnRzKSB7CiAgICAgICAgX2FkZExpYnJhcmllcyhjb21wb25lbnQpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmV0dXJuIHRoZSBbS0xpYnJhcnlFbnZdIGZvciB0aGUgbGlicmFyeSB3aXRoIHRoZSBjYW5vbmljYWwgW3VyaV0uCiAgS0xpYnJhcnlFbnYgbG9va3VwTGlicmFyeShVcmkgdXJpKSB7CiAgICBfZW5zdXJlTGlicmFyeU1hcCgpOwogICAgcmV0dXJuIF9saWJyYXJ5TWFwW3VyaV07CiAgfQoKICAvLy8gQ2FsbHMgW2ZdIGZvciBlYWNoIGxpYnJhcnkgaW4gdGhpcyBlbnZpcm9ubWVudC4KICB2b2lkIGZvckVhY2hMaWJyYXJ5KHZvaWQgZihLTGlicmFyeUVudiBsaWJyYXJ5KSkgewogICAgX2Vuc3VyZUxpYnJhcnlNYXAoKTsKICAgIF9saWJyYXJ5TWFwLnZhbHVlcy5mb3JFYWNoKGYpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG51bWJlciBvZiBsaWJyYXJpZXMgaW4gdGhpcyBlbnZpcm9ubWVudC4KICBpbnQgZ2V0IGxlbmd0aCB7CiAgICBfZW5zdXJlTGlicmFyeU1hcCgpOwogICAgcmV0dXJuIF9saWJyYXJ5TWFwLmxlbmd0aDsKICB9CgogIC8vLyBDb252ZXJ0IHRoaXMgW0tQcm9ncmFtRW52XSB0byB0aGUgY29ycmVzcG9uZGluZyBbSlByb2dyYW1FbnZdLgogIEpQcm9ncmFtRW52IGNvbnZlcnQoKSA9PiBuZXcgSlByb2dyYW1FbnYoX2NvbXBvbmVudHMpOwp9CgovLy8gRW52aXJvbm1lbnQgZm9yIGZhc3QgbG9va3VwIG9mIGxpYnJhcnkgY2xhc3NlcyBhbmQgbWVtYmVycy4KY2xhc3MgS0xpYnJhcnlFbnYgewogIGZpbmFsIGlyLkxpYnJhcnkgbGlicmFyeTsKCiAgTWFwPFN0cmluZywgS0NsYXNzRW52PiBfY2xhc3NNYXA7CiAgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBfbWVtYmVyTWFwOwogIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gX3NldHRlck1hcDsKCiAgS0xpYnJhcnlFbnYodGhpcy5saWJyYXJ5KTsKCiAgdm9pZCBfZW5zdXJlQ2xhc3NNYXAoKSB7CiAgICBpZiAoX2NsYXNzTWFwID09IG51bGwpIHsKICAgICAgX2NsYXNzTWFwID0gPFN0cmluZywgS0NsYXNzRW52Pnt9OwogICAgICBmb3IgKGlyLkNsYXNzIGNscyBpbiBsaWJyYXJ5LmNsYXNzZXMpIHsKICAgICAgICBfY2xhc3NNYXBbY2xzLm5hbWVdID0gbmV3IEtDbGFzc0VudkltcGwoY2xzKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIFJldHVybiB0aGUgW0tDbGFzc0Vudl0gZm9yIHRoZSBjbGFzcyBbbmFtZV0gaW4gW2xpYnJhcnldLgogIEtDbGFzc0VudiBsb29rdXBDbGFzcyhTdHJpbmcgbmFtZSkgewogICAgX2Vuc3VyZUNsYXNzTWFwKCk7CiAgICByZXR1cm4gX2NsYXNzTWFwW25hbWVdOwogIH0KCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBjbGFzcyBpbiB0aGlzIGxpYnJhcnkuCiAgdm9pZCBmb3JFYWNoQ2xhc3Modm9pZCBmKEtDbGFzc0VudiBjbHMpKSB7CiAgICBfZW5zdXJlQ2xhc3NNYXAoKTsKICAgIF9jbGFzc01hcC52YWx1ZXMuZm9yRWFjaChmKTsKICB9CgogIHZvaWQgX2Vuc3VyZU1lbWJlck1hcHMoKSB7CiAgICBpZiAoX21lbWJlck1hcCA9PSBudWxsKSB7CiAgICAgIF9tZW1iZXJNYXAgPSA8U3RyaW5nLCBpci5NZW1iZXI+e307CiAgICAgIF9zZXR0ZXJNYXAgPSA8U3RyaW5nLCBpci5NZW1iZXI+e307CiAgICAgIGZvciAoaXIuTWVtYmVyIG1lbWJlciBpbiBsaWJyYXJ5Lm1lbWJlcnMpIHsKICAgICAgICBpZiAobWVtYmVyLm5hbWUubmFtZS5jb250YWlucygnIycpKSB7CiAgICAgICAgICAvLyBTa2lwIHN5bnRoZXRpYyAuZGlsbCBtZW1iZXJzLgogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmIChtZW1iZXIgaXMgaXIuUHJvY2VkdXJlKSB7CiAgICAgICAgICBpZiAobWVtYmVyLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5TZXR0ZXIpIHsKICAgICAgICAgICAgX3NldHRlck1hcFttZW1iZXIubmFtZS5uYW1lXSA9IG1lbWJlcjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9tZW1iZXJNYXBbbWVtYmVyLm5hbWUubmFtZV0gPSBtZW1iZXI7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChtZW1iZXIgaXMgaXIuRmllbGQpIHsKICAgICAgICAgIF9tZW1iZXJNYXBbbWVtYmVyLm5hbWUubmFtZV0gPSBtZW1iZXI7CiAgICAgICAgICBpZiAobWVtYmVyLmlzTXV0YWJsZSkgewogICAgICAgICAgICBfc2V0dGVyTWFwW21lbWJlci5uYW1lLm5hbWVdID0gbWVtYmVyOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmYWlsZWRBdCgKICAgICAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsICJVbmV4cGVjdGVkIGxpYnJhcnkgbWVtYmVyIG5vZGU6ICRtZW1iZXIiKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBSZXR1cm4gdGhlIFtpci5NZW1iZXJdIGZvciB0aGUgbWVtYmVyIFtuYW1lXSBpbiBbbGlicmFyeV0uCiAgaXIuTWVtYmVyIGxvb2t1cE1lbWJlcihTdHJpbmcgbmFtZSwge2Jvb2wgc2V0dGVyOiBmYWxzZX0pIHsKICAgIF9lbnN1cmVNZW1iZXJNYXBzKCk7CiAgICByZXR1cm4gc2V0dGVyID8gX3NldHRlck1hcFtuYW1lXSA6IF9tZW1iZXJNYXBbbmFtZV07CiAgfQoKICB2b2lkIGZvckVhY2hNZW1iZXIodm9pZCBmKGlyLk1lbWJlciBtZW1iZXIpKSB7CiAgICBfZW5zdXJlTWVtYmVyTWFwcygpOwogICAgX21lbWJlck1hcC52YWx1ZXMuZm9yRWFjaChmKTsKICAgIGZvciAoaXIuTWVtYmVyIG1lbWJlciBpbiBfc2V0dGVyTWFwLnZhbHVlcykgewogICAgICBpZiAobWVtYmVyIGlzIGlyLlByb2NlZHVyZSkgewogICAgICAgIGYobWVtYmVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBTa2lwIGZpZWxkczsgdGhlc2UgYXJlIGFsc28gaW4gX21lbWJlck1hcC4KICAgICAgfQogICAgfQogIH0KCiAgLy8vIENvbnZlcnQgdGhpcyBbS0xpYnJhcnlFbnZdIHRvIGEgY29ycmVzcG9uZGluZyBbSkxpYnJhcnlFbnZdIGNvbnRhaW5pbmcKICAvLy8gb25seSB0aGUgbWVtYmVycyBpbiBbbGl2ZU1lbWJlcnNdLgogIEpMaWJyYXJ5RW52IGNvbnZlcnQoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwKICAgICAgTWFwPE1lbWJlckVudGl0eSwgTWVtYmVyVXNhZ2U+IGxpdmVNZW1iZXJVc2FnZSkgewogICAgTWFwPFN0cmluZywgaXIuTWVtYmVyPiBtZW1iZXJNYXA7CiAgICBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IHNldHRlck1hcDsKICAgIGlmIChfbWVtYmVyTWFwID09IG51bGwpIHsKICAgICAgbWVtYmVyTWFwID0gY29uc3QgPFN0cmluZywgaXIuTWVtYmVyPnt9OwogICAgfSBlbHNlIHsKICAgICAgbWVtYmVyTWFwID0gPFN0cmluZywgaXIuTWVtYmVyPnt9OwogICAgICBfbWVtYmVyTWFwLmZvckVhY2goKFN0cmluZyBuYW1lLCBpci5NZW1iZXIgbm9kZSkgewogICAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBlbGVtZW50TWFwLmdldE1lbWJlcihub2RlKTsKICAgICAgICBpZiAobGl2ZU1lbWJlclVzYWdlLmNvbnRhaW5zS2V5KG1lbWJlcikpIHsKICAgICAgICAgIG1lbWJlck1hcFtuYW1lXSA9IG5vZGU7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGlmIChfc2V0dGVyTWFwID09IG51bGwpIHsKICAgICAgc2V0dGVyTWFwID0gY29uc3QgPFN0cmluZywgaXIuTWVtYmVyPnt9OwogICAgfSBlbHNlIHsKICAgICAgc2V0dGVyTWFwID0gPFN0cmluZywgaXIuTWVtYmVyPnt9OwogICAgICBfc2V0dGVyTWFwLmZvckVhY2goKFN0cmluZyBuYW1lLCBpci5NZW1iZXIgbm9kZSkgewogICAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBlbGVtZW50TWFwLmdldE1lbWJlcihub2RlKTsKICAgICAgICBpZiAobGl2ZU1lbWJlclVzYWdlLmNvbnRhaW5zS2V5KG1lbWJlcikpIHsKICAgICAgICAgIHNldHRlck1hcFtuYW1lXSA9IG5vZGU7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBuZXcgSkxpYnJhcnlFbnYobGlicmFyeSwgbWVtYmVyTWFwLCBzZXR0ZXJNYXApOwogIH0KfQoKY2xhc3MgS0xpYnJhcnlEYXRhIHsKICBmaW5hbCBpci5MaWJyYXJ5IGxpYnJhcnk7CiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gX21ldGFkYXRhOwogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IEF2b2lkIGRpcmVjdCBhY2Nlc3MgdG8gW2ltcG9ydHNdLgogIE1hcDxpci5MaWJyYXJ5RGVwZW5kZW5jeSwgSW1wb3J0RW50aXR5PiBpbXBvcnRzOwoKICBLTGlicmFyeURhdGEodGhpcy5saWJyYXJ5KTsKCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gZ2V0TWV0YWRhdGEoS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwKSB7CiAgICByZXR1cm4gX21ldGFkYXRhID8/PSBlbGVtZW50TWFwLmdldE1ldGFkYXRhKGxpYnJhcnkuYW5ub3RhdGlvbnMpOwogIH0KCiAgSXRlcmFibGU8SW1wb3J0RW50aXR5PiBnZXRJbXBvcnRzKEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcCkgewogICAgaWYgKGltcG9ydHMgPT0gbnVsbCkgewogICAgICBMaXN0PGlyLkxpYnJhcnlEZXBlbmRlbmN5PiBkZXBlbmRlbmNpZXMgPSBsaWJyYXJ5LmRlcGVuZGVuY2llczsKICAgICAgaWYgKGRlcGVuZGVuY2llcy5pc0VtcHR5KSB7CiAgICAgICAgaW1wb3J0cyA9IGNvbnN0IDxpci5MaWJyYXJ5RGVwZW5kZW5jeSwgSW1wb3J0RW50aXR5Pnt9OwogICAgICB9IGVsc2UgewogICAgICAgIGltcG9ydHMgPSA8aXIuTGlicmFyeURlcGVuZGVuY3ksIEltcG9ydEVudGl0eT57fTsKICAgICAgICBkZXBlbmRlbmNpZXMuZm9yRWFjaCgoaXIuTGlicmFyeURlcGVuZGVuY3kgbm9kZSkgewogICAgICAgICAgaWYgKG5vZGUuaXNFeHBvcnQpIHJldHVybjsKICAgICAgICAgIGltcG9ydHNbbm9kZV0gPSBuZXcgSW1wb3J0RW50aXR5KAogICAgICAgICAgICAgIG5vZGUuaXNEZWZlcnJlZCwKICAgICAgICAgICAgICBub2RlLm5hbWUsCiAgICAgICAgICAgICAgbm9kZS50YXJnZXRMaWJyYXJ5LmltcG9ydFVyaSwKICAgICAgICAgICAgICBlbGVtZW50TWFwLmdldExpYnJhcnkobm9kZS5lbmNsb3NpbmdMaWJyYXJ5KS5jYW5vbmljYWxVcmkpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gaW1wb3J0cy52YWx1ZXM7CiAgfQoKICAvLy8gQ29udmVydCB0aGlzIFtLTGlicmFyeURhdGFdIHRvIHRoZSBjb3JyZXNwb25kaW5nIFtKTGlicmFyeURhdGFdLgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFdoeSBpc24ndCBbaW1wb3J0c10gZW5zdXJlZCB0byBiZSBub24tbnVsbCBoZXJlPwogIEpMaWJyYXJ5RGF0YSBjb252ZXJ0KCkgewogICAgcmV0dXJuIG5ldyBKTGlicmFyeURhdGEobGlicmFyeSwgaW1wb3J0cyk7CiAgfQp9CgovLy8gTWVtYmVyIGRhdGEgZm9yIGEgY2xhc3MuCmFic3RyYWN0IGNsYXNzIEtDbGFzc0VudiB7CiAgLy8vIFRoZSBbaXIuQ2xhc3NdIHRoYXQgZGVmaW5lZCB0aGUgY2xhc3MsIGlmIGFueS4KICBpci5DbGFzcyBnZXQgY2xzOwoKICAvLy8gV2hldGhlciB0aGUgY2xhc3MgaXMgYW4gdW5uYW1lZCBtaXhpbiBhcHBsaWNhdGlvbi4KICBib29sIGdldCBpc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uOwoKICAvLy8gV2hldGhlciB0aGUgY2xhc3MgaXMgYSBtaXhpbiBhcHBsaWNhdGlvbiB0aGF0IG1peGVzIGluIG1ldGhvZHMgd2l0aCBzdXBlcgogIC8vLyBjYWxscy4KICBib29sIGdldCBpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbjsKCiAgLy8vIEVuc3VyZXMgdGhhdCBhbGwgbWVtYmVycyBoYXZlIGJlZW4gY29tcHV0ZWQgZm9yIFtjbHNdLgogIHZvaWQgZW5zdXJlTWVtYmVycyhLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXApOwoKICAvLy8gUmV0dXJuIHRoZSBbTWVtYmVyRW50aXR5XSBmb3IgdGhlIG1lbWJlciBbbmFtZV0gaW4gdGhlIGNsYXNzLiBJZiBbc2V0dGVyXQogIC8vLyBpcyBgdHJ1ZWAsIHRoZSBzZXR0ZXIgb3IgYXNzaWduYWJsZSBmaWVsZCBjb3JyZXNwb25kaW5nIHRvIFtuYW1lXSBpcwogIC8vLyByZXR1cm5lZC4KICBNZW1iZXJFbnRpdHkgbG9va3VwTWVtYmVyKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSk7CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggbWVtYmVyIG9mIFtjbHNdLgogIHZvaWQgZm9yRWFjaE1lbWJlcihJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCB2b2lkIGYoTWVtYmVyRW50aXR5IG1lbWJlcikpOwoKICAvLy8gUmV0dXJuIHRoZSBbQ29uc3RydWN0b3JFbnRpdHldIGZvciB0aGUgY29uc3RydWN0b3IgW25hbWVdIGluIFtjbHNdLgogIENvbnN0cnVjdG9yRW50aXR5IGxvb2t1cENvbnN0cnVjdG9yKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIFN0cmluZyBuYW1lKTsKCiAgLy8vIENhbGxzIFtmXSBmb3IgZWFjaCBjb25zdHJ1Y3RvciBvZiBbY2xzXS4KICB2b2lkIGZvckVhY2hDb25zdHJ1Y3RvcigKICAgICAgSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwgdm9pZCBmKENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yKSk7CgogIC8vLyBDYWxscyBbZl0gZm9yIGVhY2ggY29uc3RydWN0b3IgYm9keSBmb3IgdGhlIGxpdmUgY29uc3RydWN0b3JzIGluIHRoZQogIC8vLyBjbGFzcy4KICB2b2lkIGZvckVhY2hDb25zdHJ1Y3RvckJvZHkodm9pZCBmKENvbnN0cnVjdG9yQm9keUVudGl0eSBjb25zdHJ1Y3RvcikpOwoKICAvLy8gQ29udmVydCB0aGlzIFtLQ2xhc3NFbnZdIHRvIHRoZSBjb3JyZXNwb25kaW5nIFtKQ2xhc3NFbnZdIGNvbnRhaW5pbmcgb25seQogIC8vLyB0aGUgbWVtYmVycyBpbiBbbGl2ZU1lbWJlcnNdLgogIEpDbGFzc0VudiBjb252ZXJ0KElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsCiAgICAgIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPiBsaXZlTWVtYmVyVXNhZ2UpOwp9CgppbnQgb3JkZXJCeUZpbGVPZmZzZXQoaXIuVHJlZU5vZGUgYSwgaXIuVHJlZU5vZGUgYikgewogIHZhciBhTG9jID0gYS5sb2NhdGlvbjsKICB2YXIgYkxvYyA9IGIubG9jYXRpb247CiAgdmFyIGFVcmkgPSAnJHthTG9jLmZpbGV9JzsKICB2YXIgYlVyaSA9ICcke2JMb2MuZmlsZX0nOwogIHZhciB1cmlDb21wYXJlID0gYVVyaS5jb21wYXJlVG8oYlVyaSk7CiAgaWYgKHVyaUNvbXBhcmUgIT0gMCkgcmV0dXJuIHVyaUNvbXBhcmU7CiAgcmV0dXJuIGEuZmlsZU9mZnNldC5jb21wYXJlVG8oYi5maWxlT2Zmc2V0KTsKfQoKLy8vIEVudmlyb25tZW50IGZvciBmYXN0IGxvb2t1cCBvZiBjbGFzcyBtZW1iZXJzLgpjbGFzcyBLQ2xhc3NFbnZJbXBsIGltcGxlbWVudHMgS0NsYXNzRW52IHsKICBAb3ZlcnJpZGUKICBmaW5hbCBpci5DbGFzcyBjbHM7CgogIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gX2NvbnN0cnVjdG9yTWFwOwogIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gX21lbWJlck1hcDsKICBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IF9zZXR0ZXJNYXA7CiAgTGlzdDxpci5NZW1iZXI+IF9tZW1iZXJzOyAvLyBpbiBkZWNsYXJhdGlvbiBvcmRlci4KICBib29sIF9pc1N1cGVyTWl4aW5BcHBsaWNhdGlvbjsKCiAgLy8vIENvbnN0cnVjdG9yIGJvZGllcyBjcmVhdGVkIGZvciB0aGlzIGNsYXNzLgogIExpc3Q8Q29uc3RydWN0b3JCb2R5RW50aXR5PiBfY29uc3RydWN0b3JCb2R5TGlzdDsKCiAgS0NsYXNzRW52SW1wbCh0aGlzLmNscyk7CgogIEtDbGFzc0VudkltcGwuaW50ZXJuYWwodGhpcy5jbHMsIHRoaXMuX2NvbnN0cnVjdG9yTWFwLCB0aGlzLl9tZW1iZXJNYXAsCiAgICAgIHRoaXMuX3NldHRlck1hcCwgdGhpcy5fbWVtYmVycywgdGhpcy5faXNTdXBlck1peGluQXBwbGljYXRpb24pOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uID0+IGNscy5pc0Fub255bW91c01peGluOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbiB7CiAgICBhc3NlcnQoX2lzU3VwZXJNaXhpbkFwcGxpY2F0aW9uICE9IG51bGwpOwogICAgcmV0dXJuIF9pc1N1cGVyTWl4aW5BcHBsaWNhdGlvbjsKICB9CgogIC8vLyBDb3BpZWQgZnJvbSAncGFja2FnZTprZXJuZWwvdHJhbnNmb3JtYXRpb25zL21peGluX2Z1bGxfcmVzb2x1dGlvbi5kYXJ0Jy4KICBpci5Db25zdHJ1Y3RvciBfYnVpbGRGb3J3YXJkaW5nQ29uc3RydWN0b3IoCiAgICAgIENsb25lVmlzaXRvciBjbG9uZXIsIGlyLkNvbnN0cnVjdG9yIHN1cGVyY2xhc3NDb25zdHJ1Y3RvcikgewogICAgdmFyIHN1cGVyRnVuY3Rpb24gPSBzdXBlcmNsYXNzQ29uc3RydWN0b3IuZnVuY3Rpb247CgogICAgLy8gV2Uga2VlcCB0eXBlcyBhbmQgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZSBwYXJhbWV0ZXJzIGJ1dCBhbHdheXMgbWFyayB0aGUKICAgIC8vIHBhcmFtZXRlcnMgYXMgZmluYWwgKHNpbmNlIHdlIGp1c3QgZm9yd2FyZCB0aGVtIHRvIHRoZSBzdXBlcgogICAgLy8gY29uc3RydWN0b3IpLgogICAgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBjbG9uZVZhcmlhYmxlKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gdmFyaWFibGUpIHsKICAgICAgaXIuVmFyaWFibGVEZWNsYXJhdGlvbiBjbG9uZSA9IGNsb25lci5jbG9uZSh2YXJpYWJsZSk7CiAgICAgIGNsb25lLmlzRmluYWwgPSB0cnVlOwogICAgICByZXR1cm4gY2xvbmU7CiAgICB9CgogICAgLy8gQnVpbGQgYSBbRnVuY3Rpb25Ob2RlXSB3aGljaCBoYXMgdGhlIHNhbWUgcGFyYW1ldGVycyBhcyB0aGUgb25lIGluIHRoZQogICAgLy8gc3VwZXJjbGFzcyBjb25zdHJ1Y3Rvci4KICAgIHZhciBwb3NpdGlvbmFsUGFyYW1ldGVycyA9CiAgICAgICAgc3VwZXJGdW5jdGlvbi5wb3NpdGlvbmFsUGFyYW1ldGVycy5tYXAoY2xvbmVWYXJpYWJsZSkudG9MaXN0KCk7CiAgICB2YXIgbmFtZWRQYXJhbWV0ZXJzID0KICAgICAgICBzdXBlckZ1bmN0aW9uLm5hbWVkUGFyYW1ldGVycy5tYXAoY2xvbmVWYXJpYWJsZSkudG9MaXN0KCk7CiAgICB2YXIgZnVuY3Rpb24gPSBuZXcgaXIuRnVuY3Rpb25Ob2RlKG5ldyBpci5FbXB0eVN0YXRlbWVudCgpLAogICAgICAgIHBvc2l0aW9uYWxQYXJhbWV0ZXJzOiBwb3NpdGlvbmFsUGFyYW1ldGVycywKICAgICAgICBuYW1lZFBhcmFtZXRlcnM6IG5hbWVkUGFyYW1ldGVycywKICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50OiBzdXBlckZ1bmN0aW9uLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICAgICAgcmV0dXJuVHlwZTogY29uc3QgaXIuVm9pZFR5cGUoKSk7CgogICAgLy8gQnVpbGQgYSBbU3VwZXJJbml0aWFsaXplcl0gd2hpY2ggdGFrZXMgYWxsIHBvc2l0aW9uYWwvbmFtZWQgcGFyYW1ldGVycwogICAgLy8gYW5kIGZvcndhcmQgdGhlbSB0byB0aGUgc3VwZXIgY2xhc3MgY29uc3RydWN0b3IuCiAgICB2YXIgcG9zaXRpb25hbEFyZ3VtZW50cyA9IDxpci5FeHByZXNzaW9uPltdOwogICAgZm9yICh2YXIgdmFyaWFibGUgaW4gcG9zaXRpb25hbFBhcmFtZXRlcnMpIHsKICAgICAgcG9zaXRpb25hbEFyZ3VtZW50cy5hZGQobmV3IGlyLlZhcmlhYmxlR2V0KHZhcmlhYmxlKSk7CiAgICB9CiAgICB2YXIgbmFtZWRBcmd1bWVudHMgPSA8aXIuTmFtZWRFeHByZXNzaW9uPltdOwogICAgZm9yICh2YXIgdmFyaWFibGUgaW4gbmFtZWRQYXJhbWV0ZXJzKSB7CiAgICAgIG5hbWVkQXJndW1lbnRzLmFkZCgKICAgICAgICAgIG5ldyBpci5OYW1lZEV4cHJlc3Npb24odmFyaWFibGUubmFtZSwgbmV3IGlyLlZhcmlhYmxlR2V0KHZhcmlhYmxlKSkpOwogICAgfQogICAgdmFyIHN1cGVySW5pdGlhbGl6ZXIgPSBuZXcgaXIuU3VwZXJJbml0aWFsaXplcihzdXBlcmNsYXNzQ29uc3RydWN0b3IsCiAgICAgICAgbmV3IGlyLkFyZ3VtZW50cyhwb3NpdGlvbmFsQXJndW1lbnRzLCBuYW1lZDogbmFtZWRBcmd1bWVudHMpKTsKCiAgICAvLyBBc3NlbWJsZSB0aGUgY29uc3RydWN0b3IuCiAgICByZXR1cm4gbmV3IGlyLkNvbnN0cnVjdG9yKGZ1bmN0aW9uLAogICAgICAgIG5hbWU6IHN1cGVyY2xhc3NDb25zdHJ1Y3Rvci5uYW1lLAogICAgICAgIGluaXRpYWxpemVyczogPGlyLkluaXRpYWxpemVyPltzdXBlckluaXRpYWxpemVyXSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGVuc3VyZU1lbWJlcnMoS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwKSB7CiAgICBfZW5zdXJlTWFwcyhlbGVtZW50TWFwKTsKICB9CgogIHZvaWQgX2Vuc3VyZU1hcHMoS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwKSB7CiAgICBpZiAoX21lbWJlck1hcCAhPSBudWxsKSByZXR1cm47CgogICAgX21lbWJlck1hcCA9IDxTdHJpbmcsIGlyLk1lbWJlcj57fTsKICAgIF9zZXR0ZXJNYXAgPSA8U3RyaW5nLCBpci5NZW1iZXI+e307CiAgICBfY29uc3RydWN0b3JNYXAgPSA8U3RyaW5nLCBpci5NZW1iZXI+e307CiAgICB2YXIgbWVtYmVycyA9IDxpci5NZW1iZXI+W107CiAgICBfaXNTdXBlck1peGluQXBwbGljYXRpb24gPSBmYWxzZTsKCiAgICB2b2lkIGFkZEZpZWxkKGlyLkZpZWxkIG1lbWJlciwge2Jvb2wgaW5jbHVkZVN0YXRpY30pIHsKICAgICAgaWYgKCFpbmNsdWRlU3RhdGljICYmIG1lbWJlci5pc1N0YXRpYykgcmV0dXJuOwogICAgICB2YXIgbmFtZSA9IG1lbWJlci5uYW1lLm5hbWU7CiAgICAgIGlmIChuYW1lLmNvbnRhaW5zKCcjJykpIHsKICAgICAgICAvLyBTa2lwIHN5bnRoZXRpYyAuZGlsbCBtZW1iZXJzLgogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfbWVtYmVyTWFwW25hbWVdID0gbWVtYmVyOwogICAgICBpZiAobWVtYmVyLmlzTXV0YWJsZSkgewogICAgICAgIF9zZXR0ZXJNYXBbbmFtZV0gPSBtZW1iZXI7CiAgICAgIH0KICAgICAgbWVtYmVycy5hZGQobWVtYmVyKTsKICAgIH0KCiAgICB2b2lkIGFkZFByb2NlZHVyZShpci5Qcm9jZWR1cmUgbWVtYmVyLAogICAgICAgIHtib29sIGluY2x1ZGVTdGF0aWMsIGJvb2wgaW5jbHVkZU5vU3VjaE1ldGhvZEZvcndhcmRlcnN9KSB7CiAgICAgIGlmIChtZW1iZXIuaXNGb3J3YXJkaW5nU3R1YiAmJiBtZW1iZXIuaXNBYnN0cmFjdCkgewogICAgICAgIC8vIFNraXAgYWJzdHJhY3QgZm9yd2FyZGluZyBzdHVicy4gVGhlc2UgYXJlIG5ldmVyIGVtaXR0ZWQgYnV0IHRoZXkKICAgICAgICAvLyBtaWdodCBzaGFkb3cgdGhlIGluY2x1c2lvbiBvZiBhIG1peGVkIGluIG1ldGhvZCBpbiBjb2RlIGxpa2U6CiAgICAgICAgLy8KICAgICAgICAvLyAgICAgY2xhc3MgU3VwZXIge30KICAgICAgICAvLyAgICAgY2xhc3MgTWl4aW48VD4gewogICAgICAgIC8vICAgICAgIHZvaWQgbWV0aG9kKFQgdCkge30KICAgICAgICAvLyAgICAgfQogICAgICAgIC8vICAgICBjbGFzcyBDbGFzcyBleHRlbmRzIFN1cGVyIHdpdGggTWl4aW48aW50PiB7fQogICAgICAgIC8vICAgICBtYWluKCkgPT4gbmV3IENsYXNzKCkubWV0aG9kKCk7CiAgICAgICAgLy8KICAgICAgICAvLyBIZXJlIGEgc3R1YiBpcyBjcmVhdGVkIGZvciBgU3VwZXImTWl4aW4ubWV0aG9kYCBoaWRpbmcgdGhhdAogICAgICAgIC8vIGBNaXhpbi5tZXRob2RgIGlzIGluaGVyaXRlZCBieSBgQ2xhc3NgLgogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAobWVtYmVyLmlzRm9yd2FyZGluZ1N0dWIgJiYgY2xzLmlzQW5vbnltb3VzTWl4aW4pIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKCFpbmNsdWRlU3RhdGljICYmIG1lbWJlci5pc1N0YXRpYykgcmV0dXJuOwogICAgICBpZiAobWVtYmVyLmlzTm9TdWNoTWV0aG9kRm9yd2FyZGVyKSB7CiAgICAgICAgLy8gVE9ETyhzaWdtdW5kKTogcmVtb3ZlIG9uY2UgIzMzNzMyIGlzIGZpeGVkLgogICAgICAgIGlmICghaW5jbHVkZU5vU3VjaE1ldGhvZEZvcndhcmRlcnMgfHwKICAgICAgICAgICAgbWVtYmVyLm5hbWUuaXNQcml2YXRlICYmCiAgICAgICAgICAgICAgICBtZW1iZXIubmFtZS5saWJyYXJ5TmFtZSAhPSBtZW1iZXIuZW5jbG9zaW5nTGlicmFyeS5yZWZlcmVuY2UpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFyIG5hbWUgPSBtZW1iZXIubmFtZS5uYW1lOwogICAgICBhc3NlcnQoIW5hbWUuY29udGFpbnMoJyMnKSk7CiAgICAgIGlmIChtZW1iZXIua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLkZhY3RvcnkpIHsKICAgICAgICBpZiAoaXNSZWRpcmVjdGluZ0ZhY3RvcnkobWVtYmVyKSkgewogICAgICAgICAgLy8gRG9uJ3QgaW5jbHVkZSByZWRpcmVjdGluZyBmYWN0b3JpZXMuCiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIF9jb25zdHJ1Y3Rvck1hcFtuYW1lXSA9IG1lbWJlcjsKICAgICAgfSBlbHNlIGlmIChtZW1iZXIua2luZCA9PSBpci5Qcm9jZWR1cmVLaW5kLlNldHRlcikgewogICAgICAgIF9zZXR0ZXJNYXBbbmFtZV0gPSBtZW1iZXI7CiAgICAgICAgbWVtYmVycy5hZGQobWVtYmVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQobWVtYmVyLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5NZXRob2QgfHwKICAgICAgICAgICAgbWVtYmVyLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5HZXR0ZXIgfHwKICAgICAgICAgICAgbWVtYmVyLmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5PcGVyYXRvcik7CiAgICAgICAgX21lbWJlck1hcFtuYW1lXSA9IG1lbWJlcjsKICAgICAgICBtZW1iZXJzLmFkZChtZW1iZXIpOwogICAgICB9CiAgICB9CgogICAgdm9pZCBhZGRDb25zdHJ1Y3RvcnMoaXIuQ2xhc3MgYykgewogICAgICBmb3IgKGlyLkNvbnN0cnVjdG9yIG1lbWJlciBpbiBjLmNvbnN0cnVjdG9ycykgewogICAgICAgIHZhciBuYW1lID0gbWVtYmVyLm5hbWUubmFtZTsKICAgICAgICBhc3NlcnQoIW5hbWUuY29udGFpbnMoJyMnKSk7CiAgICAgICAgX2NvbnN0cnVjdG9yTWFwW25hbWVdID0gbWVtYmVyOwogICAgICB9CiAgICB9CgogICAgaW50IG1peGluTWVtYmVyQ291bnQgPSAwOwoKICAgIGlmIChjbHMubWl4ZWRJbkNsYXNzICE9IG51bGwpIHsKICAgICAgQ2xvbmVWaXNpdG9yIGNsb25lVmlzaXRvcjsKICAgICAgZm9yIChpci5GaWVsZCBmaWVsZCBpbiBjbHMubWl4ZWRJbkNsYXNzLm1peGluLmZpZWxkcykgewogICAgICAgIGlmIChmaWVsZC5jb250YWluc1N1cGVyQ2FsbHMpIHsKICAgICAgICAgIF9pc1N1cGVyTWl4aW5BcHBsaWNhdGlvbiA9IHRydWU7CiAgICAgICAgICBjbG9uZVZpc2l0b3IgPz89IG5ldyBDbG9uZVZpc2l0b3IoCiAgICAgICAgICAgICAgdHlwZVN1YnN0aXR1dGlvbjogZ2V0U3Vic3RpdHV0aW9uTWFwKGNscy5taXhlZEluVHlwZSkpOwogICAgICAgICAgY2xzLmFkZE1lbWJlcihjbG9uZVZpc2l0b3IuY2xvbmUoZmllbGQpKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBhZGRGaWVsZChmaWVsZCwgaW5jbHVkZVN0YXRpYzogZmFsc2UpOwogICAgICB9CiAgICAgIGZvciAoaXIuUHJvY2VkdXJlIHByb2NlZHVyZSBpbiBjbHMubWl4ZWRJbkNsYXNzLm1peGluLnByb2NlZHVyZXMpIHsKICAgICAgICBpZiAocHJvY2VkdXJlLmNvbnRhaW5zU3VwZXJDYWxscykgewogICAgICAgICAgX2lzU3VwZXJNaXhpbkFwcGxpY2F0aW9uID0gdHJ1ZTsKICAgICAgICAgIGNsb25lVmlzaXRvciA/Pz0gbmV3IENsb25lVmlzaXRvcigKICAgICAgICAgICAgICB0eXBlU3Vic3RpdHV0aW9uOiBnZXRTdWJzdGl0dXRpb25NYXAoY2xzLm1peGVkSW5UeXBlKSk7CiAgICAgICAgICBjbHMuYWRkTWVtYmVyKGNsb25lVmlzaXRvci5jbG9uZShwcm9jZWR1cmUpKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBhZGRQcm9jZWR1cmUocHJvY2VkdXJlLAogICAgICAgICAgICBpbmNsdWRlU3RhdGljOiBmYWxzZSwgaW5jbHVkZU5vU3VjaE1ldGhvZEZvcndhcmRlcnM6IGZhbHNlKTsKICAgICAgfQogICAgICBtZXJnZVNvcnQobWVtYmVycywgY29tcGFyZTogb3JkZXJCeUZpbGVPZmZzZXQpOwogICAgICBtaXhpbk1lbWJlckNvdW50ID0gbWVtYmVycy5sZW5ndGg7CiAgICB9CgogICAgZm9yIChpci5GaWVsZCBtZW1iZXIgaW4gY2xzLmZpZWxkcykgewogICAgICBhZGRGaWVsZChtZW1iZXIsIGluY2x1ZGVTdGF0aWM6IHRydWUpOwogICAgfQogICAgYWRkQ29uc3RydWN0b3JzKGNscyk7CiAgICBmb3IgKGlyLlByb2NlZHVyZSBtZW1iZXIgaW4gY2xzLnByb2NlZHVyZXMpIHsKICAgICAgYWRkUHJvY2VkdXJlKG1lbWJlciwKICAgICAgICAgIGluY2x1ZGVTdGF0aWM6IHRydWUsIGluY2x1ZGVOb1N1Y2hNZXRob2RGb3J3YXJkZXJzOiB0cnVlKTsKICAgIH0KCiAgICBpZiAoaXNVbm5hbWVkTWl4aW5BcHBsaWNhdGlvbiAmJiBfY29uc3RydWN0b3JNYXAuaXNFbXB0eSkgewogICAgICAvLyBFbnN1cmUgdGhhdCBjb25zdHJ1Y3RvcnMgYXJlIGNyZWF0ZWQgZm9yIHRoZSBzdXBlcmNsYXNzIGluIGNhc2UgaXQKICAgICAgLy8gaXMgYWxzbyBhbiB1bm5hbWVkIG1peGluIGFwcGxpY2F0aW9uLgogICAgICBDbGFzc0VudGl0eSBzdXBlcmNsYXNzID0gZWxlbWVudE1hcC5nZXRDbGFzcyhjbHMuc3VwZXJjbGFzcyk7CiAgICAgIGVsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50Lmxvb2t1cENvbnN0cnVjdG9yKHN1cGVyY2xhc3MsICcnKTsKCiAgICAgIC8vIFVubmFtZWQgbWl4aW4gYXBwbGljYXRpb25zIGhhdmUgbm8gY29uc3RydWN0b3JzIHdoZW4gcmVhZCBmcm9tIC5kaWxsLgogICAgICAvLyBGb3IgZWFjaCBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yIGluIHRoZSBzdXBlcmNsYXNzIHdlIG1ha2UgYQogICAgICAvLyBjb3JyZXNwb25kaW5nIGZvcndhcmRpbmcgY29uc3RydWN0b3IgaW4gdGhlIHN1YmNsYXNzLgogICAgICAvLwogICAgICAvLyBUaGlzIGNvZGUgaXMgY29waWVkIGZyb20KICAgICAgLy8gJ3BhY2thZ2U6a2VybmVsL3RyYW5zZm9ybWF0aW9ucy9taXhpbl9mdWxsX3Jlc29sdXRpb24uZGFydCcKICAgICAgdmFyIHN1cGVyY2xhc3NTdWJzdGl0dXRpb24gPSBnZXRTdWJzdGl0dXRpb25NYXAoY2xzLnN1cGVydHlwZSk7CiAgICAgIHZhciBzdXBlcmNsYXNzQ2xvbmVyID0KICAgICAgICAgIG5ldyBDbG9uZVZpc2l0b3IodHlwZVN1YnN0aXR1dGlvbjogc3VwZXJjbGFzc1N1YnN0aXR1dGlvbik7CgogICAgICBmb3IgKHZhciBzdXBlcmNsYXNzQ29uc3RydWN0b3IgaW4gY2xzLnN1cGVyY2xhc3MuY29uc3RydWN0b3JzKSB7CiAgICAgICAgdmFyIGZvcndhcmRpbmdDb25zdHJ1Y3RvciA9IF9idWlsZEZvcndhcmRpbmdDb25zdHJ1Y3RvcigKICAgICAgICAgICAgc3VwZXJjbGFzc0Nsb25lciwgc3VwZXJjbGFzc0NvbnN0cnVjdG9yKTsKICAgICAgICBjbHMuYWRkTWVtYmVyKGZvcndhcmRpbmdDb25zdHJ1Y3Rvcik7CiAgICAgICAgX2NvbnN0cnVjdG9yTWFwW2ZvcndhcmRpbmdDb25zdHJ1Y3Rvci5uYW1lLm5hbWVdID0KICAgICAgICAgICAgZm9yd2FyZGluZ0NvbnN0cnVjdG9yOwogICAgICB9CiAgICB9CgogICAgbWVyZ2VTb3J0KG1lbWJlcnMsIHN0YXJ0OiBtaXhpbk1lbWJlckNvdW50LCBjb21wYXJlOiBvcmRlckJ5RmlsZU9mZnNldCk7CiAgICBfbWVtYmVycyA9IG1lbWJlcnM7CiAgfQoKICBAb3ZlcnJpZGUKICBNZW1iZXJFbnRpdHkgbG9va3VwTWVtYmVyKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsIFN0cmluZyBuYW1lLAogICAgICB7Ym9vbCBzZXR0ZXI6IGZhbHNlfSkgewogICAgX2Vuc3VyZU1hcHMoZWxlbWVudE1hcCk7CiAgICBpci5NZW1iZXIgbWVtYmVyID0gc2V0dGVyID8gX3NldHRlck1hcFtuYW1lXSA6IF9tZW1iZXJNYXBbbmFtZV07CiAgICByZXR1cm4gbWVtYmVyICE9IG51bGwgPyBlbGVtZW50TWFwLmdldE1lbWJlcihtZW1iZXIpIDogbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaE1lbWJlcihJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCB2b2lkIGYoTWVtYmVyRW50aXR5IG1lbWJlcikpIHsKICAgIF9lbnN1cmVNYXBzKGVsZW1lbnRNYXApOwogICAgX21lbWJlcnMuZm9yRWFjaCgoaXIuTWVtYmVyIG1lbWJlcikgewogICAgICBmKGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG1lbWJlcikpOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdHJ1Y3RvckVudGl0eSBsb29rdXBDb25zdHJ1Y3RvcihJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCBTdHJpbmcgbmFtZSkgewogICAgX2Vuc3VyZU1hcHMoZWxlbWVudE1hcCk7CiAgICBpci5NZW1iZXIgY29uc3RydWN0b3IgPSBfY29uc3RydWN0b3JNYXBbbmFtZV07CiAgICByZXR1cm4gY29uc3RydWN0b3IgIT0gbnVsbCA/IGVsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3IoY29uc3RydWN0b3IpIDogbnVsbDsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgZm9yRWFjaENvbnN0cnVjdG9yKAogICAgICBJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwLCB2b2lkIGYoQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IpKSB7CiAgICBfZW5zdXJlTWFwcyhlbGVtZW50TWFwKTsKICAgIF9jb25zdHJ1Y3Rvck1hcC52YWx1ZXMuZm9yRWFjaCgoaXIuTWVtYmVyIGNvbnN0cnVjdG9yKSB7CiAgICAgIGYoZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikpOwogICAgfSk7CiAgfQoKICB2b2lkIGFkZENvbnN0cnVjdG9yQm9keShDb25zdHJ1Y3RvckJvZHlFbnRpdHkgY29uc3RydWN0b3JCb2R5KSB7CiAgICBfY29uc3RydWN0b3JCb2R5TGlzdCA/Pz0gPENvbnN0cnVjdG9yQm9keUVudGl0eT5bXTsKICAgIF9jb25zdHJ1Y3RvckJvZHlMaXN0LmFkZChjb25zdHJ1Y3RvckJvZHkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCBmb3JFYWNoQ29uc3RydWN0b3JCb2R5KHZvaWQgZihDb25zdHJ1Y3RvckJvZHlFbnRpdHkgY29uc3RydWN0b3IpKSB7CiAgICBfY29uc3RydWN0b3JCb2R5TGlzdD8uZm9yRWFjaChmKTsKICB9CgogIEBvdmVycmlkZQogIEpDbGFzc0VudiBjb252ZXJ0KElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXAsCiAgICAgIE1hcDxNZW1iZXJFbnRpdHksIE1lbWJlclVzYWdlPiBsaXZlTWVtYmVyVXNhZ2UpIHsKICAgIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gY29uc3RydWN0b3JNYXA7CiAgICBNYXA8U3RyaW5nLCBpci5NZW1iZXI+IG1lbWJlck1hcDsKICAgIE1hcDxTdHJpbmcsIGlyLk1lbWJlcj4gc2V0dGVyTWFwOwogICAgTGlzdDxpci5NZW1iZXI+IG1lbWJlcnM7CiAgICBpZiAoX2NvbnN0cnVjdG9yTWFwID09IG51bGwpIHsKICAgICAgY29uc3RydWN0b3JNYXAgPSBjb25zdCA8U3RyaW5nLCBpci5NZW1iZXI+e307CiAgICB9IGVsc2UgewogICAgICBjb25zdHJ1Y3Rvck1hcCA9IDxTdHJpbmcsIGlyLk1lbWJlcj57fTsKICAgICAgX2NvbnN0cnVjdG9yTWFwLmZvckVhY2goKFN0cmluZyBuYW1lLCBpci5NZW1iZXIgbm9kZSkgewogICAgICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBlbGVtZW50TWFwLmdldE1lbWJlcihub2RlKTsKICAgICAgICBpZiAobGl2ZU1lbWJlclVzYWdlLmNvbnRhaW5zS2V5KG1lbWJlcikpIHsKICAgICAgICAgIGNvbnN0cnVjdG9yTWFwW25hbWVdID0gbm9kZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgaWYgKF9tZW1iZXJNYXAgPT0gbnVsbCkgewogICAgICBtZW1iZXJNYXAgPSBjb25zdCA8U3RyaW5nLCBpci5NZW1iZXI+e307CiAgICB9IGVsc2UgewogICAgICBtZW1iZXJNYXAgPSA8U3RyaW5nLCBpci5NZW1iZXI+e307CiAgICAgIF9tZW1iZXJNYXAuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIGlyLk1lbWJlciBub2RlKSB7CiAgICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpOwogICAgICAgIGlmIChsaXZlTWVtYmVyVXNhZ2UuY29udGFpbnNLZXkobWVtYmVyKSkgewogICAgICAgICAgbWVtYmVyTWFwW25hbWVdID0gbm9kZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgaWYgKF9zZXR0ZXJNYXAgPT0gbnVsbCkgewogICAgICBzZXR0ZXJNYXAgPSBjb25zdCA8U3RyaW5nLCBpci5NZW1iZXI+e307CiAgICB9IGVsc2UgewogICAgICBzZXR0ZXJNYXAgPSA8U3RyaW5nLCBpci5NZW1iZXI+e307CiAgICAgIF9zZXR0ZXJNYXAuZm9yRWFjaCgoU3RyaW5nIG5hbWUsIGlyLk1lbWJlciBub2RlKSB7CiAgICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKG5vZGUpOwogICAgICAgIGlmIChsaXZlTWVtYmVyVXNhZ2UuY29udGFpbnNLZXkobWVtYmVyKSkgewogICAgICAgICAgc2V0dGVyTWFwW25hbWVdID0gbm9kZTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgaWYgKF9tZW1iZXJzID09IG51bGwpIHsKICAgICAgbWVtYmVycyA9IGNvbnN0IDxpci5NZW1iZXI+W107CiAgICB9IGVsc2UgewogICAgICBtZW1iZXJzID0gPGlyLk1lbWJlcj5bXTsKICAgICAgX21lbWJlcnMuZm9yRWFjaCgoaXIuTWVtYmVyIG5vZGUpIHsKICAgICAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSk7CiAgICAgICAgaWYgKGxpdmVNZW1iZXJVc2FnZS5jb250YWluc0tleShtZW1iZXIpKSB7CiAgICAgICAgICBtZW1iZXJzLmFkZChub2RlKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIG5ldyBKQ2xhc3NFbnZJbXBsKGNscywgY29uc3RydWN0b3JNYXAsIG1lbWJlck1hcCwgc2V0dGVyTWFwLCBtZW1iZXJzLAogICAgICAgIF9pc1N1cGVyTWl4aW5BcHBsaWNhdGlvbiA/PyBmYWxzZSk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBLQ2xhc3NEYXRhIHsKICBpci5DbGFzcyBnZXQgbm9kZTsKCiAgSW50ZXJmYWNlVHlwZSBnZXQgdGhpc1R5cGU7CiAgSW50ZXJmYWNlVHlwZSBnZXQgcmF3VHlwZTsKICBJbnRlcmZhY2VUeXBlIGdldCBzdXBlcnR5cGU7CiAgSW50ZXJmYWNlVHlwZSBnZXQgbWl4ZWRJblR5cGU7CiAgTGlzdDxJbnRlcmZhY2VUeXBlPiBnZXQgaW50ZXJmYWNlczsKICBPcmRlcmVkVHlwZVNldCBnZXQgb3JkZXJlZFR5cGVTZXQ7CiAgRGFydFR5cGUgZ2V0IGNhbGxUeXBlOwoKICBib29sIGdldCBpc0VudW1DbGFzczsKICBib29sIGdldCBpc01peGluQXBwbGljYXRpb247CgogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldE1ldGFkYXRhKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApOwoKICAvLy8gQ29udmVydCB0aGlzIFtLQ2xhc3NEYXRhXSB0byB0aGUgY29ycmVzcG9uZGluZyBbSkNsYXNzRGF0YV0uCiAgSkNsYXNzRGF0YSBjb252ZXJ0KCk7Cn0KCmNsYXNzIEtDbGFzc0RhdGFJbXBsIGltcGxlbWVudHMgS0NsYXNzRGF0YSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgaXIuQ2xhc3Mgbm9kZTsKICBAb3ZlcnJpZGUKICBib29sIGlzTWl4aW5BcHBsaWNhdGlvbjsKICBib29sIGlzQ2FsbFR5cGVDb21wdXRlZCA9IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIHRoaXNUeXBlOwogIEBvdmVycmlkZQogIEludGVyZmFjZVR5cGUgcmF3VHlwZTsKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIHN1cGVydHlwZTsKICBAb3ZlcnJpZGUKICBJbnRlcmZhY2VUeXBlIG1peGVkSW5UeXBlOwogIEBvdmVycmlkZQogIExpc3Q8SW50ZXJmYWNlVHlwZT4gaW50ZXJmYWNlczsKICBAb3ZlcnJpZGUKICBPcmRlcmVkVHlwZVNldCBvcmRlcmVkVHlwZVNldDsKCiAgSXRlcmFibGU8Q29uc3RhbnRWYWx1ZT4gX21ldGFkYXRhOwoKICBLQ2xhc3NEYXRhSW1wbCh0aGlzLm5vZGUpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VudW1DbGFzcyA9PiBub2RlLmlzRW51bTsKCiAgQG92ZXJyaWRlCiAgRGFydFR5cGUgZ2V0IGNhbGxUeXBlID0+IG51bGw7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldE1ldGFkYXRhKAogICAgICBjb3ZhcmlhbnQgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwKSB7CiAgICByZXR1cm4gX21ldGFkYXRhID8/PSBlbGVtZW50TWFwLmdldE1ldGFkYXRhKG5vZGUuYW5ub3RhdGlvbnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgSkNsYXNzRGF0YSBjb252ZXJ0KCkgewogICAgcmV0dXJuIG5ldyBKQ2xhc3NEYXRhSW1wbChub2RlLCBuZXcgUmVndWxhckNsYXNzRGVmaW5pdGlvbihub2RlKSk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBLTWVtYmVyRGF0YSB7CiAgaXIuTWVtYmVyIGdldCBub2RlOwoKICBTdGF0aWNUeXBlQ2FjaGUgc3RhdGljVHlwZXM7CgogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldE1ldGFkYXRhKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApOwoKICBJbnRlcmZhY2VUeXBlIGdldE1lbWJlclRoaXNUeXBlKEpzVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApOwoKICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBnZXQgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3M7CgogIC8vLyBDb252ZXJ0IHRoaXMgW0tNZW1iZXJEYXRhXSB0byB0aGUgY29ycmVzcG9uZGluZyBbSk1lbWJlckRhdGFdLgogIEpNZW1iZXJEYXRhIGNvbnZlcnQoKTsKfQoKYWJzdHJhY3QgY2xhc3MgS01lbWJlckRhdGFJbXBsIGltcGxlbWVudHMgS01lbWJlckRhdGEgewogIEBvdmVycmlkZQogIGZpbmFsIGlyLk1lbWJlciBub2RlOwoKICBJdGVyYWJsZTxDb25zdGFudFZhbHVlPiBfbWV0YWRhdGE7CgogIEBvdmVycmlkZQogIFN0YXRpY1R5cGVDYWNoZSBzdGF0aWNUeXBlczsKCiAgS01lbWJlckRhdGFJbXBsKHRoaXMubm9kZSk7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENvbnN0YW50VmFsdWU+IGdldE1ldGFkYXRhKAogICAgICBjb3ZhcmlhbnQgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwKSB7CiAgICByZXR1cm4gX21ldGFkYXRhID8/PSBlbGVtZW50TWFwLmdldE1ldGFkYXRhKG5vZGUuYW5ub3RhdGlvbnMpOwogIH0KCiAgQG92ZXJyaWRlCiAgSW50ZXJmYWNlVHlwZSBnZXRNZW1iZXJUaGlzVHlwZShKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0gZWxlbWVudE1hcC5nZXRNZW1iZXIobm9kZSk7CiAgICBDbGFzc0VudGl0eSBjbHMgPSBtZW1iZXIuZW5jbG9zaW5nQ2xhc3M7CiAgICBpZiAoY2xzICE9IG51bGwpIHsKICAgICAgcmV0dXJuIGVsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50LmdldFRoaXNUeXBlKGNscyk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KCmFic3RyYWN0IGNsYXNzIEtGdW5jdGlvbkRhdGEgaW1wbGVtZW50cyBLTWVtYmVyRGF0YSB7CiAgRnVuY3Rpb25UeXBlIGdldEZ1bmN0aW9uVHlwZShJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwKTsKCiAgTGlzdDxUeXBlVmFyaWFibGVUeXBlPiBnZXRGdW5jdGlvblR5cGVWYXJpYWJsZXMoSXJUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCk7CgogIHZvaWQgZm9yRWFjaFBhcmFtZXRlcihKc1RvRWxlbWVudE1hcCBlbGVtZW50TWFwLAogICAgICB2b2lkIGYoRGFydFR5cGUgdHlwZSwgU3RyaW5nIG5hbWUsIENvbnN0YW50VmFsdWUgZGVmYXVsdFZhbHVlKSk7Cn0KCmFic3RyYWN0IGNsYXNzIEtGdW5jdGlvbkRhdGFNaXhpbiBpbXBsZW1lbnRzIEtGdW5jdGlvbkRhdGEgewogIGlyLkZ1bmN0aW9uTm9kZSBnZXQgZnVuY3Rpb25Ob2RlOwogIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gX3R5cGVWYXJpYWJsZXM7CgogIEBvdmVycmlkZQogIExpc3Q8VHlwZVZhcmlhYmxlVHlwZT4gZ2V0RnVuY3Rpb25UeXBlVmFyaWFibGVzKAogICAgICBjb3ZhcmlhbnQgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwKSB7CiAgICBpZiAoX3R5cGVWYXJpYWJsZXMgPT0gbnVsbCkgewogICAgICBpZiAoZnVuY3Rpb25Ob2RlLnR5cGVQYXJhbWV0ZXJzLmlzRW1wdHkpIHsKICAgICAgICBfdHlwZVZhcmlhYmxlcyA9IGNvbnN0IDxUeXBlVmFyaWFibGVUeXBlPltdOwogICAgICB9IGVsc2UgewogICAgICAgIGlyLlRyZWVOb2RlIHBhcmVudCA9IGZ1bmN0aW9uTm9kZS5wYXJlbnQ7CiAgICAgICAgaWYgKHBhcmVudCBpcyBpci5Db25zdHJ1Y3RvciB8fAogICAgICAgICAgICAocGFyZW50IGlzIGlyLlByb2NlZHVyZSAmJgogICAgICAgICAgICAgICAgcGFyZW50LmtpbmQgPT0gaXIuUHJvY2VkdXJlS2luZC5GYWN0b3J5KSkgewogICAgICAgICAgX3R5cGVWYXJpYWJsZXMgPSBjb25zdCA8VHlwZVZhcmlhYmxlVHlwZT5bXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX3R5cGVWYXJpYWJsZXMgPSBmdW5jdGlvbk5vZGUudHlwZVBhcmFtZXRlcnMKICAgICAgICAgICAgICAubWFwPFR5cGVWYXJpYWJsZVR5cGU+KChpci5UeXBlUGFyYW1ldGVyIHR5cGVQYXJhbWV0ZXIpIHsKICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRNYXAKICAgICAgICAgICAgICAgIC5nZXREYXJ0VHlwZShuZXcgaXIuVHlwZVBhcmFtZXRlclR5cGUodHlwZVBhcmFtZXRlcikpOwogICAgICAgICAgfSkudG9MaXN0KCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gX3R5cGVWYXJpYWJsZXM7CiAgfQp9CgpjbGFzcyBLRnVuY3Rpb25EYXRhSW1wbCBleHRlbmRzIEtNZW1iZXJEYXRhSW1wbAogICAgd2l0aCBLRnVuY3Rpb25EYXRhTWl4aW4KICAgIGltcGxlbWVudHMgS0Z1bmN0aW9uRGF0YSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgaXIuRnVuY3Rpb25Ob2RlIGZ1bmN0aW9uTm9kZTsKICBGdW5jdGlvblR5cGUgX3R5cGU7CgogIEtGdW5jdGlvbkRhdGFJbXBsKGlyLk1lbWJlciBub2RlLCB0aGlzLmZ1bmN0aW9uTm9kZSkgOiBzdXBlcihub2RlKTsKCiAgQG92ZXJyaWRlCiAgRnVuY3Rpb25UeXBlIGdldEZ1bmN0aW9uVHlwZShjb3ZhcmlhbnQgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwKSB7CiAgICByZXR1cm4gX3R5cGUgPz89IGVsZW1lbnRNYXAuZ2V0RnVuY3Rpb25UeXBlKGZ1bmN0aW9uTm9kZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIGZvckVhY2hQYXJhbWV0ZXIoSnNUb0VsZW1lbnRNYXAgZWxlbWVudE1hcCwKICAgICAgdm9pZCBmKERhcnRUeXBlIHR5cGUsIFN0cmluZyBuYW1lLCBDb25zdGFudFZhbHVlIGRlZmF1bHRWYWx1ZSkpIHsKICAgIHZvaWQgaGFuZGxlUGFyYW1ldGVyKGlyLlZhcmlhYmxlRGVjbGFyYXRpb24gbm9kZSwge2Jvb2wgaXNPcHRpb25hbDogdHJ1ZX0pIHsKICAgICAgRGFydFR5cGUgdHlwZSA9IGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS50eXBlKTsKICAgICAgU3RyaW5nIG5hbWUgPSBub2RlLm5hbWU7CiAgICAgIENvbnN0YW50VmFsdWUgZGVmYXVsdFZhbHVlOwogICAgICBpZiAoaXNPcHRpb25hbCkgewogICAgICAgIGlmIChub2RlLmluaXRpYWxpemVyICE9IG51bGwpIHsKICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9IGVsZW1lbnRNYXAuZ2V0Q29uc3RhbnRWYWx1ZShub2RlLmluaXRpYWxpemVyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGVmYXVsdFZhbHVlID0gbmV3IE51bGxDb25zdGFudFZhbHVlKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGYodHlwZSwgbmFtZSwgZGVmYXVsdFZhbHVlKTsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMDsgaSA8IGZ1bmN0aW9uTm9kZS5wb3NpdGlvbmFsUGFyYW1ldGVycy5sZW5ndGg7IGkrKykgewogICAgICBoYW5kbGVQYXJhbWV0ZXIoZnVuY3Rpb25Ob2RlLnBvc2l0aW9uYWxQYXJhbWV0ZXJzW2ldLAogICAgICAgICAgaXNPcHRpb25hbDogaSA+PSBmdW5jdGlvbk5vZGUucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICB9CiAgICBmdW5jdGlvbk5vZGUubmFtZWRQYXJhbWV0ZXJzLnRvTGlzdCgpCiAgICAgIC4uc29ydChuYW1lZE9yZGVyaW5nKQogICAgICAuLmZvckVhY2goaGFuZGxlUGFyYW1ldGVyKTsKICB9CgogIEBvdmVycmlkZQogIEZ1bmN0aW9uRGF0YSBjb252ZXJ0KCkgewogICAgcmV0dXJuIG5ldyBGdW5jdGlvbkRhdGFJbXBsKAogICAgICAgIG5vZGUsIGZ1bmN0aW9uTm9kZSwgbmV3IFJlZ3VsYXJNZW1iZXJEZWZpbml0aW9uKG5vZGUpLCBzdGF0aWNUeXBlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBnZXQgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgewogICAgaWYgKG5vZGUuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLnByb3BlcnR5OwogICAgcmV0dXJuIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLm5vbmU7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBLQ29uc3RydWN0b3JEYXRhIGV4dGVuZHMgS0Z1bmN0aW9uRGF0YSB7CiAgQ29uc3RhbnRDb25zdHJ1Y3RvciBnZXRDb25zdHJ1Y3RvckNvbnN0YW50KAogICAgICBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXAsIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yKTsKfQoKY2xhc3MgS0NvbnN0cnVjdG9yRGF0YUltcGwgZXh0ZW5kcyBLRnVuY3Rpb25EYXRhSW1wbAogICAgaW1wbGVtZW50cyBLQ29uc3RydWN0b3JEYXRhIHsKICBDb25zdGFudENvbnN0cnVjdG9yIF9jb25zdGFudENvbnN0cnVjdG9yOwogIENvbnN0cnVjdG9yQm9keUVudGl0eSBjb25zdHJ1Y3RvckJvZHk7CgogIEtDb25zdHJ1Y3RvckRhdGFJbXBsKGlyLk1lbWJlciBub2RlLCBpci5GdW5jdGlvbk5vZGUgZnVuY3Rpb25Ob2RlKQogICAgICA6IHN1cGVyKG5vZGUsIGZ1bmN0aW9uTm9kZSk7CgogIEBvdmVycmlkZQogIENvbnN0YW50Q29uc3RydWN0b3IgZ2V0Q29uc3RydWN0b3JDb25zdGFudCgKICAgICAgS2VybmVsVG9FbGVtZW50TWFwSW1wbCBlbGVtZW50TWFwLCBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvcikgewogICAgaWYgKF9jb25zdGFudENvbnN0cnVjdG9yID09IG51bGwpIHsKICAgICAgaWYgKG5vZGUgaXMgaXIuQ29uc3RydWN0b3IgJiYgY29uc3RydWN0b3IuaXNDb25zdCkgewogICAgICAgIF9jb25zdGFudENvbnN0cnVjdG9yID0KICAgICAgICAgICAgbmV3IENvbnN0YW50aWZpZXIoZWxlbWVudE1hcCkuY29tcHV0ZUNvbnN0YW50Q29uc3RydWN0b3Iobm9kZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmFpbGVkQXQoCiAgICAgICAgICAgIGNvbnN0cnVjdG9yLAogICAgICAgICAgICAiVW5leHBlY3RlZCBjb25zdHJ1Y3RvciAkY29uc3RydWN0b3IgaW4gIgogICAgICAgICAgICAiQ29uc3RydWN0b3JEYXRhSW1wbC5fZ2V0Q29uc3RydWN0b3JDb25zdGFudCIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX2NvbnN0YW50Q29uc3RydWN0b3I7CiAgfQoKICBAb3ZlcnJpZGUKICBKQ29uc3RydWN0b3JEYXRhIGNvbnZlcnQoKSB7CiAgICBNZW1iZXJEZWZpbml0aW9uIGRlZmluaXRpb247CiAgICBpZiAobm9kZSBpcyBpci5Db25zdHJ1Y3RvcikgewogICAgICBkZWZpbml0aW9uID0gbmV3IFNwZWNpYWxNZW1iZXJEZWZpbml0aW9uKG5vZGUsIE1lbWJlcktpbmQuY29uc3RydWN0b3IpOwogICAgfSBlbHNlIHsKICAgICAgZGVmaW5pdGlvbiA9IG5ldyBSZWd1bGFyTWVtYmVyRGVmaW5pdGlvbihub2RlKTsKICAgIH0KICAgIHJldHVybiBuZXcgSkNvbnN0cnVjdG9yRGF0YUltcGwoCiAgICAgICAgbm9kZSwgZnVuY3Rpb25Ob2RlLCBkZWZpbml0aW9uLCBzdGF0aWNUeXBlcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBnZXQgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgPT4KICAgICAgQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MucGFyYW1ldGVyOwp9CgphYnN0cmFjdCBjbGFzcyBLRmllbGREYXRhIGV4dGVuZHMgS01lbWJlckRhdGEgewogIERhcnRUeXBlIGdldEZpZWxkVHlwZShJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwKTsKCiAgQ29uc3RhbnRFeHByZXNzaW9uIGdldEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uKAogICAgICBLZXJuZWxUb0VsZW1lbnRNYXBJbXBsIGVsZW1lbnRNYXApOwp9CgpjbGFzcyBLRmllbGREYXRhSW1wbCBleHRlbmRzIEtNZW1iZXJEYXRhSW1wbCBpbXBsZW1lbnRzIEtGaWVsZERhdGEgewogIERhcnRUeXBlIF90eXBlOwogIENvbnN0YW50RXhwcmVzc2lvbiBfY29uc3RhbnRFeHByZXNzaW9uOwoKICBLRmllbGREYXRhSW1wbChpci5GaWVsZCBub2RlKSA6IHN1cGVyKG5vZGUpOwoKICBAb3ZlcnJpZGUKICBpci5GaWVsZCBnZXQgbm9kZSA9PiBzdXBlci5ub2RlOwoKICBAb3ZlcnJpZGUKICBEYXJ0VHlwZSBnZXRGaWVsZFR5cGUoY292YXJpYW50IEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcCkgewogICAgcmV0dXJuIF90eXBlID8/PSBlbGVtZW50TWFwLmdldERhcnRUeXBlKG5vZGUudHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBDb25zdGFudEV4cHJlc3Npb24gZ2V0RmllbGRDb25zdGFudEV4cHJlc3Npb24oCiAgICAgIEtlcm5lbFRvRWxlbWVudE1hcEltcGwgZWxlbWVudE1hcCkgewogICAgaWYgKF9jb25zdGFudEV4cHJlc3Npb24gPT0gbnVsbCkgewogICAgICBpZiAobm9kZS5pc0NvbnN0KSB7CiAgICAgICAgX2NvbnN0YW50RXhwcmVzc2lvbiA9CiAgICAgICAgICAgIG5ldyBDb25zdGFudGlmaWVyKGVsZW1lbnRNYXApLnZpc2l0KG5vZGUuaW5pdGlhbGl6ZXIpOwogICAgICB9IGVsc2UgewogICAgICAgIGZhaWxlZEF0KAogICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShub2RlKSwKICAgICAgICAgICAgIlVuZXhwZWN0ZWQgZmllbGQgJHtub2RlfSBpbiAiCiAgICAgICAgICAgICJGaWVsZERhdGFJbXBsLmdldEZpZWxkQ29uc3RhbnQiKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF9jb25zdGFudEV4cHJlc3Npb247CiAgfQoKICBAb3ZlcnJpZGUKICBDbGFzc1R5cGVWYXJpYWJsZUFjY2VzcyBnZXQgY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MgewogICAgaWYgKG5vZGUuaXNJbnN0YW5jZU1lbWJlcikgcmV0dXJuIENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzLmluc3RhbmNlRmllbGQ7CiAgICByZXR1cm4gQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3Mubm9uZTsKICB9CgogIEBvdmVycmlkZQogIEpGaWVsZERhdGEgY29udmVydCgpIHsKICAgIHJldHVybiBuZXcgSkZpZWxkRGF0YUltcGwoCiAgICAgICAgbm9kZSwgbmV3IFJlZ3VsYXJNZW1iZXJEZWZpbml0aW9uKG5vZGUpLCBzdGF0aWNUeXBlcyk7CiAgfQp9CgpjbGFzcyBLVHlwZWRlZkRhdGEgewogIGZpbmFsIGlyLlR5cGVkZWYgbm9kZTsKICBmaW5hbCBUeXBlZGVmRW50aXR5IGVsZW1lbnQ7CiAgZmluYWwgVHlwZWRlZlR5cGUgcmF3VHlwZTsKCiAgS1R5cGVkZWZEYXRhKHRoaXMubm9kZSwgdGhpcy5lbGVtZW50LCB0aGlzLnJhd1R5cGUpOwp9CgpjbGFzcyBLVHlwZVZhcmlhYmxlRGF0YSB7CiAgZmluYWwgaXIuVHlwZVBhcmFtZXRlciBub2RlOwogIERhcnRUeXBlIF9ib3VuZDsKICBEYXJ0VHlwZSBfZGVmYXVsdFR5cGU7CgogIEtUeXBlVmFyaWFibGVEYXRhKHRoaXMubm9kZSk7CgogIERhcnRUeXBlIGdldEJvdW5kKElyVG9FbGVtZW50TWFwIGVsZW1lbnRNYXApIHsKICAgIHJldHVybiBfYm91bmQgPz89IGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUobm9kZS5ib3VuZCk7CiAgfQoKICBEYXJ0VHlwZSBnZXREZWZhdWx0VHlwZShJclRvRWxlbWVudE1hcCBlbGVtZW50TWFwKSB7CiAgICAvLyBUT0RPKDM0NTIyKTogUmVtb3ZlIGA/PyBjb25zdCBpci5EeW5hbWljVHlwZSgpYCB3aGVuIGlzc3VlIDM0NTIyIGlzCiAgICAvLyBmaXhlZC4KICAgIHJldHVybiBfZGVmYXVsdFR5cGUgPz89CiAgICAgICAgZWxlbWVudE1hcC5nZXREYXJ0VHlwZShub2RlLmRlZmF1bHRUeXBlID8/IGNvbnN0IGlyLkR5bmFtaWNUeXBlKCkpOwogIH0KCiAgSlR5cGVWYXJpYWJsZURhdGEgY29weSgpIHsKICAgIHJldHVybiBuZXcgSlR5cGVWYXJpYWJsZURhdGEobm9kZSk7CiAgfQp9CoOoAE5OPAEcATkfASgkK04BGSkoIyQhISceGicfIiMoIAE4FEEBJQFCPQE3AS4mISIIBgQBLzZBBgQBHR8qNCIIBgQBSScZHQQBNjUZIwQBOxMZHwQBRTkCAUAUHAEkJSUBHQEbHSkuNggGBAFAJxccBAEwLRchBAEdHioqMi4rFAomODMTMwwpMSIzDBEUUQoIBgQBQT4ZOQQBMRkiMiQTDzYIBgQBTSkxOCYmHi8NKTk6MyIKCgYeLw0pOTozIgoKBjsEAgEVHCU8MwEeAUtGBAFJG0YiQA86OyUsHxksSgwIBhsEAUdLGy8EAgEdGzUUATkmAVANJAE9OQFQSxBEHQEqTgFKTwEvG0kBSw1KAVAkLzcCATYZGR0dKSovAgEyKwwWASolJTUhATE0ARsBSkYBDD4BDCUuJQQBTy5DOAFPRBVMPRwUBgFOHx9IGkNANCpGKgFOODExPQYxLBpQBkpHASEoKjsEAQw6HQQBOCQBKCgtISYBOzUjICkQCCEeIwgbBgErRDpMSQseICURPC8LRzMQCD0QCDUsNy4lUBIKCCMjNSwyEgooOyMdDzk2NyMdCAYBJzYlJSgIBgEeASQhPigrLUY0FAovCEosKy1GOBQKIEkINikGASotBhoyG0UGAUBML0RHAU9FPwkiRUYdRgFHQTYuOyMIBgFNGAQBDEQeHUVBBAEMTx0qJwgEAQxQHTNQBAEMG0odPTEIBAFDOC8EAQxLJgQBDC84KyYmHSM0DS4+OjMnCgoGHi8NKTk6MyIKCgYeLw0pOTozIgoKBhwlDR8qOjMdCgoGUSwEAgEcFQEeHR8hJiUZARgfAUIBQxgCAS0MFwwbIwEMGgwZDBsMHQwiDCEBJQEdAQwnAQwhAQwnNUMEAQwZRwQCAR0WAR8BQgE+ATcBRRkCATgMGAElAQwfAR4BDCc1QwQBDD82LRc9BhEEAgE2OwFOATNHAgE9JCkBDDM1IjE1DzIoJzw3ETdIHkcXCggGGwQCATAcHwwmFgFGAQxOPwQBDDNIUTkfIhgoSBEyCggjBgFJPEEGKhwiBAEMGyFNBAEMOEgpBAIBOC5JAgE1IiwpAUUjAQwuSig7H0wPEhk2PAgGIQQBDB8hIk4NNgYlNgQBDDkpAgEwNAExKgIBRRIqAS8BDCMBDEc4BAEMMSsnGh5DDxIxKy8IBiAEAQw4TSkEAQwZHz8EAgEVGR8dATcCARofExkBIAExOgQBN0sOHEwEAR0oBAIBJHBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9lbnYuZGFydDhzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy91bml2ZXJzZS9mdW5jdGlvbl9zZXQuZGFydKdtLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgdW5pdmVyc2UuZnVuY3Rpb25fc2V0OwoKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCcgc2hvdyBJZGVudGlmaWVycywgU2VsZWN0b3JzOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2luZmVycmVyL2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCcgc2hvdyBIYXNoaW5nLCBTZXRsZXQ7CmltcG9ydCAnc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKCi8vIFRPRE8oa2FzcGVybCk6IFRoaXMgYWN0dWFsbHkgaG9sZHMgZ2V0dGVycyBhbmQgc2V0dGVycyBqdXN0IGZpbmUKLy8gdG9vIGFuZCBzdHJpY2x5IHRoZXkgYXJlbid0IGZ1bmN0aW9ucy4gTWF5YmUgdGhpcyBuZWVkcyBhIGJldHRlcgovLyBuYW1lIC0tIHNvbWV0aGluZyBsaWtlIEVsZW1lbnRTZXQgc2VlbXMgYSBiaXQgdG9vIGdlbmVyaWMuCmNsYXNzIEZ1bmN0aW9uU2V0IHsKICBmaW5hbCBNYXA8U3RyaW5nLCBGdW5jdGlvblNldE5vZGU+IF9ub2RlczsKCiAgZmFjdG9yeSBGdW5jdGlvblNldChJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGxpdmVJbnN0YW5jZU1lbWJlcnMpIHsKICAgIE1hcDxTdHJpbmcsIEZ1bmN0aW9uU2V0Tm9kZT4gbm9kZXMgPSBuZXcgTWFwPFN0cmluZywgRnVuY3Rpb25TZXROb2RlPigpOwogICAgZm9yIChNZW1iZXJFbnRpdHkgbWVtYmVyIGluIGxpdmVJbnN0YW5jZU1lbWJlcnMpIHsKICAgICAgU3RyaW5nIG5hbWUgPSBtZW1iZXIubmFtZTsKICAgICAgKG5vZGVzW25hbWVdID8/PSBuZXcgRnVuY3Rpb25TZXROb2RlKG5hbWUpKS5hZGQobWVtYmVyKTsKICAgIH0KICAgIHJldHVybiBuZXcgRnVuY3Rpb25TZXQuaW50ZXJuYWwobm9kZXMpOwogIH0KCiAgRnVuY3Rpb25TZXQuaW50ZXJuYWwodGhpcy5fbm9kZXMpOwoKICBib29sIGNvbnRhaW5zKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBhc3NlcnQoZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyKTsKICAgIGFzc2VydCghZWxlbWVudC5pc0Fic3RyYWN0KTsKICAgIFN0cmluZyBuYW1lID0gZWxlbWVudC5uYW1lOwogICAgRnVuY3Rpb25TZXROb2RlIG5vZGUgPSBfbm9kZXNbbmFtZV07CiAgICByZXR1cm4gKG5vZGUgIT0gbnVsbCkgPyBub2RlLmNvbnRhaW5zKGVsZW1lbnQpIDogZmFsc2U7CiAgfQoKICAvLy8gUmV0dXJucyBhbGwgdGhlIGZ1bmN0aW9ucyB0aGF0IG1heSBiZSBpbnZva2VkIHdpdGggdGhlIFtzZWxlY3Rvcl0gb24gYQogIC8vLyByZWNlaXZlciB3aXRoIHRoZSBnaXZlbiBbY29uc3RyYWludF0uIFRoZSByZXR1cm5lZCBlbGVtZW50cyBtYXkgaW5jbHVkZQogIC8vLyBub1N1Y2hNZXRob2QgaGFuZGxlcnMgdGhhdCBhcmUgcG90ZW50aWFsIHRhcmdldHMgaW5kaXJlY3RseSB0aHJvdWdoIHRoZQogIC8vLyBub1N1Y2hNZXRob2QgbWVjaGFuaXNtLgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZmlsdGVyKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlciwgQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pIHsKICAgIHJldHVybiBxdWVyeShzZWxlY3RvciwgcmVjZWl2ZXIsIGRvbWFpbikuZnVuY3Rpb25zOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIG1hc2sgZm9yIHRoZSBwb3RlbnRpYWwgcmVjZWl2ZXJzIG9mIGEgZHluYW1pYyBjYWxsIHRvCiAgLy8vIFtzZWxlY3Rvcl0gb24gW2NvbnN0cmFpbnRdLgogIC8vLwogIC8vLyBUaGlzIHdpbGwgbmFycm93IHRoZSBjb25zdHJhaW50cyBvZiBbY29uc3RyYWludF0gdG8gYSBbVHlwZU1hc2tdIG9mIHRoZQogIC8vLyBzZXQgb2YgY2xhc3NlcyB0aGF0IGFjdHVhbGx5IGltcGxlbWVudCB0aGUgc2VsZWN0ZWQgbWVtYmVyIG9yIGltcGxlbWVudAogIC8vLyB0aGUgaGFuZGxpbmcgJ25vU3VjaE1ldGhvZCcgd2hlcmUgdGhlIHNlbGVjdGVkIG1lbWJlciBpcyB1bmltcGxlbWVudGVkLgogIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlciwgQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pIHsKICAgIHJldHVybiBxdWVyeShzZWxlY3RvciwgcmVjZWl2ZXIsIGRvbWFpbikuY29tcHV0ZU1hc2soZG9tYWluKTsKICB9CgogIFNlbGVjdG9yTWFzayBfY3JlYXRlU2VsZWN0b3JNYXNrKAogICAgICBTZWxlY3RvciBzZWxlY3RvciwgQWJzdHJhY3RWYWx1ZSByZWNlaXZlciwgQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pIHsKICAgIHJldHVybiByZWNlaXZlciAhPSBudWxsCiAgICAgICAgPyBuZXcgU2VsZWN0b3JNYXNrKHNlbGVjdG9yLCByZWNlaXZlcikKICAgICAgICA6IG5ldyBTZWxlY3Rvck1hc2soc2VsZWN0b3IsIGRvbWFpbi5keW5hbWljVHlwZSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB0aGUgdGFyZ2V0IG9mIGEgY2FsbCB0bwogIC8vLyBbc2VsZWN0b3JdIG9uIGEgcmVjZWl2ZXIgY29uc3RyYWluZWQgYnkgW2NvbnN0cmFpbnRdIGluY2x1ZGluZwogIC8vLyAnbm9TdWNoTWV0aG9kJyBtZXRob2RzIHdoZXJlIGFwcGxpY2FibGUuCiAgRnVuY3Rpb25TZXRRdWVyeSBxdWVyeSgKICAgICAgU2VsZWN0b3Igc2VsZWN0b3IsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXIsIEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKSB7CiAgICBTdHJpbmcgbmFtZSA9IHNlbGVjdG9yLm5hbWU7CiAgICBTZWxlY3Rvck1hc2sgc2VsZWN0b3JNYXNrID0gX2NyZWF0ZVNlbGVjdG9yTWFzayhzZWxlY3RvciwgcmVjZWl2ZXIsIGRvbWFpbik7CiAgICBTZWxlY3Rvck1hc2sgbm9TdWNoTWV0aG9kTWFzayA9CiAgICAgICAgbmV3IFNlbGVjdG9yTWFzayhTZWxlY3RvcnMubm9TdWNoTWV0aG9kXywgc2VsZWN0b3JNYXNrLnJlY2VpdmVyKTsKICAgIEZ1bmN0aW9uU2V0Tm9kZSBub2RlID0gX25vZGVzW25hbWVdOwogICAgRnVuY3Rpb25TZXROb2RlIG5vU3VjaE1ldGhvZHMgPSBfbm9kZXNbSWRlbnRpZmllcnMubm9TdWNoTWV0aG9kX107CiAgICBpZiAobm9kZSAhPSBudWxsKSB7CiAgICAgIHJldHVybiBub2RlLnF1ZXJ5KHNlbGVjdG9yTWFzaywgZG9tYWluLCBub1N1Y2hNZXRob2RzLCBub1N1Y2hNZXRob2RNYXNrKTsKICAgIH0KICAgIC8vIElmIHRoZXJlIGlzIG5vIG1ldGhvZCB0aGF0IG1hdGNoZXMgW3NlbGVjdG9yXSB3ZSBrbm93IHdlIGNhbgogICAgLy8gb25seSBoaXQgWzpub1N1Y2hNZXRob2Q6XS4KICAgIGlmIChub1N1Y2hNZXRob2RzID09IG51bGwpIHsKICAgICAgcmV0dXJuIGNvbnN0IEVtcHR5RnVuY3Rpb25TZXRRdWVyeSgpOwogICAgfQogICAgcmV0dXJuIG5vU3VjaE1ldGhvZHMucXVlcnkobm9TdWNoTWV0aG9kTWFzaywgZG9tYWluKTsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihNZW1iZXJFbnRpdHkgbWVtYmVyKSkgewogICAgX25vZGVzLmZvckVhY2goKFN0cmluZyBuYW1lLCBGdW5jdGlvblNldE5vZGUgbm9kZSkgewogICAgICBub2RlLmZvckVhY2goYWN0aW9uKTsKICAgIH0pOwogIH0KfQoKLy8vIEEgc2VsZWN0b3IvY29uc3RyYWludCBwYWlyIHJlcHJlc2VudGluZyB0aGUgZHluYW1pYyBpbnZvY2F0aW9uIG9mIFtzZWxlY3Rvcl0KLy8vIG9uIGEgcmVjZWl2ZXIgY29uc3RyYWluZWQgYnkgW2NvbnN0cmFpbnRdLgpjbGFzcyBTZWxlY3Rvck1hc2sgewogIGZpbmFsIFNlbGVjdG9yIHNlbGVjdG9yOwogIGZpbmFsIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXI7CiAgQG92ZXJyaWRlCiAgZmluYWwgaW50IGhhc2hDb2RlOwoKICBTZWxlY3Rvck1hc2sodGhpcy5zZWxlY3RvciwgdGhpcy5yZWNlaXZlcikKICAgICAgOiB0aGlzLmhhc2hDb2RlID0KICAgICAgICAgICAgSGFzaGluZy5taXhIYXNoQ29kZUJpdHMoc2VsZWN0b3IuaGFzaENvZGUsIHJlY2VpdmVyLmhhc2hDb2RlKSB7CiAgICBhc3NlcnQocmVjZWl2ZXIgIT0gbnVsbCk7CiAgfQoKICBTdHJpbmcgZ2V0IG5hbWUgPT4gc2VsZWN0b3IubmFtZTsKCiAgYm9vbCBhcHBsaWVzKE1lbWJlckVudGl0eSBlbGVtZW50LCBBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbikgewogICAgaWYgKCFzZWxlY3Rvci5hcHBsaWVzVW5uYW1lZChlbGVtZW50KSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGRvbWFpbgogICAgICAgIC5pc1RhcmdldGluZ01lbWJlcihyZWNlaXZlciwgZWxlbWVudCwgc2VsZWN0b3IubWVtYmVyTmFtZSkKICAgICAgICAuaXNQb3RlbnRpYWxseVRydWU7CiAgfQoKICBib29sIG5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmcoQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pIHsKICAgIHJldHVybiBkb21haW4KICAgICAgICAubmVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZyhyZWNlaXZlciwgc2VsZWN0b3IpCiAgICAgICAgLmlzUG90ZW50aWFsbHlUcnVlOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIHNlbGVjdG9yID09IG90aGVyLnNlbGVjdG9yICYmIHJlY2VpdmVyID09IG90aGVyLnJlY2VpdmVyOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJygkc2VsZWN0b3IsJHJlY2VpdmVyKSc7Cn0KCi8vLyBBIG5vZGUgaW4gdGhlIFtGdW5jdGlvblNldF0gY2FjaGluZyBhbGwgW0Z1bmN0aW9uU2V0UXVlcnldIG9iamVjdCBmb3IKLy8vIHNlbGVjdG9ycyB3aXRoIHRoZSBzYW1lIFtuYW1lXS4KY2xhc3MgRnVuY3Rpb25TZXROb2RlIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBNYXA8U2VsZWN0b3JNYXNrLCBGdW5jdGlvblNldFF1ZXJ5PiBjYWNoZSA9CiAgICAgIDxTZWxlY3Rvck1hc2ssIEZ1bmN0aW9uU2V0UXVlcnk+e307CgogIC8vIEluaXRpYWxseSwgd2Uga2VlcCB0aGUgZWxlbWVudHMgaW4gYSBsaXN0IGJlY2F1c2UgaXQgaXMgbW9yZQogIC8vIGNvbXBhY3QgdGhhbiBhIGhhc2ggc2V0LiBPbmNlIHdlIGdldCBlbm91Z2ggZWxlbWVudHMsIHdlIGNoYW5nZQogIC8vIHRoZSByZXByZXNlbnRhdGlvbiB0byBiZSBhIHNldCB0byBnZXQgZmFzdGVyIGNvbnRhaW5zIGNoZWNrcy4KICBzdGF0aWMgY29uc3QgaW50IE1BWF9FTEVNRU5UU19JTl9MSVNUID0gODsKICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IGVsZW1lbnRzID0gPE1lbWJlckVudGl0eT5bXTsKICBib29sIGlzTGlzdCA9IHRydWU7CgogIEZ1bmN0aW9uU2V0Tm9kZSh0aGlzLm5hbWUpOwoKICB2b2lkIGFkZChNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGVsZW1lbnQubmFtZSA9PSBuYW1lKTsKICAgIC8vIFdlIHRyeSB0byBhdm9pZCBjbGVhcmluZyB0aGUgY2FjaGUgdW5sZXNzIHdlIGhhdmUgdG8uIEZvciB0aGF0CiAgICAvLyByZWFzb24gd2Uga2VlcCB0aGUgZXhwbGljaXQgY29udGFpbnMgY2hlY2sgZXZlbiB0aG91Z2ggdGhlIGFkZAogICAgLy8gbWV0aG9kIGVuZHMgdXAgZG9pbmcgdGhlIHdvcmsgYWdhaW4gKGZvciBzZXRzKS4KICAgIGlmICghZWxlbWVudHMuY29udGFpbnMoZWxlbWVudCkpIHsKICAgICAgaWYgKGlzTGlzdCAmJiBlbGVtZW50cy5sZW5ndGggPj0gTUFYX0VMRU1FTlRTX0lOX0xJU1QpIHsKICAgICAgICBlbGVtZW50cyA9IGVsZW1lbnRzLnRvU2V0KCk7CiAgICAgICAgaXNMaXN0ID0gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKGlzTGlzdCkgewogICAgICAgIExpc3Q8TWVtYmVyRW50aXR5PiBsaXN0ID0gZWxlbWVudHM7CiAgICAgICAgbGlzdC5hZGQoZWxlbWVudCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgU2V0PE1lbWJlckVudGl0eT4gc2V0ID0gZWxlbWVudHM7CiAgICAgICAgc2V0LmFkZChlbGVtZW50KTsKICAgICAgfQogICAgICBpZiAoIWNhY2hlLmlzRW1wdHkpIGNhY2hlLmNsZWFyKCk7CiAgICB9CiAgfQoKICB2b2lkIHJlbW92ZShNZW1iZXJFbnRpdHkgZWxlbWVudCkgewogICAgYXNzZXJ0KGVsZW1lbnQubmFtZSA9PSBuYW1lKTsKICAgIGlmIChpc0xpc3QpIHsKICAgICAgTGlzdDxNZW1iZXJFbnRpdHk+IGxpc3QgPSBlbGVtZW50czsKICAgICAgaW50IGluZGV4ID0gbGlzdC5pbmRleE9mKGVsZW1lbnQpOwogICAgICBpZiAoaW5kZXggPCAwKSByZXR1cm47CiAgICAgIE1lbWJlckVudGl0eSBsYXN0ID0gbGlzdC5yZW1vdmVMYXN0KCk7CiAgICAgIGlmIChpbmRleCAhPSBsaXN0Lmxlbmd0aCkgewogICAgICAgIGxpc3RbaW5kZXhdID0gbGFzdDsKICAgICAgfQogICAgICBpZiAoIWNhY2hlLmlzRW1wdHkpIGNhY2hlLmNsZWFyKCk7CiAgICB9IGVsc2UgewogICAgICBTZXQ8TWVtYmVyRW50aXR5PiBzZXQgPSBlbGVtZW50czsKICAgICAgaWYgKHNldC5yZW1vdmUoZWxlbWVudCkpIHsKICAgICAgICAvLyBUbyBhdm9pZCB3b2JibGluZyBiZXR3ZWVuIHRoZSB0d28gcmVwcmVzZW50YXRpb25zLCB3ZSBkbwogICAgICAgIC8vIG5vdCB0cmFuc2l0aW9uIGJhY2sgdG8gdGhlIGxpc3QgcmVwcmVzZW50YXRpb24gZXZlbiBpZiB3ZQogICAgICAgIC8vIGVuZCB1cCB3aXRoIGZldyBlbm91Z2ggZWxlbWVudHMgYXQgdGhpcyBwb2ludC4KICAgICAgICBpZiAoIWNhY2hlLmlzRW1wdHkpIGNhY2hlLmNsZWFyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIGJvb2wgY29udGFpbnMoTWVtYmVyRW50aXR5IGVsZW1lbnQpIHsKICAgIGFzc2VydChlbGVtZW50Lm5hbWUgPT0gbmFtZSk7CiAgICByZXR1cm4gZWxlbWVudHMuY29udGFpbnMoZWxlbWVudCk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oTWVtYmVyRW50aXR5IG1lbWJlcikpIHsKICAgIGVsZW1lbnRzLmZvckVhY2goYWN0aW9uKTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSBzZXQgb2YgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHRoZSB0YXJnZXQgb2YgW3NlbGVjdG9yTWFza10KICAvLy8gaW5jbHVkaW5nIG5vIHN1Y2ggbWV0aG9kIGhhbmRsaW5nIHdoZXJlIGFwcGxpY2FibGUuCiAgRnVuY3Rpb25TZXRRdWVyeSBxdWVyeShTZWxlY3Rvck1hc2sgc2VsZWN0b3JNYXNrLCBBYnN0cmFjdFZhbHVlRG9tYWluIGRvbWFpbiwKICAgICAgW0Z1bmN0aW9uU2V0Tm9kZSBub1N1Y2hNZXRob2RzLCBTZWxlY3Rvck1hc2sgbm9TdWNoTWV0aG9kTWFza10pIHsKICAgIGFzc2VydChzZWxlY3Rvck1hc2submFtZSA9PSBuYW1lKTsKICAgIEZ1bmN0aW9uU2V0UXVlcnkgcmVzdWx0ID0gY2FjaGVbc2VsZWN0b3JNYXNrXTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKCiAgICBTZXRsZXQ8TWVtYmVyRW50aXR5PiBmdW5jdGlvbnM7CiAgICBmb3IgKE1lbWJlckVudGl0eSBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgIGlmIChzZWxlY3Rvck1hc2suYXBwbGllcyhlbGVtZW50LCBkb21haW4pKSB7CiAgICAgICAgaWYgKGZ1bmN0aW9ucyA9PSBudWxsKSB7CiAgICAgICAgICAvLyBEZWZlciB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgZnVuY3Rpb25zIHNldCB1bnRpbCB3ZSBhcmUKICAgICAgICAgIC8vIHN1cmUgd2UgbmVlZCBpdC4gVGhpcyBhbGxvd3MgdXMgdG8gcmV0dXJuIGltbXV0YWJsZSBlbXB0eQogICAgICAgICAgLy8gbGlzdHMgd2hlbiB0aGUgZmlsdGVyaW5nIHByb2R1Y2VkIG5vIHJlc3VsdHMuCiAgICAgICAgICBmdW5jdGlvbnMgPSBuZXcgU2V0bGV0PE1lbWJlckVudGl0eT4oKTsKICAgICAgICB9CiAgICAgICAgZnVuY3Rpb25zLmFkZChlbGVtZW50KTsKICAgICAgfQogICAgfQoKICAgIC8vIElmIHdlIGNhbm5vdCBlbnN1cmUgYSBtZXRob2Qgd2lsbCBiZSBmb3VuZCBhdCBydW50aW1lLCB3ZSBhbHNvCiAgICAvLyBhZGQgW25vU3VjaE1ldGhvZF0gaW1wbGVtZW50YXRpb25zIHRoYXQgYXBwbHkgdG8gW21hc2tdIGFzCiAgICAvLyBwb3RlbnRpYWwgdGFyZ2V0cy4KICAgIGlmIChub1N1Y2hNZXRob2RzICE9IG51bGwgJiYKICAgICAgICBzZWxlY3Rvck1hc2submVlZHNOb1N1Y2hNZXRob2RIYW5kbGluZyhkb21haW4pKSB7CiAgICAgIEZ1bmN0aW9uU2V0UXVlcnkgbm9TdWNoTWV0aG9kUXVlcnkgPQogICAgICAgICAgbm9TdWNoTWV0aG9kcy5xdWVyeShub1N1Y2hNZXRob2RNYXNrLCBkb21haW4pOwogICAgICBpZiAoIW5vU3VjaE1ldGhvZFF1ZXJ5LmZ1bmN0aW9ucy5pc0VtcHR5KSB7CiAgICAgICAgaWYgKGZ1bmN0aW9ucyA9PSBudWxsKSB7CiAgICAgICAgICBmdW5jdGlvbnMgPQogICAgICAgICAgICAgIG5ldyBTZXRsZXQ8TWVtYmVyRW50aXR5Pi5mcm9tKG5vU3VjaE1ldGhvZFF1ZXJ5LmZ1bmN0aW9ucyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZ1bmN0aW9ucy5hZGRBbGwobm9TdWNoTWV0aG9kUXVlcnkuZnVuY3Rpb25zKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGNhY2hlW3NlbGVjdG9yTWFza10gPSByZXN1bHQgPSAoZnVuY3Rpb25zICE9IG51bGwpCiAgICAgICAgPyBuZXcgRnVsbEZ1bmN0aW9uU2V0UXVlcnkoZnVuY3Rpb25zKQogICAgICAgIDogY29uc3QgRW1wdHlGdW5jdGlvblNldFF1ZXJ5KCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoJ0Z1bmN0aW9uU2V0Tm9kZSgnKTsKICAgIFN0cmluZyBjb21tYSA9ICcnOwogICAgY2FjaGUuZm9yRWFjaCgobWFzaywgcXVlcnkpIHsKICAgICAgc2Iud3JpdGUoY29tbWEpOwogICAgICBzYi53cml0ZSgnJG1hc2s9JHF1ZXJ5Jyk7CiAgICAgIGNvbW1hID0gJywnOwogICAgfSk7CiAgICBzYi53cml0ZSgnKScpOwogICAgcmV0dXJuIHNiLnRvU3RyaW5nKCk7CiAgfQp9CgovLy8gQSBzZXQgb2YgZnVuY3Rpb25zIHRoYXQgYXJlIHRoZSBwb3RlbnRpYWwgdGFyZ2V0cyBvZiBhbGwgY2FsbCBzaXRlcyBzaGFyaW5nCi8vLyB0aGUgc2FtZSByZWNlaXZlciBtYXNrIGFuZCBzZWxlY3Rvci4KYWJzdHJhY3QgY2xhc3MgRnVuY3Rpb25TZXRRdWVyeSB7CiAgY29uc3QgRnVuY3Rpb25TZXRRdWVyeSgpOwoKICAvLy8gQ29tcHV0ZSB0aGUgdHlwZSBvZiBhbGwgcG90ZW50aWFsIHJlY2VpdmVycyBvZiB0aGlzIGZ1bmN0aW9uIHNldC4KICBBYnN0cmFjdFZhbHVlIGNvbXB1dGVNYXNrKEFic3RyYWN0VmFsdWVEb21haW4gZG9tYWluKTsKCiAgLy8vIFJldHVybnMgYWxsIHBvdGVudGlhbCB0YXJnZXRzIG9mIHRoaXMgZnVuY3Rpb24gc2V0LgogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IGZ1bmN0aW9uczsKfQoKY2xhc3MgRW1wdHlGdW5jdGlvblNldFF1ZXJ5IGltcGxlbWVudHMgRnVuY3Rpb25TZXRRdWVyeSB7CiAgY29uc3QgRW1wdHlGdW5jdGlvblNldFF1ZXJ5KCk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZU1hc2soQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pID0+IGRvbWFpbi5lbXB0eVR5cGU7CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPE1lbWJlckVudGl0eT4gZ2V0IGZ1bmN0aW9ucyA9PiBjb25zdCA8TWVtYmVyRW50aXR5PltdOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnPGVtcHR5Pic7Cn0KCmNsYXNzIEZ1bGxGdW5jdGlvblNldFF1ZXJ5IGltcGxlbWVudHMgRnVuY3Rpb25TZXRRdWVyeSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgSXRlcmFibGU8TWVtYmVyRW50aXR5PiBmdW5jdGlvbnM7CgogIEFic3RyYWN0VmFsdWUgX3JlY2VpdmVyOwoKICBGdWxsRnVuY3Rpb25TZXRRdWVyeSh0aGlzLmZ1bmN0aW9ucyk7CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgY29tcHV0ZU1hc2soQWJzdHJhY3RWYWx1ZURvbWFpbiBkb21haW4pIHsKICAgIHJldHVybiBfcmVjZWl2ZXIgPz89IGRvbWFpbi5jb21wdXRlUmVjZWl2ZXIoZnVuY3Rpb25zKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICckX3JlY2VpdmVyOiRmdW5jdGlvbnMnOwp9CoEtAE5OPAEfATskMTEmAUREPhQtAURNNyE/BiwEASUBKCYhICk8BAFNTk4eIU84BAFIIgZOTk4eT0IEASRPHC86BAFHRS8aTyFRJEopRxhQBkQiISwGOgQBMzkcCAQCAVEvFRsgDBYBLRhMHgQBJAFDORJDHAQBPxI3HAQBDBwtRQQBDDACAUokGBU0KgFCRUMtNhYBHgEjIkZGNyc/JRgIFCwbDyoaCCkGBAEmIhIqKR0tIhwIKQ0oIURFOisIBgQBKCInBAEzHgQBTDpQSCczJwEkLTMhREc7MgogCAYBRkIaITorOTIhFkoROQoIBjcuKRMEAQwWKiIXIhcgEwgTGgQCAVApIhwBSDkBOigCATohAQxNAQxCAQwiAgE5DCoBGwEoAQw6PAQBDDACAS9wYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS9mdW5jdGlvbl9zZXQuZGFydERzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvYXBpX3Byb3RvdHlwZS9jb25zdGFudF9ldmFsdWF0b3IuZGFydIH+Ly8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZnJvbnRfZW5kLmNvbnN0YW50X2V2YWx1YXRvcjsKCmV4cG9ydCAnLi4vZmFzdGEva2VybmVsL2NvbnN0YW50X2V2YWx1YXRvci5kYXJ0JwogICAgc2hvdwogICAgICAgIENvbnN0YW50RXZhbHVhdG9yLAogICAgICAgIENvbnN0YW50c1RyYW5zZm9ybWVyLAogICAgICAgIEVycm9yUmVwb3J0ZXIsCiAgICAgICAgRXZhbHVhdGlvbkVudmlyb25tZW50LAogICAgICAgIFNpbXBsZUVycm9yUmVwb3J0ZXIsCiAgICAgICAgdHJhbnNmb3JtQ29tcG9uZW50LAogICAgICAgIHRyYW5zZm9ybUxpYnJhcmllczsKEQBOTjwBJgExCRseFx8dHBwBO3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL2NvbnN0YW50X2V2YWx1YXRvci5kYXJ0N3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2tlcm5lbC9rZXJuZWxfaW1wYWN0LmRhcnTAAIGoLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAncGFja2FnZTprZXJuZWwvYXN0LmRhcnQnIGFzIGlyOwppbXBvcnQgJ3BhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydCcgYXMgaXI7CgppbXBvcnQgJy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi9jb21tb24vbmFtZXMuZGFydCc7CmltcG9ydCAnLi4vY29tbW9uL3Jlc29sdXRpb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9leHByZXNzaW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9jb25zdGFudHMvdmFsdWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2lyL2NvbnN0YW50cy5kYXJ0JzsKaW1wb3J0ICcuLi9pci9pbXBhY3QuZGFydCc7CmltcG9ydCAnLi4vaXIvaW1wYWN0X2RhdGEuZGFydCc7CmltcG9ydCAnLi4vaXIvcnVudGltZV90eXBlX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJy4uL2lyL3Njb3BlLmRhcnQnOwppbXBvcnQgJy4uL2lyL3N0YXRpY190eXBlLmRhcnQnOwppbXBvcnQgJy4uL2lyL3V0aWwuZGFydCc7CmltcG9ydCAnLi4vaXIvdmlzaXRvcnMuZGFydCc7CmltcG9ydCAnLi4vanNfYmFja2VuZC9hbm5vdGF0aW9ucy5kYXJ0JzsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL25hdGl2ZV9kYXRhLmRhcnQnOwppbXBvcnQgJy4uL25hdGl2ZS9iZWhhdmlvci5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3Jlc29sdXRpb24vcmVnaXN0cnkuZGFydCcgc2hvdyBSZXNvbHV0aW9uV29ybGRJbXBhY3RCdWlsZGVyOwppbXBvcnQgJy4uL3VuaXZlcnNlL2NhbGxfc3RydWN0dXJlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL2ZlYXR1cmUuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2UvdXNlLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnZWxlbWVudF9tYXAuZGFydCc7CgovLy8gVmlzaXRvciB0aGF0IGNvbXB1dGVzIHRoZSB3b3JsZCBpbXBhY3Qgb2YgYSBtZW1iZXIuCmNsYXNzIEtlcm5lbEltcGFjdEJ1aWxkZXIgZXh0ZW5kcyBJbXBhY3RCdWlsZGVyQmFzZQogICAgd2l0aCBLZXJuZWxJbXBhY3RSZWdpc3RyeU1peGluIHsKICBAb3ZlcnJpZGUKICBmaW5hbCBSZXNvbHV0aW9uV29ybGRJbXBhY3RCdWlsZGVyIGltcGFjdEJ1aWxkZXI7CiAgQG92ZXJyaWRlCiAgZmluYWwgS2VybmVsVG9FbGVtZW50TWFwIGVsZW1lbnRNYXA7CiAgQG92ZXJyaWRlCiAgZmluYWwgRGlhZ25vc3RpY1JlcG9ydGVyIHJlcG9ydGVyOwogIEBvdmVycmlkZQogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICBAb3ZlcnJpZGUKICBmaW5hbCBNZW1iZXJFbnRpdHkgY3VycmVudE1lbWJlcjsKICBmaW5hbCBTZXQ8UHJhZ21hQW5ub3RhdGlvbj4gX2Fubm90YXRpb25zOwogIEBvdmVycmlkZQogIGZpbmFsIENvbnN0YW50VmFsdWVmaWVyIF9jb25zdGFudFZhbHVlZmllcjsKCiAgS2VybmVsSW1wYWN0QnVpbGRlcigKICAgICAgdGhpcy5lbGVtZW50TWFwLAogICAgICB0aGlzLmN1cnJlbnRNZW1iZXIsCiAgICAgIHRoaXMucmVwb3J0ZXIsCiAgICAgIHRoaXMuX29wdGlvbnMsCiAgICAgIFZhcmlhYmxlU2NvcGVNb2RlbCB2YXJpYWJsZVNjb3BlTW9kZWwsCiAgICAgIHRoaXMuX2Fubm90YXRpb25zLAogICAgICB0aGlzLl9jb25zdGFudFZhbHVlZmllcikKICAgICAgOiB0aGlzLmltcGFjdEJ1aWxkZXIgPSBuZXcgUmVzb2x1dGlvbldvcmxkSW1wYWN0QnVpbGRlcihjdXJyZW50TWVtYmVyKSwKICAgICAgICBzdXBlcihlbGVtZW50TWFwLnR5cGVFbnZpcm9ubWVudCwgZWxlbWVudE1hcC5jbGFzc0hpZXJhcmNoeSwKICAgICAgICAgICAgdmFyaWFibGVTY29wZU1vZGVsKTsKCiAgQG92ZXJyaWRlCiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzID0+IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7CgogIEBvdmVycmlkZQogIE5hdGl2ZUJhc2ljRGF0YSBnZXQgX25hdGl2ZUJhc2ljRGF0YSA9PiBlbGVtZW50TWFwLm5hdGl2ZUJhc2ljRGF0YTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgdXNlQXNzZXJ0cyA9PiBfb3B0aW9ucy5lbmFibGVVc2VyQXNzZXJ0aW9uczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaW5mZXJFZmZlY3RpdmVseUZpbmFsVmFyaWFibGVUeXBlcyA9PgogICAgICAhX2Fubm90YXRpb25zLmNvbnRhaW5zKFByYWdtYUFubm90YXRpb24uZGlzYWJsZUZpbmFsKTsKfQoKLy8vIENvbnZlcnRzIGEgW0ltcGFjdERhdGFdIG9iamVjdCBiYXNlZCBvbiBrZXJuZWwgdG8gdGhlIGNvcnJlc3BvbmRpbmcKLy8vIFtSZXNvbHV0aW9uSW1wYWN0XSBiYXNlZCBvbiB0aGUgSyBtb2RlbC4KY2xhc3MgS2VybmVsSW1wYWN0Q29udmVydGVyIGV4dGVuZHMgS2VybmVsSW1wYWN0UmVnaXN0cnlNaXhpbiB7CiAgQG92ZXJyaWRlCiAgZmluYWwgUmVzb2x1dGlvbldvcmxkSW1wYWN0QnVpbGRlciBpbXBhY3RCdWlsZGVyOwogIEBvdmVycmlkZQogIGZpbmFsIEtlcm5lbFRvRWxlbWVudE1hcCBlbGVtZW50TWFwOwogIEBvdmVycmlkZQogIGZpbmFsIERpYWdub3N0aWNSZXBvcnRlciByZXBvcnRlcjsKICBAb3ZlcnJpZGUKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgQG92ZXJyaWRlCiAgZmluYWwgTWVtYmVyRW50aXR5IGN1cnJlbnRNZW1iZXI7CiAgQG92ZXJyaWRlCiAgZmluYWwgQ29uc3RhbnRWYWx1ZWZpZXIgX2NvbnN0YW50VmFsdWVmaWVyOwoKICBLZXJuZWxJbXBhY3RDb252ZXJ0ZXIodGhpcy5lbGVtZW50TWFwLCB0aGlzLmN1cnJlbnRNZW1iZXIsIHRoaXMucmVwb3J0ZXIsCiAgICAgIHRoaXMuX29wdGlvbnMsIHRoaXMuX2NvbnN0YW50VmFsdWVmaWVyKQogICAgICA6IHRoaXMuaW1wYWN0QnVpbGRlciA9IG5ldyBSZXNvbHV0aW9uV29ybGRJbXBhY3RCdWlsZGVyKGN1cnJlbnRNZW1iZXIpOwoKICBAb3ZlcnJpZGUKICBpci5UeXBlRW52aXJvbm1lbnQgZ2V0IHR5cGVFbnZpcm9ubWVudCA9PiBlbGVtZW50TWFwLnR5cGVFbnZpcm9ubWVudDsKCiAgQG92ZXJyaWRlCiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzID0+IGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHM7CgogIEBvdmVycmlkZQogIE5hdGl2ZUJhc2ljRGF0YSBnZXQgX25hdGl2ZUJhc2ljRGF0YSA9PiBlbGVtZW50TWFwLm5hdGl2ZUJhc2ljRGF0YTsKCiAgLy8vIENvbnZlcnRzIGEgW0ltcGFjdERhdGFdIG9iamVjdCBiYXNlZCBvbiBrZXJuZWwgdG8gdGhlIGNvcnJlc3BvbmRpbmcKICAvLy8gW1Jlc29sdXRpb25JbXBhY3RdIGJhc2VkIG9uIHRoZSBLIG1vZGVsLgogIFJlc29sdXRpb25JbXBhY3QgY29udmVydChJbXBhY3REYXRhIGltcGFjdERhdGEpIHsKICAgIGltcGFjdERhdGEuYXBwbHkodGhpcyk7CiAgICByZXR1cm4gaW1wYWN0QnVpbGRlcjsKICB9Cn0KCi8vLyBbSW1wYWN0UmVnaXN0cnldIHRoYXQgY29udmVydHMga2VybmVsIGJhc2VkIGltcGFjdCBkYXRhIHRvIHdvcmxkIGltcGFjdAovLy8gb2JqZWN0IGJhc2VkIG9uIHRoZSBLIG1vZGVsLgphYnN0cmFjdCBjbGFzcyBLZXJuZWxJbXBhY3RSZWdpc3RyeU1peGluIGltcGxlbWVudHMgSW1wYWN0UmVnaXN0cnkgewogIENvbXBpbGVyT3B0aW9ucyBnZXQgX29wdGlvbnM7CiAgRGlhZ25vc3RpY1JlcG9ydGVyIGdldCByZXBvcnRlcjsKICBLZXJuZWxUb0VsZW1lbnRNYXAgZ2V0IGVsZW1lbnRNYXA7CiAgTWVtYmVyRW50aXR5IGdldCBjdXJyZW50TWVtYmVyOwogIFJlc29sdXRpb25Xb3JsZEltcGFjdEJ1aWxkZXIgZ2V0IGltcGFjdEJ1aWxkZXI7CiAgaXIuVHlwZUVudmlyb25tZW50IGdldCB0eXBlRW52aXJvbm1lbnQ7CiAgQ29tbW9uRWxlbWVudHMgZ2V0IGNvbW1vbkVsZW1lbnRzOwogIE5hdGl2ZUJhc2ljRGF0YSBnZXQgX25hdGl2ZUJhc2ljRGF0YTsKICBDb25zdGFudFZhbHVlZmllciBnZXQgX2NvbnN0YW50VmFsdWVmaWVyOwoKICBPYmplY3QgX2NvbXB1dGVSZWNlaXZlckNvbnN0cmFpbnQoCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbikgewogICAgaWYgKHJlY2VpdmVyVHlwZSBpcyBpci5JbnRlcmZhY2VUeXBlKSB7CiAgICAgIGlmIChyZWNlaXZlclR5cGUuY2xhc3NOb2RlID09IHR5cGVFbnZpcm9ubWVudC5mdXR1cmVPckNsYXNzKSB7CiAgICAgICAgLy8gQ0ZFIGVuY29kZXMgRnV0dXJlT3IgYXMgYW4gaW50ZXJmYWNlIHR5cGUhCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBTdHJvbmdNb2RlQ29uc3RyYWludChjb21tb25FbGVtZW50cywgX25hdGl2ZUJhc2ljRGF0YSwKICAgICAgICAgIGVsZW1lbnRNYXAuZ2V0Q2xhc3MocmVjZWl2ZXJUeXBlLmNsYXNzTm9kZSksIHJlbGF0aW9uKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclBhcmFtZXRlckNoZWNrKGlyLkRhcnRUeXBlIGlyVHlwZSkgewogICAgRGFydFR5cGUgdHlwZSA9IGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUoaXJUeXBlKTsKICAgIGlmICghdHlwZS5pc0R5bmFtaWMpIHsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclR5cGVVc2UobmV3IFR5cGVVc2UucGFyYW1ldGVyQ2hlY2sodHlwZSkpOwogICAgfQogIH0KCiAgTGlzdDxEYXJ0VHlwZT4gX2dldFR5cGVBcmd1bWVudHMoTGlzdDxpci5EYXJ0VHlwZT4gdHlwZXMpIHsKICAgIGlmICh0eXBlcy5pc0VtcHR5KSByZXR1cm4gbnVsbDsKICAgIHJldHVybiB0eXBlcy5tYXAoZWxlbWVudE1hcC5nZXREYXJ0VHlwZSkudG9MaXN0KCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTGF6eUZpZWxkKCkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5MQVpZX0ZJRUxEKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJGaWVsZE5vZGUoaXIuRmllbGQgZmllbGQpIHsKICAgIGlmIChmaWVsZC5pc0luc3RhbmNlTWVtYmVyICYmCiAgICAgICAgX25hdGl2ZUJhc2ljRGF0YQogICAgICAgICAgICAuaXNOYXRpdmVDbGFzcyhlbGVtZW50TWFwLmdldENsYXNzKGZpZWxkLmVuY2xvc2luZ0NsYXNzKSkpIHsKICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKGZpZWxkKTsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTmF0aXZlRGF0YUJ1aWxkZXIgYWxyZWFkeSBoYXMgdGhlIG5hdGl2ZSBiZWhhdmlvcgogICAgICAvLyBhdCB0aGlzIHBvaW50LiBVc2UgdGhhdCBpbnN0ZWFkLgogICAgICBib29sIGlzSnNJbnRlcm9wID0gX25hdGl2ZUJhc2ljRGF0YS5pc0pzSW50ZXJvcE1lbWJlcihtZW1iZXIpOwogICAgICBMaXN0PENvbnN0YW50VmFsdWU+IG1ldGFkYXRhID0KICAgICAgICAgIGVsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50LmdldE1lbWJlck1ldGFkYXRhKG1lbWJlcik7CiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gY3JlYXRlc0Fubm90YXRpb25zID0KICAgICAgICAgIGdldENyZWF0ZXNBbm5vdGF0aW9ucyhyZXBvcnRlciwgY29tbW9uRWxlbWVudHMsIG1ldGFkYXRhKTsKICAgICAgSXRlcmFibGU8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnMgPQogICAgICAgICAgZ2V0UmV0dXJuc0Fubm90YXRpb25zKHJlcG9ydGVyLCBjb21tb25FbGVtZW50cywgbWV0YWRhdGEpOwogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyTmF0aXZlRGF0YShlbGVtZW50TWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9yRmllbGRMb2FkKAogICAgICAgICAgZmllbGQsIGNyZWF0ZXNBbm5vdGF0aW9ucywgcmV0dXJuc0Fubm90YXRpb25zLAogICAgICAgICAgaXNKc0ludGVyb3A6IGlzSnNJbnRlcm9wKSk7CiAgICAgIGltcGFjdEJ1aWxkZXIKICAgICAgICAgIC5yZWdpc3Rlck5hdGl2ZURhdGEoZWxlbWVudE1hcC5nZXROYXRpdmVCZWhhdmlvckZvckZpZWxkU3RvcmUoZmllbGQpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDb25zdHJ1Y3Rvck5vZGUoaXIuQ29uc3RydWN0b3IgY29uc3RydWN0b3IpIHsKICAgIE1lbWJlckVudGl0eSBtZW1iZXIgPSBlbGVtZW50TWFwLmdldE1lbWJlcihjb25zdHJ1Y3Rvcik7CiAgICBpZiAoY29uc3RydWN0b3IuaXNFeHRlcm5hbCAmJiAhY29tbW9uRWxlbWVudHMuaXNGb3JlaWduSGVscGVyKG1lbWJlcikpIHsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTmF0aXZlRGF0YUJ1aWxkZXIgYWxyZWFkeSBoYXMgdGhlIG5hdGl2ZSBiZWhhdmlvcgogICAgICAvLyBhdCB0aGlzIHBvaW50LiBVc2UgdGhhdCBpbnN0ZWFkLgogICAgICBib29sIGlzSnNJbnRlcm9wID0gX25hdGl2ZUJhc2ljRGF0YS5pc0pzSW50ZXJvcE1lbWJlcihtZW1iZXIpOwogICAgICBMaXN0PENvbnN0YW50VmFsdWU+IG1ldGFkYXRhID0KICAgICAgICAgIGVsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50LmdldE1lbWJlck1ldGFkYXRhKG1lbWJlcik7CiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gY3JlYXRlc0Fubm90YXRpb25zID0KICAgICAgICAgIGdldENyZWF0ZXNBbm5vdGF0aW9ucyhyZXBvcnRlciwgY29tbW9uRWxlbWVudHMsIG1ldGFkYXRhKTsKICAgICAgSXRlcmFibGU8U3RyaW5nPiByZXR1cm5zQW5ub3RhdGlvbnMgPQogICAgICAgICAgZ2V0UmV0dXJuc0Fubm90YXRpb25zKHJlcG9ydGVyLCBjb21tb25FbGVtZW50cywgbWV0YWRhdGEpOwogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyTmF0aXZlRGF0YShlbGVtZW50TWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9yTWV0aG9kKAogICAgICAgICAgY29uc3RydWN0b3IsIGNyZWF0ZXNBbm5vdGF0aW9ucywgcmV0dXJuc0Fubm90YXRpb25zLAogICAgICAgICAgaXNKc0ludGVyb3A6IGlzSnNJbnRlcm9wKSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3luY1N0YXIoaXIuRGFydFR5cGUgZWxlbWVudFR5cGUpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuU1lOQ19TVEFSKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNJbnZva2UoCiAgICAgICAgY29tbW9uRWxlbWVudHMuc3luY1N0YXJJdGVyYWJsZUZhY3RvcnksCiAgICAgICAgY29uc3QgQ2FsbFN0cnVjdHVyZS51bm5hbWVkKDEsIDEpLAogICAgICAgIDxEYXJ0VHlwZT5bZWxlbWVudE1hcC5nZXREYXJ0VHlwZShlbGVtZW50VHlwZSldKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQXN5bmMoaXIuRGFydFR5cGUgZWxlbWVudFR5cGUpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuQVNZTkMpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICBjb21tb25FbGVtZW50cy5hc3luY0F3YWl0Q29tcGxldGVyRmFjdG9yeSwKICAgICAgICBjb25zdCBDYWxsU3RydWN0dXJlLnVubmFtZWQoMCwgMSksCiAgICAgICAgPERhcnRUeXBlPltlbGVtZW50TWFwLmdldERhcnRUeXBlKGVsZW1lbnRUeXBlKV0pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJBc3luY1N0YXIoaXIuRGFydFR5cGUgZWxlbWVudFR5cGUpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuQVNZTkNfU1RBUik7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLmFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJGYWN0b3J5LAogICAgICAgIGNvbnN0IENhbGxTdHJ1Y3R1cmUudW5uYW1lZCgxLCAxKSwKICAgICAgICA8RGFydFR5cGU+W2VsZW1lbnRNYXAuZ2V0RGFydFR5cGUoZWxlbWVudFR5cGUpXSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclByb2NlZHVyZU5vZGUoaXIuUHJvY2VkdXJlIHByb2NlZHVyZSkgewogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9IGVsZW1lbnRNYXAuZ2V0TWVtYmVyKHByb2NlZHVyZSk7CiAgICBpZiAocHJvY2VkdXJlLmlzRXh0ZXJuYWwgJiYgIWNvbW1vbkVsZW1lbnRzLmlzRm9yZWlnbkhlbHBlcihtZW1iZXIpKSB7CiAgICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IE5hdGl2ZURhdGFCdWlsZGVyIGFscmVhZHkgaGFzIHRoZSBuYXRpdmUgYmVoYXZpb3IKICAgICAgLy8gYXQgdGhpcyBwb2ludC4gVXNlIHRoYXQgaW5zdGVhZC4KICAgICAgYm9vbCBpc0pzSW50ZXJvcCA9IF9uYXRpdmVCYXNpY0RhdGEuaXNKc0ludGVyb3BNZW1iZXIobWVtYmVyKTsKICAgICAgTGlzdDxDb25zdGFudFZhbHVlPiBtZXRhZGF0YSA9CiAgICAgICAgICBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRNZW1iZXJNZXRhZGF0YShtZW1iZXIpOwogICAgICBJdGVyYWJsZTxTdHJpbmc+IGNyZWF0ZXNBbm5vdGF0aW9ucyA9CiAgICAgICAgICBnZXRDcmVhdGVzQW5ub3RhdGlvbnMocmVwb3J0ZXIsIGNvbW1vbkVsZW1lbnRzLCBtZXRhZGF0YSk7CiAgICAgIEl0ZXJhYmxlPFN0cmluZz4gcmV0dXJuc0Fubm90YXRpb25zID0KICAgICAgICAgIGdldFJldHVybnNBbm5vdGF0aW9ucyhyZXBvcnRlciwgY29tbW9uRWxlbWVudHMsIG1ldGFkYXRhKTsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3Rlck5hdGl2ZURhdGEoZWxlbWVudE1hcC5nZXROYXRpdmVCZWhhdmlvckZvck1ldGhvZCgKICAgICAgICAgIHByb2NlZHVyZSwgY3JlYXRlc0Fubm90YXRpb25zLCByZXR1cm5zQW5ub3RhdGlvbnMsCiAgICAgICAgICBpc0pzSW50ZXJvcDogaXNKc0ludGVyb3ApKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJJbnRMaXRlcmFsKGludCB2YWx1ZSkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckNvbnN0YW50TGl0ZXJhbCgKICAgICAgICBuZXcgSW50Q29uc3RhbnRFeHByZXNzaW9uKG5ldyBCaWdJbnQuZnJvbSh2YWx1ZSkudG9VbnNpZ25lZCg2NCkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJEb3VibGVMaXRlcmFsKGRvdWJsZSB2YWx1ZSkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckNvbnN0YW50TGl0ZXJhbChuZXcgRG91YmxlQ29uc3RhbnRFeHByZXNzaW9uKHZhbHVlKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQm9vbExpdGVyYWwoYm9vbCB2YWx1ZSkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckNvbnN0YW50TGl0ZXJhbChuZXcgQm9vbENvbnN0YW50RXhwcmVzc2lvbih2YWx1ZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0cmluZ0xpdGVyYWwoU3RyaW5nIHZhbHVlKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyQ29uc3RhbnRMaXRlcmFsKG5ldyBTdHJpbmdDb25zdGFudEV4cHJlc3Npb24odmFsdWUpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTeW1ib2xMaXRlcmFsKFN0cmluZyB2YWx1ZSkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckNvbnN0U3ltYm9sTmFtZSh2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyTnVsbExpdGVyYWwoKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyQ29uc3RhbnRMaXRlcmFsKG5ldyBOdWxsQ29uc3RhbnRFeHByZXNzaW9uKCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlckxpc3RMaXRlcmFsKGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlLAogICAgICB7Ym9vbCBpc0NvbnN0LCBib29sIGlzRW1wdHl9KSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyTGlzdExpdGVyYWwobmV3IExpc3RMaXRlcmFsVXNlKAogICAgICAgIGNvbW1vbkVsZW1lbnRzLmxpc3RUeXBlKGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUoZWxlbWVudFR5cGUpKSwKICAgICAgICBpc0NvbnN0YW50OiBpc0NvbnN0LAogICAgICAgIGlzRW1wdHk6IGlzRW1wdHkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTZXRMaXRlcmFsKGlyLkRhcnRUeXBlIGVsZW1lbnRUeXBlLAogICAgICB7Ym9vbCBpc0NvbnN0LCBib29sIGlzRW1wdHl9KSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU2V0TGl0ZXJhbChuZXcgU2V0TGl0ZXJhbFVzZSgKICAgICAgICBjb21tb25FbGVtZW50cy5zZXRUeXBlKGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUoZWxlbWVudFR5cGUpKSwKICAgICAgICBpc0NvbnN0YW50OiBpc0NvbnN0LAogICAgICAgIGlzRW1wdHk6IGlzRW1wdHkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJNYXBMaXRlcmFsKGlyLkRhcnRUeXBlIGtleVR5cGUsIGlyLkRhcnRUeXBlIHZhbHVlVHlwZSwKICAgICAge2Jvb2wgaXNDb25zdCwgYm9vbCBpc0VtcHR5fSkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3Rlck1hcExpdGVyYWwobmV3IE1hcExpdGVyYWxVc2UoCiAgICAgICAgY29tbW9uRWxlbWVudHMubWFwVHlwZSgKICAgICAgICAgICAgZWxlbWVudE1hcC5nZXREYXJ0VHlwZShrZXlUeXBlKSwgZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh2YWx1ZVR5cGUpKSwKICAgICAgICBpc0NvbnN0YW50OiBpc0NvbnN0LAogICAgICAgIGlzRW1wdHk6IGlzRW1wdHkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJOZXcoCiAgICAgIGlyLk1lbWJlciB0YXJnZXQsCiAgICAgIGlyLkludGVyZmFjZVR5cGUgdHlwZSwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cywKICAgICAgaXIuTGlicmFyeURlcGVuZGVuY3kgaW1wb3J0LAogICAgICB7Ym9vbCBpc0NvbnN0fSkgewogICAgQ29uc3RydWN0b3JFbnRpdHkgY29uc3RydWN0b3IgPSBlbGVtZW50TWFwLmdldENvbnN0cnVjdG9yKHRhcmdldCk7CiAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgQ2FsbFN0cnVjdHVyZSgKICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRzICsgbmFtZWRBcmd1bWVudHMubGVuZ3RoLAogICAgICAgIG5hbWVkQXJndW1lbnRzLAogICAgICAgIHR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgIEltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydCA9IGVsZW1lbnRNYXAuZ2V0SW1wb3J0KGltcG9ydCk7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKGlzQ29uc3QKICAgICAgICA/IG5ldyBTdGF0aWNVc2UuY29uc3RDb25zdHJ1Y3Rvckludm9rZShjb25zdHJ1Y3RvciwgY2FsbFN0cnVjdHVyZSwKICAgICAgICAgICAgZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh0eXBlKSwgZGVmZXJyZWRJbXBvcnQpCiAgICAgICAgOiBuZXcgU3RhdGljVXNlLnR5cGVkQ29uc3RydWN0b3JJbnZva2UoY29uc3RydWN0b3IsIGNhbGxTdHJ1Y3R1cmUsCiAgICAgICAgICAgIGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUodHlwZSksIGRlZmVycmVkSW1wb3J0KSk7CiAgICBpZiAodHlwZS50eXBlQXJndW1lbnRzLmFueSgoaXIuRGFydFR5cGUgdHlwZSkgPT4gdHlwZSBpcyEgaXIuRHluYW1pY1R5cGUpKSB7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuVFlQRV9WQVJJQUJMRV9CT1VORFNfQ0hFQ0spOwogICAgfQoKICAgIGlmIChjb21tb25FbGVtZW50cy5pc1N5bWJvbENvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSkgewogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLlNZTUJPTF9DT05TVFJVQ1RPUik7CiAgICB9CgogICAgaWYgKHRhcmdldC5pc0V4dGVybmFsICYmCiAgICAgICAgY29uc3RydWN0b3IuaXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvciAmJgogICAgICAgICFpc0NvbnN0KSB7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuVEhST1dfVU5TVVBQT1JURURfRVJST1IpOwogICAgICAvLyBXZSBuZWVkIHRvIHJlZ2lzdGVyIHRoZSBleHRlcm5hbCBjb25zdHJ1Y3RvciBhcyBsaXZlIGJlbG93LCBzbyBkb24ndAogICAgICAvLyByZXR1cm4gaGVyZS4KICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJDb25zdEluc3RhbnRpYXRpb24oaXIuQ2xhc3MgY2xzLCBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzLAogICAgICBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpIHsKICAgIEltcG9ydEVudGl0eSBkZWZlcnJlZEltcG9ydCA9IGVsZW1lbnRNYXAuZ2V0SW1wb3J0KGltcG9ydCk7CiAgICBJbnRlcmZhY2VUeXBlIHR5cGUgPSBlbGVtZW50TWFwLmNyZWF0ZUludGVyZmFjZVR5cGUoY2xzLCB0eXBlQXJndW1lbnRzKTsKICAgIGltcGFjdEJ1aWxkZXIKICAgICAgICAucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmNvbnN0SW5zdGFudGlhdGlvbih0eXBlLCBkZWZlcnJlZEltcG9ydCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNvbnN0Q29uc3RydWN0b3JJbnZvY2F0aW9uTm9kZShpci5Db25zdHJ1Y3Rvckludm9jYXRpb24gbm9kZSkgewogICAgYXNzZXJ0KG5vZGUuaXNDb25zdCk7CiAgICBDb25zdHJ1Y3RvckVudGl0eSBjb25zdHJ1Y3RvciA9IGVsZW1lbnRNYXAuZ2V0Q29uc3RydWN0b3Iobm9kZS50YXJnZXQpOwogICAgaWYgKGNvbW1vbkVsZW1lbnRzLmlzU3ltYm9sQ29uc3RydWN0b3IoY29uc3RydWN0b3IpKSB7CiAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPQogICAgICAgICAgZWxlbWVudE1hcC5nZXRDb25zdGFudFZhbHVlKG5vZGUuYXJndW1lbnRzLnBvc2l0aW9uYWwuZmlyc3QpOwogICAgICBpZiAoIXZhbHVlLmlzU3RyaW5nKSB7CiAgICAgICAgLy8gVE9ETyhoZXQpOiBHZXQgdGhlIGFjdHVhbCBzcGFuIGZvciB0aGUgU3ltYm9sIGNvbnN0cnVjdG9yIGFyZ3VtZW50CiAgICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3JNZXNzYWdlKAogICAgICAgICAgICBDVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFLAogICAgICAgICAgICBNZXNzYWdlS2luZC5TVFJJTkdfRVhQRUNURUQsCiAgICAgICAgICAgIHsndHlwZSc6IHZhbHVlLmdldFR5cGUoZWxlbWVudE1hcC5jb21tb25FbGVtZW50cyl9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgU3RyaW5nQ29uc3RhbnRWYWx1ZSBzdHJpbmdWYWx1ZSA9IHZhbHVlOwogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyQ29uc3RTeW1ib2xOYW1lKHN0cmluZ1ZhbHVlLnN0cmluZ1ZhbHVlKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdXBlckluaXRpYWxpemVyKAogICAgICBpci5Db25zdHJ1Y3RvciBzb3VyY2UsCiAgICAgIGlyLkNvbnN0cnVjdG9yIHRhcmdldCwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogTWF5YmUgcmV3cml0ZSBgbm9kZS50YXJnZXRgIHRvIHBvaW50IHRvIGEKICAgIC8vIHN5bnRoZXNpemVkIHVubmFtZWQgbWl4aW4gY29uc3RydWN0b3Igd2hlbiBuZWVkZWQuIFRoaXMgd291bGQgcmVxdWlyZSB1cwogICAgLy8gdG8gY29uc2lkZXIgaW1wYWN0IGJ1aWxkaW5nIGEgcmVxdWlyZWQgcHJlLXN0ZXAgZm9yIGluZmVyZW5jZSBhbmQKICAgIC8vIHNzYS1idWlsZGluZy4KICAgIENvbnN0cnVjdG9yRW50aXR5IGNvbnN0cnVjdG9yID0KICAgICAgICBlbGVtZW50TWFwLmdldFN1cGVyQ29uc3RydWN0b3Ioc291cmNlLCB0YXJnZXQpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVyQ29uc3RydWN0b3JJbnZva2UoCiAgICAgICAgY29uc3RydWN0b3IsCiAgICAgICAgbmV3IENhbGxTdHJ1Y3R1cmUocG9zaXRpb25hbEFyZ3VtZW50cyArIG5hbWVkQXJndW1lbnRzLmxlbmd0aCwKICAgICAgICAgICAgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMubGVuZ3RoKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0YXRpY0ludm9jYXRpb24oCiAgICAgIGlyLlByb2NlZHVyZSBwcm9jZWR1cmUsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMsCiAgICAgIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCkgewogICAgRnVuY3Rpb25FbnRpdHkgdGFyZ2V0ID0gZWxlbWVudE1hcC5nZXRNZXRob2QocHJvY2VkdXJlKTsKICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBDYWxsU3RydWN0dXJlKAogICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHMgKyBuYW1lZEFyZ3VtZW50cy5sZW5ndGgsCiAgICAgICAgbmFtZWRBcmd1bWVudHMsCiAgICAgICAgdHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgTGlzdDxEYXJ0VHlwZT4gZGFydFR5cGVBcmd1bWVudHMgPSBfZ2V0VHlwZUFyZ3VtZW50cyh0eXBlQXJndW1lbnRzKTsKICAgIGlmIChjb21tb25FbGVtZW50cy5pc0V4dHJhY3RUeXBlQXJndW1lbnRzKHRhcmdldCkpIHsKICAgICAgX2hhbmRsZUV4dHJhY3RUeXBlQXJndW1lbnRzKHRhcmdldCwgZGFydFR5cGVBcmd1bWVudHMsIGNhbGxTdHJ1Y3R1cmUpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgewogICAgICBJbXBvcnRFbnRpdHkgZGVmZXJyZWRJbXBvcnQgPSBlbGVtZW50TWFwLmdldEltcG9ydChpbXBvcnQpOwogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKAogICAgICAgICAgdGFyZ2V0LCBjYWxsU3RydWN0dXJlLCBkYXJ0VHlwZUFyZ3VtZW50cywgZGVmZXJyZWRJbXBvcnQpKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTdGF0aWNJbnZvY2F0aW9uTm9kZShpci5TdGF0aWNJbnZvY2F0aW9uIG5vZGUpIHsKICAgIHN3aXRjaCAoZWxlbWVudE1hcC5nZXRGb3JlaWduS2luZChub2RlKSkgewogICAgICBjYXNlIEZvcmVpZ25LaW5kLkpTOgogICAgICAgIGltcGFjdEJ1aWxkZXIKICAgICAgICAgICAgLnJlZ2lzdGVyTmF0aXZlRGF0YShlbGVtZW50TWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9ySnNDYWxsKG5vZGUpKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBGb3JlaWduS2luZC5KU19CVUlMVElOOgogICAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJOYXRpdmVEYXRhKAogICAgICAgICAgICBlbGVtZW50TWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9ySnNCdWlsdGluQ2FsbChub2RlKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgRm9yZWlnbktpbmQuSlNfRU1CRURERURfR0xPQkFMOgogICAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJOYXRpdmVEYXRhKAogICAgICAgICAgICBlbGVtZW50TWFwLmdldE5hdGl2ZUJlaGF2aW9yRm9ySnNFbWJlZGRlZEdsb2JhbENhbGwobm9kZSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIEZvcmVpZ25LaW5kLkpTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UOgogICAgICAgIEludGVyZmFjZVR5cGUgdHlwZSA9CiAgICAgICAgICAgIGVsZW1lbnRNYXAuZ2V0SW50ZXJmYWNlVHlwZUZvckpzSW50ZXJjZXB0b3JDYWxsKG5vZGUpOwogICAgICAgIGlmICh0eXBlICE9IG51bGwpIHsKICAgICAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmluc3RhbnRpYXRpb24odHlwZSkpOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSBGb3JlaWduS2luZC5OT05FOgogICAgICAgIGJyZWFrOwogICAgfQogIH0KCiAgdm9pZCBfaGFuZGxlRXh0cmFjdFR5cGVBcmd1bWVudHMoRnVuY3Rpb25FbnRpdHkgdGFyZ2V0LAogICAgICBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzLCBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUpIHsKICAgIC8vIGV4dHJhY3RUeXBlQXJndW1lbnRzPE1hcD4ob2JqLCBmbikgaGFzIGFkZGl0aW9uYWwgaW1wYWN0czoKICAgIC8vCiAgICAvLyAgIDEuIEFsbCBjbGFzc2VzIGltcGxlbWVudGluZyBNYXAgbmVlZCB0byBjYXJyeSB0eXBlIGFyZ3VtZW50cyAoc2ltaWxhcgogICAgLy8gICAgICB0byBjaGVja2luZyBgbyBpcyBNYXA8SywgVj5gKS4KICAgIC8vCiAgICAvLyAgIDIuIFRoZXJlIGlzIGFuIGludm9jYXRpb24gb2YgZm4gd2l0aCBzb21lIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cy4KICAgIC8vCiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKAogICAgICAgIG5ldyBTdGF0aWNVc2Uuc3RhdGljSW52b2tlKHRhcmdldCwgY2FsbFN0cnVjdHVyZSwgdHlwZUFyZ3VtZW50cykpOwoKICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSAxKSByZXR1cm47CiAgICBEYXJ0VHlwZSBtYXRjaGVkVHlwZSA9IHR5cGVBcmd1bWVudHMuZmlyc3Q7CgogICAgaWYgKG1hdGNoZWRUeXBlIGlzISBJbnRlcmZhY2VUeXBlKSByZXR1cm47CiAgICBJbnRlcmZhY2VUeXBlIGludGVyZmFjZVR5cGUgPSBtYXRjaGVkVHlwZTsKICAgIENsYXNzRW50aXR5IGNscyA9IGludGVyZmFjZVR5cGUuZWxlbWVudDsKICAgIEludGVyZmFjZVR5cGUgdGhpc1R5cGUgPSBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRUaGlzVHlwZShjbHMpOwoKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmlzQ2hlY2sodGhpc1R5cGUpKTsKCiAgICBTZWxlY3RvciBzZWxlY3RvciA9IG5ldyBTZWxlY3Rvci5jYWxsQ2xvc3VyZSgKICAgICAgICAwLCBjb25zdCA8U3RyaW5nPltdLCB0aGlzVHlwZS50eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZSgKICAgICAgICBuZXcgRHluYW1pY1VzZShzZWxlY3RvciwgbnVsbCwgdGhpc1R5cGUudHlwZUFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0YXRpY1RlYXJPZmYoCiAgICAgIGlyLlByb2NlZHVyZSBwcm9jZWR1cmUsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY1RlYXJPZmYoCiAgICAgICAgZWxlbWVudE1hcC5nZXRNZXRob2QocHJvY2VkdXJlKSwgZWxlbWVudE1hcC5nZXRJbXBvcnQoaW1wb3J0KSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0YXRpY0dldChpci5NZW1iZXIgbWVtYmVyLCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNHZXQoCiAgICAgICAgZWxlbWVudE1hcC5nZXRNZW1iZXIobWVtYmVyKSwgZWxlbWVudE1hcC5nZXRJbXBvcnQoaW1wb3J0KSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0YXRpY1NldChpci5NZW1iZXIgbWVtYmVyLCBpci5MaWJyYXJ5RGVwZW5kZW5jeSBpbXBvcnQpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdGF0aWNTZXQoCiAgICAgICAgZWxlbWVudE1hcC5nZXRNZW1iZXIobWVtYmVyKSwgZWxlbWVudE1hcC5nZXRJbXBvcnQoaW1wb3J0KSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN1cGVySW52b2NhdGlvbihpci5OYW1lIG5hbWUsIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIEZ1bmN0aW9uRW50aXR5IG1ldGhvZCA9CiAgICAgICAgZWxlbWVudE1hcC5nZXRTdXBlck1lbWJlcihjdXJyZW50TWVtYmVyLCBuYW1lLCBzZXR0ZXI6IGZhbHNlKTsKICAgIExpc3Q8RGFydFR5cGU+IGRhcnRUeXBlQXJndW1lbnRzID0gX2dldFR5cGVBcmd1bWVudHModHlwZUFyZ3VtZW50cyk7CiAgICBpZiAobWV0aG9kICE9IG51bGwpIHsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVySW52b2tlKAogICAgICAgICAgbWV0aG9kLAogICAgICAgICAgbmV3IENhbGxTdHJ1Y3R1cmUocG9zaXRpb25hbEFyZ3VtZW50cyArIG5hbWVkQXJndW1lbnRzLmxlbmd0aCwKICAgICAgICAgICAgICBuYW1lZEFyZ3VtZW50cywgdHlwZUFyZ3VtZW50cy5sZW5ndGgpLAogICAgICAgICAgZGFydFR5cGVBcmd1bWVudHMpKTsKICAgIH0gZWxzZSB7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlckludm9rZSgKICAgICAgICAgIGVsZW1lbnRNYXAuZ2V0U3VwZXJOb1N1Y2hNZXRob2QoY3VycmVudE1lbWJlci5lbmNsb3NpbmdDbGFzcyksCiAgICAgICAgICBDYWxsU3RydWN0dXJlLk9ORV9BUkcpKTsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5TVVBFUl9OT19TVUNIX01FVEhPRCk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3VwZXJHZXQoaXIuTmFtZSBuYW1lKSB7CiAgICBNZW1iZXJFbnRpdHkgbWVtYmVyID0KICAgICAgICBlbGVtZW50TWFwLmdldFN1cGVyTWVtYmVyKGN1cnJlbnRNZW1iZXIsIG5hbWUsIHNldHRlcjogZmFsc2UpOwogICAgaWYgKG1lbWJlciAhPSBudWxsKSB7CiAgICAgIGlmIChtZW1iZXIuaXNGdW5jdGlvbikgewogICAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlclRlYXJPZmYobWVtYmVyKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVyR2V0KG1lbWJlcikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3VwZXJJbnZva2UoCiAgICAgICAgICBlbGVtZW50TWFwLmdldFN1cGVyTm9TdWNoTWV0aG9kKGN1cnJlbnRNZW1iZXIuZW5jbG9zaW5nQ2xhc3MpLAogICAgICAgICAgQ2FsbFN0cnVjdHVyZS5PTkVfQVJHKSk7CiAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuU1VQRVJfTk9fU1VDSF9NRVRIT0QpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN1cGVyU2V0KGlyLk5hbWUgbmFtZSkgewogICAgTWVtYmVyRW50aXR5IG1lbWJlciA9CiAgICAgICAgZWxlbWVudE1hcC5nZXRTdXBlck1lbWJlcihjdXJyZW50TWVtYmVyLCBuYW1lLCBzZXR0ZXI6IHRydWUpOwogICAgaWYgKG1lbWJlciAhPSBudWxsKSB7CiAgICAgIGlmIChtZW1iZXIuaXNGaWVsZCkgewogICAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlckZpZWxkU2V0KG1lbWJlcikpOwogICAgICB9IGVsc2UgewogICAgICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJTdGF0aWNVc2UobmV3IFN0YXRpY1VzZS5zdXBlclNldHRlclNldChtZW1iZXIpKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN1cGVySW52b2tlKAogICAgICAgICAgZWxlbWVudE1hcC5nZXRTdXBlck5vU3VjaE1ldGhvZChjdXJyZW50TWVtYmVyLmVuY2xvc2luZ0NsYXNzKSwKICAgICAgICAgIENhbGxTdHJ1Y3R1cmUuT05FX0FSRykpOwogICAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLlNVUEVSX05PX1NVQ0hfTUVUSE9EKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJMb2NhbEZ1bmN0aW9uSW52b2NhdGlvbigKICAgICAgaXIuRnVuY3Rpb25EZWNsYXJhdGlvbiBsb2NhbEZ1bmN0aW9uLAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBDYWxsU3RydWN0dXJlIGNhbGxTdHJ1Y3R1cmUgPSBuZXcgQ2FsbFN0cnVjdHVyZSgKICAgICAgICBwb3NpdGlvbmFsQXJndW1lbnRzICsgbmFtZWRBcmd1bWVudHMubGVuZ3RoLAogICAgICAgIG5hbWVkQXJndW1lbnRzLAogICAgICAgIHR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgIExpc3Q8RGFydFR5cGU+IGRhcnRUeXBlQXJndW1lbnRzID0gX2dldFR5cGVBcmd1bWVudHModHlwZUFyZ3VtZW50cyk7CiAgICAvLyBJbnZvY2F0aW9uIG9mIGEgbG9jYWwgZnVuY3Rpb24uIE5vIG5lZWQgZm9yIGR5bmFtaWMgdXNlLCBidXQKICAgIC8vIHdlIG5lZWQgdG8gdHJhY2sgdGhlIHR5cGUgYXJndW1lbnRzLgogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLmNsb3N1cmVDYWxsKAogICAgICAgIGVsZW1lbnRNYXAuZ2V0TG9jYWxGdW5jdGlvbihsb2NhbEZ1bmN0aW9uKSwKICAgICAgICBjYWxsU3RydWN0dXJlLAogICAgICAgIGRhcnRUeXBlQXJndW1lbnRzKSk7CiAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBZZXQsIGFsYXMsIHdlIG5lZWQgdGhlIGR5bmFtaWMgdXNlIGZvciBub3cuIFJlbW92ZQogICAgLy8gdGhpcyB3aGVuIGtlcm5lbCBhZGRzIGFuIGBpc0Z1bmN0aW9uQ2FsbGAgZmxhZyB0bwogICAgLy8gW2lyLk1ldGhvZEludm9jYXRpb25dLgogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckR5bmFtaWNVc2UoCiAgICAgICAgbmV3IER5bmFtaWNVc2UoY2FsbFN0cnVjdHVyZS5jYWxsU2VsZWN0b3IsIG51bGwsIGRhcnRUeXBlQXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRHluYW1pY0ludm9jYXRpb24oCiAgICAgIGlyLkRhcnRUeXBlIHJlY2VpdmVyVHlwZSwKICAgICAgQ2xhc3NSZWxhdGlvbiByZWxhdGlvbiwKICAgICAgaXIuTmFtZSBuYW1lLAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBTZWxlY3RvciBzZWxlY3RvciA9IGVsZW1lbnRNYXAuZ2V0SW52b2NhdGlvblNlbGVjdG9yKAogICAgICAgIG5hbWUsIHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzLmxlbmd0aCk7CiAgICBMaXN0PERhcnRUeXBlPiBkYXJ0VHlwZUFyZ3VtZW50cyA9IF9nZXRUeXBlQXJndW1lbnRzKHR5cGVBcmd1bWVudHMpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckR5bmFtaWNVc2UobmV3IER5bmFtaWNVc2Uoc2VsZWN0b3IsCiAgICAgICAgX2NvbXB1dGVSZWNlaXZlckNvbnN0cmFpbnQocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiksIGRhcnRUeXBlQXJndW1lbnRzKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRnVuY3Rpb25JbnZvY2F0aW9uKAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsCiAgICAgIGludCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBMaXN0PFN0cmluZz4gbmFtZWRBcmd1bWVudHMsCiAgICAgIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIENhbGxTdHJ1Y3R1cmUgY2FsbFN0cnVjdHVyZSA9IG5ldyBDYWxsU3RydWN0dXJlKAogICAgICAgIHBvc2l0aW9uYWxBcmd1bWVudHMgKyBuYW1lZEFyZ3VtZW50cy5sZW5ndGgsCiAgICAgICAgbmFtZWRBcmd1bWVudHMsCiAgICAgICAgdHlwZUFyZ3VtZW50cy5sZW5ndGgpOwogICAgTGlzdDxEYXJ0VHlwZT4gZGFydFR5cGVBcmd1bWVudHMgPSBfZ2V0VHlwZUFyZ3VtZW50cyh0eXBlQXJndW1lbnRzKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKG5ldyBEeW5hbWljVXNlKAogICAgICAgIGNhbGxTdHJ1Y3R1cmUuY2FsbFNlbGVjdG9yLAogICAgICAgIF9jb21wdXRlUmVjZWl2ZXJDb25zdHJhaW50KHJlY2VpdmVyVHlwZSwgQ2xhc3NSZWxhdGlvbi5zdWJ0eXBlKSwKICAgICAgICBkYXJ0VHlwZUFyZ3VtZW50cykpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlckluc3RhbmNlSW52b2NhdGlvbigKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLAogICAgICBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLAogICAgICBpci5NZW1iZXIgdGFyZ2V0LAogICAgICBpbnQgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgTGlzdDxTdHJpbmc+IG5hbWVkQXJndW1lbnRzLAogICAgICBMaXN0PGlyLkRhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBMaXN0PERhcnRUeXBlPiBkYXJ0VHlwZUFyZ3VtZW50cyA9IF9nZXRUeXBlQXJndW1lbnRzKHR5cGVBcmd1bWVudHMpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckR5bmFtaWNVc2UobmV3IER5bmFtaWNVc2UoCiAgICAgICAgZWxlbWVudE1hcC5nZXRJbnZvY2F0aW9uU2VsZWN0b3IodGFyZ2V0Lm5hbWUsIHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICAgIG5hbWVkQXJndW1lbnRzLCB0eXBlQXJndW1lbnRzLmxlbmd0aCksCiAgICAgICAgX2NvbXB1dGVSZWNlaXZlckNvbnN0cmFpbnQocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiksCiAgICAgICAgZGFydFR5cGVBcmd1bWVudHMpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJEeW5hbWljR2V0KAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIENsYXNzUmVsYXRpb24gcmVsYXRpb24sIGlyLk5hbWUgbmFtZSkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckR5bmFtaWNVc2UobmV3IER5bmFtaWNVc2UoCiAgICAgICAgbmV3IFNlbGVjdG9yLmdldHRlcihlbGVtZW50TWFwLmdldE5hbWUobmFtZSkpLAogICAgICAgIF9jb21wdXRlUmVjZWl2ZXJDb25zdHJhaW50KHJlY2VpdmVyVHlwZSwgcmVsYXRpb24pLAogICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3Rlckluc3RhbmNlR2V0KAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIENsYXNzUmVsYXRpb24gcmVsYXRpb24sIGlyLk1lbWJlciB0YXJnZXQpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKG5ldyBEeW5hbWljVXNlKAogICAgICAgIG5ldyBTZWxlY3Rvci5nZXR0ZXIoZWxlbWVudE1hcC5nZXROYW1lKHRhcmdldC5uYW1lKSksCiAgICAgICAgX2NvbXB1dGVSZWNlaXZlckNvbnN0cmFpbnQocmVjZWl2ZXJUeXBlLCByZWxhdGlvbiksCiAgICAgICAgY29uc3QgPERhcnRUeXBlPltdKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRHluYW1pY1NldCgKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLCBpci5OYW1lIG5hbWUpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKG5ldyBEeW5hbWljVXNlKAogICAgICAgIG5ldyBTZWxlY3Rvci5zZXR0ZXIoZWxlbWVudE1hcC5nZXROYW1lKG5hbWUpKSwKICAgICAgICBfY29tcHV0ZVJlY2VpdmVyQ29uc3RyYWludChyZWNlaXZlclR5cGUsIHJlbGF0aW9uKSwKICAgICAgICBjb25zdCA8RGFydFR5cGU+W10pKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJJbnN0YW5jZVNldCgKICAgICAgaXIuRGFydFR5cGUgcmVjZWl2ZXJUeXBlLCBDbGFzc1JlbGF0aW9uIHJlbGF0aW9uLCBpci5NZW1iZXIgdGFyZ2V0KSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZShuZXcgRHluYW1pY1VzZSgKICAgICAgICBuZXcgU2VsZWN0b3Iuc2V0dGVyKGVsZW1lbnRNYXAuZ2V0TmFtZSh0YXJnZXQubmFtZSkpLAogICAgICAgIF9jb21wdXRlUmVjZWl2ZXJDb25zdHJhaW50KHJlY2VpdmVyVHlwZSwgcmVsYXRpb24pLAogICAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclJ1bnRpbWVUeXBlVXNlKGlyLlByb3BlcnR5R2V0IG5vZGUsIFJ1bnRpbWVUeXBlVXNlS2luZCBraW5kLAogICAgICBpci5EYXJ0VHlwZSByZWNlaXZlclR5cGUsIGlyLkRhcnRUeXBlIGFyZ3VtZW50VHlwZSkgewogICAgRGFydFR5cGUgcmVjZWl2ZXJEYXJ0VHlwZSA9IGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUocmVjZWl2ZXJUeXBlKTsKICAgIERhcnRUeXBlIGFyZ3VtZW50RGFydFR5cGUgPQogICAgICAgIGFyZ3VtZW50VHlwZSA9PSBudWxsID8gbnVsbCA6IGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUoYXJndW1lbnRUeXBlKTsKCiAgICBpZiAoX29wdGlvbnMub21pdEltcGxpY2l0Q2hlY2tzKSB7CiAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgIGNhc2UgUnVudGltZVR5cGVVc2VLaW5kLnN0cmluZzoKICAgICAgICAgIGlmICghX29wdGlvbnMubGF4UnVudGltZVR5cGVUb1N0cmluZykgewogICAgICAgICAgICBpZiAocmVjZWl2ZXJEYXJ0VHlwZSA9PSBjb21tb25FbGVtZW50cy5vYmplY3RUeXBlKSB7CiAgICAgICAgICAgICAgcmVwb3J0ZXIucmVwb3J0SGludE1lc3NhZ2UoY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobm9kZSksCiAgICAgICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLlJVTlRJTUVfVFlQRV9UT19TVFJJTkdfT0JKRUNUKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICByZXBvcnRlci5yZXBvcnRIaW50TWVzc2FnZSgKICAgICAgICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobm9kZSksCiAgICAgICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLlJVTlRJTUVfVFlQRV9UT19TVFJJTkdfU1VCVFlQRSwKICAgICAgICAgICAgICAgICAgeydyZWNlaXZlclR5cGUnOiAnJHtyZWNlaXZlckRhcnRUeXBlfS4nfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgUnVudGltZVR5cGVVc2VLaW5kLmVxdWFsczoKICAgICAgICBjYXNlIFJ1bnRpbWVUeXBlVXNlS2luZC51bmtub3duOgogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJSdW50aW1lVHlwZVVzZSgKICAgICAgICBuZXcgUnVudGltZVR5cGVVc2Uoa2luZCwgcmVjZWl2ZXJEYXJ0VHlwZSwgYXJndW1lbnREYXJ0VHlwZSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckFzc2VydCh7Ym9vbCB3aXRoTWVzc2FnZX0pIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKAogICAgICAgIHdpdGhNZXNzYWdlID8gRmVhdHVyZS5BU1NFUlRfV0lUSF9NRVNTQUdFIDogRmVhdHVyZS5BU1NFUlQpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckdlbmVyaWNJbnN0YW50aWF0aW9uKAogICAgICBpci5GdW5jdGlvblR5cGUgZXhwcmVzc2lvblR5cGUsIExpc3Q8aXIuRGFydFR5cGU+IHR5cGVBcmd1bWVudHMpIHsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFRyYWNrIHdoaWNoIGFyaXRpZXMgYXJlIHVzZWQgaW4gaW5zdGFudGlhdGlvbi4KICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJJbnN0YW50aWF0aW9uKG5ldyBHZW5lcmljSW5zdGFudGlhdGlvbigKICAgICAgICBlbGVtZW50TWFwLmdldERhcnRUeXBlKGV4cHJlc3Npb25UeXBlKSwKICAgICAgICB0eXBlQXJndW1lbnRzLm1hcChlbGVtZW50TWFwLmdldERhcnRUeXBlKS50b0xpc3QoKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclN0cmluZ0NvbmNhdGVuYXRpb24oKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLlNUUklOR19JTlRFUlBPTEFUSU9OKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuU1RSSU5HX0pVWFRBUE9TSVRJT04pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckxvY2FsRnVuY3Rpb24oaXIuVHJlZU5vZGUgbm9kZSkgewogICAgTG9jYWwgZnVuY3Rpb24gPSBlbGVtZW50TWFwLmdldExvY2FsRnVuY3Rpb24obm9kZSk7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2UuY2xvc3VyZShmdW5jdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckxvY2FsV2l0aG91dEluaXRpYWxpemVyKCkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5MT0NBTF9XSVRIT1VUX0lOSVRJQUxJWkVSKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJJc0NoZWNrKGlyLkRhcnRUeXBlIHR5cGUpIHsKICAgIGltcGFjdEJ1aWxkZXIKICAgICAgICAucmVnaXN0ZXJUeXBlVXNlKG5ldyBUeXBlVXNlLmlzQ2hlY2soZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh0eXBlKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckltcGxpY2l0Q2FzdChpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyVHlwZVVzZSgKICAgICAgICBuZXcgVHlwZVVzZS5pbXBsaWNpdENhc3QoZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh0eXBlKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckFzQ2FzdChpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICBpbXBhY3RCdWlsZGVyCiAgICAgICAgLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5hc0Nhc3QoZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh0eXBlKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclRocm93KCkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckZlYXR1cmUoRmVhdHVyZS5USFJPV19FWFBSRVNTSU9OKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTeW5jRm9ySW4oaXIuRGFydFR5cGUgaXRlcmFibGVUeXBlLCBpci5EYXJ0VHlwZSBpdGVyYXRvclR5cGUsCiAgICAgIENsYXNzUmVsYXRpb24gaXRlcmF0b3JDbGFzc1JlbGF0aW9uKSB7CiAgICBPYmplY3QgcmVjZWl2ZXJDb25zdHJhaW50ID0KICAgICAgICBfY29tcHV0ZVJlY2VpdmVyQ29uc3RyYWludChpdGVyYXRvclR5cGUsIGl0ZXJhdG9yQ2xhc3NSZWxhdGlvbik7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLlNZTkNfRk9SX0lOKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKAogICAgICAgIG5ldyBEeW5hbWljVXNlKFNlbGVjdG9ycy5pdGVyYXRvciwgcmVjZWl2ZXJDb25zdHJhaW50LCBjb25zdCBbXSkpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckR5bmFtaWNVc2UoCiAgICAgICAgbmV3IER5bmFtaWNVc2UoU2VsZWN0b3JzLmN1cnJlbnQsIHJlY2VpdmVyQ29uc3RyYWludCwgY29uc3QgW10pKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJEeW5hbWljVXNlKAogICAgICAgIG5ldyBEeW5hbWljVXNlKFNlbGVjdG9ycy5tb3ZlTmV4dCwgcmVjZWl2ZXJDb25zdHJhaW50LCBjb25zdCBbXSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckFzeW5jRm9ySW4oaXIuRGFydFR5cGUgaXRlcmFibGVUeXBlLCBpci5EYXJ0VHlwZSBpdGVyYXRvclR5cGUsCiAgICAgIENsYXNzUmVsYXRpb24gaXRlcmF0b3JDbGFzc1JlbGF0aW9uKSB7CiAgICBPYmplY3QgcmVjZWl2ZXJDb25zdHJhaW50ID0KICAgICAgICBfY29tcHV0ZVJlY2VpdmVyQ29uc3RyYWludChpdGVyYXRvclR5cGUsIGl0ZXJhdG9yQ2xhc3NSZWxhdGlvbik7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLkFTWU5DX0ZPUl9JTik7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZSgKICAgICAgICBuZXcgRHluYW1pY1VzZShTZWxlY3RvcnMuY2FuY2VsLCByZWNlaXZlckNvbnN0cmFpbnQsIGNvbnN0IFtdKSk7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRHluYW1pY1VzZSgKICAgICAgICBuZXcgRHluYW1pY1VzZShTZWxlY3RvcnMuY3VycmVudCwgcmVjZWl2ZXJDb25zdHJhaW50LCBjb25zdCBbXSkpOwogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlckR5bmFtaWNVc2UoCiAgICAgICAgbmV3IER5bmFtaWNVc2UoU2VsZWN0b3JzLm1vdmVOZXh0LCByZWNlaXZlckNvbnN0cmFpbnQsIGNvbnN0IFtdKSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyQ2F0Y2goKSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyRmVhdHVyZShGZWF0dXJlLkNBVENIX1NUQVRFTUVOVCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyU3RhY2tUcmFjZSgpIHsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuU1RBQ0tfVFJBQ0VfSU5fQ0FUQ0gpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckNhdGNoVHlwZShpci5EYXJ0VHlwZSB0eXBlKSB7CiAgICBpbXBhY3RCdWlsZGVyCiAgICAgICAgLnJlZ2lzdGVyVHlwZVVzZShuZXcgVHlwZVVzZS5jYXRjaFR5cGUoZWxlbWVudE1hcC5nZXREYXJ0VHlwZSh0eXBlKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlclR5cGVMaXRlcmFsKGlyLkRhcnRUeXBlIHR5cGUsIGlyLkxpYnJhcnlEZXBlbmRlbmN5IGltcG9ydCkgewogICAgSW1wb3J0RW50aXR5IGRlZmVycmVkSW1wb3J0ID0gZWxlbWVudE1hcC5nZXRJbXBvcnQoaW1wb3J0KTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJUeXBlVXNlKAogICAgICAgIG5ldyBUeXBlVXNlLnR5cGVMaXRlcmFsKGVsZW1lbnRNYXAuZ2V0RGFydFR5cGUodHlwZSksIGRlZmVycmVkSW1wb3J0KSk7CiAgICBpZiAodHlwZSBpcyBpci5GdW5jdGlvblR5cGUpIHsKICAgICAgYXNzZXJ0KHR5cGUudHlwZWRlZiAhPSBudWxsKTsKICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogQ2FuIHdlIGF2b2lkIHRoZSB0eXBlZGVmIHR5cGUgYWx0b2dldGhlcj8KICAgICAgLy8gV2UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgdHlwZWRlZiBpcyBsaXZlLgogICAgICBlbGVtZW50TWFwLmdldFR5cGVkZWZUeXBlKHR5cGUudHlwZWRlZik7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHJlZ2lzdGVyRmllbGRJbml0aWFsaXphdGlvbihpci5GaWVsZCBub2RlKSB7CiAgICBpbXBhY3RCdWlsZGVyCiAgICAgICAgLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2UuZmllbGRJbml0KGVsZW1lbnRNYXAuZ2V0RmllbGQobm9kZSkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJGaWVsZENvbnN0YW50SW5pdGlhbGl6YXRpb24oCiAgICAgIGlyLkZpZWxkIG5vZGUsIENvbnN0YW50UmVmZXJlbmNlIGNvbnN0YW50KSB7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2UuZmllbGRDb25zdGFudEluaXQoCiAgICAgICAgZWxlbWVudE1hcC5nZXRGaWVsZChub2RlKSwKICAgICAgICBfY29uc3RhbnRWYWx1ZWZpZXIudmlzaXRDb25zdGFudChjb25zdGFudC5jb25zdGFudCkpKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJSZWRpcmVjdGluZ0luaXRpYWxpemVyKAogICAgICBpci5Db25zdHJ1Y3RvciBjb25zdHJ1Y3RvciwKICAgICAgaW50IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lZEFyZ3VtZW50cywKICAgICAgTGlzdDxpci5EYXJ0VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgQ29uc3RydWN0b3JFbnRpdHkgdGFyZ2V0ID0gZWxlbWVudE1hcC5nZXRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvcik7CiAgICBpbXBhY3RCdWlsZGVyLnJlZ2lzdGVyU3RhdGljVXNlKG5ldyBTdGF0aWNVc2Uuc3VwZXJDb25zdHJ1Y3Rvckludm9rZSgKICAgICAgICB0YXJnZXQsCiAgICAgICAgbmV3IENhbGxTdHJ1Y3R1cmUocG9zaXRpb25hbEFyZ3VtZW50cyArIG5hbWVkQXJndW1lbnRzLmxlbmd0aCwKICAgICAgICAgICAgbmFtZWRBcmd1bWVudHMsIHR5cGVBcmd1bWVudHMubGVuZ3RoKSkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCByZWdpc3RlckxvYWRMaWJyYXJ5KCkgewogICAgaW1wYWN0QnVpbGRlci5yZWdpc3RlclN0YXRpY1VzZShuZXcgU3RhdGljVXNlLnN0YXRpY0ludm9rZSgKICAgICAgICBjb21tb25FbGVtZW50cy5sb2FkRGVmZXJyZWRMaWJyYXJ5LCBDYWxsU3RydWN0dXJlLk9ORV9BUkcpKTsKICAgIGltcGFjdEJ1aWxkZXIucmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUuTE9BRF9MSUJSQVJZKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgcmVnaXN0ZXJTd2l0Y2hTdGF0ZW1lbnROb2RlKGlyLlN3aXRjaFN0YXRlbWVudCBub2RlKSB7CiAgICAvLyBUT0RPKDMyNTU3KTogUmVtb3ZlIHRoaXMgd2hlbiBpc3N1ZSAzMjU1NyBpcyBmaXhlZC4KICAgIGlyLlRyZWVOb2RlIGZpcnN0Q2FzZTsKICAgIERhcnRUeXBlIGZpcnN0Q2FzZVR5cGU7CiAgICBEaWFnbm9zdGljTWVzc2FnZSBlcnJvcjsKICAgIExpc3Q8RGlhZ25vc3RpY01lc3NhZ2U+IGluZm9zID0gPERpYWdub3N0aWNNZXNzYWdlPltdOwoKICAgIGJvb2wgb3ZlcnJpZGVzRXF1YWxzKEludGVyZmFjZVR5cGUgdHlwZSkgewogICAgICBpZiAodHlwZSA9PSBjb21tb25FbGVtZW50cy5zeW1ib2xJbXBsZW1lbnRhdGlvblR5cGUpIHsKICAgICAgICAvLyBUcmVhdCBzeW1ib2wgY29uc3RhbnRzIGFzIGlmIFN5bWJvbCBkb2Vzbid0IG92ZXJyaWRlIGA9PWAuCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIENsYXNzRW50aXR5IGNscyA9IHR5cGUuZWxlbWVudDsKICAgICAgd2hpbGUgKGNscyAhPSBudWxsKSB7CiAgICAgICAgTWVtYmVyRW50aXR5IG1lbWJlciA9CiAgICAgICAgICAgIGVsZW1lbnRNYXAuZWxlbWVudEVudmlyb25tZW50Lmxvb2t1cENsYXNzTWVtYmVyKGNscywgJz09Jyk7CiAgICAgICAgaWYgKG1lbWJlci5pc0Fic3RyYWN0KSB7CiAgICAgICAgICBjbHMgPSBlbGVtZW50TWFwLmVsZW1lbnRFbnZpcm9ubWVudC5nZXRTdXBlckNsYXNzKGNscyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBtZW1iZXIuZW5jbG9zaW5nQ2xhc3MgIT0gY29tbW9uRWxlbWVudHMub2JqZWN0Q2xhc3M7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBmb3IgKGlyLlN3aXRjaENhc2Ugc3dpdGNoQ2FzZSBpbiBub2RlLmNhc2VzKSB7CiAgICAgIGZvciAoaXIuRXhwcmVzc2lvbiBleHByZXNzaW9uIGluIHN3aXRjaENhc2UuZXhwcmVzc2lvbnMpIHsKICAgICAgICBDb25zdGFudFZhbHVlIHZhbHVlID0gZWxlbWVudE1hcC5nZXRDb25zdGFudFZhbHVlKGV4cHJlc3Npb24pOwogICAgICAgIERhcnRUeXBlIHR5cGUgPSB2YWx1ZS5nZXRUeXBlKGVsZW1lbnRNYXAuY29tbW9uRWxlbWVudHMpOwogICAgICAgIGlmIChmaXJzdENhc2VUeXBlID09IG51bGwpIHsKICAgICAgICAgIGZpcnN0Q2FzZSA9IGV4cHJlc3Npb247CiAgICAgICAgICBmaXJzdENhc2VUeXBlID0gdHlwZTsKCiAgICAgICAgICAvLyBXZSBvbmx5IHJlcG9ydCB0aGUgYmFkIHR5cGUgb24gdGhlIGZpcnN0IGNsYXNzIGVsZW1lbnQuIEFsbCBvdGhlcnMKICAgICAgICAgIC8vIGdldCBhICJ0eXBlIGRpZmZlcnMiIGVycm9yLgogICAgICAgICAgaWYgKHR5cGUgPT0gY29tbW9uRWxlbWVudHMuZG91YmxlVHlwZSkgewogICAgICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShleHByZXNzaW9uKSwKICAgICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX1ZBTFVFX09WRVJSSURFU19FUVVBTFMsCiAgICAgICAgICAgICAgICB7J3R5cGUnOiAiZG91YmxlIn0pOwogICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IGNvbW1vbkVsZW1lbnRzLmZ1bmN0aW9uVHlwZSkgewogICAgICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobm9kZSksCiAgICAgICAgICAgICAgICBNZXNzYWdlS2luZC5TV0lUQ0hfQ0FTRV9GT1JCSURERU4sIHsndHlwZSc6ICJGdW5jdGlvbiJ9KTsKICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuaXNPYmplY3QgJiYKICAgICAgICAgICAgICB0eXBlICE9IGNvbW1vbkVsZW1lbnRzLnR5cGVMaXRlcmFsVHlwZSAmJgogICAgICAgICAgICAgIG92ZXJyaWRlc0VxdWFscyh0eXBlKSkgewogICAgICAgICAgICByZXBvcnRlci5yZXBvcnRFcnJvck1lc3NhZ2UoCiAgICAgICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShmaXJzdENhc2UpLAogICAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVkFMVUVfT1ZFUlJJREVTX0VRVUFMUywKICAgICAgICAgICAgICAgIHsndHlwZSc6IHR5cGV9KTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKHR5cGUgIT0gZmlyc3RDYXNlVHlwZSkgewogICAgICAgICAgICBpZiAoZXJyb3IgPT0gbnVsbCkgewogICAgICAgICAgICAgIGVycm9yID0gcmVwb3J0ZXIuY3JlYXRlTWVzc2FnZSgKICAgICAgICAgICAgICAgICAgY29tcHV0ZVNvdXJjZVNwYW5Gcm9tVHJlZU5vZGUobm9kZSksCiAgICAgICAgICAgICAgICAgIE1lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX1RZUEVTX05PVF9FUVVBTCwKICAgICAgICAgICAgICAgICAgeyd0eXBlJzogZmlyc3RDYXNlVHlwZX0pOwogICAgICAgICAgICAgIGluZm9zLmFkZChyZXBvcnRlci5jcmVhdGVNZXNzYWdlKAogICAgICAgICAgICAgICAgICBjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZShmaXJzdENhc2UpLAogICAgICAgICAgICAgICAgICBNZXNzYWdlS2luZC5TV0lUQ0hfQ0FTRV9UWVBFU19OT1RfRVFVQUxfQ0FTRSwKICAgICAgICAgICAgICAgICAgeyd0eXBlJzogZmlyc3RDYXNlVHlwZX0pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbmZvcy5hZGQocmVwb3J0ZXIuY3JlYXRlTWVzc2FnZSgKICAgICAgICAgICAgICAgIGNvbXB1dGVTb3VyY2VTcGFuRnJvbVRyZWVOb2RlKGV4cHJlc3Npb24pLAogICAgICAgICAgICAgICAgTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVFlQRVNfTk9UX0VRVUFMX0NBU0UsCiAgICAgICAgICAgICAgICB7J3R5cGUnOiB0eXBlfSkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGVycm9yICE9IG51bGwpIHsKICAgICAgcmVwb3J0ZXIucmVwb3J0RXJyb3IoZXJyb3IsIGluZm9zKTsKICAgIH0KICB9Cn0Kg4wATk48ASg1ARkfJCIoIyQhHxwhKxshGh4pKSIaSCojJB8pGwE4NCUMNAwnDCUMIgwkLAwuARcXGhUVLRkfTkUhAQxCAQxGAQw4AQwxPQIBSC1ADDQMJwwlDCIMJAwuAUwuTgEMSAEMQgEMRgFKLzQcGgQCAUwhRSAjJSIyKiUoLAElOixFNhUISEIGEQQBDDQ0G0cGBAE+JDcEAQwdNwQBDCsiGUk5UCpFJUMsRSxFUTkmFFEGBAEMPT1NUCpFJUMsRSxFTj8mBgQBDDM2QDArOwQBDDAyQDMrOwQBDDQ3QDkrOwQBDDc7S1AqRSVDLEUsRU49JgYEAQwnK0sEAQwtUAQBDClOBAEMLVAEAQwtMgQBDB9JBAEMNCY6Rh0cBAEMMyY4RR0cBAEMRiY4IFEdHAQBDBQYHR8jJyMYRzU1GB9ALEs6SzxRSQYBO0EGAR00FEZOFgYEAQxRJUBNElAEAQxPGkw7HEgdTiUnKUEQCC9GBgQBDCEdHR8jKUZQSRUkOEoVRzUEAQwhHh8jJyU9NTUYH0k5TQ4NQkJGBgQBDEAvGxZODyMqQQ8rKkgPMB1DHEoKDx0PBgQBOkNCB08rB00HJUsBKzABLy8tTQFCATI9JkEEAQwePUFJBAEMSj1GBAEMSj1GBAEMRkYcR0kaQRJJNR8NQUkjQwYEAQwoGkcaH00PSQgNQUkjQwYEAQwoGkYaHE4PTwgNQUkjQwYEAQwoLB8jKTU1GB9JRCw/NBcdTzkeJk4EAQwiIB4UHyMpOkpJPlEEAQwjIB8jKTU1GB9JNSRJHQQBDCMgHhgfIylJNUszPB0EAQwbSDU3PB4EAQwcTDU+PB4EAQwbSDU3PB4EAQwcTDU+PB4EAQxMPEYgTAEnFigyQU4+FSo3Pj0ODBEoKREIBipHBAEMLCNFBAEMJUlLQjA+BAEMJ0FBBAEMMThGBAEMK0YEAQwrEk0EAQwwI0EEAQwqEkwEAQwZPQQBDE0tIEk4JksmSiZLBAEMTi0gSTkmSSZKJksEAQwZPAQBDB5BBAEMLRJPBAEMTEAjUCMkSDUvBgQBDDQSUAQBDCwzRSM/BAEMJyIfIylHShBHNQQBDB9ARTkEAQw+OxscHTsBLz1GFggmHB5IIUIRRgoIFAYBM0FHQiUiIAFQKTMpO0AlPE1KJzgnKTpAIQwRJyEuNzssMDxALQ4uOz4iDAoIBhkqBgQCAS5wYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwva2VybmVsX2ltcGFjdC5kYXJ0LnNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL3NzYS9sb2dnaW5nLmRhcnSg0i8vIENvcHlyaWdodCAoYykgMjAxOCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6ZnJvbnRfZW5kL3NyYy90ZXN0aW5nL2ZlYXR1cmVzLmRhcnQnOwppbXBvcnQgJ25vZGVzLmRhcnQnOwoKLy8vIExvZyB1c2VkIGZvciB1bml0IHRlc3Rpbmcgb3B0aW1pemF0aW9ucy4KY2xhc3MgT3B0aW1pemF0aW9uVGVzdExvZyB7CiAgTGlzdDxPcHRpbWl6YXRpb25Mb2dFbnRyeT4gZW50cmllcyA9IFtdOwoKICBNYXA8U3RyaW5nLCBTZXQ8SEluc3RydWN0aW9uPj4gX3VuY29udmVydGVkOwoKICBGZWF0dXJlcyBfcmVnaXN0ZXIoU3RyaW5nIHRhZywgSEluc3RydWN0aW9uIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkLAogICAgICB2b2lkIGYoRmVhdHVyZXMgZmVhdHVyZXMpKSB7CiAgICBpZiAoY29udmVydGVkID09IG51bGwpIHsKICAgICAgX3VuY29udmVydGVkID8/PSB7fTsKICAgICAgU2V0PEhJbnN0cnVjdGlvbj4gc2V0ID0gX3VuY29udmVydGVkW3RhZ10gPz89IG5ldyBTZXQ8SEluc3RydWN0aW9uPigpOwogICAgICBpZiAoIXNldC5hZGQob3JpZ2luYWwpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIEZlYXR1cmVzIGZlYXR1cmVzID0gbmV3IEZlYXR1cmVzKCk7CiAgICBmKGZlYXR1cmVzKTsKICAgIGVudHJpZXMuYWRkKG5ldyBPcHRpbWl6YXRpb25Mb2dFbnRyeSh0YWcsIGZlYXR1cmVzKSk7CiAgICByZXR1cm4gZmVhdHVyZXM7CiAgfQoKICB2b2lkIHJlZ2lzdGVyRmllbGRHZXQoSEludm9rZUR5bmFtaWNHZXR0ZXIgb3JpZ2luYWwsIEhGaWVsZEdldCBjb252ZXJ0ZWQpIHsKICAgIEZlYXR1cmVzIGZlYXR1cmVzID0gbmV3IEZlYXR1cmVzKCk7CiAgICBpZiAoY29udmVydGVkLmVsZW1lbnQgIT0gbnVsbCkgewogICAgICBmZWF0dXJlc1snbmFtZSddID0KICAgICAgICAgICcke2NvbnZlcnRlZC5lbGVtZW50LmVuY2xvc2luZ0NsYXNzLm5hbWV9LiR7Y29udmVydGVkLmVsZW1lbnQubmFtZX0nOwogICAgfSBlbHNlIHsKICAgICAgZmVhdHVyZXNbJ25hbWUnXSA9ICc8bnVsbC1ndWFyZD4nOwogICAgfQogICAgZW50cmllcy5hZGQobmV3IE9wdGltaXphdGlvbkxvZ0VudHJ5KCdGaWVsZEdldCcsIGZlYXR1cmVzKSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyRmllbGRTZXQoSEludm9rZUR5bmFtaWNTZXR0ZXIgb3JpZ2luYWwsIFtIRmllbGRTZXQgY29udmVydGVkXSkgewogICAgRmVhdHVyZXMgZmVhdHVyZXMgPSBuZXcgRmVhdHVyZXMoKTsKICAgIGlmIChjb252ZXJ0ZWQgIT0gbnVsbCkgewogICAgICBmZWF0dXJlc1snbmFtZSddID0KICAgICAgICAgICcke2NvbnZlcnRlZC5lbGVtZW50LmVuY2xvc2luZ0NsYXNzLm5hbWV9LiR7Y29udmVydGVkLmVsZW1lbnQubmFtZX0nOwogICAgfSBlbHNlIHsKICAgICAgZmVhdHVyZXNbJ3JlbW92ZWQnXSA9IG9yaWdpbmFsLnNlbGVjdG9yLm5hbWU7CiAgICB9CiAgICBlbnRyaWVzLmFkZChuZXcgT3B0aW1pemF0aW9uTG9nRW50cnkoJ0ZpZWxkU2V0JywgZmVhdHVyZXMpKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJGaWVsZENhbGwoSEludm9rZUR5bmFtaWNNZXRob2Qgb3JpZ2luYWwsIEhGaWVsZEdldCBjb252ZXJ0ZWQpIHsKICAgIEZlYXR1cmVzIGZlYXR1cmVzID0gbmV3IEZlYXR1cmVzKCk7CiAgICBpZiAoY29udmVydGVkLmVsZW1lbnQgIT0gbnVsbCkgewogICAgICBmZWF0dXJlc1snbmFtZSddID0KICAgICAgICAgICcke2NvbnZlcnRlZC5lbGVtZW50LmVuY2xvc2luZ0NsYXNzLm5hbWV9LiR7Y29udmVydGVkLmVsZW1lbnQubmFtZX0nOwogICAgfSBlbHNlIHsKICAgICAgZmVhdHVyZXNbJ25hbWUnXSA9ICc8bnVsbC1ndWFyZD4nOwogICAgfQogICAgZW50cmllcy5hZGQobmV3IE9wdGltaXphdGlvbkxvZ0VudHJ5KCdGaWVsZENhbGwnLCBmZWF0dXJlcykpOwogIH0KCiAgdm9pZCByZWdpc3RlckNvbnN0YW50RmllbGRHZXQoCiAgICAgIEhJbnZva2VEeW5hbWljR2V0dGVyIG9yaWdpbmFsLCBGaWVsZEVudGl0eSBmaWVsZCwgSENvbnN0YW50IGNvbnZlcnRlZCkgewogICAgRmVhdHVyZXMgZmVhdHVyZXMgPSBuZXcgRmVhdHVyZXMoKTsKICAgIGZlYXR1cmVzWyduYW1lJ10gPSAnJHtmaWVsZC5lbmNsb3NpbmdDbGFzcy5uYW1lfS4ke2ZpZWxkLm5hbWV9JzsKICAgIGZlYXR1cmVzWyd2YWx1ZSddID0gY29udmVydGVkLmNvbnN0YW50LnRvU3RydWN0dXJlZFRleHQoKTsKICAgIGVudHJpZXMuYWRkKG5ldyBPcHRpbWl6YXRpb25Mb2dFbnRyeSgnQ29uc3RhbnRGaWVsZEdldCcsIGZlYXR1cmVzKSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ29uc3RhbnRGaWVsZENhbGwoCiAgICAgIEhJbnZva2VEeW5hbWljTWV0aG9kIG9yaWdpbmFsLCBGaWVsZEVudGl0eSBmaWVsZCwgSENvbnN0YW50IGNvbnZlcnRlZCkgewogICAgRmVhdHVyZXMgZmVhdHVyZXMgPSBuZXcgRmVhdHVyZXMoKTsKICAgIGZlYXR1cmVzWyduYW1lJ10gPSAnJHtmaWVsZC5lbmNsb3NpbmdDbGFzcy5uYW1lfS4ke2ZpZWxkLm5hbWV9JzsKICAgIGZlYXR1cmVzWyd2YWx1ZSddID0gY29udmVydGVkLmNvbnN0YW50LnRvU3RydWN0dXJlZFRleHQoKTsKICAgIGVudHJpZXMuYWRkKG5ldyBPcHRpbWl6YXRpb25Mb2dFbnRyeSgnQ29uc3RhbnRGaWVsZENhbGwnLCBmZWF0dXJlcykpOwogIH0KCiAgRmVhdHVyZXMgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIoCiAgICAgIEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBISW5zdHJ1Y3Rpb24gY29udmVydGVkLCBTdHJpbmcgbmFtZSwKICAgICAgW1N0cmluZyB1bmNvbnZlcnRlZE5hbWVdKSB7CiAgICBhc3NlcnQoIShjb252ZXJ0ZWQgPT0gbnVsbCAmJiB1bmNvbnZlcnRlZE5hbWUgPT0gbnVsbCkpOwogICAgcmV0dXJuIF9yZWdpc3RlcignU3BlY2lhbGl6ZXInLCBvcmlnaW5hbCwgY29udmVydGVkLCAoRmVhdHVyZXMgZmVhdHVyZXMpIHsKICAgICAgaWYgKGNvbnZlcnRlZCAhPSBudWxsKSB7CiAgICAgICAgZmVhdHVyZXMuYWRkKG5hbWUpOwogICAgICB9IGVsc2UgewogICAgICAgIGZlYXR1cmVzLmFkZCh1bmNvbnZlcnRlZE5hbWUpOwogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgcmVnaXN0ZXJJbmRleEFzc2lnbihISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSEluZGV4QXNzaWduIGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ0luZGV4QXNzaWduJyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVySW5kZXgoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhJbmRleCBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdJbmRleCcpOwogIH0KCiAgdm9pZCByZWdpc3RlckJpdE5vdChISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSEJpdE5vdCBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdCaXROb3QnKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJVbmFyeU5lZ2F0ZShISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSE5lZ2F0ZSBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdOZWdhdGUnKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJBYnMoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhBYnMgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnQWJzJyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQWRkKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBIQWRkIGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ0FkZCcpOwogIH0KCiAgdm9pZCByZWdpc3RlckRpdmlkZShISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSERpdmlkZSBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdEaXZpZGUnKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJNb2R1bG8oSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIFtIUmVtYWluZGVyIGNvbnZlcnRlZF0pIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdNb2R1bG8nLCAnRHluYW1pY01vZHVsbycpOwogIH0KCiAgdm9pZCByZWdpc3RlclJlbWFpbmRlcihISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSFJlbWFpbmRlciBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdSZW1haW5kZXInKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJNdWx0aXBseShISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSE11bHRpcGx5IGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ011bHRpcGx5Jyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyU3VidHJhY3QoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhTdWJ0cmFjdCBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdTdWJ0cmFjdCcpOwogIH0KCiAgdm9pZCByZWdpc3RlclRydW5jYXRpbmdEaXZpZGUoCiAgICAgIEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBIVHJ1bmNhdGluZ0RpdmlkZSBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdUcnVuY2F0aW5nRGl2aWRlJywKICAgICAgICAnVHJ1bmNhdGluZ0RpdmlkZS4ke29yaWdpbmFsLnNlbGVjdG9yLm5hbWV9Jyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyU2hpZnRMZWZ0KEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBIU2hpZnRMZWZ0IGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ1NoaWZ0TGVmdCcsCiAgICAgICAgJ1NoaWZ0TGVmdC4ke29yaWdpbmFsLnNlbGVjdG9yLm5hbWV9Jyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyU2hpZnRSaWdodChISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSFNoaWZ0UmlnaHQgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnU2hpZnRSaWdodCcsCiAgICAgICAgJ1NoaWZ0UmlnaHQuJHtvcmlnaW5hbC5zZWxlY3Rvci5uYW1lfScpOwogIH0KCiAgdm9pZCByZWdpc3RlckJpdE9yKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBIQml0T3IgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnQml0T3InKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJCaXRBbmQoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhCaXRBbmQgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnQml0QW5kJyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQml0WG9yKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBIQml0WG9yIGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ0JpdFhvcicpOwogIH0KCiAgdm9pZCByZWdpc3RlckVxdWFscyhISW52b2tlRHluYW1pYyBvcmlnaW5hbCwgSElkZW50aXR5IGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ0VxdWFscycpOwogIH0KCiAgdm9pZCByZWdpc3Rlckxlc3MoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhMZXNzIGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ0xlc3MnKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJHcmVhdGVyKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBIR3JlYXRlciBjb252ZXJ0ZWQpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBjb252ZXJ0ZWQsICdHcmVhdGVyJyk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyTGVzc0VxdWFsKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBITGVzc0VxdWFsIGNvbnZlcnRlZCkgewogICAgX3JlZ2lzdGVyU3BlY2lhbGl6ZXIob3JpZ2luYWwsIGNvbnZlcnRlZCwgJ0xlc3NFcXVhbHMnKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJHcmVhdGVyRXF1YWwoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwsIEhHcmVhdGVyRXF1YWwgY29udmVydGVkKSB7CiAgICBfcmVnaXN0ZXJTcGVjaWFsaXplcihvcmlnaW5hbCwgY29udmVydGVkLCAnR3JlYXRlckVxdWFscycpOwogIH0KCiAgdm9pZCByZWdpc3RlckNvZGVVbml0QXQoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwpIHsKICAgIEZlYXR1cmVzIGZlYXR1cmVzID0gbmV3IEZlYXR1cmVzKCk7CiAgICBmZWF0dXJlc1snbmFtZSddID0gb3JpZ2luYWwuc2VsZWN0b3IubmFtZTsKICAgIGVudHJpZXMuYWRkKG5ldyBPcHRpbWl6YXRpb25Mb2dFbnRyeSgnQ29kZVVuaXRBdCcsIGZlYXR1cmVzKSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyQ29tcGFyZVRvKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsLCBbSENvbnN0YW50IGNvbnZlcnRlZF0pIHsKICAgIEZlYXR1cmVzIGZlYXR1cmVzID0gbmV3IEZlYXR1cmVzKCk7CiAgICBpZiAoY29udmVydGVkICE9IG51bGwpIHsKICAgICAgZmVhdHVyZXNbJ2NvbnN0YW50J10gPSBjb252ZXJ0ZWQuY29uc3RhbnQudG9EYXJ0VGV4dCgpOwogICAgfQogICAgZW50cmllcy5hZGQobmV3IE9wdGltaXphdGlvbkxvZ0VudHJ5KCdDb21wYXJlVG8nLCBmZWF0dXJlcykpOwogIH0KCiAgdm9pZCByZWdpc3RlclN1YnN0cmluZyhISW52b2tlRHluYW1pYyBvcmlnaW5hbCkgewogICAgRmVhdHVyZXMgZmVhdHVyZXMgPSBuZXcgRmVhdHVyZXMoKTsKICAgIGVudHJpZXMuYWRkKG5ldyBPcHRpbWl6YXRpb25Mb2dFbnRyeSgnU3Vic3RyaW5nJywgZmVhdHVyZXMpKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJUcmltKEhJbnZva2VEeW5hbWljIG9yaWdpbmFsKSB7CiAgICBGZWF0dXJlcyBmZWF0dXJlcyA9IG5ldyBGZWF0dXJlcygpOwogICAgZW50cmllcy5hZGQobmV3IE9wdGltaXphdGlvbkxvZ0VudHJ5KCdUcmltJywgZmVhdHVyZXMpKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJQYXR0ZXJuTWF0Y2goSEludm9rZUR5bmFtaWMgb3JpZ2luYWwpIHsKICAgIEZlYXR1cmVzIGZlYXR1cmVzID0gbmV3IEZlYXR1cmVzKCk7CiAgICBlbnRyaWVzLmFkZChuZXcgT3B0aW1pemF0aW9uTG9nRW50cnkoJ1BhdHRlcm5NYXRjaCcsIGZlYXR1cmVzKSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyUm91bmQoSEludm9rZUR5bmFtaWMgb3JpZ2luYWwpIHsKICAgIF9yZWdpc3RlclNwZWNpYWxpemVyKG9yaWdpbmFsLCBudWxsLCBudWxsLCAnUm91bmQnKTsKICB9CgogIHZvaWQgcmVnaXN0ZXJQcmltaXRpdmVDaGVjayhISW5zdHJ1Y3Rpb24gb3JpZ2luYWwsIEhQcmltaXRpdmVDaGVjayBjaGVjaykgewogICAgRmVhdHVyZXMgZmVhdHVyZXMgPSBuZXcgRmVhdHVyZXMoKTsKCiAgICBpZiAoY2hlY2suaXNSZWNlaXZlclR5cGVDaGVjaykgewogICAgICBmZWF0dXJlc1sna2luZCddID0gJ3JlY2VpdmVyJzsKICAgIH0gZWxzZSBpZiAoY2hlY2suaXNBcmd1bWVudFR5cGVDaGVjaykgewogICAgICBmZWF0dXJlc1sna2luZCddID0gJ2FyZ3VtZW50JzsKICAgIH0KICAgIGlmIChjaGVjay50eXBlRXhwcmVzc2lvbiAhPSBudWxsKSB7CiAgICAgIGZlYXR1cmVzWyd0eXBlJ10gPSAnJHtjaGVjay50eXBlRXhwcmVzc2lvbn0nOwogICAgfQogICAgZW50cmllcy5hZGQobmV3IE9wdGltaXphdGlvbkxvZ0VudHJ5KCdQcmltaXRpdmVDaGVjaycsIGZlYXR1cmVzKSk7CiAgfQoKICBTdHJpbmcgZ2V0VGV4dCgpIHsKICAgIHJldHVybiBlbnRyaWVzLmpvaW4oJyxcbicpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ09wdGltaXphdGlvbkxvZygke2dldFRleHQoKX0pJzsKfQoKLy8vIEEgcmVnaXN0ZXJlZCBvcHRpbWl6YXRpb24uCmNsYXNzIE9wdGltaXphdGlvbkxvZ0VudHJ5IHsKICAvLy8gU3RyaW5nIHRoYXQgdW5pcXVlbHkgaWRlbnRpZmllcyB0aGUgb3B0aW1pemF0aW9uIGtpbmQuCiAgZmluYWwgU3RyaW5nIHRhZzsKCiAgLy8vIEFkZGl0aW9uYWwgZGF0YSBmb3IgdGhpcyBvcHRpbWl6YXRpb24uCiAgZmluYWwgRmVhdHVyZXMgZmVhdHVyZXM7CgogIE9wdGltaXphdGlvbkxvZ0VudHJ5KHRoaXMudGFnLCB0aGlzLmZlYXR1cmVzKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyR0YWcoJHtmZWF0dXJlcy5nZXRUZXh0KCl9KSc7Cn0KgP0ATk48ASQ2FQEtHCsBLwFQIx0bTSAVCAYoEToVBAFOKCUZUA0pBkEEAVAoHRlQDTQGQQQBTyglGVANKQZCBAEhTyhFP0kEASJPKEU/SgQBIUQiPU8fHA8nCAgEAU4+BAFCOAQBRDkEAUk5BAE+NgQBPjYEAUQ5BAFJSgQBSjwEAUg7BAFIOwQBIT5CNwQBSjswBAFMPDEEAUI4BAFEOQQBRDkEAUY5BAFANwQBRjoEAUo9BAFQQAQBNSgvQwQBSygdPgZCBAE0KEIEAS8oPQQBNyhFBAEwOQQBTigBJSUsJQYoNAZHBAEVIAQBDDgCAR8dPRQBLRsBMQEMNgIBJXBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9sb2dnaW5nLmRhcnRIc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL2Zhc3RhL3BhcnNlci9saXRlcmFsX2VudHJ5X2luZm9faW1wbC5kYXJ0n8kvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCc7CmltcG9ydCAnbGl0ZXJhbF9lbnRyeV9pbmZvLmRhcnQnOwppbXBvcnQgJ3BhcnNlci5kYXJ0JzsKaW1wb3J0ICd1dGlsLmRhcnQnOwoKLy8vIFtpZkNvbmRpdGlvbl0gaXMgdGhlIGZpcnN0IHN0ZXAgZm9yIHBhcnNpbmcgYSBsaXRlcmFsIGVudHJ5Ci8vLyBzdGFydGluZyB3aXRoIGBpZmAgY29udHJvbCBmbG93Lgpjb25zdCBMaXRlcmFsRW50cnlJbmZvIGlmQ29uZGl0aW9uID0gY29uc3QgSWZDb25kaXRpb24oKTsKCi8vLyBbc3ByZWFkT3BlcmF0b3JdIGlzIHRoZSBmaXJzdCBzdGVwIGZvciBwYXJzaW5nIGEgbGl0ZXJhbCBlbnRyeQovLy8gcHJlY2VkZWQgYnkgYSAnLi4uJyBzcHJlYWQgb3BlcmF0b3IuCmNvbnN0IExpdGVyYWxFbnRyeUluZm8gc3ByZWFkT3BlcmF0b3IgPSBjb25zdCBTcHJlYWRPcGVyYXRvcigpOwoKLy8vIFRoZSBmaXJzdCBzdGVwIHdoZW4gcHJvY2Vzc2luZyBhIGBmb3JgIGNvbnRyb2wgZmxvdyBjb2xsZWN0aW9uIGVudHJ5LgpjbGFzcyBGb3JDb25kaXRpb24gZXh0ZW5kcyBMaXRlcmFsRW50cnlJbmZvIHsKICBib29sIGluU3R5bGU7CgogIEZvckNvbmRpdGlvbigpIDogc3VwZXIoZmFsc2UsIDApOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBUb2tlbiBhd2FpdFRva2VuOwogICAgaWYgKG9wdGlvbmFsKCdhd2FpdCcsIG5leHQpKSB7CiAgICAgIGF3YWl0VG9rZW4gPSB0b2tlbiA9IG5leHQ7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgfQogICAgZmluYWwgZm9yVG9rZW4gPSBuZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCdmb3InLCBmb3JUb2tlbikpOwogICAgcGFyc2VyLmxpc3RlbmVyLmJlZ2luRm9yQ29udHJvbEZsb3coYXdhaXRUb2tlbiwgZm9yVG9rZW4pOwoKICAgIHRva2VuID0gcGFyc2VyLnBhcnNlRm9yTG9vcFBhcnRzU3RhcnQoYXdhaXRUb2tlbiwgZm9yVG9rZW4pOwogICAgVG9rZW4gaWRlbnRpZmllciA9IHRva2VuLm5leHQ7CiAgICB0b2tlbiA9IHBhcnNlci5wYXJzZUZvckxvb3BQYXJ0c01pZCh0b2tlbiwgYXdhaXRUb2tlbiwgZm9yVG9rZW4pOwoKICAgIGlmIChvcHRpb25hbCgnaW4nLCB0b2tlbi5uZXh0KSB8fCBvcHRpb25hbCgnOicsIHRva2VuLm5leHQpKSB7CiAgICAgIC8vIFByb2Nlc3MgYGZvciAoIC4uLiBpbiAuLi4gKWAKICAgICAgaW5TdHlsZSA9IHRydWU7CiAgICAgIHRva2VuID0gcGFyc2VyLnBhcnNlRm9ySW5Mb29wUGFydHNSZXN0KAogICAgICAgICAgdG9rZW4sIGF3YWl0VG9rZW4sIGZvclRva2VuLCBpZGVudGlmaWVyKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFByb2Nlc3MgYGZvciAoIC4uLiA7IC4uLiA7IC4uLiApYAogICAgICBpblN0eWxlID0gZmFsc2U7CiAgICAgIHRva2VuID0gcGFyc2VyLnBhcnNlRm9yTG9vcFBhcnRzUmVzdCh0b2tlbiwgZm9yVG9rZW4sIGF3YWl0VG9rZW4pOwogICAgfQogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgTGl0ZXJhbEVudHJ5SW5mbyBjb21wdXRlTmV4dChUb2tlbiB0b2tlbikgewogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJ2ZvcicsIG5leHQpIHx8CiAgICAgICAgKG9wdGlvbmFsKCdhd2FpdCcsIG5leHQpICYmIG9wdGlvbmFsKCdmb3InLCBuZXh0Lm5leHQpKSkgewogICAgICByZXR1cm4gbmV3IE5lc3RlZCgKICAgICAgICBuZXcgRm9yQ29uZGl0aW9uKCksCiAgICAgICAgaW5TdHlsZSA/IGNvbnN0IEZvckluQ29tcGxldGUoKSA6IGNvbnN0IEZvckNvbXBsZXRlKCksCiAgICAgICk7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCdpZicsIG5leHQpKSB7CiAgICAgIHJldHVybiBuZXcgTmVzdGVkKAogICAgICAgIGlmQ29uZGl0aW9uLAogICAgICAgIGluU3R5bGUgPyBjb25zdCBGb3JJbkNvbXBsZXRlKCkgOiBjb25zdCBGb3JDb21wbGV0ZSgpLAogICAgICApOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnLi4uJywgbmV4dCkgfHwgb3B0aW9uYWwoJy4uLj8nLCBuZXh0KSkgewogICAgICByZXR1cm4gaW5TdHlsZSA/IGNvbnN0IEZvckluU3ByZWFkKCkgOiBjb25zdCBGb3JTcHJlYWQoKTsKICAgIH0KICAgIHJldHVybiBpblN0eWxlID8gY29uc3QgRm9ySW5FbnRyeSgpIDogY29uc3QgRm9yRW50cnkoKTsKICB9Cn0KCi8vLyBBIHN0ZXAgZm9yIHBhcnNpbmcgYSBzcHJlYWQgY29sbGVjdGlvbgovLy8gYXMgdGhlICJmb3IiIGNvbnRyb2wgZmxvdydzIGV4cHJlc3Npb24uCmNsYXNzIEZvclNwcmVhZCBleHRlbmRzIFNwcmVhZE9wZXJhdG9yIHsKICBjb25zdCBGb3JTcHJlYWQoKTsKCiAgQG92ZXJyaWRlCiAgTGl0ZXJhbEVudHJ5SW5mbyBjb21wdXRlTmV4dChUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIGNvbnN0IEZvckNvbXBsZXRlKCk7CiAgfQp9CgovLy8gQSBzdGVwIGZvciBwYXJzaW5nIGEgc3ByZWFkIGNvbGxlY3Rpb24KLy8vIGFzIHRoZSAiZm9yLWluIiBjb250cm9sIGZsb3cncyBleHByZXNzaW9uLgpjbGFzcyBGb3JJblNwcmVhZCBleHRlbmRzIFNwcmVhZE9wZXJhdG9yIHsKICBjb25zdCBGb3JJblNwcmVhZCgpOwoKICBAb3ZlcnJpZGUKICBMaXRlcmFsRW50cnlJbmZvIGNvbXB1dGVOZXh0KFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gY29uc3QgRm9ySW5Db21wbGV0ZSgpOwogIH0KfQoKLy8vIEEgc3RlcCBmb3IgcGFyc2luZyBhIGxpdGVyYWwgbGlzdCwgc2V0LCBvciBtYXAgZW50cnkKLy8vIGFzIHRoZSAiZm9yIiBjb250cm9sIGZsb3cncyBleHByZXNzaW9uLgpjbGFzcyBGb3JFbnRyeSBleHRlbmRzIExpdGVyYWxFbnRyeUluZm8gewogIGNvbnN0IEZvckVudHJ5KCkgOiBzdXBlcih0cnVlLCAwKTsKCiAgQG92ZXJyaWRlCiAgTGl0ZXJhbEVudHJ5SW5mbyBjb21wdXRlTmV4dChUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIGNvbnN0IEZvckNvbXBsZXRlKCk7CiAgfQp9CgovLy8gQSBzdGVwIGZvciBwYXJzaW5nIGEgbGl0ZXJhbCBsaXN0LCBzZXQsIG9yIG1hcCBlbnRyeQovLy8gYXMgdGhlICJmb3ItaW4iIGNvbnRyb2wgZmxvdydzIGV4cHJlc3Npb24uCmNsYXNzIEZvckluRW50cnkgZXh0ZW5kcyBMaXRlcmFsRW50cnlJbmZvIHsKICBjb25zdCBGb3JJbkVudHJ5KCkgOiBzdXBlcih0cnVlLCAwKTsKCiAgQG92ZXJyaWRlCiAgTGl0ZXJhbEVudHJ5SW5mbyBjb21wdXRlTmV4dChUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIGNvbnN0IEZvckluQ29tcGxldGUoKTsKICB9Cn0KCmNsYXNzIEZvckNvbXBsZXRlIGV4dGVuZHMgTGl0ZXJhbEVudHJ5SW5mbyB7CiAgY29uc3QgRm9yQ29tcGxldGUoKSA6IHN1cGVyKGZhbHNlLCAwKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2UoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIHBhcnNlci5saXN0ZW5lci5lbmRGb3JDb250cm9sRmxvdyh0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQp9CgpjbGFzcyBGb3JJbkNvbXBsZXRlIGV4dGVuZHMgTGl0ZXJhbEVudHJ5SW5mbyB7CiAgY29uc3QgRm9ySW5Db21wbGV0ZSgpIDogc3VwZXIoZmFsc2UsIDApOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgcGFyc2VyLmxpc3RlbmVyLmVuZEZvckluQ29udHJvbEZsb3codG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KfQoKLy8vIFRoZSBmaXJzdCBzdGVwIHdoZW4gcHJvY2Vzc2luZyBhbiBgaWZgIGNvbnRyb2wgZmxvdyBjb2xsZWN0aW9uIGVudHJ5LgpjbGFzcyBJZkNvbmRpdGlvbiBleHRlbmRzIExpdGVyYWxFbnRyeUluZm8gewogIGNvbnN0IElmQ29uZGl0aW9uKCkgOiBzdXBlcihmYWxzZSwgMSk7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBmaW5hbCBpZlRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnaWYnLCBpZlRva2VuKSk7CiAgICBwYXJzZXIubGlzdGVuZXIuYmVnaW5JZkNvbnRyb2xGbG93KGlmVG9rZW4pOwogICAgVG9rZW4gcmVzdWx0ID0gcGFyc2VyLmVuc3VyZVBhcmVudGhlc2l6ZWRDb25kaXRpb24oaWZUb2tlbik7CiAgICBwYXJzZXIubGlzdGVuZXIuYmVnaW5UaGVuQ29udHJvbEZsb3cocmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBMaXRlcmFsRW50cnlJbmZvIGNvbXB1dGVOZXh0KFRva2VuIHRva2VuKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChvcHRpb25hbCgnZm9yJywgbmV4dCkgfHwKICAgICAgICAob3B0aW9uYWwoJ2F3YWl0JywgbmV4dCkgJiYgb3B0aW9uYWwoJ2ZvcicsIG5leHQubmV4dCkpKSB7CiAgICAgIHJldHVybiBuZXcgTmVzdGVkKG5ldyBGb3JDb25kaXRpb24oKSwgY29uc3QgSWZDb21wbGV0ZSgpKTsKICAgIH0gZWxzZSBpZiAob3B0aW9uYWwoJ2lmJywgbmV4dCkpIHsKICAgICAgcmV0dXJuIG5ldyBOZXN0ZWQoaWZDb25kaXRpb24sIGNvbnN0IElmQ29tcGxldGUoKSk7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCcuLi4nLCBuZXh0KSB8fCBvcHRpb25hbCgnLi4uPycsIG5leHQpKSB7CiAgICAgIHJldHVybiBjb25zdCBJZlNwcmVhZCgpOwogICAgfQogICAgcmV0dXJuIGNvbnN0IElmRW50cnkoKTsKICB9Cn0KCi8vLyBBIHN0ZXAgZm9yIHBhcnNpbmcgYSBzcHJlYWQgY29sbGVjdGlvbgovLy8gYXMgdGhlIGBpZmAgY29udHJvbCBmbG93J3MgdGhlbi1leHByZXNzaW9uLgpjbGFzcyBJZlNwcmVhZCBleHRlbmRzIFNwcmVhZE9wZXJhdG9yIHsKICBjb25zdCBJZlNwcmVhZCgpOwoKICBAb3ZlcnJpZGUKICBMaXRlcmFsRW50cnlJbmZvIGNvbXB1dGVOZXh0KFRva2VuIHRva2VuKSA9PiBjb25zdCBJZkNvbXBsZXRlKCk7Cn0KCi8vLyBBIHN0ZXAgZm9yIHBhcnNpbmcgYSBsaXRlcmFsIGxpc3QsIHNldCwgb3IgbWFwIGVudHJ5Ci8vLyBhcyB0aGUgYGlmYCBjb250cm9sIGZsb3cncyB0aGVuLWV4cHJlc3Npb24uCmNsYXNzIElmRW50cnkgZXh0ZW5kcyBMaXRlcmFsRW50cnlJbmZvIHsKICBjb25zdCBJZkVudHJ5KCkgOiBzdXBlcih0cnVlLCAwKTsKCiAgQG92ZXJyaWRlCiAgTGl0ZXJhbEVudHJ5SW5mbyBjb21wdXRlTmV4dChUb2tlbiB0b2tlbikgPT4gY29uc3QgSWZDb21wbGV0ZSgpOwp9CgpjbGFzcyBJZkNvbXBsZXRlIGV4dGVuZHMgTGl0ZXJhbEVudHJ5SW5mbyB7CiAgY29uc3QgSWZDb21wbGV0ZSgpIDogc3VwZXIoZmFsc2UsIDApOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgaWYgKCFvcHRpb25hbCgnZWxzZScsIHRva2VuLm5leHQpKSB7CiAgICAgIHBhcnNlci5saXN0ZW5lci5lbmRJZkNvbnRyb2xGbG93KHRva2VuKTsKICAgIH0KICAgIHJldHVybiB0b2tlbjsKICB9CgogIEBvdmVycmlkZQogIExpdGVyYWxFbnRyeUluZm8gY29tcHV0ZU5leHQoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiBvcHRpb25hbCgnZWxzZScsIHRva2VuLm5leHQpID8gY29uc3QgSWZFbHNlKCkgOiBudWxsOwogIH0KfQoKLy8vIEEgc3RlcCBmb3IgcGFyc2luZyB0aGUgYGVsc2VgIHBvcnRpb24gb2YgYW4gYGlmYCBjb250cm9sIGZsb3cuCmNsYXNzIElmRWxzZSBleHRlbmRzIExpdGVyYWxFbnRyeUluZm8gewogIGNvbnN0IElmRWxzZSgpIDogc3VwZXIoZmFsc2UsIC0xKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2UoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGVsc2VUb2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2Vsc2UnLCBlbHNlVG9rZW4pKTsKICAgIHBhcnNlci5saXN0ZW5lci5oYW5kbGVFbHNlQ29udHJvbEZsb3coZWxzZVRva2VuKTsKICAgIHJldHVybiBlbHNlVG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBMaXRlcmFsRW50cnlJbmZvIGNvbXB1dGVOZXh0KFRva2VuIHRva2VuKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJ2Vsc2UnLCB0b2tlbikpOwogICAgVG9rZW4gbmV4dCA9IHRva2VuLm5leHQ7CiAgICBpZiAob3B0aW9uYWwoJ2ZvcicsIG5leHQpIHx8CiAgICAgICAgKG9wdGlvbmFsKCdhd2FpdCcsIG5leHQpICYmIG9wdGlvbmFsKCdmb3InLCBuZXh0Lm5leHQpKSkgewogICAgICByZXR1cm4gbmV3IE5lc3RlZChuZXcgRm9yQ29uZGl0aW9uKCksIGNvbnN0IElmRWxzZUNvbXBsZXRlKCkpOwogICAgfSBlbHNlIGlmIChvcHRpb25hbCgnaWYnLCBuZXh0KSkgewogICAgICByZXR1cm4gbmV3IE5lc3RlZChpZkNvbmRpdGlvbiwgY29uc3QgSWZFbHNlQ29tcGxldGUoKSk7CiAgICB9IGVsc2UgaWYgKG9wdGlvbmFsKCcuLi4nLCBuZXh0KSB8fCBvcHRpb25hbCgnLi4uPycsIG5leHQpKSB7CiAgICAgIHJldHVybiBjb25zdCBFbHNlU3ByZWFkKCk7CiAgICB9CiAgICByZXR1cm4gY29uc3QgRWxzZUVudHJ5KCk7CiAgfQp9CgpjbGFzcyBFbHNlU3ByZWFkIGV4dGVuZHMgU3ByZWFkT3BlcmF0b3IgewogIGNvbnN0IEVsc2VTcHJlYWQoKTsKCiAgQG92ZXJyaWRlCiAgTGl0ZXJhbEVudHJ5SW5mbyBjb21wdXRlTmV4dChUb2tlbiB0b2tlbikgewogICAgcmV0dXJuIGNvbnN0IElmRWxzZUNvbXBsZXRlKCk7CiAgfQp9CgpjbGFzcyBFbHNlRW50cnkgZXh0ZW5kcyBMaXRlcmFsRW50cnlJbmZvIHsKICBjb25zdCBFbHNlRW50cnkoKSA6IHN1cGVyKHRydWUsIDApOwoKICBAb3ZlcnJpZGUKICBMaXRlcmFsRW50cnlJbmZvIGNvbXB1dGVOZXh0KFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gY29uc3QgSWZFbHNlQ29tcGxldGUoKTsKICB9Cn0KCmNsYXNzIElmRWxzZUNvbXBsZXRlIGV4dGVuZHMgTGl0ZXJhbEVudHJ5SW5mbyB7CiAgY29uc3QgSWZFbHNlQ29tcGxldGUoKSA6IHN1cGVyKGZhbHNlLCAwKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2UoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIHBhcnNlci5saXN0ZW5lci5lbmRJZkVsc2VDb250cm9sRmxvdyh0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQp9CgovLy8gVGhlIGZpcnN0IHN0ZXAgd2hlbiBwcm9jZXNzaW5nIGEgc3ByZWFkIGVudHJ5LgpjbGFzcyBTcHJlYWRPcGVyYXRvciBleHRlbmRzIExpdGVyYWxFbnRyeUluZm8gewogIGNvbnN0IFNwcmVhZE9wZXJhdG9yKCkgOiBzdXBlcihmYWxzZSwgMCk7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBmaW5hbCBvcGVyYXRvciA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJy4uLicsIG9wZXJhdG9yKSB8fCBvcHRpb25hbCgnLi4uPycsIG9wZXJhdG9yKSk7CiAgICB0b2tlbiA9IHBhcnNlci5wYXJzZUV4cHJlc3Npb24ob3BlcmF0b3IpOwogICAgcGFyc2VyLmxpc3RlbmVyLmhhbmRsZVNwcmVhZEV4cHJlc3Npb24ob3BlcmF0b3IpOwogICAgcmV0dXJuIHRva2VuOwogIH0KfQoKY2xhc3MgTmVzdGVkIGV4dGVuZHMgTGl0ZXJhbEVudHJ5SW5mbyB7CiAgTGl0ZXJhbEVudHJ5SW5mbyBuZXN0ZWRTdGVwOwogIGZpbmFsIExpdGVyYWxFbnRyeUluZm8gbGFzdFN0ZXA7CgogIE5lc3RlZCh0aGlzLm5lc3RlZFN0ZXAsIHRoaXMubGFzdFN0ZXApIDogc3VwZXIoZmFsc2UsIDApOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBoYXNFbnRyeSA9PiBuZXN0ZWRTdGVwLmhhc0VudHJ5OwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4gbmVzdGVkU3RlcC5wYXJzZSh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgTGl0ZXJhbEVudHJ5SW5mbyBjb21wdXRlTmV4dChUb2tlbiB0b2tlbikgewogICAgbmVzdGVkU3RlcCA9IG5lc3RlZFN0ZXAuY29tcHV0ZU5leHQodG9rZW4pOwogICAgcmV0dXJuIG5lc3RlZFN0ZXAgIT0gbnVsbCA/IHRoaXMgOiBsYXN0U3RlcDsKICB9Cn0KgSMATU48ASMiFhQBQCU6AUMpQAFKLhABJAEMLB0WIyEZBhsnPwFBI0YBQyYWLjQNKxdJBhIEAQwuHSFDGRw/CScZFT8JQkAGPAQCASssKRUBDC4gBAIBKy8rFwEMLiIEAgE5LColAQwuIAQCATkvLCcBDC4iBAIBLSkBDCwuEgQCAS8rAQwsMBIEAgFKLSkBDCwgJTFBMhMEAQwuHSFDQSc6Qh8GHAQCASswKBQBDEMCATkwKSQBDEMCASwoAQwsKS8GEgQBDC5BBAIBQyglAQwsIik2FgQBDC4lHSFDRSc+QiEGHgQCASoWAQwuIwQCASsmAQwuIwQCATAsAQwsMRIEAgEzMCwBDCwhRS42EgQCASgfIwE8AQwsAQxOAQwuMDEEAgE/cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9saXRlcmFsX2VudHJ5X2luZm9faW1wbC5kYXJ0P3Nka3Jvb3Q6L3BrZy9mcm9udF9lbmQvbGliL3NyYy9mYXN0YS9wYXJzZXIvdHlwZV9pbmZvX2ltcGwuZGFydMAAjY8vLyBDb3B5cmlnaHQgKGMpIDIwMTgsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBmYXN0YS5wYXJzZXIudHlwZV9pbmZvX2ltcGw7CgppbXBvcnQgJy4uLy4uL3NjYW5uZXIvdG9rZW4uZGFydCcgc2hvdyBTeW50aGV0aWNUb2tlbiwgVG9rZW4sIFRva2VuVHlwZTsKCmltcG9ydCAnLi4vZmFzdGFfY29kZXMuZGFydCcgYXMgZmFzdGE7CgppbXBvcnQgJy4uL3NjYW5uZXIvdG9rZW5fY29uc3RhbnRzLmRhcnQnIHNob3cgSURFTlRJRklFUl9UT0tFTjsKCmltcG9ydCAnLi4vdXRpbC9saW5rLmRhcnQnIHNob3cgTGluazsKCmltcG9ydCAnZm9yd2FyZGluZ19saXN0ZW5lci5kYXJ0JyBzaG93IEZvcndhcmRpbmdMaXN0ZW5lcjsKCmltcG9ydCAnaWRlbnRpZmllcl9jb250ZXh0LmRhcnQnIHNob3cgSWRlbnRpZmllckNvbnRleHQ7CgppbXBvcnQgJ21lbWJlcl9raW5kLmRhcnQnIHNob3cgTWVtYmVyS2luZDsKCmltcG9ydCAnbGlzdGVuZXIuZGFydCcgc2hvdyBMaXN0ZW5lcjsKCmltcG9ydCAncGFyc2VyLmRhcnQnIHNob3cgUGFyc2VyOwoKaW1wb3J0ICd0eXBlX2luZm8uZGFydCc7CgppbXBvcnQgJ3V0aWwuZGFydCcKICAgIHNob3cKICAgICAgICBvcHRpb25hbCwKICAgICAgICBza2lwTWV0YWRhdGEsCiAgICAgICAgc3BsaXRHdEVxLAogICAgICAgIHNwbGl0R3RGcm9tR3RHdEVxLAogICAgICAgIHNwbGl0R3RGcm9tR3RHdEd0LAogICAgICAgIHNwbGl0R3RGcm9tR3RHdEd0RXEsCiAgICAgICAgc3BsaXRHdEd0LAogICAgICAgIHN5bnRoZXRpY0d0OwoKLy8vIFtTaW1wbGVUeXBlXSBpcyBhIHNwZWNpYWxpemVkIFtUeXBlSW5mb10gcmV0dXJuZWQgYnkgW2NvbXB1dGVUeXBlXQovLy8gd2hlbiB0aGVyZSBpcyBhIHNpbmdsZSBpZGVudGlmaWVyIGFzIHRoZSB0eXBlIHJlZmVyZW5jZS4KY29uc3QgVHlwZUluZm8gc2ltcGxlVHlwZSA9IGNvbnN0IFNpbXBsZVR5cGUoKTsKCi8vLyBbU2ltcGxlTnVsbGFibGVUeXBlXSBpcyBhIHNwZWNpYWxpemVkIFtUeXBlSW5mb10gcmV0dXJuZWQgYnkgW2NvbXB1dGVUeXBlXQovLy8gd2hlbiB0aGVyZSBpcyBhIHNpbmdsZSBpZGVudGlmaWVyIGZvbGxvd2VkIGJ5IGA/YCBhcyB0aGUgdHlwZSByZWZlcmVuY2UuCmNvbnN0IFR5cGVJbmZvIHNpbXBsZU51bGxhYmxlVHlwZSA9IGNvbnN0IFNpbXBsZU51bGxhYmxlVHlwZSgpOwoKLy8vIFtQcmVmaXhlZFR5cGVdIGlzIGEgc3BlY2lhbGl6ZWQgW1R5cGVJbmZvXSByZXR1cm5lZCBieSBbY29tcHV0ZVR5cGVdCi8vLyB3aGVuIHRoZSB0eXBlIHJlZmVyZW5jZSBpcyBvZiB0aGUgZm9ybTogaWRlbnRpZmllciBgLmAgaWRlbnRpZmllci4KY29uc3QgVHlwZUluZm8gcHJlZml4ZWRUeXBlID0gY29uc3QgUHJlZml4ZWRUeXBlKCk7CgovLy8gW1NpbXBsZVR5cGVXaXRoMUFyZ3VtZW50XSBpcyBhIHNwZWNpYWxpemVkIFtUeXBlSW5mb10gcmV0dXJuZWQgYnkKLy8vIFtjb21wdXRlVHlwZV0gd2hlbiB0aGUgdHlwZSByZWZlcmVuY2UgaXMgb2YgdGhlIGZvcm06Ci8vLyBpZGVudGlmaWVyIGA8YCBpZGVudGlmaWVyIGA+YC4KY29uc3QgVHlwZUluZm8gc2ltcGxlVHlwZVdpdGgxQXJndW1lbnQgPQogICAgY29uc3QgU2ltcGxlVHlwZVdpdGgxQXJndW1lbnQoc2ltcGxlVHlwZUFyZ3VtZW50MSk7CgovLy8gW1NpbXBsZVR5cGVXaXRoMUFyZ3VtZW50XSBpcyBhIHNwZWNpYWxpemVkIFtUeXBlSW5mb10gcmV0dXJuZWQgYnkKLy8vIFtjb21wdXRlVHlwZV0gd2hlbiB0aGUgdHlwZSByZWZlcmVuY2UgaXMgb2YgdGhlIGZvcm06Ci8vLyBpZGVudGlmaWVyIGA8YCBpZGVudGlmaWVyIGA+PWAuCmNvbnN0IFR5cGVJbmZvIHNpbXBsZVR5cGVXaXRoMUFyZ3VtZW50R3RFcSA9CiAgICBjb25zdCBTaW1wbGVUeXBlV2l0aDFBcmd1bWVudChzaW1wbGVUeXBlQXJndW1lbnQxR3RFcSk7CgovLy8gW1NpbXBsZVR5cGVXaXRoMUFyZ3VtZW50XSBpcyBhIHNwZWNpYWxpemVkIFtUeXBlSW5mb10gcmV0dXJuZWQgYnkKLy8vIFtjb21wdXRlVHlwZV0gd2hlbiB0aGUgdHlwZSByZWZlcmVuY2UgaXMgb2YgdGhlIGZvcm06Ci8vLyBpZGVudGlmaWVyIGA8YCBpZGVudGlmaWVyIGA+PmAuCmNvbnN0IFR5cGVJbmZvIHNpbXBsZVR5cGVXaXRoMUFyZ3VtZW50R3RHdCA9CiAgICBjb25zdCBTaW1wbGVUeXBlV2l0aDFBcmd1bWVudChzaW1wbGVUeXBlQXJndW1lbnQxR3RHdCk7CgovLy8gW1NpbXBsZU51bGxhYmxlVHlwZVdpdGgxQXJndW1lbnRdIGlzIGEgc3BlY2lhbGl6ZWQgW1R5cGVJbmZvXSByZXR1cm5lZCBieQovLy8gW2NvbXB1dGVUeXBlXSB3aGVuIHRoZSB0eXBlIHJlZmVyZW5jZSBpcyBvZiB0aGUgZm9ybToKLy8vIGlkZW50aWZpZXIgYDxgIGlkZW50aWZpZXIgYD5gIGA/YC4KY29uc3QgVHlwZUluZm8gc2ltcGxlTnVsbGFibGVUeXBlV2l0aDFBcmd1bWVudCA9CiAgICBjb25zdCBTaW1wbGVOdWxsYWJsZVR5cGVXaXRoMUFyZ3VtZW50KCk7CgovLy8gW1NpbXBsZVR5cGVBcmd1bWVudDFdIGlzIGEgc3BlY2lhbGl6ZWQgW1R5cGVQYXJhbU9yQXJnSW5mb10gcmV0dXJuZWQgYnkKLy8vIFtjb21wdXRlVHlwZVBhcmFtT3JBcmddIHdoZW4gdGhlIHR5cGUgcmVmZXJlbmNlIGlzIG9mIHRoZSBmb3JtOgovLy8gYDxgIGlkZW50aWZpZXIgYD5gLgpjb25zdCBUeXBlUGFyYW1PckFyZ0luZm8gc2ltcGxlVHlwZUFyZ3VtZW50MSA9IGNvbnN0IFNpbXBsZVR5cGVBcmd1bWVudDEoKTsKCi8vLyBbU2ltcGxlVHlwZUFyZ3VtZW50MV0gaXMgYSBzcGVjaWFsaXplZCBbVHlwZVBhcmFtT3JBcmdJbmZvXSByZXR1cm5lZCBieQovLy8gW2NvbXB1dGVUeXBlUGFyYW1PckFyZ10gd2hlbiB0aGUgdHlwZSByZWZlcmVuY2UgaXMgb2YgdGhlIGZvcm06Ci8vLyBgPGAgaWRlbnRpZmllciBgPj1gLgpjb25zdCBUeXBlUGFyYW1PckFyZ0luZm8gc2ltcGxlVHlwZUFyZ3VtZW50MUd0RXEgPQogICAgY29uc3QgU2ltcGxlVHlwZUFyZ3VtZW50MUd0RXEoKTsKCi8vLyBbU2ltcGxlVHlwZUFyZ3VtZW50MV0gaXMgYSBzcGVjaWFsaXplZCBbVHlwZVBhcmFtT3JBcmdJbmZvXSByZXR1cm5lZCBieQovLy8gW2NvbXB1dGVUeXBlUGFyYW1PckFyZ10gd2hlbiB0aGUgdHlwZSByZWZlcmVuY2UgaXMgb2YgdGhlIGZvcm06Ci8vLyBgPGAgaWRlbnRpZmllciBgPj5gLgpjb25zdCBUeXBlUGFyYW1PckFyZ0luZm8gc2ltcGxlVHlwZUFyZ3VtZW50MUd0R3QgPQogICAgY29uc3QgU2ltcGxlVHlwZUFyZ3VtZW50MUd0R3QoKTsKCi8vLyBTZWUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgW25vVHlwZV0gY29uc3QuCmNsYXNzIE5vVHlwZSBpbXBsZW1lbnRzIFR5cGVJbmZvIHsKICBjb25zdCBOb1R5cGUoKTsKCiAgQG92ZXJyaWRlCiAgVHlwZUluZm8gZ2V0IGFzTm9uTnVsbGFibGUgPT4gdGhpczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgY291bGRCZUV4cHJlc3Npb24gPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVsbGFibGUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZVR5cGVOb3RWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICB0b2tlbi5uZXh0LCBmYXN0YS50ZW1wbGF0ZUV4cGVjdGVkVHlwZSk7CiAgICBwYXJzZXIucmV3cml0ZXIuaW5zZXJ0U3ludGhldGljSWRlbnRpZmllcih0b2tlbik7CiAgICByZXR1cm4gc2ltcGxlVHlwZS5wYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVUeXBlT3JWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PgogICAgICBlbnN1cmVUeXBlTm90Vm9pZCh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VUeXBlTm90Vm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4KICAgICAgcGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVR5cGUoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIHBhcnNlci5saXN0ZW5lci5oYW5kbGVOb1R5cGUodG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gc2tpcFR5cGUoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiB0b2tlbjsKICB9Cn0KCi8vLyBTZWUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgW3ByZWZpeGVkVHlwZV0gY29uc3QuCmNsYXNzIFByZWZpeGVkVHlwZSBpbXBsZW1lbnRzIFR5cGVJbmZvIHsKICBjb25zdCBQcmVmaXhlZFR5cGUoKTsKCiAgQG92ZXJyaWRlCiAgVHlwZUluZm8gZ2V0IGFzTm9uTnVsbGFibGUgPT4gdGhpczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgY291bGRCZUV4cHJlc3Npb24gPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOdWxsYWJsZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlVHlwZU5vdFZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+CiAgICAgIHBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlVHlwZU9yVm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4KICAgICAgcGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVR5cGVOb3RWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PgogICAgICBwYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVHlwZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gc3RhcnQgPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQodG9rZW4uaXNLZXl3b3JkT3JJZGVudGlmaWVyKTsKICAgIExpc3RlbmVyIGxpc3RlbmVyID0gcGFyc2VyLmxpc3RlbmVyOwogICAgbGlzdGVuZXIuaGFuZGxlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQucHJlZml4ZWRUeXBlUmVmZXJlbmNlKTsKCiAgICBUb2tlbiBwZXJpb2QgPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJy4nLCB0b2tlbikpOwoKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydCh0b2tlbi5pc0tleXdvcmRPcklkZW50aWZpZXIpOwogICAgbGlzdGVuZXIuaGFuZGxlSWRlbnRpZmllcigKICAgICAgICB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQudHlwZVJlZmVyZW5jZUNvbnRpbnVhdGlvbik7CiAgICBsaXN0ZW5lci5oYW5kbGVRdWFsaWZpZWQocGVyaW9kKTsKCiAgICBsaXN0ZW5lci5oYW5kbGVOb1R5cGVBcmd1bWVudHModG9rZW4ubmV4dCk7CiAgICBsaXN0ZW5lci5oYW5kbGVUeXBlKHN0YXJ0LCBudWxsKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHNraXBUeXBlKFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gdG9rZW4ubmV4dC5uZXh0Lm5leHQ7CiAgfQp9CgovLy8gU2VlIGRvY3VtZW50YXRpb24gb24gdGhlIFtzaW1wbGVOdWxsYWJsZVR5cGVXaXRoMUFyZ3VtZW50XSBjb25zdC4KY2xhc3MgU2ltcGxlTnVsbGFibGVUeXBlV2l0aDFBcmd1bWVudCBleHRlbmRzIFNpbXBsZVR5cGVXaXRoMUFyZ3VtZW50IHsKICBjb25zdCBTaW1wbGVOdWxsYWJsZVR5cGVXaXRoMUFyZ3VtZW50KCkgOiBzdXBlcihzaW1wbGVUeXBlQXJndW1lbnQxKTsKCiAgQG92ZXJyaWRlCiAgVHlwZUluZm8gZ2V0IGFzTm9uTnVsbGFibGUgPT4gc2ltcGxlVHlwZVdpdGgxQXJndW1lbnQ7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVsbGFibGUgPT4gdHJ1ZTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VUeXBlUmVzdChUb2tlbiBzdGFydCwgVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnPycsIHRva2VuKSk7CiAgICBwYXJzZXIubGlzdGVuZXIuaGFuZGxlVHlwZShzdGFydCwgdG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gc2tpcFR5cGUoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gc3VwZXIuc2tpcFR5cGUodG9rZW4pLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJz8nLCB0b2tlbikpOwogICAgcmV0dXJuIHRva2VuOwogIH0KfQoKLy8vIFNlZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBbc2ltcGxlVHlwZVdpdGgxQXJndW1lbnRdIGNvbnN0LgpjbGFzcyBTaW1wbGVUeXBlV2l0aDFBcmd1bWVudCBpbXBsZW1lbnRzIFR5cGVJbmZvIHsKICBmaW5hbCBUeXBlUGFyYW1PckFyZ0luZm8gdHlwZUFyZzsKCiAgY29uc3QgU2ltcGxlVHlwZVdpdGgxQXJndW1lbnQodGhpcy50eXBlQXJnKTsKCiAgQG92ZXJyaWRlCiAgVHlwZUluZm8gZ2V0IGFzTm9uTnVsbGFibGUgPT4gdGhpczsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgY291bGRCZUV4cHJlc3Npb24gPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTnVsbGFibGUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZVR5cGVOb3RWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PgogICAgICBwYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIFRva2VuIGVuc3VyZVR5cGVPclZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+CiAgICAgIHBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VUeXBlTm90Vm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4KICAgICAgcGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVR5cGUoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIHN0YXJ0ID0gdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KHRva2VuLmlzS2V5d29yZE9ySWRlbnRpZmllcik7CiAgICBwYXJzZXIubGlzdGVuZXIuaGFuZGxlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQudHlwZVJlZmVyZW5jZSk7CiAgICB0b2tlbiA9IHR5cGVBcmcucGFyc2VBcmd1bWVudHModG9rZW4sIHBhcnNlcik7CiAgICByZXR1cm4gcGFyc2VUeXBlUmVzdChzdGFydCwgdG9rZW4sIHBhcnNlcik7CiAgfQoKICBUb2tlbiBwYXJzZVR5cGVSZXN0KFRva2VuIHN0YXJ0LCBUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgcGFyc2VyLmxpc3RlbmVyLmhhbmRsZVR5cGUoc3RhcnQsIG51bGwpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gc2tpcFR5cGUoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydCh0b2tlbi5pc0tleXdvcmRPcklkZW50aWZpZXIpOwogICAgcmV0dXJuIHR5cGVBcmcuc2tpcCh0b2tlbik7CiAgfQp9CgovLy8gU2VlIGRvY3VtZW50YXRpb24gb24gdGhlIFtzaW1wbGVOdWxsYWJsZVR5cGVdIGNvbnN0LgpjbGFzcyBTaW1wbGVOdWxsYWJsZVR5cGUgZXh0ZW5kcyBTaW1wbGVUeXBlIHsKICBjb25zdCBTaW1wbGVOdWxsYWJsZVR5cGUoKTsKCiAgQG92ZXJyaWRlCiAgVHlwZUluZm8gZ2V0IGFzTm9uTnVsbGFibGUgPT4gc2ltcGxlVHlwZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOdWxsYWJsZSA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVR5cGVSZXN0KFRva2VuIHN0YXJ0LCBQYXJzZXIgcGFyc2VyKSB7CiAgICBUb2tlbiB0b2tlbiA9IHN0YXJ0Lm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJz8nLCB0b2tlbikpOwogICAgcGFyc2VyLmxpc3RlbmVyLmhhbmRsZVR5cGUoc3RhcnQsIHRva2VuKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHNraXBUeXBlKFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gdG9rZW4ubmV4dC5uZXh0OwogIH0KfQoKLy8vIFNlZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBbc2ltcGxlVHlwZV0gY29uc3QuCmNsYXNzIFNpbXBsZVR5cGUgaW1wbGVtZW50cyBUeXBlSW5mbyB7CiAgY29uc3QgU2ltcGxlVHlwZSgpOwoKICBAb3ZlcnJpZGUKICBUeXBlSW5mbyBnZXQgYXNOb25OdWxsYWJsZSA9PiB0aGlzOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBjb3VsZEJlRXhwcmVzc2lvbiA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc051bGxhYmxlID0+IGZhbHNlOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVUeXBlTm90Vm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4KICAgICAgcGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBlbnN1cmVUeXBlT3JWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PgogICAgICBwYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVHlwZU5vdFZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+CiAgICAgIHBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VUeXBlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQoaXNWYWxpZFR5cGVSZWZlcmVuY2UodG9rZW4pKTsKICAgIHBhcnNlci5saXN0ZW5lci5oYW5kbGVJZGVudGlmaWVyKHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC50eXBlUmVmZXJlbmNlKTsKICAgIHRva2VuID0gbm9UeXBlUGFyYW1PckFyZy5wYXJzZUFyZ3VtZW50cyh0b2tlbiwgcGFyc2VyKTsKICAgIHJldHVybiBwYXJzZVR5cGVSZXN0KHRva2VuLCBwYXJzZXIpOwogIH0KCiAgVG9rZW4gcGFyc2VUeXBlUmVzdChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgcGFyc2VyLmxpc3RlbmVyLmhhbmRsZVR5cGUodG9rZW4sIG51bGwpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gc2tpcFR5cGUoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiB0b2tlbi5uZXh0OwogIH0KfQoKLy8vIFNlZSBkb2N1bWVudGF0aW9uIG9uIHRoZSBbdm9pZFR5cGVdIGNvbnN0LgpjbGFzcyBWb2lkVHlwZSBpbXBsZW1lbnRzIFR5cGVJbmZvIHsKICBjb25zdCBWb2lkVHlwZSgpOwoKICBAb3ZlcnJpZGUKICBUeXBlSW5mbyBnZXQgYXNOb25OdWxsYWJsZSA9PiB0aGlzOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBjb3VsZEJlRXhwcmVzc2lvbiA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOdWxsYWJsZSA9PiBmYWxzZTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlVHlwZU5vdFZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIC8vIFJlcG9ydCBhbiBlcnJvciwgdGhlbiBwYXJzZSBgdm9pZGAgYXMgaWYgaXQgd2VyZSBhIHR5cGUgbmFtZS4KICAgIHBhcnNlci5yZXBvcnRSZWNvdmVyYWJsZUVycm9yKHRva2VuLm5leHQsIGZhc3RhLm1lc3NhZ2VJbnZhbGlkVm9pZCk7CiAgICByZXR1cm4gc2ltcGxlVHlwZS5wYXJzZVR5cGVOb3RWb2lkKHRva2VuLCBwYXJzZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlVHlwZU9yVm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4KICAgICAgcGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVR5cGVOb3RWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PgogICAgICBlbnN1cmVUeXBlTm90Vm9pZCh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VUeXBlKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBwYXJzZXIubGlzdGVuZXIuaGFuZGxlVm9pZEtleXdvcmQodG9rZW4pOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gc2tpcFR5cGUoVG9rZW4gdG9rZW4pIHsKICAgIHJldHVybiB0b2tlbi5uZXh0OwogIH0KfQoKYm9vbCBsb29rc0xpa2VOYW1lKFRva2VuIHRva2VuKSA9PgogICAgdG9rZW4ua2luZCA9PSBJREVOVElGSUVSX1RPS0VOIHx8CiAgICBvcHRpb25hbCgndGhpcycsIHRva2VuKSB8fAogICAgKHRva2VuLmlzSWRlbnRpZmllciAmJgogICAgICAgIC8vIEFsdGhvdWdoIGB0eXBlZGVmYCBpcyBhIGxlZ2FsIGlkZW50aWZpZXIsCiAgICAgICAgLy8gdHlwZSBgdHlwZWRlZmAgaWRlbnRpZmllciBpcyBub3QgbGVnYWwgYW5kIGluIHRoaXMgc2l0dWF0aW9uCiAgICAgICAgLy8gYHR5cGVkZWZgIGlzIHByb2JhYmx5IGEgc2VwYXJhdGUgZGVjbGFyYXRpb24uCiAgICAgICAgKCFvcHRpb25hbCgndHlwZWRlZicsIHRva2VuKSB8fCAhdG9rZW4ubmV4dC5pc0lkZW50aWZpZXIpKTsKCi8vLyBXaGVuIG1pc3NpbmcgYSBjb21tYSwgZGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiB0b2tlbiBsb29rcyBsaWtlIGl0IHNob3VsZAovLy8gYmUgcGFydCBvZiBhIGNvbGxlY3Rpb24gb2YgdHlwZSBwYXJhbWV0ZXJzIG9yIGFyZ3VtZW50cy4KYm9vbCBsb29rc0xpa2VUeXBlUGFyYW1PckFyZyhib29sIGluRGVjbGFyYXRpb24sIFRva2VuIHRva2VuKSB7CiAgaWYgKGluRGVjbGFyYXRpb24gJiYgdG9rZW4ua2luZCA9PSBJREVOVElGSUVSX1RPS0VOKSB7CiAgICBUb2tlbiBuZXh0ID0gdG9rZW4ubmV4dDsKICAgIGlmIChuZXh0LmtpbmQgPT0gSURFTlRJRklFUl9UT0tFTiB8fAogICAgICAgIG9wdGlvbmFsKCcsJywgbmV4dCkgfHwKICAgICAgICBpc0Nsb3NlcihuZXh0KSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CiAgcmV0dXJuIGZhbHNlOwp9CgovLy8gSW5zdGFuY2VzIG9mIFtDb21wbGV4VHlwZUluZm9dIGFyZSByZXR1cm5lZCBieSBbY29tcHV0ZVR5cGVdIHRvIHJlcHJlc2VudAovLy8gdHlwZSByZWZlcmVuY2VzIHRoYXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGJ5IHRoZSBjb25zdGFudHMgYWJvdmUuCmNsYXNzIENvbXBsZXhUeXBlSW5mbyBpbXBsZW1lbnRzIFR5cGVJbmZvIHsKICAvLy8gVGhlIGZpcnN0IHRva2VuIGluIHRoZSB0eXBlIHJlZmVyZW5jZS4KICBUb2tlbiBzdGFydDsKCiAgLy8vIFR5cGUgYXJndW1lbnRzIHdlcmUgc2VlbiBkdXJpbmcgYW5hbHlzaXMuCiAgZmluYWwgVHlwZVBhcmFtT3JBcmdJbmZvIHR5cGVBcmd1bWVudHM7CgogIC8vLyBUaGUgdG9rZW4gYmVmb3JlIHRoZSB0cmFpbGluZyBxdWVzdGlvbiBtYXJrIG9yIGBudWxsYCBpZiBlaXRoZXIKICAvLy8gMSkgdGhlcmUgaXMgbm8gdHJhaWxpbmcgcXVlc3Rpb24gbWFyaywgb3IKICAvLy8gMikgdGhlIHRyYWlsaW5nIHF1ZXN0aW9uIG1hcmsgaXMgbm90IHBhcnQgb2YgdGhlIHR5cGUgcmVmZXJlbmNlLgogIFRva2VuIGJlZm9yZVF1ZXN0aW9uTWFyazsKCiAgLy8vIFRoZSBsYXN0IHRva2VuIGluIHRoZSB0eXBlIHJlZmVyZW5jZS4KICBUb2tlbiBlbmQ7CgogIC8vLyBUaGUgYEZ1bmN0aW9uYCB0b2tlbnMgYmVmb3JlIHRoZSBzdGFydCBvZiB0eXBlIHZhcmlhYmxlcyBvZiBmdW5jdGlvbiB0eXBlcwogIC8vLyBhcyBzZWVuIGR1cmluZyBhbmFseXNpcy4KICBMaW5rPFRva2VuPiB0eXBlVmFyaWFibGVTdGFydGVycyA9IGNvbnN0IExpbms8VG9rZW4+KCk7CgogIC8vLyBJZiB0aGUgcmVjZWl2ZXIgcmVwcmVzZW50cyBhIGdlbmVyYWxpemVkIGZ1bmN0aW9uIHR5cGUgdGhlbiB0aGlzIGluZGljYXRlcwogIC8vLyB3aGV0aGVyIGl0IGhhcyBhIHJldHVybiB0eXBlLCBvdGhlcndpc2UgdGhpcyBpcyBgbnVsbGAuCiAgYm9vbCBnZnRIYXNSZXR1cm5UeXBlOwoKICBDb21wbGV4VHlwZUluZm8oVG9rZW4gYmVmb3JlU3RhcnQsIHRoaXMudHlwZUFyZ3VtZW50cykKICAgICAgOiB0aGlzLnN0YXJ0ID0gYmVmb3JlU3RhcnQubmV4dCB7CiAgICBhc3NlcnQodHlwZUFyZ3VtZW50cyAhPSBudWxsKTsKICB9CgogIENvbXBsZXhUeXBlSW5mby5fbm9uTnVsbGFibGUodGhpcy5zdGFydCwgdGhpcy50eXBlQXJndW1lbnRzLCB0aGlzLmVuZCwKICAgICAgdGhpcy50eXBlVmFyaWFibGVTdGFydGVycywgdGhpcy5nZnRIYXNSZXR1cm5UeXBlKTsKCiAgQG92ZXJyaWRlCiAgVHlwZUluZm8gZ2V0IGFzTm9uTnVsbGFibGUgewogICAgcmV0dXJuIGJlZm9yZVF1ZXN0aW9uTWFyayA9PSBudWxsCiAgICAgICAgPyB0aGlzCiAgICAgICAgOiBuZXcgQ29tcGxleFR5cGVJbmZvLl9ub25OdWxsYWJsZShzdGFydCwgdHlwZUFyZ3VtZW50cywKICAgICAgICAgICAgYmVmb3JlUXVlc3Rpb25NYXJrLCB0eXBlVmFyaWFibGVTdGFydGVycywgZ2Z0SGFzUmV0dXJuVHlwZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBjb3VsZEJlRXhwcmVzc2lvbiA9PgogICAgICB0eXBlQXJndW1lbnRzID09IG5vVHlwZVBhcmFtT3JBcmcgJiYgdHlwZVZhcmlhYmxlU3RhcnRlcnMuaXNFbXB0eTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOdWxsYWJsZSA9PiBiZWZvcmVRdWVzdGlvbk1hcmsgIT0gbnVsbDsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlVHlwZU5vdFZvaWQoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpID0+CiAgICAgIHBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gZW5zdXJlVHlwZU9yVm9pZChUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgPT4KICAgICAgcGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVR5cGVOb3RWb2lkKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSA9PgogICAgICBwYXJzZVR5cGUodG9rZW4sIHBhcnNlcik7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlVHlwZShUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgYXNzZXJ0KGlkZW50aWNhbCh0b2tlbi5uZXh0LCBzdGFydCkpOwoKICAgIGlmIChvcHRpb25hbCgnLicsIHN0YXJ0KSkgewogICAgICAvLyBSZWNvdmVyeTogSW5zZXJ0IG1pc3NpbmcgaWRlbnRpZmllciB3aXRob3V0IHNlbmRpbmcgZXZlbnRzCiAgICAgIHN0YXJ0ID0gcGFyc2VyLmluc2VydFN5bnRoZXRpY0lkZW50aWZpZXIoCiAgICAgICAgICB0b2tlbiwgSWRlbnRpZmllckNvbnRleHQucHJlZml4ZWRUeXBlUmVmZXJlbmNlKTsKICAgIH0KCiAgICBmaW5hbCB0eXBlVmFyaWFibGVFbmRHcm91cHMgPSA8VG9rZW4+W107CiAgICBmb3IgKExpbms8VG9rZW4+IHQgPSB0eXBlVmFyaWFibGVTdGFydGVyczsgdC5pc05vdEVtcHR5OyB0ID0gdC50YWlsKSB7CiAgICAgIHR5cGVWYXJpYWJsZUVuZEdyb3Vwcy5hZGQoCiAgICAgICAgICBjb21wdXRlVHlwZVBhcmFtT3JBcmcodC5oZWFkLCB0cnVlKS5wYXJzZVZhcmlhYmxlcyh0LmhlYWQsIHBhcnNlcikpOwogICAgICBwYXJzZXIubGlzdGVuZXIuYmVnaW5GdW5jdGlvblR5cGUoc3RhcnQpOwogICAgfQoKICAgIGlmIChnZnRIYXNSZXR1cm5UeXBlID09IGZhbHNlKSB7CiAgICAgIC8vIEEgZnVuY3Rpb24gdHlwZSB3aXRob3V0IHJldHVybiB0eXBlLgogICAgICAvLyBQdXNoIHRoZSBub24tZXhpc3RpbmcgcmV0dXJuIHR5cGUgZmlyc3QuIFRoZSBsb29wIGJlbG93IHdpbGwKICAgICAgLy8gZ2VuZXJhdGUgdGhlIGZ1bGwgdHlwZS4KICAgICAgbm9UeXBlLnBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKICAgIH0gZWxzZSB7CiAgICAgIFRva2VuIHR5cGVSZWZPclByZWZpeCA9IHRva2VuLm5leHQ7CiAgICAgIGlmIChvcHRpb25hbCgndm9pZCcsIHR5cGVSZWZPclByZWZpeCkpIHsKICAgICAgICB0b2tlbiA9IHZvaWRUeXBlLnBhcnNlVHlwZSh0b2tlbiwgcGFyc2VyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoIW9wdGlvbmFsKCcuJywgdHlwZVJlZk9yUHJlZml4KSAmJgogICAgICAgICAgICAhb3B0aW9uYWwoJy4nLCB0eXBlUmVmT3JQcmVmaXgubmV4dCkpIHsKICAgICAgICAgIHRva2VuID0KICAgICAgICAgICAgICBwYXJzZXIuZW5zdXJlSWRlbnRpZmllcih0b2tlbiwgSWRlbnRpZmllckNvbnRleHQudHlwZVJlZmVyZW5jZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRva2VuID0gcGFyc2VyLmVuc3VyZUlkZW50aWZpZXIoCiAgICAgICAgICAgICAgdG9rZW4sIElkZW50aWZpZXJDb250ZXh0LnByZWZpeGVkVHlwZVJlZmVyZW5jZSk7CiAgICAgICAgICB0b2tlbiA9IHBhcnNlci5wYXJzZVF1YWxpZmllZFJlc3QoCiAgICAgICAgICAgICAgdG9rZW4sIElkZW50aWZpZXJDb250ZXh0LnR5cGVSZWZlcmVuY2VDb250aW51YXRpb24pOwogICAgICAgICAgaWYgKHRva2VuLmlzU3ludGhldGljICYmIGVuZCA9PSB0eXBlUmVmT3JQcmVmaXgubmV4dCkgewogICAgICAgICAgICAvLyBSZWNvdmVyeTogVXBkYXRlIGBlbmRgIGlmIGEgc3ludGhldGljIGlkZW50aWZpZXIgd2FzIGluc2VydGVkLgogICAgICAgICAgICBlbmQgPSB0b2tlbjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdG9rZW4gPSB0eXBlQXJndW1lbnRzLnBhcnNlQXJndW1lbnRzKHRva2VuLCBwYXJzZXIpOwoKICAgICAgICAvLyBPbmx5IGNvbnN1bWUgdGhlIGA/YCBpZiBpdCBpcyBwYXJ0IG9mIHRoZSBjb21wbGV4IHR5cGUKICAgICAgICBUb2tlbiBxdWVzdGlvbk1hcmsgPSB0b2tlbi5uZXh0OwogICAgICAgIGlmIChvcHRpb25hbCgnPycsIHF1ZXN0aW9uTWFyaykgJiYKICAgICAgICAgICAgKHR5cGVWYXJpYWJsZUVuZEdyb3Vwcy5pc05vdEVtcHR5IHx8IGJlZm9yZVF1ZXN0aW9uTWFyayAhPSBudWxsKSkgewogICAgICAgICAgdG9rZW4gPSBxdWVzdGlvbk1hcms7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHF1ZXN0aW9uTWFyayA9IG51bGw7CiAgICAgICAgfQoKICAgICAgICBwYXJzZXIubGlzdGVuZXIuaGFuZGxlVHlwZSh0eXBlUmVmT3JQcmVmaXgsIHF1ZXN0aW9uTWFyayk7CiAgICAgIH0KICAgIH0KCiAgICBpbnQgZW5kR3JvdXBJbmRleCA9IHR5cGVWYXJpYWJsZUVuZEdyb3Vwcy5sZW5ndGggLSAxOwogICAgZm9yIChMaW5rPFRva2VuPiB0ID0gdHlwZVZhcmlhYmxlU3RhcnRlcnM7IHQuaXNOb3RFbXB0eTsgdCA9IHQudGFpbCkgewogICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICAgIGFzc2VydChvcHRpb25hbCgnRnVuY3Rpb24nLCB0b2tlbikpOwogICAgICBUb2tlbiBmdW5jdGlvblRva2VuID0gdG9rZW47CgogICAgICBpZiAob3B0aW9uYWwoIjwiLCB0b2tlbi5uZXh0KSkgewogICAgICAgIC8vIFNraXAgdHlwZSBwYXJhbWV0ZXJzLCB0aGV5IHdlcmUgcGFyc2VkIGFib3ZlLgogICAgICAgIHRva2VuID0gdHlwZVZhcmlhYmxlRW5kR3JvdXBzW2VuZEdyb3VwSW5kZXhdOwogICAgICAgIGFzc2VydChvcHRpb25hbCgnPicsIHRva2VuKSk7CiAgICAgIH0KICAgICAgdG9rZW4gPSBwYXJzZXIucGFyc2VGb3JtYWxQYXJhbWV0ZXJzUmVxdWlyZWRPcHQoCiAgICAgICAgICB0b2tlbiwgTWVtYmVyS2luZC5HZW5lcmFsaXplZEZ1bmN0aW9uVHlwZSk7CgogICAgICAvLyBPbmx5IGNvbnN1bWUgdGhlIGA/YCBpZiBpdCBpcyBwYXJ0IG9mIHRoZSBjb21wbGV4IHR5cGUKICAgICAgVG9rZW4gcXVlc3Rpb25NYXJrID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKG9wdGlvbmFsKCc/JywgcXVlc3Rpb25NYXJrKSAmJgogICAgICAgICAgKGVuZEdyb3VwSW5kZXggPiAwIHx8IGJlZm9yZVF1ZXN0aW9uTWFyayAhPSBudWxsKSkgewogICAgICAgIHRva2VuID0gcXVlc3Rpb25NYXJrOwogICAgICB9IGVsc2UgewogICAgICAgIHF1ZXN0aW9uTWFyayA9IG51bGw7CiAgICAgIH0KCiAgICAgIC0tZW5kR3JvdXBJbmRleDsKICAgICAgcGFyc2VyLmxpc3RlbmVyLmVuZEZ1bmN0aW9uVHlwZShmdW5jdGlvblRva2VuLCBxdWVzdGlvbk1hcmspOwogICAgfQoKICAgIC8vIFRoZXJlIGFyZSB0d28gc2l0dWF0aW9ucyBpbiB3aGljaCB0aGUgW3Rva2VuXSAhPSBbZW5kXToKICAgIC8vIFZhbGlkIGNvZGU6ICAgIGlkZW50aWZpZXIgYDxgIGlkZW50aWZpZXIgYDxgIGlkZW50aWZpZXIgYD4+YAogICAgLy8gICAgd2hlcmUgYD4+YCBpcyByZXBsYWNlZCBieSB0d28gdG9rZW5zLgogICAgLy8gSW52YWxpZCBjb2RlOiAgaWRlbnRpZmllciBgPGAgaWRlbnRpZmllciBpZGVudGlmaWVyIGA+YAogICAgLy8gICAgd2hlcmUgYSBzeW50aGV0aWMgYD5gIGlzIGluc2VydGVkIGJldHdlZW4gdGhlIGlkZW50aWZpZXJzLgogICAgYXNzZXJ0KGlkZW50aWNhbCh0b2tlbiwgZW5kKSB8fCBvcHRpb25hbCgnPicsIHRva2VuKSk7CgogICAgLy8gRHVyaW5nIHJlY292ZXJ5LCBbdG9rZW5dIG1heSBiZSBhIHN5bnRoZXRpYyB0aGF0IHdhcyBpbnNlcnRlZCBpbiB0aGUKICAgIC8vIG1pZGRsZSBvZiB0aGUgdHlwZSByZWZlcmVuY2UuCiAgICBlbmQgPSB0b2tlbjsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIEBvdmVycmlkZQogIFRva2VuIHNraXBUeXBlKFRva2VuIHRva2VuKSB7CiAgICByZXR1cm4gZW5kOwogIH0KCiAgLy8vIEdpdmVuIGBGdW5jdGlvbmAgbm9uLWlkZW50aWZpZXIsIGNvbXB1dGUgdGhlIHR5cGUKICAvLy8gYW5kIHJldHVybiB0aGUgcmVjZWl2ZXIgb3Igb25lIG9mIHRoZSBbVHlwZUluZm9dIGNvbnN0YW50cy4KICBUeXBlSW5mbyBjb21wdXRlTm9UeXBlR0ZUKFRva2VuIGJlZm9yZVN0YXJ0LCBib29sIHJlcXVpcmVkKSB7CiAgICBhc3NlcnQob3B0aW9uYWwoJ0Z1bmN0aW9uJywgc3RhcnQpKTsKICAgIGFzc2VydChiZWZvcmVTdGFydC5uZXh0ID09IHN0YXJ0KTsKCiAgICBjb21wdXRlUmVzdChiZWZvcmVTdGFydCwgcmVxdWlyZWQpOwogICAgaWYgKGdmdEhhc1JldHVyblR5cGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gcmVxdWlyZWQgPyBzaW1wbGVUeXBlIDogbm9UeXBlOwogICAgfQogICAgYXNzZXJ0KGVuZCAhPSBudWxsKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLy8vIEdpdmVuIHZvaWQgYEZ1bmN0aW9uYCBub24taWRlbnRpZmllciwgY29tcHV0ZSB0aGUgdHlwZQogIC8vLyBhbmQgcmV0dXJuIHRoZSByZWNlaXZlciBvciBvbmUgb2YgdGhlIFtUeXBlSW5mb10gY29uc3RhbnRzLgogIFR5cGVJbmZvIGNvbXB1dGVWb2lkR0ZUKGJvb2wgcmVxdWlyZWQpIHsKICAgIGFzc2VydChvcHRpb25hbCgndm9pZCcsIHN0YXJ0KSk7CiAgICBhc3NlcnQob3B0aW9uYWwoJ0Z1bmN0aW9uJywgc3RhcnQubmV4dCkpOwoKICAgIGNvbXB1dGVSZXN0KHN0YXJ0LCByZXF1aXJlZCk7CiAgICBpZiAoZ2Z0SGFzUmV0dXJuVHlwZSA9PSBudWxsKSB7CiAgICAgIHJldHVybiB2b2lkVHlwZTsKICAgIH0KICAgIGFzc2VydChlbmQgIT0gbnVsbCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8vLyBHaXZlbiBpZGVudGlmaWVyIGBGdW5jdGlvbmAgbm9uLWlkZW50aWZpZXIsIGNvbXB1dGUgdGhlIHR5cGUKICAvLy8gYW5kIHJldHVybiB0aGUgcmVjZWl2ZXIgb3Igb25lIG9mIHRoZSBbVHlwZUluZm9dIGNvbnN0YW50cy4KICBUeXBlSW5mbyBjb21wdXRlSWRlbnRpZmllckdGVChib29sIHJlcXVpcmVkKSB7CiAgICBhc3NlcnQoaXNWYWxpZFR5cGVSZWZlcmVuY2Uoc3RhcnQpKTsKICAgIGFzc2VydChvcHRpb25hbCgnRnVuY3Rpb24nLCBzdGFydC5uZXh0KSk7CgogICAgY29tcHV0ZVJlc3Qoc3RhcnQsIHJlcXVpcmVkKTsKICAgIGlmIChnZnRIYXNSZXR1cm5UeXBlID09IG51bGwpIHsKICAgICAgcmV0dXJuIHNpbXBsZVR5cGU7CiAgICB9CiAgICBhc3NlcnQoZW5kICE9IG51bGwpOwogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvLy8gR2l2ZW4gaWRlbnRpZmllciBgP2AgYEZ1bmN0aW9uYCBub24taWRlbnRpZmllciwgY29tcHV0ZSB0aGUgdHlwZQogIC8vLyBhbmQgcmV0dXJuIHRoZSByZWNlaXZlciBvciBvbmUgb2YgdGhlIFtUeXBlSW5mb10gY29uc3RhbnRzLgogIFR5cGVJbmZvIGNvbXB1dGVJZGVudGlmaWVyUXVlc3Rpb25HRlQoYm9vbCByZXF1aXJlZCkgewogICAgYXNzZXJ0KGlzVmFsaWRUeXBlUmVmZXJlbmNlKHN0YXJ0KSk7CiAgICBhc3NlcnQob3B0aW9uYWwoJz8nLCBzdGFydC5uZXh0KSk7CiAgICBhc3NlcnQob3B0aW9uYWwoJ0Z1bmN0aW9uJywgc3RhcnQubmV4dC5uZXh0KSk7CgogICAgY29tcHV0ZVJlc3Qoc3RhcnQsIHJlcXVpcmVkKTsKICAgIGlmIChnZnRIYXNSZXR1cm5UeXBlID09IG51bGwpIHsKICAgICAgcmV0dXJuIHNpbXBsZU51bGxhYmxlVHlwZTsKICAgIH0KICAgIGFzc2VydChlbmQgIT0gbnVsbCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8vLyBHaXZlbiBhIGJ1aWx0aW4sIHJldHVybiB0aGUgcmVjZWl2ZXIgc28gdGhhdCBwYXJzZVR5cGUgd2lsbCByZXBvcnQKICAvLy8gYW4gZXJyb3IgZm9yIHRoZSBidWlsdGluIHVzZWQgYXMgYSB0eXBlLgogIFR5cGVJbmZvIGNvbXB1dGVCdWlsdGluT3JWYXJBc1R5cGUoYm9vbCByZXF1aXJlZCkgewogICAgYXNzZXJ0KHN0YXJ0LnR5cGUuaXNCdWlsdEluIHx8IG9wdGlvbmFsKCd2YXInLCBzdGFydCkpOwoKICAgIGVuZCA9IHR5cGVBcmd1bWVudHMuc2tpcChzdGFydCk7CiAgICBjb21wdXRlUmVzdChlbmQsIHJlcXVpcmVkKTsKICAgIGFzc2VydChlbmQgIT0gbnVsbCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIC8vLyBHaXZlbiBpZGVudGlmaWVyIGA8YCAuLi4gYD5gLCBjb21wdXRlIHRoZSB0eXBlCiAgLy8vIGFuZCByZXR1cm4gdGhlIHJlY2VpdmVyIG9yIG9uZSBvZiB0aGUgW1R5cGVJbmZvXSBjb25zdGFudHMuCiAgVHlwZUluZm8gY29tcHV0ZVNpbXBsZVdpdGhUeXBlQXJndW1lbnRzKGJvb2wgcmVxdWlyZWQpIHsKICAgIGFzc2VydChpc1ZhbGlkVHlwZVJlZmVyZW5jZShzdGFydCkpOwogICAgYXNzZXJ0KG9wdGlvbmFsKCc8Jywgc3RhcnQubmV4dCkpOwogICAgYXNzZXJ0KHR5cGVBcmd1bWVudHMgIT0gbm9UeXBlUGFyYW1PckFyZyk7CgogICAgZW5kID0gdHlwZUFyZ3VtZW50cy5za2lwKHN0YXJ0KTsKICAgIGNvbXB1dGVSZXN0KGVuZCwgcmVxdWlyZWQpOwoKICAgIGlmICghcmVxdWlyZWQgJiYgIWxvb2tzTGlrZU5hbWUoZW5kLm5leHQpICYmIGdmdEhhc1JldHVyblR5cGUgPT0gbnVsbCkgewogICAgICByZXR1cm4gbm9UeXBlOwogICAgfQogICAgYXNzZXJ0KGVuZCAhPSBudWxsKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgLy8vIEdpdmVuIGlkZW50aWZpZXIgYC5gIGlkZW50aWZpZXIgKG9yIGAuYCBpZGVudGlmaWVyIG9yIGlkZW50aWZpZXIgYC5gCiAgLy8vIGZvciByZWNvdmVyeSksIGNvbXB1dGUgdGhlIHR5cGUgYW5kIHJldHVybiB0aGUgcmVjZWl2ZXIgb3Igb25lIG9mIHRoZQogIC8vLyBbVHlwZUluZm9dIGNvbnN0YW50cy4KICBUeXBlSW5mbyBjb21wdXRlUHJlZml4ZWRUeXBlKGJvb2wgcmVxdWlyZWQpIHsKICAgIFRva2VuIHRva2VuID0gc3RhcnQ7CiAgICBpZiAoIW9wdGlvbmFsKCcuJywgdG9rZW4pKSB7CiAgICAgIGFzc2VydCh0b2tlbi5pc0tleXdvcmRPcklkZW50aWZpZXIpOwogICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICB9CiAgICBhc3NlcnQob3B0aW9uYWwoJy4nLCB0b2tlbikpOwogICAgaWYgKHRva2VuLm5leHQuaXNLZXl3b3JkT3JJZGVudGlmaWVyKSB7CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIH0KCiAgICBlbmQgPSB0eXBlQXJndW1lbnRzLnNraXAodG9rZW4pOwogICAgY29tcHV0ZVJlc3QoZW5kLCByZXF1aXJlZCk7CiAgICBpZiAoIXJlcXVpcmVkICYmICFsb29rc0xpa2VOYW1lKGVuZC5uZXh0KSAmJiBnZnRIYXNSZXR1cm5UeXBlID09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vVHlwZTsKICAgIH0KICAgIGFzc2VydChlbmQgIT0gbnVsbCk7CiAgICByZXR1cm4gdGhpczsKICB9CgogIHZvaWQgY29tcHV0ZVJlc3QoVG9rZW4gdG9rZW4sIGJvb2wgcmVxdWlyZWQpIHsKICAgIGlmIChvcHRpb25hbCgnPycsIHRva2VuLm5leHQpKSB7CiAgICAgIGJlZm9yZVF1ZXN0aW9uTWFyayA9IHRva2VuOwogICAgICBlbmQgPSB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICB9CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICB3aGlsZSAob3B0aW9uYWwoJ0Z1bmN0aW9uJywgdG9rZW4pKSB7CiAgICAgIFRva2VuIHR5cGVWYXJpYWJsZVN0YXJ0ID0gdG9rZW47CiAgICAgIC8vIFRPRE8oZGFucnViZWwpOiBDb25zaWRlciBjYWNoaW5nIFR5cGVQYXJhbU9yQXJnSW5mbwogICAgICB0b2tlbiA9IGNvbXB1dGVUeXBlUGFyYW1PckFyZyh0b2tlbiwgdHJ1ZSkuc2tpcCh0b2tlbik7CiAgICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgICAgaWYgKCFvcHRpb25hbCgnKCcsIHRva2VuKSkgewogICAgICAgIGJyZWFrOyAvLyBOb3QgYSBmdW5jdGlvbiB0eXBlLgogICAgICB9CiAgICAgIHRva2VuID0gdG9rZW4uZW5kR3JvdXA7CiAgICAgIGlmICh0b2tlbiA9PSBudWxsKSB7CiAgICAgICAgYnJlYWs7IC8vIE5vdCBhIGZ1bmN0aW9uIHR5cGUuCiAgICAgIH0KICAgICAgaWYgKCFyZXF1aXJlZCkgewogICAgICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIGlmIChvcHRpb25hbCgnPycsIG5leHQpKSB7CiAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0OwogICAgICAgIH0KICAgICAgICBpZiAoIShuZXh0LmlzSWRlbnRpZmllciB8fCBvcHRpb25hbCgndGhpcycsIG5leHQpKSkgewogICAgICAgICAgYnJlYWs7IC8vIGBGdW5jdGlvbmAgdXNlZCBhcyB0aGUgbmFtZSBpbiBhIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgogICAgICAgIH0KICAgICAgfQogICAgICBhc3NlcnQob3B0aW9uYWwoJyknLCB0b2tlbikpOwogICAgICBnZnRIYXNSZXR1cm5UeXBlID8/PSB0eXBlVmFyaWFibGVTdGFydCAhPSBzdGFydDsKICAgICAgdHlwZVZhcmlhYmxlU3RhcnRlcnMgPSB0eXBlVmFyaWFibGVTdGFydGVycy5wcmVwZW5kKHR5cGVWYXJpYWJsZVN0YXJ0KTsKCiAgICAgIGJlZm9yZVF1ZXN0aW9uTWFyayA9IG51bGw7CiAgICAgIGVuZCA9IHRva2VuOwogICAgICB0b2tlbiA9IHRva2VuLm5leHQ7CgogICAgICBpZiAob3B0aW9uYWwoJz8nLCB0b2tlbikpIHsKICAgICAgICBiZWZvcmVRdWVzdGlvbk1hcmsgPSBlbmQ7CiAgICAgICAgZW5kID0gdG9rZW47CiAgICAgICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICB9CiAgfQp9CgovLy8gU2VlIFtub1R5cGVQYXJhbU9yQXJnXS4KY2xhc3MgTm9UeXBlUGFyYW1PckFyZyBleHRlbmRzIFR5cGVQYXJhbU9yQXJnSW5mbyB7CiAgY29uc3QgTm9UeXBlUGFyYW1PckFyZygpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IHR5cGVBcmd1bWVudENvdW50ID0+IDA7CgogIEBvdmVycmlkZQogIFRva2VuIHBhcnNlQXJndW1lbnRzKFRva2VuIHRva2VuLCBQYXJzZXIgcGFyc2VyKSB7CiAgICBwYXJzZXIubGlzdGVuZXIuaGFuZGxlTm9UeXBlQXJndW1lbnRzKHRva2VuLm5leHQpOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VWYXJpYWJsZXMoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIHBhcnNlci5saXN0ZW5lci5oYW5kbGVOb1R5cGVWYXJpYWJsZXModG9rZW4ubmV4dCk7CiAgICByZXR1cm4gdG9rZW47CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBza2lwKFRva2VuIHRva2VuKSA9PiB0b2tlbjsKfQoKY2xhc3MgU2ltcGxlVHlwZUFyZ3VtZW50MSBleHRlbmRzIFR5cGVQYXJhbU9yQXJnSW5mbyB7CiAgY29uc3QgU2ltcGxlVHlwZUFyZ3VtZW50MSgpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1NpbXBsZVR5cGVBcmd1bWVudCA9PiB0cnVlOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IHR5cGVBcmd1bWVudENvdW50ID0+IDE7CgogIEBvdmVycmlkZQogIFR5cGVJbmZvIGdldCB0eXBlSW5mbyA9PiBzaW1wbGVUeXBlV2l0aDFBcmd1bWVudDsKCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VBcmd1bWVudHMoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIGJlZ2luR3JvdXAgPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc8JywgYmVnaW5Hcm91cCkpOwogICAgVG9rZW4gZW5kR3JvdXAgPSBwYXJzZUVuZEdyb3VwKGJlZ2luR3JvdXAsIGJlZ2luR3JvdXAubmV4dCk7CiAgICBMaXN0ZW5lciBsaXN0ZW5lciA9IHBhcnNlci5saXN0ZW5lcjsKICAgIGxpc3RlbmVyLmJlZ2luVHlwZUFyZ3VtZW50cyhiZWdpbkdyb3VwKTsKICAgIHNpbXBsZVR5cGUucGFyc2VUeXBlKGJlZ2luR3JvdXAsIHBhcnNlcik7CiAgICBwYXJzZXIubGlzdGVuZXIuZW5kVHlwZUFyZ3VtZW50cygxLCBiZWdpbkdyb3VwLCBlbmRHcm91cCk7CiAgICByZXR1cm4gZW5kR3JvdXA7CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBwYXJzZVZhcmlhYmxlcyhUb2tlbiB0b2tlbiwgUGFyc2VyIHBhcnNlcikgewogICAgVG9rZW4gYmVnaW5Hcm91cCA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJzwnLCBiZWdpbkdyb3VwKSk7CiAgICB0b2tlbiA9IGJlZ2luR3JvdXAubmV4dDsKICAgIFRva2VuIGVuZEdyb3VwID0gcGFyc2VFbmRHcm91cChiZWdpbkdyb3VwLCB0b2tlbik7CiAgICBMaXN0ZW5lciBsaXN0ZW5lciA9IHBhcnNlci5saXN0ZW5lcjsKICAgIGxpc3RlbmVyLmJlZ2luVHlwZVZhcmlhYmxlcyhiZWdpbkdyb3VwKTsKICAgIGxpc3RlbmVyLmJlZ2luTWV0YWRhdGFTdGFyKHRva2VuKTsKICAgIGxpc3RlbmVyLmVuZE1ldGFkYXRhU3RhcigwKTsKICAgIGxpc3RlbmVyLmhhbmRsZUlkZW50aWZpZXIodG9rZW4sIElkZW50aWZpZXJDb250ZXh0LnR5cGVWYXJpYWJsZURlY2xhcmF0aW9uKTsKICAgIGxpc3RlbmVyLmJlZ2luVHlwZVZhcmlhYmxlKHRva2VuKTsKICAgIGxpc3RlbmVyLmhhbmRsZVR5cGVWYXJpYWJsZXNEZWZpbmVkKHRva2VuLCAxKTsKICAgIGxpc3RlbmVyLmhhbmRsZU5vVHlwZSh0b2tlbik7CiAgICBsaXN0ZW5lci5lbmRUeXBlVmFyaWFibGUoZW5kR3JvdXAsIDAsIG51bGwpOwogICAgbGlzdGVuZXIuZW5kVHlwZVZhcmlhYmxlcyhiZWdpbkdyb3VwLCBlbmRHcm91cCk7CiAgICByZXR1cm4gZW5kR3JvdXA7CiAgfQoKICBAb3ZlcnJpZGUKICBUb2tlbiBza2lwKFRva2VuIHRva2VuKSB7CiAgICB0b2tlbiA9IHRva2VuLm5leHQ7CiAgICBhc3NlcnQob3B0aW9uYWwoJzwnLCB0b2tlbikpOwogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KHRva2VuLmlzS2V5d29yZE9ySWRlbnRpZmllcik7CiAgICByZXR1cm4gc2tpcEVuZEdyb3VwKHRva2VuKTsKICB9CgogIFRva2VuIHNraXBFbmRHcm91cChUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc+JywgdG9rZW4pKTsKICAgIHJldHVybiB0b2tlbjsKICB9CgogIFRva2VuIHBhcnNlRW5kR3JvdXAoVG9rZW4gYmVnaW5Hcm91cCwgVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnPicsIHRva2VuKSk7CiAgICByZXR1cm4gdG9rZW47CiAgfQp9CgpjbGFzcyBTaW1wbGVUeXBlQXJndW1lbnQxR3RFcSBleHRlbmRzIFNpbXBsZVR5cGVBcmd1bWVudDEgewogIGNvbnN0IFNpbXBsZVR5cGVBcmd1bWVudDFHdEVxKCk7CgogIEBvdmVycmlkZQogIFR5cGVJbmZvIGdldCB0eXBlSW5mbyA9PiBzaW1wbGVUeXBlV2l0aDFBcmd1bWVudEd0RXE7CgogIFRva2VuIHNraXBFbmRHcm91cChUb2tlbiB0b2tlbikgewogICAgdG9rZW4gPSB0b2tlbi5uZXh0OwogICAgYXNzZXJ0KG9wdGlvbmFsKCc+PScsIHRva2VuKSk7CiAgICByZXR1cm4gc3BsaXRHdEVxKHRva2VuKTsKICB9CgogIFRva2VuIHBhcnNlRW5kR3JvdXAoVG9rZW4gYmVnaW5Hcm91cCwgVG9rZW4gYmVmb3JlRW5kR3JvdXApIHsKICAgIFRva2VuIGVuZEdyb3VwID0gYmVmb3JlRW5kR3JvdXAubmV4dDsKICAgIGlmICghb3B0aW9uYWwoJz4nLCBlbmRHcm91cCkpIHsKICAgICAgZW5kR3JvdXAgPSBzcGxpdEd0RXEoZW5kR3JvdXApOwogICAgICBlbmRHcm91cC5uZXh0LnNldE5leHQoZW5kR3JvdXAubmV4dC5uZXh0KTsKICAgIH0KICAgIGJlZm9yZUVuZEdyb3VwLnNldE5leHQoZW5kR3JvdXApOwogICAgcmV0dXJuIGVuZEdyb3VwOwogIH0KfQoKY2xhc3MgU2ltcGxlVHlwZUFyZ3VtZW50MUd0R3QgZXh0ZW5kcyBTaW1wbGVUeXBlQXJndW1lbnQxIHsKICBjb25zdCBTaW1wbGVUeXBlQXJndW1lbnQxR3RHdCgpOwoKICBAb3ZlcnJpZGUKICBUeXBlSW5mbyBnZXQgdHlwZUluZm8gPT4gc2ltcGxlVHlwZVdpdGgxQXJndW1lbnRHdEd0OwoKICBUb2tlbiBza2lwRW5kR3JvdXAoVG9rZW4gdG9rZW4pIHsKICAgIHRva2VuID0gdG9rZW4ubmV4dDsKICAgIGFzc2VydChvcHRpb25hbCgnPj4nLCB0b2tlbikpOwogICAgcmV0dXJuIHNwbGl0R3RHdCh0b2tlbik7CiAgfQoKICBUb2tlbiBwYXJzZUVuZEdyb3VwKFRva2VuIGJlZ2luR3JvdXAsIFRva2VuIGJlZm9yZUVuZEdyb3VwKSB7CiAgICBUb2tlbiBlbmRHcm91cCA9IGJlZm9yZUVuZEdyb3VwLm5leHQ7CiAgICBpZiAoIW9wdGlvbmFsKCc+JywgZW5kR3JvdXApKSB7CiAgICAgIGVuZEdyb3VwID0gc3BsaXRHdEd0KGVuZEdyb3VwKTsKICAgICAgZW5kR3JvdXAubmV4dC5zZXROZXh0KGVuZEdyb3VwLm5leHQubmV4dCk7CiAgICB9CiAgICBiZWZvcmVFbmRHcm91cC5zZXROZXh0KGVuZEdyb3VwKTsKICAgIHJldHVybiBlbmRHcm91cDsKICB9Cn0KCmNsYXNzIENvbXBsZXhUeXBlUGFyYW1PckFyZ0luZm8gZXh0ZW5kcyBUeXBlUGFyYW1PckFyZ0luZm8gewogIC8vLyBUaGUgZmlyc3QgdG9rZW4gaW4gdGhlIHR5cGUgdmFyLgogIGZpbmFsIFRva2VuIHN0YXJ0OwoKICAvLy8gSWYgW2luRGVjbGFyYXRpb25dIGlzIGB0cnVlYCwgdGhlbiB0aGlzIHdpbGwgbW9yZSBhZ2dyZXNzaXZlbHkgcmVjb3ZlcgogIC8vLyBnaXZlbiB1bmJhbGFuY2VkIGA8YCBgPmAgYW5kIGludmFsaWQgcGFyYW1ldGVycyBvciBhcmd1bWVudHMuCiAgZmluYWwgYm9vbCBpbkRlY2xhcmF0aW9uOwoKICBAb3ZlcnJpZGUKICBpbnQgdHlwZUFyZ3VtZW50Q291bnQ7CgogIC8vLyBUaGUgYD5gIHRva2VuIHdoaWNoIGVuZHMgdGhlIHR5cGUgcGFyYW1ldGVyIG9yIGFyZ3VtZW50LgogIC8vLyBUaGlzIGNsb3NlciBtYXkgYmUgc3ludGhldGljLCBwb2ludHMgdG8gdGhlIG5leHQgdG9rZW4gaW4gdGhlIHN0cmVhbSwKICAvLy8gaXMgb25seSB1c2VkIHdoZW4gc2tpcHBpbmcgb3ZlciB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9yIGFyZ3VtZW50cywKICAvLy8gYW5kIG1heSBub3QgYmUgcGFydCBvZiB0aGUgdG9rZW4gc3RyZWFtLgogIFRva2VuIHNraXBFbmQ7CgogIENvbXBsZXhUeXBlUGFyYW1PckFyZ0luZm8oVG9rZW4gdG9rZW4sIHRoaXMuaW5EZWNsYXJhdGlvbikKICAgICAgOiBhc3NlcnQob3B0aW9uYWwoJzwnLCB0b2tlbi5uZXh0KSksCiAgICAgICAgYXNzZXJ0KGluRGVjbGFyYXRpb24gIT0gbnVsbCksCiAgICAgICAgc3RhcnQgPSB0b2tlbi5uZXh0OwoKICAvLy8gUGFyc2UgdGhlIHRva2VucyBhbmQgcmV0dXJuIHRoZSByZWNlaXZlciBvciBbbm9UeXBlUGFyYW1PckFyZ10gaWYgdGhlcmUKICAvLy8gYXJlIG5vIHR5cGUgcGFyYW1ldGVycyBvciBhcmd1bWVudHMuIFRoaXMgZG9lcyBub3QgbW9kaWZ5IHRoZSB0b2tlbgogIC8vLyBzdHJlYW0uCiAgVHlwZVBhcmFtT3JBcmdJbmZvIGNvbXB1dGUoKSB7CiAgICBUb2tlbiB0b2tlbjsKICAgIFRva2VuIG5leHQgPSBzdGFydDsKICAgIHR5cGVBcmd1bWVudENvdW50ID0gMDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gY29tcHV0ZVR5cGUobmV4dCwgdHJ1ZSwgaW5EZWNsYXJhdGlvbik7CiAgICAgIGlmICh0eXBlSW5mbyA9PSBub1R5cGUpIHsKICAgICAgICB3aGlsZSAodHlwZUluZm8gPT0gbm9UeXBlICYmIG9wdGlvbmFsKCdAJywgbmV4dC5uZXh0KSkgewogICAgICAgICAgbmV4dCA9IHNraXBNZXRhZGF0YShuZXh0KTsKICAgICAgICAgIHR5cGVJbmZvID0gY29tcHV0ZVR5cGUobmV4dCwgdHJ1ZSwgaW5EZWNsYXJhdGlvbik7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlSW5mbyA9PSBub1R5cGUpIHsKICAgICAgICAgIGlmIChuZXh0ID09IHN0YXJ0ICYmICFpbkRlY2xhcmF0aW9uICYmICFpc0Nsb3NlcihuZXh0Lm5leHQpKSB7CiAgICAgICAgICAgIHJldHVybiBub1R5cGVQYXJhbU9yQXJnOwogICAgICAgICAgfQogICAgICAgICAgaWYgKCFvcHRpb25hbCgnLCcsIG5leHQubmV4dCkpIHsKICAgICAgICAgICAgdG9rZW4gPSBuZXh0OwogICAgICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGFzc2VydCh0eXBlSW5mbyAhPSBub1R5cGUgfHwgb3B0aW9uYWwoJywnLCBuZXh0Lm5leHQpKTsKICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gcHJvY2VzcyB0eXBlIChpZiBhbnkpIGFuZCBjb25zdW1lIGAsYAogICAgICB9CiAgICAgICsrdHlwZUFyZ3VtZW50Q291bnQ7CiAgICAgIHRva2VuID0gdHlwZUluZm8uc2tpcFR5cGUobmV4dCk7CiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJ2V4dGVuZHMnLCBuZXh0KSkgewogICAgICAgIHRva2VuID0gY29tcHV0ZVR5cGUobmV4dCwgdHJ1ZSwgaW5EZWNsYXJhdGlvbikuc2tpcFR5cGUobmV4dCk7CiAgICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIH0KICAgICAgaWYgKCFvcHRpb25hbCgnLCcsIG5leHQpKSB7CiAgICAgICAgc2tpcEVuZCA9IHNwbGl0Q2xvc2VyKG5leHQpOwogICAgICAgIGlmIChza2lwRW5kICE9IG51bGwpIHsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgICBpZiAoIWluRGVjbGFyYXRpb24pIHsKICAgICAgICAgIHJldHVybiBub1R5cGVQYXJhbU9yQXJnOwogICAgICAgIH0KCiAgICAgICAgLy8gUmVjb3ZlcnkKICAgICAgICBpZiAoIWxvb2tzTGlrZVR5cGVQYXJhbU9yQXJnKGluRGVjbGFyYXRpb24sIG5leHQpKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgLy8gTG9va3MgbGlrZSBtaXNzaW5nIGNvbW1hLiBDb250aW51ZSBsb29waW5nLgogICAgICAgIG5leHQgPSB0b2tlbjsKICAgICAgfQogICAgfQoKICAgIC8vIFJlY292ZXJ5CiAgICBza2lwRW5kID0gc3BsaXRDbG9zZXIobmV4dCk7CiAgICBpZiAoc2tpcEVuZCA9PSBudWxsKSB7CiAgICAgIGlmIChvcHRpb25hbCgnKCcsIG5leHQpKSB7CiAgICAgICAgdG9rZW4gPSBuZXh0LmVuZEdyb3VwOwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICB9CiAgICAgIHNraXBFbmQgPSBzcGxpdENsb3NlcihuZXh0KTsKICAgICAgaWYgKHNraXBFbmQgPT0gbnVsbCkgewogICAgICAgIHNraXBFbmQgPSBzcGxpdENsb3NlcihuZXh0Lm5leHQpOwogICAgICB9CiAgICAgIGlmIChza2lwRW5kID09IG51bGwpIHsKICAgICAgICBza2lwRW5kID0gc3ludGhldGljR3QobmV4dCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VBcmd1bWVudHMoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIGFzc2VydChpZGVudGljYWwodG9rZW4ubmV4dCwgc3RhcnQpKTsKICAgIFRva2VuIG5leHQgPSBzdGFydDsKICAgIHBhcnNlci5saXN0ZW5lci5iZWdpblR5cGVBcmd1bWVudHMoc3RhcnQpOwogICAgaW50IGNvdW50ID0gMDsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gY29tcHV0ZVR5cGUobmV4dCwgdHJ1ZSwgaW5EZWNsYXJhdGlvbik7CiAgICAgIGlmICh0eXBlSW5mbyA9PSBub1R5cGUpIHsKICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgIHdoaWxlICh0eXBlSW5mbyA9PSBub1R5cGUgJiYgb3B0aW9uYWwoJ0AnLCBuZXh0Lm5leHQpKSB7CiAgICAgICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcldpdGhUb2tlbigKICAgICAgICAgICAgICBuZXh0Lm5leHQsIGZhc3RhLnRlbXBsYXRlVW5leHBlY3RlZFRva2VuKTsKICAgICAgICAgIG5leHQgPSBza2lwTWV0YWRhdGEobmV4dCk7CiAgICAgICAgICB0eXBlSW5mbyA9IGNvbXB1dGVUeXBlKG5leHQsIHRydWUsIGluRGVjbGFyYXRpb24pOwogICAgICAgIH0KICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gcHJvY2VzcyB0eXBlIChpZiBhbnkpIGFuZCBjb25zdW1lIGAsYAogICAgICB9CiAgICAgIHRva2VuID0gdHlwZUluZm8uZW5zdXJlVHlwZU9yVm9pZChuZXh0LCBwYXJzZXIpOwogICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgKytjb3VudDsKICAgICAgaWYgKCFvcHRpb25hbCgnLCcsIG5leHQpKSB7CiAgICAgICAgaWYgKHBhcnNlQ2xvc2VyKHRva2VuKSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgIGlmICghbG9va3NMaWtlVHlwZVBhcmFtT3JBcmcoaW5EZWNsYXJhdGlvbiwgbmV4dCkpIHsKICAgICAgICAgIHRva2VuID0gcGFyc2VVbmV4cGVjdGVkRW5kKHRva2VuLCB0cnVlLCBwYXJzZXIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIC8vIE1pc3NpbmcgY29tbWEuIFJlcG9ydCBlcnJvciwgaW5zZXJ0IGNvbW1hLCBhbmQgY29udGludWUgbG9vcGluZy4KICAgICAgICBuZXh0ID0gcGFyc2VNaXNzaW5nQ29tbWEodG9rZW4sIHBhcnNlcik7CiAgICAgIH0KICAgIH0KICAgIFRva2VuIGVuZEdyb3VwID0gdG9rZW4ubmV4dDsKICAgIHBhcnNlci5saXN0ZW5lci5lbmRUeXBlQXJndW1lbnRzKGNvdW50LCBzdGFydCwgZW5kR3JvdXApOwogICAgcmV0dXJuIGVuZEdyb3VwOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gcGFyc2VWYXJpYWJsZXMoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIGFzc2VydChpZGVudGljYWwodG9rZW4ubmV4dCwgc3RhcnQpKTsKICAgIFRva2VuIG5leHQgPSBzdGFydDsKICAgIExpc3RlbmVyIGxpc3RlbmVyID0gcGFyc2VyLmxpc3RlbmVyOwogICAgbGlzdGVuZXIuYmVnaW5UeXBlVmFyaWFibGVzKHN0YXJ0KTsKICAgIGludCBjb3VudCA9IDA7CgogICAgTGluazxUb2tlbj4gdHlwZVN0YXJ0cyA9IGNvbnN0IExpbms8VG9rZW4+KCk7CiAgICBMaW5rPFR5cGVJbmZvPiBzdXBlclR5cGVJbmZvcyA9IGNvbnN0IExpbms8VHlwZUluZm8+KCk7CgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgdG9rZW4gPSBwYXJzZXIucGFyc2VNZXRhZGF0YVN0YXIobmV4dCk7CiAgICAgIG5leHQgPSBwYXJzZXIuZW5zdXJlSWRlbnRpZmllcigKICAgICAgICAgIHRva2VuLCBJZGVudGlmaWVyQ29udGV4dC50eXBlVmFyaWFibGVEZWNsYXJhdGlvbik7CiAgICAgIHRva2VuID0gbmV4dDsKICAgICAgbGlzdGVuZXIuYmVnaW5UeXBlVmFyaWFibGUodG9rZW4pOwogICAgICB0eXBlU3RhcnRzID0gdHlwZVN0YXJ0cy5wcmVwZW5kKHRva2VuKTsKCiAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICBpZiAob3B0aW9uYWwoJ2V4dGVuZHMnLCBuZXh0KSkgewogICAgICAgIFR5cGVJbmZvIHR5cGVJbmZvID0gY29tcHV0ZVR5cGUobmV4dCwgdHJ1ZSwgaW5EZWNsYXJhdGlvbik7CiAgICAgICAgdG9rZW4gPSB0eXBlSW5mby5za2lwVHlwZShuZXh0KTsKICAgICAgICBuZXh0ID0gdG9rZW4ubmV4dDsKICAgICAgICBzdXBlclR5cGVJbmZvcyA9IHN1cGVyVHlwZUluZm9zLnByZXBlbmQodHlwZUluZm8pOwogICAgICB9IGVsc2UgewogICAgICAgIHN1cGVyVHlwZUluZm9zID0gc3VwZXJUeXBlSW5mb3MucHJlcGVuZChudWxsKTsKICAgICAgfQoKICAgICAgKytjb3VudDsKICAgICAgaWYgKCFvcHRpb25hbCgnLCcsIG5leHQpKSB7CiAgICAgICAgaWYgKGlzQ2xvc2VyKHRva2VuKSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICAvLyBSZWNvdmVyeQogICAgICAgIGlmICghbG9va3NMaWtlVHlwZVBhcmFtT3JBcmcoaW5EZWNsYXJhdGlvbiwgbmV4dCkpIHsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLyBNaXNzaW5nIGNvbW1hLiBSZXBvcnQgZXJyb3IsIGluc2VydCBjb21tYSwgYW5kIGNvbnRpbnVlIGxvb3BpbmcuCiAgICAgICAgbmV4dCA9IHBhcnNlTWlzc2luZ0NvbW1hKHRva2VuLCBwYXJzZXIpOwogICAgICB9CiAgICB9CgogICAgYXNzZXJ0KGNvdW50ID4gMCk7CiAgICBhc3NlcnQodHlwZVN0YXJ0cy5zbG93TGVuZ3RoKCkgPT0gY291bnQpOwogICAgYXNzZXJ0KHN1cGVyVHlwZUluZm9zLnNsb3dMZW5ndGgoKSA9PSBjb3VudCk7CiAgICBsaXN0ZW5lci5oYW5kbGVUeXBlVmFyaWFibGVzRGVmaW5lZCh0b2tlbiwgY291bnQpOwoKICAgIHRva2VuID0gbnVsbDsKICAgIHdoaWxlICh0eXBlU3RhcnRzLmlzTm90RW1wdHkpIHsKICAgICAgVG9rZW4gdG9rZW4yID0gdHlwZVN0YXJ0cy5oZWFkOwogICAgICBUeXBlSW5mbyB0eXBlSW5mbyA9IHN1cGVyVHlwZUluZm9zLmhlYWQ7CgogICAgICBUb2tlbiBleHRlbmRzT3JTdXBlciA9IG51bGw7CiAgICAgIFRva2VuIG5leHQyID0gdG9rZW4yLm5leHQ7CiAgICAgIGlmICh0eXBlSW5mbyAhPSBudWxsKSB7CiAgICAgICAgYXNzZXJ0KG9wdGlvbmFsKCdleHRlbmRzJywgbmV4dDIpKTsKICAgICAgICBleHRlbmRzT3JTdXBlciA9IG5leHQyOwogICAgICAgIHRva2VuMiA9IHR5cGVJbmZvLmVuc3VyZVR5cGVOb3RWb2lkKG5leHQyLCBwYXJzZXIpOwogICAgICAgIG5leHQyID0gdG9rZW4yLm5leHQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KCFvcHRpb25hbCgnZXh0ZW5kcycsIG5leHQyKSk7CiAgICAgICAgbGlzdGVuZXIuaGFuZGxlTm9UeXBlKHRva2VuMik7CiAgICAgIH0KICAgICAgLy8gVHlwZSB2YXJpYWJsZXMgYXJlICJjb21wbGV0ZWQiIGluIHJldmVyc2Ugb3JkZXIsIHNvIGNhcHR1cmUgdGhlIGxhc3QKICAgICAgLy8gY29uc3VtZWQgdG9rZW4gZnJvbSB0aGUgZmlyc3QgImNvbXBsZXRlZCIgdHlwZSB2YXJpYWJsZS4KICAgICAgdG9rZW4gPz89IHRva2VuMjsKICAgICAgbGlzdGVuZXIuZW5kVHlwZVZhcmlhYmxlKG5leHQyLCAtLWNvdW50LCBleHRlbmRzT3JTdXBlcik7CgogICAgICB0eXBlU3RhcnRzID0gdHlwZVN0YXJ0cy50YWlsOwogICAgICBzdXBlclR5cGVJbmZvcyA9IHN1cGVyVHlwZUluZm9zLnRhaWw7CiAgICB9CgogICAgaWYgKCFwYXJzZUNsb3Nlcih0b2tlbikpIHsKICAgICAgdG9rZW4gPSBwYXJzZVVuZXhwZWN0ZWRFbmQodG9rZW4sIGZhbHNlLCBwYXJzZXIpOwogICAgfQogICAgVG9rZW4gZW5kR3JvdXAgPSB0b2tlbi5uZXh0OwogICAgbGlzdGVuZXIuZW5kVHlwZVZhcmlhYmxlcyhzdGFydCwgZW5kR3JvdXApOwogICAgcmV0dXJuIGVuZEdyb3VwOwogIH0KCiAgVG9rZW4gcGFyc2VNaXNzaW5nQ29tbWEoVG9rZW4gdG9rZW4sIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgbmV4dCwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEJ1dEdvdC53aXRoQXJndW1lbnRzKCcsJykpOwogICAgcmV0dXJuIHBhcnNlci5yZXdyaXRlci5pbnNlcnRUb2tlbigKICAgICAgICB0b2tlbiwgbmV3IFN5bnRoZXRpY1Rva2VuKFRva2VuVHlwZS5DT01NQSwgbmV4dC5jaGFyT2Zmc2V0KSk7CiAgfQoKICBUb2tlbiBwYXJzZVVuZXhwZWN0ZWRFbmQoVG9rZW4gdG9rZW4sIGJvb2wgaXNBcmd1bWVudHMsIFBhcnNlciBwYXJzZXIpIHsKICAgIFRva2VuIG5leHQgPSB0b2tlbi5uZXh0OwogICAgYm9vbCBlcnJvclJlcG9ydGVkID0gdG9rZW4uaXNTeW50aGV0aWMgfHwgKG5leHQuaXNTeW50aGV0aWMgJiYgIW5leHQuaXNFb2YpOwoKICAgIGJvb2wgdHlwZUZvbGxvd3NFeHRlbmRzID0gZmFsc2U7CiAgICBpZiAob3B0aW9uYWwoJ2V4dGVuZHMnLCBuZXh0KSkgewogICAgICBpZiAoIWVycm9yUmVwb3J0ZWQpIHsKICAgICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgdG9rZW4sIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdC53aXRoQXJndW1lbnRzKCc+JykpOwogICAgICAgIGVycm9yUmVwb3J0ZWQgPSB0cnVlOwogICAgICB9CiAgICAgIHRva2VuID0gbmV4dDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIHR5cGVGb2xsb3dzRXh0ZW5kcyA9IGlzVmFsaWRUeXBlUmVmZXJlbmNlKG5leHQpOwoKICAgICAgaWYgKHBhcnNlQ2xvc2VyKHRva2VuKSkgewogICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgfQogICAgfQoKICAgIGlmICh0eXBlRm9sbG93c0V4dGVuZHMgfHwKICAgICAgICBvcHRpb25hbCgnZHluYW1pYycsIG5leHQpIHx8CiAgICAgICAgb3B0aW9uYWwoJ3ZvaWQnLCBuZXh0KSB8fAogICAgICAgIG9wdGlvbmFsKCdGdW5jdGlvbicsIG5leHQpKSB7CiAgICAgIFR5cGVJbmZvIGludmFsaWRUeXBlID0gY29tcHV0ZVR5cGUodG9rZW4sIHRydWUpOwogICAgICBpZiAoaW52YWxpZFR5cGUgIT0gbm9UeXBlKSB7CiAgICAgICAgaWYgKCFlcnJvclJlcG9ydGVkKSB7CiAgICAgICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgICB0b2tlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEFmdGVyQnV0R290LndpdGhBcmd1bWVudHMoJz4nKSk7CiAgICAgICAgICBlcnJvclJlcG9ydGVkID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIFBhcnNlIHRoZSB0eXBlIHNvIHRoYXQgdGhlIHRva2VuIHN0cmVhbSBpcyBwcm9wZXJseSBtb2RpZmllZCwKICAgICAgICAvLyBidXQgZW5zdXJlIHRoYXQgcGFyc2VyIGV2ZW50cyBhcmUgaWdub3JlZCBieSByZXBsYWNpbmcgdGhlIGxpc3RlbmVyLgogICAgICAgIGZpbmFsIG9yaWdpbmFsTGlzdGVuZXIgPSBwYXJzZXIubGlzdGVuZXI7CiAgICAgICAgcGFyc2VyLmxpc3RlbmVyID0gbmV3IEZvcndhcmRpbmdMaXN0ZW5lcigpOwogICAgICAgIHRva2VuID0gaW52YWxpZFR5cGUucGFyc2VUeXBlKHRva2VuLCBwYXJzZXIpOwogICAgICAgIG5leHQgPSB0b2tlbi5uZXh0OwogICAgICAgIHBhcnNlci5saXN0ZW5lciA9IG9yaWdpbmFsTGlzdGVuZXI7CgogICAgICAgIGlmIChwYXJzZUNsb3Nlcih0b2tlbikpIHsKICAgICAgICAgIHJldHVybiB0b2tlbjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBUeXBlUGFyYW1PckFyZ0luZm8gaW52YWxpZFR5cGVWYXIgPQogICAgICAgIGNvbXB1dGVUeXBlUGFyYW1PckFyZyh0b2tlbiwgaW5EZWNsYXJhdGlvbik7CiAgICBpZiAoaW52YWxpZFR5cGVWYXIgIT0gbm9UeXBlUGFyYW1PckFyZykgewogICAgICBpZiAoIWVycm9yUmVwb3J0ZWQpIHsKICAgICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgdG9rZW4sIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdC53aXRoQXJndW1lbnRzKCc+JykpOwogICAgICAgIGVycm9yUmVwb3J0ZWQgPSB0cnVlOwogICAgICB9CgogICAgICAvLyBQYXJzZSB0aGUgdHlwZSBzbyB0aGF0IHRoZSB0b2tlbiBzdHJlYW0gaXMgcHJvcGVybHkgbW9kaWZpZWQsCiAgICAgIC8vIGJ1dCBlbnN1cmUgdGhhdCBwYXJzZXIgZXZlbnRzIGFyZSBpZ25vcmVkIGJ5IHJlcGxhY2luZyB0aGUgbGlzdGVuZXIuCiAgICAgIGZpbmFsIG9yaWdpbmFsTGlzdGVuZXIgPSBwYXJzZXIubGlzdGVuZXI7CiAgICAgIHBhcnNlci5saXN0ZW5lciA9IG5ldyBGb3J3YXJkaW5nTGlzdGVuZXIoKTsKICAgICAgdG9rZW4gPSBpc0FyZ3VtZW50cwogICAgICAgICAgPyBpbnZhbGlkVHlwZVZhci5wYXJzZUFyZ3VtZW50cyh0b2tlbiwgcGFyc2VyKQogICAgICAgICAgOiBpbnZhbGlkVHlwZVZhci5wYXJzZVZhcmlhYmxlcyh0b2tlbiwgcGFyc2VyKTsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CiAgICAgIHBhcnNlci5saXN0ZW5lciA9IG9yaWdpbmFsTGlzdGVuZXI7CgogICAgICBpZiAocGFyc2VDbG9zZXIodG9rZW4pKSB7CiAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICB9CiAgICB9CgogICAgaWYgKG9wdGlvbmFsKCcoJywgbmV4dCkgJiYgbmV4dC5lbmRHcm91cCAhPSBudWxsKSB7CiAgICAgIGlmICghZXJyb3JSZXBvcnRlZCkgewogICAgICAgIC8vIE9ubHkgcmVwb3J0IGFuIGVycm9yIGlmIG9uZSBoYXMgbm90IGFscmVhZHkgYmVlbiByZXBvcnRlZC4KICAgICAgICBwYXJzZXIucmVwb3J0UmVjb3ZlcmFibGVFcnJvcigKICAgICAgICAgICAgdG9rZW4sIGZhc3RhLnRlbXBsYXRlRXhwZWN0ZWRBZnRlckJ1dEdvdC53aXRoQXJndW1lbnRzKCc+JykpOwogICAgICAgIGVycm9yUmVwb3J0ZWQgPSB0cnVlOwogICAgICB9CiAgICAgIHRva2VuID0gbmV4dC5lbmRHcm91cDsKICAgICAgbmV4dCA9IHRva2VuLm5leHQ7CgogICAgICBpZiAocGFyc2VDbG9zZXIodG9rZW4pKSB7CiAgICAgICAgcmV0dXJuIHRva2VuOwogICAgICB9CiAgICB9CgogICAgaWYgKCFlcnJvclJlcG9ydGVkKSB7CiAgICAgIC8vIE9ubHkgcmVwb3J0IGFuIGVycm9yIGlmIG9uZSBoYXMgbm90IGFscmVhZHkgYmVlbiByZXBvcnRlZC4KICAgICAgcGFyc2VyLnJlcG9ydFJlY292ZXJhYmxlRXJyb3IoCiAgICAgICAgICB0b2tlbiwgZmFzdGEudGVtcGxhdGVFeHBlY3RlZEFmdGVyQnV0R290LndpdGhBcmd1bWVudHMoJz4nKSk7CiAgICB9CiAgICBpZiAocGFyc2VDbG9zZXIobmV4dCkpIHsKICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CiAgICBUb2tlbiBlbmRHcm91cCA9IHN5bnRoZXRpY0d0KG5leHQpOwogICAgZW5kR3JvdXAuc2V0TmV4dChuZXh0KTsKICAgIHRva2VuLnNldE5leHQoZW5kR3JvdXApOwogICAgcmV0dXJuIHRva2VuOwogIH0KCiAgQG92ZXJyaWRlCiAgVG9rZW4gc2tpcChUb2tlbiB0b2tlbikgewogICAgYXNzZXJ0KHNraXBFbmQgIT0gbnVsbCk7CiAgICByZXR1cm4gc2tpcEVuZDsKICB9Cn0KCi8vLyBSZXR1cm4gYHRydWVgIGlmIFt0b2tlbl0gaXMgb25lIG9mIGA+YCwgYD4+YCwgYD4+PmAsIGA+PWAsIGA+Pj1gLCBvciBgPj4+PWAuCmJvb2wgaXNDbG9zZXIoVG9rZW4gdG9rZW4pIHsKICBmaW5hbCB2YWx1ZSA9IHRva2VuLnN0cmluZ1ZhbHVlOwogIHJldHVybiBpZGVudGljYWwodmFsdWUsICc+JykgfHwKICAgICAgaWRlbnRpY2FsKHZhbHVlLCAnPj4nKSB8fAogICAgICBpZGVudGljYWwodmFsdWUsICc+PScpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJz4+PicpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJz4+PScpIHx8CiAgICAgIGlkZW50aWNhbCh2YWx1ZSwgJz4+Pj0nKTsKfQoKLy8vIElmIFtiZWZvcmVDbG9zZXJdLm5leHQgaXMgb25lIG9mIGA+YCwgYD4+YCwgYD4+PmAsIGA+PWAsIGA+Pj1gLCBvciBgPj4+PWAKLy8vIHRoZW4gdXBkYXRlIHRoZSB0b2tlbiBzdHJlYW0gYW5kIHJldHVybiBgdHJ1ZWAuCmJvb2wgcGFyc2VDbG9zZXIoVG9rZW4gYmVmb3JlQ2xvc2VyKSB7CiAgVG9rZW4gdW5zcGxpdCA9IGJlZm9yZUNsb3Nlci5uZXh0OwogIFRva2VuIHNwbGl0ID0gc3BsaXRDbG9zZXIodW5zcGxpdCk7CiAgaWYgKHNwbGl0ID09IHVuc3BsaXQpIHsKICAgIHJldHVybiB0cnVlOwogIH0gZWxzZSBpZiAoc3BsaXQgPT0gbnVsbCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBzcGxpdC5uZXh0LnNldE5leHQodW5zcGxpdC5uZXh0KTsKICBiZWZvcmVDbG9zZXIuc2V0TmV4dChzcGxpdCk7CiAgcmV0dXJuIHRydWU7Cn0KCi8vLyBJZiBbY2xvc2VyXSBpcyBgPmAgdGhlbiByZXR1cm4g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CBQZNwEgFggGAR4lIiY3Ix4pTCAKAUlQMjQ2GywBIhgKCAYBKDUuHCdKHggBR04wMho5OhkqASAWCAYBOBxGJ0oeCB0ZASAWCAYBGkQlSAYdEwYoHB0SBAEMHB0UBAIBUR0jIiAgISEgAgFONCclJhoRHhIEJB8PAgEnSkw4IiUfEyceJx4oJigmKSgEDwIBNnBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvdHlwZV9pbmZvX2ltcGwuZGFydD5zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19iYWNrZW5kL2NvbnN0YW50X2VtaXR0ZXIuZGFydMAASP8vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb24uZGFydCc7CmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50cy9jb25zdGFudF9zeXN0ZW0uZGFydCcgYXMgY29uc3RhbnRfc3lzdGVtOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vaW8vY29kZV9vdXRwdXQuZGFydCc7CmltcG9ydCAnLi4vanMvanMuZGFydCcgYXMganNBc3Q7CmltcG9ydCAnLi4vanMvanMuZGFydCcgc2hvdyBqczsKaW1wb3J0ICcuLi9qc19iYWNrZW5kL2ZpZWxkX2FuYWx5c2lzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIvY29kZV9lbWl0dGVyX3Rhc2suZGFydCc7CmltcG9ydCAnLi4vanNfbW9kZWwvdHlwZV9yZWNpcGUuZGFydCcgc2hvdyBUeXBlRXhwcmVzc2lvblJlY2lwZTsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJ2ZpZWxkX2FuYWx5c2lzLmRhcnQnIHNob3cgSkZpZWxkQW5hbHlzaXM7CmltcG9ydCAncnVudGltZV90eXBlcy5kYXJ0JzsKaW1wb3J0ICdydW50aW1lX3R5cGVzX25ldy5kYXJ0JyBzaG93IFJlY2lwZUVuY29kZXI7CmltcG9ydCAncnVudGltZV90eXBlc19yZXNvbHV0aW9uLmRhcnQnOwoKdHlwZWRlZiBqc0FzdC5FeHByZXNzaW9uIF9Db25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcihDb25zdGFudFZhbHVlIGNvbnN0YW50KTsKCnR5cGVkZWYganNBc3QuRXhwcmVzc2lvbiBfQ29uc3RhbnRMaXN0R2VuZXJhdG9yKGpzQXN0LkV4cHJlc3Npb24gYXJyYXkpOwoKLy8vIFZpc2l0b3IgdGhhdCBjcmVhdGVzIFtqc0FzdC5FeHByZXNzaW9uXXMgZm9yIGNvbnN0YW50cyB0aGF0IGFyZSBpbmxpbmVkCi8vLyBhbmQgdGhlcmVmb3JlIGNhbiBiZSBjcmVhdGVkIGR1cmluZyBtb2R1bGFyIGNvZGUgZ2VuZXJhdGlvbi4KY2xhc3MgTW9kdWxhckNvbnN0YW50RW1pdHRlcgogICAgaW1wbGVtZW50cyBDb25zdGFudFZhbHVlVmlzaXRvcjxqc0FzdC5FeHByZXNzaW9uLCBOdWxsPiB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwoKICBNb2R1bGFyQ29uc3RhbnRFbWl0dGVyKHRoaXMuX29wdGlvbnMpOwoKICAvLy8gQ29uc3RydWN0cyBhIGxpdGVyYWwgZXhwcmVzc2lvbiB0aGF0IGV2YWx1YXRlcyB0byB0aGUgY29uc3RhbnQuIFVzZXMgYQogIC8vLyBjYW5vbmljYWwgbmFtZSB1bmxlc3MgdGhlIGNvbnN0YW50IGNhbiBiZSBlbWl0dGVkIG11bHRpcGxlIHRpbWVzIChhcyBmb3IKICAvLy8gbnVtYmVycyBhbmQgc3RyaW5ncykuCiAganNBc3QuRXhwcmVzc2lvbiBnZW5lcmF0ZShDb25zdGFudFZhbHVlIGNvbnN0YW50KSB7CiAgICByZXR1cm4gX3Zpc2l0KGNvbnN0YW50KTsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gX3Zpc2l0KENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIHJldHVybiBjb25zdGFudC5hY2NlcHQodGhpcywgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0RnVuY3Rpb24oRnVuY3Rpb25Db25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIHRocm93IGZhaWxlZEF0KE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAiVGhlIGZ1bmN0aW9uIGNvbnN0YW50IGRvZXMgbm90IG5lZWQgc3BlY2lmaWMgSlMgY29kZS4iKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXROdWxsKE51bGxDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIHJldHVybiBuZXcganNBc3QuTGl0ZXJhbE51bGwoKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXROb25Db25zdGFudChOb25Db25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIHJldHVybiBuZXcganNBc3QuTGl0ZXJhbE51bGwoKTsKICB9CgogIHN0YXRpYyBmaW5hbCBfZXhwb25lbnRpYWxSRSA9IG5ldyBSZWdFeHAoJ14nCiAgICAgICdcKFstK10/XCknIC8vIDE6IHNpZ24KICAgICAgJ1woWzAtOV0rXCknIC8vIDI6IGxlYWRpbmcgZGlnaXQocykKICAgICAgJ1woXC5cKFswLTldKlwpXCk/JyAvLyA0OiBmcmFjdGlvbiBkaWdpdHMKICAgICAgJ2VcKFstK10/WzAtOV0rXCknIC8vIDU6IGV4cG9uZW50IHdpdGggc2lnbgogICAgICByJyQnKTsKCiAgLy8vIFJlZHVjZXMgdGhlIHNpemUgb2YgZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb25zIHdoZW4gbWluaWZpY2F0aW9uIGlzCiAgLy8vIGVuYWJsZWQuCiAgLy8vCiAgLy8vIFJlbW92ZXMgdGhlICIrIiBhZnRlciB0aGUgZXhwb25lbnRpYWwgc2lnbiwgYW5kIHJlbW92ZXMgdGhlICIuIiBiZWZvcmUgdGhlCiAgLy8vICJlIi4gRm9yIGV4YW1wbGUgYDEuMjNlKzVgIGlzIGNoYW5nZWQgdG8gYDEyM2UzYC4KICBTdHJpbmcgX3Nob3J0ZW5FeHBvbmVudGlhbFJlcHJlc2VudGF0aW9uKFN0cmluZyBudW1iZXJTdHJpbmcpIHsKICAgIE1hdGNoIG1hdGNoID0gX2V4cG9uZW50aWFsUkUuZmlyc3RNYXRjaChudW1iZXJTdHJpbmcpOwogICAgaWYgKG1hdGNoID09IG51bGwpIHJldHVybiBudW1iZXJTdHJpbmc7CiAgICBTdHJpbmcgc2lnbiA9IG1hdGNoWzFdOwogICAgU3RyaW5nIGxlYWRpbmdEaWdpdHMgPSBtYXRjaFsyXTsKICAgIFN0cmluZyBmcmFjdGlvbkRpZ2l0cyA9IG1hdGNoWzRdOwogICAgaW50IGV4cG9uZW50ID0gaW50LnBhcnNlKG1hdGNoWzVdKTsKICAgIGlmIChmcmFjdGlvbkRpZ2l0cyA9PSBudWxsKSBmcmFjdGlvbkRpZ2l0cyA9ICcnOwogICAgZXhwb25lbnQgLT0gZnJhY3Rpb25EaWdpdHMubGVuZ3RoOwogICAgU3RyaW5nIHJlc3VsdCA9ICcke3NpZ259JHtsZWFkaW5nRGlnaXRzfSR7ZnJhY3Rpb25EaWdpdHN9ZSR7ZXhwb25lbnR9JzsKICAgIGFzc2VydChkb3VibGUucGFyc2UocmVzdWx0KSA9PSBkb3VibGUucGFyc2UobnVtYmVyU3RyaW5nKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdEludChJbnRDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIEJpZ0ludCB2YWx1ZSA9IGNvbnN0YW50LmludFZhbHVlOwogICAgLy8gU2luY2Ugd2UgYXJlIGluIEphdmFTY3JpcHQgd2UgY2FuIHNob3J0ZW4gbG9uZyBpbnRlZ2VycyB0byB0aGVpciBzaG9ydGVyCiAgICAvLyBleHBvbmVudGlhbCByZXByZXNlbnRhdGlvbiwgZm9yIGV4YW1wbGU6ICIxZTQiIGlzIHNob3J0ZXIgdGhhbiAiMTAwMDAiLgogICAgLy8KICAgIC8vIE5vdGUgdGhhdCB0aGlzIHNob3J0ZW5pbmcgYXBwYXJlbnRseSBsb3NlcyBwcmVjaXNpb24gZm9yIGJpZyBudW1iZXJzCiAgICAvLyAobGlrZSAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1IHdoaWNoIGJlY29tZXMgMTIzNDU2Nzg5MDEyMzQ1NjhlOCkuCiAgICAvLyBIb3dldmVyLCBzaW5jZSBKYXZhU2NyaXB0IGVuZ2luZXMgcmVwcmVzZW50IGFsbCBudW1iZXJzIGFzIGRvdWJsZXMsIHRoZXNlCiAgICAvLyBkaWdpdHMgYXJlIGxvc3QgYW55d2F5LgogICAgU3RyaW5nIHJlcHJlc2VudGF0aW9uID0gdmFsdWUudG9TdHJpbmcoKTsKICAgIFN0cmluZyBhbHRlcm5hdGl2ZSA9IG51bGw7CiAgICBpbnQgY3V0b2ZmID0gX29wdGlvbnMuZW5hYmxlTWluaWZpY2F0aW9uID8gMTAwMDAgOiAxZTEwLnRvSW50KCk7CiAgICBpZiAodmFsdWUuYWJzKCkgPj0gbmV3IEJpZ0ludC5mcm9tKGN1dG9mZikpIHsKICAgICAgYWx0ZXJuYXRpdmUgPSBfc2hvcnRlbkV4cG9uZW50aWFsUmVwcmVzZW50YXRpb24oCiAgICAgICAgICB2YWx1ZS50b0RvdWJsZSgpLnRvU3RyaW5nQXNFeHBvbmVudGlhbCgpKTsKICAgIH0KICAgIGlmIChhbHRlcm5hdGl2ZSAhPSBudWxsICYmIGFsdGVybmF0aXZlLmxlbmd0aCA8IHJlcHJlc2VudGF0aW9uLmxlbmd0aCkgewogICAgICByZXByZXNlbnRhdGlvbiA9IGFsdGVybmF0aXZlOwogICAgfQogICAgcmV0dXJuIG5ldyBqc0FzdC5MaXRlcmFsTnVtYmVyKHJlcHJlc2VudGF0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXREb3VibGUoRG91YmxlQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICBkb3VibGUgdmFsdWUgPSBjb25zdGFudC5kb3VibGVWYWx1ZTsKICAgIGlmICh2YWx1ZS5pc05hTikgewogICAgICByZXR1cm4ganMoIjAvMCIpOwogICAgfSBlbHNlIGlmICh2YWx1ZSA9PSBkb3VibGUuaW5maW5pdHkpIHsKICAgICAgcmV0dXJuIGpzKCIxLzAiKTsKICAgIH0gZWxzZSBpZiAodmFsdWUgPT0gLWRvdWJsZS5pbmZpbml0eSkgewogICAgICByZXR1cm4ganMoIi0xLzAiKTsKICAgIH0gZWxzZSB7CiAgICAgIFN0cmluZyBzaG9ydGVuZWQgPSBfc2hvcnRlbkV4cG9uZW50aWFsUmVwcmVzZW50YXRpb24oIiR2YWx1ZSIpOwogICAgICByZXR1cm4gbmV3IGpzQXN0LkxpdGVyYWxOdW1iZXIoc2hvcnRlbmVkKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRCb29sKEJvb2xDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIGlmIChfb3B0aW9ucy5lbmFibGVNaW5pZmljYXRpb24pIHsKICAgICAgaWYgKGNvbnN0YW50LmlzVHJ1ZSkgewogICAgICAgIC8vIFVzZSAhMCBmb3IgdHJ1ZS4KICAgICAgICByZXR1cm4ganMoIiEwIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVXNlICExIGZvciBmYWxzZS4KICAgICAgICByZXR1cm4ganMoIiExIik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBjb25zdGFudC5pc1RydWUgPyBqcygndHJ1ZScpIDoganMoJ2ZhbHNlJyk7CiAgICB9CiAgfQoKICAvLy8gV3JpdGUgdGhlIGNvbnRlbnRzIG9mIHRoZSBxdW90ZWQgc3RyaW5nIHRvIGEgW0NvZGVCdWZmZXJdIGluCiAgLy8vIGEgZm9ybSB0aGF0IGlzIHZhbGlkIGFzIEphdmFTY3JpcHQgc3RyaW5nIGxpdGVyYWwgY29udGVudC4KICAvLy8gVGhlIHN0cmluZyBpcyBhc3N1bWVkIHF1b3RlZCBieSBkb3VibGUgcXVvdGUgY2hhcmFjdGVycy4KICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0U3RyaW5nKFN0cmluZ0NvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgcmV0dXJuIGpzLmVzY2FwZWRTdHJpbmcoY29uc3RhbnQuc3RyaW5nVmFsdWUsIGFzY2lpOiB0cnVlKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXREdW1teUludGVyY2VwdG9yKER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGNvbnN0YW50LAogICAgICBbX10pIHsKICAgIHJldHVybiBuZXcganNBc3QuTGl0ZXJhbE51bWJlcignMCcpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdFVucmVhY2hhYmxlKFVucmVhY2hhYmxlQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICByZXR1cm4gbmV3IGpzQXN0LkxpdGVyYWxOdW1iZXIoJzAnKTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRKc05hbWUoSnNOYW1lQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSB7CiAgICByZXR1cm4gY29uc3RhbnQubmFtZTsKICB9CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRJbnN0YW50aWF0aW9uKEluc3RhbnRpYXRpb25Db25zdGFudFZhbHVlIGNvbnN0YW50LAogICAgICAgICAgW19dKSA9PgogICAgICBudWxsOwoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0RGVmZXJyZWRHbG9iYWwoRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlIGNvbnN0YW50LAogICAgICAgICAgW19dKSA9PgogICAgICBudWxsOwoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0SW50ZXJjZXB0b3IoSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pID0+CiAgICAgIG51bGw7CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRUeXBlKFR5cGVDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pID0+IG51bGw7CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRDb25zdHJ1Y3RlZChDb25zdHJ1Y3RlZENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgPT4KICAgICAgbnVsbDsKCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdE1hcChNYXBDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pID0+IG51bGw7CgogIEBvdmVycmlkZQogIGpzQXN0LkV4cHJlc3Npb24gdmlzaXRTZXQoU2V0Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSA9PiBudWxsOwoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0TGlzdChMaXN0Q29uc3RhbnRWYWx1ZSBjb25zdGFudCwgW19dKSA9PiBudWxsOwp9CgovLy8gR2VuZXJhdGVzIHRoZSBKYXZhU2NyaXB0IGV4cHJlc3Npb25zIGZvciBjb25zdGFudHMuCi8vLwovLy8gSXQgdXNlcyBhIGdpdmVuIFtfY29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3JdIHRvIHJlZmVyZW5jZSBuZXN0ZWQgY29uc3RhbnRzCi8vLyAoaWYgdGhlcmUgYXJlIHNvbWUpLiBJdCBpcyBoZW5jZSB1cCB0byB0aGF0IGZ1bmN0aW9uIHRvIGRlY2lkZSB3aGljaAovLy8gY29uc3RhbnRzIHNob3VsZCBiZSBpbmxpbmVkIG9yIG5vdC4KY2xhc3MgQ29uc3RhbnRFbWl0dGVyIGV4dGVuZHMgTW9kdWxhckNvbnN0YW50RW1pdHRlciB7CiAgLy8gTWF0Y2hlcyBibGFuayBsaW5lcywgY29tbWVudCBsaW5lcyBhbmQgdHJhaWxpbmcgY29tbWVudHMgdGhhdCBjYW4ndCBiZSBwYXJ0CiAgLy8gb2YgYSBzdHJpbmcuCiAgc3RhdGljIGZpbmFsIFJlZ0V4cCBDT01NRU5UX1JFID0KICAgICAgbmV3IFJlZ0V4cChyJycnXiAqKC8vLiopP1xufCAgKi8vW14nJyJcbl0qJCcnJywgbXVsdGlMaW5lOiB0cnVlKTsKCiAgZmluYWwgSkNvbW1vbkVsZW1lbnRzIF9jb21tb25FbGVtZW50czsKICBmaW5hbCBKRWxlbWVudEVudmlyb25tZW50IF9lbGVtZW50RW52aXJvbm1lbnQ7CiAgZmluYWwgUnVudGltZVR5cGVzTmVlZCBfcnRpTmVlZDsKICBmaW5hbCBSdW50aW1lVHlwZXNFbmNvZGVyIF9ydGlFbmNvZGVyOwogIGZpbmFsIFJlY2lwZUVuY29kZXIgX3J0aVJlY2lwZUVuY29kZXI7CiAgZmluYWwgSkZpZWxkQW5hbHlzaXMgX2ZpZWxkQW5hbHlzaXM7CiAgZmluYWwgRW1pdHRlciBfZW1pdHRlcjsKICBmaW5hbCBfQ29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3IgX2NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yOwogIGZpbmFsIF9Db25zdGFudExpc3RHZW5lcmF0b3IgX21ha2VDb25zdGFudExpc3Q7CgogIC8vLyBUaGUgZ2l2ZW4gW19jb25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcl0gZnVuY3Rpb24gbXVzdCwgd2hlbiBpbnZva2VkIHdpdGggYQogIC8vLyBjb25zdGFudCwgZWl0aGVyIHJldHVybiBhIHJlZmVyZW5jZSBvciByZXR1cm4gaXRzIGxpdGVyYWwgZXhwcmVzc2lvbiBpZiBpdAogIC8vLyBjYW4gYmUgaW5saW5lZC4KICBDb25zdGFudEVtaXR0ZXIoCiAgICAgIENvbXBpbGVyT3B0aW9ucyBvcHRpb25zLAogICAgICB0aGlzLl9jb21tb25FbGVtZW50cywKICAgICAgdGhpcy5fZWxlbWVudEVudmlyb25tZW50LAogICAgICB0aGlzLl9ydGlOZWVkLAogICAgICB0aGlzLl9ydGlFbmNvZGVyLAogICAgICB0aGlzLl9ydGlSZWNpcGVFbmNvZGVyLAogICAgICB0aGlzLl9maWVsZEFuYWx5c2lzLAogICAgICB0aGlzLl9lbWl0dGVyLAogICAgICB0aGlzLl9jb25zdGFudFJlZmVyZW5jZUdlbmVyYXRvciwKICAgICAgdGhpcy5fbWFrZUNvbnN0YW50TGlzdCkKICAgICAgOiBzdXBlcihvcHRpb25zKTsKCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdExpc3QoTGlzdENvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBlbGVtZW50cyA9IGNvbnN0YW50LmVudHJpZXMKICAgICAgICAubWFwKF9jb25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcikKICAgICAgICAudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CiAgICBqc0FzdC5BcnJheUluaXRpYWxpemVyIGFycmF5ID0gbmV3IGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIoZWxlbWVudHMpOwogICAganNBc3QuRXhwcmVzc2lvbiB2YWx1ZSA9IF9tYWtlQ29uc3RhbnRMaXN0KGFycmF5KTsKICAgIGlmIChfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgIHJldHVybiBtYXliZUFkZExpc3RUeXBlQXJndW1lbnRzTmV3UnRpKGNvbnN0YW50LCBjb25zdGFudC50eXBlLCB2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbWF5YmVBZGRUeXBlQXJndW1lbnRzKGNvbnN0YW50LCBjb25zdGFudC50eXBlLCB2YWx1ZSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0U2V0KGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0U2V0Q29uc3RhbnQgY29uc3RhbnQsCiAgICAgIFtfXSkgewogICAgSW50ZXJmYWNlVHlwZSBzb3VyY2VUeXBlID0gY29uc3RhbnQudHlwZTsKICAgIENsYXNzRW50aXR5IGNsYXNzRWxlbWVudCA9IHNvdXJjZVR5cGUuZWxlbWVudDsKICAgIFN0cmluZyBjbGFzc05hbWUgPSBjbGFzc0VsZW1lbnQubmFtZTsKICAgIGlmICghaWRlbnRpY2FsKGNsYXNzRWxlbWVudCwgX2NvbW1vbkVsZW1lbnRzLmNvbnN0U2V0TGl0ZXJhbENsYXNzKSkgewogICAgICBmYWlsZWRBdCgKICAgICAgICAgIGNsYXNzRWxlbWVudCwgIkNvbXBpbGVyIGVuY291dGVyZWQgdW5leHBlY3RlZCBzZXQgY2xhc3MgJGNsYXNzTmFtZSIpOwogICAgfQoKICAgIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gPGpzQXN0LkV4cHJlc3Npb24+WwogICAgICBfY29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3IoY29uc3RhbnQuZW50cmllcyksCiAgICBdOwoKICAgIGlmIChfcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhjbGFzc0VsZW1lbnQpKSB7CiAgICAgIGlmIChfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgICAgYXJndW1lbnRzLmFkZChfcmVpZmllZFR5cGVOZXdSdGkoc291cmNlVHlwZSkpOwogICAgICB9IGVsc2UgewogICAgICAgIGFyZ3VtZW50cwogICAgICAgICAgICAuYWRkKF9yZWlmaWVkVHlwZUFyZ3VtZW50cyhjb25zdGFudCwgc291cmNlVHlwZS50eXBlQXJndW1lbnRzKSk7CiAgICAgIH0KICAgIH0KCiAgICBqc0FzdC5FeHByZXNzaW9uIGNvbnN0cnVjdG9yID0gX2VtaXR0ZXIuY29uc3RydWN0b3JBY2Nlc3MoY2xhc3NFbGVtZW50KTsKICAgIHJldHVybiBuZXcganNBc3QuTmV3KGNvbnN0cnVjdG9yLCBhcmd1bWVudHMpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdE1hcChjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50IGNvbnN0YW50LAogICAgICBbX10pIHsKICAgIGpzQXN0LkV4cHJlc3Npb24ganNNYXAoKSB7CiAgICAgIExpc3Q8anNBc3QuUHJvcGVydHk+IHByb3BlcnRpZXMgPSA8anNBc3QuUHJvcGVydHk+W107CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29uc3RhbnQubGVuZ3RoOyBpKyspIHsKICAgICAgICBTdHJpbmdDb25zdGFudFZhbHVlIGtleSA9IGNvbnN0YW50LmtleXNbaV07CiAgICAgICAgaWYgKGtleS5zdHJpbmdWYWx1ZSA9PQogICAgICAgICAgICBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50LlBST1RPX1BST1BFUlRZKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIC8vIEtleXMgaW4gbGl0ZXJhbCBtYXBzIG11c3QgYmUgZW1pdHRlZCBpbiBwbGFjZS4KICAgICAgICBqc0FzdC5MaXRlcmFsIGtleUV4cHJlc3Npb24gPSBfdmlzaXQoa2V5KTsKICAgICAgICBqc0FzdC5FeHByZXNzaW9uIHZhbHVlRXhwcmVzc2lvbiA9CiAgICAgICAgICAgIF9jb25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcihjb25zdGFudC52YWx1ZXNbaV0pOwogICAgICAgIHByb3BlcnRpZXMuYWRkKG5ldyBqc0FzdC5Qcm9wZXJ0eShrZXlFeHByZXNzaW9uLCB2YWx1ZUV4cHJlc3Npb24pKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IGpzQXN0Lk9iamVjdEluaXRpYWxpemVyKHByb3BlcnRpZXMpOwogICAgfQoKICAgIGpzQXN0LkV4cHJlc3Npb24ganNHZW5lcmFsTWFwKCkgewogICAgICBMaXN0PGpzQXN0LkV4cHJlc3Npb24+IGRhdGEgPSA8anNBc3QuRXhwcmVzc2lvbj5bXTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb25zdGFudC5rZXlzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAganNBc3QuRXhwcmVzc2lvbiBrZXlFeHByZXNzaW9uID0KICAgICAgICAgICAgX2NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yKGNvbnN0YW50LmtleXNbaV0pOwogICAgICAgIGpzQXN0LkV4cHJlc3Npb24gdmFsdWVFeHByZXNzaW9uID0KICAgICAgICAgICAgX2NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yKGNvbnN0YW50LnZhbHVlc1tpXSk7CiAgICAgICAgZGF0YS5hZGQoa2V5RXhwcmVzc2lvbik7CiAgICAgICAgZGF0YS5hZGQodmFsdWVFeHByZXNzaW9uKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IGpzQXN0LkFycmF5SW5pdGlhbGl6ZXIoZGF0YSk7CiAgICB9CgogICAgQ2xhc3NFbnRpdHkgY2xhc3NFbGVtZW50ID0gY29uc3RhbnQudHlwZS5lbGVtZW50OwogICAgU3RyaW5nIGNsYXNzTmFtZSA9IGNsYXNzRWxlbWVudC5uYW1lOwoKICAgIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gYXJndW1lbnRzID0gPGpzQXN0LkV4cHJlc3Npb24+W107CgogICAgLy8gVGhlIGFyZ3VtZW50cyBvZiB0aGUgSmF2YVNjcmlwdCBjb25zdHJ1Y3RvciBmb3IgYW55IGdpdmVuIERhcnQgY2xhc3MKICAgIC8vIGFyZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgbWVtYmVycyBvZiB0aGUgY2xhc3MgZWxlbWVudC4KICAgIGludCBlbWl0dGVkQXJndW1lbnRDb3VudCA9IDA7CiAgICBfZWxlbWVudEVudmlyb25tZW50LmZvckVhY2hJbnN0YW5jZUZpZWxkKGNsYXNzRWxlbWVudCwKICAgICAgICAoQ2xhc3NFbnRpdHkgZW5jbG9zaW5nLCBGaWVsZEVudGl0eSBmaWVsZCkgewogICAgICBpZiAoX2ZpZWxkQW5hbHlzaXMuZ2V0RmllbGREYXRhKGZpZWxkKS5pc0VsaWRlZCkgcmV0dXJuOwogICAgICBpZiAoZmllbGQubmFtZSA9PSBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50LkxFTkdUSF9OQU1FKSB7CiAgICAgICAgYXJndW1lbnRzCiAgICAgICAgICAgIC5hZGQobmV3IGpzQXN0LkxpdGVyYWxOdW1iZXIoJyR7Y29uc3RhbnQua2V5TGlzdC5lbnRyaWVzLmxlbmd0aH0nKSk7CiAgICAgIH0gZWxzZSBpZiAoZmllbGQubmFtZSA9PQogICAgICAgICAgY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRNYXBDb25zdGFudC5KU19PQkpFQ1RfTkFNRSkgewogICAgICAgIGFyZ3VtZW50cy5hZGQoanNNYXAoKSk7CiAgICAgIH0gZWxzZSBpZiAoZmllbGQubmFtZSA9PQogICAgICAgICAgY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRNYXBDb25zdGFudC5LRVlTX05BTUUpIHsKICAgICAgICBhcmd1bWVudHMuYWRkKF9jb25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcihjb25zdGFudC5rZXlMaXN0KSk7CiAgICAgIH0gZWxzZSBpZiAoZmllbGQubmFtZSA9PQogICAgICAgICAgY29uc3RhbnRfc3lzdGVtLkphdmFTY3JpcHRNYXBDb25zdGFudC5QUk9UT19WQUxVRSkgewogICAgICAgIGFzc2VydChjb25zdGFudC5wcm90b1ZhbHVlICE9IG51bGwpOwogICAgICAgIGFyZ3VtZW50cy5hZGQoX2NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yKGNvbnN0YW50LnByb3RvVmFsdWUpKTsKICAgICAgfSBlbHNlIGlmIChmaWVsZC5uYW1lID09CiAgICAgICAgICBjb25zdGFudF9zeXN0ZW0uSmF2YVNjcmlwdE1hcENvbnN0YW50LkpTX0RBVEFfTkFNRSkgewogICAgICAgIGFyZ3VtZW50cy5hZGQoanNHZW5lcmFsTWFwKCkpOwogICAgICB9IGVsc2UgewogICAgICAgIGZhaWxlZEF0KGZpZWxkLAogICAgICAgICAgICAiQ29tcGlsZXIgaGFzIHVuZXhwZWN0ZWQgZmllbGQgJHtmaWVsZC5uYW1lfSBmb3IgJHtjbGFzc05hbWV9LiIpOwogICAgICB9CiAgICAgIGVtaXR0ZWRBcmd1bWVudENvdW50Kys7CiAgICB9KTsKICAgIGlmICgoY2xhc3NOYW1lID09IGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQuREFSVF9TVFJJTkdfQ0xBU1MgJiYKICAgICAgICAgICAgZW1pdHRlZEFyZ3VtZW50Q291bnQgIT0gMykgfHwKICAgICAgICAoY2xhc3NOYW1lID09IGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQuREFSVF9QUk9UT19DTEFTUyAmJgogICAgICAgICAgICBlbWl0dGVkQXJndW1lbnRDb3VudCAhPSA0KSB8fAogICAgICAgIChjbGFzc05hbWUgPT0KICAgICAgICAgICAgICAgIGNvbnN0YW50X3N5c3RlbS5KYXZhU2NyaXB0TWFwQ29uc3RhbnQuREFSVF9HRU5FUkFMX0NMQVNTICYmCiAgICAgICAgICAgIGVtaXR0ZWRBcmd1bWVudENvdW50ICE9IDEpKSB7CiAgICAgIGZhaWxlZEF0KGNsYXNzRWxlbWVudCwKICAgICAgICAgICJDb21waWxlciBhbmQgJHtjbGFzc05hbWV9IGRpc2FncmVlIG9uIG51bWJlciBvZiBmaWVsZHMuIik7CiAgICB9CgogICAgaWYgKF9ydGlOZWVkLmNsYXNzTmVlZHNUeXBlQXJndW1lbnRzKGNsYXNzRWxlbWVudCkpIHsKICAgICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgICBhcmd1bWVudHMuYWRkKF9yZWlmaWVkVHlwZU5ld1J0aShjb25zdGFudC50eXBlKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXJndW1lbnRzCiAgICAgICAgICAgIC5hZGQoX3JlaWZpZWRUeXBlQXJndW1lbnRzKGNvbnN0YW50LCBjb25zdGFudC50eXBlLnR5cGVBcmd1bWVudHMpKTsKICAgICAgfQogICAgfQoKICAgIGpzQXN0LkV4cHJlc3Npb24gY29uc3RydWN0b3IgPSBfZW1pdHRlci5jb25zdHJ1Y3RvckFjY2VzcyhjbGFzc0VsZW1lbnQpOwogICAganNBc3QuRXhwcmVzc2lvbiB2YWx1ZSA9IG5ldyBqc0FzdC5OZXcoY29uc3RydWN0b3IsIGFyZ3VtZW50cyk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBqc0FzdC5Qcm9wZXJ0eUFjY2VzcyBnZXRIZWxwZXJQcm9wZXJ0eShGdW5jdGlvbkVudGl0eSBoZWxwZXIpIHsKICAgIHJldHVybiBfZW1pdHRlci5zdGF0aWNGdW5jdGlvbkFjY2VzcyhoZWxwZXIpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdFR5cGUoVHlwZUNvbnN0YW50VmFsdWUgY29uc3RhbnQsIFtfXSkgewogICAgRGFydFR5cGUgdHlwZSA9IGNvbnN0YW50LnJlcHJlc2VudGVkVHlwZS51bmFsaWFzZWQ7CgogICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgYXNzZXJ0KCF0eXBlLmNvbnRhaW5zVHlwZVZhcmlhYmxlcyk7CgogICAgICBqc0FzdC5FeHByZXNzaW9uIHJlY2lwZSA9IF9ydGlSZWNpcGVFbmNvZGVyLmVuY29kZUdyb3VuZFJlY2lwZSgKICAgICAgICAgIF9lbWl0dGVyLCBUeXBlRXhwcmVzc2lvblJlY2lwZSh0eXBlKSk7CgogICAgICAvLyBHZW5lcmF0ZSAgYHR5cGVMaXRlcmFsKHJlY2lwZSlgLgoKICAgICAgLy8gVE9ETyhzcmEpOiBgdHlwZUxpdGVyYWwocilgIGNhbGxzIGBjcmVhdGVSdW50aW1lVHlwZShmaW5kVHlwZShyKSlgLgogICAgICAvLyBGaW5kIGEgd2F5IHRvIHNoYXJlIHRoZSBgZmluZFR5cGVgIGNhbGwgd2l0aCBtZXRob2RzIHRoYXQgYWxzbyB1c2UgdGhlCiAgICAgIC8vIHR5cGUuCiAgICAgIHJldHVybiBqcygnIygjKScsCiAgICAgICAgICBbZ2V0SGVscGVyUHJvcGVydHkoX2NvbW1vbkVsZW1lbnRzLnR5cGVMaXRlcmFsTWFrZXIpLCByZWNpcGVdKTsKICAgIH0gZWxzZSB7CiAgICAgIGpzQXN0LkV4cHJlc3Npb24gdW5leHBlY3RlZChUeXBlVmFyaWFibGVUeXBlIF92YXJpYWJsZSkgewogICAgICAgIFR5cGVWYXJpYWJsZVR5cGUgdmFyaWFibGUgPSBfdmFyaWFibGU7CiAgICAgICAgdGhyb3cgZmFpbGVkQXQoCiAgICAgICAgICAgIE5PX0xPQ0FUSU9OX1NQQU5OQUJMRSwKICAgICAgICAgICAgIlVuZXhwZWN0ZWQgdHlwZSB2YXJpYWJsZSAnJHt2YXJpYWJsZX0nIgogICAgICAgICAgICAiIGluIGNvbnN0YW50ICcke2NvbnN0YW50LnRvRGFydFRleHQoKX0nIik7CiAgICAgIH0KCiAgICAgIGpzQXN0LkV4cHJlc3Npb24gcnRpID0KICAgICAgICAgIF9ydGlFbmNvZGVyLmdldFR5cGVSZXByZXNlbnRhdGlvbihfZW1pdHRlciwgdHlwZSwgdW5leHBlY3RlZCk7CgogICAgICByZXR1cm4gbmV3IGpzQXN0LkNhbGwoCiAgICAgICAgICBnZXRIZWxwZXJQcm9wZXJ0eShfY29tbW9uRWxlbWVudHMuY3JlYXRlUnVudGltZVR5cGUpLCBbcnRpXSk7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0SW50ZXJjZXB0b3IoSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIENsYXNzRW50aXR5IGludGVyY2VwdG9yQ2xhc3MgPSBjb25zdGFudC5jbHM7CiAgICByZXR1cm4gX2VtaXR0ZXIuaW50ZXJjZXB0b3JQcm90b3R5cGVBY2Nlc3MoaW50ZXJjZXB0b3JDbGFzcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBqc0FzdC5FeHByZXNzaW9uIHZpc2l0Q29uc3RydWN0ZWQoQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIGNvbnN0YW50LCBbX10pIHsKICAgIENsYXNzRW50aXR5IGVsZW1lbnQgPSBjb25zdGFudC50eXBlLmVsZW1lbnQ7CiAgICBpZiAoZWxlbWVudCA9PSBfY29tbW9uRWxlbWVudHMuanNDb25zdENsYXNzKSB7CiAgICAgIFN0cmluZ0NvbnN0YW50VmFsdWUgc3RyID0gY29uc3RhbnQuZmllbGRzLnZhbHVlcy5zaW5nbGU7CiAgICAgIFN0cmluZyB2YWx1ZSA9IHN0ci5zdHJpbmdWYWx1ZTsKICAgICAgcmV0dXJuIG5ldyBqc0FzdC5MaXRlcmFsRXhwcmVzc2lvbihzdHJpcENvbW1lbnRzKHZhbHVlKSk7CiAgICB9CiAgICBqc0FzdC5FeHByZXNzaW9uIGNvbnN0cnVjdG9yID0KICAgICAgICBfZW1pdHRlci5jb25zdHJ1Y3RvckFjY2Vzcyhjb25zdGFudC50eXBlLmVsZW1lbnQpOwogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBmaWVsZHMgPSA8anNBc3QuRXhwcmVzc2lvbj5bXTsKICAgIF9lbGVtZW50RW52aXJvbm1lbnQuZm9yRWFjaEluc3RhbmNlRmllbGQoZWxlbWVudCwgKF8sIEZpZWxkRW50aXR5IGZpZWxkKSB7CiAgICAgIEZpZWxkQW5hbHlzaXNEYXRhIGZpZWxkRGF0YSA9IF9maWVsZEFuYWx5c2lzLmdldEZpZWxkRGF0YShmaWVsZCk7CiAgICAgIGlmIChmaWVsZERhdGEuaXNFbGlkZWQpIHJldHVybjsKICAgICAgaWYgKCFmaWVsZERhdGEuaXNJbml0aWFsaXplZEluQWxsb2NhdG9yKSB7CiAgICAgICAgZmllbGRzLmFkZChfY29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3IoY29uc3RhbnQuZmllbGRzW2ZpZWxkXSkpOwogICAgICB9CiAgICB9KTsKICAgIGlmIChfcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyhjb25zdGFudC50eXBlLmVsZW1lbnQpKSB7CiAgICAgIGlmIChfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgICAgZmllbGRzLmFkZChfcmVpZmllZFR5cGVOZXdSdGkoY29uc3RhbnQudHlwZSkpOwogICAgICB9IGVsc2UgewogICAgICAgIGZpZWxkcwogICAgICAgICAgICAuYWRkKF9yZWlmaWVkVHlwZUFyZ3VtZW50cyhjb25zdGFudCwgY29uc3RhbnQudHlwZS50eXBlQXJndW1lbnRzKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBuZXcganNBc3QuTmV3KGNvbnN0cnVjdG9yLCBmaWVsZHMpOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdEluc3RhbnRpYXRpb24oSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWUgY29uc3RhbnQsCiAgICAgIFtfXSkgewogICAgQ2xhc3NFbnRpdHkgY2xzID0KICAgICAgICBfY29tbW9uRWxlbWVudHMuZ2V0SW5zdGFudGlhdGlvbkNsYXNzKGNvbnN0YW50LnR5cGVBcmd1bWVudHMubGVuZ3RoKTsKICAgIExpc3Q8anNBc3QuRXhwcmVzc2lvbj4gZmllbGRzID0gPGpzQXN0LkV4cHJlc3Npb24+WwogICAgICBfY29uc3RhbnRSZWZlcmVuY2VHZW5lcmF0b3IoY29uc3RhbnQuZnVuY3Rpb24pCiAgICBdOwogICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgZmllbGRzCiAgICAgICAgICAuYWRkKF9yZWlmaWVkVHlwZU5ld1J0aShJbnRlcmZhY2VUeXBlKGNscywgY29uc3RhbnQudHlwZUFyZ3VtZW50cykpKTsKICAgIH0gZWxzZSB7CiAgICAgIGZpZWxkcy5hZGQoX3JlaWZpZWRUeXBlQXJndW1lbnRzKGNvbnN0YW50LCBjb25zdGFudC50eXBlQXJndW1lbnRzKSk7CiAgICB9CiAgICBqc0FzdC5FeHByZXNzaW9uIGNvbnN0cnVjdG9yID0gX2VtaXR0ZXIuY29uc3RydWN0b3JBY2Nlc3MoY2xzKTsKICAgIHJldHVybiBuZXcganNBc3QuTmV3KGNvbnN0cnVjdG9yLCBmaWVsZHMpOwogIH0KCiAgU3RyaW5nIHN0cmlwQ29tbWVudHMoU3RyaW5nIHJhd0phdmFTY3JpcHQpIHsKICAgIHJldHVybiByYXdKYXZhU2NyaXB0LnJlcGxhY2VBbGwoQ09NTUVOVF9SRSwgJycpOwogIH0KCiAganNBc3QuRXhwcmVzc2lvbiBtYXliZUFkZFR5cGVBcmd1bWVudHMoCiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQsIEludGVyZmFjZVR5cGUgdHlwZSwganNBc3QuRXhwcmVzc2lvbiB2YWx1ZSkgewogICAgaWYgKHR5cGUgaXMgSW50ZXJmYWNlVHlwZSAmJgogICAgICAgICF0eXBlLnRyZWF0QXNSYXcgJiYKICAgICAgICBfcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyh0eXBlLmVsZW1lbnQpKSB7CiAgICAgIHJldHVybiBuZXcganNBc3QuQ2FsbCgKICAgICAgICAgIGdldEhlbHBlclByb3BlcnR5KF9jb21tb25FbGVtZW50cy5zZXRSdW50aW1lVHlwZUluZm8pLAogICAgICAgICAgW3ZhbHVlLCBfcmVpZmllZFR5cGVBcmd1bWVudHMoY29uc3RhbnQsIHR5cGUudHlwZUFyZ3VtZW50cyldKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gbWF5YmVBZGRMaXN0VHlwZUFyZ3VtZW50c05ld1J0aSgKICAgICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwgSW50ZXJmYWNlVHlwZSB0eXBlLCBqc0FzdC5FeHByZXNzaW9uIHZhbHVlKSB7CiAgICAvLyBMaXN0PFQ+IC0tPiBKU0FycmF5PFQ+CiAgICBpZiAodHlwZS5lbGVtZW50ICE9IF9jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3MpIHsKICAgICAgdHlwZSA9IEludGVyZmFjZVR5cGUoX2NvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcywgdHlwZS50eXBlQXJndW1lbnRzKTsKICAgIH0KICAgIGlmIChfcnRpTmVlZC5jbGFzc05lZWRzVHlwZUFyZ3VtZW50cyh0eXBlLmVsZW1lbnQpKSB7CiAgICAgIHJldHVybiBuZXcganNBc3QuQ2FsbCgKICAgICAgICAgIGdldEhlbHBlclByb3BlcnR5KF9jb21tb25FbGVtZW50cy5zZXRSdW50aW1lVHlwZUluZm8pLAogICAgICAgICAgW3ZhbHVlLCBfcmVpZmllZFR5cGVOZXdSdGkodHlwZSldKTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIGpzQXN0LkV4cHJlc3Npb24gX3JlaWZpZWRUeXBlQXJndW1lbnRzKAogICAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50LCBMaXN0PERhcnRUeXBlPiB0eXBlQXJndW1lbnRzKSB7CiAgICBqc0FzdC5FeHByZXNzaW9uIHVuZXhwZWN0ZWQoVHlwZVZhcmlhYmxlVHlwZSBfdmFyaWFibGUpIHsKICAgICAgVHlwZVZhcmlhYmxlVHlwZSB2YXJpYWJsZSA9IF92YXJpYWJsZTsKICAgICAgdGhyb3cgZmFpbGVkQXQoCiAgICAgICAgICBOT19MT0NBVElPTl9TUEFOTkFCTEUsCiAgICAgICAgICAiVW5leHBlY3RlZCB0eXBlIHZhcmlhYmxlICcke3ZhcmlhYmxlfSciCiAgICAgICAgICAiIGluIGNvbnN0YW50ICcke2NvbnN0YW50LnRvRGFydFRleHQoKX0nIik7CiAgICB9CgogICAgTGlzdDxqc0FzdC5FeHByZXNzaW9uPiBhcmd1bWVudHMgPSA8anNBc3QuRXhwcmVzc2lvbj5bXTsKICAgIGZvciAoRGFydFR5cGUgYXJndW1lbnQgaW4gdHlwZUFyZ3VtZW50cykgewogICAgICBhcmd1bWVudHMuYWRkKAogICAgICAgICAgX3J0aUVuY29kZXIuZ2V0VHlwZVJlcHJlc2VudGF0aW9uKF9lbWl0dGVyLCBhcmd1bWVudCwgdW5leHBlY3RlZCkpOwogICAgfQogICAgcmV0dXJuIG5ldyBqc0FzdC5BcnJheUluaXRpYWxpemVyKGFyZ3VtZW50cyk7CiAgfQoKICBqc0FzdC5FeHByZXNzaW9uIF9yZWlmaWVkVHlwZU5ld1J0aShEYXJ0VHlwZSB0eXBlKSB7CiAgICBhc3NlcnQoX29wdGlvbnMuZXhwZXJpbWVudE5ld1J0aSk7CiAgICBhc3NlcnQoIXR5cGUuY29udGFpbnNUeXBlVmFyaWFibGVzKTsKICAgIGpzQXN0LkV4cHJlc3Npb24gcmVjaXBlID0gX3J0aVJlY2lwZUVuY29kZXIuZW5jb2RlR3JvdW5kUmVjaXBlKAogICAgICAgIF9lbWl0dGVyLCBUeXBlRXhwcmVzc2lvblJlY2lwZSh0eXBlKSk7CiAgICByZXR1cm4ganMocicjKCMpJywgW2dldEhlbHBlclByb3BlcnR5KF9jb21tb25FbGVtZW50cy5maW5kVHlwZSksIHJlY2lwZV0pOwogIH0KCiAgQG92ZXJyaWRlCiAganNBc3QuRXhwcmVzc2lvbiB2aXNpdERlZmVycmVkR2xvYmFsKERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSBjb25zdGFudCwKICAgICAgW19dKSB7CiAgICByZXR1cm4gX2NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yKGNvbnN0YW50LnJlZmVyZW5jZWQpOwogIH0KfQqCCQBOTjwBGSI/IyQhISEgLC9BGjIdNCgBTgFJAUxBHT4iASkBTU8cNh0EATQoBAEMSCpCBAEMQCQEAQxGJAQBLx0qMDINAUsPBlE4QjssHCUmKDUnTEATBAEMPiZQTwdMS1EfLh9FMjc1Bk0kBjQEAQxEKRcYKxgsGQ1GMQYEAQxAJx0cGQ8dGQgNOQYEAUNBPwxEQAQBDFENKQQBDE4pBAEMRBoEAQxLEgwBDE0SDAEMTwwBDEcBDE8MAQxFAQxFAQxHAgE4BFBJKDdREiNIASkxIykpJxpBMgFRURYTHxwgFRgeGxUoHhgBDEA3KiJJNyVODUQGBAEMTA0uMypKEFAGATs1BwE6JzcPEk0IBgFNMgQBDEwNHzwyNB9EFAoBOjMrPUwINgYBJjo3KTsrPSEjCC8GATYqAT0BTEIiOzU/TRJRH0IgHz1GHz8tSR9AJw8YTggeCFEqUCoWTCodRgYBOic6DxJQCAYBTUQSBAFCMgQBDEA4ASUrAUYxASoBTVAPGEoNQC8YIzU4CAEdSQEdSAYEAQxOMUIEAQxOMTM/JkAGIzs6T0gmMUkICEMnNw8PUAgGLwQBDEsNFk44NQclDVANSwZELwQBLzUEASpMIRw6HUFJBhIEATRMHjhOBjodQS4GEgQBKj4+LRYhMzYGAT0vFU4GMgQBNycpRC9PBAEMTQ09BAIBNXBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvY29uc3RhbnRfZW1pdHRlci5kYXJ0S3Nka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvc3RhcnR1cF9lbWl0dGVyL21vZGVsX2VtaXR0ZXIuZGFydL7XLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmxpYnJhcnkgZGFydDJqcy5qc19lbWl0dGVyLnN0YXJ0dXBfZW1pdHRlci5tb2RlbF9lbWl0dGVyOwoKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cgSnNvbkVuY29kZXI7CmltcG9ydCAnZGFydDptYXRoJyBzaG93IFJhbmRvbTsKCmltcG9ydCAncGFja2FnZTpqc19ydW50aW1lL3NoYXJlZC9lbWJlZGRlZF9uYW1lcy5kYXJ0JwogICAgc2hvdwogICAgICAgIERFRkVSUkVEX0lOSVRJQUxJWkVELAogICAgICAgIERFRkVSUkVEX0xJQlJBUllfUEFSVFMsCiAgICAgICAgREVGRVJSRURfUEFSVF9VUklTLAogICAgICAgIERFRkVSUkVEX1BBUlRfSEFTSEVTLAogICAgICAgIEdFVF9UWVBFX0ZST01fTkFNRSwKICAgICAgICBJTklUSUFMSVpFX0xPQURFRF9IVU5LLAogICAgICAgIElOVEVSQ0VQVE9SU19CWV9UQUcsCiAgICAgICAgSVNfSFVOS19JTklUSUFMSVpFRCwKICAgICAgICBJU19IVU5LX0xPQURFRCwKICAgICAgICBKc0dldE5hbWUsCiAgICAgICAgTEVBRl9UQUdTLAogICAgICAgIE1BTkdMRURfR0xPQkFMX05BTUVTLAogICAgICAgIE1BTkdMRURfTkFNRVMsCiAgICAgICAgTUVUQURBVEEsCiAgICAgICAgTkFUSVZFX1NVUEVSQ0xBU1NfVEFHX05BTUUsCiAgICAgICAgUlRJX1VOSVZFUlNFLAogICAgICAgIFJ0aVVuaXZlcnNlRmllbGROYW1lcywKICAgICAgICBUWVBFX1RPX0lOVEVSQ0VQVE9SX01BUCwKICAgICAgICBUWVBFUzsKCmltcG9ydCAncGFja2FnZTpqc19hc3Qvc3JjL3ByZWNlZGVuY2UuZGFydCcgYXMganNfcHJlY2VkZW5jZTsKCmltcG9ydCAnLi4vLi4vLi4vY29tcGlsZXJfbmV3LmRhcnQnOwppbXBvcnQgJy4uLy4uL2NvbW1vbi5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9jb21tb24vdGFza3MuZGFydCc7CmltcG9ydCAnLi4vLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JwogICAgc2hvdyBDb25zdGFudFZhbHVlLCBGdW5jdGlvbkNvbnN0YW50VmFsdWUsIE51bGxDb25zdGFudFZhbHVlOwppbXBvcnQgJy4uLy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzLCBKRWxlbWVudEVudmlyb25tZW50OwppbXBvcnQgJy4uLy4uL2R1bXBfaW5mby5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi8uLi9oYXNoL3NoYTEuZGFydCcgc2hvdyBIYXNoZXI7CmltcG9ydCAnLi4vLi4vaW8vY29kZV9vdXRwdXQuZGFydCc7CmltcG9ydCAnLi4vLi4vaW8vbG9jYXRpb25fcHJvdmlkZXIuZGFydCcgc2hvdyBMb2NhdGlvbkNvbGxlY3RvcjsKaW1wb3J0ICcuLi8uLi9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydCc7CmltcG9ydCAnLi4vLi4vaW8vc291cmNlX21hcF9idWlsZGVyLmRhcnQnIHNob3cgU291cmNlTWFwQnVpbGRlcjsKaW1wb3J0ICcuLi8uLi9qcy9qcy5kYXJ0JyBhcyBqczsKaW1wb3J0ICcuLi8uLi9qc19iYWNrZW5kL2pzX2JhY2tlbmQuZGFydCcKICAgIHNob3cgTmFtZXIsIENvbnN0YW50RW1pdHRlciwgU3RyaW5nQmFja2VkTmFtZTsKaW1wb3J0ICcuLi8uLi9qc19iYWNrZW5kL2pzX2ludGVyb3BfYW5hbHlzaXMuZGFydCcgYXMganNJbnRlcm9wQW5hbHlzaXM7CmltcG9ydCAnLi4vLi4vanNfYmFja2VuZC9ydW50aW1lX3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19jb2RlZ2VuLmRhcnQnOwppbXBvcnQgJy4uLy4uL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19uZXcuZGFydCcKICAgIHNob3cgUmVjaXBlRW5jb2RlciwgUmVjaXBlRW5jb2RlckltcGwsIFJ1bGVzZXQsIFJ1bGVzZXRFbmNvZGVyOwppbXBvcnQgJy4uLy4uL29wdGlvbnMuZGFydCc7CmltcG9ydCAnLi4vLi4vdW5pdmVyc2UvY29kZWdlbl93b3JsZF9idWlsZGVyLmRhcnQnIHNob3cgQ29kZWdlbldvcmxkOwppbXBvcnQgJy4uLy4uL3dvcmxkLmRhcnQnOwppbXBvcnQgJy4uL2NvZGVfZW1pdHRlcl90YXNrLmRhcnQnOwppbXBvcnQgJy4uL2NvbnN0YW50X29yZGVyaW5nLmRhcnQnIHNob3cgQ29uc3RhbnRPcmRlcmluZzsKaW1wb3J0ICcuLi9oZWFkZXJzLmRhcnQnOwppbXBvcnQgJy4uL2pzX2VtaXR0ZXIuZGFydCcgc2hvdyBidWlsZFRlYXJPZmZDb2RlLCBOYXRpdmVHZW5lcmF0b3I7CmltcG9ydCAnLi4vbW9kZWwuZGFydCc7CgpwYXJ0ICdmcmFnbWVudF9lbWl0dGVyLmRhcnQnOwoKY2xhc3MgTW9kZWxFbWl0dGVyIHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgRGlhZ25vc3RpY1JlcG9ydGVyIF9yZXBvcnRlcjsKICBmaW5hbCBDb21waWxlck91dHB1dCBfb3V0cHV0UHJvdmlkZXI7CiAgZmluYWwgRHVtcEluZm9UYXNrIF9kdW1wSW5mb1Rhc2s7CiAgZmluYWwgTmFtZXIgX25hbWVyOwogIGZpbmFsIENvbXBpbGVyVGFzayBfdGFzazsKICBmaW5hbCBFbWl0dGVyIF9lbWl0dGVyOwogIENvbnN0YW50RW1pdHRlciBfY29uc3RhbnRFbWl0dGVyOwogIGZpbmFsIGJvb2wgX3Nob3VsZEdlbmVyYXRlU291cmNlTWFwOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgQ29uc3RhbnRPcmRlcmluZyBfY29uc3RhbnRPcmRlcmluZzsKICBmaW5hbCBTb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5IF9zb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5OwoKICAvLyBUaGUgZnVsbCBjb2RlIHRoYXQgaXMgd3JpdHRlbiB0byBlYWNoIGh1bmsgcGFydC1maWxlLgogIGZpbmFsIE1hcDxGcmFnbWVudCwgQ29kZU91dHB1dD4gb3V0cHV0QnVmZmVycyA9IHt9OwoKICBTZXQ8RnJhZ21lbnQ+IG9taXR0ZWRGcmFnbWVudHMgPSBTZXQoKTsKCiAgLy8vIEZvciBkZWZlcnJlZCBsb2FkaW5nIHdlIGNvbW11bmljYXRlIHRoZSBpbml0aWFsaXplcnMgdmlhIHRoaXMgZ2xvYmFsIHZhci4KICBzdGF0aWMgY29uc3QgU3RyaW5nIGRlZmVycmVkSW5pdGlhbGl6ZXJzR2xvYmFsID0KICAgICAgciIkX19kYXJ0X2RlZmVycmVkX2luaXRpYWxpemVyc19fIjsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBwYXJ0RXh0ZW5zaW9uID0gInBhcnQiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgZGVmZXJyZWRFeHRlbnNpb24gPSAicGFydC5qcyI7CgogIHN0YXRpYyBjb25zdCBTdHJpbmcgdHlwZU5hbWVQcm9wZXJ0eSA9IHIiYnVpbHRpbiRjbHMiOwoKICBNb2RlbEVtaXR0ZXIoCiAgICAgIHRoaXMuX29wdGlvbnMsCiAgICAgIHRoaXMuX3JlcG9ydGVyLAogICAgICB0aGlzLl9vdXRwdXRQcm92aWRlciwKICAgICAgdGhpcy5fZHVtcEluZm9UYXNrLAogICAgICB0aGlzLl9uYW1lciwKICAgICAgdGhpcy5fY2xvc2VkV29ybGQsCiAgICAgIHRoaXMuX3Rhc2ssCiAgICAgIHRoaXMuX2VtaXR0ZXIsCiAgICAgIHRoaXMuX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3ksCiAgICAgIFJ1bnRpbWVUeXBlc0VuY29kZXIgcnRpRW5jb2RlciwKICAgICAgUmVjaXBlRW5jb2RlciBydGlSZWNpcGVFbmNvZGVyLAogICAgICB0aGlzLl9zaG91bGRHZW5lcmF0ZVNvdXJjZU1hcCkKICAgICAgOiBfY29uc3RhbnRPcmRlcmluZyA9IG5ldyBDb25zdGFudE9yZGVyaW5nKF9jbG9zZWRXb3JsZC5zb3J0ZXIpIHsKICAgIHRoaXMuX2NvbnN0YW50RW1pdHRlciA9IG5ldyBDb25zdGFudEVtaXR0ZXIoCiAgICAgICAgX29wdGlvbnMsCiAgICAgICAgX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLAogICAgICAgIF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgX2Nsb3NlZFdvcmxkLnJ0aU5lZWQsCiAgICAgICAgcnRpRW5jb2RlciwKICAgICAgICBydGlSZWNpcGVFbmNvZGVyLAogICAgICAgIF9jbG9zZWRXb3JsZC5maWVsZEFuYWx5c2lzLAogICAgICAgIF9lbWl0dGVyLAogICAgICAgIHRoaXMuZ2VuZXJhdGVDb25zdGFudFJlZmVyZW5jZSwKICAgICAgICBjb25zdGFudExpc3RHZW5lcmF0b3IpOwogIH0KCiAganMuRXhwcmVzc2lvbiBjb25zdGFudExpc3RHZW5lcmF0b3IoanMuRXhwcmVzc2lvbiBhcnJheSkgewogICAgLy8gVE9ETyhmbG9pdHNjaCk6IHJlbW92ZSBoYXJkLWNvZGVkIG5hbWUuCiAgICByZXR1cm4ganMuanMoJ21ha2VDb25zdExpc3QoIyknLCBbYXJyYXldKTsKICB9CgogIGJvb2wgaXNDb25zdGFudElubGluZWRPckFscmVhZHlFbWl0dGVkKENvbnN0YW50VmFsdWUgY29uc3RhbnQpIHsKICAgIGlmIChjb25zdGFudC5pc0Z1bmN0aW9uKSByZXR1cm4gdHJ1ZTsgLy8gQWxyZWFkeSBlbWl0dGVkLgogICAgaWYgKGNvbnN0YW50LmlzUHJpbWl0aXZlKSByZXR1cm4gdHJ1ZTsgLy8gSW5saW5lZC4KICAgIGlmIChjb25zdGFudC5pc0R1bW15KSByZXR1cm4gdHJ1ZTsgLy8gSW5saW5lZC4KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vIFRPRE8oZmxvaXRzY2gpOiBjb3BpZWQgZnJvbSBPbGRFbWl0dGVyLiBBZGp1c3Qgb3Igc2hhcmUuCiAgaW50IGNvbXBhcmVDb25zdGFudHMoQ29uc3RhbnRWYWx1ZSBhLCBDb25zdGFudFZhbHVlIGIpIHsKICAgIC8vIElubGluZWQgY29uc3RhbnRzIGRvbid0IGFmZmVjdCB0aGUgb3JkZXIgYW5kIHNvbWV0aW1lcyBkb24ndCBldmVuIGhhdmUKICAgIC8vIG5hbWVzLgogICAgaW50IGNtcDEgPSBpc0NvbnN0YW50SW5saW5lZE9yQWxyZWFkeUVtaXR0ZWQoYSkgPyAwIDogMTsKICAgIGludCBjbXAyID0gaXNDb25zdGFudElubGluZWRPckFscmVhZHlFbWl0dGVkKGIpID8gMCA6IDE7CiAgICBpZiAoY21wMSArIGNtcDIgPCAyKSByZXR1cm4gY21wMSAtIGNtcDI7CgogICAgLy8gRW1pdCBjb25zdGFudCBpbnRlcmNlcHRvcnMgZmlyc3QuIENvbnN0YW50IGludGVyY2VwdG9ycyBmb3IgcHJpbWl0aXZlcwogICAgLy8gbWlnaHQgYmUgdXNlZCBieSBjb2RlIHRoYXQgYnVpbGRzIG90aGVyIGNvbnN0YW50cy4gIFNlZSBJc3N1ZSAxODE3My4KICAgIGlmIChhLmlzSW50ZXJjZXB0b3IgIT0gYi5pc0ludGVyY2VwdG9yKSB7CiAgICAgIHJldHVybiBhLmlzSW50ZXJjZXB0b3IgPyAtMSA6IDE7CiAgICB9CgogICAgLy8gU29ydGluZyBieSB0aGUgbG9uZyBuYW1lIGNsdXN0ZXJzIGNvbnN0YW50cyB3aXRoIHRoZSBzYW1lIGNvbnN0cnVjdG9yCiAgICAvLyB3aGljaCBjb21wcmVzc2VzIGEgdGlueSBiaXQgYmV0dGVyLgogICAgaW50IHIgPSBfbmFtZXIuY29uc3RhbnRMb25nTmFtZShhKS5jb21wYXJlVG8oX25hbWVyLmNvbnN0YW50TG9uZ05hbWUoYikpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CgogICAgLy8gUmVzb2x2ZSBjb2xsaXNpb25zIGluIHRoZSBsb25nIG5hbWUgYnkgdXNpbmcgYSBzdHJ1Y3R1cmFsIG9yZGVyLgogICAgcmV0dXJuIF9jb25zdGFudE9yZGVyaW5nLmNvbXBhcmUoYSwgYik7CiAgfQoKICBqcy5FeHByZXNzaW9uIGdlbmVyYXRlQ29uc3RhbnRSZWZlcmVuY2UoQ29uc3RhbnRWYWx1ZSB2YWx1ZSkgewogICAgaWYgKHZhbHVlLmlzRnVuY3Rpb24pIHsKICAgICAgRnVuY3Rpb25Db25zdGFudFZhbHVlIGZ1bmN0aW9uQ29uc3RhbnQgPSB2YWx1ZTsKICAgICAgcmV0dXJuIF9lbWl0dGVyLnN0YXRpY0Nsb3N1cmVBY2Nlc3MoZnVuY3Rpb25Db25zdGFudC5lbGVtZW50KTsKICAgIH0KCiAgICAvLyBXZSBhcmUgb25seSBpbnRlcmVzdGVkIGluIHRoZSAiaXNJbmxpbmVkIiBwYXJ0LCBidXQgaXQgZG9lcyBub3QgaHVydCB0bwogICAgLy8gdGVzdCBmb3IgdGhlIG90aGVyIHByZWRpY2F0ZXMuCiAgICBpZiAoaXNDb25zdGFudElubGluZWRPckFscmVhZHlFbWl0dGVkKHZhbHVlKSkgewogICAgICByZXR1cm4gX2NvbnN0YW50RW1pdHRlci5nZW5lcmF0ZSh2YWx1ZSk7CiAgICB9CiAgICByZXR1cm4ganMuanMoJyMuIycsCiAgICAgICAgW19uYW1lci5nbG9iYWxPYmplY3RGb3JDb25zdGFudCh2YWx1ZSksIF9uYW1lci5jb25zdGFudE5hbWUodmFsdWUpXSk7CiAgfQoKICBpbnQgZW1pdFByb2dyYW0oUHJvZ3JhbSBwcm9ncmFtLCBDb2RlZ2VuV29ybGQgY29kZWdlbldvcmxkKSB7CiAgICBNYWluRnJhZ21lbnQgbWFpbkZyYWdtZW50ID0gcHJvZ3JhbS5mcmFnbWVudHMuZmlyc3Q7CiAgICBMaXN0PERlZmVycmVkRnJhZ21lbnQ+IGRlZmVycmVkRnJhZ21lbnRzID0KICAgICAgICBuZXcgTGlzdDxEZWZlcnJlZEZyYWdtZW50Pi5mcm9tKHByb2dyYW0uZGVmZXJyZWRGcmFnbWVudHMpOwoKICAgIEZyYWdtZW50RW1pdHRlciBmcmFnbWVudEVtaXR0ZXIgPSBuZXcgRnJhZ21lbnRFbWl0dGVyKAogICAgICAgIF9vcHRpb25zLAogICAgICAgIF9kdW1wSW5mb1Rhc2ssCiAgICAgICAgX25hbWVyLAogICAgICAgIF9lbWl0dGVyLAogICAgICAgIF9jb25zdGFudEVtaXR0ZXIsCiAgICAgICAgdGhpcywKICAgICAgICBfY2xvc2VkV29ybGQsCiAgICAgICAgY29kZWdlbldvcmxkKTsKCiAgICB2YXIgZGVmZXJyZWRMb2FkaW5nU3RhdGUgPSBuZXcgRGVmZXJyZWRMb2FkaW5nU3RhdGUoKTsKICAgIGpzLlN0YXRlbWVudCBtYWluQ29kZSA9CiAgICAgICAgZnJhZ21lbnRFbWl0dGVyLmVtaXRNYWluRnJhZ21lbnQocHJvZ3JhbSwgZGVmZXJyZWRMb2FkaW5nU3RhdGUpOwoKICAgIE1hcDxEZWZlcnJlZEZyYWdtZW50LCBqcy5FeHByZXNzaW9uPiBkZWZlcnJlZEZyYWdtZW50c0NvZGUgPSB7fTsKCiAgICBmb3IgKERlZmVycmVkRnJhZ21lbnQgZnJhZ21lbnQgaW4gZGVmZXJyZWRGcmFnbWVudHMpIHsKICAgICAganMuRXhwcmVzc2lvbiB0eXBlcyA9CiAgICAgICAgICBwcm9ncmFtLm1ldGFkYXRhVHlwZXNGb3JPdXRwdXRVbml0KGZyYWdtZW50Lm91dHB1dFVuaXQpOwogICAgICBqcy5FeHByZXNzaW9uIGZyYWdtZW50Q29kZSA9IGZyYWdtZW50RW1pdHRlci5lbWl0RGVmZXJyZWRGcmFnbWVudCgKICAgICAgICAgIGZyYWdtZW50LCB0eXBlcywgcHJvZ3JhbS5ob2xkZXJzKTsKICAgICAgaWYgKGZyYWdtZW50Q29kZSAhPSBudWxsKSB7CiAgICAgICAgZGVmZXJyZWRGcmFnbWVudHNDb2RlW2ZyYWdtZW50XSA9IGZyYWdtZW50Q29kZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBvbWl0dGVkRnJhZ21lbnRzLmFkZChmcmFnbWVudCk7CiAgICAgIH0KICAgIH0KCiAgICBqcy5Ub2tlbkNvdW50ZXIgY291bnRlciA9IG5ldyBqcy5Ub2tlbkNvdW50ZXIoKTsKICAgIGRlZmVycmVkRnJhZ21lbnRzQ29kZS52YWx1ZXMuZm9yRWFjaChjb3VudGVyLmNvdW50VG9rZW5zKTsKICAgIGNvdW50ZXIuY291bnRUb2tlbnMobWFpbkNvZGUpOwoKICAgIHByb2dyYW0uZmluYWxpemVycy5mb3JFYWNoKChqcy5Ub2tlbkZpbmFsaXplciBmKSA9PiBmLmZpbmFsaXplVG9rZW5zKCkpOwoKICAgIC8vIFRPRE8oc3JhKTogVGhpcyBpcyB3aGVyZSB3ZSBrbm93IGlmIHRoZSB0eXBlcyAoYW5kIHBvdGVudGlhbGx5IG90aGVyCiAgICAvLyBkZWZlcnJlZCBBU1RzIGluc2lkZSB0aGUgcGFydHMpIGhhdmUgYW55IGNvbnRlbnRzLiBXZSBzaG91bGQgd2FpdCB1bnRpbAogICAgLy8gdGhpcyBwb2ludCB0byBkZWNpZGUgaWYgYSBwYXJ0IGlzIGVtcHR5LgoKICAgIE1hcDxEZWZlcnJlZEZyYWdtZW50LCBTdHJpbmc+IGh1bmtIYXNoZXMgPQogICAgICAgIF90YXNrLm1lYXN1cmVTdWJ0YXNrKCd3cml0ZSBmcmFnbWVudHMnLCAoKSB7CiAgICAgIHJldHVybiB3cml0ZURlZmVycmVkRnJhZ21lbnRzKGRlZmVycmVkRnJhZ21lbnRzQ29kZSk7CiAgICB9KTsKCiAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIHdyaXR0ZW4gdGhlIGRlZmVycmVkIGh1bmtzLCB3ZSBjYW4gY3JlYXRlIHRoZSBkZWZlcnJlZAogICAgLy8gbG9hZGluZyBkYXRhLgogICAgZnJhZ21lbnRFbWl0dGVyLmZpbmFsaXplRGVmZXJyZWRMb2FkaW5nRGF0YSgKICAgICAgICBwcm9ncmFtLmxvYWRNYXAsIGh1bmtIYXNoZXMsIGRlZmVycmVkTG9hZGluZ1N0YXRlKTsKCiAgICBfdGFzay5tZWFzdXJlU3VidGFzaygnd3JpdGUgZnJhZ21lbnRzJywgKCkgewogICAgICB3cml0ZU1haW5GcmFnbWVudChtYWluRnJhZ21lbnQsIG1haW5Db2RlLAogICAgICAgICAgaXNTcGxpdDogcHJvZ3JhbS5kZWZlcnJlZEZyYWdtZW50cy5pc05vdEVtcHR5IHx8CiAgICAgICAgICAgICAgcHJvZ3JhbS5oYXNTb2Z0RGVmZXJyZWRDbGFzc2VzIHx8CiAgICAgICAgICAgICAgX29wdGlvbnMuZXhwZXJpbWVudGFsVHJhY2tBbGxvY2F0aW9ucyk7CiAgICB9KTsKCiAgICBpZiAoX2Nsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZS5yZXF1aXJlc1ByZWFtYmxlICYmCiAgICAgICAgIV9jbG9zZWRXb3JsZC5iYWNrZW5kVXNhZ2UuaXNIdG1sTG9hZGVkKSB7CiAgICAgIF9yZXBvcnRlci5yZXBvcnRIaW50TWVzc2FnZShOT19MT0NBVElPTl9TUEFOTkFCTEUsIE1lc3NhZ2VLaW5kLlBSRUFNQkxFKTsKICAgIH0KCiAgICBpZiAoX29wdGlvbnMuZGVmZXJyZWRNYXBVcmkgIT0gbnVsbCkgewogICAgICB3cml0ZURlZmVycmVkTWFwKCk7CiAgICB9CgogICAgLy8gUmV0dXJuIHRoZSB0b3RhbCBwcm9ncmFtIHNpemUuCiAgICByZXR1cm4gb3V0cHV0QnVmZmVycy52YWx1ZXMuZm9sZCgwLCAoYSwgYikgPT4gYSArIGIubGVuZ3RoKTsKICB9CgogIC8vLyBHZW5lcmF0ZXMgYSBzaW1wbGUgaGVhZGVyIHRoYXQgcHJvdmlkZXMgdGhlIGNvbXBpbGVyJ3MgYnVpbGQgaWQuCiAganMuQ29tbWVudCBidWlsZEdlbmVyYXRlZEJ5KCkgewogICAgU3RyaW5nQnVmZmVyIGZsYXZvciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGZsYXZvci53cml0ZSgnZmFzdCBzdGFydHVwIGVtaXR0ZXInKTsKICAgIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFJlbW92ZSB0aGlzIGZsYXZvci4KICAgIGZsYXZvci53cml0ZSgnLCBzdHJvbmcnKTsKICAgIGlmIChfb3B0aW9ucy50cnVzdFByaW1pdGl2ZXMpIGZsYXZvci53cml0ZSgnLCB0cnVzdCBwcmltaXRpdmVzJyk7CiAgICBpZiAoX29wdGlvbnMub21pdEltcGxpY2l0Q2hlY2tzKSBmbGF2b3Iud3JpdGUoJywgb21pdCBjaGVja3MnKTsKICAgIGlmIChfb3B0aW9ucy5sYXhSdW50aW1lVHlwZVRvU3RyaW5nKSB7CiAgICAgIGZsYXZvci53cml0ZSgnLCBsYXggcnVudGltZSB0eXBlJyk7CiAgICB9CiAgICBpZiAoX29wdGlvbnMudXNlQ29udGVudFNlY3VyaXR5UG9saWN5KSBmbGF2b3Iud3JpdGUoJywgQ1NQJyk7CiAgICByZXR1cm4gbmV3IGpzLkNvbW1lbnQoZ2VuZXJhdGVkQnkoX29wdGlvbnMsIGZsYXZvcjogJyRmbGF2b3InKSk7CiAgfQoKICAvLy8gV3JpdGVzIGFsbCBkZWZlcnJlZCBmcmFnbWVudCdzIGNvZGUgaW50byBmaWxlcy4KICAvLy8KICAvLy8gUmV0dXJucyBhIG1hcCBmcm9tIGZyYWdtZW50IHRvIGl0cyBoYXNoY29kZSAoYXMgdXNlZCBmb3IgdGhlIGRlZmVycmVkCiAgLy8vIGxpYnJhcnkgY29kZSkuCiAgLy8vCiAgLy8vIFVwZGF0ZXMgdGhlIHNoYXJlZCBbb3V0cHV0QnVmZmVyc10gZmllbGQgd2l0aCB0aGUgb3V0cHV0LgogIE1hcDxEZWZlcnJlZEZyYWdtZW50LCBTdHJpbmc+IHdyaXRlRGVmZXJyZWRGcmFnbWVudHMoCiAgICAgIE1hcDxEZWZlcnJlZEZyYWdtZW50LCBqcy5FeHByZXNzaW9uPiBmcmFnbWVudHNDb2RlKSB7CiAgICBNYXA8RGVmZXJyZWRGcmFnbWVudCwgU3RyaW5nPiBodW5rSGFzaGVzID0ge307CgogICAgZnJhZ21lbnRzQ29kZS5mb3JFYWNoKChEZWZlcnJlZEZyYWdtZW50IGZyYWdtZW50LCBqcy5FeHByZXNzaW9uIGNvZGUpIHsKICAgICAgaHVua0hhc2hlc1tmcmFnbWVudF0gPSB3cml0ZURlZmVycmVkRnJhZ21lbnQoZnJhZ21lbnQsIGNvZGUpOwogICAgfSk7CgogICAgcmV0dXJuIGh1bmtIYXNoZXM7CiAgfQoKICBqcy5TdGF0ZW1lbnQgYnVpbGREZWZlcnJlZEluaXRpYWxpemVyR2xvYmFsKCkgewogICAgcmV0dXJuIGpzLmpzLnN0YXRlbWVudCgKICAgICAgICAnc2VsZi4jZGVmZXJyZWRJbml0aWFsaXplcnMgPSAnCiAgICAgICAgJ3NlbGYuI2RlZmVycmVkSW5pdGlhbGl6ZXJzIHx8IE9iamVjdC5jcmVhdGUobnVsbCk7JywKICAgICAgICB7J2RlZmVycmVkSW5pdGlhbGl6ZXJzJzogZGVmZXJyZWRJbml0aWFsaXplcnNHbG9iYWx9KTsKICB9CgogIC8vIFdyaXRlcyB0aGUgZ2l2ZW4gW2ZyYWdtZW50XSdzIFtjb2RlXSBpbnRvIGEgZmlsZS4KICAvLwogIC8vIFVwZGF0ZXMgdGhlIHNoYXJlZCBbb3V0cHV0QnVmZmVyc10gZmllbGQgd2l0aCB0aGUgb3V0cHV0LgogIHZvaWQgd3JpdGVNYWluRnJhZ21lbnQoTWFpbkZyYWdtZW50IGZyYWdtZW50LCBqcy5TdGF0ZW1lbnQgY29kZSwKICAgICAge2Jvb2wgaXNTcGxpdH0pIHsKICAgIExvY2F0aW9uQ29sbGVjdG9yIGxvY2F0aW9uQ29sbGVjdG9yOwogICAgTGlzdDxDb2RlT3V0cHV0TGlzdGVuZXI+IGNvZGVPdXRwdXRMaXN0ZW5lcnM7CiAgICBpZiAoX3Nob3VsZEdlbmVyYXRlU291cmNlTWFwKSB7CiAgICAgIF90YXNrLm1lYXN1cmVTdWJ0YXNrKCdzb3VyY2UtbWFwcycsICgpIHsKICAgICAgICBsb2NhdGlvbkNvbGxlY3RvciA9IG5ldyBMb2NhdGlvbkNvbGxlY3RvcigpOwogICAgICAgIGNvZGVPdXRwdXRMaXN0ZW5lcnMgPSA8Q29kZU91dHB1dExpc3RlbmVyPltsb2NhdGlvbkNvbGxlY3Rvcl07CiAgICAgIH0pOwogICAgfQoKICAgIENvZGVPdXRwdXQgbWFpbk91dHB1dCA9IG5ldyBTdHJlYW1Db2RlT3V0cHV0KAogICAgICAgIF9vdXRwdXRQcm92aWRlci5jcmVhdGVPdXRwdXRTaW5rKCcnLCAnanMnLCBPdXRwdXRUeXBlLmpzKSwKICAgICAgICBjb2RlT3V0cHV0TGlzdGVuZXJzKTsKICAgIG91dHB1dEJ1ZmZlcnNbZnJhZ21lbnRdID0gbWFpbk91dHB1dDsKCiAgICBqcy5Qcm9ncmFtIHByb2dyYW0gPSBuZXcganMuUHJvZ3JhbShbCiAgICAgIGJ1aWxkR2VuZXJhdGVkQnkoKSwKICAgICAgbmV3IGpzLkNvbW1lbnQoSE9PS1NfQVBJX1VTQUdFKSwKICAgICAgaXNTcGxpdCA/IGJ1aWxkRGVmZXJyZWRJbml0aWFsaXplckdsb2JhbCgpIDogbmV3IGpzLkJsb2NrLmVtcHR5KCksCiAgICAgIGNvZGUKICAgIF0pOwoKICAgIENvZGVCdWZmZXIgYnVmZmVyID0ganMuY3JlYXRlQ29kZUJ1ZmZlcigKICAgICAgICBwcm9ncmFtLCBfb3B0aW9ucywgX3NvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3ksCiAgICAgICAgbW9uaXRvcjogX2R1bXBJbmZvVGFzayk7CiAgICBfdGFzay5tZWFzdXJlU3VidGFzaygnZW1pdCBidWZmZXJzJywgKCkgewogICAgICBtYWluT3V0cHV0LmFkZEJ1ZmZlcihidWZmZXIpOwogICAgfSk7CgogICAgaWYgKF9zaG91bGRHZW5lcmF0ZVNvdXJjZU1hcCkgewogICAgICBfdGFzay5tZWFzdXJlU3VidGFzaygnc291cmNlLW1hcHMnLCAoKSB7CiAgICAgICAgbWFpbk91dHB1dC5hZGQoU291cmNlTWFwQnVpbGRlci5nZW5lcmF0ZVNvdXJjZU1hcFRhZygKICAgICAgICAgICAgX29wdGlvbnMuc291cmNlTWFwVXJpLCBfb3B0aW9ucy5vdXRwdXRVcmkpKTsKICAgICAgfSk7CiAgICB9CgogICAgbWFpbk91dHB1dC5jbG9zZSgpOwoKICAgIGlmIChfc2hvdWxkR2VuZXJhdGVTb3VyY2VNYXApIHsKICAgICAgX3Rhc2subWVhc3VyZVN1YnRhc2soJ3NvdXJjZS1tYXBzJywgKCkgewogICAgICAgIFNvdXJjZU1hcEJ1aWxkZXIub3V0cHV0U291cmNlTWFwKAogICAgICAgICAgICBtYWluT3V0cHV0LAogICAgICAgICAgICBsb2NhdGlvbkNvbGxlY3RvciwKICAgICAgICAgICAgX25hbWVyLmNyZWF0ZU1pbmlmaWVkR2xvYmFsTmFtZU1hcCgpLAogICAgICAgICAgICBfbmFtZXIuY3JlYXRlTWluaWZpZWRJbnN0YW5jZU5hbWVNYXAoKSwKICAgICAgICAgICAgJycsCiAgICAgICAgICAgIF9vcHRpb25zLnNvdXJjZU1hcFVyaSwKICAgICAgICAgICAgX29wdGlvbnMub3V0cHV0VXJpLAogICAgICAgICAgICBfb3V0cHV0UHJvdmlkZXIpOwogICAgICB9KTsKICAgIH0KICB9CgogIC8vIFdyaXRlcyB0aGUgZ2l2ZW4gW2ZyYWdtZW50XSdzIFtjb2RlXSBpbnRvIGEgZmlsZS4KICAvLwogIC8vIFJldHVybnMgdGhlIGRlZmVycmVkIGZyYWdtZW50J3MgaGFzaC4KICAvLwogIC8vIFVwZGF0ZXMgdGhlIHNoYXJlZCBbb3V0cHV0QnVmZmVyc10gZmllbGQgd2l0aCB0aGUgb3V0cHV0LgogIFN0cmluZyB3cml0ZURlZmVycmVkRnJhZ21lbnQoRGVmZXJyZWRGcmFnbWVudCBmcmFnbWVudCwganMuRXhwcmVzc2lvbiBjb2RlKSB7CiAgICBMaXN0PENvZGVPdXRwdXRMaXN0ZW5lcj4gb3V0cHV0TGlzdGVuZXJzID0gW107CiAgICBIYXNoZXIgaGFzaGVyID0gbmV3IEhhc2hlcigpOwogICAgb3V0cHV0TGlzdGVuZXJzLmFkZChoYXNoZXIpOwoKICAgIExvY2F0aW9uQ29sbGVjdG9yIGxvY2F0aW9uQ29sbGVjdG9yOwogICAgaWYgKF9zaG91bGRHZW5lcmF0ZVNvdXJjZU1hcCkgewogICAgICBfdGFzay5tZWFzdXJlU3VidGFzaygnc291cmNlLW1hcHMnLCAoKSB7CiAgICAgICAgbG9jYXRpb25Db2xsZWN0b3IgPSBuZXcgTG9jYXRpb25Db2xsZWN0b3IoKTsKICAgICAgICBvdXRwdXRMaXN0ZW5lcnMuYWRkKGxvY2F0aW9uQ29sbGVjdG9yKTsKICAgICAgfSk7CiAgICB9CgogICAgU3RyaW5nIGh1bmtQcmVmaXggPSBmcmFnbWVudC5vdXRwdXRGaWxlTmFtZTsKCiAgICBDb2RlT3V0cHV0IG91dHB1dCA9IG5ldyBTdHJlYW1Db2RlT3V0cHV0KAogICAgICAgIF9vdXRwdXRQcm92aWRlci5jcmVhdGVPdXRwdXRTaW5rKAogICAgICAgICAgICBodW5rUHJlZml4LCBkZWZlcnJlZEV4dGVuc2lvbiwgT3V0cHV0VHlwZS5qc1BhcnQpLAogICAgICAgIG91dHB1dExpc3RlbmVycyk7CgogICAgb3V0cHV0QnVmZmVyc1tmcmFnbWVudF0gPSBvdXRwdXQ7CgogICAgLy8gVGhlIFtjb2RlXSBjb250YWlucyB0aGUgZnVuY3Rpb24gdGhhdCBtdXN0IGJlIGludm9rZWQgd2hlbiB0aGUgZGVmZXJyZWQKICAgIC8vIGh1bmsgaXMgbG9hZGVkLgogICAgLy8gVGhhdCBmdW5jdGlvbiBtdXN0IGJlIGluIGEgbWFwIGZyb20gaXRzIGhhc2hjb2RlIHRvIHRoZSBmdW5jdGlvbi4gU2luY2UKICAgIC8vIHdlIGRvbid0IGtub3cgdGhlIGhhc2ggYmVmb3JlIHdlIGFjdHVhbGx5IGVtaXQgdGhlIGNvZGUgd2Ugc3RvcmUgdGhlCiAgICAvLyBmdW5jdGlvbiBpbiBhIHRlbXBvcmFyeSBmaWVsZCBmaXJzdDoKICAgIC8vCiAgICAvLyAgIGRlZmVycmVkSW5pdGlhbGl6ZXIuY3VycmVudCA9IDxwcmV0dHktcHJpbnRlZCBjb2RlPjsKICAgIC8vICAgZGVmZXJyZWRJbml0aWFsaXplcls8aGFzaD5dID0gZGVmZXJyZWRJbml0aWFsaXplci5jdXJyZW50OwoKICAgIGpzLlByb2dyYW0gcHJvZ3JhbSA9IG5ldyBqcy5Qcm9ncmFtKFsKICAgICAgYnVpbGRHZW5lcmF0ZWRCeSgpLAogICAgICBidWlsZERlZmVycmVkSW5pdGlhbGl6ZXJHbG9iYWwoKSwKICAgICAganMuanMuc3RhdGVtZW50KCckZGVmZXJyZWRJbml0aWFsaXplcnNHbG9iYWwuY3VycmVudCA9ICMnLCBjb2RlKQogICAgXSk7CgogICAgQ29kZUJ1ZmZlciBidWZmZXIgPSBqcy5jcmVhdGVDb2RlQnVmZmVyKAogICAgICAgIHByb2dyYW0sIF9vcHRpb25zLCBfc291cmNlSW5mb3JtYXRpb25TdHJhdGVneSwKICAgICAgICBtb25pdG9yOiBfZHVtcEluZm9UYXNrKTsKICAgIF90YXNrLm1lYXN1cmVTdWJ0YXNrKCdlbWl0IGJ1ZmZlcnMnLCAoKSB7CiAgICAgIG91dHB1dC5hZGRCdWZmZXIoYnVmZmVyKTsKICAgIH0pOwoKICAgIC8vIE1ha2UgYSB1bmlxdWUgaGFzaCBvZiB0aGUgY29kZSAoYmVmb3JlIHRoZSBzb3VyY2VtYXBzIGFyZSBhZGRlZCkKICAgIC8vIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHJldHJpZXZlIHRoZSBpbml0aWFsaXppbmcgZnVuY3Rpb24gZnJvbSB0aGUgZ2xvYmFsCiAgICAvLyB2YXJpYWJsZS4KICAgIFN0cmluZyBoYXNoID0gaGFzaGVyLmdldEhhc2goKTsKCiAgICAvLyBOb3cgd2UgY29weSB0aGUgZGVmZXJyZWRJbml0aWFsaXplci5jdXJyZW50IGludG8gaXRzIGNvcnJlY3QgaGFzaC4KICAgIG91dHB1dC5hZGQoJ1xuJHtkZWZlcnJlZEluaXRpYWxpemVyc0dsb2JhbH1bIiRoYXNoIl0gPSAnCiAgICAgICAgJyR7ZGVmZXJyZWRJbml0aWFsaXplcnNHbG9iYWx9LmN1cnJlbnQnKTsKCiAgICBpZiAoX3Nob3VsZEdlbmVyYXRlU291cmNlTWFwKSB7CiAgICAgIF90YXNrLm1lYXN1cmVTdWJ0YXNrKCdzb3VyY2UtbWFwcycsICgpIHsKICAgICAgICBVcmkgbWFwVXJpLCBwYXJ0VXJpOwogICAgICAgIFVyaSBzb3VyY2VNYXBVcmkgPSBfb3B0aW9ucy5zb3VyY2VNYXBVcmk7CiAgICAgICAgVXJpIG91dHB1dFVyaSA9IF9vcHRpb25zLm91dHB1dFVyaTsKICAgICAgICBTdHJpbmcgcGFydE5hbWUgPSAiJGh1bmtQcmVmaXguJHBhcnRFeHRlbnNpb24iOwogICAgICAgIFN0cmluZyBodW5rRmlsZU5hbWUgPSAiJGh1bmtQcmVmaXguJGRlZmVycmVkRXh0ZW5zaW9uIjsKCiAgICAgICAgaWYgKHNvdXJjZU1hcFVyaSAhPSBudWxsKSB7CiAgICAgICAgICBTdHJpbmcgbWFwRmlsZU5hbWUgPSBodW5rRmlsZU5hbWUgKyAiLm1hcCI7CiAgICAgICAgICBMaXN0PFN0cmluZz4gbWFwU2VnbWVudHMgPSBzb3VyY2VNYXBVcmkucGF0aFNlZ21lbnRzLnRvTGlzdCgpOwogICAgICAgICAgbWFwU2VnbWVudHNbbWFwU2VnbWVudHMubGVuZ3RoIC0gMV0gPSBtYXBGaWxlTmFtZTsKICAgICAgICAgIG1hcFVyaSA9IF9vcHRpb25zLnNvdXJjZU1hcFVyaS5yZXBsYWNlKHBhdGhTZWdtZW50czogbWFwU2VnbWVudHMpOwogICAgICAgIH0KCiAgICAgICAgaWYgKG91dHB1dFVyaSAhPSBudWxsKSB7CiAgICAgICAgICBMaXN0PFN0cmluZz4gcGFydFNlZ21lbnRzID0gb3V0cHV0VXJpLnBhdGhTZWdtZW50cy50b0xpc3QoKTsKICAgICAgICAgIHBhcnRTZWdtZW50c1twYXJ0U2VnbWVudHMubGVuZ3RoIC0gMV0gPSBodW5rRmlsZU5hbWU7CiAgICAgICAgICBwYXJ0VXJpID0gX29wdGlvbnMub3V0cHV0VXJpLnJlcGxhY2UocGF0aFNlZ21lbnRzOiBwYXJ0U2VnbWVudHMpOwogICAgICAgIH0KCiAgICAgICAgb3V0cHV0LmFkZChTb3VyY2VNYXBCdWlsZGVyLmdlbmVyYXRlU291cmNlTWFwVGFnKG1hcFVyaSwgcGFydFVyaSkpOwogICAgICAgIG91dHB1dC5jbG9zZSgpOwogICAgICAgIFNvdXJjZU1hcEJ1aWxkZXIub3V0cHV0U291cmNlTWFwKG91dHB1dCwgbG9jYXRpb25Db2xsZWN0b3IsIHt9LCB7fSwKICAgICAgICAgICAgcGFydE5hbWUsIG1hcFVyaSwgcGFydFVyaSwgX291dHB1dFByb3ZpZGVyKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBvdXRwdXQuY2xvc2UoKTsKICAgIH0KCiAgICByZXR1cm4gaGFzaDsKICB9CgogIC8vLyBXcml0ZXMgYSBtYXBwaW5nIGZyb20gbGlicmFyeS1uYW1lIHRvIGh1bmsgZmlsZXMuCiAgLy8vCiAgLy8vIFRoZSBvdXRwdXQgaXMgd3JpdHRlbiBpbnRvIGEgc2VwYXJhdGUgZmlsZSB0aGF0IGNhbiBiZSB1c2VkIGJ5IG91dHNpZGUKICAvLy8gdG9vbHMuCiAgdm9pZCB3cml0ZURlZmVycmVkTWFwKCkgewogICAgTWFwPFN0cmluZywgZHluYW1pYz4gbWFwcGluZyA9IHt9OwogICAgLy8gSnNvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbW1lbnRzLCBzbyB3ZSBlbWJlZCB0aGUgZXhwbGFuYXRpb24gaW4gdGhlCiAgICAvLyBkYXRhLgogICAgbWFwcGluZ1siX2NvbW1lbnQiXSA9ICJUaGlzIG1hcHBpbmcgc2hvd3Mgd2hpY2ggY29tcGlsZWQgYC5qc2AgZmlsZXMgYXJlICIKICAgICAgICAibmVlZGVkIGZvciBhIGdpdmVuIGRlZmVycmVkIGxpYnJhcnkgaW1wb3J0LiI7CiAgICBtYXBwaW5nLmFkZEFsbChfY2xvc2VkV29ybGQub3V0cHV0VW5pdERhdGEuY29tcHV0ZURlZmVycmVkTWFwKAogICAgICAgIF9vcHRpb25zLCBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50LAogICAgICAgIG9taXR0ZWRVbml0czoKICAgICAgICAgICAgb21pdHRlZEZyYWdtZW50cy5tYXAoKGZyYWdtZW50KSA9PiBmcmFnbWVudC5vdXRwdXRVbml0KS50b1NldCgpKSk7CiAgICBfb3V0cHV0UHJvdmlkZXIuY3JlYXRlT3V0cHV0U2luaygKICAgICAgICBfb3B0aW9ucy5kZWZlcnJlZE1hcFVyaS5wYXRoLCAnJywgT3V0cHV0VHlwZS5kZWZlcnJlZE1hcCkKICAgICAgLi5hZGQoY29uc3QgSnNvbkVuY29kZXIud2l0aEluZGVudCgiICAiKS5jb252ZXJ0KG1hcHBpbmcpKQogICAgICAuLmNsb3NlKCk7CiAgfQp9CoHFAE5OPAE6ASggATcJHiAcHhwgHR0YExMeFxIkFh8hDwE+ASUcIiVCTh8nJCskQStBISozSS42MUQdRhskOhpEGAEeARUiJigkFhwaJCcjLD4BOzYBKgFQMyoBLjUBOQEQFRYcGhMZEhUnJiYlSDESJSkeFBokEiggBAE9Ly8EAUM+NzMSBAE+O04OPT0tAU5MLicGAU0rThoBSCwEAUEcNkUGAU8mNC8GGE4EAUA5L0QBOxIXEBIaDhYXATscSQFFATscQ0ktIjgPKAgGATU/IwFNAUxPMAEvNTwIAU8VMTwBMTA7MDYIATYzUAYBKxoGASZBBAFHIi4qMB5GRCsqBkJFBAE2BkwVBkA4PDMBTEQIARcEATIcKD4/BAE3BT9DGCkyJC81RwoGATJDHioBKhonSQsIAS03IS4kCAEkLz45CgYBGAEkLyoYHzI0ECMgHgoGBAE3BSsFP1AzIiEBKSQvNTAKBgExAS4qPxoBJgFPF09MLAc+RAEqGihHCAEtNyEuIAgBSE8RJAFKPTIBJC8dMiw4QAEkNkk9TQoBIUdATAoBTBhMOQoNFgYBEQQBOAZNDRwnSg1PN0MzFk8mQkERBAIBQnBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvc3RhcnR1cF9lbWl0dGVyL21vZGVsX2VtaXR0ZXIuZGFydE5zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9qc19lbWl0dGVyL3N0YXJ0dXBfZW1pdHRlci9mcmFnbWVudF9lbWl0dGVyLmRhcnTAATYxLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydDJqcy5qc19lbWl0dGVyLnN0YXJ0dXBfZW1pdHRlci5tb2RlbF9lbWl0dGVyOwoKLy8vIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IHN0b3JlcyB0aGUgdGVhci1vZmYgZ2V0dGVyIG9uIGEgc3RhdGljCi8vLyBmdW5jdGlvbi4KLy8vCi8vLyBUaGlzIHByb3BlcnR5IGlzIG9ubHkgdXNlZCB3aGVuIGlzb2xhdGVzIGFyZSB1c2VkLgovLy8KLy8vIFdoZW4gc2VyaWFsaXppbmcgc3RhdGljIGZ1bmN0aW9ucyB3ZSB0cmFuc21pdCB0aGUKLy8vIG5hbWUgb2YgdGhlIHN0YXRpYyBmdW5jdGlvbiwgYnV0IG5vdCB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24ncyBnZXR0ZXIuIFdlCi8vLyBzdG9yZSB0aGUgZ2V0dGVyLWZ1bmN0aW9uIG9uIHRoZSBzdGF0aWMgZnVuY3Rpb24gaXRzZWxmLCB3aGljaCBhbGxvd3MgdXMgdG8KLy8vIGZpbmQgaXQgZWFzaWx5Lgpjb25zdCBTdHJpbmcgdGVhck9mZlByb3BlcnR5TmFtZSA9IHInJHRlYXJPZmYnOwoKLy8vIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0aGF0IHN0b3JlcyB0aGUgbGlzdCBvZiBmaWVsZHMgb24gYSBjb25zdHJ1Y3Rvci4KLy8vCi8vLyBUaGlzIHByb3BlcnR5IGlzIG9ubHkgdXNlZCB3aGVuIGlzb2xhdGVzIGFyZSB1c2VkLgovLy8KLy8vIFdoZW4gc2VyaWFsaXppbmcgb2JqZWN0cyB3ZSBleHRyYWN0IGFsbCBmaWVsZHMgZnJvbSBhbnkgZ2l2ZW4gb2JqZWN0LgovLy8gV2UgZXh0cmFjdCB0aGUgbmFtZXMgb2YgYWxsIGZpZWxkcyBmcm9tIGEgZnJlc2ggZW1wdHkgb2JqZWN0LiBUaGlzIGxpc3QKLy8vIGlzIGNhY2hlZCBvbiB0aGUgY29uc3RydWN0b3IgaW4gdGhpcyBwcm9wZXJ0eSB0byB0byBhdm9pZCB0b28gbWFueQovLy8gYWxsb2NhdGlvbnMuCmNvbnN0IFN0cmluZyBjYWNoZWRDbGFzc0ZpZWxkTmFtZXMgPSByJyRjYWNoZWRGaWVsZE5hbWVzJzsKCi8vLyBUaGUgZmFzdCBzdGFydHVwIGVtaXR0ZXIncyBnb2FsIGlzIHRvIG1pbmltaXplIHRoZSBhbW91bnQgb2Ygd29yayB0aGF0IHRoZQovLy8gSmF2YVNjcmlwdCBlbmdpbmUgaGFzIHRvIGRvIGJlZm9yZSBpdCBjYW4gc3RhcnQgcnVubmluZyB1c2VyIGNvZGUuCi8vLwovLy8gV2hlbmV2ZXIgcG9zc2libGUsIHRoZSBlbWl0dGVyIHVzZXMgb2JqZWN0IGxpdGVyYWxzIGluc3RlYWQgb2YgdXBkYXRpbmcKLy8vIG9iamVjdHMuCi8vLwovLy8gRXhhbXBsZToKLy8vCi8vLyAgICAgLy8gSG9sZGVycyBhcmUgaW5pdGlhbGl6ZWQgZGlyZWN0bHkgd2l0aCB0aGUgY2xhc3NlcyBhbmQgc3RhdGljCi8vLyAgICAgLy8gZnVuY3Rpb25zLgovLy8gICAgIHZhciBBID0geyBQb2ludDogZnVuY3Rpb24gUG9pbnQoeCwgeSkgeyB0aGlzLnggPSB4OyB0aGlzLnkgPSB5IH0sCi8vLyAgICAgICAgICAgICAgIHNvbWVTdGF0aWNGdW5jdGlvbjogZnVuY3Rpb24gc29tZVN0YXRpY0Z1bmN0aW9uKCkgeyAuLi4gfSB9OwovLy8KLy8vICAgICAvLyBDbGFzcy1iZWhhdmlvciBpcyBlbWl0dGVkIGluIGEgcHJvdG90eXBlIG9iamVjdCB0aGF0IGlzIGRpcmVjdGx5Ci8vLyAgICAgLy8gYXNzaWduZWQ6Ci8vLyAgICAgQS5Qb2ludC5wcm90b3R5cGUgPSB7IGRpc3RhbmNlVG86IGZ1bmN0aW9uKG90aGVyKSB7IC4uLiB9IH07Ci8vLwovLy8gICAgIC8vIEluaGVyaXRhbmNlIGlzIGFjaGlldmVkIGJ5IHVwZGF0aW5nIHRoZSBwcm90b3R5cGUgb2JqZWN0cyAoaGlkZGVuIGluCi8vLyAgICAgLy8gYSBoZWxwZXIgZnVuY3Rpb24pOgovLy8gICAgIEEuUG9pbnQucHJvdG90eXBlLl9fcHJvdG9fXyA9IEguT2JqZWN0LnByb3RvdHlwZTsKLy8vCi8vLyBUaGUgZW1pdHRlciBkb2Vzbid0IHRyeSB0byBiZSBjbGV2ZXIgYW5kIGVtaXRzIGV2ZXJ5dGhpbmcgYmVmb3JlaGFuZC4gVGhpcwovLy8gaW5jcmVhc2VzIHRoZSBvdXRwdXQgc2l6ZSwgYnV0IGltcHJvdmVzIHBlcmZvcm1hbmNlLgovLy8KLy8gVGhlIGNvZGUgcmVsaWVzIG9uIHRoZSBmYWN0IHRoYXQgYWxsIERhcnQgY29kZSBpcyBpbnNpZGUgaG9sZGVycy4gQXMgc3VjaAovLyB3ZSBjYW4gdXNlICJnbG9iYWwiIG5hbWVzIGhvd2V2ZXIgd2Ugd2FudC4gQXMgbG9uZyBhcyB3ZSBkb24ndCBzaGFkb3cKLy8gSmF2YVNjcmlwdCB2YXJpYWJsZXMgKGxpa2UgYEFycmF5YCkgd2UgYXJlIGZyZWUgdG8gY2hvc2Ugd2hhdGV2ZXIgdmFyaWFibGUKLy8gbmFtZXMgd2Ugd2FudC4gRnVydGhlcm1vcmUsIHRoZSBwcmV0dHktcHJpbnRlciBtaW5pZmllcyBsb2NhbCB2YXJpYWJsZXMsIHRodXMKLy8gcmVkdWNpbmcgdGhlaXIgc2l6ZS4KY29uc3QgU3RyaW5nIG1haW5Cb2lsZXJwbGF0ZSA9ICcnJwooZnVuY3Rpb24gZGFydFByb2dyYW0oKSB7Ci8vIENvcGllcyB0aGUgb3duIHByb3BlcnRpZXMgZnJvbSBbZnJvbV0gdG8gW3RvXS4KZnVuY3Rpb24gY29weVByb3BlcnRpZXMoZnJvbSwgdG8pIHsKICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyb20pOwogIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykgewogICAgdmFyIGtleSA9IGtleXNbaV07CiAgICB0b1trZXldID0gZnJvbVtrZXldOwogIH0KfQoKLy8gT25seSB1c2UgZGlyZWN0IHByb3RvIGFjY2VzcyB0byBjb25zdHJ1Y3QgdGhlIHByb3RvdHlwZSBjaGFpbiAoaW5zdGVhZCBvZgovLyBjb3B5aW5nIHByb3BlcnRpZXMpIG9uIHBsYXRmb3JtcyB3aGVyZSB3ZSBrbm93IGl0IHdvcmtzIHdlbGwgKENocm9tZSAvIGQ4KS4KdmFyIHN1cHBvcnRzRGlyZWN0UHJvdG9BY2Nlc3MgPSAjZGlyZWN0QWNjZXNzVGVzdEV4cHJlc3Npb247CgovLyBTZXRzIHRoZSBuYW1lIHByb3BlcnR5IG9mIGZ1bmN0aW9ucywgaWYgdGhlIEpTIGVuZ2luZSBkb2Vzbid0IHNldCB0aGUgbmFtZQovLyBpdHNlbGYuCi8vIEFzIG9mIDIwMTggb25seSBJRTExIGRvZXNuJ3Qgc2V0IHRoZSBuYW1lLgpmdW5jdGlvbiBzZXRGdW5jdGlvbk5hbWVzSWZOZWNlc3NhcnkoaG9sZGVycykgewogIGZ1bmN0aW9uIHQoKXt9OwogIGlmICh0eXBlb2YgdC5uYW1lID09ICJzdHJpbmciKSByZXR1cm47CgogIGZvciAodmFyIGkgPSAwOyBpIDwgaG9sZGVycy5sZW5ndGg7IGkrKykgewogICAgdmFyIGhvbGRlciA9IGhvbGRlcnNbaV07CiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGhvbGRlcik7CiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGtleXMubGVuZ3RoOyBqKyspIHsKICAgICAgdmFyIGtleSA9IGtleXNbal07CiAgICAgIHZhciBmID0gaG9sZGVyW2tleV07CiAgICAgIGlmICh0eXBlb2YgZiA9PSAnZnVuY3Rpb24nKSBmLm5hbWUgPSBrZXk7CiAgICB9CiAgfQp9CgovLyBNYWtlcyBbY2xzXSBpbmhlcml0IGZyb20gW3N1cF0uCi8vIE9uIENocm9tZSwgRmlyZWZveCBhbmQgcmVjZW50IElFcyB0aGlzIGhhcHBlbnMgYnkgdXBkYXRpbmcgdGhlIGludGVybmFsCi8vIHByb3RvLXByb3BlcnR5IG9mIHRoZSBjbGFzc2VzICdwcm90b3R5cGUnIGZpZWxkLgovLyBPbGRlciBJRXMgdXNlIGBPYmplY3QuY3JlYXRlYCBhbmQgY29weSBvdmVyIHRoZSBwcm9wZXJ0aWVzLgpmdW5jdGlvbiBpbmhlcml0KGNscywgc3VwKSB7CiAgLy8gTm90ZSB0aGF0IFJUSSBuZWVkcyBjbHMubmFtZSwgYnV0IHdlIGRvbid0IG5lZWQgdG8gc2V0IGl0IGFueW1vcmUuCiAgY2xzLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNsczsKICBjbHMucHJvdG90eXBlWyNvcGVyYXRvcklzUHJlZml4ICsgY2xzLm5hbWVdID0gY2xzOwoKICAvLyBUaGUgc3VwZXJjbGFzcyBpcyBvbmx5IG51bGwgZm9yIHRoZSBEYXJ0IE9iamVjdC4KICBpZiAoc3VwICE9IG51bGwpIHsKICAgIGlmIChzdXBwb3J0c0RpcmVjdFByb3RvQWNjZXNzKSB7CiAgICAgIC8vIEZpcmVmb3ggZG9lc24ndCBsaWtlIHRvIHVwZGF0ZSB0aGUgcHJvdG90eXBlcywgYnV0IHdoZW4gc2V0dGluZyB1cAogICAgICAvLyB0aGUgaGllcmFyY2h5IGNoYWluIGl0J3Mgb2suCiAgICAgIGNscy5wcm90b3R5cGUuX19wcm90b19fID0gc3VwLnByb3RvdHlwZTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIGNsc1Byb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwLnByb3RvdHlwZSk7CiAgICBjb3B5UHJvcGVydGllcyhjbHMucHJvdG90eXBlLCBjbHNQcm90b3R5cGUpOwogICAgY2xzLnByb3RvdHlwZSA9IGNsc1Byb3RvdHlwZTsKICB9Cn0KCi8vIEJhdGNoZWQgdmVyc2lvbiBvZiBbaW5oZXJpdF0gZm9yIG11bHRpcGxlIGNsYXNzZXMgZnJvbSBvbmUgc3VwZXJjbGFzcy4KZnVuY3Rpb24gaW5oZXJpdE1hbnkoc3VwLCBjbGFzc2VzKSB7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICBpbmhlcml0KGNsYXNzZXNbaV0sIHN1cCk7CiAgfQp9CgovLyBNaXhlcyBpbiB0aGUgcHJvcGVydGllcyBvZiBbbWl4aW5dIGludG8gW2Nsc10uCmZ1bmN0aW9uIG1peGluKGNscywgbWl4aW4pIHsKICBjb3B5UHJvcGVydGllcyhtaXhpbi5wcm90b3R5cGUsIGNscy5wcm90b3R5cGUpOwogIGNscy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjbHM7Cn0KCi8vIENyZWF0ZXMgYSBsYXp5IGZpZWxkLgovLwovLyBBIGxhenkgZmllbGQgaGFzIGEgc3RvcmFnZSBlbnRyeSwgW25hbWVdLCB3aGljaCBob2xkcyB0aGUgdmFsdWUsIGFuZCBhCi8vIGdldHRlciAoW2dldHRlck5hbWVdKSB0byBhY2Nlc3MgdGhlIGZpZWxkLiBJZiB0aGUgZmllbGQgd2Fzbid0IHNldCBiZWZvcmUKLy8gdGhlIGZpcnN0IGFjY2VzcywgaXQgaXMgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgW2luaXRpYWxpemVyXS4KZnVuY3Rpb24gbGF6eShob2xkZXIsIG5hbWUsIGdldHRlck5hbWUsIGluaXRpYWxpemVyKSB7CiAgdmFyIHVuaW5pdGlhbGl6ZWRTZW50aW5lbCA9IGhvbGRlcjsKICBob2xkZXJbbmFtZV0gPSB1bmluaXRpYWxpemVkU2VudGluZWw7CiAgaG9sZGVyW2dldHRlck5hbWVdID0gZnVuY3Rpb24oKSB7CiAgICBob2xkZXJbZ2V0dGVyTmFtZV0gPSBmdW5jdGlvbigpIHsgI2N5Y2xpY1Rocm93KG5hbWUpIH07CiAgICB2YXIgcmVzdWx0OwogICAgdmFyIHNlbnRpbmVsSW5Qcm9ncmVzcyA9IGluaXRpYWxpemVyOwogICAgdHJ5IHsKICAgICAgaWYgKGhvbGRlcltuYW1lXSA9PT0gdW5pbml0aWFsaXplZFNlbnRpbmVsKSB7CiAgICAgICAgcmVzdWx0ID0gaG9sZGVyW25hbWVdID0gc2VudGluZWxJblByb2dyZXNzOwogICAgICAgIHJlc3VsdCA9IGhvbGRlcltuYW1lXSA9IGluaXRpYWxpemVyKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0ID0gaG9sZGVyW25hbWVdOwogICAgICB9CiAgICB9IGZpbmFsbHkgewogICAgICAvLyBVc2UgdHJ5LWZpbmFsbHksIG5vdCB0cnktY2F0Y2gvdGhyb3cgYXMgaXQgZGVzdHJveXMgdGhlIHN0YWNrCiAgICAgIC8vIHRyYWNlLgogICAgICBpZiAocmVzdWx0ID09PSBzZW50aW5lbEluUHJvZ3Jlc3MpIHsKICAgICAgICAvLyBUaGUgbGF6eSBzdGF0aWMgKGhvbGRlcltuYW1lXSkgbWlnaHQgaGF2ZSBiZWVuIHNldCB0byBhIGRpZmZlcmVudAogICAgICAgIC8vIHZhbHVlLiBBY2NvcmRpbmcgdG8gc3BlYyB3ZSBzdGlsbCBoYXZlIHRvIHJlc2V0IGl0IHRvIG51bGwsIGlmCiAgICAgICAgLy8gdGhlIGluaXRpYWxpemF0aW9uIGZhaWxlZC4KICAgICAgICBob2xkZXJbbmFtZV0gPSBudWxsOwogICAgICB9CiAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyB0aGUgZnVuY3Rpb24gc2hvdWxkIHByb2JhYmx5CiAgICAgIC8vIGJlIHVuaXF1ZSBmb3IgZWFjaCBzdGF0aWMuCiAgICAgIGhvbGRlcltnZXR0ZXJOYW1lXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpc1tuYW1lXTsgfTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfTsKfQoKLy8gR2l2ZW4gYSBsaXN0LCBtYXJrcyBpdCBhcyBjb25zdGFudC4KLy8KLy8gVGhlIHJ1bnRpbWUgZW5zdXJlcyB0aGF0IGNvbnN0LWxpc3RzIGNhbm5vdCBiZSBtb2RpZmllZC4KZnVuY3Rpb24gbWFrZUNvbnN0TGlzdChsaXN0KSB7CiAgLy8gQnkgYXNzaWduaW5nIGEgZnVuY3Rpb24gdG8gdGhlIHByb3BlcnRpZXMgdGhleSBiZWNvbWUgcGFydCBvZiB0aGUKICAvLyBoaWRkZW4gY2xhc3MuIFRoZSBhY3R1YWwgdmFsdWVzIG9mIHRoZSBmaWVsZHMgZG9uJ3QgbWF0dGVyLCBzaW5jZSB3ZQogIC8vIG9ubHkgY2hlY2sgaWYgdGhleSBleGlzdC4KICBsaXN0LmltbXV0YWJsZVwkbGlzdCA9IEFycmF5OwogIGxpc3QuZml4ZWRcJGxlbmd0aCA9IEFycmF5OwogIHJldHVybiBsaXN0Owp9CgpmdW5jdGlvbiBjb252ZXJ0VG9GYXN0T2JqZWN0KHByb3BlcnRpZXMpIHsKICAvLyBDcmVhdGUgYW4gaW5zdGFuY2UgdGhhdCB1c2VzICdwcm9wZXJ0aWVzJyBhcyBwcm90b3R5cGUuIFRoaXMgc2hvdWxkCiAgLy8gbWFrZSAncHJvcGVydGllcycgYSBmYXN0IG9iamVjdC4KICBmdW5jdGlvbiB0KCkge30KICB0LnByb3RvdHlwZSA9IHByb3BlcnRpZXM7CiAgbmV3IHQoKTsKICByZXR1cm4gcHJvcGVydGllczsKfQoKZnVuY3Rpb24gY29udmVydEFsbFRvRmFzdE9iamVjdChhcnJheU9mT2JqZWN0cykgewogIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZk9iamVjdHMubGVuZ3RoOyArK2kpIHsKICAgIGNvbnZlcnRUb0Zhc3RPYmplY3QoYXJyYXlPZk9iamVjdHNbaV0pOwogIH0KfQoKLy8gVGhpcyB2YXJpYWJsZSBpcyB1c2VkIGJ5IHRoZSB0ZWFyT2ZmQ29kZSB0byBndWFyYW50ZWUgdW5pcXVlIGZ1bmN0aW9ucyBwZXIKLy8gdGVhci1vZmZzLgp2YXIgZnVuY3Rpb25Db3VudGVyID0gMDsKI3RlYXJPZmZDb2RlOwoKLy8gRWFjaCBkZWZlcnJlZCBodW5rIGNvbWVzIHdpdGggaXRzIG93biB0eXBlcyB3aGljaCBhcmUgYWRkZWQgdG8gdGhlIGVuZAovLyBvZiB0aGUgdHlwZXMtYXJyYXkuCi8vIFRoZSBgZnVuVHlwZXNgIHBhc3NlZCB0byB0aGUgYGluc3RhbGxUZWFyT2ZmYCBmdW5jdGlvbiBiZWxvdyBpcyByZWxhdGl2ZSB0bwovLyB0aGUgaHVuayB0aGUgZnVuY3Rpb24gY29tZXMgZnJvbS4gVGhlIGB0eXBlc09mZnNldGAgdmFyaWFibGUgZW5jb2RlcyB0aGUKLy8gb2Zmc2V0IGF0IHdoaWNoIHRoZSBuZXcgdHlwZXMgd2lsbCBiZSBhZGRlZC4KdmFyIHR5cGVzT2Zmc2V0ID0gMDsKCi8vIEFkYXB0cyB0aGUgc3RvcmVkIGRhdGEsIHNvIGl0J3Mgc3VpdGFibGUgZm9yIGEgdGVhck9mZiBjYWxsLgovLwovLyBTdG9yZXMgdGhlIHRlYXItb2ZmIGdldHRlci1mdW5jdGlvbiBpbiB0aGUgW2NvbnRhaW5lcl0ncyBbZ2V0dGVyTmFtZV0KLy8gcHJvcGVydHkuCi8vCi8vIFRoZSBbY29udGFpbmVyXSBpcyBlaXRoZXIgYSBjbGFzcyAodGhhdCBpcywgaXRzIHByb3RvdHlwZSksIG9yIHRoZSBob2xkZXIgZm9yCi8vIHN0YXRpYyBmdW5jdGlvbnMuCi8vCi8vIFRoZSBhcmd1bWVudCBbZnVuc09yTmFtZXNdIGlzIGFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgZnVuY3Rpb25zLiBJZiBpdCBpcyBhCi8vIG5hbWUsIHRoZW4gdGhlIGZ1bmN0aW9uIHNob3VsZCBiZSBmZXRjaGVkIGZyb20gdGhlIGNvbnRhaW5lci4gVGhlIGZpcnN0Ci8vIGVudHJ5IGluIHRoYXQgYXJyYXkgKm11c3QqIGJlIGEgc3RyaW5nLgovLwovLyBUT0RPKGZsb2l0c2NoKTogQ2hhbmdlIHRlYXJPZmZDb2RlIHRvIGFjY2VwdCB0aGUgZGF0YSBkaXJlY3RseSwgb3IgY3JlYXRlIGEKLy8gZGlmZmVyZW50IHRlYXJPZmZDb2RlPwpmdW5jdGlvbiBpbnN0YWxsVGVhck9mZigKICAgIGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgaXNTdGF0aWMsIGlzSW50ZXJjZXB0ZWQsIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsCiAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsIGNhbGxOYW1lcywgZnVuc09yTmFtZXMsIGZ1blR5cGUsIGFwcGx5SW5kZXgpIHsKICAvLyBBIGZ1bmN0aW9uIGNhbiBoYXZlIHNldmVyYWwgc3R1YnMgKGZvciBleGFtcGxlIHRvIGZpbGwgaW4gb3B0aW9uYWwKICAvLyBhcmd1bWVudHMpLiBXZSBjb2xsZWN0IHRoZXNlIGZ1bmN0aW9ucyBpbiB0aGUgYGZ1bnNgIGFycmF5LgogIHZhciBmdW5zID0gW107CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5zT3JOYW1lcy5sZW5ndGg7IGkrKykgewogICAgdmFyIGZ1biA9IGZ1bnNPck5hbWVzW2ldOwogICAgaWYgKCh0eXBlb2YgZnVuKSA9PSAnc3RyaW5nJykgZnVuID0gY29udGFpbmVyW2Z1bl07CiAgICBmdW4uI2NhbGxOYW1lID0gY2FsbE5hbWVzW2ldOwogICAgZnVucy5wdXNoKGZ1bik7CiAgfQoKICAvLyBUaGUgbWFpbiBmdW5jdGlvbiB0byB3aGljaCBhbGwgc3R1YnMgcmVkaXJlY3QuCiAgdmFyIGZ1biA9IGZ1bnNbMF07CgogIGZ1blsjYXJndW1lbnRDb3VudF0gPSByZXF1aXJlZFBhcmFtZXRlckNvdW50OwogIGZ1blsjZGVmYXVsdEFyZ3VtZW50VmFsdWVzXSA9IG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlczsKICB2YXIgcmVmbGVjdGlvbkluZm8gPSBmdW5UeXBlOwogIGlmICh0eXBlb2YgcmVmbGVjdGlvbkluZm8gPT0gIm51bWJlciIpIHsKICAgIC8vIFRoZSByZWZsZWN0aW9uSW5mbyBjYW4gZWl0aGVyIGJlIGEgZnVuY3Rpb24sIG9yIGEgcG9pbnRlciBpbnRvIHRoZSB0eXBlcwogICAgLy8gdGFibGUuIElmIGl0IHBvaW50cyBpbnRvIHRoZSB0eXBlcy10YWJsZSB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgaW5kZXgsCiAgICAvLyBpbiBjYXNlIHRoZSB0ZWFyLW9mZiBpcyBwYXJ0IG9mIGEgZGVmZXJyZWQgaHVuay4KICAgIHJlZmxlY3Rpb25JbmZvID0gcmVmbGVjdGlvbkluZm8gKyB0eXBlc09mZnNldDsKICB9CiAgdmFyIG5hbWUgPSBmdW5zT3JOYW1lc1swXTsKICBmdW4uI3N0dWJOYW1lID0gbmFtZTsKICB2YXIgZ2V0dGVyRnVuY3Rpb24gPQogICAgICB0ZWFyT2ZmKGZ1bnMsIGFwcGx5SW5kZXggfHwgMCwgcmVmbGVjdGlvbkluZm8sIGlzU3RhdGljLCBuYW1lLCBpc0ludGVyY2VwdGVkKTsKICBjb250YWluZXJbZ2V0dGVyTmFtZV0gPSBnZXR0ZXJGdW5jdGlvbjsKICBpZiAoaXNTdGF0aWMpIHsKICAgIGZ1bi4kdGVhck9mZlByb3BlcnR5TmFtZSA9IGdldHRlckZ1bmN0aW9uOwogIH0KfQoKZnVuY3Rpb24gaW5zdGFsbFN0YXRpY1RlYXJPZmYoCiAgICBjb250YWluZXIsIGdldHRlck5hbWUsCiAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICBjYWxsTmFtZXMsIGZ1bnNPck5hbWVzLCBmdW5UeXBlLCBhcHBseUluZGV4KSB7CiAgLy8gVE9ETyhzcmEpOiBTcGVjaWFsaXplIGluc3RhbGxUZWFyT2ZmIGZvciBzdGF0aWMgbWV0aG9kcy4gSXQgbWlnaHQgYmUKICAvLyBwb3NzaWJsZSB0byBoYW5kbGUgc29tZSB2ZXJ5IGNvbW1vbiBzaW1wbGUgY2FzZXMgZGlyZWN0bHkuCiAgcmV0dXJuIGluc3RhbGxUZWFyT2ZmKAogICAgICBjb250YWluZXIsIGdldHRlck5hbWUsIHRydWUsIGZhbHNlLAogICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgIGNhbGxOYW1lcywgZnVuc09yTmFtZXMsIGZ1blR5cGUsIGFwcGx5SW5kZXgpOwp9CgpmdW5jdGlvbiBpbnN0YWxsSW5zdGFuY2VUZWFyT2ZmKAogICAgY29udGFpbmVyLCBnZXR0ZXJOYW1lLCBpc0ludGVyY2VwdGVkLAogICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgY2FsbE5hbWVzLCBmdW5zT3JOYW1lcywgZnVuVHlwZSwgYXBwbHlJbmRleCkgewogIC8vIFRPRE8oc3JhKTogU3BlY2lhbGl6ZSBpbnN0YWxsVGVhck9mZiBmb3IgaW5zdGFuY2UgbWV0aG9kcy4KICByZXR1cm4gaW5zdGFsbFRlYXJPZmYoCiAgICAgIGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgZmFsc2UsIGlzSW50ZXJjZXB0ZWQsCiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgY2FsbE5hbWVzLCBmdW5zT3JOYW1lcywgZnVuVHlwZSwgYXBwbHlJbmRleCk7Cn0KCi8vIEluc3RlYWQgb2Ygc2V0dGluZyB0aGUgaW50ZXJjZXB0b3IgdGFncyBkaXJlY3RseSB3ZSB1c2UgdGhpcyB1cGRhdGUKLy8gZnVuY3Rpb24uIFRoaXMgbWFrZXMgaXQgZWFzaWVyIGZvciBkZWZlcnJlZCBmcmFnbWVudHMgdG8gY29udHJpYnV0ZSB0byB0aGUKLy8gZW1iZWRkZWQgZ2xvYmFsLgpmdW5jdGlvbiBzZXRPclVwZGF0ZUludGVyY2VwdG9yc0J5VGFnKG5ld1RhZ3MpIHsKICB2YXIgdGFncyA9ICNlbWJlZGRlZEludGVyY2VwdG9yVGFnczsKICBpZiAoIXRhZ3MpIHsKICAgICNlbWJlZGRlZEludGVyY2VwdG9yVGFncyA9IG5ld1RhZ3M7CiAgICByZXR1cm47CiAgfQogIGNvcHlQcm9wZXJ0aWVzKG5ld1RhZ3MsIHRhZ3MpOwp9CgovLyBJbnN0ZWFkIG9mIHNldHRpbmcgdGhlIGxlYWYgdGFncyBkaXJlY3RseSB3ZSB1c2UgdGhpcyB1cGRhdGUKLy8gZnVuY3Rpb24uIFRoaXMgbWFrZXMgaXQgZWFzaWVyIGZvciBkZWZlcnJlZCBmcmFnbWVudHMgdG8gY29udHJpYnV0ZSB0byB0aGUKLy8gZW1iZWRkZWQgZ2xvYmFsLgpmdW5jdGlvbiBzZXRPclVwZGF0ZUxlYWZUYWdzKG5ld1RhZ3MpIHsKICB2YXIgdGFncyA9ICNlbWJlZGRlZExlYWZUYWdzOwogIGlmICghdGFncykgewogICAgI2VtYmVkZGVkTGVhZlRhZ3MgPSBuZXdUYWdzOwogICAgcmV0dXJuOwogIH0KICBjb3B5UHJvcGVydGllcyhuZXdUYWdzLCB0YWdzKTsKfQoKLy8gVXBkYXRlcyB0aGUgdHlwZXMgZW1iZWRkZWQgZ2xvYmFsLgpmdW5jdGlvbiB1cGRhdGVUeXBlcyhuZXdUeXBlcykgewogIHZhciB0eXBlcyA9ICNlbWJlZGRlZFR5cGVzOwogIHZhciBsZW5ndGggPSB0eXBlcy5sZW5ndGg7CiAgLy8gVGhlIHRlYXItb2ZmIGZ1bmN0aW9uIHVzZXMgYW5vdGhlciAndHlwZXNPZmZzZXQnIHZhbHVlIGNhY2hlZCBpbgogIC8vIFtpbml0aWFsaXplRGVmZXJyZWRIdW5rXSBzbyBbdXBkYXRlVHlwZXNdIGNhbiBiZSBjYWxsZWQgZWl0aGVyIGJlZm9yZSBvcgogIC8vIGFmdGVyIHRoZSB0ZWFyb2ZmcyBoYXZlIGJlZW4gaW5zdGFsbGVkLgogIHR5cGVzLnB1c2guYXBwbHkodHlwZXMsIG5ld1R5cGVzKTsKICByZXR1cm4gbGVuZ3RoOwp9CgovLyBVcGRhdGVzIHRoZSBnaXZlbiBob2xkZXIgd2l0aCB0aGUgcHJvcGVydGllcyBvZiB0aGUgW25ld0hvbGRlcl0uCi8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB3aGVuIGEgZGVmZXJyZWQgZnJhZ21lbnQgaXMgaW5pdGlhbGl6ZWQuCmZ1bmN0aW9uIHVwZGF0ZUhvbGRlcihob2xkZXIsIG5ld0hvbGRlcikgewogIGNvcHlQcm9wZXJ0aWVzKG5ld0hvbGRlciwgaG9sZGVyKTsKICByZXR1cm4gaG9sZGVyOwp9Cgp2YXIgI2h1bmtIZWxwZXJzID0gKGZ1bmN0aW9uKCl7CiAgdmFyIG1rSW5zdGFuY2UgPSBmdW5jdGlvbigKICAgICAgaXNJbnRlcmNlcHRlZCwgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICBjYWxsTmFtZXMsIGFwcGx5SW5kZXgpIHsKICAgIHJldHVybiBmdW5jdGlvbihjb250YWluZXIsIGdldHRlck5hbWUsIG5hbWUsIGZ1blR5cGUpIHsKICAgICAgcmV0dXJuIGluc3RhbGxJbnN0YW5jZVRlYXJPZmYoCiAgICAgICAgICBjb250YWluZXIsIGdldHRlck5hbWUsIGlzSW50ZXJjZXB0ZWQsCiAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgICAgICBjYWxsTmFtZXMsIFtuYW1lXSwgZnVuVHlwZSwgYXBwbHlJbmRleCk7CiAgICB9CiAgfSwKCiAgbWtTdGF0aWMgPSBmdW5jdGlvbigKICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICBjYWxsTmFtZXMsIGFwcGx5SW5kZXgpIHsKICAgIHJldHVybiBmdW5jdGlvbihjb250YWluZXIsIGdldHRlck5hbWUsIG5hbWUsIGZ1blR5cGUpIHsKICAgICAgcmV0dXJuIGluc3RhbGxTdGF0aWNUZWFyT2ZmKAogICAgICAgICAgY29udGFpbmVyLCBnZXR0ZXJOYW1lLAogICAgICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICAgICAgY2FsbE5hbWVzLCBbbmFtZV0sIGZ1blR5cGUsIGFwcGx5SW5kZXgpOwogICAgfQogIH07CgogIC8vIFRPRE8oc3JhKTogTWluaWZ5IHByb3BlcnRpZXMgb2YgJ2h1bmtIZWxwZXJzJy4KICByZXR1cm4gewogICAgaW5oZXJpdDogaW5oZXJpdCwKICAgIGluaGVyaXRNYW55OiBpbmhlcml0TWFueSwKICAgIG1peGluOiBtaXhpbiwKICAgIGluc3RhbGxTdGF0aWNUZWFyT2ZmOiBpbnN0YWxsU3RhdGljVGVhck9mZiwKICAgIGluc3RhbGxJbnN0YW5jZVRlYXJPZmY6IGluc3RhbGxJbnN0YW5jZVRlYXJPZmYsCgogICAgICAgIC8vIFVuaW50ZXJjZXB0ZWQgbWV0aG9kcy4KICAgIF9pbnN0YW5jZV8wdTogbWtJbnN0YW5jZSgwLCAwLCBudWxsLCBbI2NhbGwwc2VsZWN0b3JdLCAwKSwKICAgIF9pbnN0YW5jZV8xdTogbWtJbnN0YW5jZSgwLCAxLCBudWxsLCBbI2NhbGwxc2VsZWN0b3JdLCAwKSwKICAgIF9pbnN0YW5jZV8ydTogbWtJbnN0YW5jZSgwLCAyLCBudWxsLCBbI2NhbGwyc2VsZWN0b3JdLCAwKSwKCiAgICAgICAgLy8gSW50ZXJjZXB0ZWQgbWV0aG9kcy4KICAgIF9pbnN0YW5jZV8waTogbWtJbnN0YW5jZSgxLCAwLCBudWxsLCBbI2NhbGwwc2VsZWN0b3JdLCAwKSwKICAgIF9pbnN0YW5jZV8xaTogbWtJbnN0YW5jZSgxLCAxLCBudWxsLCBbI2NhbGwxc2VsZWN0b3JdLCAwKSwKICAgIF9pbnN0YW5jZV8yaTogbWtJbnN0YW5jZSgxLCAyLCBudWxsLCBbI2NhbGwyc2VsZWN0b3JdLCAwKSwKCiAgICAgICAgLy8gU3RhdGljIG1ldGhvZHMuCiAgICBfc3RhdGljXzA6IG1rU3RhdGljKDAsIG51bGwsIFsjY2FsbDBzZWxlY3Rvcl0sIDApLAogICAgX3N0YXRpY18xOiBta1N0YXRpYygxLCBudWxsLCBbI2NhbGwxc2VsZWN0b3JdLCAwKSwKICAgIF9zdGF0aWNfMjogbWtTdGF0aWMoMiwgbnVsbCwgWyNjYWxsMnNlbGVjdG9yXSwgMCksCgogICAgbWFrZUNvbnN0TGlzdDogbWFrZUNvbnN0TGlzdCwKICAgIGxhenk6IGxhenksCiAgICB1cGRhdGVIb2xkZXI6IHVwZGF0ZUhvbGRlciwKICAgIGNvbnZlcnRUb0Zhc3RPYmplY3Q6IGNvbnZlcnRUb0Zhc3RPYmplY3QsCiAgICBzZXRGdW5jdGlvbk5hbWVzSWZOZWNlc3Nhcnk6IHNldEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeSwKICAgIHVwZGF0ZVR5cGVzOiB1cGRhdGVUeXBlcywKICAgIHNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWc6IHNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWcsCiAgICBzZXRPclVwZGF0ZUxlYWZUYWdzOiBzZXRPclVwZGF0ZUxlYWZUYWdzLAogIH07Cn0pKCk7CgovLyBFdmVyeSBkZWZlcnJlZCBodW5rIChpLmUuIGZyYWdtZW50KSBpcyBhIGZ1bmN0aW9uIHRoYXQgd2UgY2FuIGludm9rZSB0bwovLyBpbml0aWFsaXplIGl0LiBBdCB0aGlzIG1vbWVudCBpdCBjb250cmlidXRlcyBpdHMgZGF0YSB0byB0aGUgbWFpbiBodW5rLgpmdW5jdGlvbiBpbml0aWFsaXplRGVmZXJyZWRIdW5rKGh1bmspIHsKICAvLyBVcGRhdGUgdGhlIHR5cGVzT2Zmc2V0IGZvciB0aGUgbmV4dCBkZWZlcnJlZCBsaWJyYXJ5LgogIHR5cGVzT2Zmc2V0ID0gI2VtYmVkZGVkVHlwZXMubGVuZ3RoOwoKICAvLyBUT0RPKGZsb2l0c2NoKTogZXh0ZW5kIG5hdGl2ZXMuCiAgaHVuayhodW5rSGVscGVycywgI2VtYmVkZGVkR2xvYmFsc09iamVjdCwgaG9sZGVycywgI3N0YXRpY1N0YXRlKTsKfQoKLy8gUmV0dXJucyB0aGUgZ2xvYmFsIHdpdGggdGhlIGdpdmVuIFtuYW1lXS4KZnVuY3Rpb24gZ2V0R2xvYmFsRnJvbU5hbWUobmFtZSkgewogIC8vIFRPRE8oZmxvaXRzY2gpOiB3ZSBhcmUgcnVubmluZyB0aHJvdWdoIGFsbCBob2xkZXJzLiBTaW5jZSBuZWdhdGl2ZQogIC8vIGxvb2t1cHMgYXJlIGV4cGVuc2l2ZSB3ZSBtaWdodCBuZWVkIHRvIGltcHJvdmUgdGhpcy4KICAvLyBSZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBhbGwgbmFtZXMgYXJlIHVuaXF1ZSBhY3Jvc3MgYWxsIGhvbGRlcnMuCiAgZm9yICh2YXIgaSA9IDA7IGkgPCBob2xkZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAvLyBUaGUgY29uc3RhbnQgaG9sZGVyIHJldXNlcyB0aGUgc2FtZSBuYW1lcy4gVGhlcmVmb3JlIHdlIG11c3Qgc2tpcCBpdC4KICAgIGlmIChob2xkZXJzW2ldID09ICNjb25zdGFudEhvbGRlclJlZmVyZW5jZSkgY29udGludWU7CiAgICAvLyBSZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBhbGwgdmFyaWFibGVzIGFyZSB1bmlxdWUuCiAgICBpZiAoaG9sZGVyc1tpXVtuYW1lXSkgcmV0dXJuIGhvbGRlcnNbaV1bbmFtZV07CiAgfQp9CgppZiAoI2hhc1NvZnREZWZlcnJlZENsYXNzZXMpIHsKICAvLyBMb2FkcyB0aGUgc29mdC1kZWZlcnJlZCBjbGFzc2VzIGFuZCBpbml0aWFsaXplcyB0aGVtLgogIC8vIFVwZGF0ZXMgdGhlIHByb3RvdHlwZSBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgogIGZ1bmN0aW9uIHNvZnREZWYobykgewogICAgc29mdERlZiA9IGZ1bmN0aW9uKG8pIHt9OyAgLy8gUmVwbGFjZSBvdXJzZWx2ZXMuCiAgICAjZGVmZXJyZWRHbG9iYWxbI3NvZnRJZF0oCiAgICAgICAgaG9sZGVycywgI2VtYmVkZGVkR2xvYmFsc09iamVjdCwgI3N0YXRpY1N0YXRlLAogICAgICAgIGh1bmtIZWxwZXJzKTsKICAgIGlmIChvICE9IG51bGwpIHsKICAgICAgLy8gVE9ETygyOTU3NCk6IHNob3VsZCB3ZSBkbyBzb21ldGhpbmcgZGlmZmVyZW50IGZvciBGaXJlZm94PwogICAgICAvLyBJZiB3ZSByZWNvbW1lbmQgdGhhdCB0aGUgcHJvZ3JhbSB0cmlnZ2VycyB0aGUgbG9hZCBieSBpdHNlbGYgYmVmb3JlCiAgICAgIC8vIGNsYXNzZXMgYXJlIG5lZWRlZCwgdGhlbiB0aGlzIGxpbmUgc2hvdWxkIHJhcmVseSBiZSBoaXQuCiAgICAgIC8vIEFsc28sIGl0IGlzIG9ubHkgaGl0IGF0IG1vc3Qgb25jZSAocGVyIHNvZnQtZGVmZXJyZWQgY2h1bmspLgogICAgICBvLl9fcHJvdG9fXyA9IG8uY29uc3RydWN0b3IucHJvdG90eXBlOwogICAgfQogIH0KfQoKaWYgKCNpc1RyYWNraW5nQWxsb2NhdGlvbnMpIHsKICB2YXIgYWxsb2NhdGlvbnMgPSAjZGVmZXJyZWRHbG9iYWxbJ2FsbG9jYXRpb25zJ10gPSB7fTsKfQoKLy8gQ3JlYXRlcyB0aGUgaG9sZGVycy4KI2hvbGRlcnM7CgovLyBJZiB0aGUgbmFtZSBpcyBub3Qgc2V0IG9uIHRoZSBmdW5jdGlvbnMsIGRvIGl0IG5vdy4KaHVua0hlbHBlcnMuc2V0RnVuY3Rpb25OYW1lc0lmTmVjZXNzYXJ5KGhvbGRlcnMpOwoKLy8gVE9ETyhmbG9pdHNjaCk6IHdlIHNob3VsZCBidWlsZCB0aGlzIG9iamVjdCBhcyBhIGxpdGVyYWwuCnZhciAjc3RhdGljU3RhdGVEZWNsYXJhdGlvbiA9IHt9OwoKLy8gU2V0cyB0aGUgcHJvdG90eXBlcyBvZiBjbGFzc2VzLgojcHJvdG90eXBlczsKLy8gU2V0cyBhbGlhc2VzIG9mIG1ldGhvZHMgKG9uIHRoZSBwcm90b3R5cGVzIG9mIGNsYXNzZXMpLgojYWxpYXNlczsKLy8gSW5zdGFsbHMgdGhlIHRlYXItb2ZmcyBvZiBmdW5jdGlvbnMuCiN0ZWFyT2ZmczsKLy8gQnVpbGRzIHRoZSBpbmhlcml0YW5jZSBzdHJ1Y3R1cmUuCiNpbmhlcml0YW5jZTsKCi8vIEVtaXRzIHRoZSBlbWJlZGRlZCBnbG9iYWxzLiBUaGlzIG5lZWRzIHRvIGJlIGJlZm9yZSBjb25zdGFudHMgc28gdGhlIGVtYmVkZGVkCi8vIGdsb2JhbCB0eXBlIHJlc291cmNlcyBhcmUgYXZhaWxhYmxlIGZvciBnZW5lcmF0aW5nIGNvbnN0YW50cy4KI2VtYmVkZGVkR2xvYmFsc1BhcnQxOwoKLy8gQWRkcyB0aGUgc3VidHlwZSBydWxlcyBmb3IgdGhlIG5ldyBSVEkuCiN0eXBlUnVsZXM7CgovLyBJbnN0YW50aWF0ZXMgYWxsIGNvbnN0YW50cy4KI2NvbnN0YW50czsKCi8vIEFkZHMgdG8gdGhlIGVtYmVkZGVkIGdsb2JhbHMuIEEgZmV3IGdsb2JhbHMgcmVmZXIgdG8gY29uc3RhbnRzLgojZW1iZWRkZWRHbG9iYWxzUGFydDI7IAoKLy8gSW5pdGlhbGl6ZXMgdGhlIHN0YXRpYyBub24tZmluYWwgZmllbGRzICh3aXRoIHRoZWlyIGNvbnN0YW50IHZhbHVlcykuCiNzdGF0aWNOb25GaW5hbEZpZWxkczsKLy8gQ3JlYXRlcyBsYXp5IGdldHRlcnMgZm9yIHN0YXRpY3MgdGhhdCBtdXN0IHJ1biBpbml0aWFsaXplcnMgb24gZmlyc3QgYWNjZXNzLgojbGF6eVN0YXRpY3M7CgovLyBTZXRzIHVwIHRoZSBuYXRpdmUgc3VwcG9ydC4KLy8gTmF0aXZlLXN1cHBvcnQgdXNlcyBzZXRPclVwZGF0ZUludGVyY2VwdG9yc0J5VGFnIGFuZCBzZXRPclVwZGF0ZUxlYWZUYWdzLgojbmF0aXZlU3VwcG9ydDsKCi8vIFNldHMgdXAgdGhlIGpzLWludGVyb3Agc3VwcG9ydC4KI2pzSW50ZXJvcFN1cHBvcnQ7CgovLyBFbnN1cmUgaG9sZGVycyBhcmUgaW4gZmFzdCBtb2RlLCBub3cgd2UgaGF2ZSBmaW5pc2hlZCBhZGRpbmcgdGhpbmdzLgpjb252ZXJ0QWxsVG9GYXN0T2JqZWN0KGhvbGRlcnMpOwpjb252ZXJ0VG9GYXN0T2JqZWN0KCNzdGF0aWNTdGF0ZSk7CgovLyBJbnZva2VzIG1haW4gKG1ha2luZyBzdXJlIHRoYXQgaXQgcmVjb3JkcyB0aGUgJ2N1cnJlbnQtc2NyaXB0JyB2YWx1ZSkuCiNpbnZva2VNYWluOwp9KSgpCicnJzsKCi8vLyBBbiBleHByZXNzaW9uIHRoYXQgcmV0dXJucyBgdHJ1ZWAgaWYgYF9fcHJvdG9fX2AgY2FuIGJlIGFzc2lnbmVkIHRvIHN0aXRjaAovLy8gdG9nZXRoZXIgYSBwcm90b3R5cGUgY2hhaW4sIGFuZCB0aGUgcGVyZm9ybWFuY2UgaXMgZ29vZC4KY29uc3QgU3RyaW5nIGRpcmVjdEFjY2Vzc1Rlc3RFeHByZXNzaW9uID0gcicnJwogIChmdW5jdGlvbiAoKSB7CiAgICB2YXIgY2xzID0gZnVuY3Rpb24gKCkge307CiAgICBjbHMucHJvdG90eXBlID0geydwJzoge319OwogICAgdmFyIG9iamVjdCA9IG5ldyBjbHMoKTsKICAgIGlmICghKG9iamVjdC5fX3Byb3RvX18gJiYgb2JqZWN0Ll9fcHJvdG9fXy5wID09PSBjbHMucHJvdG90eXBlLnApKQogICAgICByZXR1cm4gZmFsc2U7CgogICAgdHJ5IHsKICAgICAgLy8gQXJlIHdlIHJ1bm5pbmcgb24gYSBwbGF0Zm9ybSB3aGVyZSB0aGUgcGVyZm9ybWFuY2UgaXMgZ29vZD8KICAgICAgLy8gKGkuZS4gQ2hyb21lIG9yIGQ4KS4KCiAgICAgIC8vIENocm9tZSB1c2VyQWdlbnQ/CiAgICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9ICJ1bmRlZmluZWQiICYmCiAgICAgICAgICB0eXBlb2YgbmF2aWdhdG9yLnVzZXJBZ2VudCA9PSAic3RyaW5nIiAmJgogICAgICAgICAgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJDaHJvbWUvIikgPj0gMCkgcmV0dXJuIHRydWU7CiAgICAgIC8vIGQ4IHZlcnNpb24oKSBsb29rcyBsaWtlICJOLk4uTi5OIiwganNzaGVsbCB2ZXJzaW9uKCkgbGlrZSAiTiIuCiAgICAgIGlmICh0eXBlb2YgdmVyc2lvbiA9PSAiZnVuY3Rpb24iICYmCiAgICAgICAgICB2ZXJzaW9uLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgdmFyIHYgPSB2ZXJzaW9uKCk7CiAgICAgICAgaWYgKC9eXGQrXC5cZCtcLlxkK1wuXGQrJC8udGVzdCh2KSkgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0gY2F0Y2goXykge30KCiAgICByZXR1cm4gZmFsc2U7CiAgfSkoKQonJyc7CgovLy8gU29mdC1kZWZlcnJlZCBmcmFnbWVudHMgYXJlIGJ1aWx0IHNpbWlsYXJseSB0byB0aGUgbWFpbiBmcmFnbWVudC4KCi8vLyBEZWZlcnJlZCBmcmFnbWVudHMgKGFrYSAnaHVua3MnKSBhcmUgYnVpbHQgc2ltaWxhcmx5IHRvIHRoZSBtYWluIGZyYWdtZW50LgovLy8KLy8vIEhvd2V2ZXIsIGF0IHNwZWNpZmljIG1vbWVudHMgdGhleSBuZWVkIHRvIGNvbnRyaWJ1dGUgdGhlaXIgZGF0YS4KLy8vIEZvciBleGFtcGxlLCBvbmNlIHRoZSBob2xkZXJzIGhhdmUgYmVlbiBjcmVhdGVkLCB0aGV5IGFyZSBpbmNsdWRlZCBpbnRvCi8vLyB0aGUgbWFpbiBob2xkZXJzLgovLy8KLy8vIFRoaXMgdGVtcGxhdGUgaXMgdXNlZCBmb3IgRGFydCAyLgpjb25zdCBTdHJpbmcgZGVmZXJyZWRCb2lsZXJwbGF0ZURhcnQyID0gJycnCmZ1bmN0aW9uKGh1bmtIZWxwZXJzLCAjZW1iZWRkZWRHbG9iYWxzT2JqZWN0LCBob2xkZXJzTGlzdCwgI3N0YXRpY1N0YXRlKSB7CgovLyBCdWlsZHMgdGhlIGhvbGRlcnMuIFRoZXkgb25seSBjb250YWluIHRoZSBkYXRhIGZvciBuZXcgaG9sZGVycy4KI2hvbGRlcnM7CgovLyBJZiB0aGUgbmFtZSBpcyBub3Qgc2V0IG9uIHRoZSBmdW5jdGlvbnMsIGRvIGl0IG5vdy4KaHVua0hlbHBlcnMuc2V0RnVuY3Rpb25OYW1lc0lmTmVjZXNzYXJ5KCNkZWZlcnJlZEhvbGRlcnNMaXN0KTsKCi8vIFVwZGF0ZXMgdGhlIGhvbGRlcnMgb2YgdGhlIG1haW4tZnJhZ21lbnQuIFVzZXMgdGhlIHByb3ZpZGVkIGhvbGRlcnNMaXN0IHRvCi8vIGFjY2VzcyB0aGUgbWFpbiBob2xkZXJzLgovLyBUaGUgbG9jYWwgaG9sZGVycyBhcmUgcmVwbGFjZWQgYnkgdGhlIGNvbWJpbmVkIGhvbGRlcnMuIFRoaXMgaXMgbmVjZXNzYXJ5Ci8vIGZvciB0aGUgaW5oZXJpdGFuY2Ugc2V0dXAgYmVsb3cuCiN1cGRhdGVIb2xkZXJzOwovLyBTZXRzIHRoZSBwcm90b3R5cGVzIG9mIHRoZSBuZXcgY2xhc3Nlcy4KI3Byb3RvdHlwZXM7Ci8vIEFkZCBzaWduYXR1cmUgZnVuY3Rpb24gdHlwZXMgYW5kIGNvbXB1dGUgdGhlIHR5cGVzIG9mZnNldCBpbiBgaW5pdC50eXBlc2AuCi8vIFRoZXNlIGNhbiBvbmx5IHJlZmVyIHRvIHJlZ3VsYXIgY2xhc3NlcyBhbmQgaW4gRGFydCAyIG9ubHkgY2xvc3VyZXMgaGF2ZQovLyBmdW5jdGlvbiB0eXBlcyBzbyB0aGUgYHR5cGVzT2Zmc2V0YCBoYXMgYmVlbiBzYWZlbHkgY29tcHV0ZWQgYmVmb3JlIGl0J3MKLy8gcmVmZXJyZWQgaW4gdGhlIHNpZ25hdHVyZXMgb2YgdGhlIGBjbG9zdXJlc2AgYmVsb3cuCnZhciAjdHlwZXNPZmZzZXQgPSBodW5rSGVscGVycy51cGRhdGVUeXBlcygjdHlwZXMpOwojY2xvc3VyZXM7Ci8vIFNldHMgYWxpYXNlcyBvZiBtZXRob2RzIChvbiB0aGUgcHJvdG90eXBlcyBvZiBjbGFzc2VzKS4KI2FsaWFzZXM7Ci8vIEluc3RhbGxzIHRoZSB0ZWFyLW9mZnMgb2YgZnVuY3Rpb25zLgojdGVhck9mZnM7Ci8vIEJ1aWxkcyB0aGUgaW5oZXJpdGFuY2Ugc3RydWN0dXJlLgojaW5oZXJpdGFuY2U7CgovLyBBZGRzIHRoZSBzdWJ0eXBlIHJ1bGVzIGZvciB0aGUgbmV3IFJUSS4KI3R5cGVSdWxlczsKCi8vIEluc3RhbnRpYXRlcyBhbGwgY29uc3RhbnRzIG9mIHRoaXMgZGVmZXJyZWQgZnJhZ21lbnQuCi8vIE5vdGUgdGhhdCB0aGUgY29uc3RhbnQtaG9sZGVyIGhhcyBiZWVuIHVwZGF0ZWQgZWFybGllciBhbmQgc3RvcmluZyB0aGUKLy8gY29uc3RhbnQgdmFsdWVzIGluIHRoZSBjb25zdGFudC1ob2xkZXIgbWFrZXMgdGhlbSBhdmFpbGFibGUgZ2xvYmFsbHkuCiNjb25zdGFudHM7Ci8vIEluaXRpYWxpemVzIHRoZSBzdGF0aWMgbm9uLWZpbmFsIGZpZWxkcyAod2l0aCB0aGVpciBjb25zdGFudCB2YWx1ZXMpLgojc3RhdGljTm9uRmluYWxGaWVsZHM7Ci8vIENyZWF0ZXMgbGF6eSBnZXR0ZXJzIGZvciBzdGF0aWNzIHRoYXQgbXVzdCBydW4gaW5pdGlhbGl6ZXJzIG9uIGZpcnN0IGFjY2Vzcy4KI2xhenlTdGF0aWNzOwoKLy8gTmF0aXZlLXN1cHBvcnQgdXNlcyBzZXRPclVwZGF0ZUludGVyY2VwdG9yc0J5VGFnIGFuZCBzZXRPclVwZGF0ZUxlYWZUYWdzLgojbmF0aXZlU3VwcG9ydDsKfScnJzsKCi8vLwovLy8gSG93ZXZlciwgdGhleSBkb24ndCBjb250cmlidXRlIGFueXRoaW5nIHRvIGdsb2JhbCBuYW1lc3BhY2UsIGJ1dCBqdXN0Ci8vLyBpbml0aWFsaXplIGV4aXN0aW5nIGNsYXNzZXMuIEZvciBleGFtcGxlLCB0aGV5IHVwZGF0ZSB0aGUgaW5oZXJpdGFuY2UKLy8vIGhpZXJhcmNoeSwgYW5kIGFkZCBtZXRob2RzIHRoZSBwcm90b3R5cGVzLgpjb25zdCBTdHJpbmcgc29mdERlZmVycmVkQm9pbGVycGxhdGUgPSAnJycKI2RlZmVycmVkR2xvYmFsWyNzb2Z0SWRdID0KICBmdW5jdGlvbihob2xkZXJzTGlzdCwgI2VtYmVkZGVkR2xvYmFsc09iamVjdCwgI3N0YXRpY1N0YXRlLAogICAgICAgICAgIGh1bmtIZWxwZXJzKSB7CgovLyBJbnN0YWxscyB0aGUgaG9sZGVycyBhcyBsb2NhbCB2YXJpYWJsZXMuCiNpbnN0YWxsSG9sZGVyc0FzTG9jYWxzOwovLyBTZXRzIHRoZSBwcm90b3R5cGVzIG9mIHRoZSBuZXcgY2xhc3Nlcy4KI3Byb3RvdHlwZXM7Ci8vIFNldHMgYWxpYXNlcyBvZiBtZXRob2RzIChvbiB0aGUgcHJvdG90eXBlcyBvZiBjbGFzc2VzKS4KI2FsaWFzZXM7Ci8vIEluc3RhbGxzIHRoZSB0ZWFyLW9mZnMgb2YgZnVuY3Rpb25zLgojdGVhck9mZnM7Ci8vIEJ1aWxkcyB0aGUgaW5oZXJpdGFuY2Ugc3RydWN0dXJlLgojaW5oZXJpdGFuY2U7Cn0nJyc7CgovLy8gVGhpcyBjbGFzcyBidWlsZHMgYSBKYXZhU2NyaXB0IHRyZWUgZm9yIGEgZ2l2ZW4gZnJhZ21lbnQuCi8vLwovLy8gQSBmcmFnbWVudCBpcyBnZW5lcmFsbHkgd3JpdHRlbiBpbnRvIGEgc2VwYXJhdGUgZmlsZSBzbyB0aGF0IGl0IGNhbiBiZQovLy8gbG9hZGVkIGR5bmFtaWNhbGx5IHdoZW4gYSBkZWZlcnJlZCBsaWJyYXJ5IGlzIGxvYWRlZC4KLy8vCi8vLyBUaGlzIGNsYXNzIGlzIHN0YXRlbGVzcyBhbmQgY2FuIGJlIHJldXNlZCBmb3IgZGlmZmVyZW50IGZyYWdtZW50cy4KY2xhc3MgRnJhZ21lbnRFbWl0dGVyIHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgZmluYWwgRHVtcEluZm9UYXNrIF9kdW1wSW5mb1Rhc2s7CiAgZmluYWwgTmFtZXIgX25hbWVyOwogIGZpbmFsIEVtaXR0ZXIgX2VtaXR0ZXI7CiAgZmluYWwgQ29uc3RhbnRFbWl0dGVyIF9jb25zdGFudEVtaXR0ZXI7CiAgZmluYWwgTW9kZWxFbWl0dGVyIF9tb2RlbEVtaXR0ZXI7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBDb2RlZ2VuV29ybGQgX2NvZGVnZW5Xb3JsZDsKICBSZWNpcGVFbmNvZGVyIF9yZWNpcGVFbmNvZGVyOwogIFJ1bGVzZXRFbmNvZGVyIF9ydWxlc2V0RW5jb2RlcjsKCiAgRGFydFR5cGVzIGdldCBfZGFydFR5cGVzID0+IF9jbG9zZWRXb3JsZC5kYXJ0VHlwZXM7CiAgSkVsZW1lbnRFbnZpcm9ubWVudCBnZXQgX2VsZW1lbnRFbnZpcm9ubWVudCA9PgogICAgICBfY2xvc2VkV29ybGQuZWxlbWVudEVudmlyb25tZW50OwoKICBqcy5OYW1lIF9jYWxsME5hbWUsIF9jYWxsMU5hbWUsIF9jYWxsMk5hbWU7CiAganMuTmFtZSBnZXQgY2FsbDBOYW1lID0+CiAgICAgIF9jYWxsME5hbWUgPz89IF9uYW1lci5nZXROYW1lRm9ySnNHZXROYW1lKG51bGwsIEpzR2V0TmFtZS5DQUxMX1BSRUZJWDApOwogIGpzLk5hbWUgZ2V0IGNhbGwxTmFtZSA9PgogICAgICBfY2FsbDFOYW1lID8/PSBfbmFtZXIuZ2V0TmFtZUZvckpzR2V0TmFtZShudWxsLCBKc0dldE5hbWUuQ0FMTF9QUkVGSVgxKTsKICBqcy5OYW1lIGdldCBjYWxsMk5hbWUgPT4KICAgICAgX2NhbGwyTmFtZSA/Pz0gX25hbWVyLmdldE5hbWVGb3JKc0dldE5hbWUobnVsbCwgSnNHZXROYW1lLkNBTExfUFJFRklYMik7CgogIEZyYWdtZW50RW1pdHRlcigKICAgICAgdGhpcy5fb3B0aW9ucywKICAgICAgdGhpcy5fZHVtcEluZm9UYXNrLAogICAgICB0aGlzLl9uYW1lciwKICAgICAgdGhpcy5fZW1pdHRlciwKICAgICAgdGhpcy5fY29uc3RhbnRFbWl0dGVyLAogICAgICB0aGlzLl9tb2RlbEVtaXR0ZXIsCiAgICAgIHRoaXMuX2Nsb3NlZFdvcmxkLAogICAgICB0aGlzLl9jb2RlZ2VuV29ybGQpIHsKICAgIGlmIChfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSB7CiAgICAgIF9yZWNpcGVFbmNvZGVyID0gUmVjaXBlRW5jb2RlckltcGwoCiAgICAgICAgICBfY2xvc2VkV29ybGQsCiAgICAgICAgICBfb3B0aW9ucy5kaXNhYmxlUnRpT3B0aW1pemF0aW9uCiAgICAgICAgICAgICAgPyBUcml2aWFsUnVudGltZVR5cGVzU3Vic3RpdHV0aW9ucyhfY2xvc2VkV29ybGQpCiAgICAgICAgICAgICAgOiBSdW50aW1lVHlwZXNJbXBsKF9jbG9zZWRXb3JsZCksCiAgICAgICAgICBfY2xvc2VkV29ybGQubmF0aXZlRGF0YSwKICAgICAgICAgIF9jbG9zZWRXb3JsZC5lbGVtZW50RW52aXJvbm1lbnQsCiAgICAgICAgICBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMsCiAgICAgICAgICBfY2xvc2VkV29ybGQucnRpTmVlZCk7CiAgICAgIF9ydWxlc2V0RW5jb2RlciA9CiAgICAgICAgICBSdWxlc2V0RW5jb2RlcihfY2xvc2VkV29ybGQuZGFydFR5cGVzLCBfZW1pdHRlciwgX3JlY2lwZUVuY29kZXIpOwogICAgfQogIH0KCiAganMuRXhwcmVzc2lvbiBnZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzKFN0cmluZyBnbG9iYWwpID0+CiAgICAgIF9lbWl0dGVyLmdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoZ2xvYmFsKTsKCiAganMuRXhwcmVzc2lvbiBnZW5lcmF0ZUNvbnN0YW50UmVmZXJlbmNlKENvbnN0YW50VmFsdWUgdmFsdWUpID0+CiAgICAgIF9tb2RlbEVtaXR0ZXIuZ2VuZXJhdGVDb25zdGFudFJlZmVyZW5jZSh2YWx1ZSk7CgogIGpzLkV4cHJlc3Npb24gY2xhc3NSZWZlcmVuY2UoQ2xhc3MgY2xzKSB7CiAgICByZXR1cm4ganMuanMoJyMuIycsIFtjbHMuaG9sZGVyLm5hbWUsIGNscy5uYW1lXSk7CiAgfQoKICB2b2lkIHJlZ2lzdGVyRW50aXR5QXN0KEVudGl0eSBlbnRpdHksIGpzLk5vZGUgY29kZSwge0xpYnJhcnlFbnRpdHkgbGlicmFyeX0pIHsKICAgIF9kdW1wSW5mb1Rhc2sucmVnaXN0ZXJFbnRpdHlBc3QoZW50aXR5LCBjb2RlKTsKICAgIC8vIFRPRE8oc2lnbXVuZCk6IHN0b3AgcmVjb2RpbmcgYXNzb2NpYXRpb25zIHR3aWNlLCBkdW1wLWluZm8gYWxyZWFkeQogICAgLy8gaGFzIGxpYnJhcnkgdG8gZWxlbWVudCBkZXBlbmRlbmNpZXMgdG8gcmVjb3ZlciB0aGlzIGRhdGEuCiAgICBpZiAobGlicmFyeSAhPSBudWxsKSBfZHVtcEluZm9UYXNrLnJlZ2lzdGVyRW50aXR5QXN0KGxpYnJhcnksIGNvZGUpOwogIH0KCiAganMuU3RhdGVtZW50IGVtaXRNYWluRnJhZ21lbnQoCiAgICAgIFByb2dyYW0gcHJvZ3JhbSwgRGVmZXJyZWRMb2FkaW5nU3RhdGUgZGVmZXJyZWRMb2FkaW5nU3RhdGUpIHsKICAgIE1haW5GcmFnbWVudCBmcmFnbWVudCA9IHByb2dyYW0uZnJhZ21lbnRzLmZpcnN0OwoKICAgIEl0ZXJhYmxlPEhvbGRlcj4gbm9uU3RhdGljU3RhdGVIb2xkZXJzID0KICAgICAgICBwcm9ncmFtLmhvbGRlcnMud2hlcmUoKEhvbGRlciBob2xkZXIpID0+ICFob2xkZXIuaXNTdGF0aWNTdGF0ZUhvbGRlcik7CgogICAgU3RyaW5nIHNvZnREZWZlcnJlZElkID0gInNvZnREZWZlcnJlZCR7bmV3IFJhbmRvbSgpLm5leHRJbnQoMHg3RkZGRkZGRil9IjsKCiAgICBIb2xkZXJDb2RlIGhvbGRlckNvZGUgPQogICAgICAgIGVtaXRIb2xkZXJzKHByb2dyYW0uaG9sZGVycywgZnJhZ21lbnQsIGluaXRpYWxpemVFbXB0eUhvbGRlcnM6IHRydWUpOwoKICAgIGpzLlN0YXRlbWVudCBtYWluQ29kZSA9IGpzLmpzLnN0YXRlbWVudChtYWluQm9pbGVycGxhdGUsIHsKICAgICAgLy8gVE9ETygyOTQ1NSk6ICdodW5rSGVscGVycycgZGlzcGxhY2VzIG90aGVyIG5hbWVzLCBzbyBkb24ndCBtaW5pZnkgaXQuCiAgICAgICdodW5rSGVscGVycyc6IGpzLlZhcmlhYmxlRGVjbGFyYXRpb24oJ2h1bmtIZWxwZXJzJywgYWxsb3dSZW5hbWU6IGZhbHNlKSwKICAgICAgJ2RpcmVjdEFjY2Vzc1Rlc3RFeHByZXNzaW9uJzoganMuanMoZGlyZWN0QWNjZXNzVGVzdEV4cHJlc3Npb24pLAogICAgICAnY3ljbGljVGhyb3cnOiBfZW1pdHRlcgogICAgICAgICAgLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5jeWNsaWNUaHJvd0hlbHBlciksCiAgICAgICdvcGVyYXRvcklzUHJlZml4JzoganMuc3RyaW5nKF9uYW1lci5maXhlZE5hbWVzLm9wZXJhdG9ySXNQcmVmaXgpLAogICAgICAndGVhck9mZkNvZGUnOiBuZXcganMuQmxvY2soYnVpbGRUZWFyT2ZmQ29kZSgKICAgICAgICAgIF9vcHRpb25zLCBfZW1pdHRlciwgX25hbWVyLCBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMpKSwKICAgICAgJ2VtYmVkZGVkVHlwZXMnOiBnZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzKFRZUEVTKSwKICAgICAgJ2VtYmVkZGVkSW50ZXJjZXB0b3JUYWdzJzoKICAgICAgICAgIGdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoSU5URVJDRVBUT1JTX0JZX1RBRyksCiAgICAgICdlbWJlZGRlZExlYWZUYWdzJzogZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2VzcyhMRUFGX1RBR1MpLAogICAgICAnZW1iZWRkZWRHbG9iYWxzT2JqZWN0JzoganMuanMoImluaXQiKSwKICAgICAgJ3N0YXRpY1N0YXRlRGVjbGFyYXRpb24nOiBuZXcganMuVmFyaWFibGVEZWNsYXJhdGlvbigKICAgICAgICAgIF9uYW1lci5zdGF0aWNTdGF0ZUhvbGRlciwKICAgICAgICAgIGFsbG93UmVuYW1lOiBmYWxzZSksCiAgICAgICdzdGF0aWNTdGF0ZSc6IGpzLmpzKCcjJywgX25hbWVyLnN0YXRpY1N0YXRlSG9sZGVyKSwKICAgICAgJ2NvbnN0YW50SG9sZGVyUmVmZXJlbmNlJzogYnVpbGRDb25zdGFudEhvbGRlclJlZmVyZW5jZShwcm9ncmFtKSwKICAgICAgJ2hvbGRlcnMnOiBob2xkZXJDb2RlLnN0YXRlbWVudHMsCiAgICAgICdjYWxsTmFtZSc6IGpzLnN0cmluZyhfbmFtZXIuZml4ZWROYW1lcy5jYWxsTmFtZUZpZWxkKSwKICAgICAgJ3N0dWJOYW1lJzoganMuc3RyaW5nKF9uYW1lci5zdHViTmFtZUZpZWxkKSwKICAgICAgJ2FyZ3VtZW50Q291bnQnOiBqcy5zdHJpbmcoX25hbWVyLmZpeGVkTmFtZXMucmVxdWlyZWRQYXJhbWV0ZXJGaWVsZCksCiAgICAgICdkZWZhdWx0QXJndW1lbnRWYWx1ZXMnOiBqcy5zdHJpbmcoX25hbWVyLmZpeGVkTmFtZXMuZGVmYXVsdFZhbHVlc0ZpZWxkKSwKICAgICAgJ2RlZmVycmVkR2xvYmFsJzogTW9kZWxFbWl0dGVyLmRlZmVycmVkSW5pdGlhbGl6ZXJzR2xvYmFsLAogICAgICAnaGFzU29mdERlZmVycmVkQ2xhc3Nlcyc6IHByb2dyYW0uaGFzU29mdERlZmVycmVkQ2xhc3NlcywKICAgICAgJ3NvZnRJZCc6IGpzLnN0cmluZyhzb2Z0RGVmZXJyZWRJZCksCiAgICAgICdpc1RyYWNraW5nQWxsb2NhdGlvbnMnOiBfb3B0aW9ucy5leHBlcmltZW50YWxUcmFja0FsbG9jYXRpb25zLAogICAgICAncHJvdG90eXBlcyc6IGVtaXRQcm90b3R5cGVzKGZyYWdtZW50KSwKICAgICAgJ2luaGVyaXRhbmNlJzogZW1pdEluaGVyaXRhbmNlKGZyYWdtZW50KSwKICAgICAgJ2FsaWFzZXMnOiBlbWl0SW5zdGFuY2VNZXRob2RBbGlhc2VzKGZyYWdtZW50KSwKICAgICAgJ3RlYXJPZmZzJzogZW1pdEluc3RhbGxUZWFyT2ZmcyhmcmFnbWVudCksCiAgICAgICdjb25zdGFudHMnOiBlbWl0Q29uc3RhbnRzKGZyYWdtZW50KSwKICAgICAgJ3N0YXRpY05vbkZpbmFsRmllbGRzJzogZW1pdFN0YXRpY05vbkZpbmFsRmllbGRzKGZyYWdtZW50KSwKICAgICAgJ2xhenlTdGF0aWNzJzogZW1pdExhemlseUluaXRpYWxpemVkU3RhdGljcyhmcmFnbWVudCksCiAgICAgICdlbWJlZGRlZEdsb2JhbHNQYXJ0MSc6CiAgICAgICAgICBlbWl0RW1iZWRkZWRHbG9iYWxzUGFydDEocHJvZ3JhbSwgZGVmZXJyZWRMb2FkaW5nU3RhdGUpLAogICAgICAnZW1iZWRkZWRHbG9iYWxzUGFydDInOgogICAgICAgICAgZW1pdEVtYmVkZGVkR2xvYmFsc1BhcnQyKHByb2dyYW0sIGRlZmVycmVkTG9hZGluZ1N0YXRlKSwKICAgICAgJ3R5cGVSdWxlcyc6IGVtaXRUeXBlUnVsZXMoZnJhZ21lbnQpLAogICAgICAnbmF0aXZlU3VwcG9ydCc6IHByb2dyYW0ubmVlZHNOYXRpdmVTdXBwb3J0CiAgICAgICAgICA/IGVtaXROYXRpdmVTdXBwb3J0KGZyYWdtZW50KQogICAgICAgICAgOiBuZXcganMuRW1wdHlTdGF0ZW1lbnQoKSwKICAgICAgJ2pzSW50ZXJvcFN1cHBvcnQnOiBqc0ludGVyb3BBbmFseXNpcy5idWlsZEpzSW50ZXJvcEJvb3RzdHJhcCgKICAgICAgICAgICAgICBfY29kZWdlbldvcmxkLCBfY2xvc2VkV29ybGQubmF0aXZlRGF0YSwgX25hbWVyKSA/PwogICAgICAgICAgbmV3IGpzLkVtcHR5U3RhdGVtZW50KCksCiAgICAgICdpbnZva2VNYWluJzogZnJhZ21lbnQuaW52b2tlTWFpbiwKCiAgICAgICdjYWxsMHNlbGVjdG9yJzoganMucXVvdGVOYW1lKGNhbGwwTmFtZSksCiAgICAgICdjYWxsMXNlbGVjdG9yJzoganMucXVvdGVOYW1lKGNhbGwxTmFtZSksCiAgICAgICdjYWxsMnNlbGVjdG9yJzoganMucXVvdGVOYW1lKGNhbGwyTmFtZSksCiAgICB9KTsKICAgIGlmIChwcm9ncmFtLmhhc1NvZnREZWZlcnJlZENsYXNzZXMpIHsKICAgICAgcmV0dXJuIG5ldyBqcy5CbG9jayhbCiAgICAgICAganMuanMuc3RhdGVtZW50KHNvZnREZWZlcnJlZEJvaWxlcnBsYXRlLCB7CiAgICAgICAgICAnZGVmZXJyZWRHbG9iYWwnOiBNb2RlbEVtaXR0ZXIuZGVmZXJyZWRJbml0aWFsaXplcnNHbG9iYWwsCiAgICAgICAgICAnc29mdElkJzoganMuc3RyaW5nKHNvZnREZWZlcnJlZElkKSwKICAgICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBkb24ndCBqdXN0IHJlZmVyZW5jZSAnaW5pdCcuCiAgICAgICAgICAnZW1iZWRkZWRHbG9iYWxzT2JqZWN0JzogbmV3IGpzLlBhcmFtZXRlcignaW5pdCcpLAogICAgICAgICAgJ3N0YXRpY1N0YXRlJzogbmV3IGpzLlBhcmFtZXRlcihfbmFtZXIuc3RhdGljU3RhdGVIb2xkZXIpLAogICAgICAgICAgJ2luc3RhbGxIb2xkZXJzQXNMb2NhbHMnOgogICAgICAgICAgICAgIGVtaXRJbnN0YWxsSG9sZGVyc0FzTG9jYWxzKG5vblN0YXRpY1N0YXRlSG9sZGVycyksCiAgICAgICAgICAncHJvdG90eXBlcyc6IGVtaXRQcm90b3R5cGVzKGZyYWdtZW50LCBzb2Z0RGVmZXJyZWQ6IHRydWUpLAogICAgICAgICAgJ2FsaWFzZXMnOiBlbWl0SW5zdGFuY2VNZXRob2RBbGlhc2VzKGZyYWdtZW50LCBzb2Z0RGVmZXJyZWQ6IHRydWUpLAogICAgICAgICAgJ3RlYXJPZmZzJzogZW1pdEluc3RhbGxUZWFyT2ZmcyhmcmFnbWVudCwgc29mdERlZmVycmVkOiB0cnVlKSwKICAgICAgICAgICdpbmhlcml0YW5jZSc6IGVtaXRJbmhlcml0YW5jZShmcmFnbWVudCwgc29mdERlZmVycmVkOiB0cnVlKSwKICAgICAgICB9KSwKICAgICAgICBtYWluQ29kZQogICAgICBdKTsKICAgIH0KICAgIHJldHVybiBtYWluQ29kZTsKICB9CgogIGpzLlN0YXRlbWVudCBlbWl0SW5zdGFsbEhvbGRlcnNBc0xvY2FscyhJdGVyYWJsZTxIb2xkZXI+IGhvbGRlcnMpIHsKICAgIExpc3Q8anMuU3RhdGVtZW50PiBob2xkZXJJbml0cyA9IFtdOwogICAgaW50IGNvdW50ZXIgPSAwOwogICAgZm9yIChIb2xkZXIgaG9sZGVyIGluIGhvbGRlcnMpIHsKICAgICAgaG9sZGVySW5pdHMuYWRkKG5ldyBqcy5FeHByZXNzaW9uU3RhdGVtZW50KG5ldyBqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uKAogICAgICAgICAgbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb24oaG9sZGVyLm5hbWUsIGFsbG93UmVuYW1lOiBmYWxzZSksCiAgICAgICAgICBqcy5qcygiaG9sZGVyc0xpc3RbI10iLCBqcy5udW1iZXIoY291bnRlcisrKSkpKSk7CiAgICB9CiAgICByZXR1cm4gbmV3IGpzLkJsb2NrKGhvbGRlckluaXRzKTsKICB9CgogIGpzLkV4cHJlc3Npb24gZW1pdERlZmVycmVkRnJhZ21lbnQoRGVmZXJyZWRGcmFnbWVudCBmcmFnbWVudCwKICAgICAganMuRXhwcmVzc2lvbiBkZWZlcnJlZFR5cGVzLCBMaXN0PEhvbGRlcj4gaG9sZGVycykgewogICAgSG9sZGVyQ29kZSBob2xkZXJDb2RlID0KICAgICAgICBlbWl0SG9sZGVycyhob2xkZXJzLCBmcmFnbWVudCwgaW5pdGlhbGl6ZUVtcHR5SG9sZGVyczogZmFsc2UpOwoKICAgIExpc3Q8SG9sZGVyPiBub25TdGF0aWNTdGF0ZUhvbGRlcnMgPSBob2xkZXJzCiAgICAgICAgLndoZXJlKChIb2xkZXIgaG9sZGVyKSA9PiAhaG9sZGVyLmlzU3RhdGljU3RhdGVIb2xkZXIpCiAgICAgICAgLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwoKICAgIExpc3Q8anMuU3RhdGVtZW50PiB1cGRhdGVIb2xkZXJBc3NpZ25tZW50cyA9IFtdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBub25TdGF0aWNTdGF0ZUhvbGRlcnMubGVuZ3RoOyBpKyspIHsKICAgICAgSG9sZGVyIGhvbGRlciA9IG5vblN0YXRpY1N0YXRlSG9sZGVyc1tpXTsKICAgICAgaWYgKGhvbGRlckNvZGUuYWN0aXZlSG9sZGVycy5jb250YWlucyhob2xkZXIpKSB7CiAgICAgICAgdXBkYXRlSG9sZGVyQXNzaWdubWVudHMuYWRkKGpzLmpzLnN0YXRlbWVudCgKICAgICAgICAgICAgJyNob2xkZXIgPSBodW5rSGVscGVycy51cGRhdGVIb2xkZXIoaG9sZGVyc0xpc3RbI2luZGV4XSwgI2hvbGRlciknLAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgJ2luZGV4JzoganMubnVtYmVyKGkpLAogICAgICAgICAgICAgICdob2xkZXInOiBuZXcganMuVmFyaWFibGVVc2UoaG9sZGVyLm5hbWUpCiAgICAgICAgICAgIH0pKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUT0RPKHNyYSk6IENoYW5nZSBkZWNsYXJhdGlvbiBmb2xsb3dlZCBieSBhc3NpZ25tZW50cyB0byBkZWNsYXJhdGlvbnMKICAgICAgICAvLyB3aXRoIGluaXRpYWxpemF0aW9uLgogICAgICAgIHVwZGF0ZUhvbGRlckFzc2lnbm1lbnRzLmFkZChqcy5qcy5zdGF0ZW1lbnQoCiAgICAgICAgICAgICcjaG9sZGVyID0gaG9sZGVyc0xpc3RbI2luZGV4XScsIHsKICAgICAgICAgICdpbmRleCc6IGpzLm51bWJlcihpKSwKICAgICAgICAgICdob2xkZXInOiBuZXcganMuVmFyaWFibGVVc2UoaG9sZGVyLm5hbWUpCiAgICAgICAgfSkpOwogICAgICB9CiAgICB9CgogICAgdmFyIGNsYXNzUHJvdG90eXBlcyA9IGVtaXRQcm90b3R5cGVzKGZyYWdtZW50LCBpbmNsdWRlQ2xvc3VyZXM6IGZhbHNlKTsKICAgIHZhciBjbG9zdXJlUHJvdG90eXBlcyA9IGVtaXRQcm90b3R5cGVzKGZyYWdtZW50LCBpbmNsdWRlQ2xvc3VyZXM6IHRydWUpOwogICAgdmFyIGluaGVyaXRhbmNlID0gZW1pdEluaGVyaXRhbmNlKGZyYWdtZW50KTsKICAgIHZhciBtZXRob2RBbGlhc2VzID0gZW1pdEluc3RhbmNlTWV0aG9kQWxpYXNlcyhmcmFnbWVudCk7CiAgICB2YXIgdGVhck9mZnMgPSBlbWl0SW5zdGFsbFRlYXJPZmZzKGZyYWdtZW50KTsKICAgIHZhciBjb25zdGFudHMgPSBlbWl0Q29uc3RhbnRzKGZyYWdtZW50KTsKICAgIHZhciB0eXBlUnVsZXMgPSBlbWl0VHlwZVJ1bGVzKGZyYWdtZW50KTsKICAgIHZhciBzdGF0aWNOb25GaW5hbEZpZWxkcyA9IGVtaXRTdGF0aWNOb25GaW5hbEZpZWxkcyhmcmFnbWVudCk7CiAgICB2YXIgbGF6eUluaXRpYWxpemVycyA9IGVtaXRMYXppbHlJbml0aWFsaXplZFN0YXRpY3MoZnJhZ21lbnQpOwogICAgLy8gVE9ETyhmbG9pdHNjaCk6IG9ubHkgY2FsbCBlbWl0TmF0aXZlU3VwcG9ydCBpZiB3ZSBuZWVkIG5hdGl2ZS4KICAgIHZhciBuYXRpdmVTdXBwb3J0ID0gZW1pdE5hdGl2ZVN1cHBvcnQoZnJhZ21lbnQpOwoKICAgIC8vIFRPRE8oc3JhKTogSG93IGRvIHdlIHRlbGwgaWYgW2RlZmVycmVkVHlwZXNdIGlzIGVtcHR5PyBJdCBpcyBmaWxsZWQtaW4KICAgIC8vIGxhdGVyIHZpYSB0aGUgcHJvZ3JhbSBmaW5hbGl6ZXJzLiBTbyB3ZSBzaG91bGQgZGVmZXIgdGhlIGRlY2lzaW9uIG9uIHRoZQogICAgLy8gZW1wdGluZXNzIG9mIHRoZSBmcmFnbWVudCB1bnRpbCB0aGUgZmluYWxpemVycyBoYXZlIHJ1bi4gIEZvciBub3cgd2Ugc2VlbQogICAgLy8gdG8gZ2V0IGF3YXkgd2l0aCB0aGUgZmFjdCB0aGF0IHR5cGUgaW5kZXhlcyBhcmUgZWl0aGVyICgxKSBtYWluIHVuaXQgb3IKICAgIC8vICgyKSBsb2NhbCB0byB0aGUgZW1pdHRlZCB1bml0LCBzbyB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGEgdHlwZSBpbiBhCiAgICAvLyBkZWZlcnJlZCB1bml0IHRoYXQgaXMgcmVmZXJlbmNlZCBmcm9tIGFub3RoZXIgZGVmZXJyZWQgdW5pdC4gIElmIHdlIGRpZAogICAgLy8gbm90IGVtaXQgYW55IGZ1bmN0aW9ucywgdGhlbiB3ZSBwcm9iYWJseSBkaWQgbm90IHVzZSB0aGUgc2lnbmF0dXJlIHR5cGVzCiAgICAvLyBpbiB0aGUgT3V0cHV0VW5pdCdzIHR5cGVzLCBsZWF2aW5nIHRoZW0gdW51c2VkIGFuZCB0cmVlLXNoYWtlbi4KCiAgICBpZiAoaG9sZGVyQ29kZS5hY3RpdmVIb2xkZXJzLmlzRW1wdHkgJiYKICAgICAgICBpc0VtcHR5U3RhdGVtZW50KGNsYXNzUHJvdG90eXBlcykgJiYKICAgICAgICBpc0VtcHR5U3RhdGVtZW50KGNsb3N1cmVQcm90b3R5cGVzKSAmJgogICAgICAgIGlzRW1wdHlTdGF0ZW1lbnQoaW5oZXJpdGFuY2UpICYmCiAgICAgICAgaXNFbXB0eVN0YXRlbWVudChtZXRob2RBbGlhc2VzKSAmJgogICAgICAgIGlzRW1wdHlTdGF0ZW1lbnQodGVhck9mZnMpICYmCiAgICAgICAgaXNFbXB0eVN0YXRlbWVudChjb25zdGFudHMpICYmCiAgICAgICAgaXNFbXB0eVN0YXRlbWVudChzdGF0aWNOb25GaW5hbEZpZWxkcykgJiYKICAgICAgICBpc0VtcHR5U3RhdGVtZW50KGxhenlJbml0aWFsaXplcnMpICYmCiAgICAgICAgaXNFbXB0eVN0YXRlbWVudChuYXRpdmVTdXBwb3J0KSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBqcy5FeHByZXNzaW9uIGNvZGUgPSBqcy5qcyhkZWZlcnJlZEJvaWxlcnBsYXRlRGFydDIsIHsKICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IGRvbid0IGp1c3QgcmVmZXJlbmNlICdpbml0Jy4KICAgICAgJ2VtYmVkZGVkR2xvYmFsc09iamVjdCc6IG5ldyBqcy5QYXJhbWV0ZXIoJ2luaXQnKSwKICAgICAgJ3N0YXRpY1N0YXRlJzogbmV3IGpzLlBhcmFtZXRlcihfbmFtZXIuc3RhdGljU3RhdGVIb2xkZXIpLAogICAgICAnaG9sZGVycyc6IGhvbGRlckNvZGUuc3RhdGVtZW50cywKICAgICAgJ2RlZmVycmVkSG9sZGVyc0xpc3QnOiBuZXcganMuQXJyYXlJbml0aWFsaXplcihob2xkZXJDb2RlLmFjdGl2ZUhvbGRlcnMKICAgICAgICAgIC5tYXAoKGhvbGRlcikgPT4ganMuanMoIiMiLCBob2xkZXIubmFtZSkpCiAgICAgICAgICAudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSkpLAogICAgICAndXBkYXRlSG9sZGVycyc6IG5ldyBqcy5CbG9jayh1cGRhdGVIb2xkZXJBc3NpZ25tZW50cyksCiAgICAgICdwcm90b3R5cGVzJzogY2xhc3NQcm90b3R5cGVzLAogICAgICAnY2xvc3VyZXMnOiBjbG9zdXJlUHJvdG90eXBlcywKICAgICAgJ2luaGVyaXRhbmNlJzogaW5oZXJpdGFuY2UsCiAgICAgICdhbGlhc2VzJzogbWV0aG9kQWxpYXNlcywKICAgICAgJ3RlYXJPZmZzJzogdGVhck9mZnMsCiAgICAgICd0eXBlUnVsZXMnOiB0eXBlUnVsZXMsCiAgICAgICdjb25zdGFudHMnOiBjb25zdGFudHMsCiAgICAgICdzdGF0aWNOb25GaW5hbEZpZWxkcyc6IHN0YXRpY05vbkZpbmFsRmllbGRzLAogICAgICAnbGF6eVN0YXRpY3MnOiBsYXp5SW5pdGlhbGl6ZXJzLAogICAgICAndHlwZXMnOiBkZWZlcnJlZFR5cGVzLAogICAgICAnbmF0aXZlU3VwcG9ydCc6IG5hdGl2ZVN1cHBvcnQsCiAgICAgICd0eXBlc09mZnNldCc6IF9uYW1lci50eXBlc09mZnNldE5hbWUsCiAgICB9KTsKCiAgICBpZiAoX29wdGlvbnMuZXhwZXJpbWVudFN0YXJ0dXBGdW5jdGlvbnMpIHsKICAgICAgY29kZSA9IGpzLlBhcmVudGhlc2VzKGNvZGUpOwogICAgfQogICAgcmV0dXJuIGNvZGU7CiAgfQoKICAvLy8gRW1pdHMgYWxsIGhvbGRlcnMsIGV4Y2VwdCBmb3IgdGhlIHN0YXRpYy1zdGF0ZSBob2xkZXIuCiAgLy8vCiAgLy8vIFRoZSBlbWl0dGVkIGhvbGRlcnMgY29udGFpbiBjbGFzc2VzIChvbmx5IHRoZSBjb25zdHJ1Y3RvcnMpIGFuZCBhbGwKICAvLy8gc3RhdGljIGZ1bmN0aW9ucy4KICBIb2xkZXJDb2RlIGVtaXRIb2xkZXJzKExpc3Q8SG9sZGVyPiBob2xkZXJzLCBGcmFnbWVudCBmcmFnbWVudCwKICAgICAge2Jvb2wgaW5pdGlhbGl6ZUVtcHR5SG9sZGVyc30pIHsKICAgIGFzc2VydChpbml0aWFsaXplRW1wdHlIb2xkZXJzICE9IG51bGwpOwogICAgLy8gU2tpcCB0aGUgc3RhdGljLXN0YXRlIGhvbGRlciBpbiB0aGlzIGZ1bmN0aW9uLgogICAgaG9sZGVycyA9IGhvbGRlcnMKICAgICAgICAud2hlcmUoKEhvbGRlciBob2xkZXIpID0+ICFob2xkZXIuaXNTdGF0aWNTdGF0ZUhvbGRlcikKICAgICAgICAudG9MaXN0KGdyb3dhYmxlOiBmYWxzZSk7CgogICAgTWFwPEhvbGRlciwgTGlzdDxqcy5Qcm9wZXJ0eT4+IGhvbGRlckNvZGUgPSB7fTsKCiAgICBmb3IgKEhvbGRlciBob2xkZXIgaW4gaG9sZGVycykgewogICAgICBob2xkZXJDb2RlW2hvbGRlcl0gPSA8anMuUHJvcGVydHk+W107CiAgICB9CgogICAgZm9yIChMaWJyYXJ5IGxpYnJhcnkgaW4gZnJhZ21lbnQubGlicmFyaWVzKSB7CiAgICAgIGZvciAoU3RhdGljTWV0aG9kIG1ldGhvZCBpbiBsaWJyYXJ5LnN0YXRpY3MpIHsKICAgICAgICBhc3NlcnQoIW1ldGhvZC5ob2xkZXIuaXNTdGF0aWNTdGF0ZUhvbGRlcik7CiAgICAgICAgTWFwPGpzLk5hbWUsIGpzLkV4cHJlc3Npb24+IHByb3BlcnR5TWFwID0gZW1pdFN0YXRpY01ldGhvZChtZXRob2QpOwogICAgICAgIHByb3BlcnR5TWFwLmZvckVhY2goKGpzLk5hbWUga2V5LCBqcy5FeHByZXNzaW9uIHZhbHVlKSB7CiAgICAgICAgICB2YXIgcHJvcGVydHkgPSBuZXcganMuUHJvcGVydHkoanMucXVvdGVOYW1lKGtleSksIHZhbHVlKTsKICAgICAgICAgIGhvbGRlckNvZGVbbWV0aG9kLmhvbGRlcl0uYWRkKHByb3BlcnR5KTsKICAgICAgICAgIHJlZ2lzdGVyRW50aXR5QXN0KG1ldGhvZC5lbGVtZW50LCBwcm9wZXJ0eSwgbGlicmFyeTogbGlicmFyeS5lbGVtZW50KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBmb3IgKENsYXNzIGNscyBpbiBsaWJyYXJ5LmNsYXNzZXMpIHsKICAgICAgICBhc3NlcnQoIWNscy5ob2xkZXIuaXNTdGF0aWNTdGF0ZUhvbGRlcik7CiAgICAgICAganMuRXhwcmVzc2lvbiBjb25zdHJ1Y3RvciA9IGVtaXRDb25zdHJ1Y3RvcihjbHMpOwogICAgICAgIHZhciBwcm9wZXJ0eSA9IG5ldyBqcy5Qcm9wZXJ0eShqcy5xdW90ZU5hbWUoY2xzLm5hbWUpLCBjb25zdHJ1Y3Rvcik7CiAgICAgICAgcmVnaXN0ZXJFbnRpdHlBc3QoY2xzLmVsZW1lbnQsIHByb3BlcnR5LCBsaWJyYXJ5OiBsaWJyYXJ5LmVsZW1lbnQpOwogICAgICAgIGhvbGRlckNvZGVbY2xzLmhvbGRlcl0uYWRkKHByb3BlcnR5KTsKICAgICAgfQogICAgfQoKICAgIExpc3Q8anMuVmFyaWFibGVJbml0aWFsaXphdGlvbj4gaG9sZGVySW5pdGlhbGl6YXRpb25zID0gW107CiAgICBMaXN0PEhvbGRlcj4gYWN0aXZlSG9sZGVycyA9IFtdOwoKICAgIGZvciAoSG9sZGVyIGhvbGRlciBpbiBob2xkZXJzKSB7CiAgICAgIExpc3Q8anMuUHJvcGVydHk+IHByb3BlcnRpZXMgPSBob2xkZXJDb2RlW2hvbGRlcl07CiAgICAgIGlmIChwcm9wZXJ0aWVzLmlzRW1wdHkpIHsKICAgICAgICBob2xkZXJJbml0aWFsaXphdGlvbnMuYWRkKG5ldyBqcy5WYXJpYWJsZUluaXRpYWxpemF0aW9uKAogICAgICAgICAgICBuZXcganMuVmFyaWFibGVEZWNsYXJhdGlvbihob2xkZXIubmFtZSwgYWxsb3dSZW5hbWU6IGZhbHNlKSwKICAgICAgICAgICAgaW5pdGlhbGl6ZUVtcHR5SG9sZGVycwogICAgICAgICAgICAgICAgPyBuZXcganMuT2JqZWN0SW5pdGlhbGl6ZXIocHJvcGVydGllcykKICAgICAgICAgICAgICAgIDogbnVsbCkpOwogICAgICB9IGVsc2UgewogICAgICAgIGFjdGl2ZUhvbGRlcnMuYWRkKGhvbGRlcik7CiAgICAgICAgaG9sZGVySW5pdGlhbGl6YXRpb25zLmFkZChuZXcganMuVmFyaWFibGVJbml0aWFsaXphdGlvbigKICAgICAgICAgICAgbmV3IGpzLlZhcmlhYmxlRGVjbGFyYXRpb24oaG9sZGVyLm5hbWUsIGFsbG93UmVuYW1lOiBmYWxzZSksCiAgICAgICAgICAgIG5ldyBqcy5PYmplY3RJbml0aWFsaXplcihwcm9wZXJ0aWVzKSkpOwogICAgICB9CiAgICB9CgogICAgLy8gVGhlIGdlbmVyYXRlZCBjb2RlIGxvb2tzIGxpa2UgdGhpczoKICAgIC8vCiAgICAvLyAgICB7CiAgICAvLyAgICAgIHZhciBIID0gey4uLn0sIC4uLiwgRyA9IHsuLi59OwogICAgLy8gICAgICB2YXIgaG9sZGVycyA9IFsgSCwgLi4uLCBHIF07IC8vIE1haW4gdW5pdCBvbmx5LgogICAgLy8gICAgfQoKICAgIExpc3Q8anMuU3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gW107CiAgICBzdGF0ZW1lbnRzLmFkZChuZXcganMuRXhwcmVzc2lvblN0YXRlbWVudChuZXcganMuVmFyaWFibGVEZWNsYXJhdGlvbkxpc3QoCiAgICAgICAgaG9sZGVySW5pdGlhbGl6YXRpb25zLAogICAgICAgIGluZGVudFNwbGl0czogZmFsc2UpKSk7CiAgICBpZiAoaW5pdGlhbGl6ZUVtcHR5SG9sZGVycykgewogICAgICBzdGF0ZW1lbnRzLmFkZChqcy5qcy5zdGF0ZW1lbnQoCiAgICAgICAgICAndmFyIGhvbGRlcnMgPSAjJywKICAgICAgICAgIG5ldyBqcy5BcnJheUluaXRpYWxpemVyKGhvbGRlcnMKICAgICAgICAgICAgICAubWFwKChob2xkZXIpID0+IG5ldyBqcy5WYXJpYWJsZVVzZShob2xkZXIubmFtZSkpCiAgICAgICAgICAgICAgLnRvTGlzdChncm93YWJsZTogZmFsc2UpKSkpOwogICAgfQogICAgcmV0dXJuIG5ldyBIb2xkZXJDb2RlKAogICAgICBhY3RpdmVIb2xkZXJzOiBhY3RpdmVIb2xkZXJzLAogICAgICBzdGF0ZW1lbnRzOiBuZXcganMuQmxvY2soc3RhdGVtZW50cyksCiAgICApOwogIH0KCiAgLy8vIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGNvbnN0YW50IGhvbGRlciwgb3IgdGhlIEpTLWxpdGVyYWwgYG51bGxgLgogIGpzLkV4cHJlc3Npb24gYnVpbGRDb25zdGFudEhvbGRlclJlZmVyZW5jZShQcm9ncmFtIHByb2dyYW0pIHsKICAgIEhvbGRlciBjb25zdGFudEhvbGRlciA9IHByb2dyYW0uaG9sZGVycy5maXJzdFdoZXJlKAogICAgICAgIChIb2xkZXIgaG9sZGVyKSA9PiBob2xkZXIuaXNDb25zdGFudHNIb2xkZXIsCiAgICAgICAgb3JFbHNlOiAoKSA9PiBudWxsKTsKICAgIGlmIChjb25zdGFudEhvbGRlciA9PSBudWxsKSByZXR1cm4gbmV3IGpzLkxpdGVyYWxOdWxsKCk7CiAgICByZXR1cm4gbmV3IGpzLlZhcmlhYmxlVXNlKGNvbnN0YW50SG9sZGVyLm5hbWUpOwogIH0KCiAgLy8vIEVtaXRzIHRoZSBnaXZlbiBbbWV0aG9kXS4KICAvLy8KICAvLy8gQSBEYXJ0IG1ldGhvZCBtaWdodCByZXN1bHQgaW4gc2V2ZXJhbCBKYXZhU2NyaXB0IGZ1bmN0aW9ucywgaWYgaXQKICAvLy8gcmVxdWlyZXMgc3R1YnMuIFRoZSByZXR1cm5lZCBtYXAgY29udGFpbnMgdGhlIG9yaWdpbmFsIG1ldGhvZCBhbmQgYWxsCiAgLy8vIHRoZSBzdHVicyBpdCBuZWVkcy4KICBNYXA8anMuTmFtZSwganMuRXhwcmVzc2lvbj4gZW1pdFN0YXRpY01ldGhvZChTdGF0aWNNZXRob2QgbWV0aG9kKSB7CiAgICBNYXA8anMuTmFtZSwganMuRXhwcmVzc2lvbj4ganNNZXRob2RzID0ge307CgogICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBpbnN0YWxsIHN0dWItbWV0aG9kcy4gVGhleSBjYW4gb25seSBiZSB1c2VkIHdoZW4gdGhlcmUKICAgIC8vIGFyZSB0ZWFyLW9mZnMsIGluIHdoaWNoIGNhc2UgdGhleSBhcmUgZW1pdHRlZCB0aGVyZS4KICAgIGFzc2VydCgoKSB7CiAgICAgIGlmIChtZXRob2QgaXMgU3RhdGljRGFydE1ldGhvZCkgewogICAgICAgIHJldHVybiBtZXRob2QubmVlZHNUZWFyT2ZmIHx8IG1ldGhvZC5wYXJhbWV0ZXJTdHVicy5pc0VtcHR5OwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfSgpKTsKICAgIGpzTWV0aG9kc1ttZXRob2QubmFtZV0gPSBtZXRob2QuY29kZTsKCiAgICByZXR1cm4ganNNZXRob2RzOwogIH0KCiAgLy8vIEVtaXRzIGEgY29uc3RydWN0b3IgZm9yIHRoZSBnaXZlbiBjbGFzcyBbY2xzXS4KICAvLy8KICAvLy8gVGhlIGNvbnN0cnVjdG9yIGlzIHN0YXRpY2FsbHkgYnVpbHQuCiAganMuRXhwcmVzc2lvbiBlbWl0Q29uc3RydWN0b3IoQ2xhc3MgY2xzKSB7CiAgICBqcy5OYW1lIG5hbWUgPSBjbHMubmFtZTsKICAgIC8vIElmIHRoZSBjbGFzcyBpcyBub3QgZGlyZWN0bHkgaW5zdGFudGlhdGVkIHdlIG9ubHkgbmVlZCBpdCBmb3IgaW5oZXJpdGFuY2UKICAgIC8vIG9yIFJUSS4gSW4gZWl0aGVyIGNhc2Ugd2UgZG9uJ3QgbmVlZCBpdHMgZmllbGRzLgogICAgaWYgKGNscy5pc05hdGl2ZSB8fCAhY2xzLmlzRGlyZWN0bHlJbnN0YW50aWF0ZWQpIHsKICAgICAgcmV0dXJuIGpzLmpzKCdmdW5jdGlvbiAjKCkgeyB9JywgbmFtZSk7CiAgICB9CgogICAgdmFyIHN0YXRlbWVudHMgPSA8anMuU3RhdGVtZW50PltdOwogICAgdmFyIHBhcmFtZXRlcnMgPSA8anMuUGFyYW1ldGVyPltdOwogICAgdmFyIHRoaXNSZWY7CgogICAgaWYgKGNscy5pc1NvZnREZWZlcnJlZCkgewogICAgICBzdGF0ZW1lbnRzLmFkZChqcy5qcy5zdGF0ZW1lbnQoJ3NvZnREZWYodGhpcyknKSk7CiAgICB9IGVsc2UgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnRhbFRyYWNrQWxsb2NhdGlvbnMpIHsKICAgICAgU3RyaW5nIHF1YWxpZmllZE5hbWUgPQogICAgICAgICAgIiR7Y2xzLmVsZW1lbnQubGlicmFyeS5jYW5vbmljYWxVcml9OiR7Y2xzLmVsZW1lbnQubmFtZX0iOwogICAgICBzdGF0ZW1lbnRzLmFkZChqcy5qcy5zdGF0ZW1lbnQoJ2FsbG9jYXRpb25zWyIkcXVhbGlmaWVkTmFtZSJdID0gdHJ1ZScpKTsKICAgIH0KCiAgICBMaXN0PEZpZWxkPiBlbWl0dGVkRmllbGRzID0gY2xzLmZpZWxkcy53aGVyZSgoZikgPT4gIWYuaXNFbGlkZWQpLnRvTGlzdCgpOwoKICAgIC8vIElmIHRoZXJlIGFyZSBtYW55IHJlZmVyZW5jZXMgdG8gYHRoaXNgLCBjYWNoZSBpdCBpbiBhIGxvY2FsLgogICAgaWYgKGVtaXR0ZWRGaWVsZHMubGVuZ3RoICsgKGNscy5oYXNSdGlGaWVsZCA/IDEgOiAwKSA+PSA0KSB7CiAgICAgIC8vIFBhcmFtZXRlcnMgYXJlIG5hbWVkIHQwLCB0MSwgZXRjLCBzbyAnXycgd2lsbCBub3QgY29uZmxpY3QuIEZvcmNpbmcgJ18nCiAgICAgIC8vIGluIG1pbmlmaWVkIG1vZGUgd29ya3MgYmVjYXVzZSBubyBwYXJhbWV0ZXIgb3IgbG9jYWwgYWxzbyBtaW5pZmllcyB0bwogICAgICAvLyAnXycgKHRoZSBtaW5pZmllciBkb2Vzbid0IGtub3cgJ18nIGlzIGF2YWlsYWJsZSkuCiAgICAgIGpzLk5hbWUgdW5kZXJzY29yZSA9IG5ldyBTdHJpbmdCYWNrZWROYW1lKCdfJyk7CiAgICAgIHN0YXRlbWVudHMuYWRkKGpzLmpzLnN0YXRlbWVudCgndmFyICMgPSB0aGlzOycsIHVuZGVyc2NvcmUpKTsKICAgICAgdGhpc1JlZiA9IHVuZGVyc2NvcmU7CiAgICB9IGVsc2UgewogICAgICB0aGlzUmVmID0ganMuanMoJ3RoaXMnKTsKICAgIH0KCiAgICAvLyBDaGFpbiBhc3NpZ25tZW50cyBvZiB0aGUgc2FtZSB2YWx1ZSwgZS5nLiBgdGhpcy5iID0gdGhpcy5hID0gbnVsbGAuCiAgICAvLyBMaW1pdCBjaGFpbiBsZW5ndGggc28gdGhhdCB0aGUgSmF2YVNjcmlwdCBwYXJzZXIgaGFzIGJvdW5kZWQgcmVjdXJzaW9uLgogICAgY29uc3QgaW50IG1heENoYWluTGVuZ3RoID0gMzA7CiAgICBqcy5FeHByZXNzaW9uIGFzc2lnbm1lbnQgPSBudWxsOwogICAgaW50IGNoYWluTGVuZ3RoID0gMDsKICAgIENvbnN0YW50VmFsdWUgcHJldmlvdXNDb25zdGFudCA9IG51bGw7CiAgICB2b2lkIGZsdXNoQXNzaWdubWVudCgpIHsKICAgICAgaWYgKGFzc2lnbm1lbnQgIT0gbnVsbCkgewogICAgICAgIHN0YXRlbWVudHMuYWRkKGpzLmpzLnN0YXRlbWVudCgnIzsnLCBhc3NpZ25tZW50KSk7CiAgICAgICAgYXNzaWdubWVudCA9IG51bGw7CiAgICAgICAgY2hhaW5MZW5ndGggPSAwOwogICAgICAgIHByZXZpb3VzQ29uc3RhbnQgPSBudWxsOwogICAgICB9CiAgICB9CgogICAgZm9yIChGaWVsZCBmaWVsZCBpbiBlbWl0dGVkRmllbGRzKSB7CiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBmaWVsZC5pbml0aWFsaXplckluQWxsb2NhdG9yOwogICAgICBpZiAoY29uc3RhbnQgIT0gbnVsbCkgewogICAgICAgIGlmIChjb25zdGFudCA9PSBwcmV2aW91c0NvbnN0YW50ICYmIGNoYWluTGVuZ3RoIDwgbWF4Q2hhaW5MZW5ndGgpIHsKICAgICAgICAgIGFzc2lnbm1lbnQgPSBqcy5qcygnIy4jID0gIycsIFt0aGlzUmVmLCBmaWVsZC5uYW1lLCBhc3NpZ25tZW50XSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZsdXNoQXNzaWdubWVudCgpOwogICAgICAgICAgYXNzaWdubWVudCA9IGpzLmpzKCcjLiMgPSAjJywgWwogICAgICAgICAgICB0aGlzUmVmLAogICAgICAgICAgICBmaWVsZC5uYW1lLAogICAgICAgICAgICBfY29uc3RhbnRFbWl0dGVyLmdlbmVyYXRlKGNvbnN0YW50KSwKICAgICAgICAgIF0pOwogICAgICAgIH0KICAgICAgICArK2NoYWluTGVuZ3RoOwogICAgICAgIHByZXZpb3VzQ29uc3RhbnQgPSBjb25zdGFudDsKICAgICAgfSBlbHNlIHsKICAgICAgICBmbHVzaEFzc2lnbm1lbnQoKTsKICAgICAgICBqcy5QYXJhbWV0ZXIgcGFyYW1ldGVyID0gbmV3IGpzLlBhcmFtZXRlcigndCR7cGFyYW1ldGVycy5sZW5ndGh9Jyk7CiAgICAgICAgcGFyYW1ldGVycy5hZGQocGFyYW1ldGVyKTsKICAgICAgICBzdGF0ZW1lbnRzLmFkZCgKICAgICAgICAgICAganMuanMuc3RhdGVtZW50KCcjLiMgPSAjJywgW3RoaXNSZWYsIGZpZWxkLm5hbWUsIHBhcmFtZXRlci5uYW1lXSkpOwogICAgICB9CiAgICB9CiAgICBmbHVzaEFzc2lnbm1lbnQoKTsKCiAgICBpZiAoY2xzLmhhc1J0aUZpZWxkKSB7CiAgICAgIGpzLlBhcmFtZXRlciBwYXJhbWV0ZXIgPSBuZXcganMuUGFyYW1ldGVyKCd0JHtwYXJhbWV0ZXJzLmxlbmd0aH0nKTsKICAgICAgcGFyYW1ldGVycy5hZGQocGFyYW1ldGVyKTsKICAgICAgc3RhdGVtZW50cy5hZGQoanMuanMuc3RhdGVtZW50KAogICAgICAgICAgJyMuIyA9ICMnLCBbdGhpc1JlZiwgX25hbWVyLnJ0aUZpZWxkSnNOYW1lLCBwYXJhbWV0ZXIubmFtZV0pKTsKICAgIH0KCiAgICByZXR1cm4ganMuanMoJ2Z1bmN0aW9uICMoIykgeyAjIH0nLCBbbmFtZSwgcGFyYW1ldGVycywgc3RhdGVtZW50c10pOwogIH0KCiAgLy8vIEVtaXRzIHRoZSBwcm90b3R5cGUtc2VjdGlvbiBvZiB0aGUgZnJhZ21lbnQuCiAgLy8vCiAgLy8vIFRoaXMgc2VjdGlvbiB1cGRhdGVzIHRoZSBwcm90b3R5cGUtcHJvcGVydHkgb2YgYWxsIGNvbnN0cnVjdG9ycyBpbiB0aGUKICAvLy8gZ2xvYmFsIGhvbGRlcnMuCiAgLy8vCiAgLy8vIFtzb2Z0RGVmZXJyZWRdIGRldGVybWluZSB3aGV0aGVyIHByb3RvdHlwZXMgZm9yIHNvZnQgZGVmZXJyZWQgY2xhc3NlcyBhcmUKICAvLy8gZ2VuZXJhdGVkLgogIC8vLwogIC8vLyBJZiBbaW5jbHVkZUNsb3N1cmVzXSBpcyBgdHJ1ZWAgb25seSBwcm90b3R5cGVzIGZvciBjbG9zdXJlIGNsYXNzZXMgYXJlCiAgLy8vIGdlbmVyYXRlZCwgaWYgW2luY2x1ZGVDbG9zdXJlc10gaXMgYGZhbHNlYCBvbmx5IHByb3RvdHlwZXMgZm9yIG5vbi1jbG9zdXJlCiAgLy8vIGNsYXNzZXMgYXJlIGdlbmVyYXRlZC4gT3RoZXJ3aXNlIHByb3RvdHlwZXMgZm9yIGFsbCBjbGFzc2VzIGFyZSBnZW5lcmF0ZWQuCiAganMuU3RhdGVtZW50IGVtaXRQcm90b3R5cGVzKEZyYWdtZW50IGZyYWdtZW50LAogICAgICB7Ym9vbCBzb2Z0RGVmZXJyZWQgPSBmYWxzZSwgYm9vbCBpbmNsdWRlQ2xvc3VyZXN9KSB7CiAgICBMaXN0PGpzLlN0YXRlbWVudD4gYXNzaWdubWVudHMgPSBmcmFnbWVudC5saWJyYXJpZXMKICAgICAgICAuZXhwYW5kKChMaWJyYXJ5IGxpYnJhcnkpID0+IGxpYnJhcnkuY2xhc3NlcykKICAgICAgICAud2hlcmUoKENsYXNzIGNscykgewogICAgICBpZiAoaW5jbHVkZUNsb3N1cmVzICE9IG51bGwpIHsKICAgICAgICBpZiAoY2xzLmVsZW1lbnQuaXNDbG9zdXJlICE9IGluY2x1ZGVDbG9zdXJlcykgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gY2xzLmlzU29mdERlZmVycmVkID09IHNvZnREZWZlcnJlZDsKICAgIH0pLm1hcCgoQ2xhc3MgY2xzKSB7CiAgICAgIHZhciBwcm90byA9IGpzLmpzLnN0YXRlbWVudCgKICAgICAgICAgICcjLnByb3RvdHlwZSA9ICM7JywgW2NsYXNzUmVmZXJlbmNlKGNscyksIGVtaXRQcm90b3R5cGUoY2xzKV0pOwogICAgICBDbGFzc0VudGl0eSBlbGVtZW50ID0gY2xzLmVsZW1lbnQ7CiAgICAgIHJlZ2lzdGVyRW50aXR5QXN0KGVsZW1lbnQsIHByb3RvLCBsaWJyYXJ5OiBlbGVtZW50LmxpYnJhcnkpOwogICAgICByZXR1cm4gcHJvdG87CiAgICB9KS50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKCiAgICByZXR1cm4gbmV3IGpzLkJsb2NrKGFzc2lnbm1lbnRzKTsKICB9CgogIC8vLyBFbWl0cyB0aGUgcHJvdG90eXBlIG9mIHRoZSBnaXZlbiBjbGFzcyBbY2xzXS4KICAvLy8KICAvLy8gVGhlIHByb3RvdHlwZSBpcyBnZW5lcmF0ZWQgYXMgb2JqZWN0IGxpdGVyYWwuIEluaGVyaXRhbmNlIGlzIGlnbm9yZWQuCiAgLy8vCiAgLy8vIFRoZSBwcm90b3R5cGUgYWxzbyBpbmNsdWRlcyB0aGUgYGlzLXByb3BlcnR5YCB0aGF0IGV2ZXJ5IGNsYXNzIG11c3QgaGF2ZS4KICAvLyBUT0RPKGZsb2l0c2NoKTogd2UgY291bGQgYXZvaWQgdGhhdCBwcm9wZXJ0eSBpZiB3ZSBrbmV3IHRoYXQgaXQgd2Fzbid0CiAgLy8gICAgbmVlZGVkLgogIGpzLkV4cHJlc3Npb24gZW1pdFByb3RvdHlwZShDbGFzcyBjbHMpIHsKICAgIEl0ZXJhYmxlPE1ldGhvZD4gbWV0aG9kcyA9IGNscy5tZXRob2RzOwogICAgSXRlcmFibGU8TWV0aG9kPiBjaGVja2VkU2V0dGVycyA9IGNscy5jaGVja2VkU2V0dGVyczsKICAgIEl0ZXJhYmxlPE1ldGhvZD4gaXNDaGVja3MgPSBjbHMuaXNDaGVja3M7CiAgICBJdGVyYWJsZTxNZXRob2Q+IGNhbGxTdHVicyA9IGNscy5jYWxsU3R1YnM7CiAgICBJdGVyYWJsZTxNZXRob2Q+IG5vU3VjaE1ldGhvZFN0dWJzID0gY2xzLm5vU3VjaE1ldGhvZFN0dWJzOwogICAgSXRlcmFibGU8TWV0aG9kPiBnZXR0ZXJzU2V0dGVycyA9IGdlbmVyYXRlR2V0dGVyc1NldHRlcnMoY2xzKTsKICAgIEl0ZXJhYmxlPE1ldGhvZD4gYWxsTWV0aG9kcyA9IFsKICAgICAgbWV0aG9kcywKICAgICAgY2hlY2tlZFNldHRlcnMsCiAgICAgIGlzQ2hlY2tzLAogICAgICBjYWxsU3R1YnMsCiAgICAgIG5vU3VjaE1ldGhvZFN0dWJzLAogICAgICBnZXR0ZXJzU2V0dGVycwogICAgXS5leHBhbmQoKHgpID0+IHgpOwoKICAgIExpc3Q8anMuUHJvcGVydHk+IHByb3BlcnRpZXMgPSBbXTsKCiAgICBpZiAoY2xzLnN1cGVyY2xhc3MgPT0gbnVsbCkgewogICAgICAvLyBUT0RPKHNyYSk6IFdoYXQgaXMgdGhpcyBkb2luZz8gRG9jdW1lbnQgb3IgcmVtb3ZlLgogICAgICBwcm9wZXJ0aWVzCiAgICAgICAgICAuYWRkKGpzLlByb3BlcnR5KGpzLnN0cmluZygiY29uc3RydWN0b3IiKSwgY2xhc3NSZWZlcmVuY2UoY2xzKSkpOwogICAgICBwcm9wZXJ0aWVzLmFkZChqcy5Qcm9wZXJ0eShfbmFtZXIub3BlcmF0b3JJcyhjbHMuZWxlbWVudCksIGpzLm51bWJlcigxKSkpOwogICAgfQoKICAgIGFsbE1ldGhvZHMuZm9yRWFjaCgoTWV0aG9kIG1ldGhvZCkgewogICAgICBlbWl0SW5zdGFuY2VNZXRob2QobWV0aG9kKQogICAgICAgICAgLmZvckVhY2goKGpzLkV4cHJlc3Npb24gbmFtZSwganMuRXhwcmVzc2lvbiBjb2RlKSB7CiAgICAgICAgdmFyIHByb3AgPSBqcy5Qcm9wZXJ0eShuYW1lLCBjb2RlKTsKICAgICAgICByZWdpc3RlckVudGl0eUFzdChtZXRob2QuZWxlbWVudCwgcHJvcCk7CiAgICAgICAgcHJvcGVydGllcy5hZGQocHJvcCk7CiAgICAgIH0pOwogICAgfSk7CgogICAgaWYgKGNscy5pc0Nsb3N1cmVCYXNlQ2xhc3MpIHsKICAgICAgLy8gQ2xvc3VyZXMgZXh0ZW5kIGEgY29tbW9uIGJhc2UgY2xhc3MsIHNvIHdlIGNhbiBwdXQgcHJvcGVydGllcyBvbiB0aGUKICAgICAgLy8gcHJvdG90eXBlIGZvciBjb21tb24gdmFsdWVzLgoKICAgICAgLy8gQ2xvc3VyZXMgdGFraW5nIGV4YWN0bHkgb25lIGFyZ3VtZW50IGFyZSBjb21tb24uCiAgICAgIHByb3BlcnRpZXMuYWRkKGpzLlByb3BlcnR5KGpzLnN0cmluZyhfbmFtZXIuZml4ZWROYW1lcy5jYWxsQ2F0Y2hBbGxOYW1lKSwKICAgICAgICAgIGpzLnF1b3RlTmFtZShjYWxsMU5hbWUpKSk7CiAgICAgIHByb3BlcnRpZXMuYWRkKGpzLlByb3BlcnR5KAogICAgICAgICAganMuc3RyaW5nKF9uYW1lci5maXhlZE5hbWVzLnJlcXVpcmVkUGFyYW1ldGVyRmllbGQpLCBqcy5udW1iZXIoMSkpKTsKCiAgICAgIC8vIE1vc3QgY2xvc3VyZXMgaGF2ZSBubyBvcHRpb25hbCBhcmd1bWVudHMuCiAgICAgIHByb3BlcnRpZXMuYWRkKGpzLlByb3BlcnR5KAogICAgICAgICAganMuc3RyaW5nKF9uYW1lci5maXhlZE5hbWVzLmRlZmF1bHRWYWx1ZXNGaWVsZCksCiAgICAgICAgICBuZXcganMuTGl0ZXJhbE51bGwoKSkpOwogICAgfQoKICAgIHJldHVybiBuZXcganMuT2JqZWN0SW5pdGlhbGl6ZXIocHJvcGVydGllcyk7CiAgfQoKICAvLy8gR2VuZXJhdGVzIGEgZ2V0dGVyIGZvciB0aGUgZ2l2ZW4gW2ZpZWxkXS4KICBNZXRob2QgZ2VuZXJhdGVHZXR0ZXIoRmllbGQgZmllbGQpIHsKICAgIGFzc2VydChmaWVsZC5uZWVkc0dldHRlcik7CgogICAganMuRXhwcmVzc2lvbiBjb2RlOwogICAgaWYgKGZpZWxkLmlzRWxpZGVkKSB7CiAgICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnRWYWx1ZSA9IGZpZWxkLmNvbnN0YW50VmFsdWU7CiAgICAgIGFzc2VydCgKICAgICAgICAgIGNvbnN0YW50VmFsdWUgIT0gbnVsbCwgIk5vIGNvbnN0YW50IHZhbHVlIGZvciBlbGlkZWQgZmllbGQ6ICRmaWVsZCIpOwogICAgICBpZiAoY29uc3RhbnRWYWx1ZSA9PSBudWxsKSB7CiAgICAgICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgb2NjdXIgYmVjYXVzZSBjb2RlZ2VuIG1lbWJlciB1c2FnZSBpcyBub3cgbGltaXRlZAogICAgICAgIC8vIGJ5IGNsb3NlZCB3b3JsZCBtZW1iZXIgdXNhZ2UuIEluIHRoZSBjYXNlIHdlJ3ZlIG1pc3NlZCBhIHNwb3Qgd2UKICAgICAgICAvLyBjYXV0aW91c2x5IGdlbmVyYXRlIGEgbnVsbCBjb25zdGFudC4KICAgICAgICBjb25zdGFudFZhbHVlID0gbmV3IE51bGxDb25zdGFudFZhbHVlKCk7CiAgICAgIH0KICAgICAgY29kZSA9IGpzLmpzKAogICAgICAgICAgImZ1bmN0aW9uKCkgeyByZXR1cm4gIzsgfSIsIGdlbmVyYXRlQ29uc3RhbnRSZWZlcmVuY2UoY29uc3RhbnRWYWx1ZSkpOwogICAgfSBlbHNlIHsKICAgICAgU3RyaW5nIHRlbXBsYXRlOwogICAgICBpZiAoZmllbGQubmVlZHNJbnRlcmNlcHRlZEdldHRlck9uUmVjZWl2ZXIpIHsKICAgICAgICB0ZW1wbGF0ZSA9ICJmdW5jdGlvbihyZWNlaXZlcikgeyByZXR1cm4gcmVjZWl2ZXJbI107IH0iOwogICAgICB9IGVsc2UgaWYgKGZpZWxkLm5lZWRzSW50ZXJjZXB0ZWRHZXR0ZXJPblRoaXMpIHsKICAgICAgICB0ZW1wbGF0ZSA9ICJmdW5jdGlvbihyZWNlaXZlcikgeyByZXR1cm4gdGhpc1sjXTsgfSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KCFmaWVsZC5uZWVkc0ludGVyY2VwdGVkR2V0dGVyKTsKICAgICAgICB0ZW1wbGF0ZSA9ICJmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXNbI107IH0iOwogICAgICB9CiAgICAgIGpzLkV4cHJlc3Npb24gZmllbGROYW1lID0ganMucXVvdGVOYW1lKGZpZWxkLm5hbWUpOwogICAgICBjb2RlID0ganMuanModGVtcGxhdGUsIGZpZWxkTmFtZSk7CiAgICB9CiAgICBqcy5OYW1lIGdldHRlck5hbWUgPSBfbmFtZXIuZGVyaXZlR2V0dGVyTmFtZShmaWVsZC5hY2Nlc3Nvck5hbWUpOwogICAgcmV0dXJuIG5ldyBTdHViTWV0aG9kKGdldHRlck5hbWUsIGNvZGUpOwogIH0KCiAgLy8vIEdlbmVyYXRlcyBhIHNldHRlciBmb3IgdGhlIGdpdmVuIFtmaWVsZF0uCiAgTWV0aG9kIGdlbmVyYXRlU2V0dGVyKEZpZWxkIGZpZWxkKSB7CiAgICBhc3NlcnQoZmllbGQubmVlZHNVbmNoZWNrZWRTZXR0ZXIpOwoKICAgIFN0cmluZyB0ZW1wbGF0ZTsKICAgIGpzLkV4cHJlc3Npb24gY29kZTsKICAgIGlmIChmaWVsZC5pc0VsaWRlZCkgewogICAgICBjb2RlID0ganMuanMoImZ1bmN0aW9uKCkgeyB9Iik7CiAgICB9IGVsc2UgewogICAgICBpZiAoZmllbGQubmVlZHNJbnRlcmNlcHRlZFNldHRlck9uUmVjZWl2ZXIpIHsKICAgICAgICB0ZW1wbGF0ZSA9ICJmdW5jdGlvbihyZWNlaXZlciwgdmFsKSB7IHJldHVybiByZWNlaXZlclsjXSA9IHZhbDsgfSI7CiAgICAgIH0gZWxzZSBpZiAoZmllbGQubmVlZHNJbnRlcmNlcHRlZFNldHRlck9uVGhpcykgewogICAgICAgIHRlbXBsYXRlID0gImZ1bmN0aW9uKHJlY2VpdmVyLCB2YWwpIHsgcmV0dXJuIHRoaXNbI10gPSB2YWw7IH0iOwogICAgICB9IGVsc2UgewogICAgICAgIGFzc2VydCghZmllbGQubmVlZHNJbnRlcmNlcHRlZFNldHRlcik7CiAgICAgICAgdGVtcGxhdGUgPSAiZnVuY3Rpb24odmFsKSB7IHJldHVybiB0aGlzWyNdID0gdmFsOyB9IjsKICAgICAgfQogICAgICBqcy5FeHByZXNzaW9uIGZpZWxkTmFtZSA9IGpzLnF1b3RlTmFtZShmaWVsZC5uYW1lKTsKICAgICAgY29kZSA9IGpzLmpzKHRlbXBsYXRlLCBmaWVsZE5hbWUpOwogICAgfQoKICAgIGpzLk5hbWUgc2V0dGVyTmFtZSA9IF9uYW1lci5kZXJpdmVTZXR0ZXJOYW1lKGZpZWxkLmFjY2Vzc29yTmFtZSk7CiAgICByZXR1cm4gbmV3IFN0dWJNZXRob2Qoc2V0dGVyTmFtZSwgY29kZSk7CiAgfQoKICAvLy8gR2VuZXJhdGVzIGFsbCBnZXR0ZXJzIGFuZCBzZXR0ZXJzIHRoZSBnaXZlbiBjbGFzcyBbY2xzXSBuZWVkcy4KICBJdGVyYWJsZTxNZXRob2Q+IGdlbmVyYXRlR2V0dGVyc1NldHRlcnMoQ2xhc3MgY2xzKSB7CiAgICBJdGVyYWJsZTxNZXRob2Q+IGdldHRlcnMgPSBjbHMuZmllbGRzCiAgICAgICAgLndoZXJlKChGaWVsZCBmaWVsZCkgPT4gZmllbGQubmVlZHNHZXR0ZXIpCiAgICAgICAgLm1hcChnZW5lcmF0ZUdldHRlcik7CgogICAgSXRlcmFibGU8TWV0aG9kPiBzZXR0ZXJzID0gY2xzLmZpZWxkcwogICAgICAgIC53aGVyZSgoRmllbGQgZmllbGQpID0+IGZpZWxkLm5lZWRzVW5jaGVja2VkU2V0dGVyKQogICAgICAgIC5tYXAoZ2VuZXJhdGVTZXR0ZXIpOwoKICAgIHJldHVybiBbZ2V0dGVycywgc2V0dGVyc10uZXhwYW5kKCh4KSA9PiB4KTsKICB9CgogIC8vLyBFbWl0cyB0aGUgZ2l2ZW4gaW5zdGFuY2UgW21ldGhvZF0uCiAgLy8vCiAgLy8vIFRoZSBnaXZlbiBtZXRob2QgbWF5IGJlIGEgc3R1Yi1tZXRob2QgKGZvciBleGFtcGxlIGZvciBpcy1jaGVja3MpLgogIC8vLwogIC8vLyBJZiBpdCBpcyBhIERhcnQtbWV0aG9kLCBhbGwgbmVjZXNzYXJ5IHN0dWItbWV0aG9kcyBhcmUgZW1pdHRlZCwgdG9vLiBJbgogIC8vLyB0aGF0IGNhc2UgdGhlIHJldHVybmVkIG1hcCBjb250YWlucyBtb3JlIHRoYW4ganVzdCBvbmUgZW50cnkuCiAgLy8vCiAgLy8vIElmIHRoZSBtZXRob2QgaXMgYSBjbG9zdXJlIGNhbGwtbWV0aG9kLCBhbHNvIHJldHVybnMgdGhlIG5lY2Vzc2FyeQogIC8vLyBwcm9wZXJ0aWVzIGluIGNhc2UgdGhlIGNsb3N1cmUgY2FuIGJlIGFwcGxpZWQuCiAgTWFwPGpzLkV4cHJlc3Npb24sIGpzLkV4cHJlc3Npb24+IGVtaXRJbnN0YW5jZU1ldGhvZChNZXRob2QgbWV0aG9kKSB7CiAgICB2YXIgcHJvcGVydGllcyA9IDxqcy5FeHByZXNzaW9uLCBqcy5FeHByZXNzaW9uPnt9OwoKICAgIHByb3BlcnRpZXNbbWV0aG9kLm5hbWVdID0gbWV0aG9kLmNvZGU7CiAgICBpZiAobWV0aG9kIGlzIEluc3RhbmNlTWV0aG9kKSB7CiAgICAgIGZvciAoUGFyYW1ldGVyU3R1Yk1ldGhvZCBzdHViTWV0aG9kIGluIG1ldGhvZC5wYXJhbWV0ZXJTdHVicykgewogICAgICAgIHByb3BlcnRpZXNbc3R1Yk1ldGhvZC5uYW1lXSA9IHN0dWJNZXRob2QuY29kZTsKICAgICAgfQoKICAgICAgaWYgKG1ldGhvZC5pc0Nsb3N1cmVDYWxsTWV0aG9kICYmIG1ldGhvZC5jYW5CZUFwcGxpZWQpIHsKICAgICAgICAvLyBUT0RPKHNyYSk6IFdlIHNob3VsZCBhbHNvIGFkZCB0aGVzZSBwcm9wZXJ0aWVzIGZvciB0aGUgdXNlci1kZWZpbmVkCiAgICAgICAgLy8gYGNhbGxgIG1ldGhvZCBvbiBjbGFzc2VzLiBGdW5jdGlvbi5hcHBseSBpcyBjdXJyZW50bHkgYnJva2VuIGZvcgogICAgICAgIC8vIGNvbXBsZXggY2FzZXMuIFtmb3JjZUFkZF0gbWlnaHQgYmUgdHJ1ZSB3aGVuIHRoaXMgaXMgZml4ZWQuCiAgICAgICAgYm9vbCBmb3JjZUFkZCA9ICFtZXRob2QuaXNDbG9zdXJlQ2FsbE1ldGhvZDsKCiAgICAgICAgLy8gQ29tbW9uIGNhc2Ugb2YgImNhbGwqIjogImNhbGwkMSIgaXMgc3RvcmVkIG9uIHRoZSBDbG9zdXJlIGNsYXNzLgogICAgICAgIGlmIChtZXRob2QuYXBwbHlJbmRleCAhPSAwIHx8CiAgICAgICAgICAgIG1ldGhvZC5wYXJhbWV0ZXJTdHVicy5pc05vdEVtcHR5IHx8CiAgICAgICAgICAgIG1ldGhvZC5yZXF1aXJlZFBhcmFtZXRlckNvdW50ICE9IDEgfHwKICAgICAgICAgICAgZm9yY2VBZGQpIHsKICAgICAgICAgIGpzLk5hbWUgYXBwbHlOYW1lID0gbWV0aG9kLmFwcGx5SW5kZXggPT0gMAogICAgICAgICAgICAgID8gbWV0aG9kLm5hbWUKICAgICAgICAgICAgICA6IG1ldGhvZC5wYXJhbWV0ZXJTdHVic1ttZXRob2QuYXBwbHlJbmRleCAtIDFdLm5hbWU7CiAgICAgICAgICBwcm9wZXJ0aWVzW2pzLnN0cmluZyhfbmFtZXIuZml4ZWROYW1lcy5jYWxsQ2F0Y2hBbGxOYW1lKV0gPQogICAgICAgICAgICAgIGpzLnF1b3RlTmFtZShhcHBseU5hbWUpOwogICAgICAgIH0KICAgICAgICAvLyBDb21tb24gY2FzZSBvZiAnMScgaXMgc3RvcmVkIG9uIHRoZSBDbG9zdXJlIGNsYXNzLgogICAgICAgIGlmIChtZXRob2QucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCAhPSAxIHx8IGZvcmNlQWRkKSB7CiAgICAgICAgICBwcm9wZXJ0aWVzW2pzLnN0cmluZyhfbmFtZXIuZml4ZWROYW1lcy5yZXF1aXJlZFBhcmFtZXRlckZpZWxkKV0gPQogICAgICAgICAgICAgIGpzLm51bWJlcihtZXRob2QucmVxdWlyZWRQYXJhbWV0ZXJDb3VudCk7CiAgICAgICAgfQoKICAgICAgICBqcy5FeHByZXNzaW9uIGRlZmF1bHRWYWx1ZXMgPQogICAgICAgICAgICBfZW5jb2RlT3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzKG1ldGhvZCk7CiAgICAgICAgLy8gRGVmYXVsdCB2YWx1ZXMgcHJvcGVydHkgb2YgYG51bGxgIGlzIHN0b3JlZCBvbiB0aGUgY29tbW9uIEpTCiAgICAgICAgLy8gc3VwZXJjbGFzcy4KICAgICAgICBpZiAoZGVmYXVsdFZhbHVlcyBpcyEganMuTGl0ZXJhbE51bGwgfHwgZm9yY2VBZGQpIHsKICAgICAgICAgIHByb3BlcnRpZXNbanMuc3RyaW5nKF9uYW1lci5maXhlZE5hbWVzLmRlZmF1bHRWYWx1ZXNGaWVsZCldID0KICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVzOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiBwcm9wZXJ0aWVzOwogIH0KCiAgLy8vIEVtaXRzIHRoZSBpbmhlcml0YW5jZSBibG9jayBvZiB0aGUgZnJhZ21lbnQuCiAgLy8vCiAgLy8vIEluIHRoaXMgc2VjdGlvbiBwcm90b3R5cGUgY2hhaW5zIGFyZSB1cGRhdGVkIGFuZCBtaXhpbiBmdW5jdGlvbnMgYXJlCiAgLy8vIGNvcGllZC4KICBqcy5TdGF0ZW1lbnQgZW1pdEluaGVyaXRhbmNlKEZyYWdtZW50IGZyYWdtZW50LCB7Ym9vbCBzb2Z0RGVmZXJyZWQgPSBmYWxzZX0pIHsKICAgIExpc3Q8anMuU3RhdGVtZW50PiBpbmhlcml0Q2FsbHMgPSBbXTsKICAgIExpc3Q8anMuU3RhdGVtZW50PiBtaXhpbkNhbGxzID0gW107CiAgICAvLyBsb2NhbCBjYWNoZXMgb2YgZnVuY3Rpb25zIHRvIGFsbG93IG1pbmlmYWN0aW9uIG9mIGZ1bmN0aW9uIG5hbWUgaW4gY2FsbC4KICAgIExvY2FsQWxpYXNlcyBsb2NhbHMgPSBMb2NhbEFsaWFzZXMoKTsKCiAgICBTZXQ8Q2xhc3M+IGNsYXNzZXNJbkZyYWdtZW50ID0gU2V0KCk7CiAgICBmb3IgKExpYnJhcnkgbGlicmFyeSBpbiBmcmFnbWVudC5saWJyYXJpZXMpIHsKICAgICAgY2xhc3Nlc0luRnJhZ21lbnQuYWRkQWxsKGxpYnJhcnkuY2xhc3NlcwogICAgICAgICAgLndoZXJlKCgoQ2xhc3MgY2xzKSA9PiBjbHMuaXNTb2Z0RGVmZXJyZWQgPT0gc29mdERlZmVycmVkKSkpOwogICAgfQoKICAgIE1hcDxDbGFzcywgTGlzdDxDbGFzcz4+IHN1YmNsYXNzZXMgPSB7fTsKICAgIFNldDxDbGFzcz4gc2VlbiA9IFNldCgpOwoKICAgIHZvaWQgY29sbGVjdChjbHMpIHsKICAgICAgaWYgKGNscyA9PSBudWxsIHx8IHNlZW4uY29udGFpbnMoY2xzKSkgcmV0dXJuOwoKICAgICAgQ2xhc3Mgc3VwZXJjbGFzcyA9IGNscy5zdXBlcmNsYXNzOwogICAgICBpZiAoY2xhc3Nlc0luRnJhZ21lbnQuY29udGFpbnMoc3VwZXJjbGFzcykpIHsKICAgICAgICBjb2xsZWN0KHN1cGVyY2xhc3MpOwogICAgICB9CgogICAgICBzdWJjbGFzc2VzLnB1dElmQWJzZW50KHN1cGVyY2xhc3MsICgpID0+IDxDbGFzcz5bXSkuYWRkKGNscyk7CgogICAgICBzZWVuLmFkZChjbHMpOwogICAgfQoKICAgIGZvciAoTGlicmFyeSBsaWJyYXJ5IGluIGZyYWdtZW50LmxpYnJhcmllcykgewogICAgICBmb3IgKENsYXNzIGNscyBpbiBsaWJyYXJ5LmNsYXNzZXMpIHsKICAgICAgICBpZiAoY2xzLmlzU29mdERlZmVycmVkICE9IHNvZnREZWZlcnJlZCkgY29udGludWU7CiAgICAgICAgY29sbGVjdChjbHMpOwogICAgICAgIGlmIChjbHMubWl4aW5DbGFzcyAhPSBudWxsKSB7CiAgICAgICAgICBqcy5TdGF0ZW1lbnQgc3RhdGVtZW50ID0ganMuanMuc3RhdGVtZW50KCcjKCMsICMpJywgWwogICAgICAgICAgICBsb2NhbHMuZmluZCgnX21peGluJywgJ2h1bmtIZWxwZXJzLm1peGluJyksCiAgICAgICAgICAgIGNsYXNzUmVmZXJlbmNlKGNscyksCiAgICAgICAgICAgIGNsYXNzUmVmZXJlbmNlKGNscy5taXhpbkNsYXNzKSwKICAgICAgICAgIF0pOwogICAgICAgICAgcmVnaXN0ZXJFbnRpdHlBc3QoY2xzLmVsZW1lbnQsIHN0YXRlbWVudCwgbGlicmFyeTogbGlicmFyeS5lbGVtZW50KTsKICAgICAgICAgIG1peGluQ2FsbHMuYWRkKHN0YXRlbWVudCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZm9yIChDbGFzcyBzdXBlcmNsYXNzIGluIHN1YmNsYXNzZXMua2V5cykgewogICAgICBMaXN0PENsYXNzPiBsaXN0ID0gc3ViY2xhc3Nlc1tzdXBlcmNsYXNzXTsKICAgICAganMuRXhwcmVzc2lvbiBzdXBlcmNsYXNzUmVmZXJlbmNlID0gKHN1cGVyY2xhc3MgPT0gbnVsbCkKICAgICAgICAgID8gbmV3IGpzLkxpdGVyYWxOdWxsKCkKICAgICAgICAgIDogY2xhc3NSZWZlcmVuY2Uoc3VwZXJjbGFzcyk7CiAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PSAxKSB7CiAgICAgICAgQ2xhc3MgY2xzID0gbGlzdC5zaW5nbGU7CiAgICAgICAgdmFyIHN0YXRlbWVudCA9IGpzLmpzLnN0YXRlbWVudCgnIygjLCAjKScsIFsKICAgICAgICAgIGxvY2Fscy5maW5kKCdfaW5oZXJpdCcsICdodW5rSGVscGVycy5pbmhlcml0JyksCiAgICAgICAgICBjbGFzc1JlZmVyZW5jZShjbHMpLAogICAgICAgICAgc3VwZXJjbGFzc1JlZmVyZW5jZQogICAgICAgIF0pOwogICAgICAgIHJlZ2lzdGVyRW50aXR5QXN0KGNscy5lbGVtZW50LCBzdGF0ZW1lbnQsIGxpYnJhcnk6IGNscy5lbGVtZW50LmxpYnJhcnkpOwogICAgICAgIGluaGVyaXRDYWxscy5hZGQoc3RhdGVtZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBMaXN0PGpzLkV4cHJlc3Npb24+IGxpc3RFbGVtZW50cyA9IFtdOwogICAgICAgIC8vIFNpbmNlIGluaGVyaXRNYW55IHNoYXJlcyB0aGUgc3VwZXJjbGFzcyByZWZlcmVuY2UsIHdlIGF0dHJpYnV0ZSBpdAogICAgICAgIC8vIG9ubHkgdG8gdGhlIGZpcnN0IHN1YmNsYXNzLgogICAgICAgIENsYXNzRW50aXR5IGZpcnN0Q2xhc3MgPSBsaXN0LmZpcnN0LmVsZW1lbnQ7CiAgICAgICAgcmVnaXN0ZXJFbnRpdHlBc3QoZmlyc3RDbGFzcywgc3VwZXJjbGFzc1JlZmVyZW5jZSwKICAgICAgICAgICAgbGlicmFyeTogZmlyc3RDbGFzcy5saWJyYXJ5KTsKICAgICAgICBmb3IgKENsYXNzIGNscyBpbiBsaXN0KSB7CiAgICAgICAgICBqcy5FeHByZXNzaW9uIHJlZmVyZW5jZSA9IGNsYXNzUmVmZXJlbmNlKGNscyk7CiAgICAgICAgICByZWdpc3RlckVudGl0eUFzdChjbHMuZWxlbWVudCwgcmVmZXJlbmNlLAogICAgICAgICAgICAgIGxpYnJhcnk6IGNscy5lbGVtZW50LmxpYnJhcnkpOwogICAgICAgICAgbGlzdEVsZW1lbnRzLmFkZChyZWZlcmVuY2UpOwogICAgICAgIH0KICAgICAgICBpbmhlcml0Q2FsbHMuYWRkKGpzLmpzLnN0YXRlbWVudCgnIygjLCAjKScsIFsKICAgICAgICAgIGxvY2Fscy5maW5kKCdfaW5oZXJpdE1hbnknLCAnaHVua0hlbHBlcnMuaW5oZXJpdE1hbnknKSwKICAgICAgICAgIHN1cGVyY2xhc3NSZWZlcmVuY2UsCiAgICAgICAgICBqcy5BcnJheUluaXRpYWxpemVyKGxpc3RFbGVtZW50cykKICAgICAgICBdKSk7CiAgICAgIH0KICAgIH0KCiAgICBMaXN0PGpzLlN0YXRlbWVudD4gc3RhdGVtZW50cyA9IFtdOwogICAgaWYgKGxvY2Fscy5pc05vdEVtcHR5KSB7CiAgICAgIHN0YXRlbWVudHMuYWRkKGxvY2Fscy50b1N0YXRlbWVudCgpKTsKICAgIH0KICAgIHN0YXRlbWVudHMuYWRkQWxsKGluaGVyaXRDYWxscyk7CiAgICBzdGF0ZW1lbnRzLmFkZEFsbChtaXhpbkNhbGxzKTsKICAgIHJldHVybiB3cmFwUGhhc2UoJ2luaGVyaXRhbmNlJywgc3RhdGVtZW50cyk7CiAgfQoKICAvLy8gRW1pdHMgdGhlIHNldHVwIG9mIG1ldGhvZCBhbGlhc2VzLgogIC8vLwogIC8vLyBUaGlzIHN0ZXAgY29uc2lzdHMgb2Ygc2ltcGx5IGNvcHlpbmcgSmF2YVNjcmlwdCBmdW5jdGlvbnMgdG8gdGhlaXIKICAvLy8gYWxpYXNlZCBuYW1lcyBzbyB0aGV5IHBvaW50IHRvIHRoZSBzYW1lIGZ1bmN0aW9uLgogIGpzLlN0YXRlbWVudCBlbWl0SW5zdGFuY2VNZXRob2RBbGlhc2VzKEZyYWdtZW50IGZyYWdtZW50LAogICAgICB7Ym9vbCBzb2Z0RGVmZXJyZWQgPSBmYWxzZX0pIHsKICAgIExpc3Q8anMuU3RhdGVtZW50PiBhc3NpZ25tZW50cyA9IFtdOwoKICAgIGZvciAoTGlicmFyeSBsaWJyYXJ5IGluIGZyYWdtZW50LmxpYnJhcmllcykgewogICAgICBmb3IgKENsYXNzIGNscyBpbiBsaWJyYXJ5LmNsYXNzZXMpIHsKICAgICAgICBpZiAoY2xzLmlzU29mdERlZmVycmVkICE9IHNvZnREZWZlcnJlZCkgY29udGludWU7CiAgICAgICAgYm9vbCBmaXJzdEFsaWFzID0gdHJ1ZTsKICAgICAgICBmb3IgKEluc3RhbmNlTWV0aG9kIG1ldGhvZCBpbiBjbHMubWV0aG9kcykgewogICAgICAgICAgaWYgKG1ldGhvZC5hbGlhc05hbWUgIT0gbnVsbCkgewogICAgICAgICAgICBpZiAoZmlyc3RBbGlhcykgewogICAgICAgICAgICAgIGZpcnN0QWxpYXMgPSBmYWxzZTsKICAgICAgICAgICAgICBqcy5TdGF0ZW1lbnQgc3RhdGVtZW50ID0ganMuanMuc3RhdGVtZW50KAogICAgICAgICAgICAgICAgICBhc3NpZ25tZW50cy5pc0VtcHR5CiAgICAgICAgICAgICAgICAgICAgICA/ICd2YXIgXyA9ICMucHJvdG90eXBlOycKICAgICAgICAgICAgICAgICAgICAgIDogJ18gPSAjLnByb3RvdHlwZScsCiAgICAgICAgICAgICAgICAgIGNsYXNzUmVmZXJlbmNlKGNscykpOwogICAgICAgICAgICAgIHJlZ2lzdGVyRW50aXR5QXN0KG1ldGhvZC5lbGVtZW50LCBzdGF0ZW1lbnQpOwogICAgICAgICAgICAgIGFzc2lnbm1lbnRzLmFkZChzdGF0ZW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGpzLlN0YXRlbWVudCBzdGF0ZW1lbnQgPSBqcy5qcy5zdGF0ZW1lbnQoJ18uIyA9IF8uIycsCiAgICAgICAgICAgICAgICBbanMucXVvdGVOYW1lKG1ldGhvZC5hbGlhc05hbWUpLCBqcy5xdW90ZU5hbWUobWV0aG9kLm5hbWUpXSk7CiAgICAgICAgICAgIHJlZ2lzdGVyRW50aXR5QXN0KG1ldGhvZC5lbGVtZW50LCBzdGF0ZW1lbnQpOwogICAgICAgICAgICBhc3NpZ25tZW50cy5hZGQoc3RhdGVtZW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB3cmFwUGhhc2UoJ2FsaWFzZXMnLCBhc3NpZ25tZW50cyk7CiAgfQoKICAvLy8gRW5jb2RlcyB0aGUgb3B0aW9uYWwgZGVmYXVsdCB2YWx1ZXMgc28gdGhhdCB0aGUgcnVudGltZSBGdW5jdGlvbi5hcHBseQogIC8vLyBjYW4gdXNlIHRoZW0uCiAganMuRXhwcmVzc2lvbiBfZW5jb2RlT3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzKERhcnRNZXRob2QgbWV0aG9kKSB7CiAgICAvLyBUT0RPKGhlcmh1dCk6IFJlcGxhY2UgW2pzLkxpdGVyYWxOdWxsXSB3aXRoIFtqcy5BcnJheUhvbGVdLgogICAgaWYgKG1ldGhvZC5vcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMgaXMgTGlzdCkgewogICAgICBMaXN0PENvbnN0YW50VmFsdWU+IGRlZmF1bHRWYWx1ZXMgPSBtZXRob2Qub3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzOwogICAgICBpZiAoZGVmYXVsdFZhbHVlcy5pc0VtcHR5KSB7CiAgICAgICAgcmV0dXJuIG5ldyBqcy5MaXRlcmFsTnVsbCgpOwogICAgICB9CiAgICAgIEl0ZXJhYmxlPGpzLkV4cHJlc3Npb24+IGVsZW1lbnRzID0KICAgICAgICAgIGRlZmF1bHRWYWx1ZXMubWFwKGdlbmVyYXRlQ29uc3RhbnRSZWZlcmVuY2UpOwogICAgICByZXR1cm4ganMuanMoJ2Z1bmN0aW9uKCkgeyByZXR1cm4gIzsgfScsCiAgICAgICAgICBuZXcganMuQXJyYXlJbml0aWFsaXplcihlbGVtZW50cy50b0xpc3QoKSkpOwogICAgfSBlbHNlIHsKICAgICAgTWFwPFN0cmluZywgQ29uc3RhbnRWYWx1ZT4gZGVmYXVsdFZhbHVlcyA9CiAgICAgICAgICBtZXRob2Qub3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzOwogICAgICBMaXN0PGpzLlByb3BlcnR5PiBwcm9wZXJ0aWVzID0gW107CiAgICAgIExpc3Q8U3RyaW5nPiBuYW1lcyA9IGRlZmF1bHRWYWx1ZXMua2V5cy50b0xpc3QoZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgLy8gU29ydCB0aGUgbmFtZXMgdGhlIHNhbWUgd2F5IHdlIHNvcnQgdGhlbSBmb3IgdGhlIG5hbWVkLWFyZ3VtZW50IGNhbGxpbmcKICAgICAgLy8gY29udmVudGlvbi4KICAgICAgbmFtZXMuc29ydCgpOwoKICAgICAgZm9yIChTdHJpbmcgbmFtZSBpbiBuYW1lcykgewogICAgICAgIENvbnN0YW50VmFsdWUgdmFsdWUgPSBkZWZhdWx0VmFsdWVzW25hbWVdOwogICAgICAgIHByb3BlcnRpZXMuYWRkKAogICAgICAgICAgICBuZXcganMuUHJvcGVydHkoanMuc3RyaW5nKG5hbWUpLCBnZW5lcmF0ZUNvbnN0YW50UmVmZXJlbmNlKHZhbHVlKSkpOwogICAgICB9CiAgICAgIHJldHVybiBqcy5qcygKICAgICAgICAgICdmdW5jdGlvbigpIHsgcmV0dXJuICM7IH0nLCBuZXcganMuT2JqZWN0SW5pdGlhbGl6ZXIocHJvcGVydGllcykpOwogICAgfQogIH0KCiAgLy8vIFdyYXBzIHRoZSBzdGF0ZW1lbnQgaW4gYSBuYW1lZCBmdW5jdGlvbiB0byB0aGF0IGl0IHNob3dzIHVwIGFzIGEgdW5pdCBpbgogIC8vLyBwcm9maWxlcy4KICAvLyBUT0RPKHNyYSk6IFNob3VsZCB0aGlzIGJlIGNvbmRpdGlvbmFsPwogIGpzLlN0YXRlbWVudCB3cmFwUGhhc2UoU3RyaW5nIG5hbWUsIExpc3Q8anMuU3RhdGVtZW50PiBzdGF0ZW1lbnRzKSB7CiAgICBqcy5CbG9jayBibG9jayA9IG5ldyBqcy5CbG9jayhzdGF0ZW1lbnRzKTsKICAgIGlmIChzdGF0ZW1lbnRzLmlzRW1wdHkpIHJldHVybiBibG9jazsKICAgIHJldHVybiBqcy5qcy5zdGF0ZW1lbnQoJyhmdW5jdGlvbiAjKCl7I30pKCk7JywgW25hbWUsIGJsb2NrXSk7CiAgfQoKICBib29sIGlzRW1wdHlTdGF0ZW1lbnQoanMuU3RhdGVtZW50IHN0YXRlbWVudCkgewogICAgaWYgKHN0YXRlbWVudCBpcyBqcy5CbG9jaykgewogICAgICByZXR1cm4gc3RhdGVtZW50LnN0YXRlbWVudHMuaXNFbXB0eTsKICAgIH0KICAgIHJldHVybiBzdGF0ZW1lbnQgaXMganMuRW1wdHlTdGF0ZW1lbnQ7CiAgfQoKICAvLy8gRW1pdHMgdGhlIHNlY3Rpb24gdGhhdCBpbnN0YWxscyB0ZWFyLW9mZiBnZXR0ZXJzLgogIGpzLlN0YXRlbWVudCBlbWl0SW5zdGFsbFRlYXJPZmZzKEZyYWdtZW50IGZyYWdtZW50LAogICAgICB7Ym9vbCBzb2Z0RGVmZXJyZWQgPSBmYWxzZX0pIHsKICAgIExvY2FsQWxpYXNlcyBsb2NhbHMgPSBMb2NhbEFsaWFzZXMoKTsKCiAgICAvLy8gRW1pdHMgdGhlIHN0YXRlbWVudCB0aGF0IGluc3RhbGxzIGEgdGVhciBvZmYgZm9yIGEgbWV0aG9kLgogICAgLy8vCiAgICAvLy8gVGVhci1vZmZzIG1pZ2h0IGJlIHBhc3NlZCB0byBgRnVuY3Rpb24uYXBwbHlgIHdoaWNoIG1lYW5zIHRoYXQgYWxsCiAgICAvLy8gY2FsbGluZy1jb252ZW50aW9ucyAod2l0aCBvciB3aXRob3V0IG9wdGlvbmFsIHBvc2l0aW9uYWwvbmFtZWQKICAgIC8vLyBhcmd1bWVudHMpIGFyZSBwb3NzaWJsZS4gQXMgc3VjaCwgdGhlIHRlYXItb2ZmIG5lZWRzIGVub3VnaCBpbmZvcm1hdGlvbgogICAgLy8vIHRvIGZpbGwgaW4gbWlzc2luZyBwYXJhbWV0ZXJzLgogICAganMuU3RhdGVtZW50IGVtaXRJbnN0YWxsVGVhck9mZigKICAgICAgICBqcy5FeHByZXNzaW9uIGNvbnRhaW5lciwgRGFydE1ldGhvZCBtZXRob2QpIHsKICAgICAgTGlzdDxqcy5OYW1lPiBjYWxsTmFtZXMgPSBbXTsKICAgICAgTGlzdDxqcy5FeHByZXNzaW9uPiBmdW5zT3JOYW1lcyA9IFtdOwoKICAgICAgLy8vIEFkZHMgdGhlIHN0dWItbWV0aG9kJ3MgY29kZSBvciBuYW1lIHRvIHRoZSBbZnVuc09yTmFtZXNdIGFycmF5LgogICAgICAvLy8KICAgICAgLy8vIFN0YXRpYyBtZXRob2RzIGRvbid0IG5lZWQgc3R1Yi1tZXRob2RzIGV4Y2VwdCBmb3IgdGVhci1vZmZzLiBBcyBzdWNoLAogICAgICAvLy8gdGhleSBhcmUgbm90IGVtaXR0ZWQgaW4gdGhlIHByb3RvdHlwZSwgYnV0IGRpcmVjdGx5IHBhc3NlZCBoZXJlLgogICAgICAvLy8KICAgICAgLy8vIEluc3RhbmNlLW1ldGhvZHMgaW5zdGFsbCB0aGUgc3R1Yi1tZXRob2RzIGluIHRoZWlyIHByb3RvdHlwZSwgYW5kIHdlCiAgICAgIC8vLyB1c2Ugc3RyaW5nLWJhc2VkIHJlZGlyZWN0aW9ucyB0byBmaW5kIHRoZW0gdGhlcmUuCiAgICAgIHZvaWQgYWRkRnVuT3JOYW1lKFN0dWJNZXRob2Qgc3R1Yk1ldGhvZCkgewogICAgICAgIGlmIChtZXRob2QuaXNTdGF0aWMpIHsKICAgICAgICAgIGZ1bnNPck5hbWVzLmFkZChzdHViTWV0aG9kLmNvZGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmdW5zT3JOYW1lcy5hZGQoanMucXVvdGVOYW1lKHN0dWJNZXRob2QubmFtZSkpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgY2FsbE5hbWVzLmFkZChtZXRob2QuY2FsbE5hbWUpOwogICAgICAvLyBUaGUgZmlyc3QgZW50cnkgaW4gdGhlIGZ1bnNPck5hbWVzLWFycmF5IG11c3QgYmUgYSBzdHJpbmcuCiAgICAgIGZ1bnNPck5hbWVzLmFkZChqcy5xdW90ZU5hbWUobWV0aG9kLm5hbWUpKTsKICAgICAgZm9yIChQYXJhbWV0ZXJTdHViTWV0aG9kIHN0dWJNZXRob2QgaW4gbWV0aG9kLnBhcmFtZXRlclN0dWJzKSB7CiAgICAgICAgY2FsbE5hbWVzLmFkZChzdHViTWV0aG9kLmNhbGxOYW1lKTsKICAgICAgICBhZGRGdW5Pck5hbWUoc3R1Yk1ldGhvZCk7CiAgICAgIH0KCiAgICAgIGpzLkFycmF5SW5pdGlhbGl6ZXIgY2FsbE5hbWVBcnJheSA9CiAgICAgICAgICBuZXcganMuQXJyYXlJbml0aWFsaXplcihjYWxsTmFtZXMubWFwKGpzLnF1b3RlTmFtZSkudG9MaXN0KCkpOwogICAgICBqcy5BcnJheUluaXRpYWxpemVyIGZ1bnNPck5hbWVzQXJyYXkgPQogICAgICAgICAgbmV3IGpzLkFycmF5SW5pdGlhbGl6ZXIoZnVuc09yTmFtZXMpOwoKICAgICAgYm9vbCBpc0ludGVyY2VwdGVkID0gZmFsc2U7CiAgICAgIGlmIChtZXRob2QgaXMgSW5zdGFuY2VNZXRob2QpIHsKICAgICAgICBpc0ludGVyY2VwdGVkID0gbWV0aG9kLmlzSW50ZXJjZXB0ZWQ7CiAgICAgIH0KCiAgICAgIGludCByZXF1aXJlZFBhcmFtZXRlckNvdW50ID0gbWV0aG9kLnJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CiAgICAgIGpzLkV4cHJlc3Npb24gb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzID0gbmV3IGpzLkxpdGVyYWxOdWxsKCk7CiAgICAgIGlmIChtZXRob2QuY2FuQmVBcHBsaWVkKSB7CiAgICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzID0KICAgICAgICAgICAgX2VuY29kZU9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcyhtZXRob2QpOwogICAgICB9CgogICAgICB2YXIgYXBwbHlJbmRleCA9IGpzLm51bWJlcihtZXRob2QuYXBwbHlJbmRleCk7CgogICAgICBpZiAobWV0aG9kLmlzU3RhdGljKSB7CiAgICAgICAgaWYgKHJlcXVpcmVkUGFyYW1ldGVyQ291bnQgPD0gMiAmJgogICAgICAgICAgICBjYWxsTmFtZXMubGVuZ3RoID09IDEgJiYKICAgICAgICAgICAgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzIGlzIGpzLkxpdGVyYWxOdWxsICYmCiAgICAgICAgICAgIG1ldGhvZC5hcHBseUluZGV4ID09IDApIHsKICAgICAgICAgIGpzLlN0YXRlbWVudCBmaW5pc2goaW50IGFyaXR5KSB7CiAgICAgICAgICAgIC8vIFNob3J0IGZvcm0gZm9yIGV4YWN0bHkgMC8xLzIgYXJndW1lbnRzLgogICAgICAgICAgICB2YXIgaW5zdGFsbCA9CiAgICAgICAgICAgICAgICBsb2NhbHMuZmluZCgnX3N0YXRpY18ke2FyaXR5fScsICdodW5rSGVscGVycy5fc3RhdGljXyR7YXJpdHl9Jyk7CiAgICAgICAgICAgIHJldHVybiBqcy5qcy5zdGF0ZW1lbnQoJycnCiAgICAgICAgICAgICAgICAjaW5zdGFsbCgjY29udGFpbmVyLCAjZ2V0dGVyTmFtZSwgI25hbWUsICNmdW5UeXBlKScnJywgewogICAgICAgICAgICAgICJpbnN0YWxsIjogaW5zdGFsbCwKICAgICAgICAgICAgICAiY29udGFpbmVyIjogY29udGFpbmVyLAogICAgICAgICAgICAgICJnZXR0ZXJOYW1lIjoganMucXVvdGVOYW1lKG1ldGhvZC50ZWFyT2ZmTmFtZSksCiAgICAgICAgICAgICAgIm5hbWUiOiBmdW5zT3JOYW1lcy5zaW5nbGUsCiAgICAgICAgICAgICAgImZ1blR5cGUiOiBtZXRob2QuZnVuY3Rpb25UeXBlLAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KCiAgICAgICAgICB2YXIgaW5zdGFsbGVkTmFtZSA9IGNhbGxOYW1lcy5zaW5nbGU7CiAgICAgICAgICBpZiAoaW5zdGFsbGVkTmFtZSA9PSBjYWxsME5hbWUpIHJldHVybiBmaW5pc2goMCk7CiAgICAgICAgICBpZiAoaW5zdGFsbGVkTmFtZSA9PSBjYWxsMU5hbWUpIHJldHVybiBmaW5pc2goMSk7CiAgICAgICAgICBpZiAoaW5zdGFsbGVkTmFtZSA9PSBjYWxsMk5hbWUpIHJldHVybiBmaW5pc2goMik7CiAgICAgICAgfQoKICAgICAgICB2YXIgaW5zdGFsbCA9CiAgICAgICAgICAgIGxvY2Fscy5maW5kKCdfc3RhdGljJywgJ2h1bmtIZWxwZXJzLmluc3RhbGxTdGF0aWNUZWFyT2ZmJyk7CiAgICAgICAgcmV0dXJuIGpzLmpzLnN0YXRlbWVudCgnJycKICAgICAgICAgICAgI2luc3RhbGwoI2NvbnRhaW5lciwgI2dldHRlck5hbWUsCiAgICAgICAgICAgICAgICAgICAgICNyZXF1aXJlZFBhcmFtZXRlckNvdW50LCAjb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICAgICAgICAgICAgICAgICAgI2NhbGxOYW1lcywgI2Z1bnNPck5hbWVzLCAjZnVuVHlwZSwgI2FwcGx5SW5kZXgpJycnLCB7CiAgICAgICAgICAiaW5zdGFsbCI6IGluc3RhbGwsCiAgICAgICAgICAiY29udGFpbmVyIjogY29udGFpbmVyLAogICAgICAgICAgImdldHRlck5hbWUiOiBqcy5xdW90ZU5hbWUobWV0aG9kLnRlYXJPZmZOYW1lKSwKICAgICAgICAgICJyZXF1aXJlZFBhcmFtZXRlckNvdW50IjoganMubnVtYmVyKHJlcXVpcmVkUGFyYW1ldGVyQ291bnQpLAogICAgICAgICAgIm9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcyI6IG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICAgICJjYWxsTmFtZXMiOiBjYWxsTmFtZUFycmF5LAogICAgICAgICAgImZ1bnNPck5hbWVzIjogZnVuc09yTmFtZXNBcnJheSwKICAgICAgICAgICJmdW5UeXBlIjogbWV0aG9kLmZ1bmN0aW9uVHlwZSwKICAgICAgICAgICJhcHBseUluZGV4IjogYXBwbHlJbmRleCwKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAocmVxdWlyZWRQYXJhbWV0ZXJDb3VudCA8PSAyICYmCiAgICAgICAgICAgIGNhbGxOYW1lcy5sZW5ndGggPT0gMSAmJgogICAgICAgICAgICBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMgaXMganMuTGl0ZXJhbE51bGwgJiYKICAgICAgICAgICAgbWV0aG9kLmFwcGx5SW5kZXggPT0gMCkgewogICAgICAgICAganMuU3RhdGVtZW50IGZpbmlzaChpbnQgYXJpdHkpIHsKICAgICAgICAgICAgLy8gU2hvcnQgZm9ybSBmb3IgZXhhY3RseSAwLzEvMiBhcmd1bWVudHMuCiAgICAgICAgICAgIFN0cmluZyBpc0ludGVyY2VwdGVkVGFnID0gaXNJbnRlcmNlcHRlZCA/ICdpJyA6ICd1JzsKICAgICAgICAgICAgdmFyIGluc3RhbGwgPSBsb2NhbHMuZmluZCgnX2luc3RhbmNlXyR7YXJpdHl9XyR7aXNJbnRlcmNlcHRlZFRhZ30nLAogICAgICAgICAgICAgICAgJ2h1bmtIZWxwZXJzLl9pbnN0YW5jZV8ke2FyaXR5fSR7aXNJbnRlcmNlcHRlZFRhZ30nKTsKICAgICAgICAgICAgcmV0dXJuIGpzLmpzLnN0YXRlbWVudCgnJycKICAgICAgICAgICAgICAgICNpbnN0YWxsKCNjb250YWluZXIsICNnZXR0ZXJOYW1lLCAjbmFtZSwgI2Z1blR5cGUpJycnLCB7CiAgICAgICAgICAgICAgImluc3RhbGwiOiBpbnN0YWxsLAogICAgICAgICAgICAgICJjb250YWluZXIiOiBjb250YWluZXIsCiAgICAgICAgICAgICAgImdldHRlck5hbWUiOiBqcy5xdW90ZU5hbWUobWV0aG9kLnRlYXJPZmZOYW1lKSwKICAgICAgICAgICAgICAibmFtZSI6IGZ1bnNPck5hbWVzLnNpbmdsZSwKICAgICAgICAgICAgICAiZnVuVHlwZSI6IG1ldGhvZC5mdW5jdGlvblR5cGUsCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQoKICAgICAgICAgIHZhciBpbnN0YWxsZWROYW1lID0gY2FsbE5hbWVzLnNpbmdsZTsKICAgICAgICAgIGlmIChpbnN0YWxsZWROYW1lID09IGNhbGwwTmFtZSkgcmV0dXJuIGZpbmlzaCgwKTsKICAgICAgICAgIGlmIChpbnN0YWxsZWROYW1lID09IGNhbGwxTmFtZSkgcmV0dXJuIGZpbmlzaCgxKTsKICAgICAgICAgIGlmIChpbnN0YWxsZWROYW1lID09IGNhbGwyTmFtZSkgcmV0dXJuIGZpbmlzaCgyKTsKICAgICAgICB9CgogICAgICAgIHZhciBpbnN0YWxsID0KICAgICAgICAgICAgbG9jYWxzLmZpbmQoJ19pbnN0YW5jZScsICdodW5rSGVscGVycy5pbnN0YWxsSW5zdGFuY2VUZWFyT2ZmJyk7CiAgICAgICAgcmV0dXJuIGpzLmpzLnN0YXRlbWVudCgnJycKICAgICAgICAgICAgI2luc3RhbGwoI2NvbnRhaW5lciwgI2dldHRlck5hbWUsICNpc0ludGVyY2VwdGVkLAogICAgICAgICAgICAgICAgICAgICAjcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgI29wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgI2NhbGxOYW1lcywgI2Z1bnNPck5hbWVzLCAjZnVuVHlwZSwgI2FwcGx5SW5kZXgpJycnLCB7CiAgICAgICAgICAiaW5zdGFsbCI6IGluc3RhbGwsCiAgICAgICAgICAiY29udGFpbmVyIjogY29udGFpbmVyLAogICAgICAgICAgImdldHRlck5hbWUiOiBqcy5xdW90ZU5hbWUobWV0aG9kLnRlYXJPZmZOYW1lKSwKICAgICAgICAgIC8vICdUcnV0aHknIHZhbHVlcyBhcmUgb2sgZm9yIGBpc0ludGVyY2VwdGVkYC4KICAgICAgICAgICJpc0ludGVyY2VwdGVkIjoganMubnVtYmVyKGlzSW50ZXJjZXB0ZWQgPyAxIDogMCksCiAgICAgICAgICAicmVxdWlyZWRQYXJhbWV0ZXJDb3VudCI6IGpzLm51bWJlcihyZXF1aXJlZFBhcmFtZXRlckNvdW50KSwKICAgICAgICAgICJvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMiOiBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgICAgICAiY2FsbE5hbWVzIjogY2FsbE5hbWVBcnJheSwKICAgICAgICAgICJmdW5zT3JOYW1lcyI6IGZ1bnNPck5hbWVzQXJyYXksCiAgICAgICAgICAiZnVuVHlwZSI6IG1ldGhvZC5mdW5jdGlvblR5cGUsCiAgICAgICAgICAiYXBwbHlJbmRleCI6IGFwcGx5SW5kZXgsCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KCiAgICBMaXN0PGpzLlN0YXRlbWVudD4gaW5pdHMgPSBbXTsKICAgIGpzLkV4cHJlc3Npb24gdGVtcDsKCiAgICBmb3IgKExpYnJhcnkgbGlicmFyeSBpbiBmcmFnbWVudC5saWJyYXJpZXMpIHsKICAgICAgZm9yIChTdGF0aWNNZXRob2QgbWV0aG9kIGluIGxpYnJhcnkuc3RhdGljcykgewogICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBjYW4gdGhlcmUgYmUgYW55dGhpbmcgZWxzZSB0aGFuIGEgU3RhdGljRGFydE1ldGhvZD8KICAgICAgICBpZiAobWV0aG9kIGlzIFN0YXRpY0RhcnRNZXRob2QpIHsKICAgICAgICAgIGlmIChtZXRob2QubmVlZHNUZWFyT2ZmKSB7CiAgICAgICAgICAgIEhvbGRlciBob2xkZXIgPSBtZXRob2QuaG9sZGVyOwogICAgICAgICAgICBqcy5TdGF0ZW1lbnQgc3RhdGVtZW50ID0KICAgICAgICAgICAgICAgIGVtaXRJbnN0YWxsVGVhck9mZihuZXcganMuVmFyaWFibGVVc2UoaG9sZGVyLm5hbWUpLCBtZXRob2QpOwogICAgICAgICAgICByZWdpc3RlckVudGl0eUFzdChtZXRob2QuZWxlbWVudCwgc3RhdGVtZW50LAogICAgICAgICAgICAgICAgbGlicmFyeTogbGlicmFyeS5lbGVtZW50KTsKICAgICAgICAgICAgaW5pdHMuYWRkKHN0YXRlbWVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGZvciAoQ2xhc3MgY2xzIGluIGxpYnJhcnkuY2xhc3NlcykgewogICAgICAgIGlmIChjbHMuaXNTb2Z0RGVmZXJyZWQgIT0gc29mdERlZmVycmVkKSBjb250aW51ZTsKICAgICAgICB2YXIgbWV0aG9kcyA9IGNscy5tZXRob2RzLndoZXJlKChkeW5hbWljIG0pID0+IG0ubmVlZHNUZWFyT2ZmKS50b0xpc3QoKTsKICAgICAgICBqcy5FeHByZXNzaW9uIGNvbnRhaW5lciA9IGpzLmpzKCIjLnByb3RvdHlwZSIsIGNsYXNzUmVmZXJlbmNlKGNscykpOwogICAgICAgIGpzLkV4cHJlc3Npb24gcmVmZXJlbmNlID0gY29udGFpbmVyOwogICAgICAgIGlmIChtZXRob2RzLmxlbmd0aCA+IDEpIHsKICAgICAgICAgIGlmICh0ZW1wID09IG51bGwpIHsKICAgICAgICAgICAgaW5pdHMuYWRkKGpzLmpzLnN0YXRlbWVudCgndmFyIF87JykpOwogICAgICAgICAgICB0ZW1wID0ganMuanMoJ18nKTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIEZpcnN0IGNhbGwgdXNlcyBhc3NpZ25tZW50IHRvIHRlbXAgdG8gY2FjaGUgdGhlIGNvbnRhaW5lci4KICAgICAgICAgIHJlZmVyZW5jZSA9IGpzLmpzKCcjID0gIycsIFt0ZW1wLCBjb250YWluZXJdKTsKICAgICAgICB9CiAgICAgICAgZm9yIChJbnN0YW5jZU1ldGhvZCBtZXRob2QgaW4gbWV0aG9kcykgewogICAgICAgICAganMuU3RhdGVtZW50IHN0YXRlbWVudCA9IGVtaXRJbnN0YWxsVGVhck9mZihyZWZlcmVuY2UsIG1ldGhvZCk7CiAgICAgICAgICByZWdpc3RlckVudGl0eUFzdChtZXRob2QuZWxlbWVudCwgc3RhdGVtZW50KTsKICAgICAgICAgIGluaXRzLmFkZChzdGF0ZW1lbnQpOwogICAgICAgICAgcmVmZXJlbmNlID0gdGVtcDsgLy8gU2Vjb25kIGFuZCBzdWJzZXF1ZW50IGNhbGxzIHVzZSB0ZW1wLgogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmIChsb2NhbHMuaXNOb3RFbXB0eSkgewogICAgICBpbml0cy5pbnNlcnQoMCwgbG9jYWxzLnRvU3RhdGVtZW50KCkpOwogICAgfQoKICAgIHJldHVybiB3cmFwUGhhc2UoJ2luc3RhbGxUZWFyT2ZmcycsIGluaXRzKTsKICB9CgogIC8vLyBFbWl0cyB0aGUgY29uc3RhbnRzIHNlY3Rpb24uCiAganMuU3RhdGVtZW50IGVtaXRDb25zdGFudHMoRnJhZ21lbnQgZnJhZ21lbnQpIHsKICAgIExpc3Q8anMuU3RhdGVtZW50PiBhc3NpZ25tZW50cyA9IFtdOwogICAgYm9vbCBoYXNMaXN0ID0gZmFsc2U7CiAgICBmb3IgKENvbnN0YW50IGNvbnN0YW50IGluIGZyYWdtZW50LmNvbnN0YW50cykgewogICAgICAvLyBUT0RPKDI1MjMwKTogV2Ugb25seSBuZWVkIHRvIG5hbWUgY29uc3RhbnRzIHRoYXQgYXJlIHVzZWQgZnJvbSBmdW5jdGlvbgogICAgICAvLyBib2RpZXMgb3IgZnJvbSBvdGhlciBjb25zdGFudHMgaW4gYSBkaWZmZXJlbnQgcGFydC4KICAgICAgdmFyIGFzc2lnbm1lbnQgPSBqcy5qcy5zdGF0ZW1lbnQoJyMuIyA9ICMnLCBbCiAgICAgICAgY29uc3RhbnQuaG9sZGVyLm5hbWUsCiAgICAgICAgY29uc3RhbnQubmFtZSwKICAgICAgICBfY29uc3RhbnRFbWl0dGVyLmdlbmVyYXRlKGNvbnN0YW50LnZhbHVlKQogICAgICBdKTsKICAgICAgX2R1bXBJbmZvVGFzay5yZWdpc3RlckNvbnN0YW50QXN0KGNvbnN0YW50LnZhbHVlLCBhc3NpZ25tZW50KTsKICAgICAgYXNzaWdubWVudHMuYWRkKGFzc2lnbm1lbnQpOwogICAgICBpZiAoY29uc3RhbnQudmFsdWUuaXNMaXN0KSBoYXNMaXN0ID0gdHJ1ZTsKICAgIH0KICAgIGlmIChoYXNMaXN0KSB7CiAgICAgIGFzc2lnbm1lbnRzLmluc2VydCgKICAgICAgICAgIDAsIGpzLmpzLnN0YXRlbWVudCgndmFyIG1ha2VDb25zdExpc3QgPSBodW5rSGVscGVycy5tYWtlQ29uc3RMaXN0OycpKTsKICAgIH0KICAgIHJldHVybiB3cmFwUGhhc2UoJ2NvbnN0YW50cycsIGFzc2lnbm1lbnRzKTsKICB9CgogIC8vLyBFbWl0cyB0aGUgc3RhdGljIG5vbi1maW5hbCBmaWVsZHMgc2VjdGlvbi4KICAvLy8KICAvLy8gVGhpcyBzZWN0aW9uIGluaXRpYWxpemVzIGFsbCBzdGF0aWMgbm9uLWZpbmFsIGZpZWxkcyB0aGF0IGRvbid0IHJlcXVpcmUKICAvLy8gYW4gaW5pdGlhbGl6ZXIuCiAganMuU3RhdGVtZW50IGVtaXRTdGF0aWNOb25GaW5hbEZpZWxkcyhGcmFnbWVudCBmcmFnbWVudCkgewogICAgTGlzdDxTdGF0aWNGaWVsZD4gZmllbGRzID0gZnJhZ21lbnQuc3RhdGljTm9uRmluYWxGaWVsZHM7CiAgICAvLyBUT0RPKHNyYSk6IENoYWluIGFzc2lnbm1lbnRzIHRoYXQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSwgaS5lLgogICAgLy8KICAgIC8vICAgICQueCA9IG51bGw7ICQueSA9IG51bGw7ICQueiA9IG51bGw7CiAgICAvLyAtLT4KICAgIC8vICAgICQueiA9ICQueSA9ICQueCA9IG51bGw7CiAgICAvLwogICAgSXRlcmFibGU8anMuU3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gZmllbGRzLm1hcCgoU3RhdGljRmllbGQgZmllbGQpIHsKICAgICAgYXNzZXJ0KGZpZWxkLmhvbGRlci5pc1N0YXRpY1N0YXRlSG9sZGVyKTsKICAgICAganMuU3RhdGVtZW50IHN0YXRlbWVudDsKICAgICAgaWYgKGZpZWxkLmlzSW5pdGlhbGl6ZWRCeUNvbnN0YW50KSB7CiAgICAgICAgc3RhdGVtZW50ID0ganMuanMKICAgICAgICAgICAgLnN0YXRlbWVudCgiIy4jID0gIzsiLCBbZmllbGQuaG9sZGVyLm5hbWUsIGZpZWxkLm5hbWUsIGZpZWxkLmNvZGVdKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEgaGFjay4gRmllbGQgaW5pdGlhbGl6ZXJzIGFyZSBnZW5lcmF0ZWQgYXMgYQogICAgICAgIC8vIGZ1bmN0aW9uIGVuZGluZyB3aXRoIGEgcmV0dXJuIHN0YXRlbWVudC4gV2UgcmVwbGFjZSB0aGUgZnVuY3Rpb24KICAgICAgICAvLyB3aXRoIHRoZSBib2R5IGJsb2NrIGFuZCByZXBsYWNlIHRoZSByZXR1cm4gc3RhdGVtZW50IHdpdGggYW4KICAgICAgICAvLyBhc3NpZ25tZW50IHRvIHRoZSBmaWVsZC4KICAgICAgICAvLwogICAgICAgIC8vIFNpbmNlIHVubmVlZGVkIGJsb2NrcyBhcmUgbm90IGdlbmVyYXRlZCBpbiB0aGUgb3V0cHV0LAogICAgICAgIC8vIHRoZSBzdGF0ZW1lbnQocykgb2YgdGhlIGluaXRpYWxpemVzIGFyZSBpbmxpbmVkIGluIHRoZSBlbWl0dGVkIGNvZGUuCiAgICAgICAgLy8KICAgICAgICAvLyBUaGlzIGlzIGEgY2hlYXAgd2F5IG9mIHN1cHBvcnRpbmcgZWFnZXIgZmllbGRzIChhcyBvcHBvc2VkIHRvCiAgICAgICAgLy8gZ2VuZXJhdGluZyBvbmUgU1NBIGdyYXBoIGZvciBhbGwgZWFnZXIgZmllbGRzKSB0aG91Z2ggaXQgZG9lcyBub3QKICAgICAgICAvLyBhdm9pZCByZWR1bmRhbnQgZGVjbGFyYXRpb24gb2YgbG9jYWwgdmFyaWFibGUsIGZvciBpbnN0YW5jZSBmb3IKICAgICAgICAvLyB0eXBlIGFyZ3VtZW50cy4KICAgICAgICBqcy5GdW4gY29kZSA9IGZpZWxkLmNvZGU7CiAgICAgICAgYXNzZXJ0KGNvZGUgIT0gbnVsbCwgIk5vIGNvZGUgZm9yICRmaWVsZCIpOwogICAgICAgIGlmIChjb2RlLnBhcmFtcy5pc0VtcHR5ICYmCiAgICAgICAgICAgIGNvZGUuYm9keS5zdGF0ZW1lbnRzLmxlbmd0aCA9PSAxICYmCiAgICAgICAgICAgIGNvZGUuYm9keS5zdGF0ZW1lbnRzLmxhc3QgaXMganMuUmV0dXJuKSB7CiAgICAgICAgICAvLyBGb3Igbm93IHdlIG9ubHkgc3VwcG9ydCBpbml0aWFsaXplcnMgb2YgdGhlIGZvcm0KICAgICAgICAgIC8vCiAgICAgICAgICAvLyAgIGZ1bmN0aW9uKCkgeyByZXR1cm4gZTsgfQogICAgICAgICAgLy8KICAgICAgICAgIC8vIFRvIGF2b2lkIHVuZm9yZXNlZW4gY29uc2VxdWVuY2VzIG9mIGhhdmluZyBwYXJhbWV0ZXJzIGFuZCBsb2NhbHMKICAgICAgICAgIC8vIGluIHRoZSBpbml0aWFsaXplciBjb2RlLgogICAgICAgICAganMuUmV0dXJuIGxhc3QgPSBjb2RlLmJvZHkuc3RhdGVtZW50cy5sYXN0OwogICAgICAgICAgc3RhdGVtZW50ID0ganMuanMuc3RhdGVtZW50KAogICAgICAgICAgICAgICIjLiMgPSAjOyIsIFtmaWVsZC5ob2xkZXIubmFtZSwgZmllbGQubmFtZSwgbGFzdC52YWx1ZV0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBTYWZlIGZhbGxiYWNrIGluIHRoZSBldmVudCBvZiBhIGZpZWxkIGluaXRpYWxpemVyIHdpdGggbm8gcmV0dXJuCiAgICAgICAgICAvLyBzdGF0ZW1lbnQgYXMgdGhlIGxhc3Qgc3RhdGVtZW50LgogICAgICAgICAgc3RhdGVtZW50ID0ganMuanMKICAgICAgICAgICAgICAuc3RhdGVtZW50KCIjLiMgPSAjKCk7IiwgW2ZpZWxkLmhvbGRlci5uYW1lLCBmaWVsZC5uYW1lLCBjb2RlXSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlZ2lzdGVyRW50aXR5QXN0KGZpZWxkLmVsZW1lbnQsIHN0YXRlbWVudCwKICAgICAgICAgIGxpYnJhcnk6IGZpZWxkLmVsZW1lbnQubGlicmFyeSk7CiAgICAgIHJldHVybiBzdGF0ZW1lbnQ7CiAgICB9KTsKICAgIHJldHVybiB3cmFwUGhhc2UoJ3N0YXRpY0ZpZWxkcycsIHN0YXRlbWVudHMudG9MaXN0KCkpOwogIH0KCiAgLy8vIEVtaXRzIGxhenkgZmllbGRzLgogIC8vLwogIC8vLyBUaGlzIHNlY3Rpb24gaW5pdGlhbGl6ZXMgYWxsIHN0YXRpYyAoZmluYWwgYW5kIG5vbi1maW5hbCkgZmllbGRzIHRoYXQKICAvLy8gcmVxdWlyZSBhbiBpbml0aWFsaXplci4KICBqcy5TdGF0ZW1lbnQgZW1pdExhemlseUluaXRpYWxpemVkU3RhdGljcyhGcmFnbWVudCBmcmFnbWVudCkgewogICAgTGlzdDxTdGF0aWNGaWVsZD4gZmllbGRzID0gZnJhZ21lbnQuc3RhdGljTGF6aWx5SW5pdGlhbGl6ZWRGaWVsZHM7CiAgICBMaXN0PGpzLlN0YXRlbWVudD4gc3RhdGVtZW50cyA9IFtdOwogICAgTG9jYWxBbGlhc2VzIGxvY2FscyA9IExvY2FsQWxpYXNlcygpOwogICAgZm9yIChTdGF0aWNGaWVsZCBmaWVsZCBpbiBmaWVsZHMpIHsKICAgICAgYXNzZXJ0KGZpZWxkLmhvbGRlci5pc1N0YXRpY1N0YXRlSG9sZGVyKTsKICAgICAganMuU3RhdGVtZW50IHN0YXRlbWVudCA9IGpzLmpzLnN0YXRlbWVudCgiIygjLCAjLCAjLCAjKTsiLCBbCiAgICAgICAgbG9jYWxzLmZpbmQoJ19sYXp5JywgJ2h1bmtIZWxwZXJzLmxhenknKSwKICAgICAgICBmaWVsZC5ob2xkZXIubmFtZSwKICAgICAgICBqcy5xdW90ZU5hbWUoZmllbGQubmFtZSksCiAgICAgICAganMucXVvdGVOYW1lKGZpZWxkLmdldHRlck5hbWUpLAogICAgICAgIGZpZWxkLmNvZGUKICAgICAgXSk7CgogICAgICByZWdpc3RlckVudGl0eUFzdChmaWVsZC5lbGVtZW50LCBzdGF0ZW1lbnQsCiAgICAgICAgICBsaWJyYXJ5OiBmaWVsZC5lbGVtZW50LmxpYnJhcnkpOwogICAgICBzdGF0ZW1lbnRzLmFkZChzdGF0ZW1lbnQpOwogICAgfQoKICAgIGlmIChsb2NhbHMuaXNOb3RFbXB0eSkgewogICAgICBzdGF0ZW1lbnRzLmluc2VydCgwLCBsb2NhbHMudG9TdGF0ZW1lbnQoKSk7CiAgICB9CgogICAgcmV0dXJuIHdyYXBQaGFzZSgnbGF6eUluaXRpYWxpemVycycsIHN0YXRlbWVudHMpOwogIH0KCiAgLy8vIEVtaXRzIHRoZSBlbWJlZGRlZCBnbG9iYWxzIHRoYXQgYXJlIG5lZWRlZCBmb3IgZGVmZXJyZWQgbG9hZGluZy4KICAvLy8KICAvLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGludm9rZWQgZm9yIHRoZSBtYWluIGZyYWdtZW50LgogIC8vLwogIC8vLyBUaGUgW2xvYWRNYXBdIGNvbnRhaW5zIGEgbWFwIGZyb20gbG9hZC1pZHMgKGZvciBlYWNoIGRlZmVycmVkIGxpYnJhcnkpCiAgLy8vIHRvIHRoZSBsaXN0IG9mIGdlbmVyYXRlZCBmcmFnbWVudHMgdGhhdCBtdXN0IGJlIGluc3RhbGxlZCB3aGVuIHRoZQogIC8vLyBkZWZlcnJlZCBsaWJyYXJ5IGlzIGxvYWRlZC4KICBJdGVyYWJsZTxqcy5Qcm9wZXJ0eT4gZW1pdEVtYmVkZGVkR2xvYmFsc0ZvckRlZmVycmVkTG9hZGluZygKICAgICAgRGVmZXJyZWRMb2FkaW5nU3RhdGUgZGVmZXJyZWRMb2FkaW5nU3RhdGUpIHsKICAgIExpc3Q8anMuUHJvcGVydHk+IGdsb2JhbHMgPSBbXTsKCiAgICBnbG9iYWxzLmFkZChuZXcganMuUHJvcGVydHkoCiAgICAgICAganMuc3RyaW5nKERFRkVSUkVEX0lOSVRJQUxJWkVEKSwganMuanMoIk9iamVjdC5jcmVhdGUobnVsbCkiKSkpOwoKICAgIFN0cmluZyBkZWZlcnJlZEdsb2JhbCA9IE1vZGVsRW1pdHRlci5kZWZlcnJlZEluaXRpYWxpemVyc0dsb2JhbDsKICAgIGpzLkV4cHJlc3Npb24gaXNIdW5rTG9hZGVkRnVuY3Rpb24gPQogICAgICAgIGpzLmpzKCJmdW5jdGlvbihoYXNoKSB7IHJldHVybiAhISRkZWZlcnJlZEdsb2JhbFtoYXNoXTsgfSIpOwogICAgZ2xvYmFscwogICAgICAgIC5hZGQobmV3IGpzLlByb3BlcnR5KGpzLnN0cmluZyhJU19IVU5LX0xPQURFRCksIGlzSHVua0xvYWRlZEZ1bmN0aW9uKSk7CgogICAganMuRXhwcmVzc2lvbiBpc0h1bmtJbml0aWFsaXplZEZ1bmN0aW9uID0ganMuanMoCiAgICAgICAgImZ1bmN0aW9uKGhhc2gpIHsgcmV0dXJuICEhI2RlZmVycmVkSW5pdGlhbGl6ZWRbaGFzaF07IH0iLCB7CiAgICAgICdkZWZlcnJlZEluaXRpYWxpemVkJzogZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2VzcyhERUZFUlJFRF9JTklUSUFMSVpFRCkKICAgIH0pOwogICAgZ2xvYmFscy5hZGQobmV3IGpzLlByb3BlcnR5KAogICAgICAgIGpzLnN0cmluZyhJU19IVU5LX0lOSVRJQUxJWkVEKSwgaXNIdW5rSW5pdGlhbGl6ZWRGdW5jdGlvbikpOwoKICAgIC8vLyBTZWUgW2ZpbmFsaXplRGVmZXJyZWRMb2FkaW5nRGF0YV0gZm9yIHRoZSBmb3JtYXQgb2YgdGhlIGRlZmVycmVkIGh1bmsuCiAgICBqcy5FeHByZXNzaW9uIGluaXRpYWxpemVMb2FkZWRIdW5rRnVuY3Rpb24gPSBqcy5qcygiIiIKICAgICAgICAgICAgZnVuY3Rpb24oaGFzaCkgewogICAgICAgICAgICAgIHZhciBodW5rID0gJGRlZmVycmVkR2xvYmFsW2hhc2hdOwogICAgICAgICAgICAgIGlmIChodW5rID09IG51bGwpIHsKICAgICAgICAgICAgICAgIHRocm93ICJEZWZlcnJlZExvYWRpbmcgc3RhdGUgZXJyb3I6IGNvZGUgd2l0aCBoYXNoICciICsKICAgICAgICAgICAgICAgICAgICBoYXNoICsgIicgd2FzIG5vdCBsb2FkZWQiOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpbml0aWFsaXplRGVmZXJyZWRIdW5rKGh1bmspOwogICAgICAgICAgICAgICNkZWZlcnJlZEluaXRpYWxpemVkW2hhc2hdID0gdHJ1ZTsKICAgICAgICAgICAgfSIiIiwgewogICAgICAnZGVmZXJyZWRJbml0aWFsaXplZCc6IGdlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3MoREVGRVJSRURfSU5JVElBTElaRUQpCiAgICB9KTsKCiAgICBnbG9iYWxzLmFkZChuZXcganMuUHJvcGVydHkoCiAgICAgICAganMuc3RyaW5nKElOSVRJQUxJWkVfTE9BREVEX0hVTkspLCBpbml0aWFsaXplTG9hZGVkSHVua0Z1bmN0aW9uKSk7CgogICAgZ2xvYmFscy5hZGQobmV3IGpzLlByb3BlcnR5KGpzLnN0cmluZyhERUZFUlJFRF9MSUJSQVJZX1BBUlRTKSwKICAgICAgICBkZWZlcnJlZExvYWRpbmdTdGF0ZS5kZWZlcnJlZExpYnJhcnlQYXJ0cykpOwogICAgZ2xvYmFscy5hZGQobmV3IGpzLlByb3BlcnR5KAogICAgICAgIGpzLnN0cmluZyhERUZFUlJFRF9QQVJUX1VSSVMpLCBkZWZlcnJlZExvYWRpbmdTdGF0ZS5kZWZlcnJlZFBhcnRVcmlzKSk7CiAgICBnbG9iYWxzLmFkZChuZXcganMuUHJvcGVydHkoanMuc3RyaW5nKERFRkVSUkVEX1BBUlRfSEFTSEVTKSwKICAgICAgICBkZWZlcnJlZExvYWRpbmdTdGF0ZS5kZWZlcnJlZFBhcnRIYXNoZXMpKTsKCiAgICByZXR1cm4gZ2xvYmFsczsKICB9CgogIC8vIENyZWF0ZSBkYXRhIHVzZWQgZm9yIGxvYWRpbmcgYW5kIGluaXRpYWxpemluZyB0aGUgaHVua3MgZm9yIGEgZGVmZXJyZWQKICAvLyBpbXBvcnQuIFRoZXJlIGFyZSB0aHJlZSBwYXJ0czogYSBtYXAgZnJvbSBsb2FkSWQgdG8gbGlzdCBvZiBwYXJ0cywgd2hlcmUKICAvLyBwYXJ0cyBhcmUgcmVwcmVzZW50ZWQgYXMgYW4gaW5kZXg7IGFuIGFycmF5IG9mIHVyaXMgaW5kZXhlZCBieSBwYXJ0OyBhbmQgYW4KICAvLyBhcnJheSBvZiBoYXNoZXMgaW5kZXhlZCBieSBwYXJ0LgogIC8vIFtkZWZlcnJlZExvYWRIYXNoZXNdIG1heSBoYXZlIG1pc3NpbmcgZW50cmllcyB0byBpbmRpY2F0ZSBlbXB0eSBwYXJ0cy4KICB2b2lkIGZpbmFsaXplRGVmZXJyZWRMb2FkaW5nRGF0YSgKICAgICAgTWFwPFN0cmluZywgTGlzdDxGcmFnbWVudD4+IGxvYWRNYXAsCiAgICAgIE1hcDxEZWZlcnJlZEZyYWdtZW50LCBTdHJpbmc+IGRlZmVycmVkTG9hZEhhc2hlcywKICAgICAgRGVmZXJyZWRMb2FkaW5nU3RhdGUgZGVmZXJyZWRMb2FkaW5nU3RhdGUpIHsKICAgIGlmIChsb2FkTWFwLmlzRW1wdHkpIHJldHVybjsKCiAgICBNYXA8RnJhZ21lbnQsIGludD4gZnJhZ21lbnRJbmRleGVzID0ge307CiAgICBMaXN0PFN0cmluZz4gZnJhZ21lbnRVcmlzID0gW107CiAgICBMaXN0PFN0cmluZz4gZnJhZ21lbnRIYXNoZXMgPSBbXTsKCiAgICBMaXN0PGpzLlByb3BlcnR5PiBsaWJyYXJ5UGFydHNNYXBFbnRyaWVzID0gW107CgogICAgbG9hZE1hcC5mb3JFYWNoKChTdHJpbmcgbG9hZElkLCBMaXN0PEZyYWdtZW50PiBmcmFnbWVudExpc3QpIHsKICAgICAgTGlzdDxqcy5FeHByZXNzaW9uPiBpbmRleGVzID0gW107CiAgICAgIGZvciAoRnJhZ21lbnQgZnJhZ21lbnQgaW4gZnJhZ21lbnRMaXN0KSB7CiAgICAgICAgU3RyaW5nIGZyYWdtZW50SGFzaCA9IGRlZmVycmVkTG9hZEhhc2hlc1tmcmFnbWVudF07CiAgICAgICAgaWYgKGZyYWdtZW50SGFzaCA9PSBudWxsKSBjb250aW51ZTsKICAgICAgICBpbnQgaW5kZXggPSBmcmFnbWVudEluZGV4ZXNbZnJhZ21lbnRdOwogICAgICAgIGlmIChpbmRleCA9PSBudWxsKSB7CiAgICAgICAgICBpbmRleCA9IGZyYWdtZW50SW5kZXhlc1tmcmFnbWVudF0gPSBmcmFnbWVudEluZGV4ZXMubGVuZ3RoOwogICAgICAgICAgZnJhZ21lbnRVcmlzLmFkZCgKICAgICAgICAgICAgICAiJHtmcmFnbWVudC5vdXRwdXRGaWxlTmFtZX0uJHtNb2RlbEVtaXR0ZXIuZGVmZXJyZWRFeHRlbnNpb259Iik7CiAgICAgICAgICBmcmFnbWVudEhhc2hlcy5hZGQoZnJhZ21lbnRIYXNoKTsKICAgICAgICB9CiAgICAgICAgaW5kZXhlcy5hZGQoanMubnVtYmVyKGluZGV4KSk7CiAgICAgIH0KICAgICAgbGlicmFyeVBhcnRzTWFwRW50cmllcy5hZGQoCiAgICAgICAgICBuZXcganMuUHJvcGVydHkoanMuc3RyaW5nKGxvYWRJZCksIG5ldyBqcy5BcnJheUluaXRpYWxpemVyKGluZGV4ZXMpKSk7CiAgICB9KTsKCiAgICBkZWZlcnJlZExvYWRpbmdTdGF0ZS5kZWZlcnJlZExpYnJhcnlQYXJ0cwogICAgICAgIC5zZXRWYWx1ZShuZXcganMuT2JqZWN0SW5pdGlhbGl6ZXIobGlicmFyeVBhcnRzTWFwRW50cmllcykpOwogICAgZGVmZXJyZWRMb2FkaW5nU3RhdGUuZGVmZXJyZWRQYXJ0VXJpcwogICAgICAgIC5zZXRWYWx1ZShqcy5zdHJpbmdBcnJheShmcmFnbWVudFVyaXMpKTsKICAgIGRlZmVycmVkTG9hZGluZ1N0YXRlLmRlZmVycmVkUGFydEhhc2hlcwogICAgICAgIC5zZXRWYWx1ZShqcy5zdHJpbmdBcnJheShmcmFnbWVudEhhc2hlcykpOwogIH0KCiAgLy8vIEVtaXRzIHRoZSBbTUFOR0xFRF9HTE9CQUxfTkFNRVNdIGVtYmVkZGVkIGdsb2JhbC4KICAvLy8KICAvLy8gVGhpcyBnbG9iYWwgbWFwcyBtaW5pZmllZCBuYW1lcyBmb3Igc2VsZWN0ZWQgY2xhc3NlcyAoc29tZSBpbXBvcnRhbnQKICAvLy8gY29yZSBjbGFzc2VzLCBhbmQgc29tZSBuYXRpdmUgY2xhc3NlcykgdG8gdGhlaXIgdW5taW5pZmllZCBuYW1lcy4KICBqcy5Qcm9wZXJ0eSBlbWl0TWFuZ2xlZEdsb2JhbE5hbWVzKCkgewogICAgTGlzdDxqcy5Qcm9wZXJ0eT4gbmFtZXMgPSBbXTsKCiAgICBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cyA9IF9jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50czsKICAgIC8vIFdlIHdhbnQgdG8ga2VlcCB0aGUgb3JpZ2luYWwgbmFtZXMgZm9yIHRoZSBtb3N0IGNvbW1vbiBjb3JlIGNsYXNzZXMgd2hlbgogICAgLy8gY2FsbGluZyB0b1N0cmluZyBvbiB0aGVtLgogICAgTGlzdDxDbGFzc0VudGl0eT4gbmF0aXZlQ2xhc3Nlc05lZWRpbmdVbm1hbmdsZWROYW1lID0gWwogICAgICBjb21tb25FbGVtZW50cy5pbnRDbGFzcywKICAgICAgY29tbW9uRWxlbWVudHMuZG91YmxlQ2xhc3MsCiAgICAgIGNvbW1vbkVsZW1lbnRzLm51bUNsYXNzLAogICAgICBjb21tb25FbGVtZW50cy5zdHJpbmdDbGFzcywKICAgICAgY29tbW9uRWxlbWVudHMuYm9vbENsYXNzLAogICAgICBjb21tb25FbGVtZW50cy5udWxsQ2xhc3MsCiAgICAgIGNvbW1vbkVsZW1lbnRzLmxpc3RDbGFzcwogICAgXTsKICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGlzIHNob3VsZCBwcm9iYWJseSBiZSBvbiBhIHBlci1mcmFnbWVudCBiYXNpcy4KICAgIG5hdGl2ZUNsYXNzZXNOZWVkaW5nVW5tYW5nbGVkTmFtZS5mb3JFYWNoKChlbGVtZW50KSB7CiAgICAgIG5hbWVzLmFkZChuZXcganMuUHJvcGVydHkoCiAgICAgICAgICBqcy5xdW90ZU5hbWUoX25hbWVyLmNsYXNzTmFtZShlbGVtZW50KSksIGpzLnN0cmluZyhlbGVtZW50Lm5hbWUpKSk7CiAgICB9KTsKCiAgICByZXR1cm4gbmV3IGpzLlByb3BlcnR5KAogICAgICAgIGpzLnN0cmluZyhNQU5HTEVEX0dMT0JBTF9OQU1FUyksIG5ldyBqcy5PYmplY3RJbml0aWFsaXplcihuYW1lcykpOwogIH0KCiAgLy8vIEVtaXRzIHRoZSBbR0VUX1RZUEVfRlJPTV9OQU1FXSBlbWJlZGRlZCBnbG9iYWwuCiAgLy8vCiAgLy8vIFRoaXMgZW1iZWRkZWQgZ2xvYmFsIHByb3ZpZGVzIGEgd2F5IHRvIGdvIGZyb20gYSBjbGFzcyBuYW1lICh3aGljaCBpcwogIC8vLyBhbHNvIHRoZSBjb25zdHJ1Y3RvcidzIG5hbWUpIHRvIHRoZSBjb25zdHJ1Y3RvciBpdHNlbGYuCiAganMuUHJvcGVydHkgZW1pdEdldFR5cGVGcm9tTmFtZSgpIHsKICAgIGpzLkV4cHJlc3Npb24gZnVuY3Rpb24gPSBqcy5qcygiZ2V0R2xvYmFsRnJvbU5hbWUiKTsKICAgIHJldHVybiBuZXcganMuUHJvcGVydHkoanMuc3RyaW5nKEdFVF9UWVBFX0ZST01fTkFNRSksIGZ1bmN0aW9uKTsKICB9CgogIC8vLyBFbWl0cyB0aGUgW01FVEFEQVRBXSBlbWJlZGRlZCBnbG9iYWwuCiAgLy8vCiAgLy8vIFRoZSBtZXRhZGF0YSBpdHNlbGYgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZCBlYXJsaWVyIGFuZCBpcyBzdG9yZWQgaW4KICAvLy8gdGhlIFtwcm9ncmFtXS4KICBMaXN0PGpzLlByb3BlcnR5PiBlbWl0TWV0YWRhdGEoUHJvZ3JhbSBwcm9ncmFtKSB7CiAgICBMaXN0PGpzLlByb3BlcnR5PiBtZXRhZGF0YUdsb2JhbHMgPSBbXTsKCiAgICBqcy5Qcm9wZXJ0eSBjcmVhdGVHbG9iYWwoanMuRXhwcmVzc2lvbiBtZXRhZGF0YSwgU3RyaW5nIGdsb2JhbCkgewogICAgICByZXR1cm4gbmV3IGpzLlByb3BlcnR5KGpzLnN0cmluZyhnbG9iYWwpLCBtZXRhZGF0YSk7CiAgICB9CgogICAgdmFyIG1haW5Vbml0ID0gcHJvZ3JhbS5tYWluRnJhZ21lbnQub3V0cHV0VW5pdDsKICAgIGpzLkV4cHJlc3Npb24gbWV0YWRhdGEgPSBwcm9ncmFtLm1ldGFkYXRhRm9yT3V0cHV0VW5pdChtYWluVW5pdCk7CiAgICBtZXRhZGF0YUdsb2JhbHMuYWRkKGNyZWF0ZUdsb2JhbChtZXRhZGF0YSwgTUVUQURBVEEpKTsKICAgIGpzLkV4cHJlc3Npb24gdHlwZXMgPSBwcm9ncmFtLm1ldGFkYXRhVHlwZXNGb3JPdXRwdXRVbml0KG1haW5Vbml0KTsKICAgIG1ldGFkYXRhR2xvYmFscy5hZGQoY3JlYXRlR2xvYmFsKHR5cGVzLCBUWVBFUykpOwoKICAgIHJldHVybiBtZXRhZGF0YUdsb2JhbHM7CiAgfQoKICAvLy8gRW1pdHMgYWxsIGVtYmVkZGVkIGdsb2JhbHMuCiAganMuU3RhdGVtZW50IGVtaXRFbWJlZGRlZEdsb2JhbHNQYXJ0MSgKICAgICAgUHJvZ3JhbSBwcm9ncmFtLCBEZWZlcnJlZExvYWRpbmdTdGF0ZSBkZWZlcnJlZExvYWRpbmdTdGF0ZSkgewogICAgTGlzdDxqcy5Qcm9wZXJ0eT4gZ2xvYmFscyA9IFtdOwoKICAgIGlmIChwcm9ncmFtLmxvYWRNYXAuaXNOb3RFbXB0eSkgewogICAgICBnbG9iYWxzCiAgICAgICAgICAuYWRkQWxsKGVtaXRFbWJlZGRlZEdsb2JhbHNGb3JEZWZlcnJlZExvYWRpbmcoZGVmZXJyZWRMb2FkaW5nU3RhdGUpKTsKICAgIH0KCiAgICBpZiAocHJvZ3JhbS50eXBlVG9JbnRlcmNlcHRvck1hcCAhPSBudWxsKSB7CiAgICAgIC8vIFRoaXMgcHJvcGVydHkgaXMgYXNzaWduZWQgbGF0ZXIuCiAgICAgIC8vIEluaXRpYWxpemUgcHJvcGVydHkgdG8gYXZvaWQgbWFwIHRyYW5zaXRpb25zLgogICAgICBnbG9iYWxzLmFkZChuZXcganMuUHJvcGVydHkoCiAgICAgICAgICBqcy5zdHJpbmcoVFlQRV9UT19JTlRFUkNFUFRPUl9NQVApLCBqcy5MaXRlcmFsTnVsbCgpKSk7CiAgICB9CgogICAgaWYgKF9vcHRpb25zLmV4cGVyaW1lbnROZXdSdGkpIHsKICAgICAgZ2xvYmFscy5hZGQoanMuUHJvcGVydHkoanMuc3RyaW5nKFJUSV9VTklWRVJTRSksIGNyZWF0ZVJ0aVVuaXZlcnNlKCkpKTsKICAgIH0KCiAgICBnbG9iYWxzLmFkZChlbWl0TWFuZ2xlZEdsb2JhbE5hbWVzKCkpOwoKICAgIC8vIFRoZSBbTUFOR0xFRF9OQU1FU10gdGFibGUgbXVzdCBjb250YWluIHRoZSBtYXBwaW5nIGZvciBjb25zdCBzeW1ib2xzLgogICAgLy8gV2l0aG91dCBjb25zdCBzeW1ib2xzLCB0aGUgdGFibGUgaXMgb25seSByZWxldmFudCBmb3IgcmVmbGVjdGlvbiBhbmQKICAgIC8vIHRoZXJlZm9yZSB1bnVzZWQgaW4gdGhpcyBlbWl0dGVyLgogICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogUmVtb3ZlIHRoZSBuZWVkIGZvciBhZGRpbmcgYW4gZW1wdHkgbGlzdCBvZgogICAgLy8gbWFuZ2xlZCBuYW1lcy4KICAgIGdsb2JhbHMuYWRkKG5ldyBqcy5Qcm9wZXJ0eSgKICAgICAgICBqcy5zdHJpbmcoTUFOR0xFRF9OQU1FUyksIG5ldyBqcy5PYmplY3RJbml0aWFsaXplcig8anMuUHJvcGVydHk+W10pKSk7CgogICAgZ2xvYmFscy5hZGQoZW1pdEdldFR5cGVGcm9tTmFtZSgpKTsKCiAgICBnbG9iYWxzLmFkZEFsbChlbWl0TWV0YWRhdGEocHJvZ3JhbSkpOwoKICAgIGlmIChwcm9ncmFtLm5lZWRzTmF0aXZlU3VwcG9ydCkgewogICAgICBnbG9iYWxzLmFkZChuZXcganMuUHJvcGVydHkoCiAgICAgICAgICBqcy5zdHJpbmcoSU5URVJDRVBUT1JTX0JZX1RBRyksIG5ldyBqcy5MaXRlcmFsTnVsbCgpKSk7CiAgICAgIGdsb2JhbHMuYWRkKG5ldyBqcy5Qcm9wZXJ0eShqcy5zdHJpbmcoTEVBRl9UQUdTKSwgbmV3IGpzLkxpdGVyYWxOdWxsKCkpKTsKICAgIH0KCiAgICBqcy5PYmplY3RJbml0aWFsaXplciBnbG9iYWxzT2JqZWN0ID0gbmV3IGpzLk9iamVjdEluaXRpYWxpemVyKGdsb2JhbHMpOwoKICAgIHJldHVybiBqcy5qcy5zdGF0ZW1lbnQoJ3ZhciBpbml0ID0gIzsnLCBnbG9iYWxzT2JqZWN0KTsKICB9CgogIC8vLyBGaW5pc2ggc2V0dGluZyB1cCBlbWJlZGRlZCBnbG9iYWxzLgogIGpzLlN0YXRlbWVudCBlbWl0RW1iZWRkZWRHbG9iYWxzUGFydDIoCiAgICAgIFByb2dyYW0gcHJvZ3JhbSwgRGVmZXJyZWRMb2FkaW5nU3RhdGUgZGVmZXJyZWRMb2FkaW5nU3RhdGUpIHsKICAgIExpc3Q8anMuU3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gW107CiAgICBpZiAocHJvZ3JhbS50eXBlVG9JbnRlcmNlcHRvck1hcCAhPSBudWxsKSB7CiAgICAgIHN0YXRlbWVudHMuYWRkKGpzLmpzLnN0YXRlbWVudCgnaW5pdC4jID0gIzsnLAogICAgICAgICAgW2pzLnN0cmluZyhUWVBFX1RPX0lOVEVSQ0VQVE9SX01BUCksIHByb2dyYW0udHlwZVRvSW50ZXJjZXB0b3JNYXBdKSk7CiAgICB9CiAgICByZXR1cm4ganMuQmxvY2soc3RhdGVtZW50cyk7CiAgfQoKICBqcy5TdGF0ZW1lbnQgZW1pdFR5cGVSdWxlcyhGcmFnbWVudCBmcmFnbWVudCkgewogICAgaWYgKCFfb3B0aW9ucy5leHBlcmltZW50TmV3UnRpKSByZXR1cm4ganMuRW1wdHlTdGF0ZW1lbnQoKTsKCiAgICBSdWxlc2V0IHJ1bGVzZXQgPSBSdWxlc2V0LmVtcHR5KCk7CiAgICBJdGVyYWJsZTxDbGFzcz4gY2xhc3NlcyA9CiAgICAgICAgZnJhZ21lbnQubGlicmFyaWVzLmV4cGFuZCgoTGlicmFyeSBsaWJyYXJ5KSA9PiBsaWJyYXJ5LmNsYXNzZXMpOwogICAgY2xhc3Nlcy5mb3JFYWNoKChDbGFzcyBjbHMpIHsKICAgICAgaWYgKGNscy5jbGFzc0NoZWNrc05ld1J0aSA9PSBudWxsKSByZXR1cm47CiAgICAgIEludGVyZmFjZVR5cGUgdGFyZ2V0VHlwZSA9IF9lbGVtZW50RW52aXJvbm1lbnQuZ2V0VGhpc1R5cGUoY2xzLmVsZW1lbnQpOwogICAgICBJdGVyYWJsZTxJbnRlcmZhY2VUeXBlPiBzdXBlcnR5cGVzID0gY2xzLmNsYXNzQ2hlY2tzTmV3UnRpLmNoZWNrcy5tYXAoCiAgICAgICAgICAoVHlwZUNoZWNrIGNoZWNrKSA9PiBfZGFydFR5cGVzLmFzSW5zdGFuY2VPZih0YXJnZXRUeXBlLCBjaGVjay5jbHMpKTsKICAgICAgcnVsZXNldC5hZGQodGFyZ2V0VHlwZSwgc3VwZXJ0eXBlcyk7CiAgICB9KTsKCiAgICBGdW5jdGlvbkVudGl0eSBtZXRob2QgPSBfY2xvc2VkV29ybGQuY29tbW9uRWxlbWVudHMucnRpQWRkUnVsZXNNZXRob2Q7CiAgICByZXR1cm4ganMuanMuc3RhdGVtZW50KCcjKGluaXQuIyxKU09OLnBhcnNlKCMpKTsnLCBbCiAgICAgIF9lbWl0dGVyLnN0YXRpY0Z1bmN0aW9uQWNjZXNzKG1ldGhvZCksCiAgICAgIFJUSV9VTklWRVJTRSwKICAgICAgX3J1bGVzZXRFbmNvZGVyLmVuY29kZVJ1bGVzZXQocnVsZXNldCksCiAgICBdKTsKICB9CgogIC8vLyBSZXR1cm5zIGFuIGV4cHJlc3Npb24gdGhhdCBjcmVhdGVzIHRoZSBpbml0aWFsIFJ0aSBVbml2ZXJzZS4KICAvLy8KICAvLy8gVGhpcyBuZWVkcyB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCBgX1VuaXZlcnNlLmNyZWF0ZWAgaW4gYGRhcnQ6X3J0aWAuCiAganMuRXhwcmVzc2lvbiBjcmVhdGVSdGlVbml2ZXJzZSgpIHsKICAgIExpc3Q8anMuUHJvcGVydHk+IHVuaXZlcnNlRmllbGRzID0gW107CiAgICB2b2lkIGluaXRGaWVsZChTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKSB7CiAgICAgIHVuaXZlcnNlRmllbGRzLmFkZChqcy5Qcm9wZXJ0eShqcy5zdHJpbmcobmFtZSksIGpzLmpzKHZhbHVlKSkpOwogICAgfQoKICAgIGluaXRGaWVsZChSdGlVbml2ZXJzZUZpZWxkTmFtZXMuZXZhbENhY2hlLCAnbmV3IE1hcCgpJyk7CiAgICBpbml0RmllbGQoUnRpVW5pdmVyc2VGaWVsZE5hbWVzLnR5cGVSdWxlcywgJ3t9Jyk7CiAgICBpbml0RmllbGQoUnRpVW5pdmVyc2VGaWVsZE5hbWVzLnNoYXJlZEVtcHR5QXJyYXksICdbXScpOwoKICAgIHJldHVybiBqcy5PYmplY3RJbml0aWFsaXplcih1bml2ZXJzZUZpZWxkcyk7CiAgfQoKICAvLy8gRW1pdHMgZGF0YSBuZWVkZWQgZm9yIG5hdGl2ZSBjbGFzc2VzLgogIC8vLwogIC8vLyBXZSBkb24ndCB0cnkgdG8gcmVkdWNlIHRoZSBzaXplIG9mIHRoZSBuYXRpdmUgZGF0YSwgYnV0IHJhdGhlciBidWlsZAogIC8vLyBKYXZhU2NyaXB0IG9iamVjdCBsaXRlcmFscyB0aGF0IGNvbnRhaW4gYWxsIHRoZSBpbmZvcm1hdGlvbiBkaXJlY3RseS4KICAvLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBvdXRwdXQgc2l6ZSBpcyBiaWdnZXIsIGJ1dCB0aGF0IHRoZSBzdGFydHVwIGlzIGZhc3Rlci4KICAvLy8KICAvLy8gVGhpcyBmdW5jdGlvbiBpcyB0aGUgc3RhdGljIGVxdWl2YWxlbnQgb2YKICAvLy8gW05hdGl2ZUdlbmVyYXRvci5idWlsZE5hdGl2ZUluZm9IYW5kbGVyXS4KICBqcy5TdGF0ZW1lbnQgZW1pdE5hdGl2ZVN1cHBvcnQoRnJhZ21lbnQgZnJhZ21lbnQpIHsKICAgIExpc3Q8anMuU3RhdGVtZW50PiBzdGF0ZW1lbnRzID0gW107CgogICAgLy8gVGhlIGlzb2xhdGUtYWZmaW5pdHkgdGFnIG11c3Qgb25seSBiZSBpbml0aWFsaXplZCBvbmNlIHBlciBwcm9ncmFtLgogICAgaWYgKGZyYWdtZW50LmlzTWFpbkZyYWdtZW50ICYmCiAgICAgICAgTmF0aXZlR2VuZXJhdG9yLm5lZWRzSXNvbGF0ZUFmZmluaXR5VGFnSW5pdGlhbGl6YXRpb24oCiAgICAgICAgICAgIF9jbG9zZWRXb3JsZC5iYWNrZW5kVXNhZ2UpKSB7CiAgICAgIHN0YXRlbWVudHMuYWRkKE5hdGl2ZUdlbmVyYXRvci5nZW5lcmF0ZUlzb2xhdGVBZmZpbml0eVRhZ0luaXRpYWxpemF0aW9uKAogICAgICAgICAgX2Nsb3NlZFdvcmxkLmJhY2tlbmRVc2FnZSwgZ2VuZXJhdGVFbWJlZGRlZEdsb2JhbEFjY2VzcywganMuanMoIiIiCiAgICAgICAgLy8gT24gVjgsIHRoZSAnaW50ZXJuJyBmdW5jdGlvbiBjb252ZXJ0cyBhIHN0cmluZyB0byBhIHN5bWJvbCwgd2hpY2gKICAgICAgICAvLyBtYWtlcyBwcm9wZXJ0eSBhY2Nlc3MgbXVjaCBmYXN0ZXIuCiAgICAgICAgLy8gVE9ETyhzcmEpOiBVc2UgU3ltYm9sIG9uIG5vbi1JRTExIGJyb3dzZXJzLgogICAgICAgIGZ1bmN0aW9uIChzKSB7CiAgICAgICAgICB2YXIgbyA9IHt9OwogICAgICAgICAgb1tzXSA9IDE7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoaHVua0hlbHBlcnMuY29udmVydFRvRmFzdE9iamVjdChvKSlbMF07CiAgICAgICAgfSIiIiwgW10pKSk7CiAgICB9CgogICAgTWFwPFN0cmluZywganMuRXhwcmVzc2lvbj4gaW50ZXJjZXB0b3JzQnlUYWcgPSB7fTsKICAgIE1hcDxTdHJpbmcsIGpzLkV4cHJlc3Npb24+IGxlYWZUYWdzID0ge307CiAgICBMaXN0PGpzLlN0YXRlbWVudD4gc3ViY2xhc3NBc3NpZ25tZW50cyA9IFtdOwoKICAgIGZvciAoTGlicmFyeSBsaWJyYXJ5IGluIGZyYWdtZW50LmxpYnJhcmllcykgewogICAgICBmb3IgKENsYXNzIGNscyBpbiBsaWJyYXJ5LmNsYXNzZXMpIHsKICAgICAgICBpZiAoY2xzLm5hdGl2ZUxlYWZUYWdzICE9IG51bGwpIHsKICAgICAgICAgIGZvciAoU3RyaW5nIHRhZyBpbiBjbHMubmF0aXZlTGVhZlRhZ3MpIHsKICAgICAgICAgICAgaW50ZXJjZXB0b3JzQnlUYWdbdGFnXSA9IGNsYXNzUmVmZXJlbmNlKGNscyk7CiAgICAgICAgICAgIGxlYWZUYWdzW3RhZ10gPSBuZXcganMuTGl0ZXJhbEJvb2wodHJ1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChjbHMubmF0aXZlTm9uTGVhZlRhZ3MgIT0gbnVsbCkgewogICAgICAgICAgZm9yIChTdHJpbmcgdGFnIGluIGNscy5uYXRpdmVOb25MZWFmVGFncykgewogICAgICAgICAgICBpbnRlcmNlcHRvcnNCeVRhZ1t0YWddID0gY2xhc3NSZWZlcmVuY2UoY2xzKTsKICAgICAgICAgICAgbGVhZlRhZ3NbdGFnXSA9IG5ldyBqcy5MaXRlcmFsQm9vbChmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY2xzLm5hdGl2ZUV4dGVuc2lvbnMgIT0gbnVsbCkgewogICAgICAgICAgICBMaXN0PENsYXNzPiBzdWJjbGFzc2VzID0gY2xzLm5hdGl2ZUV4dGVuc2lvbnM7CiAgICAgICAgICAgIGpzLkV4cHJlc3Npb24gYmFzZSA9IGpzLnN0cmluZyhjbHMubmF0aXZlTm9uTGVhZlRhZ3NbMF0pOwoKICAgICAgICAgICAgZm9yIChDbGFzcyBzdWJjbGFzcyBpbiBzdWJjbGFzc2VzKSB7CiAgICAgICAgICAgICAgc3ViY2xhc3NBc3NpZ25tZW50cy5hZGQoanMuanMuc3RhdGVtZW50KCcjLiMgPSAjOycsIFsKICAgICAgICAgICAgICAgIGNsYXNzUmVmZXJlbmNlKHN1YmNsYXNzKSwKICAgICAgICAgICAgICAgIE5BVElWRV9TVVBFUkNMQVNTX1RBR19OQU1FLAogICAgICAgICAgICAgICAgYmFzZQogICAgICAgICAgICAgIF0pKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIGlmIChpbnRlcmNlcHRvcnNCeVRhZy5pc05vdEVtcHR5KSB7CiAgICAgIHN0YXRlbWVudHMuYWRkKGpzLmpzLnN0YXRlbWVudCgKICAgICAgICAgICJodW5rSGVscGVycy5zZXRPclVwZGF0ZUludGVyY2VwdG9yc0J5VGFnKCMpOyIsCiAgICAgICAgICBqcy5vYmplY3RMaXRlcmFsKGludGVyY2VwdG9yc0J5VGFnKSkpOwogICAgfQogICAgaWYgKGxlYWZUYWdzLmlzTm90RW1wdHkpIHsKICAgICAgc3RhdGVtZW50cy5hZGQoanMuanMuc3RhdGVtZW50KAogICAgICAgICAgImh1bmtIZWxwZXJzLnNldE9yVXBkYXRlTGVhZlRhZ3MoIyk7IiwganMub2JqZWN0TGl0ZXJhbChsZWFmVGFncykpKTsKICAgIH0KICAgIHN0YXRlbWVudHMuYWRkQWxsKHN1YmNsYXNzQXNzaWdubWVudHMpOwoKICAgIHJldHVybiB3cmFwUGhhc2UoJ25hdGl2ZVN1cHBvcnQnLCBzdGF0ZW1lbnRzKTsKICB9Cn0KCmNsYXNzIExvY2FsQWxpYXNlcyB7CiAgZmluYWwgTWFwPFN0cmluZywganMuRXhwcmVzc2lvbj4gX2xvY2FscyA9IHt9OwoKICBib29sIGdldCBpc0VtcHR5ID0+IF9sb2NhbHMuaXNFbXB0eTsKICBib29sIGdldCBpc05vdEVtcHR5ID0+ICFpc0VtcHR5OwoKICBTdHJpbmcgZmluZChTdHJpbmcgYWxpYXMsIFN0cmluZyBleHByZXNzaW9uKSB7CiAgICBfbG9jYWxzW2FsaWFzXSA/Pz0ganMuanMoZXhwcmVzc2lvbik7CiAgICByZXR1cm4gYWxpYXM7CiAgfQoKICBqcy5TdGF0ZW1lbnQgdG9TdGF0ZW1lbnQoKSB7CiAgICBMaXN0PGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24+IGluaXRpYWxpemF0aW9ucyA9IFtdOwogICAgX2xvY2Fscy5mb3JFYWNoKChsb2NhbCwgdmFsdWUpIHsKICAgICAgaW5pdGlhbGl6YXRpb25zCiAgICAgICAgICAuYWRkKGpzLlZhcmlhYmxlSW5pdGlhbGl6YXRpb24oanMuVmFyaWFibGVEZWNsYXJhdGlvbihsb2NhbCksIHZhbHVlKSk7CiAgICB9KTsKICAgIHJldHVybiBqcy5FeHByZXNzaW9uU3RhdGVtZW50KGpzLlZhcmlhYmxlRGVjbGFyYXRpb25MaXN0KGluaXRpYWxpemF0aW9ucykpOwogIH0KfQoKLy8vIENvZGUgdG8gaW5pdGlhbGl6ZSBob2xkZXIgd2l0aCBhbmNpbGxhcnkgaW5mb3JtYXRpb24uCmNsYXNzIEhvbGRlckNvZGUgewogIGZpbmFsIExpc3Q8SG9sZGVyPiBhY3RpdmVIb2xkZXJzOwogIGpzLlN0YXRlbWVudCBzdGF0ZW1lbnRzOwogIEhvbGRlckNvZGUoe3RoaXMuYWN0aXZlSG9sZGVycywgdGhpcy5zdGF0ZW1lbnRzfSk7Cn0KCmNsYXNzIERlZmVycmVkTG9hZGluZ1N0YXRlIHsKICBmaW5hbCBkZWZlcnJlZExpYnJhcnlQYXJ0cyA9IG5ldyBEZWZlcnJlZFByaW1hcnlFeHByZXNzaW9uKCk7CiAgZmluYWwgZGVmZXJy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ZGsvbGliL19pbnRlcm5hbC9qc19ydW50aW1lL2xpYi9zaGFyZWQvYXN5bmNfYXdhaXRfZXJyb3JfY29kZXMuZGFydIGbLy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBDb250YWlucyBlcnJvciBjb2RlcyB0aGF0IHRyYW5zZm9ybWVkIGFzeW5jL2FzeW5jKiBmdW5jdGlvbnMgdXNlIHRvCi8vLyBjb21tdW5pY2F0ZSB3aXRoIGpzX2hlbHBlciBmdW5jdGlvbnMuCgpjb25zdCBpbnQgU1VDQ0VTUyA9IDA7CmNvbnN0IGludCBFUlJPUiA9IDE7CmNvbnN0IGludCBTVFJFQU1fV0FTX0NBTkNFTEVEID0gMjsKDABOTjwBSCoBFxUjATZwYWNrYWdlOmpzX3J1bnRpbWUvc2hhcmVkL2FzeW5jX2F3YWl0X2Vycm9yX2NvZGVzLmRhcnQ2c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL2NvZGVnZW5faGVscGVycy5kYXJ0wACzVS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi9vcHRpb25zLmRhcnQnOwppbXBvcnQgJy4uL3VuaXZlcnNlL3NlbGVjdG9yLmRhcnQnIHNob3cgU2VsZWN0b3I7CmltcG9ydCAnLi4vd29ybGQuZGFydCcgc2hvdyBKQ2xvc2VkV29ybGQ7CmltcG9ydCAnY29kZWdlbi5kYXJ0JyBzaG93IENvZGVnZW5QaGFzZTsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKCi8vLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW52b2NhdGlvbiBvZiBbc2VsZWN0b3JdIG9uIFttZW1iZXJdIGNhbiB1c2UgYW4KLy8vIGFsaWFzZWQgbWVtYmVyLgovLy8KLy8vIEludm9raW5nIGEgc3VwZXIgZ2V0dGVyIGlzbid0IHN1cHBvcnRlZCwgdGhpcyB3b3VsZCByZXF1aXJlIGNoYW5nZXMgdG8KLy8vIGNvbXBhY3QgZmllbGQgZGVzY3JpcHRvcnMgaW4gdGhlIGVtaXR0ZXIuCmJvb2wgY2FuVXNlQWxpYXNlZFN1cGVyTWVtYmVyKE1lbWJlckVudGl0eSBtZW1iZXIsIFNlbGVjdG9yIHNlbGVjdG9yKSB7CiAgcmV0dXJuICFzZWxlY3Rvci5pc0dldHRlcjsKfQoKLy8vIFJlcGxhY2VzIHNvbWUgaW5zdHJ1Y3Rpb25zIHdpdGggc3BlY2lhbGl6ZWQgdmVyc2lvbnMgdG8gbWFrZSBjb2RlZ2VuIGVhc2llci4KLy8vIENhY2hlcyBjb2RlZ2VuIGluZm9ybWF0aW9uIG9uIG5vZGVzLgpjbGFzcyBTc2FJbnN0cnVjdGlvblNlbGVjdGlvbiBleHRlbmRzIEhCYXNlVmlzaXRvciB3aXRoIENvZGVnZW5QaGFzZSB7CiAgZmluYWwgSkNsb3NlZFdvcmxkIF9jbG9zZWRXb3JsZDsKICBmaW5hbCBJbnRlcmNlcHRvckRhdGEgX2ludGVyY2VwdG9yRGF0YTsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CiAgSEdyYXBoIGdyYXBoOwoKICBTc2FJbnN0cnVjdGlvblNlbGVjdGlvbigKICAgICAgdGhpcy5fb3B0aW9ucywgdGhpcy5fY2xvc2VkV29ybGQsIHRoaXMuX2ludGVyY2VwdG9yRGF0YSk7CgogIEFic3RyYWN0VmFsdWVEb21haW4gZ2V0IF9hYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIF9jbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluOwoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB0aGlzLmdyYXBoID0gZ3JhcGg7CiAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5maXJzdDsKICAgIHdoaWxlIChpbnN0cnVjdGlvbiAhPSBudWxsKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBuZXh0ID0gaW5zdHJ1Y3Rpb24ubmV4dDsKICAgICAgSEluc3RydWN0aW9uIHJlcGxhY2VtZW50ID0gaW5zdHJ1Y3Rpb24uYWNjZXB0KHRoaXMpOwogICAgICBpZiAocmVwbGFjZW1lbnQgIT0gaW5zdHJ1Y3Rpb24gJiYgcmVwbGFjZW1lbnQgIT0gbnVsbCkgewogICAgICAgIGJsb2NrLnJld3JpdGUoaW5zdHJ1Y3Rpb24sIHJlcGxhY2VtZW50KTsKCiAgICAgICAgLy8gSWYgdGhlIHJlcGxhY2VtZW50IGluc3RydWN0aW9uIGRvZXMgbm90IGtub3cgaXRzIHNvdXJjZSBlbGVtZW50LCB1c2UKICAgICAgICAvLyB0aGUgc291cmNlIGVsZW1lbnQgb2YgdGhlIGluc3RydWN0aW9uLgogICAgICAgIGlmIChyZXBsYWNlbWVudC5zb3VyY2VFbGVtZW50ID09IG51bGwpIHsKICAgICAgICAgIHJlcGxhY2VtZW50LnNvdXJjZUVsZW1lbnQgPSBpbnN0cnVjdGlvbi5zb3VyY2VFbGVtZW50OwogICAgICAgIH0KICAgICAgICBpZiAocmVwbGFjZW1lbnQuc291cmNlSW5mb3JtYXRpb24gPT0gbnVsbCkgewogICAgICAgICAgcmVwbGFjZW1lbnQuc291cmNlSW5mb3JtYXRpb24gPSBpbnN0cnVjdGlvbi5zb3VyY2VJbmZvcm1hdGlvbjsKICAgICAgICB9CiAgICAgICAgaWYgKCFyZXBsYWNlbWVudC5pc0luQmFzaWNCbG9jaygpKSB7CiAgICAgICAgICAvLyBUaGUgY29uc3RhbnQgZm9sZGluZyBjYW4gcmV0dXJuIGFuIGluc3RydWN0aW9uIHRoYXQgaXMgYWxyZWFkeQogICAgICAgICAgLy8gcGFydCBvZiB0aGUgZ3JhcGggKGxpa2UgYW4gaW5wdXQpLCBzbyB3ZSBvbmx5IGFkZCB0aGUgcmVwbGFjZW1lbnQKICAgICAgICAgIC8vIGlmIG5lY2Vzc2FyeS4KICAgICAgICAgIGJsb2NrLmFkZEFmdGVyKGluc3RydWN0aW9uLCByZXBsYWNlbWVudCk7CiAgICAgICAgICAvLyBWaXNpdCB0aGUgcmVwbGFjZW1lbnQgYXMgdGhlIG5leHQgaW5zdHJ1Y3Rpb24gaW4gY2FzZSBpdCBjYW4gYWxzbwogICAgICAgICAgLy8gYmUgY29uc3RhbnQgZm9sZGVkIGF3YXkuCiAgICAgICAgICBuZXh0ID0gcmVwbGFjZW1lbnQ7CiAgICAgICAgfQogICAgICAgIGJsb2NrLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICAgIH0KICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXh0OwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0SW5zdHJ1Y3Rpb24oSEluc3RydWN0aW9uIG5vZGUpIHsKICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0SXMoSElzIG5vZGUpIHsKICAgIGlmIChub2RlLmtpbmQgPT0gSElzLlJBV19DSEVDSykgewogICAgICBISW5zdHJ1Y3Rpb24gaW50ZXJjZXB0b3IgPSBub2RlLmludGVyY2VwdG9yOwogICAgICBpZiAoaW50ZXJjZXB0b3IgIT0gbnVsbCkgewogICAgICAgIHJldHVybiBuZXcgSElzVmlhSW50ZXJjZXB0b3IoCiAgICAgICAgICAgIG5vZGUudHlwZUV4cHJlc3Npb24sIGludGVyY2VwdG9yLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2RlOwogIH0KCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0SWRlbnRpdHkoSElkZW50aXR5IG5vZGUpIHsKICAgIG5vZGUuc2luZ2xlQ29tcGFyaXNvbk9wID0gc2ltcGxlT3Aobm9kZS5sZWZ0LCBub2RlLnJpZ2h0KTsKICAgIHJldHVybiBub2RlOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHNpbmdsZSBKYXZhU2NyaXB0IGNvbXBhcmlzb24gKGA9PWAgb3IgYD09PWApIGlmIHRoYXQKICAvLy8gaW1wbGVtZW50cyBgaWRlbnRpY2FsKGxlZnQsIHJpZ2h0KWAsIG9yIHJldHVybnMgYG51bGxgIGlmIHRoZSBtb3JlIGNvbXBsZXgKICAvLy8gdGVybmFyeSBgbGVmdCA9PSBudWxsID8gcmlnaHQgPT0gbnVsbCA6IGxlZnQgPT09IHJpZ2h0YCBpcyByZXF1aXJlZC4KICBTdHJpbmcgc2ltcGxlT3AoSEluc3RydWN0aW9uIGxlZnQsIEhJbnN0cnVjdGlvbiByaWdodCkgewogICAgQWJzdHJhY3RWYWx1ZSBsZWZ0VHlwZSA9IGxlZnQuaW5zdHJ1Y3Rpb25UeXBlOwogICAgQWJzdHJhY3RWYWx1ZSByaWdodFR5cGUgPSByaWdodC5pbnN0cnVjdGlvblR5cGU7CiAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKGxlZnRUeXBlKS5pc0RlZmluaXRlbHlGYWxzZSkgewogICAgICByZXR1cm4gJz09PSc7CiAgICB9CiAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKHJpZ2h0VHlwZSkuaXNEZWZpbml0ZWx5RmFsc2UpIHsKICAgICAgcmV0dXJuICc9PT0nOwogICAgfQoKICAgIC8vIERhcnQgYG51bGxgIGlzIGltcGxlbWVudGVkIGJ5IEphdmFTY3JpcHQgYG51bGxgIGFuZCBgdW5kZWZpbmVkYCB3aGljaCBhcmUKICAgIC8vIG5vdCBzdHJpY3QtZXF1YWxzLCBzbyB3ZSBjYW4ndCB1c2UgYD09PWAuIFdlIHdvdWxkIGxpa2UgdG8gdXNlIGA9PWAgYnV0CiAgICAvLyBuZWVkIHRvIGF2b2lkIGFueSBjYXNlcyBmcm9tIEVTNiA3LjIuMTQgdGhhdCBpbnZvbHZlIGNvbnZlcnNpb25zLgogICAgaWYgKGxlZnQuaXNDb25zdGFudE51bGwoKSB8fCByaWdodC5pc0NvbnN0YW50TnVsbCgpKSB7CiAgICAgIHJldHVybiAnPT0nOwogICAgfQoKICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bWJlck9yTnVsbChsZWZ0VHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVtYmVyT3JOdWxsKHJpZ2h0VHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gJz09JzsKICAgIH0KICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc1N0cmluZ09yTnVsbChsZWZ0VHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzU3RyaW5nT3JOdWxsKHJpZ2h0VHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gJz09JzsKICAgIH0KICAgIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0Jvb2xlYW5Pck51bGwobGVmdFR5cGUpLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0Jvb2xlYW5Pck51bGwocmlnaHRUeXBlKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiAnPT0nOwogICAgfQoKICAgIGlmIChfaW50ZXJjZXB0ZWQobGVmdFR5cGUpKSByZXR1cm4gbnVsbDsKICAgIGlmIChfaW50ZXJjZXB0ZWQocmlnaHRUeXBlKSkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gJz09JzsKICB9CgogIC8vIFRvUHJpbWl0aXZlIGNvbnZlcnNpb25zIG9mIGFuIG9iamVjdCBvY2N1ciB3aGVuIHRoZSBvdGhlciBvcGVyYW5kIGlzIGEKICAvLyBwcmltaXRpdmUgKE51bWJlciwgU3RyaW5nLCBTeW1ib2wgYW5kLCBpbmRpcmVjdGx5LCBCb29sZWFuKS4gV2UgdXNlCiAgLy8gJ2ludGVyY2VwdGVkJyB0eXBlcyBhcyBhIHByb3h5IGZvciBhbGwgdGhlIHByaW1pdGl2ZSB0eXBlcy4KICBib29sIF9pbnRlcmNlcHRlZChBYnN0cmFjdFZhbHVlIHR5cGUpID0+IF9hYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgIC5pc0ludGVyY2VwdG9yKF9hYnN0cmFjdFZhbHVlRG9tYWluLmV4Y2x1ZGVOdWxsKHR5cGUpKQogICAgICAuaXNQb3RlbnRpYWxseVRydWU7CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEludm9rZUR5bmFtaWMoSEludm9rZUR5bmFtaWMgbm9kZSkgewogICAgdHJ5UmVwbGFjZUV4cGxpY2l0UmVjZWl2ZXJXaXRoRHVtbXkoCiAgICAgICAgbm9kZSwgbm9kZS5zZWxlY3Rvciwgbm9kZS5lbGVtZW50LCBub2RlLnJlY2VpdmVyVHlwZSk7CiAgICByZXR1cm4gbm9kZTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEludm9rZVN1cGVyKEhJbnZva2VTdXBlciBub2RlKSB7CiAgICB0cnlSZXBsYWNlRXhwbGljaXRSZWNlaXZlcldpdGhEdW1teSgKICAgICAgICBub2RlLCBub2RlLnNlbGVjdG9yLCBub2RlLmVsZW1lbnQsIG51bGwpOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRPbmVTaG90SW50ZXJjZXB0b3IoSE9uZVNob3RJbnRlcmNlcHRvciBub2RlKSB7CiAgICAvLyBUaGUgcmVjZWl2ZXIgcGFyYW1ldGVyIHNob3VsZCBuZXZlciBiZSByZXBsYWNlZCB3aXRoIGEgZHVtbXkgY29uc3RhbnQuCiAgICByZXR1cm4gbm9kZTsKICB9CgogIHZvaWQgdHJ5UmVwbGFjZUV4cGxpY2l0UmVjZWl2ZXJXaXRoRHVtbXkoSEludm9rZSBub2RlLCBTZWxlY3RvciBzZWxlY3RvciwKICAgICAgTWVtYmVyRW50aXR5IHRhcmdldCwgQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICAvLyBDYWxscyBvZiB0aGUgZm9ybQogICAgLy8KICAgIC8vICAgICBhLmZvbyQxKGEsIHgpCiAgICAvLwogICAgLy8gd2hlcmUgdGhlIGludGVyY2VwdG9yIGNhbGxpbmcgY29udmVudGlvbiBpcyB1c2VkIGNvbWUgZnJvbSByZWNvZ25pemluZwogICAgLy8gdGhhdCAnYScgaXMgYSAnc2VsZi1pbnRlcmNlcHRvcicuICBJZiB0aGUgc2VsZWN0b3IgbWF0Y2hlcyBvbmx5IG1ldGhvZHMKICAgIC8vIHRoYXQgaWdub3JlIHRoZSBleHBsaWNpdCByZWNlaXZlciBwYXJhbWV0ZXIsIHJlcGxhY2Ugb2NjdXJyZW5jZXMgb2YgdGhlCiAgICAvLyByZWNlaXZlciBhcmd1bWVudCB3aXRoIGEgZHVtbXkgcmVjZWl2ZXIgJzAnOgogICAgLy8KICAgIC8vICAgICBhLmZvbyQxKGEsIHgpICAgLS0tPiAgIGEuZm9vJDEoMCwgeCkKICAgIC8vCiAgICAvLyBUaGlzIG9mdGVuIHJlZHVjZXMgdGhlIG51bWJlciBvZiByZWZlcmVuY2VzIHRvICdhJyB0byBvbmUsIGFsbG93aW5nICdhJwogICAgLy8gdG8gYmUgZ2VuZXJhdGVkIGF0IHVzZSB0byBhdm9pZCBhIHRlbXBvcmFyeSwgZS5nLgogICAgLy8KICAgIC8vICAgICB0MSA9IGIuZ2V0JHRoaW5nKCk7CiAgICAvLyAgICAgdDEuZm9vJDEodDEsIHgpCiAgICAvLyAtLS0+CiAgICAvLyAgICAgYi5nZXQkdGhpbmcoKS5mb28kMSgwLCB4KQogICAgLy8KICAgIGFzc2VydCh0YXJnZXQgIT0gbnVsbCB8fCBtYXNrICE9IG51bGwpOwoKICAgIGlmICghbm9kZS5pc0ludGVyY2VwdGVkQ2FsbCkgcmV0dXJuOwoKICAgIC8vIFRPRE8oMTU5MzMpOiBNYWtlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHByb3BlcnR5IGV4dHJhY3Rpb24gY2xvc3VyZXMKICAgIC8vIHdvcmsgd2l0aCB0aGUgZHVtbXkgcmVjZWl2ZXIgb3B0aW1pemF0aW9uLgogICAgaWYgKHNlbGVjdG9yLmlzR2V0dGVyKSByZXR1cm47CgogICAgLy8gVGhpcyBhc3NpZ25tZW50IG9mIGlucHV0cyBpcyB1bmlmb3JtIGZvciBISW52b2tlRHluYW1pYyBhbmQgSEludm9rZVN1cGVyLgogICAgSEluc3RydWN0aW9uIGludGVyY2VwdG9yID0gbm9kZS5pbnB1dHNbMF07CiAgICBISW5zdHJ1Y3Rpb24gcmVjZWl2ZXJBcmd1bWVudCA9IG5vZGUuaW5wdXRzWzFdOwoKICAgIC8vIEEgJ3NlbGYtaW50ZXJjZXB0b3InPwogICAgaWYgKGludGVyY2VwdG9yLm5vbkNoZWNrKCkgIT0gcmVjZWl2ZXJBcmd1bWVudC5ub25DaGVjaygpKSByZXR1cm47CgogICAgLy8gVE9ETyhzcmEpOiBTaG91bGQgdGhpcyBiZSBhbiBhc3NlcnQ/CiAgICBpZiAoIV9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZFNlbGVjdG9yKHNlbGVjdG9yKSkgcmV0dXJuOwoKICAgIGlmICh0YXJnZXQgIT0gbnVsbCkgewogICAgICAvLyBBIGNhbGwgdGhhdCByZXNvbHZlcyB0byBhIHNpbmdsZSBpbnN0YW5jZSBtZXRob2QgKGVsZW1lbnQpIHJlcXVpcmVzIHRoZQogICAgICAvLyBjYWxsaW5nIGNvbnZlbnRpb24gY29uc2lzdGVudCB3aXRoIHRoZSBtZXRob2QuCiAgICAgIENsYXNzRW50aXR5IGNscyA9IHRhcmdldC5lbmNsb3NpbmdDbGFzczsKICAgICAgYXNzZXJ0KF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZE1ldGhvZCh0YXJnZXQpKTsKICAgICAgaWYgKF9pbnRlcmNlcHRvckRhdGEuaXNJbnRlcmNlcHRlZENsYXNzKGNscykpIHJldHVybjsKICAgIH0gZWxzZSBpZiAoX2ludGVyY2VwdG9yRGF0YS5pc0ludGVyY2VwdGVkTWl4aW5TZWxlY3RvcigKICAgICAgICBzZWxlY3RvciwgbWFzaywgX2Nsb3NlZFdvcmxkKSkgewogICAgICByZXR1cm47CiAgICB9CgogICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9CiAgICAgICAgRHVtbXlJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUocmVjZWl2ZXJBcmd1bWVudC5pbnN0cnVjdGlvblR5cGUpOwogICAgSENvbnN0YW50IGR1bW15ID0gZ3JhcGguYWRkQ29uc3RhbnQoY29uc3RhbnQsIF9jbG9zZWRXb3JsZCk7CiAgICByZWNlaXZlckFyZ3VtZW50LnVzZWRCeS5yZW1vdmUobm9kZSk7CiAgICBub2RlLmlucHV0c1sxXSA9IGR1bW15OwogICAgZHVtbXkudXNlZEJ5LmFkZChub2RlKTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdEZpZWxkU2V0KEhGaWVsZFNldCBzZXR0ZXIpIHsKICAgIC8vIFBhdHRlcm4gbWF0Y2gKICAgIC8vICAgICB0MSA9IHguZjsgdDIgPSB0MSArIDE7IHguZiA9IHQyOyB1c2UodDIpICAgLS0+ICArK3guZgogICAgLy8gICAgIHQxID0geC5mOyB0MiA9IHQxIG9wIHk7IHguZiA9IHQyOyB1c2UodDIpICAtLT4gIHguZiBvcD0geQogICAgLy8gICAgIHQxID0geC5mOyB0MiA9IHQxICsgMTsgeC5mID0gdDI7IHVzZSh0MSkgICAtLT4gIHguZisrCiAgICBIQmFzaWNCbG9jayBibG9jayA9IHNldHRlci5ibG9jazsKICAgIEhJbnN0cnVjdGlvbiBvcCA9IHNldHRlci52YWx1ZTsKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IHNldHRlci5yZWNlaXZlcjsKCiAgICBib29sIGlzTWF0Y2hpbmdSZWFkKEhJbnN0cnVjdGlvbiBjYW5kaWRhdGUpIHsKICAgICAgaWYgKGNhbmRpZGF0ZSBpcyBIRmllbGRHZXQpIHsKICAgICAgICBpZiAoY2FuZGlkYXRlLmVsZW1lbnQgIT0gc2V0dGVyLmVsZW1lbnQpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoY2FuZGlkYXRlLnJlY2VpdmVyICE9IHNldHRlci5yZWNlaXZlcikgcmV0dXJuIGZhbHNlOwogICAgICAgIC8vIFJlY29nbml6ZSBvbmx5IHRocmVlIGluc3RydWN0aW9ucyBpbiBzZXF1ZW5jZSBpbiB0aGUgc2FtZSBibG9jay4gVGhpcwogICAgICAgIC8vIGNvdWxkIGJlIGJyb2FkZW5lZCB0byBhbGxvdyBub24taW50ZXJmZXJpbmcgaW50ZXJsZWF2ZWQgaW5zdHJ1Y3Rpb25zLgogICAgICAgIGlmIChvcC5ibG9jayAhPSBibG9jaykgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChjYW5kaWRhdGUuYmxvY2sgIT0gYmxvY2spIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoc2V0dGVyLnByZXZpb3VzICE9IG9wKSByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKG9wLnByZXZpb3VzICE9IGNhbmRpZGF0ZSkgcmV0dXJuIGZhbHNlOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gbm9NYXRjaGluZ1JlYWQoKSB7CiAgICAgIC8vIElmIHdlIGhhdmUgb3RoZXIgSEZpZWxkU2V0IG9wdGltaXphdGlvbnMsIHRoZXkgZ28gaGVyZS4KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgSEluc3RydWN0aW9uIHJlcGxhY2VPcChISW5zdHJ1Y3Rpb24gcmVwbGFjZW1lbnQsIEhJbnN0cnVjdGlvbiBnZXR0ZXIpIHsKICAgICAgYmxvY2suYWRkQmVmb3JlKHNldHRlciwgcmVwbGFjZW1lbnQpOwogICAgICBibG9jay5yZW1vdmUoc2V0dGVyKTsKICAgICAgYmxvY2sucmV3cml0ZShvcCwgcmVwbGFjZW1lbnQpOwogICAgICBibG9jay5yZW1vdmUob3ApOwogICAgICBibG9jay5yZW1vdmUoZ2V0dGVyKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgSEluc3RydWN0aW9uIHBsdXNPck1pbnVzKFN0cmluZyBhc3NpZ25PcCwgU3RyaW5nIGluY3JlbWVudE9wKSB7CiAgICAgIEhJbnZva2VCaW5hcnkgYmluYXJ5ID0gb3A7CiAgICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gYmluYXJ5LmxlZnQ7CiAgICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGJpbmFyeS5yaWdodDsKICAgICAgaWYgKGlzTWF0Y2hpbmdSZWFkKGxlZnQpKSB7CiAgICAgICAgaWYgKGxlZnQudXNlZEJ5Lmxlbmd0aCA9PSAxKSB7CiAgICAgICAgICBpZiAocmlnaHQgaXMgSENvbnN0YW50ICYmIHJpZ2h0LmNvbnN0YW50LmlzT25lKSB7CiAgICAgICAgICAgIEhJbnN0cnVjdGlvbiBybXcgPSBuZXcgSFJlYWRNb2RpZnlXcml0ZS5wcmVPcCgKICAgICAgICAgICAgICAgIHNldHRlci5lbGVtZW50LCBpbmNyZW1lbnRPcCwgcmVjZWl2ZXIsIG9wLmluc3RydWN0aW9uVHlwZSk7CiAgICAgICAgICAgIHJldHVybiByZXBsYWNlT3Aocm13LCBsZWZ0KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIEhJbnN0cnVjdGlvbiBybXcgPSBuZXcgSFJlYWRNb2RpZnlXcml0ZS5hc3NpZ25PcCgKICAgICAgICAgICAgICAgIHNldHRlci5lbGVtZW50LCBhc3NpZ25PcCwgcmVjZWl2ZXIsIHJpZ2h0LCBvcC5pbnN0cnVjdGlvblR5cGUpOwogICAgICAgICAgICByZXR1cm4gcmVwbGFjZU9wKHJtdywgbGVmdCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChvcC51c2VkQnkubGVuZ3RoID09IDEgJiYKICAgICAgICAgICAgcmlnaHQgaXMgSENvbnN0YW50ICYmCiAgICAgICAgICAgIHJpZ2h0LmNvbnN0YW50LmlzT25lKSB7CiAgICAgICAgICBISW5zdHJ1Y3Rpb24gcm13ID0gbmV3IEhSZWFkTW9kaWZ5V3JpdGUucG9zdE9wKAogICAgICAgICAgICAgIHNldHRlci5lbGVtZW50LCBpbmNyZW1lbnRPcCwgcmVjZWl2ZXIsIG9wLmluc3RydWN0aW9uVHlwZSk7CiAgICAgICAgICBibG9jay5hZGRBZnRlcihsZWZ0LCBybXcpOwogICAgICAgICAgYmxvY2sucmVtb3ZlKHNldHRlcik7CiAgICAgICAgICBibG9jay5yZW1vdmUob3ApOwogICAgICAgICAgYmxvY2sucmV3cml0ZShsZWZ0LCBybXcpOwogICAgICAgICAgYmxvY2sucmVtb3ZlKGxlZnQpOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBub01hdGNoaW5nUmVhZCgpOwogICAgfQoKICAgIEhJbnN0cnVjdGlvbiBzaW1wbGUoCiAgICAgICAgU3RyaW5nIGFzc2lnbk9wLCBISW5zdHJ1Y3Rpb24gbGVmdCwgSEluc3RydWN0aW9uIHJpZ2h0KSB7CiAgICAgIGlmIChpc01hdGNoaW5nUmVhZChsZWZ0KSkgewogICAgICAgIGlmIChsZWZ0LnVzZWRCeS5sZW5ndGggPT0gMSkgewogICAgICAgICAgSEluc3RydWN0aW9uIHJtdyA9IG5ldyBIUmVhZE1vZGlmeVdyaXRlLmFzc2lnbk9wKAogICAgICAgICAgICAgIHNldHRlci5lbGVtZW50LCBhc3NpZ25PcCwgcmVjZWl2ZXIsIHJpZ2h0LCBvcC5pbnN0cnVjdGlvblR5cGUpOwogICAgICAgICAgcmV0dXJuIHJlcGxhY2VPcChybXcsIGxlZnQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbm9NYXRjaGluZ1JlYWQoKTsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gc2ltcGxlQmluYXJ5KFN0cmluZyBhc3NpZ25PcCkgewogICAgICBISW52b2tlQmluYXJ5IGJpbmFyeSA9IG9wOwogICAgICByZXR1cm4gc2ltcGxlKGFzc2lnbk9wLCBiaW5hcnkubGVmdCwgYmluYXJ5LnJpZ2h0KTsKICAgIH0KCiAgICBISW5zdHJ1Y3Rpb24gYml0b3AoU3RyaW5nIGFzc2lnbk9wKSB7CiAgICAgIC8vIEhCaXRBbmQsIEhCaXRPciBldGMuIGFyZSBtb3JlIGRpZmZpY3VsdCBiZWNhdXNlIEhCaXRBbmQoYS54LCB5KQogICAgICAvLyBzb21ldGltZXMgbmVlZHMgdG8gYmUgZm9yY2VkIHRvIHVuc2lnbmVkOiBhLnggPSAoYS54ICYgeSkgPj4+IDAuCiAgICAgIGlmIChvcC5pc1VJbnQzMShfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIHJldHVybiBzaW1wbGVCaW5hcnkoYXNzaWduT3ApOwogICAgICB9CiAgICAgIHJldHVybiBub01hdGNoaW5nUmVhZCgpOwogICAgfQoKICAgIGlmIChvcCBpcyBIQWRkKSByZXR1cm4gcGx1c09yTWludXMoJysnLCAnKysnKTsKICAgIGlmIChvcCBpcyBIU3VidHJhY3QpIHJldHVybiBwbHVzT3JNaW51cygnLScsICctLScpOwoKICAgIGlmIChvcCBpcyBIU3RyaW5nQ29uY2F0KSByZXR1cm4gc2ltcGxlKCcrJywgb3AubGVmdCwgb3AucmlnaHQpOwoKICAgIGlmIChvcCBpcyBITXVsdGlwbHkpIHJldHVybiBzaW1wbGVCaW5hcnkoJyonKTsKICAgIGlmIChvcCBpcyBIRGl2aWRlKSByZXR1cm4gc2ltcGxlQmluYXJ5KCcvJyk7CgogICAgaWYgKG9wIGlzIEhCaXRBbmQpIHJldHVybiBiaXRvcCgnJicpOwogICAgaWYgKG9wIGlzIEhCaXRPcikgcmV0dXJuIGJpdG9wKCd8Jyk7CiAgICBpZiAob3AgaXMgSEJpdFhvcikgcmV0dXJuIGJpdG9wKCdeJyk7CgogICAgcmV0dXJuIG5vTWF0Y2hpbmdSZWFkKCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdElmKEhJZiBub2RlKSB7CiAgICBpZiAoIV9vcHRpb25zLmV4cGVyaW1lbnRUb0Jvb2xlYW4pIHJldHVybiBub2RlOwogICAgSEluc3RydWN0aW9uIGNvbmRpdGlvbiA9IG5vZGUuaW5wdXRzLnNpbmdsZTsKICAgIC8vIGlmICh4ICE9IG51bGwpIC0tPiBpZiAoeCkKICAgIGlmIChjb25kaXRpb24gaXMgSE5vdCkgewogICAgICBISW5zdHJ1Y3Rpb24gdGVzdCA9IGNvbmRpdGlvbi5pbnB1dHMuc2luZ2xlOwogICAgICBpZiAodGVzdCBpcyBISWRlbnRpdHkpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gb3BlcmFuZDEgPSB0ZXN0LmlucHV0c1swXTsKICAgICAgICBISW5zdHJ1Y3Rpb24gb3BlcmFuZDIgPSB0ZXN0LmlucHV0c1sxXTsKICAgICAgICBpZiAob3BlcmFuZDIuaXNOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICAgICFfaW50ZXJjZXB0ZWQob3BlcmFuZDEuaW5zdHJ1Y3Rpb25UeXBlKSkgewogICAgICAgICAgaWYgKHRlc3QudXNlZEJ5Lmxlbmd0aCA9PSAxICYmIGNvbmRpdGlvbi51c2VkQnkubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgbm9kZS5jaGFuZ2VVc2UoY29uZGl0aW9uLCBvcGVyYW5kMSk7CiAgICAgICAgICAgIGNvbmRpdGlvbi5ibG9jay5yZW1vdmUoY29uZGl0aW9uKTsKICAgICAgICAgICAgdGVzdC5ibG9jay5yZW1vdmUodGVzdCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvLyBpZiAoeCA9PSBudWxsKSA9PiBpZiAoIXgpCiAgICBpZiAoY29uZGl0aW9uIGlzIEhJZGVudGl0eSAmJiBjb25kaXRpb24udXNlZEJ5Lmxlbmd0aCA9PSAxKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBvcGVyYW5kMSA9IGNvbmRpdGlvbi5pbnB1dHNbMF07CiAgICAgIEhJbnN0cnVjdGlvbiBvcGVyYW5kMiA9IGNvbmRpdGlvbi5pbnB1dHNbMV07CiAgICAgIGlmIChvcGVyYW5kMi5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICAgICFfaW50ZXJjZXB0ZWQob3BlcmFuZDEuaW5zdHJ1Y3Rpb25UeXBlKSkgewogICAgICAgIHZhciBub3QgPSBITm90KG9wZXJhbmQxLCBfYWJzdHJhY3RWYWx1ZURvbWFpbi5ib29sVHlwZSk7CiAgICAgICAgbm9kZS5ibG9jay5hZGRCZWZvcmUobm9kZSwgbm90KTsKICAgICAgICBub2RlLmNoYW5nZVVzZShjb25kaXRpb24sIG5vdCk7CiAgICAgICAgY29uZGl0aW9uLmJsb2NrLnJlbW92ZShjb25kaXRpb24pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm9kZTsKICB9Cn0KCi8vLyBSZW1vdmUgW0hUeXBlS25vd25dIGluc3RydWN0aW9ucyBmcm9tIHRoZSBncmFwaCwgdG8gbWFrZSBjb2RlZ2VuCi8vLyBhbmFseXNpcyBlYXNpZXIuCmNsYXNzIFNzYVR5cGVLbm93blJlbW92ZXIgZXh0ZW5kcyBIQmFzZVZpc2l0b3Igd2l0aCBDb2RlZ2VuUGhhc2UgewogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpIHsKICAgIHZpc2l0RG9taW5hdG9yVHJlZShncmFwaCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gYmxvY2suZmlyc3Q7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBISW5zdHJ1Y3Rpb24gbmV4dCA9IGluc3RydWN0aW9uLm5leHQ7CiAgICAgIGluc3RydWN0aW9uLmFjY2VwdCh0aGlzKTsKICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXh0OwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVLbm93bihIVHlwZUtub3duIGluc3RydWN0aW9uKSB7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIGluc3RydWN0aW9uLnVzZWRCeSkgewogICAgICBpZiAodXNlciBpcyBIVHlwZUNvbnZlcnNpb24pIHsKICAgICAgICB1c2VyLmlucHV0VHlwZSA9IGluc3RydWN0aW9uLmluc3RydWN0aW9uVHlwZTsKICAgICAgfSBlbHNlIGlmICh1c2VyIGlzIEhQcmltaXRpdmVDaGVjaykgewogICAgICAgIHVzZXIuaW5wdXRUeXBlID0gaW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25UeXBlOwogICAgICB9CiAgICB9CiAgICBpbnN0cnVjdGlvbi5ibG9jay5yZXdyaXRlKGluc3RydWN0aW9uLCBpbnN0cnVjdGlvbi5jaGVja2VkSW5wdXQpOwogICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmVtb3ZlKGluc3RydWN0aW9uKTsKICB9Cn0KCi8vLyBSZW1vdmUgW0hQcmltaXRpdmVDaGVja10gaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIGdyYXBoIGluICctLXRydXN0LXByaW1pdGl2ZXMnCi8vLyBtb2RlLgpjbGFzcyBTc2FUcnVzdGVkQ2hlY2tSZW1vdmVyIGV4dGVuZHMgSEJhc2VWaXNpdG9yIHdpdGggQ29kZWdlblBoYXNlIHsKICBmaW5hbCBDb21waWxlck9wdGlvbnMgX29wdGlvbnM7CgogIFNzYVRydXN0ZWRDaGVja1JlbW92ZXIodGhpcy5fb3B0aW9ucyk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpIHsKICAgIGlmICghX29wdGlvbnMudHJ1c3RQcmltaXRpdmVzKSByZXR1cm47CiAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IGJsb2NrLmZpcnN0OwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIG5leHQgPSBpbnN0cnVjdGlvbi5uZXh0OwogICAgICBpbnN0cnVjdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgIGluc3RydWN0aW9uID0gbmV4dDsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRQcmltaXRpdmVDaGVjayhIUHJpbWl0aXZlQ2hlY2sgaW5zdHJ1Y3Rpb24pIHsKICAgIGluc3RydWN0aW9uLmJsb2NrLnJld3JpdGUoaW5zdHJ1Y3Rpb24sIGluc3RydWN0aW9uLmNoZWNrZWRJbnB1dCk7CiAgICBpbnN0cnVjdGlvbi5ibG9jay5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvb2xDb252ZXJzaW9uKEhCb29sQ29udmVyc2lvbiBpbnN0cnVjdGlvbikgewogICAgaW5zdHJ1Y3Rpb24uYmxvY2sucmV3cml0ZShpbnN0cnVjdGlvbiwgaW5zdHJ1Y3Rpb24uY2hlY2tlZElucHV0KTsKICAgIGluc3RydWN0aW9uLmJsb2NrLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgfQp9CgovLy8gVXNlIHRoZSByZXN1bHQgb2Ygc3RhdGljIGFuZCBmaWVsZCBhc3NpZ25tZW50cyB3aGVyZSBpdCBpcyBwcm9maXRhYmxlIHRvIHVzZQovLy8gdGhlIHJlc3VsdCBvZiB0aGUgYXNzaWdubWVudCBpbnN0ZWFkIG9mIHRoZSB2YWx1ZS4KLy8vCi8vLyAgICAgYS54ID0gdjsKLy8vICAgICBiLnkgPSB2OwovLy8gLS0+Ci8vLyAgICAgYi55ID0gYS54ID0gdjsKY2xhc3MgU3NhQXNzaWdubWVudENoYWluaW5nIGV4dGVuZHMgSEJhc2VWaXNpdG9yIHdpdGggQ29kZWdlblBoYXNlIHsKICBmaW5hbCBKQ2xvc2VkV29ybGQgX2Nsb3NlZFdvcmxkOwogIGZpbmFsIENvbXBpbGVyT3B0aW9ucyBfb3B0aW9uczsKICAvL0hHcmFwaCBncmFwaDsKCiAgU3NhQXNzaWdubWVudENoYWluaW5nKHRoaXMuX29wdGlvbnMsIHRoaXMuX2Nsb3NlZFdvcmxkKTsKCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgX2Fic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgX2Nsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpIHsKICAgIC8vdGhpcy5ncmFwaCA9IGdyYXBoOwogICAgdmlzaXREb21pbmF0b3JUcmVlKGdyYXBoKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5maXJzdDsKICAgIHdoaWxlIChpbnN0cnVjdGlvbiAhPSBudWxsKSB7CiAgICAgIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24uYWNjZXB0KHRoaXMpOwogICAgfQogIH0KCiAgLy8vIFJldHVybnMgdGhlIG5leHQgaW5zdHJ1Y3Rpb24uCiAgQG92ZXJyaWRlCiAgSEluc3RydWN0aW9uIHZpc2l0SW5zdHJ1Y3Rpb24oSEluc3RydWN0aW9uIG5vZGUpIHsKICAgIHJldHVybiBub2RlLm5leHQ7CiAgfQoKICBAb3ZlcnJpZGUKICBISW5zdHJ1Y3Rpb24gdmlzaXRGaWVsZFNldChIRmllbGRTZXQgc2V0dGVyKSB7CiAgICByZXR1cm4gdHJ5Q2hhaW5Bc3NpZ25tZW50KHNldHRlciwgc2V0dGVyLnZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIEhJbnN0cnVjdGlvbiB2aXNpdFN0YXRpY1N0b3JlKEhTdGF0aWNTdG9yZSBzdG9yZSkgewogICAgcmV0dXJuIHRyeUNoYWluQXNzaWdubWVudChzdG9yZSwgc3RvcmUuaW5wdXRzLnNpbmdsZSk7CiAgfQoKICBISW5zdHJ1Y3Rpb24gdHJ5Q2hhaW5Bc3NpZ25tZW50KEhJbnN0cnVjdGlvbiBzZXR0ZXIsIEhJbnN0cnVjdGlvbiB2YWx1ZSkgewogICAgLy8gVHJ5IHRvIHVzZSByZXN1bHQgb2YgZmllbGQgb3Igc3RhdGljIGFzc2lnbm1lbnQKICAgIC8vCiAgICAvLyAgICAgdDEgPSB2OyAgeC5mID0gdDE7ICAuLi4gdDEgLi4uCiAgICAvLyAtLT4KICAgIC8vICAgICB0MSA9IHguZiA9IHY7ICAuLi4gdDEgLi4uCiAgICAvLwoKICAgIC8vIFNpbmdsZSB1c2UgaXMgdGhpcyBzZXR0ZXIgc28gdGhlcmUgd2lsbCBiZSBubyBvdGhlciB1c2VzIHRvIGNoYWluIHRvLgogICAgaWYgKHZhbHVlLnVzZWRCeS5sZW5ndGggPD0gMSkgcmV0dXJuIHNldHRlci5uZXh0OwoKICAgIC8vIEl0IGlzIGFsd2F5cyB3b3J0aHdoaWxlIGNoYWluaW5nIGludG8gYW5vdGhlciBzZXR0ZXIsIHNpbmNlIGl0IHJlZHVjZXMKICAgIC8vIHRoZSBudW1iZXIgb2YgcmVmZXJlbmNlcyB0byBbdmFsdWVdLgogICAgSEluc3RydWN0aW9uIGNoYWluID0gc2V0dGVyOwogICAgc2V0dGVyLmluc3RydWN0aW9uVHlwZSA9IHZhbHVlLmluc3RydWN0aW9uVHlwZTsKICAgIGZvciAoSEluc3RydWN0aW9uIGN1cnJlbnQgPSBzZXR0ZXIubmV4dDs7KSB7CiAgICAgIGlmIChjdXJyZW50IGlzIEhGaWVsZFNldCkgewogICAgICAgIEhGaWVsZFNldCBuZXh0U2V0dGVyID0gY3VycmVudDsKICAgICAgICBpZiAobmV4dFNldHRlci52YWx1ZSA9PSB2YWx1ZSAmJiBuZXh0U2V0dGVyLnJlY2VpdmVyICE9IHZhbHVlKSB7CiAgICAgICAgICBuZXh0U2V0dGVyLmNoYW5nZVVzZSh2YWx1ZSwgY2hhaW4pOwogICAgICAgICAgbmV4dFNldHRlci5pbnN0cnVjdGlvblR5cGUgPSB2YWx1ZS5pbnN0cnVjdGlvblR5cGU7CiAgICAgICAgICBjaGFpbiA9IG5leHRTZXR0ZXI7CiAgICAgICAgICBjdXJyZW50ID0gbmV4dFNldHRlci5uZXh0OwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgaXMgSFN0YXRpY1N0b3JlKSB7CiAgICAgICAgSFN0YXRpY1N0b3JlIG5leHRTdG9yZSA9IGN1cnJlbnQ7CiAgICAgICAgaWYgKG5leHRTdG9yZS52YWx1ZSA9PSB2YWx1ZSkgewogICAgICAgICAgbmV4dFN0b3JlLmNoYW5nZVVzZSh2YWx1ZSwgY2hhaW4pOwogICAgICAgICAgbmV4dFN0b3JlLmluc3RydWN0aW9uVHlwZSA9IHZhbHVlLmluc3RydWN0aW9uVHlwZTsKICAgICAgICAgIGNoYWluID0gbmV4dFN0b3JlOwogICAgICAgICAgY3VycmVudCA9IG5leHRTdG9yZS5uZXh0OwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGN1cnJlbnQgaXMgSFJldHVybikgewogICAgICAgIGlmIChjdXJyZW50LmlucHV0cy5zaW5nbGUgPT0gdmFsdWUpIHsKICAgICAgICAgIGN1cnJlbnQuY2hhbmdlVXNlKHZhbHVlLCBjaGFpbik7CiAgICAgICAgICByZXR1cm4gY3VycmVudC5uZXh0OwogICAgICAgIH0KICAgICAgfQogICAgICBicmVhazsKICAgIH0KCiAgICBmaW5hbCBISW5zdHJ1Y3Rpb24gbmV4dCA9IGNoYWluLm5leHQ7CgogICAgaWYgKHZhbHVlLnVzZWRCeS5sZW5ndGggPD0gMSkgcmV0dXJuIG5leHQ7IC8vIHNldHRlciBpcyBvbmx5IHJlbWFpbmluZyB1c2UuCgogICAgLy8gQ2hhaW4gdG8gb3RoZXIgcGxhY2VzLgogICAgdmFyIHVzZXMgPSBEb21pbmF0ZWRVc2VzLm9mKHZhbHVlLCBjaGFpbiwgZXhjbHVkZURvbWluYXRvcjogdHJ1ZSk7CgogICAgaWYgKHVzZXMuaXNFbXB0eSkgcmV0dXJuIG5leHQ7CgogICAgYm9vbCBzaW1wbGVTb3VyY2UgPSB2YWx1ZSBpcyBIQ29uc3RhbnQgfHwgdmFsdWUgaXMgSFBhcmFtZXRlclZhbHVlOwoKICAgIGlmICh1c2VzLmlzU2luZ2xldG9uKSB7CiAgICAgIHZhciB1c2UgPSB1c2VzLnNpbmdsZTsKICAgICAgaWYgKHVzZSBpcyBIUGhpKSB7CiAgICAgICAgLy8gRmlsdGVyIG91dCBiYWNrLWVkZ2VzIC0gdGhhdCBjYXVzZXMgcHJvYmxlbXMgZm9yIHZhcmlhYmxlCiAgICAgICAgLy8gYXNzaWdubWVudC4KICAgICAgICAvLyBUT0RPKHNyYSk6IEJldHRlciBhbmFseXNpcyB0byBwZXJtaXQgcGhpcyB0aGF0IGFyZSBwYXJ0IG9mIGEKICAgICAgICAvLyBmb3J3YXJkcy1vbmx5IHRyZWUuCiAgICAgICAgaWYgKHVzZS5ibG9jay5pZCA8IGNoYWluLmJsb2NrLmlkKSByZXR1cm4gbmV4dDsKICAgICAgICBpZiAodXNlLnVzZWRCeS5hbnkoKG5vZGUpID0+IG5vZGUgaXMgSFBoaSkpIHJldHVybiBuZXh0OwoKICAgICAgICAvLyBBIGZvcndhcmQgcGhpIG9mdGVuIGhhcyBhIG5ldyBuYW1lLiBXZSB3YW50IHRvIGF2b2lkIFt2YWx1ZV0gaGF2aW5nIGEKICAgICAgICAvLyBuYW1lIGF0IHRoZSBzYW1lIHRpbWUsIHNvIGNoYWluIGludG8gdGhlIHBoaSBvbmx5IGlmIFt2YWx1ZV0gKDEpIHdpbGwKICAgICAgICAvLyBuZXZlciBoYXZlIGEgbmFtZSAobGlrZSBhIGNvbnN0YW50KSAoMikgdW5hdm9pZGFibHkgaGFzIGEgbmFtZQogICAgICAgIC8vIChlLmcuIGEgcGFyYW1ldGVyKSBvciAoMykgY2hhaW5pbmcgd2lsbCByZXN1bHQgaW4gYSBzaW5nbGUgdXNlIHRoYXQKICAgICAgICAvLyB2YXJpYWJsZSBhbGxvY2F0b3IgY2FuIHRyeSB0byBuYW1lIGNvbnNpc3RlbnRseSB3aXRoIHRoZSBvdGhlciBwaGkKICAgICAgICAvLyBpbnB1dHMuCiAgICAgICAgaWYgKHNpbXBsZVNvdXJjZSB8fCB2YWx1ZS51c2VkQnkubGVuZ3RoIDw9IDIpIHsKICAgICAgICAgIGlmICh2YWx1ZS5pc1B1cmUoX2Fic3RyYWN0VmFsdWVEb21haW4pIHx8CiAgICAgICAgICAgICAgc2V0dGVyLnByZXZpb3VzID09IHZhbHVlIHx8CiAgICAgICAgICAgICAgLy8gdGhlIGZvbGxvd2luZyB0ZXN0cyBmb3IgaW1tZWRpYXRlbHkgcHJldmlvdXMgcGhpLgogICAgICAgICAgICAgIChzZXR0ZXIucHJldmlvdXMgPT0gbnVsbCAmJiB2YWx1ZS5ibG9jayA9PSBzZXR0ZXIuYmxvY2spKSB7CiAgICAgICAgICAgIHVzZXMucmVwbGFjZVdpdGgoY2hhaW4pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV4dDsKICAgICAgfQogICAgICAvLyBUT0RPKHNyYSk6IENoYWlucyB3aXRoIG9uZSByZW1haW5pbmcgcG90ZW50aWFsIHVzZSBoYXZlIHRoZSBwb3RlbnRpYWwKICAgICAgLy8gdG8gZ2VuZXJhdGUgaHVnZSBleHByZXNzaW9uIGNvbnRhaW5pbmcgbWFueSBuZXN0ZWQgYXNzaWdubWVudHMuIFRoaXMKICAgICAgLy8gd2lsbCBiZSBzbWFsbGVyIGJ1dCBuZWFybHkgaW1wb3NzaWJsZSB0byByZWFkLiBBcmUgdGhlcmUgaW50ZXJpb3IKICAgICAgLy8gcG9zaXRpb25zIHRoYXQgd2Ugc2hvdWxkIGNoYWluIGludG8gYmVjYXVzZSB0aGV5IGFyZSBub3QgdG9vIGRpZmZpY3VsdAogICAgICAvLyB0byByZWFkPwogICAgICByZXR1cm4gbmV4dDsKICAgIH0KCiAgICBpZiAoc2ltcGxlU291cmNlKSByZXR1cm4gbmV4dDsKCiAgICAvLyBJZiB0aGVyZSBhcmUgbWFueSByZW1haW5pbmcgdXNlcywgYnV0IHRoZXkgYXJlIGFsbCBkb21pbmF0ZWQgYnkgW2NoYWluXSwKICAgIC8vIHRoZSB2YXJpYWJsZSBhbGxvY2F0b3Igd2lsbCB0cnkgdG8gZ2l2ZSB0aGVtIGFsbCB0aGUgc2FtZSBuYW1lLgogICAgaWYgKHVzZXMubGVuZ3RoID49IDIgJiYKICAgICAgICB2YWx1ZS51c2VkQnkubGVuZ3RoIC0gdXNlcy5sZW5ndGggPD0gMSAmJgogICAgICAgIHZhbHVlID09IHZhbHVlLm5vbkNoZWNrKCkpIHsKICAgICAgLy8gSWYgW3ZhbHVlXSBpcyBhIHBoaSwgaXQgbWlnaHQgaGF2ZSBhIG5hbWUuIEV4Y2VwdGlvbnMgYXJlIHBoaXMgdGhhdCBjYW4KICAgICAgLy8gYmUgY29tcGlsZWQgaW50byBleHByZXNzaW9ucyBsaWtlIGBhP2I6Y2AgYW5kIGBhJiZiYC4gV2UgY2FuJ3QgdGVsbAogICAgICAvLyBoZXJlIGlmIHRoZSBwaGkgaXMgYW4gZXhwcmVzc2lvbiwgd2hpY2ggd2UgY291bGQgY2hhaW4sIG9yIGFuCiAgICAgIC8vIGlmLXRoZW4tZWxzZSB3aXRoIGFzc2lnbm1lbnRzIHRvIGEgdmFyaWFibGUuIElmIHdlIHRyeSB0byBjaGFpbiBhbgogICAgICAvLyBpZi10aGVuLWVsc2UgcGhpIHdlIHdpbGwgZW5kIHVwIGdlbmVyYXRpbmcgY29kZSBsaWtlCiAgICAgIC8vCiAgICAgIC8vICAgICB0MiA9IHRoaXMueCA9IHQxOyAgLy8gdDEgaXMgdGhlIHBoaSwgdDIgaXMgdGhlIGNoYWluZWQgbmFtZQogICAgICAvLwogICAgICBpZiAodmFsdWUgaXMgSFBoaSkgcmV0dXJuIG5leHQ7CgogICAgICAvLyBXZSBuZWVkIFt2YWx1ZV0gdG8gYmUgZ2VuZXJhdGUtYXQtdXNlIGluIHRoZSBzZXR0ZXIgdG8gYXZvaWQgaXQgaGF2aW5nCiAgICAgIC8vIGEgbmFtZS4gQXMgYSBxdWljayBjaGVjayBmb3IgZ2VuZXJhdGUtYXQtdXNlLCBhY2NlcHQgcHVyZSBhbmQKICAgICAgLy8gaW1tZWRpYXRlbHkgcHJlY2VkaW5nIGluc3RydWN0aW9ucy4KICAgICAgaWYgKHZhbHVlLmlzUHVyZShfYWJzdHJhY3RWYWx1ZURvbWFpbikgfHwgc2V0dGVyLnByZXZpb3VzID09IHZhbHVlKSB7CiAgICAgICAgLy8gVE9ETyhzcmEpOiBXZSBjYW4gdG9sZXJhdGUgYSBmZXcgbm9uLXRocm93aW5nIGxvYWRzIGJldHdlZW4gc2V0dGVyCiAgICAgICAgLy8gYW5kIHZhbHVlLgogICAgICAgIHVzZXMucmVwbGFjZVdpdGgoY2hhaW4pOwogICAgICAgIGNoYWluLnNvdXJjZUVsZW1lbnQgPz89IHZhbHVlLnNvdXJjZUVsZW1lbnQ7CiAgICAgIH0KICAgICAgcmV0dXJuIG5leHQ7CiAgICB9CgogICAgcmV0dXJuIG5leHQ7CiAgfQp9CgovLy8gSW5zdGVhZCBvZiBlbWl0dGluZyBlYWNoIFNTQSBpbnN0cnVjdGlvbiB3aXRoIGEgdGVtcG9yYXJ5IHZhcmlhYmxlCi8vLyBtYXJrIGluc3RydWN0aW9ucyB0aGF0IGNhbiBiZSBlbWl0dGVkIGF0IHRoZWlyIHVzZS1zaXRlLgovLy8gRm9yIGV4YW1wbGUsIGluOgovLy8gICB0MCA9IDQ7Ci8vLyAgIHQxID0gMzsKLy8vICAgdDIgPSBhZGQodDAsIHQxKTsKLy8vIHQwIGFuZCB0MSB3b3VsZCBiZSBtYXJrZWQgYW5kIHRoZSByZXN1bHRpbmcgY29kZSB3b3VsZCB0aGVuIGJlOgovLy8gICB0MiA9IGFkZCg0LCAzKTsKY2xhc3MgU3NhSW5zdHJ1Y3Rpb25NZXJnZXIgZXh0ZW5kcyBIQmFzZVZpc2l0b3Igd2l0aCBDb2RlZ2VuUGhhc2UgewogIGZpbmFsIEFic3RyYWN0VmFsdWVEb21haW4gX2Fic3RyYWN0VmFsdWVEb21haW47CgogIC8vLyBMaXN0IG9mIFtISW5zdHJ1Y3Rpb25dIHRoYXQgdGhlIGluc3RydWN0aW9uIG1lcmdlciBleHBlY3RzIGluCiAgLy8vIG9yZGVyIHdoZW4gdmlzaXRpbmcgdGhlIGlucHV0cyBvZiBhbiBpbnN0cnVjdGlvbi4KICBMaXN0PEhJbnN0cnVjdGlvbj4gZXhwZWN0ZWRJbnB1dHM7CgogIC8vLyBTZXQgb2YgcHVyZSBbSEluc3RydWN0aW9uXSB0aGF0IHRoZSBpbnN0cnVjdGlvbiBtZXJnZXIgZXhwZWN0cyB0bwogIC8vLyBmaW5kLiBUaGUgb3JkZXIgb2YgcHVyZSBpbnN0cnVjdGlvbnMgZG8gbm90IG1hdHRlciwgYXMgdGhleSB3aWxsCiAgLy8vIG5vdCBiZSBhZmZlY3RlZCBieSBzaWRlIGVmZmVjdHMuCiAgU2V0PEhJbnN0cnVjdGlvbj4gcHVyZUlucHV0czsKICBTZXQ8SEluc3RydWN0aW9uPiBnZW5lcmF0ZUF0VXNlU2l0ZTsKCiAgdm9pZCBtYXJrQXNHZW5lcmF0ZUF0VXNlU2l0ZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGFzc2VydCghaW5zdHJ1Y3Rpb24uaXNKc1N0YXRlbWVudCgpKTsKICAgIGdlbmVyYXRlQXRVc2VTaXRlLmFkZChpbnN0cnVjdGlvbik7CiAgfQoKICBTc2FJbnN0cnVjdGlvbk1lcmdlcih0aGlzLl9hYnN0cmFjdFZhbHVlRG9tYWluLCB0aGlzLmdlbmVyYXRlQXRVc2VTaXRlKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgdmlzaXREb21pbmF0b3JUcmVlKGdyYXBoKTsKICB9CgogIHZvaWQgYW5hbHl6ZUlucHV0cyhISW5zdHJ1Y3Rpb24gdXNlciwgaW50IHN0YXJ0KSB7CiAgICBMaXN0PEhJbnN0cnVjdGlvbj4gaW5wdXRzID0gdXNlci5pbnB1dHM7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBpbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5wdXRzW2ldOwogICAgICBpZiAoIWdlbmVyYXRlQXRVc2VTaXRlLmNvbnRhaW5zKGlucHV0KSAmJgogICAgICAgICAgIWlucHV0LmlzQ29kZU1vdGlvbkludmFyaWFudCgpICYmCiAgICAgICAgICBpbnB1dC51c2VkQnkubGVuZ3RoID09IDEgJiYKICAgICAgICAgIGlucHV0IGlzISBIUGhpICYmCiAgICAgICAgICBpbnB1dCBpcyEgSExvY2FsVmFsdWUgJiYKICAgICAgICAgICFpbnB1dC5pc0pzU3RhdGVtZW50KCkpIHsKICAgICAgICBpZiAoaXNFZmZlY3RpdmVseVB1cmUoaW5wdXQpKSB7CiAgICAgICAgICAvLyBPbmx5IGNvbnNpZGVyIGEgcHVyZSBpbnB1dCBpZiBpdCBpcyBpbiB0aGUgc2FtZSBsb29wLgogICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSBtaWdodCBtb3ZlIEdWTidlZCBpbnN0cnVjdGlvbiBiYWNrIGludG8gdGhlCiAgICAgICAgICAvLyBsb29wLgogICAgICAgICAgaWYgKHVzZXIuaGFzU2FtZUxvb3BIZWFkZXJBcyhpbnB1dCkpIHsKICAgICAgICAgICAgLy8gTW92ZSBpdCBjbG9zZXIgdG8gW3VzZXJdLCBzbyB0aGF0IGluc3RydWN0aW9ucyBpbgogICAgICAgICAgICAvLyBiZXR3ZWVuIGRvIG5vdCBwcmV2ZW50IG1ha2luZyBpdCBnZW5lcmF0ZSBhdCB1c2Ugc2l0ZS4KICAgICAgICAgICAgaW5wdXQubW92ZUJlZm9yZSh1c2VyKTsKICAgICAgICAgICAgcHVyZUlucHV0cy5hZGQoaW5wdXQpOwogICAgICAgICAgICAvLyBQcmV2aW91cyBjb21wdXRhdGlvbnMgZG9uZSBvbiBbaW5wdXRdIGFyZSBub3cgaW52YWxpZAogICAgICAgICAgICAvLyBiZWNhdXNlIHdlIG1vdmVkIFtpbnB1dF0gdG8gYW5vdGhlciBwbGFjZS4gU28gYWxsCiAgICAgICAgICAgIC8vIG5vbiBjb2RlIG1vdGlvbiBpbnZhcmlhbnQgaW5zdHJ1Y3Rpb25zIG5lZWQKICAgICAgICAgICAgLy8gdG8gYmUgcmVtb3ZlZCBmcm9tIHRoZSBbZ2VuZXJhdGVBdFVzZVNpdGVdIHNldC4KICAgICAgICAgICAgaW5wdXQuaW5wdXRzLmZvckVhY2goKGluc3RydWN0aW9uKSB7CiAgICAgICAgICAgICAgaWYgKCFpbnN0cnVjdGlvbi5pc0NvZGVNb3Rpb25JbnZhcmlhbnQoKSkgewogICAgICAgICAgICAgICAgZ2VuZXJhdGVBdFVzZVNpdGUucmVtb3ZlKGluc3RydWN0aW9uKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAvLyBWaXNpdCB0aGUgcHVyZSBpbnB1dCBub3cgc28gdGhhdCB0aGUgZXhwZWN0ZWQgaW5wdXRzCiAgICAgICAgICAgIC8vIGFyZSBhZnRlciB0aGUgZXhwZWN0ZWQgaW5wdXRzIG9mIFt1c2VyXS4KICAgICAgICAgICAgaW5wdXQuYWNjZXB0KHRoaXMpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBleHBlY3RlZElucHV0cy5hZGQoaW5wdXQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8gU29tZSBub24tcHVyZSBpbnN0cnVjdGlvbnMgbWF5IGJlIHRyZWF0ZWQgYXMgcHVyZS4gSExvY2FsR2V0IGRlcGVuZHMgb24KICAvLyBhc3NpZ25tZW50cywgYnV0IHdlIGNhbiBpZ25vcmUgdGhlIGluaXRpYWxpemluZyBhc3NpZ25tZW50IHNpbmNlIGl0IHdpbGwgYnkKICAvLyBjb25zdHJ1Y3Rpb24gYWx3YXlzIHByZWNlZGUgYSB1c2UuCiAgYm9vbCBpc0VmZmVjdGl2ZWx5UHVyZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGlmIChpbnN0cnVjdGlvbiBpcyBITG9jYWxHZXQpIHJldHVybiAhaXNBc3NpZ25lZExvY2FsKGluc3RydWN0aW9uLmxvY2FsKTsKICAgIHJldHVybiBpbnN0cnVjdGlvbi5pc1B1cmUoX2Fic3RyYWN0VmFsdWVEb21haW4pOwogIH0KCiAgYm9vbCBpc0Fzc2lnbmVkTG9jYWwoSExvY2FsVmFsdWUgbG9jYWwpIHsKICAgIC8vIFtITG9jYWxWYWx1ZV1zIGhhdmUgYW4gaW5pdGlhbGl6aW5nIGFzc2lnbm1lbnQgd2hpY2ggaXMgZ3VhcmFudGVlZCB0bwogICAgLy8gcHJlY2VkZSB0aGUgdXNlLCBleGNlcHQgZm9yIFtIUGFyYW1ldGVyVmFsdWVdcyB3aGljaCBhcmUgJ2Fzc2lnbmVkJyBhdAogICAgLy8gZW50cnkuCiAgICBpbnQgaW5pdGlhbGl6aW5nQXNzaWdubWVudENvdW50ID0gKGxvY2FsIGlzIEhQYXJhbWV0ZXJWYWx1ZSkgPyAwIDogMTsKICAgIHJldHVybiBsb2NhbC51c2VkQnkKICAgICAgICAud2hlcmUoKHVzZXIpID0+IHVzZXIgaXMgSExvY2FsU2V0KQogICAgICAgIC5za2lwKGluaXRpYWxpemluZ0Fzc2lnbm1lbnRDb3VudCkKICAgICAgICAuaXNOb3RFbXB0eTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJbnN0cnVjdGlvbihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIEEgY29kZSBtb3Rpb24gaW52YXJpYW50IGluc3RydWN0aW9uIGlzIGRlYWx0IGJlZm9yZSB2aXNpdGluZyBpdC4KICAgIGFzc2VydCghaW5zdHJ1Y3Rpb24uaXNDb2RlTW90aW9uSW52YXJpYW50KCkpOwogICAgYW5hbHl6ZUlucHV0cyhpbnN0cnVjdGlvbiwgMCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0SW52b2tlU3VwZXIoSEludm9rZVN1cGVyIGluc3RydWN0aW9uKSB7CiAgICBNZW1iZXJFbnRpdHkgc3VwZXJNZXRob2QgPSBpbnN0cnVjdGlvbi5lbGVtZW50OwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBpbnN0cnVjdGlvbi5zZWxlY3RvcjsKICAgIC8vIElmIGFsaWFzZWQgc3VwZXIgbWVtYmVycyBjYW5ub3QgYmUgdXNlZCwgd2Ugd2lsbCBnZW5lcmF0ZSBjb2RlIGxpa2UKICAgIC8vCiAgICAvLyAgICAgQy5wcm90b3R5cGUubWV0aG9kLmNhbGwoaW5zdGFuY2UpCiAgICAvLwogICAgLy8gd2hlcmUgaW5zdGFuY2UgaXMgdGhlIFt0aGlzXSBvYmplY3QgZm9yIHRoZSBtZXRob2QuIEluIHN1Y2ggYSBjYXNlLCB0aGUKICAgIC8vIGdldCBvZiBwcm90b3R5cGUgbWlnaHQgYmUgZXZhbHVhdGVkIGJlZm9yZSBpbnN0YW5jZSBpcyBjcmVhdGVkIGlmIHdlCiAgICAvLyBnZW5lcmF0ZSBpbnN0YW5jZSBhdCB1c2Ugc2l0ZSwgd2hpY2ggaW4gdHVybiBtaWdodCB1cGRhdGUgdGhlIHByb3RvdHlwZQogICAgLy8gYWZ0ZXIgZmlyc3QgYWNjZXNzIGlmIHdlIHVzZSBsYXp5IGluaXRpYWxpemF0aW9uLgogICAgLy8gSW4gdGhpcyBjYXNlLCB3ZSB0aGVyZWZvcmUgZG9uJ3QgYWxsb3cgdGhlIHJlY2VpdmVyICh0aGUgZmlyc3QgYXJndW1lbnQpCiAgICAvLyB0byBiZSBnZW5lcmF0ZWQgYXQgdXNlIHNpdGUsIGFuZCBvbmx5IGFuYWx5emUgYWxsIG90aGVyIGFyZ3VtZW50cy4KICAgIGlmICghY2FuVXNlQWxpYXNlZFN1cGVyTWVtYmVyKHN1cGVyTWV0aG9kLCBzZWxlY3RvcikpIHsKICAgICAgYW5hbHl6ZUlucHV0cyhpbnN0cnVjdGlvbiwgMSk7CiAgICB9IGVsc2UgewogICAgICBzdXBlci52aXNpdEludm9rZVN1cGVyKGluc3RydWN0aW9uKTsKICAgIH0KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRJcyhISXMgaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIEluIHRoZSBnZW5lcmFsIGNhc2UgdGhlIGlucHV0IG1pZ2h0IGJlIHVzZWQgbXVsdHBsZSBtdWx0aXBsZSB0aW1lcywgc28gaXQKICAgIC8vIG11c3Qgbm90IGJlIHNldCBnZW5lcmF0ZSBhdCB1c2Ugc2l0ZS4KCiAgICAvLyBJZiB0aGUgY29kZSB3aWxsIGdlbmVyYXRlICdpbnN0YW5jZW9mJyB0aGVuIHdlIGNhbiBnZW5lcmF0ZSBhdCB1c2Ugc2l0ZS4KICAgIGlmIChpbnN0cnVjdGlvbi51c2VJbnN0YW5jZU9mKSB7CiAgICAgIGFuYWx5emVJbnB1dHMoaW5zdHJ1Y3Rpb24sIDApOwogICAgfQoKICAgIC8vIENvbXBvdW5kIGFuZCB2YXJpYWJsZSBjaGVja3MgdXNlIGEgc2VwYXJhdGUgaW5zdHJ1Y3Rpb24gdG8gY29tcHV0ZSB0aGUKICAgIC8vIHJlc3VsdC4KICAgIGlmIChpbnN0cnVjdGlvbi5pc0NvbXBvdW5kQ2hlY2sgfHwgaW5zdHJ1Y3Rpb24uaXNWYXJpYWJsZUNoZWNrKSB7CiAgICAgIGFuYWx5emVJbnB1dHMoaW5zdHJ1Y3Rpb24sIDApOwogICAgfQogIH0KCiAgLy8gQSBib3VuZHMgY2hlY2sgbWV0aG9kIG11c3Qgbm90IGhhdmUgaXRzIGZpcnN0IGlucHV0IGdlbmVyYXRlZCBhdCB1c2Ugc2l0ZSwKICAvLyBiZWNhdXNlIGl0J3MgdXNpbmcgaXQgdHdpY2UuCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJvdW5kc0NoZWNrKEhCb3VuZHNDaGVjayBpbnN0cnVjdGlvbikgewogICAgYW5hbHl6ZUlucHV0cyhpbnN0cnVjdGlvbiwgMSk7CiAgfQoKICAvLyBBbiBpZGVudGl0eSBvcGVyYXRpb24gbXVzdCBvbmx5IGhhdmUgaXRzIGlucHV0cyBnZW5lcmF0ZWQgYXQgdXNlIHNpdGUgaWYKICAvLyBkb2VzIG5vdCByZXF1aXJlIGFuIGV4cHJlc3Npb24gd2l0aCBtdWx0aXBsZSB1c2VzIChiZWNhdXNlIG9mIG51bGwgLwogIC8vIHVuZGVmaW5lZCkuCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdElkZW50aXR5KEhJZGVudGl0eSBpbnN0cnVjdGlvbikgewogICAgaWYgKGluc3RydWN0aW9uLnNpbmdsZUNvbXBhcmlzb25PcCAhPSBudWxsKSB7CiAgICAgIHN1cGVyLnZpc2l0SWRlbnRpdHkoaW5zdHJ1Y3Rpb24pOwogICAgfQogICAgLy8gRG8gbm90aGluZy4KICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRUeXBlQ29udmVyc2lvbihIVHlwZUNvbnZlcnNpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIFR5cGUgY2hlY2tzIGFuZCBjYXN0IGNoZWNrcyBjb21waWxlIHRvIGNvZGUgdGhhdCBvbmx5IHVzZSB0aGVpciBpbnB1dAogICAgLy8gb25jZSwgc28gd2UgY2FuIHNhZmVseSB2aXNpdCB0aGVtIGFuZCB0cnkgdG8gbWVyZ2UgdGhlIGlucHV0LgogICAgdmlzaXRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QXNDaGVjayhIQXNDaGVjayBpbnN0cnVjdGlvbikgewogICAgLy8gVHlwZSBjaGVja3MgYW5kIGNhc3QgY2hlY2tzIGNvbXBpbGUgdG8gY29kZSB0aGF0IG9ubHkgdXNlIHRoZWlyIGlucHV0CiAgICAvLyBvbmNlLCBzbyB3ZSBjYW4gc2FmZWx5IHZpc2l0IHRoZW0gYW5kIHRyeSB0byBtZXJnZSB0aGUgaW5wdXQuCiAgICB2aXNpdEluc3RydWN0aW9uKGluc3RydWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBc0NoZWNrU2ltcGxlKEhBc0NoZWNrU2ltcGxlIGluc3RydWN0aW9uKSB7CiAgICAvLyBUeXBlIGNoZWNrcyBhbmQgY2FzdCBjaGVja3MgY29tcGlsZSB0byBjb2RlIHRoYXQgb25seSB1c2UgdGhlaXIgaW5wdXQKICAgIC8vIG9uY2UsIHNvIHdlIGNhbiBzYWZlbHkgdmlzaXQgdGhlbSBhbmQgdHJ5IHRvIG1lcmdlIHRoZSBpbnB1dC4KICAgIHZpc2l0SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb24pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFR5cGVFdmFsKEhUeXBlRXZhbCBpbnN0cnVjdGlvbikgewogICAgLy8gVHlwZSBleHByZXNzaW9ucyBjb21waWxlIHRvIGNvZGUgdGhhdCBvbmx5IHVzZSB0aGVpciBpbnB1dCBvbmNlLCBzbyB3ZQogICAgLy8gY2FuIHNhZmVseSB2aXNpdCB0aGVtIGFuZCB0cnkgdG8gbWVyZ2UgdGhlIGlucHV0LgogICAgdmlzaXRJbnN0cnVjdGlvbihpbnN0cnVjdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UHJpbWl0aXZlQ2hlY2soSFByaW1pdGl2ZUNoZWNrIGluc3RydWN0aW9uKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VHlwZUtub3duKEhUeXBlS25vd24gaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIFtIVHlwZUtub3duXSBpbnN0cnVjdGlvbnMgYXJlIHJlbW92ZWQgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbi4KICAgIGFzc2VydChmYWxzZSk7CiAgfQoKICB2b2lkIHRyeUdlbmVyYXRlQXRVc2VTaXRlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgaWYgKGluc3RydWN0aW9uLmlzQ29udHJvbEZsb3coKSkgcmV0dXJuOwogICAgbWFya0FzR2VuZXJhdGVBdFVzZVNpdGUoaW5zdHJ1Y3Rpb24pOwogIH0KCiAgYm9vbCBpc0Jsb2NrU2luZ2xlUHJlZGVjZXNzb3IoSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIHJldHVybiBibG9jay5zdWNjZXNzb3JzLmxlbmd0aCA9PSAxICYmCiAgICAgICAgYmxvY2suc3VjY2Vzc29yc1swXS5wcmVkZWNlc3NvcnMubGVuZ3RoID09IDE7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgLy8gQ29tcGVuc2F0ZSBmcm9tIG5vdCBtZXJnaW5nIGJsb2NrczogaWYgdGhlIGJsb2NrIGlzIHRoZQogICAgLy8gc2luZ2xlIHByZWRlY2Vzc29yIG9mIGl0cyBzaW5nbGUgc3VjY2Vzc29yLCBsZXQgdGhlIHN1Y2Nlc3NvcgogICAgLy8gdmlzaXQgaXQuCiAgICBpZiAoaXNCbG9ja1NpbmdsZVByZWRlY2Vzc29yKGJsb2NrKSkgcmV0dXJuOwoKICAgIHRyeU1lcmdpbmdFeHByZXNzaW9ucyhibG9jayk7CiAgfQoKICB2b2lkIHRyeU1lcmdpbmdFeHByZXNzaW9ucyhIQmFzaWNCbG9jayBibG9jaykgewogICAgLy8gVmlzaXQgZWFjaCBpbnN0cnVjdGlvbiBvZiB0aGUgYmFzaWMgYmxvY2sgaW4gbGFzdC10by1maXJzdCBvcmRlci4KICAgIC8vIEtlZXAgYSBsaXN0IG9mIGV4cGVjdGVkIGlucHV0cyBvZiB0aGUgY3VycmVudCAiZXhwcmVzc2lvbiIgYmVpbmcKICAgIC8vIG1lcmdlZC4gSWYgaW5zdHJ1Y3Rpb25zIG9jY3VyIGluIHRoZSBleHBlY3RlZCBvcmRlciwgdGhleSBhcmUKICAgIC8vIGluY2x1ZGVkIGluIHRoZSBleHByZXNzaW9uLgoKICAgIC8vIFRoZSBleHBlY3RlZElucHV0cyBsaXN0IGhvbGRzIG5vbi10cml2aWFsIGluc3RydWN0aW9ucyB0aGF0IG1heQogICAgLy8gYmUgZ2VuZXJhdGVkIGF0IHRoZWlyIHVzZSBzaXRlLCBpZiB0aGV5IG9jY3VyIGluIHRoZSBjb3JyZWN0IG9yZGVyLgogICAgaWYgKGV4cGVjdGVkSW5wdXRzID09IG51bGwpIGV4cGVjdGVkSW5wdXRzID0gbmV3IExpc3Q8SEluc3RydWN0aW9uPigpOwogICAgaWYgKHB1cmVJbnB1dHMgPT0gbnVsbCkgcHVyZUlucHV0cyA9IG5ldyBTZXQ8SEluc3RydWN0aW9uPigpOwoKICAgIC8vIFBvcCBpbnN0cnVjdGlvbnMgZnJvbSBleHBlY3RlZElucHV0cyB1bnRpbCBpbnN0cnVjdGlvbiBpcyBmb3VuZC4KICAgIC8vIFJldHVybiB0cnVlIGlmIGl0IGlzIGZvdW5kLCBvciBmYWxzZSBpZiBub3QuCiAgICBib29sIGZpbmRJbklucHV0c0FuZFBvcE5vbk1hdGNoaW5nKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgICBhc3NlcnQoIWlzRWZmZWN0aXZlbHlQdXJlKGluc3RydWN0aW9uKSk7CiAgICAgIHdoaWxlICghZXhwZWN0ZWRJbnB1dHMuaXNFbXB0eSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBuZXh0SW5wdXQgPSBleHBlY3RlZElucHV0cy5yZW1vdmVMYXN0KCk7CiAgICAgICAgYXNzZXJ0KCFnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyhuZXh0SW5wdXQpKTsKICAgICAgICBhc3NlcnQobmV4dElucHV0LnVzZWRCeS5sZW5ndGggPT0gMSk7CiAgICAgICAgaWYgKGlkZW50aWNhbChuZXh0SW5wdXQsIGluc3RydWN0aW9uKSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBibG9jay5sYXN0LmFjY2VwdCh0aGlzKTsKICAgIGZvciAoSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gYmxvY2subGFzdC5wcmV2aW91czsKICAgICAgICBpbnN0cnVjdGlvbiAhPSBudWxsOwogICAgICAgIGluc3RydWN0aW9uID0gaW5zdHJ1Y3Rpb24ucHJldmlvdXMpIHsKICAgICAgaWYgKGdlbmVyYXRlQXRVc2VTaXRlLmNvbnRhaW5zKGluc3RydWN0aW9uKSkgewogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGlmIChpbnN0cnVjdGlvbi5pc0NvZGVNb3Rpb25JbnZhcmlhbnQoKSkgewogICAgICAgIG1hcmtBc0dlbmVyYXRlQXRVc2VTaXRlKGluc3RydWN0aW9uKTsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoaXNFZmZlY3RpdmVseVB1cmUoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgaWYgKHB1cmVJbnB1dHMuY29udGFpbnMoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgICB0cnlHZW5lcmF0ZUF0VXNlU2l0ZShpbnN0cnVjdGlvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIElmIHRoZSBpbnB1dCBpcyBub3QgaW4gdGhlIFtwdXJlSW5wdXRzXSBzZXQsIGl0IGhhcyBub3QKICAgICAgICAgIC8vIGJlZW4gdmlzaXRlZCBvciBzaG91bGQgbm90IGJlIGdlbmVyYXRlZCBhdCB1c2Utc2l0ZS4gVGhlIG1vc3QKICAgICAgICAgIC8vIGxpa2VseSByZWFzb24gZm9yIHRoZSBsYXR0ZXIsIGlzIHRoYXQgdGhlIGluc3RydWN0aW9uIGlzIHVzZWQKICAgICAgICAgIC8vIGluIG1vcmUgdGhhbiBvbmUgbG9jYXRpb24uCiAgICAgICAgICAvLyBXZSBtdXN0IGVpdGhlciBjbGVhciB0aGUgZXhwZWN0ZWRJbnB1dHMsIG9yIG1vdmUgdGhlIHB1cmUKICAgICAgICAgIC8vIGluc3RydWN0aW9uJ3MgaW5wdXRzIGluIGZyb250IG9mIHRoZSBleGlzdGluZyBvbmVzLgogICAgICAgICAgLy8gRXhhbXBsZToKICAgICAgICAgIC8vICAgdDEgPSBmb28oKTsgIC8vIHNpZGUtZWZmZWN0LgogICAgICAgICAgLy8gICB0MiA9IGJhcigpOyAgLy8gc2lkZS1lZmZlY3QuCiAgICAgICAgICAvLyAgIHQzID0gcHVyZSh0Mik7ICAgIC8vIHVzZWQgbW9yZSB0aGFuIG9uY2UuCiAgICAgICAgICAvLyAgIGYodDEsIHQzKTsgICAvLyBleHBlY3RlZCBpbnB1dHMgb2YgJ2YnOiB0MS4KICAgICAgICAgIC8vICAgdXNlKHQzKTsKICAgICAgICAgIC8vCiAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBjbGVhciB0aGUgZXhwZWN0ZWQgaW5wdXRzIHdlIGVuZCB1cCBpbiBhIHNpdHVhdGlvbgogICAgICAgICAgLy8gd2hlcmUgcHVyZSBwdXNoZXMgInQyIiBvbiB0b3Agb2YgInQxIiBsZWFkaW5nIHRvOgogICAgICAgICAgLy8gICB0MyA9IHB1cmUoYmFyKCkpOwogICAgICAgICAgLy8gICBmKGZvbygpLCB0Myk7CiAgICAgICAgICAvLyAgIHVzZSh0Myk7CiAgICAgICAgICAvLwogICAgICAgICAgLy8gSWYgd2UgY2xlYXIgdGhlIGV4cGVjdGVkLWlucHV0cyBsaXN0IHdlIGhhdmUgdGhlIGNvcnJlY3QKICAgICAgICAgIC8vIG91dHB1dDoKICAgICAgICAgIC8vICAgdDEgPSBmb28oKTsKICAgICAgICAgIC8vICAgdDMgPSBwdXJlKGJhcigpKTsKICAgICAgICAgIC8vICAgZih0MSwgdDMpOwogICAgICAgICAgLy8gICB1c2UodDMpOwogICAgICAgICAgLy8KICAgICAgICAgIC8vIENsZWFyaW5nIGlzLCBob3dldmVyLCBub3Qgb3B0aW1hbC4KICAgICAgICAgIC8vIEV4YW1wbGU6CiAgICAgICAgICAvLyAgIHQxID0gZm9vKCk7ICAvLyB0MSBpcyBub3cgdXNlZCBieSBgcHVyZWAuCiAgICAgICAgICAvLyAgIHQyID0gYmFyKCk7ICAvLyB0MiBpcyBub3cgdXNlZCBieSBgZmAuCiAgICAgICAgICAvLyAgIHQzID0gcHVyZSh0MSk7CiAgICAgICAgICAvLyAgIGYodDIsIHQzKTsKICAgICAgICAgIC8vICAgdXNlKHQzKTsKICAgICAgICAgIC8vCiAgICAgICAgICAvLyBJZiB3ZSBjbGVhciB0aGUgZXhwZWN0ZWQtaW5wdXRzIHdlIGNhbid0IGdlbmVyYXRlLWF0LXVzZSBhbnkgb2YKICAgICAgICAgIC8vIHRoZSBpbnN0cnVjdGlvbnMuCiAgICAgICAgICAvLwogICAgICAgICAgLy8gVGhlIG9wdGltYWwgc29sdXRpb24gaXMgdG8gbW92ZSB0aGUgaW5wdXRzIG9mICdwdXJlJyBpbgogICAgICAgICAgLy8gZnJvbnQgb2YgdGhlIGV4cGVjdGVkSW5wdXRzIGxpc3QuIFRoaXMgbWFrZXMgc2Vuc2UsIHNpbmNlIHdlCiAgICAgICAgICAvLyBwdXNoIGV4cGVjdGVkLWlucHV0cyBmcm9tIGxlZnQtdG8gcmlnaHQsIGFuZCB0aGUgYHB1cmVgIGZ1bmN0aW9uCiAgICAgICAgICAvLyBpbnZvY2F0aW9uIGlzICJtb3JlIGxlZnQiIChpLmUuIGJlZm9yZSkgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIGBmYC4KICAgICAgICAgIC8vIFdpdGggdGhhdCBhcHByb2FjaCB3ZSBlbmQgdXAgd2l0aDoKICAgICAgICAgIC8vICAgdDMgPSBwdXJlKGZvbygpKTsKICAgICAgICAgIC8vICAgZihiYXIoKSwgdDMpOwogICAgICAgICAgLy8gICB1c2UodDMpOwogICAgICAgICAgLy8KICAgICAgICAgIGludCBvbGRMZW5ndGggPSBleHBlY3RlZElucHV0cy5sZW5ndGg7CiAgICAgICAgICBpbnN0cnVjdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgICAgICBpZiAob2xkTGVuZ3RoICE9IDAgJiYgb2xkTGVuZ3RoICE9IGV4cGVjdGVkSW5wdXRzLmxlbmd0aCkgewogICAgICAgICAgICAvLyBNb3ZlIHRoZSBwdXJlIGluc3RydWN0aW9uJ3MgaW5wdXRzIHRvIHRoZSBmcm9udC4KICAgICAgICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IG5ld0lucHV0cyA9IGV4cGVjdGVkSW5wdXRzLnN1Ymxpc3Qob2xkTGVuZ3RoKTsKICAgICAgICAgICAgaW50IG5ld0NvdW50ID0gbmV3SW5wdXRzLmxlbmd0aDsKICAgICAgICAgICAgZXhwZWN0ZWRJbnB1dHMuc2V0UmFuZ2UoCiAgICAgICAgICAgICAgICBuZXdDb3VudCwgbmV3Q291bnQgKyBvbGRMZW5ndGgsIGV4cGVjdGVkSW5wdXRzKTsKICAgICAgICAgICAgZXhwZWN0ZWRJbnB1dHMuc2V0UmFuZ2UoMCwgbmV3Q291bnQsIG5ld0lucHV0cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChmaW5kSW5JbnB1dHNBbmRQb3BOb25NYXRjaGluZyhpbnN0cnVjdGlvbikpIHsKICAgICAgICAgIC8vIFRoZSBjdXJyZW50IGluc3RydWN0aW9uIGlzIHRoZSBuZXh0IG5vbi10cml2aWFsCiAgICAgICAgICAvLyBleHBlY3RlZCBpbnB1dC4KICAgICAgICAgIHRyeUdlbmVyYXRlQXRVc2VTaXRlKGluc3RydWN0aW9uKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXNzZXJ0KGV4cGVjdGVkSW5wdXRzLmlzRW1wdHkpOwogICAgICAgIH0KICAgICAgICBpbnN0cnVjdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoYmxvY2sucHJlZGVjZXNzb3JzLmxlbmd0aCA9PSAxICYmCiAgICAgICAgaXNCbG9ja1NpbmdsZVByZWRlY2Vzc29yKGJsb2NrLnByZWRlY2Vzc29yc1swXSkpIHsKICAgICAgYXNzZXJ0KGJsb2NrLnBoaXMuaXNFbXB0eSk7CiAgICAgIHRyeU1lcmdpbmdFeHByZXNzaW9ucyhibG9jay5wcmVkZWNlc3NvcnNbMF0pOwogICAgfSBlbHNlIHsKICAgICAgZXhwZWN0ZWRJbnB1dHMgPSBudWxsOwogICAgICBwdXJlSW5wdXRzID0gbnVsbDsKICAgIH0KICB9Cn0KCi8vLyAgRGV0ZWN0IGNvbnRyb2wgZmxvdyBhcmlzaW5nIGZyb20gc2hvcnQtY2lyY3VpdCBsb2dpY2FsIGFuZAovLy8gIGNvbmRpdGlvbmFsIG9wZXJhdG9ycywgYW5kIHByZXBhcmUgdGhlIHByb2dyYW0gdG8gYmUgZ2VuZXJhdGVkCi8vLyAgdXNpbmcgdGhlc2Ugb3BlcmF0b3JzIGluc3RlYWQgb2YgbmVzdGVkIGlmcyBhbmQgYm9vbGVhbiB2YXJpYWJsZXMuCmNsYXNzIFNzYUNvbmRpdGlvbk1lcmdlciBleHRlbmRzIEhHcmFwaFZpc2l0b3Igd2l0aCBDb2RlZ2VuUGhhc2UgewogIFNldDxISW5zdHJ1Y3Rpb24+IGdlbmVyYXRlQXRVc2VTaXRlOwogIFNldDxISW5zdHJ1Y3Rpb24+IGNvbnRyb2xGbG93T3BlcmF0b3JzOwoKICB2b2lkIG1hcmtBc0dlbmVyYXRlQXRVc2VTaXRlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgYXNzZXJ0KCFpbnN0cnVjdGlvbi5pc0pzU3RhdGVtZW50KCkpOwogICAgZ2VuZXJhdGVBdFVzZVNpdGUuYWRkKGluc3RydWN0aW9uKTsKICB9CgogIFNzYUNvbmRpdGlvbk1lcmdlcih0aGlzLmdlbmVyYXRlQXRVc2VTaXRlLCB0aGlzLmNvbnRyb2xGbG93T3BlcmF0b3JzKTsKCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEdyYXBoKEhHcmFwaCBncmFwaCkgewogICAgdmlzaXRQb3N0RG9taW5hdG9yVHJlZShncmFwaCk7CiAgfQoKICAvLy8gQ2hlY2sgaWYgYSBibG9jayBoYXMgYXQgbGVhc3Qgb25lIHN0YXRlbWVudCBvdGhlciB0aGFuCiAgLy8vIFtpbnN0cnVjdGlvbl0uCiAgYm9vbCBoYXNBbnlTdGF0ZW1lbnQoSEJhc2ljQmxvY2sgYmxvY2ssIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgLy8gSWYgW2luc3RydWN0aW9uXSBpcyBub3QgaW4gW2Jsb2NrXSwgdGhlbiBpZiB0aGUgYmxvY2sgaXMgbm90CiAgICAvLyBlbXB0eSwgd2Uga25vdyB0aGVyZSB3aWxsIGJlIGEgc3RhdGVtZW50IHRvIGVtaXQuCiAgICBpZiAoIWlkZW50aWNhbChpbnN0cnVjdGlvbi5ibG9jaywgYmxvY2spKSB7CiAgICAgIHJldHVybiAhaWRlbnRpY2FsKGJsb2NrLmxhc3QsIGJsb2NrLmZpcnN0KTsKICAgIH0KCiAgICAvLyBJZiBbaW5zdHJ1Y3Rpb25dIGlzIG5vdCB0aGUgbGFzdCBpbnN0cnVjdGlvbiBvZiB0aGUgYmxvY2sKICAgIC8vIGJlZm9yZSB0aGUgY29udHJvbCBmbG93IGluc3RydWN0aW9uLCBvciB0aGUgbGFzdCBpbnN0cnVjdGlvbiwKICAgIC8vIHRoZW4gd2Ugd2lsbCBoYXZlIHRvIGVtaXQgYSBzdGF0ZW1lbnQgZm9yIHRoYXQgbGFzdCBpbnN0cnVjdGlvbi4KICAgIGlmIChpbnN0cnVjdGlvbiAhPSBibG9jay5sYXN0ICYmCiAgICAgICAgIWlkZW50aWNhbChpbnN0cnVjdGlvbiwgYmxvY2subGFzdC5wcmV2aW91cykpIHJldHVybiB0cnVlOwoKICAgIC8vIElmIG9uZSBvZiB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoZSBibG9jayB1bnRpbCBbaW5zdHJ1Y3Rpb25dIGlzCiAgICAvLyBub3QgZ2VuZXJhdGVkIGF0IHVzZSBzaXRlLCB0aGVuIHdlIHdpbGwgaGF2ZSB0byBlbWl0IGEKICAgIC8vIHN0YXRlbWVudCBmb3IgaXQuCiAgICAvLyBUT0RPKG5nZW9mZnJheSk6IHdlIGNvdWxkIGdlbmVyYXRlIGEgY29tbWEgc2VwYXJhdGVkCiAgICAvLyBsaXN0IG9mIGV4cHJlc3Npb25zLgogICAgZm9yIChISW5zdHJ1Y3Rpb24gdGVtcCA9IGJsb2NrLmZpcnN0OwogICAgICAgICFpZGVudGljYWwodGVtcCwgaW5zdHJ1Y3Rpb24pOwogICAgICAgIHRlbXAgPSB0ZW1wLm5leHQpIHsKICAgICAgaWYgKCFnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyh0ZW1wKSkgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgYm9vbCBpc1NhZmVUb0dlbmVyYXRlQXRVc2VTaXRlKEhJbnN0cnVjdGlvbiB1c2VyLCBISW5zdHJ1Y3Rpb24gaW5wdXQpIHsKICAgIC8vIEhDcmVhdGUgZXZhbHVhdGVzIGFyZ3VtZW50cyBpbiBvcmRlciBhbmQgcGFzc2VzIHRoZW0gdG8gYSBjb25zdHJ1Y3Rvci4KICAgIGlmICh1c2VyIGlzIEhDcmVhdGUpIHJldHVybiB0cnVlOwogICAgLy8gQSBbSEZvcmVpZ25dIGluc3RydWN0aW9uIHVzZXMgb3BlcmF0b3JzIGFuZCBpZiB3ZSBnZW5lcmF0ZSBbaW5wdXRdIGF0IHVzZQogICAgLy8gc2l0ZSwgdGhlIHByZWNlZGVuY2Ugb3IgZXZhbHVhdGlvbiBvcmRlciBtaWdodCBiZSB3cm9uZy4KICAgIGlmICh1c2VyIGlzIEhGb3JlaWduKSByZXR1cm4gZmFsc2U7CiAgICAvLyBBIFtIQ2hlY2tdIGluc3RydWN0aW9uIHdpdGggY29udHJvbCBmbG93IHVzZXMgaXRzIGlucHV0CiAgICAvLyBtdWx0aXBsZSB0aW1lcywgc28gd2UgYXZvaWQgZ2VuZXJhdGluZyBpdCBhdCB1c2Ugc2l0ZS4KICAgIGlmICh1c2VyIGlzIEhDaGVjayAmJiB1c2VyLmlzQ29udHJvbEZsb3coKSkgcmV0dXJuIGZhbHNlOwogICAgLy8gQSBbSElzXSBpbnN0cnVjdGlvbiB1c2VzIGl0cyBpbnB1dCBtdWx0aXBsZSB0aW1lcywgc28gd2UKICAgIC8vIGF2b2lkIGdlbmVyYXRpbmcgaXQgYXQgdXNlIHNpdGUuCiAgICBpZiAodXNlciBpcyBISXMpIHJldHVybiBmYWxzZTsKICAgIC8vIEF2b2lkIGNvZGUgbW90aW9uIGludG8gYSBsb29wLgogICAgcmV0dXJuIHVzZXIuaGFzU2FtZUxvb3BIZWFkZXJBcyhpbnB1dCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgaWYgKGJsb2NrLmxhc3QgaXMhIEhJZikgcmV0dXJuOwogICAgSElmIHN0YXJ0SWYgPSBibG9jay5sYXN0OwogICAgSEJhc2ljQmxvY2sgZW5kID0gc3RhcnRJZi5qb2luQmxvY2s7CgogICAgLy8gV2UgY2hlY2sgdGhhdCB0aGUgc3RydWN0dXJlIGlzIHRoZSBmb2xsb3dpbmc6CiAgICAvLyAgICAgICAgIElmCiAgICAvLyAgICAgICAvICAgIFwKICAgIC8vICAgICAgLyAgICAgIFwKICAgIC8vICAgMSBleHByICAgIGdvdG8KICAgIC8vICAgIGdvdG8gICAgIC8KICAgIC8vICAgICAgXCAgICAgLwogICAgLy8gICAgICAgXCAgIC8KICAgIC8vIHBoaShleHByLCB0cnVlfGZhbHNlKQogICAgLy8KICAgIC8vIGFuZCB0aGUgc2FtZSBmb3IgbmVzdGVkIG5vZGVzOgogICAgLy8KICAgIC8vICAgICAgICAgICAgSWYKICAgIC8vICAgICAgICAgIC8gICAgXAogICAgLy8gICAgICAgICAvICAgICAgXAogICAgLy8gICAgICAxIGV4cHIxICAgIFwKICAgIC8vICAgICAgIElmICAgICAgICAgXAogICAgLy8gICAgICAvICBcICAgICAgICAgXAogICAgLy8gICAgIC8gICAgXCAgICAgICAgIGdvdG8KICAgIC8vICAxIGV4cHIyICAgICAgICAgICAgfAogICAgLy8gICAgZ290byAgICBnb3RvICAgICB8CiAgICAvLyAgICAgIFwgICAgIC8gICAgICAgIHwKICAgIC8vICAgICAgIFwgICAvICAgICAgICAgfAogICAgLy8gICBwaGkxKGV4cHIyLCB0cnVlfGZhbHNlKQogICAgLy8gICAgICAgICAgXCAgICAgICAgICB8CiAgICAvLyAgICAgICAgICAgXCAgICAgICAgIHwKICAgIC8vICAgICAgICAgICAgIHBoaShwaGkxLCB0cnVlfGZhbHNlKQoKICAgIGlmIChlbmQgPT0gbnVsbCkgcmV0dXJuOwogICAgaWYgKGVuZC5waGlzLmlzRW1wdHkpIHJldHVybjsKICAgIGlmICghaWRlbnRpY2FsKGVuZC5waGlzLmZpcnN0LCBlbmQucGhpcy5sYXN0KSkgcmV0dXJuOwogICAgSEJhc2ljQmxvY2sgZWxzZUJsb2NrID0gc3RhcnRJZi5lbHNlQmxvY2s7CgogICAgaWYgKCFpZGVudGljYWwoZW5kLnByZWRlY2Vzc29yc1sxXSwgZWxzZUJsb2NrKSkgcmV0dXJuOwogICAgSFBoaSBwaGkgPSBlbmQucGhpcy5maXJzdDsKICAgIEhJbnN0cnVjdGlvbiB0aGVuSW5wdXQgPSBwaGkuaW5wdXRzWzBdOwogICAgSEluc3RydWN0aW9uIGVsc2VJbnB1dCA9IHBoaS5pbnB1dHNbMV07CiAgICBpZiAodGhlbklucHV0LmlzSnNTdGF0ZW1lbnQoKSB8fCBlbHNlSW5wdXQuaXNKc1N0YXRlbWVudCgpKSByZXR1cm47CgogICAgaWYgKGhhc0FueVN0YXRlbWVudChlbHNlQmxvY2ssIGVsc2VJbnB1dCkpIHJldHVybjsKICAgIGFzc2VydChlbHNlQmxvY2suc3VjY2Vzc29ycy5sZW5ndGggPT0gMSk7CiAgICBhc3NlcnQoZW5kLnByZWRlY2Vzc29ycy5sZW5ndGggPT0gMik7CgogICAgSEJhc2ljQmxvY2sgdGhlbkJsb2NrID0gc3RhcnRJZi50aGVuQmxvY2s7CiAgICAvLyBTa2lwIHRyaXZpYWwgZ290byBibG9ja3MuCiAgICB3aGlsZSAodGhlbkJsb2NrLnN1Y2Nlc3NvcnNbMF0gIT0gZW5kICYmIHRoZW5CbG9jay5maXJzdCBpcyBIR290bykgewogICAgICB0aGVuQmxvY2sgPSB0aGVuQmxvY2suc3VjY2Vzc29yc1swXTsKICAgIH0KCiAgICAvLyBJZiB0aGUgW3RoZW5CbG9ja10gaXMgYWxyZWFkeSBhIGNvbnRyb2wgZmxvdyBvcGVyYXRpb24sIGFuZCBkb2VzIG5vdAogICAgLy8gaGF2ZSBhbnkgc3RhdGVtZW50IGFuZCBpdHMgam9pbiBibG9jayBpcyBbZW5kXSwgd2UgY2FuIGVtaXQgYQogICAgLy8gc2VxdWVuY2Ugb2YgY29udHJvbCBmbG93IG9wZXJhdGlvbi4KICAgIGlmIChjb250cm9sRmxvd09wZXJhdG9ycy5jb250YWlucyh0aGVuQmxvY2subGFzdCkpIHsKICAgICAgSElmIG90aGVySWYgPSB0aGVuQmxvY2subGFzdDsKICAgICAgaWYgKCFpZGVudGljYWwob3RoZXJJZi5qb2luQmxvY2ssIGVuZCkpIHsKICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIGEgam9pbiBibG9jayB0aGF0IGp1c3QgZmVlZHMgaW50byBvdXIgam9pbiBibG9jay4KICAgICAgICBIQmFzaWNCbG9jayBvdGhlckpvaW4gPSBvdGhlcklmLmpvaW5CbG9jazsKICAgICAgICBpZiAob3RoZXJKb2luLmZpcnN0ICE9IG90aGVySm9pbi5sYXN0KSByZXR1cm47CiAgICAgICAgaWYgKG90aGVySm9pbi5zdWNjZXNzb3JzLmxlbmd0aCAhPSAxKSByZXR1cm47CiAgICAgICAgaWYgKG90aGVySm9pbi5zdWNjZXNzb3JzWzBdICE9IGVuZCkgcmV0dXJuOwogICAgICAgIGlmIChvdGhlckpvaW4ucGhpcy5pc0VtcHR5KSByZXR1cm47CiAgICAgICAgaWYgKCFpZGVudGljYWwob3RoZXJKb2luLnBoaXMuZmlyc3QsIG90aGVySm9pbi5waGlzLmxhc3QpKSByZXR1cm47CiAgICAgICAgSFBoaSBvdGhlclBoaSA9IG90aGVySm9pbi5waGlzLmZpcnN0OwogICAgICAgIGlmICh0aGVuSW5wdXQgIT0gb3RoZXJQaGkpIHJldHVybjsKICAgICAgICBpZiAoZWxzZUlucHV0ICE9IG90aGVyUGhpLmlucHV0c1sxXSkgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChoYXNBbnlTdGF0ZW1lbnQodGhlbkJsb2NrLCBvdGhlcklmKSkgcmV0dXJuOwogICAgfSBlbHNlIHsKICAgICAgaWYgKCFpZGVudGljYWwoZW5kLnByZWRlY2Vzc29yc1swXSwgdGhlbkJsb2NrKSkgcmV0dXJuOwogICAgICBpZiAoaGFzQW55U3RhdGVtZW50KHRoZW5CbG9jaywgdGhlbklucHV0KSkgcmV0dXJuOwogICAgICBhc3NlcnQodGhlbkJsb2NrLnN1Y2Nlc3NvcnMubGVuZ3RoID09IDEpOwogICAgfQoKICAgIC8vIEZyb20gbm93IG9uLCB3ZSBoYXZlIHJlY29nbml6ZWQgYSBjb250cm9sIGZsb3cgb3BlcmF0aW9uIGJ1aWx0IGZyb20KICAgIC8vIHRoZSBidWlsZGVyLiBNYXJrIHRoZSBpZiBpbnN0cnVjdGlvbiBhcyBzdWNoLgogICAgY29udHJvbEZsb3dPcGVyYXRvcnMuYWRkKHN0YXJ0SWYpOwoKICAgIC8vIEZpbmQgdGhlIG5leHQgbm9uLUhHb3RvIGluc3RydWN0aW9uIGZvbGxvd2luZyB0aGUgcGhpLgogICAgSEluc3RydWN0aW9uIG5leHRJbnN0cnVjdGlvbiA9IHBoaS5ibG9jay5maXJzdDsKICAgIHdoaWxlIChuZXh0SW5zdHJ1Y3Rpb24gaXMgSEdvdG8pIHsKICAgICAgbmV4dEluc3RydWN0aW9uID0gbmV4dEluc3RydWN0aW9uLmJsb2NrLnN1Y2Nlc3NvcnNbMF0uZmlyc3Q7CiAgICB9CgogICAgLy8gSWYgdGhlIG9wZXJhdGlvbiBpcyBvbmx5IHVzZWQgYnkgdGhlIGZpcnN0IGluc3RydWN0aW9uCiAgICAvLyBvZiBpdHMgYmxvY2sgYW5kIGlzIHNhZmUgdG8gYmUgZ2VuZXJhdGVkIGF0IHVzZSBzaXRlLCBtYXJrIGl0CiAgICAvLyBzby4KICAgIGlmIChwaGkudXNlZEJ5Lmxlbmd0aCA9PSAxICYmCiAgICAgICAgcGhpLnVzZWRCeVswXSA9PSBuZXh0SW5zdHJ1Y3Rpb24gJiYKICAgICAgICBpc1NhZmVUb0dlbmVyYXRlQXRVc2VTaXRlKHBoaS51c2VkQnlbMF0sIHBoaSkpIHsKICAgICAgbWFya0FzR2VuZXJhdGVBdFVzZVNpdGUocGhpKTsKICAgIH0KCiAgICBpZiAoaWRlbnRpY2FsKGVsc2VJbnB1dC5ibG9jaywgZWxzZUJsb2NrKSkgewogICAgICBhc3NlcnQoZWxzZUlucHV0LnVzZWRCeS5sZW5ndGggPT0gMSk7CiAgICAgIG1hcmtBc0dlbmVyYXRlQXRVc2VTaXRlKGVsc2VJbnB1dCk7CiAgICB9CgogICAgLy8gSWYgW3RoZW5JbnB1dF0gaXMgZGVmaW5lZCBpbiB0aGUgZmlyc3QgcHJlZGVjZXNzb3IsIHRoZW4gaXQgaXMgb25seSB1c2VkCiAgICAvLyBieSBbcGhpXSBhbmQgY2FuIGJlIGdlbmVyYXRlZCBhdCB1c2Ugc2l0ZS4KICAgIGlmIChpZGVudGljYWwodGhlbklucHV0LmJsb2NrLCBlbmQucHJlZGVjZXNzb3JzWzBdKSkgewogICAgICBhc3NlcnQodGhlbklucHV0LnVzZWRCeS5sZW5ndGggPT0gMSk7CiAgICAgIG1hcmtBc0dlbmVyYXRlQXRVc2VTaXRlKHRoZW5JbnB1dCk7CiAgICB9CiAgfQp9CgovLy8gSW5zZXJ0ICdjYWNoZXMnIGZvciB3aG9sZS1mdW5jdGlvbiByZWdpb24tY29uc3RhbnRzIHdoZW4gdGhlIGxvY2FsIG1pbmlmaWVkCi8vLyBuYW1lIHdvdWxkIGJlIHNob3J0ZXIgdGhhbiByZXBlYXRlZCByZWZlcmVuY2VzLiAgVGhlc2UgYXJlIGNhY2hlcyBmb3IgJ3RoaXMnCi8vLyBhbmQgY29uc3RhbnQgdmFsdWVzLgpjbGFzcyBTc2FTaGFyZVJlZ2lvbkNvbnN0YW50cyBleHRlbmRzIEhCYXNlVmlzaXRvciB3aXRoIENvZGVnZW5QaGFzZSB7CiAgZmluYWwgQ29tcGlsZXJPcHRpb25zIF9vcHRpb25zOwoKICBTc2FTaGFyZVJlZ2lvbkNvbnN0YW50cyh0aGlzLl9vcHRpb25zKTsKCiAgQG92ZXJyaWRlCiAgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpIHsKICAgIC8vIFdlIG5lZWQgdGhlIGFzeW5jIHJld3JpdGUgdG8gYmUgc21hcnRlciBhYm91dCBob2lzdGluZyByZWdpb24gY29uc3RhbnRzCiAgICAvLyBiZWZvcmUgaXQgaXMgd29ydGgtd2hpbGUuCiAgICBpZiAoZ3JhcGgubmVlZHNBc3luY1Jld3JpdGUpIHJldHVybjsKCiAgICAvLyAnSFRoaXMnIGFuZCBjb25zdGFudHMgYXJlIGluIHRoZSBlbnRyeSBibG9jay4gTm8gbmVlZCB0byB3YWxrIHRoZSByZXN0IG9mCiAgICAvLyB0aGUgZ3JhcGguCiAgICB2aXNpdEJhc2ljQmxvY2soZ3JhcGguZW50cnkpOwogIH0KCiAgQG92ZXJyaWRlCiAgdmlzaXRCYXNpY0Jsb2NrKEhCYXNpY0Jsb2NrIGJsb2NrKSB7CiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5maXJzdDsKICAgIHdoaWxlIChpbnN0cnVjdGlvbiAhPSBudWxsKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBuZXh0ID0gaW5zdHJ1Y3Rpb24ubmV4dDsKICAgICAgaW5zdHJ1Y3Rpb24uYWNjZXB0KHRoaXMpOwogICAgICBpbnN0cnVjdGlvbiA9IG5leHQ7CiAgICB9CiAgfQoKICAvLyBOb3QgYWxsIG9jY3VycmVuY2VzIHNob3VsZCBiZSByZXBsYWNlZCB3aXRoIGEgbG9jYWwgdmFyaWFibGUgY2FjaGUsIHNvIHdlCiAgLy8gZmlsdGVyIHRoZSB1c2VzLgogIGludCBfY291bnRDYWNoZWFibGVVc2VzKAogICAgICBISW5zdHJ1Y3Rpb24gbm9kZSwgYm9vbCBGdW5jdGlvbihISW5zdHJ1Y3Rpb24pIGNhY2hlYWJsZSkgewogICAgcmV0dXJuIG5vZGUudXNlZEJ5LndoZXJlKGNhY2hlYWJsZSkubGVuZ3RoOwogIH0KCiAgLy8gUmVwbGFjZSBjYWNoZWFibGUgdXNlcyB3aXRoIGEgcmVmZXJlbmNlIHRvIGEgSExhdGVWYWx1ZSBub2RlLgogIF9jYWNoZSgKICAgICAgSEluc3RydWN0aW9uIG5vZGUsIGJvb2wgRnVuY3Rpb24oSEluc3RydWN0aW9uKSBjYWNoZWFibGUsIFN0cmluZyBuYW1lKSB7CiAgICB2YXIgdXNlcnMgPSBub2RlLnVzZWRCeS50b0xpc3QoKTsKICAgIHZhciByZWZlcmVuY2UgPSBuZXcgSExhdGVWYWx1ZShub2RlKTsKICAgIC8vIFRPRE8oc3JhKTogVGhlIHNvdXJjZUluZm9ybWF0aW9uIHNob3VsZCByZWFsbHkgYmUgZnJvbSB0aGUgZnVuY3Rpb24KICAgIC8vIGVudHJ5LCBub3QgdGhlIHVzZSBvZiBgdGhpc2AuCiAgICByZWZlcmVuY2Uuc291cmNlSW5mb3JtYXRpb24gPSBub2RlLnNvdXJjZUluZm9ybWF0aW9uOwogICAgcmVmZXJlbmNlLnNvdXJjZUVsZW1lbnQgPSBfRXhwcmVzc2lvbk5hbWUobmFtZSk7CiAgICBub2RlLmJsb2NrLmFkZEFmdGVyKG5vZGUsIHJlZmVyZW5jZSk7CiAgICBmb3IgKEhJbnN0cnVjdGlvbiB1c2VyIGluIHVzZXJzKSB7CiAgICAgIGlmIChjYWNoZWFibGUodXNlcikpIHsKICAgICAgICB1c2VyLmNoYW5nZVVzZShub2RlLCByZWZlcmVuY2UpOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0VGhpcyhIVGhpcyBub2RlKSB7CiAgICBpbnQgc2l6ZSA9IDQ7CiAgICAvLyBDb21wYXJlIHRoZSBzaXplIG9mIHRoZSB1bmNoYW5nZWQgbWluaWZpZWQgd2l0aCB0aGUgc2l6ZSBvZiB0aGUgbWluaWZpZWQKICAgIC8vIGNvZGUgd2hlcmUgJ3RoaXMnIGlzIGFzc2lnbmVkIHRvIGEgdmFyaWFibGUuIFdlIGFzc3VtZSB0aGUgdmFyaWFibGUgaGFzCiAgICAvLyBtaW5pZmllZCBzaXplIDEuCiAgICAvLwogICAgLy8gVGhlIHNpemUgb3ZlcmhlYWQgb2YgaW50cm9kdWNpbmcgYSB2YXJpYWJsZSBpbiB0aGUgd29yc3QgY2FzZSBpbmNsdWRlcwogICAgLy8gJ3ZhciAnOgogICAgLy8KICAgIC8vICAgICAgICAgICAxMjM0ICAgLy8gc2l6ZQogICAgLy8gICAgIHZhciB4PXRoaXM7ICAvLyAobWluaWZpZWQgJzsnIGNhbiBiZSBlbmQtb2YtbGluZSkKICAgIC8vICAgICAxMjM0NTYgICAgNyAgLy8gYWRkaXRpb25hbCBvdmVyaGVhZAogICAgLy8KICAgIC8vIFRPRE8oc3JhKTogSWYgdGhlcmUgYXJlIG11bHRpcGxlIHZhbHVlcyB0aGF0IGNhbiBwb3RlbnRpYWxseSBiZSBjYWNoZWQsCiAgICAvLyB0aGV5IGNhbiBzaGFyZSB0aGUgJ3ZhciAnIGNvc3QsIGV2ZW4gaWYgbm9uZSBvZiB0aGVtIGFyZSBiZW5lZmljaWFsCiAgICAvLyBpbmRpdmlkdWFsbHkuCiAgICBpbnQgdXNlQ291bnQgPSBub2RlLnVzZWRCeS5sZW5ndGg7CiAgICBpZiAodXNlQ291bnQgKiBzaXplIDw9IDcgKyBzaXplICsgdXNlQ291bnQgKiAxKSByZXR1cm47CiAgICBfY2FjaGUobm9kZSwgKF8pID0+IHRydWUsICdfdGhpcycpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENvbnN0YW50KEhDb25zdGFudCBub2RlKSB7CiAgICBpZiAobm9kZS51c2VkQnkubGVuZ3RoIDw9IDEpIHJldHVybjsKICAgIENvbnN0YW50VmFsdWUgY29uc3RhbnQgPSBub2RlLmNvbnN0YW50OwoKICAgIGlmIChjb25zdGFudC5pc051bGwpIHsKICAgICAgX2hhbmRsZU51bGwobm9kZSk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoY29uc3RhbnQuaXNJbnQpIHsKICAgICAgX2hhbmRsZUludChub2RlLCBjb25zdGFudCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoY29uc3RhbnQuaXNTdHJpbmcpIHsKICAgICAgX2hhbmRsZVN0cmluZyhub2RlLCBjb25zdGFudCk7CiAgICAgIHJldHVybjsKICAgIH0KICB9CgogIHZvaWQgX2hhbmRsZU51bGwoSENvbnN0YW50IG5vZGUpIHsKICAgIGludCBzaXplID0gNDsKCiAgICBib29sIF9pc0NhY2hlYWJsZVVzZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgLy8gT25lLXNob3QgaW50ZXJjZXB0b3JzIGhhdmUgYG51bGxgIGFzIGEgZHVtbXkgaW50ZXJjZXB0b3IuCiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIT25lU2hvdEludGVyY2VwdG9yKSByZXR1cm4gZmFsc2U7CgogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSEludm9rZSkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQ3JlYXRlKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhQaGkpIHJldHVybiB0cnVlOwoKICAgICAgLy8gV2UgcmV0dXJuIGBudWxsYCBieSByZW1vdmluZyB0aGUgcmV0dXJuIGV4cHJlc3Npb24gb3Igc3RhdGVtZW50LgogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSFJldHVybikgcmV0dXJuIGZhbHNlOwoKICAgICAgLy8gSmF2YVNjcmlwdCBgeCA9PSBudWxsYCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIGB4ID09IF9udWxsYC4KICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhJZGVudGl0eSkgcmV0dXJuIGZhbHNlOwoKICAgICAgLy8gVE9ETyhzcmEpOiBEZXRlcm1pbmUgaWYgb3RoZXIgdXNlcyByZXN1bHQgaW4gZmFzdGVyIEphdmFTY3JpcHQgY29kZS4KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGludCB1c2VDb3VudCA9IF9jb3VudENhY2hlYWJsZVVzZXMobm9kZSwgX2lzQ2FjaGVhYmxlVXNlKTsKICAgIGlmICh1c2VDb3VudCAqIHNpemUgPD0gNyArIHNpemUgKyB1c2VDb3VudCAqIDEpIHJldHVybjsKICAgIF9jYWNoZShub2RlLCBfaXNDYWNoZWFibGVVc2UsICdfbnVsbCcpOwogICAgcmV0dXJuOwogIH0KCiAgdm9pZCBfaGFuZGxlSW50KEhDb25zdGFudCBub2RlLCBJbnRDb25zdGFudFZhbHVlIGludENvbnN0YW50KSB7CiAgICBCaWdJbnQgdmFsdWUgPSBpbnRDb25zdGFudC5pbnRWYWx1ZTsKICAgIFN0cmluZyB0ZXh0ID0gdmFsdWUudG9TdHJpbmcoKTsKICAgIGludCBzaXplID0gdGV4dC5sZW5ndGg7CiAgICBpZiAoc2l6ZSA8PSAzKSByZXR1cm47CgogICAgYm9vbCBfaXNDYWNoZWFibGVVc2UoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBISW52b2tlKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhDcmVhdGUpIHJldHVybiB0cnVlOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSFJldHVybikgcmV0dXJuIHRydWU7CiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIUGhpKSByZXR1cm4gdHJ1ZTsKCiAgICAgIC8vIEphdmFTY3JpcHQgYHggPT09IDVgIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gYHggPT09IF81YC4KICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhJZGVudGl0eSkgcmV0dXJuIGZhbHNlOwoKICAgICAgLy8gRm9yZWlnbiBjb2RlIHRlbXBsYXRlcyBtYXkgdXNlIGxpdGVyYWxzIGluIHdheXMgdGhhdCBhcmUgYmVuZWZpY2lhbC4KICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhGb3JlaWduQ29kZSkgcmV0dXJuIGZhbHNlOwoKICAgICAgLy8gVE9ETyhzcmEpOiBEZXRlcm1pbmUgaWYgb3RoZXIgdXNlcyByZXN1bHQgaW4gZmFzdGVyIEphdmFTY3JpcHQgY29kZS4KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIGludCB1c2VDb3VudCA9IF9jb3VudENhY2hlYWJsZVVzZXMobm9kZSwgX2lzQ2FjaGVhYmxlVXNlKTsKICAgIGlmICh1c2VDb3VudCAqIHNpemUgPD0gNyArIHNpemUgKyB1c2VDb3VudCAqIDEpIHJldHVybjsKICAgIF9jYWNoZShub2RlLCBfaXNDYWNoZWFibGVVc2UsICdfJHt0ZXh0LnJlcGxhY2VGaXJzdCgiLSIsICJfIil9Jyk7CiAgfQoKICB2b2lkIF9oYW5kbGVTdHJpbmcoSENvbnN0YW50IG5vZGUsIFN0cmluZ0NvbnN0YW50VmFsdWUgc3RyaW5nQ29uc3RhbnQpIHsKICAgIFN0cmluZyB2YWx1ZSA9IHN0cmluZ0NvbnN0YW50LnN0cmluZ1ZhbHVlOwogICAgaW50IGxlbmd0aCA9IHZhbHVlLmxlbmd0aDsKICAgIGludCBzaXplID0gbGVuZ3RoICsgMjsgLy8gSW5jbHVkZSBxdW90ZXMuCiAgICBpZiAoc2l6ZSA8PSAyKSByZXR1cm47CgogICAgYm9vbCBfaXNDYWNoZWFibGVVc2UoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIC8vIEZvcmVpZ24gY29kZSB0ZW1wbGF0ZXMgbWF5IHVzZSBsaXRlcmFscyBpbiB3YXlzIHRoYXQgYXJlIGJlbmVmaWNpYWwuCiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIRm9yZWlnbkNvZGUpIHJldHVybiBmYWxzZTsKCiAgICAgIC8vIENhY2hlIGxhcmdlciBzdHJpbmdzIGV2ZW4gaWYgdW5mb3J0dW5hdGUuCiAgICAgIGlmIChsZW5ndGggPj0gMTYpIHJldHVybiB0cnVlOwoKICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhJbnZva2UpIHJldHVybiB0cnVlOwogICAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSENyZWF0ZSkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIUmV0dXJuKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhQaGkpIHJldHVybiB0cnVlOwoKICAg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FSc8KAQBDCcpLAEbGQ4GARoiDgYBHSUOBgQBJRIBNUM8AS8vLAFKMAFFMgFOFAYBPzwsDAQBQikkHBsBNS8vLywBQTIBTjUBThQGAT88RgQBSy8fLhsBNU41ATMlAS8vLywBTjEBThQGAT88MwQCAU8TKgwVHgIBLXBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9jb2RlZ2VuX2hlbHBlcnMuZGFydDlzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2EvdmFyaWFibGVfYWxsb2NhdG9yLmRhcnTAAFyRLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29tbW9uLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvbmFtZXIuZGFydCcgc2hvdyBNb2R1bGFyTmFtZXI7CmltcG9ydCAnY29kZWdlbi5kYXJ0JyBzaG93IENvZGVnZW5QaGFzZTsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKCi8vLyBUaGUgW0xpdmVSYW5nZV0gY2xhc3MgY292ZXJzIGEgcmFuZ2Ugd2hlcmUgYW4gaW5zdHJ1Y3Rpb24gaXMgbGl2ZS4KY2xhc3MgTGl2ZVJhbmdlIHsKICBmaW5hbCBpbnQgc3RhcnQ7CiAgLy8gW2VuZF0gaXMgbm90IGZpbmFsIGJlY2F1c2UgaXQgY2FuIGJlIHVwZGF0ZWQgZHVlIHRvIGxvb3BzLgogIGludCBlbmQ7CiAgTGl2ZVJhbmdlKHRoaXMuc3RhcnQsIHRoaXMuZW5kKSB7CiAgICBhc3NlcnQoc3RhcnQgPD0gZW5kKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdbJHN0YXJ0ICRlbmRbJzsKfQoKLy8vIFRoZSBbTGl2ZUludGVydmFsXSBjbGFzcyBjb250YWlucyB0aGUgbGlzdCBvZiByYW5nZXMgd2hlcmUgYW4KLy8vIGluc3RydWN0aW9uIGlzIGxpdmUuCmNsYXNzIExpdmVJbnRlcnZhbCB7CiAgLy8vIFRoZSBpZCB3aGVyZSB0aGUgaW5zdHJ1Y3Rpb24gaXMgZGVmaW5lZC4KICBpbnQgc3RhcnQ7CiAgZmluYWwgTGlzdDxMaXZlUmFuZ2U+IHJhbmdlczsKICBMaXZlSW50ZXJ2YWwoKSA6IHJhbmdlcyA9IDxMaXZlUmFuZ2U+W107CgogIC8vIFdlIHdhbnQgW0hDaGVja10gaW5zdHJ1Y3Rpb25zIHRvIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUKICAvLyBpbnN0cnVjdGlvbiBpdCBjaGVja3MsIHNvIGJvdGggaW5zdHJ1Y3Rpb25zIHNob3VsZCBzaGFyZSB0aGUgc2FtZQogIC8vIGxpdmUgcmFuZ2VzLgogIExpdmVJbnRlcnZhbC5mb3JDaGVjayh0aGlzLnN0YXJ0LCBMaXZlSW50ZXJ2YWwgY2hlY2tlZEludGVydmFsKQogICAgICA6IHJhbmdlcyA9IGNoZWNrZWRJbnRlcnZhbC5yYW5nZXM7CgogIC8vLyBVcGRhdGUgYWxsIHJhbmdlcyB0aGF0IGFyZSBjb250YWluZWQgaW4gW2Zyb20sIHRvWyB0bwogIC8vLyBkaWUgYXQgW3RvXS4KICB2b2lkIGxvb3BVcGRhdGUoaW50IGZyb20sIGludCB0bykgewogICAgZm9yIChMaXZlUmFuZ2UgcmFuZ2UgaW4gcmFuZ2VzKSB7CiAgICAgIGlmIChmcm9tIDw9IHJhbmdlLnN0YXJ0ICYmIHJhbmdlLmVuZCA8IHRvKSB7CiAgICAgICAgcmFuZ2UuZW5kID0gdG87CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBBZGQgYSBuZXcgcmFuZ2UgdG8gdGhpcyBpbnRlcnZhbC4KICB2b2lkIGFkZChMaXZlUmFuZ2UgaW50ZXJ2YWwpIHsKICAgIHJhbmdlcy5hZGQoaW50ZXJ2YWwpOwogIH0KCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiBvbmUgb2YgdGhlIHJhbmdlcyBvZiB0aGlzIGludGVydmFsIGRpZXMgYXQgW2F0XS4KICBib29sIGRpZXNBdChpbnQgYXQpIHsKICAgIGZvciAoTGl2ZVJhbmdlIHJhbmdlIGluIHJhbmdlcykgewogICAgICBpZiAocmFuZ2UuZW5kID09IGF0KSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIExpc3Q8U3RyaW5nPiByZXMgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICBmb3IgKGZpbmFsIGludGVydmFsIGluIHJhbmdlcykgcmVzLmFkZChpbnRlcnZhbC50b1N0cmluZygpKTsKICAgIHJldHVybiAnKCR7cmVzLmpvaW4oIiwgIil9KSc7CiAgfQp9CgovLy8gVGhlIFtMaXZlRW52aXJvbm1lbnRdIGNsYXNzIGNvbnRhaW5zIHRoZSBsaXZlSW4gc2V0IG9mIGEgYmFzaWMKLy8vIGJsb2NrLiBBIGxpdmVJbiBzZXQgb2YgYSBibG9jayBjb250YWlucyB0aGUgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlCi8vLyBsaXZlIHdoZW4gZW50ZXJpbmcgdGhhdCBibG9jay4KY2xhc3MgTGl2ZUVudmlyb25tZW50IHsKICAvLy8gVGhlIGluc3RydWN0aW9uIGlkIHdoZXJlIHRoZSBiYXNpYyBibG9jayBzdGFydHMuIFNlZQogIC8vLyBbU3NhTGl2ZUludGVydmFsQnVpbGRlci5pbnN0cnVjdGlvbklkXS4KICBpbnQgc3RhcnRJZDsKCiAgLy8vIFRoZSBpbnN0cnVjdGlvbiBpZCB3aGVyZSB0aGUgYmFzaWMgYmxvY2sgZW5kcy4KICBmaW5hbCBpbnQgZW5kSWQ7CgogIC8vLyBMb29wIG1hcmtlcnMgdGhhdCB3aWxsIGJlIHVwZGF0ZWQgb25jZSB0aGUgbG9vcCBoZWFkZXIgaXMKICAvLy8gdmlzaXRlZC4gVGhlIGxpdmVJbiBzZXQgb2YgdGhlIGxvb3AgaGVhZGVyIHdpbGwgYmUgbWVyZ2VkIGludG8gdGhpcwogIC8vLyBlbnZpcm9ubWVudC4gW2xvb3BNYXJrZXJzXSBpcyBhIG1hcHBpbmcgZnJvbSBibG9jayBoZWFkZXIgdG8gdGhlCiAgLy8vIGVuZCBpbnN0cnVjdGlvbiBpZCBvZiB0aGUgbG9vcCBleGl0IGJsb2NrLgogIGZpbmFsIE1hcDxIQmFzaWNCbG9jaywgaW50PiBsb29wTWFya2VyczsKCiAgLy8vIFRoZSBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgbGl2ZSBpbiB0aGlzIGJhc2ljIGJsb2NrLiBUaGUgdmFsdWVzIG9mCiAgLy8vIHRoZSBtYXAgY29udGFpbiB0aGUgaW5zdHJ1Y3Rpb24gaWRzIHdoZXJlIHRoZSBpbnN0cnVjdGlvbnMgZGllLgogIC8vLyBJdCB3aWxsIGJlIHVzZWQgd2hlbiBhZGRpbmcgYSByYW5nZSB0byB0aGUgbGl2ZSBpbnRlcnZhbCBvZiBhbgogIC8vLyBpbnN0cnVjdGlvbi4KICBmaW5hbCBNYXA8SEluc3RydWN0aW9uLCBpbnQ+IGxpdmVJbnN0cnVjdGlvbnM7CgogIC8vLyBNYXAgY29udGFpbmluZyB0aGUgbGl2ZSBpbnRlcnZhbHMgb2YgaW5zdHJ1Y3Rpb25zLgogIGZpbmFsIE1hcDxISW5zdHJ1Y3Rpb24sIExpdmVJbnRlcnZhbD4gbGl2ZUludGVydmFsczsKCiAgTGl2ZUVudmlyb25tZW50KHRoaXMubGl2ZUludGVydmFscywgdGhpcy5lbmRJZCkKICAgICAgOiBsaXZlSW5zdHJ1Y3Rpb25zID0gbmV3IE1hcDxISW5zdHJ1Y3Rpb24sIGludD4oKSwKICAgICAgICBsb29wTWFya2VycyA9IG5ldyBNYXA8SEJhc2ljQmxvY2ssIGludD4oKTsKCiAgLy8vIFJlbW92ZSBhbiBpbnN0cnVjdGlvbiBmcm9tIHRoZSBsaXZlSW4gc2V0LiBUaGlzIG1ldGhvZCBhbHNvCiAgLy8vIHVwZGF0ZXMgdGhlIGxpdmUgaW50ZXJ2YWwgb2YgW2luc3RydWN0aW9uXSB0byBjb250YWluIHRoZSBuZXcKICAvLy8gcmFuZ2U6IFtpZCwgLyBpZCBjb250YWluZWQgaW4gW2xpdmVJbnN0cnVjdGlvbnNdIC9dLgogIHZvaWQgcmVtb3ZlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgaW50IGlkKSB7CiAgICBMaXZlSW50ZXJ2YWwgaW50ZXJ2YWwgPQogICAgICAgIGxpdmVJbnRlcnZhbHMucHV0SWZBYnNlbnQoaW5zdHJ1Y3Rpb24sICgpID0+IG5ldyBMaXZlSW50ZXJ2YWwoKSk7CiAgICBpbnQgbGFzdElkID0gbGl2ZUluc3RydWN0aW9uc1tpbnN0cnVjdGlvbl07CiAgICAvLyBJZiBbbGFzdElkXSBpcyBudWxsLCB0aGVuIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgbm90IGJlaW5nIHVzZWQuCiAgICBpbnRlcnZhbC5hZGQobmV3IExpdmVSYW5nZShpZCwgbGFzdElkID09IG51bGwgPyBpZCA6IGxhc3RJZCkpOwogICAgLy8gVGhlIGluc3RydWN0aW9uIGlzIGRlZmluZWQgYXQgW2lkXS4KICAgIGludGVydmFsLnN0YXJ0ID0gaWQ7CiAgICBsaXZlSW5zdHJ1Y3Rpb25zLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgfQoKICAvLy8gQWRkIFtpbnN0cnVjdGlvbl0gdG8gdGhlIGxpdmVJbiBzZXQuIElmIHRoZSBpbnN0cnVjdGlvbiBpcyBub3QKICAvLy8gYWxyZWFkeSBpbiB0aGUgc2V0LCB3ZSBzYXZlIHRoZSBpZCB3aGVyZSBpdCBkaWVzLgogIHZvaWQgYWRkKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgaW50IHVzZXJJZCkgewogICAgLy8gTm90ZSB0aGF0IHdlIGFyZSB2aXNpdGluZyB0aGUgZ3JhcGggaW4gcG9zdC1kb21pbmF0b3Igb3JkZXIsIHNvCiAgICAvLyB0aGUgZmlyc3QgdGltZSB3ZSBzZWUgYSB2YXJpYWJsZSBpcyB3aGVuIGl0IGRpZXMuCiAgICBsaXZlSW5zdHJ1Y3Rpb25zLnB1dElmQWJzZW50KGluc3RydWN0aW9uLCAoKSA9PiB1c2VySWQpOwogIH0KCiAgLy8vIE1lcmdlIHRoaXMgZW52aXJvbm1lbnQgd2l0aCBbb3RoZXJdLiBVcGRhdGUgdGhlIGVuZCBpZCBvZgogIC8vLyBpbnN0cnVjdGlvbnMgaW4gY2FzZSB0aGV5IGFyZSBkaWZmZXJlbnQgYmV0d2VlbiB0aGlzIGFuZCBbb3RoZXJdLgogIHZvaWQgbWVyZ2VXaXRoKExpdmVFbnZpcm9ubWVudCBvdGhlcikgewogICAgb3RoZXIubGl2ZUluc3RydWN0aW9ucy5mb3JFYWNoKChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIGludCBleGlzdGluZ0lkKSB7CiAgICAgIC8vIElmIGJvdGggZW52aXJvbm1lbnRzIGhhdmUgdGhlIHNhbWUgaW5zdHJ1Y3Rpb24gaWQgb2Ygd2hlcmUKICAgICAgLy8gW2luc3RydWN0aW9uXSBkaWVzLCB0aGVyZSBpcyBubyBuZWVkIHRvIHVwZGF0ZSB0aGUgbGl2ZQogICAgICAvLyBpbnRlcnZhbCBvZiBbaW5zdHJ1Y3Rpb25dLiBGb3IgZXhhbXBsZSB0aGUgaWYgYmxvY2sgYW5kIHRoZQogICAgICAvLyBlbHNlIGJsb2NrIGhhdmUgdGhlIHNhbWUgZW5kIGlkIGZvciBhbiBpbnN0cnVjdGlvbiB0aGF0IGlzCiAgICAgIC8vIGJlaW5nIHVzZWQgaW4gdGhlIGpvaW4gYmxvY2sgYW5kIGRlZmluZWQgYmVmb3JlIHRoZSBpZi9lbHNlLgogICAgICBpZiAoZXhpc3RpbmdJZCA9PSBlbmRJZCkgcmV0dXJuOwogICAgICBMaXZlSW50ZXJ2YWwgcmFuZ2UgPQogICAgICAgICAgbGl2ZUludGVydmFscy5wdXRJZkFic2VudChpbnN0cnVjdGlvbiwgKCkgPT4gbmV3IExpdmVJbnRlcnZhbCgpKTsKICAgICAgcmFuZ2UuYWRkKG5ldyBMaXZlUmFuZ2Uob3RoZXIuc3RhcnRJZCwgZXhpc3RpbmdJZCkpOwogICAgICBsaXZlSW5zdHJ1Y3Rpb25zW2luc3RydWN0aW9uXSA9IGVuZElkOwogICAgfSk7CiAgICBvdGhlci5sb29wTWFya2Vycy5mb3JFYWNoKChrLCB2KSB7CiAgICAgIGxvb3BNYXJrZXJzW2tdID0gdjsKICAgIH0pOwogIH0KCiAgdm9pZCBhZGRMb29wTWFya2VyKEhCYXNpY0Jsb2NrIGhlYWRlciwgaW50IGlkKSB7CiAgICBhc3NlcnQoIWxvb3BNYXJrZXJzLmNvbnRhaW5zS2V5KGhlYWRlcikpOwogICAgbG9vcE1hcmtlcnNbaGVhZGVyXSA9IGlkOwogIH0KCiAgdm9pZCByZW1vdmVMb29wTWFya2VyKEhCYXNpY0Jsb2NrIGhlYWRlcikgewogICAgYXNzZXJ0KGxvb3BNYXJrZXJzLmNvbnRhaW5zS2V5KGhlYWRlcikpOwogICAgbG9vcE1hcmtlcnMucmVtb3ZlKGhlYWRlcik7CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+IGxpdmVJbnN0cnVjdGlvbnMuaXNFbXB0eSAmJiBsb29wTWFya2Vycy5pc0VtcHR5OwogIGJvb2wgY29udGFpbnMoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSA9PgogICAgICBsaXZlSW5zdHJ1Y3Rpb25zLmNvbnRhaW5zS2V5KGluc3RydWN0aW9uKTsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBsaXZlSW5zdHJ1Y3Rpb25zLnRvU3RyaW5nKCk7Cn0KCi8vLyBCdWlsZHMgdGhlIGxpdmUgaW50ZXJ2YWxzIG9mIGVhY2ggaW5zdHJ1Y3Rpb24uIFRoZSBhbGdvcml0aG0gdmlzaXRzCi8vLyB0aGUgZ3JhcGggcG9zdC1kb21pbmF0b3IgdHJlZSB0byBmaW5kIHRoZSBsYXN0IHVzZXMgb2YgYW4KLy8vIGluc3RydWN0aW9uLCBhbmQgY29tcHV0ZXMgdGhlIGxpdmVJbnMgb2YgZWFjaCBiYXNpYyBibG9jay4KY2xhc3MgU3NhTGl2ZUludGVydmFsQnVpbGRlciBleHRlbmRzIEhCYXNlVmlzaXRvciB3aXRoIENvZGVnZW5QaGFzZSB7CiAgZmluYWwgU2V0PEhJbnN0cnVjdGlvbj4gZ2VuZXJhdGVBdFVzZVNpdGU7CiAgZmluYWwgU2V0PEhJbnN0cnVjdGlvbj4gY29udHJvbEZsb3dPcGVyYXRvcnM7CgogIC8vLyBBIGNvdW50ZXIgdG8gYXNzaWduIHN0YXJ0IGFuZCBlbmQgaWRzIHRvIGxpdmUgcmFuZ2VzLiBUaGUgaW5pdGlhbAogIC8vLyB2YWx1ZSBpcyBub3QgcmVsZXZhbnQuIE5vdGUgdGhhdCBpbnN0cnVjdGlvbklkIGdvZXMgZG93bndhcmQgdG8gZWFzZQogIC8vLyByZWFzb25pbmcgYWJvdXQgbGl2ZSByYW5nZXMgKHRoZSBmaXJzdCBpbnN0cnVjdGlvbiBvZiBhIGdyYXBoIGhhcwogIC8vLyB0aGUgbG93ZXN0IGlkKS4KICBpbnQgaW5zdHJ1Y3Rpb25JZCA9IDA7CgogIC8vLyBUaGUgbGl2ZUlucyBvZiBiYXNpYyBibG9ja3MuCiAgZmluYWwgTWFwPEhCYXNpY0Jsb2NrLCBMaXZlRW52aXJvbm1lbnQ+IGxpdmVJbnN0cnVjdGlvbnM7CgogIC8vLyBUaGUgbGl2ZSBpbnRlcnZhbHMgb2YgaW5zdHJ1Y3Rpb25zLgogIGZpbmFsIE1hcDxISW5zdHJ1Y3Rpb24sIExpdmVJbnRlcnZhbD4gbGl2ZUludGVydmFsczsKCiAgU3NhTGl2ZUludGVydmFsQnVpbGRlcih0aGlzLmdlbmVyYXRlQXRVc2VTaXRlLCB0aGlzLmNvbnRyb2xGbG93T3BlcmF0b3JzKQogICAgICA6IGxpdmVJbnN0cnVjdGlvbnMgPSBuZXcgTWFwPEhCYXNpY0Jsb2NrLCBMaXZlRW52aXJvbm1lbnQ+KCksCiAgICAgICAgbGl2ZUludGVydmFscyA9IG5ldyBNYXA8SEluc3RydWN0aW9uLCBMaXZlSW50ZXJ2YWw+KCk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpIHsKICAgIHZpc2l0UG9zdERvbWluYXRvclRyZWUoZ3JhcGgpOwogICAgaWYgKCFsaXZlSW5zdHJ1Y3Rpb25zW2dyYXBoLmVudHJ5XS5pc0VtcHR5KSB7CiAgICAgIGZhaWxlZEF0KENVUlJFTlRfRUxFTUVOVF9TUEFOTkFCTEUsICdMaXZlSW50ZXJ2YWxCdWlsZGVyLicpOwogICAgfQogIH0KCiAgdm9pZCBtYXJrSW5wdXRzQXNMaXZlSW5FbnZpcm9ubWVudCgKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBMaXZlRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIGZvciAoaW50IGkgPSAwLCBsZW4gPSBpbnN0cnVjdGlvbi5pbnB1dHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKICAgICAgbWFya0FzTGl2ZUluRW52aXJvbm1lbnQoaW5zdHJ1Y3Rpb24uaW5wdXRzW2ldLCBlbnZpcm9ubWVudCk7CiAgICB9CiAgfQoKICAvLyBSZXR1cm5zIHRoZSBub24tSENoZWNrIGluc3RydWN0aW9uLCBvciB0aGUgbGFzdCBbSENoZWNrXSBpbiB0aGUKICAvLyBjaGVjayBjaGFpbiB0aGF0IGlzIG5vdCBnZW5lcmF0ZSBhdCB1c2Ugc2l0ZS4KICAvLwogIC8vIEZvciBleGFtcGxlOgogIC8vCiAgLy8gICAgIHQxID0gR2VuZXJhdGVkQXRVc2VTaXRlIGluc3RydWN0aW9uCiAgLy8gICAgIHQyID0gY2hlY2sodDEpCiAgLy8gICAgIHQzID0gY2hlY2sodDIpCiAgLy8gICAgIHQ0ID0gdXNlKHQzKQogIC8vICAgICB0NSA9IHVzZSh0MykKICAvLyAgICAgdDYgPSB1c2UodDIpCiAgLy8KICAvLyBUaGUgdDEgaXMgZ2VuZXJhdGUtYXQtdXNlIHNpdGUsIGFuZCB0aGUgbGl2ZS1yYW5nZSBtdXN0IHRodXMgYmUgb24gdDIgYW5kCiAgLy8gbm90IG9uIHRoZSBjaGVja2VkIGluc3RydWN0aW9uIHQxLgogIC8vIFdoZW4gbG9va2luZyBmb3IgdGhlIGNoZWNrZWRJbnN0cnVjdGlvbk9yTm9uR2VuZXJhdGVBdFVzZVNpdGUgb2YgdDMgd2UgbXVzdAogIC8vIHJldHVybiB0Mi4KICBISW5zdHJ1Y3Rpb24gY2hlY2tlZEluc3RydWN0aW9uT3JOb25HZW5lcmF0ZUF0VXNlU2l0ZShIQ2hlY2sgY2hlY2spIHsKICAgIGR5bmFtaWMgY2hlY2tlZCA9IGNoZWNrLmNoZWNrZWRJbnB1dDsKICAgIHdoaWxlIChjaGVja2VkIGlzIEhDaGVjaykgewogICAgICBISW5zdHJ1Y3Rpb24gbmV4dCA9IGNoZWNrZWQuY2hlY2tlZElucHV0OwogICAgICBpZiAoZ2VuZXJhdGVBdFVzZVNpdGUuY29udGFpbnMobmV4dCkpIGJyZWFrOwogICAgICBjaGVja2VkID0gbmV4dDsKICAgIH0KICAgIHJldHVybiBjaGVja2VkOwogIH0KCiAgdm9pZCBtYXJrQXNMaXZlSW5FbnZpcm9ubWVudCgKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBMaXZlRW52aXJvbm1lbnQgZW52aXJvbm1lbnQpIHsKICAgIGlmIChnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyhpbnN0cnVjdGlvbikpIHsKICAgICAgbWFya0lucHV0c0FzTGl2ZUluRW52aXJvbm1lbnQoaW5zdHJ1Y3Rpb24sIGVudmlyb25tZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGVudmlyb25tZW50LmFkZChpbnN0cnVjdGlvbiwgaW5zdHJ1Y3Rpb25JZCk7CiAgICAgIC8vIFNwZWNpYWwgY2FzZSB0aGUgSENoZWNrIGluc3RydWN0aW9uIHRvIG1hcmsgdGhlIGFjdHVhbAogICAgICAvLyBjaGVja2VkIGluc3RydWN0aW9uIGxpdmUuIFRoZSBjaGVja2VkIGluc3RydWN0aW9uIGFuZCB0aGUKICAgICAgLy8gW0hDaGVja10gd2lsbCBzaGFyZSB0aGUgc2FtZSBsaXZlIHJhbmdlcy4KICAgICAgaWYgKGluc3RydWN0aW9uIGlzIEhDaGVjaykgewogICAgICAgIEhDaGVjayBjaGVjayA9IGluc3RydWN0aW9uOwogICAgICAgIEhJbnN0cnVjdGlvbiBjaGVja2VkID0gY2hlY2tlZEluc3RydWN0aW9uT3JOb25HZW5lcmF0ZUF0VXNlU2l0ZShjaGVjayk7CiAgICAgICAgaWYgKCFnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyhjaGVja2VkKSkgewogICAgICAgICAgZW52aXJvbm1lbnQuYWRkKGNoZWNrZWQsIGluc3RydWN0aW9uSWQpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgdm9pZCByZW1vdmVGcm9tRW52aXJvbm1lbnQoCiAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgTGl2ZUVudmlyb25tZW50IGVudmlyb25tZW50KSB7CiAgICBlbnZpcm9ubWVudC5yZW1vdmUoaW5zdHJ1Y3Rpb24sIGluc3RydWN0aW9uSWQpOwogICAgLy8gU3BlY2lhbCBjYXNlIHRoZSBIQ2hlY2sgaW5zdHJ1Y3Rpb24gdG8gaGF2ZSB0aGUgc2FtZSBsaXZlCiAgICAvLyBpbnRlcnZhbCBhcyB0aGUgaW5zdHJ1Y3Rpb24gaXQgaXMgY2hlY2tpbmcuCiAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSENoZWNrKSB7CiAgICAgIEhDaGVjayBjaGVjayA9IGluc3RydWN0aW9uOwogICAgICBISW5zdHJ1Y3Rpb24gY2hlY2tlZCA9IGNoZWNrZWRJbnN0cnVjdGlvbk9yTm9uR2VuZXJhdGVBdFVzZVNpdGUoY2hlY2spOwogICAgICBpZiAoIWdlbmVyYXRlQXRVc2VTaXRlLmNvbnRhaW5zKGNoZWNrZWQpKSB7CiAgICAgICAgbGl2ZUludGVydmFscy5wdXRJZkFic2VudChjaGVja2VkLCAoKSA9PiBuZXcgTGl2ZUludGVydmFsKCkpOwogICAgICAgIC8vIFVuY29uZGl0aW9uYWxseSBmb3JjZSB0aGUgbGl2ZSByYW5nZXMgb2YgdGhlIEhDaGVjayB0bwogICAgICAgIC8vIGJlIHRoZSBsaXZlIHJhbmdlcyBvZiB0aGUgaW5zdHJ1Y3Rpb24gaXQgaXMgY2hlY2tpbmcuCiAgICAgICAgbGl2ZUludGVydmFsc1tpbnN0cnVjdGlvbl0gPQogICAgICAgICAgICBuZXcgTGl2ZUludGVydmFsLmZvckNoZWNrKGluc3RydWN0aW9uSWQsIGxpdmVJbnRlcnZhbHNbY2hlY2tlZF0pOwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgTGl2ZUVudmlyb25tZW50IGVudmlyb25tZW50ID0KICAgICAgICBuZXcgTGl2ZUVudmlyb25tZW50KGxpdmVJbnRlcnZhbHMsIGluc3RydWN0aW9uSWQpOwoKICAgIC8vIElmIHRoZSBjb250cm9sIGZsb3cgaW5zdHJ1Y3Rpb24gaW4gdGhpcyBibG9jayB3aWxsIGFjdHVhbGx5IGJlCiAgICAvLyBpbmxpbmVkIGluIHRoZSBjb2RlZ2VuIGluIHRoZSBqb2luIGJsb2NrLCB3ZSBuZWVkIHRvIG1ha2UKICAgIC8vIHdoYXRldmVyIGlzIHVzZWQgYnkgdGhhdCBjb250cm9sIGZsb3cgaW5zdHJ1Y3Rpb24gYXMgbGl2ZSBpbgogICAgLy8gdGhlIGpvaW4gYmxvY2suCiAgICBpZiAoY29udHJvbEZsb3dPcGVyYXRvcnMuY29udGFpbnMoYmxvY2subGFzdCkpIHsKICAgICAgSElmIGlmSW5zdHJ1Y3Rpb24gPSBibG9jay5sYXN0OwogICAgICBIQmFzaWNCbG9jayBqb2luQmxvY2sgPSBpZkluc3RydWN0aW9uLmpvaW5CbG9jazsKICAgICAgaWYgKGdlbmVyYXRlQXRVc2VTaXRlLmNvbnRhaW5zKGpvaW5CbG9jay5waGlzLmZpcnN0KSkgewogICAgICAgIG1hcmtJbnB1dHNBc0xpdmVJbkVudmlyb25tZW50KAogICAgICAgICAgICBpZkluc3RydWN0aW9uLCBsaXZlSW5zdHJ1Y3Rpb25zW2pvaW5CbG9ja10pOwogICAgICB9CiAgICB9CgogICAgLy8gQWRkIHRvIHRoZSBlbnZpcm9ubWVudCB0aGUgbGl2ZUluIG9mIGl0cyBzdWNjZXNzb3IsIGFzIHdlbGwgYXMKICAgIC8vIHRoZSBpbnB1dHMgb2YgdGhlIHBoaXMgb2YgdGhlIHN1Y2Nlc3NvciB0aGF0IGZsb3cgZnJvbSB0aGlzIGJsb2NrLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBibG9jay5zdWNjZXNzb3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgIEhCYXNpY0Jsb2NrIHN1Y2Nlc3NvciA9IGJsb2NrLnN1Y2Nlc3NvcnNbaV07CiAgICAgIExpdmVFbnZpcm9ubWVudCBzdWNjZXNzb3JFbnYgPSBsaXZlSW5zdHJ1Y3Rpb25zW3N1Y2Nlc3Nvcl07CiAgICAgIGlmIChzdWNjZXNzb3JFbnYgIT0gbnVsbCkgewogICAgICAgIGVudmlyb25tZW50Lm1lcmdlV2l0aChzdWNjZXNzb3JFbnYpOwogICAgICB9IGVsc2UgewogICAgICAgIGVudmlyb25tZW50LmFkZExvb3BNYXJrZXIoc3VjY2Vzc29yLCBpbnN0cnVjdGlvbklkKTsKICAgICAgfQoKICAgICAgaW50IGluZGV4ID0gc3VjY2Vzc29yLnByZWRlY2Vzc29ycy5pbmRleE9mKGJsb2NrKTsKICAgICAgZm9yIChIUGhpIHBoaSA9IHN1Y2Nlc3Nvci5waGlzLmZpcnN0OyBwaGkgIT0gbnVsbDsgcGhpID0gcGhpLm5leHQpIHsKICAgICAgICBtYXJrQXNMaXZlSW5FbnZpcm9ubWVudChwaGkuaW5wdXRzW2luZGV4XSwgZW52aXJvbm1lbnQpOwogICAgICB9CiAgICB9CgogICAgLy8gSXRlcmF0ZSBvdmVyIGFsbCBpbnN0cnVjdGlvbnMgdG8gcmVtb3ZlIGFuIGluc3RydWN0aW9uIGZyb20gdGhlCiAgICAvLyBlbnZpcm9ubWVudCBhbmQgYWRkIGl0cyBpbnB1dHMuCiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBibG9jay5sYXN0OwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgaWYgKCFnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyhpbnN0cnVjdGlvbikpIHsKICAgICAgICByZW1vdmVGcm9tRW52aXJvbm1lbnQoaW5zdHJ1Y3Rpb24sIGVudmlyb25tZW50KTsKICAgICAgICBtYXJrSW5wdXRzQXNMaXZlSW5FbnZpcm9ubWVudChpbnN0cnVjdGlvbiwgZW52aXJvbm1lbnQpOwogICAgICB9CiAgICAgIGluc3RydWN0aW9uSWQtLTsKICAgICAgaW5zdHJ1Y3Rpb24gPSBpbnN0cnVjdGlvbi5wcmV2aW91czsKICAgIH0KCiAgICAvLyBXZSBqdXN0IHJlbW92ZSB0aGUgcGhpcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gVGhlIGlucHV0cyBvZiB0aGUKICAgIC8vIHBoaXMgd2lsbCBiZSBwdXQgaW4gdGhlIGVudmlyb25tZW50IG9mIHRoZSBwcmVkZWNlc3NvcnMuCiAgICBmb3IgKEhQaGkgcGhpID0gYmxvY2sucGhpcy5maXJzdDsgcGhpICE9IG51bGw7IHBoaSA9IHBoaS5uZXh0KSB7CiAgICAgIGlmICghZ2VuZXJhdGVBdFVzZVNpdGUuY29udGFpbnMocGhpKSkgewogICAgICAgIGVudmlyb25tZW50LnJlbW92ZShwaGksIGluc3RydWN0aW9uSWQpOwogICAgICB9CiAgICB9CgogICAgLy8gU2F2ZSB0aGUgbGl2ZUluc3RydWN0aW9ucyBvZiB0aGF0IGJsb2NrLgogICAgZW52aXJvbm1lbnQuc3RhcnRJZCA9IGluc3RydWN0aW9uSWQgKyAxOwogICAgbGl2ZUluc3RydWN0aW9uc1tibG9ja10gPSBlbnZpcm9ubWVudDsKCiAgICAvLyBJZiB0aGUgYmxvY2sgaXMgYSBsb29wIGhlYWRlciwgd2UgY2FuIHJlbW92ZSB0aGUgbG9vcCBtYXJrZXIsCiAgICAvLyBiZWNhdXNlIGl0IHdpbGwganVzdCByZWNvbXB1dGUgdGhlIGxvb3AgcGhpcy4KICAgIC8vIFdlIGFsc28gY2hlY2sgaWYgdGhpcyBsb29wIGhlYWRlciBoYXMgYW55IGJhY2sgZWRnZXMuIElmIG5vdCwKICAgIC8vIHdlIGtub3cgdGhlcmUgaXMgbm8gbG9vcCBtYXJrZXIgZm9yIGl0LgogICAgaWYgKGJsb2NrLmlzTG9vcEhlYWRlcigpICYmIGJsb2NrLnByZWRlY2Vzc29ycy5sZW5ndGggPiAxKSB7CiAgICAgIHVwZGF0ZUxvb3BNYXJrZXIoYmxvY2spOwogICAgfQogIH0KCiAgdm9pZCB1cGRhdGVMb29wTWFya2VyKEhCYXNpY0Jsb2NrIGhlYWRlcikgewogICAgTGl2ZUVudmlyb25tZW50IGVudiA9IGxpdmVJbnN0cnVjdGlvbnNbaGVhZGVyXTsKICAgIGludCBsYXN0SWQgPSBlbnYubG9vcE1hcmtlcnNbaGVhZGVyXTsKICAgIC8vIFVwZGF0ZSBhbGwgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIGxpdmVJbnMgaW4gW2hlYWRlcl0gdG8gaGF2ZSBhCiAgICAvLyByYW5nZSB0aGF0IGNvdmVycyB0aGUgbG9vcC4KICAgIGVudi5saXZlSW5zdHJ1Y3Rpb25zLmZvckVhY2goKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgaW50IGlkKSB7CiAgICAgIExpdmVJbnRlcnZhbCByYW5nZSA9CiAgICAgICAgICBlbnYubGl2ZUludGVydmFscy5wdXRJZkFic2VudChpbnN0cnVjdGlvbiwgKCkgPT4gbmV3IExpdmVJbnRlcnZhbCgpKTsKICAgICAgcmFuZ2UubG9vcFVwZGF0ZShlbnYuc3RhcnRJZCwgbGFzdElkKTsKICAgICAgZW52LmxpdmVJbnN0cnVjdGlvbnNbaW5zdHJ1Y3Rpb25dID0gbGFzdElkOwogICAgfSk7CgogICAgZW52LnJlbW92ZUxvb3BNYXJrZXIoaGVhZGVyKTsKCiAgICAvLyBVcGRhdGUgYWxsIGxpdmVJbnMgc2V0IHRvIGNvbnRhaW4gdGhlIGxpdmVJbnMgb2YgW2hlYWRlcl0uCiAgICBsaXZlSW5zdHJ1Y3Rpb25zLmZvckVhY2goKEhCYXNpY0Jsb2NrIGJsb2NrLCBMaXZlRW52aXJvbm1lbnQgb3RoZXIpIHsKICAgICAgaWYgKG90aGVyLmxvb3BNYXJrZXJzLmNvbnRhaW5zS2V5KGhlYWRlcikpIHsKICAgICAgICBlbnYubGl2ZUluc3RydWN0aW9ucy5mb3JFYWNoKChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIGludCBpZCkgewogICAgICAgICAgb3RoZXIubGl2ZUluc3RydWN0aW9uc1tpbnN0cnVjdGlvbl0gPSBpZDsKICAgICAgICB9KTsKICAgICAgICBvdGhlci5yZW1vdmVMb29wTWFya2VyKGhlYWRlcik7CiAgICAgICAgZW52Lmxvb3BNYXJrZXJzLmZvckVhY2goKGssIHYpIHsKICAgICAgICAgIG90aGVyLmxvb3BNYXJrZXJzW2tdID0gdjsKICAgICAgICB9KTsKICAgICAgfQogICAgfSk7CiAgfQp9CgovLy8gUmVwcmVzZW50cyBhIGNvcHkgZnJvbSBvbmUgaW5zdHJ1Y3Rpb24gdG8gYW5vdGhlci4gVGhlIGNvZGVnZW4KLy8vIGFsc28gdXNlcyB0aGlzIGNsYXNzIHRvIHJlcHJlc2VudCBhIGNvcHkgZnJvbSBvbmUgdmFyaWFibGUgdG8KLy8vIGFub3RoZXIuCmNsYXNzIENvcHk8VD4gewogIGZpbmFsIFQgc291cmNlOwogIGZpbmFsIFQgZGVzdGluYXRpb247CgogIENvcHkodGhpcy5zb3VyY2UsIHRoaXMuZGVzdGluYXRpb24pOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJGRlc3RpbmF0aW9uIDwtICRzb3VyY2UnOwp9CgovLy8gQSBjb3B5IGhhbmRsZXIgY29udGFpbnMgdGhlIGNvcGllcyB0aGF0IGEgYmFzaWMgYmxvY2sgbmVlZHMgdG8gZG8KLy8vIGFmdGVyIGV4ZWN1dGluZyBhbGwgaXRzIGluc3RydWN0aW9ucy4KY2xhc3MgQ29weUhhbmRsZXIgewogIC8vLyBUaGUgY29waWVzIGZyb20gYW4gaW5zdHJ1Y3Rpb24gdG8gYSBwaGkgb2YgdGhlIHN1Y2Nlc3Nvci4KICBmaW5hbCBMaXN0PENvcHk8SEluc3RydWN0aW9uPj4gY29waWVzOwoKICAvLy8gQXNzaWdubWVudHMgZnJvbSBhbiBpbnN0cnVjdGlvbiB0aGF0IGRvZXMgbm90IG5lZWQgYSBuYW1lIChlLmcuIGEKICAvLy8gY29uc3RhbnQpIHRvIHRoZSBwaGkgb2YgYSBzdWNjZXNzb3IuCiAgZmluYWwgTGlzdDxDb3B5PEhJbnN0cnVjdGlvbj4+IGFzc2lnbm1lbnRzOwoKICBDb3B5SGFuZGxlcigpCiAgICAgIDogY29waWVzID0gbmV3IExpc3Q8Q29weTxISW5zdHJ1Y3Rpb24+PigpLAogICAgICAgIGFzc2lnbm1lbnRzID0gbmV3IExpc3Q8Q29weTxISW5zdHJ1Y3Rpb24+PigpOwoKICB2b2lkIGFkZENvcHkoSEluc3RydWN0aW9uIHNvdXJjZSwgSEluc3RydWN0aW9uIGRlc3RpbmF0aW9uKSB7CiAgICBjb3BpZXMuYWRkKG5ldyBDb3B5PEhJbnN0cnVjdGlvbj4oc291cmNlLCBkZXN0aW5hdGlvbikpOwogIH0KCiAgdm9pZCBhZGRBc3NpZ25tZW50KEhJbnN0cnVjdGlvbiBzb3VyY2UsIEhJbnN0cnVjdGlvbiBkZXN0aW5hdGlvbikgewogICAgYXNzaWdubWVudHMuYWRkKG5ldyBDb3B5PEhJbnN0cnVjdGlvbj4oc291cmNlLCBkZXN0aW5hdGlvbikpOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0NvcGllczogJGNvcGllcywgYXNzaWdubWVudHM6ICRhc3NpZ25tZW50cyc7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gY29waWVzLmlzRW1wdHkgJiYgYXNzaWdubWVudHMuaXNFbXB0eTsKfQoKLy8vIENvbnRhaW5zIHRoZSBtYXBwaW5nIGJldHdlZW4gaW5zdHJ1Y3Rpb25zIGFuZCB0aGVpciBuYW1lcyBmb3IgY29kZQovLy8gZ2VuZXJhdGlvbiwgYXMgd2VsbCBhcyB0aGUgW0NvcHlIYW5kbGVyXSBmb3IgZWFjaCBiYXNpYyBibG9jay4KY2xhc3MgVmFyaWFibGVOYW1lcyB7CiAgZmluYWwgTWFwPEhJbnN0cnVjdGlvbiwgU3RyaW5nPiBvd25OYW1lOwogIGZpbmFsIE1hcDxIQmFzaWNCbG9jaywgQ29weUhhbmRsZXI+IGNvcHlIYW5kbGVyczsKCiAgLy8gVXNlZCB0byBjb250cm9sIGhldXJpc3RpYyB0aGF0IGRldGVybWluZXMgaG93IGxvY2FsIHZhcmlhYmxlcyBhcmUgZGVjbGFyZWQuCiAgZmluYWwgU2V0PFN0cmluZz4gYWxsVXNlZE5hbWVzOwoKICAvLy8gTmFtZSB0aGF0IGlzIHVzZWQgYXMgYSB0ZW1wb3JhcnkgdG8gYnJlYWsgY3ljbGVzIGluCiAgLy8vIHBhcmFsbGVsIGNvcGllcy4gV2UgbWFrZSBzdXJlIHRoaXMgbmFtZSBpcyBub3QgYmVpbmcgdXNlZAogIC8vLyBhbnl3aGVyZSBieSByZXNlcnZpbmcgaXQgd2hlbiB3ZSBhbGxvY2F0ZSBuYW1lcyBmb3IgaW5zdHJ1Y3Rpb25zLgogIGZpbmFsIFN0cmluZyBzd2FwVGVtcDsKCiAgU3RyaW5nIGdldFN3YXBUZW1wKCkgewogICAgYWxsVXNlZE5hbWVzLmFkZChzd2FwVGVtcCk7CiAgICByZXR1cm4gc3dhcFRlbXA7CiAgfQoKICBWYXJpYWJsZU5hbWVzKCkKICAgICAgOiBvd25OYW1lID0gbmV3IE1hcDxISW5zdHJ1Y3Rpb24sIFN0cmluZz4oKSwKICAgICAgICBjb3B5SGFuZGxlcnMgPSBuZXcgTWFwPEhCYXNpY0Jsb2NrLCBDb3B5SGFuZGxlcj4oKSwKICAgICAgICBhbGxVc2VkTmFtZXMgPSBuZXcgU2V0PFN0cmluZz4oKSwKICAgICAgICBzd2FwVGVtcCA9ICd0MCc7CgogIGludCBnZXQgbnVtYmVyT2ZWYXJpYWJsZXMgPT4gYWxsVXNlZE5hbWVzLmxlbmd0aDsKCiAgU3RyaW5nIGdldE5hbWUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICByZXR1cm4gb3duTmFtZVtpbnN0cnVjdGlvbl07CiAgfQoKICBDb3B5SGFuZGxlciBnZXRDb3B5SGFuZGxlcihIQmFzaWNCbG9jayBibG9jaykgewogICAgcmV0dXJuIGNvcHlIYW5kbGVyc1tibG9ja107CiAgfQoKICB2b2lkIGFkZE5hbWVVc2VkKFN0cmluZyBuYW1lKSB7CiAgICBhbGxVc2VkTmFtZXMuYWRkKG5hbWUpOwogIH0KCiAgYm9vbCBoYXNOYW1lKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgPT4gb3duTmFtZS5jb250YWluc0tleShpbnN0cnVjdGlvbik7CgogIHZvaWQgYWRkQ29weShIQmFzaWNCbG9jayBibG9jaywgSEluc3RydWN0aW9uIHNvdXJjZSwgSFBoaSBkZXN0aW5hdGlvbikgewogICAgQ29weUhhbmRsZXIgaGFuZGxlciA9CiAgICAgICAgY29weUhhbmRsZXJzLnB1dElmQWJzZW50KGJsb2NrLCAoKSA9PiBuZXcgQ29weUhhbmRsZXIoKSk7CiAgICBoYW5kbGVyLmFkZENvcHkoc291cmNlLCBkZXN0aW5hdGlvbik7CiAgfQoKICB2b2lkIGFkZEFzc2lnbm1lbnQoSEJhc2ljQmxvY2sgYmxvY2ssIEhJbnN0cnVjdGlvbiBzb3VyY2UsIEhQaGkgZGVzdGluYXRpb24pIHsKICAgIENvcHlIYW5kbGVyIGhhbmRsZXIgPQogICAgICAgIGNvcHlIYW5kbGVycy5wdXRJZkFic2VudChibG9jaywgKCkgPT4gbmV3IENvcHlIYW5kbGVyKCkpOwogICAgaGFuZGxlci5hZGRBc3NpZ25tZW50KHNvdXJjZSwgZGVzdGluYXRpb24pOwogIH0KfQoKLy8vIEFsbG9jYXRlcyB2YXJpYWJsZSBuYW1lcyBmb3IgaW5zdHJ1Y3Rpb25zLCBtYWtpbmcgc3VyZSB0aGV5IGRvbid0IGNvbGxpZGUuCmNsYXNzIFZhcmlhYmxlTmFtZXIgewogIGZpbmFsIFZhcmlhYmxlTmFtZXMgbmFtZXM7CiAgZmluYWwgTW9kdWxhck5hbWVyIF9uYW1lcjsKICBmaW5hbCBTZXQ8U3RyaW5nPiB1c2VkTmFtZXM7CiAgZmluYWwgTGlzdDxTdHJpbmc+IGZyZWVUZW1wb3JhcnlOYW1lczsKICBpbnQgdGVtcG9yYXJ5SW5kZXggPSAwOwogIHN0YXRpYyBmaW5hbCBSZWdFeHAgcmVnZXhwID0gbmV3IFJlZ0V4cCgndFswLTldKycpOwoKICBWYXJpYWJsZU5hbWVyKExpdmVFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwgdGhpcy5uYW1lcywgdGhpcy5fbmFtZXIpCiAgICAgIDogdXNlZE5hbWVzID0gbmV3IFNldDxTdHJpbmc+KCksCiAgICAgICAgZnJlZVRlbXBvcmFyeU5hbWVzID0gbmV3IExpc3Q8U3RyaW5nPigpIHsKICAgIC8vIFtWYXJpYWJsZU5hbWVzLnN3YXBUZW1wXSBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgYSBjeWNsZSBpbiBhIGNvcHkgaGFuZGxlci4KICAgIC8vIFRoZXJlZm9yZSB3ZSBtYWtlIHN1cmUgbm8gb25lIHVzZXMgaXQuCiAgICB1c2VkTmFtZXMuYWRkKG5hbWVzLnN3YXBUZW1wKTsKCiAgICAvLyBBbGwgbGl2ZUlucyBpbnN0cnVjdGlvbnMgbXVzdCBoYXZlIGEgbmFtZSBhdCB0aGlzIHBvaW50LCBzbyB3ZQogICAgLy8gYWRkIHRoZW0gdG8gdGhlIGxpc3Qgb2YgdXNlZCBuYW1lcy4KICAgIGVudmlyb25tZW50LmxpdmVJbnN0cnVjdGlvbnMuZm9yRWFjaCgoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBpbnQgaW5kZXgpIHsKICAgICAgU3RyaW5nIG5hbWUgPSBuYW1lcy5nZXROYW1lKGluc3RydWN0aW9uKTsKICAgICAgaWYgKG5hbWUgIT0gbnVsbCkgewogICAgICAgIHVzZWROYW1lcy5hZGQobmFtZSk7CiAgICAgICAgbmFtZXMuYWRkTmFtZVVzZWQobmFtZSk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgU3RyaW5nIGFsbG9jYXRlV2l0aEhpbnQoU3RyaW5nIG9yaWdpbmFsTmFtZSkgewogICAgaW50IGkgPSAwOwogICAgU3RyaW5nIG5hbWUgPSBfbmFtZXIuc2FmZVZhcmlhYmxlTmFtZShvcmlnaW5hbE5hbWUpOwogICAgd2hpbGUgKHVzZWROYW1lcy5jb250YWlucyhuYW1lKSkgewogICAgICBuYW1lID0gX25hbWVyLnNhZmVWYXJpYWJsZU5hbWUoJyRvcmlnaW5hbE5hbWUke2krK30nKTsKICAgIH0KICAgIHJldHVybiBuYW1lOwogIH0KCiAgU3RyaW5nIGFsbG9jYXRlVGVtcG9yYXJ5KCkgewogICAgd2hpbGUgKCFmcmVlVGVtcG9yYXJ5TmFtZXMuaXNFbXB0eSkgewogICAgICBTdHJpbmcgbmFtZSA9IGZyZWVUZW1wb3JhcnlOYW1lcy5yZW1vdmVMYXN0KCk7CiAgICAgIGlmICghdXNlZE5hbWVzLmNvbnRhaW5zKG5hbWUpKSByZXR1cm4gbmFtZTsKICAgIH0KICAgIFN0cmluZyBuYW1lID0gJ3Qke3RlbXBvcmFyeUluZGV4Kyt9JzsKICAgIHdoaWxlICh1c2VkTmFtZXMuY29udGFpbnMobmFtZSkpIG5hbWUgPSAndCR7dGVtcG9yYXJ5SW5kZXgrK30nOwogICAgcmV0dXJuIG5hbWU7CiAgfQoKICBIUGhpIGZpcnN0UGhpVXNlcldpdGhFbGVtZW50KEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgZm9yIChISW5zdHJ1Y3Rpb24gdXNlciBpbiBpbnN0cnVjdGlvbi51c2VkQnkpIHsKICAgICAgaWYgKHVzZXIgaXMgSFBoaSAmJiB1c2VyLnNvdXJjZUVsZW1lbnQgIT0gbnVsbCkgewogICAgICAgIHJldHVybiB1c2VyOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIFN0cmluZyBhbGxvY2F0ZU5hbWUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBTdHJpbmcgbmFtZTsKICAgIGlmIChpbnN0cnVjdGlvbiBpcyBIQ2hlY2spIHsKICAgICAgLy8gU3BlY2lhbCBjYXNlIHRoaXMgaW5zdHJ1Y3Rpb24gdG8gdXNlIHRoZSBuYW1lIG9mIGl0cwogICAgICAvLyBpbnB1dCBpZiBpdCBoYXMgb25lLgogICAgICBISW5zdHJ1Y3Rpb24gdGVtcCA9IGluc3RydWN0aW9uOwogICAgICBkbyB7CiAgICAgICAgdGVtcCA9ICh0ZW1wIGFzIEhDaGVjaykuY2hlY2tlZElucHV0OwogICAgICAgIG5hbWUgPSBuYW1lcy5vd25OYW1lW3RlbXBdOwogICAgICB9IHdoaWxlIChuYW1lID09IG51bGwgJiYgdGVtcCBpcyBIQ2hlY2spOwogICAgICBpZiAobmFtZSAhPSBudWxsKSByZXR1cm4gYWRkQWxsb2NhdGVkTmFtZShpbnN0cnVjdGlvbiwgbmFtZSk7CiAgICB9CgogICAgaWYgKGluc3RydWN0aW9uLnNvdXJjZUVsZW1lbnQgIT0gbnVsbCkgewogICAgICBpZiAoaW5zdHJ1Y3Rpb24uc291cmNlRWxlbWVudC5uYW1lICE9IG51bGwpIHsKICAgICAgICBuYW1lID0gYWxsb2NhdGVXaXRoSGludChpbnN0cnVjdGlvbi5zb3VyY2VFbGVtZW50Lm5hbWUpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFNvdXJjZSBlbGVtZW50IGlzIHN5bnRoZXNpemVkIGFuZCBoYXMgbm8gbmFtZS4KICAgICAgICBuYW1lID0gYWxsb2NhdGVUZW1wb3JhcnkoKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgLy8gV2UgY291bGQgbm90IGZpbmQgYW4gZWxlbWVudCBmb3IgdGhlIGluc3RydWN0aW9uLiBJZiB0aGUKICAgICAgLy8gaW5zdHJ1Y3Rpb24gaXMgdXNlZCBieSBhIHBoaSwgdHJ5IHRvIHVzZSB0aGUgbmFtZSBvZiB0aGUgcGhpLgogICAgICAvLyBPdGhlcndpc2UsIGp1c3QgYWxsb2NhdGUgYSB0ZW1wb3JhcnkgbmFtZS4KICAgICAgSFBoaSBwaGkgPSBmaXJzdFBoaVVzZXJXaXRoRWxlbWVudChpbnN0cnVjdGlvbik7CiAgICAgIGlmIChwaGkgIT0gbnVsbCkgewogICAgICAgIG5hbWUgPSBhbGxvY2F0ZVdpdGhIaW50KHBoaS5zb3VyY2VFbGVtZW50Lm5hbWUpOwogICAgICB9IGVsc2UgewogICAgICAgIG5hbWUgPSBhbGxvY2F0ZVRlbXBvcmFyeSgpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYWRkQWxsb2NhdGVkTmFtZShpbnN0cnVjdGlvbiwgbmFtZSk7CiAgfQoKICBTdHJpbmcgYWRkQWxsb2NhdGVkTmFtZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24sIFN0cmluZyBuYW1lKSB7CiAgICB1c2VkTmFtZXMuYWRkKG5hbWUpOwogICAgbmFtZXMuYWRkTmFtZVVzZWQobmFtZSk7CiAgICBuYW1lcy5vd25OYW1lW2luc3RydWN0aW9uXSA9IG5hbWU7CiAgICByZXR1cm4gbmFtZTsKICB9CgogIC8vLyBGcmVlcyBbaW5zdHJ1Y3Rpb25dJ3MgbmFtZSBzbyBpdCBjYW4gYmUgdXNlZCBmb3Igb3RoZXIgaW5zdHJ1Y3Rpb25zLgogIHZvaWQgZnJlZU5hbWUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBTdHJpbmcgb3duTmFtZSA9IG5hbWVzLm93bk5hbWVbaW5zdHJ1Y3Rpb25dOwogICAgaWYgKG93bk5hbWUgIT0gbnVsbCkgewogICAgICAvLyBXZSBjaGVjayBpZiB3ZSBoYXZlIGFscmVhZHkgbG9va2VkIGZvciB0ZW1wb3JhcnkgbmFtZXMKICAgICAgLy8gYmVjYXVzZSBpZiB3ZSBoYXZlbid0LCBjaGFuY2VzIGFyZSB0aGUgdGVtcG9yYXJ5IHdlIGFsbG9jYXRlCiAgICAgIC8vIGluIHRoaXMgYmxvY2sgY2FuIG1hdGNoIGEgcGhpIHdpdGggdGhlIHNhbWUgbmFtZSBpbiB0aGUKICAgICAgLy8gc3VjY2Vzc29yIGJsb2NrLgogICAgICBpZiAodGVtcG9yYXJ5SW5kZXggIT0gMCAmJiByZWdleHAuaGFzTWF0Y2gob3duTmFtZSkpIHsKICAgICAgICBmcmVlVGVtcG9yYXJ5TmFtZXMuYWRkKG93bk5hbWUpOwogICAgICB9CiAgICAgIHVzZWROYW1lcy5yZW1vdmUob3duTmFtZSk7CiAgICB9CiAgfQp9CgovLy8gVmlzaXRzIGFsbCBibG9ja3MgaW4gdGhlIGdyYXBoLCBzZXRzIG5hbWVzIHRvIGluc3RydWN0aW9ucywgYW5kCi8vLyBjcmVhdGVzIHRoZSBbQ29weUhhbmRsZXJdIGZvciBlYWNoIGJsb2NrLiBUaGlzIGNsYXNzIG5lZWRzIHRvIGhhdmUKLy8vIHRoZSBsaXZlSW5zIHNldCBhcyB3ZWxsIGFzIGFsbCB0aGUgbGl2ZSBpbnRlcnZhbHMgb2YgaW5zdHJ1Y3Rpb25zLgovLy8gSXQgdmlzaXRzIHRoZSBncmFwaCBpbiBkb21pbmF0b3Igb3JkZXIsIHNvIHRoYXQgYXQgZWFjaCBlbnRyeSBvZiBhCi8vLyBibG9jaywgdGhlIGluc3RydWN0aW9ucyBpbiBpdHMgbGl2ZUlucyBzZXQgaGF2ZSBuYW1lcy4KLy8vCi8vLyBXaGVuIHZpc2l0aW5nIGEgYmxvY2ssIGl0IGdvZXMgdGhyb3VnaCBhbGwgaW5zdHJ1Y3Rpb25zLiBGb3IgZWFjaAovLy8gaW5zdHJ1Y3Rpb24sIGl0IGZyZWVzIHRoZSBuYW1lcyBvZiB0aGUgaW5wdXRzIHRoYXQgZGllIGF0IHRoYXQKLy8vIGluc3RydWN0aW9uLCBhbmQgYWxsb2NhdGVzIGEgbmFtZSB0byB0aGUgaW5zdHJ1Y3Rpb24uIEZvciBlYWNoIHBoaSwKLy8vIGl0IGFkZHMgYSBjb3B5IHRvIHRoZSBDb3B5SGFuZGxlciBvZiB0aGUgY29ycmVzcG9uZGluZyBwcmVkZWNlc3Nvci4KY2xhc3MgU3NhVmFyaWFibGVBbGxvY2F0b3IgZXh0ZW5kcyBIQmFzZVZpc2l0b3Igd2l0aCBDb2RlZ2VuUGhhc2UgewogIGZpbmFsIE1vZHVsYXJOYW1lciBfbmFtZXI7CiAgZmluYWwgTWFwPEhCYXNpY0Jsb2NrLCBMaXZlRW52aXJvbm1lbnQ+IGxpdmVJbnN0cnVjdGlvbnM7CiAgZmluYWwgTWFwPEhJbnN0cnVjdGlvbiwgTGl2ZUludGVydmFsPiBsaXZlSW50ZXJ2YWxzOwogIGZpbmFsIFNldDxISW5zdHJ1Y3Rpb24+IGdlbmVyYXRlQXRVc2VTaXRlOwoKICBmaW5hbCBWYXJpYWJsZU5hbWVzIG5hbWVzOwoKICBTc2FWYXJpYWJsZUFsbG9jYXRvcih0aGlzLl9uYW1lciwgdGhpcy5saXZlSW5zdHJ1Y3Rpb25zLCB0aGlzLmxpdmVJbnRlcnZhbHMsCiAgICAgIHRoaXMuZ2VuZXJhdGVBdFVzZVNpdGUpCiAgICAgIDogdGhpcy5uYW1lcyA9IG5ldyBWYXJpYWJsZU5hbWVzKCk7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpIHsKICAgIHZpc2l0RG9taW5hdG9yVHJlZShncmFwaCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgVmFyaWFibGVOYW1lciB2YXJpYWJsZU5hbWVyID0KICAgICAgICBuZXcgVmFyaWFibGVOYW1lcihsaXZlSW5zdHJ1Y3Rpb25zW2Jsb2NrXSwgbmFtZXMsIF9uYW1lcik7CgogICAgYmxvY2suZm9yRWFjaFBoaSgoSFBoaSBwaGkpIHsKICAgICAgaGFuZGxlUGhpKHBoaSwgdmFyaWFibGVOYW1lcik7CiAgICB9KTsKCiAgICBibG9jay5mb3JFYWNoSW5zdHJ1Y3Rpb24oKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgICBoYW5kbGVJbnN0cnVjdGlvbihpbnN0cnVjdGlvbiwgdmFyaWFibGVOYW1lcik7CiAgICB9KTsKICB9CgogIC8vLyBSZXR1cm5zIHdoZXRoZXIgW2luc3RydWN0aW9uXSBuZWVkcyBhIG5hbWUuIEluc3RydWN0aW9ucyB0aGF0CiAgLy8vIGhhdmUgbm8gdXNlcnMgb3IgdGhhdCBhcmUgZ2VuZXJhdGVkIGF0IHVzZSBzaXRlIGRvIG5vdCBuZWVkIGEgbmFtZS4KICBib29sIG5lZWRzTmFtZShpbnN0cnVjdGlvbikgewogICAgaWYgKGluc3RydWN0aW9uIGlzIEhUaGlzKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoaW5zdHJ1Y3Rpb24gaXMgSFBhcmFtZXRlclZhbHVlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChpbnN0cnVjdGlvbi51c2VkQnkuaXNFbXB0eSkgcmV0dXJuIGZhbHNlOwogICAgaWYgKGdlbmVyYXRlQXRVc2VTaXRlLmNvbnRhaW5zKGluc3RydWN0aW9uKSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuICFpbnN0cnVjdGlvbi5ub25DaGVjaygpLmlzQ29kZU1vdGlvbkludmFyaWFudCgpOwogIH0KCiAgLy8vIFJldHVybnMgd2hldGhlciBbaW5zdHJ1Y3Rpb25dIGRpZXMgYXQgdGhlIGluc3RydWN0aW9uIFthdF0uCiAgYm9vbCBkaWVzQXQoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24gYXQpIHsKICAgIExpdmVJbnRlcnZhbCBhdEludGVydmFsID0gbGl2ZUludGVydmFsc1thdF07CiAgICBMaXZlSW50ZXJ2YWwgaW5zdHJ1Y3Rpb25JbnRlcnZhbCA9IGxpdmVJbnRlcnZhbHNbaW5zdHJ1Y3Rpb25dOwogICAgaW50IHN0YXJ0ID0gYXRJbnRlcnZhbC5zdGFydDsKICAgIHJldHVybiBpbnN0cnVjdGlvbkludGVydmFsLmRpZXNBdChzdGFydCk7CiAgfQoKICB2b2lkIGZyZWVVc2VkTmFtZXNBdCgKICAgICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24gYXQsIFZhcmlhYmxlTmFtZXIgbmFtZXIpIHsKICAgIGlmIChuZWVkc05hbWUoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgIGlmIChkaWVzQXQoaW5zdHJ1Y3Rpb24sIGF0KSkgewogICAgICAgIG5hbWVyLmZyZWVOYW1lKGluc3RydWN0aW9uKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChnZW5lcmF0ZUF0VXNlU2l0ZS5jb250YWlucyhpbnN0cnVjdGlvbikpIHsKICAgICAgLy8gSWYgdGhlIGluc3RydWN0aW9uIGlzIGdlbmVyYXRlZCBhdCB1c2Ugc2l0ZSwgdGhlbiBhbGwgaXRzCiAgICAgIC8vIGlucHV0cyBtYXkgYWxzbyBkaWUgYXQgW2F0XS4KICAgICAgZm9yIChpbnQgaSA9IDAsIGxlbiA9IGluc3RydWN0aW9uLmlucHV0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICAgIEhJbnN0cnVjdGlvbiBpbnB1dCA9IGluc3RydWN0aW9uLmlucHV0c1tpXTsKICAgICAgICBmcmVlVXNlZE5hbWVzQXQoaW5wdXQsIGF0LCBuYW1lcik7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgaGFuZGxlSW5zdHJ1Y3Rpb24oSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBWYXJpYWJsZU5hbWVyIG5hbWVyKSB7CiAgICBpZiAoZ2VuZXJhdGVBdFVzZVNpdGUuY29udGFpbnMoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgIGFzc2VydCghbGl2ZUludGVydmFscy5jb250YWluc0tleShpbnN0cnVjdGlvbikpOwogICAgICByZXR1cm47CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDAsIGxlbiA9IGluc3RydWN0aW9uLmlucHV0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykgewogICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbaV07CiAgICAgIGZyZWVVc2VkTmFtZXNBdChpbnB1dCwgaW5zdHJ1Y3Rpb24sIG5hbWVyKTsKICAgIH0KCiAgICBpZiAobmVlZHNOYW1lKGluc3RydWN0aW9uKSkgewogICAgICBuYW1lci5hbGxvY2F0ZU5hbWUoaW5zdHJ1Y3Rpb24pOwogICAgfQogIH0KCiAgdm9pZCBoYW5kbGVQaGkoSFBoaSBwaGksIFZhcmlhYmxlTmFtZXIgbmFtZXIpIHsKICAgIGlmICghbmVlZHNOYW1lKHBoaSkpIHJldHVybjsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IHBoaS5pbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgSEluc3RydWN0aW9uIGlucHV0ID0gcGhpLmlucHV0c1tpXTsKICAgICAgSEJhc2ljQmxvY2sgcHJlZGVjZXNzb3IgPSBwaGkuYmxvY2sucHJlZGVjZXNzb3JzW2ldOwogICAgICAvLyBBIFtIVHlwZUtub3duXSBpbnN0cnVjdGlvbiBuZXZlciBoYXMgYSBuYW1lLCBidXQgaXRzIGNoZWNrZWQKICAgICAgLy8gaW5wdXQgbWlnaHQsIHRoZXJlZm9yZSB3ZSBuZWVkIHRvIGRvIGEgY29weSBpbnN0ZWFkIG9mIGFuCiAgICAgIC8vIGFzc2lnbm1lbnQuCiAgICAgIHdoaWxlIChpbnB1dCBpcyBIVHlwZUtub3duKSBpbnB1dCA9IGlucHV0LmlucHV0c1swXTsKICAgICAgaWYgKCFuZWVkc05hbWUoaW5wdXQpKSB7CiAgICAgICAgbmFtZXMuYWRkQXNzaWdubWVudChwcmVkZWNlc3NvciwgaW5wdXQsIHBoaSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmFtZXMuYWRkQ29weShwcmVkZWNlc3NvciwgaW5wdXQsIHBoaSk7CiAgICAgIH0KICAgIH0KCiAgICBuYW1lci5hbGxvY2F0ZU5hbWUocGhpKTsKICB9Cn0KgqIATk48ARk1KRUBRxITQAskGgQBDCgCAUIZFS8NICsBQEcSQikBPBMmJjMYCAYEASghGgQBRxgmKAYSBAEMFitBIgQCAUNGIxg7Lg8BNRMBQEpHMSsBSEZFEzEBOTcBMjkzAUJEOzIcSjBFQysZKgQBRTgzRzk9BAFASCpQREFFREYnG0w7LQgnGggEATMuHgQBLi0gBAFHLTEMNAIBSD4/Ri0wAUhLSBYZASM8ASo3AUxEPwEMIiMyQwYEASY/RUMGBAFFMwUSBS0YGBYWFgVPKFEQSCogMDMWBhQEASA/Mz8NM0BDMyMkUDQzCggGBAEePzRBMyEiTjJGQkElTggGBAEMLCI7AUZBRBc1Jjc+JzkIBgFGSjgzQiItDz0IATlLQQgGAUcnKyI2OUEIFyoGAUdARS4wCAYBMC0rAUU1RS9BHwYEAS40KkYjRhtQLTIIASIBQkozSjQMKCkkDAgIBAIBQ0INEBIXAScBDDICAUYqFEApAUgrLgEQMTYBQD0EAUZCBAEMRQE9AgFHQxYrNAFRIgE6QEgZARkgFQQBEjM8KhkBNAEtIQQBMiAEASIcBAFOAUsaQioEAVEaQjAEAgFPFh0dHykaNgFGJzJRLiMBRitRMBodIQgIBAExDzknPQYRBAEfKjUyBipEEQQBOzQ4FQgGEQQBMhEhPh4nCy4kMEQGAS00QQ86JAgNQkc0Nxk5DyQIBjAEAUMZHScRBAFLLDEbQEZBGj0pCCEGBAIBREdHRzsERkNISEQdPDctAR0BTx4qAQwiHwQBDCwiQwEiJQgBOjUIBAFESiAsNTI/PAQBQjsxQyIuBAEYSCIlJQg6QyZHNCsIBgQBSjM3DgYBRTIyBgEiJwYEATIhATIqO0ZDFTsfNg8wCAYBHQQCATBwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvdmFyaWFibGVfYWxsb2NhdG9yLmRhcnRAc2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfYmFja2VuZC9zcGVjaWFsaXplZF9jaGVja3MuZGFydIndLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29tbW9uX2VsZW1lbnRzLmRhcnQnIHNob3cgSkNvbW1vbkVsZW1lbnRzOwppbXBvcnQgJy4uL2VsZW1lbnRzL2VudGl0aWVzLmRhcnQnOwppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwoKY2xhc3MgU3BlY2lhbGl6ZWRDaGVja3MgewogIHN0YXRpYyBNZW1iZXJFbnRpdHkgZmluZEFzQ2hlY2soCiAgICAgIERhcnRUeXBlIGRhcnRUeXBlLCBib29sIGlzVHlwZUVycm9yLCBKQ29tbW9uRWxlbWVudHMgY29tbW9uRWxlbWVudHMpIHsKICAgIGlmIChkYXJ0VHlwZSBpcyBJbnRlcmZhY2VUeXBlKSB7CiAgICAgIGlmIChkYXJ0VHlwZS50eXBlQXJndW1lbnRzLmlzTm90RW1wdHkpIHJldHVybiBudWxsOwogICAgICByZXR1cm4gX2ZpbmRBc0NoZWNrKGRhcnRUeXBlLmVsZW1lbnQsIGNvbW1vbkVsZW1lbnRzLAogICAgICAgICAgaXNUeXBlRXJyb3I6IGlzVHlwZUVycm9yLCBpc051bGxhYmxlOiB0cnVlKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgc3RhdGljIE1lbWJlckVudGl0eSBfZmluZEFzQ2hlY2soCiAgICAgIENsYXNzRW50aXR5IGVsZW1lbnQsIEpDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50cywKICAgICAge2Jvb2wgaXNUeXBlRXJyb3IsIGJvb2wgaXNOdWxsYWJsZX0pIHsKICAgIGlmIChlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmpzU3RyaW5nQ2xhc3MgfHwKICAgICAgICBlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLnN0cmluZ0NsYXNzKSB7CiAgICAgIGlmIChpc051bGxhYmxlKSB7CiAgICAgICAgcmV0dXJuIGlzVHlwZUVycm9yCiAgICAgICAgICAgID8gY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRDaGVja1N0cmluZ051bGxhYmxlCiAgICAgICAgICAgIDogY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRBc1N0cmluZ051bGxhYmxlOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIGlmIChlbGVtZW50ID09IGNvbW1vbkVsZW1lbnRzLmpzQm9vbENsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5ib29sQ2xhc3MpIHsKICAgICAgaWYgKGlzTnVsbGFibGUpIHsKICAgICAgICByZXR1cm4gaXNUeXBlRXJyb3IKICAgICAgICAgICAgPyBjb21tb25FbGVtZW50cy5zcGVjaWFsaXplZENoZWNrQm9vbE51bGxhYmxlCiAgICAgICAgICAgIDogY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRBc0Jvb2xOdWxsYWJsZTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5kb3VibGVDbGFzcykgewogICAgICBpZiAoaXNOdWxsYWJsZSkgewogICAgICAgIHJldHVybiBpc1R5cGVFcnJvcgogICAgICAgICAgICA/IGNvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQ2hlY2tEb3VibGVOdWxsYWJsZQogICAgICAgICAgICA6IGNvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQXNEb3VibGVOdWxsYWJsZTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5udW1DbGFzcykgewogICAgICBpZiAoaXNOdWxsYWJsZSkgewogICAgICAgIHJldHVybiBpc1R5cGVFcnJvcgogICAgICAgICAgICA/IGNvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQ2hlY2tOdW1OdWxsYWJsZQogICAgICAgICAgICA6IGNvbW1vbkVsZW1lbnRzLnNwZWNpYWxpemVkQXNOdW1OdWxsYWJsZTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBpZiAoZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5qc0ludENsYXNzIHx8CiAgICAgICAgZWxlbWVudCA9PSBjb21tb25FbGVtZW50cy5pbnRDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNVSW50MzJDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNVSW50MzFDbGFzcyB8fAogICAgICAgIGVsZW1lbnQgPT0gY29tbW9uRWxlbWVudHMuanNQb3NpdGl2ZUludENsYXNzKSB7CiAgICAgIGlmIChpc051bGxhYmxlKSB7CiAgICAgICAgcmV0dXJuIGlzVHlwZUVycm9yCiAgICAgICAgICAgID8gY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRDaGVja0ludE51bGxhYmxlCiAgICAgICAgICAgIDogY29tbW9uRWxlbWVudHMuc3BlY2lhbGl6ZWRBc0ludE51bGxhYmxlOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0KfQpQAE5OPAE3JCEBGiNNJTo8NwYRBAEkOy0zMRgbPDoIEwYBMS8YGzo4CBMGATMxGBs8OggTBgEzLhgbOTcIEwYBMC4zMzgYGzk3CBMGAREEAgE3cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9zcGVjaWFsaXplZF9jaGVja3MuZGFydD1zZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2EvaW50ZXJjZXB0b3Jfc2ltcGxpZmllci5kYXJ0wABLEi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL2NvbW1vbl9lbGVtZW50cy5kYXJ0JyBzaG93IENvbW1vbkVsZW1lbnRzOwppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnQnOwppbXBvcnQgJy4uL2pzX2JhY2tlbmQvaW50ZXJjZXB0b3JfZGF0YS5kYXJ0JzsKaW1wb3J0ICcuLi91bml2ZXJzZS9zZWxlY3Rvci5kYXJ0JyBzaG93IFNlbGVjdG9yOwppbXBvcnQgJy4uL3dvcmxkLmRhcnQnIHNob3cgSkNsb3NlZFdvcmxkOwppbXBvcnQgJ25vZGVzLmRhcnQnOwppbXBvcnQgJ29wdGltaXplLmRhcnQnOwoKLy8vIFRoaXMgcGhhc2Ugc2ltcGxpZmllcyBpbnRlcmNlcHRvcnMgaW4gbXVsdGlwbGUgd2F5czoKLy8vCi8vLyAxKSBJZiB0aGUgaW50ZXJjZXB0b3IgaXMgZm9yIGFuIG9iamVjdCB3aG9zZSB0eXBlIGlzIGtub3duLCBpdAovLy8gdHJpZXMgdG8gdXNlIGEgY29uc3RhbnQgaW50ZXJjZXB0b3IgaW5zdGVhZC4KLy8vCi8vLyAyKSBJbnRlcmNlcHRvcnMgYXJlIHNwZWNpYWxpemVkIGJhc2VkIG9uIHRoZSBzZWxlY3RvciBpdCBpcyB1c2VkIHdpdGguCi8vLwovLy8gMykgSWYgd2Uga25vdyB0aGUgb2JqZWN0IGlzIG5vdCBpbnRlcmNlcHRlZCwgd2UganVzdCB1c2UgdGhlIG9iamVjdAovLy8gaW5zdGVhZC4KLy8vCi8vLyA0KSBTaW5nbGUgdXNlIGludGVyY2VwdG9ycyBhdCBkeW5hbWljIGludm9rZSBzaXRlcyBhcmUgcmVwbGFjZWQgd2l0aCAnb25lCi8vLyBzaG90IGludGVyY2VwdG9ycycgd2hpY2ggYXJlIHN5bnRoZXNpemVkIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgZmV0Y2gKLy8vIHRoZSBpbnRlcmNlcHRvciBhbmQgdGhlbiBjYWxsIHRoZSBtZXRob2QuICBUaGlzIHNhdmVzIGNvZGUgc2l6ZSBhbmQgbWFrZXMgdGhlCi8vLyByZWNlaXZlciBvZiBhbiBpbnRlcmNlcHRlZCBjYWxsIGEgY2FuZGlkYXRlIGZvciBiZWluZyBnZW5lcmF0ZWQgYXQgdXNlIHNpdGUuCi8vLwovLy8gNSkgU29tZSBISXMgb3BlcmF0aW9ucyBvbiBhbiBpbnRlcmNlcHRvciBhcmUgcmVwbGFjZWQgd2l0aCBhIEhJcyB2ZXJzaW9uIHRoYXQKLy8vIHVzZXMgJ2luc3RhbmNlb2YnIHJhdGhlciB0aGFuIHRlc3RpbmcgYSB0eXBlIGZsYWcuCi8vLwpjbGFzcyBTc2FTaW1wbGlmeUludGVyY2VwdG9ycyBleHRlbmRzIEhCYXNlVmlzaXRvcgogICAgaW1wbGVtZW50cyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgQG92ZXJyaWRlCiAgZmluYWwgU3RyaW5nIG5hbWUgPSAiU3NhU2ltcGxpZnlJbnRlcmNlcHRvcnMiOwogIGZpbmFsIEpDbG9zZWRXb3JsZCBfY2xvc2VkV29ybGQ7CiAgZmluYWwgQ2xhc3NFbnRpdHkgX2VuY2xvc2luZ0NsYXNzOwogIEhHcmFwaCBfZ3JhcGg7CgogIFNzYVNpbXBsaWZ5SW50ZXJjZXB0b3JzKHRoaXMuX2Nsb3NlZFdvcmxkLCB0aGlzLl9lbmNsb3NpbmdDbGFzcyk7CgogIENvbW1vbkVsZW1lbnRzIGdldCBfY29tbW9uRWxlbWVudHMgPT4gX2Nsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzOwoKICBJbnRlcmNlcHRvckRhdGEgZ2V0IF9pbnRlcmNlcHRvckRhdGEgPT4gX2Nsb3NlZFdvcmxkLmludGVyY2VwdG9yRGF0YTsKCiAgQWJzdHJhY3RWYWx1ZURvbWFpbiBnZXQgX2Fic3RyYWN0VmFsdWVEb21haW4gPT4KICAgICAgX2Nsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpIHsKICAgIHRoaXMuX2dyYXBoID0gZ3JhcGg7CiAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgbm9kZSkgewogICAgY3VycmVudEJsb2NrID0gbm9kZTsKCiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBub2RlLmZpcnN0OwogICAgd2hpbGUgKGluc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgYm9vbCBzaG91bGRSZW1vdmUgPSBpbnN0cnVjdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgIEhJbnN0cnVjdGlvbiBuZXh0ID0gaW5zdHJ1Y3Rpb24ubmV4dDsKICAgICAgaWYgKHNob3VsZFJlbW92ZSkgewogICAgICAgIGluc3RydWN0aW9uLmJsb2NrLnJlbW92ZShpbnN0cnVjdGlvbik7CiAgICAgIH0KICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXh0OwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEluc3RydWN0aW9uKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGJvb2wgdmlzaXRJbnZva2UoSEludm9rZSBpbnZva2UpIHsKICAgIGlmICghaW52b2tlLmlzSW50ZXJjZXB0ZWRDYWxsKSByZXR1cm4gZmFsc2U7CiAgICBkeW5hbWljIGludGVyY2VwdG9yID0gaW52b2tlLmlucHV0c1swXTsKICAgIGlmIChpbnRlcmNlcHRvciBpcyEgSEludGVyY2VwdG9yKSByZXR1cm4gZmFsc2U7CgogICAgLy8gVE9ETyhzcmEpOiBNb3ZlIHRoaXMgcGVyLWNhbGwgY29kZSB0byB2aXNpdEludGVyY2VwdG9yLgogICAgLy8KICAgIC8vIFRoZSBpbnRlcmNlcHRvciBpcyB2aXNpdGVkIGZpcnN0LCBzbyB3ZSBnZXQgaGVyZSBvbmx5IHdoZW4gdGhlCiAgICAvLyBpbnRlcmNlcHRvciB3YXMgbm90IHJld3JpdHRlbiB0byBhIHNpbmdsZSBzaGFyZWQgcmVwbGFjZW1lbnQuICBJJ20gbm90CiAgICAvLyBzdXJlIHdlIHNob3VsZCBzdWJzdGl0dXRlIGEgY29uc3RhbnQgaW50ZXJjZXB0b3Igb24gYSBwZXItY2FsbCBiYXNpcyBpZgogICAgLy8gdGhlIGludGVyY2VwdG9yIGlzIGFscmVhZHkgYXZhaWxhYmxlIGluIGEgbG9jYWwgdmFyaWFibGUsIGJ1dCBpdCBpcwogICAgLy8gcG9zc2libGUgdGhhdCBhbGwgdXNlcyBjYW4gYmUgcmV3cml0dGVuIHRvIHVzZSBkaWZmZXJlbnQgY29uc3RhbnRzLgoKICAgIEhJbnN0cnVjdGlvbiBjb25zdGFudCA9IHRyeUNvbXB1dGVDb25zdGFudEludGVyY2VwdG9yKAogICAgICAgIGludm9rZS5pbnB1dHNbMV0sIGludGVyY2VwdG9yLmludGVyY2VwdGVkQ2xhc3Nlcyk7CiAgICBpZiAoY29uc3RhbnQgIT0gbnVsbCkgewogICAgICBpbnZva2UuY2hhbmdlVXNlKGludGVyY2VwdG9yLCBjb25zdGFudCk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIGNhblVzZVNlbGZGb3JJbnRlcmNlcHRvcihISW5zdHJ1Y3Rpb24gcmVjZWl2ZXIsCiAgICAgIHtTZXQ8Q2xhc3NFbnRpdHk+IGludGVyY2VwdGVkQ2xhc3Nlc30pIHsKICAgIGlmIChyZWNlaXZlci5pc1ByaW1pdGl2ZShfYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgLy8gUHJpbWl0aXZlcyBhbHdheXMgbmVlZCBpbnRlcmNlcHRvcnMuCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChyZWNlaXZlci5pc051bGwoX2Fic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlUcnVlKSB7CiAgICAgIGlmIChpbnRlcmNlcHRlZENsYXNzZXMgPT0gbnVsbCB8fAogICAgICAgICAgaW50ZXJjZXB0ZWRDbGFzc2VzLmNvbnRhaW5zKF9jb21tb25FbGVtZW50cy5qc051bGxDbGFzcykpIHsKICAgICAgICAvLyBOZWVkIHRoZSBKU051bGwgaW50ZXJjZXB0b3IuCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CgogICAgLy8gQWxsIGludGVyY2VwdGVkIGNsYXNzZXMgZXh0ZW5kIGBJbnRlcmNlcHRvcmAsIHNvIGlmIHRoZSByZWNlaXZlciBjYW4ndCBiZQogICAgLy8gYSBjbGFzcyBleHRlbmRpbmcgYEludGVyY2VwdG9yYCB0aGVuIGl0IGNhbiBiZSBjYWxsZWQgZGlyZWN0bHkuCiAgICByZXR1cm4gX2Fic3RyYWN0VmFsdWVEb21haW4KICAgICAgICAuaXNJbnRlcmNlcHRvcihyZWNlaXZlci5pbnN0cnVjdGlvblR5cGUpCiAgICAgICAgLmlzRGVmaW5pdGVseUZhbHNlOwogIH0KCiAgSEluc3RydWN0aW9uIHRyeUNvbXB1dGVDb25zdGFudEludGVyY2VwdG9yKAogICAgICBISW5zdHJ1Y3Rpb24gaW5wdXQsIFNldDxDbGFzc0VudGl0eT4gaW50ZXJjZXB0ZWRDbGFzc2VzKSB7CiAgICBDbGFzc0VudGl0eSBjb25zdGFudEludGVyY2VwdG9yID0gdHJ5Q29tcHV0ZUNvbnN0YW50SW50ZXJjZXB0b3JGcm9tVHlwZSgKICAgICAgICBpbnB1dC5pbnN0cnVjdGlvblR5cGUsIGludGVyY2VwdGVkQ2xhc3Nlcyk7CgogICAgaWYgKGNvbnN0YW50SW50ZXJjZXB0b3IgPT0gbnVsbCkgcmV0dXJuIG51bGw7CgogICAgLy8gSWYgd2UganVzdCBoYXBwZW4gdG8gYmUgaW4gYW4gaW5zdGFuY2UgbWV0aG9kIG9mIHRoZSBjb25zdGFudAogICAgLy8gaW50ZXJjZXB0b3IsIGB0aGlzYCBpcyBhIHNob3J0ZXIgYWxpYXMuCiAgICBpZiAoY29uc3RhbnRJbnRlcmNlcHRvciA9PSBfZW5jbG9zaW5nQ2xhc3MgJiYKICAgICAgICBfZ3JhcGgudGhpc0luc3RydWN0aW9uICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9ncmFwaC50aGlzSW5zdHJ1Y3Rpb247CiAgICB9CgogICAgQ29uc3RhbnRWYWx1ZSBjb25zdGFudCA9IG5ldyBJbnRlcmNlcHRvckNvbnN0YW50VmFsdWUoY29uc3RhbnRJbnRlcmNlcHRvcik7CiAgICByZXR1cm4gX2dyYXBoLmFkZENvbnN0YW50KGNvbnN0YW50LCBfY2xvc2VkV29ybGQpOwogIH0KCiAgQ2xhc3NFbnRpdHkgdHJ5Q29tcHV0ZUNvbnN0YW50SW50ZXJjZXB0b3JGcm9tVHlwZSgKICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlLCBTZXQ8Q2xhc3NFbnRpdHk+IGludGVyY2VwdGVkQ2xhc3NlcykgewogICAgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVsbCh0eXBlKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNOdWxsKHR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICByZXR1cm4gX2NvbW1vbkVsZW1lbnRzLmpzTnVsbENsYXNzOwogICAgICB9CiAgICB9IGVsc2UgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzSW50ZWdlck9yTnVsbCh0eXBlKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBfY29tbW9uRWxlbWVudHMuanNJbnRDbGFzczsKICAgIH0gZWxzZSBpZiAoX2Fic3RyYWN0VmFsdWVEb21haW4uaXNEb3VibGVPck51bGwodHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3M7CiAgICB9IGVsc2UgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzQm9vbGVhbk9yTnVsbCh0eXBlKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBfY29tbW9uRWxlbWVudHMuanNCb29sQ2xhc3M7CiAgICB9IGVsc2UgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzU3RyaW5nT3JOdWxsKHR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIF9jb21tb25FbGVtZW50cy5qc1N0cmluZ0NsYXNzOwogICAgfSBlbHNlIGlmIChfYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0FycmF5KHR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIF9jb21tb25FbGVtZW50cy5qc0FycmF5Q2xhc3M7CiAgICB9IGVsc2UgaWYgKF9hYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVtYmVyT3JOdWxsKHR5cGUpLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICAhaW50ZXJjZXB0ZWRDbGFzc2VzLmNvbnRhaW5zKF9jb21tb25FbGVtZW50cy5qc0ludENsYXNzKSAmJgogICAgICAgICFpbnRlcmNlcHRlZENsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MpKSB7CiAgICAgIC8vIElmIHRoZSBtZXRob2QgYmVpbmcgaW50ZXJjZXB0ZWQgaXMgbm90IGRlZmluZWQgaW4gW2ludF0gb3IgW2RvdWJsZV0gd2UKICAgICAgLy8gY2FuIHNhZmVseSB1c2UgdGhlIG51bWJlciBpbnRlcmNlcHRvci4gIFRoaXMgaXMgYmVjYXVzZSBub25lIG9mIHRoZQogICAgICAvLyBbaW50XSBvciBbZG91YmxlXSBtZXRob2RzIGFyZSBjYWxsZWQgZnJvbSBhIG1ldGhvZCBkZWZpbmVkIG9uIFtudW1dLgogICAgICByZXR1cm4gX2NvbW1vbkVsZW1lbnRzLmpzTnVtYmVyQ2xhc3M7CiAgICB9IGVsc2UgewogICAgICAvLyBUcnkgdG8gZmluZCBjb25zdGFudCBpbnRlcmNlcHRvciBmb3IgYSBuYXRpdmUgY2xhc3MuICBJZiB0aGUgcmVjZWl2ZXIKICAgICAgLy8gaXMgY29uc3RyYWluZWQgdG8gYSBsZWFmIG5hdGl2ZSBjbGFzcywgd2UgY2FuIHVzZSB0aGUgY2xhc3MncwogICAgICAvLyBpbnRlcmNlcHRvciBkaXJlY3RseS4KCiAgICAgIC8vIFRPRE8oc3JhKTogS2V5IERPTSBjbGFzc2VzIGxpa2UgTm9kZSwgRWxlbWVudCBhbmQgRXZlbnQgYXJlIG5vdCBsZWFmCiAgICAgIC8vIGNsYXNzZXMuICBXaGVuIHRoZSByZWNlaXZlciB0eXBlIGlzIG5vdCBhIGxlYWYgY2xhc3MsIHdlIG1pZ2h0IHN0aWxsIGJlCiAgICAgIC8vIGFibGUgdG8gdXNlIHRoZSByZWNlaXZlciBjbGFzcyBhcyBhIGNvbnN0YW50IGludGVyY2VwdG9yLiAgSXQgaXMKICAgICAgLy8gdXN1YWxseSB0aGUgY2FzZSB0aGF0IG1ldGhvZHMgZGVmaW5lZCBvbiBhIG5vbi1sZWFmIGNsYXNzIGRvbid0IHRlc3QKICAgICAgLy8gZm9yIGEgc3ViY2xhc3Mgb3IgY2FsbCBtZXRob2RzIGRlZmluZWQgb24gYSBzdWJjbGFzcy4gIFByb3ZpZGVkIHRoZQogICAgICAvLyBjb2RlIGlzIGNvbXBsZXRlbHkgaW5zZW5zaXRpdmUgdG8gdGhlIHNwZWNpZmljIGluc3RhbmNlIHN1YmNsYXNzZXMsIHdlCiAgICAgIC8vIGNhbiB1c2UgdGhlIG5vbi1sZWFmIGNsYXNzIGRpcmVjdGx5LgogICAgICBDbGFzc0VudGl0eSBlbGVtZW50ID0gX2Fic3RyYWN0VmFsdWVEb21haW4uZ2V0RXhhY3RDbGFzcyh0eXBlKTsKICAgICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJiBfY2xvc2VkV29ybGQubmF0aXZlRGF0YS5pc05hdGl2ZUNsYXNzKGVsZW1lbnQpKSB7CiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gbnVsbDsKICB9CgogIEhJbnN0cnVjdGlvbiBmaW5kRG9taW5hdG9yKEl0ZXJhYmxlPEhJbnN0cnVjdGlvbj4gaW5zdHJ1Y3Rpb25zKSB7CiAgICBISW5zdHJ1Y3Rpb24gcmVzdWx0OwogICAgTDE6CiAgICBmb3IgKEhJbnN0cnVjdGlvbiBjYW5kaWRhdGUgaW4gaW5zdHJ1Y3Rpb25zKSB7CiAgICAgIGZvciAoSEluc3RydWN0aW9uIGN1cnJlbnQgaW4gaW5zdHJ1Y3Rpb25zKSB7CiAgICAgICAgaWYgKGN1cnJlbnQgIT0gY2FuZGlkYXRlICYmICFjYW5kaWRhdGUuZG9taW5hdGVzKGN1cnJlbnQpKSBjb250aW51ZSBMMTsKICAgICAgfQogICAgICByZXN1bHQgPSBjYW5kaWRhdGU7CiAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBpbnQgdXNlQ291bnQoSEluc3RydWN0aW9uIHVzZXIsIEhJbnN0cnVjdGlvbiB1c2VkKSA9PgogICAgICB1c2VyLmlucHV0cy53aGVyZSgoaW5wdXQpID0+IGlucHV0ID09IHVzZWQpLmxlbmd0aDsKCiAgQG92ZXJyaWRlCiAgYm9vbCB2aXNpdEludGVyY2VwdG9yKEhJbnRlcmNlcHRvciBub2RlKSB7CiAgICBpZiAobm9kZS5yZWNlaXZlci5ub25DaGVjaygpID09IF9ncmFwaC5leHBsaWNpdFJlY2VpdmVyUGFyYW1ldGVyKSB7CiAgICAgIC8vIElmIGBleHBsaWNpdFJlY2VpdmVyUGFyYW1ldGVyYCBpcyBzZXQgaXQgbWVhbnMgdGhlIGN1cnJlbnQgbWV0aG9kIGlzIGFuCiAgICAgIC8vIGludGVyY2VwdG9yIG1ldGhvZCwgYW5kIGB0aGlzYCBpcyB0aGUgaW50ZXJjZXB0b3IuICBUaGUgY2FsbGVyIGp1c3QgZGlkCiAgICAgIC8vIGBnZXRJbnRlcmNlcHRvcihmb28pLmN1cnJlbnRNZXRob2QoZm9vKWAgdG8gZW50ZXIgdGhlIGN1cnJlbnQgbWV0aG9kLgogICAgICBub2RlLmJsb2NrLnJld3JpdGUobm9kZSwgX2dyYXBoLnRoaXNJbnN0cnVjdGlvbik7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHJld3JpdGVTZWxmSW50ZXJjZXB0b3JVc2VzKG5vZGUpOwoKICAgIGlmIChub2RlLnVzZWRCeS5pc0VtcHR5KSByZXR1cm4gdHJ1ZTsKCiAgICAvLyBTcGVjaWFsaXplIHRoZSBpbnRlcmNlcHRvciB3aXRoIHNldCBvZiBjbGFzc2VzIGl0IGludGVyY2VwdHMsIGNvbnNpZGVyaW5nCiAgICAvLyBhbGwgdXNlcy4gIChUaGUgc3BlY2lhbGl6ZWQgaW50ZXJjZXB0b3IgaGFzIGEgc2hvcnRlciBkaXNwYXRjaCBjaGFpbikuCiAgICAvLyBUaGlzIG9wZXJhdGlvbiBhcHBsaWVzIG9ubHkgd2hlcmUgdGhlIGludGVyY2VwdG9yIGlzIHVzZWQgdG8gZGlzcGF0Y2ggYQogICAgLy8gbWV0aG9kLiAgT3RoZXIgdXNlcywgZS5nLiBhcyBhbiBvcmRpbmFyeSBhcmd1bWVudCBvciBhIEhJcyBjaGVjayB1c2UgdGhlCiAgICAvLyBtb3N0IGdlbmVyYWwgaW50ZXJjZXB0b3IuCiAgICAvLwogICAgLy8gVE9ETyhzcmEpOiBUYWtlIGludG8gYWNjb3VudCB0aGUgcmVjZWl2ZXIgdHlwZSBhdCBlYWNoIGNhbGwuICBlLmc6CiAgICAvLwogICAgLy8gICAgIChhKSA9PiBhLmxlbmd0aCArIGEuaGFzaENvZGUKICAgIC8vCiAgICAvLyBDdXJyZW50bHkgd2UgdXNlIHRoZSBtb3N0IGdlbmVyYWwgaW50ZXJjZXB0b3Igc2luY2UgYWxsIGludGVyY2VwdGVkIHR5cGVzCiAgICAvLyBpbXBsZW1lbnQgYGhhc2hDb2RlYC4gQnV0IGluIHRoaXMgZXhhbXBsZSwgYGEuaGFzaENvZGVgIGlzIG9ubHkgcmVhY2hlZAogICAgLy8gaWYgYGEubGVuZ3RoYCBzdWNjZWVkcywgd2hpY2ggaXMgaW5kaWNhdGVkIGJ5IHRoZSBoYXNoQ29kZSByZWNlaXZlciBiZWluZwogICAgLy8gYSBIVHlwZUtub3duIGluc3RydWN0aW9uLgoKICAgIFNldDxDbGFzc0VudGl0eT4gaW50ZXJjZXB0ZWRDbGFzc2VzOwogICAgSEluc3RydWN0aW9uIGRvbWluYXRvciA9IGZpbmREb21pbmF0b3Iobm9kZS51c2VkQnkpOwogICAgLy8gSWYgdGhlcmUgaXMgYSBjYWxsIHRoYXQgZG9taW5hdGVzIGFsbCBvdGhlciB1c2VzLCB3ZSBjYW4gdXNlIGp1c3QgdGhlCiAgICAvLyBzZWxlY3RvciBvZiB0aGF0IGluc3RydWN0aW9uLgogICAgaWYgKGRvbWluYXRvciBpcyBISW52b2tlRHluYW1pYyAmJgogICAgICAgIGRvbWluYXRvci5pc0NhbGxPbkludGVyY2VwdG9yKF9jbG9zZWRXb3JsZCkgJiYKICAgICAgICBub2RlID09IGRvbWluYXRvci5yZWNlaXZlciAmJgogICAgICAgIHVzZUNvdW50KGRvbWluYXRvciwgbm9kZSkgPT0gMSkgewogICAgICBpbnRlcmNlcHRlZENsYXNzZXMgPSBfaW50ZXJjZXB0b3JEYXRhLmdldEludGVyY2VwdGVkQ2xhc3Nlc09uKAogICAgICAgICAgZG9taW5hdG9yLnNlbGVjdG9yLm5hbWUsIF9jbG9zZWRXb3JsZCk7CgogICAgICAvLyBJZiB3ZSBmb3VuZCB0aGF0IHdlIG5lZWQgbnVtYmVyLCB3ZSBtdXN0IHN0aWxsIGdvIHRocm91Z2ggYWxsCiAgICAgIC8vIHVzZXMgdG8gY2hlY2sgaWYgdGhleSByZXF1aXJlIGludCwgb3IgZG91YmxlLgogICAgICBpZiAoaW50ZXJjZXB0ZWRDbGFzc2VzLmNvbnRhaW5zKF9jb21tb25FbGVtZW50cy5qc051bWJlckNsYXNzKSAmJgogICAgICAgICAgIShpbnRlcmNlcHRlZENsYXNzZXMuY29udGFpbnMoX2NvbW1vbkVsZW1lbnRzLmpzRG91YmxlQ2xhc3MpIHx8CiAgICAgICAgICAgICAgaW50ZXJjZXB0ZWRDbGFzc2VzLmNvbnRhaW5zKF9jb21tb25FbGVtZW50cy5qc0ludENsYXNzKSkpIHsKICAgICAgICBTZXQ8Q2xhc3NFbnRpdHk+IHJlcXVpcmVkOwogICAgICAgIGZvciAoSEluc3RydWN0aW9uIHVzZXIgaW4gbm9kZS51c2VkQnkpIHsKICAgICAgICAgIGlmICh1c2VyIGlzISBISW52b2tlKSBjb250aW51ZTsKICAgICAgICAgIFNldDxDbGFzc0VudGl0eT4gaW50ZXJjZXB0ZWQgPSBfaW50ZXJjZXB0b3JEYXRhCiAgICAgICAgICAgICAgLmdldEludGVyY2VwdGVkQ2xhc3Nlc09uKHVzZXIuc2VsZWN0b3IubmFtZSwgX2Nsb3NlZFdvcmxkKTsKICAgICAgICAgIGlmIChpbnRlcmNlcHRlZC5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNJbnRDbGFzcykpIHsKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHR5cGUgYXJndW1lbnQgd2hlbiBhbGwgdXNlcyBvZgogICAgICAgICAgICAvLyBpbnRlcmNlcHRlZCBjbGFzc2VzIGV4cGVjdCBlbnRpdGllcyBpbnN0ZWFkIG9mIGVsZW1lbnRzLgogICAgICAgICAgICByZXF1aXJlZCA/Pz0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgICAgICAgICAgcmVxdWlyZWQuYWRkKF9jb21tb25FbGVtZW50cy5qc0ludENsYXNzKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChpbnRlcmNlcHRlZC5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNEb3VibGVDbGFzcykpIHsKICAgICAgICAgICAgLy8gVE9ETyhqb2hubml3aW50aGVyKTogVXNlIHR5cGUgYXJndW1lbnQgd2hlbiBhbGwgdXNlcyBvZgogICAgICAgICAgICAvLyBpbnRlcmNlcHRlZCBjbGFzc2VzIGV4cGVjdCBlbnRpdGllcyBpbnN0ZWFkIG9mIGVsZW1lbnRzLgogICAgICAgICAgICByZXF1aXJlZCA/Pz0gbmV3IFNldDxDbGFzc0VudGl0eT4oKTsKICAgICAgICAgICAgcmVxdWlyZWQuYWRkKF9jb21tb25FbGVtZW50cy5qc0RvdWJsZUNsYXNzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gRG9uJ3QgbW9kaWZ5IHRoZSByZXN1bHQgb2YKICAgICAgICAvLyBbX2ludGVyY2VwdG9yRGF0YS5nZXRJbnRlcmNlcHRlZENsYXNzZXNPbl0uCiAgICAgICAgaWYgKHJlcXVpcmVkICE9IG51bGwpIHsKICAgICAgICAgIGludGVyY2VwdGVkQ2xhc3NlcyA9IGludGVyY2VwdGVkQ2xhc3Nlcy51bmlvbihyZXF1aXJlZCk7CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBVc2UgdHlwZSBhcmd1bWVudCB3aGVuIGFsbCB1c2VzIG9mIGludGVyY2VwdGVkCiAgICAgIC8vIGNsYXNzZXMgZXhwZWN0IGVudGl0aWVzIGluc3RlYWQgb2YgZWxlbWVudHMuCiAgICAgIGludGVyY2VwdGVkQ2xhc3NlcyA9IG5ldyBTZXQ8Q2xhc3NFbnRpdHk+KCk7CiAgICAgIGZvciAoSEluc3RydWN0aW9uIHVzZXIgaW4gbm9kZS51c2VkQnkpIHsKICAgICAgICBpZiAodXNlciBpcyBISW52b2tlRHluYW1pYyAmJgogICAgICAgICAgICB1c2VyLmlzQ2FsbE9uSW50ZXJjZXB0b3IoX2Nsb3NlZFdvcmxkKSAmJgogICAgICAgICAgICBub2RlID09IHVzZXIucmVjZWl2ZXIgJiYKICAgICAgICAgICAgdXNlQ291bnQodXNlciwgbm9kZSkgPT0gMSkgewogICAgICAgICAgaW50ZXJjZXB0ZWRDbGFzc2VzLmFkZEFsbChfaW50ZXJjZXB0b3JEYXRhLmdldEludGVyY2VwdGVkQ2xhc3Nlc09uKAogICAgICAgICAgICAgIHVzZXIuc2VsZWN0b3IubmFtZSwgX2Nsb3NlZFdvcmxkKSk7CiAgICAgICAgfSBlbHNlIGlmICh1c2VyIGlzIEhJbnZva2VTdXBlciAmJgogICAgICAgICAgICB1c2VyLmlzQ2FsbE9uSW50ZXJjZXB0b3IoX2Nsb3NlZFdvcmxkKSAmJgogICAgICAgICAgICBub2RlID09IHVzZXIucmVjZWl2ZXIgJiYKICAgICAgICAgICAgdXNlQ291bnQodXNlciwgbm9kZSkgPT0gMSkgewogICAgICAgICAgaW50ZXJjZXB0ZWRDbGFzc2VzLmFkZEFsbChfaW50ZXJjZXB0b3JEYXRhLmdldEludGVyY2VwdGVkQ2xhc3Nlc09uKAogICAgICAgICAgICAgIHVzZXIuc2VsZWN0b3IubmFtZSwgX2Nsb3NlZFdvcmxkKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIFVzZSBhIG1vc3QgZ2VuZXJhbCBpbnRlcmNlcHRvciBmb3Igb3RoZXIgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlLAogICAgICAgICAgLy8gaXMtY2hlY2tzIGFuZCBlc2NhcGluZyBpbnRlcmNlcHRvcnMuCiAgICAgICAgICBpbnRlcmNlcHRlZENsYXNzZXMuYWRkQWxsKF9pbnRlcmNlcHRvckRhdGEuaW50ZXJjZXB0ZWRDbGFzc2VzKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIG5vZGUuaW50ZXJjZXB0ZWRDbGFzc2VzID0gaW50ZXJjZXB0ZWRDbGFzc2VzOwoKICAgIEhJbnN0cnVjdGlvbiByZWNlaXZlciA9IG5vZGUucmVjZWl2ZXI7CgogICAgLy8gVHJ5IGNvbXB1dGluZyBhIGNvbnN0YW50IGludGVyY2VwdG9yLgogICAgSEluc3RydWN0aW9uIGNvbnN0YW50SW50ZXJjZXB0b3IgPQogICAgICAgIHRyeUNvbXB1dGVDb25zdGFudEludGVyY2VwdG9yKHJlY2VpdmVyLCBpbnRlcmNlcHRlZENsYXNzZXMpOwogICAgaWYgKGNvbnN0YW50SW50ZXJjZXB0b3IgIT0gbnVsbCkgewogICAgICBub2RlLmJsb2NrLnJld3JpdGUobm9kZSwgY29uc3RhbnRJbnRlcmNlcHRvcik7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvLyBJZiBpdCBpcyBhIGNvbmRpdGlvbmFsIGNvbnN0YW50IGludGVyY2VwdG9yIGFuZCB3YXMgbm90IHN0cmVuZ3RoZW5lZCB0byBhCiAgICAvLyBjb25zdGFudCBpbnRlcmNlcHRvciB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgbW9yZSB3ZSBjYW4gZG8uCiAgICBpZiAobm9kZS5pc0NvbmRpdGlvbmFsQ29uc3RhbnRJbnRlcmNlcHRvcikgcmV0dXJuIGZhbHNlOwoKICAgIC8vIERvIHdlIGhhdmUgYW4gJ2FsbW9zdCBjb25zdGFudCcgaW50ZXJjZXB0b3I/ICBUaGUgcmVjZWl2ZXIgY291bGQgYmUKICAgIC8vIGBudWxsYCBidXQgbm90IGFueSBvdGhlciBKYXZhU2NyaXB0IGZhbHN5IHZhbHVlLCBgbnVsbGAgdmFsdWVzIGNhdXNlCiAgICAvLyBgTm9TdWNoTWV0aG9kRXJyb3JgcywgYW5kIGlmIHRoZSByZWNlaXZlciB3YXMgbm90IG51bGwgd2Ugd291bGQgaGF2ZSBhCiAgICAvLyBjb25zdGFudCBpbnRlcmNlcHRvciBgQ2AuICBUaGVuIHdlIGNhbiB1c2UgYChyZWNlaXZlciAmJiBDKWAgZm9yIHRoZQogICAgLy8gaW50ZXJjZXB0b3IuCiAgICBpZiAocmVjZWl2ZXIuaXNOdWxsKF9hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICBpZiAoIWludGVyY2VwdGVkQ2xhc3Nlcy5jb250YWlucyhfY29tbW9uRWxlbWVudHMuanNOdWxsQ2xhc3MpKSB7CiAgICAgICAgLy8gQ2FuIHVzZSBgKHJlY2VpdmVyICYmIEMpYCBvbmx5IGlmIHJlY2VpdmVyIGlzIGVpdGhlciBudWxsIG9yIHRydXRoeS4KICAgICAgICBpZiAoIShyZWNlaXZlcgogICAgICAgICAgICAgICAgLmlzUHJpbWl0aXZlTnVtYmVyKF9hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgICAgLmlzUG90ZW50aWFsbHlUcnVlIHx8CiAgICAgICAgICAgIHJlY2VpdmVyCiAgICAgICAgICAgICAgICAuaXNQcmltaXRpdmVCb29sZWFuKF9hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgICAgLmlzUG90ZW50aWFsbHlUcnVlIHx8CiAgICAgICAgICAgIHJlY2VpdmVyCiAgICAgICAgICAgICAgICAuaXNQcmltaXRpdmVTdHJpbmcoX2Fic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgICAgICAgICAuaXNQb3RlbnRpYWxseVRydWUpKSB7CiAgICAgICAgICBDbGFzc0VudGl0eSBpbnRlcmNlcHRvckNsYXNzID0gdHJ5Q29tcHV0ZUNvbnN0YW50SW50ZXJjZXB0b3JGcm9tVHlwZSgKICAgICAgICAgICAgICBfYWJzdHJhY3RWYWx1ZURvbWFpbi5leGNsdWRlTnVsbChyZWNlaXZlci5pbnN0cnVjdGlvblR5cGUpLAogICAgICAgICAgICAgIGludGVyY2VwdGVkQ2xhc3Nlcyk7CiAgICAgICAgICBpZiAoaW50ZXJjZXB0b3JDbGFzcyAhPSBudWxsKSB7CiAgICAgICAgICAgIEhJbnN0cnVjdGlvbiBjb25zdGFudEluc3RydWN0aW9uID0gX2dyYXBoLmFkZENvbnN0YW50KAogICAgICAgICAgICAgICAgbmV3IEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZShpbnRlcmNlcHRvckNsYXNzKSwgX2Nsb3NlZFdvcmxkKTsKICAgICAgICAgICAgbm9kZS5jb25kaXRpb25hbENvbnN0YW50SW50ZXJjZXB0b3IgPSBjb25zdGFudEluc3RydWN0aW9uOwogICAgICAgICAgICBjb25zdGFudEluc3RydWN0aW9uLnVzZWRCeS5hZGQobm9kZSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBUcnkgY3JlYXRpbmcgYSBvbmUtc2hvdCBpbnRlcmNlcHRvciBvciBvcHRpbWl6ZWQgaXMtY2hlY2sKICAgIGlmIChub2RlLnVzZWRCeS5sZW5ndGggIT0gMSkgcmV0dXJuIGZhbHNlOwogICAgSEluc3RydWN0aW9uIHVzZXIgPSBub2RlLnVzZWRCeS5zaW5nbGU7CgogICAgLy8gSWYgdGhlIGludGVyY2VwdG9yIFtub2RlXSB3YXMgbG9vcCBob2lzdGVkLCB3ZSBrZWVwIHRoZSBpbnRlcmNlcHRvci4KICAgIGlmICghdXNlci5oYXNTYW1lTG9vcEhlYWRlckFzKG5vZGUpKSByZXR1cm4gZmFsc2U7CgogICAgYm9vbCByZXBsYWNlVXNlcldpdGgoSEluc3RydWN0aW9uIHJlcGxhY2VtZW50KSB7CiAgICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gdXNlci5ibG9jazsKICAgICAgYmxvY2suYWRkQWZ0ZXIodXNlciwgcmVwbGFjZW1lbnQpOwogICAgICBibG9jay5yZXdyaXRlKHVzZXIsIHJlcGxhY2VtZW50KTsKICAgICAgYmxvY2sucmVtb3ZlKHVzZXIpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgaWYgKHVzZXIgaXMgSElzKSB7CiAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gcmV3cml0ZSB0aGUgaXMtY2hlY2sgdG8gdXNlICdpbnN0YW5jZW9mJywgaS5lLiByZXdyaXRlCiAgICAgIC8vICJnZXRJbnRlcmNlcHRvcih4KS4kaXNUIiB0byAieCBpbnN0YW5jZW9mIFQiLgogICAgICBpZiAobm9kZSA9PSB1c2VyLmludGVyY2VwdG9yKSB7CiAgICAgICAgaWYgKF9pbnRlcmNlcHRvckRhdGEubWF5R2VuZXJhdGVJbnN0YW5jZW9mQ2hlY2soCiAgICAgICAgICAgIHVzZXIudHlwZUV4cHJlc3Npb24sIF9jbG9zZWRXb3JsZCkpIHsKICAgICAgICAgIEhJbnN0cnVjdGlvbiBpbnN0YW5jZW9mQ2hlY2sgPSBuZXcgSElzLmluc3RhbmNlT2YodXNlci50eXBlRXhwcmVzc2lvbiwKICAgICAgICAgICAgICB1c2VyLmV4cHJlc3Npb24sIHVzZXIuaW5zdHJ1Y3Rpb25UeXBlLCB1c2VyLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgICAgICAgIGluc3RhbmNlb2ZDaGVjay5zb3VyY2VFbGVtZW50ID0gdXNlci5zb3VyY2VFbGVtZW50OwogICAgICAgICAgcmV0dXJuIHJlcGxhY2VVc2VyV2l0aChpbnN0YW5jZW9mQ2hlY2spOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmICh1c2VyIGlzIEhJbnZva2VEeW5hbWljKSB7CiAgICAgIGlmIChub2RlID09IHVzZXIuaW5wdXRzWzBdKSB7CiAgICAgICAgLy8gUmVwbGFjZSB0aGUgdXNlciB3aXRoIGEgW0hPbmVTaG90SW50ZXJjZXB0b3JdLgogICAgICAgIEhDb25zdGFudCBudWxsQ29uc3RhbnQgPSBfZ3JhcGguYWRkQ29uc3RhbnROdWxsKF9jbG9zZWRXb3JsZCk7CiAgICAgICAgTGlzdDxISW5zdHJ1Y3Rpb24+IGlucHV0cyA9IG5ldyBMaXN0PEhJbnN0cnVjdGlvbj4uZnJvbSh1c2VyLmlucHV0cyk7CiAgICAgICAgaW5wdXRzWzBdID0gbnVsbENvbnN0YW50OwogICAgICAgIEhPbmVTaG90SW50ZXJjZXB0b3Igb25lU2hvdEludGVyY2VwdG9yID0gbmV3IEhPbmVTaG90SW50ZXJjZXB0b3IoCiAgICAgICAgICAgIF9hYnN0cmFjdFZhbHVlRG9tYWluLAogICAgICAgICAgICB1c2VyLnNlbGVjdG9yLAogICAgICAgICAgICB1c2VyLnJlY2VpdmVyVHlwZSwKICAgICAgICAgICAgaW5wdXRzLAogICAgICAgICAgICB1c2VyLmluc3RydWN0aW9uVHlwZSwKICAgICAgICAgICAgdXNlci50eXBlQXJndW1lbnRzLAogICAgICAgICAgICBpbnRlcmNlcHRlZENsYXNzZXMpOwogICAgICAgIG9uZVNob3RJbnRlcmNlcHRvci5zb3VyY2VJbmZvcm1hdGlvbiA9IHVzZXIuc291cmNlSW5mb3JtYXRpb247CiAgICAgICAgb25lU2hvdEludGVyY2VwdG9yLnNvdXJjZUVsZW1lbnQgPSB1c2VyLnNvdXJjZUVsZW1lbnQ7CiAgICAgICAgcmV0dXJuIHJlcGxhY2VVc2VyV2l0aChvbmVTaG90SW50ZXJjZXB0b3IpOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCByZXdyaXRlU2VsZkludGVyY2VwdG9yVXNlcyhISW50ZXJjZXB0b3Igbm9kZSkgewogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gbm9kZS5yZWNlaXZlcjsKCiAgICAvLyBBdCBpbnN0cnVjdGlvbnMgdGhhdCB1c2UgdGhlIGludGVyY2VwdG9yIGFuZCBpdHMgcmVjZWl2ZXIsIHRoZSByZWNlaXZlcgogICAgLy8gbWlnaHQgYmUgcmVmaW5lZCBhdCB0aGUgdXNlIHNpdGUuCgogICAgLy8gICAgIGR5bmFtaWMgeCA9IC4uLgogICAgLy8gICAgIGlmICh4IGlzIE11bWJsZSkgewogICAgLy8gICAgICAgcHJpbnQoeC5sZW5ndGgpOyAgLy8gU2VsZi1pbnRlcmNlcHRvciBoZXJlLgogICAgLy8gICAgIH0gZWxzZSB7CiAgICAvLyAgICAgICBwcmludCh4Lmxlbmd0aCk7ICAvLwogICAgLy8gICAgIH0KCiAgICBmaW5pc2hJbnZva2UoSEludm9rZSBpbnZva2UsIFNlbGVjdG9yIHNlbGVjdG9yKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBjYWxsUmVjZWl2ZXIgPSBpbnZva2UuZ2V0RGFydFJlY2VpdmVyKF9jbG9zZWRXb3JsZCk7CiAgICAgIGlmIChyZWNlaXZlci5ub25DaGVjaygpID09IGNhbGxSZWNlaXZlci5ub25DaGVjaygpKSB7CiAgICAgICAgU2V0PENsYXNzRW50aXR5PiBpbnRlcmNlcHRlZENsYXNzZXMgPSBfaW50ZXJjZXB0b3JEYXRhCiAgICAgICAgICAgIC5nZXRJbnRlcmNlcHRlZENsYXNzZXNPbihzZWxlY3Rvci5uYW1lLCBfY2xvc2VkV29ybGQpOwoKICAgICAgICBpZiAoY2FuVXNlU2VsZkZvckludGVyY2VwdG9yKGNhbGxSZWNlaXZlciwKICAgICAgICAgICAgaW50ZXJjZXB0ZWRDbGFzc2VzOiBpbnRlcmNlcHRlZENsYXNzZXMpKSB7CiAgICAgICAgICBpbnZva2UuY2hhbmdlVXNlKG5vZGUsIGNhbGxSZWNlaXZlcik7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogICAgZm9yIChISW5zdHJ1Y3Rpb24gdXNlciBpbiBub2RlLnVzZWRCeS50b0xpc3QoKSkgewogICAgICBpZiAodXNlciBpcyBISXMpIHsKICAgICAgICBpZiAodXNlci5pbnRlcmNlcHRvciA9PSBub2RlKSB7CiAgICAgICAgICBISW5zdHJ1Y3Rpb24gZXhwcmVzc2lvbiA9IHVzZXIuZXhwcmVzc2lvbjsKICAgICAgICAgIGlmIChjYW5Vc2VTZWxmRm9ySW50ZXJjZXB0b3IoZXhwcmVzc2lvbikpIHsKICAgICAgICAgICAgdXNlci5jaGFuZ2VVc2Uobm9kZSwgZXhwcmVzc2lvbik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHVzZXIgaXMgSEludm9rZUR5bmFtaWMpIHsKICAgICAgICBpZiAodXNlci5pc0NhbGxPbkludGVyY2VwdG9yKF9jbG9zZWRXb3JsZCkgJiYKICAgICAgICAgICAgbm9kZSA9PSB1c2VyLmlucHV0c1swXSAmJgogICAgICAgICAgICB1c2VDb3VudCh1c2VyLCBub2RlKSA9PSAxKSB7CiAgICAgICAgICBmaW5pc2hJbnZva2UodXNlciwgdXNlci5zZWxlY3Rvcik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHVzZXIgaXMgSEludm9rZVN1cGVyKSB7CiAgICAgICAgaWYgKHVzZXIuaXNDYWxsT25JbnRlcmNlcHRvcihfY2xvc2VkV29ybGQpICYmCiAgICAgICAgICAgIG5vZGUgPT0gdXNlci5pbnB1dHNbMF0gJiYKICAgICAgICAgICAgdXNlQ291bnQodXNlciwgbm9kZSkgPT0gMSkgewogICAgICAgICAgZmluaXNoSW52b2tlKHVzZXIsIHVzZXIuc2VsZWN0b3IpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUT0RPKHNyYSk6IEFyZSB0aGVyZSBvdGhlciBwYWlyZWQgdXNlcyBvZiB0aGUgcmVjZWl2ZXIgYW5kCiAgICAgICAgLy8gaW50ZXJjZXB0b3Igd2hlcmUgd2UgY2FuIG1ha2UgdXNlIG9mIGEgc3RyZW5ndGhlbmVkIHJlY2VpdmVyPwogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIHZpc2l0T25lU2hvdEludGVyY2VwdG9yKEhPbmVTaG90SW50ZXJjZXB0b3Igbm9kZSkgewogICAgLy8gJ1VuZG8nIHRoZSBvbmUtc2hvdCB0cmFuc2Zvcm1hdGlvbiBpZiB0aGUgcmVjZWl2ZXIgaGFzIGEgY29uc3RhbnQKICAgIC8vIGludGVyY2VwdG9yLgogICAgSEluc3RydWN0aW9uIGNvbnN0YW50ID0KICAgICAgICB0cnlDb21wdXRlQ29uc3RhbnRJbnRlcmNlcHRvcihub2RlLmlucHV0c1sxXSwgbm9kZS5pbnRlcmNlcHRlZENsYXNzZXMpOwoKICAgIGlmIChjb25zdGFudCA9PSBudWxsKSByZXR1cm4gZmFsc2U7CgogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBub2RlLnNlbGVjdG9yOwogICAgQWJzdHJhY3RWYWx1ZSByZWNlaXZlclR5cGUgPSBub2RlLnJlY2VpdmVyVHlwZTsKICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbjsKICAgIGlmIChzZWxlY3Rvci5pc0dldHRlcikgewogICAgICBpbnN0cnVjdGlvbiA9IG5ldyBISW52b2tlRHluYW1pY0dldHRlcigKICAgICAgICAgIHNlbGVjdG9yLAogICAgICAgICAgcmVjZWl2ZXJUeXBlLAogICAgICAgICAgbm9kZS5lbGVtZW50LAogICAgICAgICAgPEhJbnN0cnVjdGlvbj5bY29uc3RhbnQsIG5vZGUuaW5wdXRzWzFdXSwKICAgICAgICAgIHRydWUsCiAgICAgICAgICBub2RlLmluc3RydWN0aW9uVHlwZSwKICAgICAgICAgIG5vZGUuc291cmNlSW5mb3JtYXRpb24pOwogICAgfSBlbHNlIGlmIChzZWxlY3Rvci5pc1NldHRlcikgewogICAgICBpbnN0cnVjdGlvbiA9IG5ldyBISW52b2tlRHluYW1pY1NldHRlcigKICAgICAgICAgIHNlbGVjdG9yLAogICAgICAgICAgcmVjZWl2ZXJUeXBlLAogICAgICAgICAgbm9kZS5lbGVtZW50LAogICAgICAgICAgPEhJbnN0cnVjdGlvbj5bY29uc3RhbnQsIG5vZGUuaW5wdXRzWzFdLCBub2RlLmlucHV0c1syXV0sCiAgICAgICAgICB0cnVlLAogICAgICAgICAgbm9kZS5pbnN0cnVjdGlvblR5cGUsCiAgICAgICAgICBub2RlLnNvdXJjZUluZm9ybWF0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIExpc3Q8SEluc3RydWN0aW9uPiBpbnB1dHMgPSBuZXcgTGlzdDxISW5zdHJ1Y3Rpb24+LmZyb20obm9kZS5pbnB1dHMpOwogICAgICBpbnB1dHNbMF0gPSBjb25zdGFudDsKICAgICAgaW5zdHJ1Y3Rpb24gPSBuZXcgSEludm9rZUR5bmFtaWNNZXRob2Qoc2VsZWN0b3IsIHJlY2VpdmVyVHlwZSwgaW5wdXRzLAogICAgICAgICAgbm9kZS5pbnN0cnVjdGlvblR5cGUsIG5vZGUudHlwZUFyZ3VtZW50cywgbm9kZS5zb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICAgIGlzSW50ZXJjZXB0ZWQ6IHRydWUpOwogICAgfQoKICAgIEhCYXNpY0Jsb2NrIGJsb2NrID0gbm9kZS5ibG9jazsKICAgIGJsb2NrLmFkZEFmdGVyKG5vZGUsIGluc3RydWN0aW9uKTsKICAgIGJsb2NrLnJld3JpdGUobm9kZSwgaW5zdHJ1Y3Rpb24pOwogICAgcmV0dXJuIHRydWU7CiAgfQp9CoHlAE5OPAE2IyQxLjIqFRgBOQRDMQRLBEgNBE5QUlEEUjcEMyMMMSMlEQFEAUUBSAEyKAEMIhkfBAEMKxkBKyI0LBovCBoGBAEMPAEMJTEsNAE/B0ZOT0tLATs7HC8GEgQBNy9ILhQGQyhGKBYIBgFRRyAxHAQBLkFNNAEyAUUvMiolBgFQNwQBNUE/QCwITilNLE4qTSxGK01ER1BNTiwNT0cfAU5RSk5NUC5GTxgIBgERBAFEGQgzM1AIGg0GEwQBPzoBDC1IUVFPOBMGASYBKgFRTk9QIQdKBygHUU9RIQEpOU0lJzcmKkUyAUc3SEpKIzEqOkpCR0gxNgxFR0gxOQwKJjcgQwoIDU02My8mNiUpTjIrNiUpTjIRTTJKEQoIBgEyASsBLSdFJzUUBgFRQj0BS0xOTBRDR1AXOSYVOiYVOSdQSiMqQ09HMhoMCggGAUEvLAFMNwE1JikoGhQGARdONyY5MlFOPjMKCCkkOkdOIkoiGx8UIiAhRz80CAYBEgQBNysBTykBGx45FCINATZIPD9DATM3MAoIBgE2GSg1Ni4MCis2JiktCik2JiktCg9GSQgGBAEMO0kUHFABKAEnNB4dLhQYGDQQICMkLhQYGEQQICMNTBxNTCAGASQnJhEEAgE0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL2ludGVyY2VwdG9yX3NpbXBsaWZpZXIuZGFydDhzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2EvdHlwZXNfcHJvcGFnYXRpb24uZGFydMAAUKcvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICcuLi9jb21tb25fZWxlbWVudHMuZGFydCcgc2hvdyBDb21tb25FbGVtZW50czsKaW1wb3J0ICcuLi9lbGVtZW50cy9lbnRpdGllcy5kYXJ0JzsKaW1wb3J0ICcuLi9lbGVtZW50cy90eXBlcy5kYXJ0JzsKaW1wb3J0ICcuLi9pbmZlcnJlci9hYnN0cmFjdF92YWx1ZV9kb21haW4uZGFydCc7CmltcG9ydCAnLi4vaW5mZXJyZXIvdHlwZXMuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICdsb2dnaW5nLmRhcnQnOwppbXBvcnQgJ25vZGVzLmRhcnQnOwppbXBvcnQgJ29wdGltaXplLmRhcnQnOwoKLy8vIFR5cGUgcHJvcGFnYXRpb24gYW5kIGNvbmRpdGlvbmluZyBjaGVjayBpbnNlcnRpb24uCi8vLwovLy8gMS4gVHlwZSBwcm9wYWdhdGlvbiAoZGF0YWZsb3cpIHRvIGRldGVybWluZSB0aGUgdHlwZXMgb2YgYWxsIG5vZGVzLgovLy8KLy8vIDIuIEhUeXBlS25vd24gbm9kZSBpbnNlcnRpb24gY2FwdHVyZXMgdHlwZSBzdHJlbmd0aGVuaW5nLgovLy8KLy8vIDMuIENvbmRpdGlvbmluZyBjaGVjayBpbnNlcnRpb24gaW5zZXJ0cyByZWNlaXZlciBhbmQgYXJndW1lbnQgY2hlY2tzIG9uCi8vLyAgICBjYWxscyB3aGVyZSB0aGF0IGNhbGwgaXMgZXhwZWN0ZWQgdG8gYmUgcmVwbGFjZWQgd2l0aCBhbiBpbnN0cnVjdGlvbiB3aXRoCi8vLyAgICBhIG5hcnJvd2VyIGRvbWFpbi4gRm9yIGV4YW1wbGUgYHtOdWxsLGludH0gKyB7aW50fWAgd291bGQgaW5zZXJ0IGFuCi8vLyAgICByZWNlaXZlciBjaGVjayB0byBzdHJlbmd0aGVuIHRoZSB0eXBlcyB0byBge2ludH0gKyB7aW50fWAgdG8gYWxsb3cgdGhlCi8vLyAgICBjYWxsIG9mIGBvcGVyYXRvcitgIHRvIGJlIHJlcGxhY2VkIHdpdGggYSBIQWRkIGluc3RydWN0aW9uLgovLy8KLy8vIEFuYWx5c2lzIGFuZCBub2RlIGluc2VydGlvbiBhcmUgZG9uZSB0b2dldGhlciwgc2luY2UgaW5zZXJ0aW9uIGltcHJvdmVzIHRoZQovLy8gdHlwZSBwcm9wYWdhdGlvbiByZXN1bHRzLgovLyBUT0RPKHNyYSk6IFRoZSBJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXIgc2hvdWxkIGJlIGNvbnN1bHRlZCBmb3IgYmV0dGVyCi8vIHRhcmdldGVkIGNvbmRpdGlvbmluZyBjaGVja3MuCmNsYXNzIFNzYVR5cGVQcm9wYWdhdG9yIGV4dGVuZHMgSEJhc2VWaXNpdG9yIGltcGxlbWVudHMgT3B0aW1pemF0aW9uUGhhc2UgewogIGZpbmFsIE1hcDxpbnQsIEhJbnN0cnVjdGlvbj4gd29ya21hcCA9IG5ldyBNYXA8aW50LCBISW5zdHJ1Y3Rpb24+KCk7CiAgZmluYWwgTGlzdDxpbnQ+IHdvcmtsaXN0ID0gbmV3IExpc3Q8aW50PigpOwogIGZpbmFsIE1hcDxISW5zdHJ1Y3Rpb24sIEZ1bmN0aW9uPiBwZW5kaW5nT3B0aW1pemF0aW9ucyA9CiAgICAgIG5ldyBNYXA8SEluc3RydWN0aW9uLCBGdW5jdGlvbj4oKTsKCiAgZmluYWwgR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHMgcmVzdWx0czsKICBmaW5hbCBDb21tb25FbGVtZW50cyBjb21tb25FbGVtZW50czsKICBmaW5hbCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQ7CiAgZmluYWwgT3B0aW1pemF0aW9uVGVzdExvZyBfbG9nOwogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgbmFtZSA9PiAnU3NhVHlwZVByb3BhZ2F0b3InOwoKICBTc2FUeXBlUHJvcGFnYXRvcigKICAgICAgdGhpcy5yZXN1bHRzLCB0aGlzLmNvbW1vbkVsZW1lbnRzLCB0aGlzLmNsb3NlZFdvcmxkLCB0aGlzLl9sb2cpOwoKICBBYnN0cmFjdFZhbHVlRG9tYWluIGdldCBhYnN0cmFjdFZhbHVlRG9tYWluID0+CiAgICAgIGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW47CgogIEFic3RyYWN0VmFsdWUgY29tcHV0ZVR5cGUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24uYWNjZXB0KHRoaXMpOwogIH0KCiAgLy8gUmUtY29tcHV0ZSBhbmQgdXBkYXRlIHRoZSB0eXBlIG9mIHRoZSBpbnN0cnVjdGlvbi4gUmV0dXJucwogIC8vIHdoZXRoZXIgb3Igbm90IHRoZSB0eXBlIHdhcyBjaGFuZ2VkLgogIGJvb2wgdXBkYXRlVHlwZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIENvbXB1dGUgb2xkIGFuZCBuZXcgdHlwZXMuCiAgICBBYnN0cmFjdFZhbHVlIG9sZFR5cGUgPSBpbnN0cnVjdGlvbi5pbnN0cnVjdGlvblR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIG5ld1R5cGUgPSBjb21wdXRlVHlwZShpbnN0cnVjdGlvbik7CiAgICBhc3NlcnQobmV3VHlwZSAhPSBudWxsKTsKICAgIC8vIFdlIHVuY29uZGl0aW9uYWxseSByZXBsYWNlIHRoZSBwcm9wYWdhdGVkIHR5cGUgd2l0aCB0aGUgbmV3IHR5cGUuIFRoZQogICAgLy8gY29tcHV0ZVR5cGUgbXVzdCBtYWtlIHN1cmUgdGhhdCB3ZSBldmVudHVhbGx5IHJlYWNoIGEgc3RhYmxlIHN0YXRlLgogICAgaW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25UeXBlID0gbmV3VHlwZTsKICAgIHJldHVybiBvbGRUeXBlICE9IG5ld1R5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0R3JhcGgoSEdyYXBoIGdyYXBoKSB7CiAgICB2aXNpdERvbWluYXRvclRyZWUoZ3JhcGgpOwogICAgcHJvY2Vzc1dvcmtsaXN0KCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2aXNpdEJhc2ljQmxvY2soSEJhc2ljQmxvY2sgYmxvY2spIHsKICAgIGlmIChibG9jay5pc0xvb3BIZWFkZXIoKSkgewogICAgICBibG9jay5mb3JFYWNoUGhpKChIUGhpIHBoaSkgewogICAgICAgIC8vIFNldCB0aGUgaW5pdGlhbCB0eXBlIGZvciB0aGUgcGhpLiBXZSdyZSBub3QgdXNpbmcgdGhlIHR5cGUKICAgICAgICAvLyB0aGUgcGhpIHRoaW5rcyBpdCBoYXMgYmVjYXVzZSBuZXcgb3B0aW1pemF0aW9ucyBtYXkgaW1wbHkKICAgICAgICAvLyBjaGFuZ2luZyBpdC4KICAgICAgICAvLyBJbiB0aGVvcnkgd2Ugd291bGQgbmVlZCB0byBtYXJrCiAgICAgICAgLy8gdGhlIHR5cGUgb2YgYWxsIG90aGVyIGluY29taW5nIGVkZ2VzIGFzICJ1bmluaXRpYWxpemVkIiBhbmQgdGFrZSB0aGlzCiAgICAgICAgLy8gaW50byBhY2NvdW50IHdoZW4gZG9pbmcgdGhlIHByb3BhZ2F0aW9uIGluc2lkZSB0aGUgcGhpcy4gSnVzdAogICAgICAgIC8vIHNldHRpbmcgdGhlIHByb3BhZ2F0ZWQgdHlwZSBpcyBob3dldmVyIGVhc2llci4KICAgICAgICBwaGkuaW5zdHJ1Y3Rpb25UeXBlID0gcGhpLmlucHV0c1swXS5pbnN0cnVjdGlvblR5cGU7CiAgICAgICAgYWRkVG9Xb3JrTGlzdChwaGkpOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGJsb2NrLmZvckVhY2hQaGkoKEhQaGkgcGhpKSB7CiAgICAgICAgaWYgKHVwZGF0ZVR5cGUocGhpKSkgewogICAgICAgICAgYWRkRGVwZW5kZW50SW5zdHJ1Y3Rpb25zVG9Xb3JrTGlzdChwaGkpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgSEluc3RydWN0aW9uIGluc3RydWN0aW9uID0gYmxvY2suZmlyc3Q7CiAgICB3aGlsZSAoaW5zdHJ1Y3Rpb24gIT0gbnVsbCkgewogICAgICBpZiAodXBkYXRlVHlwZShpbnN0cnVjdGlvbikpIHsKICAgICAgICBhZGREZXBlbmRlbnRJbnN0cnVjdGlvbnNUb1dvcmtMaXN0KGluc3RydWN0aW9uKTsKICAgICAgfQogICAgICBpbnN0cnVjdGlvbiA9IGluc3RydWN0aW9uLm5leHQ7CiAgICB9CiAgfQoKICB2b2lkIHByb2Nlc3NXb3JrbGlzdCgpIHsKICAgIGRvIHsKICAgICAgd2hpbGUgKCF3b3JrbGlzdC5pc0VtcHR5KSB7CiAgICAgICAgaW50IGlkID0gd29ya2xpc3QucmVtb3ZlTGFzdCgpOwogICAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IHdvcmttYXBbaWRdOwogICAgICAgIGFzc2VydChpbnN0cnVjdGlvbiAhPSBudWxsKTsKICAgICAgICB3b3JrbWFwLnJlbW92ZShpZCk7CiAgICAgICAgaWYgKHVwZGF0ZVR5cGUoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgICBhZGREZXBlbmRlbnRJbnN0cnVjdGlvbnNUb1dvcmtMaXN0KGluc3RydWN0aW9uKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gV2hpbGUgcHJvY2Vzc2luZyB0aGUgb3B0aW1pemFibGUgYXJpdGhtZXRpYyBpbnN0cnVjdGlvbnMsIHdlCiAgICAgIC8vIG1heSBkaXNjb3ZlciBiZXR0ZXIgdHlwZSBpbmZvcm1hdGlvbiBmb3IgZG9taW5hdGVkIHVzZXJzIG9mCiAgICAgIC8vIHJlcGxhY2VkIG9wZXJhbmRzLCBzbyB3ZSBtYXkgbmVlZCB0byB0YWtlIGFub3RoZXIgc3RhYiBhdAogICAgICAvLyBlbXB0eWluZyB0aGUgd29ya2xpc3QgYWZ0ZXJ3YXJkcy4KICAgICAgcHJvY2Vzc1BlbmRpbmdPcHRpbWl6YXRpb25zKCk7CiAgICB9IHdoaWxlICghd29ya2xpc3QuaXNFbXB0eSk7CiAgfQoKICB2b2lkIGFkZFRvV29ya0xpc3QoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBmaW5hbCBpbnQgaWQgPSBpbnN0cnVjdGlvbi5pZDsKCiAgICBpZiAoIXdvcmttYXAuY29udGFpbnNLZXkoaWQpKSB7CiAgICAgIHdvcmtsaXN0LmFkZChpZCk7CiAgICAgIHdvcmttYXBbaWRdID0gaW5zdHJ1Y3Rpb247CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHZpc2l0QmluYXJ5QXJpdGhtZXRpYyhIQmluYXJ5QXJpdGhtZXRpYyBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5sZWZ0OwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24ucmlnaHQ7CiAgICBpZiAobGVmdC5pc0ludGVnZXIoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgIHJpZ2h0LmlzSW50ZWdlcihhYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmludFR5cGU7CiAgICB9CiAgICBpZiAobGVmdC5pc0RvdWJsZShhYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmRvdWJsZVR5cGU7CiAgICB9CiAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5udW1UeXBlOwogIH0KCiAgQWJzdHJhY3RWYWx1ZSBjaGVja1Bvc2l0aXZlSW50ZWdlcihIQmluYXJ5QXJpdGhtZXRpYyBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5sZWZ0OwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW5zdHJ1Y3Rpb24ucmlnaHQ7CiAgICBpZiAobGVmdC5pc1Bvc2l0aXZlSW50ZWdlcihhYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgcmlnaHQuaXNQb3NpdGl2ZUludGVnZXIoYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gYWJzdHJhY3RWYWx1ZURvbWFpbi5wb3NpdGl2ZUludFR5cGU7CiAgICB9CiAgICByZXR1cm4gdmlzaXRCaW5hcnlBcml0aG1ldGljKGluc3RydWN0aW9uKTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdmlzaXRNdWx0aXBseShITXVsdGlwbHkgaW5zdHJ1Y3Rpb24pIHsKICAgIHJldHVybiBjaGVja1Bvc2l0aXZlSW50ZWdlcihpbnN0cnVjdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHZpc2l0QWRkKEhBZGQgaW5zdHJ1Y3Rpb24pIHsKICAgIHJldHVybiBjaGVja1Bvc2l0aXZlSW50ZWdlcihpbnN0cnVjdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHZpc2l0RGl2aWRlKEhEaXZpZGUgaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIEFsd2F5cyBkb3VibGUsIGFzIGluaXRpYWxpemVkLgogICAgcmV0dXJuIGluc3RydWN0aW9uLmluc3RydWN0aW9uVHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdmlzaXRUcnVuY2F0aW5nRGl2aWRlKEhUcnVuY2F0aW5nRGl2aWRlIGluc3RydWN0aW9uKSB7CiAgICAvLyBBbHdheXMgYXMgaW5pdGlhbGl6ZWQuCiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB2aXNpdFJlbWFpbmRlcihIUmVtYWluZGVyIGluc3RydWN0aW9uKSB7CiAgICAvLyBBbHdheXMgYXMgaW5pdGlhbGl6ZWQuCiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25UeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB2aXNpdE5lZ2F0ZShITmVnYXRlIGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gb3BlcmFuZCA9IGluc3RydWN0aW9uLm9wZXJhbmQ7CiAgICAvLyBXZSBoYXZlIGludGVnZXIgc3ViY2xhc3NlcyB0aGF0IHJlcHJlc2VudCByYW5nZXMsIHNvIHdpZGVuIGFueSBpbnQKICAgIC8vIHN1YmNsYXNzIHRvIGZ1bGwgaW50ZWdlci4KICAgIGlmIChvcGVyYW5kLmlzSW50ZWdlcihhYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBhYnN0cmFjdFZhbHVlRG9tYWluLmludFR5cGU7CiAgICB9CiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24ub3BlcmFuZC5pbnN0cnVjdGlvblR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHZpc2l0QWJzKEhBYnMgaW5zdHJ1Y3Rpb24pIHsKICAgIC8vIFRPRE8oc3JhKTogQ2FuIG5hcnJvdyB0byBub24tbmVnYXRpdmUgdHlwZSBmb3IgaW50ZWdlcnMuCiAgICByZXR1cm4gaW5zdHJ1Y3Rpb24ub3BlcmFuZC5pbnN0cnVjdGlvblR5cGU7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHZpc2l0SW5zdHJ1Y3Rpb24oSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24uaW5zdHJ1Y3Rpb25UeXBlICE9IG51bGwpOwogICAgcmV0dXJuIGluc3RydWN0aW9uLmluc3RydWN0aW9uVHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdmlzaXRQaGkoSFBoaSBwaGkpIHsKICAgIEFic3RyYWN0VmFsdWUgY2FuZGlkYXRlVHlwZSA9IGFic3RyYWN0VmFsdWVEb21haW4uZW1wdHlUeXBlOwogICAgZm9yIChpbnQgaSA9IDAsIGxlbmd0aCA9IHBoaS5pbnB1dHMubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgQWJzdHJhY3RWYWx1ZSBpbnB1dFR5cGUgPSBwaGkuaW5wdXRzW2ldLmluc3RydWN0aW9uVHlwZTsKICAgICAgY2FuZGlkYXRlVHlwZSA9IGFic3RyYWN0VmFsdWVEb21haW4udW5pb24oY2FuZGlkYXRlVHlwZSwgaW5wdXRUeXBlKTsKICAgIH0KICAgIHJldHVybiBjYW5kaWRhdGVUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB2aXNpdFR5cGVDb252ZXJzaW9uKEhUeXBlQ29udmVyc2lvbiBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5zdHJ1Y3Rpb24uY2hlY2tlZElucHV0OwogICAgQWJzdHJhY3RWYWx1ZSBpbnB1dFR5cGUgPSBpbnB1dC5pbnN0cnVjdGlvblR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIGNoZWNrZWRUeXBlID0gaW5zdHJ1Y3Rpb24uY2hlY2tlZFR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIG91dHB1dFR5cGUgPQogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uaW50ZXJzZWN0aW9uKGNoZWNrZWRUeXBlLCBpbnB1dFR5cGUpOwogICAgb3V0cHV0VHlwZSA9IF9udW1lcmljRml4dXAob3V0cHV0VHlwZSwgaW5wdXRUeXBlLCBjaGVja2VkVHlwZSk7CiAgICBpZiAoaW5wdXRUeXBlICE9IG91dHB1dFR5cGUpIHsKICAgICAgLy8gUmVwbGFjZSBkb21pbmF0ZWQgdXNlcyBvZiBpbnB1dCB3aXRoIHVzZXMgb2YgdGhpcyBIVHlwZUNvbnZlcnNpb24gc28KICAgICAgLy8gdGhlIHVzZXMgYmVuZWZpdCBmcm9tIHRoZSBzdHJvbmdlciB0eXBlLgogICAgICAvLwogICAgICAvLyBUaGUgZGVwZW5kZW5jeSBvbiB0aGUgY2hlY2tlZCB2YWx1ZSBhbHNvIGltcHJvdmVzIHRoZSBnZW5lcmF0ZWQKICAgICAgLy8gSmF2YVNjcmlwdC4gTWFueSBjaGVja3MgYXJlIGNvbXBpbGVkIHRvIGEgZnVuY3Rpb24gY2FsbCBleHByZXNzaW9uIHRoYXQKICAgICAgLy8gcmV0dXJucyB0aGUgY2hlY2tlZCByZXN1bHQsIHNvIHRoZSBjaGVjayBjYW4gYmUgZ2VuZXJhdGVkIGFzIGEKICAgICAgLy8gc3ViZXhwcmVzc2lvbiByYXRoZXIgdGhhbiBhIHNlcGFyYXRlIHN0YXRlbWVudC4KICAgICAgLy8KICAgICAgLy8gRG8gbm90IHJlcGxhY2UgbG9jYWwgYWNjZXNzZXMsIHNpbmNlIHRoZSBsb2NhbCBtdXN0IGJlIGEgSExvY2FsVmFsdWUsCiAgICAgIC8vIG5vdCBhIEhUeXBlQ29udmVyc2lvbi4KICAgICAgaWYgKCEoaW5wdXQgaXMgSFBhcmFtZXRlclZhbHVlICYmIGlucHV0LnVzZWRBc1ZhcmlhYmxlKCkpKSB7CiAgICAgICAgaW5wdXQucmVwbGFjZUFsbFVzZXJzRG9taW5hdGVkQnkoaW5zdHJ1Y3Rpb24ubmV4dCwgaW5zdHJ1Y3Rpb24pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gb3V0cHV0VHlwZTsKICB9CgogIEFic3RyYWN0VmFsdWUgX251bWVyaWNGaXh1cChBYnN0cmFjdFZhbHVlIG91dHB1dFR5cGUsIEFic3RyYWN0VmFsdWUgaW5wdXRUeXBlLAogICAgICBBYnN0cmFjdFZhbHVlIGNoZWNrZWRUeXBlKSB7CiAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0VtcHR5KG91dHB1dFR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgLy8gSW50ZXJzZWN0aW9uIG9mIGRvdWJsZSBhbmQgaW50ZWdlciBjb25mbGljdHMgKGlzIGVtcHR5KSwgYnV0IEpTIG51bWJlcnMKICAgICAgLy8gY2FuIGJlIGJvdGggaW50IGFuZCBkb3VibGUgYXQgdGhlIHNhbWUgdGltZS4gIEZvciBleGFtcGxlLCB0aGUgaW5wdXQKICAgICAgLy8gY2FuIGJlIGEgbGl0ZXJhbCBkb3VibGUgJzguMCcgdGhhdCBpcyBtYXJrZWQgYXMgYW4gaW50ZWdlciAoYmVjYXVzZSAnaXMKICAgICAgLy8gaW50JyB3aWxsIHJldHVybiAndHJ1ZScpLiAgV2hhdCB3ZSByZWFsbHkgbmVlZCB0byBkbyBpcyBtYWtlIHRoZQogICAgICAvLyBvdmVybGFwIGJldHdlZW4gaW50IGFuZCBkb3VibGUgdmFsdWVzIGV4cGxpY2l0IGluIHRoZSBUeXBlTWFzayBzeXN0ZW0uCiAgICAgIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluLmlzSW50ZWdlck9yTnVsbChpbnB1dFR5cGUpLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uaXNEb3VibGVPck51bGwoY2hlY2tlZFR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwoaW5wdXRUeXBlKS5pc1BvdGVudGlhbGx5VHJ1ZSAmJgogICAgICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmlzTnVsbChjaGVja2VkVHlwZSkuaXNQb3RlbnRpYWxseVRydWUpIHsKICAgICAgICAgIG91dHB1dFR5cGUgPQogICAgICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uaW5jbHVkZU51bGwoYWJzdHJhY3RWYWx1ZURvbWFpbi5kb3VibGVUeXBlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgb3V0cHV0VHlwZSA9IGFic3RyYWN0VmFsdWVEb21haW4uZG91YmxlVHlwZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBvdXRwdXRUeXBlOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB2aXNpdFByaW1pdGl2ZUNoZWNrKEhQcmltaXRpdmVDaGVjayBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5zdHJ1Y3Rpb24uY2hlY2tlZElucHV0OwogICAgQWJzdHJhY3RWYWx1ZSBpbnB1dFR5cGUgPSBpbnB1dC5pbnN0cnVjdGlvblR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIGNoZWNrZWRUeXBlID0gaW5zdHJ1Y3Rpb24uY2hlY2tlZFR5cGU7CgogICAgLy8gV2UgbXVzdCBtYWtlIHN1cmUgYSByZWNlaXZlciBvciBhcmd1bWVudCBjaGVjayBkb2VzIG5vdCB0cnkgdG8gZG8gYW4gaW50CiAgICAvLyBjaGVjaywgYmVjYXVzZSBhbiBpbnQgY2hlY2sgaXMgbm90IGVub3VnaC4gIFdlIG9ubHkgZG8gYW4gaW50IGNoZWNrIGlmCiAgICAvLyB0aGUgaW5wdXQgaXMgaW50ZWdlciBvciBudWxsLgogICAgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uaXNOdW1iZXJPck51bGwoY2hlY2tlZFR5cGUpLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICBhYnN0cmFjdFZhbHVlRG9tYWluLmlzRG91YmxlT3JOdWxsKGNoZWNrZWRUeXBlKS5pc0RlZmluaXRlbHlGYWxzZSAmJgogICAgICAgIGlucHV0LmlzSW50ZWdlck9yTnVsbChhYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIGluc3RydWN0aW9uLmNoZWNrZWRUeXBlID0gYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRUeXBlOwogICAgfSBlbHNlIGlmIChhYnN0cmFjdFZhbHVlRG9tYWluCiAgICAgICAgICAgIC5pc0ludGVnZXJPck51bGwoY2hlY2tlZFR5cGUpCiAgICAgICAgICAgIC5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgaW5wdXQuaXNJbnRlZ2VyT3JOdWxsKGFic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlGYWxzZSkgewogICAgICBpbnN0cnVjdGlvbi5jaGVja2VkVHlwZSA9IGFic3RyYWN0VmFsdWVEb21haW4ubnVtVHlwZTsKICAgIH0KCiAgICBBYnN0cmFjdFZhbHVlIG91dHB1dFR5cGUgPQogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uaW50ZXJzZWN0aW9uKGNoZWNrZWRUeXBlLCBpbnB1dFR5cGUpOwogICAgb3V0cHV0VHlwZSA9IF9udW1lcmljRml4dXAob3V0cHV0VHlwZSwgaW5wdXRUeXBlLCBjaGVja2VkVHlwZSk7CiAgICBpZiAoaW5wdXRUeXBlICE9IG91dHB1dFR5cGUpIHsKICAgICAgLy8gUmVwbGFjZSBkb21pbmF0ZWQgdXNlcyBvZiBpbnB1dCB3aXRoIHVzZXMgb2YgdGhpcyBIUHJpbWl0aXZlQ2hlY2sgc28KICAgICAgLy8gdGhlIHVzZXMgYmVuZWZpdCBmcm9tIHRoZSBzdHJvbmdlciB0eXBlLgogICAgICAvLwogICAgICAvLyBEbyBub3QgcmVwbGFjZSBsb2NhbCB2YXJpYWJsZSBhY2Nlc3Nlcywgc2luY2UgdGhlIGxvY2FsIG11c3QgYmUgYQogICAgICAvLyBITG9jYWxWYWx1ZSwgbm90IGFub3RoZXIga2luZCBvZiBpbnN0cnVjdGlvbi4KICAgICAgaWYgKCEoaW5wdXQgaXMgSFBhcmFtZXRlclZhbHVlICYmIGlucHV0LnVzZWRBc1ZhcmlhYmxlKCkpKSB7CiAgICAgICAgaW5wdXQucmVwbGFjZUFsbFVzZXJzRG9taW5hdGVkQnkoaW5zdHJ1Y3Rpb24ubmV4dCwgaW5zdHJ1Y3Rpb24pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gb3V0cHV0VHlwZTsKICB9CgogIEBvdmVycmlkZQogIEFic3RyYWN0VmFsdWUgdmlzaXRUeXBlS25vd24oSFR5cGVLbm93biBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5zdHJ1Y3Rpb24uY2hlY2tlZElucHV0OwogICAgQWJzdHJhY3RWYWx1ZSBpbnB1dFR5cGUgPSBpbnB1dC5pbnN0cnVjdGlvblR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIG91dHB1dFR5cGUgPQogICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uaW50ZXJzZWN0aW9uKGluc3RydWN0aW9uLmtub3duVHlwZSwgaW5wdXRUeXBlKTsKICAgIGlmIChpbnB1dFR5cGUgIT0gb3V0cHV0VHlwZSkgewogICAgICBpbnB1dC5yZXBsYWNlQWxsVXNlcnNEb21pbmF0ZWRCeShpbnN0cnVjdGlvbi5uZXh0LCBpbnN0cnVjdGlvbik7CiAgICB9CiAgICByZXR1cm4gb3V0cHV0VHlwZTsKICB9CgogIHZvaWQgY29udmVydElucHV0KEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uLCBISW5zdHJ1Y3Rpb24gaW5wdXQsCiAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSwgaW50IGtpbmQsIERhcnRUeXBlIHR5cGVFeHByZXNzaW9uKSB7CiAgICBhc3NlcnQoa2luZCA9PSBIUHJpbWl0aXZlQ2hlY2suUkVDRUlWRVJfVFlQRV9DSEVDSyB8fAogICAgICAgIGtpbmQgPT0gSFByaW1pdGl2ZUNoZWNrLkFSR1VNRU5UX1RZUEVfQ0hFQ0spOwogICAgU2VsZWN0b3Igc2VsZWN0b3IgPSAoa2luZCA9PSBIUHJpbWl0aXZlQ2hlY2suUkVDRUlWRVJfVFlQRV9DSEVDSykKICAgICAgICA/IGluc3RydWN0aW9uLnNlbGVjdG9yCiAgICAgICAgOiBudWxsOwogICAgSFByaW1pdGl2ZUNoZWNrIGNvbnZlcnRlZCA9IG5ldyBIUHJpbWl0aXZlQ2hlY2soCiAgICAgICAgdHlwZUV4cHJlc3Npb24sIGtpbmQsIHR5cGUsIGlucHV0LCBpbnN0cnVjdGlvbi5zb3VyY2VJbmZvcm1hdGlvbiwKICAgICAgICByZWNlaXZlclR5cGVDaGVja1NlbGVjdG9yOiBzZWxlY3Rvcik7CiAgICBpbnN0cnVjdGlvbi5ibG9jay5hZGRCZWZvcmUoaW5zdHJ1Y3Rpb24sIGNvbnZlcnRlZCk7CiAgICBpbnB1dC5yZXBsYWNlQWxsVXNlcnNEb21pbmF0ZWRCeShpbnN0cnVjdGlvbiwgY29udmVydGVkKTsKICAgIF9sb2c/LnJlZ2lzdGVyUHJpbWl0aXZlQ2hlY2soaW5zdHJ1Y3Rpb24sIGNvbnZlcnRlZCk7CiAgfQoKICBib29sIGlzQ2hlY2tFbm91Z2hGb3JOc21PckFlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiwgQWJzdHJhY3RWYWx1ZSB0eXBlKSB7CiAgICAvLyBJbiBzb21lIGNhc2VzLCB3ZSB3YW50IHRoZSByZWNlaXZlciB0byBiZSBhbiBpbnRlZ2VyLAogICAgLy8gYnV0IHRoYXQgZG9lcyBub3QgbWVhbiB3ZSB3aWxsIGdldCBhIE5vU3VjaE1ldGhvZEVycm9yCiAgICAvLyBpZiBpdCdzIG5vdDogdGhlIHJlY2VpdmVyIGNvdWxkIGJlIGEgZG91YmxlLgogICAgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uaXNJbnRlZ2VyT3JOdWxsKHR5cGUpLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgLy8gSWYgdGhlIGluc3RydWN0aW9uJ3MgdHlwZSBpcyBpbnRlZ2VyIG9yIG51bGwsIHRoZSBjb2RlZ2VuCiAgICAgIC8vIHdpbGwgZW1pdCBhIG51bGwgY2hlY2ssIHdoaWNoIGlzIGVub3VnaCB0byBrbm93IGlmIGl0IHdpbGwKICAgICAgLy8gaGl0IGEgbm9TdWNoTWV0aG9kLgogICAgICByZXR1cm4gaW5zdHJ1Y3Rpb24uaXNJbnRlZ2VyT3JOdWxsKGFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWU7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIEFkZCBhIHJlY2VpdmVyIHR5cGUgY2hlY2sgd2hlbiB0aGUgY2FsbCBjYW4gb25seSBoaXQKICAvLyBbbm9TdWNoTWV0aG9kXSBpZiB0aGUgcmVjZWl2ZXIgaXMgbm90IG9mIGEgc3BlY2lmaWMgdHlwZS4KICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgcmVjZWl2ZXIgdHlwZSBjaGVjayB3YXMgYWRkZWQuCiAgYm9vbCBjaGVja1JlY2VpdmVyKEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uKSB7CiAgICBhc3NlcnQoaW5zdHJ1Y3Rpb24uaXNJbnRlcmNlcHRlZENhbGwpOwogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdOwogICAgaWYgKHJlY2VpdmVyLmlzTnVtYmVyKGFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgaWYgKHJlY2VpdmVyLmlzTnVtYmVyT3JOdWxsKGFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgY29udmVydElucHV0KAogICAgICAgICAgaW5zdHJ1Y3Rpb24sCiAgICAgICAgICByZWNlaXZlciwKICAgICAgICAgIGFic3RyYWN0VmFsdWVEb21haW4uZXhjbHVkZU51bGwocmVjZWl2ZXIuaW5zdHJ1Y3Rpb25UeXBlKSwKICAgICAgICAgIEhQcmltaXRpdmVDaGVjay5SRUNFSVZFUl9UWVBFX0NIRUNLLAogICAgICAgICAgY29tbW9uRWxlbWVudHMubnVtVHlwZSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChpbnN0cnVjdGlvbi5lbGVtZW50ID09IG51bGwpIHsKICAgICAgaWYgKGNsb3NlZFdvcmxkLmluY2x1ZGVzQ2xvc3VyZUNhbGwoCiAgICAgICAgICBpbnN0cnVjdGlvbi5zZWxlY3RvciwgaW5zdHJ1Y3Rpb24ucmVjZWl2ZXJUeXBlKSkgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBJdGVyYWJsZTxNZW1iZXJFbnRpdHk+IHRhcmdldHMgPSBjbG9zZWRXb3JsZC5sb2NhdGVNZW1iZXJzKAogICAgICAgICAgaW5zdHJ1Y3Rpb24uc2VsZWN0b3IsIGluc3RydWN0aW9uLnJlY2VpdmVyVHlwZSk7CiAgICAgIGlmICh0YXJnZXRzLmxlbmd0aCA9PSAxKSB7CiAgICAgICAgTWVtYmVyRW50aXR5IHRhcmdldCA9IHRhcmdldHMuZmlyc3Q7CiAgICAgICAgQ2xhc3NFbnRpdHkgY2xzID0gdGFyZ2V0LmVuY2xvc2luZ0NsYXNzOwogICAgICAgIEFic3RyYWN0VmFsdWUgdHlwZSA9IGFic3RyYWN0VmFsdWVEb21haW4uY3JlYXRlTm9uTnVsbFN1YmNsYXNzKGNscyk7CiAgICAgICAgLy8gV2UgY3VycmVudGx5IG9ubHkgb3B0aW1pemUgb24gc29tZSBwcmltaXRpdmUgdHlwZXMuCiAgICAgICAgRGFydFR5cGUgdHlwZUV4cHJlc3Npb247CiAgICAgICAgaWYgKGFic3RyYWN0VmFsdWVEb21haW4uaXNOdW1iZXJPck51bGwodHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgdHlwZUV4cHJlc3Npb24gPSBjb21tb25FbGVtZW50cy5udW1UeXBlOwogICAgICAgIH0gZWxzZSBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0Jvb2xlYW5Pck51bGwodHlwZSkuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgdHlwZUV4cHJlc3Npb24gPSBjb21tb25FbGVtZW50cy5ib29sVHlwZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzQ2hlY2tFbm91Z2hGb3JOc21PckFlKHJlY2VpdmVyLCB0eXBlKSkgcmV0dXJuIGZhbHNlOwogICAgICAgIGluc3RydWN0aW9uLmVsZW1lbnQgPSB0YXJnZXQ7CiAgICAgICAgY29udmVydElucHV0KGluc3RydWN0aW9uLCByZWNlaXZlciwgdHlwZSwKICAgICAgICAgICAgSFByaW1pdGl2ZUNoZWNrLlJFQ0VJVkVSX1RZUEVfQ0hFQ0ssIHR5cGVFeHByZXNzaW9uKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gQWRkIGFuIGFyZ3VtZW50IHR5cGUgY2hlY2sgaWYgdGhlIGFyZ3VtZW50IGlzIG5vdCBvZiBhIHR5cGUKICAvLyBleHBlY3RlZCBieSB0aGUgY2FsbC4KICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgYXJndW1lbnQgdHlwZSBjaGVjayB3YXMgYWRkZWQuCiAgYm9vbCBjaGVja0FyZ3VtZW50KEhJbnZva2VEeW5hbWljIGluc3RydWN0aW9uKSB7CiAgICBISW5zdHJ1Y3Rpb24gbGVmdCA9IGluc3RydWN0aW9uLmlucHV0c1sxXTsKICAgIEhJbnN0cnVjdGlvbiByaWdodCA9IGluc3RydWN0aW9uLmlucHV0c1syXTsKCiAgICBTZWxlY3RvciBzZWxlY3RvciA9IGluc3RydWN0aW9uLnNlbGVjdG9yOwogICAgaWYgKHNlbGVjdG9yLmlzT3BlcmF0b3IgJiYKICAgICAgICBsZWZ0LmlzTnVtYmVyKGFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgaWYgKHJpZ2h0LmlzTnVtYmVyKGFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgQWJzdHJhY3RWYWx1ZSB0eXBlID0KICAgICAgICAgIHJpZ2h0LmlzSW50ZWdlck9yTnVsbChhYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlCiAgICAgICAgICAgICAgPyBhYnN0cmFjdFZhbHVlRG9tYWluLmV4Y2x1ZGVOdWxsKHJpZ2h0Lmluc3RydWN0aW9uVHlwZSkKICAgICAgICAgICAgICA6IGFic3RyYWN0VmFsdWVEb21haW4ubnVtVHlwZTsKICAgICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBTb21lIG51bWJlciBvcGVyYXRpb25zIGRvbid0IGhhdmUgYSBidWlsdGluCiAgICAgIC8vIHZhcmlhbnQgYW5kIHdpbGwgZG8gdGhlIGNoZWNrIGluIHRoZWlyIG1ldGhvZCBhbnl3YXkuIFdlCiAgICAgIC8vIHN0aWxsIGFkZCBhIGNoZWNrIGJlY2F1c2UgaXQgYWxsb3dzIHRvIEdWTiB0aGVzZSBvcGVyYXRpb25zLAogICAgICAvLyBidXQgd2Ugc2hvdWxkIGZpbmQgYSBiZXR0ZXIgd2F5LgogICAgICBjb252ZXJ0SW5wdXQoaW5zdHJ1Y3Rpb24sIHJpZ2h0LCB0eXBlLAogICAgICAgICAgSFByaW1pdGl2ZUNoZWNrLkFSR1VNRU5UX1RZUEVfQ0hFQ0ssIGNvbW1vbkVsZW1lbnRzLm51bVR5cGUpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgcHJvY2Vzc1BlbmRpbmdPcHRpbWl6YXRpb25zKCkgewogICAgcGVuZGluZ09wdGltaXphdGlvbnMuZm9yRWFjaCgoaW5zdHJ1Y3Rpb24sIGFjdGlvbikgPT4gYWN0aW9uKCkpOwogICAgcGVuZGluZ09wdGltaXphdGlvbnMuY2xlYXIoKTsKICB9CgogIHZvaWQgYWRkRGVwZW5kZW50SW5zdHJ1Y3Rpb25zVG9Xb3JrTGlzdChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGZvciAoaW50IGkgPSAwLCBsZW5ndGggPSBpbnN0cnVjdGlvbi51c2VkQnkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgLy8gVGhlIHR5cGUgcHJvcGFnYXRvciBvbmx5IHByb3BhZ2F0ZXMgdHlwZXMgZm9yd2FyZC4gV2UKICAgICAgLy8gdGh1cyBvbmx5IG5lZWQgdG8gYWRkIHRoZSB1c2VycyBvZiB0aGUgW2luc3RydWN0aW9uXSB0byB0aGUgbGlzdC4KICAgICAgYWRkVG9Xb3JrTGlzdChpbnN0cnVjdGlvbi51c2VkQnlbaV0pOwogICAgfQogIH0KCiAgdm9pZCBhZGRBbGxVc2Vyc0J1dChISW52b2tlRHluYW1pYyBpbnZva2UsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgaW5zdHJ1Y3Rpb24udXNlZEJ5LmZvckVhY2goKEhJbnN0cnVjdGlvbiB1c2VyKSB7CiAgICAgIGlmICh1c2VyICE9IGludm9rZSkgYWRkVG9Xb3JrTGlzdCh1c2VyKTsKICAgIH0pOwogIH0KCiAgQG92ZXJyaWRlCiAgQWJzdHJhY3RWYWx1ZSB2aXNpdEludm9rZUR5bmFtaWMoSEludm9rZUR5bmFtaWMgaW5zdHJ1Y3Rpb24pIHsKICAgIGlmIChpbnN0cnVjdGlvbi5pc0ludGVyY2VwdGVkQ2FsbCkgewogICAgICAvLyBXZSBjYW5ub3QgZG8gdGhlIGZvbGxvd2luZyBvcHRpbWl6YXRpb24gbm93LCBiZWNhdXNlIHdlIGhhdmUgdG8gd2FpdAogICAgICAvLyBmb3IgdGhlIHR5cGUgcHJvcGFnYXRpb24gdG8gYmUgc3RhYmxlLiBUaGUgcmVjZWl2ZXIgb2YgW2luc3RydWN0aW9uXQogICAgICAvLyBtaWdodCBtb3ZlIGZyb20gbnVtYmVyIHRvIGR5bmFtaWMuCiAgICAgIHZvaWQgY2hlY2tJbnB1dHMoKSB7CiAgICAgICAgU2VsZWN0b3Igc2VsZWN0b3IgPSBpbnN0cnVjdGlvbi5zZWxlY3RvcjsKICAgICAgICBpZiAoc2VsZWN0b3IuaXNPcGVyYXRvciAmJiBzZWxlY3Rvci5uYW1lICE9ICc9PScpIHsKICAgICAgICAgIGlmIChjaGVja1JlY2VpdmVyKGluc3RydWN0aW9uKSkgewogICAgICAgICAgICBhZGRBbGxVc2Vyc0J1dChpbnN0cnVjdGlvbiwgaW5zdHJ1Y3Rpb24uaW5wdXRzWzFdKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghc2VsZWN0b3IuaXNVbmFyeU9wZXJhdG9yICYmIGNoZWNrQXJndW1lbnQoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgICAgIGFkZEFsbFVzZXJzQnV0KGluc3RydWN0aW9uLCBpbnN0cnVjdGlvbi5pbnB1dHNbMl0pOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0b3IuaXNDYWxsKSB7CiAgICAgICAgICBpZiAoc2VsZWN0b3IubmFtZSA9PSAnYWJzJyAmJiBzZWxlY3Rvci5hcmd1bWVudENvdW50ID09IDApIHsKICAgICAgICAgICAgaWYgKGNoZWNrUmVjZWl2ZXIoaW5zdHJ1Y3Rpb24pKSB7CiAgICAgICAgICAgICAgYWRkQWxsVXNlcnNCdXQoaW5zdHJ1Y3Rpb24sIGluc3RydWN0aW9uLmlucHV0c1sxXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHBlbmRpbmdPcHRpbWl6YXRpb25zLnB1dElmQWJzZW50KGluc3RydWN0aW9uLCAoKSA9PiBjaGVja0lucHV0cyk7CiAgICB9CgogICAgSEluc3RydWN0aW9uIHJlY2VpdmVyID0gaW5zdHJ1Y3Rpb24uZ2V0RGFydFJlY2VpdmVyKGNsb3NlZFdvcmxkKTsKICAgIEFic3RyYWN0VmFsdWUgcmVjZWl2ZXJUeXBlID0gcmVjZWl2ZXIuaW5zdHJ1Y3Rpb25UeXBlOwogICAgaW5zdHJ1Y3Rpb24udXBkYXRlUmVjZWl2ZXJUeXBlKGFic3RyYWN0VmFsdWVEb21haW4sIHJlY2VpdmVyVHlwZSk7CgogICAgLy8gVHJ5IHRvIHJlZmluZSB0aGF0IHRoZSByZWNlaXZlciBpcyBub3QgbnVsbCBhZnRlciB0aGlzIGNhbGwgYnkgaW5zZXJ0aW5nCiAgICAvLyBhIHJlZmluZW1lbnQgbm9kZSAoSFR5cGVLbm93bikuCiAgICB2YXIgc2VsZWN0b3IgPSBpbnN0cnVjdGlvbi5zZWxlY3RvcjsKICAgIGlmICghc2VsZWN0b3IuaXNDbG9zdXJlQ2FsbCAmJiAhc2VsZWN0b3IuYXBwbGllc1RvTnVsbFdpdGhvdXRUaHJvdygpKSB7CiAgICAgIHZhciBuZXh0ID0gaW5zdHJ1Y3Rpb24ubmV4dDsKICAgICAgaWYgKG5leHQgaXMgSFR5cGVLbm93biAmJiBuZXh0LmNoZWNrZWRJbnB1dCA9PSByZWNlaXZlcikgewogICAgICAgIC8vIE9uIGEgcHJldmlvdXMgcGFzcyBvciBpdGVyYXRpb24gd2UgYWxyZWFkeSByZWZpbmVkIFtyZWNlaXZlcl0gYnkKICAgICAgICAvLyBpbnNlcnRpbmcgYSBbSFR5cGVLbm93bl0gaW5zdHJ1Y3Rpb24uIFRoYXQgcmVwbGFjZWQgc2V2ZXJhbCBkb21pbmF0ZWQKICAgICAgICAvLyB1c2VzIHdpdGggdGhlIHJlZmluZW1lbnQuIFdlIHVwZGF0ZSB0aGUgdHlwZSBvZiB0aGUgW0hUeXBlS25vd25dCiAgICAgICAgLy8gaW5zdHJ1Y3Rpb24gYmVjYXVzZSBpdCBtYXkgaGF2ZSBiZWVuIHJlZmluZWQgd2l0aCBhIGNvcnJlY3QgdHlwZSBhdAogICAgICAgIC8vIHRoZSB0aW1lLCBidXQgaW5jb3JyZWN0IG5vdy4KICAgICAgICBBYnN0cmFjdFZhbHVlIG5ld1R5cGUgPSBhYnN0cmFjdFZhbHVlRG9tYWluLmV4Y2x1ZGVOdWxsKHJlY2VpdmVyVHlwZSk7CiAgICAgICAgaWYgKG5leHQuaW5zdHJ1Y3Rpb25UeXBlICE9IG5ld1R5cGUpIHsKICAgICAgICAgIG5leHQua25vd25UeXBlID0gbmV4dC5pbnN0cnVjdGlvblR5cGUgPSBuZXdUeXBlOwogICAgICAgICAgYWRkRGVwZW5kZW50SW5zdHJ1Y3Rpb25zVG9Xb3JrTGlzdChuZXh0KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoYWJzdHJhY3RWYWx1ZURvbWFpbi5pc051bGwocmVjZWl2ZXJUeXBlKS5pc1BvdGVudGlhbGx5VHJ1ZSkgewogICAgICAgIERvbWluYXRlZFVzZXMgdXNlcyA9CiAgICAgICAgICAgIERvbWluYXRlZFVzZXMub2YocmVjZWl2ZXIsIGluc3RydWN0aW9uLCBleGNsdWRlRG9taW5hdG9yOiB0cnVlKTsKICAgICAgICBpZiAodXNlcy5pc05vdEVtcHR5KSB7CiAgICAgICAgICAvLyBJbnNlcnQgYSByZWZpbmVtZW50IG5vZGUgYWZ0ZXIgdGhlIGNhbGwgYW5kIHVwZGF0ZSBhbGwgdXNlcnMKICAgICAgICAgIC8vIGRvbWluYXRlZCBieSB0aGUgY2FsbCB0byB1c2UgdGhhdCBub2RlIGluc3RlYWQgb2YgW3JlY2VpdmVyXS4KICAgICAgICAgIEFic3RyYWN0VmFsdWUgbmV3VHlwZSA9IGFic3RyYWN0VmFsdWVEb21haW4uZXhjbHVkZU51bGwocmVjZWl2ZXJUeXBlKTsKICAgICAgICAgIEhUeXBlS25vd24gY29udmVydGVkID0KICAgICAgICAgICAgICBuZXcgSFR5cGVLbm93bi53aXRuZXNzZWQobmV3VHlwZSwgcmVjZWl2ZXIsIGluc3RydWN0aW9uKTsKICAgICAgICAgIGluc3RydWN0aW9uLmJsb2NrLmFkZEJlZm9yZShpbnN0cnVjdGlvbi5uZXh0LCBjb252ZXJ0ZWQpOwogICAgICAgICAgdXNlcy5yZXBsYWNlV2l0aChjb252ZXJ0ZWQpOwogICAgICAgICAgYWRkRGVwZW5kZW50SW5zdHJ1Y3Rpb25zVG9Xb3JrTGlzdChjb252ZXJ0ZWQpOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHJldHVybiBpbnN0cnVjdGlvbi5zcGVjaWFsaXplcgogICAgICAgIC5jb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzKGluc3RydWN0aW9uLCByZXN1bHRzLCBjbG9zZWRXb3JsZCk7CiAgfQoKICBAb3ZlcnJpZGUKICBBYnN0cmFjdFZhbHVlIHZpc2l0QXNDaGVjayhIQXNDaGVjayBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGlucHV0ID0gaW5zdHJ1Y3Rpb24uY2hlY2tlZElucHV0OwogICAgQWJzdHJhY3RWYWx1ZSBpbnB1dFR5cGUgPSBpbnB1dC5pbnN0cnVjdGlvblR5cGU7CiAgICBBYnN0cmFjdFZhbHVlIGNoZWNrZWRUeXBlID0gaW5zdHJ1Y3Rpb24uY2hlY2tlZFR5cGUuYWJzdHJhY3RWYWx1ZTsKICAgIEFic3RyYWN0VmFsdWUgb3V0cHV0VHlwZSA9CiAgICAgICAgYWJzdHJhY3RWYWx1ZURvbWFpbi5pbnRlcnNlY3Rpb24oY2hlY2tlZFR5cGUsIGlucHV0VHlwZSk7CiAgICBvdXRwdXRUeXBlID0gX251bWVyaWNGaXh1cChvdXRwdXRUeXBlLCBpbnB1dFR5cGUsIGNoZWNrZWRUeXBlKTsKICAgIGlmIChpbnB1dFR5cGUgIT0gb3V0cHV0VHlwZSkgewogICAgICAvLyBSZXBsYWNlIGRvbWluYXRlZCB1c2VzIG9mIGlucHV0IHdpdGggdXNlcyBvZiB0aGlzIEhUeXBlQ29udmVyc2lvbiBzbwogICAgICAvLyB0aGUgdXNlcyBiZW5lZml0IGZyb20gdGhlIHN0cm9uZ2VyIHR5cGUuCiAgICAgIC8vCiAgICAgIC8vIERvIG5vdCByZXBsYWNlIGxvY2FsIGFjY2Vzc2VzLCBzaW5jZSB0aGUgbG9jYWwgbXVzdCBiZSBhIEhMb2NhbFZhbHVlLAogICAgICAvLyBub3QgYSBIQXNDaGVjay4KICAgICAgaWYgKCEoaW5wdXQgaXMgSFBhcmFtZXRlclZhbHVlICYmIGlucHV0LnVzZWRBc1ZhcmlhYmxlKCkpKSB7CiAgICAgICAgaW5wdXQucmVwbGFjZUFsbFVzZXJzRG9taW5hdGVkQnkoaW5zdHJ1Y3Rpb24ubmV4dCwgaW5zdHJ1Y3Rpb24pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gb3V0cHV0VHlwZTsKICB9Cn0Kgg0ATk48ATYkITEhMioXFRgBNwRIBD4ETFFLTkMEUB5KIUxHLjspASwnIiIMKgEVRwExJwE4JQQBQCouIjk2HU1LKx8EAQwiHxcEAQwnICRGRRgrUUk6PRwKDSQfMwoKBgEsIiU5CCYGBAEbCSIoMCUcJzsKCEZFQyslIQQBMSMBJBghBgQBDEcqLEBBKgY/LQYoBAFGKixISTIGLwQBDDcuBAEMLS4EAQwzJigEAQxHHigEAQw5HigEAQwzMEohQyoGMAQBDC1AMAQBDD0xKAQBDCVBQz9LBhoEAQxDMzU5H0JEI04yCUlRSDkJTyBDSQgGFwQBUSNEUU5RSlBNTkdJF08RNwoIBhcEAQxDMzU5AVBOJUxNRz0jKiFJPQYBH0JEI04yCUs3Q0kIBhcEAQw5MzUfTCNHBhcEAUQ/OjZGHxA1Si45PjoEAU89PjRGQ0QdUAYRBAE6PzczKzNDFAZJFBcURS8jEy4rPRYIQjshLTFNPyFJM1E0ERgKRCYyQhUIBhIEAUEbNzMvMAEuHz9CFggbRkctRkJGKi1IEwYSBAEnRSIEAUZLP0ssBgQBSTUvCAQBDEEpTk4sGzI8LEAMSUAMJkcuQg4MCggBSAYBRjtHAVAnKUwjQUxRTE8oTy87NApPHU0fSktRIUhEJzkKCAYBI0cEAQw1MzVHH0JEI04yCU8ZQ0kIBhcEAgEvcGFja2FnZTpjb21waWxlci9zcmMvc3NhL3R5cGVzX3Byb3BhZ2F0aW9uLmRhcnQ7c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvc3NhL3ZhbHVlX3JhbmdlX2FuYWx5emVyLmRhcnTAAJwFLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnLi4vY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0JyBhcyBjb25zdGFudF9zeXN0ZW07CmltcG9ydCAnLi4vY29uc3RhbnRzL3ZhbHVlcy5kYXJ0JzsKaW1wb3J0ICcuLi93b3JsZC5kYXJ0JyBzaG93IEpDbG9zZWRXb3JsZDsKaW1wb3J0ICdub2Rlcy5kYXJ0JzsKaW1wb3J0ICdvcHRpbWl6ZS5kYXJ0JzsKCmNsYXNzIFZhbHVlUmFuZ2VJbmZvIHsKICBJbnRWYWx1ZSBpbnRaZXJvOwogIEludFZhbHVlIGludE9uZTsKCiAgVmFsdWVSYW5nZUluZm8oKSB7CiAgICBpbnRaZXJvID0gbmV3SW50VmFsdWUoQmlnSW50Lnplcm8pOwogICAgaW50T25lID0gbmV3SW50VmFsdWUoQmlnSW50Lm9uZSk7CiAgfQoKICBWYWx1ZSBuZXdJbnRWYWx1ZShCaWdJbnQgdmFsdWUpIHsKICAgIHJldHVybiBuZXcgSW50VmFsdWUodmFsdWUsIHRoaXMpOwogIH0KCiAgVmFsdWUgbmV3SW5zdHJ1Y3Rpb25WYWx1ZShISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIHJldHVybiBuZXcgSW5zdHJ1Y3Rpb25WYWx1ZShpbnN0cnVjdGlvbiwgdGhpcyk7CiAgfQoKICBWYWx1ZSBuZXdQb3NpdGl2ZVZhbHVlKEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgcmV0dXJuIG5ldyBQb3NpdGl2ZVZhbHVlKGluc3RydWN0aW9uLCB0aGlzKTsKICB9CgogIFZhbHVlIG5ld0FkZFZhbHVlKFZhbHVlIGxlZnQsIFZhbHVlIHJpZ2h0KSB7CiAgICByZXR1cm4gbmV3IEFkZFZhbHVlKGxlZnQsIHJpZ2h0LCB0aGlzKTsKICB9CgogIFZhbHVlIG5ld1N1YnRyYWN0VmFsdWUoVmFsdWUgbGVmdCwgVmFsdWUgcmlnaHQpIHsKICAgIHJldHVybiBuZXcgU3VidHJhY3RWYWx1ZShsZWZ0LCByaWdodCwgdGhpcyk7CiAgfQoKICBWYWx1ZSBuZXdOZWdhdGVWYWx1ZShWYWx1ZSB2YWx1ZSkgewogICAgcmV0dXJuIG5ldyBOZWdhdGVWYWx1ZSh2YWx1ZSwgdGhpcyk7CiAgfQoKICBSYW5nZSBuZXdVbmJvdW5kUmFuZ2UoKSB7CiAgICByZXR1cm4gbmV3IFJhbmdlLnVuYm91bmQodGhpcyk7CiAgfQoKICBSYW5nZSBuZXdOb3JtYWxpemVkUmFuZ2UoVmFsdWUgbG93LCBWYWx1ZSB1cCkgewogICAgcmV0dXJuIG5ldyBSYW5nZS5ub3JtYWxpemUobG93LCB1cCwgdGhpcyk7CiAgfQoKICBSYW5nZSBuZXdNYXJrZXJSYW5nZSgpIHsKICAgIHJldHVybiBuZXcgUmFuZ2UoCiAgICAgICAgbmV3IE1hcmtlclZhbHVlKGZhbHNlLCB0aGlzKSwgbmV3IE1hcmtlclZhbHVlKHRydWUsIHRoaXMpLCB0aGlzKTsKICB9Cn0KCi8vLyBBIFtWYWx1ZV0gcmVwcmVzZW50cyBib3RoIHN5bWJvbGljIHZhbHVlcyBsaWtlIHRoZSB2YWx1ZSBvZiBhCi8vLyBwYXJhbWV0ZXIsIG9yIHRoZSBsZW5ndGggb2YgYW4gYXJyYXksIGFuZCBjb25jcmV0ZSB2YWx1ZXMsIGxpa2UKLy8vIGNvbnN0YW50cy4KYWJzdHJhY3QgY2xhc3MgVmFsdWUgewogIGZpbmFsIFZhbHVlUmFuZ2VJbmZvIGluZm87CiAgY29uc3QgVmFsdWUodGhpcy5pbmZvKTsKCiAgVmFsdWUgb3BlcmF0b3IgKyhWYWx1ZSBvdGhlcikgPT4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgVmFsdWUgb3BlcmF0b3IgLShWYWx1ZSBvdGhlcikgPT4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgVmFsdWUgb3BlcmF0b3IgLSgpID0+IGNvbnN0IFVua25vd25WYWx1ZSgpOwogIFZhbHVlIG9wZXJhdG9yICYoVmFsdWUgb3RoZXIpID0+IGNvbnN0IFVua25vd25WYWx1ZSgpOwoKICBWYWx1ZSBtaW4oVmFsdWUgb3RoZXIpIHsKICAgIGlmICh0aGlzID09IG90aGVyKSByZXR1cm4gdGhpczsKICAgIGlmIChvdGhlciA9PSBjb25zdCBNaW5JbnRWYWx1ZSgpKSByZXR1cm4gb3RoZXI7CiAgICBpZiAob3RoZXIgPT0gY29uc3QgTWF4SW50VmFsdWUoKSkgcmV0dXJuIHRoaXM7CiAgICBWYWx1ZSB2YWx1ZSA9IHRoaXMgLSBvdGhlcjsKICAgIGlmICh2YWx1ZS5pc1Bvc2l0aXZlKSByZXR1cm4gb3RoZXI7CiAgICBpZiAodmFsdWUuaXNOZWdhdGl2ZSkgcmV0dXJuIHRoaXM7CiAgICByZXR1cm4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgfQoKICBWYWx1ZSBtYXgoVmFsdWUgb3RoZXIpIHsKICAgIGlmICh0aGlzID09IG90aGVyKSByZXR1cm4gdGhpczsKICAgIGlmIChvdGhlciA9PSBjb25zdCBNaW5JbnRWYWx1ZSgpKSByZXR1cm4gdGhpczsKICAgIGlmIChvdGhlciA9PSBjb25zdCBNYXhJbnRWYWx1ZSgpKSByZXR1cm4gb3RoZXI7CiAgICBWYWx1ZSB2YWx1ZSA9IHRoaXMgLSBvdGhlcjsKICAgIGlmICh2YWx1ZS5pc1Bvc2l0aXZlKSByZXR1cm4gdGhpczsKICAgIGlmICh2YWx1ZS5pc05lZ2F0aXZlKSByZXR1cm4gb3RoZXI7CiAgICByZXR1cm4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgfQoKICBib29sIGdldCBpc05lZ2F0aXZlID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzUG9zaXRpdmUgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNaZXJvID0+IGZhbHNlOwp9CgovLy8gVGhlIFtNYXJrZXJWYWx1ZV0gY2xhc3MgaXMgdXNlZCB0byByZWNvZ25pemUgcmFuZ2VzIG9mIGxvb3AKLy8vIHVwZGF0ZXMuCmNsYXNzIE1hcmtlclZhbHVlIGV4dGVuZHMgVmFsdWUgewogIC8vLyBJZiBbcG9zaXRpdmVdIGlzIHRydWUgKHJlc3BlY3RpdmVseSBmYWxzZSksIHRoZSBtYXJrZXIgZ29lcwogIC8vLyB0byBbTWF4SW50VmFsdWVdIChyZXNwZWN0aXZlbHkgW01pbkludFZhbHVlXSkgd2hlbiBiZWluZyBhZGRlZAogIC8vLyB0byBhIHBvc2l0aXZlIChyZXNwZWN0aXZlbHkgbmVnYXRpdmUpIHZhbHVlLgogIGZpbmFsIGJvb2wgcG9zaXRpdmU7CgogIGNvbnN0IE1hcmtlclZhbHVlKHRoaXMucG9zaXRpdmUsIGluZm8pIDogc3VwZXIoaW5mbyk7CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yICsoVmFsdWUgb3RoZXIpIHsKICAgIGlmIChvdGhlci5pc1Bvc2l0aXZlICYmIHBvc2l0aXZlKSByZXR1cm4gY29uc3QgTWF4SW50VmFsdWUoKTsKICAgIGlmIChvdGhlci5pc05lZ2F0aXZlICYmICFwb3NpdGl2ZSkgcmV0dXJuIGNvbnN0IE1pbkludFZhbHVlKCk7CiAgICBpZiAob3RoZXIgaXMgSW50VmFsdWUpIHJldHVybiB0aGlzOwogICAgcmV0dXJuIGNvbnN0IFVua25vd25WYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLShWYWx1ZSBvdGhlcikgewogICAgaWYgKG90aGVyLmlzUG9zaXRpdmUgJiYgIXBvc2l0aXZlKSByZXR1cm4gY29uc3QgTWluSW50VmFsdWUoKTsKICAgIGlmIChvdGhlci5pc05lZ2F0aXZlICYmIHBvc2l0aXZlKSByZXR1cm4gY29uc3QgTWF4SW50VmFsdWUoKTsKICAgIGlmIChvdGhlciBpcyBJbnRWYWx1ZSkgcmV0dXJuIHRoaXM7CiAgICByZXR1cm4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgfQp9CgovLy8gQW4gW0ludFZhbHVlXSBjb250YWlucyBhIGNvbnN0YW50IGludGVnZXIgdmFsdWUuCmNsYXNzIEludFZhbHVlIGV4dGVuZHMgVmFsdWUgewogIGZpbmFsIEJpZ0ludCB2YWx1ZTsKCiAgY29uc3QgSW50VmFsdWUodGhpcy52YWx1ZSwgaW5mbykgOiBzdXBlcihpbmZvKTsKCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgKyhkeW5hbWljIG90aGVyKSB7CiAgICBpZiAob3RoZXIuaXNaZXJvKSByZXR1cm4gdGhpczsKICAgIGlmIChvdGhlciBpcyEgSW50VmFsdWUpIHJldHVybiBvdGhlciArIHRoaXM7CiAgICBkeW5hbWljIGNvbnN0YW50ID0gY29uc3RhbnRfc3lzdGVtLmFkZC5mb2xkKAogICAgICAgIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVJbnQodmFsdWUpLAogICAgICAgIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVJbnQob3RoZXIudmFsdWUpKTsKICAgIGlmICghY29uc3RhbnQuaXNJbnQpIHJldHVybiBjb25zdCBVbmtub3duVmFsdWUoKTsKICAgIHJldHVybiBpbmZvLm5ld0ludFZhbHVlKGNvbnN0YW50LmludFZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0oZHluYW1pYyBvdGhlcikgewogICAgaWYgKG90aGVyLmlzWmVybykgcmV0dXJuIHRoaXM7CiAgICBpZiAob3RoZXIgaXMhIEludFZhbHVlKSByZXR1cm4gLW90aGVyICsgdGhpczsKICAgIGR5bmFtaWMgY29uc3RhbnQgPSBjb25zdGFudF9zeXN0ZW0uc3VidHJhY3QuZm9sZCgKICAgICAgICBjb25zdGFudF9zeXN0ZW0uY3JlYXRlSW50KHZhbHVlKSwKICAgICAgICBjb25zdGFudF9zeXN0ZW0uY3JlYXRlSW50KG90aGVyLnZhbHVlKSk7CiAgICBpZiAoIWNvbnN0YW50LmlzSW50KSByZXR1cm4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgICByZXR1cm4gaW5mby5uZXdJbnRWYWx1ZShjb25zdGFudC5pbnRWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKCkgewogICAgaWYgKGlzWmVybykgcmV0dXJuIHRoaXM7CiAgICBkeW5hbWljIGNvbnN0YW50ID0KICAgICAgICBjb25zdGFudF9zeXN0ZW0ubmVnYXRlLmZvbGQoY29uc3RhbnRfc3lzdGVtLmNyZWF0ZUludCh2YWx1ZSkpOwogICAgaWYgKCFjb25zdGFudC5pc0ludCkgcmV0dXJuIGNvbnN0IFVua25vd25WYWx1ZSgpOwogICAgcmV0dXJuIGluZm8ubmV3SW50VmFsdWUoY29uc3RhbnQuaW50VmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgJihkeW5hbWljIG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIEludFZhbHVlKSByZXR1cm4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgICBkeW5hbWljIGNvbnN0YW50ID0gY29uc3RhbnRfc3lzdGVtLmJpdEFuZC5mb2xkKAogICAgICAgIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVJbnQodmFsdWUpLAogICAgICAgIGNvbnN0YW50X3N5c3RlbS5jcmVhdGVJbnQob3RoZXIudmFsdWUpKTsKICAgIHJldHVybiBpbmZvLm5ld0ludFZhbHVlKGNvbnN0YW50LmludFZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIFZhbHVlIG1pbihkeW5hbWljIG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIEludFZhbHVlKSByZXR1cm4gb3RoZXIubWluKHRoaXMpOwogICAgcmV0dXJuIHRoaXMudmFsdWUgPCBvdGhlci52YWx1ZSA/IHRoaXMgOiBvdGhlcjsKICB9CgogIEBvdmVycmlkZQogIFZhbHVlIG1heChkeW5hbWljIG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIEludFZhbHVlKSByZXR1cm4gb3RoZXIubWF4KHRoaXMpOwogICAgcmV0dXJuIHRoaXMudmFsdWUgPCBvdGhlci52YWx1ZSA/IG90aGVyIDogdGhpczsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgSW50VmFsdWUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0aGlzLnZhbHVlID09IG90aGVyLnZhbHVlOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignSW50VmFsdWUuaGFzaENvZGUnKTsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0ludFZhbHVlICR2YWx1ZSc7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSA9PiB2YWx1ZSA8IEJpZ0ludC56ZXJvOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG9zaXRpdmUgPT4gdmFsdWUgPj0gQmlnSW50Lnplcm87CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNaZXJvID0+IHZhbHVlID09IEJpZ0ludC56ZXJvOwp9CgovLy8gVGhlIFtNYXhJbnRWYWx1ZV0gcmVwcmVzZW50cyB0aGUgbWF4aW11bSB2YWx1ZSBhbiBpbnRlZ2VyIGNhbiBoYXZlLAovLy8gd2hpY2ggaXMgY3VycmVudGx5ICtpbmZpbml0eS4KY2xhc3MgTWF4SW50VmFsdWUgZXh0ZW5kcyBWYWx1ZSB7CiAgY29uc3QgTWF4SW50VmFsdWUoKSA6IHN1cGVyKG51bGwpOwogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yICsoVmFsdWUgb3RoZXIpID0+IHRoaXM7CiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLShWYWx1ZSBvdGhlcikgPT4gdGhpczsKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKCkgPT4gY29uc3QgTWluSW50VmFsdWUoKTsKICBAb3ZlcnJpZGUKICBWYWx1ZSBtaW4oVmFsdWUgb3RoZXIpID0+IG90aGVyOwogIEBvdmVycmlkZQogIFZhbHVlIG1heChWYWx1ZSBvdGhlcikgPT4gdGhpczsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnTWF4JzsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05lZ2F0aXZlID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG9zaXRpdmUgPT4gdHJ1ZTsKfQoKLy8vIFRoZSBbTWluSW50VmFsdWVdIHJlcHJlc2VudHMgdGhlIG1pbmltdW0gdmFsdWUgYW4gaW50ZWdlciBjYW4gaGF2ZSwKLy8vIHdoaWNoIGlzIGN1cnJlbnRseSAtaW5maW5pdHkuCmNsYXNzIE1pbkludFZhbHVlIGV4dGVuZHMgVmFsdWUgewogIGNvbnN0IE1pbkludFZhbHVlKCkgOiBzdXBlcihudWxsKTsKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciArKFZhbHVlIG90aGVyKSA9PiB0aGlzOwogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0oVmFsdWUgb3RoZXIpID0+IHRoaXM7CiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLSgpID0+IGNvbnN0IE1heEludFZhbHVlKCk7CiAgQG92ZXJyaWRlCiAgVmFsdWUgbWluKFZhbHVlIG90aGVyKSA9PiB0aGlzOwogIEBvdmVycmlkZQogIFZhbHVlIG1heChWYWx1ZSBvdGhlcikgPT4gb3RoZXI7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ01pbic7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSA9PiB0cnVlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG9zaXRpdmUgPT4gZmFsc2U7Cn0KCi8vLyBUaGUgW1Vua25vd25WYWx1ZV0gaXMgdGhlIHNlbnRpbmVsIGluIG91ciBhbmFseXNpcyB0byBtYXJrIGFuCi8vLyBvcGVyYXRpb24gdGhhdCBjb3VsZCBub3QgYmUgZG9uZSBiZWNhdXNlIG9mIHRvbyBtdWNoIGNvbXBsZXhpdHkuCmNsYXNzIFVua25vd25WYWx1ZSBleHRlbmRzIFZhbHVlIHsKICBjb25zdCBVbmtub3duVmFsdWUoKSA6IHN1cGVyKG51bGwpOwogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yICsoVmFsdWUgb3RoZXIpID0+IGNvbnN0IFVua25vd25WYWx1ZSgpOwogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0oVmFsdWUgb3RoZXIpID0+IGNvbnN0IFVua25vd25WYWx1ZSgpOwogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0oKSA9PiBjb25zdCBVbmtub3duVmFsdWUoKTsKICBAb3ZlcnJpZGUKICBWYWx1ZSBtaW4oVmFsdWUgb3RoZXIpID0+IGNvbnN0IFVua25vd25WYWx1ZSgpOwogIEBvdmVycmlkZQogIFZhbHVlIG1heChWYWx1ZSBvdGhlcikgPT4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSA9PiBmYWxzZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1Bvc2l0aXZlID0+IGZhbHNlOwogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdVbmtub3duJzsKfQoKLy8vIEEgc3ltYm9saWMgdmFsdWUgcmVwcmVzZW50aW5nIGFuIFtISW5zdHJ1Y3Rpb25dLgpjbGFzcyBJbnN0cnVjdGlvblZhbHVlIGV4dGVuZHMgVmFsdWUgewogIGZpbmFsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbjsKICBJbnN0cnVjdGlvblZhbHVlKHRoaXMuaW5zdHJ1Y3Rpb24sIGluZm8pIDogc3VwZXIoaW5mbyk7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgSW5zdHJ1Y3Rpb25WYWx1ZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRoaXMuaW5zdHJ1Y3Rpb24gPT0gb3RoZXIuaW5zdHJ1Y3Rpb247CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdJbnN0cnVjdGlvblZhbHVlLmhhc2hDb2RlJyk7CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yICsoVmFsdWUgb3RoZXIpIHsKICAgIGlmIChvdGhlci5pc1plcm8pIHJldHVybiB0aGlzOwogICAgaWYgKG90aGVyIGlzIEludFZhbHVlKSB7CiAgICAgIGlmIChvdGhlci5pc05lZ2F0aXZlKSB7CiAgICAgICAgcmV0dXJuIGluZm8ubmV3U3VidHJhY3RWYWx1ZSh0aGlzLCAtb3RoZXIpOwogICAgICB9CiAgICAgIHJldHVybiBpbmZvLm5ld0FkZFZhbHVlKHRoaXMsIG90aGVyKTsKICAgIH0KICAgIGlmIChvdGhlciBpcyBJbnN0cnVjdGlvblZhbHVlKSB7CiAgICAgIHJldHVybiBpbmZvLm5ld0FkZFZhbHVlKHRoaXMsIG90aGVyKTsKICAgIH0KICAgIHJldHVybiBvdGhlciArIHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKFZhbHVlIG90aGVyKSB7CiAgICBpZiAob3RoZXIuaXNaZXJvKSByZXR1cm4gdGhpczsKICAgIGlmICh0aGlzID09IG90aGVyKSByZXR1cm4gaW5mby5pbnRaZXJvOwogICAgaWYgKG90aGVyIGlzIEludFZhbHVlKSB7CiAgICAgIGlmIChvdGhlci5pc05lZ2F0aXZlKSB7CiAgICAgICAgcmV0dXJuIGluZm8ubmV3QWRkVmFsdWUodGhpcywgLW90aGVyKTsKICAgICAgfQogICAgICByZXR1cm4gaW5mby5uZXdTdWJ0cmFjdFZhbHVlKHRoaXMsIG90aGVyKTsKICAgIH0KICAgIGlmIChvdGhlciBpcyBJbnN0cnVjdGlvblZhbHVlKSB7CiAgICAgIHJldHVybiBpbmZvLm5ld1N1YnRyYWN0VmFsdWUodGhpcywgb3RoZXIpOwogICAgfQogICAgcmV0dXJuIC1vdGhlciArIHRoaXM7CiAgfQoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKCkgewogICAgcmV0dXJuIGluZm8ubmV3TmVnYXRlVmFsdWUodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05lZ2F0aXZlID0+IGZhbHNlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG9zaXRpdmUgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdJbnN0cnVjdGlvbjogJGluc3RydWN0aW9uJzsKfQoKLy8vIFNwZWNpYWwgdmFsdWUgZm9yIGluc3RydWN0aW9ucyB3aG9zZSB0eXBlIGlzIGEgcG9zaXRpdmUgaW50ZWdlci4KY2xhc3MgUG9zaXRpdmVWYWx1ZSBleHRlbmRzIEluc3RydWN0aW9uVmFsdWUgewogIFBvc2l0aXZlVmFsdWUoSEluc3RydWN0aW9uIGluc3RydWN0aW9uLCBpbmZvKSA6IHN1cGVyKGluc3RydWN0aW9uLCBpbmZvKTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1Bvc2l0aXZlID0+IHRydWU7Cn0KCi8vLyBSZXByZXNlbnRzIGEgYmluYXJ5IG9wZXJhdGlvbiBvbiB0d28gW1ZhbHVlXSwgd2hlcmUgdGhlIG9wZXJhdGlvbgovLy8gZGlkIG5vdCB5aWVsZCBhIGNhbm9uaWNhbCB2YWx1ZS4KY2xhc3MgQmluYXJ5T3BlcmF0aW9uVmFsdWUgZXh0ZW5kcyBWYWx1ZSB7CiAgZmluYWwgVmFsdWUgbGVmdDsKICBmaW5hbCBWYWx1ZSByaWdodDsKICBCaW5hcnlPcGVyYXRpb25WYWx1ZSh0aGlzLmxlZnQsIHRoaXMucmlnaHQsIGluZm8pIDogc3VwZXIoaW5mbyk7Cn0KCmNsYXNzIEFkZFZhbHVlIGV4dGVuZHMgQmluYXJ5T3BlcmF0aW9uVmFsdWUgewogIEFkZFZhbHVlKGxlZnQsIHJpZ2h0LCBpbmZvKSA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBpbmZvKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBBZGRWYWx1ZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIChsZWZ0ID09IG90aGVyLmxlZnQgJiYgcmlnaHQgPT0gb3RoZXIucmlnaHQpIHx8CiAgICAgICAgKGxlZnQgPT0gb3RoZXIucmlnaHQgJiYgcmlnaHQgPT0gb3RoZXIubGVmdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdBZGRWYWx1ZS5oYXNoQ29kZScpOwoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKCkgPT4gLWxlZnQgLSByaWdodDsKCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgKyhWYWx1ZSBvdGhlcikgewogICAgaWYgKG90aGVyLmlzWmVybykgcmV0dXJuIHRoaXM7CiAgICBWYWx1ZSB2YWx1ZSA9IGxlZnQgKyBvdGhlcjsKICAgIGlmICh2YWx1ZSAhPSBjb25zdCBVbmtub3duVmFsdWUoKSAmJiB2YWx1ZSBpcyEgQmluYXJ5T3BlcmF0aW9uVmFsdWUpIHsKICAgICAgcmV0dXJuIHZhbHVlICsgcmlnaHQ7CiAgICB9CiAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIG5vdCBzaW1wbGUgZW5vdWdoLCB3ZSB0cnkgdGhlIHNhbWUgYXBwcm9hY2gKICAgIC8vIHdpdGggW3JpZ2h0XS4KICAgIHZhbHVlID0gcmlnaHQgKyBvdGhlcjsKICAgIGlmICh2YWx1ZSAhPSBjb25zdCBVbmtub3duVmFsdWUoKSAmJiB2YWx1ZSBpcyEgQmluYXJ5T3BlcmF0aW9uVmFsdWUpIHsKICAgICAgcmV0dXJuIGxlZnQgKyB2YWx1ZTsKICAgIH0KICAgIHJldHVybiBjb25zdCBVbmtub3duVmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIFZhbHVlIG9wZXJhdG9yIC0oVmFsdWUgb3RoZXIpIHsKICAgIGlmIChvdGhlci5pc1plcm8pIHJldHVybiB0aGlzOwogICAgVmFsdWUgdmFsdWUgPSBsZWZ0IC0gb3RoZXI7CiAgICBpZiAodmFsdWUgIT0gY29uc3QgVW5rbm93blZhbHVlKCkgJiYgdmFsdWUgaXMhIEJpbmFyeU9wZXJhdGlvblZhbHVlKSB7CiAgICAgIHJldHVybiB2YWx1ZSArIHJpZ2h0OwogICAgfQogICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBub3Qgc2ltcGxlIGVub3VnaCwgd2UgdHJ5IHRoZSBzYW1lIGFwcHJvYWNoCiAgICAvLyB3aXRoIFtyaWdodF0uCiAgICB2YWx1ZSA9IHJpZ2h0IC0gb3RoZXI7CiAgICBpZiAodmFsdWUgIT0gY29uc3QgVW5rbm93blZhbHVlKCkgJiYgdmFsdWUgaXMhIEJpbmFyeU9wZXJhdGlvblZhbHVlKSB7CiAgICAgIHJldHVybiBsZWZ0ICsgdmFsdWU7CiAgICB9CiAgICByZXR1cm4gY29uc3QgVW5rbm93blZhbHVlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc05lZ2F0aXZlID0+IGxlZnQuaXNOZWdhdGl2ZSAmJiByaWdodC5pc05lZ2F0aXZlOwogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzUG9zaXRpdmUgPT4gbGVmdC5pc1Bvc2l0aXZlICYmIHJpZ2h0LmlzUG9zaXRpdmU7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJyRsZWZ0ICsgJHJpZ2h0JzsKfQoKY2xhc3MgU3VidHJhY3RWYWx1ZSBleHRlbmRzIEJpbmFyeU9wZXJhdGlvblZhbHVlIHsKICBTdWJ0cmFjdFZhbHVlKGxlZnQsIHJpZ2h0LCBpbmZvKSA6IHN1cGVyKGxlZnQsIHJpZ2h0LCBpbmZvKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBTdWJ0cmFjdFZhbHVlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gbGVmdCA9PSBvdGhlci5sZWZ0ICYmIHJpZ2h0ID09IG90aGVyLnJpZ2h0OwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignU3VidHJhY3RWYWx1ZS5oYXNoQ29kZScpOwoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKCkgPT4gcmlnaHQgLSBsZWZ0OwoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciArKFZhbHVlIG90aGVyKSB7CiAgICBpZiAob3RoZXIuaXNaZXJvKSByZXR1cm4gdGhpczsKICAgIFZhbHVlIHZhbHVlID0gbGVmdCArIG90aGVyOwogICAgaWYgKHZhbHVlICE9IGNvbnN0IFVua25vd25WYWx1ZSgpICYmIHZhbHVlIGlzISBCaW5hcnlPcGVyYXRpb25WYWx1ZSkgewogICAgICByZXR1cm4gdmFsdWUgLSByaWdodDsKICAgIH0KICAgIC8vIElmIHRoZSByZXN1bHQgaXMgbm90IHNpbXBsZSBlbm91Z2gsIHdlIHRyeSB0aGUgc2FtZSBhcHByb2FjaAogICAgLy8gd2l0aCBbcmlnaHRdLgogICAgdmFsdWUgPSBvdGhlciAtIHJpZ2h0OwogICAgaWYgKHZhbHVlICE9IGNvbnN0IFVua25vd25WYWx1ZSgpICYmIHZhbHVlIGlzISBCaW5hcnlPcGVyYXRpb25WYWx1ZSkgewogICAgICByZXR1cm4gbGVmdCArIHZhbHVlOwogICAgfQogICAgcmV0dXJuIGNvbnN0IFVua25vd25WYWx1ZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLShWYWx1ZSBvdGhlcikgewogICAgaWYgKG90aGVyLmlzWmVybykgcmV0dXJuIHRoaXM7CiAgICBWYWx1ZSB2YWx1ZSA9IGxlZnQgLSBvdGhlcjsKICAgIGlmICh2YWx1ZSAhPSBjb25zdCBVbmtub3duVmFsdWUoKSAmJiB2YWx1ZSBpcyEgQmluYXJ5T3BlcmF0aW9uVmFsdWUpIHsKICAgICAgcmV0dXJuIHZhbHVlIC0gcmlnaHQ7CiAgICB9CiAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIG5vdCBzaW1wbGUgZW5vdWdoLCB3ZSB0cnkgdGhlIHNhbWUgYXBwcm9hY2gKICAgIC8vIHdpdGggW3JpZ2h0XS4KICAgIHZhbHVlID0gcmlnaHQgKyBvdGhlcjsKICAgIGlmICh2YWx1ZSAhPSBjb25zdCBVbmtub3duVmFsdWUoKSAmJiB2YWx1ZSBpcyEgQmluYXJ5T3BlcmF0aW9uVmFsdWUpIHsKICAgICAgcmV0dXJuIGxlZnQgLSB2YWx1ZTsKICAgIH0KICAgIHJldHVybiBjb25zdCBVbmtub3duVmFsdWUoKTsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gbGVmdC5pc05lZ2F0aXZlICYmIHJpZ2h0LmlzUG9zaXRpdmU7CiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNQb3NpdGl2ZSA9PiBsZWZ0LmlzUG9zaXRpdmUgJiYgcmlnaHQuaXNOZWdhdGl2ZTsKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJGxlZnQgLSAkcmlnaHQnOwp9CgpjbGFzcyBOZWdhdGVWYWx1ZSBleHRlbmRzIFZhbHVlIHsKICBmaW5hbCBWYWx1ZSB2YWx1ZTsKICBOZWdhdGVWYWx1ZSh0aGlzLnZhbHVlLCBpbmZvKSA6IHN1cGVyKGluZm8pOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIE5lZ2F0ZVZhbHVlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdmFsdWUgPT0gb3RoZXIudmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdOZWdhdGUuaGFzaENvZGUnKTsKCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgKyhvdGhlcikgewogICAgaWYgKG90aGVyLmlzWmVybykgcmV0dXJuIHRoaXM7CiAgICBpZiAob3RoZXIgPT0gdmFsdWUpIHJldHVybiBpbmZvLmludFplcm87CiAgICBpZiAob3RoZXIgaXMgTmVnYXRlVmFsdWUpIHJldHVybiB0aGlzIC0gb3RoZXIudmFsdWU7CiAgICBpZiAob3RoZXIgaXMgSW50VmFsdWUpIHsKICAgICAgaWYgKG90aGVyLmlzTmVnYXRpdmUpIHsKICAgICAgICByZXR1cm4gaW5mby5uZXdTdWJ0cmFjdFZhbHVlKHRoaXMsIC1vdGhlcik7CiAgICAgIH0KICAgICAgcmV0dXJuIGluZm8ubmV3U3VidHJhY3RWYWx1ZShvdGhlciwgdmFsdWUpOwogICAgfQogICAgaWYgKG90aGVyIGlzIEluc3RydWN0aW9uVmFsdWUpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3U3VidHJhY3RWYWx1ZShvdGhlciwgdmFsdWUpOwogICAgfQogICAgcmV0dXJuIG90aGVyIC0gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAmKFZhbHVlIG90aGVyKSA9PiBjb25zdCBVbmtub3duVmFsdWUoKTsKCiAgQG92ZXJyaWRlCiAgVmFsdWUgb3BlcmF0b3IgLShvdGhlcikgewogICAgaWYgKG90aGVyLmlzWmVybykgcmV0dXJuIHRoaXM7CiAgICBpZiAob3RoZXIgaXMgSW50VmFsdWUpIHsKICAgICAgaWYgKG90aGVyLmlzTmVnYXRpdmUpIHsKICAgICAgICByZXR1cm4gaW5mby5uZXdTdWJ0cmFjdFZhbHVlKC1vdGhlciwgdmFsdWUpOwogICAgICB9CiAgICAgIHJldHVybiBpbmZvLm5ld1N1YnRyYWN0VmFsdWUodGhpcywgb3RoZXIpOwogICAgfQogICAgaWYgKG90aGVyIGlzIEluc3RydWN0aW9uVmFsdWUpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3U3VidHJhY3RWYWx1ZSh0aGlzLCBvdGhlcik7CiAgICB9CiAgICBpZiAob3RoZXIgaXMgTmVnYXRlVmFsdWUpIHJldHVybiB0aGlzICsgb3RoZXIudmFsdWU7CiAgICByZXR1cm4gLW90aGVyIC0gdmFsdWU7CiAgfQoKICBAb3ZlcnJpZGUKICBWYWx1ZSBvcGVyYXRvciAtKCkgPT4gdmFsdWU7CgogIEBvdmVycmlkZQogIGJvb2wgZ2V0IGlzTmVnYXRpdmUgPT4gdmFsdWUuaXNQb3NpdGl2ZTsKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc1Bvc2l0aXZlID0+IHZhbHVlLmlzTmVnYXRpdmU7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJy0kdmFsdWUnOwp9CgovLy8gQSBbUmFuZ2VdIHJlcHJlc2VudHMgdGhlIHBvc3NpYmxlIGludGVnZXIgdmFsdWVzIGFuIGluc3RydWN0aW9uCi8vLyBjYW4gaGF2ZSwgZnJvbSBpdHMgW2xvd2VyXSBib3VuZCB0byBpdHMgW3VwcGVyXSBib3VuZCwgYm90aAovLy8gaW5jbHVkZWQuCmNsYXNzIFJhbmdlIHsKICBmaW5hbCBWYWx1ZSBsb3dlcjsKICBmaW5hbCBWYWx1ZSB1cHBlcjsKICBmaW5hbCBWYWx1ZVJhbmdlSW5mbyBpbmZvOwogIFJhbmdlKHRoaXMubG93ZXIsIHRoaXMudXBwZXIsIHRoaXMuaW5mbykgewogICAgYXNzZXJ0KGxvd2VyICE9IGNvbnN0IFVua25vd25WYWx1ZSgpKTsKICAgIGFzc2VydCh1cHBlciAhPSBjb25zdCBVbmtub3duVmFsdWUoKSk7CiAgfQoKICBSYW5nZS51bmJvdW5kKGluZm8pIDogdGhpcyhjb25zdCBNaW5JbnRWYWx1ZSgpLCBjb25zdCBNYXhJbnRWYWx1ZSgpLCBpbmZvKTsKCiAgLy8vIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWVzIGFyZSB1bmtub3duLCBhbmQgY3JlYXRlcyBhCiAgLy8vIHJhbmdlIHRoYXQgZG9lcyBub3QgaGF2ZSBhbnkgdW5rbm93biB2YWx1ZXMuCiAgUmFuZ2Uubm9ybWFsaXplKFZhbHVlIGxvdywgVmFsdWUgdXAsIGluZm8pCiAgICAgIDogdGhpcyhsb3cgPT0gY29uc3QgVW5rbm93blZhbHVlKCkgPyBjb25zdCBNaW5JbnRWYWx1ZSgpIDogbG93LAogICAgICAgICAgICB1cCA9PSBjb25zdCBVbmtub3duVmFsdWUoKSA/IGNvbnN0IE1heEludFZhbHVlKCkgOiB1cCwgaW5mbyk7CgogIFJhbmdlIHVuaW9uKFJhbmdlIG90aGVyKSB7CiAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoCiAgICAgICAgbG93ZXIubWluKG90aGVyLmxvd2VyKSwgdXBwZXIubWF4KG90aGVyLnVwcGVyKSk7CiAgfQoKICBSYW5nZSBpbnRlcnNlY3Rpb24oUmFuZ2Ugb3RoZXIpIHsKICAgIFZhbHVlIGxvdyA9IGxvd2VyLm1heChvdGhlci5sb3dlcik7CiAgICBWYWx1ZSB1cCA9IHVwcGVyLm1pbihvdGhlci51cHBlcik7CiAgICAvLyBJZiB3ZSBjb3VsZCBub3QgY29tcHV0ZSBtYXggb3IgbWluLCBwaWNrIGEgdmFsdWUgaW4gdGhlIHR3bwogICAgLy8gcmFuZ2VzLCB3aXRoIHByaW9yaXR5IHRvIFtJbnRWYWx1ZV1zIGJlY2F1c2UgdGhleSBhcmUgc2ltcGxlci4KICAgIGlmIChsb3cgPT0gY29uc3QgVW5rbm93blZhbHVlKCkpIHsKICAgICAgaWYgKGxvd2VyIGlzIEludFZhbHVlKQogICAgICAgIGxvdyA9IGxvd2VyOwogICAgICBlbHNlIGlmIChvdGhlci5sb3dlciBpcyBJbnRWYWx1ZSkKICAgICAgICBsb3cgPSBvdGhlci5sb3dlcjsKICAgICAgZWxzZQogICAgICAgIGxvdyA9IGxvd2VyOwogICAgfQogICAgaWYgKHVwID09IGNvbnN0IFVua25vd25WYWx1ZSgpKSB7CiAgICAgIGlmICh1cHBlciBpcyBJbnRWYWx1ZSkKICAgICAgICB1cCA9IHVwcGVyOwogICAgICBlbHNlIGlmIChvdGhlci51cHBlciBpcyBJbnRWYWx1ZSkKICAgICAgICB1cCA9IG90aGVyLnVwcGVyOwogICAgICBlbHNlCiAgICAgICAgdXAgPSB1cHBlcjsKICAgIH0KICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShsb3csIHVwKTsKICB9CgogIFJhbmdlIG9wZXJhdG9yICsoUmFuZ2Ugb3RoZXIpIHsKICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShsb3dlciArIG90aGVyLmxvd2VyLCB1cHBlciArIG90aGVyLnVwcGVyKTsKICB9CgogIFJhbmdlIG9wZXJhdG9yIC0oUmFuZ2Ugb3RoZXIpIHsKICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShsb3dlciAtIG90aGVyLnVwcGVyLCB1cHBlciAtIG90aGVyLmxvd2VyKTsKICB9CgogIFJhbmdlIG9wZXJhdG9yIC0oKSB7CiAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoLXVwcGVyLCAtbG93ZXIpOwogIH0KCiAgUmFuZ2Ugb3BlcmF0b3IgJihSYW5nZSBvdGhlcikgewogICAgaWYgKGlzU2luZ2xlVmFsdWUgJiYKICAgICAgICBvdGhlci5pc1NpbmdsZVZhbHVlICYmCiAgICAgICAgbG93ZXIgaXMgSW50VmFsdWUgJiYKICAgICAgICBvdGhlci5sb3dlciBpcyBJbnRWYWx1ZSkgewogICAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UobG93ZXIgJiBvdGhlci5sb3dlciwgdXBwZXIgJiBvdGhlci51cHBlcik7CiAgICB9CiAgICBpZiAoaXNQb3NpdGl2ZSAmJiBvdGhlci5pc1Bvc2l0aXZlKSB7CiAgICAgIFZhbHVlIHVwID0gdXBwZXIubWluKG90aGVyLnVwcGVyKTsKICAgICAgaWYgKHVwID09IGNvbnN0IFVua25vd25WYWx1ZSgpKSB7CiAgICAgICAgLy8gSWYgd2UgY291bGQgbm90IGZpbmQgYSB0cml2aWFsIGJvdW5kLCBqdXN0IHRyeSB0byB1c2UgdGhlCiAgICAgICAgLy8gb25lIHRoYXQgaXMgYW4gaW50LgogICAgICAgIHVwID0gdXBwZXIgaXMgSW50VmFsdWUgPyB1cHBlciA6IG90aGVyLnVwcGVyOwogICAgICAgIC8vIE1ha2Ugc3VyZSB3ZSBnZXQgdGhlIHNhbWUgdXBwZXIgYm91bmQsIHdoZXRoZXIgaXQncyBhICYgYgogICAgICAgIC8vIG9yIGIgJiBhLgogICAgICAgIGlmICh1cCBpcyEgSW50VmFsdWUgJiYgdXBwZXIgIT0gb3RoZXIudXBwZXIpIHVwID0gY29uc3QgTWF4SW50VmFsdWUoKTsKICAgICAgfQogICAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoaW5mby5pbnRaZXJvLCB1cCk7CiAgICB9IGVsc2UgaWYgKGlzUG9zaXRpdmUpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKGluZm8uaW50WmVybywgdXBwZXIpOwogICAgfSBlbHNlIGlmIChvdGhlci5pc1Bvc2l0aXZlKSB7CiAgICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShpbmZvLmludFplcm8sIG90aGVyLnVwcGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyIGlzISBSYW5nZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIG90aGVyLmxvd2VyID09IGxvd2VyICYmIG90aGVyLnVwcGVyID09IHVwcGVyOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignUmFuZ2UuaGFzaENvZGUnKTsKCiAgYm9vbCBvcGVyYXRvciA8KFJhbmdlIG90aGVyKSB7CiAgICByZXR1cm4gdXBwZXIgIT0gb3RoZXIubG93ZXIgJiYgdXBwZXIubWluKG90aGVyLmxvd2VyKSA9PSB1cHBlcjsKICB9CgogIGJvb2wgb3BlcmF0b3IgPihSYW5nZSBvdGhlcikgewogICAgcmV0dXJuIGxvd2VyICE9IG90aGVyLnVwcGVyICYmIGxvd2VyLm1heChvdGhlci51cHBlcikgPT0gbG93ZXI7CiAgfQoKICBib29sIG9wZXJhdG9yIDw9KFJhbmdlIG90aGVyKSB7CiAgICByZXR1cm4gdXBwZXIubWluKG90aGVyLmxvd2VyKSA9PSB1cHBlcjsKICB9CgogIGJvb2wgb3BlcmF0b3IgPj0oUmFuZ2Ugb3RoZXIpIHsKICAgIHJldHVybiBsb3dlci5tYXgob3RoZXIudXBwZXIpID09IGxvd2VyOwogIH0KCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSA9PiB1cHBlci5pc05lZ2F0aXZlOwogIGJvb2wgZ2V0IGlzUG9zaXRpdmUgPT4gbG93ZXIuaXNQb3NpdGl2ZTsKICBib29sIGdldCBpc1NpbmdsZVZhbHVlID0+IGxvd2VyID09IHVwcGVyOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnWyRsb3dlciwgJHVwcGVyXSc7Cn0KCi8vLyBWaXNpdHMgdGhlIGdyYXBoIGluIGRvbWluYXRvciBvcmRlciwgYW5kIGNvbXB1dGVzIHZhbHVlIHJhbmdlcyBmb3IKLy8vIGludGVnZXIgaW5zdHJ1Y3Rpb25zLiBXaGlsZSB2aXNpdGluZyB0aGUgZ3JhcGgsIHRoaXMgcGhhc2UgYWxzbwovLy8gcmVtb3ZlcyB1bm5lY2Vzc2FyeSBib3VuZHMgY2hlY2tzLCBhbmQgY29tcGFyaXNvbnMgdGhhdCBhcmUgcHJvdmVuCi8vLyB0byBiZSB0cnVlIG9yIGZhbHNlLgpjbGFzcyBTc2FWYWx1ZVJhbmdlQW5hbHl6ZXIgZXh0ZW5kcyBIQmFzZVZpc2l0b3IgaW1wbGVtZW50cyBPcHRpbWl6YXRpb25QaGFzZSB7CiAgQG92ZXJyaWRlCiAgU3RyaW5nIGdldCBuYW1lID0+ICdTU0EgdmFsdWUgcmFuZ2UgYnVpbGRlcic7CgogIC8vLyBMaXN0IG9mIFtIUmFuZ2VDb252ZXJzaW9uXSBpbnN0cnVjdGlvbnMgY3JlYXRlZCBieSB0aGUgcGhhc2UuIFdlCiAgLy8vIHNhdmUgdGhlbSBoZXJlIGluIG9yZGVyIHRvIHJlbW92ZSB0aGVtIG9uY2UgdGhlIHBoYXNlIGlzIGRvbmUuCiAgZmluYWwgTGlzdDxIUmFuZ2VDb252ZXJzaW9uPiBjb252ZXJzaW9ucyA9IDxIUmFuZ2VDb252ZXJzaW9uPltdOwoKICAvLy8gVmFsdWUgcmFuZ2VzIGZvciBpbnRlZ2VyIGluc3RydWN0aW9ucy4gVGhpcyBtYXAgZ2V0cyBwb3B1bGF0ZWQgYnkKICAvLy8gdGhlIGRvbWluYXRvciB0cmVlIHZpc2l0LgogIGZpbmFsIE1hcDxISW5zdHJ1Y3Rpb24sIFJhbmdlPiByYW5nZXMgPSBuZXcgTWFwPEhJbnN0cnVjdGlvbiwgUmFuZ2U+KCk7CgogIGZpbmFsIEpDbG9zZWRXb3JsZCBjbG9zZWRXb3JsZDsKICBmaW5hbCBWYWx1ZVJhbmdlSW5mbyBpbmZvOwogIGZpbmFsIFNzYU9wdGltaXplclRhc2sgb3B0aW1pemVyOwoKICBIR3JhcGggZ3JhcGg7CgogIFNzYVZhbHVlUmFuZ2VBbmFseXplcihKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQsIHRoaXMub3B0aW1pemVyKQogICAgICA6IGluZm8gPSBuZXcgVmFsdWVSYW5nZUluZm8oKSwKICAgICAgICB0aGlzLmNsb3NlZFdvcmxkID0gY2xvc2VkV29ybGQ7CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRHcmFwaChIR3JhcGggZ3JhcGgpIHsKICAgIHRoaXMuZ3JhcGggPSBncmFwaDsKICAgIHZpc2l0RG9taW5hdG9yVHJlZShncmFwaCk7CiAgICAvLyBXZSByZW1vdmUgdGhlIHJhbmdlIGNvbnZlcnNpb25zIGFmdGVyIHZpc2l0aW5nIHRoZSBncmFwaCBzbwogICAgLy8gdGhhdCB0aGUgZ3JhcGggZG9lcyBub3QgZ2V0IHBvbGx1dGVkIHdpdGggdGhlc2UgaW5zdHJ1Y3Rpb25zCiAgICAvLyBvbmx5IG5lY2Vzc2FyeSBmb3IgdGhpcyBwaGFzZS4KICAgIHJlbW92ZVJhbmdlQ29udmVyc2lvbigpOwogICAgLy8gVE9ETyhoZXJodXQpOiBGaW5kIGEgY2xlYW5lciB3YXkgdG8gcGFzcyBhcm91bmQgcmFuZ2VzLgogICAgb3B0aW1pemVyLnJhbmdlcyA9IHJhbmdlczsKICB9CgogIHZvaWQgcmVtb3ZlUmFuZ2VDb252ZXJzaW9uKCkgewogICAgY29udmVyc2lvbnMuZm9yRWFjaCgoSFJhbmdlQ29udmVyc2lvbiBpbnN0cnVjdGlvbikgewogICAgICBpbnN0cnVjdGlvbi5ibG9jay5yZXdyaXRlKGluc3RydWN0aW9uLCBpbnN0cnVjdGlvbi5pbnB1dHNbMF0pOwogICAgICBpbnN0cnVjdGlvbi5ibG9jay5yZW1vdmUoaW5zdHJ1Y3Rpb24pOwogICAgfSk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0QmFzaWNCbG9jayhIQmFzaWNCbG9jayBibG9jaykgewogICAgdm9pZCB2aXNpdChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgICAgUmFuZ2UgcmFuZ2UgPSBpbnN0cnVjdGlvbi5hY2NlcHQodGhpcyk7CiAgICAgIGlmIChpbnN0cnVjdGlvbgogICAgICAgICAgLmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICBhc3NlcnQocmFuZ2UgIT0gbnVsbCk7CiAgICAgICAgcmFuZ2VzW2luc3RydWN0aW9uXSA9IHJhbmdlOwogICAgICB9CiAgICB9CgogICAgYmxvY2suZm9yRWFjaFBoaSh2aXNpdCk7CiAgICBibG9jay5mb3JFYWNoSW5zdHJ1Y3Rpb24odmlzaXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRJbnN0cnVjdGlvbihISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGlmIChpbnN0cnVjdGlvbgogICAgICAgIC5pc1Bvc2l0aXZlSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZSgKICAgICAgICAgIGluZm8uaW50WmVybywgaW5mby5uZXdQb3NpdGl2ZVZhbHVlKGluc3RydWN0aW9uKSk7CiAgICB9IGVsc2UgaWYgKGluc3RydWN0aW9uCiAgICAgICAgLmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc0RlZmluaXRlbHlUcnVlKSB7CiAgICAgIEluc3RydWN0aW9uVmFsdWUgdmFsdWUgPSBpbmZvLm5ld0luc3RydWN0aW9uVmFsdWUoaW5zdHJ1Y3Rpb24pOwogICAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UodmFsdWUsIHZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgfQogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRQaGkoSFBoaSBwaGkpIHsKICAgIGlmIChwaGkuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlGYWxzZSkKICAgICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICAvLyBTb21lIHBoYXNlcyBtYXkgcmVwbGFjZSBpbnN0cnVjdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGlucHV0cyBvZgogICAgLy8gdGhpcyBwaGkuIE9ubHkgdGhlIFtTc2FUeXBlc1Byb3BhZ2F0aW9uXSBwaGFzZSB3aWxsIHVwZGF0ZSB0aGUKICAgIC8vIHBoaSB0eXBlLiBQbGF5IGl0IHNhZmUgYnkgYXNzdW1pbmcgdGhlIFtTc2FUeXBlc1Byb3BhZ2F0aW9uXQogICAgLy8gcGhhc2UgaXMgbm90IG5lY2Vzc2FyaWx5IHJ1biBiZWZvcmUgdGhlIFtWYWx1ZVJhbmdlQW5hbHl6ZXJdLgogICAgaWYgKHBoaS5pbnB1dHMuYW55KChpKSA9PgogICAgICAgIGkuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlGYWxzZSkpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICB9CiAgICBpZiAocGhpLmJsb2NrLmlzTG9vcEhlYWRlcigpKSB7CiAgICAgIFJhbmdlIHJhbmdlID0KICAgICAgICAgIG5ldyBMb29wVXBkYXRlUmVjb2duaXplcihjbG9zZWRXb3JsZCwgcmFuZ2VzLCBpbmZvKS5ydW4ocGhpKTsKICAgICAgaWYgKHJhbmdlID09IG51bGwpIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgICByZXR1cm4gcmFuZ2U7CiAgICB9CgogICAgUmFuZ2UgcmFuZ2UgPSByYW5nZXNbcGhpLmlucHV0c1swXV07CiAgICBmb3IgKGludCBpID0gMTsgaSA8IHBoaS5pbnB1dHMubGVuZ3RoOyBpKyspIHsKICAgICAgcmFuZ2UgPSByYW5nZS51bmlvbihyYW5nZXNbcGhpLmlucHV0c1tpXV0pOwogICAgfQogICAgcmV0dXJuIHJhbmdlOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRDb25zdGFudChIQ29uc3RhbnQgaENvbnN0YW50KSB7CiAgICBpZiAoaENvbnN0YW50CiAgICAgICAgLmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICB9CiAgICBDb25zdGFudFZhbHVlIGNvbnN0YW50ID0gaENvbnN0YW50LmNvbnN0YW50OwogICAgTnVtQ29uc3RhbnRWYWx1ZSBjb25zdGFudE51bTsKICAgIGlmIChjb25zdGFudCBpcyBEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUpIHsKICAgICAgY29uc3RhbnROdW0gPSBjb25zdGFudC5yZWZlcmVuY2VkOwogICAgfSBlbHNlIHsKICAgICAgY29uc3RhbnROdW0gPSBjb25zdGFudDsKICAgIH0KICAgIGlmIChjb25zdGFudE51bS5pc1Bvc2l0aXZlSW5maW5pdHkgfHwgY29uc3RhbnROdW0uaXNOZWdhdGl2ZUluZmluaXR5KSB7CiAgICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgfQogICAgaWYgKGNvbnN0YW50TnVtLmlzTWludXNaZXJvKSB7CiAgICAgIGNvbnN0YW50TnVtID0gbmV3IEludENvbnN0YW50VmFsdWUoQmlnSW50Lnplcm8pOwogICAgfQoKICAgIEJpZ0ludCBpbnRWYWx1ZSA9IGNvbnN0YW50TnVtIGlzIEludENvbnN0YW50VmFsdWUKICAgICAgICA/IGNvbnN0YW50TnVtLmludFZhbHVlCiAgICAgICAgOiBuZXcgQmlnSW50LmZyb20oY29uc3RhbnROdW0uZG91YmxlVmFsdWUudG9JbnQoKSk7CiAgICBWYWx1ZSB2YWx1ZSA9IGluZm8ubmV3SW50VmFsdWUoaW50VmFsdWUpOwogICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKHZhbHVlLCB2YWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdEZpZWxkR2V0KEhGaWVsZEdldCBmaWVsZEdldCkgewogICAgcmV0dXJuIHZpc2l0SW5zdHJ1Y3Rpb24oZmllbGRHZXQpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRHZXRMZW5ndGgoSEdldExlbmd0aCBub2RlKSB7CiAgICBQb3NpdGl2ZVZhbHVlIHZhbHVlID0gaW5mby5uZXdQb3NpdGl2ZVZhbHVlKG5vZGUpOwogICAgLy8gV2Uga25vdyB0aGlzIHJhbmdlIGlzIGFib3ZlIHplcm8uIFRvIHNpbXBsaWZ5IHRoZSBhbmFseXNpcywgd2UKICAgIC8vIHB1dCB0aGUgemVybyB2YWx1ZSBhcyB0aGUgbG93ZXIgYm91bmQgb2YgdGhpcyByYW5nZS4gVGhpcwogICAgLy8gYWxsb3dzIHRvIGVhc2lseSByZW1vdmUgdGhlIHNlY29uZCBib3VuZCBjaGVjayBpbiB0aGUgZm9sbG93aW5nCiAgICAvLyBleHByZXNzaW9uOiBhWzFdICsgYVswXS4KICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShpbmZvLmludFplcm8sIHZhbHVlKTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0Qm91bmRzQ2hlY2soSEJvdW5kc0NoZWNrIGNoZWNrKSB7CiAgICAvLyBTYXZlIHRoZSBuZXh0IGluc3RydWN0aW9uLCBpbiBjYXNlIHRoZSBjaGVjayBnZXRzIHJlbW92ZWQuCiAgICBISW5zdHJ1Y3Rpb24gbmV4dCA9IGNoZWNrLm5leHQ7CiAgICBSYW5nZSBpbmRleFJhbmdlID0gcmFuZ2VzW2NoZWNrLmluZGV4XTsKICAgIFJhbmdlIGxlbmd0aFJhbmdlID0gcmFuZ2VzW2NoZWNrLmxlbmd0aF07CiAgICBpZiAoaW5kZXhSYW5nZSA9PSBudWxsKSB7CiAgICAgIGluZGV4UmFuZ2UgPSBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgICBhc3NlcnQoY2hlY2suaW5kZXgKICAgICAgICAgIC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgIC5pc1BvdGVudGlhbGx5RmFsc2UpOwogICAgfQogICAgaWYgKGxlbmd0aFJhbmdlID09IG51bGwpIHsKICAgICAgLy8gV2UgbWlnaHQgaGF2ZSBsb3N0IHRoZSBsZW5ndGggcmFuZ2UgZHVlIHRvIGEgdHlwZSBjb252ZXJzaW9uIHRoYXQKICAgICAgLy8gYXNzZXJ0cyBhIG5vbi1pbnRlZ2VyIHR5cGUuIEluIHN1Y2ggYSBjYXNlLCB0aGUgcHJvZ3JhbSB3aWxsIG5ldmVyCiAgICAgIC8vIGdldCB0byB0aGlzIHBvaW50IGFueXdheSwgc28gbm8gbmVlZCB0byB0cnkgYW5kIHJlZmluZSByYW5nZXMuCiAgICAgIHJldHVybiBpbmRleFJhbmdlOwogICAgfQogICAgYXNzZXJ0KGNoZWNrLmxlbmd0aAogICAgICAgIC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSk7CgogICAgLy8gQ2hlY2sgaWYgdGhlIGluZGV4IGlzIHN0cmljdGx5IGJlbG93IHRoZSB1cHBlciBib3VuZCBvZiB0aGUgbGVuZ3RoCiAgICAvLyByYW5nZS4KICAgIFZhbHVlIG1heEluZGV4ID0gbGVuZ3RoUmFuZ2UudXBwZXIgLSBpbmZvLmludE9uZTsKICAgIGJvb2wgYmVsb3dMZW5ndGggPSBtYXhJbmRleCAhPSBjb25zdCBNYXhJbnRWYWx1ZSgpICYmCiAgICAgICAgaW5kZXhSYW5nZS51cHBlci5taW4obWF4SW5kZXgpID09IGluZGV4UmFuZ2UudXBwZXI7CgogICAgLy8gQ2hlY2sgaWYgdGhlIGluZGV4IGlzIHN0cmljdGx5IGJlbG93IHRoZSBsb3dlciBib3VuZCBvZiB0aGUgbGVuZ3RoCiAgICAvLyByYW5nZS4KICAgIGJlbG93TGVuZ3RoID0gYmVsb3dMZW5ndGggfHwKICAgICAgICAoaW5kZXhSYW5nZS51cHBlciAhPSBsZW5ndGhSYW5nZS5sb3dlciAmJgogICAgICAgICAgICBpbmRleFJhbmdlLnVwcGVyLm1pbihsZW5ndGhSYW5nZS5sb3dlcikgPT0gaW5kZXhSYW5nZS51cHBlcik7CiAgICBpZiAoaW5kZXhSYW5nZS5pc1Bvc2l0aXZlICYmIGJlbG93TGVuZ3RoKSB7CiAgICAgIGNoZWNrLmJsb2NrLnJld3JpdGUoY2hlY2ssIGNoZWNrLmluZGV4KTsKICAgICAgY2hlY2suYmxvY2sucmVtb3ZlKGNoZWNrKTsKICAgIH0gZWxzZSBpZiAoaW5kZXhSYW5nZS5pc05lZ2F0aXZlIHx8IGxlbmd0aFJhbmdlIDwgaW5kZXhSYW5nZSkgewogICAgICBjaGVjay5zdGF0aWNDaGVja3MgPSBIQm91bmRzQ2hlY2suQUxXQVlTX0ZBTFNFOwogICAgICAvLyBUaGUgY2hlY2sgaXMgYWx3YXlzIGZhbHNlLCBhbmQgd2hhdGV2ZXIgaW5zdHJ1Y3Rpb24gaXQKICAgICAgLy8gZG9taW5hdGVzIGlzIGRlYWQgY29kZS4KICAgICAgcmV0dXJuIGluZGV4UmFuZ2U7CiAgICB9IGVsc2UgaWYgKGluZGV4UmFuZ2UuaXNQb3NpdGl2ZSkgewogICAgICBjaGVjay5zdGF0aWNDaGVja3MgPSBIQm91bmRzQ2hlY2suQUxXQVlTX0FCT1ZFX1pFUk87CiAgICB9IGVsc2UgaWYgKGJlbG93TGVuZ3RoKSB7CiAgICAgIGNoZWNrLnN0YXRpY0NoZWNrcyA9IEhCb3VuZHNDaGVjay5BTFdBWVNfQkVMT1dfTEVOR1RIOwogICAgfQoKICAgIGlmIChpbmRleFJhbmdlLmlzUG9zaXRpdmUpIHsKICAgICAgLy8gSWYgdGhlIHRlc3QgcGFzc2VzLCB3ZSBrbm93IHRoZSBsb3dlciBib3VuZCBvZiB0aGUgbGVuZ3RoIGlzCiAgICAgIC8vIGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiB0aGUgbG93ZXIgYm91bmQgb2YgdGhlIGluZGV4LgogICAgICBWYWx1ZSBsb3cgPSBsZW5ndGhSYW5nZS5sb3dlci5tYXgoaW5kZXhSYW5nZS5sb3dlcik7CiAgICAgIGlmIChsb3cgIT0gY29uc3QgVW5rbm93blZhbHVlKCkpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBjcmVhdGVSYW5nZUNvbnZlcnNpb24obmV4dCwgY2hlY2subGVuZ3RoKTsKICAgICAgICByYW5nZXNbaW5zdHJ1Y3Rpb25dID0gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UobG93LCBsZW5ndGhSYW5nZS51cHBlcik7CiAgICAgIH0KICAgIH0KCiAgICAvLyBVcGRhdGUgdGhlIHJhbmdlIG9mIHRoZSBpbmRleCBpZiB1c2luZyB0aGUgbWF4aW11bSBpbmRleAogICAgLy8gbmFycm93cyBpdC4gVXNlIHRoYXQgbmV3IHJhbmdlIGZvciB0aGlzIGluc3RydWN0aW9uIGFzIHdlbGwuCiAgICBSYW5nZSBuZXdJbmRleFJhbmdlID0gaW5kZXhSYW5nZQogICAgICAgIC5pbnRlcnNlY3Rpb24oaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoaW5mby5pbnRaZXJvLCBtYXhJbmRleCkpOwogICAgaWYgKGluZGV4UmFuZ2UgPT0gbmV3SW5kZXhSYW5nZSkgcmV0dXJuIGluZGV4UmFuZ2U7CiAgICAvLyBFeHBsaWNpdGx5IGF0dGFjaCB0aGUgcmFuZ2UgaW5mb3JtYXRpb24gdG8gdGhlIGluZGV4IGluc3RydWN0aW9uLAogICAgLy8gd2hpY2ggbWF5IGJlIHVzZWQgYnkgb3RoZXIgaW5zdHJ1Y3Rpb25zLiAgUmV0dXJuaW5nIHRoZSBuZXcgcmFuZ2Ugd2lsbAogICAgLy8gYXR0YWNoIGl0IHRvIHRoaXMgaW5zdHJ1Y3Rpb24uCiAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSBjcmVhdGVSYW5nZUNvbnZlcnNpb24obmV4dCwgY2hlY2suaW5kZXgpOwogICAgcmFuZ2VzW2luc3RydWN0aW9uXSA9IG5ld0luZGV4UmFuZ2U7CiAgICByZXR1cm4gbmV3SW5kZXhSYW5nZTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0UmVsYXRpb25hbChIUmVsYXRpb25hbCByZWxhdGlvbmFsKSB7CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSByZWxhdGlvbmFsLnJpZ2h0OwogICAgSEluc3RydWN0aW9uIGxlZnQgPSByZWxhdGlvbmFsLmxlZnQ7CiAgICBpZiAobGVmdC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgfQogICAgaWYgKHJpZ2h0LmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICB9CiAgICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9IHJlbGF0aW9uYWwub3BlcmF0aW9uKCk7CiAgICBSYW5nZSByaWdodFJhbmdlID0gcmFuZ2VzW3JlbGF0aW9uYWwucmlnaHRdOwogICAgUmFuZ2UgbGVmdFJhbmdlID0gcmFuZ2VzW3JlbGF0aW9uYWwubGVmdF07CgogICAgaWYgKHJlbGF0aW9uYWwgaXMgSElkZW50aXR5KSB7CiAgICAgIGhhbmRsZUVxdWFsaXR5Q2hlY2socmVsYXRpb25hbCk7CiAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbi5hcHBseShsZWZ0UmFuZ2UsIHJpZ2h0UmFuZ2UpKSB7CiAgICAgIHJlbGF0aW9uYWwuYmxvY2sKICAgICAgICAgIC5yZXdyaXRlKHJlbGF0aW9uYWwsIGdyYXBoLmFkZENvbnN0YW50Qm9vbCh0cnVlLCBjbG9zZWRXb3JsZCkpOwogICAgICByZWxhdGlvbmFsLmJsb2NrLnJlbW92ZShyZWxhdGlvbmFsKTsKICAgIH0gZWxzZSBpZiAobmVnYXRlT3BlcmF0aW9uKG9wZXJhdGlvbikuYXBwbHkobGVmdFJhbmdlLCByaWdodFJhbmdlKSkgewogICAgICByZWxhdGlvbmFsLmJsb2NrCiAgICAgICAgICAucmV3cml0ZShyZWxhdGlvbmFsLCBncmFwaC5hZGRDb25zdGFudEJvb2woZmFsc2UsIGNsb3NlZFdvcmxkKSk7CiAgICAgIHJlbGF0aW9uYWwuYmxvY2sucmVtb3ZlKHJlbGF0aW9uYWwpOwogICAgfQogICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgfQoKICB2b2lkIGhhbmRsZUVxdWFsaXR5Q2hlY2soSFJlbGF0aW9uYWwgbm9kZSkgewogICAgUmFuZ2UgcmlnaHQgPSByYW5nZXNbbm9kZS5yaWdodF07CiAgICBSYW5nZSBsZWZ0ID0gcmFuZ2VzW25vZGUubGVmdF07CiAgICBpZiAobGVmdC5pc1NpbmdsZVZhbHVlICYmIHJpZ2h0LmlzU2luZ2xlVmFsdWUgJiYgbGVmdCA9PSByaWdodCkgewogICAgICBub2RlLmJsb2NrLnJld3JpdGUobm9kZSwgZ3JhcGguYWRkQ29uc3RhbnRCb29sKHRydWUsIGNsb3NlZFdvcmxkKSk7CiAgICAgIG5vZGUuYmxvY2sucmVtb3ZlKG5vZGUpOwogICAgfQogIH0KCiAgUmFuZ2UgaGFuZGxlSW52b2tlTW9kdWxvKEhJbnZva2VEeW5hbWljTWV0aG9kIGludm9rZSkgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnZva2UuaW5wdXRzWzFdOwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gaW52b2tlLmlucHV0c1syXTsKICAgIFJhbmdlIGRpdmlzb3IgPSByYW5nZXNbcmlnaHRdOwogICAgaWYgKGRpdmlzb3IgIT0gbnVsbCkgewogICAgICAvLyBGb3IgSW50ZWdlciB2YWx1ZXMgd2UgY2FuIGJlIHByZWNpc2UgaW4gdGhlIHVwcGVyIGJvdW5kLCBzbyBzcGVjaWFsCiAgICAgIC8vIGNhc2UgdGhvc2UuCiAgICAgIGlmIChsZWZ0LmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc0RlZmluaXRlbHlUcnVlICYmCiAgICAgICAgICByaWdodC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIGlmIChkaXZpc29yLmlzUG9zaXRpdmUpIHsKICAgICAgICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZSgKICAgICAgICAgICAgICBpbmZvLmludFplcm8sIGRpdmlzb3IudXBwZXIgLSBpbmZvLmludE9uZSk7CiAgICAgICAgfSBlbHNlIGlmIChkaXZpc29yLmlzTmVnYXRpdmUpIHsKICAgICAgICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZSgKICAgICAgICAgICAgICBpbmZvLmludFplcm8sIGluZm8ubmV3TmVnYXRlVmFsdWUoZGl2aXNvci5sb3dlcikgLSBpbmZvLmludE9uZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGxlZnQKICAgICAgICAgICAgICAuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICAgcmlnaHQuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgIGlmIChkaXZpc29yLmlzUG9zaXRpdmUpIHsKICAgICAgICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShpbmZvLmludFplcm8sIGRpdmlzb3IudXBwZXIpOwogICAgICAgIH0gZWxzZSBpZiAoZGl2aXNvci5pc05lZ2F0aXZlKSB7CiAgICAgICAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoCiAgICAgICAgICAgICAgaW5mby5pbnRaZXJvLCBpbmZvLm5ld05lZ2F0ZVZhbHVlKGRpdmlzb3IubG93ZXIpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRSZW1haW5kZXIoSFJlbWFpbmRlciBpbnN0cnVjdGlvbikgewogICAgSEluc3RydWN0aW9uIGxlZnQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMF07CiAgICBISW5zdHJ1Y3Rpb24gcmlnaHQgPSBpbnN0cnVjdGlvbi5pbnB1dHNbMV07CiAgICBSYW5nZSBkaXZpZGVuZCA9IHJhbmdlc1tsZWZ0XTsKICAgIC8vIElmIGJvdGggb3BlcmFuZHMgYXJlID49MCwgdGhlIHJlc3VsdCBpcyA+PSAwIGFuZCBib3VuZGVkIGJ5IHRoZSBkaXZpc29yLgogICAgaWYgKChkaXZpZGVuZCAhPSBudWxsICYmIGRpdmlkZW5kLmlzUG9zaXRpdmUpIHx8CiAgICAgICAgbGVmdAogICAgICAgICAgICAuaXNQb3NpdGl2ZUludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgUmFuZ2UgZGl2aXNvciA9IHJhbmdlc1tyaWdodF07CiAgICAgIGlmIChkaXZpc29yICE9IG51bGwpIHsKICAgICAgICBpZiAoZGl2aXNvci5pc1Bvc2l0aXZlKSB7CiAgICAgICAgICAvLyBGb3IgSW50ZWdlciB2YWx1ZXMgd2UgY2FuIGJlIHByZWNpc2UgaW4gdGhlIHVwcGVyIGJvdW5kLgogICAgICAgICAgaWYgKGxlZnQKICAgICAgICAgICAgICAgICAgLmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICAgICAgIHJpZ2h0CiAgICAgICAgICAgICAgICAgIC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAgICAgICAgICAgLmlzRGVmaW5pdGVseVRydWUpIHsKICAgICAgICAgICAgcmV0dXJuIGluZm8ubmV3Tm9ybWFsaXplZFJhbmdlKAogICAgICAgICAgICAgICAgaW5mby5pbnRaZXJvLCBkaXZpc29yLnVwcGVyIC0gaW5mby5pbnRPbmUpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGxlZnQuaXNOdW1iZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSAmJgogICAgICAgICAgICAgIHJpZ2h0CiAgICAgICAgICAgICAgICAgIC5pc051bWJlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgICAgICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICAgICAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoaW5mby5pbnRaZXJvLCBkaXZpc29yLnVwcGVyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRJbnZva2VEeW5hbWljTWV0aG9kKEhJbnZva2VEeW5hbWljTWV0aG9kIGludm9rZSkgewogICAgaWYgKChpbnZva2UuaW5wdXRzLmxlbmd0aCA9PSAzKSAmJiAoaW52b2tlLnNlbGVjdG9yLm5hbWUgPT0gIiUiKSkKICAgICAgcmV0dXJuIGhhbmRsZUludm9rZU1vZHVsbyhpbnZva2UpOwogICAgcmV0dXJuIHN1cGVyLnZpc2l0SW52b2tlRHluYW1pY01ldGhvZChpbnZva2UpOwogIH0KCiAgUmFuZ2UgaGFuZGxlQmluYXJ5T3BlcmF0aW9uKEhCaW5hcnlBcml0aG1ldGljIGluc3RydWN0aW9uKSB7CiAgICBpZiAoaW5zdHJ1Y3Rpb24KICAgICAgICAuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pCiAgICAgICAgLmlzUG90ZW50aWFsbHlGYWxzZSkgewogICAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgIH0KICAgIHJldHVybiBpbnN0cnVjdGlvbgogICAgICAgIC5vcGVyYXRpb24oKQogICAgICAgIC5hcHBseShyYW5nZXNbaW5zdHJ1Y3Rpb24ubGVmdF0sIHJhbmdlc1tpbnN0cnVjdGlvbi5yaWdodF0pOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRBZGQoSEFkZCBhZGQpIHsKICAgIHJldHVybiBoYW5kbGVCaW5hcnlPcGVyYXRpb24oYWRkKTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0U3VidHJhY3QoSFN1YnRyYWN0IHN1YikgewogICAgcmV0dXJuIGhhbmRsZUJpbmFyeU9wZXJhdGlvbihzdWIpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRCaXRBbmQoSEJpdEFuZCBub2RlKSB7CiAgICBpZiAobm9kZS5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNQb3RlbnRpYWxseUZhbHNlKSB7CiAgICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgfQogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gbm9kZS5yaWdodDsKICAgIEhJbnN0cnVjdGlvbiBsZWZ0ID0gbm9kZS5sZWZ0OwogICAgaWYgKGxlZnQuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzRGVmaW5pdGVseVRydWUgJiYKICAgICAgICByaWdodC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gcmFuZ2VzW2xlZnRdICYgcmFuZ2VzW3JpZ2h0XTsKICAgIH0KCiAgICBSYW5nZSB0cnlDb21wdXRlUmFuZ2UoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICAgIFJhbmdlIHJhbmdlID0gcmFuZ2VzW2luc3RydWN0aW9uXTsKICAgICAgaWYgKHJhbmdlLmlzUG9zaXRpdmUpIHsKICAgICAgICByZXR1cm4gaW5mby5uZXdOb3JtYWxpemVkUmFuZ2UoaW5mby5pbnRaZXJvLCByYW5nZS51cHBlcik7CiAgICAgIH0gZWxzZSBpZiAocmFuZ2UuaXNOZWdhdGl2ZSkgewogICAgICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShyYW5nZS5sb3dlciwgaW5mby5pbnRaZXJvKTsKICAgICAgfQogICAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgIH0KCiAgICBpZiAobGVmdC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gdHJ5Q29tcHV0ZVJhbmdlKGxlZnQpOwogICAgfSBlbHNlIGlmIChyaWdodAogICAgICAgIC5pc0ludGVnZXIoY2xvc2VkV29ybGQuYWJzdHJhY3RWYWx1ZURvbWFpbikKICAgICAgICAuaXNEZWZpbml0ZWx5VHJ1ZSkgewogICAgICByZXR1cm4gdHJ5Q29tcHV0ZVJhbmdlKHJpZ2h0KTsKICAgIH0KICAgIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogIH0KCiAgQG92ZXJyaWRlCiAgUmFuZ2UgdmlzaXRDaGVjayhIQ2hlY2sgaW5zdHJ1Y3Rpb24pIHsKICAgIGlmIChyYW5nZXNbaW5zdHJ1Y3Rpb24uY2hlY2tlZElucHV0XSA9PSBudWxsKSB7CiAgICAgIHJldHVybiB2aXNpdEluc3RydWN0aW9uKGluc3RydWN0aW9uKTsKICAgIH0KICAgIHJldHVybiByYW5nZXNbaW5zdHJ1Y3Rpb24uY2hlY2tlZElucHV0XTsKICB9CgogIEhJbnN0cnVjdGlvbiBjcmVhdGVSYW5nZUNvbnZlcnNpb24oCiAgICAgIEhJbnN0cnVjdGlvbiBjdXJzb3IsIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgSFJhbmdlQ29udmVyc2lvbiBuZXdJbnN0cnVjdGlvbiA9IG5ldyBIUmFuZ2VDb252ZXJzaW9uKAogICAgICAgIGluc3RydWN0aW9uLCBjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluLmludFR5cGUpOwogICAgY29udmVyc2lvbnMuYWRkKG5ld0luc3RydWN0aW9uKTsKICAgIGN1cnNvci5ibG9jay5hZGRCZWZvcmUoY3Vyc29yLCBuZXdJbnN0cnVjdGlvbik7CiAgICAvLyBVcGRhdGUgdGhlIHVzZXJzIG9mIHRoZSBpbnN0cnVjdGlvbiBkb21pbmF0ZWQgYnkgW2N1cnNvcl0gdG8KICAgIC8vIHVzZSB0aGUgbmV3IGluc3RydWN0aW9uLCB0aGF0IGhhcyBhbiBuYXJyb3dlciByYW5nZS4KICAgIGluc3RydWN0aW9uLnJlcGxhY2VBbGxVc2Vyc0RvbWluYXRlZEJ5KGN1cnNvciwgbmV3SW5zdHJ1Y3Rpb24pOwogICAgcmV0dXJuIG5ld0luc3RydWN0aW9uOwogIH0KCiAgc3RhdGljIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gbmVnYXRlT3BlcmF0aW9uKAogICAgICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbikgewogICAgaWYgKG9wZXJhdGlvbiA9PSBjb25zdCBjb25zdGFudF9zeXN0ZW0uTGVzc09wZXJhdGlvbigpKSB7CiAgICAgIHJldHVybiBjb25zdCBjb25zdGFudF9zeXN0ZW0uR3JlYXRlckVxdWFsT3BlcmF0aW9uKCk7CiAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PSBjb25zdCBjb25zdGFudF9zeXN0ZW0uTGVzc0VxdWFsT3BlcmF0aW9uKCkpIHsKICAgICAgcmV0dXJuIGNvbnN0IGNvbnN0YW50X3N5c3RlbS5HcmVhdGVyT3BlcmF0aW9uKCk7CiAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PSBjb25zdCBjb25zdGFudF9zeXN0ZW0uR3JlYXRlck9wZXJhdGlvbigpKSB7CiAgICAgIHJldHVybiBjb25zdCBjb25zdGFudF9zeXN0ZW0uTGVzc0VxdWFsT3BlcmF0aW9uKCk7CiAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PSBjb25zdCBjb25zdGFudF9zeXN0ZW0uR3JlYXRlckVxdWFsT3BlcmF0aW9uKCkpIHsKICAgICAgcmV0dXJuIGNvbnN0IGNvbnN0YW50X3N5c3RlbS5MZXNzT3BlcmF0aW9uKCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIHN0YXRpYyBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIGZsaXBPcGVyYXRpb24oCiAgICAgIGNvbnN0YW50X3N5c3RlbS5CaW5hcnlPcGVyYXRpb24gb3BlcmF0aW9uKSB7CiAgICBpZiAob3BlcmF0aW9uID09IGNvbnN0IGNvbnN0YW50X3N5c3RlbS5MZXNzT3BlcmF0aW9uKCkpIHsKICAgICAgcmV0dXJuIGNvbnN0IGNvbnN0YW50X3N5c3RlbS5HcmVhdGVyT3BlcmF0aW9uKCk7CiAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PSBjb25zdCBjb25zdGFudF9zeXN0ZW0uTGVzc0VxdWFsT3BlcmF0aW9uKCkpIHsKICAgICAgcmV0dXJuIGNvbnN0IGNvbnN0YW50X3N5c3RlbS5HcmVhdGVyRXF1YWxPcGVyYXRpb24oKTsKICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09IGNvbnN0IGNvbnN0YW50X3N5c3RlbS5HcmVhdGVyT3BlcmF0aW9uKCkpIHsKICAgICAgcmV0dXJuIGNvbnN0IGNvbnN0YW50X3N5c3RlbS5MZXNzT3BlcmF0aW9uKCk7CiAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PSBjb25zdCBjb25zdGFudF9zeXN0ZW0uR3JlYXRlckVxdWFsT3BlcmF0aW9uKCkpIHsKICAgICAgcmV0dXJuIGNvbnN0IGNvbnN0YW50X3N5c3RlbS5MZXNzRXF1YWxPcGVyYXRpb24oKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgUmFuZ2UgY29tcHV0ZUNvbnN0cmFpbmVkUmFuZ2UoY29uc3RhbnRfc3lzdGVtLkJpbmFyeU9wZXJhdGlvbiBvcGVyYXRpb24sCiAgICAgIFJhbmdlIGxlZnRSYW5nZSwgUmFuZ2UgcmlnaHRSYW5nZSkgewogICAgUmFuZ2UgcmFuZ2U7CiAgICBpZiAob3BlcmF0aW9uID09IGNvbnN0IGNvbnN0YW50X3N5c3RlbS5MZXNzT3BlcmF0aW9uKCkpIHsKICAgICAgcmFuZ2UgPSBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZSgKICAgICAgICAgIGNvbnN0IE1pbkludFZhbHVlKCksIHJpZ2h0UmFuZ2UudXBwZXIgLSBpbmZvLmludE9uZSk7CiAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PSBjb25zdCBjb25zdGFudF9zeXN0ZW0uTGVzc0VxdWFsT3BlcmF0aW9uKCkpIHsKICAgICAgcmFuZ2UgPSBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShjb25zdCBNaW5JbnRWYWx1ZSgpLCByaWdodFJhbmdlLnVwcGVyKTsKICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uID09IGNvbnN0IGNvbnN0YW50X3N5c3RlbS5HcmVhdGVyT3BlcmF0aW9uKCkpIHsKICAgICAgcmFuZ2UgPSBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZSgKICAgICAgICAgIHJpZ2h0UmFuZ2UubG93ZXIgKyBpbmZvLmludE9uZSwgY29uc3QgTWF4SW50VmFsdWUoKSk7CiAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiA9PSBjb25zdCBjb25zdGFudF9zeXN0ZW0uR3JlYXRlckVxdWFsT3BlcmF0aW9uKCkpIHsKICAgICAgcmFuZ2UgPSBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShyaWdodFJhbmdlLmxvd2VyLCBjb25zdCBNYXhJbnRWYWx1ZSgpKTsKICAgIH0gZWxzZSB7CiAgICAgIHJhbmdlID0gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgIH0KICAgIHJldHVybiByYW5nZS5pbnRlcnNlY3Rpb24obGVmdFJhbmdlKTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0Q29uZGl0aW9uYWxCcmFuY2goSENvbmRpdGlvbmFsQnJhbmNoIGJyYW5jaCkgewogICAgZHluYW1pYyBjb25kaXRpb24gPSBicmFuY2guY29uZGl0aW9uOwogICAgLy8gVE9ETyhuZ2VvZmZyYXkpOiBIYW5kbGUgY29tcGxleCBjb25kaXRpb25zLgogICAgaWYgKGNvbmRpdGlvbiBpcyEgSFJlbGF0aW9uYWwpIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgaWYgKGNvbmRpdGlvbiBpcyBISWRlbnRpdHkpIHJldHVybiBpbmZvLm5ld1VuYm91bmRSYW5nZSgpOwogICAgSEluc3RydWN0aW9uIHJpZ2h0ID0gY29uZGl0aW9uLnJpZ2h0OwogICAgSEluc3RydWN0aW9uIGxlZnQgPSBjb25kaXRpb24ubGVmdDsKICAgIGlmIChsZWZ0LmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKS5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgICB9CiAgICBpZiAocmlnaHQuaXNJbnRlZ2VyKGNsb3NlZFdvcmxkLmFic3RyYWN0VmFsdWVEb21haW4pLmlzUG90ZW50aWFsbHlGYWxzZSkgewogICAgICByZXR1cm4gaW5mby5uZXdVbmJvdW5kUmFuZ2UoKTsKICAgIH0KCiAgICBSYW5nZSByaWdodFJhbmdlID0gcmFuZ2VzW3JpZ2h0XTsKICAgIFJhbmdlIGxlZnRSYW5nZSA9IHJhbmdlc1tsZWZ0XTsKICAgIGNvbnN0YW50X3N5c3RlbS5PcGVyYXRpb24gb3BlcmF0aW9uID0gY29uZGl0aW9uLm9wZXJhdGlvbigpOwogICAgY29uc3RhbnRfc3lzdGVtLk9wZXJhdGlvbiBtaXJyb3JPcCA9IGZsaXBPcGVyYXRpb24ob3BlcmF0aW9uKTsKICAgIC8vIE9ubHkgdXBkYXRlIHRoZSB0cnVlIGJyYW5jaCBpZiB0aGlzIGJsb2NrIGlzIHRoZSBvbmx5CiAgICAvLyBwcmVkZWNlc3Nvci4KICAgIGlmIChicmFuY2gudHJ1ZUJyYW5jaC5wcmVkZWNlc3NvcnMubGVuZ3RoID09IDEpIHsKICAgICAgYXNzZXJ0KGJyYW5jaC50cnVlQnJhbmNoLnByZWRlY2Vzc29yc1swXSA9PSBicmFuY2guYmxvY2spOwogICAgICAvLyBVcGRhdGUgdGhlIHRydWUgYnJhbmNoIHRvIHVzZSBuYXJyb3dlciByYW5nZXMgZm9yIFtsZWZ0XSBhbmQKICAgICAgLy8gW3JpZ2h0XS4KICAgICAgUmFuZ2UgcmFuZ2UgPSBjb21wdXRlQ29uc3RyYWluZWRSYW5nZShvcGVyYXRpb24sIGxlZnRSYW5nZSwgcmlnaHRSYW5nZSk7CiAgICAgIGlmIChsZWZ0UmFuZ2UgIT0gcmFuZ2UpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPQogICAgICAgICAgICBjcmVhdGVSYW5nZUNvbnZlcnNpb24oYnJhbmNoLnRydWVCcmFuY2guZmlyc3QsIGxlZnQpOwogICAgICAgIHJhbmdlc1tpbnN0cnVjdGlvbl0gPSByYW5nZTsKICAgICAgfQoKICAgICAgcmFuZ2UgPSBjb21wdXRlQ29uc3RyYWluZWRSYW5nZShtaXJyb3JPcCwgcmlnaHRSYW5nZSwgbGVmdFJhbmdlKTsKICAgICAgaWYgKHJpZ2h0UmFuZ2UgIT0gcmFuZ2UpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPQogICAgICAgICAgICBjcmVhdGVSYW5nZUNvbnZlcnNpb24oYnJhbmNoLnRydWVCcmFuY2guZmlyc3QsIHJpZ2h0KTsKICAgICAgICByYW5nZXNbaW5zdHJ1Y3Rpb25dID0gcmFuZ2U7CiAgICAgIH0KICAgIH0KCiAgICAvLyBPbmx5IHVwZGF0ZSB0aGUgZmFsc2UgYnJhbmNoIGlmIHRoaXMgYmxvY2sgaXMgdGhlIG9ubHkKICAgIC8vIHByZWRlY2Vzc29yLgogICAgaWYgKGJyYW5jaC5mYWxzZUJyYW5jaC5wcmVkZWNlc3NvcnMubGVuZ3RoID09IDEpIHsKICAgICAgYXNzZXJ0KGJyYW5jaC5mYWxzZUJyYW5jaC5wcmVkZWNlc3NvcnNbMF0gPT0gYnJhbmNoLmJsb2NrKTsKICAgICAgY29uc3RhbnRfc3lzdGVtLk9wZXJhdGlvbiByZXZlcnNlID0gbmVnYXRlT3BlcmF0aW9uKG9wZXJhdGlvbik7CiAgICAgIGNvbnN0YW50X3N5c3RlbS5PcGVyYXRpb24gcmV2ZXJzZWRNaXJyb3IgPSBmbGlwT3BlcmF0aW9uKHJldmVyc2UpOwogICAgICAvLyBVcGRhdGUgdGhlIGZhbHNlIGJyYW5jaCB0byB1c2UgbmFycm93ZXIgcmFuZ2VzIGZvciBbbGVmdF0gYW5kCiAgICAgIC8vIFtyaWdodF0uCiAgICAgIFJhbmdlIHJhbmdlID0gY29tcHV0ZUNvbnN0cmFpbmVkUmFuZ2UocmV2ZXJzZSwgbGVmdFJhbmdlLCByaWdodFJhbmdlKTsKICAgICAgaWYgKGxlZnRSYW5nZSAhPSByYW5nZSkgewogICAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9CiAgICAgICAgICAgIGNyZWF0ZVJhbmdlQ29udmVyc2lvbihicmFuY2guZmFsc2VCcmFuY2guZmlyc3QsIGxlZnQpOwogICAgICAgIHJhbmdlc1tpbnN0cnVjdGlvbl0gPSByYW5nZTsKICAgICAgfQoKICAgICAgcmFuZ2UgPSBjb21wdXRlQ29uc3RyYWluZWRSYW5nZShyZXZlcnNlZE1pcnJvciwgcmlnaHRSYW5nZSwgbGVmdFJhbmdlKTsKICAgICAgaWYgKHJpZ2h0UmFuZ2UgIT0gcmFuZ2UpIHsKICAgICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPQogICAgICAgICAgICBjcmVhdGVSYW5nZUNvbnZlcnNpb24oYnJhbmNoLmZhbHNlQnJhbmNoLmZpcnN0LCByaWdodCk7CiAgICAgICAgcmFuZ2VzW2luc3RydWN0aW9uXSA9IHJhbmdlOwogICAgICB9CiAgICB9CgogICAgcmV0dXJuIGluZm8ubmV3VW5ib3VuZFJhbmdlKCk7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdFJhbmdlQ29udmVyc2lvbihIUmFuZ2VDb252ZXJzaW9uIGNvbnZlcnNpb24pIHsKICAgIHJldHVybiByYW5nZXNbY29udmVyc2lvbl07CiAgfQp9CgovLy8gVHJpZXMgdG8gZmluZCBhIHJhbmdlIGZvciB0aGUgdXBkYXRlIGluc3RydWN0aW9uIG9mIGEgbG9vcCBwaGkuCmNsYXNzIExvb3BVcGRhdGVSZWNvZ25pemVyIGV4dGVuZHMgSEJhc2VWaXNpdG9yIHsKICBmaW5hbCBKQ2xvc2VkV29ybGQgY2xvc2VkV29ybGQ7CiAgZmluYWwgTWFwPEhJbnN0cnVjdGlvbiwgUmFuZ2U+IHJhbmdlczsKICBmaW5hbCBWYWx1ZVJhbmdlSW5mbyBpbmZvOwogIExvb3BVcGRhdGVSZWNvZ25pemVyKHRoaXMuY2xvc2VkV29ybGQsIHRoaXMucmFuZ2VzLCB0aGlzLmluZm8pOwoKICBSYW5nZSBydW4oSFBoaSBsb29wUGhpKSB7CiAgICAvLyBDcmVhdGUgYSBtYXJrZXIgcmFuZ2UgZm9yIHRoZSBsb29wIHBoaSwgc28gdGhhdCBpZiB0aGUgdXBkYXRlCiAgICAvLyB1c2VzIHRoZSBsb29wIHBoaSwgaXQgaGFzIGEgcmFuZ2UgdG8gdXNlLgogICAgcmFuZ2VzW2xvb3BQaGldID0gaW5mby5uZXdNYXJrZXJSYW5nZSgpOwogICAgUmFuZ2UgdXBkYXRlUmFuZ2UgPSB2aXNpdChsb29wUGhpLmlucHV0c1sxXSk7CiAgICByYW5nZXNbbG9vcFBoaV0gPSBudWxsOwogICAgaWYgKHVwZGF0ZVJhbmdlID09IG51bGwpIHJldHVybiBudWxsOwogICAgUmFuZ2Ugc3RhcnRSYW5nZSA9IHJhbmdlc1tsb29wUGhpLmlucHV0c1swXV07CiAgICAvLyBJZiB0aGUgbG93ZXIgKHJlc3BlY3RpdmVseSB1cHBlcikgdmFsdWUgaXMgdGhlIG1hcmtlciwgd2Uga25vdwogICAgLy8gdGhlIGxvb3AgZG9lcyBub3QgY2hhbmdlIGl0LCBzbyB3ZSBjYW4ganVzdCB1c2UgdGhlCiAgICAvLyBbc3RhcnRSYW5nZV0ncyBsb3dlciAodXBwZXIpIHZhbHVlLiBPdGhlcndpc2UgdGhlIGxvd2VyICh1cHBlcikgdmFsdWUKICAgIC8vIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBbc3RhcnRSYW5nZV0ncyBsb3dlciAodXBwZXIpIGFuZCB0aGUKICAgIC8vIFt1cGRhdGVSYW5nZV0ncyBsb3dlciAodXBwZXIpLgogICAgVmFsdWUgbG93ID0gdXBkYXRlUmFuZ2UubG93ZXIgaXMgTWFya2VyVmFsdWUKICAgICAgICA/IHN0YXJ0UmFuZ2UubG93ZXIKICAgICAgICA6IHVwZGF0ZVJhbmdlLmxvd2VyLm1pbihzdGFydFJhbmdlLmxvd2VyKTsKICAgIFZhbHVlIHVwID0gdXBkYXRlUmFuZ2UudXBwZXIgaXMgTWFya2VyVmFsdWUKICAgICAgICA/IHN0YXJ0UmFuZ2UudXBwZXIKICAgICAgICA6IHVwZGF0ZVJhbmdlLnVwcGVyLm1heChzdGFydFJhbmdlLnVwcGVyKTsKICAgIHJldHVybiBpbmZvLm5ld05vcm1hbGl6ZWRSYW5nZShsb3csIHVwKTsKICB9CgogIFJhbmdlIHZpc2l0KEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbikgewogICAgaWYgKGluc3RydWN0aW9uCiAgICAgICAgLmlzSW50ZWdlcihjbG9zZWRXb3JsZC5hYnN0cmFjdFZhbHVlRG9tYWluKQogICAgICAgIC5pc1BvdGVudGlhbGx5RmFsc2UpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAocmFuZ2VzW2luc3RydWN0aW9uXSAhPSBudWxsKSByZXR1cm4gcmFuZ2VzW2luc3RydWN0aW9uXTsKICAgIHJldHVybiBpbnN0cnVjdGlvbi5hY2NlcHQodGhpcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdFBoaShIUGhpIHBoaSkgewogICAgLy8gSWYgdGhlIHVwZGF0ZSBvZiBhIGxvb3AgcGhpIGludm9sdmVzIGFub3RoZXIgbG9vcCBwaGksIHdlIGdpdmUKICAgIC8vIHVwLgogICAgaWYgKHBoaS5ibG9jay5pc0xvb3BIZWFkZXIoKSkgcmV0dXJuIG51bGw7CiAgICBSYW5nZSBwaGlSYW5nZTsKICAgIGZvciAoSEluc3RydWN0aW9uIGlucHV0IGluIHBoaS5pbnB1dHMpIHsKICAgICAgUmFuZ2UgaW5wdXRSYW5nZSA9IHZpc2l0KGlucHV0KTsKICAgICAgaWYgKGlucHV0UmFuZ2UgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICAgIGlmIChwaGlSYW5nZSA9PSBudWxsKSB7CiAgICAgICAgcGhpUmFuZ2UgPSBpbnB1dFJhbmdlOwogICAgICB9IGVsc2UgewogICAgICAgIHBoaVJhbmdlID0gcGhpUmFuZ2UudW5pb24oaW5wdXRSYW5nZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBwaGlSYW5nZTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0Q2hlY2soSENoZWNrIGluc3RydWN0aW9uKSB7CiAgICByZXR1cm4gdmlzaXQoaW5zdHJ1Y3Rpb24uY2hlY2tlZElucHV0KTsKICB9CgogIEBvdmVycmlkZQogIFJhbmdlIHZpc2l0QWRkKEhBZGQgb3BlcmF0aW9uKSB7CiAgICByZXR1cm4gaGFuZGxlQmluYXJ5T3BlcmF0aW9uKG9wZXJhdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBSYW5nZSB2aXNpdFN1YnRyYWN0KEhTdWJ0cmFjdCBvcGVyYXRpb24pIHsKICAgIHJldHVybiBoYW5kbGVCaW5hcnlPcGVyYXRpb24ob3BlcmF0aW9uKTsKICB9CgogIFJhbmdlIGhhbmRsZUJpbmFyeU9wZXJhdGlvbihIQmluYXJ5QXJpdGhtZXRpYyBpbnN0cnVjdGlvbikgewogICAgUmFuZ2UgbGVmdFJhbmdlID0gdmlzaXQoaW5zdHJ1Y3Rpb24ubGVmdCk7CiAgICBSYW5nZSByaWdodFJhbmdlID0gdmlzaXQoaW5zdHJ1Y3Rpb24ucmlnaHQpOwogICAgaWYgKGxlZnRSYW5nZSA9PSBudWxsIHx8IHJpZ2h0UmFuZ2UgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBjb25zdGFudF9zeXN0ZW0uQmluYXJ5T3BlcmF0aW9uIG9wZXJhdGlvbiA9IGluc3RydWN0aW9uLm9wZXJhdGlvbigpOwogICAgcmV0dXJuIG9wZXJhdGlvbi5hcHBseShsZWZ0UmFuZ2UsIHJpZ2h0UmFuZ2UpOwogIH0KfQqE0QBOTjwBPyMqFRgBFxQTARUoJgQBJCYEATg0BAE1MQQBLywEATQxBAEmKQQBHCQEATIvBAEbFkoEAgFCRA8XHRoBOTkuOQEbJDQzICgnIQQBGyQzNCAnKCEEASAgHAIBQA0iQkUzFwE4AQwiQkMoIQQBDCJDQighBAIBNR8WATIBDCQjMTEqMTYwBAEMJCMyNioxNjAEAQwXHRdHNjAEAQwkOTQqMTAEAQwdNDQEAQwdNDQEAQwcKiYEAQxHAQwqDC4MLwwrAgFIIiIlDCkMKQwtDCMMIgweDCAMHwIBSCIiJQwpDCkMLQwiDCMMHgwfDCACAUJFIyYMOQw5DC4MMgwyDCAMIAwiAgE1JyI6AQwcMjIEAQxPAQwiIx0eNAgsBiUsBhkEAQwiIywdHi8IMQYlMQYaBAEMFyYEAQwgDCABDDQCAUUvTAwfAgFGJSsUFUMCAS46AQwcKjs2BAEMRwEMJwEMIiMgSxwGRBUbSxsGIQQBDCIjIEscBkQVG0sbBiEEAQw+DD4MKQIBMz8BDBwvNwQBDEwBDCYBDCIjIEscBkQVG0sbBiEEAQwiIyBLHAZEFRtLGwYhBAEMPgw+DCkCASIVLwEMHC0hBAEMRQEMHCMtOR0eNAgyBiUyBhoEAQw5AQwcIx0eNQgxBiUxBjkbBAEMHwEMKwwrDCICAURADg4VFR0tKysEAU4BPDMtRkoBHSQ5BAEkKCdDRicdFSgbCxUGJh0UKBoLFAYtBAEiTgQBIk4EARc0BAEiGR8dI1AGKikoRR82RRVPCDgdOyNBDSUGBAEMHCc5BAEMRAEhRAQBIUQEASIsBAEiLAQBKyssAQwrAgFHREcZUAwwAUdFQwFIIEoBIh0kARABQiUoAQwiGB9DRCYdPx8EASE5RS0IBAEMLCsuFjYfHyUIBgEdJQQBDDUUPB0mPRs0HUY0DSUGBAEMHUslRkZERR5MJQYkFEg4FAYBKTIyBhIEAQwtEjQfJQYxIjMpDR4GTCUGIzcGATYfPC4yBAEMLCcEAQwqN0ZBRyA5BAEML0IkLC4eKxk2IAYfS0xIGQYYNBwBSg42OjwBSg4hMkowLyFENkAhGSg7Hj0GASFGPTspTk8IBgFARCVIOElOJkkpGgQBDDIrKU4lBk8lBkgxLwEjJzkXSitKF0srBiMEAS8mJEZKHwYEAToqKyMbTRVOTyIqOikqTwoWOSNOIkcpKkEKCAYjBAEMMS8wI1A1DUAhJR0iRhM+JxQ+Jyw8DFEUPSdJDAoIBiMEAQxARikzBAE/FDQfJQYXFUUEAQwdJwQBDCcnBAEMJE4lBiUjTE0rBgE2KR5DJUMIJQYBTCQVNB0lBiMEAQwpNCwGLQQBJjc8PyU0RDxEGwQBOjM+PEo3SDlNNA0TBgQBODM+N0o8SDRNOQ0TBgQBSysRPidASk5IJ0BNTg0mBioEAQw8KjNCPyooTiUGTyUGASYkQUM9FDZBRhJPICNCJQgBSCEjQyUIBgE+FDdCRklHEk0gI0MlCAFOISNEJQgGASMEAQw8HwQCAUQyIikdQgEcRTEtMhwqMkY7TUImMRszMBszLQQBKhQ0HxMGQSUEAQwdRgsvFC0nKx4fDy8IBhUEAQwpLAQBDCMtBAEMLS0EAT8vMT5JMwQCATJwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvdmFsdWVfcmFuZ2VfYW5hbHl6ZXIuZGFydDBzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9zc2EvdmFsdWVfc2V0LmRhcnSTaS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJy4uL3VuaXZlcnNlL3NpZGVfZWZmZWN0cy5kYXJ0JyBzaG93IFNpZGVFZmZlY3RzOwppbXBvcnQgJ25vZGVzLmRhcnQnOwoKY2xhc3MgVmFsdWVTZXQgewogIGludCBzaXplID0gMDsKICBMaXN0PEhJbnN0cnVjdGlvbj4gdGFibGU7CiAgVmFsdWVTZXROb2RlIGNvbGxpc2lvbnM7CiAgVmFsdWVTZXQoKSA6IHRhYmxlID0gbmV3IExpc3Q8SEluc3RydWN0aW9uPig4KTsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBzaXplID09IDA7CiAgaW50IGdldCBsZW5ndGggPT4gc2l6ZTsKCiAgdm9pZCBhZGQoSEluc3RydWN0aW9uIGluc3RydWN0aW9uKSB7CiAgICBhc3NlcnQobG9va3VwKGluc3RydWN0aW9uKSA9PSBudWxsKTsKICAgIGludCBoYXNoQ29kZSA9IGluc3RydWN0aW9uLmd2bkhhc2hDb2RlKCk7CiAgICBpbnQgY2FwYWNpdHkgPSB0YWJsZS5sZW5ndGg7CiAgICAvLyBSZXNpemUgd2hlbiBoYWxmIG9mIHRoZSBoYXNoIHRhYmxlIGlzIGluIHVzZS4KICAgIGlmIChzaXplID49IGNhcGFjaXR5ID4+IDEpIHsKICAgICAgY2FwYWNpdHkgPSBjYXBhY2l0eSA8PCAxOwogICAgICByZXNpemUoY2FwYWNpdHkpOwogICAgfQogICAgLy8gVHJ5IHRvIGluc2VydCBpbiB0aGUgaGFzaCB0YWJsZSBmaXJzdC4KICAgIGludCBpbmRleCA9IGhhc2hDb2RlICUgY2FwYWNpdHk7CiAgICBpZiAodGFibGVbaW5kZXhdID09IG51bGwpIHsKICAgICAgdGFibGVbaW5kZXhdID0gaW5zdHJ1Y3Rpb247CiAgICB9IGVsc2UgewogICAgICBjb2xsaXNpb25zID0gbmV3IFZhbHVlU2V0Tm9kZShpbnN0cnVjdGlvbiwgaGFzaENvZGUsIGNvbGxpc2lvbnMpOwogICAgfQogICAgc2l6ZSsrOwogIH0KCiAgSEluc3RydWN0aW9uIGxvb2t1cChISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24pIHsKICAgIGludCBoYXNoQ29kZSA9IGluc3RydWN0aW9uLmd2bkhhc2hDb2RlKCk7CiAgICBpbnQgaW5kZXggPSBoYXNoQ29kZSAlIHRhYmxlLmxlbmd0aDsKICAgIC8vIExvb2sgaW4gdGhlIGhhc2ggdGFibGUuCiAgICBISW5zdHJ1Y3Rpb24gcHJvYmUgPSB0YWJsZVtpbmRleF07CiAgICBpZiAocHJvYmUgIT0gbnVsbCAmJiBwcm9iZS5ndm5FcXVhbHMoaW5zdHJ1Y3Rpb24pKSByZXR1cm4gcHJvYmU7CiAgICAvLyBMb29rIGluIHRoZSBjb2xsaXNpb25zIGxpc3QuCiAgICBmb3IgKFZhbHVlU2V0Tm9kZSBub2RlID0gY29sbGlzaW9uczsgbm9kZSAhPSBudWxsOyBub2RlID0gbm9kZS5uZXh0KSB7CiAgICAgIGlmIChub2RlLmhhc2hDb2RlID09IGhhc2hDb2RlKSB7CiAgICAgICAgSEluc3RydWN0aW9uIGNhY2hlZCA9IG5vZGUudmFsdWU7CiAgICAgICAgaWYgKGNhY2hlZC5ndm5FcXVhbHMoaW5zdHJ1Y3Rpb24pKSByZXR1cm4gY2FjaGVkOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQga2lsbChpbnQgZmxhZ3MpIHsKICAgIGlmIChmbGFncyA9PSAwKSByZXR1cm47CiAgICBpbnQgZGVwZW5kcyA9IFNpZGVFZmZlY3RzLmNvbXB1dGVEZXBlbmRzT25GbGFncyhmbGFncyk7CiAgICAvLyBLaWxsIGluIHRoZSBoYXNoIHRhYmxlLgogICAgZm9yIChpbnQgaW5kZXggPSAwLCBsZW5ndGggPSB0YWJsZS5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IHRhYmxlW2luZGV4XTsKICAgICAgaWYgKGluc3RydWN0aW9uICE9IG51bGwgJiYgaW5zdHJ1Y3Rpb24uc2lkZUVmZmVjdHMuZGVwZW5kc09uKGRlcGVuZHMpKSB7CiAgICAgICAgdGFibGVbaW5kZXhdID0gbnVsbDsKICAgICAgICBzaXplLS07CiAgICAgIH0KICAgIH0KICAgIC8vIEtpbGwgaW4gdGhlIGNvbGxpc2lvbnMgbGlzdC4KICAgIFZhbHVlU2V0Tm9kZSBwcmV2aW91cyA9IG51bGw7CiAgICBWYWx1ZVNldE5vZGUgY3VycmVudCA9IGNvbGxpc2lvbnM7CiAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsKSB7CiAgICAgIFZhbHVlU2V0Tm9kZSBuZXh0ID0gY3VycmVudC5uZXh0OwogICAgICBISW5zdHJ1Y3Rpb24gY2FjaGVkID0gY3VycmVudC52YWx1ZTsKICAgICAgaWYgKGNhY2hlZC5zaWRlRWZmZWN0cy5kZXBlbmRzT24oZGVwZW5kcykpIHsKICAgICAgICBpZiAocHJldmlvdXMgPT0gbnVsbCkgewogICAgICAgICAgY29sbGlzaW9ucyA9IG5leHQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHByZXZpb3VzLm5leHQgPSBuZXh0OwogICAgICAgIH0KICAgICAgICBzaXplLS07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcHJldmlvdXMgPSBjdXJyZW50OwogICAgICB9CiAgICAgIGN1cnJlbnQgPSBuZXh0OwogICAgfQogIH0KCiAgVmFsdWVTZXQgY29weSgpIHsKICAgIHJldHVybiBjb3B5VG8obmV3IFZhbHVlU2V0KCksIHRhYmxlLCBjb2xsaXNpb25zKTsKICB9CgogIExpc3Q8SEluc3RydWN0aW9uPiB0b0xpc3QoKSB7CiAgICByZXR1cm4gY29weVRvKDxISW5zdHJ1Y3Rpb24+W10sIHRhYmxlLCBjb2xsaXNpb25zKTsKICB9CgogIC8vIENvcHkgdGhlIGluc3RydWN0aW9ucyBpbiB2YWx1ZSBzZXQgZGVmaW5lZCBieSBbdGFibGVdIGFuZAogIC8vIFtjb2xsaXNpb25zXSBpbnRvIFtvdGhlcl0gYW5kIHJldHVybnMgW290aGVyXS4gVGhlIGNvcHkgaXMgZG9uZQogIC8vIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZSBoYXNoIHRhYmxlIGFuZCB0aGUgY29sbGlzaW9ucyBsaXN0IGFuZAogIC8vIGNhbGxpbmcgWzpvdGhlci5hZGQ6XS4KICBzdGF0aWMgY29weVRvKHZhciBvdGhlciwgTGlzdDxISW5zdHJ1Y3Rpb24+IHRhYmxlLCBWYWx1ZVNldE5vZGUgY29sbGlzaW9ucykgewogICAgLy8gQ29weSBlbGVtZW50cyBmcm9tIHRoZSBoYXNoIHRhYmxlLgogICAgZm9yIChpbnQgaW5kZXggPSAwLCBsZW5ndGggPSB0YWJsZS5sZW5ndGg7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrKSB7CiAgICAgIEhJbnN0cnVjdGlvbiBpbnN0cnVjdGlvbiA9IHRhYmxlW2luZGV4XTsKICAgICAgaWYgKGluc3RydWN0aW9uICE9IG51bGwpIG90aGVyLmFkZChpbnN0cnVjdGlvbik7CiAgICB9CiAgICAvLyBDb3B5IGVsZW1lbnRzIGZyb20gdGhlIGNvbGxpc2lvbiBsaXN0LgogICAgVmFsdWVTZXROb2RlIGN1cnJlbnQgPSBjb2xsaXNpb25zOwogICAgd2hpbGUgKGN1cnJlbnQgIT0gbnVsbCkgewogICAgICAvLyBUT0RPKGthc3BlcmwpOiBNYXliZSBmaW5kIGEgd2F5IG9mIHJldXNpbmcgdGhlIGhhc2ggY29kZQogICAgICAvLyByYXRoZXIgdGhhbiByZWNvbXB1dGluZyBpdCBldmVyeSB0aW1lLgogICAgICBvdGhlci5hZGQoY3VycmVudC52YWx1ZSk7CiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7CiAgICB9CiAgICByZXR1cm4gb3RoZXI7CiAgfQoKICBWYWx1ZVNldCBpbnRlcnNlY3Rpb24oVmFsdWVTZXQgb3RoZXIpIHsKICAgIGlmIChzaXplID4gb3RoZXIuc2l6ZSkgcmV0dXJuIG90aGVyLmludGVyc2VjdGlvbih0aGlzKTsKICAgIFZhbHVlU2V0IHJlc3VsdCA9IG5ldyBWYWx1ZVNldCgpOwogICAgLy8gTG9vayBpbiB0aGUgaGFzaCB0YWJsZS4KICAgIGZvciAoaW50IGluZGV4ID0gMCwgbGVuZ3RoID0gdGFibGUubGVuZ3RoOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgewogICAgICBISW5zdHJ1Y3Rpb24gaW5zdHJ1Y3Rpb24gPSB0YWJsZVtpbmRleF07CiAgICAgIGlmIChpbnN0cnVjdGlvbiAhPSBudWxsICYmIG90aGVyLmxvb2t1cChpbnN0cnVjdGlvbikgIT0gbnVsbCkgewogICAgICAgIHJlc3VsdC5hZGQoaW5zdHJ1Y3Rpb24pOwogICAgICB9CiAgICB9CiAgICAvLyBMb29rIGluIHRoZSBjb2xsaXNpb24gbGlzdC4KICAgIFZhbHVlU2V0Tm9kZSBjdXJyZW50ID0gY29sbGlzaW9uczsKICAgIHdoaWxlIChjdXJyZW50ICE9IG51bGwpIHsKICAgICAgSEluc3RydWN0aW9uIHZhbHVlID0gY3VycmVudC52YWx1ZTsKICAgICAgaWYgKG90aGVyLmxvb2t1cCh2YWx1ZSkgIT0gbnVsbCkgewogICAgICAgIHJlc3VsdC5hZGQodmFsdWUpOwogICAgICB9CiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCByZXNpemUoaW50IGNhcGFjaXR5KSB7CiAgICB2YXIgb2xkU2l6ZSA9IHNpemU7CiAgICB2YXIgb2xkVGFibGUgPSB0YWJsZTsKICAgIHZhciBvbGRDb2xsaXNpb25zID0gY29sbGlzaW9uczsKICAgIC8vIFJlc2V0IHRoZSB0YWJsZSB3aXRoIGEgYmlnZ2VyIGNhcGFjaXR5LgogICAgYXNzZXJ0KGNhcGFjaXR5ID4gdGFibGUubGVuZ3RoKTsKICAgIHNpemUgPSAwOwogICAgdGFibGUgPSBuZXcgTGlzdDxISW5zdHJ1Y3Rpb24+KGNhcGFjaXR5KTsKICAgIGNvbGxpc2lvbnMgPSBudWxsOwogICAgLy8gQWRkIHRoZSBvbGQgaW5zdHJ1Y3Rpb25zIHRvIHRoZSBuZXcgdGFibGUuCiAgICBjb3B5VG8odGhpcywgb2xkVGFibGUsIG9sZENvbGxpc2lvbnMpOwogICAgLy8gTWFrZSBzdXJlIHdlIHByZXNlcnZlZCBhbGwgZWxlbWVudHMgYW5kIHRoYXQgbm8gcmVzaXppbmcKICAgIC8vIGhhcHBlbmVkIGFzIHBhcnQgb2YgdGhpcyByZXNpemluZy4KICAgIGFzc2VydChzaXplID09IG9sZFNpemUpOwogICAgYXNzZXJ0KHRhYmxlLmxlbmd0aCA9PSBjYXBhY2l0eSk7CiAgfQp9CgpjbGFzcyBWYWx1ZVNldE5vZGUgewogIGZpbmFsIEhJbnN0cnVjdGlvbiB2YWx1ZTsKICBmaW5hbCBpbnQgaGFzaDsKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGhhc2g7CiAgVmFsdWVTZXROb2RlIG5leHQ7CiAgVmFsdWVTZXROb2RlKHRoaXMudmFsdWUsIHRoaXMuaGFzaCwgdGhpcy5uZXh0KTsKfQqAoQBOTjwBORUBERAcGzIBIRoBJykuITUhIBgGLiUgIg1IBgwEATIuKR8nRSRLJyo6CAYRBAEZHDwfSi9PHRAIBiQiJx4oKzMgHREgChAPHAgWBgQBFDYEASA4BAE/RUUcUCpKLzcGLiceQjAgHgYSBAEqPCYfSi9GIQgGIyceKikbCB4GEwQBHhgaJC8lDi4XMitAKh0mBAIBFRwSDBwVMgIBJ3BhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS92YWx1ZV9zZXQuZGFydCtzZGtyb290Oi9wa2cvanNfYXN0L2xpYi9zcmMvY2hhcmFjdGVycy5kYXJ0ikkvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBqc19jaGFyYWN0ZXJfY29kZXM7Cgpjb25zdCBpbnQgJEVPRiA9IDA7CmNvbnN0IGludCAkU1RYID0gMjsKY29uc3QgaW50ICRCUyA9IDg7CmNvbnN0IGludCAkVEFCID0gOTsKY29uc3QgaW50ICRMRiA9IDEwOwpjb25zdCBpbnQgJFZUQUIgPSAxMTsKY29uc3QgaW50ICRGRiA9IDEyOwpjb25zdCBpbnQgJENSID0gMTM7CmNvbnN0IGludCAkU1BBQ0UgPSAzMjsKY29uc3QgaW50ICRCQU5HID0gMzM7CmNvbnN0IGludCAkRFEgPSAzNDsKY29uc3QgaW50ICRIQVNIID0gMzU7CmNvbnN0IGludCAkJCA9IDM2Owpjb25zdCBpbnQgJFBFUkNFTlQgPSAzNzsKY29uc3QgaW50ICRBTVBFUlNBTkQgPSAzODsKY29uc3QgaW50ICRTUSA9IDM5Owpjb25zdCBpbnQgJE9QRU5fUEFSRU4gPSA0MDsKY29uc3QgaW50ICRDTE9TRV9QQVJFTiA9IDQxOwpjb25zdCBpbnQgJFNUQVIgPSA0MjsKY29uc3QgaW50ICRQTFVTID0gNDM7CmNvbnN0IGludCAkQ09NTUEgPSA0NDsKY29uc3QgaW50ICRNSU5VUyA9IDQ1Owpjb25zdCBpbnQgJFBFUklPRCA9IDQ2Owpjb25zdCBpbnQgJFNMQVNIID0gNDc7CmNvbnN0IGludCAkMCA9IDQ4Owpjb25zdCBpbnQgJDEgPSA0OTsKY29uc3QgaW50ICQyID0gNTA7CmNvbnN0IGludCAkMyA9IDUxOwpjb25zdCBpbnQgJDQgPSA1MjsKY29uc3QgaW50ICQ1ID0gNTM7CmNvbnN0IGludCAkNiA9IDU0Owpjb25zdCBpbnQgJDcgPSA1NTsKY29uc3QgaW50ICQ4ID0gNTY7CmNvbnN0IGludCAkOSA9IDU3Owpjb25zdCBpbnQgJENPTE9OID0gNTg7CmNvbnN0IGludCAkU0VNSUNPTE9OID0gNTk7CmNvbnN0IGludCAkTFQgPSA2MDsKY29uc3QgaW50ICRFUSA9IDYxOwpjb25zdCBpbnQgJEdUID0gNjI7CmNvbnN0IGludCAkUVVFU1RJT04gPSA2MzsKY29uc3QgaW50ICRBVCA9IDY0Owpjb25zdCBpbnQgJEEgPSA2NTsKY29uc3QgaW50ICRCID0gNjY7CmNvbnN0IGludCAkQyA9IDY3Owpjb25zdCBpbnQgJEQgPSA2ODsKY29uc3QgaW50ICRFID0gNjk7CmNvbnN0IGludCAkRiA9IDcwOwpjb25zdCBpbnQgJEcgPSA3MTsKY29uc3QgaW50ICRIID0gNzI7CmNvbnN0IGludCAkSSA9IDczOwpjb25zdCBpbnQgJEogPSA3NDsKY29uc3QgaW50ICRLID0gNzU7CmNvbnN0IGludCAkTCA9IDc2Owpjb25zdCBpbnQgJE0gPSA3NzsKY29uc3QgaW50ICROID0gNzg7CmNvbnN0IGludCAkTyA9IDc5Owpjb25zdCBpbnQgJFAgPSA4MDsKY29uc3QgaW50ICRRID0gODE7CmNvbnN0IGludCAkUiA9IDgyOwpjb25zdCBpbnQgJFMgPSA4MzsKY29uc3QgaW50ICRUID0gODQ7CmNvbnN0IGludCAkVSA9IDg1Owpjb25zdCBpbnQgJFYgPSA4NjsKY29uc3QgaW50ICRXID0gODc7CmNvbnN0IGludCAkWCA9IDg4Owpjb25zdCBpbnQgJFkgPSA4OTsKY29uc3QgaW50ICRaID0gOTA7CmNvbnN0IGludCAkT1BFTl9TUVVBUkVfQlJBQ0tFVCA9IDkxOwpjb25zdCBpbnQgJEJBQ0tTTEFTSCA9IDkyOwpjb25zdCBpbnQgJENMT1NFX1NRVUFSRV9CUkFDS0VUID0gOTM7CmNvbnN0IGludCAkQ0FSRVQgPSA5NDsKY29uc3QgaW50ICRfID0gOTU7CmNvbnN0IGludCAkQkFDS1BJTkcgPSA5NjsKY29uc3QgaW50ICRhID0gOTc7CmNvbnN0IGludCAkYiA9IDk4Owpjb25zdCBpbnQgJGMgPSA5OTsKY29uc3QgaW50ICRkID0gMTAwOwpjb25zdCBpbnQgJGUgPSAxMDE7CmNvbnN0IGludCAkZiA9IDEwMjsKY29uc3QgaW50ICRnID0gMTAzOwpjb25zdCBpbnQgJGggPSAxMDQ7CmNvbnN0IGludCAkaSA9IDEwNTsKY29uc3QgaW50ICRqID0gMTA2Owpjb25zdCBpbnQgJGsgPSAxMDc7CmNvbnN0IGludCAkbCA9IDEwODsKY29uc3QgaW50ICRtID0gMTA5Owpjb25zdCBpbnQgJG4gPSAxMTA7CmNvbnN0IGludCAkbyA9IDExMTsKY29uc3QgaW50ICRwID0gMTEyOwpjb25zdCBpbnQgJHEgPSAxMTM7CmNvbnN0IGludCAkciA9IDExNDsKY29uc3QgaW50ICRzID0gMTE1Owpjb25zdCBpbnQgJHQgPSAxMTY7CmNvbnN0IGludCAkdSA9IDExNzsKY29uc3QgaW50ICR2ID0gMTE4Owpjb25zdCBpbnQgJHcgPSAxMTk7CmNvbnN0IGludCAkeCA9IDEyMDsKY29uc3QgaW50ICR5ID0gMTIxOwpjb25zdCBpbnQgJHogPSAxMjI7CmNvbnN0IGludCAkT1BFTl9DVVJMWV9CUkFDS0VUID0gMTIzOwpjb25zdCBpbnQgJEJBUiA9IDEyNDsKY29uc3QgaW50ICRDTE9TRV9DVVJMWV9CUkFDS0VUID0gMTI1Owpjb25zdCBpbnQgJFRJTERFID0gMTI2Owpjb25zdCBpbnQgJERFTCA9IDEyNzsKY29uc3QgaW50ICROQlNQID0gMTYwOwpjb25zdCBpbnQgJExTID0gMHgyMDI4Owpjb25zdCBpbnQgJFBTID0gMHgyMDI5OwoKY29uc3QgaW50ICRGSVJTVF9TVVJST0dBVEUgPSAweGQ4MDA7CmNvbnN0IGludCAkTEFTVF9TVVJST0dBVEUgPSAweGRmZmY7CmNvbnN0IGludCAkTEFTVF9DT0RFX1BPSU5UID0gMHgxMGZmZmY7CncATk48ARwBFBQTFBQWFBQXFhQWExkbFBwdFhYXFxgXExMTExMTExMTExcbFBQUGhQTExMTExMTExMTExMTExMTExMTExMTExMTEyUbJhcTGhMTExQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJRYmGBYXGBgBJSQnASJwYWNrYWdlOmpzX2FzdC9zcmMvY2hhcmFjdGVycy5kYXJ0O3Nka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvYWxnb3JpdGhtcy5kYXJ0ph8vLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICJkYXJ0Om1hdGgiIGFzIG1hdGg7CgppbXBvcnQgInV0aWxzLmRhcnQiOwoKLy8vIFJldHVybnMgYSBwb3NpdGlvbiBvZiB0aGUgW3ZhbHVlXSBpbiBbc29ydGVkTGlzdF0sIGlmIGl0IGlzIHRoZXJlLgovLy8KLy8vIElmIHRoZSBsaXN0IGlzbid0IHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlIFtjb21wYXJlXSBmdW5jdGlvbiwgdGhlIHJlc3VsdAovLy8gaXMgdW5wcmVkaWN0YWJsZS4KLy8vCi8vLyBJZiBbY29tcGFyZV0gaXMgb21pdHRlZCwgdGhpcyBkZWZhdWx0cyB0byBjYWxsaW5nIFtDb21wYXJhYmxlLmNvbXBhcmVUb10gb24KLy8vIHRoZSBvYmplY3RzLiBJZiBhbnkgb2JqZWN0IGlzIG5vdCBbQ29tcGFyYWJsZV0sIHRoaXMgdGhyb3dzIGEgW0Nhc3RFcnJvcl0uCi8vLwovLy8gUmV0dXJucyAtMSBpZiBbdmFsdWVdIGlzIG5vdCBpbiB0aGUgbGlzdCBieSBkZWZhdWx0LgppbnQgYmluYXJ5U2VhcmNoPFQ+KExpc3Q8VD4gc29ydGVkTGlzdCwgVCB2YWx1ZSwge2ludCBjb21wYXJlKFQgYSwgVCBiKX0pIHsKICBjb21wYXJlID8/PSBkZWZhdWx0Q29tcGFyZTxUPigpOwogIGludCBtaW4gPSAwOwogIGludCBtYXggPSBzb3J0ZWRMaXN0Lmxlbmd0aDsKICB3aGlsZSAobWluIDwgbWF4KSB7CiAgICBpbnQgbWlkID0gbWluICsgKChtYXggLSBtaW4pID4+IDEpOwogICAgdmFyIGVsZW1lbnQgPSBzb3J0ZWRMaXN0W21pZF07CiAgICBpbnQgY29tcCA9IGNvbXBhcmUoZWxlbWVudCwgdmFsdWUpOwogICAgaWYgKGNvbXAgPT0gMCkgcmV0dXJuIG1pZDsKICAgIGlmIChjb21wIDwgMCkgewogICAgICBtaW4gPSBtaWQgKyAxOwogICAgfSBlbHNlIHsKICAgICAgbWF4ID0gbWlkOwogICAgfQogIH0KICByZXR1cm4gLTE7Cn0KCi8vLyBSZXR1cm5zIHRoZSBmaXJzdCBwb3NpdGlvbiBpbiBbc29ydGVkTGlzdF0gdGhhdCBkb2VzIG5vdCBjb21wYXJlIGxlc3MgdGhhbgovLy8gW3ZhbHVlXS4KLy8vCi8vLyBJZiB0aGUgbGlzdCBpc24ndCBzb3J0ZWQgYWNjb3JkaW5nIHRvIHRoZSBbY29tcGFyZV0gZnVuY3Rpb24sIHRoZSByZXN1bHQKLy8vIGlzIHVucHJlZGljdGFibGUuCi8vLwovLy8gSWYgW2NvbXBhcmVdIGlzIG9taXR0ZWQsIHRoaXMgZGVmYXVsdHMgdG8gY2FsbGluZyBbQ29tcGFyYWJsZS5jb21wYXJlVG9dIG9uCi8vLyB0aGUgb2JqZWN0cy4gSWYgYW55IG9iamVjdCBpcyBub3QgW0NvbXBhcmFibGVdLCB0aGlzIHRocm93cyBhIFtDYXN0RXJyb3JdLgovLy8KLy8vIFJldHVybnMgW3NvcnRlZExpc3QubGVuZ3RoXSBpZiBhbGwgdGhlIGl0ZW1zIGluIFtzb3J0ZWRMaXN0XSBjb21wYXJlIGxlc3MKLy8vIHRoYW4gW3ZhbHVlXS4KaW50IGxvd2VyQm91bmQ8VD4oTGlzdDxUPiBzb3J0ZWRMaXN0LCBUIHZhbHVlLCB7aW50IGNvbXBhcmUoVCBhLCBUIGIpfSkgewogIGNvbXBhcmUgPz89IGRlZmF1bHRDb21wYXJlPFQ+KCk7CiAgaW50IG1pbiA9IDA7CiAgaW50IG1heCA9IHNvcnRlZExpc3QubGVuZ3RoOwogIHdoaWxlIChtaW4gPCBtYXgpIHsKICAgIGludCBtaWQgPSBtaW4gKyAoKG1heCAtIG1pbikgPj4gMSk7CiAgICB2YXIgZWxlbWVudCA9IHNvcnRlZExpc3RbbWlkXTsKICAgIGludCBjb21wID0gY29tcGFyZShlbGVtZW50LCB2YWx1ZSk7CiAgICBpZiAoY29tcCA8IDApIHsKICAgICAgbWluID0gbWlkICsgMTsKICAgIH0gZWxzZSB7CiAgICAgIG1heCA9IG1pZDsKICAgIH0KICB9CiAgcmV0dXJuIG1pbjsKfQoKLy8vIFNodWZmbGVzIGEgbGlzdCByYW5kb21seS4KLy8vCi8vLyBBIHN1Yi1yYW5nZSBvZiBhIGxpc3QgY2FuIGJlIHNodWZmbGVkIGJ5IHByb3ZpZGluZyBbc3RhcnRdIGFuZCBbZW5kXS4Kdm9pZCBzaHVmZmxlKExpc3QgbGlzdCwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgdmFyIHJhbmRvbSA9IG5ldyBtYXRoLlJhbmRvbSgpOwogIGlmIChlbmQgPT0gbnVsbCkgZW5kID0gbGlzdC5sZW5ndGg7CiAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogIHdoaWxlIChsZW5ndGggPiAxKSB7CiAgICBpbnQgcG9zID0gcmFuZG9tLm5leHRJbnQobGVuZ3RoKTsKICAgIGxlbmd0aC0tOwogICAgdmFyIHRtcDEgPSBsaXN0W3N0YXJ0ICsgcG9zXTsKICAgIGxpc3Rbc3RhcnQgKyBwb3NdID0gbGlzdFtzdGFydCArIGxlbmd0aF07CiAgICBsaXN0W3N0YXJ0ICsgbGVuZ3RoXSA9IHRtcDE7CiAgfQp9CgovLy8gUmV2ZXJzZXMgYSBsaXN0LCBvciBhIHBhcnQgb2YgYSBsaXN0LCBpbi1wbGFjZS4Kdm9pZCByZXZlcnNlKExpc3QgbGlzdCwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgaWYgKGVuZCA9PSBudWxsKSBlbmQgPSBsaXN0Lmxlbmd0aDsKICBfcmV2ZXJzZShsaXN0LCBzdGFydCwgZW5kKTsKfQoKLy8vIEludGVybmFsIGhlbHBlciBmdW5jdGlvbiB0aGF0IGFzc3VtZXMgdmFsaWQgYXJndW1lbnRzLgp2b2lkIF9yZXZlcnNlKExpc3QgbGlzdCwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgZm9yIChpbnQgaSA9IHN0YXJ0LCBqID0gZW5kIC0gMTsgaSA8IGo7IGkrKywgai0tKSB7CiAgICB2YXIgdG1wID0gbGlzdFtpXTsKICAgIGxpc3RbaV0gPSBsaXN0W2pdOwogICAgbGlzdFtqXSA9IHRtcDsKICB9Cn0KCi8vLyBTb3J0IGEgbGlzdCBiZXR3ZWVuIFtzdGFydF0gKGluY2x1c2l2ZSkgYW5kIFtlbmRdIChleGNsdXNpdmUpIHVzaW5nCi8vLyBpbnNlcnRpb24gc29ydC4KLy8vCi8vLyBJZiBbY29tcGFyZV0gaXMgb21pdHRlZCwgdGhpcyBkZWZhdWx0cyB0byBjYWxsaW5nIFtDb21wYXJhYmxlLmNvbXBhcmVUb10gb24KLy8vIHRoZSBvYmplY3RzLiBJZiBhbnkgb2JqZWN0IGlzIG5vdCBbQ29tcGFyYWJsZV0sIHRoaXMgdGhyb3dzIGEgW0Nhc3RFcnJvcl0uCi8vLwovLy8gSW5zZXJ0aW9uIHNvcnQgaXMgYSBzaW1wbGUgc29ydGluZyBhbGdvcml0aG0uIEZvciBgbmAgZWxlbWVudHMgaXQgZG9lcyBvbgovLy8gdGhlIG9yZGVyIG9mIGBuICogbG9nKG4pYCBjb21wYXJpc29ucyBidXQgdXAgdG8gYG5gIHNxdWFyZWQgbW92ZXMuIFRoZQovLy8gc29ydGluZyBpcyBwZXJmb3JtZWQgaW4tcGxhY2UsIHdpdGhvdXQgdXNpbmcgZXh0cmEgbWVtb3J5LgovLy8KLy8vIEZvciBzaG9ydCBsaXN0cyB0aGUgbWFueSBtb3ZlcyBoYXZlIGxlc3MgaW1wYWN0IHRoYW4gdGhlIHNpbXBsZSBhbGdvcml0aG0sCi8vLyBhbmQgaXQgaXMgb2Z0ZW4gdGhlIGZhdm9yZWQgc29ydGluZyBhbGdvcml0aG0gZm9yIHNob3J0IGxpc3RzLgovLy8KLy8vIFRoaXMgaW5zZXJ0aW9uIHNvcnQgaXMgc3RhYmxlOiBFcXVhbCBlbGVtZW50cyBlbmQgdXAgaW4gdGhlIHNhbWUgb3JkZXIKLy8vIGFzIHRoZXkgc3RhcnRlZCBpbi4Kdm9pZCBpbnNlcnRpb25Tb3J0PFQ+KExpc3Q8VD4gbGlzdCwKICAgIHtpbnQgY29tcGFyZShUIGEsIFQgYiksIGludCBzdGFydDogMCwgaW50IGVuZH0pIHsKICAvLyBJZiB0aGUgc2FtZSBtZXRob2QgY291bGQgaGF2ZSBib3RoIHBvc2l0aW9uYWwgYW5kIG5hbWVkIG9wdGlvbmFsCiAgLy8gcGFyYW1ldGVycywgdGhpcyBzaG91bGQgYmUgKGxpc3QsIFtzdGFydCwgZW5kXSwge2NvbXBhcmV9KS4KICBjb21wYXJlID8/PSBkZWZhdWx0Q29tcGFyZTxUPigpOwogIGVuZCA/Pz0gbGlzdC5sZW5ndGg7CgogIGZvciAoaW50IHBvcyA9IHN0YXJ0ICsgMTsgcG9zIDwgZW5kOyBwb3MrKykgewogICAgaW50IG1pbiA9IHN0YXJ0OwogICAgaW50IG1heCA9IHBvczsKICAgIHZhciBlbGVtZW50ID0gbGlzdFtwb3NdOwogICAgd2hpbGUgKG1pbiA8IG1heCkgewogICAgICBpbnQgbWlkID0gbWluICsgKChtYXggLSBtaW4pID4+IDEpOwogICAgICBpbnQgY29tcGFyaXNvbiA9IGNvbXBhcmUoZWxlbWVudCwgbGlzdFttaWRdKTsKICAgICAgaWYgKGNvbXBhcmlzb24gPCAwKSB7CiAgICAgICAgbWF4ID0gbWlkOwogICAgICB9IGVsc2UgewogICAgICAgIG1pbiA9IG1pZCArIDE7CiAgICAgIH0KICAgIH0KICAgIGxpc3Quc2V0UmFuZ2UobWluICsgMSwgcG9zICsgMSwgbGlzdCwgbWluKTsKICAgIGxpc3RbbWluXSA9IGVsZW1lbnQ7CiAgfQp9CgovLy8gTGltaXQgYmVsb3cgd2hpY2ggbWVyZ2Ugc29ydCBkZWZhdWx0cyB0byBpbnNlcnRpb24gc29ydC4KY29uc3QgaW50IF9NRVJHRV9TT1JUX0xJTUlUID0gMzI7CgovLy8gU29ydHMgYSBsaXN0IGJldHdlZW4gW3N0YXJ0XSAoaW5jbHVzaXZlKSBhbmQgW2VuZF0gKGV4Y2x1c2l2ZSkgdXNpbmcgdGhlCi8vLyBtZXJnZSBzb3J0IGFsZ29yaXRobS4KLy8vCi8vLyBJZiBbY29tcGFyZV0gaXMgb21pdHRlZCwgdGhpcyBkZWZhdWx0cyB0byBjYWxsaW5nIFtDb21wYXJhYmxlLmNvbXBhcmVUb10gb24KLy8vIHRoZSBvYmplY3RzLiBJZiBhbnkgb2JqZWN0IGlzIG5vdCBbQ29tcGFyYWJsZV0sIHRoaXMgdGhyb3dzIGEgW0Nhc3RFcnJvcl0uCi8vLwovLy8gTWVyZ2Utc29ydGluZyB3b3JrcyBieSBzcGxpdHRpbmcgdGhlIGpvYiBpbnRvIHR3byBwYXJ0cywgc29ydGluZyBlYWNoCi8vLyByZWN1cnNpdmVseSwgYW5kIHRoZW4gbWVyZ2luZyB0aGUgdHdvIHNvcnRlZCBwYXJ0cy4KLy8vCi8vLyBUaGlzIHRha2VzIG9uIHRoZSBvcmRlciBvZiBgbiAqIGxvZyhuKWAgY29tcGFyaXNvbnMgYW5kIG1vdmVzIHRvIHNvcnQKLy8vIGBuYCBlbGVtZW50cywgYnV0IHJlcXVpcmVzIGV4dHJhIHNwYWNlIG9mIGFib3V0IHRoZSBzYW1lIHNpemUgYXMgdGhlIGxpc3QKLy8vIGJlaW5nIHNvcnRlZC4KLy8vCi8vLyBUaGlzIG1lcmdlIHNvcnQgaXMgc3RhYmxlOiBFcXVhbCBlbGVtZW50cyBlbmQgdXAgaW4gdGhlIHNhbWUgb3JkZXIKLy8vIGFzIHRoZXkgc3RhcnRlZCBpbi4Kdm9pZCBtZXJnZVNvcnQ8VD4oTGlzdDxUPiBsaXN0LAogICAge2ludCBzdGFydDogMCwgaW50IGVuZCwgaW50IGNvbXBhcmUoVCBhLCBUIGIpfSkgewogIGVuZCA/Pz0gbGlzdC5sZW5ndGg7CiAgY29tcGFyZSA/Pz0gZGVmYXVsdENvbXBhcmU8VD4oKTsKCiAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogIGlmIChsZW5ndGggPCAyKSByZXR1cm47CiAgaWYgKGxlbmd0aCA8IF9NRVJHRV9TT1JUX0xJTUlUKSB7CiAgICBpbnNlcnRpb25Tb3J0KGxpc3QsIGNvbXBhcmU6IGNvbXBhcmUsIHN0YXJ0OiBzdGFydCwgZW5kOiBlbmQpOwogICAgcmV0dXJuOwogIH0KICAvLyBTcGVjaWFsIGNhc2UgdGhlIGZpcnN0IHNwbGl0IGluc3RlYWQgb2YgZGlyZWN0bHkgY2FsbGluZwogIC8vIF9tZXJnZVNvcnQsIGJlY2F1c2UgdGhlIF9tZXJnZVNvcnQgcmVxdWlyZXMgaXRzIHRhcmdldCB0bwogIC8vIGJlIGRpZmZlcmVudCBmcm9tIGl0cyBzb3VyY2UsIGFuZCBpdCByZXF1aXJlcyBleHRyYSBzcGFjZQogIC8vIG9mIHRoZSBzYW1lIHNpemUgYXMgdGhlIGxpc3QgdG8gc29ydC4KICAvLyBUaGlzIHNwbGl0IGFsbG93cyB1cyB0byBoYXZlIG9ubHkgaGFsZiBhcyBtdWNoIGV4dHJhIHNwYWNlLAogIC8vIGFuZCBpdCBlbmRzIHVwIGluIHRoZSBvcmlnaW5hbCBwbGFjZS4KICBpbnQgbWlkZGxlID0gc3RhcnQgKyAoKGVuZCAtIHN0YXJ0KSA+PiAxKTsKICBpbnQgZmlyc3RMZW5ndGggPSBtaWRkbGUgLSBzdGFydDsKICBpbnQgc2Vjb25kTGVuZ3RoID0gZW5kIC0gbWlkZGxlOwogIC8vIHNlY29uZExlbmd0aCBpcyBhbHdheXMgdGhlIHNhbWUgYXMgZmlyc3RMZW5ndGgsIG9yIG9uZSBncmVhdGVyLgogIHZhciBzY3JhdGNoU3BhY2UgPSBuZXcgTGlzdDxUPihzZWNvbmRMZW5ndGgpOwogIF9tZXJnZVNvcnQobGlzdCwgY29tcGFyZSwgbWlkZGxlLCBlbmQsIHNjcmF0Y2hTcGFjZSwgMCk7CiAgaW50IGZpcnN0VGFyZ2V0ID0gZW5kIC0gZmlyc3RMZW5ndGg7CiAgX21lcmdlU29ydChsaXN0LCBjb21wYXJlLCBzdGFydCwgbWlkZGxlLCBsaXN0LCBmaXJzdFRhcmdldCk7CiAgX21lcmdlKGNvbXBhcmUsIGxpc3QsIGZpcnN0VGFyZ2V0LCBlbmQsIHNjcmF0Y2hTcGFjZSwgMCwgc2Vjb25kTGVuZ3RoLCBsaXN0LAogICAgICBzdGFydCk7Cn0KCi8vLyBQZXJmb3JtcyBhbiBpbnNlcnRpb24gc29ydCBpbnRvIGEgcG90ZW50aWFsbHkgZGlmZmVyZW50IGxpc3QgdGhhbiB0aGUKLy8vIG9uZSBjb250YWluaW5nIHRoZSBvcmlnaW5hbCB2YWx1ZXMuCi8vLwovLy8gSXQgd2lsbCB3b3JrIGluLXBsYWNlIGFzIHdlbGwuCnZvaWQgX21vdmluZ0luc2VydGlvblNvcnQ8VD4oTGlzdDxUPiBsaXN0LCBpbnQgY29tcGFyZShUIGEsIFQgYiksIGludCBzdGFydCwKICAgIGludCBlbmQsIExpc3Q8VD4gdGFyZ2V0LCBpbnQgdGFyZ2V0T2Zmc2V0KSB7CiAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuOwogIHRhcmdldFt0YXJnZXRPZmZzZXRdID0gbGlzdFtzdGFydF07CiAgZm9yIChpbnQgaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykgewogICAgdmFyIGVsZW1lbnQgPSBsaXN0W3N0YXJ0ICsgaV07CiAgICBpbnQgbWluID0gdGFyZ2V0T2Zmc2V0OwogICAgaW50IG1heCA9IHRhcmdldE9mZnNldCArIGk7CiAgICB3aGlsZSAobWluIDwgbWF4KSB7CiAgICAgIGludCBtaWQgPSBtaW4gKyAoKG1heCAtIG1pbikgPj4gMSk7CiAgICAgIGlmIChjb21wYXJlKGVsZW1lbnQsIHRhcmdldFttaWRdKSA8IDApIHsKICAgICAgICBtYXggPSBtaWQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWluID0gbWlkICsgMTsKICAgICAgfQogICAgfQogICAgdGFyZ2V0LnNldFJhbmdlKG1pbiArIDEsIHRhcmdldE9mZnNldCArIGkgKyAxLCB0YXJnZXQsIG1pbik7CiAgICB0YXJnZXRbbWluXSA9IGVsZW1lbnQ7CiAgfQp9CgovLy8gU29ydHMgW2xpc3RdIGZyb20gW3N0YXJ0XSB0byBbZW5kXSBpbnRvIFt0YXJnZXRdIGF0IFt0YXJnZXRPZmZzZXRdLgovLy8KLy8vIFRoZSBgdGFyZ2V0YCBsaXN0IG11c3QgYmUgYWJsZSB0byBjb250YWluIHRoZSByYW5nZSBmcm9tIGBzdGFydGAgdG8gYGVuZGAKLy8vIGFmdGVyIGB0YXJnZXRPZmZzZXRgLgovLy8KLy8vIEFsbG93cyB0YXJnZXQgdG8gYmUgdGhlIHNhbWUgbGlzdCBhcyBbbGlzdF0sIGFzIGxvbmcgYXMgaXQncyBub3QKLy8vIG92ZXJsYXBwaW5nIHRoZSBgc3RhcnQuLmVuZGAgcmFuZ2UuCnZvaWQgX21lcmdlU29ydDxUPihMaXN0PFQ+IGxpc3QsIGludCBjb21wYXJlKFQgYSwgVCBiKSwgaW50IHN0YXJ0LCBpbnQgZW5kLAogICAgTGlzdDxUPiB0YXJnZXQsIGludCB0YXJnZXRPZmZzZXQpIHsKICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgaWYgKGxlbmd0aCA8IF9NRVJHRV9TT1JUX0xJTUlUKSB7CiAgICBfbW92aW5nSW5zZXJ0aW9uU29ydChsaXN0LCBjb21wYXJlLCBzdGFydCwgZW5kLCB0YXJnZXQsIHRhcmdldE9mZnNldCk7CiAgICByZXR1cm47CiAgfQogIGludCBtaWRkbGUgPSBzdGFydCArIChsZW5ndGggPj4gMSk7CiAgaW50IGZpcnN0TGVuZ3RoID0gbWlkZGxlIC0gc3RhcnQ7CiAgaW50IHNlY29uZExlbmd0aCA9IGVuZCAtIG1pZGRsZTsKICAvLyBIZXJlIHNlY29uZExlbmd0aCA+PSBmaXJzdExlbmd0aCAoZGlmZmVycyBieSBhdCBtb3N0IG9uZSkuCiAgaW50IHRhcmdldE1pZGRsZSA9IHRhcmdldE9mZnNldCArIGZpcnN0TGVuZ3RoOwogIC8vIFNvcnQgdGhlIHNlY29uZCBoYWxmIGludG8gdGhlIGVuZCBvZiB0aGUgdGFyZ2V0IGFyZWEuCiAgX21lcmdlU29ydChsaXN0LCBjb21wYXJlLCBtaWRkbGUsIGVuZCwgdGFyZ2V0LCB0YXJnZXRNaWRkbGUpOwogIC8vIFNvcnQgdGhlIGZpcnN0IGhhbGYgaW50byB0aGUgZW5kIG9mIHRoZSBzb3VyY2UgYXJlYS4KICBfbWVyZ2VTb3J0KGxpc3QsIGNvbXBhcmUsIHN0YXJ0LCBtaWRkbGUsIGxpc3QsIG1pZGRsZSk7CiAgLy8gTWVyZ2UgdGhlIHR3byBwYXJ0cyBpbnRvIHRoZSB0YXJnZXQgYXJlYS4KICBfbWVyZ2UoY29tcGFyZSwgbGlzdCwgbWlkZGxlLCBtaWRkbGUgKyBmaXJzdExlbmd0aCwgdGFyZ2V0LCB0YXJnZXRNaWRkbGUsCiAgICAgIHRhcmdldE1pZGRsZSArIHNlY29uZExlbmd0aCwgdGFyZ2V0LCB0YXJnZXRPZmZzZXQpOwp9CgovLy8gTWVyZ2VzIHR3byBsaXN0cyBpbnRvIGEgdGFyZ2V0IGxpc3QuCi8vLwovLy8gT25lIG9mIHRoZSBpbnB1dCBsaXN0cyBtYXkgYmUgcG9zaXRpb25lZCBhdCB0aGUgZW5kIG9mIHRoZSB0YXJnZXQKLy8vIGxpc3QuCi8vLwovLy8gRm9yIGVxdWFsIG9iamVjdCwgZWxlbWVudHMgZnJvbSBbZmlyc3RMaXN0XSBhcmUgYWx3YXlzIHByZWZlcnJlZC4KLy8vIFRoaXMgYWxsb3dzIHRoZSBtZXJnZSB0byBiZSBzdGFibGUgaWYgdGhlIGZpcnN0IGxpc3QgY29udGFpbnMgZWxlbWVudHMKLy8vIHRoYXQgc3RhcnRlZCBvdXQgZWFybGllciB0aGFuIHRoZSBvbmVzIGluIFtzZWNvbmRMaXN0XQp2b2lkIF9tZXJnZTxUPigKICAgIGludCBjb21wYXJlKFQgYSwgVCBiKSwKICAgIExpc3Q8VD4gZmlyc3RMaXN0LAogICAgaW50IGZpcnN0U3RhcnQsCiAgICBpbnQgZmlyc3RFbmQsCiAgICBMaXN0PFQ+IHNlY29uZExpc3QsCiAgICBpbnQgc2Vjb25kU3RhcnQsCiAgICBpbnQgc2Vjb25kRW5kLAogICAgTGlzdDxUPiB0YXJnZXQsCiAgICBpbnQgdGFyZ2V0T2Zmc2V0KSB7CiAgLy8gTm8gZW1wdHkgbGlzdHMgcmVhY2hlcyBoZXJlLgogIGFzc2VydChmaXJzdFN0YXJ0IDwgZmlyc3RFbmQpOwogIGFzc2VydChzZWNvbmRTdGFydCA8IHNlY29uZEVuZCk7CiAgaW50IGN1cnNvcjEgPSBmaXJzdFN0YXJ0OwogIGludCBjdXJzb3IyID0gc2Vjb25kU3RhcnQ7CiAgdmFyIGZpcnN0RWxlbWVudCA9IGZpcnN0TGlzdFtjdXJzb3IxKytdOwogIHZhciBzZWNvbmRFbGVtZW50ID0gc2Vjb25kTGlzdFtjdXJzb3IyKytdOwogIHdoaWxlICh0cnVlKSB7CiAgICBpZiAoY29tcGFyZShmaXJzdEVsZW1lbnQsIHNlY29uZEVsZW1lbnQpIDw9IDApIHsKICAgICAgdGFyZ2V0W3RhcmdldE9mZnNldCsrXSA9IGZpcnN0RWxlbWVudDsKICAgICAgaWYgKGN1cnNvcjEgPT0gZmlyc3RFbmQpIGJyZWFrOyAvLyBGbHVzaGluZyBzZWNvbmQgbGlzdCBhZnRlciBsb29wLgogICAgICBmaXJzdEVsZW1lbnQgPSBmaXJzdExpc3RbY3Vyc29yMSsrXTsKICAgIH0gZWxzZSB7CiAgICAgIHRhcmdldFt0YXJnZXRPZmZzZXQrK10gPSBzZWNvbmRFbGVtZW50OwogICAgICBpZiAoY3Vyc29yMiAhPSBzZWNvbmRFbmQpIHsKICAgICAgICBzZWNvbmRFbGVtZW50ID0gc2Vjb25kTGlzdFtjdXJzb3IyKytdOwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIC8vIFNlY29uZCBsaXN0IGVtcHRpZXMgZmlyc3QuIEZsdXNoaW5nIGZpcnN0IGxpc3QgaGVyZS4KICAgICAgdGFyZ2V0W3RhcmdldE9mZnNldCsrXSA9IGZpcnN0RWxlbWVudDsKICAgICAgdGFyZ2V0LnNldFJhbmdlKHRhcmdldE9mZnNldCwgdGFyZ2V0T2Zmc2V0ICsgKGZpcnN0RW5kIC0gY3Vyc29yMSksCiAgICAgICAgICBmaXJzdExpc3QsIGN1cnNvcjEpOwogICAgICByZXR1cm47CiAgICB9CiAgfQogIC8vIEZpcnN0IGxpc3QgZW1wdGllcyBmaXJzdC4gUmVhY2hlZCBieSBicmVhayBhYm92ZS4KICB0YXJnZXRbdGFyZ2V0T2Zmc2V0KytdID0gc2Vjb25kRWxlbWVudDsKICB0YXJnZXQuc2V0UmFuZ2UoCiAgICAgIHRhcmdldE9mZnNldCwgdGFyZ2V0T2Zmc2V0ICsgKHNlY29uZEVuZCAtIGN1cnNvcjIpLCBzZWNvbmRMaXN0LCBjdXJzb3IyKTsKfQqBHQBOTjwBHAEVAUcETRYEUE8EOUwjDx8WKCMoHxQVDREGBA0CAU8NBE0WBFBPBE4SSiMPHxYoIygUFQ0RBgQOAgEeBEo0IiYcFyYOIi4hBAIBNDQmHgIBOy82FxcTBAIBSBQEUE8ETks/BE9DBEsYJDZGQSMXATAVEx0YKjQcEw8XCAYwGQQCAT0iAU0aBFBPBEo4BEpOEgRHGCA2FyMBHBokQwwEPj8/K0ErLSQjRTA7Jz9PDgIBSigEI00xHBsmJSMcIBgqLxMPFwgGQRsEAgFIBE4aBEUoTCgcJEsMBCYkI0AxO0A6Oi9MOgIBKQRGCgRGSzsQGxcUEhgVExQYIiEjHB0rLRE1LUorDS4iLxIIPi1JHw4GBDcqE1ACASZwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2FsZ29yaXRobXMuZGFydEJzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL2Nhbm9uaWNhbGl6ZWRfbWFwLmRhcnSVWS8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbic7CgppbXBvcnQgJ3V0aWxzLmRhcnQnOwoKdHlwZWRlZiBDIF9DYW5vbmljYWxpemU8QywgSz4oSyBrZXkpOwoKdHlwZWRlZiBib29sIF9Jc1ZhbGlkS2V5KE9iamVjdCBrZXkpOwoKLy8vIEEgbWFwIHdob3NlIGtleXMgYXJlIGNvbnZlcnRlZCB0byBjYW5vbmljYWwgdmFsdWVzIG9mIHR5cGUgYENgLgovLy8KLy8vIFRoaXMgaXMgdXNlZnVsIGZvciB1c2luZyBjYXNlLWluc2Vuc2l0aXZlIFN0cmluZyBrZXlzLCBmb3IgZXhhbXBsZS4gSXQncwovLy8gbW9yZSBlZmZpY2llbnQgdGhhbiBhIFtMaW5rZWRIYXNoTWFwXSB3aXRoIGEgY3VzdG9tIGVxdWFsaXR5IG9wZXJhdG9yCi8vLyBiZWNhdXNlIGl0IG9ubHkgY2Fub25pY2FsaXplcyBlYWNoIGtleSBvbmNlLCByYXRoZXIgdGhhbiBkb2luZyBzbyBmb3IgZWFjaAovLy8gY29tcGFyaXNvbi4KLy8vCi8vLyBCeSBkZWZhdWx0LCBgbnVsbGAgaXMgYWxsb3dlZCBhcyBhIGtleS4gSXQgY2FuIGJlIGZvcmJpZGRlbiB2aWEgdGhlCi8vLyBgaXNWYWxpZEtleWAgcGFyYW1ldGVyLgpjbGFzcyBDYW5vbmljYWxpemVkTWFwPEMsIEssIFY+IGltcGxlbWVudHMgTWFwPEssIFY+IHsKICBmaW5hbCBfQ2Fub25pY2FsaXplPEMsIEs+IF9jYW5vbmljYWxpemU7CgogIGZpbmFsIF9Jc1ZhbGlkS2V5IF9pc1ZhbGlkS2V5Rm47CgogIGZpbmFsIF9iYXNlID0gbmV3IE1hcDxDLCBQYWlyPEssIFY+PigpOwoKICAvLy8gQ3JlYXRlcyBhbiBlbXB0eSBjYW5vbmljYWxpemVkIG1hcC4KICAvLy8KICAvLy8gVGhlIFtjYW5vbmljYWxpemVdIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlIGNhbm9uaWNhbCB2YWx1ZSBmb3IgdGhlCiAgLy8vIGdpdmVuIGtleS4gS2V5cyB3aXRoIHRoZSBzYW1lIGNhbm9uaWNhbCB2YWx1ZSBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50LgogIC8vLwogIC8vLyBUaGUgW2lzVmFsaWRLZXldIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBbY2Fub25pY2FsaXplXSBmb3IKICAvLy8gbWV0aG9kcyB0aGF0IHRha2UgYXJiaXRyYXJ5IG9iamVjdHMuIEl0IGNhbiBiZSB1c2VkIHRvIGZpbHRlciBvdXQga2V5cwogIC8vLyB0aGF0IGNhbid0IGJlIGNhbm9uaWNhbGl6ZWQuCiAgQ2Fub25pY2FsaXplZE1hcChDIGNhbm9uaWNhbGl6ZShLIGtleSksIHtib29sIGlzVmFsaWRLZXkoT2JqZWN0IGtleSl9KQogICAgICA6IF9jYW5vbmljYWxpemUgPSBjYW5vbmljYWxpemUsCiAgICAgICAgX2lzVmFsaWRLZXlGbiA9IGlzVmFsaWRLZXk7CgogIC8vLyBDcmVhdGVzIGEgY2Fub25pY2FsaXplZCBtYXAgdGhhdCBpcyBpbml0aWFsaXplZCB3aXRoIHRoZSBrZXkvdmFsdWUgcGFpcnMKICAvLy8gb2YgW290aGVyXS4KICAvLy8KICAvLy8gVGhlIFtjYW5vbmljYWxpemVdIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlIGNhbm9uaWNhbCB2YWx1ZSBmb3IgdGhlCiAgLy8vIGdpdmVuIGtleS4gS2V5cyB3aXRoIHRoZSBzYW1lIGNhbm9uaWNhbCB2YWx1ZSBhcmUgY29uc2lkZXJlZCBlcXVpdmFsZW50LgogIC8vLwogIC8vLyBUaGUgW2lzVmFsaWRLZXldIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgY2FsbGluZyBbY2Fub25pY2FsaXplXSBmb3IKICAvLy8gbWV0aG9kcyB0aGF0IHRha2UgYXJiaXRyYXJ5IG9iamVjdHMuIEl0IGNhbiBiZSB1c2VkIHRvIGZpbHRlciBvdXQga2V5cwogIC8vLyB0aGF0IGNhbid0IGJlIGNhbm9uaWNhbGl6ZWQuCiAgQ2Fub25pY2FsaXplZE1hcC5mcm9tKE1hcDxLLCBWPiBvdGhlciwgQyBjYW5vbmljYWxpemUoSyBrZXkpLAogICAgICB7Ym9vbCBpc1ZhbGlkS2V5KE9iamVjdCBrZXkpfSkKICAgICAgOiBfY2Fub25pY2FsaXplID0gY2Fub25pY2FsaXplLAogICAgICAgIF9pc1ZhbGlkS2V5Rm4gPSBpc1ZhbGlkS2V5IHsKICAgIGFkZEFsbChvdGhlcik7CiAgfQoKICBWIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpIHsKICAgIGlmICghX2lzVmFsaWRLZXkoa2V5KSkgcmV0dXJuIG51bGw7CiAgICB2YXIgcGFpciA9IF9iYXNlW19jYW5vbmljYWxpemUoa2V5IGFzIEspXTsKICAgIHJldHVybiBwYWlyID09IG51bGwgPyBudWxsIDogcGFpci5sYXN0OwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIGlmICghX2lzVmFsaWRLZXkoa2V5KSkgcmV0dXJuOwogICAgX2Jhc2VbX2Nhbm9uaWNhbGl6ZShrZXkpXSA9IG5ldyBQYWlyKGtleSwgdmFsdWUpOwogIH0KCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSB7CiAgICBvdGhlci5mb3JFYWNoKChrZXksIHZhbHVlKSA9PiB0aGlzW2tleV0gPSB2YWx1ZSk7CiAgfQoKICB2b2lkIGFkZEVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGVudHJpZXMpID0+CiAgICAgIF9iYXNlLmFkZEVudHJpZXMoZW50cmllcy5tYXAoCiAgICAgICAgICAoZSkgPT4gbmV3IE1hcEVudHJ5KF9jYW5vbmljYWxpemUoZS5rZXkpLCBuZXcgUGFpcihlLmtleSwgZS52YWx1ZSkpKSk7CgogIE1hcDxLMiwgVjI+IGNhc3Q8SzIsIFYyPigpID0+IF9iYXNlLmNhc3Q8SzIsIFYyPigpOwoKICB2b2lkIGNsZWFyKCkgewogICAgX2Jhc2UuY2xlYXIoKTsKICB9CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgewogICAgaWYgKCFfaXNWYWxpZEtleShrZXkpKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX2Jhc2UuY29udGFpbnNLZXkoX2Nhbm9uaWNhbGl6ZShrZXkgYXMgSykpOwogIH0KCiAgYm9vbCBjb250YWluc1ZhbHVlKE9iamVjdCB2YWx1ZSkgPT4KICAgICAgX2Jhc2UudmFsdWVzLmFueSgocGFpcikgPT4gcGFpci5sYXN0ID09IHZhbHVlKTsKCiAgSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGdldCBlbnRyaWVzID0+CiAgICAgIF9iYXNlLmVudHJpZXMubWFwKChlKSA9PiBuZXcgTWFwRW50cnkoZS52YWx1ZS5maXJzdCwgZS52YWx1ZS5sYXN0KSk7CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBfYmFzZS5mb3JFYWNoKChrZXksIHBhaXIpID0+IGYocGFpci5maXJzdCwgcGFpci5sYXN0KSk7CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+IF9iYXNlLmlzRW1wdHk7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2Jhc2UuaXNOb3RFbXB0eTsKCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gX2Jhc2UudmFsdWVzLm1hcCgocGFpcikgPT4gcGFpci5maXJzdCk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9iYXNlLmxlbmd0aDsKCiAgTWFwPEsyLCBWMj4gbWFwPEsyLCBWMj4oTWFwRW50cnk8SzIsIFYyPiB0cmFuc2Zvcm0oSyBrZXksIFYgdmFsdWUpKSA9PgogICAgICBfYmFzZS5tYXAoKF8sIHBhaXIpID0+IHRyYW5zZm9ybShwYWlyLmZpcnN0LCBwYWlyLmxhc3QpKTsKCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSB7CiAgICByZXR1cm4gX2Jhc2UKICAgICAgICAucHV0SWZBYnNlbnQoX2Nhbm9uaWNhbGl6ZShrZXkpLCAoKSA9PiBuZXcgUGFpcihrZXksIGlmQWJzZW50KCkpKQogICAgICAgIC5sYXN0OwogIH0KCiAgViByZW1vdmUoT2JqZWN0IGtleSkgewogICAgaWYgKCFfaXNWYWxpZEtleShrZXkpKSByZXR1cm4gbnVsbDsKICAgIHZhciBwYWlyID0gX2Jhc2UucmVtb3ZlKF9jYW5vbmljYWxpemUoa2V5IGFzIEspKTsKICAgIHJldHVybiBwYWlyID09IG51bGwgPyBudWxsIDogcGFpci5sYXN0OwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoSyBrZXksIFYgdmFsdWUpKSA9PgogICAgICBfYmFzZS5yZW1vdmVXaGVyZSgoXywgcGFpcikgPT4gdGVzdChwYWlyLmZpcnN0LCBwYWlyLmxhc3QpKTsKCiAgQGRlcHJlY2F0ZWQKICBNYXA8SzIsIFYyPiByZXR5cGU8SzIsIFYyPigpID0+IGNhc3Q8SzIsIFYyPigpOwoKICBWIHVwZGF0ZShLIGtleSwgViB1cGRhdGUoViB2YWx1ZSksIHtWIGlmQWJzZW50KCl9KSA9PiBfYmFzZQogICAgICAudXBkYXRlKF9jYW5vbmljYWxpemUoa2V5KSwgKHBhaXIpID0+IG5ldyBQYWlyKGtleSwgdXBkYXRlKHBhaXIubGFzdCkpLAogICAgICAgICAgaWZBYnNlbnQ6IGlmQWJzZW50ID09IG51bGwgPyBudWxsIDogKCkgPT4gbmV3IFBhaXIoa2V5LCBpZkFic2VudCgpKSkKICAgICAgLmxhc3Q7CgogIHZvaWQgdXBkYXRlQWxsKFYgdXBkYXRlKEsga2V5LCBWIHZhbHVlKSkgPT4gX2Jhc2UudXBkYXRlQWxsKAogICAgICAoXywgcGFpcikgPT4gbmV3IFBhaXIocGFpci5maXJzdCwgdXBkYXRlKHBhaXIuZmlyc3QsIHBhaXIubGFzdCkpKTsKCiAgSXRlcmFibGU8Vj4gZ2V0IHZhbHVlcyA9PiBfYmFzZS52YWx1ZXMubWFwKChwYWlyKSA9PiBwYWlyLmxhc3QpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICAvLyBEZXRlY3QgdG9TdHJpbmcoKSBjeWNsZXMuCiAgICBpZiAoX2lzVG9TdHJpbmdWaXNpdGluZyh0aGlzKSkgewogICAgICByZXR1cm4gJ3suLi59JzsKICAgIH0KCiAgICB2YXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgdHJ5IHsKICAgICAgX3RvU3RyaW5nVmlzaXRpbmcuYWRkKHRoaXMpOwogICAgICByZXN1bHQud3JpdGUoJ3snKTsKICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICAgIGZvckVhY2goKGssIHYpIHsKICAgICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgICByZXN1bHQud3JpdGUoJywgJyk7CiAgICAgICAgfQogICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgICAgcmVzdWx0LndyaXRlKCckazogJHYnKTsKICAgICAgfSk7CiAgICAgIHJlc3VsdC53cml0ZSgnfScpOwogICAgfSBmaW5hbGx5IHsKICAgICAgYXNzZXJ0KGlkZW50aWNhbChfdG9TdHJpbmdWaXNpdGluZy5sYXN0LCB0aGlzKSk7CiAgICAgIF90b1N0cmluZ1Zpc2l0aW5nLnJlbW92ZUxhc3QoKTsKICAgIH0KCiAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgfQoKICBib29sIF9pc1ZhbGlkS2V5KE9iamVjdCBrZXkpID0+CiAgICAgIChrZXkgPT0gbnVsbCB8fCBrZXkgaXMgSykgJiYKICAgICAgKF9pc1ZhbGlkS2V5Rm4gPT0gbnVsbCB8fCBfaXNWYWxpZEtleUZuKGtleSkpOwp9CgovLy8gQSBjb2xsZWN0aW9uIHVzZWQgdG8gaWRlbnRpZnkgY3ljbGljIG1hcHMgZHVyaW5nIHRvU3RyaW5nKCkgY2FsbHMuCmZpbmFsIExpc3QgX3RvU3RyaW5nVmlzaXRpbmcgPSBbXTsKCi8vLyBDaGVjayBpZiB3ZSBhcmUgY3VycmVudGx5IHZpc2l0aW5nIGBvYCBpbiBhIHRvU3RyaW5nKCkgY2FsbC4KYm9vbCBfaXNUb1N0cmluZ1Zpc2l0aW5nKG8pID0+IF90b1N0cmluZ1Zpc2l0aW5nLmFueSgoZSkgPT4gaWRlbnRpY2FsKG8sIGUpKTsKgK4ATk48ARoBFQEmASYBRARNSk8QBEgcNysBIwEqASoGTE8GTE0jSSYkAU8SBkxPBkxNI0AlJiUTBAEeKC8sBAEmIzYEASE2BAE3JFEBNgEREwQBISk3BAEmNgEqSwEpPAQBJQErAUIBIgFJQAEnEUoPBAEZKDYsBAExQwEOMgE+Tk8NAT9JAUMBFiElFgYBJQojGRkXFh4KFyAKGRA3JgYBHgQBIiM1AgFHIwFBTgEtcGFja2FnZTpjb2xsZWN0aW9uL3NyYy9jYW5vbmljYWxpemVkX21hcC5kYXJ0VHNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvY29tYmluZWRfd3JhcHBlcnMvY29tYmluZWRfaXRlcmFibGUuZGFydIfZLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCi8vLyBBIHZpZXcgb2Ygc2V2ZXJhbCBpdGVyYWJsZXMgY29tYmluZWQgc2VxdWVudGlhbGx5IGludG8gYSBzaW5nbGUgaXRlcmFibGUuCi8vLwovLy8gQWxsIG1ldGhvZHMgYW5kIGFjY2Vzc29ycyB0cmVhdCB0aGUgW0NvbWJpbmVkSXRlcmFibGVWaWV3XSBhcyBpZiBpdCB3ZXJlIGEKLy8vIHNpbmdsZSBjb25jYXRlbmF0ZWQgaXRlcmFibGUsIGJ1dCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbgovLy8gbGF6aWx5IGFjY2Vzc2luZyBpbmRpdmlkdWFsIGl0ZXJhYmxlIGluc3RhbmNlcy4gVGhpcyBtZWFucyB0aGF0IGlmIHRoZQovLy8gdW5kZXJseWluZyBpdGVyYWJsZXMgY2hhbmdlLCB0aGUgW0NvbWJpbmVkSXRlcmFibGVWaWV3XSB3aWxsIHJlZmxlY3QgdGhvc2UKLy8vIGNoYW5nZXMuCmNsYXNzIENvbWJpbmVkSXRlcmFibGVWaWV3PFQ+IGV4dGVuZHMgSXRlcmFibGVCYXNlPFQ+IHsKICAvLy8gVGhlIGl0ZXJhYmxlcyB0aGF0IHRoaXMgY29tYmluZXMuCiAgZmluYWwgSXRlcmFibGU8SXRlcmFibGU8VD4+IF9pdGVyYWJsZXM7CgogIC8vLyBDcmVhdGVzIGEgY29tYmluZWQgdmlldyBvZiBbaXRlcmFibGVzXS4KICBjb25zdCBDb21iaW5lZEl0ZXJhYmxlVmlldyh0aGlzLl9pdGVyYWJsZXMpOwoKICBJdGVyYXRvcjxUPiBnZXQgaXRlcmF0b3IgPT4KICAgICAgbmV3IF9Db21iaW5lZEl0ZXJhdG9yPFQ+KF9pdGVyYWJsZXMubWFwKChpKSA9PiBpLml0ZXJhdG9yKS5pdGVyYXRvcik7CgogIC8vIFNwZWNpYWwgY2FzZWQgY29udGFpbnMvaXNFbXB0eS9sZW5ndGggc2luY2UgbWFueSBpdGVyYWJsZXMgaGF2ZSBhbgogIC8vIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBpbnN0ZWFkIG9mIHJ1bm5pbmcgdGhyb3VnaCB0aGUgZW50aXJlIGl0ZXJhdG9yLgoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSA9PiBfaXRlcmFibGVzLmFueSgoaSkgPT4gaS5jb250YWlucyhlbGVtZW50KSk7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2l0ZXJhYmxlcy5ldmVyeSgoaSkgPT4gaS5pc0VtcHR5KTsKCiAgaW50IGdldCBsZW5ndGggPT4gX2l0ZXJhYmxlcy5mb2xkKDAsIChsZW5ndGgsIGkpID0+IGxlbmd0aCArIGkubGVuZ3RoKTsKfQoKLy8vIFRoZSBpdGVyYXRvciBmb3IgW0NvbWJpbmVkSXRlcmFibGVWaWV3XS4KLy8vCi8vLyBUaGlzIG1vdmVzIHRocm91Z2ggZWFjaCBpdGVyYWJsZSdzIGl0ZXJhdG9ycyBpbiBzZXF1ZW5jZS4KY2xhc3MgX0NvbWJpbmVkSXRlcmF0b3I8VD4gaW1wbGVtZW50cyBJdGVyYXRvcjxUPiB7CiAgLy8vIFRoZSBpdGVyYXRvcnMgdGhhdCB0aGlzIGNvbWJpbmVzLgogIC8vLwogIC8vLyBCZWNhdXNlIHRoaXMgY29tZXMgZnJvbSBhIGNhbGwgdG8gW0l0ZXJhYmxlLm1hcF0sIGl0J3MgbGF6eSBhbmQgd2lsbAogIC8vLyBhdm9pZCBpbnN0YW50aWF0aW5nIHVubmVjZXNzYXJ5IGl0ZXJhdG9ycy4KICBmaW5hbCBJdGVyYXRvcjxJdGVyYXRvcjxUPj4gX2l0ZXJhdG9yczsKCiAgX0NvbWJpbmVkSXRlcmF0b3IodGhpcy5faXRlcmF0b3JzKTsKCiAgVCBnZXQgY3VycmVudCA9PiBfaXRlcmF0b3JzLmN1cnJlbnQ/LmN1cnJlbnQ7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICB2YXIgY3VycmVudCA9IF9pdGVyYXRvcnMuY3VycmVudDsKICAgIGlmIChjdXJyZW50ICE9IG51bGwgJiYgY3VycmVudC5tb3ZlTmV4dCgpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIF9pdGVyYXRvcnMubW92ZU5leHQoKSAmJiBtb3ZlTmV4dCgpOwogIH0KfQo5AE5OPAEaAU4ET1BLTw04KCoBLi8BHkwBSE4BTwE6AUoCAS0EPjQoBksxKgEmATABFCYxEwYwBAIBP3BhY2thZ2U6Y29sbGVjdGlvbi9zcmMvY29tYmluZWRfd3JhcHBlcnMvY29tYmluZWRfaXRlcmFibGUuZGFydFBzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL2NvbWJpbmVkX3dyYXBwZXJzL2NvbWJpbmVkX2xpc3QuZGFydIcpLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCi8vLyBBIHZpZXcgb2Ygc2V2ZXJhbCBsaXN0cyBjb21iaW5lZCBpbnRvIGEgc2luZ2xlIGxpc3QuCi8vLwovLy8gQWxsIG1ldGhvZHMgYW5kIGFjY2Vzc29ycyB0cmVhdCB0aGUgW0NvbWJpbmVkTGlzdFZpZXddIGxpc3QgYXMgaWYgaXQgd2VyZSBhCi8vLyBzaW5nbGUgY29uY2F0ZW5hdGVkIGxpc3QsIGJ1dCB0aGUgdW5kZXJseWluZyBpbXBsZW1lbnRhdGlvbiBpcyBiYXNlZCBvbgovLy8gbGF6aWx5IGFjY2Vzc2luZyBpbmRpdmlkdWFsIGxpc3QgaW5zdGFuY2VzLiBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlCi8vLyB1bmRlcmx5aW5nIGxpc3RzIGNoYW5nZSwgdGhlIFtDb21iaW5lZExpc3RWaWV3XSB3aWxsIHJlZmxlY3QgdGhvc2UgY2hhbmdlcy4KLy8vCi8vLyBUaGUgaW5kZXggb3BlcmF0b3IgKGBbXWApIGFuZCBbbGVuZ3RoXSBwcm9wZXJ0eSBvZiBhIFtDb21iaW5lZExpc3RWaWV3XSBhcmUKLy8vIGJvdGggYE8obGlzdHMpYCByYXRoZXIgdGhhbiBgTygxKWAuIEEgW0NvbWJpbmVkTGlzdFZpZXddIGlzIHVubW9kaWZpYWJsZS4KY2xhc3MgQ29tYmluZWRMaXN0VmlldzxUPiBleHRlbmRzIExpc3RCYXNlPFQ+CiAgICBpbXBsZW1lbnRzIFVubW9kaWZpYWJsZUxpc3RWaWV3PFQ+IHsKICBzdGF0aWMgdm9pZCBfdGhyb3coKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcignQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgTGlzdCcpOwogIH0KCiAgLy8vIFRoZSBsaXN0cyB0aGF0IHRoaXMgY29tYmluZXMuCiAgZmluYWwgTGlzdDxMaXN0PFQ+PiBfbGlzdHM7CgogIC8vLyBDcmVhdGVzIGEgY29tYmluZWQgdmlldyBvZiBbbGlzdHNdLgogIENvbWJpbmVkTGlzdFZpZXcodGhpcy5fbGlzdHMpOwoKICBzZXQgbGVuZ3RoKGludCBsZW5ndGgpIHsKICAgIF90aHJvdygpOwogIH0KCiAgaW50IGdldCBsZW5ndGggPT4gX2xpc3RzLmZvbGQoMCwgKGxlbmd0aCwgbGlzdCkgPT4gbGVuZ3RoICsgbGlzdC5sZW5ndGgpOwoKICBUIG9wZXJhdG9yIFtdKGludCBpbmRleCkgewogICAgdmFyIGluaXRpYWxJbmRleCA9IGluZGV4OwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfbGlzdHMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGxpc3QgPSBfbGlzdHNbaV07CiAgICAgIGlmIChpbmRleCA8IGxpc3QubGVuZ3RoKSB7CiAgICAgICAgcmV0dXJuIGxpc3RbaW5kZXhdOwogICAgICB9CiAgICAgIGluZGV4IC09IGxpc3QubGVuZ3RoOwogICAgfQogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoaW5pdGlhbEluZGV4LCB0aGlzLCAnaW5kZXgnLCBudWxsLCBsZW5ndGgpOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBUIHZhbHVlKSB7CiAgICBfdGhyb3coKTsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfdGhyb3coKTsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBlbGVtZW50KSB7CiAgICBfdGhyb3coKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgX3Rocm93KCk7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChUIGVsZW1lbnQpKSB7CiAgICBfdGhyb3coKTsKICB9Cn0KRABOTjwBGgE5BFBMR1AEUE4uKRlGBAEkHgEqIQEbDgQBTAEdHi4cIRwIHAZLBAEqDgQBEQ4EASAOEQQBKw4EASsOBAIBO3BhY2thZ2U6Y29sbGVjdGlvbi9zcmMvY29tYmluZWRfd3JhcHBlcnMvY29tYmluZWRfbGlzdC5kYXJ0N29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb2xsZWN0aW9uL2NvbGxlY3Rpb25zLmRhcnSDqC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29sbGVjdGlvbjsKCi8vLyBBbiB1bm1vZGlmaWFibGUgW0xpc3RdIHZpZXcgb2YgYW5vdGhlciBMaXN0LgovLy8KLy8vIFRoZSBzb3VyY2Ugb2YgdGhlIGVsZW1lbnRzIG1heSBiZSBhIFtMaXN0XSBvciBhbnkgW0l0ZXJhYmxlXSB3aXRoCi8vLyBlZmZpY2llbnQgW0l0ZXJhYmxlLmxlbmd0aF0gYW5kIFtJdGVyYWJsZS5lbGVtZW50QXRdLgpjbGFzcyBVbm1vZGlmaWFibGVMaXN0VmlldzxFPiBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPEU+IHsKICBmaW5hbCBJdGVyYWJsZTxFPiBfc291cmNlOwoKICAvLy8gQ3JlYXRlcyBhbiB1bm1vZGlmaWFibGUgbGlzdCBiYWNrZWQgYnkgW3NvdXJjZV0uCiAgLy8vCiAgLy8vIFRoZSBbc291cmNlXSBvZiB0aGUgZWxlbWVudHMgbWF5IGJlIGEgW0xpc3RdIG9yIGFueSBbSXRlcmFibGVdIHdpdGgKICAvLy8gZWZmaWNpZW50IFtJdGVyYWJsZS5sZW5ndGhdIGFuZCBbSXRlcmFibGUuZWxlbWVudEF0XS4KICBVbm1vZGlmaWFibGVMaXN0VmlldyhJdGVyYWJsZTxFPiBzb3VyY2UpIDogX3NvdXJjZSA9IHNvdXJjZTsKCiAgTGlzdDxSPiBjYXN0PFI+KCkgPT4gVW5tb2RpZmlhYmxlTGlzdFZpZXcoX3NvdXJjZS5jYXN0PFI+KCkpOwogIGludCBnZXQgbGVuZ3RoID0+IF9zb3VyY2UubGVuZ3RoOwoKICBFIG9wZXJhdG9yIFtdKGludCBpbmRleCkgPT4gX3NvdXJjZS5lbGVtZW50QXQoaW5kZXgpOwp9ChoATk48ARkBMQRGOkAdATcGSjw/AUAkATgCASBkYXJ0OmNvbGxlY3Rpb24vY29sbGVjdGlvbnMuZGFydE9zZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL2NvbWJpbmVkX3dyYXBwZXJzL2NvbWJpbmVkX21hcC5kYXJ0h/svLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwoKaW1wb3J0ICdjb21iaW5lZF9pdGVyYWJsZS5kYXJ0JzsKCi8vLyBSZXR1cm5zIGEgbmV3IG1hcCB0aGF0IHJlcHJlc2VudHMgbWFwcyBmbGF0dGVuZWQgaW50byBhIHNpbmdsZSBtYXAuCi8vLwovLy8gQWxsIG1ldGhvZHMgYW5kIGFjY2Vzc29ycyB0cmVhdCB0aGUgbmV3IG1hcCBhcy1pZiBpdCB3ZXJlIGEgc2luZ2xlCi8vLyBjb25jYXRlbmF0ZWQgbWFwLCBidXQgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gaXMgYmFzZWQgb24gbGF6aWx5Ci8vLyBhY2Nlc3NpbmcgaW5kaXZpZHVhbCBtYXAgaW5zdGFuY2VzLiBJbiB0aGUgb2NjYXNpb24gd2hlcmUgYSBrZXkgb2NjdXJzIGluCi8vLyBtdWx0aXBsZSBtYXBzIHRoZSBmaXJzdCB2YWx1ZSBpcyByZXR1cm5lZC4KLy8vCi8vLyBUaGUgcmVzdWx0aW5nIG1hcCBoYXMgYW4gaW5kZXggb3BlcmF0b3IgKGBbXWApIGFuZCBgbGVuZ3RoYCBwcm9wZXJ0eSB0aGF0Ci8vLyBhcmUgYm90aCBgTyhtYXBzKWAsIHJhdGhlciB0aGFuIGBPKDEpYCwgYW5kIHRoZSBtYXAgaXMgdW5tb2RpZmlhYmxlIC0gYnV0Ci8vLyB1bmRlcmx5aW5nIGNoYW5nZXMgdG8gdGhlc2UgbWFwcyBhcmUgc3RpbGwgYWNjZXNzaWJsZSBmcm9tIHRoZSByZXN1bHRpbmcKLy8vIG1hcC4KY2xhc3MgQ29tYmluZWRNYXBWaWV3PEssIFY+IGV4dGVuZHMgVW5tb2RpZmlhYmxlTWFwQmFzZTxLLCBWPiB7CiAgZmluYWwgSXRlcmFibGU8TWFwPEssIFY+PiBfbWFwczsKCiAgLy8vIENyZWF0ZSBhIG5ldyBjb21iaW5lZCB2aWV3IGludG8gbXVsdGlwbGUgbWFwcy4KICAvLy8KICAvLy8gVGhlIGl0ZXJhYmxlIGlzIGFjY2Vzc2VkIGxhemlseSBzbyBpdCBzaG91bGQgYmUgY29sbGVjdGlvbiB0eXBlIGxpa2UKICAvLy8gW0xpc3RdIG9yIFtTZXRdIHJhdGhlciB0aGFuIGEgbGF6eSBpdGVyYWJsZSBwcm9kdWNlZCBieSBgbWFwKClgIGV0IGFsLgogIENvbWJpbmVkTWFwVmlldyh0aGlzLl9tYXBzKTsKCiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSB7CiAgICBmb3IgKHZhciBtYXAgaW4gX21hcHMpIHsKICAgICAgLy8gQXZvaWQgdHdvIGhhc2ggbG9va3VwcyBvbiBhIHBvc2l0aXZlIGhpdC4KICAgICAgdmFyIHZhbHVlID0gbWFwW2tleV07CiAgICAgIGlmICh2YWx1ZSAhPSBudWxsIHx8IG1hcC5jb250YWluc0tleSh2YWx1ZSkpIHsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8vIFRoZSBrZXlzIG9mIFt0aGlzXS4KICAvLy8KICAvLy8gVGhlIHJldHVybmVkIGl0ZXJhYmxlIGhhcyBlZmZpY2llbnQgYGxlbmd0aGAgYW5kIGBjb250YWluc2Agb3BlcmF0aW9ucywKICAvLy8gYmFzZWQgb24gW2xlbmd0aF0gYW5kIFtjb250YWluc0tleV0gb2YgdGhlIGluZGl2aWR1YWwgbWFwcy4KICAvLy8KICAvLy8gVGhlIG9yZGVyIG9mIGl0ZXJhdGlvbiBpcyBkZWZpbmVkIGJ5IHRoZSBpbmRpdmlkdWFsIGBNYXBgIGltcGxlbWVudGF0aW9ucywKICAvLy8gYnV0IG11c3QgYmUgY29uc2lzdGVudCBiZXR3ZWVuIGNoYW5nZXMgdG8gdGhlIG1hcHMuCiAgLy8vCiAgLy8vIFVubGlrZSBtb3N0IFtNYXBdIGltcGxlbWVudGF0aW9ucywgbW9kaWZ5aW5nIGFuIGluZGl2aWR1YWwgbWFwIHdoaWxlCiAgLy8vIGl0ZXJhdGluZyB0aGUga2V5cyB3aWxsIF9zb21ldGltZXNfIHRocm93LiBUaGlzIGJlaGF2aW9yIG1heSBjaGFuZ2UgaW4KICAvLy8gdGhlIGZ1dHVyZS4KICBJdGVyYWJsZTxLPiBnZXQga2V5cyA9PiBuZXcgQ29tYmluZWRJdGVyYWJsZVZpZXc8Sz4oX21hcHMubWFwKChtKSA9PiBtLmtleXMpKTsKfQo2AE5OPAEaASEBSARHS04vBE5OTQlAIwE1BktNHwEeHTMcNRYIBhEEARoGTkIGUToGS00SUQIBOnBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvY29tYmluZWRfd3JhcHBlcnMvY29tYmluZWRfbWFwLmRhcnQ8c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy9jb21wYXJhdG9ycy5kYXJ0unEvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQ0KLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGENCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuDQoNCi8vIENoYXJhY3RlciBjb25zdGFudHMuDQpjb25zdCBpbnQgX3plcm8gPSAweDMwOw0KY29uc3QgaW50IF91cHBlckNhc2VBID0gMHg0MTsNCmNvbnN0IGludCBfdXBwZXJDYXNlWiA9IDB4NWE7DQpjb25zdCBpbnQgX2xvd2VyQ2FzZUEgPSAweDYxOw0KY29uc3QgaW50IF9sb3dlckNhc2VaID0gMHg3YTsNCmNvbnN0IGludCBfYXNjaWlDYXNlQml0ID0gMHgyMDsNCg0KLy8vIENoZWNrcyBpZiBzdHJpbmdzIFthXSBhbmQgW2JdIGRpZmZlciBvbmx5IG9uIHRoZSBjYXNlIG9mIEFTQ0lJIGxldHRlcnMuDQovLy8NCi8vLyBTdHJpbmdzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLCBhbmQgdGhlIGNoYXJhY3RlcnMgYXQNCi8vLyBlYWNoIGluZGV4IGFyZSB0aGUgc2FtZSwgb3IgdGhleSBhcmUgQVNDSUkgbGV0dGVycyB3aGVyZSBvbmUgaXMgdXBwZXItY2FzZQ0KLy8vIGFuZCB0aGUgb3RoZXIgaXMgdGhlIGxvd2VyLWNhc2UgdmVyc2lvbiBvZiB0aGUgc2FtZSBsZXR0ZXIuDQovLy8NCi8vLyBUaGUgY29tcGFyaXNvbiBkb2VzIG5vdCBpZ25vcmUgdGhlIGNhc2Ugb2Ygbm9uLUFTQ0lJIGxldHRlcnMsIHNvDQovLy8gYW4gdXBwZXItY2FzZSBhZS1saWdhdHVyZSAow4YpIGlzIGRpZmZlcmVudCBmcm9tDQovLy8gYSBsb3dlciBjYXNlIGFlLWxpZ2F0dXJlICjDpikuDQovLy8NCi8vLyBJZ25vcmluZyBub24tQVNDSUkgbGV0dGVycyBpcyBub3QgZ2VuZXJhbGx5IGEgZ29vZCBpZGVhLCBidXQgaXQgbWFrZXMgc2Vuc2UNCi8vLyBmb3Igc2l0dWF0aW9ucyB3aGVyZSB0aGUgc3RyaW5ncyBhcmUga25vd24gdG8gYmUgQVNDSUkuIEV4YW1wbGVzIGNvdWxkDQovLy8gYmUgRGFydCBpZGVudGlmaWVycywgYmFzZS02NCBvciBoZXggZW5jb2RlZCBzdHJpbmdzLCBHVUlEcyBvciBzaW1pbGFyDQovLy8gc3RyaW5ncyB3aXRoIGEga25vd24gc3RydWN0dXJlLg0KYm9vbCBlcXVhbHNJZ25vcmVBc2NpaUNhc2UoU3RyaW5nIGEsIFN0cmluZyBiKSB7DQogIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlOw0KICBmb3IgKGludCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsNCiAgICB2YXIgYUNoYXIgPSBhLmNvZGVVbml0QXQoaSk7DQogICAgdmFyIGJDaGFyID0gYi5jb2RlVW5pdEF0KGkpOw0KICAgIGlmIChhQ2hhciA9PSBiQ2hhcikgY29udGludWU7DQogICAgLy8gUXVpY2stY2hlY2sgZm9yIHdoZXRoZXIgdGhpcyBtYXkgYmUgZGlmZmVyZW50IGNhc2VzIG9mIHRoZSBzYW1lIGxldHRlci4NCiAgICBpZiAoYUNoYXIgXiBiQ2hhciAhPSBfYXNjaWlDYXNlQml0KSByZXR1cm4gZmFsc2U7DQogICAgLy8gSWYgaXQncyBwb3NzaWJsZSwgdGhlbiBjaGVjayBpZiBlaXRoZXIgY2hhcmFjdGVyIGlzIGFjdHVhbGx5IGFuIEFTQ0lJDQogICAgLy8gbGV0dGVyLg0KICAgIGludCBhQ2hhckxvd2VyQ2FzZSA9IGFDaGFyIHwgX2FzY2lpQ2FzZUJpdDsNCiAgICBpZiAoX2xvd2VyQ2FzZUEgPD0gYUNoYXJMb3dlckNhc2UgJiYgYUNoYXJMb3dlckNhc2UgPD0gX2xvd2VyQ2FzZVopIHsNCiAgICAgIGNvbnRpbnVlOw0KICAgIH0NCiAgICByZXR1cm4gZmFsc2U7DQogIH0NCiAgcmV0dXJuIHRydWU7DQp9DQoNCi8vLyBIYXNoIGNvZGUgZm9yIGEgc3RyaW5nIHdoaWNoIGlzIGNvbXBhdGlibGUgd2l0aCBbZXF1YWxzSWdub3JlQXNjaWlDYXNlXS4NCi8vLw0KLy8vIFRoZSBoYXNoIGNvZGUgaXMgdW5hZmZlY3RlZCBieSBjaGFuZ2luZyB0aGUgY2FzZSBvZiBBU0NJSSBsZXR0ZXJzLCBidXQNCi8vLyB0aGUgY2FzZSBvZiBub24tQVNDSUkgbGV0dGVycyBkbyBhZmZlY3QgdGhlIHJlc3VsdC4NCmludCBoYXNoSWdub3JlQXNjaWlDYXNlKFN0cmluZyBzdHJpbmcpIHsNCiAgLy8gSmVua2lucyBoYXNoIGNvZGUgKCBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0plbmtpbnNfaGFzaF9mdW5jdGlvbikuDQogIC8vIGFkYXB0ZWQgdG8gc21pIHZhbHVlcy4NCiAgLy8gU2FtZSBoYXNoIHVzZWQgYnkgZGFydDJqcyBmb3Igc3RyaW5ncywgbW9kaWZpZWQgdG8gaWdub3JlIEFTQ0lJIGxldHRlcg0KICAvLyBjYXNlLg0KICBpbnQgaGFzaCA9IDA7DQogIGZvciAoaW50IGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7DQogICAgaW50IGNoYXIgPSBzdHJpbmcuY29kZVVuaXRBdChpKTsNCiAgICAvLyBDb252ZXJ0IGxvd2VyLWNhc2UgQVNDSUkgbGV0dGVycyB0byB1cHBlciBjYXNlLnVwcGVyDQogICAgLy8gVGhpcyBlbnN1cmVzIHRoYXQgc3RyaW5ncyB0aGF0IGRpZmZlciBvbmx5IGluIGNhc2Ugd2lsbCBoYXZlIHRoZQ0KICAgIC8vIHNhbWUgaGFzaCBjb2RlLg0KICAgIGlmIChfbG93ZXJDYXNlQSA8PSBjaGFyICYmIGNoYXIgPD0gX2xvd2VyQ2FzZVopIGNoYXIgLT0gX2FzY2lpQ2FzZUJpdDsNCiAgICBoYXNoID0gMHgxZmZmZmZmZiAmIChoYXNoICsgY2hhcik7DQogICAgaGFzaCA9IDB4MWZmZmZmZmYgJiAoaGFzaCArICgoMHgwMDA3ZmZmZiAmIGhhc2gpIDw8IDEwKSk7DQogICAgaGFzaCA+Pj0gNjsNCiAgfQ0KICBoYXNoID0gMHgxZmZmZmZmZiAmIChoYXNoICsgKCgweDAzZmZmZmZmICYgaGFzaCkgPDwgMykpOw0KICBoYXNoID4+PSAxMTsNCiAgcmV0dXJuIDB4MWZmZmZmZmYgJiAoaGFzaCArICgoMHgwMDAwM2ZmZiAmIGhhc2gpIDw8IDE1KSk7DQp9DQoNCi8vLyBDb21wYXJlcyBbYV0gYW5kIFtiXSBsZXhpY2FsbHksIGNvbnZlcnRpbmcgQVNDSUkgbGV0dGVycyB0byB1cHBlciBjYXNlLg0KLy8vDQovLy8gQ29tcGFyaXNvbiB0cmVhdHMgYWxsIGxvd2VyLWNhc2UgQVNDSUkgbGV0dGVycyBhcyB1cHBlci1jYXNlIGxldHRlcnMsDQovLy8gYnV0IGRvZXMgbm8gY2FzZSBjb252ZXJzaW9uIGZvciBub24tQVNDSUkgbGV0dGVycy4NCi8vLw0KLy8vIElmIHR3byBzdHJpbmdzIGRpZmZlciBvbmx5IG9uIHRoZSBjYXNlIG9mIEFTQ0lJIGxldHRlcnMsIHRoZSBvbmUgd2l0aCB0aGUNCi8vLyBjYXBpdGFsIGxldHRlciBhdCB0aGUgZmlyc3QgZGlmZmVyZW5jZSB3aWxsIGNvbXBhcmUgYXMgbGVzcyB0aGFuIHRoZSBvdGhlcg0KLy8vIHN0cmluZy4gVGhpcyB0aWUtYnJlYWtpbmcgZW5zdXJlcyB0aGF0IHRoZSBjb21wYXJpc29uIGlzIGEgdG90YWwgb3JkZXJpbmcNCi8vLyBvbiBzdHJpbmdzIGFuZCBpcyBjb21wYXRpYmxlIHdpdGggZXF1YWxpdHkuDQovLy8NCi8vLyBJZ25vcmluZyBub24tQVNDSUkgbGV0dGVycyBpcyBub3QgZ2VuZXJhbGx5IGEgZ29vZCBpZGVhLCBidXQgaXQgbWFrZXMgc2Vuc2UNCi8vLyBmb3Igc2l0dWF0aW9ucyB3aGVyZSB0aGUgc3RyaW5ncyBhcmUga25vd24gdG8gYmUgQVNDSUkuIEV4YW1wbGVzIGNvdWxkDQovLy8gYmUgRGFydCBpZGVudGlmaWVycywgYmFzZS02NCBvciBoZXggZW5jb2RlZCBzdHJpbmdzLCBHVUlEcyBvciBzaW1pbGFyDQovLy8gc3RyaW5ncyB3aXRoIGEga25vd24gc3RydWN0dXJlLg0KaW50IGNvbXBhcmVBc2NpaVVwcGVyQ2FzZShTdHJpbmcgYSwgU3RyaW5nIGIpIHsNCiAgaW50IGRlZmF1bHRSZXN1bHQgPSAwOyAvLyBSZXR1cm5lZCBpZiBubyBkaWZmZXJlbmNlIGZvdW5kLg0KICBmb3IgKGludCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsNCiAgICBpZiAoaSA+PSBiLmxlbmd0aCkgcmV0dXJuIDE7DQogICAgdmFyIGFDaGFyID0gYS5jb2RlVW5pdEF0KGkpOw0KICAgIHZhciBiQ2hhciA9IGIuY29kZVVuaXRBdChpKTsNCiAgICBpZiAoYUNoYXIgPT0gYkNoYXIpIGNvbnRpbnVlOw0KICAgIC8vIFVwcGVyLWNhc2UgaWYgbGV0dGVycy4NCiAgICBpbnQgYVVwcGVyQ2FzZSA9IGFDaGFyOw0KICAgIGludCBiVXBwZXJDYXNlID0gYkNoYXI7DQogICAgaWYgKF9sb3dlckNhc2VBIDw9IGFDaGFyICYmIGFDaGFyIDw9IF9sb3dlckNhc2VaKSB7DQogICAgICBhVXBwZXJDYXNlIC09IF9hc2NpaUNhc2VCaXQ7DQogICAgfQ0KICAgIGlmIChfbG93ZXJDYXNlQSA8PSBiQ2hhciAmJiBiQ2hhciA8PSBfbG93ZXJDYXNlWikgew0KICAgICAgYlVwcGVyQ2FzZSAtPSBfYXNjaWlDYXNlQml0Ow0KICAgIH0NCiAgICBpZiAoYVVwcGVyQ2FzZSAhPSBiVXBwZXJDYXNlKSByZXR1cm4gKGFVcHBlckNhc2UgLSBiVXBwZXJDYXNlKS5zaWduOw0KICAgIGlmIChkZWZhdWx0UmVzdWx0ID09IDApIGRlZmF1bHRSZXN1bHQgPSAoYUNoYXIgLSBiQ2hhcik7DQogIH0NCiAgaWYgKGIubGVuZ3RoID4gYS5sZW5ndGgpIHJldHVybiAtMTsNCiAgcmV0dXJuIGRlZmF1bHRSZXN1bHQuc2lnbjsNCn0NCg0KLy8vIENvbXBhcmVzIFthXSBhbmQgW2JdIGxleGljYWxseSwgY29udmVydGluZyBBU0NJSSBsZXR0ZXJzIHRvIGxvd2VyIGNhc2UuDQovLy8NCi8vLyBDb21wYXJpc29uIHRyZWF0cyBhbGwgdXBwZXItY2FzZSBBU0NJSSBsZXR0ZXJzIGFzIGxvd2VyLWNhc2UgbGV0dGVycywNCi8vLyBidXQgZG9lcyBubyBjYXNlIGNvbnZlcnNpb24gZm9yIG5vbi1BU0NJSSBsZXR0ZXJzLg0KLy8vDQovLy8gSWYgdHdvIHN0cmluZ3MgZGlmZmVyIG9ubHkgb24gdGhlIGNhc2Ugb2YgQVNDSUkgbGV0dGVycywgdGhlIG9uZSB3aXRoIHRoZQ0KLy8vIGNhcGl0YWwgbGV0dGVyIGF0IHRoZSBmaXJzdCBkaWZmZXJlbmNlIHdpbGwgY29tcGFyZSBhcyBsZXNzIHRoYW4gdGhlIG90aGVyDQovLy8gc3RyaW5nLiBUaGlzIHRpZS1icmVha2luZyBlbnN1cmVzIHRoYXQgdGhlIGNvbXBhcmlzb24gaXMgYSB0b3RhbCBvcmRlcmluZw0KLy8vIG9uIHN0cmluZ3MuDQovLy8NCi8vLyBJZ25vcmluZyBub24tQVNDSUkgbGV0dGVycyBpcyBub3QgZ2VuZXJhbGx5IGEgZ29vZCBpZGVhLCBidXQgaXQgbWFrZXMgc2Vuc2UNCi8vLyBmb3Igc2l0dWF0aW9ucyB3aGVyZSB0aGUgc3RyaW5ncyBhcmUga25vd24gdG8gYmUgQVNDSUkuIEV4YW1wbGVzIGNvdWxkDQovLy8gYmUgRGFydCBpZGVudGlmaWVycywgYmFzZS02NCBvciBoZXggZW5jb2RlZCBzdHJpbmdzLCBHVUlEcyBvciBzaW1pbGFyDQovLy8gc3RyaW5ncyB3aXRoIGEga25vd24gc3RydWN0dXJlLg0KaW50IGNvbXBhcmVBc2NpaUxvd2VyQ2FzZShTdHJpbmcgYSwgU3RyaW5nIGIpIHsNCiAgaW50IGRlZmF1bHRSZXN1bHQgPSAwOw0KICBmb3IgKGludCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsNCiAgICBpZiAoaSA+PSBiLmxlbmd0aCkgcmV0dXJuIDE7DQogICAgdmFyIGFDaGFyID0gYS5jb2RlVW5pdEF0KGkpOw0KICAgIHZhciBiQ2hhciA9IGIuY29kZVVuaXRBdChpKTsNCiAgICBpZiAoYUNoYXIgPT0gYkNoYXIpIGNvbnRpbnVlOw0KICAgIGludCBhTG93ZXJDYXNlID0gYUNoYXI7DQogICAgaW50IGJMb3dlckNhc2UgPSBiQ2hhcjsNCiAgICAvLyBVcHBlciBjYXNlIGlmIEFTQ0lJIGxldHRlcnMuDQogICAgaWYgKF91cHBlckNhc2VBIDw9IGJDaGFyICYmIGJDaGFyIDw9IF91cHBlckNhc2VaKSB7DQogICAgICBiTG93ZXJDYXNlICs9IF9hc2NpaUNhc2VCaXQ7DQogICAgfQ0KICAgIGlmIChfdXBwZXJDYXNlQSA8PSBhQ2hhciAmJiBhQ2hhciA8PSBfdXBwZXJDYXNlWikgew0KICAgICAgYUxvd2VyQ2FzZSArPSBfYXNjaWlDYXNlQml0Ow0KICAgIH0NCiAgICBpZiAoYUxvd2VyQ2FzZSAhPSBiTG93ZXJDYXNlKSByZXR1cm4gKGFMb3dlckNhc2UgLSBiTG93ZXJDYXNlKS5zaWduOw0KICAgIGlmIChkZWZhdWx0UmVzdWx0ID09IDApIGRlZmF1bHRSZXN1bHQgPSBhQ2hhciAtIGJDaGFyOw0KICB9DQogIGlmIChiLmxlbmd0aCA+IGEubGVuZ3RoKSByZXR1cm4gLTE7DQogIHJldHVybiBkZWZhdWx0UmVzdWx0LnNpZ247DQp9DQoNCi8vLyBDb21wYXJlcyBzdHJpbmdzIFthXSBhbmQgW2JdIGFjY29yZGluZyB0byBbbmF0dXJhbCBzb3J0IG9yZGVyaW5nXVtdLg0KLy8vDQovLy8gQSBuYXR1cmFsIHNvcnQgb3JkZXJpbmcgaXMgYSBsZXhpY2FsIG9yZGVyaW5nIHdoZXJlIGVtYmVkZGVkDQovLy8gbnVtZXJhbHMgKGRpZ2l0IHNlcXVlbmNlcykgYXJlIHRyZWF0ZWQgYXMgYSBzaW5nbGUgdW5pdCBhbmQgb3JkZXJlZCBieQ0KLy8vIG51bWVyaWNhbCB2YWx1ZS4NCi8vLyBUaGlzIG1lYW5zIHRoYXQgYCJhMTBiImAgd2lsbCBiZSBvcmRlcmVkIGFmdGVyIGAiYTdiImAgaW4gbmF0dXJhbA0KLy8vIG9yZGVyaW5nLCB3aGVyZSBsZXhpY2FsIG9yZGVyaW5nIHdvdWxkIHB1dCB0aGUgYDFgIGJlZm9yZSB0aGUgYDdgLCBpZ25vcmluZw0KLy8vIHRoYXQgdGhlIGAxYCBpcyBwYXJ0IG9mIGEgbGFyZ2VyIG51bWJlci4NCi8vLw0KLy8vIEV4YW1wbGU6DQovLy8gVGhlIGZvbGxvd2luZyBzdHJpbmdzIGFyZSBpbiB0aGUgb3JkZXIgdGhleSB3b3VsZCBiZSBzb3J0ZWQgYnkgdXNpbmcgdGhpcw0KLy8vIGNvbXBhcmlzb24gZnVuY3Rpb246DQovLy8NCi8vLyAgICAgImEiLCAiYTAiLCAiYTBiIiwgImExIiwgImEwMSIsICJhOSIsICJhMTAiLCAiYTEwMCIsICJhMTAwYiIsICJhYSINCi8vLw0KLy8vIFtuYXR1cmFsIHNvcnQgb3JkZXJpbmddOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9OYXR1cmFsX3NvcnRfb3JkZXINCmludCBjb21wYXJlTmF0dXJhbChTdHJpbmcgYSwgU3RyaW5nIGIpIHsNCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7DQogICAgaWYgKGkgPj0gYi5sZW5ndGgpIHJldHVybiAxOw0KICAgIHZhciBhQ2hhciA9IGEuY29kZVVuaXRBdChpKTsNCiAgICB2YXIgYkNoYXIgPSBiLmNvZGVVbml0QXQoaSk7DQogICAgaWYgKGFDaGFyICE9IGJDaGFyKSB7DQogICAgICByZXR1cm4gX2NvbXBhcmVOYXR1cmFsbHkoYSwgYiwgaSwgYUNoYXIsIGJDaGFyKTsNCiAgICB9DQogIH0NCiAgaWYgKGIubGVuZ3RoID4gYS5sZW5ndGgpIHJldHVybiAtMTsNCiAgcmV0dXJuIDA7DQp9DQoNCi8vLyBDb21wYXJlcyBzdHJpbmdzIFthXSBhbmQgW2JdIGFjY29yZGluZyB0byBsb3dlci1jYXNlDQovLy8gW25hdHVyYWwgc29ydCBvcmRlcmluZ11bXS4NCi8vLw0KLy8vIEFTQ0lJIGxldHRlcnMgYXJlIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlIGJlZm9yZSBiZWluZyBjb21wYXJlZCwgbGlrZQ0KLy8vIGZvciBbY29tcGFyZUFzY2lpTG93ZXJDYXNlXSwgdGhlbiB0aGUgcmVzdWx0IGlzIGNvbXBhcmVkIGxpa2UgZm9yDQovLy8gW2NvbXBhcmVOYXR1cmFsXS4NCi8vLw0KLy8vIElmIHR3byBzdHJpbmdzIGRpZmZlciBvbmx5IG9uIHRoZSBjYXNlIG9mIEFTQ0lJIGxldHRlcnMsIHRoZSBvbmUgd2l0aCB0aGUNCi8vLyBjYXBpdGFsIGxldHRlciBhdCB0aGUgZmlyc3QgZGlmZmVyZW5jZSB3aWxsIGNvbXBhcmUgYXMgbGVzcyB0aGFuIHRoZSBvdGhlcg0KLy8vIHN0cmluZy4gVGhpcyB0aWUtYnJlYWtpbmcgZW5zdXJlcyB0aGF0IHRoZSBjb21wYXJpc29uIGlzIGEgdG90YWwgb3JkZXJpbmcNCi8vLyBvbiBzdHJpbmdzLg0KLy8vDQovLy8gW25hdHVyYWwgc29ydCBvcmRlcmluZ106IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05hdHVyYWxfc29ydF9vcmRlcg0KaW50IGNvbXBhcmVBc2NpaUxvd2VyQ2FzZU5hdHVyYWwoU3RyaW5nIGEsIFN0cmluZyBiKSB7DQogIGludCBkZWZhdWx0UmVzdWx0ID0gMDsgLy8gUmV0dXJuZWQgaWYgbm8gZGlmZmVyZW5jZSBmb3VuZC4NCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7DQogICAgaWYgKGkgPj0gYi5sZW5ndGgpIHJldHVybiAxOw0KICAgIHZhciBhQ2hhciA9IGEuY29kZVVuaXRBdChpKTsNCiAgICB2YXIgYkNoYXIgPSBiLmNvZGVVbml0QXQoaSk7DQogICAgaWYgKGFDaGFyID09IGJDaGFyKSBjb250aW51ZTsNCiAgICBpbnQgYUxvd2VyQ2FzZSA9IGFDaGFyOw0KICAgIGludCBiTG93ZXJDYXNlID0gYkNoYXI7DQogICAgaWYgKF91cHBlckNhc2VBIDw9IGFDaGFyICYmIGFDaGFyIDw9IF91cHBlckNhc2VaKSB7DQogICAgICBhTG93ZXJDYXNlICs9IF9hc2NpaUNhc2VCaXQ7DQogICAgfQ0KICAgIGlmIChfdXBwZXJDYXNlQSA8PSBiQ2hhciAmJiBiQ2hhciA8PSBfdXBwZXJDYXNlWikgew0KICAgICAgYkxvd2VyQ2FzZSArPSBfYXNjaWlDYXNlQml0Ow0KICAgIH0NCiAgICBpZiAoYUxvd2VyQ2FzZSAhPSBiTG93ZXJDYXNlKSB7DQogICAgICByZXR1cm4gX2NvbXBhcmVOYXR1cmFsbHkoYSwgYiwgaSwgYUxvd2VyQ2FzZSwgYkxvd2VyQ2FzZSk7DQogICAgfQ0KICAgIGlmIChkZWZhdWx0UmVzdWx0ID09IDApIGRlZmF1bHRSZXN1bHQgPSBhQ2hhciAtIGJDaGFyOw0KICB9DQogIGlmIChiLmxlbmd0aCA+IGEubGVuZ3RoKSByZXR1cm4gLTE7DQogIHJldHVybiBkZWZhdWx0UmVzdWx0LnNpZ247DQp9DQoNCi8vLyBDb21wYXJlcyBzdHJpbmdzIFthXSBhbmQgW2JdIGFjY29yZGluZyB0byB1cHBlci1jYXNlDQovLy8gW25hdHVyYWwgc29ydCBvcmRlcmluZ11bXS4NCi8vLw0KLy8vIEFTQ0lJIGxldHRlcnMgYXJlIGNvbnZlcnRlZCB0byB1cHBlciBjYXNlIGJlZm9yZSBiZWluZyBjb21wYXJlZCwgbGlrZQ0KLy8vIGZvciBbY29tcGFyZUFzY2lpVXBwZXJDYXNlXSwgdGhlbiB0aGUgcmVzdWx0IGlzIGNvbXBhcmVkIGxpa2UgZm9yDQovLy8gW2NvbXBhcmVOYXR1cmFsXS4NCi8vLw0KLy8vIElmIHR3byBzdHJpbmdzIGRpZmZlciBvbmx5IG9uIHRoZSBjYXNlIG9mIEFTQ0lJIGxldHRlcnMsIHRoZSBvbmUgd2l0aCB0aGUNCi8vLyBjYXBpdGFsIGxldHRlciBhdCB0aGUgZmlyc3QgZGlmZmVyZW5jZSB3aWxsIGNvbXBhcmUgYXMgbGVzcyB0aGFuIHRoZSBvdGhlcg0KLy8vIHN0cmluZy4gVGhpcyB0aWUtYnJlYWtpbmcgZW5zdXJlcyB0aGF0IHRoZSBjb21wYXJpc29uIGlzIGEgdG90YWwgb3JkZXJpbmcNCi8vLyBvbiBzdHJpbmdzDQovLy8NCi8vLyBbbmF0dXJhbCBzb3J0IG9yZGVyaW5nXTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTmF0dXJhbF9zb3J0X29yZGVyDQppbnQgY29tcGFyZUFzY2lpVXBwZXJDYXNlTmF0dXJhbChTdHJpbmcgYSwgU3RyaW5nIGIpIHsNCiAgaW50IGRlZmF1bHRSZXN1bHQgPSAwOw0KICBmb3IgKGludCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsNCiAgICBpZiAoaSA+PSBiLmxlbmd0aCkgcmV0dXJuIDE7DQogICAgdmFyIGFDaGFyID0gYS5jb2RlVW5pdEF0KGkpOw0KICAgIHZhciBiQ2hhciA9IGIuY29kZVVuaXRBdChpKTsNCiAgICBpZiAoYUNoYXIgPT0gYkNoYXIpIGNvbnRpbnVlOw0KICAgIGludCBhVXBwZXJDYXNlID0gYUNoYXI7DQogICAgaW50IGJVcHBlckNhc2UgPSBiQ2hhcjsNCiAgICBpZiAoX2xvd2VyQ2FzZUEgPD0gYUNoYXIgJiYgYUNoYXIgPD0gX2xvd2VyQ2FzZVopIHsNCiAgICAgIGFVcHBlckNhc2UgLT0gX2FzY2lpQ2FzZUJpdDsNCiAgICB9DQogICAgaWYgKF9sb3dlckNhc2VBIDw9IGJDaGFyICYmIGJDaGFyIDw9IF9sb3dlckNhc2VaKSB7DQogICAgICBiVXBwZXJDYXNlIC09IF9hc2NpaUNhc2VCaXQ7DQogICAgfQ0KICAgIGlmIChhVXBwZXJDYXNlICE9IGJVcHBlckNhc2UpIHsNCiAgICAgIHJldHVybiBfY29tcGFyZU5hdHVyYWxseShhLCBiLCBpLCBhVXBwZXJDYXNlLCBiVXBwZXJDYXNlKTsNCiAgICB9DQogICAgaWYgKGRlZmF1bHRSZXN1bHQgPT0gMCkgZGVmYXVsdFJlc3VsdCA9IGFDaGFyIC0gYkNoYXI7DQogIH0NCiAgaWYgKGIubGVuZ3RoID4gYS5sZW5ndGgpIHJldHVybiAtMTsNCiAgcmV0dXJuIGRlZmF1bHRSZXN1bHQuc2lnbjsNCn0NCg0KLy8vIENoZWNrIGZvciBudW1iZXJzIG92ZXJsYXBwaW5nIHRoZSBjdXJyZW50IG1pc21hdGNoZWQgY2hhcmFjdGVycy4NCi8vLw0KLy8vIElmIGJvdGggW2FDaGFyXSBhbmQgW2JDaGFyXSBhcmUgZGlnaXRzLCB1c2UgbnVtZXJpY2FsIGNvbXBhcmlzb24uDQovLy8gQ2hlY2sgaWYgdGhlIHByZXZpb3VzIGNoYXJhY3RlcnMgaXMgYSBub24temVybyBudW1iZXIsIGFuZCBpZiBub3QsDQovLy8gc2tpcCAtIGJ1dCBjb3VudCAtIGxlYWRpbmcgemVyb3MgYmVmb3JlIGNvbXBhcmluZyBudW1iZXJzLg0KLy8vDQovLy8gSWYgb25lIGlzIGEgZGlnaXQgYW5kIHRoZSBvdGhlciBpc24ndCwgY2hlY2sgaWYgdGhlIHByZXZpb3VzIGNoYXJhY3Rlcg0KLy8vIGlzIGEgZGlnaXQsIGFuZCBpZiBzbywgdGhlIHRoZSBvbmUgd2l0aCB0aGUgZGlnaXQgaXMgdGhlIGdyZWF0ZXIgbnVtYmVyLg0KLy8vDQovLy8gT3RoZXJ3aXNlIGp1c3QgcmV0dXJucyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFthQ2hhcl0gYW5kIFtiQ2hhcl0uDQppbnQgX2NvbXBhcmVOYXR1cmFsbHkoU3RyaW5nIGEsIFN0cmluZyBiLCBpbnQgaW5kZXgsIGludCBhQ2hhciwgaW50IGJDaGFyKSB7DQogIGFzc2VydChhQ2hhciAhPSBiQ2hhcik7DQogIHZhciBhSXNEaWdpdCA9IF9pc0RpZ2l0KGFDaGFyKTsNCiAgdmFyIGJJc0RpZ2l0ID0gX2lzRGlnaXQoYkNoYXIpOw0KICBpZiAoYUlzRGlnaXQpIHsNCiAgICBpZiAoYklzRGlnaXQpIHsNCiAgICAgIHJldHVybiBfY29tcGFyZU51bWVyaWNhbGx5KGEsIGIsIGFDaGFyLCBiQ2hhciwgaW5kZXgpOw0KICAgIH0gZWxzZSBpZiAoaW5kZXggPiAwICYmIF9pc0RpZ2l0KGEuY29kZVVuaXRBdChpbmRleCAtIDEpKSkgew0KICAgICAgLy8gYUNoYXIgaXMgdGhlIGNvbnRpbnVhdGlvbiBvZiBhIGxvbmdlciBudW1iZXIuDQogICAgICByZXR1cm4gMTsNCiAgICB9DQogIH0gZWxzZSBpZiAoYklzRGlnaXQgJiYgaW5kZXggPiAwICYmIF9pc0RpZ2l0KGIuY29kZVVuaXRBdChpbmRleCAtIDEpKSkgew0KICAgIC8vIGJDaGFyIGlzIHRoZSBjb250aW51YXRpb24gb2YgYSBsb25nZXIgbnVtYmVyLg0KICAgIHJldHVybiAtMTsNCiAgfQ0KICAvLyBDaGFyYWN0ZXJzIGFyZSBib3RoIG5vbi1kaWdpdHMsIG9yIG5vdCBjb250aW51YXRpb24gb2YgZWFybGllciBudW1iZXIuDQogIHJldHVybiAoYUNoYXIgLSBiQ2hhcikuc2lnbjsNCn0NCg0KLy8vIENvbXBhcmUgbnVtYmVycyBvdmVybGFwcGluZyBbYUNoYXJdIGFuZCBbYkNoYXJdIG51bWVyaWNhbGx5Lg0KLy8vDQovLy8gSWYgdGhlIG51bWJlcnMgaGF2ZSB0aGUgc2FtZSBudW1lcmljYWwgdmFsdWUsIGJ1dCBvbmUgaGFzIG1vcmUgbGVhZGluZw0KLy8vIHplcm9zLCB0aGUgbG9uZ2VyIG51bWJlciBpcyBjb25zaWRlcmVkIGdyZWF0ZXIgdGhhbiB0aGUgc2hvcnRlciBvbmUuDQovLy8NCi8vLyBUaGlzIGVuc3VyZXMgYSB0b3RhbCBvcmRlcmluZyBvbiBzdHJpbmdzIGNvbXBhdGlibGUgd2l0aCBlcXVhbGl0eS4NCmludCBfY29tcGFyZU51bWVyaWNhbGx5KFN0cmluZyBhLCBTdHJpbmcgYiwgaW50IGFDaGFyLCBpbnQgYkNoYXIsIGludCBpbmRleCkgew0KICAvLyBCb3RoIGFyZSBkaWdpdHMuIEZpbmQgdGhlIGZpcnN0IHNpZ25pZmljYW50IGRpZmZlcmVudCBkaWdpdCwgdGhlbiBmaW5kDQogIC8vIHRoZSBsZW5ndGggb2YgdGhlIG51bWJlcnMuDQogIGlmIChfaXNOb25aZXJvTnVtYmVyU3VmZml4KGEsIGluZGV4KSkgew0KICAgIC8vIFBhcnQgb2YgYSBsb25nZXIgbnVtYmVyLCBkaWZmZXJzIGF0IHRoaXMgaW5kZXgsIGp1c3QgY291bnQgdGhlIGxlbmd0aC4NCiAgICBpbnQgcmVzdWx0ID0gX2NvbXBhcmVEaWdpdENvdW50KGEsIGIsIGluZGV4LCBpbmRleCk7DQogICAgaWYgKHJlc3VsdCAhPSAwKSByZXR1cm4gcmVzdWx0Ow0KICAgIC8vIElmIHNhbWUgbGVuZ3RoLCB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgdGhlIG1vc3Qgc2lnbmlmaWNhbnQgZGlmZmVyaW5nDQogICAgLy8gZGlnaXQuDQogICAgcmV0dXJuIChhQ2hhciAtIGJDaGFyKS5zaWduOw0KICB9DQogIC8vIE5vdCBwYXJ0IG9mIGxhcmdlciAobm9uLXplcm8pIG51bWJlciwgc28gc2tpcCBsZWFkaW5nIHplcm9zIGJlZm9yZQ0KICAvLyBjb21wYXJpbmcgbnVtYmVycy4NCiAgaW50IGFJbmRleCA9IGluZGV4Ow0KICBpbnQgYkluZGV4ID0gaW5kZXg7DQogIGlmIChhQ2hhciA9PSBfemVybykgew0KICAgIGRvIHsNCiAgICAgIGFJbmRleCsrOw0KICAgICAgaWYgKGFJbmRleCA9PSBhLmxlbmd0aCkgcmV0dXJuIC0xOyAvLyBudW1iZXIgaW4gYSBpcyB6ZXJvLCBiIGlzIG5vdC4NCiAgICAgIGFDaGFyID0gYS5jb2RlVW5pdEF0KGFJbmRleCk7DQogICAgfSB3aGlsZSAoYUNoYXIgPT0gX3plcm8pOw0KICAgIGlmICghX2lzRGlnaXQoYUNoYXIpKSByZXR1cm4gLTE7DQogIH0gZWxzZSBpZiAoYkNoYXIgPT0gX3plcm8pIHsNCiAgICBkbyB7DQogICAgICBiSW5kZXgrKzsNCiAgICAgIGlmIChiSW5kZXggPT0gYi5sZW5ndGgpIHJldHVybiAxOyAvLyBudW1iZXIgaW4gYiBpcyB6ZXJvLCBhIGlzIG5vdC4NCiAgICAgIGJDaGFyID0gYi5jb2RlVW5pdEF0KGJJbmRleCk7DQogICAgfSB3aGlsZSAoYkNoYXIgPT0gX3plcm8pOw0KICAgIGlmICghX2lzRGlnaXQoYkNoYXIpKSByZXR1cm4gMTsNCiAgfQ0KICBpZiAoYUNoYXIgIT0gYkNoYXIpIHsNCiAgICBpbnQgcmVzdWx0ID0gX2NvbXBhcmVEaWdpdENvdW50KGEsIGIsIGFJbmRleCwgYkluZGV4KTsNCiAgICBpZiAocmVzdWx0ICE9IDApIHJldHVybiByZXN1bHQ7DQogICAgcmV0dXJuIChhQ2hhciAtIGJDaGFyKS5zaWduOw0KICB9DQogIC8vIFNhbWUgbGVhZGluZyBkaWdpdCwgb25lIGhhZCBtb3JlIGxlYWRpbmcgemVyb3MuDQogIC8vIENvbXBhcmUgZGlnaXRzIHVudGlsIHJlYWNoaW5nIGEgZGlmZmVyZW5jZS4NCiAgd2hpbGUgKHRydWUpIHsNCiAgICB2YXIgYUlzRGlnaXQgPSBmYWxzZTsNCiAgICB2YXIgYklzRGlnaXQgPSBmYWxzZTsNCiAgICBhQ2hhciA9IDA7DQogICAgYkNoYXIgPSAwOw0KICAgIGlmICgrK2FJbmRleCA8IGEubGVuZ3RoKSB7DQogICAgICBhQ2hhciA9IGEuY29kZVVuaXRBdChhSW5kZXgpOw0KICAgICAgYUlzRGlnaXQgPSBfaXNEaWdpdChhQ2hhcik7DQogICAgfQ0KICAgIGlmICgrK2JJbmRleCA8IGIubGVuZ3RoKSB7DQogICAgICBiQ2hhciA9IGIuY29kZVVuaXRBdChiSW5kZXgpOw0KICAgICAgYklzRGlnaXQgPSBfaXNEaWdpdChiQ2hhcik7DQogICAgfQ0KICAgIGlmIChhSXNEaWdpdCkgew0KICAgICAgaWYgKGJJc0RpZ2l0KSB7DQogICAgICAgIGlmIChhQ2hhciA9PSBiQ2hhcikgY29udGludWU7DQogICAgICAgIC8vIEZpcnN0IGRpZmZlcmVudCBkaWdpdCBmb3VuZC4NCiAgICAgICAgYnJlYWs7DQogICAgICB9DQogICAgICAvLyBiQ2hhciBpcyBub24tZGlnaXQsIHNvIGEgaGFzIGxvbmdlciBudW1iZXIuDQogICAgICByZXR1cm4gMTsNCiAgICB9IGVsc2UgaWYgKGJJc0RpZ2l0KSB7DQogICAgICByZXR1cm4gLTE7IC8vIGIgaGFzIGxvbmdlciBudW1iZXIuDQogICAgfSBlbHNlIHsNCiAgICAgIC8vIE5laXRoZXIgaXMgZGlnaXQsIHNvIG51bWJlcnMgaGFkIHNhbWUgbnVtZXJpY2FsIHZhbHVlLg0KICAgICAgLy8gRmFsbCBiYWNrIG9uIG51bWJlciBvZiBsZWFkaW5nIHplcm9zDQogICAgICAvLyAocmVmbGVjdGVkIGJ5IGRpZmZlcmVuY2UgaW4gaW5kaWNlcykuDQogICAgICByZXR1cm4gKGFJbmRleCAtIGJJbmRleCkuc2lnbjsNCiAgICB9DQogIH0NCiAgLy8gQXQgZmlyc3QgZGlmZmVyaW5nIGRpZ2l0cy4NCiAgaW50IHJlc3VsdCA9IF9jb21wYXJlRGlnaXRDb3VudChhLCBiLCBhSW5kZXgsIGJJbmRleCk7DQogIGlmIChyZXN1bHQgIT0gMCkgcmV0dXJuIHJlc3VsdDsNCiAgcmV0dXJuIChhQ2hhciAtIGJDaGFyKS5zaWduOw0KfQ0KDQovLy8gQ2hlY2tzIHdoaWNoIG9mIFthXSBhbmQgW2JdIGhhcyB0aGUgbG9uZ2VzdCBzZXF1ZW5jZSBvZiBkaWdpdHMuDQovLy8NCi8vLyBTdGFydHMgY291bnRpbmcgZnJvbSBgaSArIDFgIGFuZCBgaiArIDFgIChhc3N1bWVzIHRoYXQgYGFbaV1gIGFuZCBgYltqXWAgYXJlDQovLy8gYm90aCBhbHJlYWR5IGtub3duIHRvIGJlIGRpZ2l0cykuDQppbnQgX2NvbXBhcmVEaWdpdENvdW50KFN0cmluZyBhLCBTdHJpbmcgYiwgaW50IGksIGludCBqKSB7DQogIHdoaWxlICgrK2kgPCBhLmxlbmd0aCkgew0KICAgIGJvb2wgYUlzRGlnaXQgPSBfaXNEaWdpdChhLmNvZGVVbml0QXQoaSkpOw0KICAgIGlmICgrK2ogPT0gYi5sZW5ndGgpIHJldHVybiBhSXNEaWdpdCA/IDEgOiAwOw0KICAgIGJvb2wgYklzRGlnaXQgPSBfaXNEaWdpdChiLmNvZGVVbml0QXQoaikpOw0KICAgIGlmIChhSXNEaWdpdCkgew0KICAgICAgaWYgKGJJc0RpZ2l0KSBjb250aW51ZTsNCiAgICAgIHJldHVybiAxOw0KICAgIH0gZWxzZSBpZiAoYklzRGlnaXQpIHsNCiAgICAgIHJldHVybiAtMTsNCiAgICB9IGVsc2Ugew0KICAgICAgcmV0dXJuIDA7DQogICAgfQ0KICB9DQogIGlmICgrK2ogPCBiLmxlbmd0aCAmJiBfaXNEaWdpdChiLmNvZGVVbml0QXQoaikpKSB7DQogICAgcmV0dXJuIC0xOw0KICB9DQogIHJldHVybiAwOw0KfQ0KDQpib29sIF9pc0RpZ2l0KGludCBjaGFyQ29kZSkgPT4gKGNoYXJDb2RlIF4gX3plcm8pIDw9IDk7DQoNCi8vLyBDaGVjayBpZiB0aGUgZGlnaXQgYXQgW2luZGV4XSBpcyBjb250aW51aW5nIGEgbm9uLXplcm8gbnVtYmVyLg0KLy8vDQovLy8gSWYgdGhlcmUgaXMgbm8gbm9uLXplcm8gZGlnaXRzIGJlZm9yZSwgdGhlbiBsZWFkaW5nIHplcm9zIGF0IFtpbmRleF0NCi8vLyBhcmUgYWxzbyBpZ25vcmVkIHdoZW4gY29tcGFyaW5nIG51bWVyaWNhbGx5LiBJZiB0aGVyZSBpcyBhIG5vbi16ZXJvIGRpZ2l0DQovLy8gYmVmb3JlLCB0aGVuIHplcm9zIGF0IFtpbmRleF0gYXJlIHNpZ25pZmljYW50Lg0KYm9vbCBfaXNOb25aZXJvTnVtYmVyU3VmZml4KFN0cmluZyBzdHJpbmcsIGludCBpbmRleCkgew0KICB3aGlsZSAoLS1pbmRleCA+PSAwKSB7DQogICAgaW50IGNoYXIgPSBzdHJpbmcuY29kZVVuaXRBdChpbmRleCk7DQogICAgaWYgKGNoYXIgIT0gX3plcm8pIHJldHVybiBfaXNEaWdpdChjaGFyKTsNCiAgfQ0KICByZXR1cm4gZmFsc2U7DQp9DQqBiwBPTz0CGRkfHx8fIQJNBUtQQQVGNSMFUUxLJTIrKCIiI1A3ThAxSxEHEwUQAwJOBUw5Kk8dTQwRLSY9SRhMKD8RBTwQPQMCTQVLOAVPUE8xBVFMSyUxPigiIiIjHx0dOSQHOSQHSj4FJx4DAk0FSzgFT1BPEQVRTEslMRooIiIiIx0dJTkkBzkkB0o8BSceAwJKBUJMFkdRLgUOTxoFSwVPKigiIiIbOAcFJw0DAjogBUtHFwVPUE8RBU84PigiIiIjHR05JAc5JAclQgc8BSceAwI6IAVLRxcFT1BPEAVPOBooIiIiIx0dOSQHOSQHJUIHPAUnHgMCRgVHSEAFTE4FSE4bIyMTFT5COBEHTDYQBU0gAwJCBUxKBUhQTSErTzolUA8iBUkZFxcZChFMJR8mIAoRSyUfJQUZPCUiBTYyEhsbEBAgJSMHICUjBxUXJykQCTYRHCoOQS8wJgcFITojIAMCRQVSJzwcMDMwFR8RHBIOEQcFNhAFDQMCOQJEBUpPNDkaKi8FEQMBJ3BhY2thZ2U6Y29sbGVjdGlvbi9zcmMvY29tcGFyYXRvcnMuZGFydDlzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL2VxdWFsaXR5LmRhcnS78y8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgImRhcnQ6Y29sbGVjdGlvbiI7CgppbXBvcnQgImNvbXBhcmF0b3JzLmRhcnQiOwoKY29uc3QgaW50IF9IQVNIX01BU0sgPSAweDdmZmZmZmZmOwoKLy8vIEEgZ2VuZXJpYyBlcXVhbGl0eSByZWxhdGlvbiBvbiBvYmplY3RzLgphYnN0cmFjdCBjbGFzcyBFcXVhbGl0eTxFPiB7CiAgY29uc3QgZmFjdG9yeSBFcXVhbGl0eSgpID0gRGVmYXVsdEVxdWFsaXR5PEU+OwoKICAvLy8gQ29tcGFyZSB0d28gZWxlbWVudHMgZm9yIGJlaW5nIGVxdWFsLgogIC8vLwogIC8vLyBUaGlzIHNob3VsZCBiZSBhIHByb3BlciBlcXVhbGl0eSByZWxhdGlvbi4KICBib29sIGVxdWFscyhFIGUxLCBFIGUyKTsKCiAgLy8vIEdldCBhIGhhc2hjb2RlIG9mIGFuIGVsZW1lbnQuCiAgLy8vCiAgLy8vIFRoZSBoYXNoY29kZSBzaG91bGQgYmUgY29tcGF0aWJsZSB3aXRoIFtlcXVhbHNdLCBzbyB0aGF0IGlmCiAgLy8vIGBlcXVhbHMoYSwgYilgIHRoZW4gYGhhc2goYSkgPT0gaGFzaChiKWAuCiAgaW50IGhhc2goRSBlKTsKCiAgLy8vIFRlc3Qgd2hldGhlciBhbiBvYmplY3QgaXMgYSB2YWxpZCBhcmd1bWVudCB0byBbZXF1YWxzXSBhbmQgW2hhc2hdLgogIC8vLwogIC8vLyBTb21lIGltcGxlbWVudGF0aW9ucyBtYXkgYmUgcmVzdHJpY3RlZCB0byBvbmx5IHdvcmsgb24gc3BlY2lmaWMgdHlwZXMKICAvLy8gb2Ygb2JqZWN0cy4KICBib29sIGlzVmFsaWRLZXkoT2JqZWN0IG8pOwp9Cgp0eXBlZGVmIEYgX0dldEtleTxFLCBGPihFIG9iamVjdCk7CgovLy8gRXF1YWxpdHkgb2Ygb2JqZWN0cyBiYXNlZCBvbiBkZXJpdmVkIHZhbHVlcy4KLy8vCi8vLyBGb3IgZXhhbXBsZSwgZ2l2ZW4gdGhlIGNsYXNzOgovLy8gYGBgZGFydAovLy8gYWJzdHJhY3QgY2xhc3MgRW1wbG95ZWUgewovLy8gICBpbnQgZ2V0IGVtcGxveW1lbnRJZDsKLy8vIH0KLy8vIGBgYAovLy8KLy8vIFRoZSBmb2xsb3dpbmcgW0VxdWFsaXR5XSBjb25zaWRlcnMgZW1wbG95ZWVzIHdpdGggdGhlIHNhbWUgSURzIHRvIGJlIGVxdWFsOgovLy8gYGBgZGFydAovLy8gbmV3IEVxdWFsaXR5QnkoKEVtcGxveWVlIGUpID0+IGUuZW1wbG95bWVudElkKTsKLy8vIGBgYAovLy8KLy8vIEl0J3MgYWxzbyBwb3NzaWJsZSB0byBwYXNzIGFuIGFkZGl0aW9uYWwgZXF1YWxpdHkgaW5zdGFuY2UgdGhhdCBzaG91bGQgYmUKLy8vIHVzZWQgdG8gY29tcGFyZSB0aGUgdmFsdWUgaXRzZWxmLgpjbGFzcyBFcXVhbGl0eUJ5PEUsIEY+IGltcGxlbWVudHMgRXF1YWxpdHk8RT4gewogIC8vIFJldHVybnMgYSBkZXJpdmVkIHZhbHVlIEYgZnJvbSBhbiBvYmplY3QgRS4KICBmaW5hbCBfR2V0S2V5PEUsIEY+IF9nZXRLZXk7CgogIC8vIERldGVybWluZXMgZXF1YWxpdHkgYmV0d2VlbiB0d28gdmFsdWVzIG9mIEYuCiAgZmluYWwgRXF1YWxpdHk8Rj4gX2lubmVyOwoKICBFcXVhbGl0eUJ5KEYgZ2V0S2V5KEUgb2JqZWN0KSwgW0VxdWFsaXR5PEY+IGlubmVyID0gY29uc3QgRGVmYXVsdEVxdWFsaXR5KCldKQogICAgICA6IF9nZXRLZXkgPSBnZXRLZXksCiAgICAgICAgX2lubmVyID0gaW5uZXI7CgogIGJvb2wgZXF1YWxzKEUgZTEsIEUgZTIpID0+IF9pbm5lci5lcXVhbHMoX2dldEtleShlMSksIF9nZXRLZXkoZTIpKTsKCiAgaW50IGhhc2goRSBlKSA9PiBfaW5uZXIuaGFzaChfZ2V0S2V5KGUpKTsKCiAgYm9vbCBpc1ZhbGlkS2V5KE9iamVjdCBvKSB7CiAgICBpZiAobyBpcyBFKSB7CiAgICAgIGZpbmFsIHZhbHVlID0gX2dldEtleShvKTsKICAgICAgcmV0dXJuIHZhbHVlIGlzIEYgJiYgX2lubmVyLmlzVmFsaWRLZXkodmFsdWUpOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLy8vIEVxdWFsaXR5IG9mIG9iamVjdHMgdGhhdCBjb21wYXJlcyBvbmx5IHRoZSBuYXR1cmFsIGVxdWFsaXR5IG9mIHRoZSBvYmplY3RzLgovLy8KLy8vIFRoaXMgZXF1YWxpdHkgdXNlcyB0aGUgb2JqZWN0cycgb3duIFtPYmplY3QuPT1dIGFuZCBbT2JqZWN0Lmhhc2hDb2RlXSBmb3IKLy8vIHRoZSBlcXVhbGl0eS4KLy8vCi8vLyBOb3RlIHRoYXQgW2VxdWFsc10gYW5kIFtoYXNoXSB0YWtlIGBPYmplY3RgcyByYXRoZXIgdGhhbiBgRWBzLiBUaGlzIGFsbG93cwovLy8gYEVgIHRvIGJlIGluZmVycmVkIGFzIGBOdWxsYCBpbiBjb25zdCBjb250ZXh0cyB3aGVyZSBgRWAgd291bGRuJ3QgYmUgYQovLy8gY29tcGlsZS10aW1lIGNvbnN0YW50LCB3aGlsZSBzdGlsbCBhbGxvd2luZyB0aGUgY2xhc3MgdG8gYmUgdXNlZCBhdCBydW50aW1lLgpjbGFzcyBEZWZhdWx0RXF1YWxpdHk8RT4gaW1wbGVtZW50cyBFcXVhbGl0eTxFPiB7CiAgY29uc3QgRGVmYXVsdEVxdWFsaXR5KCk7CiAgYm9vbCBlcXVhbHMoT2JqZWN0IGUxLCBPYmplY3QgZTIpID0+IGUxID09IGUyOwogIGludCBoYXNoKE9iamVjdCBlKSA9PiBlLmhhc2hDb2RlOwogIGJvb2wgaXNWYWxpZEtleShPYmplY3QgbykgPT4gdHJ1ZTsKfQoKLy8vIEVxdWFsaXR5IG9mIG9iamVjdHMgdGhhdCBjb21wYXJlcyBvbmx5IHRoZSBpZGVudGl0eSBvZiB0aGUgb2JqZWN0cy4KY2xhc3MgSWRlbnRpdHlFcXVhbGl0eTxFPiBpbXBsZW1lbnRzIEVxdWFsaXR5PEU+IHsKICBjb25zdCBJZGVudGl0eUVxdWFsaXR5KCk7CiAgYm9vbCBlcXVhbHMoRSBlMSwgRSBlMikgPT4gaWRlbnRpY2FsKGUxLCBlMik7CiAgaW50IGhhc2goRSBlKSA9PiBpZGVudGl0eUhhc2hDb2RlKGUpOwogIGJvb2wgaXNWYWxpZEtleShPYmplY3QgbykgPT4gdHJ1ZTsKfQoKLy8vIEVxdWFsaXR5IG9uIGl0ZXJhYmxlcy4KLy8vCi8vLyBUd28gaXRlcmFibGVzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgZWxlbWVudHMgaW4gdGhlIHNhbWUgb3JkZXIuCi8vLwovLy8gVGhlIFtlcXVhbHNdIGFuZCBbaGFzaF0gbWV0aG9kcyBhY2NlcHRzIGBudWxsYCB2YWx1ZXMsCi8vLyBldmVuIGlmIHRoZSBbaXNWYWxpZEtleV0gcmV0dXJucyBgZmFsc2VgIGZvciBgbnVsbGAuCi8vLyBUaGUgW2hhc2hdIG9mIGBudWxsYCBpcyBgbnVsbC5oYXNoQ29kZWAuCmNsYXNzIEl0ZXJhYmxlRXF1YWxpdHk8RT4gaW1wbGVtZW50cyBFcXVhbGl0eTxJdGVyYWJsZTxFPj4gewogIGZpbmFsIEVxdWFsaXR5PEU+IF9lbGVtZW50RXF1YWxpdHk7CiAgY29uc3QgSXRlcmFibGVFcXVhbGl0eSgKICAgICAgW0VxdWFsaXR5PEU+IGVsZW1lbnRFcXVhbGl0eSA9IGNvbnN0IERlZmF1bHRFcXVhbGl0eSgpXSkKICAgICAgOiBfZWxlbWVudEVxdWFsaXR5ID0gZWxlbWVudEVxdWFsaXR5OwoKICBib29sIGVxdWFscyhJdGVyYWJsZTxFPiBlbGVtZW50czEsIEl0ZXJhYmxlPEU+IGVsZW1lbnRzMikgewogICAgaWYgKGlkZW50aWNhbChlbGVtZW50czEsIGVsZW1lbnRzMikpIHJldHVybiB0cnVlOwogICAgaWYgKGVsZW1lbnRzMSA9PSBudWxsIHx8IGVsZW1lbnRzMiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICB2YXIgaXQxID0gZWxlbWVudHMxLml0ZXJhdG9yOwogICAgdmFyIGl0MiA9IGVsZW1lbnRzMi5pdGVyYXRvcjsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGJvb2wgaGFzTmV4dCA9IGl0MS5tb3ZlTmV4dCgpOwogICAgICBpZiAoaGFzTmV4dCAhPSBpdDIubW92ZU5leHQoKSkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoIWhhc05leHQpIHJldHVybiB0cnVlOwogICAgICBpZiAoIV9lbGVtZW50RXF1YWxpdHkuZXF1YWxzKGl0MS5jdXJyZW50LCBpdDIuY3VycmVudCkpIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIGludCBoYXNoKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSB7CiAgICBpZiAoZWxlbWVudHMgPT0gbnVsbCkgcmV0dXJuIG51bGwuaGFzaENvZGU7CiAgICAvLyBKZW5raW5zJ3Mgb25lLWF0LWEtdGltZSBoYXNoIGZ1bmN0aW9uLgogICAgaW50IGhhc2ggPSAwOwogICAgZm9yIChFIGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgaW50IGMgPSBfZWxlbWVudEVxdWFsaXR5Lmhhc2goZWxlbWVudCk7CiAgICAgIGhhc2ggPSAoaGFzaCArIGMpICYgX0hBU0hfTUFTSzsKICAgICAgaGFzaCA9IChoYXNoICsgKGhhc2ggPDwgMTApKSAmIF9IQVNIX01BU0s7CiAgICAgIGhhc2ggXj0gKGhhc2ggPj4gNik7CiAgICB9CiAgICBoYXNoID0gKGhhc2ggKyAoaGFzaCA8PCAzKSkgJiBfSEFTSF9NQVNLOwogICAgaGFzaCBePSAoaGFzaCA+PiAxMSk7CiAgICBoYXNoID0gKGhhc2ggKyAoaGFzaCA8PCAxNSkpICYgX0hBU0hfTUFTSzsKICAgIHJldHVybiBoYXNoOwogIH0KCiAgYm9vbCBpc1ZhbGlkS2V5KE9iamVjdCBvKSA9PiBvIGlzIEl0ZXJhYmxlPEU+Owp9CgovLy8gRXF1YWxpdHkgb24gbGlzdHMuCi8vLwovLy8gVHdvIGxpc3RzIGFyZSBlcXVhbCBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFuZCB0aGVpciBlbGVtZW50cwovLy8gYXQgZWFjaCBpbmRleCBhcmUgZXF1YWwuCi8vLwovLy8gVGhpcyBpcyBlZmZlY3RpdmVseSB0aGUgc2FtZSBhcyBbSXRlcmFibGVFcXVhbGl0eV0gZXhjZXB0IHRoYXQgaXQKLy8vIGFjY2Vzc2VzIGVsZW1lbnRzIGJ5IGluZGV4IGluc3RlYWQgb2YgdGhyb3VnaCBpdGVyYXRpb24uCi8vLwovLy8gVGhlIFtlcXVhbHNdIGFuZCBbaGFzaF0gbWV0aG9kcyBhY2NlcHRzIGBudWxsYCB2YWx1ZXMsCi8vLyBldmVuIGlmIHRoZSBbaXNWYWxpZEtleV0gcmV0dXJucyBgZmFsc2VgIGZvciBgbnVsbGAuCi8vLyBUaGUgW2hhc2hdIG9mIGBudWxsYCBpcyBgbnVsbC5oYXNoQ29kZWAuCmNsYXNzIExpc3RFcXVhbGl0eTxFPiBpbXBsZW1lbnRzIEVxdWFsaXR5PExpc3Q8RT4+IHsKICBmaW5hbCBFcXVhbGl0eTxFPiBfZWxlbWVudEVxdWFsaXR5OwogIGNvbnN0IExpc3RFcXVhbGl0eShbRXF1YWxpdHk8RT4gZWxlbWVudEVxdWFsaXR5ID0gY29uc3QgRGVmYXVsdEVxdWFsaXR5KCldKQogICAgICA6IF9lbGVtZW50RXF1YWxpdHkgPSBlbGVtZW50RXF1YWxpdHk7CgogIGJvb2wgZXF1YWxzKExpc3Q8RT4gbGlzdDEsIExpc3Q8RT4gbGlzdDIpIHsKICAgIGlmIChpZGVudGljYWwobGlzdDEsIGxpc3QyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAobGlzdDEgPT0gbnVsbCB8fCBsaXN0MiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBpbnQgbGVuZ3RoID0gbGlzdDEubGVuZ3RoOwogICAgaWYgKGxlbmd0aCAhPSBsaXN0Mi5sZW5ndGgpIHJldHVybiBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKCFfZWxlbWVudEVxdWFsaXR5LmVxdWFscyhsaXN0MVtpXSwgbGlzdDJbaV0pKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGludCBoYXNoKExpc3Q8RT4gbGlzdCkgewogICAgaWYgKGxpc3QgPT0gbnVsbCkgcmV0dXJuIG51bGwuaGFzaENvZGU7CiAgICAvLyBKZW5raW5zJ3Mgb25lLWF0LWEtdGltZSBoYXNoIGZ1bmN0aW9uLgogICAgLy8gVGhpcyBjb2RlIGlzIGFsbW9zdCBpZGVudGljYWwgdG8gdGhlIG9uZSBpbiBJdGVyYWJsZUVxdWFsaXR5LCBleGNlcHQKICAgIC8vIHRoYXQgaXQgdXNlcyBpbmRleGluZyBpbnN0ZWFkIG9mIGl0ZXJhdGluZyB0byBnZXQgdGhlIGVsZW1lbnRzLgogICAgaW50IGhhc2ggPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7CiAgICAgIGludCBjID0gX2VsZW1lbnRFcXVhbGl0eS5oYXNoKGxpc3RbaV0pOwogICAgICBoYXNoID0gKGhhc2ggKyBjKSAmIF9IQVNIX01BU0s7CiAgICAgIGhhc2ggPSAoaGFzaCArIChoYXNoIDw8IDEwKSkgJiBfSEFTSF9NQVNLOwogICAgICBoYXNoIF49IChoYXNoID4+IDYpOwogICAgfQogICAgaGFzaCA9IChoYXNoICsgKGhhc2ggPDwgMykpICYgX0hBU0hfTUFTSzsKICAgIGhhc2ggXj0gKGhhc2ggPj4gMTEpOwogICAgaGFzaCA9IChoYXNoICsgKGhhc2ggPDwgMTUpKSAmIF9IQVNIX01BU0s7CiAgICByZXR1cm4gaGFzaDsKICB9CgogIGJvb2wgaXNWYWxpZEtleShPYmplY3QgbykgPT4gbyBpcyBMaXN0PEU+Owp9CgphYnN0cmFjdCBjbGFzcyBfVW5vcmRlcmVkRXF1YWxpdHk8RSwgVCBleHRlbmRzIEl0ZXJhYmxlPEU+PgogICAgaW1wbGVtZW50cyBFcXVhbGl0eTxUPiB7CiAgZmluYWwgRXF1YWxpdHk8RT4gX2VsZW1lbnRFcXVhbGl0eTsKCiAgY29uc3QgX1Vub3JkZXJlZEVxdWFsaXR5KHRoaXMuX2VsZW1lbnRFcXVhbGl0eSk7CgogIGJvb2wgZXF1YWxzKFQgZWxlbWVudHMxLCBUIGVsZW1lbnRzMikgewogICAgaWYgKGlkZW50aWNhbChlbGVtZW50czEsIGVsZW1lbnRzMikpIHJldHVybiB0cnVlOwogICAgaWYgKGVsZW1lbnRzMSA9PSBudWxsIHx8IGVsZW1lbnRzMiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBIYXNoTWFwPEUsIGludD4gY291bnRzID0gbmV3IEhhc2hNYXAoCiAgICAgICAgZXF1YWxzOiBfZWxlbWVudEVxdWFsaXR5LmVxdWFscywKICAgICAgICBoYXNoQ29kZTogX2VsZW1lbnRFcXVhbGl0eS5oYXNoLAogICAgICAgIGlzVmFsaWRLZXk6IF9lbGVtZW50RXF1YWxpdHkuaXNWYWxpZEtleSk7CiAgICBpbnQgbGVuZ3RoID0gMDsKICAgIGZvciAodmFyIGUgaW4gZWxlbWVudHMxKSB7CiAgICAgIGludCBjb3VudCA9IGNvdW50c1tlXTsKICAgICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMDsKICAgICAgY291bnRzW2VdID0gY291bnQgKyAxOwogICAgICBsZW5ndGgrKzsKICAgIH0KICAgIGZvciAodmFyIGUgaW4gZWxlbWVudHMyKSB7CiAgICAgIGludCBjb3VudCA9IGNvdW50c1tlXTsKICAgICAgaWYgKGNvdW50ID09IG51bGwgfHwgY291bnQgPT0gMCkgcmV0dXJuIGZhbHNlOwogICAgICBjb3VudHNbZV0gPSBjb3VudCAtIDE7CiAgICAgIGxlbmd0aC0tOwogICAgfQogICAgcmV0dXJuIGxlbmd0aCA9PSAwOwogIH0KCiAgaW50IGhhc2goVCBlbGVtZW50cykgewogICAgaWYgKGVsZW1lbnRzID09IG51bGwpIHJldHVybiBudWxsLmhhc2hDb2RlOwogICAgaW50IGhhc2ggPSAwOwogICAgZm9yIChFIGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgaW50IGMgPSBfZWxlbWVudEVxdWFsaXR5Lmhhc2goZWxlbWVudCk7CiAgICAgIGhhc2ggPSAoaGFzaCArIGMpICYgX0hBU0hfTUFTSzsKICAgIH0KICAgIGhhc2ggPSAoaGFzaCArIChoYXNoIDw8IDMpKSAmIF9IQVNIX01BU0s7CiAgICBoYXNoIF49IChoYXNoID4+IDExKTsKICAgIGhhc2ggPSAoaGFzaCArIChoYXNoIDw8IDE1KSkgJiBfSEFTSF9NQVNLOwogICAgcmV0dXJuIGhhc2g7CiAgfQp9CgovLy8gRXF1YWxpdHkgb2YgdGhlIGVsZW1lbnRzIG9mIHR3byBpdGVyYWJsZXMgd2l0aG91dCBjb25zaWRlcmluZyBvcmRlci4KLy8vCi8vLyBUd28gaXRlcmFibGVzIGFyZSBjb25zaWRlcmVkIGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgZWxlbWVudHMsCi8vLyBhbmQgdGhlIGVsZW1lbnRzIG9mIG9uZSBzZXQgY2FuIGJlIHBhaXJlZCB3aXRoIHRoZSBlbGVtZW50cwovLy8gb2YgdGhlIG90aGVyIGl0ZXJhYmxlLCBzbyB0aGF0IGVhY2ggcGFpciBhcmUgZXF1YWwuCmNsYXNzIFVub3JkZXJlZEl0ZXJhYmxlRXF1YWxpdHk8RT4gZXh0ZW5kcyBfVW5vcmRlcmVkRXF1YWxpdHk8RSwgSXRlcmFibGU8RT4+IHsKICBjb25zdCBVbm9yZGVyZWRJdGVyYWJsZUVxdWFsaXR5KAogICAgICBbRXF1YWxpdHk8RT4gZWxlbWVudEVxdWFsaXR5ID0gY29uc3QgRGVmYXVsdEVxdWFsaXR5KCldKQogICAgICA6IHN1cGVyKGVsZW1lbnRFcXVhbGl0eSk7CgogIGJvb2wgaXNWYWxpZEtleShPYmplY3QgbykgPT4gbyBpcyBJdGVyYWJsZTxFPjsKfQoKLy8vIEVxdWFsaXR5IG9mIHNldHMuCi8vLwovLy8gVHdvIHNldHMgYXJlIGNvbnNpZGVyZWQgZXF1YWwgaWYgdGhleSBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBlbGVtZW50cywKLy8vIGFuZCB0aGUgZWxlbWVudHMgb2Ygb25lIHNldCBjYW4gYmUgcGFpcmVkIHdpdGggdGhlIGVsZW1lbnRzCi8vLyBvZiB0aGUgb3RoZXIgc2V0LCBzbyB0aGF0IGVhY2ggcGFpciBhcmUgZXF1YWwuCi8vLwovLy8gVGhpcyBlcXVhbGl0eSBiZWhhdmVzIHRoZSBzYW1lIGFzIFtVbm9yZGVyZWRJdGVyYWJsZUVxdWFsaXR5XSBleGNlcHQgdGhhdAovLy8gaXQgZXhwZWN0cyBzZXRzIGluc3RlYWQgb2YgaXRlcmFibGVzIGFzIGFyZ3VtZW50cy4KLy8vCi8vLyBUaGUgW2VxdWFsc10gYW5kIFtoYXNoXSBtZXRob2RzIGFjY2VwdHMgYG51bGxgIHZhbHVlcywKLy8vIGV2ZW4gaWYgdGhlIFtpc1ZhbGlkS2V5XSByZXR1cm5zIGBmYWxzZWAgZm9yIGBudWxsYC4KLy8vIFRoZSBbaGFzaF0gb2YgYG51bGxgIGlzIGBudWxsLmhhc2hDb2RlYC4KY2xhc3MgU2V0RXF1YWxpdHk8RT4gZXh0ZW5kcyBfVW5vcmRlcmVkRXF1YWxpdHk8RSwgU2V0PEU+PiB7CiAgY29uc3QgU2V0RXF1YWxpdHkoW0VxdWFsaXR5PEU+IGVsZW1lbnRFcXVhbGl0eSA9IGNvbnN0IERlZmF1bHRFcXVhbGl0eSgpXSkKICAgICAgOiBzdXBlcihlbGVtZW50RXF1YWxpdHkpOwoKICBib29sIGlzVmFsaWRLZXkoT2JqZWN0IG8pID0+IG8gaXMgU2V0PEU+Owp9CgovLy8gSW50ZXJuYWwgY2xhc3MgdXNlZCBieSBbTWFwRXF1YWxpdHldLgovLy8KLy8vIFRoZSBjbGFzcyByZXByZXNlbnRzIGEgbWFwIGVudHJ5IGFzIGEgc2luZ2xlIG9iamVjdCwKLy8vIHVzaW5nIGEgY29tYmluZWQgaGFzaENvZGUgYW5kIGVxdWFsaXR5IG9mIHRoZSBrZXkgYW5kIHZhbHVlLgpjbGFzcyBfTWFwRW50cnkgewogIGZpbmFsIE1hcEVxdWFsaXR5IGVxdWFsaXR5OwogIGZpbmFsIGtleTsKICBmaW5hbCB2YWx1ZTsKICBfTWFwRW50cnkodGhpcy5lcXVhbGl0eSwgdGhpcy5rZXksIHRoaXMudmFsdWUpOwoKICBpbnQgZ2V0IGhhc2hDb2RlID0+CiAgICAgICgzICogZXF1YWxpdHkuX2tleUVxdWFsaXR5Lmhhc2goa2V5KSArCiAgICAgICAgICA3ICogZXF1YWxpdHkuX3ZhbHVlRXF1YWxpdHkuaGFzaCh2YWx1ZSkpICYKICAgICAgX0hBU0hfTUFTSzsKCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIF9NYXBFbnRyeSAmJgogICAgICBlcXVhbGl0eS5fa2V5RXF1YWxpdHkuZXF1YWxzKGtleSwgb3RoZXIua2V5KSAmJgogICAgICBlcXVhbGl0eS5fdmFsdWVFcXVhbGl0eS5lcXVhbHModmFsdWUsIG90aGVyLnZhbHVlKTsKfQoKLy8vIEVxdWFsaXR5IG9uIG1hcHMuCi8vLwovLy8gVHdvIG1hcHMgYXJlIGVxdWFsIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgZW50cmllcywgYW5kIGlmIHRoZQovLy8gZW50cmllcyBvZiB0aGUgdHdvIG1hcHMgYXJlIHBhaXJ3aXNlIGVxdWFsIG9uIGJvdGgga2V5IGFuZCB2YWx1ZS4KLy8vCi8vLyBUaGUgW2VxdWFsc10gYW5kIFtoYXNoXSBtZXRob2RzIGFjY2VwdHMgYG51bGxgIHZhbHVlcywKLy8vIGV2ZW4gaWYgdGhlIFtpc1ZhbGlkS2V5XSByZXR1cm5zIGBmYWxzZWAgZm9yIGBudWxsYC4KLy8vIFRoZSBbaGFzaF0gb2YgYG51bGxgIGlzIGBudWxsLmhhc2hDb2RlYC4KY2xhc3MgTWFwRXF1YWxpdHk8SywgVj4gaW1wbGVtZW50cyBFcXVhbGl0eTxNYXA8SywgVj4+IHsKICBmaW5hbCBFcXVhbGl0eTxLPiBfa2V5RXF1YWxpdHk7CiAgZmluYWwgRXF1YWxpdHk8Vj4gX3ZhbHVlRXF1YWxpdHk7CiAgY29uc3QgTWFwRXF1YWxpdHkoCiAgICAgIHtFcXVhbGl0eTxLPiBrZXlzOiBjb25zdCBEZWZhdWx0RXF1YWxpdHkoKSwKICAgICAgRXF1YWxpdHk8Vj4gdmFsdWVzOiBjb25zdCBEZWZhdWx0RXF1YWxpdHkoKX0pCiAgICAgIDogX2tleUVxdWFsaXR5ID0ga2V5cywKICAgICAgICBfdmFsdWVFcXVhbGl0eSA9IHZhbHVlczsKCiAgYm9vbCBlcXVhbHMoTWFwPEssIFY+IG1hcDEsIE1hcDxLLCBWPiBtYXAyKSB7CiAgICBpZiAoaWRlbnRpY2FsKG1hcDEsIG1hcDIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChtYXAxID09IG51bGwgfHwgbWFwMiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICBpbnQgbGVuZ3RoID0gbWFwMS5sZW5ndGg7CiAgICBpZiAobGVuZ3RoICE9IG1hcDIubGVuZ3RoKSByZXR1cm4gZmFsc2U7CiAgICBNYXA8X01hcEVudHJ5LCBpbnQ+IGVxdWFsRWxlbWVudENvdW50cyA9IG5ldyBIYXNoTWFwKCk7CiAgICBmb3IgKEsga2V5IGluIG1hcDEua2V5cykgewogICAgICBfTWFwRW50cnkgZW50cnkgPSBuZXcgX01hcEVudHJ5KHRoaXMsIGtleSwgbWFwMVtrZXldKTsKICAgICAgaW50IGNvdW50ID0gZXF1YWxFbGVtZW50Q291bnRzW2VudHJ5XTsKICAgICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMDsKICAgICAgZXF1YWxFbGVtZW50Q291bnRzW2VudHJ5XSA9IGNvdW50ICsgMTsKICAgIH0KICAgIGZvciAoSyBrZXkgaW4gbWFwMi5rZXlzKSB7CiAgICAgIF9NYXBFbnRyeSBlbnRyeSA9IG5ldyBfTWFwRW50cnkodGhpcywga2V5LCBtYXAyW2tleV0pOwogICAgICBpbnQgY291bnQgPSBlcXVhbEVsZW1lbnRDb3VudHNbZW50cnldOwogICAgICBpZiAoY291bnQgPT0gbnVsbCB8fCBjb3VudCA9PSAwKSByZXR1cm4gZmFsc2U7CiAgICAgIGVxdWFsRWxlbWVudENvdW50c1tlbnRyeV0gPSBjb3VudCAtIDE7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGludCBoYXNoKE1hcDxLLCBWPiBtYXApIHsKICAgIGlmIChtYXAgPT0gbnVsbCkgcmV0dXJuIG51bGwuaGFzaENvZGU7CiAgICBpbnQgaGFzaCA9IDA7CiAgICBmb3IgKEsga2V5IGluIG1hcC5rZXlzKSB7CiAgICAgIGludCBrZXlIYXNoID0gX2tleUVxdWFsaXR5Lmhhc2goa2V5KTsKICAgICAgaW50IHZhbHVlSGFzaCA9IF92YWx1ZUVxdWFsaXR5Lmhhc2gobWFwW2tleV0pOwogICAgICBoYXNoID0gKGhhc2ggKyAzICoga2V5SGFzaCArIDcgKiB2YWx1ZUhhc2gpICYgX0hBU0hfTUFTSzsKICAgIH0KICAgIGhhc2ggPSAoaGFzaCArIChoYXNoIDw8IDMpKSAmIF9IQVNIX01BU0s7CiAgICBoYXNoIF49IChoYXNoID4+IDExKTsKICAgIGhhc2ggPSAoaGFzaCArIChoYXNoIDw8IDE1KSkgJiBfSEFTSF9NQVNLOwogICAgcmV0dXJuIGhhc2g7CiAgfQoKICBib29sIGlzVmFsaWRLZXkoT2JqZWN0IG8pID0+IG8gaXMgTWFwPEssIFY+Owp9CgovLy8gQ29tYmluZXMgc2V2ZXJhbCBlcXVhbGl0aWVzIGludG8gYSBzaW5nbGUgZXF1YWxpdHkuCi8vLwovLy8gVHJpZXMgZWFjaCBlcXVhbGl0eSBpbiBvcmRlciwgdXNpbmcgW0VxdWFsaXR5LmlzVmFsaWRLZXldLCBhbmQgcmV0dXJucwovLy8gdGhlIHJlc3VsdCBvZiB0aGUgZmlyc3QgZXF1YWxpdHkgdGhhdCBhcHBsaWVzIHRvIHRoZSBhcmd1bWVudCBvciBhcmd1bWVudHMuCi8vLwovLy8gRm9yIGBlcXVhbHNgLCB0aGUgZmlyc3QgZXF1YWxpdHkgdGhhdCBtYXRjaGVzIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB1c2VkLAovLy8gYW5kIGlmIHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgYGVxdWFsc2AgaXMgbm90IHZhbGlkIGZvciB0aGF0IGVxdWFsaXR5LAovLy8gaXQgcmV0dXJucyBmYWxzZS4KLy8vCi8vLyBCZWNhdXNlIHRoZSBlcXVhbGl0aWVzIGFyZSB0cmllZCBpbiBvcmRlciwgdGhleSBzaG91bGQgZ2VuZXJhbGx5IHdvcmsgb24KLy8vIGRpc2pvaW50IHR5cGVzLiBPdGhlcndpc2UgdGhlIG11bHRpLWVxdWFsaXR5IG1heSBnaXZlIGluY29uc2lzdGVudCByZXN1bHRzCi8vLyBmb3IgYGVxdWFscyhlMSwgZTIpYCBhbmQgYGVxdWFscyhlMiwgZTEpYC4gVGhpcyBjYW4gaGFwcGVuIGlmIG9uZSBlcXVhbGl0eQovLy8gY29uc2lkZXJzIG9ubHkgYGUxYCBhIHZhbGlkIGtleSwgYW5kIG5vdCBgZTJgLCBidXQgYW4gZXF1YWxpdHkgd2hpY2ggaXMKLy8vIGNoZWNrZWQgbGF0ZXIsIGFsbG93cyBib3RoLgpjbGFzcyBNdWx0aUVxdWFsaXR5PEU+IGltcGxlbWVudHMgRXF1YWxpdHk8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEVxdWFsaXR5PEU+PiBfZXF1YWxpdGllczsKCiAgY29uc3QgTXVsdGlFcXVhbGl0eShJdGVyYWJsZTxFcXVhbGl0eTxFPj4gZXF1YWxpdGllcykKICAgICAgOiBfZXF1YWxpdGllcyA9IGVxdWFsaXRpZXM7CgogIGJvb2wgZXF1YWxzKEUgZTEsIEUgZTIpIHsKICAgIGZvciAoRXF1YWxpdHk8RT4gZXEgaW4gX2VxdWFsaXRpZXMpIHsKICAgICAgaWYgKGVxLmlzVmFsaWRLZXkoZTEpKSByZXR1cm4gZXEuaXNWYWxpZEtleShlMikgJiYgZXEuZXF1YWxzKGUxLCBlMik7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpbnQgaGFzaChFIGUpIHsKICAgIGZvciAoRXF1YWxpdHk8RT4gZXEgaW4gX2VxdWFsaXRpZXMpIHsKICAgICAgaWYgKGVxLmlzVmFsaWRLZXkoZSkpIHJldHVybiBlcS5oYXNoKGUpOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKICBib29sIGlzVmFsaWRLZXkoT2JqZWN0IG8pIHsKICAgIGZvciAoRXF1YWxpdHk8RT4gZXEgaW4gX2VxdWFsaXRpZXMpIHsKICAgICAgaWYgKGVxLmlzVmFsaWRLZXkobykpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKLy8vIERlZXAgZXF1YWxpdHkgb24gY29sbGVjdGlvbnMuCi8vLwovLy8gUmVjb2duaXplcyBsaXN0cywgc2V0cywgaXRlcmFibGVzIGFuZCBtYXBzIGFuZCBjb21wYXJlcyB0aGVpciBlbGVtZW50cyB1c2luZwovLy8gZGVlcCBlcXVhbGl0eSBhcyB3ZWxsLgovLy8KLy8vIE5vbi1pdGVyYWJsZS9tYXAgb2JqZWN0cyBhcmUgY29tcGFyZWQgdXNpbmcgYSBjb25maWd1cmFibGUgYmFzZSBlcXVhbGl0eS4KLy8vCi8vLyBXb3JrcyBpbiBvbmUgb2YgdHdvIG1vZGVzOiBvcmRlcmVkIG9yIHVub3JkZXJlZC4KLy8vCi8vLyBJbiBvcmRlcmVkIG1vZGUsIGxpc3RzIGFuZCBpdGVyYWJsZXMgYXJlIHJlcXVpcmVkIHRvIGhhdmUgZXF1YWwgZWxlbWVudHMKLy8vIGluIHRoZSBzYW1lIG9yZGVyLiBJbiB1bm9yZGVyZWQgbW9kZSwgdGhlIG9yZGVyIG9mIGVsZW1lbnRzIGluIGl0ZXJhYmxlcwovLy8gYW5kIGxpc3RzIGFyZSBub3QgaW1wb3J0YW50LgovLy8KLy8vIEEgbGlzdCBpcyBvbmx5IGVxdWFsIHRvIGFub3RoZXIgbGlzdCwgbGlrZXdpc2UgZm9yIHNldHMgYW5kIG1hcHMuIEFsbCBvdGhlcgovLy8gaXRlcmFibGVzIGFyZSBjb21wYXJlZCBhcyBpdGVyYWJsZXMgb25seS4KY2xhc3MgRGVlcENvbGxlY3Rpb25FcXVhbGl0eSBpbXBsZW1lbnRzIEVxdWFsaXR5IHsKICBmaW5hbCBFcXVhbGl0eSBfYmFzZTsKICBmaW5hbCBib29sIF91bm9yZGVyZWQ7CiAgY29uc3QgRGVlcENvbGxlY3Rpb25FcXVhbGl0eShbRXF1YWxpdHkgYmFzZSA9IGNvbnN0IERlZmF1bHRFcXVhbGl0eSgpXSkKICAgICAgOiBfYmFzZSA9IGJhc2UsCiAgICAgICAgX3Vub3JkZXJlZCA9IGZhbHNlOwoKICAvLy8gQ3JlYXRlcyBhIGRlZXAgZXF1YWxpdHkgb24gY29sbGVjdGlvbnMgd2hlcmUgdGhlIG9yZGVyIG9mIGxpc3RzIGFuZAogIC8vLyBpdGVyYWJsZXMgYXJlIG5vdCBjb25zaWRlcmVkIGltcG9ydGFudC4gVGhhdCBpcywgbGlzdHMgYW5kIGl0ZXJhYmxlcyBhcmUKICAvLy8gdHJlYXRlZCBhcyB1bm9yZGVyZWQgaXRlcmFibGVzLgogIGNvbnN0IERlZXBDb2xsZWN0aW9uRXF1YWxpdHkudW5vcmRlcmVkKAogICAgICBbRXF1YWxpdHkgYmFzZSA9IGNvbnN0IERlZmF1bHRFcXVhbGl0eSgpXSkKICAgICAgOiBfYmFzZSA9IGJhc2UsCiAgICAgICAgX3Vub3JkZXJlZCA9IHRydWU7CgogIGJvb2wgZXF1YWxzKGUxLCBlMikgewogICAgaWYgKGUxIGlzIFNldCkgewogICAgICByZXR1cm4gZTIgaXMgU2V0ICYmIG5ldyBTZXRFcXVhbGl0eSh0aGlzKS5lcXVhbHMoZTEsIGUyKTsKICAgIH0KICAgIGlmIChlMSBpcyBNYXApIHsKICAgICAgcmV0dXJuIGUyIGlzIE1hcCAmJgogICAgICAgICAgbmV3IE1hcEVxdWFsaXR5KGtleXM6IHRoaXMsIHZhbHVlczogdGhpcykuZXF1YWxzKGUxLCBlMik7CiAgICB9CiAgICBpZiAoIV91bm9yZGVyZWQpIHsKICAgICAgaWYgKGUxIGlzIExpc3QpIHsKICAgICAgICByZXR1cm4gZTIgaXMgTGlzdCAmJiBuZXcgTGlzdEVxdWFsaXR5KHRoaXMpLmVxdWFscyhlMSwgZTIpOwogICAgICB9CiAgICAgIGlmIChlMSBpcyBJdGVyYWJsZSkgewogICAgICAgIHJldHVybiBlMiBpcyBJdGVyYWJsZSAmJiBuZXcgSXRlcmFibGVFcXVhbGl0eSh0aGlzKS5lcXVhbHMoZTEsIGUyKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChlMSBpcyBJdGVyYWJsZSkgewogICAgICBpZiAoZTEgaXMgTGlzdCAhPSBlMiBpcyBMaXN0KSByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiBlMiBpcyBJdGVyYWJsZSAmJgogICAgICAgICAgbmV3IFVub3JkZXJlZEl0ZXJhYmxlRXF1YWxpdHkodGhpcykuZXF1YWxzKGUxLCBlMik7CiAgICB9CiAgICByZXR1cm4gX2Jhc2UuZXF1YWxzKGUxLCBlMik7CiAgfQoKICBpbnQgaGFzaChPYmplY3QgbykgewogICAgaWYgKG8gaXMgU2V0KSByZXR1cm4gbmV3IFNldEVxdWFsaXR5KHRoaXMpLmhhc2gobyk7CiAgICBpZiAobyBpcyBNYXApIHJldHVybiBuZXcgTWFwRXF1YWxpdHkoa2V5czogdGhpcywgdmFsdWVzOiB0aGlzKS5oYXNoKG8pOwogICAgaWYgKCFfdW5vcmRlcmVkKSB7CiAgICAgIGlmIChvIGlzIExpc3QpIHJldHVybiBuZXcgTGlzdEVxdWFsaXR5KHRoaXMpLmhhc2gobyk7CiAgICAgIGlmIChvIGlzIEl0ZXJhYmxlKSByZXR1cm4gbmV3IEl0ZXJhYmxlRXF1YWxpdHkodGhpcykuaGFzaChvKTsKICAgIH0gZWxzZSBpZiAobyBpcyBJdGVyYWJsZSkgewogICAgICByZXR1cm4gbmV3IFVub3JkZXJlZEl0ZXJhYmxlRXF1YWxpdHkodGhpcykuaGFzaChvKTsKICAgIH0KICAgIHJldHVybiBfYmFzZS5oYXNoKG8pOwogIH0KCiAgYm9vbCBpc1ZhbGlkS2V5KE9iamVjdCBvKSA9PiBvIGlzIEl0ZXJhYmxlIHx8IG8gaXMgTWFwIHx8IF9iYXNlLmlzVmFsaWRLZXkobyk7Cn0KCi8vLyBTdHJpbmcgZXF1YWxpdHkgdGhhdCdzIGluc2Vuc2l0aXZlIHRvIGRpZmZlcmVuY2VzIGluIEFTQ0lJIGNhc2UuCi8vLwovLy8gTm9uLUFTQ0lJIGNoYXJhY3RlcnMgYXJlIGNvbXBhcmVkIGFzLWlzLCB3aXRoIG5vIGNvbnZlcnNpb24uCmNsYXNzIENhc2VJbnNlbnNpdGl2ZUVxdWFsaXR5IGltcGxlbWVudHMgRXF1YWxpdHk8U3RyaW5nPiB7CiAgY29uc3QgQ2FzZUluc2Vuc2l0aXZlRXF1YWxpdHkoKTsKCiAgYm9vbCBlcXVhbHMoU3RyaW5nIHN0cmluZzEsIFN0cmluZyBzdHJpbmcyKSA9PgogICAgICBlcXVhbHNJZ25vcmVBc2NpaUNhc2Uoc3RyaW5nMSwgc3RyaW5nMik7CgogIGludCBoYXNoKFN0cmluZyBzdHJpbmcpID0+IGhhc2hJZ25vcmVBc2NpaUNhc2Uoc3RyaW5nKTsKCiAgYm9vbCBpc1ZhbGlkS2V5KE9iamVjdCBvYmplY3QpID0+IG9iamVjdCBpcyBTdHJpbmc7Cn0KgdIATk48ARoBGwEjASwdMQEsBjEbASQGQjARAUkGTBIdAgEjATEEIgweHAYIBFAMNAgETiYwMR8BMhwBUBoYAUYBLAEeEiA1BhIEAgFQBE4SBE9LUTIbMSQlAgFIMxwwKCUCARsETgQ7OS09Jho/LAE+Nj4iIhMlMyFMBgQBIzAuEiIuJjEbBi4aLxEEATECARcESB0ERj0EOzktNSZOLAEuLjYfLidGBhEEARssLkxHEiwuJjEbBi4aLxEEAS0CATwdJgEzASo2PiopKTIUHx0kHRAGHx01HRAGGAQBGTASIi4mBi4aLxEEAgFJBFFAOFAjPyABMQIBFgRMQDMETjcEOzktPU0gASwCASoEOUESHg0PMgEWLTUSASQcNjoCARYES0YEOzktOSIkFTI0HSEBMCw0Hi08Hz0tJC0GHz0tNS0GEQQBHCsSHiw1QAYuGi8RBAEvAgE4BEtQBE5LFgRNT09MIDArATgiARwqTAYSBAESKi8GDgQBHiopBhIEAgEiBFEbBE4ENQRNTSEEUC4zGBlKFhwBSk8mKjEWGwEYFUAGFRpEBhcYRAgcTAghMh8+BiEEARc4TBc8RCA6BhoEAVECAUUEQTwjATEvAToBNgIBJHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvZXF1YWxpdHkuZGFydD1zZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL2VxdWFsaXR5X21hcC5kYXJ0hIMvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwoKaW1wb3J0ICdlcXVhbGl0eS5kYXJ0JzsKaW1wb3J0ICd3cmFwcGVycy5kYXJ0JzsKCi8vLyBBIFtNYXBdIHdob3NlIGtleSBlcXVhbGl0eSBpcyBkZXRlcm1pbmVkIGJ5IGFuIFtFcXVhbGl0eV0gb2JqZWN0LgpjbGFzcyBFcXVhbGl0eU1hcDxLLCBWPiBleHRlbmRzIERlbGVnYXRpbmdNYXA8SywgVj4gewogIC8vLyBDcmVhdGVzIGEgbWFwIHdpdGggZXF1YWxpdHkgYmFzZWQgb24gW2VxdWFsaXR5XS4KICBFcXVhbGl0eU1hcChFcXVhbGl0eTxLPiBlcXVhbGl0eSkKICAgICAgOiBzdXBlcihuZXcgTGlua2VkSGFzaE1hcCgKICAgICAgICAgICAgZXF1YWxzOiBlcXVhbGl0eS5lcXVhbHMsCiAgICAgICAgICAgIGhhc2hDb2RlOiBlcXVhbGl0eS5oYXNoLAogICAgICAgICAgICBpc1ZhbGlkS2V5OiBlcXVhbGl0eS5pc1ZhbGlkS2V5KSk7CgogIC8vLyBDcmVhdGVzIGEgbWFwIHdpdGggZXF1YWxpdHkgYmFzZWQgb24gW2VxdWFsaXR5XSB0aGF0IGNvbnRhaW5zIGFsbAogIC8vLyBrZXktdmFsdWUgcGFpcnMgb2YgW290aGVyXS4KICAvLy8KICAvLy8gSWYgW290aGVyXSBoYXMgbXVsdGlwbGUga2V5cyB0aGF0IGFyZSBlcXVpdmFsZW50IGFjY29yZGluZyB0byBbZXF1YWxpdHldLAogIC8vLyB0aGUgbGFzdCBvbmUgcmVhY2hlZCBkdXJpbmcgaXRlcmF0aW9uIHRha2VzIHByZWNlZGVuY2UuCiAgRXF1YWxpdHlNYXAuZnJvbShFcXVhbGl0eTxLPiBlcXVhbGl0eSwgTWFwPEssIFY+IG90aGVyKQogICAgICA6IHN1cGVyKG5ldyBMaW5rZWRIYXNoTWFwKAogICAgICAgICAgICBlcXVhbHM6IGVxdWFsaXR5LmVxdWFscywKICAgICAgICAgICAgaGFzaENvZGU6IGVxdWFsaXR5Lmhhc2gsCiAgICAgICAgICAgIGlzVmFsaWRLZXk6IGVxdWFsaXR5LmlzVmFsaWRLZXkpKSB7CiAgICBhZGRBbGwob3RoZXIpOwogIH0KfQohAE5OPAEaARgYAUY2NyQhJSUvAUgiBlA+OiElJTATBAIBKHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvZXF1YWxpdHlfbWFwLmRhcnQ9c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy9lcXVhbGl0eV9zZXQuZGFydIR7Ly8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCmltcG9ydCAnZXF1YWxpdHkuZGFydCc7CmltcG9ydCAnd3JhcHBlcnMuZGFydCc7CgovLy8gQSBbTWFwXSB3aG9zZSBrZXkgZXF1YWxpdHkgaXMgZGV0ZXJtaW5lZCBieSBhbiBbRXF1YWxpdHldIG9iamVjdC4KY2xhc3MgRXF1YWxpdHlTZXQ8RT4gZXh0ZW5kcyBEZWxlZ2F0aW5nU2V0PEU+IHsKICAvLy8gQ3JlYXRlcyBhIHNldCB3aXRoIGVxdWFsaXR5IGJhc2VkIG9uIFtlcXVhbGl0eV0uCiAgRXF1YWxpdHlTZXQoRXF1YWxpdHk8RT4gZXF1YWxpdHkpCiAgICAgIDogc3VwZXIobmV3IExpbmtlZEhhc2hTZXQoCiAgICAgICAgICAgIGVxdWFsczogZXF1YWxpdHkuZXF1YWxzLAogICAgICAgICAgICBoYXNoQ29kZTogZXF1YWxpdHkuaGFzaCwKICAgICAgICAgICAgaXNWYWxpZEtleTogZXF1YWxpdHkuaXNWYWxpZEtleSkpOwoKICAvLy8gQ3JlYXRlcyBhIHNldCB3aXRoIGVxdWFsaXR5IGJhc2VkIG9uIFtlcXVhbGl0eV0gdGhhdCBjb250YWlucyBhbGwKICAvLy8gZWxlbWVudHMgaW4gW290aGVyXS4KICAvLy8KICAvLy8gSWYgW290aGVyXSBoYXMgbXVsdGlwbGUgdmFsdWVzIHRoYXQgYXJlIGVxdWl2YWxlbnQgYWNjb3JkaW5nIHRvCiAgLy8vIFtlcXVhbGl0eV0sIHRoZSBmaXJzdCBvbmUgcmVhY2hlZCBkdXJpbmcgaXRlcmF0aW9uIHRha2VzIHByZWNlZGVuY2UuCiAgRXF1YWxpdHlTZXQuZnJvbShFcXVhbGl0eTxFPiBlcXVhbGl0eSwgSXRlcmFibGU8RT4gb3RoZXIpCiAgICAgIDogc3VwZXIobmV3IExpbmtlZEhhc2hTZXQoCiAgICAgICAgICAgIGVxdWFsczogZXF1YWxpdHkuZXF1YWxzLAogICAgICAgICAgICBoYXNoQ29kZTogZXF1YWxpdHkuaGFzaCwKICAgICAgICAgICAgaXNWYWxpZEtleTogZXF1YWxpdHkuaXNWYWxpZEtleSkpIHsKICAgIGFkZEFsbChvdGhlcik7CiAgfQp9CiEATk48ARoBGBgBRjA3JCElJS8BSBsGRks8ISUlMBMEAgEocGFja2FnZTpjb2xsZWN0aW9uL3NyYy9lcXVhbGl0eV9zZXQuZGFydDpzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL2Z1bmN0aW9ucy5kYXJ0m8cvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwppbXBvcnQgJ2RhcnQ6bWF0aCcgYXMgbWF0aDsKCmltcG9ydCAndXRpbHMuZGFydCc7CgovLyBUT0RPKG53ZWl6KTogV2hlbiBzZGsjMjY0ODggaXMgZml4ZWQsIHVzZSBvdmVybG9hZHMgdG8gZW5zdXJlIHRoYXQgaWYgW2tleV0KLy8gb3IgW3ZhbHVlXSBpc24ndCBwYXNzZWQsIGBLMmAvYFYyYCBkZWZhdWx0cyB0byBgSzFgL2BWMWAsIHJlc3BlY3RpdmVseS4KLy8vIENyZWF0ZXMgYSBuZXcgbWFwIGZyb20gW21hcF0gd2l0aCBuZXcga2V5cyBhbmQgdmFsdWVzLgovLy8KLy8vIFRoZSByZXR1cm4gdmFsdWVzIG9mIFtrZXldIGFyZSB1c2VkIGFzIHRoZSBrZXlzIGFuZCB0aGUgcmV0dXJuIHZhbHVlcyBvZgovLy8gW3ZhbHVlXSBhcmUgdXNlZCBhcyB0aGUgdmFsdWVzIGZvciB0aGUgbmV3IG1hcC4KTWFwPEsyLCBWMj4gbWFwTWFwPEsxLCBWMSwgSzIsIFYyPihNYXA8SzEsIFYxPiBtYXAsCiAgICB7SzIga2V5KEsxIGtleSwgVjEgdmFsdWUpLCBWMiB2YWx1ZShLMSBrZXksIFYxIHZhbHVlKX0pIHsKICBrZXkgPz89IChtYXBLZXksIF8pID0+IG1hcEtleSBhcyBLMjsKICB2YWx1ZSA/Pz0gKF8sIG1hcFZhbHVlKSA9PiBtYXBWYWx1ZSBhcyBWMjsKCiAgdmFyIHJlc3VsdCA9IDxLMiwgVjI+e307CiAgbWFwLmZvckVhY2goKG1hcEtleSwgbWFwVmFsdWUpIHsKICAgIHJlc3VsdFtrZXkobWFwS2V5LCBtYXBWYWx1ZSldID0gdmFsdWUobWFwS2V5LCBtYXBWYWx1ZSk7CiAgfSk7CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8vIFJldHVybnMgYSBuZXcgbWFwIHdpdGggYWxsIGtleS92YWx1ZSBwYWlycyBpbiBib3RoIFttYXAxXSBhbmQgW21hcDJdLgovLy8KLy8vIElmIHRoZXJlIGFyZSBrZXlzIHRoYXQgb2NjdXIgaW4gYm90aCBtYXBzLCB0aGUgW3ZhbHVlXSBmdW5jdGlvbiBpcyB1c2VkIHRvCi8vLyBzZWxlY3QgdGhlIHZhbHVlIHRoYXQgZ29lcyBpbnRvIHRoZSByZXN1bHRpbmcgbWFwIGJhc2VkIG9uIHRoZSB0d28gb3JpZ2luYWwKLy8vIHZhbHVlcy4gSWYgW3ZhbHVlXSBpcyBvbWl0dGVkLCB0aGUgdmFsdWUgZnJvbSBbbWFwMl0gaXMgdXNlZC4KTWFwPEssIFY+IG1lcmdlTWFwczxLLCBWPihNYXA8SywgVj4gbWFwMSwgTWFwPEssIFY+IG1hcDIsCiAgICB7ViB2YWx1ZShWIHZhbHVlMSwgViB2YWx1ZTIpfSkgewogIHZhciByZXN1bHQgPSBuZXcgTWFwPEssIFY+LmZyb20obWFwMSk7CiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiByZXN1bHQuLmFkZEFsbChtYXAyKTsKCiAgbWFwMi5mb3JFYWNoKChrZXksIG1hcFZhbHVlKSB7CiAgICByZXN1bHRba2V5XSA9CiAgICAgICAgcmVzdWx0LmNvbnRhaW5zS2V5KGtleSkgPyB2YWx1ZShyZXN1bHRba2V5XSwgbWFwVmFsdWUpIDogbWFwVmFsdWU7CiAgfSk7CiAgcmV0dXJuIHJlc3VsdDsKfQoKLy8vIEdyb3VwcyB0aGUgZWxlbWVudHMgaW4gW3ZhbHVlc10gYnkgdGhlIHZhbHVlIHJldHVybmVkIGJ5IFtrZXldLgovLy8KLy8vIFJldHVybnMgYSBtYXAgZnJvbSBrZXlzIGNvbXB1dGVkIGJ5IFtrZXldIHRvIGEgbGlzdCBvZiBhbGwgdmFsdWVzIGZvciB3aGljaAovLy8gW2tleV0gcmV0dXJucyB0aGF0IGtleS4gVGhlIHZhbHVlcyBhcHBlYXIgaW4gdGhlIGxpc3QgaW4gdGhlIHNhbWUgcmVsYXRpdmUKLy8vIG9yZGVyIGFzIGluIFt2YWx1ZXNdLgpNYXA8VCwgTGlzdDxTPj4gZ3JvdXBCeTxTLCBUPihJdGVyYWJsZTxTPiB2YWx1ZXMsIFQga2V5KFMgZWxlbWVudCkpIHsKICB2YXIgbWFwID0gPFQsIExpc3Q8Uz4+e307CiAgZm9yICh2YXIgZWxlbWVudCBpbiB2YWx1ZXMpIHsKICAgIHZhciBsaXN0ID0gbWFwLnB1dElmQWJzZW50KGtleShlbGVtZW50KSwgKCkgPT4gW10pOwogICAgbGlzdC5hZGQoZWxlbWVudCk7CiAgfQogIHJldHVybiBtYXA7Cn0KCi8vLyBSZXR1cm5zIHRoZSBlbGVtZW50IG9mIFt2YWx1ZXNdIGZvciB3aGljaCBbb3JkZXJCeV0gcmV0dXJucyB0aGUgbWluaW11bQovLy8gdmFsdWUuCi8vLwovLy8gVGhlIHZhbHVlcyByZXR1cm5lZCBieSBbb3JkZXJCeV0gYXJlIGNvbXBhcmVkIHVzaW5nIHRoZSBbY29tcGFyZV0gZnVuY3Rpb24uCi8vLyBJZiBbY29tcGFyZV0gaXMgb21pdHRlZCwgdmFsdWVzIG11c3QgaW1wbGVtZW50IFtDb21wYXJhYmxlPFQ+XSBhbmQgdGhleSBhcmUKLy8vIGNvbXBhcmVkIHVzaW5nIHRoZWlyIFtDb21wYXJhYmxlLmNvbXBhcmVUb10uClMgbWluQnk8UywgVD4oSXRlcmFibGU8Uz4gdmFsdWVzLCBUIG9yZGVyQnkoUyBlbGVtZW50KSwKICAgIHtpbnQgY29tcGFyZShUIHZhbHVlMSwgVCB2YWx1ZTIpfSkgewogIGNvbXBhcmUgPz89IGRlZmF1bHRDb21wYXJlPFQ+KCk7CgogIFMgbWluVmFsdWU7CiAgVCBtaW5PcmRlckJ5OwogIGZvciAodmFyIGVsZW1lbnQgaW4gdmFsdWVzKSB7CiAgICB2YXIgZWxlbWVudE9yZGVyQnkgPSBvcmRlckJ5KGVsZW1lbnQpOwogICAgaWYgKG1pbk9yZGVyQnkgPT0gbnVsbCB8fCBjb21wYXJlKGVsZW1lbnRPcmRlckJ5LCBtaW5PcmRlckJ5KSA8IDApIHsKICAgICAgbWluVmFsdWUgPSBlbGVtZW50OwogICAgICBtaW5PcmRlckJ5ID0gZWxlbWVudE9yZGVyQnk7CiAgICB9CiAgfQogIHJldHVybiBtaW5WYWx1ZTsKfQoKLy8vIFJldHVybnMgdGhlIGVsZW1lbnQgb2YgW3ZhbHVlc10gZm9yIHdoaWNoIFtvcmRlckJ5XSByZXR1cm5zIHRoZSBtYXhpbXVtCi8vLyB2YWx1ZS4KLy8vCi8vLyBUaGUgdmFsdWVzIHJldHVybmVkIGJ5IFtvcmRlckJ5XSBhcmUgY29tcGFyZWQgdXNpbmcgdGhlIFtjb21wYXJlXSBmdW5jdGlvbi4KLy8vIElmIFtjb21wYXJlXSBpcyBvbWl0dGVkLCB2YWx1ZXMgbXVzdCBpbXBsZW1lbnQgW0NvbXBhcmFibGU8VD5dIGFuZCB0aGV5IGFyZQovLy8gY29tcGFyZWQgdXNpbmcgdGhlaXIgW0NvbXBhcmFibGUuY29tcGFyZVRvXS4KUyBtYXhCeTxTLCBUPihJdGVyYWJsZTxTPiB2YWx1ZXMsIFQgb3JkZXJCeShTIGVsZW1lbnQpLAogICAge2ludCBjb21wYXJlKFQgdmFsdWUxLCBUIHZhbHVlMil9KSB7CiAgY29tcGFyZSA/Pz0gZGVmYXVsdENvbXBhcmU8VD4oKTsKCiAgUyBtYXhWYWx1ZTsKICBUIG1heE9yZGVyQnk7CiAgZm9yICh2YXIgZWxlbWVudCBpbiB2YWx1ZXMpIHsKICAgIHZhciBlbGVtZW50T3JkZXJCeSA9IG9yZGVyQnkoZWxlbWVudCk7CiAgICBpZiAobWF4T3JkZXJCeSA9PSBudWxsIHx8IGNvbXBhcmUoZWxlbWVudE9yZGVyQnksIG1heE9yZGVyQnkpID4gMCkgewogICAgICBtYXhWYWx1ZSA9IGVsZW1lbnQ7CiAgICAgIG1heE9yZGVyQnkgPSBlbGVtZW50T3JkZXJCeTsKICAgIH0KICB9CiAgcmV0dXJuIG1heFZhbHVlOwp9CgovLy8gUmV0dXJucyB0aGUgW3RyYW5zaXRpdmUgY2xvc3VyZV1bXSBvZiBbZ3JhcGhdLgovLy8KLy8vIFt0cmFuc2l0aXZlIGNsb3N1cmVdOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9UcmFuc2l0aXZlX2Nsb3N1cmUKLy8vCi8vLyBJbnRlcnByZXRzIFtncmFwaF0gYXMgYSBkaXJlY3RlZCBncmFwaCB3aXRoIGEgdmVydGV4IGZvciBlYWNoIGtleSBhbmQgZWRnZXMKLy8vIGZyb20gZWFjaCBrZXkgdG8gdGhlIHZhbHVlcyB0aGF0IHRoZSBrZXkgbWFwcyB0by4KLy8vCi8vLyBBc3N1bWVzIHRoYXQgZXZlcnkgdmVydGV4IGluIHRoZSBncmFwaCBoYXMgYSBrZXkgdG8gcmVwcmVzZW50IGl0LCBldmVuIGlmCi8vLyB0aGF0IHZlcnRleCBoYXMgbm8gb3V0Z29pbmcgZWRnZXMuIFRoaXMgaXNuJ3QgY2hlY2tlZCwgYnV0IGlmIGl0J3Mgbm90Ci8vLyBzYXRpc2ZpZWQsIHRoZSBmdW5jdGlvbiBtYXkgY3Jhc2ggb3IgcHJvdmlkZSB1bmV4cGVjdGVkIG91dHB1dC4gRm9yIGV4YW1wbGUsCi8vLyBgeyJhIjogWyJiIl19YCBpcyBub3QgdmFsaWQsIGJ1dCBgeyJhIjogWyJiIl0sICJiIjogW119YCBpcy4KTWFwPFQsIFNldDxUPj4gdHJhbnNpdGl2ZUNsb3N1cmU8VD4oTWFwPFQsIEl0ZXJhYmxlPFQ+PiBncmFwaCkgewogIC8vIFRoaXMgdXNlcyBbV2Fyc2hhbGwncyBhbGdvcml0aG1dW10sIG1vZGlmaWVkIG5vdCB0byBhZGQgYSB2ZXJ0ZXggZnJvbSBlYWNoCiAgLy8gbm9kZSB0byBpdHNlbGYuCiAgLy8KICAvLyBbV2Fyc2hhbGwncyBhbGdvcml0aG1dOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9GbG95ZCVFMiU4MCU5M1dhcnNoYWxsX2FsZ29yaXRobSNBcHBsaWNhdGlvbnNfYW5kX2dlbmVyYWxpemF0aW9ucy4KICB2YXIgcmVzdWx0ID0gPFQsIFNldDxUPj57fTsKICBncmFwaC5mb3JFYWNoKCh2ZXJ0ZXgsIGVkZ2VzKSB7CiAgICByZXN1bHRbdmVydGV4XSA9IG5ldyBTZXQ8VD4uZnJvbShlZGdlcyk7CiAgfSk7CgogIC8vIExpc3RzIGFyZSBmYXN0ZXIgdG8gaXRlcmF0ZSB0aGFuIG1hcHMsIHNvIHdlIGNyZWF0ZSBhIGxpc3Qgc2luY2Ugd2UncmUKICAvLyBpdGVyYXRpbmcgcmVwZWF0ZWRseS4KICB2YXIga2V5cyA9IGdyYXBoLmtleXMudG9MaXN0KCk7CiAgZm9yICh2YXIgdmVydGV4MSBpbiBrZXlzKSB7CiAgICBmb3IgKHZhciB2ZXJ0ZXgyIGluIGtleXMpIHsKICAgICAgZm9yICh2YXIgdmVydGV4MyBpbiBrZXlzKSB7CiAgICAgICAgaWYgKHJlc3VsdFt2ZXJ0ZXgyXS5jb250YWlucyh2ZXJ0ZXgxKSAmJgogICAgICAgICAgICByZXN1bHRbdmVydGV4MV0uY29udGFpbnModmVydGV4MykpIHsKICAgICAgICAgIHJlc3VsdFt2ZXJ0ZXgyXS5hZGQodmVydGV4Myk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICByZXR1cm4gcmVzdWx0Owp9CgovLy8gUmV0dXJucyB0aGUgW3N0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzXVtdIG9mIFtncmFwaF0sIGluIHRvcG9sb2dpY2FsCi8vLyBvcmRlci4KLy8vCi8vLyBbc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudHNdOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TdHJvbmdseV9jb25uZWN0ZWRfY29tcG9uZW50Ci8vLwovLy8gSW50ZXJwcmV0cyBbZ3JhcGhdIGFzIGEgZGlyZWN0ZWQgZ3JhcGggd2l0aCBhIHZlcnRleCBmb3IgZWFjaCBrZXkgYW5kIGVkZ2VzCi8vLyBmcm9tIGVhY2gga2V5IHRvIHRoZSB2YWx1ZXMgdGhhdCB0aGUga2V5IG1hcHMgdG8uCi8vLwovLy8gQXNzdW1lcyB0aGF0IGV2ZXJ5IHZlcnRleCBpbiB0aGUgZ3JhcGggaGFzIGEga2V5IHRvIHJlcHJlc2VudCBpdCwgZXZlbiBpZgovLy8gdGhhdCB2ZXJ0ZXggaGFzIG5vIG91dGdvaW5nIGVkZ2VzLiBUaGlzIGlzbid0IGNoZWNrZWQsIGJ1dCBpZiBpdCdzIG5vdAovLy8gc2F0aXNmaWVkLCB0aGUgZnVuY3Rpb24gbWF5IGNyYXNoIG9yIHByb3ZpZGUgdW5leHBlY3RlZCBvdXRwdXQuIEZvciBleGFtcGxlLAovLy8gYHsiYSI6IFsiYiJdfWAgaXMgbm90IHZhbGlkLCBidXQgYHsiYSI6IFsiYiJdLCAiYiI6IFtdfWAgaXMuCkxpc3Q8U2V0PFQ+PiBzdHJvbmdseUNvbm5lY3RlZENvbXBvbmVudHM8VD4oTWFwPFQsIEl0ZXJhYmxlPFQ+PiBncmFwaCkgewogIC8vIFRoaXMgdXNlcyBbVGFyamFuJ3MgYWxnb3JpdGhtXVtdLgogIC8vCiAgLy8gW1RhcmphbidzIGFsZ29yaXRobV06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RhcmphbiUyN3Nfc3Ryb25nbHlfY29ubmVjdGVkX2NvbXBvbmVudHNfYWxnb3JpdGhtCiAgdmFyIGluZGV4ID0gMDsKICB2YXIgc3RhY2sgPSA8VD5bXTsKICB2YXIgcmVzdWx0ID0gPFNldDxUPj5bXTsKCiAgLy8gVGhlIG9yZGVyIG9mIHRoZXNlIGRvZXNuJ3QgbWF0dGVyLCBzbyB3ZSB1c2UgdW4tbGlua2VkIGltcGxlbWVudGF0aW9ucyB0bwogIC8vIGF2b2lkIHVubmVjZXNzYXJ5IG92ZXJoZWFkLgogIHZhciBpbmRpY2VzID0gbmV3IEhhc2hNYXA8VCwgaW50PigpOwogIHZhciBsb3dMaW5rcyA9IG5ldyBIYXNoTWFwPFQsIGludD4oKTsKICB2YXIgb25TdGFjayA9IG5ldyBIYXNoU2V0PFQ+KCk7CgogIHN0cm9uZ0Nvbm5lY3QoVCB2ZXJ0ZXgpIHsKICAgIGluZGljZXNbdmVydGV4XSA9IGluZGV4OwogICAgbG93TGlua3NbdmVydGV4XSA9IGluZGV4OwogICAgaW5kZXgrKzsKCiAgICBzdGFjay5hZGQodmVydGV4KTsKICAgIG9uU3RhY2suYWRkKHZlcnRleCk7CgogICAgZm9yICh2YXIgc3VjY2Vzc29yIGluIGdyYXBoW3ZlcnRleF0pIHsKICAgICAgaWYgKCFpbmRpY2VzLmNvbnRhaW5zS2V5KHN1Y2Nlc3NvcikpIHsKICAgICAgICBzdHJvbmdDb25uZWN0KHN1Y2Nlc3Nvcik7CiAgICAgICAgbG93TGlua3NbdmVydGV4XSA9IG1hdGgubWluKGxvd0xpbmtzW3ZlcnRleF0sIGxvd0xpbmtzW3N1Y2Nlc3Nvcl0pOwogICAgICB9IGVsc2UgaWYgKG9uU3RhY2suY29udGFpbnMoc3VjY2Vzc29yKSkgewogICAgICAgIGxvd0xpbmtzW3ZlcnRleF0gPSBtYXRoLm1pbihsb3dMaW5rc1t2ZXJ0ZXhdLCBsb3dMaW5rc1tzdWNjZXNzb3JdKTsKICAgICAgfQogICAgfQoKICAgIGlmIChsb3dMaW5rc1t2ZXJ0ZXhdID09IGluZGljZXNbdmVydGV4XSkgewogICAgICB2YXIgY29tcG9uZW50ID0gbmV3IFNldDxUPigpOwogICAgICBUIG5laWdoYm9yOwogICAgICBkbyB7CiAgICAgICAgbmVpZ2hib3IgPSBzdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgICAgb25TdGFjay5yZW1vdmUobmVpZ2hib3IpOwogICAgICAgIGNvbXBvbmVudC5hZGQobmVpZ2hib3IpOwogICAgICB9IHdoaWxlIChuZWlnaGJvciAhPSB2ZXJ0ZXgpOwogICAgICByZXN1bHQuYWRkKGNvbXBvbmVudCk7CiAgICB9CiAgfQoKICBmb3IgKHZhciB2ZXJ0ZXggaW4gZ3JhcGgua2V5cykgewogICAgaWYgKCFpbmRpY2VzLmNvbnRhaW5zS2V5KHZlcnRleCkpIHN0cm9uZ0Nvbm5lY3QodmVydGV4KTsKICB9CgogIC8vIFRhcmphbidzIGFsZ29yaXRobSBwcm9kdWNlcyBhIHJldmVyc2UtdG9wb2xvZ2ljYWwgc29ydCwgc28gd2UgcmV2ZXJzZSBpdCB0bwogIC8vIGdldCBhIG5vcm1hbCB0b3BvbG9naWNhbCBzb3J0LgogIHJldHVybiByZXN1bHQucmV2ZXJzZWQudG9MaXN0KCk7Cn0KgM0ATk48ARocARUBT0s7BE00ND4nLQEbIz0GEQIBSgRPUEI6JSkyASESSwYRAgFEBFBPGkYcIDgXBA4CAUwLBFBQMTgpIwEOECArSRojBgQTAgFMCwRQUDE4KSMBDhAgK0kaIwYEEwIBMwRLBFA2BE5LUUFBUBUFfh4iLQYBTBsiHiAiMTEoCggGBAERAgFNCwRgBFA2BE5LUUFJJwVsERUbAU8hJygiARwdHg0BFxkBKy0iTDBMCAYBLyQSCyciISQdBgQBIz0EAVEkIwIBJXBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvZnVuY3Rpb25zLmRhcnQ9c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy9pdGVyYWJsZV96aXAuZGFydIceLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIjsKCi8vLyBJdGVyYWJsZSB0aGF0IGl0ZXJhdGVzIG92ZXIgbGlzdHMgb2YgdmFsdWVzIGZyb20gb3RoZXIgaXRlcmFibGVzLgovLy8KLy8vIFdoZW4gW2l0ZXJhdG9yXSBpcyByZWFkLCBhbiBbSXRlcmF0b3JdIGlzIGNyZWF0ZWQgZm9yIGVhY2ggW0l0ZXJhYmxlXSBpbgovLy8gdGhlIFtJdGVyYWJsZV0gcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3Rvci4KLy8vCi8vLyBBcyBsb25nIGFzIGFsbCB0aGVzZSBpdGVyYXRvcnMgaGF2ZSBhIG5leHQgdmFsdWUsIHRob3NlIG5leHQgdmFsdWVzIGFyZQovLy8gY29tYmluZWQgaW50byBhIHNpbmdsZSBsaXN0LCB3aGljaCBiZWNvbWVzIHRoZSBuZXh0IHZhbHVlIG9mIHRoaXMKLy8vIFtJdGVyYWJsZV0ncyBbSXRlcmF0b3JdLiBBcyBzb29uIGFzIGFueSBvZiB0aGUgaXRlcmF0b3JzIHJ1biBvdXQsCi8vLyB0aGUgemlwcGVkIGl0ZXJhdG9yIGFsc28gc3RvcHMuCmNsYXNzIEl0ZXJhYmxlWmlwPFQ+IGV4dGVuZHMgSXRlcmFibGVCYXNlPExpc3Q8VD4+IHsKICBmaW5hbCBJdGVyYWJsZTxJdGVyYWJsZTxUPj4gX2l0ZXJhYmxlczsKCiAgSXRlcmFibGVaaXAoSXRlcmFibGU8SXRlcmFibGU8VD4+IGl0ZXJhYmxlcykgOiB0aGlzLl9pdGVyYWJsZXMgPSBpdGVyYWJsZXM7CgogIC8vLyBSZXR1cm5zIGFuIGl0ZXJhdG9yIHRoYXQgY29tYmluZXMgdmFsdWVzIG9mIHRoZSBpdGVyYWJsZXMnIGl0ZXJhdG9ycwogIC8vLyBhcyBsb25nIGFzIHRoZXkgYWxsIGhhdmUgdmFsdWVzLgogIEl0ZXJhdG9yPExpc3Q8VD4+IGdldCBpdGVyYXRvciB7CiAgICB2YXIgaXRlcmF0b3JzID0gX2l0ZXJhYmxlcy5tYXAoKHgpID0+IHguaXRlcmF0b3IpLnRvTGlzdChncm93YWJsZTogZmFsc2UpOwogICAgLy8gVE9ETyhscm4pOiBSZXR1cm4gYW4gZW1wdHkgaXRlcmF0b3IgZGlyZWN0bHkgaWYgaXRlcmF0b3JzIGlzIGVtcHR5PwogICAgcmV0dXJuIG5ldyBfSXRlcmF0b3JaaXA8VD4oaXRlcmF0b3JzKTsKICB9Cn0KCmNsYXNzIF9JdGVyYXRvclppcDxUPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPExpc3Q8VD4+IHsKICBmaW5hbCBMaXN0PEl0ZXJhdG9yPFQ+PiBfaXRlcmF0b3JzOwogIExpc3Q8VD4gX2N1cnJlbnQ7CgogIF9JdGVyYXRvclppcChMaXN0PEl0ZXJhdG9yPFQ+PiBpdGVyYXRvcnMpIDogX2l0ZXJhdG9ycyA9IGl0ZXJhdG9yczsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfaXRlcmF0b3JzLmlzRW1wdHkpIHJldHVybiBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2l0ZXJhdG9ycy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoIV9pdGVyYXRvcnNbaV0ubW92ZU5leHQoKSkgewogICAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIF9jdXJyZW50ID0gbmV3IExpc3QoX2l0ZXJhdG9ycy5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfaXRlcmF0b3JzLmxlbmd0aDsgaSsrKSB7CiAgICAgIF9jdXJyZW50W2ldID0gX2l0ZXJhdG9yc1tpXS5jdXJyZW50OwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBMaXN0PFQ+IGdldCBjdXJyZW50ID0+IF9jdXJyZW50Owp9CjYATk48ARoBRgRNLgRMRkYkNSoBTgFLJyNPSysEAgE1JhQBRgEUKjInGRYIBiwyKwYRBAEjAgEocGFja2FnZTpjb2xsZWN0aW9uL3NyYy9pdGVyYWJsZV96aXAuZGFydD9zZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL3ByaW9yaXR5X3F1ZXVlLmRhcnSrpy8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgImRhcnQ6Y29sbGVjdGlvbiI7CgppbXBvcnQgInV0aWxzLmRhcnQiOwoKLy8vIEEgcHJpb3JpdHkgcXVldWUgaXMgYSBwcmlvcml0eSBiYXNlZCB3b3JrLWxpc3Qgb2YgZWxlbWVudHMuCi8vLwovLy8gVGhlIHF1ZXVlIGFsbG93cyBhZGRpbmcgZWxlbWVudHMsIGFuZCByZW1vdmluZyB0aGVtIGFnYWluIGluIHByaW9yaXR5IG9yZGVyLgphYnN0cmFjdCBjbGFzcyBQcmlvcml0eVF1ZXVlPEU+IHsKICAvLy8gQ3JlYXRlcyBhbiBlbXB0eSBbUHJpb3JpdHlRdWV1ZV0uCiAgLy8vCiAgLy8vIFRoZSBjcmVhdGVkIFtQcmlvcml0eVF1ZXVlXSBpcyBhIHBsYWluIFtIZWFwUHJpb3JpdHlRdWV1ZV0uCiAgLy8vCiAgLy8vIFRoZSBbY29tcGFyaXNvbl0gaXMgYSBbQ29tcGFyYXRvcl0gdXNlZCB0byBjb21wYXJlIHRoZSBwcmlvcml0eSBvZgogIC8vLyBlbGVtZW50cy4gQW4gZWxlbWVudCB0aGF0IGNvbXBhcmVzIGFzIGxlc3MgdGhhbiBhbm90aGVyIGVsZW1lbnQgaGFzCiAgLy8vIGEgaGlnaGVyIHByaW9yaXR5LgogIC8vLwogIC8vLyBJZiBbY29tcGFyaXNvbl0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gW0NvbXBhcmFibGUuY29tcGFyZV0uIElmIHRoaXMKICAvLy8gaXMgdGhlIGNhc2UsIGBFYCBtdXN0IGltcGxlbWVudCBbQ29tcGFyYWJsZV0sIGFuZCB0aGlzIGlzIGNoZWNrZWQgYXQKICAvLy8gcnVudGltZSBmb3IgZXZlcnkgY29tcGFyaXNvbi4KICBmYWN0b3J5IFByaW9yaXR5UXVldWUoW2ludCBjb21wYXJpc29uKEUgZTEsIEUgZTIpXSkgPSBIZWFwUHJpb3JpdHlRdWV1ZTxFPjsKCiAgLy8vIE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcXVldWUuCiAgaW50IGdldCBsZW5ndGg7CgogIC8vLyBXaGV0aGVyIHRoZSBxdWV1ZSBpcyBlbXB0eS4KICBib29sIGdldCBpc0VtcHR5OwoKICAvLy8gV2hldGhlciB0aGUgcXVldWUgaGFzIGFueSBlbGVtZW50cy4KICBib29sIGdldCBpc05vdEVtcHR5OwoKICAvLy8gQ2hlY2tzIGlmIFtvYmplY3RdIGlzIGluIHRoZSBxdWV1ZS4KICAvLy8KICAvLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBlbGVtZW50IGlzIGZvdW5kLgogIGJvb2wgY29udGFpbnMoRSBvYmplY3QpOwoKICAvLy8gQWRkcyBlbGVtZW50IHRvIHRoZSBxdWV1ZS4KICAvLy8KICAvLy8gVGhlIGVsZW1lbnQgd2lsbCBiZWNvbWUgdGhlIG5leHQgdG8gYmUgcmVtb3ZlZCBieSBbcmVtb3ZlRmlyc3RdCiAgLy8vIHdoZW4gYWxsIGVsZW1lbnRzIHdpdGggaGlnaGVyIHByaW9yaXR5IGhhdmUgYmVlbiByZW1vdmVkLgogIHZvaWQgYWRkKEUgZWxlbWVudCk7CgogIC8vLyBBZGRzIGFsbCBbZWxlbWVudHNdIHRvIHRoZSBxdWV1ZS4KICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cyk7CgogIC8vLyBSZXR1cm5zIHRoZSBuZXh0IGVsZW1lbnQgdGhhdCB3aWxsIGJlIHJldHVybmVkIGJ5IFtyZW1vdmVGaXJzdF0uCiAgLy8vCiAgLy8vIFRoZSBlbGVtZW50IGlzIG5vdCByZW1vdmVkIGZyb20gdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBUaGUgcXVldWUgbXVzdCBub3QgYmUgZW1wdHkgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCiAgRSBnZXQgZmlyc3Q7CgogIC8vLyBSZW1vdmVzIGFuZCByZXR1cm5zIHRoZSBlbGVtZW50IHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkuCiAgLy8vCiAgLy8vIFJlcGVhdGVkbHkgY2FsbGluZyB0aGlzIG1ldGhvZCwgd2l0aG91dCBhZGRpbmcgZWxlbWVudCBpbiBiZXR3ZWVuLAogIC8vLyBpcyBndWFyYW50ZWVkIHRvIHJldHVybiBlbGVtZW50cyBpbiBub24tZGVjcmVhc2luZyBvcmRlciBhcywgc3BlY2lmaWVkIGJ5CiAgLy8vIFtjb21wYXJpc29uXS4KICAvLy8KICAvLy8gVGhlIHF1ZXVlIG11c3Qgbm90IGJlIGVtcHR5IHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgogIEUgcmVtb3ZlRmlyc3QoKTsKCiAgLy8vIFJlbW92ZXMgYW4gZWxlbWVudCB0aGF0IGNvbXBhcmVzIGVxdWFsIHRvIFtlbGVtZW50XSBpbiB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiBhbiBlbGVtZW50IGlzIGZvdW5kIGFuZCByZW1vdmVkLAogIC8vLyBhbmQgZmFsc2UgaWYgbm8gZXF1YWwgZWxlbWVudCBpcyBmb3VuZC4KICBib29sIHJlbW92ZShFIGVsZW1lbnQpOwoKICAvLy8gUmVtb3ZlcyBhbGwgdGhlIGVsZW1lbnRzIGZyb20gdGhpcyBxdWV1ZSBhbmQgcmV0dXJucyB0aGVtLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgaXRlcmFibGUgaGFzIG5vIHNwZWNpZmllZCBvcmRlci4KICBJdGVyYWJsZTxFPiByZW1vdmVBbGwoKTsKCiAgLy8vIFJlbW92ZXMgYWxsIHRoZSBlbGVtZW50cyBmcm9tIHRoaXMgcXVldWUuCiAgdm9pZCBjbGVhcigpOwoKICAvLy8gUmV0dXJucyBhIGxpc3Qgb2YgdGhlIGVsZW1lbnRzIG9mIHRoaXMgcXVldWUgaW4gcHJpb3JpdHkgb3JkZXIuCiAgLy8vCiAgLy8vIFRoZSBxdWV1ZSBpcyBub3QgbW9kaWZpZWQuCiAgLy8vCiAgLy8vIFRoZSBvcmRlciBpcyB0aGUgb3JkZXIgdGhhdCB0aGUgZWxlbWVudHMgd291bGQgYmUgaW4gaWYgdGhleSB3ZXJlCiAgLy8vIHJlbW92ZWQgZnJvbSB0aGlzIHF1ZXVlIHVzaW5nIFtyZW1vdmVGaXJzdF0uCiAgTGlzdDxFPiB0b0xpc3QoKTsKCiAgLy8vIFJldHVybiBhIGNvbXBhcmF0b3IgYmFzZWQgc2V0IHVzaW5nIHRoZSBjb21wYXJhdG9yIG9mIHRoaXMgcXVldWUuCiAgLy8vCiAgLy8vIFRoZSBxdWV1ZSBpcyBub3QgbW9kaWZpZWQuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCBbU2V0XSBpcyBjdXJyZW50bHkgYSBbU3BsYXlUcmVlU2V0XSwKICAvLy8gYnV0IHRoaXMgbWF5IGNoYW5nZSBhcyBvdGhlciBvcmRlcmVkIHNldHMgYXJlIGltcGxlbWVudGVkLgogIC8vLwogIC8vLyBUaGUgc2V0IGNvbnRhaW5zIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhpcyBxdWV1ZS4KICAvLy8gSWYgYW4gZWxlbWVudCBvY2N1cnMgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHF1ZXVlLAogIC8vLyB0aGUgc2V0IHdpbGwgY29udGFpbiBpdCBvbmx5IG9uY2UuCiAgU2V0PEU+IHRvU2V0KCk7Cn0KCi8vLyBIZWFwIGJhc2VkIHByaW9yaXR5IHF1ZXVlLgovLy8KLy8vIFRoZSBlbGVtZW50cyBhcmUga2VwdCBpbiBhIGhlYXAgc3RydWN0dXJlLAovLy8gd2hlcmUgdGhlIGVsZW1lbnQgd2l0aCB0aGUgaGlnaGVzdCBwcmlvcml0eSBpcyBpbW1lZGlhdGVseSBhY2Nlc3NpYmxlLAovLy8gYW5kIG1vZGlmeWluZyBhIHNpbmdsZSBlbGVtZW50IHRha2VzCi8vLyBsb2dhcml0aG1pYyB0aW1lIGluIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgb24gYXZlcmFnZS4KLy8vCi8vLyAqIFRoZSBbYWRkXSBhbmQgW3JlbW92ZUZpcnN0XSBvcGVyYXRpb25zIHRha2UgYW1vcnRpemVkIGxvZ2FyaXRobWljIHRpbWUsCi8vLyAgIE8obG9nKG4pKSwgYnV0IG1heSBvY2Nhc2lvbmFsbHkgdGFrZSBsaW5lYXIgdGltZSB3aGVuIGdyb3dpbmcgdGhlIGNhcGFjaXR5Ci8vLyAgIG9mIHRoZSBoZWFwLgovLy8gKiBUaGUgW2FkZEFsbF0gb3BlcmF0aW9uIHdvcmtzIGFzIGRvaW5nIHJlcGVhdGVkIFthZGRdIG9wZXJhdGlvbnMuCi8vLyAqIFRoZSBbZmlyc3RdIGdldHRlciB0YWtlcyBjb25zdGFudCB0aW1lLCBPKDEpLgovLy8gKiBUaGUgW2NsZWFyXSBhbmQgW3JlbW92ZUFsbF0gbWV0aG9kcyBhbHNvIHRha2UgY29uc3RhbnQgdGltZSwgTygxKS4KLy8vICogVGhlIFtjb250YWluc10gYW5kIFtyZW1vdmVdIG9wZXJhdGlvbnMgbWF5IG5lZWQgdG8gc2VhcmNoIHRoZSBlbnRpcmUKLy8vICAgcXVldWUgZm9yIHRoZSBlbGVtZW50cywgdGFraW5nIE8obikgdGltZS4KLy8vICogVGhlIFt0b0xpc3RdIG9wZXJhdGlvbiBlZmZlY3RpdmVseSBzb3J0cyB0aGUgZWxlbWVudHMsIHRha2luZyBPKG4qbG9nKG4pKQovLy8gICB0aW1lLgovLy8gKiBUaGUgW3RvU2V0XSBvcGVyYXRpb24gZWZmZWN0aXZlbHkgYWRkcyBlYWNoIGVsZW1lbnQgdG8gdGhlIG5ldyBzZXQsIHRha2luZwovLy8gICBhbiBleHBlY3RlZCBPKG4qbG9nKG4pKSB0aW1lLgpjbGFzcyBIZWFwUHJpb3JpdHlRdWV1ZTxFPiBpbXBsZW1lbnRzIFByaW9yaXR5UXVldWU8RT4gewogIC8vLyBJbml0aWFsIGNhcGFjaXR5IG9mIGEgcXVldWUgd2hlbiBjcmVhdGVkLCBvciB3aGVuIGFkZGVkIHRvIGFmdGVyIGEKICAvLy8gW2NsZWFyXS4KICAvLy8KICAvLy8gTnVtYmVyIGNhbiBiZSBhbnkgcG9zaXRpdmUgdmFsdWUuIFBpY2tpbmcgYSBzaXplIHRoYXQgZ2l2ZXMgYSB3aG9sZQogIC8vLyBudW1iZXIgb2YgInRyZWUgbGV2ZWxzIiBpbiB0aGUgaGVhcCBpcyBvbmx5IGRvbmUgZm9yIGFlc3RoZXRpYyByZWFzb25zLgogIHN0YXRpYyBjb25zdCBpbnQgX0lOSVRJQUxfQ0FQQUNJVFkgPSA3OwoKICAvLy8gVGhlIGNvbXBhcmlzb24gYmVpbmcgdXNlZCB0byBjb21wYXJlIHRoZSBwcmlvcml0eSBvZiBlbGVtZW50cy4KICBmaW5hbCBDb21wYXJhdG9yPEU+IGNvbXBhcmlzb247CgogIC8vLyBMaXN0IGltcGxlbWVudGF0aW9uIG9mIGEgaGVhcC4KICBMaXN0PEU+IF9xdWV1ZSA9IG5ldyBMaXN0PEU+KF9JTklUSUFMX0NBUEFDSVRZKTsKCiAgLy8vIE51bWJlciBvZiBlbGVtZW50cyBpbiBxdWV1ZS4KICAvLy8KICAvLy8gVGhlIGhlYXAgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGZpcnN0IFtfbGVuZ3RoXSBlbnRyaWVzIG9mIFtfcXVldWVdLgogIGludCBfbGVuZ3RoID0gMDsKCiAgLy8vIENyZWF0ZSBhIG5ldyBwcmlvcml0eSBxdWV1ZS4KICAvLy8KICAvLy8gVGhlIFtjb21wYXJpc29uXSBpcyBhIFtDb21wYXJhdG9yXSB1c2VkIHRvIGNvbXBhcmUgdGhlIHByaW9yaXR5IG9mCiAgLy8vIGVsZW1lbnRzLiBBbiBlbGVtZW50IHRoYXQgY29tcGFyZXMgYXMgbGVzcyB0aGFuIGFub3RoZXIgZWxlbWVudCBoYXMKICAvLy8gYSBoaWdoZXIgcHJpb3JpdHkuCiAgLy8vCiAgLy8vIElmIFtjb21wYXJpc29uXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBbQ29tcGFyYWJsZS5jb21wYXJlXS4gSWYgdGhpcwogIC8vLyBpcyB0aGUgY2FzZSwgYEVgIG11c3QgaW1wbGVtZW50IFtDb21wYXJhYmxlXSwgYW5kIHRoaXMgaXMgY2hlY2tlZCBhdAogIC8vLyBydW50aW1lIGZvciBldmVyeSBjb21wYXJpc29uLgogIEhlYXBQcmlvcml0eVF1ZXVlKFtpbnQgY29tcGFyaXNvbihFIGUxLCBFIGUyKV0pCiAgICAgIDogY29tcGFyaXNvbiA9IGNvbXBhcmlzb24gPz8gZGVmYXVsdENvbXBhcmU8RT4oKTsKCiAgdm9pZCBhZGQoRSBlbGVtZW50KSB7CiAgICBfYWRkKGVsZW1lbnQpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZWxlbWVudHMpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgIF9hZGQoZWxlbWVudCk7CiAgICB9CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgX3F1ZXVlID0gY29uc3QgW107CiAgICBfbGVuZ3RoID0gMDsKICB9CgogIGJvb2wgY29udGFpbnMoRSBvYmplY3QpIHsKICAgIHJldHVybiBfbG9jYXRlKG9iamVjdCkgPj0gMDsKICB9CgogIEUgZ2V0IGZpcnN0IHsKICAgIGlmIChfbGVuZ3RoID09IDApIHRocm93IG5ldyBTdGF0ZUVycm9yKCJObyBzdWNoIGVsZW1lbnQiKTsKICAgIHJldHVybiBfcXVldWVbMF07CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+IF9sZW5ndGggPT0gMDsKCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfbGVuZ3RoICE9IDA7CgogIGludCBnZXQgbGVuZ3RoID0+IF9sZW5ndGg7CgogIGJvb2wgcmVtb3ZlKEUgZWxlbWVudCkgewogICAgaW50IGluZGV4ID0gX2xvY2F0ZShlbGVtZW50KTsKICAgIGlmIChpbmRleCA8IDApIHJldHVybiBmYWxzZTsKICAgIEUgbGFzdCA9IF9yZW1vdmVMYXN0KCk7CiAgICBpZiAoaW5kZXggPCBfbGVuZ3RoKSB7CiAgICAgIGludCBjb21wID0gY29tcGFyaXNvbihsYXN0LCBlbGVtZW50KTsKICAgICAgaWYgKGNvbXAgPD0gMCkgewogICAgICAgIF9idWJibGVVcChsYXN0LCBpbmRleCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2J1YmJsZURvd24obGFzdCwgaW5kZXgpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEl0ZXJhYmxlPEU+IHJlbW92ZUFsbCgpIHsKICAgIExpc3Q8RT4gcmVzdWx0ID0gX3F1ZXVlOwogICAgaW50IGxlbmd0aCA9IF9sZW5ndGg7CiAgICBfcXVldWUgPSBjb25zdCBbXTsKICAgIF9sZW5ndGggPSAwOwogICAgcmV0dXJuIHJlc3VsdC50YWtlKGxlbmd0aCk7CiAgfQoKICBFIHJlbW92ZUZpcnN0KCkgewogICAgaWYgKF9sZW5ndGggPT0gMCkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIk5vIHN1Y2ggZWxlbWVudCIpOwogICAgRSByZXN1bHQgPSBfcXVldWVbMF07CiAgICBFIGxhc3QgPSBfcmVtb3ZlTGFzdCgpOwogICAgaWYgKF9sZW5ndGggPiAwKSB7CiAgICAgIF9idWJibGVEb3duKGxhc3QsIDApOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIExpc3Q8RT4gdG9MaXN0KCkgewogICAgTGlzdDxFPiBsaXN0ID0gbmV3IExpc3Q8RT4oKS4ubGVuZ3RoID0gX2xlbmd0aDsKICAgIGxpc3Quc2V0UmFuZ2UoMCwgX2xlbmd0aCwgX3F1ZXVlKTsKICAgIGxpc3Quc29ydChjb21wYXJpc29uKTsKICAgIHJldHVybiBsaXN0OwogIH0KCiAgU2V0PEU+IHRvU2V0KCkgewogICAgU2V0PEU+IHNldCA9IG5ldyBTcGxheVRyZWVTZXQ8RT4oY29tcGFyaXNvbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9sZW5ndGg7IGkrKykgewogICAgICBzZXQuYWRkKF9xdWV1ZVtpXSk7CiAgICB9CiAgICByZXR1cm4gc2V0OwogIH0KCiAgLy8vIFJldHVybnMgc29tZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIFRoZSBmb3JtYXQgaXNuJ3Qgc2lnbmlmaWNhbnQsIGFuZCBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUuCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuIF9xdWV1ZS50YWtlKF9sZW5ndGgpLnRvU3RyaW5nKCk7CiAgfQoKICAvLy8gQWRkIGVsZW1lbnQgdG8gdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBHcm93cyB0aGUgY2FwYWNpdHkgaWYgdGhlIGJhY2tpbmcgbGlzdCBpcyBmdWxsLgogIHZvaWQgX2FkZChFIGVsZW1lbnQpIHsKICAgIGlmIChfbGVuZ3RoID09IF9xdWV1ZS5sZW5ndGgpIF9ncm93KCk7CiAgICBfYnViYmxlVXAoZWxlbWVudCwgX2xlbmd0aCsrKTsKICB9CgogIC8vLyBGaW5kIHRoZSBpbmRleCBvZiBhbiBvYmplY3QgaW4gdGhlIGhlYXAuCiAgLy8vCiAgLy8vIFJldHVybnMgLTEgaWYgdGhlIG9iamVjdCBpcyBub3QgZm91bmQuCiAgaW50IF9sb2NhdGUoRSBvYmplY3QpIHsKICAgIGlmIChfbGVuZ3RoID09IDApIHJldHVybiAtMTsKICAgIC8vIENvdW50IHBvc2l0aW9ucyBmcm9tIG9uZSBpbnN0ZWFkIG9mIHplcm8uIFRoaXMgZ2l2ZXMgdGhlIG51bWJlcnMKICAgIC8vIHNvbWUgbmljZSBwcm9wZXJ0aWVzLiBGb3IgZXhhbXBsZSwgYWxsIHJpZ2h0IGNoaWxkcmVuIGFyZSBvZGQsCiAgICAvLyB0aGVpciBsZWZ0IHNpYmxpbmcgaXMgZXZlbiwgYW5kIHRoZSBwYXJlbnQgaXMgZm91bmQgYnkgc2hpZnRpbmcKICAgIC8vIHJpZ2h0IGJ5IG9uZS4KICAgIC8vIFZhbGlkIHJhbmdlIGZvciBwb3NpdGlvbiBpcyBbMS4uX2xlbmd0aF0sIGluY2x1c2l2ZS4KICAgIGludCBwb3NpdGlvbiA9IDE7CiAgICAvLyBQcmUtb3JkZXIgZGVwdGggZmlyc3Qgc2VhcmNoLCBvbWl0IGNoaWxkIG5vZGVzIGlmIHRoZSBjdXJyZW50CiAgICAvLyBub2RlIGhhcyBsb3dlciBwcmlvcml0eSB0aGFuIFtvYmplY3RdLCBiZWNhdXNlIGFsbCBub2RlcyBsb3dlcgogICAgLy8gaW4gdGhlIGhlYXAgd2lsbCBhbHNvIGhhdmUgbG93ZXIgcHJpb3JpdHkuCiAgICBkbyB7CiAgICAgIGludCBpbmRleCA9IHBvc2l0aW9uIC0gMTsKICAgICAgRSBlbGVtZW50ID0gX3F1ZXVlW2luZGV4XTsKICAgICAgaW50IGNvbXAgPSBjb21wYXJpc29uKGVsZW1lbnQsIG9iamVjdCk7CiAgICAgIGlmIChjb21wID09IDApIHJldHVybiBpbmRleDsKICAgICAgaWYgKGNvbXAgPCAwKSB7CiAgICAgICAgLy8gRWxlbWVudCBtYXkgYmUgaW4gc3VidHJlZS4KICAgICAgICAvLyBDb250aW51ZSB3aXRoIHRoZSBsZWZ0IGNoaWxkLCBpZiBpdCBpcyB0aGVyZS4KICAgICAgICBpbnQgbGVmdENoaWxkUG9zaXRpb24gPSBwb3NpdGlvbiAqIDI7CiAgICAgICAgaWYgKGxlZnRDaGlsZFBvc2l0aW9uIDw9IF9sZW5ndGgpIHsKICAgICAgICAgIHBvc2l0aW9uID0gbGVmdENoaWxkUG9zaXRpb247CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gRmluZCB0aGUgbmV4dCByaWdodCBzaWJsaW5nIG9yIHJpZ2h0IGFuY2VzdG9yIHNpYmxpbmcuCiAgICAgIGRvIHsKICAgICAgICB3aGlsZSAocG9zaXRpb24uaXNPZGQpIHsKICAgICAgICAgIC8vIFdoaWxlIHBvc2l0aW9uIGlzIGEgcmlnaHQgY2hpbGQsIGdvIHRvIHRoZSBwYXJlbnQuCiAgICAgICAgICBwb3NpdGlvbiA+Pj0gMTsKICAgICAgICB9CiAgICAgICAgLy8gVGhlbiBnbyB0byB0aGUgcmlnaHQgc2libGluZyBvZiB0aGUgbGVmdC1jaGlsZC4KICAgICAgICBwb3NpdGlvbiArPSAxOwogICAgICB9IHdoaWxlIChwb3NpdGlvbiA+IF9sZW5ndGgpOyAvLyBIYXBwZW5zIGlmIGxhc3QgZWxlbWVudCBpcyBhIGxlZnQgY2hpbGQuCiAgICB9IHdoaWxlIChwb3NpdGlvbiAhPSAxKTsgLy8gQXQgcm9vdCBhZ2Fpbi4gSGFwcGVucyBmb3IgcmlnaHQtbW9zdCBlbGVtZW50LgogICAgcmV0dXJuIC0xOwogIH0KCiAgRSBfcmVtb3ZlTGFzdCgpIHsKICAgIGludCBuZXdMZW5ndGggPSBfbGVuZ3RoIC0gMTsKICAgIEUgbGFzdCA9IF9xdWV1ZVtuZXdMZW5ndGhdOwogICAgX3F1ZXVlW25ld0xlbmd0aF0gPSBudWxsOwogICAgX2xlbmd0aCA9IG5ld0xlbmd0aDsKICAgIHJldHVybiBsYXN0OwogIH0KCiAgLy8vIFBsYWNlIFtlbGVtZW50XSBpbiBoZWFwIGF0IFtpbmRleF0gb3IgYWJvdmUuCiAgLy8vCiAgLy8vIFB1dCBlbGVtZW50IGludG8gdGhlIGVtcHR5IGNlbGwgYXQgYGluZGV4YC4KICAvLy8gV2hpbGUgdGhlIGBlbGVtZW50YCBoYXMgaGlnaGVyIHByaW9yaXR5IHRoYW4gdGhlCiAgLy8vIHBhcmVudCwgc3dhcCBpdCB3aXRoIHRoZSBwYXJlbnQuCiAgdm9pZCBfYnViYmxlVXAoRSBlbGVtZW50LCBpbnQgaW5kZXgpIHsKICAgIHdoaWxlIChpbmRleCA+IDApIHsKICAgICAgaW50IHBhcmVudEluZGV4ID0gKGluZGV4IC0gMSkgfi8gMjsKICAgICAgRSBwYXJlbnQgPSBfcXVldWVbcGFyZW50SW5kZXhdOwogICAgICBpZiAoY29tcGFyaXNvbihlbGVtZW50LCBwYXJlbnQpID4gMCkgYnJlYWs7CiAgICAgIF9xdWV1ZVtpbmRleF0gPSBwYXJlbnQ7CiAgICAgIGluZGV4ID0gcGFyZW50SW5kZXg7CiAgICB9CiAgICBfcXVldWVbaW5kZXhdID0gZWxlbWVudDsKICB9CgogIC8vLyBQbGFjZSBbZWxlbWVudF0gaW4gaGVhcCBhdCBbaW5kZXhdIG9yIGFib3ZlLgogIC8vLwogIC8vLyBQdXQgZWxlbWVudCBpbnRvIHRoZSBlbXB0eSBjZWxsIGF0IGBpbmRleGAuCiAgLy8vIFdoaWxlIHRoZSBgZWxlbWVudGAgaGFzIGxvd2VyIHByaW9yaXR5IHRoYW4gZWl0aGVyIGNoaWxkLAogIC8vLyBzd2FwIGl0IHdpdGggdGhlIGhpZ2hlc3QgcHJpb3JpdHkgY2hpbGQuCiAgdm9pZCBfYnViYmxlRG93bihFIGVsZW1lbnQsIGludCBpbmRleCkgewogICAgaW50IHJpZ2h0Q2hpbGRJbmRleCA9IGluZGV4ICogMiArIDI7CiAgICB3aGlsZSAocmlnaHRDaGlsZEluZGV4IDwgX2xlbmd0aCkgewogICAgICBpbnQgbGVmdENoaWxkSW5kZXggPSByaWdodENoaWxkSW5kZXggLSAxOwogICAgICBFIGxlZnRDaGlsZCA9IF9xdWV1ZVtsZWZ0Q2hpbGRJbmRleF07CiAgICAgIEUgcmlnaHRDaGlsZCA9IF9xdWV1ZVtyaWdodENoaWxkSW5kZXhdOwogICAgICBpbnQgY29tcCA9IGNvbXBhcmlzb24obGVmdENoaWxkLCByaWdodENoaWxkKTsKICAgICAgaW50IG1pbkNoaWxkSW5kZXg7CiAgICAgIEUgbWluQ2hpbGQ7CiAgICAgIGlmIChjb21wIDwgMCkgewogICAgICAgIG1pbkNoaWxkID0gbGVmdENoaWxkOwogICAgICAgIG1pbkNoaWxkSW5kZXggPSBsZWZ0Q2hpbGRJbmRleDsKICAgICAgfSBlbHNlIHsKICAgICAgICBtaW5DaGlsZCA9IHJpZ2h0Q2hpbGQ7CiAgICAgICAgbWluQ2hpbGRJbmRleCA9IHJpZ2h0Q2hpbGRJbmRleDsKICAgICAgfQogICAgICBjb21wID0gY29tcGFyaXNvbihlbGVtZW50LCBtaW5DaGlsZCk7CiAgICAgIGlmIChjb21wIDw9IDApIHsKICAgICAgICBfcXVldWVbaW5kZXhdID0gZWxlbWVudDsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX3F1ZXVlW2luZGV4XSA9IG1pbkNoaWxkOwogICAgICBpbmRleCA9IG1pbkNoaWxkSW5kZXg7CiAgICAgIHJpZ2h0Q2hpbGRJbmRleCA9IGluZGV4ICogMiArIDI7CiAgICB9CiAgICBpbnQgbGVmdENoaWxkSW5kZXggPSByaWdodENoaWxkSW5kZXggLSAxOwogICAgaWYgKGxlZnRDaGlsZEluZGV4IDwgX2xlbmd0aCkgewogICAgICBFIGNoaWxkID0gX3F1ZXVlW2xlZnRDaGlsZEluZGV4XTsKICAgICAgaW50IGNvbXAgPSBjb21wYXJpc29uKGVsZW1lbnQsIGNoaWxkKTsKICAgICAgaWYgKGNvbXAgPiAwKSB7CiAgICAgICAgX3F1ZXVlW2luZGV4XSA9IGNoaWxkOwogICAgICAgIGluZGV4ID0gbGVmdENoaWxkSW5kZXg7CiAgICAgIH0KICAgIH0KICAgIF9xdWV1ZVtpbmRleF0gPSBlbGVtZW50OwogIH0KCiAgLy8vIEdyb3dzIHRoZSBjYXBhY2l0eSBvZiB0aGUgbGlzdCBob2xkaW5nIHRoZSBoZWFwLgogIC8vLwogIC8vLyBDYWxsZWQgd2hlbiB0aGUgbGlzdCBpcyBmdWxsLgogIHZvaWQgX2dyb3coKSB7CiAgICBpbnQgbmV3Q2FwYWNpdHkgPSBfcXVldWUubGVuZ3RoICogMiArIDE7CiAgICBpZiAobmV3Q2FwYWNpdHkgPCBfSU5JVElBTF9DQVBBQ0lUWSkgbmV3Q2FwYWNpdHkgPSBfSU5JVElBTF9DQVBBQ0lUWTsKICAgIExpc3Q8RT4gbmV3UXVldWUgPSBuZXcgTGlzdDxFPihuZXdDYXBhY2l0eSk7CiAgICBuZXdRdWV1ZS5zZXRSYW5nZSgwLCBfbGVuZ3RoLCBfcXVldWUpOwogICAgX3F1ZXVlID0gbmV3UXVldWU7CiAgfQp9CoFqAE5OPAEaARUBQARRIigGQgZJShkGT0skTgEnEgEiFAEqFwEqBiwbASEGRkAXASglAUcGMQY+DwFBBklQFAY+EwFIBjcuGgFBBjQbATAQAUYGIQZIMxQBSAYhBjhBBjc4KRICAR8EL0spOwROURNHNElLMFAMUSQ5SQ8GSk4qAUUiASUzASMGShMBIwZJShkGT0skMjgBGBMEASYiFQYEAREXEQQBHCEEARA/FgQBJAEnAR0BGyIhHBssFyAPIggGEQQBHB0aFxEgBAEUPxocFxwGEwQBFTQnGxEEARMyKBoGEAQBMAZCFiwEASAGNhkrIwQBLwYtGiFIRkcVPBZFRjIJICEuIxYmOS4sKBQKCEALIUAaCjsXUE8PBAEUISAeGREEATMGMjcnKRgqJjIeGwYdBAEzBjJALyspKDAsLjQZEhYeKA8fKQgsFyEQCCAdJwYuJCgtFh8gCAYdBAE3BiQRLUoxKxcEAgEqcGFja2FnZTpjb2xsZWN0aW9uL3NyYy9wcmlvcml0eV9xdWV1ZS5kYXJ0O3Nka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvcXVldWVfbGlzdC5kYXJ0nlEvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdkYXJ0OmNvbGxlY3Rpb24nOwoKLy8vIEEgY2xhc3MgdGhhdCBlZmZpY2llbnRseSBpbXBsZW1lbnRzIGJvdGggW1F1ZXVlXSBhbmQgW0xpc3RdLgovLyBUT0RPKG53ZWl6KTogQ3VycmVudGx5IHRoaXMgY29kZSBpcyBjb3BpZWQgYWxtb3N0IHZlcmJhdGltIGZyb20KLy8gZGFydDpjb2xsZWN0aW9uLiBUaGUgb25seSBjaGFuZ2VzIGFyZSB0byBpbXBsZW1lbnQgTGlzdCBhbmQgdG8gcmVtb3ZlIG1ldGhvZHMKLy8gdGhhdCBhcmUgcmVkdW5kYW50IHdpdGggTGlzdE1peGluLiBSZW1vdmUgb3Igc2ltcGxpZnkgaXQgd2hlbiBpc3N1ZSAyMTMzMCBpcwovLyBmaXhlZC4KY2xhc3MgUXVldWVMaXN0PEU+IGV4dGVuZHMgT2JqZWN0IHdpdGggTGlzdE1peGluPEU+IGltcGxlbWVudHMgUXVldWU8RT4gewogIC8vLyBBZGFwdHMgW3NvdXJjZV0gdG8gYmUgYSBgUXVldWVMaXN0PFQ+YC4KICAvLy8KICAvLy8gQW55IHRpbWUgdGhlIGNsYXNzIHdvdWxkIHByb2R1Y2UgYW4gZWxlbWVudCB0aGF0IGlzIG5vdCBhIFtUXSwgdGhlIGVsZW1lbnQKICAvLy8gYWNjZXNzIHdpbGwgdGhyb3cuCiAgLy8vCiAgLy8vIEFueSB0aW1lIGEgW1RdIHZhbHVlIGlzIGF0dGVtcHRlZCBzdG9yZWQgaW50byB0aGUgYWRhcHRlZCBjbGFzcywgdGhlIHN0b3JlCiAgLy8vIHdpbGwgdGhyb3cgdW5sZXNzIHRoZSB2YWx1ZSBpcyBhbHNvIGFuIGluc3RhbmNlIG9mIFtTXS4KICAvLy8KICAvLy8gSWYgYWxsIGFjY2Vzc2VkIGVsZW1lbnRzIG9mIFtzb3VyY2VdIGFyZSBhY3R1YWxseSBpbnN0YW5jZXMgb2YgW1RdIGFuZCBpZgogIC8vLyBhbGwgZWxlbWVudHMgc3RvcmVkIGluIHRoZSByZXR1cm5lZCAgYXJlIGFjdHVhbGx5IGluc3RhbmNlIG9mIFtTXSwKICAvLy8gdGhlbiB0aGUgcmV0dXJuZWQgaW5zdGFuY2UgY2FuIGJlIHVzZWQgYXMgYSBgUXVldWVMaXN0PFQ+YC4KICBzdGF0aWMgUXVldWVMaXN0PFQ+IF9jYXN0RnJvbTxTLCBUPihRdWV1ZUxpc3Q8Uz4gc291cmNlKSB7CiAgICByZXR1cm4gbmV3IF9DYXN0UXVldWVMaXN0PFMsIFQ+KHNvdXJjZSk7CiAgfQoKICBzdGF0aWMgY29uc3QgaW50IF9JTklUSUFMX0NBUEFDSVRZID0gODsKICBMaXN0PEU+IF90YWJsZTsKICBpbnQgX2hlYWQ7CiAgaW50IF90YWlsOwoKICAvLy8gQ3JlYXRlIGFuIGVtcHR5IHF1ZXVlLgogIC8vLwogIC8vLyBJZiBbaW5pdGlhbENhcGFjaXR5XSBpcyBnaXZlbiwgcHJlcGFyZSB0aGUgcXVldWUgZm9yIGF0IGxlYXN0IHRoYXQgbWFueQogIC8vLyBlbGVtZW50cy4KICBRdWV1ZUxpc3QoW2ludCBpbml0aWFsQ2FwYWNpdHldKQogICAgICA6IF9oZWFkID0gMCwKICAgICAgICBfdGFpbCA9IDAgewogICAgaWYgKGluaXRpYWxDYXBhY2l0eSA9PSBudWxsIHx8IGluaXRpYWxDYXBhY2l0eSA8IF9JTklUSUFMX0NBUEFDSVRZKSB7CiAgICAgIGluaXRpYWxDYXBhY2l0eSA9IF9JTklUSUFMX0NBUEFDSVRZOwogICAgfSBlbHNlIGlmICghX2lzUG93ZXJPZjIoaW5pdGlhbENhcGFjaXR5KSkgewogICAgICBpbml0aWFsQ2FwYWNpdHkgPSBfbmV4dFBvd2VyT2YyKGluaXRpYWxDYXBhY2l0eSk7CiAgICB9CiAgICBhc3NlcnQoX2lzUG93ZXJPZjIoaW5pdGlhbENhcGFjaXR5KSk7CiAgICBfdGFibGUgPSBuZXcgTGlzdDxFPihpbml0aWFsQ2FwYWNpdHkpOwogIH0KCiAgLy8gQW4gaW50ZXJuYWwgY29uc3RydWN0b3IgZm9yIHVzZSBieSBfQ2FzdFF1ZXVlTGlzdC4KICBRdWV1ZUxpc3QuXygpOwoKICAvLy8gQ3JlYXRlIGEgcXVldWUgaW5pdGlhbGx5IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIFtzb3VyY2VdLgogIGZhY3RvcnkgUXVldWVMaXN0LmZyb20oSXRlcmFibGU8RT4gc291cmNlKSB7CiAgICBpZiAoc291cmNlIGlzIExpc3QpIHsKICAgICAgaW50IGxlbmd0aCA9IHNvdXJjZS5sZW5ndGg7CiAgICAgIFF1ZXVlTGlzdDxFPiBxdWV1ZSA9IG5ldyBRdWV1ZUxpc3QobGVuZ3RoICsgMSk7CiAgICAgIGFzc2VydChxdWV1ZS5fdGFibGUubGVuZ3RoID4gbGVuZ3RoKTsKICAgICAgdmFyIHNvdXJjZUxpc3QgPSBzb3VyY2U7CiAgICAgIHF1ZXVlLl90YWJsZS5zZXRSYW5nZSgwLCBsZW5ndGgsIHNvdXJjZUxpc3QsIDApOwogICAgICBxdWV1ZS5fdGFpbCA9IGxlbmd0aDsKICAgICAgcmV0dXJuIHF1ZXVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBRdWV1ZUxpc3Q8RT4oKS4uYWRkQWxsKHNvdXJjZSk7CiAgICB9CiAgfQoKICAvLyBDb2xsZWN0aW9uIGludGVyZmFjZS4KCiAgdm9pZCBhZGQoRSBlbGVtZW50KSB7CiAgICBfYWRkKGVsZW1lbnQpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIGlmIChpdGVyYWJsZSBpcyBMaXN0KSB7CiAgICAgIHZhciBsaXN0ID0gaXRlcmFibGU7CiAgICAgIGludCBhZGRDb3VudCA9IGxpc3QubGVuZ3RoOwogICAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgIGlmIChsZW5ndGggKyBhZGRDb3VudCA+PSBfdGFibGUubGVuZ3RoKSB7CiAgICAgICAgX3ByZUdyb3cobGVuZ3RoICsgYWRkQ291bnQpOwogICAgICAgIC8vIEFmdGVyIHByZUdyb3csIGFsbCBlbGVtZW50cyBhcmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0LgogICAgICAgIF90YWJsZS5zZXRSYW5nZShsZW5ndGgsIGxlbmd0aCArIGFkZENvdW50LCBsaXN0LCAwKTsKICAgICAgICBfdGFpbCArPSBhZGRDb3VudDsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBBZGRpbmcgYWRkQ291bnQgZWxlbWVudHMgd29uJ3QgcmVhY2ggX2hlYWQuCiAgICAgICAgaW50IGVuZFNwYWNlID0gX3RhYmxlLmxlbmd0aCAtIF90YWlsOwogICAgICAgIGlmIChhZGRDb3VudCA8IGVuZFNwYWNlKSB7CiAgICAgICAgICBfdGFibGUuc2V0UmFuZ2UoX3RhaWwsIF90YWlsICsgYWRkQ291bnQsIGxpc3QsIDApOwogICAgICAgICAgX3RhaWwgKz0gYWRkQ291bnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGludCBwcmVTcGFjZSA9IGFkZENvdW50IC0gZW5kU3BhY2U7CiAgICAgICAgICBfdGFibGUuc2V0UmFuZ2UoX3RhaWwsIF90YWlsICsgZW5kU3BhY2UsIGxpc3QsIDApOwogICAgICAgICAgX3RhYmxlLnNldFJhbmdlKDAsIHByZVNwYWNlLCBsaXN0LCBlbmRTcGFjZSk7CiAgICAgICAgICBfdGFpbCA9IHByZVNwYWNlOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChFIGVsZW1lbnQgaW4gaXRlcmFibGUpIF9hZGQoZWxlbWVudCk7CiAgICB9CiAgfQoKICBRdWV1ZUxpc3Q8VD4gY2FzdDxUPigpID0+IFF1ZXVlTGlzdC5fY2FzdEZyb208RSwgVD4odGhpcyk7CgogIEBkZXByZWNhdGVkCiAgUXVldWVMaXN0PFQ+IHJldHlwZTxUPigpID0+IGNhc3Q8VD4oKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gSXRlcmFibGVCYXNlLml0ZXJhYmxlVG9GdWxsU3RyaW5nKHRoaXMsICJ7IiwgIn0iKTsKCiAgLy8gUXVldWUgaW50ZXJmYWNlLgoKICB2b2lkIGFkZExhc3QoRSBlbGVtZW50KSB7CiAgICBfYWRkKGVsZW1lbnQpOwogIH0KCiAgdm9pZCBhZGRGaXJzdChFIGVsZW1lbnQpIHsKICAgIF9oZWFkID0gKF9oZWFkIC0gMSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpOwogICAgX3RhYmxlW19oZWFkXSA9IGVsZW1lbnQ7CiAgICBpZiAoX2hlYWQgPT0gX3RhaWwpIF9ncm93KCk7CiAgfQoKICBFIHJlbW92ZUZpcnN0KCkgewogICAgaWYgKF9oZWFkID09IF90YWlsKSB0aHJvdyBuZXcgU3RhdGVFcnJvcigiTm8gZWxlbWVudCIpOwogICAgRSByZXN1bHQgPSBfdGFibGVbX2hlYWRdOwogICAgX3RhYmxlW19oZWFkXSA9IG51bGw7CiAgICBfaGVhZCA9IChfaGVhZCArIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBFIHJlbW92ZUxhc3QoKSB7CiAgICBpZiAoX2hlYWQgPT0gX3RhaWwpIHRocm93IG5ldyBTdGF0ZUVycm9yKCJObyBlbGVtZW50Iik7CiAgICBfdGFpbCA9IChfdGFpbCAtIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKTsKICAgIEUgcmVzdWx0ID0gX3RhYmxlW190YWlsXTsKICAgIF90YWJsZVtfdGFpbF0gPSBudWxsOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIExpc3QgaW50ZXJmYWNlLgoKICBpbnQgZ2V0IGxlbmd0aCA9PiAoX3RhaWwgLSBfaGVhZCkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpOwoKICBzZXQgbGVuZ3RoKGludCB2YWx1ZSkgewogICAgaWYgKHZhbHVlIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkxlbmd0aCAkdmFsdWUgbWF5IG5vdCBiZSBuZWdhdGl2ZS4iKTsKCiAgICBpbnQgZGVsdGEgPSB2YWx1ZSAtIGxlbmd0aDsKICAgIGlmIChkZWx0YSA+PSAwKSB7CiAgICAgIGlmIChfdGFibGUubGVuZ3RoIDw9IHZhbHVlKSB7CiAgICAgICAgX3ByZUdyb3codmFsdWUpOwogICAgICB9CiAgICAgIF90YWlsID0gKF90YWlsICsgZGVsdGEpICYgKF90YWJsZS5sZW5ndGggLSAxKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGludCBuZXdUYWlsID0gX3RhaWwgKyBkZWx0YTsgLy8gW2RlbHRhXSBpcyBuZWdhdGl2ZS4KICAgIGlmIChuZXdUYWlsID49IDApIHsKICAgICAgX3RhYmxlLmZpbGxSYW5nZShuZXdUYWlsLCBfdGFpbCwgbnVsbCk7CiAgICB9IGVsc2UgewogICAgICBuZXdUYWlsICs9IF90YWJsZS5sZW5ndGg7CiAgICAgIF90YWJsZS5maWxsUmFuZ2UoMCwgX3RhaWwsIG51bGwpOwogICAgICBfdGFibGUuZmlsbFJhbmdlKG5ld1RhaWwsIF90YWJsZS5sZW5ndGgsIG51bGwpOwogICAgfQogICAgX3RhaWwgPSBuZXdUYWlsOwogIH0KCiAgRSBvcGVyYXRvciBbXShpbnQgaW5kZXgpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCAkaW5kZXggbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAuLiRsZW5ndGgpLiIpOwogICAgfQoKICAgIHJldHVybiBfdGFibGVbKF9oZWFkICsgaW5kZXgpICYgKF90YWJsZS5sZW5ndGggLSAxKV07CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIEUgdmFsdWUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCAkaW5kZXggbXVzdCBiZSBpbiB0aGUgcmFuZ2UgWzAuLiRsZW5ndGgpLiIpOwogICAgfQoKICAgIF90YWJsZVsoX2hlYWQgKyBpbmRleCkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpXSA9IHZhbHVlOwogIH0KCiAgLy8gSW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9ucy4KCiAgLy8vIFdoZXRoZXIgW251bWJlcl0gaXMgYSBwb3dlciBvZiB0d28uCiAgLy8vCiAgLy8vIE9ubHkgd29ya3MgZm9yIHBvc2l0aXZlIG51bWJlcnMuCiAgc3RhdGljIGJvb2wgX2lzUG93ZXJPZjIoaW50IG51bWJlcikgPT4gKG51bWJlciAmIChudW1iZXIgLSAxKSkgPT0gMDsKCiAgLy8vIFJvdW5kcyBbbnVtYmVyXSB1cCB0byB0aGUgbmVhcmVzdCBwb3dlciBvZiAyLgogIC8vLwogIC8vLyBJZiBbbnVtYmVyXSBpcyBhIHBvd2VyIG9mIDIgYWxyZWFkeSwgaXQgaXMgcmV0dXJuZWQuCiAgLy8vCiAgLy8vIE9ubHkgd29ya3MgZm9yIHBvc2l0aXZlIG51bWJlcnMuCiAgc3RhdGljIGludCBfbmV4dFBvd2VyT2YyKGludCBudW1iZXIpIHsKICAgIGFzc2VydChudW1iZXIgPiAwKTsKICAgIG51bWJlciA9IChudW1iZXIgPDwgMSkgLSAxOwogICAgZm9yICg7OykgewogICAgICBpbnQgbmV4dE51bWJlciA9IG51bWJlciAmIChudW1iZXIgLSAxKTsKICAgICAgaWYgKG5leHROdW1iZXIgPT0gMCkgcmV0dXJuIG51bWJlcjsKICAgICAgbnVtYmVyID0gbmV4dE51bWJlcjsKICAgIH0KICB9CgogIC8vLyBBZGRzIGVsZW1lbnQgYXQgZW5kIG9mIHF1ZXVlLiBVc2VkIGJ5IGJvdGggW2FkZF0gYW5kIFthZGRBbGxdLgogIHZvaWQgX2FkZChFIGVsZW1lbnQpIHsKICAgIF90YWJsZVtfdGFpbF0gPSBlbGVtZW50OwogICAgX3RhaWwgPSAoX3RhaWwgKyAxKSAmIChfdGFibGUubGVuZ3RoIC0gMSk7CiAgICBpZiAoX2hlYWQgPT0gX3RhaWwpIF9ncm93KCk7CiAgfQoKICAvLy8gR3JvdyB0aGUgdGFibGUgd2hlbiBmdWxsLgogIHZvaWQgX2dyb3coKSB7CiAgICBMaXN0PEU+IG5ld1RhYmxlID0gbmV3IExpc3Q8RT4oX3RhYmxlLmxlbmd0aCAqIDIpOwogICAgaW50IHNwbGl0ID0gX3RhYmxlLmxlbmd0aCAtIF9oZWFkOwogICAgbmV3VGFibGUuc2V0UmFuZ2UoMCwgc3BsaXQsIF90YWJsZSwgX2hlYWQpOwogICAgbmV3VGFibGUuc2V0UmFuZ2Uoc3BsaXQsIHNwbGl0ICsgX2hlYWQsIF90YWJsZSwgMCk7CiAgICBfaGVhZCA9IDA7CiAgICBfdGFpbCA9IF90YWJsZS5sZW5ndGg7CiAgICBfdGFibGUgPSBuZXdUYWJsZTsKICB9CgogIGludCBfd3JpdGVUb0xpc3QoTGlzdDxFPiB0YXJnZXQpIHsKICAgIGFzc2VydCh0YXJnZXQubGVuZ3RoID49IGxlbmd0aCk7CiAgICBpZiAoX2hlYWQgPD0gX3RhaWwpIHsKICAgICAgaW50IGxlbmd0aCA9IF90YWlsIC0gX2hlYWQ7CiAgICAgIHRhcmdldC5zZXRSYW5nZSgwLCBsZW5ndGgsIF90YWJsZSwgX2hlYWQpOwogICAgICByZXR1cm4gbGVuZ3RoOwogICAgfSBlbHNlIHsKICAgICAgaW50IGZpcnN0UGFydFNpemUgPSBfdGFibGUubGVuZ3RoIC0gX2hlYWQ7CiAgICAgIHRhcmdldC5zZXRSYW5nZSgwLCBmaXJzdFBhcnRTaXplLCBfdGFibGUsIF9oZWFkKTsKICAgICAgdGFyZ2V0LnNldFJhbmdlKGZpcnN0UGFydFNpemUsIGZpcnN0UGFydFNpemUgKyBfdGFpbCwgX3RhYmxlLCAwKTsKICAgICAgcmV0dXJuIF90YWlsICsgZmlyc3RQYXJ0U2l6ZTsKICAgIH0KICB9CgogIC8vLyBHcm93cyB0aGUgdGFibGUgZXZlbiBpZiBpdCBpcyBub3QgZnVsbC4KICB2b2lkIF9wcmVHcm93KGludCBuZXdFbGVtZW50Q291bnQpIHsKICAgIGFzc2VydChuZXdFbGVtZW50Q291bnQgPj0gbGVuZ3RoKTsKCiAgICAvLyBBZGQgMS41eCBleHRyYSByb29tIHRvIGVuc3VyZSB0aGF0IHRoZXJlJ3Mgcm9vbSBmb3IgbW9yZSBlbGVtZW50cyBhZnRlcgogICAgLy8gZXhwYW5zaW9uLgogICAgbmV3RWxlbWVudENvdW50ICs9IG5ld0VsZW1lbnRDb3VudCA+PiAxOwogICAgaW50IG5ld0NhcGFjaXR5ID0gX25leHRQb3dlck9mMihuZXdFbGVtZW50Q291bnQpOwogICAgTGlzdDxFPiBuZXdUYWJsZSA9IG5ldyBMaXN0PEU+KG5ld0NhcGFjaXR5KTsKICAgIF90YWlsID0gX3dyaXRlVG9MaXN0KG5ld1RhYmxlKTsKICAgIF90YWJsZSA9IG5ld1RhYmxlOwogICAgX2hlYWQgPSAwOwogIH0KfQoKY2xhc3MgX0Nhc3RRdWV1ZUxpc3Q8UywgVD4gZXh0ZW5kcyBRdWV1ZUxpc3Q8VD4gewogIGZpbmFsIFF1ZXVlTGlzdDxTPiBfZGVsZWdhdGU7CgogIF9DYXN0UXVldWVMaXN0KHRoaXMuX2RlbGVnYXRlKSA6IHN1cGVyLl8oKSB7CiAgICBfdGFibGUgPSBfZGVsZWdhdGUuX3RhYmxlLmNhc3Q8VD4oKTsKICB9CgogIGludCBnZXQgX2hlYWQgPT4gX2RlbGVnYXRlLl9oZWFkOwogIHNldCBfaGVhZChpbnQgdmFsdWUpID0+IF9kZWxlZ2F0ZS5faGVhZCA9IHZhbHVlOwoKICBpbnQgZ2V0IF90YWlsID0+IF9kZWxlZ2F0ZS5fdGFpbDsKICBzZXQgX3RhaWwoaW50IHZhbHVlKSA9PiBfZGVsZWdhdGUuX3RhaWwgPSB2YWx1ZTsKfQqBBgBOTjwBGgFBQ1FQCkouBlEZBlE+BlBJQj0tBAEqEg0NAR0GThAjExRKKzA4BiorBAE4EQFELxoiNiwfNxwUDTEGBAEbARgTBAEmHBsiIDAlRT0bDzcuIz0dES49OBwKCA0xBgQBPQEOKQFKARYBHBMEAR0vHSEEARQ8HhovEwQBEzwvHhoTBAEVATsBGk8BIBYkGQg1DgYBORguDSAoNgYVBAEdKE8GAToEASooTwYBOwQBIAEqBidHATQGOwYnKRggDy4qGwYEAUUZHS8hBAEgETcnMDgPGxcEASUlGiIxFQ0xOEgkBgQBLicnAU8SLTYxJBcPBAIBMiABLykEASQzASQzAgEmcGFja2FnZTpjb2xsZWN0aW9uL3NyYy9xdWV1ZV9saXN0LmRhcnQ6c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy91bmlvbl9zZXQuZGFydI1gLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCmltcG9ydCAndW5tb2RpZmlhYmxlX3dyYXBwZXJzLmRhcnQnOwoKLy8vIEEgc2luZ2xlIHNldCB0aGF0IHByb3ZpZGVzIGEgdmlldyBvZiB0aGUgdW5pb24gb3ZlciBhIHNldCBvZiBzZXRzLgovLy8KLy8vIFNpbmNlIHRoaXMgaXMganVzdCBhIHZpZXcsIGl0IHJlZmxlY3RzIGFsbCBjaGFuZ2VzIGluIHRoZSB1bmRlcmx5aW5nIHNldHMuCi8vLwovLy8gSWYgYW4gZWxlbWVudCBpcyBpbiBtdWx0aXBsZSBzZXRzIGFuZCB0aGUgb3V0ZXIgc2V0IGlzIG9yZGVyZWQsIHRoZSB2ZXJzaW9uCi8vLyBpbiB0aGUgZWFybGllc3QgaW5uZXIgc2V0IGlzIHByZWZlcnJlZC4gQ29tcG9uZW50IHNldHMgYXJlIGFzc3VtZWQgdG8gdXNlCi8vLyBgPT1gIGFuZCBgaGFzaENvZGVgIGZvciBlcXVhbGl0eS4KY2xhc3MgVW5pb25TZXQ8RT4gZXh0ZW5kcyBTZXRCYXNlPEU+IHdpdGggVW5tb2RpZmlhYmxlU2V0TWl4aW48RT4gewogIC8vLyBUaGUgc2V0IG9mIHNldHMgdGhhdCB0aGlzIHByb3ZpZGVzIGEgdmlldyBvZi4KICBmaW5hbCBTZXQ8U2V0PEU+PiBfc2V0czsKCiAgLy8vIFdoZXRoZXIgdGhlIHNldHMgaW4gW19zZXRzXSBhcmUgZ3VhcmFudGVlZCB0byBiZSBkaXNqb2ludC4KICBmaW5hbCBib29sIF9kaXNqb2ludDsKCiAgLy8vIENyZWF0ZXMgYSBuZXcgc2V0IHRoYXQncyBhIHZpZXcgb2YgdGhlIHVuaW9uIG9mIGFsbCBzZXRzIGluIFtzZXRzXS4KICAvLy8KICAvLy8gSWYgYW55IHNldHMgaW4gW3NldHNdIGNoYW5nZSwgdGhpcyBbVW5pb25TZXRdIHJlZmxlY3RzIHRoYXQgY2hhbmdlLiBJZiBhCiAgLy8vIG5ldyBzZXQgaXMgYWRkZWQgdG8gW3NldHNdLCB0aGlzIFtVbmlvblNldF0gcmVmbGVjdHMgdGhhdCBhcyB3ZWxsLgogIC8vLwogIC8vLyBJZiBbZGlzam9pbnRdIGlzIGB0cnVlYCwgdGhlbiBhbGwgY29tcG9uZW50IHNldHMgbXVzdCBiZSBkaXNqb2ludC4gVGhhdAogIC8vLyBpcywgdGhhdCB0aGV5IGNvbnRhaW4gbm8gZWxlbWVudHMgaW4gY29tbW9uLiBUaGlzIG1ha2VzIG1hbnkgb3BlcmF0aW9ucwogIC8vLyBpbmNsdWRpbmcgW2xlbmd0aF0gbW9yZSBlZmZpY2llbnQuIElmIHRoZSBjb21wb25lbnQgc2V0cyB0dXJuIG91dCBub3QgdG8KICAvLy8gYmUgZGlzam9pbnQsIHNvbWUgb3BlcmF0aW9ucyBtYXkgYmVoYXZlIGluY29uc2lzdGVudGx5LgogIFVuaW9uU2V0KHRoaXMuX3NldHMsIHtib29sIGRpc2pvaW50OiBmYWxzZX0pIDogX2Rpc2pvaW50ID0gZGlzam9pbnQ7CgogIC8vLyBDcmVhdGVzIGEgbmV3IHNldCB0aGF0J3MgYSB2aWV3IG9mIHRoZSB1bmlvbiBvZiBhbGwgc2V0cyBpbiBbc2V0c10uCiAgLy8vCiAgLy8vIElmIGFueSBzZXRzIGluIFtzZXRzXSBjaGFuZ2UsIHRoaXMgW1VuaW9uU2V0XSByZWZsZWN0cyB0aGF0IGNoYW5nZS4KICAvLy8gSG93ZXZlciwgdW5saWtlIFtuZXcgVW5pb25TZXRdLCB0aGlzIGNyZWF0ZXMgYSBjb3B5IG9mIGl0cyBwYXJhbWV0ZXIsIHNvCiAgLy8vIGNoYW5nZXMgaW4gW3NldHNdIGFyZW4ndCByZWZsZWN0ZWQgaW4gdGhpcyBbVW5pb25TZXRdLgogIC8vLwogIC8vLyBJZiBbZGlzam9pbnRdIGlzIGB0cnVlYCwgdGhlbiBhbGwgY29tcG9uZW50IHNldHMgbXVzdCBiZSBkaXNqb2ludC4gVGhhdAogIC8vLyBpcywgdGhhdCB0aGV5IGNvbnRhaW4gbm8gZWxlbWVudHMgaW4gY29tbW9uLiBUaGlzIG1ha2VzIG1hbnkgb3BlcmF0aW9ucwogIC8vLyBpbmNsdWRpbmcgW2xlbmd0aF0gbW9yZSBlZmZpY2llbnQuIElmIHRoZSBjb21wb25lbnQgc2V0cyB0dXJuIG91dCBub3QgdG8KICAvLy8gYmUgZGlzam9pbnQsIHNvbWUgb3BlcmF0aW9ucyBtYXkgYmVoYXZlIGluY29uc2lzdGVudGx5LgogIFVuaW9uU2V0LmZyb20oSXRlcmFibGU8U2V0PEU+PiBzZXRzLCB7Ym9vbCBkaXNqb2ludDogZmFsc2V9KQogICAgICA6IHRoaXMoc2V0cy50b1NldCgpLCBkaXNqb2ludDogZGlzam9pbnQpOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfZGlzam9pbnQKICAgICAgPyBfc2V0cy5mb2xkKDAsIChsZW5ndGgsIHNldCkgPT4gbGVuZ3RoICsgc2V0Lmxlbmd0aCkKICAgICAgOiBfaXRlcmFibGUubGVuZ3RoOwoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gX2l0ZXJhYmxlLml0ZXJhdG9yOwoKICAvLy8gUmV0dXJucyBhbiBpdGVyYWJsZSBvdmVyIHRoZSBjb250ZW50cyBvZiBhbGwgdGhlIHNldHMgaW4gW3RoaXNdLgogIEl0ZXJhYmxlPEU+IGdldCBfaXRlcmFibGUgPT4KICAgICAgX2Rpc2pvaW50ID8gX3NldHMuZXhwYW5kKChzZXQpID0+IHNldCkgOiBfZGVkdXBJdGVyYWJsZTsKCiAgLy8vIFJldHVybnMgYW4gaXRlcmFibGUgb3ZlciB0aGUgY29udGVudHMgb2YgYWxsIHRoZSBzZXRzIGluIFt0aGlzXSB0aGF0CiAgLy8vIGRlLWR1cGxpY2F0ZXMgZWxlbWVudHMuCiAgLy8vCiAgLy8vIElmIHRoZSBzZXRzIGFyZW4ndCBndWFyYW50ZWVkIHRvIGJlIGRpc2pvaW50LCB0aGlzIGtlZXBzIHRyYWNrIG9mIHRoZQogIC8vLyBlbGVtZW50cyB3ZSd2ZSBhbHJlYWR5IGVtaXR0ZWQgc28gdGhhdCB3ZSBjYW4gZGUtZHVwbGljYXRlIHRoZW0uCiAgSXRlcmFibGU8RT4gZ2V0IF9kZWR1cEl0ZXJhYmxlIHsKICAgIHZhciBzZWVuID0gbmV3IFNldDxFPigpOwogICAgcmV0dXJuIF9zZXRzLmV4cGFuZCgoc2V0KSA9PiBzZXQpLndoZXJlKChlbGVtZW50KSB7CiAgICAgIGlmIChzZWVuLmNvbnRhaW5zKGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7CiAgICAgIHNlZW4uYWRkKGVsZW1lbnQpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pOwogIH0KCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgPT4gX3NldHMuYW55KChzZXQpID0+IHNldC5jb250YWlucyhlbGVtZW50KSk7CgogIEUgbG9va3VwKE9iamVjdCBlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudCA9PSBudWxsKSByZXR1cm4gbnVsbDsKCiAgICByZXR1cm4gX3NldHMKICAgICAgICAubWFwKChzZXQpID0+IHNldC5sb29rdXAoZWxlbWVudCkpCiAgICAgICAgLmZpcnN0V2hlcmUoKHJlc3VsdCkgPT4gcmVzdWx0ICE9IG51bGwsIG9yRWxzZTogKCkgPT4gbnVsbCk7CiAgfQoKICBTZXQ8RT4gdG9TZXQoKSB7CiAgICB2YXIgcmVzdWx0ID0gbmV3IFNldDxFPigpOwogICAgZm9yICh2YXIgc2V0IGluIF9zZXRzKSB7CiAgICAgIHJlc3VsdC5hZGRBbGwoc2V0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CloATk48ARoBJQFHBE8EUE4mRDQbAUEYAUoGT0kGTk5PPkcBSgZKTz0GTk5PPj8wAR48GgEyAUcfPwFLHgZMRyMdODAZEwgEAU4BHSYBEStFBAETHx0aBhMEAgElcGFja2FnZTpjb2xsZWN0aW9uL3NyYy91bmlvbl9zZXQuZGFydEZzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL3VubW9kaWZpYWJsZV93cmFwcGVycy5kYXJ0mPEvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdlbXB0eV91bm1vZGlmaWFibGVfc2V0LmRhcnQnOwppbXBvcnQgJ3dyYXBwZXJzLmRhcnQnOwoKZXhwb3J0ICJkYXJ0OmNvbGxlY3Rpb24iIHNob3cgVW5tb2RpZmlhYmxlTGlzdFZpZXcsIFVubW9kaWZpYWJsZU1hcFZpZXc7CgovLy8gQSBmaXhlZC1sZW5ndGggbGlzdC4KLy8vCi8vLyBBIGBOb25Hcm93YWJsZUxpc3RWaWV3YCBjb250YWlucyBhIFtMaXN0XSBvYmplY3QgYW5kIGVuc3VyZXMgdGhhdAovLy8gaXRzIGxlbmd0aCBkb2VzIG5vdCBjaGFuZ2UuCi8vLyBNZXRob2RzIHRoYXQgd291bGQgY2hhbmdlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QsCi8vLyBzdWNoIGFzIFthZGRdIGFuZCBbcmVtb3ZlXSwgdGhyb3cgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgovLy8gQWxsIG90aGVyIG1ldGhvZHMgd29yayBkaXJlY3RseSBvbiB0aGUgdW5kZXJseWluZyBsaXN0LgovLy8KLy8vIFRoaXMgY2xhc3MgX2RvZXNfIGFsbG93IGNoYW5nZXMgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSB3cmFwcGVkIGxpc3QuCi8vLyBZb3UgY2FuLCBmb3IgZXhhbXBsZSwgW3NvcnRdIHRoZSBsaXN0LgovLy8gUGVybWl0dGVkIG9wZXJhdGlvbnMgZGVmZXIgdG8gdGhlIHdyYXBwZWQgbGlzdC4KY2xhc3MgTm9uR3Jvd2FibGVMaXN0VmlldzxFPiBleHRlbmRzIERlbGVnYXRpbmdMaXN0PEU+CiAgICB3aXRoIE5vbkdyb3dhYmxlTGlzdE1peGluPEU+IHsKICBOb25Hcm93YWJsZUxpc3RWaWV3KExpc3Q8RT4gbGlzdEJhc2UpIDogc3VwZXIobGlzdEJhc2UpOwp9CgovLy8gTWl4aW4gY2xhc3MgdGhhdCBpbXBsZW1lbnRzIGEgdGhyb3dpbmcgdmVyc2lvbiBvZiBhbGwgbGlzdCBvcGVyYXRpb25zIHRoYXQKLy8vIGNoYW5nZSB0aGUgTGlzdCdzIGxlbmd0aC4KYWJzdHJhY3QgY2xhc3MgTm9uR3Jvd2FibGVMaXN0TWl4aW48RT4gaW1wbGVtZW50cyBMaXN0PEU+IHsKICBzdGF0aWMgVCBfdGhyb3c8VD4oKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQ2Fubm90IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYXJlIGRpc2FsbG93ZWQuCiAgc2V0IGxlbmd0aChpbnQgbmV3TGVuZ3RoKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBhcmUgZGlzYWxsb3dlZC4KICBib29sIGFkZChFIHZhbHVlKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBpdGVyYWJsZSkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBFIGVsZW1lbnQpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgaW5zZXJ0QWxsKGludCBpbmRleCwgSXRlcmFibGU8RT4gaXRlcmFibGUpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGFyZSBkaXNhbGxvd2VkLgogIGJvb2wgcmVtb3ZlKE9iamVjdCB2YWx1ZSkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYXJlIGRpc2FsbG93ZWQuCiAgRSByZW1vdmVBdChpbnQgaW5kZXgpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGFyZSBkaXNhbGxvd2VkLgogIEUgcmVtb3ZlTGFzdCgpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgcmVtb3ZlUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIHJlcGxhY2VSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIGNsZWFyKCkgPT4gX3Rocm93KCk7Cn0KCi8vLyBBbiB1bm1vZGlmaWFibGUgc2V0LgovLy8KLy8vIEFuIFVubW9kaWZpYWJsZVNldFZpZXcgY29udGFpbnMgYSBbU2V0XSBvYmplY3QgYW5kIGVuc3VyZXMKLy8vIHRoYXQgaXQgZG9lcyBub3QgY2hhbmdlLgovLy8gTWV0aG9kcyB0aGF0IHdvdWxkIGNoYW5nZSB0aGUgc2V0LAovLy8gc3VjaCBhcyBbYWRkXSBhbmQgW3JlbW92ZV0sIHRocm93IGFuIFtVbnN1cHBvcnRlZEVycm9yXS4KLy8vIFBlcm1pdHRlZCBvcGVyYXRpb25zIGRlZmVyIHRvIHRoZSB3cmFwcGVkIHNldC4KY2xhc3MgVW5tb2RpZmlhYmxlU2V0VmlldzxFPiBleHRlbmRzIERlbGVnYXRpbmdTZXQ8RT4KICAgIHdpdGggVW5tb2RpZmlhYmxlU2V0TWl4aW48RT4gewogIFVubW9kaWZpYWJsZVNldFZpZXcoU2V0PEU+IHNldEJhc2UpIDogc3VwZXIoc2V0QmFzZSk7CgogIC8vLyBBbiB1bm1vZGlmaWFibGUgZW1wdHkgc2V0LgogIC8vLwogIC8vLyBUaGlzIGlzIHRoZSBzYW1lIGFzIGBuZXcgVW5tb2RpZmlhYmxlU2V0VmlldyhuZXcgU2V0KCkpYCwgZXhjZXB0IHRoYXQgaXQKICAvLy8gY2FuIGJlIHVzZWQgaW4gY29uc3QgY29udGV4dHMuCiAgY29uc3QgZmFjdG9yeSBVbm1vZGlmaWFibGVTZXRWaWV3LmVtcHR5KCkgPSBFbXB0eVVubW9kaWZpYWJsZVNldDxFPjsKfQoKLy8vIE1peGluIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBhIHRocm93aW5nIHZlcnNpb24gb2YgYWxsIHNldCBvcGVyYXRpb25zIHRoYXQKLy8vIGNoYW5nZSB0aGUgU2V0LgphYnN0cmFjdCBjbGFzcyBVbm1vZGlmaWFibGVTZXRNaXhpbjxFPiBpbXBsZW1lbnRzIFNldDxFPiB7CiAgc3RhdGljIFQgX3Rocm93PFQ+KCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIFNldCIpOwogIH0KCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIHNldCBhcmUgZGlzYWxsb3dlZC4KICBib29sIGFkZChFIHZhbHVlKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIHNldCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cykgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBzZXQgYXJlIGRpc2FsbG93ZWQuCiAgYm9vbCByZW1vdmUoT2JqZWN0IHZhbHVlKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIHNldCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIHJlbW92ZUFsbChJdGVyYWJsZSBlbGVtZW50cykgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBzZXQgYXJlIGRpc2FsbG93ZWQuCiAgdm9pZCByZXRhaW5BbGwoSXRlcmFibGUgZWxlbWVudHMpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgc2V0IGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgc2V0IGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgc2V0IGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgY2xlYXIoKSA9PiBfdGhyb3coKTsKfQoKLy8vIE1peGluIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBhIHRocm93aW5nIHZlcnNpb24gb2YgYWxsIG1hcCBvcGVyYXRpb25zIHRoYXQKLy8vIGNoYW5nZSB0aGUgTWFwLgphYnN0cmFjdCBjbGFzcyBVbm1vZGlmaWFibGVNYXBNaXhpbjxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgc3RhdGljIFQgX3Rocm93PFQ+KCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIE1hcCIpOwogIH0KCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIG1hcCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBtYXAgYXJlIGRpc2FsbG93ZWQuCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIG1hcCBhcmUgZGlzYWxsb3dlZC4KICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbWFwIGFyZSBkaXNhbGxvd2VkLgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpID0+IF90aHJvdygpOwoKICAvLy8gVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXTsKICAvLy8gb3BlcmF0aW9ucyB0aGF0IGNoYW5nZSB0aGUgbWFwIGFyZSBkaXNhbGxvd2VkLgogIHZvaWQgY2xlYXIoKSA9PiBfdGhyb3coKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl07CiAgLy8vIG9wZXJhdGlvbnMgdGhhdCBjaGFuZ2UgdGhlIG1hcCBhcmUgZGlzYWxsb3dlZC4KICBzZXQgZmlyc3QoXykgPT4gX3Rocm93KCk7CgogIC8vLyBUaHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdOwogIC8vLyBvcGVyYXRpb25zIHRoYXQgY2hhbmdlIHRoZSBtYXAgYXJlIGRpc2FsbG93ZWQuCiAgc2V0IGxhc3QoXykgPT4gX3Rocm93KCk7Cn0KgLUATk48ASYYAUkBGQRGIDY9PARJKzQ3IzsCAU8ePBkgPAQBJEQpASREIQEkRDEBJEQxASREPwEkRCkBJEQlASREHgEkRDYBJEQ2ASRENAEkREsBJEQcAgEZBD8dJz0zNiM4ASEGTyVHAgFOFDsZRQQBJDUhASQ1MQEkNSkBJDUxASQ1MQEkNTYBJDU2ASQ1HAIBThRBGUUEASQ1MQEkNTIBJDUsASQ1JAEkNRwBJDUcASQ1GwIBMXBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvdW5tb2RpZmlhYmxlX3dyYXBwZXJzLmRhcnRFc2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy91bmlvbl9zZXRfY29udHJvbGxlci5kYXJ0h1AvLyBDb3B5cmlnaHQgKGMpIDIwMTYsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICd1bmlvbl9zZXQuZGFydCc7CgovLy8gQSBjb250cm9sbGVyIHRoYXQgZXhwb3NlcyBhIHZpZXcgb2YgdGhlIHVuaW9uIG9mIGEgY29sbGVjdGlvbiBvZiBzZXRzLgovLy8KLy8vIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBjbGFzcyBmb3IgY3JlYXRpbmcgYSBbVW5pb25TZXRdIHdob3NlIGNvbnRlbnRzIGNoYW5nZQovLy8gb3ZlciB0aGUgbGlmZXRpbWUgb2YgYSBjbGFzcy4gRm9yIGV4YW1wbGU6Ci8vLwovLy8gYGBgZGFydAovLy8gY2xhc3MgRW5naW5lIHsKLy8vICAgU2V0PFRlc3Q+IGdldCBhY3RpdmVUZXN0cyA9PiBfYWN0aXZlVGVzdHNHcm91cC5zZXQ7Ci8vLyAgIGZpbmFsIF9hY3RpdmVUZXN0c0dyb3VwID0gbmV3IFVuaW9uU2V0Q29udHJvbGxlcjxUZXN0PigpOwovLy8KLy8vICAgdm9pZCBhZGRTdWl0ZShTdWl0ZSBzdWl0ZSkgewovLy8gICAgIF9hY3RpdmVUZXN0c0dyb3VwLmFkZChzdWl0ZS50ZXN0cyk7Ci8vLyAgICAgX3J1blN1aXRlKHN1aXRlKTsKLy8vICAgICBfYWN0aXZlVGVzdHNHcm91cC5yZW1vdmUoc3VpdGUudGVzdHMpOwovLy8gICB9Ci8vLyB9Ci8vLyBgYGAKY2xhc3MgVW5pb25TZXRDb250cm9sbGVyPEU+IHsKICAvLy8gVGhlIFtVbmlvblNldF0gdGhhdCBwcm92aWRlcyBhIHZpZXcgb2YgdGhlIHVuaW9uIG9mIHNldHMgaW4gW3RoaXNdLgogIFVuaW9uU2V0PEU+IGdldCBzZXQgPT4gX3NldDsKICBVbmlvblNldDxFPiBfc2V0OwoKICAvLy8gVGhlIHNldHMgd2hvc2UgdW5pb24gaXMgZXhwb3NlZCB0aHJvdWdoIFtzZXRdLgogIGZpbmFsIF9zZXRzID0gbmV3IFNldDxTZXQ8RT4+KCk7CgogIC8vLyBDcmVhdGVzIGEgc2V0IG9mIHNldHMgdGhhdCBwcm92aWRlcyBhIHZpZXcgb2YgdGhlIHVuaW9uIG9mIHRob3NlIHNldHMuCiAgLy8vCiAgLy8vIElmIFtkaXNqb2ludF0gaXMgYHRydWVgLCB0aGlzIGFzc3VtZXMgdGhhdCBhbGwgY29tcG9uZW50IHNldHMgYXJlCiAgLy8vIGRpc2pvaW504oCUdGhhdCBpcywgdGhhdCB0aGV5IGNvbnRhaW4gbm8gZWxlbWVudHMgaW4gY29tbW9uLiBUaGlzIG1ha2VzCiAgLy8vIG1hbnkgb3BlcmF0aW9ucyBpbmNsdWRpbmcgW2xlbmd0aF0gbW9yZSBlZmZpY2llbnQuCiAgVW5pb25TZXRDb250cm9sbGVyKHtib29sIGRpc2pvaW50OiBmYWxzZX0pIHsKICAgIF9zZXQgPSBuZXcgVW5pb25TZXQ8RT4oX3NldHMsIGRpc2pvaW50OiBkaXNqb2ludCk7CiAgfQoKICAvLy8gQWRkcyB0aGUgY29udGVudHMgb2YgW2NvbXBvbmVudF0gdG8gW3NldF0uCiAgLy8vCiAgLy8vIElmIHRoZSBjb250ZW50cyBvZiBbY29tcG9uZW50XSBjaGFuZ2Ugb3ZlciB0aW1lLCBbc2V0XSB3aWxsIGNoYW5nZQogIC8vLyBhY2NvcmRpbmdseS4KICB2b2lkIGFkZChTZXQ8RT4gY29tcG9uZW50KSB7CiAgICBfc2V0cy5hZGQoY29tcG9uZW50KTsKICB9CgogIC8vLyBSZW1vdmVzIHRoZSBjb250ZW50cyBvZiBbY29tcG9uZW50XSB0byBbc2V0XS4KICAvLy8KICAvLy8gSWYgYW5vdGhlciBzZXQgaW4gW3RoaXNdIGhhcyBvdmVybGFwcGluZyBlbGVtZW50cyB3aXRoIFtjb21wb25lbnRdLCB0aG9zZQogIC8vLyBlbGVtZW50cyB3aWxsIHJlbWFpbiBpbiBbc2V0XS4KICBib29sIHJlbW92ZShTZXQ8RT4gY29tcG9uZW50KSA9PiBfc2V0cy5yZW1vdmUoY29tcG9uZW50KTsKfQo4AE5OPAEZAUsEUC8EDBM6QAQjLBovCAYIHkofFAE1IwFNBkhMOS83BAExBkkTHxoEATQGUCU8AgEwcGFja2FnZTpjb2xsZWN0aW9uL3NyYy91bmlvbl9zZXRfY29udHJvbGxlci5kYXJ0OXNka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jb2xsZWN0aW9uL2xpYi9zcmMvd3JhcHBlcnMuZGFydMAAU4QvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iOwppbXBvcnQgImRhcnQ6bWF0aCIgYXMgbWF0aDsKCmltcG9ydCAidW5tb2RpZmlhYmxlX3dyYXBwZXJzLmRhcnQiOwoKdHlwZWRlZiBLIF9LZXlGb3JWYWx1ZTxLLCBWPihWIHZhbHVlKTsKCi8vLyBBIGJhc2UgY2xhc3MgZm9yIGRlbGVnYXRpbmcgaXRlcmFibGVzLgovLy8KLy8vIFN1YmNsYXNzZXMgY2FuIHByb3ZpZGUgYSBbX2Jhc2VdIHRoYXQgc2hvdWxkIGJlIGRlbGVnYXRlZCB0by4gVW5saWtlCi8vLyBbRGVsZWdhdGluZ0l0ZXJhYmxlXSwgdGhpcyBhbGxvd3MgdGhlIGJhc2UgdG8gYmUgY3JlYXRlZCBvbiBkZW1hbmQuCmFic3RyYWN0IGNsYXNzIF9EZWxlZ2F0aW5nSXRlcmFibGVCYXNlPEU+IGltcGxlbWVudHMgSXRlcmFibGU8RT4gewogIEl0ZXJhYmxlPEU+IGdldCBfYmFzZTsKCiAgY29uc3QgX0RlbGVnYXRpbmdJdGVyYWJsZUJhc2UoKTsKCiAgYm9vbCBhbnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IF9iYXNlLmFueSh0ZXN0KTsKCiAgSXRlcmFibGU8VD4gY2FzdDxUPigpID0+IF9iYXNlLmNhc3Q8VD4oKTsKCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgPT4gX2Jhc2UuY29udGFpbnMoZWxlbWVudCk7CgogIEUgZWxlbWVudEF0KGludCBpbmRleCkgPT4gX2Jhc2UuZWxlbWVudEF0KGluZGV4KTsKCiAgYm9vbCBldmVyeShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gX2Jhc2UuZXZlcnkodGVzdCk7CgogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKEUgZWxlbWVudCkpID0+IF9iYXNlLmV4cGFuZChmKTsKCiAgRSBnZXQgZmlyc3QgPT4gX2Jhc2UuZmlyc3Q7CgogIEUgZmlyc3RXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSA9PgogICAgICBfYmFzZS5maXJzdFdoZXJlKHRlc3QsIG9yRWxzZTogb3JFbHNlKTsKCiAgVCBmb2xkPFQ+KFQgaW5pdGlhbFZhbHVlLCBUIGNvbWJpbmUoVCBwcmV2aW91c1ZhbHVlLCBFIGVsZW1lbnQpKSA9PgogICAgICBfYmFzZS5mb2xkKGluaXRpYWxWYWx1ZSwgY29tYmluZSk7CgogIEl0ZXJhYmxlPEU+IGZvbGxvd2VkQnkoSXRlcmFibGU8RT4gb3RoZXIpID0+IF9iYXNlLmZvbGxvd2VkQnkob3RoZXIpOwoKICB2b2lkIGZvckVhY2godm9pZCBmKEUgZWxlbWVudCkpID0+IF9iYXNlLmZvckVhY2goZik7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2Jhc2UuaXNFbXB0eTsKCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfYmFzZS5pc05vdEVtcHR5OwoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gX2Jhc2UuaXRlcmF0b3I7CgogIFN0cmluZyBqb2luKFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSA9PiBfYmFzZS5qb2luKHNlcGFyYXRvcik7CgogIEUgZ2V0IGxhc3QgPT4gX2Jhc2UubGFzdDsKCiAgRSBsYXN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgPT4KICAgICAgX2Jhc2UubGFzdFdoZXJlKHRlc3QsIG9yRWxzZTogb3JFbHNlKTsKCiAgaW50IGdldCBsZW5ndGggPT4gX2Jhc2UubGVuZ3RoOwoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZWxlbWVudCkpID0+IF9iYXNlLm1hcChmKTsKCiAgRSByZWR1Y2UoRSBjb21iaW5lKEUgdmFsdWUsIEUgZWxlbWVudCkpID0+IF9iYXNlLnJlZHVjZShjb21iaW5lKTsKCiAgQGRlcHJlY2F0ZWQKICBJdGVyYWJsZTxUPiByZXR5cGU8VD4oKSA9PiBjYXN0PFQ+KCk7CgogIEUgZ2V0IHNpbmdsZSA9PiBfYmFzZS5zaW5nbGU7CgogIEUgc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgcmV0dXJuIF9iYXNlLnNpbmdsZVdoZXJlKHRlc3QsIG9yRWxzZTogb3JFbHNlKTsKICB9CgogIEl0ZXJhYmxlPEU+IHNraXAoaW50IG4pID0+IF9iYXNlLnNraXAobik7CgogIEl0ZXJhYmxlPEU+IHNraXBXaGlsZShib29sIHRlc3QoRSB2YWx1ZSkpID0+IF9iYXNlLnNraXBXaGlsZSh0ZXN0KTsKCiAgSXRlcmFibGU8RT4gdGFrZShpbnQgbikgPT4gX2Jhc2UudGFrZShuKTsKCiAgSXRlcmFibGU8RT4gdGFrZVdoaWxlKGJvb2wgdGVzdChFIHZhbHVlKSkgPT4gX2Jhc2UudGFrZVdoaWxlKHRlc3QpOwoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pID0+IF9iYXNlLnRvTGlzdChncm93YWJsZTogZ3Jvd2FibGUpOwoKICBTZXQ8RT4gdG9TZXQoKSA9PiBfYmFzZS50b1NldCgpOwoKICBJdGVyYWJsZTxFPiB3aGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gX2Jhc2Uud2hlcmUodGVzdCk7CgogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IF9iYXNlLndoZXJlVHlwZTxUPigpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfYmFzZS50b1N0cmluZygpOwp9CgovLy8gQW4gW0l0ZXJhYmxlXSB0aGF0IGRlbGVnYXRlcyBhbGwgb3BlcmF0aW9ucyB0byBhIGJhc2UgaXRlcmFibGUuCi8vLwovLy8gVGhpcyBjbGFzcyBjYW4gYmUgdXNlZCB0byBoaWRlIG5vbi1gSXRlcmFibGVgIG1ldGhvZHMgb2YgYW4gaXRlcmFibGUgb2JqZWN0LAovLy8gb3IgaXQgY2FuIGJlIGV4dGVuZGVkIHRvIGFkZCBleHRyYSBmdW5jdGlvbmFsaXR5IG9uIHRvcCBvZiBhbiBleGlzdGluZwovLy8gaXRlcmFibGUgb2JqZWN0LgpjbGFzcyBEZWxlZ2F0aW5nSXRlcmFibGU8RT4gZXh0ZW5kcyBfRGVsZWdhdGluZ0l0ZXJhYmxlQmFzZTxFPiB7CiAgZmluYWwgSXRlcmFibGU8RT4gX2Jhc2U7CgogIC8vLyBDcmVhdGVzIGEgd3JhcHBlciB0aGF0IGZvcndhcmRzIG9wZXJhdGlvbnMgdG8gW2Jhc2VdLgogIGNvbnN0IERlbGVnYXRpbmdJdGVyYWJsZShJdGVyYWJsZTxFPiBiYXNlKSA6IF9iYXNlID0gYmFzZTsKCiAgLy8vIENyZWF0ZXMgYSB3cmFwcGVyIHRoYXQgYXNzZXJ0cyB0aGUgdHlwZXMgb2YgdmFsdWVzIGluIFtiYXNlXS4KICAvLy8KICAvLy8gVGhpcyBzb3VuZGx5IGNvbnZlcnRzIGFuIFtJdGVyYWJsZV0gd2l0aG91dCBhIGdlbmVyaWMgdHlwZSB0byBhbgogIC8vLyBgSXRlcmFibGU8RT5gIGJ5IGFzc2VydGluZyB0aGF0IGl0cyBlbGVtZW50cyBhcmUgaW5zdGFuY2VzIG9mIGBFYCB3aGVuZXZlcgogIC8vLyB0aGV5J3JlIGFjY2Vzc2VkLiBJZiB0aGV5J3JlIG5vdCwgaXQgdGhyb3dzIGEgW0Nhc3RFcnJvcl0uCiAgLy8vCiAgLy8vIFRoaXMgZm9yd2FyZHMgYWxsIG9wZXJhdGlvbnMgdG8gW2Jhc2VdLCBzbyBhbnkgY2hhbmdlcyBpbiBbYmFzZV0gd2lsbCBiZQogIC8vLyByZWZsZWN0ZWQgaW4gW3RoaXNdLiBJZiBbYmFzZV0gaXMgYWxyZWFkeSBhbiBgSXRlcmFibGU8RT5gLCBpdCdzIHJldHVybmVkCiAgLy8vIHVubW9kaWZpZWQuCiAgQERlcHJlY2F0ZWQoJ1VzZSBpdGVyYWJsZS5jYXN0PEU+IGluc3RlYWQuJykKICBzdGF0aWMgSXRlcmFibGU8RT4gdHlwZWQ8RT4oSXRlcmFibGUgYmFzZSkgPT4gYmFzZS5jYXN0PEU+KCk7Cn0KCi8vLyBBIFtMaXN0XSB0aGF0IGRlbGVnYXRlcyBhbGwgb3BlcmF0aW9ucyB0byBhIGJhc2UgbGlzdC4KLy8vCi8vLyBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGhpZGUgbm9uLWBMaXN0YCBtZXRob2RzIG9mIGEgbGlzdCBvYmplY3QsIG9yIGl0Ci8vLyBjYW4gYmUgZXh0ZW5kZWQgdG8gYWRkIGV4dHJhIGZ1bmN0aW9uYWxpdHkgb24gdG9wIG9mIGFuIGV4aXN0aW5nIGxpc3QKLy8vIG9iamVjdC4KY2xhc3MgRGVsZWdhdGluZ0xpc3Q8RT4gZXh0ZW5kcyBEZWxlZ2F0aW5nSXRlcmFibGU8RT4gaW1wbGVtZW50cyBMaXN0PEU+IHsKICBjb25zdCBEZWxlZ2F0aW5nTGlzdChMaXN0PEU+IGJhc2UpIDogc3VwZXIoYmFzZSk7CgogIC8vLyBDcmVhdGVzIGEgd3JhcHBlciB0aGF0IGFzc2VydHMgdGhlIHR5cGVzIG9mIHZhbHVlcyBpbiBbYmFzZV0uCiAgLy8vCiAgLy8vIFRoaXMgc291bmRseSBjb252ZXJ0cyBhIFtMaXN0XSB3aXRob3V0IGEgZ2VuZXJpYyB0eXBlIHRvIGEgYExpc3Q8RT5gIGJ5CiAgLy8vIGFzc2VydGluZyB0aGF0IGl0cyBlbGVtZW50cyBhcmUgaW5zdGFuY2VzIG9mIGBFYCB3aGVuZXZlciB0aGV5J3JlCiAgLy8vIGFjY2Vzc2VkLiBJZiB0aGV5J3JlIG5vdCwgaXQgdGhyb3dzIGEgW0Nhc3RFcnJvcl0uIE5vdGUgdGhhdCBldmVuIGlmIGFuCiAgLy8vIG9wZXJhdGlvbiB0aHJvd3MgYSBbQ2FzdEVycm9yXSwgaXQgbWF5IHN0aWxsIG11dGF0ZSB0aGUgdW5kZXJseWluZwogIC8vLyBjb2xsZWN0aW9uLgogIC8vLwogIC8vLyBUaGlzIGZvcndhcmRzIGFsbCBvcGVyYXRpb25zIHRvIFtiYXNlXSwgc28gYW55IGNoYW5nZXMgaW4gW2Jhc2VdIHdpbGwgYmUKICAvLy8gcmVmbGVjdGVkIGluIFt0aGlzXS4gSWYgW2Jhc2VdIGlzIGFscmVhZHkgYSBgTGlzdDxFPmAsIGl0J3MgcmV0dXJuZWQKICAvLy8gdW5tb2RpZmllZC4KICBARGVwcmVjYXRlZCgnVXNlIGxpc3QuY2FzdDxFPiBpbnN0ZWFkLicpCiAgc3RhdGljIExpc3Q8RT4gdHlwZWQ8RT4oTGlzdCBiYXNlKSA9PiBiYXNlLmNhc3Q8RT4oKTsKCiAgTGlzdDxFPiBnZXQgX2xpc3RCYXNlID0+IF9iYXNlOwoKICBFIG9wZXJhdG9yIFtdKGludCBpbmRleCkgPT4gX2xpc3RCYXNlW2luZGV4XTsKCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBFIHZhbHVlKSB7CiAgICBfbGlzdEJhc2VbaW5kZXhdID0gdmFsdWU7CiAgfQoKICBMaXN0PEU+IG9wZXJhdG9yICsoTGlzdDxFPiBvdGhlcikgPT4gX2xpc3RCYXNlICsgb3RoZXI7CgogIHZvaWQgYWRkKEUgdmFsdWUpIHsKICAgIF9saXN0QmFzZS5hZGQodmFsdWUpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIF9saXN0QmFzZS5hZGRBbGwoaXRlcmFibGUpOwogIH0KCiAgTWFwPGludCwgRT4gYXNNYXAoKSA9PiBfbGlzdEJhc2UuYXNNYXAoKTsKCiAgTGlzdDxUPiBjYXN0PFQ+KCkgPT4gX2xpc3RCYXNlLmNhc3Q8VD4oKTsKCiAgdm9pZCBjbGVhcigpIHsKICAgIF9saXN0QmFzZS5jbGVhcigpOwogIH0KCiAgdm9pZCBmaWxsUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBbRSBmaWxsVmFsdWVdKSB7CiAgICBfbGlzdEJhc2UuZmlsbFJhbmdlKHN0YXJ0LCBlbmQsIGZpbGxWYWx1ZSk7CiAgfQoKICBzZXQgZmlyc3QoRSB2YWx1ZSkgewogICAgaWYgKHRoaXMuaXNFbXB0eSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoMCwgdGhpcyk7CiAgICB0aGlzWzBdID0gdmFsdWU7CiAgfQoKICBJdGVyYWJsZTxFPiBnZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpID0+IF9saXN0QmFzZS5nZXRSYW5nZShzdGFydCwgZW5kKTsKCiAgaW50IGluZGV4T2YoRSBlbGVtZW50LCBbaW50IHN0YXJ0ID0gMF0pID0+IF9saXN0QmFzZS5pbmRleE9mKGVsZW1lbnQsIHN0YXJ0KTsKCiAgaW50IGluZGV4V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIFtpbnQgc3RhcnQgPSAwXSkgPT4KICAgICAgX2xpc3RCYXNlLmluZGV4V2hlcmUodGVzdCwgc3RhcnQpOwoKICB2b2lkIGluc2VydChpbnQgaW5kZXgsIEUgZWxlbWVudCkgewogICAgX2xpc3RCYXNlLmluc2VydChpbmRleCwgZWxlbWVudCk7CiAgfQoKICBpbnNlcnRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgX2xpc3RCYXNlLmluc2VydEFsbChpbmRleCwgaXRlcmFibGUpOwogIH0KCiAgc2V0IGxhc3QoRSB2YWx1ZSkgewogICAgaWYgKHRoaXMuaXNFbXB0eSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IuaW5kZXgoMCwgdGhpcyk7CiAgICB0aGlzW3RoaXMubGVuZ3RoIC0gMV0gPSB2YWx1ZTsKICB9CgogIGludCBsYXN0SW5kZXhPZihFIGVsZW1lbnQsIFtpbnQgc3RhcnRdKSA9PgogICAgICBfbGlzdEJhc2UubGFzdEluZGV4T2YoZWxlbWVudCwgc3RhcnQpOwoKICBpbnQgbGFzdEluZGV4V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIFtpbnQgc3RhcnRdKSA9PgogICAgICBfbGlzdEJhc2UubGFzdEluZGV4V2hlcmUodGVzdCwgc3RhcnQpOwoKICBzZXQgbGVuZ3RoKGludCBuZXdMZW5ndGgpIHsKICAgIF9saXN0QmFzZS5sZW5ndGggPSBuZXdMZW5ndGg7CiAgfQoKICBib29sIHJlbW92ZShPYmplY3QgdmFsdWUpID0+IF9saXN0QmFzZS5yZW1vdmUodmFsdWUpOwoKICBFIHJlbW92ZUF0KGludCBpbmRleCkgPT4gX2xpc3RCYXNlLnJlbW92ZUF0KGluZGV4KTsKCiAgRSByZW1vdmVMYXN0KCkgPT4gX2xpc3RCYXNlLnJlbW92ZUxhc3QoKTsKCiAgdm9pZCByZW1vdmVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIF9saXN0QmFzZS5yZW1vdmVSYW5nZShzdGFydCwgZW5kKTsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIF9saXN0QmFzZS5yZW1vdmVXaGVyZSh0ZXN0KTsKICB9CgogIHZvaWQgcmVwbGFjZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIF9saXN0QmFzZS5yZXBsYWNlUmFuZ2Uoc3RhcnQsIGVuZCwgaXRlcmFibGUpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2xpc3RCYXNlLnJldGFpbldoZXJlKHRlc3QpOwogIH0KCiAgQGRlcHJlY2F0ZWQKICBMaXN0PFQ+IHJldHlwZTxUPigpID0+IGNhc3Q8VD4oKTsKCiAgSXRlcmFibGU8RT4gZ2V0IHJldmVyc2VkID0+IF9saXN0QmFzZS5yZXZlcnNlZDsKCiAgdm9pZCBzZXRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxFPiBpdGVyYWJsZSkgewogICAgX2xpc3RCYXNlLnNldEFsbChpbmRleCwgaXRlcmFibGUpOwogIH0KCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlLCBbaW50IHNraXBDb3VudCA9IDBdKSB7CiAgICBfbGlzdEJhc2Uuc2V0UmFuZ2Uoc3RhcnQsIGVuZCwgaXRlcmFibGUsIHNraXBDb3VudCk7CiAgfQoKICB2b2lkIHNodWZmbGUoW21hdGguUmFuZG9tIHJhbmRvbV0pIHsKICAgIF9saXN0QmFzZS5zaHVmZmxlKHJhbmRvbSk7CiAgfQoKICB2b2lkIHNvcnQoW2ludCBjb21wYXJlKEUgYSwgRSBiKV0pIHsKICAgIF9saXN0QmFzZS5zb3J0KGNvbXBhcmUpOwogIH0KCiAgTGlzdDxFPiBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKSA9PiBfbGlzdEJhc2Uuc3VibGlzdChzdGFydCwgZW5kKTsKfQoKLy8vIEEgW1NldF0gdGhhdCBkZWxlZ2F0ZXMgYWxsIG9wZXJhdGlvbnMgdG8gYSBiYXNlIHNldC4KLy8vCi8vLyBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIGhpZGUgbm9uLWBTZXRgIG1ldGhvZHMgb2YgYSBzZXQgb2JqZWN0LCBvciBpdCBjYW4KLy8vIGJlIGV4dGVuZGVkIHRvIGFkZCBleHRyYSBmdW5jdGlvbmFsaXR5IG9uIHRvcCBvZiBhbiBleGlzdGluZyBzZXQgb2JqZWN0LgpjbGFzcyBEZWxlZ2F0aW5nU2V0PEU+IGV4dGVuZHMgRGVsZWdhdGluZ0l0ZXJhYmxlPEU+IGltcGxlbWVudHMgU2V0PEU+IHsKICBjb25zdCBEZWxlZ2F0aW5nU2V0KFNldDxFPiBiYXNlKSA6IHN1cGVyKGJhc2UpOwoKICAvLy8gQ3JlYXRlcyBhIHdyYXBwZXIgdGhhdCBhc3NlcnRzIHRoZSB0eXBlcyBvZiB2YWx1ZXMgaW4gW2Jhc2VdLgogIC8vLwogIC8vLyBUaGlzIHNvdW5kbHkgY29udmVydHMgYSBbU2V0XSB3aXRob3V0IGEgZ2VuZXJpYyB0eXBlIHRvIGEgYFNldDxFPmAgYnkKICAvLy8gYXNzZXJ0aW5nIHRoYXQgaXRzIGVsZW1lbnRzIGFyZSBpbnN0YW5jZXMgb2YgYEVgIHdoZW5ldmVyIHRoZXkncmUKICAvLy8gYWNjZXNzZWQuIElmIHRoZXkncmUgbm90LCBpdCB0aHJvd3MgYSBbQ2FzdEVycm9yXS4gTm90ZSB0aGF0IGV2ZW4gaWYgYW4KICAvLy8gb3BlcmF0aW9uIHRocm93cyBhIFtDYXN0RXJyb3JdLCBpdCBtYXkgc3RpbGwgbXV0YXRlIHRoZSB1bmRlcmx5aW5nCiAgLy8vIGNvbGxlY3Rpb24uCiAgLy8vCiAgLy8vIFRoaXMgZm9yd2FyZHMgYWxsIG9wZXJhdGlvbnMgdG8gW2Jhc2VdLCBzbyBhbnkgY2hhbmdlcyBpbiBbYmFzZV0gd2lsbCBiZQogIC8vLyByZWZsZWN0ZWQgaW4gW3RoaXNdLiBJZiBbYmFzZV0gaXMgYWxyZWFkeSBhIGBTZXQ8RT5gLCBpdCdzIHJldHVybmVkCiAgLy8vIHVubW9kaWZpZWQuCiAgQERlcHJlY2F0ZWQoJ1VzZSBzZXQuY2FzdDxFPiBpbnN0ZWFkLicpCiAgc3RhdGljIFNldDxFPiB0eXBlZDxFPihTZXQgYmFzZSkgPT4gYmFzZS5jYXN0PEU+KCk7CgogIFNldDxFPiBnZXQgX3NldEJhc2UgPT4gX2Jhc2U7CgogIGJvb2wgYWRkKEUgdmFsdWUpID0+IF9zZXRCYXNlLmFkZCh2YWx1ZSk7CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSB7CiAgICBfc2V0QmFzZS5hZGRBbGwoZWxlbWVudHMpOwogIH0KCiAgU2V0PFQ+IGNhc3Q8VD4oKSA9PiBfc2V0QmFzZS5jYXN0PFQ+KCk7CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfc2V0QmFzZS5jbGVhcigpOwogIH0KCiAgYm9vbCBjb250YWluc0FsbChJdGVyYWJsZTxPYmplY3Q+IG90aGVyKSA9PiBfc2V0QmFzZS5jb250YWluc0FsbChvdGhlcik7CgogIFNldDxFPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSA9PiBfc2V0QmFzZS5kaWZmZXJlbmNlKG90aGVyKTsKCiAgU2V0PEU+IGludGVyc2VjdGlvbihTZXQ8T2JqZWN0PiBvdGhlcikgPT4gX3NldEJhc2UuaW50ZXJzZWN0aW9uKG90aGVyKTsKCiAgRSBsb29rdXAoT2JqZWN0IGVsZW1lbnQpID0+IF9zZXRCYXNlLmxvb2t1cChlbGVtZW50KTsKCiAgYm9vbCByZW1vdmUoT2JqZWN0IHZhbHVlKSA9PiBfc2V0QmFzZS5yZW1vdmUodmFsdWUpOwoKICB2b2lkIHJlbW92ZUFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICBfc2V0QmFzZS5yZW1vdmVBbGwoZWxlbWVudHMpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX3NldEJhc2UucmVtb3ZlV2hlcmUodGVzdCk7CiAgfQoKICB2b2lkIHJldGFpbkFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICBfc2V0QmFzZS5yZXRhaW5BbGwoZWxlbWVudHMpOwogIH0KCiAgQGRlcHJlY2F0ZWQKICBTZXQ8VD4gcmV0eXBlPFQ+KCkgPT4gY2FzdDxUPigpOwoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBfc2V0QmFzZS5yZXRhaW5XaGVyZSh0ZXN0KTsKICB9CgogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpID0+IF9zZXRCYXNlLnVuaW9uKG90aGVyKTsKCiAgU2V0PEU+IHRvU2V0KCkgPT4gbmV3IERlbGVnYXRpbmdTZXQ8RT4oX3NldEJhc2UudG9TZXQoKSk7Cn0KCi8vLyBBIFtRdWV1ZV0gdGhhdCBkZWxlZ2F0ZXMgYWxsIG9wZXJhdGlvbnMgdG8gYSBiYXNlIHF1ZXVlLgovLy8KLy8vIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gaGlkZSBub24tYFF1ZXVlYCBtZXRob2RzIG9mIGEgcXVldWUgb2JqZWN0LCBvciBpdAovLy8gY2FuIGJlIGV4dGVuZGVkIHRvIGFkZCBleHRyYSBmdW5jdGlvbmFsaXR5IG9uIHRvcCBvZiBhbiBleGlzdGluZyBxdWV1ZQovLy8gb2JqZWN0LgpjbGFzcyBEZWxlZ2F0aW5nUXVldWU8RT4gZXh0ZW5kcyBEZWxlZ2F0aW5nSXRlcmFibGU8RT4gaW1wbGVtZW50cyBRdWV1ZTxFPiB7CiAgY29uc3QgRGVsZWdhdGluZ1F1ZXVlKFF1ZXVlPEU+IHF1ZXVlKSA6IHN1cGVyKHF1ZXVlKTsKCiAgLy8vIENyZWF0ZXMgYSB3cmFwcGVyIHRoYXQgYXNzZXJ0cyB0aGUgdHlwZXMgb2YgdmFsdWVzIGluIFtiYXNlXS4KICAvLy8KICAvLy8gVGhpcyBzb3VuZGx5IGNvbnZlcnRzIGEgW1F1ZXVlXSB3aXRob3V0IGEgZ2VuZXJpYyB0eXBlIHRvIGEgYFF1ZXVlPEU+YCBieQogIC8vLyBhc3NlcnRpbmcgdGhhdCBpdHMgZWxlbWVudHMgYXJlIGluc3RhbmNlcyBvZiBgRWAgd2hlbmV2ZXIgdGhleSdyZQogIC8vLyBhY2Nlc3NlZC4gSWYgdGhleSdyZSBub3QsIGl0IHRocm93cyBhIFtDYXN0RXJyb3JdLiBOb3RlIHRoYXQgZXZlbiBpZiBhbgogIC8vLyBvcGVyYXRpb24gdGhyb3dzIGEgW0Nhc3RFcnJvcl0sIGl0IG1heSBzdGlsbCBtdXRhdGUgdGhlIHVuZGVybHlpbmcKICAvLy8gY29sbGVjdGlvbi4KICAvLy8KICAvLy8gVGhpcyBmb3J3YXJkcyBhbGwgb3BlcmF0aW9ucyB0byBbYmFzZV0sIHNvIGFueSBjaGFuZ2VzIGluIFtiYXNlXSB3aWxsIGJlCiAgLy8vIHJlZmxlY3RlZCBpbiBbdGhpc10uIElmIFtiYXNlXSBpcyBhbHJlYWR5IGEgYFF1ZXVlPEU+YCwgaXQncyByZXR1cm5lZAogIC8vLyB1bm1vZGlmaWVkLgogIEBEZXByZWNhdGVkKCdVc2UgcXVldWUuY2FzdDxFPiBpbnN0ZWFkLicpCiAgc3RhdGljIFF1ZXVlPEU+IHR5cGVkPEU+KFF1ZXVlIGJhc2UpID0+IGJhc2UuY2FzdDxFPigpOwoKICBRdWV1ZTxFPiBnZXQgX2Jhc2VRdWV1ZSA9PiBfYmFzZTsKCiAgdm9pZCBhZGQoRSB2YWx1ZSkgewogICAgX2Jhc2VRdWV1ZS5hZGQodmFsdWUpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIF9iYXNlUXVldWUuYWRkQWxsKGl0ZXJhYmxlKTsKICB9CgogIHZvaWQgYWRkRmlyc3QoRSB2YWx1ZSkgewogICAgX2Jhc2VRdWV1ZS5hZGRGaXJzdCh2YWx1ZSk7CiAgfQoKICB2b2lkIGFkZExhc3QoRSB2YWx1ZSkgewogICAgX2Jhc2VRdWV1ZS5hZGRMYXN0KHZhbHVlKTsKICB9CgogIFF1ZXVlPFQ+IGNhc3Q8VD4oKSA9PiBfYmFzZVF1ZXVlLmNhc3Q8VD4oKTsKCiAgdm9pZCBjbGVhcigpIHsKICAgIF9iYXNlUXVldWUuY2xlYXIoKTsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBvYmplY3QpID0+IF9iYXNlUXVldWUucmVtb3ZlKG9iamVjdCk7CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIF9iYXNlUXVldWUucmVtb3ZlV2hlcmUodGVzdCk7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBfYmFzZVF1ZXVlLnJldGFpbldoZXJlKHRlc3QpOwogIH0KCiAgQGRlcHJlY2F0ZWQKICBRdWV1ZTxUPiByZXR5cGU8VD4oKSA9PiBjYXN0PFQ+KCk7CgogIEUgcmVtb3ZlRmlyc3QoKSA9PiBfYmFzZVF1ZXVlLnJlbW92ZUZpcnN0KCk7CgogIEUgcmVtb3ZlTGFzdCgpID0+IF9iYXNlUXVldWUucmVtb3ZlTGFzdCgpOwp9CgovLy8gQSBbTWFwXSB0aGF0IGRlbGVnYXRlcyBhbGwgb3BlcmF0aW9ucyB0byBhIGJhc2UgbWFwLgovLy8KLy8vIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gaGlkZSBub24tYE1hcGAgbWV0aG9kcyBvZiBhbiBvYmplY3QgdGhhdCBleHRlbmRzCi8vLyBgTWFwYCwgb3IgaXQgY2FuIGJlIGV4dGVuZGVkIHRvIGFkZCBleHRyYSBmdW5jdGlvbmFsaXR5IG9uIHRvcCBvZiBhbgovLy8gZXhpc3RpbmcgbWFwIG9iamVjdC4KY2xhc3MgRGVsZWdhdGluZ01hcDxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgZmluYWwgTWFwPEssIFY+IF9iYXNlOwoKICBjb25zdCBEZWxlZ2F0aW5nTWFwKE1hcDxLLCBWPiBiYXNlKSA6IF9iYXNlID0gYmFzZTsKCiAgLy8vIENyZWF0ZXMgYSB3cmFwcGVyIHRoYXQgYXNzZXJ0cyB0aGUgdHlwZXMgb2Yga2V5cyBhbmQgdmFsdWVzIGluIFtiYXNlXS4KICAvLy8KICAvLy8gVGhpcyBzb3VuZGx5IGNvbnZlcnRzIGEgW01hcF0gd2l0aG91dCBnZW5lcmljIHR5cGVzIHRvIGEgYE1hcDxLLCBWPmAgYnkKICAvLy8gYXNzZXJ0aW5nIHRoYXQgaXRzIGtleXMgYXJlIGluc3RhbmNlcyBvZiBgRWAgYW5kIGl0cyB2YWx1ZXMgYXJlIGluc3RhbmNlcwogIC8vLyBvZiBgVmAgd2hlbmV2ZXIgdGhleSdyZSBhY2Nlc3NlZC4gSWYgdGhleSdyZSBub3QsIGl0IHRocm93cyBhIFtDYXN0RXJyb3JdLgogIC8vLyBOb3RlIHRoYXQgZXZlbiBpZiBhbiBvcGVyYXRpb24gdGhyb3dzIGEgW0Nhc3RFcnJvcl0sIGl0IG1heSBzdGlsbCBtdXRhdGUKICAvLy8gdGhlIHVuZGVybHlpbmcgY29sbGVjdGlvbi4KICAvLy8KICAvLy8gVGhpcyBmb3J3YXJkcyBhbGwgb3BlcmF0aW9ucyB0byBbYmFzZV0sIHNvIGFueSBjaGFuZ2VzIGluIFtiYXNlXSB3aWxsIGJlCiAgLy8vIHJlZmxlY3RlZCBpbiBbdGhpc10uIElmIFtiYXNlXSBpcyBhbHJlYWR5IGEgYE1hcDxLLCBWPmAsIGl0J3MgcmV0dXJuZWQKICAvLy8gdW5tb2RpZmllZC4KICBARGVwcmVjYXRlZCgnVXNlIG1hcC5jYXN0PEssIFY+IGluc3RlYWQuJykKICBzdGF0aWMgTWFwPEssIFY+IHR5cGVkPEssIFY+KE1hcCBiYXNlKSA9PiBiYXNlLmNhc3Q8SywgVj4oKTsKCiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSA9PiBfYmFzZVtrZXldOwoKICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgewogICAgX2Jhc2Vba2V5XSA9IHZhbHVlOwogIH0KCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSB7CiAgICBfYmFzZS5hZGRBbGwob3RoZXIpOwogIH0KCiAgdm9pZCBhZGRFbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBlbnRyaWVzKSB7CiAgICBfYmFzZS5hZGRFbnRyaWVzKGVudHJpZXMpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIF9iYXNlLmNsZWFyKCk7CiAgfQoKICBNYXA8SzIsIFYyPiBjYXN0PEsyLCBWMj4oKSA9PiBfYmFzZS5jYXN0PEsyLCBWMj4oKTsKCiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSA9PiBfYmFzZS5jb250YWluc0tleShrZXkpOwoKICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKSA9PiBfYmFzZS5jb250YWluc1ZhbHVlKHZhbHVlKTsKCiAgSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGdldCBlbnRyaWVzID0+IF9iYXNlLmVudHJpZXM7CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBfYmFzZS5mb3JFYWNoKGYpOwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfYmFzZS5pc0VtcHR5OwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9iYXNlLmlzTm90RW1wdHk7CgogIEl0ZXJhYmxlPEs+IGdldCBrZXlzID0+IF9iYXNlLmtleXM7CgogIGludCBnZXQgbGVuZ3RoID0+IF9iYXNlLmxlbmd0aDsKCiAgTWFwPEsyLCBWMj4gbWFwPEsyLCBWMj4oTWFwRW50cnk8SzIsIFYyPiB0cmFuc2Zvcm0oSyBrZXksIFYgdmFsdWUpKSA9PgogICAgICBfYmFzZS5tYXAodHJhbnNmb3JtKTsKCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSA9PiBfYmFzZS5wdXRJZkFic2VudChrZXksIGlmQWJzZW50KTsKCiAgViByZW1vdmUoT2JqZWN0IGtleSkgPT4gX2Jhc2UucmVtb3ZlKGtleSk7CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEsga2V5LCBWIHZhbHVlKSkgPT4gX2Jhc2UucmVtb3ZlV2hlcmUodGVzdCk7CgogIEBkZXByZWNhdGVkCiAgTWFwPEsyLCBWMj4gcmV0eXBlPEsyLCBWMj4oKSA9PiBjYXN0PEsyLCBWMj4oKTsKCiAgSXRlcmFibGU8Vj4gZ2V0IHZhbHVlcyA9PiBfYmFzZS52YWx1ZXM7CgogIFN0cmluZyB0b1N0cmluZygpID0+IF9iYXNlLnRvU3RyaW5nKCk7CgogIFYgdXBkYXRlKEsga2V5LCBWIHVwZGF0ZShWIHZhbHVlKSwge1YgaWZBYnNlbnQoKX0pID0+CiAgICAgIF9iYXNlLnVwZGF0ZShrZXksIHVwZGF0ZSwgaWZBYnNlbnQ6IGlmQWJzZW50KTsKCiAgdm9pZCB1cGRhdGVBbGwoViB1cGRhdGUoSyBrZXksIFYgdmFsdWUpKSA9PiBfYmFzZS51cGRhdGVBbGwodXBkYXRlKTsKfQoKLy8vIEFuIHVubW9kaWZpYWJsZSBbU2V0XSB2aWV3IG9mIHRoZSBrZXlzIG9mIGEgW01hcF0uCi8vLwovLy8gVGhlIHNldCBkZWxlZ2F0ZXMgYWxsIG9wZXJhdGlvbnMgdG8gdGhlIHVuZGVybHlpbmcgbWFwLgovLy8KLy8vIEEgYE1hcGAgY2FuIG9ubHkgY29udGFpbiBlYWNoIGtleSBvbmNlLCBzbyBpdHMga2V5cyBjYW4gYWx3YXlzCi8vLyBiZSB2aWV3ZWQgYXMgYSBgU2V0YCB3aXRob3V0IGFueSBsb3NzLCBldmVuIGlmIHRoZSBbTWFwLmtleXNdCi8vLyBnZXR0ZXIgb25seSBzaG93cyBhbiBbSXRlcmFibGVdIHZpZXcgb2YgdGhlIGtleXMuCi8vLwovLy8gTm90ZSB0aGF0IFtsb29rdXBdIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHRoaXMgc2V0LgpjbGFzcyBNYXBLZXlTZXQ8RT4gZXh0ZW5kcyBfRGVsZWdhdGluZ0l0ZXJhYmxlQmFzZTxFPgogICAgd2l0aCBVbm1vZGlmaWFibGVTZXRNaXhpbjxFPiB7CiAgZmluYWwgTWFwPEUsIGR5bmFtaWM+IF9iYXNlTWFwOwoKICBNYXBLZXlTZXQoTWFwPEUsIGR5bmFtaWM+IGJhc2UpIDogX2Jhc2VNYXAgPSBiYXNlOwoKICBJdGVyYWJsZTxFPiBnZXQgX2Jhc2UgPT4gX2Jhc2VNYXAua2V5czsKCiAgU2V0PFQ+IGNhc3Q8VD4oKSB7CiAgICBpZiAodGhpcyBpcyBNYXBLZXlTZXQ8VD4pIHsKICAgICAgcmV0dXJuIHRoaXMgYXMgTWFwS2V5U2V0PFQ+OwogICAgfQogICAgcmV0dXJuIFNldC5jYXN0RnJvbTxFLCBUPih0aGlzKTsKICB9CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpID0+IF9iYXNlTWFwLmNvbnRhaW5zS2V5KGVsZW1lbnQpOwoKICBib29sIGdldCBpc0VtcHR5ID0+IF9iYXNlTWFwLmlzRW1wdHk7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2Jhc2VNYXAuaXNOb3RFbXB0eTsKCiAgaW50IGdldCBsZW5ndGggPT4gX2Jhc2VNYXAubGVuZ3RoOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAieyR7X2Jhc2Uuam9pbignLCAnKX19IjsKCiAgYm9vbCBjb250YWluc0FsbChJdGVyYWJsZTxPYmplY3Q+IG90aGVyKSA9PiBvdGhlci5ldmVyeShjb250YWlucyk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IHNldCB3aXRoIHRoZSB0aGUgZWxlbWVudHMgb2YgW3RoaXNdIHRoYXQgYXJlIG5vdCBpbiBbb3RoZXJdLgogIC8vLwogIC8vLyBUaGF0IGlzLCB0aGUgcmV0dXJuZWQgc2V0IGNvbnRhaW5zIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhpcyBbU2V0XSB0aGF0IGFyZQogIC8vLyBub3QgZWxlbWVudHMgb2YgW290aGVyXSBhY2NvcmRpbmcgdG8gYG90aGVyLmNvbnRhaW5zYC4KICAvLy8KICAvLy8gTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBzZXQgd2lsbCB1c2UgdGhlIGRlZmF1bHQgZXF1YWxpdHkgb3BlcmF0aW9uLCB3aGljaAogIC8vLyBtYXkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIGVxdWFsaXR5IG9wZXJhdGlvbiBbdGhpc10gdXNlcy4KICBTZXQ8RT4gZGlmZmVyZW5jZShTZXQ8T2JqZWN0PiBvdGhlcikgPT4KICAgICAgd2hlcmUoKGVsZW1lbnQpID0+ICFvdGhlci5jb250YWlucyhlbGVtZW50KSkudG9TZXQoKTsKCiAgLy8vIFJldHVybnMgYSBuZXcgc2V0IHdoaWNoIGlzIHRoZSBpbnRlcnNlY3Rpb24gYmV0d2VlbiBbdGhpc10gYW5kIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFRoYXQgaXMsIHRoZSByZXR1cm5lZCBzZXQgY29udGFpbnMgYWxsIHRoZSBlbGVtZW50cyBvZiB0aGlzIFtTZXRdIHRoYXQgYXJlCiAgLy8vIGFsc28gZWxlbWVudHMgb2YgW290aGVyXSBhY2NvcmRpbmcgdG8gYG90aGVyLmNvbnRhaW5zYC4KICAvLy8KICAvLy8gTm90ZSB0aGF0IHRoZSByZXR1cm5lZCBzZXQgd2lsbCB1c2UgdGhlIGRlZmF1bHQgZXF1YWxpdHkgb3BlcmF0aW9uLCB3aGljaAogIC8vLyBtYXkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIGVxdWFsaXR5IG9wZXJhdGlvbiBbdGhpc10gdXNlcy4KICBTZXQ8RT4gaW50ZXJzZWN0aW9uKFNldDxPYmplY3Q+IG90aGVyKSA9PiB3aGVyZShvdGhlci5jb250YWlucykudG9TZXQoKTsKCiAgLy8vIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gc2luY2UgdGhlcmUncyBubyBjb3JyZXNwb25kaW5nIG1ldGhvZCBmb3IKICAvLy8gW01hcF1zLgogIEUgbG9va3VwKE9iamVjdCBlbGVtZW50KSA9PgogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiTWFwS2V5U2V0IGRvZXNuJ3Qgc3VwcG9ydCBsb29rdXAoKS4iKTsKCiAgQGRlcHJlY2F0ZWQKICBTZXQ8VD4gcmV0eXBlPFQ+KCkgPT4gU2V0LmNhc3RGcm9tPEUsIFQ+KHRoaXMpOwoKICAvLy8gUmV0dXJucyBhIG5ldyBzZXQgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBlbGVtZW50cyBvZiBbdGhpc10gYW5kIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFRoYXQgaXMsIHRoZSByZXR1cm5lZCBzZXQgY29udGFpbnMgYWxsIHRoZSBlbGVtZW50cyBvZiB0aGlzIFtTZXRdIGFuZCBhbGwKICAvLy8gdGhlIGVsZW1lbnRzIG9mIFtvdGhlcl0uCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCB0aGUgcmV0dXJuZWQgc2V0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IGVxdWFsaXR5IG9wZXJhdGlvbiwgd2hpY2gKICAvLy8gbWF5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBlcXVhbGl0eSBvcGVyYXRpb24gW3RoaXNdIHVzZXMuCiAgU2V0PEU+IHVuaW9uKFNldDxFPiBvdGhlcikgPT4gdG9TZXQoKS4uYWRkQWxsKG90aGVyKTsKfQoKLy8vIENyZWF0ZXMgYSBtb2RpZmlhYmxlIFtTZXRdIHZpZXcgb2YgdGhlIHZhbHVlcyBvZiBhIFtNYXBdLgovLy8KLy8vIFRoZSBgU2V0YCB2aWV3IGFzc3VtZXMgdGhhdCB0aGUga2V5cyBvZiB0aGUgYE1hcGAgY2FuIGJlIHVuaXF1ZWx5IGRldGVybWluZWQKLy8vIGZyb20gdGhlIHZhbHVlcy4gVGhlIGBrZXlGb3JWYWx1ZWAgZnVuY3Rpb24gcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciBmaW5kcwovLy8gdGhlIGtleSBmb3IgYSBzaW5nbGUgdmFsdWUuIFRoZSBga2V5Rm9yVmFsdWVgIGZ1bmN0aW9uIHNob3VsZCBiZSBjb25zaXN0ZW50Ci8vLyB3aXRoIGVxdWFsaXR5LiBJZiBgdmFsdWUxID09IHZhbHVlMmAgdGhlbiBga2V5Rm9yVmFsdWUodmFsdWUxKWAgYW5kCi8vLyBga2V5Rm9yVmFsdWUodmFsdWUyKWAgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZXF1YWwga2V5cyBieSB0aGUgdW5kZXJseWluZyBtYXAsCi8vLyBhbmQgdmljZSB2ZXJzYS4KLy8vCi8vLyBNb2RpZnlpbmcgdGhlIHNldCB3aWxsIG1vZGlmeSB0aGUgdW5kZXJseWluZyBtYXAgYmFzZWQgb24gdGhlIGtleSByZXR1cm5lZAovLy8gYnkgYGtleUZvclZhbHVlYC4KLy8vCi8vLyBJZiB0aGUgYE1hcGAgY29udGVudHMgYXJlIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIGBrZXlGb3JWYWx1ZWAgZnVuY3Rpb24sCi8vLyB0aGUgc2V0IHdpbGwgbm90IHdvcmsgY29uc2lzdGVudGx5LCBhbmQgbWF5IGdpdmUgbWVhbmluZ2xlc3MgcmVzcG9uc2VzIG9yIGRvCi8vLyBpbmNvbnNpc3RlbnQgdXBkYXRlcy4KLy8vCi8vLyBUaGlzIHNldCBjYW4sIGZvciBleGFtcGxlLCBiZSB1c2VkIG9uIGEgbWFwIGZyb20gZGF0YWJhc2UgcmVjb3JkIElEcyB0byB0aGUKLy8vIHJlY29yZHMuIEl0IGV4cG9zZXMgdGhlIHJlY29yZHMgYXMgYSBzZXQsIGFuZCBhbGxvd3MgZm9yIHdyaXRpbmcgYm90aAovLy8gYHJlY29yZFNldC5hZGQoZGF0YWJhc2VSZWNvcmQpYCBhbmQgYHJlY29yZE1hcFtpZF1gLgovLy8KLy8vIEVmZmVjdGl2ZWx5LCB0aGUgbWFwIHdpbGwgYWN0IGFzIGEga2luZCBvZiBpbmRleCBmb3IgdGhlIHNldC4KY2xhc3MgTWFwVmFsdWVTZXQ8SywgVj4gZXh0ZW5kcyBfRGVsZWdhdGluZ0l0ZXJhYmxlQmFzZTxWPiBpbXBsZW1lbnRzIFNldDxWPiB7CiAgZmluYWwgTWFwPEssIFY+IF9iYXNlTWFwOwogIGZpbmFsIF9LZXlGb3JWYWx1ZTxLLCBWPiBfa2V5Rm9yVmFsdWU7CgogIC8vLyBDcmVhdGVzIGEgbmV3IFtNYXBWYWx1ZVNldF0gYmFzZWQgb24gW2Jhc2VdLgogIC8vLwogIC8vLyBba2V5Rm9yVmFsdWVdIHJldHVybnMgdGhlIGtleSBpbiB0aGUgbWFwIHRoYXQgc2hvdWxkIGJlIGFzc29jaWF0ZWQgd2l0aAogIC8vLyB0aGUgZ2l2ZW4gdmFsdWUuIFRoZSBzZXQncyBub3Rpb24gb2YgZXF1YWxpdHkgaXMgaWRlbnRpY2FsIHRvIHRoZSBlcXVhbGl0eQogIC8vLyBvZiB0aGUgcmV0dXJuIHZhbHVlcyBvZiBba2V5Rm9yVmFsdWVdLgogIE1hcFZhbHVlU2V0KE1hcDxLLCBWPiBiYXNlLCBLIGtleUZvclZhbHVlKFYgdmFsdWUpKQogICAgICA6IF9iYXNlTWFwID0gYmFzZSwKICAgICAgICBfa2V5Rm9yVmFsdWUgPSBrZXlGb3JWYWx1ZTsKCiAgSXRlcmFibGU8Vj4gZ2V0IF9iYXNlID0+IF9iYXNlTWFwLnZhbHVlczsKCiAgU2V0PFQ+IGNhc3Q8VD4oKSB7CiAgICBpZiAodGhpcyBpcyBTZXQ8VD4pIHsKICAgICAgcmV0dXJuIHRoaXMgYXMgU2V0PFQ+OwogICAgfQogICAgcmV0dXJuIFNldC5jYXN0RnJvbTxWLCBUPih0aGlzKTsKICB9CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGlmIChlbGVtZW50ICE9IG51bGwgJiYgZWxlbWVudCBpcyEgVikgcmV0dXJuIGZhbHNlOwogICAgdmFyIGtleSA9IF9rZXlGb3JWYWx1ZShlbGVtZW50IGFzIFYpOwoKICAgIHJldHVybiBfYmFzZU1hcC5jb250YWluc0tleShrZXkpOwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfYmFzZU1hcC5pc0VtcHR5OwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9iYXNlTWFwLmlzTm90RW1wdHk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9iYXNlTWFwLmxlbmd0aDsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gdG9TZXQoKS50b1N0cmluZygpOwoKICBib29sIGFkZChWIHZhbHVlKSB7CiAgICBLIGtleSA9IF9rZXlGb3JWYWx1ZSh2YWx1ZSk7CiAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgX2Jhc2VNYXAucHV0SWZBYnNlbnQoa2V5LCAoKSB7CiAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPFY+IGVsZW1lbnRzKSA9PiBlbGVtZW50cy5mb3JFYWNoKGFkZCk7CgogIHZvaWQgY2xlYXIoKSA9PiBfYmFzZU1hcC5jbGVhcigpOwoKICBib29sIGNvbnRhaW5zQWxsKEl0ZXJhYmxlPE9iamVjdD4gb3RoZXIpID0+IG90aGVyLmV2ZXJ5KGNvbnRhaW5zKTsKCiAgLy8vIFJldHVybnMgYSBuZXcgc2V0IHdpdGggdGhlIHRoZSBlbGVtZW50cyBvZiBbdGhpc10gdGhhdCBhcmUgbm90IGluIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFRoYXQgaXMsIHRoZSByZXR1cm5lZCBzZXQgY29udGFpbnMgYWxsIHRoZSBlbGVtZW50cyBvZiB0aGlzIFtTZXRdIHRoYXQgYXJlCiAgLy8vIG5vdCBlbGVtZW50cyBvZiBbb3RoZXJdIGFjY29yZGluZyB0byBgb3RoZXIuY29udGFpbnNgLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhlIHJldHVybmVkIHNldCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBlcXVhbGl0eSBvcGVyYXRpb24sIHdoaWNoCiAgLy8vIG1heSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgZXF1YWxpdHkgb3BlcmF0aW9uIFt0aGlzXSB1c2VzLgogIFNldDxWPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSA9PgogICAgICB3aGVyZSgoZWxlbWVudCkgPT4gIW90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKS50b1NldCgpOwoKICAvLy8gUmV0dXJucyBhIG5ldyBzZXQgd2hpY2ggaXMgdGhlIGludGVyc2VjdGlvbiBiZXR3ZWVuIFt0aGlzXSBhbmQgW290aGVyXS4KICAvLy8KICAvLy8gVGhhdCBpcywgdGhlIHJldHVybmVkIHNldCBjb250YWlucyBhbGwgdGhlIGVsZW1lbnRzIG9mIHRoaXMgW1NldF0gdGhhdCBhcmUKICAvLy8gYWxzbyBlbGVtZW50cyBvZiBbb3RoZXJdIGFjY29yZGluZyB0byBgb3RoZXIuY29udGFpbnNgLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhlIHJldHVybmVkIHNldCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBlcXVhbGl0eSBvcGVyYXRpb24sIHdoaWNoCiAgLy8vIG1heSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgZXF1YWxpdHkgb3BlcmF0aW9uIFt0aGlzXSB1c2VzLgogIFNldDxWPiBpbnRlcnNlY3Rpb24oU2V0PE9iamVjdD4gb3RoZXIpID0+IHdoZXJlKG90aGVyLmNvbnRhaW5zKS50b1NldCgpOwoKICBWIGxvb2t1cChPYmplY3QgZWxlbWVudCkgewogICAgaWYgKGVsZW1lbnQgIT0gbnVsbCAmJiBlbGVtZW50IGlzISBWKSByZXR1cm4gbnVsbDsKICAgIHZhciBrZXkgPSBfa2V5Rm9yVmFsdWUoZWxlbWVudCBhcyBWKTsKCiAgICByZXR1cm4gX2Jhc2VNYXBba2V5XTsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBlbGVtZW50KSB7CiAgICBpZiAoZWxlbWVudCAhPSBudWxsICYmIGVsZW1lbnQgaXMhIFYpIHJldHVybiBmYWxzZTsKICAgIHZhciBrZXkgPSBfa2V5Rm9yVmFsdWUoZWxlbWVudCBhcyBWKTsKCiAgICBpZiAoIV9iYXNlTWFwLmNvbnRhaW5zS2V5KGtleSkpIHJldHVybiBmYWxzZTsKICAgIF9iYXNlTWFwLnJlbW92ZShrZXkpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIHJlbW92ZUFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSA9PiBlbGVtZW50cy5mb3JFYWNoKHJlbW92ZSk7CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KFYgZWxlbWVudCkpIHsKICAgIHZhciB0b1JlbW92ZSA9IFtdOwogICAgX2Jhc2VNYXAuZm9yRWFjaCgoa2V5LCB2YWx1ZSkgewogICAgICBpZiAodGVzdCh2YWx1ZSkpIHRvUmVtb3ZlLmFkZChrZXkpOwogICAgfSk7CiAgICB0b1JlbW92ZS5mb3JFYWNoKF9iYXNlTWFwLnJlbW92ZSk7CiAgfQoKICB2b2lkIHJldGFpbkFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICB2YXIgdmFsdWVzVG9SZXRhaW4gPSBuZXcgU2V0PFY+LmlkZW50aXR5KCk7CiAgICBmb3IgKHZhciBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgIGlmIChlbGVtZW50ICE9IG51bGwgJiYgZWxlbWVudCBpcyEgVikgY29udGludWU7CiAgICAgIHZhciBrZXkgPSBfa2V5Rm9yVmFsdWUoZWxlbWVudCBhcyBWKTsKCiAgICAgIGlmICghX2Jhc2VNYXAuY29udGFpbnNLZXkoa2V5KSkgY29udGludWU7CiAgICAgIHZhbHVlc1RvUmV0YWluLmFkZChfYmFzZU1hcFtrZXldKTsKICAgIH0KCiAgICB2YXIga2V5c1RvUmVtb3ZlID0gW107CiAgICBfYmFzZU1hcC5mb3JFYWNoKChrLCB2KSB7CiAgICAgIGlmICghdmFsdWVzVG9SZXRhaW4uY29udGFpbnModikpIGtleXNUb1JlbW92ZS5hZGQoayk7CiAg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bWluYXRvciBhbGdvcml0aG0uCi8vLwovLy8gUG9ydGlvbnMgb2YgdGhlIGNvZGUgaW4gdGhpcyBsaWJyYXJ5IHdhcyBhZGFwdGVkIGZyb20KLy8vIGBwYWNrYWdlOmFuYWx5emVyL3NyYy9nZW5lcmF0ZWQvY29sbGVjdGlvbl91dGlsaXRpZXMuZGFydGAuCi8vIFRPRE8oc2lnbXVuZCk6IG1vdmUgdGhpcyBpbnRvIGEgc2hhcmVkIHBsYWNlLCBsaWtlIHF1aXZlcj8KbGlicmFyeSBkYXJ0MmpzX2luZm8uc3JjLmdyYXBoOwoKaW1wb3J0ICdkYXJ0Om1hdGgnIGFzIG1hdGg7CgphYnN0cmFjdCBjbGFzcyBHcmFwaDxOPiB7CiAgSXRlcmFibGU8Tj4gZ2V0IG5vZGVzOwogIGJvb2wgZ2V0IGlzRW1wdHk7CiAgaW50IGdldCBub2RlQ291bnQ7CiAgSXRlcmFibGU8Tj4gdGFyZ2V0c09mKE4gc291cmNlKTsKICBJdGVyYWJsZTxOPiBzb3VyY2VzT2YoTiBzb3VyY2UpOwoKICAvLy8gUnVuIGEgdG9wb2xvZ2ljYWwgc29ydCBvZiB0aGUgZ3JhcGguIFNpbmNlIHRoZSBncmFwaCBtYXkgY29udGFpbiBjeWNsZXMsCiAgLy8vIHRoaXMgcmVzdWx0cyBpbiBhIGxpc3Qgb2Ygc3Ryb25nbHkgY29ubmVjdGVkIGNvbXBvbmVudHMgcmF0aGVyIHRoYW4gYSBsaXN0CiAgLy8vIG9mIG5vZGVzLiBUaGUgbm9kZXMgaW4gZWFjaCBzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50cyBvbmx5IGhhdmUgZWRnZXMKICAvLy8gdGhhdCBwb2ludCB0byBub2RlcyBpbiB0aGUgc2FtZSBjb21wb25lbnQgb3IgZWFybGllciBjb21wb25lbnRzLgogIExpc3Q8TGlzdDxOPj4gY29tcHV0ZVRvcG9sb2dpY2FsU29ydCgpIHsKICAgIF9TY2NGaW5kZXI8Tj4gZmluZGVyID0gbmV3IF9TY2NGaW5kZXI8Tj4odGhpcyk7CiAgICByZXR1cm4gZmluZGVyLmNvbXB1dGVUb3BvbG9naWNhbFNvcnQoKTsKICB9CgogIC8vLyBXaGV0aGVyIFtzb3VyY2VdIGNhbiB0cmFuc2l0aXZlbHkgcmVhY2ggW3RhcmdldF0uCiAgYm9vbCBjb250YWluc1BhdGgoTiBzb3VyY2UsIE4gdGFyZ2V0KSB7CiAgICBTZXQ8Tj4gc2VlbiA9IG5ldyBTZXQ8Tj4oKTsKICAgIGJvb2wgaGVscGVyKE4gbm9kZSkgewogICAgICBpZiAoaWRlbnRpY2FsKG5vZGUsIHRhcmdldCkpIHJldHVybiB0cnVlOwogICAgICBpZiAoIXNlZW4uYWRkKG5vZGUpKSByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0YXJnZXRzT2Yobm9kZSkuYW55KGhlbHBlcik7CiAgICB9CgogICAgcmV0dXJuIGhlbHBlcihzb3VyY2UpOwogIH0KCiAgLy8vIFJldHVybnMgYWxsIG5vZGVzIHJlYWNoYWJsZSBmcm9tIFtyb290XSBpbiBwb3N0IG9yZGVyLgogIEl0ZXJhYmxlPE4+IHBvc3RPcmRlcihOIHJvb3QpIHN5bmMqIHsKICAgIHZhciBzZWVuID0gbmV3IFNldDxOPigpOwogICAgSXRlcmFibGU8Tj4gaGVscGVyKE4gbikgc3luYyogewogICAgICBpZiAoIXNlZW4uYWRkKG4pKSByZXR1cm47CiAgICAgIGZvciAodmFyIHggaW4gdGFyZ2V0c09mKG4pKSB7CiAgICAgICAgeWllbGQqIGhlbHBlcih4KTsKICAgICAgfQogICAgICB5aWVsZCBuOwogICAgfQoKICAgIHlpZWxkKiBoZWxwZXIocm9vdCk7CiAgfQoKICAvLy8gUmV0dXJucyBhbiBpdGVyYWJsZSBvZiBhbGwgbm9kZXMgcmVhY2hhYmxlIGZyb20gW3Jvb3RdIGluIHByZW9yZGVyLgogIEl0ZXJhYmxlPE4+IHByZU9yZGVyKE4gcm9vdCkgc3luYyogewogICAgdmFyIHNlZW4gPSBuZXcgU2V0PE4+KCk7CiAgICB2YXIgc3RhY2sgPSA8Tj5bcm9vdF07CiAgICB3aGlsZSAoc3RhY2suaXNOb3RFbXB0eSkgewogICAgICB2YXIgbmV4dCA9IHN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICAgaWYgKCFzZWVuLmNvbnRhaW5zKG5leHQpKSB7CiAgICAgICAgc2Vlbi5hZGQobmV4dCk7CiAgICAgICAgeWllbGQgbmV4dDsKICAgICAgICBzdGFjay5hZGRBbGwodGFyZ2V0c09mKG5leHQpKTsKICAgICAgfQogICAgfQogIH0KCiAgLy8vIFJldHVybnMgYSBsaXN0IG9mIG5vZGVzIHRoYXQgZm9ybSBhIGN5Y2xlIGNvbnRhaW5pbmcgdGhlIGdpdmVuIG5vZGUuIElmCiAgLy8vIHRoZSBub2RlIGlzIG5vdCBwYXJ0IG9mIGEgY3ljbGUgaW4gdGhpcyBncmFwaCwgdGhlbiBhIGxpc3QgY29udGFpbmluZyBvbmx5CiAgLy8vIHRoZSBub2RlIGl0c2VsZiB3aWxsIGJlIHJldHVybmVkLgogIExpc3Q8Tj4gZmluZEN5Y2xlQ29udGFpbmluZyhOIG5vZGUpIHsKICAgIGFzc2VydChub2RlICE9IG51bGwpOwogICAgX1NjY0ZpbmRlcjxOPiBmaW5kZXIgPSBuZXcgX1NjY0ZpbmRlcjxOPih0aGlzKTsKICAgIHJldHVybiBmaW5kZXIuX2NvbXBvbmVudENvbnRhaW5pbmcobm9kZSk7CiAgfQoKICAvLy8gUmV0dXJucyBhIGRvbWluYXRvciB0cmVlIHN0YXJ0aW5nIGZyb20gcm9vdC4gVGhpcyBpcyBhIG5ldyBncmFwaCwgd2l0aCB0aGUKICAvLy8gc2FtZSBub2RlcyBhcyB0aGlzIGdyYXBoLCBidXQgd2hlcmUgZWRnZXMgZXhpc3QgYmV0d2VlbiBhIG5vZGUgYW5kIHRoZQogIC8vLyBub2RlcyBpdCBpbW1lZGlhdGVseSBkb21pbmF0ZXMuIEZvciBleGFtcGxlLCB0aGlzIGdyYXBoOgogIC8vLwogIC8vLyAgICAgICByb290CiAgLy8vICAgICAgIC8gICBcCiAgLy8vICAgICAgYSAgICAgYgogIC8vLyAgICAgIHwgICAgLyBcCiAgLy8vICAgICAgYyAgIGQgICBlCiAgLy8vICAgICAgIFwgLyBcIC8KICAvLy8gICAgICAgIGYgICBnCiAgLy8vCiAgLy8vIFByb2R1Y2VzIHRoaXMgdHJlZToKICAvLy8KICAvLy8gICAgICAgcm9vdAogIC8vLyAgICAgICAvfCAgXAogIC8vLyAgICAgIGEgfCAgIGIKICAvLy8gICAgICB8IHwgIC98XAogIC8vLyAgICAgIGMgfCBkIHwgZQogIC8vLyAgICAgICAgfCAgIHwKICAvLy8gICAgICAgIGYgICBnCiAgLy8vCiAgLy8vIEludGVybmFsbHkgd2UgY29tcHV0ZSBkb21pbmF0b3JzIHVzaW5nIChDb29wZXIsIEhhcnZleSwgYW5kIEtlbm5lZHkncwogIC8vLyBhbGdvcml0aG0pW2h0dHA6Ly93d3cuY3MucmljZS5lZHUvfmtlaXRoL0VNQkVEL2RvbS5wZGZdLgogIEdyYXBoPE4+IGRvbWluYXRvclRyZWUoTiByb290KSB7CiAgICB2YXIgaURvbSA9IChuZXcgX0RvbWluYXRvckZpbmRlcih0aGlzKS4ucnVuKHJvb3QpKS5pbW1lZGlhdGVEb21pbmF0b3JzOwogICAgdmFyIGdyYXBoID0gbmV3IEVkZ2VMaXN0R3JhcGg8Tj4oKTsKICAgIGZvciAoTiBub2RlIGluIGlEb20ua2V5cykgewogICAgICBpZiAobm9kZSAhPSByb290KSBncmFwaC5hZGRFZGdlKGlEb21bbm9kZV0sIG5vZGUpOwogICAgfQogICAgcmV0dXJuIGdyYXBoOwogIH0KfQoKY2xhc3MgRWRnZUxpc3RHcmFwaDxOPiBleHRlbmRzIEdyYXBoPE4+IHsKICAvLy8gRWRnZXMgaW4gdGhlIGdyYXBoLgogIE1hcDxOLCBTZXQ8Tj4+IF9lZGdlcyA9IG5ldyBNYXA8TiwgU2V0PE4+PigpOwoKICAvLy8gVGhlIHJldmVyc2Ugb2YgX2VkZ2VzLgogIE1hcDxOLCBTZXQ8Tj4+IF9yZXZFZGdlcyA9IG5ldyBNYXA8TiwgU2V0PE4+PigpOwoKICBJdGVyYWJsZTxOPiBnZXQgbm9kZXMgPT4gX2VkZ2VzLmtleXM7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfZWRnZXMuaXNFbXB0eTsKICBpbnQgZ2V0IG5vZGVDb3VudCA9PiBfZWRnZXMubGVuZ3RoOwoKICBmaW5hbCBfZW1wdHkgPSBuZXcgU2V0PE4+KCk7CgogIEl0ZXJhYmxlPE4+IHRhcmdldHNPZihOIHNvdXJjZSkgPT4gX2VkZ2VzW3NvdXJjZV0gPz8gX2VtcHR5OwogIEl0ZXJhYmxlPE4+IHNvdXJjZXNPZihOIHNvdXJjZSkgPT4gX3JldkVkZ2VzW3NvdXJjZV0gPz8gX2VtcHR5OwoKICB2b2lkIGFkZEVkZ2UoTiBzb3VyY2UsIE4gdGFyZ2V0KSB7CiAgICBhc3NlcnQoc291cmNlICE9IG51bGwpOwogICAgYXNzZXJ0KHRhcmdldCAhPSBudWxsKTsKICAgIGFkZE5vZGUoc291cmNlKTsKICAgIGFkZE5vZGUodGFyZ2V0KTsKICAgIF9lZGdlc1tzb3VyY2VdLmFkZCh0YXJnZXQpOwogICAgX3JldkVkZ2VzW3RhcmdldF0uYWRkKHNvdXJjZSk7CiAgfQoKICB2b2lkIGFkZE5vZGUoTiBub2RlKSB7CiAgICBhc3NlcnQobm9kZSAhPSBudWxsKTsKICAgIF9lZGdlcy5wdXRJZkFic2VudChub2RlLCAoKSA9PiBuZXcgU2V0PE4+KCkpOwogICAgX3JldkVkZ2VzLnB1dElmQWJzZW50KG5vZGUsICgpID0+IG5ldyBTZXQ8Tj4oKSk7CiAgfQoKICAvLy8gUmVtb3ZlIHRoZSBlZGdlIGZyb20gdGhlIGdpdmVuIFtzb3VyY2VdIG5vZGUgdG8gdGhlIGdpdmVuIFt0YXJnZXRdIG5vZGUuCiAgLy8vIElmIHRoZXJlIHdhcyBubyBzdWNoIGVkZ2UgdGhlbiB0aGUgZ3JhcGggd2lsbCBiZSB1bm1vZGlmaWVkOiB0aGUgbnVtYmVyIG9mCiAgLy8vIGVkZ2VzIHdpbGwgYmUgdGhlIHNhbWUgYW5kIHRoZSBzZXQgb2Ygbm9kZXMgd2lsbCBiZSB0aGUgc2FtZSAobmVpdGhlciBub2RlCiAgLy8vIHdpbGwgZWl0aGVyIGJlIGFkZGVkIG9yIHJlbW92ZWQpLgogIHZvaWQgcmVtb3ZlRWRnZShOIHNvdXJjZSwgTiB0YXJnZXQpIHsKICAgIF9lZGdlc1tzb3VyY2VdPy5yZW1vdmUodGFyZ2V0KTsKICB9CgogIC8vLyBSZW1vdmUgdGhlIGdpdmVuIG5vZGUgZnJvbSB0aGlzIGdyYXBoLiBBcyBhIGNvbnNlcXVlbmNlLCBhbnkgZWRnZXMgZm9yCiAgLy8vIHdoaWNoIHRoYXQgbm9kZSB3YXMgZWl0aGVyIGEgaGVhZCBvciBhIHRhaWwgd2lsbCBhbHNvIGJlIHJlbW92ZWQuCiAgdm9pZCByZW1vdmVOb2RlKE4gbm9kZSkgewogICAgX2VkZ2VzLnJlbW92ZShub2RlKTsKICAgIHZhciBzb3VyY2VzID0gX3JldkVkZ2VzW25vZGVdOwogICAgaWYgKHNvdXJjZXMgPT0gbnVsbCkgcmV0dXJuOwogICAgZm9yICh2YXIgc291cmNlIGluIHNvdXJjZXMpIHsKICAgICAgX2VkZ2VzW3NvdXJjZV0ucmVtb3ZlKG5vZGUpOwogICAgfQogIH0KCiAgLy8vIFJlbW92ZSBhbGwgb2YgdGhlIGdpdmVuIG5vZGVzIGZyb20gdGhpcyBncmFwaC4gQXMgYSBjb25zZXF1ZW5jZSwgYW55IGVkZ2VzCiAgLy8vIGZvciB3aGljaCB0aG9zZSBub2RlcyB3ZXJlIGVpdGhlciBhIGhlYWQgb3IgYSB0YWlsIHdpbGwgYWxzbyBiZSByZW1vdmVkLgogIHZvaWQgcmVtb3ZlQWxsTm9kZXMoTGlzdDxOPiBub2RlcykgPT4gbm9kZXMuZm9yRWFjaChyZW1vdmVOb2RlKTsKfQoKLy8vIFVzZWQgYnkgdGhlIFtTY2NGaW5kZXJdIHRvIG1haW50YWluIGluZm9ybWF0aW9uIGFib3V0IHRoZSBub2RlcyB0aGF0IGhhdmUKLy8vIGJlZW4gZXhhbWluZWQuIFRoZXJlIGlzIGFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgcGVyIG5vZGUgaW4gdGhlIGdyYXBoLgpjbGFzcyBfTm9kZUluZm88Tj4gewogIC8vLyBEZXB0aCBvZiB0aGUgbm9kZSBjb3JyZXNwb25kaW5nIHRvIHRoaXMgaW5mby4KICBpbnQgaW5kZXggPSAwOwoKICAvLy8gRGVwdGggb2YgdGhlIGZpcnN0IG5vZGUgaW4gYSBjeWNsZS4KICBpbnQgbG93bGluayA9IDA7CgogIC8vLyBXaGV0aGVyIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUgaXMgb24gdGhlIHN0YWNrLiBVc2VkIHRvIHJlbW92ZSB0aGUgbmVlZAogIC8vLyBmb3Igc2VhcmNoaW5nIGEgY29sbGVjdGlvbiBmb3IgdGhlIG5vZGUgZWFjaCB0aW1lIHRoZSBxdWVzdGlvbiBuZWVkcyB0byBiZQogIC8vLyBhc2tlZC4KICBib29sIG9uU3RhY2sgPSBmYWxzZTsKCiAgLy8vIENvbXBvbmVudCB0aGF0IGNvbnRhaW5zIHRoZSBjb3JyZXNwb25kaW5nIG5vZGUuCiAgTGlzdDxOPiBjb21wb25lbnQ7CgogIF9Ob2RlSW5mbyhpbnQgZGVwdGgpCiAgICAgIDogaW5kZXggPSBkZXB0aCwKICAgICAgICBsb3dsaW5rID0gZGVwdGgsCiAgICAgICAgb25TdGFjayA9IGZhbHNlOwp9CgovLy8gSW1wbGVtZW50cyBUYXJqYW4ncyBBbGdvcml0aG0gZm9yIGZpbmRpbmcgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzCi8vLyBpbiBhIGdyYXBoLgpjbGFzcyBfU2NjRmluZGVyPE4+IHsKICAvLy8gVGhlIGdyYXBoIHRvIHByb2Nlc3MuCiAgZmluYWwgR3JhcGg8Tj4gX2dyYXBoOwoKICAvLy8gVGhlIGluZGV4IHVzZWQgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhlIGRlcHRoIG9mIG5vZGVzLgogIGludCBfaW5kZXggPSAwOwoKICAvLy8gTm9kZXMgdGhhdCBhcmUgYmVpbmcgdmlzaXRlZCBpbiBvcmRlciB0byBpZGVudGlmeSBjb21wb25lbnRzLgogIExpc3Q8Tj4gX3N0YWNrID0gbmV3IExpc3Q8Tj4oKTsKCiAgLy8vIEluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0aCBlYWNoIG5vZGUuCiAgTWFwPE4sIF9Ob2RlSW5mbzxOPj4gX2luZm8gPSA8TiwgX05vZGVJbmZvPE4+Pnt9OwoKICAvLy8gQWxsIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnRzIGZvdW5kLCBpbiB0b3BvbG9naWNhbCBzb3J0IG9yZGVyIChlYWNoCiAgLy8vIG5vZGUgaW4gYSBzdHJvbmdseSBjb25uZWN0ZWQgY29tcG9uZW50IG9ubHkgaGFzIGVkZ2VzIHRoYXQgcG9pbnQgdG8gbm9kZXMKICAvLy8gaW4gdGhlIHNhbWUgY29tcG9uZW50IG9yIGVhcmxpZXIgY29tcG9uZW50cykuCiAgTGlzdDxMaXN0PE4+PiBfYWxsQ29tcG9uZW50cyA9IG5ldyBMaXN0PExpc3Q8Tj4+KCk7CgogIF9TY2NGaW5kZXIodGhpcy5fZ3JhcGgpOwoKICAvLy8gUmV0dXJuIGEgbGlzdCBjb250YWluaW5nIHRoZSBub2RlcyB0aGF0IGFyZSBwYXJ0IG9mIHRoZSBzdHJvbmdseSBjb25uZWN0ZWQKICAvLy8gY29tcG9uZW50IHRoYXQgY29udGFpbnMgdGhlIGdpdmVuIG5vZGUuCiAgTGlzdDxOPiBfY29tcG9uZW50Q29udGFpbmluZyhOIG5vZGUpID0+IF9zdHJvbmdDb25uZWN0KG5vZGUpLmNvbXBvbmVudDsKCiAgLy8vIFJ1biBUYXJqYW4ncyBhbGdvcml0aG0gYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIGxpc3Qgb2Ygc3Ryb25nbHkgY29ubmVjdGVkCiAgLy8vIGNvbXBvbmVudHMuIFRoZSBsaXN0IGlzIGluIHRvcG9sb2dpY2FsIHNvcnQgb3JkZXIgKGVhY2ggbm9kZSBpbiBhIHN0cm9uZ2x5CiAgLy8vIGNvbm5lY3RlZCBjb21wb25lbnQgb25seSBoYXMgZWRnZXMgdGhhdCBwb2ludCB0byBub2RlcyBpbiB0aGUgc2FtZQogIC8vLyBjb21wb25lbnQgb3IgZWFybGllciBjb21wb25lbnRzKS4KICBMaXN0PExpc3Q8Tj4+IGNvbXB1dGVUb3BvbG9naWNhbFNvcnQoKSB7CiAgICBmb3IgKE4gbm9kZSBpbiBfZ3JhcGgubm9kZXMpIHsKICAgICAgdmFyIG5vZGVJbmZvID0gX2luZm9bbm9kZV07CiAgICAgIGlmIChub2RlSW5mbyA9PSBudWxsKSBfc3Ryb25nQ29ubmVjdChub2RlKTsKICAgIH0KICAgIHJldHVybiBfYWxsQ29tcG9uZW50czsKICB9CgogIC8vLyBSZW1vdmUgYW5kIHJldHVybiB0aGUgdG9wLW1vc3QgZWxlbWVudCBmcm9tIHRoZSBzdGFjay4KICBOIF9wb3AoKSB7CiAgICBOIG5vZGUgPSBfc3RhY2sucmVtb3ZlQXQoX3N0YWNrLmxlbmd0aCAtIDEpOwogICAgX2luZm9bbm9kZV0ub25TdGFjayA9IGZhbHNlOwogICAgcmV0dXJuIG5vZGU7CiAgfQoKICAvLy8gQWRkIHRoZSBnaXZlbiBub2RlIHRvIHRoZSBzdGFjay4KICB2b2lkIF9wdXNoKE4gbm9kZSkgewogICAgX2luZm9bbm9kZV0ub25TdGFjayA9IHRydWU7CiAgICBfc3RhY2suYWRkKG5vZGUpOwogIH0KCiAgLy8vIENvbXB1dGUgdGhlIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnQgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gbm9kZSBhcwogIC8vLyB3ZWxsIGFzIGFueSBjb21wb25lbnRzIGNvbnRhaW5pbmcgbm9kZXMgdGhhdCBhcmUgcmVhY2hhYmxlIGZyb20gdGhlIGdpdmVuCiAgLy8vIGNvbXBvbmVudC4KICBfTm9kZUluZm88Tj4gX3N0cm9uZ0Nvbm5lY3QoTiB2KSB7CiAgICAvLyBTZXQgdGhlIGRlcHRoIGluZGV4IGZvciB2IHRvIHRoZSBzbWFsbGVzdCB1bnVzZWQgaW5kZXgKICAgIHZhciB2SW5mbyA9IG5ldyBfTm9kZUluZm88Tj4oX2luZGV4KyspOwogICAgX2luZm9bdl0gPSB2SW5mbzsKICAgIF9wdXNoKHYpOwoKICAgIGZvciAoTiB3IGluIF9ncmFwaC50YXJnZXRzT2YodikpIHsKICAgICAgdmFyIHdJbmZvID0gX2luZm9bd107CiAgICAgIGlmICh3SW5mbyA9PSBudWxsKSB7CiAgICAgICAgLy8gU3VjY2Vzc29yIHcgaGFzIG5vdCB5ZXQgYmVlbiB2aXNpdGVkOyByZWN1cnNlIG9uIGl0CiAgICAgICAgd0luZm8gPSBfc3Ryb25nQ29ubmVjdCh3KTsKICAgICAgICB2SW5mby5sb3dsaW5rID0gbWF0aC5taW4odkluZm8ubG93bGluaywgd0luZm8ubG93bGluayk7CiAgICAgIH0gZWxzZSBpZiAod0luZm8ub25TdGFjaykgewogICAgICAgIC8vIFN1Y2Nlc3NvciB3IGlzIGluIHN0YWNrIFMgYW5kIGhlbmNlIGluIHRoZSBjdXJyZW50IFNDQwogICAgICAgIHZJbmZvLmxvd2xpbmsgPSBtYXRoLm1pbih2SW5mby5sb3dsaW5rLCB3SW5mby5pbmRleCk7CiAgICAgIH0KICAgIH0KCiAgICAvLyBJZiB2IGlzIGEgcm9vdCBub2RlLCBwb3AgdGhlIHN0YWNrIGFuZCBnZW5lcmF0ZSBhbiBTQ0MKICAgIGlmICh2SW5mby5sb3dsaW5rID09IHZJbmZvLmluZGV4KSB7CiAgICAgIHZhciBjb21wb25lbnQgPSBuZXcgTGlzdDxOPigpOwogICAgICBOIHc7CiAgICAgIGRvIHsKICAgICAgICB3ID0gX3BvcCgpOwogICAgICAgIGNvbXBvbmVudC5hZGQodyk7CiAgICAgICAgX2luZm9bd10uY29tcG9uZW50ID0gY29tcG9uZW50OwogICAgICB9IHdoaWxlICghaWRlbnRpY2FsKHcsIHYpKTsKICAgICAgX2FsbENvbXBvbmVudHMuYWRkKGNvbXBvbmVudCk7CiAgICB9CiAgICByZXR1cm4gdkluZm87CiAgfQp9CgovLy8gQ29tcHV0ZXMgZG9taW5hdG9ycyB1c2luZyAoQ29vcGVyLCBIYXJ2ZXksIGFuZCBLZW5uZWR5J3MKLy8vIGFsZ29yaXRobSlbaHR0cDovL3d3dy5jcy5yaWNlLmVkdS9+a2VpdGgvRU1CRUQvZG9tLnBkZl0uCmNsYXNzIF9Eb21pbmF0b3JGaW5kZXI8Tj4gewogIGZpbmFsIEdyYXBoPE4+IF9ncmFwaDsKICBNYXA8TiwgTj4gaW1tZWRpYXRlRG9taW5hdG9ycyA9IHt9OwogIE1hcDxOLCBpbnQ+IHBvc3RPcmRlcklkID0ge307CiAgX0RvbWluYXRvckZpbmRlcih0aGlzLl9ncmFwaCk7CgogIHJ1bihOIHJvb3QpIHsKICAgIGltbWVkaWF0ZURvbWluYXRvcnNbcm9vdF0gPSByb290OwogICAgYm9vbCBjaGFuZ2VkID0gdHJ1ZTsKICAgIGludCBpID0gMDsKICAgIHZhciBub2Rlc0luUG9zdE9yZGVyID0gX2dyYXBoLnBvc3RPcmRlcihyb290KS50b0xpc3QoKTsKICAgIGZvciAodmFyIG4gaW4gbm9kZXNJblBvc3RPcmRlcikgewogICAgICBwb3N0T3JkZXJJZFtuXSA9IGkrKzsKICAgIH0KICAgIHZhciBub2Rlc0luUmV2ZXJzZWRQb3N0T3JkZXIgPSBub2Rlc0luUG9zdE9yZGVyLnJldmVyc2VkOwogICAgd2hpbGUgKGNoYW5nZWQpIHsKICAgICAgY2hhbmdlZCA9IGZhbHNlOwogICAgICBmb3IgKHZhciBuIGluIG5vZGVzSW5SZXZlcnNlZFBvc3RPcmRlcikgewogICAgICAgIGlmIChuID09IHJvb3QpIGNvbnRpbnVlOwogICAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgICAgIE4gaWRvbTsKICAgICAgICBmb3IgKHZhciBwIGluIF9ncmFwaC5zb3VyY2VzT2YobikpIHsKICAgICAgICAgIGlmIChpbW1lZGlhdGVEb21pbmF0b3JzW3BdICE9IG51bGwpIHsKICAgICAgICAgICAgaWYgKGZpcnN0KSB7CiAgICAgICAgICAgICAgaWRvbSA9IHA7CiAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBpZG9tID0gX2ludGVyc2VjdChwLCBpZG9tKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaW1tZWRpYXRlRG9taW5hdG9yc1tuXSAhPSBpZG9tKSB7CiAgICAgICAgICBpbW1lZGlhdGVEb21pbmF0b3JzW25dID0gaWRvbTsKICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgTiBfaW50ZXJzZWN0KE4gYjEsIE4gYjIpIHsKICAgIHZhciBmaW5nZXIxID0gYjE7CiAgICB2YXIgZmluZ2VyMiA9IGIyOwogICAgd2hpbGUgKGZpbmdlcjEgIT0gZmluZ2VyMikgewogICAgICB3aGlsZSAocG9zdE9yZGVySWRbZmluZ2VyMV0gPCBwb3N0T3JkZXJJZFtmaW5nZXIyXSkgewogICAgICAgIGZpbmdlcjEgPSBpbW1lZGlhdGVEb21pbmF0b3JzW2ZpbmdlcjFdOwogICAgICB9CiAgICAgIHdoaWxlIChwb3N0T3JkZXJJZFtmaW5nZXIyXSA8IHBvc3RPcmRlcklkW2ZpbmdlcjFdKSB7CiAgICAgICAgZmluZ2VyMiA9IGltbWVkaWF0ZURvbWluYXRvcnNbZmluZ2VyMl07CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmaW5nZXIxOwogIH0KfQqBUABOTjwBTk8oBDpAPiABHAEaGRQVIyMBT1FQRys0LAQBOCogGjApKgYBGwQBPSgdJCAkGggPBgEZBAFKJx0bHyUiGBQnCAYEAU5RKCgaNC4EAVFNPwYREhMUFRQTBhoGERITFBUTEwZMPyNMKCA5BhIEAgEqGjABHTMBKCYmAR8BP0IBJRwcFRUgIwQBGRoyNQQBT1FRKCgkBAFNSBwZIyEiIwYEAVFPQwIBTk0VNBEBKhMBTlENGAE2FQEXFxkZAgFQEBYcGQE+EgFEIgEtNAFPUDQ2ARsBUS5KAVFRSSgrIyIyBhsEAT0NMSERBAEnFyAWBAFPUBElPiwWDgEnHBs/I0AiQj4IBgE+KCULCxQaKCIlBhIEAgE9PRwZJiAhARAmGQ88JhwGPhYXMCEbEC0wGRgdFSoODAouKRoKCAYEAR0WFiE8MAg8MAgGFAQCASNwYWNrYWdlOmRhcnQyanNfaW5mby9zcmMvZ3JhcGguZGFydDdzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9pbmZlcnJlci9ub2RlX3RyYWNlci5kYXJ0wABGMy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGNvbXBpbGVyLnNyYy5pbmZlcnJlci5ub2RlX3RyYWNlcjsKCmltcG9ydCAnLi4vY29tbW9uL25hbWVzLmRhcnQnIHNob3cgSWRlbnRpZmllcnM7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCc7CmltcG9ydCAnLi4vdXRpbC91dGlsLmRhcnQnIHNob3cgU2V0bGV0OwppbXBvcnQgJ2Fic3RyYWN0X3ZhbHVlX2RvbWFpbi5kYXJ0JzsKaW1wb3J0ICdkZWJ1Zy5kYXJ0JyBhcyBkZWJ1ZzsKaW1wb3J0ICdpbmZlcnJlcl9lbmdpbmUuZGFydCc7CmltcG9ydCAndHlwZV9ncmFwaF9ub2Rlcy5kYXJ0JzsKCi8vIEEgc2V0IG9mIHNlbGVjdG9ycyB3ZSBrbm93IGRvIG5vdCBlc2NhcGUgdGhlIGVsZW1lbnRzIGluc2lkZSB0aGUKLy8gbGlzdC4KU2V0PFN0cmluZz4gZG9lc05vdEVzY2FwZUxpc3RTZXQgPSBuZXcgU2V0PFN0cmluZz4uZnJvbShjb25zdCA8U3RyaW5nPlsKICAvLyBGcm9tIE9iamVjdC4KICAnPT0nLAogICdoYXNoQ29kZScsCiAgJ3RvU3RyaW5nJywKICAnbm9TdWNoTWV0aG9kJywKICAncnVudGltZVR5cGUnLAoKICAvLyBGcm9tIEl0ZXJhYmxlLgogICdpc0VtcHR5JywKICAnaXNOb3RFbXB0eScsCiAgJ2xlbmd0aCcsCiAgJ2NvbnRhaW5zJywKICAnam9pbicsCgogIC8vIEZyb20gTGlzdC4KICAnYWRkJywKICAnYWRkQWxsJywKICAnY2xlYXInLAogICdmaWxsUmFuZ2UnLAogICdpbmRleE9mJywKICAnaW5zZXJ0JywKICAnaW5zZXJ0QWxsJywKICAnbGFzdEluZGV4T2YnLAogICdyZW1vdmUnLAogICdyZW1vdmVSYW5nZScsCiAgJ3JlcGxhY2VSYW5nZScsCiAgJ3NldEFsbCcsCiAgJ3NldFJhbmdlJywKICAnc2h1ZmZsZScsCiAgJ1tdPScsCgogIC8vIEZyb20gSlNBcnJheS4KICAnY2hlY2tNdXRhYmxlJywKICAnY2hlY2tHcm93YWJsZScsCl0pOwoKU2V0PFN0cmluZz4gZG9lc05vdEVzY2FwZVNldFNldCA9IG5ldyBTZXQ8U3RyaW5nPi5mcm9tKGNvbnN0IDxTdHJpbmc+WwogIC8vIEZyb20gT2JqZWN0LgogICc9PScsCiAgJ2hhc2hDb2RlJywKICAndG9TdHJpbmcnLAogICdub1N1Y2hNZXRob2QnLAogICdydW50aW1lVHlwZScsCgogIC8vIEZyb20gSXRlcmFibGUuCiAgJ2lzRW1wdHknLAogICdpc05vdEVtcHR5JywKICAnbGVuZ3RoJywKICAnY29udGFpbnMnLAogICdqb2luJywKCiAgLy8gRnJvbSBTZXQuCiAgJ2FkZCcsCiAgJ2FkZEFsbCcsCiAgJ2NsZWFyJywKICAnY29udGFpbnNBbGwnLAogICdyZW1vdmUnLAogICdyZW1vdmVBbGwnLAogICdyZXRhaW5BbGwnLApdKTsKClNldDxTdHJpbmc+IGRvZXNOb3RFc2NhcGVNYXBTZXQgPSBuZXcgU2V0PFN0cmluZz4uZnJvbShjb25zdCA8U3RyaW5nPlsKICAvLyBGcm9tIE9iamVjdC4KICAnPT0nLAogICdoYXNoQ29kZScsCiAgJ3RvU3RyaW5nJywKICAnbm9TdWNoTWV0aG9kJywKICAncnVudGltZVR5cGUnLAogIC8vIGZyb20gTWFwLgogICdpc0VtcHR5JywKICAnaXNOb3RFbXB0eScsCiAgJ2xlbmd0aCcsCiAgJ2NsZWFyJywKICAnY29udGFpbnNLZXknLAogICdjb250YWluc1ZhbHVlJywKICAnW109JywKICAvLyBba2V5c10gb25seSBhbGxvd3Mga2V5IHZhbHVlcyB0byBlc2NhcGUsIHdoaWNoIHdlIGRvIG5vdCB0cmFjay4KICAna2V5cycKXSk7CgovLy8gQ29tbW9uIGxvZ2ljIHRvIHRyYWNlIGEgdmFsdWUgdGhyb3VnaCB0aGUgdHlwZSBpbmZlcmVuY2UgZ3JhcGggbm9kZXMuCmFic3RyYWN0IGNsYXNzIFRyYWNlclZpc2l0b3IgaW1wbGVtZW50cyBUeXBlSW5mb3JtYXRpb25WaXNpdG9yIHsKICBmaW5hbCBUeXBlSW5mb3JtYXRpb24gdHJhY2VkVHlwZTsKICBmaW5hbCBJbmZlcnJlckVuZ2luZSBpbmZlcnJlcjsKCiAgc3RhdGljIGNvbnN0IGludCBNQVhfQU5BTFlTSVNfQ09VTlQgPQogICAgICBjb25zdCBpbnQuZnJvbUVudmlyb25tZW50KCdkYXJ0MmpzLnRyYWNpbmcubGltaXQnLCBkZWZhdWx0VmFsdWU6IDMyKTsKICBmaW5hbCBTZXRsZXQ8TWVtYmVyRW50aXR5PiBhbmFseXplZEVsZW1lbnRzID0gbmV3IFNldGxldDxNZW1iZXJFbnRpdHk+KCk7CgogIFRyYWNlclZpc2l0b3IodGhpcy50cmFjZWRUeXBlLCB0aGlzLmluZmVycmVyKTsKCiAgLy8vIFdvcmsgbGlzdCB0aGF0IGdldHMgcG9wdWxhdGVkIHdpdGggW1R5cGVJbmZvcm1hdGlvbl0gdGhhdCBjb3VsZAogIC8vLyBjb250YWluIHRoZSBjb250YWluZXIuCiAgZmluYWwgTGlzdDxUeXBlSW5mb3JtYXRpb24+IHdvcmtMaXN0ID0gPFR5cGVJbmZvcm1hdGlvbj5bXTsKCiAgLy8vIFdvcmsgbGlzdCBvZiBsaXN0cyB0byBhbmFseXplIGFmdGVyIGFuYWx5emluZyB0aGUgdXNlcnMgb2YgYQogIC8vLyBbVHlwZUluZm9ybWF0aW9uXS4gV2Uga25vdyB0aGUgW3RyYWNlZFR5cGVdIGhhcyBiZWVuIHN0b3JlZCBpbiB0aGVzZQogIC8vLyBsaXN0cyBhbmQgd2UgbXVzdCBjaGVjayBob3cgaXQgZXNjYXBlcyBmcm9tIHRoZXNlIGxpc3RzLgogIGZpbmFsIExpc3Q8TGlzdFR5cGVJbmZvcm1hdGlvbj4gbGlzdHNUb0FuYWx5emUgPSA8TGlzdFR5cGVJbmZvcm1hdGlvbj5bXTsKCiAgLy8vIFdvcmsgbGlzdCBvZiBzZXRzIHRvIGFuYWx5emUgYWZ0ZXIgYW5hbHl6aW5nIHRoZSB1c2VycyBvZiBhCiAgLy8vIFtUeXBlSW5mb3JtYXRpb25dLiBXZSBrbm93IHRoZSBbdHJhY2VkVHlwZV0gaGFzIGJlZW4gc3RvcmVkIGluIHRoZXNlIHNldHMKICAvLy8gYW5kIHdlIG11c3QgY2hlY2sgaG93IGl0IGVzY2FwZXMgZnJvbSB0aGVzZSBzZXRzLgogIGZpbmFsIExpc3Q8U2V0VHlwZUluZm9ybWF0aW9uPiBzZXRzVG9BbmFseXplID0gPFNldFR5cGVJbmZvcm1hdGlvbj5bXTsKCiAgLy8vIFdvcmsgbGlzdCBvZiBtYXBzIHRvIGFuYWx5emUgYWZ0ZXIgYW5hbHl6aW5nIHRoZSB1c2VycyBvZiBhCiAgLy8vIFtUeXBlSW5mb3JtYXRpb25dLiBXZSBrbm93IHRoZSBbdHJhY2VkVHlwZV0gaGFzIGJlZW4gc3RvcmVkIGluIHRoZXNlCiAgLy8vIG1hcHMgYW5kIHdlIG11c3QgY2hlY2sgaG93IGl0IGVzY2FwZXMgZnJvbSB0aGVzZSBtYXBzLgogIGZpbmFsIExpc3Q8TWFwVHlwZUluZm9ybWF0aW9uPiBtYXBzVG9BbmFseXplID0gPE1hcFR5cGVJbmZvcm1hdGlvbj5bXTsKCiAgZmluYWwgU2V0bGV0PFR5cGVJbmZvcm1hdGlvbj4gZmxvd3NJbnRvID0gbmV3IFNldGxldDxUeXBlSW5mb3JtYXRpb24+KCk7CgogIC8vIFRoZSBjdXJyZW50IFtUeXBlSW5mb3JtYXRpb25dIGluIHRoZSBhbmFseXNpcy4KICBUeXBlSW5mb3JtYXRpb24gY3VycmVudFVzZXI7CiAgYm9vbCBjb250aW51ZUFuYWx5emluZyA9IHRydWU7CgogIHZvaWQgYWRkTmV3RXNjYXBlSW5mb3JtYXRpb24oVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGlmIChmbG93c0ludG8uY29udGFpbnMoaW5mbykpIHJldHVybjsKICAgIGZsb3dzSW50by5hZGQoaW5mbyk7CiAgICB3b3JrTGlzdC5hZGQoaW5mbyk7CiAgfQoKICBib29sIF93b3VsZEJlVG9vTWFueVVzZXJzKFNldCB1c2VycykgewogICAgaW50IHNlZW5Tb0ZhciA9IGFuYWx5emVkRWxlbWVudHMubGVuZ3RoOwogICAgaWYgKHNlZW5Tb0ZhciArIHVzZXJzLmxlbmd0aCA8PSBNQVhfQU5BTFlTSVNfQ09VTlQpIHJldHVybiBmYWxzZTsKICAgIGludCBhY3R1YWxXb3JrID0gMDsKICAgIGZvciAoVHlwZUluZm9ybWF0aW9uIHVzZXIgaW4gdXNlcnMpIHsKICAgICAgaWYgKCFhbmFseXplZEVsZW1lbnRzLmNvbnRhaW5zKHVzZXIub3duZXIpKSB7CiAgICAgICAgYWN0dWFsV29yaysrOwogICAgICAgIGlmIChhY3R1YWxXb3JrID4gTUFYX0FOQUxZU0lTX0NPVU5UIC0gc2VlblNvRmFyKSByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBhbmFseXplKCkgewogICAgLy8gQ29sbGVjdCB0aGUgW1R5cGVJbmZvcm1hdGlvbl0gd2hlcmUgdGhlIGxpc3QgY2FuIGZsb3cgaW4sCiAgICAvLyBhcyB3ZWxsIGFzIHRoZSBvcGVyYXRpb25zIGRvbmUgb24gYWxsIHRoZXNlIFtUeXBlSW5mb3JtYXRpb25dcy4KICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKHRyYWNlZFR5cGUpOwogICAgd2hpbGUgKCF3b3JrTGlzdC5pc0VtcHR5KSB7CiAgICAgIGN1cnJlbnRVc2VyID0gd29ya0xpc3QucmVtb3ZlTGFzdCgpOwogICAgICBpZiAoX3dvdWxkQmVUb29NYW55VXNlcnMoY3VycmVudFVzZXIudXNlcnMpKSB7CiAgICAgICAgYmFpbG91dCgnVG9vIG1hbnkgdXNlcnMnKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBmb3IgKFR5cGVJbmZvcm1hdGlvbiBpbmZvIGluIGN1cnJlbnRVc2VyLnVzZXJzKSB7CiAgICAgICAgYW5hbHl6ZWRFbGVtZW50cy5hZGQoaW5mby5vd25lcik7CiAgICAgICAgaW5mby5hY2NlcHQodGhpcyk7CiAgICAgIH0KICAgICAgd2hpbGUgKCFsaXN0c1RvQW5hbHl6ZS5pc0VtcHR5KSB7CiAgICAgICAgYW5hbHl6ZVN0b3JlZEludG9MaXN0KGxpc3RzVG9BbmFseXplLnJlbW92ZUxhc3QoKSk7CiAgICAgIH0KICAgICAgd2hpbGUgKHNldHNUb0FuYWx5emUuaXNOb3RFbXB0eSkgewogICAgICAgIGFuYWx5emVTdG9yZWRJbnRvU2V0KHNldHNUb0FuYWx5emUucmVtb3ZlTGFzdCgpKTsKICAgICAgfQogICAgICB3aGlsZSAoIW1hcHNUb0FuYWx5emUuaXNFbXB0eSkgewogICAgICAgIGFuYWx5emVTdG9yZWRJbnRvTWFwKG1hcHNUb0FuYWx5emUucmVtb3ZlTGFzdCgpKTsKICAgICAgfQogICAgICBpZiAoIWNvbnRpbnVlQW5hbHl6aW5nKSBicmVhazsKICAgIH0KICB9CgogIHZvaWQgYmFpbG91dChTdHJpbmcgcmVhc29uKSB7CiAgICBpZiAoZGVidWcuVkVSQk9TRSkgewogICAgICBwcmludCgnQmFpbGluZyBvdXQgb24gJHRyYWNlZFR5cGUgYmVjYXVzZTogJHJlYXNvbicpOwogICAgfQogICAgY29udGludWVBbmFseXppbmcgPSBmYWxzZTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRBd2FpdFR5cGVJbmZvcm1hdGlvbihBd2FpdFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBiYWlsb3V0KCJQYXNzZWQgdGhyb3VnaCBhd2FpdCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFlpZWxkVHlwZUluZm9ybWF0aW9uKFlpZWxkVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIC8vIFRPRE8oMjkzNDQpOiBUaGUgZW5jbG9zaW5nIHN5bmMqL2FzeW5jL2FzeW5jKiBtZXRob2QgY291bGQgaGF2ZSBhCiAgICAvLyB0cmFjYWJsZSBUeXBlSW5mb3JtYXRpb24gZm9yIHRoZSBJdGVyYWJsZSAvIEZ1dHVyZSAvIFN0cmVhbSB3aXRoIGFuCiAgICAvLyBlbGVtZW50IFR5cGVJbmZvcm1hdGlvbi4gVGhlbiBZaWVsZFR5cGVJbmZvcm1hdGlvbiBjb3VsZCBjb25uZWN0IHRoZQogICAgLy8gc291cmNlIHR5cGUgaW5mb3JtYXRpb24gdG8gdGhlIHRyYWNhYmxlIGVsZW1lbnQuCiAgICBiYWlsb3V0KCJQYXNzZWQgdGhyb3VnaCB5aWVsZCIpOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE5hcnJvd1R5cGVJbmZvcm1hdGlvbihOYXJyb3dUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYWRkTmV3RXNjYXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbihQaGlFbGVtZW50VHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKGluZm8pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEVsZW1lbnRJbkNvbnRhaW5lclR5cGVJbmZvcm1hdGlvbigKICAgICAgRWxlbWVudEluQ29udGFpbmVyVHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKGluZm8pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdEVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbihFbGVtZW50SW5TZXRUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYWRkTmV3RXNjYXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0S2V5SW5NYXBUeXBlSW5mb3JtYXRpb24oS2V5SW5NYXBUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgLy8gV2UgZG8gbm90IHRyYWNrIHRoZSB1c2Ugb2Yga2V5cyBmcm9tIGEgbWFwLCBzbyB3ZSBoYXZlIHRvIGJhaWwuCiAgICBiYWlsb3V0KCdVc2VkIGFzIGtleSBpbiBNYXAnKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRWYWx1ZUluTWFwVHlwZUluZm9ybWF0aW9uKFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgYWRkTmV3RXNjYXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0TGlzdFR5cGVJbmZvcm1hdGlvbihMaXN0VHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIGxpc3RzVG9BbmFseXplLmFkZChpbmZvKTsKICB9CgogIEBvdmVycmlkZQogIHZvaWQgdmlzaXRTZXRUeXBlSW5mb3JtYXRpb24oU2V0VHlwZUluZm9ybWF0aW9uIGluZm8pIHsKICAgIHNldHNUb0FuYWx5emUuYWRkKGluZm8pOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE1hcFR5cGVJbmZvcm1hdGlvbihNYXBUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgbWFwc1RvQW5hbHl6ZS5hZGQoaW5mbyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q29uY3JldGVUeXBlSW5mb3JtYXRpb24oQ29uY3JldGVUeXBlSW5mb3JtYXRpb24gaW5mbykge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdFN0cmluZ0xpdGVyYWxUeXBlSW5mb3JtYXRpb24oU3RyaW5nTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Qm9vbExpdGVyYWxUeXBlSW5mb3JtYXRpb24oQm9vbExpdGVyYWxUeXBlSW5mb3JtYXRpb24gaW5mbykge30KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdENsb3N1cmVUeXBlSW5mb3JtYXRpb24oQ2xvc3VyZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7fQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0Q2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uKAogICAgICBDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykge30KCiAgQG92ZXJyaWRlCiAgdmlzaXRTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbihTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBNZW1iZXJFbnRpdHkgY2FsbGVkID0gaW5mby5jYWxsZWRFbGVtZW50OwogICAgVHlwZUluZm9ybWF0aW9uIGluZmVycmVkID0gaW5mZXJyZXIudHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoY2FsbGVkKTsKICAgIGlmIChpbmZlcnJlZCA9PSBjdXJyZW50VXNlcikgewogICAgICBhZGROZXdFc2NhcGVJbmZvcm1hdGlvbihpbmZvKTsKICAgIH0KICB9CgogIHZvaWQgYW5hbHl6ZVN0b3JlZEludG9MaXN0KExpc3RUeXBlSW5mb3JtYXRpb24gbGlzdCkgewogICAgaW5mZXJyZXIuYW5hbHl6ZUxpc3RBbmRFbnF1ZXVlKGxpc3QpOwogICAgaWYgKGxpc3QuYmFpbGVkT3V0KSB7CiAgICAgIGJhaWxvdXQoJ1N0b3JlZCBpbiBhIGxpc3QgdGhhdCBiYWlsZWQgb3V0Jyk7CiAgICB9IGVsc2UgewogICAgICBsaXN0LmZsb3dzSW50by5mb3JFYWNoKChUeXBlSW5mb3JtYXRpb24gZmxvdykgewogICAgICAgIGZsb3cudXNlcnMuZm9yRWFjaCgoVHlwZUluZm9ybWF0aW9uIHVzZXIpIHsKICAgICAgICAgIGlmICh1c2VyIGlzIER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbikgewogICAgICAgICAgICBpZiAodXNlci5yZWNlaXZlciAhPSBmbG93KSByZXR1cm47CiAgICAgICAgICAgIGlmIChpbmZlcnJlci5yZXR1cm5zTGlzdEVsZW1lbnRUeXBlU2V0LmNvbnRhaW5zKHVzZXIuc2VsZWN0b3IpKSB7CiAgICAgICAgICAgICAgYWRkTmV3RXNjYXBlSW5mb3JtYXRpb24odXNlcik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRvZXNOb3RFc2NhcGVMaXN0U2V0LmNvbnRhaW5zKHVzZXIuc2VsZWN0b3IubmFtZSkpIHsKICAgICAgICAgICAgICBiYWlsb3V0KCdFc2NhcGUgZnJvbSBhIGxpc3QgdmlhIFske3VzZXIuc2VsZWN0b3IubmFtZX1dJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgfQoKICB2b2lkIGFuYWx5emVTdG9yZWRJbnRvU2V0KFNldFR5cGVJbmZvcm1hdGlvbiBzZXQpIHsKICAgIGluZmVycmVyLmFuYWx5emVTZXRBbmRFbnF1ZXVlKHNldCk7CiAgICBpZiAoc2V0LmJhaWxlZE91dCkgewogICAgICBiYWlsb3V0KCdTdG9yZWQgaW4gYSBzZXQgdGhhdCBiYWlsZWQgb3V0Jyk7CiAgICB9IGVsc2UgewogICAgICBzZXQuZmxvd3NJbnRvLmZvckVhY2goKFR5cGVJbmZvcm1hdGlvbiBmbG93KSB7CiAgICAgICAgZmxvdy51c2Vycy5mb3JFYWNoKChUeXBlSW5mb3JtYXRpb24gdXNlcikgewogICAgICAgICAgaWYgKHVzZXIgaXMgRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKSB7CiAgICAgICAgICAgIGlmICh1c2VyLnJlY2VpdmVyICE9IGZsb3cpIHJldHVybjsKICAgICAgICAgICAgaWYgKHVzZXIuc2VsZWN0b3IuaXNJbmRleCkgewogICAgICAgICAgICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKHVzZXIpOwogICAgICAgICAgICB9IGVsc2UgaWYgKCFkb2VzTm90RXNjYXBlU2V0U2V0LmNvbnRhaW5zKHVzZXIuc2VsZWN0b3IubmFtZSkpIHsKICAgICAgICAgICAgICBiYWlsb3V0KCdFc2NhcGUgZnJvbSBhIHNldCB2aWEgWyR7dXNlci5zZWxlY3Rvci5uYW1lfV0nKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0KICB9CgogIHZvaWQgYW5hbHl6ZVN0b3JlZEludG9NYXAoTWFwVHlwZUluZm9ybWF0aW9uIG1hcCkgewogICAgaW5mZXJyZXIuYW5hbHl6ZU1hcEFuZEVucXVldWUobWFwKTsKICAgIGlmIChtYXAuYmFpbGVkT3V0KSB7CiAgICAgIGJhaWxvdXQoJ1N0b3JlZCBpbiBhIG1hcCB0aGF0IGJhaWxlZCBvdXQnKTsKICAgIH0gZWxzZSB7CiAgICAgIG1hcC5mbG93c0ludG8uZm9yRWFjaCgoVHlwZUluZm9ybWF0aW9uIGZsb3cpIHsKICAgICAgICBmbG93LnVzZXJzLmZvckVhY2goKFR5cGVJbmZvcm1hdGlvbiB1c2VyKSB7CiAgICAgICAgICBpZiAodXNlciBpcyBEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24pIHsKICAgICAgICAgICAgaWYgKHVzZXIucmVjZWl2ZXIgIT0gZmxvdykgcmV0dXJuOwogICAgICAgICAgICBpZiAodXNlci5zZWxlY3Rvci5pc0luZGV4KSB7CiAgICAgICAgICAgICAgYWRkTmV3RXNjYXBlSW5mb3JtYXRpb24odXNlcik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoIWRvZXNOb3RFc2NhcGVNYXBTZXQuY29udGFpbnModXNlci5zZWxlY3Rvci5uYW1lKSkgewogICAgICAgICAgICAgIGJhaWxvdXQoJ0VzY2FwZSBmcm9tIGEgbWFwIHZpYSBbJHt1c2VyLnNlbGVjdG9yLm5hbWV9XScpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgLy8vIENoZWNrcyB3aGV0aGVyIHRoaXMgaXMgYSBjYWxsIHRvIGEgbGlzdCBhZGRpbmcgbWV0aG9kLiBUaGUgZGVmaW5pdGlvbiBvZgogIC8vLyB3aGF0IGxpc3QgYWRkaW5nIG1lYW5zIGhhcyB0byBzdGF5IGluIHN5bmMgd2l0aAogIC8vLyBbaXNQYXJhbWV0ZXJPZkxpc3RBZGRpbmdNZXRob2RdLgogIGJvb2wgbWlnaHRBZGRUb0NvbnRhaW5lcihEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgaWYgKGluZm8uYXJndW1lbnRzID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGlmIChpbmZvLmFyZ3VtZW50cy5uYW1lZC5pc05vdEVtcHR5KSByZXR1cm4gZmFsc2U7CiAgICBTdHJpbmcgc2VsZWN0b3JOYW1lID0gaW5mby5zZWxlY3Rvci5uYW1lOwogICAgTGlzdDxUeXBlSW5mb3JtYXRpb24+IGFyZ3VtZW50cyA9IGluZm8uYXJndW1lbnRzLnBvc2l0aW9uYWw7CiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7CiAgICAgIHJldHVybiAoc2VsZWN0b3JOYW1lID09ICdhZGQnICYmIGN1cnJlbnRVc2VyID09IGFyZ3VtZW50c1swXSk7CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgewogICAgICByZXR1cm4gKHNlbGVjdG9yTmFtZSA9PSAnaW5zZXJ0JyAmJiBjdXJyZW50VXNlciA9PSBhcmd1bWVudHNbMV0pOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgYm9vbCBpc0luZGV4U2V0QXJndW1lbnQoRHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uIGluZm8sIGludCBpbmRleCkgewogICAgU3RyaW5nIHNlbGVjdG9yTmFtZSA9IGluZm8uc2VsZWN0b3IubmFtZTsKICAgIGlmIChzZWxlY3Rvck5hbWUgIT0gJ1tdPScpIHJldHVybiBmYWxzZTsKICAgIGFzc2VydChpbmZvLmFyZ3VtZW50cy5sZW5ndGggPT0gMik7CiAgICBMaXN0PFR5cGVJbmZvcm1hdGlvbj4gYXJndW1lbnRzID0gaW5mby5hcmd1bWVudHMucG9zaXRpb25hbDsKICAgIHJldHVybiBjdXJyZW50VXNlciA9PSBhcmd1bWVudHNbaW5kZXhdOwogIH0KCiAgLy8vIENoZWNrcyB3aGV0aGVyIHRoZSBjYWxsIHNpdGUgZmxvd3MgdGhlIGN1cnJlbnRVc2VyIHRvIHRoZSBrZXkgYXJndW1lbnQgb2YKICAvLy8gYW4gaW5kZXhpbmcgc2V0dGVyLiBUaGlzIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGgKICAvLy8gW2lzUGFyYW1ldGVyT2ZNYXBBZGRpbmdNZXRob2RdLgogIGJvb2wgaXNJbmRleFNldEtleShEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgcmV0dXJuIGlzSW5kZXhTZXRBcmd1bWVudChpbmZvLCAwKTsKICB9CgogIC8vLyBDaGVja3Mgd2hldGhlciB0aGUgY2FsbCBzaXRlIGZsb3dzIHRoZSBjdXJyZW50VXNlciB0byB0aGUgdmFsdWUgYXJndW1lbnQKICAvLy8gb2YgYW4gaW5kZXhpbmcgc2V0dGVyLiBUaGlzIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGgKICAvLy8gW2lzUGFyYW1ldGVyT2ZMaXN0QWRkaW5nTWV0aG9kXSBhbmQgW2lzUGFyYW1ldGVyT2ZNYXBBZGRpbmdNZXRob2RdLgogIGJvb2wgaXNJbmRleFNldFZhbHVlKER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICByZXR1cm4gaXNJbmRleFNldEFyZ3VtZW50KGluZm8sIDEpOwogIH0KCiAgdm9pZCBiYWlsb3V0SWZSZWFjaGVzKGJvb2wgcHJlZGljYXRlKFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbiBlKSkgewogICAgZm9yICh2YXIgdXNlciBpbiBjdXJyZW50VXNlci51c2VycykgewogICAgICBpZiAodXNlciBpcyBQYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb24pIHsKICAgICAgICBpZiAocHJlZGljYXRlKHVzZXIpKSB7CiAgICAgICAgICBiYWlsb3V0KCdSZWFjaGVkIHN1cHByZXNzZWQgcGFyYW1ldGVyIHdpdGhvdXQgcHJlY2lzZSByZWNlaXZlcicpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0RHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uKAogICAgICBEeW5hbWljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgdm9pZCBhZGRzVG9Db250YWluZXIoQWJzdHJhY3RWYWx1ZSBtYXNrKSB7CiAgICAgIE9iamVjdCBhbGxvY2F0aW9uTm9kZSA9CiAgICAgICAgICBpbmZlcnJlci5hYnN0cmFjdFZhbHVlRG9tYWluLmdldEFsbG9jYXRpb25Ob2RlKG1hc2spOwogICAgICBpZiAoYWxsb2NhdGlvbk5vZGUgIT0gbnVsbCkgewogICAgICAgIExpc3RUeXBlSW5mb3JtYXRpb24gbGlzdCA9CiAgICAgICAgICAgIGluZmVycmVyLnR5cGVzLmFsbG9jYXRlZExpc3RzW2FsbG9jYXRpb25Ob2RlXTsKICAgICAgICBsaXN0c1RvQW5hbHl6ZS5hZGQobGlzdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gVGhlIFttYXNrXSBpcyBhIHVuaW9uIG9mIHR3byBjb250YWluZXJzLCBhbmQgd2UgbG9zZSB0cmFjayBvZiB3aGVyZQogICAgICAgIC8vIHRoZXNlIGNvbnRhaW5lcnMgaGF2ZSBiZWVuIGFsbG9jYXRlZCBhdCB0aGlzIHBvaW50LgogICAgICAgIGJhaWxvdXQoJ1N0b3JlZCBpbiB0b28gbWFueSBjb250YWluZXJzJyk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFkZHNUb01hcFZhbHVlKEFic3RyYWN0VmFsdWUgbWFzaykgewogICAgICBPYmplY3QgYWxsb2NhdGlvbk5vZGUgPQogICAgICAgICAgaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRBbGxvY2F0aW9uTm9kZShtYXNrKTsKICAgICAgaWYgKGFsbG9jYXRpb25Ob2RlICE9IG51bGwpIHsKICAgICAgICBNYXBUeXBlSW5mb3JtYXRpb24gbWFwID0gaW5mZXJyZXIudHlwZXMuYWxsb2NhdGVkTWFwc1thbGxvY2F0aW9uTm9kZV07CiAgICAgICAgbWFwc1RvQW5hbHl6ZS5hZGQobWFwKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBUaGUgW21hc2tdIGlzIGEgdW5pb24uIFNlZSBjb21tZW50IGZvciBbbWFza10gYWJvdmUuCiAgICAgICAgYmFpbG91dCgnU3RvcmVkIGluIHRvbyBtYW55IG1hcHMnKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgYWRkc1RvTWFwS2V5KEFic3RyYWN0VmFsdWUgbWFzaykgewogICAgICAvLyBXZSBkbyBub3QgdHJhY2sgdGhlIHVzZSBvZiBrZXlzIGZyb20gYSBtYXAsIHNvIHdlIGhhdmUgdG8gYmFpbC4KICAgICAgYmFpbG91dCgnVXNlZCBhcyBrZXkgaW4gTWFwJyk7CiAgICB9CgogICAgLy8gImFbLi4uXSA9IHgiIGNvdWxkIGJlIGEgbGlzdCAoY29udGFpbmVyKSBvciBtYXAgYXNzaWduZW1udC4KICAgIGlmIChpc0luZGV4U2V0VmFsdWUoaW5mbykpIHsKICAgICAgdmFyIHJlY2VpdmVyVHlwZSA9IGluZm8ucmVjZWl2ZXIudHlwZTsKICAgICAgaWYgKGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW4uaXNDb250YWluZXIocmVjZWl2ZXJUeXBlKSkgewogICAgICAgIGFkZHNUb0NvbnRhaW5lcihyZWNlaXZlclR5cGUpOwogICAgICB9IGVsc2UgaWYgKGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW4uaXNNYXAocmVjZWl2ZXJUeXBlKSkgewogICAgICAgIGFkZHNUb01hcFZhbHVlKHJlY2VpdmVyVHlwZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gTm90IGEgY29udGFpbmVyIG9yIG1hcCwgc28gdGhlIHRhcmdldHMgY291bGQgYmUgYW55IG1ldGhvZHMuIFRoZXJlCiAgICAgICAgLy8gYXJlIGVkZ2VzIGZyb20gdGhlIFtjdXJyZW50VXNlcl0gdG8gdGhlIHBhcmFtZXRlcnMgb2YgdGhlIHRhcmdldHMsIHNvCiAgICAgICAgLy8gdHJhY2luZyB3aWxsIGNvbnRpbnVlIGludG8gdGhlIHRhcmdldHMuICBUcmFjaW5nIHN0b3BzIGF0IHBhcmFtZXRlcnMKICAgICAgICAvLyB0aGF0IG1hdGNoIHRoZSB0YXJnZXRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlY2VpdmVyVHlwZXMgYWJvdmUgKHRvCiAgICAgICAgLy8gcHJldmVudCBpbXByZWNpc2UgcmVzdWx0cyBmcm9tIHRyYWNpbmcgdGhlIGltcGxlbWVudGF0aW9uKSwgc28gd2UKICAgICAgICAvLyBuZWVkIGNvbXBlbnNhdGUgaWYgb25lIG9mIHRoZSB0YXJnZXRzIGlzIGluIHRoZSB0YXJnZXQgc2V0LiBJZiB0aGVyZQogICAgICAgIC8vIGlzIGFuIGVkZ2UgdG8gYSBwYXJhbWV0ZXIgbWF0Y2hpbmcgW2lzUGFyYW1ldGVyT2ZMaXN0QWRkaW5nTWV0aG9kXSBvcgogICAgICAgIC8vIFtpc1BhcmFtZXRlck9mTWFwQWRkaW5nTWV0aG9kXSB0aGVuIHRoZSB0cmFjZWQgdmFsdWUgaXMgYmVpbmcgc3RvcmVkCiAgICAgICAgLy8gaW50byBhbiB1bnRyYWNlZCBsaXN0IG9yIG1hcC4KCiAgICAgICAgLy8gVE9ETyhzcmEpOiBJdCB3b3VsZCBiZSBtb3JlIHByZWNpc2UgdG8gc3BlY2lmaWNhbGx5IG1hdGNoIHRoZSBgdmFsdWUnCiAgICAgICAgLy8gcGFyYW1ldGVycyBvZiAib3BlcmF0b3IgW109Ii4KICAgICAgICBiYWlsb3V0SWZSZWFjaGVzKGlzUGFyYW1ldGVyT2ZMaXN0QWRkaW5nTWV0aG9kKTsKICAgICAgICBiYWlsb3V0SWZSZWFjaGVzKGlzUGFyYW1ldGVyT2ZNYXBBZGRpbmdNZXRob2QpOwogICAgICB9CiAgICB9CgogICAgLy8gQ291bGQgYmU6ICBtW3hdID0gLi4uOwogICAgaWYgKGlzSW5kZXhTZXRLZXkoaW5mbykpIHsKICAgICAgdmFyIHJlY2VpdmVyVHlwZSA9IGluZm8ucmVjZWl2ZXIudHlwZTsKICAgICAgaWYgKGluZmVycmVyLmFic3RyYWN0VmFsdWVEb21haW4uaXNNYXAocmVjZWl2ZXJUeXBlKSkgewogICAgICAgIGFkZHNUb01hcEtleShyZWNlaXZlclR5cGUpOwogICAgICB9IGVsc2UgewogICAgICAgIGJhaWxvdXRJZlJlYWNoZXMoaXNQYXJhbWV0ZXJPZkxpc3RBZGRpbmdNZXRob2QpOwogICAgICAgIGJhaWxvdXRJZlJlYWNoZXMoaXNQYXJhbWV0ZXJPZk1hcEFkZGluZ01ldGhvZCk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAobWlnaHRBZGRUb0NvbnRhaW5lcihpbmZvKSkgewogICAgICB2YXIgcmVjZWl2ZXJUeXBlID0gaW5mby5yZWNlaXZlci50eXBlOwogICAgICBpZiAoaW5mZXJyZXIuYWJzdHJhY3RWYWx1ZURvbWFpbi5pc0NvbnRhaW5lcihyZWNlaXZlclR5cGUpKSB7CiAgICAgICAgYWRkc1RvQ29udGFpbmVyKHJlY2VpdmVyVHlwZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gTm90IGEgY29udGFpbmVyLCBzZWUgbm90ZSBhYm92ZS4KICAgICAgICBiYWlsb3V0SWZSZWFjaGVzKGlzUGFyYW1ldGVyT2ZMaXN0QWRkaW5nTWV0aG9kKTsKICAgICAgfQogICAgfQoKICAgIGlmIChpbmZvLnRhcmdldHNJbmNsdWRlQ29tcGxleE5vU3VjaE1ldGhvZChpbmZlcnJlcikgJiYKICAgICAgICBpbmZvLmFyZ3VtZW50cyAhPSBudWxsICYmCiAgICAgICAgaW5mby5hcmd1bWVudHMuY29udGFpbnMoY3VycmVudFVzZXIpKSB7CiAgICAgIGJhaWxvdXQoJ1Bhc3NlZCB0byBub1N1Y2hNZXRob2QnKTsKICAgIH0KCiAgICBJdGVyYWJsZTxUeXBlSW5mb3JtYXRpb24+IGluZmVycmVkVGFyZ2V0VHlwZXMgPQogICAgICAgIGluZm8uY29uY3JldGVUYXJnZXRzLm1hcCgoTWVtYmVyRW50aXR5IGVudGl0eSkgewogICAgICByZXR1cm4gaW5mZXJyZXIudHlwZXMuZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXIoZW50aXR5KTsKICAgIH0pOwogICAgaWYgKGluZmVycmVkVGFyZ2V0VHlwZXMuYW55KCh1c2VyKSA9PiB1c2VyID09IGN1cnJlbnRVc2VyKSkgewogICAgICBhZGROZXdFc2NhcGVJbmZvcm1hdGlvbihpbmZvKTsKICAgIH0KICB9CgogIC8vLyBDaGVjayB3aGV0aGVyIGVsZW1lbnQgaXMgdGhlIHBhcmFtZXRlciBvZiBhIGxpc3QgYWRkaW5nIG1ldGhvZC4KICAvLy8gVGhlIGRlZmluaXRpb24gb2Ygd2hhdCBhIGxpc3QgYWRkaW5nIG1ldGhvZCBpcyBoYXMgdG8gc3RheSBpbiBzeW5jIHdpdGgKICAvLy8gW21pZ2h0QWRkVG9Db250YWluZXJdLgogIGJvb2wgaXNQYXJhbWV0ZXJPZkxpc3RBZGRpbmdNZXRob2QoUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uIHBhcmFtZXRlckluZm8pIHsKICAgIGlmICghcGFyYW1ldGVySW5mby5pc1JlZ3VsYXJQYXJhbWV0ZXIpIHJldHVybiBmYWxzZTsKICAgIGlmIChwYXJhbWV0ZXJJbmZvLm1ldGhvZC5lbmNsb3NpbmdDbGFzcyAhPQogICAgICAgIGluZmVycmVyLmNsb3NlZFdvcmxkLmNvbW1vbkVsZW1lbnRzLmpzQXJyYXlDbGFzcykgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBTdHJpbmcgbmFtZSA9IHBhcmFtZXRlckluZm8ubWV0aG9kLm5hbWU7CiAgICByZXR1cm4gKG5hbWUgPT0gJ1tdPScpIHx8IChuYW1lID09ICdhZGQnKSB8fCAobmFtZSA9PSAnaW5zZXJ0Jyk7CiAgfQoKICAvLy8gQ2hlY2sgd2hldGhlciBlbGVtZW50IGlzIHRoZSBwYXJhbWV0ZXIgb2YgYSBsaXN0IGFkZGluZyBtZXRob2QuCiAgLy8vIFRoZSBkZWZpbml0aW9uIG9mIHdoYXQgYSBsaXN0IGFkZGluZyBtZXRob2QgaXMgaGFzIHRvIHN0YXkgaW4gc3luYyB3aXRoCiAgLy8vIFtpc0luZGV4U2V0S2V5XSBhbmQgW2lzSW5kZXhTZXRWYWx1ZV0uCiAgYm9vbCBpc1BhcmFtZXRlck9mTWFwQWRkaW5nTWV0aG9kKFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbiBwYXJhbWV0ZXJJbmZvKSB7CiAgICBpZiAoIXBhcmFtZXRlckluZm8uaXNSZWd1bGFyUGFyYW1ldGVyKSByZXR1cm4gZmFsc2U7CiAgICBpZiAocGFyYW1ldGVySW5mby5tZXRob2QuZW5jbG9zaW5nQ2xhc3MgIT0KICAgICAgICBpbmZlcnJlci5jbG9zZWRXb3JsZC5jb21tb25FbGVtZW50cy5tYXBMaXRlcmFsQ2xhc3MpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgU3RyaW5nIG5hbWUgPSBwYXJhbWV0ZXJJbmZvLm1ldGhvZC5uYW1lOwogICAgcmV0dXJuIChuYW1lID09ICdbXT0nKTsKICB9CgogIGJvb2wgaXNDbG9zdXJlKE1lbWJlckVudGl0eSBlbGVtZW50KSB7CiAgICBpZiAoIWVsZW1lbnQuaXNGdW5jdGlvbikgcmV0dXJuIGZhbHNlOwoKICAgIC8vLyBDcmVhdGluZyBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBbRnVuY3Rpb25dIGFsc28KICAgIC8vLyBjbG9zdXJpemVzIHRoZSBjb3JyZXNwb25kaW5nIFtjYWxsXSBtZW1iZXIuIFdlIGRvIG5vdCBjdXJyZW50bHkKICAgIC8vLyB0cmFjayB0aGVzZSwgdGh1cyB0aGUgY2hlY2sgZm9yIFtpc0Nsb3N1cml6ZWRdIG9uIHN1Y2ggYSBtZXRob2Qgd2lsbAogICAgLy8vIHJldHVybiBmYWxzZS4gSW5zdGVhZCB3ZSBjYXRjaCB0aGF0IGNhc2UgaGVyZSBmb3Igbm93LgogICAgLy8gVE9ETyhoZXJodXQpOiBIYW5kbGUgY3JlYXRpb24gb2YgY2xvc3VyZXMgZnJvbSBpbnN0YW5jZXMgb2YgRnVuY3Rpb24uCiAgICBpZiAoZWxlbWVudC5pc0luc3RhbmNlTWVtYmVyICYmIGVsZW1lbnQubmFtZSA9PSBJZGVudGlmaWVycy5jYWxsKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgQ2xhc3NFbnRpdHkgY2xzID0gZWxlbWVudC5lbmNsb3NpbmdDbGFzczsKICAgIHJldHVybiBjbHMgIT0gbnVsbCAmJiBjbHMuaXNDbG9zdXJlOwogIH0KCiAgQG92ZXJyaWRlCiAgdm9pZCB2aXNpdE1lbWJlclR5cGVJbmZvcm1hdGlvbihNZW1iZXJUeXBlSW5mb3JtYXRpb24gaW5mbykgewogICAgaWYgKGluZm8uaXNDbG9zdXJpemVkKSB7CiAgICAgIGJhaWxvdXQoJ1JldHVybmVkIGZyb20gYSBjbG9zdXJpemVkIG1ldGhvZCcpOwogICAgfQogICAgaWYgKGlzQ2xvc3VyZShpbmZvLm1lbWJlcikpIHsKICAgICAgYmFpbG91dCgnUmV0dXJuZWQgZnJvbSBhIGNsb3N1cmUnKTsKICAgIH0KICAgIGlmIChpbmZvLm1lbWJlci5pc0ZpZWxkICYmCiAgICAgICAgIWluZmVycmVyLmNhbkZpZWxkQmVVc2VkRm9yR2xvYmFsT3B0aW1pemF0aW9ucyhpbmZvLm1lbWJlcikpIHsKICAgICAgYmFpbG91dCgnRXNjYXBlIHRvIGNvZGUgdGhhdCBoYXMgc3BlY2lhbCBiYWNrZW5kIHRyZWF0bWVudCcpOwogICAgfQogICAgYWRkTmV3RXNjYXBlSW5mb3JtYXRpb24oaW5mbyk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHZpc2l0UGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uKFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbiBpbmZvKSB7CiAgICBpZiAoaW5mZXJyZXIuY2xvc2VkV29ybGQubmF0aXZlRGF0YS5pc05hdGl2ZU1lbWJlcihpbmZvLm1ldGhvZCkpIHsKICAgICAgYmFpbG91dCgnUGFzc2VkIHRvIGEgbmF0aXZlIG1ldGhvZCcpOwogICAgfQogICAgaWYgKCFpbmZlcnJlcgogICAgICAgIC5jYW5GdW5jdGlvblBhcmFtZXRlcnNCZVVzZWRGb3JHbG9iYWxPcHRpbWl6YXRpb25zKGluZm8ubWV0aG9kKSkgewogICAgICBiYWlsb3V0KCdFc2NhcGUgdG8gY29kZSB0aGF0IGhhcyBzcGVjaWFsIGJhY2tlbmQgdHJlYXRtZW50Jyk7CiAgICB9CiAgICBpZiAoaXNQYXJhbWV0ZXJPZkxpc3RBZGRpbmdNZXRob2QoaW5mbykgfHwKICAgICAgICBpc1BhcmFtZXRlck9mTWFwQWRkaW5nTWV0aG9kKGluZm8pKSB7CiAgICAgIC8vIFRoZXNlIGVsZW1lbnRzIGFyZSBiZWluZyBoYW5kbGVkIGluCiAgICAgIC8vIFt2aXNpdER5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbl0uCiAgICAgIHJldHVybjsKICAgIH0KICAgIGFkZE5ld0VzY2FwZUluZm9ybWF0aW9uKGluZm8pOwogIH0KfQqCKABOTjwBKwEwJCglHh8gAUQJSBIIDg4SEQEUDRAMDgoBEAkMCw8NDA8RDBESDA4NCQETEhMEAUcSCA4OEhEBFA0QDA4KAQ8JDAsRDA8PBAFHEggODhIRDw0QDAsREwlFCQQBSkEkIQEoTEwBMQFGHT4BQ0s/TAFCUDhJAUJLPUkBSwE0HyEBNyoZGAQBKS1GGCo0FkYIBhIEARNBRykgKzUjDwg4KhsIKDwIKToIJzoIJQYEASAZPAYfBAEMPiUEAQw+SUtMOCUEAQxAIwQBDEgjBAEMLzAjBAEMTCMEAQxERyMEAQxIIwQBDDweBAEMOh0EAQw6HQQBDEUBDE8BDEsBDEMBDCwuAQxLLk8jJQYEATkqGjMNNjQ4L04tTUkODAwKBgQBNigZMg01NDgvKS1MSA4MDAoGBAE2KBkyDTU0OC8pLUxIDgwMCgYEAU82J0IuNy5BIUUoSAYSBAFMLi0oQSwEAVA5JjwoBAFPPEo+KAQBRiouH0wRCggGBAEMLC0vHkAkIzsiD08/MggGAS4eQCRPIA9ALAgGASxJJQYBQyEtRCdFJg9OUVBPTVBRUCkBUSk5OAgGAR4fLT4kDzk4CAYBJS1EJw8sOQgGATwiMCkGATQ5PQhCJQYEAUZOHU85LzwUBi1FBAFGTi1OOS8/FAYtHAQBKSsBSEhNP01IEwYuKQQBDEAdNAYiKgYfR0QGIwQBDEZHLAYSS0QGLy4tMA4GIwQCAS5wYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci9ub2RlX3RyYWNlci5kYXJ0QXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2JhY2tlbmQvanNfaW50ZXJvcF9hbmFseXNpcy5kYXJ0iKMvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIEFuYWx5c2lzIHRvIGRldGVybWluZSBob3cgdG8gZ2VuZXJhdGUgY29kZSBmb3IgdHlwZWQgSmF2YVNjcmlwdCBpbnRlcm9wLgpsaWJyYXJ5IGNvbXBpbGVyLnNyYy5qc19iYWNrZW5kLmpzX2ludGVyb3BfYW5hbHlzaXM7CgppbXBvcnQgJy4uL2VsZW1lbnRzL3R5cGVzLmRhcnQnOwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIGFzIGpzQXN0OwppbXBvcnQgJy4uL2pzL2pzLmRhcnQnIHNob3cganM7CmltcG9ydCAnLi4vdW5pdmVyc2Uvc2VsZWN0b3IuZGFydCcgc2hvdyBTZWxlY3RvcjsKaW1wb3J0ICcuLi91bml2ZXJzZS9jb2RlZ2VuX3dvcmxkX2J1aWxkZXIuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfYnVpbGRlci5kYXJ0JyBzaG93IFNlbGVjdG9yQ29uc3RyYWludHM7CmltcG9ydCAnbmFtZXIuZGFydCc7CmltcG9ydCAnbmF0aXZlX2RhdGEuZGFydCc7Cgpqc0FzdC5TdGF0ZW1lbnQgYnVpbGRKc0ludGVyb3BCb290c3RyYXAoCiAgICBDb2RlZ2VuV29ybGQgY29kZWdlbldvcmxkLCBOYXRpdmVCYXNpY0RhdGEgbmF0aXZlQmFzaWNEYXRhLCBOYW1lciBuYW1lcikgewogIGlmICghbmF0aXZlQmFzaWNEYXRhLmlzSnNJbnRlcm9wVXNlZCkgcmV0dXJuIG51bGw7CiAgTGlzdDxqc0FzdC5TdGF0ZW1lbnQ+IHN0YXRlbWVudHMgPSA8anNBc3QuU3RhdGVtZW50PltdOwogIGNvZGVnZW5Xb3JsZC5mb3JFYWNoSW52b2tlZE5hbWUoCiAgICAgIChTdHJpbmcgbmFtZSwgTWFwPFNlbGVjdG9yLCBTZWxlY3RvckNvbnN0cmFpbnRzPiBzZWxlY3RvcnMpIHsKICAgIHNlbGVjdG9ycy5mb3JFYWNoKChTZWxlY3RvciBzZWxlY3RvciwgU2VsZWN0b3JDb25zdHJhaW50cyBjb25zdHJhaW50cykgewogICAgICBpZiAoc2VsZWN0b3IuaXNDbG9zdXJlQ2FsbCkgewogICAgICAgIC8vIFRPRE8oamFjb2JyKTogc3VwcG9ydCBuYW1lZCBhcmd1bWVudHMuCiAgICAgICAgaWYgKHNlbGVjdG9yLm5hbWVkQXJndW1lbnRDb3VudCA+IDApIHJldHVybjsKICAgICAgICBpbnQgYXJndW1lbnRDb3VudCA9IHNlbGVjdG9yLmFyZ3VtZW50Q291bnQ7CiAgICAgICAgU3RyaW5nIGNhbmRpZGF0ZVBhcmFtZXRlck5hbWVzID0KICAgICAgICAgICAgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonOwogICAgICAgIExpc3Q8U3RyaW5nPiBwYXJhbWV0ZXJzID0gbmV3IExpc3Q8U3RyaW5nPi5nZW5lcmF0ZSgKICAgICAgICAgICAgYXJndW1lbnRDb3VudCwgKGkpID0+IGNhbmRpZGF0ZVBhcmFtZXRlck5hbWVzW2ldKTsKCiAgICAgICAganNBc3QuTmFtZSBuYW1lID0gbmFtZXIuaW52b2NhdGlvbk5hbWUoc2VsZWN0b3IpOwogICAgICAgIHN0YXRlbWVudHMuYWRkKGpzLnN0YXRlbWVudCgKICAgICAgICAgICAgJ0Z1bmN0aW9uLnByb3RvdHlwZS4jID0gZnVuY3Rpb24oIykgeyByZXR1cm4gdGhpcygjKSB9JywKICAgICAgICAgICAgW25hbWUsIHBhcmFtZXRlcnMsIHBhcmFtZXRlcnNdKSk7CiAgICAgIH0KICAgIH0pOwogIH0pOwogIHJldHVybiBuZXcganNBc3QuQmxvY2soc3RhdGVtZW50cyk7Cn0KCkZ1bmN0aW9uVHlwZSBidWlsZEpzRnVuY3Rpb25UeXBlKCkgewogIC8vIFRPRE8oamFjb2JyKTogY29uc2lkZXIgdXNpbmcgY29kZWdlbldvcmxkQnVpbGRlci5pc0NoZWNrcyB0byBkZXRlcm1pbmUgdGhlCiAgLy8gcmFuZ2Ugb2YgcG9zaXRpb25hbCBhcmd1bWVudHMgdGhhdCBuZWVkIHRvIGJlIHN1cHBvcnRlZCBieSBKYXZhU2NyaXB0CiAgLy8gZnVuY3Rpb24gdHlwZXMuCiAgcmV0dXJuIG5ldyBGdW5jdGlvblR5cGUoCiAgICAgIGNvbnN0IER5bmFtaWNUeXBlKCksCiAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgbmV3IExpc3Q8RGFydFR5cGU+LmZpbGxlZCgxNiwgY29uc3QgRHluYW1pY1R5cGUoKSksCiAgICAgIGNvbnN0IDxTdHJpbmc+W10sCiAgICAgIGNvbnN0IDxEYXJ0VHlwZT5bXSwKICAgICAgY29uc3QgPEZ1bmN0aW9uVHlwZVZhcmlhYmxlPltdKTsKfQo4AE5OPAFNNQEhISAyMUIVGwEpTzU6I0RNJDI1NClEPT8BOiVFLggIBiYCASVQSxUbGxo6GBonAgE4cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9qc19pbnRlcm9wX2FuYWx5c2lzLmRhcnQ2c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvcmVzb2x1dGlvbi9yZWdpc3RyeS5kYXJ0loovLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLnJlc29sdXRpb24ucmVnaXN0cnk7CgppbXBvcnQgJy4uL2NvbW1vbi9yZXNvbHV0aW9uLmRhcnQnIHNob3cgUmVzb2x1dGlvbkltcGFjdDsKaW1wb3J0ICcuLi9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCcgc2hvdyBDbGFzc0VudGl0eSwgTWVtYmVyRW50aXR5OwppbXBvcnQgJy4uL3VuaXZlcnNlL2ZlYXR1cmUuZGFydCc7CmltcG9ydCAnLi4vdW5pdmVyc2Uvd29ybGRfaW1wYWN0LmRhcnQnIHNob3cgV29ybGRJbXBhY3QsIFdvcmxkSW1wYWN0QnVpbGRlckltcGw7CmltcG9ydCAnLi4vdXRpbC9lbnVtc2V0LmRhcnQnIHNob3cgRW51bVNldDsKaW1wb3J0ICcuLi91dGlsL3V0aWwuZGFydCcgc2hvdyBTZXRsZXQ7CgpjbGFzcyBSZXNvbHV0aW9uV29ybGRJbXBhY3RCdWlsZGVyIGV4dGVuZHMgV29ybGRJbXBhY3RCdWlsZGVySW1wbAogICAgaW1wbGVtZW50cyBSZXNvbHV0aW9uSW1wYWN0IHsKICBAb3ZlcnJpZGUKICBmaW5hbCBNZW1iZXJFbnRpdHkgbWVtYmVyOwogIEVudW1TZXQ8RmVhdHVyZT4gX2ZlYXR1cmVzOwogIFNldGxldDxNYXBMaXRlcmFsVXNlPiBfbWFwTGl0ZXJhbHM7CiAgU2V0bGV0PFNldExpdGVyYWxVc2U+IF9zZXRMaXRlcmFsczsKICBTZXRsZXQ8TGlzdExpdGVyYWxVc2U+IF9saXN0TGl0ZXJhbHM7CiAgU2V0bGV0PFN0cmluZz4gX2NvbnN0U3ltYm9sTmFtZXM7CiAgU2V0bGV0PENvbnN0YW50RXhwcmVzc2lvbj4gX2NvbnN0YW50TGl0ZXJhbHM7CiAgU2V0bGV0PGR5bmFtaWM+IF9uYXRpdmVEYXRhOwogIFNldGxldDxDbGFzc0VudGl0eT4gX3NlZW5DbGFzc2VzOwogIFNldDxSdW50aW1lVHlwZVVzZT4gX3J1bnRpbWVUeXBlVXNlczsKICBTZXQ8R2VuZXJpY0luc3RhbnRpYXRpb24+IF9nZW5lcmljSW5zdGFudGlhdGlvbnM7CgogIFJlc29sdXRpb25Xb3JsZEltcGFjdEJ1aWxkZXIodGhpcy5tZW1iZXIpOwoKICBAb3ZlcnJpZGUKICBib29sIGdldCBpc0VtcHR5ID0+IGZhbHNlOwoKICB2b2lkIHJlZ2lzdGVyTWFwTGl0ZXJhbChNYXBMaXRlcmFsVXNlIG1hcExpdGVyYWxVc2UpIHsKICAgIGFzc2VydChtYXBMaXRlcmFsVXNlICE9IG51bGwpOwogICAgX21hcExpdGVyYWxzID8/PSBuZXcgU2V0bGV0PE1hcExpdGVyYWxVc2U+KCk7CiAgICBfbWFwTGl0ZXJhbHMuYWRkKG1hcExpdGVyYWxVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8TWFwTGl0ZXJhbFVzZT4gZ2V0IG1hcExpdGVyYWxzIHsKICAgIHJldHVybiBfbWFwTGl0ZXJhbHMgIT0gbnVsbCA/IF9tYXBMaXRlcmFscyA6IGNvbnN0IDxNYXBMaXRlcmFsVXNlPltdOwogIH0KCiAgdm9pZCByZWdpc3RlclNldExpdGVyYWwoU2V0TGl0ZXJhbFVzZSBzZXRMaXRlcmFsVXNlKSB7CiAgICBhc3NlcnQoc2V0TGl0ZXJhbFVzZSAhPSBudWxsKTsKICAgIF9zZXRMaXRlcmFscyA/Pz0gbmV3IFNldGxldDxTZXRMaXRlcmFsVXNlPigpOwogICAgX3NldExpdGVyYWxzLmFkZChzZXRMaXRlcmFsVXNlKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPFNldExpdGVyYWxVc2U+IGdldCBzZXRMaXRlcmFscyA9PgogICAgICBfc2V0TGl0ZXJhbHMgPz8gY29uc3QgPFNldExpdGVyYWxVc2U+W107CgogIHZvaWQgcmVnaXN0ZXJMaXN0TGl0ZXJhbChMaXN0TGl0ZXJhbFVzZSBsaXN0TGl0ZXJhbFVzZSkgewogICAgYXNzZXJ0KGxpc3RMaXRlcmFsVXNlICE9IG51bGwpOwogICAgX2xpc3RMaXRlcmFscyA/Pz0gbmV3IFNldGxldDxMaXN0TGl0ZXJhbFVzZT4oKTsKICAgIF9saXN0TGl0ZXJhbHMuYWRkKGxpc3RMaXRlcmFsVXNlKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPExpc3RMaXRlcmFsVXNlPiBnZXQgbGlzdExpdGVyYWxzIHsKICAgIHJldHVybiBfbGlzdExpdGVyYWxzICE9IG51bGwgPyBfbGlzdExpdGVyYWxzIDogY29uc3QgPExpc3RMaXRlcmFsVXNlPltdOwogIH0KCiAgdm9pZCByZWdpc3RlclJ1bnRpbWVUeXBlVXNlKFJ1bnRpbWVUeXBlVXNlIHJ1bnRpbWVUeXBlVXNlKSB7CiAgICBhc3NlcnQocnVudGltZVR5cGVVc2UgIT0gbnVsbCk7CiAgICBfcnVudGltZVR5cGVVc2VzID8/PSBuZXcgU2V0bGV0PFJ1bnRpbWVUeXBlVXNlPigpOwogICAgX3J1bnRpbWVUeXBlVXNlcy5hZGQocnVudGltZVR5cGVVc2UpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8UnVudGltZVR5cGVVc2U+IGdldCBydW50aW1lVHlwZVVzZXMgewogICAgcmV0dXJuIF9ydW50aW1lVHlwZVVzZXMgIT0gbnVsbAogICAgICAgID8gX3J1bnRpbWVUeXBlVXNlcwogICAgICAgIDogY29uc3QgPFJ1bnRpbWVUeXBlVXNlPltdOwogIH0KCiAgdm9pZCByZWdpc3RlckNvbnN0U3ltYm9sTmFtZShTdHJpbmcgbmFtZSkgewogICAgX2NvbnN0U3ltYm9sTmFtZXMgPz89IG5ldyBTZXRsZXQ8U3RyaW5nPigpOwogICAgX2NvbnN0U3ltYm9sTmFtZXMuYWRkKG5hbWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgY29uc3RTeW1ib2xOYW1lcyB7CiAgICByZXR1cm4gX2NvbnN0U3ltYm9sTmFtZXMgIT0gbnVsbCA/IF9jb25zdFN5bWJvbE5hbWVzIDogY29uc3QgPFN0cmluZz5bXTsKICB9CgogIHZvaWQgcmVnaXN0ZXJGZWF0dXJlKEZlYXR1cmUgZmVhdHVyZSkgewogICAgX2ZlYXR1cmVzID8/PSBuZXcgRW51bVNldDxGZWF0dXJlPigpOwogICAgX2ZlYXR1cmVzLmFkZChmZWF0dXJlKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPEZlYXR1cmU+IGdldCBmZWF0dXJlcyB7CiAgICByZXR1cm4gX2ZlYXR1cmVzICE9IG51bGwKICAgICAgICA/IF9mZWF0dXJlcy5pdGVyYWJsZShGZWF0dXJlLnZhbHVlcykKICAgICAgICA6IGNvbnN0IDxGZWF0dXJlPltdOwogIH0KCiAgdm9pZCByZWdpc3RlckNvbnN0YW50TGl0ZXJhbChDb25zdGFudEV4cHJlc3Npb24gY29uc3RhbnQpIHsKICAgIF9jb25zdGFudExpdGVyYWxzID8/PSBuZXcgU2V0bGV0PENvbnN0YW50RXhwcmVzc2lvbj4oKTsKICAgIF9jb25zdGFudExpdGVyYWxzLmFkZChjb25zdGFudCk7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxDb25zdGFudEV4cHJlc3Npb24+IGdldCBjb25zdGFudExpdGVyYWxzIHsKICAgIHJldHVybiBfY29uc3RhbnRMaXRlcmFscyAhPSBudWxsCiAgICAgICAgPyBfY29uc3RhbnRMaXRlcmFscwogICAgICAgIDogY29uc3QgPENvbnN0YW50RXhwcmVzc2lvbj5bXTsKICB9CgogIHZvaWQgcmVnaXN0ZXJOYXRpdmVEYXRhKGR5bmFtaWMgbmF0aXZlRGF0YSkgewogICAgYXNzZXJ0KG5hdGl2ZURhdGEgIT0gbnVsbCk7CiAgICBfbmF0aXZlRGF0YSA/Pz0gbmV3IFNldGxldDxkeW5hbWljPigpOwogICAgX25hdGl2ZURhdGEuYWRkKG5hdGl2ZURhdGEpOwogIH0KCiAgQG92ZXJyaWRlCiAgSXRlcmFibGU8ZHluYW1pYz4gZ2V0IG5hdGl2ZURhdGEgewogICAgcmV0dXJuIF9uYXRpdmVEYXRhICE9IG51bGwgPyBfbmF0aXZlRGF0YSA6IGNvbnN0IDxkeW5hbWljPltdOwogIH0KCiAgdm9pZCByZWdpc3RlclNlZW5DbGFzcyhDbGFzc0VudGl0eSBzZWVuQ2xhc3MpIHsKICAgIF9zZWVuQ2xhc3NlcyA/Pz0gbmV3IFNldGxldDxDbGFzc0VudGl0eT4oKTsKICAgIF9zZWVuQ2xhc3Nlcy5hZGQoc2VlbkNsYXNzKTsKICB9CgogIEBvdmVycmlkZQogIEl0ZXJhYmxlPENsYXNzRW50aXR5PiBnZXQgc2VlbkNsYXNzZXMgewogICAgcmV0dXJuIF9zZWVuQ2xhc3NlcyA/PyBjb25zdCA8Q2xhc3NFbnRpdHk+W107CiAgfQoKICB2b2lkIHJlZ2lzdGVySW5zdGFudGlhdGlvbihHZW5lcmljSW5zdGFudGlhdGlvbiBpbnN0YW50aWF0aW9uKSB7CiAgICBfZ2VuZXJpY0luc3RhbnRpYXRpb25zID8/PSBuZXcgU2V0PEdlbmVyaWNJbnN0YW50aWF0aW9uPigpOwogICAgX2dlbmVyaWNJbnN0YW50aWF0aW9ucy5hZGQoaW5zdGFudGlhdGlvbik7CiAgfQoKICBAb3ZlcnJpZGUKICBJdGVyYWJsZTxHZW5lcmljSW5zdGFudGlhdGlvbj4gZ2V0IGdlbmVyaWNJbnN0YW50aWF0aW9ucyB7CiAgICByZXR1cm4gX2dlbmVyaWNJbnN0YW50aWF0aW9ucyA/PyBjb25zdCA8R2VuZXJpY0luc3RhbnRpYXRpb24+W107CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi53cml0ZSgnUmVzb2x1dGlvbldvcmxkSW1wYWN0QnVpbGRlcigkbWVtYmVyKScpOwogICAgV29ybGRJbXBhY3QucHJpbnRPbihzYiwgdGhpcyk7CiAgICBpZiAoX2ZlYXR1cmVzICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJ1xuIGZlYXR1cmVzOicpOwogICAgICBmb3IgKEZlYXR1cmUgZmVhdHVyZSBpbiBfZmVhdHVyZXMuaXRlcmFibGUoRmVhdHVyZS52YWx1ZXMpKSB7CiAgICAgICAgc2Iud3JpdGUoJ1xuICAkZmVhdHVyZScpOwogICAgICB9CiAgICB9CiAgICBpZiAoX21hcExpdGVyYWxzICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJ1xuIG1hcC1saXRlcmFsczonKTsKICAgICAgZm9yIChNYXBMaXRlcmFsVXNlIHVzZSBpbiBfbWFwTGl0ZXJhbHMpIHsKICAgICAgICBzYi53cml0ZSgnXG4gICR1c2UnKTsKICAgICAgfQogICAgfQogICAgaWYgKF9zZXRMaXRlcmFscyAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCdcbiBzZXQtbGl0ZXJhbHM6Jyk7CiAgICAgIGZvciAoU2V0TGl0ZXJhbFVzZSB1c2UgaW4gX3NldExpdGVyYWxzKSB7CiAgICAgICAgc2Iud3JpdGUoJ1xuICAkdXNlJyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfbGlzdExpdGVyYWxzICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJ1xuIGxpc3QtbGl0ZXJhbHM6Jyk7CiAgICAgIGZvciAoTGlzdExpdGVyYWxVc2UgdXNlIGluIF9saXN0TGl0ZXJhbHMpIHsKICAgICAgICBzYi53cml0ZSgnXG4gICR1c2UnKTsKICAgICAgfQogICAgfQogICAgaWYgKF9jb25zdGFudExpdGVyYWxzICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJ1xuIGNvbnN0LWxpdGVyYWxzOicpOwogICAgICBmb3IgKENvbnN0YW50RXhwcmVzc2lvbiBjb25zdGFudCBpbiBfY29uc3RhbnRMaXRlcmFscykgewogICAgICAgIHNiLndyaXRlKCdcbiAgJHtjb25zdGFudC50b0RhcnRUZXh0KCl9Jyk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfY29uc3RTeW1ib2xOYW1lcyAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCdcbiBjb25zdC1zeW1ib2wtbmFtZXM6ICRfY29uc3RTeW1ib2xOYW1lcycpOwogICAgfQogICAgaWYgKF9uYXRpdmVEYXRhICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoJ1xuIG5hdGl2ZS1kYXRhOicpOwogICAgICBmb3IgKHZhciBkYXRhIGluIF9uYXRpdmVEYXRhKSB7CiAgICAgICAgc2Iud3JpdGUoJ1xuICAkZGF0YScpOwogICAgICB9CiAgICB9CiAgICBpZiAoX2dlbmVyaWNJbnN0YW50aWF0aW9ucyAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCdcbiBpbnN0YW50aWF0aW9uczonKTsKICAgICAgZm9yICh2YXIgZGF0YSBpbiBfZ2VuZXJpY0luc3RhbnRpYXRpb25zKSB7CiAgICAgICAgc2Iud3JpdGUoJ1xuICAkZGF0YScpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KgMcATk48ASUBOihDI1EsKAFCIgwdHiYmKCQwHyQoNAEtAQwdATkjMiUEAQwsSgQBOSMyJQQBDC0vATwkNCcEAQwuTQQBPyQ3KgQBDDEkGyQEAS4wIQQBDCpNBAEqKhwEAQwjHS0dBAE+PCUEAQw2JRwoBAEwICshBAEMJUIEATIwIQQBDCoyBAFDQC8EAQw9RQQBDBYqNyMdIEQiCAYgJDAeCAYgJDAeCAYhJTIeCAYlJj8yCAYlPQYfIyYfCAYqJjEfCAYaBAIBLXBhY2thZ2U6Y29tcGlsZXIvc3JjL3Jlc29sdXRpb24vcmVnaXN0cnkuZGFydDRzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvdGVzdGluZy9mZWF0dXJlcy5kYXJ0pJgvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICdpZF90ZXN0aW5nLmRhcnQnOwoKLy8vIFV0aWxpdHkgY2xhc3MgZm9yIGFubm90YXRlZCB0ZXN0aW5nIHJlcHJlc2VudGluZyBhIHNldCBvZiBmZWF0dXJlcy4KY2xhc3MgRmVhdHVyZXMgewogIE1hcDxTdHJpbmcsIE9iamVjdD4gX2ZlYXR1cmVzID0ge307CiAgU2V0PFN0cmluZz4gX3Vuc29ydGVkID0gbmV3IFNldDxTdHJpbmc+KCk7CgogIC8vLyBNYXJrIHRoZSBmZWF0dXJlIFtrZXldIGFzIGV4aXN0aW5nLiBJZiBbdmFsdWVdIGlzIHByb3ZpZGVkLCB0aGUgZmVhdHVyZQogIC8vLyBba2V5XSBpcyBzZXQgdG8gaGF2ZSB0aGlzIHZhbHVlLgogIHZvaWQgYWRkKFN0cmluZyBrZXksIHt2YXIgdmFsdWU6ICcnfSkgewogICAgX2ZlYXR1cmVzW2tleV0gPSB2YWx1ZS50b1N0cmluZygpOwogIH0KCiAgLy8vIEFkZCBbdmFsdWVdIGFzIGFuIGVsZW1lbnQgb2YgdGhlIGxpc3QgdmFsdWVzIG9mIGZlYXR1cmUgW2tleV0uCiAgdm9pZCBhZGRFbGVtZW50KFN0cmluZyBrZXksIFt2YXIgdmFsdWVdKSB7CiAgICBMaXN0PFN0cmluZz4gbGlzdCA9IF9mZWF0dXJlcy5wdXRJZkFic2VudChrZXksICgpID0+IDxTdHJpbmc+W10pOwogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgbGlzdC5hZGQodmFsdWUudG9TdHJpbmcoKSk7CiAgICB9CiAgfQoKICAvLy8gTWFya3MgbGlzdCB2YWx1ZXMgb2YgW2tleV0gYXMgdW5zb3J0ZWQuIFRoaXMgcHJldmVudHMgdGhlIFtnZXRUZXh0XQogIC8vLyByZXByZXNlbnRhdGlvbiBmcm9tIGF1dG9tYXRpY2FsbHkgc29ydGluZyB0aGUgdmFsdWVzLgogIHZvaWQgbWFya0FzVW5zb3J0ZWQoU3RyaW5nIGtleSkgewogICAgX3Vuc29ydGVkLmFkZChrZXkpOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGZlYXR1cmUgW2tleV0gZXhpc3RzLgogIGJvb2wgY29udGFpbnNLZXkoU3RyaW5nIGtleSkgewogICAgcmV0dXJuIF9mZWF0dXJlcy5jb250YWluc0tleShrZXkpOwogIH0KCiAgLy8vIFNldCB0aGUgZmVhdHVyZSBba2V5XSB0byBleGlzdCB3aXRoIHRoZSBbdmFsdWVdLgogIHZvaWQgb3BlcmF0b3IgW109KFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkgewogICAgX2ZlYXR1cmVzW2tleV0gPSB2YWx1ZTsKICB9CgogIC8vLyBSZXR1cm5zIHRoZSB2YWx1ZSBzZXQgZm9yIGZlYXR1cmUgW2tleV0uCiAgT2JqZWN0IG9wZXJhdG9yIFtdKFN0cmluZyBrZXkpID0+IF9mZWF0dXJlc1trZXldOwoKICAvLy8gUmVtb3ZlcyB0aGUgdmFsdWUgc2V0IGZvciBmZWF0dXJlIFtrZXldLiBSZXR1cm5zIHRoZSBleGlzdGluZyB2YWx1ZS4KICBPYmplY3QgcmVtb3ZlKFN0cmluZyBrZXkpID0+IF9mZWF0dXJlcy5yZW1vdmUoa2V5KTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgZmVhdHVyZSBzZXQgaXMgZW1wdHkuCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfZmVhdHVyZXMuaXNFbXB0eTsKCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIHRoaXMgZmVhdHVyZSBzZXQgaXMgbm9uLWVtcHR5LgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2ZlYXR1cmVzLmlzTm90RW1wdHk7CgogIC8vLyBDYWxsIFtmXSBmb3IgZWFjaCBmZWF0dXJlIGluIHRoaXMgZmVhdHVyZSBzZXQgd2l0aCBpdHMgY29ycmVzcG9uZGluZwogIC8vLyB2YWx1ZS4KICB2b2lkIGZvckVhY2godm9pZCBGdW5jdGlvbihTdHJpbmcsIE9iamVjdCkgZikgewogICAgX2ZlYXR1cmVzLmZvckVhY2goZik7CiAgfQoKICAvLy8gUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIGFsbCBmZWF0dXJlcyBpbiBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IHNvcnRlZAogIC8vLyBieSBmZWF0dXJlIG5hbWVzLgogIFN0cmluZyBnZXRUZXh0KCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYm9vbCBuZWVkc0NvbW1hID0gZmFsc2U7CiAgICBmb3IgKFN0cmluZyBuYW1lIGluIF9mZWF0dXJlcy5rZXlzLnRvTGlzdCgpLi5zb3J0KCkpIHsKICAgICAgZHluYW1pYyB2YWx1ZSA9IF9mZWF0dXJlc1tuYW1lXTsKICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgICBpZiAobmVlZHNDb21tYSkgewogICAgICAgICAgc2Iud3JpdGUoJywnKTsKICAgICAgICB9CiAgICAgICAgc2Iud3JpdGUobmFtZSk7CiAgICAgICAgaWYgKHZhbHVlIGlzIExpc3Q8U3RyaW5nPikgewogICAgICAgICAgaWYgKF91bnNvcnRlZC5jb250YWlucyhuYW1lKSkgewogICAgICAgICAgICB2YWx1ZSA9ICdbJHt2YWx1ZS5qb2luKCcsJyl9XSc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YWx1ZSA9ICdbJHsodmFsdWUuLnNvcnQoKSkuam9pbignLCcpfV0nOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodmFsdWUgIT0gJycpIHsKICAgICAgICAgIHNiLndyaXRlKCc9Jyk7CiAgICAgICAgICBzYi53cml0ZSh2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIG5lZWRzQ29tbWEgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICdGZWF0dXJlcygke2dldFRleHQoKX0pJzsKCiAgLy8vIENyZWF0ZXMgYSBbRmVhdHVyZXNdIG9iamVjdCBieSBwYXJzZSB0aGUgW3RleHRdIGVuY29kaW5nLgogIC8vLwogIC8vLyBTaW5nbGUgZmVhdHVyZXMgd2lsbCBiZSBwYXJzZWQgYXMgc3RyaW5ncyBhbmQgbGlzdCBmZWF0dXJlcyAoZmVhdHVyZXMKICAvLy8gZW5jb2RlZCBpbiBgWy4uLl1gIHdpbGwgYmUgcGFyc2VkIGFzIGxpc3RzIG9mIHN0cmluZ3MuCiAgc3RhdGljIEZlYXR1cmVzIGZyb21UZXh0KFN0cmluZyB0ZXh0KSB7CiAgICBGZWF0dXJlcyBmZWF0dXJlcyA9IG5ldyBGZWF0dXJlcygpOwogICAgaWYgKHRleHQgPT0gbnVsbCkgcmV0dXJuIGZlYXR1cmVzOwogICAgaW50IGluZGV4ID0gMDsKICAgIHdoaWxlIChpbmRleCA8IHRleHQubGVuZ3RoKSB7CiAgICAgIGludCBlcVBvcyA9IHRleHQuaW5kZXhPZignPScsIGluZGV4KTsKICAgICAgaW50IGNvbW1hUG9zID0gdGV4dC5pbmRleE9mKCcsJywgaW5kZXgpOwogICAgICBTdHJpbmcgbmFtZTsKICAgICAgYm9vbCBoYXNWYWx1ZSA9IGZhbHNlOwogICAgICBpZiAoZXFQb3MgIT0gLTEgJiYgY29tbWFQb3MgIT0gLTEpIHsKICAgICAgICBpZiAoZXFQb3MgPCBjb21tYVBvcykgewogICAgICAgICAgbmFtZSA9IHRleHQuc3Vic3RyaW5nKGluZGV4LCBlcVBvcyk7CiAgICAgICAgICBoYXNWYWx1ZSA9IHRydWU7CiAgICAgICAgICBpbmRleCA9IGVxUG9zICsgMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbmFtZSA9IHRleHQuc3Vic3RyaW5nKGluZGV4LCBjb21tYVBvcyk7CiAgICAgICAgICBpbmRleCA9IGNvbW1hUG9zICsgMTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZXFQb3MgIT0gLTEpIHsKICAgICAgICBuYW1lID0gdGV4dC5zdWJzdHJpbmcoaW5kZXgsIGVxUG9zKTsKICAgICAgICBoYXNWYWx1ZSA9IHRydWU7CiAgICAgICAgaW5kZXggPSBlcVBvcyArIDE7CiAgICAgIH0gZWxzZSBpZiAoY29tbWFQb3MgIT0gLTEpIHsKICAgICAgICBuYW1lID0gdGV4dC5zdWJzdHJpbmcoaW5kZXgsIGNvbW1hUG9zKTsKICAgICAgICBpbmRleCA9IGNvbW1hUG9zICsgMTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuYW1lID0gdGV4dC5zdWJzdHJpbmcoaW5kZXgpOwogICAgICAgIGluZGV4ID0gdGV4dC5sZW5ndGg7CiAgICAgIH0KICAgICAgaWYgKGhhc1ZhbHVlKSB7CiAgICAgICAgY29uc3QgTWFwPFN0cmluZywgU3RyaW5nPiBkZWxpbWl0ZXJzID0gY29uc3QgewogICAgICAgICAgJ1snOiAnXScsCiAgICAgICAgICAneyc6ICd9JywKICAgICAgICAgICcoJzogJyknLAogICAgICAgICAgJzwnOiAnPicKICAgICAgICB9OwogICAgICAgIExpc3Q8U3RyaW5nPiBlbmREZWxpbWl0ZXJzID0gPFN0cmluZz5bXTsKICAgICAgICBib29sIGlzTGlzdCA9IGluZGV4IDwgdGV4dC5sZW5ndGggJiYgdGV4dC5zdGFydHNXaXRoKCdbJywgaW5kZXgpOwogICAgICAgIGlmIChpc0xpc3QpIHsKICAgICAgICAgIGZlYXR1cmVzLmFkZEVsZW1lbnQobmFtZSk7CiAgICAgICAgICBlbmREZWxpbWl0ZXJzLmFkZCgnXScpOwogICAgICAgICAgaW5kZXgrKzsKICAgICAgICB9CiAgICAgICAgaW50IHZhbHVlU3RhcnQgPSBpbmRleDsKICAgICAgICB3aGlsZSAoaW5kZXggPCB0ZXh0Lmxlbmd0aCkgewogICAgICAgICAgU3RyaW5nIGNoYXIgPSB0ZXh0LnN1YnN0cmluZyhpbmRleCwgaW5kZXggKyAxKTsKICAgICAgICAgIGlmIChlbmREZWxpbWl0ZXJzLmlzTm90RW1wdHkgJiYgZW5kRGVsaW1pdGVycy5sYXN0ID09IGNoYXIpIHsKICAgICAgICAgICAgZW5kRGVsaW1pdGVycy5yZW1vdmVMYXN0KCk7CiAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBTdHJpbmcgZW5kRGVsaW1pdGVyID0gZGVsaW1pdGVyc1tjaGFyXTsKICAgICAgICAgICAgaWYgKGVuZERlbGltaXRlciAhPSBudWxsKSB7CiAgICAgICAgICAgICAgZW5kRGVsaW1pdGVycy5hZGQoZW5kRGVsaW1pdGVyKTsKICAgICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgICB9IGVsc2UgaWYgKGNoYXIgPT0gJywnKSB7CiAgICAgICAgICAgICAgaWYgKGVuZERlbGltaXRlcnMuaXNFbXB0eSkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbmREZWxpbWl0ZXJzLmxlbmd0aCA9PSAxICYmIGlzTGlzdCkgewogICAgICAgICAgICAgICAgU3RyaW5nIHZhbHVlID0gdGV4dC5zdWJzdHJpbmcodmFsdWVTdGFydCwgaW5kZXgpOwogICAgICAgICAgICAgICAgZmVhdHVyZXMuYWRkRWxlbWVudChuYW1lLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgICAgICAgdmFsdWVTdGFydCA9IGluZGV4OwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChpc0xpc3QpIHsKICAgICAgICAgIFN0cmluZyB2YWx1ZSA9IHRleHQuc3Vic3RyaW5nKHZhbHVlU3RhcnQsIGluZGV4IC0gMSk7CiAgICAgICAgICBpZiAodmFsdWUuaXNOb3RFbXB0eSkgewogICAgICAgICAgICBmZWF0dXJlcy5hZGRFbGVtZW50KG5hbWUsIHZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgU3RyaW5nIHZhbHVlID0gdGV4dC5zdWJzdHJpbmcodmFsdWVTdGFydCwgaW5kZXgpOwogICAgICAgICAgZmVhdHVyZXMuYWRkKG5hbWUsIHZhbHVlOiB2YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGluZGV4Kys7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmVhdHVyZXMuYWRkKG5hbWUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmVhdHVyZXM7CiAgfQp9CgpjbGFzcyBGZWF0dXJlc0RhdGFJbnRlcnByZXRlciBpbXBsZW1lbnRzIERhdGFJbnRlcnByZXRlcjxGZWF0dXJlcz4gewogIGNvbnN0IEZlYXR1cmVzRGF0YUludGVycHJldGVyKCk7CgogIEBvdmVycmlkZQogIFN0cmluZyBpc0FzRXhwZWN0ZWQoRmVhdHVyZXMgYWN0dWFsRmVhdHVyZXMsIFN0cmluZyBleHBlY3RlZERhdGEpIHsKICAgIGlmIChleHBlY3RlZERhdGEgPT0gJyonKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfSBlbHNlIGlmIChleHBlY3RlZERhdGEgPT0gJycpIHsKICAgICAgcmV0dXJuIGFjdHVhbEZlYXR1cmVzLmlzTm90RW1wdHkgPyAiRXhwZWN0ZWQgZW1wdHkgZGF0YS4iIDogbnVsbDsKICAgIH0gZWxzZSB7CiAgICAgIExpc3Q8U3RyaW5nPiBlcnJvcnNGb3VuZCA9IFtdOwogICAgICBGZWF0dXJlcyBleHBlY3RlZEZlYXR1cmVzID0gRmVhdHVyZXMuZnJvbVRleHQoZXhwZWN0ZWREYXRhKTsKICAgICAgU2V0PFN0cmluZz4gdmFsaWRhdGVkRmVhdHVyZXMgPSBuZXcgU2V0PFN0cmluZz4oKTsKICAgICAgZXhwZWN0ZWRGZWF0dXJlcy5mb3JFYWNoKChTdHJpbmcga2V5LCBPYmplY3QgZXhwZWN0ZWRWYWx1ZSkgewogICAgICAgIGJvb2wgZXhwZWN0TWF0Y2ggPSB0cnVlOwogICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aCgnIScpKSB7CiAgICAgICAgICBrZXkgPSBrZXkuc3Vic3RyaW5nKDEpOwogICAgICAgICAgZXhwZWN0TWF0Y2ggPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdmFsaWRhdGVkRmVhdHVyZXMuYWRkKGtleSk7CiAgICAgICAgT2JqZWN0IGFjdHVhbFZhbHVlID0gYWN0dWFsRmVhdHVyZXNba2V5XTsKICAgICAgICBpZiAoIWV4cGVjdE1hdGNoKSB7CiAgICAgICAgICBpZiAoYWN0dWFsRmVhdHVyZXMuY29udGFpbnNLZXkoa2V5KSkgewogICAgICAgICAgICBlcnJvcnNGb3VuZC5hZGQoJ1VuZXhwZWN0ZWQgZGF0YSBmb3VuZCBmb3IgJGtleT0kYWN0dWFsVmFsdWUnKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKCFhY3R1YWxGZWF0dXJlcy5jb250YWluc0tleShrZXkpKSB7CiAgICAgICAgICBlcnJvcnNGb3VuZC5hZGQoJ05vIGRhdGEgZm91bmQgZm9yICRrZXknKTsKICAgICAgICB9IGVsc2UgaWYgKGV4cGVjdGVkVmFsdWUgPT0gJycpIHsKICAgICAgICAgIGlmIChhY3R1YWxWYWx1ZSAhPSAnJykgewogICAgICAgICAgICBlcnJvcnNGb3VuZC5hZGQoJ05vbi1lbXB0eSBkYXRhIGZvdW5kIGZvciAka2V5Jyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChleHBlY3RlZFZhbHVlID09ICcqJykgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSBpZiAoZXhwZWN0ZWRWYWx1ZSBpcyBMaXN0KSB7CiAgICAgICAgICBpZiAoYWN0dWFsVmFsdWUgaXMgTGlzdCkgewogICAgICAgICAgICBMaXN0IGFjdHVhbExpc3QgPSBhY3R1YWxWYWx1ZS50b0xpc3QoKTsKICAgICAgICAgICAgZm9yIChPYmplY3QgZXhwZWN0ZWRPYmplY3QgaW4gZXhwZWN0ZWRWYWx1ZSkgewogICAgICAgICAgICAgIFN0cmluZyBleHBlY3RlZFRleHQgPSAnJGV4cGVjdGVkT2JqZWN0JzsKICAgICAgICAgICAgICBib29sIG1hdGNoRm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUZXh0LmVuZHNXaXRoKCcqJykpIHsKICAgICAgICAgICAgICAgIC8vIFdpbGRjYXJkIG1hdGNoZXIuCiAgICAgICAgICAgICAgICBTdHJpbmcgcHJlZml4ID0KICAgICAgICAgICAgICAgICAgICBleHBlY3RlZFRleHQuc3Vic3RyaW5nKDAsIGV4cGVjdGVkVGV4dC5pbmRleE9mKCcqJykpOwogICAgICAgICAgICAgICAgTGlzdCBtYXRjaGVzID0gW107CiAgICAgICAgICAgICAgICBmb3IgKE9iamVjdCBhY3R1YWxPYmplY3QgaW4gYWN0dWFsTGlzdCkgewogICAgICAgICAgICAgICAgICBpZiAoJyRhY3R1YWxPYmplY3QnLnN0YXJ0c1dpdGgocHJlZml4KSkgewogICAgICAgICAgICAgICAgICAgIG1hdGNoZXMuYWRkKGFjdHVhbE9iamVjdCk7CiAgICAgICAgICAgICAgICAgICAgbWF0Y2hGb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciAoT2JqZWN0IG1hdGNoIGluIG1hdGNoZXMpIHsKICAgICAgICAgICAgICAgICAgYWN0dWFsTGlzdC5yZW1vdmUobWF0Y2gpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBmb3IgKE9iamVjdCBhY3R1YWxPYmplY3QgaW4gYWN0dWFsTGlzdCkgewogICAgICAgICAgICAgICAgICBpZiAoZXhwZWN0ZWRUZXh0ID09ICckYWN0dWFsT2JqZWN0JykgewogICAgICAgICAgICAgICAgICAgIGFjdHVhbExpc3QucmVtb3ZlKGFjdHVhbE9iamVjdCk7CiAgICAgICAgICAgICAgICAgICAgbWF0Y2hGb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKCFtYXRjaEZvdW5kKSB7CiAgICAgICAgICAgICAgICBlcnJvcnNGb3VuZC5hZGQoIk5vIG1hdGNoIGZvdW5kIGZvciAka2V5PVskZXhwZWN0ZWRUZXh0XSIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoYWN0dWFsTGlzdC5pc05vdEVtcHR5KSB7CiAgICAgICAgICAgICAgZXJyb3JzRm91bmQKICAgICAgICAgICAgICAgICAgLmFkZCgiRXh0cmEgZGF0YSBmb3VuZCAka2V5PVske2FjdHVhbExpc3Quam9pbignLCcpfV0iKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZXJyb3JzRm91bmQuYWRkKCJMaXN0IGRhdGEgZXhwZWN0ZWQgZm9yICRrZXk6ICIKICAgICAgICAgICAgICAgICJleHBlY3RlZCAnJGV4cGVjdGVkVmFsdWUnLCBmb3VuZCAnJHthY3R1YWxWYWx1ZX0nIik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChleHBlY3RlZFZhbHVlICE9IGFjdHVhbFZhbHVlKSB7CiAgICAgICAgICBlcnJvcnNGb3VuZC5hZGQoCiAgICAgICAgICAgICAgIk1pc21hdGNoIGZvciAka2V5OiBleHBlY3RlZCAnJGV4cGVjdGVkVmFsdWUnLCBmb3VuZCAnJHthY3R1YWxWYWx1ZX0nIik7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgYWN0dWFsRmVhdHVyZXMuZm9yRWFjaCgoU3RyaW5nIGtleSwgT2JqZWN0IHZhbHVlKSB7CiAgICAgICAgaWYgKCF2YWxpZGF0ZWRGZWF0dXJlcy5jb250YWlucyhrZXkpKSB7CiAgICAgICAgICBpZiAodmFsdWUgPT0gJycpIHsKICAgICAgICAgICAgZXJyb3JzRm91bmQuYWRkKCJFeHRyYSBkYXRhIGZvdW5kICcka2V5JyIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZXJyb3JzRm91bmQuYWRkKCJFeHRyYSBkYXRhIGZvdW5kICRrZXk9JHZhbHVlIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIGVycm9yc0ZvdW5kLmlzTm90RW1wdHkgPyBlcnJvcnNGb3VuZC5qb2luKCdcbiAnKSA6IG51bGw7CiAgICB9CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0VGV4dChGZWF0dXJlcyBhY3R1YWxEYXRhKSB7CiAgICByZXR1cm4gYWN0dWFsRGF0YS5nZXRUZXh0KCk7CiAgfQoKICBAb3ZlcnJpZGUKICBib29sIGlzRW1wdHkoRmVhdHVyZXMgYWN0dWFsRGF0YSkgewogICAgcmV0dXJuIGFjdHVhbERhdGEgPT0gbnVsbCB8fCBhY3R1YWxEYXRhLmlzRW1wdHk7CiAgfQp9CoEfAE5OPAEaAUgRJi0BTicqJwQBRS1GGSIGBAFKPCQYBAEuIScEATcwHAQBLzQBSzYBMykBNy8BSw0yGgQBUBgVKh07JxsaGQoYJSosEzYMChsZGwobCAYaBAEMMQFABkw9KignEyIsLxMdKyAvGx0RMiAKIC0ZGyMwHg8mHQgWNxQUFBMLMUoWJSITCiAmOkgoFRM0KC8XJisXQEIyGSQXGRAVFw4MChZAIi4METwsChEPHAgGFQQCAUUjAQxGHxMlSA0lQzlEISMiHwokMhwxTAw3NSojPgwrEiwlNDs3JzAlIEojOjwvJxQSMCwSFzo5NScbFBIQIUwQDikaSw4TPEYMMxtXCgo6MB04Ez0MCgpGBgQBDCghBAEMJjUEAgErcGFja2FnZTpmcm9udF9lbmQvc3JjL3Rlc3RpbmcvZmVhdHVyZXMuZGFydCxzZGtyb290Oi9wa2cvY29tcGlsZXIvbGliL3NyYy9oYXNoL3NoYTEuZGFydIX0Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb252ZXJ0JzsKCmltcG9ydCAncGFja2FnZTpjcnlwdG8vY3J5cHRvLmRhcnQnOwoKaW1wb3J0ICcuLi9pby9jb2RlX291dHB1dC5kYXJ0JyBzaG93IENvZGVPdXRwdXRMaXN0ZW5lcjsKCmNsYXNzIEhhc2hlciBpbXBsZW1lbnRzIENvZGVPdXRwdXRMaXN0ZW5lciB7CiAgZmluYWwgX0RpZ2VzdFNpbmsgX2RpZ2VzdFNpbms7CiAgQnl0ZUNvbnZlcnNpb25TaW5rIF9ieXRlU2luazsKCiAgSGFzaGVyLl8odGhpcy5fZGlnZXN0U2luaykKICAgICAgOiBfYnl0ZVNpbmsgPSBzaGExLnN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oX2RpZ2VzdFNpbmspOwoKICBmYWN0b3J5IEhhc2hlcigpID0+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/c2Rrcm9vdDovcGtnL2NvbXBpbGVyL2xpYi9zcmMvanNfZW1pdHRlci9jb25zdGFudF9vcmRlcmluZy5kYXJ0oysvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX2VtaXR0ZXIuY29uc3RhbnRfb3JkZXJpbmc7CgppbXBvcnQgJy4uL2NvbnN0YW50cy92YWx1ZXMuZGFydCc7CmltcG9ydCAnLi4vZWxlbWVudHMvZW50aXRpZXMuZGFydCcKICAgIHNob3cgQ2xhc3NFbnRpdHksIEZpZWxkRW50aXR5LCBNZW1iZXJFbnRpdHksIFR5cGVkZWZFbnRpdHk7CmltcG9ydCAnLi4vZWxlbWVudHMvdHlwZXMuZGFydCc7CmltcG9ydCAnc29ydGVyLmRhcnQnIHNob3cgU29ydGVyOwoKLy8vIEEgY2Fub25pY2FsIGJ1dCBhcmJpdHJhcnkgb3JkZXJpbmcgb2YgY29uc3RhbnRzLiBUaGUgb3JkZXJpbmcgaXMgJ3N0YWJsZScKLy8vIHVuZGVyIHBlcnR1cmJhdGlvbiBvZiB0aGUgc291cmNlLgphYnN0cmFjdCBjbGFzcyBDb25zdGFudE9yZGVyaW5nIHsKICBmYWN0b3J5IENvbnN0YW50T3JkZXJpbmcoU29ydGVyIHNvcnRlcikgPSBfQ29uc3RhbnRPcmRlcmluZzsKCiAgaW50IGNvbXBhcmUoQ29uc3RhbnRWYWx1ZSBhLCBDb25zdGFudFZhbHVlIGIpOwp9CgpjbGFzcyBfQ29uc3RhbnRPcmRlcmluZwogICAgaW1wbGVtZW50cyBDb25zdGFudE9yZGVyaW5nLCBDb25zdGFudFZhbHVlVmlzaXRvcjxpbnQsIENvbnN0YW50VmFsdWU+IHsKICBmaW5hbCBTb3J0ZXIgX3NvcnRlcjsKICBfRGFydFR5cGVPcmRlcmluZyBfZGFydFR5cGVPcmRlcmluZzsKICBfQ29uc3RhbnRPcmRlcmluZyh0aGlzLl9zb3J0ZXIpIHsKICAgIF9kYXJ0VHlwZU9yZGVyaW5nID0gbmV3IF9EYXJ0VHlwZU9yZGVyaW5nKHRoaXMpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IGNvbXBhcmUoQ29uc3RhbnRWYWx1ZSBhLCBDb25zdGFudFZhbHVlIGIpID0+IGNvbXBhcmVWYWx1ZXMoYSwgYik7CgogIGludCBjb21wYXJlVmFsdWVzKENvbnN0YW50VmFsdWUgYSwgQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICBpZiAoaWRlbnRpY2FsKGEsIGIpKSByZXR1cm4gMDsKICAgIGludCByID0gYS5raW5kLmluZGV4LmNvbXBhcmVUbyhiLmtpbmQuaW5kZXgpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByZXR1cm4gYS5hY2NlcHQodGhpcywgYik7CiAgfQoKICBzdGF0aWMgaW50IGNvbXBhcmVOdWxsYWJsZTxUPihpbnQgY29tcGFyZShUIGEsIFQgYiksIFQgYSwgVCBiKSB7CiAgICBpZiAoYSA9PSBudWxsICYmIGIgPT0gbnVsbCkgcmV0dXJuIDA7CiAgICBpZiAoYSA9PSBudWxsKSByZXR1cm4gLTE7CiAgICBpZiAoYiA9PSBudWxsKSByZXR1cm4gMTsKICAgIHJldHVybiBjb21wYXJlKGEsIGIpOwogIH0KCiAgc3RhdGljIGludCBjb21wYXJlTGlzdHM8UywgVD4oaW50IGNvbXBhcmUoUyBhLCBUIGIpLCBMaXN0PFM+IGEsIExpc3Q8VD4gYikgewogICAgaW50IHIgPSBhLmxlbmd0aC5jb21wYXJlVG8oYi5sZW5ndGgpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHsKICAgICAgciA9IGNvbXBhcmUoYVtpXSwgYltpXSk7CiAgICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQoKICBpbnQgY29tcGFyZUNsYXNzZXMoQ2xhc3NFbnRpdHkgYSwgQ2xhc3NFbnRpdHkgYikgewogICAgaW50IHIgPSBhLm5hbWUuY29tcGFyZVRvKGIubmFtZSk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHJldHVybiBfc29ydGVyLmNvbXBhcmVDbGFzc2VzQnlMb2NhdGlvbihhLCBiKTsKICB9CgogIGludCBjb21wYXJlTWVtYmVycyhNZW1iZXJFbnRpdHkgYSwgTWVtYmVyRW50aXR5IGIpIHsKICAgIGludCByID0gYS5uYW1lLmNvbXBhcmVUbyhiLm5hbWUpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByZXR1cm4gX3NvcnRlci5jb21wYXJlTWVtYmVyc0J5TG9jYXRpb24oYSwgYik7CiAgfQoKICBpbnQgY29tcGFyZVR5cGVkZWZzKFR5cGVkZWZFbnRpdHkgYSwgVHlwZWRlZkVudGl0eSBiKSB7CiAgICBpbnQgciA9IGEubmFtZS5jb21wYXJlVG8oYi5uYW1lKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgcmV0dXJuIF9zb3J0ZXIuY29tcGFyZVR5cGVkZWZzQnlMb2NhdGlvbihhLCBiKTsKICB9CgogIGludCBjb21wYXJlRGFydFR5cGVzKERhcnRUeXBlIGEsIERhcnRUeXBlIGIpIHsKICAgIHJldHVybiBfZGFydFR5cGVPcmRlcmluZy5jb21wYXJlKGEsIGIpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0RnVuY3Rpb24oRnVuY3Rpb25Db25zdGFudFZhbHVlIGEsIEZ1bmN0aW9uQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICByZXR1cm4gY29tcGFyZU1lbWJlcnMoYS5lbGVtZW50LCBiLmVsZW1lbnQpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0TnVsbChOdWxsQ29uc3RhbnRWYWx1ZSBhLCBOdWxsQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICByZXR1cm4gMDsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdE5vbkNvbnN0YW50KE5vbkNvbnN0YW50VmFsdWUgYSwgTm9uQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICByZXR1cm4gMDsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdEludChJbnRDb25zdGFudFZhbHVlIGEsIEludENvbnN0YW50VmFsdWUgYikgewogICAgcmV0dXJuIGEuaW50VmFsdWUuY29tcGFyZVRvKGIuaW50VmFsdWUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0RG91YmxlKERvdWJsZUNvbnN0YW50VmFsdWUgYSwgRG91YmxlQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICByZXR1cm4gYS5kb3VibGVWYWx1ZS5jb21wYXJlVG8oYi5kb3VibGVWYWx1ZSk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRCb29sKEJvb2xDb25zdGFudFZhbHVlIGEsIEJvb2xDb25zdGFudFZhbHVlIGIpIHsKICAgIGludCBhSW50ID0gYS5ib29sVmFsdWUgPyAxIDogMDsKICAgIGludCBiSW50ID0gYi5ib29sVmFsdWUgPyAxIDogMDsKICAgIHJldHVybiBhSW50LmNvbXBhcmVUbyhiSW50KTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdFN0cmluZyhTdHJpbmdDb25zdGFudFZhbHVlIGEsIFN0cmluZ0NvbnN0YW50VmFsdWUgYikgewogICAgU3RyaW5nIGFTdHJpbmcgPSBhLnN0cmluZ1ZhbHVlOwogICAgU3RyaW5nIGJTdHJpbmcgPSBiLnN0cmluZ1ZhbHVlOwogICAgcmV0dXJuIGFTdHJpbmcuY29tcGFyZVRvKGJTdHJpbmcpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0TGlzdChMaXN0Q29uc3RhbnRWYWx1ZSBhLCBMaXN0Q29uc3RhbnRWYWx1ZSBiKSB7CiAgICBpbnQgciA9IGNvbXBhcmVMaXN0cyhjb21wYXJlVmFsdWVzLCBhLmVudHJpZXMsIGIuZW50cmllcyk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHJldHVybiBjb21wYXJlRGFydFR5cGVzKGEudHlwZSwgYi50eXBlKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdFNldChTZXRDb25zdGFudFZhbHVlIGEsIFNldENvbnN0YW50VmFsdWUgYikgewogICAgaW50IHIgPSBjb21wYXJlTGlzdHMoY29tcGFyZVZhbHVlcywgYS52YWx1ZXMsIGIudmFsdWVzKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgcmV0dXJuIGNvbXBhcmVEYXJ0VHlwZXMoYS50eXBlLCBiLnR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0TWFwKE1hcENvbnN0YW50VmFsdWUgYSwgTWFwQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICBpbnQgciA9IGNvbXBhcmVMaXN0cyhjb21wYXJlVmFsdWVzLCBhLmtleXMsIGIua2V5cyk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHIgPSBjb21wYXJlTGlzdHMoY29tcGFyZVZhbHVlcywgYS52YWx1ZXMsIGIudmFsdWVzKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgcmV0dXJuIGNvbXBhcmVEYXJ0VHlwZXMoYS50eXBlLCBiLnR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0Q29uc3RydWN0ZWQoQ29uc3RydWN0ZWRDb25zdGFudFZhbHVlIGEsIENvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICBpbnQgciA9IGNvbXBhcmVEYXJ0VHlwZXMoYS50eXBlLCBiLnR5cGUpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CgogICAgLy8gVE9ETyhzcmEpOiBBdm9pZCBhbGwgdGhlc2UgdGVhci1vZmZzLgogICAgTGlzdDxGaWVsZEVudGl0eT4gYUZpZWxkcyA9IGEuZmllbGRzLmtleXMudG9MaXN0KCkuLnNvcnQoY29tcGFyZU1lbWJlcnMpOwogICAgTGlzdDxGaWVsZEVudGl0eT4gYkZpZWxkcyA9IGIuZmllbGRzLmtleXMudG9MaXN0KCkuLnNvcnQoY29tcGFyZU1lbWJlcnMpOwoKICAgIHIgPSBjb21wYXJlTGlzdHMoY29tcGFyZU1lbWJlcnMsIGFGaWVsZHMsIGJGaWVsZHMpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CgogICAgcmV0dXJuIGNvbXBhcmVMaXN0cygKICAgICAgICBjb21wYXJlVmFsdWVzLAogICAgICAgIGFGaWVsZHMubWFwKChmaWVsZCkgPT4gYS5maWVsZHNbZmllbGRdKS50b0xpc3QoKSwKICAgICAgICBhRmllbGRzLm1hcCgoZmllbGQpID0+IGIuZmllbGRzW2ZpZWxkXSkudG9MaXN0KCkpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0VHlwZShUeXBlQ29uc3RhbnRWYWx1ZSBhLCBUeXBlQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICBpbnQgciA9IGNvbXBhcmVEYXJ0VHlwZXMoYS5yZXByZXNlbnRlZFR5cGUsIGIucmVwcmVzZW50ZWRUeXBlKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgcmV0dXJuIGNvbXBhcmVEYXJ0VHlwZXMoYS50eXBlLCBiLnR5cGUpOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0SW50ZXJjZXB0b3IoSW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGEsIEludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICByZXR1cm4gY29tcGFyZUNsYXNzZXMoYS5jbHMsIGIuY2xzKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdER1bW15SW50ZXJjZXB0b3IoCiAgICAgIER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGEsIER1bW15SW50ZXJjZXB0b3JDb25zdGFudFZhbHVlIGIpIHsKICAgIC8vIE5ldmVyIGVtaXR0ZWQuCiAgICByZXR1cm4gMDsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdFVucmVhY2hhYmxlKFVucmVhY2hhYmxlQ29uc3RhbnRWYWx1ZSBhLCBVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWUgYikgewogICAgLy8gTmV2ZXIgZW1pdHRlZC4KICAgIHJldHVybiAwOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0SnNOYW1lKEpzTmFtZUNvbnN0YW50VmFsdWUgYSwgSnNOYW1lQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICAvLyBBbiBvcGFxdWUgZGVmZXJyZWQgSlMgQVNUIHJlZmVyZW5jZSB0byBhIG5hbWUuCiAgICByZXR1cm4gMDsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdERlZmVycmVkR2xvYmFsKAogICAgICBEZWZlcnJlZEdsb2JhbENvbnN0YW50VmFsdWUgYSwgRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlIGIpIHsKICAgIGludCByID0gY29tcGFyZVZhbHVlcyhhLnJlZmVyZW5jZWQsIGIucmVmZXJlbmNlZCk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHJldHVybiBhLnVuaXQuY29tcGFyZVRvKGIudW5pdCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRJbnN0YW50aWF0aW9uKAogICAgICBJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSBhLCBJbnN0YW50aWF0aW9uQ29uc3RhbnRWYWx1ZSBiKSB7CiAgICBpbnQgciA9IGNvbXBhcmVWYWx1ZXMoYS5mdW5jdGlvbiwgYi5mdW5jdGlvbik7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHJldHVybiBjb21wYXJlTGlzdHMoY29tcGFyZURhcnRUeXBlcywgYS50eXBlQXJndW1lbnRzLCBiLnR5cGVBcmd1bWVudHMpOwogIH0KfQoKLy8vIFZpc2l0b3IgZm9yIGRpc3Rpbmd1aXNoaW5nIHR5cGVzIGJ5IGtpbmQuCmNsYXNzIF9EYXJ0VHlwZUtpbmRWaXNpdG9yIGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPGludCwgTnVsbD4gewogIGNvbnN0IF9EYXJ0VHlwZUtpbmRWaXNpdG9yKCk7CgogIHN0YXRpYyBpbnQga2luZChEYXJ0VHlwZSB0eXBlKSB7CiAgICByZXR1cm4gdHlwZS5hY2NlcHQoY29uc3QgX0RhcnRUeXBlS2luZFZpc2l0b3IoKSwgbnVsbCk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRWb2lkVHlwZShjb3ZhcmlhbnQgVm9pZFR5cGUgdHlwZSwgXykgPT4gNjsKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRUeXBlVmFyaWFibGVUeXBlKGNvdmFyaWFudCBUeXBlVmFyaWFibGVUeXBlIHR5cGUsIF8pID0+IDM7CiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0RnVuY3Rpb25UeXBlKGNvdmFyaWFudCBGdW5jdGlvblR5cGUgdHlwZSwgXykgPT4gMDsKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRJbnRlcmZhY2VUeXBlKGNvdmFyaWFudCBJbnRlcmZhY2VUeXBlIHR5cGUsIF8pID0+IDE7CiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0VHlwZWRlZlR5cGUoY292YXJpYW50IFR5cGVkZWZUeXBlIHR5cGUsIF8pID0+IDI7CiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0RHluYW1pY1R5cGUoY292YXJpYW50IER5bmFtaWNUeXBlIHR5cGUsIF8pID0+IDU7Cn0KCmNsYXNzIF9EYXJ0VHlwZU9yZGVyaW5nIGV4dGVuZHMgRGFydFR5cGVWaXNpdG9yPGludCwgRGFydFR5cGU+IHsKICBmaW5hbCBfQ29uc3RhbnRPcmRlcmluZyBfY29uc3RhbnRPcmRlcmluZzsKICBEYXJ0VHlwZSBfcm9vdDsKICBfRGFydFR5cGVPcmRlcmluZyh0aGlzLl9jb25zdGFudE9yZGVyaW5nKTsKCiAgaW50IGNvbXBhcmUoRGFydFR5cGUgYSwgRGFydFR5cGUgYikgewogICAgaWYgKGEgPT0gYikgcmV0dXJuIDA7CiAgICBpbnQgciA9CiAgICAgICAgX0RhcnRUeXBlS2luZFZpc2l0b3Iua2luZChhKS5jb21wYXJlVG8oX0RhcnRUeXBlS2luZFZpc2l0b3Iua2luZChiKSk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIF9yb290ID0gYTsKICAgIHIgPSBhLmFjY2VwdCh0aGlzLCBiKTsKICAgIF9yb290ID0gbnVsbDsKICAgIHJldHVybiByOwogIH0KCiAgQG92ZXJyaWRlCiAgaW50IHZpc2l0Vm9pZFR5cGUoY292YXJpYW50IFZvaWRUeXBlIHR5cGUsIGNvdmFyaWFudCBWb2lkVHlwZSBvdGhlcikgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1VucmVhY2hhYmxlJyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRUeXBlVmFyaWFibGVUeXBlKAogICAgICBjb3ZhcmlhbnQgVHlwZVZhcmlhYmxlVHlwZSB0eXBlLCBjb3ZhcmlhbnQgVHlwZVZhcmlhYmxlVHlwZSBvdGhlcikgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIlR5cGUgdmFyaWFibGVzIGFyZSBub3QgZXhwZWN0ZWQgaW4gY29uc3RhbnRzOiAnJHR5cGUnIGluICckX3Jvb3QnIik7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXRGdW5jdGlvblR5cGUoCiAgICAgIGNvdmFyaWFudCBGdW5jdGlvblR5cGUgdHlwZSwgY292YXJpYW50IEZ1bmN0aW9uVHlwZSBvdGhlcikgewogICAgaW50IHIgPSBfY29tcGFyZVR5cGVBcmd1bWVudHModHlwZS5wYXJhbWV0ZXJUeXBlcywgb3RoZXIucGFyYW1ldGVyVHlwZXMpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByID0gX2NvbXBhcmVUeXBlQXJndW1lbnRzKAogICAgICAgIHR5cGUub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcywgb3RoZXIub3B0aW9uYWxQYXJhbWV0ZXJUeXBlcyk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHIgPSBfQ29uc3RhbnRPcmRlcmluZy5jb21wYXJlTGlzdHMoKFN0cmluZyBhLCBTdHJpbmcgYikgPT4gYS5jb21wYXJlVG8oYiksCiAgICAgICAgdHlwZS5uYW1lZFBhcmFtZXRlcnMsIG90aGVyLm5hbWVkUGFyYW1ldGVycyk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHIgPSBfY29tcGFyZVR5cGVBcmd1bWVudHMoCiAgICAgICAgdHlwZS5uYW1lZFBhcmFtZXRlclR5cGVzLCBvdGhlci5uYW1lZFBhcmFtZXRlclR5cGVzKTsKICAgIGlmIChyICE9IDApIHJldHVybiByOwogICAgcmV0dXJuIGNvbXBhcmUodHlwZS5yZXR1cm5UeXBlLCBvdGhlci5yZXR1cm5UeXBlKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdEludGVyZmFjZVR5cGUoCiAgICAgIGNvdmFyaWFudCBJbnRlcmZhY2VUeXBlIHR5cGUsIGNvdmFyaWFudCBJbnRlcmZhY2VUeXBlIG90aGVyKSB7CiAgICBpbnQgciA9IF9jb25zdGFudE9yZGVyaW5nLmNvbXBhcmVDbGFzc2VzKHR5cGUuZWxlbWVudCwgb3RoZXIuZWxlbWVudCk7CiAgICBpZiAociAhPSAwKSByZXR1cm4gcjsKICAgIHJldHVybiBfY29tcGFyZVR5cGVBcmd1bWVudHModHlwZS50eXBlQXJndW1lbnRzLCBvdGhlci50eXBlQXJndW1lbnRzKTsKICB9CgogIEBvdmVycmlkZQogIGludCB2aXNpdFR5cGVkZWZUeXBlKAogICAgICBjb3ZhcmlhbnQgVHlwZWRlZlR5cGUgdHlwZSwgY292YXJpYW50IFR5cGVkZWZUeXBlIG90aGVyKSB7CiAgICBpbnQgciA9IF9jb25zdGFudE9yZGVyaW5nLmNvbXBhcmVUeXBlZGVmcyh0eXBlLmVsZW1lbnQsIG90aGVyLmVsZW1lbnQpOwogICAgaWYgKHIgIT0gMCkgcmV0dXJuIHI7CiAgICByZXR1cm4gX2NvbXBhcmVUeXBlQXJndW1lbnRzKHR5cGUudHlwZUFyZ3VtZW50cywgb3RoZXIudHlwZUFyZ3VtZW50cyk7CiAgfQoKICBAb3ZlcnJpZGUKICBpbnQgdmlzaXREeW5hbWljVHlwZSgKICAgICAgY292YXJpYW50IER5bmFtaWNUeXBlIHR5cGUsIGNvdmFyaWFudCBEeW5hbWljVHlwZSBvdGhlcikgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoJ1VucmVhY2hhYmxlJyk7CiAgfQoKICBpbnQgX2NvbXBhcmVUeXBlQXJndW1lbnRzKAogICAgICBMaXN0PERhcnRUeXBlPiBhQXJndW1lbnRzLCBMaXN0PERhcnRUeXBlPiBiQXJndW1lbnRzKSB7CiAgICByZXR1cm4gX0NvbnN0YW50T3JkZXJpbmcuY29tcGFyZUxpc3RzKGNvbXBhcmUsIGFBcmd1bWVudHMsIGJBcmd1bWVudHMpOwogIH0KfQqBLQBOTjwBLgEjI0AhIgFOJiI/ATECARhMGCckNQQBDEgBOCMyGh4EAUMqHh0aBAFPKhopHxwGDgQBNSYaMwQBNyYaMwQBOiYaNAQBMSwEAQxIMQQBDDwOBAEMQQ4EAQw5LQQBDEIzBAEMPCQkIQQBDEIkJCcEAQw8PxotBAEMOT0aLQQBDDk5GjkaLQQBDFEuGgEtTk4BOBoBGRc6OwQBDDxEGi0EAQxRKQQBDB1KFg4EAQxRFg4EAQxCNg4EAQwbRjcaJQQBDBpEMxpNBAIBLkAgASM8BAEMNgxGDD4MQAw8DDwCAUEtEi0BKBoMThoPGxIOBAEMSS8EAQwdSyBOBAEMGUNOGh9EGk82Gh8+GjcEAQwaRUsaSwQBDBhBTBpLBAEMGEEvBAEdPkwEAgE2cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9jb25zdGFudF9vcmRlcmluZy5kYXJ0NXNka3Jvb3Q6L3BrZy9jb21waWxlci9saWIvc3JjL2pzX2VtaXR0ZXIvaGVhZGVycy5kYXJ0hhovLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0MmpzLmpzX2VtaXR0ZXIuaGVhZGVyczsKCmltcG9ydCAnLi4vb3B0aW9ucy5kYXJ0JzsKClN0cmluZyBnZW5lcmF0ZWRCeShDb21waWxlck9wdGlvbnMgb3B0aW9ucywge1N0cmluZyBmbGF2b3I6ICIifSkgewogIFN0cmluZyBzdWZmaXggPSAnJzsKICBpZiAob3B0aW9ucy5oYXNCdWlsZElkKSB7CiAgICBzdWZmaXggPSAnIHZlcnNpb246ICR7b3B0aW9ucy5idWlsZElkfSc7CiAgfQogIGlmIChmbGF2b3IgIT0gIiIpIGZsYXZvciA9ICIgKCRmbGF2b3IpIjsKICByZXR1cm4gJy8vIEdlbmVyYXRlZCBieSBkYXJ0MmpzJGZsYXZvciwgJwogICAgICAndGhlIERhcnQgdG8gSmF2YVNjcmlwdCBjb21waWxlciRzdWZmaXguJzsKfQoKY29uc3QgU3RyaW5nIEhPT0tTX0FQSV9VU0FHRSA9ICIiIgovLyBUaGUgY29kZSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGhvb2tzOgovLyBkYXJ0UHJpbnQobWVzc2FnZSk6Ci8vICAgIGlmIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCBpdCBpcyBjYWxsZWQgaW5zdGVhZCBvZiB0aGUgRGFydCBbcHJpbnRdCi8vICAgIG1ldGhvZC4KLy8KLy8gZGFydE1haW5SdW5uZXIobWFpbiwgYXJncyk6Ci8vICAgIGlmIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCwgdGhlIERhcnQgW21haW5dIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZva2VkCi8vICAgIGRpcmVjdGx5LiBJbnN0ZWFkLCBhIGNsb3N1cmUgdGhhdCB3aWxsIGludm9rZSBbbWFpbl0sIGFuZCBpdHMgYXJndW1lbnRzCi8vICAgIFthcmdzXSBpcyBwYXNzZWQgdG8gW2RhcnRNYWluUnVubmVyXS4KLy8KLy8gZGFydERlZmVycmVkTGlicmFyeUxvYWRlcih1cmksIHN1Y2Nlc3NDYWxsYmFjaywgZXJyb3JDYWxsYmFjayk6Ci8vICAgIGlmIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCwgaXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBhIGRlZmVycmVkIGxpYnJhcnkKLy8gICAgaXMgbG9hZGVkLiBJdCBzaG91bGQgbG9hZCBhbmQgZXZhbCB0aGUgamF2YXNjcmlwdCBvZiBgdXJpYCwgYW5kIGNhbGwKLy8gICAgc3VjY2Vzc0NhbGxiYWNrLiBJZiBpdCBmYWlscyB0byBkbyBzbywgaXQgc2hvdWxkIGNhbGwgZXJyb3JDYWxsYmFjayB3aXRoCi8vICAgIGFuIGVycm9yLgovLwovLyBkYXJ0Q2FsbEluc3RydW1lbnRhdGlvbihpZCwgcXVhbGlmaWVkTmFtZSk6Ci8vICAgIGlmIHRoaXMgZnVuY3Rpb24gaXMgZGVmaW5lZCwgaXQgd2lsbCBiZSBjYWxsZWQgYXQgZWFjaCBlbnRyeSBvZiBhCi8vICAgIG1ldGhvZCBvciBjb25zdHJ1Y3Rvci4gVXNlZCBvbmx5IHdoZW4gY29tcGlsaW5nIHByb2dyYW1zIHdpdGgKLy8gICAgLS1leHBlcmltZW50LWNhbGwtaW5zdHJ1bWVudGF0aW9uLgoiIiI7CioATk48ASQBGgFDFhwtBCssMQIBIyoXSw4DH05OLANDTUtPEAMvSEQpBQEscGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9oZWFkZXJzLmRhcnQ2c2Rrcm9vdDovdGhpcmRfcGFydHkvcGtnL2NvbGxlY3Rpb24vbGliL3NyYy91dGlscy5kYXJ0gfAvLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIEEgcGFpciBvZiB2YWx1ZXMuCmNsYXNzIFBhaXI8RSwgRj4gewogIEUgZmlyc3Q7CiAgRiBsYXN0OwoKICBQYWlyKHRoaXMuZmlyc3QsIHRoaXMubGFzdCk7Cn0KCi8vLyBSZXR1cm5zIGEgW0NvbXBhcmF0b3JdIHRoYXQgYXNzZXJ0cyB0aGF0IGl0cyBmaXJzdCBhcmd1bWVudCBpcyBjb21wYXJhYmxlLgpDb21wYXJhdG9yPFQ+IGRlZmF1bHRDb21wYXJlPFQ+KCkgPT4KICAgICh2YWx1ZTEsIHZhbHVlMikgPT4gKHZhbHVlMSBhcyBDb21wYXJhYmxlKS5jb21wYXJlVG8odmFsdWUyKTsKEQBOTjwBFhMLCgEfAgFPJUIBIXBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvdXRpbHMuZGFydEdzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY29sbGVjdGlvbi9saWIvc3JjL2VtcHR5X3VubW9kaWZpYWJsZV9zZXQuZGFydIctLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCmltcG9ydCAndW5tb2RpZmlhYmxlX3dyYXBwZXJzLmRhcnQnOwoKLy8gVW5mb3J0dW5hdGVseSwgd2UgY2FuJ3QgdXNlIFVubW9kaWZpYWJsZVNldE1peGluIGhlcmUsIHNpbmNlIGNvbnN0IGNsYXNzZXMKLy8gY2FuJ3QgdXNlIG1peGlucy4KLy8vIEFuIHVubW9kaWZpYWJsZSwgZW1wdHkgc2V0IHRoYXQgY2FuIGhhdmUgYSBjb25zdCBjb25zdHJ1Y3Rvci4KY2xhc3MgRW1wdHlVbm1vZGlmaWFibGVTZXQ8RT4gZXh0ZW5kcyBJdGVyYWJsZUJhc2U8RT4KICAgIGltcGxlbWVudHMgVW5tb2RpZmlhYmxlU2V0VmlldzxFPiB7CiAgc3RhdGljIFQgX3Rocm93PFQ+KCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIFNldCIpOwogIH0KCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBJdGVyYWJsZTxFPi5lbXB0eSgpLml0ZXJhdG9yOwogIGludCBnZXQgbGVuZ3RoID0+IDA7CgogIGNvbnN0IEVtcHR5VW5tb2RpZmlhYmxlU2V0KCk7CgogIEVtcHR5VW5tb2RpZmlhYmxlU2V0PFQ+IGNhc3Q8VD4oKSA9PiBuZXcgRW1wdHlVbm1vZGlmaWFibGVTZXQ8VD4oKTsKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSA9PiBmYWxzZTsKICBib29sIGNvbnRhaW5zQWxsKEl0ZXJhYmxlPE9iamVjdD4gb3RoZXIpID0+IG90aGVyLmlzRW1wdHk7CiAgSXRlcmFibGU8RT4gZm9sbG93ZWRCeShJdGVyYWJsZTxFPiBvdGhlcikgPT4gbmV3IFNldC5mcm9tKG90aGVyKTsKICBFIGxvb2t1cChPYmplY3QgZWxlbWVudCkgPT4gbnVsbDsKICBAZGVwcmVjYXRlZAogIEVtcHR5VW5tb2RpZmlhYmxlU2V0PFQ+IHJldHlwZTxUPigpID0+IG5ldyBFbXB0eVVubW9kaWZpYWJsZVNldDxUPigpOwogIEUgc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgPT4gc3VwZXIuc2luZ2xlV2hlcmUodGVzdCk7CiAgSXRlcmFibGU8VD4gd2hlcmVUeXBlPFQ+KCkgPT4gbmV3IEVtcHR5VW5tb2RpZmlhYmxlU2V0PFQ+KCk7CiAgU2V0PEU+IHRvU2V0KCkgPT4gbmV3IFNldCgpOwogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpID0+IG5ldyBTZXQuZnJvbShvdGhlcik7CiAgU2V0PEU+IGludGVyc2VjdGlvbihTZXQ8T2JqZWN0PiBvdGhlcikgPT4gbmV3IFNldCgpOwogIFNldDxFPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSA9PiBuZXcgU2V0KCk7CgogIGJvb2wgYWRkKEUgdmFsdWUpID0+IF90aHJvdygpOwogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSA9PiBfdGhyb3coKTsKICB2b2lkIGNsZWFyKCkgPT4gX3Rocm93KCk7CiAgYm9vbCByZW1vdmUoT2JqZWN0IGVsZW1lbnQpID0+IF90aHJvdygpOwogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpID0+IF90aHJvdygpOwogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IF90aHJvdygpOwogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IF90aHJvdygpOwogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpID0+IF90aHJvdygpOwp9Ci8ATk48ARoBJQFOFUI2KBlFBAFAFwEgAUYqPUQkDkhQPx81NzUBITEcKzk2NjkCATJwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2VtcHR5X3VubW9kaWZpYWJsZV9zZXQuZGFydDZzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvdGVzdGluZy9pZF90ZXN0aW5nLmRhcnTAAFwhLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAnZGFydDppbyc7CmltcG9ydCAnYW5ub3RhdGVkX2NvZGVfaGVscGVyLmRhcnQnOwppbXBvcnQgJ2lkLmRhcnQnOwppbXBvcnQgJy4uL2Zhc3RhL2NvbG9ycy5kYXJ0JyBhcyBjb2xvcnM7Cgpjb25zdCBTdHJpbmcgY2ZlTWFya2VyID0gJ2NmZSc7CmNvbnN0IFN0cmluZyBkYXJ0MmpzTWFya2VyID0gJ2RhcnQyanMnOwpjb25zdCBTdHJpbmcgYW5hbHl6ZXJNYXJrZXIgPSAnYW5hbHl6ZXInOwoKLy8vIE1hcmtlcnMgdXNlZCBpbiBhbm5vdGF0ZWQgdGVzdHMgc2hhcmQgYnkgQ0ZFLCBhbmFseXplciBhbmQgZGFydDJqcy4KY29uc3QgTGlzdDxTdHJpbmc+IHNoYXJlZE1hcmtlcnMgPSBbCiAgY2ZlTWFya2VyLAogIGRhcnQyanNNYXJrZXIsCiAgYW5hbHl6ZXJNYXJrZXIsCl07CgovLy8gYHRydWVgIGlmIEFOU0kgY29sb3JzIGFyZSBzdXBwb3J0ZWQgYnkgc3Rkb3V0Lgpib29sIHVzZUNvbG9ycyA9IHN0ZG91dC5zdXBwb3J0c0Fuc2lFc2NhcGVzOwoKLy8vIENvbG9yaXplIGEgbWVzc2FnZSBbdGV4dF0sIGlmIEFOU0kgY29sb3JzIGFyZSBzdXBwb3J0ZWQuClN0cmluZyBjb2xvcml6ZU1lc3NhZ2UoU3RyaW5nIHRleHQpIHsKICBpZiAodXNlQ29sb3JzKSB7CiAgICByZXR1cm4gJyR7Y29sb3JzLllFTExPV19DT0xPUn0ke3RleHR9JHtjb2xvcnMuREVGQVVMVF9DT0xPUn0nOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdGV4dDsKICB9Cn0KCi8vLyBDb2xvcml6ZSBhIG1hdGNoaW5nIGFubm90YXRpb24gW3RleHRdLCBpZiBBTlNJIGNvbG9ycyBhcmUgc3VwcG9ydGVkLgpTdHJpbmcgY29sb3JpemVNYXRjaChTdHJpbmcgdGV4dCkgewogIGlmICh1c2VDb2xvcnMpIHsKICAgIHJldHVybiAnJHtjb2xvcnMuQkxVRV9DT0xPUn0ke3RleHR9JHtjb2xvcnMuREVGQVVMVF9DT0xPUn0nOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdGV4dDsKICB9Cn0KCi8vLyBDb2xvcml6ZSBhIHNpbmdsZSBhbm5vdGF0aW9uIFt0ZXh0XSwgaWYgQU5TSSBjb2xvcnMgYXJlIHN1cHBvcnRlZC4KU3RyaW5nIGNvbG9yaXplU2luZ2xlKFN0cmluZyB0ZXh0KSB7CiAgaWYgKHVzZUNvbG9ycykgewogICAgcmV0dXJuICcke2NvbG9ycy5HUkVFTl9DT0xPUn0ke3RleHR9JHtjb2xvcnMuREVGQVVMVF9DT0xPUn0nOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdGV4dDsKICB9Cn0KCi8vLyBDb2xvcml6ZSB0aGUgYWN0dWFsIGFubm90YXRpb24gW3RleHRdLCBpZiBBTlNJIGNvbG9ycyBhcmUgc3VwcG9ydGVkLgpTdHJpbmcgY29sb3JpemVBY3R1YWwoU3RyaW5nIHRleHQpIHsKICBpZiAodXNlQ29sb3JzKSB7CiAgICByZXR1cm4gJyR7Y29sb3JzLlJFRF9DT0xPUn0ke3RleHR9JHtjb2xvcnMuREVGQVVMVF9DT0xPUn0nOwogIH0gZWxzZSB7CiAgICByZXR1cm4gdGV4dDsKICB9Cn0KCi8vLyBDb2xvcml6ZSBhbiBleHBlY3RlZCBhbm5vdGF0aW9uIFt0ZXh0XSwgaWYgQU5TSSBjb2xvcnMgYXJlIHN1cHBvcnRlZC4KU3RyaW5nIGNvbG9yaXplRXhwZWN0ZWQoU3RyaW5nIHRleHQpIHsKICBpZiAodXNlQ29sb3JzKSB7CiAgICByZXR1cm4gJyR7Y29sb3JzLkdSRUVOX0NPTE9SfSR7dGV4dH0ke2NvbG9ycy5ERUZBVUxUX0NPTE9SfSc7CiAgfSBlbHNlIHsKICAgIHJldHVybiB0ZXh0OwogIH0KfQoKLy8vIENvbG9yaXplIGRlbGltaXRlciBbdGV4dF0sIGlmIEFOU0kgY29sb3JzIGFyZSBzdXBwb3J0ZWQuClN0cmluZyBjb2xvcml6ZURlbGltaXRlcihTdHJpbmcgdGV4dCkgewogIGlmICh1c2VDb2xvcnMpIHsKICAgIHJldHVybiAnJHtjb2xvcnMuWUVMTE9XX0NPTE9SfSR7dGV4dH0ke2NvbG9ycy5ERUZBVUxUX0NPTE9SfSc7CiAgfSBlbHNlIHsKICAgIHJldHVybiB0ZXh0OwogIH0KfQoKLy8vIENvbG9yaXplIGRpZmZzIFtleHBlY3RlZF0gYW5kIFthY3R1YWxdIGFuZCBbZGVsaW1pdGVyXSwgaWYgQU5TSSBjb2xvcnMgYXJlCi8vLyBzdXBwb3J0ZWQuClN0cmluZyBjb2xvcml6ZURpZmYoU3RyaW5nIGV4cGVjdGVkLCBTdHJpbmcgZGVsaW1pdGVyLCBTdHJpbmcgYWN0dWFsKSB7CiAgcmV0dXJuICcke2NvbG9yaXplRXhwZWN0ZWQoZXhwZWN0ZWQpfScKICAgICAgJyR7Y29sb3JpemVEZWxpbWl0ZXIoZGVsaW1pdGVyKX0ke2NvbG9yaXplQWN0dWFsKGFjdHVhbCl9JzsKfQoKLy8vIENvbG9yaXplIGFubm90YXRpb24gZGVsaW1pdGVycyBbc3RhcnRdIGFuZCBbZW5kXSBzdXJyb3VuZGluZyBbdGV4dF0sIGlmCi8vLyBBTlNJIGNvbG9ycyBhcmUgc3VwcG9ydGVkLgpTdHJpbmcgY29sb3JpemVBbm5vdGF0aW9uKFN0cmluZyBzdGFydCwgU3RyaW5nIHRleHQsIFN0cmluZyBlbmQpIHsKICByZXR1cm4gJyR7Y29sb3JpemVEZWxpbWl0ZXIoc3RhcnQpfSR0ZXh0JHtjb2xvcml6ZURlbGltaXRlcihlbmQpfSc7Cn0KCi8vLyBFbmNhcHN1bGF0ZXMgdGhlIG1lbWJlciBkYXRhIGNvbXB1dGVkIGZvciBlYWNoIHNvdXJjZSBmaWxlIG9mIGludGVyZXN0LgovLy8gSXQncyBhIGdsb3JpZmllZCB3cmFwcGVyIGFyb3VuZCBhIG1hcCBvZiBtYXBzLCBidXQgd3JpdHRlbiB0aGlzIHdheSB0bwovLy8gcHJvdmlkZSBhIGxpdHRsZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgaXQncyBkb2luZy4gW0RhdGFUeXBlXSByZWZlcnMKLy8vIHRvIHRoZSB0eXBlIHRoaXMgbWFwIGlzIGhvbGRpbmcgLS0gaXQgaXMgZWl0aGVyIFtJZFZhbHVlXSBvciBbQWN0dWFsRGF0YV0uCmNsYXNzIE1lbWJlckFubm90YXRpb25zPERhdGFUeXBlPiB7CiAgLy8vIEZvciBlYWNoIFVyaSwgd2UgY3JlYXRlIGEgbWFwIGFzc29jaWF0aW5nIGFuIGVsZW1lbnQgaWQgd2l0aCBpdHMKICAvLy8gY29ycmVzcG9uZGluZyBhbm5vdGF0aW9ucy4KICBmaW5hbCBNYXA8VXJpLCBNYXA8SWQsIERhdGFUeXBlPj4gX2NvbXB1dGVkRGF0YUZvckVhY2hGaWxlID0KICAgICAgbmV3IE1hcDxVcmksIE1hcDxJZCwgRGF0YVR5cGU+PigpOwoKICAvLy8gTWVtYmVyIG9yIGNsYXNzIGFubm90YXRpb25zIHRoYXQgZG9uJ3QgcmVmZXIgdG8gYW55IG9mIHRoZSB1c2VyIGZpbGVzLgogIGZpbmFsIE1hcDxJZCwgRGF0YVR5cGU+IGdsb2JhbERhdGEgPSA8SWQsIERhdGFUeXBlPnt9OwoKICB2b2lkIG9wZXJhdG9yIFtdPShVcmkgZmlsZSwgTWFwPElkLCBEYXRhVHlwZT4gY29tcHV0ZWREYXRhKSB7CiAgICBfY29tcHV0ZWREYXRhRm9yRWFjaEZpbGVbZmlsZV0gPSBjb21wdXRlZERhdGE7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKFVyaSBmaWxlLCBNYXA8SWQsIERhdGFUeXBlPiBjb21wdXRlZERhdGEpKSB7CiAgICBfY29tcHV0ZWREYXRhRm9yRWFjaEZpbGUuZm9yRWFjaChmKTsKICB9CgogIE1hcDxJZCwgRGF0YVR5cGU+IG9wZXJhdG9yIFtdKFVyaSBmaWxlKSB7CiAgICBpZiAoIV9jb21wdXRlZERhdGFGb3JFYWNoRmlsZS5jb250YWluc0tleShmaWxlKSkgewogICAgICBfY29tcHV0ZWREYXRhRm9yRWFjaEZpbGVbZmlsZV0gPSA8SWQsIERhdGFUeXBlPnt9OwogICAgfQogICAgcmV0dXJuIF9jb21wdXRlZERhdGFGb3JFYWNoRmlsZVtmaWxlXTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCdNZW1iZXJBbm5vdGF0aW9ucygnKTsKICAgIFN0cmluZyBjb21tYSA9ICcnOwogICAgaWYgKF9jb21wdXRlZERhdGFGb3JFYWNoRmlsZS5pc05vdEVtcHR5ICYmCiAgICAgICAgKF9jb21wdXRlZERhdGFGb3JFYWNoRmlsZS5sZW5ndGggPiAxIHx8CiAgICAgICAgICAgIF9jb21wdXRlZERhdGFGb3JFYWNoRmlsZS52YWx1ZXMuc2luZ2xlLmlzTm90RW1wdHkpKSB7CiAgICAgIHNiLndyaXRlKCdkYXRhOnsnKTsKICAgICAgX2NvbXB1dGVkRGF0YUZvckVhY2hGaWxlLmZvckVhY2goKFVyaSB1cmksIE1hcDxJZCwgRGF0YVR5cGU+IGRhdGEpIHsKICAgICAgICBzYi53cml0ZShjb21tYSk7CiAgICAgICAgc2Iud3JpdGUoJyR1cmk6Jyk7CiAgICAgICAgc2Iud3JpdGUoZGF0YSk7CiAgICAgICAgY29tbWEgPSAnLCc7CiAgICAgIH0pOwogICAgICBzYi53cml0ZSgnfScpOwogICAgfQogICAgaWYgKGdsb2JhbERhdGEuaXNOb3RFbXB0eSkgewogICAgICBzYi53cml0ZShjb21tYSk7CiAgICAgIHNiLndyaXRlKCdnbG9iYWw6Jyk7CiAgICAgIHNiLndyaXRlKGdsb2JhbERhdGEpOwogICAgfQogICAgc2Iud3JpdGUoJyknKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIENvbXB1dGUgYSBbTWVtYmVyQW5ub3RhdGlvbnNdIG9iamVjdCBmcm9tIFtjb2RlXSBmb3IgZWFjaCBtYXJrZXIgaW4gW21hcHNdCi8vLyBzcGVjaWZ5aW5nIHRoZSBleHBlY3RlZCBhbm5vdGF0aW9ucy4KLy8vCi8vLyBJZiBhbiBhbm5vdGF0aW9uIHN0YXJ0cyB3aXRoIGEgbWFya2VyLCBpdCBpcyBvbmx5IGV4cGVjdGVkIGZvciB0aGUKLy8vIGNvcnJlc3BvbmRpbmcgdGVzdCBjb25maWd1cmF0aW9uLiBPdGhlcndpc2UgaXQgaXMgZXhwZWN0ZWQgZm9yIGFsbAovLy8gY29uZmlndXJhdGlvbnMuCi8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgYW4gZW1wdHkgbWFya2VyIHNldC4Kdm9pZCBjb21wdXRlRXhwZWN0ZWRNYXAoVXJpIHNvdXJjZVVyaSwgU3RyaW5nIGZpbGVuYW1lLCBBbm5vdGF0ZWRDb2RlIGNvZGUsCiAgICBNYXA8U3RyaW5nLCBNZW1iZXJBbm5vdGF0aW9uczxJZFZhbHVlPj4gbWFwcywKICAgIHt2b2lkIG9uRmFpbHVyZShTdHJpbmcgbWVzc2FnZSl9KSB7CiAgTGlzdDxTdHJpbmc+IG1hcEtleXMgPSBtYXBzLmtleXMudG9MaXN0KCk7CiAgTWFwPFN0cmluZywgQW5ub3RhdGVkQ29kZT4gc3BsaXQgPSBzcGxpdEJ5UHJlZml4ZXMoY29kZSwgbWFwS2V5cyk7CgogIHNwbGl0LmZvckVhY2goKFN0cmluZyBtYXJrZXIsIEFubm90YXRlZENvZGUgY29kZSkgewogICAgTWVtYmVyQW5ub3RhdGlvbnM8SWRWYWx1ZT4gZmlsZUFubm90YXRpb25zID0gbWFwc1ttYXJrZXJdOwogICAgYXNzZXJ0KGZpbGVBbm5vdGF0aW9ucyAhPSBudWxsLCAiTm8gYW5ub3RhdGlvbnMgZm9yICRtYXJrZXIgaW4gJG1hcHMiKTsKICAgIE1hcDxJZCwgSWRWYWx1ZT4gZXhwZWN0ZWRWYWx1ZXMgPSBmaWxlQW5ub3RhdGlvbnNbc291cmNlVXJpXTsKICAgIGZvciAoQW5ub3RhdGlvbiBhbm5vdGF0aW9uIGluIGNvZGUuYW5ub3RhdGlvbnMpIHsKICAgICAgU3RyaW5nIHRleHQgPSBhbm5vdGF0aW9uLnRleHQ7CiAgICAgIElkVmFsdWUgaWRWYWx1ZSA9IElkVmFsdWUuZGVjb2RlKHNvdXJjZVVyaSwgYW5ub3RhdGlvbi5vZmZzZXQsIHRleHQpOwogICAgICBpZiAoaWRWYWx1ZS5pZC5pc0dsb2JhbCkgewogICAgICAgIGlmIChmaWxlQW5ub3RhdGlvbnMuZ2xvYmFsRGF0YS5jb250YWluc0tleShpZFZhbHVlLmlkKSkgewogICAgICAgICAgb25GYWlsdXJlKCJFcnJvciBpbiB0ZXN0ICckZmlsZW5hbWUnOiAiCiAgICAgICAgICAgICAgIkR1cGxpY2F0ZSBhbm5vdGF0aW9ucyBmb3IgJHtpZFZhbHVlLmlkfSBpbiAkbWFya2VyOiAiCiAgICAgICAgICAgICAgIiR7aWRWYWx1ZX0gYW5kICR7ZmlsZUFubm90YXRpb25zLmdsb2JhbERhdGFbaWRWYWx1ZS5pZF19LiIpOwogICAgICAgIH0KICAgICAgICBmaWxlQW5ub3RhdGlvbnMuZ2xvYmFsRGF0YVtpZFZhbHVlLmlkXSA9IGlkVmFsdWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGV4cGVjdGVkVmFsdWVzLmNvbnRhaW5zS2V5KGlkVmFsdWUuaWQpKSB7CiAgICAgICAgICBvbkZhaWx1cmUoIkVycm9yIGluIHRlc3QgJyRmaWxlbmFtZSc6ICIKICAgICAgICAgICAgICAiRHVwbGljYXRlIGFubm90YXRpb25zIGZvciAke2lkVmFsdWUuaWR9IGluICRtYXJrZXI6ICIKICAgICAgICAgICAgICAiJHtpZFZhbHVlfSBhbmQgJHtleHBlY3RlZFZhbHVlc1tpZFZhbHVlLmlkXX0uIik7CiAgICAgICAgfQogICAgICAgIGV4cGVjdGVkVmFsdWVzW2lkVmFsdWUuaWRdID0gaWRWYWx1ZTsKICAgICAgfQogICAgfQogIH0pOwp9CgovLy8gQ3JlYXRlcyBhIFtUZXN0RGF0YV0gb2JqZWN0IGZvciB0aGUgYW5ub3RhdGVkIHRlc3QgaW4gW3Rlc3RGaWxlXS4KLy8vCi8vLyBJZiBbdGVzdEZpbGVdIGlzIGEgZmlsZSwgdXNlIHRoYXQgZGlyZWN0bHkuIElmIGl0J3MgYSBkaXJlY3RvcnkgaW5jbHVkZQovLy8gZXZlcnl0aGluZyBpbiB0aGF0IGRpcmVjdG9yeS4KLy8vCi8vLyBJZiBbdGVzdExpYkRpcmVjdG9yeV0gaXMgbm90IGBudWxsYCwgZmlsZXMgaW4gW3Rlc3RMaWJEaXJlY3RvcnldIHdpdGggdGhlCi8vLyBbdGVzdEZpbGVdIG5hbWUgYXMgYSBwcmVmaXggYXJlIGluY2x1ZGVkLgpUZXN0RGF0YSBjb21wdXRlVGVzdERhdGEoRmlsZVN5c3RlbUVudGl0eSB0ZXN0RmlsZSwgRGlyZWN0b3J5IHRlc3RMaWJEaXJlY3RvcnksCiAgICB7SXRlcmFibGU8U3RyaW5nPiBzdXBwb3J0ZWRNYXJrZXJzLAogICAgVXJpIGNyZWF0ZVVyaUZvckZpbGVOYW1lKFN0cmluZyBmaWxlTmFtZSwge2Jvb2wgaXNMaWJ9KSwKICAgIHZvaWQgb25GYWlsdXJlKFN0cmluZyBtZXNzYWdlKX0pIHsKICBVcmkgZW50cnlQb2ludCA9IGNyZWF0ZVVyaUZvckZpbGVOYW1lKCdtYWluLmRhcnQnLCBpc0xpYjogZmFsc2UpOwoKICBGaWxlIG1haW5UZXN0RmlsZTsKICBNYXA8U3RyaW5nLCBGaWxlPiBhZGRpdGlvbmFsRmlsZXM7CiAgaWYgKHRlc3RGaWxlIGlzIEZpbGUpIHsKICAgIG1haW5UZXN0RmlsZSA9IHRlc3RGaWxlOwogIH0gZWxzZSBpZiAodGVzdEZpbGUgaXMgRGlyZWN0b3J5KSB7CiAgICBhZGRpdGlvbmFsRmlsZXMgPSBuZXcgTWFwPFN0cmluZywgRmlsZT4oKTsKICAgIGZvciAoRmlsZVN5c3RlbUVudGl0eSBlbnRyeSBpbiB0ZXN0RmlsZS5saXN0U3luYyhyZWN1cnNpdmU6IHRydWUpKSB7CiAgICAgIGlmIChlbnRyeSBpcyEgRmlsZSkgY29udGludWU7CiAgICAgIGlmIChlbnRyeS51cmkucGF0aFNlZ21lbnRzLmxhc3QgPT0gIm1haW4uZGFydCIpIHsKICAgICAgICBtYWluVGVzdEZpbGUgPSBlbnRyeTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhZGRpdGlvbmFsRmlsZXNbZW50cnkudXJpLnBhdGguc3Vic3RyaW5nKHRlc3RGaWxlLnVyaS5wYXRoLmxlbmd0aCldID0KICAgICAgICAgICAgZW50cnk7CiAgICAgIH0KICAgIH0KICB9CgogIFN0cmluZyBhbm5vdGF0ZWRDb2RlID0gbmV3IEZpbGUuZnJvbVVyaShtYWluVGVzdEZpbGUudXJpKS5yZWFkQXNTdHJpbmdTeW5jKCk7CiAgTWFwPFVyaSwgQW5ub3RhdGVkQ29kZT4gY29kZSA9IHsKICAgIGVudHJ5UG9pbnQ6CiAgICAgICAgbmV3IEFubm90YXRlZENvZGUuZnJvbVRleHQoYW5ub3RhdGVkQ29kZSwgY29tbWVudFN0YXJ0LCBjb21tZW50RW5kKQogIH07CiAgTWFwPFN0cmluZywgTWVtYmVyQW5ub3RhdGlvbnM8SWRWYWx1ZT4+IGV4cGVjdGVkTWFwcyA9IHt9OwogIGZvciAoU3RyaW5nIHRlc3RNYXJrZXIgaW4gc3VwcG9ydGVkTWFya2VycykgewogICAgZXhwZWN0ZWRNYXBzW3Rlc3RNYXJrZXJdID0gbmV3IE1lbWJlckFubm90YXRpb25zPElkVmFsdWU+KCk7CiAgfQogIGNvbXB1dGVFeHBlY3RlZE1hcChlbnRyeVBvaW50LCB0ZXN0RmlsZS51cmkucGF0aFNlZ21lbnRzLmxhc3QsCiAgICAgIGNvZGVbZW50cnlQb2ludF0sIGV4cGVjdGVkTWFwcywKICAgICAgb25GYWlsdXJlOiBvbkZhaWx1cmUpOwogIE1hcDxTdHJpbmcsIFN0cmluZz4gbWVtb3J5U291cmNlRmlsZXMgPSB7CiAgICBlbnRyeVBvaW50LnBhdGg6IGNvZGVbZW50cnlQb2ludF0uc291cmNlQ29kZQogIH07CgogIExpc3Q8U3RyaW5nPiBsaWJGaWxlTmFtZXM7CgogIGFkZFN1cHBvcnRpbmdGaWxlKFN0cmluZyBsaWJGaWxlTmFtZSwgRmlsZSBsaWJFbnRpdHksIGJvb2wgaXNMaWIpIHsKICAgIGxpYkZpbGVOYW1lcyA/Pz0gW107CiAgICBsaWJGaWxlTmFtZXMuYWRkKGxpYkZpbGVOYW1lKTsKICAgIFVyaSBsaWJGaWxlVXJpID0gY3JlYXRlVXJpRm9yRmlsZU5hbWUobGliRmlsZU5hbWUsIGlzTGliOiBpc0xpYik7CiAgICBTdHJpbmcgbGliQ29kZSA9IGxpYkVudGl0eS5yZWFkQXNTdHJpbmdTeW5jKCk7CiAgICBBbm5vdGF0ZWRDb2RlIGFubm90YXRlZExpYkNvZGUgPQogICAgICAgIG5ldyBBbm5vdGF0ZWRDb2RlLmZyb21UZXh0KGxpYkNvZGUsIGNvbW1lbnRTdGFydCwgY29tbWVudEVuZCk7CiAgICBtZW1vcnlTb3VyY2VGaWxlc1tsaWJGaWxlVXJpLnBhdGhdID0gYW5ub3RhdGVkTGliQ29kZS5zb3VyY2VDb2RlOwogICAgY29kZVtsaWJGaWxlVXJpXSA9IGFubm90YXRlZExpYkNvZGU7CiAgICBjb21wdXRlRXhwZWN0ZWRNYXAobGliRmlsZVVyaSwgbGliRmlsZU5hbWUsIGFubm90YXRlZExpYkNvZGUsIGV4cGVjdGVkTWFwcywKICAgICAgICBvbkZhaWx1cmU6IG9uRmFpbHVyZSk7CiAgfQoKICBpZiAodGVzdExpYkRpcmVjdG9yeSAhPSBudWxsKSB7CiAgICBTdHJpbmcgbmFtZSA9IHRlc3RGaWxlLnVyaS5wYXRoU2VnbWVudHMubGFzdDsKICAgIFN0cmluZyBmaWxlUHJlZml4ID0gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZignLicpKTsKICAgIGZvciAoRmlsZVN5c3RlbUVudGl0eSBsaWJFbnRpdHkgaW4gdGVzdExpYkRpcmVjdG9yeS5saXN0U3luYygpKSB7CiAgICAgIFN0cmluZyBsaWJGaWxlTmFtZSA9IGxpYkVudGl0eS51cmkucGF0aFNlZ21lbnRzLmxhc3Q7CiAgICAgIGlmIChsaWJGaWxlTmFtZS5zdGFydHNXaXRoKGZpbGVQcmVmaXgpKSB7CiAgICAgICAgYWRkU3VwcG9ydGluZ0ZpbGUobGliRmlsZU5hbWUsIGxpYkVudGl0eSwgdHJ1ZSk7CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKGFkZGl0aW9uYWxGaWxlcyAhPSBudWxsKSB7CiAgICBmb3IgKE1hcEVudHJ5PFN0cmluZywgRmlsZT4gYWRkaXRpb25hbEZpbGVEYXRhIGluIGFkZGl0aW9uYWxGaWxlcy5lbnRyaWVzKSB7CiAgICAgIGFkZFN1cHBvcnRpbmdGaWxlKAogICAgICAgICAgYWRkaXRpb25hbEZpbGVEYXRhLmtleSwgYWRkaXRpb25hbEZpbGVEYXRhLnZhbHVlLCBmYWxzZSk7CiAgICB9CiAgfQoKICByZXR1cm4gbmV3IFRlc3REYXRhKHRlc3RGaWxlLnVyaSwgZW50cnlQb2ludCwgbWVtb3J5U291cmNlRmlsZXMsIGNvZGUsCiAgICAgIGV4cGVjdGVkTWFwcywgbGliRmlsZU5hbWVzKTsKfQoKLy8vIERhdGEgZm9yIGFuIGFubm90YXRlZCB0ZXN0LgpjbGFzcyBUZXN0RGF0YSB7CiAgZmluYWwgVXJpIHRlc3RGaWxlVXJpOwogIGZpbmFsIFVyaSBlbnRyeVBvaW50OwogIGZpbmFsIE1hcDxTdHJpbmcsIFN0cmluZz4gbWVtb3J5U291cmNlRmlsZXM7CiAgZmluYWwgTWFwPFVyaSwgQW5ub3RhdGVkQ29kZT4gY29kZTsKICBmaW5hbCBNYXA8U3RyaW5nLCBNZW1iZXJBbm5vdGF0aW9uczxJZFZhbHVlPj4gZXhwZWN0ZWRNYXBzOwogIGZpbmFsIExpc3Q8U3RyaW5nPiBsaWJGaWxlTmFtZXM7CgogIFRlc3REYXRhKHRoaXMudGVzdEZpbGVVcmksIHRoaXMuZW50cnlQb2ludCwgdGhpcy5tZW1vcnlTb3VyY2VGaWxlcywgdGhpcy5jb2RlLAogICAgICB0aGlzLmV4cGVjdGVkTWFwcywgdGhpcy5saWJGaWxlTmFtZXMpOwoKICBTdHJpbmcgZ2V0IG5hbWUgPT4gdGVzdEZpbGVVcmkucGF0aFNlZ21lbnRzLmxhc3Q7Cn0KCi8vLyBUaGUgYWN0dWFsIHJlc3VsdCBjb21wdXRlZCBmb3IgYW4gYW5ub3RhdGVkIHRlc3QuCmFic3RyYWN0IGNsYXNzIENvbXBpbGVkRGF0YTxUPiB7CiAgZmluYWwgVXJpIG1haW5Vcmk7CgogIC8vLyBGb3IgZWFjaCBVcmksIGEgbWFwIGFzc29jaWF0aW5nIGFuIGVsZW1lbnQgaWQgd2l0aCB0aGUgaW5zdHJ1bWVudGF0aW9uCiAgLy8vIGRhdGEgd2UndmUgY29sbGVjdGVkIGZvciBpdC4KICBmaW5hbCBNYXA8VXJpLCBNYXA8SWQsIEFjdHVhbERhdGE8VD4+PiBhY3R1YWxNYXBzOwoKICAvLy8gQ29sbGVjdGVkIGluc3RydW1lbnRhdGlvbiBkYXRhIHRoYXQgZG9lc24ndCByZWZlciB0byBhbnkgb2YgdGhlIHVzZXIKICAvLy8gZmlsZXMuICAoRS5nLiBpbmZvcm1hdGlvbiB0aGUgdGVzdCBoYXMgY29sbGVjdGVkIGFib3V0IGZpbGVzIGluCiAgLy8vIGBkYXJ0OmNvcmVgKS4KICBmaW5hbCBNYXA8SWQsIEFjdHVhbERhdGE8VD4+IGdsb2JhbERhdGE7CgogIENvbXBpbGVkRGF0YSh0aGlzLm1haW5VcmksIHRoaXMuYWN0dWFsTWFwcywgdGhpcy5nbG9iYWxEYXRhKTsKCiAgTWFwPGludCwgTGlzdDxTdHJpbmc+PiBjb21wdXRlQW5ub3RhdGlvbnMoVXJpIHVyaSkgewogICAgTWFwPElkLCBBY3R1YWxEYXRhPFQ+PiBhY3R1YWxNYXAgPSBhY3R1YWxNYXBzW3VyaV07CiAgICBNYXA8aW50LCBMaXN0PFN0cmluZz4+IGFubm90YXRpb25zID0gPGludCwgTGlzdDxTdHJpbmc+Pnt9OwogICAgYWN0dWFsTWFwLmZvckVhY2goKElkIGlkLCBBY3R1YWxEYXRhPFQ+IGRhdGEpIHsKICAgICAgU3RyaW5nIHZhbHVlMSA9ICcke2RhdGEudmFsdWV9JzsKICAgICAgYW5ub3RhdGlvbnMKICAgICAgICAgIC5wdXRJZkFic2VudChkYXRhLm9mZnNldCwgKCkgPT4gW10pCiAgICAgICAgICAuYWRkKGNvbG9yaXplQWN0dWFsKHZhbHVlMSkpOwogICAgfSk7CiAgICByZXR1cm4gYW5ub3RhdGlvbnM7CiAgfQoKICBNYXA8aW50LCBMaXN0PFN0cmluZz4+IGNvbXB1dGVEaWZmQW5ub3RhdGlvbnNBZ2FpbnN0KAogICAgICBNYXA8SWQsIEFjdHVhbERhdGE8VD4+IHRoaXNNYXAsIE1hcDxJZCwgQWN0dWFsRGF0YTxUPj4gb3RoZXJNYXAsIFVyaSB1cmksCiAgICAgIHtib29sIGluY2x1ZGVNYXRjaGVzOiBmYWxzZX0pIHsKICAgIE1hcDxpbnQsIExpc3Q8U3RyaW5nPj4gYW5ub3RhdGlvbnMgPSA8aW50LCBMaXN0PFN0cmluZz4+e307CiAgICB0aGlzTWFwLmZvckVhY2goKElkIGlkLCBBY3R1YWxEYXRhPFQ+IHRoaXNEYXRhKSB7CiAgICAgIEFjdHVhbERhdGE8VD4gb3RoZXJEYXRhID0gb3RoZXJNYXBbaWRdOwogICAgICBTdHJpbmcgdGhpc1ZhbHVlID0gJyR7dGhpc0RhdGEudmFsdWV9JzsKICAgICAgaWYgKHRoaXNEYXRhLnZhbHVlICE9IG90aGVyRGF0YT8udmFsdWUpIHsKICAgICAgICBTdHJpbmcgb3RoZXJWYWx1ZSA9ICcke290aGVyRGF0YT8udmFsdWUgPz8gJy0tLSd9JzsKICAgICAgICBhbm5vdGF0aW9ucwogICAgICAgICAgICAucHV0SWZBYnNlbnQodGhpc0RhdGEub2Zmc2V0LCAoKSA9PiBbXSkKICAgICAgICAgICAgLmFkZChjb2xvcml6ZURpZmYodGhpc1ZhbHVlLCAnIHwgJywgb3RoZXJWYWx1ZSkpOwogICAgICB9IGVsc2UgaWYgKGluY2x1ZGVNYXRjaGVzKSB7CiAgICAgICAgYW5ub3RhdGlvbnMKICAgICAgICAgICAgLnB1dElmQWJzZW50KHRoaXNEYXRhLm9mZnNldCwgKCkgPT4gW10pCiAgICAgICAgICAgIC5hZGQoY29sb3JpemVNYXRjaCh0aGlzVmFsdWUpKTsKICAgICAgfQogICAgfSk7CiAgICBvdGhlck1hcC5mb3JFYWNoKChJZCBpZCwgQWN0dWFsRGF0YTxUPiBvdGhlckRhdGEpIHsKICAgICAgaWYgKCF0aGlzTWFwLmNvbnRhaW5zS2V5KGlkKSkgewogICAgICAgIFN0cmluZyB0aGlzVmFsdWUgPSAnLS0tJzsKICAgICAgICBTdHJpbmcgb3RoZXJWYWx1ZSA9ICcke290aGVyRGF0YS52YWx1ZX0nOwogICAgICAgIGFubm90YXRpb25zCiAgICAgICAgICAgIC5wdXRJZkFic2VudChvdGhlckRhdGEub2Zmc2V0LCAoKSA9PiBbXSkKICAgICAgICAgICAgLmFkZChjb2xvcml6ZURpZmYodGhpc1ZhbHVlLCAnIHwgJywgb3RoZXJWYWx1ZSkpOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBhbm5vdGF0aW9uczsKICB9CgogIGludCBnZXRPZmZzZXRGcm9tSWQoSWQgaWQsIFVyaSB1cmkpOwoKICB2b2lkIHJlcG9ydEVycm9yKFVyaSB1cmksIGludCBvZmZzZXQsIFN0cmluZyBtZXNzYWdlLCB7Ym9vbCBzdWNjaW5jdDogZmFsc2V9KTsKfQoKLy8vIEludGVyZmFjZSB1c2VkIGZvciBpbnRlcnByZXRpbmcgYW5ub3RhdGlvbnMuCmFic3RyYWN0IGNsYXNzIERhdGFJbnRlcnByZXRlcjxUPiB7CiAgLy8vIFJldHVybnMgYG51bGxgIGlmIFthY3R1YWxEYXRhXSBzYXRpc2ZpZXMgdGhlIFtleHBlY3RlZERhdGFdIGFubm90YXRpb24uCiAgLy8vIE90aGVyd2lzZSwgYSBtZXNzYWdlIGlzIHJldHVybmVkIGNvbnRhaW4gdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZQogIC8vLyBwcm9ibGVtcyBmb3VuZC4KICBTdHJpbmcgaXNBc0V4cGVjdGVkKFQgYWN0dWFsRGF0YSwgU3RyaW5nIGV4cGVjdGVkRGF0YSk7CgogIC8vLyBSZXR1cm5zIGB0cnVlYCBpZiBbYWN0dWFsRGF0YV0gY29ycmVzcG9uZHMgdG8gZW1wdHkgZGF0YS4KICBib29sIGlzRW1wdHkoVCBhY3R1YWxEYXRhKTsKCiAgLy8vIFJldHVybnMgYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIG9mIFthY3R1YWxEYXRhXS4KICBTdHJpbmcgZ2V0VGV4dChUIGFjdHVhbERhdGEpOwp9CgovLy8gRGVmYXVsdCBkYXRhIGludGVycHJldGVyIGZvciBzdHJpbmcgZGF0YS4KY2xhc3MgU3RyaW5nRGF0YUludGVycHJldGVyIGltcGxlbWVudHMgRGF0YUludGVycHJldGVyPFN0cmluZz4gewogIGNvbnN0IFN0cmluZ0RhdGFJbnRlcnByZXRlcigpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgaXNBc0V4cGVjdGVkKFN0cmluZyBhY3R1YWxEYXRhLCBTdHJpbmcgZXhwZWN0ZWREYXRhKSB7CiAgICBhY3R1YWxEYXRhID8/PSAnJzsKICAgIGV4cGVjdGVkRGF0YSA/Pz0gJyc7CiAgICBpZiAoYWN0dWFsRGF0YSAhPSBleHBlY3RlZERhdGEpIHsKICAgICAgcmV0dXJuICJFeHBlY3RlZCAkZXhwZWN0ZWREYXRhLCBmb3VuZCAkYWN0dWFsRGF0YSI7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBvdmVycmlkZQogIGJvb2wgaXNFbXB0eShTdHJpbmcgYWN0dWFsRGF0YSkgewogICAgcmV0dXJuIGFjdHVhbERhdGEgPT0gJyc7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0VGV4dChTdHJpbmcgYWN0dWFsRGF0YSkgewogICAgcmV0dXJuIGFjdHVhbERhdGE7CiAgfQp9CgpTdHJpbmcgd2l0aEFubm90YXRpb25zKFN0cmluZyBzb3VyY2VDb2RlLCBNYXA8aW50LCBMaXN0PFN0cmluZz4+IGFubm90YXRpb25zKSB7CiAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIGludCBlbmQgPSAwOwogIGZvciAoaW50IG9mZnNldCBpbiBhbm5vdGF0aW9ucy5rZXlzLnRvTGlzdCgpLi5zb3J0KCkpIHsKICAgIGlmIChvZmZzZXQgPj0gc291cmNlQ29kZS5sZW5ndGgpIHsKICAgICAgc2Iud3JpdGUoJy4uLicpOwogICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICAgIH0KICAgIGlmIChvZmZzZXQgPiBlbmQpIHsKICAgICAgc2Iud3JpdGUoc291cmNlQ29kZS5zdWJzdHJpbmcoZW5kLCBvZmZzZXQpKTsKICAgIH0KICAgIGZvciAoU3RyaW5nIGFubm90YXRpb24gaW4gYW5ub3RhdGlvbnNbb2Zmc2V0XSkgewogICAgICBzYi53cml0ZShjb2xvcml6ZUFubm90YXRpb24oJy8qJywgYW5ub3RhdGlvbiwgJyovJykpOwogICAgfQogICAgZW5kID0gb2Zmc2V0OwogIH0KICBpZiAoZW5kIDwgc291cmNlQ29kZS5sZW5ndGgpIHsKICAgIHNiLndyaXRlKHNvdXJjZUNvZGUuc3Vic3RyaW5nKGVuZCkpOwogIH0KICByZXR1cm4gc2IudG9TdHJpbmcoKTsKfQoKLy8vIENvbXB1dGVkIGFuZCBleHBlY3RlZCBkYXRhIGZvciBhbiBhbm5vdGF0ZWQgdGVzdC4gVGhpcyBpcyB1c2VkIGZvciBjaGVja2luZwovLy8gYW5kIGRpc3BsYXlpbmcgcmVzdWx0cyBvZiBhbiBhbm5vdGF0ZWQgdGVzdC4KY2xhc3MgSWREYXRhPFQ+IHsKICBmaW5hbCBNYXA8VXJpLCBBbm5vdGF0ZWRDb2RlPiBjb2RlOwogIGZpbmFsIE1lbWJlckFubm90YXRpb25zPElkVmFsdWU+IGV4cGVjdGVkTWFwczsKICBmaW5hbCBDb21waWxlZERhdGE8VD4gX2NvbXBpbGVkRGF0YTsKICBmaW5hbCBNZW1iZXJBbm5vdGF0aW9uczxBY3R1YWxEYXRhPFQ+PiBfYWN0dWFsTWFwcyA9IG5ldyBNZW1iZXJBbm5vdGF0aW9ucygpOwoKICBJZERhdGEodGhpcy5jb2RlLCB0aGlzLmV4cGVjdGVkTWFwcywgdGhpcy5fY29tcGlsZWREYXRhKSB7CiAgICBmb3IgKFVyaSB1cmkgaW4gY29kZS5rZXlzKSB7CiAgICAgIF9hY3R1YWxNYXBzW3VyaV0gPSBfY29tcGlsZWREYXRhLmFjdHVhbE1hcHNbdXJpXSA/PyA8SWQsIEFjdHVhbERhdGE8VD4+e307CiAgICB9CiAgICBfYWN0dWFsTWFwcy5nbG9iYWxEYXRhLmFkZEFsbChfY29tcGlsZWREYXRhLmdsb2JhbERhdGEpOwogIH0KCiAgVXJpIGdldCBtYWluVXJpID0+IF9jb21waWxlZERhdGEubWFpblVyaTsKICBNZW1iZXJBbm5vdGF0aW9uczxBY3R1YWxEYXRhPFQ+PiBnZXQgYWN0dWFsTWFwcyA9PiBfYWN0dWFsTWFwczsKCiAgU3RyaW5nIGFjdHVhbENvZGUoVXJpIHVyaSkgewogICAgTWFwPGludCwgTGlzdDxTdHJpbmc+PiBhbm5vdGF0aW9ucyA9IDxpbnQsIExpc3Q8U3RyaW5nPj57fTsKICAgIGFjdHVhbE1hcHNbdXJpXS5mb3JFYWNoKChJZCBpZCwgQWN0dWFsRGF0YTxUPiBkYXRhKSB7CiAgICAgIGFubm90YXRpb25zLnB1dElmQWJzZW50KGRhdGEub2Zmc2V0LCAoKSA9PiBbXSkuYWRkKCcke2RhdGEudmFsdWV9Jyk7CiAgICB9KTsKICAgIHJldHVybiB3aXRoQW5ub3RhdGlvbnMoY29kZVt1cmldLnNvdXJjZUNvZGUsIGFubm90YXRpb25zKTsKICB9CgogIFN0cmluZyBkaWZmQ29kZShVcmkgdXJpLCBEYXRhSW50ZXJwcmV0ZXI8VD4gZGF0YVZhbGlkYXRvcikgewogICAgTWFwPGludCwgTGlzdDxTdHJpbmc+PiBhbm5vdGF0aW9ucyA9IDxpbnQsIExpc3Q8U3RyaW5nPj57fTsKICAgIGFjdHVhbE1hcHNbdXJpXS5mb3JFYWNoKChJZCBpZCwgQWN0dWFsRGF0YTxUPiBkYXRhKSB7CiAgICAgIElkVmFsdWUgZXhwZWN0ZWRWYWx1ZSA9IGV4cGVjdGVkTWFwc1t1cmldW2lkXTsKICAgICAgVCBhY3R1YWxWYWx1ZSA9IGRhdGEudmFsdWU7CiAgICAgIFN0cmluZyB1bmV4cGVjdGVkTWVzc2FnZSA9CiAgICAgICAgICBkYXRhVmFsaWRhdG9yLmlzQXNFeHBlY3RlZChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZT8udmFsdWUpOwogICAgICBpZiAodW5leHBlY3RlZE1lc3NhZ2UgIT0gbnVsbCkgewogICAgICAgIFN0cmluZyBleHBlY3RlZCA9IGV4cGVjdGVkVmFsdWU/LnRvU3RyaW5nKCkgPz8gJyc7CiAgICAgICAgU3RyaW5nIGFjdHVhbCA9IGRhdGFWYWxpZGF0b3IuZ2V0VGV4dChhY3R1YWxWYWx1ZSk7CiAgICAgICAgaW50IG9mZnNldCA9IGdldE9mZnNldEZyb21JZChpZCwgdXJpKTsKICAgICAgICBpZiAob2Zmc2V0ICE9IG51bGwpIHsKICAgICAgICAgIFN0cmluZyB2YWx1ZTEgPSAnJHtleHBlY3RlZH0nOwogICAgICAgICAgU3RyaW5nIHZhbHVlMiA9IElkVmFsdWUuaWRUb1N0cmluZyhpZCwgJyR7YWN0dWFsfScpOwogICAgICAgICAgYW5ub3RhdGlvbnMKICAgICAgICAgICAgICAucHV0SWZBYnNlbnQob2Zmc2V0LCAoKSA9PiBbXSkKICAgICAgICAgICAgICAuYWRkKGNvbG9yaXplRGlmZih2YWx1ZTEsICcgfCAnLCB2YWx1ZTIpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgZXhwZWN0ZWRNYXBzW3VyaV0uZm9yRWFjaCgoSWQgaWQsIElkVmFsdWUgZXhwZWN0ZWQpIHsKICAgICAgaWYgKCFhY3R1YWxNYXBzW3VyaV0uY29udGFpbnNLZXkoaWQpKSB7CiAgICAgICAgaW50IG9mZnNldCA9IGdldE9mZnNldEZyb21JZChpZCwgdXJpKTsKICAgICAgICBpZiAob2Zmc2V0ICE9IG51bGwpIHsKICAgICAgICAgIFN0cmluZyB2YWx1ZTEgPSAnJHtleHBlY3RlZH0nOwogICAgICAgICAgU3RyaW5nIHZhbHVlMiA9ICctLS0nOwogICAgICAgICAgYW5ub3RhdGlvbnMKICAgICAgICAgICAgICAucHV0SWZBYnNlbnQob2Zmc2V0LCAoKSA9PiBbXSkKICAgICAgICAgICAgICAuYWRkKGNvbG9yaXplRGlmZih2YWx1ZTEsICcgfCAnLCB2YWx1ZTIpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHdpdGhBbm5vdGF0aW9ucyhjb2RlW3VyaV0uc291cmNlQ29kZSwgYW5ub3RhdGlvbnMpOwogIH0KCiAgaW50IGdldE9mZnNldEZyb21JZChJZCBpZCwgVXJpIHVyaSkgewogICAgcmV0dXJuIF9jb21waWxlZERhdGEuZ2V0T2Zmc2V0RnJvbUlkKGlkLCB1cmkpOwogIH0KfQoKLy8vIENoZWNrcyBbY29tcGlsZWREYXRhXSBhZ2FpbnN0IHRoZSBleHBlY3RlZCBkYXRhIGluIFtleHBlY3RlZE1hcHNdIGRlcml2ZWQKLy8vIGZyb20gW2NvZGVdLgpGdXR1cmU8Ym9vbD4gY2hlY2tDb2RlPFQ+KAogICAgU3RyaW5nIG1vZGVOYW1lLAogICAgVXJpIG1haW5GaWxlVXJpLAogICAgTWFwPFVyaSwgQW5ub3RhdGVkQ29kZT4gY29kZSwKICAgIE1lbWJlckFubm90YXRpb25zPElkVmFsdWU+IGV4cGVjdGVkTWFwcywKICAgIENvbXBpbGVkRGF0YTxUPiBjb21waWxlZERhdGEsCiAgICBEYXRhSW50ZXJwcmV0ZXI8VD4gZGF0YVZhbGlkYXRvciwKICAgIHtib29sIGZpbHRlckFjdHVhbERhdGEoSWRWYWx1ZSBleHBlY3RlZCwgQWN0dWFsRGF0YTxUPiBhY3R1YWxEYXRhKSwKICAgIGJvb2wgZmF0YWxFcnJvcnM6IHRydWUsCiAgICBib29sIHN1Y2NpbmN0OiBmYWxzZSwKICAgIHZvaWQgb25GYWlsdXJlKFN0cmluZyBtZXNzYWdlKX0pIGFzeW5jIHsKICBJZERhdGE8VD4gZGF0YSA9IG5ldyBJZERhdGE8VD4oY29kZSwgZXhwZWN0ZWRNYXBzLCBjb21waWxlZERhdGEpOwogIGJvb2wgaGFzRmFpbHVyZSA9IGZhbHNlOwogIFNldDxVcmk+IG5lZWRlZERpZmZzID0gbmV3IFNldDxVcmk+KCk7CgogIHZvaWQgY2hlY2tBY3R1YWxNYXAoCiAgICAgIE1hcDxJZCwgQWN0dWFsRGF0YTxUPj4gYWN0dWFsTWFwLCBNYXA8SWQsIElkVmFsdWU+IGV4cGVjdGVkTWFwLAogICAgICBbVXJpIHVyaV0pIHsKICAgIGJvb2wgaGFzTG9jYWxGYWlsdXJlID0gZmFsc2U7CiAgICBhY3R1YWxNYXAuZm9yRWFjaCgoSWQgaWQsIEFjdHVhbERhdGE8VD4gYWN0dWFsRGF0YSkgewogICAgICBUIGFjdHVhbCA9IGFjdHVhbERhdGEudmFsdWU7CiAgICAgIFN0cmluZyBhY3R1YWxUZXh0ID0gZGF0YVZhbGlkYXRvci5nZXRUZXh0KGFjdHVhbCk7CgogICAgICBpZiAoIWV4cGVjdGVkTWFwLmNvbnRhaW5zS2V5KGlkKSkgewogICAgICAgIGlmICghZGF0YVZhbGlkYXRvci5pc0VtcHR5KGFjdHVhbCkpIHsKICAgICAgICAgIFN0cmluZyBhY3R1YWxWYWx1ZVRleHQgPSBJZFZhbHVlLmlkVG9TdHJpbmcoaWQsIGFjdHVhbFRleHQpOwogICAgICAgICAgY29tcGlsZWREYXRhLnJlcG9ydEVycm9yKAogICAgICAgICAgICAgIGFjdHVhbERhdGEudXJpLAogICAgICAgICAgICAgIGFjdHVhbERhdGEub2Zmc2V0LAogICAgICAgICAgICAgIHN1Y2NpbmN0CiAgICAgICAgICAgICAgICAgID8gJ0VYVFJBICRtb2RlTmFtZSBEQVRBIGZvciAke2lkLmRlc2NyaXB0b3J9JwogICAgICAgICAgICAgICAgICA6ICdFWFRSQSAkbW9kZU5hbWUgREFUQSBmb3IgJHtpZC5kZXNjcmlwdG9yfTpcbiAnCiAgICAgICAgICAgICAgICAgICAgICAnb2JqZWN0ICAgOiAke2FjdHVhbERhdGEub2JqZWN0VGV4dH1cbiAnCiAgICAgICAgICAgICAgICAgICAgICAnYWN0dWFsICAgOiAke2NvbG9yaXplQWN0dWFsKGFjdHVhbFZhbHVlVGV4dCl9XG4gJwogICAgICAgICAgICAgICAgICAgICAgJ0RhdGEgd2FzIGV4cGVjdGVkIGZvciB0aGVzZSBpZHM6ICR7ZXhwZWN0ZWRNYXAua2V5c30nLAogICAgICAgICAgICAgIHN1Y2NpbmN0OiBzdWNjaW5jdCk7CiAgICAgICAgICBpZiAoZmlsdGVyQWN0dWFsRGF0YSA9PSBudWxsIHx8IGZpbHRlckFjdHVhbERhdGEobnVsbCwgYWN0dWFsRGF0YSkpIHsKICAgICAgICAgICAgaGFzTG9jYWxGYWlsdXJlID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgSWRWYWx1ZSBleHBlY3RlZCA9IGV4cGVjdGVkTWFwW2lkXTsKICAgICAgICBTdHJpbmcgdW5leHBlY3RlZE1lc3NhZ2UgPQogICAgICAgICAgICBkYXRhVmFsaWRhdG9yLmlzQXNFeHBlY3RlZChhY3R1YWwsIGV4cGVjdGVkLnZhbHVlKTsKICAgICAgICBpZiAodW5leHBlY3RlZE1lc3NhZ2UgIT0gbnVsbCkgewogICAgICAgICAgU3RyaW5nIGFjdHVhbFZhbHVlVGV4dCA9IElkVmFsdWUuaWRUb1N0cmluZyhpZCwgYWN0dWFsVGV4dCk7CiAgICAgICAgICBjb21waWxlZERhdGEucmVwb3J0RXJyb3IoCiAgICAgICAgICAgICAgYWN0dWFsRGF0YS51cmksCiAgICAgICAgICAgICAgYWN0dWFsRGF0YS5vZmZzZXQsCiAgICAgICAgICAgICAgc3VjY2luY3QKICAgICAgICAgICAgICAgICAgPyAnVU5FWFBFQ1RFRCAkbW9kZU5hbWUgREFUQSBmb3IgJHtpZC5kZXNjcmlwdG9yfScKICAgICAgICAgICAgICAgICAgOiAnVU5FWFBFQ1RFRCAkbW9kZU5hbWUgREFUQSBmb3IgJHtpZC5kZXNjcmlwdG9yfTpcbiAnCiAgICAgICAgICAgICAgICAgICAgICAnZGV0YWlsICA6ICR7Y29sb3JpemVNZXNzYWdlKHVuZXhwZWN0ZWRNZXNzYWdlKX1cbiAnCiAgICAgICAgICAgICAgICAgICAgICAnb2JqZWN0ICA6ICR7YWN0dWFsRGF0YS5vYmplY3RUZXh0fVxuICcKICAgICAgICAgICAgICAgICAgICAgICdleHBlY3RlZDogJHtjb2xvcml6ZUV4cGVjdGVkKCckZXhwZWN0ZWQnKX1cbiAnCiAgICAgICAgICAgICAgICAgICAgICAnYWN0dWFsICA6ICR7Y29sb3JpemVBY3R1YWwoYWN0dWFsVmFsdWVUZXh0KX0nLAogICAgICAgICAgICAgIHN1Y2NpbmN0OiBzdWNjaW5jdCk7CiAgICAgICAgICBpZiAoZmlsdGVyQWN0dWFsRGF0YSA9PSBudWxsIHx8CiAgICAgICAgICAgICAgZmlsdGVyQWN0dWFsRGF0YShleHBlY3RlZCwgYWN0dWFsRGF0YSkpIHsKICAgICAgICAgICAgaGFzTG9jYWxGYWlsdXJlID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgaWYgKGhhc0xvY2FsRmFpbHVyZSkgewogICAgICBoYXNGYWlsdXJlID0gdHJ1ZTsKICAgICAgaWYgKHVyaSAhPSBudWxsKSB7CiAgICAgICAgbmVlZGVkRGlmZnMuYWRkKHVyaSk7CiAgICAgIH0KICAgIH0KICB9CgogIGRhdGEuYWN0dWFsTWFwcy5mb3JFYWNoKChVcmkgdXJpLCBNYXA8SWQsIEFjdHVhbERhdGE8VD4+IGFjdHVhbE1hcCkgewogICAgY2hlY2tBY3R1YWxNYXAoYWN0dWFsTWFwLCBkYXRhLmV4cGVjdGVkTWFwc1t1cmldLCB1cmkpOwogIH0pOwogIGNoZWNrQWN0dWFsTWFwKGRhdGEuYWN0dWFsTWFwcy5nbG9iYWxEYXRhLCBkYXRhLmV4cGVjdGVkTWFwcy5nbG9iYWxEYXRhKTsKCiAgU2V0PElkPiBtaXNzaW5nSWRzID0gbmV3IFNldDxJZD4oKTsKICB2b2lkIGNoZWNrTWlzc2luZygKICAgICAgTWFwPElkLCBJZFZhbHVlPiBleHBlY3RlZE1hcCwgTWFwPElkLCBBY3R1YWxEYXRhPFQ+PiBhY3R1YWxNYXAsCiAgICAgIFtVcmkgdXJpXSkgewogICAgZXhwZWN0ZWRNYXAuZm9yRWFjaCgoSWQgaWQsIElkVmFsdWUgZXhwZWN0ZWQpIHsKICAgICAgaWYgKCFhY3R1YWxNYXAuY29udGFpbnNLZXkoaWQpKSB7CiAgICAgICAgbWlzc2luZ0lkcy5hZGQoaWQpOwogICAgICAgIFN0cmluZyBtZXNzYWdlID0gJ01JU1NJTkcgJG1vZGVOYW1lIERBVEEgZm9yICR7aWQuZGVzY3JpcHRvcn06ICcKICAgICAgICAgICAgJ0V4cGVjdGVkICR7Y29sb3JpemVFeHBlY3RlZCgnJGV4cGVjdGVkJyl9JzsKICAgICAgICBpZiAodXJpICE9IG51bGwpIHsKICAgICAgICAgIGNvbXBpbGVkRGF0YS5yZXBvcnRFcnJvcigKICAgICAgICAgICAgICB1cmksIGNvbXBpbGVkRGF0YS5nZXRPZmZzZXRGcm9tSWQoaWQsIHVyaSksIG1lc3NhZ2UsCiAgICAgICAgICAgICAgc3VjY2luY3Q6IHN1Y2NpbmN0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHJpbnQobWVzc2FnZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIGlmIChtaXNzaW5nSWRzLmlzTm90RW1wdHkgJiYgdXJpICE9IG51bGwpIHsKICAgICAgbmVlZGVkRGlmZnMuYWRkKHVyaSk7CiAgICB9CiAgfQoKICBkYXRhLmV4cGVjdGVkTWFwcy5mb3JFYWNoKChVcmkgdXJpLCBNYXA8SWQsIElkVmFsdWU+IGV4cGVjdGVkTWFwKSB7CiAgICBjaGVja01pc3NpbmcoZXhwZWN0ZWRNYXAsIGRhdGEuYWN0dWFsTWFwc1t1cmldLCB1cmkpOwogIH0pOwogIGNoZWNrTWlzc2luZyhkYXRhLmV4cGVjdGVkTWFwcy5nbG9iYWxEYXRhLCBkYXRhLmFjdHVhbE1hcHMuZ2xvYmFsRGF0YSk7CiAgaWYgKCFzdWNjaW5jdCkgewogICAgZm9yIChVcmkgdXJpIGluIG5lZWRlZERpZmZzKSB7CiAgICAgIHByaW50KCctLWFubm90YXRpb25zIGRpZmYgWyR7dXJpLnBhdGhTZWdtZW50cy5sYXN0fV0tLS0tLS0tLS0tLS0tJyk7CiAgICAgIHByaW50KGRhdGEuZGlmZkNvZGUodXJpLCBkYXRhVmFsaWRhdG9yKSk7CiAgICAgIHByaW50KCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tJyk7CiAgICB9CiAgfQogIGlmIChtaXNzaW5nSWRzLmlzTm90RW1wdHkpIHsKICAgIHByaW50KCJNSVNTSU5HIGlkczogJHttaXNzaW5nSWRzfS4iKTsKICAgIGhhc0ZhaWx1cmUgPSB0cnVlOwogIH0KICBpZiAoaGFzRmFpbHVyZSAmJiBmYXRhbEVycm9ycykgewogICAgb25GYWlsdXJlKCdFcnJvcnMgZm91bmQuJyk7CiAgfQogIHJldHVybiBoYXNGYWlsdXJlOwp9Cgp0eXBlZGVmIEZ1dHVyZTxib29sPiBSdW5UZXN0RnVuY3Rpb24oVGVzdERhdGEgdGVzdERhdGEsCiAgICB7Ym9vbCB0ZXN0QWZ0ZXJGYWlsdXJlcywgYm9vbCB2ZXJib3NlLCBib29sIHN1Y2NpbmN0LCBib29sIHByaW50Q29kZX0pOwoKLy8vIENoZWNrIGNvZGUgZm9yIGFsbCB0ZXN0IGZpbGVzIGludCBbZGF0YV0gdXNpbmcgW2NvbXB1dGVGcm9tQXN0XSBhbmQKLy8vIFtjb21wdXRlRnJvbUtlcm5lbF0gZnJvbSB0aGUgcmVzcGVjdGl2ZSBmcm9udCBlbmRzLiBJZiBbc2tpcEZvcktlcm5lbF0KLy8vIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSB0ZXN0IGZpbGUgaXQgaXNuJ3QgdGVzdGVkIGZvciBrZXJuZWwuCi8vLwovLy8gW2xpYkRpcmVjdG9yeV0gY29udGFpbnMgdGhlIGRpcmVjdG9yeSBmb3IgYW55IHN1cHBvcnRpbmcgbGlicmFyaWVzIHRoYXQgbmVlZAovLy8gdG8gYmUgbG9hZGVkLiBXZSBleHBlY3Qgc3VwcG9ydGluZyBsaWJyYXJpZXMgdG8gaGF2ZSB0aGUgc2FtZSBwcmVmaXggYXMgdGhlCi8vLyBvcmlnaW5hbCB0ZXN0IGluIFtkYXRhRGlyXS4gU28sIGZvciBleGFtcGxlLCBpZiB0ZXN0aW5nIGBmb28uZGFydGAgaW4KLy8vIFtkYXRhRGlyXSwgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgY29uc2lkZXIgYW55IGZpbGVzIG5hbWVkIGBmb28uKlwuZGFydGAsCi8vLyBzdWNoIGFzIGBmb28yLmRhcnRgLCBgZm9vXzIuZGFydGAsIGFuZCBgZm9vX2JsYWhfYmxhaF9ibGFoLmRhcnRgIGluCi8vLyBbbGliRGlyZWN0b3J5XSB0byBiZSBzdXBwb3J0aW5nIGxpYnJhcnkgZmlsZXMgZm9yIGBmb28uZGFydGAuCkZ1dHVyZSBydW5UZXN0cyhEaXJlY3RvcnkgZGF0YURpciwKICAgIHtMaXN0PFN0cmluZz4gYXJnczogY29uc3QgPFN0cmluZz5bXSwKICAgIERpcmVjdG9yeSBsaWJEaXJlY3Rvcnk6IG51bGwsCiAgICBpbnQgc2hhcmRzOiAxLAogICAgaW50IHNoYXJkSW5kZXg6IDAsCiAgICB2b2lkIG9uVGVzdChVcmkgdXJpKSwKICAgIEl0ZXJhYmxlPFN0cmluZz4gc3VwcG9ydGVkTWFya2VycywKICAgIFVyaSBjcmVhdGVVcmlGb3JGaWxlTmFtZShTdHJpbmcgZmlsZU5hbWUsIHtib29sIGlzTGlifSksCiAgICB2b2lkIG9uRmFpbHVyZShTdHJpbmcgbWVzc2FnZSksCiAgICBSdW5UZXN0RnVuY3Rpb24gcnVuVGVzdH0pIGFzeW5jIHsKICAvLyBUT0RPKGpvaG5uaXdpbnRoZXIpOiBTdXBwb3J0IC0tc2hvdyB0byBzaG93IGFjdHVhbCBkYXRhIGZvciBhbiBpbnB1dC4KICBhcmdzID0gYXJncy50b0xpc3QoKTsKICBib29sIHZlcmJvc2UgPSBhcmdzLnJlbW92ZSgnLXYnKTsKICBib29sIHN1Y2NpbmN0ID0gYXJncy5yZW1vdmUoJy1zJyk7CiAgYm9vbCBzaG91bGRDb250aW51ZSA9IGFyZ3MucmVtb3ZlKCctYycpOwogIGJvb2wgdGVzdEFmdGVyRmFpbHVyZXMgPSBhcmdzLnJlbW92ZSgnLWEnKTsKICBib29sIHByaW50Q29kZSA9IGFyZ3MucmVtb3ZlKCctcCcpOwogIGJvb2wgY29udGludWVkID0gZmFsc2U7CiAgYm9vbCBoYXNGYWlsdXJlcyA9IGZhbHNlOwoKICB2YXIgcmVsYXRpdmVEaXIgPSBkYXRhRGlyLnVyaS5wYXRoLnJlcGxhY2VBbGwoVXJpLmJhc2UucGF0aCwgJycpOwogIHByaW50KCdEYXRhIGRpcjogJHtyZWxhdGl2ZURpcn0nKTsKICBMaXN0PEZpbGVTeXN0ZW1FbnRpdHk+IGVudGl0aWVzID0gZGF0YURpci5saXN0U3luYygpOwogIGlmIChzaGFyZHMgPiAxKSB7CiAgICBpbnQgc3RhcnQgPSBlbnRpdGllcy5sZW5ndGggKiBzaGFyZEluZGV4IH4vIHNoYXJkczsKICAgIGludCBlbmQgPSBlbnRpdGllcy5sZW5ndGggKiAoc2hhcmRJbmRleCArIDEpIH4vIHNoYXJkczsKICAgIGVudGl0aWVzID0gZW50aXRpZXMuc3VibGlzdChzdGFydCwgZW5kKTsKICB9CiAgaW50IHRlc3RDb3VudCA9IDA7CiAgZm9yIChGaWxlU3lzdGVtRW50aXR5IGVudGl0eSBpbiBlbnRpdGllcykgewogICAgU3RyaW5nIG5hbWUgPSBlbnRpdHkudXJpLnBhdGhTZWdtZW50cy5sYXN0OwogICAgaWYgKGFyZ3MuaXNOb3RFbXB0eSAmJiAhYXJncy5jb250YWlucyhuYW1lKSAmJiAhY29udGludWVkKSBjb250aW51ZTsKICAgIGlmIChzaG91bGRDb250aW51ZSkgY29udGludWVkID0gdHJ1ZTsKICAgIHRlc3RDb3VudCsrOwoKICAgIGlmIChvblRlc3QgIT0gbnVsbCkgewogICAgICBvblRlc3QoZW50aXR5LnVyaSk7CiAgICB9CiAgICBwcmludCgnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLScpOwoKICAgIFRlc3REYXRhIHRlc3REYXRhID0gY29tcHV0ZVRlc3REYXRhKAogICAgICAgIGVudGl0eSwgZW50aXR5IGlzIEZpbGUgPyBsaWJEaXJlY3RvcnkgOiBudWxsLAogICAgICAgIHN1cHBvcnRlZE1hcmtlcnM6IHN1cHBvcnRlZE1hcmtlcnMsCiAgICAgICAgY3JlYXRlVXJpRm9yRmlsZU5hbWU6IGNyZWF0ZVVyaUZvckZpbGVOYW1lLAogICAgICAgIG9uRmFpbHVyZTogb25GYWlsdXJlKTsKICAgIHByaW50KCdUZXN0IGZpbGU6ICR7dGVzdERhdGEudGVzdEZpbGVVcml9Jyk7CiAgICBpZiAoIXN1Y2NpbmN0ICYmIHRlc3REYXRhLmxpYkZpbGVOYW1lcyAhPSBudWxsKSB7CiAgICAgIHByaW50KCdTdXBwb3J0aW5nIGxpYnJhcmllczonKTsKICAgICAgZm9yIChTdHJpbmcgbGliRmlsZU5hbWUgaW4gdGVzdERhdGEubGliRmlsZU5hbWVzKSB7CiAgICAgICAgcHJpbnQoJyAgICAtIGxpYnMvJGxpYkZpbGVOYW1lJyk7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoYXdhaXQgcnVuVGVzdCh0ZXN0RGF0YSwKICAgICAgICB0ZXN0QWZ0ZXJGYWlsdXJlczogdGVzdEFmdGVyRmFpbHVyZXMsCiAgICAgICAgdmVyYm9zZTogdmVyYm9zZSwKICAgICAgICBzdWNjaW5jdDogc3VjY2luY3QsCiAgICAgICAgcHJpbnRDb2RlOiBwcmludENvZGUpKSB7CiAgICAgIGhhc0ZhaWx1cmVzID0gdHJ1ZTsKICAgIH0KICB9CiAgaWYgKGhhc0ZhaWx1cmVzKSB7CiAgICBvbkZhaWx1cmUoJ0Vycm9ycyBmb3VuZC4nKTsKICB9CiAgaWYgKHRlc3RDb3VudCA9PSAwKSB7CiAgICBvbkZhaWx1cmUoIk5vIGZpbGVzIHdlcmUgdGVzdGVkLiIpOwogIH0KfQqCpABOTjwBEiUSKQEgKCoBSCUNERIDATMtAT0mE0MLEQQCAUkkE0ELEQQCAUclE0ILEQQCAUklE0ALEQQCAUonE0ILEQQCAT0oE0MLEQQCAU8PSClCAgFMH0NGAgFMS09PJEchPykBTTkBQDMEAUMpBAEsNzkGKwQBDBYqJBcvMEIaSxkbGBUKFQYhFxscBhMaBAIBTykER0cUNUwyKC1FATY/TEI2JUwhQjJFTAo6DzYyRUAKLggGBgIBRgRMIgROLlAoPSdEARUlGh0mL0kkOB4PThMIBgQBUCMQTAU9MEEEQSYdLDEFAR0BRhkjRjMlR0YpUB8EASIyQkY8MDkIBgQhURlEBgQBSSMCASARGRgvJj4jAVEtATQCATYhFQFNIzUBS0YUKwFAATc4QDQnEi4oCBgEAThQJkA2Li4wPBQ0PiMUNCwICDgmIjIUNT4ICBgEAScBUQIBMSROSRY6AUAeATggAgEuQSEBDEAXGSY6BhEEAQwkHQQBDCYXBAIBUCgPOicXHAYYMwY1PAYSBCEpBBgCAVAxEiYxJ1ABPSFRBj0EASxCAR9AOksIPwQBP0A6NSIhSSc7PC8eKT8WLTkKCAg6Li8eKSEWLTkKCAg/BAEoMwQCAU4RGxUVIi0iJkgcGi1EGykBF0YTIjojOQEqLkckHiEXQEQ/SU4jUCQMCg8sI0ApRyQeIRdFSUs+RkYjKjgkDAoICBsZGR4IBgQBSDwGTAEmFUYTNCgcSTkbJEMjERoKCAgwHAYEAUY6BkoTI0swSwYEHyoXBCMgBBUCAThMAUhLQwRRUEpPSEIjKiITFxonPSQmSxgkJSsuJhocAUQlOBQ4PC0EFS4wSSoRARoaBk8BKTYsNB8xNiY6KggGASAuGhwhGgYEFSAEGCgEAgEtcGFja2FnZTpmcm9udF9lbmQvc3JjL3Rlc3RpbmcvaWRfdGVzdGluZy5kYXJ0L3Nka3Jvb3Q6L3RoaXJkX3BhcnR5L3BrZy9jcnlwdG8vbGliL2NyeXB0by5kYXJ0gWwvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKZXhwb3J0ICdzcmMvZGlnZXN0LmRhcnQnOwpleHBvcnQgJ3NyYy9oYXNoLmRhcnQnOwpleHBvcnQgJ3NyYy9obWFjLmRhcnQnOwpleHBvcnQgJ3NyYy9tZDUuZGFydCc7CmV4cG9ydCAnc3JjL3NoYTEuZGFydCc7CmV4cG9ydCAnc3JjL3NoYTI1Ni5kYXJ0JzsKDABOTjwBGhgYFxgaARpwYWNrYWdlOmNyeXB0by9jcnlwdG8uZGFydEFzZGtyb290Oi9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvdGVzdGluZy9hbm5vdGF0ZWRfY29kZV9oZWxwZXIuZGFydJroLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmNvbnN0IGludCBfTEYgPSAweDBBOwpjb25zdCBpbnQgX0NSID0gMHgwRDsKCmNvbnN0IFBhdHRlcm4gYXRCcmFjZVN0YXJ0ID0gJ0B7JzsKY29uc3QgUGF0dGVybiBicmFjZUVuZCA9ICd9JzsKCmZpbmFsIFBhdHRlcm4gY29tbWVudFN0YXJ0ID0gbmV3IFJlZ0V4cChyJy9cKicpOwpmaW5hbCBQYXR0ZXJuIGNvbW1lbnRFbmQgPSBuZXcgUmVnRXhwKHInXCovXHMqJyk7CgpjbGFzcyBBbm5vdGF0aW9uIHsKICAvLy8gMS1iYXNlZCBsaW5lIG51bWJlciBvZiB0aGUgYW5ub3RhdGlvbi4KICBmaW5hbCBpbnQgbGluZU5vOwoKICAvLy8gMS1iYXNlZCBjb2x1bW4gbnVtYmVyIG9mIHRoZSBhbm5vdGF0aW9uLgogIGZpbmFsIGludCBjb2x1bW5ObzsKCiAgLy8vIDAtYmFzZWQgY2hhcmFjdGVyIG9mZnNldCAgb2YgdGhlIGFubm90YXRpb24gd2l0aGluIHRoZSBzb3VyY2UgdGV4dC4KICBmaW5hbCBpbnQgb2Zmc2V0OwoKICAvLy8gVGhlIHRleHQgaW4gdGhlIGFubm90YXRpb24uCiAgZmluYWwgU3RyaW5nIHRleHQ7CgogIEFubm90YXRpb24odGhpcy5saW5lTm8sIHRoaXMuY29sdW1uTm8sIHRoaXMub2Zmc2V0LCB0aGlzLnRleHQpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PgogICAgICAnQW5ub3RhdGlvbihsaW5lTm89JGxpbmVObyxjb2x1bW5Obz0kY29sdW1uTm8sb2Zmc2V0PSRvZmZzZXQsdGV4dD0kdGV4dCknOwp9CgovLy8gQSBzb3VyY2UgY29kZSB0ZXh0IHdpdGggYW5ub3RhdGVkIHBvc2l0aW9ucy4KLy8vCi8vLyBBbiBbQW5ub3RhdGVkQ29kZV0gY2FuIGJlIGNyZWF0ZWQgZnJvbSBhIFtTdHJpbmddIG9mIHNvdXJjZSBjb2RlIHdoZXJlCi8vLyBhbm5vdGF0ZWQgcG9zaXRpb25zIGFyZSBlbWJlZGRlZCwgYnkgZGVmYXVsdCB1c2luZyB0aGUgc3ludGF4IGBAe3RleHR9YC4KLy8vIEZvciBpbnN0YW5jZQovLy8KLy8vICAgICBtYWluKCkgewovLy8gICAgICAgQHtmb28tY2FsbH1mb28oKTsKLy8vICAgICAgIGJhckB7YmFyLWFyZ3N9KCk7Ci8vLyAgICAgfQovLy8KLy8vICB0aGUgcG9zaXRpb24gb2YgYGZvb2AgY2FsbCB3aWxsIGhvbGQgYW4gYW5ub3RhdGlvbiB3aXRoIHRleHQgJ2Zvby1jYWxsJyBhbmQKLy8vICB0aGUgcG9zaXRpb24gb2YgYGJhcmAgYXJndW1lbnRzIHdpbGwgaG9sZCBhbiBhbm5vdGF0aW9uIHdpdGggdGV4dAovLy8gICdiYXItYXJncycuCi8vLwovLy8gIEFubm90YXRpb24gdGV4dCBjYW5ub3Qgc3BhbiBtdWx0aXBsZSBsaW5lcyBhbmQgY2Fubm90IGNvbnRhaW4gJ30nLgpjbGFzcyBBbm5vdGF0ZWRDb2RlIHsKICAvLy8gVGhlIHNvdXJjZSBjb2RlIHdpdGhvdXQgYW5ub3RhdGlvbnMuCiAgZmluYWwgU3RyaW5nIHNvdXJjZUNvZGU7CgogIC8vLyBUaGUgYW5ub3RhdGlvbnMgZm9yIHRoZSBzb3VyY2UgY29kZS4KICBmaW5hbCBMaXN0PEFubm90YXRpb24+IGFubm90YXRpb25zOwoKICBMaXN0PGludD4gX2xpbmVTdGFydHM7CgogIEFubm90YXRlZENvZGUodGhpcy5zb3VyY2VDb2RlLCB0aGlzLmFubm90YXRpb25zKTsKCiAgQW5ub3RhdGVkQ29kZS5pbnRlcm5hbCh0aGlzLnNvdXJjZUNvZGUsIHRoaXMuYW5ub3RhdGlvbnMsIHRoaXMuX2xpbmVTdGFydHMpOwoKICAvLy8gQ3JlYXRlcyBhbiBbQW5ub3RhdGVkQ29kZV0gYnkgcHJvY2Vzc2luZyBbYW5ub3RhdGVkQ29kZV0uIEFubm90YXRpb24KICAvLy8gZGVsaW1pdGVkIGJ5IFtzdGFydF0gYW5kIFtlbmRdIGFyZSBjb252ZXJ0ZWQgaW50byBbQW5ub3RhdGlvbl1zIGFuZAogIC8vLyByZW1vdmVkIGZyb20gdGhlIFthbm5vdGF0ZWRDb2RlXSB0byBwcm9kdWNlIHRoZSBzb3VyY2UgY29kZS4KICBmYWN0b3J5IEFubm90YXRlZENvZGUuZnJvbVRleHQoU3RyaW5nIGFubm90YXRlZENvZGUsCiAgICAgIFtQYXR0ZXJuIHN0YXJ0ID0gYXRCcmFjZVN0YXJ0LCBQYXR0ZXJuIGVuZCA9IGJyYWNlRW5kXSkgewogICAgU3RyaW5nQnVmZmVyIGNvZGVCdWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBMaXN0PEFubm90YXRpb24+IGFubm90YXRpb25zID0gPEFubm90YXRpb24+W107CiAgICBpbnQgaW5kZXggPSAwOwogICAgaW50IG9mZnNldCA9IDA7CiAgICBpbnQgbGluZU5vID0gMTsKICAgIGludCBjb2x1bW5ObyA9IDE7CiAgICBMaXN0PGludD4gbGluZVN0YXJ0cyA9IDxpbnQ+W107CiAgICBsaW5lU3RhcnRzLmFkZChvZmZzZXQpOwogICAgd2hpbGUgKGluZGV4IDwgYW5ub3RhdGVkQ29kZS5sZW5ndGgpIHsKICAgICAgTWF0Y2ggc3RhcnRNYXRjaCA9IHN0YXJ0Lm1hdGNoQXNQcmVmaXgoYW5ub3RhdGVkQ29kZSwgaW5kZXgpOwogICAgICBpZiAoc3RhcnRNYXRjaCAhPSBudWxsKSB7CiAgICAgICAgaW50IHN0YXJ0SW5kZXggPSBzdGFydE1hdGNoLmVuZDsKICAgICAgICBJdGVyYWJsZTxNYXRjaD4gZW5kTWF0Y2hlcyA9CiAgICAgICAgICAgIGVuZC5hbGxNYXRjaGVzKGFubm90YXRlZENvZGUsIHN0YXJ0TWF0Y2guZW5kKTsKICAgICAgICBpZiAoIWVuZE1hdGNoZXMuaXNFbXB0eSkgewogICAgICAgICAgTWF0Y2ggZW5kTWF0Y2ggPSBlbmRNYXRjaGVzLmZpcnN0OwogICAgICAgICAgYW5ub3RhdGVkQ29kZS5pbmRleE9mKGVuZCwgc3RhcnRJbmRleCk7CiAgICAgICAgICBTdHJpbmcgdGV4dCA9IGFubm90YXRlZENvZGUuc3Vic3RyaW5nKHN0YXJ0TWF0Y2guZW5kLCBlbmRNYXRjaC5zdGFydCk7CiAgICAgICAgICBhbm5vdGF0aW9ucy5hZGQobmV3IEFubm90YXRpb24obGluZU5vLCBjb2x1bW5Obywgb2Zmc2V0LCB0ZXh0KSk7CiAgICAgICAgICBpbmRleCA9IGVuZE1hdGNoLmVuZDsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfQoKICAgICAgaW50IGNoYXJDb2RlID0gYW5ub3RhdGVkQ29kZS5jb2RlVW5pdEF0KGluZGV4KTsKICAgICAgc3dpdGNoIChjaGFyQ29kZSkgewogICAgICAgIGNhc2UgX0xGOgogICAgICAgICAgY29kZUJ1ZmZlci53cml0ZSgnXG4nKTsKICAgICAgICAgIG9mZnNldCsrOwogICAgICAgICAgbGluZVN0YXJ0cy5hZGQob2Zmc2V0KTsKICAgICAgICAgIGxpbmVObysrOwogICAgICAgICAgY29sdW1uTm8gPSAxOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBfQ1I6CiAgICAgICAgICBpZiAoaW5kZXggKyAxIDwgYW5ub3RhdGVkQ29kZS5sZW5ndGggJiYKICAgICAgICAgICAgICBhbm5vdGF0ZWRDb2RlLmNvZGVVbml0QXQoaW5kZXggKyAxKSA9PSBfTEYpIHsKICAgICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgIH0KICAgICAgICAgIGNvZGVCdWZmZXIud3JpdGUoJ1xuJyk7CiAgICAgICAgICBvZmZzZXQrKzsKICAgICAgICAgIGxpbmVTdGFydHMuYWRkKG9mZnNldCk7CiAgICAgICAgICBsaW5lTm8rKzsKICAgICAgICAgIGNvbHVtbk5vID0gMTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBjb2RlQnVmZmVyLndyaXRlQ2hhckNvZGUoY2hhckNvZGUpOwogICAgICAgICAgb2Zmc2V0Kys7CiAgICAgICAgICBjb2x1bW5ObysrOwogICAgICB9CiAgICAgIGluZGV4Kys7CiAgICB9CiAgICBsaW5lU3RhcnRzLmFkZChvZmZzZXQpOwogICAgcmV0dXJuIG5ldyBBbm5vdGF0ZWRDb2RlLmludGVybmFsKAogICAgICAgIGNvZGVCdWZmZXIudG9TdHJpbmcoKSwgYW5ub3RhdGlvbnMsIGxpbmVTdGFydHMpOwogIH0KCiAgdm9pZCBfZW5zdXJlTGluZVN0YXJ0cygpIHsKICAgIGlmIChfbGluZVN0YXJ0cyA9PSBudWxsKSB7CiAgICAgIGludCBpbmRleCA9IDA7CiAgICAgIGludCBvZmZzZXQgPSAwOwogICAgICBfbGluZVN0YXJ0cyA9IDxpbnQ+W107CiAgICAgIF9saW5lU3RhcnRzLmFkZChvZmZzZXQpOwogICAgICB3aGlsZSAoaW5kZXggPCBzb3VyY2VDb2RlLmxlbmd0aCkgewogICAgICAgIGludCBjaGFyQ29kZSA9IHNvdXJjZUNvZGUuY29kZVVuaXRBdChpbmRleCk7CiAgICAgICAgc3dpdGNoIChjaGFyQ29kZSkgewogICAgICAgICAgY2FzZSBfTEY6CiAgICAgICAgICAgIG9mZnNldCsrOwogICAgICAgICAgICBfbGluZVN0YXJ0cy5hZGQob2Zmc2V0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIF9DUjoKICAgICAgICAgICAgaWYgKGluZGV4ICsgMSA8IHNvdXJjZUNvZGUubGVuZ3RoICYmCiAgICAgICAgICAgICAgICBzb3VyY2VDb2RlLmNvZGVVbml0QXQoaW5kZXggKyAxKSA9PSBfTEYpIHsKICAgICAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG9mZnNldCsrOwogICAgICAgICAgICBfbGluZVN0YXJ0cy5hZGQob2Zmc2V0KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICBvZmZzZXQrKzsKICAgICAgICB9CiAgICAgICAgaW5kZXgrKzsKICAgICAgfQogICAgICBfbGluZVN0YXJ0cy5hZGQob2Zmc2V0KTsKICAgIH0KICB9CgogIHZvaWQgYWRkQW5ub3RhdGlvbihpbnQgbGluZU5vLCBpbnQgY29sdW1uTm8sIFN0cmluZyB0ZXh0KSB7CiAgICBfZW5zdXJlTGluZVN0YXJ0cygpOwogICAgaW50IG9mZnNldCA9IF9saW5lU3RhcnRzW2xpbmVObyAtIDFdICsgKGNvbHVtbk5vIC0gMSk7CiAgICBhbm5vdGF0aW9ucy5hZGQobmV3IEFubm90YXRpb24obGluZU5vLCBjb2x1bW5Obywgb2Zmc2V0LCB0ZXh0KSk7CiAgfQoKICBTdHJpbmcgdG9UZXh0KCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgTGlzdDxBbm5vdGF0aW9uPiBsaXN0ID0gYW5ub3RhdGlvbnMudG9MaXN0KCkKICAgICAgLi5zb3J0KChhLCBiKSA9PiBhLm9mZnNldC5jb21wYXJlVG8oYi5vZmZzZXQpKTsKICAgIGludCBvZmZzZXQgPSAwOwogICAgZm9yIChBbm5vdGF0aW9uIGFubm90YXRpb24gaW4gbGlzdCkgewogICAgICBzYi53cml0ZShzb3VyY2VDb2RlLnN1YnN0cmluZyhvZmZzZXQsIGFubm90YXRpb24ub2Zmc2V0KSk7CiAgICAgIHNiLndyaXRlKCdAeyR7YW5ub3RhdGlvbi50ZXh0fX0nKTsKICAgICAgb2Zmc2V0ID0gYW5ub3RhdGlvbi5vZmZzZXQ7CiAgICB9CiAgICBzYi53cml0ZShzb3VyY2VDb2RlLnN1YnN0cmluZyhvZmZzZXQpKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8vIFNwbGl0IHRoZSBhbm5vdGF0aW9ucyBpbiBbYW5ub3RhdGVkQ29kZV0gYnkgW3ByZWZpeGVzXS4KLy8vCi8vLyBSZXR1cm5zIGEgbWFwIGNvbnRhaW5pbmcgYW4gW0Fubm90YXRlZENvZGVdIG9iamVjdCBmb3IgZWFjaCBwcmVmaXgsCi8vLyBjb250YWluaW5nIG9ubHkgdGhlIGFubm90YXRpb25zIHdob3NlIHRleHQgc3RhcnRlZCB3aXRoIHRoZSBnaXZlbiBwcmVmaXguCi8vLyBJZiBubyBwcmVmaXggbWF0Y2ggdGhlIGFubm90YXRpb24gdGV4dCwgdGhlIGFubm90YXRpb24gaXMgYWRkZWQgdG8gYWxsCi8vLyBbQW5ub3RhdGVkQ29kZV0gb2JqZWN0cy4KLy8vCi8vLyBUaGUgcHJlZml4ZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgYW5ub3RhdGlvbiB0ZXh0cyBpbiB0aGUgcmV0dXJuZWQKLy8vIFtBbm5vdGF0ZWRDb2RlXSBvYmplY3RzLgpNYXA8U3RyaW5nLCBBbm5vdGF0ZWRDb2RlPiBzcGxpdEJ5UHJlZml4ZXMoCiAgICBBbm5vdGF0ZWRDb2RlIGFubm90YXRlZENvZGUsIEl0ZXJhYmxlPFN0cmluZz4gcHJlZml4ZXMpIHsKICBTZXQ8U3RyaW5nPiBwcmVmaXhTZXQgPSBwcmVmaXhlcy50b1NldCgpOwogIE1hcDxTdHJpbmcsIExpc3Q8QW5ub3RhdGlvbj4+IG1hcCA9IDxTdHJpbmcsIExpc3Q8QW5ub3RhdGlvbj4+e307CiAgZm9yIChTdHJpbmcgcHJlZml4IGluIHByZWZpeFNldCkgewogICAgbWFwW3ByZWZpeF0gPSA8QW5ub3RhdGlvbj5bXTsKICB9CiAgb3V0ZXI6CiAgZm9yIChBbm5vdGF0aW9uIGFubm90YXRpb24gaW4gYW5ub3RhdGVkQ29kZS5hbm5vdGF0aW9ucykgewogICAgaW50IGRvdFBvcyA9IGFubm90YXRpb24udGV4dC5pbmRleE9mKCcuJyk7CiAgICBpZiAoZG90UG9zICE9IC0xKSB7CiAgICAgIFN0cmluZyBhbm5vdGF0aW9uUHJlZml4ID0gYW5ub3RhdGlvbi50ZXh0LnN1YnN0cmluZygwLCBkb3RQb3MpOwogICAgICBTdHJpbmcgYW5ub3RhdGlvblRleHQgPSBhbm5vdGF0aW9uLnRleHQuc3Vic3RyaW5nKGRvdFBvcyArIDEpOwogICAgICBMaXN0PFN0cmluZz4gbWFya2VycyA9IGFubm90YXRpb25QcmVmaXguc3BsaXQoJ3wnKS50b0xpc3QoKTsKICAgICAgaWYgKHByZWZpeFNldC5jb250YWluc0FsbChtYXJrZXJzKSkgewogICAgICAgIGZvciAoU3RyaW5nIHBhcnQgaW4gbWFya2VycykgewogICAgICAgICAgbWFwW3BhcnRdLmFkZChuZXcgQW5ub3RhdGlvbihhbm5vdGF0aW9uLmxpbmVObywgYW5ub3RhdGlvbi5jb2x1bW5ObywKICAgICAgICAgICAgICBhbm5vdGF0aW9uLm9mZnNldCwgYW5ub3RhdGlvblRleHQpKTsKICAgICAgICB9CiAgICAgICAgY29udGludWUgb3V0ZXI7CiAgICAgIH0KICAgIH0KICAgIGZvciAoU3RyaW5nIHByZWZpeCBpbiBwcmVmaXhTZXQpIHsKICAgICAgbWFwW3ByZWZpeF0uYWRkKGFubm90YXRpb24pOwogICAgfQogIH0KICBNYXA8U3RyaW5nLCBBbm5vdGF0ZWRDb2RlPiBzcGxpdCA9IDxTdHJpbmcsIEFubm90YXRlZENvZGU+e307CiAgbWFwLmZvckVhY2goKFN0cmluZyBwcmVmaXgsIExpc3Q8QW5ub3RhdGlvbj4gYW5ub3RhdGlvbnMpIHsKICAgIHNwbGl0W3ByZWZpeF0gPSBuZXcgQW5ub3RhdGVkQ29kZShhbm5vdGF0ZWRDb2RlLnNvdXJjZUNvZGUsIGFubm90YXRpb25zKTsKICB9KTsKICByZXR1cm4gc3BsaXQ7Cn0KgNgATk48ARYWASMeATEyARMtFAEvFgFKFAEiFQFCARdRAgExBEtNEQQRHBwKBFFHEQRIFisbASsmARkBNAFPAUtKQzdAMjMTFBQWJBwrRCApJTsjLTJRSyAUCggBNhoSIhQiFBgREjI8FQwiFCIUGBERLhQWCA8GHCc5BAEdHxUWHR8qNRwUFiUTFDE7Fw4WJRMTFgoRCB8GBAE+GTtFBAEUKjE2FCpBKSIGLBoEAgE8BEhOSx0ERx0sPixEJSIECT0vGEZFQywnTzMKGAgGJyMGBEA+TgYQAgE4cGFja2FnZTpmcm9udF9lbmQvc3JjL3Rlc3RpbmcvYW5ub3RhdGVkX2NvZGVfaGVscGVyLmRhcnQuc2Rrcm9vdDovcGtnL2Zyb250X2VuZC9saWIvc3JjL3Rlc3RpbmcvaWQuZGFydKixLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmVudW0gSWRLaW5kIHsKICAvLy8gSWQgdXNlZCBmb3IgdG9wIGxldmVsIG9yIGNsYXNzIG1lbWJlcnMuIFRoaXMgaXMgdXNlZCBpbiBbTWVtYmVySWRdLgogIG1lbWJlciwKCiAgLy8vIElkIHVzZWQgZm9yIGNsYXNzZXMuIFRoaXMgaXMgdXNlZCBpbiBbQ2xhc3NJZF0uCiAgY2xzLAoKICAvLy8gSWQgdXNlZCBmb3IgbGlicmFyaWVzLiBUaGlzIGlzIHVzZWQgaW4gW0xpYnJhcnlJZF0uCiAgbGlicmFyeSwKCiAgLy8vIElkIHVzZWQgZm9yIGEgY29kZSBwb2ludCBhdCBjZXJ0YWluIG9mZnNldC4gVGhlIGlkIHJlcHJlc2VudHMgdGhlIGRlZmF1bHQKICAvLy8gdXNlIG9mIHRoZSBjb2RlIHBvaW50LCBvZnRlbiBhIHJlYWQgYWNjZXNzLiBUaGlzIGlzIHVzZWQgaW4gW05vZGVJZF0uCiAgbm9kZSwKCiAgLy8vIElkIHVzZWQgZm9yIGFuIGludm9jYXRpb24gYXQgY2VydGFpbiBvZmZzZXQuIFRoaXMgaXMgdXNlZCBpbiBbTm9kZUlkXS4KICBpbnZva2UsCgogIC8vLyBJZCB1c2VkIGZvciBhbiBhc3NpZ25tZW50IGF0IGNlcnRhaW4gb2Zmc2V0LiBUaGlzIGlzIHVzZWQgaW4gW05vZGVJZF0uCiAgdXBkYXRlLAoKICAvLy8gSWQgdXNlZCBmb3IgdGhlIGl0ZXJhdG9yIGV4cHJlc3Npb24gb2YgYSBmb3ItaW4gYXQgY2VydGFpbiBvZmZzZXQuIFRoaXMgaXMKICAvLy8gdXNlZCBpbiBbTm9kZUlkXS4KICBpdGVyYXRvciwKCiAgLy8vIElkIHVzZWQgZm9yIHRoZSBpbXBsaWNpdCBjYWxsIHRvIGBJdGVyYXRvci5jdXJyZW50YCBpbiBhIGZvci1pbiBhdCBjZXJ0YWluCiAgLy8vIG9mZnNldC4gVGhpcyBpcyB1c2VkIGluIFtOb2RlSWRdLgogIGN1cnJlbnQsCgogIC8vLyBJZCB1c2VkIGZvciB0aGUgaW1wbGljaXQgY2FsbCB0byBgSXRlcmF0b3IubW92ZU5leHRgIGluIGEgZm9yLWluIGF0CiAgLy8vIGNlcnRhaW4gb2Zmc2V0LiBUaGlzIGlzIHVzZWQgaW4gW05vZGVJZF0uCiAgbW92ZU5leHQsCgogIC8vLyBJZCB1c2VkIGZvciB0aGUgc3RhdGVtZW50IGF0IGNlcnRhaW4gb2Zmc2V0LiBUaGlzIGlzIHVzZWQgaW4gW05vZGVJZF0uCiAgc3RtdCwKCiAgLy8vIElkIHVzZWQgZm9yIHRoZSBlcnJvciByZXBvcnRlZCBhdCBjZXJ0YWluIG9mZnNldC4gVGhpcyBpcyB1c2VkIGluCiAgLy8vIFtOb2RlSWRdLgogIGVycm9yLAp9CgovLy8gSWQgZm9yIGEgY29kZSBwb2ludCBvciBlbGVtZW50LgphYnN0cmFjdCBjbGFzcyBJZCB7CiAgSWRLaW5kIGdldCBraW5kOwoKICAvLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGlkIHJlZmVycyB0byBhbiBlbGVtZW50IGRlZmluZWQgb3V0c2lkZSBvZiB0aGUgdGVzdAogIC8vLyBjYXNlIGl0c2VsZiAoZS5nLiBzb21lIHRlc3RzIG1heSBuZWVkIHRvIHJlZmVyIHRvIHByb3BlcnRpZXMgb2YgZWxlbWVudHMKICAvLy8gaW4gYGRhcnQ6Y29yZWApLgogIGJvb2wgZ2V0IGlzR2xvYmFsOwoKICAvLy8gRGlzcGxheSBuYW1lIGZvciB0aGlzIGlkLgogIFN0cmluZyBnZXQgZGVzY3JpcHRvcjsKfQoKY2xhc3MgSWRWYWx1ZSB7CiAgZmluYWwgSWQgaWQ7CiAgZmluYWwgU3RyaW5nIHZhbHVlOwoKICBjb25zdCBJZFZhbHVlKHRoaXMuaWQsIHRoaXMudmFsdWUpOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGlkLmhhc2hDb2RlICogMTMgKyB2YWx1ZS5oYXNoQ29kZSAqIDE3OwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIElkVmFsdWUpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBpZCA9PSBvdGhlci5pZCAmJiB2YWx1ZSA9PSBvdGhlci52YWx1ZTsKICB9CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+IGlkVG9TdHJpbmcoaWQsIHZhbHVlKTsKCiAgc3RhdGljIFN0cmluZyBpZFRvU3RyaW5nKElkIGlkLCBTdHJpbmcgdmFsdWUpIHsKICAgIHN3aXRjaCAoaWQua2luZCkgewogICAgICBjYXNlIElkS2luZC5tZW1iZXI6CiAgICAgICAgTWVtYmVySWQgZWxlbWVudElkID0gaWQ7CiAgICAgICAgcmV0dXJuICckbWVtYmVyUHJlZml4JHtlbGVtZW50SWQubmFtZX06JHZhbHVlJzsKICAgICAgY2FzZSBJZEtpbmQuY2xzOgogICAgICAgIENsYXNzSWQgY2xhc3NJZCA9IGlkOwogICAgICAgIHJldHVybiAnJGNsYXNzUHJlZml4JHtjbGFzc0lkLm5hbWV9OiR2YWx1ZSc7CiAgICAgIGNhc2UgSWRLaW5kLmxpYnJhcnk6CiAgICAgICAgcmV0dXJuICckbGlicmFyeVByZWZpeCR2YWx1ZSc7CiAgICAgIGNhc2UgSWRLaW5kLm5vZGU6CiAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgICBjYXNlIElkS2luZC5pbnZva2U6CiAgICAgICAgcmV0dXJuICckaW52b2tlUHJlZml4JHZhbHVlJzsKICAgICAgY2FzZSBJZEtpbmQudXBkYXRlOgogICAgICAgIHJldHVybiAnJHVwZGF0ZVByZWZpeCR2YWx1ZSc7CiAgICAgIGNhc2UgSWRLaW5kLml0ZXJhdG9yOgogICAgICAgIHJldHVybiAnJGl0ZXJhdG9yUHJlZml4JHZhbHVlJzsKICAgICAgY2FzZSBJZEtpbmQuY3VycmVudDoKICAgICAgICByZXR1cm4gJyRjdXJyZW50UHJlZml4JHZhbHVlJzsKICAgICAgY2FzZSBJZEtpbmQubW92ZU5leHQ6CiAgICAgICAgcmV0dXJuICckbW92ZU5leHRQcmVmaXgkdmFsdWUnOwogICAgICBjYXNlIElkS2luZC5zdG10OgogICAgICAgIHJldHVybiAnJHN0bXRQcmVmaXgkdmFsdWUnOwogICAgICBjYXNlIElkS2luZC5lcnJvcjoKICAgICAgICByZXR1cm4gJyRlcnJvclByZWZpeCR2YWx1ZSc7CiAgICB9CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiVW5leHBlY3RlZCBpZCBraW5kOiAke2lkLmtpbmR9Iik7CiAgfQoKICBzdGF0aWMgY29uc3QgU3RyaW5nIGdsb2JhbFByZWZpeCA9ICJnbG9iYWwjIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIG1lbWJlclByZWZpeCA9ICJtZW1iZXI6ICI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBjbGFzc1ByZWZpeCA9ICJjbGFzczogIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGxpYnJhcnlQcmVmaXggPSAibGlicmFyeTogIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGludm9rZVByZWZpeCA9ICJpbnZva2U6ICI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyB1cGRhdGVQcmVmaXggPSAidXBkYXRlOiAiOwogIHN0YXRpYyBjb25zdCBTdHJpbmcgaXRlcmF0b3JQcmVmaXggPSAiaXRlcmF0b3I6ICI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBjdXJyZW50UHJlZml4ID0gImN1cnJlbnQ6ICI7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBtb3ZlTmV4dFByZWZpeCA9ICJtb3ZlTmV4dDogIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIHN0bXRQcmVmaXggPSAic3RtdDogIjsKICBzdGF0aWMgY29uc3QgU3RyaW5nIGVycm9yUHJlZml4ID0gImVycm9yOiAiOwoKICBzdGF0aWMgSWRWYWx1ZSBkZWNvZGUoVXJpIHNvdXJjZVVyaSwgaW50IG9mZnNldCwgU3RyaW5nIHRleHQpIHsKICAgIElkIGlkOwogICAgU3RyaW5nIGV4cGVjdGVkOwogICAgaWYgKHRleHQuc3RhcnRzV2l0aChtZW1iZXJQcmVmaXgpKSB7CiAgICAgIHRleHQgPSB0ZXh0LnN1YnN0cmluZyhtZW1iZXJQcmVmaXgubGVuZ3RoKTsKICAgICAgaW50IGNvbG9uUG9zID0gdGV4dC5pbmRleE9mKCc6Jyk7CiAgICAgIGlmIChjb2xvblBvcyA9PSAtMSkgdGhyb3cgIkludmFsaWQgbWVtYmVyIGlkOiAnJHRleHQnIjsKICAgICAgU3RyaW5nIG5hbWUgPSB0ZXh0LnN1YnN0cmluZygwLCBjb2xvblBvcyk7CiAgICAgIGJvb2wgaXNHbG9iYWwgPSBuYW1lLnN0YXJ0c1dpdGgoZ2xvYmFsUHJlZml4KTsKICAgICAgaWYgKGlzR2xvYmFsKSB7CiAgICAgICAgbmFtZSA9IG5hbWUuc3Vic3RyaW5nKGdsb2JhbFByZWZpeC5sZW5ndGgpOwogICAgICB9CiAgICAgIGlkID0gbmV3IE1lbWJlcklkKG5hbWUsIGlzR2xvYmFsOiBpc0dsb2JhbCk7CiAgICAgIGV4cGVjdGVkID0gdGV4dC5zdWJzdHJpbmcoY29sb25Qb3MgKyAxKTsKICAgIH0gZWxzZSBpZiAodGV4dC5zdGFydHNXaXRoKGNsYXNzUHJlZml4KSkgewogICAgICB0ZXh0ID0gdGV4dC5zdWJzdHJpbmcoY2xhc3NQcmVmaXgubGVuZ3RoKTsKICAgICAgaW50IGNvbG9uUG9zID0gdGV4dC5pbmRleE9mKCc6Jyk7CiAgICAgIGlmIChjb2xvblBvcyA9PSAtMSkgdGhyb3cgIkludmFsaWQgY2xhc3MgaWQ6ICckdGV4dCciOwogICAgICBTdHJpbmcgbmFtZSA9IHRleHQuc3Vic3RyaW5nKDAsIGNvbG9uUG9zKTsKICAgICAgYm9vbCBpc0dsb2JhbCA9IG5hbWUuc3RhcnRzV2l0aChnbG9iYWxQcmVmaXgpOwogICAgICBpZiAoaXNHbG9iYWwpIHsKICAgICAgICBuYW1lID0gbmFtZS5zdWJzdHJpbmcoZ2xvYmFsUHJlZml4Lmxlbmd0aCk7CiAgICAgIH0KICAgICAgaWQgPSBuZXcgQ2xhc3NJZChuYW1lLCBpc0dsb2JhbDogaXNHbG9iYWwpOwogICAgICBleHBlY3RlZCA9IHRleHQuc3Vic3RyaW5nKGNvbG9uUG9zICsgMSk7CiAgICB9IGVsc2UgaWYgKHRleHQuc3RhcnRzV2l0aChsaWJyYXJ5UHJlZml4KSkgewogICAgICBpZCA9IG5ldyBMaWJyYXJ5SWQoc291cmNlVXJpKTsKICAgICAgZXhwZWN0ZWQgPSB0ZXh0LnN1YnN0cmluZyhsaWJyYXJ5UHJlZml4Lmxlbmd0aCk7CiAgICB9IGVsc2UgaWYgKHRleHQuc3RhcnRzV2l0aChpbnZva2VQcmVmaXgpKSB7CiAgICAgIGlkID0gbmV3IE5vZGVJZChvZmZzZXQsIElkS2luZC5pbnZva2UpOwogICAgICBleHBlY3RlZCA9IHRleHQuc3Vic3RyaW5nKGludm9rZVByZWZpeC5sZW5ndGgpOwogICAgfSBlbHNlIGlmICh0ZXh0LnN0YXJ0c1dpdGgodXBkYXRlUHJlZml4KSkgewogICAgICBpZCA9IG5ldyBOb2RlSWQob2Zmc2V0LCBJZEtpbmQudXBkYXRlKTsKICAgICAgZXhwZWN0ZWQgPSB0ZXh0LnN1YnN0cmluZyh1cGRhdGVQcmVmaXgubGVuZ3RoKTsKICAgIH0gZWxzZSBpZiAodGV4dC5zdGFydHNXaXRoKGl0ZXJhdG9yUHJlZml4KSkgewogICAgICBpZCA9IG5ldyBOb2RlSWQob2Zmc2V0LCBJZEtpbmQuaXRlcmF0b3IpOwogICAgICBleHBlY3RlZCA9IHRleHQuc3Vic3RyaW5nKGl0ZXJhdG9yUHJlZml4Lmxlbmd0aCk7CiAgICB9IGVsc2UgaWYgKHRleHQuc3RhcnRzV2l0aChjdXJyZW50UHJlZml4KSkgewogICAgICBpZCA9IG5ldyBOb2RlSWQob2Zmc2V0LCBJZEtpbmQuY3VycmVudCk7CiAgICAgIGV4cGVjdGVkID0gdGV4dC5zdWJzdHJpbmcoY3VycmVudFByZWZpeC5sZW5ndGgpOwogICAgfSBlbHNlIGlmICh0ZXh0LnN0YXJ0c1dpdGgobW92ZU5leHRQcmVmaXgpKSB7CiAgICAgIGlkID0gbmV3IE5vZGVJZChvZmZzZXQsIElkS2luZC5tb3ZlTmV4dCk7CiAgICAgIGV4cGVjdGVkID0gdGV4dC5zdWJzdHJpbmcobW92ZU5leHRQcmVmaXgubGVuZ3RoKTsKICAgIH0gZWxzZSBpZiAodGV4dC5zdGFydHNXaXRoKHN0bXRQcmVmaXgpKSB7CiAgICAgIGlkID0gbmV3IE5vZGVJZChvZmZzZXQsIElkS2luZC5zdG10KTsKICAgICAgZXhwZWN0ZWQgPSB0ZXh0LnN1YnN0cmluZyhzdG10UHJlZml4Lmxlbmd0aCk7CiAgICB9IGVsc2UgaWYgKHRleHQuc3RhcnRzV2l0aChlcnJvclByZWZpeCkpIHsKICAgICAgaWQgPSBuZXcgTm9kZUlkKG9mZnNldCwgSWRLaW5kLmVycm9yKTsKICAgICAgZXhwZWN0ZWQgPSB0ZXh0LnN1YnN0cmluZyhlcnJvclByZWZpeC5sZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgaWQgPSBuZXcgTm9kZUlkKG9mZnNldCwgSWRLaW5kLm5vZGUpOwogICAgICBleHBlY3RlZCA9IHRleHQ7CiAgICB9CiAgICAvLyBSZW1vdmUgbmV3bGluZXMuCiAgICBleHBlY3RlZCA9IGV4cGVjdGVkLnJlcGxhY2VBbGwobmV3IFJlZ0V4cChyJ1xzKihcblxzKikrXHMqJyksICcnKTsKICAgIHJldHVybiBuZXcgSWRWYWx1ZShpZCwgZXhwZWN0ZWQpOwogIH0KfQoKLy8vIElkIGZvciBhbiBtZW1iZXIgZWxlbWVudC4KY2xhc3MgTWVtYmVySWQgaW1wbGVtZW50cyBJZCB7CiAgZmluYWwgU3RyaW5nIGNsYXNzTmFtZTsKICBmaW5hbCBTdHJpbmcgbWVtYmVyTmFtZTsKICBAb3ZlcnJpZGUKICBmaW5hbCBib29sIGlzR2xvYmFsOwoKICBmYWN0b3J5IE1lbWJlcklkKFN0cmluZyB0ZXh0LCB7Ym9vbCBpc0dsb2JhbDogZmFsc2V9KSB7CiAgICBpbnQgZG90UG9zID0gdGV4dC5pbmRleE9mKCcuJyk7CiAgICBpZiAoZG90UG9zICE9IC0xKSB7CiAgICAgIHJldHVybiBuZXcgTWVtYmVySWQuaW50ZXJuYWwodGV4dC5zdWJzdHJpbmcoZG90UG9zICsgMSksCiAgICAgICAgICBjbGFzc05hbWU6IHRleHQuc3Vic3RyaW5nKDAsIGRvdFBvcyksIGlzR2xvYmFsOiBpc0dsb2JhbCk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbmV3IE1lbWJlcklkLmludGVybmFsKHRleHQsIGlzR2xvYmFsOiBpc0dsb2JhbCk7CiAgICB9CiAgfQoKICBNZW1iZXJJZC5pbnRlcm5hbCh0aGlzLm1lbWJlck5hbWUsIHt0aGlzLmNsYXNzTmFtZSwgdGhpcy5pc0dsb2JhbDogZmFsc2V9KTsKCiAgQG92ZXJyaWRlCiAgaW50IGdldCBoYXNoQ29kZSA9PiBjbGFzc05hbWUuaGFzaENvZGUgKiAxMyArIG1lbWJlck5hbWUuaGFzaENvZGUgKiAxNzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBNZW1iZXJJZCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIGNsYXNzTmFtZSA9PSBvdGhlci5jbGFzc05hbWUgJiYgbWVtYmVyTmFtZSA9PSBvdGhlci5tZW1iZXJOYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAgSWRLaW5kIGdldCBraW5kID0+IElkS2luZC5tZW1iZXI7CgogIFN0cmluZyBnZXQgbmFtZSA9PiBjbGFzc05hbWUgIT0gbnVsbCA/ICckY2xhc3NOYW1lLiRtZW1iZXJOYW1lJyA6IG1lbWJlck5hbWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZGVzY3JpcHRvciA9PiAnbWVtYmVyICRuYW1lJzsKCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ21lbWJlcjokbmFtZSc7Cn0KCi8vLyBJZCBmb3IgYSBjbGFzcy4KY2xhc3MgQ2xhc3NJZCBpbXBsZW1lbnRzIElkIHsKICBmaW5hbCBTdHJpbmcgY2xhc3NOYW1lOwogIEBvdmVycmlkZQogIGZpbmFsIGJvb2wgaXNHbG9iYWw7CgogIENsYXNzSWQodGhpcy5jbGFzc05hbWUsIHt0aGlzLmlzR2xvYmFsOiBmYWxzZX0pOwoKICBAb3ZlcnJpZGUKICBpbnQgZ2V0IGhhc2hDb2RlID0+IGNsYXNzTmFtZS5oYXNoQ29kZSAqIDEzOwoKICBAb3ZlcnJpZGUKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIG90aGVyKSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgaXMhIENsYXNzSWQpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBjbGFzc05hbWUgPT0gb3RoZXIuY2xhc3NOYW1lOwogIH0KCiAgQG92ZXJyaWRlCiAgSWRLaW5kIGdldCBraW5kID0+IElkS2luZC5jbHM7CgogIFN0cmluZyBnZXQgbmFtZSA9PiBjbGFzc05hbWU7CgogIEBvdmVycmlkZQogIFN0cmluZyBnZXQgZGVzY3JpcHRvciA9PiAnY2xhc3MgJG5hbWUnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnY2xhc3M6JG5hbWUnOwp9CgovLy8gSWQgZm9yIGEgbGlicmFyeS4KY2xhc3MgTGlicmFyeUlkIGltcGxlbWVudHMgSWQgewogIGZpbmFsIFVyaSB1cmk7CgogIExpYnJhcnlJZCh0aGlzLnVyaSk7CgogIC8vIFRPRE8oam9obm5pd2ludGhlcik6IFN1cHBvcnQgZ2xvYmFsIGxpYnJhcnkgYW5ub3RhdGlvbnMuCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNHbG9iYWwgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdXJpLmhhc2hDb2RlICogMTM7CgogIEBvdmVycmlkZQogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChpZGVudGljYWwodGhpcywgb3RoZXIpKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciBpcyEgTGlicmFyeUlkKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdXJpID09IG90aGVyLnVyaTsKICB9CgogIEBvdmVycmlkZQogIElkS2luZCBnZXQga2luZCA9PiBJZEtpbmQubGlicmFyeTsKCiAgU3RyaW5nIGdldCBuYW1lID0+IHVyaS50b1N0cmluZygpOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGRlc2NyaXB0b3IgPT4gJ2xpYnJhcnkgJG5hbWUnOwoKICBAb3ZlcnJpZGUKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnbGlicmFyeTokbmFtZSc7Cn0KCi8vLyBJZCBmb3IgYSBjb2RlIHBvaW50IGRlZmluZWQgYnkgYSBraW5kIGFuZCBhIGNvZGUgb2Zmc2V0LgpjbGFzcyBOb2RlSWQgaW1wbGVtZW50cyBJZCB7CiAgZmluYWwgaW50IHZhbHVlOwogIEBvdmVycmlkZQogIGZpbmFsIElkS2luZCBraW5kOwoKICBjb25zdCBOb2RlSWQodGhpcy52YWx1ZSwgdGhpcy5raW5kKTsKCiAgQG92ZXJyaWRlCiAgYm9vbCBnZXQgaXNHbG9iYWwgPT4gZmFsc2U7CgogIEBvdmVycmlkZQogIGludCBnZXQgaGFzaENvZGUgPT4gdmFsdWUuaGFzaENvZGUgKiAxMyArIGtpbmQuaGFzaENvZGUgKiAxNzsKCiAgQG92ZXJyaWRlCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyIGlzISBOb2RlSWQpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB2YWx1ZSA9PSBvdGhlci52YWx1ZSAmJiBraW5kID09IG90aGVyLmtpbmQ7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZ2V0IGRlc2NyaXB0b3IgPT4gJ29mZnNldCAkdmFsdWUgKCRraW5kKSc7CgogIEBvdmVycmlkZQogIFN0cmluZyB0b1N0cmluZygpID0+ICcka2luZDokdmFsdWUnOwp9CgpjbGFzcyBBY3R1YWxEYXRhPFQ+IHsKICBmaW5hbCBJZCBpZDsKICBmaW5hbCBUIHZhbHVlOwogIGZpbmFsIFVyaSB1cmk7CiAgZmluYWwgaW50IF9vZmZzZXQ7CiAgZmluYWwgT2JqZWN0IG9iamVjdDsKCiAgQWN0dWFsRGF0YSh0aGlzLmlkLCB0aGlzLnZhbHVlLCB0aGlzLnVyaSwgdGhpcy5fb2Zmc2V0LCB0aGlzLm9iamVjdCk7CgogIGludCBnZXQgb2Zmc2V0IHsKICAgIGlmIChpZCBpcyBOb2RlSWQpIHsKICAgICAgTm9kZUlkIG5vZGVJZCA9IGlkOwogICAgICByZXR1cm4gbm9kZUlkLnZhbHVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9vZmZzZXQ7CiAgICB9CiAgfQoKICBTdHJpbmcgZ2V0IG9iamVjdFRleHQgewogICAgcmV0dXJuICdvYmplY3QgYCR7JyRvYmplY3QnLnJlcGxhY2VBbGwoJ1xuJywgJycpfWAgKCR7b2JqZWN0LnJ1bnRpbWVUeXBlfSknOwogIH0KCiAgQG92ZXJyaWRlCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0FjdHVhbERhdGEoaWQ9JGlkLHZhbHVlPSR2YWx1ZSx1cmk9JHVyaSwnCiAgICAgICdvZmZzZXQ9JG9mZnNldCxvYmplY3Q9JG9iamVjdFRleHQpJzsKfQoKYWJzdHJhY3QgY2xhc3MgRGF0YVJlZ2lzdHJ5PFQ+IHsKICBNYXA8SWQsIEFjdHVhbERhdGE8VD4+IGdldCBhY3R1YWxNYXA7CgogIC8vLyBSZWdpc3RlcnMgW3ZhbHVlXSB3aXRoIFtpZF0gaW4gW2FjdHVhbE1hcF0uCiAgLy8vCiAgLy8vIENoZWNrcyBmb3IgZHVwbGljYXRlIGRhdGEgZm9yIFtpZF0uCiAgdm9pZCByZWdpc3RlclZhbHVlKFVyaSB1cmksIGludCBvZmZzZXQsIElkIGlkLCBUIHZhbHVlLCBPYmplY3Qgb2JqZWN0KSB7CiAgICBpZiAoYWN0dWFsTWFwLmNvbnRhaW5zS2V5KGlkKSkgewogICAgICBBY3R1YWxEYXRhPFQ+IGV4aXN0aW5nRGF0YSA9IGFjdHVhbE1hcFtpZF07CiAgICAgIHJlcG9ydCh1cmksIG9mZnNldCwgIkR1cGxpY2F0ZSBpZCAke2lkfSwgdmFsdWU9JHZhbHVlLCBvYmplY3Q9JG9iamVjdCIpOwogICAgICByZXBvcnQoCiAgICAgICAgICB1cmksCiAgICAgICAgICBvZmZzZXQsCiAgICAgICAgICAiRHVwbGljYXRlIGlkICR7aWR9LCB2YWx1ZT0ke2V4aXN0aW5nRGF0YS52YWx1ZX0sICIKICAgICAgICAgICJvYmplY3Q9JHtleGlzdGluZ0RhdGEub2JqZWN0fSIpOwogICAgICBmYWlsKCJEdXBsaWNhdGUgaWQgJGlkLiIpOwogICAgfQogICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgYWN0dWFsTWFwW2lkXSA9IG5ldyBBY3R1YWxEYXRhPFQ+KGlkLCB2YWx1ZSwgdXJpLCBvZmZzZXQsIG9iamVjdCk7CiAgICB9CiAgfQoKICAvLy8gQ2FsbGVkIHRvIHJlcG9ydCBkdXBsaWNhdGUgZXJyb3JzLgogIHZvaWQgcmVwb3J0KFVyaSB1cmksIGludCBvZmZzZXQsIFN0cmluZyBtZXNzYWdlKTsKCiAgLy8vIENhbGxlZCB0byByYWlzZSBhbiBleGNlcHRpb24gb24gZHVwbGljYXRlIGVycm9ycy4KICB2b2lkIGZhaWwoU3RyaW5nIG1lc3NhZ2UpOwp9CoFtAE5OPAEOSgoBNgcBOgsBUEwIAU0KAU0KAVEYDAFRKAsBSjAMAU0IAUgQCQIBJBQTAVBPFxUBIBkCARAPFgEmAQw+AQwcLSkzBAEMLgEyFxohOBceNRsnGBYaJhomHCgbJxwoGCQZJQZCBAEwMS8zMTE1MzUtLwFCCxUpMig+MTUWNAgzLy8xKD0xNRY0CDIvMSU3MC42MC42MjA4MS83MjA4Liw0Ly01DSwXBhhHJgQCAR4fGhsMFwE6JBg/RQ0+BgQBTgEMSgEMHC0qSwQBDCQBUAEMKwEMJwIBFB4aDBcBMwEMLwEMHC0pKQQBDCEBIAEMKgEMJgIBFiARARcBPgweAQwpAQwcLSsdBAEMJQElAQwsAQwoAgE9HRMMFQEnAQweAQxAAQwcLSg3BAEMNAEMJwIBFg8RERUXAUgBExgaGw0WBgQBGlEEAQxCLAIBISgBMgYqSyUyTw4PEj4sIQYZSQYEASk0ATgdAgElcGFja2FnZTpmcm9udF9lbmQvc3JjL3Rlc3RpbmcvaWQuZGFydDNzZGtyb290Oi90aGlyZF9wYXJ0eS9wa2cvY3J5cHRvL2xpYi9zcmMvZGlnZXN0LmRhcnSDti8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgppbXBvcnQgJ3BhY2thZ2U6Y29sbGVjdGlvbi9jb2xsZWN0aW9uLmRhcnQnOwppbXBvcnQgJ3BhY2thZ2U6Y29udmVydC9jb252ZXJ0LmRhcnQnOwoKLy8vIEEgbWVzc2FnZSBkaWdlc3QgYXMgY29tcHV0ZWQgYnkgYSBgSGFzaGAgb3IgYEhNQUNgIGZ1bmN0aW9uLgpjbGFzcyBEaWdlc3QgewogIC8vLyBUaGUgbWVzc2FnZSBkaWdlc3QgYXMgYW4gYXJyYXkgb2YgYnl0ZXMuCiAgZmluYWwgTGlzdDxpbnQ+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/PzouAw0DN0xKFkYzOyUDRTUDM0VQNBQDPkoDSgMWA00zA002A0pLJwNPTDoDTwsDgIBIWzkDFAQUATUYCRQfFx4VGA8BGSkbFBkgFB8ZGSETEgEKZGFydDphc3luYzJvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvYXN5bmMvZnV0dXJlX2ltcGwuZGFydMAAZ6cvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmFzeW5jOwoKLyoqIFRoZSBvblZhbHVlIGFuZCBvbkVycm9yIGhhbmRsZXJzIHJldHVybiBlaXRoZXIgYSB2YWx1ZSBvciBhIGZ1dHVyZSAqLwp0eXBlZGVmIEZ1dHVyZU9yPFQ+IF9GdXR1cmVPblZhbHVlPFMsIFQ+KFMgdmFsdWUpOwovKiogVGVzdCB1c2VkIGJ5IFtGdXR1cmUuY2F0Y2hFcnJvcl0gdG8gaGFuZGxlIHNraXAgc29tZSBlcnJvcnMuICovCnR5cGVkZWYgYm9vbCBfRnV0dXJlRXJyb3JUZXN0KE9iamVjdCBlcnJvcik7Ci8qKiBVc2VkIGJ5IFtXaGVuRnV0dXJlXS4gKi8KdHlwZWRlZiBkeW5hbWljIF9GdXR1cmVBY3Rpb24oKTsKCmFic3RyYWN0IGNsYXNzIF9Db21wbGV0ZXI8VD4gaW1wbGVtZW50cyBDb21wbGV0ZXI8VD4gewogIGZpbmFsIF9GdXR1cmU8VD4gZnV0dXJlID0gbmV3IF9GdXR1cmU8VD4oKTsKCiAgdm9pZCBjb21wbGV0ZShbRnV0dXJlT3I8VD4gdmFsdWVdKTsKCiAgdm9pZCBjb21wbGV0ZUVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIGVycm9yID0gX25vbk51bGxFcnJvcihlcnJvcik7CiAgICBpZiAoIWZ1dHVyZS5fbWF5Q29tcGxldGUpIHRocm93IG5ldyBTdGF0ZUVycm9yKCJGdXR1cmUgYWxyZWFkeSBjb21wbGV0ZWQiKTsKICAgIEFzeW5jRXJyb3IgcmVwbGFjZW1lbnQgPSBab25lLmN1cnJlbnQuZXJyb3JDYWxsYmFjayhlcnJvciwgc3RhY2tUcmFjZSk7CiAgICBpZiAocmVwbGFjZW1lbnQgIT0gbnVsbCkgewogICAgICBlcnJvciA9IF9ub25OdWxsRXJyb3IocmVwbGFjZW1lbnQuZXJyb3IpOwogICAgICBzdGFja1RyYWNlID0gcmVwbGFjZW1lbnQuc3RhY2tUcmFjZTsKICAgIH0KICAgIF9jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgX2NvbXBsZXRlRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpOwoKICAvLyBUaGUgZnV0dXJlJ3MgX2lzQ29tcGxldGUgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCBwZW5kaW5nIGNvbXBsZXRpb25zLgogIC8vIFdlIHRoZXJlZm9yZSB1c2UgX21heUNvbXBsZXRlLgogIGJvb2wgZ2V0IGlzQ29tcGxldGVkID0+ICFmdXR1cmUuX21heUNvbXBsZXRlOwp9CgpjbGFzcyBfQXN5bmNDb21wbGV0ZXI8VD4gZXh0ZW5kcyBfQ29tcGxldGVyPFQ+IHsKICB2b2lkIGNvbXBsZXRlKFtGdXR1cmVPcjxUPiB2YWx1ZV0pIHsKICAgIGlmICghZnV0dXJlLl9tYXlDb21wbGV0ZSkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkZ1dHVyZSBhbHJlYWR5IGNvbXBsZXRlZCIpOwogICAgZnV0dXJlLl9hc3luY0NvbXBsZXRlKHZhbHVlKTsKICB9CgogIHZvaWQgX2NvbXBsZXRlRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGZ1dHVyZS5fYXN5bmNDb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9Cn0KCmNsYXNzIF9TeW5jQ29tcGxldGVyPFQ+IGV4dGVuZHMgX0NvbXBsZXRlcjxUPiB7CiAgdm9pZCBjb21wbGV0ZShbRnV0dXJlT3I8VD4gdmFsdWVdKSB7CiAgICBpZiAoIWZ1dHVyZS5fbWF5Q29tcGxldGUpIHRocm93IG5ldyBTdGF0ZUVycm9yKCJGdXR1cmUgYWxyZWFkeSBjb21wbGV0ZWQiKTsKICAgIGZ1dHVyZS5fY29tcGxldGUodmFsdWUpOwogIH0KCiAgdm9pZCBfY29tcGxldGVFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgZnV0dXJlLl9jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9Cn0KCmNsYXNzIF9GdXR1cmVMaXN0ZW5lcjxTLCBUPiB7CiAgc3RhdGljIGNvbnN0IGludCBtYXNrVmFsdWUgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgbWFza0Vycm9yID0gMjsKICBzdGF0aWMgY29uc3QgaW50IG1hc2tUZXN0RXJyb3IgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgbWFza1doZW5jb21wbGV0ZSA9IDg7CiAgc3RhdGljIGNvbnN0IGludCBzdGF0ZUNoYWluID0gMDsKICBzdGF0aWMgY29uc3QgaW50IHN0YXRlVGhlbiA9IG1hc2tWYWx1ZTsKICBzdGF0aWMgY29uc3QgaW50IHN0YXRlVGhlbk9uZXJyb3IgPSBtYXNrVmFsdWUgfCBtYXNrRXJyb3I7CiAgc3RhdGljIGNvbnN0IGludCBzdGF0ZUNhdGNoZXJyb3IgPSBtYXNrRXJyb3I7CiAgc3RhdGljIGNvbnN0IGludCBzdGF0ZUNhdGNoZXJyb3JUZXN0ID0gbWFza0Vycm9yIHwgbWFza1Rlc3RFcnJvcjsKICBzdGF0aWMgY29uc3QgaW50IHN0YXRlV2hlbmNvbXBsZXRlID0gbWFza1doZW5jb21wbGV0ZTsKICAvLyBMaXN0ZW5lcnMgb24gdGhlIHNhbWUgZnV0dXJlIGFyZSBsaW5rZWQgdGhyb3VnaCB0aGlzIGxpbmsuCiAgX0Z1dHVyZUxpc3RlbmVyIF9uZXh0TGlzdGVuZXI7CiAgLy8gVGhlIGZ1dHVyZSB0byBjb21wbGV0ZSB3aGVuIHRoaXMgbGlzdGVuZXIgaXMgYWN0aXZhdGVkLgogIGZpbmFsIF9GdXR1cmU8VD4gcmVzdWx0OwogIC8vIFdoaWNoIGZpZWxkcyBtZWFucyB3aGF0LgogIGZpbmFsIGludCBzdGF0ZTsKICAvLyBVc2VkIGZvciB0aGVuL3doZW5Eb25lIGNhbGxiYWNrIGFuZCBlcnJvciB0ZXN0CiAgZmluYWwgRnVuY3Rpb24gY2FsbGJhY2s7CiAgLy8gVXNlZCBmb3IgZXJyb3IgY2FsbGJhY2tzLgogIGZpbmFsIEZ1bmN0aW9uIGVycm9yQ2FsbGJhY2s7CgogIF9GdXR1cmVMaXN0ZW5lci50aGVuKAogICAgICB0aGlzLnJlc3VsdCwgX0Z1dHVyZU9uVmFsdWU8UywgVD4gb25WYWx1ZSwgRnVuY3Rpb24gZXJyb3JDYWxsYmFjaykKICAgICAgOiBjYWxsYmFjayA9IG9uVmFsdWUsCiAgICAgICAgZXJyb3JDYWxsYmFjayA9IGVycm9yQ2FsbGJhY2ssCiAgICAgICAgc3RhdGUgPSAoZXJyb3JDYWxsYmFjayA9PSBudWxsKSA/IHN0YXRlVGhlbiA6IHN0YXRlVGhlbk9uZXJyb3I7CgogIF9GdXR1cmVMaXN0ZW5lci5jYXRjaEVycm9yKHRoaXMucmVzdWx0LCB0aGlzLmVycm9yQ2FsbGJhY2ssIHRoaXMuY2FsbGJhY2spCiAgICAgIDogc3RhdGUgPSAoY2FsbGJhY2sgPT0gbnVsbCkgPyBzdGF0ZUNhdGNoZXJyb3IgOiBzdGF0ZUNhdGNoZXJyb3JUZXN0OwoKICBfRnV0dXJlTGlzdGVuZXIud2hlbkNvbXBsZXRlKHRoaXMucmVzdWx0LCB0aGlzLmNhbGxiYWNrKQogICAgICA6IGVycm9yQ2FsbGJhY2sgPSBudWxsLAogICAgICAgIHN0YXRlID0gc3RhdGVXaGVuY29tcGxldGU7CgogIFpvbmUgZ2V0IF96b25lID0+IHJlc3VsdC5fem9uZTsKCiAgYm9vbCBnZXQgaGFuZGxlc1ZhbHVlID0+IChzdGF0ZSAmIG1hc2tWYWx1ZSAhPSAwKTsKICBib29sIGdldCBoYW5kbGVzRXJyb3IgPT4gKHN0YXRlICYgbWFza0Vycm9yICE9IDApOwogIGJvb2wgZ2V0IGhhc0Vycm9yVGVzdCA9PiAoc3RhdGUgPT0gc3RhdGVDYXRjaGVycm9yVGVzdCk7CiAgYm9vbCBnZXQgaGFuZGxlc0NvbXBsZXRlID0+IChzdGF0ZSA9PSBzdGF0ZVdoZW5jb21wbGV0ZSk7CgogIF9GdXR1cmVPblZhbHVlPFMsIFQ+IGdldCBfb25WYWx1ZSB7CiAgICBhc3NlcnQoaGFuZGxlc1ZhbHVlKTsKICAgIHJldHVybiBjYWxsYmFjazsKICB9CgogIEZ1bmN0aW9uIGdldCBfb25FcnJvciA9PiBlcnJvckNhbGxiYWNrOwogIF9GdXR1cmVFcnJvclRlc3QgZ2V0IF9lcnJvclRlc3QgewogICAgYXNzZXJ0KGhhc0Vycm9yVGVzdCk7CiAgICByZXR1cm4gY2FsbGJhY2s7CiAgfQoKICBfRnV0dXJlQWN0aW9uIGdldCBfd2hlbkNvbXBsZXRlQWN0aW9uIHsKICAgIGFzc2VydChoYW5kbGVzQ29tcGxldGUpOwogICAgcmV0dXJuIGNhbGxiYWNrOwogIH0KCiAgLy8vIFdoZXRoZXIgdGhpcyBsaXN0ZW5lciBoYXMgYW4gZXJyb3IgY2FsbGJhY2suCiAgLy8vCiAgLy8vIFRoaXMgZnVuY3Rpb24gbXVzdCBvbmx5IGJlIGNhbGxlZCBpZiB0aGUgbGlzdGVuZXIgW2hhbmRsZXNFcnJvcl0uCiAgYm9vbCBnZXQgaGFzRXJyb3JDYWxsYmFjayB7CiAgICBhc3NlcnQoaGFuZGxlc0Vycm9yKTsKICAgIHJldHVybiBfb25FcnJvciAhPSBudWxsOwogIH0KCiAgRnV0dXJlT3I8VD4gaGFuZGxlVmFsdWUoUyBzb3VyY2VSZXN1bHQpIHsKICAgIHJldHVybiBfem9uZS5ydW5VbmFyeTxGdXR1cmVPcjxUPiwgUz4oX29uVmFsdWUsIHNvdXJjZVJlc3VsdCk7CiAgfQoKICBib29sIG1hdGNoZXNFcnJvclRlc3QoQXN5bmNFcnJvciBhc3luY0Vycm9yKSB7CiAgICBpZiAoIWhhc0Vycm9yVGVzdCkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gX3pvbmUucnVuVW5hcnk8Ym9vbCwgT2JqZWN0PihfZXJyb3JUZXN0LCBhc3luY0Vycm9yLmVycm9yKTsKICB9CgogIEZ1dHVyZU9yPFQ+IGhhbmRsZUVycm9yKEFzeW5jRXJyb3IgYXN5bmNFcnJvcikgewogICAgYXNzZXJ0KGhhbmRsZXNFcnJvciAmJiBoYXNFcnJvckNhbGxiYWNrKTsKICAgIHZhciBlcnJvckNhbGxiYWNrID0gdGhpcy5lcnJvckNhbGxiYWNrOyAvLyBUbyBlbmFibGUgcHJvbW90aW9uLgogICAgLy8gSWYgdGhlIGVycm9yQ2FsbGJhY2sgcmV0dXJucyBzb21ldGhpbmcgd2hpY2ggaXMgbm90IGEgRnV0dXJlT3I8VD4sCiAgICAvLyB0aGlzIHJldHVybiBzdGF0ZW1lbnQgdGhyb3dzLCBhbmQgdGhlIGNhbGxlciBoYW5kbGVzIHRoZSBlcnJvci4KICAgIGlmIChlcnJvckNhbGxiYWNrIGlzIGR5bmFtaWMgRnVuY3Rpb24oT2JqZWN0LCBTdGFja1RyYWNlKSkgewogICAgICByZXR1cm4gX3pvbmUucnVuQmluYXJ5PGR5bmFtaWMsIE9iamVjdCwgU3RhY2tUcmFjZT4oCiAgICAgICAgICBlcnJvckNhbGxiYWNrLCBhc3luY0Vycm9yLmVycm9yLCBhc3luY0Vycm9yLnN0YWNrVHJhY2UpOwogICAgfSBlbHNlIHsKICAgICAgYXNzZXJ0KGVycm9yQ2FsbGJhY2sgaXMgZHluYW1pYyBGdW5jdGlvbihPYmplY3QpKTsKICAgICAgcmV0dXJuIF96b25lLnJ1blVuYXJ5PGR5bmFtaWMsIE9iamVjdD4oZXJyb3JDYWxsYmFjaywgYXN5bmNFcnJvci5lcnJvcik7CiAgICB9CiAgfQoKICBkeW5hbWljIGhhbmRsZVdoZW5Db21wbGV0ZSgpIHsKICAgIGFzc2VydCghaGFuZGxlc0Vycm9yKTsKICAgIHJldHVybiBfem9uZS5ydW4oX3doZW5Db21wbGV0ZUFjdGlvbik7CiAgfQp9CgpjbGFzcyBfRnV0dXJlPFQ+IGltcGxlbWVudHMgRnV0dXJlPFQ+IHsKICAvLy8gSW5pdGlhbCBzdGF0ZSwgd2FpdGluZyBmb3IgYSByZXN1bHQuIEluIHRoaXMgc3RhdGUsIHRoZQogIC8vLyBbcmVzdWx0T3JMaXN0ZW5lcnNdIGZpZWxkIGhvbGRzIGEgc2luZ2xlLWxpbmtlZCBsaXN0IG9mCiAgLy8vIFtfRnV0dXJlTGlzdGVuZXJdIGxpc3RlbmVycy4KICBzdGF0aWMgY29uc3QgaW50IF9zdGF0ZUluY29tcGxldGUgPSAwOwoKICAvLy8gUGVuZGluZyBjb21wbGV0aW9uLiBTZXQgd2hlbiBjb21wbGV0ZWQgdXNpbmcgW19hc3luY0NvbXBsZXRlXSBvcgogIC8vLyBbX2FzeW5jQ29tcGxldGVFcnJvcl0uIEl0IGlzIGFuIGVycm9yIHRvIHRyeSB0byBjb21wbGV0ZSBpdCBhZ2Fpbi4KICAvLy8gW3Jlc3VsdE9yTGlzdGVuZXJzXSBob2xkcyBsaXN0ZW5lcnMuCiAgc3RhdGljIGNvbnN0IGludCBfc3RhdGVQZW5kaW5nQ29tcGxldGUgPSAxOwoKICAvLy8gVGhlIGZ1dHVyZSBoYXMgYmVlbiBjaGFpbmVkIHRvIGFub3RoZXIgZnV0dXJlLiBUaGUgcmVzdWx0IG9mIHRoYXQKICAvLy8gb3RoZXIgZnV0dXJlIGJlY29tZXMgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1dHVyZSBhcyB3ZWxsLgogIC8vLyBbcmVzdWx0T3JMaXN0ZW5lcnNdIGNvbnRhaW5zIHRoZSBzb3VyY2UgZnV0dXJlLgogIHN0YXRpYyBjb25zdCBpbnQgX3N0YXRlQ2hhaW5lZCA9IDI7CgogIC8vLyBUaGUgZnV0dXJlIGhhcyBiZWVuIGNvbXBsZXRlZCB3aXRoIGEgdmFsdWUgcmVzdWx0LgogIHN0YXRpYyBjb25zdCBpbnQgX3N0YXRlVmFsdWUgPSA0OwoKICAvLy8gVGhlIGZ1dHVyZSBoYXMgYmVlbiBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvciByZXN1bHQuCiAgc3RhdGljIGNvbnN0IGludCBfc3RhdGVFcnJvciA9IDg7CgogIC8qKiBXaGV0aGVyIHRoZSBmdXR1cmUgaXMgY29tcGxldGUsIGFuZCBhcyB3aGF0LiAqLwogIGludCBfc3RhdGUgPSBfc3RhdGVJbmNvbXBsZXRlOwoKICAvKioKICAgKiBab25lIHRoYXQgdGhlIGZ1dHVyZSB3YXMgY29tcGxldGVkIGZyb20uCiAgICogVGhpcyBpcyB0aGUgem9uZSB0aGF0IGFuIGVycm9yIHJlc3VsdCBiZWxvbmdzIHRvLgogICAqCiAgICogVW50aWwgdGhlIGZ1dHVyZSBpcyBjb21wbGV0ZWQsIHRoZSBmaWVsZCBtYXkgaG9sZCB0aGUgem9uZSB0aGF0CiAgICogbGlzdGVuZXIgY2FsbGJhY2tzIHVzZWQgdG8gY3JlYXRlIHRoaXMgZnV0dXJlIHNob3VsZCBiZSBydW4gaW4uCiAgICovCiAgZmluYWwgWm9uZSBfem9uZTsKCiAgLyoqCiAgICogRWl0aGVyIHRoZSByZXN1bHQsIGEgbGlzdCBvZiBsaXN0ZW5lcnMgb3IgYW5vdGhlciBmdXR1cmUuCiAgICoKICAgKiBUaGUgcmVzdWx0IG9mIHRoZSBmdXR1cmUgaXMgZWl0aGVyIGEgdmFsdWUgb3IgYW4gZXJyb3IuCiAgICogQSByZXN1bHQgaXMgb25seSBzdG9yZWQgd2hlbiB0aGUgZnV0dXJlIGhhcyBjb21wbGV0ZWQuCiAgICoKICAgKiBUaGUgbGlzdGVuZXJzIGlzIGFuIGludGVybmFsbHkgbGlua2VkIGxpc3Qgb2YgW19GdXR1cmVMaXN0ZW5lcl1zLgogICAqIExpc3RlbmVycyBhcmUgb25seSByZW1lbWJlcmVkIHdoaWxlIHRoZSBmdXR1cmUgaXMgbm90IHlldCBjb21wbGV0ZSwKICAgKiBhbmQgaXQgaXMgbm90IGNoYWluZWQgdG8gYW5vdGhlciBmdXR1cmUuCiAgICoKICAgKiBUaGUgZnV0dXJlIGlzIGFub3RoZXIgZnV0dXJlIHRoYXQgaGlzIGZ1dHVyZSBpcyBjaGFpbmVkIHRvLiBUaGlzIGZ1dHVyZQogICAqIGlzIHdhaXRpbmcgZm9yIHRoZSBvdGhlciBmdXR1cmUgdG8gY29tcGxldGUsIGFuZCB3aGVuIGl0IGRvZXMsIHRoaXMgZnV0dXJlCiAgICogd2lsbCBjb21wbGV0ZSB3aXRoIHRoZSBzYW1lIHJlc3VsdC4KICAgKiBBbGwgbGlzdGVuZXJzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIG90aGVyIGZ1dHVyZS4KICAgKi8KICB2YXIgX3Jlc3VsdE9yTGlzdGVuZXJzOwoKICAvLyBUaGlzIGNvbnN0cnVjdG9yIGlzIHVzZWQgYnkgYXN5bmMvYXdhaXQuCiAgX0Z1dHVyZSgpIDogX3pvbmUgPSBab25lLmN1cnJlbnQ7CgogIF9GdXR1cmUuaW1tZWRpYXRlKEZ1dHVyZU9yPFQ+IHJlc3VsdCkgOiBfem9uZSA9IFpvbmUuY3VycmVudCB7CiAgICBfYXN5bmNDb21wbGV0ZShyZXN1bHQpOwogIH0KCiAgLyoqIENyZWF0ZXMgYSBmdXR1cmUgd2l0aCB0aGUgdmFsdWUgYW5kIHRoZSBzcGVjaWZpZWQgem9uZS4gKi8KICBfRnV0dXJlLnpvbmVWYWx1ZShUIHZhbHVlLCB0aGlzLl96b25lKSB7CiAgICBfc2V0VmFsdWUodmFsdWUpOwogIH0KCiAgX0Z1dHVyZS5pbW1lZGlhdGVFcnJvcih2YXIgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKQogICAgICA6IF96b25lID0gWm9uZS5jdXJyZW50IHsKICAgIF9hc3luY0NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgLyoqIENyZWF0ZXMgYSBmdXR1cmUgdGhhdCBpcyBhbHJlYWR5IGNvbXBsZXRlZCB3aXRoIHRoZSB2YWx1ZS4gKi8KICBfRnV0dXJlLnZhbHVlKFQgdmFsdWUpIDogdGhpcy56b25lVmFsdWUodmFsdWUsIFpvbmUuY3VycmVudCk7CgogIGJvb2wgZ2V0IF9tYXlDb21wbGV0ZSA9PiBfc3RhdGUgPT0gX3N0YXRlSW5jb21wbGV0ZTsKICBib29sIGdldCBfaXNQZW5kaW5nQ29tcGxldGUgPT4gX3N0YXRlID09IF9zdGF0ZVBlbmRpbmdDb21wbGV0ZTsKICBib29sIGdldCBfbWF5QWRkTGlzdGVuZXIgPT4gX3N0YXRlIDw9IF9zdGF0ZVBlbmRpbmdDb21wbGV0ZTsKICBib29sIGdldCBfaXNDaGFpbmVkID0+IF9zdGF0ZSA9PSBfc3RhdGVDaGFpbmVkOwogIGJvb2wgZ2V0IF9pc0NvbXBsZXRlID0+IF9zdGF0ZSA+PSBfc3RhdGVWYWx1ZTsKICBib29sIGdldCBfaGFzRXJyb3IgPT4gX3N0YXRlID09IF9zdGF0ZUVycm9yOwoKICB2b2lkIF9zZXRDaGFpbmVkKF9GdXR1cmUgc291cmNlKSB7CiAgICBhc3NlcnQoX21heUFkZExpc3RlbmVyKTsKICAgIF9zdGF0ZSA9IF9zdGF0ZUNoYWluZWQ7CiAgICBfcmVzdWx0T3JMaXN0ZW5lcnMgPSBzb3VyY2U7CiAgfQoKICBGdXR1cmU8Uj4gdGhlbjxSPihGdXR1cmVPcjxSPiBmKFQgdmFsdWUpLCB7RnVuY3Rpb24gb25FcnJvcn0pIHsKICAgIFpvbmUgY3VycmVudFpvbmUgPSBab25lLmN1cnJlbnQ7CiAgICBpZiAoIWlkZW50aWNhbChjdXJyZW50Wm9uZSwgX3Jvb3Rab25lKSkgewogICAgICBmID0gY3VycmVudFpvbmUucmVnaXN0ZXJVbmFyeUNhbGxiYWNrPEZ1dHVyZU9yPFI+LCBUPihmKTsKICAgICAgaWYgKG9uRXJyb3IgIT0gbnVsbCkgewogICAgICAgIC8vIEluIGNoZWNrZWQgbW9kZSwgdGhpcyBjaGVja3MgdGhhdCBvbkVycm9yIGlzIGFzc2lnbmFibGUgdG8gb25lIG9mOgogICAgICAgIC8vICAgZHluYW1pYyBGdW5jdGlvbihPYmplY3QpCiAgICAgICAgLy8gICBkeW5hbWljIEZ1bmN0aW9uKE9iamVjdCwgU3RhY2tUcmFjZSkKICAgICAgICBvbkVycm9yID0gX3JlZ2lzdGVyRXJyb3JIYW5kbGVyKG9uRXJyb3IsIGN1cnJlbnRab25lKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF90aGVuTm9ab25lUmVnaXN0cmF0aW9uPFI+KGYsIG9uRXJyb3IpOwogIH0KCiAgLy8gVGhpcyBtZXRob2QgaXMgdXNlZCBieSBhc3luYy9hd2FpdC4KICBGdXR1cmU8RT4gX3RoZW5Ob1pvbmVSZWdpc3RyYXRpb248RT4oCiAgICAgIEZ1dHVyZU9yPEU+IGYoVCB2YWx1ZSksIEZ1bmN0aW9uIG9uRXJyb3IpIHsKICAgIF9GdXR1cmU8RT4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8RT4oKTsKICAgIF9hZGRMaXN0ZW5lcihuZXcgX0Z1dHVyZUxpc3RlbmVyPFQsIEU+LnRoZW4ocmVzdWx0LCBmLCBvbkVycm9yKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRnV0dXJlPFQ+IGNhdGNoRXJyb3IoRnVuY3Rpb24gb25FcnJvciwge2Jvb2wgdGVzdChlcnJvcil9KSB7CiAgICBfRnV0dXJlPFQ+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBpZiAoIWlkZW50aWNhbChyZXN1bHQuX3pvbmUsIF9yb290Wm9uZSkpIHsKICAgICAgb25FcnJvciA9IF9yZWdpc3RlckVycm9ySGFuZGxlcihvbkVycm9yLCByZXN1bHQuX3pvbmUpOwogICAgICBpZiAodGVzdCAhPSBudWxsKSB0ZXN0ID0gcmVzdWx0Ll96b25lLnJlZ2lzdGVyVW5hcnlDYWxsYmFjayh0ZXN0KTsKICAgIH0KICAgIF9hZGRMaXN0ZW5lcihuZXcgX0Z1dHVyZUxpc3RlbmVyPFQsIFQ+LmNhdGNoRXJyb3IocmVzdWx0LCBvbkVycm9yLCB0ZXN0KSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRnV0dXJlPFQ+IHdoZW5Db21wbGV0ZShkeW5hbWljIGFjdGlvbigpKSB7CiAgICBfRnV0dXJlPFQ+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBpZiAoIWlkZW50aWNhbChyZXN1bHQuX3pvbmUsIF9yb290Wm9uZSkpIHsKICAgICAgYWN0aW9uID0gcmVzdWx0Ll96b25lLnJlZ2lzdGVyQ2FsbGJhY2s8ZHluYW1pYz4oYWN0aW9uKTsKICAgIH0KICAgIF9hZGRMaXN0ZW5lcihuZXcgX0Z1dHVyZUxpc3RlbmVyPFQsIFQ+LndoZW5Db21wbGV0ZShyZXN1bHQsIGFjdGlvbikpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmVhbTxUPiBhc1N0cmVhbSgpID0+IG5ldyBTdHJlYW08VD4uZnJvbUZ1dHVyZSh0aGlzKTsKCiAgdm9pZCBfc2V0UGVuZGluZ0NvbXBsZXRlKCkgewogICAgYXNzZXJ0KF9tYXlDb21wbGV0ZSk7CiAgICBfc3RhdGUgPSBfc3RhdGVQZW5kaW5nQ29tcGxldGU7CiAgfQoKICB2b2lkIF9jbGVhclBlbmRpbmdDb21wbGV0ZSgpIHsKICAgIGFzc2VydChfaXNQZW5kaW5nQ29tcGxldGUpOwogICAgX3N0YXRlID0gX3N0YXRlSW5jb21wbGV0ZTsKICB9CgogIEFzeW5jRXJyb3IgZ2V0IF9lcnJvciB7CiAgICBhc3NlcnQoX2hhc0Vycm9yKTsKICAgIHJldHVybiBfcmVzdWx0T3JMaXN0ZW5lcnM7CiAgfQoKICBfRnV0dXJlIGdldCBfY2hhaW5Tb3VyY2UgewogICAgYXNzZXJ0KF9pc0NoYWluZWQpOwogICAgcmV0dXJuIF9yZXN1bHRPckxpc3RlbmVyczsKICB9CgogIC8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgYXN5bmMvYXdhaXQuCiAgdm9pZCBfc2V0VmFsdWUoVCB2YWx1ZSkgewogICAgYXNzZXJ0KCFfaXNDb21wbGV0ZSk7IC8vIEJ1dCBtYXkgaGF2ZSBhIGNvbXBsZXRpb24gcGVuZGluZy4KICAgIF9zdGF0ZSA9IF9zdGF0ZVZhbHVlOwogICAgX3Jlc3VsdE9yTGlzdGVuZXJzID0gdmFsdWU7CiAgfQoKICB2b2lkIF9zZXRFcnJvck9iamVjdChBc3luY0Vycm9yIGVycm9yKSB7CiAgICBhc3NlcnQoIV9pc0NvbXBsZXRlKTsgLy8gQnV0IG1heSBoYXZlIGEgY29tcGxldGlvbiBwZW5kaW5nLgogICAgX3N0YXRlID0gX3N0YXRlRXJyb3I7CiAgICBfcmVzdWx0T3JMaXN0ZW5lcnMgPSBlcnJvcjsKICB9CgogIHZvaWQgX3NldEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBfc2V0RXJyb3JPYmplY3QobmV3IEFzeW5jRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpKTsKICB9CgogIC8vLyBDb3B5IHRoZSBjb21wbGV0aW9uIHJlc3VsdCBvZiBbc291cmNlXSBpbnRvIHRoaXMgZnV0dXJlLgogIC8vLwogIC8vLyBVc2VkIHdoZW4gYSBjaGFpbmVkIGZ1dHVyZSBub3RpY2VzIHRoYXQgaXRzIHNvdXJjZSBpcyBjb21wbGV0ZWQuCiAgdm9pZCBfY2xvbmVSZXN1bHQoX0Z1dHVyZSBzb3VyY2UpIHsKICAgIGFzc2VydCghX2lzQ29tcGxldGUpOwogICAgYXNzZXJ0KHNvdXJjZS5faXNDb21wbGV0ZSk7CiAgICBfc3RhdGUgPSBzb3VyY2UuX3N0YXRlOwogICAgX3Jlc3VsdE9yTGlzdGVuZXJzID0gc291cmNlLl9yZXN1bHRPckxpc3RlbmVyczsKICB9CgogIHZvaWQgX2FkZExpc3RlbmVyKF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lcikgewogICAgYXNzZXJ0KGxpc3RlbmVyLl9uZXh0TGlzdGVuZXIgPT0gbnVsbCk7CiAgICBpZiAoX21heUFkZExpc3RlbmVyKSB7CiAgICAgIGxpc3RlbmVyLl9uZXh0TGlzdGVuZXIgPSBfcmVzdWx0T3JMaXN0ZW5lcnM7CiAgICAgIF9yZXN1bHRPckxpc3RlbmVycyA9IGxpc3RlbmVyOwogICAgfSBlbHNlIHsKICAgICAgaWYgKF9pc0NoYWluZWQpIHsKICAgICAgICAvLyBEZWxlZ2F0ZSBsaXN0ZW5lcnMgdG8gY2hhaW5lZCBzb3VyY2UgZnV0dXJlLgogICAgICAgIC8vIElmIHRoZSBzb3VyY2UgaXMgY29tcGxldGUsIGluc3RlYWQgY29weSBpdHMgdmFsdWVzIGFuZAogICAgICAgIC8vIGRyb3AgdGhlIGNoYWluaW5nLgogICAgICAgIF9GdXR1cmUgc291cmNlID0gX2NoYWluU291cmNlOwogICAgICAgIGlmICghc291cmNlLl9pc0NvbXBsZXRlKSB7CiAgICAgICAgICBzb3VyY2UuX2FkZExpc3RlbmVyKGxpc3RlbmVyKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgX2Nsb25lUmVzdWx0KHNvdXJjZSk7CiAgICAgIH0KICAgICAgYXNzZXJ0KF9pc0NvbXBsZXRlKTsKICAgICAgLy8gSGFuZGxlIGxhdGUgbGlzdGVuZXJzIGFzeW5jaHJvbm91c2x5LgogICAgICBfem9uZS5zY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICAgICAgX3Byb3BhZ2F0ZVRvTGlzdGVuZXJzKHRoaXMsIGxpc3RlbmVyKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICB2b2lkIF9wcmVwZW5kTGlzdGVuZXJzKF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lcnMpIHsKICAgIGlmIChsaXN0ZW5lcnMgPT0gbnVsbCkgcmV0dXJuOwogICAgaWYgKF9tYXlBZGRMaXN0ZW5lcikgewogICAgICBfRnV0dXJlTGlzdGVuZXIgZXhpc3RpbmdMaXN0ZW5lcnMgPSBfcmVzdWx0T3JMaXN0ZW5lcnM7CiAgICAgIF9yZXN1bHRPckxpc3RlbmVycyA9IGxpc3RlbmVyczsKICAgICAgaWYgKGV4aXN0aW5nTGlzdGVuZXJzICE9IG51bGwpIHsKICAgICAgICBfRnV0dXJlTGlzdGVuZXIgY3Vyc29yID0gbGlzdGVuZXJzOwogICAgICAgIHdoaWxlIChjdXJzb3IuX25leHRMaXN0ZW5lciAhPSBudWxsKSB7CiAgICAgICAgICBjdXJzb3IgPSBjdXJzb3IuX25leHRMaXN0ZW5lcjsKICAgICAgICB9CiAgICAgICAgY3Vyc29yLl9uZXh0TGlzdGVuZXIgPSBleGlzdGluZ0xpc3RlbmVyczsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKF9pc0NoYWluZWQpIHsKICAgICAgICAvLyBEZWxlZ2F0ZSBsaXN0ZW5lcnMgdG8gY2hhaW5lZCBzb3VyY2UgZnV0dXJlLgogICAgICAgIC8vIElmIHRoZSBzb3VyY2UgaXMgY29tcGxldGUsIGluc3RlYWQgY29weSBpdHMgdmFsdWVzIGFuZAogICAgICAgIC8vIGRyb3AgdGhlIGNoYWluaW5nLgogICAgICAgIF9GdXR1cmUgc291cmNlID0gX2NoYWluU291cmNlOwogICAgICAgIGlmICghc291cmNlLl9pc0NvbXBsZXRlKSB7CiAgICAgICAgICBzb3VyY2UuX3ByZXBlbmRMaXN0ZW5lcnMobGlzdGVuZXJzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgX2Nsb25lUmVzdWx0KHNvdXJjZSk7CiAgICAgIH0KICAgICAgYXNzZXJ0KF9pc0NvbXBsZXRlKTsKICAgICAgbGlzdGVuZXJzID0gX3JldmVyc2VMaXN0ZW5lcnMobGlzdGVuZXJzKTsKICAgICAgX3pvbmUuc2NoZWR1bGVNaWNyb3Rhc2soKCkgewogICAgICAgIF9wcm9wYWdhdGVUb0xpc3RlbmVycyh0aGlzLCBsaXN0ZW5lcnMpOwogICAgICB9KTsKICAgIH0KICB9CgogIF9GdXR1cmVMaXN0ZW5lciBfcmVtb3ZlTGlzdGVuZXJzKCkgewogICAgLy8gUmV2ZXJzZSBsaXN0ZW5lcnMgYmVmb3JlIHJldHVybmluZyB0aGVtLCBzbyB0aGUgcmVzdWx0aW5nIGxpc3QgaXMgaW4KICAgIC8vIHN1YnNjcmlwdGlvbiBvcmRlci4KICAgIGFzc2VydCghX2lzQ29tcGxldGUpOwogICAgX0Z1dHVyZUxpc3RlbmVyIGN1cnJlbnQgPSBfcmVzdWx0T3JMaXN0ZW5lcnM7CiAgICBfcmVzdWx0T3JMaXN0ZW5lcnMgPSBudWxsOwogICAgcmV0dXJuIF9yZXZlcnNlTGlzdGVuZXJzKGN1cnJlbnQpOwogIH0KCiAgX0Z1dHVyZUxpc3RlbmVyIF9yZXZlcnNlTGlzdGVuZXJzKF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lcnMpIHsKICAgIF9GdXR1cmVMaXN0ZW5lciBwcmV2OwogICAgX0Z1dHVyZUxpc3RlbmVyIGN1cnJlbnQgPSBsaXN0ZW5lcnM7CiAgICB3aGlsZSAoY3VycmVudCAhPSBudWxsKSB7CiAgICAgIF9GdXR1cmVMaXN0ZW5lciBuZXh0ID0gY3VycmVudC5fbmV4dExpc3RlbmVyOwogICAgICBjdXJyZW50Ll9uZXh0TGlzdGVuZXIgPSBwcmV2OwogICAgICBwcmV2ID0gY3VycmVudDsKICAgICAgY3VycmVudCA9IG5leHQ7CiAgICB9CiAgICByZXR1cm4gcHJldjsKICB9CgogIC8vIFRha2UgdGhlIHZhbHVlICh3aGVuIGNvbXBsZXRlZCkgb2Ygc291cmNlIGFuZCBjb21wbGV0ZSB0YXJnZXQgd2l0aCB0aGF0CiAgLy8gdmFsdWUgKG9yIGVycm9yKS4gVGhpcyBmdW5jdGlvbiBjb3VsZCBjaGFpbiBhbGwgRnV0dXJlcywgYnV0IGlzIHNsb3dlcgogIC8vIGZvciBfRnV0dXJlIHRoYW4gX2NoYWluQ29yZUZ1dHVyZSwgc28geW91IG11c3QgdXNlIF9jaGFpbkNvcmVGdXR1cmUKICAvLyBpbiB0aGF0IGNhc2UuCiAgc3RhdGljIHZvaWQgX2NoYWluRm9yZWlnbkZ1dHVyZShGdXR1cmUgc291cmNlLCBfRnV0dXJlIHRhcmdldCkgewogICAgYXNzZXJ0KCF0YXJnZXQuX2lzQ29tcGxldGUpOwogICAgYXNzZXJ0KHNvdXJjZSBpcyEgX0Z1dHVyZSk7CgogICAgLy8gTWFyayB0aGUgdGFyZ2V0IGFzIGNoYWluZWQgKGFuZCBhcyBzdWNoIGhhbGYtY29tcGxldGVkKS4KICAgIHRhcmdldC5fc2V0UGVuZGluZ0NvbXBsZXRlKCk7CiAgICB0cnkgewogICAgICBzb3VyY2UudGhlbigodmFsdWUpIHsKICAgICAgICBhc3NlcnQodGFyZ2V0Ll9pc1BlbmRpbmdDb21wbGV0ZSk7CiAgICAgICAgLy8gVGhlICJ2YWx1ZSIgbWF5IGJlIGFub3RoZXIgZnV0dXJlIGlmIHRoZSBmb3JlaWduIGZ1dHVyZQogICAgICAgIC8vIGltcGxlbWVudGF0aW9uIGlzIG1pcy1iZWhhdmluZywKICAgICAgICAvLyBzbyB1c2UgX2NvbXBsZXRlIGluc3RlYWQgb2YgX2NvbXBsZXRlV2l0aFZhbHVlLgogICAgICAgIHRhcmdldC5fY2xlYXJQZW5kaW5nQ29tcGxldGUoKTsgLy8gQ2xlYXIgdGhpcyBmaXJzdCwgaXQncyBzZXQgYWdhaW4uCiAgICAgICAgdGFyZ2V0Ll9jb21wbGV0ZSh2YWx1ZSk7CiAgICAgIH0sCiAgICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogZXZlbnR1YWxseSB3ZSB3b3VsZCBsaWtlIHRvIG1ha2UgdGhpcyBub24tb3B0aW9uYWwKICAgICAgICAgIC8vIGFuZCBkZXBlbmRlbnQgb24gdGhlIGxpc3RlbmVycyBvZiB0aGUgdGFyZ2V0IGZ1dHVyZS4gSWYgbm9uZSBvZgogICAgICAgICAgLy8gdGhlIHRhcmdldCBmdXR1cmUncyBsaXN0ZW5lcnMgd2FudCB0byBoYXZlIHRoZSBzdGFjayB0cmFjZSB3ZSBkb24ndAogICAgICAgICAgLy8gbmVlZCBhIHRyYWNlLgogICAgICAgICAgb25FcnJvcjogKGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgICAgIGFzc2VydCh0YXJnZXQuX2lzUGVuZGluZ0NvbXBsZXRlKTsKICAgICAgICB0YXJnZXQuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICB9KTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgLy8gVGhpcyBvbmx5IGhhcHBlbnMgaWYgdGhlIGB0aGVuYCBjYWxsIHRocmV3IHN5bmNocm9ub3VzbHkgd2hlbiBnaXZlbgogICAgICAvLyB2YWxpZCBhcmd1bWVudHMuCiAgICAgIC8vIFRoYXQgcmVxdWlyZXMgYSBub24tY29uZm9ybWluZyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRnV0dXJlIGludGVyZmFjZSwKICAgICAgLy8gd2hpY2ggc2hvdWxkLCBob3BlZnVsbHksIG5ldmVyIGhhcHBlbi4KICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soKCkgewogICAgICAgIHRhcmdldC5fY29tcGxldGVFcnJvcihlLCBzKTsKICAgICAgfSk7CiAgICB9CiAgfQoKICAvLyBUYWtlIHRoZSB2YWx1ZSAod2hlbiBjb21wbGV0ZWQpIG9mIHNvdXJjZSBhbmQgY29tcGxldGUgdGFyZ2V0IHdpdGggdGhhdAogIC8vIHZhbHVlIChvciBlcnJvcikuIFRoaXMgZnVuY3Rpb24gZXhwZWN0cyB0aGF0IHNvdXJjZSBpcyBhIF9GdXR1cmUuCiAgc3RhdGljIHZvaWQgX2NoYWluQ29yZUZ1dHVyZShfRnV0dXJlIHNvdXJjZSwgX0Z1dHVyZSB0YXJnZXQpIHsKICAgIGFzc2VydCh0YXJnZXQuX21heUFkZExpc3RlbmVyKTsgLy8gTm90IGNvbXBsZXRlZCwgbm90IGFscmVhZHkgY2hhaW5lZC4KICAgIHdoaWxlIChzb3VyY2UuX2lzQ2hhaW5lZCkgewogICAgICBzb3VyY2UgPSBzb3VyY2UuX2NoYWluU291cmNlOwogICAgfQogICAgaWYgKHNvdXJjZS5faXNDb21wbGV0ZSkgewogICAgICBfRnV0dXJlTGlzdGVuZXIgbGlzdGVuZXJzID0gdGFyZ2V0Ll9yZW1vdmVMaXN0ZW5lcnMoKTsKICAgICAgdGFyZ2V0Ll9jbG9uZVJlc3VsdChzb3VyY2UpOwogICAgICBfcHJvcGFnYXRlVG9MaXN0ZW5lcnModGFyZ2V0LCBsaXN0ZW5lcnMpOwogICAgfSBlbHNlIHsKICAgICAgX0Z1dHVyZUxpc3RlbmVyIGxpc3RlbmVycyA9IHRhcmdldC5fcmVzdWx0T3JMaXN0ZW5lcnM7CiAgICAgIHRhcmdldC5fc2V0Q2hhaW5lZChzb3VyY2UpOwogICAgICBzb3VyY2UuX3ByZXBlbmRMaXN0ZW5lcnMobGlzdGVuZXJzKTsKICAgIH0KICB9CgogIHZvaWQgX2NvbXBsZXRlKEZ1dHVyZU9yPFQ+IHZhbHVlKSB7CiAgICBhc3NlcnQoIV9pc0NvbXBsZXRlKTsKICAgIGlmICh2YWx1ZSBpcyBGdXR1cmU8VD4pIHsKICAgICAgaWYgKHZhbHVlIGlzIF9GdXR1cmU8VD4pIHsKICAgICAgICBfY2hhaW5Db3JlRnV0dXJlKHZhbHVlLCB0aGlzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfY2hhaW5Gb3JlaWduRnV0dXJlKHZhbHVlLCB0aGlzKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgX0Z1dHVyZUxpc3RlbmVyIGxpc3RlbmVycyA9IF9yZW1vdmVMaXN0ZW5lcnMoKTsKICAgICAgX3NldFZhbHVlKHZhbHVlKTsKICAgICAgX3Byb3BhZ2F0ZVRvTGlzdGVuZXJzKHRoaXMsIGxpc3RlbmVycyk7CiAgICB9CiAgfQoKICB2b2lkIF9jb21wbGV0ZVdpdGhWYWx1ZShUIHZhbHVlKSB7CiAgICBhc3NlcnQoIV9pc0NvbXBsZXRlKTsKICAgIGFzc2VydCh2YWx1ZSBpcyEgRnV0dXJlPFQ+KTsKCiAgICBfRnV0dXJlTGlzdGVuZXIgbGlzdGVuZXJzID0gX3JlbW92ZUxpc3RlbmVycygpOwogICAgX3NldFZhbHVlKHZhbHVlKTsKICAgIF9wcm9wYWdhdGVUb0xpc3RlbmVycyh0aGlzLCBsaXN0ZW5lcnMpOwogIH0KCiAgdm9pZCBfY29tcGxldGVFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBhc3NlcnQoIV9pc0NvbXBsZXRlKTsKCiAgICBfRnV0dXJlTGlzdGVuZXIgbGlzdGVuZXJzID0gX3JlbW92ZUxpc3RlbmVycygpOwogICAgX3NldEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIF9wcm9wYWdhdGVUb0xpc3RlbmVycyh0aGlzLCBsaXN0ZW5lcnMpOwogIH0KCiAgdm9pZCBfYXN5bmNDb21wbGV0ZShGdXR1cmVPcjxUPiB2YWx1ZSkgewogICAgYXNzZXJ0KCFfaXNDb21wbGV0ZSk7CiAgICAvLyBUd28gY29ybmVyIGNhc2VzIGlmIHRoZSB2YWx1ZSBpcyBhIGZ1dHVyZToKICAgIC8vICAgMS4gdGhlIGZ1dHVyZSBpcyBhbHJlYWR5IGNvbXBsZXRlZCBhbmQgYW4gZXJyb3IuCiAgICAvLyAgIDIuIHRoZSBmdXR1cmUgaXMgbm90IHlldCBjb21wbGV0ZWQgYnV0IG1pZ2h0IGJlY29tZSBhbiBlcnJvci4KICAgIC8vIFRoZSBmaXJzdCBjYXNlIG1lYW5zIHRoYXQgd2UgbXVzdCBub3QgaW1tZWRpYXRlbHkgY29tcGxldGUgdGhlIEZ1dHVyZSwKICAgIC8vIGFzIG91ciBjb2RlIHdvdWxkIGltbWVkaWF0ZWx5IHN0YXJ0IHByb3BhZ2F0aW5nIHRoZSBlcnJvciB3aXRob3V0CiAgICAvLyBnaXZpbmcgdGhlIHRpbWUgdG8gaW5zdGFsbCBlcnJvci1oYW5kbGVycy4KICAgIC8vIEhvd2V2ZXIgdGhlIHNlY29uZCBjYXNlIHJlcXVpcmVzIHVzIHRvIGRlYWwgd2l0aCB0aGUgdmFsdWUgaW1tZWRpYXRlbHkuCiAgICAvLyBPdGhlcndpc2UgdGhlIHZhbHVlIGNvdWxkIGNvbXBsZXRlIHdpdGggYW4gZXJyb3IgYW5kIHJlcG9ydCBhbgogICAgLy8gdW5oYW5kbGVkIGVycm9yLCBldmVuIHRob3VnaCB3ZSBrbm93IHdlIGFyZSBhbHJlYWR5IGdvaW5nIHRvIGxpc3RlbiB0bwogICAgLy8gaXQuCgogICAgaWYgKHZhbHVlIGlzIEZ1dHVyZTxUPikgewogICAgICBfY2hhaW5GdXR1cmUodmFsdWUpOwogICAgICByZXR1cm47CiAgICB9CiAgICBfc2V0UGVuZGluZ0NvbXBsZXRlKCk7CiAgICBfem9uZS5zY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICAgIF9jb21wbGV0ZVdpdGhWYWx1ZSh2YWx1ZSk7CiAgICB9KTsKICB9CgogIHZvaWQgX2NoYWluRnV0dXJlKEZ1dHVyZTxUPiB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIF9GdXR1cmU8VD4pIHsKICAgICAgaWYgKHZhbHVlLl9oYXNFcnJvcikgewogICAgICAgIC8vIERlbGF5IGNvbXBsZXRpb24gdG8gYWxsb3cgdGhlIHVzZXIgdG8gcmVnaXN0ZXIgY2FsbGJhY2tzLgogICAgICAgIF9zZXRQZW5kaW5nQ29tcGxldGUoKTsKICAgICAgICBfem9uZS5zY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICAgICAgICBfY2hhaW5Db3JlRnV0dXJlKHZhbHVlLCB0aGlzKTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfY2hhaW5Db3JlRnV0dXJlKHZhbHVlLCB0aGlzKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBKdXN0IGxpc3RlbiBvbiB0aGUgZm9yZWlnbiBmdXR1cmUuIFRoaXMgZ3VhcmFudGVlcyBhbiBhc3luYyBkZWxheS4KICAgIF9jaGFpbkZvcmVpZ25GdXR1cmUodmFsdWUsIHRoaXMpOwogIH0KCiAgdm9pZCBfYXN5bmNDb21wbGV0ZUVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGFzc2VydCghX2lzQ29tcGxldGUpOwoKICAgIF9zZXRQZW5kaW5nQ29tcGxldGUoKTsKICAgIF96b25lLnNjaGVkdWxlTWljcm90YXNrKCgpIHsKICAgICAgX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgfSk7CiAgfQoKICAvKioKICAgKiBQcm9wYWdhdGVzIHRoZSB2YWx1ZS9lcnJvciBvZiBbc291cmNlXSB0byBpdHMgW2xpc3RlbmVyc10sIGV4ZWN1dGluZyB0aGUKICAgKiBsaXN0ZW5lcnMnIGNhbGxiYWNrcy4KICAgKi8KICBzdGF0aWMgdm9pZCBfcHJvcGFnYXRlVG9MaXN0ZW5lcnMoX0Z1dHVyZSBzb3VyY2UsIF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lcnMpIHsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGFzc2VydChzb3VyY2UuX2lzQ29tcGxldGUpOwogICAgICBib29sIGhhc0Vycm9yID0gc291cmNlLl9oYXNFcnJvcjsKICAgICAgaWYgKGxpc3RlbmVycyA9PSBudWxsKSB7CiAgICAgICAgaWYgKGhhc0Vycm9yKSB7CiAgICAgICAgICBBc3luY0Vycm9yIGFzeW5jRXJyb3IgPSBzb3VyY2UuX2Vycm9yOwogICAgICAgICAgc291cmNlLl96b25lCiAgICAgICAgICAgICAgLmhhbmRsZVVuY2F1Z2h0RXJyb3IoYXN5bmNFcnJvci5lcnJvciwgYXN5bmNFcnJvci5zdGFja1RyYWNlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIC8vIFVzdWFsbHkgZnV0dXJlcyBvbmx5IGhhdmUgb25lIGxpc3RlbmVyLiBJZiB0aGV5IGhhdmUgc2V2ZXJhbCwgd2UKICAgICAgLy8gY2FsbCBoYW5kbGUgdGhlbSBzZXBhcmF0ZWx5IGluIHJlY3Vyc2l2ZSBjYWxscywgY29udGludWluZwogICAgICAvLyBoZXJlIG9ubHkgd2hlbiB0aGVyZSBpcyBvbmx5IG9uZSBsaXN0ZW5lciBsZWZ0LgogICAgICB3aGlsZSAobGlzdGVuZXJzLl9uZXh0TGlzdGVuZXIgIT0gbnVsbCkgewogICAgICAgIF9GdXR1cmVMaXN0ZW5lciBsaXN0ZW5lciA9IGxpc3RlbmVyczsKICAgICAgICBsaXN0ZW5lcnMgPSBsaXN0ZW5lci5fbmV4dExpc3RlbmVyOwogICAgICAgIGxpc3RlbmVyLl9uZXh0TGlzdGVuZXIgPSBudWxsOwogICAgICAgIF9wcm9wYWdhdGVUb0xpc3RlbmVycyhzb3VyY2UsIGxpc3RlbmVyKTsKICAgICAgfQogICAgICBfRnV0dXJlTGlzdGVuZXIgbGlzdGVuZXIgPSBsaXN0ZW5lcnM7CiAgICAgIGZpbmFsIHNvdXJjZVJlc3VsdCA9IHNvdXJjZS5fcmVzdWx0T3JMaXN0ZW5lcnM7CiAgICAgIC8vIERvIHRoZSBhY3R1YWwgcHJvcGFnYXRpb24uCiAgICAgIC8vIFNldCBpbml0aWFsIHN0YXRlIG9mIGxpc3RlbmVySGFzRXJyb3IgYW5kIGxpc3RlbmVyVmFsdWVPckVycm9yLiBUaGVzZQogICAgICAvLyB2YXJpYWJsZXMgYXJlIHVwZGF0ZWQgd2l0aCB0aGUgb3V0Y29tZSBvZiBwb3RlbnRpYWwgY2FsbGJhY2tzLgogICAgICAvLyBOb24tZXJyb3IgcmVzdWx0cywgaW5jbHVkaW5nIGZ1dHVyZXMsIGFyZSBzdG9yZWQgaW4KICAgICAgLy8gbGlzdGVuZXJWYWx1ZU9yRXJyb3IgYW5kIGxpc3RlbmVySGFzRXJyb3IgaXMgc2V0IHRvIGZhbHNlLiBFcnJvcnMKICAgICAgLy8gYXJlIHN0b3JlZCBpbiBsaXN0ZW5lclZhbHVlT3JFcnJvciBhcyBhbiBbQXN5bmNFcnJvcl0gYW5kCiAgICAgIC8vIGxpc3RlbmVySGFzRXJyb3IgaXMgc2V0IHRvIHRydWUuCiAgICAgIGJvb2wgbGlzdGVuZXJIYXNFcnJvciA9IGhhc0Vycm9yOwogICAgICB2YXIgbGlzdGVuZXJWYWx1ZU9yRXJyb3IgPSBzb3VyY2VSZXN1bHQ7CgogICAgICAvLyBPbmx5IGlmIHdlIGVpdGhlciBoYXZlIGFuIGVycm9yIG9yIGNhbGxiYWNrcywgZ28gaW50byB0aGlzLCBzb21ld2hhdAogICAgICAvLyBleHBlbnNpdmUsIGJyYW5jaC4gSGVyZSB3ZSdsbCBlbnRlci9sZWF2ZSB0aGUgem9uZS4gTWFueSBmdXR1cmVzCiAgICAgIC8vIGRvbid0IGhhdmUgY2FsbGJhY2tzLCBzbyB0aGlzIGlzIGEgc2lnbmlmaWNhbnQgb3B0aW1pemF0aW9uLgogICAgICBpZiAoaGFzRXJyb3IgfHwgbGlzdGVuZXIuaGFuZGxlc1ZhbHVlIHx8IGxpc3RlbmVyLmhhbmRsZXNDb21wbGV0ZSkgewogICAgICAgIFpvbmUgem9uZSA9IGxpc3RlbmVyLl96b25lOwogICAgICAgIGlmIChoYXNFcnJvciAmJiAhc291cmNlLl96b25lLmluU2FtZUVycm9yWm9uZSh6b25lKSkgewogICAgICAgICAgLy8gRG9uJ3QgY3Jvc3Mgem9uZSBib3VuZGFyaWVzIHdpdGggZXJyb3JzLgogICAgICAgICAgQXN5bmNFcnJvciBhc3luY0Vycm9yID0gc291cmNlLl9lcnJvcjsKICAgICAgICAgIHNvdXJjZS5fem9uZQogICAgICAgICAgICAgIC5oYW5kbGVVbmNhdWdodEVycm9yKGFzeW5jRXJyb3IuZXJyb3IsIGFzeW5jRXJyb3Iuc3RhY2tUcmFjZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBab25lIG9sZFpvbmU7CiAgICAgICAgaWYgKCFpZGVudGljYWwoWm9uZS5jdXJyZW50LCB6b25lKSkgewogICAgICAgICAgLy8gQ2hhbmdlIHpvbmUgaWYgaXQncyBub3QgY3VycmVudC4KICAgICAgICAgIG9sZFpvbmUgPSBab25lLl9lbnRlcih6b25lKTsKICAgICAgICB9CgogICAgICAgIC8vIFRoZXNlIGNhbGxiYWNrcyBhcmUgYWJzdHJhY3RlZCB0byBpc29sYXRlIHRoZSB0cnkvY2F0Y2ggYmxvY2tzCiAgICAgICAgLy8gZnJvbSB0aGUgcmVzdCBvZiB0aGUgY29kZSB0byB3b3JrIGFyb3VuZCBhIFY4IGdsYXNzIGphdy4KICAgICAgICB2b2lkIGhhbmRsZVdoZW5Db21wbGV0ZUNhbGxiYWNrKCkgewogICAgICAgICAgLy8gVGhlIHdoZW5Db21wbGV0ZS1oYW5kbGVyIGlzIG5vdCBjb21iaW5lZCB3aXRoIG5vcm1hbCB2YWx1ZS9lcnJvcgogICAgICAgICAgLy8gaGFuZGxpbmcuIFRoaXMgbWVhbnMgYXQgbW9zdCBvbmUgaGFuZGxlWCBtZXRob2QgaXMgY2FsbGVkIHBlcgogICAgICAgICAgLy8gbGlzdGVuZXIuCiAgICAgICAgICBhc3NlcnQoIWxpc3RlbmVyLmhhbmRsZXNWYWx1ZSk7CiAgICAgICAgICBhc3NlcnQoIWxpc3RlbmVyLmhhbmRsZXNFcnJvcik7CiAgICAgICAgICB2YXIgY29tcGxldGVSZXN1bHQ7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb21wbGV0ZVJlc3VsdCA9IGxpc3RlbmVyLmhhbmRsZVdoZW5Db21wbGV0ZSgpOwogICAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgICBpZiAoaGFzRXJyb3IgJiYgaWRlbnRpY2FsKHNvdXJjZS5fZXJyb3IuZXJyb3IsIGUpKSB7CiAgICAgICAgICAgICAgbGlzdGVuZXJWYWx1ZU9yRXJyb3IgPSBzb3VyY2UuX2Vycm9yOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGxpc3RlbmVyVmFsdWVPckVycm9yID0gbmV3IEFzeW5jRXJyb3IoZSwgcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGlzdGVuZXJIYXNFcnJvciA9IHRydWU7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChjb21wbGV0ZVJlc3VsdCBpcyBGdXR1cmUpIHsKICAgICAgICAgICAgaWYgKGNvbXBsZXRlUmVzdWx0IGlzIF9GdXR1cmUgJiYgY29tcGxldGVSZXN1bHQuX2lzQ29tcGxldGUpIHsKICAgICAgICAgICAgICBpZiAoY29tcGxldGVSZXN1bHQuX2hhc0Vycm9yKSB7CiAgICAgICAgICAgICAgICBsaXN0ZW5lclZhbHVlT3JFcnJvciA9IGNvbXBsZXRlUmVzdWx0Ll9lcnJvcjsKICAgICAgICAgICAgICAgIGxpc3RlbmVySGFzRXJyb3IgPSB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAvLyBPdGhlcndpc2UgdXNlIHRoZSBleGlzdGluZyByZXN1bHQgb2Ygc291cmNlLgogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBXZSBoYXZlIHRvIHdhaXQgZm9yIHRoZSBjb21wbGV0ZVJlc3VsdCBmdXR1cmUgdG8gY29tcGxldGUKICAgICAgICAgICAgLy8gYmVmb3JlIGtub3dpbmcgaWYgaXQncyBhbiBlcnJvciBvciB3ZSBzaG91bGQgdXNlIHRoZSByZXN1bHQKICAgICAgICAgICAgLy8gb2Ygc291cmNlLgogICAgICAgICAgICB2YXIgb3JpZ2luYWxTb3VyY2UgPSBzb3VyY2U7CiAgICAgICAgICAgIGxpc3RlbmVyVmFsdWVPckVycm9yID0gY29tcGxldGVSZXN1bHQudGhlbigoXykgPT4gb3JpZ2luYWxTb3VyY2UpOwogICAgICAgICAgICBsaXN0ZW5lckhhc0Vycm9yID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB2b2lkIGhhbmRsZVZhbHVlQ2FsbGJhY2soKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBsaXN0ZW5lclZhbHVlT3JFcnJvciA9IGxpc3RlbmVyLmhhbmRsZVZhbHVlKHNvdXJjZVJlc3VsdCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIGxpc3RlbmVyVmFsdWVPckVycm9yID0gbmV3IEFzeW5jRXJyb3IoZSwgcyk7CiAgICAgICAgICAgIGxpc3RlbmVySGFzRXJyb3IgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgdm9pZCBoYW5kbGVFcnJvcigpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIEFzeW5jRXJyb3IgYXN5bmNFcnJvciA9IHNvdXJjZS5fZXJyb3I7CiAgICAgICAgICAgIGlmIChsaXN0ZW5lci5tYXRjaGVzRXJyb3JUZXN0KGFzeW5jRXJyb3IpICYmCiAgICAgICAgICAgICAgICBsaXN0ZW5lci5oYXNFcnJvckNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgbGlzdGVuZXJWYWx1ZU9yRXJyb3IgPSBsaXN0ZW5lci5oYW5kbGVFcnJvcihhc3luY0Vycm9yKTsKICAgICAgICAgICAgICBsaXN0ZW5lckhhc0Vycm9yID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgaWYgKGlkZW50aWNhbChzb3VyY2UuX2Vycm9yLmVycm9yLCBlKSkgewogICAgICAgICAgICAgIGxpc3RlbmVyVmFsdWVPckVycm9yID0gc291cmNlLl9lcnJvcjsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsaXN0ZW5lclZhbHVlT3JFcnJvciA9IG5ldyBBc3luY0Vycm9yKGUsIHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGxpc3RlbmVySGFzRXJyb3IgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGxpc3RlbmVyLmhhbmRsZXNDb21wbGV0ZSkgewogICAgICAgICAgaGFuZGxlV2hlbkNvbXBsZXRlQ2FsbGJhY2soKTsKICAgICAgICB9IGVsc2UgaWYgKCFoYXNFcnJvcikgewogICAgICAgICAgaWYgKGxpc3RlbmVyLmhhbmRsZXNWYWx1ZSkgewogICAgICAgICAgICBoYW5kbGVWYWx1ZUNhbGxiYWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChsaXN0ZW5lci5oYW5kbGVzRXJyb3IpIHsKICAgICAgICAgICAgaGFuZGxlRXJyb3IoKTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIElmIHdlIGNoYW5nZWQgem9uZSwgb2xkWm9uZSB3aWxsIG5vdCBiZSBudWxsLgogICAgICAgIGlmIChvbGRab25lICE9IG51bGwpIFpvbmUuX2xlYXZlKG9sZFpvbmUpOwoKICAgICAgICAvLyBJZiB0aGUgbGlzdGVuZXIncyB2YWx1ZSBpcyBhIGZ1dHVyZSB3ZSBuZWVkIHRvIGNoYWluIGl0LiBOb3RlIHRoYXQKICAgICAgICAvLyB0aGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGVyZSBpcyBhIGNhbGxiYWNrLgogICAgICAgIGlmIChsaXN0ZW5lclZhbHVlT3JFcnJvciBpcyBGdXR1cmUpIHsKICAgICAgICAgIEZ1dHVyZSBjaGFpblNvdXJjZSA9IGxpc3RlbmVyVmFsdWVPckVycm9yOwogICAgICAgICAgLy8gU2hvcnRjdXQgaWYgdGhlIGNoYWluLXNvdXJjZSBpcyBhbHJlYWR5IGNvbXBsZXRlZC4gSnVzdCBjb250aW51ZQogICAgICAgICAgLy8gdGhlIGxvb3AuCiAgICAgICAgICBfRnV0dXJlIHJlc3VsdCA9IGxpc3RlbmVyLnJlc3VsdDsKICAgICAgICAgIGlmIChjaGFpblNvdXJjZSBpcyBfRnV0dXJlKSB7CiAgICAgICAgICAgIGlmIChjaGFpblNvdXJjZS5faXNDb21wbGV0ZSkgewogICAgICAgICAgICAgIGxpc3RlbmVycyA9IHJlc3VsdC5fcmVtb3ZlTGlzdGVuZXJzKCk7CiAgICAgICAgICAgICAgcmVzdWx0Ll9jbG9uZVJlc3VsdChjaGFpblNvdXJjZSk7CiAgICAgICAgICAgICAgc291cmNlID0gY2hhaW5Tb3VyY2U7CiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2NoYWluQ29yZUZ1dHVyZShjaGFpblNvdXJjZSwgcmVzdWx0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2NoYWluRm9yZWlnbkZ1dHVyZShjaGFpblNvdXJjZSwgcmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgX0Z1dHVyZSByZXN1bHQgPSBsaXN0ZW5lci5yZXN1bHQ7CiAgICAgIGxpc3RlbmVycyA9IHJlc3VsdC5fcmVtb3ZlTGlzdGVuZXJzKCk7CiAgICAgIGlmICghbGlzdGVuZXJIYXNFcnJvcikgewogICAgICAgIHJlc3VsdC5fc2V0VmFsdWUobGlzdGVuZXJWYWx1ZU9yRXJyb3IpOwogICAgICB9IGVsc2UgewogICAgICAgIEFzeW5jRXJyb3IgYXN5bmNFcnJvciA9IGxpc3RlbmVyVmFsdWVPckVycm9yOwogICAgICAgIHJlc3VsdC5fc2V0RXJyb3JPYmplY3QoYXN5bmNFcnJvcik7CiAgICAgIH0KICAgICAgLy8gUHJlcGFyZSBmb3IgbmV4dCByb3VuZC4KICAgICAgc291cmNlID0gcmVzdWx0OwogICAgfQogIH0KCiAgRnV0dXJlPFQ+IHRpbWVvdXQoRHVyYXRpb24gdGltZUxpbWl0LCB7RnV0dXJlT3I8VD4gb25UaW1lb3V0KCl9KSB7CiAgICBpZiAoX2lzQ29tcGxldGUpIHJldHVybiBuZXcgX0Z1dHVyZS5pbW1lZGlhdGUodGhpcyk7CiAgICBfRnV0dXJlPFQ+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBUaW1lciB0aW1lcjsKICAgIGlmIChvblRpbWVvdXQgPT0gbnVsbCkgewogICAgICB0aW1lciA9IG5ldyBUaW1lcih0aW1lTGltaXQsICgpIHsKICAgICAgICByZXN1bHQuX2NvbXBsZXRlRXJyb3IoCiAgICAgICAgICAgIG5ldyBUaW1lb3V0RXhjZXB0aW9uKCJGdXR1cmUgbm90IGNvbXBsZXRlZCIsIHRpbWVMaW1pdCkpOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIFpvbmUgem9uZSA9IFpvbmUuY3VycmVudDsKICAgICAgb25UaW1lb3V0ID0gem9uZS5yZWdpc3RlckNhbGxiYWNrKG9uVGltZW91dCk7CiAgICAgIHRpbWVyID0gbmV3IFRpbWVyKHRpbWVMaW1pdCwgKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXN1bHQuX2NvbXBsZXRlKHpvbmUucnVuKG9uVGltZW91dCkpOwogICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgIHJlc3VsdC5fY29tcGxldGVFcnJvcihlLCBzKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgdGhpcy50aGVuKChUIHYpIHsKICAgICAgaWYgKHRpbWVyLmlzQWN0aXZlKSB7CiAgICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZVdpdGhWYWx1ZSh2KTsKICAgICAgfQogICAgfSwgb25FcnJvcjogKGUsIFN0YWNrVHJhY2UgcykgewogICAgICBpZiAodGltZXIuaXNBY3RpdmUpIHsKICAgICAgICB0aW1lci5jYW5jZWwoKTsKICAgICAgICByZXN1bHQuX2NvbXBsZXRlRXJyb3IoZSwgcyk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCi8vLyBSZWdpc3RlcnMgZXJyb3JIYW5kbGVyIGluIHpvbmUgaWYgaXQgaGFzIHRoZSBjb3JyZWN0IHR5cGUuCi8vLwovLy8gQ2hlY2tzIHRoYXQgdGhlIGZ1bmN0aW9uIGFjY2VwdHMgZWl0aGVyIGFuIFtPYmplY3RdIGFuZCBhIFtTdGFja1RyYWNlXQovLy8gb3IganVzdCBvbmUgW09iamVjdF0uIERvZXMgbm90IGNoZWNrIHRoZSByZXR1cm4gdHlwZS4KLy8vIFRoZSBhY3R1YWxseSByZXR1cm5lZCB2YWx1ZSBtdXN0IGJlIGBGdXR1cmVPcjxSPmAgd2hlcmUgYFJgIGlzIHRoZQovLy8gdmFsdWUgdHlwZSBvZiB0aGUgZnV0dXJlIHRoYXQgdGhlIGNhbGwgd2lsbCBjb21wbGV0ZSAoZWl0aGVyIHJldHVybmVkCi8vLyBieSBbRnV0dXJlLnRoZW5dIG9yIFtGdXR1cmUuY2F0Y2hFcnJvcl0pLiBXZSBjaGVjayB0aGUgcmV0dXJuZWQgdmFsdWUKLy8vIGR5bmFtaWNhbGx5IGJlY2F1c2UgdGhlIGZ1bmN0aW9ucyBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cyBpbiBwb3NpdGlvbnMKLy8vIHdpdGhvdXQgaW5mZXJlbmNlLCBzbyBhIGZ1bmN0aW9uIGV4cHJlc3Npb24gd29uJ3QgaW5mZXIgdGhlIHJldHVybiB0eXBlLgovLy8KLy8vIFRocm93cyBpZiB0aGUgdHlwZSBpcyBub3QgdmFsaWQuCkZ1bmN0aW9uIF9yZWdpc3RlckVycm9ySGFuZGxlcihGdW5jdGlvbiBlcnJvckhhbmRsZXIsIFpvbmUgem9uZSkgewogIGlmIChlcnJvckhhbmRsZXIgaXMgZHluYW1pYyBGdW5jdGlvbihPYmplY3QsIFN0YWNrVHJhY2UpKSB7CiAgICByZXR1cm4gem9uZQogICAgICAgIC5yZWdpc3RlckJpbmFyeUNhbGxiYWNrPGR5bmFtaWMsIE9iamVjdCwgU3RhY2tUcmFjZT4oZXJyb3JIYW5kbGVyKTsKICB9CiAgaWYgKGVycm9ySGFuZGxlciBpcyBkeW5hbWljIEZ1bmN0aW9uKE9iamVjdCkpIHsKICAgIHJldHVybiB6b25lLnJlZ2lzdGVyVW5hcnlDYWxsYmFjazxkeW5hbWljLCBPYmplY3Q+KGVycm9ySGFuZGxlcik7CiAgfQogIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICBlcnJvckhhbmRsZXIsCiAgICAgICJvbkVycm9yIiwKICAgICAgIkVycm9yIGhhbmRsZXIgbXVzdCBhY2NlcHQgb25lIE9iamVjdCBvciBvbmUgT2JqZWN0IGFuZCBhIFN0YWNrVHJhY2UiCiAgICAgICIgYXMgYXJndW1lbnRzLCBhbmQgcmV0dXJuIGEgYSB2YWxpZCByZXN1bHQiKTsKfQqDBwBOTjwBFAFKM0QtHSEBNy4BJgE+IlBMHzArBicEATwBTSQwAgExJ1AiBAE9MwQCATAnUB0EAT0uBAIBHiIiJikjKj0wRDlAIT0bHhM0Gx8gARhJHCdIAU1MATseIwEiATU1OzwBJhoVBAEqJBoVBAEqHRUEATMGSB4aHQQBLEMEATEkRwQBMy5ESkdBO0MNOU8GBAEhGysEAgEoPj4jKQFHSSsuAUg+NiYBOSQBOiQBNiEBBi43BUVFBhQBBj8FPTwFR0kuBU1QKTYGGgEuJAFBHAQBQSsWBAE9HywEAURAATdCPzIxLwElHRwhBAFCJS5AHU4mMj8IBjMEASkoMipGEwQBPyovPkkGTxMEAS0qLz8GShMEAToBHxokBAEhIB8EARoXHwQBHRgfBAEpHEAaIAQBK0AaIAQBODgEAT8GRyYaIBw0BAEwLBszJQ0YOEIeJyMpEgoeCBsvIy8KBgQBNiMbPiYnLC8pCjIIDRg4Qh4nIy8SCh4IGzAjMAoGBAEnTBsaMh8nBAFBGikeNCQWFgYRBAFNTEkTQyEgAUAiChwrQys7TSEJUE1RGzYrMgoVTRpQMB0lCgYEAU1HQUsgJAYePSMwDT0iKwYEASYaHiEnDyoIDTYYLgYEASUaIQE0FiwEAT8aATQiLAQBKxoyOkdOSTJPRk4LAR4bDgYbISEIBAEnHx1FHyUpDA8nCA4GSiYEATsaARshKQgEAQZOGwZREyIoHxgxF00KEAhKRDkwLiwnMQgsNiRPSD1LQyooLwFOSkZLJD82MRdNEgoBFi4uJwoBSkQsTksXKioeEDwbQTQVOw4lFAwqSy4+KRA+Fg5JSxopTyYMCgElEEcbOSUMCgEdEDM5LUcoDhs1NBU7DiUMCgEoKCAnIwwRJxsMCgE5MwFOOC41ThcsKCs1MCQYFTUOEzYMEgoIKC0fMA82LAghFwYEAUU5KhEdKB9GCg0gNCgOMRknCgoGFhwYJggkHBglCAgTBAIBPwRLOkdKSktNBCVDPhBMBDJGBCEUEUw1AgEbZGFydDphc3luYy9mdXR1cmVfaW1wbC5kYXJ0OW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9hc3luYy9zY2hlZHVsZV9taWNyb3Rhc2suZGFydJMOLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5hc3luYzsKCnR5cGVkZWYgdm9pZCBfQXN5bmNDYWxsYmFjaygpOwoKY2xhc3MgX0FzeW5jQ2FsbGJhY2tFbnRyeSB7CiAgZmluYWwgX0FzeW5jQ2FsbGJhY2sgY2FsbGJhY2s7CiAgX0FzeW5jQ2FsbGJhY2tFbnRyeSBuZXh0OwogIF9Bc3luY0NhbGxiYWNrRW50cnkodGhpcy5jYWxsYmFjayk7Cn0KCi8qKiBIZWFkIG9mIHNpbmdsZSBsaW5rZWQgbGlzdCBvZiBwZW5kaW5nIGNhbGxiYWNrcy4gKi8KX0FzeW5jQ2FsbGJhY2tFbnRyeSBfbmV4dENhbGxiYWNrOwovKiogVGFpbCBvZiBzaW5nbGUgbGlua2VkIGxpc3Qgb2YgcGVuZGluZyBjYWxsYmFja3MuICovCl9Bc3luY0NhbGxiYWNrRW50cnkgX2xhc3RDYWxsYmFjazsKLyoqCiAqIFRhaWwgb2YgcHJpb3JpdHkgY2FsbGJhY2tzIGFkZGVkIGJ5IHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIGNhbGxiYWNrLgogKgogKiBQcmlvcml0eSBjYWxsYmFja3MgYXJlIHB1dCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQogKiBjYWxsYmFjayBxdWV1ZSwgc28gdGhhdCBpZiBvbmUgY2FsbGJhY2sgc2NoZWR1bGVzIG1vcmUgdGhhbiBvbmUKICogcHJpb3JpdHkgY2FsbGJhY2ssIHRoZXkgYXJlIHN0aWxsIGVucXVldWVkIGluIHNjaGVkdWxpbmcgb3JkZXIuCiAqLwpfQXN5bmNDYWxsYmFja0VudHJ5IF9sYXN0UHJpb3JpdHlDYWxsYmFjazsKLyoqCiAqIFdoZXRoZXIgd2UgYXJlIGN1cnJlbnRseSBpbnNpZGUgdGhlIGNhbGxiYWNrIGxvb3AuCiAqCiAqIElmIHdlIGFyZSBpbnNpZGUgdGhlIGxvb3AsIHdlIG5ldmVyIG5lZWQgdG8gc2NoZWR1bGUgdGhlIGxvb3AsCiAqIGV2ZW4gaWYgYWRkaW5nIGEgZmlyc3QgZWxlbWVudC4KICovCmJvb2wgX2lzSW5DYWxsYmFja0xvb3AgPSBmYWxzZTsKCnZvaWQgX21pY3JvdGFza0xvb3AoKSB7CiAgd2hpbGUgKF9uZXh0Q2FsbGJhY2sgIT0gbnVsbCkgewogICAgX2xhc3RQcmlvcml0eUNhbGxiYWNrID0gbnVsbDsKICAgIF9Bc3luY0NhbGxiYWNrRW50cnkgZW50cnkgPSBfbmV4dENhbGxiYWNrOwogICAgX25leHRDYWxsYmFjayA9IGVudHJ5Lm5leHQ7CiAgICBpZiAoX25leHRDYWxsYmFjayA9PSBudWxsKSBfbGFzdENhbGxiYWNrID0gbnVsbDsKICAgIChlbnRyeS5jYWxsYmFjaykoKTsKICB9Cn0KCnZvaWQgX3N0YXJ0TWljcm90YXNrTG9vcCgpIHsKICBfaXNJbkNhbGxiYWNrTG9vcCA9IHRydWU7CiAgdHJ5IHsKICAgIC8vIE1vdmVkIHRvIHNlcGFyYXRlIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5LWZpbmFsbHkgcHJldmVudHMKICAgIC8vIGdvb2Qgb3B0aW1pemF0aW9uLgogICAgX21pY3JvdGFza0xvb3AoKTsKICB9IGZpbmFsbHkgewogICAgX2xhc3RQcmlvcml0eUNhbGxiYWNrID0gbnVsbDsKICAgIF9pc0luQ2FsbGJhY2tMb29wID0gZmFsc2U7CiAgICBpZiAoX25leHRDYWxsYmFjayAhPSBudWxsKSB7CiAgICAgIF9Bc3luY1J1bi5fc2NoZWR1bGVJbW1lZGlhdGUoX3N0YXJ0TWljcm90YXNrTG9vcCk7CiAgICB9CiAgfQp9CgovKioKICogU2NoZWR1bGVzIGEgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGFzIGEgbWljcm90YXNrLgogKgogKiBUaGUgbWljcm90YXNrIGlzIGNhbGxlZCBhZnRlciBhbGwgb3RoZXIgY3VycmVudGx5IHNjaGVkdWxlZAogKiBtaWNyb3Rhc2tzLCBidXQgYXMgcGFydCBvZiB0aGUgY3VycmVudCBzeXN0ZW0gZXZlbnQuCiAqLwp2b2lkIF9zY2hlZHVsZUFzeW5jQ2FsbGJhY2soX0FzeW5jQ2FsbGJhY2sgY2FsbGJhY2spIHsKICBfQXN5bmNDYWxsYmFja0VudHJ5IG5ld0VudHJ5ID0gbmV3IF9Bc3luY0NhbGxiYWNrRW50cnkoY2FsbGJhY2spOwogIGlmIChfbmV4dENhbGxiYWNrID09IG51bGwpIHsKICAgIF9uZXh0Q2FsbGJhY2sgPSBfbGFzdENhbGxiYWNrID0gbmV3RW50cnk7CiAgICBpZiAoIV9pc0luQ2FsbGJhY2tMb29wKSB7CiAgICAgIF9Bc3luY1J1bi5fc2NoZWR1bGVJbW1lZGlhdGUoX3N0YXJ0TWljcm90YXNrTG9vcCk7CiAgICB9CiAgfSBlbHNlIHsKICAgIF9sYXN0Q2FsbGJhY2submV4dCA9IG5ld0VudHJ5OwogICAgX2xhc3RDYWxsYmFjayA9IG5ld0VudHJ5OwogIH0KfQoKLyoqCiAqIFNjaGVkdWxlcyBhIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBiZWZvcmUgYWxsIG90aGVyIGN1cnJlbnRseSBzY2hlZHVsZWQgb25lcy4KICoKICogVGhpcyBjYWxsYmFjayB0YWtlcyBwcmlvcml0eSBvdmVyIGV4aXN0aW5nIHNjaGVkdWxlZCBjYWxsYmFja3MuCiAqIEl0IGlzIG9ubHkgdXNlZCBpbnRlcm5hbGx5IHRvIGdpdmUgaGlnaGVyIHByaW9yaXR5IHRvIGVycm9yIHJlcG9ydGluZy4KICoKICogSXMgYWx3YXlzIHJ1biBpbiB0aGUgcm9vdCB6b25lLgogKi8Kdm9pZCBfc2NoZWR1bGVQcmlvcml0eUFzeW5jQ2FsbGJhY2soX0FzeW5jQ2FsbGJhY2sgY2FsbGJhY2spIHsKICBpZiAoX25leHRDYWxsYmFjayA9PSBudWxsKSB7CiAgICBfc2NoZWR1bGVBc3luY0NhbGxiYWNrKGNhbGxiYWNrKTsKICAgIF9sYXN0UHJpb3JpdHlDYWxsYmFjayA9IF9sYXN0Q2FsbGJhY2s7CiAgICByZXR1cm47CiAgfQogIF9Bc3luY0NhbGxiYWNrRW50cnkgZW50cnkgPSBuZXcgX0FzeW5jQ2FsbGJhY2tFbnRyeShjYWxsYmFjayk7CiAgaWYgKF9sYXN0UHJpb3JpdHlDYWxsYmFjayA9PSBudWxsKSB7CiAgICBlbnRyeS5uZXh0ID0gX25leHRDYWxsYmFjazsKICAgIF9uZXh0Q2FsbGJhY2sgPSBfbGFzdFByaW9yaXR5Q2FsbGJhY2sgPSBlbnRyeTsKICB9IGVsc2UgewogICAgZW50cnkubmV4dCA9IF9sYXN0UHJpb3JpdHlDYWxsYmFjay5uZXh0OwogICAgX2xhc3RQcmlvcml0eUNhbGxiYWNrLm5leHQgPSBlbnRyeTsKICAgIF9sYXN0UHJpb3JpdHlDYWxsYmFjayA9IGVudHJ5OwogICAgaWYgKGVudHJ5Lm5leHQgPT0gbnVsbCkgewogICAgICBfbGFzdENhbGxiYWNrID0gZW50cnk7CiAgICB9CiAgfQp9CgovKioKICogUnVucyBhIGZ1bmN0aW9uIGFzeW5jaHJvbm91c2x5LgogKgogKiBDYWxsYmFja3MgcmVnaXN0ZXJlZCB0aHJvdWdoIHRoaXMgZnVuY3Rpb24gYXJlIGFsd2F5cyBleGVjdXRlZCBpbiBvcmRlciBhbmQKICogYXJlIGd1YXJhbnRlZWQgdG8gcnVuIGJlZm9yZSBvdGhlciBhc3luY2hyb25vdXMgZXZlbnRzIChsaWtlIFtUaW1lcl0gZXZlbnRzLAogKiBvciBET00gZXZlbnRzKS4KICoKICogKipXYXJuaW5nOioqIGl0IGlzIHBvc3NpYmxlIHRvIHN0YXJ2ZSB0aGUgRE9NIGJ5IHJlZ2lzdGVyaW5nIGFzeW5jaHJvbm91cwogKiBjYWxsYmFja3MgdGhyb3VnaCB0aGlzIG1ldGhvZC4gRm9yIGV4YW1wbGUgdGhlIGZvbGxvd2luZyBwcm9ncmFtIHJ1bnMKICogdGhlIGNhbGxiYWNrcyB3aXRob3V0IGV2ZXIgZ2l2aW5nIHRoZSBUaW1lciBjYWxsYmFjayBhIGNoYW5jZSB0byBleGVjdXRlOgogKgogKiAgICAgbWFpbigpIHsKICogICAgICAgVGltZXIucnVuKCgpIHsgcHJpbnQoImV4ZWN1dGVkIik7IH0pOyAgLy8gV2lsbCBuZXZlciBiZSBleGVjdXRlZC4KICogICAgICAgZm9vKCkgewogKiAgICAgICAgIHNjaGVkdWxlTWljcm90YXNrKGZvbyk7ICAvLyBTY2hlZHVsZXMgW2Zvb10gaW4gZnJvbnQgb2Ygb3RoZXIgZXZlbnRzLgogKiAgICAgICB9CiAqICAgICAgIGZvbygpOwogKiAgICAgfQogKgogKiAjIyBPdGhlciByZXNvdXJjZXMKICoKICogKiBbVGhlIEV2ZW50IExvb3AgYW5kIERhcnRdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9hcnRpY2xlcy9ldmVudC1sb29wLyk6CiAqIExlYXJuIGhvdyBEYXJ0IGhhbmRsZXMgdGhlIGV2ZW50IHF1ZXVlIGFuZCBtaWNyb3Rhc2sgcXVldWUsIHNvIHlvdSBjYW4gd3JpdGUKICogYmV0dGVyIGFzeW5jaHJvbm91cyBjb2RlIHdpdGggZmV3ZXIgc3VycHJpc2VzLgogKi8Kdm9pZCBzY2hlZHVsZU1pY3JvdGFzayh2b2lkIGNhbGxiYWNrKCkpIHsKICBfWm9uZSBjdXJyZW50Wm9uZSA9IFpvbmUuY3VycmVudDsKICBpZiAoaWRlbnRpY2FsKF9yb290Wm9uZSwgY3VycmVudFpvbmUpKSB7CiAgICAvLyBObyBuZWVkIHRvIGJpbmQgdGhlIGNhbGxiYWNrLiBXZSBrbm93IHRoYXQgdGhlIHJvb3QncyBzY2hlZHVsZU1pY3JvdGFzawogICAgLy8gd2lsbCBiZSBpbnZva2VkIGluIHRoZSByb290IHpvbmUuCiAgICBfcm9vdFNjaGVkdWxlTWljcm90YXNrKG51bGwsIG51bGwsIF9yb290Wm9uZSwgY2FsbGJhY2spOwogICAgcmV0dXJuOwogIH0KICBfWm9uZUZ1bmN0aW9uIGltcGxlbWVudGF0aW9uID0gY3VycmVudFpvbmUuX3NjaGVkdWxlTWljcm90YXNrOwogIGlmIChpZGVudGljYWwoX3Jvb3Rab25lLCBpbXBsZW1lbnRhdGlvbi56b25lKSAmJgogICAgICBfcm9vdFpvbmUuaW5TYW1lRXJyb3Jab25lKGN1cnJlbnRab25lKSkgewogICAgX3Jvb3RTY2hlZHVsZU1pY3JvdGFzaygKICAgICAgICBudWxsLCBudWxsLCBjdXJyZW50Wm9uZSwgY3VycmVudFpvbmUucmVnaXN0ZXJDYWxsYmFjayhjYWxsYmFjaykpOwogICAgcmV0dXJuOwogIH0KICBab25lLmN1cnJlbnQuc2NoZWR1bGVNaWNyb3Rhc2soWm9uZS5jdXJyZW50LmJpbmRDYWxsYmFja0d1YXJkZWQoY2FsbGJhY2spKTsKfQoKY2xhc3MgX0FzeW5jUnVuIHsKICAvKiogU2NoZWR1bGUgdGhlIGdpdmVuIGNhbGxiYWNrIGJlZm9yZSBhbnkgb3RoZXIgZXZlbnQgaW4gdGhlIGV2ZW50LWxvb3AuICovCiAgZXh0ZXJuYWwgc3RhdGljIHZvaWQgX3NjaGVkdWxlSW1tZWRpYXRlKHZvaWQgY2FsbGJhY2soKSk7Cn0KgJsATk48ARQBHwEcIRwmAgE4IzgjBEkDNkNDBCsENgNCIwQgARgiIi8gNRgEAgEdHAg/GhYOIh8hOQYEAgEENQM/OAQ3RB8uHjkGCyMeBAIBBFADQ0oDIwQ/HyYrDARBJyAzCy0oIx4dBgQCAQQjA09QEwNNSU0DEEsRUQsQCQMWA09QMgQqJCtPKT0MBEEzMBxKDAROAgESTzwCASJkYXJ0OmFzeW5jL3NjaGVkdWxlX21pY3JvdGFzay5kYXJ0LW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9hc3luYy9zdHJlYW0uZGFydMABP9EvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmFzeW5jOwoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb3JlIFN0cmVhbSB0eXBlcwovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp0eXBlZGVmIHZvaWQgX1RpbWVyQ2FsbGJhY2soKTsKCi8qKgogKiBBIHNvdXJjZSBvZiBhc3luY2hyb25vdXMgZGF0YSBldmVudHMuCiAqCiAqIEEgU3RyZWFtIHByb3ZpZGVzIGEgd2F5IHRvIHJlY2VpdmUgYSBzZXF1ZW5jZSBvZiBldmVudHMuCiAqIEVhY2ggZXZlbnQgaXMgZWl0aGVyIGEgZGF0YSBldmVudCwgYWxzbyBjYWxsZWQgYW4gKmVsZW1lbnQqIG9mIHRoZSBzdHJlYW0sCiAqIG9yIGFuIGVycm9yIGV2ZW50LCB3aGljaCBpcyBhIG5vdGlmaWNhdGlvbiB0aGF0IHNvbWV0aGluZyBoYXMgZmFpbGVkLgogKiBXaGVuIGEgc3RyZWFtIGhhcyBlbWl0dGVkIGFsbCBpdHMgZXZlbnQsCiAqIGEgc2luZ2xlICJkb25lIiBldmVudCB3aWxsIG5vdGlmeSB0aGUgbGlzdGVuZXIgdGhhdCB0aGUgZW5kIGhhcyBiZWVuIHJlYWNoZWQuCiAqCiAqIFlvdSBbbGlzdGVuXSBvbiBhIHN0cmVhbSB0byBtYWtlIGl0IHN0YXJ0IGdlbmVyYXRpbmcgZXZlbnRzLAogKiBhbmQgdG8gc2V0IHVwIGxpc3RlbmVycyB0aGF0IHJlY2VpdmUgdGhlIGV2ZW50cy4KICogV2hlbiB5b3UgbGlzdGVuLCB5b3UgcmVjZWl2ZSBhIFtTdHJlYW1TdWJzY3JpcHRpb25dIG9iamVjdAogKiB3aGljaCBpcyB0aGUgYWN0aXZlIG9iamVjdCBwcm92aWRpbmcgdGhlIGV2ZW50cywKICogYW5kIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHN0b3AgbGlzdGVuaW5nIGFnYWluLAogKiBvciB0byB0ZW1wb3JhcmlseSBwYXVzZSBldmVudHMgZnJvbSB0aGUgc3Vic2NyaXB0aW9uLgogKgogKiBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIHN0cmVhbXM6ICJTaW5nbGUtc3Vic2NyaXB0aW9uIiBzdHJlYW1zIGFuZAogKiAiYnJvYWRjYXN0IiBzdHJlYW1zLgogKgogKiAqQSBzaW5nbGUtc3Vic2NyaXB0aW9uIHN0cmVhbSogYWxsb3dzIG9ubHkgYSBzaW5nbGUgbGlzdGVuZXIgZHVyaW5nIHRoZSB3aG9sZQogKiBsaWZldGltZSBvZiB0aGUgc3RyZWFtLgogKiBJdCBkb2Vzbid0IHN0YXJ0IGdlbmVyYXRpbmcgZXZlbnRzIHVudGlsIGl0IGhhcyBhIGxpc3RlbmVyLAogKiBhbmQgaXQgc3RvcHMgc2VuZGluZyBldmVudHMgd2hlbiB0aGUgbGlzdGVuZXIgaXMgdW5zdWJzY3JpYmVkLAogKiBldmVuIGlmIHRoZSBzb3VyY2Ugb2YgZXZlbnRzIGNvdWxkIHN0aWxsIHByb3ZpZGUgbW9yZS4KICoKICogTGlzdGVuaW5nIHR3aWNlIG9uIGEgc2luZ2xlLXN1YnNjcmlwdGlvbiBzdHJlYW0gaXMgbm90IGFsbG93ZWQsIGV2ZW4gYWZ0ZXIKICogdGhlIGZpcnN0IHN1YnNjcmlwdGlvbiBoYXMgYmVlbiBjYW5jZWxlZC4KICoKICogU2luZ2xlLXN1YnNjcmlwdGlvbiBzdHJlYW1zIGFyZSBnZW5lcmFsbHkgdXNlZCBmb3Igc3RyZWFtaW5nIGNodW5rcyBvZgogKiBsYXJnZXIgY29udGlndW91cyBkYXRhIGxpa2UgZmlsZSBJL08uCiAqCiAqICpBIGJyb2FkY2FzdCBzdHJlYW0qIGFsbG93cyBhbnkgbnVtYmVyIG9mIGxpc3RlbmVycywgYW5kIGl0IGZpcmVzCiAqIGl0cyBldmVudHMgd2hlbiB0aGV5IGFyZSByZWFkeSwgd2hldGhlciB0aGVyZSBhcmUgbGlzdGVuZXJzIG9yIG5vdC4KICoKICogQnJvYWRjYXN0IHN0cmVhbXMgYXJlIHVzZWQgZm9yIGluZGVwZW5kZW50IGV2ZW50cy9vYnNlcnZlcnMuCiAqCiAqIElmIHNldmVyYWwgbGlzdGVuZXJzIHdhbnQgdG8gbGlzdGVuIHRvIGEgc2luZ2xlIHN1YnNjcmlwdGlvbiBzdHJlYW0sCiAqIHVzZSBbYXNCcm9hZGNhc3RTdHJlYW1dIHRvIGNyZWF0ZSBhIGJyb2FkY2FzdCBzdHJlYW0gb24gdG9wIG9mIHRoZQogKiBub24tYnJvYWRjYXN0IHN0cmVhbS4KICoKICogT24gZWl0aGVyIGtpbmQgb2Ygc3RyZWFtLCBzdHJlYW0gdHJhbnNmb3JtYXRpb25zLCBzdWNoIGFzIFt3aGVyZV0gYW5kCiAqIFtza2lwXSwgcmV0dXJuIHRoZSBzYW1lIHR5cGUgb2Ygc3RyZWFtIGFzIHRoZSBvbmUgdGhlIG1ldGhvZCB3YXMgY2FsbGVkIG9uLAogKiB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgogKgogKiBXaGVuIGFuIGV2ZW50IGlzIGZpcmVkLCB0aGUgbGlzdGVuZXIocykgYXQgdGhhdCB0aW1lIHdpbGwgcmVjZWl2ZSB0aGUgZXZlbnQuCiAqIElmIGEgbGlzdGVuZXIgaXMgYWRkZWQgdG8gYSBicm9hZGNhc3Qgc3RyZWFtIHdoaWxlIGFuIGV2ZW50IGlzIGJlaW5nIGZpcmVkLAogKiB0aGF0IGxpc3RlbmVyIHdpbGwgbm90IHJlY2VpdmUgdGhlIGV2ZW50IGN1cnJlbnRseSBiZWluZyBmaXJlZC4KICogSWYgYSBsaXN0ZW5lciBpcyBjYW5jZWxlZCwgaXQgaW1tZWRpYXRlbHkgc3RvcHMgcmVjZWl2aW5nIGV2ZW50cy4KICogTGlzdGVuaW5nIG9uIGEgYnJvYWRjYXN0IHN0cmVhbSBjYW4gYmUgdHJlYXRlZCBhcyBsaXN0ZW5pbmcgb24gYSBuZXcgc3RyZWFtCiAqIGNvbnRhaW5pbmcgb25seSB0aGUgZXZlbnRzIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4gZW1pdHRlZCB3aGVuIHRoZSBbbGlzdGVuXQogKiBjYWxsIG9jY3Vycy4KICogRm9yIGV4YW1wbGUsIHRoZSBbZmlyc3RdIGdldHRlciBsaXN0ZW5zIHRvIHRoZSBzdHJlYW0sIHRoZW4gcmV0dXJucyB0aGUgZmlyc3QKICogZXZlbnQgdGhhdCBsaXN0ZW5lciByZWNlaXZlcy4KICogVGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGZpcnN0IGV2ZW4gZW1pdHRlZCBieSB0aGUgc3RyZWFtLCBidXQgdGhlIGZpcnN0CiAqIG9mIHRoZSAqcmVtYWluaW5nKiBldmVudHMgb2YgdGhlIGJyb2FkY2FzdCBzdHJlYW0uCiAqCiAqIFdoZW4gdGhlICJkb25lIiBldmVudCBpcyBmaXJlZCwgc3Vic2NyaWJlcnMgYXJlIHVuc3Vic2NyaWJlZCBiZWZvcmUKICogcmVjZWl2aW5nIHRoZSBldmVudC4gQWZ0ZXIgdGhlIGV2ZW50IGhhcyBiZWVuIHNlbnQsIHRoZSBzdHJlYW0gaGFzIG5vCiAqIHN1YnNjcmliZXJzLiBBZGRpbmcgbmV3IHN1YnNjcmliZXJzIHRvIGEgYnJvYWRjYXN0IHN0cmVhbSBhZnRlciB0aGlzIHBvaW50CiAqIGlzIGFsbG93ZWQsIGJ1dCB0aGV5IHdpbGwganVzdCByZWNlaXZlIGEgbmV3ICJkb25lIiBldmVudCBhcyBzb29uCiAqIGFzIHBvc3NpYmxlLgogKgogKiBTdHJlYW0gc3Vic2NyaXB0aW9ucyBhbHdheXMgcmVzcGVjdCAicGF1c2UiIHJlcXVlc3RzLiBJZiBuZWNlc3NhcnkgdGhleSBuZWVkCiAqIHRvIGJ1ZmZlciB0aGVpciBpbnB1dCwgYnV0IG9mdGVuLCBhbmQgcHJlZmVyYWJseSwgdGhleSBjYW4gc2ltcGx5IHJlcXVlc3QKICogdGhlaXIgaW5wdXQgdG8gcGF1c2UgdG9vLgogKgogKiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBbaXNCcm9hZGNhc3RdIHJldHVybnMgZmFsc2UuCiAqIEEgYnJvYWRjYXN0IHN0cmVhbSBpbmhlcml0aW5nIGZyb20gW1N0cmVhbV0gbXVzdCBvdmVycmlkZSBbaXNCcm9hZGNhc3RdCiAqIHRvIHJldHVybiBgdHJ1ZWAuCiAqLwphYnN0cmFjdCBjbGFzcyBTdHJlYW08VD4gewogIFN0cmVhbSgpOwoKICAvKioKICAgKiBJbnRlcm5hbCB1c2Ugb25seS4gV2UgZG8gbm90IHdhbnQgdG8gcHJvbWlzZSB0aGF0IFN0cmVhbSBzdGF5cyBjb25zdC4KICAgKgogICAqIElmIG1peGlucyBiZWNvbWUgY29tcGF0aWJsZSB3aXRoIGNvbnN0IGNvbnN0cnVjdG9ycywgd2UgbWF5IHVzZSBhCiAgICogc3RyZWFtIG1peGluIGluc3RlYWQgb2YgZXh0ZW5kaW5nIFN0cmVhbSBmcm9tIGEgY29uc3QgY2xhc3MuCiAgICovCiAgY29uc3QgU3RyZWFtLl9pbnRlcm5hbCgpOwoKICAvKioKICAgKiBDcmVhdGVzIGFuIGVtcHR5IGJyb2FkY2FzdCBzdHJlYW0uCiAgICoKICAgKiBUaGlzIGlzIGEgc3RyZWFtIHdoaWNoIGRvZXMgbm90aGluZyBleGNlcHQgc2VuZGluZyBhIGRvbmUgZXZlbnQKICAgKiB3aGVuIGl0J3MgbGlzdGVuZWQgdG8uCiAgICovCiAgY29uc3QgZmFjdG9yeSBTdHJlYW0uZW1wdHkoKSA9IF9FbXB0eVN0cmVhbTxUPjsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIHN0cmVhbSB3aGljaCBlbWl0cyBhIHNpbmdsZSBkYXRhIGV2ZW50IGJlZm9yZSBjb21wbGV0aW5nLgogICAqCiAgICogVGhpcyBzdHJlYW0gZW1pdHMgYSBzaW5nbGUgZGF0YSBldmVudCBvZiBbdmFsdWVdCiAgICogYW5kIHRoZW4gY29tcGxldGVzIHdpdGggYSBkb25lIGV2ZW50LgogICAqCiAgICogRXhhbXBsZToKICAgKiBgYGBkYXJ0CiAgICogRnV0dXJlPHZvaWQ+IHByaW50VGhpbmdzKFN0cmVhbTxTdHJpbmc+IGRhdGEpIGFzeW5jIHsKICAgKiAgIGF3YWl0IGZvciAodmFyIHggaW4gZGF0YSkgewogICAqICAgICBwcmludCh4KTsKICAgKiAgIH0KICAgKiB9CiAgICogcHJpbnRUaGluZ3MoU3RyZWFtPFN0cmluZz4udmFsdWUoIm9rIikpOyAvLyBwcmludHMgIm9rIi4KICAgKiBgYGAKICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgZWZmZWN0aXZlbHkgZXF1aXZhbGVudCB0byBvbmUgY3JlYXRlZCBieQogICAqIGAoKCkgYXN5bmMqIHsgeWllbGQgdmFsdWU7IH0gKCkpYCBvciBgRnV0dXJlPFQ+LnZhbHVlKHZhbHVlKS5hc1N0cmVhbSgpYC4KICAgKi8KICBAU2luY2UoIjIuNSIpCiAgZmFjdG9yeSBTdHJlYW0udmFsdWUoVCB2YWx1ZSkgPT4KICAgICAgKF9Bc3luY1N0cmVhbUNvbnRyb2xsZXI8VD4obnVsbCwgbnVsbCwgbnVsbCwgbnVsbCkKICAgICAgICAgICAgLi5fYWRkKHZhbHVlKQogICAgICAgICAgICAuLl9jbG9zZVVuY2hlY2tlZCgpKQogICAgICAgICAgLnN0cmVhbTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIHN0cmVhbSB3aGljaCBlbWl0cyBhIHNpbmdsZSBlcnJvciBldmVudCBiZWZvcmUgY29tcGxldGluZy4KICAgKgogICAqIFRoaXMgc3RyZWFtIGVtaXRzIGEgc2luZ2xlIGVycm9yIGV2ZW50IG9mIFtlcnJvcl0gYW5kIFtzdGFja1RyYWNlXQogICAqIGFuZCB0aGVuIGNvbXBsZXRlcyB3aXRoIGEgZG9uZSBldmVudC4KICAgKgogICAqIEV4YW1wbGU6CiAgICogYGBgZGFydAogICAqIEZ1dHVyZTx2b2lkPiB0cnlUaGluZ3MoU3RyZWFtPGludD4gZGF0YSkgYXN5bmMgewogICAqICAgdHJ5IHsKICAgKiAgICAgYXdhaXQgZm9yICh2YXIgeCBpbiBkYXRhKSB7CiAgICogICAgICAgcHJpbnQoIkRhdGE6ICR4Iik7CiAgICogICAgIH0KICAgKiAgIH0gY2F0Y2ggKGUpIHsKICAgKiAgICAgcHJpbnQoZSk7CiAgICogICB9CiAgICogfQogICAqIHRyeVRoaW5ncyhTdHJlYW08aW50Pi5lcnJvcigiRXJyb3IiKSk7IC8vIHByaW50cyAiRXJyb3IiLgogICAqIGBgYAogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgZWZmZWN0aXZlbHkgZXF1aXZhbGVudCB0byBvbmUgY3JlYXRlZCBieQogICAqIGBGdXR1cmU8VD4uZXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpLmFzU3RyZWFtKClgLCBieSBvcgogICAqIGAoKCkgYXN5bmMqIHsgdGhyb3cgZXJyb3I7IH0gKCkpYCwgZXhjZXB0IHRoYXQgeW91IGNhbiBjb250cm9sIHRoZQogICAqIHN0YWNrIHRyYWNlIGFzIHdlbGwuCiAgICovCiAgQFNpbmNlKCIyLjUiKQogIGZhY3RvcnkgU3RyZWFtLmVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pID0+CiAgICAgIChfQXN5bmNTdHJlYW1Db250cm9sbGVyPFQ+KG51bGwsIG51bGwsIG51bGwsIG51bGwpCiAgICAgICAgICAgIC4uX2FkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKQogICAgICAgICAgICAuLl9jbG9zZVVuY2hlY2tlZCgpKQogICAgICAgICAgLnN0cmVhbTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBzaW5nbGUtc3Vic2NyaXB0aW9uIHN0cmVhbSBmcm9tIHRoZSBmdXR1cmUuCiAgICoKICAgKiBXaGVuIHRoZSBmdXR1cmUgY29tcGxldGVzLCB0aGUgc3RyZWFtIHdpbGwgZmlyZSBvbmUgZXZlbnQsIGVpdGhlcgogICAqIGRhdGEgb3IgZXJyb3IsIGFuZCB0aGVuIGNsb3NlIHdpdGggYSBkb25lLWV2ZW50LgogICAqLwogIGZhY3RvcnkgU3RyZWFtLmZyb21GdXR1cmUoRnV0dXJlPFQ+IGZ1dHVyZSkgewogICAgLy8gVXNlIHRoZSBjb250cm9sbGVyJ3MgYnVmZmVyaW5nIHRvIGZpbGwgaW4gdGhlIHZhbHVlIGV2ZW4gYmVmb3JlCiAgICAvLyB0aGUgc3RyZWFtIGhhcyBhIGxpc3RlbmVyLiBGb3IgYSBzaW5nbGUgdmFsdWUsIGl0J3Mgbm90IHdvcnRoIGl0CiAgICAvLyB0byB3YWl0IGZvciBhIGxpc3RlbmVyIGJlZm9yZSBkb2luZyB0aGUgYHRoZW5gIG9uIHRoZSBmdXR1cmUuCiAgICBfU3RyZWFtQ29udHJvbGxlcjxUPiBjb250cm9sbGVyID0KICAgICAgICBuZXcgX1N5bmNTdHJlYW1Db250cm9sbGVyPFQ+KG51bGwsIG51bGwsIG51bGwsIG51bGwpOwogICAgZnV0dXJlLnRoZW4oKHZhbHVlKSB7CiAgICAgIGNvbnRyb2xsZXIuX2FkZCh2YWx1ZSk7CiAgICAgIGNvbnRyb2xsZXIuX2Nsb3NlVW5jaGVja2VkKCk7CiAgICB9LCBvbkVycm9yOiAoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgICAgY29udHJvbGxlci5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICBjb250cm9sbGVyLl9jbG9zZVVuY2hlY2tlZCgpOwogICAgfSk7CiAgICByZXR1cm4gY29udHJvbGxlci5zdHJlYW07CiAgfQoKICAvKioKICAgKiBDcmVhdGUgYSBzdHJlYW0gZnJvbSBhIGdyb3VwIG9mIGZ1dHVyZXMuCiAgICoKICAgKiBUaGUgc3RyZWFtIHJlcG9ydHMgdGhlIHJlc3VsdHMgb2YgdGhlIGZ1dHVyZXMgb24gdGhlIHN0cmVhbSBpbiB0aGUgb3JkZXIKICAgKiBpbiB3aGljaCB0aGUgZnV0dXJlcyBjb21wbGV0ZS4KICAgKiBFYWNoIGZ1dHVyZSBwcm92aWRlcyBlaXRoZXIgYSBkYXRhIGV2ZW50IG9yIGFuIGVycm9yIGV2ZW50LAogICAqIGRlcGVuZGluZyBvbiBob3cgdGhlIGZ1dHVyZSBjb21wbGV0ZXMuCiAgICoKICAgKiBJZiBzb21lIGZ1dHVyZXMgaGF2ZSBhbHJlYWR5IGNvbXBsZXRlZCB3aGVuIGBTdHJlYW0uZnJvbUZ1dHVyZXNgIGlzIGNhbGxlZCwKICAgKiB0aGVpciByZXN1bHRzIHdpbGwgYmUgZW1pdHRlZCBpbiBzb21lIHVuc3BlY2lmaWVkIG9yZGVyLgogICAqCiAgICogV2hlbiBhbGwgZnV0dXJlcyBoYXZlIGNvbXBsZXRlZCwgdGhlIHN0cmVhbSBpcyBjbG9zZWQuCiAgICoKICAgKiBJZiBbZnV0dXJlc10gaXMgZW1wdHksIHRoZSBzdHJlYW0gY2xvc2VzIGFzIHNvb24gYXMgcG9zc2libGUuCiAgICovCiAgZmFjdG9yeSBTdHJlYW0uZnJvbUZ1dHVyZXMoSXRlcmFibGU8RnV0dXJlPFQ+PiBmdXR1cmVzKSB7CiAgICBfU3RyZWFtQ29udHJvbGxlcjxUPiBjb250cm9sbGVyID0KICAgICAgICBuZXcgX1N5bmNTdHJlYW1Db250cm9sbGVyPFQ+KG51bGwsIG51bGwsIG51bGwsIG51bGwpOwogICAgaW50IGNvdW50ID0gMDsKICAgIC8vIERlY2xhcmUgdGhlc2UgYXMgdmFyaWFibGVzIGhvbGRpbmcgY2xvc3VyZXMgaW5zdGVhZCBvZiBhcwogICAgLy8gZnVuY3Rpb24gZGVjbGFyYXRpb25zLgogICAgLy8gVGhpcyBhdm9pZHMgY3JlYXRpbmcgYSBuZXcgY2xvc3VyZSBmcm9tIHRoZSBmdW5jdGlvbnMgZm9yIGVhY2ggZnV0dXJlLgogICAgdmFyIG9uVmFsdWUgPSAoVCB2YWx1ZSkgewogICAgICBpZiAoIWNvbnRyb2xsZXIuaXNDbG9zZWQpIHsKICAgICAgICBjb250cm9sbGVyLl9hZGQodmFsdWUpOwogICAgICAgIGlmICgtLWNvdW50ID09IDApIGNvbnRyb2xsZXIuX2Nsb3NlVW5jaGVja2VkKCk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgb25FcnJvciA9IChlcnJvciwgU3RhY2tUcmFjZSBzdGFjaykgewogICAgICBpZiAoIWNvbnRyb2xsZXIuaXNDbG9zZWQpIHsKICAgICAgICBjb250cm9sbGVyLl9hZGRFcnJvcihlcnJvciwgc3RhY2spOwogICAgICAgIGlmICgtLWNvdW50ID09IDApIGNvbnRyb2xsZXIuX2Nsb3NlVW5jaGVja2VkKCk7CiAgICAgIH0KICAgIH07CiAgICAvLyBUaGUgZnV0dXJlcyBhcmUgYWxyZWFkeSBydW5uaW5nLCBzbyBzdGFydCBsaXN0ZW5pbmcgdG8gdGhlbSBpbW1lZGlhdGVseQogICAgLy8gKGluc3RlYWQgb2Ygd2FpdGluZyBmb3IgdGhlIHN0cmVhbSB0byBiZSBsaXN0ZW5lZCBvbikuCiAgICAvLyBJZiB3ZSB3YWl0LCB3ZSBtaWdodCBub3QgY2F0Y2ggZXJyb3JzIGluIHRoZSBmdXR1cmVzIGluIHRpbWUuCiAgICBmb3IgKHZhciBmdXR1cmUgaW4gZnV0dXJlcykgewogICAgICBjb3VudCsrOwogICAgICBmdXR1cmUudGhlbihvblZhbHVlLCBvbkVycm9yOiBvbkVycm9yKTsKICAgIH0KICAgIC8vIFVzZSBzY2hlZHVsZSBtaWNyb3Rhc2sgc2luY2UgY29udHJvbGxlciBpcyBzeW5jLgogICAgaWYgKGNvdW50ID09IDApIHNjaGVkdWxlTWljcm90YXNrKGNvbnRyb2xsZXIuY2xvc2UpOwogICAgcmV0dXJuIGNvbnRyb2xsZXIuc3RyZWFtOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIHNpbmdsZS1zdWJzY3JpcHRpb24gc3RyZWFtIHRoYXQgZ2V0cyBpdHMgZGF0YSBmcm9tIFtlbGVtZW50c10uCiAgICoKICAgKiBUaGUgaXRlcmFibGUgaXMgaXRlcmF0ZWQgd2hlbiB0aGUgc3RyZWFtIHJlY2VpdmVzIGEgbGlzdGVuZXIsIGFuZCBzdG9wcwogICAqIGl0ZXJhdGluZyBpZiB0aGUgbGlzdGVuZXIgY2FuY2VscyB0aGUgc3Vic2NyaXB0aW9uLCBvciBpZiB0aGUKICAgKiBbSXRlcmF0b3IubW92ZU5leHRdIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAgb3IgdGhyb3dzLgogICAqIEl0ZXJhdGlvbiBpcyBzdXNwZW5kZWQgd2hpbGUgdGhlIHN0cmVhbSBzdWJzY3JpcHRpb24gaXMgcGF1c2VkLgogICAqCiAgICogSWYgY2FsbGluZyBbSXRlcmF0b3IubW92ZU5leHRdIG9uIGBlbGVtZW50cy5pdGVyYXRvcmAgdGhyb3dzLAogICAqIHRoZSBzdHJlYW0gZW1pdHMgdGhhdCBlcnJvciBhbmQgdGhlbiBpdCBjbG9zZXMuCiAgICogSWYgcmVhZGluZyBbSXRlcmF0b3IuY3VycmVudF0gb24gYGVsZW1lbnRzLml0ZXJhdG9yYCB0aHJvd3MsCiAgICogdGhlIHN0cmVhbSBlbWl0cyB0aGF0IGVycm9yLCBidXQga2VlcHMgaXRlcmF0aW5nLgogICAqLwogIGZhY3RvcnkgU3RyZWFtLmZyb21JdGVyYWJsZShJdGVyYWJsZTxUPiBlbGVtZW50cykgewogICAgcmV0dXJuIG5ldyBfR2VuZXJhdGVkU3RyZWFtSW1wbDxUPigKICAgICAgICAoKSA9PiBuZXcgX0l0ZXJhYmxlUGVuZGluZ0V2ZW50czxUPihlbGVtZW50cykpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIHN0cmVhbSB0aGF0IHJlcGVhdGVkbHkgZW1pdHMgZXZlbnRzIGF0IFtwZXJpb2RdIGludGVydmFscy4KICAgKgogICAqIFRoZSBldmVudCB2YWx1ZXMgYXJlIGNvbXB1dGVkIGJ5IGludm9raW5nIFtjb21wdXRhdGlvbl0uIFRoZSBhcmd1bWVudCB0bwogICAqIHRoaXMgY2FsbGJhY2sgaXMgYW4gaW50ZWdlciB0aGF0IHN0YXJ0cyB3aXRoIDAgYW5kIGlzIGluY3JlbWVudGVkIGZvcgogICAqIGV2ZXJ5IGV2ZW50LgogICAqCiAgICogSWYgW2NvbXB1dGF0aW9uXSBpcyBvbWl0dGVkIHRoZSBldmVudCB2YWx1ZXMgd2lsbCBhbGwgYmUgYG51bGxgLgogICAqLwogIGZhY3RvcnkgU3RyZWFtLnBlcmlvZGljKER1cmF0aW9uIHBlcmlvZCwKICAgICAgW1QgY29tcHV0YXRpb24oaW50IGNvbXB1dGF0aW9uQ291bnQpXSkgewogICAgVGltZXIgdGltZXI7CiAgICBpbnQgY29tcHV0YXRpb25Db3VudCA9IDA7CiAgICBTdHJlYW1Db250cm9sbGVyPFQ+IGNvbnRyb2xsZXI7CiAgICAvLyBDb3VudHMgdGhlIHRpbWUgdGhhdCB0aGUgU3RyZWFtIHdhcyBydW5uaW5nIChhbmQgbm90IHBhdXNlZCkuCiAgICBTdG9wd2F0Y2ggd2F0Y2ggPSBuZXcgU3RvcHdhdGNoKCk7CgogICAgdm9pZCBzZW5kRXZlbnQoKSB7CiAgICAgIHdhdGNoLnJlc2V0KCk7CiAgICAgIFQgZGF0YTsKICAgICAgaWYgKGNvbXB1dGF0aW9uICE9IG51bGwpIHsKICAgICAgICB0cnkgewogICAgICAgICAgZGF0YSA9IGNvbXB1dGF0aW9uKGNvbXB1dGF0aW9uQ291bnQrKyk7CiAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgY29udHJvbGxlci5hZGRFcnJvcihlLCBzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29udHJvbGxlci5hZGQoZGF0YSk7CiAgICB9CgogICAgdm9pZCBzdGFydFBlcmlvZGljVGltZXIoKSB7CiAgICAgIGFzc2VydCh0aW1lciA9PSBudWxsKTsKICAgICAgdGltZXIgPSBuZXcgVGltZXIucGVyaW9kaWMocGVyaW9kLCAoVGltZXIgdGltZXIpIHsKICAgICAgICBzZW5kRXZlbnQoKTsKICAgICAgfSk7CiAgICB9CgogICAgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFQ+KAogICAgICAgIHN5bmM6IHRydWUsCiAgICAgICAgb25MaXN0ZW46ICgpIHsKICAgICAgICAgIHdhdGNoLnN0YXJ0KCk7CiAgICAgICAgICBzdGFydFBlcmlvZGljVGltZXIoKTsKICAgICAgICB9LAogICAgICAgIG9uUGF1c2U6ICgpIHsKICAgICAgICAgIHRpbWVyLmNhbmNlbCgpOwogICAgICAgICAgdGltZXIgPSBudWxsOwogICAgICAgICAgd2F0Y2guc3RvcCgpOwogICAgICAgIH0sCiAgICAgICAgb25SZXN1bWU6ICgpIHsKICAgICAgICAgIGFzc2VydCh0aW1lciA9PSBudWxsKTsKICAgICAgICAgIER1cmF0aW9uIGVsYXBzZWQgPSB3YXRjaC5lbGFwc2VkOwogICAgICAgICAgd2F0Y2guc3RhcnQoKTsKICAgICAgICAgIHRpbWVyID0gbmV3IFRpbWVyKHBlcmlvZCAtIGVsYXBzZWQsICgpIHsKICAgICAgICAgICAgdGltZXIgPSBudWxsOwogICAgICAgICAgICBzdGFydFBlcmlvZGljVGltZXIoKTsKICAgICAgICAgICAgc2VuZEV2ZW50KCk7CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICBpZiAodGltZXIgIT0gbnVsbCkgdGltZXIuY2FuY2VsKCk7CiAgICAgICAgICB0aW1lciA9IG51bGw7CiAgICAgICAgICByZXR1cm4gRnV0dXJlLl9udWxsRnV0dXJlOwogICAgICAgIH0pOwogICAgcmV0dXJuIGNvbnRyb2xsZXIuc3RyZWFtOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIHN0cmVhbSB3aGVyZSBhbGwgZXZlbnRzIG9mIGFuIGV4aXN0aW5nIHN0cmVhbSBhcmUgcGlwZWQgdGhyb3VnaAogICAqIGEgc2luay10cmFuc2Zvcm1hdGlvbi4KICAgKgogICAqIFRoZSBnaXZlbiBbbWFwU2lua10gY2xvc3VyZSBpcyBpbnZva2VkIHdoZW4gdGhlIHJldHVybmVkIHN0cmVhbSBpcwogICAqIGxpc3RlbmVkIHRvLiBBbGwgZXZlbnRzIGZyb20gdGhlIFtzb3VyY2VdIGFyZSBhZGRlZCBpbnRvIHRoZSBldmVudCBzaW5rCiAgICogdGhhdCBpcyByZXR1cm5lZCBmcm9tIHRoZSBpbnZvY2F0aW9uLiBUaGUgdHJhbnNmb3JtYXRpb24gcHV0cyBhbGwKICAgKiB0cmFuc2Zvcm1lZCBldmVudHMgaW50byB0aGUgc2luayB0aGUgW21hcFNpbmtdIGNsb3N1cmUgcmVjZWl2ZWQgZHVyaW5nCiAgICogaXRzIGludm9jYXRpb24uIENvbmNlcHR1YWxseSB0aGUgW21hcFNpbmtdIGNyZWF0ZXMgYSB0cmFuc2Zvcm1hdGlvbiBwaXBlCiAgICogd2l0aCB0aGUgaW5wdXQgc2luayBiZWluZyB0aGUgcmV0dXJuZWQgW0V2ZW50U2lua10gYW5kIHRoZSBvdXRwdXQgc2luawogICAqIGJlaW5nIHRoZSBzaW5rIGl0IHJlY2VpdmVkLgogICAqCiAgICogVGhpcyBjb25zdHJ1Y3RvciBpcyBmcmVxdWVudGx5IHVzZWQgdG8gYnVpbGQgdHJhbnNmb3JtZXJzLgogICAqCiAgICogRXhhbXBsZSB1c2UgZm9yIGEgZHVwbGljYXRpbmcgdHJhbnNmb3JtZXI6CiAgICoKICAgKiAgICAgY2xhc3MgRHVwbGljYXRpb25TaW5rIGltcGxlbWVudHMgRXZlbnRTaW5rPFN0cmluZz4gewogICAqICAgICAgIGZpbmFsIEV2ZW50U2luazxTdHJpbmc+IF9vdXRwdXRTaW5rOwogICAqICAgICAgIER1cGxpY2F0aW9uU2luayh0aGlzLl9vdXRwdXRTaW5rKTsKICAgKgogICAqICAgICAgIHZvaWQgYWRkKFN0cmluZyBkYXRhKSB7CiAgICogICAgICAgICBfb3V0cHV0U2luay5hZGQoZGF0YSk7CiAgICogICAgICAgICBfb3V0cHV0U2luay5hZGQoZGF0YSk7CiAgICogICAgICAgfQogICAqCiAgICogICAgICAgdm9pZCBhZGRFcnJvcihlLCBbc3RdKSB7IF9vdXRwdXRTaW5rLmFkZEVycm9yKGUsIHN0KTsgfQogICAqICAgICAgIHZvaWQgY2xvc2UoKSB7IF9vdXRwdXRTaW5rLmNsb3NlKCk7IH0KICAgKiAgICAgfQogICAqCiAgICogICAgIGNsYXNzIER1cGxpY2F0aW9uVHJhbnNmb3JtZXIgZXh0ZW5kcyBTdHJlYW1UcmFuc2Zvcm1lckJhc2U8U3RyaW5nLCBTdHJpbmc+IHsKICAgKiAgICAgICAvLyBTb21lIGdlbmVyaWMgdHlwZXMgb21pdHRlZCBmb3IgYnJldml0eS4KICAgKiAgICAgICBTdHJlYW0gYmluZChTdHJlYW0gc3RyZWFtKSA9PiBuZXcgU3RyZWFtPFN0cmluZz4uZXZlbnRUcmFuc2Zvcm1lZCgKICAgKiAgICAgICAgICAgc3RyZWFtLAogICAqICAgICAgICAgICAoRXZlbnRTaW5rIHNpbmspID0+IG5ldyBEdXBsaWNhdGlvblNpbmsoc2luaykpOwogICAqICAgICB9CiAgICoKICAgKiAgICAgc3RyaW5nU3RyZWFtLnRyYW5zZm9ybShuZXcgRHVwbGljYXRpb25UcmFuc2Zvcm1lcigpKTsKICAgKgogICAqIFRoZSByZXN1bHRpbmcgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSBpZiBbc291cmNlXSBpcy4KICAgKi8KICBmYWN0b3J5IFN0cmVhbS5ldmVudFRyYW5zZm9ybWVkKAogICAgICBTdHJlYW0gc291cmNlLCBFdmVudFNpbmsgbWFwU2luayhFdmVudFNpbms8VD4gc2luaykpIHsKICAgIHJldHVybiBuZXcgX0JvdW5kU2lua1N0cmVhbShzb3VyY2UsIG1hcFNpbmspOwogIH0KCiAgLyoqCiAgICogQWRhcHRzIFtzb3VyY2VdIHRvIGJlIGEgYFN0cmVhbTxUPmAuCiAgICoKICAgKiBUaGlzIGFsbG93cyBbc291cmNlXSB0byBiZSB1c2VkIGF0IHRoZSBuZXcgdHlwZSwgYnV0IGF0IHJ1bi10aW1lIGl0CiAgICogbXVzdCBzYXRpc2Z5IHRoZSByZXF1aXJlbWVudHMgb2YgYm90aCB0aGUgbmV3IHR5cGUgYW5kIGl0cyBvcmlnaW5hbCB0eXBlLgogICAqCiAgICogRGF0YSBldmVudHMgY3JlYXRlZCBieSB0aGUgc291cmNlIHN0cmVhbSBtdXN0IGFsc28gYmUgaW5zdGFuY2VzIG9mIFtUXS4KICAgKi8KICBzdGF0aWMgU3RyZWFtPFQ+IGNhc3RGcm9tPFMsIFQ+KFN0cmVhbTxTPiBzb3VyY2UpID0+CiAgICAgIG5ldyBDYXN0U3RyZWFtPFMsIFQ+KHNvdXJjZSk7CgogIC8qKgogICAqIFdoZXRoZXIgdGhpcyBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtLgogICAqLwogIGJvb2wgZ2V0IGlzQnJvYWRjYXN0ID0+IGZhbHNlOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbXVsdGktc3Vic2NyaXB0aW9uIHN0cmVhbSB0aGF0IHByb2R1Y2VzIHRoZSBzYW1lIGV2ZW50cyBhcyB0aGlzLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSB3aWxsIHN1YnNjcmliZSB0byB0aGlzIHN0cmVhbSB3aGVuIGl0cyBmaXJzdAogICAqIHN1YnNjcmliZXIgaXMgYWRkZWQsIGFuZCB3aWxsIHN0YXkgc3Vic2NyaWJlZCB1bnRpbCB0aGlzIHN0cmVhbSBlbmRzLAogICAqIG9yIGEgY2FsbGJhY2sgY2FuY2VscyB0aGUgc3Vic2NyaXB0aW9uLgogICAqCiAgICogSWYgW29uTGlzdGVuXSBpcyBwcm92aWRlZCwgaXQgaXMgY2FsbGVkIHdpdGggYSBzdWJzY3JpcHRpb24tbGlrZSBvYmplY3QKICAgKiB0aGF0IHJlcHJlc2VudHMgdGhlIHVuZGVybHlpbmcgc3Vic2NyaXB0aW9uIHRvIHRoaXMgc3RyZWFtLiBJdCBpcwogICAqIHBvc3NpYmxlIHRvIHBhdXNlLCByZXN1bWUgb3IgY2FuY2VsIHRoZSBzdWJzY3JpcHRpb24gZHVyaW5nIHRoZSBjYWxsCiAgICogdG8gW29uTGlzdGVuXS4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIGNoYW5nZSB0aGUgZXZlbnQgaGFuZGxlcnMsIGluY2x1ZGluZwogICAqIHVzaW5nIFtTdHJlYW1TdWJzY3JpcHRpb24uYXNGdXR1cmVdLgogICAqCiAgICogSWYgW29uQ2FuY2VsXSBpcyBwcm92aWRlZCwgaXQgaXMgY2FsbGVkIGluIGEgc2ltaWxhciB3YXkgdG8gW29uTGlzdGVuXQogICAqIHdoZW4gdGhlIHJldHVybmVkIHN0cmVhbSBzdG9wcyBoYXZpbmcgbGlzdGVuZXIuIElmIGl0IGxhdGVyIGdldHMKICAgKiBhIG5ldyBsaXN0ZW5lciwgdGhlIFtvbkxpc3Rlbl0gZnVuY3Rpb24gaXMgY2FsbGVkIGFnYWluLgogICAqCiAgICogVXNlIHRoZSBjYWxsYmFja3MsIGZvciBleGFtcGxlLCBmb3IgcGF1c2luZyB0aGUgdW5kZXJseWluZyBzdWJzY3JpcHRpb24KICAgKiB3aGlsZSBoYXZpbmcgbm8gc3Vic2NyaWJlcnMgdG8gcHJldmVudCBsb3NpbmcgZXZlbnRzLCBvciBjYW5jZWxpbmcgdGhlCiAgICogc3Vic2NyaXB0aW9uIHdoZW4gdGhlcmUgYXJlIG5vIGxpc3RlbmVycy4KICAgKi8KICBTdHJlYW08VD4gYXNCcm9hZGNhc3RTdHJlYW0oCiAgICAgIHt2b2lkIG9uTGlzdGVuKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pLAogICAgICB2b2lkIG9uQ2FuY2VsKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pfSkgewogICAgcmV0dXJuIG5ldyBfQXNCcm9hZGNhc3RTdHJlYW08VD4odGhpcywgb25MaXN0ZW4sIG9uQ2FuY2VsKTsKICB9CgogIC8qKgogICAqIEFkZHMgYSBzdWJzY3JpcHRpb24gdG8gdGhpcyBzdHJlYW0uCiAgICoKICAgKiBSZXR1cm5zIGEgW1N0cmVhbVN1YnNjcmlwdGlvbl0gd2hpY2ggaGFuZGxlcyBldmVudHMgZnJvbSB0aGlzIHN0cmVhbSB1c2luZwogICAqIHRoZSBwcm92aWRlZCBbb25EYXRhXSwgW29uRXJyb3JdIGFuZCBbb25Eb25lXSBoYW5kbGVycy4KICAgKiBUaGUgaGFuZGxlcnMgY2FuIGJlIGNoYW5nZWQgb24gdGhlIHN1YnNjcmlwdGlvbiwgYnV0IHRoZXkgc3RhcnQgb3V0CiAgICogYXMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9ucy4KICAgKgogICAqIE9uIGVhY2ggZGF0YSBldmVudCBmcm9tIHRoaXMgc3RyZWFtLCB0aGUgc3Vic2NyaWJlcidzIFtvbkRhdGFdIGhhbmRsZXIKICAgKiBpcyBjYWxsZWQuIElmIFtvbkRhdGFdIGlzIGBudWxsYCwgbm90aGluZyBoYXBwZW5zLgogICAqCiAgICogT24gZXJyb3JzIGZyb20gdGhpcyBzdHJlYW0sIHRoZSBbb25FcnJvcl0gaGFuZGxlciBpcyBjYWxsZWQgd2l0aCB0aGUKICAgKiBlcnJvciBvYmplY3QgYW5kIHBvc3NpYmx5IGEgc3RhY2sgdHJhY2UuCiAgICoKICAgKiBUaGUgW29uRXJyb3JdIGNhbGxiYWNrIG11c3QgYmUgb2YgdHlwZSBgdm9pZCBvbkVycm9yKGVycm9yKWAgb3IKICAgKiBgdm9pZCBvbkVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpYC4gSWYgW29uRXJyb3JdIGFjY2VwdHMKICAgKiB0d28gYXJndW1lbnRzIGl0IGlzIGNhbGxlZCB3aXRoIHRoZSBlcnJvciBvYmplY3QgYW5kIHRoZSBzdGFjayB0cmFjZQogICAqICh3aGljaCBjb3VsZCBiZSBgbnVsbGAgaWYgdGhpcyBzdHJlYW0gaXRzZWxmIHJlY2VpdmVkIGFuIGVycm9yIHdpdGhvdXQKICAgKiBzdGFjayB0cmFjZSkuCiAgICogT3RoZXJ3aXNlIGl0IGlzIGNhbGxlZCB3aXRoIGp1c3QgdGhlIGVycm9yIG9iamVjdC4KICAgKiBJZiBbb25FcnJvcl0gaXMgb21pdHRlZCwgYW55IGVycm9ycyBvbiB0aGlzIHN0cmVhbSBhcmUgY29uc2lkZXJlZCB1bmhhbmRsZWQsCiAgICogYW5kIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjdXJyZW50IFtab25lXSdzIGVycm9yIGhhbmRsZXIuCiAgICogQnkgZGVmYXVsdCB1bmhhbmRsZWQgYXN5bmMgZXJyb3JzIGFyZSB0cmVhdGVkCiAgICogYXMgaWYgdGhleSB3ZXJlIHVuY2F1Z2h0IHRvcC1sZXZlbCBlcnJvcnMuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBjbG9zZXMgYW5kIHNlbmRzIGEgZG9uZSBldmVudCwgdGhlIFtvbkRvbmVdIGhhbmRsZXIgaXMKICAgKiBjYWxsZWQuIElmIFtvbkRvbmVdIGlzIGBudWxsYCwgbm90aGluZyBoYXBwZW5zLgogICAqCiAgICogSWYgW2NhbmNlbE9uRXJyb3JdIGlzIHRydWUsIHRoZSBzdWJzY3JpcHRpb24gaXMgYXV0b21hdGljYWxseSBjYW5jZWxlZAogICAqIHdoZW4gdGhlIGZpcnN0IGVycm9yIGV2ZW50IGlzIGRlbGl2ZXJlZC4gVGhlIGRlZmF1bHQgaXMgYGZhbHNlYC4KICAgKgogICAqIFdoaWxlIGEgc3Vic2NyaXB0aW9uIGlzIHBhdXNlZCwgb3Igd2hlbiBpdCBoYXMgYmVlbiBjYW5jZWxlZCwKICAgKiB0aGUgc3Vic2NyaXB0aW9uIGRvZXNuJ3QgcmVjZWl2ZSBldmVudHMgYW5kIG5vbmUgb2YgdGhlCiAgICogZXZlbnQgaGFuZGxlciBmdW5jdGlvbnMgYXJlIGNhbGxlZC4KICAgKi8KICBTdHJlYW1TdWJzY3JpcHRpb248VD4gbGlzdGVuKHZvaWQgb25EYXRhKFQgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgc3RyZWFtIGZyb20gdGhpcyBzdHJlYW0gdGhhdCBkaXNjYXJkcyBzb21lIGVsZW1lbnRzLgogICAqCiAgICogVGhlIG5ldyBzdHJlYW0gc2VuZHMgdGhlIHNhbWUgZXJyb3IgYW5kIGRvbmUgZXZlbnRzIGFzIHRoaXMgc3RyZWFtLAogICAqIGJ1dCBpdCBvbmx5IHNlbmRzIHRoZSBkYXRhIGV2ZW50cyB0aGF0IHNhdGlzZnkgdGhlIFt0ZXN0XS4KICAgKgogICAqIElmIHRoZSBbdGVzdF0gZnVuY3Rpb24gdGhyb3dzLCB0aGUgZGF0YSBldmVudCBpcyBkcm9wcGVkIGFuZCB0aGUKICAgKiBlcnJvciBpcyBlbWl0dGVkIG9uIHRoZSByZXR1cm5lZCBzdHJlYW0gaW5zdGVhZC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqIElmIGEgYnJvYWRjYXN0IHN0cmVhbSBpcyBsaXN0ZW5lZCB0byBtb3JlIHRoYW4gb25jZSwgZWFjaCBzdWJzY3JpcHRpb24KICAgKiB3aWxsIGluZGl2aWR1YWxseSBwZXJmb3JtIHRoZSBgdGVzdGAuCiAgICovCiAgU3RyZWFtPFQ+IHdoZXJlKGJvb2wgdGVzdChUIGV2ZW50KSkgewogICAgcmV0dXJuIG5ldyBfV2hlcmVTdHJlYW08VD4odGhpcywgdGVzdCk7CiAgfQoKICAvKioKICAgKiBUcmFuc2Zvcm1zIGVhY2ggZWxlbWVudCBvZiB0aGlzIHN0cmVhbSBpbnRvIGEgbmV3IHN0cmVhbSBldmVudC4KICAgKgogICAqIENyZWF0ZXMgYSBuZXcgc3RyZWFtIHRoYXQgY29udmVydHMgZWFjaCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtCiAgICogdG8gYSBuZXcgdmFsdWUgdXNpbmcgdGhlIFtjb252ZXJ0XSBmdW5jdGlvbiwgYW5kIGVtaXRzIHRoZSByZXN1bHQuCiAgICoKICAgKiBGb3IgZWFjaCBkYXRhIGV2ZW50LCBgb2AsIGluIHRoaXMgc3RyZWFtLCB0aGUgcmV0dXJuZWQgc3RyZWFtCiAgICogcHJvdmlkZXMgYSBkYXRhIGV2ZW50IHdpdGggdGhlIHZhbHVlIGBjb252ZXJ0KG8pYC4KICAgKiBJZiBbY29udmVydF0gdGhyb3dzLCB0aGUgcmV0dXJuZWQgc3RyZWFtIHJlcG9ydHMgaXQgYXMgYW4gZXJyb3IKICAgKiBldmVudCBpbnN0ZWFkLgogICAqCiAgICogRXJyb3IgYW5kIGRvbmUgZXZlbnRzIGFyZSBwYXNzZWQgdGhyb3VnaCB1bmNoYW5nZWQgdG8gdGhlIHJldHVybmVkIHN0cmVhbS4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqIFRoZSBbY29udmVydF0gZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgcGVyIGRhdGEgZXZlbnQgcGVyIGxpc3RlbmVyLgogICAqIElmIGEgYnJvYWRjYXN0IHN0cmVhbSBpcyBsaXN0ZW5lZCB0byBtb3JlIHRoYW4gb25jZSwgZWFjaCBzdWJzY3JpcHRpb24KICAgKiB3aWxsIGluZGl2aWR1YWxseSBjYWxsIFtjb252ZXJ0XSBvbiBlYWNoIGRhdGEgZXZlbnQuCiAgICoKICAgKiBVbmxpa2UgW3RyYW5zZm9ybV0sIHRoaXMgbWV0aG9kIGRvZXMgbm90IHRyZWF0IHRoZSBzdHJlYW0gYXMKICAgKiBjaHVua3Mgb2YgYSBzaW5nbGUgdmFsdWUuIEluc3RlYWQgZWFjaCBldmVudCBpcyBjb252ZXJ0ZWQgaW5kZXBlbmRlbnRseQogICAqIG9mIHRoZSBwcmV2aW91cyBhbmQgZm9sbG93aW5nIGV2ZW50cywgd2hpY2ggbWF5IG5vdCBhbHdheXMgYmUgY29ycmVjdC4KICAgKiBGb3IgZXhhbXBsZSwgVVRGLTggZW5jb2RpbmcsIG9yIGRlY29kaW5nLCB3aWxsIGdpdmUgd3JvbmcgcmVzdWx0cwogICAqIGlmIGEgc3Vycm9nYXRlIHBhaXIsIG9yIGEgbXVsdGlieXRlIFVURi04IGVuY29kaW5nLCBpcyBzcGxpdCBpbnRvCiAgICogc2VwYXJhdGUgZXZlbnRzLCBhbmQgdGhvc2UgZXZlbnRzIGFyZSBhdHRlbXB0ZWQgZW5jb2RlZCBvciBkZWNvZGVkCiAgICogaW5kZXBlbmRlbnRseS4KICAgKi8KICBTdHJlYW08Uz4gbWFwPFM+KFMgY29udmVydChUIGV2ZW50KSkgewogICAgcmV0dXJuIG5ldyBfTWFwU3RyZWFtPFQsIFM+KHRoaXMsIGNvbnZlcnQpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBzdHJlYW0gd2l0aCBlYWNoIGRhdGEgZXZlbnQgb2YgdGhpcyBzdHJlYW0gYXN5bmNocm9ub3VzbHkKICAgKiBtYXBwZWQgdG8gYSBuZXcgZXZlbnQuCiAgICoKICAgKiBUaGlzIGFjdHMgbGlrZSBbbWFwXSwgZXhjZXB0IHRoYXQgW2NvbnZlcnRdIG1heSByZXR1cm4gYSBbRnV0dXJlXSwKICAgKiBhbmQgaW4gdGhhdCBjYXNlLCB0aGlzIHN0cmVhbSB3YWl0cyBmb3IgdGhhdCBmdXR1cmUgdG8gY29tcGxldGUgYmVmb3JlCiAgICogY29udGludWluZyB3aXRoIGl0cyByZXN1bHQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSBpZiB0aGlzIHN0cmVhbSBpcy4KICAgKi8KICBTdHJlYW08RT4gYXN5bmNNYXA8RT4oRnV0dXJlT3I8RT4gY29udmVydChUIGV2ZW50KSkgewogICAgX1N0cmVhbUNvbnRyb2xsZXJCYXNlPEU+IGNvbnRyb2xsZXI7CiAgICBTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uOwoKICAgIHZvaWQgb25MaXN0ZW4oKSB7CiAgICAgIGZpbmFsIGFkZCA9IGNvbnRyb2xsZXIuYWRkOwogICAgICBhc3NlcnQoY29udHJvbGxlciBpcyBfU3RyZWFtQ29udHJvbGxlcjxFPiB8fAogICAgICAgICAgY29udHJvbGxlciBpcyBfQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcik7CiAgICAgIGZpbmFsIGFkZEVycm9yID0gY29udHJvbGxlci5fYWRkRXJyb3I7CiAgICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKChUIGV2ZW50KSB7CiAgICAgICAgRnV0dXJlT3I8RT4gbmV3VmFsdWU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIG5ld1ZhbHVlID0gY29udmVydChldmVudCk7CiAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgY29udHJvbGxlci5hZGRFcnJvcihlLCBzKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKG5ld1ZhbHVlIGlzIEZ1dHVyZTxFPikgewogICAgICAgICAgc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgICAgICBuZXdWYWx1ZQogICAgICAgICAgICAgIC50aGVuKGFkZCwgb25FcnJvcjogYWRkRXJyb3IpCiAgICAgICAgICAgICAgLndoZW5Db21wbGV0ZShzdWJzY3JpcHRpb24ucmVzdW1lKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29udHJvbGxlci5hZGQobmV3VmFsdWUpOwogICAgICAgIH0KICAgICAgfSwgb25FcnJvcjogYWRkRXJyb3IsIG9uRG9uZTogY29udHJvbGxlci5jbG9zZSk7CiAgICB9CgogICAgaWYgKHRoaXMuaXNCcm9hZGNhc3QpIHsKICAgICAgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPEU+LmJyb2FkY2FzdCgKICAgICAgICAgIG9uTGlzdGVuOiBvbkxpc3RlbiwKICAgICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBzeW5jOiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxFPigKICAgICAgICAgIG9uTGlzdGVuOiBvbkxpc3RlbiwKICAgICAgICAgIG9uUGF1c2U6ICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgICAgICB9LAogICAgICAgICAgb25SZXN1bWU6ICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICAgICAgfSwKICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiBzdWJzY3JpcHRpb24uY2FuY2VsKCksCiAgICAgICAgICBzeW5jOiB0cnVlKTsKICAgIH0KICAgIHJldHVybiBjb250cm9sbGVyLnN0cmVhbTsKICB9CgogIC8qKgogICAqIFRyYW5zZm9ybXMgZWFjaCBlbGVtZW50IGludG8gYSBzZXF1ZW5jZSBvZiBhc3luY2hyb25vdXMgZXZlbnRzLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBzdHJlYW0gYW5kIGZvciBlYWNoIGV2ZW50IG9mIHRoaXMgc3RyZWFtLCBkbyB0aGUgZm9sbG93aW5nOgogICAqCiAgICogKiBJZiB0aGUgZXZlbnQgaXMgYW4gZXJyb3IgZXZlbnQgb3IgYSBkb25lIGV2ZW50LCBpdCBpcyBlbWl0dGVkIGRpcmVjdGx5CiAgICogYnkgdGhlIHJldHVybmVkIHN0cmVhbS4KICAgKiAqIE90aGVyd2lzZSBpdCBpcyBhbiBlbGVtZW50LiBUaGVuIHRoZSBbY29udmVydF0gZnVuY3Rpb24gaXMgY2FsbGVkCiAgICogd2l0aCB0aGUgZWxlbWVudCBhcyBhcmd1bWVudCB0byBwcm9kdWNlIGEgY29udmVydC1zdHJlYW0gZm9yIHRoZSBlbGVtZW50LgogICAqICogSWYgdGhhdCBjYWxsIHRocm93cywgdGhlIGVycm9yIGlzIGVtaXR0ZWQgb24gdGhlIHJldHVybmVkIHN0cmVhbS4KICAgKiAqIElmIHRoZSBjYWxsIHJldHVybnMgYG51bGxgLCBubyBmdXJ0aGVyIGFjdGlvbiBpcyB0YWtlbiBmb3IgdGhlIGVsZW1lbnRzLgogICAqICogT3RoZXJ3aXNlLCB0aGlzIHN0cmVhbSBpcyBwYXVzZWQgYW5kIGNvbnZlcnQtc3RyZWFtIGlzIGxpc3RlbmVkIHRvLgogICAqIEV2ZXJ5IGRhdGEgYW5kIGVycm9yIGV2ZW50IG9mIHRoZSBjb252ZXJ0LXN0cmVhbSBpcyBlbWl0dGVkIG9uIHRoZSByZXR1cm5lZAogICAqIHN0cmVhbSBpbiB0aGUgb3JkZXIgaXQgaXMgcHJvZHVjZWQuCiAgICogV2hlbiB0aGUgY29udmVydC1zdHJlYW0gZW5kcywgdGhpcyBzdHJlYW0gaXMgcmVzdW1lZC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqLwogIFN0cmVhbTxFPiBhc3luY0V4cGFuZDxFPihTdHJlYW08RT4gY29udmVydChUIGV2ZW50KSkgewogICAgX1N0cmVhbUNvbnRyb2xsZXJCYXNlPEU+IGNvbnRyb2xsZXI7CiAgICBTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uOwogICAgdm9pZCBvbkxpc3RlbigpIHsKICAgICAgYXNzZXJ0KGNvbnRyb2xsZXIgaXMgX1N0cmVhbUNvbnRyb2xsZXIgfHwKICAgICAgICAgIGNvbnRyb2xsZXIgaXMgX0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXIpOwogICAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigoVCBldmVudCkgewogICAgICAgIFN0cmVhbTxFPiBuZXdTdHJlYW07CiAgICAgICAgdHJ5IHsKICAgICAgICAgIG5ld1N0cmVhbSA9IGNvbnZlcnQoZXZlbnQpOwogICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IoZSwgcyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChuZXdTdHJlYW0gIT0gbnVsbCkgewogICAgICAgICAgc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgICAgICBjb250cm9sbGVyLmFkZFN0cmVhbShuZXdTdHJlYW0pLndoZW5Db21wbGV0ZShzdWJzY3JpcHRpb24ucmVzdW1lKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgICAgICBvbkVycm9yOiBjb250cm9sbGVyLl9hZGRFcnJvciwgLy8gQXZvaWQgWm9uZSBlcnJvciByZXBsYWNlbWVudC4KICAgICAgICAgIG9uRG9uZTogY29udHJvbGxlci5jbG9zZSk7CiAgICB9CgogICAgaWYgKHRoaXMuaXNCcm9hZGNhc3QpIHsKICAgICAgY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPEU+LmJyb2FkY2FzdCgKICAgICAgICAgIG9uTGlzdGVuOiBvbkxpc3RlbiwKICAgICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgICAgICAgIH0sCiAgICAgICAgICBzeW5jOiB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxFPigKICAgICAgICAgIG9uTGlzdGVuOiBvbkxpc3RlbiwKICAgICAgICAgIG9uUGF1c2U6ICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgICAgICB9LAogICAgICAgICAgb25SZXN1bWU6ICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICAgICAgfSwKICAgICAgICAgIG9uQ2FuY2VsOiAoKSA9PiBzdWJzY3JpcHRpb24uY2FuY2VsKCksCiAgICAgICAgICBzeW5jOiB0cnVlKTsKICAgIH0KICAgIHJldHVybiBjb250cm9sbGVyLnN0cmVhbTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSB3cmFwcGVyIFN0cmVhbSB0aGF0IGludGVyY2VwdHMgc29tZSBlcnJvcnMgZnJvbSB0aGlzIHN0cmVhbS4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIHNlbmRzIGFuIGVycm9yIHRoYXQgbWF0Y2hlcyBbdGVzdF0sIHRoZW4gaXQgaXMgaW50ZXJjZXB0ZWQKICAgKiBieSB0aGUgW29uRXJyb3JdIGZ1bmN0aW9uLgogICAqCiAgICogVGhlIFtvbkVycm9yXSBjYWxsYmFjayBtdXN0IGJlIG9mIHR5cGUgYHZvaWQgb25FcnJvcihlcnJvcilgIG9yCiAgICogYHZvaWQgb25FcnJvcihlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKWAuCiAgICogVGhlIGZ1bmN0aW9uIHR5cGUgZGV0ZXJtaW5lcyB3aGV0aGVyIFtvbkVycm9yXSBpcyBpbnZva2VkIHdpdGggYSBzdGFjawogICAqIHRyYWNlIGFyZ3VtZW50LgogICAqIFRoZSBzdGFjayB0cmFjZSBhcmd1bWVudCBtYXkgYmUgYG51bGxgIGlmIHRoaXMgc3RyZWFtIHJlY2VpdmVkIGFuIGVycm9yCiAgICogd2l0aG91dCBhIHN0YWNrIHRyYWNlLgogICAqCiAgICogQW4gYXN5bmNocm9ub3VzIGVycm9yIGBlcnJvcmAgaXMgbWF0Y2hlZCBieSBhIHRlc3QgZnVuY3Rpb24gaWYKICAgKmB0ZXN0KGVycm9yKWAgcmV0dXJucyB0cnVlLiBJZiBbdGVzdF0gaXMgb21pdHRlZCwgZXZlcnkgZXJyb3IgaXMgY29uc2lkZXJlZAogICAqIG1hdGNoaW5nLgogICAqCiAgICogSWYgdGhlIGVycm9yIGlzIGludGVyY2VwdGVkLCB0aGUgW29uRXJyb3JdIGZ1bmN0aW9uIGNhbiBkZWNpZGUgd2hhdCB0byBkbwogICAqIHdpdGggaXQuIEl0IGNhbiB0aHJvdyBpZiBpdCB3YW50cyB0byByYWlzZSBhIG5ldyAob3IgdGhlIHNhbWUpIGVycm9yLAogICAqIG9yIHNpbXBseSByZXR1cm4gdG8gbWFrZSB0aGlzIHN0cmVhbSBmb3JnZXQgdGhlIGVycm9yLgogICAqIElmIHRoZSByZWNlaXZlZCBgZXJyb3JgIHZhbHVlIGlzIHRocm93biBhZ2FpbiBieSB0aGUgW29uRXJyb3JdIGZ1bmN0aW9uLAogICAqIGl0IGFjdHMgbGlrZSBhIGByZXRocm93YCBhbmQgaXQgaXMgZW1pdHRlZCBhbG9uZyB3aXRoIGl0cyBvcmlnaW5hbAogICAqIHN0YWNrIHRyYWNlLCBub3QgdGhlIHN0YWNrIHRyYWNlIG9mIHRoZSBgdGhyb3dgIGluc2lkZSBbb25FcnJvcl0uCiAgICoKICAgKiBJZiB5b3UgbmVlZCB0byB0cmFuc2Zvcm0gYW4gZXJyb3IgaW50byBhIGRhdGEgZXZlbnQsIHVzZSB0aGUgbW9yZSBnZW5lcmljCiAgICogW1N0cmVhbS50cmFuc2Zvcm1dIHRvIGhhbmRsZSB0aGUgZXZlbnQgYnkgd3JpdGluZyBhIGRhdGEgZXZlbnQgdG8KICAgKiB0aGUgb3V0cHV0IHNpbmsuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSBpZiB0aGlzIHN0cmVhbSBpcy4KICAgKiBJZiBhIGJyb2FkY2FzdCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8gbW9yZSB0aGFuIG9uY2UsIGVhY2ggc3Vic2NyaXB0aW9uCiAgICogd2lsbCBpbmRpdmlkdWFsbHkgcGVyZm9ybSB0aGUgYHRlc3RgIGFuZCBoYW5kbGUgdGhlIGVycm9yLgogICAqLwogIFN0cmVhbTxUPiBoYW5kbGVFcnJvcihGdW5jdGlvbiBvbkVycm9yLCB7Ym9vbCB0ZXN0KGVycm9yKX0pIHsKICAgIHJldHVybiBuZXcgX0hhbmRsZUVycm9yU3RyZWFtPFQ+KHRoaXMsIG9uRXJyb3IsIHRlc3QpOwogIH0KCiAgLyoqCiAgICogVHJhbnNmb3JtcyBlYWNoIGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0gaW50byBhIHNlcXVlbmNlIG9mIGVsZW1lbnRzLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBzdHJlYW0gd2hlcmUgZWFjaCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtIGlzIHJlcGxhY2VkCiAgICogYnkgemVybyBvciBtb3JlIGRhdGEgZXZlbnRzLgogICAqIFRoZSBldmVudCB2YWx1ZXMgYXJlIHByb3ZpZGVkIGFzIGFuIFtJdGVyYWJsZV0gYnkgYSBjYWxsIHRvIFtjb252ZXJ0XQogICAqIHdpdGggdGhlIGVsZW1lbnQgYXMgYXJndW1lbnQsIGFuZCB0aGUgZWxlbWVudHMgb2YgdGhhdCBpdGVyYWJsZSBpcwogICAqIGVtaXR0ZWQgaW4gaXRlcmF0aW9uIG9yZGVyLgogICAqIElmIGNhbGxpbmcgW2NvbnZlcnRdIHRocm93cywgb3IgaWYgdGhlIGl0ZXJhdGlvbiBvZiB0aGUgcmV0dXJuZWQgdmFsdWVzCiAgICogdGhyb3dzLCB0aGUgZXJyb3IgaXMgZW1pdHRlZCBvbiB0aGUgcmV0dXJuZWQgc3RyZWFtIGFuZCBpdGVyYXRpb24gZW5kcwogICAqIGZvciB0aGF0IGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0uCiAgICoKICAgKiBFcnJvciBldmVudHMgYW5kIHRoZSBkb25lIGV2ZW50IG9mIHRoaXMgc3RyZWFtIGFyZSBmb3J3YXJkZWQgZGlyZWN0bHkKICAgKiB0byB0aGUgcmV0dXJuZWQgc3RyZWFtLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICogSWYgYSBicm9hZGNhc3Qgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIG1vcmUgdGhhbiBvbmNlLCBlYWNoIHN1YnNjcmlwdGlvbgogICAqIHdpbGwgaW5kaXZpZHVhbGx5IGNhbGwgYGNvbnZlcnRgIGFuZCBleHBhbmQgdGhlIGV2ZW50cy4KICAgKi8KICBTdHJlYW08Uz4gZXhwYW5kPFM+KEl0ZXJhYmxlPFM+IGNvbnZlcnQoVCBlbGVtZW50KSkgewogICAgcmV0dXJuIG5ldyBfRXhwYW5kU3RyZWFtPFQsIFM+KHRoaXMsIGNvbnZlcnQpOwogIH0KCiAgLyoqCiAgICogUGlwZXMgdGhlIGV2ZW50cyBvZiB0aGlzIHN0cmVhbSBpbnRvIFtzdHJlYW1Db25zdW1lcl0uCiAgICoKICAgKiBBbGwgZXZlbnRzIG9mIHRoaXMgc3RyZWFtIGFyZSBhZGRlZCB0byBgc3RyZWFtQ29uc3VtZXJgIHVzaW5nCiAgICogW1N0cmVhbUNvbnN1bWVyLmFkZFN0cmVhbV0uCiAgICogVGhlIGBzdHJlYW1Db25zdW1lcmAgaXMgY2xvc2VkIHdoZW4gdGhpcyBzdHJlYW0gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGFkZGVkCiAgICogdG8gaXQgLSB3aGVuIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgYGFkZFN0cmVhbWAgY29tcGxldGVzIHdpdGhvdXQgYW4gZXJyb3IuCiAgICoKICAgKiBSZXR1cm5zIGEgZnV0dXJlIHdoaWNoIGNvbXBsZXRlcyB3aGVuIHRoaXMgc3RyZWFtIGhhcyBiZWVuIGNvbnN1bWVkCiAgICogYW5kIHRoZSBjb25zdW1lciBoYXMgYmVlbiBjbG9zZWQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIHRoZSBzYW1lIHJlc3VsdCBhcyB0aGUgZnV0dXJlIHJldHVybmVkCiAgICogYnkgW1N0cmVhbUNvbnN1bWVyLmNsb3NlXS4KICAgKiBJZiB0aGUgY2FsbCB0byBbU3RyZWFtQ29uc3VtZXIuYWRkU3RyZWFtXSBmYWlscyBpbiBzb21lIHdheSwgdGhpcwogICAqIG1ldGhvZCBmYWlscyBpbiB0aGUgc2FtZSB3YXkuCiAgICovCiAgRnV0dXJlIHBpcGUoU3RyZWFtQ29uc3VtZXI8VD4gc3RyZWFtQ29uc3VtZXIpIHsKICAgIHJldHVybiBzdHJlYW1Db25zdW1lci5hZGRTdHJlYW0odGhpcykudGhlbigoXykgPT4gc3RyZWFtQ29uc3VtZXIuY2xvc2UoKSk7CiAgfQoKICAvKioKICAgKiBBcHBsaWVzICBbc3RyZWFtVHJhbnNmb3JtZXJdIHRvIHRoaXMgc3RyZWFtLgogICAqCiAgICogUmV0dXJucyB0aGUgdHJhbnNmb3JtZWQgc3RyZWFtLAogICAqIHRoYXQgaXMsIHRoZSByZXN1bHQgb2YgYHN0cmVhbVRyYW5zZm9ybWVyLmJpbmQodGhpcylgLgogICAqIFRoaXMgbWV0aG9kIHNpbXBseSBhbGxvd3Mgd3JpdGluZyB0aGUgY2FsbCB0byBgc3RyZWFtVHJhbnNmb3JtZXIuYmluZGAKICAgKiBpbiBhIGNoYWluZWQgZmFzaGlvbiwgbGlrZQogICAqIGBgYAogICAqIHN0cmVhbS5tYXAobWFwcGluZykudHJhbnNmb3JtKHRyYW5zZm9ybWF0aW9uKS50b0xpc3QoKQogICAqIGBgYAogICAqIHdoaWNoIGNhbiBiZSBtb3JlIGNvbnZlbmllbnQgdGhhbiBjYWxsaW5nIGBiaW5kYCBkaXJlY3RseS4KICAgKgogICAqIFRoZSBbc3RyZWFtVHJhbnNmb3JtZXJdIGNhbiByZXR1cm4gYW55IHN0cmVhbS4KICAgKiBXaGV0aGVyIHRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIG9yIG5vdCwKICAgKiBhbmQgd2hpY2ggZWxlbWVudHMgaXQgd2lsbCBjb250YWluLAogICAqIGlzIGVudGlyZWx5IHVwIHRvIHRoZSB0cmFuc2Zvcm1hdGlvbi4KICAgKgogICAqIFRoaXMgbWV0aG9kIHNob3VsZCBhbHdheXMgYmUgdXNlZCBmb3IgdHJhbnNmb3JtYXRpb25zIHdoaWNoIHRyZWF0CiAgICogdGhlIGVudGlyZSBzdHJlYW0gYXMgcmVwcmVzZW50aW5nIGEgc2luZ2xlIHZhbHVlCiAgICogd2hpY2ggaGFzIHBlcmhhcHMgYmVlbiBzcGxpdCBpbnRvIHNldmVyYWwgcGFydHMgZm9yIHRyYW5zcG9ydCwKICAgKiBsaWtlIGEgZmlsZSBiZWluZyByZWFkIGZyb20gZGlzayBvciBiZWluZyBmZXRjaGVkIG92ZXIgYSBuZXR3b3JrLgogICAqIFRoZSB0cmFuc2Zvcm1hdGlvbiB3aWxsIHRoZW4gcHJvZHVjZSBhIG5ldyBzdHJlYW0gd2hpY2gKICAgKiB0cmFuc2Zvcm1zIHRoZSBzdHJlYW0ncyB2YWx1ZSBpbmNyZW1lbnRhbGx5IChwZXJoYXBzIHVzaW5nCiAgICogW0NvbnZlcnRlci5zdGFydENodW5rZWRDb252ZXJzaW9uXSkuIFRoZSByZXN1bHRpbmcgc3RyZWFtCiAgICogbWF5IGFnYWluIGJlIGNodW5rcyBvZiB0aGUgcmVzdWx0LCBidXQgZG9lcyBub3QgaGF2ZSB0bwogICAqIGNvcnJlc3BvbmQgdG8gc3BlY2lmaWMgZXZlbnRzIGZyb20gdGhlIHNvdXJjZSBzdHJpbmcuCiAgICovCiAgU3RyZWFtPFM+IHRyYW5zZm9ybTxTPihTdHJlYW1UcmFuc2Zvcm1lcjxULCBTPiBzdHJlYW1UcmFuc2Zvcm1lcikgewogICAgcmV0dXJuIHN0cmVhbVRyYW5zZm9ybWVyLmJpbmQodGhpcyk7CiAgfQoKICAvKioKICAgKiBDb21iaW5lcyBhIHNlcXVlbmNlIG9mIHZhbHVlcyBieSByZXBlYXRlZGx5IGFwcGx5aW5nIFtjb21iaW5lXS4KICAgKgogICAqIFNpbWlsYXIgdG8gW0l0ZXJhYmxlLnJlZHVjZV0sIHRoaXMgZnVuY3Rpb24gbWFpbnRhaW5zIGEgdmFsdWUsCiAgICogc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGlzIHN0cmVhbQogICAqIGFuZCB1cGRhdGVkIGZvciBlYWNoIGZ1cnRoZXIgZWxlbWVudCBvZiB0aGlzIHN0cmVhbS4KICAgKiBGb3IgZWFjaCBlbGVtZW50IGFmdGVyIHRoZSBmaXJzdCwKICAgKiB0aGUgdmFsdWUgaXMgdXBkYXRlZCB0byB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgW2NvbWJpbmVdCiAgICogd2l0aCB0aGUgcHJldmlvdXMgdmFsdWUgYW5kIHRoZSBlbGVtZW50LgogICAqCiAgICogV2hlbiB0aGlzIHN0cmVhbSBpcyBkb25lLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoCiAgICogdGhlIHZhbHVlIGF0IHRoYXQgdGltZS4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGlzIGVtcHR5LCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoCiAgICogYW4gZXJyb3IuCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsIG9yIHRoZSBjYWxsIHRvIFtjb21iaW5lXSB0aHJvd3MsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIGlzIHN0b3BwZWQuCiAgICovCiAgRnV0dXJlPFQ+IHJlZHVjZShUIGNvbWJpbmUoVCBwcmV2aW91cywgVCBlbGVtZW50KSkgewogICAgX0Z1dHVyZTxUPiByZXN1bHQgPSBuZXcgX0Z1dHVyZTxUPigpOwogICAgYm9vbCBzZWVuRmlyc3QgPSBmYWxzZTsKICAgIFQgdmFsdWU7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgZWxlbWVudCkgewogICAgICAgICAgaWYgKHNlZW5GaXJzdCkgewogICAgICAgICAgICBfcnVuVXNlckNvZGUoKCkgPT4gY29tYmluZSh2YWx1ZSwgZWxlbWVudCksIChUIG5ld1ZhbHVlKSB7CiAgICAgICAgICAgICAgdmFsdWUgPSBuZXdWYWx1ZTsKICAgICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIHJlc3VsdCkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFsdWUgPSBlbGVtZW50OwogICAgICAgICAgICBzZWVuRmlyc3QgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogcmVzdWx0Ll9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgaWYgKCFzZWVuRmlyc3QpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAvLyBUaHJvdyBhbmQgcmVjYXRjaCwgaW5zdGVhZCBvZiBqdXN0IGRvaW5nCiAgICAgICAgICAgICAgLy8gIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrLCBlLCB0aGVFcnJvciwgU3RhY2tUcmFjZS5jdXJyZW50KSwKICAgICAgICAgICAgICAvLyB0byBlbnN1cmUgdGhhdCB0aGUgc3RhY2tUcmFjZSBpcyBzZXQgb24gdGhlIGVycm9yLgogICAgICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgICAgX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2socmVzdWx0LCBlLCBzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZSh2YWx1ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBDb21iaW5lcyBhIHNlcXVlbmNlIG9mIHZhbHVlcyBieSByZXBlYXRlZGx5IGFwcGx5aW5nIFtjb21iaW5lXS4KICAgKgogICAqIFNpbWlsYXIgdG8gW0l0ZXJhYmxlLmZvbGRdLCB0aGlzIGZ1bmN0aW9uIG1haW50YWlucyBhIHZhbHVlLAogICAqIHN0YXJ0aW5nIHdpdGggW2luaXRpYWxWYWx1ZV0gYW5kIHVwZGF0ZWQgZm9yIGVhY2ggZWxlbWVudCBvZgogICAqIHRoaXMgc3RyZWFtLgogICAqIEZvciBlYWNoIGVsZW1lbnQsIHRoZSB2YWx1ZSBpcyB1cGRhdGVkIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZwogICAqIFtjb21iaW5lXSB3aXRoIHRoZSBwcmV2aW91cyB2YWx1ZSBhbmQgdGhlIGVsZW1lbnQuCiAgICoKICAgKiBXaGVuIHRoaXMgc3RyZWFtIGlzIGRvbmUsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGgKICAgKiB0aGUgdmFsdWUgYXQgdGhhdCB0aW1lLgogICAqIEZvciBhbiBlbXB0eSBzdHJlYW0sIHRoZSBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggW2luaXRpYWxWYWx1ZV0uCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciwgb3IgdGhlIGNhbGwgdG8gW2NvbWJpbmVdIHRocm93cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IsCiAgICogYW5kIHByb2Nlc3NpbmcgaXMgc3RvcHBlZC4KICAgKi8KICBGdXR1cmU8Uz4gZm9sZDxTPihTIGluaXRpYWxWYWx1ZSwgUyBjb21iaW5lKFMgcHJldmlvdXMsIFQgZWxlbWVudCkpIHsKICAgIF9GdXR1cmU8Uz4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8Uz4oKTsKICAgIFMgdmFsdWUgPSBpbml0aWFsVmFsdWU7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgZWxlbWVudCkgewogICAgICAgICAgX3J1blVzZXJDb2RlKCgpID0+IGNvbWJpbmUodmFsdWUsIGVsZW1lbnQpLCAoUyBuZXdWYWx1ZSkgewogICAgICAgICAgICB2YWx1ZSA9IG5ld1ZhbHVlOwogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIHJlc3VsdCkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogcmVzdWx0Ll9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZSh2YWx1ZSk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBDb21iaW5lcyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGVsZW1lbnRzIGludG8gYSBzaW5nbGUgc3RyaW5nLgogICAqCiAgICogRWFjaCBlbGVtZW50IGlzIGNvbnZlcnRlZCB0byBhIHN0cmluZyB1c2luZyBpdHMgW09iamVjdC50b1N0cmluZ10gbWV0aG9kLgogICAqIElmIFtzZXBhcmF0b3JdIGlzIHByb3ZpZGVkLCBpdCBpcyBpbnNlcnRlZCBiZXR3ZWVuIGVsZW1lbnQgc3RyaW5nCiAgICogcmVwcmVzZW50YXRpb25zLgogICAqCiAgICogVGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgY29tYmluZWQgc3RyaW5nIHdoZW4gdGhpcyBzdHJlYW0KICAgKiBpcyBkb25lLgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsIG9yIHRoZSBjYWxsIHRvIFtPYmplY3QudG9TdHJpbmddIHRocm93cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IsCiAgICogYW5kIHByb2Nlc3Npbmcgc3RvcHMuCiAgICovCiAgRnV0dXJlPFN0cmluZz4gam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgX0Z1dHVyZTxTdHJpbmc+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFN0cmluZz4oKTsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgYm9vbCBmaXJzdCA9IHRydWU7CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCBlbGVtZW50KSB7CiAgICAgICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgICAgIGJ1ZmZlci53cml0ZShzZXBhcmF0b3IpOwogICAgICAgICAgfQogICAgICAgICAgZmlyc3QgPSBmYWxzZTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGJ1ZmZlci53cml0ZShlbGVtZW50KTsKICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgX2NhbmNlbEFuZEVycm9yV2l0aFJlcGxhY2VtZW50KHN1YnNjcmlwdGlvbiwgcmVzdWx0LCBlLCBzKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIG9uRXJyb3I6IHJlc3VsdC5fY29tcGxldGVFcnJvciwKICAgICAgICBvbkRvbmU6ICgpIHsKICAgICAgICAgIHJlc3VsdC5fY29tcGxldGUoYnVmZmVyLnRvU3RyaW5nKCkpOwogICAgICAgIH0sCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIFtuZWVkbGVdIG9jY3VycyBpbiB0aGUgZWxlbWVudHMgcHJvdmlkZWQgYnkgdGhpcyBzdHJlYW0uCiAgICoKICAgKiBDb21wYXJlcyBlYWNoIGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0gdG8gW25lZWRsZV0gdXNpbmcgW09iamVjdC49PV0uCiAgICogSWYgYW4gZXF1YWwgZWxlbWVudCBpcyBmb3VuZCwgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCBgdHJ1ZWAuCiAgICogSWYgdGhpcyBzdHJlYW0gZW5kcyB3aXRob3V0IGZpbmRpbmcgYSBtYXRjaCwgdGhlIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aAogICAqIGBmYWxzZWAuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciwgb3IgdGhlIGNhbGwgdG8gW09iamVjdC49PV0gdGhyb3dzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvciwKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKi8KICBGdXR1cmU8Ym9vbD4gY29udGFpbnMoT2JqZWN0IG5lZWRsZSkgewogICAgX0Z1dHVyZTxib29sPiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxib29sPigpOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbjsKICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKAogICAgICAgIChUIGVsZW1lbnQpIHsKICAgICAgICAgIF9ydW5Vc2VyQ29kZSgoKSA9PiAoZWxlbWVudCA9PSBuZWVkbGUpLCAoYm9vbCBpc01hdGNoKSB7CiAgICAgICAgICAgIGlmIChpc01hdGNoKSB7CiAgICAgICAgICAgICAgX2NhbmNlbEFuZFZhbHVlKHN1YnNjcmlwdGlvbiwgZnV0dXJlLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShmYWxzZSk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBFeGVjdXRlcyBbYWN0aW9uXSBvbiBlYWNoIGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0uCiAgICoKICAgKiBDb21wbGV0ZXMgdGhlIHJldHVybmVkIFtGdXR1cmVdIHdoZW4gYWxsIGVsZW1lbnRzIG9mIHRoaXMgc3RyZWFtCiAgICogaGF2ZSBiZWVuIHByb2Nlc3NlZC4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yLCBvciBpZiB0aGUgY2FsbCB0byBbYWN0aW9uXSB0aHJvd3MsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqLwogIEZ1dHVyZSBmb3JFYWNoKHZvaWQgYWN0aW9uKFQgZWxlbWVudCkpIHsKICAgIF9GdXR1cmUgZnV0dXJlID0gbmV3IF9GdXR1cmUoKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCBlbGVtZW50KSB7CiAgICAgICAgICAvLyBUT0RPKGZsb2l0c2NoKTogdGhlIHR5cGUgc2hvdWxkIGJlICd2b2lkJyBhbmQgaW5mZXJyZWQuCiAgICAgICAgICBfcnVuVXNlckNvZGU8ZHluYW1pYz4oKCkgPT4gYWN0aW9uKGVsZW1lbnQpLCAoXykge30sCiAgICAgICAgICAgICAgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShudWxsKTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIENoZWNrcyB3aGV0aGVyIFt0ZXN0XSBhY2NlcHRzIGFsbCBlbGVtZW50cyBwcm92aWRlZCBieSB0aGlzIHN0cmVhbS4KICAgKgogICAqIENhbGxzIFt0ZXN0XSBvbiBlYWNoIGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0uCiAgICogSWYgdGhlIGNhbGwgcmV0dXJucyBgZmFsc2VgLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGBmYWxzZWAKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVuZHMgd2l0aG91dCBmaW5kaW5nIGFuIGVsZW1lbnQgdGhhdCBbdGVzdF0gcmVqZWN0cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGB0cnVlYC4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yLCBvciBpZiB0aGUgY2FsbCB0byBbdGVzdF0gdGhyb3dzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvciwKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKi8KICBGdXR1cmU8Ym9vbD4gZXZlcnkoYm9vbCB0ZXN0KFQgZWxlbWVudCkpIHsKICAgIF9GdXR1cmU8Ym9vbD4gZnV0dXJlID0gbmV3IF9GdXR1cmU8Ym9vbD4oKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCBlbGVtZW50KSB7CiAgICAgICAgICBfcnVuVXNlckNvZGUoKCkgPT4gdGVzdChlbGVtZW50KSwgKGJvb2wgaXNNYXRjaCkgewogICAgICAgICAgICBpZiAoIWlzTWF0Y2gpIHsKICAgICAgICAgICAgICBfY2FuY2VsQW5kVmFsdWUoc3Vic2NyaXB0aW9uLCBmdXR1cmUsIGZhbHNlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZSh0cnVlKTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIENoZWNrcyB3aGV0aGVyIFt0ZXN0XSBhY2NlcHRzIGFueSBlbGVtZW50IHByb3ZpZGVkIGJ5IHRoaXMgc3RyZWFtLgogICAqCiAgICogQ2FsbHMgW3Rlc3RdIG9uIGVhY2ggZWxlbWVudCBvZiB0aGlzIHN0cmVhbS4KICAgKiBJZiB0aGUgY2FsbCByZXR1cm5zIGB0cnVlYCwgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCBgdHJ1ZWAKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVuZHMgd2l0aG91dCBmaW5kaW5nIGFuIGVsZW1lbnQgdGhhdCBbdGVzdF0gYWNjZXB0cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGBmYWxzZWAuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciwgb3IgaWYgdGhlIGNhbGwgdG8gW3Rlc3RdIHRocm93cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IsCiAgICogYW5kIHByb2Nlc3Npbmcgc3RvcHMuCiAgICovCiAgRnV0dXJlPGJvb2w+IGFueShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgX0Z1dHVyZTxib29sPiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxib29sPigpOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbjsKICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKAogICAgICAgIChUIGVsZW1lbnQpIHsKICAgICAgICAgIF9ydW5Vc2VyQ29kZSgoKSA9PiB0ZXN0KGVsZW1lbnQpLCAoYm9vbCBpc01hdGNoKSB7CiAgICAgICAgICAgIGlmIChpc01hdGNoKSB7CiAgICAgICAgICAgICAgX2NhbmNlbEFuZFZhbHVlKHN1YnNjcmlwdGlvbiwgZnV0dXJlLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShmYWxzZSk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoaXMgc3RyZWFtLgogICAqCiAgICogV2FpdHMgZm9yIGFsbCBlbGVtZW50cyBvZiB0aGlzIHN0cmVhbS4gV2hlbiB0aGlzIHN0cmVhbSBlbmRzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhlIG51bWJlciBvZiBlbGVtZW50cy4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvciwKICAgKiBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGxpc3RlbnMgdG8gdGhpcyBzdHJlYW0sIGFuZCBhIG5vbi1icm9hZGNhc3Qgc3RyZWFtIGNhbm5vdAogICAqIGJlIHJldXNlZCBhZnRlciBmaW5kaW5nIGl0cyBsZW5ndGguCiAgICovCiAgRnV0dXJlPGludD4gZ2V0IGxlbmd0aCB7CiAgICBfRnV0dXJlPGludD4gZnV0dXJlID0gbmV3IF9GdXR1cmU8aW50PigpOwogICAgaW50IGNvdW50ID0gMDsKICAgIHRoaXMubGlzdGVuKAogICAgICAgIChfKSB7CiAgICAgICAgICBjb3VudCsrOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShjb3VudCk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBXaGV0aGVyIHRoaXMgc3RyZWFtIGNvbnRhaW5zIGFueSBlbGVtZW50cy4KICAgKgogICAqIFdhaXRzIGZvciB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGlzIHN0cmVhbSwgdGhlbiBjb21wbGV0ZXMgdGhlIHJldHVybmVkCiAgICogZnV0dXJlIHdpdGggYHRydWVgLgogICAqIElmIHRoaXMgc3RyZWFtIGVuZHMgd2l0aG91dCBlbWl0dGluZyBhbnkgZWxlbWVudHMsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMKICAgKiBjb21wbGV0ZWQgd2l0aCBgZmFsc2VgLgogICAqCiAgICogSWYgdGhlIGZpcnN0IGV2ZW50IGlzIGFuIGVycm9yLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQKICAgKiBlcnJvci4KICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGxpc3RlbnMgdG8gdGhpcyBzdHJlYW0sIGFuZCBhIG5vbi1icm9hZGNhc3Qgc3RyZWFtIGNhbm5vdAogICAqIGJlIHJldXNlZCBhZnRlciBjaGVja2luZyB3aGV0aGVyIGl0IGlzIGVtcHR5LgogICAqLwogIEZ1dHVyZTxib29sPiBnZXQgaXNFbXB0eSB7CiAgICBfRnV0dXJlPGJvb2w+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPGJvb2w+KCk7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKF8pIHsKICAgICAgICAgIF9jYW5jZWxBbmRWYWx1ZShzdWJzY3JpcHRpb24sIGZ1dHVyZSwgZmFsc2UpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZSh0cnVlKTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIEFkYXB0IHRoaXMgc3RyZWFtIHRvIGJlIGEgYFN0cmVhbTxSPmAuCiAgICoKICAgKiBUaGlzIHN0cmVhbSBpcyB3cmFwcGVkIGFzIGEgYFN0cmVhbTxSPmAgd2hpY2ggY2hlY2tzIGF0IHJ1bi10aW1lIHRoYXQKICAgKiBlYWNoIGRhdGEgZXZlbnQgZW1pdHRlZCBieSB0aGlzIHN0cmVhbSBpcyBhbHNvIGFuIGluc3RhbmNlIG9mIFtSXS4KICAgKi8KICBTdHJlYW08Uj4gY2FzdDxSPigpID0+IFN0cmVhbS5jYXN0RnJvbTxULCBSPih0aGlzKTsKICAvKioKICAgKiBDb2xsZWN0cyBhbGwgZWxlbWVudHMgb2YgdGhpcyBzdHJlYW0gaW4gYSBbTGlzdF0uCiAgICoKICAgKiBDcmVhdGVzIGEgYExpc3Q8VD5gIGFuZCBhZGRzIGFsbCBlbGVtZW50cyBvZiB0aGlzIHN0cmVhbSB0byB0aGUgbGlzdAogICAqIGluIHRoZSBvcmRlciB0aGV5IGFycml2ZS4KICAgKiBXaGVuIHRoaXMgc3RyZWFtIGVuZHMsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBsaXN0LgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqLwogIEZ1dHVyZTxMaXN0PFQ+PiB0b0xpc3QoKSB7CiAgICBMaXN0PFQ+IHJlc3VsdCA9IDxUPltdOwogICAgX0Z1dHVyZTxMaXN0PFQ+PiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxMaXN0PFQ+PigpOwogICAgdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgZGF0YSkgewogICAgICAgICAgcmVzdWx0LmFkZChkYXRhKTsKICAgICAgICB9LAogICAgICAgIG9uRXJyb3I6IGZ1dHVyZS5fY29tcGxldGVFcnJvciwKICAgICAgICBvbkRvbmU6ICgpIHsKICAgICAgICAgIGZ1dHVyZS5fY29tcGxldGUocmVzdWx0KTsKICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIENvbGxlY3RzIHRoZSBkYXRhIG9mIHRoaXMgc3RyZWFtIGluIGEgW1NldF0uCiAgICoKICAgKiBDcmVhdGVzIGEgYFNldDxUPmAgYW5kIGFkZHMgYWxsIGVsZW1lbnRzIG9mIHRoaXMgc3RyZWFtIHRvIHRoZSBzZXQuCiAgICogaW4gdGhlIG9yZGVyIHRoZXkgYXJyaXZlLgogICAqIFdoZW4gdGhpcyBzdHJlYW0gZW5kcywgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IHNldC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzZXQgaXMgdGhlIHNhbWUgdHlwZSBhcyByZXR1cm5lZCBieSBgbmV3IFNldDxUPigpYC4KICAgKiBJZiBhbm90aGVyIHR5cGUgb2Ygc2V0IGlzIG5lZWRlZCwgZWl0aGVyIHVzZSBbZm9yRWFjaF0gdG8gYWRkIGVhY2gKICAgKiBlbGVtZW50IHRvIHRoZSBzZXQsIG9yIHVzZQogICAqIGB0b0xpc3QoKS50aGVuKChsaXN0KSA9PiBuZXcgU29tZU90aGVyU2V0LmZyb20obGlzdCkpYAogICAqIHRvIGNyZWF0ZSB0aGUgc2V0LgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqLwogIEZ1dHVyZTxTZXQ8VD4+IHRvU2V0KCkgewogICAgU2V0PFQ+IHJlc3VsdCA9IG5ldyBTZXQ8VD4oKTsKICAgIF9GdXR1cmU8U2V0PFQ+PiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxTZXQ8VD4+KCk7CiAgICB0aGlzLmxpc3RlbigKICAgICAgICAoVCBkYXRhKSB7CiAgICAgICAgICByZXN1bHQuYWRkKGRhdGEpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShyZXN1bHQpOwogICAgICAgIH0sCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICByZXR1cm4gZnV0dXJlOwogIH0KCiAgLyoqCiAgICogRGlzY2FyZHMgYWxsIGRhdGEgb24gdGhpcyBzdHJlYW0sIGJ1dCBzaWduYWxzIHdoZW4gaXQgaXMgZG9uZSBvciBhbiBlcnJvcgogICAqIG9jY3VycmVkLgogICAqCiAgICogV2hlbiBzdWJzY3JpYmluZyB1c2luZyBbZHJhaW5dLCBjYW5jZWxPbkVycm9yIHdpbGwgYmUgdHJ1ZS4gVGhpcyBtZWFucwogICAqIHRoYXQgdGhlIGZ1dHVyZSB3aWxsIGNvbXBsZXRlIHdpdGggdGhlIGZpcnN0IGVycm9yIG9uIHRoaXMgc3RyZWFtIGFuZCB0aGVuCiAgICogY2FuY2VsIHRoZSBzdWJzY3JpcHRpb24uCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IsIG9yIHRoZSBjYWxsIHRvIFtjb21iaW5lXSB0aHJvd3MsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLAogICAqIGFuZCBwcm9jZXNzaW5nIGlzIHN0b3BwZWQuCiAgICoKICAgKiBJbiBjYXNlIG9mIGEgYGRvbmVgIGV2ZW50IHRoZSBmdXR1cmUgY29tcGxldGVzIHdpdGggdGhlIGdpdmVuCiAgICogW2Z1dHVyZVZhbHVlXS4KICAgKi8KICBGdXR1cmU8RT4gZHJhaW48RT4oW0UgZnV0dXJlVmFsdWVdKSA9PgogICAgICBsaXN0ZW4obnVsbCwgY2FuY2VsT25FcnJvcjogdHJ1ZSkuYXNGdXR1cmU8RT4oZnV0dXJlVmFsdWUpOwoKICAvKioKICAgKiBQcm92aWRlcyBhdCBtb3N0IHRoZSBmaXJzdCBbY291bnRdIGRhdGEgZXZlbnRzIG9mIHRoaXMgc3RyZWFtLgogICAqCiAgICogUmV0dXJucyBhIHN0cmVhbSB0aGF0IGVtaXRzIHRoZSBzYW1lIGV2ZW50cyB0aGF0IHRoaXMgc3RyZWFtIHdvdWxkCiAgICogaWYgbGlzdGVuZWQgdG8gYXQgdGhlIHNhbWUgdGltZSwKICAgKiB1bnRpbCBlaXRoZXIgdGhpcyBzdHJlYW0gZW5kcyBvciBpdCBoYXMgZW1pdHRlZCBbY291bnRdIGRhdGEgZXZlbnRzLAogICAqIGF0IHdoaWNoIHBvaW50IHRoZSByZXR1cm5lZCBzdHJlYW0gaXMgZG9uZS4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIHByb2R1Y2VzIGZld2VyIHRoYW4gW2NvdW50XSBkYXRhIGV2ZW50cyBiZWZvcmUgaXQncyBkb25lLAogICAqIHNvIHdpbGwgdGhlIHJldHVybmVkIHN0cmVhbS4KICAgKgogICAqIFN0YXJ0cyBsaXN0ZW5pbmcgdG8gdGhpcyBzdHJlYW0gd2hlbiB0aGUgcmV0dXJuZWQgc3RyZWFtIGlzIGxpc3RlbmVkIHRvCiAgICogYW5kIHN0b3BzIGxpc3RlbmluZyB3aGVuIHRoZSBmaXJzdCBbY291bnRdIGRhdGEgZXZlbnRzIGhhdmUgYmVlbiByZWNlaXZlZC4KICAgKgogICAqIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGlzIGlzIGEgc2luZ2xlLXN1YnNjcmlwdGlvbiAobm9uLWJyb2FkY2FzdCkgc3RyZWFtcwogICAqIGl0IGNhbm5vdCBiZSByZXVzZWQgYWZ0ZXIgdGhlIHJldHVybmVkIHN0cmVhbSBoYXMgYmVlbiBsaXN0ZW5lZCB0by4KICAgKgogICAqIElmIHRoaXMgaXMgYSBicm9hZGNhc3Qgc3RyZWFtLCB0aGUgcmV0dXJuZWQgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbS4KICAgKiBJbiB0aGF0IGNhc2UsIHRoZSBldmVudHMgYXJlIG9ubHkgY291bnRlZCBmcm9tIHRoZSB0aW1lCiAgICogdGhlIHJldHVybmVkIHN0cmVhbSBpcyBsaXN0ZW5lZCB0by4KICAgKi8KICBTdHJlYW08VD4gdGFrZShpbnQgY291bnQpIHsKICAgIHJldHVybiBuZXcgX1Rha2VTdHJlYW08VD4odGhpcywgY291bnQpOwogIH0KCiAgLyoqCiAgICogRm9yd2FyZHMgZGF0YSBldmVudHMgd2hpbGUgW3Rlc3RdIGlzIHN1Y2Nlc3NmdWwuCiAgICoKICAgKiBSZXR1cm5zIGEgc3RyZWFtIHRoYXQgcHJvdmlkZXMgdGhlIHNhbWUgZXZlbnRzIGFzIHRoaXMgc3RyZWFtCiAgICogdW50aWwgW3Rlc3RdIGZhaWxzIGZvciBhIGRhdGEgZXZlbnQuCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBkb25lIHdoZW4gZWl0aGVyIHRoaXMgc3RyZWFtIGlzIGRvbmUsCiAgICogb3Igd2hlbiB0aGlzIHN0cmVhbSBmaXJzdCBlbWl0cyBhIGRhdGEgZXZlbnQgdGhhdCBmYWlscyBbdGVzdF0uCiAgICoKICAgKiBUaGUgYHRlc3RgIGNhbGwgaXMgY29uc2lkZXJlZCBmYWlsaW5nIGlmIGl0IHJldHVybnMgYSBub24tYHRydWVgIHZhbHVlCiAgICogb3IgaWYgaXQgdGhyb3dzLiBJZiB0aGUgYHRlc3RgIGNhbGwgdGhyb3dzLCB0aGUgZXJyb3IgaXMgZW1pdHRlZCBhcyB0aGUKICAgKiBsYXN0IGV2ZW50IG9uIHRoZSByZXR1cm5lZCBzdHJlYW1zLgogICAqCiAgICogU3RvcHMgbGlzdGVuaW5nIHRvIHRoaXMgc3RyZWFtIGFmdGVyIHRoZSBhY2NlcHRlZCBlbGVtZW50cy4KICAgKgogICAqIEludGVybmFsbHkgdGhlIG1ldGhvZCBjYW5jZWxzIGl0cyBzdWJzY3JpcHRpb24gYWZ0ZXIgdGhlc2UgZWxlbWVudHMuIFRoaXMKICAgKiBtZWFucyB0aGF0IHNpbmdsZS1zdWJzY3JpcHRpb24gKG5vbi1icm9hZGNhc3QpIHN0cmVhbXMgYXJlIGNsb3NlZCBhbmQKICAgKiBjYW5ub3QgYmUgcmV1c2VkIGFmdGVyIGEgY2FsbCB0byB0aGlzIG1ldGhvZC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqIEZvciBhIGJyb2FkY2FzdCBzdHJlYW0sIHRoZSBldmVudHMgYXJlIG9ubHkgdGVzdGVkIGZyb20gdGhlIHRpbWUKICAgKiB0aGUgcmV0dXJuZWQgc3RyZWFtIGlzIGxpc3RlbmVkIHRvLgogICAqLwogIFN0cmVhbTxUPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KFQgZWxlbWVudCkpIHsKICAgIHJldHVybiBuZXcgX1Rha2VXaGlsZVN0cmVhbTxUPih0aGlzLCB0ZXN0KTsKICB9CgogIC8qKgogICAqIFNraXBzIHRoZSBmaXJzdCBbY291bnRdIGRhdGEgZXZlbnRzIGZyb20gdGhpcyBzdHJlYW0uCiAgICoKICAgKiBSZXR1cm5zIGEgc3RyZWFtIHRoYXQgZW1pdHMgdGhlIHNhbWUgZXZlbnRzIGFzIHRoaXMgc3RyZWFtIHdvdWxkCiAgICogaWYgbGlzdGVuZWQgdG8gYXQgdGhlIHNhbWUgdGltZSwgZXhjZXB0IHRoYXQgdGhlIGZpcnN0IFtjb3VudF0KICAgKiBkYXRhIGV2ZW50cyBhcmUgbm90IGVtaXR0ZWQuCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBkb25lIHdoZW4gdGhpcyBzdHJlYW0gaXMuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBmZXdlciB0aGFuIFtjb3VudF0gZGF0YSBldmVudHMKICAgKiBiZWZvcmUgYmVpbmcgZG9uZSwgdGhlIHJldHVybmVkIHN0cmVhbSBlbWl0cyBubyBkYXRhIGV2ZW50cy4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gaXMgYSBicm9hZGNhc3Qgc3RyZWFtIGlmIHRoaXMgc3RyZWFtIGlzLgogICAqIEZvciBhIGJyb2FkY2FzdCBzdHJlYW0sIHRoZSBldmVudHMgYXJlIG9ubHkgY291bnRlZCBmcm9tIHRoZSB0aW1lCiAgICogdGhlIHJldHVybmVkIHN0cmVhbSBpcyBsaXN0ZW5lZCB0by4KICAgKi8KICBTdHJlYW08VD4gc2tpcChpbnQgY291bnQpIHsKICAgIHJldHVybiBuZXcgX1NraXBTdHJlYW08VD4odGhpcywgY291bnQpOwogIH0KCiAgLyoqCiAgICogU2tpcCBkYXRhIGV2ZW50cyBmcm9tIHRoaXMgc3RyZWFtIHdoaWxlIHRoZXkgYXJlIG1hdGNoZWQgYnkgW3Rlc3RdLgogICAqCiAgICogUmV0dXJucyBhIHN0cmVhbSB0aGF0IGVtaXRzIHRoZSBzYW1lIGV2ZW50cyBhcyB0aGlzIHN0cmVhbSwKICAgKiBleGNlcHQgdGhhdCBkYXRhIGV2ZW50cyBhcmUgbm90IGVtaXR0ZWQgdW50aWwgYSBkYXRhIGV2ZW50IGZhaWxzIGB0ZXN0YC4KICAgKiBUaGUgdGVzdCBmYWlscyB3aGVuIGNhbGxlZCB3aXRoIGEgZGF0YSBldmVudAogICAqIGlmIGl0IHJldHVybnMgYSBub24tYHRydWVgIHZhbHVlIG9yIGlmIHRoZSBjYWxsIHRvIGB0ZXN0YCB0aHJvd3MuCiAgICogSWYgdGhlIGNhbGwgdGhyb3dzLCB0aGUgZXJyb3IgaXMgZW1pdHRlZCBhcyBhbiBlcnJvciBldmVudAogICAqIG9uIHRoZSByZXR1cm5lZCBzdHJlYW0gaW5zdGVhZCBvZiB0aGUgZGF0YSBldmVudCwKICAgKiBvdGhlcndpc2UgdGhlIGV2ZW50IHRoYXQgbWFkZSBgdGVzdGAgcmV0dXJuIG5vbi10cnVlIGlzIGVtaXR0ZWQgYXMgdGhlCiAgICogZmlyc3QgZGF0YSBldmVudC4KICAgKgogICAqIEVycm9yIGFuZCBkb25lIGV2ZW50cyBhcmUgcHJvdmlkZWQgYnkgdGhlIHJldHVybmVkIHN0cmVhbSB1bm1vZGlmaWVkLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICogRm9yIGEgYnJvYWRjYXN0IHN0cmVhbSwgdGhlIGV2ZW50cyBhcmUgb25seSB0ZXN0ZWQgZnJvbSB0aGUgdGltZQogICAqIHRoZSByZXR1cm5lZCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8uCiAgICovCiAgU3RyZWFtPFQ+IHNraXBXaGlsZShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgcmV0dXJuIG5ldyBfU2tpcFdoaWxlU3RyZWFtPFQ+KHRoaXMsIHRlc3QpOwogIH0KCiAgLyoqCiAgICogU2tpcHMgZGF0YSBldmVudHMgaWYgdGhleSBhcmUgZXF1YWwgdG8gdGhlIHByZXZpb3VzIGRhdGEgZXZlbnQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIHByb3ZpZGVzIHRoZSBzYW1lIGV2ZW50cyBhcyB0aGlzIHN0cmVhbSwgZXhjZXB0CiAgICogdGhhdCBpdCBuZXZlciBwcm92aWRlcyB0d28gY29uc2VjdXRpdmUgZGF0YSBldmVudHMgdGhhdCBhcmUgZXF1YWwuCiAgICogVGhhdCBpcywgZXJyb3JzIGFyZSBwYXNzZWQgdGhyb3VnaCB0byB0aGUgcmV0dXJuZWQgc3RyZWFtLCBhbmQKICAgKiBkYXRhIGV2ZW50cyBhcmUgcGFzc2VkIHRocm91Z2ggaWYgdGhleSBhcmUgZGlzdGluY3QgZnJvbSB0aGUgbW9zdAogICAqIHJlY2VudGx5IGVtaXR0ZWQgZGF0YSBldmVudC4KICAgKgogICAqIEVxdWFsaXR5IGlzIGRldGVybWluZWQgYnkgdGhlIHByb3ZpZGVkIFtlcXVhbHNdIG1ldGhvZC4gSWYgdGhhdCBpcwogICAqIG9taXR0ZWQsIHRoZSAnPT0nIG9wZXJhdG9yIG9uIHRoZSBsYXN0IHByb3ZpZGVkIGRhdGEgZWxlbWVudCBpcyB1c2VkLgogICAqCiAgICogSWYgW2VxdWFsc10gdGhyb3dzLCB0aGUgZGF0YSBldmVudCBpcyByZXBsYWNlZCBieSBhbiBlcnJvciBldmVudAogICAqIGNvbnRhaW5pbmcgdGhlIHRocm93biBlcnJvci4gVGhlIGJlaGF2aW9yIGlzIGVxdWl2YWxlbnQgdG8gdGhlCiAgICogb3JpZ2luYWwgc3RyZWFtIGVtaXR0aW5nIHRoZSBlcnJvciBldmVudCwgYW5kIGl0IGRvZXNuJ3QgY2hhbmdlCiAgICogdGhlIHdoYXQgdGhlIG1vc3QgcmVjZW50bHkgZW1pdHRlZCBkYXRhIGV2ZW50IGlzLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICogSWYgYSBicm9hZGNhc3Qgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIG1vcmUgdGhhbiBvbmNlLCBlYWNoIHN1YnNjcmlwdGlvbgogICAqIHdpbGwgaW5kaXZpZHVhbGx5IHBlcmZvcm0gdGhlIGBlcXVhbHNgIHRlc3QuCiAgICovCiAgU3RyZWFtPFQ+IGRpc3RpbmN0KFtib29sIGVxdWFscyhUIHByZXZpb3VzLCBUIG5leHQpXSkgewogICAgcmV0dXJuIG5ldyBfRGlzdGluY3RTdHJlYW08VD4odGhpcywgZXF1YWxzKTsKICB9CgogIC8qKgogICAqIFRoZSBmaXJzdCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtLgogICAqCiAgICogU3RvcHMgbGlzdGVuaW5nIHRvIHRoaXMgc3RyZWFtIGFmdGVyIHRoZSBmaXJzdCBlbGVtZW50IGhhcyBiZWVuIHJlY2VpdmVkLgogICAqCiAgICogSW50ZXJuYWxseSB0aGUgbWV0aG9kIGNhbmNlbHMgaXRzIHN1YnNjcmlwdGlvbiBhZnRlciB0aGUgZmlyc3QgZWxlbWVudC4KICAgKiBUaGlzIG1lYW5zIHRoYXQgc2luZ2xlLXN1YnNjcmlwdGlvbiAobm9uLWJyb2FkY2FzdCkgc3RyZWFtcyBhcmUgY2xvc2VkCiAgICogYW5kIGNhbm5vdCBiZSByZXVzZWQgYWZ0ZXIgYSBjYWxsIHRvIHRoaXMgZ2V0dGVyLgogICAqCiAgICogSWYgYW4gZXJyb3IgZXZlbnQgb2NjdXJzIGJlZm9yZSB0aGUgZmlyc3QgZGF0YSBldmVudCwgdGhlIHJldHVybmVkIGZ1dHVyZQogICAqIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBpcyBlbXB0eSAoYSBkb25lIGV2ZW50IG9jY3VycyBiZWZvcmUgdGhlIGZpcnN0IGRhdGEgZXZlbnQpLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXJyb3IuCiAgICoKICAgKiBFeGNlcHQgZm9yIHRoZSB0eXBlIG9mIHRoZSBlcnJvciwgdGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0bwogICAqIGB0aGlzLmVsZW1lbnRBdCgwKWAuCiAgICovCiAgRnV0dXJlPFQ+IGdldCBmaXJzdCB7CiAgICBfRnV0dXJlPFQ+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgdmFsdWUpIHsKICAgICAgICAgIF9jYW5jZWxBbmRWYWx1ZShzdWJzY3JpcHRpb24sIGZ1dHVyZSwgdmFsdWUpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBUaGUgbGFzdCBlbGVtZW50IG9mIHRoaXMgc3RyZWFtLgogICAqCiAgICogSWYgdGhpcyBzdHJlYW0gZW1pdHMgYW4gZXJyb3IgZXZlbnQsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yCiAgICogYW5kIHByb2Nlc3Npbmcgc3RvcHMuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBpcyBlbXB0eSAodGhlIGRvbmUgZXZlbnQgaXMgdGhlIGZpcnN0IGV2ZW50KSwKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLgogICAqLwogIEZ1dHVyZTxUPiBnZXQgbGFzdCB7CiAgICBfRnV0dXJlPFQ+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBUIHJlc3VsdDsKICAgIGJvb2wgZm91bmRSZXN1bHQgPSBmYWxzZTsKICAgIGxpc3RlbigKICAgICAgICAoVCB2YWx1ZSkgewogICAgICAgICAgZm91bmRSZXN1bHQgPSB0cnVlOwogICAgICAgICAgcmVzdWx0ID0gdmFsdWU7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBpZiAoZm91bmRSZXN1bHQpIHsKICAgICAgICAgICAgZnV0dXJlLl9jb21wbGV0ZShyZXN1bHQpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2soZnV0dXJlLCBlLCBzKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9CgogIC8qKgogICAqIFRoZSBzaW5nbGUgZWxlbWVudCBvZiB0aGlzIHN0cmVhbS4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yIGV2ZW50LAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCBlcnJvcgogICAqIGFuZCBwcm9jZXNzaW5nIHN0b3BzLgogICAqCiAgICogSWYgW3RoaXNdIGlzIGVtcHR5IG9yIGhhcyBtb3JlIHRoYW4gb25lIGVsZW1lbnQsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvci4KICAgKi8KICBGdXR1cmU8VD4gZ2V0IHNpbmdsZSB7CiAgICBfRnV0dXJlPFQ+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBUIHJlc3VsdDsKICAgIGJvb2wgZm91bmRSZXN1bHQgPSBmYWxzZTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24gPSB0aGlzLmxpc3RlbigKICAgICAgICAoVCB2YWx1ZSkgewogICAgICAgICAgaWYgKGZvdW5kUmVzdWx0KSB7CiAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHNlY29uZCBlbGVtZW50IHdlIGdldC4KICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgICAgICBfY2FuY2VsQW5kRXJyb3JXaXRoUmVwbGFjZW1lbnQoc3Vic2NyaXB0aW9uLCBmdXR1cmUsIGUsIHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGZvdW5kUmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgIHJlc3VsdCA9IHZhbHVlOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgaWYgKGZvdW5kUmVzdWx0KSB7CiAgICAgICAgICAgIGZ1dHVyZS5fY29tcGxldGUocmVzdWx0KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBGaW5kcyB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGlzIHN0cmVhbSBtYXRjaGluZyBbdGVzdF0uCiAgICoKICAgKiBSZXR1cm5zIGEgZnV0dXJlIHRoYXQgaXMgY29tcGxldGVkIHdpdGggdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhpcyBzdHJlYW0KICAgKiB0aGF0IFt0ZXN0XSByZXR1cm5zIGB0cnVlYCBmb3IuCiAgICoKICAgKiBJZiBubyBzdWNoIGVsZW1lbnQgaXMgZm91bmQgYmVmb3JlIHRoaXMgc3RyZWFtIGlzIGRvbmUsIGFuZCBhCiAgICogW29yRWxzZV0gZnVuY3Rpb24gaXMgcHJvdmlkZWQsIHRoZSByZXN1bHQgb2YgY2FsbGluZyBbb3JFbHNlXQogICAqIGJlY29tZXMgdGhlIHZhbHVlIG9mIHRoZSBmdXR1cmUuIElmIFtvckVsc2VdIHRocm93cywgdGhlIHJldHVybmVkCiAgICogZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQgZXJyb3IuCiAgICoKICAgKiBJZiB0aGlzIHN0cmVhbSBlbWl0cyBhbiBlcnJvciBiZWZvcmUgdGhlIGZpcnN0IG1hdGNoaW5nIGVsZW1lbnQsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGF0IGVycm9yLCBhbmQgcHJvY2Vzc2luZyBzdG9wcy4KICAgKgogICAqIFN0b3BzIGxpc3RlbmluZyB0byB0aGlzIHN0cmVhbSBhZnRlciB0aGUgZmlyc3QgbWF0Y2hpbmcgZWxlbWVudCBvciBlcnJvcgogICAqIGhhcyBiZWVuIHJlY2VpdmVkLgogICAqCiAgICogSW50ZXJuYWxseSB0aGUgbWV0aG9kIGNhbmNlbHMgaXRzIHN1YnNjcmlwdGlvbiBhZnRlciB0aGUgZmlyc3QgZWxlbWVudCB0aGF0CiAgICogbWF0Y2hlcyB0aGUgcHJlZGljYXRlLiBUaGlzIG1lYW5zIHRoYXQgc2luZ2xlLXN1YnNjcmlwdGlvbiAobm9uLWJyb2FkY2FzdCkKICAgKiBzdHJlYW1zIGFyZSBjbG9zZWQgYW5kIGNhbm5vdCBiZSByZXVzZWQgYWZ0ZXIgYSBjYWxsIHRvIHRoaXMgbWV0aG9kLgogICAqCiAgICogSWYgYW4gZXJyb3Igb2NjdXJzLCBvciBpZiB0aGlzIHN0cmVhbSBlbmRzIHdpdGhvdXQgZmluZGluZyBhIG1hdGNoIGFuZAogICAqIHdpdGggbm8gW29yRWxzZV0gZnVuY3Rpb24gcHJvdmlkZWQsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvci4KICAgKi8KICBGdXR1cmU8VD4gZmlyc3RXaGVyZShib29sIHRlc3QoVCBlbGVtZW50KSwge1Qgb3JFbHNlKCl9KSB7CiAgICBfRnV0dXJlPFQ+IGZ1dHVyZSA9IG5ldyBfRnV0dXJlKCk7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgdmFsdWUpIHsKICAgICAgICAgIF9ydW5Vc2VyQ29kZSgoKSA9PiB0ZXN0KHZhbHVlKSwgKGJvb2wgaXNNYXRjaCkgewogICAgICAgICAgICBpZiAoaXNNYXRjaCkgewogICAgICAgICAgICAgIF9jYW5jZWxBbmRWYWx1ZShzdWJzY3JpcHRpb24sIGZ1dHVyZSwgdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FuY2VsQW5kRXJyb3JDbG9zdXJlKHN1YnNjcmlwdGlvbiwgZnV0dXJlKSk7CiAgICAgICAgfSwKICAgICAgICBvbkVycm9yOiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IsCiAgICAgICAgb25Eb25lOiAoKSB7CiAgICAgICAgICBpZiAob3JFbHNlICE9IG51bGwpIHsKICAgICAgICAgICAgX3J1blVzZXJDb2RlKG9yRWxzZSwgZnV0dXJlLl9jb21wbGV0ZSwgZnV0dXJlLl9jb21wbGV0ZUVycm9yKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBGaW5kcyB0aGUgbGFzdCBlbGVtZW50IGluIHRoaXMgc3RyZWFtIG1hdGNoaW5nIFt0ZXN0XS4KICAgKgogICAqIElmIHRoaXMgc3RyZWFtIGVtaXRzIGFuIGVycm9yLCB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoYXQKICAgKiBlcnJvciwgYW5kIHByb2Nlc3Npbmcgc3RvcHMuCiAgICoKICAgKiBPdGhlcndpc2UgYXMgW2ZpcnN0V2hlcmVdLCBleGNlcHQgdGhhdCB0aGUgbGFzdCBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kCiAgICogaW5zdGVhZCBvZiB0aGUgZmlyc3QuCiAgICogVGhhdCBtZWFucyB0aGF0IGEgbm9uLWVycm9yIHJlc3VsdCBjYW5ub3QgYmUgcHJvdmlkZWQgYmVmb3JlIHRoaXMgc3RyZWFtCiAgICogaXMgZG9uZS4KICAgKi8KICBGdXR1cmU8VD4gbGFzdFdoZXJlKGJvb2wgdGVzdChUIGVsZW1lbnQpLCB7VCBvckVsc2UoKX0pIHsKICAgIF9GdXR1cmU8VD4gZnV0dXJlID0gbmV3IF9GdXR1cmUoKTsKICAgIFQgcmVzdWx0OwogICAgYm9vbCBmb3VuZFJlc3VsdCA9IGZhbHNlOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbjsKICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKAogICAgICAgIChUIHZhbHVlKSB7CiAgICAgICAgICBfcnVuVXNlckNvZGUoKCkgPT4gdHJ1ZSA9PSB0ZXN0KHZhbHVlKSwgKGJvb2wgaXNNYXRjaCkgewogICAgICAgICAgICBpZiAoaXNNYXRjaCkgewogICAgICAgICAgICAgIGZvdW5kUmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgaWYgKGZvdW5kUmVzdWx0KSB7CiAgICAgICAgICAgIGZ1dHVyZS5fY29tcGxldGUocmVzdWx0KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG9yRWxzZSAhPSBudWxsKSB7CiAgICAgICAgICAgIF9ydW5Vc2VyQ29kZShvckVsc2UsIGZ1dHVyZS5fY29tcGxldGUsIGZ1dHVyZS5fY29tcGxldGVFcnJvcik7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgICBfY29tcGxldGVXaXRoRXJyb3JDYWxsYmFjayhmdXR1cmUsIGUsIHMpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICByZXR1cm4gZnV0dXJlOwogIH0KCiAgLyoqCiAgICogRmluZHMgdGhlIHNpbmdsZSBlbGVtZW50IGluIHRoaXMgc3RyZWFtIG1hdGNoaW5nIFt0ZXN0XS4KICAgKgogICAqIExpa2UgW2xhc3RXaGVyZV0sIGV4Y2VwdCB0aGF0IGl0IGlzIGFuIGVycm9yIGlmIG1vcmUgdGhhbiBvbmUKICAgKiBtYXRjaGluZyBlbGVtZW50IG9jY3VycyBpbiB0aGlzIHN0cmVhbS4KICAgKi8KICBGdXR1cmU8VD4gc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KFQgZWxlbWVudCksIHtUIG9yRWxzZSgpfSkgewogICAgX0Z1dHVyZTxUPiBmdXR1cmUgPSBuZXcgX0Z1dHVyZTxUPigpOwogICAgVCByZXN1bHQ7CiAgICBib29sIGZvdW5kUmVzdWx0ID0gZmFsc2U7CiAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uOwogICAgc3Vic2NyaXB0aW9uID0gdGhpcy5saXN0ZW4oCiAgICAgICAgKFQgdmFsdWUpIHsKICAgICAgICAgIF9ydW5Vc2VyQ29kZSgoKSA9PiB0cnVlID09IHRlc3QodmFsdWUpLCAoYm9vbCBpc01hdGNoKSB7CiAgICAgICAgICAgIGlmIChpc01hdGNoKSB7CiAgICAgICAgICAgICAgaWYgKGZvdW5kUmVzdWx0KSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgICAgICAgIF9jYW5jZWxBbmRFcnJvcldpdGhSZXBsYWNlbWVudChzdWJzY3JpcHRpb24sIGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGZvdW5kUmVzdWx0ID0gdHJ1ZTsKICAgICAgICAgICAgICByZXN1bHQgPSB2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbmNlbEFuZEVycm9yQ2xvc3VyZShzdWJzY3JpcHRpb24sIGZ1dHVyZSkpOwogICAgICAgIH0sCiAgICAgICAgb25FcnJvcjogZnV0dXJlLl9jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogKCkgewogICAgICAgICAgaWYgKGZvdW5kUmVzdWx0KSB7CiAgICAgICAgICAgIGZ1dHVyZS5fY29tcGxldGUocmVzdWx0KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKG9yRWxzZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgX3J1blVzZXJDb2RlKG9yRWxzZSwgZnV0dXJlLl9jb21wbGV0ZSwgZnV0dXJlLl9jb21wbGV0ZUVycm9yKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKGZ1dHVyZSwgZSwgcyk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgW2luZGV4XXRoIGRhdGEgZXZlbnQgb2YgdGhpcyBzdHJlYW0uCiAgICoKICAgKiBTdG9wcyBsaXN0ZW5pbmcgdG8gdGhpcyBzdHJlYW0gYWZ0ZXIgdGhlIFtpbmRleF10aCBkYXRhIGV2ZW50IGhhcyBiZWVuCiAgICogcmVjZWl2ZWQuCiAgICoKICAgKiBJbnRlcm5hbGx5IHRoZSBtZXRob2QgY2FuY2VscyBpdHMgc3Vic2NyaXB0aW9uIGFmdGVyIHRoZXNlIGVsZW1lbnRzLiBUaGlzCiAgICogbWVhbnMgdGhhdCBzaW5nbGUtc3Vic2NyaXB0aW9uIChub24tYnJvYWRjYXN0KSBzdHJlYW1zIGFyZSBjbG9zZWQgYW5kCiAgICogY2Fubm90IGJlIHJldXNlZCBhZnRlciBhIGNhbGwgdG8gdGhpcyBtZXRob2QuCiAgICoKICAgKiBJZiBhbiBlcnJvciBldmVudCBvY2N1cnMgYmVmb3JlIHRoZSB2YWx1ZSBpcyBmb3VuZCwgdGhlIGZ1dHVyZSBjb21wbGV0ZXMKICAgKiB3aXRoIHRoaXMgZXJyb3IuCiAgICoKICAgKiBJZiBhIGRvbmUgZXZlbnQgb2NjdXJzIGJlZm9yZSB0aGUgdmFsdWUgaXMgZm91bmQsIHRoZSBmdXR1cmUgY29tcGxldGVzCiAgICogd2l0aCBhIFtSYW5nZUVycm9yXS4KICAgKi8KICBGdXR1cmU8VD4gZWxlbWVudEF0KGludCBpbmRleCkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoaW5kZXgsICJpbmRleCIpOwogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGluZGV4LCAiaW5kZXgiKTsKICAgIF9GdXR1cmU8VD4gZnV0dXJlID0gbmV3IF9GdXR1cmU8VD4oKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb247CiAgICBpbnQgZWxlbWVudEluZGV4ID0gMDsKICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKAogICAgICAgIChUIHZhbHVlKSB7CiAgICAgICAgICBpZiAoaW5kZXggPT0gZWxlbWVudEluZGV4KSB7CiAgICAgICAgICAgIF9jYW5jZWxBbmRWYWx1ZShzdWJzY3JpcHRpb24sIGZ1dHVyZSwgdmFsdWUpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBlbGVtZW50SW5kZXggKz0gMTsKICAgICAgICB9LAogICAgICAgIG9uRXJyb3I6IGZ1dHVyZS5fY29tcGxldGVFcnJvciwKICAgICAgICBvbkRvbmU6ICgpIHsKICAgICAgICAgIGZ1dHVyZS5fY29tcGxldGVFcnJvcigKICAgICAgICAgICAgICBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4IiwgbnVsbCwgZWxlbWVudEluZGV4KSk7CiAgICAgICAgfSwKICAgICAgICBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIHJldHVybiBmdXR1cmU7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHN0cmVhbSB3aXRoIHRoZSBzYW1lIGV2ZW50cyBhcyB0aGlzIHN0cmVhbS4KICAgKgogICAqIFdoZW5ldmVyIG1vcmUgdGhhbiBbdGltZUxpbWl0XSBwYXNzZXMgYmV0d2VlbiB0d28gZXZlbnRzIGZyb20gdGhpcyBzdHJlYW0sCiAgICogdGhlIFtvblRpbWVvdXRdIGZ1bmN0aW9uIGlzIGNhbGxlZCwgd2hpY2ggY2FuIGVtaXQgZnVydGhlciBldmVudHMgb24KICAgKiB0aGUgcmV0dXJuZWQgc3RyZWFtLgogICAqCiAgICogVGhlIGNvdW50ZG93biBkb2Vzbid0IHN0YXJ0IHVudGlsIHRoZSByZXR1cm5lZCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8uCiAgICogVGhlIGNvdW50ZG93biBpcyByZXNldCBldmVyeSB0aW1lIGFuIGV2ZW50IGlzIGZvcndhcmRlZCBmcm9tIHRoaXMgc3RyZWFtLAogICAqIG9yIHdoZW4gdGhpcyBzdHJlYW0gaXMgcGF1c2VkIGFuZCByZXN1bWVkLgogICAqCiAgICogVGhlIFtvblRpbWVvdXRdIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aXRoIG9uZSBhcmd1bWVudDogYW4KICAgKiBbRXZlbnRTaW5rXSB0aGF0IGFsbG93cyBwdXR0aW5nIGV2ZW50cyBpbnRvIHRoZSByZXR1cm5lZCBzdHJlYW0uCiAgICogVGhpcyBgRXZlbnRTaW5rYCBpcyBvbmx5IHZhbGlkIGR1cmluZyB0aGUgY2FsbCB0byBbb25UaW1lb3V0XS4KICAgKiBDYWxsaW5nIFtFdmVudFNpbmsuY2xvc2VdIG9uIHRoZSBzaW5rIHBhc3NlZCB0byBbb25UaW1lb3V0XSBjbG9zZXMgdGhlCiAgICogcmV0dXJuZWQgc3RyZWFtLCBhbmQgbm8gZnVydGhlciBldmVudHMgYXJlIHByb2Nlc3NlZC4KICAgKgogICAqIElmIFtvblRpbWVvdXRdIGlzIG9taXR0ZWQsIGEgdGltZW91dCB3aWxsIGp1c3QgcHV0IGEgW1RpbWVvdXRFeGNlcHRpb25dCiAgICogaW50byB0aGUgZXJyb3IgY2hhbm5lbCBvZiB0aGUgcmV0dXJuZWQgc3RyZWFtLgogICAqIElmIHRoZSBjYWxsIHRvIFtvblRpbWVvdXRdIHRocm93cywgdGhlIGVycm9yIGlzIGVtaXR0ZWQgb24gdGhlIHJldHVybmVkCiAgICogc3RyZWFtLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gaWYgdGhpcyBzdHJlYW0gaXMuCiAgICogSWYgYSBicm9hZGNhc3Qgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIG1vcmUgdGhhbiBvbmNlLCBlYWNoIHN1YnNjcmlwdGlvbgogICAqIHdpbGwgaGF2ZSBpdHMgaW5kaXZpZHVhbGx5IHRpbWVyIHRoYXQgc3RhcnRzIGNvdW50aW5nIG9uIGxpc3RlbiwKICAgKiBhbmQgdGhlIHN1YnNjcmlwdGlvbnMnIHRpbWVycyBjYW4gYmUgcGF1c2VkIGluZGl2aWR1YWxseS4KICAgKi8KICBTdHJlYW08VD4gdGltZW91dChEdXJhdGlvbiB0aW1lTGltaXQsIHt2b2lkIG9uVGltZW91dChFdmVudFNpbms8VD4gc2luayl9KSB7CiAgICBfU3RyZWFtQ29udHJvbGxlckJhc2U8VD4gY29udHJvbGxlcjsKICAgIC8vIFRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBzZXQgb24gbGlzdGVuLgogICAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbjsKICAgIFRpbWVyIHRpbWVyOwogICAgWm9uZSB6b25lOwogICAgX1RpbWVyQ2FsbGJhY2sgdGltZW91dDsKCiAgICB2b2lkIG9uRGF0YShUIGV2ZW50KSB7CiAgICAgIHRpbWVyLmNhbmNlbCgpOwogICAgICB0aW1lciA9IHpvbmUuY3JlYXRlVGltZXIodGltZUxpbWl0LCB0aW1lb3V0KTsKICAgICAgLy8gSXQgbWlnaHQgY2xvc2UgdGhlIHN0cmVhbSBhbmQgY2FuY2VsIHRpbWVyLCBzbyBjcmVhdGUgcmVjdXJpbmcgVGltZXIKICAgICAgLy8gYmVmb3JlIGNhbGxpbmcgaW50byBhZGQoKTsKICAgICAgLy8gaXNzdWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXJ0LWxhbmcvc2RrL2lzc3Vlcy8zNzU2NQogICAgICBjb250cm9sbGVyLmFkZChldmVudCk7CiAgICB9CgogICAgdm9pZCBvbkVycm9yKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgIGFzc2VydChjb250cm9sbGVyIGlzIF9TdHJlYW1Db250cm9sbGVyIHx8CiAgICAgICAgICBjb250cm9sbGVyIGlzIF9Ccm9hZGNhc3RTdHJlYW1Db250cm9sbGVyKTsKICAgICAgY29udHJvbGxlci5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOyAvLyBBdm9pZCBab25lIGVycm9yIHJlcGxhY2VtZW50LgogICAgICB0aW1lciA9IHpvbmUuY3JlYXRlVGltZXIodGltZUxpbWl0LCB0aW1lb3V0KTsKICAgIH0KCiAgICB2b2lkIG9uRG9uZSgpIHsKICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTsKICAgIH0KCiAgICB2b2lkIG9uTGlzdGVuKCkgewogICAgICAvLyBUaGlzIGlzIHRoZSBvbkxpc3RlbiBjYWxsYmFjayBmb3Igb2YgY29udHJvbGxlci4KICAgICAgLy8gSXQgcnVucyBpbiB0aGUgc2FtZSB6b25lIHRoYXQgdGhlIHN1YnNjcmlwdGlvbiB3YXMgY3JlYXRlZCBpbi4KICAgICAgLy8gVXNlIHRoYXQgem9uZSBmb3IgY3JlYXRpbmcgdGltZXJzIGFuZCBydW5uaW5nIHRoZSBvblRpbWVvdXQKICAgICAgLy8gY2FsbGJhY2suCiAgICAgIHpvbmUgPSBab25lLmN1cnJlbnQ7CiAgICAgIGlmIChvblRpbWVvdXQgPT0gbnVsbCkgewogICAgICAgIHRpbWVvdXQgPSAoKSB7CiAgICAgICAgICBjb250cm9sbGVyLmFkZEVycm9yKAogICAgICAgICAgICAgIG5ldyBUaW1lb3V0RXhjZXB0aW9uKCJObyBzdHJlYW0gZXZlbnQiLCB0aW1lTGltaXQpLCBudWxsKTsKICAgICAgICB9OwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGUgcmV0dXJuIHR5cGUgc2hvdWxkIGJlICd2b2lkJywgYW5kIHRoZSB0eXBlCiAgICAgICAgLy8gc2hvdWxkIGJlIGluZmVycmVkLgogICAgICAgIHZhciByZWdpc3RlcmVkT25UaW1lb3V0ID0KICAgICAgICAgICAgem9uZS5yZWdpc3RlclVuYXJ5Q2FsbGJhY2s8ZHluYW1pYywgRXZlbnRTaW5rPFQ+PihvblRpbWVvdXQpOwogICAgICAgIHZhciB3cmFwcGVyID0gbmV3IF9Db250cm9sbGVyRXZlbnRTaW5rV3JhcHBlcjxUPihudWxsKTsKICAgICAgICB0aW1lb3V0ID0gKCkgewogICAgICAgICAgd3JhcHBlci5fc2luayA9IGNvbnRyb2xsZXI7IC8vIE9ubHkgdmFsaWQgZHVyaW5nIGNhbGwuCiAgICAgICAgICB6b25lLnJ1blVuYXJ5R3VhcmRlZChyZWdpc3RlcmVkT25UaW1lb3V0LCB3cmFwcGVyKTsKICAgICAgICAgIHdyYXBwZXIuX3NpbmsgPSBudWxsOwogICAgICAgIH07CiAgICAgIH0KCiAgICAgIHN1YnNjcmlwdGlvbiA9IHRoaXMubGlzdGVuKG9uRGF0YSwgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUpOwogICAgICB0aW1lciA9IHpvbmUuY3JlYXRlVGltZXIodGltZUxpbWl0LCB0aW1lb3V0KTsKICAgIH0KCiAgICBGdXR1cmUgb25DYW5jZWwoKSB7CiAgICAgIHRpbWVyLmNhbmNlbCgpOwogICAgICBGdXR1cmUgcmVzdWx0ID0gc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgICBzdWJzY3JpcHRpb24gPSBudWxsOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQoKICAgIGNvbnRyb2xsZXIgPSBpc0Jyb2FkY2FzdAogICAgICAgID8gbmV3IF9TeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPihvbkxpc3Rlbiwgb25DYW5jZWwpCiAgICAgICAgOiBuZXcgX1N5bmNTdHJlYW1Db250cm9sbGVyPFQ+KG9uTGlzdGVuLCAoKSB7CiAgICAgICAgICAgIC8vIERvbid0IG51bGwgdGhlIHRpbWVyLCBvbkNhbmNlbCBtYXkgY2FsbCBjYW5jZWwgYWdhaW4uCiAgICAgICAgICAgIHRpbWVyLmNhbmNlbCgpOwogICAgICAgICAgICBzdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgICAgIH0sICgpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICAgICAgICB0aW1lciA9IHpvbmUuY3JlYXRlVGltZXIodGltZUxpbWl0LCB0aW1lb3V0KTsKICAgICAgICAgIH0sIG9uQ2FuY2VsKTsKICAgIHJldHVybiBjb250cm9sbGVyLnN0cmVhbTsKICB9Cn0KCi8qKgogKiBBIHN1YnNjcmlwdGlvbiBvbiBldmVudHMgZnJvbSBhIFtTdHJlYW1dLgogKgogKiBXaGVuIHlvdSBsaXN0ZW4gb24gYSBbU3RyZWFtXSB1c2luZyBbU3RyZWFtLmxpc3Rlbl0sCiAqIGEgW1N0cmVhbVN1YnNjcmlwdGlvbl0gb2JqZWN0IGlzIHJldHVybmVkLgogKgogKiBUaGUgc3Vic2NyaXB0aW9uIHByb3ZpZGVzIGV2ZW50cyB0byB0aGUgbGlzdGVuZXIsCiAqIGFuZCBob2xkcyB0aGUgY2FsbGJhY2tzIHVzZWQgdG8gaGFuZGxlIHRoZSBldmVudHMuCiAqIFRoZSBzdWJzY3JpcHRpb24gY2FuIGFsc28gYmUgdXNlZCB0byB1bnN1YnNjcmliZSBmcm9tIHRoZSBldmVudHMsCiAqIG9yIHRvIHRlbXBvcmFyaWx5IHBhdXNlIHRoZSBldmVudHMgZnJvbSB0aGUgc3RyZWFtLgogKi8KYWJzdHJhY3QgY2xhc3MgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHsKICAvKioKICAgKiBDYW5jZWxzIHRoaXMgc3Vic2NyaXB0aW9uLgogICAqCiAgICogQWZ0ZXIgdGhpcyBjYWxsLCB0aGUgc3Vic2NyaXB0aW9uIG5vIGxvbmdlciByZWNlaXZlcyBldmVudHMuCiAgICoKICAgKiBUaGUgc3RyZWFtIG1heSBuZWVkIHRvIHNodXQgZG93biB0aGUgc291cmNlIG9mIGV2ZW50cyBhbmQgY2xlYW4gdXAgYWZ0ZXIKICAgKiB0aGUgc3Vic2NyaXB0aW9uIGlzIGNhbmNlbGVkLgogICAqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB0aGF0IGlzIGNvbXBsZXRlZCBvbmNlIHRoZSBzdHJlYW0gaGFzIGZpbmlzaGVkCiAgICogaXRzIGNsZWFudXAuCiAgICoKICAgKiBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBtYXkgYWxzbyByZXR1cm4gYG51bGxgIGlmIG5vIGNsZWFudXAgd2FzIG5lY2Vzc2FyeS4KICAgKiBSZXR1cm5pbmcgYG51bGxgIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBiZSBhdm9pZGVkLgogICAqCiAgICogVHlwaWNhbGx5LCBmdXR1cmVzIGFyZSByZXR1cm5lZCB3aGVuIHRoZSBzdHJlYW0gbmVlZHMgdG8gcmVsZWFzZSByZXNvdXJjZXMuCiAgICogRm9yIGV4YW1wbGUsIGEgc3RyZWFtIG1pZ2h0IG5lZWQgdG8gY2xvc2UgYW4gb3BlbiBmaWxlIChhcyBhbiBhc3luY2hyb25vdXMKICAgKiBvcGVyYXRpb24pLiBJZiB0aGUgbGlzdGVuZXIgd2FudHMgdG8gZGVsZXRlIHRoZSBmaWxlIGFmdGVyIGhhdmluZwogICAqIGNhbmNlbGVkIHRoZSBzdWJzY3JpcHRpb24sIGl0IG11c3Qgd2FpdCBmb3IgdGhlIGNsZWFudXAgZnV0dXJlIHRvIGNvbXBsZXRlLgogICAqCiAgICogQSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdpdGggYSBgbnVsbGAgdmFsdWUuCiAgICogSWYgdGhlIGNsZWFudXAgdGhyb3dzLCB3aGljaCBpdCByZWFsbHkgc2hvdWxkbid0LCB0aGUgcmV0dXJuZWQgZnV0dXJlCiAgICogY29tcGxldGVzIHdpdGggdGhhdCBlcnJvci4KICAgKi8KICBGdXR1cmUgY2FuY2VsKCk7CgogIC8qKgogICAqIFJlcGxhY2VzIHRoZSBkYXRhIGV2ZW50IGhhbmRsZXIgb2YgdGhpcyBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBUaGUgW2hhbmRsZURhdGFdIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3IgZWFjaCBlbGVtZW50IG9mIHRoZSBzdHJlYW0KICAgKiBhZnRlciB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4KICAgKiBJZiBbaGFuZGxlRGF0YV0gaXMgYG51bGxgLCBmdXJ0aGVyIGVsZW1lbnRzIGFyZSBpZ25vcmVkLgogICAqCiAgICogVGhpcyBtZXRob2QgcmVwbGFjZXMgdGhlIGN1cnJlbnQgaGFuZGxlciBzZXQgYnkgdGhlIGludm9jYXRpb24gb2YKICAgKiBbU3RyZWFtLmxpc3Rlbl0gb3IgYnkgYSBwcmV2aW91cyBjYWxsIHRvIFtvbkRhdGFdLgogICAqLwogIHZvaWQgb25EYXRhKHZvaWQgaGFuZGxlRGF0YShUIGRhdGEpKTsKCiAgLyoqCiAgICogUmVwbGFjZXMgdGhlIGVycm9yIGV2ZW50IGhhbmRsZXIgb2YgdGhpcyBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBUaGUgW2hhbmRsZUVycm9yXSBmdW5jdGlvbiBtdXN0IGJlIGFibGUgdG8gYmUgY2FsbGVkIHdpdGggZWl0aGVyCiAgICogb25lIHBvc2l0aW9uYWwgYXJndW1lbnQsIG9yIHdpdGggdHdvIHBvc2l0aW9uYWwgYXJndW1lbnRzCiAgICogd2hlcmUgdGhlIHNlY29uZHMgaXMgYWx3YXlzIGEgW1N0YWNrVHJhY2VdLgogICAqCiAgICogVGhlIFtoYW5kbGVFcnJvcl0gYXJndW1lbnQgbWF5IGJlIGBudWxsYCwgaW4gd2hpY2ggY2FzZSBmdXJ0aGVyCiAgICogZXJyb3IgZXZlbnRzIGFyZSBjb25zaWRlcmVkIHVuaGFuZGxlZCwgYW5kIHdpbGwgYmUgcmVwb3J0ZWQgdG8KICAgKiBbWm9uZS5oYW5kbGVVbmNhdWdodEVycm9yXS4KICAgKgogICAqIFRoZSBwcm92aWRlZCBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIGFsbCBlcnJvciBldmVudHMgZnJvbSB0aGUKICAgKiBzdHJlYW0gc3Vic2NyaXB0aW9uLgogICAqCiAgICogVGhpcyBtZXRob2QgcmVwbGFjZXMgdGhlIGN1cnJlbnQgaGFuZGxlciBzZXQgYnkgdGhlIGludm9jYXRpb24gb2YKICAgKiBbU3RyZWFtLmxpc3Rlbl0sIGJ5IGNhbGxpbmcgW2FzRnV0dXJlXSwgb3IgYnkgYSBwcmV2aW91cyBjYWxsIHRvIFtvbkVycm9yXS4KICAgKi8KICB2b2lkIG9uRXJyb3IoRnVuY3Rpb24gaGFuZGxlRXJyb3IpOwoKICAvKioKICAgKiBSZXBsYWNlcyB0aGUgZG9uZSBldmVudCBoYW5kbGVyIG9mIHRoaXMgc3Vic2NyaXB0aW9uLgogICAqCiAgICogVGhlIFtoYW5kbGVEb25lXSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgc3RyZWFtIGNsb3Nlcy4KICAgKiBUaGUgdmFsdWUgbWF5IGJlIGBudWxsYCwgaW4gd2hpY2ggY2FzZSBubyBmdW5jdGlvbiBpcyBjYWxsZWQuCiAgICoKICAgKiBUaGlzIG1ldGhvZCByZXBsYWNlcyB0aGUgY3VycmVudCBoYW5kbGVyIHNldCBieSB0aGUgaW52b2NhdGlvbiBvZgogICAqIFtTdHJlYW0ubGlzdGVuXSwgYnkgY2FsbGluZyBbYXNGdXR1cmVdLCBvciBieSBhIHByZXZpb3VzIGNhbGwgdG8gW29uRG9uZV0uCiAgICovCiAgdm9pZCBvbkRvbmUodm9pZCBoYW5kbGVEb25lKCkpOwoKICAvKioKICAgKiBSZXF1ZXN0IHRoYXQgdGhlIHN0cmVhbSBwYXVzZXMgZXZlbnRzIHVudGlsIGZ1cnRoZXIgbm90aWNlLgogICAqCiAgICogV2hpbGUgcGF1c2VkLCB0aGUgc3Vic2NyaXB0aW9uIHdpbGwgbm90IGZpcmUgYW55IGV2ZW50cy4KICAgKiBJZiBpdCByZWNlaXZlcyBldmVudHMgZnJvbSBpdHMgc291cmNlLCB0aGV5IHdpbGwgYmUgYnVmZmVyZWQgdW50aWwKICAgKiB0aGUgc3Vic2NyaXB0aW9uIGlzIHJlc3VtZWQuCiAgICogRm9yIG5vbi1icm9hZGNhc3Qgc3RyZWFtcywgdGhlIHVuZGVybHlpbmcgc291cmNlIGlzIHVzdWFsbHkgaW5mb3JtZWQKICAgKiBhYm91dCB0aGUgcGF1c2UsCiAgICogc28gaXQgY2FuIHN0b3AgZ2VuZXJhdGluZyBldmVudHMgdW50aWwgdGhlIHN1YnNjcmlwdGlvbiBpcyByZXN1bWVkLgogICAqCiAgICogVG8gYXZvaWQgYnVmZmVyaW5nIGV2ZW50cyBvbiBhIGJyb2FkY2FzdCBzdHJlYW0sIGl0IGlzIGJldHRlciB0bwogICAqIGNhbmNlbCB0aGlzIHN1YnNjcmlwdGlvbiwgYW5kIHN0YXJ0IHRvIGxpc3RlbiBhZ2FpbiB3aGVuIGV2ZW50cwogICAqIGFyZSBuZWVkZWQsIGlmIHRoZSBpbnRlcm1lZGlhdGUgZXZlbnRzIGFyZSBub3QgaW1wb3J0YW50LgogICAqCiAgICogSWYgW3Jlc3VtZVNpZ25hbF0gaXMgcHJvdmlkZWQsIHRoZSBzdHJlYW0gc3Vic2NyaXB0aW9uIHdpbGwgdW5kbyB0aGUgcGF1c2UKICAgKiB3aGVuIHRoZSBmdXR1cmUgY29tcGxldGVzLCBhcyBpZiBieSBhIGNhbGwgdG8gW3Jlc3VtZV0uCiAgICogSWYgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvciwKICAgKiB0aGUgc3RyZWFtIHdpbGwgc3RpbGwgcmVzdW1lLCBidXQgdGhlIGVycm9yIHdpbGwgYmUgY29uc2lkZXJlZCB1bmhhbmRsZWQKICAgKiBhbmQgaXMgcGFzc2VkIHRvIFtab25lLmhhbmRsZVVuY2F1Z2h0RXJyb3JdLgogICAqCiAgICogQSBjYWxsIHRvIFtyZXN1bWVdIHdpbGwgYWxzbyB1bmRvIGEgcGF1c2UuCiAgICoKICAgKiBJZiB0aGUgc3Vic2NyaXB0aW9uIGlzIHBhdXNlZCBtb3JlIHRoYW4gb25jZSwgYW4gZXF1YWwgbnVtYmVyCiAgICogb2YgcmVzdW1lcyBtdXN0IGJlIHBlcmZvcm1lZCB0byByZXN1bWUgdGhlIHN0cmVhbS4KICAgKiBDYWxscyB0byBbcmVzdW1lXSBhbmQgdGhlIGNvbXBsZXRpb24gb2YgYSBbcmVzdW1lU2lnbmFsXSBhcmUKICAgKiBpbnRlcmNoYW5nZWFibGUgLSB0aGUgW3BhdXNlXSB3aGljaCB3YXMgcGFzc2VkIGEgW3Jlc3VtZVNpZ25hbF0gbWF5IGJlCiAgICogZW5kZWQgYnkgYSBjYWxsIHRvIFtyZXN1bWVdLCBhbmQgY29tcGxldGluZyB0aGUgW3Jlc3VtZVNpZ25hbF0gbWF5IGVuZCBhCiAgICogZGlmZmVyZW50IFtwYXVzZV0uCiAgICoKICAgKiBJdCBpcyBzYWZlIHRvIFtyZXN1bWVdIG9yIGNvbXBsZXRlIGEgW3Jlc3VtZVNpZ25hbF0gZXZlbiB3aGVuIHRoZQogICAqIHN1YnNjcmlwdGlvbiBpcyBub3QgcGF1c2VkLCBhbmQgdGhlIHJlc3VtZSB3aWxsIGhhdmUgbm8gZWZmZWN0LgogICAqCiAgICogQ3VycmVudGx5IERPTSBzdHJlYW1zIHNpbGVudGx5IGRyb3AgZXZlbnRzIHdoZW4gdGhlIHN0cmVhbSBpcyBwYXVzZWQuIFRoaXMKICAgKiBpcyBhIGJ1ZyBhbmQgd2lsbCBiZSBmaXhlZC4KICAgKi8KICB2b2lkIHBhdXNlKFtGdXR1cmUgcmVzdW1lU2lnbmFsXSk7CgogIC8qKgogICAqIFJlc3VtZSBhZnRlciBhIHBhdXNlLgogICAqCiAgICogVGhpcyB1bmRvZXMgb25lIHByZXZpb3VzIGNhbGwgdG8gW3BhdXNlXS4KICAgKiBXaGVuIGFsbCBwcmV2aW91c2x5IGNhbGxzIHRvIFtwYXVzZV0gaGF2ZSBiZWVuIG1hdGNoZWQgYnkgYSBjYWxscyB0bwogICAqIFtyZXN1bWVdLCBwb3NzaWJseSB0aHJvdWdoIGEgYHJlc3VtZVNpZ25hbGAgcGFzc2VkIHRvIFtwYXVzZV0sCiAgICogdGhlIHN0cmVhbSBzdWJzY3JpcHRpb24gbWF5IGVtaXQgZXZlbnRzIGFnYWluLgogICAqCiAgICogSXQgaXMgc2FmZSB0byBbcmVzdW1lXSBldmVuIHdoZW4gdGhlIHN1YnNjcmlwdGlvbiBpcyBub3QgcGF1c2VkLCBhbmQgdGhlCiAgICogcmVzdW1lIHdpbGwgaGF2ZSBubyBlZmZlY3QuCiAgICovCiAgdm9pZCByZXN1bWUoKTsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgW1N0cmVhbVN1YnNjcmlwdGlvbl0gaXMgY3VycmVudGx5IHBhdXNlZC4KICAgKgogICAqIElmIHRoZXJlIGhhdmUgYmVlbiBtb3JlIGNhbGxzIHRvIFtwYXVzZV0gdGhhbiB0byBbcmVzdW1lXSBvbiB0aGlzCiAgICogc3RyZWFtIHN1YnNjcmlwdGlvbiwgdGhlIHN1YnNjcmlwdGlvbiBpcyBwYXVzZWQsIGFuZCB0aGlzIGdldHRlcgogICAqIHJldHVybnMgYHRydWVgLgogICAqCiAgICogUmV0dXJucyBgZmFsc2VgIGlmIHRoZSBzdHJlYW0gY2FuIGN1cnJlbnRseSBlbWl0IGV2ZW50cywgb3IgaWYKICAgKiB0aGUgc3Vic2NyaXB0aW9uIGhhcyBjb21wbGV0ZWQgb3IgYmVlbiBjYW5jZWxsZWQuCiAgICovCiAgYm9vbCBnZXQgaXNQYXVzZWQ7CgogIC8qKgogICAqIFJldHVybnMgYSBmdXR1cmUgdGhhdCBoYW5kbGVzIHRoZSBbb25Eb25lXSBhbmQgW29uRXJyb3JdIGNhbGxiYWNrcy4KICAgKgogICAqIFRoaXMgbWV0aG9kICpvdmVyd3JpdGVzKiB0aGUgZXhpc3RpbmcgW29uRG9uZV0gYW5kIFtvbkVycm9yXSBjYWxsYmFja3MKICAgKiB3aXRoIG5ldyBvbmVzIHRoYXQgY29tcGxldGUgdGhlIHJldHVybmVkIGZ1dHVyZS4KICAgKgogICAqIEluIGNhc2Ugb2YgYW4gZXJyb3IgdGhlIHN1YnNjcmlwdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgY2FuY2VsIChldmVuCiAgICogd2hlbiBpdCB3YXMgbGlzdGVuaW5nIHdpdGggYGNhbmNlbE9uRXJyb3JgIHNldCB0byBgZmFsc2VgKS4KICAgKgogICAqIEluIGNhc2Ugb2YgYSBgZG9uZWAgZXZlbnQgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCB0aGUgZ2l2ZW4KICAgKiBbZnV0dXJlVmFsdWVdLgogICAqLwogIEZ1dHVyZTxFPiBhc0Z1dHVyZTxFPihbRSBmdXR1cmVWYWx1ZV0pOwp9CgovKioKICogQSBbU2lua10gdGhhdCBzdXBwb3J0cyBhZGRpbmcgZXJyb3JzLgogKgogKiBUaGlzIG1ha2VzIGl0IHN1aXRhYmxlIGZvciBjYXB0dXJpbmcgdGhlIHJlc3VsdHMgb2YgYXN5bmNocm9ub3VzCiAqIGNvbXB1dGF0aW9ucywgd2hpY2ggY2FuIGNvbXBsZXRlIHdpdGggYSB2YWx1ZSBvciBhbiBlcnJvci4KICoKICogVGhlIFtFdmVudFNpbmtdIGhhcyBiZWVuIGRlc2lnbmVkIHRvIGhhbmRsZSBhc3luY2hyb25vdXMgZXZlbnRzIGZyb20KICogW1N0cmVhbV1zLiBTZWUsIGZvciBleGFtcGxlLCBbU3RyZWFtLmV2ZW50VHJhbnNmb3JtZWRdIHdoaWNoIHVzZXMKICogYEV2ZW50U2lua2BzIHRvIHRyYW5zZm9ybSBldmVudHMuCiAqLwphYnN0cmFjdCBjbGFzcyBFdmVudFNpbms8VD4gaW1wbGVtZW50cyBTaW5rPFQ+IHsKICAvKioKICAgKiBBZGRzIGEgZGF0YSBbZXZlbnRdIHRvIHRoZSBzaW5rLgogICAqCiAgICogTXVzdCBub3QgYmUgY2FsbGVkIG9uIGEgY2xvc2VkIHNpbmsuCiAgICovCiAgdm9pZCBhZGQoVCBldmVudCk7CgogIC8qKgogICAqIEFkZHMgYW4gW2Vycm9yXSB0byB0aGUgc2luay4KICAgKgogICAqIE11c3Qgbm90IGJlIGNhbGxlZCBvbiBhIGNsb3NlZCBzaW5rLgogICAqLwogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSk7CgogIC8qKgogICAqIENsb3NlcyB0aGUgc2luay4KICAgKgogICAqIENhbGxpbmcgdGhpcyBtZXRob2QgbW9yZSB0aGFuIG9uY2UgaXMgYWxsb3dlZCwgYnV0IGRvZXMgbm90aGluZy4KICAgKgogICAqIE5laXRoZXIgW2FkZF0gbm9yIFthZGRFcnJvcl0gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdGhpcyBtZXRob2QuCiAgICovCiAgdm9pZCBjbG9zZSgpOwp9CgovKiogW1N0cmVhbV0gd3JhcHBlciB0aGF0IG9ubHkgZXhwb3NlcyB0aGUgW1N0cmVhbV0gaW50ZXJmYWNlLiAqLwpjbGFzcyBTdHJlYW1WaWV3PFQ+IGV4dGVuZHMgU3RyZWFtPFQ+IHsKICBmaW5hbCBTdHJlYW08VD4gX3N0cmVhbTsKCiAgY29uc3QgU3RyZWFtVmlldyhTdHJlYW08VD4gc3RyZWFtKQogICAgICA6IF9zdHJlYW0gPSBzdHJlYW0sCiAgICAgICAgc3VwZXIuX2ludGVybmFsKCk7CgogIGJvb2wgZ2V0IGlzQnJvYWRjYXN0ID0+IF9zdHJlYW0uaXNCcm9hZGNhc3Q7CgogIFN0cmVhbTxUPiBhc0Jyb2FkY2FzdFN0cmVhbSgKICAgICAgICAgIHt2b2lkIG9uTGlzdGVuKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pLAogICAgICAgICAgdm9pZCBvbkNhbmNlbChTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKX0pID0+CiAgICAgIF9zdHJlYW0uYXNCcm9hZGNhc3RTdHJlYW0ob25MaXN0ZW46IG9uTGlzdGVuLCBvbkNhbmNlbDogb25DYW5jZWwpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gbGlzdGVuKHZvaWQgb25EYXRhKFQgdmFsdWUpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIF9zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQp9CgovKioKICogQWJzdHJhY3QgaW50ZXJmYWNlIGZvciBhICJzaW5rIiBhY2NlcHRpbmcgbXVsdGlwbGUgZW50aXJlIHN0cmVhbXMuCiAqCiAqIEEgY29uc3VtZXIgY2FuIGFjY2VwdCBhIG51bWJlciBvZiBjb25zZWN1dGl2ZSBzdHJlYW1zIHVzaW5nIFthZGRTdHJlYW1dLAogKiBhbmQgd2hlbiBubyBmdXJ0aGVyIGRhdGEgbmVlZCB0byBiZSBhZGRlZCwgdGhlIFtjbG9zZV0gbWV0aG9kIHRlbGxzIHRoZQogKiBjb25zdW1lciB0byBjb21wbGV0ZSBpdHMgd29yayBhbmQgc2h1dCBkb3duLgogKgogKiBUaGUgW1N0cmVhbS5waXBlXSBhY2NlcHRzIGEgYFN0cmVhbUNvbnN1bWVyYCBhbmQgd2lsbCBwYXNzIHRoZSBzdHJlYW0KICogdG8gdGhlIGNvbnN1bWVyJ3MgW2FkZFN0cmVhbV0gbWV0aG9kLiBXaGVuIHRoYXQgY29tcGxldGVzLCBpdCB3aWxsCiAqIGNhbGwgW2Nsb3NlXSBhbmQgdGhlbiBjb21wbGV0ZSBpdHMgb3duIHJldHVybmVkIGZ1dHVyZS4KICovCmFic3RyYWN0IGNsYXNzIFN0cmVhbUNvbnN1bWVyPFM+IHsKICAvKioKICAgKiBDb25zdW1lcyB0aGUgZWxlbWVudHMgb2YgW3N0cmVhbV0uCiAgICoKICAgKiBMaXN0ZW5zIG9uIFtzdHJlYW1dIGFuZCBkb2VzIHNvbWV0aGluZyBmb3IgZWFjaCBldmVudC4KICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgd2hpY2ggaXMgY29tcGxldGVkIHdoZW4gdGhlIHN0cmVhbSBpcyBkb25lIGJlaW5nIGFkZGVkLAogICAqIGFuZCB0aGUgY29uc3VtZXIgaXMgcmVhZHkgdG8gYWNjZXB0IGEgbmV3IHN0cmVhbS4KICAgKiBObyBmdXJ0aGVyIGNhbGxzIHRvIFthZGRTdHJlYW1dIG9yIFtjbG9zZV0gc2hvdWxkIGhhcHBlbiBiZWZvcmUgdGhlCiAgICogcmV0dXJuZWQgZnV0dXJlIGhhcyBjb21wbGV0ZWQuCiAgICoKICAgKiBUaGUgY29uc3VtZXIgbWF5IHN0b3AgbGlzdGVuaW5nIHRvIHRoZSBzdHJlYW0gYWZ0ZXIgYW4gZXJyb3IsCiAgICogaXQgbWF5IGNvbnN1bWUgYWxsIHRoZSBlcnJvcnMgYW5kIG9ubHkgc3RvcCBhdCBhIGRvbmUgZXZlbnQsCiAgICogb3IgaXQgbWF5IGJlIGNhbmNlbGVkIGVhcmx5IGlmIHRoZSByZWNlaXZlciBkb24ndCB3YW50IGFueSBmdXJ0aGVyIGV2ZW50cy4KICAgKgogICAqIElmIHRoZSBjb25zdW1lciBzdG9wcyBsaXN0ZW5pbmcgYmVjYXVzZSBvZiBzb21lIGVycm9yIHByZXZlbnRpbmcgaXQKICAgKiBmcm9tIGNvbnRpbnVpbmcsIGl0IG1heSByZXBvcnQgdGhpcyBlcnJvciBpbiB0aGUgcmV0dXJuZWQgZnV0dXJlLAogICAqIG90aGVyd2lzZSBpdCB3aWxsIGp1c3QgY29tcGxldGUgdGhlIGZ1dHVyZSB3aXRoIGBudWxsYC4KICAgKi8KICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxTPiBzdHJlYW0pOwoKICAvKioKICAgKiBUZWxscyB0aGUgY29uc3VtZXIgdGhhdCBubyBmdXJ0aGVyIHN0cmVhbXMgd2lsbCBiZSBhZGRlZC4KICAgKgogICAqIFRoaXMgYWxsb3dzIHRoZSBjb25zdW1lciB0byBjb21wbGV0ZSBhbnkgcmVtYWluaW5nIHdvcmsgYW5kIHJlbGVhc2UKICAgKiByZXNvdXJjZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIG5lZWRlZAogICAqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB3aGljaCBpcyBjb21wbGV0ZWQgd2hlbiB0aGUgY29uc3VtZXIgaGFzIHNodXQgZG93bi4KICAgKiBJZiBjbGVhbmluZyB1cCBjYW4gZmFpbCwgdGhlIGVycm9yIG1heSBiZSByZXBvcnRlZCBpbiB0aGUgcmV0dXJuZWQgZnV0dXJlLAogICAqIG90aGVyd2lzZSBpdCBjb21wbGV0ZXMgd2l0aCBgbnVsbGAuCiAgICovCiAgRnV0dXJlIGNsb3NlKCk7Cn0KCi8qKgogKiBBIG9iamVjdCB0aGF0IGFjY2VwdHMgc3RyZWFtIGV2ZW50cyBib3RoIHN5bmNocm9ub3VzbHkgYW5kIGFzeW5jaHJvbm91c2x5LgogKgogKiBBIFtTdHJlYW1TaW5rXSBjb21iaW5lcyB0aGUgbWV0aG9kcyBmcm9tIFtTdHJlYW1Db25zdW1lcl0gYW5kIFtFdmVudFNpbmtdLgogKgogKiBUaGUgW0V2ZW50U2lua10gbWV0aG9kcyBjYW4ndCBiZSB1c2VkIHdoaWxlIHRoZSBbYWRkU3RyZWFtXSBpcyBjYWxsZWQuCiAqIEFzIHNvb24gYXMgdGhlIFthZGRTdHJlYW1dJ3MgW0Z1dHVyZV0gY29tcGxldGVzIHdpdGggYSB2YWx1ZSwgdGhlCiAqIFtFdmVudFNpbmtdIG1ldGhvZHMgY2FuIGJlIHVzZWQgYWdhaW4uCiAqCiAqIElmIFthZGRTdHJlYW1dIGlzIGNhbGxlZCBhZnRlciBhbnkgb2YgdGhlIFtFdmVudFNpbmtdIG1ldGhvZHMsIGl0J2xsCiAqIGJlIGRlbGF5ZWQgdW50aWwgdGhlIHVuZGVybHlpbmcgc3lzdGVtIGhhcyBjb25zdW1lZCB0aGUgZGF0YSBhZGRlZCBieSB0aGUKICogW0V2ZW50U2lua10gbWV0aG9kcy4KICoKICogV2hlbiBbRXZlbnRTaW5rXSBtZXRob2RzIGFyZSB1c2VkLCB0aGUgW2RvbmVdIFtGdXR1cmVdIGNhbiBiZSB1c2VkIHRvCiAqIGNhdGNoIGFueSBlcnJvcnMuCiAqCiAqIFdoZW4gW2Nsb3NlXSBpcyBjYWxsZWQsIGl0IHdpbGwgcmV0dXJuIHRoZSBbZG9uZV0gW0Z1dHVyZV0uCiAqLwphYnN0cmFjdCBjbGFzcyBTdHJlYW1TaW5rPFM+IGltcGxlbWVudHMgRXZlbnRTaW5rPFM+LCBTdHJlYW1Db25zdW1lcjxTPiB7CiAgLyoqCiAgICogVGVsbHMgdGhlIHN0cmVhbSBzaW5rIHRoYXQgbm8gZnVydGhlciBzdHJlYW1zIHdpbGwgYmUgYWRkZWQuCiAgICoKICAgKiBUaGlzIGFsbG93cyB0aGUgc3RyZWFtIHNpbmsgdG8gY29tcGxldGUgYW55IHJlbWFpbmluZyB3b3JrIGFuZCByZWxlYXNlCiAgICogcmVzb3VyY2VzIHRoYXQgYXJlIG5vIGxvbmdlciBuZWVkZWQKICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgd2hpY2ggaXMgY29tcGxldGVkIHdoZW4gdGhlIHN0cmVhbSBzaW5rIGhhcyBzaHV0IGRvd24uCiAgICogSWYgY2xlYW5pbmcgdXAgY2FuIGZhaWwsIHRoZSBlcnJvciBtYXkgYmUgcmVwb3J0ZWQgaW4gdGhlIHJldHVybmVkIGZ1dHVyZSwKICAgKiBvdGhlcndpc2UgaXQgY29tcGxldGVzIHdpdGggYG51bGxgLgogICAqCiAgICogUmV0dXJucyB0aGUgc2FtZSBmdXR1cmUgYXMgW2RvbmVdLgogICAqCiAgICogVGhlIHN0cmVhbSBzaW5rIG1heSBjbG9zZSBiZWZvcmUgdGhlIFtjbG9zZV0gbWV0aG9kIGlzIGNhbGxlZCwgZWl0aGVyIGR1ZQogICAqIHRvIGFuIGVycm9yIG9yIGJlY2F1c2UgaXQgaXMgaXRzZWxmIHByb3ZpZGluZyBldmVudHMgdG8gc29tZW9uZSB3aG8gaGFzCiAgICogc3RvcHBlZCBsaXN0ZW5pbmcuIEluIHRoYXQgY2FzZSwgdGhlIFtkb25lXSBmdXR1cmUgaXMgY29tcGxldGVkIGZpcnN0LAogICAqIGFuZCB0aGUgYGNsb3NlYCBtZXRob2Qgd2lsbCByZXR1cm4gdGhlIGBkb25lYCBmdXR1cmUgd2hlbiBjYWxsZWQuCiAgICoKICAgKiBVbmlmaWVzIFtTdHJlYW1Db25zdW1lci5jbG9zZV0gYW5kIFtFdmVudFNpbmsuY2xvc2VdIHdoaWNoIGJvdGggbWFyayB0aGVpcgogICAqIG9iamVjdCBhcyBub3QgZXhwZWN0aW5nIGFueSBmdXJ0aGVyIGV2ZW50cy4KICAgKi8KICBGdXR1cmUgY2xvc2UoKTsKCiAgLyoqCiAgICogUmV0dXJuIGEgZnV0dXJlIHdoaWNoIGlzIGNvbXBsZXRlZCB3aGVuIHRoZSBbU3RyZWFtU2lua10gaXMgZmluaXNoZWQuCiAgICoKICAgKiBJZiB0aGUgYFN0cmVhbVNpbmtgIGZhaWxzIHdpdGggYW4gZXJyb3IsCiAgICogcGVyaGFwcyBpbiByZXNwb25zZSB0byBhZGRpbmcgZXZlbnRzIHVzaW5nIFthZGRdLCBbYWRkRXJyb3JdIG9yIFtjbG9zZV0sCiAgICogdGhlIFtkb25lXSBmdXR1cmUgd2lsbCBjb21wbGV0ZSB3aXRoIHRoYXQgZXJyb3IuCiAgICoKICAgKiBPdGhlcndpc2UsIHRoZSByZXR1cm5lZCBmdXR1cmUgd2lsbCBjb21wbGV0ZSB3aGVuIGVpdGhlcjoKICAgKgogICAqICogYWxsIGV2ZW50cyBoYXZlIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgc2luayBoYXMgYmVlbiBjbG9zZWQsIG9yCiAgICogKiB0aGUgc2luayBoYXMgb3RoZXJ3aXNlIGJlZW4gc3RvcHBlZCBmcm9tIGhhbmRsaW5nIG1vcmUgZXZlbnRzCiAgICogICAoZm9yIGV4YW1wbGUgYnkgY2FuY2VsaW5nIGEgc3RyZWFtIHN1YnNjcmlwdGlvbikuCiAgICovCiAgRnV0dXJlIGdldCBkb25lOwp9CgovKioKICogVHJhbnNmb3JtcyBhIFN0cmVhbS4KICoKICogV2hlbiBhIHN0cmVhbSdzIFtTdHJlYW0udHJhbnNmb3JtXSBtZXRob2QgaXMgaW52b2tlZCB3aXRoIGEKICogW1N0cmVhbVRyYW5zZm9ybWVyXSwgdGhlIHN0cmVhbSBjYWxscyB0aGUgW2JpbmRdIG1ldGhvZCBvbiB0aGUgcHJvdmlkZWQKICogdHJhbnNmb3JtZXIuIFRoZSByZXN1bHRpbmcgc3RyZWFtIGlzIHRoZW4gcmV0dXJuZWQgZnJvbSB0aGUKICogW1N0cmVhbS50cmFuc2Zvcm1dIG1ldGhvZC4KICoKICogQ29uY2VwdHVhbGx5LCBhIHRyYW5zZm9ybWVyIGlzIHNpbXBseSBhIGZ1bmN0aW9uIGZyb20gW1N0cmVhbV0gdG8gW1N0cmVhbV0KICogdGhhdCBpcyBlbmNhcHN1bGF0ZWQgaW50byBhIGNsYXNzLgogKgogKiBJdCBpcyBnb29kIHByYWN0aWNlIHRvIHdyaXRlIHRyYW5zZm9ybWVycyB0aGF0IGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzLgogKgogKiBBbGwgb3RoZXIgdHJhbnNmb3JtaW5nIG1ldGhvZHMgb24gW1N0cmVhbV0sIHN1Y2ggYXMgW1N0cmVhbS5tYXBdLAogKiBbU3RyZWFtLndoZXJlXSBvciBbU3RyZWFtLmV4cGFuZF0gY2FuIGJlIGltcGxlbWVudGVkIHVzaW5nCiAqIFtTdHJlYW0udHJhbnNmb3JtXS4gQSBbU3RyZWFtVHJhbnNmb3JtZXJdIGlzIHRodXMgdmVyeSBwb3dlcmZ1bCBidXQgb2Z0ZW4KICogYWxzbyBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIHRvIHVzZS4KICovCmFic3RyYWN0IGNsYXNzIFN0cmVhbVRyYW5zZm9ybWVyPFMsIFQ+IHsKICAvKioKICAgKiBDcmVhdGVzIGEgW1N0cmVhbVRyYW5zZm9ybWVyXSBiYXNlZCBvbiB0aGUgZ2l2ZW4gW29uTGlzdGVuXSBjYWxsYmFjay4KICAgKgogICAqIFRoZSByZXR1cm5lZCBzdHJlYW0gdHJhbnNmb3JtZXIgdXNlcyB0aGUgcHJvdmlkZWQgW29uTGlzdGVuXSBjYWxsYmFjawogICAqIHdoZW4gYSB0cmFuc2Zvcm1lZCBzdHJlYW0gaXMgbGlzdGVuZWQgdG8uIEF0IHRoYXQgdGltZSwgdGhlIGNhbGxiYWNrCiAgICogcmVjZWl2ZXMgdGhlIGlucHV0IHN0cmVhbSAodGhlIG9uZSBwYXNzZWQgdG8gW2JpbmRdKSBhbmQgYQogICAqIGJvb2xlYW4gZmxhZyBgY2FuY2VsT25FcnJvcmAgdG8gY3JlYXRlIGEgW1N0cmVhbVN1YnNjcmlwdGlvbl0uCiAgICoKICAgKiBJZiB0aGUgdHJhbnNmb3JtZWQgc3RyZWFtIGlzIGEgYnJvYWRjYXN0IHN0cmVhbSwgc28gaXMgdGhlIHN0cmVhbQogICAqIHJldHVybmVkIGJ5IHRoZSBbU3RyZWFtVHJhbnNmb3JtZXIuYmluZF0gbWV0aG9kIGJ5IHRoaXMgdHJhbnNmb3JtZXIuCiAgICoKICAgKiBJZiB0aGUgdHJhbnNmb3JtZWQgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIG11bHRpcGxlIHRpbWVzLCB0aGUgW29uTGlzdGVuXQogICAqIGNhbGxiYWNrIGlzIGNhbGxlZCBhZ2FpbiBmb3IgZWFjaCBuZXcgW1N0cmVhbS5saXN0ZW5dIGNhbGwuCiAgICogVGhpcyBoYXBwZW5zIHdoZXRoZXIgdGhlIHN0cmVhbSBpcyBhIGJyb2FkY2FzdCBzdHJlYW0gb3Igbm90LAogICAqIGJ1dCB0aGUgY2FsbCB3aWxsIHVzdWFsbHkgZmFpbCBmb3Igbm9uLWJyb2FkY2FzdCBzdHJlYW1zLgogICAqCiAgICogVGhlIFtvbkxpc3Rlbl0gY2FsbGJhY2sgZG9lcyAqbm90KiByZWNlaXZlIHRoZSBoYW5kbGVycyB0aGF0IHdlcmUgcGFzc2VkCiAgICogdG8gW1N0cmVhbS5saXN0ZW5dLiBUaGVzZSBhcmUgYXV0b21hdGljYWxseSBzZXQgYWZ0ZXIgdGhlIGNhbGwgdG8gdGhlCiAgICogW29uTGlzdGVuXSBjYWxsYmFjayAodXNpbmcgW1N0cmVhbVN1YnNjcmlwdGlvbi5vbkRhdGFdLAogICAqIFtTdHJlYW1TdWJzY3JpcHRpb24ub25FcnJvcl0gYW5kIFtTdHJlYW1TdWJzY3JpcHRpb24ub25Eb25lXSkuCiAgICoKICAgKiBNb3N0IGNvbW1vbmx5LCBhbiBbb25MaXN0ZW5dIGNhbGxiYWNrIHdpbGwgZmlyc3QgY2FsbCBbU3RyZWFtLmxpc3Rlbl0gb24KICAgKiB0aGUgcHJvdmlkZWQgc3RyZWFtICh3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGBjYW5jZWxPbkVycm9yYCBmbGFnKSwgYW5kIHRoZW4KICAgKiByZXR1cm4gYSBuZXcgW1N0cmVhbVN1YnNjcmlwdGlvbl0uCiAgICoKICAgKiBUaGVyZSBhcmUgdHdvIGNvbW1vbiB3YXlzIHRvIGNyZWF0ZSBhIFN0cmVhbVN1YnNjcmlwdGlvbjoKICAgKgogICAqIDEuIGJ5IGFsbG9jYXRpbmcgYSBbU3RyZWFtQ29udHJvbGxlcl0gYW5kIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mCiAgICogICAgbGlzdGVuaW5nIHRvIGl0cyBzdHJlYW0uIEl0J3MgaW1wb3J0YW50IHRvIGZvcndhcmQgcGF1c2UsIHJlc3VtZSBhbmQKICAgKiAgICBjYW5jZWwgZXZlbnRzICh1bmxlc3MgdGhlIHRyYW5zZm9ybWVyIGludGVudGlvbmFsbHkgd2FudHMgdG8gY2hhbmdlCiAgICogICAgdGhpcyBiZWhhdmlvcikuCiAgICogMi4gYnkgY3JlYXRpbmcgYSBuZXcgY2xhc3MgdGhhdCBpbXBsZW1lbnRzIFtTdHJlYW1TdWJzY3JpcHRpb25dLgogICAqICAgIE5vdGUgdGhhdCB0aGUgc3Vic2NyaXB0aW9uIHNob3VsZCBydW4gY2FsbGJhY2tzIGluIHRoZSBbWm9uZV0gdGhlCiAgICogICAgc3RyZWFtIHdhcyBsaXN0ZW5lZCB0byAoc2VlIFtab25lXSBhbmQgW1pvbmUuYmluZENhbGxiYWNrXSkuCiAgICoKICAgKiBFeGFtcGxlOgogICAqCiAgICogYGBgCiAgICogLy8vIFN0YXJ0cyBsaXN0ZW5pbmcgdG8gW2lucHV0XSBhbmQgZHVwbGljYXRlcyBhbGwgbm9uLWVycm9yIGV2ZW50cy4KICAgKiBTdHJlYW1TdWJzY3JpcHRpb248aW50PiBfb25MaXN0ZW4oU3RyZWFtPGludD4gaW5wdXQsIGJvb2wgY2FuY2VsT25FcnJvcikgewogICAqICAgU3RyZWFtU3Vic2NyaXB0aW9uPFN0cmluZz4gc3Vic2NyaXB0aW9uOwogICAqICAgLy8gQ3JlYXRlIGNvbnRyb2xsZXIgdGhhdCBmb3J3YXJkcyBwYXVzZSwgcmVzdW1lIGFuZCBjYW5jZWwgZXZlbnRzLgogICAqICAgdmFyIGNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxTdHJpbmc+KAogICAqICAgICAgIG9uUGF1c2U6ICgpIHsKICAgKiAgICAgICAgIHN1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAqICAgICAgIH0sCiAgICogICAgICAgb25SZXN1bWU6ICgpIHsKICAgKiAgICAgICAgIHN1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgKiAgICAgICB9LAogICAqICAgICAgIG9uQ2FuY2VsOiAoKSA9PiBzdWJzY3JpcHRpb24uY2FuY2VsKCksCiAgICogICAgICAgc3luYzogdHJ1ZSk7IC8vICJzeW5jIiBpcyBjb3JyZWN0IGhlcmUsIHNpbmNlIGV2ZW50cyBhcmUgZm9yd2FyZGVkLgogICAqCiAgICogICAvLyBMaXN0ZW4gdG8gdGhlIHByb3ZpZGVkIHN0cmVhbSB1c2luZyBgY2FuY2VsT25FcnJvcmAuCiAgICogICBzdWJzY3JpcHRpb24gPSBpbnB1dC5saXN0ZW4oKGRhdGEpIHsKICAgKiAgICAgLy8gRHVwbGljYXRlIHRoZSBkYXRhLgogICAqICAgICBjb250cm9sbGVyLmFkZChkYXRhKTsKICAgKiAgICAgY29udHJvbGxlci5hZGQoZGF0YSk7CiAgICogICB9LAogICAqICAgICAgIG9uRXJyb3I6IGNvbnRyb2xsZXIuYWRkRXJyb3IsCiAgICogICAgICAgb25Eb25lOiBjb250cm9sbGVyLmNsb3NlLAogICAqICAgICAgIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogICAqCiAgICogICAvLyBSZXR1cm4gYSBuZXcgW1N0cmVhbVN1YnNjcmlwdGlvbl0gYnkgbGlzdGVuaW5nIHRvIHRoZSBjb250cm9sbGVyJ3MKICAgKiAgIC8vIHN0cmVhbS4KICAgKiAgIHJldHVybiBjb250cm9sbGVyLnN0cmVhbS5saXN0ZW4obnVsbCk7CiAgICogfQogICAqCiAgICogLy8gSW5zdGFudGlhdGUgYSB0cmFuc2Zvcm1lcjoKICAgKiB2YXIgZHVwbGljYXRvciA9IGNvbnN0IFN0cmVhbVRyYW5zZm9ybWVyPGludCwgaW50Pihfb25MaXN0ZW4pOwogICAqCiAgICogLy8gVXNlIGFzIGZvbGxvd3M6CiAgICogaW50U3RyZWFtLnRyYW5zZm9ybShkdXBsaWNhdG9yKTsKICAgKiBgYGAKICAgKi8KICBjb25zdCBmYWN0b3J5IFN0cmVhbVRyYW5zZm9ybWVyKAogICAgICAgICAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IG9uTGlzdGVuKAogICAgICAgICAgICAgIFN0cmVhbTxTPiBzdHJlYW0sIGJvb2wgY2FuY2VsT25FcnJvcikpID0KICAgICAgX1N0cmVhbVN1YnNjcmlwdGlvblRyYW5zZm9ybWVyPFMsIFQ+OwoKICAvKioKICAgKiBDcmVhdGVzIGEgW1N0cmVhbVRyYW5zZm9ybWVyXSB0aGF0IGRlbGVnYXRlcyBldmVudHMgdG8gdGhlIGdpdmVuIGZ1bmN0aW9ucy4KICAgKgogICAqIEV4YW1wbGUgdXNlIG9mIGEgZHVwbGljYXRpbmcgdHJhbnNmb3JtZXI6CiAgICoKICAgKiBgYGAKICAgKiBzdHJpbmdTdHJlYW0udHJhbnNmb3JtKG5ldyBTdHJlYW1UcmFuc2Zvcm1lcjxTdHJpbmcsIFN0cmluZz4uZnJvbUhhbmRsZXJzKAogICAqICAgICBoYW5kbGVEYXRhOiAoU3RyaW5nIHZhbHVlLCBFdmVudFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICogICAgICAgc2luay5hZGQodmFsdWUpOwogICAqICAgICAgIHNpbmsuYWRkKHZhbHVlKTsgIC8vIER1cGxpY2F0ZSB0aGUgaW5jb21pbmcgZXZlbnRzLgogICAqICAgICB9KSk7CiAgICogYGBgCiAgICoKICAgKiBUcmFuc2Zvcm1lcnMgdGhhdCBhcmUgY29uc3RydWN0ZWQgdGhpcyB3YXkgY2Fubm90IHVzZSBjYXB0dXJlZCBzdGF0ZSBpZgogICAqIHRoZXkgYXJlIHVzZWQgaW4gc3RyZWFtcyB0aGF0IGNhbiBiZSBsaXN0ZW5lZCB0byBtdWx0aXBsZSB0aW1lcy4KICAgKiBgYGAKICAgKiBTdHJlYW1Db250cm9sbGVyPFN0cmluZz4gY29udHJvbGxlcjsKICAgKiBjb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXIuYnJvYWRjYXN0KG9uTGlzdGVuOiAoKSB7CiAgICogICBzY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICogICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IoIkJhZCIpOwogICAqICAgICBjb250cm9sbGVyLmFkZEVycm9yKCJXb3JzZSIpOwogICAqICAgICBjb250cm9sbGVyLmFkZEVycm9yKCJXb3JzdCIpOwogICAqICAgfSk7CiAgICogfSk7CiAgICogdmFyIHNoYXJlZFN0YXRlID0gMDsKICAgKiB2YXIgdHJhbnNmb3JtZWRTdHJlYW0gPSBjb250cm9sbGVyLnN0cmVhbS50cmFuc2Zvcm0oCiAgICogICAgIG5ldyBTdHJlYW1UcmFuc2Zvcm1lcjxTdHJpbmc+LmZyb21IYW5kbGVycygKICAgKiAgICAgICAgIGhhbmRsZUVycm9yOiAoZXJyb3IsIHN0YWNrVHJhY2UsIHNpbmspIHsKICAgKiAgIHNoYXJlZFN0YXRlKys7IC8vIEluY3JlbWVudCBzaGFyZWQgZXJyb3ItY291bnRlci4KICAgKiAgIHNpbmsuYWRkKCJFcnJvciAkc2hhcmVkU3RhdGU6ICRlcnJvciIpOwogICAqIH0pKTsKICAgKgogICAqIHRyYW5zZm9ybWVkU3RyZWFtLmxpc3RlbihwcmludCk7CiAgICogdHJhbnNmb3JtZWRTdHJlYW0ubGlzdGVuKHByaW50KTsgLy8gTGlzdGVuIHR3aWNlLgogICAqIC8vIExpc3RlbmluZyB0d2ljZSB0byB0aGUgc2FtZSBzdHJlYW0gbWFrZXMgdGhlIHRyYW5zZm9ybWVyIHNoYXJlIHRoZSBzYW1lCiAgICogLy8gc3RhdGUuIEluc3RlYWQgb2YgaGF2aW5nICJFcnJvciAxOiBCYWQiLCAiRXJyb3IgMjogV29yc2UiLAogICAqIC8vICJFcnJvciAzOiBXb3JzdCIgYXMgb3V0cHV0IChlYWNoIHR3aWNlIGZvciB0aGUgc2VwYXJhdGUgc3Vic2NyaXB0aW9ucyksCiAgICogLy8gdGhpcyBwcm9ncmFtIGVtaXRzOgogICAqIC8vIEVycm9yIDE6IEJhZAogICAqIC8vIEVycm9yIDI6IEJhZAogICAqIC8vIEVycm9yIDM6IFdvcnNlCiAgICogLy8gRXJyb3IgNDogV29yc2UKICAgKiAvLyBFcnJvciA1OiBXb3JzdAogICAqIC8vIEVycm9yIDY6IFdvcnN0CiAgICogYGBgCiAgICovCiAgZmFjdG9yeSBTdHJlYW1UcmFuc2Zvcm1lci5mcm9tSGFuZGxlcnMoCiAgICAgIHt2b2lkIGhhbmRsZURhdGEoUyBkYXRhLCBFdmVudFNpbms8VD4gc2luayksCiAgICAgIHZvaWQgaGFuZGxlRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UsIEV2ZW50U2luazxUPiBzaW5rKSwKICAgICAgdm9pZCBoYW5kbGVEb25lKEV2ZW50U2luazxUPiBzaW5rKX0pID0gX1N0cmVhbUhhbmRsZXJUcmFuc2Zvcm1lcjxTLCBUPjsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtTdHJlYW1UcmFuc2Zvcm1lcl0gYmFzZWQgb24gYSBbYmluZF0gY2FsbGJhY2suCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIHRyYW5zZm9ybWVyIHVzZXMgdGhlIFtiaW5kXSBhcmd1bWVudCB0byBpbXBsZW1lbnQgdGhlCiAgICogW1N0cmVhbVRyYW5zZm9ybWVyLmJpbmRdIEFQSSBhbmQgY2FuIGJlIHVzZWQgd2hlbiB0aGUgdHJhbnNmb3JtYXRpb24gaXMKICAgKiBhdmFpbGFibGUgYXMgYSBzdHJlYW0tdG8tc3RyZWFtIGZ1bmN0aW9uLgogICAqCiAgICogYGBgZGFydAogICAqIGZpbmFsIHNwbGl0RGVjb2RlZCA9IFN0cmVhbVRyYW5zZm9ybWVyPExpc3Q8aW50PiwgU3RyaW5nPi5mcm9tQmluZCgKICAgKiAgICAgKHN0cmVhbSkgPT4gc3RyZWFtLnRyYW5zZm9ybSh1dGY4LmRlY29kZXIpLnRyYW5zZm9ybShMaW5lU3BsaXR0ZXIoKSkpOwogICAqIGBgYAogICAqLwogIEBTaW5jZSgiMi4xIikKICBmYWN0b3J5IFN0cmVhbVRyYW5zZm9ybWVyLmZyb21CaW5kKFN0cmVhbTxUPiBGdW5jdGlvbihTdHJlYW08Uz4pIGJpbmQpID0KICAgICAgX1N0cmVhbUJpbmRUcmFuc2Zvcm1lcjxTLCBUPjsKCiAgLyoqCiAgICogQWRhcHRzIFtzb3VyY2VdIHRvIGJlIGEgYFN0cmVhbVRyYW5zZm9ybWVyPFRTLCBUVD5gLgogICAqCiAgICogVGhpcyBhbGxvd3MgW3NvdXJjZV0gdG8gYmUgdXNlZCBhdCB0aGUgbmV3IHR5cGUsIGJ1dCBhdCBydW4tdGltZSBpdAogICAqIG11c3Qgc2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIG9mIGJvdGggdGhlIG5ldyB0eXBlIGFuZCBpdHMgb3JpZ2luYWwgdHlwZS4KICAgKgogICAqIERhdGEgZXZlbnRzIHBhc3NlZCBpbnRvIHRoZSByZXR1cm5lZCB0cmFuc2Zvcm1lciBtdXN0IGFsc28gYmUgaW5zdGFuY2VzCiAgICogb2YgW1NTXSwgYW5kIGRhdGEgZXZlbnRzIHByb2R1Y2VkIGJ5IFtzb3VyY2VdIGZvciB0aG9zZSBldmVudHMgbXVzdAogICAqIGFsc28gYmUgaW5zdGFuY2VzIG9mIFtUVF0uCiAgICovCiAgc3RhdGljIFN0cmVhbVRyYW5zZm9ybWVyPFRTLCBUVD4gY2FzdEZyb208U1MsIFNULCBUUywgVFQ+KAogICAgICBTdHJlYW1UcmFuc2Zvcm1lcjxTUywgU1Q+IHNvdXJjZSkgewogICAgcmV0dXJuIG5ldyBDYXN0U3RyZWFtVHJhbnNmb3JtZXI8U1MsIFNULCBUUywgVFQ+KHNvdXJjZSk7CiAgfQoKICAvKioKICAgKiBUcmFuc2Zvcm1zIHRoZSBwcm92aWRlZCBbc3RyZWFtXS4KICAgKgogICAqIFJldHVybnMgYSBuZXcgc3RyZWFtIHdpdGggZXZlbnRzIHRoYXQgYXJlIGNvbXB1dGVkIGZyb20gZXZlbnRzIG9mIHRoZQogICAqIHByb3ZpZGVkIFtzdHJlYW1dLgogICAqCiAgICogVGhlIFtTdHJlYW1UcmFuc2Zvcm1lcl0gaW50ZXJmYWNlIGlzIGNvbXBsZXRlbHkgZ2VuZXJpYywKICAgKiBzbyBpdCBjYW5ub3Qgc2F5IHdoYXQgc3ViY2xhc3NlcyBkby4KICAgKiBFYWNoIFtTdHJlYW1UcmFuc2Zvcm1lcl0gc2hvdWxkIGRvY3VtZW50IGNsZWFybHkgaG93IGl0IHRyYW5zZm9ybXMgdGhlCiAgICogc3RyZWFtIChvbiB0aGUgY2xhc3Mgb3IgdmFyaWFibGUgdXNlZCB0byBhY2Nlc3MgdGhlIHRyYW5zZm9ybWVyKSwKICAgKiBhcyB3ZWxsIGFzIGFueSBkaWZmZXJlbmNlcyBmcm9tIHRoZSBmb2xsb3dpbmcgdHlwaWNhbCBiZWhhdmlvcjoKICAgKgogICAqICogV2hlbiB0aGUgcmV0dXJuZWQgc3RyZWFtIGlzIGxpc3RlbmVkIHRvLCBpdCBzdGFydHMgbGlzdGVuaW5nIHRvIHRoZQogICAqICAgaW5wdXQgW3N0cmVhbV0uCiAgICogKiBTdWJzY3JpcHRpb25zIG9mIHRoZSByZXR1cm5lZCBzdHJlYW0gZm9yd2FyZCAoaW4gYSByZWFzb25hYmxlIHRpbWUpCiAgICogICBhIFtTdHJlYW1TdWJzY3JpcHRpb24ucGF1c2VdIGNhbGwgdG8gdGhlIHN1YnNjcmlwdGlvbiBvZiB0aGUgaW5wdXQKICAgKiAgIFtzdHJlYW1dLgogICAqICogU2ltaWxhcmx5LCBjYW5jZWxpbmcgYSBzdWJzY3JpcHRpb24gb2YgdGhlIHJldHVybmVkIHN0cmVhbSBldmVudHVhbGx5CiAgICogICAoaW4gcmVhc29uYWJsZSB0aW1lKSBjYW5jZWxzIHRoZSBzdWJzY3JpcHRpb24gb2YgdGhlIGlucHV0IFtzdHJlYW1dLgogICAqCiAgICogIlJlYXNvbmFibGUgdGltZSIgZGVwZW5kcyBvbiB0aGUgdHJhbnNmb3JtZXIgYW5kIHN0cmVhbS4gU29tZSB0cmFuc2Zvcm1lcnMsCiAgICogbGlrZSBhICJ0aW1lb3V0IiB0cmFuc2Zvcm1lciwgbWlnaHQgbWFrZSB0aGVzZSBvcGVyYXRpb25zIGRlcGVuZCBvbiBhCiAgICogZHVyYXRpb24uIE90aGVycyBtaWdodCBub3QgZGVsYXkgdGhlbSBhdCBhbGwsIG9yIGp1c3QgYnkgYSBtaWNyb3Rhc2suCiAgICoKICAgKiBUcmFuc2Zvcm1lcnMgYXJlIGZyZWUgdG8gaGFuZGxlIGVycm9ycyBpbiBhbnkgd2F5LgogICAqIEEgdHJhbnNmb3JtZXIgaW1wbGVtZW50YXRpb24gbWF5IGNob29zZSB0byBwcm9wYWdhdGUgZXJyb3JzLAogICAqIG9yIGNvbnZlcnQgdGhlbSB0byBvdGhlciBldmVudHMsIG9yIGlnbm9yZSB0aGVtIGNvbXBsZXRlbHksCiAgICogYnV0IGlmIGVycm9ycyBhcmUgaWdub3JlZCwgaXQgc2hvdWxkIGJlIGRvY3VtZW50ZWQgZXhwbGljaXRseS4KICAgKi8KICBTdHJlYW08VD4gYmluZChTdHJlYW08Uz4gc3RyZWFtKTsKCiAgLyoqCiAgICogUHJvdmlkZXMgYSBgU3RyZWFtVHJhbnNmb3JtZXI8UlMsIFJUPmAgdmlldyBvZiB0aGlzIHN0cmVhbSB0cmFuc2Zvcm1lci4KICAgKgogICAqIFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZXIgd2lsbCBjaGVjayBhdCBydW4tdGltZSB0aGF0IGFsbCBkYXRhIGV2ZW50cwogICAqIG9mIHRoZSBzdHJlYW0gaXQgdHJhbnNmb3JtcyBhcmUgYWN0dWFsbHkgaW5zdGFuY2VzIG9mIFtTXSwKICAgKiBhbmQgaXQgd2lsbCBjaGVjayB0aGF0IGFsbCBkYXRhIGV2ZW50cyBwcm9kdWNlZCBieSB0aGlzIHRyYW5zZm9ybWVyCiAgICogYXJlIGFjdHVhbGx5IGluc3RhbmNlcyBvZiBbUlRdLgogICAqLwogIFN0cmVhbVRyYW5zZm9ybWVyPFJTLCBSVD4gY2FzdDxSUywgUlQ+KCk7Cn0KCi8qKgogKiBCYXNlIGNsYXNzIGZvciBpbXBsZW1lbnRpbmcgW1N0cmVhbVRyYW5zZm9ybWVyXS4KICoKICogQ29udGFpbnMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMgb2YgZXZlcnkgbWV0aG9kIGV4Y2VwdCBbYmluZF0uCiAqLwphYnN0cmFjdCBjbGFzcyBTdHJlYW1UcmFuc2Zvcm1lckJhc2U8UywgVD4gaW1wbGVtZW50cyBTdHJlYW1UcmFuc2Zvcm1lcjxTLCBUPiB7CiAgY29uc3QgU3RyZWFtVHJhbnNmb3JtZXJCYXNlKCk7CgogIFN0cmVhbVRyYW5zZm9ybWVyPFJTLCBSVD4gY2FzdDxSUywgUlQ+KCkgPT4KICAgICAgU3RyZWFtVHJhbnNmb3JtZXIuY2FzdEZyb208UywgVCwgUlMsIFJUPih0aGlzKTsKfQoKLyoqCiAqIEFuIFtJdGVyYXRvcl0gbGlrZSBpbnRlcmZhY2UgZm9yIHRoZSB2YWx1ZXMgb2YgYSBbU3RyZWFtXS4KICoKICogVGhpcyB3cmFwcyBhIFtTdHJlYW1dIGFuZCBhIHN1YnNjcmlwdGlvbiBvbiB0aGUgc3RyZWFtLiBJdCBsaXN0ZW5zCiAqIG9uIHRoZSBzdHJlYW0sIGFuZCBjb21wbGV0ZXMgdGhlIGZ1dHVyZSByZXR1cm5lZCBieSBbbW92ZU5leHRdIHdoZW4gdGhlCiAqIG5leHQgdmFsdWUgYmVjb21lcyBhdmFpbGFibGUuCiAqCiAqIFRoZSBzdHJlYW0gbWF5IGJlIHBhdXNlZCBiZXR3ZWVuIGNhbGxzIHRvIFttb3ZlTmV4dF0uCiAqLwphYnN0cmFjdCBjbGFzcyBTdHJlYW1JdGVyYXRvcjxUPiB7CiAgLyoqIENyZWF0ZSBhIFtTdHJlYW1JdGVyYXRvcl0gb24gW3N0cmVhbV0uICovCiAgZmFjdG9yeSBTdHJlYW1JdGVyYXRvcihTdHJlYW08VD4gc3RyZWFtKQogICAgICAvLyBUT0RPKGxybik6IHVzZSByZWRpcmVjdGluZyBmYWN0b3J5IGNvbnN0cnVjdG9yIHdoZW4gdHlwZQogICAgICAvLyBhcmd1bWVudHMgYXJlIHN1cHBvcnRlZC4KICAgICAgPT4KICAgICAgbmV3IF9TdHJlYW1JdGVyYXRvcjxUPihzdHJlYW0pOwoKICAvKioKICAgKiBXYWl0IGZvciB0aGUgbmV4dCBzdHJlYW0gdmFsdWUgdG8gYmUgYXZhaWxhYmxlLgogICAqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB3aGljaCB3aWxsIGNvbXBsZXRlIHdpdGggZWl0aGVyIGB0cnVlYCBvciBgZmFsc2VgLgogICAqIENvbXBsZXRpbmcgd2l0aCBgdHJ1ZWAgbWVhbnMgdGhhdCBhbm90aGVyIGV2ZW50IGhhcyBiZWVuIHJlY2VpdmVkIGFuZAogICAqIGNhbiBiZSByZWFkIGFzIFtjdXJyZW50XS4KICAgKiBDb21wbGV0aW5nIHdpdGggYGZhbHNlYCBtZWFucyB0aGF0IHRoZSBzdHJlYW0gaXRlcmF0aW9uIGlzIGRvbmUgYW5kCiAgICogbm8gZnVydGhlciBldmVudHMgd2lsbCBldmVyIGJlIGF2YWlsYWJsZS4KICAgKiBUaGUgZnV0dXJlIG1heSBjb21wbGV0ZSB3aXRoIGFuIGVycm9yLCBpZiB0aGUgc3RyZWFtIHByb2R1Y2VzIGFuIGVycm9yLAogICAqIHdoaWNoIGFsc28gZW5kcyBpdGVyYXRpb24uCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gbXVzdCBub3QgYmUgY2FsbGVkIGFnYWluIHVudGlsIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgYQogICAqIHByZXZpb3VzIGNhbGwgaXMgY29tcGxldGVkLgogICAqLwogIEZ1dHVyZTxib29sPiBtb3ZlTmV4dCgpOwoKICAvKioKICAgKiBUaGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgc3RyZWFtLgogICAqCiAgICogSXMgYG51bGxgIGJlZm9yZSB0aGUgZmlyc3QgY2FsbCB0byBbbW92ZU5leHRdIGFuZCBhZnRlciBhIGNhbGwgdG8KICAgKiBgbW92ZU5leHRgIGNvbXBsZXRlcyB3aXRoIGEgYGZhbHNlYCByZXN1bHQgb3IgYW4gZXJyb3IuCiAgICoKICAgKiBXaGVuIGEgYG1vdmVOZXh0YCBjYWxsIGNvbXBsZXRlcyB3aXRoIGB0cnVlYCwgdGhlIGBjdXJyZW50YCBmaWVsZCBob2xkcwogICAqIHRoZSBtb3N0IHJlY2VudCBldmVudCBvZiB0aGUgc3RyZWFtLCBhbmQgaXQgc3RheXMgbGlrZSB0aGF0IHVudGlsIHRoZSBuZXh0CiAgICogY2FsbCB0byBgbW92ZU5leHRgLgogICAqIEJldHdlZW4gYSBjYWxsIHRvIGBtb3ZlTmV4dGAgYW5kIHdoZW4gaXRzIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMsCiAgICogdGhlIHZhbHVlIGlzIHVuc3BlY2lmaWVkLgogICAqLwogIFQgZ2V0IGN1cnJlbnQ7CgogIC8qKgogICAqIENhbmNlbHMgdGhlIHN0cmVhbSBpdGVyYXRvciAoYW5kIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBzdWJzY3JpcHRpb24pIGVhcmx5LgogICAqCiAgICogVGhlIHN0cmVhbSBpdGVyYXRvciBpcyBhdXRvbWF0aWNhbGx5IGNhbmNlbGVkIGlmIHRoZSBbbW92ZU5leHRdIGZ1dHVyZQogICAqIGNvbXBsZXRlcyB3aXRoIGVpdGhlciBgZmFsc2VgIG9yIGFuIGVycm9yLgogICAqCiAgICogSWYgeW91IG5lZWQgdG8gc3RvcCBsaXN0ZW5pbmcgZm9yIHZhbHVlcyBiZWZvcmUgdGhlIHN0cmVhbSBpdGVyYXRvciBpcwogICAqIGF1dG9tYXRpY2FsbHkgY2xvc2VkLCB5b3UgbXVzdCBjYWxsIFtjYW5jZWxdIHRvIGVuc3VyZSB0aGF0IHRoZSBzdHJlYW0KICAgKiBpcyBwcm9wZXJseSBjbG9zZWQuCiAgICoKICAgKiBJZiBbbW92ZU5leHRdIGhhcyBiZWVuIGNhbGxlZCB3aGVuIHRoZSBpdGVyYXRvciBpcyBjYW5jZWxlZCwKICAgKiBpdHMgcmV0dXJuZWQgZnV0dXJlIHdpbGwgY29tcGxldGUgd2l0aCBgZmFsc2VgIGFzIHZhbHVlLAogICAqIGFzIHdpbGwgYWxsIGZ1cnRoZXIgY2FsbHMgdG8gW21vdmVOZXh0XS4KICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgaWYgdGhlIGNhbmNlbC1vcGVyYXRpb24g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PQVNUBlKHwYRAQZRBUwwBUxMGQVCPi4FTh8GEwIBBEcEPxMrARUVBAEyJwQBERMEAgEWZGFydDphc3luYy9zdHJlYW0uZGFydDhvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvYXN5bmMvc3RyZWFtX2NvbnRyb2xsZXIuZGFydMAAf68vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmFzeW5jOwoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb250cm9sbGVyIGZvciBjcmVhdGluZyBhbmQgYWRkaW5nIGV2ZW50cyB0byBhIHN0cmVhbS4KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLyoqCiAqIFR5cGUgb2YgYSBzdHJlYW0gY29udHJvbGxlcidzIGBvbkxpc3RlbmAsIGBvblBhdXNlYCBhbmQgYG9uUmVzdW1lYCBjYWxsYmFja3MuCiAqLwp0eXBlZGVmIHZvaWQgQ29udHJvbGxlckNhbGxiYWNrKCk7CgovKioKICogVHlwZSBvZiBzdHJlYW0gY29udHJvbGxlciBgb25DYW5jZWxgIGNhbGxiYWNrcy4KICoKICogVGhlIGNhbGxiYWNrIG1heSByZXR1cm4gZWl0aGVyIGB2b2lkYCBvciBhIGZ1dHVyZS4KICovCnR5cGVkZWYgQ29udHJvbGxlckNhbmNlbENhbGxiYWNrKCk7CgovKioKICogQSBjb250cm9sbGVyIHdpdGggdGhlIHN0cmVhbSBpdCBjb250cm9scy4KICoKICogVGhpcyBjb250cm9sbGVyIGFsbG93cyBzZW5kaW5nIGRhdGEsIGVycm9yIGFuZCBkb25lIGV2ZW50cyBvbgogKiBpdHMgW3N0cmVhbV0uCiAqIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIGEgc2ltcGxlIHN0cmVhbSB0aGF0IG90aGVycwogKiBjYW4gbGlzdGVuIG9uLCBhbmQgdG8gcHVzaCBldmVudHMgdG8gdGhhdCBzdHJlYW0uCiAqCiAqIEl0J3MgcG9zc2libGUgdG8gY2hlY2sgd2hldGhlciB0aGUgc3RyZWFtIGlzIHBhdXNlZCBvciBub3QsIGFuZCB3aGV0aGVyCiAqIGl0IGhhcyBzdWJzY3JpYmVycyBvciBub3QsIGFzIHdlbGwgYXMgZ2V0dGluZyBhIGNhbGxiYWNrIHdoZW4gZWl0aGVyIG9mCiAqIHRoZXNlIGNoYW5nZS4KICovCmFic3RyYWN0IGNsYXNzIFN0cmVhbUNvbnRyb2xsZXI8VD4gaW1wbGVtZW50cyBTdHJlYW1TaW5rPFQ+IHsKICAvKiogVGhlIHN0cmVhbSB0aGF0IHRoaXMgY29udHJvbGxlciBpcyBjb250cm9sbGluZy4gKi8KICBTdHJlYW08VD4gZ2V0IHN0cmVhbTsKCiAgLyoqCiAgICogQSBjb250cm9sbGVyIHdpdGggYSBbc3RyZWFtXSB0aGF0IHN1cHBvcnRzIG9ubHkgb25lIHNpbmdsZSBzdWJzY3JpYmVyLgogICAqCiAgICogSWYgW3N5bmNdIGlzIHRydWUsIHRoZSByZXR1cm5lZCBzdHJlYW0gY29udHJvbGxlciBpcyBhCiAgICogW1N5bmNocm9ub3VzU3RyZWFtQ29udHJvbGxlcl0sIGFuZCBtdXN0IGJlIHVzZWQgd2l0aCB0aGUgY2FyZQogICAqIGFuZCBhdHRlbnRpb24gbmVjZXNzYXJ5IHRvIG5vdCBicmVhayB0aGUgW1N0cmVhbV0gY29udHJhY3QuIElmIGluIGRvdWJ0LAogICAqIHVzZSB0aGUgbm9uLXN5bmMgdmVyc2lvbi4KICAgKgogICAqIFVzaW5nIGFuIGFzeW5jaHJvbm91cyBjb250cm9sbGVyIHdpbGwgbmV2ZXIgZ2l2ZSB0aGUgd3JvbmcKICAgKiBiZWhhdmlvciwgYnV0IHVzaW5nIGEgc3luY2hyb25vdXMgY29udHJvbGxlciBpbmNvcnJlY3RseSBjYW4gY2F1c2UKICAgKiBvdGhlcndpc2UgY29ycmVjdCBwcm9ncmFtcyB0byBicmVhay4KICAgKgogICAqIEEgc3luY2hyb25vdXMgY29udHJvbGxlciBpcyBvbmx5IGludGVuZGVkIGZvciBvcHRpbWl6aW5nIGV2ZW50CiAgICogcHJvcGFnYXRpb24gd2hlbiBvbmUgYXN5bmNocm9ub3VzIGV2ZW50IGltbWVkaWF0ZWx5IHRyaWdnZXJzIGFub3RoZXIuCiAgICogSXQgc2hvdWxkIG5vdCBiZSB1c2VkIHVubGVzcyB0aGUgY2FsbHMgdG8gW2FkZF0gb3IgW2FkZEVycm9yXQogICAqIGFyZSBndWFyYW50ZWVkIHRvIG9jY3VyIGluIHBsYWNlcyB3aGVyZSBpdCB3b24ndCBicmVhayBgU3RyZWFtYCBpbnZhcmlhbnRzLgogICAqCiAgICogVXNlIHN5bmNocm9ub3VzIGNvbnRyb2xsZXJzIG9ubHkgdG8gZm9yd2FyZCAocG90ZW50aWFsbHkgdHJhbnNmb3JtZWQpCiAgICogZXZlbnRzIGZyb20gYW5vdGhlciBzdHJlYW0gb3IgYSBmdXR1cmUuCiAgICoKICAgKiBBIFN0cmVhbSBzaG91bGQgYmUgaW5lcnQgdW50aWwgYSBzdWJzY3JpYmVyIHN0YXJ0cyBsaXN0ZW5pbmcgb24gaXQgKHVzaW5nCiAgICogdGhlIFtvbkxpc3Rlbl0gY2FsbGJhY2sgdG8gc3RhcnQgcHJvZHVjaW5nIGV2ZW50cykuIFN0cmVhbXMgc2hvdWxkIG5vdAogICAqIGxlYWsgcmVzb3VyY2VzIChsaWtlIHdlYnNvY2tldHMpIHdoZW4gbm8gdXNlciBldmVyIGxpc3RlbnMgb24gdGhlIHN0cmVhbS4KICAgKgogICAqIFRoZSBjb250cm9sbGVyIGJ1ZmZlcnMgYWxsIGluY29taW5nIGV2ZW50cyB1bnRpbCBhIHN1YnNjcmliZXIgaXMKICAgKiByZWdpc3RlcmVkLCBidXQgdGhpcyBmZWF0dXJlIHNob3VsZCBvbmx5IGJlIHVzZWQgaW4gcmFyZSBjaXJjdW1zdGFuY2VzLgogICAqCiAgICogVGhlIFtvblBhdXNlXSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgc3RyZWFtIGJlY29tZXMKICAgKiBwYXVzZWQuIFtvblJlc3VtZV0gaXMgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbSByZXN1bWVkLgogICAqCiAgICogVGhlIFtvbkxpc3Rlbl0gY2FsbGJhY2sgaXMgY2FsbGVkIHdoZW4gdGhlIHN0cmVhbQogICAqIHJlY2VpdmVzIGl0cyBsaXN0ZW5lciBhbmQgW29uQ2FuY2VsXSB3aGVuIHRoZSBsaXN0ZW5lciBlbmRzCiAgICogaXRzIHN1YnNjcmlwdGlvbi4gSWYgW29uQ2FuY2VsXSBuZWVkcyB0byBwZXJmb3JtIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24sCiAgICogW29uQ2FuY2VsXSBzaG91bGQgcmV0dXJuIGEgZnV0dXJlIHRoYXQgY29tcGxldGVzIHdoZW4gdGhlIGNhbmNlbCBvcGVyYXRpb24KICAgKiBpcyBkb25lLgogICAqCiAgICogSWYgdGhlIHN0cmVhbSBpcyBjYW5jZWxlZCBiZWZvcmUgdGhlIGNvbnRyb2xsZXIgbmVlZHMgbmV3IGRhdGEgdGhlCiAgICogW29uUmVzdW1lXSBjYWxsIG1pZ2h0IG5vdCBiZSBleGVjdXRlZC4KICAgKi8KICBmYWN0b3J5IFN0cmVhbUNvbnRyb2xsZXIoCiAgICAgIHt2b2lkIG9uTGlzdGVuKCksCiAgICAgIHZvaWQgb25QYXVzZSgpLAogICAgICB2b2lkIG9uUmVzdW1lKCksCiAgICAgIG9uQ2FuY2VsKCksCiAgICAgIGJvb2wgc3luYzogZmFsc2V9KSB7CiAgICByZXR1cm4gc3luYwogICAgICAgID8gbmV3IF9TeW5jU3RyZWFtQ29udHJvbGxlcjxUPihvbkxpc3Rlbiwgb25QYXVzZSwgb25SZXN1bWUsIG9uQ2FuY2VsKQogICAgICAgIDogbmV3IF9Bc3luY1N0cmVhbUNvbnRyb2xsZXI8VD4ob25MaXN0ZW4sIG9uUGF1c2UsIG9uUmVzdW1lLCBvbkNhbmNlbCk7CiAgfQoKICAvKioKICAgKiBBIGNvbnRyb2xsZXIgd2hlcmUgW3N0cmVhbV0gY2FuIGJlIGxpc3RlbmVkIHRvIG1vcmUgdGhhbiBvbmNlLgogICAqCiAgICogVGhlIFtTdHJlYW1dIHJldHVybmVkIGJ5IFtzdHJlYW1dIGlzIGEgYnJvYWRjYXN0IHN0cmVhbS4KICAgKiBJdCBjYW4gYmUgbGlzdGVuZWQgdG8gbW9yZSB0aGFuIG9uY2UuCiAgICoKICAgKiBBIFN0cmVhbSBzaG91bGQgYmUgaW5lcnQgdW50aWwgYSBzdWJzY3JpYmVyIHN0YXJ0cyBsaXN0ZW5pbmcgb24gaXQgKHVzaW5nCiAgICogdGhlIFtvbkxpc3Rlbl0gY2FsbGJhY2sgdG8gc3RhcnQgcHJvZHVjaW5nIGV2ZW50cykuIFN0cmVhbXMgc2hvdWxkIG5vdAogICAqIGxlYWsgcmVzb3VyY2VzIChsaWtlIHdlYnNvY2tldHMpIHdoZW4gbm8gdXNlciBldmVyIGxpc3RlbnMgb24gdGhlIHN0cmVhbS4KICAgKgogICAqIEJyb2FkY2FzdCBzdHJlYW1zIGRvIG5vdCBidWZmZXIgZXZlbnRzIHdoZW4gdGhlcmUgaXMgbm8gbGlzdGVuZXIuCiAgICoKICAgKiBUaGUgY29udHJvbGxlciBkaXN0cmlidXRlcyBhbnkgZXZlbnRzIHRvIGFsbCBjdXJyZW50bHkgc3Vic2NyaWJlZAogICAqIGxpc3RlbmVycyBhdCB0aGUgdGltZSB3aGVuIFthZGRdLCBbYWRkRXJyb3JdIG9yIFtjbG9zZV0gaXMgY2FsbGVkLgogICAqIEl0IGlzIG5vdCBhbGxvd2VkIHRvIGNhbGwgYGFkZGAsIGBhZGRFcnJvcmAsIG9yIGBjbG9zZWAgYmVmb3JlIGEgcHJldmlvdXMKICAgKiBjYWxsIGhhcyByZXR1cm5lZC4gVGhlIGNvbnRyb2xsZXIgZG9lcyBub3QgaGF2ZSBhbnkgaW50ZXJuYWwgcXVldWUgb2YKICAgKiBldmVudHMsIGFuZCBpZiB0aGVyZSBhcmUgbm8gbGlzdGVuZXJzIGF0IHRoZSB0aW1lIHRoZSBldmVudCBpcyBhZGRlZCwKICAgKiBpdCB3aWxsIGp1c3QgYmUgZHJvcHBlZCwgb3IsIGlmIGl0IGlzIGFuIGVycm9yLCBiZSByZXBvcnRlZCBhcyB1bmNhdWdodC4KICAgKgogICAqIEVhY2ggbGlzdGVuZXIgc3Vic2NyaXB0aW9uIGlzIGhhbmRsZWQgaW5kZXBlbmRlbnRseSwKICAgKiBhbmQgaWYgb25lIHBhdXNlcywgb25seSB0aGUgcGF1c2luZyBsaXN0ZW5lciBpcyBhZmZlY3RlZC4KICAgKiBBIHBhdXNlZCBsaXN0ZW5lciB3aWxsIGJ1ZmZlciBldmVudHMgaW50ZXJuYWxseSB1bnRpbCB1bnBhdXNlZCBvciBjYW5jZWxlZC4KICAgKgogICAqIElmIFtzeW5jXSBpcyB0cnVlLCBldmVudHMgbWF5IGJlIGZpcmVkIGRpcmVjdGx5IGJ5IHRoZSBzdHJlYW0ncwogICAqIHN1YnNjcmlwdGlvbnMgZHVyaW5nIGFuIFthZGRdLCBbYWRkRXJyb3JdIG9yIFtjbG9zZV0gY2FsbC4KICAgKiBUaGUgcmV0dXJuZWQgc3RyZWFtIGNvbnRyb2xsZXIgaXMgYSBbU3luY2hyb25vdXNTdHJlYW1Db250cm9sbGVyXSwKICAgKiBhbmQgbXVzdCBiZSB1c2VkIHdpdGggdGhlIGNhcmUgYW5kIGF0dGVudGlvbiBuZWNlc3NhcnkgdG8gbm90IGJyZWFrCiAgICogdGhlIFtTdHJlYW1dIGNvbnRyYWN0LgogICAqIFNlZSBbQ29tcGxldGVyLnN5bmNdIGZvciBzb21lIGV4cGxhbmF0aW9ucyBvbiB3aGVuIGEgc3luY2hyb25vdXMKICAgKiBkaXNwYXRjaGluZyBjYW4gYmUgdXNlZC4KICAgKiBJZiBpbiBkb3VidCwga2VlcCB0aGUgY29udHJvbGxlciBub24tc3luYy4KICAgKgogICAqIElmIFtzeW5jXSBpcyBmYWxzZSwgdGhlIGV2ZW50IHdpbGwgYWx3YXlzIGJlIGZpcmVkIGF0IGEgbGF0ZXIgdGltZSwKICAgKiBhZnRlciB0aGUgY29kZSBhZGRpbmcgdGhlIGV2ZW50IGhhcyBjb21wbGV0ZWQuCiAgICogSW4gdGhhdCBjYXNlLCBubyBndWFyYW50ZWVzIGFyZSBnaXZlbiB3aXRoIHJlZ2FyZCB0byB3aGVuCiAgICogbXVsdGlwbGUgbGlzdGVuZXJzIGdldCB0aGUgZXZlbnRzLCBleGNlcHQgdGhhdCBlYWNoIGxpc3RlbmVyIHdpbGwgZ2V0CiAgICogYWxsIGV2ZW50cyBpbiB0aGUgY29ycmVjdCBvcmRlci4gRWFjaCBzdWJzY3JpcHRpb24gaGFuZGxlcyB0aGUgZXZlbnRzCiAgICogaW5kaXZpZHVhbGx5LgogICAqIElmIHR3byBldmVudHMgYXJlIHNlbnQgb24gYW4gYXN5bmMgY29udHJvbGxlciB3aXRoIHR3byBsaXN0ZW5lcnMsCiAgICogb25lIG9mIHRoZSBsaXN0ZW5lcnMgbWF5IGdldCBib3RoIGV2ZW50cwogICAqIGJlZm9yZSB0aGUgb3RoZXIgbGlzdGVuZXIgZ2V0cyBhbnkuCiAgICogQSBsaXN0ZW5lciBtdXN0IGJlIHN1YnNjcmliZWQgYm90aCB3aGVuIHRoZSBldmVudCBpcyBpbml0aWF0ZWQKICAgKiAodGhhdCBpcywgd2hlbiBbYWRkXSBpcyBjYWxsZWQpCiAgICogYW5kIHdoZW4gdGhlIGV2ZW50IGlzIGxhdGVyIGRlbGl2ZXJlZCwKICAgKiBpbiBvcmRlciB0byByZWNlaXZlIHRoZSBldmVudC4KICAgKgogICAqIFRoZSBbb25MaXN0ZW5dIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSBmaXJzdCBsaXN0ZW5lciBpcyBzdWJzY3JpYmVkLAogICAqIGFuZCB0aGUgW29uQ2FuY2VsXSBpcyBjYWxsZWQgd2hlbiB0aGVyZSBhcmUgbm8gbG9uZ2VyIGFueSBhY3RpdmUgbGlzdGVuZXJzLgogICAqIElmIGEgbGlzdGVuZXIgaXMgYWRkZWQgYWdhaW4gbGF0ZXIsIGFmdGVyIHRoZSBbb25DYW5jZWxdIHdhcyBjYWxsZWQsCiAgICogdGhlIFtvbkxpc3Rlbl0gd2lsbCBiZSBjYWxsZWQgYWdhaW4uCiAgICovCiAgZmFjdG9yeSBTdHJlYW1Db250cm9sbGVyLmJyb2FkY2FzdCgKICAgICAge3ZvaWQgb25MaXN0ZW4oKSwgdm9pZCBvbkNhbmNlbCgpLCBib29sIHN5bmM6IGZhbHNlfSkgewogICAgcmV0dXJuIHN5bmMKICAgICAgICA/IG5ldyBfU3luY0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4ob25MaXN0ZW4sIG9uQ2FuY2VsKQogICAgICAgIDogbmV3IF9Bc3luY0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4ob25MaXN0ZW4sIG9uQ2FuY2VsKTsKICB9CgogIC8qKgogICAqIFRoZSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgc3RyZWFtIGlzIGxpc3RlbmVkIHRvLgogICAqCiAgICogTWF5IGJlIHNldCB0byBgbnVsbGAsIGluIHdoaWNoIGNhc2Ugbm8gY2FsbGJhY2sgd2lsbCBoYXBwZW4uCiAgICovCiAgQ29udHJvbGxlckNhbGxiYWNrIGdldCBvbkxpc3RlbjsKCiAgdm9pZCBzZXQgb25MaXN0ZW4odm9pZCBvbkxpc3RlbkhhbmRsZXIoKSk7CgogIC8qKgogICAqIFRoZSBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiB0aGUgc3RyZWFtIGlzIHBhdXNlZC4KICAgKgogICAqIE1heSBiZSBzZXQgdG8gYG51bGxgLCBpbiB3aGljaCBjYXNlIG5vIGNhbGxiYWNrIHdpbGwgaGFwcGVuLgogICAqCiAgICogUGF1c2UgcmVsYXRlZCBjYWxsYmFja3MgYXJlIG5vdCBzdXBwb3J0ZWQgb24gYnJvYWRjYXN0IHN0cmVhbSBjb250cm9sbGVycy4KICAgKi8KICBDb250cm9sbGVyQ2FsbGJhY2sgZ2V0IG9uUGF1c2U7CgogIHZvaWQgc2V0IG9uUGF1c2Uodm9pZCBvblBhdXNlSGFuZGxlcigpKTsKCiAgLyoqCiAgICogVGhlIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gaXMgcmVzdW1lZC4KICAgKgogICAqIE1heSBiZSBzZXQgdG8gYG51bGxgLCBpbiB3aGljaCBjYXNlIG5vIGNhbGxiYWNrIHdpbGwgaGFwcGVuLgogICAqCiAgICogUGF1c2UgcmVsYXRlZCBjYWxsYmFja3MgYXJlIG5vdCBzdXBwb3J0ZWQgb24gYnJvYWRjYXN0IHN0cmVhbSBjb250cm9sbGVycy4KICAgKi8KICBDb250cm9sbGVyQ2FsbGJhY2sgZ2V0IG9uUmVzdW1lOwoKICB2b2lkIHNldCBvblJlc3VtZSh2b2lkIG9uUmVzdW1lSGFuZGxlcigpKTsKCiAgLyoqCiAgICogVGhlIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gaXMgY2FuY2VsZWQuCiAgICoKICAgKiBNYXkgYmUgc2V0IHRvIGBudWxsYCwgaW4gd2hpY2ggY2FzZSBubyBjYWxsYmFjayB3aWxsIGhhcHBlbi4KICAgKi8KICBDb250cm9sbGVyQ2FuY2VsQ2FsbGJhY2sgZ2V0IG9uQ2FuY2VsOwoKICB2b2lkIHNldCBvbkNhbmNlbChvbkNhbmNlbEhhbmRsZXIoKSk7CgogIC8qKgogICAqIFJldHVybnMgYSB2aWV3IG9mIHRoaXMgb2JqZWN0IHRoYXQgb25seSBleHBvc2VzIHRoZSBbU3RyZWFtU2lua10gaW50ZXJmYWNlLgogICAqLwogIFN0cmVhbVNpbms8VD4gZ2V0IHNpbms7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIHN0cmVhbSBjb250cm9sbGVyIGlzIGNsb3NlZCBmb3IgYWRkaW5nIG1vcmUgZXZlbnRzLgogICAqCiAgICogVGhlIGNvbnRyb2xsZXIgYmVjb21lcyBjbG9zZWQgYnkgY2FsbGluZyB0aGUgW2Nsb3NlXSBtZXRob2QuCiAgICogTmV3IGV2ZW50cyBjYW5ub3QgYmUgYWRkZWQsIGJ5IGNhbGxpbmcgW2FkZF0gb3IgW2FkZEVycm9yXSwKICAgKiB0byBhIGNsb3NlZCBjb250cm9sbGVyLgogICAqCiAgICogSWYgdGhlIGNvbnRyb2xsZXIgaXMgY2xvc2VkLAogICAqIHRoZSAiZG9uZSIgZXZlbnQgbWlnaHQgbm90IGhhdmUgYmVlbiBkZWxpdmVyZWQgeWV0LAogICAqIGJ1dCBpdCBoYXMgYmVlbiBzY2hlZHVsZWQsIGFuZCBpdCBpcyB0b28gbGF0ZSB0byBhZGQgbW9yZSBldmVudHMuCiAgICovCiAgYm9vbCBnZXQgaXNDbG9zZWQ7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIHN1YnNjcmlwdGlvbiB3b3VsZCBuZWVkIHRvIGJ1ZmZlciBldmVudHMuCiAgICoKICAgKiBUaGlzIGlzIHRoZSBjYXNlIGlmIHRoZSBjb250cm9sbGVyJ3Mgc3RyZWFtIGhhcyBhIGxpc3RlbmVyIGFuZCBpdCBpcwogICAqIHBhdXNlZCwgb3IgaWYgaXQgaGFzIG5vdCByZWNlaXZlZCBhIGxpc3RlbmVyIHlldC4gSW4gdGhhdCBjYXNlLCB0aGUKICAgKiBjb250cm9sbGVyIGlzIGNvbnNpZGVyZWQgcGF1c2VkIGFzIHdlbGwuCiAgICoKICAgKiBBIGJyb2FkY2FzdCBzdHJlYW0gY29udHJvbGxlciBpcyBuZXZlciBjb25zaWRlcmVkIHBhdXNlZC4gSXQgYWx3YXlzCiAgICogZm9yd2FyZHMgaXRzIGV2ZW50cyB0byBhbGwgdW5jYW5jZWxlZCBzdWJzY3JpcHRpb25zLCBpZiBhbnksCiAgICogYW5kIGxldCB0aGUgc3Vic2NyaXB0aW9ucyBoYW5kbGUgdGhlaXIgb3duIHBhdXNpbmcgYW5kIGJ1ZmZlcmluZy4KICAgKi8KICBib29sIGdldCBpc1BhdXNlZDsKCiAgLyoqIFdoZXRoZXIgdGhlcmUgaXMgYSBzdWJzY3JpYmVyIG9uIHRoZSBbU3RyZWFtXS4gKi8KICBib29sIGdldCBoYXNMaXN0ZW5lcjsKCiAgLyoqCiAgICogU2VuZHMgYSBkYXRhIFtldmVudF0uCiAgICoKICAgKiBMaXN0ZW5lcnMgcmVjZWl2ZSB0aGlzIGV2ZW50IGluIGEgbGF0ZXIgbWljcm90YXNrLgogICAqCiAgICogTm90ZSB0aGF0IGEgc3luY2hyb25vdXMgY29udHJvbGxlciAoY3JlYXRlZCBieSBwYXNzaW5nIHRydWUgdG8gdGhlIGBzeW5jYAogICAqIHBhcmFtZXRlciBvZiB0aGUgYFN0cmVhbUNvbnRyb2xsZXJgIGNvbnN0cnVjdG9yKSBkZWxpdmVycyBldmVudHMKICAgKiBpbW1lZGlhdGVseS4gU2luY2UgdGhpcyBiZWhhdmlvciB2aW9sYXRlcyB0aGUgY29udHJhY3QgbWVudGlvbmVkIGhlcmUsCiAgICogc3luY2hyb25vdXMgY29udHJvbGxlcnMgc2hvdWxkIG9ubHkgYmUgdXNlZCBhcyBkZXNjcmliZWQgaW4gdGhlCiAgICogZG9jdW1lbnRhdGlvbiB0byBlbnN1cmUgdGhhdCB0aGUgZGVsaXZlcmVkIGV2ZW50cyBhbHdheXMgKmFwcGVhciogYXMgaWYKICAgKiB0aGV5IHdlcmUgZGVsaXZlcmVkIGluIGEgc2VwYXJhdGUgbWljcm90YXNrLgogICAqLwogIHZvaWQgYWRkKFQgZXZlbnQpOwoKICAvKioKICAgKiBTZW5kcyBvciBlbnF1ZXVlcyBhbiBlcnJvciBldmVudC4KICAgKgogICAqIElmIFtlcnJvcl0gaXMgYG51bGxgLCBpdCBpcyByZXBsYWNlZCBieSBhIFtOdWxsVGhyb3duRXJyb3JdLgogICAqCiAgICogTGlzdGVuZXJzIHJlY2VpdmUgdGhpcyBldmVudCBhdCBhIGxhdGVyIG1pY3JvdGFzay4gVGhpcyBiZWhhdmlvciBjYW4gYmUKICAgKiBvdmVycmlkZGVuIGJ5IHVzaW5nIGBzeW5jYCBjb250cm9sbGVycy4gTm90ZSwgaG93ZXZlciwgdGhhdCBzeW5jCiAgICogY29udHJvbGxlcnMgaGF2ZSB0byBzYXRpc2Z5IHRoZSBwcmVjb25kaXRpb25zIG1lbnRpb25lZCBpbiB0aGUKICAgKiBkb2N1bWVudGF0aW9uIG9mIHRoZSBjb25zdHJ1Y3RvcnMuCiAgICovCiAgdm9pZCBhZGRFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKTsKCiAgLyoqCiAgICogQ2xvc2VzIHRoZSBzdHJlYW0uCiAgICoKICAgKiBMaXN0ZW5lcnMgcmVjZWl2ZSB0aGUgZG9uZSBldmVudCBhdCBhIGxhdGVyIG1pY3JvdGFzay4gVGhpcyBiZWhhdmlvciBjYW4gYmUKICAgKiBvdmVycmlkZGVuIGJ5IHVzaW5nIGBzeW5jYCBjb250cm9sbGVycy4gTm90ZSwgaG93ZXZlciwgdGhhdCBzeW5jCiAgICogY29udHJvbGxlcnMgaGF2ZSB0byBzYXRpc2Z5IHRoZSBwcmVjb25kaXRpb25zIG1lbnRpb25lZCBpbiB0aGUKICAgKiBkb2N1bWVudGF0aW9uIG9mIHRoZSBjb25zdHJ1Y3RvcnMuCiAgICovCiAgRnV0dXJlIGNsb3NlKCk7CgogIC8qKgogICAqIFJlY2VpdmVzIGV2ZW50cyBmcm9tIFtzb3VyY2VdIGFuZCBwdXRzIHRoZW0gaW50byB0aGlzIGNvbnRyb2xsZXIncyBzdHJlYW0uCiAgICoKICAgKiBSZXR1cm5zIGEgZnV0dXJlIHdoaWNoIGNvbXBsZXRlcyB3aGVuIHRoZSBzb3VyY2Ugc3RyZWFtIGlzIGRvbmUuCiAgICoKICAgKiBFdmVudHMgbXVzdCBub3QgYmUgYWRkZWQgZGlyZWN0bHkgdG8gdGhpcyBjb250cm9sbGVyIHVzaW5nIFthZGRdLAogICAqIFthZGRFcnJvcl0sIFtjbG9zZV0gb3IgW2FkZFN0cmVhbV0sIHVudGlsIHRoZSByZXR1cm5lZCBmdXR1cmUKICAgKiBpcyBjb21wbGV0ZS4KICAgKgogICAqIERhdGEgYW5kIGVycm9yIGV2ZW50cyBhcmUgZm9yd2FyZGVkIHRvIHRoaXMgY29udHJvbGxlcidzIHN0cmVhbS4gQSBkb25lCiAgICogZXZlbnQgb24gdGhlIHNvdXJjZSB3aWxsIGVuZCB0aGUgYGFkZFN0cmVhbWAgb3BlcmF0aW9uIGFuZCBjb21wbGV0ZSB0aGUKICAgKiByZXR1cm5lZCBmdXR1cmUuCiAgICoKICAgKiBJZiBbY2FuY2VsT25FcnJvcl0gaXMgdHJ1ZSwgb25seSB0aGUgZmlyc3QgZXJyb3Igb24gW3NvdXJjZV0gaXMKICAgKiBmb3J3YXJkZWQgdG8gdGhlIGNvbnRyb2xsZXIncyBzdHJlYW0sIGFuZCB0aGUgYGFkZFN0cmVhbWAgZW5kcwogICAqIGFmdGVyIHRoaXMuIElmIFtjYW5jZWxPbkVycm9yXSBpcyBmYWxzZSwgYWxsIGVycm9ycyBhcmUgZm9yd2FyZGVkCiAgICogYW5kIG9ubHkgYSBkb25lIGV2ZW50IHdpbGwgZW5kIHRoZSBgYWRkU3RyZWFtYC4KICAgKiBJZiBbY2FuY2VsT25FcnJvcl0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gZmFsc2UuCiAgICovCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08VD4gc291cmNlLCB7Ym9vbCBjYW5jZWxPbkVycm9yfSk7Cn0KCi8qKgogKiBBIHN0cmVhbSBjb250cm9sbGVyIHRoYXQgZGVsaXZlcnMgaXRzIGV2ZW50cyBzeW5jaHJvbm91c2x5LgogKgogKiBBIHN5bmNocm9ub3VzIHN0cmVhbSBjb250cm9sbGVyIGlzIGludGVuZGVkIGZvciBjYXNlcyB3aGVyZQogKiBhbiBhbHJlYWR5IGFzeW5jaHJvbm91cyBldmVudCB0cmlnZ2VycyBhbiBldmVudCBvbiBhIHN0cmVhbS4KICoKICogSW5zdGVhZCBvZiBhZGRpbmcgdGhlIGV2ZW50IHRvIHRoZSBzdHJlYW0gaW4gYSBsYXRlciBtaWNyb3Rhc2ssCiAqIGNhdXNpbmcgZXh0cmEgbGF0ZW5jeSwgdGhlIGV2ZW50IGlzIGluc3RlYWQgZmlyZWQgaW1tZWRpYXRlbHkgYnkgdGhlCiAqIHN5bmNocm9ub3VzIHN0cmVhbSBjb250cm9sbGVyLCBhcyBpZiB0aGUgc3RyZWFtIGV2ZW50IHdhcwogKiB0aGUgY3VycmVudCBldmVudCBvciBtaWNyb3Rhc2suCiAqCiAqIFRoZSBzeW5jaHJvbm91cyBzdHJlYW0gY29udHJvbGxlciBjYW4gYmUgdXNlZCB0byBicmVhayB0aGUgY29udHJhY3QKICogb24gW1N0cmVhbV0sIGFuZCBpdCBtdXN0IGJlIHVzZWQgY2FyZWZ1bGx5IHRvIGF2b2lkIGRvaW5nIHNvLgogKgogKiBUaGUgb25seSBhZHZhbnRhZ2UgdG8gdXNpbmcgYSBbU3luY2hyb25vdXNTdHJlYW1Db250cm9sbGVyXSBvdmVyIGEKICogbm9ybWFsIFtTdHJlYW1Db250cm9sbGVyXSBpcyB0aGUgaW1wcm92ZWQgbGF0ZW5jeS4KICogT25seSB1c2UgdGhlIHN5bmNocm9ub3VzIHZlcnNpb24gaWYgdGhlIGltcHJvdmVtZW50IGlzIHNpZ25pZmljYW50LAogKiBhbmQgaWYgaXRzIHVzZSBpcyBzYWZlLiBPdGhlcndpc2UganVzdCB1c2UgYSBub3JtYWwgc3RyZWFtIGNvbnRyb2xsZXIsCiAqIHdoaWNoIHdpbGwgYWx3YXlzIGhhdmUgdGhlIGNvcnJlY3QgYmVoYXZpb3IgZm9yIGEgW1N0cmVhbV0sIGFuZCB3b24ndAogKiBhY2NpZGVudGFsbHkgYnJlYWsgb3RoZXIgY29kZS4KICoKICogQWRkaW5nIGV2ZW50cyB0byBhIHN5bmNocm9ub3VzIGNvbnRyb2xsZXIgc2hvdWxkIG9ubHkgaGFwcGVuIGFzIHRoZQogKiB2ZXJ5IGxhc3QgcGFydCBvZiB0aGUgaGFuZGxpbmcgb2YgdGhlIG9yaWdpbmFsIGV2ZW50LgogKiBBdCB0aGF0IHBvaW50LCBhZGRpbmcgYW4gZXZlbnQgdG8gdGhlIHN0cmVhbSBpcyBlcXVpdmFsZW50IHRvCiAqIHJldHVybmluZyB0byB0aGUgZXZlbnQgbG9vcCBhbmQgYWRkaW5nIHRoZSBldmVudCBpbiB0aGUgbmV4dCBtaWNyb3Rhc2suCiAqCiAqIEVhY2ggbGlzdGVuZXIgY2FsbGJhY2sgd2lsbCBiZSBydW4gYXMgaWYgaXQgd2FzIGEgdG9wLWxldmVsIGV2ZW50CiAqIG9yIG1pY3JvdGFzay4gVGhpcyBtZWFucyB0aGF0IGlmIGl0IHRocm93cywgdGhlIGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgYXMKICogdW5jYXVnaHQgYXMgc29vbiBhcyBwb3NzaWJsZS4KICogVGhpcyBpcyBvbmUgcmVhc29uIHRvIGFkZCB0aGUgZXZlbnQgYXMgdGhlIGxhc3QgdGhpbmcgaW4gdGhlIG9yaWdpbmFsIGV2ZW50CiAqIGhhbmRsZXIgLSBhbnkgYWN0aW9uIGRvbmUgYWZ0ZXIgYWRkaW5nIHRoZSBldmVudCB3aWxsIGRlbGF5IHRoZSByZXBvcnQgb2YKICogZXJyb3JzIGluIHRoZSBldmVudCBsaXN0ZW5lciBjYWxsYmFja3MuCiAqCiAqIElmIGFuIGV2ZW50IGlzIGFkZGVkIGluIGEgc2V0dGluZyB0aGF0IGlzbid0IGtub3duIHRvIGJlIGFub3RoZXIgZXZlbnQsCiAqIGl0IG1heSBjYXVzZSB0aGUgc3RyZWFtJ3MgbGlzdGVuZXIgdG8gZ2V0IHRoYXQgZXZlbnQgYmVmb3JlIHRoZSBsaXN0ZW5lcgogKiBpcyByZWFkeSB0byBoYW5kbGUgaXQuIFdlIHByb21pc2UgdGhhdCBhZnRlciBjYWxsaW5nIFtTdHJlYW0ubGlzdGVuXSwKICogeW91IHdvbid0IGdldCBhbnkgZXZlbnRzIHVudGlsIHRoZSBjb2RlIGRvaW5nIHRoZSBsaXN0ZW4gaGFzIGNvbXBsZXRlZC4KICogQ2FsbGluZyBbYWRkXSBpbiByZXNwb25zZSB0byBhIGZ1bmN0aW9uIGNhbGwgb2YgdW5rbm93biBvcmlnaW4gbWF5IGJyZWFrCiAqIHRoYXQgcHJvbWlzZS4KICoKICogQW4gW29uTGlzdGVuXSBjYWxsYmFjayBmcm9tIHRoZSBjb250cm9sbGVyIGlzICpub3QqIGFuIGFzeW5jaHJvbm91cyBldmVudCwKICogYW5kIGFkZGluZyBldmVudHMgdG8gdGhlIGNvbnRyb2xsZXIgaW4gdGhlIGBvbkxpc3RlbmAgY2FsbGJhY2sgaXMgYWx3YXlzCiAqIHdyb25nLiBUaGUgZXZlbnRzIHdpbGwgYmUgZGVsaXZlcmVkIGJlZm9yZSB0aGUgbGlzdGVuZXIgaGFzIGV2ZW4gcmVjZWl2ZWQKICogdGhlIHN1YnNjcmlwdGlvbiB5ZXQuCiAqCiAqIFRoZSBzeW5jaHJvbm91cyBicm9hZGNhc3Qgc3RyZWFtIGNvbnRyb2xsZXIgYWxzbyBoYXMgYSByZXN0cmljdGlvbnMgdGhhdCBhCiAqIG5vcm1hbCBzdHJlYW0gY29udHJvbGxlciBkb2VzIG5vdDoKICogVGhlIFthZGRdLCBbYWRkRXJyb3JdLCBbY2xvc2VdIGFuZCBbYWRkU3RyZWFtXSBtZXRob2RzICptdXN0IG5vdCogYmUKICogY2FsbGVkIHdoaWxlIGFuIGV2ZW50IGlzIGJlaW5nIGRlbGl2ZXJlZC4KICogVGhhdCBpcywgaWYgYSBjYWxsYmFjayBvbiBhIHN1YnNjcmlwdGlvbiBvbiB0aGUgY29udHJvbGxlcidzIHN0cmVhbSBjYXVzZXMKICogYSBjYWxsIHRvIGFueSBvZiB0aGUgZnVuY3Rpb25zIGFib3ZlLCB0aGUgY2FsbCB3aWxsIGZhaWwuCiAqIEEgYnJvYWRjYXN0IHN0cmVhbSBtYXkgaGF2ZSBtb3JlIHRoYW4gb25lIGxpc3RlbmVyLCBhbmQgaWYgYW4KICogZXZlbnQgaXMgYWRkZWQgc3luY2hyb25vdXNseSB3aGlsZSBhbm90aGVyIGlzIGJlaW5nIGFsc28gaW4gdGhlIHByb2Nlc3MKICogb2YgYmVpbmcgYWRkZWQsIHRoZSBsYXR0ZXIgZXZlbnQgbWlnaHQgcmVhY2ggc29tZSBsaXN0ZW5lcnMgYmVmb3JlCiAqIHRoZSBmb3JtZXIuIFRvIHByZXZlbnQgdGhhdCwgYW4gZXZlbnQgY2Fubm90IGJlIGFkZGVkIHdoaWxlIGEgcHJldmlvdXMKICogZXZlbnQgaXMgYmVpbmcgZmlyZWQuCiAqIFRoaXMgZ3VhcmFudGVlcyB0aGF0IGFuIGV2ZW50IGlzIGZ1bGx5IGRlbGl2ZXJlZCB3aGVuIHRoZQogKiBmaXJzdCBbYWRkXSwgW2FkZEVycm9yXSBvciBbY2xvc2VdIHJldHVybnMsCiAqIGFuZCBmdXJ0aGVyIGV2ZW50cyB3aWxsIGJlIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4KICoKICogVGhpcyBzdGlsbCBvbmx5IGd1YXJhbnRlZXMgdGhhdCB0aGUgZXZlbnQgaXMgZGVsaXZlcmVkIHRvIHRoZSBzdWJzY3JpcHRpb24uCiAqIElmIHRoZSBzdWJzY3JpcHRpb24gaXMgcGF1c2VkLCB0aGUgYWN0dWFsIGNhbGxiYWNrIG1heSBzdGlsbCBoYXBwZW4gbGF0ZXIsCiAqIGFuZCB0aGUgZXZlbnQgd2lsbCBpbnN0ZWFkIGJlIGJ1ZmZlcmVkIGJ5IHRoZSBzdWJzY3JpcHRpb24uCiAqIEJhcnJpbmcgcGF1c2luZywgYW5kIHRoZSBmb2xsb3dpbmcgYnVmZmVyZWQgZXZlbnRzIHRoYXQgaGF2ZW4ndCBiZWVuCiAqIGRlbGl2ZXJlZCB5ZXQsIGNhbGxiYWNrcyB3aWxsIGJlIGNhbGxlZCBzeW5jaHJvbm91c2x5IHdoZW4gYW4gZXZlbnQgaXMgYWRkZWQuCiAqCiAqIEFkZGluZyBhbiBldmVudCB0byBhIHN5bmNocm9ub3VzIG5vbi1icm9hZGNhc3Qgc3RyZWFtIGNvbnRyb2xsZXIgd2hpbGUKICogYW5vdGhlciBldmVudCBpcyBpbiBwcm9ncmVzcyBtYXkgY2F1c2UgdGhlIHNlY29uZCBldmVudCB0byBiZSBkZWxheWVkCiAqIGFuZCBub3QgYmUgZGVsaXZlcmVkIHN5bmNocm9ub3VzbHksIGFuZCB1bnRpbCB0aGF0IGV2ZW50IGlzIGRlbGl2ZXJlZCwKICogdGhlIGNvbnRyb2xsZXIgd2lsbCBub3QgYWN0IHN5bmNocm9ub3VzbHkuCiAqLwphYnN0cmFjdCBjbGFzcyBTeW5jaHJvbm91c1N0cmVhbUNvbnRyb2xsZXI8VD4gaW1wbGVtZW50cyBTdHJlYW1Db250cm9sbGVyPFQ+IHsKICAvKioKICAgKiBBZGRzIGV2ZW50IHRvIHRoZSBjb250cm9sbGVyJ3Mgc3RyZWFtLgogICAqCiAgICogQXMgW1N0cmVhbUNvbnRyb2xsZXIuYWRkXSwgYnV0IG11c3Qgbm90IGJlIGNhbGxlZCB3aGlsZSBhbiBldmVudCBpcwogICAqIGJlaW5nIGFkZGVkIGJ5IFthZGRdLCBbYWRkRXJyb3JdIG9yIFtjbG9zZV0uCiAgICovCiAgdm9pZCBhZGQoVCBkYXRhKTsKCiAgLyoqCiAgICogQWRkcyBlcnJvciB0byB0aGUgY29udHJvbGxlcidzIHN0cmVhbS4KICAgKgogICAqIEFzIFtTdHJlYW1Db250cm9sbGVyLmFkZEVycm9yXSwgYnV0IG11c3Qgbm90IGJlIGNhbGxlZCB3aGlsZSBhbiBldmVudCBpcwogICAqIGJlaW5nIGFkZGVkIGJ5IFthZGRdLCBbYWRkRXJyb3JdIG9yIFtjbG9zZV0uCiAgICovCiAgdm9pZCBhZGRFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKTsKCiAgLyoqCiAgICogQ2xvc2VzIHRoZSBjb250cm9sbGVyJ3Mgc3RyZWFtLgogICAqCiAgICogQXMgW1N0cmVhbUNvbnRyb2xsZXIuY2xvc2VdLCBidXQgbXVzdCBub3QgYmUgY2FsbGVkIHdoaWxlIGFuIGV2ZW50IGlzCiAgICogYmVpbmcgYWRkZWQgYnkgW2FkZF0sIFthZGRFcnJvcl0gb3IgW2Nsb3NlXS4KICAgKi8KICBGdXR1cmUgY2xvc2UoKTsKfQoKYWJzdHJhY3QgY2xhc3MgX1N0cmVhbUNvbnRyb2xsZXJMaWZlY3ljbGU8VD4gewogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBfc3Vic2NyaWJlKAogICAgICB2b2lkIG9uRGF0YShUIGRhdGEpLCBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpOwogIHZvaWQgX3JlY29yZFBhdXNlKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pIHt9CiAgdm9pZCBfcmVjb3JkUmVzdW1lKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pIHt9CiAgRnV0dXJlIF9yZWNvcmRDYW5jZWwoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikgPT4gbnVsbDsKfQoKLy8gQmFzZSB0eXBlIGZvciBpbXBsZW1lbnRhdGlvbnMgb2Ygc3RyZWFtIGNvbnRyb2xsZXJzLgphYnN0cmFjdCBjbGFzcyBfU3RyZWFtQ29udHJvbGxlckJhc2U8VD4KICAgIGltcGxlbWVudHMKICAgICAgICBTdHJlYW1Db250cm9sbGVyPFQ+LAogICAgICAgIF9TdHJlYW1Db250cm9sbGVyTGlmZWN5Y2xlPFQ+LAogICAgICAgIF9FdmVudFNpbms8VD4sCiAgICAgICAgX0V2ZW50RGlzcGF0Y2g8VD4ge30KCi8qKgogKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIFtTdHJlYW1Db250cm9sbGVyXS4KICoKICogQ29udHJvbHMgYSBzdHJlYW0gdGhhdCBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIGNvbnRyb2xsZXIuCiAqLwphYnN0cmFjdCBjbGFzcyBfU3RyZWFtQ29udHJvbGxlcjxUPiBpbXBsZW1lbnRzIF9TdHJlYW1Db250cm9sbGVyQmFzZTxUPiB7CiAgLy8gVGhlIHN0YXRlcyBhcmUgYml0LWZsYWdzLiBNb3JlIHRoYW4gb25lIGNhbiBiZSBzZXQgYXQgYSB0aW1lLgogIC8vCiAgLy8gVGhlICJzdWJzY3JpcHRpb24gc3RhdGUiIGdvZXMgdGhyb3VnaCB0aGUgc3RhdGVzOgogIC8vICAgaW5pdGlhbCAtPiBzdWJzY3JpYmVkIC0+IGNhbmNlbGVkLgogIC8vIFRoZXNlIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuCiAgLy8gVGhlICJjbG9zZWQiIHN0YXRlIHJlY29yZHMgd2hldGhlciB0aGUgW2Nsb3NlXSBtZXRob2QgaGFzIGJlZW4gY2FsbGVkCiAgLy8gb24gdGhlIGNvbnRyb2xsZXIuIFRoaXMgY2FuIGJlIGRvbmUgYXQgYW55IHRpbWUuIElmIGRvbmUgYmVmb3JlCiAgLy8gc3Vic2NyaXB0aW9uLCB0aGUgZG9uZSBldmVudCBpcyBxdWV1ZWQuIElmIGRvbmUgYWZ0ZXIgY2FuY2VsLCB0aGUgZG9uZQogIC8vIGV2ZW50IGlzIGlnbm9yZWQgKGp1c3QgYXMgYW55IG90aGVyIGV2ZW50IGFmdGVyIGEgY2FuY2VsKS4KCiAgLyoqIFRoZSBjb250cm9sbGVyIGlzIGluIGl0cyBpbml0aWFsIHN0YXRlIHdpdGggbm8gc3Vic2NyaXB0aW9uLiAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0lOSVRJQUwgPSAwOwogIC8qKiBUaGUgY29udHJvbGxlciBoYXMgYSBzdWJzY3JpcHRpb24sIGJ1dCBoYXNuJ3QgYmVlbiBjbG9zZWQgb3IgY2FuY2VsZWQuICovCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfU1VCU0NSSUJFRCA9IDE7CiAgLyoqIFRoZSBzdWJzY3JpcHRpb24gaXMgY2FuY2VsZWQuICovCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfQ0FOQ0VMRUQgPSAyOwogIC8qKiBNYXNrIGZvciB0aGUgc3Vic2NyaXB0aW9uIHN0YXRlLiAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX1NVQlNDUklQVElPTl9NQVNLID0gMzsKCiAgLy8gVGhlIGZvbGxvd2luZyBzdGF0ZSByZWxhdGUgdG8gdGhlIGNvbnRyb2xsZXIsIG5vdCB0aGUgc3Vic2NyaXB0aW9uLgogIC8vIElmIGNsb3NlZCwgYWRkaW5nIG1vcmUgZXZlbnRzIGlzIG5vdCBhbGxvd2VkLgogIC8vIElmIGV4ZWN1dGluZyBhbiBbYWRkU3RyZWFtXSwgbmV3IGV2ZW50cyBhcmUgbm90IGFsbG93ZWQgZWl0aGVyLCBidXQgd2lsbAogIC8vIGJlIGFkZGVkIGJ5IHRoZSBzdHJlYW0uCgogIC8qKgogICAqIFRoZSBjb250cm9sbGVyIGlzIGNsb3NlZCBkdWUgdG8gY2FsbGluZyBbY2xvc2VdLgogICAqCiAgICogV2hlbiB0aGUgc3RyZWFtIGlzIGNsb3NlZCwgeW91IGNhbiBuZWl0aGVyIGFkZCBuZXcgZXZlbnRzIG5vciBhZGQgbmV3CiAgICogbGlzdGVuZXJzLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0NMT1NFRCA9IDQ7CiAgLyoqCiAgICogVGhlIGNvbnRyb2xsZXIgaXMgaW4gdGhlIG1pZGRsZSBvZiBhbiBbYWRkU3RyZWFtXSBvcGVyYXRpb24uCiAgICoKICAgKiBXaGlsZSBhZGRpbmcgZXZlbnRzIGZyb20gYSBzdHJlYW0sIG5vIG5ldyBldmVudHMgY2FuIGJlIGFkZGVkIGRpcmVjdGx5CiAgICogb24gdGhlIGNvbnRyb2xsZXIuCiAgICovCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfQUREU1RSRUFNID0gODsKCiAgLyoqCiAgICogRmllbGQgY29udGFpbmluZyBkaWZmZXJlbnQgZGF0YSBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQgc3Vic2NyaXB0aW9uCiAgICogc3RhdGUuCiAgICoKICAgKiBJZiBbX3N0YXRlXSBpcyBbX1NUQVRFX0lOSVRJQUxdLCB0aGUgZmllbGQgbWF5IGNvbnRhaW4gYSBbX1BlbmRpbmdFdmVudHNdCiAgICogZm9yIGV2ZW50cyBhZGRlZCB0byB0aGUgY29udHJvbGxlciBiZWZvcmUgYSBzdWJzY3JpcHRpb24uCiAgICoKICAgKiBXaGlsZSBbX3N0YXRlXSBpcyBbX1NUQVRFX1NVQlNDUklCRURdLCB0aGUgZmllbGQgY29udGFpbnMgdGhlIHN1YnNjcmlwdGlvbi4KICAgKgogICAqIFdoZW4gW19zdGF0ZV0gaXMgW19TVEFURV9DQU5DRUxFRF0gdGhlIGZpZWxkIGlzIGN1cnJlbnRseSBub3QgdXNlZC4KICAgKi8KICB2YXIgX3ZhckRhdGE7CgogIC8qKiBDdXJyZW50IHN0YXRlIG9mIHRoZSBjb250cm9sbGVyLiAqLwogIGludCBfc3RhdGUgPSBfU1RBVEVfSU5JVElBTDsKCiAgLyoqCiAgICogRnV0dXJlIGNvbXBsZXRlZCB3aGVuIHRoZSBzdHJlYW0gc2VuZHMgaXRzIGxhc3QgZXZlbnQuCiAgICoKICAgKiBUaGlzIGlzIGFsc28gdGhlIGZ1dHVyZSByZXR1cm5lZCBieSBbY2xvc2VdLgogICAqLwogIC8vIFRPRE8obHJuKTogQ291bGQgdGhpcyBiZSBzdG9yZWQgaW4gdGhlIHZhckRhdGEgZmllbGQgdG9vLCBpZiBpdCdzIG5vdAogIC8vIGFjY2Vzc2VkIHVudGlsIHRoZSBjYWxsIHRvICJjbG9zZSI/IFRoZW4gd2UgbmVlZCB0byBzcGVjaWFsIGNhc2UgaWYgaXQncwogIC8vIGFjY2Vzc2VkIGVhcmxpZXIsIG9yIGlmIGNsb3NlIGlzIGNhbGxlZCBiZWZvcmUgc3Vic2NyaWJpbmcuCiAgX0Z1dHVyZSBfZG9uZUZ1dHVyZTsKCiAgQ29udHJvbGxlckNhbGxiYWNrIG9uTGlzdGVuOwogIENvbnRyb2xsZXJDYWxsYmFjayBvblBhdXNlOwogIENvbnRyb2xsZXJDYWxsYmFjayBvblJlc3VtZTsKICBDb250cm9sbGVyQ2FuY2VsQ2FsbGJhY2sgb25DYW5jZWw7CgogIF9TdHJlYW1Db250cm9sbGVyKHRoaXMub25MaXN0ZW4sIHRoaXMub25QYXVzZSwgdGhpcy5vblJlc3VtZSwgdGhpcy5vbkNhbmNlbCk7CgogIC8vIFJldHVybiBhIG5ldyBzdHJlYW0gZXZlcnkgdGltZS4gVGhlIHN0cmVhbXMgYXJlIGVxdWFsLCBidXQgbm90IGlkZW50aWNhbC4KICBTdHJlYW08VD4gZ2V0IHN0cmVhbSA9PiBuZXcgX0NvbnRyb2xsZXJTdHJlYW08VD4odGhpcyk7CgogIC8qKgogICAqIFJldHVybnMgYSB2aWV3IG9mIHRoaXMgb2JqZWN0IHRoYXQgb25seSBleHBvc2VzIHRoZSBbU3RyZWFtU2lua10gaW50ZXJmYWNlLgogICAqLwogIFN0cmVhbVNpbms8VD4gZ2V0IHNpbmsgPT4gbmV3IF9TdHJlYW1TaW5rV3JhcHBlcjxUPih0aGlzKTsKCiAgLyoqCiAgICogV2hldGhlciBhIGxpc3RlbmVyIGhhcyBleGlzdGVkIGFuZCBiZWVuIGNhbmNlbGVkLgogICAqCiAgICogQWZ0ZXIgdGhpcywgYWRkaW5nIG1vcmUgZXZlbnRzIHdpbGwgYmUgaWdub3JlZC4KICAgKi8KICBib29sIGdldCBfaXNDYW5jZWxlZCA9PiAoX3N0YXRlICYgX1NUQVRFX0NBTkNFTEVEKSAhPSAwOwoKICAvKiogV2hldGhlciB0aGVyZSBpcyBhbiBhY3RpdmUgbGlzdGVuZXIuICovCiAgYm9vbCBnZXQgaGFzTGlzdGVuZXIgPT4gKF9zdGF0ZSAmIF9TVEFURV9TVUJTQ1JJQkVEKSAhPSAwOwoKICAvKiogV2hldGhlciB0aGVyZSBoYXMgbm90IGJlZW4gYSBsaXN0ZW5lciB5ZXQuICovCiAgYm9vbCBnZXQgX2lzSW5pdGlhbFN0YXRlID0+CiAgICAgIChfc3RhdGUgJiBfU1RBVEVfU1VCU0NSSVBUSU9OX01BU0spID09IF9TVEFURV9JTklUSUFMOwoKICBib29sIGdldCBpc0Nsb3NlZCA9PiAoX3N0YXRlICYgX1NUQVRFX0NMT1NFRCkgIT0gMDsKCiAgYm9vbCBnZXQgaXNQYXVzZWQgPT4KICAgICAgaGFzTGlzdGVuZXIgPyBfc3Vic2NyaXB0aW9uLl9pc0lucHV0UGF1c2VkIDogIV9pc0NhbmNlbGVkOwoKICBib29sIGdldCBfaXNBZGRpbmdTdHJlYW0gPT4gKF9zdGF0ZSAmIF9TVEFURV9BRERTVFJFQU0pICE9IDA7CgogIC8qKiBOZXcgZXZlbnRzIG1heSBub3QgYmUgYWRkZWQgYWZ0ZXIgY2xvc2UsIG9yIGR1cmluZyBhZGRTdHJlYW0uICovCiAgYm9vbCBnZXQgX21heUFkZEV2ZW50ID0+IChfc3RhdGUgPCBfU1RBVEVfQ0xPU0VEKTsKCiAgLy8gUmV0dXJucyB0aGUgcGVuZGluZyBldmVudHMuCiAgLy8gUGVuZGluZyBldmVudHMgYXJlIGV2ZW50cyBhZGRlZCBiZWZvcmUgYSBzdWJzY3JpcHRpb24gZXhpc3RzLgogIC8vIFRoZXkgYXJlIGFkZGVkIHRvIHRoZSBzdWJzY3JpcHRpb24gd2hlbiBpdCBpcyBjcmVhdGVkLgogIC8vIFBlbmRpbmcgZXZlbnRzLCBpZiBhbnksIGFyZSBrZXB0IGluIHRoZSBfdmFyRGF0YSBmaWVsZCB1bnRpbCB0aGUKICAvLyBzdHJlYW0gaXMgbGlzdGVuZWQgdG8uCiAgLy8gV2hpbGUgYWRkaW5nIGEgc3RyZWFtLCBwZW5kaW5nIGV2ZW50cyBhcmUgbW92ZWQgaW50byB0aGUKICAvLyBzdGF0ZSBvYmplY3QgdG8gYWxsb3cgdGhlIHN0YXRlIG9iamVjdCB0byB1c2UgdGhlIF92YXJEYXRhIGZpZWxkLgogIF9QZW5kaW5nRXZlbnRzPFQ+IGdldCBfcGVuZGluZ0V2ZW50cyB7CiAgICBhc3NlcnQoX2lzSW5pdGlhbFN0YXRlKTsKICAgIGlmICghX2lzQWRkaW5nU3RyZWFtKSB7CiAgICAgIHJldHVybiBfdmFyRGF0YTsKICAgIH0KICAgIF9TdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtU3RhdGU8VD4gc3RhdGUgPSBfdmFyRGF0YTsKICAgIHJldHVybiBzdGF0ZS52YXJEYXRhOwogIH0KCiAgLy8gUmV0dXJucyB0aGUgcGVuZGluZyBldmVudHMsIGFuZCBjcmVhdGVzIHRoZSBvYmplY3QgaWYgbmVjZXNzYXJ5LgogIF9TdHJlYW1JbXBsRXZlbnRzPFQ+IF9lbnN1cmVQZW5kaW5nRXZlbnRzKCkgewogICAgYXNzZXJ0KF9pc0luaXRpYWxTdGF0ZSk7CiAgICBpZiAoIV9pc0FkZGluZ1N0cmVhbSkgewogICAgICBfdmFyRGF0YSA/Pz0gbmV3IF9TdHJlYW1JbXBsRXZlbnRzPFQ+KCk7CiAgICAgIHJldHVybiBfdmFyRGF0YTsKICAgIH0KICAgIF9TdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtU3RhdGU8VD4gc3RhdGUgPSBfdmFyRGF0YTsKICAgIGlmIChzdGF0ZS52YXJEYXRhID09IG51bGwpIHN0YXRlLnZhckRhdGEgPSBuZXcgX1N0cmVhbUltcGxFdmVudHM8VD4oKTsKICAgIHJldHVybiBzdGF0ZS52YXJEYXRhOwogIH0KCiAgLy8gR2V0IHRoZSBjdXJyZW50IHN1YnNjcmlwdGlvbi4KICAvLyBJZiB3ZSBhcmUgYWRkaW5nIGEgc3RyZWFtLCB0aGUgc3Vic2NyaXB0aW9uIGlzIG1vdmVkIGludG8gdGhlIHN0YXRlCiAgLy8gb2JqZWN0IHRvIGFsbG93IHRoZSBzdGF0ZSBvYmplY3QgdG8gdXNlIHRoZSBfdmFyRGF0YSBmaWVsZC4KICBfQ29udHJvbGxlclN1YnNjcmlwdGlvbjxUPiBnZXQgX3N1YnNjcmlwdGlvbiB7CiAgICBhc3NlcnQoaGFzTGlzdGVuZXIpOwogICAgaWYgKF9pc0FkZGluZ1N0cmVhbSkgewogICAgICBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlPFQ+IGFkZFN0YXRlID0gX3ZhckRhdGE7CiAgICAgIHJldHVybiBhZGRTdGF0ZS52YXJEYXRhOwogICAgfQogICAgcmV0dXJuIF92YXJEYXRhOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBlcnJvciBkZXNjcmliaW5nIHdoeSBhbiBldmVudCBjYW5ub3QgYmUgYWRkZWQuCiAgICoKICAgKiBUaGUgcmVhc29uLCBhbmQgdGhlcmVmb3JlIHRoZSBlcnJvciBtZXNzYWdlLCBkZXBlbmRzIG9uIHRoZSBjdXJyZW50IHN0YXRlLgogICAqLwogIEVycm9yIF9iYWRFdmVudFN0YXRlKCkgewogICAgaWYgKGlzQ2xvc2VkKSB7CiAgICAgIHJldHVybiBuZXcgU3RhdGVFcnJvcigiQ2Fubm90IGFkZCBldmVudCBhZnRlciBjbG9zaW5nIik7CiAgICB9CiAgICBhc3NlcnQoX2lzQWRkaW5nU3RyZWFtKTsKICAgIHJldHVybiBuZXcgU3RhdGVFcnJvcigiQ2Fubm90IGFkZCBldmVudCB3aGlsZSBhZGRpbmcgYSBzdHJlYW0iKTsKICB9CgogIC8vIFN0cmVhbVNpbmsgaW50ZXJmYWNlLgogIEZ1dHVyZSBhZGRTdHJlYW0oU3RyZWFtPFQ+IHNvdXJjZSwge2Jvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIGlmICghX21heUFkZEV2ZW50KSB0aHJvdyBfYmFkRXZlbnRTdGF0ZSgpOwogICAgaWYgKF9pc0NhbmNlbGVkKSByZXR1cm4gbmV3IF9GdXR1cmUuaW1tZWRpYXRlKG51bGwpOwogICAgX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZTxUPiBhZGRTdGF0ZSA9CiAgICAgICAgbmV3IF9TdHJlYW1Db250cm9sbGVyQWRkU3RyZWFtU3RhdGU8VD4oCiAgICAgICAgICAgIHRoaXMsIF92YXJEYXRhLCBzb3VyY2UsIGNhbmNlbE9uRXJyb3IgPz8gZmFsc2UpOwogICAgX3ZhckRhdGEgPSBhZGRTdGF0ZTsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfQUREU1RSRUFNOwogICAgcmV0dXJuIGFkZFN0YXRlLmFkZFN0cmVhbUZ1dHVyZTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBmdXR1cmUgdGhhdCBpcyBjb21wbGV0ZWQgd2hlbiB0aGUgc3RyZWFtIGlzIGRvbmUKICAgKiBwcm9jZXNzaW5nIGV2ZW50cy4KICAgKgogICAqIFRoaXMgaGFwcGVucyBlaXRoZXIgd2hlbiB0aGUgZG9uZSBldmVudCBoYXMgYmVlbiBzZW50LCBvciBpZiB0aGUKICAgKiBzdWJzY3JpYmVyIG9mIGEgc2luZ2xlLXN1YnNjcmlwdGlvbiBzdHJlYW0gaXMgY2FuY2VsbGVkLgogICAqLwogIEZ1dHVyZSBnZXQgZG9uZSA9PiBfZW5zdXJlRG9uZUZ1dHVyZSgpOwoKICBGdXR1cmUgX2Vuc3VyZURvbmVGdXR1cmUoKSB7CiAgICBfZG9uZUZ1dHVyZSA/Pz0gX2lzQ2FuY2VsZWQgPyBGdXR1cmUuX251bGxGdXR1cmUgOiBuZXcgX0Z1dHVyZSgpOwogICAgcmV0dXJuIF9kb25lRnV0dXJlOwogIH0KCiAgLyoqCiAgICogU2VuZCBvciBlbnF1ZXVlIGEgZGF0YSBldmVudC4KICAgKi8KICB2b2lkIGFkZChUIHZhbHVlKSB7CiAgICBpZiAoIV9tYXlBZGRFdmVudCkgdGhyb3cgX2JhZEV2ZW50U3RhdGUoKTsKICAgIF9hZGQodmFsdWUpOwogIH0KCiAgLyoqCiAgICogU2VuZCBvciBlbnF1ZXVlIGFuIGVycm9yIGV2ZW50LgogICAqLwogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgaWYgKCFfbWF5QWRkRXZlbnQpIHRocm93IF9iYWRFdmVudFN0YXRlKCk7CiAgICBlcnJvciA9IF9ub25OdWxsRXJyb3IoZXJyb3IpOwogICAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIGlmIChyZXBsYWNlbWVudCAhPSBudWxsKSB7CiAgICAgIGVycm9yID0gX25vbk51bGxFcnJvcihyZXBsYWNlbWVudC5lcnJvcik7CiAgICAgIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogICAgfQogICAgX2FkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIC8qKgogICAqIENsb3NlcyB0aGlzIGNvbnRyb2xsZXIgYW5kIHNlbmRzIGEgZG9uZSBldmVudCBvbiB0aGUgc3RyZWFtLgogICAqCiAgICogVGhlIGZpcnN0IHRpbWUgYSBjb250cm9sbGVyIGlzIGNsb3NlZCwgYSAiZG9uZSIgZXZlbnQgaXMgYWRkZWQgdG8gaXRzCiAgICogc3RyZWFtLgogICAqCiAgICogWW91IGFyZSBhbGxvd2VkIHRvIGNsb3NlIHRoZSBjb250cm9sbGVyIG1vcmUgdGhhbiBvbmNlLCBidXQgb25seSB0aGUgZmlyc3QKICAgKiBjYWxsIGhhcyBhbnkgZWZmZWN0LgogICAqCiAgICogQWZ0ZXIgY2xvc2luZywgbm8gZnVydGhlciBldmVudHMgbWF5IGJlIGFkZGVkIHVzaW5nIFthZGRdLCBbYWRkRXJyb3JdCiAgICogb3IgW2FkZFN0cmVhbV0uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aGVuIHRoZSBkb25lIGV2ZW50IGhhcyBiZWVuIGRlbGl2ZXJlZC4KICAgKi8KICBGdXR1cmUgY2xvc2UoKSB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgcmV0dXJuIF9lbnN1cmVEb25lRnV0dXJlKCk7CiAgICB9CiAgICBpZiAoIV9tYXlBZGRFdmVudCkgdGhyb3cgX2JhZEV2ZW50U3RhdGUoKTsKICAgIF9jbG9zZVVuY2hlY2tlZCgpOwogICAgcmV0dXJuIF9lbnN1cmVEb25lRnV0dXJlKCk7CiAgfQoKICB2b2lkIF9jbG9zZVVuY2hlY2tlZCgpIHsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfQ0xPU0VEOwogICAgaWYgKGhhc0xpc3RlbmVyKSB7CiAgICAgIF9zZW5kRG9uZSgpOwogICAgfSBlbHNlIGlmIChfaXNJbml0aWFsU3RhdGUpIHsKICAgICAgX2Vuc3VyZVBlbmRpbmdFdmVudHMoKS5hZGQoY29uc3QgX0RlbGF5ZWREb25lKCkpOwogICAgfQogIH0KCiAgLy8gRXZlbnRTaW5rIGludGVyZmFjZS4gVXNlZCBieSB0aGUgW2FkZFN0cmVhbV0gZXZlbnRzLgoKICAvLyBBZGQgZGF0YSBldmVudCwgdXNlZCBib3RoIGJ5IHRoZSBbYWRkU3RyZWFtXSBldmVudHMgYW5kIGJ5IFthZGRdLgogIHZvaWQgX2FkZChUIHZhbHVlKSB7CiAgICBpZiAoaGFzTGlzdGVuZXIpIHsKICAgICAgX3NlbmREYXRhKHZhbHVlKTsKICAgIH0gZWxzZSBpZiAoX2lzSW5pdGlhbFN0YXRlKSB7CiAgICAgIF9lbnN1cmVQZW5kaW5nRXZlbnRzKCkuYWRkKG5ldyBfRGVsYXllZERhdGE8VD4odmFsdWUpKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBpZiAoaGFzTGlzdGVuZXIpIHsKICAgICAgX3NlbmRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICB9IGVsc2UgaWYgKF9pc0luaXRpYWxTdGF0ZSkgewogICAgICBfZW5zdXJlUGVuZGluZ0V2ZW50cygpLmFkZChuZXcgX0RlbGF5ZWRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSkpOwogICAgfQogIH0KCiAgdm9pZCBfY2xvc2UoKSB7CiAgICAvLyBFbmQgb2YgYWRkU3RyZWFtIHN0cmVhbS4KICAgIGFzc2VydChfaXNBZGRpbmdTdHJlYW0pOwogICAgX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZTxUPiBhZGRTdGF0ZSA9IF92YXJEYXRhOwogICAgX3ZhckRhdGEgPSBhZGRTdGF0ZS52YXJEYXRhOwogICAgX3N0YXRlICY9IH5fU1RBVEVfQUREU1RSRUFNOwogICAgYWRkU3RhdGUuY29tcGxldGUoKTsKICB9CgogIC8vIF9TdHJlYW1Db250cm9sbGVyTGlmZUN5Y2xlIGludGVyZmFjZQoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX3N1YnNjcmliZSh2b2lkIG9uRGF0YShUIGRhdGEpLCBGdW5jdGlvbiBvbkVycm9yLAogICAgICB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpIHsKICAgIGlmICghX2lzSW5pdGlhbFN0YXRlKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBsaXN0ZW5lZCB0by4iKTsKICAgIH0KICAgIF9Db250cm9sbGVyU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IG5ldyBfQ29udHJvbGxlclN1YnNjcmlwdGlvbjxUPigKICAgICAgICB0aGlzLCBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CgogICAgX1BlbmRpbmdFdmVudHM8VD4gcGVuZGluZ0V2ZW50cyA9IF9wZW5kaW5nRXZlbnRzOwogICAgX3N0YXRlIHw9IF9TVEFURV9TVUJTQ1JJQkVEOwogICAgaWYgKF9pc0FkZGluZ1N0cmVhbSkgewogICAgICBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlPFQ+IGFkZFN0YXRlID0gX3ZhckRhdGE7CiAgICAgIGFkZFN0YXRlLnZhckRhdGEgPSBzdWJzY3JpcHRpb247CiAgICAgIGFkZFN0YXRlLnJlc3VtZSgpOwogICAgfSBlbHNlIHsKICAgICAgX3ZhckRhdGEgPSBzdWJzY3JpcHRpb247CiAgICB9CiAgICBzdWJzY3JpcHRpb24uX3NldFBlbmRpbmdFdmVudHMocGVuZGluZ0V2ZW50cyk7CiAgICBzdWJzY3JpcHRpb24uX2d1YXJkQ2FsbGJhY2soKCkgewogICAgICBfcnVuR3VhcmRlZChvbkxpc3Rlbik7CiAgICB9KTsKCiAgICByZXR1cm4gc3Vic2NyaXB0aW9uOwogIH0KCiAgRnV0dXJlIF9yZWNvcmRDYW5jZWwoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikgewogICAgLy8gV2hlbiB3ZSBjYW5jZWwsIHdlIGZpcnN0IGNhbmNlbCBhbnkgc3RyZWFtIGJlaW5nIGFkZGVkLAogICAgLy8gVGhlbiB3ZSBjYWxsIGBvbkNhbmNlbGAsIGFuZCBmaW5hbGx5IHRoZSBfZG9uZUZ1dHVyZSBpcyBjb21wbGV0ZWQuCiAgICAvLyBJZiBlaXRoZXIgb2YgYWRkU3RyZWFtJ3MgY2FuY2VsIG9yIGBvbkNhbmNlbGAgcmV0dXJucyBhIGZ1dHVyZSwKICAgIC8vIHdlIHdhaXQgZm9yIGl0IGJlZm9yZSBjb250aW51aW5nLgogICAgLy8gQW55IGVycm9yIGR1cmluZyB0aGlzIHByb2Nlc3MgZW5kcyB1cCBpbiB0aGUgcmV0dXJuZWQgZnV0dXJlLgogICAgLy8gSWYgbW9yZSBlcnJvcnMgaGFwcGVuLCB3ZSBhY3QgYXMgaWYgaXQgaGFwcGVucyBpbnNpZGUgbmVzdGVkIHRyeS9maW5hbGx5cwogICAgLy8gb3Igd2hlbkNvbXBsZXRlIGNhbGxzLCBhbmQgb25seSB0aGUgbGFzdCBlcnJvciBlbmRzIHVwIGluIHRoZQogICAgLy8gcmV0dXJuZWQgZnV0dXJlLgogICAgRnV0dXJlIHJlc3VsdDsKICAgIGlmIChfaXNBZGRpbmdTdHJlYW0pIHsKICAgICAgX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZTxUPiBhZGRTdGF0ZSA9IF92YXJEYXRhOwogICAgICByZXN1bHQgPSBhZGRTdGF0ZS5jYW5jZWwoKTsKICAgIH0KICAgIF92YXJEYXRhID0gbnVsbDsKICAgIF9zdGF0ZSA9CiAgICAgICAgKF9zdGF0ZSAmIH4oX1NUQVRFX1NVQlNDUklCRUQgfCBfU1RBVEVfQUREU1RSRUFNKSkgfCBfU1RBVEVfQ0FOQ0VMRUQ7CgogICAgaWYgKG9uQ2FuY2VsICE9IG51bGwpIHsKICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7CiAgICAgICAgLy8gT25seSBpbnRyb2R1Y2UgYSBmdXR1cmUgaWYgb25lIGlzIG5lZWRlZC4KICAgICAgICAvLyBJZiBfb25DYW5jZWwgcmV0dXJucyBudWxsLCBubyBmdXR1cmUgaXMgbmVlZGVkLgogICAgICAgIHRyeSB7CiAgICAgICAgICByZXN1bHQgPSBvbkNhbmNlbCgpOwogICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgIC8vIFJldHVybiB0aGUgZXJyb3IgaW4gdGhlIHJldHVybmVkIGZ1dHVyZS4KICAgICAgICAgIC8vIENvbXBsZXRlIGl0IGFzeW5jaHJvbm91c2x5LCBzbyB0aGVyZSBpcyB0aW1lIGZvciBhIGxpc3RlbmVyCiAgICAgICAgICAvLyB0byBoYW5kbGUgdGhlIGVycm9yLgogICAgICAgICAgcmVzdWx0ID0gbmV3IF9GdXR1cmUoKS4uX2FzeW5jQ29tcGxldGVFcnJvcihlLCBzKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gU2ltcGxlciBjYXNlIHdoZW4gd2UgYWxyZWFkeSBrbm93IHRoYXQgd2Ugd2lsbCByZXR1cm4gYSBmdXR1cmUuCiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LndoZW5Db21wbGV0ZShvbkNhbmNlbCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGNvbXBsZXRlKCkgewogICAgICBpZiAoX2RvbmVGdXR1cmUgIT0gbnVsbCAmJiBfZG9uZUZ1dHVyZS5fbWF5Q29tcGxldGUpIHsKICAgICAgICBfZG9uZUZ1dHVyZS5fYXN5bmNDb21wbGV0ZShudWxsKTsKICAgICAgfQogICAgfQoKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewogICAgICByZXN1bHQgPSByZXN1bHQud2hlbkNvbXBsZXRlKGNvbXBsZXRlKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbXBsZXRlKCk7CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX3JlY29yZFBhdXNlKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pIHsKICAgIGlmIChfaXNBZGRpbmdTdHJlYW0pIHsKICAgICAgX1N0cmVhbUNvbnRyb2xsZXJBZGRTdHJlYW1TdGF0ZTxUPiBhZGRTdGF0ZSA9IF92YXJEYXRhOwogICAgICBhZGRTdGF0ZS5wYXVzZSgpOwogICAgfQogICAgX3J1bkd1YXJkZWQob25QYXVzZSk7CiAgfQoKICB2b2lkIF9yZWNvcmRSZXN1bWUoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikgewogICAgaWYgKF9pc0FkZGluZ1N0cmVhbSkgewogICAgICBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlPFQ+IGFkZFN0YXRlID0gX3ZhckRhdGE7CiAgICAgIGFkZFN0YXRlLnJlc3VtZSgpOwogICAgfQogICAgX3J1bkd1YXJkZWQob25SZXN1bWUpOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX1N5bmNTdHJlYW1Db250cm9sbGVyRGlzcGF0Y2g8VD4KICAgIGltcGxlbWVudHMgX1N0cmVhbUNvbnRyb2xsZXI8VD4sIFN5bmNocm9ub3VzU3RyZWFtQ29udHJvbGxlcjxUPiB7CiAgaW50IGdldCBfc3RhdGU7CiAgdm9pZCBzZXQgX3N0YXRlKGludCBzdGF0ZSk7CgogIHZvaWQgX3NlbmREYXRhKFQgZGF0YSkgewogICAgX3N1YnNjcmlwdGlvbi5fYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBfc2VuZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBfc3Vic2NyaXB0aW9uLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICB2b2lkIF9zZW5kRG9uZSgpIHsKICAgIF9zdWJzY3JpcHRpb24uX2Nsb3NlKCk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfQXN5bmNTdHJlYW1Db250cm9sbGVyRGlzcGF0Y2g8VD4KICAgIGltcGxlbWVudHMgX1N0cmVhbUNvbnRyb2xsZXI8VD4gewogIHZvaWQgX3NlbmREYXRhKFQgZGF0YSkgewogICAgX3N1YnNjcmlwdGlvbi5fYWRkUGVuZGluZyhuZXcgX0RlbGF5ZWREYXRhPFQ+KGRhdGEpKTsKICB9CgogIHZvaWQgX3NlbmRFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgX3N1YnNjcmlwdGlvbi5fYWRkUGVuZGluZyhuZXcgX0RlbGF5ZWRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSkpOwogIH0KCiAgdm9pZCBfc2VuZERvbmUoKSB7CiAgICBfc3Vic2NyaXB0aW9uLl9hZGRQZW5kaW5nKGNvbnN0IF9EZWxheWVkRG9uZSgpKTsKICB9Cn0KCi8vIFRPRE8obHJuKTogVXNlIGNvbW1vbiBzdXBlcmNsYXNzIGZvciBjYWxsYmFjay1jb250cm9sbGVycyB3aGVuIFZNIHN1cHBvcnRzCi8vIGNvbnN0cnVjdG9ycyBpbiBtaXhpbiBzdXBlcmNsYXNzZXMuCgpjbGFzcyBfQXN5bmNTdHJlYW1Db250cm9sbGVyPFQ+ID0gX1N0cmVhbUNvbnRyb2xsZXI8VD4KICAgIHdpdGggX0FzeW5jU3RyZWFtQ29udHJvbGxlckRpc3BhdGNoPFQ+OwoKY2xhc3MgX1N5bmNTdHJlYW1Db250cm9sbGVyPFQ+ID0gX1N0cmVhbUNvbnRyb2xsZXI8VD4KICAgIHdpdGggX1N5bmNTdHJlYW1Db250cm9sbGVyRGlzcGF0Y2g8VD47Cgp0eXBlZGVmIF9Ob3RpZmljYXRpb25IYW5kbGVyKCk7Cgp2b2lkIF9ydW5HdWFyZGVkKF9Ob3RpZmljYXRpb25IYW5kbGVyIG5vdGlmaWNhdGlvbkhhbmRsZXIpIHsKICBpZiAobm90aWZpY2F0aW9uSGFuZGxlciA9PSBudWxsKSByZXR1cm47CiAgdHJ5IHsKICAgIG5vdGlmaWNhdGlvbkhhbmRsZXIoKTsKICB9IGNhdGNoIChlLCBzKSB7CiAgICBab25lLmN1cnJlbnQuaGFuZGxlVW5jYXVnaHRFcnJvcihlLCBzKTsKICB9Cn0KCmNsYXNzIF9Db250cm9sbGVyU3RyZWFtPFQ+IGV4dGVuZHMgX1N0cmVhbUltcGw8VD4gewogIF9TdHJlYW1Db250cm9sbGVyTGlmZWN5Y2xlPFQ+IF9jb250cm9sbGVyOwoKICBfQ29udHJvbGxlclN0cmVhbSh0aGlzLl9jb250cm9sbGVyKTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9jcmVhdGVTdWJzY3JpcHRpb24odm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgICAgIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikgPT4KICAgICAgX2NvbnRyb2xsZXIuX3N1YnNjcmliZShvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CgogIC8vIE92ZXJyaWRlID09IGFuZCBoYXNoQ29kZSBzbyB0aGF0IG5ldyBzdHJlYW1zIHJldHVybmVkIGJ5IHRoZSBzYW1lCiAgLy8gY29udHJvbGxlciBhcmUgY29uc2lkZXJlZCBlcXVhbC4gVGhlIGNvbnRyb2xsZXIgcmV0dXJucyBhIG5ldyBzdHJlYW0KICAvLyBlYWNoIHRpbWUgaXQncyBxdWVyaWVkLCBidXQgZG9lc24ndCBoYXZlIHRvIGNhY2hlIHRoZSByZXN1bHQuCgogIGludCBnZXQgaGFzaENvZGUgPT4gX2NvbnRyb2xsZXIuaGFzaENvZGUgXiAweDM1MzIzNTMyOwoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG90aGVyIGlzIF9Db250cm9sbGVyU3RyZWFtICYmCiAgICAgICAgaWRlbnRpY2FsKG90aGVyLl9jb250cm9sbGVyLCB0aGlzLl9jb250cm9sbGVyKTsKICB9Cn0KCmNsYXNzIF9Db250cm9sbGVyU3Vic2NyaXB0aW9uPFQ+IGV4dGVuZHMgX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbjxUPiB7CiAgZmluYWwgX1N0cmVhbUNvbnRyb2xsZXJMaWZlY3ljbGU8VD4gX2NvbnRyb2xsZXI7CgogIF9Db250cm9sbGVyU3Vic2NyaXB0aW9uKHRoaXMuX2NvbnRyb2xsZXIsIHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikKICAgICAgOiBzdXBlcihvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CgogIEZ1dHVyZSBfb25DYW5jZWwoKSB7CiAgICByZXR1cm4gX2NvbnRyb2xsZXIuX3JlY29yZENhbmNlbCh0aGlzKTsKICB9CgogIHZvaWQgX29uUGF1c2UoKSB7CiAgICBfY29udHJvbGxlci5fcmVjb3JkUGF1c2UodGhpcyk7CiAgfQoKICB2b2lkIF9vblJlc3VtZSgpIHsKICAgIF9jb250cm9sbGVyLl9yZWNvcmRSZXN1bWUodGhpcyk7CiAgfQp9CgovKiogQSBjbGFzcyB0aGF0IGV4cG9zZXMgb25seSB0aGUgW1N0cmVhbVNpbmtdIGludGVyZmFjZSBvZiBhbiBvYmplY3QuICovCmNsYXNzIF9TdHJlYW1TaW5rV3JhcHBlcjxUPiBpbXBsZW1lbnRzIFN0cmVhbVNpbms8VD4gewogIGZpbmFsIFN0cmVhbUNvbnRyb2xsZXIgX3RhcmdldDsKICBfU3RyZWFtU2lua1dyYXBwZXIodGhpcy5fdGFyZ2V0KTsKICB2b2lkIGFkZChUIGRhdGEpIHsKICAgIF90YXJnZXQuYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBhZGRFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBfdGFyZ2V0LmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIEZ1dHVyZSBjbG9zZSgpID0+IF90YXJnZXQuY2xvc2UoKTsKCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08VD4gc291cmNlKSA9PiBfdGFyZ2V0LmFkZFN0cmVhbShzb3VyY2UpOwoKICBGdXR1cmUgZ2V0IGRvbmUgPT4gX3RhcmdldC5kb25lOwp9CgovKioKICogT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHN0YXRlIHVzZWQgdG8gaGFuZGxlIFtTdHJlYW1Db250cm9sbGVyLmFkZFN0cmVhbV0uCiAqLwpjbGFzcyBfQWRkU3RyZWFtU3RhdGU8VD4gewogIC8vIFtfRnV0dXJlXSByZXR1cm5lZCBieSBjYWxsIHRvIGFkZFN0cmVhbS4KICBmaW5hbCBfRnV0dXJlIGFkZFN0cmVhbUZ1dHVyZTsKCiAgLy8gU3Vic2NyaXB0aW9uIG9uIHN0cmVhbSBhcmd1bWVudCB0byBhZGRTdHJlYW0uCiAgZmluYWwgU3RyZWFtU3Vic2NyaXB0aW9uIGFkZFN1YnNjcmlwdGlvbjsKCiAgX0FkZFN0cmVhbVN0YXRlKAogICAgICBfRXZlbnRTaW5rPFQ+IGNvbnRyb2xsZXIsIFN0cmVhbTxUPiBzb3VyY2UsIGJvb2wgY2FuY2VsT25FcnJvcikKICAgICAgOiBhZGRTdHJlYW1GdXR1cmUgPSBuZXcgX0Z1dHVyZSgpLAogICAgICAgIGFkZFN1YnNjcmlwdGlvbiA9IHNvdXJjZS5saXN0ZW4oY29udHJvbGxlci5fYWRkLAogICAgICAgICAgICBvbkVycm9yOiBjYW5jZWxPbkVycm9yCiAgICAgICAgICAgICAgICA/IG1ha2VFcnJvckhhbmRsZXIoY29udHJvbGxlcikKICAgICAgICAgICAgICAgIDogY29udHJvbGxlci5fYWRkRXJyb3IsCiAgICAgICAgICAgIG9uRG9uZTogY29udHJvbGxlci5fY2xvc2UsCiAgICAgICAgICAgIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwoKICBzdGF0aWMgbWFrZUVycm9ySGFuZGxlcihfRXZlbnRTaW5rIGNvbnRyb2xsZXIpID0+IChlLCBTdGFja1RyYWNlIHMpIHsKICAgICAgICBjb250cm9sbGVyLl9hZGRFcnJvcihlLCBzKTsKICAgICAgICBjb250cm9sbGVyLl9jbG9zZSgpOwogICAgICB9OwoKICB2b2lkIHBhdXNlKCkgewogICAgYWRkU3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgfQoKICB2b2lkIHJlc3VtZSgpIHsKICAgIGFkZFN1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICB9CgogIC8qKgogICAqIFN0b3AgYWRkaW5nIHRoZSBzdHJlYW0uCiAgICoKICAgKiBDb21wbGV0ZSB0aGUgZnV0dXJlIHJldHVybmVkIGJ5IGBTdHJlYW1Db250cm9sbGVyLmFkZFN0cmVhbWAgd2hlbgogICAqIHRoZSBjYW5jZWwgaXMgY29tcGxldGUuCiAgICoKICAgKiBSZXR1cm4gYSBmdXR1cmUgaWYgdGhlIGNhbmNlbCB0YWtlcyB0aW1lLCBvdGhlcndpc2UgcmV0dXJuIGBudWxsYC4KICAgKi8KICBGdXR1cmUgY2FuY2VsKCkgewogICAgdmFyIGNhbmNlbCA9IGFkZFN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIGlmIChjYW5jZWwgPT0gbnVsbCkgewogICAgICBhZGRTdHJlYW1GdXR1cmUuX2FzeW5jQ29tcGxldGUobnVsbCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIGNhbmNlbC53aGVuQ29tcGxldGUoKCkgewogICAgICBhZGRTdHJlYW1GdXR1cmUuX2FzeW5jQ29tcGxldGUobnVsbCk7CiAgICB9KTsKICB9CgogIHZvaWQgY29tcGxldGUoKSB7CiAgICBhZGRTdHJlYW1GdXR1cmUuX2FzeW5jQ29tcGxldGUobnVsbCk7CiAgfQp9CgpjbGFzcyBfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlPFQ+IGV4dGVuZHMgX0FkZFN0cmVhbVN0YXRlPFQ+IHsKICAvLyBUaGUgc3Vic2NyaXB0aW9u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ZChUIGRhdGEpOwogIHZvaWQgX2FkZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKTsKICB2b2lkIF9jbG9zZSgpOwp9CgovKioKICogQWJzdHJhY3QgYW5kIHByaXZhdGUgaW50ZXJmYWNlIGZvciBhIHBsYWNlIHRvIHNlbmQgZXZlbnRzLgogKgogKiBVc2VkIGJ5IGV2ZW50IGJ1ZmZlcmluZyB0byBmaW5hbGx5IGRpc3BhdGNoIHRoZSBwZW5kaW5nIGV2ZW50LCB3aGVyZQogKiBbX0V2ZW50U2lua10gaXMgd2hlcmUgdGhlIGV2ZW50IGZpcnN0IGVudGVycyB0aGUgc3RyZWFtIHN1YnNjcmlwdGlvbiwKICogYW5kIG1heSB5ZXQgYmUgYnVmZmVyZWQuCiAqLwphYnN0cmFjdCBjbGFzcyBfRXZlbnREaXNwYXRjaDxUPiB7CiAgdm9pZCBfc2VuZERhdGEoVCBkYXRhKTsKICB2b2lkIF9zZW5kRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpOwogIHZvaWQgX3NlbmREb25lKCk7Cn0KCi8qKgogKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHN0cmVhbSBzdWJzY3JpcHRpb24gb2YgYnVmZmVyaW5nIGV2ZW50cy4KICoKICogVGhlIG9ubHkgcHVibGljIG1ldGhvZHMgYXJlIHRob3NlIG9mIFtTdHJlYW1TdWJzY3JpcHRpb25dLCBzbyBpbnN0YW5jZXMgb2YKICogW19CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb25dIGNhbiBiZSByZXR1cm5lZCBkaXJlY3RseSBhcyBhCiAqIFtTdHJlYW1TdWJzY3JpcHRpb25dIHdpdGhvdXQgZXhwb3NpbmcgaW50ZXJuYWwgZnVuY3Rpb25hbGl0eS4KICoKICogVGhlIFtTdHJlYW1Db250cm9sbGVyXSBpcyBhIHB1YmxpYyBmYWNpbmcgdmVyc2lvbiBvZiBbU3RyZWFtXSBhbmQgdGhpcyBjbGFzcywKICogd2l0aCBzb21lIG1ldGhvZHMgbWFkZSBwdWJsaWMuCiAqCiAqIFRoZSB1c2VyIGludGVyZmFjZSBvZiBbX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbl0gYXJlIHRoZSBmb2xsb3dpbmcKICogbWV0aG9kczoKICoKICogKiBbX2FkZF06IEFkZCBhIGRhdGEgZXZlbnQgdG8gdGhlIHN0cmVhbS4KICogKiBbX2FkZEVycm9yXTogQWRkIGFuIGVycm9yIGV2ZW50IHRvIHRoZSBzdHJlYW0uCiAqICogW19jbG9zZV06IFJlcXVlc3QgdG8gY2xvc2UgdGhlIHN0cmVhbS4KICogKiBbX29uQ2FuY2VsXTogQ2FsbGVkIHdoZW4gdGhlIHN1YnNjcmlwdGlvbiB3aWxsIHByb3ZpZGUgbm8gbW9yZSBldmVudHMsCiAqICAgICBlaXRoZXIgZHVlIHRvIGJlaW5nIGFjdGl2ZWx5IGNhbmNlbGVkLCBvciBhZnRlciBzZW5kaW5nIGEgZG9uZSBldmVudC4KICogKiBbX29uUGF1c2VdOiBDYWxsZWQgd2hlbiB0aGUgc3Vic2NyaXB0aW9uIHdhbnRzIHRoZSBldmVudCBzb3VyY2UgdG8gcGF1c2UuCiAqICogW19vblJlc3VtZV06IENhbGxlZCB3aGVuIGFsbG93aW5nIG5ldyBldmVudHMgYWZ0ZXIgYSBwYXVzZS4KICoKICogVGhlIHVzZXIgc2hvdWxkIG5vdCBhZGQgbmV3IGV2ZW50cyB3aGVuIHRoZSBzdWJzY3JpcHRpb24gcmVxdWVzdHMgYSBwYXVzZWQsCiAqIGJ1dCBpZiBpdCBoYXBwZW5zIGFueXdheSwgdGhlIHN1YnNjcmlwdGlvbiB3aWxsIGVucXVldWUgdGhlIGV2ZW50cyBqdXN0IGFzCiAqIHdoZW4gbmV3IGV2ZW50cyBhcnJpdmUgd2hpbGUgc3RpbGwgZmlyaW5nIGFuIG9sZCBldmVudC4KICovCmNsYXNzIF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb248VD4KICAgIGltcGxlbWVudHMgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+LCBfRXZlbnRTaW5rPFQ+LCBfRXZlbnREaXNwYXRjaDxUPiB7CiAgLyoqIFRoZSBgY2FuY2VsT25FcnJvcmAgZmxhZyBmcm9tIHRoZSBgbGlzdGVuYCBjYWxsLiAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0NBTkNFTF9PTl9FUlJPUiA9IDE7CiAgLyoqCiAgICogV2hldGhlciB0aGUgImRvbmUiIGV2ZW50IGhhcyBiZWVuIHJlY2VpdmVkLgogICAqIE5vIGZ1cnRoZXIgZXZlbnRzIGFyZSBhY2NlcHRlZCBhZnRlciB0aGlzLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0NMT1NFRCA9IDI7CiAgLyoqCiAgICogU2V0IGlmIHRoZSBpbnB1dCBoYXMgYmVlbiBhc2tlZCBub3QgdG8gc2VuZCBldmVudHMuCiAgICoKICAgKiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBiZWluZyBwYXVzZWQsIHNpbmNlIHRoZSBpbnB1dCB3aWxsIHJlbWFpbiBwYXVzZWQKICAgKiBhZnRlciBhIGNhbGwgdG8gW3Jlc3VtZV0gaWYgdGhlcmUgYXJlIHBlbmRpbmcgZXZlbnRzLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0lOUFVUX1BBVVNFRCA9IDQ7CiAgLyoqCiAgICogV2hldGhlciB0aGUgc3Vic2NyaXB0aW9uIGhhcyBiZWVuIGNhbmNlbGVkLgogICAqCiAgICogU2V0IGJ5IGNhbGxpbmcgW2NhbmNlbF0sIG9yIGJ5IGhhbmRsaW5nIGEgImRvbmUiIGV2ZW50LCBvciBhbiAiZXJyb3IiIGV2ZW50CiAgICogd2hlbiBgY2FuY2VsT25FcnJvcmAgaXMgdHJ1ZS4KICAgKi8KICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9DQU5DRUxFRCA9IDg7CiAgLyoqCiAgICogU2V0IHdoZW4gZWl0aGVyOgogICAqCiAgICogICAqIGFuIGVycm9yIGlzIHNlbnQsIGFuZCBbY2FuY2VsT25FcnJvcl0gaXMgdHJ1ZSwgb3IKICAgKiAgICogYSBkb25lIGV2ZW50IGlzIHNlbnQuCiAgICoKICAgKiBJZiB0aGUgc3Vic2NyaXB0aW9uIGlzIGNhbmNlbGVkIHdoaWxlIF9TVEFURV9XQUlUX0ZPUl9DQU5DRUwgaXMgc2V0LCB0aGUKICAgKiBzdGF0ZSBpcyB1bnNldCwgYW5kIG5vIGZ1cnRoZXIgZXZlbnRzIG11c3QgYmUgZGVsaXZlcmVkLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX1dBSVRfRk9SX0NBTkNFTCA9IDE2OwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0lOX0NBTExCQUNLID0gMzI7CiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfSEFTX1BFTkRJTkcgPSA2NDsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9QQVVTRV9DT1VOVCA9IDEyODsKCiAgLyogRXZlbnQgaGFuZGxlcnMgcHJvdmlkZWQgaW4gY29uc3RydWN0b3IuICovCiAgX0RhdGFIYW5kbGVyPFQ+IF9vbkRhdGE7CiAgRnVuY3Rpb24gX29uRXJyb3I7CiAgX0RvbmVIYW5kbGVyIF9vbkRvbmU7CiAgZmluYWwgWm9uZSBfem9uZSA9IFpvbmUuY3VycmVudDsKCiAgLyoqIEJpdCB2ZWN0b3IgYmFzZWQgb24gc3RhdGUtY29uc3RhbnRzIGFib3ZlLiAqLwogIGludCBfc3RhdGU7CgogIC8vIFRPRE8oZmxvaXRzY2gpOiByZXVzZSBhbm90aGVyIGZpZWxkCiAgLyoqIFRoZSBmdXR1cmUgW19vbkNhbmNlbF0gbWF5IHJldHVybi4gKi8KICBGdXR1cmUgX2NhbmNlbEZ1dHVyZTsKCiAgLyoqCiAgICogUXVldWUgb2YgcGVuZGluZyBldmVudHMuCiAgICoKICAgKiBJcyBjcmVhdGVkIHdoZW4gbmVjZXNzYXJ5LCBvciBzZXQgaW4gY29uc3RydWN0b3IgZm9yIHByZWNvbmZpZ3VyZWQgZXZlbnRzLgogICAqLwogIF9QZW5kaW5nRXZlbnRzPFQ+IF9wZW5kaW5nOwoKICBfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uKAogICAgICB2b2lkIG9uRGF0YShUIGRhdGEpLCBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpCiAgICAgIDogX3N0YXRlID0gKGNhbmNlbE9uRXJyb3IgPyBfU1RBVEVfQ0FOQ0VMX09OX0VSUk9SIDogMCkgewogICAgdGhpcy5vbkRhdGEob25EYXRhKTsKICAgIHRoaXMub25FcnJvcihvbkVycm9yKTsKICAgIHRoaXMub25Eb25lKG9uRG9uZSk7CiAgfQoKICAvKioKICAgKiBTZXRzIHRoZSBzdWJzY3JpcHRpb24ncyBwZW5kaW5nIGV2ZW50cyBvYmplY3QuCiAgICoKICAgKiBUaGlzIGNhbiBvbmx5IGJlIGRvbmUgb25jZS4gVGhlIHBlbmRpbmcgZXZlbnRzIG9iamVjdCBpcyB1c2VkIGZvciB0aGUKICAgKiByZXN0IG9mIHRoZSBzdWJzY3JpcHRpb24ncyBsaWZlIGN5Y2xlLgogICAqLwogIHZvaWQgX3NldFBlbmRpbmdFdmVudHMoX1BlbmRpbmdFdmVudHM8VD4gcGVuZGluZ0V2ZW50cykgewogICAgYXNzZXJ0KF9wZW5kaW5nID09IG51bGwpOwogICAgaWYgKHBlbmRpbmdFdmVudHMgPT0gbnVsbCkgcmV0dXJuOwogICAgX3BlbmRpbmcgPSBwZW5kaW5nRXZlbnRzOwogICAgaWYgKCFwZW5kaW5nRXZlbnRzLmlzRW1wdHkpIHsKICAgICAgX3N0YXRlIHw9IF9TVEFURV9IQVNfUEVORElORzsKICAgICAgX3BlbmRpbmcuc2NoZWR1bGUodGhpcyk7CiAgICB9CiAgfQoKICAvLyBTdHJlYW1TdWJzY3JpcHRpb24gaW50ZXJmYWNlLgoKICB2b2lkIG9uRGF0YSh2b2lkIGhhbmRsZURhdGEoVCBldmVudCkpIHsKICAgIGhhbmRsZURhdGEgPz89IF9udWxsRGF0YUhhbmRsZXI7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogdGhlIHJldHVybiB0eXBlIHNob3VsZCBiZSAndm9pZCcsIGFuZCB0aGUgdHlwZQogICAgLy8gc2hvdWxkIGJlIGluZmVycmVkLgogICAgX29uRGF0YSA9IF96b25lLnJlZ2lzdGVyVW5hcnlDYWxsYmFjazxkeW5hbWljLCBUPihoYW5kbGVEYXRhKTsKICB9CgogIHZvaWQgb25FcnJvcihGdW5jdGlvbiBoYW5kbGVFcnJvcikgewogICAgaGFuZGxlRXJyb3IgPz89IF9udWxsRXJyb3JIYW5kbGVyOwogICAgaWYgKGhhbmRsZUVycm9yIGlzIHZvaWQgRnVuY3Rpb24oT2JqZWN0LCBTdGFja1RyYWNlKSkgewogICAgICBfb25FcnJvciA9IF96b25lCiAgICAgICAgICAucmVnaXN0ZXJCaW5hcnlDYWxsYmFjazxkeW5hbWljLCBPYmplY3QsIFN0YWNrVHJhY2U+KGhhbmRsZUVycm9yKTsKICAgIH0gZWxzZSBpZiAoaGFuZGxlRXJyb3IgaXMgdm9pZCBGdW5jdGlvbihPYmplY3QpKSB7CiAgICAgIF9vbkVycm9yID0gX3pvbmUucmVnaXN0ZXJVbmFyeUNhbGxiYWNrPGR5bmFtaWMsIE9iamVjdD4oaGFuZGxlRXJyb3IpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoImhhbmRsZUVycm9yIGNhbGxiYWNrIG11c3QgdGFrZSBlaXRoZXIgYW4gT2JqZWN0ICIKICAgICAgICAgICIodGhlIGVycm9yKSwgb3IgYm90aCBhbiBPYmplY3QgKHRoZSBlcnJvcikgYW5kIGEgU3RhY2tUcmFjZS4iKTsKICAgIH0KICB9CgogIHZvaWQgb25Eb25lKHZvaWQgaGFuZGxlRG9uZSgpKSB7CiAgICBoYW5kbGVEb25lID8/PSBfbnVsbERvbmVIYW5kbGVyOwogICAgX29uRG9uZSA9IF96b25lLnJlZ2lzdGVyQ2FsbGJhY2soaGFuZGxlRG9uZSk7CiAgfQoKICB2b2lkIHBhdXNlKFtGdXR1cmUgcmVzdW1lU2lnbmFsXSkgewogICAgaWYgKF9pc0NhbmNlbGVkKSByZXR1cm47CiAgICBib29sIHdhc1BhdXNlZCA9IF9pc1BhdXNlZDsKICAgIGJvb2wgd2FzSW5wdXRQYXVzZWQgPSBfaXNJbnB1dFBhdXNlZDsKICAgIC8vIEluY3JlbWVudCBwYXVzZSBjb3VudCBhbmQgbWFyayBpbnB1dCBwYXVzZWQgKGlmIGl0IGlzbid0IGFscmVhZHkpLgogICAgX3N0YXRlID0gKF9zdGF0ZSArIF9TVEFURV9QQVVTRV9DT1VOVCkgfCBfU1RBVEVfSU5QVVRfUEFVU0VEOwogICAgaWYgKHJlc3VtZVNpZ25hbCAhPSBudWxsKSByZXN1bWVTaWduYWwud2hlbkNvbXBsZXRlKHJlc3VtZSk7CiAgICBpZiAoIXdhc1BhdXNlZCAmJiBfcGVuZGluZyAhPSBudWxsKSBfcGVuZGluZy5jYW5jZWxTY2hlZHVsZSgpOwogICAgaWYgKCF3YXNJbnB1dFBhdXNlZCAmJiAhX2luQ2FsbGJhY2spIF9ndWFyZENhbGxiYWNrKF9vblBhdXNlKTsKICB9CgogIHZvaWQgcmVzdW1lKCkgewogICAgaWYgKF9pc0NhbmNlbGVkKSByZXR1cm47CiAgICBpZiAoX2lzUGF1c2VkKSB7CiAgICAgIF9kZWNyZW1lbnRQYXVzZUNvdW50KCk7CiAgICAgIGlmICghX2lzUGF1c2VkKSB7CiAgICAgICAgaWYgKF9oYXNQZW5kaW5nICYmICFfcGVuZGluZy5pc0VtcHR5KSB7CiAgICAgICAgICAvLyBJbnB1dCBpcyBzdGlsbCBwYXVzZWQuCiAgICAgICAgICBfcGVuZGluZy5zY2hlZHVsZSh0aGlzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXNzZXJ0KF9tYXlSZXN1bWVJbnB1dCk7CiAgICAgICAgICBfc3RhdGUgJj0gfl9TVEFURV9JTlBVVF9QQVVTRUQ7CiAgICAgICAgICBpZiAoIV9pbkNhbGxiYWNrKSBfZ3VhcmRDYWxsYmFjayhfb25SZXN1bWUpOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgRnV0dXJlIGNhbmNlbCgpIHsKICAgIC8vIFRoZSB1c2VyIGRvZXNuJ3Qgd2FudCB0byByZWNlaXZlIGFueSBmdXJ0aGVyIGV2ZW50cy4gSWYgdGhlcmUgaXMgYW4KICAgIC8vIGVycm9yIG9yIGRvbmUgZXZlbnQgcGVuZGluZyAod2FpdGluZyBmb3IgdGhlIGNhbmNlbCB0byBiZSBkb25lKSBkaXNjYXJkCiAgICAvLyB0aGF0IGV2ZW50LgogICAgX3N0YXRlICY9IH5fU1RBVEVfV0FJVF9GT1JfQ0FOQ0VMOwogICAgaWYgKCFfaXNDYW5jZWxlZCkgewogICAgICBfY2FuY2VsKCk7CiAgICB9CiAgICByZXR1cm4gX2NhbmNlbEZ1dHVyZSA/PyBGdXR1cmUuX251bGxGdXR1cmU7CiAgfQoKICBGdXR1cmU8RT4gYXNGdXR1cmU8RT4oW0UgZnV0dXJlVmFsdWVdKSB7CiAgICBfRnV0dXJlPEU+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPEU+KCk7CgogICAgLy8gT3ZlcndyaXRlIHRoZSBvbkRvbmUgYW5kIG9uRXJyb3IgaGFuZGxlcnMuCiAgICBfb25Eb25lID0gKCkgewogICAgICByZXN1bHQuX2NvbXBsZXRlKGZ1dHVyZVZhbHVlKTsKICAgIH07CiAgICBfb25FcnJvciA9IChlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICAgIEZ1dHVyZSBjYW5jZWxGdXR1cmUgPSBjYW5jZWwoKTsKICAgICAgaWYgKCFpZGVudGljYWwoY2FuY2VsRnV0dXJlLCBGdXR1cmUuX251bGxGdXR1cmUpKSB7CiAgICAgICAgY2FuY2VsRnV0dXJlLndoZW5Db21wbGV0ZSgoKSB7CiAgICAgICAgICByZXN1bHQuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdC5fY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0KICAgIH07CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIFN0YXRlIG1hbmFnZW1lbnQuCgogIGJvb2wgZ2V0IF9pc0lucHV0UGF1c2VkID0+IChfc3RhdGUgJiBfU1RBVEVfSU5QVVRfUEFVU0VEKSAhPSAwOwogIGJvb2wgZ2V0IF9pc0Nsb3NlZCA9PiAoX3N0YXRlICYgX1NUQVRFX0NMT1NFRCkgIT0gMDsKICBib29sIGdldCBfaXNDYW5jZWxlZCA9PiAoX3N0YXRlICYgX1NUQVRFX0NBTkNFTEVEKSAhPSAwOwogIGJvb2wgZ2V0IF93YWl0c0ZvckNhbmNlbCA9PiAoX3N0YXRlICYgX1NUQVRFX1dBSVRfRk9SX0NBTkNFTCkgIT0gMDsKICBib29sIGdldCBfaW5DYWxsYmFjayA9PiAoX3N0YXRlICYgX1NUQVRFX0lOX0NBTExCQUNLKSAhPSAwOwogIGJvb2wgZ2V0IF9oYXNQZW5kaW5nID0+IChfc3RhdGUgJiBfU1RBVEVfSEFTX1BFTkRJTkcpICE9IDA7CiAgYm9vbCBnZXQgX2lzUGF1c2VkID0+IF9zdGF0ZSA+PSBfU1RBVEVfUEFVU0VfQ09VTlQ7CiAgYm9vbCBnZXQgX2NhbkZpcmUgPT4gX3N0YXRlIDwgX1NUQVRFX0lOX0NBTExCQUNLOwogIGJvb2wgZ2V0IF9tYXlSZXN1bWVJbnB1dCA9PgogICAgICAhX2lzUGF1c2VkICYmIChfcGVuZGluZyA9PSBudWxsIHx8IF9wZW5kaW5nLmlzRW1wdHkpOwogIGJvb2wgZ2V0IF9jYW5jZWxPbkVycm9yID0+IChfc3RhdGUgJiBfU1RBVEVfQ0FOQ0VMX09OX0VSUk9SKSAhPSAwOwoKICBib29sIGdldCBpc1BhdXNlZCA9PiBfaXNQYXVzZWQ7CgogIHZvaWQgX2NhbmNlbCgpIHsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfQ0FOQ0VMRUQ7CiAgICBpZiAoX2hhc1BlbmRpbmcpIHsKICAgICAgX3BlbmRpbmcuY2FuY2VsU2NoZWR1bGUoKTsKICAgIH0KICAgIGlmICghX2luQ2FsbGJhY2spIF9wZW5kaW5nID0gbnVsbDsKICAgIF9jYW5jZWxGdXR1cmUgPSBfb25DYW5jZWwoKTsKICB9CgogIC8qKgogICAqIERlY3JlbWVudHMgdGhlIHBhdXNlIGNvdW50LgogICAqCiAgICogRG9lcyBub3QgYXV0b21hdGljYWxseSB1bnBhdXNlIHRoZSBpbnB1dCAoY2FsbCBbX29uUmVzdW1lXSkgd2hlbgogICAqIHRoZSBwYXVzZSBjb3VudCByZWFjaGVzIHplcm8uIFRoaXMgaXMgaGFuZGxlZCBlbHNld2hlcmUsIGFuZCBvbmx5CiAgICogaWYgdGhlcmUgYXJlIG5vIHBlbmRpbmcgZXZlbnRzIGJ1ZmZlcmVkLgogICAqLwogIHZvaWQgX2RlY3JlbWVudFBhdXNlQ291bnQoKSB7CiAgICBhc3NlcnQoX2lzUGF1c2VkKTsKICAgIF9zdGF0ZSAtPSBfU1RBVEVfUEFVU0VfQ09VTlQ7CiAgfQoKICAvLyBfRXZlbnRTaW5rIGludGVyZmFjZS4KCiAgdm9pZCBfYWRkKFQgZGF0YSkgewogICAgYXNzZXJ0KCFfaXNDbG9zZWQpOwogICAgaWYgKF9pc0NhbmNlbGVkKSByZXR1cm47CiAgICBpZiAoX2NhbkZpcmUpIHsKICAgICAgX3NlbmREYXRhKGRhdGEpOwogICAgfSBlbHNlIHsKICAgICAgX2FkZFBlbmRpbmcobmV3IF9EZWxheWVkRGF0YTxUPihkYXRhKSk7CiAgICB9CiAgfQoKICB2b2lkIF9hZGRFcnJvcihPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgaWYgKF9pc0NhbmNlbGVkKSByZXR1cm47CiAgICBpZiAoX2NhbkZpcmUpIHsKICAgICAgX3NlbmRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7IC8vIFJlcG9ydHMgY2FuY2VsIGFmdGVyIHNlbmRpbmcuCiAgICB9IGVsc2UgewogICAgICBfYWRkUGVuZGluZyhuZXcgX0RlbGF5ZWRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSkpOwogICAgfQogIH0KCiAgdm9pZCBfY2xvc2UoKSB7CiAgICBhc3NlcnQoIV9pc0Nsb3NlZCk7CiAgICBpZiAoX2lzQ2FuY2VsZWQpIHJldHVybjsKICAgIF9zdGF0ZSB8PSBfU1RBVEVfQ0xPU0VEOwogICAgaWYgKF9jYW5GaXJlKSB7CiAgICAgIF9zZW5kRG9uZSgpOwogICAgfSBlbHNlIHsKICAgICAgX2FkZFBlbmRpbmcoY29uc3QgX0RlbGF5ZWREb25lKCkpOwogICAgfQogIH0KCiAgLy8gSG9va3MgY2FsbGVkIHdoZW4gdGhlIGlucHV0IGlzIHBhdXNlZCwgdW5wYXVzZWQgb3IgY2FuY2VsZWQuCiAgLy8gVGhlc2UgbXVzdCBub3QgdGhyb3cuIElmIG92ZXJ3cml0dGVuIHRvIGNhbGwgdXNlciBjb2RlLCBpbmNsdWRlIHN1aXRhYmxlCiAgLy8gdHJ5L2NhdGNoIHdyYXBwaW5nIGFuZCBzZW5kIGFueSBlcnJvcnMgdG8KICAvLyBbX1pvbmUuY3VycmVudC5oYW5kbGVVbmNhdWdodEVycm9yXS4KICB2b2lkIF9vblBhdXNlKCkgewogICAgYXNzZXJ0KF9pc0lucHV0UGF1c2VkKTsKICB9CgogIHZvaWQgX29uUmVzdW1lKCkgewogICAgYXNzZXJ0KCFfaXNJbnB1dFBhdXNlZCk7CiAgfQoKICBGdXR1cmUgX29uQ2FuY2VsKCkgewogICAgYXNzZXJ0KF9pc0NhbmNlbGVkKTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8gSGFuZGxlIHBlbmRpbmcgZXZlbnRzLgoKICAvKioKICAgKiBBZGQgYSBwZW5kaW5nIGV2ZW50LgogICAqCiAgICogSWYgdGhlIHN1YnNjcmlwdGlvbiBpcyBub3QgcGF1c2VkLCB0aGlzIGFsc28gc2NoZWR1bGVzIGEgZmlyaW5nCiAgICogb2YgcGVuZGluZyBldmVudHMgbGF0ZXIgKGlmIG5lY2Vzc2FyeSkuCiAgICovCiAgdm9pZCBfYWRkUGVuZGluZyhfRGVsYXllZEV2ZW50IGV2ZW50KSB7CiAgICBfU3RyZWFtSW1wbEV2ZW50czxUPiBwZW5kaW5nID0gX3BlbmRpbmc7CiAgICBpZiAoX3BlbmRpbmcgPT0gbnVsbCkgewogICAgICBwZW5kaW5nID0gX3BlbmRpbmcgPSBuZXcgX1N0cmVhbUltcGxFdmVudHM8VD4oKTsKICAgIH0KICAgIHBlbmRpbmcuYWRkKGV2ZW50KTsKICAgIGlmICghX2hhc1BlbmRpbmcpIHsKICAgICAgX3N0YXRlIHw9IF9TVEFURV9IQVNfUEVORElORzsKICAgICAgaWYgKCFfaXNQYXVzZWQpIHsKICAgICAgICBfcGVuZGluZy5zY2hlZHVsZSh0aGlzKTsKICAgICAgfQogICAgfQogIH0KCiAgLyogX0V2ZW50RGlzcGF0Y2ggaW50ZXJmYWNlLiAqLwoKICB2b2lkIF9zZW5kRGF0YShUIGRhdGEpIHsKICAgIGFzc2VydCghX2lzQ2FuY2VsZWQpOwogICAgYXNzZXJ0KCFfaXNQYXVzZWQpOwogICAgYXNzZXJ0KCFfaW5DYWxsYmFjayk7CiAgICBib29sIHdhc0lucHV0UGF1c2VkID0gX2lzSW5wdXRQYXVzZWQ7CiAgICBfc3RhdGUgfD0gX1NUQVRFX0lOX0NBTExCQUNLOwogICAgX3pvbmUucnVuVW5hcnlHdWFyZGVkKF9vbkRhdGEsIGRhdGEpOwogICAgX3N0YXRlICY9IH5fU1RBVEVfSU5fQ0FMTEJBQ0s7CiAgICBfY2hlY2tTdGF0ZSh3YXNJbnB1dFBhdXNlZCk7CiAgfQoKICB2b2lkIF9zZW5kRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGFzc2VydCghX2lzQ2FuY2VsZWQpOwogICAgYXNzZXJ0KCFfaXNQYXVzZWQpOwogICAgYXNzZXJ0KCFfaW5DYWxsYmFjayk7CiAgICBib29sIHdhc0lucHV0UGF1c2VkID0gX2lzSW5wdXRQYXVzZWQ7CgogICAgdm9pZCBzZW5kRXJyb3IoKSB7CiAgICAgIC8vIElmIHRoZSBzdWJzY3JpcHRpb24gaGFzIGJlZW4gY2FuY2VsZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIGNhbmNlbAogICAgICAvLyBmdXR1cmUgdG8gZmluaXNoIHdlIG11c3Qgbm90IHJlcG9ydCB0aGUgZXJyb3IuCiAgICAgIGlmIChfaXNDYW5jZWxlZCAmJiAhX3dhaXRzRm9yQ2FuY2VsKSByZXR1cm47CiAgICAgIF9zdGF0ZSB8PSBfU1RBVEVfSU5fQ0FMTEJBQ0s7CiAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGlzIGR5bmFtaWMgc2hvdWxkIGJlICd2b2lkJy4KICAgICAgdmFyIG9uRXJyb3IgPSBfb25FcnJvcjsKICAgICAgaWYgKG9uRXJyb3IgaXMgdm9pZCBGdW5jdGlvbihPYmplY3QsIFN0YWNrVHJhY2UpKSB7CiAgICAgICAgX3pvbmUucnVuQmluYXJ5R3VhcmRlZDxPYmplY3QsIFN0YWNrVHJhY2U+KG9uRXJyb3IsIGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoX29uRXJyb3IgaXMgdm9pZCBGdW5jdGlvbihPYmplY3QpKTsKICAgICAgICBfem9uZS5ydW5VbmFyeUd1YXJkZWQ8T2JqZWN0Pihfb25FcnJvciwgZXJyb3IpOwogICAgICB9CiAgICAgIF9zdGF0ZSAmPSB+X1NUQVRFX0lOX0NBTExCQUNLOwogICAgfQoKICAgIGlmIChfY2FuY2VsT25FcnJvcikgewogICAgICBfc3RhdGUgfD0gX1NUQVRFX1dBSVRfRk9SX0NBTkNFTDsKICAgICAgX2NhbmNlbCgpOwogICAgICBpZiAoX2NhbmNlbEZ1dHVyZSAhPSBudWxsICYmCiAgICAgICAgICAhaWRlbnRpY2FsKF9jYW5jZWxGdXR1cmUsIEZ1dHVyZS5fbnVsbEZ1dHVyZSkpIHsKICAgICAgICBfY2FuY2VsRnV0dXJlLndoZW5Db21wbGV0ZShzZW5kRXJyb3IpOwogICAgICB9IGVsc2UgewogICAgICAgIHNlbmRFcnJvcigpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBzZW5kRXJyb3IoKTsKICAgICAgLy8gT25seSBjaGVjayBzdGF0ZSBpZiBub3QgY2FuY2VsT25FcnJvci4KICAgICAgX2NoZWNrU3RhdGUod2FzSW5wdXRQYXVzZWQpOwogICAgfQogIH0KCiAgdm9pZCBfc2VuZERvbmUoKSB7CiAgICBhc3NlcnQoIV9pc0NhbmNlbGVkKTsKICAgIGFzc2VydCghX2lzUGF1c2VkKTsKICAgIGFzc2VydCghX2luQ2FsbGJhY2spOwoKICAgIHZvaWQgc2VuZERvbmUoKSB7CiAgICAgIC8vIElmIHRoZSBzdWJzY3JpcHRpb24gaGFzIGJlZW4gY2FuY2VsZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIGNhbmNlbAogICAgICAvLyBmdXR1cmUgdG8gZmluaXNoIHdlIG11c3Qgbm90IHJlcG9ydCB0aGUgZG9uZSBldmVudC4KICAgICAgaWYgKCFfd2FpdHNGb3JDYW5jZWwpIHJldHVybjsKICAgICAgX3N0YXRlIHw9IChfU1RBVEVfQ0FOQ0VMRUQgfCBfU1RBVEVfQ0xPU0VEIHwgX1NUQVRFX0lOX0NBTExCQUNLKTsKICAgICAgX3pvbmUucnVuR3VhcmRlZChfb25Eb25lKTsKICAgICAgX3N0YXRlICY9IH5fU1RBVEVfSU5fQ0FMTEJBQ0s7CiAgICB9CgogICAgX2NhbmNlbCgpOwogICAgX3N0YXRlIHw9IF9TVEFURV9XQUlUX0ZPUl9DQU5DRUw7CiAgICBpZiAoX2NhbmNlbEZ1dHVyZSAhPSBudWxsICYmCiAgICAgICAgIWlkZW50aWNhbChfY2FuY2VsRnV0dXJlLCBGdXR1cmUuX251bGxGdXR1cmUpKSB7CiAgICAgIF9jYW5jZWxGdXR1cmUud2hlbkNvbXBsZXRlKHNlbmREb25lKTsKICAgIH0gZWxzZSB7CiAgICAgIHNlbmREb25lKCk7CiAgICB9CiAgfQoKICAvKioKICAgKiBDYWxsIGEgaG9vayBmdW5jdGlvbi4KICAgKgogICAqIFRoZSBjYWxsIGlzIHByb3Blcmx5IHdyYXBwZWQgaW4gY29kZSB0byBhdm9pZCBvdGhlciBjYWxsYmFja3MKICAgKiBkdXJpbmcgdGhlIGNhbGwsIGFuZCBpdCBjaGVja3MgZm9yIHN0YXRlIGNoYW5nZXMgYWZ0ZXIgdGhlIGNhbGwKICAgKiB0aGF0IHNob3VsZCBjYXVzZSBmdXJ0aGVyIGNhbGxiYWNrcy4KICAgKi8KICB2b2lkIF9ndWFyZENhbGxiYWNrKHZvaWQgY2FsbGJhY2soKSkgewogICAgYXNzZXJ0KCFfaW5DYWxsYmFjayk7CiAgICBib29sIHdhc0lucHV0UGF1c2VkID0gX2lzSW5wdXRQYXVzZWQ7CiAgICBfc3RhdGUgfD0gX1NUQVRFX0lOX0NBTExCQUNLOwogICAgY2FsbGJhY2soKTsKICAgIF9zdGF0ZSAmPSB+X1NUQVRFX0lOX0NBTExCQUNLOwogICAgX2NoZWNrU3RhdGUod2FzSW5wdXRQYXVzZWQpOwogIH0KCiAgLyoqCiAgICogQ2hlY2sgaWYgdGhlIGlucHV0IG5lZWRzIHRvIGJlIGluZm9ybWVkIG9mIHN0YXRlIGNoYW5nZXMuCiAgICoKICAgKiBTdGF0ZSBjaGFuZ2VzIGFyZSBwYXVzaW5nLCByZXN1bWluZyBhbmQgY2FuY2VsaW5nLgogICAqCiAgICogQWZ0ZXIgY2FuY2VsaW5nLCBubyBmdXJ0aGVyIGNhbGxiYWNrcyB3aWxsIGhhcHBlbi4KICAgKgogICAqIFRoZSBjYW5jZWwgY2FsbGJhY2sgaXMgY2FsbGVkIGFmdGVyIGEgdXNlciBjYW5jZWwsIG9yIGFmdGVyCiAgICogdGhlIGZpbmFsIGRvbmUgZXZlbnQgaXMgc2VudC4KICAgKi8KICB2b2lkIF9jaGVja1N0YXRlKGJvb2wgd2FzSW5wdXRQYXVzZWQpIHsKICAgIGFzc2VydCghX2luQ2FsbGJhY2spOwogICAgaWYgKF9oYXNQZW5kaW5nICYmIF9wZW5kaW5nLmlzRW1wdHkpIHsKICAgICAgX3N0YXRlICY9IH5fU1RBVEVfSEFTX1BFTkRJTkc7CiAgICAgIGlmIChfaXNJbnB1dFBhdXNlZCAmJiBfbWF5UmVzdW1lSW5wdXQpIHsKICAgICAgICBfc3RhdGUgJj0gfl9TVEFURV9JTlBVVF9QQVVTRUQ7CiAgICAgIH0KICAgIH0KICAgIC8vIElmIHRoZSBzdGF0ZSBjaGFuZ2VzIGR1cmluZyBhIGNhbGxiYWNrLCB3ZSBpbW1lZGlhdGVseQogICAgLy8gbWFrZSBhIG5ldyBzdGF0ZS1jaGFuZ2UgY2FsbGJhY2suIExvb3AgdW50aWwgdGhlIHN0YXRlIGRpZG4ndCBjaGFuZ2UuCiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoX2lzQ2FuY2VsZWQpIHsKICAgICAgICBfcGVuZGluZyA9IG51bGw7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGJvb2wgaXNJbnB1dFBhdXNlZCA9IF9pc0lucHV0UGF1c2VkOwogICAgICBpZiAod2FzSW5wdXRQYXVzZWQgPT0gaXNJbnB1dFBhdXNlZCkgYnJlYWs7CiAgICAgIF9zdGF0ZSBePSBfU1RBVEVfSU5fQ0FMTEJBQ0s7CiAgICAgIGlmIChpc0lucHV0UGF1c2VkKSB7CiAgICAgICAgX29uUGF1c2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfb25SZXN1bWUoKTsKICAgICAgfQogICAgICBfc3RhdGUgJj0gfl9TVEFURV9JTl9DQUxMQkFDSzsKICAgICAgd2FzSW5wdXRQYXVzZWQgPSBpc0lucHV0UGF1c2VkOwogICAgfQogICAgaWYgKF9oYXNQZW5kaW5nICYmICFfaXNQYXVzZWQpIHsKICAgICAgX3BlbmRpbmcuc2NoZWR1bGUodGhpcyk7CiAgICB9CiAgfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBzaW5nbGUgYW5kIG11bHRpLXN1YnNjcmlwdGlvbiBzdHJlYW1zLgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmFic3RyYWN0IGNsYXNzIF9TdHJlYW1JbXBsPFQ+IGV4dGVuZHMgU3RyZWFtPFQ+IHsKICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAvLyBTdHJlYW0gaW50ZXJmYWNlLgoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gbGlzdGVuKHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBjYW5jZWxPbkVycm9yID0gaWRlbnRpY2FsKHRydWUsIGNhbmNlbE9uRXJyb3IpOwogICAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9CiAgICAgICAgX2NyZWF0ZVN1YnNjcmlwdGlvbihvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcik7CiAgICBfb25MaXN0ZW4oc3Vic2NyaXB0aW9uKTsKICAgIHJldHVybiBzdWJzY3JpcHRpb247CiAgfQoKICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLyoqIENyZWF0ZSBhIHN1YnNjcmlwdGlvbiBvYmplY3QuIENhbGxlZCBieSBbc3ViY3JpYmVdLiAqLwogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBfY3JlYXRlU3Vic2NyaXB0aW9uKHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikgewogICAgcmV0dXJuIG5ldyBfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KAogICAgICAgIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKTsKICB9CgogIC8qKiBIb29rIGNhbGxlZCB3aGVuIHRoZSBzdWJzY3JpcHRpb24gaGFzIGJlZW4gY3JlYXRlZC4gKi8KICB2b2lkIF9vbkxpc3RlbihTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uKSB7fQp9Cgp0eXBlZGVmIF9QZW5kaW5nRXZlbnRzPFQ+IF9FdmVudEdlbmVyYXRvcjxUPigpOwoKLyoqIFN0cmVhbSB0aGF0IGdlbmVyYXRlcyBpdHMgb3duIGV2ZW50cy4gKi8KY2xhc3MgX0dlbmVyYXRlZFN0cmVhbUltcGw8VD4gZXh0ZW5kcyBfU3RyZWFtSW1wbDxUPiB7CiAgZmluYWwgX0V2ZW50R2VuZXJhdG9yPFQ+IF9wZW5kaW5nOwogIGJvb2wgX2lzVXNlZCA9IGZhbHNlOwogIC8qKgogICAqIEluaXRpYWxpemVzIHRoZSBzdHJlYW0gdG8gaGF2ZSBvbmx5IHRoZSBldmVudHMgcHJvdmlkZWQgYnkgYQogICAqIFtfUGVuZGluZ0V2ZW50c10uCiAgICoKICAgKiBBIG5ldyBbX1BlbmRpbmdFdmVudHNdIG11c3QgYmUgZ2VuZXJhdGVkIGZvciBlYWNoIGxpc3Rlbi4KICAgKi8KICBfR2VuZXJhdGVkU3RyZWFtSW1wbCh0aGlzLl9wZW5kaW5nKTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9jcmVhdGVTdWJzY3JpcHRpb24odm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKSB7CiAgICBpZiAoX2lzVXNlZCkgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGxpc3RlbmVkIHRvLiIpOwogICAgX2lzVXNlZCA9IHRydWU7CiAgICByZXR1cm4gbmV3IF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb248VD4oCiAgICAgICAgb25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpCiAgICAgIC4uX3NldFBlbmRpbmdFdmVudHMoX3BlbmRpbmcoKSk7CiAgfQp9CgovKiogUGVuZGluZyBldmVudHMgb2JqZWN0IHRoYXQgZ2V0cyBpdHMgZXZlbnRzIGZyb20gYW4gW0l0ZXJhYmxlXS4gKi8KY2xhc3MgX0l0ZXJhYmxlUGVuZGluZ0V2ZW50czxUPiBleHRlbmRzIF9QZW5kaW5nRXZlbnRzPFQ+IHsKICAvLyBUaGUgaXRlcmF0b3IgcHJvdmlkaW5nIGRhdGEgZm9yIGRhdGEgZXZlbnRzLgogIC8vIFNldCB0byBudWxsIHdoZW4gaXRlcmF0aW9uIGhhcyBjb21wbGV0ZWQuCiAgSXRlcmF0b3I8VD4gX2l0ZXJhdG9yOwoKICBfSXRlcmFibGVQZW5kaW5nRXZlbnRzKEl0ZXJhYmxlPFQ+IGRhdGEpIDogX2l0ZXJhdG9yID0gZGF0YS5pdGVyYXRvcjsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfaXRlcmF0b3IgPT0gbnVsbDsKCiAgdm9pZCBoYW5kbGVOZXh0KF9FdmVudERpc3BhdGNoPFQ+IGRpc3BhdGNoKSB7CiAgICBpZiAoX2l0ZXJhdG9yID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIk5vIGV2ZW50cyBwZW5kaW5nLiIpOwogICAgfQogICAgLy8gU2VuZCBvbmUgZXZlbnQgcGVyIGNhbGwgdG8gbW92ZU5leHQuCiAgICAvLyBJZiBtb3ZlTmV4dCByZXR1cm5zIHRydWUsIHNlbmQgdGhlIGN1cnJlbnQgZWxlbWVudCBhcyBkYXRhLgogICAgLy8gSWYgY3VycmVudCB0aHJvd3MsIHNlbmQgdGhhdCBlcnJvciwgYnV0IGtlZXAgaXRlcmF0aW5nLgogICAgLy8gSWYgbW92ZU5leHQgcmV0dXJucyBmYWxzZSwgc2VuZCBhIGRvbmUgZXZlbnQgYW5kIGNsZWFyIHRoZSBfaXRlcmF0b3IuCiAgICAvLyBJZiBtb3ZlTmV4dCB0aHJvd3MgYW4gZXJyb3IsIHNlbmQgYW4gZXJyb3IgYW5kIHByZXBhcmUgdG8gc2VuZCBhIGRvbmUKICAgIC8vIGV2ZW50IGFmdGVyd2FyZHMuCiAgICBib29sIGhhc01vcmU7CiAgICB0cnkgewogICAgICBoYXNNb3JlID0gX2l0ZXJhdG9yLm1vdmVOZXh0KCk7CiAgICAgIGlmIChoYXNNb3JlKSB7CiAgICAgICAgZGlzcGF0Y2guX3NlbmREYXRhKF9pdGVyYXRvci5jdXJyZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfaXRlcmF0b3IgPSBudWxsOwogICAgICAgIGRpc3BhdGNoLl9zZW5kRG9uZSgpOwogICAgICB9CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIGlmIChoYXNNb3JlID09IG51bGwpIHsKICAgICAgICAvLyBUaHJldyBpbiAubW92ZU5leHQoKS4KICAgICAgICAvLyBFbnN1cmUgdGhhdCB3ZSBzZW5kIGEgZG9uZSBhZnRlcndhcmRzLgogICAgICAgIF9pdGVyYXRvciA9IGNvbnN0IEVtcHR5SXRlcmF0b3I8TnVsbD4oKTsKICAgICAgICBkaXNwYXRjaC5fc2VuZEVycm9yKGUsIHMpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRocmV3IGluIC5jdXJyZW50LgogICAgICAgIGRpc3BhdGNoLl9zZW5kRXJyb3IoZSwgcyk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBpZiAoaXNTY2hlZHVsZWQpIGNhbmNlbFNjaGVkdWxlKCk7CiAgICBfaXRlcmF0b3IgPSBudWxsOwogIH0KfQoKLy8gSW50ZXJuYWwgaGVscGVycy4KCi8vIFR5cGVzIG9mIHRoZSBkaWZmZXJlbnQgaGFuZGxlcnMgb24gYSBzdHJlYW0uIFR5cGVzIHVzZWQgdG8gdHlwZSBmaWVsZHMuCnR5cGVkZWYgdm9pZCBfRGF0YUhhbmRsZXI8VD4oVCB2YWx1ZSk7CnR5cGVkZWYgdm9pZCBfRG9uZUhhbmRsZXIoKTsKCi8qKiBEZWZhdWx0IGRhdGEgaGFuZGxlciwgZG9lcyBub3RoaW5nLiAqLwp2b2lkIF9udWxsRGF0YUhhbmRsZXIoT2JqZWN0IHZhbHVlKSB7fQoKLyoqIERlZmF1bHQgZXJyb3IgaGFuZGxlciwgcmVwb3J0cyB0aGUgZXJyb3IgdG8gdGhlIGN1cnJlbnQgem9uZSdzIGhhbmRsZXIuICovCnZvaWQgX251bGxFcnJvckhhbmRsZXIoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogIFpvbmUuY3VycmVudC5oYW5kbGVVbmNhdWdodEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKfQoKLyoqIERlZmF1bHQgZG9uZSBoYW5kbGVyLCBkb2VzIG5vdGhpbmcuICovCnZvaWQgX251bGxEb25lSGFuZGxlcigpIHt9CgovKiogQSBkZWxheWVkIGV2ZW50IG9uIGEgYnVmZmVyaW5nIHN0cmVhbSBzdWJzY3JpcHRpb24uICovCmFic3RyYWN0IGNsYXNzIF9EZWxheWVkRXZlbnQ8VD4gewogIC8qKiBBZGRlZCBhcyBhIGxpbmtlZCBsaXN0IG9uIHRoZSBbU3RyZWFtQ29udHJvbGxlcl0uICovCiAgX0RlbGF5ZWRFdmVudCBuZXh0OwogIC8qKiBFeGVjdXRlIHRoZSBkZWxheWVkIGV2ZW50IG9uIHRoZSBbU3RyZWFtQ29udHJvbGxlcl0uICovCiAgdm9pZCBwZXJmb3JtKF9FdmVudERpc3BhdGNoPFQ+IGRpc3BhdGNoKTsKfQoKLyoqIEEgZGVsYXllZCBkYXRhIGV2ZW50LiAqLwpjbGFzcyBfRGVsYXllZERhdGE8VD4gZXh0ZW5kcyBfRGVsYXllZEV2ZW50PFQ+IHsKICBmaW5hbCBUIHZhbHVlOwogIF9EZWxheWVkRGF0YSh0aGlzLnZhbHVlKTsKICB2b2lkIHBlcmZvcm0oX0V2ZW50RGlzcGF0Y2g8VD4gZGlzcGF0Y2gpIHsKICAgIGRpc3BhdGNoLl9zZW5kRGF0YSh2YWx1ZSk7CiAgfQp9CgovKiogQSBkZWxheWVkIGVycm9yIGV2ZW50LiAqLwpjbGFzcyBfRGVsYXllZEVycm9yIGV4dGVuZHMgX0RlbGF5ZWRFdmVudCB7CiAgZmluYWwgZXJyb3I7CiAgZmluYWwgU3RhY2tUcmFjZSBzdGFja1RyYWNlOwoKICBfRGVsYXllZEVycm9yKHRoaXMuZXJyb3IsIHRoaXMuc3RhY2tUcmFjZSk7CiAgdm9pZCBwZXJmb3JtKF9FdmVudERpc3BhdGNoIGRpc3BhdGNoKSB7CiAgICBkaXNwYXRjaC5fc2VuZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9Cn0KCi8qKiBBIGRlbGF5ZWQgZG9uZSBldmVudC4gKi8KY2xhc3MgX0RlbGF5ZWREb25lIGltcGxlbWVudHMgX0RlbGF5ZWRFdmVudCB7CiAgY29uc3QgX0RlbGF5ZWREb25lKCk7CiAgdm9pZCBwZXJmb3JtKF9FdmVudERpc3BhdGNoIGRpc3BhdGNoKSB7CiAgICBkaXNwYXRjaC5fc2VuZERvbmUoKTsKICB9CgogIF9EZWxheWVkRXZlbnQgZ2V0IG5leHQgPT4gbnVsbDsKCiAgdm9pZCBzZXQgbmV4dChfRGVsYXllZEV2ZW50IF8pIHsKICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJObyBldmVudHMgYWZ0ZXIgYSBkb25lLiIpOwogIH0KfQoKLyoqIFN1cGVyY2xhc3MgZm9yIHByb3ZpZGVyIG9mIHBlbmRpbmcgZXZlbnRzLiAqLwphYnN0cmFjdCBjbGFzcyBfUGVuZGluZ0V2ZW50czxUPiB7CiAgLy8gTm8gYXN5bmMgZXZlbnQgaGFzIGJlZW4gc2NoZWR1bGVkLgogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX1VOU0NIRURVTEVEID0gMDsKICAvLyBBbiBhc3luYyBldmVudCBoYXMgYmVlbiBzY2hlZHVsZWQgdG8gcnVuIGEgZnVuY3Rpb24uCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfU0NIRURVTEVEID0gMTsKICAvLyBBbiBhc3luYyBldmVudCBoYXMgYmVlbiBzY2hlZHVsZWQsIGJ1dCBpdCB3aWxsIGRvIG5vdGhpbmcgd2hlbiBpdCBydW5zLgogIC8vIEFzeW5jIGV2ZW50cyBjYW4ndCBiZSBwcmVlbXB0ZWQuCiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfQ0FOQ0VMRUQgPSAzOwoKICAvKioKICAgKiBTdGF0ZSBvZiBiZWluZyBzY2hlZHVsZWQuCiAgICoKICAgKiBTZXQgdG8gW19TVEFURV9TQ0hFRFVMRURdIHdoZW4gcGVuZGluZyBldmVudHMgYXJlIHNjaGVkdWxlZCBmb3IKICAgKiBhc3luYyBkaXNwYXRjaC4gU2luY2Ugd2UgY2FuJ3QgY2FuY2VsIGEgW3NjaGVkdWxlTWljcm90YXNrXSBjYWxsLCBpZgogICAqIHNjaGVkdWxpbmcgaXMgImNhbmNlbGVkIiwgdGhlIF9zdGF0ZSBpcyBzaW1wbHkgc2V0IHRvIFtfU1RBVEVfQ0FOQ0VMRURdCiAgICogd2hpY2ggd2lsbCBtYWtlIHRoZSBhc3luYyBjb2RlIGRvIG5vdGhpbmcgZXhjZXB0IHJlc2V0dGluZyBbX3N0YXRlXS4KICAgKgogICAqIElmIGV2ZW50cyBhcmUgc2NoZWR1bGVkIHdoaWxlIHRoZSBzdGF0ZSBpcyBbX1NUQVRFX0NBTkNFTEVEXSwgaXQgaXMKICAgKiBtZXJlbHkgc3dpdGNoZWQgYmFjayB0byBbX1NUQVRFX1NDSEVEVUxFRF0sIGJ1dCBubyBuZXcgY2FsbCB0bwogICAqIFtzY2hlZHVsZU1pY3JvdGFza10gaXMgcGVyZm9ybWVkLgogICAqLwogIGludCBfc3RhdGUgPSBfU1RBVEVfVU5TQ0hFRFVMRUQ7CgogIGJvb2wgZ2V0IGlzRW1wdHk7CgogIGJvb2wgZ2V0IGlzU2NoZWR1bGVkID0+IF9zdGF0ZSA9PSBfU1RBVEVfU0NIRURVTEVEOwogIGJvb2wgZ2V0IF9ldmVudFNjaGVkdWxlZCA9PiBfc3RhdGUgPj0gX1NUQVRFX1NDSEVEVUxFRDsKCiAgLyoqCiAgICogU2NoZWR1bGUgYW4gZXZlbnQgdG8gcnVuIGxhdGVyLgogICAqCiAgICogSWYgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLCBpdCBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIHNhbWUgZGlzcGF0Y2ggYXMKICAgKiBhcmd1bWVudCBlYWNoIHRpbWUuIEl0IG1heSByZXVzZSBhbiBlYXJsaWVyIGFyZ3VtZW50IGluIHNvbWUgY2FzZXMuCiAgICovCiAgdm9pZCBzY2hlZHVsZShfRXZlbnREaXNwYXRjaDxUPiBkaXNwYXRjaCkgewogICAgaWYgKGlzU2NoZWR1bGVkKSByZXR1cm47CiAgICBhc3NlcnQoIWlzRW1wdHkpOwogICAgaWYgKF9ldmVudFNjaGVkdWxlZCkgewogICAgICBhc3NlcnQoX3N0YXRlID09IF9TVEFURV9DQU5DRUxFRCk7CiAgICAgIF9zdGF0ZSA9IF9TVEFURV9TQ0hFRFVMRUQ7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHNjaGVkdWxlTWljcm90YXNrKCgpIHsKICAgICAgaW50IG9sZFN0YXRlID0gX3N0YXRlOwogICAgICBfc3RhdGUgPSBfU1RBVEVfVU5TQ0hFRFVMRUQ7CiAgICAgIGlmIChvbGRTdGF0ZSA9PSBfU1RBVEVfQ0FOQ0VMRUQpIHJldHVybjsKICAgICAgaGFuZGxlTmV4dChkaXNwYXRjaCk7CiAgICB9KTsKICAgIF9zdGF0ZSA9IF9TVEFURV9TQ0hFRFVMRUQ7CiAgfQoKICB2b2lkIGNhbmNlbFNjaGVkdWxlKCkgewogICAgaWYgKGlzU2NoZWR1bGVkKSBfc3RhdGUgPSBfU1RBVEVfQ0FOQ0VMRUQ7CiAgfQoKICB2b2lkIGhhbmRsZU5leHQoX0V2ZW50RGlzcGF0Y2g8VD4gZGlzcGF0Y2gpOwoKICAvKiogVGhyb3cgYXdheSBhbnkgcGVuZGluZyBldmVudHMgYW5kIGNhbmNlbCBzY2hlZHVsZWQgZXZlbnRzLiAqLwogIHZvaWQgY2xlYXIoKTsKfQoKLyoqIENsYXNzIGhvbGRpbmcgcGVuZGluZyBldmVudHMgZm9yIGEgW19TdHJlYW1JbXBsXS4gKi8KY2xhc3MgX1N0cmVhbUltcGxFdmVudHM8VD4gZXh0ZW5kcyBfUGVuZGluZ0V2ZW50czxUPiB7CiAgLy8vIFNpbmdsZSBsaW5rZWQgbGlzdCBvZiBbX0RlbGF5ZWRFdmVudF0gb2JqZWN0cy4KICBfRGVsYXllZEV2ZW50IGZpcnN0UGVuZGluZ0V2ZW50OwoKICAvLy8gTGFzdCBlbGVtZW50IGluIHRoZSBsaXN0IG9mIHBlbmRpbmcgZXZlbnRzLiBOZXcgZXZlbnRzIGFyZSBhZGRlZCBhZnRlciBpdC4KICBfRGVsYXllZEV2ZW50IGxhc3RQZW5kaW5nRXZlbnQ7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gbGFzdFBlbmRpbmdFdmVudCA9PSBudWxsOwoKICB2b2lkIGFkZChfRGVsYXllZEV2ZW50IGV2ZW50KSB7CiAgICBpZiAobGFzdFBlbmRpbmdFdmVudCA9PSBudWxsKSB7CiAgICAgIGZpcnN0UGVuZGluZ0V2ZW50ID0gbGFzdFBlbmRpbmdFdmVudCA9IGV2ZW50OwogICAgfSBlbHNlIHsKICAgICAgbGFzdFBlbmRpbmdFdmVudCA9IGxhc3RQZW5kaW5nRXZlbnQubmV4dCA9IGV2ZW50OwogICAgfQogIH0KCiAgdm9pZCBoYW5kbGVOZXh0KF9FdmVudERpc3BhdGNoPFQ+IGRpc3BhdGNoKSB7CiAgICBhc3NlcnQoIWlzU2NoZWR1bGVkKTsKICAgIF9EZWxheWVkRXZlbnQgZXZlbnQgPSBmaXJzdFBlbmRpbmdFdmVudDsKICAgIGZpcnN0UGVuZGluZ0V2ZW50ID0gZXZlbnQubmV4dDsKICAgIGlmIChmaXJzdFBlbmRpbmdFdmVudCA9PSBudWxsKSB7CiAgICAgIGxhc3RQZW5kaW5nRXZlbnQgPSBudWxsOwogICAgfQogICAgZXZlbnQucGVyZm9ybShkaXNwYXRjaCk7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKGlzU2NoZWR1bGVkKSBjYW5jZWxTY2hlZHVsZSgpOwogICAgZmlyc3RQZW5kaW5nRXZlbnQgPSBsYXN0UGVuZGluZ0V2ZW50ID0gbnVsbDsKICB9Cn0KCnR5cGVkZWYgdm9pZCBfQnJvYWRjYXN0Q2FsbGJhY2s8VD4oU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbik7CgovKioKICogRG9uZSBzdWJzY3JpcHRpb24gdGhhdCB3aWxsIHNlbmQgb25lIGRvbmUgZXZlbnQgYXMgc29vbiBhcyBwb3NzaWJsZS4KICovCmNsYXNzIF9Eb25lU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IGltcGxlbWVudHMgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHsKICBzdGF0aWMgY29uc3QgaW50IF9ET05FX1NFTlQgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgX1NDSEVEVUxFRCA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBfUEFVU0VEID0gNDsKCiAgZmluYWwgWm9uZSBfem9uZTsKICBpbnQgX3N0YXRlID0gMDsKICBfRG9uZUhhbmRsZXIgX29uRG9uZTsKCiAgX0RvbmVTdHJlYW1TdWJzY3JpcHRpb24odGhpcy5fb25Eb25lKSA6IF96b25lID0gWm9uZS5jdXJyZW50IHsKICAgIF9zY2hlZHVsZSgpOwogIH0KCiAgYm9vbCBnZXQgX2lzU2VudCA9PiAoX3N0YXRlICYgX0RPTkVfU0VOVCkgIT0gMDsKICBib29sIGdldCBfaXNTY2hlZHVsZWQgPT4gKF9zdGF0ZSAmIF9TQ0hFRFVMRUQpICE9IDA7CiAgYm9vbCBnZXQgaXNQYXVzZWQgPT4gX3N0YXRlID49IF9QQVVTRUQ7CgogIHZvaWQgX3NjaGVkdWxlKCkgewogICAgaWYgKF9pc1NjaGVkdWxlZCkgcmV0dXJuOwogICAgX3pvbmUuc2NoZWR1bGVNaWNyb3Rhc2soX3NlbmREb25lKTsKICAgIF9zdGF0ZSB8PSBfU0NIRURVTEVEOwogIH0KCiAgdm9pZCBvbkRhdGEodm9pZCBoYW5kbGVEYXRhKFQgZGF0YSkpIHt9CiAgdm9pZCBvbkVycm9yKEZ1bmN0aW9uIGhhbmRsZUVycm9yKSB7fQogIHZvaWQgb25Eb25lKHZvaWQgaGFuZGxlRG9uZSgpKSB7CiAgICBfb25Eb25lID0gaGFuZGxlRG9uZTsKICB9CgogIHZvaWQgcGF1c2UoW0Z1dHVyZSByZXN1bWVTaWduYWxdKSB7CiAgICBfc3RhdGUgKz0gX1BBVVNFRDsKICAgIGlmIChyZXN1bWVTaWduYWwgIT0gbnVsbCkgcmVzdW1lU2lnbmFsLndoZW5Db21wbGV0ZShyZXN1bWUpOwogIH0KCiAgdm9pZCByZXN1bWUoKSB7CiAgICBpZiAoaXNQYXVzZWQpIHsKICAgICAgX3N0YXRlIC09IF9QQVVTRUQ7CiAgICAgIGlmICghaXNQYXVzZWQgJiYgIV9pc1NlbnQpIHsKICAgICAgICBfc2NoZWR1bGUoKTsKICAgICAgfQogICAgfQogIH0KCiAgRnV0dXJlIGNhbmNlbCgpID0+IEZ1dHVyZS5fbnVsbEZ1dHVyZTsKCiAgRnV0dXJlPEU+IGFzRnV0dXJlPEU+KFtFIGZ1dHVyZVZhbHVlXSkgewogICAgX0Z1dHVyZTxFPiByZXN1bHQgPSBuZXcgX0Z1dHVyZTxFPigpOwogICAgX29uRG9uZSA9ICgpIHsKICAgICAgcmVzdWx0Ll9jb21wbGV0ZVdpdGhWYWx1ZShmdXR1cmVWYWx1ZSk7CiAgICB9OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgX3NlbmREb25lKCkgewogICAgX3N0YXRlICY9IH5fU0NIRURVTEVEOwogICAgaWYgKGlzUGF1c2VkKSByZXR1cm47CiAgICBfc3RhdGUgfD0gX0RPTkVfU0VOVDsKICAgIGlmIChfb25Eb25lICE9IG51bGwpIF96b25lLnJ1bkd1YXJkZWQoX29uRG9uZSk7CiAgfQp9CgpjbGFzcyBfQXNCcm9hZGNhc3RTdHJlYW08VD4gZXh0ZW5kcyBTdHJlYW08VD4gewogIGZpbmFsIFN0cmVhbTxUPiBfc291cmNlOwogIGZpbmFsIF9Ccm9hZGNhc3RDYWxsYmFjazxUPiBfb25MaXN0ZW5IYW5kbGVyOwogIGZpbmFsIF9Ccm9hZGNhc3RDYWxsYmFjazxUPiBfb25DYW5jZWxIYW5kbGVyOwogIGZpbmFsIFpvbmUgX3pvbmU7CgogIF9Bc0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4gX2NvbnRyb2xsZXI7CiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9zdWJzY3JpcHRpb247CgogIF9Bc0Jyb2FkY2FzdFN0cmVhbSgKICAgICAgdGhpcy5fc291cmNlLAogICAgICB2b2lkIG9uTGlzdGVuSGFuZGxlcihTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSwKICAgICAgdm9pZCBvbkNhbmNlbEhhbmRsZXIoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikpCiAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGUgcmV0dXJuIHR5cGUgc2hvdWxkIGJlIHZvaWQgYW5kIHNob3VsZCBiZQogICAgICAvLyBpbmZlcnJlZC4KICAgICAgOiBfb25MaXN0ZW5IYW5kbGVyID0gWm9uZS5jdXJyZW50CiAgICAgICAgICAgIC5yZWdpc3RlclVuYXJ5Q2FsbGJhY2s8ZHluYW1pYywgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+PigKICAgICAgICAgICAgICAgIG9uTGlzdGVuSGFuZGxlciksCiAgICAgICAgX29uQ2FuY2VsSGFuZGxlciA9IFpvbmUuY3VycmVudAogICAgICAgICAgICAucmVnaXN0ZXJVbmFyeUNhbGxiYWNrPGR5bmFtaWMsIFN0cmVhbVN1YnNjcmlwdGlvbjxUPj4oCiAgICAgICAgICAgICAgICBvbkNhbmNlbEhhbmRsZXIpLAogICAgICAgIF96b25lID0gWm9uZS5jdXJyZW50IHsKICAgIF9jb250cm9sbGVyID0gbmV3IF9Bc0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4oX29uTGlzdGVuLCBfb25DYW5jZWwpOwogIH0KCiAgYm9vbCBnZXQgaXNCcm9hZGNhc3QgPT4gdHJ1ZTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IGxpc3Rlbih2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgaWYgKF9jb250cm9sbGVyID09IG51bGwgfHwgX2NvbnRyb2xsZXIuaXNDbG9zZWQpIHsKICAgICAgLy8gUmV0dXJuIGEgZHVtbXkgc3Vic2NyaXB0aW9uIGJhY2tlZCBieSBub3RoaW5nLCBzaW5jZQogICAgICAvLyBpdCB3aWxsIG9ubHkgZXZlciBzZW5kIG9uZSBkb25lIGV2ZW50LgogICAgICByZXR1cm4gbmV3IF9Eb25lU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KG9uRG9uZSk7CiAgICB9CiAgICBfc3Vic2NyaXB0aW9uID8/PSBfc291cmNlLmxpc3RlbihfY29udHJvbGxlci5hZGQsCiAgICAgICAgb25FcnJvcjogX2NvbnRyb2xsZXIuYWRkRXJyb3IsIG9uRG9uZTogX2NvbnRyb2xsZXIuY2xvc2UpOwogICAgY2FuY2VsT25FcnJvciA9IGlkZW50aWNhbCh0cnVlLCBjYW5jZWxPbkVycm9yKTsKICAgIHJldHVybiBfY29udHJvbGxlci5fc3Vic2NyaWJlKG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKTsKICB9CgogIHZvaWQgX29uQ2FuY2VsKCkgewogICAgYm9vbCBzaHV0ZG93biA9IChfY29udHJvbGxlciA9PSBudWxsKSB8fCBfY29udHJvbGxlci5pc0Nsb3NlZDsKICAgIGlmIChfb25DYW5jZWxIYW5kbGVyICE9IG51bGwpIHsKICAgICAgX3pvbmUucnVuVW5hcnkoCiAgICAgICAgICBfb25DYW5jZWxIYW5kbGVyLCBuZXcgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbldyYXBwZXI8VD4odGhpcykpOwogICAgfQogICAgaWYgKHNodXRkb3duKSB7CiAgICAgIGlmIChfc3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgICBfc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgICAgIF9zdWJzY3JpcHRpb24gPSBudWxsOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9vbkxpc3RlbigpIHsKICAgIGlmIChfb25MaXN0ZW5IYW5kbGVyICE9IG51bGwpIHsKICAgICAgX3pvbmUucnVuVW5hcnkoCiAgICAgICAgICBfb25MaXN0ZW5IYW5kbGVyLCBuZXcgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbldyYXBwZXI8VD4odGhpcykpOwogICAgfQogIH0KCiAgLy8gTWV0aG9kcyBjYWxsZWQgZnJvbSBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uV3JhcHBlci4KICB2b2lkIF9jYW5jZWxTdWJzY3JpcHRpb24oKSB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiA9PSBudWxsKSByZXR1cm47CiAgICAvLyBDYWxsZWQgYnkgW19jb250cm9sbGVyXSB3aGVuIGl0IGhhcyBubyBzdWJzY3JpYmVycyBsZWZ0LgogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbiA9IF9zdWJzY3JpcHRpb247CiAgICBfc3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIF9jb250cm9sbGVyID0gbnVsbDsgLy8gTWFya3MgdGhlIHN0cmVhbSBhcyBubyBsb25nZXIgbGlzdGVuYWJsZS4KICAgIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICB9CgogIHZvaWQgX3BhdXNlU3Vic2NyaXB0aW9uKEZ1dHVyZSByZXN1bWVTaWduYWwpIHsKICAgIGlmIChfc3Vic2NyaXB0aW9uID09IG51bGwpIHJldHVybjsKICAgIF9zdWJzY3JpcHRpb24ucGF1c2UocmVzdW1lU2lnbmFsKTsKICB9CgogIHZvaWQgX3Jlc3VtZVN1YnNjcmlwdGlvbigpIHsKICAgIGlmIChfc3Vic2NyaXB0aW9uID09IG51bGwpIHJldHVybjsKICAgIF9zdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgfQoKICBib29sIGdldCBfaXNTdWJzY3JpcHRpb25QYXVzZWQgewogICAgaWYgKF9zdWJzY3JpcHRpb24gPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9zdWJzY3JpcHRpb24uaXNQYXVzZWQ7CiAgfQp9CgovKioKICogV3JhcHBlciBmb3Igc3Vic2NyaXB0aW9uIHRoYXQgZGlzYWxsb3dzIGNoYW5naW5nIGhhbmRsZXJzLgogKi8KY2xhc3MgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbldyYXBwZXI8VD4gaW1wbGVtZW50cyBTdHJlYW1TdWJzY3JpcHRpb248VD4gewogIGZpbmFsIF9Bc0Jyb2FkY2FzdFN0cmVhbSBfc3RyZWFtOwoKICBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uV3JhcHBlcih0aGlzLl9zdHJlYW0pOwoKICB2b2lkIG9uRGF0YSh2b2lkIGhhbmRsZURhdGEoVCBkYXRhKSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkNhbm5vdCBjaGFuZ2UgaGFuZGxlcnMgb2YgYXNCcm9hZGNhc3RTdHJlYW0gc291cmNlIHN1YnNjcmlwdGlvbi4iKTsKICB9CgogIHZvaWQgb25FcnJvcihGdW5jdGlvbiBoYW5kbGVFcnJvcikgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkNhbm5vdCBjaGFuZ2UgaGFuZGxlcnMgb2YgYXNCcm9hZGNhc3RTdHJlYW0gc291cmNlIHN1YnNjcmlwdGlvbi4iKTsKICB9CgogIHZvaWQgb25Eb25lKHZvaWQgaGFuZGxlRG9uZSgpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiQ2Fubm90IGNoYW5nZSBoYW5kbGVycyBvZiBhc0Jyb2FkY2FzdFN0cmVhbSBzb3VyY2Ugc3Vic2NyaXB0aW9uLiIpOwogIH0KCiAgdm9pZCBwYXVzZShbRnV0dXJlIHJlc3VtZVNpZ25hbF0pIHsKICAgIF9zdHJlYW0uX3BhdXNlU3Vic2NyaXB0aW9uKHJlc3VtZVNpZ25hbCk7CiAgfQoKICB2b2lkIHJlc3VtZSgpIHsKICAgIF9zdHJlYW0uX3Jlc3VtZVN1YnNjcmlwdGlvbigpOwogIH0KCiAgRnV0dXJlIGNhbmNlbCgpIHsKICAgIF9zdHJlYW0uX2NhbmNlbFN1YnNjcmlwdGlvbigpOwogICAgcmV0dXJuIEZ1dHVyZS5fbnVsbEZ1dHVyZTsKICB9CgogIGJvb2wgZ2V0IGlzUGF1c2VkIHsKICAgIHJldHVybiBfc3RyZWFtLl9pc1N1YnNjcmlwdGlvblBhdXNlZDsKICB9CgogIEZ1dHVyZTxFPiBhc0Z1dHVyZTxFPihbRSBmdXR1cmVWYWx1ZV0pIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJDYW5ub3QgY2hhbmdlIGhhbmRsZXJzIG9mIGFzQnJvYWRjYXN0U3RyZWFtIHNvdXJjZSBzdWJzY3JpcHRpb24uIik7CiAgfQp9CgovKioKICogU2ltcGxlIGltcGxlbWVudGF0aW9uIG9mIFtTdHJlYW1JdGVyYXRvcl0uCiAqCiAqIFBhdXNlcyB0aGUgc3RyZWFtIGJldHdlZW4gY2FsbHMgdG8gW21vdmVOZXh0XS4KICovCmNsYXNzIF9TdHJlYW1JdGVyYXRvcjxUPiBpbXBsZW1lbnRzIFN0cmVhbUl0ZXJhdG9yPFQ+IHsKICAvLyBUaGUgc3RyZWFtIGl0ZXJhdG9yIGlzIGFsd2F5cyBpbiBvbmUgb2YgZm91ciBzdGF0ZXMuCiAgLy8gVGhlIHZhbHVlIG9mIHRoZSBbX3N0YXRlRGF0YV0gZmllbGQgZGVwZW5kcyBvbiB0aGUgc3RhdGUuCiAgLy8KICAvLyBXaGVuIGBfc3Vic2NyaXB0aW9uID09IG51bGxgIGFuZCBgX3N0YXRlRGF0YSAhPSBudWxsYDoKICAvLyBUaGUgc3RyZWFtIGl0ZXJhdG9yIGhhcyBiZWVuIGNyZWF0ZWQsIGJ1dCBbbW92ZU5leHRdIGhhcyBub3QgYmVlbiBjYWxsZWQKICAvLyB5ZXQuIFRoZSBbX3N0YXRlRGF0YV0gZmllbGQgY29udGFpbnMgdGhlIHN0cmVhbSB0byBsaXN0ZW4gdG8gb24gdGhlIGZpcnN0CiAgLy8gY2FsbCB0byBbbW92ZU5leHRdIGFuZCBbY3VycmVudF0gcmV0dXJucyBgbnVsbGAuCiAgLy8KICAvLyBXaGVuIGBfc3Vic2NyaXB0aW9uICE9IG51bGxgIGFuZCBgIV9pc1BhdXNlZGA6CiAgLy8gVGhlIHVzZXIgaGFzIGNhbGxlZCBbbW92ZU5leHRdIGFuZCB0aGUgaXRlcmF0b3IgaXMgd2FpdGluZyBmb3IgdGhlIG5leHQKICAvLyBldmVudC4gVGhlIFtfc3RhdGVEYXRhXSBmaWVsZCBjb250YWlucyB0aGUgW19GdXR1cmVdIHJldHVybmVkIGJ5IHRoZQogIC8vIFtfbW92ZU5leHRdIGNhbGwgYW5kIFtjdXJyZW50XSByZXR1cm5zIGBudWxsLmAKICAvLwogIC8vIFdoZW4gYF9zdWJzY3JpcHRpb24gIT0gbnVsbGAgYW5kIGBfaXNQYXVzZWRgOgogIC8vIFRoZSBtb3N0IHJlY2VudCBjYWxsIHRvIFttb3ZlTmV4dF0gaGFzIGNvbXBsZXRlZCB3aXRoIGEgYHRydWVgIHZhbHVlCiAgLy8gYW5kIFtjdXJyZW50XSBwcm92aWRlcyB0aGUgdmFsdWUgb2YgdGhlIGRhdGEgZXZlbnQuCiAgLy8gVGhlIFtfc3RhdGVEYXRhXSBmaWVsZCBjb250YWlucyB0aGUgW2N1cnJlbnRdIHZhbHVlLgogIC8vCiAgLy8gV2hlbiBgX3N1YnNjcmlwdGlvbiA9PSBudWxsYCBhbmQgYF9zdGF0ZURhdGEgPT0gbnVsbGA6CiAgLy8gVGhlIHN0cmVhbSBoYXMgY29tcGxldGVkIG9yIGJlZW4gY2FuY2VsZWQgdXNpbmcgW2NhbmNlbF0uCiAgLy8gVGhlIHN0cmVhbSBjb21wbGV0ZXMgb24gZWl0aGVyIGEgZG9uZSBldmVudCBvciBhbiBlcnJvciBldmVudC4KICAvLyBUaGUgbGFzdCBjYWxsIHRvIFttb3ZlTmV4dF0gaGFzIGNvbXBsZXRlZCB3aXRoIGBmYWxzZWAgYW5kIFtjdXJyZW50XQogIC8vIHJldHVybnMgYG51bGxgLgoKICAvLy8gU3Vic2NyaXB0aW9uIGJlaW5nIGxpc3RlbmVkIHRvLgogIC8vLwogIC8vLyBTZXQgdG8gYG51bGxgIHdoZW4gdGhlIHN0cmVhbSBzdWJzY3JpcHRpb24gaXMgZG9uZSBvciBjYW5jZWxlZC4KICBTdHJlYW1TdWJzY3JpcHRpb24gX3N1YnNjcmlwdGlvbjsKCiAgLy8vIERhdGEgdmFsdWUgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IHN0YXRlLgogIC8vLwogIC8vLyBCZWZvcmUgZmlyc3QgY2FsbCB0byBbbW92ZU5leHRdOiBUaGUgc3RyZWFtIHRvIGxpc3RlbiB0by4KICAvLy8KICAvLy8gQWZ0ZXIgY2FsbGluZyBbbW92ZU5leHRdIGJ1dCBiZWZvcmUgdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXM6CiAgLy8vIFRoZSByZXR1cm5lZCBmdXR1cmUuCiAgLy8vCiAgLy8vIEFmdGVyIGNhbGxpbmcgW21vdmVOZXh0XSBhbmQgdGhlIHJldHVybmVkIGZ1dHVyZSBoYXMgY29tcGxldGVkCiAgLy8vIHdpdGggYHRydWVgOiBUaGUgdmFsdWUgb2YgW2N1cnJlbnRdLgogIC8vLwogIC8vLyBBZnRlciBjYWxsaW5nIFttb3ZlTmV4dF0gYW5kIHRoZSByZXR1cm5lZCBmdXR1cmUgaGFzIGNvbXBsZXRlZAogIC8vLyB3aXRoIGBmYWxzZWAsIG9yIGFmdGVyIGNhbGxpbmcgW2NhbmNlbF06IGBudWxsYC4KICBPYmplY3QgX3N0YXRlRGF0YTsKCiAgLy8vIFdoZXRoZXIgdGhlIGl0ZXJhdG9yIGlzIGJldHdlZW4gY2FsbHMgdG8gYG1vdmVOZXh0YC4KICAvLy8gVGhpcyB3aWxsIHVzdWFsbHkgY2F1c2UgdGhlIFtfc3Vic2NyaXB0aW9uXSB0byBiZSBwYXVzZWQsIGJ1dCBhcyBhbgogIC8vLyBvcHRpbWl6YXRpb24sIHdlIG9ubHkgcGF1c2UgYWZ0ZXIgdGhlIFttb3ZlTmV4dF0gZnV0dXJlIGhhcyBiZWVuCiAgLy8vIGNvbXBsZXRlZC4KICBib29sIF9pc1BhdXNlZCA9IGZhbHNlOwoKICBfU3RyZWFtSXRlcmF0b3IoZmluYWwgU3RyZWFtPFQ+IHN0cmVhbSkKICAgICAgOiBfc3RhdGVEYXRhID0gc3RyZWFtID8/ICh0aHJvdyBBcmd1bWVudEVycm9yLm5vdE51bGwoInN0cmVhbSIpKTsKCiAgVCBnZXQgY3VycmVudCB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiAhPSBudWxsICYmIF9pc1BhdXNlZCkgewogICAgICByZXR1cm4gX3N0YXRlRGF0YTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgRnV0dXJlPGJvb2w+IG1vdmVOZXh0KCkgewogICAgaWYgKF9zdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICBpZiAoX2lzUGF1c2VkKSB7CiAgICAgICAgdmFyIGZ1dHVyZSA9IG5ldyBfRnV0dXJlPGJvb2w+KCk7CiAgICAgICAgX3N0YXRlRGF0YSA9IGZ1dHVyZTsKICAgICAgICBfaXNQYXVzZWQgPSBmYWxzZTsKICAgICAgICBfc3Vic2NyaXB0aW9uLnJlc3VtZSgpOwogICAgICAgIHJldHVybiBmdXR1cmU7CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIkFscmVhZHkgd2FpdGluZyBmb3IgbmV4dC4iKTsKICAgIH0KICAgIHJldHVybiBfaW5pdGlhbGl6ZU9yRG9uZSgpOwogIH0KCiAgLy8vIENhbGxlZCBpZiB0aGVyZSBpcyBubyBhY3RpdmUgc3Vic2NyaXB0aW9uIHdoZW4gW21vdmVOZXh0XSBpcyBjYWxsZWQuCiAgLy8vCiAgLy8vIEVpdGhlciBzdGFydHMgbGlzdGVuaW5nIG9uIHRoZSBzdHJlYW0gaWYgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCB0bwogIC8vLyBbbW92ZU5leHRdLCBvciByZXR1cm5zIGEgYGZhbHNlYCBmdXR1cmUgYmVjYXVzZSB0aGUgc3RyZWFtIGhhcyBhbHJlYWR5CiAgLy8vIGVuZGVkLgogIEZ1dHVyZTxib29sPiBfaW5pdGlhbGl6ZU9yRG9uZSgpIHsKICAgIGFzc2VydChfc3Vic2NyaXB0aW9uID09IG51bGwpOwogICAgdmFyIHN0YXRlRGF0YSA9IF9zdGF0ZURhdGE7CiAgICBpZiAoc3RhdGVEYXRhICE9IG51bGwpIHsKICAgICAgU3RyZWFtPFQ+IHN0cmVhbSA9IHN0YXRlRGF0YTsKICAgICAgX3N1YnNjcmlwdGlvbiA9IHN0cmVhbS5saXN0ZW4oX29uRGF0YSwKICAgICAgICAgIG9uRXJyb3I6IF9vbkVycm9yLCBvbkRvbmU6IF9vbkRvbmUsIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgICB2YXIgZnV0dXJlID0gbmV3IF9GdXR1cmU8Ym9vbD4oKTsKICAgICAgX3N0YXRlRGF0YSA9IGZ1dHVyZTsKICAgICAgcmV0dXJuIGZ1dHVyZTsKICAgIH0KICAgIHJldHVybiBGdXR1cmUuX2ZhbHNlRnV0dXJlOwogIH0KCiAgRnV0dXJlIGNhbmNlbCgpIHsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBfc3Vic2NyaXB0aW9uOwogICAgT2JqZWN0IHN0YXRlRGF0YSA9IF9zdGF0ZURhdGE7CiAgICBfc3RhdGVEYXRhID0gbnVsbDsKICAgIGlmIChzdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICBfc3Vic2NyaXB0aW9uID0gbnVsbDsKICAgICAgaWYgKCFfaXNQYXVzZWQpIHsKICAgICAgICBfRnV0dXJlPGJvb2w+IGZ1dHVyZSA9IHN0YXRlRGF0YTsKICAgICAgICBmdXR1cmUuX2FzeW5jQ29tcGxldGUoZmFsc2UpOwogICAgICB9CiAgICAgIHJldHVybiBzdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICB9CiAgICByZXR1cm4gRnV0dXJlLl9udWxsRnV0dXJlOwogIH0KCiAgdm9pZCBfb25EYXRhKFQgZGF0YSkgewogICAgYXNzZXJ0KF9zdWJzY3JpcHRpb24gIT0gbnVsbCAmJiAhX2lzUGF1c2VkKTsKICAgIF9GdXR1cmU8Ym9vbD4gbW92ZU5leHRGdXR1cmUgPSBfc3RhdGVEYXRhOwogICAgX3N0YXRlRGF0YSA9IGRhdGE7CiAgICBfaXNQYXVzZWQgPSB0cnVlOwogICAgbW92ZU5leHRGdXR1cmUuX2NvbXBsZXRlKHRydWUpOwogICAgaWYgKF9zdWJzY3JpcHRpb24gIT0gbnVsbCAmJiBfaXNQYXVzZWQpIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICB9CgogIHZvaWQgX29uRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgYXNzZXJ0KF9zdWJzY3JpcHRpb24gIT0gbnVsbCAmJiAhX2lzUGF1c2VkKTsKICAgIF9GdXR1cmU8Ym9vbD4gbW92ZU5leHRGdXR1cmUgPSBfc3RhdGVEYXRhOwogICAgX3N1YnNjcmlwdGlvbiA9IG51bGw7CiAgICBfc3RhdGVEYXRhID0gbnVsbDsKICAgIG1vdmVOZXh0RnV0dXJlLl9jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgX29uRG9uZSgpIHsKICAgIGFzc2VydChfc3Vic2NyaXB0aW9uICE9IG51bGwgJiYgIV9pc1BhdXNlZCk7CiAgICBfRnV0dXJlPGJvb2w+IG1vdmVOZXh0RnV0dXJlID0gX3N0YXRlRGF0YTsKICAgIF9zdWJzY3JpcHRpb24gPSBudWxsOwogICAgX3N0YXRlRGF0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bmM7CgovKiogUnVucyB1c2VyIGNvZGUgYW5kIHRha2VzIGFjdGlvbnMgZGVwZW5kaW5nIG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gKi8KX3J1blVzZXJDb2RlPFQ+KAogICAgVCB1c2VyQ29kZSgpLCBvblN1Y2Nlc3MoVCB2YWx1ZSksIG9uRXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkpIHsKICB0cnkgewogICAgb25TdWNjZXNzKHVzZXJDb2RlKCkpOwogIH0gY2F0Y2ggKGUsIHMpIHsKICAgIEFzeW5jRXJyb3IgcmVwbGFjZW1lbnQgPSBab25lLmN1cnJlbnQuZXJyb3JDYWxsYmFjayhlLCBzKTsKICAgIGlmIChyZXBsYWNlbWVudCA9PSBudWxsKSB7CiAgICAgIG9uRXJyb3IoZSwgcyk7CiAgICB9IGVsc2UgewogICAgICB2YXIgZXJyb3IgPSBfbm9uTnVsbEVycm9yKHJlcGxhY2VtZW50LmVycm9yKTsKICAgICAgdmFyIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogICAgICBvbkVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIH0KICB9Cn0KCi8qKiBIZWxwZXIgZnVuY3Rpb24gdG8gY2FuY2VsIGEgc3Vic2NyaXB0aW9uIGFuZCB3YWl0IGZvciB0aGUgcG90ZW50aWFsIGZ1dHVyZSwKICBiZWZvcmUgY29tcGxldGluZyB3aXRoIGFuIGVycm9yLiAqLwp2b2lkIF9jYW5jZWxBbmRFcnJvcihTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uLCBfRnV0dXJlIGZ1dHVyZSwgZXJyb3IsCiAgICBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICB2YXIgY2FuY2VsRnV0dXJlID0gc3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogIGlmIChjYW5jZWxGdXR1cmUgIT0gbnVsbCAmJiAhaWRlbnRpY2FsKGNhbmNlbEZ1dHVyZSwgRnV0dXJlLl9udWxsRnV0dXJlKSkgewogICAgY2FuY2VsRnV0dXJlLndoZW5Db21wbGV0ZSgoKSA9PiBmdXR1cmUuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpKTsKICB9IGVsc2UgewogICAgZnV0dXJlLl9jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9Cn0KCnZvaWQgX2NhbmNlbEFuZEVycm9yV2l0aFJlcGxhY2VtZW50KFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24sCiAgICBfRnV0dXJlIGZ1dHVyZSwgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogIEFzeW5jRXJyb3IgcmVwbGFjZW1lbnQgPSBab25lLmN1cnJlbnQuZXJyb3JDYWxsYmFjayhlcnJvciwgc3RhY2tUcmFjZSk7CiAgaWYgKHJlcGxhY2VtZW50ICE9IG51bGwpIHsKICAgIGVycm9yID0gX25vbk51bGxFcnJvcihyZXBsYWNlbWVudC5lcnJvcik7CiAgICBzdGFja1RyYWNlID0gcmVwbGFjZW1lbnQuc3RhY2tUcmFjZTsKICB9CiAgX2NhbmNlbEFuZEVycm9yKHN1YnNjcmlwdGlvbiwgZnV0dXJlLCBlcnJvciwgc3RhY2tUcmFjZSk7Cn0KCnR5cGVkZWYgdm9pZCBfRXJyb3JDYWxsYmFjayhlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKTsKCi8qKiBIZWxwZXIgZnVuY3Rpb24gdG8gbWFrZSBhbiBvbkVycm9yIGFyZ3VtZW50IHRvIFtfcnVuVXNlckNvZGVdLiAqLwpfRXJyb3JDYWxsYmFjayBfY2FuY2VsQW5kRXJyb3JDbG9zdXJlKAogICAgU3RyZWFtU3Vic2NyaXB0aW9uIHN1YnNjcmlwdGlvbiwgX0Z1dHVyZSBmdXR1cmUpIHsKICByZXR1cm4gKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIF9jYW5jZWxBbmRFcnJvcihzdWJzY3JpcHRpb24sIGZ1dHVyZSwgZXJyb3IsIHN0YWNrVHJhY2UpOwogIH07Cn0KCi8qKiBIZWxwZXIgZnVuY3Rpb24gdG8gY2FuY2VsIGEgc3Vic2NyaXB0aW9uIGFuZCB3YWl0IGZvciB0aGUgcG90ZW50aWFsIGZ1dHVyZSwKICBiZWZvcmUgY29tcGxldGluZyB3aXRoIGEgdmFsdWUuICovCnZvaWQgX2NhbmNlbEFuZFZhbHVlKFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24sIF9GdXR1cmUgZnV0dXJlLCB2YWx1ZSkgewogIHZhciBjYW5jZWxGdXR1cmUgPSBzdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgaWYgKGNhbmNlbEZ1dHVyZSAhPSBudWxsICYmICFpZGVudGljYWwoY2FuY2VsRnV0dXJlLCBGdXR1cmUuX251bGxGdXR1cmUpKSB7CiAgICBjYW5jZWxGdXR1cmUud2hlbkNvbXBsZXRlKCgpID0+IGZ1dHVyZS5fY29tcGxldGUodmFsdWUpKTsKICB9IGVsc2UgewogICAgZnV0dXJlLl9jb21wbGV0ZSh2YWx1ZSk7CiAgfQp9CgovKioKICogQSBbU3RyZWFtXSB0aGF0IGZvcndhcmRzIHN1YnNjcmlwdGlvbnMgdG8gYW5vdGhlciBzdHJlYW0uCiAqCiAqIFRoaXMgc3RyZWFtIGltcGxlbWVudHMgW1N0cmVhbV0sIGJ1dCBmb3J3YXJkcyBhbGwgc3Vic2NyaXB0aW9ucwogKiB0byBhbiB1bmRlcmx5aW5nIHN0cmVhbSwgYW5kIHdyYXBzIHRoZSByZXR1cm5lZCBzdWJzY3JpcHRpb24gdG8KICogbW9kaWZ5IHRoZSBldmVudHMgb24gdGhlIHdheS4KICoKICogVGhpcyBjbGFzcyBpcyBpbnRlbmRlZCBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuCiAqLwphYnN0cmFjdCBjbGFzcyBfRm9yd2FyZGluZ1N0cmVhbTxTLCBUPiBleHRlbmRzIFN0cmVhbTxUPiB7CiAgZmluYWwgU3RyZWFtPFM+IF9zb3VyY2U7CgogIF9Gb3J3YXJkaW5nU3RyZWFtKHRoaXMuX3NvdXJjZSk7CgogIGJvb2wgZ2V0IGlzQnJvYWRjYXN0ID0+IF9zb3VyY2UuaXNCcm9hZGNhc3Q7CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBsaXN0ZW4odm9pZCBvbkRhdGEoVCB2YWx1ZSksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBjYW5jZWxPbkVycm9yID0gaWRlbnRpY2FsKHRydWUsIGNhbmNlbE9uRXJyb3IpOwogICAgcmV0dXJuIF9jcmVhdGVTdWJzY3JpcHRpb24ob25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9jcmVhdGVTdWJzY3JpcHRpb24odm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKSB7CiAgICByZXR1cm4gbmV3IF9Gb3J3YXJkaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFMsIFQ+KAogICAgICAgIHRoaXMsIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKTsKICB9CgogIC8vIE92ZXJyaWRlIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBpbiBzdWJjbGFzc2VzIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3IuCgogIHZvaWQgX2hhbmRsZURhdGEoUyBkYXRhLCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIHNpbmsuX2FkZChkYXRhIGFzIE9iamVjdCk7CiAgfQoKICB2b2lkIF9oYW5kbGVFcnJvcihlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlLCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIHNpbmsuX2FkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgX2hhbmRsZURvbmUoX0V2ZW50U2luazxUPiBzaW5rKSB7CiAgICBzaW5rLl9jbG9zZSgpOwogIH0KfQoKLyoqCiAqIEFic3RyYWN0IHN1cGVyY2xhc3MgZm9yIHN1YnNjcmlwdGlvbnMgdGhhdCBmb3J3YXJkIHRvIG90aGVyIHN1YnNjcmlwdGlvbnMuCiAqLwpjbGFzcyBfRm9yd2FyZGluZ1N0cmVhbVN1YnNjcmlwdGlvbjxTLCBUPgogICAgZXh0ZW5kcyBfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHsKICBmaW5hbCBfRm9yd2FyZGluZ1N0cmVhbTxTLCBUPiBfc3RyZWFtOwoKICBTdHJlYW1TdWJzY3JpcHRpb248Uz4gX3N1YnNjcmlwdGlvbjsKCiAgX0ZvcndhcmRpbmdTdHJlYW1TdWJzY3JpcHRpb24odGhpcy5fc3RyZWFtLCB2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpCiAgICAgIDogc3VwZXIob25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpIHsKICAgIF9zdWJzY3JpcHRpb24gPSBfc3RyZWFtLl9zb3VyY2UKICAgICAgICAubGlzdGVuKF9oYW5kbGVEYXRhLCBvbkVycm9yOiBfaGFuZGxlRXJyb3IsIG9uRG9uZTogX2hhbmRsZURvbmUpOwogIH0KCiAgLy8gX1N0cmVhbVNpbmsgaW50ZXJmYWNlLgogIC8vIFRyYW5zZm9ybWVycyBzZW5kaW5nIG1vcmUgdGhhbiBvbmUgZXZlbnQgaGF2ZSBubyB3YXkgdG8ga25vdyBpZiB0aGUgc3RyZWFtCiAgLy8gaXMgY2FuY2VsZWQgb3IgY2xvc2VkIGFmdGVyIHRoZSBmaXJzdCwgc28gd2UganVzdCBpZ25vcmUgcmVtYWluaW5nIGV2ZW50cy4KCiAgdm9pZCBfYWRkKFQgZGF0YSkgewogICAgaWYgKF9pc0Nsb3NlZCkgcmV0dXJuOwogICAgc3VwZXIuX2FkZChkYXRhKTsKICB9CgogIHZvaWQgX2FkZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSByZXR1cm47CiAgICBzdXBlci5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgLy8gU3RyZWFtU3Vic2NyaXB0aW9uIGNhbGxiYWNrcy4KCiAgdm9pZCBfb25QYXVzZSgpIHsKICAgIGlmIChfc3Vic2NyaXB0aW9uID09IG51bGwpIHJldHVybjsKICAgIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICB9CgogIHZvaWQgX29uUmVzdW1lKCkgewogICAgaWYgKF9zdWJzY3JpcHRpb24gPT0gbnVsbCkgcmV0dXJuOwogICAgX3N1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICB9CgogIEZ1dHVyZSBfb25DYW5jZWwoKSB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgIFN0cmVhbVN1YnNjcmlwdGlvbiBzdWJzY3JpcHRpb24gPSBfc3Vic2NyaXB0aW9uOwogICAgICBfc3Vic2NyaXB0aW9uID0gbnVsbDsKICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8gTWV0aG9kcyB1c2VkIGFzIGxpc3RlbmVyIG9uIHNvdXJjZSBzdWJzY3JpcHRpb24uCgogIHZvaWQgX2hhbmRsZURhdGEoUyBkYXRhKSB7CiAgICBfc3RyZWFtLl9oYW5kbGVEYXRhKGRhdGEsIHRoaXMpOwogIH0KCiAgdm9pZCBfaGFuZGxlRXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgX3N0cmVhbS5faGFuZGxlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UsIHRoaXMpOwogIH0KCiAgdm9pZCBfaGFuZGxlRG9uZSgpIHsKICAgIF9zdHJlYW0uX2hhbmRsZURvbmUodGhpcyk7CiAgfQp9CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFN0cmVhbSB0cmFuc2Zvcm1lcnMgdXNlZCBieSB0aGUgZGVmYXVsdCBTdHJlYW0gaW1wbGVtZW50YXRpb24uCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCnR5cGVkZWYgYm9vbCBfUHJlZGljYXRlPFQ+KFQgdmFsdWUpOwoKdm9pZCBfYWRkRXJyb3JXaXRoUmVwbGFjZW1lbnQoX0V2ZW50U2luayBzaW5rLCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGVycm9yLCBzdGFja1RyYWNlKTsKICBpZiAocmVwbGFjZW1lbnQgIT0gbnVsbCkgewogICAgZXJyb3IgPSBfbm9uTnVsbEVycm9yKHJlcGxhY2VtZW50LmVycm9yKTsKICAgIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogIH0KICBzaW5rLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7Cn0KCmNsYXNzIF9XaGVyZVN0cmVhbTxUPiBleHRlbmRzIF9Gb3J3YXJkaW5nU3RyZWFtPFQsIFQ+IHsKICBmaW5hbCBfUHJlZGljYXRlPFQ+IF90ZXN0OwoKICBfV2hlcmVTdHJlYW0oU3RyZWFtPFQ+IHNvdXJjZSwgYm9vbCB0ZXN0KFQgdmFsdWUpKQogICAgICA6IF90ZXN0ID0gdGVzdCwKICAgICAgICBzdXBlcihzb3VyY2UpOwoKICB2b2lkIF9oYW5kbGVEYXRhKFQgaW5wdXRFdmVudCwgX0V2ZW50U2luazxUPiBzaW5rKSB7CiAgICBib29sIHNhdGlzZmllczsKICAgIHRyeSB7CiAgICAgIHNhdGlzZmllcyA9IF90ZXN0KGlucHV0RXZlbnQpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBfYWRkRXJyb3JXaXRoUmVwbGFjZW1lbnQoc2luaywgZSwgcyk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChzYXRpc2ZpZXMpIHsKICAgICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogICAgfQogIH0KfQoKdHlwZWRlZiBUIF9UcmFuc2Zvcm1hdGlvbjxTLCBUPihTIHZhbHVlKTsKCi8qKgogKiBBIHN0cmVhbSBwaXBlIHRoYXQgY29udmVydHMgZGF0YSBldmVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSBvbi4KICovCmNsYXNzIF9NYXBTdHJlYW08UywgVD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbTxTLCBUPiB7CiAgZmluYWwgX1RyYW5zZm9ybWF0aW9uPFMsIFQ+IF90cmFuc2Zvcm07CgogIF9NYXBTdHJlYW0oU3RyZWFtPFM+IHNvdXJjZSwgVCB0cmFuc2Zvcm0oUyBldmVudCkpCiAgICAgIDogdGhpcy5fdHJhbnNmb3JtID0gdHJhbnNmb3JtLAogICAgICAgIHN1cGVyKHNvdXJjZSk7CgogIHZvaWQgX2hhbmRsZURhdGEoUyBpbnB1dEV2ZW50LCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIFQgb3V0cHV0RXZlbnQ7CiAgICB0cnkgewogICAgICBvdXRwdXRFdmVudCA9IF90cmFuc2Zvcm0oaW5wdXRFdmVudCk7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIF9hZGRFcnJvcldpdGhSZXBsYWNlbWVudChzaW5rLCBlLCBzKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgc2luay5fYWRkKG91dHB1dEV2ZW50KTsKICB9Cn0KCi8qKgogKiBBIHN0cmVhbSBwaXBlIHRoYXQgY29udmVydHMgZGF0YSBldmVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSBvbi4KICovCmNsYXNzIF9FeHBhbmRTdHJlYW08UywgVD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbTxTLCBUPiB7CiAgZmluYWwgX1RyYW5zZm9ybWF0aW9uPFMsIEl0ZXJhYmxlPFQ+PiBfZXhwYW5kOwoKICBfRXhwYW5kU3RyZWFtKFN0cmVhbTxTPiBzb3VyY2UsIEl0ZXJhYmxlPFQ+IGV4cGFuZChTIGV2ZW50KSkKICAgICAgOiB0aGlzLl9leHBhbmQgPSBleHBhbmQsCiAgICAgICAgc3VwZXIoc291cmNlKTsKCiAgdm9pZCBfaGFuZGxlRGF0YShTIGlucHV0RXZlbnQsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgdHJ5IHsKICAgICAgZm9yIChUIHZhbHVlIGluIF9leHBhbmQoaW5wdXRFdmVudCkpIHsKICAgICAgICBzaW5rLl9hZGQodmFsdWUpOwogICAgICB9CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIC8vIElmIGVpdGhlciBfZXhwYW5kIG9yIGl0ZXJhdGluZyB0aGUgZ2VuZXJhdGVkIGl0ZXJhdG9yIHRocm93cywKICAgICAgLy8gd2UgYWJvcnQgdGhlIGl0ZXJhdGlvbi4KICAgICAgX2FkZEVycm9yV2l0aFJlcGxhY2VtZW50KHNpbmssIGUsIHMpOwogICAgfQogIH0KfQoKdHlwZWRlZiBib29sIF9FcnJvclRlc3QoZXJyb3IpOwoKLyoqCiAqIEEgc3RyZWFtIHBpcGUgdGhhdCBjb252ZXJ0cyBvciBkaXNwb3NlcyBlcnJvciBldmVudHMKICogYmVmb3JlIHBhc3NpbmcgdGhlbSBvbi4KICovCmNsYXNzIF9IYW5kbGVFcnJvclN0cmVhbTxUPiBleHRlbmRzIF9Gb3J3YXJkaW5nU3RyZWFtPFQsIFQ+IHsKICBmaW5hbCBGdW5jdGlvbiBfdHJhbnNmb3JtOwogIGZpbmFsIF9FcnJvclRlc3QgX3Rlc3Q7CgogIF9IYW5kbGVFcnJvclN0cmVhbShTdHJlYW08VD4gc291cmNlLCBGdW5jdGlvbiBvbkVycm9yLCBib29sIHRlc3QoZXJyb3IpKQogICAgICA6IHRoaXMuX3RyYW5zZm9ybSA9IG9uRXJyb3IsCiAgICAgICAgdGhpcy5fdGVzdCA9IHRlc3QsCiAgICAgICAgc3VwZXIoc291cmNlKTsKCiAgdm9pZCBfaGFuZGxlRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgYm9vbCBtYXRjaGVzID0gdHJ1ZTsKICAgIGlmIChfdGVzdCAhPSBudWxsKSB7CiAgICAgIHRyeSB7CiAgICAgICAgbWF0Y2hlcyA9IF90ZXN0KGVycm9yKTsKICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgIF9hZGRFcnJvcldpdGhSZXBsYWNlbWVudChzaW5rLCBlLCBzKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgIGlmIChtYXRjaGVzKSB7CiAgICAgIHRyeSB7CiAgICAgICAgX2ludm9rZUVycm9ySGFuZGxlcihfdHJhbnNmb3JtLCBlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKGUsIGVycm9yKSkgewogICAgICAgICAgc2luay5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfYWRkRXJyb3JXaXRoUmVwbGFjZW1lbnQoc2luaywgZSwgcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgc2luay5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgfQogIH0KfQoKY2xhc3MgX1Rha2VTdHJlYW08VD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbTxULCBUPiB7CiAgZmluYWwgaW50IF9jb3VudDsKCiAgX1Rha2VTdHJlYW0oU3RyZWFtPFQ+IHNvdXJjZSwgaW50IGNvdW50KQogICAgICA6IHRoaXMuX2NvdW50ID0gY291bnQsCiAgICAgICAgc3VwZXIoc291cmNlKSB7CiAgICAvLyBUaGlzIHRlc3QgaXMgZG9uZSBlYXJseSB0byBhdm9pZCBoYW5kbGluZyBhbiBhc3luYyBlcnJvcgogICAgLy8gaW4gdGhlIF9oYW5kbGVEYXRhIG1ldGhvZC4KICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGNvdW50LCAiY291bnQiKTsKICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBfY3JlYXRlU3Vic2NyaXB0aW9uKHZvaWQgb25EYXRhKFQgZGF0YSksCiAgICAgIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikgewogICAgaWYgKF9jb3VudCA9PSAwKSB7CiAgICAgIF9zb3VyY2UubGlzdGVuKG51bGwpLmNhbmNlbCgpOwogICAgICByZXR1cm4gbmV3IF9Eb25lU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KG9uRG9uZSk7CiAgICB9CiAgICByZXR1cm4gbmV3IF9TdGF0ZVN0cmVhbVN1YnNjcmlwdGlvbjxUPigKICAgICAgICB0aGlzLCBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvciwgX2NvdW50KTsKICB9CgogIHZvaWQgX2hhbmRsZURhdGEoVCBpbnB1dEV2ZW50LCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIF9TdGF0ZVN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBzaW5rOwogICAgaW50IGNvdW50ID0gc3Vic2NyaXB0aW9uLl9jb3VudDsKICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogICAgICBjb3VudCAtPSAxOwogICAgICBzdWJzY3JpcHRpb24uX2NvdW50ID0gY291bnQ7CiAgICAgIGlmIChjb3VudCA9PSAwKSB7CiAgICAgICAgLy8gQ2xvc2luZyBhbHNvIHVuc3Vic2NyaWJlcyBhbGwgc3Vic2NyaWJlcnMsIHdoaWNoIHVuc3Vic2NyaWJlcwogICAgICAgIC8vIHRoaXMgZnJvbSBzb3VyY2UuCiAgICAgICAgc2luay5fY2xvc2UoKTsKICAgICAgfQogICAgfQogIH0KfQoKLyoqCiAqIEEgW19Gb3J3YXJkaW5nU3RyZWFtU3Vic2NyaXB0aW9uXSB3aXRoIG9uZSBleHRyYSBzdGF0ZSBmaWVsZC4KICoKICogVXNlIGJ5IHNldmVyYWwgZGlmZmVyZW50IGNsYXNzZXMsIHN0b3JpbmcgYW4gaW50ZWdlciwgYm9vbCBvciBnZW5lcmFsLgogKi8KY2xhc3MgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IGV4dGVuZHMgX0ZvcndhcmRpbmdTdHJlYW1TdWJzY3JpcHRpb248VCwgVD4gewogIC8vIFJhdyBzdGF0ZSBmaWVsZC4gVHlwZWQgYWNjZXNzIHByb3ZpZGVkIGJ5IGdldHRlcnMgYW5kIHNldHRlcnMgYmVsb3cuCiAgdmFyIF9zaGFyZWRTdGF0ZTsKCiAgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uKF9Gb3J3YXJkaW5nU3RyZWFtPFQsIFQ+IHN0cmVhbSwgdm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yLCB0aGlzLl9zaGFyZWRTdGF0ZSkKICAgICAgOiBzdXBlcihzdHJlYW0sIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yKTsKCiAgYm9vbCBnZXQgX2ZsYWcgPT4gX3NoYXJlZFN0YXRlOwogIHZvaWQgc2V0IF9mbGFnKGJvb2wgZmxhZykgewogICAgX3NoYXJlZFN0YXRlID0gZmxhZzsKICB9CgogIGludCBnZXQgX2NvdW50ID0+IF9zaGFyZWRTdGF0ZTsKICB2b2lkIHNldCBfY291bnQoaW50IGNvdW50KSB7CiAgICBfc2hhcmVkU3RhdGUgPSBjb3VudDsKICB9CgogIE9iamVjdCBnZXQgX3ZhbHVlID0+IF9zaGFyZWRTdGF0ZTsKICB2b2lkIHNldCBfdmFsdWUoT2JqZWN0IHZhbHVlKSB7CiAgICBfc2hhcmVkU3RhdGUgPSB2YWx1ZTsKICB9Cn0KCmNsYXNzIF9UYWtlV2hpbGVTdHJlYW08VD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbTxULCBUPiB7CiAgZmluYWwgX1ByZWRpY2F0ZTxUPiBfdGVzdDsKCiAgX1Rha2VXaGlsZVN0cmVhbShTdHJlYW08VD4gc291cmNlLCBib29sIHRlc3QoVCB2YWx1ZSkpCiAgICAgIDogdGhpcy5fdGVzdCA9IHRlc3QsCiAgICAgICAgc3VwZXIoc291cmNlKTsKCiAgdm9pZCBfaGFuZGxlRGF0YShUIGlucHV0RXZlbnQsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgYm9vbCBzYXRpc2ZpZXM7CiAgICB0cnkgewogICAgICBzYXRpc2ZpZXMgPSBfdGVzdChpbnB1dEV2ZW50KTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgX2FkZEVycm9yV2l0aFJlcGxhY2VtZW50KHNpbmssIGUsIHMpOwogICAgICAvLyBUaGUgdGVzdCBkaWRuJ3Qgc2F5IHRydWUuIERpZG4ndCBzYXkgZmFsc2UgZWl0aGVyLCBidXQgd2Ugc3RvcCBhbnl3YXkuCiAgICAgIHNpbmsuX2Nsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChzYXRpc2ZpZXMpIHsKICAgICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogICAgfSBlbHNlIHsKICAgICAgc2luay5fY2xvc2UoKTsKICAgIH0KICB9Cn0KCmNsYXNzIF9Ta2lwU3RyZWFtPFQ+IGV4dGVuZHMgX0ZvcndhcmRpbmdTdHJlYW08VCwgVD4gewogIGZpbmFsIGludCBfY291bnQ7CgogIF9Ta2lwU3RyZWFtKFN0cmVhbTxUPiBzb3VyY2UsIGludCBjb3VudCkKICAgICAgOiB0aGlzLl9jb3VudCA9IGNvdW50LAogICAgICAgIHN1cGVyKHNvdXJjZSkgewogICAgLy8gVGhpcyB0ZXN0IGlzIGRvbmUgZWFybHkgdG8gYXZvaWQgaGFuZGxpbmcgYW4gYXN5bmMgZXJyb3IKICAgIC8vIGluIHRoZSBfaGFuZGxlRGF0YSBtZXRob2QuCiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChjb3VudCwgImNvdW50Iik7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoY291bnQsICJjb3VudCIpOwogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9jcmVhdGVTdWJzY3JpcHRpb24odm9pZCBvbkRhdGEoVCBkYXRhKSwKICAgICAgRnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKSB7CiAgICByZXR1cm4gbmV3IF9TdGF0ZVN0cmVhbVN1YnNjcmlwdGlvbjxUPigKICAgICAgICB0aGlzLCBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvciwgX2NvdW50KTsKICB9CgogIHZvaWQgX2hhbmRsZURhdGEoVCBpbnB1dEV2ZW50LCBfRXZlbnRTaW5rPFQ+IHNpbmspIHsKICAgIF9TdGF0ZVN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBzaW5rOwogICAgaW50IGNvdW50ID0gc3Vic2NyaXB0aW9uLl9jb3VudDsKICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgc3Vic2NyaXB0aW9uLl9jb3VudCA9IGNvdW50IC0gMTsKICAgICAgcmV0dXJuOwogICAgfQogICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogIH0KfQoKY2xhc3MgX1NraXBXaGlsZVN0cmVhbTxUPiBleHRlbmRzIF9Gb3J3YXJkaW5nU3RyZWFtPFQsIFQ+IHsKICBmaW5hbCBfUHJlZGljYXRlPFQ+IF90ZXN0OwoKICBfU2tpcFdoaWxlU3RyZWFtKFN0cmVhbTxUPiBzb3VyY2UsIGJvb2wgdGVzdChUIHZhbHVlKSkKICAgICAgOiB0aGlzLl90ZXN0ID0gdGVzdCwKICAgICAgICBzdXBlcihzb3VyY2UpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX2NyZWF0ZVN1YnNjcmlwdGlvbih2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpIHsKICAgIHJldHVybiBuZXcgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KAogICAgICAgIHRoaXMsIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yLCBmYWxzZSk7CiAgfQoKICB2b2lkIF9oYW5kbGVEYXRhKFQgaW5wdXRFdmVudCwgX0V2ZW50U2luazxUPiBzaW5rKSB7CiAgICBfU3RhdGVTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uID0gc2luazsKICAgIGJvb2wgaGFzRmFpbGVkID0gc3Vic2NyaXB0aW9uLl9mbGFnOwogICAgaWYgKGhhc0ZhaWxlZCkgewogICAgICBzaW5rLl9hZGQoaW5wdXRFdmVudCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGJvb2wgc2F0aXNmaWVzOwogICAgdHJ5IHsKICAgICAgc2F0aXNmaWVzID0gX3Rlc3QoaW5wdXRFdmVudCk7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIF9hZGRFcnJvcldpdGhSZXBsYWNlbWVudChzaW5rLCBlLCBzKTsKICAgICAgLy8gQSBmYWlsdXJlIHRvIHJldHVybiBhIGJvb2xlYW4gaXMgY29uc2lkZXJlZCAibm90IG1hdGNoaW5nIi4KICAgICAgc3Vic2NyaXB0aW9uLl9mbGFnID0gdHJ1ZTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFzYXRpc2ZpZXMpIHsKICAgICAgc3Vic2NyaXB0aW9uLl9mbGFnID0gdHJ1ZTsKICAgICAgc2luay5fYWRkKGlucHV0RXZlbnQpOwogICAgfQogIH0KfQoKdHlwZWRlZiBib29sIF9FcXVhbGl0eTxUPihUIGEsIFQgYik7CgpjbGFzcyBfRGlzdGluY3RTdHJlYW08VD4gZXh0ZW5kcyBfRm9yd2FyZGluZ1N0cmVhbTxULCBUPiB7CiAgc3RhdGljIGZpbmFsIF9TRU5USU5FTCA9IG5ldyBPYmplY3QoKTsKCiAgZmluYWwgX0VxdWFsaXR5PFQ+IF9lcXVhbHM7CgogIF9EaXN0aW5jdFN0cmVhbShTdHJlYW08VD4gc291cmNlLCBib29sIGVxdWFscyhUIGEsIFQgYikpCiAgICAgIDogX2VxdWFscyA9IGVxdWFscywKICAgICAgICBzdXBlcihzb3VyY2UpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gX2NyZWF0ZVN1YnNjcmlwdGlvbih2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICBGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3IpIHsKICAgIHJldHVybiBuZXcgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KAogICAgICAgIHRoaXMsIG9uRGF0YSwgb25FcnJvciwgb25Eb25lLCBjYW5jZWxPbkVycm9yLCBfU0VOVElORUwpOwogIH0KCiAgdm9pZCBfaGFuZGxlRGF0YShUIGlucHV0RXZlbnQsIF9FdmVudFNpbms8VD4gc2luaykgewogICAgX1N0YXRlU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IHNpbms7CiAgICB2YXIgcHJldmlvdXMgPSBzdWJzY3JpcHRpb24uX3ZhbHVlOwogICAgaWYgKGlkZW50aWNhbChwcmV2aW91cywgX1NFTlRJTkVMKSkgewogICAgICAvLyBGaXJzdCBldmVudC4KICAgICAgc3Vic2NyaXB0aW9uLl92YWx1ZSA9IGlucHV0RXZlbnQ7CiAgICAgIHNpbmsuX2FkZChpbnB1dEV2ZW50KTsKICAgIH0gZWxzZSB7CiAgICAgIFQgcHJldmlvdXNFdmVudCA9IHByZXZpb3VzOwogICAgICBib29sIGlzRXF1YWw7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKF9lcXVhbHMgPT0gbnVsbCkgewogICAgICAgICAgaXNFcXVhbCA9IChwcmV2aW91c0V2ZW50ID09IGlucHV0RXZlbnQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpc0VxdWFsID0gX2VxdWFscyhwcmV2aW91c0V2ZW50LCBpbnB1dEV2ZW50KTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICBfYWRkRXJyb3JXaXRoUmVwbGFjZW1lbnQoc2luaywgZSwgcyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghaXNFcXVhbCkgewogICAgICAgIHNpbmsuX2FkZChpbnB1dEV2ZW50KTsKICAgICAgICBzdWJzY3JpcHRpb24uX3ZhbHVlID0gaW5wdXRFdmVudDsKICAgICAgfQogICAgfQogIH0KfQqB9gBOTjwBFAFJEU8IGxM/HxUNNC8iBgQCAVAmTR0sTk8LLgQCAUU0Sh0uKQQ8AgE7AUYnNyo+BQIBUCVPLE4+Cx0EAgEEPQNDQyEDMQQ7GwEjAS8BNT80SAQBQT00NwQBSgExHwQBSCcEASkTBAIBBE4EKi4pAScBQzs4JEoEARxQUAEWGxYEATgbKAQBIwEUJxsEARUnHAQBFyE3HCQGEQQBNgEdJQQBNDMEARcfBAIBR0JHASUBT0odLikEJQIBOB0BNRYXATcUCiUVLA4GFR0GBAIBKgEEQwQ5KgE1JRcBNxMKLBUsDgYcBAIBBEMEPDEBPx8XATcKLRoIFUchLAYEAgEgAQQ4GwQ+HRoBSyMbFwFPGRkMIBcuEAgGEww8FyMtETAKEAgNKQYEAgE3FAErHRhAIjAEAUE9FyU1Biw/BAE3NSUVHRIjGEkdFwgGBAIBBEEDSgRQShQBUE4/ASIeGQQBIh8aBAElIhoEAgE8HQE5GxcBNxQKJRUsUBUOBhUdDRUGBAIBNxQBKx0YQCIwMQQBQT0sPwQBNzUlFScOBhsEAgE8HQE5GxcBQT0sPgQBNzUpFR0OBhQKJRUsRSEOBhYhHQYEAgElATspAR4BOxoXAUE9LEIEATc1KCoWKB0NIhQMHzMROAoXLhAIFh8qCAYEAgEbZGFydDphc3luYy9zdHJlYW1fcGlwZS5kYXJ0Om9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9hc3luYy9zdHJlYW1fdHJhbnNmb3JtZXJzLmRhcnSmOC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuYXN5bmM7CgovKioKICogV3JhcHMgYW4gW19FdmVudFNpbmtdIHNvIGl0IGV4cG9zZXMgb25seSB0aGUgW0V2ZW50U2lua10gaW50ZXJmYWNlLgogKi8KY2xhc3MgX0V2ZW50U2lua1dyYXBwZXI8VD4gaW1wbGVtZW50cyBFdmVudFNpbms8VD4gewogIF9FdmVudFNpbmsgX3Npbms7CiAgX0V2ZW50U2lua1dyYXBwZXIodGhpcy5fc2luayk7CgogIHZvaWQgYWRkKFQgZGF0YSkgewogICAgX3NpbmsuX2FkZChkYXRhKTsKICB9CgogIHZvaWQgYWRkRXJyb3IoZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBfc2luay5fYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9zaW5rLl9jbG9zZSgpOwogIH0KfQoKLyoqCiAqIEEgU3RyZWFtU3Vic2NyaXB0aW9uIHRoYXQgcGlwZXMgZGF0YSB0aHJvdWdoIGEgc2luay4KICoKICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoaXMgY2xhc3MgdGFrZXMgYSBbX1NpbmtNYXBwZXJdIHdoaWNoIG1hcHMgZnJvbQogKiBbRXZlbnRTaW5rXSB0byBbRXZlbnRTaW5rXS4gVGhlIGlucHV0IHRvIHRoZSBtYXBwZXIgaXMgdGhlIG91dHB1dCBvZgogKiB0aGUgdHJhbnNmb3JtYXRpb24uIFRoZSByZXR1cm5lZCBzaW5rIGlzIHRoZSB0cmFuc2Zvcm1hdGlvbidzIGlucHV0LgogKi8KY2xhc3MgX1NpbmtUcmFuc2Zvcm1lclN0cmVhbVN1YnNjcmlwdGlvbjxTLCBUPgogICAgZXh0ZW5kcyBfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHsKICAvLy8gVGhlIHRyYW5zZm9ybWVyJ3MgaW5wdXQgc2luay4KICBFdmVudFNpbms8Uz4gX3RyYW5zZm9ybWVyU2luazsKCiAgLy8vIFRoZSBzdWJzY3JpcHRpb24gdG8gdGhlIGlucHV0IHN0cmVhbS4KICBTdHJlYW1TdWJzY3JpcHRpb248Uz4gX3N1YnNjcmlwdGlvbjsKCiAgX1NpbmtUcmFuc2Zvcm1lclN0cmVhbVN1YnNjcmlwdGlvbihTdHJlYW08Uz4gc291cmNlLCBfU2lua01hcHBlcjxTLCBUPiBtYXBwZXIsCiAgICAgIHZvaWQgb25EYXRhKFQgZGF0YSksIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikKICAgICAgLy8gV2Ugc2V0IHRoZSBhZGFwdGVyJ3MgdGFyZ2V0IG9ubHkgd2hlbiB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIHNlbmQgZGF0YS4KICAgICAgOiBzdXBlcihvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcikgewogICAgX0V2ZW50U2lua1dyYXBwZXI8VD4gZXZlbnRTaW5rID0gbmV3IF9FdmVudFNpbmtXcmFwcGVyPFQ+KHRoaXMpOwogICAgX3RyYW5zZm9ybWVyU2luayA9IG1hcHBlcihldmVudFNpbmspOwogICAgX3N1YnNjcmlwdGlvbiA9CiAgICAgICAgc291cmNlLmxpc3RlbihfaGFuZGxlRGF0YSwgb25FcnJvcjogX2hhbmRsZUVycm9yLCBvbkRvbmU6IF9oYW5kbGVEb25lKTsKICB9CgogIC8qKiBXaGV0aGVyIHRoaXMgc3Vic2NyaXB0aW9uIGlzIHN0aWxsIHN1YnNjcmliZWQgdG8gaXRzIHNvdXJjZS4gKi8KICBib29sIGdldCBfaXNTdWJzY3JpYmVkID0+IF9zdWJzY3JpcHRpb24gIT0gbnVsbDsKCiAgLy8gX0V2ZW50U2luayBpbnRlcmZhY2UuCgogIC8qKgogICAqIEFkZHMgYW4gZXZlbnQgdG8gdGhpcyBzdWJzY3JpcHRpb25zLgogICAqCiAgICogQ29udHJhcnkgdG8gbm9ybWFsIFtfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uXXMgd2UgbWF5IHJlY2VpdmUKICAgKiBldmVudHMgd2hlbiB0aGUgc3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkLiBSZXBvcnQgdGhlbSBhcyBzdGF0ZQogICAqIGVycm9yLgogICAqLwogIHZvaWQgX2FkZChUIGRhdGEpIHsKICAgIGlmIChfaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbSBpcyBhbHJlYWR5IGNsb3NlZCIpOwogICAgfQogICAgc3VwZXIuX2FkZChkYXRhKTsKICB9CgogIC8qKgogICAqIEFkZHMgYW4gZXJyb3IgZXZlbnQgdG8gdGhpcyBzdWJzY3JpcHRpb25zLgogICAqCiAgICogQ29udHJhcnkgdG8gbm9ybWFsIFtfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uXXMgd2UgbWF5IHJlY2VpdmUKICAgKiBldmVudHMgd2hlbiB0aGUgc3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkLiBSZXBvcnQgdGhlbSBhcyBzdGF0ZQogICAqIGVycm9yLgogICAqLwogIHZvaWQgX2FkZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQiKTsKICAgIH0KICAgIHN1cGVyLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICAvKioKICAgKiBBZGRzIGEgY2xvc2UgZXZlbnQgdG8gdGhpcyBzdWJzY3JpcHRpb25zLgogICAqCiAgICogQ29udHJhcnkgdG8gbm9ybWFsIFtfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uXXMgd2UgbWF5IHJlY2VpdmUKICAgKiBldmVudHMgd2hlbiB0aGUgc3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkLiBSZXBvcnQgdGhlbSBhcyBzdGF0ZQogICAqIGVycm9yLgogICAqLwogIHZvaWQgX2Nsb3NlKCkgewogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkIik7CiAgICB9CiAgICBzdXBlci5fY2xvc2UoKTsKICB9CgogIC8vIF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb24gaG9va3MuCgogIHZvaWQgX29uUGF1c2UoKSB7CiAgICBpZiAoX2lzU3Vic2NyaWJlZCkgX3N1YnNjcmlwdGlvbi5wYXVzZSgpOwogIH0KCiAgdm9pZCBfb25SZXN1bWUoKSB7CiAgICBpZiAoX2lzU3Vic2NyaWJlZCkgX3N1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICB9CgogIEZ1dHVyZSBfb25DYW5jZWwoKSB7CiAgICBpZiAoX2lzU3Vic2NyaWJlZCkgewogICAgICBTdHJlYW1TdWJzY3JpcHRpb24gc3Vic2NyaXB0aW9uID0gX3N1YnNjcmlwdGlvbjsKICAgICAgX3N1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgIHJldHVybiBzdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgX2hhbmRsZURhdGEoUyBkYXRhKSB7CiAgICB0cnkgewogICAgICBfdHJhbnNmb3JtZXJTaW5rLmFkZChkYXRhKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgX2FkZEVycm9yKGUsIHMpOwogICAgfQogIH0KCiAgdm9pZCBfaGFuZGxlRXJyb3IoZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICB0cnkgewogICAgICBfdHJhbnNmb3JtZXJTaW5rLmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgaWYgKGlkZW50aWNhbChlLCBlcnJvcikpIHsKICAgICAgICBfYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICB9IGVsc2UgewogICAgICAgIF9hZGRFcnJvcihlLCBzKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfaGFuZGxlRG9uZSgpIHsKICAgIHRyeSB7CiAgICAgIF9zdWJzY3JpcHRpb24gPSBudWxsOwogICAgICBfdHJhbnNmb3JtZXJTaW5rLmNsb3NlKCk7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIF9hZGRFcnJvcihlLCBzKTsKICAgIH0KICB9Cn0KCnR5cGVkZWYgRXZlbnRTaW5rPFM+IF9TaW5rTWFwcGVyPFMsIFQ+KEV2ZW50U2luazxUPiBvdXRwdXQpOwoKLyoqCiAqIEEgU3RyZWFtVHJhbnNmb3JtZXIgZm9yIFNpbmstbWFwcGVycy4KICoKICogQSBTaW5rLW1hcHBlciB0YWtlcyBhbiBbRXZlbnRTaW5rXSAoaXRzIG91dHB1dCkgYW5kIHJldHVybnMgYW5vdGhlcgogKiBFdmVudFNpbmsgKGl0cyBpbnB1dCkuCiAqCiAqIE5vdGUgdGhhdCB0aGlzIGNsYXNzIGNhbiBiZSBgY29uc3RgLgogKi8KY2xhc3MgX1N0cmVhbVNpbmtUcmFuc2Zvcm1lcjxTLCBUPiBleHRlbmRzIFN0cmVhbVRyYW5zZm9ybWVyQmFzZTxTLCBUPiB7CiAgZmluYWwgX1NpbmtNYXBwZXI8UywgVD4gX3NpbmtNYXBwZXI7CiAgY29uc3QgX1N0cmVhbVNpbmtUcmFuc2Zvcm1lcih0aGlzLl9zaW5rTWFwcGVyKTsKCiAgU3RyZWFtPFQ+IGJpbmQoU3RyZWFtPFM+IHN0cmVhbSkgPT4KICAgICAgbmV3IF9Cb3VuZFNpbmtTdHJlYW08UywgVD4oc3RyZWFtLCBfc2lua01hcHBlcik7Cn0KCi8qKgogKiBUaGUgcmVzdWx0IG9mIGJpbmRpbmcgYSBTdHJlYW1UcmFuc2Zvcm1lciBmb3IgU2luay1tYXBwZXJzLgogKgogKiBJdCBjb250YWlucyB0aGUgYm91bmQgU3RyZWFtIGFuZCB0aGUgc2luay1tYXBwZXIuIE9ubHkgd2hlbiB0aGUgdXNlciBzdGFydHMKICogbGlzdGVuaW5nIHRvIHRoaXMgc3RyZWFtIGlzIHRoZSBzaW5rLW1hcHBlciBpbnZva2VkLiBUaGUgcmVzdWx0IGlzIHVzZWQKICogdG8gY3JlYXRlIGEgU3RyZWFtU3Vic2NyaXB0aW9uIHRoYXQgdHJhbnNmb3JtcyBldmVudHMuCiAqLwpjbGFzcyBfQm91bmRTaW5rU3RyZWFtPFMsIFQ+IGV4dGVuZHMgU3RyZWFtPFQ+IHsKICBmaW5hbCBfU2lua01hcHBlcjxTLCBUPiBfc2lua01hcHBlcjsKICBmaW5hbCBTdHJlYW08Uz4gX3N0cmVhbTsKCiAgYm9vbCBnZXQgaXNCcm9hZGNhc3QgPT4gX3N0cmVhbS5pc0Jyb2FkY2FzdDsKCiAgX0JvdW5kU2lua1N0cmVhbSh0aGlzLl9zdHJlYW0sIHRoaXMuX3NpbmtNYXBwZXIpOwoKICBTdHJlYW1TdWJzY3JpcHRpb248VD4gbGlzdGVuKHZvaWQgb25EYXRhKFQgZXZlbnQpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgY2FuY2VsT25FcnJvciA9IGlkZW50aWNhbCh0cnVlLCBjYW5jZWxPbkVycm9yKTsKICAgIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPQogICAgICAgIG5ldyBfU2lua1RyYW5zZm9ybWVyU3RyZWFtU3Vic2NyaXB0aW9uPFMsIFQ+KAogICAgICAgICAgICBfc3RyZWFtLCBfc2lua01hcHBlciwgb25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpOwogICAgcmV0dXJuIHN1YnNjcmlwdGlvbjsKICB9Cn0KCi8vLyBEYXRhLWhhbmRsZXIgY29taW5nIGZyb20gW1N0cmVhbVRyYW5zZm9ybWVyLmZyb21IYW5kbGVyc10uCnR5cGVkZWYgdm9pZCBfVHJhbnNmb3JtRGF0YUhhbmRsZXI8UywgVD4oUyBkYXRhLCBFdmVudFNpbms8VD4gc2luayk7CgovLy8gRXJyb3ItaGFuZGxlciBjb21pbmcgZnJvbSBbU3RyZWFtVHJhbnNmb3JtZXIuZnJvbUhhbmRsZXJzXS4KdHlwZWRlZiB2b2lkIF9UcmFuc2Zvcm1FcnJvckhhbmRsZXI8VD4oCiAgICBPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSwgRXZlbnRTaW5rPFQ+IHNpbmspOwoKLy8vIERvbmUtaGFuZGxlciBjb21pbmcgZnJvbSBbU3RyZWFtVHJhbnNmb3JtZXIuZnJvbUhhbmRsZXJzXS4KdHlwZWRlZiB2b2lkIF9UcmFuc2Zvcm1Eb25lSGFuZGxlcjxUPihFdmVudFNpbms8VD4gc2luayk7CgovKioKICogV3JhcHMgaGFuZGxlcnMgKGZyb20gW1N0cmVhbVRyYW5zZm9ybWVyLmZyb21IYW5kbGVyc10pIGludG8gYW4gYEV2ZW50U2lua2AuCiAqCiAqIFRoaXMgd2F5IHdlIGNhbiByZXVzZSB0aGUgY29kZSBmcm9tIFtfU3RyZWFtU2lua1RyYW5zZm9ybWVyXS4KICovCmNsYXNzIF9IYW5kbGVyRXZlbnRTaW5rPFMsIFQ+IGltcGxlbWVudHMgRXZlbnRTaW5rPFM+IHsKICBmaW5hbCBfVHJhbnNmb3JtRGF0YUhhbmRsZXI8UywgVD4gX2hhbmRsZURhdGE7CiAgZmluYWwgX1RyYW5zZm9ybUVycm9ySGFuZGxlcjxUPiBfaGFuZGxlRXJyb3I7CiAgZmluYWwgX1RyYW5zZm9ybURvbmVIYW5kbGVyPFQ+IF9oYW5kbGVEb25lOwoKICAvLy8gVGhlIG91dHB1dCBzaW5rIHdoZXJlIHRoZSBoYW5kbGVycyBzaG91bGQgc2VuZCB0aGVpciBkYXRhIGludG8uCiAgRXZlbnRTaW5rPFQ+IF9zaW5rOwoKICBfSGFuZGxlckV2ZW50U2luaygKICAgICAgdGhpcy5faGFuZGxlRGF0YSwgdGhpcy5faGFuZGxlRXJyb3IsIHRoaXMuX2hhbmRsZURvbmUsIHRoaXMuX3NpbmspIHsKICAgIGlmIChfc2luayA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJUaGUgcHJvdmlkZWQgc2luayBtdXN0IG5vdCBiZSBudWxsLiIpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgX2lzQ2xvc2VkID0+IF9zaW5rID09IG51bGw7CgogIHZvaWQgYWRkKFMgZGF0YSkgewogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCJTaW5rIGlzIGNsb3NlZCIpOwogICAgfQogICAgaWYgKF9oYW5kbGVEYXRhICE9IG51bGwpIHsKICAgICAgX2hhbmRsZURhdGEoZGF0YSwgX3NpbmspOwogICAgfSBlbHNlIHsKICAgICAgX3NpbmsuYWRkKGRhdGEgYXMgVCk7CiAgICB9CiAgfQoKICB2b2lkIGFkZEVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIGlmIChfaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcigiU2luayBpcyBjbG9zZWQiKTsKICAgIH0KICAgIGlmIChfaGFuZGxlRXJyb3IgIT0gbnVsbCkgewogICAgICBfaGFuZGxlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UsIF9zaW5rKTsKICAgIH0gZWxzZSB7CiAgICAgIF9zaW5rLmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIH0KICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSByZXR1cm47CiAgICB2YXIgc2luayA9IF9zaW5rOwogICAgX3NpbmsgPSBudWxsOwogICAgaWYgKF9oYW5kbGVEb25lICE9IG51bGwpIHsKICAgICAgX2hhbmRsZURvbmUoc2luayk7CiAgICB9IGVsc2UgewogICAgICBzaW5rLmNsb3NlKCk7CiAgICB9CiAgfQp9CgovKioKICogQSBTdHJlYW1UcmFuc2Zvcm1lciB0aGF0IHRyYW5zZm9ybWVycyBldmVudHMgd2l0aCB0aGUgZ2l2ZW4gaGFuZGxlcnMuCiAqCiAqIE5vdGUgdGhhdCB0aGlzIHRyYW5zZm9ybWVyIGNhbiBvbmx5IGJlIHVzZWQgb25jZS4KICovCmNsYXNzIF9TdHJlYW1IYW5kbGVyVHJhbnNmb3JtZXI8UywgVD4gZXh0ZW5kcyBfU3RyZWFtU2lua1RyYW5zZm9ybWVyPFMsIFQ+IHsKICBfU3RyZWFtSGFuZGxlclRyYW5zZm9ybWVyKAogICAgICB7dm9pZCBoYW5kbGVEYXRhKFMgZGF0YSwgRXZlbnRTaW5rPFQ+IHNpbmspLAogICAgICB2b2lkIGhhbmRsZUVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlLCBFdmVudFNpbms8VD4gc2luayksCiAgICAgIHZvaWQgaGFuZGxlRG9uZShFdmVudFNpbms8VD4gc2luayl9KQogICAgICA6IHN1cGVyKChFdmVudFNpbms8VD4gb3V0cHV0U2luaykgewogICAgICAgICAgcmV0dXJuIG5ldyBfSGFuZGxlckV2ZW50U2luazxTLCBUPigKICAgICAgICAgICAgICBoYW5kbGVEYXRhLCBoYW5kbGVFcnJvciwgaGFuZGxlRG9uZSwgb3V0cHV0U2luayk7CiAgICAgICAgfSk7CgogIFN0cmVhbTxUPiBiaW5kKFN0cmVhbTxTPiBzdHJlYW0pIHsKICAgIHJldHVybiBzdXBlci5iaW5kKHN0cmVhbSk7CiAgfQp9CgovKioKICogQSBTdHJlYW1UcmFuc2Zvcm1lciB0aGF0IG92ZXJyaWRlcyBbU3RyZWFtVHJhbnNmb3JtZXIuYmluZF0gd2l0aCBhIGNhbGxiYWNrLgogKi8KY2xhc3MgX1N0cmVhbUJpbmRUcmFuc2Zvcm1lcjxTLCBUPiBleHRlbmRzIFN0cmVhbVRyYW5zZm9ybWVyQmFzZTxTLCBUPiB7CiAgZmluYWwgU3RyZWFtPFQ+IEZ1bmN0aW9uKFN0cmVhbTxTPikgX2JpbmQ7CiAgX1N0cmVhbUJpbmRUcmFuc2Zvcm1lcih0aGlzLl9iaW5kKTsKCiAgU3RyZWFtPFQ+IGJpbmQoU3RyZWFtPFM+IHN0cmVhbSkgPT4gX2JpbmQoc3RyZWFtKTsKfQoKLy8vIEEgY2xvc3VyZSBtYXBwaW5nIGEgc3RyZWFtIGFuZCBjYW5jZWxPbkVycm9yIHRvIGEgU3RyZWFtU3Vic2NyaXB0aW9uLgp0eXBlZGVmIFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBfU3Vic2NyaXB0aW9uVHJhbnNmb3JtZXI8UywgVD4oCiAgICBTdHJlYW08Uz4gc3RyZWFtLCBib29sIGNhbmNlbE9uRXJyb3IpOwoKLyoqCiAqIEEgW1N0cmVhbVRyYW5zZm9ybWVyXSB0aGF0IG1pbmltaXplcyB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgY2xhc3Nlcy4KICoKICogSW5zdGVhZCBvZiBpbXBsZW1lbnRpbmcgdGhyZWUgY2xhc3NlczogYSBbU3RyZWFtVHJhbnNmb3JtZXJdLCBhIFtTdHJlYW1dCiAqIChhcyB0aGUgcmVzdWx0IG9mIGEgYGJpbmRgIGNhbGwpIGFuZCBhIFtTdHJlYW1TdWJzY3JpcHRpb25dICh3aGljaCBkb2VzIHRoZQogKiBhY3R1YWwgd29yayksIHRoaXMgY2xhc3Mgb25seSByZXF1aXJlcyBhIGZ1bmN0aW9uIHRoYXQgaXMgaW52b2tlZCB3aGVuIHRoZQogKiBsYXN0IGJpdCAodGhlIHN1YnNjcmlwdGlvbikgb2YgdGhlIHRyYW5zZm9ybWVyLXdvcmtmbG93IGlzIG5lZWRlZC4KICoKICogVGhlIGdpdmVuIHRyYW5zZm9ybWVyIGZ1bmN0aW9uIG1hcHMgZnJvbSBTdHJlYW0gYW5kIGNhbmNlbE9uRXJyb3IgdG8gYQogKiBgU3RyZWFtU3Vic2NyaXB0aW9uYC4gQXMgc3VjaCBpdCBjYW4gYWxzbyBhY3Qgb24gYGNhbmNlbGAgZXZlbnRzLCBtYWtpbmcgaXQKICogZnVsbHkgZ2VuZXJhbC4KICovCmNsYXNzIF9TdHJlYW1TdWJzY3JpcHRpb25UcmFuc2Zvcm1lcjxTLCBUPiBleHRlbmRzIFN0cmVhbVRyYW5zZm9ybWVyQmFzZTxTLCBUPiB7CiAgZmluYWwgX1N1YnNjcmlwdGlvblRyYW5zZm9ybWVyPFMsIFQ+IF9vbkxpc3RlbjsKCiAgY29uc3QgX1N0cmVhbVN1YnNjcmlwdGlvblRyYW5zZm9ybWVyKHRoaXMuX29uTGlzdGVuKTsKCiAgU3RyZWFtPFQ+IGJpbmQoU3RyZWFtPFM+IHN0cmVhbSkgPT4KICAgICAgbmV3IF9Cb3VuZFN1YnNjcmlwdGlvblN0cmVhbTxTLCBUPihzdHJlYW0sIF9vbkxpc3Rlbik7Cn0KCi8qKgogKiBBIHN0cmVhbSB0cmFuc2Zvcm1lZCBieSBhIFtfU3RyZWFtU3Vic2NyaXB0aW9uVHJhbnNmb3JtZXJdLgogKgogKiBXaGVuIHRoaXMgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIGl0IGludm9rZXMgdGhlIFtfb25MaXN0ZW5dIGZ1bmN0aW9uIHdpdGgKICogdGhlIHN0b3JlZCBbX3N0cmVhbV0uIFVzdWFsbHkgdGhlIHRyYW5zZm9ybWVyIHN0YXJ0cyBsaXN0ZW5pbmcgYXQgdGhpcwogKiBtb21lbnQuCiAqLwpjbGFzcyBfQm91bmRTdWJzY3JpcHRpb25TdHJlYW08UywgVD4gZXh0ZW5kcyBTdHJlYW08VD4gewogIGZpbmFsIF9TdWJzY3JpcHRpb25UcmFuc2Zvcm1lcjxTLCBUPiBfb25MaXN0ZW47CiAgZmluYWwgU3RyZWFtPFM+IF9zdHJlYW07CgogIGJvb2wgZ2V0IGlzQnJvYWRjYXN0ID0+IF9zdHJlYW0uaXNCcm9hZGNhc3Q7CgogIF9Cb3VuZFN1YnNjcmlwdGlvblN0cmVhbSh0aGlzLl9zdHJlYW0sIHRoaXMuX29uTGlzdGVuKTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IGxpc3Rlbih2b2lkIG9uRGF0YShUIGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIGNhbmNlbE9uRXJyb3IgPSBpZGVudGljYWwodHJ1ZSwgY2FuY2VsT25FcnJvcik7CiAgICBTdHJlYW1TdWJzY3JpcHRpb248VD4gcmVzdWx0ID0gX29uTGlzdGVuKF9zdHJlYW0sIGNhbmNlbE9uRXJyb3IpOwogICAgcmVzdWx0Lm9uRGF0YShvbkRhdGEpOwogICAgcmVzdWx0Lm9uRXJyb3Iob25FcnJvcik7CiAgICByZXN1bHQub25Eb25lKG9uRG9uZSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQqBUgBOTjwBFAEERwQ1FCEBFRYEATIoBAERFAQCAQQ4A0dISAQvLiQhASwnAVFQUThFKhRQBAFGMwEbAQYqBUdEDAYWFTgGFgQBBjAFR0QMBjgVOAYoBAEGLwVHRAwGEhU4BhQEASkBFC4EARUvBAEXGTccJAYRBAEdCiIVFwYEATYKNBUhJg8ZCAYEARcKHCAVFwYEAgE9AQQpA0caAygESScyASY3AgEEPwNPSzoEMScbAS8BNAE1PzQpNksZBAIBP0UBQCg9AT86AQRPA0EEODEwLgFGFgEVSxlGBgQBJwEVFSoGHyANHAYEATkVKgYgLg0pBgQBERsWEh8ZDRQGBAIBBEkDNQRNHTNQKyouQAwBJR8EAgEEUARJLSYBNQIBSj4rAQRKA0xPTkYDSk8SBFEyATgBJj0CAQQ/A0xKCwQ5MhsBLwE6ATU/NEYbHRsTBAIBI2RhcnQ6YXN5bmMvc3RyZWFtX3RyYW5zZm9ybWVycy5kYXJ0K29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9hc3luYy96b25lLmRhcnTAANaeLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5hc3luYzsKCnR5cGVkZWYgUiBab25lQ2FsbGJhY2s8Uj4oKTsKdHlwZWRlZiBSIFpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+KFQgYXJnKTsKdHlwZWRlZiBSIFpvbmVCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KFQxIGFyZzEsIFQyIGFyZzIpOwoKdHlwZWRlZiBIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlciA9IHZvaWQgRnVuY3Rpb24oWm9uZSBzZWxmLAogICAgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSk7CnR5cGVkZWYgUnVuSGFuZGxlciA9IFIgRnVuY3Rpb248Uj4oCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBGdW5jdGlvbigpIGYpOwp0eXBlZGVmIFJ1blVuYXJ5SGFuZGxlciA9IFIgRnVuY3Rpb248UiwgVD4oCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBGdW5jdGlvbihUIGFyZykgZiwgVCBhcmcpOwp0eXBlZGVmIFJ1bkJpbmFyeUhhbmRsZXIgPSBSIEZ1bmN0aW9uPFIsIFQxLCBUMj4oWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LAogICAgWm9uZSB6b25lLCBSIEZ1bmN0aW9uKFQxIGFyZzEsIFQyIGFyZzIpIGYsIFQxIGFyZzEsIFQyIGFyZzIpOwp0eXBlZGVmIFJlZ2lzdGVyQ2FsbGJhY2tIYW5kbGVyID0gWm9uZUNhbGxiYWNrPFI+IEZ1bmN0aW9uPFI+KAogICAgWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIFIgRnVuY3Rpb24oKSBmKTsKdHlwZWRlZiBSZWdpc3RlclVuYXJ5Q2FsbGJhY2tIYW5kbGVyID0gWm9uZVVuYXJ5Q2FsbGJhY2s8UiwgVD4gRnVuY3Rpb248UiwgVD4oCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBGdW5jdGlvbihUIGFyZykgZik7CnR5cGVkZWYgUmVnaXN0ZXJCaW5hcnlDYWxsYmFja0hhbmRsZXIKICAgID0gWm9uZUJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4gRnVuY3Rpb248UiwgVDEsIFQyPihab25lIHNlbGYsCiAgICAgICAgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBSIEZ1bmN0aW9uKFQxIGFyZzEsIFQyIGFyZzIpIGYpOwp0eXBlZGVmIEFzeW5jRXJyb3IgRXJyb3JDYWxsYmFja0hhbmRsZXIoWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LAogICAgWm9uZSB6b25lLCBPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSk7CnR5cGVkZWYgdm9pZCBTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXIoCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgdm9pZCBmKCkpOwp0eXBlZGVmIFRpbWVyIENyZWF0ZVRpbWVySGFuZGxlcigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBmKCkpOwp0eXBlZGVmIFRpbWVyIENyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVyKFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwKICAgIFpvbmUgem9uZSwgRHVyYXRpb24gcGVyaW9kLCB2b2lkIGYoVGltZXIgdGltZXIpKTsKdHlwZWRlZiB2b2lkIFByaW50SGFuZGxlcigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBTdHJpbmcgbGluZSk7CnR5cGVkZWYgWm9uZSBGb3JrSGFuZGxlcihab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwKICAgIFpvbmVTcGVjaWZpY2F0aW9uIHNwZWNpZmljYXRpb24sIE1hcCB6b25lVmFsdWVzKTsKCi8qKiBQYWlyIG9mIGVycm9yIGFuZCBzdGFjayB0cmFjZS4gUmV0dXJuZWQgYnkgW1pvbmUuZXJyb3JDYWxsYmFja10uICovCmNsYXNzIEFzeW5jRXJyb3IgaW1wbGVtZW50cyBFcnJvciB7CiAgZmluYWwgT2JqZWN0IGVycm9yOwogIGZpbmFsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZTsKCiAgQXN5bmNFcnJvcih0aGlzLmVycm9yLCB0aGlzLnN0YWNrVHJhY2UpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAnJGVycm9yJzsKfQoKY2xhc3MgX1pvbmVGdW5jdGlvbjxUIGV4dGVuZHMgRnVuY3Rpb24+IHsKICBmaW5hbCBfWm9uZSB6b25lOwogIGZpbmFsIFQgZnVuY3Rpb247CiAgY29uc3QgX1pvbmVGdW5jdGlvbih0aGlzLnpvbmUsIHRoaXMuZnVuY3Rpb24pOwp9CgovKioKICogVGhpcyBjbGFzcyBwcm92aWRlcyB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgYSBmb3JrZWQgem9uZS4KICoKICogV2hlbiBmb3JraW5nIGEgbmV3IHpvbmUgKHNlZSBbWm9uZS5mb3JrXSkgb25lIGNhbiBvdmVycmlkZSB0aGUgZGVmYXVsdAogKiBiZWhhdmlvciBvZiB0aGUgem9uZSBieSBwcm92aWRpbmcgY2FsbGJhY2tzLiBUaGVzZSBjYWxsYmFja3MgbXVzdCBiZQogKiBnaXZlbiBpbiBhbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLgogKgogKiBIYW5kbGVycyBoYXZlIHRoZSBzYW1lIHNpZ25hdHVyZSBhcyB0aGUgc2FtZS1uYW1lZCBtZXRob2RzIG9uIFtab25lXSBidXQKICogcmVjZWl2ZSB0aHJlZSBhZGRpdGlvbmFsIGFyZ3VtZW50czoKICoKICogICAxLiB0aGUgem9uZSB0aGUgaGFuZGxlcnMgYXJlIGF0dGFjaGVkIHRvICh0aGUgInNlbGYiIHpvbmUpLgogKiAgIDIuIGEgW1pvbmVEZWxlZ2F0ZV0gdG8gdGhlIHBhcmVudCB6b25lLgogKiAgIDMuIHRoZSB6b25lIHRoYXQgZmlyc3QgcmVjZWl2ZWQgdGhlIHJlcXVlc3QgKGJlZm9yZSB0aGUgcmVxdWVzdCB3YXMKICogICAgIGJ1YmJsZWQgdXApLgogKgogKiBIYW5kbGVycyBjYW4gZWl0aGVyIHN0b3AgcHJvcGFnYXRpb24gdGhlIHJlcXVlc3QgKGJ5IHNpbXBseSBub3QgY2FsbGluZyB0aGUKICogcGFyZW50IGhhbmRsZXIpLCBvciBmb3J3YXJkIHRvIHRoZSBwYXJlbnQgem9uZSwgcG90ZW50aWFsbHkgbW9kaWZ5aW5nIHRoZQogKiBhcmd1bWVudHMgb24gdGhlIHdheS4KICovCmFic3RyYWN0IGNsYXNzIFpvbmVTcGVjaWZpY2F0aW9uIHsKICAvKioKICAgKiBDcmVhdGVzIGEgc3BlY2lmaWNhdGlvbiB3aXRoIHRoZSBwcm92aWRlZCBoYW5kbGVycy4KICAgKi8KICBjb25zdCBmYWN0b3J5IFpvbmVTcGVjaWZpY2F0aW9uKAogICAgICB7SGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXIgaGFuZGxlVW5jYXVnaHRFcnJvciwKICAgICAgUnVuSGFuZGxlciBydW4sCiAgICAgIFJ1blVuYXJ5SGFuZGxlciBydW5VbmFyeSwKICAgICAgUnVuQmluYXJ5SGFuZGxlciBydW5CaW5hcnksCiAgICAgIFJlZ2lzdGVyQ2FsbGJhY2tIYW5kbGVyIHJlZ2lzdGVyQ2FsbGJhY2ssCiAgICAgIFJlZ2lzdGVyVW5hcnlDYWxsYmFja0hhbmRsZXIgcmVnaXN0ZXJVbmFyeUNhbGxiYWNrLAogICAgICBSZWdpc3RlckJpbmFyeUNhbGxiYWNrSGFuZGxlciByZWdpc3RlckJpbmFyeUNhbGxiYWNrLAogICAgICBFcnJvckNhbGxiYWNrSGFuZGxlciBlcnJvckNhbGxiYWNrLAogICAgICBTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXIgc2NoZWR1bGVNaWNyb3Rhc2ssCiAgICAgIENyZWF0ZVRpbWVySGFuZGxlciBjcmVhdGVUaW1lciwKICAgICAgQ3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXIgY3JlYXRlUGVyaW9kaWNUaW1lciwKICAgICAgUHJpbnRIYW5kbGVyIHByaW50LAogICAgICBGb3JrSGFuZGxlciBmb3JrfSkgPSBfWm9uZVNwZWNpZmljYXRpb247CgogIC8qKgogICAqIENyZWF0ZXMgYSBzcGVjaWZpY2F0aW9uIGZyb20gW290aGVyXSB3aXRoIHRoZSBwcm92aWRlZCBoYW5kbGVycyBvdmVycmlkaW5nCiAgICogdGhlIG9uZXMgaW4gW290aGVyXS4KICAgKi8KICBmYWN0b3J5IFpvbmVTcGVjaWZpY2F0aW9uLmZyb20oWm9uZVNwZWNpZmljYXRpb24gb3RoZXIsCiAgICAgIHtIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlciBoYW5kbGVVbmNhdWdodEVycm9yLAogICAgICBSdW5IYW5kbGVyIHJ1biwKICAgICAgUnVuVW5hcnlIYW5kbGVyIHJ1blVuYXJ5LAogICAgICBSdW5CaW5hcnlIYW5kbGVyIHJ1bkJpbmFyeSwKICAgICAgUmVnaXN0ZXJDYWxsYmFja0hhbmRsZXIgcmVnaXN0ZXJDYWxsYmFjaywKICAgICAgUmVnaXN0ZXJVbmFyeUNhbGxiYWNrSGFuZGxlciByZWdpc3RlclVuYXJ5Q2FsbGJhY2ssCiAgICAgIFJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tIYW5kbGVyIHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2ssCiAgICAgIEVycm9yQ2FsbGJhY2tIYW5kbGVyIGVycm9yQ2FsbGJhY2ssCiAgICAgIFNjaGVkdWxlTWljcm90YXNrSGFuZGxlciBzY2hlZHVsZU1pY3JvdGFzaywKICAgICAgQ3JlYXRlVGltZXJIYW5kbGVyIGNyZWF0ZVRpbWVyLAogICAgICBDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlciBjcmVhdGVQZXJpb2RpY1RpbWVyLAogICAgICBQcmludEhhbmRsZXIgcHJpbnQsCiAgICAgIEZvcmtIYW5kbGVyIGZvcmt9KSB7CiAgICByZXR1cm4gbmV3IFpvbmVTcGVjaWZpY2F0aW9uKAogICAgICAgIGhhbmRsZVVuY2F1Z2h0RXJyb3I6IGhhbmRsZVVuY2F1Z2h0RXJyb3IgPz8gb3RoZXIuaGFuZGxlVW5jYXVnaHRFcnJvciwKICAgICAgICBydW46IHJ1biA/PyBvdGhlci5ydW4sCiAgICAgICAgcnVuVW5hcnk6IHJ1blVuYXJ5ID8/IG90aGVyLnJ1blVuYXJ5LAogICAgICAgIHJ1bkJpbmFyeTogcnVuQmluYXJ5ID8/IG90aGVyLnJ1bkJpbmFyeSwKICAgICAgICByZWdpc3RlckNhbGxiYWNrOiByZWdpc3RlckNhbGxiYWNrID8/IG90aGVyLnJlZ2lzdGVyQ2FsbGJhY2ssCiAgICAgICAgcmVnaXN0ZXJVbmFyeUNhbGxiYWNrOgogICAgICAgICAgICByZWdpc3RlclVuYXJ5Q2FsbGJhY2sgPz8gb3RoZXIucmVnaXN0ZXJVbmFyeUNhbGxiYWNrLAogICAgICAgIHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s6CiAgICAgICAgICAgIHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2sgPz8gb3RoZXIucmVnaXN0ZXJCaW5hcnlDYWxsYmFjaywKICAgICAgICBlcnJvckNhbGxiYWNrOiBlcnJvckNhbGxiYWNrID8/IG90aGVyLmVycm9yQ2FsbGJhY2ssCiAgICAgICAgc2NoZWR1bGVNaWNyb3Rhc2s6IHNjaGVkdWxlTWljcm90YXNrID8/IG90aGVyLnNjaGVkdWxlTWljcm90YXNrLAogICAgICAgIGNyZWF0ZVRpbWVyOiBjcmVhdGVUaW1lciA/PyBvdGhlci5jcmVhdGVUaW1lciwKICAgICAgICBjcmVhdGVQZXJpb2RpY1RpbWVyOiBjcmVhdGVQZXJpb2RpY1RpbWVyID8/IG90aGVyLmNyZWF0ZVBlcmlvZGljVGltZXIsCiAgICAgICAgcHJpbnQ6IHByaW50ID8/IG90aGVyLnByaW50LAogICAgICAgIGZvcms6IGZvcmsgPz8gb3RoZXIuZm9yayk7CiAgfQoKICBIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlciBnZXQgaGFuZGxlVW5jYXVnaHRFcnJvcjsKICBSdW5IYW5kbGVyIGdldCBydW47CiAgUnVuVW5hcnlIYW5kbGVyIGdldCBydW5VbmFyeTsKICBSdW5CaW5hcnlIYW5kbGVyIGdldCBydW5CaW5hcnk7CiAgUmVnaXN0ZXJDYWxsYmFja0hhbmRsZXIgZ2V0IHJlZ2lzdGVyQ2FsbGJhY2s7CiAgUmVnaXN0ZXJVbmFyeUNhbGxiYWNrSGFuZGxlciBnZXQgcmVnaXN0ZXJVbmFyeUNhbGxiYWNrOwogIFJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tIYW5kbGVyIGdldCByZWdpc3RlckJpbmFyeUNhbGxiYWNrOwogIEVycm9yQ2FsbGJhY2tIYW5kbGVyIGdldCBlcnJvckNhbGxiYWNrOwogIFNjaGVkdWxlTWljcm90YXNrSGFuZGxlciBnZXQgc2NoZWR1bGVNaWNyb3Rhc2s7CiAgQ3JlYXRlVGltZXJIYW5kbGVyIGdldCBjcmVhdGVUaW1lcjsKICBDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlciBnZXQgY3JlYXRlUGVyaW9kaWNUaW1lcjsKICBQcmludEhhbmRsZXIgZ2V0IHByaW50OwogIEZvcmtIYW5kbGVyIGdldCBmb3JrOwp9CgovKioKICogSW50ZXJuYWwgW1pvbmVTcGVjaWZpY2F0aW9uXSBjbGFzcy4KICoKICogVGhlIGltcGxlbWVudGF0aW9uIHdhbnRzIHRvIHJlbHkgb24gdGhlIGZhY3QgdGhhdCB0aGUgZ2V0dGVycyBjYW5ub3QgY2hhbmdlCiAqIGR5bmFtaWNhbGx5LiBXZSB0aHVzIHJlcXVpcmUgdXNlcnMgdG8gZ28gdGhyb3VnaCB0aGUgcmVkaXJlY3RpbmcKICogW1pvbmVTcGVjaWZpY2F0aW9uXSBjb25zdHJ1Y3RvciB3aGljaCBpbnN0YW50aWF0ZXMgdGhpcyBjbGFzcy4KICovCmNsYXNzIF9ab25lU3BlY2lmaWNhdGlvbiBpbXBsZW1lbnRzIFpvbmVTcGVjaWZpY2F0aW9uIHsKICBjb25zdCBfWm9uZVNwZWNpZmljYXRpb24oCiAgICAgIHt0aGlzLmhhbmRsZVVuY2F1Z2h0RXJyb3IsCiAgICAgIHRoaXMucnVuLAogICAgICB0aGlzLnJ1blVuYXJ5LAogICAgICB0aGlzLnJ1bkJpbmFyeSwKICAgICAgdGhpcy5yZWdpc3RlckNhbGxiYWNrLAogICAgICB0aGlzLnJlZ2lzdGVyVW5hcnlDYWxsYmFjaywKICAgICAgdGhpcy5yZWdpc3RlckJpbmFyeUNhbGxiYWNrLAogICAgICB0aGlzLmVycm9yQ2FsbGJhY2ssCiAgICAgIHRoaXMuc2NoZWR1bGVNaWNyb3Rhc2ssCiAgICAgIHRoaXMuY3JlYXRlVGltZXIsCiAgICAgIHRoaXMuY3JlYXRlUGVyaW9kaWNUaW1lciwKICAgICAgdGhpcy5wcmludCwKICAgICAgdGhpcy5mb3JrfSk7CgogIGZpbmFsIEhhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyIGhhbmRsZVVuY2F1Z2h0RXJyb3I7CiAgZmluYWwgUnVuSGFuZGxlciBydW47CiAgZmluYWwgUnVuVW5hcnlIYW5kbGVyIHJ1blVuYXJ5OwogIGZpbmFsIFJ1bkJpbmFyeUhhbmRsZXIgcnVuQmluYXJ5OwogIGZpbmFsIFJlZ2lzdGVyQ2FsbGJhY2tIYW5kbGVyIHJlZ2lzdGVyQ2FsbGJhY2s7CiAgZmluYWwgUmVnaXN0ZXJVbmFyeUNhbGxiYWNrSGFuZGxlciByZWdpc3RlclVuYXJ5Q2FsbGJhY2s7CiAgZmluYWwgUmVnaXN0ZXJCaW5hcnlDYWxsYmFja0hhbmRsZXIgcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazsKICBmaW5hbCBFcnJvckNhbGxiYWNrSGFuZGxlciBlcnJvckNhbGxiYWNrOwogIGZpbmFsIFNjaGVkdWxlTWljcm90YXNrSGFuZGxlciBzY2hlZHVsZU1pY3JvdGFzazsKICBmaW5hbCBDcmVhdGVUaW1lckhhbmRsZXIgY3JlYXRlVGltZXI7CiAgZmluYWwgQ3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXIgY3JlYXRlUGVyaW9kaWNUaW1lcjsKICBmaW5hbCBQcmludEhhbmRsZXIgcHJpbnQ7CiAgZmluYWwgRm9ya0hhbmRsZXIgZm9yazsKfQoKLyoqCiAqIEFuIGFkYXB0ZWQgdmlldyBvZiB0aGUgcGFyZW50IHpvbmUuCiAqCiAqIFRoaXMgY2xhc3MgYWxsb3dzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBhIHpvbmUgbWV0aG9kIHRvIGludm9rZSBtZXRob2RzIG9uCiAqIHRoZSBwYXJlbnQgem9uZSB3aGlsZSByZXRhaW5pbmcga25vd2xlZGdlIG9mIHRoZSBvcmlnaW5hdGluZyB6b25lLgogKgogKiBDdXN0b20gem9uZXMgKGNyZWF0ZWQgdGhyb3VnaCBbWm9uZS5mb3JrXSBvciBbcnVuWm9uZWRdKSBjYW4gcHJvdmlkZQogKiBpbXBsZW1lbnRhdGlvbnMgb2YgbW9zdCBtZXRob2RzIG9mIHpvbmVzLiBUaGlzIGlzIHNpbWlsYXIgdG8gb3ZlcnJpZGluZwogKiBtZXRob2RzIG9uIFtab25lXSwgZXhjZXB0IHRoYXQgdGhpcyBtZWNoYW5pc20gZG9lc24ndCByZXF1aXJlIHN1YmNsYXNzaW5nLgogKgogKiBBIGN1c3RvbSB6b25lIGZ1bmN0aW9uIChwcm92aWRlZCB0aHJvdWdoIGEgW1pvbmVTcGVjaWZpY2F0aW9uXSkgdHlwaWNhbGx5CiAqIHJlY29yZHMgb3Igd3JhcHMgaXRzIHBhcmFtZXRlcnMgYW5kIHRoZW4gZGVsZWdhdGVzIHRoZSBvcGVyYXRpb24gdG8gaXRzCiAqIHBhcmVudCB6b25lIHVzaW5nIHRoZSBwcm92aWRlZCBbWm9uZURlbGVnYXRlXS4KICoKICogV2hpbGUgem9uZXMgaGF2ZSBhY2Nlc3MgdG8gdGhlaXIgcGFyZW50IHpvbmUgKHRocm91Z2ggW1pvbmUucGFyZW50XSkgaXQgaXMKICogcmVjb21tZW5kZWQgdG8gY2FsbCB0aGUgbWV0aG9kcyBvbiB0aGUgcHJvdmlkZWQgcGFyZW50IGRlbGVnYXRlIGZvciB0d28KICogcmVhc29uczoKICogMS4gdGhlIGRlbGVnYXRlIG1ldGhvZHMgdGFrZSBhbiBhZGRpdGlvbmFsIGB6b25lYCBhcmd1bWVudCB3aGljaCBpcyB0aGUKICogICB6b25lIHRoZSBhY3Rpb24gaGFzIGJlZW4gaW5pdGlhdGVkIGluLgogKiAyLiBkZWxlZ2F0ZSBjYWxscyBhcmUgbW9yZSBlZmZpY2llbnQsIHNpbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBrbm93cyBob3cKICogICB0byBza2lwIHpvbmVzIHRoYXQgd291bGQganVzdCBkZWxlZ2F0ZSB0byB0aGVpciBwYXJlbnRzLgogKi8KYWJzdHJhY3QgY2xhc3MgWm9uZURlbGVnYXRlIHsKICB2b2lkIGhhbmRsZVVuY2F1Z2h0RXJyb3IoWm9uZSB6b25lLCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKTsKICBSIHJ1bjxSPihab25lIHpvbmUsIFIgZigpKTsKICBSIHJ1blVuYXJ5PFIsIFQ+KFpvbmUgem9uZSwgUiBmKFQgYXJnKSwgVCBhcmcpOwogIFIgcnVuQmluYXJ5PFIsIFQxLCBUMj4oWm9uZSB6b25lLCBSIGYoVDEgYXJnMSwgVDIgYXJnMiksIFQxIGFyZzEsIFQyIGFyZzIpOwogIFpvbmVDYWxsYmFjazxSPiByZWdpc3RlckNhbGxiYWNrPFI+KFpvbmUgem9uZSwgUiBmKCkpOwogIFpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+IHJlZ2lzdGVyVW5hcnlDYWxsYmFjazxSLCBUPihab25lIHpvbmUsIFIgZihUIGFyZykpOwogIFpvbmVCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+IHJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPigKICAgICAgWm9uZSB6b25lLCBSIGYoVDEgYXJnMSwgVDIgYXJnMikpOwogIEFzeW5jRXJyb3IgZXJyb3JDYWxsYmFjayhab25lIHpvbmUsIE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKTsKICB2b2lkIHNjaGVkdWxlTWljcm90YXNrKFpvbmUgem9uZSwgdm9pZCBmKCkpOwogIFRpbWVyIGNyZWF0ZVRpbWVyKFpvbmUgem9uZSwgRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgZigpKTsKICBUaW1lciBjcmVhdGVQZXJpb2RpY1RpbWVyKFpvbmUgem9uZSwgRHVyYXRpb24gcGVyaW9kLCB2b2lkIGYoVGltZXIgdGltZXIpKTsKICB2b2lkIHByaW50KFpvbmUgem9uZSwgU3RyaW5nIGxpbmUpOwogIFpvbmUgZm9yayhab25lIHpvbmUsIFpvbmVTcGVjaWZpY2F0aW9uIHNwZWNpZmljYXRpb24sIE1hcCB6b25lVmFsdWVzKTsKfQoKLyoqCiAqIEEgem9uZSByZXByZXNlbnRzIGFuIGVudmlyb25tZW50IHRoYXQgcmVtYWlucyBzdGFibGUgYWNyb3NzIGFzeW5jaHJvbm91cwogKiBjYWxscy4KICoKICogQ29kZSBpcyBhbHdheXMgZXhlY3V0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYSB6b25lLCBhdmFpbGFibGUgYXMKICogW1pvbmUuY3VycmVudF0uIFRoZSBpbml0aWFsIGBtYWluYCBmdW5jdGlvbiBydW5zIGluIHRoZSBjb250ZXh0IG9mIHRoZQogKiBkZWZhdWx0IHpvbmUgKFtab25lLnJvb3RdKS4gQ29kZSBjYW4gYmUgcnVuIGluIGEgZGlmZmVyZW50IHpvbmUgdXNpbmcgZWl0aGVyCiAqIFtydW5ab25lZF0sIHRvIGNyZWF0ZSBhIG5ldyB6b25lLCBvciBbWm9uZS5ydW5dIHRvIHJ1biBjb2RlIGluIHRoZSBjb250ZXh0IG9mCiAqIGFuIGV4aXN0aW5nIHpvbmUgbGlrZWx5IGNyZWF0ZWQgdXNpbmcgW1pvbmUuZm9ya10uCiAqCiAqIERldmVsb3BlcnMgY2FuIGNyZWF0ZSBhIG5ldyB6b25lIHRoYXQgb3ZlcnJpZGVzIHNvbWUgb2YgdGhlIGZ1bmN0aW9uYWxpdHkgb2YKICogYW4gZXhpc3Rpbmcgem9uZS4gRm9yIGV4YW1wbGUsIGN1c3RvbSB6b25lcyBjYW4gcmVwbGFjZSBvZiBtb2RpZnkgdGhlCiAqIGJlaGF2aW9yIG9mIGBwcmludGAsIHRpbWVycywgbWljcm90YXNrcyBvciBob3cgdW5jYXVnaHQgZXJyb3JzIGFyZSBoYW5kbGVkLgogKgogKiBUaGUgW1pvbmVdIGNsYXNzIGlzIG5vdCBzdWJjbGFzc2FibGUsIGJ1dCB1c2VycyBjYW4gcHJvdmlkZSBjdXN0b20gem9uZXMgYnkKICogZm9ya2luZyBhbiBleGlzdGluZyB6b25lICh1c3VhbGx5IFtab25lLmN1cnJlbnRdKSB3aXRoIGEgW1pvbmVTcGVjaWZpY2F0aW9uXS4KICogVGhpcyBpcyBzaW1pbGFyIHRvIGNyZWF0aW5nIGEgbmV3IGNsYXNzIHRoYXQgZXh0ZW5kcyB0aGUgYmFzZSBgWm9uZWAgY2xhc3MKICogYW5kIHRoYXQgb3ZlcnJpZGVzIHNvbWUgbWV0aG9kcywgZXhjZXB0IHdpdGhvdXQgYWN0dWFsbHkgY3JlYXRpbmcgYSBuZXcKICogY2xhc3MuIEluc3RlYWQgdGhlIG92ZXJyaWRpbmcgbWV0aG9kcyBhcmUgcHJvdmlkZWQgYXMgZnVuY3Rpb25zIHRoYXQKICogZXhwbGljaXRseSB0YWtlIHRoZSBlcXVpdmFsZW50IG9mIHRoZWlyIG93biBjbGFzcywgdGhlICJzdXBlciIgY2xhc3MgYW5kIHRoZQogKiBgdGhpc2Agb2JqZWN0IGFzIHBhcmFtZXRlcnMuCiAqCiAqIEFzeW5jaHJvbm91cyBjYWxsYmFja3MgYWx3YXlzIHJ1biBpbiB0aGUgY29udGV4dCBvZiB0aGUgem9uZSB3aGVyZSB0aGV5IHdlcmUKICogc2NoZWR1bGVkLiBUaGlzIGlzIGltcGxlbWVudGVkIHVzaW5nIHR3byBzdGVwczoKICogMS4gdGhlIGNhbGxiYWNrIGlzIGZpcnN0IHJlZ2lzdGVyZWQgdXNpbmcgb25lIG9mIFtyZWdpc3RlckNhbGxiYWNrXSwKICogICBbcmVnaXN0ZXJVbmFyeUNhbGxiYWNrXSwgb3IgW3JlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tdLiBUaGlzIGFsbG93cyB0aGUgem9uZQogKiAgIHRvIHJlY29yZCB0aGF0IGEgY2FsbGJhY2sgZXhpc3RzIGFuZCBwb3RlbnRpYWxseSBtb2RpZnkgaXQgKGJ5IHJldHVybmluZyBhCiAqICAgZGlmZmVyZW50IGNhbGxiYWNrKS4gVGhlIGNvZGUgZG9pbmcgdGhlIHJlZ2lzdHJhdGlvbiAoZS5nLiwgYEZ1dHVyZS50aGVuYCkKICogICBhbHNvIHJlbWVtYmVycyB0aGUgY3VycmVudCB6b25lIHNvIHRoYXQgaXQgY2FuIGxhdGVyIHJ1biB0aGUgY2FsbGJhY2sgaW4KICogICB0aGF0IHpvbmUuCiAqIDIuIEF0IGEgbGF0ZXIgcG9pbnQgdGhlIHJlZ2lzdGVyZWQgY2FsbGJhY2sgaXMgcnVuIGluIHRoZSByZW1lbWJlcmVkIHpvbmUuCiAqCiAqIFRoaXMgaXMgYWxsIGhhbmRsZWQgaW50ZXJuYWxseSBieSB0aGUgcGxhdGZvcm0gY29kZSBhbmQgbW9zdCB1c2VycyBkb24ndCBuZWVkCiAqIHRvIHdvcnJ5IGFib3V0IGl0LiBIb3dldmVyLCBkZXZlbG9wZXJzIG9mIG5ldyBhc3luY2hyb25vdXMgb3BlcmF0aW9ucywKICogcHJvdmlkZWQgYnkgdGhlIHVuZGVybHlpbmcgc3lzdGVtIG9yIHRocm91Z2ggbmF0aXZlIGV4dGVuc2lvbnMsIG11c3QgZm9sbG93CiAqIHRoZSBwcm90b2NvbCB0byBiZSB6b25lIGNvbXBhdGlibGUuCiAqCiAqIEZvciBjb252ZW5pZW5jZSwgem9uZXMgcHJvdmlkZSBbYmluZENhbGxiYWNrXSAoYW5kIHRoZSBjb3JyZXNwb25kaW5nCiAqIFtiaW5kVW5hcnlDYWxsYmFja10gYW5kIFtiaW5kQmluYXJ5Q2FsbGJhY2tdKSB0byBtYWtlIGl0IGVhc2llciB0byByZXNwZWN0CiAqIHRoZSB6b25lIGNvbnRyYWN0OiB0aGVzZSBmdW5jdGlvbnMgZmlyc3QgaW52b2tlIHRoZSBjb3JyZXNwb25kaW5nIGByZWdpc3RlcmAKICogZnVuY3Rpb25zIGFuZCB0aGVuIHdyYXAgdGhlIHJldHVybmVkIGZ1bmN0aW9uIHNvIHRoYXQgaXQgcnVucyBpbiB0aGUgY3VycmVudAogKiB6b25lIHdoZW4gaXQgaXMgbGF0ZXIgYXN5bmNocm9ub3VzbHkgaW52b2tlZC4KICoKICogU2ltaWxhcmx5LCB6b25lcyBwcm92aWRlIFtiaW5kQ2FsbGJhY2tHdWFyZGVkXSAoYW5kIHRoZSBjb3JyZXNwb25kaW5nCiAqIFtiaW5kVW5hcnlDYWxsYmFja0d1YXJkZWRdIGFuZCBbYmluZEJpbmFyeUNhbGxiYWNrR3VhcmRlZF0pLCB3aGVuIHRoZQogKiBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCB0aHJvdWdoIFtab25lLnJ1bkd1YXJkZWRdLgogKi8KYWJzdHJhY3QgY2xhc3MgWm9uZSB7CiAgLy8gUHJpdmF0ZSBjb25zdHJ1Y3RvciBzbyB0aGF0IGl0IGlzIG5vdCBwb3NzaWJsZSBpbnN0YW50aWF0ZSBhIFpvbmUgY2xhc3MuCiAgWm9uZS5fKCk7CgogIC8qKgogICAqIFRoZSByb290IHpvbmUuCiAgICoKICAgKiBBbGwgaXNvbGF0ZSBlbnRyeSBmdW5jdGlvbnMgKGBtYWluYCBvciBzcGF3bmVkIGZ1bmN0aW9ucykgc3RhcnQgcnVubmluZyBpbgogICAqIHRoZSByb290IHpvbmUgKHRoYXQgaXMsIFtab25lLmN1cnJlbnRdIGlzIGlkZW50aWNhbCB0byBbWm9uZS5yb290XSB3aGVuIHRoZQogICAqIGVudHJ5IGZ1bmN0aW9uIGlzIGNhbGxlZCkuIElmIG5vIGN1c3RvbSB6b25lIGlzIGNyZWF0ZWQsIHRoZSByZXN0IG9mIHRoZQogICAqIHByb2dyYW0gYWx3YXlzIHJ1bnMgaW4gdGhlIHJvb3Qgem9uZS4KICAgKgogICAqIFRoZSByb290IHpvbmUgaW1wbGVtZW50cyB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBhbGwgem9uZSBvcGVyYXRpb25zLgogICAqIE1hbnkgbWV0aG9kcywgbGlrZSBbcmVnaXN0ZXJDYWxsYmFja10gZG8gdGhlIGJhcmUgbWluaW11bSByZXF1aXJlZCBvZiB0aGUKICAgKiBmdW5jdGlvbiwgYW5kIGFyZSBvbmx5IHByb3ZpZGVkIGFzIGEgaG9vayBmb3IgY3VzdG9tIHpvbmVzLiBPdGhlcnMsIGxpa2UKICAgKiBbc2NoZWR1bGVNaWNyb3Rhc2tdLCBpbnRlcmFjdCB3aXRoIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSB0byBpbXBsZW1lbnQgdGhlCiAgICogZGVzaXJlZCBiZWhhdmlvci4KICAgKi8KICBzdGF0aWMgY29uc3QgWm9uZSByb290ID0gX3Jvb3Rab25lOwoKICAvKiogVGhlIGN1cnJlbnRseSBydW5uaW5nIHpvbmUuICovCiAgc3RhdGljIFpvbmUgX2N1cnJlbnQgPSBfcm9vdFpvbmU7CgogIC8qKiBUaGUgem9uZSB0aGF0IGlzIGN1cnJlbnRseSBhY3RpdmUuICovCiAgc3RhdGljIFpvbmUgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7CgogIC8qKgogICAqIEhhbmRsZXMgdW5jYXVnaHQgYXN5bmNocm9ub3VzIGVycm9ycy4KICAgKgogICAqIFRoZXJlIGFyZSB0d28ga2luZCBvZiBhc3luY2hyb25vdXMgZXJyb3JzIHRoYXQgYXJlIGhhbmRsZWQgYnkgdGhpcwogICAqIGZ1bmN0aW9uOgogICAqIDEuIFVuY2F1Z2h0IGVycm9ycyB0aGF0IHdlcmUgdGhyb3duIGluIGFzeW5jaHJvbm91cyBjYWxsYmFja3MsIGZvciBleGFtcGxlLAogICAqICAgYSBgdGhyb3dgIGluIHRoZSBmdW5jdGlvbiBwYXNzZWQgdG8gW1RpbWVyLnJ1bl0uCiAgICogMi4gQXN5bmNocm9ub3VzIGVycm9ycyB0aGF0IGFyZSBwdXNoZWQgdGhyb3VnaCBbRnV0dXJlXSBhbmQgW1N0cmVhbV0KICAgKiAgIGNoYWlucywgYnV0IGZvciB3aGljaCBubyBjaGlsZCByZWdpc3RlcmVkIGFuIGVycm9yIGhhbmRsZXIuCiAgICogICBNb3N0IGFzeW5jaHJvbm91cyBjbGFzc2VzLCBsaWtlIFtGdXR1cmVdIG9yIFtTdHJlYW1dIHB1c2ggZXJyb3JzIHRvIHRoZWlyCiAgICogICBsaXN0ZW5lcnMuIEVycm9ycyBhcmUgcHJvcGFnYXRlZCB0aGlzIHdheSB1bnRpbCBlaXRoZXIgYSBsaXN0ZW5lciBoYW5kbGVzCiAgICogICB0aGUgZXJyb3IgKGZvciBleGFtcGxlIHdpdGggW0Z1dHVyZS5jYXRjaEVycm9yXSksIG9yIG5vIGxpc3RlbmVyIGlzCiAgICogICBhdmFpbGFibGUgYW55bW9yZS4gSW4gdGhlIGxhdHRlciBjYXNlLCBmdXR1cmVzIGFuZCBzdHJlYW1zIGludm9rZSB0aGUKICAgKiAgIHpvbmUncyBbaGFuZGxlVW5jYXVnaHRFcnJvcl0uCiAgICoKICAgKiBCeSBkZWZhdWx0LCB3aGVuIGhhbmRsZWQgYnkgdGhlIHJvb3Qgem9uZSwgdW5jYXVnaHQgYXN5bmNocm9ub3VzIGVycm9ycyBhcmUKICAgKiB0cmVhdGVkIGxpa2UgdW5jYXVnaHQgc3luY2hyb25vdXMgZXhjZXB0aW9ucy4KICAgKi8KICB2b2lkIGhhbmRsZVVuY2F1Z2h0RXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSk7CgogIC8qKgogICAqIFRoZSBwYXJlbnQgem9uZSBvZiB0aGUgdGhpcyB6b25lLgogICAqCiAgICogSXMgYG51bGxgIGlmIGB0aGlzYCBpcyB0aGUgW3Jvb3RdIHpvbmUuCiAgICoKICAgKiBab25lcyBhcmUgY3JlYXRlZCBieSBbZm9ya10gb24gYW4gZXhpc3Rpbmcgem9uZSwgb3IgYnkgW3J1blpvbmVkXSB3aGljaAogICAqIGZvcmtzIHRoZSBbY3VycmVudF0gem9uZS4gVGhlIG5ldyB6b25lJ3MgcGFyZW50IHpvbmUgaXMgdGhlIHpvbmUgaXQgd2FzCiAgICogZm9ya2VkIGZyb20uCiAgICovCiAgWm9uZSBnZXQgcGFyZW50OwoKICAvKioKICAgKiBUaGUgZXJyb3Igem9uZSBpcyB0aGUgb25lIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIGRlYWxpbmcgd2l0aCB1bmNhdWdodAogICAqIGVycm9ycy4KICAgKgogICAqIFRoaXMgaXMgdGhlIGNsb3Nlc3QgcGFyZW50IHpvbmUgb2YgdGhpcyB6b25lIHRoYXQgcHJvdmlkZXMgYQogICAqIFtoYW5kbGVVbmNhdWdodEVycm9yXSBtZXRob2QuCiAgICoKICAgKiBBc3luY2hyb25vdXMgZXJyb3JzIG5ldmVyIGNyb3NzIHpvbmUgYm91bmRhcmllcyBiZXR3ZWVuIHpvbmVzIHdpdGgKICAgKiBkaWZmZXJlbnQgZXJyb3IgaGFuZGxlcnMuCiAgICoKICAgKiBFeGFtcGxlOgogICAqIGBgYAogICAqIGltcG9ydCAnZGFydDphc3luYyc7CiAgICoKICAgKiBtYWluKCkgewogICAqICAgdmFyIGZ1dHVyZTsKICAgKiAgIHJ1blpvbmVkKCgpIHsKICAgKiAgICAgLy8gVGhlIGFzeW5jaHJvbm91cyBlcnJvciBpcyBjYXVnaHQgYnkgdGhlIGN1c3RvbSB6b25lIHdoaWNoIHByaW50cwogICAqICAgICAvLyAnYXN5bmNocm9ub3VzIGVycm9yJy4KICAgKiAgICAgZnV0dXJlID0gbmV3IEZ1dHVyZS5lcnJvcigiYXN5bmNocm9ub3VzIGVycm9yIik7CiAgICogICB9LCBvbkVycm9yOiAoZSkgeyBwcmludChlKTsgfSk7ICAvLyBDcmVhdGVzIGEgem9uZSB3aXRoIGFuIGVycm9yIGhhbmRsZXIuCiAgICogICAvLyBUaGUgZm9sbG93aW5nIGBjYXRjaEVycm9yYCBoYW5kbGVyIGlzIG5ldmVyIGludm9rZWQsIGJlY2F1c2UgdGhlCiAgICogICAvLyBjdXN0b20gem9uZSBjcmVhdGVkIGJ5IHRoZSBjYWxsIHRvIGBydW5ab25lZGAgcHJvdmlkZXMgYW4KICAgKiAgIC8vIGVycm9yIGhhbmRsZXIuCiAgICogICBmdXR1cmUuY2F0Y2hFcnJvcigoZSkgeyB0aHJvdyAiaXMgbmV2ZXIgcmVhY2hlZCI7IH0pOwogICAqIH0KICAgKiBgYGAKICAgKgogICAqIE5vdGUgdGhhdCBlcnJvcnMgY2Fubm90IGVudGVyIGEgY2hpbGQgem9uZSB3aXRoIGEgZGlmZmVyZW50IGVycm9yIGhhbmRsZXIKICAgKiBlaXRoZXI6CiAgICogYGBgCiAgICogaW1wb3J0ICdkYXJ0OmFzeW5jJzsKICAgKgogICAqIG1haW4oKSB7CiAgICogICBydW5ab25lZCgoKSB7CiAgICogICAgIC8vIFRoZSBmb2xsb3dpbmcgYXN5bmNocm9ub3VzIGVycm9yIGlzICpub3QqIGNhdWdodCBieSB0aGUgYGNhdGNoRXJyb3JgCiAgICogICAgIC8vIGluIHRoZSBuZXN0ZWQgem9uZSwgc2luY2UgZXJyb3JzIGFyZSBub3QgdG8gY3Jvc3Mgem9uZSBib3VuZGFyaWVzCiAgICogICAgIC8vIHdpdGggZGlmZmVyZW50IGVycm9yIGhhbmRsZXJzLgogICAqICAgICAvLyBJbnN0ZWFkIHRoZSBlcnJvciBpcyBoYW5kbGVkIGJ5IHRoZSBjdXJyZW50IGVycm9yIGhhbmRsZXIsCiAgICogICAgIC8vIHByaW50aW5nICJDYXVnaHQgYnkgb3V0ZXIgem9uZTogYXN5bmNocm9ub3VzIGVycm9yIi4KICAgKiAgICAgdmFyIGZ1dHVyZSA9IG5ldyBGdXR1cmUuZXJyb3IoImFzeW5jaHJvbm91cyBlcnJvciIpOwogICAqICAgICBydW5ab25lZCgoKSB7CiAgICogICAgICAgZnV0dXJlLmNhdGNoRXJyb3IoKGUpIHsgdGhyb3cgImlzIG5ldmVyIHJlYWNoZWQiOyB9KTsKICAgKiAgICAgfSwgb25FcnJvcjogKGUpIHsgdGhyb3cgImlzIG5ldmVyIHJlYWNoZWQiOyB9KTsKICAgKiAgIH0sIG9uRXJyb3I6IChlKSB7IHByaW50KCJDYXVnaHQgYnkgb3V0ZXIgem9uZTogJGUiKTsgfSk7CiAgICogfQogICAqIGBgYAogICAqLwogIFpvbmUgZ2V0IGVycm9yWm9uZTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIGB0aGlzYCBhbmQgW290aGVyWm9uZV0gYXJlIGluIHRoZSBzYW1lIGVycm9yIHpvbmUuCiAgICoKICAgKiBUd28gem9uZXMgYXJlIGluIHRoZSBzYW1lIGVycm9yIHpvbmUgaWYgdGhleSBoYXZlIHRoZSBzYW1lIFtlcnJvclpvbmVdLgogICAqLwogIGJvb2wgaW5TYW1lRXJyb3Jab25lKFpvbmUgb3RoZXJab25lKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyB6b25lIGFzIGEgY2hpbGQgb2YgYHRoaXNgLgogICAqCiAgICogVGhlIG5ldyB6b25lIHVzZXMgdGhlIGNsb3N1cmVzIGluIHRoZSBnaXZlbiBbc3BlY2lmaWNhdGlvbl0gdG8gb3ZlcnJpZGUKICAgKiB0aGUgY3VycmVudCdzIHpvbmUgYmVoYXZpb3IuIEFsbCBzcGVjaWZpY2F0aW9uIGVudHJpZXMgdGhhdCBhcmUgYG51bGxgCiAgICogaW5oZXJpdCB0aGUgYmVoYXZpb3IgZnJvbSB0aGUgcGFyZW50IHpvbmUgKGB0aGlzYCkuCiAgICoKICAgKiBUaGUgbmV3IHpvbmUgaW5oZXJpdHMgdGhlIHN0b3JlZCB2YWx1ZXMgKGFjY2Vzc2VkIHRocm91Z2ggW29wZXJhdG9yIFtdXSkKICAgKiBvZiB0aGlzIHpvbmUgYW5kIHVwZGF0ZXMgdGhlbSB3aXRoIHZhbHVlcyBmcm9tIFt6b25lVmFsdWVzXSwgd2hpY2ggZWl0aGVyCiAgICogYWRkcyBuZXcgdmFsdWVzIG9yIG92ZXJyaWRlcyBleGlzdGluZyBvbmVzLgogICAqCiAgICogTm90ZSB0aGF0IHRoZSBmb3JrIG9wZXJhdGlvbiBpcyBpbnRlcmNlcHRpYmxlLiBBIHpvbmUgY2FuIHRodXMgY2hhbmdlCiAgICogdGhlIHpvbmUgc3BlY2lmaWNhdGlvbiAob3Igem9uZSB2YWx1ZXMpLCBnaXZpbmcgdGhlIGZvcmtpbmcgem9uZSBmdWxsCiAgICogY29udHJvbCBvdmVyIHRoZSBjaGlsZCB6b25lLgogICAqLwogIFpvbmUgZm9yayh7Wm9uZVNwZWNpZmljYXRpb24gc3BlY2lmaWNhdGlvbiwgTWFwIHpvbmVWYWx1ZXN9KTsKCiAgLyoqCiAgICogRXhlY3V0ZXMgW2FjdGlvbl0gaW4gdGhpcyB6b25lLgogICAqCiAgICogQnkgZGVmYXVsdCAoYXMgaW1wbGVtZW50ZWQgaW4gdGhlIFtyb290XSB6b25lKSwgcnVucyBbYWN0aW9uXQogICAqIHdpdGggW2N1cnJlbnRdIHNldCB0byB0aGlzIHpvbmUuCiAgICoKICAgKiBJZiBbYWN0aW9uXSB0aHJvd3MsIHRoZSBzeW5jaHJvbm91cyBleGNlcHRpb24gaXMgbm90IGNhdWdodCBieSB0aGUgem9uZSdzCiAgICogZXJyb3IgaGFuZGxlci4gVXNlIFtydW5HdWFyZGVkXSB0byBhY2hpZXZlIHRoYXQuCiAgICoKICAgKiBTaW5jZSB0aGUgcm9vdCB6b25lIGlzIHRoZSBvbmx5IHpvbmUgdGhhdCBjYW4gbW9kaWZ5IHRoZSB2YWx1ZSBvZgogICAqIFtjdXJyZW50XSwgY3VzdG9tIHpvbmVzIGludGVyY2VwdGluZyBydW4gc2hvdWxkIGFsd2F5cyBkZWxlZ2F0ZSB0byB0aGVpcgogICAqIHBhcmVudCB6b25lLiBUaGV5IG1heSB0YWtlIGFjdGlvbnMgYmVmb3JlIGFuZCBhZnRlciB0aGUgY2FsbC4KICAgKi8KICBSIHJ1bjxSPihSIGFjdGlvbigpKTsKCiAgLyoqCiAgICogRXhlY3V0ZXMgdGhlIGdpdmVuIFthY3Rpb25dIHdpdGggW2FyZ3VtZW50XSBpbiB0aGlzIHpvbmUuCiAgICoKICAgKiBBcyBbcnVuXSBleGNlcHQgdGhhdCBbYWN0aW9uXSBpcyBjYWxsZWQgd2l0aCBvbmUgW2FyZ3VtZW50XSBpbnN0ZWFkIG9mCiAgICogbm9uZS4KICAgKi8KICBSIHJ1blVuYXJ5PFIsIFQ+KFIgYWN0aW9uKFQgYXJndW1lbnQpLCBUIGFyZ3VtZW50KTsKCiAgLyoqCiAgICogRXhlY3V0ZXMgdGhlIGdpdmVuIFthY3Rpb25dIHdpdGggW2FyZ3VtZW50MV0gYW5kIFthcmd1bWVudDJdIGluIHRoaXMKICAgKiB6b25lLgogICAqCiAgICogQXMgW3J1bl0gZXhjZXB0IHRoYXQgW2FjdGlvbl0gaXMgY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50cyBpbnN0ZWFkIG9mIG5vbmUuCiAgICovCiAgUiBydW5CaW5hcnk8UiwgVDEsIFQyPigKICAgICAgUiBhY3Rpb24oVDEgYXJndW1lbnQxLCBUMiBhcmd1bWVudDIpLCBUMSBhcmd1bWVudDEsIFQyIGFyZ3VtZW50Mik7CgogIC8qKgogICAqIEV4ZWN1dGVzIHRoZSBnaXZlbiBbYWN0aW9uXSBpbiB0aGlzIHpvbmUgYW5kIGNhdGNoZXMgc3luY2hyb25vdXMKICAgKiBlcnJvcnMuCiAgICoKICAgKiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG86CiAgICogYGBgCiAgICogdHJ5IHsKICAgKiAgIHRoaXMucnVuKGFjdGlvbik7CiAgICogfSBjYXRjaCAoZSwgcykgewogICAqICAgdGhpcy5oYW5kbGVVbmNhdWdodEVycm9yKGUsIHMpOwogICAqIH0KICAgKiBgYGAKICAgKgogICAqIFNlZSBbcnVuXS4KICAgKi8KICB2b2lkIHJ1bkd1YXJkZWQodm9pZCBhY3Rpb24oKSk7CgogIC8qKgogICAqIEV4ZWN1dGVzIHRoZSBnaXZlbiBbYWN0aW9uXSB3aXRoIFthcmd1bWVudF0gaW4gdGhpcyB6b25lIGFuZAogICAqIGNhdGNoZXMgc3luY2hyb25vdXMgZXJyb3JzLgogICAqCiAgICogU2VlIFtydW5HdWFyZGVkXS4KICAgKi8KICB2b2lkIHJ1blVuYXJ5R3VhcmRlZDxUPih2b2lkIGFjdGlvbihUIGFyZ3VtZW50KSwgVCBhcmd1bWVudCk7CgogIC8qKgogICAqIEV4ZWN1dGVzIHRoZSBnaXZlbiBbYWN0aW9uXSB3aXRoIFthcmd1bWVudDFdIGFuZCBbYXJndW1lbnQyXSBpbiB0aGlzCiAgICogem9uZSBhbmQgY2F0Y2hlcyBzeW5jaHJvbm91cyBlcnJvcnMuCiAgICoKICAgKiBTZWUgW3J1bkd1YXJkZWRdLgogICAqLwogIHZvaWQgcnVuQmluYXJ5R3VhcmRlZDxUMSwgVDI+KAogICAgICB2b2lkIGFjdGlvbihUMSBhcmd1bWVudDEsIFQyIGFyZ3VtZW50MiksIFQxIGFyZ3VtZW50MSwgVDIgYXJndW1lbnQyKTsKCiAgLyoqCiAgICogUmVnaXN0ZXJzIHRoZSBnaXZlbiBjYWxsYmFjayBpbiB0aGlzIHpvbmUuCiAgICoKICAgKiBXaGVuIGltcGxlbWVudGluZyBhbiBhc3luY2hyb25vdXMgcHJpbWl0aXZlIHRoYXQgdXNlcyBjYWxsYmFja3MsIHRoZQogICAqIGNhbGxiYWNrIG11c3QgYmUgcmVnaXN0ZXJlZCB1c2luZyBbcmVnaXN0ZXJDYWxsYmFja10gYXQgdGhlIHBvaW50IHdoZXJlIHRoZQogICAqIHVzZXIgcHJvdmlkZXMgdGhlIGNhbGxiYWNrLiBUaGlzIGFsbG93cyB6b25lcyB0byByZWNvcmQgb3RoZXIgaW5mb3JtYXRpb24KICAgKiB0aGF0IHRoZXkgbmVlZCBhdCB0aGUgc2FtZSB0aW1lLCBwZXJoYXBzIGV2ZW4gd3JhcHBpbmcgdGhlIGNhbGxiYWNrLCBzbwogICAqIHRoYXQgdGhlIGNhbGxiYWNrIGlzIHByZXBhcmVkIHdoZW4gaXQgaXMgbGF0ZXIgcnVuIGluIHRoZSBzYW1lIHpvbmVzCiAgICogKHVzaW5nIFtydW5dKS4gRm9yIGV4YW1wbGUsIGEgem9uZSBtYXkgZGVjaWRlCiAgICogdG8gc3RvcmUgdGhlIHN0YWNrIHRyYWNlIChhdCB0aGUgdGltZSBvZiB0aGUgcmVnaXN0cmF0aW9uKSB3aXRoIHRoZQogICAqIGNhbGxiYWNrLgogICAqCiAgICogUmV0dXJucyB0aGUgY2FsbGJhY2sgdGhhdCBzaG91bGQgYmUgdXNlZCBpbiBwbGFjZSBvZiB0aGUgcHJvdmlkZWQKICAgKiBbY2FsbGJhY2tdLiBGcmVxdWVudGx5IHpvbmVzIHNpbXBseSByZXR1cm4gdGhlIG9yaWdpbmFsIGNhbGxiYWNrLgogICAqCiAgICogQ3VzdG9tIHpvbmVzIG1heSBpbnRlcmNlcHQgdGhpcyBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGluCiAgICogW1pvbmUucm9vdF0gcmV0dXJucyB0aGUgb3JpZ2luYWwgY2FsbGJhY2sgdW5jaGFuZ2VkLgogICAqLwogIFpvbmVDYWxsYmFjazxSPiByZWdpc3RlckNhbGxiYWNrPFI+KFIgY2FsbGJhY2soKSk7CgogIC8qKgogICAqIFJlZ2lzdGVycyB0aGUgZ2l2ZW4gY2FsbGJhY2sgaW4gdGhpcyB6b25lLgogICAqCiAgICogU2ltaWxhciB0byBbcmVnaXN0ZXJDYWxsYmFja10gYnV0IHdpdGggYSB1bmFyeSBjYWxsYmFjay4KICAgKi8KICBab25lVW5hcnlDYWxsYmFjazxSLCBUPiByZWdpc3RlclVuYXJ5Q2FsbGJhY2s8UiwgVD4oUiBjYWxsYmFjayhUIGFyZykpOwoKICAvKioKICAgKiBSZWdpc3RlcnMgdGhlIGdpdmVuIGNhbGxiYWNrIGluIHRoaXMgem9uZS4KICAgKgogICAqIFNpbWlsYXIgdG8gW3JlZ2lzdGVyQ2FsbGJhY2tdIGJ1dCB3aXRoIGEgdW5hcnkgY2FsbGJhY2suCiAgICovCiAgWm9uZUJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4gcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KAogICAgICBSIGNhbGxiYWNrKFQxIGFyZzEsIFQyIGFyZzIpKTsKCiAgLyoqCiAgICogIFJlZ2lzdGVycyB0aGUgcHJvdmlkZWQgW2NhbGxiYWNrXSBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbAogICAqICBleGVjdXRlIGluIHRoaXMgem9uZS4KICAgKgogICAqICBFcXVpdmFsZW50IHRvOgogICAqCiAgICogICAgICBab25lQ2FsbGJhY2sgcmVnaXN0ZXJlZCA9IHRoaXMucmVnaXN0ZXJDYWxsYmFjayhjYWxsYmFjayk7CiAgICogICAgICByZXR1cm4gKCkgPT4gdGhpcy5ydW4ocmVnaXN0ZXJlZCk7CiAgICoKICAgKi8KICBab25lQ2FsbGJhY2s8Uj4gYmluZENhbGxiYWNrPFI+KFIgY2FsbGJhY2soKSk7CgogIC8qKgogICAqICBSZWdpc3RlcnMgdGhlIHByb3ZpZGVkIFtjYWxsYmFja10gYW5kIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwKICAgKiAgZXhlY3V0ZSBpbiB0aGlzIHpvbmUuCiAgICoKICAgKiAgRXF1aXZhbGVudCB0bzoKICAgKgogICAqICAgICAgWm9uZUNhbGxiYWNrIHJlZ2lzdGVyZWQgPSB0aGlzLnJlZ2lzdGVyVW5hcnlDYWxsYmFjayhjYWxsYmFjayk7CiAgICogICAgICByZXR1cm4gKGFyZykgPT4gdGhpbi5ydW5VbmFyeShyZWdpc3RlcmVkLCBhcmcpOwogICAqLwogIFpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+IGJpbmRVbmFyeUNhbGxiYWNrPFIsIFQ+KFIgY2FsbGJhY2soVCBhcmd1bWVudCkpOwoKICAvKioKICAgKiAgUmVnaXN0ZXJzIHRoZSBwcm92aWRlZCBbY2FsbGJhY2tdIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsCiAgICogIGV4ZWN1dGUgaW4gdGhpcyB6b25lLgogICAqCiAgICogIEVxdWl2YWxlbnQgdG86CiAgICoKICAgKiAgICAgIFpvbmVDYWxsYmFjayByZWdpc3RlcmVkID0gcmVnaXN0ZXJCaW5hcnlDYWxsYmFjayhjYWxsYmFjayk7CiAgICogICAgICByZXR1cm4gKGFyZzEsIGFyZzIpID0+IHRoaW4ucnVuQmluYXJ5KHJlZ2lzdGVyZWQsIGFyZzEsIGFyZzIpOwogICAqLwogIFpvbmVCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+IGJpbmRCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KAogICAgICBSIGNhbGxiYWNrKFQxIGFyZ3VtZW50MSwgVDIgYXJndW1lbnQyKSk7CgogIC8qKgogICAqIFJlZ2lzdGVycyB0aGUgcHJvdmlkZWQgW2NhbGxiYWNrXSBhbmQgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgd2lsbAogICAqIGV4ZWN1dGUgaW4gdGhpcyB6b25lLgogICAqCiAgICogV2hlbiB0aGUgZnVuY3Rpb24gZXhlY3V0ZXMsIGVycm9ycyBhcmUgY2F1Z2h0IGFuZCB0cmVhdGVkIGFzIHVuY2F1Z2h0CiAgICogZXJyb3JzLgogICAqCiAgICogRXF1aXZhbGVudCB0bzoKICAgKgogICAqICAgICBab25lQ2FsbGJhY2sgcmVnaXN0ZXJlZCA9IHRoaXMucmVnaXN0ZXJDYWxsYmFjayhjYWxsYmFjayk7CiAgICogICAgIHJldHVybiAoKSA9PiB0aGlzLnJ1bkd1YXJkZWQocmVnaXN0ZXJlZCk7CiAgICoKICAgKi8KICB2b2lkIEZ1bmN0aW9uKCkgYmluZENhbGxiYWNrR3VhcmRlZCh2b2lkIGNhbGxiYWNrKCkpOwoKICAvKioKICAgKiBSZWdpc3RlcnMgdGhlIHByb3ZpZGVkIFtjYWxsYmFja10gYW5kIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IHdpbGwKICAgKiBleGVjdXRlIGluIHRoaXMgem9uZS4KICAgKgogICAqIFdoZW4gdGhlIGZ1bmN0aW9uIGV4ZWN1dGVzLCBlcnJvcnMgYXJlIGNhdWdodCBhbmQgdHJlYXRlZCBhcyB1bmNhdWdodAogICAqIGVycm9ycy4KICAgKgogICAqIEVxdWl2YWxlbnQgdG86CiAgICoKICAgKiAgICAgWm9uZUNhbGxiYWNrIHJlZ2lzdGVyZWQgPSB0aGlzLnJlZ2lzdGVyVW5hcnlDYWxsYmFjayhjYWxsYmFjayk7CiAgICogICAgIHJldHVybiAoYXJnKSA9PiB0aGlzLnJ1blVuYXJ5R3VhcmRlZChyZWdpc3RlcmVkLCBhcmcpOwogICAqLwogIHZvaWQgRnVuY3Rpb24oVCkgYmluZFVuYXJ5Q2FsbGJhY2tHdWFyZGVkPFQ+KHZvaWQgY2FsbGJhY2soVCBhcmd1bWVudCkpOwoKICAvKioKICAgKiAgUmVnaXN0ZXJzIHRoZSBwcm92aWRlZCBbY2FsbGJhY2tdIGFuZCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCB3aWxsCiAgICogIGV4ZWN1dGUgaW4gdGhpcyB6b25lLgogICAqCiAgICogIEVxdWl2YWxlbnQgdG86CiAgICoKICAgKiAgICAgIFpvbmVDYWxsYmFjayByZWdpc3RlcmVkID0gcmVnaXN0ZXJCaW5hcnlDYWxsYmFjayhjYWxsYmFjayk7CiAgICogICAgICByZXR1cm4gKGFyZzEsIGFyZzIpID0+IHRoaXMucnVuQmluYXJ5R3VhcmRlZChyZWdpc3RlcmVkLCBhcmcxLCBhcmcyKTsKICAgKi8KICB2b2lkIEZ1bmN0aW9uKFQxLCBUMikgYmluZEJpbmFyeUNhbGxiYWNrR3VhcmRlZDxUMSwgVDI+KAogICAgICB2b2lkIGNhbGxiYWNrKFQxIGFyZ3VtZW50MSwgVDIgYXJndW1lbnQyKSk7CgogIC8qKgogICAqIEludGVyY2VwdHMgZXJyb3JzIHdoZW4gYWRkZWQgcHJvZ3JhbW1hdGljYWxseSB0byBhIGBGdXR1cmVgIG9yIGBTdHJlYW1gLgogICAqCiAgICogV2hlbiBjYWxsaW5nIFtDb21wbGV0ZXIuY29tcGxldGVFcnJvcl0sIFtTdHJlYW1Db250cm9sbGVyLmFkZEVycm9yXSwKICAgKiBvciBzb21lIFtGdXR1cmVdIGNvbnN0cnVjdG9ycywgdGhlIGN1cnJlbnQgem9uZSBpcyBhbGxvd2VkIHRvIGludGVyY2VwdAogICAqIGFuZCByZXBsYWNlIHRoZSBlcnJvci4KICAgKgogICAqIEZ1dHVyZSBjb25zdHJ1Y3RvcnMgaW52b2tlIHRoaXMgZnVuY3Rpb24gd2hlbiB0aGUgZXJyb3IgaXMgcmVjZWl2ZWQKICAgKiBkaXJlY3RseSwgZm9yIGV4YW1wbGUgd2l0aCBbRnV0dXJlLmVycm9yXSwgb3Igd2hlbiB0aGUgZXJyb3IgaXMgY2F1Z2h0CiAgICogc3luY2hyb25vdXNseSwgZm9yIGV4YW1wbGUgd2l0aCBbRnV0dXJlLnN5bmNdLgogICAqCiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYW4gZXJyb3IgaXMgb25seSBzZW50IHRocm91Z2ggW2Vycm9yQ2FsbGJhY2tdCiAgICogb25jZS4gTGlicmFyaWVzIHRoYXQgdXNlIGludGVybWVkaWF0ZSBjb250cm9sbGVycyBvciBjb21wbGV0ZXJzIG1pZ2h0CiAgICogZW5kIHVwIGludm9raW5nIFtlcnJvckNhbGxiYWNrXSBtdWx0aXBsZSB0aW1lcy4KICAgKgogICAqIFJldHVybnMgYG51bGxgIGlmIG5vIHJlcGxhY2VtZW50IGlzIGRlc2lyZWQuIE90aGVyd2lzZSByZXR1cm5zIGFuIGluc3RhbmNlCiAgICogb2YgW0FzeW5jRXJyb3JdIGhvbGRpbmcgdGhlIG5ldyBwYWlyIG9mIGVycm9yIGFuZCBzdGFjayB0cmFjZS4KICAgKgogICAqIEFsdGhvdWdoIG5vdCByZWNvbW1lbmRlZCwgdGhlIHJldHVybmVkIGluc3RhbmNlIG1heSBoYXZlIGl0cyBgZXJyb3JgIG1lbWJlcgogICAqIChbQXN5bmNFcnJvci5lcnJvcl0pIGJlIGVxdWFsIHRvIGBudWxsYCBpbiB3aGljaCBjYXNlIHRoZSBlcnJvciBzaG91bGQgYmUKICAgKiByZXBsYWNlZCBieSBhIFtOdWxsVGhyb3duRXJyb3JdLgogICAqCiAgICogQ3VzdG9tIHpvbmVzIG1heSBpbnRlcmNlcHQgdGhpcyBvcGVyYXRpb24uCiAgICoKICAgKiBJbXBsZW1lbnRhdGlvbnMgb2YgYSBuZXcgYXN5bmNocm9ub3VzIHByaW1pdGl2ZSB0aGF0IGNvbnZlcnRzIHN5bmNocm9ub3VzCiAgICogZXJyb3JzIHRvIGFzeW5jaHJvbm91cyBlcnJvcnMgcmFyZWx5IG5lZWQgdG8gaW52b2tlIFtlcnJvckNhbGxiYWNrXSwgc2luY2UKICAgKiBlcnJvcnMgYXJlIHVzdWFsbHkgcmVwb3J0ZWQgdGhyb3VnaCBmdXR1cmUgY29tcGxldGVycyBvciBzdHJlYW0KICAgKiBjb250cm9sbGVycy4KICAgKi8KICBBc3luY0Vycm9yIGVycm9yQ2FsbGJhY2soT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpOwoKICAvKioKICAgKiBSdW5zIFtjYWxsYmFja10gYXN5bmNocm9ub3VzbHkgaW4gdGhpcyB6b25lLgogICAqCiAgICogVGhlIGdsb2JhbCBgc2NoZWR1bGVNaWNyb3Rhc2tgIGRlbGVnYXRlcyB0byB0aGUgY3VycmVudCB6b25lJ3MKICAgKiBbc2NoZWR1bGVNaWNyb3Rhc2tdLiBUaGUgcm9vdCB6b25lJ3MgaW1wbGVtZW50YXRpb24gaW50ZXJhY3RzIHdpdGggdGhlCiAgICogdW5kZXJseWluZyBzeXN0ZW0gdG8gc2NoZWR1bGUgdGhlIGdpdmVuIGNhbGxiYWNrIGFzIGEgbWljcm90YXNrLgogICAqCiAgICogQ3VzdG9tIHpvbmVzIG1heSBpbnRlcmNlcHQgdGhpcyBvcGVyYXRpb24gKGZvciBleGFtcGxlIHRvIHdyYXAgdGhlIGdpdmVuCiAgICogW2NhbGxiYWNrXSkuCiAgICovCiAgdm9pZCBzY2hlZHVsZU1pY3JvdGFzayh2b2lkIGNhbGxiYWNrKCkpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgVGltZXIgd2hlcmUgdGhlIGNhbGxiYWNrIGlzIGV4ZWN1dGVkIGluIHRoaXMgem9uZS4KICAgKi8KICBUaW1lciBjcmVhdGVUaW1lcihEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBjYWxsYmFjaygpKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIHBlcmlvZGljIFRpbWVyIHdoZXJlIHRoZSBjYWxsYmFjayBpcyBleGVjdXRlZCBpbiB0aGlzIHpvbmUuCiAgICovCiAgVGltZXIgY3JlYXRlUGVyaW9kaWNUaW1lcihEdXJhdGlvbiBwZXJpb2QsIHZvaWQgY2FsbGJhY2soVGltZXIgdGltZXIpKTsKCiAgLyoqCiAgICogUHJpbnRzIHRoZSBnaXZlbiBbbGluZV0uCiAgICoKICAgKiBUaGUgZ2xvYmFsIGBwcmludGAgZnVuY3Rpb24gZGVsZWdhdGVzIHRvIHRoZSBjdXJyZW50IHpvbmUncyBbcHJpbnRdCiAgICogZnVuY3Rpb24gd2hpY2ggbWFrZXMgaXQgcG9zc2libGUgdG8gaW50ZXJjZXB0IHByaW50aW5nLgogICAqCiAgICogRXhhbXBsZToKICAgKiBgYGAKICAgKiBpbXBvcnQgJ2RhcnQ6YXN5bmMnOwogICAqCiAgICogbWFpbigpIHsKICAgKiAgIHJ1blpvbmVkKCgpIHsKICAgKiAgICAgLy8gRW5kcyB1cCBwcmludGluZzogIkludGVyY2VwdGVkOiBpbiB6b25lIi4KICAgKiAgICAgcHJpbnQoImluIHpvbmUiKTsKICAgKiAgIH0sIHpvbmVTcGVjaWZpY2F0aW9uOiBuZXcgWm9uZVNwZWNpZmljYXRpb24oCiAgICogICAgICAgcHJpbnQ6IChab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgU3RyaW5nIGxpbmUpIHsKICAgKiAgICAgcGFyZW50LnByaW50KHpvbmUsICJJbnRlcmNlcHRlZDogJGxpbmUiKTsKICAgKiAgIH0pKTsKICAgKiB9CiAgICogYGBgCiAgICovCiAgdm9pZCBwcmludChTdHJpbmcgbGluZSk7CgogIC8qKgogICAqIENhbGwgdG8gZW50ZXIgdGhlIFpvbmUuCiAgICoKICAgKiBUaGUgcHJldmlvdXMgY3VycmVudCB6b25lIGlzIHJldHVybmVkLgogICAqLwogIHN0YXRpYyBab25lIF9lbnRlcihab25lIHpvbmUpIHsKICAgIGFzc2VydCh6b25lICE9IG51bGwpOwogICAgYXNzZXJ0KCFpZGVudGljYWwoem9uZSwgX2N1cnJlbnQpKTsKICAgIFpvbmUgcHJldmlvdXMgPSBfY3VycmVudDsKICAgIF9jdXJyZW50ID0gem9uZTsKICAgIHJldHVybiBwcmV2aW91czsKICB9CgogIC8qKgogICAqIENhbGwgdG8gbGVhdmUgdGhlIFpvbmUuCiAgICoKICAgKiBUaGUgcHJldmlvdXMgWm9uZSBtdXN0IGJlIHByb3ZpZGVkIGFzIGBwcmV2aW91c2AuCiAgICovCiAgc3RhdGljIHZvaWQgX2xlYXZlKFpvbmUgcHJldmlvdXMpIHsKICAgIGFzc2VydChwcmV2aW91cyAhPSBudWxsKTsKICAgIFpvbmUuX2N1cnJlbnQgPSBwcmV2aW91czsKICB9CgogIC8qKgogICAqIFJldHJpZXZlcyB0aGUgem9uZS12YWx1ZSBhc3NvY2lhdGVkIHdpdGggW2tleV0uCiAgICoKICAgKiBJZiB0aGlzIHpvbmUgZG9lcyBub3QgY29udGFpbiB0aGUgdmFsdWUgbG9va3MgdXAgdGhlIHNhbWUga2V5IGluIHRoZQogICAqIHBhcmVudCB6b25lLiBJZiB0aGUgW2tleV0gaXMgbm90IGZvdW5kIHJldHVybnMgYG51bGxgLgogICAqCiAgICogQW55IG9iamVjdCBjYW4gYmUgdXNlZCBhcyBrZXksIGFzIGxvbmcgYXMgaXQgaGFzIGNvbXBhdGlibGUgYG9wZXJhdG9yID09YAogICAqIGFuZCBgaGFzaENvZGVgIGltcGxlbWVudGF0aW9ucy4KICAgKiBCeSBjb250cm9sbGluZyBhY2Nlc3MgdG8gdGhlIGtleSwgYSB6b25lIGNhbiBncmFudCBvciBkZW55IGFjY2VzcyB0byB0aGUKICAgKiB6b25lIHZhbHVlLgogICAqLwogIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpOwp9Cgpab25lRGVsZWdhdGUgX3BhcmVudERlbGVnYXRlKF9ab25lIHpvbmUpIHsKICBpZiAoem9uZS5wYXJlbnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgcmV0dXJuIHpvbmUucGFyZW50Ll9kZWxlZ2F0ZTsKfQoKY2xhc3MgX1pvbmVEZWxlZ2F0ZSBpbXBsZW1lbnRzIFpvbmVEZWxlZ2F0ZSB7CiAgZmluYWwgX1pvbmUgX2RlbGVnYXRpb25UYXJnZXQ7CgogIF9ab25lRGVsZWdhdGUodGhpcy5fZGVsZWdhdGlvblRhcmdldCk7CgogIHZvaWQgaGFuZGxlVW5jYXVnaHRFcnJvcihab25lIHpvbmUsIGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9oYW5kbGVVbmNhdWdodEVycm9yOwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgSGFuZGxlVW5jYXVnaHRFcnJvckhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoCiAgICAgICAgaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIFIgcnVuPFI+KFpvbmUgem9uZSwgUiBmKCkpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9ydW47CiAgICBfWm9uZSBpbXBsWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBSdW5IYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBmKTsKICB9CgogIFIgcnVuVW5hcnk8UiwgVD4oWm9uZSB6b25lLCBSIGYoVCBhcmcpLCBUIGFyZykgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gX2RlbGVnYXRpb25UYXJnZXQuX3J1blVuYXJ5OwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgUnVuVW5hcnlIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBmLCBhcmcpOwogIH0KCiAgUiBydW5CaW5hcnk8UiwgVDEsIFQyPihab25lIHpvbmUsIFIgZihUMSBhcmcxLCBUMiBhcmcyKSwgVDEgYXJnMSwgVDIgYXJnMikgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gX2RlbGVnYXRpb25UYXJnZXQuX3J1bkJpbmFyeTsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIFJ1bkJpbmFyeUhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIGYsIGFyZzEsIGFyZzIpOwogIH0KCiAgWm9uZUNhbGxiYWNrPFI+IHJlZ2lzdGVyQ2FsbGJhY2s8Uj4oWm9uZSB6b25lLCBSIGYoKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gX2RlbGVnYXRpb25UYXJnZXQuX3JlZ2lzdGVyQ2FsbGJhY2s7CiAgICBfWm9uZSBpbXBsWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBSZWdpc3RlckNhbGxiYWNrSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsWm9uZSwgX3BhcmVudERlbGVnYXRlKGltcGxab25lKSwgem9uZSwgZik7CiAgfQoKICBab25lVW5hcnlDYWxsYmFjazxSLCBUPiByZWdpc3RlclVuYXJ5Q2FsbGJhY2s8UiwgVD4oWm9uZSB6b25lLCBSIGYoVCBhcmcpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fcmVnaXN0ZXJVbmFyeUNhbGxiYWNrOwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgUmVnaXN0ZXJVbmFyeUNhbGxiYWNrSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsWm9uZSwgX3BhcmVudERlbGVnYXRlKGltcGxab25lKSwgem9uZSwgZik7CiAgfQoKICBab25lQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPiByZWdpc3RlckJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4oCiAgICAgIFpvbmUgem9uZSwgUiBmKFQxIGFyZzEsIFQyIGFyZzIpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIFJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBmKTsKICB9CgogIEFzeW5jRXJyb3IgZXJyb3JDYWxsYmFjayhab25lIHpvbmUsIE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fZXJyb3JDYWxsYmFjazsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIGlmIChpZGVudGljYWwoaW1wbFpvbmUsIF9yb290Wm9uZSkpIHJldHVybiBudWxsOwogICAgRXJyb3JDYWxsYmFja0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoCiAgICAgICAgaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgc2NoZWR1bGVNaWNyb3Rhc2soWm9uZSB6b25lLCBmKCkpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9zY2hlZHVsZU1pY3JvdGFzazsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIFNjaGVkdWxlTWljcm90YXNrSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICBoYW5kbGVyKGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBmKTsKICB9CgogIFRpbWVyIGNyZWF0ZVRpbWVyKFpvbmUgem9uZSwgRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgZigpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fY3JlYXRlVGltZXI7CiAgICBfWm9uZSBpbXBsWm9uZSA9IGltcGxlbWVudGF0aW9uLnpvbmU7CiAgICBDcmVhdGVUaW1lckhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIGR1cmF0aW9uLCBmKTsKICB9CgogIFRpbWVyIGNyZWF0ZVBlcmlvZGljVGltZXIoWm9uZSB6b25lLCBEdXJhdGlvbiBwZXJpb2QsIHZvaWQgZihUaW1lciB0aW1lcikpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9jcmVhdGVQZXJpb2RpY1RpbWVyOwogICAgX1pvbmUgaW1wbFpvbmUgPSBpbXBsZW1lbnRhdGlvbi56b25lOwogICAgQ3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbFpvbmUsIF9wYXJlbnREZWxlZ2F0ZShpbXBsWm9uZSksIHpvbmUsIHBlcmlvZCwgZik7CiAgfQoKICB2b2lkIHByaW50KFpvbmUgem9uZSwgU3RyaW5nIGxpbmUpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IF9kZWxlZ2F0aW9uVGFyZ2V0Ll9wcmludDsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIFByaW50SGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICBoYW5kbGVyKGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBsaW5lKTsKICB9CgogIFpvbmUgZm9yayhab25lIHpvbmUsIFpvbmVTcGVjaWZpY2F0aW9uIHNwZWNpZmljYXRpb24sIE1hcCB6b25lVmFsdWVzKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSBfZGVsZWdhdGlvblRhcmdldC5fZm9yazsKICAgIF9ab25lIGltcGxab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIEZvcmtIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKAogICAgICAgIGltcGxab25lLCBfcGFyZW50RGVsZWdhdGUoaW1wbFpvbmUpLCB6b25lLCBzcGVjaWZpY2F0aW9uLCB6b25lVmFsdWVzKTsKICB9Cn0KCi8qKgogKiBCYXNlIGNsYXNzIGZvciBab25lIGltcGxlbWVudGF0aW9ucy4KICovCmFic3RyYWN0IGNsYXNzIF9ab25lIGltcGxlbWVudHMgWm9uZSB7CiAgY29uc3QgX1pvbmUoKTsKCiAgLy8gVE9ETyhmbG9pdHNjaCk6IHRoZSB0eXBlcyBvZiB0aGUgYF9ab25lRnVuY3Rpb25gcyBzaG91bGQgaGF2ZSBhIHR5cGUgZm9yCiAgLy8gYWxsIGZpZWxkcy4KICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3J1bjsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3J1blVuYXJ5OwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IGdldCBfcnVuQmluYXJ5OwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IGdldCBfcmVnaXN0ZXJDYWxsYmFjazsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3JlZ2lzdGVyVW5hcnlDYWxsYmFjazsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3JlZ2lzdGVyQmluYXJ5Q2FsbGJhY2s7CiAgX1pvbmVGdW5jdGlvbjxFcnJvckNhbGxiYWNrSGFuZGxlcj4gZ2V0IF9lcnJvckNhbGxiYWNrOwogIF9ab25lRnVuY3Rpb248U2NoZWR1bGVNaWNyb3Rhc2tIYW5kbGVyPiBnZXQgX3NjaGVkdWxlTWljcm90YXNrOwogIF9ab25lRnVuY3Rpb248Q3JlYXRlVGltZXJIYW5kbGVyPiBnZXQgX2NyZWF0ZVRpbWVyOwogIF9ab25lRnVuY3Rpb248Q3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXI+IGdldCBfY3JlYXRlUGVyaW9kaWNUaW1lcjsKICBfWm9uZUZ1bmN0aW9uPFByaW50SGFuZGxlcj4gZ2V0IF9wcmludDsKICBfWm9uZUZ1bmN0aW9uPEZvcmtIYW5kbGVyPiBnZXQgX2Zvcms7CiAgX1pvbmVGdW5jdGlvbjxIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlcj4gZ2V0IF9oYW5kbGVVbmNhdWdodEVycm9yOwogIF9ab25lIGdldCBwYXJlbnQ7CiAgWm9uZURlbGVnYXRlIGdldCBfZGVsZWdhdGU7CiAgTWFwIGdldCBfbWFwOwoKICBib29sIGluU2FtZUVycm9yWm9uZShab25lIG90aGVyWm9uZSkgewogICAgcmV0dXJuIGlkZW50aWNhbCh0aGlzLCBvdGhlclpvbmUpIHx8CiAgICAgICAgaWRlbnRpY2FsKGVycm9yWm9uZSwgb3RoZXJab25lLmVycm9yWm9uZSk7CiAgfQp9CgpjbGFzcyBfQ3VzdG9tWm9uZSBleHRlbmRzIF9ab25lIHsKICAvLyBUaGUgYWN0dWFsIHpvbmUgYW5kIGltcGxlbWVudGF0aW9uIG9mIGVhY2ggb2YgdGhlc2UKICAvLyBpbmhlcml0YWJsZSB6b25lIGZ1bmN0aW9ucy4KICAvLyBUT0RPKGZsb2l0c2NoKTogdGhlIHR5cGVzIG9mIHRoZSBgX1pvbmVGdW5jdGlvbmBzIHNob3VsZCBoYXZlIGEgdHlwZSBmb3IKICAvLyBhbGwgZmllbGRzLgogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IF9ydW47CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gX3J1blVuYXJ5OwogIF9ab25lRnVuY3Rpb248RnVuY3Rpb24+IF9ydW5CaW5hcnk7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gX3JlZ2lzdGVyQ2FsbGJhY2s7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gX3JlZ2lzdGVyVW5hcnlDYWxsYmFjazsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBfcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazsKICBfWm9uZUZ1bmN0aW9uPEVycm9yQ2FsbGJhY2tIYW5kbGVyPiBfZXJyb3JDYWxsYmFjazsKICBfWm9uZUZ1bmN0aW9uPFNjaGVkdWxlTWljcm90YXNrSGFuZGxlcj4gX3NjaGVkdWxlTWljcm90YXNrOwogIF9ab25lRnVuY3Rpb248Q3JlYXRlVGltZXJIYW5kbGVyPiBfY3JlYXRlVGltZXI7CiAgX1pvbmVGdW5jdGlvbjxDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlcj4gX2NyZWF0ZVBlcmlvZGljVGltZXI7CiAgX1pvbmVGdW5jdGlvbjxQcmludEhhbmRsZXI+IF9wcmludDsKICBfWm9uZUZ1bmN0aW9uPEZvcmtIYW5kbGVyPiBfZm9yazsKICBfWm9uZUZ1bmN0aW9uPEhhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyPiBfaGFuZGxlVW5jYXVnaHRFcnJvcjsKCiAgLy8gQSBjYWNoZWQgZGVsZWdhdGUgdG8gdGhpcyB6b25lLgogIFpvbmVEZWxlZ2F0ZSBfZGVsZWdhdGVDYWNoZTsKCiAgLy8vIFRoZSBwYXJlbnQgem9uZS4KICBmaW5hbCBfWm9uZSBwYXJlbnQ7CgogIC8vLyBUaGUgem9uZSdzIHNjb3BlZCB2YWx1ZSBkZWNsYXJhdGlvbiBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYWx3YXlzIGEgW0hhc2hNYXBdLgogIGZpbmFsIE1hcCBfbWFwOwoKICBab25lRGVsZWdhdGUgZ2V0IF9kZWxlZ2F0ZSB7CiAgICBpZiAoX2RlbGVnYXRlQ2FjaGUgIT0gbnVsbCkgcmV0dXJuIF9kZWxlZ2F0ZUNhY2hlOwogICAgX2RlbGVnYXRlQ2FjaGUgPSBuZXcgX1pvbmVEZWxlZ2F0ZSh0aGlzKTsKICAgIHJldHVybiBfZGVsZWdhdGVDYWNoZTsKICB9CgogIF9DdXN0b21ab25lKHRoaXMucGFyZW50LCBab25lU3BlY2lmaWNhdGlvbiBzcGVjaWZpY2F0aW9uLCB0aGlzLl9tYXApIHsKICAgIC8vIFRoZSByb290IHpvbmUgd2lsbCBoYXZlIGltcGxlbWVudGF0aW9ucyBvZiBhbGwgcGFydHMgb2YgdGhlCiAgICAvLyBzcGVjaWZpY2F0aW9uLCBzbyBpdCB3aWxsIG5ldmVyIHRyeSB0byBhY2Nlc3MgdGhlIChudWxsKSBwYXJlbnQuCiAgICAvLyBBbGwgb3RoZXIgem9uZXMgaGF2ZSBhIG5vbi1udWxsIHBhcmVudC4KICAgIF9ydW4gPSAoc3BlY2lmaWNhdGlvbi5ydW4gIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPih0aGlzLCBzcGVjaWZpY2F0aW9uLnJ1bikKICAgICAgICA6IHBhcmVudC5fcnVuOwogICAgX3J1blVuYXJ5ID0gKHNwZWNpZmljYXRpb24ucnVuVW5hcnkgIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPih0aGlzLCBzcGVjaWZpY2F0aW9uLnJ1blVuYXJ5KQogICAgICAgIDogcGFyZW50Ll9ydW5VbmFyeTsKICAgIF9ydW5CaW5hcnkgPSAoc3BlY2lmaWNhdGlvbi5ydW5CaW5hcnkgIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPih0aGlzLCBzcGVjaWZpY2F0aW9uLnJ1bkJpbmFyeSkKICAgICAgICA6IHBhcmVudC5fcnVuQmluYXJ5OwogICAgX3JlZ2lzdGVyQ2FsbGJhY2sgPSAoc3BlY2lmaWNhdGlvbi5yZWdpc3RlckNhbGxiYWNrICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4odGhpcywgc3BlY2lmaWNhdGlvbi5yZWdpc3RlckNhbGxiYWNrKQogICAgICAgIDogcGFyZW50Ll9yZWdpc3RlckNhbGxiYWNrOwogICAgX3JlZ2lzdGVyVW5hcnlDYWxsYmFjayA9IChzcGVjaWZpY2F0aW9uLnJlZ2lzdGVyVW5hcnlDYWxsYmFjayAhPSBudWxsKQogICAgICAgID8gbmV3IF9ab25lRnVuY3Rpb248RnVuY3Rpb24+KHRoaXMsIHNwZWNpZmljYXRpb24ucmVnaXN0ZXJVbmFyeUNhbGxiYWNrKQogICAgICAgIDogcGFyZW50Ll9yZWdpc3RlclVuYXJ5Q2FsbGJhY2s7CiAgICBfcmVnaXN0ZXJCaW5hcnlDYWxsYmFjayA9IChzcGVjaWZpY2F0aW9uLnJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2sgIT0gbnVsbCkKICAgICAgICA/IG5ldyBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPigKICAgICAgICAgICAgdGhpcywgc3BlY2lmaWNhdGlvbi5yZWdpc3RlckJpbmFyeUNhbGxiYWNrKQogICAgICAgIDogcGFyZW50Ll9yZWdpc3RlckJpbmFyeUNhbGxiYWNrOwogICAgX2Vycm9yQ2FsbGJhY2sgPSAoc3BlY2lmaWNhdGlvbi5lcnJvckNhbGxiYWNrICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxFcnJvckNhbGxiYWNrSGFuZGxlcj4oCiAgICAgICAgICAgIHRoaXMsIHNwZWNpZmljYXRpb24uZXJyb3JDYWxsYmFjaykKICAgICAgICA6IHBhcmVudC5fZXJyb3JDYWxsYmFjazsKICAgIF9zY2hlZHVsZU1pY3JvdGFzayA9IChzcGVjaWZpY2F0aW9uLnNjaGVkdWxlTWljcm90YXNrICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXI+KAogICAgICAgICAgICB0aGlzLCBzcGVjaWZpY2F0aW9uLnNjaGVkdWxlTWljcm90YXNrKQogICAgICAgIDogcGFyZW50Ll9zY2hlZHVsZU1pY3JvdGFzazsKICAgIF9jcmVhdGVUaW1lciA9IChzcGVjaWZpY2F0aW9uLmNyZWF0ZVRpbWVyICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxDcmVhdGVUaW1lckhhbmRsZXI+KHRoaXMsIHNwZWNpZmljYXRpb24uY3JlYXRlVGltZXIpCiAgICAgICAgOiBwYXJlbnQuX2NyZWF0ZVRpbWVyOwogICAgX2NyZWF0ZVBlcmlvZGljVGltZXIgPSAoc3BlY2lmaWNhdGlvbi5jcmVhdGVQZXJpb2RpY1RpbWVyICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlcj4oCiAgICAgICAgICAgIHRoaXMsIHNwZWNpZmljYXRpb24uY3JlYXRlUGVyaW9kaWNUaW1lcikKICAgICAgICA6IHBhcmVudC5fY3JlYXRlUGVyaW9kaWNUaW1lcjsKICAgIF9wcmludCA9IChzcGVjaWZpY2F0aW9uLnByaW50ICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxQcmludEhhbmRsZXI+KHRoaXMsIHNwZWNpZmljYXRpb24ucHJpbnQpCiAgICAgICAgOiBwYXJlbnQuX3ByaW50OwogICAgX2ZvcmsgPSAoc3BlY2lmaWNhdGlvbi5mb3JrICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxGb3JrSGFuZGxlcj4odGhpcywgc3BlY2lmaWNhdGlvbi5mb3JrKQogICAgICAgIDogcGFyZW50Ll9mb3JrOwogICAgX2hhbmRsZVVuY2F1Z2h0RXJyb3IgPSAoc3BlY2lmaWNhdGlvbi5oYW5kbGVVbmNhdWdodEVycm9yICE9IG51bGwpCiAgICAgICAgPyBuZXcgX1pvbmVGdW5jdGlvbjxIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlcj4oCiAgICAgICAgICAgIHRoaXMsIHNwZWNpZmljYXRpb24uaGFuZGxlVW5jYXVnaHRFcnJvcikKICAgICAgICA6IHBhcmVudC5faGFuZGxlVW5jYXVnaHRFcnJvcjsKICB9CgogIC8qKgogICAqIFRoZSBjbG9zZXN0IGVycm9yLWhhbmRsaW5nIHpvbmUuCiAgICoKICAgKiBSZXR1cm5zIGB0aGlzYCBpZiBgdGhpc2AgaGFzIGFuIGVycm9yLWhhbmRsZXIuIE90aGVyd2lzZSByZXR1cm5zIHRoZQogICAqIHBhcmVudCdzIGVycm9yLXpvbmUuCiAgICovCiAgWm9uZSBnZXQgZXJyb3Jab25lID0+IF9oYW5kbGVVbmNhdWdodEVycm9yLnpvbmU7CgogIHZvaWQgcnVuR3VhcmRlZCh2b2lkIGYoKSkgewogICAgdHJ5IHsKICAgICAgcnVuKGYpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBoYW5kbGVVbmNhdWdodEVycm9yKGUsIHMpOwogICAgfQogIH0KCiAgdm9pZCBydW5VbmFyeUd1YXJkZWQ8VD4odm9pZCBmKFQgYXJnKSwgVCBhcmcpIHsKICAgIHRyeSB7CiAgICAgIHJ1blVuYXJ5KGYsIGFyZyk7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIGhhbmRsZVVuY2F1Z2h0RXJyb3IoZSwgcyk7CiAgICB9CiAgfQoKICB2b2lkIHJ1bkJpbmFyeUd1YXJkZWQ8VDEsIFQyPih2b2lkIGYoVDEgYXJnMSwgVDIgYXJnMiksIFQxIGFyZzEsIFQyIGFyZzIpIHsKICAgIHRyeSB7CiAgICAgIHJ1bkJpbmFyeShmLCBhcmcxLCBhcmcyKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgaGFuZGxlVW5jYXVnaHRFcnJvcihlLCBzKTsKICAgIH0KICB9CgogIFpvbmVDYWxsYmFjazxSPiBiaW5kQ2FsbGJhY2s8Uj4oUiBmKCkpIHsKICAgIHZhciByZWdpc3RlcmVkID0gcmVnaXN0ZXJDYWxsYmFjayhmKTsKICAgIHJldHVybiAoKSA9PiB0aGlzLnJ1bihyZWdpc3RlcmVkKTsKICB9CgogIFpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+IGJpbmRVbmFyeUNhbGxiYWNrPFIsIFQ+KFIgZihUIGFyZykpIHsKICAgIHZhciByZWdpc3RlcmVkID0gcmVnaXN0ZXJVbmFyeUNhbGxiYWNrKGYpOwogICAgcmV0dXJuIChhcmcpID0+IHRoaXMucnVuVW5hcnkocmVnaXN0ZXJlZCwgYXJnKTsKICB9CgogIFpvbmVCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+IGJpbmRCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KAogICAgICBSIGYoVDEgYXJnMSwgVDIgYXJnMikpIHsKICAgIHZhciByZWdpc3RlcmVkID0gcmVnaXN0ZXJCaW5hcnlDYWxsYmFjayhmKTsKICAgIHJldHVybiAoYXJnMSwgYXJnMikgPT4gdGhpcy5ydW5CaW5hcnkocmVnaXN0ZXJlZCwgYXJnMSwgYXJnMik7CiAgfQoKICB2b2lkIEZ1bmN0aW9uKCkgYmluZENhbGxiYWNrR3VhcmRlZCh2b2lkIGYoKSkgewogICAgdmFyIHJlZ2lzdGVyZWQgPSByZWdpc3RlckNhbGxiYWNrKGYpOwogICAgcmV0dXJuICgpID0+IHRoaXMucnVuR3VhcmRlZChyZWdpc3RlcmVkKTsKICB9CgogIHZvaWQgRnVuY3Rpb24oVCkgYmluZFVuYXJ5Q2FsbGJhY2tHdWFyZGVkPFQ+KHZvaWQgZihUIGFyZykpIHsKICAgIHZhciByZWdpc3RlcmVkID0gcmVnaXN0ZXJVbmFyeUNhbGxiYWNrKGYpOwogICAgcmV0dXJuIChhcmcpID0+IHRoaXMucnVuVW5hcnlHdWFyZGVkKHJlZ2lzdGVyZWQsIGFyZyk7CiAgfQoKICB2b2lkIEZ1bmN0aW9uKFQxLCBUMikgYmluZEJpbmFyeUNhbGxiYWNrR3VhcmRlZDxUMSwgVDI+KAogICAgICB2b2lkIGYoVDEgYXJnMSwgVDIgYXJnMikpIHsKICAgIHZhciByZWdpc3RlcmVkID0gcmVnaXN0ZXJCaW5hcnlDYWxsYmFjayhmKTsKICAgIHJldHVybiAoYXJnMSwgYXJnMikgPT4gdGhpcy5ydW5CaW5hcnlHdWFyZGVkKHJlZ2lzdGVyZWQsIGFyZzEsIGFyZzIpOwogIH0KCiAgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgdmFyIHJlc3VsdCA9IF9tYXBba2V5XTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCB8fCBfbWFwLmNvbnRhaW5zS2V5KGtleSkpIHJldHVybiByZXN1bHQ7CiAgICAvLyBJZiB3ZSBhcmUgbm90IHRoZSByb290IHpvbmUsIGxvb2sgdXAgaW4gdGhlIHBhcmVudCB6b25lLgogICAgaWYgKHBhcmVudCAhPSBudWxsKSB7CiAgICAgIC8vIFdlIGRvIG5vdCBvcHRpbWl6ZSBmb3IgcmVwZWF0ZWRseSBsb29raW5nIHVwIGEga2V5IHdoaWNoIGlzbid0CiAgICAgIC8vIHRoZXJlLiBUaGF0IHdvdWxkIHJlcXVpcmUgc3RvcmluZyB0aGUga2V5IGFuZCBrZWVwaW5nIGl0IGFsaXZlLgogICAgICAvLyBDb3B5aW5nIHRoZSBrZXkvdmFsdWUgZnJvbSB0aGUgcGFyZW50IGRvZXMgbm90IGtlZXAgYW55IG5ldyB2YWx1ZXMKICAgICAgLy8gYWxpdmUuCiAgICAgIHZhciB2YWx1ZSA9IHBhcmVudFtrZXldOwogICAgICBpZiAodmFsdWUgIT0gbnVsbCkgewogICAgICAgIF9tYXBba2V5XSA9IHZhbHVlOwogICAgICB9CiAgICAgIHJldHVybiB2YWx1ZTsKICAgIH0KICAgIGFzc2VydCh0aGlzID09IF9yb290Wm9uZSk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIE1ldGhvZHMgdGhhdCBjYW4gYmUgY3VzdG9taXplZCBieSB0aGUgem9uZSBzcGVjaWZpY2F0aW9uLgoKICB2b2lkIGhhbmRsZVVuY2F1Z2h0RXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5faGFuZGxlVW5jYXVnaHRFcnJvcjsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIEhhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKAogICAgICAgIGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICBab25lIGZvcmsoe1pvbmVTcGVjaWZpY2F0aW9uIHNwZWNpZmljYXRpb24sIE1hcCB6b25lVmFsdWVzfSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fZm9yazsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIEZvcmtIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKAogICAgICAgIGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBzcGVjaWZpY2F0aW9uLCB6b25lVmFsdWVzKTsKICB9CgogIFIgcnVuPFI+KFIgZigpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9ydW47CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb24gIT0gbnVsbCk7CiAgICBab25lRGVsZWdhdGUgcGFyZW50RGVsZWdhdGUgPSBfcGFyZW50RGVsZWdhdGUoaW1wbGVtZW50YXRpb24uem9uZSk7CiAgICBSdW5IYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBmKTsKICB9CgogIFIgcnVuVW5hcnk8UiwgVD4oUiBmKFQgYXJnKSwgVCBhcmcpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IHRoaXMuX3J1blVuYXJ5OwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uLnpvbmUpOwogICAgUnVuVW5hcnlIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBmLCBhcmcpOwogIH0KCiAgUiBydW5CaW5hcnk8UiwgVDEsIFQyPihSIGYoVDEgYXJnMSwgVDIgYXJnMiksIFQxIGFyZzEsIFQyIGFyZzIpIHsKICAgIHZhciBpbXBsZW1lbnRhdGlvbiA9IHRoaXMuX3J1bkJpbmFyeTsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIFJ1bkJpbmFyeUhhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbGVtZW50YXRpb24uem9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIGYsIGFyZzEsIGFyZzIpOwogIH0KCiAgWm9uZUNhbGxiYWNrPFI+IHJlZ2lzdGVyQ2FsbGJhY2s8Uj4oUiBjYWxsYmFjaygpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9yZWdpc3RlckNhbGxiYWNrOwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uLnpvbmUpOwogICAgUmVnaXN0ZXJDYWxsYmFja0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbGVtZW50YXRpb24uem9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIGNhbGxiYWNrKTsKICB9CgogIFpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+IHJlZ2lzdGVyVW5hcnlDYWxsYmFjazxSLCBUPihSIGNhbGxiYWNrKFQgYXJnKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fcmVnaXN0ZXJVbmFyeUNhbGxiYWNrOwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uLnpvbmUpOwogICAgUmVnaXN0ZXJVbmFyeUNhbGxiYWNrSGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsZW1lbnRhdGlvbi56b25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgY2FsbGJhY2spOwogIH0KCiAgWm9uZUJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4gcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KAogICAgICBSIGNhbGxiYWNrKFQxIGFyZzEsIFQyIGFyZzIpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9yZWdpc3RlckJpbmFyeUNhbGxiYWNrOwogICAgYXNzZXJ0KGltcGxlbWVudGF0aW9uICE9IG51bGwpOwogICAgWm9uZURlbGVnYXRlIHBhcmVudERlbGVnYXRlID0gX3BhcmVudERlbGVnYXRlKGltcGxlbWVudGF0aW9uLnpvbmUpOwogICAgUmVnaXN0ZXJCaW5hcnlDYWxsYmFja0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbGVtZW50YXRpb24uem9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIGNhbGxiYWNrKTsKICB9CgogIEFzeW5jRXJyb3IgZXJyb3JDYWxsYmFjayhPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fZXJyb3JDYWxsYmFjazsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIGZpbmFsIFpvbmUgaW1wbGVtZW50YXRpb25ab25lID0gaW1wbGVtZW50YXRpb24uem9uZTsKICAgIGlmIChpZGVudGljYWwoaW1wbGVtZW50YXRpb25ab25lLCBfcm9vdFpvbmUpKSByZXR1cm4gbnVsbDsKICAgIGZpbmFsIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvblpvbmUpOwogICAgRXJyb3JDYWxsYmFja0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbGVtZW50YXRpb25ab25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBzY2hlZHVsZU1pY3JvdGFzayh2b2lkIGYoKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fc2NoZWR1bGVNaWNyb3Rhc2s7CiAgICBhc3NlcnQoaW1wbGVtZW50YXRpb24gIT0gbnVsbCk7CiAgICBab25lRGVsZWdhdGUgcGFyZW50RGVsZWdhdGUgPSBfcGFyZW50RGVsZWdhdGUoaW1wbGVtZW50YXRpb24uem9uZSk7CiAgICBTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXIgaGFuZGxlciA9IGltcGxlbWVudGF0aW9uLmZ1bmN0aW9uOwogICAgcmV0dXJuIGhhbmRsZXIoaW1wbGVtZW50YXRpb24uem9uZSwgcGFyZW50RGVsZWdhdGUsIHRoaXMsIGYpOwogIH0KCiAgVGltZXIgY3JlYXRlVGltZXIoRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgZigpKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9jcmVhdGVUaW1lcjsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIENyZWF0ZVRpbWVySGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsZW1lbnRhdGlvbi56b25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgZHVyYXRpb24sIGYpOwogIH0KCiAgVGltZXIgY3JlYXRlUGVyaW9kaWNUaW1lcihEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBmKFRpbWVyIHRpbWVyKSkgewogICAgdmFyIGltcGxlbWVudGF0aW9uID0gdGhpcy5fY3JlYXRlUGVyaW9kaWNUaW1lcjsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIENyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVyIGhhbmRsZXIgPSBpbXBsZW1lbnRhdGlvbi5mdW5jdGlvbjsKICAgIHJldHVybiBoYW5kbGVyKGltcGxlbWVudGF0aW9uLnpvbmUsIHBhcmVudERlbGVnYXRlLCB0aGlzLCBkdXJhdGlvbiwgZik7CiAgfQoKICB2b2lkIHByaW50KFN0cmluZyBsaW5lKSB7CiAgICB2YXIgaW1wbGVtZW50YXRpb24gPSB0aGlzLl9wcmludDsKICAgIGFzc2VydChpbXBsZW1lbnRhdGlvbiAhPSBudWxsKTsKICAgIFpvbmVEZWxlZ2F0ZSBwYXJlbnREZWxlZ2F0ZSA9IF9wYXJlbnREZWxlZ2F0ZShpbXBsZW1lbnRhdGlvbi56b25lKTsKICAgIFByaW50SGFuZGxlciBoYW5kbGVyID0gaW1wbGVtZW50YXRpb24uZnVuY3Rpb247CiAgICByZXR1cm4gaGFuZGxlcihpbXBsZW1lbnRhdGlvbi56b25lLCBwYXJlbnREZWxlZ2F0ZSwgdGhpcywgbGluZSk7CiAgfQp9Cgp2b2lkIF9yb290SGFuZGxlVW5jYXVnaHRFcnJvcigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgX3NjaGVkdWxlUHJpb3JpdHlBc3luY0NhbGxiYWNrKCgpIHsKICAgIGVycm9yID8/PSBuZXcgTnVsbFRocm93bkVycm9yKCk7CiAgICBpZiAoc3RhY2tUcmFjZSA9PSBudWxsKSB0aHJvdyBlcnJvcjsKICAgIF9yZXRocm93KGVycm9yLCBzdGFja1RyYWNlKTsKICB9KTsKfQoKZXh0ZXJuYWwgdm9pZCBfcmV0aHJvdyhPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSk7CgpSIF9yb290UnVuPFI+KFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBSIGYoKSkgewogIGlmIChab25lLl9jdXJyZW50ID09IHpvbmUpIHJldHVybiBmKCk7CgogIFpvbmUgb2xkID0gWm9uZS5fZW50ZXIoem9uZSk7CiAgdHJ5IHsKICAgIHJldHVybiBmKCk7CiAgfSBmaW5hbGx5IHsKICAgIFpvbmUuX2xlYXZlKG9sZCk7CiAgfQp9CgpSIF9yb290UnVuVW5hcnk8UiwgVD4oCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgUiBmKFQgYXJnKSwgVCBhcmcpIHsKICBpZiAoWm9uZS5fY3VycmVudCA9PSB6b25lKSByZXR1cm4gZihhcmcpOwoKICBab25lIG9sZCA9IFpvbmUuX2VudGVyKHpvbmUpOwogIHRyeSB7CiAgICByZXR1cm4gZihhcmcpOwogIH0gZmluYWxseSB7CiAgICBab25lLl9sZWF2ZShvbGQpOwogIH0KfQoKUiBfcm9vdFJ1bkJpbmFyeTxSLCBUMSwgVDI+KFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLAogICAgUiBmKFQxIGFyZzEsIFQyIGFyZzIpLCBUMSBhcmcxLCBUMiBhcmcyKSB7CiAgaWYgKFpvbmUuX2N1cnJlbnQgPT0gem9uZSkgcmV0dXJuIGYoYXJnMSwgYXJnMik7CgogIFpvbmUgb2xkID0gWm9uZS5fZW50ZXIoem9uZSk7CiAgdHJ5IHsKICAgIHJldHVybiBmKGFyZzEsIGFyZzIpOwogIH0gZmluYWxseSB7CiAgICBab25lLl9sZWF2ZShvbGQpOwogIH0KfQoKWm9uZUNhbGxiYWNrPFI+IF9yb290UmVnaXN0ZXJDYWxsYmFjazxSPigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBSIGYoKSkgewogIHJldHVybiBmOwp9Cgpab25lVW5hcnlDYWxsYmFjazxSLCBUPiBfcm9vdFJlZ2lzdGVyVW5hcnlDYWxsYmFjazxSLCBUPigKICAgIFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLCBSIGYoVCBhcmcpKSB7CiAgcmV0dXJuIGY7Cn0KClpvbmVCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+IF9yb290UmVnaXN0ZXJCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KAogICAgWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsIFIgZihUMSBhcmcxLCBUMiBhcmcyKSkgewogIHJldHVybiBmOwp9CgpBc3luY0Vycm9yIF9yb290RXJyb3JDYWxsYmFjayhab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwKICAgICAgICBPYmplY3QgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgPT4KICAgIG51bGw7Cgp2b2lkIF9yb290U2NoZWR1bGVNaWNyb3Rhc2soCiAgICBab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgdm9pZCBmKCkpIHsKICBpZiAoIWlkZW50aWNhbChfcm9vdFpvbmUsIHpvbmUpKSB7CiAgICBib29sIGhhc0Vycm9ySGFuZGxlciA9ICFfcm9vdFpvbmUuaW5TYW1lRXJyb3Jab25lKHpvbmUpOwogICAgaWYgKGhhc0Vycm9ySGFuZGxlcikgewogICAgICBmID0gem9uZS5iaW5kQ2FsbGJhY2tHdWFyZGVkKGYpOwogICAgfSBlbHNlIHsKICAgICAgZiA9IHpvbmUuYmluZENhbGxiYWNrKGYpOwogICAgfQogICAgLy8gVXNlIHJvb3Qgem9uZSBhcyBldmVudCB6b25lIGlmIHRoZSBmdW5jdGlvbiBpcyBhbHJlYWR5IGJvdW5kLgogICAgem9uZSA9IF9yb290Wm9uZTsKICB9CiAgX3NjaGVkdWxlQXN5bmNDYWxsYmFjayhmKTsKfQoKVGltZXIgX3Jvb3RDcmVhdGVUaW1lcihab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwKICAgIER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGNhbGxiYWNrKCkpIHsKICBpZiAoIWlkZW50aWNhbChfcm9vdFpvbmUsIHpvbmUpKSB7CiAgICBjYWxsYmFjayA9IHpvbmUuYmluZENhbGxiYWNrKGNhbGxiYWNrKTsKICB9CiAgcmV0dXJuIFRpbWVyLl9jcmVhdGVUaW1lcihkdXJhdGlvbiwgY2FsbGJhY2spOwp9CgpUaW1lciBfcm9vdENyZWF0ZVBlcmlvZGljVGltZXIoWm9uZSBzZWxmLCBab25lRGVsZWdhdGUgcGFyZW50LCBab25lIHpvbmUsCiAgICBEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBjYWxsYmFjayhUaW1lciB0aW1lcikpIHsKICBpZiAoIWlkZW50aWNhbChfcm9vdFpvbmUsIHpvbmUpKSB7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogdGhlIHJldHVybiB0eXBlIHNob3VsZCBiZSAndm9pZCcuCiAgICBjYWxsYmFjayA9IHpvbmUuYmluZFVuYXJ5Q2FsbGJhY2s8ZHluYW1pYywgVGltZXI+KGNhbGxiYWNrKTsKICB9CiAgcmV0dXJuIFRpbWVyLl9jcmVhdGVQZXJpb2RpY1RpbWVyKGR1cmF0aW9uLCBjYWxsYmFjayk7Cn0KCnZvaWQgX3Jvb3RQcmludChab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsIFpvbmUgem9uZSwgU3RyaW5nIGxpbmUpIHsKICBwcmludFRvQ29uc29sZShsaW5lKTsKfQoKdm9pZCBfcHJpbnRUb1pvbmUoU3RyaW5nIGxpbmUpIHsKICBab25lLmN1cnJlbnQucHJpbnQobGluZSk7Cn0KClpvbmUgX3Jvb3RGb3JrKFpvbmUgc2VsZiwgWm9uZURlbGVnYXRlIHBhcmVudCwgWm9uZSB6b25lLAogICAgWm9uZVNwZWNpZmljYXRpb24gc3BlY2lmaWNhdGlvbiwgTWFwIHpvbmVWYWx1ZXMpIHsKICAvLyBUT0RPKGZsb2l0c2NoKTogaXQgd291bGQgYmUgbmljZSBpZiB3ZSBjb3VsZCBnZXQgcmlkIG9mIHRoaXMgaGFjay4KICAvLyBDaGFuZ2UgdGhlIHN0YXRpYyB6b25lT3JEaXJlY3RQcmludCBmdW5jdGlvbiB0byBnbyB0aHJvdWdoIHpvbmVzCiAgLy8gZnJvbSBub3cgb24uCiAgcHJpbnRUb1pvbmUgPSBfcHJpbnRUb1pvbmU7CgogIGlmIChzcGVjaWZpY2F0aW9uID09IG51bGwpIHsKICAgIHNwZWNpZmljYXRpb24gPSBjb25zdCBab25lU3BlY2lmaWNhdGlvbigpOwogIH0gZWxzZSBpZiAoc3BlY2lmaWNhdGlvbiBpcyEgX1pvbmVTcGVjaWZpY2F0aW9uKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiWm9uZVNwZWNpZmljYXRpb25zIG11c3QgYmUgaW5zdGFudGlhdGVkIgogICAgICAgICIgd2l0aCB0aGUgcHJvdmlkZWQgY29uc3RydWN0b3IuIik7CiAgfQogIE1hcCB2YWx1ZU1hcDsKICBpZiAoem9uZVZhbHVlcyA9PSBudWxsKSB7CiAgICBpZiAoem9uZSBpcyBfWm9uZSkgewogICAgICB2YWx1ZU1hcCA9IHpvbmUuX21hcDsKICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlTWFwID0gbmV3IEhhc2hNYXAoKTsKICAgIH0KICB9IGVsc2UgewogICAgdmFsdWVNYXAgPSBuZXcgSGFzaE1hcC5mcm9tKHpvbmVWYWx1ZXMpOwogIH0KICByZXR1cm4gbmV3IF9DdXN0b21ab25lKHpvbmUsIHNwZWNpZmljYXRpb24sIHZhbHVlTWFwKTsKfQoKY2xhc3MgX1Jvb3Rab25lIGV4dGVuZHMgX1pvbmUgewogIGNvbnN0IF9Sb290Wm9uZSgpOwoKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3J1biA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPihfcm9vdFpvbmUsIF9yb290UnVuKTsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3J1blVuYXJ5ID0+CiAgICAgIGNvbnN0IF9ab25lRnVuY3Rpb248RnVuY3Rpb24+KF9yb290Wm9uZSwgX3Jvb3RSdW5VbmFyeSk7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gZ2V0IF9ydW5CaW5hcnkgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4oX3Jvb3Rab25lLCBfcm9vdFJ1bkJpbmFyeSk7CiAgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4gZ2V0IF9yZWdpc3RlckNhbGxiYWNrID0+CiAgICAgIGNvbnN0IF9ab25lRnVuY3Rpb248RnVuY3Rpb24+KF9yb290Wm9uZSwgX3Jvb3RSZWdpc3RlckNhbGxiYWNrKTsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3JlZ2lzdGVyVW5hcnlDYWxsYmFjayA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPihfcm9vdFpvbmUsIF9yb290UmVnaXN0ZXJVbmFyeUNhbGxiYWNrKTsKICBfWm9uZUZ1bmN0aW9uPEZ1bmN0aW9uPiBnZXQgX3JlZ2lzdGVyQmluYXJ5Q2FsbGJhY2sgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxGdW5jdGlvbj4oX3Jvb3Rab25lLCBfcm9vdFJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2spOwogIF9ab25lRnVuY3Rpb248RXJyb3JDYWxsYmFja0hhbmRsZXI+IGdldCBfZXJyb3JDYWxsYmFjayA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPEVycm9yQ2FsbGJhY2tIYW5kbGVyPihfcm9vdFpvbmUsIF9yb290RXJyb3JDYWxsYmFjayk7CiAgX1pvbmVGdW5jdGlvbjxTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXI+IGdldCBfc2NoZWR1bGVNaWNyb3Rhc2sgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxTY2hlZHVsZU1pY3JvdGFza0hhbmRsZXI+KAogICAgICAgICAgX3Jvb3Rab25lLCBfcm9vdFNjaGVkdWxlTWljcm90YXNrKTsKICBfWm9uZUZ1bmN0aW9uPENyZWF0ZVRpbWVySGFuZGxlcj4gZ2V0IF9jcmVhdGVUaW1lciA9PgogICAgICBjb25zdCBfWm9uZUZ1bmN0aW9uPENyZWF0ZVRpbWVySGFuZGxlcj4oX3Jvb3Rab25lLCBfcm9vdENyZWF0ZVRpbWVyKTsKICBfWm9uZUZ1bmN0aW9uPENyZWF0ZVBlcmlvZGljVGltZXJIYW5kbGVyPiBnZXQgX2NyZWF0ZVBlcmlvZGljVGltZXIgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxDcmVhdGVQZXJpb2RpY1RpbWVySGFuZGxlcj4oCiAgICAgICAgICBfcm9vdFpvbmUsIF9yb290Q3JlYXRlUGVyaW9kaWNUaW1lcik7CiAgX1pvbmVGdW5jdGlvbjxQcmludEhhbmRsZXI+IGdldCBfcHJpbnQgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxQcmludEhhbmRsZXI+KF9yb290Wm9uZSwgX3Jvb3RQcmludCk7CiAgX1pvbmVGdW5jdGlvbjxGb3JrSGFuZGxlcj4gZ2V0IF9mb3JrID0+CiAgICAgIGNvbnN0IF9ab25lRnVuY3Rpb248Rm9ya0hhbmRsZXI+KF9yb290Wm9uZSwgX3Jvb3RGb3JrKTsKICBfWm9uZUZ1bmN0aW9uPEhhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyPiBnZXQgX2hhbmRsZVVuY2F1Z2h0RXJyb3IgPT4KICAgICAgY29uc3QgX1pvbmVGdW5jdGlvbjxIYW5kbGVVbmNhdWdodEVycm9ySGFuZGxlcj4oCiAgICAgICAgICBfcm9vdFpvbmUsIF9yb290SGFuZGxlVW5jYXVnaHRFcnJvcik7CgogIC8vIFRoZSBwYXJlbnQgem9uZS4KICBfWm9uZSBnZXQgcGFyZW50ID0+IG51bGw7CgogIC8vLyBUaGUgem9uZSdzIHNjb3BlZCB2YWx1ZSBkZWNsYXJhdGlvbiBtYXAuCiAgLy8vCiAgLy8vIFRoaXMgaXMgYWx3YXlzIGEgW0hhc2hNYXBdLgogIE1hcCBnZXQgX21hcCA9PiBfcm9vdE1hcDsKCiAgc3RhdGljIGZpbmFsIF9yb290TWFwID0gbmV3IEhhc2hNYXAoKTsKCiAgc3RhdGljIFpvbmVEZWxlZ2F0ZSBfcm9vdERlbGVnYXRlOwoKICBab25lRGVsZWdhdGUgZ2V0IF9kZWxlZ2F0ZSB7CiAgICBpZiAoX3Jvb3REZWxlZ2F0ZSAhPSBudWxsKSByZXR1cm4gX3Jvb3REZWxlZ2F0ZTsKICAgIHJldHVybiBfcm9vdERlbGVnYXRlID0gbmV3IF9ab25lRGVsZWdhdGUodGhpcyk7CiAgfQoKICAvKioKICAgKiBUaGUgY2xvc2VzdCBlcnJvci1oYW5kbGluZyB6b25lLgogICAqCiAgICogUmV0dXJucyBgdGhpc2AgaWYgYHRoaXNgIGhhcyBhbiBlcnJvci1oYW5kbGVyLiBPdGhlcndpc2UgcmV0dXJucyB0aGUKICAgKiBwYXJlbnQncyBlcnJvci16b25lLgogICAqLwogIFpvbmUgZ2V0IGVycm9yWm9uZSA9PiB0aGlzOwoKICAvLyBab25lIGludGVyZmFjZS4KCiAgdm9pZCBydW5HdWFyZGVkKHZvaWQgZigpKSB7CiAgICB0cnkgewogICAgICBpZiAoaWRlbnRpY2FsKF9yb290Wm9uZSwgWm9uZS5fY3VycmVudCkpIHsKICAgICAgICBmKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9yb290UnVuKG51bGwsIG51bGwsIHRoaXMsIGYpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBoYW5kbGVVbmNhdWdodEVycm9yKGUsIHMpOwogICAgfQogIH0KCiAgdm9pZCBydW5VbmFyeUd1YXJkZWQ8VD4odm9pZCBmKFQgYXJnKSwgVCBhcmcpIHsKICAgIHRyeSB7CiAgICAgIGlmIChpZGVudGljYWwoX3Jvb3Rab25lLCBab25lLl9jdXJyZW50KSkgewogICAgICAgIGYoYXJnKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX3Jvb3RSdW5VbmFyeShudWxsLCBudWxsLCB0aGlzLCBmLCBhcmcpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBoYW5kbGVVbmNhdWdodEVycm9yKGUsIHMpOwogICAgfQogIH0KCiAgdm9pZCBydW5CaW5hcnlHdWFyZGVkPFQxLCBUMj4odm9pZCBmKFQxIGFyZzEsIFQyIGFyZzIpLCBUMSBhcmcxLCBUMiBhcmcyKSB7CiAgICB0cnkgewogICAgICBpZiAoaWRlbnRpY2FsKF9yb290Wm9uZSwgWm9uZS5fY3VycmVudCkpIHsKICAgICAgICBmKGFyZzEsIGFyZzIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfcm9vdFJ1bkJpbmFyeShudWxsLCBudWxsLCB0aGlzLCBmLCBhcmcxLCBhcmcyKTsKICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgaGFuZGxlVW5jYXVnaHRFcnJvcihlLCBzKTsKICAgIH0KICB9CgogIFpvbmVDYWxsYmFjazxSPiBiaW5kQ2FsbGJhY2s8Uj4oUiBmKCkpIHsKICAgIHJldHVybiAoKSA9PiB0aGlzLnJ1bjxSPihmKTsKICB9CgogIFpvbmVVbmFyeUNhbGxiYWNrPFIsIFQ+IGJpbmRVbmFyeUNhbGxiYWNrPFIsIFQ+KFIgZihUIGFyZykpIHsKICAgIHJldHVybiAoYXJnKSA9PiB0aGlzLnJ1blVuYXJ5PFIsIFQ+KGYsIGFyZyk7CiAgfQoKICBab25lQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPiBiaW5kQmluYXJ5Q2FsbGJhY2s8UiwgVDEsIFQyPigKICAgICAgUiBmKFQxIGFyZzEsIFQyIGFyZzIpKSB7CiAgICByZXR1cm4gKGFyZzEsIGFyZzIpID0+IHRoaXMucnVuQmluYXJ5PFIsIFQxLCBUMj4oZiwgYXJnMSwgYXJnMik7CiAgfQoKICB2b2lkIEZ1bmN0aW9uKCkgYmluZENhbGxiYWNrR3VhcmRlZCh2b2lkIGYoKSkgewogICAgcmV0dXJuICgpID0+IHRoaXMucnVuR3VhcmRlZChmKTsKICB9CgogIHZvaWQgRnVuY3Rpb24oVCkgYmluZFVuYXJ5Q2FsbGJhY2tHdWFyZGVkPFQ+KHZvaWQgZihUIGFyZykpIHsKICAgIHJldHVybiAoYXJnKSA9PiB0aGlzLnJ1blVuYXJ5R3VhcmRlZChmLCBhcmcpOwogIH0KCiAgdm9pZCBGdW5jdGlvbihUMSwgVDIpIGJpbmRCaW5hcnlDYWxsYmFja0d1YXJkZWQ8VDEsIFQyPigKICAgICAgdm9pZCBmKFQxIGFyZzEsIFQyIGFyZzIpKSB7CiAgICByZXR1cm4gKGFyZzEsIGFyZzIpID0+IHRoaXMucnVuQmluYXJ5R3VhcmRlZChmLCBhcmcxLCBhcmcyKTsKICB9CgogIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpID0+IG51bGw7CgogIC8vIE1ldGhvZHMgdGhhdCBjYW4gYmUgY3VzdG9taXplZCBieSB0aGUgem9uZSBzcGVjaWZpY2F0aW9uLgoKICB2b2lkIGhhbmRsZVVuY2F1Z2h0RXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgX3Jvb3RIYW5kbGVVbmNhdWdodEVycm9yKG51bGwsIG51bGwsIHRoaXMsIGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIFpvbmUgZm9yayh7Wm9uZVNwZWNpZmljYXRpb24gc3BlY2lmaWNhdGlvbiwgTWFwIHpvbmVWYWx1ZXN9KSB7CiAgICByZXR1cm4gX3Jvb3RGb3JrKG51bGwsIG51bGwsIHRoaXMsIHNwZWNpZmljYXRpb24sIHpvbmVWYWx1ZXMpOwogIH0KCiAgUiBydW48Uj4oUiBmKCkpIHsKICAgIGlmIChpZGVudGljYWwoWm9uZS5fY3VycmVudCwgX3Jvb3Rab25lKSkgcmV0dXJuIGYoKTsKICAgIHJldHVybiBfcm9vdFJ1bihudWxsLCBudWxsLCB0aGlzLCBmKTsKICB9CgogIFIgcnVuVW5hcnk8UiwgVD4oUiBmKFQgYXJnKSwgVCBhcmcpIHsKICAgIGlmIChpZGVudGljYWwoWm9uZS5fY3VycmVudCwgX3Jvb3Rab25lKSkgcmV0dXJuIGYoYXJnKTsKICAgIHJldHVybiBfcm9vdFJ1blVuYXJ5KG51bGwsIG51bGwsIHRoaXMsIGYsIGFyZyk7CiAgfQoKICBSIHJ1bkJpbmFyeTxSLCBUMSwgVDI+KFIgZihUMSBhcmcxLCBUMiBhcmcyKSwgVDEgYXJnMSwgVDIgYXJnMikgewogICAgaWYgKGlkZW50aWNhbChab25lLl9jdXJyZW50LCBfcm9vdFpvbmUpKSByZXR1cm4gZihhcmcxLCBhcmcyKTsKICAgIHJldHVybiBfcm9vdFJ1bkJpbmFyeShudWxsLCBudWxsLCB0aGlzLCBmLCBhcmcxLCBhcmcyKTsKICB9CgogIFpvbmVDYWxsYmFjazxSPiByZWdpc3RlckNhbGxiYWNrPFI+KFIgZigpKSA9PiBmOwoKICBab25lVW5hcnlDYWxsYmFjazxSLCBUPiByZWdpc3RlclVuYXJ5Q2FsbGJhY2s8UiwgVD4oUiBmKFQgYXJnKSkgPT4gZjsKCiAgWm9uZUJpbmFyeUNhbGxiYWNrPFIsIFQxLCBUMj4gcmVnaXN0ZXJCaW5hcnlDYWxsYmFjazxSLCBUMSwgVDI+KAogICAgICAgICAgUiBmKFQxIGFyZzEsIFQyIGFyZzIpKSA9PgogICAgICBmOwoKICBBc3luY0Vycm9yIGVycm9yQ2FsbGJhY2soT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpID0+IG51bGw7CgogIHZvaWQgc2NoZWR1bGVNaWNyb3Rhc2sodm9pZCBmKCkpIHsKICAgIF9yb290U2NoZWR1bGVNaWNyb3Rhc2sobnVsbCwgbnVsbCwgdGhpcywgZik7CiAgfQoKICBUaW1lciBjcmVhdGVUaW1lcihEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBmKCkpIHsKICAgIHJldHVybiBUaW1lci5fY3JlYXRlVGltZXIoZHVyYXRpb24sIGYpOwogIH0KCiAgVGltZXIgY3JlYXRlUGVyaW9kaWNUaW1lcihEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBmKFRpbWVyIHRpbWVyKSkgewogICAgcmV0dXJuIFRpbWVyLl9jcmVhdGVQZXJpb2RpY1RpbWVyKGR1cmF0aW9uLCBmKTsKICB9CgogIHZvaWQgcHJpbnQoU3RyaW5nIGxpbmUpIHsKICAgIHByaW50VG9Db25zb2xlKGxpbmUpOwogIH0KfQoKY29uc3QgX3Jvb3Rab25lID0gY29uc3QgX1Jvb3Rab25lKCk7CgovKioKICogUnVucyBbYm9keV0gaW4gaXRzIG93biB6b25lLgogKgogKiBDcmVhdGVzIGEgbmV3IHpvbmUgdXNpbmcgW1pvbmUuZm9ya10gYmFzZWQgb24gW3pvbmVTcGVjaWZpY2F0aW9uXSBhbmQKICogW3pvbmVWYWx1ZXNdLCB0aGVuIHJ1bnMgW2JvZHldIGluIHRoYXQgem9uZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0LgogKgogKiBJZiBbb25FcnJvcl0gaXMgcHJvdmlkZWQsIGl0IG11c3QgaGF2ZSBvbmUgb2YgdGhlIHR5cGVzCiAqICogYHZvaWQgRnVuY3Rpb24oT2JqZWN0KWAKICogKiBgdm9pZCBGdW5jdGlvbihPYmplY3QsIFN0YWNrVHJhY2UpYAogKiBhbmQgdGhlIFtvbkVycm9yXSBoYW5kbGVyIGlzIHVzZWQgKmJvdGgqIHRvIGhhbmRsZSBhc3luY2hyb25vdXMgZXJyb3JzCiAqIGJ5IG92ZXJyaWRpbmcgW1pvbmVTcGVjaWZpY2F0aW9uLmhhbmRsZVVuY2F1Z2h0RXJyb3JdIGluIFt6b25lU3BlY2lmaWNhdGlvbl0sCiAqIGlmIGFueSwgKmFuZCogdG8gaGFuZGxlIGVycm9ycyB0aHJvd24gc3luY2hyb25vdXNseSBieSB0aGUgY2FsbCB0byBbYm9keV0uCiAqCiAqIElmIGFuIGVycm9yIG9jY3VycyBzeW5jaHJvbm91c2x5IGluIFtib2R5XSwKICogdGhlbiB0aHJvd2luZyBpbiB0aGUgW29uRXJyb3JdIGhhbmRsZXIKICogbWFrZXMgdGhlIGNhbGwgdG8gYHJ1blpvbmVgIHRocm93IHRoYXQgZXJyb3IsCiAqIGFuZCBvdGhlcndpc2UgdGhlIGNhbGwgdG8gYHJ1blpvbmVkYCByZXR1cm5zIGBudWxsYC4KICoKICogSWYgdGhlIHpvbmUgc3BlY2lmaWNhdGlvbiBoYXMgYSBgaGFuZGxlVW5jYXVnaHRFcnJvcmAgdmFsdWUgb3IgdGhlIFtvbkVycm9yXQogKiBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQsIHRoZSB6b25lIGJlY29tZXMgYW4gZXJyb3Item9uZS4KICoKICogRXJyb3JzIHdpbGwgbmV2ZXIgY3Jvc3MgZXJyb3Item9uZSBib3VuZGFyaWVzIGJ5IHRoZW1zZWx2ZXMuCiAqIEVycm9ycyB0aGF0IHRyeSB0byBjcm9zcyBlcnJvci16b25lIGJvdW5kYXJpZXMgYXJlIGNvbnNpZGVyZWQgdW5jYXVnaHQgaW4KICogdGhlaXIgb3JpZ2luYXRpbmcgZXJyb3Igem9uZS4KICoKICogICAgIHZhciBmdXR1cmUgPSBuZXcgRnV0dXJlLnZhbHVlKDQ5OSk7CiAqICAgICBydW5ab25lZCgoKSB7CiAqICAgICAgIHZhciBmdXR1cmUyID0gZnV0dXJlLnRoZW4oKF8pIHsgdGhyb3cgImVycm9yIGluIGZpcnN0IGVycm9yLXpvbmUiOyB9KTsKICogICAgICAgcnVuWm9uZWQoKCkgewogKiAgICAgICAgIHZhciBmdXR1cmUzID0gZnV0dXJlMi5jYXRjaEVycm9yKChlKSB7IHByaW50KCJOZXZlciByZWFjaGVkISIpOyB9KTsKICogICAgICAgfSwgb25FcnJvcjogKGUpIHsgcHJpbnQoInVudXNlZCBlcnJvciBoYW5kbGVyIik7IH0pOwogKiAgICAgfSwgb25FcnJvcjogKGUpIHsgcHJpbnQoImNhdGNoZXMgZXJyb3Igb2YgZmlyc3QgZXJyb3Item9uZS4iKTsgfSk7CiAqCiAqIEV4YW1wbGU6CiAqCiAqICAgICBydW5ab25lZCgoKSB7CiAqICAgICAgIG5ldyBGdXR1cmUoKCkgeyB0aHJvdyAiYXN5bmNocm9ub3VzIGVycm9yIjsgfSk7CiAqICAgICB9LCBvbkVycm9yOiBwcmludCk7ICAvLyBXaWxsIHByaW50ICJhc3luY2hyb25vdXMgZXJyb3IiLgogKgogKiBJdCBpcyBwb3NzaWJsZSB0byBtYW51YWxseSBwYXNzIGFuIGVycm9yIGZyb20gb25lIGVycm9yIHpvbmUgdG8gYW5vdGhlcgogKiBieSByZS10aHJvd2luZyBpdCBpbiB0aGUgbmV3IHpvbmUuIElmIFtvbkVycm9yXSB0aHJvd3MsIHRoYXQgZXJyb3Igd2lsbAogKiBvY2N1ciBpbiB0aGUgb3JpZ2luYWwgem9uZSB3aGVyZSBbcnVuWm9uZWRdIHdhcyBjYWxsZWQuCiAqLwpSIHJ1blpvbmVkPFI+KFIgYm9keSgpLAogICAge01hcCB6b25lVmFsdWVzLCBab25lU3BlY2lmaWNhdGlvbiB6b25lU3BlY2lmaWNhdGlvbiwgRnVuY3Rpb24gb25FcnJvcn0pIHsKICBpZiAob25FcnJvciA9PSBudWxsKSB7CiAgICByZXR1cm4gX3J1blpvbmVkPFI+KGJvZHksIHpvbmVWYWx1ZXMsIHpvbmVTcGVjaWZpY2F0aW9uKTsKICB9CiAgdm9pZCBGdW5jdGlvbihPYmplY3QpIHVuYXJ5T25FcnJvcjsKICB2b2lkIEZ1bmN0aW9uKE9iamVjdCwgU3RhY2tUcmFjZSkgYmluYXJ5T25FcnJvcjsKICBpZiAob25FcnJvciBpcyB2b2lkIEZ1bmN0aW9uKE9iamVjdCwgU3RhY2tUcmFjZSkpIHsKICAgIGJpbmFyeU9uRXJyb3IgPSBvbkVycm9yOwogIH0gZWxzZSBpZiAob25FcnJvciBpcyB2b2lkIEZ1bmN0aW9uKE9iamVjdCkpIHsKICAgIHVuYXJ5T25FcnJvciA9IG9uRXJyb3I7CiAgfSBlbHNlIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJvbkVycm9yIGNhbGxiYWNrIG11c3QgdGFrZSBlaXRoZXIgYW4gT2JqZWN0ICIKICAgICAgICAiKHRoZSBlcnJvciksIG9yIGJvdGggYW4gT2JqZWN0ICh0aGUgZXJyb3IpIGFuZCBhIFN0YWNrVHJhY2UuIik7CiAgfQogIEhhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyIGVycm9ySGFuZGxlciA9IChab25lIHNlbGYsIFpvbmVEZWxlZ2F0ZSBwYXJlbnQsCiAgICAgIFpvbmUgem9uZSwgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgdHJ5IHsKICAgICAgaWYgKGJpbmFyeU9uRXJyb3IgIT0gbnVsbCkgewogICAgICAgIHNlbGYucGFyZW50LnJ1bkJpbmFyeShiaW5hcnlPbkVycm9yLCBlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KHVuYXJ5T25FcnJvciAhPSBudWxsKTsKICAgICAgICBzZWxmLnBhcmVudC5ydW5VbmFyeSh1bmFyeU9uRXJyb3IsIGVycm9yKTsKICAgICAgfQogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBpZiAoaWRlbnRpY2FsKGUsIGVycm9yKSkgewogICAgICAgIHBhcmVudC5oYW5kbGVVbmNhdWdodEVycm9yKHpvbmUsIGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwYXJlbnQuaGFuZGxlVW5jYXVnaHRFcnJvcih6b25lLCBlLCBzKTsKICAgICAgfQogICAgfQogIH07CiAgaWYgKHpvbmVTcGVjaWZpY2F0aW9uID09IG51bGwpIHsKICAgIHpvbmVTcGVjaWZpY2F0aW9uID0KICAgICAgICBuZXcgWm9uZVNwZWNpZmljYXRpb24oaGFuZGxlVW5jYXVnaHRFcnJvcjogZXJyb3JIYW5kbGVyKTsKICB9IGVsc2UgewogICAgem9uZVNwZWNpZmljYXRpb24gPSBuZXcgWm9uZVNwZWNpZmljYXRpb24uZnJvbSh6b25lU3BlY2lmaWNhdGlvbiwKICAgICAgICBoYW5kbGVVbmNh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ZSB0aGUgYWRkaXRpb25hbCBwYXJ0cyBvZiB0aGlzIHBhdGNoIGxpYnJhcnk6Ci8vIHBhcnQgImRlZmVycmVkX2xvYWRfcGF0Y2guZGFydCI7Ci8vIHBhcnQgInNjaGVkdWxlX21pY3JvdGFza19wYXRjaC5kYXJ0IjsKLy8gcGFydCAidGltZXJfcGF0Y2guZGFydCI7CgovLyBFcXVpdmFsZW50IG9mIGNhbGxpbmcgRkFUQUwgZnJvbSBDKysgY29kZS4KX2ZhdGFsKG1zZykgbmF0aXZlICJEYXJ0QXN5bmNfZmF0YWwiOwoKY2xhc3MgX0FzeW5jQXdhaXRDb21wbGV0ZXI8VD4gaW1wbGVtZW50cyBDb21wbGV0ZXI8VD4gewogIGZpbmFsIF9jb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFQ+LnN5bmMoKTsKICBib29sIGlzU3luYzsKCiAgX0FzeW5jQXdhaXRDb21wbGV0ZXIoKSA6IGlzU3luYyA9IGZhbHNlOwoKICB2b2lkIGNvbXBsZXRlKFtGdXR1cmVPcjxUPiB2YWx1ZV0pIHsKICAgIGlmIChpc1N5bmMpIHsKICAgICAgX2NvbXBsZXRlci5jb21wbGV0ZSh2YWx1ZSk7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIEZ1dHVyZTxUPikgewogICAgICB2YWx1ZS50aGVuKF9jb21wbGV0ZXIuY29tcGxldGUsIG9uRXJyb3I6IF9jb21wbGV0ZXIuY29tcGxldGVFcnJvcik7CiAgICB9IGVsc2UgewogICAgICBzY2hlZHVsZU1pY3JvdGFzaygoKSB7CiAgICAgICAgX2NvbXBsZXRlci5jb21wbGV0ZSh2YWx1ZSk7CiAgICAgIH0pOwogICAgfQogIH0KCiAgdm9pZCBjb21wbGV0ZUVycm9yKGUsIFtzdF0pIHsKICAgIGlmIChpc1N5bmMpIHsKICAgICAgX2NvbXBsZXRlci5jb21wbGV0ZUVycm9yKGUsIHN0KTsKICAgIH0gZWxzZSB7CiAgICAgIHNjaGVkdWxlTWljcm90YXNrKCgpIHsKICAgICAgICBfY29tcGxldGVyLmNvbXBsZXRlRXJyb3IoZSwgc3QpOwogICAgICB9KTsKICAgIH0KICB9CgogIHZvaWQgc3RhcnQoZikgewogICAgZigpOwogICAgaXNTeW5jID0gdHJ1ZTsKICB9CgogIEZ1dHVyZTxUPiBnZXQgZnV0dXJlID0+IF9jb21wbGV0ZXIuZnV0dXJlOwogIGJvb2wgZ2V0IGlzQ29tcGxldGVkID0+IF9jb21wbGV0ZXIuaXNDb21wbGV0ZWQ7Cn0KCi8vIFdlIG5lZWQgdG8gcGFzcyB0aGUgdmFsdWUgYXMgZmlyc3QgYXJndW1lbnQgYW5kIGxlYXZlIHRoZSBzZWNvbmQgYW5kIHRoaXJkCi8vIGFyZ3VtZW50cyBlbXB0eSAodXNlZCBmb3IgZXJyb3IgaGFuZGxpbmcpLgovLyBTZWUgdm0vYXN0X3RyYW5zZm9ybWVyLmNjIGZvciB1c2FnZS4KRnVuY3Rpb24gX2FzeW5jVGhlbldyYXBwZXJIZWxwZXIoY29udGludWF0aW9uKSB7CiAgLy8gQW55IGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCBhcyBhbiBhc3luY2hyb25vdXMgY2FsbGJhY2sgbXVzdCBiZSByZWdpc3RlcmVkCiAgLy8gaW4gdGhlIGN1cnJlbnQgWm9uZS4gTm9ybWFsbHksIHRoaXMgaXMgZG9uZSBieSB0aGUgZnV0dXJlIHdoZW4gYQogIC8vIGNhbGxiYWNrIGlzIHJlZ2lzdGVyZWQgKGZvciBleGFtcGxlIHdpdGggYC50aGVuYCBvciBgLmNhdGNoRXJyb3JgKS4gSW4gb3VyCiAgLy8gY2FzZSB3ZSB3YW50IHRvIHJldXNlIHRoZSBzYW1lIGNhbGxiYWNrIG11bHRpcGxlIHRpbWVzIGFuZCB0aGVyZWZvcmUgYXZvaWQKICAvLyB0aGUgbXVsdGlwbGUgcmVnaXN0cmF0aW9ucy4gRm9yIG91ciBpbnRlcm5hbCBmdXR1cmVzIChgX0Z1dHVyZWApIHdlIGNhbgogIC8vIHVzZSB0aGUgc2hvcnRjdXQtdmVyc2lvbiBvZiBgLnRoZW5gLCBhbmQgc2tpcCB0aGUgcmVnaXN0cmF0aW9uLiBIb3dldmVyLAogIC8vIHRoYXQgbWVhbnMgdGhhdCB0aGUgY29udGludWF0aW9uIG11c3QgYmUgcmVnaXN0ZXJlZCBieSB1cy4KICAvLwogIC8vIEZ1cnRoZXJtb3JlLCB3ZSBrbm93IHRoYXQgdGhlIHJvb3Qtem9uZSBkb2Vzbid0IGFjdHVhbGx5IGRvIGFueXRoaW5nIGFuZAogIC8vIHdlIGNhbiB0aGVyZWZvcmUgc2tpcCB0aGUgcmVnaXN0cmF0aW9uIGNhbGwgZm9yIGl0LgogIC8vCiAgLy8gTm90ZSwgdGhhdCB0aGUgY29udGludWF0aW9uIGFjY2VwdHMgdXAgdG8gdGhyZWUgYXJndW1lbnRzLiBJZiB0aGUgY3VycmVudAogIC8vIHpvbmUgaXMgdGhlIHJvb3Qgem9uZSwgd2UgZG9uJ3Qgd3JhcCB0aGUgY29udGludWF0aW9uLCBhbmQgYSBiYWQKICAvLyBgRnV0dXJlYCBpbXBsZW1lbnRhdGlvbiBjb3VsZCBwb3RlbnRpYWxseSBpbnZva2UgdGhlIGNhbGxiYWNrIHdpdGggdGhlCiAgLy8gd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cy4KICBpZiAoWm9uZS5jdXJyZW50ID09IFpvbmUucm9vdCkgcmV0dXJuIGNvbnRpbnVhdGlvbjsKICByZXR1cm4gWm9uZS5jdXJyZW50LnJlZ2lzdGVyVW5hcnlDYWxsYmFjaygoeCkgPT4gY29udGludWF0aW9uKHgsIG51bGwsIG51bGwpKTsKfQoKLy8gV2UgbmVlZCB0byBwYXNzIHRoZSBleGNlcHRpb24gYW5kIHN0YWNrIHRyYWNlIG9iamVjdHMgYXMgc2Vjb25kIGFuZCB0aGlyZAovLyBwYXJhbWV0ZXIgdG8gdGhlIGNvbnRpbnVhdGlvbi4gIFNlZSB2bS9hc3RfdHJhbnNmb3JtZXIuY2MgZm9yIHVzYWdlLgpGdW5jdGlvbiBfYXN5bmNFcnJvcldyYXBwZXJIZWxwZXIoY29udGludWF0aW9uKSB7CiAgLy8gU2VlIGNvbW1lbnRzIG9mIGBfYXN5bmNUaGVuV3JhcHBlckhlbHBlcmAuCiAgdmFyIGVycm9yQ2FsbGJhY2sgPSAoZSwgcykgPT4gY29udGludWF0aW9uKG51bGwsIGUsIHMpOwogIGlmIChab25lLmN1cnJlbnQgPT0gWm9uZS5yb290KSByZXR1cm4gZXJyb3JDYWxsYmFjazsKICByZXR1cm4gWm9uZS5jdXJyZW50LnJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2soZXJyb3JDYWxsYmFjayk7Cn0KCi8vLyBSZWdpc3RlcnMgdGhlIFt0aGVuQ2FsbGJhY2tdIGFuZCBbZXJyb3JDYWxsYmFja10gb24gdGhlIGdpdmVuIFtvYmplY3RdLgovLy8KLy8vIElmIFtvYmplY3RdIGlzIG5vdCBhIGZ1dHVyZSwgdGhlbiBpdCBpcyB3cmFwcGVkIGludG8gb25lLgovLy8KLy8vIFJldHVybnMgdGhlIHJlc3VsdCBvZiByZWdpc3RlcmluZyB3aXRoIGAudGhlbmAuCkZ1dHVyZSBfYXdhaXRIZWxwZXIoCiAgICB2YXIgb2JqZWN0LCBGdW5jdGlvbiB0aGVuQ2FsbGJhY2ssIEZ1bmN0aW9uIGVycm9yQ2FsbGJhY2ssIHZhciBhd2FpdGVyKSB7CiAgaWYgKG9iamVjdCBpcyEgRnV0dXJlKSB7CiAgICBvYmplY3QgPSBuZXcgX0Z1dHVyZSgpLi5fc2V0VmFsdWUob2JqZWN0KTsKICB9IGVsc2UgaWYgKG9iamVjdCBpcyEgX0Z1dHVyZSkgewogICAgcmV0dXJuIG9iamVjdC50aGVuKHRoZW5DYWxsYmFjaywgb25FcnJvcjogZXJyb3JDYWxsYmFjayk7CiAgfQogIC8vIGBvYmplY3RgIGlzIGEgYF9GdXR1cmVgLgogIC8vCiAgLy8gU2luY2UgdGhlIGNhbGxiYWNrcyBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBpbiB0aGUgY3VycmVudCB6b25lIChzZWUKICAvLyBbX2FzeW5jVGhlbldyYXBwZXJIZWxwZXJdIGFuZCBbX2FzeW5jRXJyb3JXcmFwcGVySGVscGVyXSksIHdlIGNhbiBhdm9pZAogIC8vIGFub3RoZXIgcmVnaXN0cmF0aW9uIGFuZCBkaXJlY3RseSBpbnZva2UgdGhlIG5vLXpvbmUtcmVnaXN0cmF0aW9uIGAudGhlbmAuCiAgLy8KICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIGZvciBvdXIgaW50ZXJuYWwgZnV0dXJlcyAodGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YKICAvLyBhbGwgZnV0dXJlcyB0aGF0IGFyZSBjb25zdHJ1Y3RlZCBieSB0aGUgYGRhcnQ6YXN5bmNgIGxpYnJhcnkpLgogIG9iamVjdC5fYXdhaXRlciA9IGF3YWl0ZXI7CiAgcmV0dXJuIG9iamVjdC5fdGhlbk5vWm9uZVJlZ2lzdHJhdGlvbih0aGVuQ2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spOwp9CgovLyBDYWxsZWQgYXMgcGFydCBvZiB0aGUgJ2F3YWl0IGZvciAoLi4uKScgY29uc3RydWN0LiBSZWdpc3RlcnMgdGhlCi8vIGF3YWl0ZXIgb24gdGhlIHN0cmVhbS4Kdm9pZCBfYXN5bmNTdGFyTGlzdGVuSGVscGVyKHZhciBvYmplY3QsIHZhciBhd2FpdGVyKSB7CiAgaWYgKG9iamVjdCBpcyEgX1N0cmVhbUltcGwpIHsKICAgIHJldHVybjsKICB9CiAgLy8gYG9iamVjdGAgaXMgYSBgX1N0cmVhbUltcGxgLgogIG9iamVjdC5fYXdhaXRlciA9IGF3YWl0ZXI7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQp2b2lkIF9hc3luY1N0YXJNb3ZlTmV4dEhlbHBlcih2YXIgc3RyZWFtKSB7CiAgaWYgKHN0cmVhbSBpcyEgX1N0cmVhbUltcGwpIHsKICAgIHJldHVybjsKICB9CiAgLy8gc3RyZWFtIGlzIGEgX1N0cmVhbUltcGwuCiAgaWYgKHN0cmVhbS5fZ2VuZXJhdG9yID09IG51bGwpIHsKICAgIC8vIE5vIGdlbmVyYXRvciByZWdpc3RlcmVkLCB0aGlzIGlzbid0IGFuIGFzeW5jKiBTdHJlYW0uCiAgICByZXR1cm47CiAgfQogIF9tb3ZlTmV4dERlYnVnZ2VyU3RlcENoZWNrKHN0cmVhbS5fZ2VuZXJhdG9yKTsKfQoKLy8gX0FzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXIgaXMgdXNlZCBieSB0aGUgY29tcGlsZXIgdG8gaW1wbGVtZW50Ci8vIGFzeW5jKiBnZW5lcmF0b3IgZnVuY3Rpb25zLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9Bc3luY1N0YXJTdHJlYW1Db250cm9sbGVyPFQ+IHsKICBTdHJlYW1Db250cm9sbGVyPFQ+IGNvbnRyb2xsZXI7CiAgRnVuY3Rpb24gYXN5bmNTdGFyQm9keTsKICBib29sIGlzQWRkaW5nID0gZmFsc2U7CiAgYm9vbCBvbkxpc3RlblJlY2VpdmVkID0gZmFsc2U7CiAgYm9vbCBpc1NjaGVkdWxlZCA9IGZhbHNlOwogIGJvb2wgaXNTdXNwZW5kZWRBdFlpZWxkID0gZmFsc2U7CiAgQ29tcGxldGVyIGNhbmNlbGxhdGlvbkNvbXBsZXRlciA9IG51bGw7CgogIFN0cmVhbTxUPiBnZXQgc3RyZWFtIHsKICAgIGZpbmFsIFN0cmVhbTxUPiBsb2NhbCA9IGNvbnRyb2xsZXIuc3RyZWFtOwogICAgaWYgKGxvY2FsIGlzIF9TdHJlYW1JbXBsPFQ+KSB7CiAgICAgIGxvY2FsLl9nZW5lcmF0b3IgPSBhc3luY1N0YXJCb2R5OwogICAgfQogICAgcmV0dXJuIGxvY2FsOwogIH0KCiAgdm9pZCBydW5Cb2R5KCkgewogICAgaXNTY2hlZHVsZWQgPSBmYWxzZTsKICAgIGlzU3VzcGVuZGVkQXRZaWVsZCA9IGZhbHNlOwogICAgYXN5bmNTdGFyQm9keSgpOwogIH0KCiAgdm9pZCBzY2hlZHVsZUdlbmVyYXRvcigpIHsKICAgIGlmIChpc1NjaGVkdWxlZCB8fCBjb250cm9sbGVyLmlzUGF1c2VkIHx8IGlzQWRkaW5nKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlzU2NoZWR1bGVkID0gdHJ1ZTsKICAgIHNjaGVkdWxlTWljcm90YXNrKHJ1bkJvZHkpOwogIH0KCiAgLy8gQWRkcyBlbGVtZW50IHRvIHN0cmVhbSwgcmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIHRlcm1pbmF0ZQogIC8vIGV4ZWN1dGlvbiBvZiB0aGUgZ2VuZXJhdG9yLgogIC8vCiAgLy8gVE9ETyhoYXVzbmVyKTogUGVyIHNwZWMsIHRoZSBnZW5lcmF0b3Igc2hvdWxkIGJlIHN1c3BlbmRlZCBiZWZvcmUKICAvLyBleGl0aW5nIHdoZW4gdGhlIHN0cmVhbSBpcyBjbG9zZWQuIFdlIGNvdWxkIGFkZCBhIGdldHRlciBsaWtlIHRoaXM6CiAgLy8gZ2V0IGlzQ2FuY2VsbGVkID0+IGNvbnRyb2xsZXIuaGFzTGlzdGVuZXI7CiAgLy8gVGhlIGdlbmVyYXRvciB3b3VsZCB0cmFuc2xhdGUgYSAneWllbGQgZScgc3RhdGVtZW50IHRvCiAgLy8gY29udHJvbGxlci5hZGQoZSk7CiAgLy8gc3VzcGVuZDsKICAvLyBpZiAoY29udHJvbGxlci5pc0NhbmNlbGxlZCkgcmV0dXJuOwogIGJvb2wgYWRkKFQgZXZlbnQpIHsKICAgIGlmICghb25MaXN0ZW5SZWNlaXZlZCkgX2ZhdGFsKCJ5aWVsZCBiZWZvcmUgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIik7CiAgICBpZiAoaXNTdXNwZW5kZWRBdFlpZWxkKSBfZmF0YWwoInVuZXhwZWN0ZWQgeWllbGQiKTsKICAgIC8vIElmIHN0cmVhbSBpcyBjYW5jZWxsZWQsIHRlbGwgY2FsbGVyIHRvIGV4aXQgdGhlIGFzeW5jIGdlbmVyYXRvci4KICAgIGlmICghY29udHJvbGxlci5oYXNMaXN0ZW5lcikgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGNvbnRyb2xsZXIuYWRkKGV2ZW50KTsKICAgIHNjaGVkdWxlR2VuZXJhdG9yKCk7CiAgICBpc1N1c3BlbmRlZEF0WWllbGQgPSB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLy8gQWRkcyB0aGUgZWxlbWVudHMgb2Ygc3RyZWFtIGludG8gdGhpcyBjb250cm9sbGVyJ3Mgc3RyZWFtLgogIC8vIFRoZSBnZW5lcmF0b3Igd2lsbCBiZSBzY2hlZHVsZWQgYWdhaW4gd2hlbiBhbGwgb2YgdGhlCiAgLy8gZWxlbWVudHMgb2YgdGhlIGFkZGVkIHN0cmVhbSBoYXZlIGJlZW4gY29uc3VtZWQuCiAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBjYWxsZXIgc2hvdWxkIHRlcm1pbmF0ZQogIC8vIGV4ZWN1dGlvbiBvZiB0aGUgZ2VuZXJhdG9yLgogIGJvb2wgYWRkU3RyZWFtKFN0cmVhbTxUPiBzdHJlYW0pIHsKICAgIGlmICghb25MaXN0ZW5SZWNlaXZlZCkgX2ZhdGFsKCJ5aWVsZCBiZWZvcmUgc3RyZWFtIGlzIGxpc3RlbmVkIHRvIik7CiAgICAvLyBJZiBzdHJlYW0gaXMgY2FuY2VsbGVkLCB0ZWxsIGNhbGxlciB0byBleGl0IHRoZSBhc3luYyBnZW5lcmF0b3IuCiAgICBpZiAoIWNvbnRyb2xsZXIuaGFzTGlzdGVuZXIpIHJldHVybiB0cnVlOwogICAgaXNBZGRpbmcgPSB0cnVlOwogICAgdmFyIHdoZW5Eb25lQWRkaW5nID0gY29udHJvbGxlci5hZGRTdHJlYW0oc3RyZWFtLCBjYW5jZWxPbkVycm9yOiBmYWxzZSk7CiAgICB3aGVuRG9uZUFkZGluZy50aGVuKChfKSB7CiAgICAgIGlzQWRkaW5nID0gZmFsc2U7CiAgICAgIHNjaGVkdWxlR2VuZXJhdG9yKCk7CiAgICAgIGlmICghaXNTY2hlZHVsZWQpIGlzU3VzcGVuZGVkQXRZaWVsZCA9IHRydWU7CiAgICB9KTsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGlmICgoY2FuY2VsbGF0aW9uQ29tcGxldGVyICE9IG51bGwpICYmICFjYW5jZWxsYXRpb25Db21wbGV0ZXIuaXNDb21wbGV0ZWQpIHsKICAgICAgLy8gSWYgdGhlIHN0cmVhbSBoYXMgYmVlbiBjYW5jZWxsZWQsIGNvbXBsZXRlIHRoZSBjYW5jZWxsYXRpb24gZnV0dXJlCiAgICAgIC8vIHdpdGggdGhlIGVycm9yLgogICAgICBjYW5jZWxsYXRpb25Db21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIElmIHN0cmVhbSBpcyBjYW5jZWxsZWQsIHRlbGwgY2FsbGVyIHRvIGV4aXQgdGhlIGFzeW5jIGdlbmVyYXRvci4KICAgIGlmICghY29udHJvbGxlci5oYXNMaXN0ZW5lcikgcmV0dXJuOwogICAgY29udHJvbGxlci5hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAvLyBObyBuZWVkIHRvIHNjaGVkdWxlIHRoZSBnZW5lcmF0b3IgYm9keSBoZXJlLiBUaGlzIGNvZGUgaXMgb25seQogICAgLy8gY2FsbGVkIGZyb20gdGhlIGNhdGNoIGNsYXVzZSBvZiB0aGUgaW1wbGljaXQgdHJ5LWNhdGNoLWZpbmFsbHkKICAgIC8vIGFyb3VuZCB0aGUgZ2VuZXJhdG9yIGJvZHkuIFRoYXQgaXMsIHdlIGFyZSBvbiB0aGUgZXJyb3IgcGF0aCBvdXQKICAgIC8vIG9mIHRoZSBnZW5lcmF0b3IgYW5kIGRvIG5vdCBuZWVkIHRvIHJ1biB0aGUgZ2VuZXJhdG9yIGFnYWluLgogIH0KCiAgY2xvc2UoKSB7CiAgICBpZiAoKGNhbmNlbGxhdGlvbkNvbXBsZXRlciAhPSBudWxsKSAmJiAhY2FuY2VsbGF0aW9uQ29tcGxldGVyLmlzQ29tcGxldGVkKSB7CiAgICAgIC8vIElmIHRoZSBzdHJlYW0gaGFzIGJlZW4gY2FuY2VsbGVkLCBjb21wbGV0ZSB0aGUgY2FuY2VsbGF0aW9uIGZ1dHVyZQogICAgICAvLyB3aXRoIHRoZSBlcnJvci4KICAgICAgY2FuY2VsbGF0aW9uQ29tcGxldGVyLmNvbXBsZXRlKCk7CiAgICB9CiAgICBjb250cm9sbGVyLmNsb3NlKCk7CiAgfQoKICBfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcih0aGlzLmFzeW5jU3RhckJvZHkpIHsKICAgIGNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcigKICAgICAgICBvbkxpc3RlbjogdGhpcy5vbkxpc3RlbiwKICAgICAgICBvblJlc3VtZTogdGhpcy5vblJlc3VtZSwKICAgICAgICBvbkNhbmNlbDogdGhpcy5vbkNhbmNlbCk7CiAgfQoKICBvbkxpc3RlbigpIHsKICAgIGFzc2VydCghb25MaXN0ZW5SZWNlaXZlZCk7CiAgICBvbkxpc3RlblJlY2VpdmVkID0gdHJ1ZTsKICAgIHNjaGVkdWxlR2VuZXJhdG9yKCk7CiAgfQoKICBvblJlc3VtZSgpIHsKICAgIGlmIChpc1N1c3BlbmRlZEF0WWllbGQpIHsKICAgICAgc2NoZWR1bGVHZW5lcmF0b3IoKTsKICAgIH0KICB9CgogIG9uQ2FuY2VsKCkgewogICAgaWYgKGNvbnRyb2xsZXIuaXNDbG9zZWQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoY2FuY2VsbGF0aW9uQ29tcGxldGVyID09IG51bGwpIHsKICAgICAgY2FuY2VsbGF0aW9uQ29tcGxldGVyID0gbmV3IENvbXBsZXRlcigpOwogICAgICAvLyBPbmx5IHJlc3VtZSB0aGUgZ2VuZXJhdG9yIGlmIGl0IGlzIHN1c3BlbmRlZCBhdCBhIHlpZWxkLgogICAgICAvLyBDYW5jZWxsYXRpb24gZG9lcyBub3QgYWZmZWN0IGFuIGFzeW5jIGdlbmVyYXRvciB0aGF0IGlzCiAgICAgIC8vIHN1c3BlbmRlZCBhdCBhbiBhd2FpdC4KICAgICAgaWYgKGlzU3VzcGVuZGVkQXRZaWVsZCkgewogICAgICAgIHNjaGVkdWxlR2VuZXJhdG9yKCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBjYW5jZWxsYXRpb25Db21wbGV0ZXIuZnV0dXJlOwogIH0KfQoKQHBhdGNoCnZvaWQgX3JldGhyb3coT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIG5hdGl2ZSAiQXN5bmNfcmV0aHJvdyI7CgpAcGF0Y2gKY2xhc3MgX0Z1dHVyZTxUPiB7CiAgLy8vIFRoZSBjbG9zdXJlIGltcGxlbWVudGluZyB0aGUgYXN5bmNbKl0tYm9keSB0aGF0IGlzIGBhd2FpdGBpbmcgdGhpcyBmdXR1cmUuCiAgRnVuY3Rpb24gX2F3YWl0ZXI7Cn0KCkBwYXRjaApjbGFzcyBfU3RyZWFtSW1wbDxUPiB7CiAgLy8vIFRoZSBjbG9zdXJlIGltcGxlbWVudGluZyB0aGUgYXN5bmNbKl0tYm9keSB0aGF0IGlzIGBhd2FpdGBpbmcgdGhpcyBmdXR1cmUuCiAgRnVuY3Rpb24gX2F3YWl0ZXI7CgogIC8vLyBUaGUgY2xvc3VyZSBpbXBsZW1lbnRpbmcgdGhlIGFzeW5jLWdlbmVyYXRvciBib2R5IHRoYXQgaXMgY3JlYXRpbmcgZXZlbnRzCiAgLy8vIGZvciB0aGlzIHN0cmVhbS4KICBGdW5jdGlvbiBfZ2VuZXJhdG9yOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKdm9pZCBfY29tcGxldGVPbkFzeW5jUmV0dXJuKENvbXBsZXRlciBjb21wbGV0ZXIsIE9iamVjdCB2YWx1ZSkgewogIGNvbXBsZXRlci5jb21wbGV0ZSh2YWx1ZSk7Cn0KCi8vLyBSZXR1cm5zIGEgW1N0YWNrVHJhY2VdIG9iamVjdCBjb250YWluaW5nIHRoZSBzeW5jaHJvbm91cyBwcmVmaXggZm9yIHRoaXMKLy8vIGFzeW5jaHJvbm91cyBtZXRob2QuCi8vCi8vIFRoaXMgbWV0aG9kIGlzIHJlY29nbml6ZWQuIEl0IHBlcmZvcm1zIGEgcnVudGltZSBjYWxsIGlmCi8vIEZMQUdfY2F1c2FsX2FzeW5jX3N0YWNrcyBpcyBlbmFibGVkIG9yIHJldHVybnMgYG51bGxgIG90aGVyd2lzZS4KQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCk9iamVjdCBfYXN5bmNTdGFja1RyYWNlSGVscGVyKEZ1bmN0aW9uIGFzeW5jX29wKQogICAgbmF0aXZlICJTdGFja1RyYWNlX2FzeW5jU3RhY2tUcmFjZUhlbHBlciI7CgovLyBUaGlzIG1ldGhvZCBpcyBhc20gaW50cmluc2lmaWVkLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKdm9pZCBfY2xlYXJBc3luY1RocmVhZFN0YWNrVHJhY2UoKQogICAgbmF0aXZlICJTdGFja1RyYWNlX2NsZWFyQXN5bmNUaHJlYWRTdGFja1RyYWNlIjsKCi8vIFRoaXMgbWV0aG9kIGlzIGFzbSBpbnRyaW5zaWZpZWQuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQp2b2lkIF9zZXRBc3luY1RocmVhZFN0YWNrVHJhY2UoU3RhY2tUcmFjZSBzdGFja1RyYWNlKQogICAgbmF0aXZlICJTdGFja1RyYWNlX3NldEFzeW5jVGhyZWFkU3RhY2tUcmFjZSI7Cgp2b2lkIF9tb3ZlTmV4dERlYnVnZ2VyU3RlcENoZWNrKEZ1bmN0aW9uIGFzeW5jX29wKQogICAgbmF0aXZlICJBc3luY1N0YXJNb3ZlTmV4dF9kZWJ1Z2dlclN0ZXBDaGVjayI7CoE/AE5OPAFNUE0kATQBOiQpHAEuJgE4Lg8BKwEnEiIlSg0dJAoGBAEgEicNHSkKBgQBEgkTBAEtMgIBTi4oMU5GUFBNTkAFTjkFT0ZMIDZRAgFNSDIwOjc9AgFMBD4ENBVOGy8jPgQeBUdNUAVRRB1GAgFEGjcgDAQiHQIBIiwgDAQeIz0MBDECAUMfGiYiGhkhHCMqARkvIygGEgQBExkgFQQBHToOBhggBAFJIQVHSTA8GA4pFkk4SCMTBhsZHxIEAUA7NjEhJUlILhVNHhgbMwgSBAE3UUwZPg4GSCksRkZIRAQBDFFMGSgGGAQBMychISIEAQ8fHRkEAQ8eGwYEAQ8fEwYpL0JBICAdCAYpBAIBB0sBBxNRFQIBBxdRFQFQFxcCASJBHQIBTRkDPEQcMS8BJCIjNAEkIjYyATMyASFkYXJ0OmFzeW5jLXBhdGNoL2FzeW5jX3BhdGNoLmRhcnQ9b3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9zY2hlZHVsZV9taWNyb3Rhc2tfcGF0Y2guZGFydIONLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImFzeW5jX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIF9Bc3luY1J1biB7CiAgQHBhdGNoCiAgc3RhdGljIHZvaWQgX3NjaGVkdWxlSW1tZWRpYXRlKHZvaWQgY2FsbGJhY2soKSkgewogICAgaWYgKF9TY2hlZHVsZUltbWVkaWF0ZS5fY2xvc3VyZSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJNaWNyb3Rhc2tzIGFyZSBub3Qgc3VwcG9ydGVkIik7CiAgICB9CiAgICBfU2NoZWR1bGVJbW1lZGlhdGUuX2Nsb3N1cmUoY2FsbGJhY2spOwogIH0KfQoKdHlwZWRlZiB2b2lkIF9TY2hlZHVsZUltbWVkaWF0ZUNsb3N1cmUodm9pZCBjYWxsYmFjaygpKTsKCmNsYXNzIF9TY2hlZHVsZUltbWVkaWF0ZSB7CiAgc3RhdGljIF9TY2hlZHVsZUltbWVkaWF0ZUNsb3N1cmUgX2Nsb3N1cmU7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQp2b2lkIF9zZXRTY2hlZHVsZUltbWVkaWF0ZUNsb3N1cmUoX1NjaGVkdWxlSW1tZWRpYXRlQ2xvc3VyZSBjbG9zdXJlKSB7CiAgX1NjaGVkdWxlSW1tZWRpYXRlLl9jbG9zdXJlID0gY2xvc3VyZTsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCnZvaWQgX2Vuc3VyZVNjaGVkdWxlSW1tZWRpYXRlKCkgewogIF9Bc3luY1J1bi5fc2NoZWR1bGVJbW1lZGlhdGUoX3N0YXJ0TWljcm90YXNrTG9vcCk7Cn0KIgBOTjwBHwEHEgk0L0IGKwQCATkBGy0CASJHKQIBIiI1AgEuZGFydDphc3luYy1wYXRjaC9zY2hlZHVsZV9taWNyb3Rhc2tfcGF0Y2guZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3RpbWVyX3BhdGNoLmRhcnSF7i8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJhc3luY19wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBUaW1lciB7CiAgQHBhdGNoCiAgc3RhdGljIFRpbWVyIF9jcmVhdGVUaW1lcihEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBjYWxsYmFjaygpKSB7CiAgICAvLyBUT0RPKGlwb3N2YSk6IFJlbW92ZSBfVGltZXJGYWN0b3J5IGFuZCB1c2UgVk1MaWJyYXJ5SG9va3MgZXhjbHVzaXZlbHkuCiAgICBpZiAoX1RpbWVyRmFjdG9yeS5fZmFjdG9yeSA9PSBudWxsKSB7CiAgICAgIF9UaW1lckZhY3RvcnkuX2ZhY3RvcnkgPSBWTUxpYnJhcnlIb29rcy50aW1lckZhY3Rvcnk7CiAgICB9CiAgICBpZiAoX1RpbWVyRmFjdG9yeS5fZmFjdG9yeSA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJUaW1lciBpbnRlcmZhY2Ugbm90IHN1cHBvcnRlZC4iKTsKICAgIH0KICAgIGludCBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5pbk1pbGxpc2Vjb25kczsKICAgIGlmIChtaWxsaXNlY29uZHMgPCAwKSBtaWxsaXNlY29uZHMgPSAwOwogICAgcmV0dXJuIF9UaW1lckZhY3RvcnkuX2ZhY3RvcnkobWlsbGlzZWNvbmRzLCAoXykgewogICAgICBjYWxsYmFjaygpOwogICAgfSwgZmFsc2UpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIFRpbWVyIF9jcmVhdGVQZXJpb2RpY1RpbWVyKAogICAgICBEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBjYWxsYmFjayhUaW1lciB0aW1lcikpIHsKICAgIC8vIFRPRE8oaXBvc3ZhKTogUmVtb3ZlIF9UaW1lckZhY3RvcnkgYW5kIHVzZSBWTUxpYnJhcnlIb29rcyBleGNsdXNpdmVseS4KICAgIF9UaW1lckZhY3RvcnkuX2ZhY3RvcnkgPz89IFZNTGlicmFyeUhvb2tzLnRpbWVyRmFjdG9yeTsKICAgIGlmIChfVGltZXJGYWN0b3J5Ll9mYWN0b3J5ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIlRpbWVyIGludGVyZmFjZSBub3Qgc3VwcG9ydGVkLiIpOwogICAgfQogICAgaW50IG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLmluTWlsbGlzZWNvbmRzOwogICAgaWYgKG1pbGxpc2Vjb25kcyA8IDApIG1pbGxpc2Vjb25kcyA9IDA7CiAgICByZXR1cm4gX1RpbWVyRmFjdG9yeS5fZmFjdG9yeShtaWxsaXNlY29uZHMsIGNhbGxiYWNrLCB0cnVlKTsKICB9Cn0KCnR5cGVkZWYgVGltZXIgX1RpbWVyRmFjdG9yeUNsb3N1cmUoCiAgICBpbnQgbWlsbGlzZWNvbmRzLCB2b2lkIGNhbGxiYWNrKFRpbWVyIHRpbWVyKSwgYm9vbCByZXBlYXRpbmcpOwoKY2xhc3MgX1RpbWVyRmFjdG9yeSB7CiAgc3RhdGljIF9UaW1lckZhY3RvcnlDbG9zdXJlIF9mYWN0b3J5Owp9Ci4ATk48AR8BBw4JQk4qPAYqRAYwLDYSDwQBCSU3TjwqRAYwLEEEAgEkQwEWKAIBIWRhcnQ6YXN5bmMtcGF0Y2gvdGltZXJfcGF0Y2guZGFydEJvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvYXN5bmMvYnJvYWRjYXN0X3N0cmVhbV9jb250cm9sbGVyLmRhcnS8ji8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuYXN5bmM7CgpjbGFzcyBfQnJvYWRjYXN0U3RyZWFtPFQ+IGV4dGVuZHMgX0NvbnRyb2xsZXJTdHJlYW08VD4gewogIF9Ccm9hZGNhc3RTdHJlYW0oX1N0cmVhbUNvbnRyb2xsZXJMaWZlY3ljbGU8VD4gY29udHJvbGxlcikKICAgICAgOiBzdXBlcihjb250cm9sbGVyKTsKCiAgYm9vbCBnZXQgaXNCcm9hZGNhc3QgPT4gdHJ1ZTsKfQoKY2xhc3MgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBleHRlbmRzIF9Db250cm9sbGVyU3Vic2NyaXB0aW9uPFQ+IHsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9FVkVOVF9JRCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfRklSSU5HID0gMjsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9SRU1PVkVfQUZURVJfRklSSU5HID0gNDsKICAvLyBUT0RPKGxybik6IFVzZSB0aGUgX3N0YXRlIGZpZWxkIG9uIF9Db250cm9sbGVyU3Vic2NyaXB0aW9uIHRvCiAgLy8gYWxzbyBzdG9yZSB0aGlzIHN0YXRlLiBSZXF1aXJlcyB0aGF0IHRoZSBzdWJzY3JpcHRpb24gaW1wbGVtZW50YXRpb24KICAvLyBkb2VzIG5vdCBhc3N1bWUgdGhhdCBpdCdzIHVzZSBvZiB0aGUgc3RhdGUgaW50ZWdlciBpcyB0aGUgb25seSB1c2UuCiAgaW50IF9ldmVudFN0YXRlID0gMDsgLy8gSW5pdGlhbGl6ZWQgdG8gaGVscCBkYXJ0MmpzIHR5cGUgaW5mZXJlbmNlLgoKICBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IF9uZXh0OwogIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gX3ByZXZpb3VzOwoKICBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uKF9TdHJlYW1Db250cm9sbGVyTGlmZWN5Y2xlPFQ+IGNvbnRyb2xsZXIsCiAgICAgIHZvaWQgb25EYXRhKFQgZGF0YSksIEZ1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcikKICAgICAgOiBzdXBlcihjb250cm9sbGVyLCBvbkRhdGEsIG9uRXJyb3IsIG9uRG9uZSwgY2FuY2VsT25FcnJvcikgewogICAgX25leHQgPSBfcHJldmlvdXMgPSB0aGlzOwogIH0KCiAgYm9vbCBfZXhwZWN0c0V2ZW50KGludCBldmVudElkKSA9PiAoX2V2ZW50U3RhdGUgJiBfU1RBVEVfRVZFTlRfSUQpID09IGV2ZW50SWQ7CgogIHZvaWQgX3RvZ2dsZUV2ZW50SWQoKSB7CiAgICBfZXZlbnRTdGF0ZSBePSBfU1RBVEVfRVZFTlRfSUQ7CiAgfQoKICBib29sIGdldCBfaXNGaXJpbmcgPT4gKF9ldmVudFN0YXRlICYgX1NUQVRFX0ZJUklORykgIT0gMDsKCiAgdm9pZCBfc2V0UmVtb3ZlQWZ0ZXJGaXJpbmcoKSB7CiAgICBhc3NlcnQoX2lzRmlyaW5nKTsKICAgIF9ldmVudFN0YXRlIHw9IF9TVEFURV9SRU1PVkVfQUZURVJfRklSSU5HOwogIH0KCiAgYm9vbCBnZXQgX3JlbW92ZUFmdGVyRmlyaW5nID0+CiAgICAgIChfZXZlbnRTdGF0ZSAmIF9TVEFURV9SRU1PVkVfQUZURVJfRklSSU5HKSAhPSAwOwoKICAvLyBUaGUgY29udHJvbGxlci5fcmVjb3JkUGF1c2UgZG9lc24ndCBkbyBhbnl0aGluZyBmb3IgYSBicm9hZGNhc3QgY29udHJvbGxlciwKICAvLyBzbyB3ZSBkb24ndCBib3RoZXIgY2FsbGluZyBpdC4KICB2b2lkIF9vblBhdXNlKCkge30KCiAgLy8gVGhlIGNvbnRyb2xsZXIuX3JlY29yZFJlc3VtZSBkb2Vzbid0IGRvIGFueXRoaW5nIGZvciBhIGJyb2FkY2FzdAogIC8vIGNvbnRyb2xsZXIsIHNvIHdlIGRvbid0IGJvdGhlciBjYWxsaW5nIGl0LgogIHZvaWQgX29uUmVzdW1lKCkge30KCiAgLy8gX29uQ2FuY2VsIGlzIGluaGVyaXRlZC4KfQoKYWJzdHJhY3QgY2xhc3MgX0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4KICAgIGltcGxlbWVudHMgX1N0cmVhbUNvbnRyb2xsZXJCYXNlPFQ+IHsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9JTklUSUFMID0gMDsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9FVkVOVF9JRCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBfU1RBVEVfRklSSU5HID0gMjsKICBzdGF0aWMgY29uc3QgaW50IF9TVEFURV9DTE9TRUQgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgX1NUQVRFX0FERFNUUkVBTSA9IDg7CgogIENvbnRyb2xsZXJDYWxsYmFjayBvbkxpc3RlbjsKICBDb250cm9sbGVyQ2FuY2VsQ2FsbGJhY2sgb25DYW5jZWw7CgogIC8vIFN0YXRlIG9mIHRoZSBjb250cm9sbGVyLgogIGludCBfc3RhdGU7CgogIC8vIERvdWJsZS1saW5rZWQgbGlzdCBvZiBhY3RpdmUgbGlzdGVuZXJzLgogIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gX2ZpcnN0U3Vic2NyaXB0aW9uOwogIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gX2xhc3RTdWJzY3JpcHRpb247CgogIC8vIEV4dHJhIHN0YXRlIHVzZWQgZHVyaW5nIGFuIFthZGRTdHJlYW1dIGNhbGwuCiAgX0FkZFN0cmVhbVN0YXRlPFQ+IF9hZGRTdHJlYW1TdGF0ZTsKCiAgLyoqCiAgICogRnV0dXJlIHJldHVybmVkIGJ5IFtjbG9zZV0gYW5kIFtkb25lXS4KICAgKgogICAqIFRoZSBmdXR1cmUgaXMgY29tcGxldGVkIHdoZW5ldmVyIHRoZSBkb25lIGV2ZW50IGhhcyBiZWVuIHNlbnQgdG8gYWxsCiAgICogcmVsZXZhbnQgbGlzdGVuZXJzLgogICAqIFRoZSByZWxldmFudCBsaXN0ZW5lcnMgYXJlIHRoZSBvbmVzIHRoYXQgd2VyZSBsaXN0ZW5pbmcgd2hlbiBbY2xvc2VdIHdhcwogICAqIGNhbGxlZC4gV2hlbiBhbGwgb2YgdGhlc2UgaGF2ZSBiZWVuIGNhbmNlbGVkIChzZW5kaW5nIHRoZSBkb25lIGV2ZW50IG1ha2VzCiAgICogdGhlbSBjYW5jZWwsIGJ1dCB0aGV5IGNhbiBhbHNvIGJlIGNhbmNlbGVkIGJlZm9yZSBzZW5kaW5nIHRoZSBldmVudCksCiAgICogdGhpcyBmdXR1cmUgY29tcGxldGVzLgogICAqCiAgICogQW55IGF0dGVtcHQgdG8gbGlzdGVuIGFmdGVyIGNhbGxpbmcgW2Nsb3NlXSB3aWxsIHRocm93LCBzbyB0aGVyZSB3b24ndAogICAqIGJlIGFueSBmdXJ0aGVyIGxpc3RlbmVycy4KICAgKi8KICBfRnV0dXJlIF9kb25lRnV0dXJlOwoKICBfQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcih0aGlzLm9uTGlzdGVuLCB0aGlzLm9uQ2FuY2VsKQogICAgICA6IF9zdGF0ZSA9IF9TVEFURV9JTklUSUFMOwoKICBDb250cm9sbGVyQ2FsbGJhY2sgZ2V0IG9uUGF1c2UgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkJyb2FkY2FzdCBzdHJlYW0gY29udHJvbGxlcnMgZG8gbm90IHN1cHBvcnQgcGF1c2UgY2FsbGJhY2tzIik7CiAgfQoKICB2b2lkIHNldCBvblBhdXNlKHZvaWQgb25QYXVzZUhhbmRsZXIoKSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkJyb2FkY2FzdCBzdHJlYW0gY29udHJvbGxlcnMgZG8gbm90IHN1cHBvcnQgcGF1c2UgY2FsbGJhY2tzIik7CiAgfQoKICBDb250cm9sbGVyQ2FsbGJhY2sgZ2V0IG9uUmVzdW1lIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJCcm9hZGNhc3Qgc3RyZWFtIGNvbnRyb2xsZXJzIGRvIG5vdCBzdXBwb3J0IHBhdXNlIGNhbGxiYWNrcyIpOwogIH0KCiAgdm9pZCBzZXQgb25SZXN1bWUodm9pZCBvblJlc3VtZUhhbmRsZXIoKSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkJyb2FkY2FzdCBzdHJlYW0gY29udHJvbGxlcnMgZG8gbm90IHN1cHBvcnQgcGF1c2UgY2FsbGJhY2tzIik7CiAgfQoKICAvLyBTdHJlYW1Db250cm9sbGVyIGludGVyZmFjZS4KCiAgU3RyZWFtPFQ+IGdldCBzdHJlYW0gPT4gbmV3IF9Ccm9hZGNhc3RTdHJlYW08VD4odGhpcyk7CgogIFN0cmVhbVNpbms8VD4gZ2V0IHNpbmsgPT4gbmV3IF9TdHJlYW1TaW5rV3JhcHBlcjxUPih0aGlzKTsKCiAgYm9vbCBnZXQgaXNDbG9zZWQgPT4gKF9zdGF0ZSAmIF9TVEFURV9DTE9TRUQpICE9IDA7CgogIC8qKgogICAqIEEgYnJvYWRjYXN0IGNvbnRyb2xsZXIgaXMgbmV2ZXIgcGF1c2VkLgogICAqCiAgICogRWFjaCByZWNlaXZpbmcgc3RyZWFtIG1heSBiZSBwYXVzZWQgaW5kaXZpZHVhbGx5LCBhbmQgdGhleSBoYW5kbGUgdGhlaXIKICAgKiBvd24gYnVmZmVyaW5nLgogICAqLwogIGJvb2wgZ2V0IGlzUGF1c2VkID0+IGZhbHNlOwoKICAvKiogV2hldGhlciB0aGVyZSBhcmUgY3VycmVudGx5IG9uZSBvciBtb3JlIHN1YnNjcmliZXJzLiAqLwogIGJvb2wgZ2V0IGhhc0xpc3RlbmVyID0+ICFfaXNFbXB0eTsKCiAgLyoqCiAgICogVGVzdCB3aGV0aGVyIHRoZSBzdHJlYW0gaGFzIGV4YWN0bHkgb25lIGxpc3RlbmVyLgogICAqCiAgICogQXNzdW1lcyB0aGF0IHRoZSBzdHJlYW0gaGFzIGEgbGlzdGVuZXIgKG5vdCBbX2lzRW1wdHldKS4KICAgKi8KICBib29sIGdldCBfaGFzT25lTGlzdGVuZXIgewogICAgYXNzZXJ0KCFfaXNFbXB0eSk7CiAgICByZXR1cm4gaWRlbnRpY2FsKF9maXJzdFN1YnNjcmlwdGlvbiwgX2xhc3RTdWJzY3JpcHRpb24pOwogIH0KCiAgLyoqIFdoZXRoZXIgYW4gZXZlbnQgaXMgYmVpbmcgZmlyZWQgKHNlbnQgdG8gc29tZSwgYnV0IG5vdCBhbGwsIGxpc3RlbmVycykuICovCiAgYm9vbCBnZXQgX2lzRmlyaW5nID0+IChfc3RhdGUgJiBfU1RBVEVfRklSSU5HKSAhPSAwOwoKICBib29sIGdldCBfaXNBZGRpbmdTdHJlYW0gPT4gKF9zdGF0ZSAmIF9TVEFURV9BRERTVFJFQU0pICE9IDA7CgogIGJvb2wgZ2V0IF9tYXlBZGRFdmVudCA9PiAoX3N0YXRlIDwgX1NUQVRFX0NMT1NFRCk7CgogIF9GdXR1cmUgX2Vuc3VyZURvbmVGdXR1cmUoKSB7CiAgICBpZiAoX2RvbmVGdXR1cmUgIT0gbnVsbCkgcmV0dXJuIF9kb25lRnV0dXJlOwogICAgcmV0dXJuIF9kb25lRnV0dXJlID0gbmV3IF9GdXR1cmUoKTsKICB9CgogIC8vIExpbmtlZCBsaXN0IGhlbHBlcnMKCiAgYm9vbCBnZXQgX2lzRW1wdHkgPT4gX2ZpcnN0U3Vic2NyaXB0aW9uID09IG51bGw7CgogIC8qKiBBZGRzIHN1YnNjcmlwdGlvbiB0byBsaW5rZWQgbGlzdCBvZiBhY3RpdmUgbGlzdGVuZXJzLiAqLwogIHZvaWQgX2FkZExpc3RlbmVyKF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSB7CiAgICBhc3NlcnQoaWRlbnRpY2FsKHN1YnNjcmlwdGlvbi5fbmV4dCwgc3Vic2NyaXB0aW9uKSk7CiAgICBzdWJzY3JpcHRpb24uX2V2ZW50U3RhdGUgPSAoX3N0YXRlICYgX1NUQVRFX0VWRU5UX0lEKTsKICAgIC8vIEluc2VydCBpbiBsaW5rZWQgbGlzdCBhcyBsYXN0IHN1YnNjcmlwdGlvbi4KICAgIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gb2xkTGFzdCA9IF9sYXN0U3Vic2NyaXB0aW9uOwogICAgX2xhc3RTdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb247CiAgICBzdWJzY3JpcHRpb24uX25leHQgPSBudWxsOwogICAgc3Vic2NyaXB0aW9uLl9wcmV2aW91cyA9IG9sZExhc3Q7CiAgICBpZiAob2xkTGFzdCA9PSBudWxsKSB7CiAgICAgIF9maXJzdFN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbjsKICAgIH0gZWxzZSB7CiAgICAgIG9sZExhc3QuX25leHQgPSBzdWJzY3JpcHRpb247CiAgICB9CiAgfQoKICB2b2lkIF9yZW1vdmVMaXN0ZW5lcihfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikgewogICAgYXNzZXJ0KGlkZW50aWNhbChzdWJzY3JpcHRpb24uX2NvbnRyb2xsZXIsIHRoaXMpKTsKICAgIGFzc2VydCghaWRlbnRpY2FsKHN1YnNjcmlwdGlvbi5fbmV4dCwgc3Vic2NyaXB0aW9uKSk7CiAgICBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IHByZXZpb3VzID0gc3Vic2NyaXB0aW9uLl9wcmV2aW91czsKICAgIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gbmV4dCA9IHN1YnNjcmlwdGlvbi5fbmV4dDsKICAgIGlmIChwcmV2aW91cyA9PSBudWxsKSB7CiAgICAgIC8vIFRoaXMgd2FzIHRoZSBmaXJzdCBzdWJzY3JpcHRpb24uCiAgICAgIF9maXJzdFN1YnNjcmlwdGlvbiA9IG5leHQ7CiAgICB9IGVsc2UgewogICAgICBwcmV2aW91cy5fbmV4dCA9IG5leHQ7CiAgICB9CiAgICBpZiAobmV4dCA9PSBudWxsKSB7CiAgICAgIC8vIFRoaXMgd2FzIHRoZSBsYXN0IHN1YnNjcmlwdGlvbi4KICAgICAgX2xhc3RTdWJzY3JpcHRpb24gPSBwcmV2aW91czsKICAgIH0gZWxzZSB7CiAgICAgIG5leHQuX3ByZXZpb3VzID0gcHJldmlvdXM7CiAgICB9CgogICAgc3Vic2NyaXB0aW9uLl9uZXh0ID0gc3Vic2NyaXB0aW9uLl9wcmV2aW91cyA9IHN1YnNjcmlwdGlvbjsKICB9CgogIC8vIF9TdHJlYW1Db250cm9sbGVyTGlmZWN5Y2xlIGludGVyZmFjZS4KCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IF9zdWJzY3JpYmUodm9pZCBvbkRhdGEoVCBkYXRhKSwgRnVuY3Rpb24gb25FcnJvciwKICAgICAgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yKSB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgb25Eb25lID8/PSBfbnVsbERvbmVIYW5kbGVyOwogICAgICByZXR1cm4gbmV3IF9Eb25lU3RyZWFtU3Vic2NyaXB0aW9uPFQ+KG9uRG9uZSk7CiAgICB9CiAgICBTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uID0gbmV3IF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4oCiAgICAgICAgdGhpcywgb25EYXRhLCBvbkVycm9yLCBvbkRvbmUsIGNhbmNlbE9uRXJyb3IpOwogICAgX2FkZExpc3RlbmVyKHN1YnNjcmlwdGlvbik7CiAgICBpZiAoaWRlbnRpY2FsKF9maXJzdFN1YnNjcmlwdGlvbiwgX2xhc3RTdWJzY3JpcHRpb24pKSB7CiAgICAgIC8vIE9ubHkgb25lIGxpc3RlbmVyLCBzbyBpdCBtdXN0IGJlIHRoZSBmaXJzdCBsaXN0ZW5lci4KICAgICAgX3J1bkd1YXJkZWQob25MaXN0ZW4pOwogICAgfQogICAgcmV0dXJuIHN1YnNjcmlwdGlvbjsKICB9CgogIEZ1dHVyZSBfcmVjb3JkQ2FuY2VsKFN0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWIpIHsKICAgIF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uID0gc3ViOwogICAgLy8gSWYgYWxyZWFkeSByZW1vdmVkIGJ5IHRoZSBzdHJlYW0sIGRvbid0IHJlbW92ZSBpdCBhZ2Fpbi4KICAgIGlmIChpZGVudGljYWwoc3Vic2NyaXB0aW9uLl9uZXh0LCBzdWJzY3JpcHRpb24pKSByZXR1cm4gbnVsbDsKICAgIGlmIChzdWJzY3JpcHRpb24uX2lzRmlyaW5nKSB7CiAgICAgIHN1YnNjcmlwdGlvbi5fc2V0UmVtb3ZlQWZ0ZXJGaXJpbmcoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9yZW1vdmVMaXN0ZW5lcihzdWJzY3JpcHRpb24pOwogICAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGZpcmluZyBhbiBldmVudCwgdGhlIGVtcHR5LWNoZWNrIGlzIHBlcmZvcm1lZCBhdAogICAgICAvLyB0aGUgZW5kIG9mIHRoZSBsaXN0ZW5lciBsb29wIGluc3RlYWQgb2YgaGVyZS4KICAgICAgaWYgKCFfaXNGaXJpbmcgJiYgX2lzRW1wdHkpIHsKICAgICAgICBfY2FsbE9uQ2FuY2VsKCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBfcmVjb3JkUGF1c2UoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikge30KICB2b2lkIF9yZWNvcmRSZXN1bWUoU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikge30KCiAgLy8gRXZlbnRTaW5rIGludGVyZmFjZS4KCiAgRXJyb3IgX2FkZEV2ZW50RXJyb3IoKSB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgcmV0dXJuIG5ldyBTdGF0ZUVycm9yKCJDYW5ub3QgYWRkIG5ldyBldmVudHMgYWZ0ZXIgY2FsbGluZyBjbG9zZSIpOwogICAgfQogICAgYXNzZXJ0KF9pc0FkZGluZ1N0cmVhbSk7CiAgICByZXR1cm4gbmV3IFN0YXRlRXJyb3IoIkNhbm5vdCBhZGQgbmV3IGV2ZW50cyB3aGlsZSBkb2luZyBhbiBhZGRTdHJlYW0iKTsKICB9CgogIHZvaWQgYWRkKFQgZGF0YSkgewogICAgaWYgKCFfbWF5QWRkRXZlbnQpIHRocm93IF9hZGRFdmVudEVycm9yKCk7CiAgICBfc2VuZERhdGEoZGF0YSk7CiAgfQoKICB2b2lkIGFkZEVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIGVycm9yID0gX25vbk51bGxFcnJvcihlcnJvcik7CiAgICBpZiAoIV9tYXlBZGRFdmVudCkgdGhyb3cgX2FkZEV2ZW50RXJyb3IoKTsKICAgIEFzeW5jRXJyb3IgcmVwbGFjZW1lbnQgPSBab25lLmN1cnJlbnQuZXJyb3JDYWxsYmFjayhlcnJvciwgc3RhY2tUcmFjZSk7CiAgICBpZiAocmVwbGFjZW1lbnQgIT0gbnVsbCkgewogICAgICBlcnJvciA9IF9ub25OdWxsRXJyb3IocmVwbGFjZW1lbnQuZXJyb3IpOwogICAgICBzdGFja1RyYWNlID0gcmVwbGFjZW1lbnQuc3RhY2tUcmFjZTsKICAgIH0KICAgIF9zZW5kRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgRnV0dXJlIGNsb3NlKCkgewogICAgaWYgKGlzQ2xvc2VkKSB7CiAgICAgIGFzc2VydChfZG9uZUZ1dHVyZSAhPSBudWxsKTsKICAgICAgcmV0dXJuIF9kb25lRnV0dXJlOwogICAgfQogICAgaWYgKCFfbWF5QWRkRXZlbnQpIHRocm93IF9hZGRFdmVudEVycm9yKCk7CiAgICBfc3RhdGUgfD0gX1NUQVRFX0NMT1NFRDsKICAgIEZ1dHVyZSBkb25lRnV0dXJlID0gX2Vuc3VyZURvbmVGdXR1cmUoKTsKICAgIF9zZW5kRG9uZSgpOwogICAgcmV0dXJuIGRvbmVGdXR1cmU7CiAgfQoKICBGdXR1cmUgZ2V0IGRvbmUgPT4gX2Vuc3VyZURvbmVGdXR1cmUoKTsKCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08VD4gc3RyZWFtLCB7Ym9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgaWYgKCFfbWF5QWRkRXZlbnQpIHRocm93IF9hZGRFdmVudEVycm9yKCk7CiAgICBfc3RhdGUgfD0gX1NUQVRFX0FERFNUUkVBTTsKICAgIF9hZGRTdHJlYW1TdGF0ZSA9IG5ldyBfQWRkU3RyZWFtU3RhdGUodGhpcywgc3RyZWFtLCBjYW5jZWxPbkVycm9yID8/IGZhbHNlKTsKICAgIHJldHVybiBfYWRkU3RyZWFtU3RhdGUuYWRkU3RyZWFtRnV0dXJlOwogIH0KCiAgLy8gX0V2ZW50U2luayBpbnRlcmZhY2UsIGNhbGxlZCBmcm9tIEFkZFN0cmVhbVN0YXRlLgogIHZvaWQgX2FkZChUIGRhdGEpIHsKICAgIF9zZW5kRGF0YShkYXRhKTsKICB9CgogIHZvaWQgX2FkZEVycm9yKE9iamVjdCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgICBfc2VuZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgX2Nsb3NlKCkgewogICAgYXNzZXJ0KF9pc0FkZGluZ1N0cmVhbSk7CiAgICBfQWRkU3RyZWFtU3RhdGUgYWRkU3RhdGUgPSBfYWRkU3RyZWFtU3RhdGU7CiAgICBfYWRkU3RyZWFtU3RhdGUgPSBudWxsOwogICAgX3N0YXRlICY9IH5fU1RBVEVfQUREU1RSRUFNOwogICAgYWRkU3RhdGUuY29tcGxldGUoKTsKICB9CgogIC8vIEV2ZW50IGhhbmRsaW5nLgogIHZvaWQgX2ZvckVhY2hMaXN0ZW5lcigKICAgICAgdm9pZCBhY3Rpb24oX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pKSB7CiAgICBpZiAoX2lzRmlyaW5nKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKAogICAgICAgICAgIkNhbm5vdCBmaXJlIG5ldyBldmVudC4gQ29udHJvbGxlciBpcyBhbHJlYWR5IGZpcmluZyBhbiBldmVudCIpOwogICAgfQogICAgaWYgKF9pc0VtcHR5KSByZXR1cm47CgogICAgLy8gR2V0IGV2ZW50IGlkIG9mIHRoaXMgZXZlbnQuCiAgICBpbnQgaWQgPSAoX3N0YXRlICYgX1NUQVRFX0VWRU5UX0lEKTsKICAgIC8vIFN0YXJ0IGZpcmluZyAoc2V0IHRoZSBfU1RBVEVfRklSSU5HIGJpdCkuIFdlIGRvbid0IGRvIFtvbkNhbmNlbF0KICAgIC8vIGNhbGxiYWNrcyB3aGlsZSBmaXJpbmcsIGFuZCB3ZSBwcmV2ZW50IHJlZW50cmFuY3kgb2YgdGhpcyBmdW5jdGlvbi4KICAgIC8vCiAgICAvLyBTZXQgW19zdGF0ZV0ncyBldmVudCBpZCB0byB0aGUgbmV4dCBldmVudCdzIGlkLgogICAgLy8gQW55IGxpc3RlbmVycyBhZGRlZCB3aGlsZSBmaXJpbmcgdGhpcyBldmVudCB3aWxsIGV4cGVjdCB0aGUgbmV4dCBldmVudCwKICAgIC8vIG5vdCB0aGlzIG9uZSwgYW5kIHdvbid0IGdldCBub3RpZmllZC4KICAgIF9zdGF0ZSBePSBfU1RBVEVfRVZFTlRfSUQgfCBfU1RBVEVfRklSSU5HOwogICAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBfZmlyc3RTdWJzY3JpcHRpb247CiAgICB3aGlsZSAoc3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgaWYgKHN1YnNjcmlwdGlvbi5fZXhwZWN0c0V2ZW50KGlkKSkgewogICAgICAgIHN1YnNjcmlwdGlvbi5fZXZlbnRTdGF0ZSB8PSBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uLl9TVEFURV9GSVJJTkc7CiAgICAgICAgYWN0aW9uKHN1YnNjcmlwdGlvbik7CiAgICAgICAgc3Vic2NyaXB0aW9uLl90b2dnbGVFdmVudElkKCk7CiAgICAgICAgX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBuZXh0ID0gc3Vic2NyaXB0aW9uLl9uZXh0OwogICAgICAgIGlmIChzdWJzY3JpcHRpb24uX3JlbW92ZUFmdGVyRmlyaW5nKSB7CiAgICAgICAgICBfcmVtb3ZlTGlzdGVuZXIoc3Vic2NyaXB0aW9uKTsKICAgICAgICB9CiAgICAgICAgc3Vic2NyaXB0aW9uLl9ldmVudFN0YXRlICY9IH5fQnJvYWRjYXN0U3Vic2NyaXB0aW9uLl9TVEFURV9GSVJJTkc7CiAgICAgICAgc3Vic2NyaXB0aW9uID0gbmV4dDsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdWJzY3JpcHRpb24gPSBzdWJzY3JpcHRpb24uX25leHQ7CiAgICAgIH0KICAgIH0KICAgIF9zdGF0ZSAmPSB+X1NUQVRFX0ZJUklORzsKCiAgICBpZiAoX2lzRW1wdHkpIHsKICAgICAgX2NhbGxPbkNhbmNlbCgpOwogICAgfQogIH0KCiAgdm9pZCBfY2FsbE9uQ2FuY2VsKCkgewogICAgYXNzZXJ0KF9pc0VtcHR5KTsKICAgIGlmIChpc0Nsb3NlZCAmJiBfZG9uZUZ1dHVyZS5fbWF5Q29tcGxldGUpIHsKICAgICAgLy8gV2hlbiBjbG9zZWQsIF9kb25lRnV0dXJlIGlzIG5vdCBudWxsLgogICAgICBfZG9uZUZ1dHVyZS5fYXN5bmNDb21wbGV0ZShudWxsKTsKICAgIH0KICAgIF9ydW5HdWFyZGVkKG9uQ2FuY2VsKTsKICB9Cn0KCmNsYXNzIF9TeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPiBleHRlbmRzIF9Ccm9hZGNhc3RTdHJlYW1Db250cm9sbGVyPFQ+CiAgICBpbXBsZW1lbnRzIFN5bmNocm9ub3VzU3RyZWFtQ29udHJvbGxlcjxUPiB7CiAgX1N5bmNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyKHZvaWQgb25MaXN0ZW4oKSwgdm9pZCBvbkNhbmNlbCgpKQogICAgICA6IHN1cGVyKG9uTGlzdGVuLCBvbkNhbmNlbCk7CgogIC8vIEV2ZW50RGlzcGF0Y2ggaW50ZXJmYWNlLgoKICBib29sIGdldCBfbWF5QWRkRXZlbnQgPT4gc3VwZXIuX21heUFkZEV2ZW50ICYmICFfaXNGaXJpbmc7CgogIF9hZGRFdmVudEVycm9yKCkgewogICAgaWYgKF9pc0ZpcmluZykgewogICAgICByZXR1cm4gbmV3IFN0YXRlRXJyb3IoCiAgICAgICAgICAiQ2Fubm90IGZpcmUgbmV3IGV2ZW50LiBDb250cm9sbGVyIGlzIGFscmVhZHkgZmlyaW5nIGFuIGV2ZW50Iik7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuX2FkZEV2ZW50RXJyb3IoKTsKICB9CgogIHZvaWQgX3NlbmREYXRhKFQgZGF0YSkgewogICAgaWYgKF9pc0VtcHR5KSByZXR1cm47CiAgICBpZiAoX2hhc09uZUxpc3RlbmVyKSB7CiAgICAgIF9zdGF0ZSB8PSBfQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlci5fU1RBVEVfRklSSU5HOwogICAgICBfQnJvYWRjYXN0U3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbiA9IF9maXJzdFN1YnNjcmlwdGlvbjsKICAgICAgc3Vic2NyaXB0aW9uLl9hZGQoZGF0YSk7CiAgICAgIF9zdGF0ZSAmPSB+X0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXIuX1NUQVRFX0ZJUklORzsKICAgICAgaWYgKF9pc0VtcHR5KSB7CiAgICAgICAgX2NhbGxPbkNhbmNlbCgpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9mb3JFYWNoTGlzdGVuZXIoKF9CdWZmZXJpbmdTdHJlYW1TdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uKSB7CiAgICAgIHN1YnNjcmlwdGlvbi5fYWRkKGRhdGEpOwogICAgfSk7CiAgfQoKICB2b2lkIF9zZW5kRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGlmIChfaXNFbXB0eSkgcmV0dXJuOwogICAgX2ZvckVhY2hMaXN0ZW5lcigoX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24pIHsKICAgICAgc3Vic2NyaXB0aW9uLl9hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICB9KTsKICB9CgogIHZvaWQgX3NlbmREb25lKCkgewogICAgaWYgKCFfaXNFbXB0eSkgewogICAgICBfZm9yRWFjaExpc3RlbmVyKChfQnVmZmVyaW5nU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHN1YnNjcmlwdGlvbikgewogICAgICAgIHN1YnNjcmlwdGlvbi5fY2xvc2UoKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoX2RvbmVGdXR1cmUgIT0gbnVsbCk7CiAgICAgIGFzc2VydChfZG9uZUZ1dHVyZS5fbWF5Q29tcGxldGUpOwogICAgICBfZG9uZUZ1dHVyZS5fYXN5bmNDb21wbGV0ZShudWxsKTsKICAgIH0KICB9Cn0KCmNsYXNzIF9Bc3luY0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4gZXh0ZW5kcyBfQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcjxUPiB7CiAgX0FzeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcih2b2lkIG9uTGlzdGVuKCksIHZvaWQgb25DYW5jZWwoKSkKICAgICAgOiBzdXBlcihvbkxpc3Rlbiwgb25DYW5jZWwpOwoKICAvLyBFdmVudERpc3BhdGNoIGludGVyZmFjZS4KCiAgdm9pZCBfc2VuZERhdGEoVCBkYXRhKSB7CiAgICBmb3IgKF9Ccm9hZGNhc3RTdWJzY3JpcHRpb248VD4gc3Vic2NyaXB0aW9uID0gX2ZpcnN0U3Vic2NyaXB0aW9uOwogICAgICAgIHN1YnNjcmlwdGlvbiAhPSBudWxsOwogICAgICAgIHN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbi5fbmV4dCkgewogICAgICBzdWJzY3JpcHRpb24uX2FkZFBlbmRpbmcobmV3IF9EZWxheWVkRGF0YTxUPihkYXRhKSk7CiAgICB9CiAgfQoKICB2b2lkIF9zZW5kRXJyb3IoT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIHsKICAgIGZvciAoX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBfZmlyc3RTdWJzY3JpcHRpb247CiAgICAgICAgc3Vic2NyaXB0aW9uICE9IG51bGw7CiAgICAgICAgc3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uLl9uZXh0KSB7CiAgICAgIHN1YnNjcmlwdGlvbi5fYWRkUGVuZGluZyhuZXcgX0RlbGF5ZWRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSkpOwogICAgfQogIH0KCiAgdm9pZCBfc2VuZERvbmUoKSB7CiAgICBpZiAoIV9pc0VtcHR5KSB7CiAgICAgIGZvciAoX0Jyb2FkY2FzdFN1YnNjcmlwdGlvbjxUPiBzdWJzY3JpcHRpb24gPSBfZmlyc3RTdWJzY3JpcHRpb247CiAgICAgICAgICBzdWJzY3JpcHRpb24gIT0gbnVsbDsKICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbi5fbmV4dCkgewogICAgICAgIHN1YnNjcmlwdGlvbi5fYWRkUGVuZGluZyhjb25zdCBfRGVsYXllZERvbmUoKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChfZG9uZUZ1dHVyZSAhPSBudWxsKTsKICAgICAgYXNzZXJ0KF9kb25lRnV0dXJlLl9tYXlDb21wbGV0ZSk7CiAgICAgIF9kb25lRnV0dXJlLl9hc3luY0NvbXBsZXRlKG51bGwpOwogICAgfQogIH0KfQoKLyoqCiAqIFN0cmVhbSBjb250cm9sbGVyIHRoYXQgaXMgdXNlZCBieSBbU3RyZWFtLmFzQnJvYWRjYXN0U3RyZWFtXS4KICoKICogVGhpcyBzdHJlYW0gY29udHJvbGxlciBhbGxvd3MgaW5jb21pbmcgZXZlbnRzIHdoaWxlIGl0IGlzIGZpcmluZwogKiBvdGhlciBldmVudHMuIFRoaXMgaXMgaGFuZGxlZCBieSBkZWxheWluZyB0aGUgZXZlbnRzIHVudGlsIHRoZQogKiBjdXJyZW50IGV2ZW50IGlzIGRvbmUgZmlyaW5nLCBhbmQgdGhlbiBmaXJlIHRoZSBwZW5kaW5nIGV2ZW50cy4KICoKICogVGhpcyBjbGFzcyBleHRlbmRzIFtfU3luY0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXJdLiBFdmVudHMgb2YKICogYW4gImFzQnJvYWRjYXN0U3RyZWFtIiBzdHJlYW0gYXJlIGFsd2F5cyBpbml0aWF0ZWQgYnkgZXZlbnRzCiAqIG9uIGFub3RoZXIgc3RyZWFtLCBhbmQgaXQgaXMgZmluZSB0byBmb3J3YXJkIHRoZW0gc3luY2hyb25vdXNseS4KICovCmNsYXNzIF9Bc0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4gZXh0ZW5kcyBfU3luY0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXI8VD4KICAgIGltcGxlbWVudHMgX0V2ZW50RGlzcGF0Y2g8VD4gewogIF9TdHJlYW1JbXBsRXZlbnRzPFQ+IF9wZW5kaW5nOwoKICBfQXNCcm9hZGNhc3RTdHJlYW1Db250cm9sbGVyKHZvaWQgb25MaXN0ZW4oKSwgdm9pZCBvbkNhbmNlbCgpKQogICAgICA6IHN1cGVyKG9uTGlzdGVuLCBvbkNhbmNlbCk7CgogIGJvb2wgZ2V0IF9oYXNQZW5kaW5nID0+IF9wZW5kaW5nICE9IG51bGwgJiYgIV9wZW5kaW5nLmlzRW1wdHk7CgogIHZvaWQgX2FkZFBlbmRpbmdFdmVudChfRGVsYXllZEV2ZW50IGV2ZW50KSB7CiAgICBfcGVuZGluZyA/Pz0gbmV3IF9TdHJlYW1JbXBsRXZlbnRzPFQ+KCk7CiAgICBfcGVuZGluZy5hZGQoZXZlbnQpOwogIH0KCiAgdm9pZCBhZGQoVCBkYXRhKSB7CiAgICBpZiAoIWlzQ2xvc2VkICYmIF9pc0ZpcmluZykgewogICAgICBfYWRkUGVuZGluZ0V2ZW50KG5ldyBfRGVsYXllZERhdGE8VD4oZGF0YSkpOwogICAgICByZXR1cm47CiAgICB9CiAgICBzdXBlci5hZGQoZGF0YSk7CiAgICB3aGlsZSAoX2hhc1BlbmRpbmcpIHsKICAgICAgX3BlbmRpbmcuaGFuZGxlTmV4dCh0aGlzKTsKICAgIH0KICB9CgogIHZvaWQgYWRkRXJy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bmcgbGlicmFyeU5hbWU7CiAgZmluYWwgU3RyaW5nIHVyaTsKCiAgY29uc3QgRGVmZXJyZWRMaWJyYXJ5KHRoaXMubGlicmFyeU5hbWUsIHt0aGlzLnVyaX0pOwoKICAvKioKICAgKiBFbnN1cmUgdGhhdCBbbGlicmFyeU5hbWVdIGhhcyBiZWVuIGxvYWRlZC4KICAgKgogICAqIElmIHRoZSBsaWJyYXJ5IGZhaWxzIHRvIGxvYWQsIHRoZSBGdXR1cmUgd2lsbCBjb21wbGV0ZSB3aXRoIGEKICAgKiBEZWZlcnJlZExvYWRFeGNlcHRpb24uCiAgICovCiAgZXh0ZXJuYWwgRnV0dXJlPE51bGw+IGxvYWQoKTsKfQoKLyoqCiAqIFRocm93biB3aGVuIGEgZGVmZXJyZWQgbGlicmFyeSBmYWlscyB0byBsb2FkLgogKi8KY2xhc3MgRGVmZXJyZWRMb2FkRXhjZXB0aW9uIGltcGxlbWVudHMgRXhjZXB0aW9uIHsKICBEZWZlcnJlZExvYWRFeGNlcHRpb24odGhpcy5fcyk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkRlZmVycmVkTG9hZEV4Y2VwdGlvbjogJyRfcyciOwogIGZpbmFsIFN0cmluZyBfczsKfQomAE5OPAEUAQQ4AzMtBB8YHBQBNwEGMAVDHAYgAgEEMQQzIjcTAgEdZGFydDphc3luYy9kZWZlcnJlZF9sb2FkLmRhcnQ4b3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9kZWZlcnJlZF9sb2FkX3BhdGNoLmRhcnSCQi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJhc3luY19wYXRjaC5kYXJ0IjsKCmZpbmFsIFNldDxTdHJpbmc+IF9sb2FkZWRMaWJyYXJpZXMgPSBuZXcgU2V0PFN0cmluZz4oKTsKCkBwYXRjaApjbGFzcyBEZWZlcnJlZExpYnJhcnkgewogIEBwYXRjaAogIEZ1dHVyZTxOdWxsPiBsb2FkKCkgewogICAgLy8gRHVtbXkgaW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgZXZlbnR1YWxseSBiZSByZXBsYWNlZCBieSByZWFsCiAgICAvLyBpbXBsZW1lbnRhdGlvbi4KICAgIEZ1dHVyZSBmdXR1cmUgPSBuZXcgRnV0dXJlPE51bGw+LnZhbHVlKG51bGwpOwogICAgX2xvYWRlZExpYnJhcmllcy5hZGQobGlicmFyeU5hbWUpOwogICAgcmV0dXJuIGZ1dHVyZTsKICB9Cn0KFQBOTjwBHwE4AQcYCRhHFzInEwQCASlkYXJ0OmFzeW5jLXBhdGNoL2RlZmVycmVkX2xvYWRfcGF0Y2guZGFydC1vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvYXN5bmMvZnV0dXJlLmRhcnTAAIjnLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5hc3luYzsKCi8vLyBBIHR5cGUgcmVwcmVzZW50aW5nIHZhbHVlcyB0aGF0IGFyZSBlaXRoZXIgYEZ1dHVyZTxUPmAgb3IgYFRgLgovLy8KLy8vIFRoaXMgY2xhc3MgZGVjbGFyYXRpb24gaXMgYSBwdWJsaWMgc3RhbmQtaW4gZm9yIGFuIGludGVybmFsCi8vLyBmdXR1cmUtb3ItdmFsdWUgZ2VuZXJpYyB0eXBlLiBSZWZlcmVuY2VzIHRvIHRoaXMgY2xhc3MgYXJlIHJlc29sdmVkIHRvIHRoZQovLy8gaW50ZXJuYWwgdHlwZS4KLy8vCi8vLyBJdCBpcyBhIGNvbXBpbGUtdGltZSBlcnJvciBmb3IgYW55IGNsYXNzIHRvIGV4dGVuZCwgbWl4IGluIG9yIGltcGxlbWVudAovLy8gYEZ1dHVyZU9yYC4KLy8vCi8vLyBOb3RlOiB0aGUgYEZ1dHVyZU9yPFQ+YCB0eXBlIGlzIGludGVycHJldGVkIGFzIGBkeW5hbWljYCBpbiBub24gc3Ryb25nLW1vZGUuCi8vLwovLy8gIyBFeGFtcGxlcwovLy8gYGBgIGRhcnQKLy8vIC8vIFRoZSBgRnV0dXJlPFQ+LnRoZW5gIGZ1bmN0aW9uIHRha2VzIGEgY2FsbGJhY2sgW2ZdIHRoYXQgcmV0dXJucyBlaXRoZXIKLy8vIC8vIGFuIGBTYCBvciBhIGBGdXR1cmU8Uz5gLgovLy8gRnV0dXJlPFM+IHRoZW48Uz4oRnV0dXJlT3I8Uz4gZihUIHgpLCAuLi4pOwovLy8KLy8vIC8vIGBDb21wbGV0ZXI8VD4uY29tcGxldGVgIHRha2VzIGVpdGhlciBhIGBUYCBvciBgRnV0dXJlPFQ+YC4KLy8vIHZvaWQgY29tcGxldGUoRnV0dXJlT3I8VD4gdmFsdWUpOwovLy8gYGBgCi8vLwovLy8gIyBBZHZhbmNlZAovLy8gVGhlIGBGdXR1cmVPcjxpbnQ+YCB0eXBlIGlzIGFjdHVhbGx5IHRoZSAidHlwZSB1bmlvbiIgb2YgdGhlIHR5cGVzIGBpbnRgIGFuZAovLy8gYEZ1dHVyZTxpbnQ+YC4gVGhpcyB0eXBlIHVuaW9uIGlzIGRlZmluZWQgaW4gc3VjaCBhIHdheSB0aGF0Ci8vLyBgRnV0dXJlT3I8T2JqZWN0PmAgaXMgYm90aCBhIHN1cGVyLSBhbmQgc3ViLXR5cGUgb2YgYE9iamVjdGAgKHN1Yi10eXBlCi8vLyBiZWNhdXNlIGBPYmplY3RgIGlzIG9uZSBvZiB0aGUgdHlwZXMgb2YgdGhlIHVuaW9uLCBzdXBlci10eXBlIGJlY2F1c2UKLy8vIGBPYmplY3RgIGlzIGEgc3VwZXItdHlwZSBvZiBib3RoIG9mIHRoZSB0eXBlcyBvZiB0aGUgdW5pb24pLiBUb2dldGhlciBpdAovLy8gbWVhbnMgdGhhdCBgRnV0dXJlT3I8T2JqZWN0PmAgaXMgZXF1aXZhbGVudCB0byBgT2JqZWN0YC4KLy8vCi8vLyBBcyBhIGNvcm9sbGFyeSwgYEZ1dHVyZU9yPE9iamVjdD5gIGlzIGVxdWl2YWxlbnQgdG8KLy8vIGBGdXR1cmVPcjxGdXR1cmVPcjxPYmplY3Q+PmAsIGBGdXR1cmVPcjxGdXR1cmU8T2JqZWN0Pj5gIGlzIGVxdWl2YWxlbnQgdG8KLy8vIGBGdXR1cmU8T2JqZWN0PmAuCmFic3RyYWN0IGNsYXNzIEZ1dHVyZU9yPFQ+IHsKICAvLyBQcml2YXRlIGdlbmVyYXRpdmUgY29uc3RydWN0b3IsIHNvIHRoYXQgaXQgaXMgbm90IHN1YmNsYXNzYWJsZSwgbWl4YWJsZSwgb3IKICAvLyBpbnN0YW50aWFibGUuCiAgRnV0dXJlT3IuXygpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJGdXR1cmVPciBjYW4ndCBiZSBpbnN0YW50aWF0ZWQiKTsKICB9Cn0KCi8qKgogKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgZGVsYXllZCBjb21wdXRhdGlvbi4KICoKICogQSBbRnV0dXJlXSBpcyB1c2VkIHRvIHJlcHJlc2VudCBhIHBvdGVudGlhbCB2YWx1ZSwgb3IgZXJyb3IsCiAqIHRoYXQgd2lsbCBiZSBhdmFpbGFibGUgYXQgc29tZSB0aW1lIGluIHRoZSBmdXR1cmUuCiAqIFJlY2VpdmVycyBvZiBhIFtGdXR1cmVdIGNhbiByZWdpc3RlciBjYWxsYmFja3MKICogdGhhdCBoYW5kbGUgdGhlIHZhbHVlIG9yIGVycm9yIG9uY2UgaXQgaXMgYXZhaWxhYmxlLgogKiBGb3IgZXhhbXBsZToKICoKICogICAgIEZ1dHVyZTxpbnQ+IGZ1dHVyZSA9IGdldEZ1dHVyZSgpOwogKiAgICAgZnV0dXJlLnRoZW4oKHZhbHVlKSA9PiBoYW5kbGVWYWx1ZSh2YWx1ZSkpCiAqICAgICAgICAgICAuY2F0Y2hFcnJvcigoZXJyb3IpID0+IGhhbmRsZUVycm9yKGVycm9yKSk7CiAqCiAqIEEgW0Z1dHVyZV0gY2FuIGJlIGNvbXBsZXRlZCBpbiB0d28gd2F5czoKICogd2l0aCBhIHZhbHVlICgidGhlIGZ1dHVyZSBzdWNjZWVkcyIpCiAqIG9yIHdpdGggYW4gZXJyb3IgKCJ0aGUgZnV0dXJlIGZhaWxzIikuCiAqIFVzZXJzIGNhbiBpbnN0YWxsIGNhbGxiYWNrcyBmb3IgZWFjaCBjYXNlLgogKgogKiBJbiBzb21lIGNhc2VzIHdlIHNheSB0aGF0IGEgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGFub3RoZXIgZnV0dXJlLgogKiBUaGlzIGlzIGEgc2hvcnQgd2F5IG9mIHN0YXRpbmcgdGhhdCB0aGUgZnV0dXJlIGlzIGNvbXBsZXRlZCBpbiB0aGUgc2FtZSB3YXksCiAqIHdpdGggdGhlIHNhbWUgdmFsdWUgb3IgZXJyb3IsCiAqIGFzIHRoZSBvdGhlciBmdXR1cmUgb25jZSB0aGF0IGNvbXBsZXRlcy4KICogV2hlbmV2ZXIgYSBmdW5jdGlvbiBpbiB0aGUgY29yZSBsaWJyYXJ5IG1heSBjb21wbGV0ZSBhIGZ1dHVyZQogKiAoZm9yIGV4YW1wbGUgW0NvbXBsZXRlci5jb21wbGV0ZV0gb3IgW25ldyBGdXR1cmUudmFsdWVdKSwKICogdGhlbiBpdCBhbHNvIGFjY2VwdHMgYW5vdGhlciBmdXR1cmUgYW5kIGRvZXMgdGhpcyB3b3JrIGZvciB0aGUgZGV2ZWxvcGVyLgogKgogKiBUaGUgcmVzdWx0IG9mIHJlZ2lzdGVyaW5nIGEgcGFpciBvZiBjYWxsYmFja3MgaXMgYSBuZXcgRnV0dXJlICh0aGUKICogInN1Y2Nlc3NvciIpIHdoaWNoIGluIHR1cm4gaXMgY29tcGxldGVkIHdpdGggdGhlIHJlc3VsdCBvZiBpbnZva2luZyB0aGUKICogY29ycmVzcG9uZGluZyBjYWxsYmFjay4KICogVGhlIHN1Y2Nlc3NvciBpcyBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvciBpZiB0aGUgaW52b2tlZCBjYWxsYmFjayB0aHJvd3MuCiAqIEZvciBleGFtcGxlOgogKiBgYGAKICogRnV0dXJlPGludD4gc3VjY2Vzc29yID0gZnV0dXJlLnRoZW4oKGludCB2YWx1ZSkgewogKiAgICAgLy8gSW52b2tlZCB3aGVuIHRoZSBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggYSB2YWx1ZS4KICogICAgIHJldHVybiA0MjsgIC8vIFRoZSBzdWNjZXNzb3IgaXMgY29tcGxldGVkIHdpdGggdGhlIHZhbHVlIDQyLgogKiAgIH0sCiAqICAgb25FcnJvcjogKGUpIHsKICogICAgIC8vIEludm9rZWQgd2hlbiB0aGUgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yLgogKiAgICAgaWYgKGNhbkhhbmRsZShlKSkgewogKiAgICAgICByZXR1cm4gNDk5OyAgLy8gVGhlIHN1Y2Nlc3NvciBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgdmFsdWUgNDk5LgogKiAgICAgfSBlbHNlIHsKICogICAgICAgdGhyb3cgZTsgIC8vIFRoZSBzdWNjZXNzb3IgaXMgY29tcGxldGVkIHdpdGggdGhlIGVycm9yIGUuCiAqICAgICB9CiAqICAgfSk7CiAqIGBgYAogKgogKiBJZiBhIGZ1dHVyZSBkb2VzIG5vdCBoYXZlIGEgc3VjY2Vzc29yIHdoZW4gaXQgY29tcGxldGVzIHdpdGggYW4gZXJyb3IsCiAqIGl0IGZvcndhcmRzIHRoZSBlcnJvciBtZXNzYWdlIHRvIHRoZSBnbG9iYWwgZXJyb3ItaGFuZGxlci4KICogVGhpcyBiZWhhdmlvciBtYWtlcyBzdXJlIHRoYXQgbm8gZXJyb3IgaXMgc2lsZW50bHkgZHJvcHBlZC4KICogSG93ZXZlciwgaXQgYWxzbyBtZWFucyB0aGF0IGVycm9yIGhhbmRsZXJzIHNob3VsZCBiZSBpbnN0YWxsZWQgZWFybHksCiAqIHNvIHRoYXQgdGhleSBhcmUgcHJlc2VudCBhcyBzb29uIGFzIGEgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yLgogKiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgZGVtb25zdHJhdGVzIHRoaXMgcG90ZW50aWFsIGJ1ZzoKICogYGBgCiAqIHZhciBmdXR1cmUgPSBnZXRGdXR1cmUoKTsKICogbmV3IFRpbWVyKG5ldyBEdXJhdGlvbihtaWxsaXNlY29uZHM6IDUpLCAoKSB7CiAqICAgLy8gVGhlIGVycm9yLWhhbmRsZXIgaXMgbm90IGF0dGFjaGVkIHVudGlsIDUgbXMgYWZ0ZXIgdGhlIGZ1dHVyZSBoYXMKICogICAvLyBiZWVuIHJlY2VpdmVkLiBJZiB0aGUgZnV0dXJlIGZhaWxzIGJlZm9yZSB0aGF0LCB0aGUgZXJyb3IgaXMKICogICAvLyBmb3J3YXJkZWQgdG8gdGhlIGdsb2JhbCBlcnJvci1oYW5kbGVyLCBldmVuIHRob3VnaCB0aGVyZSBpcyBjb2RlCiAqICAgLy8gKGp1c3QgYmVsb3cpIHRvIGV2ZW50dWFsbHkgaGFuZGxlIHRoZSBlcnJvci4KICogICBmdXR1cmUudGhlbigodmFsdWUpIHsgdXNlVmFsdWUodmFsdWUpOyB9LAogKiAgICAgICAgICAgICAgIG9uRXJyb3I6IChlKSB7IGhhbmRsZUVycm9yKGUpOyB9KTsKICogfSk7CiAqIGBgYAogKgogKiBXaGVuIHJlZ2lzdGVyaW5nIGNhbGxiYWNrcywgaXQncyBvZnRlbiBtb3JlIHJlYWRhYmxlIHRvIHJlZ2lzdGVyIHRoZSB0d28KICogY2FsbGJhY2tzIHNlcGFyYXRlbHksIGJ5IGZpcnN0IHVzaW5nIFt0aGVuXSB3aXRoIG9uZSBhcmd1bWVudAogKiAodGhlIHZhbHVlIGhhbmRsZXIpIGFuZCB1c2luZyBhIHNlY29uZCBbY2F0Y2hFcnJvcl0gZm9yIGhhbmRsaW5nIGVycm9ycy4KICogRWFjaCBvZiB0aGVzZSB3aWxsIGZvcndhcmQgdGhlIHJlc3VsdCB0aGF0IHRoZXkgZG9uJ3QgaGFuZGxlCiAqIHRvIHRoZWlyIHN1Y2Nlc3NvcnMsIGFuZCB0b2dldGhlciB0aGV5IGhhbmRsZSBib3RoIHZhbHVlIGFuZCBlcnJvciByZXN1bHQuCiAqIEl0IGFsc28gaGFzIHRoZSBhZGRpdGlvbmFsIGJlbmVmaXQgb2YgdGhlIFtjYXRjaEVycm9yXSBoYW5kbGluZyBlcnJvcnMgaW4gdGhlCiAqIFt0aGVuXSB2YWx1ZSBjYWxsYmFjayB0b28uCiAqIFVzaW5nIHNlcXVlbnRpYWwgaGFuZGxlcnMgaW5zdGVhZCBvZiBwYXJhbGxlbCBvbmVzIG9mdGVuIGxlYWRzIHRvIGNvZGUgdGhhdAogKiBpcyBlYXNpZXIgdG8gcmVhc29uIGFib3V0LgogKiBJdCBhbHNvIG1ha2VzIGFzeW5jaHJvbm91cyBjb2RlIHZlcnkgc2ltaWxhciB0byBzeW5jaHJvbm91cyBjb2RlOgogKiBgYGAKICogLy8gU3luY2hyb25vdXMgY29kZS4KICogdHJ5IHsKICogICBpbnQgdmFsdWUgPSBmb28oKTsKICogICByZXR1cm4gYmFyKHZhbHVlKTsKICogfSBjYXRjaCAoZSkgewogKiAgIHJldHVybiA0OTk7CiAqIH0KICogYGBgCiAqCiAqIEVxdWl2YWxlbnQgYXN5bmNocm9ub3VzIGNvZGUsIGJhc2VkIG9uIGZ1dHVyZXM6CiAqIGBgYAogKiBGdXR1cmU8aW50PiBmdXR1cmUgPSBuZXcgRnV0dXJlKGZvbyk7ICAvLyBSZXN1bHQgb2YgZm9vKCkgYXMgYSBmdXR1cmUuCiAqIGZ1dHVyZS50aGVuKChpbnQgdmFsdWUpID0+IGJhcih2YWx1ZSkpCiAqICAgICAgIC5jYXRjaEVycm9yKChlKSA9PiA0OTkpOwogKiBgYGAKICoKICogU2ltaWxhciB0byB0aGUgc3luY2hyb25vdXMgY29kZSwgdGhlIGVycm9yIGhhbmRsZXIgKHJlZ2lzdGVyZWQgd2l0aAogKiBbY2F0Y2hFcnJvcl0pIGlzIGhhbmRsaW5nIGFueSBlcnJvcnMgdGhyb3duIGJ5IGVpdGhlciBgZm9vYCBvciBgYmFyYC4KICogSWYgdGhlIGVycm9yLWhhbmRsZXIgaGFkIGJlZW4gcmVnaXN0ZXJlZCBhcyB0aGUgYG9uRXJyb3JgIHBhcmFtZXRlciBvZgogKiB0aGUgYHRoZW5gIGNhbGwsIGl0IHdvdWxkIG5vdCBjYXRjaCBlcnJvcnMgZnJvbSB0aGUgYGJhcmAgY2FsbC4KICoKICogRnV0dXJlcyBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIGNhbGxiYWNrLXBhaXIgcmVnaXN0ZXJlZC4gRWFjaCBzdWNjZXNzb3IgaXMKICogdHJlYXRlZCBpbmRlcGVuZGVudGx5IGFuZCBpcyBoYW5kbGVkIGFzIGlmIGl0IHdhcyB0aGUgb25seSBzdWNjZXNzb3IuCiAqCiAqIEEgZnV0dXJlIG1heSBhbHNvIGZhaWwgdG8gZXZlciBjb21wbGV0ZS4gSW4gdGhhdCBjYXNlLCBubyBjYWxsYmFja3MgYXJlCiAqIGNhbGxlZC4KICovCmFic3RyYWN0IGNsYXNzIEZ1dHVyZTxUPiB7CiAgLy8vIEEgYEZ1dHVyZTxOdWxsPmAgY29tcGxldGVkIHdpdGggYG51bGxgLgogIHN0YXRpYyBmaW5hbCBfRnV0dXJlPE51bGw+IF9udWxsRnV0dXJlID0KICAgICAgbmV3IF9GdXR1cmU8TnVsbD4uem9uZVZhbHVlKG51bGwsIFpvbmUucm9vdCk7CgogIC8vLyBBIGBGdXR1cmU8Ym9vbD5gIGNvbXBsZXRlZCB3aXRoIGBmYWxzZWAuCiAgc3RhdGljIGZpbmFsIF9GdXR1cmU8Ym9vbD4gX2ZhbHNlRnV0dXJlID0KICAgICAgbmV3IF9GdXR1cmU8Ym9vbD4uem9uZVZhbHVlKGZhbHNlLCBab25lLnJvb3QpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgZnV0dXJlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIFtjb21wdXRhdGlvbl0KICAgKiBhc3luY2hyb25vdXNseSB3aXRoIFtUaW1lci5ydW5dLgogICAqCiAgICogSWYgdGhlIHJlc3VsdCBvZiBleGVjdXRpbmcgW2NvbXB1dGF0aW9uXSB0aHJvd3MsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMKICAgKiBjb21wbGV0ZWQgd2l0aCB0aGUgZXJyb3IuCiAgICoKICAgKiBJZiB0aGUgcmV0dXJuZWQgdmFsdWUgaXMgaXRzZWxmIGEgW0Z1dHVyZV0sIGNvbXBsZXRpb24gb2YKICAgKiB0aGUgY3JlYXRlZCBmdXR1cmUgd2lsbCB3YWl0IHVudGlsIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzLAogICAqIGFuZCB3aWxsIHRoZW4gY29tcGxldGUgd2l0aCB0aGUgc2FtZSByZXN1bHQuCiAgICoKICAgKiBJZiBhIG5vbi1mdXR1cmUgdmFsdWUgaXMgcmV0dXJuZWQsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkCiAgICogd2l0aCB0aGF0IHZhbHVlLgogICAqLwogIGZhY3RvcnkgRnV0dXJlKEZ1dHVyZU9yPFQ+IGNvbXB1dGF0aW9uKCkpIHsKICAgIF9GdXR1cmU8VD4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8VD4oKTsKICAgIFRpbWVyLnJ1bigoKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmVzdWx0Ll9jb21wbGV0ZShjb21wdXRhdGlvbigpKTsKICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKHJlc3VsdCwgZSwgcyk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBmdXR1cmUgY29udGFpbmluZyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgW2NvbXB1dGF0aW9uXQogICAqIGFzeW5jaHJvbm91c2x5IHdpdGggW3NjaGVkdWxlTWljcm90YXNrXS4KICAgKgogICAqIElmIGV4ZWN1dGluZyBbY29tcHV0YXRpb25dIHRocm93cywKICAgKiB0aGUgcmV0dXJuZWQgZnV0dXJlIGlzIGNvbXBsZXRlZCB3aXRoIHRoZSB0aHJvd24gZXJyb3IuCiAgICoKICAgKiBJZiBjYWxsaW5nIFtjb21wdXRhdGlvbl0gcmV0dXJucyBhIFtGdXR1cmVdLCBjb21wbGV0aW9uIG9mCiAgICogdGhlIGNyZWF0ZWQgZnV0dXJlIHdpbGwgd2FpdCB1bnRpbCB0aGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcywKICAgKiBhbmQgd2lsbCB0aGVuIGNvbXBsZXRlIHdpdGggdGhlIHNhbWUgcmVzdWx0LgogICAqCiAgICogSWYgY2FsbGluZyBbY29tcHV0YXRpb25dIHJldHVybnMgYSBub24tZnV0dXJlIHZhbHVlLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhhdCB2YWx1ZS4KICAgKi8KICBmYWN0b3J5IEZ1dHVyZS5taWNyb3Rhc2soRnV0dXJlT3I8VD4gY29tcHV0YXRpb24oKSkgewogICAgX0Z1dHVyZTxUPiByZXN1bHQgPSBuZXcgX0Z1dHVyZTxUPigpOwogICAgc2NoZWR1bGVNaWNyb3Rhc2soKCkgewogICAgICB0cnkgewogICAgICAgIHJlc3VsdC5fY29tcGxldGUoY29tcHV0YXRpb24oKSk7CiAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICBfY29tcGxldGVXaXRoRXJyb3JDYWxsYmFjayhyZXN1bHQsIGUsIHMpOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgZnV0dXJlIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiBpbW1lZGlhdGVseSBjYWxsaW5nCiAgICogW2NvbXB1dGF0aW9uXS4KICAgKgogICAqIElmIGNhbGxpbmcgW2NvbXB1dGF0aW9uXSB0aHJvd3MsIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhlCiAgICogZXJyb3IuCiAgICoKICAgKiBJZiBjYWxsaW5nIFtjb21wdXRhdGlvbl0gcmV0dXJucyBhIGBGdXR1cmU8VD5gLCB0aGF0IGZ1dHVyZSBpcyByZXR1cm5lZC4KICAgKgogICAqIElmIGNhbGxpbmcgW2NvbXB1dGF0aW9uXSByZXR1cm5zIGEgbm9uLWZ1dHVyZSB2YWx1ZSwKICAgKiBhIGZ1dHVyZSBpcyByZXR1cm5lZCB3aGljaCBoYXMgYmVlbiBjb21wbGV0ZWQgd2l0aCB0aGF0IHZhbHVlLgogICAqLwogIGZhY3RvcnkgRnV0dXJlLnN5bmMoRnV0dXJlT3I8VD4gY29tcHV0YXRpb24oKSkgewogICAgdHJ5IHsKICAgICAgdmFyIHJlc3VsdCA9IGNvbXB1dGF0aW9uKCk7CiAgICAgIGlmIChyZXN1bHQgaXMgRnV0dXJlPFQ+KSB7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IF9GdXR1cmU8VD4udmFsdWUocmVzdWx0KTsKICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IsIHN0YWNrVHJhY2UpIHsKICAgICAgdmFyIGZ1dHVyZSA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICAgIEFzeW5jRXJyb3IgcmVwbGFjZW1lbnQgPSBab25lLmN1cnJlbnQuZXJyb3JDYWxsYmFjayhlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIGlmIChyZXBsYWNlbWVudCAhPSBudWxsKSB7CiAgICAgICAgZnV0dXJlLl9hc3luY0NvbXBsZXRlRXJyb3IoCiAgICAgICAgICAgIF9ub25OdWxsRXJyb3IocmVwbGFjZW1lbnQuZXJyb3IpLCByZXBsYWNlbWVudC5zdGFja1RyYWNlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmdXR1cmUuX2FzeW5jQ29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGZ1dHVyZTsKICAgIH0KICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBmdXR1cmUgY29tcGxldGVkIHdpdGggW3ZhbHVlXS4KICAgKgogICAqIElmIFt2YWx1ZV0gaXMgYSBmdXR1cmUsIHRoZSBjcmVhdGVkIGZ1dHVyZSB3YWl0cyBmb3IgdGhlCiAgICogW3ZhbHVlXSBmdXR1cmUgdG8gY29tcGxldGUsIGFuZCB0aGVuIGNvbXBsZXRlcyB3aXRoIHRoZSBzYW1lIHJlc3VsdC4KICAgKiBTaW5jZSBhIFt2YWx1ZV0gZnV0dXJlIGNhbiBjb21wbGV0ZSB3aXRoIGFuIGVycm9yLCBzbyBjYW4gdGhlIGZ1dHVyZQogICAqIGNyZWF0ZWQgYnkgW0Z1dHVyZS52YWx1ZV0sIGV2ZW4gaWYgdGhlIG5hbWUgc3VnZ2VzdHMgb3RoZXJ3aXNlLgogICAqCiAgICogSWYgW3ZhbHVlXSBpcyBub3QgYSBbRnV0dXJlXSwgdGhlIGNyZWF0ZWQgZnV0dXJlIGlzIGNvbXBsZXRlZAogICAqIHdpdGggdGhlIFt2YWx1ZV0gdmFsdWUsCiAgICogZXF1aXZhbGVudGx5IHRvIGBuZXcgRnV0dXJlPFQ+LnN5bmMoKCkgPT4gdmFsdWUpYC4KICAgKgogICAqIFVzZSBbQ29tcGxldGVyXSB0byBjcmVhdGUgYSBmdXR1cmUgYW5kIGNvbXBsZXRlIGl0IGxhdGVyLgogICAqLwogIGZhY3RvcnkgRnV0dXJlLnZhbHVlKFtGdXR1cmVPcjxUPiB2YWx1ZV0pIHsKICAgIHJldHVybiBuZXcgX0Z1dHVyZTxUPi5pbW1lZGlhdGUodmFsdWUpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIGZ1dHVyZSB0aGF0IGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLgogICAqCiAgICogVGhlIGNyZWF0ZWQgZnV0dXJlIHdpbGwgYmUgY29tcGxldGVkIHdpdGggYW4gZXJyb3IgaW4gYSBmdXR1cmUgbWljcm90YXNrLgogICAqIFRoaXMgYWxsb3dzIGVub3VnaCB0aW1lIGZvciBzb21lb25lIHRvIGFkZCBhbiBlcnJvciBoYW5kbGVyIG9uIHRoZSBmdXR1cmUuCiAgICogSWYgYW4gZXJyb3IgaGFuZGxlciBpc24ndCBhZGRlZCBiZWZvcmUgdGhlIGZ1dHVyZSBjb21wbGV0ZXMsIHRoZSBlcnJvcgogICAqIHdpbGwgYmUgY29uc2lkZXJlZCB1bmhhbmRsZWQuCiAgICoKICAgKiBJZiBbZXJyb3JdIGlzIGBudWxsYCwgaXQgaXMgcmVwbGFjZWQgYnkgYSBbTnVsbFRocm93bkVycm9yXS4KICAgKgogICAqIFVzZSBbQ29tcGxldGVyXSB0byBjcmVhdGUgYSBmdXR1cmUgYW5kIGNvbXBsZXRlIGl0IGxhdGVyLgogICAqLwogIGZhY3RvcnkgRnV0dXJlLmVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIGVycm9yID0gX25vbk51bGxFcnJvcihlcnJvcik7CiAgICBpZiAoIWlkZW50aWNhbChab25lLmN1cnJlbnQsIF9yb290Wm9uZSkpIHsKICAgICAgQXN5bmNFcnJvciByZXBsYWNlbWVudCA9IFpvbmUuY3VycmVudC5lcnJvckNhbGxiYWNrKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgaWYgKHJlcGxhY2VtZW50ICE9IG51bGwpIHsKICAgICAgICBlcnJvciA9IF9ub25OdWxsRXJyb3IocmVwbGFjZW1lbnQuZXJyb3IpOwogICAgICAgIHN0YWNrVHJhY2UgPSByZXBsYWNlbWVudC5zdGFja1RyYWNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IF9GdXR1cmU8VD4uaW1tZWRpYXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIGZ1dHVyZSB0aGF0IHJ1bnMgaXRzIGNvbXB1dGF0aW9uIGFmdGVyIGEgZGVsYXkuCiAgICoKICAgKiBUaGUgW2NvbXB1dGF0aW9uXSB3aWxsIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSBnaXZlbiBbZHVyYXRpb25dIGhhcyBwYXNzZWQsCiAgICogYW5kIHRoZSBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgY29tcHV0YXRpb24uCiAgICoKICAgKiBJZiBbY29tcHV0YXRpb25dIHJldHVybnMgYSBmdXR1cmUsCiAgICogdGhlIGZ1dHVyZSByZXR1cm5lZCBieSB0aGlzIGNvbnN0cnVjdG9yIHdpbGwgY29tcGxldGUgd2l0aCB0aGUgdmFsdWUgb3IKICAgKiBlcnJvciBvZiB0aGF0IGZ1dHVyZS4KICAgKgogICAqIElmIHRoZSBkdXJhdGlvbiBpcyAwIG9yIGxlc3MsCiAgICogaXQgY29tcGxldGVzIG5vIHNvb25lciB0aGFuIGluIHRoZSBuZXh0IGV2ZW50LWxvb3AgaXRlcmF0aW9uLAogICAqIGFmdGVyIGFsbCBtaWNyb3Rhc2tzIGhhdmUgcnVuLgogICAqCiAgICogSWYgW2NvbXB1dGF0aW9uXSBpcyBvbWl0dGVkLAogICAqIGl0IHdpbGwgYmUgdHJlYXRlZCBhcyBpZiBbY29tcHV0YXRpb25dIHdhcyBgKCkgPT4gbnVsbGAsCiAgICogYW5kIHRoZSBmdXR1cmUgd2lsbCBldmVudHVhbGx5IGNvbXBsZXRlIHdpdGggdGhlIGBudWxsYCB2YWx1ZS4KICAgKgogICAqIElmIGNhbGxpbmcgW2NvbXB1dGF0aW9uXSB0aHJvd3MsIHRoZSBjcmVhdGVkIGZ1dHVyZSB3aWxsIGNvbXBsZXRlIHdpdGggdGhlCiAgICogZXJyb3IuCiAgICoKICAgKiBTZWUgYWxzbyBbQ29tcGxldGVyXSBmb3IgYSB3YXkgdG8gY3JlYXRlIGFuZCBjb21wbGV0ZSBhIGZ1dHVyZSBhdCBhCiAgICogbGF0ZXIgdGltZSB0aGF0IGlzbid0IG5lY2Vzc2FyaWx5IGFmdGVyIGEga25vd24gZml4ZWQgZHVyYXRpb24uCiAgICovCiAgZmFjdG9yeSBGdXR1cmUuZGVsYXllZChEdXJhdGlvbiBkdXJhdGlvbiwgW0Z1dHVyZU9yPFQ+IGNvbXB1dGF0aW9uKCldKSB7CiAgICBfRnV0dXJlPFQ+IHJlc3VsdCA9IG5ldyBfRnV0dXJlPFQ+KCk7CiAgICBuZXcgVGltZXIoZHVyYXRpb24sICgpIHsKICAgICAgaWYgKGNvbXB1dGF0aW9uID09IG51bGwpIHsKICAgICAgICByZXN1bHQuX2NvbXBsZXRlKG51bGwpOwogICAgICB9IGVsc2UgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXN1bHQuX2NvbXBsZXRlKGNvbXB1dGF0aW9uKCkpOwogICAgICAgIH0gY2F0Y2ggKGUsIHMpIHsKICAgICAgICAgIF9jb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrKHJlc3VsdCwgZSwgcyk7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBXYWl0cyBmb3IgbXVsdGlwbGUgZnV0dXJlcyB0byBjb21wbGV0ZSBhbmQgY29sbGVjdHMgdGhlaXIgcmVzdWx0cy4KICAgKgogICAqIFJldHVybnMgYSBmdXR1cmUgd2hpY2ggd2lsbCBjb21wbGV0ZSBvbmNlIGFsbCB0aGUgcHJvdmlkZWQgZnV0dXJlcwogICAqIGhhdmUgY29tcGxldGVkLCBlaXRoZXIgd2l0aCB0aGVpciByZXN1bHRzLCBvciB3aXRoIGFuIGVycm9yIGlmIGFueQogICAqIG9mIHRoZSBwcm92aWRlZCBmdXR1cmVzIGZhaWwuCiAgICoKICAgKiBUaGUgdmFsdWUgb2YgdGhlIHJldHVybmVkIGZ1dHVyZSB3aWxsIGJlIGEgbGlzdCBvZiBhbGwgdGhlIHZhbHVlcyB0aGF0CiAgICogd2VyZSBwcm9kdWNlZCBpbiB0aGUgb3JkZXIgdGhhdCB0aGUgZnV0dXJlcyBhcmUgcHJvdmlkZWQgYnkgaXRlcmF0aW5nCiAgICogW2Z1dHVyZXNdLgogICAqCiAgICogSWYgYW55IGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvciwKICAgKiB0aGVuIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdpdGggdGhhdCBlcnJvci4KICAgKiBJZiBmdXJ0aGVyIGZ1dHVyZXMgYWxzbyBjb21wbGV0ZSB3aXRoIGVycm9ycywgdGhvc2UgZXJyb3JzIGFyZSBkaXNjYXJkZWQuCiAgICoKICAgKiBJZiBgZWFnZXJFcnJvcmAgaXMgdHJ1ZSwgdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvcgogICAqIGltbWVkaWF0ZWx5IG9uIHRoZSBmaXJzdCBlcnJvciBmcm9tIG9uZSBvZiB0aGUgZnV0dXJlcy4gT3RoZXJ3aXNlIGFsbAogICAqIGZ1dHVyZXMgbXVzdCBjb21wbGV0ZSBiZWZvcmUgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgKHN0aWxsIHdpdGgKICAgKiB0aGUgZmlyc3QgZXJyb3I7IHRoZSByZW1haW5pbmcgZXJyb3JzIGFyZSBzaWxlbnRseSBkcm9wcGVkKS4KICAgKgogICAqIEluIHRoZSBjYXNlIG9mIGFuIGVycm9yLCBbY2xlYW5VcF0gKGlmIHByb3ZpZGVkKSwgaXMgaW52b2tlZCBvbiBhbnkKICAgKiBub24tbnVsbCByZXN1bHQgb2Ygc3VjY2Vzc2Z1bCBmdXR1cmVzLgogICAqIFRoaXMgbWFrZXMgaXQgcG9zc2libGUgdG8gYGNsZWFuVXBgIHJlc291cmNlcyB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZQogICAqIGxvc3QgKHNpbmNlIHRoZSByZXR1cm5lZCBmdXR1cmUgZG9lcyBub3QgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlc2UgdmFsdWVzKS4KICAgKiBUaGUgW2NsZWFuVXBdIGZ1bmN0aW9uIGlzIHVudXNlZCBpZiB0aGVyZSBpcyBubyBlcnJvci4KICAgKgogICAqIFRoZSBjYWxsIHRvIFtjbGVhblVwXSBzaG91bGQgbm90IHRocm93LiBJZiBpdCBkb2VzLCB0aGUgZXJyb3Igd2lsbCBiZSBhbgogICAqIHVuY2F1Z2h0IGFzeW5jaHJvbm91cyBlcnJvci4KICAgKi8KICBzdGF0aWMgRnV0dXJlPExpc3Q8VD4+IHdhaXQ8VD4oSXRlcmFibGU8RnV0dXJlPFQ+PiBmdXR1cmVzLAogICAgICB7Ym9vbCBlYWdlckVycm9yOiBmYWxzZSwgdm9pZCBjbGVhblVwKFQgc3VjY2Vzc1ZhbHVlKX0pIHsKICAgIGZpbmFsIF9GdXR1cmU8TGlzdDxUPj4gcmVzdWx0ID0gbmV3IF9GdXR1cmU8TGlzdDxUPj4oKTsKICAgIExpc3Q8VD4gdmFsdWVzOyAvLyBDb2xsZWN0cyB0aGUgdmFsdWVzLiBTZXQgdG8gbnVsbCBvbiBlcnJvci4KICAgIGludCByZW1haW5pbmcgPSAwOyAvLyBIb3cgbWFueSBmdXR1cmVzIGFyZSB3ZSB3YWl0aW5nIGZvci4KICAgIHZhciBlcnJvcjsgLy8gVGhlIGZpcnN0IGVycm9yIGZyb20gYSBmdXR1cmUuCiAgICBTdGFja1RyYWNlIHN0YWNrVHJhY2U7IC8vIFRoZSBzdGFja1RyYWNlIHRoYXQgY2FtZSB3aXRoIHRoZSBlcnJvci4KCiAgICAvLyBIYW5kbGUgYW4gZXJyb3IgZnJvbSBhbnkgb2YgdGhlIGZ1dHVyZXMuCiAgICAvLyBUT0RPKGptZXNzZXJseSk6IHVzZSBgdm9pZGAgcmV0dXJuIHR5cGUgb25jZSBpdCBjYW4gYmUgaW5mZXJyZWQgZm9yIHRoZQogICAgLy8gYHRoZW5gIGNhbGwgYmVsb3cuCiAgICBoYW5kbGVFcnJvcih0aGVFcnJvciwgU3RhY2tUcmFjZSB0aGVTdGFja1RyYWNlKSB7CiAgICAgIHJlbWFpbmluZy0tOwogICAgICBpZiAodmFsdWVzICE9IG51bGwpIHsKICAgICAgICBpZiAoY2xlYW5VcCAhPSBudWxsKSB7CiAgICAgICAgICBmb3IgKHZhciB2YWx1ZSBpbiB2YWx1ZXMpIHsKICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHsKICAgICAgICAgICAgICAvLyBFbnN1cmUgZXJyb3JzIGZyb20gY2xlYW5VcCBhcmUgdW5jYXVnaHQuCiAgICAgICAgICAgICAgbmV3IEZ1dHVyZS5zeW5jKCgpIHsKICAgICAgICAgICAgICAgIGNsZWFuVXAodmFsdWUpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhbHVlcyA9IG51bGw7CiAgICAgICAgaWYgKHJlbWFpbmluZyA9PSAwIHx8IGVhZ2VyRXJyb3IpIHsKICAgICAgICAgIHJlc3VsdC5fY29tcGxldGVFcnJvcih0aGVFcnJvciwgdGhlU3RhY2tUcmFjZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVycm9yID0gdGhlRXJyb3I7CiAgICAgICAgICBzdGFja1RyYWNlID0gdGhlU3RhY2tUcmFjZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAocmVtYWluaW5nID09IDAgJiYgIWVhZ2VyRXJyb3IpIHsKICAgICAgICByZXN1bHQuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICB9CiAgICB9CgogICAgdHJ5IHsKICAgICAgLy8gQXMgZWFjaCBmdXR1cmUgY29tcGxldGVzLCBwdXQgaXRzIHZhbHVlIGludG8gdGhlIGNvcnJlc3BvbmRpbmcKICAgICAgLy8gcG9zaXRpb24gaW4gdGhlIGxpc3Qgb2YgdmFsdWVzLgogICAgICBmb3IgKHZhciBmdXR1cmUgaW4gZnV0dXJlcykgewogICAgICAgIGludCBwb3MgPSByZW1haW5pbmc7CiAgICAgICAgZnV0dXJlLnRoZW4oKFQgdmFsdWUpIHsKICAgICAgICAgIHJlbWFpbmluZy0tOwogICAgICAgICAgaWYgKHZhbHVlcyAhPSBudWxsKSB7CiAgICAgICAgICAgIHZhbHVlc1twb3NdID0gdmFsdWU7CiAgICAgICAgICAgIGlmIChyZW1haW5pbmcgPT0gMCkgewogICAgICAgICAgICAgIHJlc3VsdC5fY29tcGxldGVXaXRoVmFsdWUodmFsdWVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGNsZWFuVXAgIT0gbnVsbCAmJiB2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICAgICAgLy8gRW5zdXJlIGVycm9ycyBmcm9tIGNsZWFuVXAgYXJlIHVuY2F1Z2h0LgogICAgICAgICAgICAgIG5ldyBGdXR1cmUuc3luYygoKSB7CiAgICAgICAgICAgICAgICBjbGVhblVwKHZhbHVlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAocmVtYWluaW5nID09IDAgJiYgIWVhZ2VyRXJyb3IpIHsKICAgICAgICAgICAgICByZXN1bHQuX2NvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSwgb25FcnJvcjogaGFuZGxlRXJyb3IpOwogICAgICAgIC8vIEluY3JlbWVudCB0aGUgJ3JlbWFpbmluZycgYWZ0ZXIgdGhlIGNhbGwgdG8gJ3RoZW4nLgogICAgICAgIC8vIElmIHRoYXQgY2FsbCB0aHJvd3MsIHdlIGRvbid0IGV4cGVjdCBhbnkgZnV0dXJlIGNhbGxiYWNrIGZyb20KICAgICAgICAvLyB0aGUgZnV0dXJlLCBhbmQgd2UgYWxzbyBkb24ndCBpbmNyZW1lbnQgcmVtYWluaW5nLgogICAgICAgIHJlbWFpbmluZysrOwogICAgICB9CiAgICAgIGlmIChyZW1haW5pbmcgPT0gMCkgewogICAgICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKGNvbnN0IFtdKTsKICAgICAgfQogICAgICB2YWx1ZXMgPSBuZXcgTGlzdDxUPihyZW1haW5pbmcpOwogICAgfSBjYXRjaCAoZSwgc3QpIHsKICAgICAgLy8gVGhlIGVycm9yIG11c3QgaGF2ZSBiZWVuIHRocm93biB3aGlsZSBpdGVyYXRpbmcgb3ZlciB0aGUgZnV0dXJlcwogICAgICAvLyBsaXN0LCBvciB3aGlsZSBpbnN0YWxsaW5nIGEgY2FsbGJhY2sgaGFuZGxlciBvbiB0aGUgZnV0dXJlLgogICAgICBpZiAocmVtYWluaW5nID09IDAgfHwgZWFnZXJFcnJvcikgewogICAgICAgIC8vIFRocm93IGEgbmV3IEZ1dHVyZS5lcnJvci4KICAgICAgICAvLyBEb24ndCBqdXN0IGNhbGwgYHJlc3VsdC5fY29tcGxldGVFcnJvcmAgc2luY2UgdGhhdCB3b3VsZCBwcm9wYWdhdGUKICAgICAgICAvLyB0aGUgZXJyb3IgdG9vIGVhZ2VybHksIG5vdCBnaXZpbmcgdGhlIGNhbGxlcnMgdGltZSB0byBpbnN0YWxsCiAgICAgICAgLy8gZXJyb3IgaGFuZGxlcnMuCiAgICAgICAgLy8gQWxzbywgZG9uJ3QgdXNlIGBfYXN5bmNDb21wbGV0ZUVycm9yYCBzaW5jZSB0aGF0IG9uZSBkb2Vzbid0IGdpdmUKICAgICAgICAvLyB6b25lcyB0aGUgY2hhbmNlIHRvIGludGVyY2VwdCB0aGUgZXJyb3IuCiAgICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IoZSwgc3QpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIERvbid0IGFsbG9jYXRlIGEgbGlzdCBmb3IgdmFsdWVzLCB0aHVzIGluZGljYXRpbmcgdGhhdCB0aGVyZSB3YXMgYW4KICAgICAgICAvLyBlcnJvci4KICAgICAgICAvLyBTZXQgZXJyb3IgdG8gdGhlIGNhdWdodCBleGNlcHRpb24uCiAgICAgICAgZXJyb3IgPSBlOwogICAgICAgIHN0YWNrVHJhY2UgPSBzdDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgZmlyc3QgZnV0dXJlIGluIFtmdXR1cmVzXSB0byBjb21wbGV0ZS4KICAgKgogICAqIFRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZmlyc3QKICAgKiBmdXR1cmUgaW4gW2Z1dHVyZXNdIHRvIHJlcG9ydCB0aGF0IGl0IGlzIGNvbXBsZXRlLAogICAqIHdoZXRoZXIgaXQncyB3aXRoIGEgdmFsdWUgb3IgYW4gZXJyb3IuCiAgICogVGhlIHJlc3VsdHMgb2YgYWxsIHRoZSBvdGhlciBmdXR1cmVzIGFyZSBkaXNjYXJkZWQuCiAgICoKICAgKiBJZiBbZnV0dXJlc10gaXMgZW1wdHksIG9yIGlmIG5vbmUgb2YgaXRzIGZ1dHVyZXMgY29tcGxldGUsCiAgICogdGhlIHJldHVybmVkIGZ1dHVyZSBuZXZlciBjb21wbGV0ZXMuCiAgICovCiAgc3RhdGljIEZ1dHVyZTxUPiBhbnk8VD4oSXRlcmFibGU8RnV0dXJlPFQ+PiBmdXR1cmVzKSB7CiAgICB2YXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlcjxUPi5zeW5jKCk7CiAgICB2YXIgb25WYWx1ZSA9IChUIHZhbHVlKSB7CiAgICAgIGlmICghY29tcGxldGVyLmlzQ29tcGxldGVkKSBjb21wbGV0ZXIuY29tcGxldGUodmFsdWUpOwogICAgfTsKICAgIHZhciBvbkVycm9yID0gKGVycm9yLCBTdGFja1RyYWNlIHN0YWNrKSB7CiAgICAgIGlmICghY29tcGxldGVyLmlzQ29tcGxldGVkKSBjb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2spOwogICAgfTsKICAgIGZvciAodmFyIGZ1dHVyZSBpbiBmdXR1cmVzKSB7CiAgICAgIGZ1dHVyZS50aGVuKG9uVmFsdWUsIG9uRXJyb3I6IG9uRXJyb3IpOwogICAgfQogICAgcmV0dXJuIGNvbXBsZXRlci5mdXR1cmU7CiAgfQoKICAvKioKICAgKiBQZXJmb3JtcyBhbiBhY3Rpb24gZm9yIGVhY2ggZWxlbWVudCBvZiB0aGUgaXRlcmFibGUsIGluIHR1cm4uCiAgICoKICAgKiBUaGUgW2FjdGlvbl0gbWF5IGJlIGVpdGhlciBzeW5jaHJvbm91cyBvciBhc3luY2hyb25vdXMuCiAgICoKICAgKiBDYWxscyBbYWN0aW9uXSB3aXRoIGVhY2ggZWxlbWVudCBpbiBbZWxlbWVudHNdIGluIG9yZGVyLgogICAqIElmIHRoZSBjYWxsIHRvIFthY3Rpb25dIHJldHVybnMgYSBgRnV0dXJlPFQ+YCwgdGhlIGl0ZXJhdGlvbiB3YWl0cwogICAqIHVudGlsIHRoZSBmdXR1cmUgaXMgY29tcGxldGVkIGJlZm9yZSBjb250aW51aW5nIHdpdGggdGhlIG5leHQgZWxlbWVudC4KICAgKgogICAqIFJldHVybnMgYSBbRnV0dXJlXSB0aGF0IGNvbXBsZXRlcyB3aXRoIGBudWxsYCB3aGVuIGFsbCBlbGVtZW50cyBoYXZlIGJlZW4KICAgKiBwcm9jZXNzZWQuCiAgICoKICAgKiBOb24tW0Z1dHVyZV0gcmV0dXJuIHZhbHVlcywgYW5kIGNvbXBsZXRpb24tdmFsdWVzIG9mIHJldHVybmVkIFtGdXR1cmVdcywKICAgKiBhcmUgZGlzY2FyZGVkLgogICAqCiAgICogQW55IGVycm9yIGZyb20gW2FjdGlvbl0sIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cywKICAgKiB3aWxsIHN0b3AgdGhlIGl0ZXJhdGlvbiBhbmQgYmUgcmVwb3J0ZWQgaW4gdGhlIHJldHVybmVkIFtGdXR1cmVdLgogICAqLwogIHN0YXRpYyBGdXR1cmUgZm9yRWFjaDxUPihJdGVyYWJsZTxUPiBlbGVtZW50cywgRnV0dXJlT3IgYWN0aW9uKFQgZWxlbWVudCkpIHsKICAgIHZhciBpdGVyYXRvciA9IGVsZW1lbnRzLml0ZXJhdG9yOwogICAgcmV0dXJuIGRvV2hpbGUoKCkgewogICAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybiBmYWxzZTsKICAgICAgdmFyIHJlc3VsdCA9IGFjdGlvbihpdGVyYXRvci5jdXJyZW50KTsKICAgICAgaWYgKHJlc3VsdCBpcyBGdXR1cmUpIHJldHVybiByZXN1bHQudGhlbihfa1RydWUpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pOwogIH0KCiAgLy8gQ29uc3RhbnQgYHRydWVgIGZ1bmN0aW9uLCB1c2VkIGFzIGNhbGxiYWNrIGJ5IFtmb3JFYWNoXS4KICBzdGF0aWMgYm9vbCBfa1RydWUoXykgPT4gdHJ1ZTsKCiAgLyoqCiAgICogUGVyZm9ybXMgYW4gb3BlcmF0aW9uIHJlcGVhdGVkbHkgdW50aWwgaXQgcmV0dXJucyBgZmFsc2VgLgogICAqCiAgICogVGhlIG9wZXJhdGlvbiwgW2FjdGlvbl0sIG1heSBiZSBlaXRoZXIgc3luY2hyb25vdXMgb3IgYXN5bmNocm9ub3VzLgogICAqCiAgICogVGhlIG9wZXJhdGlvbiBpcyBjYWxsZWQgcmVwZWF0ZWRseSBhcyBsb25nIGFzIGl0IHJldHVybnMgZWl0aGVyIHRoZSBbYm9vbF0KICAgKiB2YWx1ZSBgdHJ1ZWAgb3IgYSBgRnV0dXJlPGJvb2w+YCB3aGljaCBjb21wbGV0ZXMgd2l0aCB0aGUgdmFsdWUgYHRydWVgLgogICAqCiAgICogSWYgYSBjYWxsIHRvIFthY3Rpb25dIHJldHVybnMgYGZhbHNlYCBvciBhIFtGdXR1cmVdIHRoYXQgY29tcGxldGVzIHRvCiAgICogYGZhbHNlYCwgaXRlcmF0aW9uIGVuZHMgYW5kIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgW2RvV2hpbGVdIGlzIGNvbXBsZXRlZAogICAqIHdpdGggYSBgbnVsbGAgdmFsdWUuCiAgICoKICAgKiBJZiBhIGNhbGwgdG8gW2FjdGlvbl0gdGhyb3dzIG9yIGEgZnV0dXJlIHJldHVybmVkIGJ5IFthY3Rpb25dIGNvbXBsZXRlcwogICAqIHdpdGggYW4gZXJyb3IsIGl0ZXJhdGlvbiBlbmRzIGFuZCB0aGUgZnV0dXJlIHJldHVybmVkIGJ5IFtkb1doaWxlXQogICAqIGNvbXBsZXRlcyB3aXRoIHRoZSBzYW1lIGVycm9yLgogICAqCiAgICogQ2FsbHMgdG8gW2FjdGlvbl0gbWF5IGhhcHBlbiBhdCBhbnkgdGltZSwKICAgKiBpbmNsdWRpbmcgaW1tZWRpYXRlbHkgYWZ0ZXIgY2FsbGluZyBgZG9XaGlsZWAuCiAgICogVGhlIG9ubHkgcmVzdHJpY3Rpb24gaXMgYSBuZXcgY2FsbCB0byBbYWN0aW9uXSB3b24ndCBoYXBwZW4gYmVmb3JlCiAgICogdGhlIHByZXZpb3VzIGNhbGwgaGFzIHJldHVybmVkLCBhbmQgaWYgaXQgcmV0dXJuZWQgYSBgRnV0dXJlPGJvb2w+YCwgbm90CiAgICogdW50aWwgdGhhdCBmdXR1cmUgaGFzIGNvbXBsZXRlZC4KICAgKi8KICBzdGF0aWMgRnV0dXJlIGRvV2hpbGUoRnV0dXJlT3I8Ym9vbD4gYWN0aW9uKCkpIHsKICAgIF9GdXR1cmUgZG9uZVNpZ25hbCA9IG5ldyBfRnV0dXJlKCk7CiAgICB2b2lkIEZ1bmN0aW9uKGJvb2wpIG5leHRJdGVyYXRpb247CiAgICAvLyBCaW5kIHRoaXMgY2FsbGJhY2sgZXhwbGljaXRseSBzbyB0aGF0IGVhY2ggaXRlcmF0aW9uIGlzbid0IGJvdW5kIGluIHRoZQogICAgLy8gY29udGV4dCBvZiBhbGwgdGhlIHByZXZpb3VzIGl0ZXJhdGlvbnMnIGNhbGxiYWNrcy4KICAgIC8vIFRoaXMgYXZvaWRzLCBlLmcuLCBkZWVwbHkgbmVzdGVkIHN0YWNrIHRyYWNlcyBmcm9tIHRoZSBzdGFjayB0cmFjZQogICAgLy8gcGFja2FnZS4KICAgIG5leHRJdGVyYXRpb24gPSBab25lLmN1cnJlbnQuYmluZFVuYXJ5Q2FsbGJhY2tHdWFyZGVkKChib29sIGtlZXBHb2luZykgewogICAgICB3aGlsZSAoa2VlcEdvaW5nKSB7CiAgICAgICAgRnV0dXJlT3I8Ym9vbD4gcmVzdWx0OwogICAgICAgIHRyeSB7CiAgICAgICAgICByZXN1bHQgPSBhY3Rpb24oKTsKICAgICAgICB9IGNhdGNoIChlcnJvciwgc3RhY2tUcmFjZSkgewogICAgICAgICAgLy8gQ2Fubm90IHVzZSBfY29tcGxldGVXaXRoRXJyb3JDYWxsYmFjayBiZWNhdXNlIGl0IGNvbXBsZXRlcwogICAgICAgICAgLy8gdGhlIGZ1dHVyZSBzeW5jaHJvbm91c2x5LgogICAgICAgICAgX2FzeW5jQ29tcGxldGVXaXRoRXJyb3JDYWxsYmFjayhkb25lU2lnbmFsLCBlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChyZXN1bHQgaXMgRnV0dXJlPGJvb2w+KSB7CiAgICAgICAgICByZXN1bHQudGhlbihuZXh0SXRlcmF0aW9uLCBvbkVycm9yOiBkb25lU2lnbmFsLl9jb21wbGV0ZUVycm9yKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAga2VlcEdvaW5nID0gcmVzdWx0OwogICAgICB9CiAgICAgIGRvbmVTaWduYWwuX2NvbXBsZXRlKG51bGwpOwogICAgfSk7CiAgICBuZXh0SXRlcmF0aW9uKHRydWUpOwogICAgcmV0dXJuIGRvbmVTaWduYWw7CiAgfQoKICAvKioKICAgKiBSZWdpc3RlciBjYWxsYmFja3MgdG8gYmUgY2FsbGVkIHdoZW4gdGhpcyBmdXR1cmUgY29tcGxldGVzLgogICAqCiAgICogV2hlbiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhIHZhbHVlLAogICAqIHRoZSBbb25WYWx1ZV0gY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGF0IHZhbHVlLgogICAqIElmIHRoaXMgZnV0dXJlIGlzIGFscmVhZHkgY29tcGxldGVkLCB0aGUgY2FsbGJhY2sgd2lsbCBub3QgYmUgY2FsbGVkCiAgICogaW1tZWRpYXRlbHksIGJ1dCB3aWxsIGJlIHNjaGVkdWxlZCBpbiBhIGxhdGVyIG1pY3JvdGFzay4KICAgKgogICAqIElmIFtvbkVycm9yXSBpcyBwcm92aWRlZCwgYW5kIHRoaXMgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLAogICAqIHRoZSBgb25FcnJvcmAgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggdGhhdCBlcnJvciBhbmQgaXRzIHN0YWNrIHRyYWNlLgogICAqIFRoZSBgb25FcnJvcmAgY2FsbGJhY2sgbXVzdCBhY2NlcHQgZWl0aGVyIG9uZSBhcmd1bWVudCBvciB0d28gYXJndW1lbnRzCiAgICogd2hlcmUgdGhlIGxhdHRlciBpcyBhIFtTdGFja1RyYWNlXS4KICAgKiBJZiBgb25FcnJvcmAgYWNjZXB0cyB0d28gYXJndW1lbnRzLAogICAqIGl0IGlzIGNhbGxlZCB3aXRoIGJvdGggdGhlIGVycm9yIGFuZCB0aGUgc3RhY2sgdHJhY2UsCiAgICogb3RoZXJ3aXNlIGl0IGlzIGNhbGxlZCB3aXRoIGp1c3QgdGhlIGVycm9yIG9iamVjdC4KICAgKiBUaGUgYG9uRXJyb3JgIGNhbGxiYWNrIG11c3QgcmV0dXJuIGEgdmFsdWUgb3IgZnV0dXJlIHRoYXQgY2FuIGJlIHVzZWQKICAgKiB0byBjb21wbGV0ZSB0aGUgcmV0dXJuZWQgZnV0dXJlLCBzbyBpdCBtdXN0IGJlIHNvbWV0aGluZyBhc3NpZ25hYmxlIHRvCiAgICogYEZ1dHVyZU9yPFI+YC4KICAgKgogICAqIFJldHVybnMgYSBuZXcgW0Z1dHVyZV0KICAgKiB3aGljaCBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBjYWxsIHRvIGBvblZhbHVlYAogICAqIChpZiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhIHZhbHVlKQogICAqIG9yIHRvIGBvbkVycm9yYCAoaWYgdGhpcyBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXJyb3IpLgogICAqCiAgICogSWYgdGhlIGludm9rZWQgY2FsbGJhY2sgdGhyb3dzLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgaXMgY29tcGxldGVkIHdpdGggdGhlIHRocm93biBlcnJvcgogICAqIGFuZCBhIHN0YWNrIHRyYWNlIGZvciB0aGUgZXJyb3IuCiAgICogSW4gdGhlIGNhc2Ugb2YgYG9uRXJyb3JgLAogICAqIGlmIHRoZSBleGNlcHRpb24gdGhyb3duIGlzIGBpZGVudGljYWxgIHRvIHRoZSBlcnJvciBhcmd1bWVudCB0byBgb25FcnJvcmAsCiAgICogdGhlIHRocm93IGlzIGNvbnNpZGVyZWQgYSByZXRocm93LAogICAqIGFuZCB0aGUgb3JpZ2luYWwgc3RhY2sgdHJhY2UgaXMgdXNlZCBpbnN0ZWFkLgogICAqCiAgICogSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYSBbRnV0dXJlXSwKICAgKiB0aGUgZnV0dXJlIHJldHVybmVkIGJ5IGB0aGVuYCB3aWxsIGJlIGNvbXBsZXRlZCB3aXRoCiAgICogdGhlIHNhbWUgcmVzdWx0IGFzIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrLgogICAqCiAgICogSWYgW29uRXJyb3JdIGlzIG5vdCBnaXZlbiwgYW5kIHRoaXMgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGVycm9yLAogICAqIHRoZSBlcnJvciBpcyBmb3J3YXJkZWQgZGlyZWN0bHkgdG8gdGhlIHJldHVybmVkIGZ1dHVyZS4KICAgKgogICAqIEluIG1vc3QgY2FzZXMsIGl0IGlzIG1vcmUgcmVhZGFibGUgdG8gdXNlIFtjYXRjaEVycm9yXSBzZXBhcmF0ZWx5LCBwb3NzaWJseQogICAqIHdpdGggYSBgdGVzdGAgcGFyYW1ldGVyLCBpbnN0ZWFkIG9mIGhhbmRsaW5nIGJvdGggdmFsdWUgYW5kIGVycm9yIGluIGEKICAgKiBzaW5nbGUgW3RoZW5dIGNhbGwuCiAgICoKICAgKiBOb3RlIHRoYXQgZnV0dXJlcyBkb24ndCBkZWxheSByZXBvcnRpbmcgb2YgZXJyb3JzIHVudGlsIGxpc3RlbmVycyBhcmUKICAgKiBhZGRlZC4gSWYgdGhlIGZpcnN0IGB0aGVuYCBvciBgY2F0Y2hFcnJvcmAgY2FsbCBoYXBwZW5zIGFmdGVyIHRoaXMgZnV0dXJlCiAgICogaGFzIGNvbXBsZXRlZCB3aXRoIGFuIGVycm9yIHRoZW4gdGhlIGVycm9yIGlzIHJlcG9ydGVkIGFzIHVuaGFuZGxlZCBlcnJvci4KICAgKiBTZWUgdGhlIGRlc2NyaXB0aW9uIG9uIFtGdXR1cmVdLgogICAqLwogIEZ1dHVyZTxSPiB0aGVuPFI+KEZ1dHVyZU9yPFI+IG9uVmFsdWUoVCB2YWx1ZSksIHtGdW5jdGlvbiBvbkVycm9yfSk7CgogIC8qKgogICAqIEhhbmRsZXMgZXJyb3JzIGVtaXR0ZWQgYnkgdGhpcyBbRnV0dXJlXS4KICAgKgogICAqIFRoaXMgaXMgdGhlIGFzeW5jaHJvbm91cyBlcXVpdmFsZW50IG9mIGEgImNhdGNoIiBibG9jay4KICAgKgogICAqIFJldHVybnMgYSBuZXcgW0Z1dHVyZV0gdGhhdCB3aWxsIGJlIGNvbXBsZXRlZCB3aXRoIGVpdGhlciB0aGUgcmVzdWx0IG9mCiAgICogdGhpcyBmdXR1cmUgb3IgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBgb25FcnJvcmAgY2FsbGJhY2suCiAgICoKICAgKiBJZiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhIHZhbHVlLAogICAqIHRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdpdGggdGhlIHNhbWUgdmFsdWUuCiAgICoKICAgKiBJZiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvciwKICAgKiB0aGVuIFt0ZXN0XSBpcyBmaXJzdCBjYWxsZWQgd2l0aCB0aGUgZXJyb3IgdmFsdWUuCiAgICoKICAgKiBJZiBgdGVzdGAgcmV0dXJucyBmYWxzZSwgdGhlIGV4Y2VwdGlvbiBpcyBub3QgaGFuZGxlZCBieSB0aGlzIGBjYXRjaEVycm9yYCwKICAgKiBhbmQgdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCB0aGUgc2FtZSBlcnJvciBhbmQgc3RhY2sgdHJhY2UKICAgKiBhcyB0aGlzIGZ1dHVyZS4KICAgKgogICAqIElmIGB0ZXN0YCByZXR1cm5zIGB0cnVlYCwKICAgKiBbb25FcnJvcl0gaXMgY2FsbGVkIHdpdGggdGhlIGVycm9yIGFuZCBwb3NzaWJseSBzdGFjayB0cmFjZSwKICAgKiBhbmQgdGhlIHJldHVybmVkIGZ1dHVyZSBpcyBjb21wbGV0ZWQgd2l0aCB0aGUgcmVzdWx0IG9mIHRoaXMgY2FsbAogICAqIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIGZvciBbdGhlbl0ncyBgb25FcnJvcmAuCiAgICoKICAgKiBJZiBgdGVzdGAgaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYSBmdW5jdGlvbiB0aGF0IGFsd2F5cyByZXR1cm5zIHRydWUuCiAgICogVGhlIGB0ZXN0YCBmdW5jdGlvbiBzaG91bGQgbm90IHRocm93LCBidXQgaWYgaXQgZG9lcywgaXQgaXMgaGFuZGxlZCBhcwogICAqIGlmIHRoZSBgb25FcnJvcmAgZnVuY3Rpb24gaGFkIHRocm93bi4KICAgKgogICAqIE5vdGUgdGhhdCBmdXR1cmVzIGRvbid0IGRlbGF5IHJlcG9ydGluZyBvZiBlcnJvcnMgdW50aWwgbGlzdGVuZXJzIGFyZQogICAqIGFkZGVkLiBJZiB0aGUgZmlyc3QgYGNhdGNoRXJyb3JgIChvciBgdGhlbmApIGNhbGwgaGFwcGVucyBhZnRlciB0aGlzIGZ1dHVyZQogICAqIGhhcyBjb21wbGV0ZWQgd2l0aCBhbiBlcnJvciB0aGVuIHRoZSBlcnJvciBpcyByZXBvcnRlZCBhcyB1bmhhbmRsZWQgZXJyb3IuCiAgICogU2VlIHRoZSBkZXNjcmlwdGlvbiBvbiBbRnV0dXJlXS4KICAgKi8KICAvLyBUaGUgYEZ1bmN0aW9uYCBiZWxvdyBzdGFuZHMgZm9yIG9uZSBvZiB0d28gdHlwZXM6CiAgLy8gLSAoZHluYW1pYykgLT4gRnV0dXJlT3I8VD4KICAvLyAtIChkeW5hbWljLCBTdGFja1RyYWNlKSAtPiBGdXR1cmVPcjxUPgogIC8vIEdpdmVuIHRoYXQgdGhlcmUgaXMgYSBgdGVzdGAgZnVuY3Rpb24gdGhhdCBpcyB1c3VhbGx5IHVzZWQgdG8gZG8gYW4KICAvLyBgaXNDaGVja2Agd2Ugc2hvdWxkIGFsc28gZXhwZWN0IGZ1bmN0aW9ucyB0aGF0IHRha2UgYSBzcGVjaWZpYyBhcmd1bWVudC4KICAvLyBOb3RlOiBtYWtpbmcgYGNhdGNoRXJyb3JgIHJldHVybiBhIGBGdXR1cmU8VD5gIGluIG5vbi1zdHJvbmcgbW9kZSBjb3VsZCBiZQogIC8vIGEgYnJlYWtpbmcgY2hhbmdlLgogIEZ1dHVyZTxUPiBjYXRjaEVycm9yKEZ1bmN0aW9uIG9uRXJyb3IsIHtib29sIHRlc3QoT2JqZWN0IGVycm9yKX0pOwoKICAvKioKICAgKiBSZWdpc3RlcnMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2hlbiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMuCiAgICoKICAgKiBUaGUgW2FjdGlvbl0gZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhpcyBmdXR1cmUgY29tcGxldGVzLCB3aGV0aGVyIGl0CiAgICogZG9lcyBzbyB3aXRoIGEgdmFsdWUgb3Igd2l0aCBhbiBlcnJvci4KICAgKgogICAqIFRoaXMgaXMgdGhlIGFzeW5jaHJvbm91cyBlcXVpdmFsZW50IG9mIGEgImZpbmFsbHkiIGJsb2NrLgogICAqCiAgICogVGhlIGZ1dHVyZSByZXR1cm5lZCBieSB0aGlzIGNhbGwsIGBmYCwgd2lsbCBjb21wbGV0ZSB0aGUgc2FtZSB3YXkKICAgKiBhcyB0aGlzIGZ1dHVyZSB1bmxlc3MgYW4gZXJyb3Igb2NjdXJzIGluIHRoZSBbYWN0aW9uXSBjYWxsLCBvciBpbgogICAqIGEgW0Z1dHVyZV0gcmV0dXJuZWQgYnkgdGhlIFthY3Rpb25dIGNhbGwuIElmIHRoZSBjYWxsIHRvIFthY3Rpb25dCiAgICogZG9lcyBub3QgcmV0dXJuIGEgZnV0dXJlLCBpdHMgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQuCiAgICoKICAgKiBJZiB0aGUgY2FsbCB0byBbYWN0aW9uXSB0aHJvd3MsIHRoZW4gYGZgIGlzIGNvbXBsZXRlZCB3aXRoIHRoZQogICAqIHRocm93biBlcnJvci4KICAgKgogICAqIElmIHRoZSBjYWxsIHRvIFthY3Rpb25dIHJldHVybnMgYSBbRnV0dXJlXSwgYGYyYCwgdGhlbiBjb21wbGV0aW9uIG9mCiAgICogYGZgIGlzIGRlbGF5ZWQgdW50aWwgYGYyYCBjb21wbGV0ZXMuIElmIGBmMmAgY29tcGxldGVzIHdpdGgKICAgKiBhbiBlcnJvciwgdGhhdCB3aWxsIGJlIHRoZSByZXN1bHQgb2YgYGZgIHRvby4gVGhlIHZhbHVlIG9mIGBmMmAgaXMgYWx3YXlzCiAgICogaWdub3JlZC4KICAgKgogICAqIFRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG86CiAgICoKICAgKiAgICAgRnV0dXJlPFQ+IHdoZW5Db21wbGV0ZShhY3Rpb24oKSkgewogICAqICAgICAgIHJldHVybiB0aGlzLnRoZW4oKHYpIHsKICAgKiAgICAgICAgIHZhciBmMiA9IGFjdGlvbigpOwogICAqICAgICAgICAgaWYgKGYyIGlzIEZ1dHVyZSkgcmV0dXJuIGYyLnRoZW4oKF8pID0+IHYpOwogICAqICAgICAgICAgcmV0dXJuIHYKICAgKiAgICAgICB9LCBvbkVycm9yOiAoZSkgewogICAqICAgICAgICAgdmFyIGYyID0gYWN0aW9uKCk7CiAgICogICAgICAgICBpZiAoZjIgaXMgRnV0dXJlKSByZXR1cm4gZjIudGhlbigoXykgeyB0aHJvdyBlOyB9KTsKICAgKiAgICAgICAgIHRocm93IGU7CiAgICogICAgICAgfSk7CiAgICogICAgIH0KICAgKi8KICBGdXR1cmU8VD4gd2hlbkNvbXBsZXRlKEZ1dHVyZU9yIGFjdGlvbigpKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtTdHJlYW1dIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1dHVyZS4KICAgKgogICAqIFRoZSBzdHJlYW0gd2lsbCBwcm9kdWNlIHNpbmdsZSBkYXRhIG9yIGVycm9yIGV2ZW50IGNvbnRhaW5pbmcgdGhlCiAgICogY29tcGxldGlvbiByZXN1bHQgb2YgdGhpcyBmdXR1cmUsIGFuZCB0aGVuIGl0IHdpbGwgY2xvc2Ugd2l0aCBhCiAgICogZG9uZSBldmVudC4KICAgKgogICAqIElmIHRoZSBmdXR1cmUgbmV2ZXIgY29tcGxldGVzLCB0aGUgc3RyZWFtIHdpbGwgbm90IHByb2R1Y2UgYW55IGV2ZW50cy4KICAgKi8KICBTdHJlYW08VD4gYXNTdHJlYW0oKTsKCiAgLyoqCiAgICogVGltZS1vdXQgdGhlIGZ1dHVyZSBjb21wdXRhdGlvbiBhZnRlciBbdGltZUxpbWl0XSBoYXMgcGFzc2VkLgogICAqCiAgICogUmV0dXJucyBhIG5ldyBmdXR1cmUgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgc2FtZSB2YWx1ZSBhcyB0aGlzIGZ1dHVyZSwKICAgKiBpZiB0aGlzIGZ1dHVyZSBjb21wbGV0ZXMgaW4gdGltZS4KICAgKgogICAqIElmIHRoaXMgZnV0dXJlIGRvZXMgbm90IGNvbXBsZXRlIGJlZm9yZSBgdGltZUxpbWl0YCBoYXMgcGFzc2VkLAogICAqIHRoZSBbb25UaW1lb3V0XSBhY3Rpb24gaXMgZXhlY3V0ZWQgaW5zdGVhZCwgYW5kIGl0cyByZXN1bHQgKHdoZXRoZXIgaXQKICAgKiByZXR1cm5zIG9yIHRocm93cykgaXMgdXNlZCBhcyB0aGUgcmVzdWx0IG9mIHRoZSByZXR1cm5lZCBmdXR1cmUuCiAgICogVGhlIFtvblRpbWVvdXRdIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgW1RdIG9yIGEgYEZ1dHVyZTxUPmAuCiAgICoKICAgKiBJZiBgb25UaW1lb3V0YCBpcyBvbWl0dGVkLCBhIHRpbWVvdXQgd2lsbCBjYXVzZSB0aGUgcmV0dXJuZWQgZnV0dXJlIHRvCiAgICogY29tcGxldGUgd2l0aCBhIFtUaW1lb3V0RXhjZXB0aW9uXS4KICAgKi8KICBGdXR1cmU8VD4gdGltZW91dChEdXJhdGlvbiB0aW1lTGltaXQsIHtGdXR1cmVPcjxUPiBvblRpbWVvdXQoKX0pOwp9CgovKioKICogVGhyb3duIHdoZW4gYSBzY2hlZHVsZWQgdGltZW91dCBoYXBwZW5zIHdoaWxlIHdhaXRpbmcgZm9yIGFuIGFzeW5jIHJlc3VsdC4KICovCmNsYXNzIFRpbWVvdXRFeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb24gewogIC8qKiBEZXNjcmlwdGlvbiBvZiB0aGUgY2F1c2Ugb2YgdGhlIHRpbWVvdXQuICovCiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CiAgLyoqIFRoZSBkdXJhdGlvbiB0aGF0IHdhcyBleGNlZWRlZC4gKi8KICBmaW5hbCBEdXJhdGlvbiBkdXJhdGlvbjsKCiAgVGltZW91dEV4Y2VwdGlvbih0aGlzLm1lc3NhZ2UsIFt0aGlzLmR1cmF0aW9uXSk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZyByZXN1bHQgPSAiVGltZW91dEV4Y2VwdGlvbiI7CiAgICBpZiAoZHVyYXRpb24gIT0gbnVsbCkgcmVzdWx0ID0gIlRpbWVvdXRFeGNlcHRpb24gYWZ0ZXIgJGR1cmF0aW9uIjsKICAgIGlmIChtZXNzYWdlICE9IG51bGwpIHJlc3VsdCA9ICIkcmVzdWx0OiAkbWVzc2FnZSI7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKLyoqCiAqIEEgd2F5IHRvIHByb2R1Y2UgRnV0dXJlIG9iamVjdHMgYW5kIHRvIGNvbXBsZXRlIHRoZW0gbGF0ZXIKICogd2l0aCBhIHZhbHVlIG9yIGVycm9yLgogKgogKiBNb3N0IG9mIHRoZSB0aW1lLCB0aGUgc2ltcGxlc3Qgd2F5IHRvIGNyZWF0ZSBhIGZ1dHVyZSBpcyB0byBqdXN0IHVzZQogKiBvbmUgb2YgdGhlIFtGdXR1cmVdIGNvbnN0cnVjdG9ycyB0byBjYXB0dXJlIHRoZSByZXN1bHQgb2YgYSBzaW5nbGUKICogYXN5bmNocm9ub3VzIGNvbXB1dGF0aW9uOgogKiBgYGAKICogbmV3IEZ1dHVyZSgoKSB7IGRvU29tZXRoaW5nKCk7IHJldHVybiByZXN1bHQ7IH0pOwogKiBgYGAKICogb3IsIGlmIHRoZSBmdXR1cmUgcmVwcmVzZW50cyB0aGUgcmVzdWx0IG9mIGEgc2VxdWVuY2Ugb2YgYXN5bmNocm9ub3VzCiAqIGNvbXB1dGF0aW9ucywgdGhleSBjYW4gYmUgY2hhaW5lZCB1c2luZyBbRnV0dXJlLnRoZW5dIG9yIHNpbWlsYXIgZnVuY3Rpb25zCiAqIG9uIFtGdXR1cmVdOgogKiBgYGAKICogRnV0dXJlIGRvU3R1ZmYoKXsKICogICByZXR1cm4gc29tZUFzeW5jT3BlcmF0aW9uKCkudGhlbigocmVzdWx0KSB7CiAqICAgICByZXR1cm4gc29tZU90aGVyQXN5bmNPcGVyYXRpb24ocmVzdWx0KTsKICogICB9KTsKICogfQogKiBgYGAKICogSWYgeW91IGRvIG5lZWQgdG8gY3JlYXRlIGEgRnV0dXJlIGZyb20gc2NyYXRjaCDigJQgZm9yIGV4YW1wbGUsCiAqIHdoZW4geW91J3JlIGNvbnZlcnRpbmcgYSBjYWxsYmFjay1iYXNlZCBBUEkgaW50byBhIEZ1dHVyZS1iYXNlZAogKiBvbmUg4oCUIHlvdSBjYW4gdXNlIGEgQ29tcGxldGVyIGFzIGZvbGxvd3M6CiAqIGBgYAogKiBjbGFzcyBBc3luY09wZXJhdGlvbiB7CiAqICAgQ29tcGxldGVyIF9jb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CiAqCiAqICAgRnV0dXJlPFQ+IGRvT3BlcmF0aW9uKCkgewogKiAgICAgX3N0YXJ0T3BlcmF0aW9uKCk7CiAqICAgICByZXR1cm4gX2NvbXBsZXRlci5mdXR1cmU7IC8vIFNlbmQgZnV0dXJlIG9iamVjdCBiYWNrIHRvIGNsaWVudC4KICogICB9CiAqCiAqICAgLy8gU29tZXRoaW5nIGNhbGxzIHRoaXMgd2hlbiB0aGUgdmFsdWUgaXMgcmVhZHkuCiAqICAgdm9pZCBfZmluaXNoT3BlcmF0aW9uKFQgcmVzdWx0KSB7CiAqICAgICBfY29tcGxldGVyLmNvbXBsZXRlKHJlc3VsdCk7CiAqICAgfQogKgogKiAgIC8vIElmIHNvbWV0aGluZyBnb2VzIHdyb25nLCBjYWxsIHRoaXMuCiAqICAgdm9pZCBfZXJyb3JIYXBwZW5lZChlcnJvcikgewogKiAgICAgX2NvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yKTsKICogICB9CiAqIH0KICogYGBgCiAqLwphYnN0cmFjdCBjbGFzcyBDb21wbGV0ZXI8VD4gewogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgY29tcGxldGVyLgogICAqCiAgICogVGhlIGdlbmVyYWwgd29ya2Zsb3cgZm9yIGNyZWF0aW5nIGEgbmV3IGZ1dHVyZSBpcyB0byAxKSBjcmVhdGUgYQogICAqIG5ldyBjb21wbGV0ZXIsIDIpIGhhbmQgb3V0IGl0cyBmdXR1cmUsIGFuZCwgYXQgYSBsYXRlciBwb2ludCwgMykgaW52b2tlCiAgICogZWl0aGVyIFtjb21wbGV0ZV0gb3IgW2NvbXBsZXRlRXJyb3JdLgogICAqCiAgICogVGhlIGNvbXBsZXRlciBjb21wbGV0ZXMgdGhlIGZ1dHVyZSBhc3luY2hyb25vdXNseS4gVGhhdCBtZWFucyB0aGF0CiAgICogY2FsbGJhY2tzIHJlZ2lzdGVyZWQgb24gdGhlIGZ1dHVyZSBhcmUgbm90IGNhbGxlZCBpbW1lZGlhdGVseSB3aGVuCiAgICogW2NvbXBsZXRlXSBvciBbY29tcGxldGVFcnJvcl0gaXMgY2FsbGVkLiBJbnN0ZWFkIHRoZSBjYWxsYmFja3MgYXJlCiAgICogZGVsYXllZCB1bnRpbCBhIGxhdGVyIG1pY3JvdGFzay4KICAgKgogICAqIEV4YW1wbGU6CiAgICogYGBgCiAgICogdmFyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKICAgKiBoYW5kT3V0KGNvbXBsZXRlci5mdXR1cmUpOwogICAqIGxhdGVyOiB7CiAgICogICBjb21wbGV0ZXIuY29tcGxldGUoJ2NvbXBsZXRpb24gdmFsdWUnKTsKICAgKiB9CiAgICogYGBgCiAgICovCiAgZmFjdG9yeSBDb21wbGV0ZXIoKSA9PiBuZXcgX0FzeW5jQ29tcGxldGVyPFQ+KCk7CgogIC8qKgogICAqIENvbXBsZXRlcyB0aGUgZnV0dXJlIHN5bmNocm9ub3VzbHkuCiAgICoKICAgKiBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCBiZSBhdm9pZGVkIHVubGVzcyB0aGUgY29tcGxldGlvbiBvZiB0aGUgZnV0dXJlIGlzCiAgICoga25vd24gdG8gYmUgdGhlIGZpbmFsIHJlc3VsdCBvZiBhbm90aGVyIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIElmIGluIGRvdWJ0CiAgICogdXNlIHRoZSBkZWZhdWx0IFtDb21wbGV0ZXJdIGNvbnN0cnVjdG9yLgogICAqCiAgICogVXNpbmcgYW4gbm9ybWFsLCBhc3luY2hyb25vdXMsIGNvbXBsZXRlciB3aWxsIG5ldmVyIGdpdmUgdGhlIHdyb25nCiAgICogYmVoYXZpb3IsIGJ1dCB1c2luZyBhIHN5bmNocm9ub3VzIGNvbXBsZXRlciBpbmNvcnJlY3RseSBjYW4gY2F1c2UKICAgKiBvdGhlcndpc2UgY29ycmVjdCBwcm9ncmFtcyB0byBicmVhay4KICAgKgogICAqIEEgc3luY2hyb25vdXMgY29tcGxldGVyIGlzIG9ubHkgaW50ZW5kZWQgZm9yIG9wdGltaXppbmcgZXZlbnQKICAgKiBwcm9wYWdhdGlvbiB3aGVuIG9uZSBhc3luY2hyb25vdXMgZXZlbnQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgYW5vdGhlci4KICAgKiBJdCBzaG91bGQgbm90IGJlIHVzZWQgdW5sZXNzIHRoZSBjYWxscyB0byBbY29tcGxldGVdIGFuZCBbY29tcGxldGVFcnJvcl0KICAgKiBhcmUgZ3VhcmFudGVlZCB0byBvY2N1ciBpbiBwbGFjZXMgd2hlcmUgaXQgd29uJ3QgYnJlYWsgYEZ1dHVyZWAgaW52YXJpYW50cy4KICAgKgogICAqIENvbXBsZXRpbmcgc3luY2hyb25vdXNseSBtZWFucyB0aGF0IHRoZSBjb21wbGV0ZXIncyBmdXR1cmUgd2lsbCBiZQogICAqIGNvbXBsZXRlZCBpbW1lZGlhdGVseSB3aGVuIGNhbGxpbmcgdGhlIFtjb21wbGV0ZV0gb3IgW2NvbXBsZXRlRXJyb3JdCiAgICogbWV0aG9kIG9uIGEgc3luY2hyb25vdXMgY29tcGxldGVyLCB3aGljaCBhbHNvIGNhbGxzIGFueSBjYWxsYmFja3MKICAgKiByZWdpc3RlcmVkIG9uIHRoYXQgZnV0dXJlLgogICAqCiAgICogQ29tcGxldGluZyBzeW5jaHJvbm91c2x5IG11c3Qgbm90IGJyZWFrIHRoZSBydWxlIHRoYXQgd2hlbiB5b3UgYWRkIGEKICAgKiBjYWxsYmFjayBvbiBhIGZ1dHVyZSwgdGhhdCBjYWxsYmFjayBtdXN0IG5vdCBiZSBjYWxsZWQgdW50aWwgdGhlIGNvZGUKICAgKiB0aGF0IGFkZGVkIHRoZSBjYWxsYmFjayBoYXMgY29tcGxldGVkLgogICAqIEZvciB0aGF0IHJlYXNvbiwgYSBzeW5jaHJvbm91cyBjb21wbGV0aW9uIG11c3Qgb25seSBvY2N1ciBhdCB0aGUgdmVyeSBlbmQKICAgKiAoaW4gInRhaWwgcG9zaXRpb24iKSBvZiBhbm90aGVyIHN5bmNocm9ub3VzIGV2ZW50LAogICAqIGJlY2F1c2UgYXQgdGhhdCBwb2ludCwgY29tcGxldGluZyB0aGUgZnV0dXJlIGltbWVkaWF0ZWx5IGlzIGJlIGVxdWl2YWxlbnQKICAgKiB0byByZXR1cm5pbmcgdG8gdGhlIGV2ZW50IGxvb3AgYW5kIGNvbXBsZXRpbmcgdGhlIGZ1dHVyZSBpbiB0aGUgbmV4dAogICAqIG1pY3JvdGFzay4KICAgKgogICAqIEV4YW1wbGU6CiAgICoKICAgKiAgICAgdmFyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIuc3luYygpOwogICAqICAgICAvLyBUaGUgY29tcGxldGlvbiBpcyB0aGUgcmVzdWx0IG9mIHRoZSBhc3luY2hyb25vdXMgb25Eb25lIGV2ZW50LgogICAqICAgICAvLyBObyBvdGhlciBvcGVyYXRpb24gaXMgcGVyZm9ybWVkIGFmdGVyIHRoZSBjb21wbGV0aW9uLiBJdCBpcyBzYWZlCiAgICogICAgIC8vIHRvIHVzZSB0aGUgQ29tcGxldGVyLnN5bmMgY29uc3RydWN0b3IuCiAgICogICAgIHN0cmVhbS5saXN0ZW4ocHJpbnQsIG9uRG9uZTogKCkgeyBjb21wbGV0ZXIuY29tcGxldGUoImRvbmUiKTsgfSk7CiAgICoKICAgKiBCYWQgZXhhbXBsZS4gRG8gbm90IHVzZSB0aGlzIGNvZGUuIE9ubHkgZm9yIGlsbHVzdHJhdGl2ZSBwdXJwb3NlczoKICAgKgogICAqICAgICB2YXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlci5zeW5jKCk7CiAgICogICAgIGNvbXBsZXRlci5mdXR1cmUudGhlbigoXykgeyBiYXIoKTsgfSk7CiAgICogICAgIC8vIFRoZSBjb21wbGV0aW9uIGlzIHRoZSByZXN1bHQgb2YgdGhlIGFzeW5jaHJvbm91cyBvbkRvbmUgZXZlbnQuCiAgICogICAgIC8vIEhvd2V2ZXIsIHRoZXJlIGlzIHN0aWxsIGNvZGUgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGNvbXBsZXRpb24uIFRoaXMKICAgKiAgICAgLy8gb3BlcmF0aW9uIGlzICpub3QqIHNhZmUuCiAgICogICAgIHN0cmVhbS5saXN0ZW4ocHJpbnQsIG9uRG9uZTogKCkgewogICAqICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZSgiZG9uZSIpOwogICAqICAgICAgIGZvbygpOyAgLy8gSW4gdGhpcyBjYXNlLCBmb28oKSBydW5zIGFmdGVyIGJhcigpLgogICAqICAgICB9KTsKICAgKi8KICBmYWN0b3J5IENvbXBsZXRlci5zeW5jKCkgPT4gbmV3IF9TeW5jQ29tcGxldGVyPFQ+KCk7CgogIC8qKgogICAqIFRoZSBmdXR1cmUgdGhhdCBpcyBjb21wbGV0ZWQgYnkgdGhpcyBjb21wbGV0ZXIuCiAgICoKICAgKiBUaGUgZnV0dXJlIHRoYXQgaXMgY29tcGxldGVkIHdoZW4gW2NvbXBsZXRlXSBvciBbY29tcGxldGVFcnJvcl0gaXMgY2FsbGVkLgogICAqLwogIEZ1dHVyZTxUPiBnZXQgZnV0dXJlOwoKICAvKioKICAgKiBDb21wbGV0ZXMgW2Z1dHVyZV0gd2l0aCB0aGUgc3VwcGxpZWQgdmFsdWVzLgogICAqCiAgICogVGhlIHZhbHVlIG11c3QgYmUgZWl0aGVyIGEgdmFsdWUgb2YgdHlwZSBbVF0KICAgKiBvciBhIGZ1dHVyZSBvZiB0eXBlIGBGdXR1cmU8VD5gLgogICAqCiAgICogSWYgdGhlIHZhbHVlIGlzIGl0c2VsZiBhIGZ1dHVyZSwgdGhlIGNvbXBsZXRlciB3aWxsIHdhaXQgZm9yIHRoYXQgZnV0dXJlCiAgICogdG8gY29tcGxldGUsIGFuZCBjb21wbGV0ZSB3aXRoIHRoZSBzYW1lIHJlc3VsdCwgd2hldGhlciBpdCBpcyBhIHN1Y2Nlc3MKICAgKiBvciBhbiBlcnJvci4KICAgKgogICAqIENhbGxpbmcgW2NvbXBsZXRlXSBvciBbY29tcGxldGVFcnJvcl0gbXVzdCBiZSBkb25lIGF0IG1vc3Qgb25jZS4KICAgKgogICAqIEFsbCBsaXN0ZW5lcnMgb24gdGhlIGZ1dHVyZSBhcmUgaW5mb3JtZWQgYWJvdXQgdGhlIHZhbHVlLgogICAqLwogIHZvaWQgY29tcGxldGUoW0Z1dHVyZU9yPFQ+IHZhbHVlXSk7CgogIC8qKgogICAqIENvbXBsZXRlIFtmdXR1cmVdIHdpdGggYW4gZXJyb3IuCiAgICoKICAgKiBDYWxsaW5nIFtjb21wbGV0ZV0gb3IgW2NvbXBsZXRlRXJyb3JdIG11c3QgYmUgZG9uZSBhdCBtb3N0IG9uY2UuCiAgICoKICAgKiBDb21wbGV0aW5nIGEgZnV0dXJlIHdpdGggYW4gZXJyb3IgaW5kaWNhdGVzIHRoYXQgYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24KICAgKiB3aGlsZSB0cnlpbmcgdG8gcHJvZHVjZSBhIHZhbHVlLgogICAqCiAgICogSWYgW2Vycm9yXSBpcyBgbnVsbGAsIGl0IGlzIHJlcGxhY2VkIGJ5IGEgW051bGxUaHJvd25FcnJvcl0uCiAgICoKICAgKiBJZiBgZXJyb3JgIGlzIGEgYEZ1dHVyZWAsIHRoZSBmdXR1cmUgaXRzZWxmIGlzIHVzZWQgYXMgdGhlIGVycm9yIHZhbHVlLgogICAqIElmIHlvdSB3YW50IHRvIGNvbXBsZXRlIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgZnV0dXJlLCB5b3UgY2FuIHVzZToKICAgKiBgYGAKICAgKiB0aGlzQ29tcGxldGVyLmNvbXBsZXRlKHRoZUZ1dHVyZSkKICAgKiBgYGAKICAgKiBvciBpZiB5b3Ugb25seSB3YW50IHRvIGhhbmRsZSBhbiBlcnJvciBmcm9tIHRoZSBmdXR1cmU6CiAgICogYGBgCiAgICogdGhlRnV0dXJlLmNhdGNoRXJyb3IodGhpc0NvbXBsZXRlci5jb21wbGV0ZUVycm9yKTsKICAgKiBgYGAKICAgKi8KICB2b2lkIGNvbXBsZXRlRXJyb3IoT2JqZWN0IGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSk7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIFtmdXR1cmVdIGhhcyBiZWVuIGNvbXBsZXRlZC4KICAgKgogICAqIFJlZmxlY3RzIHdoZXRoZXIgW2NvbXBsZXRlXSBvciBbY29tcGxldGVFcnJvcl0gaGFzIGJlZW4gY2FsbGVkLgogICAqIEEgYHRydWVgIHZhbHVlIGRvZXNuJ3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IGxpc3RlbmVycyBvZiB0aGlzIGZ1dHVyZQogICAqIGhhdmUgYmVlbiBpbnZva2VkIHlldCwgZWl0aGVyIGJlY2F1c2UgdGhlIGNvbXBsZXRlciB1c3VhbGx5IHdhaXRzIHVudGlsCiAgICogYSBsYXRlciBtaWNyb3Rhc2sgdG8gcHJvcGFnYXRlIHRoZSByZXN1bHQsIG9yIGJlY2F1c2UgW2NvbXBsZXRlXQogICAqIHdhcyBjYWxsZWQgd2l0aCBhIGZ1dHVyZSB0aGF0IGhhc24ndCBjb21wbGV0ZWQgeWV0LgogICAqCiAgICogV2hlbiB0aGlzIHZhbHVlIGlzIGB0cnVlYCwgW2NvbXBsZXRlXSBhbmQgW2NvbXBsZXRlRXJyb3JdIG11c3Qgbm90IGJlCiAgICogY2FsbGVkIGFnYWluLgogICAqLwogIGJvb2wgZ2V0IGlzQ29tcGxldGVkOwp9CgovLyBIZWxwZXIgZnVuY3Rpb24gY29tcGxldGluZyBhIF9GdXR1cmUgd2l0aCBlcnJvciwgYnV0IGNoZWNraW5nIHRoZSB6b25lCi8vIGZvciBlcnJvciByZXBsYWNlbWVudCBmaXJzdC4Kdm9pZCBfY29tcGxldGVXaXRoRXJyb3JDYWxsYmFjayhfRnV0dXJlIHJlc3VsdCwgZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogIEFzeW5jRXJyb3IgcmVwbGFjZW1lbnQgPSBab25lLmN1cnJlbnQuZXJyb3JDYWxsYmFjayhlcnJvciwgc3RhY2tUcmFjZSk7CiAgaWYgKHJlcGxhY2VtZW50ICE9IG51bGwpIHsKICAgIGVycm9yID0gX25vbk51bGxFcnJvcihyZXBsYWNlbWVudC5lcnJvcik7CiAgICBzdGFja1RyYWNlID0gcmVwbGFjZW1lbnQuc3RhY2tUcmFjZTsKICB9CiAgcmVzdWx0Ll9jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKfQoKLy8gTGlrZSBbX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2tdIGJ1dCBjb21wbGV0ZXMgYXN5bmNocm9ub3VzbHkuCnZvaWQgX2FzeW5jQ29tcGxldGVXaXRoRXJyb3JDYWxsYmFjaygKICAgIF9GdXR1cmUgcmVzdWx0LCBlcnJvciwgU3RhY2tUcmFjZSBzdGFja1RyYWNlKSB7CiAgQXN5bmNFcnJv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cyB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIGZ1bmN0aW9uLgogKiBVc2UgYSBwZXJpb2RpYyB0aW1lciB0byByZXBlYXRlZGx5IGNvdW50IGRvd24gdGhlIHNhbWUgaW50ZXJ2YWwuCiAqCiAqIEEgbmVnYXRpdmUgZHVyYXRpb24gaXMgdHJlYXRlZCB0aGUgc2FtZSBhcyBhIGR1cmF0aW9uIG9mIDAuCiAqIElmIHRoZSBkdXJhdGlvbiBpcyBzdGF0aWNhbGx5IGtub3duIHRvIGJlIDAsIGNvbnNpZGVyIHVzaW5nIFtydW5dLgogKgogKiBGcmVxdWVudGx5IHRoZSBkdXJhdGlvbiBpcyBlaXRoZXIgYSBjb25zdGFudCBvciBjb21wdXRlZCBhcyBpbiB0aGUKICogZm9sbG93aW5nIGV4YW1wbGUgKHRha2luZyBhZHZhbnRhZ2Ugb2YgdGhlIG11bHRpcGxpY2F0aW9uIG9wZXJhdG9yIG9mCiAqIHRoZSBbRHVyYXRpb25dIGNsYXNzKToKICogYGBgZGFydAogKiBjb25zdCB0aW1lb3V0ID0gY29uc3QgRHVyYXRpb24oc2Vjb25kczogMyk7CiAqIGNvbnN0IG1zID0gY29uc3QgRHVyYXRpb24obWlsbGlzZWNvbmRzOiAxKTsKICoKICogc3RhcnRUaW1lb3V0KFtpbnQgbWlsbGlzZWNvbmRzXSkgewogKiAgIHZhciBkdXJhdGlvbiA9IG1pbGxpc2Vjb25kcyA9PSBudWxsID8gdGltZW91dCA6IG1zICogbWlsbGlzZWNvbmRzOwogKiAgIHJldHVybiBuZXcgVGltZXIoZHVyYXRpb24sIGhhbmRsZVRpbWVvdXQpOwogKiB9CiAqIC4uLgogKiB2b2lkIGhhbmRsZVRpbWVvdXQoKSB7ICAvLyBjYWxsYmFjayBmdW5jdGlvbgogKiAgIC4uLgogKiB9CiAqIGBgYAogKiBOb3RlOiBJZiBEYXJ0IGNvZGUgdXNpbmcgVGltZXIgaXMgY29tcGlsZWQgdG8gSmF2YVNjcmlwdCwgdGhlIGZpbmVzdAogKiBncmFudWxhcml0eSBhdmFpbGFibGUgaW4gdGhlIGJyb3dzZXIgaXMgNCBtaWxsaXNlY29uZHMuCiAqCiAqIFNlZSBbU3RvcHdhdGNoXSBmb3IgbWVhc3VyaW5nIGVsYXBzZWQgdGltZS4KICovCmFic3RyYWN0IGNsYXNzIFRpbWVyIHsKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHRpbWVyLgogICAqCiAgICogVGhlIFtjYWxsYmFja10gZnVuY3Rpb24gaXMgaW52b2tlZCBhZnRlciB0aGUgZ2l2ZW4gW2R1cmF0aW9uXS4KICAgKgogICAqLwogIGZhY3RvcnkgVGltZXIoRHVyYXRpb24gZHVyYXRpb24sIHZvaWQgY2FsbGJhY2soKSkgewogICAgaWYgKFpvbmUuY3VycmVudCA9PSBab25lLnJvb3QpIHsKICAgICAgLy8gTm8gbmVlZCB0byBiaW5kIHRoZSBjYWxsYmFjay4gV2Uga25vdyB0aGF0IHRoZSByb290J3MgdGltZXIgd2lsbAogICAgICAvLyBiZSBpbnZva2VkIGluIHRoZSByb290IHpvbmUuCiAgICAgIHJldHVybiBab25lLmN1cnJlbnQuY3JlYXRlVGltZXIoZHVyYXRpb24sIGNhbGxiYWNrKTsKICAgIH0KICAgIHJldHVybiBab25lLmN1cnJlbnQKICAgICAgICAuY3JlYXRlVGltZXIoZHVyYXRpb24sIFpvbmUuY3VycmVudC5iaW5kQ2FsbGJhY2tHdWFyZGVkKGNhbGxiYWNrKSk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IHJlcGVhdGluZyB0aW1lci4KICAgKgogICAqIFRoZSBbY2FsbGJhY2tdIGlzIGludm9rZWQgcmVwZWF0ZWRseSB3aXRoIFtkdXJhdGlvbl0gaW50ZXJ2YWxzIHVudGlsCiAgICogY2FuY2VsZWQgd2l0aCB0aGUgW2NhbmNlbF0gZnVuY3Rpb24uCiAgICoKICAgKiBUaGUgZXhhY3QgdGltaW5nIGRlcGVuZHMgb24gdGhlIHVuZGVybHlpbmcgdGltZXIgaW1wbGVtZW50YXRpb24uCiAgICogTm8gbW9yZSB0aGFuIGBuYCBjYWxsYmFja3Mgd2lsbCBiZSBtYWRlIGluIGBkdXJhdGlvbiAqIG5gIHRpbWUsCiAgICogYnV0IHRoZSB0aW1lIGJldHdlZW4gdHdvIGNvbnNlY3V0aXZlIGNhbGxiYWNrcwogICAqIGNhbiBiZSBzaG9ydGVyIGFuZCBsb25nZXIgdGhhbiBgZHVyYXRpb25gLgogICAqCiAgICogSW4gcGFydGljdWxhciwgYW4gaW1wbGVtZW50YXRpb24gbWF5IHNjaGVkdWxlIHRoZSBuZXh0IGNhbGxiYWNrLCBlLmcuLAogICAqIGEgYGR1cmF0aW9uYCBhZnRlciBlaXRoZXIgd2hlbiB0aGUgcHJldmlvdXMgY2FsbGJhY2sgZW5kZWQsCiAgICogd2hlbiB0aGUgcHJldmlvdXMgY2FsbGJhY2sgc3RhcnRlZCwgb3Igd2hlbiB0aGUgcHJldmlvdXMgY2FsbGJhY2sgd2FzCiAgICogc2NoZWR1bGVkIGZvciAtIGV2ZW4gaWYgdGhlIGFjdHVhbCBjYWxsYmFjayB3YXMgZGVsYXllZC4KICAgKi8KICBmYWN0b3J5IFRpbWVyLnBlcmlvZGljKER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGNhbGxiYWNrKFRpbWVyIHRpbWVyKSkgewogICAgaWYgKFpvbmUuY3VycmVudCA9PSBab25lLnJvb3QpIHsKICAgICAgLy8gTm8gbmVlZCB0byBiaW5kIHRoZSBjYWxsYmFjay4gV2Uga25vdyB0aGF0IHRoZSByb290J3MgdGltZXIgd2lsbAogICAgICAvLyBiZSBpbnZva2VkIGluIHRoZSByb290IHpvbmUuCiAgICAgIHJldHVybiBab25lLmN1cnJlbnQuY3JlYXRlUGVyaW9kaWNUaW1lcihkdXJhdGlvbiwgY2FsbGJhY2spOwogICAgfQogICAgdmFyIGJvdW5kQ2FsbGJhY2sgPSBab25lLmN1cnJlbnQuYmluZFVuYXJ5Q2FsbGJhY2tHdWFyZGVkPFRpbWVyPihjYWxsYmFjayk7CiAgICByZXR1cm4gWm9uZS5jdXJyZW50LmNyZWF0ZVBlcmlvZGljVGltZXIoZHVyYXRpb24sIGJvdW5kQ2FsbGJhY2spOwogIH0KCiAgLyoqCiAgICogUnVucyB0aGUgZ2l2ZW4gW2NhbGxiYWNrXSBhc3luY2hyb25vdXNseSBhcyBzb29uIGFzIHBvc3NpYmxlLgogICAqCiAgICogVGhpcyBmdW5jdGlvbiBpcyBlcXVpdmFsZW50IHRvIGBuZXcgVGltZXIoRHVyYXRpb24uemVybywgY2FsbGJhY2spYC4KICAgKi8KICBzdGF0aWMgdm9pZCBydW4odm9pZCBjYWxsYmFjaygpKSB7CiAgICBuZXcgVGltZXIoRHVyYXRpb24uemVybywgY2FsbGJhY2spOwogIH0KCiAgLyoqCiAgICogQ2FuY2VscyB0aGUgdGltZXIuCiAgICoKICAgKiBPbmNlIGEgW1RpbWVyXSBoYXMgYmVlbiBjYW5jZWxlZCwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgbm90IGJlIGNhbGxlZAogICAqIGJ5IHRoZSB0aW1lci4gQ2FsbGluZyBbY2FuY2VsXSBtb3JlIHRoYW4gb25jZSBvbiBhIFtUaW1lcl0gaXMgYWxsb3dlZCwgYW5kCiAgICogd2lsbCBoYXZlIG5vIGZ1cnRoZXIgZWZmZWN0LgogICAqLwogIHZvaWQgY2FuY2VsKCk7CgogIC8qKgogICAqIFRoZSBudW1iZXIgb2YgZHVyYXRpb25zIHByZWNlZGluZyB0aGUgbW9zdCByZWNlbnQgdGltZXIgZXZlbnQuCiAgICoKICAgKiBUaGUgdmFsdWUgc3RhcnRzIGF0IHplcm8gYW5kIGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSBhIHRpbWVyIGV2ZW50CiAgICogb2NjdXJzLCBzbyBlYWNoIGNhbGxiYWNrIHdpbGwgc2VlIGEgbGFyZ2VyIHZhbHVlIHRoYW4gdGhlIHByZXZpb3VzIG9uZS4KICAgKgogICAqIElmIGEgcGVyaW9kaWMgdGltZXIgd2l0aCBhIG5vbi16ZXJvIGR1cmF0aW9uIGlzIGRlbGF5ZWQgdG9vIG11Y2gsCiAgICogc28gbW9yZSB0aGFuIG9uZSB0aWNrIHNob3VsZCBoYXZlIGhhcHBlbmVkLAogICAqIGFsbCBidXQgdGhlIGxhc3QgdGljayBpbiB0aGUgcGFzdCBhcmUgY29uc2lkZXJlZCAibWlzc2VkIiwKICAgKiBhbmQgbm8gY2FsbGJhY2sgaXMgaW52b2tlZCBmb3IgdGhlbS4KICAgKiBUaGUgW3RpY2tdIGNvdW50IHJlZmxlY3RzIHRoZSBudW1iZXIgb2YgZHVyYXRpb25zIHRoYXQgaGF2ZSBwYXNzZWQgYW5kCiAgICogbm90IHRoZSBudW1iZXIgb2YgY2FsbGJhY2sgaW52b2NhdGlvbnMgdGhhdCBoYXZlIGhhcHBlbmVkLgogICAqLwogIGludCBnZXQgdGljazsKCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSB0aW1lciBpcyBzdGlsbCBhY3RpdmUuCiAgICoKICAgKiBBIG5vbi1wZXJpb2RpYyB0aW1lciBpcyBhY3RpdmUgaWYgdGhlIGNhbGxiYWNrIGhhcyBub3QgYmVlbiBleGVjdXRlZCwKICAgKiBhbmQgdGhlIHRpbWVyIGhhcyBub3QgYmVlbiBjYW5jZWxlZC4KICAgKgogICAqIEEgcGVyaW9kaWMgdGltZXIgaXMgYWN0aXZlIGlmIGl0IGhhcyBub3QgYmVlbiBjYW5jZWxlZC4KICAgKi8KICBib29sIGdldCBpc0FjdGl2ZTsKCiAgZXh0ZXJuYWwgc3RhdGljIFRpbWVyIF9jcmVhdGVUaW1lcihEdXJhdGlvbiBkdXJhdGlvbiwgdm9pZCBjYWxsYmFjaygpKTsKICBleHRlcm5hbCBzdGF0aWMgVGltZXIgX2NyZWF0ZVBlcmlvZGljVGltZXIoCiAgICAgIER1cmF0aW9uIGR1cmF0aW9uLCB2b2lkIGNhbGxiYWNrKFRpbWVyIHRpbWVyKSk7Cn0KgIEATk48ARQBBEkDO1BEAz9GA0ZJGgsvLwMmSDAFBzAJBQdIOwMvBBcGGgVEBQY2JUomOwYYTAQBBiQFSioFRkU0MAVMQUs+BkolSiZDBlBGBAEGQwVKBiUoBAEGGAVQUCIGEQEGRAVJTQVHMUAqTEAGEAEGMAVLKgU9BhUBSi42AgEVZGFydDphc3luYy90aW1lci5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZXJyb3JzX3BhdGNoLmRhcnTAAEyBLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgRXJyb3IgewogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX29iamVjdFRvU3RyaW5nKE9iamVjdCBvYmplY3QpIHsKICAgIHJldHVybiBPYmplY3QuX3RvU3RyaW5nKG9iamVjdCk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIF9zdHJpbmdUb1NhZmVTdHJpbmcoU3RyaW5nIHN0cmluZykgewogICAgcmV0dXJuIGpzb24uZW5jb2RlKHN0cmluZyk7CiAgfQoKICBAcGF0Y2gKICBTdGFja1RyYWNlIGdldCBzdGFja1RyYWNlID0+IF9zdGFja1RyYWNlOwoKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgU3RhY2tUcmFjZSBfc3RhY2tUcmFjZTsKfQoKY2xhc3MgX0Fzc2VydGlvbkVycm9yIGV4dGVuZHMgRXJyb3IgaW1wbGVtZW50cyBBc3NlcnRpb25FcnJvciB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIF9Bc3NlcnRpb25FcnJvci5fY3JlYXRlKAogICAgICB0aGlzLl9mYWlsZWRBc3NlcnRpb24sIHRoaXMuX3VybCwgdGhpcy5fbGluZSwgdGhpcy5fY29sdW1uLCB0aGlzLm1lc3NhZ2UpOwoKICAvLyBBc3NlcnRpb25FcnJvcl90aHJvd05ldyBpbiBlcnJvcnMuY2MgZmlzaGVzIHRoZSBhc3NlcnRpb24gc291cmNlIGNvZGUKICAvLyBvdXQgb2YgdGhlIHNjcmlwdC4gSXQgZXhwZWN0cyBhIERhcnQgc3RhY2sgZnJhbWUgZnJvbSBjbGFzcwogIC8vIF9Bc3NlcnRpb25FcnJvci4gVGh1cyB3ZSBuZWVkIGEgRGFydCBzdHViIHRoYXQgY2FsbHMgdGhlIG5hdGl2ZSBjb2RlLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIHN0YXRpYyBfdGhyb3dOZXcoaW50IGFzc2VydGlvblN0YXJ0LCBpbnQgYXNzZXJ0aW9uRW5kLCBPYmplY3QgbWVzc2FnZSkgewogICAgX2RvVGhyb3dOZXcoYXNzZXJ0aW9uU3RhcnQsIGFzc2VydGlvbkVuZCwgbWVzc2FnZSk7CiAgfQoKICBzdGF0aWMgX2RvVGhyb3dOZXcoaW50IGFzc2VydGlvblN0YXJ0LCBpbnQgYXNzZXJ0aW9uRW5kLCBPYmplY3QgbWVzc2FnZSkKICAgICAgbmF0aXZlICJBc3NlcnRpb25FcnJvcl90aHJvd05ldyI7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIHN0YXRpYyBfZXZhbHVhdGVBc3NlcnRpb24oY29uZGl0aW9uKSB7CiAgICBpZiAoaWRlbnRpY2FsKGNvbmRpdGlvbiwgdHJ1ZSkgfHwgaWRlbnRpY2FsKGNvbmRpdGlvbiwgZmFsc2UpKSB7CiAgICAgIHJldHVybiBjb25kaXRpb247CiAgICB9CiAgICBpZiAoY29uZGl0aW9uIGlzIF9DbG9zdXJlKSB7CiAgICAgIHJldHVybiAoY29uZGl0aW9uIGFzIGR5bmFtaWMpKCk7CiAgICB9CiAgICBpZiAoY29uZGl0aW9uIGlzIEZ1bmN0aW9uKSB7CiAgICAgIGNvbmRpdGlvbiA9IGNvbmRpdGlvbigpOwogICAgfQogICAgcmV0dXJuIGNvbmRpdGlvbjsKICB9CgogIFN0cmluZyBnZXQgX21lc3NhZ2VTdHJpbmcgewogICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkgcmV0dXJuICJpcyBub3QgdHJ1ZS4iOwogICAgaWYgKG1lc3NhZ2UgaXMgU3RyaW5nKSByZXR1cm4gbWVzc2FnZTsKICAgIHJldHVybiBFcnJvci5zYWZlVG9TdHJpbmcobWVzc2FnZSk7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBpZiAoX3VybCA9PSBudWxsKSB7CiAgICAgIGlmIChtZXNzYWdlID09IG51bGwpIHJldHVybiBfZmFpbGVkQXNzZXJ0aW9uPy50cmltKCk7CiAgICAgIHJldHVybiAiJyR7X2ZhaWxlZEFzc2VydGlvbj8udHJpbSgpfSc6ICRfbWVzc2FnZVN0cmluZyI7CiAgICB9CiAgICB2YXIgY29sdW1uSW5mbyA9ICIiOwogICAgaWYgKF9jb2x1bW4gPiAwKSB7CiAgICAgIC8vIE9ubHkgYWRkIGNvbHVtbiBpbmZvcm1hdGlvbiBpZiBpdCBpcyB2YWxpZC4KICAgICAgY29sdW1uSW5mbyA9ICIgcG9zICRfY29sdW1uIjsKICAgIH0KICAgIHJldHVybiAiJyRfdXJsJzogRmFpbGVkIGFzc2VydGlvbjogbGluZSAkX2xpbmUkY29sdW1uSW5mbzogIgogICAgICAgICInJF9mYWlsZWRBc3NlcnRpb24nOiAkX21lc3NhZ2VTdHJpbmciOwogIH0KCiAgZmluYWwgU3RyaW5nIF9mYWlsZWRBc3NlcnRpb247CiAgZmluYWwgU3RyaW5nIF91cmw7CiAgZmluYWwgaW50IF9saW5lOwogIGZpbmFsIGludCBfY29sdW1uOwogIGZpbmFsIE9iamVjdCBtZXNzYWdlOwp9CgpjbGFzcyBfVHlwZUVycm9yIGV4dGVuZHMgX0Fzc2VydGlvbkVycm9yIGltcGxlbWVudHMgVHlwZUVycm9yIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgX1R5cGVFcnJvci5fY3JlYXRlKFN0cmluZyB1cmwsIGludCBsaW5lLCBpbnQgY29sdW1uLCBTdHJpbmcgZXJyb3JNc2cpCiAgICAgIDogc3VwZXIuX2NyZWF0ZSgiaXMgYXNzaWduYWJsZSIsIHVybCwgbGluZSwgY29sdW1uLCBlcnJvck1zZyk7CgogIHN0YXRpYyBfdGhyb3dOZXcoaW50IGxvY2F0aW9uLCBPYmplY3Qgc3JjX3ZhbHVlLCBfVHlwZSBkc3RfdHlwZSwKICAgICAgU3RyaW5nIGRzdF9uYW1lKSBuYXRpdmUgIlR5cGVFcnJvcl90aHJvd05ldyI7CgogIFN0cmluZyB0b1N0cmluZygpID0+IHN1cGVyLm1lc3NhZ2U7Cn0KCmNsYXNzIF9DYXN0RXJyb3IgZXh0ZW5kcyBFcnJvciBpbXBsZW1lbnRzIENhc3RFcnJvciB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIF9DYXN0RXJyb3IuX2NyZWF0ZSh0aGlzLl91cmwsIHRoaXMuX2xpbmUsIHRoaXMuX2NvbHVtbiwgdGhpcy5fZXJyb3JNc2cpOwoKICAvLyBBIENhc3RFcnJvciBpcyBhbGxvY2F0ZWQgYnkgVHlwZUVycm9yLl90aHJvd05ldygpIHdoZW4gZHN0X25hbWUgZXF1YWxzCiAgLy8gU3ltYm9sczo6SW5UeXBlQ2FzdCgpLgoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfZXJyb3JNc2c7CgogIC8vIEZpZWxkcyBfdXJsLCBfbGluZSwgYW5kIF9jb2x1bW4gYXJlIG9ubHkgdXNlZCBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLgogIGZpbmFsIFN0cmluZyBfdXJsOwogIGZpbmFsIGludCBfbGluZTsKICBmaW5hbCBpbnQgX2NvbHVtbjsKICBmaW5hbCBTdHJpbmcgX2Vycm9yTXNnOwp9CgpAcGF0Y2gKY2xhc3MgRmFsbFRocm91Z2hFcnJvciB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIEZhbGxUaHJvdWdoRXJyb3IuX2NyZWF0ZShTdHJpbmcgdXJsLCBpbnQgbGluZSkKICAgICAgOiBfdXJsID0gdXJsLAogICAgICAgIF9saW5lID0gbGluZTsKCiAgc3RhdGljIF90aHJvd05ldyhpbnQgY2FzZV9jbGF1c2VfcG9zKSBuYXRpdmUgIkZhbGxUaHJvdWdoRXJyb3JfdGhyb3dOZXciOwoKICBAcGF0Y2gKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gIickX3VybCc6IFN3aXRjaCBjYXNlIGZhbGwtdGhyb3VnaCBhdCBsaW5lICRfbGluZS4iOwogIH0KCiAgLy8gVGhlc2UgbmV3IGZpZWxkcyBjYW5ub3QgYmUgZGVjbGFyZWQgZmluYWwsIGJlY2F1c2UgYSBjb25zdHJ1Y3RvciBleGlzdHMKICAvLyBpbiB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIHBhdGNoZWQgY2xhc3MuCiAgU3RyaW5nIF91cmw7CiAgaW50IF9saW5lOwp9CgpjbGFzcyBfSW50ZXJuYWxFcnJvciB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGNvbnN0IF9JbnRlcm5hbEVycm9yKHRoaXMuX21zZyk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkludGVybmFsRXJyb3I6ICcke19tc2d9JyI7CiAgZmluYWwgU3RyaW5nIF9tc2c7Cn0KCkBwYXRjaApAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIFVuc3VwcG9ydGVkRXJyb3IgewogIHN0YXRpYyBfdGhyb3dOZXcoU3RyaW5nIG1zZykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IobXNnKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBDeWNsaWNJbml0aWFsaXphdGlvbkVycm9yIHsKICBzdGF0aWMgX3Rocm93TmV3KFN0cmluZyB2YXJpYWJsZU5hbWUpIHsKICAgIHRocm93IG5ldyBDeWNsaWNJbml0aWFsaXphdGlvbkVycm9yKHZhcmlhYmxlTmFtZSk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvciB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIEFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3IuX2NyZWF0ZSgKICAgICAgdGhpcy5fY2xhc3NOYW1lLCB0aGlzLl91cmwsIHRoaXMuX2xpbmUpOwoKICBzdGF0aWMgX3Rocm93TmV3KGludCBjYXNlX2NsYXVzZV9wb3MsIFN0cmluZyBjbGFzc05hbWUpCiAgICAgIG5hdGl2ZSAiQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcl90aHJvd05ldyI7CgogIEBwYXRjaAogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAiQ2Fubm90IGluc3RhbnRpYXRlIGFic3RyYWN0IGNsYXNzICRfY2xhc3NOYW1lOiAiCiAgICAgICAgIl91cmwgJyRfdXJsJyBsaW5lICRfbGluZSI7CiAgfQoKICAvLyBUaGVzZSBuZXcgZmllbGRzIGNhbm5vdCBiZSBkZWNsYXJlZCBmaW5hbCwgYmVjYXVzZSBhIGNvbnN0cnVjdG9yIGV4aXN0cwogIC8vIGluIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoaXMgcGF0Y2hlZCBjbGFzcy4KICBTdHJpbmcgX3VybDsKICBpbnQgX2xpbmU7Cn0KCkBwYXRjaApjbGFzcyBOb1N1Y2hNZXRob2RFcnJvciB7CiAgLy8gRGVwcmVjYXRlZCBtZW1iZXJzIHRvIGJlIHJlbW92ZWQuCiAgU3ltYm9sIF9tZW1iZXJOYW1lOwogIExpc3QgX2FyZ3VtZW50czsKICBNYXA8U3ltYm9sLCBkeW5hbWljPiBfbmFtZWRBcmd1bWVudHM7CiAgTGlzdCBfZXhpc3RpbmdBcmd1bWVudE5hbWVzOwoKICBmaW5hbCBPYmplY3QgX3JlY2VpdmVyOwogIGZpbmFsIF9JbnZvY2F0aW9uTWlycm9yIF9pbnZvY2F0aW9uOwoKICBAcGF0Y2gKICBOb1N1Y2hNZXRob2RFcnJvci53aXRoSW52b2NhdGlvbihPYmplY3QgcmVjZWl2ZXIsIEludm9jYXRpb24gaW52b2NhdGlvbikKICAgICAgOiBfcmVjZWl2ZXIgPSByZWNlaXZlciwKICAgICAgICBfaW52b2NhdGlvbiA9IGludm9jYXRpb24gYXMgX0ludm9jYXRpb25NaXJyb3I7CgogIHN0YXRpYyB2b2lkIF90aHJvd05ld0ludm9jYXRpb24oT2JqZWN0IHJlY2VpdmVyLCBJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIHRocm93IG5ldyBOb1N1Y2hNZXRob2RFcnJvci53aXRoSW52b2NhdGlvbihyZWNlaXZlciwgaW52b2NhdGlvbik7CiAgfQoKICAvLyBUaGUgY29tcGlsZXIgZW1pdHMgYSBjYWxsIHRvIF90aHJvd05ldyB3aGVuIGl0IGNhbm5vdCByZXNvbHZlIGEgc3RhdGljCiAgLy8gbWV0aG9kIGF0IGNvbXBpbGUgdGltZS4gVGhlIHJlY2VpdmVyIGlzIGFjdHVhbGx5IHRoZSBsaXRlcmFsIGNsYXNzIG9mIHRoZQogIC8vIHVucmVzb2x2ZWQgbWV0aG9kLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIHN0YXRpYyB2b2lkIF90aHJvd05ldyhPYmplY3QgcmVjZWl2ZXIsIFN0cmluZyBtZW1iZXJOYW1lLCBpbnQgaW52b2NhdGlvbl90eXBlLAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50cywgTGlzdCBhcmd1bWVudHMsIExpc3QgYXJndW1lbnROYW1lcykgewogICAgdGhyb3cgbmV3IE5vU3VjaE1ldGhvZEVycm9yLl93aXRoVHlwZShyZWNlaXZlciwgbWVtYmVyTmFtZSwgaW52b2NhdGlvbl90eXBlLAogICAgICAgIHR5cGVBcmd1bWVudHMsIGFyZ3VtZW50cywgYXJndW1lbnROYW1lcyk7CiAgfQoKICBzdGF0aWMgdm9pZCBfdGhyb3dOZXdJZk5vdExvYWRlZCgKICAgICAgX0xpYnJhcnlQcmVmaXggcHJlZml4LAogICAgICBPYmplY3QgcmVjZWl2ZXIsCiAgICAgIFN0cmluZyBtZW1iZXJOYW1lLAogICAgICBpbnQgaW52b2NhdGlvbl90eXBlLAogICAgICBPYmplY3QgdHlwZUFyZ3VtZW50cywKICAgICAgTGlzdCBhcmd1bWVudHMsCiAgICAgIExpc3QgYXJndW1lbnROYW1lcykgewogICAgaWYgKCFwcmVmaXguaXNMb2FkZWQoKSkgewogICAgICBfdGhyb3dOZXcocmVjZWl2ZXIsIG1lbWJlck5hbWUsIGludm9jYXRpb25fdHlwZSwgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRzLAogICAgICAgICAgYXJndW1lbnROYW1lcyk7CiAgICB9CiAgfQoKICAvLyBUT0RPKHJlZ2lzKTogRGVwcmVjYXRlZCBtZW1iZXIgc3RpbGwgdXNlZCBieSBkYXJ0MmpzIHRvIGJlIHJlbW92ZWQuCiAgLy8gUmVtZW1iZXIgdGhlIHR5cGUgZnJvbSB0aGUgaW52b2NhdGlvbiBtaXJyb3Igb3Igc3RhdGljIGNvbXBpbGF0aW9uCiAgLy8gYW5hbHlzaXMgd2hlbiB0aHJvd24gZGlyZWN0bHkgd2l0aCBfdGhyb3dOZXcuIEEgbmVnYXRpdmUgdmFsdWUgbWVhbnMKICAvLyB0aGF0IG5vIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KICBpbnQgX2ludm9jYXRpb25fdHlwZTsKCiAgLy8gVE9ETyhyZWdpcyk6IERlcHJlY2F0ZWQgY29uc3RydWN0b3Igc3RpbGwgdXNlZCBieSBkYXJ0MmpzIHRvIGJlIHJlbW92ZWQuCiAgQHBhdGNoCiAgTm9TdWNoTWV0aG9kRXJyb3IoT2JqZWN0IHJlY2VpdmVyLCBTeW1ib2wgbWVtYmVyTmFtZSwKICAgICAgTGlzdCBwb3NpdGlvbmFsQXJndW1lbnRzLCBNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50cywKICAgICAgW0xpc3QgZXhpc3RpbmdBcmd1bWVudE5hbWVzID0gbnVsbF0pCiAgICAgIDogX3JlY2VpdmVyID0gcmVjZWl2ZXIsCiAgICAgICAgX2ludm9jYXRpb24gPSBudWxsLAogICAgICAgIF9tZW1iZXJOYW1lID0gbWVtYmVyTmFtZSwKICAgICAgICBfYXJndW1lbnRzID0gcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICBfbmFtZWRBcmd1bWVudHMgPSBuYW1lZEFyZ3VtZW50cywKICAgICAgICBfZXhpc3RpbmdBcmd1bWVudE5hbWVzID0gZXhpc3RpbmdBcmd1bWVudE5hbWVzLAogICAgICAgIF9pbnZvY2F0aW9uX3R5cGUgPSAtMTsKCiAgLy8gSGVscGVyIHRvIGJ1aWxkIGEgbWFwIG9mIG5hbWVkIGFyZ3VtZW50cy4KICBzdGF0aWMgTWFwPFN5bWJvbCwgZHluYW1pYz4gX05hbWVkQXJndW1lbnRzTWFwKAogICAgICBMaXN0IGFyZ3VtZW50cywgTGlzdCBhcmd1bWVudE5hbWVzKSB7CiAgICBNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50cyA9IG5ldyBNYXA8U3ltYm9sLCBkeW5hbWljPigpOwogICAgaW50IG51bVBvc2l0aW9uYWxBcmd1bWVudHMgPSBhcmd1bWVudHMubGVuZ3RoIC0gYXJndW1lbnROYW1lcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ3VtZW50TmFtZXMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGFyZ192YWx1ZSA9IGFyZ3VtZW50c1tudW1Qb3NpdGlvbmFsQXJndW1lbnRzICsgaV07CiAgICAgIG5hbWVkQXJndW1lbnRzW25ldyBTeW1ib2woYXJndW1lbnROYW1lc1tpXSldID0gYXJnX3ZhbHVlOwogICAgfQogICAgcmV0dXJuIG5hbWVkQXJndW1lbnRzOwogIH0KCiAgLy8gQ29uc3RydWN0b3IgY2FsbGVkIGZyb20gRXhjZXB0aW9uczo6VGhyb3dCeVR5cGUoa05vU3VjaE1ldGhvZCkgYW5kIGZyb20KICAvLyBfdGhyb3dOZXcgYWJvdmUsIHRha2luZyBhIFR5cGVBcmd1bWVudHMgb2JqZWN0IHJhdGhlciB0aGFuIGFuIHVucGFja2VkIGxpc3QKICAvLyBvZiB0eXBlcywgYXMgd2VsbCBhcyBhIGxpc3Qgb2YgYWxsIGFyZ3VtZW50cyBhbmQgYSBsaXN0IG9mIG5hbWVzLCByYXRoZXIKICAvLyB0aGFuIGEgc2VwYXJhdGUgbGlzdCBvZiBwb3NpdGlvbmFsIGFyZ3VtZW50cyBhbmQgYSBtYXAgb2YgbmFtZWQgYXJndW1lbnRzLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBOb1N1Y2hNZXRob2RFcnJvci5fd2l0aFR5cGUoCiAgICAgIHRoaXMuX3JlY2VpdmVyLAogICAgICBTdHJpbmcgbWVtYmVyTmFtZSwKICAgICAgaW50IGludm9jYXRpb25fdHlwZSwKICAgICAgT2JqZWN0IHR5cGVBcmd1bWVudHMsCiAgICAgIExpc3QgYXJndW1lbnRzLAogICAgICBMaXN0IGFyZ3VtZW50TmFtZXMpCiAgICAgIDogdGhpcy5faW52b2NhdGlvbiA9IG5ldyBfSW52b2NhdGlvbk1pcnJvci5fd2l0aFR5cGUoCiAgICAgICAgICAgIG5ldyBTeW1ib2wobWVtYmVyTmFtZSksCiAgICAgICAgICAgIGludm9jYXRpb25fdHlwZSwKICAgICAgICAgICAgdHlwZUFyZ3VtZW50cyAhPSBudWxsCiAgICAgICAgICAgICAgICAvLyBUT0RPKDMzMDczKTogVXNlIGFjdHVhbCBjb3VudCBvZiB0eXBlIGFyZ3VtZW50cyBpbiBwbGFjZSBvZiAwLgogICAgICAgICAgICAgICAgPyBfSW52b2NhdGlvbk1pcnJvci5fdW5wYWNrVHlwZUFyZ3VtZW50cyh0eXBlQXJndW1lbnRzLCAwKQogICAgICAgICAgICAgICAgOiBudWxsLAogICAgICAgICAgICBhcmd1bWVudE5hbWVzICE9IG51bGwKICAgICAgICAgICAgICAgID8gYXJndW1lbnRzLnN1Ymxpc3QoMCwgYXJndW1lbnRzLmxlbmd0aCAtIGFyZ3VtZW50TmFtZXMubGVuZ3RoKQogICAgICAgICAgICAgICAgOiBhcmd1bWVudHMsCiAgICAgICAgICAgIGFyZ3VtZW50TmFtZXMgIT0gbnVsbAogICAgICAgICAgICAgICAgPyBfTmFtZWRBcmd1bWVudHNNYXAoYXJndW1lbnRzLCBhcmd1bWVudE5hbWVzKQogICAgICAgICAgICAgICAgOiBudWxsKTsKCiAgc3RhdGljIFN0cmluZyBfZXhpc3RpbmdNZXRob2RTaWduYXR1cmUoT2JqZWN0IHJlY2VpdmVyLCBTdHJpbmcgbWV0aG9kTmFtZSwKICAgICAgaW50IGludm9jYXRpb25UeXBlKSBuYXRpdmUgIk5vU3VjaE1ldGhvZEVycm9yX2V4aXN0aW5nTWV0aG9kU2lnbmF0dXJlIjsKCiAgQHBhdGNoCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgLy8gVE9ETyhyZWdpcyk6IFJlbW92ZSB0aGlzIG51bGwgY2hlY2sgb25jZSBkYXJ0MmpzIGlzIHVwZGF0ZWQuCiAgICBpZiAoX2ludm9jYXRpb24gPT0gbnVsbCkgewogICAgICAvLyBVc2UgZGVwcmVjYXRlZCB2ZXJzaW9uIG9mIHRvU3RyaW5nLgogICAgICByZXR1cm4gX3RvU3RyaW5nRGVwcmVjYXRlZCgpOwogICAgfQogICAgU3RyaW5nIG1lbWJlck5hbWUgPQogICAgICAgIGludGVybmFsLlN5bWJvbC5jb21wdXRlVW5tYW5nbGVkTmFtZShfaW52b2NhdGlvbi5tZW1iZXJOYW1lKTsKICAgIHZhciBsZXZlbCA9IChfaW52b2NhdGlvbi5fdHlwZSA+PiBfSW52b2NhdGlvbk1pcnJvci5fTEVWRUxfU0hJRlQpICYKICAgICAgICBfSW52b2NhdGlvbk1pcnJvci5fTEVWRUxfTUFTSzsKICAgIHZhciBraW5kID0gX2ludm9jYXRpb24uX3R5cGUgJiBfSW52b2NhdGlvbk1pcnJvci5fS0lORF9NQVNLOwogICAgaWYgKGtpbmQgPT0gX0ludm9jYXRpb25NaXJyb3IuX0xPQ0FMX1ZBUikgewogICAgICByZXR1cm4gIk5vU3VjaE1ldGhvZEVycm9yOiBDYW5ub3QgYXNzaWduIHRvIGZpbmFsIHZhcmlhYmxlICckbWVtYmVyTmFtZSciOwogICAgfQoKICAgIFN0cmluZ0J1ZmZlciB0eXBlQXJndW1lbnRzQnVmID0gbnVsbDsKICAgIHZhciB0eXBlQXJndW1lbnRzID0gX2ludm9jYXRpb24udHlwZUFyZ3VtZW50czsKICAgIGlmICgodHlwZUFyZ3VtZW50cyAhPSBudWxsKSAmJiAodHlwZUFyZ3VtZW50cy5sZW5ndGggPiAwKSkgewogICAgICB0eXBlQXJndW1lbnRzQnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgICB0eXBlQXJndW1lbnRzQnVmLndyaXRlKCI8Iik7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZUFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgdHlwZUFyZ3VtZW50c0J1Zi53cml0ZSgiLCAiKTsKICAgICAgICB9CiAgICAgICAgdHlwZUFyZ3VtZW50c0J1Zi53cml0ZShFcnJvci5zYWZlVG9TdHJpbmcodHlwZUFyZ3VtZW50c1tpXSkpOwogICAgICB9CiAgICAgIHR5cGVBcmd1bWVudHNCdWYud3JpdGUoIj4iKTsKICAgIH0KICAgIFN0cmluZ0J1ZmZlciBhcmd1bWVudHNCdWYgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICB2YXIgcG9zaXRpb25hbEFyZ3VtZW50cyA9IF9pbnZvY2F0aW9uLnBvc2l0aW9uYWxBcmd1bWVudHM7CiAgICBpbnQgYXJndW1lbnRDb3VudCA9IDA7CiAgICBpZiAocG9zaXRpb25hbEFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGZvciAoOyBhcmd1bWVudENvdW50IDwgcG9zaXRpb25hbEFyZ3VtZW50cy5sZW5ndGg7IGFyZ3VtZW50Q291bnQrKykgewogICAgICAgIGlmIChhcmd1bWVudENvdW50ID4gMCkgewogICAgICAgICAgYXJndW1lbnRzQnVmLndyaXRlKCIsICIpOwogICAgICAgIH0KICAgICAgICBhcmd1bWVudHNCdWYKICAgICAgICAgICAgLndyaXRlKEVycm9yLnNhZmVUb1N0cmluZyhwb3NpdGlvbmFsQXJndW1lbnRzW2FyZ3VtZW50Q291bnRdKSk7CiAgICAgIH0KICAgIH0KICAgIHZhciBuYW1lZEFyZ3VtZW50cyA9IF9pbnZvY2F0aW9uLm5hbWVkQXJndW1lbnRzOwogICAgaWYgKG5hbWVkQXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgbmFtZWRBcmd1bWVudHMuZm9yRWFjaCgoU3ltYm9sIGtleSwgdmFyIHZhbHVlKSB7CiAgICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAwKSB7CiAgICAgICAgICBhcmd1bWVudHNCdWYud3JpdGUoIiwgIik7CiAgICAgICAgfQogICAgICAgIGFyZ3VtZW50c0J1Zi53cml0ZShpbnRlcm5hbC5TeW1ib2wuY29tcHV0ZVVubWFuZ2xlZE5hbWUoa2V5KSk7CiAgICAgICAgYXJndW1lbnRzQnVmLndyaXRlKCI6ICIpOwogICAgICAgIGFyZ3VtZW50c0J1Zi53cml0ZShFcnJvci5zYWZlVG9TdHJpbmcodmFsdWUpKTsKICAgICAgICBhcmd1bWVudENvdW50Kys7CiAgICAgIH0pOwogICAgfQogICAgU3RyaW5nIGV4aXN0aW5nU2lnID0KICAgICAgICBfZXhpc3RpbmdNZXRob2RTaWduYXR1cmUoX3JlY2VpdmVyLCBtZW1iZXJOYW1lLCBfaW52b2NhdGlvbi5fdHlwZSk7CiAgICBTdHJpbmcgYXJnc01zZyA9IGV4aXN0aW5nU2lnICE9IG51bGwgPyAiIHdpdGggbWF0Y2hpbmcgYXJndW1lbnRzIiA6ICIiOwoKICAgIFN0cmluZyBraW5kQnVmOwogICAgaWYgKGtpbmQgPj0gMCAmJiBraW5kIDwgNSkgewogICAgICBraW5kQnVmID0gKGNvbnN0IFsKICAgICAgICAibWV0aG9kIiwKICAgICAgICAiZ2V0dGVyIiwKICAgICAgICAic2V0dGVyIiwKICAgICAgICAiZ2V0dGVyIG9yIHNldHRlciIsCiAgICAgICAgInZhcmlhYmxlIgogICAgICBdKVtraW5kXTsKICAgIH0KCiAgICBTdHJpbmdCdWZmZXIgbXNnQnVmID0gbmV3IFN0cmluZ0J1ZmZlcigiTm9TdWNoTWV0aG9kRXJyb3I6ICIpOwogICAgYm9vbCBpc190eXBlX2NhbGwgPSBmYWxzZTsKICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICAgY2FzZSBfSW52b2NhdGlvbk1pcnJvci5fRFlOQU1JQzoKICAgICAgICB7CiAgICAgICAgICBpZiAoX3JlY2VpdmVyID09IG51bGwpIHsKICAgICAgICAgICAgaWYgKGV4aXN0aW5nU2lnICE9IG51bGwpIHsKICAgICAgICAgICAgICBtc2dCdWYud3JpdGVsbigiVGhlIG51bGwgb2JqZWN0IGRvZXMgbm90IGhhdmUgYSAka2luZEJ1ZiAiCiAgICAgICAgICAgICAgICAgICInJG1lbWJlck5hbWUnJGFyZ3NNc2cuIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgbXNnQnVmLndyaXRlbG4oIlRoZSAka2luZEJ1ZiAnJG1lbWJlck5hbWUnIHdhcyBjYWxsZWQgb24gbnVsbC4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKF9yZWNlaXZlciBpcyBfQ2xvc3VyZSkgewogICAgICAgICAgICAgIG1zZ0J1Zi53cml0ZWxuKCJDbG9zdXJlIGNhbGwgd2l0aCBtaXNtYXRjaGVkIGFyZ3VtZW50czogIgogICAgICAgICAgICAgICAgICAiZnVuY3Rpb24gJyRtZW1iZXJOYW1lJyIpOwogICAgICAgICAgICB9IGVsc2UgaWYgKF9yZWNlaXZlciBpcyBfVHlwZSAmJiBtZW1iZXJOYW1lID09ICJjYWxsIikgewogICAgICAgICAgICAgIGlzX3R5cGVfY2FsbCA9IHRydWU7CiAgICAgICAgICAgICAgU3RyaW5nIG5hbWUgPSBfcmVjZWl2ZXIudG9TdHJpbmcoKTsKICAgICAgICAgICAgICBtc2dCdWYud3JpdGVsbigiQXR0ZW1wdGVkIHRvIHVzZSB0eXBlICckbmFtZScgYXMgYSBmdW5jdGlvbi4gIgogICAgICAgICAgICAgICAgICAiU2luY2UgdHlwZXMgZG8gbm90IGRlZmluZSBhIG1ldGhvZCAnY2FsbCcsIHRoaXMgaXMgbm90ICIKICAgICAgICAgICAgICAgICAgInBvc3NpYmxlLiBEaWQgeW91IGludGVuZCB0byBjYWxsIHRoZSAkbmFtZSBjb25zdHJ1Y3RvciBhbmQgIgogICAgICAgICAgICAgICAgICAiZm9yZ2V0IHRoZSAnbmV3JyBvcGVyYXRvcj8iKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBtc2dCdWYud3JpdGVsbigiQ2xhc3MgJyR7X3JlY2VpdmVyLnJ1bnRpbWVUeXBlfScgaGFzIG5vIGluc3RhbmNlICIKICAgICAgICAgICAgICAgICAgIiRraW5kQnVmICckbWVtYmVyTmFtZSckYXJnc01zZy4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9TVVBFUjoKICAgICAgICB7CiAgICAgICAgICBtc2dCdWYud3JpdGVsbigiU3VwZXIgY2xhc3Mgb2YgY2xhc3MgJyR7X3JlY2VpdmVyLnJ1bnRpbWVUeXBlfScgaGFzICIKICAgICAgICAgICAgICAibm8gaW5zdGFuY2UgJGtpbmRCdWYgJyRtZW1iZXJOYW1lJyRhcmdzTXNnLiIpOwogICAgICAgICAgbWVtYmVyTmFtZSA9ICJzdXBlci4kbWVtYmVyTmFtZSI7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIGNhc2UgX0ludm9jYXRpb25NaXJyb3IuX1NUQVRJQzoKICAgICAgICB7CiAgICAgICAgICBtc2dCdWYud3JpdGVsbigiTm8gc3RhdGljICRraW5kQnVmICckbWVtYmVyTmFtZSckYXJnc01zZyAiCiAgICAgICAgICAgICAgImRlY2xhcmVkIGluIGNsYXNzICckX3JlY2VpdmVyJy4iKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgY2FzZSBfSW52b2NhdGlvbk1pcnJvci5fQ09OU1RSVUNUT1I6CiAgICAgICAgewogICAgICAgICAgbXNnQnVmLndyaXRlbG4oIk5vIGNvbnN0cnVjdG9yICckbWVtYmVyTmFtZSckYXJnc01zZyBkZWNsYXJlZCAiCiAgICAgICAgICAgICAgImluIGNsYXNzICckX3JlY2VpdmVyJy4iKTsKICAgICAgICAgIG1lbWJlck5hbWUgPSAibmV3ICRtZW1iZXJOYW1lIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgY2FzZSBfSW52b2NhdGlvbk1pcnJvci5fVE9QX0xFVkVMOgogICAgICAgIHsKICAgICAgICAgIG1zZ0J1Zi53cml0ZWxuKCJObyB0b3AtbGV2ZWwgJGtpbmRCdWYgJyRtZW1iZXJOYW1lJyRhcmdzTXNnICIKICAgICAgICAgICAgICAiZGVjbGFyZWQuIik7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgaWYgKGxldmVsID09IF9JbnZvY2F0aW9uTWlycm9yLl9UT1BfTEVWRUwpIHsKICAgICAgbXNnQnVmLndyaXRlbG4oIlJlY2VpdmVyOiB0b3AtbGV2ZWwiKTsKICAgIH0gZWxzZSB7CiAgICAgIG1zZ0J1Zi53cml0ZWxuKCJSZWNlaXZlcjogJHtFcnJvci5zYWZlVG9TdHJpbmcoX3JlY2VpdmVyKX0iKTsKICAgIH0KCiAgICBpZiAoa2luZCA9PSBfSW52b2NhdGlvbk1pcnJvci5fTUVUSE9EKSB7CiAgICAgIFN0cmluZyBtID0gaXNfdHlwZV9jYWxsID8gIiRfcmVjZWl2ZXIiIDogIiRtZW1iZXJOYW1lIjsKICAgICAgbXNnQnVmLndyaXRlKCJUcmllZCBjYWxsaW5nOiAkbSIpOwogICAgICBpZiAodHlwZUFyZ3VtZW50c0J1ZiAhPSBudWxsKSB7CiAgICAgICAgbXNnQnVmLndyaXRlKHR5cGVBcmd1bWVudHNCdWYpOwogICAgICB9CiAgICAgIG1zZ0J1Zi53cml0ZSgiKCRhcmd1bWVudHNCdWYpIik7CiAgICB9IGVsc2UgaWYgKGFyZ3VtZW50Q291bnQgPT0gMCkgewogICAgICBtc2dCdWYud3JpdGUoIlRyaWVkIGNhbGxpbmc6ICRtZW1iZXJOYW1lIik7CiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gX0ludm9jYXRpb25NaXJyb3IuX1NFVFRFUikgewogICAgICBtc2dCdWYud3JpdGUoIlRyaWVkIGNhbGxpbmc6ICRtZW1iZXJOYW1lJGFyZ3VtZW50c0J1ZiIpOwogICAgfSBlbHNlIHsKICAgICAgbXNnQnVmLndyaXRlKCJUcmllZCBjYWxsaW5nOiAkbWVtYmVyTmFtZSA9ICRhcmd1bWVudHNCdWYiKTsKICAgIH0KCiAgICBpZiAoZXhpc3RpbmdTaWcgIT0gbnVsbCkgewogICAgICBtc2dCdWYud3JpdGUoIlxuRm91bmQ6ICRtZW1iZXJOYW1lJGV4aXN0aW5nU2lnIik7CiAgICB9CgogICAgcmV0dXJuIG1zZ0J1Zi50b1N0cmluZygpOwogIH0KCiAgLy8gVE9ETyhyZWdpcyk6IFJlbW92ZSB0aGlzIGZ1bmN0aW9uIG9uY2UgZGFydDJqcyBpcyB1cGRhdGVkLgogIFN0cmluZyBfdG9TdHJpbmdEZXByZWNhdGVkKCkgewogICAgdmFyIGxldmVsID0gKF9pbnZvY2F0aW9uX3R5cGUgPj4gX0ludm9jYXRpb25NaXJyb3IuX0xFVkVMX1NISUZUKSAmCiAgICAgICAgX0ludm9jYXRpb25NaXJyb3IuX0xFVkVMX01BU0s7CiAgICB2YXIgdHlwZSA9IF9pbnZvY2F0aW9uX3R5cGUgJiBfSW52b2NhdGlvbk1pcnJvci5fS0lORF9NQVNLOwogICAgU3RyaW5nIG1lbWJlck5hbWUgPSAoX21lbWJlck5hbWUgPT0gbnVsbCkKICAgICAgICA/ICIiCiAgICAgICAgOiBpbnRlcm5hbC5TeW1ib2wuY29tcHV0ZVVubWFuZ2xlZE5hbWUoX21lbWJlck5hbWUpOwoKICAgIGlmICh0eXBlID09IF9JbnZvY2F0aW9uTWlycm9yLl9MT0NBTF9WQVIpIHsKICAgICAgcmV0dXJuICJOb1N1Y2hNZXRob2RFcnJvcjogQ2Fubm90IGFzc2lnbiB0byBmaW5hbCB2YXJpYWJsZSAnJG1lbWJlck5hbWUnIjsKICAgIH0KCiAgICBTdHJpbmdCdWZmZXIgYXJndW1lbnRzID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgaW50IGFyZ3VtZW50Q291bnQgPSAwOwogICAgaWYgKF9hcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBmb3IgKDsgYXJndW1lbnRDb3VudCA8IF9hcmd1bWVudHMubGVuZ3RoOyBhcmd1bWVudENvdW50KyspIHsKICAgICAgICBpZiAoYXJndW1lbnRDb3VudCA+IDApIHsKICAgICAgICAgIGFyZ3VtZW50cy53cml0ZSgiLCAiKTsKICAgICAgICB9CiAgICAgICAgYXJndW1lbnRzLndyaXRlKEVycm9yLnNhZmVUb1N0cmluZyhfYXJndW1lbnRzW2FyZ3VtZW50Q291bnRdKSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChfbmFtZWRBcmd1bWVudHMgIT0gbnVsbCkgewogICAgICBfbmFtZWRBcmd1bWVudHMuZm9yRWFjaCgoU3ltYm9sIGtleSwgdmFyIHZhbHVlKSB7CiAgICAgICAgaWYgKGFyZ3VtZW50Q291bnQgPiAwKSB7CiAgICAgICAgICBhcmd1bWVudHMud3JpdGUoIiwgIik7CiAgICAgICAgfQogICAgICAgIGFyZ3VtZW50cy53cml0ZShpbnRlcm5hbC5TeW1ib2wuY29tcHV0ZVVubWFuZ2xlZE5hbWUoa2V5KSk7CiAgICAgICAgYXJndW1lbnRzLndyaXRlKCI6ICIpOwogICAgICAgIGFyZ3VtZW50cy53cml0ZShFcnJvci5zYWZlVG9TdHJpbmcodmFsdWUpKTsKICAgICAgICBhcmd1bWVudENvdW50Kys7CiAgICAgIH0pOwogICAgfQogICAgYm9vbCBhcmdzX21pc21hdGNoID0gX2V4aXN0aW5nQXJndW1lbnROYW1lcyAhPSBudWxsOwogICAgU3RyaW5nIGFyZ3NfbWVzc2FnZSA9IGFyZ3NfbWlzbWF0Y2ggPyAiIHdpdGggbWF0Y2hpbmcgYXJndW1lbnRzIiA6ICIiOwoKICAgIFN0cmluZyB0eXBlX3N0cjsKICAgIGlmICh0eXBlID49IDAgJiYgdHlwZSA8IDUpIHsKICAgICAgdHlwZV9zdHIgPSAoY29uc3QgWwogICAgICAgICJtZXRob2QiLAogICAgICAgICJnZXR0ZXIiLAogICAgICAgICJzZXR0ZXIiLAogICAgICAgICJnZXR0ZXIgb3Igc2V0dGVyIiwKICAgICAgICAidmFyaWFibGUiCiAgICAgIF0pW3R5cGVdOwogICAgfQoKICAgIFN0cmluZ0J1ZmZlciBtc2dfYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigiTm9TdWNoTWV0aG9kRXJyb3I6ICIpOwogICAgYm9vbCBpc190eXBlX2NhbGwgPSBmYWxzZTsKICAgIHN3aXRjaCAobGV2ZWwpIHsKICAgICAgY2FzZSBfSW52b2NhdGlvbk1pcnJvci5fRFlOQU1JQzoKICAgICAgICB7CiAgICAgICAgICBpZiAoX3JlY2VpdmVyID09IG51bGwpIHsKICAgICAgICAgICAgaWYgKGFyZ3NfbWlzbWF0Y2gpIHsKICAgICAgICAgICAgICBtc2dfYnVmLndyaXRlbG4oIlRoZSBudWxsIG9iamVjdCBkb2VzIG5vdCBoYXZlIGEgJHR5cGVfc3RyICIKICAgICAgICAgICAgICAgICAgIickbWVtYmVyTmFtZSckYXJnc19tZXNzYWdlLiIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIG1zZ19idWYKICAgICAgICAgICAgICAgICAgLndyaXRlbG4oIlRoZSAkdHlwZV9zdHIgJyRtZW1iZXJOYW1lJyB3YXMgY2FsbGVkIG9uIG51bGwuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChfcmVjZWl2ZXIgaXMgX0Nsb3N1cmUpIHsKICAgICAgICAgICAgICBtc2dfYnVmLndyaXRlbG4oIkNsb3N1cmUgY2FsbCB3aXRoIG1pc21hdGNoZWQgYXJndW1lbnRzOiAiCiAgICAgICAgICAgICAgICAgICJmdW5jdGlvbiAnJG1lbWJlck5hbWUnIik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoX3JlY2VpdmVyIGlzIF9UeXBlICYmIG1lbWJlck5hbWUgPT0gImNhbGwiKSB7CiAgICAgICAgICAgICAgaXNfdHlwZV9jYWxsID0gdHJ1ZTsKICAgICAgICAgICAgICBTdHJpbmcgbmFtZSA9IF9yZWNlaXZlci50b1N0cmluZygpOwogICAgICAgICAgICAgIG1zZ19idWYud3JpdGVsbigiQXR0ZW1wdGVkIHRvIHVzZSB0eXBlICckbmFtZScgYXMgYSBmdW5jdGlvbi4gIgogICAgICAgICAgICAgICAgICAiU2luY2UgdHlwZXMgZG8gbm90IGRlZmluZSBhIG1ldGhvZCAnY2FsbCcsIHRoaXMgaXMgbm90ICIKICAgICAgICAgICAgICAgICAgInBvc3NpYmxlLiBEaWQgeW91IGludGVuZCB0byBjYWxsIHRoZSAkbmFtZSBjb25zdHJ1Y3RvciBhbmQgIgogICAgICAgICAgICAgICAgICAiZm9yZ2V0IHRoZSAnbmV3JyBvcGVyYXRvcj8iKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBtc2dfYnVmCiAgICAgICAgICAgICAgICAgIC53cml0ZWxuKCJDbGFzcyAnJHtfcmVjZWl2ZXIucnVudGltZVR5cGV9JyBoYXMgbm8gaW5zdGFuY2UgIgogICAgICAgICAgICAgICAgICAgICAgIiR0eXBlX3N0ciAnJG1lbWJlck5hbWUnJGFyZ3NfbWVzc2FnZS4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9TVVBFUjoKICAgICAgICB7CiAgICAgICAgICBtc2dfYnVmLndyaXRlbG4oIlN1cGVyIGNsYXNzIG9mIGNsYXNzICcke19yZWNlaXZlci5ydW50aW1lVHlwZX0nIGhhcyAiCiAgICAgICAgICAgICAgIm5vIGluc3RhbmNlICR0eXBlX3N0ciAnJG1lbWJlck5hbWUnJGFyZ3NfbWVzc2FnZS4iKTsKICAgICAgICAgIG1lbWJlck5hbWUgPSAic3VwZXIuJG1lbWJlck5hbWUiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9TVEFUSUM6CiAgICAgICAgewogICAgICAgICAgbXNnX2J1Zi53cml0ZWxuKCJObyBzdGF0aWMgJHR5cGVfc3RyICckbWVtYmVyTmFtZSckYXJnc19tZXNzYWdlICIKICAgICAgICAgICAgICAiZGVjbGFyZWQgaW4gY2xhc3MgJyRfcmVjZWl2ZXInLiIpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9DT05TVFJVQ1RPUjoKICAgICAgICB7CiAgICAgICAgICBtc2dfYnVmLndyaXRlbG4oIk5vIGNvbnN0cnVjdG9yICckbWVtYmVyTmFtZSckYXJnc19tZXNzYWdlIGRlY2xhcmVkICIKICAgICAgICAgICAgICAiaW4gY2xhc3MgJyRfcmVjZWl2ZXInLiIpOwogICAgICAgICAgbWVtYmVyTmFtZSA9ICJuZXcgJG1lbWJlck5hbWUiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICBjYXNlIF9JbnZvY2F0aW9uTWlycm9yLl9UT1BfTEVWRUw6CiAgICAgICAgewogICAgICAgICAgbXNnX2J1Zi53cml0ZWxuKCJObyB0b3AtbGV2ZWwgJHR5cGVfc3RyICckbWVtYmVyTmFtZSckYXJnc19tZXNzYWdlICIKICAgICAgICAgICAgICAiZGVjbGFyZWQuIik7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgaWYgKGxldmVsID09IF9JbnZvY2F0aW9uTWlycm9yLl9UT1BfTEVWRUwpIHsKICAgICAgbXNnX2J1Zi53cml0ZWxuKCJSZWNlaXZlcjogdG9wLWxldmVsIik7CiAgICB9IGVsc2UgewogICAgICBtc2dfYnVmLndyaXRlbG4oIlJlY2VpdmVyOiAke0Vycm9yLnNhZmVUb1N0cmluZyhfcmVjZWl2ZXIpfSIpOwogICAgfQoKICAgIGlmICh0eXBlID09IF9JbnZvY2F0aW9uTWlycm9yLl9NRVRIT0QpIHsKICAgICAgU3RyaW5nIG0gPSBpc190eXBlX2NhbGwgPyAiJF9yZWNlaXZlciIgOiAiJG1lbWJlck5hbWUiOwogICAgICBtc2dfYnVmLndyaXRlKCJUcmllZCBjYWxsaW5nOiAkbSgkYXJndW1lbnRzKSIpOwogICAgfSBlbHNlIGlmIChhcmd1bWVudENvdW50ID09IDApIHsKICAgICAgbXNnX2J1Zi53cml0ZSgiVHJpZWQgY2FsbGluZzogJG1lbWJlck5hbWUiKTsKICAgIH0gZWxzZSBpZiAodHlwZSA9PSBfSW52b2NhdGlvbk1pcnJvci5fU0VUVEVSKSB7CiAgICAgIG1zZ19idWYud3JpdGUoIlRyaWVkIGNhbGxpbmc6ICRtZW1iZXJOYW1lJGFyZ3VtZW50cyIpOwogICAgfSBlbHNlIHsKICAgICAgbXNnX2J1Zi53cml0ZSgiVHJpZWQgY2FsbGluZzogJG1lbWJlck5hbWUgPSAkYXJndW1lbnRzIik7CiAgICB9CgogICAgaWYgKGFyZ3NfbWlzbWF0Y2gpIHsKICAgICAgU3RyaW5nQnVmZmVyIGZvcm1hbFBhcmFtZXRlcnMgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2V4aXN0aW5nQXJndW1lbnROYW1lcy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChpID4gMCkgewogICAgICAgICAgZm9ybWFsUGFyYW1ldGVycy53cml0ZSgiLCAiKTsKICAgICAgICB9CiAgICAgICAgZm9ybWFsUGFyYW1ldGVycy53cml0ZShfZXhpc3RpbmdBcmd1bWVudE5hbWVzW2ldKTsKICAgICAgfQogICAgICBtc2dfYnVmLndyaXRlKCJcbkZvdW5kOiAkbWVtYmVyTmFtZSgkZm9ybWFsUGFyYW1ldGVycykiKTsKICAgIH0KCiAgICByZXR1cm4gbXNnX2J1Zi50b1N0cmluZygpOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfQ29t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bWF0Y2ggdXAuCiAgICAvLyBUT0RPKGxybik6IFNob3VsZCB3ZT8gV2h5IG5vdCB0aGUgc2FtZSBiZWxvdyBmb3IgdGhlIHVuYXJ5IGNhc2U/CiAgICByZXR1cm4gKGVycm9ySGFuZGxlciBhcyBkeW5hbWljKShlcnJvciwgc3RhY2tUcmFjZSk7CiAgfSBlbHNlIHsKICAgIFpvbmVVbmFyeUNhbGxiYWNrIHVuYXJ5RXJyb3JIYW5kbGVyID0gZXJyb3JIYW5kbGVyOwogICAgcmV0dXJuIHVuYXJ5RXJyb3JIYW5kbGVyKGVycm9yKTsKICB9Cn0KFQBOTjwBFAEVQkFHSyVIOQs4JQQCARtkYXJ0OmFzeW5jL2FzeW5jX2Vycm9yLmRhcnQ2b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbGxlY3Rpb24vY29sbGVjdGlvbi5kYXJ0gzMvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIENsYXNzZXMgYW5kIHV0aWxpdGllcyB0aGF0IHN1cHBsZW1lbnQgdGhlIGNvbGxlY3Rpb24gc3VwcG9ydCBpbiBkYXJ0OmNvcmUuCi8vLwovLy8gVG8gdXNlIHRoaXMgbGlicmFyeSBpbiB5b3VyIGNvZGU6Ci8vLwovLy8gICAgIGltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKLy8vCi8vLyB7QGNhdGVnb3J5IENvcmV9CmxpYnJhcnkgZGFydC5jb2xsZWN0aW9uOwoKaW1wb3J0ICdkYXJ0Ol9pbnRlcm5hbCcgaGlkZSBTeW1ib2w7CmltcG9ydCAnZGFydDptYXRoJyBzaG93IFJhbmRvbTsgLy8gVXNlZCBieSBMaXN0TWl4aW4uc2h1ZmZsZS4KCnBhcnQgJ2NvbGxlY3Rpb25zLmRhcnQnOwpwYXJ0ICdoYXNoX21hcC5kYXJ0JzsKcGFydCAnaGFzaF9zZXQuZGFydCc7CnBhcnQgJ2l0ZXJhYmxlLmRhcnQnOwpwYXJ0ICdpdGVyYXRvci5kYXJ0JzsKcGFydCAnbGlua2VkX2hhc2hfbWFwLmRhcnQnOwpwYXJ0ICdsaW5rZWRfaGFzaF9zZXQuZGFydCc7CnBhcnQgJ2xpbmtlZF9saXN0LmRhcnQnOwpwYXJ0ICdsaXN0LmRhcnQnOwpwYXJ0ICdtYXBzLmRhcnQnOwpwYXJ0ICdxdWV1ZS5kYXJ0JzsKcGFydCAnc2V0LmRhcnQnOwpwYXJ0ICdzcGxheV90cmVlLmRhcnQnOwofAE5OPAFPBCYEIgQVGQElPgEZFhYWFh0dGRISExEYAQ9kYXJ0OmNvbGxlY3Rpb240b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbGxlY3Rpb24vaGFzaF9tYXAuZGFydJkzLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKLy8vIERlZmF1bHQgZnVuY3Rpb24gZm9yIGVxdWFsaXR5IGNvbXBhcmlzb24gaW4gY3VzdG9taXplZCBIYXNoTWFwcwpib29sIF9kZWZhdWx0RXF1YWxzKGEsIGIpID0+IGEgPT0gYjsKCi8vLyBEZWZhdWx0IGZ1bmN0aW9uIGZvciBoYXNoLWNvZGUgY29tcHV0YXRpb24gaW4gY3VzdG9taXplZCBIYXNoTWFwcwppbnQgX2RlZmF1bHRIYXNoQ29kZShhKSA9PiBhLmhhc2hDb2RlOwoKLy8vIFR5cGUgb2YgY3VzdG9tIGVxdWFsaXR5IGZ1bmN0aW9uCnR5cGVkZWYgX0VxdWFsaXR5PEs+ID0gYm9vbCBGdW5jdGlvbihLIGEsIEsgYik7CgovLy8gVHlwZSBvZiBjdXN0b20gaGFzaCBjb2RlIGZ1bmN0aW9uLgp0eXBlZGVmIF9IYXNoZXI8Sz4gPSBpbnQgRnVuY3Rpb24oSyBvYmplY3QpOwoKLy8vIEEgaGFzaC10YWJsZSBiYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBbTWFwXS4KLy8vCi8vLyBUaGUga2V5cyBvZiBhIGBIYXNoTWFwYCBtdXN0IGhhdmUgY29uc2lzdGVudCBbT2JqZWN0Lj09XQovLy8gYW5kIFtPYmplY3QuaGFzaENvZGVdIGltcGxlbWVudGF0aW9ucy4gVGhpcyBtZWFucyB0aGF0IHRoZSBgPT1gIG9wZXJhdG9yCi8vLyBtdXN0IGRlZmluZSBhIHN0YWJsZSBlcXVpdmFsZW5jZSByZWxhdGlvbiBvbiB0aGUga2V5cyAocmVmbGV4aXZlLAovLy8gc3ltbWV0cmljLCB0cmFuc2l0aXZlLCBhbmQgY29uc2lzdGVudCBvdmVyIHRpbWUpLCBhbmQgdGhhdCBgaGFzaENvZGVgCi8vLyBtdXN0IGJlIHRoZSBzYW1lIGZvciBvYmplY3RzIHRoYXQgYXJlIGNvbnNpZGVyZWQgZXF1YWwgYnkgYD09YC4KLy8vCi8vLyBUaGUgbWFwIGFsbG93cyBgbnVsbGAgYXMgYSBrZXkuCi8vLwovLy8gSXRlcmF0aW5nIHRoZSBtYXAncyBrZXlzLCB2YWx1ZXMgb3IgZW50cmllcyAodGhyb3VnaCBbZm9yRWFjaF0pCi8vLyBtYXkgaGFwcGVuIGluIGFueSBvcmRlci4KLy8vIFRoZSBpdGVyYXRpb24gb3JkZXIgb25seSBjaGFuZ2VzIHdoZW4gdGhlIG1hcCBpcyBtb2RpZmllZC4KLy8vIFZhbHVlcyBhcmUgaXRlcmF0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlaXIgYXNzb2NpYXRlZCBrZXlzLAovLy8gc28gaXRlcmF0aW5nIHRoZSBba2V5c10gYW5kIFt2YWx1ZXNdIGluIHBhcmFsbGVsCi8vLyB3aWxsIGdpdmUgbWF0Y2hpbmcga2V5IGFuZCB2YWx1ZSBwYWlycy4KYWJzdHJhY3QgY2xhc3MgSGFzaE1hcDxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgLy8vIENyZWF0ZXMgYW4gdW5vcmRlcmVkIGhhc2gtdGFibGUgYmFzZWQgW01hcF0uCiAgLy8vCiAgLy8vIFRoZSBjcmVhdGVkIG1hcCBpcyBub3Qgb3JkZXJlZCBpbiBhbnkgd2F5LiBXaGVuIGl0ZXJhdGluZyB0aGUga2V5cyBvcgogIC8vLyB2YWx1ZXMsIHRoZSBpdGVyYXRpb24gb3JkZXIgaXMgdW5zcGVjaWZpZWQgZXhjZXB0IHRoYXQgaXQgd2lsbCBzdGF5IHRoZQogIC8vLyBzYW1lIGFzIGxvbmcgYXMgdGhlIG1hcCBpc24ndCBjaGFuZ2VkLgogIC8vLwogIC8vLyBJZiBbZXF1YWxzXSBpcyBwcm92aWRlZCwgaXQgaXMgdXNlZCB0byBjb21wYXJlIHRoZSBrZXlzIGluIHRoZSB0YWJsZSB3aXRoCiAgLy8vIG5ldyBrZXlzLiBJZiBbZXF1YWxzXSBpcyBvbWl0dGVkLCB0aGUga2V5J3Mgb3duIFtPYmplY3QuPT1dIGlzIHVzZWQKICAvLy8gaW5zdGVhZC4KICAvLy8KICAvLy8gU2ltaWxhciwgaWYgW2hhc2hDb2RlXSBpcyBwcm92aWRlZCwgaXQgaXMgdXNlZCB0byBwcm9kdWNlIGEgaGFzaCB2YWx1ZQogIC8vLyBmb3Iga2V5cyBpbiBvcmRlciB0byBwbGFjZSB0aGVtIGluIHRoZSBoYXNoIHRhYmxlLiBJZiBpdCBpcyBvbWl0dGVkLCB0aGUKICAvLy8ga2V5J3Mgb3duIFtPYmplY3QuaGFzaENvZGVdIGlzIHVzZWQuCiAgLy8vCiAgLy8vIElmIHVzaW5nIG1ldGhvZHMgbGlrZSBbb3BlcmF0b3IgW11dLCBbcmVtb3ZlXSBhbmQgW2NvbnRhaW5zS2V5XSB0b2dldGhlcgogIC8vLyB3aXRoIGEgY3VzdG9tIGVxdWFsaXR5IGFuZCBoYXNoY29kZSwgYW4gZXh0cmEgYGlzVmFsaWRLZXlgIGZ1bmN0aW9uCiAgLy8vIGNhbiBiZSBzdXBwbGllZC4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgW2VxdWFsc10gb3IKICAvLy8gW2hhc2hDb2RlXSB3aXRoIGFuIGFyZ3VtZW50IHRoYXQgbWF5IG5vdCBiZSBhIFtLXSBpbnN0YW5jZSwgYW5kIGlmIHRoZQogIC8vLyBjYWxsIHJldHVybnMgZmFsc2UsIHRoZSBrZXkgaXMgYXNzdW1lZCB0byBub3QgYmUgaW4gdGhlIHNldC4KICAvLy8gVGhlIFtpc1ZhbGlkS2V5XSBmdW5jdGlvbiBkZWZhdWx0cyB0byBqdXN0IHRlc3RpbmcgaWYgdGhlIG9iamVjdCBpcyBhCiAgLy8vIFtLXSBpbnN0YW5jZS4KICAvLy8KICAvLy8gRXhhbXBsZToKICAvLy8KICAvLy8gICAgIG5ldyBIYXNoTWFwPGludCxpbnQ+KGVxdWFsczogKGludCBhLCBpbnQgYikgPT4gKGIgLSBhKSAlIDUgPT0gMCwKICAvLy8gICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiAoaW50IGUpID0+IGUgJSA1KQogIC8vLwogIC8vLyBUaGlzIGV4YW1wbGUgbWFwIGRvZXMgbm90IG5lZWQgYW4gYGlzVmFsaWRLZXlgIGZ1bmN0aW9uIHRvIGJlIHBhc3NlZC4KICAvLy8gVGhlIGRlZmF1bHQgZnVuY3Rpb24gYWNjZXB0cyBvbmx5IGBpbnRgIHZhbHVlcywgd2hpY2ggY2FuIHNhZmVseSBiZQogIC8vLyBwYXNzZWQgdG8gYm90aCB0aGUgYGVxdWFsc2AgYW5kIGBoYXNoQ29kZWAgZnVuY3Rpb25zLgogIC8vLwogIC8vLyBJZiBuZWl0aGVyIGBlcXVhbHNgLCBgaGFzaENvZGVgLCBub3IgYGlzVmFsaWRLZXlgIGlzIHByb3ZpZGVkLAogIC8vLyB0aGUgZGVmYXVsdCBgaXNWYWxpZEtleWAgaW5zdGVhZCBhY2NlcHRzIGFsbCBrZXlzLgogIC8vLyBUaGUgZGVmYXVsdCBlcXVhbGl0eSBhbmQgaGFzaGNvZGUgb3BlcmF0aW9ucyBhcmUgYXNzdW1lZCB0byB3b3JrIG9uIGFsbAogIC8vLyBvYmplY3RzLgogIC8vLwogIC8vLyBMaWtld2lzZSwgaWYgYGVxdWFsc2AgaXMgW2lkZW50aWNhbF0sIGBoYXNoQ29kZWAgaXMgW2lkZW50aXR5SGFzaENvZGVdCiAgLy8vIGFuZCBgaXNWYWxpZEtleWAgaXMgb21pdHRlZCwgdGhlIHJlc3VsdGluZyBtYXAgaXMgaWRlbnRpdHkgYmFzZWQsCiAgLy8vIGFuZCB0aGUgYGlzVmFsaWRLZXlgIGRlZmF1bHRzIHRvIGFjY2VwdGluZyBhbGwga2V5cy4KICAvLy8gU3VjaCBhIG1hcCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSB1c2luZyBbSGFzaE1hcC5pZGVudGl0eV0uCiAgLy8vCiAgLy8vIFRoZSB1c2VkIGBlcXVhbHNgIGFuZCBgaGFzaENvZGVgIG1ldGhvZCBzaG91bGQgYWx3YXlzIGJlIGNvbnNpc3RlbnQsCiAgLy8vIHNvIHRoYXQgaWYgYGVxdWFscyhhLCBiKWAgdGhlbiBgaGFzaENvZGUoYSkgPT0gaGFzaENvZGUoYilgLiBUaGUgaGFzaAogIC8vLyBvZiBhbiBvYmplY3QsIG9yIHdoYXQgaXQgY29tcGFyZXMgZXF1YWwgdG8sIHNob3VsZCBub3QgY2hhbmdlIHdoaWxlIHRoZQogIC8vLyBvYmplY3QgaXMgYSBrZXkgaW4gdGhlIG1hcC4gSWYgaXQgZG9lcyBjaGFuZ2UsIHRoZSByZXN1bHQgaXMKICAvLy8gdW5wcmVkaWN0YWJsZS4KICAvLy8KICAvLy8gSWYgeW91IHN1cHBseSBvbmUgb2YgW2VxdWFsc10gYW5kIFtoYXNoQ29kZV0sCiAgLy8vIHlvdSBzaG91bGQgZ2VuZXJhbGx5IGFsc28gdG8gc3VwcGx5IHRoZSBvdGhlci4KICBleHRlcm5hbCBmYWN0b3J5IEhhc2hNYXAoCiAgICAgIHtib29sIGVxdWFscyhLIGtleTEsIEsga2V5MiksCiAgICAgIGludCBoYXNoQ29kZShLIGtleSksCiAgICAgIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpfSk7CgogIC8vLyBDcmVhdGVzIGFuIHVub3JkZXJlZCBpZGVudGl0eS1iYXNlZCBtYXAuCiAgLy8vCiAgLy8vIEVmZmVjdGl2ZWx5IGEgc2hvcnRoYW5kIGZvcjoKICAvLy8KICAvLy8gICAgIG5ldyBIYXNoTWFwPEssIFY+KGVxdWFsczogaWRlbnRpY2FsLAogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgaGFzaENvZGU6IGlkZW50aXR5SGFzaENvZGUpCiAgZXh0ZXJuYWwgZmFjdG9yeSBIYXNoTWFwLmlkZW50aXR5KCk7CgogIC8vLyBDcmVhdGVzIGEgW0hhc2hNYXBdIHRoYXQgY29udGFpbnMgYWxsIGtleS92YWx1ZSBwYWlycyBvZiBbb3RoZXJdLgogIC8vLwogIC8vLyBUaGUga2V5cyBtdXN0IGFsbCBiZSBpbnN0YW5jZXMgb2YgW0tdIGFuZCB0aGUgdmFsdWVzIG9mIFtWXS4KICAvLy8gVGhlIFtvdGhlcl0gbWFwIGl0c2VsZiBjYW4gaGF2ZSBhbnkgdHlwZS4KICBmYWN0b3J5IEhhc2hNYXAuZnJvbShNYXAgb3RoZXIpIHsKICAgIE1hcDxLLCBWPiByZXN1bHQgPSBIYXNoTWFwPEssIFY+KCk7CiAgICBvdGhlci5mb3JFYWNoKChrLCB2KSB7CiAgICAgIHJlc3VsdFtrXSA9IHY7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIFtIYXNoTWFwXSB0aGF0IGNvbnRhaW5zIGFsbCBrZXkvdmFsdWUgcGFpcnMgb2YgW290aGVyXS4KICBmYWN0b3J5IEhhc2hNYXAub2YoTWFwPEssIFY+IG90aGVyKSA9PiBIYXNoTWFwPEssIFY+KCkuLmFkZEFsbChvdGhlcik7CgogIC8vLyBDcmVhdGVzIGEgW0hhc2hNYXBdIHdoZXJlIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNvbXB1dGVkIGZyb20gdGhlCiAgLy8vIFtpdGVyYWJsZV0uCiAgLy8vCiAgLy8vIEZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIFtpdGVyYWJsZV0gdGhpcyBjb25zdHJ1Y3RvciBjb21wdXRlcyBhIGtleS92YWx1ZQogIC8vLyBwYWlyLCBieSBhcHBseWluZyBba2V5XSBhbmQgW3ZhbHVlXSByZXNwZWN0aXZlbHkuCiAgLy8vCiAgLy8vIFRoZSBrZXlzIG9mIHRoZSBrZXkvdmFsdWUgcGFpcnMgZG8gbm90IG5lZWQgdG8gYmUgdW5pcXVlLiBUaGUgbGFzdAogIC8vLyBvY2N1cnJlbmNlIG9mIGEga2V5IHdpbGwgc2ltcGx5IG92ZXJ3cml0ZSBhbnkgcHJldmlvdXMgdmFsdWUuCiAgLy8vCiAgLy8vIElmIG5vIHZhbHVlcyBhcmUgc3BlY2lmaWVkIGZvciBba2V5XSBhbmQgW3ZhbHVlXSB0aGUgZGVmYXVsdCBpcyB0aGUKICAvLy8gaWRlbnRpdHkgZnVuY3Rpb24uCiAgZmFjdG9yeSBIYXNoTWFwLmZyb21JdGVyYWJsZShJdGVyYWJsZSBpdGVyYWJsZSwKICAgICAge0sga2V5KGVsZW1lbnQpLCBWIHZhbHVlKGVsZW1lbnQpfSkgewogICAgTWFwPEssIFY+IG1hcCA9IEhhc2hNYXA8SywgVj4oKTsKICAgIE1hcEJhc2UuX2ZpbGxNYXBXaXRoTWFwcGVkSXRlcmFibGUobWFwLCBpdGVyYWJsZSwga2V5LCB2YWx1ZSk7CiAgICByZXR1cm4gbWFwOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBbSGFzaE1hcF0gYXNzb2NpYXRpbmcgdGhlIGdpdmVuIFtrZXlzXSB0byBbdmFsdWVzXS4KICAvLy8KICAvLy8gVGhpcyBjb25zdHJ1Y3RvciBpdGVyYXRlcyBvdmVyIFtrZXlzXSBhbmQgW3ZhbHVlc10gYW5kIG1hcHMgZWFjaCBlbGVtZW50CiAgLy8vIG9mIFtrZXlzXSB0byB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIFt2YWx1ZXNdLgogIC8vLwogIC8vLyBJZiBba2V5c10gY29udGFpbnMgdGhlIHNhbWUgb2JqZWN0IG11bHRpcGxlIHRpbWVzLCB0aGUgbGFzdCBvY2N1cnJlbmNlCiAgLy8vIG92ZXJ3cml0ZXMgdGhlIHByZXZpb3VzIHZhbHVlLgogIC8vLwogIC8vLyBJdCBpcyBhbiBlcnJvciBpZiB0aGUgdHdvIFtJdGVyYWJsZV1zIGRvbid0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLgogIGZhY3RvcnkgSGFzaE1hcC5mcm9tSXRlcmFibGVzKEl0ZXJhYmxlPEs+IGtleXMsIEl0ZXJhYmxlPFY+IHZhbHVlcykgewogICAgTWFwPEssIFY+IG1hcCA9IEhhc2hNYXA8SywgVj4oKTsKICAgIE1hcEJhc2UuX2ZpbGxNYXBXaXRoSXRlcmFibGVzKG1hcCwga2V5cywgdmFsdWVzKTsKICAgIHJldHVybiBtYXA7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIFtIYXNoTWFwXSBjb250YWluaW5nIHRoZSBlbnRyaWVzIG9mIFtlbnRyaWVzXS4KICAvLy8KICAvLy8gUmV0dXJucyBhIG5ldyBgSGFzaE1hcDxLLCBWPmAgd2hlcmUgYWxsIGVudHJpZXMgb2YgW2VudHJpZXNdCiAgLy8vIGhhdmUgYmVlbiBhZGRlZCBpbiBpdGVyYXRpb24gb3JkZXIuCiAgLy8vCiAgLy8vIElmIG11bHRpcGxlIFtlbnRyaWVzXSBoYXZlIHRoZSBzYW1lIGtleSwKICAvLy8gbGF0ZXIgb2NjdXJyZW5jZXMgb3ZlcndyaXRlIHRoZSBlYXJsaWVyIG9uZXMuCiAgQFNpbmNlKCIyLjEiKQogIGZhY3RvcnkgSGFzaE1hcC5mcm9tRW50cmllcyhJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZW50cmllcykgPT4KICAgICAgSGFzaE1hcDxLLCBWPigpLi5hZGRFbnRyaWVzKGVudHJpZXMpOwp9CoCeAE5OPAEZAUQlAUYnASUwASctATAEPU1GSkQEJAREHT9ENSw0MwZMTi0GUEoPBk1PKwZPSkpNQ0wUBg8GSzsGTEo8BkU5Tg8GTUg7QwZLTE5DFQY0NRwkGycBLwYjBi84JwFIBkMwJCgbFQgTBAFISQFKEgZPOAZJRAZKGTIsJUMQBAFEBk86Bk0lBkhIJTYQBAE/BkMqBi80EEMsAgEdZGFydDpjb2xsZWN0aW9uL2hhc2hfbWFwLmRhcnQ2b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbGxlY3Rpb24vc3BsYXlfdHJlZS5kYXJ0wABnZC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29sbGVjdGlvbjsKCnR5cGVkZWYgX1ByZWRpY2F0ZTxUPiA9IGJvb2wgRnVuY3Rpb24oVCB2YWx1ZSk7CgovLy8gQSBub2RlIGluIGEgc3BsYXkgdHJlZS4gSXQgaG9sZHMgdGhlIHNvcnRpbmcga2V5IGFuZCB0aGUgbGVmdAovLy8gYW5kIHJpZ2h0IGNoaWxkcmVuIGluIHRoZSB0cmVlLgpjbGFzcyBfU3BsYXlUcmVlTm9kZTxLPiB7CiAgZmluYWwgSyBrZXk7CiAgX1NwbGF5VHJlZU5vZGU8Sz4gbGVmdDsKICBfU3BsYXlUcmVlTm9kZTxLPiByaWdodDsKCiAgX1NwbGF5VHJlZU5vZGUodGhpcy5rZXkpOwp9CgovLy8gQSBub2RlIGluIGEgc3BsYXkgdHJlZSBiYXNlZCBtYXAuCi8vLwovLy8gQSBbX1NwbGF5VHJlZU5vZGVdIHRoYXQgYWxzbyBjb250YWlucyBhIHZhbHVlCmNsYXNzIF9TcGxheVRyZWVNYXBOb2RlPEssIFY+IGV4dGVuZHMgX1NwbGF5VHJlZU5vZGU8Sz4gewogIFYgdmFsdWU7CiAgX1NwbGF5VHJlZU1hcE5vZGUoSyBrZXksIHRoaXMudmFsdWUpIDogc3VwZXIoa2V5KTsKfQoKLy8vIEEgc3BsYXkgdHJlZSBpcyBhIHNlbGYtYmFsYW5jaW5nIGJpbmFyeSBzZWFyY2ggdHJlZS4KLy8vCi8vLyBJdCBoYXMgdGhlIGFkZGl0aW9uYWwgcHJvcGVydHkgdGhhdCByZWNlbnRseSBhY2Nlc3NlZCBlbGVtZW50cwovLy8gYXJlIHF1aWNrIHRvIGFjY2VzcyBhZ2Fpbi4KLy8vIEl0IHBlcmZvcm1zIGJhc2ljIG9wZXJhdGlvbnMgc3VjaCBhcyBpbnNlcnRpb24sIGxvb2stdXAgYW5kCi8vLyByZW1vdmFsLCBpbiBPKGxvZyhuKSkgYW1vcnRpemVkIHRpbWUuCmFic3RyYWN0IGNsYXNzIF9TcGxheVRyZWU8SywgTm9kZSBleHRlbmRzIF9TcGxheVRyZWVOb2RlPEs+PiB7CiAgLy8gVGhlIHJvb3Qgbm9kZSBvZiB0aGUgc3BsYXkgdHJlZS4gSXQgd2lsbCBjb250YWluIGVpdGhlciB0aGUgbGFzdAogIC8vIGVsZW1lbnQgaW5zZXJ0ZWQgb3IgdGhlIGxhc3QgZWxlbWVudCBsb29rZWQgdXAuCiAgTm9kZSBnZXQgX3Jvb3Q7CiAgc2V0IF9yb290KE5vZGUgbmV3VmFsdWUpOwoKICAvLyBUaGUgZHVtbXkgbm9kZSB1c2VkIHdoZW4gcGVyZm9ybWluZyBhIHNwbGF5IG9uIHRoZSB0cmVlLiBSZXVzaW5nIGl0CiAgLy8gYXZvaWRzIGFsbG9jYXRpbmcgYSBub2RlIGVhY2ggdGltZSBhIHNwbGF5IGlzIHBlcmZvcm1lZC4KICBOb2RlIGdldCBfZHVtbXk7CgogIC8vIE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgc3BsYXkgdHJlZS4KICBpbnQgX2NvdW50ID0gMDsKCiAgLy8vIENvdW50ZXIgaW5jcmVtZW50ZWQgd2hlbmV2ZXIgdGhlIGtleXMgaW4gdGhlIG1hcCBjaGFuZ2VzLgogIC8vLwogIC8vLyBVc2VkIHRvIGRldGVjdCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMuCiAgaW50IF9tb2RpZmljYXRpb25Db3VudCA9IDA7CgogIC8vLyBDb3VudGVyIGluY3JlbWVudGVkIHdoZW5ldmVyIHRoZSB0cmVlIHN0cnVjdHVyZSBjaGFuZ2VzLgogIC8vLwogIC8vLyBVc2VkIHRvIGRldGVjdCB0aGF0IGFuIGluLXBsYWNlIHRyYXZlcnNhbCBjYW5ub3QgdXNlCiAgLy8vIGNhY2hlZCBpbmZvcm1hdGlvbiB0aGF0IHJlbGllcyBvbiB0aGUgdHJlZSBzdHJ1Y3R1cmUuCiAgaW50IF9zcGxheUNvdW50ID0gMDsKCiAgLy8vIFRoZSBjb21wYXJhdG9yIHRoYXQgaXMgdXNlZCBmb3IgdGhpcyBzcGxheSB0cmVlLgogIENvbXBhcmF0b3I8Sz4gZ2V0IF9jb21wYXJhdG9yOwoKICAvLy8gVGhlIHByZWRpY2F0ZSB0byBkZXRlcm1pbmUgdGhhdCBhIGdpdmVuIG9iamVjdCBpcyBhIHZhbGlkIGtleS4KICBfUHJlZGljYXRlIGdldCBfdmFsaWRLZXk7CgogIC8vLyBDb21wYXJpc29uIHVzZWQgdG8gY29tcGFyZSBrZXlzLgogIGludCBfY29tcGFyZShLIGtleTEsIEsga2V5Mik7CgogIC8vLyBQZXJmb3JtIHRoZSBzcGxheSBvcGVyYXRpb24gZm9yIHRoZSBnaXZlbiBrZXkuIE1vdmVzIHRoZSBub2RlIHdpdGgKICAvLy8gdGhlIGdpdmVuIGtleSB0byB0aGUgdG9wIG9mIHRoZSB0cmVlLiAgSWYgbm8gbm9kZSBoYXMgdGhlIGdpdmVuCiAgLy8vIGtleSwgdGhlIGxhc3Qgbm9kZSBvbiB0aGUgc2VhcmNoIHBhdGggaXMgbW92ZWQgdG8gdGhlIHRvcCBvZiB0aGUKICAvLy8gdHJlZS4gVGhpcyBpcyB0aGUgc2ltcGxpZmllZCB0b3AtZG93biBzcGxheWluZyBhbGdvcml0aG0gZnJvbToKICAvLy8gIlNlbGYtYWRqdXN0aW5nIEJpbmFyeSBTZWFyY2ggVHJlZXMiIGJ5IFNsZWF0b3IgYW5kIFRhcmphbi4KICAvLy8KICAvLy8gUmV0dXJucyB0aGUgcmVzdWx0IG9mIGNvbXBhcmluZyB0aGUgbmV3IHJvb3Qgb2YgdGhlIHRyZWUgdG8gW2tleV0uCiAgLy8vIFJldHVybnMgLTEgaWYgdGhlIHRhYmxlIGlzIGVtcHR5LgogIGludCBfc3BsYXkoSyBrZXkpIHsKICAgIGlmIChfcm9vdCA9PSBudWxsKSByZXR1cm4gLTE7CgogICAgLy8gVGhlIHJpZ2h0IGNoaWxkIG9mIHRoZSBkdW1teSBub2RlIHdpbGwgaG9sZAogICAgLy8gdGhlIEwgdHJlZSBvZiB0aGUgYWxnb3JpdGhtLiAgVGhlIGxlZnQgY2hpbGQgb2YgdGhlIGR1bW15IG5vZGUKICAgIC8vIHdpbGwgaG9sZCB0aGUgUiB0cmVlIG9mIHRoZSBhbGdvcml0aG0uICBVc2luZyBhIGR1bW15IG5vZGUsIGxlZnQKICAgIC8vIGFuZCByaWdodCB3aWxsIGFsd2F5cyBiZSBub2RlcyBhbmQgd2UgYXZvaWQgc3BlY2lhbCBjYXNlcy4KICAgIE5vZGUgbGVmdCA9IF9kdW1teTsKICAgIE5vZGUgcmlnaHQgPSBfZHVtbXk7CiAgICBOb2RlIGN1cnJlbnQgPSBfcm9vdDsKICAgIGludCBjb21wOwogICAgd2hpbGUgKHRydWUpIHsKICAgICAgY29tcCA9IF9jb21wYXJlKGN1cnJlbnQua2V5LCBrZXkpOwogICAgICBpZiAoY29tcCA+IDApIHsKICAgICAgICBpZiAoY3VycmVudC5sZWZ0ID09IG51bGwpIGJyZWFrOwogICAgICAgIGNvbXAgPSBfY29tcGFyZShjdXJyZW50LmxlZnQua2V5LCBrZXkpOwogICAgICAgIGlmIChjb21wID4gMCkgewogICAgICAgICAgLy8gUm90YXRlIHJpZ2h0LgogICAgICAgICAgX1NwbGF5VHJlZU5vZGU8Sz4gdG1wID0gY3VycmVudC5sZWZ0OwogICAgICAgICAgY3VycmVudC5sZWZ0ID0gdG1wLnJpZ2h0OwogICAgICAgICAgdG1wLnJpZ2h0ID0gY3VycmVudDsKICAgICAgICAgIGN1cnJlbnQgPSB0bXA7CiAgICAgICAgICBpZiAoY3VycmVudC5sZWZ0ID09IG51bGwpIGJyZWFrOwogICAgICAgIH0KICAgICAgICAvLyBMaW5rIHJpZ2h0LgogICAgICAgIHJpZ2h0LmxlZnQgPSBjdXJyZW50OwogICAgICAgIHJpZ2h0ID0gY3VycmVudDsKICAgICAgICBjdXJyZW50ID0gY3VycmVudC5sZWZ0OwogICAgICB9IGVsc2UgaWYgKGNvbXAgPCAwKSB7CiAgICAgICAgaWYgKGN1cnJlbnQucmlnaHQgPT0gbnVsbCkgYnJlYWs7CiAgICAgICAgY29tcCA9IF9jb21wYXJlKGN1cnJlbnQucmlnaHQua2V5LCBrZXkpOwogICAgICAgIGlmIChjb21wIDwgMCkgewogICAgICAgICAgLy8gUm90YXRlIGxlZnQuCiAgICAgICAgICBOb2RlIHRtcCA9IGN1cnJlbnQucmlnaHQ7CiAgICAgICAgICBjdXJyZW50LnJpZ2h0ID0gdG1wLmxlZnQ7CiAgICAgICAgICB0bXAubGVmdCA9IGN1cnJlbnQ7CiAgICAgICAgICBjdXJyZW50ID0gdG1wOwogICAgICAgICAgaWYgKGN1cnJlbnQucmlnaHQgPT0gbnVsbCkgYnJlYWs7CiAgICAgICAgfQogICAgICAgIC8vIExpbmsgbGVmdC4KICAgICAgICBsZWZ0LnJpZ2h0ID0gY3VycmVudDsKICAgICAgICBsZWZ0ID0gY3VycmVudDsKICAgICAgICBjdXJyZW50ID0gY3VycmVudC5yaWdodDsKICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgLy8gQXNzZW1ibGUuCiAgICBsZWZ0LnJpZ2h0ID0gY3VycmVudC5sZWZ0OwogICAgcmlnaHQubGVmdCA9IGN1cnJlbnQucmlnaHQ7CiAgICBjdXJyZW50LmxlZnQgPSBfZHVtbXkucmlnaHQ7CiAgICBjdXJyZW50LnJpZ2h0ID0gX2R1bW15LmxlZnQ7CiAgICBfcm9vdCA9IGN1cnJlbnQ7CgogICAgX2R1bW15LnJpZ2h0ID0gbnVsbDsKICAgIF9kdW1teS5sZWZ0ID0gbnVsbDsKICAgIF9zcGxheUNvdW50Kys7CiAgICByZXR1cm4gY29tcDsKICB9CgogIC8vIEVtdWxhdGVzIHNwbGF5aW5nIHdpdGggYSBrZXkgdGhhdCBpcyBzbWFsbGVyIHRoYW4gYW55IGluIHRoZSBzdWJ0cmVlCiAgLy8gYW5jaG9yZWQgYXQgW25vZGVdLgogIC8vIGFuZCB0aGF0IG5vZGUgaXMgcmV0dXJuZWQuIEl0IHNob3VsZCByZXBsYWNlIHRoZSByZWZlcmVuY2UgdG8gW25vZGVdCiAgLy8gaW4gYW55IHBhcmVudCB0cmVlIG9yIHJvb3QgcG9pbnRlci4KICBleHRlcm5hbCBOb2RlIF9zcGxheU1pbihOb2RlIG5vZGUpOwoKICAvLyBFbXVsYXRlcyBzcGxheWluZyB3aXRoIGEga2V5IHRoYXQgaXMgZ3JlYXRlciB0aGFuIGFueSBpbiB0aGUgc3VidHJlZQogIC8vIGFuY2hvcmVkIGF0IFtub2RlXS4KICAvLyBBZnRlciB0aGlzLCB0aGUgbGFyZ2VzdCBlbGVtZW50IGluIHRoZSB0cmVlIGlzIHRoZSByb290IG9mIHRoZSBzdWJ0cmVlLAogIC8vIGFuZCB0aGF0IG5vZGUgaXMgcmV0dXJuZWQuIEl0IHNob3VsZCByZXBsYWNlIHRoZSByZWZlcmVuY2UgdG8gW25vZGVdCiAgLy8gaW4gYW55IHBhcmVudCB0cmVlIG9yIHJvb3QgcG9pbnRlci4KICBleHRlcm5hbCBOb2RlIF9zcGxheU1heChOb2RlIG5vZGUpOwoKICBOb2RlIF9yZW1vdmUoSyBrZXkpIHsKICAgIGlmIChfcm9vdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGludCBjb21wID0gX3NwbGF5KGtleSk7CiAgICBpZiAoY29tcCAhPSAwKSByZXR1cm4gbnVsbDsKICAgIE5vZGUgcmVzdWx0ID0gX3Jvb3Q7CiAgICBfY291bnQtLTsKICAgIC8vIGFzc2VydChfY291bnQgPj0gMCk7CiAgICBpZiAoX3Jvb3QubGVmdCA9PSBudWxsKSB7CiAgICAgIF9yb290ID0gX3Jvb3QucmlnaHQ7CiAgICB9IGVsc2UgewogICAgICBOb2RlIHJpZ2h0ID0gX3Jvb3QucmlnaHQ7CiAgICAgIC8vIFNwbGF5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcm9vdCBoYXMgYW4gZW1wdHkgcmlnaHQgY2hpbGQuCiAgICAgIF9yb290ID0gX3NwbGF5TWF4KF9yb290LmxlZnQpOwogICAgICAvLyBJbnNlcnQgdGhlIG9yaWdpbmFsIHJpZ2h0IGNoaWxkIGFzIHRoZSByaWdodCBjaGlsZCBvZiB0aGUgbmV3CiAgICAgIC8vIHJvb3QuCiAgICAgIF9yb290LnJpZ2h0ID0gcmlnaHQ7CiAgICB9CiAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQWRkcyBhIG5ldyByb290IG5vZGUgd2l0aCB0aGUgZ2l2ZW4gW2tleV0gb3IgW3ZhbHVlXS4KICAvLy8KICAvLy8gVGhlIFtjb21wXSB2YWx1ZSBpcyB0aGUgcmVzdWx0IG9mIGNvbXBhcmluZyB0aGUgZXhpc3Rpbmcgcm9vdCdzIGtleQogIC8vLyB3aXRoIGtleS4KICB2b2lkIF9hZGROZXdSb290KE5vZGUgbm9kZSwgaW50IGNvbXApIHsKICAgIF9jb3VudCsrOwogICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgICBpZiAoX3Jvb3QgPT0gbnVsbCkgewogICAgICBfcm9vdCA9IG5vZGU7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIGFzc2VydChfY291bnQgPj0gMCk7CiAgICBpZiAoY29tcCA8IDApIHsKICAgICAgbm9kZS5sZWZ0ID0gX3Jvb3Q7CiAgICAgIG5vZGUucmlnaHQgPSBfcm9vdC5yaWdodDsKICAgICAgX3Jvb3QucmlnaHQgPSBudWxsOwogICAgfSBlbHNlIHsKICAgICAgbm9kZS5yaWdodCA9IF9yb290OwogICAgICBub2RlLmxlZnQgPSBfcm9vdC5sZWZ0OwogICAgICBfcm9vdC5sZWZ0ID0gbnVsbDsKICAgIH0KICAgIF9yb290ID0gbm9kZTsKICB9CgogIE5vZGUgZ2V0IF9maXJzdCB7CiAgICBpZiAoX3Jvb3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBfcm9vdCA9IF9zcGxheU1pbihfcm9vdCk7CiAgICByZXR1cm4gX3Jvb3Q7CiAgfQoKICBOb2RlIGdldCBfbGFzdCB7CiAgICBpZiAoX3Jvb3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBfcm9vdCA9IF9zcGxheU1heChfcm9vdCk7CiAgICByZXR1cm4gX3Jvb3Q7CiAgfQoKICB2b2lkIF9jbGVhcigpIHsKICAgIF9yb290ID0gbnVsbDsKICAgIF9jb3VudCA9IDA7CiAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICB9Cn0KCmNsYXNzIF9UeXBlVGVzdDxUPiB7CiAgYm9vbCB0ZXN0KHYpID0+IHYgaXMgVDsKfQoKaW50IF9keW5hbWljQ29tcGFyZShkeW5hbWljIGEsIGR5bmFtaWMgYikgPT4gQ29tcGFyYWJsZS5jb21wYXJlKGEsIGIpOwoKQ29tcGFyYXRvcjxLPiBfZGVmYXVsdENvbXBhcmU8Sz4oKSB7CiAgLy8gSWYgSyA8OiBDb21wYXJhYmxlLCB0aGVuIHdlIGNhbiBqdXN0IHVzZSBDb21wYXJhYmxlLmNvbXBhcmUKICAvLyB3aXRoIG5vIGNhc3RzLgogIE9iamVjdCBjb21wYXJlID0gQ29tcGFyYWJsZS5jb21wYXJlOwogIGlmIChjb21wYXJlIGlzIENvbXBhcmF0b3I8Sz4pIHsKICAgIHJldHVybiBjb21wYXJlOwogIH0KICAvLyBPdGhlcndpc2Ugd3JhcCBhbmQgY2FzdCB0aGUgYXJndW1lbnRzIG9uIGVhY2ggY2FsbC4KICByZXR1cm4gX2R5bmFtaWNDb21wYXJlOwp9CgovLy8gQSBbTWFwXSBvZiBvYmplY3RzIHRoYXQgY2FuIGJlIG9yZGVyZWQgcmVsYXRpdmUgdG8gZWFjaCBvdGhlci4KLy8vCi8vLyBUaGUgbWFwIGlzIGJhc2VkIG9uIGEgc2VsZi1iYWxhbmNpbmcgYmluYXJ5IHRyZWUuIEl0IGFsbG93cyBtb3N0IG9wZXJhdGlvbnMKLy8vIGluIGFtb3J0aXplZCBsb2dhcml0aG1pYyB0aW1lLgovLy8KLy8vIEtleXMgb2YgdGhlIG1hcCBhcmUgY29tcGFyZWQgdXNpbmcgdGhlIGBjb21wYXJlYCBmdW5jdGlvbiBwYXNzZWQgaW4KLy8vIHRoZSBjb25zdHJ1Y3RvciwgYm90aCBmb3Igb3JkZXJpbmcgYW5kIGZvciBlcXVhbGl0eS4KLy8vIElmIHRoZSBtYXAgY29udGFpbnMgb25seSB0aGUga2V5IGBhYCwgdGhlbiBgbWFwLmNvbnRhaW5zS2V5KGIpYAovLy8gd2lsbCByZXR1cm4gYHRydWVgIGlmIGFuZCBvbmx5IGlmIGBjb21wYXJlKGEsIGIpID09IDBgLAovLy8gYW5kIHRoZSB2YWx1ZSBvZiBgYSA9PSBiYCBpcyBub3QgZXZlbiBjaGVja2VkLgovLy8gSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gaXMgb21pdHRlZCwgdGhlIG9iamVjdHMgYXJlIGFzc3VtZWQgdG8gYmUKLy8vIFtDb21wYXJhYmxlXSwgYW5kIGFyZSBjb21wYXJlZCB1c2luZyB0aGVpciBbQ29tcGFyYWJsZS5jb21wYXJlVG9dIG1ldGhvZC4KLy8vIE5vbi1jb21wYXJhYmxlIG9iamVjdHMgKGluY2x1ZGluZyBgbnVsbGApIHdpbGwgbm90IHdvcmsgYXMga2V5cwovLy8gaW4gdGhhdCBjYXNlLgovLy8KLy8vIFRvIGFsbG93IGNhbGxpbmcgW29wZXJhdG9yIFtdXSwgW3JlbW92ZV0gb3IgW2NvbnRhaW5zS2V5XSB3aXRoIG9iamVjdHMKLy8vIHRoYXQgYXJlIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBjb21wYXJlYCBmdW5jdGlvbiwgYW4gZXh0cmEgYGlzVmFsaWRLZXlgCi8vLyBwcmVkaWNhdGUgZnVuY3Rpb24gY2FuIGJlIHN1cHBsaWVkLiBUaGlzIGZ1bmN0aW9uIGlzIHRlc3RlZCBiZWZvcmUKLy8vIHVzaW5nIHRoZSBgY29tcGFyZWAgZnVuY3Rpb24gb24gYW4gYXJndW1lbnQgdmFsdWUgdGhhdCBtYXkgbm90IGJlIGEgW0tdCi8vLyB2YWx1ZS4gSWYgb21pdHRlZCwgdGhlIGBpc1ZhbGlkS2V5YCBmdW5jdGlvbiBkZWZhdWx0cyB0byB0ZXN0aW5nIGlmIHRoZQovLy8gdmFsdWUgaXMgYSBbS10uCmNsYXNzIFNwbGF5VHJlZU1hcDxLLCBWPiBleHRlbmRzIF9TcGxheVRyZWU8SywgX1NwbGF5VHJlZU1hcE5vZGU8SywgVj4+CiAgICB3aXRoIE1hcE1peGluPEssIFY+IHsKICBfU3BsYXlUcmVlTWFwTm9kZTxLLCBWPiBfcm9vdDsKICBmaW5hbCBfU3BsYXlUcmVlTWFwTm9kZTxLLCBWPiBfZHVtbXkgPSBfU3BsYXlUcmVlTWFwTm9kZTxLLCBWPihudWxsLCBudWxsKTsKCiAgQ29tcGFyYXRvcjxLPiBfY29tcGFyYXRvcjsKICBfUHJlZGljYXRlIF92YWxpZEtleTsKCiAgU3BsYXlUcmVlTWFwKFtpbnQgY29tcGFyZShLIGtleTEsIEsga2V5MiksIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpXSkKICAgICAgOiBfY29tcGFyYXRvciA9IGNvbXBhcmUgPz8gX2RlZmF1bHRDb21wYXJlPEs+KCksCiAgICAgICAgX3ZhbGlkS2V5ID0gaXNWYWxpZEtleSA/PyAoKHYpID0+IHYgaXMgSyk7CgogIC8vLyBDcmVhdGVzIGEgW1NwbGF5VHJlZU1hcF0gdGhhdCBjb250YWlucyBhbGwga2V5L3ZhbHVlIHBhaXJzIG9mIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFRoZSBrZXlzIG11c3QgYWxsIGJlIGluc3RhbmNlcyBvZiBbS10gYW5kIHRoZSB2YWx1ZXMgb2YgW1ZdLgogIC8vLyBUaGUgW290aGVyXSBtYXAgaXRzZWxmIGNhbiBoYXZlIGFueSB0eXBlLgogIGZhY3RvcnkgU3BsYXlUcmVlTWFwLmZyb20oTWFwIG90aGVyLAogICAgICBbaW50IGNvbXBhcmUoSyBrZXkxLCBLIGtleTIpLCBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KV0pIHsKICAgIFNwbGF5VHJlZU1hcDxLLCBWPiByZXN1bHQgPSBTcGxheVRyZWVNYXA8SywgVj4oY29tcGFyZSwgaXNWYWxpZEtleSk7CiAgICBvdGhlci5mb3JFYWNoKChrLCB2KSB7CiAgICAgIHJlc3VsdFtrXSA9IHY7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIFtTcGxheVRyZWVNYXBdIHRoYXQgY29udGFpbnMgYWxsIGtleS92YWx1ZSBwYWlycyBvZiBbb3RoZXJdLgogIGZhY3RvcnkgU3BsYXlUcmVlTWFwLm9mKE1hcDxLLCBWPiBvdGhlciwKICAgICAgICAgIFtpbnQgY29tcGFyZShLIGtleTEsIEsga2V5MiksIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpXSkgPT4KICAgICAgU3BsYXlUcmVlTWFwPEssIFY+KGNvbXBhcmUsIGlzVmFsaWRLZXkpLi5hZGRBbGwob3RoZXIpOwoKICAvLy8gQ3JlYXRlcyBhIFtTcGxheVRyZWVNYXBdIHdoZXJlIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNvbXB1dGVkIGZyb20gdGhlCiAgLy8vIFtpdGVyYWJsZV0uCiAgLy8vCiAgLy8vIEZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIFtpdGVyYWJsZV0gdGhpcyBjb25zdHJ1Y3RvciBjb21wdXRlcyBhIGtleS92YWx1ZQogIC8vLyBwYWlyLCBieSBhcHBseWluZyBba2V5XSBhbmQgW3ZhbHVlXSByZXNwZWN0aXZlbHkuCiAgLy8vCiAgLy8vIFRoZSBrZXlzIG9mIHRoZSBrZXkvdmFsdWUgcGFpcnMgZG8gbm90IG5lZWQgdG8gYmUgdW5pcXVlLiBUaGUgbGFzdAogIC8vLyBvY2N1cnJlbmNlIG9mIGEga2V5IHdpbGwgc2ltcGx5IG92ZXJ3cml0ZSBhbnkgcHJldmlvdXMgdmFsdWUuCiAgLy8vCiAgLy8vIElmIG5vIGZ1bmN0aW9ucyBhcmUgc3BlY2lmaWVkIGZvciBba2V5XSBhbmQgW3ZhbHVlXSB0aGUgZGVmYXVsdCBpcyB0bwogIC8vLyB1c2UgdGhlIGl0ZXJhYmxlIHZhbHVlIGl0c2VsZi4KICBmYWN0b3J5IFNwbGF5VHJlZU1hcC5mcm9tSXRlcmFibGUoSXRlcmFibGUgaXRlcmFibGUsCiAgICAgIHtLIGtleShlbGVtZW50KSwKICAgICAgViB2YWx1ZShlbGVtZW50KSwKICAgICAgaW50IGNvbXBhcmUoSyBrZXkxLCBLIGtleTIpLAogICAgICBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KX0pIHsKICAgIFNwbGF5VHJlZU1hcDxLLCBWPiBtYXAgPSBTcGxheVRyZWVNYXA8SywgVj4oY29tcGFyZSwgaXNWYWxpZEtleSk7CiAgICBNYXBCYXNlLl9maWxsTWFwV2l0aE1hcHBlZEl0ZXJhYmxlKG1hcCwgaXRlcmFibGUsIGtleSwgdmFsdWUpOwogICAgcmV0dXJuIG1hcDsKICB9CgogIC8vLyBDcmVhdGVzIGEgW1NwbGF5VHJlZU1hcF0gYXNzb2NpYXRpbmcgdGhlIGdpdmVuIFtrZXlzXSB0byBbdmFsdWVzXS4KICAvLy8KICAvLy8gVGhpcyBjb25zdHJ1Y3RvciBpdGVyYXRlcyBvdmVyIFtrZXlzXSBhbmQgW3ZhbHVlc10gYW5kIG1hcHMgZWFjaCBlbGVtZW50CiAgLy8vIG9mIFtrZXlzXSB0byB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50IG9mIFt2YWx1ZXNdLgogIC8vLwogIC8vLyBJZiBba2V5c10gY29udGFpbnMgdGhlIHNhbWUgb2JqZWN0IG11bHRpcGxlIHRpbWVzLCB0aGUgbGFzdCBvY2N1cnJlbmNlCiAgLy8vIG92ZXJ3cml0ZXMgdGhlIHByZXZpb3VzIHZhbHVlLgogIC8vLwogIC8vLyBJdCBpcyBhbiBlcnJvciBpZiB0aGUgdHdvIFtJdGVyYWJsZV1zIGRvbid0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoLgogIGZhY3RvcnkgU3BsYXlUcmVlTWFwLmZyb21JdGVyYWJsZXMoSXRlcmFibGU8Sz4ga2V5cywgSXRlcmFibGU8Vj4gdmFsdWVzLAogICAgICBbaW50IGNvbXBhcmUoSyBrZXkxLCBLIGtleTIpLCBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KV0pIHsKICAgIFNwbGF5VHJlZU1hcDxLLCBWPiBtYXAgPSBTcGxheVRyZWVNYXA8SywgVj4oY29tcGFyZSwgaXNWYWxpZEtleSk7CiAgICBNYXBCYXNlLl9maWxsTWFwV2l0aEl0ZXJhYmxlcyhtYXAsIGtleXMsIHZhbHVlcyk7CiAgICByZXR1cm4gbWFwOwogIH0KCiAgaW50IF9jb21wYXJlKEsga2V5MSwgSyBrZXkyKSA9PiBfY29tcGFyYXRvcihrZXkxLCBrZXkyKTsKCiAgU3BsYXlUcmVlTWFwLl9pbnRlcm5hbCgpOwoKICBWIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpIHsKICAgIGlmICghX3ZhbGlkS2V5KGtleSkpIHJldHVybiBudWxsOwogICAgaWYgKF9yb290ICE9IG51bGwpIHsKICAgICAgaW50IGNvbXAgPSBfc3BsYXkoa2V5KTsKICAgICAgaWYgKGNvbXAgPT0gMCkgewogICAgICAgIHJldHVybiBfcm9vdC52YWx1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBpZiAoIV92YWxpZEtleShrZXkpKSByZXR1cm4gbnVsbDsKICAgIF9TcGxheVRyZWVNYXBOb2RlPEssIFY+IG1hcFJvb3QgPSBfcmVtb3ZlKGtleSk7CiAgICBpZiAobWFwUm9vdCAhPSBudWxsKSByZXR1cm4gbWFwUm9vdC52YWx1ZTsKICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIGlmIChrZXkgPT0gbnVsbCkgdGhyb3cgQXJndW1lbnRFcnJvcihrZXkpOwogICAgLy8gU3BsYXkgb24gdGhlIGtleSB0byBtb3ZlIHRoZSBsYXN0IG5vZGUgb24gdGhlIHNlYXJjaCBwYXRoIGZvcgogICAgLy8gdGhlIGtleSB0byB0aGUgcm9vdCBvZiB0aGUgdHJlZS4KICAgIGludCBjb21wID0gX3NwbGF5KGtleSk7CiAgICBpZiAoY29tcCA9PSAwKSB7CiAgICAgIF9yb290LnZhbHVlID0gdmFsdWU7CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9hZGROZXdSb290KF9TcGxheVRyZWVNYXBOb2RlKGtleSwgdmFsdWUpLCBjb21wKTsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgaWYgKGtleSA9PSBudWxsKSB0aHJvdyBBcmd1bWVudEVycm9yKGtleSk7CiAgICBpbnQgY29tcCA9IF9zcGxheShrZXkpOwogICAgaWYgKGNvbXAgPT0gMCkgewogICAgICByZXR1cm4gX3Jvb3QudmFsdWU7CiAgICB9CiAgICBpbnQgbW9kaWZpY2F0aW9uQ291bnQgPSBfbW9kaWZpY2F0aW9uQ291bnQ7CiAgICBpbnQgc3BsYXlDb3VudCA9IF9zcGxheUNvdW50OwogICAgViB2YWx1ZSA9IGlmQWJzZW50KCk7CiAgICBpZiAobW9kaWZpY2F0aW9uQ291bnQgIT0gX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgIH0KICAgIGlmIChzcGxheUNvdW50ICE9IF9zcGxheUNvdW50KSB7CiAgICAgIGNvbXAgPSBfc3BsYXkoa2V5KTsKICAgICAgLy8gS2V5IGlzIHN0aWxsIG5vdCB0aGVyZSwgb3RoZXJ3aXNlIF9tb2RpZmljYXRpb25Db3VudCB3b3VsZCBiZSBjaGFuZ2VkLgogICAgICBhc3NlcnQoY29tcCAhPSAwKTsKICAgIH0KICAgIF9hZGROZXdSb290KF9TcGxheVRyZWVNYXBOb2RlKGtleSwgdmFsdWUpLCBjb21wKTsKICAgIHJldHVybiB2YWx1ZTsKICB9CgogIHZvaWQgYWRkQWxsKE1hcDxLLCBWPiBvdGhlcikgewogICAgb3RoZXIuZm9yRWFjaCgoSyBrZXksIFYgdmFsdWUpIHsKICAgICAgdGhpc1trZXldID0gdmFsdWU7CiAgICB9KTsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgewogICAgcmV0dXJuIChfcm9vdCA9PSBudWxsKTsKICB9CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gIWlzRW1wdHk7CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBJdGVyYXRvcjxfU3BsYXlUcmVlTm9kZTxLPj4gbm9kZXMgPSBfU3BsYXlUcmVlTm9kZUl0ZXJhdG9yPEs+KHRoaXMpOwogICAgd2hpbGUgKG5vZGVzLm1vdmVOZXh0KCkpIHsKICAgICAgX1NwbGF5VHJlZU1hcE5vZGU8SywgVj4gbm9kZSA9IG5vZGVzLmN1cnJlbnQ7CiAgICAgIGYobm9kZS5rZXksIG5vZGUudmFsdWUpOwogICAgfQogIH0KCiAgaW50IGdldCBsZW5ndGggewogICAgcmV0dXJuIF9jb3VudDsKICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfY2xlYXIoKTsKICB9CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgewogICAgcmV0dXJuIF92YWxpZEtleShrZXkpICYmIF9zcGxheShrZXkpID09IDA7CiAgfQoKICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKSB7CiAgICBpbnQgaW5pdGlhbFNwbGF5Q291bnQgPSBfc3BsYXlDb3VudDsKICAgIGJvb2wgdmlzaXQoX1NwbGF5VHJlZU1hcE5vZGUgbm9kZSkgewogICAgICB3aGlsZSAobm9kZSAhPSBudWxsKSB7CiAgICAgICAgaWYgKG5vZGUudmFsdWUgPT0gdmFsdWUpIHJldHVybiB0cnVlOwogICAgICAgIGlmIChpbml0aWFsU3BsYXlDb3VudCAhPSBfc3BsYXlDb3VudCkgewogICAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICAgIH0KICAgICAgICBpZiAobm9kZS5yaWdodCAhPSBudWxsICYmIHZpc2l0KG5vZGUucmlnaHQpKSByZXR1cm4gdHJ1ZTsKICAgICAgICBub2RlID0gbm9kZS5sZWZ0OwogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICByZXR1cm4gdmlzaXQoX3Jvb3QpOwogIH0KCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gX1NwbGF5VHJlZUtleUl0ZXJhYmxlPEs+KHRoaXMpOwoKICBJdGVyYWJsZTxWPiBnZXQgdmFsdWVzID0+IF9TcGxheVRyZWVWYWx1ZUl0ZXJhYmxlPEssIFY+KHRoaXMpOwoKICAvLy8gR2V0IHRoZSBmaXJzdCBrZXkgaW4gdGhlIG1hcC4gUmV0dXJucyBbOm51bGw6XSBpZiB0aGUgbWFwIGlzIGVtcHR5LgogIEsgZmlyc3RLZXkoKSB7CiAgICBpZiAoX3Jvb3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX2ZpcnN0LmtleTsKICB9CgogIC8vLyBHZXQgdGhlIGxhc3Qga2V5IGluIHRoZSBtYXAuIFJldHVybnMgWzpudWxsOl0gaWYgdGhlIG1hcCBpcyBlbXB0eS4KICBLIGxhc3RLZXkoKSB7CiAgICBpZiAoX3Jvb3QgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX2xhc3Qua2V5OwogIH0KCiAgLy8vIEdldCB0aGUgbGFzdCBrZXkgaW4gdGhlIG1hcCB0aGF0IGlzIHN0cmljdGx5IHNtYWxsZXIgdGhhbiBba2V5XS4gUmV0dXJucwogIC8vLyBbOm51bGw6XSBpZiBubyBrZXkgd2FzIG5vdCBmb3VuZC4KICBLIGxhc3RLZXlCZWZvcmUoSyBrZXkpIHsKICAgIGlmIChrZXkgPT0gbnVsbCkgdGhyb3cgQXJndW1lbnRFcnJvcihrZXkpOwogICAgaWYgKF9yb290ID09IG51bGwpIHJldHVybiBudWxsOwogICAgaW50IGNvbXAgPSBfc3BsYXkoa2V5KTsKICAgIGlmIChjb21wIDwgMCkgcmV0dXJuIF9yb290LmtleTsKICAgIF9TcGxheVRyZWVOb2RlPEs+IG5vZGUgPSBfcm9vdC5sZWZ0OwogICAgaWYgKG5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICB3aGlsZSAobm9kZS5yaWdodCAhPSBudWxsKSB7CiAgICAgIG5vZGUgPSBub2RlLnJpZ2h0OwogICAgfQogICAgcmV0dXJuIG5vZGUua2V5OwogIH0KCiAgLy8vIEdldCB0aGUgZmlyc3Qga2V5IGluIHRoZSBtYXAgdGhhdCBpcyBzdHJpY3RseSBsYXJnZXIgdGhhbiBba2V5XS4gUmV0dXJucwogIC8vLyBbOm51bGw6XSBpZiBubyBrZXkgd2FzIG5vdCBmb3VuZC4KICBLIGZpcnN0S2V5QWZ0ZXIoSyBrZXkpIHsKICAgIGlmIChrZXkgPT0gbnVsbCkgdGhyb3cgQXJndW1lbnRFcnJvcihrZXkpOwogICAgaWYgKF9yb290ID09IG51bGwpIHJldHVybiBudWxsOwogICAgaW50IGNvbXAgPSBfc3BsYXkoa2V5KTsKICAgIGlmIChjb21wID4gMCkgcmV0dXJuIF9yb290LmtleTsKICAgIF9TcGxheVRyZWVOb2RlPEs+IG5vZGUgPSBfcm9vdC5yaWdodDsKICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiBudWxsOwogICAgd2hpbGUgKG5vZGUubGVmdCAhPSBudWxsKSB7CiAgICAgIG5vZGUgPSBub2RlLmxlZnQ7CiAgICB9CiAgICByZXR1cm4gbm9kZS5rZXk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfU3BsYXlUcmVlSXRlcmF0b3I8SywgVD4gaW1wbGVtZW50cyBJdGVyYXRvcjxUPiB7CiAgZmluYWwgX1NwbGF5VHJlZTxLLCBfU3BsYXlUcmVlTm9kZTxLPj4gX3RyZWU7CgogIC8vLyBXb3JrbGlzdCBvZiBub2RlcyB0byB2aXNpdC4KICAvLy8KICAvLy8gVGhlc2Ugbm9kZXMgaGF2ZSBiZWVuIHBhc3NlZCBvdmVyIG9uIHRoZSB3YXkgZG93biBpbiBhCiAgLy8vIGRlcHRoLWZpcnN0IGxlZnQtdG8tcmlnaHQgdHJhdmVyc2FsLiBWaXNpdGluZyBlYWNoIG5vZGUsCiAgLy8vIGFuZCB0aGVpciByaWdodCBzdWJ0cmVlcyB3aWxsIHZpc2l0IHRoZSByZW1haW5kZXIgb2YKICAvLy8gdGhlIG5vZGVzIG9mIGEgZnVsbCB0cmF2ZXJzYWwuCiAgLy8vCiAgLy8vIE9ubHkgdmFsaWQgYXMgbG9uZyBhcyB0aGUgb3JpZ2luYWwgdHJlZSBpc24ndCByZW9yZGVyZWQuCiAgZmluYWwgTGlzdDxfU3BsYXlUcmVlTm9kZTxLPj4gX3dvcmtMaXN0ID0gPF9TcGxheVRyZWVOb2RlPEs+PltdOwoKICAvLy8gT3JpZ2luYWwgbW9kaWZpY2F0aW9uIGNvdW50ZXIgb2YgW190cmVlXS4KICAvLy8KICAvLy8gSW5jcmVtZW50ZWQgb24gW190cmVlXSB3aGVuIGEga2V5IGlzIGFkZGVkIG9yIHJlbW92ZWQuCiAgLy8vIElmIGl0IGNoYW5nZXMsIGl0ZXJhdGlvbiBpcyBhYm9ydGVkLgogIC8vLwogIC8vLyBOb3QgZmluYWwgYmVjYXVzZSBzb21lIGl0ZXJhdG9ycyBtYXkgbW9kaWZ5IHRoZSB0cmVlIGtub3dpbmdseSwKICAvLy8gYW5kIHRoZXkgdXBkYXRlIHRoZSBtb2RpZmljYXRpb24gY291bnQgaW4gdGhhdCBjYXNlLgogIGludCBfbW9kaWZpY2F0aW9uQ291bnQ7CgogIC8vLyBDb3VudCBvZiBzcGxheSBvcGVyYXRpb25zIG9uIFtfdHJlZV0gd2hlbiBbX3dvcmtMaXN0XSB3YXMgYnVpbHQuCiAgLy8vCiAgLy8vIElmIHRoZSBzcGxheSBjb3VudCBvbiBbX3RyZWVdIGluY3JlYXNlcywgW193b3JrTGlzdF0gYmVjb21lcyBpbnZhbGlkLgogIGludCBfc3BsYXlDb3VudDsKCiAgLy8vIEN1cnJlbnQgbm9kZS4KICBfU3BsYXlUcmVlTm9kZTxLPiBfY3VycmVudE5vZGU7CgogIF9TcGxheVRyZWVJdGVyYXRvcihfU3BsYXlUcmVlPEssIF9TcGxheVRyZWVOb2RlPEs+PiB0cmVlKQogICAgICA6IF90cmVlID0gdHJlZSwKICAgICAgICBfbW9kaWZpY2F0aW9uQ291bnQgPSB0cmVlLl9tb2RpZmljYXRpb25Db3VudCwKICAgICAgICBfc3BsYXlDb3VudCA9IHRyZWUuX3NwbGF5Q291bnQgewogICAgX2ZpbmRMZWZ0TW9zdERlc2NlbmRlbnQodHJlZS5fcm9vdCk7CiAgfQoKICBfU3BsYXlUcmVlSXRlcmF0b3Iuc3RhcnRBdChfU3BsYXlUcmVlPEssIF9TcGxheVRyZWVOb2RlPEs+PiB0cmVlLCBLIHN0YXJ0S2V5KQogICAgICA6IF90cmVlID0gdHJlZSwKICAgICAgICBfbW9kaWZpY2F0aW9uQ291bnQgPSB0cmVlLl9tb2RpZmljYXRpb25Db3VudCB7CiAgICBpZiAodHJlZS5fcm9vdCA9PSBudWxsKSByZXR1cm47CiAgICBpbnQgY29tcGFyZSA9IHRyZWUuX3NwbGF5KHN0YXJ0S2V5KTsKICAgIF9zcGxheUNvdW50ID0gdHJlZS5fc3BsYXlDb3VudDsKICAgIGlmIChjb21wYXJlIDwgMCkgewogICAgICAvLyBEb24ndCBpbmNsdWRlIHRoZSByb290LCBzdGFydCBhdCB0aGUgbmV4dCBlbGVtZW50IGFmdGVyIHRoZSByb290LgogICAgICBfZmluZExlZnRNb3N0RGVzY2VuZGVudCh0cmVlLl9yb290LnJpZ2h0KTsKICAgIH0gZWxzZSB7CiAgICAgIF93b3JrTGlzdC5hZGQodHJlZS5fcm9vdCk7CiAgICB9CiAgfQoKICBUIGdldCBjdXJyZW50IHsKICAgIGlmIChfY3VycmVudE5vZGUgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX2dldFZhbHVlKF9jdXJyZW50Tm9kZSk7CiAgfQoKICB2b2lkIF9maW5kTGVmdE1vc3REZXNjZW5kZW50KF9TcGxheVRyZWVOb2RlPEs+IG5vZGUpIHsKICAgIHdoaWxlIChub2RlICE9IG51bGwpIHsKICAgICAgX3dvcmtMaXN0LmFkZChub2RlKTsKICAgICAgbm9kZSA9IG5vZGUubGVmdDsKICAgIH0KICB9CgogIC8vLyBDYWxsZWQgd2hlbiB0aGUgdHJlZSBzdHJ1Y3R1cmUgb2YgdGhlIHRyZWUgaGFzIGNoYW5nZWQuCiAgLy8vCiAgLy8vIFRoaXMgY2FuIGJlIGNhdXNlZCBieSBhIHNwbGF5IG9wZXJhdGlvbi4KICAvLy8gSWYgdGhlIGtleS1zZXQgY2hhbmdlcywgaXRlcmF0aW9uIGlzIGFib3J0ZWQgYmVmb3JlIGdldHRpbmcKICAvLy8gaGVyZSwgc28gd2Uga25vdyB0aGF0IHRoZSBrZXlzIGFyZSB0aGUgc2FtZSBhcyBiZWZvcmUsIGl0J3MKICAvLy8gb25seSB0aGUgdHJlZSB0aGF0IGhhcyBiZWVuIHJlb3JkZXJlZC4KICB2b2lkIF9yZWJ1aWxkV29ya0xpc3QoX1NwbGF5VHJlZU5vZGU8Sz4gY3VycmVudE5vZGUpIHsKICAgIGFzc2VydChfd29ya0xpc3QuaXNOb3RFbXB0eSk7CiAgICBfd29ya0xpc3QuY2xlYXIoKTsKICAgIGlmIChjdXJyZW50Tm9kZSA9PSBudWxsKSB7CiAgICAgIF9maW5kTGVmdE1vc3REZXNjZW5kZW50KF90cmVlLl9yb290KTsKICAgIH0gZWxzZSB7CiAgICAgIF90cmVlLl9zcGxheShjdXJyZW50Tm9kZS5rZXkpOwogICAgICBfZmluZExlZnRNb3N0RGVzY2VuZGVudChfdHJlZS5fcm9vdC5yaWdodCk7CiAgICAgIGFzc2VydChfd29ya0xpc3QuaXNOb3RFbXB0eSk7CiAgICB9CiAgfQoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9tb2RpZmljYXRpb25Db3VudCAhPSBfdHJlZS5fbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKF90cmVlKTsKICAgIH0KICAgIC8vIFBpY2tzIHRoZSBuZXh0IGVsZW1lbnQgaW4gdGhlIHdvcmtsaXN0IGFzIGN1cnJlbnQuCiAgICAvLyBVcGRhdGVzIHRoZSB3b3JrbGlzdCB3aXRoIHRoZSBsZWZ0LW1vc3QgcGF0aCBvZiB0aGUgY3VycmVudCBub2RlJ3MKICAgIC8vIHJpZ2h0LWhhbmQgY2hpbGQuCiAgICAvLyBJZiB0aGUgd29ya2xpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkIChhZnRlciBhIHNwbGF5KSwgaXQgaXMgcmVidWlsZAogICAgLy8gZnJvbSBzY3JhdGNoLgogICAgaWYgKF93b3JrTGlzdC5pc0VtcHR5KSB7CiAgICAgIF9jdXJyZW50Tm9kZSA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChfdHJlZS5fc3BsYXlDb3VudCAhPSBfc3BsYXlDb3VudCAmJiBfY3VycmVudE5vZGUgIT0gbnVsbCkgewogICAgICBfcmVidWlsZFdvcmtMaXN0KF9jdXJyZW50Tm9kZSk7CiAgICB9CiAgICBfY3VycmVudE5vZGUgPSBfd29ya0xpc3QucmVtb3ZlTGFzdCgpOwogICAgX2ZpbmRMZWZ0TW9zdERlc2NlbmRlbnQoX2N1cnJlbnROb2RlLnJpZ2h0KTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgVCBfZ2V0VmFsdWUoX1NwbGF5VHJlZU5vZGU8Sz4gbm9kZSk7Cn0KCmNsYXNzIF9TcGxheVRyZWVLZXlJdGVyYWJsZTxLPiBleHRlbmRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEs+IHsKICBfU3BsYXlUcmVlPEssIF9TcGxheVRyZWVOb2RlPEs+PiBfdHJlZTsKICBfU3BsYXlUcmVlS2V5SXRlcmFibGUodGhpcy5fdHJlZSk7CiAgaW50IGdldCBsZW5ndGggPT4gX3RyZWUuX2NvdW50OwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX3RyZWUuX2NvdW50ID09IDA7CiAgSXRlcmF0b3I8Sz4gZ2V0IGl0ZXJhdG9yID0+IF9TcGxheVRyZWVLZXlJdGVyYXRvcjxLPihfdHJlZSk7CgogIFNldDxLPiB0b1NldCgpIHsKICAgIFNwbGF5VHJlZVNldDxLPiBzZXQgPSBTcGxheVRyZWVTZXQ8Sz4oX3RyZWUuX2NvbXBhcmF0b3IsIF90cmVlLl92YWxpZEtleSk7CiAgICBzZXQuX2NvdW50ID0gX3RyZWUuX2NvdW50OwogICAgc2V0Ll9yb290ID0gc2V0Ll9jb3B5Tm9kZShfdHJlZS5fcm9vdCk7CiAgICByZXR1cm4gc2V0OwogIH0KfQoKY2xhc3MgX1NwbGF5VHJlZVZhbHVlSXRlcmFibGU8SywgVj4gZXh0ZW5kcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxWPiB7CiAgU3BsYXlUcmVlTWFwPEssIFY+IF9tYXA7CiAgX1NwbGF5VHJlZVZhbHVlSXRlcmFibGUodGhpcy5fbWFwKTsKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbWFwLl9jb3VudDsKICBib29sIGdldCBpc0VtcHR5ID0+IF9tYXAuX2NvdW50ID09IDA7CiAgSXRlcmF0b3I8Vj4gZ2V0IGl0ZXJhdG9yID0+IF9TcGxheVRyZWVWYWx1ZUl0ZXJhdG9yPEssIFY+KF9tYXApOwp9CgpjbGFzcyBfU3BsYXlUcmVlS2V5SXRlcmF0b3I8Sz4gZXh0ZW5kcyBfU3BsYXlUcmVlSXRlcmF0b3I8SywgSz4gewogIF9TcGxheVRyZWVLZXlJdGVyYXRvcihfU3BsYXlUcmVlPEssIF9TcGxheVRyZWVOb2RlPEs+PiBtYXApIDogc3VwZXIobWFwKTsKICBLIF9nZXRWYWx1ZShfU3BsYXlUcmVlTm9kZTxLPiBub2RlKSA9PiBub2RlLmtleTsKfQoKY2xhc3MgX1NwbGF5VHJlZVZhbHVlSXRlcmF0b3I8SywgVj4gZXh0ZW5kcyBfU3BsYXlUcmVlSXRlcmF0b3I8SywgVj4gewogIF9TcGxheVRyZWVWYWx1ZUl0ZXJhdG9yKFNwbGF5VHJlZU1hcDxLLCBWPiBtYXApIDogc3VwZXIobWFwKTsKICBWIF9nZXRWYWx1ZShfU3BsYXlUcmVlTm9kZTxLPiBub2RlKSB7CiAgICBfU3BsYXlUcmVlTWFwTm9kZTxLLCBWPiBtYXBOb2RlID0gbm9kZTsKICAgIHJldHVybiBtYXBOb2RlLnZhbHVlOwogIH0KfQoKY2xhc3MgX1NwbGF5VHJlZU5vZGVJdGVyYXRvcjxLPgogICAgZXh0ZW5kcyBfU3BsYXlUcmVlSXRlcmF0b3I8SywgX1NwbGF5VHJlZU5vZGU8Sz4+IHsKICBfU3BsYXlUcmVlTm9kZUl0ZXJhdG9yKF9TcGxheVRyZWU8SywgX1NwbGF5VHJlZU5vZGU8Sz4+IHRyZWUpIDogc3VwZXIodHJlZSk7CiAgX1NwbGF5VHJlZU5vZGVJdGVyYXRvci5zdGFydEF0KAogICAgICBfU3BsYXlUcmVlPEssIF9TcGxheVRyZWVOb2RlPEs+PiB0cmVlLCBLIHN0YXJ0S2V5KQogICAgICA6IHN1cGVyLnN0YXJ0QXQodHJlZSwgc3RhcnRLZXkpOwogIF9TcGxheVRyZWVOb2RlPEs+IF9nZXRWYWx1ZShfU3BsYXlUcmVlTm9kZTxLPiBub2RlKSA9PiBub2RlOwp9CgovLy8gQSBbU2V0XSBvZiBvYmplY3RzIHRoYXQgY2FuIGJlIG9yZGVyZWQgcmVsYXRpdmUgdG8gZWFjaCBvdGhlci4KLy8vCi8vLyBUaGUgc2V0IGlzIGJhc2VkIG9uIGEgc2VsZi1iYWxhbmNpbmcgYmluYXJ5IHRyZWUuIEl0IGFsbG93cyBtb3N0IG9wZXJhdGlvbnMKLy8vIGluIGFtb3J0aXplZCBsb2dhcml0aG1pYyB0aW1lLgovLy8KLy8vIEVsZW1lbnRzIG9mIHRoZSBzZXQgYXJlIGNvbXBhcmVkIHVzaW5nIHRoZSBgY29tcGFyZWAgZnVuY3Rpb24gcGFzc2VkIGluCi8vLyB0aGUgY29uc3RydWN0b3IsIGJvdGggZm9yIG9yZGVyaW5nIGFuZCBmb3IgZXF1YWxpdHkuCi8vLyBJZiB0aGUgc2V0IGNvbnRhaW5zIG9ubHkgYW4gb2JqZWN0IGBhYCwgdGhlbiBgc2V0LmNvbnRhaW5zKGIpYAovLy8gd2lsbCByZXR1cm4gYHRydWVgIGlmIGFuZCBvbmx5IGlmIGBjb21wYXJlKGEsIGIpID09IDBgLAovLy8gYW5kIHRoZSB2YWx1ZSBvZiBgYSA9PSBiYCBpcyBub3QgZXZlbiBjaGVja2VkLgovLy8gSWYgdGhlIGNvbXBhcmUgZnVuY3Rpb24gaXMgb21pdHRlZCwgdGhlIG9iamVjdHMgYXJlIGFzc3VtZWQgdG8gYmUKLy8vIFtDb21wYXJhYmxlXSwgYW5kIGFyZSBjb21wYXJlZCB1c2luZyB0aGVpciBbQ29tcGFyYWJsZS5jb21wYXJlVG9dIG1ldGhvZC4KLy8vIE5vbi1jb21wYXJhYmxlIG9iamVjdHMgKGluY2x1ZGluZyBgbnVsbGApIHdpbGwgbm90IHdvcmsgYXMgYW4gZWxlbWVudAovLy8gaW4gdGhhdCBjYXNlLgpjbGFzcyBTcGxheVRyZWVTZXQ8RT4gZXh0ZW5kcyBfU3BsYXlUcmVlPEUsIF9TcGxheVRyZWVOb2RlPEU+PgogICAgd2l0aCBJdGVyYWJsZU1peGluPEU+LCBTZXRNaXhpbjxFPiB7CiAgX1NwbGF5VHJlZU5vZGU8RT4gX3Jvb3Q7CiAgZmluYWwgX1NwbGF5VHJlZU5vZGU8RT4gX2R1bW15ID0gX1NwbGF5VHJlZU5vZGU8RT4obnVsbCk7CgogIENvbXBhcmF0b3I8RT4gX2NvbXBhcmF0b3I7CiAgX1ByZWRpY2F0ZSBfdmFsaWRLZXk7CgogIC8vLyBDcmVhdGUgYSBuZXcgW1NwbGF5VHJlZVNldF0gd2l0aCB0aGUgZ2l2ZW4gY29tcGFyZSBmdW5jdGlvbi4KICAvLy8KICAvLy8gSWYgdGhlIFtjb21wYXJlXSBmdW5jdGlvbiBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBbQ29tcGFyYWJsZS5jb21wYXJlXSwKICAvLy8gYW5kIHRoZSBlbGVtZW50cyBtdXN0IGJlIGNvbXBhcmFibGUuCiAgLy8vCiAgLy8vIEEgcHJvdmlkZWQgYGNvbXBhcmVgIGZ1bmN0aW9uIG1heSBub3Qgd29yayBvbiBhbGwgb2JqZWN0cy4gSXQgbWF5IG5vdCBldmVuCiAgLy8vIHdvcmsgb24gYWxsIGBFYCBpbnN0YW5jZXMuCiAgLy8vCiAgLy8vIEZvciBvcGVyYXRpb25zIHRoYXQgYWRkIGVsZW1lbnRzIHRvIHRoZSBzZXQsIHRoZSB1c2VyIGlzIHN1cHBvc2VkIHRvIG5vdAogIC8vLyBwYXNzIGluIG9iamVjdHMgdGhhdCBkb2Vzbid0IHdvcmsgd2l0aCB0aGUgY29tcGFyZSBmdW5jdGlvbi4KICAvLy8KICAvLy8gVGhlIG1ldGhvZHMgW2NvbnRhaW5zXSwgW3JlbW92ZV0sIFtsb29rdXBdLCBbcmVtb3ZlQWxsXSBvciBbcmV0YWluQWxsXQogIC8vLyBhcmUgdHlwZWQgdG8gYWNjZXB0IGFueSBvYmplY3QocyksIGFuZCB0aGUgW2lzVmFsaWRLZXldIHRlc3QgY2FuIHVzZWQgdG8KICAvLy8gZmlsdGVyIHRob3NlIG9iamVjdHMgYmVmb3JlIGhhbmRpbmcgdGhlbSB0byB0aGUgYGNvbXBhcmVgIGZ1bmN0aW9uLgogIC8vLwogIC8vLyBJZiBbaXNWYWxpZEtleV0gaXMgcHJvdmlkZWQsIG9ubHkgdmFsdWVzIHNhdGlzZnlpbmcgYGlzVmFsaWRLZXkob3RoZXIpYAogIC8vLyBhcmUgY29tcGFyZWQgdXNpbmcgdGhlIGBjb21wYXJlYCBtZXRob2QgaW4gdGhlIG1ldGhvZHMgbWVudGlvbmVkIGFib3ZlLgogIC8vLyBJZiB0aGUgYGlzVmFsaWRLZXlgIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgZm9yIGFuIG9iamVjdCwgaXQgaXMgYXNzdW1lZCB0bwogIC8vLyBub3QgYmUgaW4gdGhlIHNldC4KICAvLy8KICAvLy8gSWYgb21pdHRlZCwgdGhlIGBpc1ZhbGlkS2V5YCBmdW5jdGlvbiBkZWZhdWx0cyB0byBjaGVja2luZyBhZ2FpbnN0IHRoZQogIC8vLyB0eXBlIHBhcmFtZXRlcjogYG90aGVyIGlzIEVgLgogIFNwbGF5VHJlZVNldChbaW50IGNvbXBhcmUoRSBrZXkxLCBFIGtleTIpLCBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KV0pCiAgICAgIDogX2NvbXBhcmF0b3IgPSBjb21wYXJlID8/IF9kZWZhdWx0Q29tcGFyZTxFPigpLAogICAgICAgIF92YWxpZEtleSA9IGlzVmFsaWRLZXkgPz8gKCh2KSA9PiB2IGlzIEUpOwoKICAvLy8gQ3JlYXRlcyBhIFtTcGxheVRyZWVTZXRdIHRoYXQgY29udGFpbnMgYWxsIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIFRoZSBzZXQgd29ya3MgYXMgaWYgY3JlYXRlZCBieSBgbmV3IFNwbGF5VHJlZVNldDxFPihjb21wYXJlLCBpc1ZhbGlkS2V5KWAuCiAgLy8vCiAgLy8vIEFsbCB0aGUgW2VsZW1lbnRzXSBzaG91bGQgYmUgaW5zdGFuY2VzIG9mIFtFXSBhbmQgdmFsaWQgYXJndW1lbnRzIHRvCiAgLy8vIFtjb21wYXJlXS4KICAvLy8gVGhlIGBlbGVtZW50c2AgaXRlcmFibGUgaXRzZWxmIG1heSBoYXZlIGFueSBlbGVtZW50IHR5cGUsIHNvIHRoaXMKICAvLy8gY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8gZG93bi1jYXN0IGEgYFNldGAsIGZvciBleGFtcGxlIGFzOgogIC8vLyBgYGBkYXJ0CiAgLy8vIFNldDxTdXBlclR5cGU+IHN1cGVyU2V0ID0gLi4uOwogIC8vLyBTZXQ8U3ViVHlwZT4gc3ViU2V0ID0KICAvLy8gICAgIG5ldyBTcGxheVRyZWVTZXQ8U3ViVHlwZT4uZnJvbShzdXBlclNldC53aGVyZVR5cGU8U3ViVHlwZT4oKSk7CiAgLy8vIGBgYAogIGZhY3RvcnkgU3BsYXlUcmVlU2V0LmZyb20oSXRlcmFibGUgZWxlbWVudHMsCiAgICAgIFtpbnQgY29tcGFyZShFIGtleTEsIEUga2V5MiksIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpXSkgewogICAgU3BsYXlUcmVlU2V0PEU+IHJlc3VsdCA9IFNwbGF5VHJlZVNldDxFPihjb21wYXJlLCBpc1ZhbGlkS2V5KTsKICAgIGZvciAoZmluYWwgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICBFIGUgPSBlbGVtZW50OwogICAgICByZXN1bHQuYWRkKGUpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBDcmVhdGVzIGEgW1NwbGF5VHJlZVNldF0gZnJvbSBbZWxlbWVudHNdLgogIC8vLwogIC8vLyBUaGUgc2V0IHdvcmtzIGFzIGlmIGNyZWF0ZWQgYnkgYG5ldyBTcGxheVRyZWVTZXQ8RT4oY29tcGFyZSwgaXNWYWxpZEtleSlgLgogIC8vLwogIC8vLyBBbGwgdGhlIFtlbGVtZW50c10gc2hvdWxkIGJlIHZhbGlkIGFzIGFyZ3VtZW50cyB0byB0aGUgW2NvbXBhcmVdIGZ1bmN0aW9uLgogIGZhY3RvcnkgU3BsYXlUcmVlU2V0Lm9mKEl0ZXJhYmxlPEU+IGVsZW1lbnRzLAogICAgICAgICAgW2ludCBjb21wYXJlKEUga2V5MSwgRSBrZXkyKSwgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSldKSA9PgogICAgICBTcGxheVRyZWVTZXQoY29tcGFyZSwgaXNWYWxpZEtleSkuLmFkZEFsbChlbGVtZW50cyk7CgogIFNldDxUPiBfbmV3U2V0PFQ+KCkgPT4KICAgICAgU3BsYXlUcmVlU2V0PFQ+KChUIGEsIFQgYikgPT4gX2NvbXBhcmF0b3IoYSBhcyBFLCBiIGFzIEUpLCBfdmFsaWRLZXkpOwoKICBTZXQ8Uj4gY2FzdDxSPigpID0+IFNldC5jYXN0RnJvbTxFLCBSPih0aGlzLCBuZXdTZXQ6IF9uZXdTZXQpOwogIGludCBfY29tcGFyZShFIGUxLCBFIGUyKSA9PiBfY29tcGFyYXRvcihlMSwgZTIpOwoKICAvLyBGcm9tIEl0ZXJhYmxlLgoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gX1NwbGF5VHJlZUtleUl0ZXJhdG9yPEU+KHRoaXMpOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfY291bnQ7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfcm9vdCA9PSBudWxsOwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX3Jvb3QgIT0gbnVsbDsKCiAgRSBnZXQgZmlyc3QgewogICAgaWYgKF9jb3VudCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHJldHVybiBfZmlyc3Qua2V5OwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBpZiAoX2NvdW50ID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgcmV0dXJuIF9sYXN0LmtleTsKICB9CgogIEUgZ2V0IHNpbmdsZSB7CiAgICBpZiAoX2NvdW50ID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgaWYgKF9jb3VudCA+IDEpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgIHJldHVybiBfcm9vdC5rZXk7CiAgfQoKICAvLyBGcm9tIFNldC4KICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICByZXR1cm4gX3ZhbGlkS2V5KGVsZW1lbnQpICYmIF9zcGxheShlbGVtZW50KSA9PSAwOwogIH0KCiAgYm9vbCBhZGQoRSBlbGVtZW50KSB7CiAgICBpbnQgY29tcGFyZSA9IF9zcGxheShlbGVtZW50KTsKICAgIGlmIChjb21wYXJlID09IDApIHJldHVybiBmYWxzZTsKICAgIF9hZGROZXdSb290KF9TcGxheVRyZWVOb2RlKGVsZW1lbnQpLCBjb21wYXJlKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgYm9vbCByZW1vdmUoT2JqZWN0IG9iamVjdCkgewogICAgaWYgKCFfdmFsaWRLZXkob2JqZWN0KSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9yZW1vdmUob2JqZWN0KSAhPSBudWxsOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZWxlbWVudHMpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgIGludCBjb21wYXJlID0gX3NwbGF5KGVsZW1lbnQpOwogICAgICBpZiAoY29tcGFyZSAhPSAwKSB7CiAgICAgICAgX2FkZE5ld1Jvb3QoX1NwbGF5VHJlZU5vZGUoZWxlbWVudCksIGNvbXBhcmUpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHJlbW92ZUFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICBmb3IgKE9iamVjdCBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgIGlmIChfdmFsaWRLZXkoZWxlbWVudCkpIF9yZW1vdmUoZWxlbWVudCk7CiAgICB9CiAgfQoKICB2b2lkIHJldGFpbkFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICAvLyBCdWlsZCBhIHNldCB3aXRoIHRoZSBzYW1lIHNlbnNlIG9mIGVxdWFsaXR5IGFzIHRoaXMgc2V0LgogICAgU3BsYXlUcmVlU2V0PEU+IHJldGFpblNldCA9IFNwbGF5VHJlZVNldDxFPihfY29tcGFyYXRvciwgX3ZhbGlkS2V5KTsKICAgIGludCBtb2RpZmljYXRpb25Db3VudCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIGZvciAoT2JqZWN0IG9iamVjdCBpbiBlbGVtZW50cykgewogICAgICBpZiAobW9kaWZpY2F0aW9uQ291bnQgIT0gX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgICAgLy8gVGhlIGl0ZXJhdG9yIHNob3VsZCBub3QgaGF2ZSBzaWRlIGVmZmVjdHMuCiAgICAgICAgdGhyb3cgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICAgIC8vIEVxdWl2YWxlbnQgdG8gdGhpcy5jb250YWlucyhvYmplY3QpLgogICAgICBpZiAoX3ZhbGlkS2V5KG9iamVjdCkgJiYgX3NwbGF5KG9iamVjdCkgPT0gMCkgewogICAgICAgIHJldGFpblNldC5hZGQoX3Jvb3Qua2V5KTsKICAgICAgfQogICAgfQogICAgLy8gVGFrZSBvdmVyIHRoZSBlbGVtZW50cyBmcm9tIHRoZSByZXRhaW5lZCBzZXQsIGlmIGl0IGRpZmZlcnMuCiAgICBpZiAocmV0YWluU2V0Ll9jb3VudCAhPSBfY291bnQpIHsKICAgICAgX3Jvb3QgPSByZXRhaW5TZXQuX3Jvb3Q7CiAgICAgIF9jb3VudCA9IHJldGFpblNldC5fY291bnQ7CiAgICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwogICAgfQogIH0KCiAgRSBsb29rdXAoT2JqZWN0IG9iamVjdCkgewogICAgaWYgKCFfdmFsaWRLZXkob2JqZWN0KSkgcmV0dXJuIG51bGw7CiAgICBpbnQgY29tcCA9IF9zcGxheShvYmplY3QpOwogICAgaWYgKGNvbXAgIT0gMCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX3Jvb3Qua2V5OwogIH0KCiAgU2V0PEU+IGludGVyc2VjdGlvbihTZXQ8T2JqZWN0PiBvdGhlcikgewogICAgU2V0PEU+IHJlc3VsdCA9IFNwbGF5VHJlZVNldDxFPihfY29tcGFyYXRvciwgX3ZhbGlkS2V5KTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKG90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKSByZXN1bHQuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFNldDxFPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSB7CiAgICBTZXQ8RT4gcmVzdWx0ID0gU3BsYXlUcmVlU2V0PEU+KF9jb21wYXJhdG9yLCBfdmFsaWRLZXkpOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoIW90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKSByZXN1bHQuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpIHsKICAgIHJldHVybiBfY2xvbmUoKS4uYWRkQWxsKG90aGVyKTsKICB9CgogIFNwbGF5VHJlZVNldDxFPiBfY2xvbmUoKSB7CiAgICB2YXIgc2V0ID0gU3BsYXlUcmVlU2V0PEU+KF9jb21wYXJhdG9yLCBfdmFsaWRLZXkpOwogICAgc2V0Ll9jb3VudCA9IF9jb3VudDsKICAgIHNldC5fcm9vdCA9IF9jb3B5Tm9kZShfcm9vdCk7CiAgICByZXR1cm4gc2V0OwogIH0KCiAgLy8gQ29waWVzIHRoZSBzdHJ1Y3R1cmUgb2YgYSBTcGxheVRyZWUgaW50byBhIG5ldyBzaW1pbGFyIHN0cnVjdHVyZS4KICAvLyBXb3JrcyBvbiBfU3BsYXlUcmVlTWFwTm9kZSBhcyB3ZWxsLCBidXQgb25seSBjb3BpZXMgdGhlIGtleXMsCiAgX1NwbGF5VHJlZU5vZGU8RT4gX2NvcHlOb2RlKF9TcGxheVRyZWVOb2RlPEU+IG5vZGUpIHsKICAgIGlmIChub2RlID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIF9TcGxheVRyZWVOb2RlPEU+KG5vZGUua2V5KQogICAgICAuLmxlZnQgPSBfY29weU5vZGUobm9kZS5sZWZ0KQogICAgICAuLnJpZ2h0ID0gX2NvcHlOb2RlKG5vZGUucmlnaHQpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIF9jbGVhcigpOwogIH0KCiAgU2V0PEU+IHRvU2V0KCkgPT4gX2Nsb25lKCk7CgogIFN0cmluZyB0b1N0cmluZygpID0+IEl0ZXJhYmxlQmFzZS5pdGVyYWJsZVRvRnVsbFN0cmluZyh0aGlzLCAneycsICd9Jyk7Cn0Kg0EATk48ARkBMAFCJBoPGhsBHAIBJgQyOgs1AgE5BEMfQCo/RjUSHAFJPhMBKxIBQAYvHgE/Bjs8FwE3IQFFHAEnIAFJRkdFQgZJKBYiATNGSEIYGRoOEykWKTAYGzAkHxkrChceGSAdKjEYGiQkHhksChYeGCEPDwgGER8gISEVARkYExEEAUoZSikmAUoZTUopJgEYJBwgGQ4cHhsNIEglRw8bBhoTBAE8BkoQKg4aGRQOBhwUGSAaDRoeGQYSBAEUJB4SBAETJB4SBAESEhAaBAIBFRoCAUcBJUEUJyIUBDkaAgFDBFAjBEg5RDwzRk5EEgRLTEdMTBRIGiFOAR0YAU03MwFNBkMwJ0ZJGxUIEwQBTStLPgFPEgZPOAZJRAZMJTcXGCMoRkMQBAFJBk86Bk0lBkhLRkY2EAQBOwEcAR4mGR4XHAgGEQQBGSY0LxEEASYvRSgcFRsOBjYEAScvHBUaBjAiGjMvBiUaUBkGNhIEASElGQgEARUcBAEjASlJHzQfBgQBExMEAREOBAEhLwQBJSkpHS4wMwpCGggUBgEZBAE6AUEBShEkFwQBSRAkFgQBTygbLyQcJCkjIRkGFQQBTygbLyQcJCojIBgGFQQCAUEwASIGPT87JQY/QwEwBj0rBkY7GgFHBkwTARQiATwWNikpBAFQFjckKSQXSzENIQYEARIrJAQBORsbGAYEAT4GL0JCLTkiFx8sDSUyJAYEARQ6MAY6ShlJFR0bFAZEJgYrMREEAScCAUQqJSIpPwETTx8sEAQCAUkbJiEoQwIBQkwzAgFHQCgsGgQCASA3TyI5Jz8CAUMEUCMETDlDPDNGTkoSPykbPAEdGAFDBlErBlEhBk9DBk1PSgZOTlEZBk0kTTczAT0GUQZLEUhEDiUcSQovRkMmFRUGEwQBMAZRBlEwSzsBGU0BQTMBFAE+ARwlKAEQPRcEAQ89FgQBET06FgQBDyI3BAEYIyQzEQQBHyokBAEmIiUaNwgGBAEuJzAGBAEuQEkwJjU2MQguNiIIBkQmHyEcBgQBHCkfIBYEASs9HjgGEwQBKT0eOQYTBAEfJAQBHTcZIhAEAUdDOCMnJCcEAREOBAEeAUoCAR9kYXJ0OmNvbGxlY3Rpb24vc3BsYXlfdHJlZS5kYXJ0NW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvY29sbGVjdGlvbl9wYXRjaC5kYXJ0wABmFC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTm90ZTogdGhlIFZNIGNvbmNhdGVuYXRlcyBhbGwgcGF0Y2ggZmlsZXMgaW50byBhIHNpbmdsZSBwYXRjaCBmaWxlLiBUaGlzCi8vLyBmaWxlIGlzIHRoZSBmaXJzdCBwYXRjaCBpbiAiZGFydDpjb2xsZWN0aW9uIiB3aGljaCBjb250YWlucyBhbGwgdGhlIGltcG9ydHMKLy8vIHVzZWQgYnkgcGF0Y2hlcyBvZiB0aGF0IGxpYnJhcnkuIFdlIHBsYW4gdG8gY2hhbmdlIHRoaXMgd2hlbiB3ZSBoYXZlIGEKLy8vIHNoYXJlZCBmcm9udCBlbmQgYW5kIHNpbXBseSB1c2UgcGFydHMuCgppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBhcyBpbnRlcm5hbDsKCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgcGF0Y2gsIEl0ZXJhYmxlRWxlbWVudEVycm9yOwoKaW1wb3J0ICJkYXJ0OnR5cGVkX2RhdGEiIHNob3cgVWludDMyTGlzdDsKCi8vLyBUaGVzZSBhcmUgdGhlIGFkZGl0aW9uYWwgcGFydHMgb2YgdGhpcyBwYXRjaCBsaWJyYXJ5OgovLyBwYXJ0ICJjb21wYWN0X2hhc2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgSGFzaE1hcDxLLCBWPiB7CiAgQHBhdGNoCiAgZmFjdG9yeSBIYXNoTWFwKAogICAgICB7Ym9vbCBlcXVhbHMoSyBrZXkxLCBLIGtleTIpLAogICAgICBpbnQgaGFzaENvZGUoSyBrZXkpLAogICAgICBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KX0pIHsKICAgIGlmIChpc1ZhbGlkS2V5ID09IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IG51bGwpIHsKICAgICAgICBpZiAoZXF1YWxzID09IG51bGwpIHsKICAgICAgICAgIHJldHVybiBuZXcgX0hhc2hNYXA8SywgVj4oKTsKICAgICAgICB9CiAgICAgICAgaGFzaENvZGUgPSBfZGVmYXVsdEhhc2hDb2RlOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChpZGVudGljYWwoaWRlbnRpdHlIYXNoQ29kZSwgaGFzaENvZGUpICYmCiAgICAgICAgICAgIGlkZW50aWNhbChpZGVudGljYWwsIGVxdWFscykpIHsKICAgICAgICAgIHJldHVybiBuZXcgX0lkZW50aXR5SGFzaE1hcDxLLCBWPigpOwogICAgICAgIH0KICAgICAgICBlcXVhbHMgPz89IF9kZWZhdWx0RXF1YWxzOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBoYXNoQ29kZSA/Pz0gX2RlZmF1bHRIYXNoQ29kZTsKICAgICAgZXF1YWxzID8/PSBfZGVmYXVsdEVxdWFsczsKICAgIH0KICAgIHJldHVybiBuZXcgX0N1c3RvbUhhc2hNYXA8SywgVj4oZXF1YWxzLCBoYXNoQ29kZSwgaXNWYWxpZEtleSk7CiAgfQoKICBAcGF0Y2gKICBmYWN0b3J5IEhhc2hNYXAuaWRlbnRpdHkoKSA9PiBuZXcgX0lkZW50aXR5SGFzaE1hcDxLLCBWPigpOwoKICBTZXQ8Sz4gX25ld0tleVNldCgpOwp9Cgpjb25zdCBpbnQgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLID0gMHgzZmZmZmZmZjsKCmNsYXNzIF9IYXNoTWFwPEssIFY+IGV4dGVuZHMgTWFwQmFzZTxLLCBWPiBpbXBsZW1lbnRzIEhhc2hNYXA8SywgVj4gewogIHN0YXRpYyBjb25zdCBpbnQgX0lOSVRJQUxfQ0FQQUNJVFkgPSA4OwoKICBpbnQgX2VsZW1lbnRDb3VudCA9IDA7CiAgTGlzdDxfSGFzaE1hcEVudHJ5PEssIFY+PiBfYnVja2V0cyA9CiAgICAgIG5ldyBMaXN0PF9IYXNoTWFwRW50cnk8SywgVj4+KF9JTklUSUFMX0NBUEFDSVRZKTsKICBpbnQgX21vZGlmaWNhdGlvbkNvdW50ID0gMDsKCiAgaW50IGdldCBsZW5ndGggPT4gX2VsZW1lbnRDb3VudDsKICBib29sIGdldCBpc0VtcHR5ID0+IF9lbGVtZW50Q291bnQgPT0gMDsKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9lbGVtZW50Q291bnQgIT0gMDsKCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gbmV3IF9IYXNoTWFwS2V5SXRlcmFibGU8SywgVj4odGhpcyk7CiAgSXRlcmFibGU8Vj4gZ2V0IHZhbHVlcyA9PiBuZXcgX0hhc2hNYXBWYWx1ZUl0ZXJhYmxlPEssIFY+KHRoaXMpOwoKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0ga2V5Lmhhc2hDb2RlOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChidWNrZXRzLmxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgZW50cnkua2V5ID09IGtleSkgcmV0dXJuIHRydWU7CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpIHsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGxlbmd0aCA9IGJ1Y2tldHMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YXIgZW50cnkgPSBidWNrZXRzW2ldOwogICAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICAgIGlmIChlbnRyeS52YWx1ZSA9PSB2YWx1ZSkgcmV0dXJuIHRydWU7CiAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBWIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0ga2V5Lmhhc2hDb2RlOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChidWNrZXRzLmxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgZW50cnkua2V5ID09IGtleSkgewogICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTsKICAgICAgfQogICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICBmaW5hbCBoYXNoQ29kZSA9IGtleS5oYXNoQ29kZTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGxlbmd0aCA9IGJ1Y2tldHMubGVuZ3RoOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChsZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIGVudHJ5LmtleSA9PSBrZXkpIHsKICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgICBfYWRkRW50cnkoYnVja2V0cywgaW5kZXgsIGxlbmd0aCwga2V5LCB2YWx1ZSwgaGFzaENvZGUpOwogIH0KCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSB7CiAgICBmaW5hbCBoYXNoQ29kZSA9IGtleS5oYXNoQ29kZTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGxlbmd0aCA9IGJ1Y2tldHMubGVuZ3RoOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChsZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIGVudHJ5LmtleSA9PSBrZXkpIHsKICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7CiAgICAgIH0KICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgZmluYWwgc3RhbXAgPSBfbW9kaWZpY2F0aW9uQ291bnQ7CiAgICBmaW5hbCBWIHZhbHVlID0gaWZBYnNlbnQoKTsKICAgIGlmIChzdGFtcCA9PSBfbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgX2FkZEVudHJ5KGJ1Y2tldHMsIGluZGV4LCBsZW5ndGgsIGtleSwgdmFsdWUsIGhhc2hDb2RlKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXNba2V5XSA9IHZhbHVlOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSB7CiAgICBvdGhlci5mb3JFYWNoKChLIGtleSwgViB2YWx1ZSkgewogICAgICB0aGlzW2tleV0gPSB2YWx1ZTsKICAgIH0pOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEsga2V5LCBWIHZhbHVlKSkgewogICAgZmluYWwgc3RhbXAgPSBfbW9kaWZpY2F0aW9uQ291bnQ7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBsZW5ndGggPSBidWNrZXRzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpXTsKICAgICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgICBhY3Rpb24oZW50cnkua2V5LCBlbnRyeS52YWx1ZSk7CiAgICAgICAgaWYgKHN0YW1wICE9IF9tb2RpZmljYXRpb25Db3VudCkgewogICAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgICB9CiAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgICB9CiAgICB9CiAgfQoKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBmaW5hbCBoYXNoQ29kZSA9IGtleS5oYXNoQ29kZTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAoYnVja2V0cy5sZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgX0hhc2hNYXBFbnRyeTxLLCBWPiBwcmV2aW91cyA9IG51bGw7CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBmaW5hbCBuZXh0ID0gZW50cnkubmV4dDsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIGVudHJ5LmtleSA9PSBrZXkpIHsKICAgICAgICBfcmVtb3ZlRW50cnkoZW50cnksIHByZXZpb3VzLCBpbmRleCk7CiAgICAgICAgX2VsZW1lbnRDb3VudC0tOwogICAgICAgIF9tb2RpZmljYXRpb25Db3VudCA9CiAgICAgICAgICAgIChfbW9kaWZpY2F0aW9uQ291bnQgKyAxKSAmIF9NT0RJRklDQVRJT05fQ09VTlRfTUFTSzsKICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7CiAgICAgIH0KICAgICAgcHJldmlvdXMgPSBlbnRyeTsKICAgICAgZW50cnkgPSBuZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgX2J1Y2tldHMgPSBuZXcgTGlzdChfSU5JVElBTF9DQVBBQ0lUWSk7CiAgICBpZiAoX2VsZW1lbnRDb3VudCA+IDApIHsKICAgICAgX2VsZW1lbnRDb3VudCA9IDA7CiAgICAgIF9tb2RpZmljYXRpb25Db3VudCA9IChfbW9kaWZpY2F0aW9uQ291bnQgKyAxKSAmIF9NT0RJRklDQVRJT05fQ09VTlRfTUFTSzsKICAgIH0KICB9CgogIHZvaWQgX3JlbW92ZUVudHJ5KF9IYXNoTWFwRW50cnk8SywgVj4gZW50cnksCiAgICAgIF9IYXNoTWFwRW50cnk8SywgVj4gcHJldmlvdXNJbkJ1Y2tldCwgaW50IGJ1Y2tldEluZGV4KSB7CiAgICBpZiAocHJldmlvdXNJbkJ1Y2tldCA9PSBudWxsKSB7CiAgICAgIF9idWNrZXRzW2J1Y2tldEluZGV4XSA9IGVudHJ5Lm5leHQ7CiAgICB9IGVsc2UgewogICAgICBwcmV2aW91c0luQnVja2V0Lm5leHQgPSBlbnRyeS5uZXh0OwogICAgfQogIH0KCiAgdm9pZCBfYWRkRW50cnkoTGlzdDxfSGFzaE1hcEVudHJ5PEssIFY+PiBidWNrZXRzLCBpbnQgaW5kZXgsIGludCBsZW5ndGgsCiAgICAgIEsga2V5LCBWIHZhbHVlLCBpbnQgaGFzaENvZGUpIHsKICAgIGZpbmFsIGVudHJ5ID0gbmV3IF9IYXNoTWFwRW50cnk8SywgVj4oa2V5LCB2YWx1ZSwgaGFzaENvZGUsIGJ1Y2tldHNbaW5kZXhdKTsKICAgIGJ1Y2tldHNbaW5kZXhdID0gZW50cnk7CiAgICBmaW5hbCBuZXdFbGVtZW50cyA9IF9lbGVtZW50Q291bnQgKyAxOwogICAgX2VsZW1lbnRDb3VudCA9IG5ld0VsZW1lbnRzOwogICAgLy8gSWYgd2UgZW5kIHVwIHdpdGggbW9yZSB0aGFuIDc1JSBub24tZW1wdHkgZW50cmllcywgd2UKICAgIC8vIHJlc2l6ZSB0aGUgYmFja2luZyBzdG9yZS4KICAgIGlmICgobmV3RWxlbWVudHMgPDwgMikgPiAoKGxlbmd0aCA8PCAxKSArIGxlbmd0aCkpIF9yZXNpemUoKTsKICAgIF9tb2RpZmljYXRpb25Db3VudCA9IChfbW9kaWZpY2F0aW9uQ291bnQgKyAxKSAmIF9NT0RJRklDQVRJT05fQ09VTlRfTUFTSzsKICB9CgogIHZvaWQgX3Jlc2l6ZSgpIHsKICAgIGZpbmFsIG9sZEJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIG9sZExlbmd0aCA9IG9sZEJ1Y2tldHMubGVuZ3RoOwogICAgZmluYWwgbmV3TGVuZ3RoID0gb2xkTGVuZ3RoIDw8IDE7CiAgICBmaW5hbCBuZXdCdWNrZXRzID0gbmV3IExpc3Q8X0hhc2hNYXBFbnRyeTxLLCBWPj4obmV3TGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2xkTGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGVudHJ5ID0gb2xkQnVja2V0c1tpXTsKICAgICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgICBmaW5hbCBuZXh0ID0gZW50cnkubmV4dDsKICAgICAgICBmaW5hbCBoYXNoQ29kZSA9IGVudHJ5Lmhhc2hDb2RlOwogICAgICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAobmV3TGVuZ3RoIC0gMSk7CiAgICAgICAgZW50cnkubmV4dCA9IG5ld0J1Y2tldHNbaW5kZXhdOwogICAgICAgIG5ld0J1Y2tldHNbaW5kZXhdID0gZW50cnk7CiAgICAgICAgZW50cnkgPSBuZXh0OwogICAgICB9CiAgICB9CiAgICBfYnVja2V0cyA9IG5ld0J1Y2tldHM7CiAgfQoKICBTZXQ8Sz4gX25ld0tleVNldCgpID0+IG5ldyBfSGFzaFNldDxLPigpOwp9CgpjbGFzcyBfQ3VzdG9tSGFzaE1hcDxLLCBWPiBleHRlbmRzIF9IYXNoTWFwPEssIFY+IHsKICBmaW5hbCBfRXF1YWxpdHk8Sz4gX2VxdWFsczsKICBmaW5hbCBfSGFzaGVyPEs+IF9oYXNoQ29kZTsKICBmaW5hbCBfUHJlZGljYXRlIF92YWxpZEtleTsKICBfQ3VzdG9tSGFzaE1hcCh0aGlzLl9lcXVhbHMsIHRoaXMuX2hhc2hDb2RlLCB2YWxpZEtleSkKICAgICAgOiBfdmFsaWRLZXkgPSAodmFsaWRLZXkgIT0gbnVsbCkgPyB2YWxpZEtleSA6IG5ldyBfVHlwZVRlc3Q8Sz4oKS50ZXN0OwoKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpIHsKICAgIGlmICghX3ZhbGlkS2V5KGtleSkpIHJldHVybiBmYWxzZTsKICAgIGZpbmFsIGhhc2hDb2RlID0gX2hhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGJ1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBfZXF1YWxzKGVudHJ5LmtleSwga2V5KSkgcmV0dXJuIHRydWU7CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgaWYgKCFfdmFsaWRLZXkoa2V5KSkgcmV0dXJuIG51bGw7CiAgICBmaW5hbCBoYXNoQ29kZSA9IF9oYXNoQ29kZShrZXkpOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChidWNrZXRzLmxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgX2VxdWFscyhlbnRyeS5rZXksIGtleSkpIHsKICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7CiAgICAgIH0KICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgewogICAgZmluYWwgaGFzaENvZGUgPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGxlbmd0aCA9IGJ1Y2tldHMubGVuZ3RoOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChsZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIF9lcXVhbHMoZW50cnkua2V5LCBrZXkpKSB7CiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgX2FkZEVudHJ5KGJ1Y2tldHMsIGluZGV4LCBsZW5ndGgsIGtleSwgdmFsdWUsIGhhc2hDb2RlKTsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgZmluYWwgaGFzaENvZGUgPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGxlbmd0aCA9IGJ1Y2tldHMubGVuZ3RoOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChsZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIF9lcXVhbHMoZW50cnkua2V5LCBrZXkpKSB7CiAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlOwogICAgICB9CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIGludCBzdGFtcCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIFYgdmFsdWUgPSBpZkFic2VudCgpOwogICAgaWYgKHN0YW1wID09IF9tb2RpZmljYXRpb25Db3VudCkgewogICAgICBfYWRkRW50cnkoYnVja2V0cywgaW5kZXgsIGxlbmd0aCwga2V5LCB2YWx1ZSwgaGFzaENvZGUpOwogICAgfSBlbHNlIHsKICAgICAgdGhpc1trZXldID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBpZiAoIV92YWxpZEtleShrZXkpKSByZXR1cm4gbnVsbDsKICAgIGZpbmFsIGhhc2hDb2RlID0gX2hhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGJ1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIF9IYXNoTWFwRW50cnk8SywgVj4gcHJldmlvdXMgPSBudWxsOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgZmluYWwgbmV4dCA9IGVudHJ5Lm5leHQ7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBfZXF1YWxzKGVudHJ5LmtleSwga2V5KSkgewogICAgICAgIF9yZW1vdmVFbnRyeShlbnRyeSwgcHJldmlvdXMsIGluZGV4KTsKICAgICAgICBfZWxlbWVudENvdW50LS07CiAgICAgICAgX21vZGlmaWNhdGlvbkNvdW50ID0KICAgICAgICAgICAgKF9tb2RpZmljYXRpb25Db3VudCArIDEpICYgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLOwogICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTsKICAgICAgfQogICAgICBwcmV2aW91cyA9IGVudHJ5OwogICAgICBlbnRyeSA9IG5leHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIFNldDxLPiBfbmV3S2V5U2V0KCkgPT4gbmV3IF9DdXN0b21IYXNoU2V0PEs+KF9lcXVhbHMsIF9oYXNoQ29kZSwgX3ZhbGlkS2V5KTsKfQoKY2xhc3MgX0lkZW50aXR5SGFzaE1hcDxLLCBWPiBleHRlbmRzIF9IYXNoTWFwPEssIFY+IHsKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0gaWRlbnRpdHlIYXNoQ29kZShrZXkpOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChidWNrZXRzLmxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgaWRlbnRpY2FsKGVudHJ5LmtleSwga2V5KSkgcmV0dXJuIHRydWU7CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgewogICAgZmluYWwgaGFzaENvZGUgPSBpZGVudGl0eUhhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBidWNrZXRzID0gX2J1Y2tldHM7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGJ1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICB2YXIgZW50cnkgPSBidWNrZXRzW2luZGV4XTsKICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBlbnRyeS5oYXNoQ29kZSAmJiBpZGVudGljYWwoZW50cnkua2V5LCBrZXkpKSB7CiAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlOwogICAgICB9CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0gaWRlbnRpdHlIYXNoQ29kZShrZXkpOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgbGVuZ3RoID0gYnVja2V0cy5sZW5ndGg7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgaWRlbnRpY2FsKGVudHJ5LmtleSwga2V5KSkgewogICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIF9hZGRFbnRyeShidWNrZXRzLCBpbmRleCwgbGVuZ3RoLCBrZXksIHZhbHVlLCBoYXNoQ29kZSk7CiAgfQoKICBWIHB1dElmQWJzZW50KEsga2V5LCBWIGlmQWJzZW50KCkpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0gaWRlbnRpdHlIYXNoQ29kZShrZXkpOwogICAgZmluYWwgYnVja2V0cyA9IF9idWNrZXRzOwogICAgZmluYWwgbGVuZ3RoID0gYnVja2V0cy5sZW5ndGg7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKGxlbmd0aCAtIDEpOwogICAgdmFyIGVudHJ5ID0gYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gZW50cnkuaGFzaENvZGUgJiYgaWRlbnRpY2FsKGVudHJ5LmtleSwga2V5KSkgewogICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTsKICAgICAgfQogICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgICBmaW5hbCBzdGFtcCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIFYgdmFsdWUgPSBpZkFic2VudCgpOwogICAgaWYgKHN0YW1wID09IF9tb2RpZmljYXRpb25Db3VudCkgewogICAgICBfYWRkRW50cnkoYnVja2V0cywgaW5kZXgsIGxlbmd0aCwga2V5LCB2YWx1ZSwgaGFzaENvZGUpOwogICAgfSBlbHNlIHsKICAgICAgdGhpc1trZXldID0gdmFsdWU7CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICBmaW5hbCBoYXNoQ29kZSA9IGlkZW50aXR5SGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGJ1Y2tldHMgPSBfYnVja2V0czsKICAgIGZpbmFsIGluZGV4ID0gaGFzaENvZGUgJiAoYnVja2V0cy5sZW5ndGggLSAxKTsKICAgIHZhciBlbnRyeSA9IGJ1Y2tldHNbaW5kZXhdOwogICAgX0hhc2hNYXBFbnRyeTxLLCBWPiBwcmV2aW91cyA9IG51bGw7CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBmaW5hbCBuZXh0ID0gZW50cnkubmV4dDsKICAgICAgaWYgKGhhc2hDb2RlID09IGVudHJ5Lmhhc2hDb2RlICYmIGlkZW50aWNhbChlbnRyeS5rZXksIGtleSkpIHsKICAgICAgICBfcmVtb3ZlRW50cnkoZW50cnksIHByZXZpb3VzLCBpbmRleCk7CiAgICAgICAgX2VsZW1lbnRDb3VudC0tOwogICAgICAgIF9tb2RpZmljYXRpb25Db3VudCA9CiAgICAgICAgICAgIChfbW9kaWZpY2F0aW9uQ291bnQgKyAxKSAmIF9NT0RJRklDQVRJT05fQ09VTlRfTUFTSzsKICAgICAgICByZXR1cm4gZW50cnkudmFsdWU7CiAgICAgIH0KICAgICAgcHJldmlvdXMgPSBlbnRyeTsKICAgICAgZW50cnkgPSBuZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICBTZXQ8Sz4gX25ld0tleVNldCgpID0+IG5ldyBfSWRlbnRpdHlIYXNoU2V0PEs+KCk7Cn0KCmNsYXNzIF9IYXNoTWFwRW50cnk8SywgVj4gewogIGZpbmFsIEsga2V5OwogIFYgdmFsdWU7CiAgZmluYWwgaW50IGhhc2hDb2RlOwogIF9IYXNoTWFwRW50cnk8SywgVj4gbmV4dDsKICBfSGFzaE1hcEVudHJ5KHRoaXMua2V5LCB0aGlzLnZhbHVlLCB0aGlzLmhhc2hDb2RlLCB0aGlzLm5leHQpOwp9CgphYnN0cmFjdCBjbGFzcyBfSGFzaE1hcEl0ZXJhYmxlPEssIFYsIEU+CiAgICBleHRlbmRzIGludGVybmFsLkVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBfSGFzaE1hcDxLLCBWPiBfbWFwOwogIF9IYXNoTWFwSXRlcmFibGUodGhpcy5fbWFwKTsKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbWFwLmxlbmd0aDsKICBib29sIGdldCBpc0VtcHR5ID0+IF9tYXAuaXNFbXB0eTsKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9tYXAuaXNOb3RFbXB0eTsKfQoKY2xhc3MgX0hhc2hNYXBLZXlJdGVyYWJsZTxLLCBWPiBleHRlbmRzIF9IYXNoTWFwSXRlcmFibGU8SywgViwgSz4gewogIF9IYXNoTWFwS2V5SXRlcmFibGUoX0hhc2hNYXA8SywgVj4gbWFwKSA6IHN1cGVyKG1hcCk7CiAgSXRlcmF0b3I8Sz4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBfSGFzaE1hcEtleUl0ZXJhdG9yPEssIFY+KF9tYXApOwogIGJvb2wgY29udGFpbnMoT2JqZWN0IGtleSkgPT4gX21hcC5jb250YWluc0tleShrZXkpOwogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihLIGtleSkpIHsKICAgIF9tYXAuZm9yRWFjaCgoSyBrZXksIF8pIHsKICAgICAgYWN0aW9uKGtleSk7CiAgICB9KTsKICB9CgogIFNldDxLPiB0b1NldCgpID0+IF9tYXAuX25ld0tleVNldCgpLi5hZGRBbGwodGhpcyk7Cn0KCmNsYXNzIF9IYXNoTWFwVmFsdWVJdGVyYWJsZTxLLCBWPiBleHRlbmRzIF9IYXNoTWFwSXRlcmFibGU8SywgViwgVj4gewogIF9IYXNoTWFwVmFsdWVJdGVyYWJsZShfSGFzaE1hcDxLLCBWPiBtYXApIDogc3VwZXIobWFwKTsKICBJdGVyYXRvcjxWPiBnZXQgaXRlcmF0b3IgPT4gbmV3IF9IYXNoTWFwVmFsdWVJdGVyYXRvcjxLLCBWPihfbWFwKTsKICBib29sIGNvbnRhaW5zKE9iamVjdCB2YWx1ZSkgPT4gX21hcC5jb250YWluc1ZhbHVlKHZhbHVlKTsKICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oViB2YWx1ZSkpIHsKICAgIF9tYXAuZm9yRWFjaCgoXywgViB2YWx1ZSkgewogICAgICBhY3Rpb24odmFsdWUpOwogICAgfSk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfSGFzaE1hcEl0ZXJhdG9yPEssIFYsIEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIF9IYXNoTWFwPEssIFY+IF9tYXA7CiAgZmluYWwgaW50IF9zdGFtcDsKCiAgaW50IF9pbmRleCA9IDA7CiAgX0hhc2hNYXBFbnRyeTxLLCBWPiBfZW50cnk7CgogIF9IYXNoTWFwSXRlcmF0b3IodGhpcy5fbWFwKSA6IF9zdGFtcCA9IF9tYXAuX21vZGlmaWNhdGlvbkNvdW50OwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9zdGFtcCAhPSBfbWFwLl9tb2RpZmljYXRpb25Db3VudCkgewogICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKF9tYXApOwogICAgfQogICAgdmFyIGVudHJ5ID0gX2VudHJ5OwogICAgaWYgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgZmluYWwgbmV4dCA9IGVudHJ5Lm5leHQ7CiAgICAgIGlmIChuZXh0ICE9IG51bGwpIHsKICAgICAgICBfZW50cnkgPSBuZXh0OwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIF9lbnRyeSA9IG51bGw7CiAgICB9CiAgICBmaW5hbCBidWNrZXRzID0gX21hcC5fYnVja2V0czsKICAgIGZpbmFsIGxlbmd0aCA9IGJ1Y2tldHMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IF9pbmRleDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGVudHJ5ID0gYnVja2V0c1tpXTsKICAgICAgaWYgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgICBfaW5kZXggPSBpICsgMTsKICAgICAgICBfZW50cnkgPSBlbnRyeTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgX2luZGV4ID0gbGVuZ3RoOwogICAgcmV0dXJuIGZhbHNlOwogIH0KfQoKY2xhc3MgX0hhc2hNYXBLZXlJdGVyYXRvcjxLLCBWPiBleHRlbmRzIF9IYXNoTWFwSXRlcmF0b3I8SywgViwgSz4gewogIF9IYXNoTWFwS2V5SXRlcmF0b3IoX0hhc2hNYXA8SywgVj4gbWFwKSA6IHN1cGVyKG1hcCk7CiAgSyBnZXQgY3VycmVudCA9PiBfZW50cnk/LmtleTsKfQoKY2xhc3MgX0hhc2hNYXBWYWx1ZUl0ZXJhdG9yPEssIFY+IGV4dGVuZHMgX0hhc2hNYXBJdGVyYXRvcjxLLCBWLCBWPiB7CiAgX0hhc2hNYXBWYWx1ZUl0ZXJhdG9yKF9IYXNoTWFwPEssIFY+IG1hcCkgOiBzdXBlcihtYXApOwogIFYgZ2V0IGN1cnJlbnQgPT4gX2VudHJ5Py52YWx1ZTsKfQoKQHBhdGNoCmNsYXNzIEhhc2hTZXQ8RT4gewogIEBwYXRjaAogIGZhY3RvcnkgSGFzaFNldCgKICAgICAge2Jvb2wgZXF1YWxzKEUgZTEsIEUgZTIpLAogICAgICBpbnQgaGFzaENvZGUoRSBlKSwKICAgICAgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSl9KSB7CiAgICBpZiAoaXNWYWxpZEtleSA9PSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBudWxsKSB7CiAgICAgICAgaWYgKGVxdWFscyA9PSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gbmV3IF9IYXNoU2V0PEU+KCk7CiAgICAgICAgfQogICAgICAgIGhhc2hDb2RlID0gX2RlZmF1bHRIYXNoQ29kZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKGlkZW50aXR5SGFzaENvZGUsIGhhc2hDb2RlKSAmJgogICAgICAgICAgICBpZGVudGljYWwoaWRlbnRpY2FsLCBlcXVhbHMpKSB7CiAgICAgICAgICByZXR1cm4gbmV3IF9JZGVudGl0eUhhc2hTZXQ8RT4oKTsKICAgICAgICB9CiAgICAgICAgZXF1YWxzID8/PSBfZGVmYXVsdEVxdWFsczsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaGFzaENvZGUgPz89IF9kZWZhdWx0SGFzaENvZGU7CiAgICAgIGVxdWFscyA/Pz0gX2RlZmF1bHRFcXVhbHM7CiAgICB9CiAgICByZXR1cm4gbmV3IF9DdXN0b21IYXNoU2V0PEU+KGVxdWFscywgaGFzaENvZGUsIGlzVmFsaWRLZXkpOwogIH0KCiAgQHBhdGNoCiAgZmFjdG9yeSBIYXNoU2V0LmlkZW50aXR5KCkgPT4gbmV3IF9JZGVudGl0eUhhc2hTZXQ8RT4oKTsKfQoKY2xhc3MgX0hhc2hTZXQ8RT4gZXh0ZW5kcyBfU2V0QmFzZTxFPiBpbXBsZW1lbnRzIEhhc2hTZXQ8RT4gewogIHN0YXRpYyBjb25zdCBpbnQgX0lOSVRJQUxfQ0FQQUNJVFkgPSA4OwoKICBMaXN0PF9IYXNoU2V0RW50cnk8RT4+IF9idWNrZXRzID0KICAgICAgbmV3IExpc3Q8X0hhc2hTZXRFbnRyeTxFPj4oX0lOSVRJQUxfQ0FQQUNJVFkpOwogIGludCBfZWxlbWVudENvdW50ID0gMDsKICBpbnQgX21vZGlmaWNhdGlvbkNvdW50ID0gMDsKCiAgYm9vbCBfZXF1YWxzKGUxLCBlMikgPT4gZTEgPT0gZTI7CiAgaW50IF9oYXNoQ29kZShlKSA9PiBlLmhhc2hDb2RlOwoKICBzdGF0aWMgU2V0PFI+IF9uZXdFbXB0eTxSPigpID0+IG5ldyBfSGFzaFNldDxSPigpOwoKICAvLyBJdGVyYWJsZS4KCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBfSGFzaFNldEl0ZXJhdG9yPEU+KHRoaXMpOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfZWxlbWVudENvdW50OwoKICBib29sIGdldCBpc0VtcHR5ID0+IF9lbGVtZW50Q291bnQgPT0gMDsKCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfZWxlbWVudENvdW50ICE9IDA7CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IG9iamVjdCkgewogICAgaW50IGluZGV4ID0gX2hhc2hDb2RlKG9iamVjdCkgJiAoX2J1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICBfSGFzaFNldEVudHJ5PEU+IGVudHJ5ID0gX2J1Y2tldHNbaW5kZXhdOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgaWYgKF9lcXVhbHMoZW50cnkua2V5LCBvYmplY3QpKSByZXR1cm4gdHJ1ZTsKICAgICAgZW50cnkgPSBlbnRyeS5uZXh0OwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgRSBsb29rdXAoT2JqZWN0IG9iamVjdCkgewogICAgaW50IGluZGV4ID0gX2hhc2hDb2RlKG9iamVjdCkgJiAoX2J1Y2tldHMubGVuZ3RoIC0gMSk7CiAgICBfSGFzaFNldEVudHJ5PEU+IGVudHJ5ID0gX2J1Y2tldHNbaW5kZXhdOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgdmFyIGtleSA9IGVudHJ5LmtleTsKICAgICAgaWYgKF9lcXVhbHMoa2V5LCBvYmplY3QpKSByZXR1cm4ga2V5OwogICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIEUgZ2V0IGZpcnN0IHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2J1Y2tldHMubGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGVudHJ5ID0gX2J1Y2tldHNbaV07CiAgICAgIGlmIChlbnRyeSAhPSBudWxsKSB7CiAgICAgICAgcmV0dXJuIGVudHJ5LmtleTsKICAgICAgfQogICAgfQogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIGZvciAoaW50IGkgPSBfYnVja2V0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgewogICAgICB2YXIgZW50cnkgPSBfYnVja2V0c1tpXTsKICAgICAgaWYgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgICB3aGlsZSAoZW50cnkubmV4dCAhPSBudWxsKSB7CiAgICAgICAgICBlbnRyeSA9IGVudHJ5Lm5leHQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiBlbnRyeS5rZXk7CiAgICAgIH0KICAgIH0KICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgLy8gU2V0LgoKICBib29sIGFkZChFIGVsZW1lbnQpIHsKICAgIGZpbmFsIGhhc2hDb2RlID0gX2hhc2hDb2RlKGVsZW1lbnQpOwogICAgZmluYWwgaW5kZXggPSBoYXNoQ29kZSAmIChfYnVja2V0cy5sZW5ndGggLSAxKTsKICAgIF9IYXNoU2V0RW50cnk8RT4gZW50cnkgPSBfYnVja2V0c1tpbmRleF07CiAgICB3aGlsZSAoZW50cnkgIT0gbnVsbCkgewogICAgICBpZiAoX2VxdWFscyhlbnRyeS5rZXksIGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIF9hZGRFbnRyeShlbGVtZW50LCBoYXNoQ29kZSwgaW5kZXgpOwogICAgcmV0dXJuIHRydWU7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBvYmplY3RzKSB7CiAgICBmb3IgKEUgb2JqZWN0IGluIG9iamVjdHMpIHsKICAgICAgYWRkKG9iamVjdCk7CiAgICB9CiAgfQoKICBib29sIF9yZW1vdmUoT2JqZWN0IG9iamVjdCwgaW50IGhhc2hDb2RlKSB7CiAgICBmaW5hbCBpbmRleCA9IGhhc2hDb2RlICYgKF9idWNrZXRzLmxlbmd0aCAtIDEpOwogICAgX0hhc2hTZXRFbnRyeTxFPiBlbnRyeSA9IF9idWNrZXRzW2luZGV4XTsKICAgIF9IYXNoU2V0RW50cnk8RT4gcHJldmlvdXMgPSBudWxsOwogICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgaWYgKF9lcXVhbHMoZW50cnkua2V5LCBvYmplY3QpKSB7CiAgICAgICAgX0hhc2hTZXRFbnRyeTxFPiBuZXh0ID0gZW50cnkucmVtb3ZlKCk7CiAgICAgICAgaWYgKHByZXZpb3VzID09IG51bGwpIHsKICAgICAgICAgIF9idWNrZXRzW2luZGV4XSA9IG5leHQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHByZXZpb3VzLm5leHQgPSBuZXh0OwogICAgICAgIH0KICAgICAgICBfZWxlbWVudENvdW50LS07CiAgICAgICAgX21vZGlmaWNhdGlvbkNvdW50ID0KICAgICAgICAgICAgKF9tb2RpZmljYXRpb25Db3VudCArIDEpICYgX01PRElGSUNBVElPTl9DT1VOVF9NQVNLOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIHByZXZpb3VzID0gZW50cnk7CiAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBvYmplY3QpID0+IF9yZW1vdmUob2JqZWN0LCBfaGFzaENvZGUob2JqZWN0KSk7CgogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gb2JqZWN0c1RvUmVtb3ZlKSB7CiAgICBmb3IgKE9iamVjdCBvYmplY3QgaW4gb2JqZWN0c1RvUmVtb3ZlKSB7CiAgICAgIF9yZW1vdmUob2JqZWN0LCBfaGFzaENvZGUob2JqZWN0KSk7CiAgICB9CiAgfQoKICB2b2lkIF9maWx0ZXJXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwgYm9vbCByZW1vdmVNYXRjaGluZykgewogICAgaW50IGxlbmd0aCA9IF9idWNrZXRzLmxlbmd0aDsKICAgIGZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKICAgICAgX0hhc2hTZXRFbnRyeTxFPiBlbnRyeSA9IF9idWNrZXRzW2luZGV4XTsKICAgICAgX0hhc2hTZXRFbnRyeTxFPiBwcmV2aW91cyA9IG51bGw7CiAgICAgIHdoaWxlIChlbnRyeSAhPSBudWxsKSB7CiAgICAgICAgaW50IG1vZGlmaWNhdGlvbkNvdW50ID0gX21vZGlmaWNhdGlvbkNvdW50OwogICAgICAgIGJvb2wgdGVzdFJlc3VsdCA9IHRlc3QoZW50cnkua2V5KTsKICAgICAgICBpZiAobW9kaWZpY2F0aW9uQ291bnQgIT0gX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICAgIH0KICAgICAgICBpZiAodGVzdFJlc3VsdCA9PSByZW1vdmVNYXRjaGluZykgewogICAgICAgICAgX0hhc2hTZXRFbnRyeTxFPiBuZXh0ID0gZW50cnkucmVtb3ZlKCk7CiAgICAgICAgICBpZiAocHJldmlvdXMgPT0gbnVsbCkgewogICAgICAgICAgICBfYnVja2V0c1tpbmRleF0gPSBuZXh0OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcHJldmlvdXMubmV4dCA9IG5leHQ7CiAgICAgICAgICB9CiAgICAgICAgICBfZWxlbWVudENvdW50LS07CiAgICAgICAgICBfbW9kaWZpY2F0aW9uQ291bnQgPQogICAgICAgICAgICAgIChfbW9kaWZpY2F0aW9uQ291bnQgKyAxKSAmIF9NT0RJRklDQVRJT05fQ09VTlRfTUFTSzsKICAgICAgICAgIGVudHJ5ID0gbmV4dDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcHJldmlvdXMgPSBlbnRyeTsKICAgICAgICAgIGVudHJ5ID0gZW50cnkubmV4dDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIF9maWx0ZXJXaGVyZSh0ZXN0LCB0cnVlKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIF9maWx0ZXJXaGVyZSh0ZXN0LCBmYWxzZSk7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgX2J1Y2tldHMgPSBuZXcgTGlzdChfSU5JVElBTF9DQVBBQ0lUWSk7CiAgICBpZiAoX2VsZW1lbnRDb3VudCA+IDApIHsKICAgICAgX2VsZW1lbnRDb3VudCA9IDA7CiAgICAgIF9tb2RpZmljYXRpb25Db3VudCA9IChfbW9kaWZpY2F0aW9uQ291bnQgKyAxKSAmIF9NT0RJRklDQVRJT05fQ09VTlRfTUFTSzsKICAgIH0KICB9CgogIHZvaWQgX2FkZEVudHJ5KEUga2V5LCBpbnQgaGFzaENvZGUsIGludCBpbmRleCkgewogICAgX2J1Y2tldHNbaW5kZXhdID0gbmV3IF9IYXNoU2V0RW50cnk8RT4oa2V5LCBoYXNoQ29kZSwgX2J1Y2tldHNbaW5kZXhdKTsKICAgIGludCBuZXdFbGVtZW50cyA9IF9lbGVtZW50Q291bnQgKyAxOwogICAgX2VsZW1lbnRDb3VudCA9IG5ld0VsZW1lbnRzOwogICAgaW50IGxlbmd0aCA9IF9idWNrZXRzLmxlbmd0aDsKICAgIC8vIElmIHdlIGVuZCB1cCB3aXRoIG1vcmUgdGhhbiA3NSUgbm9uLWVtcHR5IGVudHJpZXMsIHdlCiAgICAvLyByZXNpemUgdGhlIGJhY2tpbmcgc3RvcmUuCiAgICBpZiAoKG5ld0VsZW1lbnRzIDw8IDIpID4gKChsZW5ndGggPDwgMSkgKyBsZW5ndGgpKSBfcmVzaXplKCk7CiAgICBfbW9kaWZpY2F0aW9uQ291bnQgPSAoX21vZGlmaWNhdGlvbkNvdW50ICsgMSkgJiBfTU9ESUZJQ0FUSU9OX0NPVU5UX01BU0s7CiAgfQoKICB2b2lkIF9yZXNpemUoKSB7CiAgICBpbnQgb2xkTGVuZ3RoID0gX2J1Y2tldHMubGVuZ3RoOwogICAgaW50IG5ld0xlbmd0aCA9IG9sZExlbmd0aCA8PCAxOwogICAgTGlzdCBvbGRCdWNrZXRzID0gX2J1Y2tldHM7CiAgICBMaXN0IG5ld0J1Y2tldHMgPSBuZXcgTGlzdDxfSGFzaFNldEVudHJ5PEU+PihuZXdMZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvbGRMZW5ndGg7IGkrKykgewogICAgICBfSGFzaFNldEVudHJ5PEU+IGVudHJ5ID0gb2xkQnVja2V0c1tpXTsKICAgICAgd2hpbGUgKGVudHJ5ICE9IG51bGwpIHsKICAgICAgICBfSGFzaFNldEVudHJ5PEU+IG5leHQgPSBlbnRyeS5uZXh0OwogICAgICAgIGludCBuZXdJbmRleCA9IGVudHJ5Lmhhc2hDb2RlICYgKG5ld0xlbmd0aCAtIDEpOwogICAgICAgIGVudHJ5Lm5leHQgPSBuZXdCdWNrZXRzW25ld0luZGV4XTsKICAgICAgICBuZXdCdWNrZXRzW25ld0luZGV4XSA9IGVudHJ5OwogICAgICAgIGVudHJ5ID0gbmV4dDsKICAgICAgfQogICAgfQogICAgX2J1Y2tldHMgPSBuZXdCdWNrZXRzOwogIH0KCiAgSGFzaFNldDxFPiBfbmV3U2V0KCkgPT4gbmV3IF9IYXNoU2V0PEU+KCk7CiAgSGFzaFNldDxSPiBfbmV3U2ltaWxhclNldDxSPigpID0+IG5ldyBfSGFzaFNldDxSPigpOwp9CgpjbGFzcyBfSWRlbnRpdHlIYXNoU2V0PEU+IGV4dGVuZHMgX0hhc2hTZXQ8RT4gewogIGludCBfaGFzaENvZGUoZSkgPT4gaWRlbnRpdHlIYXNoQ29kZShlKTsKICBib29sIF9lcXVhbHMoZTEsIGUyKSA9PiBpZGVudGljYWwoZTEsIGUyKTsKCiAgSGFzaFNldDxFPiBfbmV3U2V0KCkgPT4gbmV3IF9JZGVudGl0eUhhc2hTZXQ8RT4oKTsKICBIYXNoU2V0PFI+IF9uZXdTaW1pbGFyU2V0PFI+KCkgPT4gbmV3IF9JZGVudGl0eUhhc2hTZXQ8Uj4oKTsKfQoKY2xhc3MgX0N1c3RvbUhhc2hTZXQ8RT4gZXh0ZW5kcyBfSGFzaFNldDxFPiB7CiAgZmluYWwgX0VxdWFsaXR5PEU+IF9lcXVhbGl0eTsKICBmaW5hbCBfSGFzaGVyPEU+IF9oYXNoZXI7CiAgZmluYWwgX1ByZWRpY2F0ZSBfdmFsaWRLZXk7CiAgX0N1c3RvbUhhc2hTZXQodGhpcy5fZXF1YWxpdHksIHRoaXMuX2hhc2hlciwgYm9vbCB2YWxpZEtleShPYmplY3QgbykpCiAgICAgIDogX3ZhbGlkS2V5ID0gKHZhbGlkS2V5ICE9IG51bGwpID8gdmFsaWRLZXkgOiBuZXcgX1R5cGVUZXN0PEU+KCkudGVzdDsKCiAgYm9vbCByZW1vdmUoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGlmICghX3ZhbGlkS2V5KGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gc3VwZXIucmVtb3ZlKGVsZW1lbnQpOwogIH0KCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgewogICAgaWYgKCFfdmFsaWRLZXkoZWxlbWVudCkpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBzdXBlci5jb250YWlucyhlbGVtZW50KTsKICB9CgogIEUgbG9va3VwKE9iamVjdCBlbGVtZW50KSB7CiAgICBpZiAoIV92YWxpZEtleShlbGVtZW50KSkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gc3VwZXIubG9va3VwKGVsZW1lbnQpOwogIH0KCiAgYm9vbCBjb250YWluc0FsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICBmb3IgKE9iamVjdCBlbGVtZW50IGluIGVsZW1lbnRzKSB7CiAgICAgIGlmICghX3ZhbGlkS2V5KGVsZW1lbnQpIHx8ICF0aGlzLmNvbnRhaW5zKGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIGZvciAoT2JqZWN0IGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgaWYgKF92YWxpZEtleShlbGVtZW50KSkgewogICAgICAgIHN1cGVyLl9yZW1vdmUoZWxlbWVudCwgX2hhc2hlcihlbGVtZW50KSk7CiAgICAgIH0KICAgIH0KICB9CgogIGJvb2wgX2VxdWFscyhlMSwgZTIpID0+IF9lcXVhbGl0eShlMSwgZTIpOwogIGludCBfaGFzaENvZGUoZSkgPT4gX2hhc2hlcihlKTsKCiAgSGFzaFNldDxFPiBfbmV3U2V0KCkgPT4gbmV3IF9DdXN0b21IYXNoU2V0PEU+KF9lcXVhbGl0eSwgX2hhc2hlciwgX3ZhbGlkS2V5KTsKICBIYXNoU2V0PFI+IF9uZXdTaW1pbGFyU2V0PFI+KCkgPT4gbmV3IF9IYXNoU2V0PFI+KCk7Cn0KCmNsYXNzIF9IYXNoU2V0RW50cnk8RT4gewogIGZpbmFsIEUga2V5OwogIGZpbmFsIGludCBoYXNoQ29kZTsKICBfSGFzaFNldEVudHJ5PEU+IG5leHQ7CiAgX0hhc2hTZXRFbnRyeSh0aGlzLmtleSwgdGhpcy5oYXNoQ29kZSwgdGhpcy5uZXh0KTsKCiAgX0hhc2hTZXRFbnRyeTxFPiByZW1vdmUoKSB7CiAgICBmaW5hbCByZXN1bHQgPSBuZXh0OwogICAgbmV4dCA9IG51bGw7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKY2xhc3MgX0hhc2hTZXRJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBmaW5hbCBfSGFzaFNldDxFPiBfc2V0OwogIGZpbmFsIGludCBfbW9kaWZpY2F0aW9uQ291bnQ7CiAgaW50IF9pbmRleCA9IDA7CiAgX0hhc2hTZXRFbnRyeTxFPiBfbmV4dDsKICBFIF9jdXJyZW50OwoKICBfSGFzaFNldEl0ZXJhdG9yKHRoaXMuX3NldCkgOiBfbW9kaWZpY2F0aW9uQ291bnQgPSBfc2V0Ll9tb2RpZmljYXRpb25Db3VudDsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfbW9kaWZpY2F0aW9uQ291bnQgIT0gX3NldC5fbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcihfc2V0KTsKICAgIH0KICAgIGlmIChfbmV4dCAhPSBudWxsKSB7CiAgICAgIF9jdXJyZW50ID0gX25leHQua2V5OwogICAgICBfbmV4dCA9IF9uZXh0Lm5leHQ7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgTGlzdDxfSGFzaFNldEVudHJ5PEU+PiBidWNrZXRzID0gX3NldC5fYnVja2V0czsKICAgIHdoaWxlIChfaW5kZXggPCBidWNrZXRzLmxlbmd0aCkgewogICAgICBfbmV4dCA9IGJ1Y2tldHNbX2luZGV4XTsKICAgICAgX2luZGV4ID0gX2luZGV4ICsgMTsKICAgICAgaWYgKF9uZXh0ICE9IG51bGwpIHsKICAgICAgICBfY3VycmVudCA9IF9uZXh0LmtleTsKICAgICAgICBfbmV4dCA9IF9uZXh0Lm5leHQ7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIF9jdXJyZW50ID0gbnVsbDsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7Cn0KCi8qKgogKiBBIGhhc2gtYmFzZWQgbWFwIHRoYXQgaXRlcmF0ZXMga2V5cyBhbmQgdmFsdWVzIGluIGtleSBpbnNlcnRpb24gb3JkZXIuCiAqIFRoaXMgaXMgbmV2ZXIgYWN0dWFsbHkgaW5zdGFudGlhdGVkIGFueSBtb3JlIC0gdGhlIGNvbnN0cnVjdG9yIGFsd2F5cwogKiByZXR1cm5zIGFuIGluc3RhbmNlIG9mIF9Db21wYWN0TGlua2VkSGFzaE1hcCBvciBfSW50ZXJuYWxMaW5rZWRIYXNoTWFwLAogKiB3aGljaCBkZXNwaXRlIHRoZSBuYW1lcyBkbyBub3QgdXNlIGxpbmtzIChidXQgYXJlIGluc2VydGlvbi1vcmRlcmVkIGFzIGlmCiAqIHRoZXkgZGlkKS4KICovCkBwYXRjaApjbGFzcyBMaW5rZWRIYXNoTWFwPEssIFY+IHsKICBAcGF0Y2gKICBmYWN0b3J5IExpbmtlZEhhc2hNYXAoCiAgICAgIHtib29sIGVxdWFscyhLIGtleTEsIEsga2V5MiksCiAgICAgIGludCBoYXNoQ29kZShLIGtleSksCiAgICAgIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpfSkgewogICAgaWYgKGlzVmFsaWRLZXkgPT0gbnVsbCkgewogICAgICBpZiAoaGFzaENvZGUgPT0gbnVsbCkgewogICAgICAgIGlmIChlcXVhbHMgPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIG5ldyBfSW50ZXJuYWxMaW5rZWRIYXNoTWFwPEssIFY+KCk7CiAgICAgICAgfQogICAgICAgIGhhc2hDb2RlID0gX2RlZmF1bHRIYXNoQ29kZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoaWRlbnRpY2FsKGlkZW50aXR5SGFzaENvZGUsIGhhc2hDb2RlKSAmJgogICAgICAgICAgICBpZGVudGljYWwoaWRlbnRpY2FsLCBlcXVhbHMpKSB7CiAgICAgICAgICByZXR1cm4gbmV3IF9Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoTWFwPEssIFY+KCk7CiAgICAgICAgfQogICAgICAgIGVxdWFscyA/Pz0gX2RlZmF1bHRFcXVhbHM7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGhhc2hDb2RlID8/PSBfZGVmYXVsdEhhc2hDb2RlOwogICAgICBlcXVhbHMgPz89IF9kZWZhdWx0RXF1YWxzOwogICAgfQogICAgcmV0dXJuIG5ldyBfQ29tcGFjdExpbmtlZEN1c3RvbUhhc2hNYXA8SywgVj4oZXF1YWxzLCBoYXNoQ29kZSwgaXNWYWxpZEtleSk7CiAgfQoKICBAcGF0Y2gKICBmYWN0b3J5IExpbmtlZEhhc2hNYXAuaWRlbnRpdHkoKSA9PiBuZXcgX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hNYXA8SywgVj4oKTsKfQoKQHBhdGNoCmNsYXNzIExpbmtlZEhhc2hTZXQ8RT4gewogIEBwYXRjaAogIGZhY3RvcnkgTGlua2VkSGFzaFNldCgKICAgICAge2Jvb2wgZXF1YWxzKEUgZTEsIEUgZTIpLAogICAgICBpbnQgaGFzaENvZGUoRSBlKSwKICAgICAgYm9vbCBpc1ZhbGlkS2V5KHBvdGVudGlhbEtleSl9KSB7CiAgICBpZiAoaXNWYWxpZEtleSA9PSBudWxsKSB7CiAgICAgIGlmIChoYXNoQ29kZSA9PSBudWxsKSB7CiAgICAgICAgaWYgKGVxdWFscyA9PSBudWxsKSB7CiAgICAgICAgICByZXR1cm4gbmV3IF9Db21wYWN0TGlua2VkSGFzaFNldDxFPigpOwogICAgICAgIH0KICAgICAgICBoYXNoQ29kZSA9IF9kZWZhdWx0SGFzaENvZGU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKGlkZW50aWNhbChpZGVudGl0eUhhc2hDb2RlLCBoYXNoQ29kZSkgJiYKICAgICAgICAgICAgaWRlbnRpY2FsKGlkZW50aWNhbCwgZXF1YWxzKSkgewogICAgICAgICAgcmV0dXJuIG5ldyBfQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaFNldDxFPigpOwogICAgICAgIH0KICAgICAgICBlcXVhbHMgPz89IF9kZWZhdWx0RXF1YWxzOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBoYXNoQ29kZSA/Pz0gX2RlZmF1bHRIYXNoQ29kZTsKICAgICAgZXF1YWxzID8/PSBfZGVmYXVsdEVxdWFsczsKICAgIH0KICAgIHJldHVybiBuZXcgX0NvbXBhY3RMaW5rZWRDdXN0b21IYXNoU2V0PEU+KGVxdWFscywgaGFzaENvZGUsIGlzVmFsaWRLZXkpOwogIH0KCiAgQHBhdGNoCiAgZmFjdG9yeSBMaW5rZWRIYXNoU2V0LmlkZW50aXR5KCkgPT4gbmV3IF9Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoU2V0PEU+KCk7Cn0KCkBwYXRjaAphYnN0cmFjdCBjbGFzcyBfU3BsYXlUcmVlPEssIE5vZGUgZXh0ZW5kcyBfU3BsYXlUcmVlTm9kZTxLPj4gewogIC8vIFdlIG92ZXJyaWRlIF9zcGxheU1pbiBhbmQgX3NwbGF5TWF4IHRvIG9wdGltaXplIHR5cGUtY2hlY2tzLgogIEBwYXRjaAogIE5vZGUgX3NwbGF5TWluKE5vZGUgbm9kZSkgewogICAgTm9kZSBjdXJyZW50ID0gbm9kZTsKICAgIHdoaWxlIChjdXJyZW50LmxlZnQgIT0gbnVsbCkgewogICAgICBOb2RlIGxlZnQgPSBpbnRlcm5hbC51bnNhZmVDYXN0PE5vZGU+KGN1cnJlbnQubGVmdCk7CiAgICAgIGN1cnJlbnQubGVmdCA9IGxlZnQucmlnaHQ7CiAgICAgIGxlZnQucmlnaHQgPSBjdXJyZW50OwogICAgICBjdXJyZW50ID0gbGVmdDsKICAgIH0K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emF0aW9uLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKdm9pZCBfcmVoYXNoT2JqZWN0cyhMaXN0IG9iamVjdHMpIHsKICBmaW5hbCBpbnQgbGVuZ3RoID0gb2JqZWN0cy5sZW5ndGg7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgb2JqZWN0c1tpXS5fcmVnZW5lcmF0ZUluZGV4KCk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfSGFzaEZpZWxkQmFzZSB7CiAgLy8gRWFjaCBvY2N1cGllZCBlbnRyeSBpbiBfaW5kZXggaXMgYSBmaXhlZC1zaXplIGludGVnZXIgdGhhdCBlbmNvZGVzIGEgcGFpcjoKICAvLyAgIFsgaGFzaCBwYXR0ZXJuIGZvciBrZXkgfCBpbmRleCBvZiBlbnRyeSBpbiBfZGF0YSBdCiAgLy8gVGhlIGhhc2ggcGF0dGVybiBpcyBiYXNlZCBvbiBoYXNoQ29kZSwgYnV0IGlzIGd1YXJhbnRlZWQgdG8gYmUgbm9uLXplcm8uCiAgLy8gVGhlIGxlbmd0aCBvZiBfaW5kZXggaXMgYWx3YXlzIGEgcG93ZXIgb2YgdHdvLCBhbmQgdGhlcmUgaXMgYWx3YXlzIGF0CiAgLy8gbGVhc3Qgb25lIHVub2NjdXBpZWQgZW50cnkuCiAgLy8gTk9URTogV2hlbiBtYXBzIGFyZSBkZXNlcmlhbGl6ZWQsIHRoZWlyIF9pbmRleCBhbmQgX2hhc2hNYXNrIGlzIHJlZ2VuZXJhdGVkCiAgLy8gZWFnZXJseSBieSBfcmVnZW5lcmF0ZUluZGV4LgogIFVpbnQzMkxpc3QgX2luZGV4ID0gbmV3IFVpbnQzMkxpc3QoX0hhc2hCYXNlLl9JTklUSUFMX0lOREVYX1NJWkUpOwoKICAvLyBDYWNoZWQgaW4tcGxhY2UgbWFzayBmb3IgdGhlIGhhc2ggcGF0dGVybiBjb21wb25lbnQuCiAgaW50IF9oYXNoTWFzayA9IF9IYXNoQmFzZS5faW5kZXhTaXplVG9IYXNoTWFzayhfSGFzaEJhc2UuX0lOSVRJQUxfSU5ERVhfU0laRSk7CgogIC8vIEZpeGVkLWxlbmd0aCBsaXN0IG9mIGtleXMgKHNldCkgb3Iga2V5L3ZhbHVlIGF0IGV2ZW4vb2RkIGluZGljZXMgKG1hcCkuCiAgTGlzdCBfZGF0YTsKCiAgLy8gTGVuZ3RoIG9mIF9kYXRhIHRoYXQgaXMgdXNlZCAoaS5lLiwga2V5cyArIHZhbHVlcyBmb3IgYSBtYXApLgogIGludCBfdXNlZERhdGEgPSAwOwoKICAvLyBOdW1iZXIgb2YgZGVsZXRlZCBrZXlzLgogIGludCBfZGVsZXRlZEtleXMgPSAwOwoKICAvLyBOb3RlOiBBbGwgZmllbGRzIGFyZSBpbml0aWFsaXplZCBpbiBhIHNpbmdsZSBjb25zdHJ1Y3RvciBzbyB0aGF0IHRoZSBWTQogIC8vIHJlY29nbml6ZXMgdGhleSBjYW5ub3QgaG9sZCBudWxsIHZhbHVlcy4gVGhpcyBtYWtlcyBhIGJpZyAoMjAlKSBwZXJmb3JtYW5jZQogIC8vIGRpZmZlcmVuY2Ugb24gc29tZSBvcGVyYXRpb25zLgogIF9IYXNoRmllbGRCYXNlKGludCBkYXRhU2l6ZSkgOiB0aGlzLl9kYXRhID0gbmV3IExpc3QoZGF0YVNpemUpOwp9CgovLyBCYXNlIGNsYXNzIGZvciBWTS1pbnRlcm5hbCBjbGFzc2VzOyBrZWVwIGluIHN5bmMgd2l0aCBfSGFzaEZpZWxkQmFzZS4KYWJzdHJhY3QgY2xhc3MgX0hhc2hWTUJhc2UgewogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6dHlwZWRfZGF0YSNfVWludDMyTGlzdCIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgVWludDMyTGlzdCBnZXQgX2luZGV4IG5hdGl2ZSAiTGlua2VkSGFzaE1hcF9nZXRJbmRleCI7CiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXQgX2luZGV4KFVpbnQzMkxpc3QgdmFsdWUpIG5hdGl2ZSAiTGlua2VkSGFzaE1hcF9zZXRJbmRleCI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBpbnQgZ2V0IF9oYXNoTWFzayBuYXRpdmUgIkxpbmtlZEhhc2hNYXBfZ2V0SGFzaE1hc2siOwogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0IF9oYXNoTWFzayhpbnQgdmFsdWUpIG5hdGl2ZSAiTGlua2VkSGFzaE1hcF9zZXRIYXNoTWFzayI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfTGlzdCIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgTGlzdCBnZXQgX2RhdGEgbmF0aXZlICJMaW5rZWRIYXNoTWFwX2dldERhdGEiOwogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgc2V0IF9kYXRhKExpc3QgdmFsdWUpIG5hdGl2ZSAiTGlua2VkSGFzaE1hcF9zZXREYXRhIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgX3VzZWREYXRhIG5hdGl2ZSAiTGlua2VkSGFzaE1hcF9nZXRVc2VkRGF0YSI7CiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXQgX3VzZWREYXRhKGludCB2YWx1ZSkgbmF0aXZlICJMaW5rZWRIYXNoTWFwX3NldFVzZWREYXRhIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgX2RlbGV0ZWRLZXlzIG5hdGl2ZSAiTGlua2VkSGFzaE1hcF9nZXREZWxldGVkS2V5cyI7CiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBzZXQgX2RlbGV0ZWRLZXlzKGludCB2YWx1ZSkgbmF0aXZlICJMaW5rZWRIYXNoTWFwX3NldERlbGV0ZWRLZXlzIjsKfQoKLy8gVGhpcyBtaXhpbiBjYW4gYmUgYXBwbGllZCB0byBfSGFzaEZpZWxkQmFzZSBvciBfSGFzaFZNQmFzZSAoZm9yCi8vIG5vcm1hbCBhbmQgVk0taW50ZXJuYWxpemVkIGNsYXNzZXMsIHJlc3BlY3RpdmVsZXkpLCB3aGljaCBwcm92aWRlIHRoZQovLyBhY3R1YWwgZmllbGRzL2FjY2Vzc29ycyB0aGF0IHRoaXMgbWl4aW4gYXNzdW1lcy4KLy8gVE9ETyhrb2RhKTogQ29uc2lkZXIgbW92aW5nIGZpZWxkIGNvbW1lbnRzIHRvIF9IYXNoRmllbGRCYXNlLgphYnN0cmFjdCBjbGFzcyBfSGFzaEJhc2UgaW1wbGVtZW50cyBfSGFzaFZNQmFzZSB7CiAgLy8gVGhlIG51bWJlciBvZiBiaXRzIHVzZWQgZm9yIGVhY2ggY29tcG9uZW50IGlzIGRldGVybWluZWQgYnkgdGFibGUgc2l6ZS4KICAvLyBUaGUgbGVuZ3RoIG9mIF9pbmRleCBpcyB0d2ljZSB0aGUgbnVtYmVyIG9mIGVudHJpZXMgaW4gX2RhdGEsIGFuZCBib3RoCiAgLy8gYXJlIGRvdWJsZWQgd2hlbiBfZGF0YSBpcyBmdWxsLiBUaHVzLCBfaW5kZXggd2lsbCBoYXZlIGEgbWF4IGxvYWQgZmFjdG9yCiAgLy8gb2YgMS8yLCB3aGljaCBlbmFibGVzIG9uZSBtb3JlIGJpdCB0byBiZSB1c2VkIGZvciB0aGUgaGFzaC4KICAvLyBUT0RPKGtvZGEpOiBDb25zaWRlciBncm93aW5nIF9kYXRhIGJ5IGZhY3RvciBzcXJ0KDIpLCB0d2ljZSBhcyBvZnRlbi4KICBzdGF0aWMgY29uc3QgaW50IF9JTklUSUFMX0lOREVYX0JJVFMgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgX0lOSVRJQUxfSU5ERVhfU0laRSA9IDEgPDwgKF9JTklUSUFMX0lOREVYX0JJVFMgKyAxKTsKCiAgLy8gVW51c2VkIGFuZCBkZWxldGVkIGVudHJpZXMgYXJlIG1hcmtlZCBieSAwIGFuZCAxLCByZXNwZWN0aXZlbHkuCiAgc3RhdGljIGNvbnN0IGludCBfVU5VU0VEX1BBSVIgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgX0RFTEVURURfUEFJUiA9IDE7CgogIC8vIE9uIDMyLWJpdCwgdGhlIHRvcCBiaXRzIGFyZSB3YXN0ZWQgdG8gYXZvaWQgTWludCBhbGxvY2F0aW9uLgogIC8vIFRPRE8oa29kYSk6IFJlY2xhaW0gdGhlIGJpdHMgYnkgbWFraW5nIHRoZSBjb21waWxlciB0cmVhdCBoYXNoIHBhdHRlcm5zCiAgLy8gYXMgdW5zaWduZWQgd29yZHMuCiAgc3RhdGljIGludCBfaW5kZXhTaXplVG9IYXNoTWFzayhpbnQgaW5kZXhTaXplKSB7CiAgICBpbnQgaW5kZXhCaXRzID0gaW5kZXhTaXplLmJpdExlbmd0aCAtIDI7CiAgICByZXR1cm4gaW50ZXJuYWwuaXM2NEJpdAogICAgICAgID8gKDEgPDwgKDMyIC0gaW5kZXhCaXRzKSkgLSAxCiAgICAgICAgOiAoMSA8PCAoMzAgLSBpbmRleEJpdHMpKSAtIDE7CiAgfQoKICBzdGF0aWMgaW50IF9oYXNoUGF0dGVybihpbnQgZnVsbEhhc2gsIGludCBoYXNoTWFzaywgaW50IHNpemUpIHsKICAgIGZpbmFsIGludCBtYXNrZWRIYXNoID0gZnVsbEhhc2ggJiBoYXNoTWFzazsKICAgIC8vIFRPRE8oa29kYSk6IENvbnNpZGVyIGtlZXBpbmcgYml0IGxlbmd0aCBhbmQgdXNlIGxlZnQgc2hpZnQuCiAgICByZXR1cm4gKG1hc2tlZEhhc2ggPT0gMCkgPyAoc2l6ZSA+PiAxKSA6IG1hc2tlZEhhc2ggKiAoc2l6ZSA+PiAxKTsKICB9CgogIC8vIExpbmVhciBwcm9iaW5nLgogIHN0YXRpYyBpbnQgX2ZpcnN0UHJvYmUoaW50IGZ1bGxIYXNoLCBpbnQgc2l6ZU1hc2spIHsKICAgIGZpbmFsIGludCBpID0gZnVsbEhhc2ggJiBzaXplTWFzazsKICAgIC8vIExpZ2h0LCBmYXN0IHNodWZmbGUgdG8gbWl0aWdhdGUgYmFkIGhhc2hDb2RlIChlLmcuLCBzZXF1ZW50aWFsKS4KICAgIHJldHVybiAoKGkgPDwgMSkgKyBpKSAmIHNpemVNYXNrOwogIH0KCiAgc3RhdGljIGludCBfbmV4dFByb2JlKGludCBpLCBpbnQgc2l6ZU1hc2spID0+IChpICsgMSkgJiBzaXplTWFzazsKCiAgLy8gQSBzZWxmLWxvb3AgaXMgdXNlZCB0byBtYXJrIGEgZGVsZXRlZCBrZXkgb3IgdmFsdWUuCiAgc3RhdGljIGJvb2wgX2lzRGVsZXRlZChMaXN0IGRhdGEsIE9iamVjdCBrZXlPclZhbHVlKSA9PgogICAgICBpZGVudGljYWwoa2V5T3JWYWx1ZSwgZGF0YSk7CiAgc3RhdGljIHZvaWQgX3NldERlbGV0ZWRBdChMaXN0IGRhdGEsIGludCBkKSB7CiAgICBkYXRhW2RdID0gZGF0YTsKICB9CgogIC8vIENvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGRldGVjdGlvbiByZWxpZXMgb24gdGhpcyBjaGVja3N1bSBtb25vdG9uaWNhbGx5CiAgLy8gaW5jcmVhc2luZyBiZXR3ZWVuIHJlYWxsb2NhdGlvbnMgb2YgX2RhdGEuCiAgaW50IGdldCBfY2hlY2tTdW0gPT4gX3VzZWREYXRhICsgX2RlbGV0ZWRLZXlzOwogIGJvb2wgX2lzTW9kaWZpZWRTaW5jZShMaXN0IG9sZERhdGEsIGludCBvbGRDaGVja1N1bSkgPT4KICAgICAgIWlkZW50aWNhbChfZGF0YSwgb2xkRGF0YSkgfHwgKF9jaGVja1N1bSAhPSBvbGRDaGVja1N1bSk7CgogIGludCBnZXQgbGVuZ3RoOwp9CgpjbGFzcyBfT3BlcmF0b3JFcXVhbHNBbmRIYXNoQ29kZSB7CiAgaW50IF9oYXNoQ29kZShlKSA9PiBlLmhhc2hDb2RlOwogIGJvb2wgX2VxdWFscyhlMSwgZTIpID0+IGUxID09IGUyOwp9CgpjbGFzcyBfSWRlbnRpY2FsQW5kSWRlbnRpdHlIYXNoQ29kZSB7CiAgaW50IF9oYXNoQ29kZShlKSA9PiBpZGVudGl0eUhhc2hDb2RlKGUpOwogIGJvb2wgX2VxdWFscyhlMSwgZTIpID0+IGlkZW50aWNhbChlMSwgZTIpOwp9CgovLyBWTS1pbnRlcm5hbGl6ZWQgaW1wbGVtZW50YXRpb24gb2YgYSBkZWZhdWx0LWNvbnN0cnVjdGVkIExpbmtlZEhhc2hNYXAuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ludGVybmFsTGlua2VkSGFzaE1hcDxLLCBWPiBleHRlbmRzIF9IYXNoVk1CYXNlCiAgICB3aXRoCiAgICAgICAgTWFwTWl4aW48SywgVj4sCiAgICAgICAgX0xpbmtlZEhhc2hNYXBNaXhpbjxLLCBWPiwKICAgICAgICBfSGFzaEJhc2UsCiAgICAgICAgX09wZXJhdG9yRXF1YWxzQW5kSGFzaENvZGUKICAgIGltcGxlbWVudHMgTGlua2VkSGFzaE1hcDxLLCBWPiB7CiAgX0ludGVybmFsTGlua2VkSGFzaE1hcCgpIHsKICAgIF9pbmRleCA9IG5ldyBVaW50MzJMaXN0KF9IYXNoQmFzZS5fSU5JVElBTF9JTkRFWF9TSVpFKTsKICAgIF9oYXNoTWFzayA9IF9IYXNoQmFzZS5faW5kZXhTaXplVG9IYXNoTWFzayhfSGFzaEJhc2UuX0lOSVRJQUxfSU5ERVhfU0laRSk7CiAgICBfZGF0YSA9IG5ldyBMaXN0KF9IYXNoQmFzZS5fSU5JVElBTF9JTkRFWF9TSVpFKTsKICAgIF91c2VkRGF0YSA9IDA7CiAgICBfZGVsZXRlZEtleXMgPSAwOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX0xpbmtlZEhhc2hNYXBNaXhpbjxLLCBWPiBpbXBsZW1lbnRzIF9IYXNoQmFzZSB7CiAgaW50IF9oYXNoQ29kZShlKTsKICBib29sIF9lcXVhbHMoZTEsIGUyKTsKICBpbnQgZ2V0IF9jaGVja1N1bTsKICBib29sIF9pc01vZGlmaWVkU2luY2UoTGlzdCBvbGREYXRhLCBpbnQgb2xkQ2hlY2tTdW0pOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiAoX3VzZWREYXRhID4+IDEpIC0gX2RlbGV0ZWRLZXlzOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gbGVuZ3RoID09IDA7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKCiAgdm9pZCBfcmVoYXNoKCkgewogICAgaWYgKChfZGVsZXRlZEtleXMgPDwgMikgPiBfdXNlZERhdGEpIHsKICAgICAgLy8gVE9ETyhrb2RhKTogQ29uc2lkZXIgc2hyaW5raW5nLgogICAgICAvLyBUT0RPKGtvZGEpOiBDb25zaWRlciBpbi1wbGFjZSBjb21wYWN0aW9uIGFuZCBtb3JlIGNvc3RseSBDTUUgY2hlY2suCiAgICAgIF9pbml0KF9pbmRleC5sZW5ndGgsIF9oYXNoTWFzaywgX2RhdGEsIF91c2VkRGF0YSk7CiAgICB9IGVsc2UgewogICAgICAvLyBUT0RPKGtvZGEpOiBTdXBwb3J0IDMyLT42NCBiaXQgdHJhbnNpdGlvbiAoYW5kIGFkanVzdCBfaGFzaE1hc2spLgogICAgICBfaW5pdChfaW5kZXgubGVuZ3RoIDw8IDEsIF9oYXNoTWFzayA+PiAxLCBfZGF0YSwgX3VzZWREYXRhKTsKICAgIH0KICB9CgogIHZvaWQgY2xlYXIoKSB7CiAgICBpZiAoIWlzRW1wdHkpIHsKICAgICAgX2luaXQoX0hhc2hCYXNlLl9JTklUSUFMX0lOREVYX1NJWkUsIF9oYXNoTWFzaywgbnVsbCwgMCk7CiAgICB9CiAgfQoKICAvLyBBbGxvY2F0ZSBuZXcgX2luZGV4IGFuZCBfZGF0YSwgYW5kIG9wdGlvbmFsbHkgY29weSBleGlzdGluZyBjb250ZW50cy4KICB2b2lkIF9pbml0KGludCBzaXplLCBpbnQgaGFzaE1hc2ssIExpc3Qgb2xkRGF0YSwgaW50IG9sZFVzZWQpIHsKICAgIGFzc2VydChzaXplICYgKHNpemUgLSAxKSA9PSAwKTsKICAgIGFzc2VydChfSGFzaEJhc2UuX1VOVVNFRF9QQUlSID09IDApOwogICAgX2luZGV4ID0gbmV3IFVpbnQzMkxpc3Qoc2l6ZSk7CiAgICBfaGFzaE1hc2sgPSBoYXNoTWFzazsKICAgIF9kYXRhID0gbmV3IExpc3Qoc2l6ZSk7CiAgICBfdXNlZERhdGEgPSAwOwogICAgX2RlbGV0ZWRLZXlzID0gMDsKICAgIGlmIChvbGREYXRhICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBvbGRVc2VkOyBpICs9IDIpIHsKICAgICAgICB2YXIga2V5ID0gb2xkRGF0YVtpXTsKICAgICAgICBpZiAoIV9IYXNoQmFzZS5faXNEZWxldGVkKG9sZERhdGEsIGtleSkpIHsKICAgICAgICAgIC8vIFRPRE8oa29kYSk6IFdoaWxlIHRoZXJlIGFyZSBlbm91Z2ggaGFzaCBiaXRzLCBhdm9pZCBoYXNoQ29kZSBjYWxscy4KICAgICAgICAgIHRoaXNba2V5XSA9IG9sZERhdGFbaSArIDFdOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KCiAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IFtfcmVoYXNoT2JqZWN0c10gKHNlZSBhYm92ZSkuCiAgdm9pZCBfcmVnZW5lcmF0ZUluZGV4KCkgewogICAgX2luZGV4ID0gbmV3IFVpbnQzMkxpc3QoX2RhdGEubGVuZ3RoKTsKICAgIGFzc2VydChfaGFzaE1hc2sgPT0gMCk7CiAgICBfaGFzaE1hc2sgPSBfSGFzaEJhc2UuX2luZGV4U2l6ZVRvSGFzaE1hc2soX2luZGV4Lmxlbmd0aCk7CiAgICBmaW5hbCBpbnQgdG1wVXNlZCA9IF91c2VkRGF0YTsKICAgIF91c2VkRGF0YSA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHRtcFVzZWQ7IGkgKz0gMikgewogICAgICB0aGlzW19kYXRhW2ldXSA9IF9kYXRhW2kgKyAxXTsKICAgIH0KICB9CgogIHZvaWQgX2luc2VydChLIGtleSwgViB2YWx1ZSwgaW50IGhhc2hQYXR0ZXJuLCBpbnQgaSkgewogICAgaWYgKF91c2VkRGF0YSA9PSBfZGF0YS5sZW5ndGgpIHsKICAgICAgX3JlaGFzaCgpOwogICAgICB0aGlzW2tleV0gPSB2YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydCgxIDw9IGhhc2hQYXR0ZXJuICYmIGhhc2hQYXR0ZXJuIDwgKDEgPDwgMzIpKTsKICAgICAgZmluYWwgaW50IGluZGV4ID0gX3VzZWREYXRhID4+IDE7CiAgICAgIGFzc2VydCgoaW5kZXggJiBoYXNoUGF0dGVybikgPT0gMCk7CiAgICAgIF9pbmRleFtpXSA9IGhhc2hQYXR0ZXJuIHwgaW5kZXg7CiAgICAgIF9kYXRhW191c2VkRGF0YSsrXSA9IGtleTsKICAgICAgX2RhdGFbX3VzZWREYXRhKytdID0gdmFsdWU7CiAgICB9CiAgfQoKICAvLyBJZiBrZXkgaXMgcHJlc2VudCwgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIHZhbHVlIGluIF9kYXRhLCBlbHNlIHJldHVybnMKICAvLyB0aGUgbmVnYXRlZCBpbnNlcnRpb24gcG9pbnQgaW4gX2luZGV4LgogIGludCBfZmluZFZhbHVlT3JJbnNlcnRQb2ludChLIGtleSwgaW50IGZ1bGxIYXNoLCBpbnQgaGFzaFBhdHRlcm4sIGludCBzaXplKSB7CiAgICBmaW5hbCBpbnQgc2l6ZU1hc2sgPSBzaXplIC0gMTsKICAgIGZpbmFsIGludCBtYXhFbnRyaWVzID0gc2l6ZSA+PiAxOwogICAgaW50IGkgPSBfSGFzaEJhc2UuX2ZpcnN0UHJvYmUoZnVsbEhhc2gsIHNpemVNYXNrKTsKICAgIGludCBmaXJzdERlbGV0ZWQgPSAtMTsKICAgIGludCBwYWlyID0gX2luZGV4W2ldOwogICAgd2hpbGUgKHBhaXIgIT0gX0hhc2hCYXNlLl9VTlVTRURfUEFJUikgewogICAgICBpZiAocGFpciA9PSBfSGFzaEJhc2UuX0RFTEVURURfUEFJUikgewogICAgICAgIGlmIChmaXJzdERlbGV0ZWQgPCAwKSB7CiAgICAgICAgICBmaXJzdERlbGV0ZWQgPSBpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBmaW5hbCBpbnQgZW50cnkgPSBoYXNoUGF0dGVybiBeIHBhaXI7CiAgICAgICAgaWYgKGVudHJ5IDwgbWF4RW50cmllcykgewogICAgICAgICAgZmluYWwgaW50IGQgPSBlbnRyeSA8PCAxOwogICAgICAgICAgaWYgKF9lcXVhbHMoa2V5LCBfZGF0YVtkXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGQgKyAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpID0gX0hhc2hCYXNlLl9uZXh0UHJvYmUoaSwgc2l6ZU1hc2spOwogICAgICBwYWlyID0gX2luZGV4W2ldOwogICAgfQogICAgcmV0dXJuIGZpcnN0RGVsZXRlZCA+PSAwID8gLWZpcnN0RGVsZXRlZCA6IC1pOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIGZpbmFsIGludCBzaXplID0gX2luZGV4Lmxlbmd0aDsKICAgIGZpbmFsIGludCBmdWxsSGFzaCA9IF9oYXNoQ29kZShrZXkpOwogICAgZmluYWwgaW50IGhhc2hQYXR0ZXJuID0gX0hhc2hCYXNlLl9oYXNoUGF0dGVybihmdWxsSGFzaCwgX2hhc2hNYXNrLCBzaXplKTsKICAgIGZpbmFsIGludCBkID0gX2ZpbmRWYWx1ZU9ySW5zZXJ0UG9pbnQoa2V5LCBmdWxsSGFzaCwgaGFzaFBhdHRlcm4sIHNpemUpOwogICAgaWYgKGQgPiAwKSB7CiAgICAgIF9kYXRhW2RdID0gdmFsdWU7CiAgICB9IGVsc2UgewogICAgICBmaW5hbCBpbnQgaSA9IC1kOwogICAgICBfaW5zZXJ0KGtleSwgdmFsdWUsIGhhc2hQYXR0ZXJuLCBpKTsKICAgIH0KICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgZmluYWwgaW50IHNpemUgPSBfaW5kZXgubGVuZ3RoOwogICAgZmluYWwgaW50IGZ1bGxIYXNoID0gX2hhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBpbnQgaGFzaFBhdHRlcm4gPSBfSGFzaEJhc2UuX2hhc2hQYXR0ZXJuKGZ1bGxIYXNoLCBfaGFzaE1hc2ssIHNpemUpOwogICAgZmluYWwgaW50IGQgPSBfZmluZFZhbHVlT3JJbnNlcnRQb2ludChrZXksIGZ1bGxIYXNoLCBoYXNoUGF0dGVybiwgc2l6ZSk7CiAgICBpZiAoZCA+IDApIHsKICAgICAgcmV0dXJuIF9kYXRhW2RdOwogICAgfQogICAgLy8gJ2lmQWJzZW50JyBpcyBhbGxvd2VkIHRvIG1vZGlmeSB0aGUgbWFwLgogICAgTGlzdCBvbGREYXRhID0gX2RhdGE7CiAgICBpbnQgb2xkQ2hlY2tTdW0gPSBfY2hlY2tTdW07CiAgICBWIHZhbHVlID0gaWZBYnNlbnQoKTsKICAgIGlmIChfaXNNb2RpZmllZFNpbmNlKG9sZERhdGEsIG9sZENoZWNrU3VtKSkgewogICAgICB0aGlzW2tleV0gPSB2YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIGZpbmFsIGludCBpID0gLWQ7CiAgICAgIF9pbnNlcnQoa2V5LCB2YWx1ZSwgaGFzaFBhdHRlcm4sIGkpOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgViByZW1vdmUoT2JqZWN0IGtleSkgewogICAgZmluYWwgaW50IHNpemUgPSBfaW5kZXgubGVuZ3RoOwogICAgZmluYWwgaW50IHNpemVNYXNrID0gc2l6ZSAtIDE7CiAgICBmaW5hbCBpbnQgbWF4RW50cmllcyA9IHNpemUgPj4gMTsKICAgIGZpbmFsIGludCBmdWxsSGFzaCA9IF9oYXNoQ29kZShrZXkpOwogICAgZmluYWwgaW50IGhhc2hQYXR0ZXJuID0gX0hhc2hCYXNlLl9oYXNoUGF0dGVybihmdWxsSGFzaCwgX2hhc2hNYXNrLCBzaXplKTsKICAgIGludCBpID0gX0hhc2hCYXNlLl9maXJzdFByb2JlKGZ1bGxIYXNoLCBzaXplTWFzayk7CiAgICBpbnQgcGFpciA9IF9pbmRleFtpXTsKICAgIHdoaWxlIChwYWlyICE9IF9IYXNoQmFzZS5fVU5VU0VEX1BBSVIpIHsKICAgICAgaWYgKHBhaXIgIT0gX0hhc2hCYXNlLl9ERUxFVEVEX1BBSVIpIHsKICAgICAgICBmaW5hbCBpbnQgZW50cnkgPSBoYXNoUGF0dGVybiBeIHBhaXI7CiAgICAgICAgaWYgKGVudHJ5IDwgbWF4RW50cmllcykgewogICAgICAgICAgZmluYWwgaW50IGQgPSBlbnRyeSA8PCAxOwogICAgICAgICAgaWYgKF9lcXVhbHMoa2V5LCBfZGF0YVtkXSkpIHsKICAgICAgICAgICAgX2luZGV4W2ldID0gX0hhc2hCYXNlLl9ERUxFVEVEX1BBSVI7CiAgICAgICAgICAgIF9IYXNoQmFzZS5fc2V0RGVsZXRlZEF0KF9kYXRhLCBkKTsKICAgICAgICAgICAgViB2YWx1ZSA9IF9kYXRhW2QgKyAxXTsKICAgICAgICAgICAgX0hhc2hCYXNlLl9zZXREZWxldGVkQXQoX2RhdGEsIGQgKyAxKTsKICAgICAgICAgICAgKytfZGVsZXRlZEtleXM7CiAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaSA9IF9IYXNoQmFzZS5fbmV4dFByb2JlKGksIHNpemVNYXNrKTsKICAgICAgcGFpciA9IF9pbmRleFtpXTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgLy8gSWYga2V5IGlzIGFic2VudCwgcmV0dXJuIF9kYXRhICh3aGljaCBpcyBuZXZlciBhIHZhbHVlKS4KICBPYmplY3QgX2dldFZhbHVlT3JEYXRhKE9iamVjdCBrZXkpIHsKICAgIGZpbmFsIGludCBzaXplID0gX2luZGV4Lmxlbmd0aDsKICAgIGZpbmFsIGludCBzaXplTWFzayA9IHNpemUgLSAxOwogICAgZmluYWwgaW50IG1heEVudHJpZXMgPSBzaXplID4+IDE7CiAgICBmaW5hbCBpbnQgZnVsbEhhc2ggPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGludCBoYXNoUGF0dGVybiA9IF9IYXNoQmFzZS5faGFzaFBhdHRlcm4oZnVsbEhhc2gsIF9oYXNoTWFzaywgc2l6ZSk7CiAgICBpbnQgaSA9IF9IYXNoQmFzZS5fZmlyc3RQcm9iZShmdWxsSGFzaCwgc2l6ZU1hc2spOwogICAgaW50IHBhaXIgPSBfaW5kZXhbaV07CiAgICB3aGlsZSAocGFpciAhPSBfSGFzaEJhc2UuX1VOVVNFRF9QQUlSKSB7CiAgICAgIGlmIChwYWlyICE9IF9IYXNoQmFzZS5fREVMRVRFRF9QQUlSKSB7CiAgICAgICAgZmluYWwgaW50IGVudHJ5ID0gaGFzaFBhdHRlcm4gXiBwYWlyOwogICAgICAgIGlmIChlbnRyeSA8IG1heEVudHJpZXMpIHsKICAgICAgICAgIGZpbmFsIGludCBkID0gZW50cnkgPDwgMTsKICAgICAgICAgIGlmIChfZXF1YWxzKGtleSwgX2RhdGFbZF0pKSB7CiAgICAgICAgICAgIHJldHVybiBfZGF0YVtkICsgMV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGkgPSBfSGFzaEJhc2UuX25leHRQcm9iZShpLCBzaXplTWFzayk7CiAgICAgIHBhaXIgPSBfaW5kZXhbaV07CiAgICB9CiAgICByZXR1cm4gX2RhdGE7CiAgfQoKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpID0+ICFpZGVudGljYWwoX2RhdGEsIF9nZXRWYWx1ZU9yRGF0YShrZXkpKTsKCiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSB7CiAgICB2YXIgdiA9IF9nZXRWYWx1ZU9yRGF0YShrZXkpOwogICAgcmV0dXJuIGlkZW50aWNhbChfZGF0YSwgdikgPyBudWxsIDogaW50ZXJuYWwudW5zYWZlQ2FzdDxWPih2KTsKICB9CgogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpIHsKICAgIGZvciAodmFyIHYgaW4gdmFsdWVzKSB7CiAgICAgIC8vIFNwZWMuIHNheXMgdGhpcyBzaG91bGQgYWx3YXlzIHVzZSAiPT0iLCBhbHNvIGZvciBpZGVudGl0eSBtYXBzLCBldGMuCiAgICAgIGlmICh2ID09IHZhbHVlKSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoSyBrZXksIFYgdmFsdWUpKSB7CiAgICB2YXIga2kgPSBrZXlzLml0ZXJhdG9yOwogICAgdmFyIHZpID0gdmFsdWVzLml0ZXJhdG9yOwogICAgd2hpbGUgKGtpLm1vdmVOZXh0KCkpIHsKICAgICAgdmkubW92ZU5leHQoKTsKICAgICAgZihraS5jdXJyZW50LCB2aS5jdXJyZW50KTsKICAgIH0KICB9CgogIEl0ZXJhYmxlPEs+IGdldCBrZXlzID0+CiAgICAgIG5ldyBfQ29tcGFjdEl0ZXJhYmxlPEs+KHRoaXMsIF9kYXRhLCBfdXNlZERhdGEsIC0yLCAyKTsKICBJdGVyYWJsZTxWPiBnZXQgdmFsdWVzID0+CiAgICAgIG5ldyBfQ29tcGFjdEl0ZXJhYmxlPFY+KHRoaXMsIF9kYXRhLCBfdXNlZERhdGEsIC0xLCAyKTsKfQoKY2xhc3MgX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hNYXA8SywgVj4gZXh0ZW5kcyBfSGFzaEZpZWxkQmFzZQogICAgd2l0aAogICAgICAgIE1hcE1peGluPEssIFY+LAogICAgICAgIF9MaW5rZWRIYXNoTWFwTWl4aW48SywgVj4sCiAgICAgICAgX0hhc2hCYXNlLAogICAgICAgIF9JZGVudGljYWxBbmRJZGVudGl0eUhhc2hDb2RlCiAgICBpbXBsZW1lbnRzIExpbmtlZEhhc2hNYXA8SywgVj4gewogIF9Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoTWFwKCkgOiBzdXBlcihfSGFzaEJhc2UuX0lOSVRJQUxfSU5ERVhfU0laRSk7Cn0KCmNsYXNzIF9Db21wYWN0TGlua2VkQ3VzdG9tSGFzaE1hcDxLLCBWPiBleHRlbmRzIF9IYXNoRmllbGRCYXNlCiAgICB3aXRoIE1hcE1peGluPEssIFY+LCBfTGlua2VkSGFzaE1hcE1peGluPEssIFY+LCBfSGFzaEJhc2UKICAgIGltcGxlbWVudHMgTGlua2VkSGFzaE1hcDxLLCBWPiB7CiAgZmluYWwgX2VxdWFsaXR5OwogIGZpbmFsIF9oYXNoZXI7CiAgZmluYWwgX3ZhbGlkS2V5OwoKICAvLyBUT0RPKGtvZGEpOiBBc2sgZ2JyYWNoYSB3aHkgSSBjYW5ub3QgaGF2ZSBmaWVsZHMgX2VxdWFscy9faGFzaENvZGUuCiAgaW50IF9oYXNoQ29kZShlKSA9PiBfaGFzaGVyKGUpOwogIGJvb2wgX2VxdWFscyhlMSwgZTIpID0+IF9lcXVhbGl0eShlMSwgZTIpOwoKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBvKSA9PiBfdmFsaWRLZXkobykgPyBzdXBlci5jb250YWluc0tleShvKSA6IGZhbHNlOwogIFYgb3BlcmF0b3IgW10oT2JqZWN0IG8pID0+IF92YWxpZEtleShvKSA/IHN1cGVyW29dIDogbnVsbDsKICBWIHJlbW92ZShPYmplY3QgbykgPT4gX3ZhbGlkS2V5KG8pID8gc3VwZXIucmVtb3ZlKG8pIDogbnVsbDsKCiAgX0NvbXBhY3RMaW5rZWRDdXN0b21IYXNoTWFwKHRoaXMuX2VxdWFsaXR5LCB0aGlzLl9oYXNoZXIsIHZhbGlkS2V5KQogICAgICA6IF92YWxpZEtleSA9ICh2YWxpZEtleSAhPSBudWxsKSA/IHZhbGlkS2V5IDogbmV3IF9UeXBlVGVzdDxLPigpLnRlc3QsCiAgICAgICAgc3VwZXIoX0hhc2hCYXNlLl9JTklUSUFMX0lOREVYX1NJWkUpOwp9CgovLyBJdGVyYXRlcyB0aHJvdWdoIF9kYXRhW19vZmZzZXQgKyBfc3RlcF0sIF9kYXRhW19vZmZzZXQgKyAyKl9zdGVwXSwgLi4uCi8vIGFuZCBjaGVja3MgZm9yIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uLgpjbGFzcyBfQ29tcGFjdEl0ZXJhYmxlPEU+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGZpbmFsIF9IYXNoQmFzZSBfdGFibGU7CiAgZmluYWwgTGlzdCBfZGF0YTsKICBmaW5hbCBpbnQgX2xlbjsKICBmaW5hbCBpbnQgX29mZnNldDsKICBmaW5hbCBpbnQgX3N0ZXA7CgogIF9Db21wYWN0SXRlcmFibGUoCiAgICAgIHRoaXMuX3RhYmxlLCB0aGlzLl9kYXRhLCB0aGlzLl9sZW4sIHRoaXMuX29mZnNldCwgdGhpcy5fc3RlcCk7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PgogICAgICBuZXcgX0NvbXBhY3RJdGVyYXRvcjxFPihfdGFibGUsIF9kYXRhLCBfbGVuLCBfb2Zmc2V0LCBfc3RlcCk7CgogIGludCBnZXQgbGVuZ3RoID0+IF90YWJsZS5sZW5ndGg7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBsZW5ndGggPT0gMDsKICBib29sIGdldCBpc05vdEVtcHR5ID0+ICFpc0VtcHR5Owp9CgpjbGFzcyBfQ29tcGFjdEl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIF9IYXNoQmFzZSBfdGFibGU7CiAgZmluYWwgTGlzdCBfZGF0YTsKICBmaW5hbCBpbnQgX2xlbjsKICBpbnQgX29mZnNldDsKICBmaW5hbCBpbnQgX3N0ZXA7CiAgZmluYWwgaW50IF9jaGVja1N1bTsKICBFIGN1cnJlbnQ7CgogIF9Db21wYWN0SXRlcmF0b3IoCiAgICAgIF9IYXNoQmFzZSB0YWJsZSwgdGhpcy5fZGF0YSwgdGhpcy5fbGVuLCB0aGlzLl9vZmZzZXQsIHRoaXMuX3N0ZXApCiAgICAgIDogX3RhYmxlID0gdGFibGUsCiAgICAgICAgX2NoZWNrU3VtID0gdGFibGUuX2NoZWNrU3VtOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF90YWJsZS5faXNNb2RpZmllZFNpbmNlKF9kYXRhLCBfY2hlY2tTdW0pKSB7CiAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IoX3RhYmxlKTsKICAgIH0KICAgIGRvIHsKICAgICAgX29mZnNldCArPSBfc3RlcDsKICAgIH0gd2hpbGUgKF9vZmZzZXQgPCBfbGVuICYmIF9IYXNoQmFzZS5faXNEZWxldGVkKF9kYXRhLCBfZGF0YVtfb2Zmc2V0XSkpOwogICAgaWYgKF9vZmZzZXQgPCBfbGVuKSB7CiAgICAgIGN1cnJlbnQgPSBpbnRlcm5hbC51bnNhZmVDYXN0PEU+KF9kYXRhW19vZmZzZXRdKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgewogICAgICBjdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKLy8gU2V0IGltcGxlbWVudGF0aW9uLCBhbmFsb2dvdXMgdG8gX0NvbXBhY3RMaW5rZWRIYXNoTWFwLgpjbGFzcyBfQ29tcGFjdExpbmtlZEhhc2hTZXQ8RT4gZXh0ZW5kcyBfSGFzaEZpZWxkQmFzZQogICAgd2l0aCBfSGFzaEJhc2UsIF9PcGVyYXRvckVxdWFsc0FuZEhhc2hDb2RlLCBTZXRNaXhpbjxFPgogICAgaW1wbGVtZW50cyBMaW5rZWRIYXNoU2V0PEU+IHsKICBfQ29tcGFjdExpbmtlZEhhc2hTZXQoKSA6IHN1cGVyKF9IYXNoQmFzZS5fSU5JVElBTF9JTkRFWF9TSVpFID4+IDEpIHsKICAgIGFzc2VydChfSGFzaEJhc2UuX1VOVVNFRF9QQUlSID09IDApOwogIH0KCiAgc3RhdGljIFNldDxSPiBfbmV3RW1wdHk8Uj4oKSA9PiBuZXcgX0NvbXBhY3RMaW5rZWRIYXNoU2V0PFI+KCk7CgogIFNldDxSPiBjYXN0PFI+KCkgPT4gU2V0LmNhc3RGcm9tPEUsIFI+KHRoaXMsIG5ld1NldDogX25ld0VtcHR5KTsKICBpbnQgZ2V0IGxlbmd0aCA9PiBfdXNlZERhdGEgLSBfZGVsZXRlZEtleXM7CgogIEUgZ2V0IGZpcnN0IHsKICAgIGZvciAoaW50IG9mZnNldCA9IDA7IG9mZnNldCA8IF91c2VkRGF0YTsgb2Zmc2V0KyspIHsKICAgICAgT2JqZWN0IGN1cnJlbnQgPSBfZGF0YVtvZmZzZXRdOwogICAgICBpZiAoIV9IYXNoQmFzZS5faXNEZWxldGVkKF9kYXRhLCBjdXJyZW50KSkgewogICAgICAgIHJldHVybiBjdXJyZW50OwogICAgICB9CiAgICB9CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgZm9yIChpbnQgb2Zmc2V0ID0gX3VzZWREYXRhIC0gMTsgb2Zmc2V0ID49IDA7IG9mZnNldC0tKSB7CiAgICAgIE9iamVjdCBjdXJyZW50ID0gX2RhdGFbb2Zmc2V0XTsKICAgICAgaWYgKCFfSGFzaEJhc2UuX2lzRGVsZXRlZChfZGF0YSwgY3VycmVudCkpIHsKICAgICAgICByZXR1cm4gY3VycmVudDsKICAgICAgfQogICAgfQogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICB2b2lkIF9yZWhhc2goKSB7CiAgICBpZiAoKF9kZWxldGVkS2V5cyA8PCAxKSA+IF91c2VkRGF0YSkgewogICAgICBfaW5pdChfaW5kZXgubGVuZ3RoLCBfaGFzaE1hc2ssIF9kYXRhLCBfdXNlZERhdGEpOwogICAgfSBlbHNlIHsKICAgICAgX2luaXQoX2luZGV4Lmxlbmd0aCA8PCAxLCBfaGFzaE1hc2sgPj4gMSwgX2RhdGEsIF91c2VkRGF0YSk7CiAgICB9CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKCFpc0VtcHR5KSB7CiAgICAgIF9pbml0KF9IYXNoQmFzZS5fSU5JVElBTF9JTkRFWF9TSVpFLCBfaGFzaE1hc2ssIG51bGwsIDApOwogICAgfQogIH0KCiAgdm9pZCBfaW5pdChpbnQgc2l6ZSwgaW50IGhhc2hNYXNrLCBMaXN0IG9sZERhdGEsIGludCBvbGRVc2VkKSB7CiAgICBfaW5kZXggPSBuZXcgVWludDMyTGlzdChzaXplKTsKICAgIF9oYXNoTWFzayA9IGhhc2hNYXNrOwogICAgX2RhdGEgPSBuZXcgTGlzdChzaXplID4+IDEpOwogICAgX3VzZWREYXRhID0gMDsKICAgIF9kZWxldGVkS2V5cyA9IDA7CiAgICBpZiAob2xkRGF0YSAhPSBudWxsKSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb2xkVXNlZDsgaSArPSAxKSB7CiAgICAgICAgdmFyIGtleSA9IG9sZERhdGFbaV07CiAgICAgICAgaWYgKCFfSGFzaEJhc2UuX2lzRGVsZXRlZChvbGREYXRhLCBrZXkpKSB7CiAgICAgICAgICBhZGQoa2V5KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIGJvb2wgYWRkKEUga2V5KSB7CiAgICBmaW5hbCBpbnQgc2l6ZSA9IF9pbmRleC5sZW5ndGg7CiAgICBmaW5hbCBpbnQgc2l6ZU1hc2sgPSBzaXplIC0gMTsKICAgIGZpbmFsIGludCBtYXhFbnRyaWVzID0gc2l6ZSA+PiAxOwogICAgZmluYWwgaW50IGZ1bGxIYXNoID0gX2hhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBpbnQgaGFzaFBhdHRlcm4gPSBfSGFzaEJhc2UuX2hhc2hQYXR0ZXJuKGZ1bGxIYXNoLCBfaGFzaE1hc2ssIHNpemUpOwogICAgaW50IGkgPSBfSGFzaEJhc2UuX2ZpcnN0UHJvYmUoZnVsbEhhc2gsIHNpemVNYXNrKTsKICAgIGludCBmaXJzdERlbGV0ZWQgPSAtMTsKICAgIGludCBwYWlyID0gX2luZGV4W2ldOwogICAgd2hpbGUgKHBhaXIgIT0gX0hhc2hCYXNlLl9VTlVTRURfUEFJUikgewogICAgICBpZiAocGFpciA9PSBfSGFzaEJhc2UuX0RFTEVURURfUEFJUikgewogICAgICAgIGlmIChmaXJzdERlbGV0ZWQgPCAwKSB7CiAgICAgICAgICBmaXJzdERlbGV0ZWQgPSBpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBmaW5hbCBpbnQgZCA9IGhhc2hQYXR0ZXJuIF4gcGFpcjsKICAgICAgICBpZiAoZCA8IG1heEVudHJpZXMgJiYgX2VxdWFscyhrZXksIF9kYXRhW2RdKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBpID0gX0hhc2hCYXNlLl9uZXh0UHJvYmUoaSwgc2l6ZU1hc2spOwogICAgICBwYWlyID0gX2luZGV4W2ldOwogICAgfQogICAgaWYgKF91c2VkRGF0YSA9PSBfZGF0YS5sZW5ndGgpIHsKICAgICAgX3JlaGFzaCgpOwogICAgICBhZGQoa2V5KTsKICAgIH0gZWxzZSB7CiAgICAgIGZpbmFsIGludCBpbnNlcnRpb25Qb2ludCA9IChmaXJzdERlbGV0ZWQgPj0gMCkgPyBmaXJzdERlbGV0ZWQgOiBpOwogICAgICBhc3NlcnQoMSA8PSBoYXNoUGF0dGVybiAmJiBoYXNoUGF0dGVybiA8ICgxIDw8IDMyKSk7CiAgICAgIGFzc2VydCgoaGFzaFBhdHRlcm4gJiBfdXNlZERhdGEpID09IDApOwogICAgICBfaW5kZXhbaW5zZXJ0aW9uUG9pbnRdID0gaGFzaFBhdHRlcm4gfCBfdXNlZERhdGE7CiAgICAgIF9kYXRhW191c2VkRGF0YSsrXSA9IGtleTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgLy8gSWYga2V5IGlzIGFic2VudCwgcmV0dXJuIF9kYXRhICh3aGljaCBpcyBuZXZlciBhIHZhbHVlKS4KICBPYmplY3QgX2dldEtleU9yRGF0YShPYmplY3Qga2V5KSB7CiAgICBmaW5hbCBpbnQgc2l6ZSA9IF9pbmRleC5sZW5ndGg7CiAgICBmaW5hbCBpbnQgc2l6ZU1hc2sgPSBzaXplIC0gMTsKICAgIGZpbmFsIGludCBtYXhFbnRyaWVzID0gc2l6ZSA+PiAxOwogICAgZmluYWwgaW50IGZ1bGxIYXNoID0gX2hhc2hDb2RlKGtleSk7CiAgICBmaW5hbCBpbnQgaGFzaFBhdHRlcm4gPSBfSGFzaEJhc2UuX2hhc2hQYXR0ZXJuKGZ1bGxIYXNoLCBfaGFzaE1hc2ssIHNpemUpOwogICAgaW50IGkgPSBfSGFzaEJhc2UuX2ZpcnN0UHJvYmUoZnVsbEhhc2gsIHNpemVNYXNrKTsKICAgIGludCBwYWlyID0gX2luZGV4W2ldOwogICAgd2hpbGUgKHBhaXIgIT0gX0hhc2hCYXNlLl9VTlVTRURfUEFJUikgewogICAgICBpZiAocGFpciAhPSBfSGFzaEJhc2UuX0RFTEVURURfUEFJUikgewogICAgICAgIGZpbmFsIGludCBkID0gaGFzaFBhdHRlcm4gXiBwYWlyOwogICAgICAgIGlmIChkIDwgbWF4RW50cmllcyAmJiBfZXF1YWxzKGtleSwgX2RhdGFbZF0pKSB7CiAgICAgICAgICByZXR1cm4gX2RhdGFbZF07IC8vIE5vdGU6IE11c3QgcmV0dXJuIHRoZSBleGlzdGluZyBrZXkuCiAgICAgICAgfQogICAgICB9CiAgICAgIGkgPSBfSGFzaEJhc2UuX25leHRQcm9iZShpLCBzaXplTWFzayk7CiAgICAgIHBhaXIgPSBfaW5kZXhbaV07CiAgICB9CiAgICByZXR1cm4gX2RhdGE7CiAgfQoKICBFIGxvb2t1cChPYmplY3Qga2V5KSB7CiAgICB2YXIgayA9IF9nZXRLZXlPckRhdGEoa2V5KTsKICAgIHJldHVybiBpZGVudGljYWwoX2RhdGEsIGspID8gbnVsbCA6IGs7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBrZXkpID0+ICFpZGVudGljYWwoX2RhdGEsIF9nZXRLZXlPckRhdGEoa2V5KSk7CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIGZpbmFsIGludCBzaXplID0gX2luZGV4Lmxlbmd0aDsKICAgIGZpbmFsIGludCBzaXplTWFzayA9IHNpemUgLSAxOwogICAgZmluYWwgaW50IG1heEVudHJpZXMgPSBzaXplID4+IDE7CiAgICBmaW5hbCBpbnQgZnVsbEhhc2ggPSBfaGFzaENvZGUoa2V5KTsKICAgIGZpbmFsIGludCBoYXNoUGF0dGVybiA9IF9IYXNoQmFzZS5faGFzaFBhdHRlcm4oZnVsbEhhc2gsIF9oYXNoTWFzaywgc2l6ZSk7CiAgICBpbnQgaSA9IF9IYXNoQmFzZS5fZmlyc3RQcm9iZShmdWxsSGFzaCwgc2l6ZU1hc2spOwogICAgaW50IHBhaXIgPSBfaW5kZXhbaV07CiAgICB3aGlsZSAocGFpciAhPSBfSGFzaEJhc2UuX1VOVVNFRF9QQUlSKSB7CiAgICAgIGlmIChwYWlyICE9IF9IYXNoQmFzZS5fREVMRVRFRF9QQUlSKSB7CiAgICAgICAgZmluYWwgaW50IGQgPSBoYXNoUGF0dGVybiBeIHBhaXI7CiAgICAgICAgaWYgKGQgPCBtYXhFbnRyaWVzICYmIF9lcXVhbHMoa2V5LCBfZGF0YVtkXSkpIHsKICAgICAgICAgIF9pbmRleFtpXSA9IF9IYXNoQmFzZS5fREVMRVRFRF9QQUlSOwogICAgICAgICAgX0hhc2hCYXNlLl9zZXREZWxldGVkQXQoX2RhdGEsIGQpOwogICAgICAgICAgKytfZGVsZXRlZEtleXM7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaSA9IF9IYXNoQmFzZS5fbmV4dFByb2JlKGksIHNpemVNYXNrKTsKICAgICAgcGFpciA9IF9pbmRleFtpXTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PgogICAgICBuZXcgX0NvbXBhY3RJdGVyYXRvcjxFPih0aGlzLCBfZGF0YSwgX3VzZWREYXRhLCAtMSwgMSk7CgogIC8vIFJldHVybnMgYSBzZXQgb2YgdGhlIHNhbWUgdHlwZSwgYWx0aG91Z2ggdGhpcwogIC8vIGlzIG5vdCByZXF1aXJlZCBieSB0aGUgc3BlYy4gKEZvciBpbnN0YW5jZSwgYWx3YXlzIHVzaW5nIGFuIGlkZW50aXR5IHNldAogIC8vIHdvdWxkIGJlIHRlY2huaWNhbGx5IGNvcnJlY3QsIGFsYmVpdCBzdXJwcmlzaW5nLikKICBTZXQ8RT4gdG9TZXQoKSA9PiBuZXcgX0NvbXBhY3RMaW5rZWRIYXNoU2V0PEU+KCkuLmFkZEFsbCh0aGlzKTsKCiAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IFtfcmVoYXNoT2JqZWN0c10gKHNlZSBhYm92ZSkuCiAgdm9pZCBfcmVnZW5lcmF0ZUluZGV4KCkgewogICAgX3JlaGFzaCgpOwogIH0KfQoKY2xhc3MgX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hTZXQ8RT4gZXh0ZW5kcyBfQ29tcGFjdExpbmtlZEhhc2hTZXQ8RT4KICAgIHdpdGggX0lkZW50aWNhbEFuZElkZW50aXR5SGFzaENvZGUgewogIFNldDxFPiB0b1NldCgpID0+IG5ldyBfQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaFNldDxFPigpLi5hZGRBbGwodGhpcyk7CgogIHN0YXRpYyBTZXQ8Uj4gX25ld0VtcHR5PFI+KCkgPT4gbmV3IF9Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoU2V0PFI+KCk7CgogIFNldDxSPiBjYXN0PFI+KCkgPT4gU2V0LmNhc3RGcm9tPEUsIFI+KHRoaXMsIG5ld1NldDogX25ld0VtcHR5KTsKfQoKY2xhc3MgX0NvbXBhY3RMaW5rZWRDdXN0b21IYXNoU2V0PEU+IGV4dGVuZHMgX0NvbXBhY3RMaW5rZWRIYXNoU2V0PEU+IHsKICBmaW5hbCBfZXF1YWxpdHk7CiAgZmluYWwgX2hhc2hlcjsKICBmaW5hbCBfdmFsaWRLZXk7CgogIGludCBfaGFzaENvZGUoZSkgPT4gX2hhc2hlcihlKTsKICBib29sIF9lcXVhbHMoZTEsIGUyKSA9PiBfZXF1YWxpdHkoZTEsIGUyKTsKCiAgYm9vbCBjb250YWlucyhPYmplY3QgbykgPT4gX3ZhbGlkS2V5KG8pID8gc3VwZXIuY29u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aGVzZSBmaXZlLgovLy8KLy8vIFRoZSBga2V5c2AgaXRlcmFibGUgc2hvdWxkIGhhdmUgZWZmaWNpZW50IFtJdGVyYWJsZS5sZW5ndGhdIGFuZAovLy8gW0l0ZXJhYmxlLmNvbnRhaW5zXSBvcGVyYXRpb25zLCBhbmQgaXQgc2hvdWxkIGNhdGNoIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucwovLy8gb2YgdGhlIGtleXMgd2hpbGUgaXRlcmF0aW5nLgovLy8KLy8vIEEgbW9yZSBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gaXMgdXN1YWxseSBwb3NzaWJsZSBieSBvdmVycmlkaW5nCi8vLyBzb21lIG9mIHRoZSBvdGhlciBtZW1iZXJzIGFzIHdlbGwuCmFic3RyYWN0IGNsYXNzIE1hcEJhc2U8SywgVj4gZXh0ZW5kcyBNYXBNaXhpbjxLLCBWPiB7CiAgc3RhdGljIFN0cmluZyBtYXBUb1N0cmluZyhNYXAgbSkgewogICAgLy8gUmV1c2VzIHRoZSBsaXN0IGluIEl0ZXJhYmxlQmFzZSBmb3IgZGV0ZWN0aW5nIHRvU3RyaW5nIGN5Y2xlcy4KICAgIGlmIChfaXNUb1N0cmluZ1Zpc2l0aW5nKG0pKSB7CiAgICAgIHJldHVybiAney4uLn0nOwogICAgfQoKICAgIHZhciByZXN1bHQgPSBTdHJpbmdCdWZmZXIoKTsKICAgIHRyeSB7CiAgICAgIF90b1N0cmluZ1Zpc2l0aW5nLmFkZChtKTsKICAgICAgcmVzdWx0LndyaXRlKCd7Jyk7CiAgICAgIGJvb2wgZmlyc3QgPSB0cnVlOwogICAgICBtLmZvckVhY2goKGssIHYpIHsKICAgICAgICBpZiAoIWZpcnN0KSB7CiAgICAgICAgICByZXN1bHQud3JpdGUoJywgJyk7CiAgICAgICAgfQogICAgICAgIGZpcnN0ID0gZmFsc2U7CiAgICAgICAgcmVzdWx0LndyaXRlKGspOwogICAgICAgIHJlc3VsdC53cml0ZSgnOiAnKTsKICAgICAgICByZXN1bHQud3JpdGUodik7CiAgICAgIH0pOwogICAgICByZXN1bHQud3JpdGUoJ30nKTsKICAgIH0gZmluYWxseSB7CiAgICAgIGFzc2VydChpZGVudGljYWwoX3RvU3RyaW5nVmlzaXRpbmcubGFzdCwgbSkpOwogICAgICBfdG9TdHJpbmdWaXNpdGluZy5yZW1vdmVMYXN0KCk7CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogIH0KCiAgc3RhdGljIF9pZCh4KSA9PiB4OwoKICAvLy8gRmlsbHMgYSBbTWFwXSB3aXRoIGtleS92YWx1ZSBwYWlycyBjb21wdXRlZCBmcm9tIFtpdGVyYWJsZV0uCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgW01hcF0gY2xhc3NlcyBpbiB0aGUgbmFtZWQgY29uc3RydWN0b3IKICAvLy8gYGZyb21JdGVyYWJsZWAuCiAgc3RhdGljIHZvaWQgX2ZpbGxNYXBXaXRoTWFwcGVkSXRlcmFibGUoCiAgICAgIE1hcCBtYXAsIEl0ZXJhYmxlIGl0ZXJhYmxlLCBrZXkoZWxlbWVudCksIHZhbHVlKGVsZW1lbnQpKSB7CiAgICBrZXkgPz89IF9pZDsKICAgIHZhbHVlID8/PSBfaWQ7CgogICAgZm9yICh2YXIgZWxlbWVudCBpbiBpdGVyYWJsZSkgewogICAgICBtYXBba2V5KGVsZW1lbnQpXSA9IHZhbHVlKGVsZW1lbnQpOwogICAgfQogIH0KCiAgLy8vIEZpbGxzIGEgbWFwIGJ5IGFzc29jaWF0aW5nIHRoZSBba2V5c10gdG8gW3ZhbHVlc10uCiAgLy8vCiAgLy8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgYnkgW01hcF0gY2xhc3NlcyBpbiB0aGUgbmFtZWQgY29uc3RydWN0b3IKICAvLy8gYGZyb21JdGVyYWJsZXNgLgogIHN0YXRpYyB2b2lkIF9maWxsTWFwV2l0aEl0ZXJhYmxlcyhNYXAgbWFwLCBJdGVyYWJsZSBrZXlzLCBJdGVyYWJsZSB2YWx1ZXMpIHsKICAgIEl0ZXJhdG9yIGtleUl0ZXJhdG9yID0ga2V5cy5pdGVyYXRvcjsKICAgIEl0ZXJhdG9yIHZhbHVlSXRlcmF0b3IgPSB2YWx1ZXMuaXRlcmF0b3I7CgogICAgYm9vbCBoYXNOZXh0S2V5ID0ga2V5SXRlcmF0b3IubW92ZU5leHQoKTsKICAgIGJvb2wgaGFzTmV4dFZhbHVlID0gdmFsdWVJdGVyYXRvci5tb3ZlTmV4dCgpOwoKICAgIHdoaWxlIChoYXNOZXh0S2V5ICYmIGhhc05leHRWYWx1ZSkgewogICAgICBtYXBba2V5SXRlcmF0b3IuY3VycmVudF0gPSB2YWx1ZUl0ZXJhdG9yLmN1cnJlbnQ7CiAgICAgIGhhc05leHRLZXkgPSBrZXlJdGVyYXRvci5tb3ZlTmV4dCgpOwogICAgICBoYXNOZXh0VmFsdWUgPSB2YWx1ZUl0ZXJhdG9yLm1vdmVOZXh0KCk7CiAgICB9CgogICAgaWYgKGhhc05leHRLZXkgfHwgaGFzTmV4dFZhbHVlKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoIkl0ZXJhYmxlcyBkbyBub3QgaGF2ZSBzYW1lIGxlbmd0aC4iKTsKICAgIH0KICB9Cn0KCi8vLyBNaXhpbiBpbXBsZW1lbnRpbmcgYSBbTWFwXS4KLy8vCi8vLyBUaGlzIG1peGluIGhhcyBhIGJhc2ljIGltcGxlbWVudGF0aW9uIG9mIGFsbCBidXQgZml2ZSBvZiB0aGUgbWVtYmVycyBvZgovLy8gW01hcF0uCi8vLyBBIGJhc2ljIGBNYXBgIGNsYXNzIGNhbiBiZSBpbXBsZW1lbnRlZCBieSBtaXhpbiBpbiB0aGlzIGNsYXNzIGFuZAovLy8gaW1wbGVtZW50aW5nIGBrZXlzYCwgYG9wZXJhdG9yW11gLCBgb3BlcmF0b3JbXT1gLCBgcmVtb3ZlYCBhbmQgYGNsZWFyYC4KLy8vIFRoZSByZW1haW5pbmcgb3BlcmF0aW9ucyBhcmUgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgdGhlc2UgZml2ZS4KLy8vCi8vLyBUaGUgYGtleXNgIGl0ZXJhYmxlIHNob3VsZCBoYXZlIGVmZmljaWVudCBbSXRlcmFibGUubGVuZ3RoXSBhbmQKLy8vIFtJdGVyYWJsZS5jb250YWluc10gb3BlcmF0aW9ucywgYW5kIGl0IHNob3VsZCBjYXRjaCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMKLy8vIG9mIHRoZSBrZXlzIHdoaWxlIGl0ZXJhdGluZy4KLy8vCi8vLyBBIG1vcmUgZWZmaWNpZW50IGltcGxlbWVudGF0aW9uIGlzIHVzdWFsbHkgcG9zc2libGUgYnkgb3ZlcnJpZGluZwovLy8gc29tZSBvZiB0aGUgb3RoZXIgbWVtYmVycyBhcyB3ZWxsLgphYnN0cmFjdCBjbGFzcyBNYXBNaXhpbjxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgSXRlcmFibGU8Sz4gZ2V0IGtleXM7CiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KTsKICBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpOwogIFYgcmVtb3ZlKE9iamVjdCBrZXkpOwogIC8vIFRoZSBgY2xlYXJgIG9wZXJhdGlvbiBzaG91bGQgbm90IGJlIGJhc2VkIG9uIGByZW1vdmVgLgogIC8vIEl0IHNob3VsZCBjbGVhciB0aGUgbWFwIGV2ZW4gaWYgc29tZSBrZXlzIGFyZSBub3QgZXF1YWwgdG8gdGhlbXNlbHZlcy4KICB2b2lkIGNsZWFyKCk7CgogIE1hcDxSSywgUlY+IGNhc3Q8UkssIFJWPigpID0+IE1hcC5jYXN0RnJvbTxLLCBWLCBSSywgUlY+KHRoaXMpOwogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihLIGtleSwgViB2YWx1ZSkpIHsKICAgIGZvciAoSyBrZXkgaW4ga2V5cykgewogICAgICBhY3Rpb24oa2V5LCB0aGlzW2tleV0pOwogICAgfQogIH0KCiAgdm9pZCBhZGRBbGwoTWFwPEssIFY+IG90aGVyKSB7CiAgICBmb3IgKEsga2V5IGluIG90aGVyLmtleXMpIHsKICAgICAgdGhpc1trZXldID0gb3RoZXJba2V5XTsKICAgIH0KICB9CgogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpIHsKICAgIGZvciAoSyBrZXkgaW4ga2V5cykgewogICAgICBpZiAodGhpc1trZXldID09IHZhbHVlKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgewogICAgaWYgKGNvbnRhaW5zS2V5KGtleSkpIHsKICAgICAgcmV0dXJuIHRoaXNba2V5XTsKICAgIH0KICAgIHJldHVybiB0aGlzW2tleV0gPSBpZkFic2VudCgpOwogIH0KCiAgViB1cGRhdGUoSyBrZXksIFYgdXBkYXRlKFYgdmFsdWUpLCB7ViBpZkFic2VudCgpfSkgewogICAgaWYgKHRoaXMuY29udGFpbnNLZXkoa2V5KSkgewogICAgICByZXR1cm4gdGhpc1trZXldID0gdXBkYXRlKHRoaXNba2V5XSk7CiAgICB9CiAgICBpZiAoaWZBYnNlbnQgIT0gbnVsbCkgewogICAgICByZXR1cm4gdGhpc1trZXldID0gaWZBYnNlbnQoKTsKICAgIH0KICAgIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUoa2V5LCAia2V5IiwgIktleSBub3QgaW4gbWFwLiIpOwogIH0KCiAgdm9pZCB1cGRhdGVBbGwoViB1cGRhdGUoSyBrZXksIFYgdmFsdWUpKSB7CiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5rZXlzKSB7CiAgICAgIHRoaXNba2V5XSA9IHVwZGF0ZShrZXksIHRoaXNba2V5XSk7CiAgICB9CiAgfQoKICBJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZ2V0IGVudHJpZXMgewogICAgcmV0dXJuIGtleXMubWFwKChLIGtleSkgPT4gTWFwRW50cnk8SywgVj4oa2V5LCB0aGlzW2tleV0pKTsKICB9CgogIE1hcDxLMiwgVjI+IG1hcDxLMiwgVjI+KE1hcEVudHJ5PEsyLCBWMj4gdHJhbnNmb3JtKEsga2V5LCBWIHZhbHVlKSkgewogICAgdmFyIHJlc3VsdCA9IDxLMiwgVjI+e307CiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5rZXlzKSB7CiAgICAgIHZhciBlbnRyeSA9IHRyYW5zZm9ybShrZXksIHRoaXNba2V5XSk7CiAgICAgIHJlc3VsdFtlbnRyeS5rZXldID0gZW50cnkudmFsdWU7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBhZGRFbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBuZXdFbnRyaWVzKSB7CiAgICBmb3IgKHZhciBlbnRyeSBpbiBuZXdFbnRyaWVzKSB7CiAgICAgIHRoaXNbZW50cnkua2V5XSA9IGVudHJ5LnZhbHVlOwogICAgfQogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoSyBrZXksIFYgdmFsdWUpKSB7CiAgICB2YXIga2V5c1RvUmVtb3ZlID0gPEs+W107CiAgICBmb3IgKHZhciBrZXkgaW4ga2V5cykgewogICAgICBpZiAodGVzdChrZXksIHRoaXNba2V5XSkpIGtleXNUb1JlbW92ZS5hZGQoa2V5KTsKICAgIH0KICAgIGZvciAodmFyIGtleSBpbiBrZXlzVG9SZW1vdmUpIHsKICAgICAgdGhpcy5yZW1vdmUoa2V5KTsKICAgIH0KICB9CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgPT4ga2V5cy5jb250YWlucyhrZXkpOwogIGludCBnZXQgbGVuZ3RoID0+IGtleXMubGVuZ3RoOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4ga2V5cy5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4ga2V5cy5pc05vdEVtcHR5OwogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gX01hcEJhc2VWYWx1ZUl0ZXJhYmxlPEssIFY+KHRoaXMpOwogIFN0cmluZyB0b1N0cmluZygpID0+IE1hcEJhc2UubWFwVG9TdHJpbmcodGhpcyk7Cn0KCi8vLyBCYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBhbiB1bm1vZGlmaWFibGUgW01hcF0uCi8vLwovLy8gVGhpcyBjbGFzcyBoYXMgYSBiYXNpYyBpbXBsZW1lbnRhdGlvbiBvZiBhbGwgYnV0IHR3byBvZiB0aGUgbWVtYmVycyBvZgovLy8gYW4gdW1vZGlmaWFibGUgW01hcF0uCi8vLyBBIHNpbXBsZSB1bm1vZGlmaWFibGUgYE1hcGAgY2xhc3MgY2FuIGJlIGltcGxlbWVudGVkIGJ5IGV4dGVuZGluZyB0aGlzCi8vLyBjbGFzcyBhbmQgaW1wbGVtZW50aW5nIGBrZXlzYCBhbmQgYG9wZXJhdG9yW11gLgovLy8KLy8vIE1vZGlmeWluZyBvcGVyYXRpb25zIHRocm93IHdoZW4gdXNlZC4KLy8vIFRoZSByZW1haW5pbmcgbm9uLW1vZGlmeWluZyBvcGVyYXRpb25zIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBga2V5c2AKLy8vIGFuZCBgb3BlcmF0b3JbXWAuCi8vLwovLy8gVGhlIGBrZXlzYCBpdGVyYWJsZSBzaG91bGQgaGF2ZSBlZmZpY2llbnQgW0l0ZXJhYmxlLmxlbmd0aF0gYW5kCi8vLyBbSXRlcmFibGUuY29udGFpbnNdIG9wZXJhdGlvbnMsIGFuZCBpdCBzaG91bGQgY2F0Y2ggY29uY3VycmVudCBtb2RpZmljYXRpb25zCi8vLyBvZiB0aGUga2V5cyB3aGlsZSBpdGVyYXRpbmcuCi8vLwovLy8gQSBtb3JlIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBpcyB1c3VhbGx5IHBvc3NpYmxlIGJ5IG92ZXJyaWRpbmcKLy8vIHNvbWUgb2YgdGhlIG90aGVyIG1lbWJlcnMgYXMgd2VsbC4KYWJzdHJhY3QgY2xhc3MgVW5tb2RpZmlhYmxlTWFwQmFzZTxLLCBWPiA9IE1hcEJhc2U8SywgVj4KICAgIHdpdGggX1VubW9kaWZpYWJsZU1hcE1peGluPEssIFY+OwoKLy8vIEltcGxlbWVudGF0aW9uIG9mIFtNYXAudmFsdWVzXSBiYXNlZCBvbiB0aGUgbWFwIGFuZCBpdHMgW01hcC5rZXlzXSBpdGVyYWJsZS4KLy8vCi8vLyBJdGVyYWJsZSB0aGF0IGl0ZXJhdGVzIG92ZXIgdGhlIHZhbHVlcyBvZiBhIGBNYXBgLgovLy8gSXQgYWNjZXNzZXMgdGhlIHZhbHVlcyBieSBpdGVyYXRpbmcgb3ZlciB0aGUga2V5cyBvZiB0aGUgbWFwLCBhbmQgdXNpbmcgdGhlCi8vLyBtYXAncyBgb3BlcmF0b3JbXWAgdG8gbG9va3VwIHRoZSBrZXlzLgpjbGFzcyBfTWFwQmFzZVZhbHVlSXRlcmFibGU8SywgVj4gZXh0ZW5kcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxWPiB7CiAgZmluYWwgTWFwPEssIFY+IF9tYXA7CiAgX01hcEJhc2VWYWx1ZUl0ZXJhYmxlKHRoaXMuX21hcCk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9tYXAubGVuZ3RoOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX21hcC5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX21hcC5pc05vdEVtcHR5OwogIFYgZ2V0IGZpcnN0ID0+IF9tYXBbX21hcC5rZXlzLmZpcnN0XTsKICBWIGdldCBzaW5nbGUgPT4gX21hcFtfbWFwLmtleXMuc2luZ2xlXTsKICBWIGdldCBsYXN0ID0+IF9tYXBbX21hcC5rZXlzLmxhc3RdOwoKICBJdGVyYXRvcjxWPiBnZXQgaXRlcmF0b3IgPT4gX01hcEJhc2VWYWx1ZUl0ZXJhdG9yPEssIFY+KF9tYXApOwp9CgovLy8gSXRlcmF0b3IgY3JlYXRlZCBieSBbX01hcEJhc2VWYWx1ZUl0ZXJhYmxlXS4KLy8vCi8vLyBJdGVyYXRlcyBvdmVyIHRoZSB2YWx1ZXMgb2YgYSBtYXAgYnkgaXRlcmF0aW5nIGl0cyBrZXlzIGFuZCBsb29rdXAgdXAgdGhlCi8vLyB2YWx1ZXMuCmNsYXNzIF9NYXBCYXNlVmFsdWVJdGVyYXRvcjxLLCBWPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPFY+IHsKICBmaW5hbCBJdGVyYXRvcjxLPiBfa2V5czsKICBmaW5hbCBNYXA8SywgVj4gX21hcDsKICBWIF9jdXJyZW50OwoKICBfTWFwQmFzZVZhbHVlSXRlcmF0b3IoTWFwPEssIFY+IG1hcCkKICAgICAgOiBfbWFwID0gbWFwLAogICAgICAgIF9rZXlzID0gbWFwLmtleXMuaXRlcmF0b3I7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX2tleXMubW92ZU5leHQoKSkgewogICAgICBfY3VycmVudCA9IF9tYXBbX2tleXMuY3VycmVudF07CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgX2N1cnJlbnQgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgViBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKfQoKLy8vIE1peGluIHRoYXQgb3ZlcnJpZGVzIG11dGF0aW5nIG1hcCBvcGVyYXRpb25zIHdpdGggaW1wbGVtZW50YXRpb25zIHRoYXQKLy8vIHRocm93LgphYnN0cmFjdCBjbGFzcyBfVW5tb2RpZmlhYmxlTWFwTWl4aW48SywgVj4gaW1wbGVtZW50cyBNYXA8SywgVj4gewogIC8vLyBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBtYXAuCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICB2b2lkIGFkZEFsbChNYXA8SywgVj4gb3RoZXIpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICB2b2lkIGFkZEVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGVudHJpZXMpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICB2b2lkIGNsZWFyKCkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSB1bm1vZGlmaWFibGUgbWFwIik7CiAgfQoKICAvLy8gVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbWFwLgogIFYgcmVtb3ZlKE9iamVjdCBrZXkpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChLIGtleSwgViB2YWx1ZSkpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICBWIHB1dElmQWJzZW50KEsga2V5LCBWIGlmQWJzZW50KCkpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpOwogIH0KCiAgLy8vIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIG1hcC4KICBWIHVwZGF0ZShLIGtleSwgViB1cGRhdGUoViB2YWx1ZSksIHtWIGlmQWJzZW50KCl9KSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IHVubW9kaWZpYWJsZSBtYXAiKTsKICB9CgogIC8vLyBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBtYXAuCiAgdm9pZCB1cGRhdGVBbGwoViB1cGRhdGUoSyBrZXksIFYgdmFsdWUpKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IHVubW9kaWZpYWJsZSBtYXAiKTsKICB9Cn0KCi8vLyBXcmFwcGVyIGFyb3VuZCBhIGNsYXNzIHRoYXQgaW1wbGVtZW50cyBbTWFwXSB0aGF0IG9ubHkgZXhwb3NlcyBgTWFwYAovLy8gbWVtYmVycy4KLy8vCi8vLyBBIHNpbXBsZSB3cmFwcGVyIHRoYXQgZGVsZWdhdGVzIGFsbCBgTWFwYCBtZW1iZXJzIHRvIHRoZSBtYXAgcHJvdmlkZWQgaW4gdGhlCi8vLyBjb25zdHJ1Y3Rvci4KLy8vCi8vLyBCYXNlIGZvciBkZWxlZ2F0aW5nIG1hcCBpbXBsZW1lbnRhdGlvbnMgbGlrZSBbVW5tb2RpZmlhYmxlTWFwVmlld10uCmNsYXNzIE1hcFZpZXc8SywgVj4gaW1wbGVtZW50cyBNYXA8SywgVj4gewogIGZpbmFsIE1hcDxLLCBWPiBfbWFwOwogIGNvbnN0IE1hcFZpZXcoTWFwPEssIFY+IG1hcCkgOiBfbWFwID0gbWFwOwoKICBNYXA8UkssIFJWPiBjYXN0PFJLLCBSVj4oKSA9PiBfbWFwLmNhc3Q8UkssIFJWPigpOwogIFYgb3BlcmF0b3IgW10oT2JqZWN0IGtleSkgPT4gX21hcFtrZXldOwogIHZvaWQgb3BlcmF0b3IgW109KEsga2V5LCBWIHZhbHVlKSB7CiAgICBfbWFwW2tleV0gPSB2YWx1ZTsKICB9CgogIHZvaWQgYWRkQWxsKE1hcDxLLCBWPiBvdGhlcikgewogICAgX21hcC5hZGRBbGwob3RoZXIpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIF9tYXAuY2xlYXIoKTsKICB9CgogIFYgcHV0SWZBYnNlbnQoSyBrZXksIFYgaWZBYnNlbnQoKSkgPT4gX21hcC5wdXRJZkFic2VudChrZXksIGlmQWJzZW50KTsKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpID0+IF9tYXAuY29udGFpbnNLZXkoa2V5KTsKICBib29sIGNvbnRhaW5zVmFsdWUoT2JqZWN0IHZhbHVlKSA9PiBfbWFwLmNvbnRhaW5zVmFsdWUodmFsdWUpOwogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihLIGtleSwgViB2YWx1ZSkpIHsKICAgIF9tYXAuZm9yRWFjaChhY3Rpb24pOwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfbWFwLmlzRW1wdHk7CiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfbWFwLmlzTm90RW1wdHk7CiAgaW50IGdldCBsZW5ndGggPT4gX21hcC5sZW5ndGg7CiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gX21hcC5rZXlzOwogIFYgcmVtb3ZlKE9iamVjdCBrZXkpID0+IF9tYXAucmVtb3ZlKGtleSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX21hcC50b1N0cmluZygpOwogIEl0ZXJhYmxlPFY+IGdldCB2YWx1ZXMgPT4gX21hcC52YWx1ZXM7CgogIEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBnZXQgZW50cmllcyA9PiBfbWFwLmVudHJpZXM7CgogIHZvaWQgYWRkRW50cmllcyhJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gZW50cmllcykgewogICAgX21hcC5hZGRFbnRyaWVzKGVudHJpZXMpOwogIH0KCiAgTWFwPEsyLCBWMj4gbWFwPEsyLCBWMj4oTWFwRW50cnk8SzIsIFYyPiB0cmFuc2Zvcm0oSyBrZXksIFYgdmFsdWUpKSA9PgogICAgICBfbWFwLm1hcDxLMiwgVjI+KHRyYW5zZm9ybSk7CgogIFYgdXBkYXRlKEsga2V5LCBWIHVwZGF0ZShWIHZhbHVlKSwge1YgaWZBYnNlbnQoKX0pID0+CiAgICAgIF9tYXAudXBkYXRlKGtleSwgdXBkYXRlLCBpZkFic2VudDogaWZBYnNlbnQpOwoKICB2b2lkIHVwZGF0ZUFsbChWIHVwZGF0ZShLIGtleSwgViB2YWx1ZSkpIHsKICAgIF9tYXAudXBkYXRlQWxsKHVwZGF0ZSk7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChLIGtleSwgViB2YWx1ZSkpIHsKICAgIF9tYXAucmVtb3ZlV2hlcmUodGVzdCk7CiAgfQp9CgovLy8gVmlldyBvZiBhIFtNYXBdIHRoYXQgZGlzYWxsb3cgbW9kaWZ5aW5nIHRoZSBtYXAuCi8vLwovLy8gQSB3cmFwcGVyIGFyb3VuZCBhIGBNYXBgIHRoYXQgZm9yd2FyZHMgYWxsIG1lbWJlcnMgdG8gdGhlIG1hcCBwcm92aWRlZCBpbgovLy8gdGhlIGNvbnN0cnVjdG9yLCBleGNlcHQgZm9yIG9wZXJhdGlvbnMgdGhhdCBtb2RpZnkgdGhlIG1hcC4KLy8vIE1vZGlmeWluZyBvcGVyYXRpb25zIHRocm93IGluc3RlYWQuCmNsYXNzIFVubW9kaWZpYWJsZU1hcFZpZXc8SywgVj4gZXh0ZW5kcyBNYXBWaWV3PEssIFY+CiAgICB3aXRoIF9Vbm1vZGlmaWFibGVNYXBNaXhpbjxLLCBWPiB7CiAgVW5tb2RpZmlhYmxlTWFwVmlldyhNYXA8SywgVj4gbWFwKSA6IHN1cGVyKG1hcCk7CgogIE1hcDxSSywgUlY+IGNhc3Q8UkssIFJWPigpID0+CiAgICAgIFVubW9kaWZpYWJsZU1hcFZpZXc8UkssIFJWPihfbWFwLmNhc3Q8UkssIFJWPigpKTsKfQqBfABOTjwBGQEpBEwLR0xFBERRIQRGJzYlRiIWBgEhCiAZGRkWHgoXGRwZChkQNCYGAR4EARYBQwZEFipCERMBJCoGBAE5BkQXTyouAS4yASk4Ky8GASZBBgQCASAETAtGTEUERFEhBEYnNRgdIBg8TBABQi4aHgYEASEgHgYEASUaKwYSBAEnHBgGIwQBNyEsBhwlBj4EAS0hKgYEASlABAFIHSEtJwYTBAE5JCUGBAEwHhw3BiQYBgQBNiEkKj8yAgEzBEsaSzQEKk4WBERRIQRGJzkmAVEEN1ArRxgkASEkKigqJgFBAgExBE4MOxsYDgEnFCMBFBwmEwYVEgQBHQIBSwtCPiY+BAE+IT4EAT42PgQBPhE+BAE+GT4EAT4wPgQBPic+BAE+Nz4EAT4tPgQCAUkNBFERBEgrGC0BNSomFwQBIRgEARESBAFJOUEuGgQBJCohJSwoKQE4ATYeBAFJIwE4NAEtHAQBMBwEAgE1BE5AKDYnMwEgOAIBGWRhcnQ6Y29sbGVjdGlvbi9tYXBzLmRhcnQvb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbGxlY3Rpb24vc2V0LmRhcnTAAEDlLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBCYXNlIGltcGxlbWVudGF0aW9ucyBvZiBbU2V0XS4KcGFydCBvZiBkYXJ0LmNvbGxlY3Rpb247CgovLy8gTWl4aW4gaW1wbGVtZW50YXRpb24gb2YgW1NldF0uCi8vLwovLy8gVGhpcyBjbGFzcyBwcm92aWRlcyBhIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYSBgU2V0YCB0aGF0IGRlcGVuZHMgb25seQovLy8gb24gdGhlIGFic3RyYWN0IG1lbWJlcnM6IFthZGRdLCBbY29udGFpbnNdLCBbbG9va3VwXSwgW3JlbW92ZV0sCi8vLyBbaXRlcmF0b3JdLCBbbGVuZ3RoXSBhbmQgW3RvU2V0XS4KLy8vCi8vLyBTb21lIG9mIHRoZSBtZXRob2RzIGFzc3VtZSB0aGF0IGB0b1NldGAgY3JlYXRlcyBhIG1vZGlmaWFibGUgc2V0LgovLy8gSWYgdXNpbmcgdGhpcyBtaXhpbiBmb3IgYW4gdW5tb2RpZmlhYmxlIHNldCwKLy8vIHdoZXJlIGB0b1NldGAgc2hvdWxkIHJldHVybiBhbiB1bm1vZGlmaWFibGUgc2V0LAovLy8gaXQncyBuZWNlc3NhcnkgdG8gcmVpbXBsZW1lbnQKLy8vIFtyZXRhaW5BbGxdLCBbdW5pb25dLCBbaW50ZXJzZWN0aW9uXSBhbmQgW2RpZmZlcmVuY2VdLgovLy8KLy8vIEltcGxlbWVudGF0aW9ucyBvZiBgU2V0YCB1c2luZyB0aGlzIG1peGluIHNob3VsZCBjb25zaWRlciBhbHNvIGltcGxlbWVudGluZwovLy8gYGNsZWFyYCBpbiBjb25zdGFudCB0aW1lLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3b3JrcyBieSByZW1vdmluZyBldmVyeQovLy8gZWxlbWVudC4KYWJzdHJhY3QgY2xhc3MgU2V0TWl4aW48RT4gaW1wbGVtZW50cyBTZXQ8RT4gewogIC8vIFRoaXMgY2xhc3MgcmVpbXBsZW1lbnRzIGFsbCBvZiBbSXRlcmFibGVNaXhpbl0uCiAgLy8gSWYvd2hlbiBEYXJ0IG1peGlucyBnZXQgbW9yZSBwb3dlcmZ1bCwgd2Ugc2hvdWxkIGp1c3QgY3JlYXRlIGEgc2luZ2xlCiAgLy8gTWl4aW4gY2xhc3MgZnJvbSBJdGVyYWJsZU1peGluIGFuZCB0aGUgbmV3IG1ldGhvZHMgb2YgdGhpcyBjbGFzcy4KCiAgYm9vbCBhZGQoRSB2YWx1ZSk7CgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpOwoKICBFIGxvb2t1cChPYmplY3QgZWxlbWVudCk7CgogIGJvb2wgcmVtb3ZlKE9iamVjdCB2YWx1ZSk7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvcjsKCiAgU2V0PEU+IHRvU2V0KCk7CgogIGludCBnZXQgbGVuZ3RoOwoKICBib29sIGdldCBpc0VtcHR5ID0+IGxlbmd0aCA9PSAwOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IGxlbmd0aCAhPSAwOwoKICBTZXQ8Uj4gY2FzdDxSPigpID0+IFNldC5jYXN0RnJvbTxFLCBSPih0aGlzKTsKICBJdGVyYWJsZTxFPiBmb2xsb3dlZEJ5KEl0ZXJhYmxlPEU+IG90aGVyKSA9PgogICAgICBGb2xsb3dlZEJ5SXRlcmFibGU8RT4uZmlyc3RFZmZpY2llbnQodGhpcywgb3RoZXIpOwoKICBJdGVyYWJsZTxUPiB3aGVyZVR5cGU8VD4oKSA9PiBXaGVyZVR5cGVJdGVyYWJsZTxUPih0aGlzKTsKCiAgdm9pZCBjbGVhcigpIHsKICAgIHJlbW92ZUFsbCh0b0xpc3QoKSk7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cykgewogICAgZm9yIChFIGVsZW1lbnQgaW4gZWxlbWVudHMpIGFkZChlbGVtZW50KTsKICB9CgogIHZvaWQgcmVtb3ZlQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIGZvciAoT2JqZWN0IGVsZW1lbnQgaW4gZWxlbWVudHMpIHJlbW92ZShlbGVtZW50KTsKICB9CgogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlPE9iamVjdD4gZWxlbWVudHMpIHsKICAgIC8vIENyZWF0ZSBhIGNvcHkgb2YgdGhlIHNldCwgcmVtb3ZlIGFsbCBvZiBlbGVtZW50cyBmcm9tIHRoZSBjb3B5LAogICAgLy8gdGhlbiByZW1vdmUgYWxsIHJlbWFpbmluZyBlbGVtZW50cyBpbiBjb3B5IGZyb20gdGhpcy4KICAgIFNldDxFPiB0b1JlbW92ZSA9IHRvU2V0KCk7CiAgICBmb3IgKE9iamVjdCBvIGluIGVsZW1lbnRzKSB7CiAgICAgIHRvUmVtb3ZlLnJlbW92ZShvKTsKICAgIH0KICAgIHJlbW92ZUFsbCh0b1JlbW92ZSk7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBMaXN0IHRvUmVtb3ZlID0gW107CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB0b1JlbW92ZS5hZGQoZWxlbWVudCk7CiAgICB9CiAgICByZW1vdmVBbGwodG9SZW1vdmUpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgTGlzdCB0b1JlbW92ZSA9IFtdOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoIXRlc3QoZWxlbWVudCkpIHRvUmVtb3ZlLmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJlbW92ZUFsbCh0b1JlbW92ZSk7CiAgfQoKICBib29sIGNvbnRhaW5zQWxsKEl0ZXJhYmxlPE9iamVjdD4gb3RoZXIpIHsKICAgIGZvciAoT2JqZWN0IG8gaW4gb3RoZXIpIHsKICAgICAgaWYgKCFjb250YWlucyhvKSkgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBTZXQ8RT4gdW5pb24oU2V0PEU+IG90aGVyKSB7CiAgICByZXR1cm4gdG9TZXQoKS4uYWRkQWxsKG90aGVyKTsKICB9CgogIFNldDxFPiBpbnRlcnNlY3Rpb24oU2V0PE9iamVjdD4gb3RoZXIpIHsKICAgIFNldDxFPiByZXN1bHQgPSB0b1NldCgpOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoIW90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKSByZXN1bHQucmVtb3ZlKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFNldDxFPiBkaWZmZXJlbmNlKFNldDxPYmplY3Q+IG90aGVyKSB7CiAgICBTZXQ8RT4gcmVzdWx0ID0gdG9TZXQoKTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKG90aGVyLmNvbnRhaW5zKGVsZW1lbnQpKSByZXN1bHQucmVtb3ZlKGVsZW1lbnQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIExpc3Q8RT4gdG9MaXN0KHtib29sIGdyb3dhYmxlID0gdHJ1ZX0pIHsKICAgIExpc3Q8RT4gcmVzdWx0ID0gZ3Jvd2FibGUgPyAoPEU+W10uLmxlbmd0aCA9IGxlbmd0aCkgOiBMaXN0PEU+KGxlbmd0aCk7CiAgICBpbnQgaSA9IDA7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSByZXN1bHRbaSsrXSA9IGVsZW1lbnQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgSXRlcmFibGU8VD4gbWFwPFQ+KFQgZihFIGVsZW1lbnQpKSA9PgogICAgICBFZmZpY2llbnRMZW5ndGhNYXBwZWRJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgRSBnZXQgc2luZ2xlIHsKICAgIGlmIChsZW5ndGggPiAxKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIEUgcmVzdWx0ID0gaXQuY3VycmVudDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBJdGVyYWJsZUJhc2UuaXRlcmFibGVUb0Z1bGxTdHJpbmcodGhpcywgJ3snLCAnfScpOwoKICAvLyBDb3BpZWQgZnJvbSBJdGVyYWJsZU1peGluLgogIC8vIFNob3VsZCBiZSBpbmhlcml0ZWQgaWYgd2UgaGFkIG11bHRpLWxldmVsIG1peGlucy4KCiAgSXRlcmFibGU8RT4gd2hlcmUoYm9vbCBmKEUgZWxlbWVudCkpID0+IFdoZXJlSXRlcmFibGU8RT4odGhpcywgZik7CgogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKEUgZWxlbWVudCkpID0+CiAgICAgIEV4cGFuZEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICB2b2lkIGZvckVhY2godm9pZCBmKEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIGYoZWxlbWVudCk7CiAgfQoKICBFIHJlZHVjZShFIGNvbWJpbmUoRSB2YWx1ZSwgRSBlbGVtZW50KSkgewogICAgSXRlcmF0b3I8RT4gaXRlcmF0b3IgPSB0aGlzLml0ZXJhdG9yOwogICAgaWYgKCFpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgfQogICAgRSB2YWx1ZSA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgVCBmb2xkPFQ+KFQgaW5pdGlhbFZhbHVlLCBUIGNvbWJpbmUoVCBwcmV2aW91c1ZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICB2YXIgdmFsdWUgPSBpbml0aWFsVmFsdWU7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIGVsZW1lbnQpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgYm9vbCBldmVyeShib29sIGYoRSBlbGVtZW50KSkgewogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoIWYoZWxlbWVudCkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgU3RyaW5nIGpvaW4oW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pIHsKICAgIEl0ZXJhdG9yPEU+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuICIiOwogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IFN0cmluZ0J1ZmZlcigpOwogICAgaWYgKHNlcGFyYXRvciA9PSBudWxsIHx8IHNlcGFyYXRvciA9PSAiIikgewogICAgICBkbyB7CiAgICAgICAgYnVmZmVyLndyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB9IHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlci53cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgICBidWZmZXIud3JpdGUoc2VwYXJhdG9yKTsKICAgICAgICBidWZmZXIud3JpdGUoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIGJvb2wgYW55KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEl0ZXJhYmxlPEU+IHRha2UoaW50IG4pIHsKICAgIHJldHVybiBUYWtlSXRlcmFibGU8RT4odGhpcywgbik7CiAgfQoKICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSB7CiAgICByZXR1cm4gVGFrZVdoaWxlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwKGludCBuKSB7CiAgICByZXR1cm4gU2tpcEl0ZXJhYmxlPEU+KHRoaXMsIG4pOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcFdoaWxlKGJvb2wgdGVzdChFIHZhbHVlKSkgewogICAgcmV0dXJuIFNraXBXaGlsZUl0ZXJhYmxlPEU+KHRoaXMsIHRlc3QpOwogIH0KCiAgRSBnZXQgZmlyc3QgewogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIHJldHVybiBpdC5jdXJyZW50OwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgfQogICAgRSByZXN1bHQ7CiAgICBkbyB7CiAgICAgIHJlc3VsdCA9IGl0LmN1cnJlbnQ7CiAgICB9IHdoaWxlIChpdC5tb3ZlTmV4dCgpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBFIGZpcnN0V2hlcmUoYm9vbCB0ZXN0KEUgdmFsdWUpLCB7RSBvckVsc2UoKX0pIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiBlbGVtZW50OwogICAgfQogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgbGFzdFdoZXJlKGJvb2wgdGVzdChFIHZhbHVlKSwge0Ugb3JFbHNlKCl9KSB7CiAgICBFIHJlc3VsdDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CiAgICAgICAgZm91bmRNYXRjaGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChmb3VuZE1hdGNoaW5nKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KEUgdmFsdWUpLCB7RSBvckVsc2UoKX0pIHsKICAgIEUgcmVzdWx0OwogICAgYm9vbCBmb3VuZE1hdGNoaW5nID0gZmFsc2U7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChpbmRleCwgImluZGV4Iik7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoaW5kZXgsICJpbmRleCIpOwogICAgaW50IGVsZW1lbnRJbmRleCA9IDA7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmIChpbmRleCA9PSBlbGVtZW50SW5kZXgpIHJldHVybiBlbGVtZW50OwogICAgICBlbGVtZW50SW5kZXgrKzsKICAgIH0KICAgIHRocm93IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIsIG51bGwsIGVsZW1lbnRJbmRleCk7CiAgfQp9CgovLy8gQmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBbU2V0XS4KLy8vCi8vLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBhIGBTZXRgIHRoYXQgZGVwZW5kcyBvbmx5Ci8vLyBvbiB0aGUgYWJzdHJhY3QgbWVtYmVyczogW2FkZF0sIFtjb250YWluc10sIFtsb29rdXBdLCBbcmVtb3ZlXSwKLy8vIFtpdGVyYXRvcl0sIFtsZW5ndGhdIGFuZCBbdG9TZXRdLgovLy8KLy8vIFNvbWUgb2YgdGhlIG1ldGhvZHMgYXNzdW1lIHRoYXQgYHRvU2V0YCBjcmVhdGVzIGEgbW9kaWZpYWJsZSBzZXQuCi8vLyBJZiB1c2luZyB0aGlzIGJhc2UgY2xhc3MgZm9yIGFuIHVubW9kaWZpYWJsZSBzZXQsCi8vLyB3aGVyZSBgdG9TZXRgIHNob3VsZCByZXR1cm4gYW4gdW5tb2RpZmlhYmxlIHNldCwKLy8vIGl0J3MgbmVjZXNzYXJ5IHRvIHJlaW1wbGVtZW50Ci8vLyBbcmV0YWluQWxsXSwgW3VuaW9uXSwgW2ludGVyc2VjdGlvbl0gYW5kIFtkaWZmZXJlbmNlXS4KLy8vCi8vLyBJbXBsZW1lbnRhdGlvbnMgb2YgYFNldGAgdXNpbmcgdGhpcyBiYXNlIHNob3VsZCBjb25zaWRlciBhbHNvIGltcGxlbWVudGluZwovLy8gYGNsZWFyYCBpbiBjb25zdGFudCB0aW1lLiBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3b3JrcyBieSByZW1vdmluZyBldmVyeQovLy8gZWxlbWVudC4KYWJzdHJhY3QgY2xhc3MgU2V0QmFzZTxFPiBleHRlbmRzIE9iamVjdCB3aXRoIFNldE1peGluPEU+IHsKICAvLy8gQ29udmVydCBhIGBTZXRgIHRvIGEgc3RyaW5nIGFzIGB7ZWFjaCwgZWxlbWVudCwgYXMsIHN0cmluZ31gLgogIC8vLwogIC8vLyBIYW5kbGVzIGNpcmN1bGFyIHJlZmVyZW5jZXMgd2hlcmUgY29udmVydGluZyBvbmUgb2YgdGhlIGVsZW1lbnRzCiAgLy8vIHRvIGEgc3RyaW5nIGVuZHMgdXAgY29udmVydGluZyBbc2V0XSB0byBhIHN0cmluZyBhZ2Fpbi4KICBzdGF0aWMgU3RyaW5nIHNldFRvU3RyaW5nKFNldCBzZXQpID0+CiAgICAgIEl0ZXJhYmxlQmFzZS5pdGVyYWJsZVRvRnVsbFN0cmluZyhzZXQsICd7JywgJ30nKTsKfQoKLy8vIENvbW1vbiBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBvZiBzb21lIFtTZXRdIG1ldGhvZHMuCi8vIFRPRE8oMzU1NDgpOiBNYWtlIHRoaXMgbWl4LWluIFNldE1peGluLCBieSBhZGRpbmcgYHdpdGggU2V0TWl4aW48RT5gCi8vIGFuZCByZW1vdmluZyB0aGUgY29waWVkIG1lbWJlcnMgYmVsb3csCi8vIHdoZW4gYW5hbHl6ZXIgc3VwcG9ydHMgY29uc3QgY29uc3RydWN0b3JzIGZvciBtaXhpbiBhcHBsaWNhdGlvbnMuCmFic3RyYWN0IGNsYXNzIF9TZXRCYXNlPEU+IGltcGxlbWVudHMgU2V0PEU+IHsKICAvLyBUaGUgZm9sbG93aW5nIHR3byBtZXRob2RzIG92ZXJyaWRlIHRoZSBvbmVzIGluIFNldEJhc2UuCiAgLy8gSXQncyBwb3NzaWJsZSB0byBiZSBtb3JlIGVmZmljaWVudCBpZiB3ZSBoYXZlIGEgd2F5IHRvIGNyZWF0ZSBhbiBlbXB0eQogIC8vIHNldCBvZiB0aGUgY29ycmVjdCB0eXBlLgogIGNvbnN0IF9TZXRCYXNlKCk7CgogIFNldDxFPiBfbmV3U2V0KCk7CgogIFNldDxSPiBfbmV3U2ltaWxhclNldDxSPigpOwoKICBTZXQ8Uj4gY2FzdDxSPigpID0+IFNldC5jYXN0RnJvbTxFLCBSPih0aGlzLCBuZXdTZXQ6IF9uZXdTaW1pbGFyU2V0KTsKCiAgU2V0PEU+IGRpZmZlcmVuY2UoU2V0PE9iamVjdD4gb3RoZXIpIHsKICAgIFNldDxFPiByZXN1bHQgPSBfbmV3U2V0KCk7CiAgICBmb3IgKHZhciBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKCFvdGhlci5jb250YWlucyhlbGVtZW50KSkgcmVzdWx0LmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTZXQ8RT4gaW50ZXJzZWN0aW9uKFNldDxPYmplY3Q+IG90aGVyKSB7CiAgICBTZXQ8RT4gcmVzdWx0ID0gX25ld1NldCgpOwogICAgZm9yICh2YXIgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmIChvdGhlci5jb250YWlucyhlbGVtZW50KSkgcmVzdWx0LmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBTdWJjbGFzc2VzIGNhbiBvcHRpbWl6ZSB0aGlzIGZ1cnRoZXIuCiAgU2V0PEU+IHRvU2V0KCkgPT4gX25ld1NldCgpLi5hZGRBbGwodGhpcyk7CgogIC8vLyBUT0RPKDM1NTQ4KTogUmVtb3ZlIHRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb25zIGFnYWluIHdoZW4gdGhlIGFuYWx5emVyCiAgLy8vIHN1cHBvcnRzIG1peGlucyB3aXRoIGNvbnN0IGNvbnN0cnVjdG9ycywgYW5kIG1peCBpbiBgU2V0TWl4aW5gIGluc3RlYWQuCgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gbGVuZ3RoID09IDA7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gbGVuZ3RoICE9IDA7CgogIEl0ZXJhYmxlPEU+IGZvbGxvd2VkQnkoSXRlcmFibGU8RT4gb3RoZXIpID0+CiAgICAgIEZvbGxvd2VkQnlJdGVyYWJsZTxFPi5maXJzdEVmZmljaWVudCh0aGlzLCBvdGhlcik7CgogIEl0ZXJhYmxlPFQ+IHdoZXJlVHlwZTxUPigpID0+IFdoZXJlVHlwZUl0ZXJhYmxlPFQ+KHRoaXMpOwoKICB2b2lkIGNsZWFyKCkgewogICAgcmVtb3ZlQWxsKHRvTGlzdCgpKTsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiBlbGVtZW50cykgYWRkKGVsZW1lbnQpOwogIH0KCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgZm9yIChPYmplY3QgZWxlbWVudCBpbiBlbGVtZW50cykgcmVtb3ZlKGVsZW1lbnQpOwogIH0KCiAgdm9pZCByZXRhaW5BbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgLy8gQ3JlYXRlIGEgY29weSBvZiB0aGUgc2V0LCByZW1vdmUgYWxsIG9mIGVsZW1lbnRzIGZyb20gdGhlIGNvcHksCiAgICAvLyB0aGVuIHJlbW92ZSBhbGwgcmVtYWluaW5nIGVsZW1lbnRzIGluIGNvcHkgZnJvbSB0aGlzLgogICAgU2V0PEU+IHRvUmVtb3ZlID0gdG9TZXQoKTsKICAgIGZvciAoT2JqZWN0IG8gaW4gZWxlbWVudHMpIHsKICAgICAgdG9SZW1vdmUucmVtb3ZlKG8pOwogICAgfQogICAgcmVtb3ZlQWxsKHRvUmVtb3ZlKTsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIExpc3QgdG9SZW1vdmUgPSBbXTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHRvUmVtb3ZlLmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJlbW92ZUFsbCh0b1JlbW92ZSk7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBMaXN0IHRvUmVtb3ZlID0gW107CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICghdGVzdChlbGVtZW50KSkgdG9SZW1vdmUuYWRkKGVsZW1lbnQpOwogICAgfQogICAgcmVtb3ZlQWxsKHRvUmVtb3ZlKTsKICB9CgogIGJvb2wgY29udGFpbnNBbGwoSXRlcmFibGU8T2JqZWN0PiBvdGhlcikgewogICAgZm9yIChPYmplY3QgbyBpbiBvdGhlcikgewogICAgICBpZiAoIWNvbnRhaW5zKG8pKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIFNldDxFPiB1bmlvbihTZXQ8RT4gb3RoZXIpIHsKICAgIHJldHVybiB0b1NldCgpLi5hZGRBbGwob3RoZXIpOwogIH0KCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGUgPSB0cnVlfSkgewogICAgTGlzdDxFPiByZXN1bHQgPSBncm93YWJsZSA/ICg8RT5bXS4ubGVuZ3RoID0gbGVuZ3RoKSA6IExpc3Q8RT4obGVuZ3RoKTsKICAgIGludCBpID0gMDsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHJlc3VsdFtpKytdID0gZWxlbWVudDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZWxlbWVudCkpID0+CiAgICAgIEVmZmljaWVudExlbmd0aE1hcHBlZEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICBFIGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA+IDEpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgIEl0ZXJhdG9yPEU+IGl0ID0gaXRlcmF0b3I7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgRSByZXN1bHQgPSBpdC5jdXJyZW50OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+IEl0ZXJhYmxlQmFzZS5pdGVyYWJsZVRvRnVsbFN0cmluZyh0aGlzLCAneycsICd9Jyk7CgogIEl0ZXJhYmxlPEU+IHdoZXJlKGJvb2wgZihFIGVsZW1lbnQpKSA9PiBXaGVyZUl0ZXJhYmxlPEU+KHRoaXMsIGYpOwoKICBJdGVyYWJsZTxUPiBleHBhbmQ8VD4oSXRlcmFibGU8VD4gZihFIGVsZW1lbnQpKSA9PgogICAgICBFeHBhbmRJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSBmKGVsZW1lbnQpOwogIH0KCiAgRSByZWR1Y2UoRSBjb21iaW5lKEUgdmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIEl0ZXJhdG9yPEU+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIEUgdmFsdWUgPSBpdGVyYXRvci5jdXJyZW50OwogICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCBpdGVyYXRvci5jdXJyZW50KTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgcHJldmlvdXNWYWx1ZSwgRSBlbGVtZW50KSkgewogICAgdmFyIHZhbHVlID0gaW5pdGlhbFZhbHVlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCBlbGVtZW50KTsKICAgIHJldHVybiB2YWx1ZTsKICB9CgogIGJvb2wgZXZlcnkoYm9vbCBmKEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKCFmKGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIFN0cmluZyBqb2luKFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBJdGVyYXRvcjxFPiBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybiAiIjsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBTdHJpbmdCdWZmZXIoKTsKICAgIGlmIChzZXBhcmF0b3IgPT0gbnVsbCB8fCBzZXBhcmF0b3IgPT0gIiIpIHsKICAgICAgZG8gewogICAgICAgIGJ1ZmZlci53cml0ZShpdGVyYXRvci5jdXJyZW50KTsKICAgICAgfSB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSk7CiAgICB9IGVsc2UgewogICAgICBidWZmZXIud3JpdGUoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgYnVmZmVyLndyaXRlKHNlcGFyYXRvcik7CiAgICAgICAgYnVmZmVyLndyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBib29sIGFueShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBJdGVyYWJsZTxFPiB0YWtlKGludCBuKSB7CiAgICByZXR1cm4gVGFrZUl0ZXJhYmxlPEU+KHRoaXMsIG4pOwogIH0KCiAgSXRlcmFibGU8RT4gdGFrZVdoaWxlKGJvb2wgdGVzdChFIHZhbHVlKSkgewogICAgcmV0dXJuIFRha2VXaGlsZUl0ZXJhYmxlPEU+KHRoaXMsIHRlc3QpOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcChpbnQgbikgewogICAgcmV0dXJuIFNraXBJdGVyYWJsZTxFPih0aGlzLCBuKTsKICB9CgogIEl0ZXJhYmxlPEU+IHNraXBXaGlsZShib29sIHRlc3QoRSB2YWx1ZSkpIHsKICAgIHJldHVybiBTa2lwV2hpbGVJdGVyYWJsZTxFPih0aGlzLCB0ZXN0KTsKICB9CgogIEUgZ2V0IGZpcnN0IHsKICAgIEl0ZXJhdG9yPEU+IGl0ID0gaXRlcmF0b3I7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB9CiAgICByZXR1cm4gaXQuY3VycmVudDsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgSXRlcmF0b3I8RT4gaXQgPSBpdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIEUgcmVzdWx0OwogICAgZG8gewogICAgICByZXN1bHQgPSBpdC5jdXJyZW50OwogICAgfSB3aGlsZSAoaXQubW92ZU5leHQoKSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRSBmaXJzdFdoZXJlKGJvb2wgdGVzdChFIHZhbHVlKSwge0Ugb3JFbHNlKCl9KSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGxhc3RXaGVyZShib29sIHRlc3QoRSB2YWx1ZSksIHtFIG9yRWxzZSgpfSkgewogICAgRSByZXN1bHQ7CiAgICBib29sIGZvdW5kTWF0Y2hpbmcgPSBmYWxzZTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHsKICAgICAgICByZXN1bHQgPSBlbGVtZW50OwogICAgICAgIGZvdW5kTWF0Y2hpbmcgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBpZiAoZm91bmRNYXRjaGluZykgcmV0dXJuIHJlc3VsdDsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIHNpbmdsZVdoZXJlKGJvb2wgdGVzdChFIHZhbHVlKSwge0Ugb3JFbHNlKCl9KSB7CiAgICBFIHJlc3VsdDsKICAgIGJvb2wgZm91bmRNYXRjaGluZyA9IGZhbHNlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIGlmIChmb3VuZE1hdGNoaW5nKSB7CiAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgfQogICAgICAgIHJlc3VsdCA9IGVsZW1lbnQ7CiAgICAgICAgZm91bmRNYXRjaGluZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGlmIChmb3VuZE1hdGNoaW5nKSByZXR1cm4gcmVzdWx0OwogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgZWxlbWVudEF0KGludCBpbmRleCkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoaW5kZXgsICJpbmRleCIpOwogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGluZGV4LCAiaW5kZXgiKTsKICAgIGludCBlbGVtZW50SW5kZXggPSAwOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoaW5kZXggPT0gZWxlbWVudEluZGV4KSByZXR1cm4gZWxlbWVudDsKICAgICAgZWxlbWVudEluZGV4Kys7CiAgICB9CiAgICB0aHJvdyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiLCBudWxsLCBlbGVtZW50SW5kZXgpOwogIH0KfQoKLy8vIENsYXNzIHVzZWQgdG8gaW1wbGVtZW50IGNvbnN0IHNldHMuCmNsYXNzIF9Vbm1vZGlmaWFibGVTZXQ8RT4gZXh0ZW5kcyBfU2V0QmFzZTxFPiB7CiAgZmluYWwgTWFwPEUsIE51bGw+IF9tYXA7CgogIGNvbnN0IF9Vbm1vZGlmaWFibGVTZXQodGhpcy5fbWFwKTsKCiAgU2V0PEU+IF9uZXdTZXQoKSA9PiBMaW5rZWRIYXNoU2V0PEU+KCk7CgogIFNldDxSPiBfbmV3U2ltaWxhclNldDxSPigpID0+IExpbmtlZEhhc2hTZXQ8Uj4oKTsKCiAgLy8gTG9va3VwcyB1c2UgbWFwIG1ldGhvZHMuCgogIGJvb2wgY29udGFpbnMoT2JqZWN0IGVsZW1lbnQpID0+IF9tYXAuY29udGFpbnNLZXkoZWxlbWVudCk7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBfbWFwLmtleXMuaXRlcmF0b3I7CgogIGludCBnZXQgbGVuZ3RoID0+IF9tYXAubGVuZ3RoOwoKICBFIGxvb2t1cChPYmplY3QgZWxlbWVudCkgewogICAgZm9yICh2YXIga2V5IGluIF9tYXAua2V5cykgewogICAgICBpZiAoa2V5ID09IGVsZW1lbnQpIHJldHVybiBrZXk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vIE11dGF0aW5nIG1ldGhvZHMgdGhyb3cuCgogIGJvb2wgYWRkKEUgdmFsdWUpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgdW5tb2RpZmlhYmxlIHNldCIpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgdW5tb2RpZmlhYmxlIHNldCIpOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZWxlbWVudHMpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgdW5tb2RpZmlhYmxlIHNldCIpOwogIH0KCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBlbGVtZW50cykgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSB1bm1vZGlmaWFibGUgc2V0Iik7CiAgfQoKICB2b2lkIHJldGFpbkFsbChJdGVyYWJsZTxPYmplY3Q+IGVsZW1lbnRzKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY2hhbmdlIHVubW9kaWZpYWJsZSBzZXQiKTsKICB9CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgdW5tb2RpZmlhYmxlIHNldCIpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgdGhyb3cgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNoYW5nZSB1bm1vZGlmaWFibGUgc2V0Iik7CiAgfQoKICBib29sIHJlbW92ZShPYmplY3QgdmFsdWUpIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgdW5tb2RpZmlhYmxlIHNldCIpOwogIH0KfQqCeABOTjwBIxkBIwRLRCYERjE1IjsEUFENLzVLRwEVASEBHAEdARwBEgESASMBJgEwLzkBPAERGQQBJi4EAS42BAEuRz0fIRoGGQQBKxgeMAYZBAErGB4xBhkEAS0eJgYRBAEfIwQBKx0ePAYTBAEpHR47BhMEAStMDzMTBAEoNAEROh9AGxMEAUoBIDcBRQE1JQEkKAQBLCogLgYgIjAGEgQBRR49EgQBIh4lBhEEASkqKSowCyglDSYkISgIBh4EASMeJgYSBAEcJQQBLi0EARwlBAEuLQQBEB8aLgYXBAEPHxouBg4JGx0TBAEzHikGKSwEATIOIB4bGh4IBiYpLAQBNA4gHhsdMAoaHggGJiksBAEbMDEaHjEWBkYEAgEiBEtEJgRGNjUiOwRPUQ08RAZHPig4AgE6SCpFLz1MHhQBFAEeAUgBKR8gOQYTBAErHyA4BhMEASstAU1OASMBJgEvOQE8AREZBAEmLgQBLjYEAS5HPR8hGgYZBAErGB4wBhkEASsYHjEGGQQBLR4mBhEEAR8jBAErTA8zEwQBKDQBETofQBsTBAFKAUUBNSUBJCgEASwqIC4GICIwBhIEAUUePRIEASIeJQYRBAEpKikqMAsoJQ0mJCEoCAYeBAEjHiYGEgQBHCUEAS4tBAEcJQQBLi0EARAfGi4GFwQBDx8aLgYOCRsdEwQBMx4pBiksBAEyDiAeGxoeCAYmKSwEATQOIB4bHTAKGh4IBiYpLAQBGzAxGh4xFgZGBAIBKDAbASUBKgE0AR4BPgEyASEBHSEmBhEEAR0BFj4EARE+BAEmPgQBLj4EAS4+BAErPgQBKz4EAR4+BAIBGGRhcnQ6Y29sbGVjdGlvbi9zZXQuZGFydDRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29sbGVjdGlvbi9oYXNoX3NldC5kYXJ0k3svLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbGxlY3Rpb247CgovLy8gQW4gdW5vcmRlcmVkIGhhc2gtdGFibGUgYmFzZWQgW1NldF0gaW1wbGVtZW50YXRpb24uCi8vLwovLy8gVGhlIGVsZW1lbnRzIG9mIGEgYEhhc2hTZXRgIG11c3QgaGF2ZSBjb25zaXN0ZW50IGVxdWFsaXR5Ci8vLyBhbmQgaGFzaENvZGUgaW1wbGVtZW50YXRpb25zLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGVxdWFscyBvcGVyYXRpb24KLy8vIG11c3QgZGVmaW5lIGEgc3RhYmxlIGVxdWl2YWxlbmNlIHJlbGF0aW9uIG9uIHRoZSBlbGVtZW50cyAocmVmbGV4aXZlLAovLy8gc3ltbWV0cmljLCB0cmFuc2l0aXZlLCBhbmQgY29uc2lzdGVudCBvdmVyIHRpbWUpLCBhbmQgdGhhdCB0aGUgaGFzaENvZGUKLy8vIG11c3QgY29uc2lzdGVudCB3aXRoIGVxdWFsaXR5LCBzbyB0aGF0IHRoZSBzYW1lIGZvciBvYmplY3RzIHRoYXQgYXJlCi8vLyBjb25zaWRlcmVkIGVxdWFsLgovLy8KLy8vIFRoZSBzZXQgYWxsb3dzIGBudWxsYCBhcyBhbiBlbGVtZW50LgovLy8KLy8vIE1vc3Qgc2ltcGxlIG9wZXJhdGlvbnMgb24gYEhhc2hTZXRgIGFyZSBkb25lIGluIChwb3RlbnRpYWxseSBhbW9ydGl6ZWQpCi8vLyBjb25zdGFudCB0aW1lOiBbYWRkXSwgW2NvbnRhaW5zXSwgW3JlbW92ZV0sIGFuZCBbbGVuZ3RoXSwgcHJvdmlkZWQgdGhlIGhhc2gKLy8vIGNvZGVzIG9mIG9iamVjdHMgYXJlIHdlbGwgZGlzdHJpYnV0ZWQuCi8vLwovLy8gVGhlIGl0ZXJhdGlvbiBvcmRlciBvZiB0aGUgc2V0IGlzIG5vdCBzcGVjaWZpZWQgYW5kIGRlcGVuZHMgb24KLy8vIHRoZSBoYXNoY29kZXMgb2YgdGhlIHByb3ZpZGVkIGVsZW1lbnRzLiBIb3dldmVyLCB0aGUgb3JkZXIgaXMgc3RhYmxlOgovLy8gbXVsdGlwbGUgaXRlcmF0aW9ucyBvdmVyIHRoZSBzYW1lIHNldCBwcm9kdWNlIHRoZSBzYW1lIG9yZGVyLCBhcyBsb25nIGFzCi8vLyB0aGUgc2V0IGlzIG5vdCBtb2RpZmllZC4KYWJzdHJhY3QgY2xhc3MgSGFzaFNldDxFPiBpbXBsZW1lbnRzIFNldDxFPiB7CiAgLy8vIENyZWF0ZSBhIGhhc2ggc2V0IHVzaW5nIHRoZSBwcm92aWRlZCBbZXF1YWxzXSBhcyBlcXVhbGl0eS4KICAvLy8KICAvLy8gVGhlIHByb3ZpZGVkIFtlcXVhbHNdIG11c3QgZGVmaW5lIGEgc3RhYmxlIGVxdWl2YWxlbmNlIHJlbGF0aW9uLCBhbmQKICAvLy8gW2hhc2hDb2RlXSBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCBbZXF1YWxzXS4gSWYgdGhlIFtlcXVhbHNdIG9yIFtoYXNoQ29kZV0KICAvLy8gbWV0aG9kcyB3b24ndCB3b3JrIG9uIGFsbCBvYmplY3RzLCBidXQgb25seSBvbiBzb21lIGluc3RhbmNlcyBvZiBFLCB0aGUKICAvLy8gW2lzVmFsaWRLZXldIHByZWRpY2F0ZSBjYW4gYmUgdXNlZCB0byByZXN0cmljdCB0aGUga2V5cyB0aGF0IHRoZSBmdW5jdGlvbnMKICAvLy8gYXJlIGFwcGxpZWQgdG8uCiAgLy8vIEFueSBrZXkgZm9yIHdoaWNoIFtpc1ZhbGlkS2V5XSByZXR1cm5zIGZhbHNlIGlzIGF1dG9tYXRpY2FsbHkgYXNzdW1lZAogIC8vLyB0byBub3QgYmUgaW4gdGhlIHNldCB3aGVuIGFza2luZyBgY29udGFpbnNgLgogIC8vLwogIC8vLyBJZiBbZXF1YWxzXSBvciBbaGFzaENvZGVdIGFyZSBvbWl0dGVkLCB0aGUgc2V0IHVzZXMKICAvLy8gdGhlIGVsZW1lbnRzJyBpbnRyaW5zaWMgW09iamVjdC49PV0gYW5kIFtPYmplY3QuaGFzaENvZGVdLgogIC8vLwogIC8vLyBJZiB5b3Ugc3VwcGx5IG9uZSBvZiBbZXF1YWxzXSBhbmQgW2hhc2hDb2RlXSwKICAvLy8geW91IHNob3VsZCBnZW5lcmFsbHkgYWxzbyB0byBzdXBwbHkgdGhlIG90aGVyLgogIC8vLwogIC8vLyBJZiB0aGUgc3VwcGxpZWQgYGVxdWFsc2Agb3IgYGhhc2hDb2RlYCBmdW5jdGlvbnMgd29uJ3Qgd29yayBvbiBhbGwgW0VdCiAgLy8vIG9iamVjdHMsIGFuZCB0aGUgbWFwIHdpbGwgYmUgdXNlZCBpbiBhIHNldHRpbmcgd2hlcmUgYSBub24tYEVgIG9iamVjdAogIC8vLyBpcyBwYXNzZWQgdG8sIGUuZy4sIGBjb250YWluc2AsIHRoZW4gdGhlIFtpc1ZhbGlkS2V5XSBmdW5jdGlvbiBzaG91bGQKICAvLy8gYWxzbyBiZSBzdXBwbGllZC4KICAvLy8KICAvLy8gSWYgW2lzVmFsaWRLZXldIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRlc3RpbmcgaWYgdGhlIG9iamVjdCBpcyBhbgogIC8vLyBbRV0gaW5zdGFuY2UuIFRoYXQgbWVhbnMgdGhhdDoKICAvLy8KICAvLy8gICAgIG5ldyBIYXNoU2V0PGludD4oZXF1YWxzOiAoaW50IGUxLCBpbnQgZTIpID0+IChlMSAtIGUyKSAlIDUgPT0gMCwKICAvLy8gICAgICAgICAgICAgICAgICAgICAgaGFzaENvZGU6IChpbnQgZSkgPT4gZSAlIDUpCiAgLy8vCiAgLy8vIGRvZXMgbm90IG5lZWQgYW4gYGlzVmFsaWRLZXlgIGFyZ3VtZW50LCBiZWNhdXNlIGl0IGRlZmF1bHRzIHRvIG9ubHkKICAvLy8gYWNjZXB0aW5nIGBpbnRgIHZhbHVlcyB3aGljaCBhcmUgYWNjZXB0ZWQgYnkgYm90aCBgZXF1YWxzYCBhbmQgYGhhc2hDb2RlYC4KICAvLy8KICAvLy8gSWYgbmVpdGhlciBgZXF1YWxzYCwgYGhhc2hDb2RlYCwgbm9yIGBpc1ZhbGlkS2V5YCBpcyBwcm92aWRlZCwKICAvLy8gdGhlIGRlZmF1bHQgYGlzVmFsaWRLZXlgIGluc3RlYWQgYWNjZXB0cyBhbGwgdmFsdWVzLgogIC8vLyBUaGUgZGVmYXVsdCBlcXVhbGl0eSBhbmQgaGFzaGNvZGUgb3BlcmF0aW9ucyBhcmUgYXNzdW1lZCB0byB3b3JrIG9uIGFsbAogIC8vLyBvYmplY3RzLgogIC8vLwogIC8vLyBMaWtld2lzZSwgaWYgYGVxdWFsc2AgaXMgW2lkZW50aWNhbF0sIGBoYXNoQ29kZWAgaXMgW2lkZW50aXR5SGFzaENvZGVdCiAgLy8vIGFuZCBgaXNWYWxpZEtleWAgaXMgb21pdHRlZCwgdGhlIHJlc3VsdGluZyBzZXQgaXMgaWRlbnRpdHkgYmFzZWQsCiAgLy8vIGFuZCB0aGUgYGlzVmFsaWRLZXlgIGRlZmF1bHRzIHRvIGFjY2VwdGluZyBhbGwga2V5cy4KICAvLy8gU3VjaCBhIG1hcCBjYW4gYmUgY3JlYXRlZCBkaXJlY3RseSB1c2luZyBbSGFzaFNldC5pZGVudGl0eV0uCiAgZXh0ZXJuYWwgZmFjdG9yeSBIYXNoU2V0KAogICAgICB7Ym9vbCBlcXVhbHMoRSBlMSwgRSBlMiksCiAgICAgIGludCBoYXNoQ29kZShFIGUpLAogICAgICBib29sIGlzVmFsaWRLZXkocG90ZW50aWFsS2V5KX0pOwoKICAvLy8gQ3JlYXRlcyBhbiB1bm9yZGVyZWQgaWRlbnRpdHktYmFzZWQgc2V0LgogIC8vLwogIC8vLyBFZmZlY3RpdmVseSBhIHNob3J0aGFuZCBmb3I6CiAgLy8vCiAgLy8vICAgICBuZXcgSGFzaFNldDxFPihlcXVhbHM6IGlkZW50aWNhbCwKICAvLy8gICAgICAgICAgICAgICAgICAgIGhhc2hDb2RlOiBpZGVudGl0eUhhc2hDb2RlKQogIGV4dGVybmFsIGZhY3RvcnkgSGFzaFNldC5pZGVudGl0eSgpOwoKICAvLy8gQ3JlYXRlIGEgaGFzaCBzZXQgY29udGFpbmluZyBhbGwgW2VsZW1lbnRzXS4KICAvLy8KICAvLy8gQ3JlYXRlcyBhIGhhc2ggc2V0IGFzIGJ5IGBuZXcgSGFzaFNldDxFPigpYCBhbmQgYWRkcyBhbGwgZ2l2ZW4gW2VsZW1lbnRzXQogIC8vLyB0byB0aGUgc2V0LiBUaGUgZWxlbWVudHMgYXJlIGFkZGVkIGluIG9yZGVyLiBJZiBbZWxlbWVudHNdIGNvbnRhaW5zCiAgLy8vIHR3byBlbnRyaWVzIHRoYXQgYXJlIGVxdWFsLCBidXQgbm90IGlkZW50aWNhbCwgdGhlbiB0aGUgZmlyc3Qgb25lIGlzCiAgLy8vIHRoZSBvbmUgaW4gdGhlIHJlc3VsdGluZyBzZXQuCiAgLy8vCiAgLy8vIEFsbCB0aGUgW2VsZW1lbnRzXSBzaG91bGQgYmUgaW5zdGFuY2VzIG9mIFtFXS4KICAvLy8gVGhlIGBlbGVtZW50c2AgaXRlcmFibGUgaXRzZWxmIG1heSBoYXZlIGFueSBlbGVtZW50IHR5cGUsIHNvIHRoaXMKICAvLy8gY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8gZG93bi1jYXN0IGEgYFNldGAsIGZvciBleGFtcGxlIGFzOgogIC8vLyBgYGBkYXJ0CiAgLy8vIFNldDxTdXBlclR5cGU+IHN1cGVyU2V0ID0gLi4uOwogIC8vLyBTZXQ8U3ViVHlwZT4gc3ViU2V0ID0KICAvLy8gICAgIG5ldyBIYXNoU2V0PFN1YlR5cGU+LmZyb20oc3VwZXJTZXQud2hlcmVUeXBlPFN1YlR5cGU+KCkpOwogIC8vLyBgYGAKICBmYWN0b3J5IEhhc2hTZXQuZnJvbShJdGVyYWJsZSBlbGVtZW50cykgewogICAgSGFzaFNldDxFPiByZXN1bHQgPSBIYXNoU2V0PEU+KCk7CiAgICBmb3IgKGZpbmFsIGUgaW4gZWxlbWVudHMpIHsKICAgICAgcmVzdWx0LmFkZChlKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ3JlYXRlIGEgaGFzaCBzZXQgY29udGFpbmluZyBhbGwgW2VsZW1lbnRzXS4KICAvLy8KICAvLy8gQ3JlYXRlcyBhIGhhc2ggc2V0IGFzIGJ5IGBuZXcgSGFzaFNldDxFPigpYCBhbmQgYWRkcyBhbGwgZ2l2ZW4gW2VsZW1lbnRzXQogIC8vLyB0byB0aGUgc2V0LiBUaGUgZWxlbWVudHMgYXJlIGFkZGVkIGluIG9yZGVyLiBJZiBbZWxlbWVudHNdIGNvbnRhaW5zCiAgLy8vIHR3byBlbnRyaWVzIHRoYXQgYXJlIGVxdWFsLCBidXQgbm90IGlkZW50aWNhbCwgdGhlbiB0aGUgZmlyc3Qgb25lIGlzCiAgLy8vIHRoZSBvbmUgaW4gdGhlIHJlc3VsdGluZyBzZXQuCiAgZmFjdG9yeSBIYXNoU2V0Lm9mKEl0ZXJhYmxlPEU+IGVsZW1lbnRzKSA9PiBIYXNoU2V0PEU+KCkuLmFkZEFsbChlbGVtZW50cyk7CgogIC8vLyBQcm92aWRlcyBhbiBpdGVyYXRvciB0aGF0IGl0ZXJhdGVzIG92ZXIgdGhlIGVsZW1lbnRzIG9mIHRoaXMgc2V0LgogIC8vLwogIC8vLyBUaGUgb3JkZXIgb2YgaXRlcmF0aW9uIGlzIHVuc3BlY2lmaWVkLAogIC8vLyBidXQgY29uc2lzdGVudCBiZXR3ZWVuIGNoYW5nZXMgdG8gdGhlIHNldC4KICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3I7Cn0KdQBOTjwBGQE4BD5HSkxJFgQpBExQKwRDSk0dLkEGS1FOURZMMwY6QQY0NQZNTEwYBk0lBks3BkpRBkU7Tg8GTUg7QxwgGScBLwYjBiw1JwEzBlBKSyQGNUhEDiUcRAosJiAVBhMEATMGUEpLJE4BSAYtMRwCAR1kYXJ0OmNvbGxlY3Rpb24vaGFzaF9zZXQuZGFydDRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29sbGVjdGlvbi9pdGVyYWJsZS5kYXJ0rswvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbGxlY3Rpb247CgovLy8gVGhpcyBbSXRlcmFibGVdIG1peGluIGltcGxlbWVudHMgYWxsIFtJdGVyYWJsZV0gbWVtYmVycyBleGNlcHQgYGl0ZXJhdG9yYC4KLy8vCi8vLyBBbGwgb3RoZXIgbWV0aG9kcyBhcmUgaW1wbGVtZW50ZWQgaW4gdGVybXMgb2YgYGl0ZXJhdG9yYC4KYWJzdHJhY3QgY2xhc3MgSXRlcmFibGVNaXhpbjxFPiBpbXBsZW1lbnRzIEl0ZXJhYmxlPEU+IHsKICAvLyBUaGlzIGNsYXNzIGhhcyBtZXRob2RzIGNvcGllZCB2ZXJiYXRpbSBpbnRvOgogIC8vIC0gSXRlcmFibGVCYXNlCiAgLy8gLSBTZXRNaXhpbgogIC8vIElmIGNoYW5naW5nIGEgbWV0aG9kIGhlcmUsIGFsc28gY2hhbmdlIHRoZSBvdGhlciBjb3BpZXMuCgogIEl0ZXJhYmxlPFI+IGNhc3Q8Uj4oKSA9PiBJdGVyYWJsZS5jYXN0RnJvbTxFLCBSPih0aGlzKTsKICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZWxlbWVudCkpID0+IE1hcHBlZEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICBJdGVyYWJsZTxFPiB3aGVyZShib29sIGYoRSBlbGVtZW50KSkgPT4gV2hlcmVJdGVyYWJsZTxFPih0aGlzLCBmKTsKCiAgSXRlcmFibGU8VD4gd2hlcmVUeXBlPFQ+KCkgPT4gV2hlcmVUeXBlSXRlcmFibGU8VD4odGhpcyk7CgogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKEUgZWxlbWVudCkpID0+CiAgICAgIEV4cGFuZEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICBJdGVyYWJsZTxFPiBmb2xsb3dlZEJ5KEl0ZXJhYmxlPEU+IG90aGVyKSB7CiAgICAvLyBUeXBlIHdvcmthcm91bmQgYmVjYXVzZSBJdGVyYWJsZU1peGluPEU+IGRvZXNuJ3QgcHJvbW90ZQogICAgLy8gdG8gRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4uCiAgICBJdGVyYWJsZTxFPiBzZWxmID0gdGhpczsKICAgIGlmIChzZWxmIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+KSB7CiAgICAgIHJldHVybiBGb2xsb3dlZEJ5SXRlcmFibGU8RT4uZmlyc3RFZmZpY2llbnQoc2VsZiwgb3RoZXIpOwogICAgfQogICAgcmV0dXJuIEZvbGxvd2VkQnlJdGVyYWJsZTxFPih0aGlzLCBvdGhlcik7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICBmb3IgKEUgZSBpbiB0aGlzKSB7CiAgICAgIGlmIChlID09IGVsZW1lbnQpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihFIGVsZW1lbnQpKSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSBmKGVsZW1lbnQpOwogIH0KCiAgRSByZWR1Y2UoRSBjb21iaW5lKEUgdmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIEl0ZXJhdG9yPEU+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIEUgdmFsdWUgPSBpdGVyYXRvci5jdXJyZW50OwogICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCBpdGVyYXRvci5jdXJyZW50KTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIFQgZm9sZDxUPihUIGluaXRpYWxWYWx1ZSwgVCBjb21iaW5lKFQgcHJldmlvdXNWYWx1ZSwgRSBlbGVtZW50KSkgewogICAgdmFyIHZhbHVlID0gaW5pdGlhbFZhbHVlOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCBlbGVtZW50KTsKICAgIHJldHVybiB2YWx1ZTsKICB9CgogIGJvb2wgZXZlcnkoYm9vbCBmKEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKCFmKGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIFN0cmluZyBqb2luKFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBJdGVyYXRvcjxFPiBpdGVyYXRvciA9IHRoaXMuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybiAiIjsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBTdHJpbmdCdWZmZXIoKTsKICAgIGlmIChzZXBhcmF0b3IgPT0gbnVsbCB8fCBzZXBhcmF0b3IgPT0gIiIpIHsKICAgICAgZG8gewogICAgICAgIGJ1ZmZlci53cml0ZSgiJHtpdGVyYXRvci5jdXJyZW50fSIpOwogICAgICB9IHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIGJ1ZmZlci53cml0ZSgiJHtpdGVyYXRvci5jdXJyZW50fSIpOwogICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgIGJ1ZmZlci53cml0ZShzZXBhcmF0b3IpOwogICAgICAgIGJ1ZmZlci53cml0ZSgiJHtpdGVyYXRvci5jdXJyZW50fSIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBib29sIGFueShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZSA9IHRydWV9KSA9PgogICAgICBMaXN0PEU+LmZyb20odGhpcywgZ3Jvd2FibGU6IGdyb3dhYmxlKTsKCiAgU2V0PEU+IHRvU2V0KCkgPT4gU2V0PEU+LmZyb20odGhpcyk7CgogIGludCBnZXQgbGVuZ3RoIHsKICAgIGFzc2VydCh0aGlzIGlzISBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZSk7CiAgICBpbnQgY291bnQgPSAwOwogICAgSXRlcmF0b3IgaXQgPSBpdGVyYXRvcjsKICAgIHdoaWxlIChpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIGNvdW50Kys7CiAgICB9CiAgICByZXR1cm4gY291bnQ7CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+ICFpdGVyYXRvci5tb3ZlTmV4dCgpOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+ICFpc0VtcHR5OwoKICBJdGVyYWJsZTxFPiB0YWtlKGludCBjb3VudCkgewogICAgcmV0dXJuIFRha2VJdGVyYWJsZTxFPih0aGlzLCBjb3VudCk7CiAgfQoKICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSB7CiAgICByZXR1cm4gVGFrZVdoaWxlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwKGludCBjb3VudCkgewogICAgcmV0dXJuIFNraXBJdGVyYWJsZTxFPih0aGlzLCBjb3VudCk7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSB7CiAgICByZXR1cm4gU2tpcFdoaWxlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CiAgfQoKICBFIGdldCBmaXJzdCB7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgfQogICAgcmV0dXJuIGl0LmN1cnJlbnQ7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIEl0ZXJhdG9yPEU+IGl0ID0gaXRlcmF0b3I7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB9CiAgICBFIHJlc3VsdDsKICAgIGRvIHsKICAgICAgcmVzdWx0ID0gaXQuY3VycmVudDsKICAgIH0gd2hpbGUgKGl0Lm1vdmVOZXh0KCkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEUgZ2V0IHNpbmdsZSB7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIEUgcmVzdWx0ID0gaXQuY3VycmVudDsKICAgIGlmIChpdC5tb3ZlTmV4dCgpKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRSBmaXJzdFdoZXJlKGJvb2wgdGVzdChFIHZhbHVlKSwge0Ugb3JFbHNlKCl9KSB7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZWxlbWVudDsKICAgIH0KICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGxhc3RXaGVyZShib29sIHRlc3QoRSB2YWx1ZSksIHtFIG9yRWxzZSgpfSkgewogICAgRSByZXN1bHQ7CiAgICBib29sIGZvdW5kTWF0Y2hpbmcgPSBmYWxzZTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHsKICAgICAgICByZXN1bHQgPSBlbGVtZW50OwogICAgICAgIGZvdW5kTWF0Y2hpbmcgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBpZiAoZm91bmRNYXRjaGluZykgcmV0dXJuIHJlc3VsdDsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIHNpbmdsZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIEUgcmVzdWx0OwogICAgYm9vbCBmb3VuZE1hdGNoaW5nID0gZmFsc2U7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChpbmRleCwgImluZGV4Iik7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoaW5kZXgsICJpbmRleCIpOwogICAgaW50IGVsZW1lbnRJbmRleCA9IDA7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmIChpbmRleCA9PSBlbGVtZW50SW5kZXgpIHJldHVybiBlbGVtZW50OwogICAgICBlbGVtZW50SW5kZXgrKzsKICAgIH0KICAgIHRocm93IFJhbmdlRXJyb3IuaW5kZXgoaW5kZXgsIHRoaXMsICJpbmRleCIsIG51bGwsIGVsZW1lbnRJbmRleCk7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBJdGVyYWJsZUJhc2UuaXRlcmFibGVUb1Nob3J0U3RyaW5nKHRoaXMsICcoJywgJyknKTsKfQoKLy8vIEJhc2UgY2xhc3MgZm9yIGltcGxlbWVudGluZyBbSXRlcmFibGVdLgovLy8KLy8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyBhbGwgbWV0aG9kcyBvZiBbSXRlcmFibGVdLCBleGNlcHQgW0l0ZXJhYmxlLml0ZXJhdG9yXSwKLy8vIGluIHRlcm1zIG9mIGBpdGVyYXRvcmAuCmFic3RyYWN0IGNsYXNzIEl0ZXJhYmxlQmFzZTxFPiBleHRlbmRzIEl0ZXJhYmxlPEU+IHsKICBjb25zdCBJdGVyYWJsZUJhc2UoKTsKCiAgLy8vIENvbnZlcnQgYW4gYEl0ZXJhYmxlYCB0byBhIHN0cmluZyBsaWtlIFtJdGVyYWJsZUJhc2UudG9TdHJpbmddLgogIC8vLwogIC8vLyBBbGxvd3MgdXNpbmcgb3RoZXIgZGVsaW1pdGVycyB0aGFuICcoJyBhbmQgJyknLgogIC8vLwogIC8vLyBIYW5kbGVzIGNpcmN1bGFyIHJlZmVyZW5jZXMgd2hlcmUgY29udmVydGluZyBvbmUgb2YgdGhlIGVsZW1lbnRzCiAgLy8vIHRvIGEgc3RyaW5nIGVuZHMgdXAgY29udmVydGluZyBbaXRlcmFibGVdIHRvIGEgc3RyaW5nIGFnYWluLgogIHN0YXRpYyBTdHJpbmcgaXRlcmFibGVUb1Nob3J0U3RyaW5nKEl0ZXJhYmxlIGl0ZXJhYmxlLAogICAgICBbU3RyaW5nIGxlZnREZWxpbWl0ZXIgPSAnKCcsIFN0cmluZyByaWdodERlbGltaXRlciA9ICcpJ10pIHsKICAgIGlmIChfaXNUb1N0cmluZ1Zpc2l0aW5nKGl0ZXJhYmxlKSkgewogICAgICBpZiAobGVmdERlbGltaXRlciA9PSAiKCIgJiYgcmlnaHREZWxpbWl0ZXIgPT0gIikiKSB7CiAgICAgICAgLy8gQXZvaWQgY3JlYXRpbmcgYSBuZXcgc3RyaW5nIGluIHRoZSAiY29tbW9uIiBjYXNlLgogICAgICAgIHJldHVybiAiKC4uLikiOwogICAgICB9CiAgICAgIHJldHVybiAiJGxlZnREZWxpbWl0ZXIuLi4kcmlnaHREZWxpbWl0ZXIiOwogICAgfQogICAgTGlzdDxTdHJpbmc+IHBhcnRzID0gPFN0cmluZz5bXTsKICAgIF90b1N0cmluZ1Zpc2l0aW5nLmFkZChpdGVyYWJsZSk7CiAgICB0cnkgewogICAgICBfaXRlcmFibGVQYXJ0c1RvU3RyaW5ncyhpdGVyYWJsZSwgcGFydHMpOwogICAgfSBmaW5hbGx5IHsKICAgICAgYXNzZXJ0KGlkZW50aWNhbChfdG9TdHJpbmdWaXNpdGluZy5sYXN0LCBpdGVyYWJsZSkpOwogICAgICBfdG9TdHJpbmdWaXNpdGluZy5yZW1vdmVMYXN0KCk7CiAgICB9CiAgICByZXR1cm4gKFN0cmluZ0J1ZmZlcihsZWZ0RGVsaW1pdGVyKQogICAgICAgICAgLi53cml0ZUFsbChwYXJ0cywgIiwgIikKICAgICAgICAgIC4ud3JpdGUocmlnaHREZWxpbWl0ZXIpKQogICAgICAgIC50b1N0cmluZygpOwogIH0KCiAgLy8vIENvbnZlcnRzIGFuIGBJdGVyYWJsZWAgdG8gYSBzdHJpbmcuCiAgLy8vCiAgLy8vIENvbnZlcnRzIGVhY2ggZWxlbWVudHMgdG8gYSBzdHJpbmcsIGFuZCBzZXBhcmF0ZXMgdGhlIHJlc3VsdHMgYnkgIiwgIi4KICAvLy8gVGhlbiB3cmFwcyB0aGUgcmVzdWx0IGluIFtsZWZ0RGVsaW1pdGVyXSBhbmQgW3JpZ2h0RGVsaW1pdGVyXS4KICAvLy8KICAvLy8gVW5saWtlIFtpdGVyYWJsZVRvU2hvcnRTdHJpbmddLCB0aGlzIGNvbnZlcnNpb24gZG9lc24ndCBvbWl0IGFueQogIC8vLyBlbGVtZW50cyBvciBwdXRzIGFueSBsaW1pdCBvbiB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0LgogIC8vLwogIC8vLyBIYW5kbGVzIGNpcmN1bGFyIHJlZmVyZW5jZXMgd2hlcmUgY29udmVydGluZyBvbmUgb2YgdGhlIGVsZW1lbnRzCiAgLy8vIHRvIGEgc3RyaW5nIGVuZHMgdXAgY29udmVydGluZyBbaXRlcmFibGVdIHRvIGEgc3RyaW5nIGFnYWluLgogIHN0YXRpYyBTdHJpbmcgaXRlcmFibGVUb0Z1bGxTdHJpbmcoSXRlcmFibGUgaXRlcmFibGUsCiAgICAgIFtTdHJpbmcgbGVmdERlbGltaXRlciA9ICcoJywgU3RyaW5nIHJpZ2h0RGVsaW1pdGVyID0gJyknXSkgewogICAgaWYgKF9pc1RvU3RyaW5nVmlzaXRpbmcoaXRlcmFibGUpKSB7CiAgICAgIHJldHVybiAiJGxlZnREZWxpbWl0ZXIuLi4kcmlnaHREZWxpbWl0ZXIiOwogICAgfQogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IFN0cmluZ0J1ZmZlcihsZWZ0RGVsaW1pdGVyKTsKICAgIF90b1N0cmluZ1Zpc2l0aW5nLmFkZChpdGVyYWJsZSk7CiAgICB0cnkgewogICAgICBidWZmZXIud3JpdGVBbGwoaXRlcmFibGUsICIsICIpOwogICAgfSBmaW5hbGx5IHsKICAgICAgYXNzZXJ0KGlkZW50aWNhbChfdG9TdHJpbmdWaXNpdGluZy5sYXN0LCBpdGVyYWJsZSkpOwogICAgICBfdG9TdHJpbmdWaXNpdGluZy5yZW1vdmVMYXN0KCk7CiAgICB9CiAgICBidWZmZXIud3JpdGUocmlnaHREZWxpbWl0ZXIpOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KfQoKLy8vIEEgY29sbGVjdGlvbiB1c2VkIHRvIGlkZW50aWZ5IGN5Y2xpYyBsaXN0cyBkdXJpbmcgdG9TdHJpbmcoKSBjYWxscy4KZmluYWwgTGlzdCBfdG9TdHJpbmdWaXNpdGluZyA9IFtdOwoKLy8vIENoZWNrIGlmIHdlIGFyZSBjdXJyZW50bHkgdmlzaXRpbmcgYG9gIGluIGEgdG9TdHJpbmcgY2FsbC4KYm9vbCBfaXNUb1N0cmluZ1Zpc2l0aW5nKE9iamVjdCBvKSB7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBfdG9TdHJpbmdWaXNpdGluZy5sZW5ndGg7IGkrKykgewogICAgaWYgKGlkZW50aWNhbChvLCBfdG9TdHJpbmdWaXNpdGluZ1tpXSkpIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KCi8vLyBDb252ZXJ0IGVsZW1lbnRzIG9mIFtpdGVyYWJsZV0gdG8gc3RyaW5ncyBhbmQgc3RvcmUgdGhlbSBpbiBbcGFydHNdLgp2b2lkIF9pdGVyYWJsZVBhcnRzVG9TdHJpbmdzKEl0ZXJhYmxlIGl0ZXJhYmxlLCBMaXN0PFN0cmluZz4gcGFydHMpIHsKICAvKgogICAqIFRoaXMgaXMgdGhlIGNvbXBsaWNhdGVkIHBhcnQgb2YgW2l0ZXJhYmxlVG9TaG9ydFN0cmluZ10uCiAgICogSXQgaXMgZXh0cmFjdGVkIGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24gdG8gYXZvaWQgaGF2aW5nIHRvbyBtdWNoIGNvZGUKICAgKiBpbnNpZGUgdGhlIHRyeS9maW5hbGx5LgogICAqLwogIC8vLyBUcnkgdG8gc3RheSBiZWxvdyB0aGlzIG1hbnkgY2hhcmFjdGVycy4KICBjb25zdCBpbnQgbGVuZ3RoTGltaXQgPSA4MDsKCiAgLy8vIEFsd2F5cyBhdCBsZWFzdCB0aGlzIG1hbnkgZWxlbWVudHMgYXQgdGhlIHN0YXJ0LgogIGNvbnN0IGludCBoZWFkQ291bnQgPSAzOwoKICAvLy8gQWx3YXlzIGF0IGxlYXN0IHRoaXMgbWFueSBlbGVtZW50cyBhdCB0aGUgZW5kLgogIGNvbnN0IGludCB0YWlsQ291bnQgPSAyOwoKICAvLy8gU3RvcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBtYW55IGVsZW1lbnRzLiBJdGVyYWJsZXMgY2FuIGJlIGluZmluaXRlLgogIGNvbnN0IGludCBtYXhDb3VudCA9IDEwMDsKICAvLyBQZXIgZW50cnkgbGVuZ3RoIG92ZXJoZWFkLiBJdCdzIGZvciAiLCAiIGZvciBhbGwgYWZ0ZXIgdGhlIGZpcnN0IGVudHJ5LAogIC8vIGFuZCBmb3IgIigiIGFuZCAiKSIgZm9yIHRoZSBpbml0aWFsIGVudHJ5LiBCeSBwdXJlIGx1Y2ssIHRoYXQncyB0aGUgc2FtZQogIC8vIG51bWJlci4KICBjb25zdCBpbnQgb3ZlcmhlYWQgPSAyOwogIGNvbnN0IGludCBlbGxpcHNpc1NpemUgPSAzOyAvLyAiLi4uIi5sZW5ndGguCgogIGludCBsZW5ndGggPSAwOwogIGludCBjb3VudCA9IDA7CiAgSXRlcmF0b3IgaXQgPSBpdGVyYWJsZS5pdGVyYXRvcjsKICAvLyBJbml0aWFsIHJ1biBvZiBlbGVtZW50cywgYXQgbGVhc3QgaGVhZENvdW50LCBhbmQgdGhlbiBjb250aW51ZSB1bnRpbAogIC8vIHBhc3NpbmcgYXQgbW9zdCBsZW5ndGhMaW1pdCBjaGFyYWN0ZXJzLgogIHdoaWxlIChsZW5ndGggPCBsZW5ndGhMaW1pdCB8fCBjb3VudCA8IGhlYWRDb3VudCkgewogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSByZXR1cm47CiAgICBTdHJpbmcgbmV4dCA9ICIke2l0LmN1cnJlbnR9IjsKICAgIHBhcnRzLmFkZChuZXh0KTsKICAgIGxlbmd0aCArPSBuZXh0Lmxlbmd0aCArIG92ZXJoZWFkOwogICAgY291bnQrKzsKICB9CgogIFN0cmluZyBwZW51bHRpbWF0ZVN0cmluZzsKICBTdHJpbmcgdWx0aW1hdGVTdHJpbmc7CgogIC8vIEZpbmQgbGFzdCB0d28gZWxlbWVudHMuIE9uZSBvciBtb3JlIG9mIHRoZW0gbWF5IGFscmVhZHkgYmUgaW4gdGhlCiAgLy8gcGFydHMgYXJyYXkuIEluY2x1ZGUgdGhlaXIgbGVuZ3RoIGluIGBsZW5ndGhgLgogIE9iamVjdCBwZW51bHRpbWF0ZTsKICBPYmplY3QgdWx0aW1hdGU7CiAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICBpZiAoY291bnQgPD0gaGVhZENvdW50ICsgdGFpbENvdW50KSByZXR1cm47CiAgICB1bHRpbWF0ZVN0cmluZyA9IHBhcnRzLnJlbW92ZUxhc3QoKTsKICAgIHBlbnVsdGltYXRlU3RyaW5nID0gcGFydHMucmVtb3ZlTGFzdCgpOwogIH0gZWxzZSB7CiAgICBwZW51bHRpbWF0ZSA9IGl0LmN1cnJlbnQ7CiAgICBjb3VudCsrOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIGlmIChjb3VudCA8PSBoZWFkQ291bnQgKyAxKSB7CiAgICAgICAgcGFydHMuYWRkKCIkcGVudWx0aW1hdGUiKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdWx0aW1hdGVTdHJpbmcgPSAiJHBlbnVsdGltYXRlIjsKICAgICAgcGVudWx0aW1hdGVTdHJpbmcgPSBwYXJ0cy5yZW1vdmVMYXN0KCk7CiAgICAgIGxlbmd0aCArPSB1bHRpbWF0ZVN0cmluZy5sZW5ndGggKyBvdmVyaGVhZDsKICAgIH0gZWxzZSB7CiAgICAgIHVsdGltYXRlID0gaXQuY3VycmVudDsKICAgICAgY291bnQrKzsKICAgICAgLy8gVGhlbiBrZWVwIGxvb3BpbmcsIGtlZXBpbmcgdGhlIGxhc3QgdHdvIGVsZW1lbnRzIGluIHZhcmlhYmxlcy4KICAgICAgYXNzZXJ0KGNvdW50IDwgbWF4Q291bnQpOwogICAgICB3aGlsZSAoaXQubW92ZU5leHQoKSkgewogICAgICAgIHBlbnVsdGltYXRlID0gdWx0aW1hdGU7CiAgICAgICAgdWx0aW1hdGUgPSBpdC5jdXJyZW50OwogICAgICAgIGNvdW50Kys7CiAgICAgICAgaWYgKGNvdW50ID4gbWF4Q291bnQpIHsKICAgICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgZm91bmQgdGhlIGVuZCBiZWZvcmUgbWF4Q291bnQsIGdpdmUgdXAuCiAgICAgICAgICAvLyBUaGlzIGNhbm5vdCBoYXBwZW4gaW4gdGhlIGNvZGUgYWJvdmUgYmVjYXVzZSBlYWNoIGVudHJ5CiAgICAgICAgICAvLyBpbmNyZWFzZXMgbGVuZ3RoIGJ5IGF0IGxlYXN0IHR3bywgc28gdGhlcmUgaXMgbm8gd2F5IHRvCiAgICAgICAgICAvLyB2aXNpdCBtb3JlIHRoYW4gfjQwIGVsZW1lbnRzIGJlZm9yZSB0aGlzIGxvb3AuCgogICAgICAgICAgLy8gUmVtb3ZlIGFueSBzdXJwbHVzIGVsZW1lbnRzIHVudGlsIGxlbmd0aCwgaW5jbHVkaW5nICIsIC4uLikiLAogICAgICAgICAgLy8gaXMgYXQgbW9zdCBsZW5ndGhMaW1pdC4KICAgICAgICAgIHdoaWxlIChsZW5ndGggPiBsZW5ndGhMaW1pdCAtIGVsbGlwc2lzU2l6ZSAtIG92ZXJoZWFkICYmCiAgICAgICAgICAgICAgY291bnQgPiBoZWFkQ291bnQpIHsKICAgICAgICAgICAgbGVuZ3RoIC09IHBhcnRzLnJlbW92ZUxhc3QoKS5sZW5ndGggKyBvdmVyaGVhZDsKICAgICAgICAgICAgY291bnQtLTsKICAgICAgICAgIH0KICAgICAgICAgIHBhcnRzLmFkZCgiLi4uIik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICAgIHBlbnVsdGltYXRlU3RyaW5nID0gIiRwZW51bHRpbWF0ZSI7CiAgICAgIHVsdGltYXRlU3RyaW5nID0gIiR1bHRpbWF0ZSI7CiAgICAgIGxlbmd0aCArPSB1bHRpbWF0ZVN0cmluZy5sZW5ndGggKyBwZW51bHRpbWF0ZVN0cmluZy5sZW5ndGggKyAyICogb3ZlcmhlYWQ7CiAgICB9CiAgfQoKICAvLyBJZiB0aGVyZSBpcyBhIGdhcCBiZXR3ZWVuIHRoZSBpbml0aWFsIHJ1biBhbmQgdGhlIGxhc3QgdHdvLAogIC8vIHByZXBhcmUgdG8gYWRkIGFuIGVsbGlwc2lzLgogIFN0cmluZyBlbGlzaW9uOwogIGlmIChjb3VudCA+IHBhcnRzLmxlbmd0aCArIHRhaWxDb3VudCkgewogICAgZWxpc2lvbiA9ICIuLi4iOwogICAgbGVuZ3RoICs9IGVsbGlwc2lzU2l6ZSArIG92ZXJoZWFkOwogIH0KCiAgLy8gSWYgdGhlIGxhc3QgdHdvIGVsZW1lbnRzIHdlcmUgdmVyeSBsb25nLCBhbmQgd2UgaGF2ZSBtb3JlIHRoYW4KICAvLyBoZWFkQ291bnQgZWxlbWVudHMgaW4gdGhlIGluaXRpYWwgcnVuLCBkcm9wIHNvbWUgdG8gbWFrZSByb29tIGZvcgogIC8vIHRoZSBsYXN0IHR3by4KICB3aGlsZSAobGVuZ3RoID4gbGVuZ3RoTGltaXQgJiYgcGFydHMubGVuZ3RoID4gaGVhZENvdW50KSB7CiAgICBsZW5ndGggLT0gcGFydHMucmVtb3ZlTGFzdCgpLmxlbmd0aCArIG92ZXJoZWFkOwogICAgaWYgKGVsaXNpb24gPT0gbnVsbCkgewogICAgICBlbGlzaW9uID0gIi4uLiI7CiAgICAgIGxlbmd0aCArPSBlbGxpcHNpc1NpemUgKyBvdmVyaGVhZDsKICAgIH0KICB9CiAgaWYgKGVsaXNpb24gIT0gbnVsbCkgewogICAgcGFydHMuYWRkKGVsaXNpb24pOwogIH0KICBwYXJ0cy5hZGQocGVudWx0aW1hdGVTdHJpbmcpOwogIHBhcnRzLmFkZCh1bHRpbWF0ZVN0cmluZyk7Cn0KgZQATk48ARkBTwQ+OTIUED4BOkcBRQE8ATUlAS5AJh0uQAYvBAEiGCUGEgQBJCgEASwqIC4GICIwBhIEAUUePRIEASIeJQYRBAEpKikqMAstJQ0rJCEtCAYeBAEjHiYGEgQBLC4BJwETLhMcHA8GEgQBLAEjASApBAEuLQQBICkEAS4tBAEQHxouBhcEAQ8fGi4GDgkbHRMEAREfQBs9EwQBMx4pBiksBAEyDiAeGxoeCAYmKSwEATYOIB4bHTAKGh4IBiYpLAQBGzAxGh4xFgZGBAFLAgEsBFEcNRgBRgY2BkdDOUMpOz0YCDEGJSUKMBA7JgYoIiMVBAEqBk1FBkc8BkdDOEMpMQY3JQonEDsmBiIeBAIBSCMBPyU3OQQQAgFJRgU+Sh0GLh4BNxsBNRsBShxNTg0aLwESESNKLTYgIxUmDQQBHBkBRzQWExgwKSwLHg0aJCMQCCcuMg0dD0ggHiAfESBDRUU8AUslQyM8FQwcEgoIKiRRBgQBQSESKhUnBAFERxM9NBsXKQYEGRgEIB0CAR1kYXJ0OmNvbGxlY3Rpb24vaXRlcmFibGUuZGFydDRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29sbGVjdGlvbi9pdGVyYXRvci5kYXJ0hPovLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbGxlY3Rpb247CgovLy8gVGhlIFtIYXNOZXh0SXRlcmF0b3JdIGNsYXNzIHdyYXBzIGFuIFtJdGVyYXRvcl0gYW5kIHByb3ZpZGVzIG1ldGhvZHMgdG8KLy8vIGl0ZXJhdGUgb3ZlciBhbiBvYmplY3QgdXNpbmcgYGhhc05leHRgIGFuZCBgbmV4dGAuCi8vLwovLy8gQW4gW0hhc05leHRJdGVyYXRvcl0gZG9lcyBub3QgaW1wbGVtZW50IHRoZSBbSXRlcmF0b3JdIGludGVyZmFjZS4KY2xhc3MgSGFzTmV4dEl0ZXJhdG9yPEU+IHsKICBzdGF0aWMgY29uc3QgaW50IF9IQVNfTkVYVF9BTkRfTkVYVF9JTl9DVVJSRU5UID0gMDsKICBzdGF0aWMgY29uc3QgaW50IF9OT19ORVhUID0gMTsKICBzdGF0aWMgY29uc3QgaW50IF9OT1RfTU9WRURfWUVUID0gMjsKCiAgSXRlcmF0b3I8RT4gX2l0ZXJhdG9yOwogIGludCBfc3RhdGUgPSBfTk9UX01PVkVEX1lFVDsKCiAgSGFzTmV4dEl0ZXJhdG9yKHRoaXMuX2l0ZXJhdG9yKTsKCiAgYm9vbCBnZXQgaGFzTmV4dCB7CiAgICBpZiAoX3N0YXRlID09IF9OT1RfTU9WRURfWUVUKSBfbW92ZSgpOwogICAgcmV0dXJuIF9zdGF0ZSA9PSBfSEFTX05FWFRfQU5EX05FWFRfSU5fQ1VSUkVOVDsKICB9CgogIEUgbmV4dCgpIHsKICAgIC8vIENhbGwgdG8gaGFzTmV4dCBpcyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIHdlIGFyZSBwb3NpdGlvbmVkIGF0IHRoZSBmaXJzdAogICAgLy8gZWxlbWVudCB3aGVuIHdlIHN0YXJ0IGl0ZXJhdGluZy4KICAgIGlmICghaGFzTmV4dCkgdGhyb3cgU3RhdGVFcnJvcigiTm8gbW9yZSBlbGVtZW50cyIpOwogICAgYXNzZXJ0KF9zdGF0ZSA9PSBfSEFTX05FWFRfQU5EX05FWFRfSU5fQ1VSUkVOVCk7CiAgICBFIHJlc3VsdCA9IF9pdGVyYXRvci5jdXJyZW50OwogICAgX21vdmUoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIF9tb3ZlKCkgewogICAgaWYgKF9pdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIF9zdGF0ZSA9IF9IQVNfTkVYVF9BTkRfTkVYVF9JTl9DVVJSRU5UOwogICAgfSBlbHNlIHsKICAgICAgX3N0YXRlID0gX05PX05FWFQ7CiAgICB9CiAgfQp9Ci0ATk48ARkBTDcERhs2IScBGR8BIwEVKzQEAQ1QKDg1Ig0TBAERIC4NGQYEAgEdZGFydDpjb2xsZWN0aW9uL2l0ZXJhdG9yLmRhcnQ7b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbGxlY3Rpb24vbGlua2VkX2hhc2hfbWFwLmRhcnSXyy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29sbGVjdGlvbjsKCi8vLyBBIGhhc2gtdGFibGUgYmFzZWQgaW1wbGVtZW50YXRpb24gb2YgW01hcF0uCi8vLwovLy8gVGhlIGluc2VydGlvbiBvcmRlciBvZiBrZXlzIGlzIHJlbWVtYmVyZWQsCi8vLyBhbmQga2V5cyBhcmUgaXRlcmF0ZWQgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBpbnNlcnRlZCBpbnRvIHRoZSBtYXAuCi8vLyBWYWx1ZXMgYXJlIGl0ZXJhdGVkIGluIHRoZWlyIGNvcnJlc3BvbmRpbmcga2V5J3Mgb3JkZXIuCi8vLyBDaGFuZ2luZyBhIGtleSdzIHZhbHVlLCB3aGVuIHRoZSBrZXkgaXMgYWxyZWFkeSBpbiB0aGUgbWFwLAovLy8gZG9lcyBub3QgY2hhbmdlIHRoZSBpdGVyYXRpb24gb3JkZXIsCi8vLyBidXQgcmVtb3ZpbmcgdGhlIGtleSBhbmQgYWRkaW5nIGl0IGFnYWluCi8vLyB3aWxsIG1ha2UgaXQgYmUgbGFzdCBpbiB0aGUgaXRlcmF0aW9uIG9yZGVyLgovLy8KLy8vIFRoZSBrZXlzIG9mIGEgYExpbmtlZEhhc2hNYXBgIG11c3QgaGF2ZSBjb25zaXN0ZW50IFtPYmplY3QuPT1dCi8vLyBhbmQgW09iamVjdC5oYXNoQ29kZV0gaW1wbGVtZW50YXRpb25zLiBUaGlzIG1lYW5zIHRoYXQgdGhlIGA9PWAgb3BlcmF0b3IKLy8vIG11c3QgZGVmaW5lIGEgc3RhYmxlIGVxdWl2YWxlbmNlIHJlbGF0aW9uIG9uIHRoZSBrZXlzIChyZWZsZXhpdmUsCi8vLyBzeW1tZXRyaWMsIHRyYW5zaXRpdmUsIGFuZCBjb25zaXN0ZW50IG92ZXIgdGltZSksIGFuZCB0aGF0IGBoYXNoQ29kZWAKLy8vIG11c3QgYmUgdGhlIHNhbWUgZm9yIG9iamVjdHMgdGhhdCBhcmUgY29uc2lkZXJlZCBlcXVhbCBieSBgPT1gLgovLy8KLy8vIFRoZSBtYXAgYWxsb3dzIGBudWxsYCBhcyBhIGtleS4KYWJzdHJhY3QgY2xhc3MgTGlua2VkSGFzaE1hcDxLLCBWPiBpbXBsZW1lbnRzIE1hcDxLLCBWPiB7CiAgLy8vIENyZWF0ZXMgYW4gaW5zZXJ0aW9uLW9yZGVyZWQgaGFzaC10YWJsZSBiYXNlZCBbTWFwXS4KICAvLy8KICAvLy8gSWYgW2VxdWFsc10gaXMgcHJvdmlkZWQsIGl0IGlzIHVzZWQgdG8gY29tcGFyZSB0aGUga2V5cyBpbiB0aGUgdGFibGUgd2l0aAogIC8vLyBuZXcga2V5cy4gSWYgW2VxdWFsc10gaXMgb21pdHRlZCwgdGhlIGtleSdzIG93biBbT2JqZWN0Lj09XSBpcyB1c2VkCiAgLy8vIGluc3RlYWQuCiAgLy8vCiAgLy8vIFNpbWlsYXIsIGlmIFtoYXNoQ29kZV0gaXMgcHJvdmlkZWQsIGl0IGlzIHVzZWQgdG8gcHJvZHVjZSBhIGhhc2ggdmFsdWUKICAvLy8gZm9yIGtleXMgaW4gb3JkZXIgdG8gcGxhY2UgdGhlbSBpbiB0aGUgaGFzaCB0YWJsZS4gSWYgaXQgaXMgb21pdHRlZCwgdGhlCiAgLy8vIGtleSdzIG93biBbT2JqZWN0Lmhhc2hDb2RlXSBpcyB1c2VkLgogIC8vLwogIC8vLyBJZiB1c2luZyBtZXRob2RzIGxpa2UgW29wZXJhdG9yIFtdXSwgW3JlbW92ZV0gYW5kIFtjb250YWluc0tleV0gdG9nZXRoZXIKICAvLy8gd2l0aCBhIGN1c3RvbSBlcXVhbGl0eSBhbmQgaGFzaGNvZGUsIGFuIGV4dHJhIGBpc1ZhbGlkS2V5YCBmdW5jdGlvbgogIC8vLyBjYW4gYmUgc3VwcGxpZWQuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIFtlcXVhbHNdIG9yCiAgLy8vIFtoYXNoQ29kZV0gd2l0aCBhbiBhcmd1bWVudCB0aGF0IG1heSBub3QgYmUgYSBbS10gaW5zdGFuY2UsIGFuZCBpZiB0aGUKICAvLy8gY2FsbCByZXR1cm5zIGZhbHNlLCB0aGUga2V5IGlzIGFzc3VtZWQgdG8gbm90IGJlIGluIHRoZSBzZXQuCiAgLy8vIFRoZSBbaXNWYWxpZEtleV0gZnVuY3Rpb24gZGVmYXVsdHMgdG8ganVzdCB0ZXN0aW5nIGlmIHRoZSBvYmplY3QgaXMgYQogIC8vLyBbS10gaW5zdGFuY2UuCiAgLy8vCiAgLy8vIEV4YW1wbGU6CiAgLy8vCiAgLy8vICAgICBuZXcgTGlua2VkSGFzaE1hcDxpbnQsaW50PihlcXVhbHM6IChpbnQgYSwgaW50IGIpID0+IChiIC0gYSkgJSA1ID09IDAsCiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogKGludCBlKSA9PiBlICUgNSkKICAvLy8KICAvLy8gVGhpcyBleGFtcGxlIG1hcCBkb2VzIG5vdCBuZWVkIGFuIGBpc1ZhbGlkS2V5YCBmdW5jdGlvbiB0byBiZSBwYXNzZWQuCiAgLy8vIFRoZSBkZWZhdWx0IGZ1bmN0aW9uIGFjY2VwdHMgb25seSBgaW50YCB2YWx1ZXMsIHdoaWNoIGNhbiBzYWZlbHkgYmUKICAvLy8gcGFzc2VkIHRvIGJvdGggdGhlIGBlcXVhbHNgIGFuZCBgaGFzaENvZGVgIGZ1bmN0aW9ucy4KICAvLy8KICAvLy8gSWYgbmVpdGhlciBgZXF1YWxzYCwgYGhhc2hDb2RlYCwgbm9yIGBpc1ZhbGlkS2V5YCBpcyBwcm92aWRlZCwKICAvLy8gdGhlIGRlZmF1bHQgYGlzVmFsaWRLZXlgIGluc3RlYWQgYWNjZXB0cyBhbGwga2V5cy4KICAvLy8gVGhlIGRlZmF1bHQgZXF1YWxpdHkgYW5kIGhhc2hjb2RlIG9wZXJhdGlvbnMgYXJlIGFzc3VtZWQgdG8gd29yayBvbiBhbGwKICAvLy8gb2JqZWN0cy4KICAvLy8KICAvLy8gTGlrZXdpc2UsIGlmIGBlcXVhbHNgIGlzIFtpZGVudGljYWxdLCBgaGFzaENvZGVgIGlzIFtpZGVudGl0eUhhc2hDb2RlXQogIC8vLyBhbmQgYGlzVmFsaWRLZXlgIGlzIG9taXR0ZWQsIHRoZSByZXN1bHRpbmcgbWFwIGlzIGlkZW50aXR5IGJhc2VkLAogIC8vLyBhbmQgdGhlIGBpc1ZhbGlkS2V5YCBkZWZhdWx0cyB0byBhY2NlcHRpbmcgYWxsIGtleXMuCiAgLy8vIFN1Y2ggYSBtYXAgY2FuIGJlIGNyZWF0ZWQgZGlyZWN0bHkgdXNpbmcgW0xpbmtlZEhhc2hNYXAuaWRlbnRpdHldLgogIC8vLwogIC8vLyBUaGUgdXNlZCBgZXF1YWxzYCBhbmQgYGhhc2hDb2RlYCBtZXRob2Qgc2hvdWxkIGFsd2F5cyBiZSBjb25zaXN0ZW50LAogIC8vLyBzbyB0aGF0IGlmIGBlcXVhbHMoYSwgYilgIHRoZW4gYGhhc2hDb2RlKGEpID09IGhhc2hDb2RlKGIpYC4gVGhlIGhhc2gKICAvLy8gb2YgYW4gb2JqZWN0LCBvciB3aGF0IGl0IGNvbXBhcmVzIGVxdWFsIHRvLCBzaG91bGQgbm90IGNoYW5nZSB3aGlsZSB0aGUKICAvLy8gb2JqZWN0IGlzIGluIHRoZSB0YWJsZS4gSWYgaXQgZG9lcyBjaGFuZ2UsIHRoZSByZXN1bHQgaXMgdW5wcmVkaWN0YWJsZS4KICAvLy8KICAvLy8gSWYgeW91IHN1cHBseSBvbmUgb2YgW2VxdWFsc10gYW5kIFtoYXNoQ29kZV0sCiAgLy8vIHlvdSBzaG91bGQgZ2VuZXJhbGx5IGFsc28gdG8gc3VwcGx5IHRoZSBvdGhlci4KICBleHRlcm5hbCBmYWN0b3J5IExpbmtlZEhhc2hNYXAoCiAgICAgIHtib29sIGVxdWFscyhLIGtleTEsIEsga2V5MiksCiAgICAgIGludCBoYXNoQ29kZShLIGtleSksCiAgICAgIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpfSk7CgogIC8vLyBDcmVhdGVzIGFuIGluc2VydGlvbi1vcmRlcmVkIGlkZW50aXR5LWJhc2VkIG1hcC4KICAvLy8KICAvLy8gRWZmZWN0aXZlbHkgYSBzaG9ydGhhbmQgZm9yOgogIC8vLwogIC8vLyAgICAgbmV3IExpbmtlZEhhc2hNYXA8SywgVj4oZXF1YWxzOiBpZGVudGljYWwsCiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWRlbnRpdHlIYXNoQ29kZSkKICBleHRlcm5hbCBmYWN0b3J5IExpbmtlZEhhc2hNYXAuaWRlbnRpdHkoKTsKCiAgLy8vIENyZWF0ZXMgYSBbTGlua2VkSGFzaE1hcF0gdGhhdCBjb250YWlucyBhbGwga2V5IHZhbHVlIHBhaXJzIG9mIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFRoZSBrZXlzIG11c3QgYWxsIGJlIGluc3RhbmNlcyBvZiBbS10gYW5kIHRoZSB2YWx1ZXMgdG8gW1ZdLgogIC8vLyBUaGUgW290aGVyXSBtYXAgaXRzZWxmIGNhbiBoYXZlIGFueSB0eXBlLgogIGZhY3RvcnkgTGlua2VkSGFzaE1hcC5mcm9tKE1hcCBvdGhlcikgewogICAgTGlua2VkSGFzaE1hcDxLLCBWPiByZXN1bHQgPSBMaW5rZWRIYXNoTWFwPEssIFY+KCk7CiAgICBvdGhlci5mb3JFYWNoKChrLCB2KSB7CiAgICAgIHJlc3VsdFtrXSA9IHY7CiAgICB9KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ3JlYXRlcyBhIFtMaW5rZWRIYXNoTWFwXSB0aGF0IGNvbnRhaW5zIGFsbCBrZXkgdmFsdWUgcGFpcnMgb2YgW290aGVyXS4KICBmYWN0b3J5IExpbmtlZEhhc2hNYXAub2YoTWFwPEssIFY+IG90aGVyKSA9PgogICAgICBMaW5rZWRIYXNoTWFwPEssIFY+KCkuLmFkZEFsbChvdGhlcik7CgogIC8vLyBDcmVhdGVzIGEgW0xpbmtlZEhhc2hNYXBdIHdoZXJlIHRoZSBrZXlzIGFuZCB2YWx1ZXMgYXJlIGNvbXB1dGVkIGZyb20gdGhlCiAgLy8vIFtpdGVyYWJsZV0uCiAgLy8vCiAgLy8vIEZvciBlYWNoIGVsZW1lbnQgb2YgdGhlIFtpdGVyYWJsZV0gdGhpcyBjb25zdHJ1Y3RvciBjb21wdXRlcyBhIGtleS92YWx1ZQogIC8vLyBwYWlyLCBieSBhcHBseWluZyBba2V5XSBhbmQgW3ZhbHVlXSByZXNwZWN0aXZlbHkuCiAgLy8vCiAgLy8vIFRoZSBrZXlzIG9mIHRoZSBrZXkvdmFsdWUgcGFpcnMgZG8gbm90IG5lZWQgdG8gYmUgdW5pcXVlLiBUaGUgbGFzdAogIC8vLyBvY2N1cnJlbmNlIG9mIGEga2V5IHdpbGwgc2ltcGx5IG92ZXJ3cml0ZSBhbnkgcHJldmlvdXMgdmFsdWUuCiAgLy8vCiAgLy8vIElmIG5vIHZhbHVlcyBhcmUgc3BlY2lmaWVkIGZvciBba2V5XSBhbmQgW3ZhbHVlXSB0aGUgZGVmYXVsdCBpcyB0aGUKICAvLy8gaWRlbnRpdHkgZnVuY3Rpb24uCiAgZmFjdG9yeSBMaW5rZWRIYXNoTWFwLmZyb21JdGVyYWJsZShJdGVyYWJsZSBpdGVyYWJsZSwKICAgICAge0sga2V5KGVsZW1lbnQpLCBWIHZhbHVlKGVsZW1lbnQpfSkgewogICAgTGlua2VkSGFzaE1hcDxLLCBWPiBtYXAgPSBMaW5rZWRIYXNoTWFwPEssIFY+KCk7CiAgICBNYXBCYXNlLl9maWxsTWFwV2l0aE1hcHBlZEl0ZXJhYmxlKG1hcCwgaXRlcmFibGUsIGtleSwgdmFsdWUpOwogICAgcmV0dXJuIG1hcDsKICB9CgogIC8vLyBDcmVhdGVzIGEgW0xpbmtlZEhhc2hNYXBdIGFzc29jaWF0aW5nIHRoZSBnaXZlbiBba2V5c10gdG8gW3ZhbHVlc10uCiAgLy8vCiAgLy8vIFRoaXMgY29uc3RydWN0b3IgaXRlcmF0ZXMgb3ZlciBba2V5c10gYW5kIFt2YWx1ZXNdIGFuZCBtYXBzIGVhY2ggZWxlbWVudCBvZgogIC8vLyBba2V5c10gdG8gdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiBbdmFsdWVzXS4KICAvLy8KICAvLy8gSWYgW2tleXNdIGNvbnRhaW5zIHRoZSBzYW1lIG9iamVjdCBtdWx0aXBsZSB0aW1lcywgdGhlIGxhc3Qgb2NjdXJyZW5jZQogIC8vLyBvdmVyd3JpdGVzIHRoZSBwcmV2aW91cyB2YWx1ZS4KICAvLy8KICAvLy8gSXQgaXMgYW4gZXJyb3IgaWYgdGhlIHR3byBbSXRlcmFibGVdcyBkb24ndCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4KICBmYWN0b3J5IExpbmtlZEhhc2hNYXAuZnJvbUl0ZXJhYmxlcyhJdGVyYWJsZTxLPiBrZXlzLCBJdGVyYWJsZTxWPiB2YWx1ZXMpIHsKICAgIExpbmtlZEhhc2hNYXA8SywgVj4gbWFwID0gTGlua2VkSGFzaE1hcDxLLCBWPigpOwogICAgTWFwQmFzZS5fZmlsbE1hcFdpdGhJdGVyYWJsZXMobWFwLCBrZXlzLCB2YWx1ZXMpOwogICAgcmV0dXJuIG1hcDsKICB9CgogIC8vLyBDcmVhdGVzIGEgW0xpbmtlZEhhc2hNYXBdIGNvbnRhaW5pbmcgdGhlIGVudHJpZXMgb2YgW2VudHJpZXNdLgogIC8vLwogIC8vLyBSZXR1cm5zIGEgbmV3IGBMaW5rZWRIYXNoTWFwPEssIFY+YCB3aGVyZSBhbGwgZW50cmllcyBvZiBbZW50cmllc10KICAvLy8gaGF2ZSBiZWVuIGFkZGVkIGluIGl0ZXJhdGlvbiBvcmRlci4KICAvLy8KICAvLy8gSWYgbXVsdGlwbGUgW2VudHJpZXNdIGhhdmUgdGhlIHNhbWUga2V5LAogIC8vLyBsYXRlciBvY2N1cnJlbmNlcyBvdmVyd3JpdGUgdGhlIGVhcmxpZXIgb25lcy4KICBAU2luY2UoIjIuMSIpCiAgZmFjdG9yeSBMaW5rZWRIYXNoTWFwLmZyb21FbnRyaWVzKEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBlbnRyaWVzKSA9PgogICAgICA8SywgVj57fS4uYWRkRW50cmllcyhlbnRyaWVzKTsKfQqAjwBOTjwBGQEwBC9IPEApLTEEQ01GSkQEJDo7BlBKDwZNTysGT0pKTUNMFAYPBlFBBkxKPAZFOU4PBk1IO0kGS0xOTgY0NSIkGycBNwYjBjU+LQFOBkMwKjgbFQgTBAFOLywBUBIGTzgGSUQGShk4LDVDEAQBSgZSNwZNJQZITjU2EAQBRQZJKgYvNBBJJQIBJGRhcnQ6Y29sbGVjdGlvbi9saW5rZWRfaGFzaF9tYXAuZGFydDtvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29sbGVjdGlvbi9saW5rZWRfaGFzaF9zZXQuZGFydJTRLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKLy8vIEEgW0xpbmtlZEhhc2hTZXRdIGlzIGEgaGFzaC10YWJsZSBiYXNlZCBbU2V0XSBpbXBsZW1lbnRhdGlvbi4KLy8vCi8vLyBUaGUgYExpbmtlZEhhc2hTZXRgIGFsc28ga2VlcCB0cmFjayBvZiB0aGUgb3JkZXIgdGhhdCBlbGVtZW50cyB3ZXJlIGluc2VydGVkCi8vLyBpbiwgYW5kIGl0ZXJhdGlvbiBoYXBwZW5zIGluIGZpcnN0LXRvLWxhc3QgaW5zZXJ0aW9uIG9yZGVyLgovLy8KLy8vIFRoZSBlbGVtZW50cyBvZiBhIGBMaW5rZWRIYXNoU2V0YCBtdXN0IGhhdmUgY29uc2lzdGVudCBbT2JqZWN0Lj09XQovLy8gYW5kIFtPYmplY3QuaGFzaENvZGVdIGltcGxlbWVudGF0aW9ucy4gVGhpcyBtZWFucyB0aGF0IHRoZSBgPT1gIG9wZXJhdG9yCi8vLyBtdXN0IGRlZmluZSBhIHN0YWJsZSBlcXVpdmFsZW5jZSByZWxhdGlvbiBvbiB0aGUgZWxlbWVudHMgKHJlZmxleGl2ZSwKLy8vIHN5bW1ldHJpYywgdHJhbnNpdGl2ZSwgYW5kIGNvbnNpc3RlbnQgb3ZlciB0aW1lKSwgYW5kIHRoYXQgYGhhc2hDb2RlYAovLy8gbXVzdCBiZSB0aGUgc2FtZSBmb3Igb2JqZWN0cyB0aGF0IGFyZSBjb25zaWRlcmVkIGVxdWFsIGJ5IGA9PWAuCi8vLwovLy8gVGhlIHNldCBhbGxvd3MgYG51bGxgIGFzIGFuIGVsZW1lbnQuCi8vLwovLy8gSXRlcmF0aW9uIG9mIGVsZW1lbnRzIGlzIGRvbmUgaW4gZWxlbWVudCBpbnNlcnRpb24gb3JkZXIuCi8vLyBBbiBlbGVtZW50IHRoYXQgd2FzIGFkZGVkIGFmdGVyIGFub3RoZXIgd2lsbCBvY2N1ciBsYXRlciBpbiB0aGUgaXRlcmF0aW9uLgovLy8gQWRkaW5nIGFuIGVsZW1lbnQgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBzZXQKLy8vIGRvZXMgbm90IGNoYW5nZSBpdHMgcG9zaXRpb24gaW4gdGhlIGl0ZXJhdGlvbiBvcmRlciwKLy8vIGJ1dCByZW1vdmluZyBhbiBlbGVtZW50IGFuZCBhZGRpbmcgaXQgYWdhaW4sCi8vLyB3aWxsIG1ha2UgaXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhbiBpdGVyYXRpb24uCi8vLwovLy8gTW9zdCBzaW1wbGUgb3BlcmF0aW9ucyBvbiBgSGFzaFNldGAgYXJlIGRvbmUgaW4gKHBvdGVudGlhbGx5IGFtb3J0aXplZCkKLy8vIGNvbnN0YW50IHRpbWU6IFthZGRdLCBbY29udGFpbnNdLCBbcmVtb3ZlXSwgYW5kIFtsZW5ndGhdLCBwcm92aWRlZCB0aGUgaGFzaAovLy8gY29kZXMgb2Ygb2JqZWN0cyBhcmUgd2VsbCBkaXN0cmlidXRlZC4uCmFic3RyYWN0IGNsYXNzIExpbmtlZEhhc2hTZXQ8RT4gaW1wbGVtZW50cyBTZXQ8RT4gewogIC8vLyBDcmVhdGUgYW4gaW5zZXJ0aW9uLW9yZGVyZWQgaGFzaCBzZXQgdXNpbmcgdGhlIHByb3ZpZGVkCiAgLy8vIFtlcXVhbHNdIGFuZCBbaGFzaENvZGVdLgogIC8vLwogIC8vLyBUaGUgcHJvdmlkZWQgW2VxdWFsc10gbXVzdCBkZWZpbmUgYSBzdGFibGUgZXF1aXZhbGVuY2UgcmVsYXRpb24sIGFuZAogIC8vLyBbaGFzaENvZGVdIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIFtlcXVhbHNdLiBJZiB0aGUgW2VxdWFsc10gb3IgW2hhc2hDb2RlXQogIC8vLyBtZXRob2RzIHdvbid0IHdvcmsgb24gYWxsIG9iamVjdHMsIGJ1dCBvbmx5IG9uIHNvbWUgaW5zdGFuY2VzIG9mIEUsIHRoZQogIC8vLyBbaXNWYWxpZEtleV0gcHJlZGljYXRlIGNhbiBiZSB1c2VkIHRvIHJlc3RyaWN0IHRoZSBrZXlzIHRoYXQgdGhlIGZ1bmN0aW9ucwogIC8vLyBhcmUgYXBwbGllZCB0by4KICAvLy8gQW55IGtleSBmb3Igd2hpY2ggW2lzVmFsaWRLZXldIHJldHVybnMgZmFsc2UgaXMgYXV0b21hdGljYWxseSBhc3N1bWVkCiAgLy8vIHRvIG5vdCBiZSBpbiB0aGUgc2V0IHdoZW4gYXNraW5nIGBjb250YWluc2AuCiAgLy8vCiAgLy8vIElmIFtlcXVhbHNdIG9yIFtoYXNoQ29kZV0gYXJlIG9taXR0ZWQsIHRoZSBzZXQgdXNlcwogIC8vLyB0aGUgZWxlbWVudHMnIGludHJpbnNpYyBbT2JqZWN0Lj09XSBhbmQgW09iamVjdC5oYXNoQ29kZV0sCiAgLy8vIGFuZCBbaXNWYWxpZEtleV0gaXMgaWdub3JlZCBzaW5jZSB0aGVzZSBvcGVyYXRpb25zIGFyZSBhc3N1bWVkCiAgLy8vIHRvIHdvcmsgb24gYWxsIG9iamVjdHMuCiAgLy8vCiAgLy8vIElmIHlvdSBzdXBwbHkgb25lIG9mIFtlcXVhbHNdIGFuZCBbaGFzaENvZGVdLAogIC8vLyB5b3Ugc2hvdWxkIGdlbmVyYWxseSBhbHNvIHRvIHN1cHBseSB0aGUgb3RoZXIuCiAgLy8vCiAgLy8vIElmIHRoZSBzdXBwbGllZCBgZXF1YWxzYCBvciBgaGFzaENvZGVgIGZ1bmN0aW9ucyB3b24ndCB3b3JrIG9uIGFsbCBbRV0KICAvLy8gb2JqZWN0cywgYW5kIHRoZSBtYXAgd2lsbCBiZSB1c2VkIGluIGEgc2V0dGluZyB3aGVyZSBhIG5vbi1gRWAgb2JqZWN0CiAgLy8vIGlzIHBhc3NlZCB0bywgZS5nLiwgYGNvbnRhaW5zYCwgdGhlbiB0aGUgW2lzVmFsaWRLZXldIGZ1bmN0aW9uIHNob3VsZAogIC8vLyBhbHNvIGJlIHN1cHBsaWVkLgogIC8vLwogIC8vLyBJZiBbaXNWYWxpZEtleV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGVzdGluZyBpZiB0aGUgb2JqZWN0IGlzIGFuCiAgLy8vIFtFXSBpbnN0YW5jZS4gVGhhdCBtZWFucyB0aGF0OgogIC8vLwogIC8vLyAgICAgbmV3IExpbmtlZEhhc2hTZXQ8aW50PihlcXVhbHM6IChpbnQgZTEsIGludCBlMikgPT4gKGUxIC0gZTIpICUgNSA9PSAwLAogIC8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogKGludCBlKSA9PiBlICUgNSkKICAvLy8KICAvLy8gZG9lcyBub3QgbmVlZCBhbiBgaXNWYWxpZEtleWAgYXJndW1lbnQsIGJlY2F1c2UgaXQgZGVmYXVsdHMgdG8gb25seQogIC8vLyBhY2NlcHRpbmcgYGludGAgdmFsdWVzIHdoaWNoIGFyZSBhY2NlcHRlZCBieSBib3RoIGBlcXVhbHNgIGFuZCBgaGFzaENvZGVgLgogIC8vLwogIC8vLyBJZiBuZWl0aGVyIGBlcXVhbHNgLCBgaGFzaENvZGVgLCBub3IgYGlzVmFsaWRLZXlgIGlzIHByb3ZpZGVkLAogIC8vLyB0aGUgZGVmYXVsdCBgaXNWYWxpZEtleWAgaW5zdGVhZCBhY2NlcHRzIGFsbCB2YWx1ZXMuCiAgLy8vIFRoZSBkZWZhdWx0IGVxdWFsaXR5IGFuZCBoYXNoY29kZSBvcGVyYXRpb25zIGFyZSBhc3N1bWVkIHRvIHdvcmsgb24gYWxsCiAgLy8vIG9iamVjdHMuCiAgLy8vCiAgLy8vIExpa2V3aXNlLCBpZiBgZXF1YWxzYCBpcyBbaWRlbnRpY2FsXSwgYGhhc2hDb2RlYCBpcyBbaWRlbnRpdHlIYXNoQ29kZV0KICAvLy8gYW5kIGBpc1ZhbGlkS2V5YCBpcyBvbWl0dGVkLCB0aGUgcmVzdWx0aW5nIHNldCBpcyBpZGVudGl0eSBiYXNlZCwKICAvLy8gYW5kIHRoZSBgaXNWYWxpZEtleWAgZGVmYXVsdHMgdG8gYWNjZXB0aW5nIGFsbCBrZXlzLgogIC8vLyBTdWNoIGEgbWFwIGNhbiBiZSBjcmVhdGVkIGRpcmVjdGx5IHVzaW5nIFtMaW5rZWRIYXNoU2V0LmlkZW50aXR5XS4KICBleHRlcm5hbCBmYWN0b3J5IExpbmtlZEhhc2hTZXQoCiAgICAgIHtib29sIGVxdWFscyhFIGUxLCBFIGUyKSwKICAgICAgaW50IGhhc2hDb2RlKEUgZSksCiAgICAgIGJvb2wgaXNWYWxpZEtleShwb3RlbnRpYWxLZXkpfSk7CgogIC8vLyBDcmVhdGVzIGFuIGluc2VydGlvbi1vcmRlcmVkIGlkZW50aXR5LWJhc2VkIHNldC4KICAvLy8KICAvLy8gRWZmZWN0aXZlbHkgYSBzaG9ydGhhbmQgZm9yOgogIC8vLwogIC8vLyAgICAgbmV3IExpbmtlZEhhc2hTZXQ8RT4oZXF1YWxzOiBpZGVudGljYWwsCiAgLy8vICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoQ29kZTogaWRlbnRpdHlIYXNoQ29kZSkKICBleHRlcm5hbCBmYWN0b3J5IExpbmtlZEhhc2hTZXQuaWRlbnRpdHkoKTsKCiAgLy8vIENyZWF0ZSBhIGxpbmtlZCBoYXNoIHNldCBjb250YWluaW5nIGFsbCBbZWxlbWVudHNdLgogIC8vLwogIC8vLyBDcmVhdGVzIGEgbGlua2VkIGhhc2ggc2V0IGFzIGJ5IGBuZXcgTGlua2VkSGFzaFNldDxFPigpYCBhbmQgYWRkcyBlYWNoCiAgLy8vIGVsZW1lbnQgb2YgYGVsZW1lbnRzYCB0byB0aGlzIHNldCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgaXRlcmF0ZWQuCiAgLy8vCiAgLy8vIEFsbCB0aGUgW2VsZW1lbnRzXSBzaG91bGQgYmUgaW5zdGFuY2VzIG9mIFtFXS4KICAvLy8gVGhlIGBlbGVtZW50c2AgaXRlcmFibGUgaXRzZWxmIG1heSBoYXZlIGFueSBlbGVtZW50IHR5cGUsCiAgLy8vIHNvIHRoaXMgY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8gZG93bi1jYXN0IGEgYFNldGAsIGZvciBleGFtcGxlIGFzOgogIC8vLwogIC8vLyAgICAgU2V0PFN1cGVyVHlwZT4gc3VwZXJTZXQgPSAuLi47CiAgLy8vICAgICBJdGVyYWJsZTxTdXBlclR5cGU+IHRtcCA9IHN1cGVyU2V0LndoZXJlKChlKSA9PiBlIGlzIFN1YlR5cGUpOwogIC8vLyAgICAgU2V0PFN1YlR5cGU+IHN1YlNldCA9IG5ldyBMaW5rZWRIYXNoU2V0PFN1YlR5cGU+LmZyb20odG1wKTsKICBmYWN0b3J5IExpbmtlZEhhc2hTZXQuZnJvbShJdGVyYWJsZSBlbGVtZW50cykgewogICAgTGlua2VkSGFzaFNldDxFPiByZXN1bHQgPSBMaW5rZWRIYXNoU2V0PEU+KCk7CiAgICBmb3IgKGZpbmFsIGVsZW1lbnQgaW4gZWxlbWVudHMpIHsKICAgICAgcmVzdWx0LmFkZChlbGVtZW50KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gQ3JlYXRlIGEgbGlua2VkIGhhc2ggc2V0IGZyb20gW2VsZW1lbnRzXS4KICAvLy8KICAvLy8gQ3JlYXRlcyBhIGxpbmtlZCBoYXNoIHNldCBhcyBieSBgbmV3IExpbmtlZEhhc2hTZXQ8RT4oKWAgYW5kIGFkZHMgZWFjaAogIC8vLyBlbGVtZW50IG9mIGBlbGVtZW50c2AgdG8gdGhpcyBzZXQgaW4gdGhlIG9yZGVyIHRoZXkgYXJlIGl0ZXJhdGVkLgogIGZhY3RvcnkgTGlua2VkSGFzaFNldC5vZihJdGVyYWJsZTxFPiBlbGVtZW50cykgPT4KICAgICAgTGlua2VkSGFzaFNldDxFPigpLi5hZGRBbGwoZWxlbWVudHMpOwoKICAvLy8gRXhlY3V0ZXMgYSBmdW5jdGlvbiBvbiBlYWNoIGVsZW1lbnQgb2YgdGhlIHNldC4KICAvLy8KICAvLy8gVGhlIGVsZW1lbnRzIGFyZSBpdGVyYXRlZCBpbiBpbnNlcnRpb24gb3JkZXIuCiAgdm9pZCBmb3JFYWNoKHZvaWQgYWN0aW9uKEUgZWxlbWVudCkpOwoKICAvLy8gUHJvdmlkZXMgYW4gaXRlcmF0b3IgdGhhdCBpdGVyYXRlcyBvdmVyIHRoZSBlbGVtZW50cyBpbiBpbnNlcnRpb24gb3JkZXIuCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yOwp9CnoATk48ARkBQgRRQARHTUpKRAQpBD5PMTkxMwRMUCw0Ph8GS1FOURZMMwY6QUUeBjQ1Bk1MTBgGTSUGUT0GSlEGRTtODwZNSDtJIiAZJwE3BiMGMjstAToGTUgGNUBMBilJRjIyJhsGEwQBMAZNSDQsATYGNCgBTxwCASRkYXJ0OmNvbGxlY3Rpb24vbGlua2VkX2hhc2hfc2V0LmRhcnQ3b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbGxlY3Rpb24vbGlua2VkX2xpc3QuZGFydJ69Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKLy8vIEEgc3BlY2lhbGl6ZWQgZG91YmxlLWxpbmtlZCBsaXN0IG9mIGVsZW1lbnRzIHRoYXQgZXh0ZW5kcyBbTGlua2VkTGlzdEVudHJ5XS4KLy8vCi8vLyBUaGlzIGlzIG5vdCBhIGdlbmVyaWMgZGF0YSBzdHJ1Y3R1cmUuIEl0IG9ubHkgYWNjZXB0cyBlbGVtZW50cyB0aGF0IGV4dGVuZAovLy8gdGhlIFtMaW5rZWRMaXN0RW50cnldIGNsYXNzLiBTZWUgdGhlIFtRdWV1ZV0gaW1wbGVtZW50YXRpb25zIGZvciBnZW5lcmljCi8vLyBjb2xsZWN0aW9ucyB0aGF0IGFsbG93IGNvbnN0YW50IHRpbWUgYWRkaW5nIGFuZCByZW1vdmluZyBhdCB0aGUgZW5kcy4KLy8vCi8vLyBUaGlzIGlzIG5vdCBhIFtMaXN0XSBpbXBsZW1lbnRhdGlvbi4gRGVzcGl0ZSBpdHMgbmFtZSwgdGhpcyBjbGFzcyBkb2VzIG5vdAovLy8gaW1wbGVtZW50IHRoZSBbTGlzdF0gaW50ZXJmYWNlLiBJdCBkb2VzIG5vdCBhbGxvdyBjb25zdGFudCB0aW1lIGxvb2t1cCBieQovLy8gaW5kZXguCi8vLwovLy8gQmVjYXVzZSB0aGUgZWxlbWVudHMgdGhlbXNlbHZlcyBjb250YWluIHRoZSBsaW5rcyBvZiB0aGlzIGxpbmtlZCBsaXN0LAovLy8gZWFjaCBlbGVtZW50IGNhbiBiZSBpbiBvbmx5IG9uZSBsaXN0IGF0IGEgdGltZS4gVG8gYWRkIGFuIGVsZW1lbnQgdG8gYW5vdGhlcgovLy8gbGlzdCwgaXQgbXVzdCBmaXJzdCBiZSByZW1vdmVkIGZyb20gaXRzIGN1cnJlbnQgbGlzdCAoaWYgYW55KS4KLy8vCi8vLyBJbiByZXR1cm4sIGVhY2ggZWxlbWVudCBrbm93cyBpdHMgb3duIHBsYWNlIGluIHRoZSBsaW5rZWQgbGlzdCwgYXMgd2VsbCBhcwovLy8gd2hpY2ggbGlzdCBpdCBpcyBpbi4gVGhpcyBhbGxvd3MgY29uc3RhbnQgdGltZQovLy8gW0xpbmtlZExpc3RFbnRyeS5pbnNlcnRBZnRlcl0sIFtMaW5rZWRMaXN0RW50cnkuaW5zZXJ0QmVmb3JlXSBhbmQKLy8vIFtMaW5rZWRMaXN0RW50cnkudW5saW5rXSBvcGVyYXRpb25zIHdoZW4gYWxsIHlvdSBoYXZlIGlzIHRoZSBlbGVtZW50LgovLy8KLy8vIEEgYExpbmtlZExpc3RgIGFsc28gYWxsb3dzIGNvbnN0YW50IHRpbWUgYWRkaW5nIGFuZCByZW1vdmluZyBhdCBlaXRoZXIgZW5kLAovLy8gYW5kIGEgY29uc3RhbnQgdGltZSBsZW5ndGggZ2V0dGVyLgpjbGFzcyBMaW5rZWRMaXN0PEUgZXh0ZW5kcyBMaW5rZWRMaXN0RW50cnk8RT4+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGludCBfbW9kaWZpY2F0aW9uQ291bnQgPSAwOwogIGludCBfbGVuZ3RoID0gMDsKICBFIF9maXJzdDsKCiAgLy8vIENvbnN0cnVjdCBhIG5ldyBlbXB0eSBsaW5rZWQgbGlzdC4KICBMaW5rZWRMaXN0KCk7CgogIC8vLyBBZGQgW2VudHJ5XSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaW5rZWQgbGlzdC4KICB2b2lkIGFkZEZpcnN0KEUgZW50cnkpIHsKICAgIF9pbnNlcnRCZWZvcmUoX2ZpcnN0LCBlbnRyeSwgdXBkYXRlRmlyc3Q6IHRydWUpOwogICAgX2ZpcnN0ID0gZW50cnk7CiAgfQoKICAvLy8gQWRkIFtlbnRyeV0gdG8gdGhlIGVuZCBvZiB0aGUgbGlua2VkIGxpc3QuCiAgdm9pZCBhZGQoRSBlbnRyeSkgewogICAgX2luc2VydEJlZm9yZShfZmlyc3QsIGVudHJ5LCB1cGRhdGVGaXJzdDogZmFsc2UpOwogIH0KCiAgLy8vIEFkZCBbZW50cmllc10gdG8gdGhlIGVuZCBvZiB0aGUgbGlua2VkIGxpc3QuCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gZW50cmllcykgewogICAgZW50cmllcy5mb3JFYWNoKGFkZCk7CiAgfQoKICAvLy8gUmVtb3ZlIFtlbnRyeV0gZnJvbSB0aGUgbGlua2VkIGxpc3QuCiAgLy8vCiAgLy8vIFJldHVybnMgZmFsc2UgYW5kIGRvZXMgbm90aGluZyBpZiBbZW50cnldIGlzIG5vdCBpbiB0aGlzIGxpbmtlZCBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBgZW50cnkudW5saW5rKClgIGlmIHRoZSBlbnRyeSBpcyBpbiB0aGlzCiAgLy8vIGxpc3QuCiAgYm9vbCByZW1vdmUoRSBlbnRyeSkgewogICAgaWYgKGVudHJ5Ll9saXN0ICE9IHRoaXMpIHJldHVybiBmYWxzZTsKICAgIF91bmxpbmsoZW50cnkpOyAvLyBVbmxpbmsgd2lsbCBkZWNyZW1lbnQgbGVuZ3RoLgogICAgcmV0dXJuIHRydWU7CiAgfQoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gX0xpbmtlZExpc3RJdGVyYXRvcjxFPih0aGlzKTsKCiAgaW50IGdldCBsZW5ndGggPT4gX2xlbmd0aDsKCiAgLy8vIFJlbW92ZSBhbGwgZWxlbWVudHMgZnJvbSB0aGlzIGxpbmtlZCBsaXN0LgogIHZvaWQgY2xlYXIoKSB7CiAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICAgIGlmIChpc0VtcHR5KSByZXR1cm47CgogICAgRSBuZXh0ID0gX2ZpcnN0OwogICAgZG8gewogICAgICBFIGVudHJ5ID0gbmV4dDsKICAgICAgbmV4dCA9IGVudHJ5Ll9uZXh0OwogICAgICBlbnRyeS5fbmV4dCA9IGVudHJ5Ll9wcmV2aW91cyA9IGVudHJ5Ll9saXN0ID0gbnVsbDsKICAgIH0gd2hpbGUgKCFpZGVudGljYWwobmV4dCwgX2ZpcnN0KSk7CgogICAgX2ZpcnN0ID0gbnVsbDsKICAgIF9sZW5ndGggPSAwOwogIH0KCiAgRSBnZXQgZmlyc3QgewogICAgaWYgKGlzRW1wdHkpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcignTm8gc3VjaCBlbGVtZW50Jyk7CiAgICB9CiAgICByZXR1cm4gX2ZpcnN0OwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBpZiAoaXNFbXB0eSkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCdObyBzdWNoIGVsZW1lbnQnKTsKICAgIH0KICAgIHJldHVybiBfZmlyc3QuX3ByZXZpb3VzOwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIGlmIChpc0VtcHR5KSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoJ05vIHN1Y2ggZWxlbWVudCcpOwogICAgfQogICAgaWYgKF9sZW5ndGggPiAxKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoJ1RvbyBtYW55IGVsZW1lbnRzJyk7CiAgICB9CiAgICByZXR1cm4gX2ZpcnN0OwogIH0KCiAgLy8vIENhbGwgW2FjdGlvbl0gd2l0aCBlYWNoIGVudHJ5IGluIHRoaXMgbGlua2VkIGxpc3QuCiAgLy8vCiAgLy8vIEl0J3MgYW4gZXJyb3IgaWYgW2FjdGlvbl0gbW9kaWZ5IHRoZSBsaW5rZWQgbGlzdC4KICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oRSBlbnRyeSkpIHsKICAgIGludCBtb2RpZmljYXRpb25Db3VudCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIGlmIChpc0VtcHR5KSByZXR1cm47CgogICAgRSBjdXJyZW50ID0gX2ZpcnN0OwogICAgZG8gewogICAgICBhY3Rpb24oY3VycmVudCk7CiAgICAgIGlmIChtb2RpZmljYXRpb25Db3VudCAhPSBfbW9kaWZpY2F0aW9uQ291bnQpIHsKICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgICAgY3VycmVudCA9IGN1cnJlbnQuX25leHQ7CiAgICB9IHdoaWxlICghaWRlbnRpY2FsKGN1cnJlbnQsIF9maXJzdCkpOwogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfbGVuZ3RoID09IDA7CgogIC8vLyBJbnNlcnRzIFtuZXdFbnRyeV0gYXMgbGFzdCBlbnRyeSBvZiB0aGUgbGlzdC4KICAvLy8KICAvLy8gSWYgW3VwZGF0ZUZpcnN0XSBpcyB0cnVlIGFuZCBbZW50cnldIGlzIHRoZSBmaXJzdCBlbnRyeSBpbiB0aGUgbGlzdCwKICAvLy8gdXBkYXRlcyB0aGUgW19maXJzdF0gZmllbGQgdG8gcG9pbnQgdG8gdGhlIFtuZXdFbnRyeV0gYXMgZmlyc3QgZW50cnkuCiAgdm9pZCBfaW5zZXJ0QmVmb3JlKEUgZW50cnksIEUgbmV3RW50cnksIHtib29sIHVwZGF0ZUZpcnN0fSkgewogICAgaWYgKG5ld0VudHJ5Lmxpc3QgIT0gbnVsbCkgewogICAgICB0aHJvdyBTdGF0ZUVycm9yKCdMaW5rZWRMaXN0RW50cnkgaXMgYWxyZWFkeSBpbiBhIExpbmtlZExpc3QnKTsKICAgIH0KICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwoKICAgIG5ld0VudHJ5Ll9saXN0ID0gdGhpczsKICAgIGlmIChpc0VtcHR5KSB7CiAgICAgIGFzc2VydChlbnRyeSA9PSBudWxsKTsKICAgICAgbmV3RW50cnkuX3ByZXZpb3VzID0gbmV3RW50cnkuX25leHQgPSBuZXdFbnRyeTsKICAgICAgX2ZpcnN0ID0gbmV3RW50cnk7CiAgICAgIF9sZW5ndGgrKzsKICAgICAgcmV0dXJuOwogICAgfQogICAgRSBwcmVkZWNlc3NvciA9IGVudHJ5Ll9wcmV2aW91czsKICAgIEUgc3VjY2Vzc29yID0gZW50cnk7CiAgICBuZXdFbnRyeS5fcHJldmlvdXMgPSBwcmVkZWNlc3NvcjsKICAgIG5ld0VudHJ5Ll9uZXh0ID0gc3VjY2Vzc29yOwogICAgcHJlZGVjZXNzb3IuX25leHQgPSBuZXdFbnRyeTsKICAgIHN1Y2Nlc3Nvci5fcHJldmlvdXMgPSBuZXdFbnRyeTsKICAgIGlmICh1cGRhdGVGaXJzdCAmJiBpZGVudGljYWwoZW50cnksIF9maXJzdCkpIHsKICAgICAgX2ZpcnN0ID0gbmV3RW50cnk7CiAgICB9CiAgICBfbGVuZ3RoKys7CiAgfQoKICB2b2lkIF91bmxpbmsoRSBlbnRyeSkgewogICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgICBlbnRyeS5fbmV4dC5fcHJldmlvdXMgPSBlbnRyeS5fcHJldmlvdXM7CiAgICBFIG5leHQgPSBlbnRyeS5fcHJldmlvdXMuX25leHQgPSBlbnRyeS5fbmV4dDsKICAgIF9sZW5ndGgtLTsKICAgIGVudHJ5Ll9saXN0ID0gZW50cnkuX25leHQgPSBlbnRyeS5fcHJldmlvdXMgPSBudWxsOwogICAgaWYgKGlzRW1wdHkpIHsKICAgICAgX2ZpcnN0ID0gbnVsbDsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKGVudHJ5LCBfZmlyc3QpKSB7CiAgICAgIF9maXJzdCA9IG5leHQ7CiAgICB9CiAgfQp9CgpjbGFzcyBfTGlua2VkTGlzdEl0ZXJhdG9yPEUgZXh0ZW5kcyBMaW5rZWRMaXN0RW50cnk8RT4+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIExpbmtlZExpc3Q8RT4gX2xpc3Q7CiAgZmluYWwgaW50IF9tb2RpZmljYXRpb25Db3VudDsKICBFIF9jdXJyZW50OwogIExpbmtlZExpc3RFbnRyeTxFPiBfbmV4dDsKICBib29sIF92aXNpdGVkRmlyc3Q7CgogIF9MaW5rZWRMaXN0SXRlcmF0b3IoTGlua2VkTGlzdDxFPiBsaXN0KQogICAgICA6IF9saXN0ID0gbGlzdCwKICAgICAgICBfbW9kaWZpY2F0aW9uQ291bnQgPSBsaXN0Ll9tb2RpZmljYXRpb25Db3VudCwKICAgICAgICBfbmV4dCA9IGxpc3QuX2ZpcnN0LAogICAgICAgIF92aXNpdGVkRmlyc3QgPSBmYWxzZTsKCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfbW9kaWZpY2F0aW9uQ291bnQgIT0gX2xpc3QuX21vZGlmaWNhdGlvbkNvdW50KSB7CiAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgIH0KICAgIGlmIChfbGlzdC5pc0VtcHR5IHx8IChfdmlzaXRlZEZpcnN0ICYmIGlkZW50aWNhbChfbmV4dCwgX2xpc3QuZmlyc3QpKSkgewogICAgICBfY3VycmVudCA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIF92aXNpdGVkRmlyc3QgPSB0cnVlOwogICAgX2N1cnJlbnQgPSBfbmV4dDsKICAgIF9uZXh0ID0gX25leHQuX25leHQ7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCi8vLyBBbiBvYmplY3QgdGhhdCBjYW4gYmUgYW4gZWxlbWVudCBpbiBhIFtMaW5rZWRMaXN0XS4KLy8vCi8vLyBBbGwgZWxlbWVudHMgb2YgYSBgTGlua2VkTGlzdGAgbXVzdCBleHRlbmQgdGhpcyBjbGFzcy4KLy8vIFRoZSBjbGFzcyBwcm92aWRlcyB0aGUgaW50ZXJuYWwgbGlua3MgdGhhdCBsaW5rIGVsZW1lbnRzIHRvZ2V0aGVyCi8vLyBpbiB0aGUgYExpbmtlZExpc3RgLCBhbmQgYSByZWZlcmVuY2UgdG8gdGhlIGxpbmtlZCBsaXN0IGl0c2VsZgovLy8gdGhhdCBhbiBlbGVtZW50IGlzIGN1cnJlbnRseSBwYXJ0IG9mLgovLy8KLy8vIEFuIGVudHJ5IGNhbiBiZSBpbiBhdCBtb3N0IG9uZSBsaW5rZWQgbGlzdCBhdCBhIHRpbWUuCi8vLyBXaGlsZSBhbiBlbnRyeSBpcyBpbiBhIGxpbmtlZCBsaXN0LCB0aGUgW2xpc3RdIHByb3BlcnR5IHBvaW50cyB0byB0aGF0Ci8vLyBsaW5rZWQgbGlzdCwgYW5kIG90aGVyd2lzZSB0aGUgYGxpc3RgIHByb3BlcnR5IGlzIGBudWxsYC4KLy8vCi8vLyBXaGVuIGNyZWF0ZWQsIGFuIGVudHJ5IGlzIG5vdCBpbiBhbnkgbGlua2VkIGxpc3QuCmFic3RyYWN0IGNsYXNzIExpbmtlZExpc3RFbnRyeTxFIGV4dGVuZHMgTGlua2VkTGlzdEVudHJ5PEU+PiB7CiAgTGlua2VkTGlzdDxFPiBfbGlzdDsKICBFIF9uZXh0OwogIEUgX3ByZXZpb3VzOwoKICAvLy8gR2V0IHRoZSBsaW5rZWQgbGlzdCBjb250YWluaW5nIHRoaXMgZWxlbWVudC4KICAvLy8KICAvLy8gUmV0dXJucyBgbnVsbGAgaWYgdGhpcyBlbnRyeSBpcyBub3QgY3VycmVudGx5IGluIGFueSBsaXN0LgogIExpbmtlZExpc3Q8RT4gZ2V0IGxpc3QgPT4gX2xpc3Q7CgogIC8vLyBVbmxpbmsgdGhlIGVsZW1lbnQgZnJvbSBpdHMgbGlua2VkIGxpc3QuCiAgLy8vCiAgLy8vIFRoZSBlbnRyeSBtdXN0IGN1cnJlbnRseSBiZSBpbiBhIGxpbmtlZCBsaXN0IHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgogIHZvaWQgdW5saW5rKCkgewogICAgX2xpc3QuX3VubGluayh0aGlzKTsKICB9CgogIC8vLyBSZXR1cm4gdGhlIHN1Y2Nlc3NvciBvZiB0aGlzIGVsZW1lbnQgaW4gaXRzIGxpbmtlZCBsaXN0LgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGVyZSBpcyBubyBzdWNjZXNzb3IgaW4gdGhlIGxpbmtlZCBsaXN0LCBvciBpZiB0aGlzCiAgLy8vIGVudHJ5IGlzIG5vdCBjdXJyZW50bHkgaW4gYW55IGxpc3QuCiAgRSBnZXQgbmV4dCB7CiAgICBpZiAoX2xpc3QgPT0gbnVsbCB8fCBpZGVudGljYWwoX2xpc3QuZmlyc3QsIF9uZXh0KSkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX25leHQ7CiAgfQoKICAvLy8gUmV0dXJuIHRoZSBwcmVkZWNlc3NvciBvZiB0aGlzIGVsZW1lbnQgaW4gaXRzIGxpbmtlZCBsaXN0LgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiB0aGVyZSBpcyBubyBwcmVkZWNlc3NvciBpbiB0aGUgbGlua2VkIGxpc3QsIG9yIGlmIHRoaXMKICAvLy8gZW50cnkgaXMgbm90IGN1cnJlbnRseSBpbiBhbnkgbGlzdC4KICBFIGdldCBwcmV2aW91cyB7CiAgICBpZiAoX2xpc3QgPT0gbnVsbCB8fCBpZGVudGljYWwodGhpcywgX2xpc3QuZmlyc3QpKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBfcHJldmlvdXM7CiAgfQoKICAvLy8gSW5zZXJ0IGFuIGVsZW1lbnQgYWZ0ZXIgdGhpcyBlbGVtZW50IGluIHRoaXMgZWxlbWVudCdzIGxpbmtlZCBsaXN0LgogIC8vLwogIC8vLyBUaGlzIGVudHJ5IG11c3QgYmUgaW4gYSBsaW5rZWQgbGlzdCB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4KICAvLy8gVGhlIFtlbnRyeV0gbXVzdCBub3QgYmUgaW4gYSBsaW5rZWQgbGlzdC4KICB2b2lkIGluc2VydEFmdGVyKEUgZW50cnkpIHsKICAgIF9saXN0Ll9pbnNlcnRCZWZvcmUoX25leHQsIGVudHJ5LCB1cGRhdGVGaXJzdDogZmFsc2UpOwogIH0KCiAgLy8vIEluc2VydCBhbiBlbGVtZW50IGJlZm9yZSB0aGlzIGVsZW1lbnQgaW4gdGhpcyBlbGVtZW50J3MgbGlua2VkIGxpc3QuCiAgLy8vCiAgLy8vIFRoaXMgZW50cnkgbXVzdCBiZSBpbiBhIGxpbmtlZCBsaXN0IHdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLgogIC8vLyBUaGUgW2VudHJ5XSBtdXN0IG5vdCBiZSBpbiBhIGxpbmtlZCBsaXN0LgogIHZvaWQgaW5zZXJ0QmVmb3JlKEUgZW50cnkpIHsKICAgIF9saXN0Ll9pbnNlcnRCZWZvcmUodGhpcywgZW50cnksIHVwZGF0ZUZpcnN0OiB0cnVlKTsKICB9Cn0KgQkATk48ARkBUQRPTUoET04LBEtRQwRPM0ZKBFAnRR4TDAEpEAE3GzUUBAExFjYEATMlGgQBKwZMBk0MGSs1EQQBPAEdATERGhkBFQkWGjooARMRBAEQEysGEwQBDxMrBh0EARETKwYXLQYTBAE5BjgnMBkBGAkXNTEIHysEASQBNAZLTEAhRgYaARsTHTYZEQ4GJRkmICIkMxkGDwQBGhotMg84ExUrFQYEAgFRHSAOHBYBKhY2HR8BHQEUOi8GTRcUBhoWGREEAgE4BDtGQyoEOks+BDY/FwsPATMGQSMBLwZPEhkEAT8GTSoPRRIEAUEGTyoTRBYEAUoGRjAeOwQBSwZGMB85BAIBIGRhcnQ6Y29sbGVjdGlvbi9saW5rZWRfbGlzdC5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb2xsZWN0aW9uL3F1ZXVlLmRhcnTAAGqFLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb2xsZWN0aW9uOwoKLy8vIEEgW1F1ZXVlXSBpcyBhIGNvbGxlY3Rpb24gdGhhdCBjYW4gYmUgbWFuaXB1bGF0ZWQgYXQgYm90aCBlbmRzLiBPbmUKLy8vIGNhbiBpdGVyYXRlIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGEgcXVldWUgdGhyb3VnaCBbZm9yRWFjaF0gb3Igd2l0aAovLy8gYW4gW0l0ZXJhdG9yXS4KLy8vCi8vLyBJdCBpcyBnZW5lcmFsbHkgbm90IGFsbG93ZWQgdG8gbW9kaWZ5IHRoZSBxdWV1ZSAoYWRkIG9yIHJlbW92ZSBlbnRyaWVzKQovLy8gd2hpbGUgYW4gb3BlcmF0aW9uIG9uIHRoZSBxdWV1ZSBpcyBiZWluZyBwZXJmb3JtZWQsIGZvciBleGFtcGxlIGR1cmluZyBhCi8vLyBjYWxsIHRvIFtmb3JFYWNoXS4KLy8vIE1vZGlmeWluZyB0aGUgcXVldWUgd2hpbGUgaXQgaXMgYmVpbmcgaXRlcmF0ZWQgd2lsbCBtb3N0IGxpa2VseSBicmVhayB0aGUKLy8vIGl0ZXJhdGlvbi4KLy8vIFRoaXMgZ29lcyBib3RoIGZvciB1c2luZyB0aGUgW2l0ZXJhdG9yXSBkaXJlY3RseSwgb3IgZm9yIGl0ZXJhdGluZyBhbgovLy8gYEl0ZXJhYmxlYCByZXR1cm5lZCBieSBhIG1ldGhvZCBsaWtlIFttYXBdIG9yIFt3aGVyZV0uCmFic3RyYWN0IGNsYXNzIFF1ZXVlPEU+IGltcGxlbWVudHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gewogIC8vLyBDcmVhdGVzIGEgcXVldWUuCiAgZmFjdG9yeSBRdWV1ZSgpID0gTGlzdFF1ZXVlPEU+OwoKICAvLy8gQ3JlYXRlcyBhIHF1ZXVlIGNvbnRhaW5pbmcgYWxsIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIFRoZSBlbGVtZW50IG9yZGVyIGluIHRoZSBxdWV1ZSBpcyBhcyBpZiB0aGUgZWxlbWVudHMgd2VyZSBhZGRlZCB1c2luZwogIC8vLyBbYWRkTGFzdF0gaW4gdGhlIG9yZGVyIHByb3ZpZGVkIGJ5IFtlbGVtZW50cy5pdGVyYXRvcl0uCiAgLy8vCiAgLy8vIEFsbCB0aGUgW2VsZW1lbnRzXSBzaG91bGQgYmUgaW5zdGFuY2VzIG9mIFtFXS4KICAvLy8gVGhlIGBlbGVtZW50c2AgaXRlcmFibGUgaXRzZWxmIG1heSBoYXZlIGFueSBlbGVtZW50IHR5cGUsIHNvIHRoaXMKICAvLy8gY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8gZG93bi1jYXN0IGEgYFF1ZXVlYCwgZm9yIGV4YW1wbGUgYXM6CiAgLy8vIGBgYGRhcnQKICAvLy8gUXVldWU8U3VwZXJUeXBlPiBzdXBlclF1ZXVlID0gLi4uOwogIC8vLyBRdWV1ZTxTdWJUeXBlPiBzdWJRdWV1ZSA9CiAgLy8vICAgICBuZXcgUXVldWU8U3ViVHlwZT4uZnJvbShzdXBlclNldC53aGVyZVR5cGU8U3ViVHlwZT4oKSk7CiAgLy8vIGBgYAogIGZhY3RvcnkgUXVldWUuZnJvbShJdGVyYWJsZSBlbGVtZW50cykgPSBMaXN0UXVldWU8RT4uZnJvbTsKCiAgLy8vIENyZWF0ZXMgYSBxdWV1ZSBmcm9tIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIFRoZSBlbGVtZW50IG9yZGVyIGluIHRoZSBxdWV1ZSBpcyBhcyBpZiB0aGUgZWxlbWVudHMgd2VyZSBhZGRlZCB1c2luZwogIC8vLyBbYWRkTGFzdF0gaW4gdGhlIG9yZGVyIHByb3ZpZGVkIGJ5IFtlbGVtZW50cy5pdGVyYXRvcl0uCiAgZmFjdG9yeSBRdWV1ZS5vZihJdGVyYWJsZTxFPiBlbGVtZW50cykgPSBMaXN0UXVldWU8RT4ub2Y7CgogIC8vLyBBZGFwdHMgW3NvdXJjZV0gdG8gYmUgYSBgUXVldWU8VD5gLgogIC8vLwogIC8vLyBBbnkgdGltZSB0aGUgcXVldWUgd291bGQgcHJvZHVjZSBhbiBlbGVtZW50IHRoYXQgaXMgbm90IGEgW1RdLAogIC8vLyB0aGUgZWxlbWVudCBhY2Nlc3Mgd2lsbCB0aHJvdy4KICAvLy8KICAvLy8gQW55IHRpbWUgYSBbVF0gdmFsdWUgaXMgYXR0ZW1wdGVkIHN0b3JlZCBpbnRvIHRoZSBhZGFwdGVkIHF1ZXVlLAogIC8vLyB0aGUgc3RvcmUgd2lsbCB0aHJvdyB1bmxlc3MgdGhlIHZhbHVlIGlzIGFsc28gYW4gaW5zdGFuY2Ugb2YgW1NdLgogIC8vLwogIC8vLyBJZiBhbGwgYWNjZXNzZWQgZWxlbWVudHMgb2YgW3NvdXJjZV0gYXJlIGFjdHVhbGx5IGluc3RhbmNlcyBvZiBbVF0sCiAgLy8vIGFuZCBpZiBhbGwgZWxlbWVudHMgc3RvcmVkIGludG8gdGhlIHJldHVybmVkIHF1ZXVlIGFyZSBhY3R1YWxseSBpbnN0YW5jZQogIC8vLyBvZiBbU10sCiAgLy8vIHRoZW4gdGhlIHJldHVybmVkIHF1ZXVlIGNhbiBiZSB1c2VkIGFzIGEgYFF1ZXVlPFQ+YC4KICBzdGF0aWMgUXVldWU8VD4gY2FzdEZyb208UywgVD4oUXVldWU8Uz4gc291cmNlKSA9PiBDYXN0UXVldWU8UywgVD4oc291cmNlKTsKCiAgLy8vIFByb3ZpZGVzIGEgdmlldyBvZiB0aGlzIHF1ZXVlIGFzIGEgcXVldWUgb2YgW1JdIGluc3RhbmNlcywgaWYgbmVjZXNzYXJ5LgogIC8vLwogIC8vLyBJZiB0aGlzIHF1ZXVlIGNvbnRhaW5zIG9ubHkgaW5zdGFuY2VzIG9mIFtSXSwgYWxsIHJlYWQgb3BlcmF0aW9ucwogIC8vLyB3aWxsIHdvcmsgY29ycmVjdGx5LiBJZiBhbnkgb3BlcmF0aW9uIHRyaWVzIHRvIGFjY2VzcyBhbiBlbGVtZW50CiAgLy8vIHRoYXQgaXMgbm90IGFuIGluc3RhbmNlIG9mIFtSXSwgdGhlIGFjY2VzcyB3aWxsIHRocm93IGluc3RlYWQuCiAgLy8vCiAgLy8vIEVsZW1lbnRzIGFkZGVkIHRvIHRoZSBxdWV1ZSAoZS5nLiwgYnkgdXNpbmcgW2FkZEZpcnN0XSBvciBbYWRkQWxsXSkKICAvLy8gbXVzdCBiZSBpbnN0YW5jZSBvZiBbUl0gdG8gYmUgdmFsaWQgYXJndW1lbnRzIHRvIHRoZSBhZGRpbmcgZnVuY3Rpb24sCiAgLy8vIGFuZCB0aGV5IG11c3QgYmUgaW5zdGFuY2VzIG9mIFtFXSBhcyB3ZWxsIHRvIGJlIGFjY2VwdGVkIGJ5CiAgLy8vIHRoaXMgcXVldWUgYXMgd2VsbC4KICBRdWV1ZTxSPiBjYXN0PFI+KCk7CgogIC8vLyBSZW1vdmVzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoaXMgcXVldWUuCiAgLy8vCiAgLy8vIFRoZSBxdWV1ZSBtdXN0IG5vdCBiZSBlbXB0eSB3aGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZC4KICBFIHJlbW92ZUZpcnN0KCk7CgogIC8vLyBSZW1vdmVzIGFuZCByZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBUaGUgcXVldWUgbXVzdCBub3QgYmUgZW1wdHkgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQuCiAgRSByZW1vdmVMYXN0KCk7CgogIC8vLyBBZGRzIFt2YWx1ZV0gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcXVldWUuCiAgdm9pZCBhZGRGaXJzdChFIHZhbHVlKTsKCiAgLy8vIEFkZHMgW3ZhbHVlXSBhdCB0aGUgZW5kIG9mIHRoZSBxdWV1ZS4KICB2b2lkIGFkZExhc3QoRSB2YWx1ZSk7CgogIC8vLyBBZGRzIFt2YWx1ZV0gYXQgdGhlIGVuZCBvZiB0aGUgcXVldWUuCiAgdm9pZCBhZGQoRSB2YWx1ZSk7CgogIC8vLyBSZW1vdmUgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgW3ZhbHVlXSBmcm9tIHRoZSBxdWV1ZS4KICAvLy8KICAvLy8gUmV0dXJucyBgdHJ1ZWAgaWYgYSB2YWx1ZSB3YXMgcmVtb3ZlZCwgb3IgYGZhbHNlYCBpZiB0aGUgcXVldWUKICAvLy8gY29udGFpbmVkIG5vIGVsZW1lbnQgZXF1YWwgdG8gW3ZhbHVlXS4KICBib29sIHJlbW92ZShPYmplY3QgdmFsdWUpOwoKICAvLy8gQWRkcyBhbGwgZWxlbWVudHMgb2YgW2l0ZXJhYmxlXSBhdCB0aGUgZW5kIG9mIHRoZSBxdWV1ZS4gVGhlCiAgLy8vIGxlbmd0aCBvZiB0aGUgcXVldWUgaXMgZXh0ZW5kZWQgYnkgdGhlIGxlbmd0aCBvZiBbaXRlcmFibGVdLgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKTsKCiAgLy8vIFJlbW92ZXMgYWxsIGVsZW1lbnRzIG1hdGNoZWQgYnkgW3Rlc3RdIGZyb20gdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBUaGUgYHRlc3RgIGZ1bmN0aW9uIG11c3Qgbm90IHRocm93IG9yIG1vZGlmeSB0aGUgcXVldWUuCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSk7CgogIC8vLyBSZW1vdmVzIGFsbCBlbGVtZW50cyBub3QgbWF0Y2hlZCBieSBbdGVzdF0gZnJvbSB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIFRoZSBgdGVzdGAgZnVuY3Rpb24gbXVzdCBub3QgdGhyb3cgb3IgbW9kaWZ5IHRoZSBxdWV1ZS4KICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKTsKCiAgLy8vIFJlbW92ZXMgYWxsIGVsZW1lbnRzIGluIHRoZSBxdWV1ZS4gVGhlIHNpemUgb2YgdGhlIHF1ZXVlIGJlY29tZXMgemVyby4KICB2b2lkIGNsZWFyKCk7Cn0KCmNsYXNzIF9Eb3VibGVMaW5rPExpbmsgZXh0ZW5kcyBfRG91YmxlTGluazxMaW5rPj4gewogIExpbmsgX3ByZXZpb3VzTGluazsKICBMaW5rIF9uZXh0TGluazsKCiAgdm9pZCBfbGluayhMaW5rIHByZXZpb3VzLCBMaW5rIG5leHQpIHsKICAgIF9uZXh0TGluayA9IG5leHQ7CiAgICBfcHJldmlvdXNMaW5rID0gcHJldmlvdXM7CiAgICBpZiAocHJldmlvdXMgIT0gbnVsbCkgcHJldmlvdXMuX25leHRMaW5rID0gdGhpczsKICAgIGlmIChuZXh0ICE9IG51bGwpIG5leHQuX3ByZXZpb3VzTGluayA9IHRoaXM7CiAgfQoKICB2b2lkIF91bmxpbmsoKSB7CiAgICBpZiAoX3ByZXZpb3VzTGluayAhPSBudWxsKSBfcHJldmlvdXNMaW5rLl9uZXh0TGluayA9IF9uZXh0TGluazsKICAgIGlmIChfbmV4dExpbmsgIT0gbnVsbCkgX25leHRMaW5rLl9wcmV2aW91c0xpbmsgPSBfcHJldmlvdXNMaW5rOwogICAgX25leHRMaW5rID0gbnVsbDsKICAgIF9wcmV2aW91c0xpbmsgPSBudWxsOwogIH0KfQoKLy8vIEFuIGVudHJ5IGluIGEgZG91Ymx5IGxpbmtlZCBsaXN0LiBJdCBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIG5leHQKLy8vIGVudHJ5LCB0aGUgcHJldmlvdXMgZW50cnksIGFuZCB0aGUgYm94ZWQgZWxlbWVudC4KY2xhc3MgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBleHRlbmRzIF9Eb3VibGVMaW5rPERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4+IHsKICAvLy8gVGhlIGVsZW1lbnQgaW4gdGhlIHF1ZXVlLgogIEUgZWxlbWVudDsKCiAgRG91YmxlTGlua2VkUXVldWVFbnRyeSh0aGlzLmVsZW1lbnQpOwoKICAvLy8gQXBwZW5kcyB0aGUgZ2l2ZW4gW2VdIGFzIGVudHJ5IGp1c3QgYWZ0ZXIgdGhpcyBlbnRyeS4KICB2b2lkIGFwcGVuZChFIGUpIHsKICAgIERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4oZSkuX2xpbmsodGhpcywgX25leHRMaW5rKTsKICB9CgogIC8vLyBQcmVwZW5kcyB0aGUgZ2l2ZW4gW2VdIGFzIGVudHJ5IGp1c3QgYmVmb3JlIHRoaXMgZW50cnkuCiAgdm9pZCBwcmVwZW5kKEUgZSkgewogICAgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPihlKS5fbGluayhfcHJldmlvdXNMaW5rLCB0aGlzKTsKICB9CgogIEUgcmVtb3ZlKCkgewogICAgX3VubGluaygpOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgcHJldmlvdXMgZW50cnkgb3IgYG51bGxgIGlmIHRoZXJlIGlzIG5vbmUuCiAgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBwcmV2aW91c0VudHJ5KCkgPT4gX3ByZXZpb3VzTGluazsKCiAgLy8vIFJldHVybnMgdGhlIG5leHQgZW50cnkgb3IgYG51bGxgIGlmIHRoZXJlIGlzIG5vbmUuCiAgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBuZXh0RW50cnkoKSA9PiBfbmV4dExpbms7Cn0KCi8vLyBJbnRlcmZhY2UgZm9yIHRoZSBsaW5rIGNsYXNzZXMgdXNlZCBieSBbRG91YmxlTGlua2VkUXVldWVdLgovLy8KLy8vIEJvdGggdGhlIFtfRG91YmxlTGlua2VkUXVldWVFbGVtZW50XSBhbmQgW19Eb3VibGVMaW5rZWRRdWV1ZVNlbnRpbmVsXQovLy8gaW1wbGVtZW50IHRoaXMgaW50ZXJmYWNlLgovLy8gVGhlIGVudHJ5IGNvbnRhaW5zIGEgbGluayBiYWNrIHRvIHRoZSBxdWV1ZSwgc28gY2FsbGluZyBgYXBwZW5kYAovLy8gb3IgYHByZXBlbmRgIGNhbiBjb3JyZWN0bHkgdXBkYXRlIHRoZSBlbGVtZW50IGNvdW50LgphYnN0cmFjdCBjbGFzcyBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBleHRlbmRzIERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gewogIERvdWJsZUxpbmtlZFF1ZXVlPEU+IF9xdWV1ZTsKICBfRG91YmxlTGlua2VkUXVldWVFbnRyeShFIGVsZW1lbnQsIHRoaXMuX3F1ZXVlKSA6IHN1cGVyKGVsZW1lbnQpOwoKICBEb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IF9hc05vblNlbnRpbmVsRW50cnkoKTsKCiAgdm9pZCBfYXBwZW5kKEUgZSkgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRWxlbWVudDxFPihlLCBfcXVldWUpLl9saW5rKHRoaXMsIF9uZXh0TGluayk7CiAgfQoKICB2b2lkIF9wcmVwZW5kKEUgZSkgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRWxlbWVudDxFPihlLCBfcXVldWUpLl9saW5rKF9wcmV2aW91c0xpbmssIHRoaXMpOwogIH0KCiAgRSBfcmVtb3ZlKCk7CgogIEUgZ2V0IF9lbGVtZW50ID0+IGVsZW1lbnQ7CgogIERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gbmV4dEVudHJ5KCkgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZW50cnkgPSBfbmV4dExpbms7CiAgICByZXR1cm4gZW50cnkuX2FzTm9uU2VudGluZWxFbnRyeSgpOwogIH0KCiAgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBwcmV2aW91c0VudHJ5KCkgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZW50cnkgPSBfcHJldmlvdXNMaW5rOwogICAgcmV0dXJuIGVudHJ5Ll9hc05vblNlbnRpbmVsRW50cnkoKTsKICB9Cn0KCi8vLyBUaGUgYWN0dWFsIGVudHJ5IHR5cGUgdXNlZCBieSB0aGUgW0RvdWJsZUxpbmtlZFF1ZXVlXS4KLy8vCi8vLyBUaGUgZW50cnkgY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIHF1ZXVlLCBhbGxvd2luZwovLy8gW2FwcGVuZF0vW3ByZXBlbmRdIHRvIHVwZGF0ZSB0aGUgbGlzdCBsZW5ndGguCmNsYXNzIF9Eb3VibGVMaW5rZWRRdWV1ZUVsZW1lbnQ8RT4gZXh0ZW5kcyBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiB7CiAgX0RvdWJsZUxpbmtlZFF1ZXVlRWxlbWVudChFIGVsZW1lbnQsIERvdWJsZUxpbmtlZFF1ZXVlPEU+IHF1ZXVlKQogICAgICA6IHN1cGVyKGVsZW1lbnQsIHF1ZXVlKTsKCiAgdm9pZCBhcHBlbmQoRSBlKSB7CiAgICBfYXBwZW5kKGUpOwogICAgaWYgKF9xdWV1ZSAhPSBudWxsKSBfcXVldWUuX2VsZW1lbnRDb3VudCsrOwogIH0KCiAgdm9pZCBwcmVwZW5kKEUgZSkgewogICAgX3ByZXBlbmQoZSk7CiAgICBpZiAoX3F1ZXVlICE9IG51bGwpIF9xdWV1ZS5fZWxlbWVudENvdW50Kys7CiAgfQoKICBFIF9yZW1vdmUoKSB7CiAgICBfcXVldWUgPSBudWxsOwogICAgX3VubGluaygpOwogICAgcmV0dXJuIGVsZW1lbnQ7CiAgfQoKICBFIHJlbW92ZSgpIHsKICAgIGlmIChfcXVldWUgIT0gbnVsbCkgX3F1ZXVlLl9lbGVtZW50Q291bnQtLTsKICAgIHJldHVybiBfcmVtb3ZlKCk7CiAgfQoKICBfRG91YmxlTGlua2VkUXVldWVFbGVtZW50PEU+IF9hc05vblNlbnRpbmVsRW50cnkoKSB7CiAgICByZXR1cm4gdGhpczsKICB9Cn0KCi8vLyBBIHNlbnRpbmVsIGluIGEgZG91YmxlIGxpbmtlZCBsaXN0IGlzIHVzZWQgdG8gbWFuaXB1bGF0ZSB0aGUgbGlzdAovLy8gYXQgYm90aCBlbmRzLgovLy8gQSBkb3VibGUgbGlua2VkIGxpc3QgaGFzIGV4YWN0bHkgb25lIHNlbnRpbmVsLAovLy8gd2hpY2ggaXMgdGhlIG9ubHkgZW50cnkgd2hlbiB0aGUgbGlzdCBpcyBjb25zdHJ1Y3RlZC4KLy8vIEluaXRpYWxseSwgYSBzZW50aW5lbCBoYXMgaXRzIG5leHQgYW5kIHByZXZpb3VzIGVudHJ5IHBvaW50IHRvIGl0c2VsZi4KLy8vIEEgc2VudGluZWwgZG9lcyBub3QgYm94IGFueSB1c2VyIGVsZW1lbnQuCmNsYXNzIF9Eb3VibGVMaW5rZWRRdWV1ZVNlbnRpbmVsPEU+IGV4dGVuZHMgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gewogIF9Eb3VibGVMaW5rZWRRdWV1ZVNlbnRpbmVsKERvdWJsZUxpbmtlZFF1ZXVlPEU+IHF1ZXVlKSA6IHN1cGVyKG51bGwsIHF1ZXVlKSB7CiAgICBfcHJldmlvdXNMaW5rID0gdGhpczsKICAgIF9uZXh0TGluayA9IHRoaXM7CiAgfQoKICBEb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IF9hc05vblNlbnRpbmVsRW50cnkoKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIC8vLyBIaXQgYnksIGUuZy4sIFtEb3VibGVMaW5rZWRRdWV1ZS5yZW1vdmVGaXJzdF0gaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LgogIEUgX3JlbW92ZSgpIHsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgLy8vIEhpdCBieSwgZS5nLiwgW0RvdWJsZUxpbmtlZFF1ZXVlLmZpcnN0XSBpZiB0aGUgcXVldWUgaXMgZW1wdHkuCiAgRSBnZXQgX2VsZW1lbnQgewogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQp9CgovLy8gQSBbUXVldWVdIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uIGEgZG91YmxlLWxpbmtlZCBsaXN0LgovLy8KLy8vIEFsbG93cyBjb25zdGFudCB0aW1lIGFkZCwgcmVtb3ZlLWF0LWVuZHMgYW5kIHBlZWsgb3BlcmF0aW9ucy4KY2xhc3MgRG91YmxlTGlua2VkUXVldWU8RT4gZXh0ZW5kcyBJdGVyYWJsZTxFPiBpbXBsZW1lbnRzIFF1ZXVlPEU+IHsKICBfRG91YmxlTGlua2VkUXVldWVTZW50aW5lbDxFPiBfc2VudGluZWw7CiAgaW50IF9lbGVtZW50Q291bnQgPSAwOwoKICBEb3VibGVMaW5rZWRRdWV1ZSgpIHsKICAgIF9zZW50aW5lbCA9IF9Eb3VibGVMaW5rZWRRdWV1ZVNlbnRpbmVsPEU+KHRoaXMpOwogIH0KCiAgLy8vIENyZWF0ZXMgYSBkb3VibGUtbGlua2VkIHF1ZXVlIGNvbnRhaW5pbmcgYWxsIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIFRoZSBlbGVtZW50IG9yZGVyIGluIHRoZSBxdWV1ZSBpcyBhcyBpZiB0aGUgZWxlbWVudHMgd2VyZSBhZGRlZCB1c2luZwogIC8vLyBbYWRkTGFzdF0gaW4gdGhlIG9yZGVyIHByb3ZpZGVkIGJ5IFtlbGVtZW50cy5pdGVyYXRvcl0uCiAgLy8vCiAgLy8vIEFsbCB0aGUgW2VsZW1lbnRzXSBzaG91bGQgYmUgaW5zdGFuY2VzIG9mIFtFXS4KICAvLy8gVGhlIGBlbGVtZW50c2AgaXRlcmFibGUgaXRzZWxmIG1heSBoYXZlIGFueSBlbGVtZW50IHR5cGUsIHNvIHRoaXMKICAvLy8gY29uc3RydWN0b3IgY2FuIGJlIHVzZWQgdG8gZG93bi1jYXN0IGEgYFF1ZXVlYCwgZm9yIGV4YW1wbGUgYXM6CiAgLy8vIGBgYGRhcnQKICAvLy8gUXVldWU8U3VwZXJUeXBlPiBzdXBlclF1ZXVlID0gLi4uOwogIC8vLyBRdWV1ZTxTdWJUeXBlPiBzdWJRdWV1ZSA9CiAgLy8vICAgICBuZXcgRG91YmxlTGlua2VkUXVldWU8U3ViVHlwZT4uZnJvbShzdXBlclF1ZXVlLndoZXJlVHlwZTxTdWJUeXBlPigpKTsKICAvLy8gYGBgCiAgZmFjdG9yeSBEb3VibGVMaW5rZWRRdWV1ZS5mcm9tKEl0ZXJhYmxlIGVsZW1lbnRzKSB7CiAgICBRdWV1ZTxFPiBsaXN0ID0gRG91YmxlTGlua2VkUXVldWU8RT4oKTsKICAgIGZvciAoZmluYWwgZSBpbiBlbGVtZW50cykgewogICAgICBsaXN0LmFkZExhc3QoZSk7CiAgICB9CiAgICByZXR1cm4gbGlzdDsKICB9CgogIC8vLyBDcmVhdGVzIGEgZG91YmxlLWxpbmtlZCBxdWV1ZSBmcm9tIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIFRoZSBlbGVtZW50IG9yZGVyIGluIHRoZSBxdWV1ZSBpcyBhcyBpZiB0aGUgZWxlbWVudHMgd2VyZSBhZGRlZCB1c2luZwogIC8vLyBbYWRkTGFzdF0gaW4gdGhlIG9yZGVyIHByb3ZpZGVkIGJ5IFtlbGVtZW50cy5pdGVyYXRvcl0uCiAgZmFjdG9yeSBEb3VibGVMaW5rZWRRdWV1ZS5vZihJdGVyYWJsZTxFPiBlbGVtZW50cykgPT4KICAgICAgRG91YmxlTGlua2VkUXVldWU8RT4oKS4uYWRkQWxsKGVsZW1lbnRzKTsKCiAgUXVldWU8Uj4gY2FzdDxSPigpID0+IFF1ZXVlLmNhc3RGcm9tPEUsIFI+KHRoaXMpOwogIGludCBnZXQgbGVuZ3RoID0+IF9lbGVtZW50Q291bnQ7CgogIHZvaWQgYWRkTGFzdChFIHZhbHVlKSB7CiAgICBfc2VudGluZWwuX3ByZXBlbmQodmFsdWUpOwogICAgX2VsZW1lbnRDb3VudCsrOwogIH0KCiAgdm9pZCBhZGRGaXJzdChFIHZhbHVlKSB7CiAgICBfc2VudGluZWwuX2FwcGVuZCh2YWx1ZSk7CiAgICBfZWxlbWVudENvdW50Kys7CiAgfQoKICB2b2lkIGFkZChFIHZhbHVlKSB7CiAgICBfc2VudGluZWwuX3ByZXBlbmQodmFsdWUpOwogICAgX2VsZW1lbnRDb3VudCsrOwogIH0KCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIGZvciAoZmluYWwgRSB2YWx1ZSBpbiBpdGVyYWJsZSkgewogICAgICBfc2VudGluZWwuX3ByZXBlbmQodmFsdWUpOwogICAgICBfZWxlbWVudENvdW50Kys7CiAgICB9CiAgfQoKICBFIHJlbW92ZUxhc3QoKSB7CiAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBsYXN0RW50cnkgPSBfc2VudGluZWwuX3ByZXZpb3VzTGluazsKICAgIEUgcmVzdWx0ID0gbGFzdEVudHJ5Ll9yZW1vdmUoKTsKICAgIF9lbGVtZW50Q291bnQtLTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBFIHJlbW92ZUZpcnN0KCkgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZmlyc3RFbnRyeSA9IF9zZW50aW5lbC5fbmV4dExpbms7CiAgICBFIHJlc3VsdCA9IGZpcnN0RW50cnkuX3JlbW92ZSgpOwogICAgX2VsZW1lbnRDb3VudC0tOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGJvb2wgcmVtb3ZlKE9iamVjdCBvKSB7CiAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBlbnRyeSA9IF9zZW50aW5lbC5fbmV4dExpbms7CiAgICB3aGlsZSAoIWlkZW50aWNhbChlbnRyeSwgX3NlbnRpbmVsKSkgewogICAgICBib29sIGVxdWFscyA9IChlbnRyeS5fZWxlbWVudCA9PSBvKTsKICAgICAgaWYgKCFpZGVudGljYWwodGhpcywgZW50cnkuX3F1ZXVlKSkgewogICAgICAgIC8vIEVudHJ5IG11c3Qgc3RpbGwgYmUgaW4gdGhlIHF1ZXVlLgogICAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgICBpZiAoZXF1YWxzKSB7CiAgICAgICAgZW50cnkuX3JlbW92ZSgpOwogICAgICAgIF9lbGVtZW50Q291bnQtLTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBlbnRyeSA9IGVudHJ5Ll9uZXh0TGluazsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgX2ZpbHRlcihib29sIHRlc3QoRSBlbGVtZW50KSwgYm9vbCByZW1vdmVNYXRjaGluZykgewogICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZW50cnkgPSBfc2VudGluZWwuX25leHRMaW5rOwogICAgd2hpbGUgKCFpZGVudGljYWwoZW50cnksIF9zZW50aW5lbCkpIHsKICAgICAgYm9vbCBtYXRjaGVzID0gdGVzdChlbnRyeS5fZWxlbWVudCk7CiAgICAgIGlmICghaWRlbnRpY2FsKHRoaXMsIGVudHJ5Ll9xdWV1ZSkpIHsKICAgICAgICAvLyBFbnRyeSBtdXN0IHN0aWxsIGJlIGluIHRoZSBxdWV1ZS4KICAgICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gbmV4dCA9IGVudHJ5Ll9uZXh0TGluazsgLy8gQ2Fubm90IGJlIG51bGwuCiAgICAgIGlmIChpZGVudGljYWwocmVtb3ZlTWF0Y2hpbmcsIG1hdGNoZXMpKSB7CiAgICAgICAgZW50cnkuX3JlbW92ZSgpOwogICAgICAgIF9lbGVtZW50Q291bnQtLTsKICAgICAgfQogICAgICBlbnRyeSA9IG5leHQ7CiAgICB9CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBfZmlsdGVyKHRlc3QsIHRydWUpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2ZpbHRlcih0ZXN0LCBmYWxzZSk7CiAgfQoKICBFIGdldCBmaXJzdCB7CiAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBmaXJzdEVudHJ5ID0gX3NlbnRpbmVsLl9uZXh0TGluazsKICAgIHJldHVybiBmaXJzdEVudHJ5Ll9lbGVtZW50OwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBsYXN0RW50cnkgPSBfc2VudGluZWwuX3ByZXZpb3VzTGluazsKICAgIHJldHVybiBsYXN0RW50cnkuX2VsZW1lbnQ7CiAgfQoKICBFIGdldCBzaW5nbGUgewogICAgLy8gTm90ZSB0aGF0IHRoaXMgdGhyb3dzIGNvcnJlY3RseSBpZiB0aGUgcXVldWUgaXMgZW1wdHkKICAgIC8vIGJlY2F1c2UgcmVhZGluZyB0aGUgZWxlbWVudCBvZiB0aGUgc2VudGluZWwgdGhyb3dzLgogICAgaWYgKGlkZW50aWNhbChfc2VudGluZWwuX25leHRMaW5rLCBfc2VudGluZWwuX3ByZXZpb3VzTGluaykpIHsKICAgICAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZW50cnkgPSBfc2VudGluZWwuX25leHRMaW5rOwogICAgICByZXR1cm4gZW50cnkuX2VsZW1lbnQ7CiAgICB9CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgfQoKICAvLy8gVGhlIGVudHJ5IG9iamVjdCBvZiB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIEVhY2ggZWxlbWVudCBvZiB0aGUgcXVldWUgaGFzIGFuIGFzc29jaWF0ZWQgW0RvdWJsZUxpbmtlZFF1ZXVlRW50cnldLgogIC8vLyBSZXR1cm5zIHRoZSBlbnRyeSBvYmplY3QgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgZWxlbWVudCBvZiB0aGUgcXVldWUuCiAgLy8vCiAgLy8vIFRoZSBlbnRyeSBvYmplY3RzIGNhbiBhbHNvIGJlIGFjY2Vzc2VkIHVzaW5nIFtsYXN0RW50cnldLAogIC8vLyBhbmQgdGhleSBjYW4gYmUgaXRlcmF0ZWQgdXNpbmcgW0RvdWJsZUxpbmtlZFF1ZXVlRW50cnkubmV4dEVudHJ5KCldIGFuZAogIC8vLyBbRG91YmxlTGlua2VkUXVldWVFbnRyeS5wcmV2aW91c0VudHJ5KCldLgogIERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZmlyc3RFbnRyeSgpIHsKICAgIHJldHVybiBfc2VudGluZWwubmV4dEVudHJ5KCk7CiAgfQoKICAvLy8gVGhlIGVudHJ5IG9iamVjdCBvZiB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBxdWV1ZS4KICAvLy8KICAvLy8gRWFjaCBlbGVtZW50IG9mIHRoZSBxdWV1ZSBoYXMgYW4gYXNzb2NpYXRlZCBbRG91YmxlTGlua2VkUXVldWVFbnRyeV0uCiAgLy8vIFJldHVybnMgdGhlIGVudHJ5IG9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIHF1ZXVlLgogIC8vLwogIC8vLyBUaGUgZW50cnkgb2JqZWN0cyBjYW4gYWxzbyBiZSBhY2Nlc3NlZCB1c2luZyBbZmlyc3RFbnRyeV0sCiAgLy8vIGFuZCB0aGV5IGNhbiBiZSBpdGVyYXRlZCB1c2luZyBbRG91YmxlTGlua2VkUXVldWVFbnRyeS5uZXh0RW50cnkoKV0gYW5kCiAgLy8vIFtEb3VibGVMaW5rZWRRdWV1ZUVudHJ5LnByZXZpb3VzRW50cnkoKV0uCiAgRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBsYXN0RW50cnkoKSB7CiAgICByZXR1cm4gX3NlbnRpbmVsLnByZXZpb3VzRW50cnkoKTsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgewogICAgcmV0dXJuIChpZGVudGljYWwoX3NlbnRpbmVsLl9uZXh0TGluaywgX3NlbnRpbmVsKSk7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgX3NlbnRpbmVsLl9uZXh0TGluayA9IF9zZW50aW5lbDsKICAgIF9zZW50aW5lbC5fcHJldmlvdXNMaW5rID0gX3NlbnRpbmVsOwogICAgX2VsZW1lbnRDb3VudCA9IDA7CiAgfQoKICAvLy8gQ2FsbHMgW2FjdGlvbl0gZm9yIGVhY2ggZW50cnkgb2JqZWN0IG9mIHRoaXMgZG91YmxlLWxpbmtlZCBxdWV1ZS4KICAvLy8KICAvLy8gRWFjaCBlbGVtZW50IG9mIHRoZSBxdWV1ZSBoYXMgYW4gYXNzb2NpYXRlZCBbRG91YmxlTGlua2VkUXVldWVFbnRyeV0uCiAgLy8vIFRoaXMgbWV0aG9kIGl0ZXJhdGVzIHRoZSBlbnRyeSBvYmplY3RzIGZyb20gZmlyc3QgdG8gbGFzdCBhbmQgY2FsbHMKICAvLy8gW2FjdGlvbl0gd2l0aCBlYWNoIG9iamVjdCBpbiB0dXJuLgogIC8vLwogIC8vLyBUaGUgZW50cnkgb2JqZWN0cyBjYW4gYWxzbyBiZSBhY2Nlc3NlZCB1c2luZyBbZmlyc3RFbnRyeV0gYW5kIFtsYXN0RW50cnldLAogIC8vLyBhbmQgaXRlcmF0ZWQgdXNpbmcgW0RvdWJsZUxpbmtlZFF1ZXVlRW50cnkubmV4dEVudHJ5KCldIGFuZAogIC8vLyBbRG91YmxlTGlua2VkUXVldWVFbnRyeS5wcmV2aW91c0VudHJ5KCldLgogIC8vLwogIC8vLyBUaGUgW2FjdGlvbl0gZnVuY3Rpb24gY2FuIHVzZSBtZXRob2RzIG9uIFtEb3VibGVMaW5rZWRRdWV1ZUVudHJ5XSB0bwogIC8vLyByZW1vdmUgdGhlIGVudHJ5IG9yIGl0IGNhbiBpbnNlcnQgZWxlbWVudHMgYmVmb3JlIG9yIGFmdGVyIHRoZW4gZW50cnkuCiAgLy8vIElmIHRoZSBjdXJyZW50IGVudHJ5IGlzIHJlbW92ZWQsIGl0ZXJhdGlvbiBjb250aW51ZXMgd2l0aCB0aGUgZW50cnkgdGhhdAogIC8vLyB3YXMgZm9sbG93aW5nIHRoZSBjdXJyZW50IGVudHJ5IHdoZW4gW2FjdGlvbl0gd2FzIGNhbGxlZC4gQW55IGVsZW1lbnRzCiAgLy8vIGluc2VydGVkIGFmdGVyIHRoZSBjdXJyZW50IGVsZW1lbnQgYmVmb3JlIGl0IGlzIHJlbW92ZWQgd2lsbCBub3QgYmUKICAvLy8gdmlzaXRlZCBieSB0aGUgaXRlcmF0aW9uLgogIHZvaWQgZm9yRWFjaEVudHJ5KHZvaWQgYWN0aW9uKERvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gZWxlbWVudCkpIHsKICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5PEU+IGVudHJ5ID0gX3NlbnRpbmVsLl9uZXh0TGluazsKICAgIHdoaWxlICghaWRlbnRpY2FsKGVudHJ5LCBfc2VudGluZWwpKSB7CiAgICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVsZW1lbnQ8RT4gZWxlbWVudCA9IGVudHJ5OwogICAgICBfRG91YmxlTGlua2VkUXVldWVFbnRyeTxFPiBuZXh0ID0gZWxlbWVudC5fbmV4dExpbms7CiAgICAgIC8vIFJlbWVtYmVyIGJvdGggZW50cnkgYW5kIGVudHJ5Ll9uZXh0TGluay4KICAgICAgLy8gSWYgc29tZW9uZSBjYWxscyBgZWxlbWVudC5yZW1vdmUoKWAgd2UgY29udGludWUgZnJvbSBgbmV4dGAuCiAgICAgIC8vIE90aGVyd2lzZSB3ZSB1c2UgdGhlIHZhbHVlIG9mIGVudHJ5Ll9uZXh0TGluayB3aGljaCBtYXkgaGF2ZSBiZWVuCiAgICAgIC8vIHVwZGF0ZWQuCiAgICAgIGFjdGlvbihlbGVtZW50KTsKICAgICAgaWYgKGlkZW50aWNhbCh0aGlzLCBlbnRyeS5fcXVldWUpKSB7CiAgICAgICAgbmV4dCA9IGVudHJ5Ll9uZXh0TGluazsKICAgICAgfSBlbHNlIGlmICghaWRlbnRpY2FsKHRoaXMsIG5leHQuX3F1ZXVlKSkgewogICAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgICBlbnRyeSA9IG5leHQ7CiAgICB9CiAgfQoKICBfRG91YmxlTGlua2VkUXVldWVJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIF9Eb3VibGVMaW5rZWRRdWV1ZUl0ZXJhdG9yPEU+KF9zZW50aW5lbCk7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBJdGVyYWJsZUJhc2UuaXRlcmFibGVUb0Z1bGxTdHJpbmcodGhpcywgJ3snLCAnfScpOwp9CgpjbGFzcyBfRG91YmxlTGlua2VkUXVldWVJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBfRG91YmxlTGlua2VkUXVldWVTZW50aW5lbDxFPiBfc2VudGluZWw7CiAgX0RvdWJsZUxpbmtlZFF1ZXVlRW50cnk8RT4gX25leHRFbnRyeTsKICBFIF9jdXJyZW50OwoKICBfRG91YmxlTGlua2VkUXVldWVJdGVyYXRvcihfRG91YmxlTGlua2VkUXVldWVTZW50aW5lbDxFPiBzZW50aW5lbCkKICAgICAgOiBfc2VudGluZWwgPSBzZW50aW5lbCwKICAgICAgICBfbmV4dEVudHJ5ID0gc2VudGluZWwuX25leHRMaW5rOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKGlkZW50aWNhbChfbmV4dEVudHJ5LCBfc2VudGluZWwpKSB7CiAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgX25leHRFbnRyeSA9IG51bGw7CiAgICAgIF9zZW50aW5lbCA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIF9Eb3VibGVMaW5rZWRRdWV1ZUVsZW1lbnQ8RT4gZWxlbWVudEVudHJ5ID0gX25leHRFbnRyeTsKICAgIGlmICghaWRlbnRpY2FsKF9zZW50aW5lbC5fcXVldWUsIGVsZW1lbnRFbnRyeS5fcXVldWUpKSB7CiAgICAgIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcihfc2VudGluZWwuX3F1ZXVlKTsKICAgIH0KICAgIF9jdXJyZW50ID0gZWxlbWVudEVudHJ5Ll9lbGVtZW50OwogICAgX25leHRFbnRyeSA9IGVsZW1lbnRFbnRyeS5fbmV4dExpbms7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7Cn0KCi8vLyBMaXN0IGJhc2VkIFtRdWV1ZV0uCi8vLwovLy8gS2VlcHMgYSBjeWNsaWMgYnVmZmVyIG9mIGVsZW1lbnRzLCBhbmQgZ3Jvd3MgdG8gYSBsYXJnZXIgYnVmZmVyIHdoZW4KLy8vIGl0IGZpbGxzIHVwLiBUaGlzIGd1YXJhbnRlZXMgY29uc3RhbnQgdGltZSBwZWVrIGFuZCByZW1vdmUgb3BlcmF0aW9ucywgYW5kCi8vLyBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZSBhZGQgb3BlcmF0aW9ucy4KLy8vCi8vLyBUaGUgc3RydWN0dXJlIGlzIGVmZmljaWVudCBmb3IgYW55IHF1ZXVlIG9yIHN0YWNrIHVzYWdlLgpjbGFzcyBMaXN0UXVldWU8RT4gZXh0ZW5kcyBMaXN0SXRlcmFibGU8RT4gaW1wbGVtZW50cyBRdWV1ZTxFPiB7CiAgc3RhdGljIGNvbnN0IGludCBfSU5JVElBTF9DQVBBQ0lUWSA9IDg7CiAgTGlzdDxFPiBfdGFibGU7CiAgaW50IF9oZWFkOwogIGludCBfdGFpbDsKICBpbnQgX21vZGlmaWNhdGlvbkNvdW50ID0gMDsKCiAgLy8vIENyZWF0ZSBhbiBlbXB0eSBxdWV1ZS4KICAvLy8KICAvLy8gSWYgW2luaXRpYWxDYXBhY2l0eV0gaXMgZ2l2ZW4sIHByZXBhcmUgdGhlIHF1ZXVlIGZvciBhdCBsZWFzdCB0aGF0IG1hbnkKICAvLy8gZWxlbWVudHMuCiAgTGlzdFF1ZXVlKFtpbnQgaW5pdGlhbENhcGFjaXR5XSkKICAgICAgOiBfaGVhZCA9IDAsCiAgICAgICAgX3RhaWwgPSAwIHsKICAgIGlmIChpbml0aWFsQ2FwYWNpdHkgPT0gbnVsbCB8fCBpbml0aWFsQ2FwYWNpdHkgPCBfSU5JVElBTF9DQVBBQ0lUWSkgewogICAgICBpbml0aWFsQ2FwYWNpdHkgPSBfSU5JVElBTF9DQVBBQ0lUWTsKICAgIH0gZWxzZSBpZiAoIV9pc1Bvd2VyT2YyKGluaXRpYWxDYXBhY2l0eSkpIHsKICAgICAgaW5pdGlhbENhcGFjaXR5ID0gX25leHRQb3dlck9mMihpbml0aWFsQ2FwYWNpdHkpOwogICAgfQogICAgYXNzZXJ0KF9pc1Bvd2VyT2YyKGluaXRpYWxDYXBhY2l0eSkpOwogICAgX3RhYmxlID0gTGlzdDxFPihpbml0aWFsQ2FwYWNpdHkpOwogIH0KCiAgLy8vIENyZWF0ZSBhIGBMaXN0UXVldWVgIGNvbnRhaW5pbmcgYWxsIFtlbGVtZW50c10uCiAgLy8vCiAgLy8vIFRoZSBlbGVtZW50cyBhcmUgYWRkZWQgdG8gdGhlIHF1ZXVlLCBhcyBieSBbYWRkTGFzdF0sIGluIHRoZSBvcmRlciBnaXZlbgogIC8vLyBieSBgZWxlbWVudHMuaXRlcmF0b3JgLgogIC8vLwogIC8vLyBBbGwgdGhlIFtlbGVtZW50c10gc2hvdWxkIGJlIGluc3RhbmNlcyBvZiBbRV0uCiAgLy8vIFRoZSBgZWxlbWVudHNgIGl0ZXJhYmxlIGl0c2VsZiBtYXkgaGF2ZSBhbnkgZWxlbWVudCB0eXBlLCBzbyB0aGlzCiAgLy8vIGNvbnN0cnVjdG9yIGNhbiBiZSB1c2VkIHRvIGRvd24tY2FzdCBhIGBRdWV1ZWAsIGZvciBleGFtcGxlIGFzOgogIC8vLyBgYGBkYXJ0CiAgLy8vIFF1ZXVlPFN1cGVyVHlwZT4gc3VwZXJRdWV1ZSA9IC4uLjsKICAvLy8gUXVldWU8U3ViVHlwZT4gc3ViUXVldWUgPQogIC8vLyAgICAgbmV3IExpc3RRdWV1ZTxTdWJUeXBlPi5mcm9tKHN1cGVyUXVldWUud2hlcmVUeXBlPFN1YlR5cGU+KCkpOwogIC8vLyBgYGAKICBmYWN0b3J5IExpc3RRdWV1ZS5mcm9tKEl0ZXJhYmxlIGVsZW1lbnRzKSB7CiAgICBpZiAoZWxlbWVudHMgaXMgTGlzdCkgewogICAgICBpbnQgbGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoOwogICAgICBMaXN0UXVldWU8RT4gcXVldWUgPSBMaXN0UXVldWU8RT4obGVuZ3RoICsgMSk7CiAgICAgIGFzc2VydChxdWV1ZS5fdGFibGUubGVuZ3RoID4gbGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIHF1ZXVlLl90YWJsZVtpXSA9IGVsZW1lbnRzW2ldOwogICAgICB9CiAgICAgIHF1ZXVlLl90YWlsID0gbGVuZ3RoOwogICAgICByZXR1cm4gcXVldWU7CiAgICB9IGVsc2UgewogICAgICBpbnQgY2FwYWNpdHkgPSBfSU5JVElBTF9DQVBBQ0lUWTsKICAgICAgaWYgKGVsZW1lbnRzIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKSB7CiAgICAgICAgY2FwYWNpdHkgPSBlbGVtZW50cy5sZW5ndGg7CiAgICAgIH0KICAgICAgTGlzdFF1ZXVlPEU+IHJlc3VsdCA9IExpc3RRdWV1ZTxFPihjYXBhY2l0eSk7CiAgICAgIGZvciAoZmluYWwgZWxlbWVudCBpbiBlbGVtZW50cykgewogICAgICAgIHJlc3VsdC5hZGRMYXN0KGVsZW1lbnQpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgfQoKICAvLy8gQ3JlYXRlIGEgYExpc3RRdWV1ZWAgZnJvbSBbZWxlbWVudHNdLgogIC8vLwogIC8vLyBUaGUgZWxlbWVudHMgYXJlIGFkZGVkIHRvIHRoZSBxdWV1ZSwgYXMgYnkgW2FkZExhc3RdLCBpbiB0aGUgb3JkZXIgZ2l2ZW4KICAvLy8gYnkgYGVsZW1lbnRzLml0ZXJhdG9yYC4KICBmYWN0b3J5IExpc3RRdWV1ZS5vZihJdGVyYWJsZTxFPiBlbGVtZW50cykgPT4KICAgICAgTGlzdFF1ZXVlPEU+KCkuLmFkZEFsbChlbGVtZW50cyk7CgogIC8vIEl0ZXJhYmxlIGludGVyZmFjZS4KCiAgUXVldWU8Uj4gY2FzdDxSPigpID0+IFF1ZXVlLmNhc3RGcm9tPEUsIFI+KHRoaXMpOwogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBfTGlzdFF1ZXVlSXRlcmF0b3I8RT4odGhpcyk7CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoRSBlbGVtZW50KSkgewogICAgaW50IG1vZGlmaWNhdGlvbkNvdW50ID0gX21vZGlmaWNhdGlvbkNvdW50OwogICAgZm9yIChpbnQgaSA9IF9oZWFkOyBpICE9IF90YWlsOyBpID0gKGkgKyAxKSAmIChfdGFibGUubGVuZ3RoIC0gMSkpIHsKICAgICAgZihfdGFibGVbaV0pOwogICAgICBfY2hlY2tNb2RpZmljYXRpb24obW9kaWZpY2F0aW9uQ291bnQpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfaGVhZCA9PSBfdGFpbDsKCiAgaW50IGdldCBsZW5ndGggPT4gKF90YWlsIC0gX2hlYWQpICYgKF90YWJsZS5sZW5ndGggLSAxKTsKCiAgRSBnZXQgZmlyc3QgewogICAgaWYgKF9oZWFkID09IF90YWlsKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHJldHVybiBfdGFibGVbX2hlYWRdOwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBpZiAoX2hlYWQgPT0gX3RhaWwpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgcmV0dXJuIF90YWJsZVsoX3RhaWwgLSAxKSAmIChfdGFibGUubGVuZ3RoIC0gMSldOwogIH0KCiAgRSBnZXQgc2luZ2xlIHsKICAgIGlmIChfaGVhZCA9PSBfdGFpbCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBpZiAobGVuZ3RoID4gMSkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3IudG9vTWFueSgpOwogICAgcmV0dXJuIF90YWJsZVtfaGVhZF07CiAgfQoKICBFIGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZEluZGV4KGluZGV4LCB0aGlzKTsKICAgIHJldHVybiBfdGFibGVbKF9oZWFkICsgaW5kZXgpICYgKF90YWJsZS5sZW5ndGggLSAxKV07CiAgfQoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZSA9IHRydWV9KSB7CiAgICBMaXN0PEU+IGxpc3Q7CiAgICBpZiAoZ3Jvd2FibGUpIHsKICAgICAgbGlzdCA9IDxFPltdLi5sZW5ndGggPSBsZW5ndGg7CiAgICB9IGVsc2UgewogICAgICBsaXN0ID0gTGlzdDxFPihsZW5ndGgpOwogICAgfQogICAgX3dyaXRlVG9MaXN0KGxpc3QpOwogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICAvLyBDb2xsZWN0aW9uIGludGVyZmFjZS4KCiAgdm9pZCBhZGQoRSB2YWx1ZSkgewogICAgX2FkZCh2YWx1ZSk7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxFPiBlbGVtZW50cykgewogICAgaWYgKGVsZW1lbnRzIGlzIExpc3Q8RT4pIHsKICAgICAgTGlzdDxFPiBsaXN0ID0gZWxlbWVudHM7CiAgICAgIGludCBhZGRDb3VudCA9IGxpc3QubGVuZ3RoOwogICAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAgIGlmIChsZW5ndGggKyBhZGRDb3VudCA+PSBfdGFibGUubGVuZ3RoKSB7CiAgICAgICAgX3ByZUdyb3cobGVuZ3RoICsgYWRkQ291bnQpOwogICAgICAgIC8vIEFmdGVyIHByZUdyb3csIGFsbCBlbGVtZW50cyBhcmUgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0LgogICAgICAgIF90YWJsZS5zZXRSYW5nZShsZW5ndGgsIGxlbmd0aCArIGFkZENvdW50LCBsaXN0LCAwKTsKICAgICAgICBfdGFpbCArPSBhZGRDb3VudDsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBBZGRpbmcgYWRkQ291bnQgZWxlbWVudHMgd29uJ3QgcmVhY2ggX2hlYWQuCiAgICAgICAgaW50IGVuZFNwYWNlID0gX3RhYmxlLmxlbmd0aCAtIF90YWlsOwogICAgICAgIGlmIChhZGRDb3VudCA8IGVuZFNwYWNlKSB7CiAgICAgICAgICBfdGFibGUuc2V0UmFuZ2UoX3RhaWwsIF90YWlsICsgYWRkQ291bnQsIGxpc3QsIDApOwogICAgICAgICAgX3RhaWwgKz0gYWRkQ291bnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGludCBwcmVTcGFjZSA9IGFkZENvdW50IC0gZW5kU3BhY2U7CiAgICAgICAgICBfdGFibGUuc2V0UmFuZ2UoX3RhaWwsIF90YWlsICsgZW5kU3BhY2UsIGxpc3QsIDApOwogICAgICAgICAgX3RhYmxlLnNldFJhbmdlKDAsIHByZVNwYWNlLCBsaXN0LCBlbmRTcGFjZSk7CiAgICAgICAgICBfdGFpbCA9IHByZVNwYWNlOwogICAgICAgIH0KICAgICAgfQogICAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoRSBlbGVtZW50IGluIGVsZW1lbnRzKSBfYWRkKGVsZW1lbnQpOwogICAgfQogIH0KCiAgYm9vbCByZW1vdmUoT2JqZWN0IHZhbHVlKSB7CiAgICBmb3IgKGludCBpID0gX2hlYWQ7IGkgIT0gX3RhaWw7IGkgPSAoaSArIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKSkgewogICAgICBFIGVsZW1lbnQgPSBfdGFibGVbaV07CiAgICAgIGlmIChlbGVtZW50ID09IHZhbHVlKSB7CiAgICAgICAgX3JlbW92ZShpKTsKICAgICAgICBfbW9kaWZpY2F0aW9uQ291bnQrKzsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBfZmlsdGVyV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIGJvb2wgcmVtb3ZlTWF0Y2hpbmcpIHsKICAgIGludCBtb2RpZmljYXRpb25Db3VudCA9IF9tb2RpZmljYXRpb25Db3VudDsKICAgIGludCBpID0gX2hlYWQ7CiAgICB3aGlsZSAoaSAhPSBfdGFpbCkgewogICAgICBFIGVsZW1lbnQgPSBfdGFibGVbaV07CiAgICAgIGJvb2wgcmVtb3ZlID0gaWRlbnRpY2FsKHJlbW92ZU1hdGNoaW5nLCB0ZXN0KGVsZW1lbnQpKTsKICAgICAgX2NoZWNrTW9kaWZpY2F0aW9uKG1vZGlmaWNhdGlvbkNvdW50KTsKICAgICAgaWYgKHJlbW92ZSkgewogICAgICAgIGkgPSBfcmVtb3ZlKGkpOwogICAgICAgIG1vZGlmaWNhdGlvbkNvdW50ID0gKytfbW9kaWZpY2F0aW9uQ291bnQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaSA9IChpICsgMSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpOwogICAgICB9CiAgICB9CiAgfQoKICAvLy8gUmVtb3ZlIGFsbCBlbGVtZW50cyBtYXRjaGVkIGJ5IFt0ZXN0XS4KICAvLy8KICAvLy8gVGhpcyBtZXRob2QgaXMgaW5lZmZpY2llbnQgc2luY2UgaXQgd29ya3MgYnkgcmVwZWF0ZWRseSByZW1vdmluZyBzaW5nbGUKICAvLy8gZWxlbWVudHMsIGVhY2ggb2Ygd2hpY2ggY2FuIHRha2UgbGluZWFyIHRpbWUuCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgX2ZpbHRlcldoZXJlKHRlc3QsIHRydWUpOwogIH0KCiAgLy8vIFJlbW92ZSBhbGwgZWxlbWVudHMgbm90IG1hdGNoZWQgYnkgW3Rlc3RdLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBpbmVmZmljaWVudCBzaW5jZSBpdCB3b3JrcyBieSByZXBlYXRlZGx5IHJlbW92aW5nIHNpbmdsZQogIC8vLyBlbGVtZW50cywgZWFjaCBvZiB3aGljaCBjYW4gdGFrZSBsaW5lYXIgdGltZS4KICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBfZmlsdGVyV2hlcmUodGVzdCwgZmFsc2UpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIGlmIChfaGVhZCAhPSBfdGFpbCkgewogICAgICBmb3IgKGludCBpID0gX2hlYWQ7IGkgIT0gX3RhaWw7IGkgPSAoaSArIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKSkgewogICAgICAgIF90YWJsZVtpXSA9IG51bGw7CiAgICAgIH0KICAgICAgX2hlYWQgPSBfdGFpbCA9IDA7CiAgICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwogICAgfQogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gSXRlcmFibGVCYXNlLml0ZXJhYmxlVG9GdWxsU3RyaW5nKHRoaXMsICJ7IiwgIn0iKTsKCiAgLy8gUXVldWUgaW50ZXJmYWNlLgoKICB2b2lkIGFkZExhc3QoRSB2YWx1ZSkgewogICAgX2FkZCh2YWx1ZSk7CiAgfQoKICB2b2lkIGFkZEZpcnN0KEUgdmFsdWUpIHsKICAgIF9oZWFkID0gKF9oZWFkIC0gMSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpOwogICAgX3RhYmxlW19oZWFkXSA9IHZhbHVlOwogICAgaWYgKF9oZWFkID09IF90YWlsKSBfZ3JvdygpOwogICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgfQoKICBFIHJlbW92ZUZpcnN0KCkgewogICAgaWYgKF9oZWFkID09IF90YWlsKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIF9tb2RpZmljYXRpb25Db3VudCsrOwogICAgRSByZXN1bHQgPSBfdGFibGVbX2hlYWRdOwogICAgX3RhYmxlW19oZWFkXSA9IG51bGw7CiAgICBfaGVhZCA9IChfaGVhZCArIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBFIHJlbW92ZUxhc3QoKSB7CiAgICBpZiAoX2hlYWQgPT0gX3RhaWwpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgICBfdGFpbCA9IChfdGFpbCAtIDEpICYgKF90YWJsZS5sZW5ndGggLSAxKTsKICAgIEUgcmVzdWx0ID0gX3RhYmxlW190YWlsXTsKICAgIF90YWJsZVtfdGFpbF0gPSBudWxsOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIEludGVybmFsIGhlbHBlciBmdW5jdGlvbnMuCgogIC8vLyBXaGV0aGVyIFtudW1iZXJdIGlzIGEgcG93ZXIgb2YgdHdvLgogIC8vLwogIC8vLyBPbmx5IHdvcmtzIGZvciBwb3NpdGl2ZSBudW1iZXJzLgogIHN0YXRpYyBib29sIF9pc1Bvd2VyT2YyKGludCBudW1iZXIpID0+IChudW1iZXIgJiAobnVtYmVyIC0gMSkpID09IDA7CgogIC8vLyBSb3VuZHMgW251bWJlcl0gdXAgdG8gdGhlIG5lYXJlc3QgcG93ZXIgb2YgMi4KICAvLy8KICAvLy8gSWYgW251bWJlcl0gaXMgYSBwb3dlciBvZiAyIGFscmVhZHksIGl0IGlzIHJldHVybmVkLgogIC8vLwogIC8vLyBPbmx5IHdvcmtzIGZvciBwb3NpdGl2ZSBudW1iZXJzLgogIHN0YXRpYyBpbnQgX25leHRQb3dlck9mMihpbnQgbnVtYmVyKSB7CiAgICBhc3NlcnQobnVtYmVyID4gMCk7CiAgICBudW1iZXIgPSAobnVtYmVyIDw8IDEpIC0gMTsKICAgIGZvciAoOzspIHsKICAgICAgaW50IG5leHROdW1iZXIgPSBudW1iZXIgJiAobnVtYmVyIC0gMSk7CiAgICAgIGlmIChuZXh0TnVtYmVyID09IDApIHJldHVybiBudW1iZXI7CiAgICAgIG51bWJlciA9IG5leHROdW1iZXI7CiAgICB9CiAgfQoKICAvLy8gQ2hlY2sgaWYgdGhlIHF1ZXVlIGhhcyBiZWVuIG1vZGlmaWVkIGR1cmluZyBpdGVyYXRpb24uCiAgdm9pZCBfY2hlY2tNb2RpZmljYXRpb24oaW50IGV4cGVjdGVkTW9kaWZpY2F0aW9uQ291bnQpIHsKICAgIGlmIChleHBlY3RlZE1vZGlmaWNhdGlvbkNvdW50ICE9IF9tb2RpZmljYXRpb25Db3VudCkgewogICAgICB0aHJvdyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICB9CiAgfQoKICAvLy8gQWRkcyBlbGVtZW50IGF0IGVuZCBvZiBxdWV1ZS4gVXNlZCBieSBib3RoIFthZGRdIGFuZCBbYWRkQWxsXS4KICB2b2lkIF9hZGQoRSBlbGVtZW50KSB7CiAgICBfdGFibGVbX3RhaWxdID0gZWxlbWVudDsKICAgIF90YWlsID0gKF90YWlsICsgMSkgJiAoX3RhYmxlLmxlbmd0aCAtIDEpOwogICAgaWYgKF9oZWFkID09IF90YWlsKSBfZ3JvdygpOwogICAgX21vZGlmaWNhdGlvbkNvdW50Kys7CiAgfQoKICAvLy8gUmVtb3ZlcyB0aGUgZWxlbWVudCBhdCBbb2Zmc2V0XSBpbnRvIFtfdGFibGVdLgogIC8vLwogIC8vLyBSZW1vdmFsIGlzIHBlcmZvcm1lZCBieSBsaW5lYXJseSBtb3ZpbmcgZWxlbWVudHMgZWl0aGVyIGJlZm9yZSBvciBhZnRlcgogIC8vLyBbb2Zmc2V0XSBieSBvbmUgcG9zaXRpb24uCiAgLy8vCiAgLy8vIFJldHVybnMgdGhlIG5ldyBvZmZzZXQgb2YgdGhlIGZvbGxvd2luZyBlbGVtZW50LiBUaGlzIG1heSBiZSB0aGUgc2FtZQogIC8vLyBvZmZzZXQgb3IgdGhlIGZvbGxvd2luZyBvZmZzZXQgZGVwZW5kaW5nIG9uIGhvdyBlbGVtZW50cyBhcmUgbW92ZWQKICAvLy8gdG8gZmlsbCB0aGUgaG9sZS4KICBpbnQgX3JlbW92ZShpbnQgb2Zmc2V0KSB7CiAgICBpbnQgbWFzayA9IF90YWJsZS5sZW5ndGggLSAxOwogICAgaW50IHN0YXJ0RGlzdGFuY2UgPSAob2Zmc2V0IC0gX2hlYWQpICYgbWFzazsKICAgIGludCBlbmREaXN0YW5jZSA9IChfdGFpbCAtIG9mZnNldCkgJiBtYXNrOwogICAgaWYgKHN0YXJ0RGlzdGFuY2UgPCBlbmREaXN0YW5jZSkgewogICAgICAvLyBDbG9zZXN0IHRvIHN0YXJ0LgogICAgICBpbnQgaSA9IG9mZnNldDsKICAgICAgd2hpbGUgKGkgIT0gX2hlYWQpIHsKICAgICAgICBpbnQgcHJldk9mZnNldCA9IChpIC0gMSkgJiBtYXNrOwogICAgICAgIF90YWJsZVtpXSA9IF90YWJsZVtwcmV2T2Zmc2V0XTsKICAgICAgICBpID0gcHJldk9mZnNldDsKICAgICAgfQogICAgICBfdGFibGVbX2hlYWRdID0gbnVsbDsKICAgICAgX2hlYWQgPSAoX2hlYWQgKyAxKSAmIG1hc2s7CiAgICAgIHJldHVybiAob2Zmc2V0ICsgMSkgJiBtYXNrOwogICAgfSBlbHNlIHsKICAgICAgX3RhaWwgPSAoX3RhaWwgLSAxKSAmIG1hc2s7CiAgICAgIGludCBpID0gb2Zmc2V0OwogICAgICB3aGlsZSAoaSAhPSBfdGFpbCkgewogICAgICAgIGludCBuZXh0T2Zmc2V0ID0gKGkgKyAxKSAmIG1hc2s7CiAgICAgICAgX3RhYmxlW2ldID0gX3RhYmxlW25leHRPZmZzZXRdOwogICAgICAgIGkgPSBuZXh0T2Zmc2V0OwogICAgICB9CiAgICAgIF90YWJsZVtfdGFpbF0gPSBudWxsOwogICAgICByZXR1cm4gb2Zmc2V0OwogICAgfQogIH0KCiAgLy8vIEdyb3cgdGhlIHRhYmxlIHdoZW4gZnVsbC4KICB2b2lkIF9ncm93KCkgewogICAgTGlzdDxFPiBuZXdUYWJsZSA9IExpc3Q8RT4oX3RhYmxlLmxlbmd0aCAqIDIpOwogICAgaW50IHNwbGl0ID0gX3RhYmxlLmxlbmd0aCAtIF9oZWFkOwogICAgbmV3VGFibGUuc2V0UmFuZ2UoMCwgc3BsaXQsIF90YWJsZSwgX2hlYWQpOwogICAgbmV3VGFibGUuc2V0UmFuZ2Uoc3BsaXQsIHNwbGl0ICsgX2hlYWQsIF90YWJsZSwgMCk7CiAgICBfaGVhZCA9IDA7CiAgICBfdGFpbCA9IF90YWJsZS5sZW5ndGg7CiAgICBfdGFibGUgPSBuZXdUYWJsZTsKICB9CgogIGludCBfd3JpdGVUb0xpc3QoTGlzdDxFPiB0YXJnZXQpIHsKICAgIGFzc2VydCh0YXJnZXQubGVuZ3RoID49IGxlbmd0aCk7CiAgICBpZiAoX2hlYWQgPD0gX3RhaWwpIHsKICAgICAgaW50IGxlbmd0aCA9IF90YWlsIC0gX2hlYWQ7CiAgICAgIHRhcmdldC5zZXRSYW5nZSgwLCBsZW5ndGgsIF90YWJsZSwgX2hlYWQpOwogICAgICByZXR1cm4gbGVuZ3RoOwogICAgfSBlbHNlIHsKICAgICAgaW50IGZpcnN0UGFydFNpemUgPSBfdGFibGUubGVuZ3RoIC0gX2hlYWQ7CiAgICAgIHRhcmdldC5zZXRSYW5nZSgwLCBmaXJzdFBhcnRTaXplLCBfdGFibGUsIF9oZWFkKTsKICAgICAgdGFyZ2V0LnNldFJhbmdlKGZpcnN0UGFydFNpemUsIGZpcnN0UGFydFNpemUgKyBfdGFpbCwgX3RhYmxlLCAwKTsKICAgICAgcmV0dXJuIF90YWlsICsgZmlyc3RQYXJ0U2l6ZTsKICAgIH0KICB9CgogIC8vLyBHcm93cyB0aGUgdGFibGUgZXZlbiBpZiBpdCBpcyBub3QgZnVsbC4KICB2b2lkIF9wcmVHcm93KGludCBuZXdFbGVtZW50Q291bnQpIHsKICAgIGFzc2VydChuZXdFbGVtZW50Q291bnQgPj0gbGVuZ3RoKTsKCiAgICAvLyBBZGQgc29tZSBleHRyYSByb29tIHRvIGVuc3VyZSB0aGF0IHRoZXJlJ3Mgcm9vbSBmb3IgbW9yZSBlbGVtZW50cyBhZnRlcgogICAgLy8gZXhwYW5zaW9uLgogICAgbmV3RWxlbWVudENvdW50ICs9IG5ld0VsZW1lbnRDb3VudCA+PiAxOwogICAgaW50IG5ld0NhcGFjaXR5ID0gX25leHRQb3dlck9mMihuZXdFbGVtZW50Q291bnQpOwogICAgTGlzdDxFPiBuZXdUYWJsZSA9IExpc3Q8RT4obmV3Q2FwYWNpdHkpOwogICAgX3RhaWwgPSBfd3JpdGVUb0xpc3QobmV3VGFibGUpOwogICAgX3RhYmxlID0gbmV3VGFibGU7CiAgICBfaGVhZCA9IDA7CiAgfQp9CgovLy8gSXRlcmF0b3IgZm9yIGEgW0xpc3RRdWV1ZV0uCi8vLwovLy8gQ29uc2lkZXJzIGFueSBhZGQgb3IgcmVtb3ZlIG9wZXJhdGlvbiBhIGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uLgpjbGFzcyBfTGlzdFF1ZXVlSXRlcmF0b3I8RT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgTGlzdFF1ZXVlPEU+IF9xdWV1ZTsKICBmaW5hbCBpbnQgX2VuZDsKICBmaW5hbCBpbnQgX21vZGlmaWNhdGlvbkNvdW50OwogIGludCBfcG9zaXRpb247CiAgRSBfY3VycmVudDsKCiAgX0xpc3RRdWV1ZUl0ZXJhdG9yKExpc3RRdWV1ZTxFPiBxdWV1ZSkKICAgICAgOiBfcXVldWUgPSBxdWV1ZSwKICAgICAgICBfZW5kID0gcXVldWUuX3RhaWwsCiAgICAgICAgX21vZGlmaWNhdGlvbkNvdW50ID0gcXVldWUuX21vZGlmaWNhdGlvbkNvdW50LAogICAgICAgIF9wb3NpdGlvbiA9IHF1ZXVlLl9oZWFkOwoKICBFIGdldCBjdXJyZW50ID0+IF9jdXJyZW50OwoKICBib29sIG1vdmVOZXh0KCkgewogICAgX3F1ZXVlLl9jaGVja01vZGlmaWNhdGlvbihfbW9kaWZpY2F0aW9uQ291bnQpOwogICAgaWYgKF9wb3NpdGlvbiA9PSBfZW5kKSB7CiAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2N1cnJlbnQgPSBfcXVldWUuX3RhYmxlW19wb3NpdGlvbl07CiAgICBfcG9zaXRpb24gPSAoX3Bvc2l0aW9uICsgMSkgJiAoX3F1ZXVlLl90YWJsZS5sZW5ndGggLSAxKTsKICAgIHJldHVybiB0cnVlOwogIH0KfQqDeQBOTjwBGQFIRxMETE0XTg9KO0AXIgExBkw+BjVIRg4pIEIKPQEnBkw+PAEqBkUlBkdIBkpPDjtOAU8GSEdFBkpMQhoWATsGPhMBOQY+EgEyGgEsGQEsFQE6BkUtHQFDQyUBPQY+KgFBBj4qAU0QAgE0FhIBKRYeNTEEARNERBYaBAIBSDZRIA0BKAE8FTkEAT4WPQQBDw8UBAE9PgE5NgIBQARKHkU5Th9EATMBFkQEARdIBAEPAR0BKjIoBAEuNigEAgE7BDoySEMfARUQMAQBFhEwBAEQEw8UBAEPMBYEATcRBAIBRhIzOksuSVAaFgQBNBEEAUsQLAQBRRMsBAIBPARCRSsZARg1BAE/Bkw+BjVIRg4pIFAKNiwgFwYRBAE1Bkw+ODABNCMBGh8VBAEbHhUEARYfFQQBJiYhFwYEARNEJBUTBAEUQSUVEwQBGjwrKywtMQgUGRkVCB8GEgQBPDwrKywtMQhMMBkZCBQGBAErGQQBKxoEARBBIAQBD0QfBAERPTtDPh0GKgQBOgZMUAZATjArIgQBOQZMTwZBTjAqJgQBFTgEARElKRcEAUgGTEopBlFCMAZLTU9NSiBGPCs0OzJGSxIXKyAyMQgUBgQBLzUEAUoCAT0rKQ4BRR4pARQsFxkYFAY8PTsGJikRBAEdAgEYBElPLAQ9QSoSDQ0eAR0GThAjExRKKzA4BionBAE2Bk8eBjVIRg4pIEgKLhwkNSwpJwgcFA0oMSQINCghCBUGBAEsBk8eMCgBGQE0OwEkMEkULQYEASYBOwEQQBoEAQ9ANgQBEUA6GgQBGy06BAErEhQlDR4GGBEEARsBFhEEASYfHyIgMCVFPRsPNy4jPR0RLj04HAoIHA0xBgQBHkkdHhQeFQgGEgQBQTATGR0+LRQYMg8rCAYEAS0GTjQrHgQBMQZONCsfBAERGksaCBkcBgQBSgEWARoRBAEbLxshGgQBFEAaHhovEwQBE0AaLx4aEwQBIAEqBidHATQGOwYnKRggDy4qGwYEAT07Oy8GBAFFGR0vIRoEATUGTiAGTEkYHCIxLycbFhspKBgIHCIiDSIWGykoGAgcFQYEASARMycwOA8bFwQBJSUaIjEVDTE4SCQGBAEuJycBTxItNi0kFw8EAgEgBEU1HRIgEQ4BKRgcNyEBHQEUMx0XFAYpPhEEAgEaZGFydDpjb2xsZWN0aW9uL3F1ZXVlLmRhcnQwb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbnZlcnQvY29udmVydC5kYXJ0ibwvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vCi8vLyBFbmNvZGVycyBhbmQgZGVjb2RlcnMgZm9yIGNvbnZlcnRpbmcgYmV0d2VlbiBkaWZmZXJlbnQgZGF0YSByZXByZXNlbnRhdGlvbnMsCi8vLyBpbmNsdWRpbmcgSlNPTiBhbmQgVVRGLTguCi8vLwovLy8gSW4gYWRkaXRpb24gdG8gY29udmVydGVycyBmb3IgY29tbW9uIGRhdGEgcmVwcmVzZW50YXRpb25zLCB0aGlzIGxpYnJhcnkKLy8vIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGltcGxlbWVudGluZyBjb252ZXJ0ZXJzIGluIGEgd2F5IHdoaWNoIG1ha2VzIHRoZW0gZWFzeSB0bwovLy8gY2hhaW4gYW5kIHRvIHVzZSB3aXRoIHN0cmVhbXMuCi8vLwovLy8gVG8gdXNlIHRoaXMgbGlicmFyeSBpbiB5b3VyIGNvZGU6Ci8vLwovLy8gICAgIGltcG9ydCAnZGFydDpjb252ZXJ0JzsKLy8vCi8vLyBUd28gY29tbW9ubHkgdXNlZCBjb252ZXJ0ZXJzIGFyZSB0aGUgdG9wLWxldmVsIGluc3RhbmNlcyBvZgovLy8gW0pzb25Db2RlY10gYW5kIFtVdGY4Q29kZWNdLCBuYW1lZCBbanNvbl0gYW5kIFt1dGY4XSwgcmVzcGVjdGl2ZWx5LgovLy8KLy8vIEpTT04gaXMgYSBzaW1wbGUgdGV4dCBmb3JtYXQgZm9yIHJlcHJlc2VudGluZwovLy8gc3RydWN0dXJlZCBvYmplY3RzIGFuZCBjb2xsZWN0aW9ucy4KLy8vIFRoZSBKU09OIGVuY29kZXIvZGVjb2RlciB0cmFuc2Zvcm1zIGJldHdlZW4gc3RyaW5ncyBhbmQKLy8vIG9iamVjdCBzdHJ1Y3R1cmVzLCBzdWNoIGFzIGxpc3RzIGFuZCBtYXBzLCB1c2luZyB0aGUgSlNPTiBmb3JtYXQuCi8vLwovLy8gVVRGLTggaXMgYSBjb21tb24gdmFyaWFibGUtd2lkdGggZW5jb2RpbmcgdGhhdCBjYW4gcmVwcmVzZW50Ci8vLyBldmVyeSBjaGFyYWN0ZXIgaW4gdGhlIFVuaWNvZGUgY2hhcmFjdGVyIHNldC4KLy8vIFRoZSBVVEYtOCBlbmNvZGVyL2RlY29kZXIgdHJhbnNmb3JtcyBiZXR3ZWVuIFN0cmluZ3MgYW5kIGJ5dGVzLgovLy8KLy8vIENvbnZlcnRlcnMgYXJlIG9mdGVuIHVzZWQgd2l0aCBzdHJlYW1zCi8vLyB0byB0cmFuc2Zvcm0gdGhlIGRhdGEgdGhhdCBjb21lcyB0aHJvdWdoIHRoZSBzdHJlYW0KLy8vIGFzIGl0IGJlY29tZXMgYXZhaWxhYmxlLgovLy8gVGhlIGZvbGxvd2luZyBjb2RlIHVzZXMgdHdvIGNvbnZlcnRlcnMuCi8vLyBUaGUgZmlyc3QgaXMgYSBVVEYtOCBkZWNvZGVyLCB3aGljaCBjb252ZXJ0cyB0aGUgZGF0YSBmcm9tIGJ5dGVzIHRvIFVURi04Ci8vLyBhcyBpdCdzIHJlYWQgZnJvbSBhIGZpbGUsCi8vLyBUaGUgc2Vjb25kIGlzIGFuIGluc3RhbmNlIG9mIFtMaW5lU3BsaXR0ZXJdLAovLy8gd2hpY2ggc3BsaXRzIHRoZSBkYXRhIG9uIG5ld2xpbmUgYm91bmRhcmllcy4KLy8vCi8vLyAgICAgdmFyIGxpbmVOdW1iZXIgPSAxOwovLy8gICAgIHZhciBzdHJlYW0gPSBGaWxlKCdxdW90ZXMudHh0Jykub3BlblJlYWQoKTsKLy8vCi8vLyAgICAgc3RyZWFtLnRyYW5zZm9ybSh1dGY4LmRlY29kZXIpCi8vLyAgICAgICAgICAgLnRyYW5zZm9ybShjb25zdCBMaW5lU3BsaXR0ZXIoKSkKLy8vICAgICAgICAgICAubGlzdGVuKChsaW5lKSB7Ci8vLyAgICAgICAgICAgICBpZiAoc2hvd0xpbmVOdW1iZXJzKSB7Ci8vLyAgICAgICAgICAgICAgIHN0ZG91dC53cml0ZSgnJHtsaW5lTnVtYmVyKyt9ICcpOwovLy8gICAgICAgICAgICAgfQovLy8gICAgICAgICAgICAgc3Rkb3V0LndyaXRlbG4obGluZSk7Ci8vLyAgICAgICAgICAgfSk7Ci8vLwovLy8gU2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgW0NvZGVjXSBhbmQgW0NvbnZlcnRlcl0gY2xhc3NlcwovLy8gZm9yIGluZm9ybWF0aW9uIGFib3V0IGNyZWF0aW5nIHlvdXIgb3duIGNvbnZlcnRlcnMuCi8vLwovLy8ge0BjYXRlZ29yeSBDb3JlfQpsaWJyYXJ5IGRhcnQuY29udmVydDsKCmltcG9ydCAnZGFydDphc3luYyc7CmltcG9ydCAnZGFydDp0eXBlZF9kYXRhJzsKaW1wb3J0ICdkYXJ0Ol9pbnRlcm5hbCcgc2hvdyBDYXN0Q29udmVydGVyLCBwYXJzZUhleEJ5dGU7CgpwYXJ0ICdhc2NpaS5kYXJ0JzsKcGFydCAnYmFzZTY0LmRhcnQnOwpwYXJ0ICdieXRlX2NvbnZlcnNpb24uZGFydCc7CnBhcnQgJ2NodW5rZWRfY29udmVyc2lvbi5kYXJ0JzsKcGFydCAnY29kZWMuZGFydCc7CnBhcnQgJ2NvbnZlcnRlci5kYXJ0JzsKcGFydCAnZW5jb2RpbmcuZGFydCc7CnBhcnQgJ2h0bWxfZXNjYXBlLmRhcnQnOwpwYXJ0ICdqc29uLmRhcnQnOwpwYXJ0ICdsYXRpbjEuZGFydCc7CnBhcnQgJ2xpbmVfc3BsaXR0ZXIuZGFydCc7CnBhcnQgJ3N0cmluZ19jb252ZXJzaW9uLmRhcnQnOwpwYXJ0ICd1dGYuZGFydCc7CkoATk48AQRRHgRMUyMEJgQfBEBIBDIoPEYEQTJEBCs4HSxOHjExBBw0BCcvHyc0EiYSBEI4BBUWARUaOgETFB0gExcWGRIUGx8RAQxkYXJ0OmNvbnZlcnQyb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9jb252ZXJ0X3BhdGNoLmRhcnTAAOeyLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBOb3RlOiB0aGUgVk0gY29uY2F0ZW5hdGVzIGFsbCBwYXRjaCBmaWxlcyBpbnRvIGEgc2luZ2xlIHBhdGNoIGZpbGUuIFRoaXMKLy8vIGZpbGUgaXMgdGhlIGZpcnN0IHBhdGNoIGluICJkYXJ0OmNvbnZlcnQiIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cwovLy8gdXNlZCBieSBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYQovLy8gc2hhcmVkIGZyb250IGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgUE9XRVJTX09GX1RFTiwgcGF0Y2gsIENsYXNzSUQ7CgppbXBvcnQgImRhcnQ6dHlwZWRfZGF0YSIgc2hvdyBVaW50OExpc3QsIFVpbnQxNkxpc3Q7CgovLy8gVGhpcyBwYXRjaCBsaWJyYXJ5IGhhcyBubyBhZGRpdGlvbmFsIHBhcnRzLgoKLy8gSlNPTiBjb252ZXJzaW9uLgoKQHBhdGNoCl9wYXJzZUpzb24oU3RyaW5nIHNvdXJjZSwgcmV2aXZlcihrZXksIHZhbHVlKSkgewogIF9CdWlsZEpzb25MaXN0ZW5lciBsaXN0ZW5lcjsKICBpZiAocmV2aXZlciA9PSBudWxsKSB7CiAgICBsaXN0ZW5lciA9IG5ldyBfQnVpbGRKc29uTGlzdGVuZXIoKTsKICB9IGVsc2UgewogICAgbGlzdGVuZXIgPSBuZXcgX1Jldml2ZXJKc29uTGlzdGVuZXIocmV2aXZlcik7CiAgfQogIHZhciBwYXJzZXIgPSBuZXcgX0pzb25TdHJpbmdQYXJzZXIobGlzdGVuZXIpOwogIHBhcnNlci5jaHVuayA9IHNvdXJjZTsKICBwYXJzZXIuY2h1bmtFbmQgPSBzb3VyY2UubGVuZ3RoOwogIHBhcnNlci5wYXJzZSgwKTsKICBwYXJzZXIuY2xvc2UoKTsKICByZXR1cm4gbGlzdGVuZXIucmVzdWx0Owp9CgpAcGF0Y2gKY2xhc3MgVXRmOERlY29kZXIgewogIEBwYXRjaAogIENvbnZlcnRlcjxMaXN0PGludD4sIFQ+IGZ1c2U8VD4oQ29udmVydGVyPFN0cmluZywgVD4gbmV4dCkgewogICAgaWYgKG5leHQgaXMgSnNvbkRlY29kZXIpIHsKICAgICAgcmV0dXJuIG5ldyBfSnNvblV0ZjhEZWNvZGVyKAogICAgICAgICAgICAgIChuZXh0IGFzIEpzb25EZWNvZGVyKS5fcmV2aXZlciwgdGhpcy5fYWxsb3dNYWxmb3JtZWQpCiAgICAgICAgICBhcyBkeW5hbWljLyo9Q29udmVydGVyPExpc3Q8aW50PiwgVD4qLzsKICAgIH0KICAgIC8vIFRPRE8obHJuKTogUmVjb2duaXplIGEgZnVzZWQgZGVjb2RlciB3aGVyZSB0aGUgbmV4dCBzdGVwIGlzIEpzb25EZWNvZGVyLgogICAgcmV0dXJuIHN1cGVyLmZ1c2U8VD4obmV4dCk7CiAgfQoKICAvLyBBbGxvdyBpbnRlcmNlcHRpbmcgb2YgVVRGLTggZGVjb2Rpbmcgd2hlbiBidWlsdC1pbiBsaXN0cyBhcmUgcGFzc2VkLgogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX2NvbnZlcnRJbnRlcmNlcHRlZCgKICAgICAgYm9vbCBhbGxvd01hbGZvcm1lZCwgTGlzdDxpbnQ+IGNvZGVVbml0cywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICByZXR1cm4gbnVsbDsgLy8gVGhpcyBjYWxsIHdhcyBub3QgaW50ZXJjZXB0ZWQuCiAgfQp9CgpjbGFzcyBfSnNvblV0ZjhEZWNvZGVyIGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgT2JqZWN0PiB7CiAgZmluYWwgRnVuY3Rpb24oT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSBfcmV2aXZlcjsKICBmaW5hbCBib29sIF9hbGxvd01hbGZvcm1lZDsKCiAgX0pzb25VdGY4RGVjb2Rlcih0aGlzLl9yZXZpdmVyLCB0aGlzLl9hbGxvd01hbGZvcm1lZCk7CgogIE9iamVjdCBjb252ZXJ0KExpc3Q8aW50PiBpbnB1dCkgewogICAgdmFyIHBhcnNlciA9IF9Kc29uVXRmOERlY29kZXJTaW5rLl9jcmVhdGVQYXJzZXIoX3Jldml2ZXIsIF9hbGxvd01hbGZvcm1lZCk7CiAgICBwYXJzZXIuY2h1bmsgPSBpbnB1dDsKICAgIHBhcnNlci5jaHVua0VuZCA9IGlucHV0Lmxlbmd0aDsKICAgIHBhcnNlci5wYXJzZSgwKTsKICAgIHBhcnNlci5jbG9zZSgpOwogICAgcmV0dXJuIHBhcnNlci5yZXN1bHQ7CiAgfQoKICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPE9iamVjdD4gc2luaykgewogICAgcmV0dXJuIG5ldyBfSnNvblV0ZjhEZWNvZGVyU2luayhfcmV2aXZlciwgc2luaywgX2FsbG93TWFsZm9ybWVkKTsKICB9Cn0KCi8vLy8gSW1wbGVtZW50YXRpb24gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KCi8vIFNpbXBsZSBBUEkgZm9yIEpTT04gcGFyc2luZy4KCi8qKgogKiBMaXN0ZW5lciBmb3IgcGFyc2luZyBldmVudHMgZnJvbSBbX0NodW5rZWRKc29uUGFyc2VyXS4KICovCmFic3RyYWN0IGNsYXNzIF9Kc29uTGlzdGVuZXIgewogIHZvaWQgaGFuZGxlU3RyaW5nKFN0cmluZyB2YWx1ZSkge30KICB2b2lkIGhhbmRsZU51bWJlcihudW0gdmFsdWUpIHt9CiAgdm9pZCBoYW5kbGVCb29sKGJvb2wgdmFsdWUpIHt9CiAgdm9pZCBoYW5kbGVOdWxsKCkge30KICB2b2lkIGJlZ2luT2JqZWN0KCkge30KICB2b2lkIHByb3BlcnR5TmFtZSgpIHt9CiAgdm9pZCBwcm9wZXJ0eVZhbHVlKCkge30KICB2b2lkIGVuZE9iamVjdCgpIHt9CiAgdm9pZCBiZWdpbkFycmF5KCkge30KICB2b2lkIGFycmF5RWxlbWVudCgpIHt9CiAgdm9pZCBlbmRBcnJheSgpIHt9CgogIC8qKgogICAqIFJlYWQgb3V0IHRoZSBmaW5hbCByZXN1bHQgb2YgcGFyc2luZyBhIEpTT04gc3RyaW5nLgogICAqCiAgICogTXVzdCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBlbnRpcmUgaW5wdXQgaGFzIGJlZW4gcGFyc2VkLgogICAqLwogIGdldCByZXN1bHQ7Cn0KCi8qKgogKiBBIFtfSnNvbkxpc3RlbmVyXSB0aGF0IGJ1aWxkcyBkYXRhIG9iamVjdHMgZnJvbSB0aGUgcGFyc2VyIGV2ZW50cy4KICoKICogVGhpcyBpcyBhIHNpbXBsZSBzdGFjay1iYXNlZCBvYmplY3QgYnVpbGRlci4gSXQga2VlcHMgdGhlIG1vc3QgcmVjZW50bHkKICogc2VlbiB2YWx1ZSBpbiBhIHZhcmlhYmxlLCBhbmQgdXNlcyBpdCBkZXBlbmRpbmcgb24gdGhlIGZvbGxvd2luZyBldmVudC4KICovCmNsYXNzIF9CdWlsZEpzb25MaXN0ZW5lciBleHRlbmRzIF9Kc29uTGlzdGVuZXIgewogIC8qKgogICAqIFN0YWNrIHVzZWQgdG8gaGFuZGxlIG5lc3RlZCBjb250YWluZXJzLgogICAqCiAgICogVGhlIGN1cnJlbnQgY29udGFpbmVyIGlzIHB1c2hlZCBvbiB0aGUgc3RhY2sgd2hlbiBhIG5ldyBvbmUgaXMKICAgKiBzdGFydGVkLiBJZiB0aGUgY29udGFpbmVyIGlzIGEgW01hcF0sIHRoZXJlIGlzIGFsc28gYSBjdXJyZW50IFtrZXldCiAgICogd2hpY2ggaXMgYWxzbyBzdG9yZWQgb24gdGhlIHN0YWNrLgogICAqLwogIExpc3Qgc3RhY2sgPSBbXTsKICAvKiogVGhlIGN1cnJlbnQgW01hcF0gb3IgW0xpc3RdIGJlaW5nIGJ1aWx0LiAqLwogIHZhciBjdXJyZW50Q29udGFpbmVyOwogIC8qKiBUaGUgbW9zdCByZWNlbnRseSByZWFkIHByb3BlcnR5IGtleS4gKi8KICBTdHJpbmcga2V5OwogIC8qKiBUaGUgbW9zdCByZWNlbnRseSByZWFkIHZhbHVlLiAqLwogIHZhciB2YWx1ZTsKCiAgLyoqIFB1c2hlcyB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb250YWluZXIgKGFuZCBrZXksIGlmIGEgW01hcF0pLiAqLwogIHZvaWQgcHVzaENvbnRhaW5lcigpIHsKICAgIGlmIChjdXJyZW50Q29udGFpbmVyIGlzIE1hcCkgc3RhY2suYWRkKGtleSk7CiAgICBzdGFjay5hZGQoY3VycmVudENvbnRhaW5lcik7CiAgfQoKICAvKiogUG9wcyB0aGUgdG9wIGNvbnRhaW5lciBmcm9tIHRoZSBbc3RhY2tdLCBpbmNsdWRpbmcgYSBrZXkgaWYgYXBwbGljYWJsZS4gKi8KICB2b2lkIHBvcENvbnRhaW5lcigpIHsKICAgIHZhbHVlID0gY3VycmVudENvbnRhaW5lcjsKICAgIGN1cnJlbnRDb250YWluZXIgPSBzdGFjay5yZW1vdmVMYXN0KCk7CiAgICBpZiAoY3VycmVudENvbnRhaW5lciBpcyBNYXApIGtleSA9IHN0YWNrLnJlbW92ZUxhc3QoKTsKICB9CgogIHZvaWQgaGFuZGxlU3RyaW5nKFN0cmluZyB2YWx1ZSkgewogICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogIH0KCiAgdm9pZCBoYW5kbGVOdW1iZXIobnVtIHZhbHVlKSB7CiAgICB0aGlzLnZhbHVlID0gdmFsdWU7CiAgfQoKICB2b2lkIGhhbmRsZUJvb2woYm9vbCB2YWx1ZSkgewogICAgdGhpcy52YWx1ZSA9IHZhbHVlOwogIH0KCiAgdm9pZCBoYW5kbGVOdWxsKCkgewogICAgdGhpcy52YWx1ZSA9IG51bGw7CiAgfQoKICB2b2lkIGJlZ2luT2JqZWN0KCkgewogICAgcHVzaENvbnRhaW5lcigpOwogICAgY3VycmVudENvbnRhaW5lciA9IDxTdHJpbmcsIGR5bmFtaWM+e307CiAgfQoKICB2b2lkIHByb3BlcnR5TmFtZSgpIHsKICAgIGtleSA9IHZhbHVlOwogICAgdmFsdWUgPSBudWxsOwogIH0KCiAgdm9pZCBwcm9wZXJ0eVZhbHVlKCkgewogICAgTWFwIG1hcCA9IGN1cnJlbnRDb250YWluZXI7CiAgICBtYXBba2V5XSA9IHZhbHVlOwogICAga2V5ID0gdmFsdWUgPSBudWxsOwogIH0KCiAgdm9pZCBlbmRPYmplY3QoKSB7CiAgICBwb3BDb250YWluZXIoKTsKICB9CgogIHZvaWQgYmVnaW5BcnJheSgpIHsKICAgIHB1c2hDb250YWluZXIoKTsKICAgIGN1cnJlbnRDb250YWluZXIgPSBbXTsKICB9CgogIHZvaWQgYXJyYXlFbGVtZW50KCkgewogICAgY3VycmVudENvbnRhaW5lci5hZGQodmFsdWUpOwogICAgdmFsdWUgPSBudWxsOwogIH0KCiAgdm9pZCBlbmRBcnJheSgpIHsKICAgIHBvcENvbnRhaW5lcigpOwogIH0KCiAgLyoqIFJlYWQgb3V0IHRoZSBmaW5hbCByZXN1bHQgb2YgcGFyc2luZyBhIEpTT04gc3RyaW5nLiAqLwogIGdldCByZXN1bHQgewogICAgYXNzZXJ0KGN1cnJlbnRDb250YWluZXIgPT0gbnVsbCk7CiAgICByZXR1cm4gdmFsdWU7CiAgfQp9CgpjbGFzcyBfUmV2aXZlckpzb25MaXN0ZW5lciBleHRlbmRzIF9CdWlsZEpzb25MaXN0ZW5lciB7CiAgZmluYWwgRnVuY3Rpb24oT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSByZXZpdmVyOwogIF9SZXZpdmVySnNvbkxpc3RlbmVyKHRoaXMucmV2aXZlcik7CgogIHZvaWQgYXJyYXlFbGVtZW50KCkgewogICAgTGlzdCBsaXN0ID0gY3VycmVudENvbnRhaW5lcjsKICAgIHZhbHVlID0gcmV2aXZlcihsaXN0Lmxlbmd0aCwgdmFsdWUpOwogICAgc3VwZXIuYXJyYXlFbGVtZW50KCk7CiAgfQoKICB2b2lkIHByb3BlcnR5VmFsdWUoKSB7CiAgICB2YWx1ZSA9IHJldml2ZXIoa2V5LCB2YWx1ZSk7CiAgICBzdXBlci5wcm9wZXJ0eVZhbHVlKCk7CiAgfQoKICBnZXQgcmVzdWx0IHsKICAgIHJldHVybiByZXZpdmVyKG51bGwsIHZhbHVlKTsKICB9Cn0KCi8qKgogKiBCdWZmZXIgaG9sZGluZyBwYXJ0cyBvZiBhIG51bWVyYWwuCiAqCiAqIFRoZSBidWZmZXIgY29udGFpbnMgdGhlIGNoYXJhY3RlcnMgb2YgYSBKU09OIG51bWJlci4KICogVGhlc2UgYXJlIGFsbCBBU0NJSSwgc28gYW4gW1VpbnQ4TGlzdF0gaXMgdXNlZCBhcyBiYWNraW5nIHN0b3JlLgogKgogKiBUaGlzIGJ1ZmZlciBpcyB1c2VkIHdoZW4gYSBKU09OIG51bWJlciBpcyBzcGxpdCBiZXR3ZWVuIHNlcGFyYXRlIGNodW5rcy4KICoKICovCmNsYXNzIF9OdW1iZXJCdWZmZXIgewogIHN0YXRpYyBjb25zdCBpbnQgbWluQ2FwYWNpdHkgPSAxNjsKICBzdGF0aWMgY29uc3QgaW50IGtEZWZhdWx0T3ZlcmhlYWQgPSA1OwogIFVpbnQ4TGlzdCBsaXN0OwogIGludCBsZW5ndGggPSAwOwogIF9OdW1iZXJCdWZmZXIoaW50IGluaXRpYWxDYXBhY2l0eSkKICAgICAgOiBsaXN0ID0gbmV3IFVpbnQ4TGlzdChfaW5pdGlhbENhcGFjaXR5KGluaXRpYWxDYXBhY2l0eSkpOwoKICBpbnQgZ2V0IGNhcGFjaXR5ID0+IGxpc3QubGVuZ3RoOwoKICAvLyBQaWNrIGFuIGluaXRpYWwgY2FwYWNpdHkgZ3JlYXRlciB0aGFuIHRoZSBmaXJzdCBwYXJ0J3Mgc2l6ZS4KICAvLyBUaGUgdHlwaWNhbCB1c2UgY2FzZSBoYXMgdHdvIHBhcnRzLCB0aGlzIGlzIHRoZSBhdHRlbXB0IGF0CiAgLy8gZ3Vlc3NpbmcgdGhlIHNpemUgb2YgdGhlIHNlY29uZCBwYXJ0IHdpdGhvdXQgb3ZlcmRvaW5nIGl0LgogIC8vIFRoZSBkZWZhdWx0IGVzdGltYXRlIG9mIHRoZSBzZWNvbmQgcGFydCBpcyBba0RlZmF1bHRPdmVyaGVhZF0sCiAgLy8gdGhlbiByb3VuZCB0byBtdWx0aXBsdW0gb2YgZm91ciwgYW5kIHJldHVybiB0aGUgcmVzdWx0LAogIC8vIG9yIFttaW5DYXBhY2l0eV0gaWYgdGhhdCBpcyBncmVhdGVyLgogIHN0YXRpYyBpbnQgX2luaXRpYWxDYXBhY2l0eShpbnQgbWluQ2FwYWNpdHkpIHsKICAgIG1pbkNhcGFjaXR5ICs9IGtEZWZhdWx0T3ZlcmhlYWQ7CiAgICBpZiAobWluQ2FwYWNpdHkgPCBtaW5DYXBhY2l0eSkgcmV0dXJuIG1pbkNhcGFjaXR5OwogICAgbWluQ2FwYWNpdHkgPSAobWluQ2FwYWNpdHkgKyAzKSAmIH4zOyAvLyBSb3VuZCB0byBtdWx0aXBsZSBvZiBmb3VyLgogICAgcmV0dXJuIG1pbkNhcGFjaXR5OwogIH0KCiAgLy8gR3Jvd3MgdG8gdGhlIGV4YWN0IHNpemUgYXNrZWQgZm9yLgogIHZvaWQgZW5zdXJlQ2FwYWNpdHkoaW50IG5ld0NhcGFjaXR5KSB7CiAgICBVaW50OExpc3QgbGlzdCA9IHRoaXMubGlzdDsKICAgIGlmIChuZXdDYXBhY2l0eSA8PSBsaXN0Lmxlbmd0aCkgcmV0dXJuOwogICAgVWludDhMaXN0IG5ld0xpc3QgPSBuZXcgVWludDhMaXN0KG5ld0NhcGFjaXR5KTsKICAgIG5ld0xpc3Quc2V0UmFuZ2UoMCwgbGlzdC5sZW5ndGgsIGxpc3QsIDApOwogICAgdGhpcy5saXN0ID0gbmV3TGlzdDsKICB9CgogIFN0cmluZyBnZXRTdHJpbmcoKSB7CiAgICBTdHJpbmcgcmVzdWx0ID0gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGxpc3QsIDAsIGxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gVE9ETyhscm4pOiBTZWUgaWYgcGFyc2luZyBvZiBudW1iZXJzIGNhbiBiZSBhYnN0cmFjdGVkIHRvIHNvbWV0aGluZwogIC8vIG5vdCBvbmx5IHdvcmtpbmcgb24gc3RyaW5ncywgYnV0IGFsc28gb24gY2hhci1jb2RlIGxpc3RzLCB3aXRob3V0IGxvc3NpbmcKICAvLyBwZXJmb3JtYW5jZS4KICBudW0gcGFyc2VOdW0oKSA9PiBudW0ucGFyc2UoZ2V0U3RyaW5nKCkpOwogIGRvdWJsZSBwYXJzZURvdWJsZSgpID0+IGRvdWJsZS5wYXJzZShnZXRTdHJpbmcoKSk7Cn0KCi8qKgogKiBDaHVua2VkIEpTT04gcGFyc2VyLgogKgogKiBSZWNlaXZlcyBpbnB1dHMgaW4gY2h1bmtzLCBnaXZlcyBhY2Nlc3MgdG8gaW5kaXZpZHVhbCBwYXJ0cyBvZiB0aGUgaW5wdXQsCiAqIGFuZCBzdG9yZXMgaW5wdXQgc3RhdGUgYmV0d2VlbiBjaHVua3MuCiAqCiAqIEltcGxlbWVudGF0aW9ucyBpbmNsdWRlIFtTdHJpbmddIGFuZCBVVEYtOCBwYXJzZXJzLgogKi8KYWJzdHJhY3QgY2xhc3MgX0NodW5rZWRKc29uUGFyc2VyPFQ+IHsKICAvLyBBIHNpbXBsZSBub24tcmVjdXJzaXZlIHN0YXRlLWJhc2VkIHBhcnNlciBmb3IgSlNPTi4KICAvLwogIC8vIExpdGVyYWwgdmFsdWVzIGFjY2VwdGVkIGluIHN0YXRlcyBBUlJBWV9FTVBUWSwgQVJSQVlfQ09NTUEsIE9CSkVDVF9DT0xPTgogIC8vIGFuZCBzdHJpbmdzIGFsc28gaW4gT0JKRUNUX0VNUFRZLCBPQkpFQ1RfQ09NTUEuCiAgLy8gICAgICAgICAgICAgICBWQUxVRSAgU1RSSU5HICA6ICAsICB9ICBdICAgICAgICBUcmFuc2l0aW9ucyB0bwogIC8vIEVNUFRZICAgICAgICAgICAgWCAgICAgIFggICAgICAgICAgICAgICAgICAgLT4gRU5ECiAgLy8gQVJSQVlfRU1QVFkgICAgICBYICAgICAgWCAgICAgICAgICAgICBAICAgICAtPiBBUlJBWV9WQUxVRSAvIHBvcAogIC8vIEFSUkFZX1ZBTFVFICAgICAgICAgICAgICAgICAgICAgQCAgICAgQCAgICAgLT4gQVJSQVlfQ09NTUEgLyBwb3AKICAvLyBBUlJBWV9DT01NQSAgICAgIFggICAgICBYICAgICAgICAgICAgICAgICAgIC0+IEFSUkFZX1ZBTFVFCiAgLy8gT0JKRUNUX0VNUFRZICAgICAgICAgICAgWCAgICAgICAgICBAICAgICAgICAtPiBPQkpFQ1RfS0VZIC8gcG9wCiAgLy8gT0JKRUNUX0tFWSAgICAgICAgICAgICAgICAgICBAICAgICAgICAgICAgICAtPiBPQkpFQ1RfQ09MT04KICAvLyBPQkpFQ1RfQ09MT04gICAgIFggICAgICBYICAgICAgICAgICAgICAgICAgIC0+IE9CSkVDVF9WQUxVRQogIC8vIE9CSkVDVF9WQUxVRSAgICAgICAgICAgICAgICAgICAgQCAgQCAgICAgICAgLT4gT0JKRUNUX0NPTU1BIC8gcG9wCiAgLy8gT0JKRUNUX0NPTU1BICAgICAgICAgICAgWCAgICAgICAgICAgICAgICAgICAtPiBPQkpFQ1RfS0VZCiAgLy8gRU5ECiAgLy8gU3RhcnRpbmcgYSBuZXcgYXJyYXkgb3Igb2JqZWN0IHdpbGwgcHVzaCB0aGUgY3VycmVudCBzdGF0ZS4gVGhlICJwb3AiCiAgLy8gYWJvdmUgbWVhbnMgcmVzdG9yaW5nIHRoaXMgc3RhdGUgYW5kIHRoZW4gbWFya2luZyBpdCBhcyBhbiBlbmRlZCB2YWx1ZS4KICAvLyBYIG1lYW5zIGdlbmVyaWMgaGFuZGxpbmcsIEAgbWVhbnMgc3BlY2lhbCBoYW5kbGluZyBmb3IganVzdCB0aGF0CiAgLy8gc3RhdGUgLSB0aGF0IGlzLCB2YWx1ZXMgYXJlIGhhbmRsZWQgZ2VuZXJpY2FsbHksIG9ubHkgcHVuY3R1YXRpb24KICAvLyBjYXJlcyBhYm91dCB0aGUgY3VycmVudCBzdGF0ZS4KICAvLyBWYWx1ZXMgZm9yIHN0YXRlcyBhcmUgY2hvc2VuIHNvIGJpdHMgMCBhbmQgMSB0ZWxsIHdoZXRoZXIKICAvLyBhIHN0cmluZy92YWx1ZSBpcyBhbGxvd2VkLCBhbmQgc2V0dGluZyBiaXRzIDAgdGhyb3VnaCAyIGFmdGVyIGEgdmFsdWUKICAvLyBnZXRzIHRvIHRoZSBuZXh0IHN0YXRlIChub3QgZW1wdHksIGRvZXNuJ3QgYWxsb3cgYSB2YWx1ZSkuCgogIC8vIFN0YXRlIGJ1aWxkaW5nLWJsb2NrIGNvbnN0YW50cy4KICBzdGF0aWMgY29uc3QgaW50IFRPUF9MRVZFTCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBJTlNJREVfQVJSQVkgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgSU5TSURFX09CSkVDVCA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBBRlRFUl9DT0xPTiA9IDM7IC8vIEFsd2F5cyBpbnNpZGUgb2JqZWN0LgoKICBzdGF0aWMgY29uc3QgaW50IEFMTE9XX1NUUklOR19NQVNLID0gODsgLy8gQWxsb3dlZCBpZiB6ZXJvLgogIHN0YXRpYyBjb25zdCBpbnQgQUxMT1dfVkFMVUVfTUFTSyA9IDQ7IC8vIEFsbG93ZWQgaWYgemVyby4KICBzdGF0aWMgY29uc3QgaW50IEFMTE9XX1ZBTFVFID0gMDsKICBzdGF0aWMgY29uc3QgaW50IFNUUklOR19PTkxZID0gNDsKICBzdGF0aWMgY29uc3QgaW50IE5PX1ZBTFVFUyA9IDEyOwoKICAvLyBPYmplY3RzIGFuZCBhcnJheXMgYXJlICJlbXB0eSIgdW50aWwgdGhlaXIgZmlyc3QgcHJvcGVydHkvZWxlbWVudC4KICAvLyBBdCB0aGlzIHBvc2l0aW9uLCB0aGV5IG1heSBlaXRoZXIgaGF2ZSBhbiBlbnRyeSBvciBhIGNsb3NlLWJyYWNrZXQuCiAgc3RhdGljIGNvbnN0IGludCBFTVBUWSA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBOT05fRU1QVFkgPSAxNjsKICBzdGF0aWMgY29uc3QgaW50IEVNUFRZX01BU0sgPSAxNjsgLy8gRW1wdHkgaWYgemVyby4KCiAgLy8gQWN0dWFsIHN0YXRlcyAgICAgICAgICAgICAgIDogQ29udGV4dCB8IElzIGVtcHR5PyB8IE5leHQ/CiAgc3RhdGljIGNvbnN0IGludCBTVEFURV9JTklUSUFMID0gVE9QX0xFVkVMIHwgRU1QVFkgfCBBTExPV19WQUxVRTsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX0VORCA9IFRPUF9MRVZFTCB8IE5PTl9FTVBUWSB8IE5PX1ZBTFVFUzsKCiAgc3RhdGljIGNvbnN0IGludCBTVEFURV9BUlJBWV9FTVBUWSA9IElOU0lERV9BUlJBWSB8IEVNUFRZIHwgQUxMT1dfVkFMVUU7CiAgc3RhdGljIGNvbnN0IGludCBTVEFURV9BUlJBWV9WQUxVRSA9IElOU0lERV9BUlJBWSB8IE5PTl9FTVBUWSB8IE5PX1ZBTFVFUzsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX0FSUkFZX0NPTU1BID0gSU5TSURFX0FSUkFZIHwgTk9OX0VNUFRZIHwgQUxMT1dfVkFMVUU7CgogIHN0YXRpYyBjb25zdCBpbnQgU1RBVEVfT0JKRUNUX0VNUFRZID0gSU5TSURFX09CSkVDVCB8IEVNUFRZIHwgU1RSSU5HX09OTFk7CiAgc3RhdGljIGNvbnN0IGludCBTVEFURV9PQkpFQ1RfS0VZID0gSU5TSURFX09CSkVDVCB8IE5PTl9FTVBUWSB8IE5PX1ZBTFVFUzsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX09CSkVDVF9DT0xPTiA9IEFGVEVSX0NPTE9OIHwgTk9OX0VNUFRZIHwgQUxMT1dfVkFMVUU7CiAgc3RhdGljIGNvbnN0IGludCBTVEFURV9PQkpFQ1RfVkFMVUUgPSBBRlRFUl9DT0xPTiB8IE5PTl9FTVBUWSB8IE5PX1ZBTFVFUzsKICBzdGF0aWMgY29uc3QgaW50IFNUQVRFX09CSkVDVF9DT01NQSA9IElOU0lERV9PQkpFQ1QgfCBOT05fRU1QVFkgfCBTVFJJTkdfT05MWTsKCiAgLy8gQml0cyBzZXQgaW4gc3RhdGUgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHJlYWRpbmcgYSB2YWx1ZS4KICAvLyBUaGlzIHRyYW5zaXRpb25zIHRoZSBzdGF0ZSB0byBleHBlY3QgdGhlIG5leHQgcHVuY3R1YXRpb24uCiAgc3RhdGljIGNvbnN0IGludCBWQUxVRV9SRUFEX0JJVFMgPSBOT05fRU1QVFkgfCBOT19WQUxVRVM7CgogIC8vIENoYXJhY3RlciBjb2RlIGNvbnN0YW50cy4KICBzdGF0aWMgY29uc3QgaW50IEJBQ0tTUEFDRSA9IDB4MDg7CiAgc3RhdGljIGNvbnN0IGludCBUQUIgPSAweDA5OwogIHN0YXRpYyBjb25zdCBpbnQgTkVXTElORSA9IDB4MGE7CiAgc3RhdGljIGNvbnN0IGludCBDQVJSSUFHRV9SRVRVUk4gPSAweDBkOwogIHN0YXRpYyBjb25zdCBpbnQgRk9STV9GRUVEID0gMHgwYzsKICBzdGF0aWMgY29uc3QgaW50IFNQQUNFID0gMHgyMDsKICBzdGF0aWMgY29uc3QgaW50IFFVT1RFID0gMHgyMjsKICBzdGF0aWMgY29uc3QgaW50IFBMVVMgPSAweDJiOwogIHN0YXRpYyBjb25zdCBpbnQgQ09NTUEgPSAweDJjOwogIHN0YXRpYyBjb25zdCBpbnQgTUlOVVMgPSAweDJkOwogIHN0YXRpYyBjb25zdCBpbnQgREVDSU1BTFBPSU5UID0gMHgyZTsKICBzdGF0aWMgY29uc3QgaW50IFNMQVNIID0gMHgyZjsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfMCA9IDB4MzA7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSXzkgPSAweDM5OwogIHN0YXRpYyBjb25zdCBpbnQgQ09MT04gPSAweDNhOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hBUl9FID0gMHg0NTsKICBzdGF0aWMgY29uc3QgaW50IExCUkFDS0VUID0gMHg1YjsKICBzdGF0aWMgY29uc3QgaW50IEJBQ0tTTEFTSCA9IDB4NWM7CiAgc3RhdGljIGNvbnN0IGludCBSQlJBQ0tFVCA9IDB4NWQ7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSX2EgPSAweDYxOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hBUl9iID0gMHg2MjsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfZSA9IDB4NjU7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSX2YgPSAweDY2OwogIHN0YXRpYyBjb25zdCBpbnQgQ0hBUl9sID0gMHg2YzsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfbiA9IDB4NmU7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSX3IgPSAweDcyOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hBUl9zID0gMHg3MzsKICBzdGF0aWMgY29uc3QgaW50IENIQVJfdCA9IDB4NzQ7CiAgc3RhdGljIGNvbnN0IGludCBDSEFSX3UgPSAweDc1OwogIHN0YXRpYyBjb25zdCBpbnQgTEJSQUNFID0gMHg3YjsKICBzdGF0aWMgY29uc3QgaW50IFJCUkFDRSA9IDB4N2Q7CgogIC8vIFN0YXRlIG9mIHBhcnRpYWwgdmFsdWUgYXQgY2h1bmsgc3BsaXQuCiAgc3RhdGljIGNvbnN0IGludCBOT19QQVJUSUFMID0gMDsKICBzdGF0aWMgY29uc3QgaW50IFBBUlRJQUxfU1RSSU5HID0gMTsKICBzdGF0aWMgY29uc3QgaW50IFBBUlRJQUxfTlVNRVJBTCA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBQQVJUSUFMX0tFWVdPUkQgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19QQVJUSUFMID0gMzsKCiAgLy8gUGFydGlhbCBzdGF0ZXMgZm9yIG51bWVyYWxzLiBWYWx1ZXMgY2FuIGJlIHwnZWQgd2l0aCBQQVJUSUFMX05VTUVSQUwuCiAgc3RhdGljIGNvbnN0IGludCBOVU1fU0lHTiA9IDA7IC8vIEFmdGVyIGluaXRpYWwgJy0nLgogIHN0YXRpYyBjb25zdCBpbnQgTlVNX1pFUk8gPSA0OyAvLyBBZnRlciAnMCcgYXMgZmlyc3QgZGlnaXQuCiAgc3RhdGljIGNvbnN0IGludCBOVU1fRElHSVQgPSA4OyAvLyBBZnRlciBkaWdpdCwgbm8gJy4nIG9yICdlJyBzZWVuLgogIHN0YXRpYyBjb25zdCBpbnQgTlVNX0RPVCA9IDEyOyAvLyBBZnRlciAnLicuCiAgc3RhdGljIGNvbnN0IGludCBOVU1fRE9UX0RJR0lUID0gMTY7IC8vIEFmdGVyIGEgZGVjaW1hbCBkaWdpdCAoYWZ0ZXIgJy4nKS4KICBzdGF0aWMgY29uc3QgaW50IE5VTV9FID0gMjA7IC8vIEFmdGVyICdlJyBvciAnRScuCiAgc3RhdGljIGNvbnN0IGludCBOVU1fRV9TSUdOID0gMjQ7IC8vIEFmdGVyICctJyBvciAnKycgYWZ0ZXIgJ2UnIG9yICdFJy4KICBzdGF0aWMgY29uc3QgaW50IE5VTV9FX0RJR0lUID0gMjg7IC8vIEFmdGVyIGV4cG9uZW50IGRpZ2l0LgogIHN0YXRpYyBjb25zdCBpbnQgTlVNX1NVQ0NFU1MgPSAzMjsgLy8gTmV2ZXIgc3RvcmVkIGFzIHBhcnRpYWwgc3RhdGUuCgogIC8vIFBhcnRpYWwgc3RhdGVzIGZvciBzdHJpbmdzLgogIHN0YXRpYyBjb25zdCBpbnQgU1RSX1BMQUlOID0gMDsgLy8gSW5zaWRlIHN0cmluZywgYnV0IG5vdCBlc2NhcGUuCiAgc3RhdGljIGNvbnN0IGludCBTVFJfRVNDQVBFID0gNDsgLy8gQWZ0ZXIgJ1wnLgogIHN0YXRpYyBjb25zdCBpbnQgU1RSX1UgPSAxNjsgLy8gQWZ0ZXIgJ1x1JyBhbmQgMC0zIGhleCBkaWdpdHMuCiAgc3RhdGljIGNvbnN0IGludCBTVFJfVV9DT1VOVF9TSElGVCA9IDI7IC8vIEhleCBkaWdpdCBjb3VudCBpbiBiaXRzIDItMy4KICBzdGF0aWMgY29uc3QgaW50IFNUUl9VX1ZBTFVFX1NISUZUID0gNTsgLy8gSGV4IGRpZ2l0IHZhbHVlIGluIGJpdHMgNSsuCgogIC8vIFBhcnRpYWwgc3RhdGVzIGZvciBrZXl3b3Jkcy4KICBzdGF0aWMgY29uc3QgaW50IEtXRF9UWVBFX01BU0sgPSAxMjsKICBzdGF0aWMgY29uc3QgaW50IEtXRF9UWVBFX1NISUZUID0gMjsKICBzdGF0aWMgY29uc3QgaW50IEtXRF9OVUxMID0gMDsgLy8gUHJlZml4IG9mICJudWxsIiBzZWVuLgogIHN0YXRpYyBjb25zdCBpbnQgS1dEX1RSVUUgPSA0OyAvLyBQcmVmaXggb2YgInRydWUiIHNlZW4uCiAgc3RhdGljIGNvbnN0IGludCBLV0RfRkFMU0UgPSA4OyAvLyBQcmVmaXggb2YgImZhbHNlIiBzZWVuLgogIHN0YXRpYyBjb25zdCBpbnQgS1dEX0JPTSA9IDEyOyAvLyBQcmVmaXggb2YgQk9NIHNlZW4uCiAgc3RhdGljIGNvbnN0IGludCBLV0RfQ09VTlRfU0hJRlQgPSA0OyAvLyBQcmVmaXggbGVuZ3RoIGluIGJpdHMgNCsuCgogIC8vIE1hc2sgdXNlZCB0byBtYXNrIG9mZiB0d28gbG93ZXIgYml0cy4KICBzdGF0aWMgY29uc3QgaW50IFRXT19CSVRfTUFTSyA9IDM7CgogIGZpbmFsIF9Kc29uTGlzdGVuZXIgbGlzdGVuZXI7CgogIC8vIFRoZSBjdXJyZW50IHBhcnNpbmcgc3RhdGUuCiAgaW50IHN0YXRlID0gU1RBVEVfSU5JVElBTDsKICBMaXN0PGludD4gc3RhdGVzID0gPGludD5bXTsKCiAgLyoqCiAgICogU3RvcmVzIHRva2VuaXplciBzdGF0ZSBiZXR3ZWVuIGNodW5rcy4KICAgKgogICAqIFRoaXMgc3RhdGUgaXMgc3RvcmVkIHdoZW4gYSBjaHVuayBzdG9wcyBpbiB0aGUgbWlkZGxlIG9mIGEKICAgKiB0b2tlbiAoc3RyaW5nLCBudW1lcmFsLCBib29sZWFuIG9yIG51bGwpLgogICAqCiAgICogVGhlIHBhcnRpYWwgc3RhdGUgaXMgdXNlZCB0byBjb250aW51ZSBwYXJzaW5nIG9uIHRoZSBuZXh0IGNodW5rLgogICAqIFRoZSBwcmV2aW91cyBjaHVuayBpcyBub3QgcmV0YWluZWQsIGFueSBkYXRhIG5lZWRlZCBhcmUgc3RvcmVkIGluCiAgICogdGhpcyBpbnRlZ2VyLCBvciBpbiB0aGUgW2J1ZmZlcl0gZmllbGQgYXMgYSBzdHJpbmctYnVpbGRpbmcgYnVmZmVyCiAgICogb3IgYSBbX051bWJlckJ1ZmZlcl0uCiAgICoKICAgKiBQcmVmaXggc3RhdGUgc3RvcmVkIGluIFtwcmVmaXhTdGF0ZV0gYXMgYml0cy4KICAgKgogICAqICAgICAgICAgICAgLi4wMCA6IE5vIHBhcnRpYWwgdmFsdWUgKE5PX1BBUlRJQUwpLgogICAqCiAgICogICAgICAgICAuLjAwMDAxIDogUGFydGlhbCBzdHJpbmcsIG5vdCBpbnNpZGUgZXNjYXBlLgogICAqICAgICAgICAgLi4wMDEwMSA6IFBhcnRpYWwgc3RyaW5nLCBhZnRlciAnXCcuCiAgICogICAgIC4udnZ2djFkZDAxIDogUGFydGlhbCBcdSBlc2NhcGUuCiAgICogICAgICAgICAgICAgICAgICAgVGhlICdkZCcgYml0cyAoMi0zKSBlbmNvZGUgdGhlIG51bWJlciBvZiBoZXggZGlnaXRzIHNlZW4uCiAgICogICAgICAgICAgICAgICAgICAgQml0cyA1LTE2IGVuY29kZSB0aGUgdmFsdWUgb2YgdGhlIGhleCBkaWdpdHMgc2VlbiBzbyBmYXIuCiAgICoKICAgKiAgICAgICAgLi4wZGRkMTAgOiBQYXJ0aWFsIG51bWVyYWwuCiAgICogICAgICAgICAgICAgICAgICAgVGhlIGBkZGRgIGJpdHMgc3RvcmUgdGhlIHBhcnRzIG9mIGluIHRoZSBudW1lcmFsIHNlZW4gc28KICAgKiAgICAgICAgICAgICAgICAgICBmYXIsIGFzIHRoZSBjb25zdGFudHMgYE5VTV8qYCBkZWZpbmVkIGFib3ZlLgogICAqICAgICAgICAgICAgICAgICAgIFRoZSBjaGFyYWN0ZXJzIG9mIHRoZSBudW1lcmFsIGFyZSBzdG9yZWQgaW4gW2J1ZmZlcl0KICAgKiAgICAgICAgICAgICAgICAgICBhcyBhIFtfTnVtYmVyQnVmZmVyXS4KICAgKgogICAqICAgICAgLi4wZGRkMDAxMSA6IFBhcnRpYWwgJ251bGwnIGtleXdvcmQuCiAgICogICAgICAuLjBkZGQwMTExIDogUGFydGlhbCAndHJ1ZScga2V5d29yZC4KICAgKiAgICAgIC4uMGRkZDEwMTEgOiBQYXJ0aWFsICdmYWxzZScga2V5d29yZC4KICAgKiAgICAgIC4uMGRkZDExMTEgOiBQYXJ0aWFsIFVURi04IEJPTSBieXRlIHNlcWV1ZW5jZSAoIlx4RUZceEJCXHhCRiIpLgogICAqICAgICAgICAgICAgICAgICAgIEZvciBhbGwga2V5d29yZHMsIHRoZSBgZGRkYCBiaXRzIGVuY29kZSB0aGUgbnVtYmVyCiAgICogICAgICAgICAgICAgICAgICAgb2YgbGV0dGVycyBzZWVuLgogICAqICAgICAgICAgICAgICAgICAgIFRoZSBCT00gYnl0ZSBzZXF1ZW5jZSBpcyBvbmx5IHVzZWQgYnkgW19Kc29uVXRmOFBhcnNlcl0sCiAgICogICAgICAgICAgICAgICAgICAgYW5kIG9ubHkgYXQgdGhlIHZlcnkgYmVnaW5uaW5nIG9mIGlucHV0LgogICAqLwogIGludCBwYXJ0aWFsU3RhdGUgPSBOT19QQVJUSUFMOwoKICAvKioKICAgKiBFeHRyYSBkYXRhIHN0b3JlZCB3aGlsZSBwYXJzaW5nIGEgcHJpbWl0aXZlIHZhbHVlLgogICAqIE1heSBiZSBzZXQgZHVyaW5nIHBhcnNpbmcsIGFsd2F5cyBzZXQgYXQgY2h1bmsgZW5kIGlmIGEgdmFsdWUgaXMgcGFydGlhbC4KICAgKgogICAqIE1heSBjb250YWluIGEgc3RyaW5nIGJ1ZmZlciB3aGlsZSBwYXJzaW5nIHN0cmluZ3MuCiAgICovCiAgdmFyIGJ1ZmZlciA9IG51bGw7CgogIF9DaHVua2VkSnNvblBhcnNlcih0aGlzLmxpc3RlbmVyKTsKCiAgLyoqCiAgICogUHVzaCB0aGUgY3VycmVudCBwYXJzZSBbc3RhdGVdIG9uIGEgc3RhY2suCiAgICoKICAgKiBTdGF0ZSBpcyBwdXNoZWQgd2hlbiBhIG5ldyBhcnJheSBvciBvYmplY3QgbGl0ZXJhbCBzdGFydHMsCiAgICogc28gdGhlIHBhcnNlciBjYW4gZ28gYmFjayB0byB0aGUgY29ycmVjdCB2YWx1ZSB3aGVuIHRoZSBsaXRlcmFsIGVuZHMuCiAgICovCiAgdm9pZCBzYXZlU3RhdGUoaW50IHN0YXRlKSB7CiAgICBzdGF0ZXMuYWRkKHN0YXRlKTsKICB9CgogIC8qKgogICAqIFJlc3RvcmUgYSBzdGF0ZSBwdXNoZWQgd2l0aCBbc2F2ZVN0YXRlXS4KICAgKi8KICBpbnQgcmVzdG9yZVN0YXRlKCkgewogICAgcmV0dXJuIHN0YXRlcy5yZW1vdmVMYXN0KCk7IC8vIFRocm93cyBpZiBlbXB0eS4KICB9CgogIC8qKgogICAqIEZpbmFsaXplcyB0aGUgcGFyc2luZy4KICAgKgogICAqIFRocm93cyBpZiB0aGUgc291cmNlIHJlYWQgc28gZmFyIGRvZXNuJ3QgZW5kIHVwIHdpdGggYSBjb21wbGV0ZQogICAqIHBhcnNlZCB2YWx1ZS4gVGhhdCBtZWFucyBpdCBtdXN0IG5vdCBiZSBpbnNpZGUgYSBsaXN0IG9yIG9iamVjdAogICAqIGxpdGVyYWwsIGFuZCBhbnkgcGFydGlhbCB2YWx1ZSByZWFkIHNob3VsZCBhbHNvIGJlIGEgdmFsaWQgY29tcGxldGUKICAgKiB2YWx1ZS4KICAgKgogICAqIFRoZSBvbmx5IHZhbGlkIHBhcnRpYWwgc3RhdGUgaXMgYSBudW1iZXIgdGhhdCBlbmRzIGluIGEgZGlnaXQsIGFuZAogICAqIG9ubHkgaWYgdGhlIG51bWJlciBpcyB0aGUgZW50aXJlIEpTT04gdmFsdWUgYmVpbmcgcGFyc2VkCiAgICogKG90aGVyd2lzZSBpdCB3b3VsZCBiZSBpbnNpZGUgYSBsaXN0IG9yIG9iamVjdCkuCiAgICogU3VjaCBhIG51bWJlciB3aWxsIGJlIGNvbXBsZXRlZC4gQW55IG90aGVyIHBhcnRpYWwgc3RhdGUgaXMgYW4gZXJyb3IuCiAgICovCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChwYXJ0aWFsU3RhdGUgIT0gTk9fUEFSVElBTCkgewogICAgICBpbnQgcGFydGlhbFR5cGUgPSBwYXJ0aWFsU3RhdGUgJiBNQVNLX1BBUlRJQUw7CiAgICAgIGlmIChwYXJ0aWFsVHlwZSA9PSBQQVJUSUFMX05VTUVSQUwpIHsKICAgICAgICBpbnQgbnVtU3RhdGUgPSBwYXJ0aWFsU3RhdGUgJiB+TUFTS19QQVJUSUFMOwogICAgICAgIC8vIEEgcGFydGlhbCBudW1iZXIgbWlnaHQgYmUgYSB2YWxpZCBudW1iZXIgaWYgd2Uga25vdyBpdCdzIGRvbmUuCiAgICAgICAgLy8gVGhlcmUgaXMgYW4gdW5uZWNlc3Nhcnkgb3ZlcmhlYWQgaWYgaW5wdXQgaXMgYSBzaW5nbGUgbnVtYmVyLAogICAgICAgIC8vIGJ1dCB0aGlzIGlzIGFzc3VtZWQgdG8gYmUgcmFyZS4KICAgICAgICBfTnVtYmVyQnVmZmVyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgICAgIHRoaXMuYnVmZmVyID0gbnVsbDsKICAgICAgICBmaW5pc2hDaHVua051bWJlcihudW1TdGF0ZSwgMCwgMCwgYnVmZmVyKTsKICAgICAgfSBlbHNlIGlmIChwYXJ0aWFsVHlwZSA9PSBQQVJUSUFMX1NUUklORykgewogICAgICAgIGZhaWwoY2h1bmtFbmQsICJVbnRlcm1pbmF0ZWQgc3RyaW5nIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KHBhcnRpYWxUeXBlID09IFBBUlRJQUxfS0VZV09SRCk7CiAgICAgICAgZmFpbChjaHVua0VuZCk7IC8vIEluY29tcGxldGUgbGl0ZXJhbC4KICAgICAgfQogICAgfQogICAgaWYgKHN0YXRlICE9IFNUQVRFX0VORCkgewogICAgICBmYWlsKGNodW5rRW5kKTsKICAgIH0KICB9CgogIC8qKgogICAqIFJlYWQgb3V0IHRoZSByZXN1bHQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGNsb3NpbmcgdGhlIHBhcnNlci4KICAgKgogICAqIFRoZSBwYXJzZXIgaXMgY2xvc2VkIGJ5IGNhbGxpbmcgW2Nsb3NlXSBvciBjYWxsaW5nIFthZGRTb3VyY2VDaHVua10gd2l0aAogICAqIGB0cnVlYCBhcyBzZWNvbmQgKGBpc0xhc3RgKSBhcmd1bWVudC4KICAgKi8KICBPYmplY3QgZ2V0IHJlc3VsdCB7CiAgICByZXR1cm4gbGlzdGVuZXIucmVzdWx0OwogIH0KCiAgLyoqIFNldHMgdGhlIGN1cnJlbnQgc291cmNlIGNodW5rLiAqLwogIHZvaWQgc2V0IGNodW5rKFQgc291cmNlKTsKCiAgLyoqCiAgICogTGVuZ3RoIG9mIGN1cnJlbnQgY2h1bmsuCiAgICoKICAgKiBUaGUgdmFsaWQgYXJndW1lbnRzIHRvIFtnZXRDaGFyXSBhcmUgMCAuLiBgY2h1bmtFbmQgLSAxYC4KICAgKi8KICBpbnQgZ2V0IGNodW5rRW5kOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjaHVuayBpdHNlbGYuCiAgICoKICAgKiBPbmx5IHVzZWQgYnkgW2ZhaWxdIHRvIGluY2x1ZGUgdGhlIGNodW5rIGluIHRoZSB0aHJvd24gW0Zvcm1hdEV4Y2VwdGlvbl0uCiAgICovCiAgVCBnZXQgY2h1bms7CgogIC8qKgogICAqIEdldCBjaGFyY2FjdGVyL2NvZGUgdW5pdCBvZiBjdXJyZW50IGNodW5rLgogICAqCiAgICogVGhlIFtpbmRleF0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIGxlc3MgdGhhbiBgY2h1bmtFbmRgLgogICAqIEluIHByYWN0aXZlLCBbaW5kZXhdIHdpbGwgYmUgbm8gc21hbGxlciB0aGFuIHRoZSBgc3RhcnRgIGFyZ3VtZW50IHBhc3NlZAogICAqIHRvIFtwYXJzZV0uCiAgICovCiAgaW50IGdldENoYXIoaW50IGluZGV4KTsKCiAgLyoqCiAgICogQ29weSBBU0NJSSBjaGFyYWN0ZXJzIGZyb20gc3RhcnQgdG8gZW5kIG9mIGNodW5rIGludG8gYSBsaXN0LgogICAqCiAgICogVXNlZCBmb3IgbnVtYmVyIGJ1ZmZlciAoYWx3YXlzIGNvcGllcyBBU0NJSSwgc28gZW5jb2RpbmcgaXMgbm90IGltcG9ydGFudCkuCiAgICovCiAgdm9pZCBjb3B5Q2hhcnNUb0xpc3QoaW50IHN0YXJ0LCBpbnQgZW5kLCBMaXN0PGludD4gdGFyZ2V0LCBpbnQgb2Zmc2V0KTsKCiAgLyoqCiAgICogQnVpbGQgYSBzdHJpbmcgdXNpbmcgaW5wdXQgY29kZSB1bml0cy4KICAgKgogICAqIENyZWF0ZXMgYSBzdHJpbmcgYnVmZmVyIGFuZCBlbmFibGVzIGFkZGluZyBjaGFyYWN0ZXJzIGFuZCBzbGljZXMKICAgKiB0byB0aGF0IGJ1ZmZlci4KICAgKiBUaGUgYnVmZmVyIGlzIHN0b3JlZCBpbiB0aGUgW2J1ZmZlcl0gZmllbGQuIElmIHRoZSBzdHJpbmcgaXMgdW50ZXJtaW5hdGVkLAogICAqIHRoZSBzYW1lIGJ1ZmZlciBpcyB1c2VkIHRvIGNvbnRpbnVlIHBhcnNpbmcgaW4gdGhlIG5leHQgY2h1bmsuCiAgICovCiAgdm9pZCBiZWdpblN0cmluZygpOwogIC8qKgogICAqIEFkZCBzaW5nbGUgY2hhcmFjdGVyIGNvZGUgdG8gc3RyaW5nIGJlaW5nIGJ1aWx0LgogICAqCiAgICogVXNlZCBmb3IgdW5wYXJzZWQgZXNjYXBlIHNlcXVlbmNlcy4KICAgKi8KICB2b2lkIGFkZENoYXJUb1N0cmluZyhpbnQgY2hhckNvZGUpOwoKICAvKioKICAgKiBBZGRzIHNsaWNlIG9mIGN1cnJlbnQgY2h1bmsgdG8gc3RyaW5nIGJlaW5nIGJ1aWx0LgogICAqCiAgICogVGhlIFtzdGFydF0gcG9zaXRpb25zIGlzIGluY2x1c2l2ZSwgW2VuZF0gaXMgZXhjbHVzaXZlLgogICAqLwogIHZvaWQgYWRkU2xpY2VUb1N0cmluZyhpbnQgc3RhcnQsIGludCBlbmQpOwoKICAvKiogRmluYWxpemVzIHRoZSBzdHJpbmcgYmVpbmcgYnVpbHQgYW5kIHJldHVybnMgaXQgYXMgYSBTdHJpbmcuICovCiAgU3RyaW5nIGVuZFN0cmluZygpOwoKICAvKioKICAgKiBFeHRyYWN0cyBhIGxpdGVyYWwgc3RyaW5nIGZyb20gYSBzbGljZSBvZiB0aGUgY3VycmVudCBjaHVuay4KICAgKgogICAqIE5vIGludGVycHJldGF0aW9uIG9mIHRoZSBjb250ZW50IGlzIHBlcmZvcm1lZCwgZXhjZXB0IGZvciBjb252ZXJ0aW5nCiAgICogdGhlIHNvdXJjZSBmb3JtYXQgdG8gc3RyaW5nLgogICAqIFRoaXMgY2FuIGJlIGltcGxlbWVudGVkIG1vcmUgb3IgbGVzcyBlZmZpY2llbnRseSBkZXBlbmRpbmcgb24gdGhlCiAgICogdW5kZXJseWluZyBzb3VyY2UuCiAgICoKICAgKiBUaGlzIGlzIHVzZWQgZm9yIHN0cmluZyBsaXRlcmFscyB0aGF0IGNvbnRhaW4gbm8gZXNjYXBlcy4KICAgKgogICAqIFRoZSBbYml0c10gaW50ZWdlciBpcyBhbiB1cHBlciBib3VuZCBvbiB0aGUgY29kZSBwb2ludCBpbiB0aGUgcmFuZ2UKICAgKiBmcm9tIGBzdGFydGAgdG8gYGVuZGAuCiAgICogVXN1YWxseSBmb3VuZCBieSBkb2luZyBiaXR3aXNlIG9yIG9mIGFsbCB0aGUgdmFsdWVzLgogICAqIFRoZSBmdW5jdGlvbiBtYXkgY2hvb3NlIHRvIG9wdGltaXplIGRlcGVuZGluZyBvbiB0aGUgdmFsdWUuCiAgICovCiAgU3RyaW5nIGdldFN0cmluZyhpbnQgc3RhcnQsIGludCBlbmQsIGludCBiaXRzKTsKCiAgLyoqCiAgICogUGFyc2UgYSBzbGljZSBvZiB0aGUgY3VycmVudCBjaHVuayBhcyBhIG51bWJlci4KICAgKgogICAqIFNpbmNlIGludGVnZXJzIGhhdmUgYSBtYXhpbWFsIHZhbHVlLCBhbmQgd2UgZG9uJ3QgdHJhY2sgdGhlIHZhbHVlCiAgICogaW4gdGhlIGJ1ZmZlciwgYSBzZXF1ZW5jZSBvZiBkaWdpdHMgY2FuIGJlIGVpdGhlciBhbiBpbnQgb3IgYSBkb3VibGUuCiAgICogVGhlIGBudW0ucGFyc2VgIGZ1bmN0aW9uIGRvZXMgdGhlIHJpZ2h0IHRoaW5nLgogICAqCiAgICogVGhlIGZvcm1hdCBpcyBleHBlY3RlZCB0byBiZSBjb3JyZWN0LgogICAqLwogIG51bSBwYXJzZU51bShpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGNvbnN0IGludCBhc2NpaUJpdHMgPSAweDdmOyAvLyBOdW1iZXIgbGl0ZXJhbHMgYXJlIEFTQ0lJIG9ubHkuCiAgICByZXR1cm4gbnVtLnBhcnNlKGdldFN0cmluZyhzdGFydCwgZW5kLCBhc2NpaUJpdHMpKTsKICB9CgogIC8qKgogICAqIFBhcnNlIGEgc2xpY2Ugb2YgdGhlIGN1cnJlbnQgY2h1bmsgYXMgYSBkb3VibGUuCiAgICoKICAgKiBUaGUgZm9ybWF0IGlzIGV4cGVjdGVkIHRvIGJlIGNvcnJlY3QuCiAgICogVGhpcyBpcyB1c2VkIGJ5IFtwYXJzZU51bWJlcl0gd2hlbiB0aGUgZG91YmxlIHZhbHVlIGNhbm5vdCBiZQogICAqIGJ1aWx0IGV4YWN0bHkgZHVyaW5nIHBhcnNpbmcuCiAgICovCiAgZG91YmxlIHBhcnNlRG91YmxlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgY29uc3QgaW50IGFzY2lpQml0cyA9IDB4N2Y7IC8vIERvdWJsZSBsaXRlcmFscyBhcmUgQVNDSUkgb25seS4KICAgIHJldHVybiBkb3VibGUucGFyc2UoZ2V0U3RyaW5nKHN0YXJ0LCBlbmQsIGFzY2lpQml0cykpOwogIH0KCiAgLyoqCiAgICogQ29udGludWVzIHBhcnNpbmcgYSBwYXJ0aWFsIHZhbHVlLgogICAqLwogIGludCBwYXJzZVBhcnRpYWwoaW50IHBvc2l0aW9uKSB7CiAgICBpZiAocG9zaXRpb24gPT0gY2h1bmtFbmQpIHJldHVybiBwb3NpdGlvbjsKICAgIGludCBwYXJ0aWFsU3RhdGUgPSB0aGlzLnBhcnRpYWxTdGF0ZTsKICAgIGFzc2VydChwYXJ0aWFsU3RhdGUgIT0gTk9fUEFSVElBTCk7CiAgICBpbnQgcGFydGlhbFR5cGUgPSBwYXJ0aWFsU3RhdGUgJiBNQVNLX1BBUlRJQUw7CiAgICB0aGlzLnBhcnRpYWxTdGF0ZSA9IE5PX1BBUlRJQUw7CiAgICBwYXJ0aWFsU3RhdGUgPSBwYXJ0aWFsU3RhdGUgJiB+TUFTS19QQVJUSUFMOwogICAgYXNzZXJ0KHBhcnRpYWxUeXBlICE9IDApOwogICAgaWYgKHBhcnRpYWxUeXBlID09IFBBUlRJQUxfU1RSSU5HKSB7CiAgICAgIHBvc2l0aW9uID0gcGFyc2VQYXJ0aWFsU3RyaW5nKHBvc2l0aW9uLCBwYXJ0aWFsU3RhdGUpOwogICAgfSBlbHNlIGlmIChwYXJ0aWFsVHlwZSA9PSBQQVJUSUFMX05VTUVSQUwpIHsKICAgICAgcG9zaXRpb24gPSBwYXJzZVBhcnRpYWxOdW1iZXIocG9zaXRpb24sIHBhcnRpYWxTdGF0ZSk7CiAgICB9IGVsc2UgaWYgKHBhcnRpYWxUeXBlID09IFBBUlRJQUxfS0VZV09SRCkgewogICAgICBwb3NpdGlvbiA9IHBhcnNlUGFydGlhbEtleXdvcmQocG9zaXRpb24sIHBhcnRpYWxTdGF0ZSk7CiAgICB9CiAgICByZXR1cm4gcG9zaXRpb247CiAgfQoKICAvKioKICAgKiBQYXJzZXMgdGhlIHJlbWFpbmRlciBvZiBhIG51bWJlciBpbnRvIHRoZSBudW1iZXIgYnVmZmVyLgogICAqCiAgICogU3ludGF4IGlzIGNoZWNrZWQgd2hpbGUgcGFzaW5nLgogICAqIFN0YXJ0cyBhdCBwb3NpdGlvbiwgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gYmUgdGhlIHN0YXJ0IG9mIHRoZSBjaHVuaywKICAgKiBhbmQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IG5vbi1udW1iZXItbGl0ZXJhbCBjaGFyYWN0ZXIgZm91bmQsCiAgICogb3IgY2h1bmtFbmQgaWYgdGhlIGVudGlyZSBjaHVuayBpcyBhIHZhbGlkIG51bWJlciBjb250aW51YXRpb24uCiAgICogVGhyb3dzIGlmIGEgc3ludGF4IGVycm9yIGlzIGRldGVjdGVkLgogICAqLwogIGludCBwYXJzZVBhcnRpYWxOdW1iZXIoaW50IHBvc2l0aW9uLCBpbnQgc3RhdGUpIHsKICAgIGludCBzdGFydCA9IHBvc2l0aW9uOwogICAgLy8gUHJpbWl0aXZlIGltcGxlbWVudGF0aW9uLCBjYW4gYmUgb3B0aW1pemVkLgogICAgX051bWJlckJ1ZmZlciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjsKICAgIHRoaXMuYnVmZmVyID0gbnVsbDsKICAgIGludCBlbmQgPSBjaHVua0VuZDsKICAgIHRvQmFpbG91dDoKICAgIHsKICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkgYnJlYWsgdG9CYWlsb3V0OwogICAgICBpbnQgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBpbnQgZGlnaXQgPSBjaGFyIF4gQ0hBUl8wOwogICAgICBpZiAoc3RhdGUgPT0gTlVNX1NJR04pIHsKICAgICAgICBpZiAoZGlnaXQgPD0gOSkgewogICAgICAgICAgaWYgKGRpZ2l0ID09IDApIHsKICAgICAgICAgICAgc3RhdGUgPSBOVU1fWkVSTzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlID0gTlVNX0RJR0lUOwogICAgICAgICAgfQogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIGJyZWFrIHRvQmFpbG91dDsKICAgICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKTsKICAgICAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoc3RhdGUgPT0gTlVNX1pFUk8pIHsKICAgICAgICAvLyBKU09OIGRvZXMgbm90IGFsbG93IGluc2lnbmlmaWNhbnQgbGVhZGluZyB6ZXJvcyAoZS5nLiwgIjA5IikuCiAgICAgICAgaWYgKGRpZ2l0IDw9IDkpIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICBzdGF0ZSA9IE5VTV9ESUdJVDsKICAgICAgfQogICAgICB3aGlsZSAoc3RhdGUgPT0gTlVNX0RJR0lUKSB7CiAgICAgICAgaWYgKGRpZ2l0ID4gOSkgewogICAgICAgICAgaWYgKGNoYXIgPT0gREVDSU1BTFBPSU5UKSB7CiAgICAgICAgICAgIHN0YXRlID0gTlVNX0RPVDsKICAgICAgICAgIH0gZWxzZSBpZiAoKGNoYXIgfCAweDIwKSA9PSBDSEFSX2UpIHsKICAgICAgICAgICAgc3RhdGUgPSBOVU1fRTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZpbmlzaENodW5rTnVtYmVyKHN0YXRlLCBzdGFydCwgcG9zaXRpb24sIGJ1ZmZlcik7CiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5kKSBicmVhayB0b0JhaWxvdXQ7CiAgICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgfQogICAgICBpZiAoc3RhdGUgPT0gTlVNX0RPVCkgewogICAgICAgIGlmIChkaWdpdCA+IDkpIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICBzdGF0ZSA9IE5VTV9ET1RfRElHSVQ7CiAgICAgIH0KICAgICAgd2hpbGUgKHN0YXRlID09IE5VTV9ET1RfRElHSVQpIHsKICAgICAgICBpZiAoZGlnaXQgPiA5KSB7CiAgICAgICAgICBpZiAoKGNoYXIgfCAweDIwKSA9PSBDSEFSX2UpIHsKICAgICAgICAgICAgc3RhdGUgPSBOVU1fRTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZpbmlzaENodW5rTnVtYmVyKHN0YXRlLCBzdGFydCwgcG9zaXRpb24sIGJ1ZmZlcik7CiAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5kKSBicmVhayB0b0JhaWxvdXQ7CiAgICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgfQogICAgICBpZiAoc3RhdGUgPT0gTlVNX0UpIHsKICAgICAgICBpZiAoY2hhciA9PSBQTFVTIHx8IGNoYXIgPT0gTUlOVVMpIHsKICAgICAgICAgIHN0YXRlID0gTlVNX0VfU0lHTjsKICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgICBpZiAocG9zaXRpb24gPT0gZW5kKSBicmVhayB0b0JhaWxvdXQ7CiAgICAgICAgICBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICAgICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzc2VydChzdGF0ZSA+PSBOVU1fRSk7CiAgICAgIHdoaWxlIChkaWdpdCA8PSA5KSB7CiAgICAgICAgc3RhdGUgPSBOVU1fRV9ESUdJVDsKICAgICAgICBwb3NpdGlvbisrOwogICAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIGJyZWFrIHRvQmFpbG91dDsKICAgICAgICBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbik7CiAgICAgICAgZGlnaXQgPSBjaGFyIF4gQ0hBUl8wOwogICAgICB9CiAgICAgIGZpbmlzaENodW5rTnVtYmVyKHN0YXRlLCBzdGFydCwgcG9zaXRpb24sIGJ1ZmZlcik7CiAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgIH0KICAgIC8vIEJhaWxvdXQgY29kZSBpbiBjYXNlIHRoZSBjdXJyZW50IGNodW5rIGVuZHMgd2hpbGUgcGFyc2luZyB0aGUgbnVtZXJhbC4KICAgIGFzc2VydChwb3NpdGlvbiA9PSBlbmQpOwogICAgY29udGludWVDaHVua051bWJlcihzdGF0ZSwgc3RhcnQsIGJ1ZmZlcik7CiAgICByZXR1cm4gY2h1bmtFbmQ7CiAgfQoKICAvKioKICAgKiBDb250aW51ZXMgcGFyc2luZyBhIHBhcnRpYWwgc3RyaW5nIGxpdGVyYWwuCiAgICoKICAgKiBIYW5kbGVzIHBhcnRpYWwgZXNjYXBlcyBhbmQgdGhlbiBoYW5kcyB0aGUgcGFyc2luZyBvZmYgdG8KICAgKiBbcGFyc2VTdHJpbmdUb0J1ZmZlcl0uCiAgICovCiAgaW50IHBhcnNlUGFydGlhbFN0cmluZyhpbnQgcG9zaXRpb24sIGludCBwYXJ0aWFsU3RhdGUpIHsKICAgIGlmIChwYXJ0aWFsU3RhdGUgPT0gU1RSX1BMQUlOKSB7CiAgICAgIHJldHVybiBwYXJzZVN0cmluZ1RvQnVmZmVyKHBvc2l0aW9uKTsKICAgIH0KICAgIGlmIChwYXJ0aWFsU3RhdGUgPT0gU1RSX0VTQ0FQRSkgewogICAgICBwb3NpdGlvbiA9IHBhcnNlU3RyaW5nRXNjYXBlKHBvc2l0aW9uKTsKICAgICAgLy8gcGFyc2VTdHJpbmdFc2NhcGUgc2V0cyBwYXJ0aWFsU3RhdGUgaWYgaXQgc2VlcyB0aGUgZW5kLgogICAgICBpZiAocG9zaXRpb24gPT0gY2h1bmtFbmQpIHJldHVybiBwb3NpdGlvbjsKICAgICAgcmV0dXJuIHBhcnNlU3RyaW5nVG9CdWZmZXIocG9zaXRpb24pOwogICAgfQogICAgYXNzZXJ0KChwYXJ0aWFsU3RhdGUgJiBTVFJfVSkgIT0gMCk7CiAgICBpbnQgdmFsdWUgPSBwYXJ0aWFsU3RhdGUgPj4gU1RSX1VfVkFMVUVfU0hJRlQ7CiAgICBpbnQgY291bnQgPSAocGFydGlhbFN0YXRlID4+IFNUUl9VX0NPVU5UX1NISUZUKSAmIFRXT19CSVRfTUFTSzsKICAgIGZvciAoaW50IGkgPSBjb3VudDsgaSA8IDQ7IGkrKywgcG9zaXRpb24rKykgewogICAgICBpZiAocG9zaXRpb24gPT0gY2h1bmtFbmQpIHJldHVybiBjaHVua1N0cmluZ0VzY2FwZVUoaSwgdmFsdWUpOwogICAgICBpbnQgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBpbnQgZGlnaXQgPSBwYXJzZUhleERpZ2l0KGNoYXIpOwogICAgICBpZiAoZGlnaXQgPCAwKSBmYWlsKHBvc2l0aW9uLCAiSW52YWxpZCBoZXggZGlnaXQiKTsKICAgICAgdmFsdWUgPSAxNiAqIHZhbHVlICsgZGlnaXQ7CiAgICB9CiAgICBhZGRDaGFyVG9TdHJpbmcodmFsdWUpOwogICAgcmV0dXJuIHBhcnNlU3RyaW5nVG9CdWZmZXIocG9zaXRpb24pOwogIH0KCiAgLyoqCiAgICogQ29udGludWVzIHBhcnNpbmcgYSBwYXJ0aWFsIGtleXdvcmQuCiAgICovCiAgaW50IHBhcnNlUGFydGlhbEtleXdvcmQoaW50IHBvc2l0aW9uLCBpbnQgcGFydGlhbFN0YXRlKSB7CiAgICBpbnQga2V5d29yZFR5cGUgPSBwYXJ0aWFsU3RhdGUgJiBLV0RfVFlQRV9NQVNLOwogICAgaW50IGNvdW50ID0gcGFydGlhbFN0YXRlID4+IEtXRF9DT1VOVF9TSElGVDsKICAgIGludCBrZXl3b3JkVHlwZUluZGV4ID0ga2V5d29yZFR5cGUgPj4gS1dEX1RZUEVfU0hJRlQ7CiAgICBTdHJpbmcga2V5d29yZCA9CiAgICAgICAgY29uc3QgWyJudWxsIiwgInRydWUiLCAiZmFsc2UiLCAiXHhFRlx4QkJceEJGIl1ba2V5d29yZFR5cGVJbmRleF07CiAgICBhc3NlcnQoY291bnQgPCBrZXl3b3JkLmxlbmd0aCk7CiAgICBkbyB7CiAgICAgIGlmIChwb3NpdGlvbiA9PSBjaHVua0VuZCkgewogICAgICAgIHRoaXMucGFydGlhbFN0YXRlID0KICAgICAgICAgICAgUEFSVElBTF9LRVlXT1JEIHwga2V5d29yZFR5cGUgfCAoY291bnQgPDwgS1dEX0NPVU5UX1NISUZUKTsKICAgICAgICByZXR1cm4gY2h1bmtFbmQ7CiAgICAgIH0KICAgICAgaW50IGV4cGVjdGVkQ2hhciA9IGtleXdvcmQuY29kZVVuaXRBdChjb3VudCk7CiAgICAgIGlmIChnZXRDaGFyKHBvc2l0aW9uKSAhPSBleHBlY3RlZENoYXIpIHsKICAgICAgICBpZiAoY291bnQgPT0gMCkgewogICAgICAgICAgYXNzZXJ0KGtleXdvcmRUeXBlID09IEtXRF9CT00pOwogICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICAgIH0KICAgICAgcG9zaXRpb24rKzsKICAgICAgY291bnQrKzsKICAgIH0gd2hpbGUgKGNvdW50IDwga2V5d29yZC5sZW5ndGgpOwogICAgaWYgKGtleXdvcmRUeXBlID09IEtXRF9OVUxMKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU51bGwoKTsKICAgIH0gZWxzZSBpZiAoa2V5d29yZFR5cGUgIT0gS1dEX0JPTSkgewogICAgICBsaXN0ZW5lci5oYW5kbGVCb29sKGtleXdvcmRUeXBlID09IEtXRF9UUlVFKTsKICAgIH0KICAgIHJldHVybiBwb3NpdGlvbjsKICB9CgogIC8qKiBDb252ZXJ0IGhleC1kaWdpdCB0byBpdHMgdmFsdWUuIFJldHVybnMgLTEgaWYgY2hhciBpcyBub3QgYSBoZXggZGlnaXQuICovCiAgaW50IHBhcnNlSGV4RGlnaXQoaW50IGNoYXIpIHsKICAgIGludCBkaWdpdCA9IGNoYXIgXiAweDMwOwogICAgaWYgKGRpZ2l0IDw9IDkpIHJldHVybiBkaWdpdDsKICAgIGludCBsZXR0ZXIgPSAoY2hhciB8IDB4MjApIF4gMHg2MDsKICAgIC8vIHZhbHVlcyAxIC4uIDYgYXJlICdhJyB0aHJvdWdoICdmJwogICAgaWYgKGxldHRlciA8PSA2ICYmIGxldHRlciA+IDApIHJldHVybiBsZXR0ZXIgKyA5OwogICAgcmV0dXJuIC0xOwogIH0KCiAgLyoqCiAgICogUGFyc2VzIHRoZSBjdXJyZW50IGNodW5rIGFzIGEgY2h1bmsgb2YgSlNPTi4KICAgKgogICAqIFN0YXJ0cyBwYXJzaW5nIGF0IFtwb3NpdGlvbl0gYW5kIGNvbnRpbnVlcyB1bnRpbCBbY2h1bmtFbmRdLgogICAqIENvbnRpbnVlcyBwYXJzaW5nIHdoZXJlIHRoZSBwcmV2aW91cyBjaHVuayAoaWYgYW55KSBlbmRlZC4KICAgKi8KICB2b2lkIHBhcnNlKGludCBwb3NpdGlvbikgewogICAgaW50IGxlbmd0aCA9IGNodW5rRW5kOwogICAgaWYgKHBhcnRpYWxTdGF0ZSAhPSBOT19QQVJUSUFMKSB7CiAgICAgIHBvc2l0aW9uID0gcGFyc2VQYXJ0aWFsKHBvc2l0aW9uKTsKICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuOwogICAgfQogICAgaW50IHN0YXRlID0gdGhpcy5zdGF0ZTsKICAgIHdoaWxlIChwb3NpdGlvbiA8IGxlbmd0aCkgewogICAgICBpbnQgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBzd2l0Y2ggKGNoYXIpIHsKICAgICAgICBjYXNlIFNQQUNFOgogICAgICAgIGNhc2UgQ0FSUklBR0VfUkVUVVJOOgogICAgICAgIGNhc2UgTkVXTElORToKICAgICAgICBjYXNlIFRBQjoKICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFFVT1RFOgogICAgICAgICAgaWYgKChzdGF0ZSAmIEFMTE9XX1NUUklOR19NQVNLKSAhPSAwKSByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICAgICAgICBzdGF0ZSB8PSBWQUxVRV9SRUFEX0JJVFM7CiAgICAgICAgICBwb3NpdGlvbiA9IHBhcnNlU3RyaW5nKHBvc2l0aW9uICsgMSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIExCUkFDS0VUOgogICAgICAgICAgaWYgKChzdGF0ZSAmIEFMTE9XX1ZBTFVFX01BU0spICE9IDApIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICAgIGxpc3RlbmVyLmJlZ2luQXJyYXkoKTsKICAgICAgICAgIHNhdmVTdGF0ZShzdGF0ZSk7CiAgICAgICAgICBzdGF0ZSA9IFNUQVRFX0FSUkFZX0VNUFRZOwogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTEJSQUNFOgogICAgICAgICAgaWYgKChzdGF0ZSAmIEFMTE9XX1ZBTFVFX01BU0spICE9IDApIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICAgIGxpc3RlbmVyLmJlZ2luT2JqZWN0KCk7CiAgICAgICAgICBzYXZlU3RhdGUoc3RhdGUpOwogICAgICAgICAgc3RhdGUgPSBTVEFURV9PQkpFQ1RfRU1QVFk7CiAgICAgICAgICBwb3NpdGlvbisrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBDSEFSX246CiAgICAgICAgICBpZiAoKHN0YXRlICYgQUxMT1dfVkFMVUVfTUFTSykgIT0gMCkgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgICAgc3RhdGUgfD0gVkFMVUVfUkVBRF9CSVRTOwogICAgICAgICAgcG9zaXRpb24gPSBwYXJzZU51bGwocG9zaXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBDSEFSX2Y6CiAgICAgICAgICBpZiAoKHN0YXRlICYgQUxMT1dfVkFMVUVfTUFTSykgIT0gMCkgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgICAgc3RhdGUgfD0gVkFMVUVfUkVBRF9CSVRTOwogICAgICAgICAgcG9zaXRpb24gPSBwYXJzZUZhbHNlKHBvc2l0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQ0hBUl90OgogICAgICAgICAgaWYgKChzdGF0ZSAmIEFMTE9XX1ZBTFVFX01BU0spICE9IDApIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICAgIHN0YXRlIHw9IFZBTFVFX1JFQURfQklUUzsKICAgICAgICAgIHBvc2l0aW9uID0gcGFyc2VUcnVlKHBvc2l0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgQ09MT046CiAgICAgICAgICBpZiAoc3RhdGUgIT0gU1RBVEVfT0JKRUNUX0tFWSkgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgICAgICAgbGlzdGVuZXIucHJvcGVydHlOYW1lKCk7CiAgICAgICAgICBzdGF0ZSA9IFNUQVRFX09CSkVDVF9DT0xPTjsKICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIENPTU1BOgogICAgICAgICAgaWYgKHN0YXRlID09IFNUQVRFX09CSkVDVF9WQUxVRSkgewogICAgICAgICAgICBsaXN0ZW5lci5wcm9wZXJ0eVZhbHVlKCk7CiAgICAgICAgICAgIHN0YXRlID0gU1RBVEVfT0JKRUNUX0NPTU1BOwogICAgICAgICAgICBwb3NpdGlvbisrOwogICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBTVEFURV9BUlJBWV9WQUxVRSkgewogICAgICAgICAgICBsaXN0ZW5lci5hcnJheUVsZW1lbnQoKTsKICAgICAgICAgICAgc3RhdGUgPSBTVEFURV9BUlJBWV9DT01NQTsKICAgICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBmYWlsKHBvc2l0aW9uKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgUkJSQUNLRVQ6CiAgICAgICAgICBpZiAoc3RhdGUgPT0gU1RBVEVfQVJSQVlfRU1QVFkpIHsKICAgICAgICAgICAgbGlzdGVuZXIuZW5kQXJyYXkoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVfQVJSQVlfVkFMVUUpIHsKICAgICAgICAgICAgbGlzdGVuZXIuYXJyYXlFbGVtZW50KCk7CiAgICAgICAgICAgIGxpc3RlbmVyLmVuZEFycmF5KCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgICBzdGF0ZSA9IHJlc3RvcmVTdGF0ZSgpIHwgVkFMVUVfUkVBRF9CSVRTOwogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgUkJSQUNFOgogICAgICAgICAgaWYgKHN0YXRlID09IFNUQVRFX09CSkVDVF9FTVBUWSkgewogICAgICAgICAgICBsaXN0ZW5lci5lbmRPYmplY3QoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gU1RBVEVfT0JKRUNUX1ZBTFVFKSB7CiAgICAgICAgICAgIGxpc3RlbmVyLnByb3BlcnR5VmFsdWUoKTsKICAgICAgICAgICAgbGlzdGVuZXIuZW5kT2JqZWN0KCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgICBzdGF0ZSA9IHJlc3RvcmVTdGF0ZSgpIHwgVkFMVUVfUkVBRF9CSVRTOwogICAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBpZiAoKHN0YXRlICYgQUxMT1dfVkFMVUVfTUFTSykgIT0gMCkgZmFpbChwb3NpdGlvbik7CiAgICAgICAgICBzdGF0ZSB8PSBWQUxVRV9SRUFEX0JJVFM7CiAgICAgICAgICBwb3NpdGlvbiA9IHBhcnNlTnVtYmVyKGNoYXIsIHBvc2l0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICB0aGlzLnN0YXRlID0gc3RhdGU7CiAgfQoKICAvKioKICAgKiBQYXJzZXMgYSAidHJ1ZSIgbGl0ZXJhbCBzdGFydGluZyBhdCBbcG9zaXRpb25dLgogICAqCiAgICogVGhlIGNoYXJhY3RlciBgc291cmNlW3Bvc2l0aW9uXWAgbXVzdCBiZSAidCIuCiAgICovCiAgaW50IHBhcnNlVHJ1ZShpbnQgcG9zaXRpb24pIHsKICAgIGFzc2VydChnZXRDaGFyKHBvc2l0aW9uKSA9PSBDSEFSX3QpOwogICAgaWYgKGNodW5rRW5kIDwgcG9zaXRpb24gKyA0KSB7CiAgICAgIHJldHVybiBwYXJzZUtleXdvcmRQcmVmaXgocG9zaXRpb24sICJ0cnVlIiwgS1dEX1RSVUUpOwogICAgfQogICAgaWYgKGdldENoYXIocG9zaXRpb24gKyAxKSAhPSBDSEFSX3IgfHwKICAgICAgICBnZXRDaGFyKHBvc2l0aW9uICsgMikgIT0gQ0hBUl91IHx8CiAgICAgICAgZ2V0Q2hhcihwb3NpdGlvbiArIDMpICE9IENIQVJfZSkgewogICAgICByZXR1cm4gZmFpbChwb3NpdGlvbik7CiAgICB9CiAgICBsaXN0ZW5lci5oYW5kbGVCb29sKHRydWUpOwogICAgcmV0dXJuIHBvc2l0aW9uICsgNDsKICB9CgogIC8qKgogICAqIFBhcnNlcyBhICJmYWxzZSIgbGl0ZXJhbCBzdGFydGluZyBhdCBbcG9zaXRpb25dLgogICAqCiAgICogVGhlIGNoYXJhY3RlciBgc291cmNlW3Bvc2l0aW9uXWAgbXVzdCBiZSAiZiIuCiAgICovCiAgaW50IHBhcnNlRmFsc2UoaW50IHBvc2l0aW9uKSB7CiAgICBhc3NlcnQoZ2V0Q2hhcihwb3NpdGlvbikgPT0gQ0hBUl9mKTsKICAgIGlmIChjaHVua0VuZCA8IHBvc2l0aW9uICsgNSkgewogICAgICByZXR1cm4gcGFyc2VLZXl3b3JkUHJlZml4KHBvc2l0aW9uLCAiZmFsc2UiLCBLV0RfRkFMU0UpOwogICAgfQogICAgaWYgKGdldENoYXIocG9zaXRpb24gKyAxKSAhPSBDSEFSX2EgfHwKICAgICAgICBnZXRDaGFyKHBvc2l0aW9uICsgMikgIT0gQ0hBUl9sIHx8CiAgICAgICAgZ2V0Q2hhcihwb3NpdGlvbiArIDMpICE9IENIQVJfcyB8fAogICAgICAgIGdldENoYXIocG9zaXRpb24gKyA0KSAhPSBDSEFSX2UpIHsKICAgICAgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgfQogICAgbGlzdGVuZXIuaGFuZGxlQm9vbChmYWxzZSk7CiAgICByZXR1cm4gcG9zaXRpb24gKyA1OwogIH0KCiAgLyoqCiAgICogUGFyc2VzIGEgIm51bGwiIGxpdGVyYWwgc3RhcnRpbmcgYXQgW3Bvc2l0aW9uXS4KICAgKgogICAqIFRoZSBjaGFyYWN0ZXIgYHNvdXJjZVtwb3NpdGlvbl1gIG11c3QgYmUgIm4iLgogICAqLwogIGludCBwYXJzZU51bGwoaW50IHBvc2l0aW9uKSB7CiAgICBhc3NlcnQoZ2V0Q2hhcihwb3NpdGlvbikgPT0gQ0hBUl9uKTsKICAgIGlmIChjaHVua0VuZCA8IHBvc2l0aW9uICsgNCkgewogICAgICByZXR1cm4gcGFyc2VLZXl3b3JkUHJlZml4KHBvc2l0aW9uLCAibnVsbCIsIEtXRF9OVUxMKTsKICAgIH0KICAgIGlmIChnZXRDaGFyKHBvc2l0aW9uICsgMSkgIT0gQ0hBUl91IHx8CiAgICAgICAgZ2V0Q2hhcihwb3NpdGlvbiArIDIpICE9IENIQVJfbCB8fAogICAgICAgIGdldENoYXIocG9zaXRpb24gKyAzKSAhPSBDSEFSX2wpIHsKICAgICAgcmV0dXJuIGZhaWwocG9zaXRpb24pOwogICAgfQogICAgbGlzdGVuZXIuaGFuZGxlTnVsbCgpOwogICAgcmV0dXJuIHBvc2l0aW9uICsgNDsKICB9CgogIGludCBwYXJzZUtleXdvcmRQcmVmaXgoaW50IHBvc2l0aW9uLCBTdHJpbmcgY2hhcnMsIGludCB0eXBlKSB7CiAgICBhc3NlcnQoZ2V0Q2hhcihwb3NpdGlvbikgPT0gY2hhcnMuY29kZVVuaXRBdCgwKSk7CiAgICBpbnQgbGVuZ3RoID0gY2h1bmtFbmQ7CiAgICBpbnQgc3RhcnQgPSBwb3NpdGlvbjsKICAgIGludCBjb3VudCA9IDE7CiAgICB3aGlsZSAoKytwb3NpdGlvbiA8IGxlbmd0aCkgewogICAgICBpbnQgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBpZiAoY2hhciAhPSBjaGFycy5jb2RlVW5pdEF0KGNvdW50KSkgcmV0dXJuIGZhaWwoc3RhcnQpOwogICAgICBjb3VudCsrOwogICAgfQogICAgdGhpcy5wYXJ0aWFsU3RhdGUgPSBQQVJUSUFMX0tFWVdPUkQgfCB0eXBlIHwgKGNvdW50IDw8IEtXRF9DT1VOVF9TSElGVCk7CiAgICByZXR1cm4gbGVuZ3RoOwogIH0KCiAgLyoqCiAgICogUGFyc2VzIGEgc3RyaW5nIHZhbHVlLgogICAqCiAgICogSW5pdGlhbCBbcG9zaXRpb25dIGlzIHJpZ2h0IGFmdGVyIHRoZSBpbml0aWFsIHF1b3RlLgogICAqIFJldHVybmVkIHBvc2l0aW9uIHJpZ2h0IGFmdGVyIHRoZSBmaW5hbCBxdW90ZS4KICAgKi8KICBpbnQgcGFyc2VTdHJpbmcoaW50IHBvc2l0aW9uKSB7CiAgICAvLyBGb3JtYXQ6ICciJyhbXlx4MDAtXHgxZlxcXCJdfCdcXCdbYmZucnQvXFwiXSkqJyInCiAgICAvLyBJbml0aWFsIHBvc2l0aW9uIGlzIHJpZ2h0IGFmdGVyIGZpcnN0ICciJy4KICAgIGludCBzdGFydCA9IHBvc2l0aW9uOwogICAgaW50IGVuZCA9IGNodW5rRW5kOwogICAgaW50IGJpdHMgPSAwOwogICAgd2hpbGUgKHBvc2l0aW9uIDwgZW5kKSB7CiAgICAgIGludCBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbisrKTsKICAgICAgYml0cyB8PSBjaGFyOyAvLyBJbmNsdWRlcyBmaW5hbCAnIicsIGJ1dCB0aGF0IG5ldmVyIG1hdHRlcnMuCiAgICAgIC8vIEJBQ0tTTEFTSCBpcyBsYXJnZXIgdGhhbiBRVU9URSBhbmQgU1BBQ0UuCiAgICAgIGlmIChjaGFyID4gQkFDS1NMQVNIKSB7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgaWYgKGNoYXIgPT0gQkFDS1NMQVNIKSB7CiAgICAgICAgYmVnaW5TdHJpbmcoKTsKICAgICAgICBpbnQgc2xpY2VFbmQgPSBwb3NpdGlvbiAtIDE7CiAgICAgICAgaWYgKHN0YXJ0IDwgc2xpY2VFbmQpIGFkZFNsaWNlVG9TdHJpbmcoc3RhcnQsIHNsaWNlRW5kKTsKICAgICAgICByZXR1cm4gcGFyc2VTdHJpbmdUb0J1ZmZlcihzbGljZUVuZCk7CiAgICAgIH0KICAgICAgaWYgKGNoYXIgPT0gUVVPVEUpIHsKICAgICAgICBsaXN0ZW5lci5oYW5kbGVTdHJpbmcoZ2V0U3RyaW5nKHN0YXJ0LCBwb3NpdGlvbiAtIDEsIGJpdHMpKTsKICAgICAgICByZXR1cm4gcG9zaXRpb247CiAgICAgIH0KICAgICAgaWYgKGNoYXIgPCBTUEFDRSkgewogICAgICAgIHJldHVybiBmYWlsKHBvc2l0aW9uIC0gMSwgIkNvbnRyb2wgY2hhcmFjdGVyIGluIHN0cmluZyIpOwogICAgICB9CiAgICB9CiAgICBiZWdpblN0cmluZygpOwogICAgaWYgKHN0YXJ0IDwgZW5kKSBhZGRTbGljZVRvU3RyaW5nKHN0YXJ0LCBlbmQpOwogICAgcmV0dXJuIGNodW5rU3RyaW5nKFNUUl9QTEFJTik7CiAgfQoKICAvKioKICAgKiBTZXRzIHVwIGEgcGFydGlhbCBzdHJpbmcgc3RhdGUuCiAgICoKICAgKiBUaGUgc3RhdGUgaXMgZWl0aGVyIG5vdCBpbnNpZGUgYW4gZXNjYXBlLCBvciByaWdodCBhZnRlciBhIGJhY2tzbGFzaC4KICAgKiBGb3IgcGFydGlhbCBzdHJpbmdzIGVuZGluZyBpbnNpZGUgYSBVbmljb2RlIGVzY2FwZSwgdXNlCiAgICogW2NodW5rU3RyaW5nRXNjYXBlVV0uCiAgICovCiAgaW50IGNodW5rU3RyaW5nKGludCBzdHJpbmdTdGF0ZSkgewogICAgcGFydGlhbFN0YXRlID0gUEFSVElBTF9TVFJJTkcgfCBzdHJpbmdTdGF0ZTsKICAgIHJldHVybiBjaHVua0VuZDsKICB9CgogIC8qKgogICAqIFNldHMgdXAgYSBwYXJ0aWFsIHN0cmluZyBzdGF0ZSBmb3IgYSBwYXJ0aWFsbHkgcGFyc2VkIFVuaWNvZGUgZXNjYXBlLgogICAqCiAgICogVGhlIHBhcnRpYWwgc3RyaW5nIHN0YXRlIGluY2x1ZGVzIHRoZSBjdXJyZW50IFtidWZmZXJdIGFuZCB0aGUKICAgKiBudW1iZXIgb2YgaGV4IGRpZ2l0cyBvZiB0aGUgVW5pY29kZSBzZWVuIHNvIGZhciAoZS5nLiwgZm9yIGAiXHUzMCcpCiAgICogdGhlIHN0YXRlIGtub3dzIHRoYXQgdHdvIGRpZ2l0cyBoYXZlIGJlZW4gc2VlbiwgYW5kIHdoYXQgdGhlaXIgdmFsdWUgaXMuCiAgICoKICAgKiBSZXR1cm5zIFtjaHVua0VuZF0gc28gaXQgY2FuIGJlIHVzZWQgYXMgcGFydCBvZiBhIHJldHVybiBzdGF0ZW1lbnQuCiAgICovCiAgaW50IGNodW5rU3RyaW5nRXNjYXBlVShpbnQgY291bnQsIGludCB2YWx1ZSkgewogICAgcGFydGlhbFN0YXRlID0gUEFSVElBTF9TVFJJTkcgfAogICAgICAgIFNUUl9VIHwKICAgICAgICAoY291bnQgPDwgU1RSX1VfQ09VTlRfU0hJRlQpIHwKICAgICAgICAodmFsdWUgPDwgU1RSX1VfVkFMVUVfU0hJRlQpOwogICAgcmV0dXJuIGNodW5rRW5kOwogIH0KCiAgLyoqCiAgICogUGFyc2VzIHRoZSByZW1haW5kZXIgb2YgYSBzdHJpbmcgbGl0ZXJhbCBpbnRvIGEgYnVmZmVyLgogICAqCiAgICogVGhlIGJ1ZmZlciBpcyBzdG9yZWQgaW4gW2J1ZmZlcl0gYW5kIGl0cyB1bmRlcmx5aW5nIGZvcm1hdCBkZXBlbmRzIG9uCiAgICogdGhlIGlucHV0IGNodW5rIHR5cGUuIEZvciBleGFtcGxlIFVURi04IGRlY29kaW5nIGhhcHBlbnMgaW4gdGhlCiAgICogYnVmZmVyLCBub3QgaW4gdGhlIHBhcnNlciwgc2luY2UgYWxsIHNpZ25pZmljYW50IEpTT04gY2hhcmFjdGVycyBhcmUgQVNDSUkuCiAgICoKICAgKiBUaGlzIGZ1bmN0aW9uIHNjYW5zIHRocm91Z2ggdGhlIHN0cmluZyBsaXRlcmFsIGZvciBlc2NhcGVzLCBhbmQgY29waWVzCiAgICogc2xpY2VzIG9mIG5vbi1lc2NhcGUgY2hhcmFjdGVycyB1c2luZyBbYWRkU2xpY2VUb1N0cmluZ10uCiAgICovCiAgaW50IHBhcnNlU3RyaW5nVG9CdWZmZXIoaW50IHBvc2l0aW9uKSB7CiAgICBpbnQgZW5kID0gY2h1bmtFbmQ7CiAgICBpbnQgc3RhcnQgPSBwb3NpdGlvbjsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIHsKICAgICAgICBpZiAocG9zaXRpb24gPiBzdGFydCkgewogICAgICAgICAgYWRkU2xpY2VUb1N0cmluZyhzdGFydCwgcG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY2h1bmtTdHJpbmcoU1RSX1BMQUlOKTsKICAgICAgfQogICAgICBpbnQgY2hhciA9IGdldENoYXIocG9zaXRpb24rKyk7CiAgICAgIGlmIChjaGFyID4gQkFDS1NMQVNIKSBjb250aW51ZTsKICAgICAgaWYgKGNoYXIgPCBTUEFDRSkgewogICAgICAgIHJldHVybiBmYWlsKHBvc2l0aW9uIC0gMSk7IC8vIENvbnRyb2wgY2hhcmFjdGVyIGluIHN0cmluZy4KICAgICAgfQogICAgICBpZiAoY2hhciA9PSBRVU9URSkgewogICAgICAgIGludCBxdW90ZVBvc2l0aW9uID0gcG9zaXRpb24gLSAxOwogICAgICAgIGlmIChxdW90ZVBvc2l0aW9uID4gc3RhcnQpIHsKICAgICAgICAgIGFkZFNsaWNlVG9TdHJpbmcoc3RhcnQsIHF1b3RlUG9zaXRpb24pOwogICAgICAgIH0KICAgICAgICBsaXN0ZW5lci5oYW5kbGVTdHJpbmcoZW5kU3RyaW5nKCkpOwogICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgfQogICAgICBpZiAoY2hhciAhPSBCQUNLU0xBU0gpIHsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICAvLyBIYW5kbGUgZXNjYXBlLgogICAgICBpZiAocG9zaXRpb24gLSAxID4gc3RhcnQpIHsKICAgICAgICBhZGRTbGljZVRvU3RyaW5nKHN0YXJ0LCBwb3NpdGlvbiAtIDEpOwogICAgICB9CiAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIHJldHVybiBjaHVua1N0cmluZyhTVFJfRVNDQVBFKTsKICAgICAgcG9zaXRpb24gPSBwYXJzZVN0cmluZ0VzY2FwZShwb3NpdGlvbik7CiAgICAgIGlmIChwb3NpdGlvbiA9PSBlbmQpIHJldHVybiBwb3NpdGlvbjsKICAgICAgc3RhcnQgPSBwb3NpdGlvbjsKICAgIH0KICAgIHJldHVybiAtMTsgLy8gVU5SRUFDSEFCTEUuCiAgfQoKICAvKioKICAgKiBQYXJzZSBhIHN0cmluZyBlc2NhcGUuCiAgICoKICAgKiBQb3NpdGlvbiBpcyByaWdodCBhZnRlciB0aGUgaW5pdGlhbCBiYWNrc2xhc2guCiAgICogVGhlIGZvbGxvd2luZyBlc2NhcGUgaXMgcGFyc2VkIGludG8gYSBjaGFyYWN0ZXIgY29kZSB3aGljaCBpcyBhZGRlZCB0bwogICAqIHRoZSBjdXJyZW50IHN0cmluZyBidWZmZXIgdXNpbmcgW2FkZENoYXJUb1N0cmluZ10uCiAgICoKICAgKiBSZXR1cm5zIHBvc2l0aW9uIGFmdGVyIHRoZSBsYXN0IGNoYXJhY3RlciBvZiB0aGUgZXNjYXBlLgogICAqLwogIGludCBwYXJzZVN0cmluZ0VzY2FwZShpbnQgcG9zaXRpb24pIHsKICAgIGludCBjaGFyID0gZ2V0Q2hhcihwb3NpdGlvbisrKTsKICAgIGludCBsZW5ndGggPSBjaHVua0VuZDsKICAgIHN3aXRjaCAoY2hhcikgewogICAgICBjYXNlIENIQVJfYjoKICAgICAgICBjaGFyID0gQkFDS1NQQUNFOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENIQVJfZjoKICAgICAgICBjaGFyID0gRk9STV9GRUVEOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIENIQVJfbjoKICAgICAgICBjaGFyID0gTkVXTElORTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDSEFSX3I6CiAgICAgICAgY2hhciA9IENBUlJJQUdFX1JFVFVSTjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBDSEFSX3Q6CiAgICAgICAgY2hhciA9IFRBQjsKICAgICAgICBicmVhazsKICAgICAgY2FzZSBTTEFTSDoKICAgICAgY2FzZSBCQUNLU0xBU0g6CiAgICAgIGNhc2UgUVVPVEU6CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgQ0hBUl91OgogICAgICAgIGludCBoZXhTdGFydCA9IHBvc2l0aW9uIC0gMTsKICAgICAgICBpbnQgdmFsdWUgPSAwOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAgICAgICAgICBpZiAocG9zaXRpb24gPT0gbGVuZ3RoKSByZXR1cm4gY2h1bmtTdHJpbmdFc2NhcGVVKGksIHZhbHVlKTsKICAgICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKyspOwogICAgICAgICAgaW50IGRpZ2l0ID0gY2hhciBeIDB4MzA7CiAgICAgICAgICB2YWx1ZSAqPSAxNjsKICAgICAgICAgIGlmIChkaWdpdCA8PSA5KSB7CiAgICAgICAgICAgIHZhbHVlICs9IGRpZ2l0OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZGlnaXQgPSAoY2hhciB8IDB4MjApIC0gQ0hBUl9hOwogICAgICAgICAgICBpZiAoZGlnaXQgPCAwIHx8IGRpZ2l0ID4gNSkgewogICAgICAgICAgICAgIHJldHVybiBmYWlsKGhleFN0YXJ0LCAiSW52YWxpZCB1bmljb2RlIGVzY2FwZSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhbHVlICs9IGRpZ2l0ICsgMTA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNoYXIgPSB2YWx1ZTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBpZiAoY2hhciA8IFNQQUNFKSByZXR1cm4gZmFpbChwb3NpdGlvbiwgIkNvbnRyb2wgY2hhcmFjdGVyIGluIHN0cmluZyIpOwogICAgICAgIHJldHVybiBmYWlsKHBvc2l0aW9uLCAiVW5yZWNvZ25pemVkIHN0cmluZyBlc2NhcGUiKTsKICAgIH0KICAgIGFkZENoYXJUb1N0cmluZyhjaGFyKTsKICAgIGlmIChwb3NpdGlvbiA9PSBsZW5ndGgpIHJldHVybiBjaHVua1N0cmluZyhTVFJfUExBSU4pOwogICAgcmV0dXJuIHBvc2l0aW9uOwogIH0KCiAgLy8vIFNldHMgdXAgYSBwYXJ0aWFsIG51bWVyYWwgc3RhdGUuCiAgLy8vIFJldHVybnMgY2h1bmtFbmQgdG8gYWxsb3cgZWFzeSBvbmUtbGluZSBiYWlsb3V0IHRlc3RzLgogIGludCBiZWdpbkNodW5rTnVtYmVyKGludCBzdGF0ZSwgaW50IHN0YXJ0KSB7CiAgICBpbnQgZW5kID0gY2h1bmtFbmQ7CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICB2YXIgYnVmZmVyID0gbmV3IF9OdW1iZXJCdWZmZXIobGVuZ3RoKTsKICAgIGNvcHlDaGFyc1RvTGlzdChzdGFydCwgZW5kLCBidWZmZXIubGlzdCwgMCk7CiAgICBidWZmZXIubGVuZ3RoID0gbGVuZ3RoOwogICAgdGhpcy5idWZmZXIgPSBidWZmZXI7CiAgICB0aGlzLnBhcnRpYWxTdGF0ZSA9IFBBUlRJQUxfTlVNRVJBTCB8IHN0YXRlOwogICAgcmV0dXJuIGVuZDsKICB9CgogIHZvaWQgYWRkTnVtYmVyQ2h1bmsoX051bWJlckJ1ZmZlciBidWZmZXIsIGludCBzdGFydCwgaW50IGVuZCwgaW50IG92ZXJoZWFkKSB7CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpbnQgY291bnQgPSBidWZmZXIubGVuZ3RoOwogICAgaW50IG5ld0NvdW50ID0gY291bnQgKyBsZW5ndGg7CiAgICBpbnQgbmV3Q2FwYWNpdHkgPSBuZXdDb3VudCArIG92ZXJoZWFkOwogICAgYnVmZmVyLmVuc3VyZUNhcGFjaXR5KG5ld0NhcGFjaXR5KTsKICAgIGNvcHlDaGFyc1RvTGlzdChzdGFydCwgZW5kLCBidWZmZXIubGlzdCwgY291bnQpOwogICAgYnVmZmVyLmxlbmd0aCA9IG5ld0NvdW50OwogIH0KCiAgLy8gQ29udGludWVzIGFuIGFscmVhZHkgY2h1bmtlZCBudW1iZXIgYWNyb3NzIGFuIGVudGlyZSBjaHVuay4KICBpbnQgY29udGludWVDaHVua051bWJlcihpbnQgc3RhdGUsIGludCBzdGFydCwgX051bWJlckJ1ZmZlciBidWZmZXIpIHsKICAgIGludCBlbmQgPSBjaHVua0VuZDsKICAgIGFkZE51bWJlckNodW5rKGJ1ZmZlciwgc3RhcnQsIGVuZCwgX051bWJlckJ1ZmZlci5rRGVmYXVsdE92ZXJoZWFkKTsKICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyOwogICAgdGhpcy5wYXJ0aWFsU3RhdGUgPSBQQVJUSUFMX05VTUVSQUwgfCBzdGF0ZTsKICAgIHJldHVybiBlbmQ7CiAgfQoKICBpbnQgZmluaXNoQ2h1bmtOdW1iZXIoaW50IHN0YXRlLCBpbnQgc3RhcnQsIGludCBlbmQsIF9OdW1iZXJCdWZmZXIgYnVmZmVyKSB7CiAgICBpZiAoc3RhdGUgPT0gTlVNX1pFUk8pIHsKICAgICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKDApOwogICAgICByZXR1cm4gZW5kOwogICAgfQogICAgaWYgKGVuZCA+IHN0YXJ0KSB7CiAgICAgIGFkZE51bWJlckNodW5rKGJ1ZmZlciwgc3RhcnQsIGVuZCwgMCk7CiAgICB9CiAgICBpZiAoc3RhdGUgPT0gTlVNX0RJR0lUKSB7CiAgICAgIG51bSB2YWx1ZSA9IGJ1ZmZlci5wYXJzZU51bSgpOwogICAgICBsaXN0ZW5lci5oYW5kbGVOdW1iZXIodmFsdWUpOwogICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBOVU1fRE9UX0RJR0lUIHx8IHN0YXRlID09IE5VTV9FX0RJR0lUKSB7CiAgICAgIGxpc3RlbmVyLmhhbmRsZU51bWJlcihidWZmZXIucGFyc2VEb3VibGUoKSk7CiAgICB9IGVsc2UgewogICAgICBmYWlsKGNodW5rRW5kLCAiVW50ZXJtaW5hdGVkIG51bWJlciBsaXRlcmFsIik7CiAgICB9CiAgICByZXR1cm4gZW5kOwogIH0KCiAgaW50IHBhcnNlTnVtYmVyKGludCBjaGFyLCBpbnQgcG9zaXRpb24pIHsKICAgIC8vIEFsc28gY2FsbGVkIG9uIGFueSB1bmV4cGVjdGVkIGNoYXJhY3Rlci4KICAgIC8vIEZvcm1hdDoKICAgIC8vICAnLSc/KCcwJ3xbMS05XVswLTldKikoJy4nWzAtOV0rKT8oW2VFXVsrLV0/WzAtOV0rKT8KICAgIGludCBzdGFydCA9IHBvc2l0aW9uOwogICAgaW50IGxlbmd0aCA9IGNodW5rRW5kOwogICAgLy8gQ29sbGVjdHMgYW4gaW50IHZhbHVlIHdoaWxlIHBhcnNpbmcuIFVzZWQgZm9yIGJvdGggYW4gaW50ZWdlciBsaXRlcmFsLAogICAgLy8gYW5kIHRoZSBleHBvbmVudCBwYXJ0IG9mIGEgZG91YmxlIGxpdGVyYWwuCiAgICAvLyBTdG9yZWQgYXMgbmVnYXRpdmUgdG8gZW5zdXJlIHdlIGNhbiByZXByZXNlbnQgLTJeNjMuCiAgICBpbnQgaW50VmFsdWUgPSAwOwogICAgZG91YmxlIGRvdWJsZVZhbHVlID0gMC4wOyAvLyBDb2xsZWN0IGRvdWJsZSB2YWx1ZSB3aGlsZSBwYXJzaW5nLgogICAgLy8gMSBpZiB0aGVyZSBpcyBubyBsZWFkaW5nIC0sIC0xIGlmIHRoZXJlIGlzLgogICAgaW50IHNpZ24gPSAxOwogICAgYm9vbCBpc0RvdWJsZSA9IGZhbHNlOwogICAgLy8gQnJlYWsgdGhpcyBibG9jayB3aGVuIHRoZSBlbmQgb2YgdGhlIG51bWJlciBsaXRlcmFsIGlzIHJlYWNoZWQuCiAgICAvLyBBdCB0aGF0IHRpbWUsIHBvc2l0aW9uIHBvaW50cyB0byB0aGUgbmV4dCBjaGFyYWN0ZXIsIGFuZCBpc0RvdWJsZQogICAgLy8gaXMgc2V0IGlmIHRoZSBsaXRlcmFsIGNvbnRhaW5zIGEgZGVjaW1hbCBwb2ludCBvciBhbiBleHBvbmVudGlhbC4KICAgIGlmIChjaGFyID09IE1JTlVTKSB7CiAgICAgIHNpZ24gPSAtMTsKICAgICAgcG9zaXRpb24rKzsKICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX1NJR04sIHN0YXJ0KTsKICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgfQogICAgaW50IGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgIGlmIChkaWdpdCA+IDkpIHsKICAgICAgaWYgKHNpZ24gPCAwKSB7CiAgICAgICAgZmFpbChwb3NpdGlvbiwgIk1pc3NpbmcgZXhwZWN0ZWQgZGlnaXQiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBJZiBpdCBkb2Vzbid0IGV2ZW4gc3RhcnQgb3V0IGFzIGEgbnVtZXJhbC4KICAgICAgICBmYWlsKHBvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgaWYgKGRpZ2l0ID09IDApIHsKICAgICAgcG9zaXRpb24rKzsKICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX1pFUk8sIHN0YXJ0KTsKICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIC8vIElmIHN0YXJ0aW5nIHdpdGggemVybywgbmV4dCBjaGFyYWN0ZXIgbXVzdCBub3QgYmUgZGlnaXQuCiAgICAgIGlmIChkaWdpdCA8PSA5KSBmYWlsKHBvc2l0aW9uKTsKICAgIH0gZWxzZSB7CiAgICAgIGludCBkaWdpdENvdW50ID0gMDsKICAgICAgZG8gewogICAgICAgIGlmIChkaWdpdENvdW50ID49IDE4KSB7CiAgICAgICAgICAvLyBDaGVjayBmb3Igb3ZlcmZsb3cuCiAgICAgICAgICAvLyBJcyAxIGlmIGRpZ2l0IGlzIDggb3IgOSBhbmQgc2lnbiA9PSAwLCBvciBkaWdpdCBpcyA5IGFuZCBzaWduIDwgMDsKICAgICAgICAgIGludCBoaWdoRGlnaXQgPSBkaWdpdCA+PiAzOwogICAgICAgICAgaWYgKHNpZ24gPCAwKSBoaWdoRGlnaXQgJj0gZGlnaXQ7CiAgICAgICAgICBpZiAoZGlnaXRDb3VudCA9PSAxOSB8fCBpbnRWYWx1ZSAtIGhpZ2hEaWdpdCA8IC05MjIzMzcyMDM2ODU0Nzc1ODApIHsKICAgICAgICAgICAgaXNEb3VibGUgPSB0cnVlOwogICAgICAgICAgICAvLyBCaWcgdmFsdWUgdGhhdCB3ZSBrbm93IGlzIG5vdCB0cnVzdGVkIHRvIGJlIGV4YWN0IGxhdGVyLAogICAgICAgICAgICAvLyBmb3JjaW5nIHJlcGFyc2luZyB1c2luZyBgZG91YmxlLnBhcnNlYC4KICAgICAgICAgICAgZG91YmxlVmFsdWUgPSA5MjIzMzcyMDM2ODU0Nzc1ODA4LjA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGludFZhbHVlID0gMTAgKiBpbnRWYWx1ZSAtIGRpZ2l0OwogICAgICAgIGRpZ2l0Q291bnQrKzsKICAgICAgICBwb3NpdGlvbisrOwogICAgICAgIGlmIChwb3NpdGlvbiA9PSBsZW5ndGgpIHJldHVybiBiZWdpbkNodW5rTnVtYmVyKE5VTV9ESUdJVCwgc3RhcnQpOwogICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKTsKICAgICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIH0gd2hpbGUgKGRpZ2l0IDw9IDkpOwogICAgfQogICAgaWYgKGNoYXIgPT0gREVDSU1BTFBPSU5UKSB7CiAgICAgIGlmICghaXNEb3VibGUpIHsKICAgICAgICBpc0RvdWJsZSA9IHRydWU7CiAgICAgICAgZG91YmxlVmFsdWUgPSAoaW50VmFsdWUgPT0gMCkgPyAwLjAgOiAtaW50VmFsdWUudG9Eb3VibGUoKTsKICAgICAgfQogICAgICBpbnRWYWx1ZSA9IDA7CiAgICAgIHBvc2l0aW9uKys7CiAgICAgIGlmIChwb3NpdGlvbiA9PSBsZW5ndGgpIHJldHVybiBiZWdpbkNodW5rTnVtYmVyKE5VTV9ET1QsIHN0YXJ0KTsKICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIGlmIChkaWdpdCA+IDkpIGZhaWwocG9zaXRpb24pOwogICAgICBkbyB7CiAgICAgICAgZG91YmxlVmFsdWUgPSAxMC4wICogZG91YmxlVmFsdWUgKyBkaWdpdDsKICAgICAgICBpbnRWYWx1ZSAtPSAxOwogICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX0RPVF9ESUdJVCwgc3RhcnQpOwogICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKTsKICAgICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIH0gd2hpbGUgKGRpZ2l0IDw9IDkpOwogICAgfQogICAgaWYgKChjaGFyIHwgMHgyMCkgPT0gQ0hBUl9lKSB7CiAgICAgIGlmICghaXNEb3VibGUpIHsKICAgICAgICBpc0RvdWJsZSA9IHRydWU7CiAgICAgICAgZG91YmxlVmFsdWUgPSAoaW50VmFsdWUgPT0gMCkgPyAwLjAgOiAtaW50VmFsdWUudG9Eb3VibGUoKTsKICAgICAgICBpbnRWYWx1ZSA9IDA7CiAgICAgIH0KICAgICAgcG9zaXRpb24rKzsKICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX0UsIHN0YXJ0KTsKICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICBpbnQgZXhwU2lnbiA9IDE7CiAgICAgIGludCBleHBvbmVudCA9IDA7CiAgICAgIGlmICgoKGNoYXIgKyAxKSB8IDIpID09IDB4MmUgLyorIG9yIC0qLykgewogICAgICAgIGV4cFNpZ24gPSAweDJDIC0gY2hhcjsgLy8gLTEgZm9yIE1JTlVTLCArMSBmb3IgUExVUwogICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgaWYgKHBvc2l0aW9uID09IGxlbmd0aCkgcmV0dXJuIGJlZ2luQ2h1bmtOdW1iZXIoTlVNX0VfU0lHTiwgc3RhcnQpOwogICAgICAgIGNoYXIgPSBnZXRDaGFyKHBvc2l0aW9uKTsKICAgICAgfQogICAgICBkaWdpdCA9IGNoYXIgXiBDSEFSXzA7CiAgICAgIGlmIChkaWdpdCA+IDkpIHsKICAgICAgICBmYWlsKHBvc2l0aW9uLCAiTWlzc2luZyBleHBlY3RlZCBkaWdpdCIpOwogICAgICB9CiAgICAgIGJvb2wgZXhwb25lbnRPdmVyZmxvdyA9IGZhbHNlOwogICAgICBkbyB7CiAgICAgICAgZXhwb25lbnQgPSAxMCAqIGV4cG9uZW50ICsgZGlnaXQ7CiAgICAgICAgaWYgKGV4cG9uZW50ID4gNDAwKSBleHBvbmVudE92ZXJmbG93ID0gdHJ1ZTsKICAgICAgICBwb3NpdGlvbisrOwogICAgICAgIGlmIChwb3NpdGlvbiA9PSBsZW5ndGgpIHJldHVybiBiZWdpbkNodW5rTnVtYmVyKE5VTV9FX0RJR0lULCBzdGFydCk7CiAgICAgICAgY2hhciA9IGdldENoYXIocG9zaXRpb24pOwogICAgICAgIGRpZ2l0ID0gY2hhciBeIENIQVJfMDsKICAgICAgfSB3aGlsZSAoZGlnaXQgPD0gOSk7CiAgICAgIGlmIChleHBvbmVudE92ZXJmbG93KSB7CiAgICAgICAgaWYgKGRvdWJsZVZhbHVlID09IDAuMCB8fCBleHBTaWduIDwgMCkgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKHNpZ24gPCAwID8gLTAuMCA6IDAuMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZU51bWJlcigKICAgICAgICAgICAgICBzaWduIDwgMCA/IGRvdWJsZS5uZWdhdGl2ZUluZmluaXR5IDogZG91YmxlLmluZmluaXR5KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgICB9CiAgICAgIGludFZhbHVlICs9IGV4cFNpZ24gKiBleHBvbmVudDsKICAgIH0KICAgIGlmICghaXNEb3VibGUpIHsKICAgICAgaW50IGJpdEZsYWcgPSAtKHNpZ24gKyAxKSA+PiAxOyAvLyAwIGlmIHNpZ24gPT0gLTEsIC0xIGlmIHNpZ24gPT0gMQogICAgICAvLyBOZWdhdGUgaWYgYml0RmxhZyBpcyAtMSBieSBkb2luZyB+aW50VmFsdWUgKyAxCiAgICAgIGxpc3RlbmVyLmhhbmRsZU51bWJlcigoaW50VmFsdWUgXiBiaXRGbGFnKSAtIGJpdEZsYWcpOwogICAgICByZXR1cm4gcG9zaXRpb247CiAgICB9CiAgICAvLyBEb3VibGUgdmFsdWVzIGF0IG9yIGFib3ZlIHRoaXMgdmFsdWUgKDIgKiogNTMpIG1heSBoYXZlIGxvc3QgcHJlY2lzaW9uLgogICAgLy8gT25seSB0cnVzdCByZXN1bHRzIHRoYXQgYXJlIGJlbG93IHRoaXMgdmFsdWUuCiAgICBjb25zdCBkb3VibGUgbWF4RXhhY3REb3VibGUgPSA5MDA3MTk5MjU0NzQwOTkyLjA7CiAgICBpZiAoZG91YmxlVmFsdWUgPCBtYXhFeGFjdERvdWJsZSkgewogICAgICBpbnQgZXhwb25lbnQgPSBpbnRWYWx1ZTsKICAgICAgZG91YmxlIHNpZ25lZE1hbnRpc3NhID0gZG91YmxlVmFsdWUgKiBzaWduOwogICAgICBpZiAoZXhwb25lbnQgPj0gLTIyKSB7CiAgICAgICAgaWYgKGV4cG9uZW50IDwgMCkgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKHNpZ25lZE1hbnRpc3NhIC8gUE9XRVJTX09GX1RFTlstZXhwb25lbnRdKTsKICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgICB9CiAgICAgICAgaWYgKGV4cG9uZW50ID09IDApIHsKICAgICAgICAgIGxpc3RlbmVyLmhhbmRsZU51bWJlcihzaWduZWRNYW50aXNzYSk7CiAgICAgICAgICByZXR1cm4gcG9zaXRpb247CiAgICAgICAgfQogICAgICAgIGlmIChleHBvbmVudCA8PSAyMikgewogICAgICAgICAgbGlzdGVuZXIuaGFuZGxlTnVtYmVyKHNpZ25lZE1hbnRpc3NhICogUE9XRVJTX09GX1RFTltleHBvbmVudF0pOwogICAgICAgICAgcmV0dXJuIHBvc2l0aW9uOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgLy8gSWYgdGhlIHZhbHVlIGlzIG91dHNpZGUgdGhlIHJhbmdlICsvLW1heEV4YWN0RG91YmxlIG9yCiAgICAvLyBleHBvbmVudCBpcyBvdXRzaWRlIHRoZSByYW5nZSArLy0yMiwgdGhlbiB3ZSBjYW4ndCB0cnVzdCBzaW1wbGUgZG91YmxlCiAgICAvLyBhcml0aG1ldGljIHRvIGdldCB0aGUgZXhhY3QgcmVzdWx0LCBzbyB3ZSB1c2UgdGhlIHN5c3RlbSBkb3VibGUgcGFyc2luZy4KICAgIGxpc3RlbmVyLmhhbmRsZU51bWJlcihwYXJzZURvdWJsZShzdGFydCwgcG9zaXRpb24pKTsKICAgIHJldHVybiBwb3NpdGlvbjsKICB9CgogIGZhaWwoaW50IHBvc2l0aW9uLCBbU3RyaW5nIG1lc3NhZ2VdKSB7CiAgICBpZiAobWVzc2FnZSA9PSBudWxsKSB7CiAgICAgIG1lc3NhZ2UgPSAiVW5leHBlY3RlZCBjaGFyYWN0ZXIiOwogICAgICBpZiAocG9zaXRpb24gPT0gY2h1bmtFbmQpIG1lc3NhZ2UgPSAiVW5leHBlY3RlZCBlbmQgb2YgaW5wdXQiOwogICAgfQogICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbihtZXNzYWdlLCBjaHVuaywgcG9zaXRpb24pOwogIH0KfQoKLyoqCiAqIENodW5rZWQgSlNPTiBwYXJzZXIgdGhhdCBwYXJzZXMgW1N0cmluZ10gY2h1bmtzLgogKi8KY2xhc3MgX0pzb25TdHJpbmdQYXJzZXIgZXh0ZW5kcyBfQ2h1bmtlZEpzb25QYXJzZXI8U3RyaW5nPiB7CiAgU3RyaW5nIGNodW5rOwogIGludCBjaHVua0VuZDsKCiAgX0pzb25TdHJpbmdQYXJzZXIoX0pzb25MaXN0ZW5lciBsaXN0ZW5lcikgOiBzdXBlcihsaXN0ZW5lcik7CgogIGludCBnZXRDaGFyKGludCBwb3NpdGlvbikgPT4gY2h1bmsuY29kZVVuaXRBdChwb3NpdGlvbik7CgogIFN0cmluZyBnZXRTdHJpbmcoaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgYml0cykgewogICAgcmV0dXJuIGNodW5rLnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICB9CgogIHZvaWQgYmVnaW5TdHJpbmcoKSB7CiAgICB0aGlzLmJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICB9CgogIHZvaWQgYWRkU2xpY2VUb1N0cmluZyhpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjsKICAgIGJ1ZmZlci53cml0ZShjaHVuay5zdWJzdHJpbmcoc3RhcnQsIGVuZCkpOwogIH0KCiAgdm9pZCBhZGRDaGFyVG9TdHJpbmcoaW50IGNoYXJDb2RlKSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gdGhpcy5idWZmZXI7CiAgICBidWZmZXIud3JpdGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgfQoKICBTdHJpbmcgZW5kU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgdGhpcy5idWZmZXIgPSBudWxsOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgdm9pZCBjb3B5Q2hhcnNUb0xpc3QoaW50IHN0YXJ0LCBpbnQgZW5kLCBMaXN0IHRhcmdldCwgaW50IG9mZnNldCkgewogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB0YXJnZXRbb2Zmc2V0ICsgaV0gPSBjaHVuay5jb2RlVW5pdEF0KHN0YXJ0ICsgaSk7CiAgICB9CiAgfQoKICBkb3VibGUgcGFyc2VEb3VibGUoaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICByZXR1cm4gX3BhcnNlRG91YmxlKGNodW5rLCBzdGFydCwgZW5kKTsKICB9Cn0KCkBwYXRjaApjbGFzcyBKc29uRGVjb2RlciB7CiAgQHBhdGNoCiAgU3RyaW5nQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPE9iamVjdD4gc2luaykgewogICAgcmV0dXJuIG5ldyBfSnNvblN0cmluZ0RlY29kZXJTaW5rKHRoaXMuX3Jldml2ZXIsIHNpbmspOwogIH0KfQoKLyoqCiAqIEltcGxlbWVudHMgdGhlIGNodW5rZWQgY29udmVyc2lvbiBmcm9tIGEgSlNPTiBzdHJpbmcgdG8gaXRzIGNvcnJlc3BvbmRpbmcKICogb2JqZWN0LgogKgogKiBUaGUgc2luayBvbmx5IGNyZWF0ZXMgb25lIG9iamVjdCwgYnV0IGl0cyBpbnB1dCBjYW4gYmUgY2h1bmtlZC4KICovCmNsYXNzIF9Kc29uU3RyaW5nRGVjb2RlclNpbmsgZXh0ZW5kcyBTdHJpbmdDb252ZXJzaW9uU2lua0Jhc2UgewogIF9Kc29uU3RyaW5nUGFyc2VyIF9wYXJzZXI7CiAgZmluYWwgRnVuY3Rpb24oT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSBfcmV2aXZlcjsKICBmaW5hbCBTaW5rPE9iamVjdD4gX3Npbms7CgogIF9Kc29uU3RyaW5nRGVjb2RlclNpbmsodGhpcy5fcmV2aXZlciwgdGhpcy5fc2luaykKICAgICAgOiBfcGFyc2VyID0gX2NyZWF0ZVBhcnNlcihfcmV2aXZlcik7CgogIHN0YXRpYyBfSnNvblN0cmluZ1BhcnNlciBfY3JlYXRlUGFyc2VyKHJldml2ZXIpIHsKICAgIF9CdWlsZEpzb25MaXN0ZW5lciBsaXN0ZW5lcjsKICAgIGlmIChyZXZpdmVyID09IG51bGwpIHsKICAgICAgbGlzdGVuZXIgPSBuZXcgX0J1aWxkSnNvbkxpc3RlbmVyKCk7CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lciA9IG5ldyBfUmV2aXZlckpzb25MaXN0ZW5lcihyZXZpdmVyKTsKICAgIH0KICAgIHJldHVybiBuZXcgX0pzb25TdHJpbmdQYXJzZXIobGlzdGVuZXIpOwogIH0KCiAgdm9pZCBhZGRTbGljZShTdHJpbmcgY2h1bmssIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIF9wYXJzZXIuY2h1bmsgPSBjaHVuazsKICAgIF9wYXJzZXIuY2h1bmtFbmQgPSBlbmQ7CiAgICBfcGFyc2VyLnBhcnNlKHN0YXJ0KTsKICAgIGlmIChpc0xhc3QpIF9wYXJzZXIuY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkKFN0cmluZyBjaHVuaykgewogICAgYWRkU2xpY2UoY2h1bmssIDAsIGNodW5rLmxlbmd0aCwgZmFsc2UpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9wYXJzZXIuY2xvc2UoKTsKICAgIHZhciBkZWNvZGVkID0gX3BhcnNlci5yZXN1bHQ7CiAgICBfc2luay5hZGQoZGVjb2RlZCk7CiAgICBfc2luay5jbG9zZSgpOwogIH0KCiAgQnl0ZUNvbnZlcnNpb25TaW5rIGFzVXRmOFNpbmsoYm9vbCBhbGxvd01hbGZvcm1lZCkgewogICAgX3BhcnNlciA9IG51bGw7CiAgICByZXR1cm4gbmV3IF9Kc29uVXRmOERlY29kZXJTaW5rKF9yZXZpdmVyLCBfc2luaywgYWxsb3dNYWxmb3JtZWQpOwogIH0KfQoKY2xhc3MgX1V0ZjhTdHJpbmdCdWZmZXIgewogIHN0YXRpYyBjb25zdCBpbnQgSU5JVElBTF9DQVBBQ0lUWSA9IDMyOwogIC8vIFBhcnRpYWwgc3RhdGUgZW5jb2RpbmcuCiAgc3RhdGljIGNvbnN0IGludCBNQVNLX1RXT19CSVQgPSAweDAzOwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19TSVpFID0gTUFTS19UV09fQklUOwogIHN0YXRpYyBjb25zdCBpbnQgU0hJRlRfTUlTU0lORyA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBTSElGVF9WQUxVRSA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBOT19QQVJUSUFMID0gMDsKCiAgLy8gVVRGLTggZW5jb2RpbmcgYW5kIGxpbWl0cy4KICBzdGF0aWMgY29uc3QgaW50IE1BWF9BU0NJSSA9IDEyNzsKICBzdGF0aWMgY29uc3QgaW50IE1BWF9UV09fQllURSA9IDB4N2ZmOwogIHN0YXRpYyBjb25zdCBpbnQgTUFYX1RIUkVFX0JZVEUgPSAweGZmZmY7CiAgc3RhdGljIGNvbnN0IGludCBNQVhfVU5JQ09ERSA9IDBYMTBmZmZmOwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19UV09fQllURSA9IDB4MWY7CiAgc3RhdGljIGNvbnN0IGludCBNQVNLX1RIUkVFX0JZVEUgPSAweDBmOwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19GT1VSX0JZVEUgPSAweDA3OwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19DT05USU5VRV9UQUcgPSAweEMwOwogIHN0YXRpYyBjb25zdCBpbnQgTUFTS19DT05USU5VRV9WQUxVRSA9IDB4M2Y7CiAgc3RhdGljIGNvbnN0IGludCBDT05USU5VRV9UQUcgPSAweDgwOwoKICAvLyBVVEYtMTYgc3Vycm9nYXRlIGVuY29kaW5nLgogIHN0YXRpYyBjb25zdCBpbnQgTEVBRF9TVVJST0dBVEUgPSAweEQ4MDA7CiAgc3RhdGljIGNvbnN0IGludCBUQUlMX1NVUlJPR0FURSA9IDB4REMwMDsKICBzdGF0aWMgY29uc3QgaW50IFNISUZUX0hJR0hfU1VSUk9HQVRFID0gMTA7CiAgc3RhdGljIGNvbnN0IGludCBNQVNLX0xPV19TVVJST0dBVEUgPSAweDNmZjsKCiAgLy8gVGhlIGludGVybmFsIGJ1ZmZlciBzdGFydHMgYXMgVWludDhMaXN0LCBidXQgbWF5IGNoYW5nZSB0byBVaW50MTZMaXN0CiAgLy8gaWYgdGhlIHN0cmluZyBjb250YWlucyBub24tTGF0aW4tMSBjaGFyYWN0ZXJzLgogIExpc3Q8aW50PiBidWZmZXIgPSBuZXcgVWludDhMaXN0KElOSVRJQUxfQ0FQQUNJVFkpOwogIC8vIE51bWJlciBvZiBlbGVtZW50cyBpbiBidWZmZXIuCiAgaW50IGxlbmd0aCA9IDA7CiAgLy8gUGFydGlhbCBkZWNvZGluZyBzdGF0ZSwgZm9yIGNhc2VzIHdoZXJlIGFuIFVURi04IHNlcXVlbmNlcyBpcyBzcGxpdAogIC8vIGJldHdlZW4gY2h1bmtzLgogIGludCBwYXJ0aWFsU3RhdGUgPSBOT19QQVJUSUFMOwogIC8vIFdoZXRoZXIgYWxsIGNoYXJhY3RlcnMgc28gZmFyIGhhdmUgYmVlbiBMYXRpbi0xIChhbmQgdGhlIGJ1ZmZlciBpcwogIC8vIHN0aWxsIGEgVWludDhMaXN0KS4gU2V0IHRvIGZhbHNlIHdoZW4gdGhlIGZpcnN0IG5vbi1MYXRpbi0xIGNoYXJhY3RlcgogIC8vIGlzIGVuY291bnRlcmVkLCBhbmQgdGhlIGJ1ZmZlciBpcyB0aGVuIGFsc28gY29udmVydGVkIHRvIGEgVWludDE2TGlzdC4KICBib29sIGlzTGF0aW4xID0gdHJ1ZTsKICAvLyBJZiBhbGxvd2luZyBtYWxmb3JtZWQsIGludmFsaWQgVVRGLTggc2VxdWVuY2VzIGFyZSBjb252ZXJ0ZWQgdG8KICAvLyBVK0ZGRkQuCiAgYm9vbCBhbGxvd01hbGZvcm1lZDsKCiAgX1V0ZjhTdHJpbmdCdWZmZXIodGhpcy5hbGxvd01hbGZvcm1lZCk7CgogIC8qKgogICAqIFBhcnNlIHRoZSBjb250aW51YXRpb24gb2YgYSBtdWx0aS1ieXRlIFVURi04IHNlcXVlbmNlLgogICAqCiAgICogUGFyc2UgW3V0ZjhdIGZyb20gW3Bvc2l0aW9uXSB0byBbZW5kXS4gSWYgdGhlIHNlcXVlbmNlIGV4dGVuZHMgYmV5b25kCiAgICogYGVuZGAsIHN0b3JlIHRoZSBwYXJ0aWFsIHN0YXRlIGluIFtwYXJ0aWFsU3RhdGVdLCBhbmQgY29udGludWUgZnJvbSB0aGVyZQogICAqIG9uIHRoZSBuZXh0IGFkZGVkIHNsaWNlLgogICAqCiAgICogVGhlIFtzaXplXSBpcyB0aGUgbnVtYmVyIG9mIGV4cGVjdGVkIGNvbnRpbnVhdGlvbiBieXRlcyB0b3RhbCwKICAgKiBhbmQgW21pc3NpbmddIGlzIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIGNvbnRpbnVhdGlvbiBieXRlcy4KICAgKiBUaGUgW3NpemVdIGlzIHVzZWQgdG8gZGV0ZWN0IG92ZXJsb25nIGVuY29kaW5ncy4KICAgKiBUaGUgW3ZhbHVlXSBpcyB0aGUgdmFsdWUgY29sbGVjdGVkIHNvIGZhci4KICAgKgogICAqIFdoZW4gY2FsbGVkIGFmdGVyIHNlZWluZyB0aGUgZmlyc3QgbXVsdGktYnl0ZSBtYXJrZXIsIHRoZSBbc2l6ZV0gYW5kCiAgICogW21pc3NpbmddIHZhbHVlcyBhcmUgYWx3YXlzIHRoZSBzYW1lLCBidXQgdGhleSBtYXkgZGlmZmVyIGlmIGNvbnRpbnVpbmcKICAgKiBhZnRlciBhIHBhcnRpYWwgc2VxdWVuY2UuCiAgICovCiAgaW50IGFkZENvbnRpbnVhdGlvbigKICAgICAgTGlzdDxpbnQ+IHV0ZjgsIGludCBwb3NpdGlvbiwgaW50IGVuZCwgaW50IHNpemUsIGludCBtaXNzaW5nLCBpbnQgdmFsdWUpIHsKICAgIGludCBjb2RlRW5kID0gcG9zaXRpb24gKyBtaXNzaW5nOwogICAgZG8gewogICAgICBpZiAocG9zaXRpb24gPT0gZW5kKSB7CiAgICAgICAgbWlzc2luZyA9IGNvZGVFbmQgLSBwb3NpdGlvbjsKICAgICAgICBwYXJ0aWFsU3RhdGUgPQogICAgICAgICAgICBzaXplIHwgKG1pc3NpbmcgPDwgU0hJRlRfTUlTU0lORykgfCAodmFsdWUgPDwgU0hJRlRfVkFMVUUpOwogICAgICAgIHJldHVybiBlbmQ7CiAgICAgIH0KICAgICAgaW50IGNoYXIgPSB1dGY4W3Bvc2l0aW9uXTsKICAgICAgaWYgKChjaGFyICYgTUFTS19DT05USU5VRV9UQUcpICE9IENPTlRJTlVFX1RBRykgewogICAgICAgIGlmIChhbGxvd01hbGZvcm1lZCkgewogICAgICAgICAgYWRkQ2hhckNvZGUoMHhGRkZEKTsKICAgICAgICAgIHJldHVybiBwb3NpdGlvbjsKICAgICAgICB9CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgIkV4cGVjdGVkIFVURi04IGNvbnRpbnVhdGlvbiBieXRlLCAiCiAgICAgICAgICAgICJmb3VuZCAkY2hhciIsCiAgICAgICAgICAgIHV0ZjgsCiAgICAgICAgICAgIHBvc2l0aW9uKTsKICAgICAgfQogICAgICB2YWx1ZSA9IDY0ICogdmFsdWUgKyAoY2hhciAmIE1BU0tfQ09OVElOVUVfVkFMVUUpOwogICAgICBwb3NpdGlvbisrOwogICAgfSB3aGlsZSAocG9zaXRpb24gPCBjb2RlRW5kKTsKICAgIGlmICh2YWx1ZSA8PSBjb25zdCBbMCwgTUFYX0FTQ0lJLCBNQVhfVFdPX0JZVEUsIE1BWF9USFJFRV9CWVRFXVtzaXplXSkgewogICAgICAvLyBPdmVyLWxvbmcgZW5jb2RpbmcuCiAgICAgIGlmIChhbGxvd01hbGZvcm1lZCkgewogICAgICAgIHZhbHVlID0gMHhGRkZEOwogICAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICJJbnZhbGlkIGVuY29kaW5nOiBVKyR7dmFsdWUudG9SYWRpeFN0cmluZygxNikucGFkTGVmdCg0LCAnMCcpfSIKICAgICAgICAgICAgIiBlbmNvZGVkIGluICR7c2l6ZSArIDF9IGJ5dGVzLiIsCiAgICAgICAgICAgIHV0ZjgsCiAgICAgICAgICAgIHBvc2l0aW9uIC0gMSk7CiAgICAgIH0KICAgIH0KICAgIGFkZENoYXJDb2RlKHZhbHVlKTsKICAgIHJldHVybiBwb3NpdGlvbjsKICB9CgogIHZvaWQgYWRkQ2hhckNvZGUoaW50IGNoYXIpIHsKICAgIGFzc2VydChjaGFyID49IDApOwogICAgYXNzZXJ0KGNoYXIgPD0gTUFYX1VOSUNPREUpOwogICAgaWYgKHBhcnRpYWxTdGF0ZSAhPSBOT19QQVJUSUFMKSB7CiAgICAgIGlmIChhbGxvd01hbGZvcm1lZCkgewogICAgICAgIHBhcnRpYWxTdGF0ZSA9IE5PX1BBUlRJQUw7CiAgICAgICAgYWRkQ2hhckNvZGUoMHhGRkZEKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCJJbmNvbXBsZXRlIFVURi04IHNlcXVlbmNlIik7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc0xhdGluMSAmJiBjaGFyID4gMHhmZikgewogICAgICBfdG8xNkJpdCgpOyAvLyBBbHNvIGdyb3dzIGEgbGl0dGxlIGlmIGNsb3NlIHRvIGZ1bGwuCiAgICB9CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpZiAoY2hhciA8PSBNQVhfVEhSRUVfQllURSkgewogICAgICBpZiAobGVuZ3RoID09IGJ1ZmZlci5sZW5ndGgpIF9ncm93KCk7CiAgICAgIGJ1ZmZlcltsZW5ndGhdID0gY2hhcjsKICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGggKyAxOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAobGVuZ3RoICsgMiA+IGJ1ZmZlci5sZW5ndGgpIF9ncm93KCk7CiAgICBpbnQgYml0cyA9IGNoYXIgLSAweDEwMDAwOwogICAgYnVmZmVyW2xlbmd0aF0gPSBMRUFEX1NVUlJPR0FURSB8IChiaXRzID4+IFNISUZUX0hJR0hfU1VSUk9HQVRFKTsKICAgIGJ1ZmZlcltsZW5ndGggKyAxXSA9IFRBSUxfU1VSUk9HQVRFIHwgKGJpdHMgJiBNQVNLX0xPV19TVVJST0dBVEUpOwogICAgdGhpcy5sZW5ndGggPSBsZW5ndGggKyAyOwogIH0KCiAgdm9pZCBfdG8xNkJpdCgpIHsKICAgIGFzc2VydChpc0xhdGluMSk7CiAgICBVaW50MTZMaXN0IG5ld0J1ZmZlcjsKICAgIGlmICgobGVuZ3RoICsgSU5JVElBTF9DQVBBQ0lUWSkgKiAyIDw9IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgLy8gUmV1c2UgZXhpc3RpbmcgYnVmZmVyIGlmIGl0J3MgYmlnIGVub3VnaC4KICAgICAgbmV3QnVmZmVyID0gbmV3IFVpbnQxNkxpc3QudmlldygoYnVmZmVyIGFzIFVpbnQ4TGlzdCkuYnVmZmVyKTsKICAgIH0gZWxzZSB7CiAgICAgIGludCBuZXdDYXBhY2l0eSA9IGJ1ZmZlci5sZW5ndGg7CiAgICAgIGlmIChuZXdDYXBhY2l0eSAtIGxlbmd0aCA8IElOSVRJQUxfQ0FQQUNJVFkpIHsKICAgICAgICBuZXdDYXBhY2l0eSA9IGxlbmd0aCArIElOSVRJQUxfQ0FQQUNJVFk7CiAgICAgIH0KICAgICAgbmV3QnVmZmVyID0gbmV3IFVpbnQxNkxpc3QobmV3Q2FwYWNpdHkpOwogICAgfQogICAgbmV3QnVmZmVyLnNldFJhbmdlKDAsIGxlbmd0aCwgYnVmZmVyKTsKICAgIGJ1ZmZlciA9IG5ld0J1ZmZlcjsKICAgIGlzTGF0aW4xID0gZmFsc2U7CiAgfQoKICB2b2lkIF9ncm93KCkgewogICAgaW50IG5ld0NhcGFjaXR5ID0gYnVmZmVyLmxlbmd0aCAqIDI7CiAgICBMaXN0IG5ld0J1ZmZlcjsKICAgIGlmIChpc0xhdGluMSkgewogICAgICBuZXdCdWZmZXIgPSBuZXcgVWludDhMaXN0KG5ld0NhcGFjaXR5KTsKICAgIH0gZWxzZSB7CiAgICAgIG5ld0J1ZmZlciA9IG5ldyBVaW50MTZMaXN0KG5ld0NhcGFjaXR5KTsKICAgIH0KICAgIG5ld0J1ZmZlci5zZXRSYW5nZSgwLCBsZW5ndGgsIGJ1ZmZlcik7CiAgICBidWZmZXIgPSBuZXdCdWZmZXI7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiB1dGY4LCBpbnQgcG9zaXRpb24sIGludCBlbmQpIHsKICAgIGFzc2VydChwb3NpdGlvbiA8IGVuZCk7CiAgICBpZiAocGFydGlhbFN0YXRlID4gMCkgewogICAgICBpbnQgY29udGludWVCeXRlQ291bnQgPSAocGFydGlhbFN0YXRlICYgTUFTS19UV09fQklUKTsKICAgICAgaW50IG1pc3NpbmcgPSAocGFydGlhbFN0YXRlID4+IFNISUZUX01JU1NJTkcpICYgTUFTS19UV09fQklUOwogICAgICBpbnQgdmFsdWUgPSBwYXJ0aWFsU3RhdGUgPj4gU0hJRlRfVkFMVUU7CiAgICAgIHBhcnRpYWxTdGF0ZSA9IE5PX1BBUlRJQUw7CiAgICAgIHBvc2l0aW9uID0gYWRkQ29udGludWF0aW9uKAogICAgICAgICAgdXRmOCwgcG9zaXRpb24sIGVuZCwgY29udGludWVCeXRlQ291bnQsIG1pc3NpbmcsIHZhbHVlKTsKICAgICAgaWYgKHBvc2l0aW9uID09IGVuZCkgcmV0dXJuOwogICAgfQogICAgLy8gS2VlcCBpbmRleCBhbmQgY2FwYWNpdHkgaW4gbG9jYWwgdmFyaWFibGVzIHdoaWxlIGxvb3Bpbmcgb3ZlcgogICAgLy8gQVNDSUkgY2hhcmFjdGVycy4KICAgIGludCBpbmRleCA9IGxlbmd0aDsKICAgIGludCBjYXBhY2l0eSA9IGJ1ZmZlci5sZW5ndGg7CiAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKICAgICAgaW50IGNoYXIgPSB1dGY4W3Bvc2l0aW9uXTsKICAgICAgaWYgKGNoYXIgPD0gTUFYX0FTQ0lJKSB7CiAgICAgICAgaWYgKGluZGV4ID09IGNhcGFjaXR5KSB7CiAgICAgICAgICBsZW5ndGggPSBpbmRleDsKICAgICAgICAgIF9ncm93KCk7CiAgICAgICAgICBjYXBhY2l0eSA9IGJ1ZmZlci5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlcltpbmRleCsrXSA9IGNoYXI7CiAgICAgICAgcG9zaXRpb24rKzsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBsZW5ndGggPSBpbmRleDsKICAgICAgaWYgKChjaGFyICYgTUFTS19DT05USU5VRV9UQUcpID09IENPTlRJTlVFX1RBRykgewogICAgICAgIGlmIChhbGxvd01hbGZvcm1lZCkgewogICAgICAgICAgYWRkQ2hhckNvZGUoMHhGRkZEKTsKICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICAgIlVuZXhwZWN0ZWQgVVRGLTggY29udGludWF0aW9uIGJ5dGUiLCB1dGY4LCBwb3NpdGlvbik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGNoYXIgPCAweEUwKSB7CiAgICAgICAgLy8gQzAtREYKICAgICAgICAvLyBUd28tYnl0ZS4KICAgICAgICBwb3NpdGlvbiA9IGFkZENvbnRpbnVhdGlvbigKICAgICAgICAgICAgdXRmOCwgcG9zaXRpb24gKyAxLCBlbmQsIDEsIDEsIGNoYXIgJiBNQVNLX1RXT19CWVRFKTsKICAgICAgfSBlbHNlIGlmIChjaGFyIDwgMHhGMCkgewogICAgICAgIC8vIEUwLUVGCiAgICAgICAgLy8gVGhyZWUtYnl0ZS4KICAgICAgICBwb3NpdGlvbiA9IGFkZENvbnRpbnVhdGlvbigKICAgICAgICAgICAgdXRmOCwgcG9zaXRpb24gKyAxLCBlbmQsIDIsIDIsIGNoYXIgJiBNQVNLX1RIUkVFX0JZVEUpOwogICAgICB9IGVsc2UgaWYgKGNoYXIgPCAweEY4KSB7CiAgICAgICAgLy8gRjAtRjcKICAgICAgICAvLyBGb3VyLWJ5dGUuCiAgICAgICAgcG9zaXRpb24gPSBhZGRDb250aW51YXRpb24oCiAgICAgICAgICAgIHV0ZjgsIHBvc2l0aW9uICsgMSwgZW5kLCAzLCAzLCBjaGFyICYgTUFTS19GT1VSX0JZVEUpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChhbGxvd01hbGZvcm1lZCkgewogICAgICAgICAgYWRkQ2hhckNvZGUoMHhGRkZEKTsKICAgICAgICAgIHBvc2l0aW9uKys7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICAgIkludmFsaWQgVVRGLTggYnl0ZTogJGNoYXIiLCB1dGY4LCBwb3NpdGlvbik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGluZGV4ID0gbGVuZ3RoOwogICAgICBjYXBhY2l0eSA9IGJ1ZmZlci5sZW5ndGg7CiAgICB9CiAgICBsZW5ndGggPSBpbmRleDsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIGlmIChwYXJ0aWFsU3RhdGUgIT0gTk9fUEFSVElBTCkgewogICAgICBpZiAoYWxsb3dNYWxmb3JtZWQpIHsKICAgICAgICBwYXJ0aWFsU3RhdGUgPSBOT19QQVJUSUFMOwogICAgICAgIGFkZENoYXJDb2RlKDB4RkZGRCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW50IGNvbnRpbnVlQnl0ZUNvdW50ID0gKHBhcnRpYWxTdGF0ZSAmIE1BU0tfVFdPX0JJVCk7CiAgICAgICAgaW50IG1pc3NpbmcgPSAocGFydGlhbFN0YXRlID4+IFNISUZUX01JU1NJTkcpICYgTUFTS19UV09fQklUOwogICAgICAgIGludCB2YWx1ZSA9IHBhcnRpYWxTdGF0ZSA+PiBTSElGVF9WQUxVRTsKICAgICAgICBpbnQgc2VlbkJ5dGVDb3VudCA9IGNvbnRpbnVlQnl0ZUNvdW50IC0gbWlzc2luZyArIDE7CiAgICAgICAgTGlzdCBzb3VyY2UgPSBuZXcgVWludDhMaXN0KHNlZW5CeXRlQ291bnQpOwogICAgICAgIHdoaWxlIChzZWVuQnl0ZUNvdW50ID4gMSkgewogICAgICAgICAgc2VlbkJ5dGVDb3VudC0tOwogICAgICAgICAgc291cmNlW3NlZW5CeXRlQ291bnRdID0gQ09OVElOVUVfVEFHIHwgKHZhbHVlICYgTUFTS19DT05USU5VRV9WQUxVRSk7CiAgICAgICAgICB2YWx1ZSA+Pj0gNjsKICAgICAgICB9CiAgICAgICAgc291cmNlWzBdID0gdmFsdWUgfCAoMHgzYzAgPj4gKGNvbnRpbnVlQnl0ZUNvdW50IC0gMSkpOwogICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICJJbmNvbXBsZXRlIFVURi04IHNlcXVlbmNlIiwgc291cmNlLCBzb3VyY2UubGVuZ3RoKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhidWZmZXIsIDAsIGxlbmd0aCk7CiAgfQp9CgovKioKICogQ2h1bmtlZCBKU09OIHBhcnNlciB0aGF0IHBhcnNlcyBVVEYtOCBjaHVua3MuCiAqLwpjbGFzcyBfSnNvblV0ZjhQYXJzZXIgZXh0ZW5kcyBfQ2h1bmtlZEpzb25QYXJzZXI8TGlzdDxpbnQ+PiB7CiAgZmluYWwgYm9vbCBhbGxvd01hbGZvcm1lZDsKICBMaXN0PGludD4gY2h1bms7CiAgaW50IGNodW5rRW5kOwoKICBfSnNvblV0ZjhQYXJzZXIoX0pzb25MaXN0ZW5lciBsaXN0ZW5lciwgdGhpcy5hbGxvd01hbGZvcm1lZCkKICAgICAgOiBzdXBlcihsaXN0ZW5lcikgewogICAgLy8gU3RhcnRzIG91dCBjaGVja2luZyBmb3IgYW4gb3B0aW9uYWwgQk9NIChLV0RfQk9NLCBjb3VudCA9IDApLgogICAgcGFydGlhbFN0YXRlID0KICAgICAgICBfQ2h1bmtlZEpzb25QYXJzZXIuUEFSVElBTF9LRVlXT1JEIHwgX0NodW5rZWRKc29uUGFyc2VyLktXRF9CT007CiAgfQoKICBpbnQgZ2V0Q2hhcihpbnQgcG9zaXRpb24pID0+IGNodW5rW3Bvc2l0aW9uXTsKCiAgU3RyaW5nIGdldFN0cmluZyhpbnQgc3RhcnQsIGludCBlbmQsIGludCBiaXRzKSB7CiAgICBjb25zdCBpbnQgbWF4QXNjaWlDaGFyID0gMHg3ZjsKICAgIGlmIChiaXRzIDw9IG1heEFzY2lpQ2hhcikgewogICAgICByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGNodW5rLCBzdGFydCwgZW5kKTsKICAgIH0KICAgIGJlZ2luU3RyaW5nKCk7CiAgICBpZiAoc3RhcnQgPCBlbmQpIGFkZFNsaWNlVG9TdHJpbmcoc3RhcnQsIGVuZCk7CiAgICBTdHJpbmcgcmVzdWx0ID0gZW5kU3RyaW5nKCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgdm9pZCBiZWdpblN0cmluZygpIHsKICAgIHRoaXMuYnVmZmVyID0gbmV3IF9VdGY4U3RyaW5nQnVmZmVyKGFsbG93TWFsZm9ybWVkKTsKICB9CgogIHZvaWQgYWRkU2xpY2VUb1N0cmluZyhpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIF9VdGY4U3RyaW5nQnVmZmVyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgYnVmZmVyLmFkZFNsaWNlKGNodW5rLCBzdGFydCwgZW5kKTsKICB9CgogIHZvaWQgYWRkQ2hhclRvU3RyaW5nKGludCBjaGFyQ29kZSkgewogICAgX1V0ZjhTdHJpbmdCdWZmZXIgYnVmZmVyID0gdGhpcy5idWZmZXI7CiAgICBidWZmZXIuYWRkQ2hhckNvZGUoY2hhckNvZGUpOwogIH0KCiAgU3RyaW5nIGVuZFN0cmluZygpIHsKICAgIF9VdGY4U3RyaW5nQnVmZmVyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyOwogICAgdGhpcy5idWZmZXIgPSBudWxsOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgdm9pZCBjb3B5Q2hhcnNUb0xpc3QoaW50IHN0YXJ0LCBpbnQgZW5kLCBMaXN0IHRhcmdldCwgaW50IG9mZnNldCkgewogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgdGFyZ2V0LnNldFJhbmdlKG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoLCBjaHVuaywgc3RhcnQpOwogIH0KCiAgZG91YmxlIHBhcnNlRG91YmxlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgU3RyaW5nIHN0cmluZyA9IGdldFN0cmluZyhzdGFydCwgZW5kLCAweDdmKTsKICAgIHJldHVybiBfcGFyc2VEb3VibGUoc3RyaW5nLCAwLCBzdHJpbmcubGVuZ3RoKTsKICB9Cn0KCmRvdWJsZSBfcGFyc2VEb3VibGUoU3RyaW5nIHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kKSBuYXRpdmUgIkRvdWJsZV9wYXJzZSI7CgovKioKICogSW1wbGVtZW50cyB0aGUgY2h1bmtlZCBjb252ZXJzaW9uIGZyb20gYSBVVEYtOCBlbmNvZGluZyBvZiBKU09OCiAqIHRvIGl0cyBjb3JyZXNwb25kaW5nIG9iamVjdC4KICovCmNsYXNzIF9Kc29uVXRmOERlY29kZXJTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rQmFzZSB7CiAgZmluYWwgX0pzb25VdGY4UGFyc2VyIF9wYXJzZXI7CiAgZmluYWwgU2luazxPYmplY3Q+IF9zaW5rOwoKICBfSnNvblV0ZjhEZWNvZGVyU2luayhyZXZpdmVyLCB0aGlzLl9zaW5rLCBib29sIGFsbG93TWFsZm9ybWVkKQogICAgICA6IF9wYXJzZXIgPSBfY3JlYXRlUGFyc2VyKHJldml2ZXIsIGFsbG93TWFsZm9ybWVkKTsKCiAgc3RhdGljIF9Kc29uVXRmOFBhcnNlciBfY3JlYXRlUGFyc2VyKHJldml2ZXIsIGJvb2wgYWxsb3dNYWxmb3JtZWQpIHsKICAgIF9CdWlsZEpzb25MaXN0ZW5lciBsaXN0ZW5lcjsKICAgIGlmIChyZXZpdmVyID09IG51bGwpIHsKICAgICAgbGlzdGVuZXIgPSBuZXcgX0J1aWxkSnNvbkxpc3RlbmVyKCk7CiAgICB9IGVsc2UgewogICAgICBsaXN0ZW5lciA9IG5ldyBfUmV2aXZlckpzb25MaXN0ZW5lcihyZXZpdmVyKTsKICAgIH0KICAgIHJldHVybiBuZXcgX0pzb25VdGY4UGFyc2VyKGxpc3RlbmVyLCBhbGxvd01hbGZvcm1lZCk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgX2FkZENodW5rKGNodW5rLCBzdGFydCwgZW5kKTsKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQoKICB2b2lkIGFkZChMaXN0PGludD4gY2h1bmspIHsKICAgIF9hZGRDaHVuayhjaHVuaywgMCwgY2h1bmsubGVuZ3RoKTsKICB9CgogIHZvaWQgX2FkZENodW5rKExpc3Q8aW50PiBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBfcGFyc2VyLmNodW5rID0gY2h1bms7CiAgICBfcGFyc2VyLmNodW5rRW5kID0gZW5kOwogICAgX3BhcnNlci5wYXJzZShzdGFydCk7CiAgfQoKICB2b2lkIGNsb3NlKCkg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cnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb252ZXJ0OwoKLy8vIEFuIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBbQXNjaWlDb2RlY10uCi8vLwovLy8gVGhpcyBpbnN0YW5jZSBwcm92aWRlcyBhIGNvbnZlbmllbnQgYWNjZXNzIHRvIHRoZSBtb3N0IGNvbW1vbiBBU0NJSQovLy8gdXNlIGNhc2VzLgovLy8KLy8vIEV4YW1wbGVzOgovLy8gYGBgZGFydAovLy8gdmFyIGVuY29kZWQgPSBhc2NpaS5lbmNvZGUoIlRoaXMgaXMgQVNDSUkhIik7Ci8vLyB2YXIgZGVjb2RlZCA9IGFzY2lpLmRlY29kZShbMHg1NCwgMHg2OCwgMHg2OSwgMHg3MywgMHgyMCwgMHg2OSwgMHg3MywKLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwLCAweDQxLCAweDUzLCAweDQzLCAweDQ5LCAweDQ5LCAweDIxXSk7Ci8vLyBgYGAKY29uc3QgQXNjaWlDb2RlYyBhc2NpaSA9IEFzY2lpQ29kZWMoKTsKCmNvbnN0IGludCBfYXNjaWlNYXNrID0gMHg3RjsKCi8vLyBBbiBbQXNjaWlDb2RlY10gYWxsb3dzIGVuY29kaW5nIHN0cmluZ3MgYXMgQVNDSUkgYnl0ZXMKLy8vIGFuZCBkZWNvZGluZyBBU0NJSSBieXRlcyB0byBzdHJpbmdzLgpjbGFzcyBBc2NpaUNvZGVjIGV4dGVuZHMgRW5jb2RpbmcgewogIGZpbmFsIGJvb2wgX2FsbG93SW52YWxpZDsKCiAgLy8vIEluc3RhbnRpYXRlcyBhIG5ldyBbQXNjaWlDb2RlY10uCiAgLy8vCiAgLy8vIElmIFthbGxvd0ludmFsaWRdIGlzIHRydWUsIHRoZSBbZGVjb2RlXSBtZXRob2QgYW5kIHRoZSBjb252ZXJ0ZXIKICAvLy8gcmV0dXJuZWQgYnkgW2RlY29kZXJdIHdpbGwgZGVmYXVsdCB0byBhbGxvd2luZyBpbnZhbGlkIHZhbHVlcy4KICAvLy8gSWYgYWxsb3dpbmcgaW52YWxpZCB2YWx1ZXMsIHRoZSB2YWx1ZXMgd2lsbCBiZSBkZWNvZGVkIGludG8gdGhlIFVuaWNvZGUKICAvLy8gUmVwbGFjZW1lbnQgY2hhcmFjdGVyIChVK0ZGRkQpLiBJZiBub3QsIGFuIGV4Y2VwdGlvbiB3aWxsIGJlIHRocm93bi4KICAvLy8gQ2FsbHMgdG8gdGhlIFtkZWNvZGVdIG1ldGhvZCBjYW4gY2hvb3NlIHRvIG92ZXJyaWRlIHRoaXMgZGVmYXVsdC4KICAvLy8KICAvLy8gRW5jb2RlcnMgd2lsbCBub3QgYWNjZXB0IGludmFsaWQgKG5vbiBBU0NJSSkgY2hhcmFjdGVycy4KICBjb25zdCBBc2NpaUNvZGVjKHtib29sIGFsbG93SW52YWxpZCA9IGZhbHNlfSkgOiBfYWxsb3dJbnZhbGlkID0gYWxsb3dJbnZhbGlkOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhpcyBjb2RlYywgInVzLWFzY2lpIi4KICBTdHJpbmcgZ2V0IG5hbWUgPT4gInVzLWFzY2lpIjsKCiAgVWludDhMaXN0IGVuY29kZShTdHJpbmcgc291cmNlKSA9PiBlbmNvZGVyLmNvbnZlcnQoc291cmNlKTsKCiAgLy8vIERlY29kZXMgdGhlIEFTQ0lJIFtieXRlc10gKGEgbGlzdCBvZiB1bnNpZ25lZCA3LWJpdCBpbnRlZ2VycykgdG8gdGhlCiAgLy8vIGNvcnJlc3BvbmRpbmcgc3RyaW5nLgogIC8vLwogIC8vLyBJZiBbYnl0ZXNdIGNvbnRhaW5zIHZhbHVlcyB0aGF0IGFyZSBub3QgaW4gdGhlIHJhbmdlIDAgLi4gMTI3LCB0aGUgZGVjb2RlcgogIC8vLyB3aWxsIGV2ZW50dWFsbHkgdGhyb3cgYSBbRm9ybWF0RXhjZXB0aW9uXS4KICAvLy8KICAvLy8gSWYgW2FsbG93SW52YWxpZF0gaXMgbm90IHByb3ZpZGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgdXNlZCB0byBjcmVhdGUKICAvLy8gdGhpcyBbQXNjaWlDb2RlY10uCiAgU3RyaW5nIGRlY29kZShMaXN0PGludD4gYnl0ZXMsIHtib29sIGFsbG93SW52YWxpZH0pIHsKICAgIGFsbG93SW52YWxpZCA/Pz0gX2FsbG93SW52YWxpZDsKICAgIGlmIChhbGxvd0ludmFsaWQpIHsKICAgICAgcmV0dXJuIGNvbnN0IEFzY2lpRGVjb2RlcihhbGxvd0ludmFsaWQ6IHRydWUpLmNvbnZlcnQoYnl0ZXMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGNvbnN0IEFzY2lpRGVjb2RlcihhbGxvd0ludmFsaWQ6IGZhbHNlKS5jb252ZXJ0KGJ5dGVzKTsKICAgIH0KICB9CgogIEFzY2lpRW5jb2RlciBnZXQgZW5jb2RlciA9PiBjb25zdCBBc2NpaUVuY29kZXIoKTsKCiAgQXNjaWlEZWNvZGVyIGdldCBkZWNvZGVyID0+IF9hbGxvd0ludmFsaWQKICAgICAgPyBjb25zdCBBc2NpaURlY29kZXIoYWxsb3dJbnZhbGlkOiB0cnVlKQogICAgICA6IGNvbnN0IEFzY2lpRGVjb2RlcihhbGxvd0ludmFsaWQ6IGZhbHNlKTsKfQoKLy8gU3VwZXJjbGFzcyBmb3IgW0FzY2lpRW5jb2Rlcl0gYW5kIFtMYXRpbjFFbmNvZGVyXS4KLy8gR2VuZXJhbGl6ZXMgY29tbW9uIG9wZXJhdGlvbnMgdGhhdCBvbmx5IGRpZmZlciBieSBhIG1hc2s7CmNsYXNzIF9Vbmljb2RlU3Vic2V0RW5jb2RlciBleHRlbmRzIENvbnZlcnRlcjxTdHJpbmcsIExpc3Q8aW50Pj4gewogIGZpbmFsIGludCBfc3Vic2V0TWFzazsKCiAgY29uc3QgX1VuaWNvZGVTdWJzZXRFbmNvZGVyKHRoaXMuX3N1YnNldE1hc2spOwoKICAvLy8gQ29udmVydHMgdGhlIFtTdHJpbmddIGludG8gYSBsaXN0IG9mIGl0cyBjb2RlIHVuaXRzLgogIC8vLwogIC8vLyBJZiBbc3RhcnRdIGFuZCBbZW5kXSBhcmUgcHJvdmlkZWQsIG9ubHkgdGhlIHN1YnN0cmluZwogIC8vLyBgc3RyaW5nLnN1YnN0cmluZyhzdGFydCwgZW5kKWAgaXMgdXNlZCBhcyBpbnB1dCB0byB0aGUgY29udmVyc2lvbi4KICBVaW50OExpc3QgY29udmVydChTdHJpbmcgc3RyaW5nLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIHZhciBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoOwogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgc3RyaW5nTGVuZ3RoKTsKICAgIHZhciBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIHZhciByZXN1bHQgPSBVaW50OExpc3QobGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFyIGNvZGVVbml0ID0gc3RyaW5nLmNvZGVVbml0QXQoc3RhcnQgKyBpKTsKICAgICAgaWYgKChjb2RlVW5pdCAmIH5fc3Vic2V0TWFzaykgIT0gMCkgewogICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUoCiAgICAgICAgICAgIHN0cmluZywgInN0cmluZyIsICJDb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMuIik7CiAgICAgIH0KICAgICAgcmVzdWx0W2ldID0gY29kZVVuaXQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIFN0YXJ0cyBhIGNodW5rZWQgY29udmVyc2lvbi4KICAvLy8KICAvLy8gVGhlIGNvbnZlcnRlciB3b3JrcyBtb3JlIGVmZmljaWVudGx5IGlmIHRoZSBnaXZlbiBbc2lua10gaXMgYQogIC8vLyBbQnl0ZUNvbnZlcnNpb25TaW5rXS4KICBTdHJpbmdDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8TGlzdDxpbnQ+PiBzaW5rKSB7CiAgICByZXR1cm4gX1VuaWNvZGVTdWJzZXRFbmNvZGVyU2luayhfc3Vic2V0TWFzaywKICAgICAgICBzaW5rIGlzIEJ5dGVDb252ZXJzaW9uU2luayA/IHNpbmsgOiBCeXRlQ29udmVyc2lvblNpbmsuZnJvbShzaW5rKSk7CiAgfQoKICAvLyBPdmVycmlkZSB0aGUgYmFzZS1jbGFzcycgYmluZCwgdG8gcHJvdmlkZSBhIGJldHRlciB0eXBlLgogIFN0cmVhbTxMaXN0PGludD4+IGJpbmQoU3RyZWFtPFN0cmluZz4gc3RyZWFtKSA9PiBzdXBlci5iaW5kKHN0cmVhbSk7Cn0KCi8vLyBUaGlzIGNsYXNzIGNvbnZlcnRzIHN0cmluZ3Mgb2Ygb25seSBBU0NJSSBjaGFyYWN0ZXJzIHRvIGJ5dGVzLgpjbGFzcyBBc2NpaUVuY29kZXIgZXh0ZW5kcyBfVW5pY29kZVN1YnNldEVuY29kZXIgewogIGNvbnN0IEFzY2lpRW5jb2RlcigpIDogc3VwZXIoX2FzY2lpTWFzayk7Cn0KCi8vLyBUaGlzIGNsYXNzIGVuY29kZXMgY2h1bmtlZCBzdHJpbmdzIHRvIGJ5dGVzICh1bnNpZ25lZCA4LWJpdAovLy8gaW50ZWdlcnMpLgpjbGFzcyBfVW5pY29kZVN1YnNldEVuY29kZXJTaW5rIGV4dGVuZHMgU3RyaW5nQ29udmVyc2lvblNpbmtCYXNlIHsKICBmaW5hbCBCeXRlQ29udmVyc2lvblNpbmsgX3Npbms7CiAgZmluYWwgaW50IF9zdWJzZXRNYXNrOwoKICBfVW5pY29kZVN1YnNldEVuY29kZXJTaW5rKHRoaXMuX3N1YnNldE1hc2ssIHRoaXMuX3NpbmspOwoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoU3RyaW5nIHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgc291cmNlLmxlbmd0aCk7CiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgY29kZVVuaXQgPSBzb3VyY2UuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKChjb2RlVW5pdCAmIH5fc3Vic2V0TWFzaykgIT0gMCkgewogICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgICJTb3VyY2UgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXIgd2l0aCBjb2RlIHBvaW50OiAkY29kZVVuaXQuIik7CiAgICAgIH0KICAgIH0KICAgIF9zaW5rLmFkZChzb3VyY2UuY29kZVVuaXRzLnN1Ymxpc3Qoc3RhcnQsIGVuZCkpOwogICAgaWYgKGlzTGFzdCkgewogICAgICBjbG9zZSgpOwogICAgfQogIH0KfQoKLy8vIFRoaXMgY2xhc3MgY29udmVydHMgTGF0aW4tMSBieXRlcyAobGlzdHMgb2YgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMpCi8vLyB0byBhIHN0cmluZy4KYWJzdHJhY3QgY2xhc3MgX1VuaWNvZGVTdWJzZXREZWNvZGVyIGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgU3RyaW5nPiB7CiAgZmluYWwgYm9vbCBfYWxsb3dJbnZhbGlkOwogIGZpbmFsIGludCBfc3Vic2V0TWFzazsKCiAgLy8vIEluc3RhbnRpYXRlcyBhIG5ldyBkZWNvZGVyLgogIC8vLwogIC8vLyBUaGUgW19hbGxvd0ludmFsaWRdIGFyZ3VtZW50IGRlZmluZXMgaG93IFtjb252ZXJ0XSBkZWFscwogIC8vLyB3aXRoIGludmFsaWQgYnl0ZXMuCiAgLy8vCiAgLy8vIFRoZSBbX3N1YnNldE1hc2tdIGFyZ3VtZW50IGlzIGEgYml0IG1hc2sgdXNlZCB0byBkZWZpbmUgdGhlIHN1YnNldAogIC8vLyBvZiBVbmljb2RlIGJlaW5nIGRlY29kZWQuIFVzZSBbX0xBVElOMV9NQVNLXSBmb3IgTGF0aW4tMSAoOC1iaXQpIG9yCiAgLy8vIFtfYXNjaWlNYXNrXSBmb3IgQVNDSUkgKDctYml0KS4KICAvLy8KICAvLy8gSWYgW19hbGxvd0ludmFsaWRdIGlzIGB0cnVlYCwgW2NvbnZlcnRdIHJlcGxhY2VzIGludmFsaWQgYnl0ZXMgd2l0aCB0aGUKICAvLy8gVW5pY29kZSBSZXBsYWNlbWVudCBjaGFyYWN0ZXIgYFUrRkZGRGAgKO+/vSkuCiAgLy8vIE90aGVyd2lzZSBpdCB0aHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXS4KICBjb25zdCBfVW5pY29kZVN1YnNldERlY29kZXIodGhpcy5fYWxsb3dJbnZhbGlkLCB0aGlzLl9zdWJzZXRNYXNrKTsKCiAgLy8vIENvbnZlcnRzIHRoZSBbYnl0ZXNdIChhIGxpc3Qgb2YgdW5zaWduZWQgNy0gb3IgOC1iaXQgaW50ZWdlcnMpIHRvIHRoZQogIC8vLyBjb3JyZXNwb25kaW5nIHN0cmluZy4KICAvLy8KICAvLy8gSWYgW3N0YXJ0XSBhbmQgW2VuZF0gYXJlIHByb3ZpZGVkLCBvbmx5IHRoZSBzdWItbGlzdCBvZiBieXRlcyBmcm9tCiAgLy8vIGBzdGFydGAgdG8gYGVuZGAgKGBlbmRgIG5vdCBpbmNsdXNpdmUpIGlzIHVzZWQgYXMgaW5wdXQgdG8gdGhlIGNvbnZlcnNpb24uCiAgU3RyaW5nIGNvbnZlcnQoTGlzdDxpbnQ+IGJ5dGVzLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIHZhciBieXRlQ291bnQgPSBieXRlcy5sZW5ndGg7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBieXRlQ291bnQpOwogICAgZW5kID8/PSBieXRlQ291bnQ7CgogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIGJ5dGUgPSBieXRlc1tpXTsKICAgICAgaWYgKChieXRlICYgfl9zdWJzZXRNYXNrKSAhPSAwKSB7CiAgICAgICAgaWYgKCFfYWxsb3dJbnZhbGlkKSB7CiAgICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgdmFsdWUgaW4gaW5wdXQ6ICRieXRlIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfY29udmVydEludmFsaWQoYnl0ZXMsIHN0YXJ0LCBlbmQpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZXMoYnl0ZXMsIHN0YXJ0LCBlbmQpOwogIH0KCiAgU3RyaW5nIF9jb252ZXJ0SW52YWxpZChMaXN0PGludD4gYnl0ZXMsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgdmFyIGJ1ZmZlciA9IFN0cmluZ0J1ZmZlcigpOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIHZhbHVlID0gYnl0ZXNbaV07CiAgICAgIGlmICgodmFsdWUgJiB+X3N1YnNldE1hc2spICE9IDApIHZhbHVlID0gMHhGRkZEOwogICAgICBidWZmZXIud3JpdGVDaGFyQ29kZSh2YWx1ZSk7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICAvLy8gU3RhcnRzIGEgY2h1bmtlZCBjb252ZXJzaW9uLgogIC8vLwogIC8vLyBUaGUgY29udmVydGVyIHdvcmtzIG1vcmUgZWZmaWNpZW50bHkgaWYgdGhlIGdpdmVuIFtzaW5rXSBpcyBhCiAgLy8vIFtTdHJpbmdDb252ZXJzaW9uU2lua10uCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxTdHJpbmc+IHNpbmspOwoKICAvLyBPdmVycmlkZSB0aGUgYmFzZS1jbGFzcydzIGJpbmQsIHRvIHByb3ZpZGUgYSBiZXR0ZXIgdHlwZS4KICBTdHJlYW08U3RyaW5nPiBiaW5kKFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSkgPT4gc3VwZXIuYmluZChzdHJlYW0pOwp9CgpjbGFzcyBBc2NpaURlY29kZXIgZXh0ZW5kcyBfVW5pY29kZVN1YnNldERlY29kZXIgewogIGNvbnN0IEFzY2lpRGVjb2Rlcih7Ym9vbCBhbGxvd0ludmFsaWQgPSBmYWxzZX0pCiAgICAgIDogc3VwZXIoYWxsb3dJbnZhbGlkLCBfYXNjaWlNYXNrKTsKCiAgLy8vIFN0YXJ0cyBhIGNodW5rZWQgY29udmVyc2lvbi4KICAvLy8KICAvLy8gVGhlIGNvbnZlcnRlciB3b3JrcyBtb3JlIGVmZmljaWVudGx5IGlmIHRoZSBnaXZlbiBbc2lua10gaXMgYQogIC8vLyBbU3RyaW5nQ29udmVyc2lvblNpbmtdLgogIEJ5dGVDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICBTdHJpbmdDb252ZXJzaW9uU2luayBzdHJpbmdTaW5rOwogICAgaWYgKHNpbmsgaXMgU3RyaW5nQ29udmVyc2lvblNpbmspIHsKICAgICAgc3RyaW5nU2luayA9IHNpbms7CiAgICB9IGVsc2UgewogICAgICBzdHJpbmdTaW5rID0gU3RyaW5nQ29udmVyc2lvblNpbmsuZnJvbShzaW5rKTsKICAgIH0KICAgIC8vIFRPRE8obHJuKTogVXNlIGFzVXRmMTZTaW5rIHdoZW4gaXQgYmVjb21lcyBhdmFpbGFibGUuIEl0CiAgICAvLyB3b3JrcyBqdXN0IGFzIHdlbGwsIGlzIGxpa2VseSB0byBoYXZlIGxlc3MgZGVjb2Rpbmcgb3ZlcmhlYWQsCiAgICAvLyBhbmQgbWFrZSBhZGRpbmcgVStGRkZEIGVhc2llci4KICAgIC8vIEF0IHRoYXQgdGltZSwgbWVyZ2UgdGhpcyB3aXRoIF9MYXRpbjFEZWNvZGVyU2luazsKICAgIGlmIChfYWxsb3dJbnZhbGlkKSB7CiAgICAgIHJldHVybiBfRXJyb3JIYW5kbGluZ0FzY2lpRGVjb2RlclNpbmsoc3RyaW5nU2luay5hc1V0ZjhTaW5rKGZhbHNlKSk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX1NpbXBsZUFzY2lpRGVjb2RlclNpbmsoc3RyaW5nU2luayk7CiAgICB9CiAgfQp9CgpjbGFzcyBfRXJyb3JIYW5kbGluZ0FzY2lpRGVjb2RlclNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICBCeXRlQ29udmVyc2lvblNpbmsgX3V0ZjhTaW5rOwogIF9FcnJvckhhbmRsaW5nQXNjaWlEZWNvZGVyU2luayh0aGlzLl91dGY4U2luayk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfdXRmOFNpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkKExpc3Q8aW50PiBzb3VyY2UpIHsKICAgIGFkZFNsaWNlKHNvdXJjZSwgMCwgc291cmNlLmxlbmd0aCwgZmFsc2UpOwogIH0KCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBzb3VyY2UubGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIGlmICgoc291cmNlW2ldICYgfl9hc2NpaU1hc2spICE9IDApIHsKICAgICAgICBpZiAoaSA+IHN0YXJ0KSBfdXRmOFNpbmsuYWRkU2xpY2Uoc291cmNlLCBzdGFydCwgaSwgZmFsc2UpOwogICAgICAgIC8vIEFkZCBVVEYtOCBlbmNvZGluZyBvZiBVK0ZGRkQuCiAgICAgICAgX3V0ZjhTaW5rLmFkZChjb25zdCA8aW50PlsweEVGLCAweEJGLCAweEJEXSk7CiAgICAgICAgc3RhcnQgPSBpICsgMTsKICAgICAgfQogICAgfQogICAgaWYgKHN0YXJ0IDwgZW5kKSB7CiAgICAgIF91dGY4U2luay5hZGRTbGljZShzb3VyY2UsIHN0YXJ0LCBlbmQsIGlzTGFzdCk7CiAgICB9IGVsc2UgaWYgKGlzTGFzdCkgewogICAgICBjbG9zZSgpOwogICAgfQogIH0KfQoKY2xhc3MgX1NpbXBsZUFzY2lpRGVjb2RlclNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICBTaW5rIF9zaW5rOwogIF9TaW1wbGVBc2NpaURlY29kZXJTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkKExpc3Q8aW50PiBzb3VyY2UpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICgoc291cmNlW2ldICYgfl9hc2NpaU1hc2spICE9IDApIHsKICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIlNvdXJjZSBjb250YWlucyBub24tQVNDSUkgYnl0ZXMuIik7CiAgICAgIH0KICAgIH0KICAgIF9zaW5rLmFkZChTdHJpbmcuZnJvbUNoYXJDb2Rlcyhzb3VyY2UpKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgZmluYWwgbGVuZ3RoID0gc291cmNlLmxlbmd0aDsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxlbmd0aCk7CiAgICBpZiAoc3RhcnQgPCBlbmQpIHsKICAgICAgaWYgKHN0YXJ0ICE9IDAgfHwgZW5kICE9IGxlbmd0aCkgewogICAgICAgIHNvdXJjZSA9IHNvdXJjZS5zdWJsaXN0KHN0YXJ0LCBlbmQpOwogICAgICB9CiAgICAgIGFkZChzb3VyY2UpOwogICAgfQogICAgaWYgKGlzTGFzdCkgY2xvc2UoKTsKICB9Cn0KgSEATk48ARYBQwRIDwQODDJKTAgnAR0BOykkHAEnBkdFTktIBj9QASohAT4BSxwGUTEGURk4JBhEDUUGBAE0ASwvMQIBNj1DGQExATsGPEk/JkAeJCczLCM/CBwGEwQBIwZEHEYyTAQBPkcCAUMzLAIBQA9DIhkBOwEREwQBQjsoKywdTggGNRIPBgQCAUkRTBwZASIGPxoGSUomBk4yL0UBTBwGSVE+IjcXASgbKB5CCjMIBjQEAUAhKBw3IwYeBAEjBkQeQAE/RwIBMzIpASMGRB5BJSgZDTQGQEUmORlLDTIGBAIBRiAyAREXBAEfLwQBRTsoLEQpNhcIBhc2GQ8GBAIBPw4nARETBAEfLixDCAYtBAFFIjQXKS0IEwYZBAIBF2RhcnQ6Y29udmVydC9hc2NpaS5kYXJ0L29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L2Jhc2U2NC5kYXJ0wAB63S8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBBIFtiYXNlNjRdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NjQ4KSBlbmNvZGVyIGFuZCBkZWNvZGVyLgovLy8KLy8vIEl0IGVuY29kZXMgdXNpbmcgdGhlIGRlZmF1bHQgYmFzZTY0IGFscGhhYmV0LAovLy8gZGVjb2RlcyB1c2luZyBib3RoIHRoZSBiYXNlNjQgYW5kIGJhc2U2NHVybCBhbHBoYWJldHMsCi8vLyBkb2VzIG5vdCBhbGxvdyBpbnZhbGlkIGNoYXJhY3RlcnMgYW5kIHJlcXVpcmVzIHBhZGRpbmcuCi8vLwovLy8gRXhhbXBsZXM6Ci8vLwovLy8gICAgIHZhciBlbmNvZGVkID0gYmFzZTY0LmVuY29kZShbMHg2MiwgMHg2YywgMHhjMywgMHhhNSwgMHg2MiwgMHhjMywgMHhhNiwKLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzIsIDB4NjcsIDB4NzIsIDB4YzMsIDB4YjgsIDB4NjRdKTsKLy8vICAgICB2YXIgZGVjb2RlZCA9IGJhc2U2NC5kZWNvZGUoIlltekRwV0xEcG5KbmNzTzRaQW89Iik7Ci8vLwovLy8gVGhlIHRvcC1sZXZlbCBbYmFzZTY0RW5jb2RlXSBhbmQgW2Jhc2U2NERlY29kZV0gZnVuY3Rpb25zIG1heSBiZSB1c2VkCi8vLyBpbnN0ZWFkIGlmIGEgbG9jYWwgdmFyaWFibGUgc2hhZG93cyB0aGUgW2Jhc2U2NF0gY29uc3RhbnQuCmNvbnN0IEJhc2U2NENvZGVjIGJhc2U2NCA9IEJhc2U2NENvZGVjKCk7CgovLy8gQSBbYmFzZTY0dXJsXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDY0OCkgZW5jb2RlciBhbmQgZGVjb2Rlci4KLy8vCi8vLyBJdCBlbmNvZGVzIGFuZCBkZWNvZGVzIHVzaW5nIHRoZSBiYXNlNjR1cmwgYWxwaGFiZXQsCi8vLyBkZWNvZGVzIHVzaW5nIGJvdGggdGhlIGJhc2U2NCBhbmQgYmFzZTY0dXJsIGFscGhhYmV0cywKLy8vIGRvZXMgbm90IGFsbG93IGludmFsaWQgY2hhcmFjdGVycyBhbmQgcmVxdWlyZXMgcGFkZGluZy4KLy8vCi8vLyBFeGFtcGxlczoKLy8vCi8vLyAgICAgdmFyIGVuY29kZWQgPSBiYXNlNjRVcmwuZW5jb2RlKFsweDYyLCAweDZjLCAweGMzLCAweGE1LCAweDYyLCAweGMzLCAweGE2LAovLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MiwgMHg2NywgMHg3MiwgMHhjMywgMHhiOCwgMHg2NF0pOwovLy8gICAgIHZhciBkZWNvZGVkID0gYmFzZTY0VXJsLmRlY29kZSgiWW16RHBXTERwbkpuY3NPNFpBbz0iKTsKY29uc3QgQmFzZTY0Q29kZWMgYmFzZTY0VXJsID0gQmFzZTY0Q29kZWMudXJsU2FmZSgpOwoKLy8vIEVuY29kZXMgW2J5dGVzXSB1c2luZyBbYmFzZTY0XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDY0OCkgZW5jb2RpbmcuCi8vLwovLy8gU2hvcnRoYW5kIGZvciBbYmFzZTY0LmVuY29kZV0uIFVzZWZ1bCBpZiBhIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgdGhlIGdsb2JhbAovLy8gW2Jhc2U2NF0gY29uc3RhbnQuClN0cmluZyBiYXNlNjRFbmNvZGUoTGlzdDxpbnQ+IGJ5dGVzKSA9PiBiYXNlNjQuZW5jb2RlKGJ5dGVzKTsKCi8vLyBFbmNvZGVzIFtieXRlc10gdXNpbmcgW2Jhc2U2NHVybF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDgpIGVuY29kaW5nLgovLy8KLy8vIFNob3J0aGFuZCBmb3IgW2Jhc2U2NHVybC5lbmNvZGVdLgpTdHJpbmcgYmFzZTY0VXJsRW5jb2RlKExpc3Q8aW50PiBieXRlcykgPT4gYmFzZTY0VXJsLmVuY29kZShieXRlcyk7CgovLy8gRGVjb2RlcyBbYmFzZTY0XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDY0OCkgb3IgW2Jhc2U2NHVybF0oaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ2NDgpIGVuY29kZWQgYnl0ZXMuCi8vLwovLy8gU2hvcnRoYW5kIGZvciBbYmFzZTY0LmRlY29kZV0uIFVzZWZ1bCBpZiBhIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgdGhlCi8vLyBnbG9iYWwgW2Jhc2U2NF0gY29uc3RhbnQuClVpbnQ4TGlzdCBiYXNlNjREZWNvZGUoU3RyaW5nIHNvdXJjZSkgPT4gYmFzZTY0LmRlY29kZShzb3VyY2UpOwoKLy8gQ29uc3RhbnRzIHVzZWQgaW4gbW9yZSB0aGFuIG9uZSBjbGFzcy4KY29uc3QgaW50IF9wYWRkaW5nQ2hhciA9IDB4M2Q7IC8vICc9Jy4KCi8vLyBBIFtiYXNlNjRdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0NjQ4KSBlbmNvZGVyIGFuZCBkZWNvZGVyLgovLy8KLy8vIEEgW0Jhc2U2NENvZGVjXSBhbGxvd3MgYmFzZTY0IGVuY29kaW5nIGJ5dGVzIGludG8gQVNDSUkgc3RyaW5ncyBhbmQKLy8vIGRlY29kaW5nIHZhbGlkIGVuY29kaW5ncyBiYWNrIHRvIGJ5dGVzLgovLy8KLy8vIFRoaXMgaW1wbGVtZW50YXRpb24gb25seSBoYW5kbGVzIHRoZSBzaW1wbGVzdCBSRkMgNDY0OCBiYXNlNjQgYW5kIGJhc2U2NHVybAovLy8gZW5jb2RpbmdzLgovLy8gSXQgZG9lcyBub3QgYWxsb3cgaW52YWxpZCBjaGFyYWN0ZXJzIHdoZW4gZGVjb2RpbmcgYW5kIGl0IHJlcXVpcmVzLAovLy8gYW5kIGdlbmVyYXRlcywgcGFkZGluZyBzbyB0aGF0IHRoZSBpbnB1dCBpcyBhbHdheXMgYSBtdWx0aXBsZSBvZiBmb3VyCi8vLyBjaGFyYWN0ZXJzLgpjbGFzcyBCYXNlNjRDb2RlYyBleHRlbmRzIENvZGVjPExpc3Q8aW50PiwgU3RyaW5nPiB7CiAgZmluYWwgQmFzZTY0RW5jb2RlciBfZW5jb2RlcjsKICBjb25zdCBCYXNlNjRDb2RlYygpIDogX2VuY29kZXIgPSBjb25zdCBCYXNlNjRFbmNvZGVyKCk7CiAgY29uc3QgQmFzZTY0Q29kZWMudXJsU2FmZSgpIDogX2VuY29kZXIgPSBjb25zdCBCYXNlNjRFbmNvZGVyLnVybFNhZmUoKTsKCiAgQmFzZTY0RW5jb2RlciBnZXQgZW5jb2RlciA9PiBfZW5jb2RlcjsKCiAgQmFzZTY0RGVjb2RlciBnZXQgZGVjb2RlciA9PiBjb25zdCBCYXNlNjREZWNvZGVyKCk7CgogIC8vLyBEZWNvZGVzIFtlbmNvZGVkXS4KICAvLy8KICAvLy8gVGhlIGlucHV0IGlzIGRlY29kZWQgYXMgaWYgYnkgYGRlY29kZXIuY29udmVydGAuCiAgLy8vCiAgLy8vIFRoZSByZXR1cm5lZCBbVWludDhMaXN0XSBjb250YWlucyBleGFjdGx5IHRoZSBkZWNvZGVkIGJ5dGVzLAogIC8vLyBzbyB0aGUgW1VpbnQ4TGlzdC5sZW5ndGhdIGlzIHByZWNpc2VseSB0aGUgbnVtYmVyIG9mIGRlY29kZWQgYnl0ZXMuCiAgLy8vIFRoZSBbVWludDhMaXN0LmJ1ZmZlcl0gbWF5IGJlIGxhcmdlciB0aGFuIHRoZSBkZWNvZGVkIGJ5dGVzLgogIFVpbnQ4TGlzdCBkZWNvZGUoU3RyaW5nIGVuY29kZWQpID0+IGRlY29kZXIuY29udmVydChlbmNvZGVkKTsKCiAgLy8vIFZhbGlkYXRlcyBhbmQgbm9ybWFsaXplcyB0aGUgYmFzZTY0IGVuY29kZWQgZGF0YSBpbiBbc291cmNlXS4KICAvLy8KICAvLy8gT25seSBhY3RzIG9uIHRoZSBzdWJzdHJpbmcgZnJvbSBbc3RhcnRdIHRvIFtlbmRdLCB3aXRoIFtlbmRdCiAgLy8vIGRlZmF1bHRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgogIC8vLwogIC8vLyBOb3JtYWxpemF0aW9uIHdpbGw6CiAgLy8vICogVW5lc2NhcGUgYW55IGAlYC1lc2NhcGVzLgogIC8vLyAqIE9ubHkgYWxsb3cgdmFsaWQgY2hhcmFjdGVycyAoYEFgLWBaYCwgYGFgLWB6YCwgYDBgLWA5YCwgYC9gIGFuZCBgK2ApLgogIC8vLyAqIE5vcm1hbGl6ZSBhIGBfYCBvciBgLWAgY2hhcmFjdGVyIHRvIGAvYCBvciBgK2AuCiAgLy8vICogVmFsaWRhdGUgdGhhdCBleGlzdGluZyBwYWRkaW5nICh0cmFpbGluZyBgPWAgY2hhcmFjdGVycykgaXMgY29ycmVjdC4KICAvLy8gKiBJZiBubyBwYWRkaW5nIGV4aXN0cywgYWRkIGNvcnJlY3QgcGFkZGluZyBpZiBuZWNlc3NhcnkgYW5kIHBvc3NpYmxlLgogIC8vLyAqIFZhbGlkYXRlIHRoYXQgdGhlIGxlbmd0aCBpcyBjb3JyZWN0IChhIG11bHRpcGxlIG9mIGZvdXIpLgogIFN0cmluZyBub3JtYWxpemUoU3RyaW5nIHNvdXJjZSwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBzb3VyY2UubGVuZ3RoKTsKICAgIGNvbnN0IHBlcmNlbnQgPSAweDI1OwogICAgY29uc3QgZXF1YWxzID0gMHgzZDsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXI7CiAgICB2YXIgc2xpY2VTdGFydCA9IHN0YXJ0OwogICAgdmFyIGFscGhhYmV0ID0gX0Jhc2U2NEVuY29kZXIuX2Jhc2U2NEFscGhhYmV0OwogICAgdmFyIGludmVyc2VBbHBoYWJldCA9IF9CYXNlNjREZWNvZGVyLl9pbnZlcnNlQWxwaGFiZXQ7CiAgICB2YXIgZmlyc3RQYWRkaW5nID0gLTE7CiAgICB2YXIgZmlyc3RQYWRkaW5nU291cmNlSW5kZXggPSAtMTsKICAgIHZhciBwYWRkaW5nQ291bnQgPSAwOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOykgewogICAgICB2YXIgc2xpY2VFbmQgPSBpOwogICAgICB2YXIgY2hhciA9IHNvdXJjZS5jb2RlVW5pdEF0KGkrKyk7CiAgICAgIHZhciBvcmlnaW5hbENoYXIgPSBjaGFyOwogICAgICAvLyBOb3JtYWxpemUgY2hhciwga2VlcCBvcmlnaW5hbENoYXIgdG8gc2VlIGlmIGl0IG1hdGNoZXMgdGhlIHNvdXJjZS4KICAgICAgaWYgKGNoYXIgPT0gcGVyY2VudCkgewogICAgICAgIGlmIChpICsgMiA8PSBlbmQpIHsKICAgICAgICAgIGNoYXIgPSBwYXJzZUhleEJ5dGUoc291cmNlLCBpKTsgLy8gTWF5IGJlIG5lZ2F0aXZlLgogICAgICAgICAgaSArPSAyOwogICAgICAgICAgLy8gV2Uga25vdyB0aGF0ICUyNSBpc24ndCB2YWxpZCwgYnV0IG91ciB0YWJsZSBjb25zaWRlcnMgaXQKICAgICAgICAgIC8vIGEgcG90ZW50aWFsIHBhZGRpbmcgc3RhcnQsIHNvIHNraXAgdGhlIGNoZWNrcy4KICAgICAgICAgIGlmIChjaGFyID09IHBlcmNlbnQpIGNoYXIgPSAtMTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gQW4gaW52YWxpZCBIRVggZXNjYXBlICh0b28gc2hvcnQpLgogICAgICAgICAgLy8gSnVzdCBza2lwIHBhc3QgdGhlIGhhbmRsaW5nIGFuZCByZWFjaCB0aGUgdGhyb3cgYmVsb3cuCiAgICAgICAgICBjaGFyID0gLTE7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIElmIGNoYXIgaXMgbmVnYXRpdmUgaGVyZSwgaGV4LWRlY29kaW5nIGZhaWxlZCBpbiBzb21lIHdheS4KICAgICAgaWYgKDAgPD0gY2hhciAmJiBjaGFyIDw9IDEyNykgewogICAgICAgIHZhciB2YWx1ZSA9IGludmVyc2VBbHBoYWJldFtjaGFyXTsKICAgICAgICBpZiAodmFsdWUgPj0gMCkgewogICAgICAgICAgY2hhciA9IGFscGhhYmV0LmNvZGVVbml0QXQodmFsdWUpOwogICAgICAgICAgaWYgKGNoYXIgPT0gb3JpZ2luYWxDaGFyKSBjb250aW51ZTsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09IF9CYXNlNjREZWNvZGVyLl9wYWRkaW5nKSB7CiAgICAgICAgICAvLyBXZSBoYXZlIHJ1bGVkIG91dCBwZXJjZW50LCBzbyBjaGFyIGlzICc9Jy4KICAgICAgICAgIGlmIChmaXJzdFBhZGRpbmcgPCAwKSB7CiAgICAgICAgICAgIC8vIE1hcmsgcG9zaXRpb24gaW4gbm9ybWFsaXplZCBvdXRwdXQgd2hlcmUgcGFkZGluZyBvY2N1cnMuCiAgICAgICAgICAgIGZpcnN0UGFkZGluZyA9IChidWZmZXI/Lmxlbmd0aCA/PyAwKSArIChzbGljZUVuZCAtIHNsaWNlU3RhcnQpOwogICAgICAgICAgICBmaXJzdFBhZGRpbmdTb3VyY2VJbmRleCA9IHNsaWNlRW5kOwogICAgICAgICAgfQogICAgICAgICAgcGFkZGluZ0NvdW50Kys7CiAgICAgICAgICAvLyBJdCBjb3VsZCBoYXZlIGJlZW4gYW4gZXNjYXBlZCBlcXVhbHMgKCUzRCkuCiAgICAgICAgICBpZiAob3JpZ2luYWxDaGFyID09IGVxdWFscykgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICh2YWx1ZSAhPSBfQmFzZTY0RGVjb2Rlci5faW52YWxpZCkgewogICAgICAgICAgYnVmZmVyID8/PSBTdHJpbmdCdWZmZXIoKTsKICAgICAgICAgIGJ1ZmZlci53cml0ZShzb3VyY2Uuc3Vic3RyaW5nKHNsaWNlU3RhcnQsIHNsaWNlRW5kKSk7CiAgICAgICAgICBidWZmZXIud3JpdGVDaGFyQ29kZShjaGFyKTsKICAgICAgICAgIHNsaWNlU3RhcnQgPSBpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBiYXNlNjQgZGF0YSIsIHNvdXJjZSwgc2xpY2VFbmQpOwogICAgfQogICAgaWYgKGJ1ZmZlciAhPSBudWxsKSB7CiAgICAgIGJ1ZmZlci53cml0ZShzb3VyY2Uuc3Vic3RyaW5nKHNsaWNlU3RhcnQsIGVuZCkpOwogICAgICBpZiAoZmlyc3RQYWRkaW5nID49IDApIHsKICAgICAgICAvLyBUaGVyZSB3YXMgcGFkZGluZyBpbiB0aGUgc291cmNlLiBDaGVjayB0aGF0IGl0IGlzIHZhbGlkOgogICAgICAgIC8vICogcmVzdWx0IGxlbmd0aCBhIG11bHRpcGxlIG9mIGZvdXIKICAgICAgICAvLyAqIG9uZSBvciB0d28gcGFkZGluZyBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQuCiAgICAgICAgX2NoZWNrUGFkZGluZyhzb3VyY2UsIGZpcnN0UGFkZGluZ1NvdXJjZUluZGV4LCBlbmQsIGZpcnN0UGFkZGluZywKICAgICAgICAgICAgcGFkZGluZ0NvdW50LCBidWZmZXIubGVuZ3RoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBMZW5ndGggb2YgbGFzdCBjaHVuayAoMS00IGNoYXJzKSBpbiB0aGUgZW5jb2RpbmcuCiAgICAgICAgdmFyIGVuZExlbmd0aCA9ICgoYnVmZmVyLmxlbmd0aCAtIDEpICUgNCkgKyAxOwogICAgICAgIGlmIChlbmRMZW5ndGggPT0gMSkgewogICAgICAgICAgLy8gVGhlIGRhdGEgbXVzdCBoYXZlIGxlbmd0aCAwLCAyIG9yIDMgbW9kdWxvIDQuCiAgICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgYmFzZTY0IGVuY29kaW5nIGxlbmd0aCAiLCBzb3VyY2UsIGVuZCk7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChlbmRMZW5ndGggPCA0KSB7CiAgICAgICAgICBidWZmZXIud3JpdGUoIj0iKTsKICAgICAgICAgIGVuZExlbmd0aCsrOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gc291cmNlLnJlcGxhY2VSYW5nZShzdGFydCwgZW5kLCBidWZmZXIudG9TdHJpbmcoKSk7CiAgICB9CiAgICAvLyBPcmlnaW5hbCB3YXMgYWxyZWFkeSBub3JtYWxpemVkLCBvbmx5IGNoZWNrIHBhZGRpbmcuCiAgICB2YXIgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAoZmlyc3RQYWRkaW5nID49IDApIHsKICAgICAgX2NoZWNrUGFkZGluZyhzb3VyY2UsIGZpcnN0UGFkZGluZ1NvdXJjZUluZGV4LCBlbmQsIGZpcnN0UGFkZGluZywKICAgICAgICAgIHBhZGRpbmdDb3VudCwgbGVuZ3RoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIE5vIHBhZGRpbmcgZ2l2ZW4sIHNvIGFkZCBzb21lIGlmIG5lZWRlZCBpdC4KICAgICAgdmFyIGVuZExlbmd0aCA9IGxlbmd0aCAlIDQ7CiAgICAgIGlmIChlbmRMZW5ndGggPT0gMSkgewogICAgICAgIC8vIFRoZSBkYXRhIG11c3QgaGF2ZSBsZW5ndGggMCwgMiBvciAzIG1vZHVsbyA0LgogICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBiYXNlNjQgZW5jb2RpbmcgbGVuZ3RoICIsIHNvdXJjZSwgZW5kKTsKICAgICAgfQogICAgICBpZiAoZW5kTGVuZ3RoID4gMSkgewogICAgICAgIC8vIFRoZXJlIGlzIG5vICJpbnNlcnRBdCIgb24gU3RyaW5nLCBidXQgdGhpcyB3b3JrcyBhcyB3ZWxsLgogICAgICAgIHNvdXJjZSA9IHNvdXJjZS5yZXBsYWNlUmFuZ2UoZW5kLCBlbmQsIChlbmRMZW5ndGggPT0gMikgPyAiPT0iIDogIj0iKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHNvdXJjZTsKICB9CgogIHN0YXRpYyB2b2lkIF9jaGVja1BhZGRpbmcoU3RyaW5nIHNvdXJjZSwgaW50IHNvdXJjZUluZGV4LCBpbnQgc291cmNlRW5kLAogICAgICBpbnQgZmlyc3RQYWRkaW5nLCBpbnQgcGFkZGluZ0NvdW50LCBpbnQgbGVuZ3RoKSB7CiAgICBpZiAobGVuZ3RoICUgNCAhPSAwKSB7CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICJJbnZhbGlkIGJhc2U2NCBwYWRkaW5nLCBwYWRkZWQgbGVuZ3RoIG11c3QgYmUgbXVsdGlwbGUgb2YgZm91ciwgIgogICAgICAgICAgImlzICRsZW5ndGgiLAogICAgICAgICAgc291cmNlLAogICAgICAgICAgc291cmNlRW5kKTsKICAgIH0KICAgIGlmIChmaXJzdFBhZGRpbmcgKyBwYWRkaW5nQ291bnQgIT0gbGVuZ3RoKSB7CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICJJbnZhbGlkIGJhc2U2NCBwYWRkaW5nLCAnPScgbm90IGF0IHRoZSBlbmQiLCBzb3VyY2UsIHNvdXJjZUluZGV4KTsKICAgIH0KICAgIGlmIChwYWRkaW5nQ291bnQgPiAyKSB7CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICJJbnZhbGlkIGJhc2U2NCBwYWRkaW5nLCBtb3JlIHRoYW4gdHdvICc9JyBjaGFyYWN0ZXJzIiwKICAgICAgICAgIHNvdXJjZSwKICAgICAgICAgIHNvdXJjZUluZGV4KTsKICAgIH0KICB9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBFbmNvZGVyCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8vIEJhc2U2NCBhbmQgYmFzZTY0dXJsIGVuY29kaW5nIGNvbnZlcnRlci4KLy8vCi8vLyBFbmNvZGVzIGxpc3RzIG9mIGJ5dGVzIHVzaW5nIGJhc2U2NCBvciBiYXNlNjR1cmwgZW5jb2RpbmcuCi8vLwovLy8gVGhlIHJlc3VsdHMgYXJlIEFTQ0lJIHN0cmluZ3MgdXNpbmcgYSByZXN0cmljdGVkIGFscGhhYmV0LgpjbGFzcyBCYXNlNjRFbmNvZGVyIGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgU3RyaW5nPiB7CiAgZmluYWwgYm9vbCBfdXJsU2FmZTsKCiAgY29uc3QgQmFzZTY0RW5jb2RlcigpIDogX3VybFNhZmUgPSBmYWxzZTsKICBjb25zdCBCYXNlNjRFbmNvZGVyLnVybFNhZmUoKSA6IF91cmxTYWZlID0gdHJ1ZTsKCiAgU3RyaW5nIGNvbnZlcnQoTGlzdDxpbnQ+IGlucHV0KSB7CiAgICBpZiAoaW5wdXQuaXNFbXB0eSkgcmV0dXJuICIiOwogICAgdmFyIGVuY29kZXIgPSBfQmFzZTY0RW5jb2RlcihfdXJsU2FmZSk7CiAgICB2YXIgYnVmZmVyID0gZW5jb2Rlci5lbmNvZGUoaW5wdXQsIDAsIGlucHV0Lmxlbmd0aCwgdHJ1ZSk7CiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZXMoYnVmZmVyKTsKICB9CgogIEJ5dGVDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICBpZiAoc2luayBpcyBTdHJpbmdDb252ZXJzaW9uU2luaykgewogICAgICByZXR1cm4gX1V0ZjhCYXNlNjRFbmNvZGVyU2luayhzaW5rLmFzVXRmOFNpbmsoZmFsc2UpLCBfdXJsU2FmZSk7CiAgICB9CiAgICByZXR1cm4gX0FzY2lpQmFzZTY0RW5jb2RlclNpbmsoc2luaywgX3VybFNhZmUpOwogIH0KfQoKLy8vIEhlbHBlciBjbGFzcyBmb3IgZW5jb2RpbmcgYnl0ZXMgdG8gYmFzZTY0LgpjbGFzcyBfQmFzZTY0RW5jb2RlciB7CiAgLy8vIFRoZSBSRkMgNDY0OCBiYXNlNjQgZW5jb2RpbmcgYWxwaGFiZXQuCiAgc3RhdGljIGNvbnN0IFN0cmluZyBfYmFzZTY0QWxwaGFiZXQgPQogICAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CgogIC8vLyBUaGUgUkZDIDQ2NDggYmFzZTY0dXJsIGVuY29kaW5nIGFscGhhYmV0LgogIHN0YXRpYyBjb25zdCBTdHJpbmcgX2Jhc2U2NFVybEFscGhhYmV0ID0KICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV8iOwoKICAvLy8gU2hpZnQtY291bnQgdG8gZXh0cmFjdCB0aGUgdmFsdWVzIHN0b3JlZCBpbiBbX3N0YXRlXS4KICBzdGF0aWMgY29uc3QgaW50IF92YWx1ZVNoaWZ0ID0gMjsKCiAgLy8vIE1hc2sgdG8gZXh0cmFjdCB0aGUgY291bnQgdmFsdWUgc3RvcmVkIGluIFtfc3RhdGVdLgogIHN0YXRpYyBjb25zdCBpbnQgX2NvdW50TWFzayA9IDM7CgogIHN0YXRpYyBjb25zdCBpbnQgX3NpeEJpdE1hc2sgPSAweDNGOwoKICAvLy8gSW50ZXJtZWRpYXRlIHN0YXRlIGJldHdlZW4gY2h1bmtzLgogIC8vLwogIC8vLyBFbmNvZGluZyBoYW5kbGVzIHRocmVlIGJ5dGVzIGF0IGEgdGltZS4KICAvLy8gSWYgZmV3ZXIgdGhhbiB0aHJlZSBieXRlcyBoYXMgYmVlbiBzZWVuLCB0aGlzIHZhbHVlIGVuY29kZXMKICAvLy8gdGhlIG51bWJlciBvZiBieXRlcyBzZWVuICgwLCAxIG9yIDIpIGFuZCB0aGVpciB2YWx1ZXMuCiAgaW50IF9zdGF0ZSA9IDA7CgogIC8vLyBBbHBoYWJldCB1c2VkIGZvciBlbmNvZGluZy4KICBmaW5hbCBTdHJpbmcgX2FscGhhYmV0OwoKICBfQmFzZTY0RW5jb2Rlcihib29sIHVybFNhZmUpCiAgICAgIDogX2FscGhhYmV0ID0gdXJsU2FmZSA/IF9iYXNlNjRVcmxBbHBoYWJldCA6IF9iYXNlNjRBbHBoYWJldDsKCiAgLy8vIEVuY29kZSBjb3VudCBhbmQgYml0cyBpbnRvIGEgdmFsdWUgdG8gYmUgc3RvcmVkIGluIFtfc3RhdGVdLgogIHN0YXRpYyBpbnQgX2VuY29kZVN0YXRlKGludCBjb3VudCwgaW50IGJpdHMpIHsKICAgIGFzc2VydChjb3VudCA8PSBfY291bnRNYXNrKTsKICAgIHJldHVybiBiaXRzIDw8IF92YWx1ZVNoaWZ0IHwgY291bnQ7CiAgfQoKICAvLy8gRXh0cmFjdCBiaXRzIGZyb20gZW5jb2RlZCBzdGF0ZS4KICBzdGF0aWMgaW50IF9zdGF0ZUJpdHMoaW50IHN0YXRlKSA9PiBzdGF0ZSA+PiBfdmFsdWVTaGlmdDsKCiAgLy8vIEV4dHJhY3QgY291bnQgZnJvbSBlbmNvZGVkIHN0YXRlLgogIHN0YXRpYyBpbnQgX3N0YXRlQ291bnQoaW50IHN0YXRlKSA9PiBzdGF0ZSAmIF9jb3VudE1hc2s7CgogIC8vLyBDcmVhdGUgYSBbVWludDhMaXN0XSB3aXRoIHRoZSBwcm92aWRlZCBsZW5ndGguCiAgVWludDhMaXN0IGNyZWF0ZUJ1ZmZlcihpbnQgYnVmZmVyTGVuZ3RoKSA9PiBVaW50OExpc3QoYnVmZmVyTGVuZ3RoKTsKCiAgLy8vIEVuY29kZSBbYnl0ZXNdIGZyb20gW3N0YXJ0XSB0byBbZW5kXSBhbmQgdGhlIGJpdHMgaW4gW19zdGF0ZV0uCiAgLy8vCiAgLy8vIFJldHVybnMgYSBbVWludDhMaXN0XSBvZiB0aGUgQVNDSUkgY29kZXMgb2YgdGhlIGVuY29kZWQgZGF0YS4KICAvLy8KICAvLy8gSWYgdGhlIGlucHV0LCBpbmNsdWRpbmcgbGVmdCBvdmVyIFtfc3RhdGVdIGZyb20gZWFybGllciBlbmNvZGluZ3MsCiAgLy8vIGFyZSBub3QgYSBtdWx0aXBsZSBvZiB0aHJlZSBieXRlcywgdGhlbiB0aGUgcGFydGlhbCBzdGF0ZSBpcyBzdG9yZWQKICAvLy8gYmFjayBpbnRvIFtfc3RhdGVdLgogIC8vLyBJZiBbaXNMYXN0XSBpcyB0cnVlLCBwYXJ0aWFsIHN0YXRlIGlzIGVuY29kZWQgaW4gdGhlIG91dHB1dCBpbnN0ZWFkLAogIC8vLyB3aXRoIHRoZSBuZWNlc3NhcnkgcGFkZGluZy4KICAvLy8KICAvLy8gUmV0dXJucyBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gb3V0cHV0LgogIFVpbnQ4TGlzdCBlbmNvZGUoTGlzdDxpbnQ+IGJ5dGVzLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBhc3NlcnQoMCA8PSBzdGFydCk7CiAgICBhc3NlcnQoc3RhcnQgPD0gZW5kKTsKICAgIGFzc2VydChieXRlcyA9PSBudWxsIHx8IGVuZCA8PSBieXRlcy5sZW5ndGgpOwogICAgdmFyIGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwoKICAgIHZhciBjb3VudCA9IF9zdGF0ZUNvdW50KF9zdGF0ZSk7CiAgICB2YXIgYnl0ZUNvdW50ID0gKGNvdW50ICsgbGVuZ3RoKTsKICAgIHZhciBmdWxsQ2h1bmtzID0gYnl0ZUNvdW50IH4vIDM7CiAgICB2YXIgcGFydGlhbENodW5rTGVuZ3RoID0gYnl0ZUNvdW50IC0gZnVsbENodW5rcyAqIDM7CiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gZnVsbENodW5rcyAqIDQ7CiAgICBpZiAoaXNMYXN0ICYmIHBhcnRpYWxDaHVua0xlbmd0aCA+IDApIHsKICAgICAgYnVmZmVyTGVuZ3RoICs9IDQ7IC8vIFJvb20gZm9yIHBhZGRpbmcuCiAgICB9CiAgICB2YXIgb3V0cHV0ID0gY3JlYXRlQnVmZmVyKGJ1ZmZlckxlbmd0aCk7CiAgICBfc3RhdGUgPQogICAgICAgIGVuY29kZUNodW5rKF9hbHBoYWJldCwgYnl0ZXMsIHN0YXJ0LCBlbmQsIGlzTGFzdCwgb3V0cHV0LCAwLCBfc3RhdGUpOwogICAgaWYgKGJ1ZmZlckxlbmd0aCA+IDApIHJldHVybiBvdXRwdXQ7CiAgICAvLyBJZiB0aGUgaW5wdXQgcGx1cyB0aGUgZGF0YSBpbiBzdGF0ZSBpcyBzdGlsbCBsZXNzIHRoYW4gdGhyZWUgYnl0ZXMsCiAgICAvLyB0aGVyZSBtYXkgbm90IGJlIGFueSBvdXRwdXQuCiAgICByZXR1cm4gbnVsbDsKICB9CgogIHN0YXRpYyBpbnQgZW5jb2RlQ2h1bmsoU3RyaW5nIGFscGhhYmV0LCBMaXN0PGludD4gYnl0ZXMsIGludCBzdGFydCwgaW50IGVuZCwKICAgICAgYm9vbCBpc0xhc3QsIFVpbnQ4TGlzdCBvdXRwdXQsIGludCBvdXRwdXRJbmRleCwgaW50IHN0YXRlKSB7CiAgICB2YXIgYml0cyA9IF9zdGF0ZUJpdHMoc3RhdGUpOwogICAgLy8gQ291bnQgbnVtYmVyIG9mIG1pc3NpbmcgYnl0ZXMgaW4gdGhyZWUtYnl0ZSBjaHVuay4KICAgIHZhciBleHBlY3RlZENoYXJzID0gMyAtIF9zdGF0ZUNvdW50KHN0YXRlKTsKCiAgICAvLyBUaGUgaW5wdXQgbXVzdCBiZSBhIGxpc3Qgb2YgYnl0ZXMgKGludGVnZXJzIGluIHRoZSByYW5nZSAwLi4yNTUpLgogICAgLy8gVGhlIHZhbHVlIG9mIGBieXRlT3JgIHdpbGwgYmUgdGhlIGJpdHdpc2Ugb3Igb2YgYWxsIHRoZSB2YWx1ZXMgaW4KICAgIC8vIGBieXRlc2AgYW5kIGEgbGF0ZXIgY2hlY2sgd2lsbCB2YWxpZGF0ZSB0aGF0IHRoZXkgd2VyZSBhbGwgdmFsaWQgYnl0ZXMuCiAgICB2YXIgYnl0ZU9yID0gMDsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBieXRlID0gYnl0ZXNbaV07CiAgICAgIGJ5dGVPciB8PSBieXRlOwogICAgICBiaXRzID0gKChiaXRzIDw8IDgpIHwgYnl0ZSkgJiAweEZGRkZGRjsgLy8gTmV2ZXIgc3RvcmUgbW9yZSB0aGFuIDI0IGJpdHMuCiAgICAgIGV4cGVjdGVkQ2hhcnMtLTsKICAgICAgaWYgKGV4cGVjdGVkQ2hhcnMgPT0gMCkgewogICAgICAgIG91dHB1dFtvdXRwdXRJbmRleCsrXSA9IGFscGhhYmV0LmNvZGVVbml0QXQoKGJpdHMgPj4gMTgpICYgX3NpeEJpdE1hc2spOwogICAgICAgIG91dHB1dFtvdXRwdXRJbmRleCsrXSA9IGFscGhhYmV0LmNvZGVVbml0QXQoKGJpdHMgPj4gMTIpICYgX3NpeEJpdE1hc2spOwogICAgICAgIG91dHB1dFtvdXRwdXRJbmRleCsrXSA9IGFscGhhYmV0LmNvZGVVbml0QXQoKGJpdHMgPj4gNikgJiBfc2l4Qml0TWFzayk7CiAgICAgICAgb3V0cHV0W291dHB1dEluZGV4KytdID0gYWxwaGFiZXQuY29kZVVuaXRBdChiaXRzICYgX3NpeEJpdE1hc2spOwogICAgICAgIGV4cGVjdGVkQ2hhcnMgPSAzOwogICAgICAgIGJpdHMgPSAwOwogICAgICB9CiAgICB9CiAgICBpZiAoYnl0ZU9yID49IDAgJiYgYnl0ZU9yIDw9IDI1NSkgewogICAgICBpZiAoaXNMYXN0ICYmIGV4cGVjdGVkQ2hhcnMgPCAzKSB7CiAgICAgICAgd3JpdGVGaW5hbENodW5rKGFscGhhYmV0LCBvdXRwdXQsIG91dHB1dEluZGV4LCAzIC0gZXhwZWN0ZWRDaGFycywgYml0cyk7CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KICAgICAgcmV0dXJuIF9lbmNvZGVTdGF0ZSgzIC0gZXhwZWN0ZWRDaGFycywgYml0cyk7CiAgICB9CgogICAgLy8gVGhlcmUgd2FzIGFuIGludmFsaWQgYnl0ZSB2YWx1ZSBzb21ld2hlcmUgaW4gdGhlIGlucHV0IC0gZmluZCBpdCEKICAgIHZhciBpID0gc3RhcnQ7CiAgICB3aGlsZSAoaSA8IGVuZCkgewogICAgICB2YXIgYnl0ZSA9IGJ5dGVzW2ldOwogICAgICBpZiAoYnl0ZSA8IDAgfHwgYnl0ZSA+IDI1NSkgYnJlYWs7CiAgICAgIGkrKzsKICAgIH0KICAgIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUoCiAgICAgICAgYnl0ZXMsICJOb3QgYSBieXRlIHZhbHVlIGF0IGluZGV4ICRpOiAweCR7Ynl0ZXNbaV0udG9SYWRpeFN0cmluZygxNil9Iik7CiAgfQoKICAvLy8gV3JpdGVzIGEgZmluYWwgZW5jb2RlZCBmb3VyLWNoYXJhY3RlciBjaHVuay4KICAvLy8KICAvLy8gT25seSB1c2VkIHdoZW4gdGhlIFtfc3RhdGVdIGNvbnRhaW5zIGEgcGFydGlhbCAoMSBvciAyIGJ5dGUpCiAgLy8vIGlucHV0LgogIHN0YXRpYyB2b2lkIHdyaXRlRmluYWxDaHVuaygKICAgICAgU3RyaW5nIGFscGhhYmV0LCBVaW50OExpc3Qgb3V0cHV0LCBpbnQgb3V0cHV0SW5kZXgsIGludCBjb3VudCwgaW50IGJpdHMpIHsKICAgIGFzc2VydChjb3VudCA+IDApOwogICAgaWYgKGNvdW50ID09IDEpIHsKICAgICAgb3V0cHV0W291dHB1dEluZGV4KytdID0gYWxwaGFiZXQuY29kZVVuaXRBdCgoYml0cyA+PiAyKSAmIF9zaXhCaXRNYXNrKTsKICAgICAgb3V0cHV0W291dHB1dEluZGV4KytdID0gYWxwaGFiZXQuY29kZVVuaXRBdCgoYml0cyA8PCA0KSAmIF9zaXhCaXRNYXNrKTsKICAgICAgb3V0cHV0W291dHB1dEluZGV4KytdID0gX3BhZGRpbmdDaGFyOwogICAgICBvdXRwdXRbb3V0cHV0SW5kZXgrK10gPSBfcGFkZGluZ0NoYXI7CiAgICB9IGVsc2UgewogICAgICBhc3NlcnQoY291bnQgPT0gMik7CiAgICAgIG91dHB1dFtvdXRwdXRJbmRleCsrXSA9IGFscGhhYmV0LmNvZGVVbml0QXQoKGJpdHMgPj4gMTApICYgX3NpeEJpdE1hc2spOwogICAgICBvdXRwdXRbb3V0cHV0SW5kZXgrK10gPSBhbHBoYWJldC5jb2RlVW5pdEF0KChiaXRzID4+IDQpICYgX3NpeEJpdE1hc2spOwogICAgICBvdXRwdXRbb3V0cHV0SW5kZXgrK10gPSBhbHBoYWJldC5jb2RlVW5pdEF0KChiaXRzIDw8IDIpICYgX3NpeEJpdE1hc2spOwogICAgICBvdXRwdXRbb3V0cHV0SW5kZXgrK10gPSBfcGFkZGluZ0NoYXI7CiAgICB9CiAgfQp9CgpjbGFzcyBfQnVmZmVyQ2FjaGluZ0Jhc2U2NEVuY29kZXIgZXh0ZW5kcyBfQmFzZTY0RW5jb2RlciB7CiAgLy8vIFJldXNlZCBidWZmZXIuCiAgLy8vCiAgLy8vIFdoZW4gdGhlIGJ1ZmZlciBpc24ndCByZWxlYXNlZCB0byB0aGUgc2luaywgb25seSB1c2VkIHRvIGNyZWF0ZSBhbm90aGVyCiAgLy8vIHZhbHVlIChhIHN0cmluZyksIHRoZSBidWZmZXIgY2FuIGJlIHJldXNlZCBiZXR3ZWVuIGNodW5rcy4KICBVaW50OExpc3QgYnVmZmVyQ2FjaGU7CgogIF9CdWZmZXJDYWNoaW5nQmFzZTY0RW5jb2Rlcihib29sIHVybFNhZmUpIDogc3VwZXIodXJsU2FmZSk7CgogIFVpbnQ4TGlzdCBjcmVhdGVCdWZmZXIoaW50IGJ1ZmZlckxlbmd0aCkgewogICAgaWYgKGJ1ZmZlckNhY2hlID09IG51bGwgfHwgYnVmZmVyQ2FjaGUubGVuZ3RoIDwgYnVmZmVyTGVuZ3RoKSB7CiAgICAgIGJ1ZmZlckNhY2hlID0gVWludDhMaXN0KGJ1ZmZlckxlbmd0aCk7CiAgICB9CiAgICAvLyBSZXR1cm4gYSB2aWV3IG9mIHRoZSBidWZmZXIsIHNvIGl0IGhhcyB0aGUgcmVxdWVzdGVkIGxlbmd0aC4KICAgIHJldHVybiBVaW50OExpc3QudmlldyhidWZmZXJDYWNoZS5idWZmZXIsIDAsIGJ1ZmZlckxlbmd0aCk7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfQmFzZTY0RW5jb2RlclNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICB2b2lkIGFkZChMaXN0PGludD4gc291cmNlKSB7CiAgICBfYWRkKHNvdXJjZSwgMCwgc291cmNlLmxlbmd0aCwgZmFsc2UpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9hZGQobnVsbCwgMCwgMCwgdHJ1ZSk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGlmIChlbmQgPT0gbnVsbCkgdGhyb3cgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJlbmQiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHNvdXJjZS5sZW5ndGgpOwogICAgX2FkZChzb3VyY2UsIHN0YXJ0LCBlbmQsIGlzTGFzdCk7CiAgfQoKICB2b2lkIF9hZGQoTGlzdDxpbnQ+IHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCk7Cn0KCmNsYXNzIF9Bc2NpaUJhc2U2NEVuY29kZXJTaW5rIGV4dGVuZHMgX0Jhc2U2NEVuY29kZXJTaW5rIHsKICBmaW5hbCBTaW5rPFN0cmluZz4gX3Npbms7CiAgZmluYWwgX0Jhc2U2NEVuY29kZXIgX2VuY29kZXI7CgogIF9Bc2NpaUJhc2U2NEVuY29kZXJTaW5rKHRoaXMuX3NpbmssIGJvb2wgdXJsU2FmZSkKICAgICAgOiBfZW5jb2RlciA9IF9CdWZmZXJDYWNoaW5nQmFzZTY0RW5jb2Rlcih1cmxTYWZlKTsKCiAgdm9pZCBfYWRkKExpc3Q8aW50PiBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIHZhciBidWZmZXIgPSBfZW5jb2Rlci5lbmNvZGUoc291cmNlLCBzdGFydCwgZW5kLCBpc0xhc3QpOwogICAgaWYgKGJ1ZmZlciAhPSBudWxsKSB7CiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcuZnJvbUNoYXJDb2RlcyhidWZmZXIpOwogICAgICBfc2luay5hZGQoc3RyaW5nKTsKICAgIH0KICAgIGlmIChpc0xhc3QpIHsKICAgICAgX3NpbmsuY2xvc2UoKTsKICAgIH0KICB9Cn0KCmNsYXNzIF9VdGY4QmFzZTY0RW5jb2RlclNpbmsgZXh0ZW5kcyBfQmFzZTY0RW5jb2RlclNpbmsgewogIGZpbmFsIEJ5dGVDb252ZXJzaW9uU2luayBfc2luazsKICBmaW5hbCBfQmFzZTY0RW5jb2RlciBfZW5jb2RlcjsKCiAgX1V0ZjhCYXNlNjRFbmNvZGVyU2luayh0aGlzLl9zaW5rLCBib29sIHVybFNhZmUpCiAgICAgIDogX2VuY29kZXIgPSBfQmFzZTY0RW5jb2Rlcih1cmxTYWZlKTsKCiAgdm9pZCBfYWRkKExpc3Q8aW50PiBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIHZhciBidWZmZXIgPSBfZW5jb2Rlci5lbmNvZGUoc291cmNlLCBzdGFydCwgZW5kLCBpc0xhc3QpOwogICAgaWYgKGJ1ZmZlciAhPSBudWxsKSB7CiAgICAgIF9zaW5rLmFkZFNsaWNlKGJ1ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCwgaXNMYXN0KTsKICAgIH0KICB9Cn0KCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBEZWNvZGVyCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKLy8vIERlY29kZXIgZm9yIGJhc2U2NCBlbmNvZGVkIGRhdGEuCi8vLwovLy8gVGhpcyBkZWNvZGVyIGFjY2VwdHMgYm90aCBiYXNlNjQgYW5kIGJhc2U2NHVybCAoInVybC1zYWZlIikgZW5jb2RpbmdzLgovLy8KLy8vIFRoZSBlbmNvZGluZyBpcyByZXF1aXJlZCB0byBiZSBwcm9wZXJseSBwYWRkZWQuCmNsYXNzIEJhc2U2NERlY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8U3RyaW5nLCBMaXN0PGludD4+IHsKICBjb25zdCBCYXNlNjREZWNvZGVyKCk7CgogIC8vLyBEZWNvZGVzIHRoZSBjaGFyYWN0ZXJzIG9mIFtpbnB1dF0gZnJvbSBbc3RhcnRdIHRvIFtlbmRdIGFzIGJhc2U2NC4KICAvLy8KICAvLy8gSWYgW3N0YXJ0XSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgc3RhcnQgb2YgW2lucHV0XS4KICAvLy8gSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIGVuZCBvZiBbaW5wdXRdLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgW1VpbnQ4TGlzdF0gY29udGFpbnMgZXhhY3RseSB0aGUgZGVjb2RlZCBieXRlcywKICAvLy8gc28gdGhlIFtVaW50OExpc3QubGVuZ3RoXSBpcyBwcmVjaXNlbHkgdGhlIG51bWJlciBvZiBkZWNvZGVkIGJ5dGVzLgogIC8vLyBUaGUgW1VpbnQ4TGlzdC5idWZmZXJdIG1heSBiZSBsYXJnZXIgdGhhbiB0aGUgZGVjb2RlZCBieXRlcy4KICBVaW50OExpc3QgY29udmVydChTdHJpbmcgaW5wdXQsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgaW5wdXQubGVuZ3RoKTsKICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybiBVaW50OExpc3QoMCk7CiAgICB2YXIgZGVjb2RlciA9IF9CYXNlNjREZWNvZGVyKCk7CiAgICB2YXIgYnVmZmVyID0gZGVjb2Rlci5kZWNvZGUoaW5wdXQsIHN0YXJ0LCBlbmQpOwogICAgZGVjb2Rlci5jbG9zZShpbnB1dCwgZW5kKTsKICAgIHJldHVybiBidWZmZXI7CiAgfQoKICBTdHJpbmdDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8TGlzdDxpbnQ+PiBzaW5rKSB7CiAgICByZXR1cm4gX0Jhc2U2NERlY29kZXJTaW5rKHNpbmspOwogIH0KfQoKLy8vIEhlbHBlciBjbGFzcyBpbXBsZW1lbnRpbmcgYmFzZTY0IGRlY29kaW5nIHdpdGggaW50ZXJtZWRpYXRlIHN0YXRlLgpjbGFzcyBfQmFzZTY0RGVjb2RlciB7CiAgLy8vIFNoaWZ0LWNvdW50IHRvIGV4dHJhY3QgdGhlIHZhbHVlcyBzdG9yZWQgaW4gW19zdGF0ZV0uCiAgc3RhdGljIGNvbnN0IGludCBfdmFsdWVTaGlmdCA9IDI7CgogIC8vLyBNYXNrIHRvIGV4dHJhY3QgdGhlIGNvdW50IHZhbHVlIHN0b3JlZCBpbiBbX3N0YXRlXS4KICBzdGF0aWMgY29uc3QgaW50IF9jb3VudE1hc2sgPSAzOwoKICAvLy8gSW52YWxpZCBjaGFyYWN0ZXIgaW4gZGVjb2RpbmcgdGFibGUuCiAgc3RhdGljIGNvbnN0IGludCBfaW52YWxpZCA9IC0yOwoKICAvLy8gUGFkZGluZyBjaGFyYWN0ZXIgaW4gZGVjb2RpbmcgdGFibGUuCiAgc3RhdGljIGNvbnN0IGludCBfcGFkZGluZyA9IC0xOwoKICAvLyBTaG9ydGhhbmRzIHRvIG1ha2UgdGhlIHRhYmxlIG1vcmUgcmVhZGFibGUuCiAgc3RhdGljIGNvbnN0IGludCBfXyA9IF9pbnZhbGlkOwogIHN0YXRpYyBjb25zdCBpbnQgX3AgPSBfcGFkZGluZzsKCiAgLy8vIE1hcHBpbmcgZnJvbSBBU0NJSSBjaGFyYWN0ZXJzIHRvIHRoZWlyIGluZGV4IGluIHRoZSBiYXNlNjQgYWxwaGFiZXQuCiAgLy8vCiAgLy8vIFVzZXMgW19pbnZhbGlkXSBmb3IgaW52YWxpZCBpbmRpY2VzIGFuZCBbX3BhZGRpbmddIGZvciB0aGUgcGFkZGluZwogIC8vLyBjaGFyYWN0ZXIuCiAgLy8vCiAgLy8vIEFjY2VwdHMgdGhlICJVUkwtc2FmZSIgYWxwaGFiZXQgYXMgd2VsbCAoYC1gIGFuZCBgX2AgYXJlIHRoZQogIC8vLyA2Mm5kIGFuZCA2M3JkIGFscGhhYmV0IGNoYXJhY3RlcnMpLCBhbmQgY29uc2lkZXJzIGAlYCBhIHBhZGRpbmcKICAvLy8gY2hhcmFjdGVyLCB3aGljaCBtdXN0IHRoZW4gYmUgZm9sbG93ZWQgYnkgYDNEYCwgdGhlIHBlcmNlbnQtZXNjYXBlCiAgLy8vIGZvciBgPWAuCiAgc3RhdGljIGZpbmFsIExpc3Q8aW50PiBfaW52ZXJzZUFscGhhYmV0ID0gSW50OExpc3QuZnJvbUxpc3QoWwogICAgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIC8vCiAgICBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgX18sIF9fLCBfXywgLy8KICAgIF9fLCBfXywgX18sIF9fLCBfXywgX3AsIF9fLCBfXywgX18sIF9fLCBfXywgNjIsIF9fLCA2MiwgX18sIDYzLCAvLwogICAgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIF9fLCBfXywgX18sIF9wLCBfXywgX18sIC8vCiAgICBfXywgMDAsIDAxLCAwMiwgMDMsIDA0LCAwNSwgMDYsIDA3LCAwOCwgMDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgLy8KICAgIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgX18sIF9fLCBfXywgX18sIDYzLCAvLwogICAgX18sIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIC8vCiAgICA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIF9fLCBfXywgX18sIF9fLCBfXywgLy8KICBdKTsKCiAgLy8gQ2hhcmFjdGVyIGNvbnN0YW50cy4KICBzdGF0aWMgY29uc3QgaW50IF9jaGFyX3BlcmNlbnQgPSAweDI1OyAvLyAnJScuCiAgc3RhdGljIGNvbnN0IGludCBfY2hhcl8zID0gMHgzMzsgLy8gJzMnLgogIHN0YXRpYyBjb25zdCBpbnQgX2NoYXJfZCA9IDB4NjQ7IC8vICdkJy4KCiAgLy8vIE1haW50YWlucyB0aGUgaW50ZXJtZWRpYXRlIHN0YXRlIG9mIGEgcGFydGx5LWRlY29kZWQgaW5wdXQuCiAgLy8vCiAgLy8vIEJhc2U2NCBpcyBkZWNvZGVkIGluIGNodW5rcyBvZiBmb3VyIGNoYXJhY3RlcnMuIElmIGEgY2h1bmsgZG9lcyBub3QKICAvLy8gY29udGFpbiBhIGZ1bGwgYmxvY2ssIHRoZSBkZWNvZGVkIGJpdHMgKHNpeCBwZXIgY2hhcmFjdGVyKSBvZiB0aGUKICAvLy8gYXZhaWxhYmxlIGNoYXJhY3RlcnMgYXJlIHN0b3JlZCBpbiBbX3N0YXRlXSB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvCiAgLy8vIFtfZGVjb2RlXSBvciBbX2Nsb3NlXS4KICAvLy8KICAvLy8gSWYgbm8gcGFkZGluZyBoYXMgYmVlbiBzZWVuLCB0aGUgdmFsdWUgaXMKICAvLy8gICBgbnVtYmVyT2ZDaGFyYWN0ZXJzU2VlbiB8IChkZWNvZGVkQml0cyA8PCAyKWAKICAvLy8gd2hlcmUgYG51bWJlck9mQ2hhcmFjdGVyc1NlZW5gIGlzIGJldHdlZW4gMCBhbmQgMyBhbmQgZGVjb2RlZCBiaXRzCiAgLy8vIGNvbnRhaW5zIHNpeCBiaXRzIHBlciBzZWVuIGNoYXJhY3Rlci4KICAvLy8KICAvLy8gSWYgcGFkZGluZyBoYXMgYmVlbiBzZWVuIHRoZSB2YWx1ZSBpcyBuZWdhdGl2ZS4gSXQncyB0aGUgYml0d2lzZSBuZWdhdGlvbgogIC8vLyBvZiB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBhbGxvd2VkIHBhZGRpbmcgY2hhcmFjdGVycyAoYWx3YXlzIH4wIG9yIH4xKS4KICAvLy8KICAvLy8gQSBzdGF0ZSBvZiBgMGAgb3IgYH4wYCBhcmUgdmFsaWQgcGxhY2VzIHRvIGVuZCBkZWNvZGluZywgYWxsIG90aGVyIHZhbHVlcwogIC8vLyBtZWFuIHRoYXQgYSBmb3VyLWNoYXJhY3RlciBibG9jayBoYXMgbm90IGJlZW4gY29tcGxldGVkLgogIGludCBfc3RhdGUgPSAwOwoKICAvLy8gRW5jb2RlcyBbY291bnRdIGFuZCBbYml0c10gYXMgYSB2YWx1ZSB0byBiZSBzdG9yZWQgaW4gW19zdGF0ZV0uCiAgc3RhdGljIGludCBfZW5jb2RlQ2hhcmFjdGVyU3RhdGUoaW50IGNvdW50LCBpbnQgYml0cykgewogICAgYXNzZXJ0KGNvdW50ID09IChjb3VudCAmIF9jb3VudE1hc2spKTsKICAgIHJldHVybiAoYml0cyA8PCBfdmFsdWVTaGlmdCB8IGNvdW50KTsKICB9CgogIC8vLyBFeHRyYWN0cyBjb3VudCBmcm9tIGEgW19zdGF0ZV0gdmFsdWUuCiAgc3RhdGljIGludCBfc3RhdGVDb3VudChpbnQgc3RhdGUpIHsKICAgIGFzc2VydChzdGF0ZSA+PSAwKTsKICAgIHJldHVybiBzdGF0ZSAmIF9jb3VudE1hc2s7CiAgfQoKICAvLy8gRXh0cmFjdHMgdmFsdWUgYml0cyBmcm9tIGEgW19zdGF0ZV0gdmFsdWUuCiAgc3RhdGljIGludCBfc3RhdGVCaXRzKGludCBzdGF0ZSkgewogICAgYXNzZXJ0KHN0YXRlID49IDApOwogICAgcmV0dXJuIHN0YXRlID4+IF92YWx1ZVNoaWZ0OwogIH0KCiAgLy8vIEVuY29kZXMgYSBudW1iZXIgb2YgZXhwZWN0ZWQgcGFkZGluZyBjaGFyYWN0ZXJzIHRvIGJlIHN0b3JlZCBpbiBbX3N0YXRlXS4KICBzdGF0aWMgaW50IF9lbmNvZGVQYWRkaW5nU3RhdGUoaW50IGV4cGVjdGVkUGFkZGluZykgewogICAgYXNzZXJ0KGV4cGVjdGVkUGFkZGluZyA+PSAwKTsKICAgIGFzc2VydChleHBlY3RlZFBhZGRpbmcgPD0gNSk7CiAgICByZXR1cm4gLWV4cGVjdGVkUGFkZGluZyAtIDE7IC8vIH5leHBlY3RlZFBhZGRpbmcgYWRhcHRlZCB0byBkYXJ0MmpzLgogIH0KCiAgLy8vIEV4dHJhY3RzIGV4cGVjdGVkIHBhZGRpbmcgY2hhcmFjdGVyIGNvdW50IGZyb20gYSBbX3N0YXRlXSB2YWx1ZS4KICBzdGF0aWMgaW50IF9zdGF0ZVBhZGRpbmcoaW50IHN0YXRlKSB7CiAgICBhc3NlcnQoc3RhdGUgPCAwKTsKICAgIHJldHVybiAtc3RhdGUgLSAxOyAvLyB+c3RhdGUgYWRhcHRlZCB0byBkYXJ0MmpzLgogIH0KCiAgc3RhdGljIGJvb2wgX2hhc1NlZW5QYWRkaW5nKGludCBzdGF0ZSkgPT4gc3RhdGUgPCAwOwoKICAvLy8gRGVjb2RlcyBbaW5wdXRdIGZyb20gW3N0YXJ0XSB0byBbZW5kXS4KICAvLy8KICAvLy8gUmV0dXJucyBhIFtVaW50OExpc3RdIHdpdGggdGhlIGRlY29kZWQgYnl0ZXMuCiAgLy8vIElmIGEgcHJldmlvdXMgY2FsbCBoYWQgYW4gaW5jb21wbGV0ZSBmb3VyLWNoYXJhY3RlciBibG9jaywgdGhlIGJpdHMgZnJvbQogIC8vLyB0aG9zZSBhcmUgaW5jbHVkZWQgaW4gZGVjb2RpbmcKICBVaW50OExpc3QgZGVjb2RlKFN0cmluZyBpbnB1dCwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBhc3NlcnQoMCA8PSBzdGFydCk7CiAgICBhc3NlcnQoc3RhcnQgPD0gZW5kKTsKICAgIGFzc2VydChlbmQgPD0gaW5wdXQubGVuZ3RoKTsKICAgIGlmIChfaGFzU2VlblBhZGRpbmcoX3N0YXRlKSkgewogICAgICBfc3RhdGUgPSBfY2hlY2tQYWRkaW5nKGlucHV0LCBzdGFydCwgZW5kLCBfc3RhdGUpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybiBVaW50OExpc3QoMCk7CiAgICB2YXIgYnVmZmVyID0gX2FsbG9jYXRlQnVmZmVyKGlucHV0LCBzdGFydCwgZW5kLCBfc3RhdGUpOwogICAgX3N0YXRlID0gZGVjb2RlQ2h1bmsoaW5wdXQsIHN0YXJ0LCBlbmQsIGJ1ZmZlciwgMCwgX3N0YXRlKTsKICAgIHJldHVybiBidWZmZXI7CiAgfQoKICAvLy8gQ2hlY2tzIHRoYXQgW19zdGF0ZV0gcmVwcmVzZW50cyBhIHZhbGlkIGRlY29kaW5nLgogIHZvaWQgY2xvc2UoU3RyaW5nIGlucHV0LCBpbnQgZW5kKSB7CiAgICBpZiAoX3N0YXRlIDwgX2VuY29kZVBhZGRpbmdTdGF0ZSgwKSkgewogICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIk1pc3NpbmcgcGFkZGluZyBjaGFyYWN0ZXIiLCBpbnB1dCwgZW5kKTsKICAgIH0KICAgIGlmIChfc3RhdGUgPiAwKSB7CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICJJbnZhbGlkIGxlbmd0aCwgbXVzdCBiZSBtdWx0aXBsZSBvZiBmb3VyIiwgaW5wdXQsIGVuZCk7CiAgICB9CiAgICBfc3RhdGUgPSBfZW5jb2RlUGFkZGluZ1N0YXRlKDApOwogIH0KCiAgLy8vIERlY29kZXMgW2lucHV0XSBmcm9tIFtzdGFydF0gdG8gW2VuZF0uCiAgLy8vCiAgLy8vIEluY2x1ZGVzIHRoZSBzdGF0ZSByZXR1cm5lZCBieSBhIHByZXZpb3VzIGNhbGwgaW4gdGhlIGRlY29kaW5nLgogIC8vLyBXcml0ZXMgdGhlIGRlY29kaW5nIHRvIFtvdXRwdXRdIGF0IFtvdXRJbmRleF0sIGFuZCB0aGVyZSBtdXN0CiAgLy8vIGJlIHJvb20gaW4gdGhlIG91dHB1dC4KICBzdGF0aWMgaW50IGRlY29kZUNodW5rKFN0cmluZyBpbnB1dCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBVaW50OExpc3Qgb3V0cHV0LAogICAgICBpbnQgb3V0SW5kZXgsIGludCBzdGF0ZSkgewogICAgYXNzZXJ0KCFfaGFzU2VlblBhZGRpbmcoc3RhdGUpKTsKICAgIGNvbnN0IGFzY2lpTWFzayA9IDEyNzsKICAgIGNvbnN0IGFzY2lpTWF4ID0gMTI3OwogICAgY29uc3QgZWlnaHRCaXRNYXNrID0gMHhGRjsKICAgIGNvbnN0IGJpdHNQZXJDaGFyYWN0ZXIgPSA2OwoKICAgIHZhciBiaXRzID0gX3N0YXRlQml0cyhzdGF0ZSk7CiAgICB2YXIgY291bnQgPSBfc3RhdGVDb3VudChzdGF0ZSk7CiAgICAvLyBTdHJpbmcgY29udGVudHMgc2hvdWxkIGJlIGFsbCBBU0NJSS4KICAgIC8vIEluc3RlYWQgb2YgY2hlY2tpbmcgZm9yIGVhY2ggY2hhcmFjdGVyLCB3ZSBjb2xsZWN0IHRoZSBiaXR3aXNlLW9yIG9mCiAgICAvLyBhbGwgdGhlIGNoYXJhY3RlcnMgaW4gYGNoYXJPcmAgYW5kIGxhdGVyIHZhbGlkYXRlIHRoYXQgYWxsIGNoYXJhY3RlcnMKICAgIC8vIHdlcmUgQVNDSUkuCiAgICB2YXIgY2hhck9yID0gMDsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBjaGFyID0gaW5wdXQuY29kZVVuaXRBdChpKTsKICAgICAgY2hhck9yIHw9IGNoYXI7CiAgICAgIHZhciBjb2RlID0gX2ludmVyc2VBbHBoYWJldFtjaGFyICYgYXNjaWlNYXNrXTsKICAgICAgaWYgKGNvZGUgPj0gMCkgewogICAgICAgIGJpdHMgPSAoKGJpdHMgPDwgYml0c1BlckNoYXJhY3RlcikgfCBjb2RlKSAmIDB4RkZGRkZGOwogICAgICAgIGNvdW50ID0gKGNvdW50ICsgMSkgJiAzOwogICAgICAgIGlmIChjb3VudCA9PSAwKSB7CiAgICAgICAgICBhc3NlcnQob3V0SW5kZXggKyAzIDw9IG91dHB1dC5sZW5ndGgpOwogICAgICAgICAgb3V0cHV0W291dEluZGV4KytdID0gKGJpdHMgPj4gMTYpICYgZWlnaHRCaXRNYXNrOwogICAgICAgICAgb3V0cHV0W291dEluZGV4KytdID0gKGJpdHMgPj4gOCkgJiBlaWdodEJpdE1hc2s7CiAgICAgICAgICBvdXRwdXRbb3V0SW5kZXgrK10gPSBiaXRzICYgZWlnaHRCaXRNYXNrOwogICAgICAgICAgYml0cyA9IDA7CiAgICAgICAgfQogICAgICAgIGNvbnRpbnVlOwogICAgICB9IGVsc2UgaWYgKGNvZGUgPT0gX3BhZGRpbmcgJiYgY291bnQgPiAxKSB7CiAgICAgICAgaWYgKGNoYXJPciA8IDAgfHwgY2hhck9yID4gYXNjaWlNYXgpIGJyZWFrOwogICAgICAgIGlmIChjb3VudCA9PSAzKSB7CiAgICAgICAgICBpZiAoKGJpdHMgJiAweDAzKSAhPSAwKSB7CiAgICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBlbmNvZGluZyBiZWZvcmUgcGFkZGluZyIsIGlucHV0LCBpKTsKICAgICAgICAgIH0KICAgICAgICAgIG91dHB1dFtvdXRJbmRleCsrXSA9IGJpdHMgPj4gMTA7CiAgICAgICAgICBvdXRwdXRbb3V0SW5kZXgrK10gPSBiaXRzID4+IDI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmICgoYml0cyAmIDB4MEYpICE9IDApIHsKICAgICAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIGVuY29kaW5nIGJlZm9yZSBwYWRkaW5nIiwgaW5wdXQsIGkpOwogICAgICAgICAgfQogICAgICAgICAgb3V0cHV0W291dEluZGV4KytdID0gYml0cyA+PiA0OwogICAgICAgIH0KICAgICAgICAvLyBFeHBlY3RlZCBwYWRkaW5nIGlzIHRoZSBudW1iZXIgb2YgZXhwZWN0ZWQgcGFkZGluZyBjaGFyYWN0ZXJzLAogICAgICAgIC8vIHdoZXJlIGA9YCBjb3VudHMgYXMgdGhyZWUgYW5kIGAlM0RgIGNvdW50cyBhcyBvbmUgcGVyIGNoYXJhY3Rlci4KICAgICAgICAvLwogICAgICAgIC8vIEV4cGVjdCBlaXRoZXIgemVybyBvciBvbmUgcGFkZGluZyBkZXBlbmRpbmcgb24gY291bnQgKDIgb3IgMyksCiAgICAgICAgLy8gcGx1cyB0d28gbW9yZSBjaGFyYWN0ZXJzIGlmIHRoZSBjb2RlIHdhcyBgJWAgKGEgcGFydGlhbCBwYWRkaW5nKS4KICAgICAgICB2YXIgZXhwZWN0ZWRQYWRkaW5nID0gKDMgLSBjb3VudCkgKiAzOwogICAgICAgIGlmIChjaGFyID09IF9jaGFyX3BlcmNlbnQpIGV4cGVjdGVkUGFkZGluZyArPSAyOwogICAgICAgIHN0YXRlID0gX2VuY29kZVBhZGRpbmdTdGF0ZShleHBlY3RlZFBhZGRpbmcpOwogICAgICAgIHJldHVybiBfY2hlY2tQYWRkaW5nKGlucHV0LCBpICsgMSwgZW5kLCBzdGF0ZSk7CiAgICAgIH0KICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIGNoYXJhY3RlciIsIGlucHV0LCBpKTsKICAgIH0KICAgIGlmIChjaGFyT3IgPj0gMCAmJiBjaGFyT3IgPD0gYXNjaWlNYXgpIHsKICAgICAgcmV0dXJuIF9lbmNvZGVDaGFyYWN0ZXJTdGF0ZShjb3VudCwgYml0cyk7CiAgICB9CiAgICAvLyBUaGVyZSBpcyBhbiBpbnZhbGlkIChub24tQVNDSUkpIGNoYXJhY3RlciBpbiB0aGUgaW5wdXQuCiAgICBpbnQgaTsKICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIGNoYXIgPSBpbnB1dC5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoY2hhciA8IDAgfHwgY2hhciA+IGFzY2lpTWF4KSBicmVhazsKICAgIH0KICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBjaGFyYWN0ZXIiLCBpbnB1dCwgaSk7CiAgfQoKICAvLy8gQWxsb2NhdGVzIGEgYnVmZmVyIHdpdGggcm9vbSBmb3IgdGhlIGRlY29kaW5nIG9mIGEgc3Vic3RyaW5nIG9mIFtpbnB1dF0uCiAgLy8vCiAgLy8vIEluY2x1ZGVzIHJvb20gZm9yIHRoZSBjaGFyYWN0ZXJzIGluIFtzdGF0ZV0sIGFuZCBoYW5kbGVzIHBhZGRpbmcgY29ycmVjdGx5LgogIHN0YXRpYyBVaW50OExpc3QgX2FsbG9jYXRlQnVmZmVyKAogICAgICBTdHJpbmcgaW5wdXQsIGludCBzdGFydCwgaW50IGVuZCwgaW50IHN0YXRlKSB7CiAgICBhc3NlcnQoc3RhdGUgPj0gMCk7CiAgICB2YXIgcGFkZGluZ1N0YXJ0ID0gX3RyaW1QYWRkaW5nQ2hhcnMoaW5wdXQsIHN0YXJ0LCBlbmQpOwogICAgdmFyIGxlbmd0aCA9IF9zdGF0ZUNvdW50KHN0YXRlKSArIChwYWRkaW5nU3RhcnQgLSBzdGFydCk7CiAgICAvLyBUaHJlZSBieXRlcyBwZXIgZnVsbCBmb3VyIGJ5dGVzIGluIHRoZSBpbnB1dC4KICAgIHZhciBidWZmZXJMZW5ndGggPSAobGVuZ3RoID4+IDIpICogMzsKICAgIC8vIElmIHBhZGRpbmcgd2FzIHNlZW4sIHRoZW4gdGhpcyBpcyB0aGUgbGFzdCBjaHVuaywgYW5kIHRoZSBmaW5hbCBwYXJ0aWFsCiAgICAvLyBjaHVuayBzaG91bGQgYmUgZGVjb2RlZCB0b28uCiAgICB2YXIgcmVtYWluZGVyTGVuZ3RoID0gbGVuZ3RoICYgMzsKICAgIGlmIChyZW1haW5kZXJMZW5ndGggIT0gMCAmJiBwYWRkaW5nU3RhcnQgPCBlbmQpIHsKICAgICAgYnVmZmVyTGVuZ3RoICs9IHJlbWFpbmRlckxlbmd0aCAtIDE7CiAgICB9CiAgICBpZiAoYnVmZmVyTGVuZ3RoID4gMCkgcmV0dXJuIFVpbnQ4TGlzdChidWZmZXJMZW5ndGgpOwogICAgLy8gSWYgdGhlIGlucHV0IHBsdXMgc3RhdGUgaXMgbGVzcyB0aGFuIGZvdXIgY2hhcmFjdGVycywgYW5kIGl0J3Mgbm90CiAgICAvLyBhdCB0aGUgZW5kIG9mIGlucHV0LCBubyBidWZmZXIgaXMgbmVlZGVkLgogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIHN0YXJ0IG9mIHBhZGRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgaW5wdXQuCiAgLy8vCiAgLy8vIFJldHVybnMgdGhlIGVuZCBvZiBpbnB1dCBpZiB0aGVyZSBpcyBubyBwYWRkaW5nLgogIC8vLwogIC8vLyBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGRlY29kaW5nIGJ1ZmZlciBoYXMgdGhlIGV4YWN0IHNpemUKICAvLy8gaXQgbmVlZHMgd2hlbiBpbnB1dCBpcyB2YWxpZCwgYW5kIGF0IGxlYXN0IGVub3VnaCBieXRlcyB0byByZWFjaCB0aGUgZXJyb3IKICAvLy8gd2hlbiBpbnB1dCBpcyBpbnZhbGlkLgogIC8vLwogIC8vLyBOZXZlciBjb3VudCBtb3JlIHRoYW4gdHdvIHBhZGRpbmcgc2VxdWVuY2VzIHNpbmNlIGFueSBtb3JlIHRoYW4gdGhhdAogIC8vLyB3aWxsIHJhaXNlIGFuIGVycm9yIGFueXdheSwgYW5kIHdlIG9ubHkgY2FyZSBhYm91dCBiZWluZyBwcmVjaXNlIGZvcgogIC8vLyBzdWNjZXNzZnVsIGNvbnZlcnNpb25zLgogIHN0YXRpYyBpbnQgX3RyaW1QYWRkaW5nQ2hhcnMoU3RyaW5nIGlucHV0LCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIC8vIFRoaXMgbWF5IGNvdW50ICclPScgYXMgdHdvIHBhZGRpbmdzLiBUaGF0J3Mgb2ssIGl0IHdpbGwgZXJyIGxhdGVyLAogICAgLy8gYnV0IHRoZSBidWZmZXIgd2lsbCBiZSBsYXJnZSBlbm91Z2ggdG8gcmVhY2ggdGhlIGVycm9yLgogICAgdmFyIHBhZGRpbmcgPSAwOwogICAgdmFyIGluZGV4ID0gZW5kOwogICAgdmFyIG5ld0VuZCA9IGVuZDsKICAgIHdoaWxlIChpbmRleCA+IHN0YXJ0ICYmIHBhZGRpbmcgPCAyKSB7CiAgICAgIGluZGV4LS07CiAgICAgIHZhciBjaGFyID0gaW5wdXQuY29kZVVuaXRBdChpbmRleCk7CiAgICAgIGlmIChjaGFyID09IF9wYWRkaW5nQ2hhcikgewogICAgICAgIHBhZGRpbmcrKzsKICAgICAgICBuZXdFbmQgPSBpbmRleDsKICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICBpZiAoKGNoYXIgfCAweDIwKSA9PSBfY2hhcl9kKSB7CiAgICAgICAgaWYgKGluZGV4ID09IHN0YXJ0KSBicmVhazsKICAgICAgICBpbmRleC0tOwogICAgICAgIGNoYXIgPSBpbnB1dC5jb2RlVW5pdEF0KGluZGV4KTsKICAgICAgfQogICAgICBpZiAoY2hhciA9PSBfY2hhcl8zKSB7CiAgICAgICAgaWYgKGluZGV4ID09IHN0YXJ0KSBicmVhazsKICAgICAgICBpbmRleC0tOwogICAgICAgIGNoYXIgPSBpbnB1dC5jb2RlVW5pdEF0KGluZGV4KTsKICAgICAgfQogICAgICBpZiAoY2hhciA9PSBfY2hhcl9wZXJjZW50KSB7CiAgICAgICAgcGFkZGluZysrOwogICAgICAgIG5ld0VuZCA9IGluZGV4OwogICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgfQogICAgcmV0dXJuIG5ld0VuZDsKICB9CgogIC8vLyBDaGVjayB0aGF0IHRoZSByZW1haW5kZXIgb2YgdGhlIHN0cmluZyBpcyB2YWxpZCBwYWRkaW5nLgogIC8vLwogIC8vLyBWYWxpZCBwYWRkaW5nIGlzIGEgY29ycmVjdCBudW1iZXIgKDAsIDEgb3IgMikgb2YgYD1gIGNoYXJhY3RlcnMKICAvLy8gb3IgYCUzRGAgc2VxdWVuY2VzIGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIHByZWNlZGluZyBiYXNlNjQgY2hhcmFjdGVycy4KICAvLy8gVGhlIFtzdGF0ZV0gcGFyYW1ldGVyIGVuY29kZXMgd2hpY2ggcGFkZGluZyBjb250aW51YXRpb25zIGFyZSBhbGxvd2VkCiAgLy8vIGFzIHRoZSBudW1iZXIgb2YgZXhwZWN0ZWQgY2hhcmFjdGVycy4gVGhhdCBudW1iZXIgaXMgdGhlIG51bWJlciBvZgogIC8vLyBleHBlY3RlZCBwYWRkaW5nIGNoYXJhY3RlcnMgdGltZXMgMyBtaW51cyB0aGUgbnVtYmVyIG9mIHBhZGRpbmcgY2hhcmFjdGVycwogIC8vLyBzZWVuIHNvIGZhciwgd2hlcmUgYD1gIGNvdW50cyBhcyAzIGNvdW50cyBhcyB0aHJlZSBjaGFyYWN0ZXJzLAogIC8vLyBhbmQgdGhlIHBhZGRpbmcgc2VxdWVuY2UgYCUzRGAgY291bnRzIGFzIG9uZSBjaGFyYWN0ZXIgcGVyIGNoYXJhY3Rlci4KICAvLy8KICAvLy8gVGhlIG51bWJlciBvZiBtaXNzaW5nIGNoYXJhY3RlcnMgaXMgYWx3YXlzIGJldHdlZW4gMCBhbmQgNSBiZWNhdXNlIHdlCiAgLy8vIG9ubHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGFmdGVyIGhhdmluZyBzZWVuIGF0IGxlYXN0IG9uZSBgPWAgb3IgYCVgCiAgLy8vIGNoYXJhY3Rlci4KICAvLy8gSWYgdGhlIG51bWJlciBvZiBtaXNzaW5nIGNoYXJhY3RlcnMgaXMgbm90IDMgb3IgMCwgd2UgaGF2ZSBzZWVuIChhdCBsZWFzdCkKICAvLy8gYSBgJWAgY2hhcmFjdGVyIGFuZCBleHBlY3RzIHRoZSByZXN0IG9mIHRoZSBgJTNEYCBzZXF1ZW5jZSwgYW5kIGEgYD1gIGlzCiAgLy8vIG5vdCBhbGxvd2VkLiBXaGVuIG1pc3NpbmcgMyBjaGFyYWN0ZXJzLCBlaXRoZXIgYD1gIG9yIGAlYCBpcyBhbGxvd2VkLgogIC8vLwogIC8vLyBXaGVuIHRoZSB2YWx1ZSBpcyAwLCBubyBtb3JlIHBhZGRpbmcgKG9yIGFueSBvdGhlciBjaGFyYWN0ZXIpIGlzIGFsbG93ZWQuCiAgc3RhdGljIGludCBfY2hlY2tQYWRkaW5nKFN0cmluZyBpbnB1dCwgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgc3RhdGUpIHsKICAgIGFzc2VydChfaGFzU2VlblBhZGRpbmcoc3RhdGUpKTsKICAgIGlmIChzdGFydCA9PSBlbmQpIHJldHVybiBzdGF0ZTsKICAgIHZhciBleHBlY3RlZFBhZGRpbmcgPSBfc3RhdGVQYWRkaW5nKHN0YXRlKTsKICAgIGFzc2VydChleHBlY3RlZFBhZGRpbmcgPj0gMCk7CiAgICBhc3NlcnQoZXhwZWN0ZWRQYWRkaW5nIDwgNik7CiAgICB3aGlsZSAoZXhwZWN0ZWRQYWRkaW5nID4gMCkgewogICAgICB2YXIgY2hhciA9IGlucHV0LmNvZGVVbml0QXQoc3RhcnQpOwogICAgICBpZiAoZXhwZWN0ZWRQYWRkaW5nID09IDMpIHsKICAgICAgICBpZiAoY2hhciA9PSBfcGFkZGluZ0NoYXIpIHsKICAgICAgICAgIGV4cGVjdGVkUGFkZGluZyAtPSAzOwogICAgICAgICAgc3RhcnQrKzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoY2hhciA9PSBfY2hhcl9wZXJjZW50KSB7CiAgICAgICAgICBleHBlY3RlZFBhZGRpbmctLTsKICAgICAgICAgIHN0YXJ0Kys7CiAgICAgICAgICBpZiAoc3RhcnQgPT0gZW5kKSBicmVhazsKICAgICAgICAgIGNoYXIgPSBpbnB1dC5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIFBhcnRpYWwgcGFkZGluZyBtZWFucyB3ZSBoYXZlIHNlZW4gcGFydCBvZiBhICIlM0QiIGVzY2FwZS4KICAgICAgdmFyIGV4cGVjdGVkUGFydGlhbFBhZGRpbmcgPSBleHBlY3RlZFBhZGRpbmc7CiAgICAgIGlmIChleHBlY3RlZFBhcnRpYWxQYWRkaW5nID4gMykgZXhwZWN0ZWRQYXJ0aWFsUGFkZGluZyAtPSAzOwogICAgICBpZiAoZXhwZWN0ZWRQYXJ0aWFsUGFkZGluZyA9PSAyKSB7CiAgICAgICAgLy8gRXhwZWN0cyAnMycKICAgICAgICBpZiAoY2hhciAhPSBfY2hhcl8zKSBicmVhazsKICAgICAgICBzdGFydCsrOwogICAgICAgIGV4cGVjdGVkUGFkZGluZy0tOwogICAgICAgIGlmIChzdGFydCA9PSBlbmQpIGJyZWFrOwogICAgICAgIGNoYXIgPSBpbnB1dC5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgICAgfQogICAgICAvLyBFeHBlY3RzICdEJyBvciAnZCcuCiAgICAgIGlmICgoY2hhciB8IDB4MjApICE9IF9jaGFyX2QpIGJyZWFrOwogICAgICBzdGFydCsrOwogICAgICBleHBlY3RlZFBhZGRpbmctLTsKICAgICAgaWYgKHN0YXJ0ID09IGVuZCkgYnJlYWs7CiAgICB9CiAgICBpZiAoc3RhcnQgIT0gZW5kKSB7CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBwYWRkaW5nIGNoYXJhY3RlciIsIGlucHV0LCBzdGFydCk7CiAgICB9CiAgICByZXR1cm4gX2VuY29kZVBhZGRpbmdTdGF0ZShleHBlY3RlZFBhZGRpbmcpOwogIH0KfQoKY2xhc3MgX0Jhc2U2NERlY29kZXJTaW5rIGV4dGVuZHMgU3RyaW5nQ29udmVyc2lvblNpbmtCYXNlIHsKICAvLy8gT3V0cHV0IHNpbmsKICBmaW5hbCBTaW5rPExpc3Q8aW50Pj4gX3Npbms7CiAgZmluYWwgX0Jhc2U2NERlY29kZXIgX2RlY29kZXIgPSBfQmFzZTY0RGVjb2RlcigpOwoKICBfQmFzZTY0RGVjb2RlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgYWRkKFN0cmluZyBzdHJpbmcpIHsKICAgIGlmIChzdHJpbmcuaXNFbXB0eSkgcmV0dXJuOwogICAgdmFyIGJ1ZmZlciA9IF9kZWNvZGVyLmRlY29kZShzdHJpbmcsIDAsIHN0cmluZy5sZW5ndGgpOwogICAgaWYgKGJ1ZmZlciAhPSBudWxsKSBfc2luay5hZGQoYnVmZmVyKTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfZGVjb2Rlci5jbG9zZShudWxsLCBudWxsKTsKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKFN0cmluZyBzdHJpbmcsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHN0cmluZy5sZW5ndGgpOwogICAgaWYgKHN0YXJ0ID09IGVuZCkgcmV0dXJuOwogICAgdmFyIGJ1ZmZlciA9IF9kZWNvZGVyLmRlY29kZShzdHJpbmcsIHN0YXJ0LCBlbmQpOwogICAgaWYgKGJ1ZmZlciAhPSBudWxsKSBfc2luay5hZGQoYnVmZmVyKTsKICAgIGlmIChpc0xhc3QpIHsKICAgICAgX2RlY29kZXIuY2xvc2Uoc3RyaW5nLCBlbmQpOwogICAgICBfc2luay5jbG9zZSgpOwogICAgfQogIH0KfQqDWABOTjwBFgFJBDI7PAQOBE9LPQRKPyoBTAQ5OzwEDgRSTkA1AVIEURc+AVUEJkQBfQRKHkABKicBSQRILARQD0hKEDUgOkoBKQE2ARkGNwZDSkNAAUQGQysGGiJOOE1NQj5BGhkZHDM7GyYaJBgpH0wdHD4SRjwqETBEFQoIRCYrGi0uNzgiSEwwDBo5MAowJUAmGhQKCEYGGjcfRC43SioPPTceO1EKIB0XCghBBjweHUghDTUiHDlPCBtFTwgGEwQBSzgbHU0YEhYGMR1OBhwdQhIYBgQCAUwLTAEtBD8EPzsXASwzASQiLD8pBAFBKEcGNAQCAS8XLShKATArSgE8JAE6IwEnASkGLkI9EgEiGgEfRAFDMSEoBAEnPAEoOwE1RwFFBkQGSUoaSyIGLEcYGjIeASUmJTknLC4GLQ1OKUskEQQBT0MiOjABSUlPFCgbFlAXIFFRUEkbEggGKClREgg0BgFJExYbKQsGH1EEATMGQw0fURcWTk4sLA0aT05OLAYEAgE7FQZOQRkBPgEtRC0GREAEAgFDHysEAREcBAFFOTsmBAFAAgE7HCEBNDkBQT4aMRkGEhUGBAIBOiIhATMsAUE+GjgGBAIBTAtMASUESwQ0OxkBSQZCPgZDSkM+QCskNB8TBAFGJQQCAUcXPCQBOiMBKyIBKyIBMSIiAUsGSREGQ0ZJD0BHR0dHR0dHRwYBGjErKwFCBkpISR0GMDZJLAZQTwZQPxIBRjorKgQBLCYYHwQBMSUYIQQBUDgiIkkEAUcoFzUEATcBLQY0TyU3GBohIzkTBis9QBMEATgmK0YGFh1DBiUEAS0GRkQdTSElGxofIAEiJCxMTRMUKCYWNRc/IRoxPDs0FAoSMjQaJFAMKyoRJFAMKgpKTAtKTS85NjgIPAYtMQY/CyQmLgY6BAFPBlIkNRg9PjUqTyQmNisGOkoxEQQBTAY3BklRHQZLSx5DSj8VFRYrDyoiExgSCCYjESgIHSMRKAgjExgSCA0GEwQBPwZGUUxJUUVMBkxIEVFPTAZQSiQkMCIhIioiJCATEQolHRMjKhERCghENEMpFyQRGyEoCB0rDxkfBhhIBjEEAgE8Eh80ASIBHCA8KwQBESATBAFCQR42KxIjFQYEAgEYZGFydDpjb252ZXJ0L2Jhc2U2NC5kYXJ0OG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L2J5dGVfY29udmVyc2lvbi5kYXJ0jVQvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbnZlcnQ7CgovLy8gVGhlIFtCeXRlQ29udmVyc2lvblNpbmtdIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgY29udmVydGVycyB0bwovLy8gZWZmaWNpZW50bHkgdHJhbnNtaXQgYnl0ZSBkYXRhLgovLy8KLy8vIEluc3RlYWQgb2YgbGltaXRpbmcgdGhlIGludGVyZmFjZSB0byBvbmUgbm9uLWNodW5rZWQgbGlzdCBvZiBieXRlcyBpdAovLy8gYWNjZXB0cyBpdHMgaW5wdXQgaW4gY2h1bmtzICh0aGVtc2VsdmVzIGJlaW5nIGxpc3RzIG9mIGJ5dGVzKS4KLy8vCi8vLyBUaGlzIGFic3RyYWN0IGNsYXNzIHdpbGwgbGlrZWx5IGdldCBtb3JlIG1ldGhvZHMgb3ZlciB0aW1lLiBJbXBsZW1lbnRlcnMgYXJlCi8vLyB1cmdlZCB0byBleHRlbmQgb3IgbWl4IGluIFtCeXRlQ29udmVyc2lvblNpbmtCYXNlXSB0byBlbnN1cmUgdGhhdCB0aGVpcgovLy8gY2xhc3MgY292ZXJzIHRoZSBuZXdseSBhZGRlZCBtZXRob2RzLgphYnN0cmFjdCBjbGFzcyBCeXRlQ29udmVyc2lvblNpbmsgZXh0ZW5kcyBDaHVua2VkQ29udmVyc2lvblNpbms8TGlzdDxpbnQ+PiB7CiAgQnl0ZUNvbnZlcnNpb25TaW5rKCk7CiAgZmFjdG9yeSBCeXRlQ29udmVyc2lvblNpbmsud2l0aENhbGxiYWNrKAogICAgICB2b2lkIGNhbGxiYWNrKExpc3Q8aW50PiBhY2N1bXVsYXRlZCkpID0gX0J5dGVDYWxsYmFja1Npbms7CiAgZmFjdG9yeSBCeXRlQ29udmVyc2lvblNpbmsuZnJvbShTaW5rPExpc3Q8aW50Pj4gc2luaykgPSBfQnl0ZUFkYXB0ZXJTaW5rOwoKICAvLy8gQWRkcyB0aGUgbmV4dCBbY2h1bmtdIHRvIGB0aGlzYC4KICAvLy8KICAvLy8gQWRkcyB0aGUgYnl0ZXMgZGVmaW5lZCBieSBbc3RhcnRdIGFuZCBbZW5kXS1leGNsdXNpdmUgdG8gYHRoaXNgLgogIC8vLwogIC8vLyBJZiBbaXNMYXN0XSBpcyBgdHJ1ZWAgY2xvc2VzIGB0aGlzYC4KICAvLy8KICAvLy8gQ29udHJhcnkgdG8gYGFkZGAgdGhlIGdpdmVuIFtjaHVua10gbXVzdCBub3QgYmUgaGVsZCBvbnRvLiBPbmNlIHRoZSBtZXRob2QKICAvLy8gcmV0dXJucywgaXQgaXMgc2FmZSB0byBvdmVyd3JpdGUgdGhlIGRhdGEgaW4gaXQuCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gY2h1bmssIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpOwoKICAvLyBUT0RPKGZsb2l0c2NoKTogYWRkIG1vcmUgbWV0aG9kczoKICAvLyAtIGl0ZXJhdGVCeXRlcy4KfQoKLy8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBiYXNlLWNsYXNzIGZvciBjb252ZXJ0ZXJzIHRoYXQgbmVlZCB0byBhY2NlcHQgYnl0ZQovLy8gaW5wdXRzLgphYnN0cmFjdCBjbGFzcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rIHsKICB2b2lkIGFkZChMaXN0PGludD4gY2h1bmspOwogIHZvaWQgY2xvc2UoKTsKCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gY2h1bmssIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGFkZChjaHVuay5zdWJsaXN0KHN0YXJ0LCBlbmQpKTsKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQp9CgovLy8gVGhpcyBjbGFzcyBhZGFwdHMgYSBzaW1wbGUgW1NpbmtdIHRvIGEgW0J5dGVDb252ZXJzaW9uU2lua10uCi8vLwovLy8gQWxsIGFkZGl0aW9uYWwgbWV0aG9kcyBvZiB0aGUgW0J5dGVDb252ZXJzaW9uU2lua10gKGNvbXBhcmVkIHRvIHRoZQovLy8gQ2h1bmtlZENvbnZlcnNpb25TaW5rKSBhcmUgcmVkaXJlY3RlZCB0byB0aGUgYGFkZGAgbWV0aG9kLgpjbGFzcyBfQnl0ZUFkYXB0ZXJTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rQmFzZSB7CiAgZmluYWwgU2luazxMaXN0PGludD4+IF9zaW5rOwoKICBfQnl0ZUFkYXB0ZXJTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGFkZChMaXN0PGludD4gY2h1bmspIHsKICAgIF9zaW5rLmFkZChjaHVuayk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuY2xvc2UoKTsKICB9Cn0KCi8vLyBUaGlzIGNsYXNzIGFjY3VtdWxhdGVzIGFsbCBjaHVua3MgaW50byBvbmUgbGlzdCBvZiBieXRlcwovLy8gYW5kIGludm9rZXMgYSBjYWxsYmFjayB3aGVuIHRoZSBzaW5rIGlzIGNsb3NlZC4KLy8vCi8vLyBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIHRlcm1pbmF0ZSBhIGNodW5rZWQgY29udmVyc2lvbi4KY2xhc3MgX0J5dGVDYWxsYmFja1NpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICBzdGF0aWMgY29uc3QgX0lOSVRJQUxfQlVGRkVSX1NJWkUgPSAxMDI0OwoKICBmaW5hbCB2b2lkIEZ1bmN0aW9uKExpc3Q8aW50PikgX2NhbGxiYWNrOwogIExpc3Q8aW50PiBfYnVmZmVyID0gVWludDhMaXN0KF9JTklUSUFMX0JVRkZFUl9TSVpFKTsKICBpbnQgX2J1ZmZlckluZGV4ID0gMDsKCiAgX0J5dGVDYWxsYmFja1Npbmsodm9pZCBjYWxsYmFjayhMaXN0PGludD4gYWNjdW11bGF0ZWQpKQogICAgICA6IF9jYWxsYmFjayA9IGNhbGxiYWNrOwoKICB2b2lkIGFkZChJdGVyYWJsZTxpbnQ+IGNodW5rKSB7CiAgICB2YXIgZnJlZUNvdW50ID0gX2J1ZmZlci5sZW5ndGggLSBfYnVmZmVySW5kZXg7CiAgICBpZiAoY2h1bmsubGVuZ3RoID4gZnJlZUNvdW50KSB7CiAgICAgIC8vIEdyb3cgdGhlIGJ1ZmZlci4KICAgICAgdmFyIG9sZExlbmd0aCA9IF9idWZmZXIubGVuZ3RoOwogICAgICB2YXIgbmV3TGVuZ3RoID0gX3JvdW5kVG9Qb3dlck9mMihjaHVuay5sZW5ndGggKyBvbGRMZW5ndGgpICogMjsKICAgICAgdmFyIGdyb3duID0gVWludDhMaXN0KG5ld0xlbmd0aCk7CiAgICAgIGdyb3duLnNldFJhbmdlKDAsIF9idWZmZXIubGVuZ3RoLCBfYnVmZmVyKTsKICAgICAgX2J1ZmZlciA9IGdyb3duOwogICAgfQogICAgX2J1ZmZlci5zZXRSYW5nZShfYnVmZmVySW5kZXgsIF9idWZmZXJJbmRleCArIGNodW5rLmxlbmd0aCwgY2h1bmspOwogICAgX2J1ZmZlckluZGV4ICs9IGNodW5rLmxlbmd0aDsKICB9CgogIHN0YXRpYyBpbnQgX3JvdW5kVG9Qb3dlck9mMihpbnQgdikgewogICAgYXNzZXJ0KHYgPiAwKTsKICAgIHYtLTsKICAgIHYgfD0gdiA+PiAxOwogICAgdiB8PSB2ID4+IDI7CiAgICB2IHw9IHYgPj4gNDsKICAgIHYgfD0gdiA+PiA4OwogICAgdiB8PSB2ID4+IDE2OwogICAgdisrOwogICAgcmV0dXJuIHY7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgX2NhbGxiYWNrKF9idWZmZXIuc3VibGlzdCgwLCBfYnVmZmVySW5kZXgpKTsKICB9Cn0KbwBOTjwBFgFFJARKQwRRTCpNGCtBTAEnBkcGKwZRN0MBJxUCAU0MQx0QAUQkGQQCAUEESD84HwEgAR4WBAEREwQCAT00BD45LAEsNxgBOh4BIjMkGiZGKDIXBkgiBAEnEwkREREREgkOBAERMQQCASFkYXJ0OmNvbnZlcnQvYnl0ZV9jb252ZXJzaW9uLmRhcnQ7b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvbnZlcnQvY2h1bmtlZF9jb252ZXJzaW9uLmRhcnSKby8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBBIFtDaHVua2VkQ29udmVyc2lvblNpbmtdIGlzIHVzZWQgdG8gdHJhbnNtaXQgZGF0YSBtb3JlIGVmZmljaWVudGx5IGJldHdlZW4KLy8vIHR3byBjb252ZXJ0ZXJzIGR1cmluZyBjaHVua2VkIGNvbnZlcnNpb25zLgovLy8KLy8vIFRoZSBiYXNpYyBgQ2h1bmtlZENvbnZlcnNpb25TaW5rYCBpcyBqdXN0IGEgW1NpbmtdLCBhbmQgY29udmVydGVycyBzaG91bGQKLy8vIHdvcmsgd2l0aCBhIHBsYWluIGBTaW5rYCwgYnV0IG1heSB3b3JrIG1vcmUgZWZmaWNpZW50bHkgd2l0aCBjZXJ0YWluCi8vLyBzcGVjaWFsaXplZCB0eXBlcyBvZiBgQ2h1bmtlZENvbnZlcnNpb25TaW5rYC4KLy8vCi8vLyBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGltcGxlbWVudGF0aW9ucyBvZiBgQ2h1bmtlZENvbnZlcnNpb25TaW5rYCBleHRlbmQKLy8vIHRoaXMgY2xhc3MsIHRvIGluaGVyaXQgYW55IGZ1cnRoZXIgbWV0aG9kcyB0aGF0IG1heSBiZSBhZGRlZCB0byB0aGUgY2xhc3MuCmFic3RyYWN0IGNsYXNzIENodW5rZWRDb252ZXJzaW9uU2luazxUPiBpbXBsZW1lbnRzIFNpbms8VD4gewogIENodW5rZWRDb252ZXJzaW9uU2luaygpOwogIGZhY3RvcnkgQ2h1bmtlZENvbnZlcnNpb25TaW5rLndpdGhDYWxsYmFjaygKICAgICAgdm9pZCBjYWxsYmFjayhMaXN0PFQ+IGFjY3VtdWxhdGVkKSkgPSBfU2ltcGxlQ2FsbGJhY2tTaW5rPFQ+OwoKICAvLy8gQWRkcyBjaHVua2VkIGRhdGEgdG8gdGhpcyBzaW5rLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCBpcyBhbHNvIHVzZWQgd2hlbiBjb252ZXJ0ZXJzIGFyZSB1c2VkIGFzIFtTdHJlYW1UcmFuc2Zvcm1lcl1zLgogIHZvaWQgYWRkKFQgY2h1bmspOwoKICAvLy8gQ2xvc2VzIHRoZSBzaW5rLgogIC8vLwogIC8vLyBUaGlzIHNpZ25hbHMgdGhlIGVuZCBvZiB0aGUgY2h1bmtlZCBjb252ZXJzaW9uLiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQKICAvLy8gd2hlbiBjb252ZXJ0ZXJzIGFyZSB1c2VkIGFzIFtTdHJlYW1UcmFuc2Zvcm1lcl0ncy4KICB2b2lkIGNsb3NlKCk7Cn0KCi8vLyBUaGlzIGNsYXNzIGFjY3VtdWxhdGVzIGFsbCBjaHVua3MgYW5kIGludm9rZXMgYSBjYWxsYmFjayB3aXRoIGEgbGlzdCBvZgovLy8gdGhlIGNodW5rcyB3aGVuIHRoZSBzaW5rIGlzIGNsb3NlZC4KLy8vCi8vLyBUaGlzIGNsYXNzIGNhbiBiZSB1c2VkIHRvIHRlcm1pbmF0ZSBhIGNodW5rZWQgY29udmVyc2lvbi4KY2xhc3MgX1NpbXBsZUNhbGxiYWNrU2luazxUPiBleHRlbmRzIENodW5rZWRDb252ZXJzaW9uU2luazxUPiB7CiAgZmluYWwgdm9pZCBGdW5jdGlvbihMaXN0PFQ+KSBfY2FsbGJhY2s7CiAgZmluYWwgTGlzdDxUPiBfYWNjdW11bGF0ZWQgPSA8VD5bXTsKCiAgX1NpbXBsZUNhbGxiYWNrU2luayh0aGlzLl9jYWxsYmFjayk7CgogIHZvaWQgYWRkKFQgY2h1bmspIHsKICAgIF9hY2N1bXVsYXRlZC5hZGQoY2h1bmspOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9jYWxsYmFjayhfYWNjdW11bGF0ZWQpOwogIH0KfQoKLy8vIFRoaXMgY2xhc3MgaW1wbGVtZW50cyB0aGUgbG9naWMgZm9yIGEgY2h1bmtlZCBjb252ZXJzaW9uIGFzIGEKLy8vIHN0cmVhbSB0cmFuc2Zvcm1lci4KLy8vCi8vLyBJdCBpcyB1c2VkIGFzIHN0cmF0ZWd5IGluIHRoZSBbRXZlbnRUcmFuc2Zvcm1TdHJlYW1dLgovLy8KLy8vIEl0IGFsc28gaW1wbGVtZW50cyB0aGUgW0NodW5rZWRDb252ZXJzaW9uU2lua10gaW50ZXJmYWNlIHNvIHRoYXQgaXQKLy8vIGNhbiBiZSB1c2VkIGFzIG91dHB1dCBzaW5rIGluIGEgY2h1bmtlZCBjb252ZXJzaW9uLgpjbGFzcyBfQ29udmVydGVyU3RyZWFtRXZlbnRTaW5rPFMsIFQ+IGltcGxlbWVudHMgRXZlbnRTaW5rPFM+IHsKICAvLy8gVGhlIG91dHB1dCBzaW5rIGZvciB0aGUgY29udmVydGVyLgogIGZpbmFsIEV2ZW50U2luazxUPiBfZXZlbnRTaW5rOwoKICAvLy8gVGhlIGlucHV0IHNpbmsgZm9yIG5ldyBkYXRhLiBBbGwgZGF0YSB0aGF0IGlzIHJlY2VpdmVkIHdpdGgKICAvLy8gW2hhbmRsZURhdGFdIGlzIGFkZGVkIGludG8gdGhpcyBzaW5rLgogIGZpbmFsIFNpbms8Uz4gX2NodW5rZWRTaW5rOwoKICBfQ29udmVydGVyU3RyZWFtRXZlbnRTaW5rKENvbnZlcnRlcjxTLCBUPiBjb252ZXJ0ZXIsIEV2ZW50U2luazxUPiBzaW5rKQogICAgICA6IF9ldmVudFNpbmsgPSBzaW5rLAogICAgICAgIF9jaHVua2VkU2luayA9IGNvbnZlcnRlci5zdGFydENodW5rZWRDb252ZXJzaW9uKHNpbmspOwoKICB2b2lkIGFkZChTIG8pIHsKICAgIF9jaHVua2VkU2luay5hZGQobyk7CiAgfQoKICB2b2lkIGFkZEVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIF9ldmVudFNpbmsuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9jaHVua2VkU2luay5jbG9zZSgpOwogIH0KfQpUAE5OPAEWAVAvBE5JMgRNTz0bLkQBJgZRFQEXBkw5EAIBTCgEPkAqJgEnARYdBAERHQQCAUIYBDoESDhAKSEBQiweAUobPwESGQQBOSwEAREaBAIBJGRhcnQ6Y29udmVydC9jaHVua2VkX2NvbnZlcnNpb24uZGFydC5vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29udmVydC9jb2RlYy5kYXJ0jIovLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbnZlcnQ7CgovLy8gQSBbQ29kZWNdIGVuY29kZXMgYW5kIChpZiBzdXBwb3J0ZWQpIGRlY29kZXMgZGF0YS4KLy8vCi8vLyBDb2RlY3MgY2FuIGJlIGZ1c2VkLiBGb3IgZXhhbXBsZSBmdXNpbmcgW2pzb25dIGFuZCBbdXRmOF0gcHJvZHVjZXMKLy8vIGFuIGVuY29kZXIgdGhhdCBjYW4gY29udmVydCBKc29uIG9iamVjdHMgZGlyZWN0bHkgdG8gYnl0ZXMsIG9yIGNhbiBkZWNvZGUKLy8vIGJ5dGVzIGRpcmVjdGx5IHRvIGpzb24gb2JqZWN0cy4KLy8vCi8vLyBGdXNlZCBjb2RlY3MgZ2VuZXJhbGx5IGF0dGVtcHQgdG8gb3B0aW1pemUgdGhlIG9wZXJhdGlvbnMgYW5kIGNhbiBiZSBmYXN0ZXIKLy8vIHRoYW4gZXhlY3V0aW5nIGVhY2ggc3RlcCBvZiBhbiBlbmNvZGluZyBzZXBhcmF0ZWx5LgphYnN0cmFjdCBjbGFzcyBDb2RlYzxTLCBUPiB7CiAgY29uc3QgQ29kZWMoKTsKCiAgLy8vIEVuY29kZXMgW2lucHV0XS4KICAvLy8KICAvLy8gVGhlIGlucHV0IGlzIGVuY29kZWQgYXMgaWYgYnkgYGVuY29kZXIuY29udmVydGAuCiAgVCBlbmNvZGUoUyBpbnB1dCkgPT4gZW5jb2Rlci5jb252ZXJ0KGlucHV0KTsKCiAgLy8vIERlY29kZXMgW2VuY29kZWRdIGRhdGEuCiAgLy8vCiAgLy8vIFRoZSBpbnB1dCBpcyBkZWNvZGVkIGFzIGlmIGJ5IGBkZWNvZGVyLmNvbnZlcnRgLgogIFMgZGVjb2RlKFQgZW5jb2RlZCkgPT4gZGVjb2Rlci5jb252ZXJ0KGVuY29kZWQpOwoKICAvLy8gUmV0dXJucyB0aGUgZW5jb2RlciBmcm9tIFtTXSB0byBbVF0uCiAgLy8vCiAgLy8vIEl0IG1heSBiZSBzdGF0ZWZ1bCBhbmQgc2hvdWxkIG5vdCBiZSByZXVzZWQuCiAgQ29udmVydGVyPFMsIFQ+IGdldCBlbmNvZGVyOwoKICAvLy8gUmV0dXJucyB0aGUgZGVjb2RlciBvZiBgdGhpc2AsIGNvbnZlcnRpbmcgZnJvbSBbVF0gdG8gW1NdLgogIC8vLwogIC8vLyBJdCBtYXkgYmUgc3RhdGVmdWwgYW5kIHNob3VsZCBub3QgYmUgcmV1c2VkLgogIENvbnZlcnRlcjxULCBTPiBnZXQgZGVjb2RlcjsKCiAgLy8vIEZ1c2VzIGB0aGlzYCB3aXRoIGBvdGhlcmAuCiAgLy8vCiAgLy8vIFdoZW4gZW5jb2RpbmcsIHRoZSByZXN1bHRpbmcgY29kZWMgZW5jb2RlcyB3aXRoIGB0aGlzYCBiZWZvcmUKICAvLy8gZW5jb2Rpbmcgd2l0aCBbb3RoZXJdLgogIC8vLwogIC8vLyBXaGVuIGRlY29kaW5nLCB0aGUgcmVzdWx0aW5nIGNvZGVjIGRlY29kZXMgd2l0aCBbb3RoZXJdIGJlZm9yZSBkZWNvZGluZwogIC8vLyB3aXRoIGB0aGlzYC4KICAvLy8KICAvLy8gSW4gc29tZSBjYXNlcyBvbmUgbmVlZHMgdG8gdXNlIHRoZSBbaW52ZXJ0ZWRdIGNvZGVjcyB0byBiZSBhYmxlIHRvIGZ1c2UKICAvLy8gdGhlbSBjb3JyZWN0bHkuIFRoYXQgaXMsIHRoZSBvdXRwdXQgdHlwZSBvZiBgdGhpc2AgKFtUXSkgbXVzdCBtYXRjaCB0aGUKICAvLy8gaW5wdXQgdHlwZSBvZiB0aGUgc2Vjb25kIGNvZGVjIFtvdGhlcl0uCiAgLy8vCiAgLy8vIEV4YW1wbGVzOgogIC8vLyBgYGBkYXJ0CiAgLy8vIGZpbmFsIGpzb25Ub0J5dGVzID0ganNvbi5mdXNlKHV0ZjgpOwogIC8vLyBMaXN0PGludD4gYnl0ZXMgPSBqc29uVG9CeXRlcy5lbmNvZGUoWyJqc29uLW9iamVjdCJdKTsKICAvLy8gdmFyIGRlY29kZWQgPSBqc29uVG9CeXRlcy5kZWNvZGUoYnl0ZXMpOwogIC8vLyBhc3NlcnQoZGVjb2RlZCBpcyBMaXN0ICYmIGRlY29kZWRbMF0gPT0gImpzb24tb2JqZWN0Iik7CiAgLy8vCiAgLy8vIHZhciBpbnZlcnRlZCA9IGpzb24uaW52ZXJ0ZWQ7CiAgLy8vIHZhciBqc29uSWRlbnRpdHkgPSBqc29uLmZ1c2UoaW52ZXJ0ZWQpOwogIC8vLyB2YXIganNvbk9iamVjdCA9IGpzb25JZGVudGl0eS5lbmNvZGUoWyIxIiwgMl0pOwogIC8vLyBhc3NlcnQoanNvbk9iamVjdCBpcyBMaXN0ICYmIGpzb25PYmplY3RbMF0gPT0gIjEiICYmIGpzb25PYmplY3RbMV0gPT0gMik7CiAgLy8vIGBgYAogIC8vIFRPRE8oZmxvaXRzY2gpOiB1c2UgYmV0dGVyIGV4YW1wbGUgd2l0aCBsaW5lLXNwbGl0dGVyIG9uY2UgdGhhdCBvbmUgaXMKICAvLyBpbiB0aGlzIGxpYnJhcnkuCiAgQ29kZWM8UywgUj4gZnVzZTxSPihDb2RlYzxULCBSPiBvdGhlcikgewogICAgcmV0dXJuIF9GdXNlZENvZGVjPFMsIFQsIFI+KHRoaXMsIG90aGVyKTsKICB9CgogIC8vLyBJbnZlcnRzIGB0aGlzYC4KICAvLy8KICAvLy8gVGhlIFtlbmNvZGVyXSBhbmQgW2RlY29kZXJdIG9mIHRoZSByZXN1bHRpbmcgY29kZWMgYXJlIHN3YXBwZWQuCiAgQ29kZWM8VCwgUz4gZ2V0IGludmVydGVkID0+IF9JbnZlcnRlZENvZGVjPFQsIFM+KHRoaXMpOwp9CgovLy8gRnVzZXMgdGhlIGdpdmVuIGNvZGVjcy4KLy8vCi8vLyBJbiB0aGUgbm9uLWNodW5rZWQgY29udmVyc2lvbiBzaW1wbHkgaW52b2tlcyB0aGUgbm9uLWNodW5rZWQgY29udmVyc2lvbnMgaW4KLy8vIHNlcXVlbmNlLgpjbGFzcyBfRnVzZWRDb2RlYzxTLCBNLCBUPiBleHRlbmRzIENvZGVjPFMsIFQ+IHsKICBmaW5hbCBDb2RlYzxTLCBNPiBfZmlyc3Q7CiAgZmluYWwgQ29kZWM8TSwgVD4gX3NlY29uZDsKCiAgQ29udmVydGVyPFMsIFQ+IGdldCBlbmNvZGVyID0+IF9maXJzdC5lbmNvZGVyLmZ1c2U8VD4oX3NlY29uZC5lbmNvZGVyKTsKICBDb252ZXJ0ZXI8VCwgUz4gZ2V0IGRlY29kZXIgPT4gX3NlY29uZC5kZWNvZGVyLmZ1c2U8Uz4oX2ZpcnN0LmRlY29kZXIpOwoKICBfRnVzZWRDb2RlYyh0aGlzLl9maXJzdCwgdGhpcy5fc2Vjb25kKTsKfQoKY2xhc3MgX0ludmVydGVkQ29kZWM8VCwgUz4gZXh0ZW5kcyBDb2RlYzxULCBTPiB7CiAgZmluYWwgQ29kZWM8UywgVD4gX2NvZGVjOwoKICBfSW52ZXJ0ZWRDb2RlYyhDb2RlYzxTLCBUPiBjb2RlYykgOiBfY29kZWMgPSBjb2RlYzsKCiAgQ29udmVydGVyPFQsIFM+IGdldCBlbmNvZGVyID0+IF9jb2RlYy5kZWNvZGVyOwogIENvbnZlcnRlcjxTLCBUPiBnZXQgZGVjb2RlciA9PiBfY29kZWMuZW5jb2RlcjsKCiAgQ29kZWM8UywgVD4gZ2V0IGludmVydGVkID0+IF9jb2RlYzsKfQpjAE5OPAEWATcER04kBFA4HREBFwY3LwEeBjczASsGMx8BQQYzHwEhBkQdBk4TBk5OLgYQDis9Lz4GJC42UApMFisuBAEWBkY6AgEcBFAOMRwdAUpKASoCATEcATYBMTEBJgIBF2RhcnQ6Y29udmVydC9jb2RlYy5kYXJ0Mm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L2NvbnZlcnRlci5kYXJ0ipUvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbnZlcnQ7CgovLy8gQSBbQ29udmVydGVyXSBjb252ZXJ0cyBkYXRhIGZyb20gb25lIHJlcHJlc2VudGF0aW9uIGludG8gYW5vdGhlci4KLy8vCi8vLyBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGltcGxlbWVudGF0aW9ucyBvZiBgQ29udmVydGVyYCBleHRlbmQgdGhpcyBjbGFzcywKLy8vIHRvIGluaGVyaXQgYW55IGZ1cnRoZXIgbWV0aG9kcyB0aGF0IG1heSBiZSBhZGRlZCB0byB0aGUgY2xhc3MuCmFic3RyYWN0IGNsYXNzIENvbnZlcnRlcjxTLCBUPiBleHRlbmRzIFN0cmVhbVRyYW5zZm9ybWVyQmFzZTxTLCBUPiB7CiAgY29uc3QgQ29udmVydGVyKCk7CgogIC8vLyBBZGFwdHMgW3NvdXJjZV0gdG8gYmUgYSBgQ29udmVydGVyPFRTLCBUVD5gLgogIC8vLwogIC8vLyBUaGlzIGFsbG93cyBbc291cmNlXSB0byBiZSB1c2VkIGF0IHRoZSBuZXcgdHlwZSwgYnV0IGF0IHJ1bi10aW1lIGl0CiAgLy8vIG11c3Qgc2F0aXNmeSB0aGUgcmVxdWlyZW1lbnRzIG9mIGJvdGggdGhlIG5ldyB0eXBlIGFuZCBpdHMgb3JpZ2luYWwgdHlwZS4KICAvLy8KICAvLy8gQ29udmVyc2lvbiBpbnB1dCBtdXN0IGJlIGJvdGggW1NTXSBhbmQgW1RTXSBhbmQgdGhlIG91dHB1dCBjcmVhdGVkIGJ5CiAgLy8vIFtzb3VyY2VdIGZvciB0aG9zZSBpbnB1dCBtdXN0IGJlIGJvdGggW1NUXSBhbmQgW1RUXS4KICBzdGF0aWMgQ29udmVydGVyPFRTLCBUVD4gY2FzdEZyb208U1MsIFNULCBUUywgVFQ+KENvbnZlcnRlcjxTUywgU1Q+IHNvdXJjZSkgPT4KICAgICAgQ2FzdENvbnZlcnRlcjxTUywgU1QsIFRTLCBUVD4oc291cmNlKTsKCiAgLy8vIENvbnZlcnRzIFtpbnB1dF0gYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29udmVyc2lvbi4KICBUIGNvbnZlcnQoUyBpbnB1dCk7CgogIC8vLyBGdXNlcyBgdGhpc2Agd2l0aCBbb3RoZXJdLgogIC8vLwogIC8vLyBFbmNvZGluZyB3aXRoIHRoZSByZXN1bHRpbmcgY29udmVydGVyIGlzIGVxdWl2YWxlbnQgdG8gY29udmVydGluZyB3aXRoCiAgLy8vIGB0aGlzYCBiZWZvcmUgY29udmVydGluZyB3aXRoIGBvdGhlcmAuCiAgQ29udmVydGVyPFMsIFRUPiBmdXNlPFRUPihDb252ZXJ0ZXI8VCwgVFQ+IG90aGVyKSB7CiAgICByZXR1cm4gX0Z1c2VkQ29udmVydGVyPFMsIFQsIFRUPih0aGlzLCBvdGhlcik7CiAgfQoKICAvLy8gU3RhcnRzIGEgY2h1bmtlZCBjb252ZXJzaW9uLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgc2luayBzZXJ2ZXMgYXMgaW5wdXQgZm9yIHRoZSBsb25nLXJ1bm5pbmcgY29udmVyc2lvbi4gVGhlCiAgLy8vIGdpdmVuIFtzaW5rXSBzZXJ2ZXMgYXMgb3V0cHV0LgogIFNpbms8Uz4gc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPFQ+IHNpbmspIHsKICAgIHRocm93IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIlRoaXMgY29udmVydGVyIGRvZXMgbm90IHN1cHBvcnQgY2h1bmtlZCBjb252ZXJzaW9uczogJHRoaXMiKTsKICB9CgogIFN0cmVhbTxUPiBiaW5kKFN0cmVhbTxTPiBzdHJlYW0pIHsKICAgIHJldHVybiBTdHJlYW08VD4uZXZlbnRUcmFuc2Zvcm1lZCgKICAgICAgICBzdHJlYW0sIChFdmVudFNpbmsgc2luaykgPT4gX0NvbnZlcnRlclN0cmVhbUV2ZW50U2luayh0aGlzLCBzaW5rKSk7CiAgfQoKICAvLy8gUHJvdmlkZXMgYSBgQ29udmVydGVyPFJTLCBSVD5gIHZpZXcgb2YgdGhpcyBzdHJlYW0gdHJhbnNmb3JtZXIuCiAgLy8vCiAgLy8vIFRoZSByZXN1bHRpbmcgdHJhbnNmb3JtZXIgd2lsbCBjaGVjayBhdCBydW4tdGltZSB0aGF0IGFsbCBjb252ZXJzaW9uCiAgLy8vIGlucHV0cyBhcmUgYWN0dWFsbHkgaW5zdGFuY2VzIG9mIFtTXSwKICAvLy8gYW5kIGl0IHdpbGwgY2hlY2sgdGhhdCBhbGwgY29udmVyc2lvbiBvdXRwdXQgcHJvZHVjZWQgYnkgdGhpcyBjb252ZXJ0ZXIKICAvLy8gYXJlIGFjdHVhbGx5IGluc3RhbmNlcyBvZiBbUlRdLgogIENvbnZlcnRlcjxSUywgUlQ+IGNhc3Q8UlMsIFJUPigpID0+IENvbnZlcnRlci5jYXN0RnJvbTxTLCBULCBSUywgUlQ+KHRoaXMpOwp9CgovLy8gRnVzZXMgdHdvIGNvbnZlcnRlcnMuCi8vLwovLy8gRm9yIGEgbm9uLWNodW5rZWQgY29udmVyc2lvbiBjb252ZXJ0cyB0aGUgaW5wdXQgaW4gc2VxdWVuY2UuCmNsYXNzIF9GdXNlZENvbnZlcnRlcjxTLCBNLCBUPiBleHRlbmRzIENvbnZlcnRlcjxTLCBUPiB7CiAgZmluYWwgQ29udmVydGVyPFMsIE0+IF9maXJzdDsKICBmaW5hbCBDb252ZXJ0ZXI8TSwgVD4gX3NlY29uZDsKCiAgX0Z1c2VkQ29udmVydGVyKHRoaXMuX2ZpcnN0LCB0aGlzLl9zZWNvbmQpOwoKICBUIGNvbnZlcnQoUyBpbnB1dCkgPT4gX3NlY29uZC5jb252ZXJ0KF9maXJzdC5jb252ZXJ0KGlucHV0KSk7CgogIFNpbms8Uz4gc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPFQ+IHNpbmspIHsKICAgIHJldHVybiBfZmlyc3Quc3RhcnRDaHVua2VkQ29udmVyc2lvbihfc2Vjb25kLnN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oc2luaykpOwogIH0KfQpKAE5OPAEWAUYETUNFFQEzBkpQBkw7US0BQRYBIQZNLTYzBAEjBk0lMRxHBAElJ0wEAUYGSyxOJk4CARoEQTkgIQEuAUABMVAEAgEbZGFydDpjb252ZXJ0L2NvbnZlcnRlci5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L2VuY29kaW5nLmRhcnSJ+S8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBPcGVuLWVuZGVkIEVuY29kaW5nIGVudW0uCmFic3RyYWN0IGNsYXNzIEVuY29kaW5nIGV4dGVuZHMgQ29kZWM8U3RyaW5nLCBMaXN0PGludD4+IHsKICBjb25zdCBFbmNvZGluZygpOwoKICAvLy8gUmV0dXJucyB0aGUgZW5jb2RlciBmcm9tIGBTdHJpbmdgIHRvIGBMaXN0PGludD5gLgogIC8vLwogIC8vLyBJdCBtYXkgYmUgc3RhdGVmdWwgYW5kIHNob3VsZCBub3QgYmUgcmV1c2VkLgogIENvbnZlcnRlcjxTdHJpbmcsIExpc3Q8aW50Pj4gZ2V0IGVuY29kZXI7CgogIC8vLyBSZXR1cm5zIHRoZSBkZWNvZGVyIG9mIGB0aGlzYCwgY29udmVydGluZyBmcm9tIGBMaXN0PGludD5gIHRvIGBTdHJpbmdgLgogIC8vLwogIC8vLyBJdCBtYXkgYmUgc3RhdGVmdWwgYW5kIHNob3VsZCBub3QgYmUgcmV1c2VkLgogIENvbnZlcnRlcjxMaXN0PGludD4sIFN0cmluZz4gZ2V0IGRlY29kZXI7CgogIEZ1dHVyZTxTdHJpbmc+IGRlY29kZVN0cmVhbShTdHJlYW08TGlzdDxpbnQ+PiBieXRlU3RyZWFtKSB7CiAgICByZXR1cm4gZGVjb2RlcgogICAgICAgIC5iaW5kKGJ5dGVTdHJlYW0pCiAgICAgICAgLmZvbGQoU3RyaW5nQnVmZmVyKCksCiAgICAgICAgICAgIChTdHJpbmdCdWZmZXIgYnVmZmVyLCBTdHJpbmcgc3RyaW5nKSA9PiBidWZmZXIuLndyaXRlKHN0cmluZykpCiAgICAgICAgLnRoZW4oKFN0cmluZ0J1ZmZlciBidWZmZXIpID0+IGJ1ZmZlci50b1N0cmluZygpKTsKICB9CgogIC8vLyBOYW1lIG9mIHRoZSBlbmNvZGluZy4KICAvLy8KICAvLy8gSWYgdGhlIGVuY29kaW5nIGlzIHN0YW5kYXJkaXplZCwgdGhpcyBpcyB0aGUgbG93ZXItY2FzZSB2ZXJzaW9uIG9mIG9uZSBvZgogIC8vLyB0aGUgSUFOQSBvZmZpY2lhbCBuYW1lcyBmb3IgdGhlIGNoYXJhY3RlciBzZXQgKHNlZQogIC8vLyBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2NoYXJhY3Rlci1zZXRzL2NoYXJhY3Rlci1zZXRzLnhtbCkKICBTdHJpbmcgZ2V0IG5hbWU7CgogIC8vIEFsbCBhbGlhc2VzIChpbiBsb3dlcmNhc2UpIG9mIHN1cHBvcnRlZCBlbmNvZGluZyBmcm9tCiAgLy8gaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9jaGFyYWN0ZXItc2V0cy9jaGFyYWN0ZXItc2V0cy54bWwuCiAgc3RhdGljIGZpbmFsIE1hcDxTdHJpbmcsIEVuY29kaW5nPiBfbmFtZVRvRW5jb2RpbmcgPSA8U3RyaW5nLCBFbmNvZGluZz57CiAgICAvLyBJU09fODg1OS0xOjE5ODcuCiAgICAiaXNvXzg4NTktMToxOTg3IjogbGF0aW4xLAogICAgImlzby1pci0xMDAiOiBsYXRpbjEsCiAgICAiaXNvXzg4NTktMSI6IGxhdGluMSwKICAgICJpc28tODg1OS0xIjogbGF0aW4xLAogICAgImxhdGluMSI6IGxhdGluMSwKICAgICJsMSI6IGxhdGluMSwKICAgICJpYm04MTkiOiBsYXRpbjEsCiAgICAiY3A4MTkiOiBsYXRpbjEsCiAgICAiY3Npc29sYXRpbjEiOiBsYXRpbjEsCgogICAgLy8gVVMtQVNDSUkuCiAgICAiaXNvLWlyLTYiOiBhc2NpaSwKICAgICJhbnNpX3gzLjQtMTk2OCI6IGFzY2lpLAogICAgImFuc2lfeDMuNC0xOTg2IjogYXNjaWksCiAgICAiaXNvXzY0Ni5pcnY6MTk5MSI6IGFzY2lpLAogICAgImlzbzY0Ni11cyI6IGFzY2lpLAogICAgInVzLWFzY2lpIjogYXNjaWksCiAgICAidXMiOiBhc2NpaSwKICAgICJpYm0zNjciOiBhc2NpaSwKICAgICJjcDM2NyI6IGFzY2lpLAogICAgImNzYXNjaWkiOiBhc2NpaSwKICAgICJhc2NpaSI6IGFzY2lpLCAvLyBUaGlzIGlzIG5vdCBpbiB0aGUgSUFOQSBvZmZpY2lhbCBuYW1lcy4KCiAgICAvLyBVVEYtOC4KICAgICJjc3V0ZjgiOiB1dGY4LAogICAgInV0Zi04IjogdXRmOAogIH07CgogIC8vLyBHZXRzIGFuIFtFbmNvZGluZ10gb2JqZWN0IGZyb20gdGhlIG5hbWUgb2YgdGhlIGNoYXJhY3RlciBzZXQKICAvLy8gbmFtZS4gVGhlIG5hbWVzIHVzZWQgYXJlIHRoZSBJQU5BIG9mZmljaWFsIG5hbWVzIGZvciB0aGUKICAvLy8gY2hhcmFjdGVyIHNldCAoc2VlCiAgLy8vIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvY2hhcmFjdGVyLXNldHMvY2hhcmFjdGVyLXNldHMueG1sKS4KICAvLy8KICAvLy8gVGhlIFtuYW1lXSBwYXNzZWQgaXMgY2FzZSBpbnNlbnNpdGl2ZS4KICAvLy8KICAvLy8gSWYgY2hhcmFjdGVyIHNldCBpcyBub3Qgc3VwcG9ydGVkIFs6bnVsbDpdIGlzIHJldHVybmVkLgogIHN0YXRpYyBFbmNvZGluZyBnZXRCeU5hbWUoU3RyaW5nIG5hbWUpIHsKICAgIGlmIChuYW1lID09IG51bGwpIHJldHVybiBudWxsOwogICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTsKICAgIHJldHVybiBfbmFtZVRvRW5jb2RpbmdbbmFtZV07CiAgfQp9ClMATk48ARYBHjsUATgGMywBTgYzLAE+ExoeSzsEARwGUDlJEwE7SEsYHxoaGhYSFhUbAREXHR0fGBcRFRQWPwEOFBIFAUM/GUoGLQY+KyMfIgQCARpkYXJ0OmNvbnZlcnQvZW5jb2RpbmcuZGFydDRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29udmVydC9odG1sX2VzY2FwZS5kYXJ0n8cvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbnZlcnQ7CgovLy8gQSBgU3RyaW5nYCBjb252ZXJ0ZXIgdGhhdCBjb252ZXJ0cyBjaGFyYWN0ZXJzIHRvIEhUTUwgZW50aXRpZXMuCi8vLwovLy8gVGhpcyBpcyBpbnRlbmRlZCB0byBzYW5pdGl6ZSB0ZXh0IGJlZm9yZSBpbnNlcnRpbmcgdGhlIHRleHQgaW50byBhbiBIVE1MCi8vLyBkb2N1bWVudC4gQ2hhcmFjdGVycyB0aGF0IGFyZSBtZWFuaW5nZnVsIGluIEhUTUwgYXJlIGNvbnZlcnRlZCB0bwovLy8gSFRNTCBlbnRpdGllcyAobGlrZSBgJmFtcDtgIGZvciBgJmApLgovLy8KLy8vIFRoZSBnZW5lcmFsIGNvbnZlcnRlciBlc2NhcGVzIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG1lYW5pbmdmdWwgaW4gSFRNTAovLy8gYXR0cmlidXRlcyBvciBub3JtYWwgZWxlbWVudCBjb250ZXh0LiBFbGVtZW50cyB3aXRoIHNwZWNpYWwgY29udGVudCB0eXBlcwovLy8gKGxpa2UgQ1NTIG9yIEphdmFTY3JpcHQpIG1heSBuZWVkIGEgbW9yZSBzcGVjaWFsaXplZCBlc2NhcGluZyB0aGF0Ci8vLyB1bmRlcnN0YW5kcyB0aGF0IGNvbnRlbnQgdHlwZS4KLy8vCi8vLyBJZiB0aGUgY29udGV4dCB3aGVyZSB0aGUgdGV4dCB3aWxsIGJlIGluc2VydGVkIGlzIGtub3duIGluIG1vcmUgZGV0YWlsLAovLy8gaXQncyBwb3NzaWJsZSB0byBvbWl0IGVzY2FwaW5nIHNvbWUgY2hhcmFjdGVycyAobGlrZSBxdW90ZXMgd2hlbiBub3QKLy8vIGluc2lkZSBhbiBhdHRyaWJ1dGUgdmFsdWUpLgovLy8KLy8vIFRoZSBlc2NhcGVkIHRleHQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbnNpZGUgcXVvdGVkIEhUTUwgYXR0cmlidXRlcyB2YWx1ZXMKLy8vIG9yIGFzIHRleHQgY29udGVudCBvZiBhIG5vcm1hbCBlbGVtZW50LiBVc2luZyB0aGUgZXNjYXBlZCB0ZXh0IGluc2lkZSBhCi8vLyB0YWcsIGJ1dCBub3QgaW5zaWRlIGEgcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZSwgaXMgc3RpbGwgZGFuZ2Vyb3VzLgpjb25zdCBIdG1sRXNjYXBlIGh0bWxFc2NhcGUgPSBIdG1sRXNjYXBlKCk7CgovLy8gSFRNTCBlc2NhcGUgbW9kZXMuCi8vLwovLy8gQWxsb3dzIHNwZWNpZnlpbmcgYSBtb2RlIGZvciBIVE1MIGVzY2FwaW5nIHRoYXQgZGVwZW5kIG9uIHRoZSBjb250ZXh0Ci8vLyB3aGVyZSB0aGUgZXNjYXBlZCByZXN1bHQgaXMgZ29pbmcgdG8gYmUgdXNlZC4KLy8vIFRoZSByZWxldmFudCBjb250ZXh0cyBhcmU6Ci8vLwovLy8gKiBhcyB0ZXh0IGNvbnRlbnQgb2YgYW4gSFRNTCBlbGVtZW50LgovLy8gKiBhcyB2YWx1ZSBvZiBhIChzaW5nbGUtIG9yIGRvdWJsZS0pIHF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuCi8vLwovLy8gQWxsIG1vZGVzIHJlcXVpcmUgZXNjYXBpbmcgb2YgYCZgIChhbXBlcnNhbmQpIGNoYXJhY3RlcnMsIGFuZCBtYXkKLy8vIGVuYWJsZSBlc2NhcGluZyBvZiBtb3JlIGNoYXJhY3RlcnMuCi8vLwovLy8gQ3VzdG9tIGVzY2FwZSBtb2RlcyBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgW0h0bWxFc2NhcGVNb2RlLkh0bWxFc2NhcGVNb2RlXQovLy8gY29uc3RydWN0b3IuCmNsYXNzIEh0bWxFc2NhcGVNb2RlIHsKICBmaW5hbCBTdHJpbmcgX25hbWU7CgogIC8vLyBXaGV0aGVyIHRvIGVzY2FwZSAnPCcgYW5kICc+Jy4KICBmaW5hbCBib29sIGVzY2FwZUx0R3Q7CgogIC8vLyBXaGV0aGVyIHRvIGVzY2FwZSAnIicgKHF1b3RlKS4KICBmaW5hbCBib29sIGVzY2FwZVF1b3Q7CgogIC8vLyBXaGV0aGVyIHRvIGVzY2FwZSAiJyIgKGFwb3N0cm9waGUpLgogIGZpbmFsIGJvb2wgZXNjYXBlQXBvczsKCiAgLy8vIFdoZXRoZXIgdG8gZXNjYXBlICIvIiAoZm9yd2FyZCBzbGFzaCwgc29saWR1cykuCiAgLy8vCiAgLy8vIEVzY2FwaW5nIGEgc2xhc2ggaXMgcmVjb21tZW5kZWQgdG8gYXZvaWQgY3Jvc3Mtc2l0ZSBzY3JpcHRpbmcgYXR0YWNrcyBieQogIC8vLyBbdGhlIE9wZW4gV2ViIEFwcGxpY2F0aW9uIFNlY3VyaXR5IFByb2plY3RdKGh0dHBzOi8vd3d3Lm93YXNwLm9yZy9pbmRleC5waHAvWFNTXyhDcm9zc19TaXRlX1NjcmlwdGluZylfUHJldmVudGlvbl9DaGVhdF9TaGVldCNSVUxFXy4yMzFfLV9IVE1MX0VzY2FwZV9CZWZvcmVfSW5zZXJ0aW5nX1VudHJ1c3RlZF9EYXRhX2ludG9fSFRNTF9FbGVtZW50X0NvbnRlbnQpCiAgZmluYWwgYm9vbCBlc2NhcGVTbGFzaDsKCiAgLy8vIERlZmF1bHQgZXNjYXBpbmcgbW9kZSB3aGljaCBlc2NhcGUgYWxsIGNoYXJhY3RlcnMuCiAgLy8vCiAgLy8vIFRoZSByZXN1bHQgb2Ygc3VjaCBhbiBlc2NhcGluZyBpcyB1c2FibGUgYm90aCBpbiBlbGVtZW50IGNvbnRlbnQgYW5kCiAgLy8vIGluIGFueSBhdHRyaWJ1dGUgdmFsdWUuCiAgLy8vCiAgLy8vIFRoZSBlc2NhcGluZyBvbmx5IHdvcmtzIGZvciBlbGVtZW50cyB3aXRoIG5vcm1hbCBIVE1MIGNvbnRlbnQsCiAgLy8vIGFuZCBub3QgZm9yLCBmb3IgZXhhbXBsZSwgc2NyaXB0IG9yIHN0eWxlIGVsZW1lbnQgY29udGVudCwKICAvLy8gd2hpY2ggcmVxdWlyZSBlc2NhcGVzIG1hdGNoaW5nIHRoZWlyIHBhcnRpY3VsYXIgY29udGVudCBzeW50YXguCiAgc3RhdGljIGNvbnN0IEh0bWxFc2NhcGVNb2RlIHVua25vd24gPQogICAgICBIdG1sRXNjYXBlTW9kZS5fKCd1bmtub3duJywgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CgogIC8vLyBFc2NhcGluZyBtb2RlIGZvciB0ZXh0IGdvaW5nIGludG8gZG91YmxlLXF1b3RlZCBIVE1MIGF0dHJpYnV0ZSB2YWx1ZXMuCiAgLy8vCiAgLy8vIFRoZSByZXN1bHQgc2hvdWxkIG5vdCBiZSB1c2VkIGFzIHRoZSBjb250ZW50IG9mIGFuIHVucXVvdGVkCiAgLy8vIG9yIHNpbmdsZS1xdW90ZWQgYXR0cmlidXRlIHZhbHVlLgogIC8vLwogIC8vLyBFc2NhcGVzIGRvdWJsZSBxdW90ZXMgKGAiYCkgYnV0IG5vdCBzaW5nbGUgcXVvdGVzIChgJ2ApLAogIC8vLyBhbmQgZXNjYXBlcyBgPGAgYW5kIGA+YCBjaGFyYWN0ZXJzIGJlY2F1c2UgdGhleSBhcmUgbm90IGFsbG93ZWQKICAvLy8gaW4gc3RyaWN0IFhIVE1MIGF0dHJpYnV0ZXMKICBzdGF0aWMgY29uc3QgSHRtbEVzY2FwZU1vZGUgYXR0cmlidXRlID0KICAgICAgSHRtbEVzY2FwZU1vZGUuXygnYXR0cmlidXRlJywgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGZhbHNlKTsKCiAgLy8vIEVzY2FwaW5nIG1vZGUgZm9yIHRleHQgZ29pbmcgaW50byBzaW5nbGUtcXVvdGVkIEhUTUwgYXR0cmlidXRlIHZhbHVlcy4KICAvLy8KICAvLy8gVGhlIHJlc3VsdCBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIGNvbnRlbnQgb2YgYW4gdW5xdW90ZWQKICAvLy8gb3IgZG91YmxlLXF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuCiAgLy8vCiAgLy8vIEVzY2FwZXMgc2luZ2xlIHF1b3RlcyAoYCdgKSBidXQgbm90IGRvdWJsZSBxdW90ZXMgKGAiYCksCiAgLy8vIGFuZCBlc2NhcGVzIGA8YCBhbmQgYD5gIGNoYXJhY3RlcnMgYmVjYXVzZSB0aGV5IGFyZSBub3QgYWxsb3dlZAogIC8vLyBpbiBzdHJpY3QgWEhUTUwgYXR0cmlidXRlcwogIHN0YXRpYyBjb25zdCBIdG1sRXNjYXBlTW9kZSBzcUF0dHJpYnV0ZSA9CiAgICAgIEh0bWxFc2NhcGVNb2RlLl8oJ2F0dHJpYnV0ZScsIHRydWUsIGZhbHNlLCB0cnVlLCBmYWxzZSk7CgogIC8vLyBFc2NhcGluZyBtb2RlIGZvciB0ZXh0IGdvaW5nIGludG8gSFRNTCBlbGVtZW50IGNvbnRlbnQuCiAgLy8vCiAgLy8vIFRoZSBlc2NhcGluZyBvbmx5IHdvcmtzIGZvciBlbGVtZW50cyB3aXRoIG5vcm1hbCBIVE1MIGNvbnRlbnQsCiAgLy8vIGFuZCBub3QgZm9yLCBmb3IgZXhhbXBsZSwgc2NyaXB0IG9yIHN0eWxlIGVsZW1lbnQgY29udGVudCwKICAvLy8gd2hpY2ggcmVxdWlyZSBlc2NhcGVzIG1hdGNoaW5nIHRoZWlyIHBhcnRpY3VsYXIgY29udGVudCBzeW50YXguCiAgLy8vCiAgLy8vIEVzY2FwZXMgYDxgIGFuZCBgPmAgY2hhcmFjdGVycy4KICBzdGF0aWMgY29uc3QgSHRtbEVzY2FwZU1vZGUgZWxlbWVudCA9CiAgICAgIEh0bWxFc2NhcGVNb2RlLl8oJ2VsZW1lbnQnLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKCiAgY29uc3QgSHRtbEVzY2FwZU1vZGUuXyh0aGlzLl9uYW1lLCB0aGlzLmVzY2FwZUx0R3QsIHRoaXMuZXNjYXBlUXVvdCwKICAgICAgdGhpcy5lc2NhcGVBcG9zLCB0aGlzLmVzY2FwZVNsYXNoKTsKCiAgLy8vIENyZWF0ZSBhIGN1c3RvbSBlc2NhcGluZyBtb2RlLgogIC8vLwogIC8vLyBBbGwgbW9kZXMgZXNjYXBlIGAmYC4KICAvLy8gVGhlIG1vZGUgY2FuIGZ1cnRoZXIgYmUgc2V0IHRvIGVzY2FwZSBgPGAgYW5kIGA+YCAoW2VzY2FwZUx0R3RdKSwKICAvLy8gYCJgIChbZXNjYXBlUXVvdF0pLCBgJ2AgKFtlc2NhcGVBcG9zXSksIGFuZC9vciBgL2AgKFtlc2NhcGVTbGFzaF0pLgogIGNvbnN0IEh0bWxFc2NhcGVNb2RlKAogICAgICB7U3RyaW5nIG5hbWUgPSAiY3VzdG9tIiwKICAgICAgdGhpcy5lc2NhcGVMdEd0ID0gZmFsc2UsCiAgICAgIHRoaXMuZXNjYXBlUXVvdCA9IGZhbHNlLAogICAgICB0aGlzLmVzY2FwZUFwb3MgPSBmYWxzZSwKICAgICAgdGhpcy5lc2NhcGVTbGFzaCA9IGZhbHNlfSkKICAgICAgOiBfbmFtZSA9IG5hbWU7CgogIFN0cmluZyB0b1N0cmluZygpID0+IF9uYW1lOwp9CgovLy8gQ29udmVydGVyIHdoaWNoIGVzY2FwZXMgY2hhcmFjdGVycyB3aXRoIHNwZWNpYWwgbWVhbmluZyBpbiBIVE1MLgovLy8KLy8vIFRoZSBjb252ZXJ0ZXIgZmluZHMgY2hhcmFjdGVycyB0aGF0IGFyZSBzaWduaWZpY2FudCBpbiBIVE1MIHNvdXJjZSBhbmQKLy8vIHJlcGxhY2VzIHRoZW0gd2l0aCBjb3JyZXNwb25kaW5nIEhUTUwgZW50aXRpZXMuCi8vLwovLy8gVGhlIGNoYXJhY3RlcnMgdGhhdCBuZWVkIGVzY2FwaW5nIGluIEhUTUwgYXJlOgovLy8KLy8vICogYCZgIChhbXBlcnNhbmQpIGFsd2F5cyBuZWVkIHRvIGJlIGVzY2FwZWQuCi8vLyAqIGA8YCAobGVzcyB0aGFuKSBhbmQgJz4nIChncmVhdGVyIHRoYW4pIHdoZW4gaW5zaWRlIGFuIGVsZW1lbnQuCi8vLyAqIGAiYCAocXVvdGUpIHdoZW4gaW5zaWRlIGEgZG91YmxlLXF1b3RlZCBhdHRyaWJ1dGUgdmFsdWUuCi8vLyAqIGAnYCAoYXBvc3Ryb3BoZSkgd2hlbiBpbnNpZGUgYSBzaW5nbGUtcXVvdGVkIGF0dHJpYnV0ZSB2YWx1ZS4KLy8vICAgICAgIEFwb3N0cm9waGUgaXMgZXNjYXBlZCBhcyBgJiMzOTtgIGluc3RlYWQgb2YgYCZhcG9zO2Agc2luY2UKLy8vICAgICAgIG5vdCBhbGwgYnJvd3NlcnMgdW5kZXJzdGFuZCBgJmFwb3M7YC4KLy8vICogYC9gIChzbGFzaCkgaXMgcmVjb21tZW5kZWQgdG8gYmUgZXNjYXBlZCBiZWNhdXNlIGl0IG1heSBiZSB1c2VkCi8vLyAgICAgICB0byB0ZXJtaW5hdGUgYW4gZWxlbWVudCBpbiBzb21lIEhUTUwgZGlhbGVjdHMuCi8vLwovLy8gRXNjYXBpbmcgYD5gIChncmVhdGVyIHRoYW4pIGlzbid0IG5lY2Vzc2FyeSwgYnV0IHRoZSByZXN1bHQgaXMgb2Z0ZW4KLy8vIGZvdW5kIHRvIGJlIGVhc2llciB0byByZWFkIGlmIGdyZWF0ZXItdGhhbiBpcyBhbHNvIGVzY2FwZWQgd2hlbmV2ZXIKLy8vIGxlc3MtdGhhbiBpcy4KY2xhc3MgSHRtbEVzY2FwZSBleHRlbmRzIENvbnZlcnRlcjxTdHJpbmcsIFN0cmluZz4gewogIC8vLyBUaGUgW0h0bWxFc2NhcGVNb2RlXSB1c2VkIGJ5IHRoZSBjb252ZXJ0ZXIuCiAgZmluYWwgSHRtbEVzY2FwZU1vZGUgbW9kZTsKCiAgLy8vIENyZWF0ZSBjb252ZXJ0ZXIgdGhhdCBlc2NhcGVzIEhUTUwgY2hhcmFjdGVycy4KICAvLy8KICAvLy8gSWYgW21vZGVdIGlzIHByb3ZpZGVkIGFzIGVpdGhlciBbSHRtbEVzY2FwZU1vZGUuYXR0cmlidXRlXSBvcgogIC8vLyBbSHRtbEVzY2FwZU1vZGUuZWxlbWVudF0sIG9ubHkgdGhlIGNvcnJlc3BvbmRpbmcgc3Vic2V0IG9mIEhUTUwKICAvLy8gY2hhcmFjdGVycyBhcmUgZXNjYXBlZC4KICAvLy8gVGhlIGRlZmF1bHQgaXMgdG8gZXNjYXBlIGFsbCBIVE1MIGNoYXJhY3RlcnMuCiAgY29uc3QgSHRtbEVzY2FwZShbdGhpcy5tb2RlID0gSHRtbEVzY2FwZU1vZGUudW5rbm93bl0pOwoKICBTdHJpbmcgY29udmVydChTdHJpbmcgdGV4dCkgewogICAgdmFyIHZhbCA9IF9jb252ZXJ0KHRleHQsIDAsIHRleHQubGVuZ3RoKTsKICAgIHJldHVybiB2YWwgPT0gbnVsbCA/IHRleHQgOiB2YWw7CiAgfQoKICAvLy8gQ29udmVydHMgdGhlIHN1YnN0cmluZyBvZiB0ZXh0IGZyb20gc3RhcnQgdG8gZW5kLgogIC8vLwogIC8vLyBSZXR1cm5zIGBudWxsYCBpZiBubyBjaGFuZ2VzIHdlcmUgbmVjZXNzYXJ5LCBvdGhlcndpc2UgcmV0dXJucwogIC8vLyB0aGUgY29udmVydGVkIHN0cmluZy4KICBTdHJpbmcgX2NvbnZlcnQoU3RyaW5nIHRleHQsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgU3RyaW5nQnVmZmVyIHJlc3VsdDsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBjaCA9IHRleHRbaV07CiAgICAgIFN0cmluZyByZXBsYWNlbWVudDsKICAgICAgc3dpdGNoIChjaCkgewogICAgICAgIGNhc2UgJyYnOgogICAgICAgICAgcmVwbGFjZW1lbnQgPSAnJmFtcDsnOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnIic6CiAgICAgICAgICBpZiAobW9kZS5lc2NhcGVRdW90KSByZXBsYWNlbWVudCA9ICcmcXVvdDsnOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiJyI6CiAgICAgICAgICBpZiAobW9kZS5lc2NhcGVBcG9zKSByZXBsYWNlbWVudCA9ICcmIzM5Oyc7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICc8JzoKICAgICAgICAgIGlmIChtb2RlLmVzY2FwZUx0R3QpIHJlcGxhY2VtZW50ID0gJyZsdDsnOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnPic6CiAgICAgICAgICBpZiAobW9kZS5lc2NhcGVMdEd0KSByZXBsYWNlbWVudCA9ICcmZ3Q7JzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJy8nOgogICAgICAgICAgaWYgKG1vZGUuZXNjYXBlU2xhc2gpIHJlcGxhY2VtZW50ID0gJyYjNDc7JzsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChyZXBsYWNlbWVudCAhPSBudWxsKSB7CiAgICAgICAgcmVzdWx0ID8/PSBTdHJpbmdCdWZmZXIoKTsKICAgICAgICBpZiAoaSA+IHN0YXJ0KSByZXN1bHQud3JpdGUodGV4dC5zdWJzdHJpbmcoc3RhcnQsIGkpKTsKICAgICAgICByZXN1bHQud3JpdGUocmVwbGFjZW1lbnQpOwogICAgICAgIHN0YXJ0ID0gaSArIDE7CiAgICAgIH0KICAgIH0KICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoZW5kID4gc3RhcnQpIHJlc3VsdC53cml0ZSh0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKSk7CiAgICByZXR1cm4gcmVzdWx0LnRvU3RyaW5nKCk7CiAgfQoKICBTdHJpbmdDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICByZXR1cm4gX0h0bWxFc2NhcGVTaW5rKHRoaXMsCiAgICAgICAgc2luayBpcyBTdHJpbmdDb252ZXJzaW9uU2luayA/IHNpbmsgOiBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tKHNpbmspKTsKICB9Cn0KCmNsYXNzIF9IdG1sRXNjYXBlU2luayBleHRlbmRzIFN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZSB7CiAgZmluYWwgSHRtbEVzY2FwZSBfZXNjYXBlOwogIGZpbmFsIFN0cmluZ0NvbnZlcnNpb25TaW5rIF9zaW5rOwoKICBfSHRtbEVzY2FwZVNpbmsodGhpcy5fZXNjYXBlLCB0aGlzLl9zaW5rKTsKCiAgdm9pZCBhZGRTbGljZShTdHJpbmcgY2h1bmssIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIHZhciB2YWwgPSBfZXNjYXBlLl9jb252ZXJ0KGNodW5rLCBzdGFydCwgZW5kKTsKICAgIGlmICh2YWwgPT0gbnVsbCkgewogICAgICBfc2luay5hZGRTbGljZShjaHVuaywgc3RhcnQsIGVuZCwgaXNMYXN0KTsKICAgIH0gZWxzZSB7CiAgICAgIF9zaW5rLmFkZCh2YWwpOwogICAgICBpZiAoaXNMYXN0KSBfc2luay5jbG9zZSgpOwogICAgfQogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQp9CoDhAE5OPAEWAUQETUYqBE1ORyMETEkgBE5MRiwBFwRKMh8EKkEERigEUREXFgElGQElGQEqGQE2Bk+A1xoBOQZLHgZFQUYoOwFNBkIoBj9GISo/AU0GQigGP0YhLD8BPgZFQUYGJig+AUcqASUGHEhKGB8fHx8hFgEeAgFFBEs0BDMEMUU/REUwRjkESUgSNTIdATUGREYeNDoBIC4lBAE4BkUcNRkoGBoUEiEREjcREjYREjUREjUREjcRCCEjPyMXCAYlPx4EAUMhUAQCATkcJAEtAUEzFzENFiEGBAEREwQCAR1kYXJ0OmNvbnZlcnQvaHRtbF9lc2NhcGUuZGFydC1vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29udmVydC9qc29uLmRhcnTAAIqMLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb252ZXJ0OwoKLy8vIEVycm9yIHRocm93biBieSBKU09OIHNlcmlhbGl6YXRpb24gaWYgYW4gb2JqZWN0IGNhbm5vdCBiZSBzZXJpYWxpemVkLgovLy8KLy8vIFRoZSBbdW5zdXBwb3J0ZWRPYmplY3RdIGZpZWxkIGhvbGRzIHRoYXQgb2JqZWN0IHRoYXQgZmFpbGVkIHRvIGJlIHNlcmlhbGl6ZWQuCi8vLwovLy8gSWYgYW4gb2JqZWN0IGlzbid0IGRpcmVjdGx5IHNlcmlhbGl6YWJsZSwgdGhlIHNlcmlhbGl6ZXIgY2FsbHMgdGhlIGB0b0pzb25gCi8vLyBtZXRob2Qgb24gdGhlIG9iamVjdC4gSWYgdGhhdCBjYWxsIGZhaWxzLCB0aGUgZXJyb3Igd2lsbCBiZSBzdG9yZWQgaW4gdGhlCi8vLyBbY2F1c2VdIGZpZWxkLiBJZiB0aGUgY2FsbCByZXR1cm5zIGFuIG9iamVjdCB0aGF0IGlzbid0IGRpcmVjdGx5Ci8vLyBzZXJpYWxpemFibGUsIHRoZSBbY2F1c2VdIGlzIG51bGwuCmNsYXNzIEpzb25VbnN1cHBvcnRlZE9iamVjdEVycm9yIGV4dGVuZHMgRXJyb3IgewogIC8vLyBUaGUgb2JqZWN0IHRoYXQgY291bGQgbm90IGJlIHNlcmlhbGl6ZWQuCiAgZmluYWwgT2JqZWN0IHVuc3VwcG9ydGVkT2JqZWN0OwoKICAvLy8gVGhlIGV4Y2VwdGlvbiB0aHJvd24gd2hlbiB0cnlpbmcgdG8gY29udmVydCB0aGUgb2JqZWN0LgogIGZpbmFsIE9iamVjdCBjYXVzZTsKCiAgLy8vIFRoZSBwYXJ0aWFsIHJlc3VsdCBvZiB0aGUgY29udmVyc2lvbiwgdXAgdW50aWwgdGhlIGVycm9yIGhhcHBlbmVkLgogIC8vLwogIC8vLyBNYXkgYmUgbnVsbC4KICBmaW5hbCBTdHJpbmcgcGFydGlhbFJlc3VsdDsKCiAgSnNvblVuc3VwcG9ydGVkT2JqZWN0RXJyb3IodGhpcy51bnN1cHBvcnRlZE9iamVjdCwKICAgICAge3RoaXMuY2F1c2UsIHRoaXMucGFydGlhbFJlc3VsdH0pOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICB2YXIgc2FmZVN0cmluZyA9IEVycm9yLnNhZmVUb1N0cmluZyh1bnN1cHBvcnRlZE9iamVjdCk7CiAgICBTdHJpbmcgcHJlZml4OwogICAgaWYgKGNhdXNlICE9IG51bGwpIHsKICAgICAgcHJlZml4ID0gIkNvbnZlcnRpbmcgb2JqZWN0IHRvIGFuIGVuY29kYWJsZSBvYmplY3QgZmFpbGVkOiI7CiAgICB9IGVsc2UgewogICAgICBwcmVmaXggPSAiQ29udmVydGluZyBvYmplY3QgZGlkIG5vdCByZXR1cm4gYW4gZW5jb2RhYmxlIG9iamVjdDoiOwogICAgfQogICAgcmV0dXJuICIkcHJlZml4ICRzYWZlU3RyaW5nIjsKICB9Cn0KCi8vLyBSZXBvcnRzIHRoYXQgYW4gb2JqZWN0IGNvdWxkIG5vdCBiZSBzdHJpbmdpZmllZCBkdWUgdG8gY3ljbGljIHJlZmVyZW5jZXMuCi8vLwovLy8gQW4gb2JqZWN0IHRoYXQgcmVmZXJlbmNlcyBpdHNlbGYgY2Fubm90IGJlIHNlcmlhbGl6ZWQgYnkKLy8vIFtKc29uQ29kZWMuZW5jb2RlXS9bSnNvbkVuY29kZXIuY29udmVydF0uCi8vLyBXaGVuIHRoZSBjeWNsZSBpcyBkZXRlY3RlZCwgYSBbSnNvbkN5Y2xpY0Vycm9yXSBpcyB0aHJvd24uCmNsYXNzIEpzb25DeWNsaWNFcnJvciBleHRlbmRzIEpzb25VbnN1cHBvcnRlZE9iamVjdEVycm9yIHsKICAvLy8gVGhlIGZpcnN0IG9iamVjdCB0aGF0IHdhcyBkZXRlY3RlZCBhcyBwYXJ0IG9mIGEgY3ljbGUuCiAgSnNvbkN5Y2xpY0Vycm9yKE9iamVjdCBvYmplY3QpIDogc3VwZXIob2JqZWN0KTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiQ3ljbGljIGVycm9yIGluIEpTT04gc3RyaW5naWZ5IjsKfQoKLy8vIEFuIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBbSnNvbkNvZGVjXS4KLy8vCi8vLyBUaGlzIGluc3RhbmNlIHByb3ZpZGVzIGEgY29udmVuaWVudCBhY2Nlc3MgdG8gdGhlIG1vc3QgY29tbW9uIEpTT04KLy8vIHVzZSBjYXNlcy4KLy8vCi8vLyBFeGFtcGxlczoKLy8vCi8vLyAgICAgdmFyIGVuY29kZWQgPSBqc29uLmVuY29kZShbMSwgMiwgeyAiYSI6IG51bGwgfV0pOwovLy8gICAgIHZhciBkZWNvZGVkID0ganNvbi5kZWNvZGUoJ1siZm9vIiwgeyAiYmFyIjogNDk5IH1dJyk7Ci8vLwovLy8gVGhlIHRvcC1sZXZlbCBbanNvbkVuY29kZV0gYW5kIFtqc29uRGVjb2RlXSBmdW5jdGlvbnMgbWF5IGJlIHVzZWQgaW5zdGVhZCBpZgovLy8gYSBsb2NhbCB2YXJpYWJsZSBzaGFkb3dzIHRoZSBbanNvbl0gY29uc3RhbnQuCmNvbnN0IEpzb25Db2RlYyBqc29uID0gSnNvbkNvZGVjKCk7CgovLy8gQ29udmVydHMgW3ZhbHVlXSB0byBhIEpTT04gc3RyaW5nLgovLy8KLy8vIElmIHZhbHVlIGNvbnRhaW5zIG9iamVjdHMgdGhhdCBhcmUgbm90IGRpcmVjdGx5IGVuY29kYWJsZSB0byBhIEpTT04KLy8vIHN0cmluZyAoYSB2YWx1ZSB0aGF0IGlzIG5vdCBhIG51bWJlciwgYm9vbGVhbiwgc3RyaW5nLCBudWxsLCBsaXN0IG9yIGEgbWFwCi8vLyB3aXRoIHN0cmluZyBrZXlzKSwgdGhlIFt0b0VuY29kYWJsZV0gZnVuY3Rpb24gaXMgdXNlZCB0byBjb252ZXJ0IGl0IHRvIGFuCi8vLyBvYmplY3QgdGhhdCBtdXN0IGJlIGRpcmVjdGx5IGVuY29kYWJsZS4KLy8vCi8vLyBJZiBbdG9FbmNvZGFibGVdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZQovLy8gcmVzdWx0IG9mIGNhbGxpbmcgYC50b0pzb24oKWAgb24gdGhlIHVuZW5jb2RhYmxlIG9iamVjdC4KLy8vCi8vLyBTaG9ydGhhbmQgZm9yIFtqc29uLmVuY29kZV0uIFVzZWZ1bCBpZiBhIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgdGhlIGdsb2JhbAovLy8gW2pzb25dIGNvbnN0YW50LgpTdHJpbmcganNvbkVuY29kZShPYmplY3Qgb2JqZWN0LCB7T2JqZWN0IHRvRW5jb2RhYmxlKE9iamVjdCBub25FbmNvZGFibGUpfSkgPT4KICAgIGpzb24uZW5jb2RlKG9iamVjdCwgdG9FbmNvZGFibGU6IHRvRW5jb2RhYmxlKTsKCi8vLyBQYXJzZXMgdGhlIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgcmVzdWx0aW5nIEpzb24gb2JqZWN0LgovLy8KLy8vIFRoZSBvcHRpb25hbCBbcmV2aXZlcl0gZnVuY3Rpb24gaXMgY2FsbGVkIG9uY2UgZm9yIGVhY2ggb2JqZWN0IG9yIGxpc3QKLy8vIHByb3BlcnR5IHRoYXQgaGFzIGJlZW4gcGFyc2VkIGR1cmluZyBkZWNvZGluZy4gVGhlIGBrZXlgIGFyZ3VtZW50IGlzIGVpdGhlcgovLy8gdGhlIGludGVnZXIgbGlzdCBpbmRleCBmb3IgYSBsaXN0IHByb3BlcnR5LCB0aGUgc3RyaW5nIG1hcCBrZXkgZm9yIG9iamVjdAovLy8gcHJvcGVydGllcywgb3IgYG51bGxgIGZvciB0aGUgZmluYWwgcmVzdWx0LgovLy8KLy8vIFRoZSBkZWZhdWx0IFtyZXZpdmVyXSAod2hlbiBub3QgcHJvdmlkZWQpIGlzIHRoZSBpZGVudGl0eSBmdW5jdGlvbi4KLy8vCi8vLyBTaG9ydGhhbmQgZm9yIFtqc29uLmRlY29kZV0uIFVzZWZ1bCBpZiBhIGxvY2FsIHZhcmlhYmxlIHNoYWRvd3MgdGhlIGdsb2JhbAovLy8gW2pzb25dIGNvbnN0YW50LgpkeW5hbWljIGpzb25EZWNvZGUoU3RyaW5nIHNvdXJjZSwge09iamVjdCByZXZpdmVyKE9iamVjdCBrZXksIE9iamVjdCB2YWx1ZSl9KSA9PgogICAganNvbi5kZWNvZGUoc291cmNlLCByZXZpdmVyOiByZXZpdmVyKTsKCi8vLyBBIFtKc29uQ29kZWNdIGVuY29kZXMgSlNPTiBvYmplY3RzIHRvIHN0cmluZ3MgYW5kIGRlY29kZXMgc3RyaW5ncyB0bwovLy8gSlNPTiBvYmplY3RzLgovLy8KLy8vIEV4YW1wbGVzOgovLy8KLy8vICAgICB2YXIgZW5jb2RlZCA9IGpzb24uZW5jb2RlKFsxLCAyLCB7ICJhIjogbnVsbCB9XSk7Ci8vLyAgICAgdmFyIGRlY29kZWQgPSBqc29uLmRlY29kZSgnWyJmb28iLCB7ICJiYXIiOiA0OTkgfV0nKTsKY2xhc3MgSnNvbkNvZGVjIGV4dGVuZHMgQ29kZWM8T2JqZWN0LCBTdHJpbmc+IHsKICBmaW5hbCBGdW5jdGlvbihPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpIF9yZXZpdmVyOwogIGZpbmFsIEZ1bmN0aW9uKGR5bmFtaWMpIF90b0VuY29kYWJsZTsKCiAgLy8vIENyZWF0ZXMgYSBgSnNvbkNvZGVjYCB3aXRoIHRoZSBnaXZlbiByZXZpdmVyIGFuZCBlbmNvZGluZyBmdW5jdGlvbi4KICAvLy8KICAvLy8gVGhlIFtyZXZpdmVyXSBmdW5jdGlvbiBpcyBjYWxsZWQgZHVyaW5nIGRlY29kaW5nLiBJdCBpcyBpbnZva2VkIG9uY2UgZm9yCiAgLy8vIGVhY2ggb2JqZWN0IG9yIGxpc3QgcHJvcGVydHkgdGhhdCBoYXMgYmVlbiBwYXJzZWQuCiAgLy8vIFRoZSBga2V5YCBhcmd1bWVudCBpcyBlaXRoZXIgdGhlIGludGVnZXIgbGlzdCBpbmRleCBmb3IgYSBsaXN0IHByb3BlcnR5LAogIC8vLyB0aGUgc3RyaW5nIG1hcCBrZXkgZm9yIG9iamVjdCBwcm9wZXJ0aWVzLCBvciBgbnVsbGAgZm9yIHRoZSBmaW5hbCByZXN1bHQuCiAgLy8vCiAgLy8vIElmIFtyZXZpdmVyXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byByZXR1cm5pbmcgdGhlIHZhbHVlIGFyZ3VtZW50LgogIC8vLwogIC8vLyBUaGUgW3RvRW5jb2RhYmxlXSBmdW5jdGlvbiBpcyB1c2VkIGR1cmluZyBlbmNvZGluZy4gSXQgaXMgaW52b2tlZCBmb3IKICAvLy8gdmFsdWVzIHRoYXQgYXJlIG5vdCBkaXJlY3RseSBlbmNvZGFibGUgdG8gYSBzdHJpbmcgKGEgdmFsdWUgdGhhdCBpcyBub3QgYQogIC8vLyBudW1iZXIsIGJvb2xlYW4sIHN0cmluZywgbnVsbCwgbGlzdCBvciBhIG1hcCB3aXRoIHN0cmluZyBrZXlzKS4gVGhlCiAgLy8vIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGFuIG9iamVjdCB0aGF0IGlzIGRpcmVjdGx5IGVuY29kYWJsZS4gVGhlIGVsZW1lbnRzIG9mCiAgLy8vIGEgcmV0dXJuZWQgbGlzdCBhbmQgdmFsdWVzIG9mIGEgcmV0dXJuZWQgbWFwIGRvIG5vdCBuZWVkIHRvIGJlIGRpcmVjdGx5CiAgLy8vIGVuY29kYWJsZSwgYW5kIGlmIHRoZXkgYXJlbid0LCBgdG9FbmNvZGFibGVgIHdpbGwgYmUgdXNlZCBvbiB0aGVtIGFzIHdlbGwuCiAgLy8vIFBsZWFzZSBub3RpY2UgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byBjYXVzZSBhbiBpbmZpbml0ZSByZWN1cnNpdmUgcmVncmVzcwogIC8vLyBpbiB0aGlzIHdheSwgYnkgZWZmZWN0aXZlbHkgY3JlYXRpbmcgYW4gaW5maW5pdGUgZGF0YSBzdHJ1Y3R1cmUgdGhyb3VnaAogIC8vLyByZXBlYXRlZCBjYWxsIHRvIGB0b0VuY29kYWJsZWAuCiAgLy8vCiAgLy8vIElmIFt0b0VuY29kYWJsZV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlCiAgLy8vIHJlc3VsdCBvZiBjYWxsaW5nIGAudG9Kc29uKClgIG9uIHRoZSB1bmVuY29kYWJsZSBvYmplY3QuCiAgY29uc3QgSnNvbkNvZGVjKHtyZXZpdmVyKE9iamVjdCBrZXksIE9iamVjdCB2YWx1ZSksIHRvRW5jb2RhYmxlKHZhciBvYmplY3QpfSkKICAgICAgOiBfcmV2aXZlciA9IHJldml2ZXIsCiAgICAgICAgX3RvRW5jb2RhYmxlID0gdG9FbmNvZGFibGU7CgogIC8vLyBDcmVhdGVzIGEgYEpzb25Db2RlY2Agd2l0aCB0aGUgZ2l2ZW4gcmV2aXZlci4KICAvLy8KICAvLy8gVGhlIFtyZXZpdmVyXSBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBvYmplY3Qgb3IgbGlzdCBwcm9wZXJ0eQogIC8vLyB0aGF0IGhhcyBiZWVuIHBhcnNlZCBkdXJpbmcgZGVjb2RpbmcuIFRoZSBga2V5YCBhcmd1bWVudCBpcyBlaXRoZXIgdGhlCiAgLy8vIGludGVnZXIgbGlzdCBpbmRleCBmb3IgYSBsaXN0IHByb3BlcnR5LCB0aGUgc3RyaW5nIG1hcCBrZXkgZm9yIG9iamVjdAogIC8vLyBwcm9wZXJ0aWVzLCBvciBgbnVsbGAgZm9yIHRoZSBmaW5hbCByZXN1bHQuCiAgSnNvbkNvZGVjLndpdGhSZXZpdmVyKHJldml2ZXIoT2JqZWN0IGtleSwgT2JqZWN0IHZhbHVlKSkKICAgICAgOiB0aGlzKHJldml2ZXI6IHJldml2ZXIpOwoKICAvLy8gUGFyc2VzIHRoZSBzdHJpbmcgYW5kIHJldHVybnMgdGhlIHJlc3VsdGluZyBKc29uIG9iamVjdC4KICAvLy8KICAvLy8gVGhlIG9wdGlvbmFsIFtyZXZpdmVyXSBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBmb3IgZWFjaCBvYmplY3Qgb3IgbGlzdAogIC8vLyBwcm9wZXJ0eSB0aGF0IGhhcyBiZWVuIHBhcnNlZCBkdXJpbmcgZGVjb2RpbmcuIFRoZSBga2V5YCBhcmd1bWVudCBpcyBlaXRoZXIKICAvLy8gdGhlIGludGVnZXIgbGlzdCBpbmRleCBmb3IgYSBsaXN0IHByb3BlcnR5LCB0aGUgc3RyaW5nIG1hcCBrZXkgZm9yIG9iamVjdAogIC8vLyBwcm9wZXJ0aWVzLCBvciBgbnVsbGAgZm9yIHRoZSBmaW5hbCByZXN1bHQuCiAgLy8vCiAgLy8vIFRoZSBkZWZhdWx0IFtyZXZpdmVyXSAod2hlbiBub3QgcHJvdmlkZWQpIGlzIHRoZSBpZGVudGl0eSBmdW5jdGlvbi4KICBkeW5hbWljIGRlY29kZShTdHJpbmcgc291cmNlLCB7cmV2aXZlcihPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpfSkgewogICAgcmV2aXZlciA/Pz0gX3Jldml2ZXI7CiAgICBpZiAocmV2aXZlciA9PSBudWxsKSByZXR1cm4gZGVjb2Rlci5jb252ZXJ0KHNvdXJjZSk7CiAgICByZXR1cm4gSnNvbkRlY29kZXIocmV2aXZlcikuY29udmVydChzb3VyY2UpOwogIH0KCiAgLy8vIENvbnZlcnRzIFt2YWx1ZV0gdG8gYSBKU09OIHN0cmluZy4KICAvLy8KICAvLy8gSWYgdmFsdWUgY29udGFpbnMgb2JqZWN0cyB0aGF0IGFyZSBub3QgZGlyZWN0bHkgZW5jb2RhYmxlIHRvIGEgSlNPTgogIC8vLyBzdHJpbmcgKGEgdmFsdWUgdGhhdCBpcyBub3QgYSBudW1iZXIsIGJvb2xlYW4sIHN0cmluZywgbnVsbCwgbGlzdCBvciBhIG1hcAogIC8vLyB3aXRoIHN0cmluZyBrZXlzKSwgdGhlIFt0b0VuY29kYWJsZV0gZnVuY3Rpb24gaXMgdXNlZCB0byBjb252ZXJ0IGl0IHRvIGFuCiAgLy8vIG9iamVjdCB0aGF0IG11c3QgYmUgZGlyZWN0bHkgZW5jb2RhYmxlLgogIC8vLwogIC8vLyBJZiBbdG9FbmNvZGFibGVdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZQogIC8vLyByZXN1bHQgb2YgY2FsbGluZyBgLnRvSnNvbigpYCBvbiB0aGUgdW5lbmNvZGFibGUgb2JqZWN0LgogIFN0cmluZyBlbmNvZGUoT2JqZWN0IHZhbHVlLCB7dG9FbmNvZGFibGUob2JqZWN0KX0pIHsKICAgIHRvRW5jb2RhYmxlID8/PSBfdG9FbmNvZGFibGU7CiAgICBpZiAodG9FbmNvZGFibGUgPT0gbnVsbCkgcmV0dXJuIGVuY29kZXIuY29udmVydCh2YWx1ZSk7CiAgICByZXR1cm4gSnNvbkVuY29kZXIodG9FbmNvZGFibGUpLmNvbnZlcnQodmFsdWUpOwogIH0KCiAgSnNvbkVuY29kZXIgZ2V0IGVuY29kZXIgewogICAgaWYgKF90b0VuY29kYWJsZSA9PSBudWxsKSByZXR1cm4gY29uc3QgSnNvbkVuY29kZXIoKTsKICAgIHJldHVybiBKc29uRW5jb2RlcihfdG9FbmNvZGFibGUpOwogIH0KCiAgSnNvbkRlY29kZXIgZ2V0IGRlY29kZXIgewogICAgaWYgKF9yZXZpdmVyID09IG51bGwpIHJldHVybiBjb25zdCBKc29uRGVjb2RlcigpOwogICAgcmV0dXJuIEpzb25EZWNvZGVyKF9yZXZpdmVyKTsKICB9Cn0KCi8vLyBUaGlzIGNsYXNzIGNvbnZlcnRzIEpTT04gb2JqZWN0cyB0byBzdHJpbmdzLgpjbGFzcyBKc29uRW5jb2RlciBleHRlbmRzIENvbnZlcnRlcjxPYmplY3QsIFN0cmluZz4gewogIC8vLyBUaGUgc3RyaW5nIHVzZWQgZm9yIGluZGVudGlvbi4KICAvLy8KICAvLy8gV2hlbiBnZW5lcmF0aW5nIG11bHRpLWxpbmUgb3V0cHV0LCB0aGlzIHN0cmluZyBpcyBpbnNlcnRlZCBvbmNlIGF0IHRoZQogIC8vLyBiZWdpbm5pbmcgb2YgZWFjaCBpbmRlbnRlZCBsaW5lIGZvciBlYWNoIGxldmVsIG9mIGluZGVudGF0aW9uLgogIC8vLwogIC8vLyBJZiBgbnVsbGAsIHRoZSBvdXRwdXQgaXMgZW5jb2RlZCBhcyBhIHNpbmdsZSBsaW5lLgogIGZpbmFsIFN0cmluZyBpbmRlbnQ7CgogIC8vLyBGdW5jdGlvbiBjYWxsZWQgb24gbm9uLWVuY29kYWJsZSBvYmplY3RzIHRvIHJldHVybiBhIHJlcGxhY2VtZW50CiAgLy8vIGVuY29kYWJsZSBvYmplY3QgdGhhdCB3aWxsIGJlIGVuY29kZWQgaW4gdGhlIG9yaWduYWwncyBwbGFjZS4KICBmaW5hbCBGdW5jdGlvbihkeW5hbWljKSBfdG9FbmNvZGFibGU7CgogIC8vLyBDcmVhdGVzIGEgSlNPTiBlbmNvZGVyLgogIC8vLwogIC8vLyBUaGUgSlNPTiBlbmNvZGVyIGhhbmRsZXMgbnVtYmVycywgc3RyaW5ncywgYm9vbGVhbnMsIG51bGwsIGxpc3RzIGFuZAogIC8vLyBtYXBzIHdpdGggc3RyaW5nIGtleXMgZGlyZWN0bHkuCiAgLy8vCiAgLy8vIEFueSBvdGhlciBvYmplY3QgaXMgYXR0ZW1wdGVkIGNvbnZlcnRlZCBieSBbdG9FbmNvZGFibGVdIHRvIGFuCiAgLy8vIG9iamVjdCB0aGF0IGlzIG9mIG9uZSBvZiB0aGUgY29udmVydGlibGUgdHlwZXMuCiAgLy8vCiAgLy8vIElmIFt0b0VuY29kYWJsZV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gY2FsbGluZyBgLnRvSnNvbigpYCBvbgogIC8vLyB0aGUgb2JqZWN0LgogIGNvbnN0IEpzb25FbmNvZGVyKFt0b0VuY29kYWJsZShvYmplY3QpXSkKICAgICAgOiBpbmRlbnQgPSBudWxsLAogICAgICAgIF90b0VuY29kYWJsZSA9IHRvRW5jb2RhYmxlOwoKICAvLy8gQ3JlYXRlcyBhIEpTT04gZW5jb2RlciB0aGF0IGNyZWF0ZXMgbXVsdGktbGluZSBKU09OLgogIC8vLwogIC8vLyBUaGUgZW5jb2Rpbmcgb2YgZWxlbWVudHMgb2YgbGlzdHMgYW5kIG1hcHMgYXJlIGluZGVudGVkIGFuZCBwdXQgb24gc2VwYXJhdGUKICAvLy8gbGluZXMuIFRoZSBbaW5kZW50XSBzdHJpbmcgaXMgcHJlcGVuZGVkIHRvIHRoZXNlIGVsZW1lbnRzLCBvbmNlIGZvciBlYWNoCiAgLy8vIGxldmVsIG9mIGluZGVudGF0aW9uLgogIC8vLwogIC8vLyBJZiBbaW5kZW50XSBpcyBgbnVsbGAsIHRoZSBvdXRwdXQgaXMgZW5jb2RlZCBhcyBhIHNpbmdsZSBsaW5lLgogIC8vLwogIC8vLyBUaGUgSlNPTiBlbmNvZGVyIGhhbmRsZXMgbnVtYmVycywgc3RyaW5ncywgYm9vbGVhbnMsIG51bGwsIGxpc3RzIGFuZAogIC8vLyBtYXBzIHdpdGggc3RyaW5nIGtleXMgZGlyZWN0bHkuCiAgLy8vCiAgLy8vIEFueSBvdGhlciBvYmplY3QgaXMgYXR0ZW1wdGVkIGNvbnZlcnRlZCBieSBbdG9FbmNvZGFibGVdIHRvIGFuCiAgLy8vIG9iamVjdCB0aGF0IGlzIG9mIG9uZSBvZiB0aGUgY29udmVydGlibGUgdHlwZXMuCiAgLy8vCiAgLy8vIElmIFt0b0VuY29kYWJsZV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gY2FsbGluZyBgLnRvSnNvbigpYCBvbgogIC8vLyB0aGUgb2JqZWN0LgogIGNvbnN0IEpzb25FbmNvZGVyLndpdGhJbmRlbnQodGhpcy5pbmRlbnQsIFt0b0VuY29kYWJsZShvYmplY3QpXSkKICAgICAgOiBfdG9FbmNvZGFibGUgPSB0b0VuY29kYWJsZTsKCiAgLy8vIENvbnZlcnRzIFtvYmplY3RdIHRvIGEgSlNPTiBbU3RyaW5nXS4KICAvLy8KICAvLy8gRGlyZWN0bHkgc2VyaWFsaXphYmxlIHZhbHVlcyBhcmUgW251bV0sIFtTdHJpbmddLCBbYm9vbF0sIGFuZCBbTnVsbF0sIGFzCiAgLy8vIHdlbGwgYXMgc29tZSBbTGlzdF0gYW5kIFtNYXBdIHZhbHVlcy4gRm9yIFtMaXN0XSwgdGhlIGVsZW1lbnRzIG11c3QgYWxsIGJlCiAgLy8vIHNlcmlhbGl6YWJsZS4gRm9yIFtNYXBdLCB0aGUga2V5cyBtdXN0IGJlIFtTdHJpbmddIGFuZCB0aGUgdmFsdWVzIG11c3QgYmUKICAvLy8gc2VyaWFsaXphYmxlLgogIC8vLwogIC8vLyBJZiBhIHZhbHVlIG9mIGFueSBvdGhlciB0eXBlIGlzIGF0dGVtcHRlZCB0byBiZSBzZXJpYWxpemVkLCB0aGUKICAvLy8gYHRvRW5jb2RhYmxlYCBmdW5jdGlvbiBwcm92aWRlZCBpbiB0aGUgY29uc3RydWN0b3IgaXMgY2FsbGVkIHdpdGggdGhlIHZhbHVlCiAgLy8vIGFzIGFyZ3VtZW50LiBUaGUgcmVzdWx0LCB3aGljaCBtdXN0IGJlIGEgZGlyZWN0bHkgc2VyaWFsaXphYmxlIHZhbHVlLCBpcwogIC8vLyBzZXJpYWxpemVkIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLgogIC8vLwogIC8vLyBJZiB0aGUgY29udmVyc2lvbiB0aHJvd3MsIG9yIHJldHVybnMgYSB2YWx1ZSB0aGF0IGlzIG5vdCBkaXJlY3RseQogIC8vLyBzZXJpYWxpemFibGUsIGEgW0pzb25VbnN1cHBvcnRlZE9iamVjdEVycm9yXSBleGNlcHRpb24gaXMgdGhyb3duLgogIC8vLyBJZiB0aGUgY2FsbCB0aHJvd3MsIHRoZSBlcnJvciBpcyBjYXVnaHQgYW5kIHN0b3JlZCBpbiB0aGUKICAvLy8gW0pzb25VbnN1cHBvcnRlZE9iamVjdEVycm9yXSdzIFs6Y2F1c2U6XSBmaWVsZC4KICAvLy8KICAvLy8gSWYgYSBbTGlzdF0gb3IgW01hcF0gY29udGFpbnMgYSByZWZlcmVuY2UgdG8gaXRzZWxmLCBkaXJlY3RseSBvciB0aHJvdWdoCiAgLy8vIG90aGVyIGxpc3RzIG9yIG1hcHMsIGl0IGNhbm5vdCBiZSBzZXJpYWxpemVkIGFuZCBhIFtKc29uQ3ljbGljRXJyb3JdIGlzCiAgLy8vIHRocm93bi4KICAvLy8KICAvLy8gW29iamVjdF0gc2hvdWxkIG5vdCBjaGFuZ2UgZHVyaW5nIHNlcmlhbGl6YXRpb24uCiAgLy8vCiAgLy8vIElmIGFuIG9iamVjdCBpcyBzZXJpYWxpemVkIG1vcmUgdGhhbiBvbmNlLCBbY29udmVydF0gbWF5IGNhY2hlIHRoZSB0ZXh0CiAgLy8vIGZvciBpdC4gSW4gb3RoZXIgd29yZHMsIGlmIHRoZSBjb250ZW50IG9mIGFuIG9iamVjdCBjaGFuZ2VzIGFmdGVyIGl0IGlzCiAgLy8vIGZpcnN0IHNlcmlhbGl6ZWQsIHRoZSBuZXcgdmFsdWVzIG1heSBub3QgYmUgcmVmbGVjdGVkIGluIHRoZSByZXN1bHQuCiAgU3RyaW5nIGNvbnZlcnQoT2JqZWN0IG9iamVjdCkgPT4KICAgICAgX0pzb25TdHJpbmdTdHJpbmdpZmllci5zdHJpbmdpZnkob2JqZWN0LCBfdG9FbmNvZGFibGUsIGluZGVudCk7CgogIC8vLyBTdGFydHMgYSBjaHVua2VkIGNvbnZlcnNpb24uCiAgLy8vCiAgLy8vIFRoZSBjb252ZXJ0ZXIgd29ya3MgbW9yZSBlZmZpY2llbnRseSBpZiB0aGUgZ2l2ZW4gW3NpbmtdIGlzIGEKICAvLy8gW1N0cmluZ0NvbnZlcnNpb25TaW5rXS4KICAvLy8KICAvLy8gUmV0dXJucyBhIGNodW5rZWQtY29udmVyc2lvbiBzaW5rIHRoYXQgYWNjZXB0cyBhdCBtb3N0IG9uZSBvYmplY3QuIEl0IGlzCiAgLy8vIGFuIGVycm9yIHRvIGludm9rZSBgYWRkYCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgcmV0dXJuZWQgc2luay4KICBDaHVua2VkQ29udmVyc2lvblNpbms8T2JqZWN0PiBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICBpZiAoc2luayBpcyBfVXRmOEVuY29kZXJTaW5rKSB7CiAgICAgIHJldHVybiBfSnNvblV0ZjhFbmNvZGVyU2luaygKICAgICAgICAgIHNpbmsuX3NpbmssCiAgICAgICAgICBfdG9FbmNvZGFibGUsCiAgICAgICAgICBKc29uVXRmOEVuY29kZXIuX3V0ZjhFbmNvZGUoaW5kZW50KSwKICAgICAgICAgIEpzb25VdGY4RW5jb2Rlci5fZGVmYXVsdEJ1ZmZlclNpemUpOwogICAgfQogICAgcmV0dXJuIF9Kc29uRW5jb2RlclNpbmsoCiAgICAgICAgc2luayBpcyBTdHJpbmdDb252ZXJzaW9uU2luayA/IHNpbmsgOiBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tKHNpbmspLAogICAgICAgIF90b0VuY29kYWJsZSwKICAgICAgICBpbmRlbnQpOwogIH0KCiAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UgY2xhc3MncyBiaW5kLCB0byBwcm92aWRlIGEgYmV0dGVyIHR5cGUuCiAgU3RyZWFtPFN0cmluZz4gYmluZChTdHJlYW08T2JqZWN0PiBzdHJlYW0pID0+IHN1cGVyLmJpbmQoc3RyZWFtKTsKCiAgQ29udmVydGVyPE9iamVjdCwgVD4gZnVzZTxUPihDb252ZXJ0ZXI8U3RyaW5nLCBUPiBvdGhlcikgewogICAgaWYgKG90aGVyIGlzIFV0ZjhFbmNvZGVyICYmIFQgaXMgTGlzdDxpbnQ+KSB7CiAgICAgIC8vIFRoZSBpbnN0YW5jZSBjaGVjayBndWFyYW50ZWVzIHRoYXQgYFRgIGlzIChhIHN1YnR5cGUgb2YpIExpc3Q8aW50PiwKICAgICAgLy8gYnV0IHRoZSBzdGF0aWMgdHlwZSBzeXN0ZW0gZG9lc24ndCBrbm93IHRoYXQsIGFuZCBzbyB3ZSBjYXN0LgogICAgICAvLyBDYXN0IHRocm91Z2ggZHluYW1pYyB0byBrZWVwIHRoZSBjYXN0IGltcGxpY2l0IGZvciBidWlsZHMgdXNpbmcKICAgICAgLy8gdW5jaGVja2VkIGltcGxpY2l0IGNhc3RzLgogICAgICByZXR1cm4gSnNvblV0ZjhFbmNvZGVyKGluZGVudCwgX3RvRW5jb2RhYmxlKSBhcyBkeW5hbWljOwogICAgfQogICAgcmV0dXJuIHN1cGVyLmZ1c2U8VD4ob3RoZXIpOwogIH0KfQoKLy8vIEVuY29kZXIgdGhhdCBlbmNvZGVzIGEgc2luZ2xlIG9iamVjdCBhcyBhIFVURi04IGVuY29kZWQgSlNPTiBzdHJpbmcuCi8vLwovLy8gVGhpcyBlbmNvZGVyIHdvcmtzIGVxdWl2YWxlbnRseSB0byBmaXJzdCBjb252ZXJ0aW5nIHRoZSBvYmplY3QgdG8KLy8vIGEgSlNPTiBzdHJpbmcsIGFuZCB0aGVuIFVURi04IGVuY29kaW5nIHRoZSBzdHJpbmcsIGJ1dCB3aXRob3V0Ci8vLyBjcmVhdGluZyBhbiBpbnRlcm1lZGlhdGUgc3RyaW5nLgpjbGFzcyBKc29uVXRmOEVuY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8T2JqZWN0LCBMaXN0PGludD4+IHsKICAvLy8gRGVmYXVsdCBidWZmZXIgc2l6ZSB1c2VkIGJ5IHRoZSBKU09OLXRvLVVURi04IGVuY29kZXIuCiAgc3RhdGljIGNvbnN0IGludCBfZGVmYXVsdEJ1ZmZlclNpemUgPSAyNTY7CiAgQGRlcHJlY2F0ZWQKICBzdGF0aWMgY29uc3QgaW50IERFRkFVTFRfQlVGRkVSX1NJWkUgPSBfZGVmYXVsdEJ1ZmZlclNpemU7CgogIC8vLyBJbmRlbnRhdGlvbiB1c2VkIGluIHByZXR0eS1wcmludCBtb2RlLCBgbnVsbGAgaWYgbm90IHByZXR0eS4KICBmaW5hbCBMaXN0PGludD4gX2luZGVudDsKCiAgLy8vIEZ1bmN0aW9uIGNhbGxlZCB3aXRoIGVhY2ggdW4tZW5jb2RhYmxlIG9iamVjdCBlbmNvdW50ZXJlZC4KICBmaW5hbCBGdW5jdGlvbihkeW5hbWljKSBfdG9FbmNvZGFibGU7CgogIC8vLyBVVEYtOCBidWZmZXIgc2l6ZS4KICBmaW5hbCBpbnQgX2J1ZmZlclNpemU7CgogIC8vLyBDcmVhdGUgY29udmVydGVyLgogIC8vLwogIC8vLyBJZiBbaW5kZW50XSBpcyBub24tYG51bGxgLCB0aGUgY29udmVydGVyIGF0dGVtcHRzIHRvICJwcmV0dHktcHJpbnQiIHRoZQogIC8vLyBKU09OLCBhbmQgdXNlcyBgaW5kZW50YCBhcyB0aGUgaW5kZW50YXRpb24uIE90aGVyd2lzZSB0aGUgcmVzdWx0IGhhcyBubwogIC8vLyB3aGl0ZXNwYWNlIG91dHNpZGUgb2Ygc3RyaW5nIGxpdGVyYWxzLgogIC8vLyBJZiBgaW5kZW50YCBjb250YWlucyBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCB2YWxpZCBKU09OIHdoaXRlc3BhY2UKICAvLy8gY2hhcmFjdGVycywgdGhlIHJlc3VsdCB3aWxsIG5vdCBiZSB2YWxpZCBKU09OLiBKU09OIHdoaXRlc3BhY2UgY2hhcmFjdGVycwogIC8vLyBhcmUgc3BhY2UgKFUrMDAyMCksIHRhYiAoVSswMDA5KSwgbGluZSBmZWVkIChVKzAwMGEpIGFuZCBjYXJyaWFnZSByZXR1cm4KICAvLy8gKFUrMDAwZCkgKFtFQ01BCiAgLy8vIDQwNF0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL3B1YmxpY2F0aW9ucy9zdGFuZGFyZHMvRWNtYS00MDQuaHRtKSkuCiAgLy8vCiAgLy8vIFRoZSBbYnVmZmVyU2l6ZV0gaXMgdGhlIHNpemUgb2YgdGhlIGludGVybmFsIGJ1ZmZlcnMgdXNlZCB0byBjb2xsZWN0CiAgLy8vIFVURi04IGNvZGUgdW5pdHMuCiAgLy8vIElmIHVzaW5nIFtzdGFydENodW5rZWRDb252ZXJzaW9uXSwgaXQgd2lsbCBiZSB0aGUgc2l6ZSBvZiB0aGUgY2h1bmtzLgogIC8vLwogIC8vLyBUaGUgSlNPTiBlbmNvZGVyIGhhbmRsZXMgbnVtYmVycywgc3RyaW5ncywgYm9vbGVhbnMsIG51bGwsIGxpc3RzIGFuZCBtYXBzCiAgLy8vIGRpcmVjdGx5LgogIC8vLwogIC8vLyBBbnkgb3RoZXIgb2JqZWN0IGlzIGF0dGVtcHRlZCBjb252ZXJ0ZWQgYnkgW3RvRW5jb2RhYmxlXSB0byBhbiBvYmplY3QgdGhhdAogIC8vLyBpcyBvZiBvbmUgb2YgdGhlIGNvbnZlcnRpYmxlIHR5cGVzLgogIC8vLwogIC8vLyBJZiBbdG9FbmNvZGFibGVdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGNhbGxpbmcgYC50b0pzb24oKWAgb24gdGhlCiAgLy8vIG9iamVjdC4KICBKc29uVXRmOEVuY29kZXIoCiAgICAgIFtTdHJpbmcgaW5kZW50LCB0b0VuY29kYWJsZShvYmplY3QpLCBpbnQgYnVmZmVyU2l6ZSA9IF9kZWZhdWx0QnVmZmVyU2l6ZV0pCiAgICAgIDogX2luZGVudCA9IF91dGY4RW5jb2RlKGluZGVudCksCiAgICAgICAgX3RvRW5jb2RhYmxlID0gdG9FbmNvZGFibGUsCiAgICAgICAgX2J1ZmZlclNpemUgPSBidWZmZXJTaXplOwoKICBzdGF0aWMgTGlzdDxpbnQ+IF91dGY4RW5jb2RlKFN0cmluZyBzdHJpbmcpIHsKICAgIGlmIChzdHJpbmcgPT0gbnVsbCkgcmV0dXJuIG51bGw7CiAgICBpZiAoc3RyaW5nLmlzRW1wdHkpIHJldHVybiBVaW50OExpc3QoMCk7CiAgICBjaGVja0FzY2lpOgogICAgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChzdHJpbmcuY29kZVVuaXRBdChpKSA+PSAweDgwKSBicmVhayBjaGVja0FzY2lpOwogICAgICB9CiAgICAgIHJldHVybiBzdHJpbmcuY29kZVVuaXRzOwogICAgfQogICAgcmV0dXJuIHV0ZjguZW5jb2RlKHN0cmluZyk7CiAgfQoKICAvLy8gQ29udmVydCBbb2JqZWN0XSBpbnRvIFVURi04IGVuY29kZWQgSlNPTi4KICBMaXN0PGludD4gY29udmVydChPYmplY3Qgb2JqZWN0KSB7CiAgICB2YXIgYnl0ZXMgPSA8TGlzdDxpbnQ+PltdOwogICAgLy8gVGhlIGBzdHJpbmdpZnlgIGZ1bmN0aW9uIGFsd2F5cyBjb252ZXJ0cyBpbnRvIGNodW5rcy4KICAgIC8vIENvbGxlY3QgdGhlIGNodW5rcyBpbnRvIHRoZSBgYnl0ZXNgIGxpc3QsIHRoZW4gY29tYmluZSB0aGVtIGFmdGVyd2FyZHMuCiAgICB2b2lkIGFkZENodW5rKFVpbnQ4TGlzdCBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICAgIGlmIChzdGFydCA+IDAgfHwgZW5kIDwgY2h1bmsubGVuZ3RoKSB7CiAgICAgICAgdmFyIGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgICAgIGNodW5rID0KICAgICAgICAgICAgVWludDhMaXN0LnZpZXcoY2h1bmsuYnVmZmVyLCBjaHVuay5vZmZzZXRJbkJ5dGVzICsgc3RhcnQsIGxlbmd0aCk7CiAgICAgIH0KICAgICAgYnl0ZXMuYWRkKGNodW5rKTsKICAgIH0KCiAgICBfSnNvblV0ZjhTdHJpbmdpZmllci5zdHJpbmdpZnkoCiAgICAgICAgb2JqZWN0LCBfaW5kZW50LCBfdG9FbmNvZGFibGUsIF9idWZmZXJTaXplLCBhZGRDaHVuayk7CiAgICBpZiAoYnl0ZXMubGVuZ3RoID09IDEpIHJldHVybiBieXRlc1swXTsKICAgIHZhciBsZW5ndGggPSAwOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgewogICAgICBsZW5ndGggKz0gYnl0ZXNbaV0ubGVuZ3RoOwogICAgfQogICAgdmFyIHJlc3VsdCA9IFVpbnQ4TGlzdChsZW5ndGgpOwogICAgZm9yICh2YXIgaSA9IDAsIG9mZnNldCA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgewogICAgICB2YXIgYnl0ZUxpc3QgPSBieXRlc1tpXTsKICAgICAgaW50IGVuZCA9IG9mZnNldCArIGJ5dGVMaXN0Lmxlbmd0aDsKICAgICAgcmVzdWx0LnNldFJhbmdlKG9mZnNldCwgZW5kLCBieXRlTGlzdCk7CiAgICAgIG9mZnNldCA9IGVuZDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gU3RhcnQgYSBjaHVua2VkIGNvbnZlcnNpb24uCiAgLy8vCiAgLy8vIE9ubHkgb25lIG9iamVjdCBjYW4gYmUgcGFzc2VkIGludG8gdGhlIHJldHVybmVkIHNpbmsuCiAgLy8vCiAgLy8vIFRoZSBhcmd1bWVudCBbc2lua10gd2lsbCByZWNlaXZlIGJ5dGUgbGlzdHMgaW4gc2l6ZXMgZGVwZW5kaW5nIG9uIHRoZQogIC8vLyBgYnVmZmVyU2l6ZWAgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciB3aGVuIGNyZWF0aW5nIHRoaXMgZW5jb2Rlci4KICBDaHVua2VkQ29udmVyc2lvblNpbms8T2JqZWN0PiBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8TGlzdDxpbnQ+PiBzaW5rKSB7CiAgICBCeXRlQ29udmVyc2lvblNpbmsgYnl0ZVNpbms7CiAgICBpZiAoc2luayBpcyBCeXRlQ29udmVyc2lvblNpbmspIHsKICAgICAgYnl0ZVNpbmsgPSBzaW5rOwogICAgfSBlbHNlIHsKICAgICAgYnl0ZVNpbmsgPSBCeXRlQ29udmVyc2lvblNpbmsuZnJvbShzaW5rKTsKICAgIH0KICAgIHJldHVybiBfSnNvblV0ZjhFbmNvZGVyU2luayhieXRlU2luaywgX3RvRW5jb2RhYmxlLCBfaW5kZW50LCBfYnVmZmVyU2l6ZSk7CiAgfQoKICAvLyBPdmVycmlkZSB0aGUgYmFzZSBjbGFzcydzIGJpbmQsIHRvIHByb3ZpZGUgYSBiZXR0ZXIgdHlwZS4KICBTdHJlYW08TGlzdDxpbnQ+PiBiaW5kKFN0cmVhbTxPYmplY3Q+IHN0cmVhbSkgewogICAgcmV0dXJuIHN1cGVyLmJpbmQoc3RyZWFtKTsKICB9Cn0KCi8vLyBJbXBsZW1lbnRzIHRoZSBjaHVua2VkIGNvbnZlcnNpb24gZnJvbSBvYmplY3QgdG8gaXRzIEpTT04gcmVwcmVzZW50YXRpb24uCi8vLwovLy8gVGhlIHNpbmsgb25seSBhY2NlcHRzIG9uZSB2YWx1ZSwgYnV0IHdpbGwgcHJvZHVjZSBvdXRwdXQgaW4gYSBjaHVua2VkIHdheS4KY2xhc3MgX0pzb25FbmNvZGVyU2luayBleHRlbmRzIENodW5rZWRDb252ZXJzaW9uU2luazxPYmplY3Q+IHsKICBmaW5hbCBTdHJpbmcgX2luZGVudDsKICBmaW5hbCBGdW5jdGlvbihkeW5hbWljKSBfdG9FbmNvZGFibGU7CiAgZmluYWwgU3RyaW5nQ29udmVyc2lvblNpbmsgX3Npbms7CiAgYm9vbCBfaXNEb25lID0gZmFsc2U7CgogIF9Kc29uRW5jb2RlclNpbmsodGhpcy5fc2luaywgdGhpcy5fdG9FbmNvZGFibGUsIHRoaXMuX2luZGVudCk7CgogIC8vLyBFbmNvZGVzIHRoZSBnaXZlbiBvYmplY3QgW29dLgogIC8vLwogIC8vLyBJdCBpcyBhbiBlcnJvciB0byBpbnZva2UgdGhpcyBtZXRob2QgbW9yZSB0aGFuIG9uY2Ugb24gYW55IGluc3RhbmNlLiBXaGlsZQogIC8vLyB0aGlzIG1ha2VzIHRoZSBpbnB1dCBlZmZlY3RpdmVseSBub24tY2h1bmtlZCB0aGUgb3V0cHV0IHdpbGwgYmUgZ2VuZXJhdGVkCiAgLy8vIGluIGEgY2h1bmtlZCB3YXkuCiAgdm9pZCBhZGQoT2JqZWN0IG8pIHsKICAgIGlmIChfaXNEb25lKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoIk9ubHkgb25lIGNhbGwgdG8gYWRkIGFsbG93ZWQiKTsKICAgIH0KICAgIF9pc0RvbmUgPSB0cnVlOwogICAgdmFyIHN0cmluZ1NpbmsgPSBfc2luay5hc1N0cmluZ1NpbmsoKTsKICAgIF9Kc29uU3RyaW5nU3RyaW5naWZpZXIucHJpbnRPbihvLCBzdHJpbmdTaW5rLCBfdG9FbmNvZGFibGUsIF9pbmRlbnQpOwogICAgc3RyaW5nU2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsvKiBkbyBub3RoaW5nICovfQp9CgovLy8gU2luayByZXR1cm5lZCB3aGVuIHN0YXJ0aW5nIGEgY2h1bmtlZCBjb252ZXJzaW9uIGZyb20gb2JqZWN0IHRvIGJ5dGVzLgpjbGFzcyBfSnNvblV0ZjhFbmNvZGVyU2luayBleHRlbmRzIENodW5rZWRDb252ZXJzaW9uU2luazxPYmplY3Q+IHsKICAvLy8gVGhlIGJ5dGUgc2luayByZWNlaXZlaW5nIHRoZSBlbmNvZGVkIGNodW5rcy4KICBmaW5hbCBCeXRlQ29udmVyc2lvblNpbmsgX3Npbms7CiAgZmluYWwgTGlzdDxpbnQ+IF9pbmRlbnQ7CiAgZmluYWwgRnVuY3Rpb24oZHluYW1pYykgX3RvRW5jb2RhYmxlOwogIGZpbmFsIGludCBfYnVmZmVyU2l6ZTsKICBib29sIF9pc0RvbmUgPSBmYWxzZTsKICBfSnNvblV0ZjhFbmNvZGVyU2luaygKICAgICAgdGhpcy5fc2luaywgdGhpcy5fdG9FbmNvZGFibGUsIHRoaXMuX2luZGVudCwgdGhpcy5fYnVmZmVyU2l6ZSk7CgogIC8vLyBDYWxsYmFjayBjYWxsZWQgZm9yIGVhY2ggc2xpY2Ugb2YgcmVzdWx0IGJ5dGVzLgogIHZvaWQgX2FkZENodW5rKFVpbnQ4TGlzdCBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBfc2luay5hZGRTbGljZShjaHVuaywgc3RhcnQsIGVuZCwgZmFsc2UpOwogIH0KCiAgdm9pZCBhZGQoT2JqZWN0IG9iamVjdCkgewogICAgaWYgKF9pc0RvbmUpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcigiT25seSBvbmUgY2FsbCB0byBhZGQgYWxsb3dlZCIpOwogICAgfQogICAgX2lzRG9uZSA9IHRydWU7CiAgICBfSnNvblV0ZjhTdHJpbmdpZmllci5zdHJpbmdpZnkoCiAgICAgICAgb2JqZWN0LCBfaW5kZW50LCBfdG9FbmNvZGFibGUsIF9idWZmZXJTaXplLCBfYWRkQ2h1bmspOwogICAgX3NpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBpZiAoIV9pc0RvbmUpIHsKICAgICAgX2lzRG9uZSA9IHRydWU7CiAgICAgIF9zaW5rLmNsb3NlKCk7CiAgICB9CiAgfQp9CgovLy8gVGhpcyBjbGFzcyBwYXJzZXMgSlNPTiBzdHJpbmdzIGFuZCBidWlsZHMgdGhlIGNvcnJlc3BvbmRpbmcgb2JqZWN0cy4KY2xhc3MgSnNvbkRlY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8U3RyaW5nLCBPYmplY3Q+IHsKICBmaW5hbCBGdW5jdGlvbihPYmplY3Qga2V5LCBPYmplY3QgdmFsdWUpIF9yZXZpdmVyOwoKICAvLy8gQ29uc3RydWN0cyBhIG5ldyBKc29uRGVjb2Rlci4KICAvLy8KICAvLy8gVGhlIFtyZXZpdmVyXSBtYXkgYmUgYG51bGxgLgogIGNvbnN0IEpzb25EZWNvZGVyKFtyZXZpdmVyKE9iamVjdCBrZXksIE9iamVjdCB2YWx1ZSldKSA6IF9yZXZpdmVyID0gcmV2aXZlcjsKCiAgLy8vIENvbnZlcnRzIHRoZSBnaXZlbiBKU09OLXN0cmluZyBbaW5wdXRdIHRvIGl0cyBjb3JyZXNwb25kaW5nIG9iamVjdC4KICAvLy8KICAvLy8gUGFyc2VkIEpTT04gdmFsdWVzIGFyZSBvZiB0aGUgdHlwZXMgW251bV0sIFtTdHJpbmddLCBbYm9vbF0sIFtOdWxsXSwKICAvLy8gW0xpc3RdcyBvZiBwYXJzZWQgSlNPTiB2YWx1ZXMgb3IgW01hcF1zIGZyb20gW1N0cmluZ10gdG8gcGFyc2VkIEpTT04KICAvLy8gdmFsdWVzLgogIC8vLwogIC8vLyBJZiBgdGhpc2Agd2FzIGluaXRpYWxpemVkIHdpdGggYSByZXZpdmVyLCB0aGVuIHRoZSBwYXJzaW5nIG9wZXJhdGlvbgogIC8vLyBpbnZva2VzIHRoZSByZXZpdmVyIG9uIGV2ZXJ5IG9iamVjdCBvciBsaXN0IHByb3BlcnR5IHRoYXQgaGFzIGJlZW4gcGFyc2VkLgogIC8vLyBUaGUgYXJndW1lbnRzIGFyZSB0aGUgcHJvcGVydHkgbmFtZSAoW1N0cmluZ10pIG9yIGxpc3QgaW5kZXggKFtpbnRdKSwgYW5kCiAgLy8vIHRoZSB2YWx1ZSBpcyB0aGUgcGFyc2VkIHZhbHVlLiBUaGUgcmV0dXJuIHZhbHVlIG9mIHRoZSByZXZpdmVyIGlzIHVzZWQgYXMKICAvLy8gdGhlIHZhbHVlIG9mIHRoYXQgcHJvcGVydHkgaW5zdGVhZCB0aGUgcGFyc2VkIHZhbHVlLgogIC8vLwogIC8vLyBUaHJvd3MgW0Zvcm1hdEV4Y2VwdGlvbl0gaWYgdGhlIGlucHV0IGlzIG5vdCB2YWxpZCBKU09OIHRleHQuCiAgZHluYW1pYyBjb252ZXJ0KFN0cmluZyBpbnB1dCkgPT4gX3BhcnNlSnNvbihpbnB1dCwgX3Jldml2ZXIpOwoKICAvLy8gU3RhcnRzIGEgY29udmVyc2lvbiBmcm9tIGEgY2h1bmtlZCBKU09OIHN0cmluZyB0byBpdHMgY29ycmVzcG9uZGluZyBvYmplY3QuCiAgLy8vCiAgLy8vIFRoZSBvdXRwdXQgW3NpbmtdIHJlY2VpdmVzIGV4YWN0bHkgb25lIGRlY29kZWQgZWxlbWVudCB0aHJvdWdoIGBhZGRgLgogIGV4dGVybmFsIFN0cmluZ0NvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxPYmplY3Q+IHNpbmspOwoKICAvLyBPdmVycmlkZSB0aGUgYmFzZSBjbGFzcydzIGJpbmQsIHRvIHByb3ZpZGUgYSBiZXR0ZXIgdHlwZS4KICBTdHJlYW08T2JqZWN0PiBiaW5kKFN0cmVhbTxTdHJpbmc+IHN0cmVhbSkgPT4gc3VwZXIuYmluZChzdHJlYW0pOwp9CgovLyBJbnRlcm5hbCBvcHRpbWl6ZWQgSlNPTiBwYXJzaW5nIGltcGxlbWVudGF0aW9uLgpleHRlcm5hbCBfcGFyc2VKc29uKFN0cmluZyBzb3VyY2UsIHJldml2ZXIoa2V5LCB2YWx1ZSkpOwoKLy8gSW1wbGVtZW50YXRpb24gb2YgZW5jb2Rlci9zdHJpbmdpZmllci4KCmR5bmFtaWMgX2RlZmF1bHRUb0VuY29kYWJsZShkeW5hbWljIG9iamVjdCkgPT4gb2JqZWN0LnRvSnNvbigpOwoKLy8vIEpTT04gZW5jb2RlciB0aGF0IHRyYXZlcnNlcyBhbiBvYmplY3Qgc3RydWN0dXJlIGFuZCB3cml0ZXMgSlNPTiBzb3VyY2UuCi8vLwovLy8gVGhpcyBpcyBhbiBhYnN0cmFjdCBpbXBsZW1lbnRhdGlvbiB0aGF0IGRvZXNuJ3QgZGVjaWRlIG9uIHRoZSBvdXRwdXQKLy8vIGZvcm1hdCwgYnV0IHdyaXRlcyB0aGUgSlNPTiB0aHJvdWdoIGFic3RyYWN0IG1ldGhvZHMgbGlrZSBbd3JpdGVTdHJpbmddLgphYnN0cmFjdCBjbGFzcyBfSnNvblN0cmluZ2lmaWVyIHsKICAvLyBDaGFyYWN0ZXIgY29kZSBjb25zdGFudHMuCiAgc3RhdGljIGNvbnN0IGludCBiYWNrc3BhY2UgPSAweDA4OwogIHN0YXRpYyBjb25zdCBpbnQgdGFiID0gMHgwOTsKICBzdGF0aWMgY29uc3QgaW50IG5ld2xpbmUgPSAweDBhOwogIHN0YXRpYyBjb25zdCBpbnQgY2FycmlhZ2VSZXR1cm4gPSAweDBkOwogIHN0YXRpYyBjb25zdCBpbnQgZm9ybUZlZWQgPSAweDBjOwogIHN0YXRpYyBjb25zdCBpbnQgcXVvdGUgPSAweDIyOwogIHN0YXRpYyBjb25zdCBpbnQgY2hhcl8wID0gMHgzMDsKICBzdGF0aWMgY29uc3QgaW50IGJhY2tzbGFzaCA9IDB4NWM7CiAgc3RhdGljIGNvbnN0IGludCBjaGFyX2IgPSAweDYyOwogIHN0YXRpYyBjb25zdCBpbnQgY2hhcl9mID0gMHg2NjsKICBzdGF0aWMgY29uc3QgaW50IGNoYXJfbiA9IDB4NmU7CiAgc3RhdGljIGNvbnN0IGludCBjaGFyX3IgPSAweDcyOwogIHN0YXRpYyBjb25zdCBpbnQgY2hhcl90ID0gMHg3NDsKICBzdGF0aWMgY29uc3QgaW50IGNoYXJfdSA9IDB4NzU7CgogIC8vLyBMaXN0IG9mIG9iamVjdHMgY3VycmVudGx5IGJlaW5nIHRyYXZlcnNlZC4gVXNlZCB0byBkZXRlY3QgY3ljbGVzLgogIGZpbmFsIExpc3QgX3NlZW4gPSBbXTsKCiAgLy8vIEZ1bmN0aW9uIGNhbGxlZCBmb3IgZWFjaCB1bi1lbmNvZGFibGUgb2JqZWN0IGVuY291bnRlcmVkLgogIGZpbmFsIEZ1bmN0aW9uKGR5bmFtaWMpIF90b0VuY29kYWJsZTsKCiAgX0pzb25TdHJpbmdpZmllcih0b0VuY29kYWJsZShvKSkKICAgICAgOiBfdG9FbmNvZGFibGUgPSB0b0VuY29kYWJsZSA/PyBfZGVmYXVsdFRvRW5jb2RhYmxlOwoKICBTdHJpbmcgZ2V0IF9wYXJ0aWFsUmVzdWx0OwoKICAvLy8gQXBwZW5kIGEgc3RyaW5nIHRvIHRoZSBKU09OIG91dHB1dC4KICB2b2lkIHdyaXRlU3RyaW5nKFN0cmluZyBjaGFyYWN0ZXJzKTsKCiAgLy8vIEFwcGVuZCBwYXJ0IG9mIGEgc3RyaW5nIHRvIHRoZSBKU09OIG91dHB1dC4KICB2b2lkIHdyaXRlU3RyaW5nU2xpY2UoU3RyaW5nIGNoYXJhY3RlcnMsIGludCBzdGFydCwgaW50IGVuZCk7CgogIC8vLyBBcHBlbmQgYSBzaW5nbGUgY2hhcmFjdGVyLCBnaXZlbiBieSBpdHMgY29kZSBwb2ludCwgdG8gdGhlIEpTT04gb3V0cHV0LgogIHZvaWQgd3JpdGVDaGFyQ29kZShpbnQgY2hhckNvZGUpOwoKICAvLy8gV3JpdGUgYSBudW1iZXIgdG8gdGhlIEpTT04gb3V0cHV0LgogIHZvaWQgd3JpdGVOdW1iZXIobnVtIG51bWJlcik7CgogIC8vICgnMCcgKyB4KSBvciAoJ2EnICsgeCAtIDEwKQogIHN0YXRpYyBpbnQgaGV4RGlnaXQoaW50IHgpID0+IHggPCAxMCA/IDQ4ICsgeCA6IDg3ICsgeDsKCiAgLy8vIFdyaXRlLCBhbmQgc3VpdGFibHkgZXNjYXBlLCBhIHN0cmluZydzIGNvbnRlbnQgYXMgYSBKU09OIHN0cmluZyBsaXRlcmFsLgogIHZvaWQgd3JpdGVTdHJpbmdDb250ZW50KFN0cmluZyBzKSB7CiAgICB2YXIgb2Zmc2V0ID0gMDsKICAgIGZpbmFsIGxlbmd0aCA9IHMubGVuZ3RoOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YXIgY2hhckNvZGUgPSBzLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjaGFyQ29kZSA+IGJhY2tzbGFzaCkgY29udGludWU7CiAgICAgIGlmIChjaGFyQ29kZSA8IDMyKSB7CiAgICAgICAgaWYgKGkgPiBvZmZzZXQpIHdyaXRlU3RyaW5nU2xpY2Uocywgb2Zmc2V0LCBpKTsKICAgICAgICBvZmZzZXQgPSBpICsgMTsKICAgICAgICB3cml0ZUNoYXJDb2RlKGJhY2tzbGFzaCk7CiAgICAgICAgc3dpdGNoIChjaGFyQ29kZSkgewogICAgICAgICAgY2FzZSBiYWNrc3BhY2U6CiAgICAgICAgICAgIHdyaXRlQ2hhckNvZGUoY2hhcl9iKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIHRhYjoKICAgICAgICAgICAgd3JpdGVDaGFyQ29kZShjaGFyX3QpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgbmV3bGluZToKICAgICAgICAgICAgd3JpdGVDaGFyQ29kZShjaGFyX24pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgZm9ybUZlZWQ6CiAgICAgICAgICAgIHdyaXRlQ2hhckNvZGUoY2hhcl9mKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlIGNhcnJpYWdlUmV0dXJuOgogICAgICAgICAgICB3cml0ZUNoYXJDb2RlKGNoYXJfcik7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgd3JpdGVDaGFyQ29kZShjaGFyX3UpOwogICAgICAgICAgICB3cml0ZUNoYXJDb2RlKGNoYXJfMCk7CiAgICAgICAgICAgIHdyaXRlQ2hhckNvZGUoY2hhcl8wKTsKICAgICAgICAgICAgd3JpdGVDaGFyQ29kZShoZXhEaWdpdCgoY2hhckNvZGUgPj4gNCkgJiAweGYpKTsKICAgICAgICAgICAgd3JpdGVDaGFyQ29kZShoZXhEaWdpdChjaGFyQ29kZSAmIDB4ZikpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY2hhckNvZGUgPT0gcXVvdGUgfHwgY2hhckNvZGUgPT0gYmFja3NsYXNoKSB7CiAgICAgICAgaWYgKGkgPiBvZmZzZXQpIHdyaXRlU3RyaW5nU2xpY2Uocywgb2Zmc2V0LCBpKTsKICAgICAgICBvZmZzZXQgPSBpICsgMTsKICAgICAgICB3cml0ZUNoYXJDb2RlKGJhY2tzbGFzaCk7CiAgICAgICAgd3JpdGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgICAgIH0KICAgIH0KICAgIGlmIChvZmZzZXQgPT0gMCkgewogICAgICB3cml0ZVN0cmluZyhzKTsKICAgIH0gZWxzZSBpZiAob2Zmc2V0IDwgbGVuZ3RoKSB7CiAgICAgIHdyaXRlU3RyaW5nU2xpY2Uocywgb2Zmc2V0LCBsZW5ndGgpOwogICAgfQogIH0KCiAgLy8vIENoZWNrIGlmIGFuIGVuY291bnRlcmVkIG9iamVjdCBpcyBhbHJlYWR5IGJlaW5nIHRyYXZlcnNlZC4KICAvLy8KICAvLy8gUmVjb3JkcyB0aGUgb2JqZWN0IGlmIGl0IGlzbid0IGFscmVhZHkgc2Vlbi4gU2hvdWxkIGhhdmUgYSBtYXRjaGluZyBjYWxsIHRvCiAgLy8vIFtfcmVtb3ZlU2Vlbl0gd2hlbiB0aGUgb2JqZWN0IGlzIG5vIGxvbmdlciBiZWluZyB0cmF2ZXJzZWQuCiAgdm9pZCBfY2hlY2tDeWNsZShvYmplY3QpIHsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX3NlZW4ubGVuZ3RoOyBpKyspIHsKICAgICAgaWYgKGlkZW50aWNhbChvYmplY3QsIF9zZWVuW2ldKSkgewogICAgICAgIHRocm93IEpzb25DeWNsaWNFcnJvcihvYmplY3QpOwogICAgICB9CiAgICB9CiAgICBfc2Vlbi5hZGQob2JqZWN0KTsKICB9CgogIC8vLyBSZW1vdmUgW29iamVjdF0gZnJvbSB0aGUgbGlzdCBvZiBjdXJyZW50bHkgdHJhdmVyc2VkIG9iamVjdHMuCiAgLy8vCiAgLy8vIFNob3VsZCBiZSBjYWxsZWQgaW4gdGhlIG9wcG9zaXRlIG9yZGVyIG9mIHRoZSBtYXRjaGluZyBbX2NoZWNrQ3ljbGVdCiAgLy8vIGNhbGxzLgogIHZvaWQgX3JlbW92ZVNlZW4ob2JqZWN0KSB7CiAgICBhc3NlcnQoX3NlZW4uaXNOb3RFbXB0eSk7CiAgICBhc3NlcnQoaWRlbnRpY2FsKF9zZWVuLmxhc3QsIG9iamVjdCkpOwogICAgX3NlZW4ucmVtb3ZlTGFzdCgpOwogIH0KCiAgLy8vIFdyaXRlIGFuIG9iamVjdC4KICAvLy8KICAvLy8gSWYgW29iamVjdF0gaXNuJ3QgZGlyZWN0bHkgZW5jb2RhYmxlLCB0aGUgW190b0VuY29kYWJsZV0gZnVuY3Rpb24gZ2V0cyBvbmUKICAvLy8gY2hhbmNlIHRvIHJldHVybiBhIHJlcGxhY2VtZW50IHdoaWNoIGlzIGVuY29kYWJsZS4KICB2b2lkIHdyaXRlT2JqZWN0KG9iamVjdCkgewogICAgLy8gVHJpZXMgc3RyaW5naWZ5aW5nIG9iamVjdCBkaXJlY3RseS4gSWYgaXQncyBub3QgYSBzaW1wbGUgdmFsdWUsIExpc3Qgb3IKICAgIC8vIE1hcCwgY2FsbCB0b0pzb24oKSB0byBnZXQgYSBjdXN0b20gcmVwcmVzZW50YXRpb24gYW5kIHRyeSBzZXJpYWxpemluZwogICAgLy8gdGhhdC4KICAgIGlmICh3cml0ZUpzb25WYWx1ZShvYmplY3QpKSByZXR1cm47CiAgICBfY2hlY2tDeWNsZShvYmplY3QpOwogICAgdHJ5IHsKICAgICAgdmFyIGN1c3RvbUpzb24gPSBfdG9FbmNvZGFibGUob2JqZWN0KTsKICAgICAgaWYgKCF3cml0ZUpzb25WYWx1ZShjdXN0b21Kc29uKSkgewogICAgICAgIHRocm93IEpzb25VbnN1cHBvcnRlZE9iamVjdEVycm9yKG9iamVjdCwgcGFydGlhbFJlc3VsdDogX3BhcnRpYWxSZXN1bHQpOwogICAgICB9CiAgICAgIF9yZW1vdmVTZWVuKG9iamVjdCk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHRocm93IEpzb25VbnN1cHBvcnRlZE9iamVjdEVycm9yKG9iamVjdCwKICAgICAgICAgIGNhdXNlOiBlLCBwYXJ0aWFsUmVzdWx0OiBfcGFydGlhbFJlc3VsdCk7CiAgICB9CiAgfQoKICAvLy8gU2VyaWFsaXplIGEgW251bV0sIFtTdHJpbmddLCBbYm9vbF0sIFtOdWxsXSwgW0xpc3RdIG9yIFtNYXBdIHZhbHVlLgogIC8vLwogIC8vLyBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlIGlzIG9uZSBvZiB0aGVzZSB0eXBlcywgYW5kIGZhbHNlIGlmIG5vdC4KICAvLy8gSWYgYSB2YWx1ZSBpcyBib3RoIGEgW0xpc3RdIGFuZCBhIFtNYXBdLCBpdCdzIHNlcmlhbGl6ZWQgYXMgYSBbTGlzdF0uCiAgYm9vbCB3cml0ZUpzb25WYWx1ZShvYmplY3QpIHsKICAgIGlmIChvYmplY3QgaXMgbnVtKSB7CiAgICAgIGlmICghb2JqZWN0LmlzRmluaXRlKSByZXR1cm4gZmFsc2U7CiAgICAgIHdyaXRlTnVtYmVyKG9iamVjdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChpZGVudGljYWwob2JqZWN0LCB0cnVlKSkgewogICAgICB3cml0ZVN0cmluZygndHJ1ZScpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSBpZiAoaWRlbnRpY2FsKG9iamVjdCwgZmFsc2UpKSB7CiAgICAgIHdyaXRlU3RyaW5nKCdmYWxzZScpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSBpZiAob2JqZWN0ID09IG51bGwpIHsKICAgICAgd3JpdGVTdHJpbmcoJ251bGwnKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKG9iamVjdCBpcyBTdHJpbmcpIHsKICAgICAgd3JpdGVTdHJpbmcoJyInKTsKICAgICAgd3JpdGVTdHJpbmdDb250ZW50KG9iamVjdCk7CiAgICAgIHdyaXRlU3RyaW5nKCciJyk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIGlmIChvYmplY3QgaXMgTGlzdCkgewogICAgICBfY2hlY2tDeWNsZShvYmplY3QpOwogICAgICB3cml0ZUxpc3Qob2JqZWN0KTsKICAgICAgX3JlbW92ZVNlZW4ob2JqZWN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGVsc2UgaWYgKG9iamVjdCBpcyBNYXApIHsKICAgICAgX2NoZWNrQ3ljbGUob2JqZWN0KTsKICAgICAgLy8gd3JpdGVNYXAgY2FuIGZhaWwgaWYga2V5cyBhcmUgbm90IGFsbCBzdHJpbmdzLgogICAgICB2YXIgc3VjY2VzcyA9IHdyaXRlTWFwKG9iamVjdCk7CiAgICAgIF9yZW1vdmVTZWVuKG9iamVjdCk7CiAgICAgIHJldHVybiBzdWNjZXNzOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgLy8vIFNlcmlhbGl6ZSBhIFtMaXN0XS4KICB2b2lkIHdyaXRlTGlzdChMaXN0IGxpc3QpIHsKICAgIHdyaXRlU3RyaW5nKCdbJyk7CiAgICBpZiAobGlzdC5pc05vdEVtcHR5KSB7CiAgICAgIHdyaXRlT2JqZWN0KGxpc3RbMF0pOwogICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICB3cml0ZVN0cmluZygnLCcpOwogICAgICAgIHdyaXRlT2JqZWN0KGxpc3RbaV0pOwogICAgICB9CiAgICB9CiAgICB3cml0ZVN0cmluZygnXScpOwogIH0KCiAgLy8vIFNlcmlhbGl6ZSBhIFtNYXBdLgogIGJvb2wgd3JpdGVNYXAoTWFwIG1hcCkgewogICAgaWYgKG1hcC5pc0VtcHR5KSB7CiAgICAgIHdyaXRlU3RyaW5nKCJ7fSIpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHZhciBrZXlWYWx1ZUxpc3QgPSBMaXN0KG1hcC5sZW5ndGggKiAyKTsKICAgIHZhciBpID0gMDsKICAgIHZhciBhbGxTdHJpbmdLZXlzID0gdHJ1ZTsKICAgIG1hcC5mb3JFYWNoKChrZXksIHZhbHVlKSB7CiAgICAgIGlmIChrZXkgaXMhIFN0cmluZykgewogICAgICAgIGFsbFN0cmluZ0tleXMgPSBmYWxzZTsKICAgICAgfQogICAgICBrZXlWYWx1ZUxpc3RbaSsrXSA9IGtleTsKICAgICAga2V5VmFsdWVMaXN0W2krK10gPSB2YWx1ZTsKICAgIH0pOwogICAgaWYgKCFhbGxTdHJpbmdLZXlzKSByZXR1cm4gZmFsc2U7CiAgICB3cml0ZVN0cmluZygneycpOwogICAgdmFyIHNlcGFyYXRvciA9ICciJzsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5VmFsdWVMaXN0Lmxlbmd0aDsgaSArPSAyKSB7CiAgICAgIHdyaXRlU3RyaW5nKHNlcGFyYXRvcik7CiAgICAgIHNlcGFyYXRvciA9ICcsIic7CiAgICAgIHdyaXRlU3RyaW5nQ29udGVudChrZXlWYWx1ZUxpc3RbaV0pOwogICAgICB3cml0ZVN0cmluZygnIjonKTsKICAgICAgd3JpdGVPYmplY3Qoa2V5VmFsdWVMaXN0W2kgKyAxXSk7CiAgICB9CiAgICB3cml0ZVN0cmluZygnfScpOwogICAgcmV0dXJuIHRydWU7CiAgfQp9CgovLy8gQSBtb2RpZmljYXRpb24gb2YgW19Kc29uU3RyaW5naWZpZXJdIHdoaWNoIGluZGVudHMgdGhlIGNvbnRlbnRzIG9mIFtMaXN0XSBhbmQKLy8vIFtNYXBdIG9iamVjdHMgdXNpbmcgdGhlIHNwZWNpZmllZCBpbmRlbnQgdmFsdWUuCi8vLwovLy8gU3ViY2xhc3NlcyBzaG91bGQgaW1wbGVtZW50IFt3cml0ZUluZGVudGF0aW9uXS4KYWJzdHJhY3QgY2xhc3MgX0pzb25QcmV0dHlQcmludE1peGluIGltcGxlbWVudHMgX0pzb25TdHJpbmdpZmllciB7CiAgaW50IF9pbmRlbnRMZXZlbCA9IDA7CgogIC8vLyBBZGQgW2luZGVudExldmVsXSBpbmRlbnRhdGlvbnMgdG8gdGhlIEpTT04gb3V0cHV0LgogIHZvaWQgd3JpdGVJbmRlbnRhdGlvbihpbnQgaW5kZW50TGV2ZWwpOwoKICB2b2lkIHdyaXRlTGlzdChMaXN0IGxpc3QpIHsKICAgIGlmIChsaXN0LmlzRW1wdHkpIHsKICAgICAgd3JpdGVTdHJpbmcoJ1tdJyk7CiAgICB9IGVsc2UgewogICAgICB3cml0ZVN0cmluZygnW1xuJyk7CiAgICAgIF9pbmRlbnRMZXZlbCsrOwogICAgICB3cml0ZUluZGVudGF0aW9uKF9pbmRlbnRMZXZlbCk7CiAgICAgIHdyaXRlT2JqZWN0KGxpc3RbMF0pOwogICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICB3cml0ZVN0cmluZygnLFxuJyk7CiAgICAgICAgd3JpdGVJbmRlbnRhdGlvbihfaW5kZW50TGV2ZWwpOwogICAgICAgIHdyaXRlT2JqZWN0KGxpc3RbaV0pOwogICAgICB9CiAgICAgIHdyaXRlU3RyaW5nKCdcbicpOwogICAgICBfaW5kZW50TGV2ZWwtLTsKICAgICAgd3JpdGVJbmRlbnRhdGlvbihfaW5kZW50TGV2ZWwpOwogICAgICB3cml0ZVN0cmluZygnXScpOwogICAgfQogIH0KCiAgYm9vbCB3cml0ZU1hcChNYXAgbWFwKSB7CiAgICBpZiAobWFwLmlzRW1wdHkpIHsKICAgICAgd3JpdGVTdHJpbmcoInt9Iik7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgdmFyIGtleVZhbHVlTGlzdCA9IExpc3QobWFwLmxlbmd0aCAqIDIpOwogICAgdmFyIGkgPSAwOwogICAgdmFyIGFsbFN0cmluZ0tleXMgPSB0cnVlOwogICAgbWFwLmZvckVhY2goKGtleSwgdmFsdWUpIHsKICAgICAgaWYgKGtleSBpcyEgU3RyaW5nKSB7CiAgICAgICAgYWxsU3RyaW5nS2V5cyA9IGZhbHNlOwogICAgICB9CiAgICAgIGtleVZhbHVlTGlzdFtpKytdID0ga2V5OwogICAgICBrZXlWYWx1ZUxpc3RbaSsrXSA9IHZhbHVlOwogICAgfSk7CiAgICBpZiAoIWFsbFN0cmluZ0tleXMpIHJldHVybiBmYWxzZTsKICAgIHdyaXRlU3RyaW5nKCd7XG4nKTsKICAgIF9pbmRlbnRMZXZlbCsrOwogICAgdmFyIHNlcGFyYXRvciA9ICIiOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlWYWx1ZUxpc3QubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgd3JpdGVTdHJpbmcoc2VwYXJhdG9yKTsKICAgICAgc2VwYXJhdG9yID0gIixcbiI7CiAgICAgIHdyaXRlSW5kZW50YXRpb24oX2luZGVudExldmVsKTsKICAgICAgd3JpdGVTdHJpbmcoJyInKTsKICAgICAgd3JpdGVTdHJpbmdDb250ZW50KGtleVZhbHVlTGlzdFtpXSk7CiAgICAgIHdyaXRlU3RyaW5nKCciOiAnKTsKICAgICAgd3JpdGVPYmplY3Qoa2V5VmFsdWVMaXN0W2kgKyAxXSk7CiAgICB9CiAgICB3cml0ZVN0cmluZygnXG4nKTsKICAgIF9pbmRlbnRMZXZlbC0tOwogICAgd3JpdGVJbmRlbnRhdGlvbihfaW5kZW50TGV2ZWwpOwogICAgd3JpdGVTdHJpbmcoJ30nKTsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKLy8vIEEgc3BlY2lhbGl6YXRpb24gb2YgW19Kc29uU3RyaW5naWZpZXJdIHRoYXQgd3JpdGVzIGl0cyBKU09OIHRvIGEgc3RyaW5nLgpjbGFzcyBfSnNvblN0cmluZ1N0cmluZ2lmaWVyIGV4dGVuZHMgX0pzb25TdHJpbmdpZmllciB7CiAgZmluYWwgU3RyaW5nU2luayBfc2luazsKCiAgX0pzb25TdHJpbmdTdHJpbmdpZmllcih0aGlzLl9zaW5rLCBkeW5hbWljIEZ1bmN0aW9uKGR5bmFtaWMpIF90b0VuY29kYWJsZSkKICAgICAgOiBzdXBlcihfdG9FbmNvZGFibGUpOwoKICAvLy8gQ29udmVydCBvYmplY3QgdG8gYSBzdHJpbmcuCiAgLy8vCiAgLy8vIFRoZSBbdG9FbmNvZGFibGVdIGZ1bmN0aW9uIGlzIHVzZWQgdG8gY29udmVydCBub24tZW5jb2RhYmxlIG9iamVjdHMKICAvLy8gdG8gZW5jb2RhYmxlIG9uZXMuCiAgLy8vCiAgLy8vIElmIFtpbmRlbnRdIGlzIG5vdCBgbnVsbGAsIHRoZSByZXN1bHRpbmcgSlNPTiB3aWxsIGJlICJwcmV0dHktcHJpbnRlZCIKICAvLy8gd2l0aCBuZXdsaW5lcyBhbmQgaW5kZW50YXRpb24uIFRoZSBgaW5kZW50YCBzdHJpbmcgaXMgYWRkZWQgYXMgaW5kZW50YXRpb24KICAvLy8gZm9yIGVhY2ggaW5kZW50YXRpb24gbGV2ZWwuIEl0IHNob3VsZCBvbmx5IGNvbnRhaW4gdmFsaWQgSlNPTiB3aGl0ZXNwYWNlCiAgLy8vIGNoYXJhY3RlcnMgKHNwYWNlLCB0YWIsIGNhcnJpYWdlIHJldHVybiBvciBsaW5lIGZlZWQpLgogIHN0YXRpYyBTdHJpbmcgc3RyaW5naWZ5KG9iamVjdCwgdG9FbmNvZGFibGUobyksIFN0cmluZyBpbmRlbnQpIHsKICAgIHZhciBvdXRwdXQgPSBTdHJpbmdCdWZmZXIoKTsKICAgIHByaW50T24ob2JqZWN0LCBvdXRwdXQsIHRvRW5jb2RhYmxlLCBpbmRlbnQpOwogICAgcmV0dXJuIG91dHB1dC50b1N0cmluZygpOwogIH0KCiAgLy8vIENvbnZlcnQgb2JqZWN0IHRvIGEgc3RyaW5nLCBhbmQgd3JpdGUgdGhlIHJlc3VsdCB0byB0aGUgW291dHB1dF0gc2luay4KICAvLy8KICAvLy8gVGhlIHJlc3VsdCBpcyB3cml0dGVuIHBpZWNlbWFsbHkgdG8gdGhlIHNpbmsuCiAgc3RhdGljIHZvaWQgcHJpbnRPbigKICAgICAgb2JqZWN0LCBTdHJpbmdTaW5rIG91dHB1dCwgdG9FbmNvZGFibGUobyksIFN0cmluZyBpbmRlbnQpIHsKICAgIF9Kc29uU3RyaW5naWZpZXIgc3RyaW5naWZpZXI7CiAgICBpZiAoaW5kZW50ID09IG51bGwpIHsKICAgICAgc3RyaW5naWZpZXIgPSBfSnNvblN0cmluZ1N0cmluZ2lmaWVyKG91dHB1dCwgdG9FbmNvZGFibGUpOwogICAgfSBlbHNlIHsKICAgICAgc3RyaW5naWZpZXIgPSBfSnNvblN0cmluZ1N0cmluZ2lmaWVyUHJldHR5KG91dHB1dCwgdG9FbmNvZGFibGUsIGluZGVudCk7CiAgICB9CiAgICBzdHJpbmdpZmllci53cml0ZU9iamVjdChvYmplY3QpOwogIH0KCiAgU3RyaW5nIGdldCBfcGFydGlhbFJlc3VsdCA9PiBfc2luayBpcyBTdHJpbmdCdWZmZXIgPyBfc2luay50b1N0cmluZygpIDogbnVsbDsKCiAgdm9pZCB3cml0ZU51bWJlcihudW0gbnVtYmVyKSB7CiAgICBfc2luay53cml0ZShudW1iZXIudG9TdHJpbmcoKSk7CiAgfQoKICB2b2lkIHdyaXRlU3RyaW5nKFN0cmluZyBzdHJpbmcpIHsKICAgIF9zaW5rLndyaXRlKHN0cmluZyk7CiAgfQoKICB2b2lkIHdyaXRlU3RyaW5nU2xpY2UoU3RyaW5nIHN0cmluZywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBfc2luay53cml0ZShzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpKTsKICB9CgogIHZvaWQgd3JpdGVDaGFyQ29kZShpbnQgY2hhckNvZGUpIHsKICAgIF9zaW5rLndyaXRlQ2hhckNvZGUoY2hhckNvZGUpOwogIH0KfQoKY2xhc3MgX0pzb25TdHJpbmdTdHJpbmdpZmllclByZXR0eSBleHRlbmRzIF9Kc29uU3RyaW5nU3RyaW5naWZpZXIKICAgIHdpdGggX0pzb25QcmV0dHlQcmludE1peGluIHsKICBmaW5hbCBTdHJpbmcgX2luZGVudDsKCiAgX0pzb25TdHJpbmdTdHJpbmdpZmllclByZXR0eShTdHJpbmdTaW5rIHNpbmssIHRvRW5jb2RhYmxlKG8pLCB0aGlzLl9pbmRlbnQpCiAgICAgIDogc3VwZXIoc2luaywgdG9FbmNvZGFibGUpOwoKICB2b2lkIHdyaXRlSW5kZW50YXRpb24oaW50IGNvdW50KSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHdyaXRlU3RyaW5nKF9pbmRlbnQpOwogIH0KfQoKLy8vIFNwZWNpYWxpemF0aW9uIG9mIFtfSnNvblN0cmluZ2lmaWVyXSB0aGF0IHdyaXRlcyB0aGUgSlNPTiBhcyBVVEYtOC4KLy8vCi8vLyBUaGUgSlNPTiB0ZXh0IGlzIFVURi04IGVuY29kZWQgYW5kIHdyaXR0ZW4gdG8gW1VpbnQ4TGlzdF0gYnVmZmVycy4KLy8vIFRoZSBidWZmZXJzIGFyZSB0aGVuIHBhc3NlZCBiYWNrIHRvIGEgdXNlciBwcm92aWRlZCBjYWxsYmFjayBtZXRob2QuCmNsYXNzIF9Kc29uVXRmOFN0cmluZ2lmaWVyIGV4dGVuZHMgX0pzb25TdHJpbmdpZmllciB7CiAgZmluYWwgaW50IGJ1ZmZlclNpemU7CiAgZmluYWwgdm9pZCBGdW5jdGlvbihVaW50OExpc3QgbGlzdCwgaW50IHN0YXJ0LCBpbnQgZW5kKSBhZGRDaHVuazsKICBVaW50OExpc3QgYnVmZmVyOwogIGludCBpbmRleCA9IDA7CgogIF9Kc29uVXRmOFN0cmluZ2lmaWVyKHRvRW5jb2RhYmxlKG8pLCB0aGlzLmJ1ZmZlclNpemUsIHRoaXMuYWRkQ2h1bmspCiAgICAgIDogYnVmZmVyID0gVWludDhMaXN0KGJ1ZmZlclNpemUpLAogICAgICAgIHN1cGVyKHRvRW5jb2RhYmxlKTsKCiAgLy8vIENvbnZlcnQgW29iamVjdF0gdG8gVVRGLTggZW5jb2RlZCBKU09OLgogIC8vLwogIC8vLyBDYWxscyBbYWRkQ2h1bmtdIHdpdGggc2xpY2VzIG9mIFVURi04IGNvZGUgdW5pdHMuCiAgLy8vIFRoZXNlIHdpbGwgdHlwaWNhbGx5IGhhdmUgc2l6ZSBbYnVmZmVyU2l6ZV0sIGJ1dCBtYXkgYmUgc2hvcnRlci4KICAvLy8gVGhlIGJ1ZmZlcnMgYXJlIG5vdCByZXVzZWQsIHNvIHRoZSBbYWRkQ2h1bmtdIGNhbGwgbWF5IGtlZXAgYW5kIHJldXNlIHRoZQogIC8vLyBjaHVua3MuCiAgLy8vCiAgLy8vIElmIFtpbmRlbnRdIGlzIG5vbi1gbnVsbGAsIHRoZSByZXN1bHQgd2lsbCBiZSAicHJldHR5LXByaW50ZWQiIHdpdGggZXh0cmEKICAvLy8gbmV3bGluZXMgYW5kIGluZGVudGF0aW9uLCB1c2luZyBbaW5kZW50XSBhcyB0aGUgaW5kZW50YXRpb24uCiAgc3RhdGljIHZvaWQgc3RyaW5naWZ5KE9iamVjdCBvYmplY3QsIExpc3Q8aW50PiBpbmRlbnQsIHRvRW5jb2RhYmxlKG8pLAogICAgICBpbnQgYnVmZmVyU2l6ZSwgdm9pZCBhZGRDaHVuayhVaW50OExpc3QgY2h1bmssIGludCBzdGFydCwgaW50IGVuZCkpIHsKICAgIF9Kc29uVXRmOFN0cmluZ2lmaWVyIHN0cmluZ2lmaWVyOwogICAgaWYgKGluZGVudCAhPSBudWxsKSB7CiAgICAgIHN0cmluZ2lmaWVyID0KICAgICAgICAgIF9Kc29uVXRmOFN0cmluZ2lmaWVyUHJldHR5KHRvRW5jb2RhYmxlLCBpbmRlbnQsIGJ1ZmZlclNpemUsIGFkZENodW5rKTsKICAgIH0gZWxzZSB7CiAgICAgIHN0cmluZ2lmaWVyID0gX0pzb25VdGY4U3RyaW5naWZpZXIodG9FbmNvZGFibGUsIGJ1ZmZlclNpemUsIGFkZENodW5rKTsKICAgIH0KICAgIHN0cmluZ2lmaWVyLndyaXRlT2JqZWN0KG9iamVjdCk7CiAgICBzdHJpbmdpZmllci5mbHVzaCgpOwogIH0KCiAgLy8vIE11c3QgYmUgY2FsbGVkIGF0IHRoZSBlbmQgdG8gcHVzaCB0aGUgbGFzdCBjaHVuayB0byB0aGUgW2FkZENodW5rXQogIC8vLyBjYWxsYmFjay4KICB2b2lkIGZsdXNoKCkgewogICAgaWYgKGluZGV4ID4gMCkgewogICAgICBhZGRDaHVuayhidWZmZXIsIDAsIGluZGV4KTsKICAgIH0KICAgIGJ1ZmZlciA9IG51bGw7CiAgICBpbmRleCA9IDA7CiAgfQoKICBTdHJpbmcgZ2V0IF9wYXJ0aWFsUmVzdWx0ID0+IG51bGw7CgogIHZvaWQgd3JpdGVOdW1iZXIobnVtIG51bWJlcikgewogICAgd3JpdGVBc2NpaVN0cmluZyhudW1iZXIudG9TdHJpbmcoKSk7CiAgfQoKICAvLy8gV3JpdGUgYSBzdHJpbmcgdGhhdCBpcyBrbm93biB0byBub3QgaGF2ZSBub24tQVNDSUkgY2hhcmFjdGVycy4KICB2b2lkIHdyaXRlQXNjaWlTdHJpbmcoU3RyaW5nIHN0cmluZykgewogICAgLy8gVE9ETyhscm4pOiBPcHRpbWl6ZSBieSBjb3B5aW5nIGRpcmVjdGx5IGludG8gYnVmZmVyIGluc3RlYWQgb2YgZ29pbmcKICAgIC8vIHRocm91Z2ggd3JpdGVDaGFyQ29kZTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBjaGFyID0gc3RyaW5nLmNvZGVVbml0QXQoaSk7CiAgICAgIGFzc2VydChjaGFyIDw9IDB4N2YpOwogICAgICB3cml0ZUJ5dGUoY2hhcik7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlU3RyaW5nKFN0cmluZyBzdHJpbmcpIHsKICAgIHdyaXRlU3RyaW5nU2xpY2Uoc3RyaW5nLCAwLCBzdHJpbmcubGVuZ3RoKTsKICB9CgogIHZvaWQgd3JpdGVTdHJpbmdTbGljZShTdHJpbmcgc3RyaW5nLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIC8vIFRPRE8obHJuKTogT3B0aW1pemUgYnkgY29weWluZyBkaXJlY3RseSBpbnRvIGJ1ZmZlciBpbnN0ZWFkIG9mIGdvaW5nCiAgICAvLyB0aHJvdWdoIHdyaXRlQ2hhckNvZGUvd3JpdGVCeXRlLiBBc3N1bXB0aW9uIGlzIHRoZSBtb3N0IGNoYXJhY3RlcnMKICAgIC8vIGluIHN0YXJpbmdzIGFyZSBwbGFpbiBBU0NJSS4KICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBjaGFyID0gc3RyaW5nLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjaGFyIDw9IDB4N2YpIHsKICAgICAgICB3cml0ZUJ5dGUoY2hhcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKChjaGFyICYgMHhGQzAwKSA9PSAweEQ4MDAgJiYgaSArIDEgPCBlbmQpIHsKICAgICAgICAgIC8vIExlYWQgc3Vycm9nYXRlLgogICAgICAgICAgdmFyIG5leHRDaGFyID0gc3RyaW5nLmNvZGVVbml0QXQoaSArIDEpOwogICAgICAgICAgaWYgKChuZXh0Q2hhciAmIDB4RkMwMCkgPT0gMHhEQzAwKSB7CiAgICAgICAgICAgIC8vIFRhaWwgc3Vycm9nYXRlLgogICAgICAgICAgICBjaGFyID0gMHgxMDAwMCArICgoY2hhciAmIDB4M2ZmKSA8PCAxMCkgKyAobmV4dENoYXIgJiAweDNmZik7CiAgICAgICAgICAgIHdyaXRlRm91ckJ5dGVDaGFyQ29kZShjaGFyKTsKICAgICAgICAgICAgaSsrOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgd3JpdGVNdWx0aUJ5dGVDaGFyQ29kZShjaGFyKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgaWYgKGNoYXJDb2RlIDw9IDB4N2YpIHsKICAgICAgd3JpdGVCeXRlKGNoYXJDb2RlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgd3JpdGVNdWx0aUJ5dGVDaGFyQ29kZShjaGFyQ29kZSk7CiAgfQoKICB2b2lkIHdyaXRlTXVsdGlCeXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKSB7CiAgICBpZiAoY2hhckNvZGUgPD0gMHg3ZmYpIHsKICAgICAgd3JpdGVCeXRlKDB4QzAgfCAoY2hhckNvZGUgPj4gNikpOwogICAgICB3cml0ZUJ5dGUoMHg4MCB8IChjaGFyQ29kZSAmIDB4M2YpKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGNoYXJDb2RlIDw9IDB4ZmZmZikgewogICAgICB3cml0ZUJ5dGUoMHhFMCB8IChjaGFyQ29kZSA+PiAxMikpOwogICAgICB3cml0ZUJ5dGUoMHg4MCB8ICgoY2hhckNvZGUgPj4gNikgJiAweDNmKSk7CiAgICAgIHdyaXRlQnl0ZSgweDgwIHwgKGNoYXJDb2RlICYgMHgzZikpOwogICAgICByZXR1cm47CiAgICB9CiAgICB3cml0ZUZvdXJCeXRlQ2hhckNvZGUoY2hhckNvZGUpOwogIH0KCiAgdm9pZCB3cml0ZUZvdXJCeXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKSB7CiAgICBhc3NlcnQoY2hhckNvZGUgPD0gMHgxMGZmZmYpOwogICAgd3JpdGVCeXRlKDB4RjAgfCAoY2hhckNvZGUgPj4gMTgpKTsKICAgIHdyaXRlQnl0ZSgweDgwIHwgKChjaGFyQ29kZSA+PiAxMikgJiAweDNmKSk7CiAgICB3cml0ZUJ5dGUoMHg4MCB8ICgoY2hhckNvZGUgPj4gNikgJiAweDNmKSk7CiAgICB3cml0ZUJ5dGUoMHg4MCB8IChjaGFyQ29kZSAmIDB4M2YpKTsKICB9CgogIHZvaWQgd3JpdGVCeXRlKGludCBieXRlKSB7CiAgICBhc3NlcnQoYnl0ZSA8PSAweGZmKTsKICAgIGlmIChpbmRleCA9PSBidWZmZXIubGVuZ3RoKSB7CiAgICAgIGFkZENodW5rKGJ1ZmZlciwgMCwgaW5kZXgpOwogICAgICBidWZmZXIgPSBVaW50OExpc3QoYnVmZmVyU2l6ZSk7CiAgICAgIGluZGV4ID0gMDsKICAgIH0KICAgIGJ1ZmZlcltpbmRleCsrXSA9IGJ5dGU7CiAgfQp9CgovLy8gUHJldHR5LXByaW50aW5nIHZlcnNpb24gb2YgW19Kc29uVXRmOFN0cmluZ2lmaWVyXS4KY2xhc3MgX0pzb25VdGY4U3RyaW5naWZpZXJQcmV0dHkgZXh0ZW5kcyBfSnNvblV0ZjhTdHJpbmdpZmllcgogICAgd2l0aCBfSnNvblByZXR0eVByaW50TWl4aW4gewogIGZpbmFsIExpc3Q8aW50PiBpbmRlbnQ7CiAg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b24uZGFydC9vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29udmVydC9sYXRpbjEuZGFydJhZLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb252ZXJ0OwoKLy8vIEFuIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBbTGF0aW4xQ29kZWNdLgovLy8KLy8vIFRoaXMgaW5zdGFuY2UgcHJvdmlkZXMgYSBjb252ZW5pZW50IGFjY2VzcyB0byB0aGUgbW9zdCBjb21tb24gSVNPIExhdGluIDEKLy8vIHVzZSBjYXNlcy4KLy8vCi8vLyBFeGFtcGxlczoKLy8vIGBgYGRhcnQKLy8vIHZhciBlbmNvZGVkID0gbGF0aW4xLmVuY29kZSgiYmzDpWLDpnJncsO4ZCIpOwovLy8gdmFyIGRlY29kZWQgPSBsYXRpbjEuZGVjb2RlKFsweDYyLCAweDZjLCAweGU1LCAweDYyLCAweGU2LAovLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcyLCAweDY3LCAweDcyLCAweGY4LCAweDY0XSk7Ci8vLyBgYGAKY29uc3QgTGF0aW4xQ29kZWMgbGF0aW4xID0gTGF0aW4xQ29kZWMoKTsKCmNvbnN0IGludCBfbGF0aW4xTWFzayA9IDB4RkY7CgovLy8gQSBbTGF0aW4xQ29kZWNdIGVuY29kZXMgc3RyaW5ncyB0byBJU08gTGF0aW4tMSAoYWthIElTTy04ODU5LTEpIGJ5dGVzCi8vLyBhbmQgZGVjb2RlcyBMYXRpbi0xIGJ5dGVzIHRvIHN0cmluZ3MuCmNsYXNzIExhdGluMUNvZGVjIGV4dGVuZHMgRW5jb2RpbmcgewogIGZpbmFsIGJvb2wgX2FsbG93SW52YWxpZDsKCiAgLy8vIEluc3RhbnRpYXRlcyBhIG5ldyBbTGF0aW4xQ29kZWNdLgogIC8vLwogIC8vLyBJZiBbYWxsb3dJbnZhbGlkXSBpcyB0cnVlLCB0aGUgW2RlY29kZV0gbWV0aG9kIGFuZCB0aGUgY29udmVydGVyCiAgLy8vIHJldHVybmVkIGJ5IFtkZWNvZGVyXSB3aWxsIGRlZmF1bHQgdG8gYWxsb3dpbmcgaW52YWxpZCB2YWx1ZXMuIEludmFsaWQKICAvLy8gdmFsdWVzIGFyZSBkZWNvZGVkIGludG8gdGhlIFVuaWNvZGUgUmVwbGFjZW1lbnQgY2hhcmFjdGVyIChVK0ZGRkQpLgogIC8vLyBDYWxscyB0byB0aGUgW2RlY29kZV0gbWV0aG9kIGNhbiBvdmVycmlkZSB0aGlzIGRlZmF1bHQuCiAgLy8vCiAgLy8vIEVuY29kZXJzIHdpbGwgbm90IGFjY2VwdCBpbnZhbGlkIChub24gTGF0aW4tMSkgY2hhcmFjdGVycy4KICBjb25zdCBMYXRpbjFDb2RlYyh7Ym9vbCBhbGxvd0ludmFsaWQgPSBmYWxzZX0pIDogX2FsbG93SW52YWxpZCA9IGFsbG93SW52YWxpZDsKCiAgLy8vIFRoZSBuYW1lIG9mIHRoaXMgY29kZWMsICJpc28tODg1OS0xIi4KICBTdHJpbmcgZ2V0IG5hbWUgPT4gImlzby04ODU5LTEiOwoKICBVaW50OExpc3QgZW5jb2RlKFN0cmluZyBzb3VyY2UpID0+IGVuY29kZXIuY29udmVydChzb3VyY2UpOwoKICAvLy8gRGVjb2RlcyB0aGUgTGF0aW4tMSBbYnl0ZXNdIChhIGxpc3Qgb2YgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMpIHRvIHRoZQogIC8vLyBjb3JyZXNwb25kaW5nIHN0cmluZy4KICAvLy8KICAvLy8gSWYgW2J5dGVzXSBjb250YWlucyB2YWx1ZXMgdGhhdCBhcmUgbm90IGluIHRoZSByYW5nZSAwIC4uIDI1NSwgdGhlIGRlY29kZXIKICAvLy8gd2lsbCBldmVudHVhbGx5IHRocm93IGEgW0Zvcm1hdEV4Y2VwdGlvbl0uCiAgLy8vCiAgLy8vIElmIFthbGxvd0ludmFsaWRdIGlzIG5vdCBwcm92aWRlZCwgaXQgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIHVzZWQgdG8gY3JlYXRlCiAgLy8vIHRoaXMgW0xhdGluMUNvZGVjXS4KICBTdHJpbmcgZGVjb2RlKExpc3Q8aW50PiBieXRlcywge2Jvb2wgYWxsb3dJbnZhbGlkfSkgewogICAgYWxsb3dJbnZhbGlkID8/PSBfYWxsb3dJbnZhbGlkOwogICAgaWYgKGFsbG93SW52YWxpZCkgewogICAgICByZXR1cm4gY29uc3QgTGF0aW4xRGVjb2RlcihhbGxvd0ludmFsaWQ6IHRydWUpLmNvbnZlcnQoYnl0ZXMpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGNvbnN0IExhdGluMURlY29kZXIoYWxsb3dJbnZhbGlkOiBmYWxzZSkuY29udmVydChieXRlcyk7CiAgICB9CiAgfQoKICBMYXRpbjFFbmNvZGVyIGdldCBlbmNvZGVyID0+IGNvbnN0IExhdGluMUVuY29kZXIoKTsKCiAgTGF0aW4xRGVjb2RlciBnZXQgZGVjb2RlciA9PiBfYWxsb3dJbnZhbGlkCiAgICAgID8gY29uc3QgTGF0aW4xRGVjb2RlcihhbGxvd0ludmFsaWQ6IHRydWUpCiAgICAgIDogY29uc3QgTGF0aW4xRGVjb2RlcihhbGxvd0ludmFsaWQ6IGZhbHNlKTsKfQoKLy8vIFRoaXMgY2xhc3MgY29udmVydHMgc3RyaW5ncyBvZiBvbmx5IElTTyBMYXRpbi0xIGNoYXJhY3RlcnMgdG8gYnl0ZXMuCmNsYXNzIExhdGluMUVuY29kZXIgZXh0ZW5kcyBfVW5pY29kZVN1YnNldEVuY29kZXIgewogIGNvbnN0IExhdGluMUVuY29kZXIoKSA6IHN1cGVyKF9sYXRpbjFNYXNrKTsKfQoKLy8vIFRoaXMgY2xhc3MgY29udmVydHMgTGF0aW4tMSBieXRlcyAobGlzdHMgb2YgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMpCi8vLyB0byBhIHN0cmluZy4KY2xhc3MgTGF0aW4xRGVjb2RlciBleHRlbmRzIF9Vbmljb2RlU3Vic2V0RGVjb2RlciB7CiAgLy8vIEluc3RhbnRpYXRlcyBhIG5ldyBbTGF0aW4xRGVjb2Rlcl0uCiAgLy8vCiAgLy8vIFRoZSBvcHRpb25hbCBbYWxsb3dJbnZhbGlkXSBhcmd1bWVudCBkZWZpbmVzIGhvdyBbY29udmVydF0gZGVhbHMKICAvLy8gd2l0aCBpbnZhbGlkIGJ5dGVzLgogIC8vLwogIC8vLyBJZiBpdCBpcyBgdHJ1ZWAsIFtjb252ZXJ0XSByZXBsYWNlcyBpbnZhbGlkIGJ5dGVzIHdpdGggdGhlIFVuaWNvZGUKICAvLy8gUmVwbGFjZW1lbnQgY2hhcmFjdGVyIGBVK0ZGRkRgICjvv70pLgogIC8vLyBPdGhlcndpc2UgaXQgdGhyb3dzIGEgW0Zvcm1hdEV4Y2VwdGlvbl0uCiAgY29uc3QgTGF0aW4xRGVjb2Rlcih7Ym9vbCBhbGxvd0ludmFsaWQgPSBmYWxzZX0pCiAgICAgIDogc3VwZXIoYWxsb3dJbnZhbGlkLCBfbGF0aW4xTWFzayk7CgogIC8vLyBTdGFydHMgYSBjaHVua2VkIGNvbnZlcnNpb24uCiAgLy8vCiAgLy8vIFRoZSBjb252ZXJ0ZXIgd29ya3MgbW9yZSBlZmZpY2llbnRseSBpZiB0aGUgZ2l2ZW4gW3NpbmtdIGlzIGEKICAvLy8gW1N0cmluZ0NvbnZlcnNpb25TaW5rXS4KICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPFN0cmluZz4gc2luaykgewogICAgU3RyaW5nQ29udmVyc2lvblNpbmsgc3RyaW5nU2luazsKICAgIGlmIChzaW5rIGlzIFN0cmluZ0NvbnZlcnNpb25TaW5rKSB7CiAgICAgIHN0cmluZ1NpbmsgPSBzaW5rOwogICAgfSBlbHNlIHsKICAgICAgc3RyaW5nU2luayA9IFN0cmluZ0NvbnZlcnNpb25TaW5rLmZyb20oc2luayk7CiAgICB9CiAgICAvLyBUT0RPKGxybik6IFVzZSBzdHJpbmdTaW5rLmFzVXRmMTZTaW5rKCkgaWYgaXQgYmVjb21lcyBhdmFpbGFibGUuCiAgICBpZiAoIV9hbGxvd0ludmFsaWQpIHJldHVybiBfTGF0aW4xRGVjb2RlclNpbmsoc3RyaW5nU2luayk7CiAgICByZXR1cm4gX0xhdGluMUFsbG93SW52YWxpZERlY29kZXJTaW5rKHN0cmluZ1NpbmspOwogIH0KfQoKY2xhc3MgX0xhdGluMURlY29kZXJTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rQmFzZSB7CiAgU3RyaW5nQ29udmVyc2lvblNpbmsgX3Npbms7CiAgX0xhdGluMURlY29kZXJTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuY2xvc2UoKTsKICAgIF9zaW5rID0gbnVsbDsKICB9CgogIHZvaWQgYWRkKExpc3Q8aW50PiBzb3VyY2UpIHsKICAgIGFkZFNsaWNlKHNvdXJjZSwgMCwgc291cmNlLmxlbmd0aCwgZmFsc2UpOwogIH0KCiAgdm9pZCBfYWRkU2xpY2VUb1NpbmsoTGlzdDxpbnQ+IHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgLy8gSWYgX3Npbmsgd2FzIGEgVVRGLTE2IGNvbnZlcnNpb24gc2luaywganVzdCBhZGQgdGhlIHNsaWNlIGRpcmVjdGx5IHdpdGgKICAgIC8vIF9zaW5rLmFkZFNsaWNlKHNvdXJjZSwgc3RhcnQsIGVuZCwgaXNMYXN0KS4KICAgIC8vIFRoZSBjb2RlIGJlbG93IGlzIGFuIG1vZGVyYXRlbHkgc3R1cGlkIHdvcmthcm91bmQgdW50aWwgYSByZWFsCiAgICAvLyBzb2x1dGlvbiBjYW4gYmUgbWFkZS4KICAgIF9zaW5rLmFkZChTdHJpbmcuZnJvbUNoYXJDb2Rlcyhzb3VyY2UsIHN0YXJ0LCBlbmQpKTsKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBzb3VyY2UsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHNvdXJjZS5sZW5ndGgpOwogICAgaWYgKHN0YXJ0ID09IGVuZCkgcmV0dXJuOwogICAgaWYgKHNvdXJjZSBpcyEgVWludDhMaXN0KSB7CiAgICAgIC8vIExpc3QgbWF5IGNvbnRhaW4gdmFsdWUgb3V0c2lkZSBvZiB0aGUgMC4uMjU1IHJhbmdlLiBJZiBzbywgdGhyb3cuCiAgICAgIC8vIFRlY2huaWNhbGx5LCB3ZSBjb3VsZCBleGN1c2UgVWludDhDbGFtcGVkTGlzdCBhcyB3ZWxsLCBidXQgaXQgdW5saWtlbHkKICAgICAgLy8gdG8gYmUgcmVsZXZhbnQuCiAgICAgIF9jaGVja1ZhbGlkTGF0aW4xKHNvdXJjZSwgc3RhcnQsIGVuZCk7CiAgICB9CiAgICBfYWRkU2xpY2VUb1Npbmsoc291cmNlLCBzdGFydCwgZW5kLCBpc0xhc3QpOwogIH0KCiAgc3RhdGljIHZvaWQgX2NoZWNrVmFsaWRMYXRpbjEoTGlzdDxpbnQ+IHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICB2YXIgbWFzayA9IDA7CiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICBtYXNrIHw9IHNvdXJjZVtpXTsKICAgIH0KICAgIGlmIChtYXNrID49IDAgJiYgbWFzayA8PSBfbGF0aW4xTWFzaykgewogICAgICByZXR1cm47CiAgICB9CiAgICBfcmVwb3J0SW52YWxpZExhdGluMShzb3VyY2UsIHN0YXJ0LCBlbmQpOyAvLyBBbHdheXMgdGhyb3dzLgogIH0KCiAgc3RhdGljIHZvaWQgX3JlcG9ydEludmFsaWRMYXRpbjEoTGlzdDxpbnQ+IHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICAvLyBGaW5kIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgbm9uLUxhdGluLTEgY2hhcmFjdGVyIGNvZGUuCiAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICB2YXIgY2hhciA9IHNvdXJjZVtpXTsKICAgICAgaWYgKGNoYXIgPCAwIHx8IGNoYXIgPiBfbGF0aW4xTWFzaykgewogICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgIlNvdXJjZSBjb250YWlucyBub24tTGF0aW4tMSBjaGFyYWN0ZXJzLiIsIHNvdXJjZSwgaSk7CiAgICAgIH0KICAgIH0KICAgIC8vIFVucmVhY2hhYmxlIC0gd2Ugb25seSBjYWxsIHRoZSBmdW5jdGlvbiBpZiB0aGUgbG9vcCBhYm92ZSB0aHJvd3MuCiAgICBhc3NlcnQoZmFsc2UpOwogIH0KfQoKY2xhc3MgX0xhdGluMUFsbG93SW52YWxpZERlY29kZXJTaW5rIGV4dGVuZHMgX0xhdGluMURlY29kZXJTaW5rIHsKICBfTGF0aW4xQWxsb3dJbnZhbGlkRGVjb2RlclNpbmsoU3RyaW5nQ29udmVyc2lvblNpbmsgc2luaykgOiBzdXBlcihzaW5rKTsKCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gc291cmNlLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBzb3VyY2UubGVuZ3RoKTsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBjaGFyID0gc291cmNlW2ldOwogICAgICBpZiAoY2hhciA+IF9sYXRpbjFNYXNrIHx8IGNoYXIgPCAwKSB7CiAgICAgICAgaWYgKGkgPiBzdGFydCkgX2FkZFNsaWNlVG9TaW5rKHNvdXJjZSwgc3RhcnQsIGksIGZhbHNlKTsKICAgICAgICAvLyBBZGQgVVRGLTggZW5jb2Rpbmcgb2YgVStGRkZELgogICAgICAgIF9hZGRTbGljZVRvU2luayhjb25zdCBbMHhGRkZEXSwgMCwgMSwgZmFsc2UpOwogICAgICAgIHN0YXJ0ID0gaSArIDE7CiAgICAgIH0KICAgIH0KICAgIGlmIChzdGFydCA8IGVuZCkgewogICAgICBfYWRkU2xpY2VUb1Npbmsoc291cmNlLCBzdGFydCwgZW5kLCBpc0xhc3QpOwogICAgfQogICAgaWYgKGlzTGFzdCkgewogICAgICBjbG9zZSgpOwogICAgfQogIH0KfQqAuABOTjwBFgFEBE4PBA4MLz9BCCoBHgFKKiUcASgGR01KPgZBUQEsIwE+AU0cBlExBlEaOCQYRQ1GBgQBNgEtMDICAUk0LgIBSRE0KgZHGgZJKi8zKgEjBkQeQSUoGQ00Bkg/NwQCAToeIgERExIEAR8vBAFMTzNGHTkZBAFFQR4gS1AZLQYxBAFIEigZBiwOBkAEAUs/KBwsH0MIBkkTBAIBQksBRTsoHCxBKTYXCAYXMwYSDwYEAgEYZGFydDpjb252ZXJ0L2xhdGluMS5kYXJ0Nm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L2xpbmVfc3BsaXR0ZXIuZGFydJN8Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb252ZXJ0OwoKLy8gQ2hhcmFjdGVyIGNvbnN0YW50cy4KY29uc3QgaW50IF9MRiA9IDEwOwpjb25zdCBpbnQgX0NSID0gMTM7CgovLy8gQSBbU3RyZWFtVHJhbnNmb3JtZXJdIHRoYXQgc3BsaXRzIGEgW1N0cmluZ10gaW50byBpbmRpdmlkdWFsIGxpbmVzLgovLy8KLy8vIEEgbGluZSBpcyB0ZXJtaW5hdGVkIGJ5IGVpdGhlciBhIENSIChVKzAwMEQpLCBhIExGIChVKzAwMEEpLCBhCi8vLyBDUitMRiBzZXF1ZW5jZSAoRE9TIGxpbmUgZW5kaW5nKSwKLy8vIGFuZCBhIGZpbmFsIG5vbi1lbXB0eSBsaW5lIGNhbiBiZSBlbmRlZCBieSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuCi8vLwovLy8gVGhlIHJldHVybmVkIGxpbmVzIGRvIG5vdCBjb250YWluIHRoZSBsaW5lIHRlcm1pbmF0b3JzLgoKY2xhc3MgTGluZVNwbGl0dGVyIGV4dGVuZHMgU3RyZWFtVHJhbnNmb3JtZXJCYXNlPFN0cmluZywgU3RyaW5nPiB7CiAgY29uc3QgTGluZVNwbGl0dGVyKCk7CgogIC8vLyBTcGxpdCBbbGluZXNdIGludG8gaW5kaXZpZHVhbCBsaW5lcy4KICAvLy8KICAvLy8gSWYgW3N0YXJ0XSBhbmQgW2VuZF0gYXJlIHByb3ZpZGVkLCBvbmx5IHNwbGl0IHRoZSBjb250ZW50cyBvZgogIC8vLyBgbGluZXMuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpYC4gVGhlIFtzdGFydF0gYW5kIFtlbmRdIHZhbHVlcyBtdXN0CiAgLy8vIHNwZWNpZnkgYSB2YWxpZCBzdWItcmFuZ2Ugb2YgW2xpbmVzXQogIC8vLyAoYDAgPD0gc3RhcnQgPD0gZW5kIDw9IGxpbmVzLmxlbmd0aGApLgogIHN0YXRpYyBJdGVyYWJsZTxTdHJpbmc+IHNwbGl0KFN0cmluZyBsaW5lcywgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSBzeW5jKiB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBsaW5lcy5sZW5ndGgpOwogICAgdmFyIHNsaWNlU3RhcnQgPSBzdGFydDsKICAgIHZhciBjaGFyID0gMDsKICAgIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIHZhciBwcmV2aW91c0NoYXIgPSBjaGFyOwogICAgICBjaGFyID0gbGluZXMuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKGNoYXIgIT0gX0NSKSB7CiAgICAgICAgaWYgKGNoYXIgIT0gX0xGKSBjb250aW51ZTsKICAgICAgICBpZiAocHJldmlvdXNDaGFyID09IF9DUikgewogICAgICAgICAgc2xpY2VTdGFydCA9IGkgKyAxOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHlpZWxkIGxpbmVzLnN1YnN0cmluZyhzbGljZVN0YXJ0LCBpKTsKICAgICAgc2xpY2VTdGFydCA9IGkgKyAxOwogICAgfQogICAgaWYgKHNsaWNlU3RhcnQgPCBlbmQpIHsKICAgICAgeWllbGQgbGluZXMuc3Vic3RyaW5nKHNsaWNlU3RhcnQsIGVuZCk7CiAgICB9CiAgfQoKICBMaXN0PFN0cmluZz4gY29udmVydChTdHJpbmcgZGF0YSkgewogICAgdmFyIGxpbmVzID0gPFN0cmluZz5bXTsKICAgIHZhciBlbmQgPSBkYXRhLmxlbmd0aDsKICAgIHZhciBzbGljZVN0YXJ0ID0gMDsKICAgIHZhciBjaGFyID0gMDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIHByZXZpb3VzQ2hhciA9IGNoYXI7CiAgICAgIGNoYXIgPSBkYXRhLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjaGFyICE9IF9DUikgewogICAgICAgIGlmIChjaGFyICE9IF9MRikgY29udGludWU7CiAgICAgICAgaWYgKHByZXZpb3VzQ2hhciA9PSBfQ1IpIHsKICAgICAgICAgIHNsaWNlU3RhcnQgPSBpICsgMTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBsaW5lcy5hZGQoZGF0YS5zdWJzdHJpbmcoc2xpY2VTdGFydCwgaSkpOwogICAgICBzbGljZVN0YXJ0ID0gaSArIDE7CiAgICB9CiAgICBpZiAoc2xpY2VTdGFydCA8IGVuZCkgewogICAgICBsaW5lcy5hZGQoZGF0YS5zdWJzdHJpbmcoc2xpY2VTdGFydCwgZW5kKSk7CiAgICB9CiAgICByZXR1cm4gbGluZXM7CiAgfQoKICBTdHJpbmdDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8U3RyaW5nPiBzaW5rKSB7CiAgICByZXR1cm4gX0xpbmVTcGxpdHRlclNpbmsoCiAgICAgICAgc2luayBpcyBTdHJpbmdDb252ZXJzaW9uU2luayA/IHNpbmsgOiBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tKHNpbmspKTsKICB9CgogIFN0cmVhbTxTdHJpbmc+IGJpbmQoU3RyZWFtPFN0cmluZz4gc3RyZWFtKSB7CiAgICByZXR1cm4gU3RyZWFtPFN0cmluZz4uZXZlbnRUcmFuc2Zvcm1lZCgKICAgICAgICBzdHJlYW0sIChFdmVudFNpbms8U3RyaW5nPiBzaW5rKSA9PiBfTGluZVNwbGl0dGVyRXZlbnRTaW5rKHNpbmspKTsKICB9Cn0KCi8vIFRPRE8oZmxvaXRzY2gpOiBkZWFsIHdpdGggdXRmOC4KY2xhc3MgX0xpbmVTcGxpdHRlclNpbmsgZXh0ZW5kcyBTdHJpbmdDb252ZXJzaW9uU2lua0Jhc2UgewogIGZpbmFsIFN0cmluZ0NvbnZlcnNpb25TaW5rIF9zaW5rOwoKICAvLy8gVGhlIGNhcnJ5LW92ZXIgZnJvbSB0aGUgcHJldmlvdXMgY2h1bmsuCiAgLy8vCiAgLy8vIElmIHRoZSBwcmV2aW91cyBzbGljZSBlbmRlZCBpbiBhIGxpbmUgd2l0aG91dCBhIGxpbmUgdGVybWluYXRvciwKICAvLy8gdGhlbiB0aGUgbmV4dCBzbGljZSBtYXkgY29udGludWUgdGhlIGxpbmUuCiAgU3RyaW5nIF9jYXJyeTsKCiAgLy8vIFdoZXRoZXIgdG8gc2tpcCBhIGxlYWRpbmcgTEYgY2hhcmFjdGVyIGZyb20gdGhlIG5leHQgc2xpY2UuCiAgLy8vCiAgLy8vIElmIHRoZSBwcmV2aW91cyBzbGljZSBlbmRlZCBvbiBhIENSIGNoYXJhY3RlciwgYSBmb2xsb3dpbmcgTEYKICAvLy8gd291bGQgYmUgcGFydCBvZiB0aGUgc2FtZSBsaW5lIHRlcm1pbmF0aW9uLCBhbmQgc2hvdWxkIGJlIGlnbm9yZWQuCiAgLy8vCiAgLy8vIE9ubHkgYHRydWVgIHdoZW4gW19jYXJyeV0gaXMgYG51bGxgLgogIGJvb2wgX3NraXBMZWFkaW5nTEYgPSBmYWxzZTsKCiAgX0xpbmVTcGxpdHRlclNpbmsodGhpcy5fc2luayk7CgogIHZvaWQgYWRkU2xpY2UoU3RyaW5nIGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBjaHVuay5sZW5ndGgpOwogICAgLy8gSWYgdGhlIGNodW5rIGlzIGVtcHR5LCBpdCdzIHByb2JhYmx5IGJlY2F1c2UgaXQncyB0aGUgbGFzdCBvbmUuCiAgICAvLyBIYW5kbGUgdGhhdCBoZXJlLCBzbyB3ZSBrbm93IHRoZSByYW5nZSBpcyBub24tZW1wdHkgYmVsb3cuCiAgICBpZiAoc3RhcnQgPj0gZW5kKSB7CiAgICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChfY2FycnkgIT0gbnVsbCkgewogICAgICBhc3NlcnQoIV9za2lwTGVhZGluZ0xGKTsKICAgICAgY2h1bmsgPSBfY2FycnkgKyBjaHVuay5zdWJzdHJpbmcoc3RhcnQsIGVuZCk7CiAgICAgIHN0YXJ0ID0gMDsKICAgICAgZW5kID0gY2h1bmsubGVuZ3RoOwogICAgICBfY2FycnkgPSBudWxsOwogICAgfSBlbHNlIGlmIChfc2tpcExlYWRpbmdMRikgewogICAgICBpZiAoY2h1bmsuY29kZVVuaXRBdChzdGFydCkgPT0gX0xGKSB7CiAgICAgICAgc3RhcnQgKz0gMTsKICAgICAgfQogICAgICBfc2tpcExlYWRpbmdMRiA9IGZhbHNlOwogICAgfQogICAgX2FkZExpbmVzKGNodW5rLCBzdGFydCwgZW5kKTsKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgaWYgKF9jYXJyeSAhPSBudWxsKSB7CiAgICAgIF9zaW5rLmFkZChfY2FycnkpOwogICAgICBfY2FycnkgPSBudWxsOwogICAgfQogICAgX3NpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgX2FkZExpbmVzKFN0cmluZyBsaW5lcywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICB2YXIgc2xpY2VTdGFydCA9IHN0YXJ0OwogICAgdmFyIGNoYXIgPSAwOwogICAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgdmFyIHByZXZpb3VzQ2hhciA9IGNoYXI7CiAgICAgIGNoYXIgPSBsaW5lcy5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoY2hhciAhPSBfQ1IpIHsKICAgICAgICBpZiAoY2hhciAhPSBfTEYpIGNvbnRpbnVlOwogICAgICAgIGlmIChwcmV2aW91c0NoYXIgPT0gX0NSKSB7CiAgICAgICAgICBzbGljZVN0YXJ0ID0gaSArIDE7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgX3NpbmsuYWRkKGxpbmVzLnN1YnN0cmluZyhzbGljZVN0YXJ0LCBpKSk7CiAgICAgIHNsaWNlU3RhcnQgPSBpICsgMTsKICAgIH0KICAgIGlmIChzbGljZVN0YXJ0IDwgZW5kKSB7CiAgICAgIF9jYXJyeSA9IGxpbmVzLnN1YnN0cmluZyhzbGljZVN0YXJ0LCBlbmQpOwogICAgfSBlbHNlIHsKICAgICAgX3NraXBMZWFkaW5nTEYgPSAoY2hhciA9PSBfQ1IpOwogICAgfQogIH0KfQoKY2xhc3MgX0xpbmVTcGxpdHRlckV2ZW50U2luayBleHRlbmRzIF9MaW5lU3BsaXR0ZXJTaW5rCiAgICBpbXBsZW1lbnRzIEV2ZW50U2luazxTdHJpbmc+IHsKICBmaW5hbCBFdmVudFNpbms8U3RyaW5nPiBfZXZlbnRTaW5rOwoKICBfTGluZVNwbGl0dGVyRXZlbnRTaW5rKEV2ZW50U2luazxTdHJpbmc+IGV2ZW50U2luaykKICAgICAgOiBfZXZlbnRTaW5rID0gZXZlbnRTaW5rLAogICAgICAgIHN1cGVyKFN0cmluZ0NvbnZlcnNpb25TaW5rLmZyb20oZXZlbnRTaW5rKSk7CgogIHZvaWQgYWRkRXJyb3IoT2JqZWN0IG8sIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBfZXZlbnRTaW5rLmFkZEVycm9yKG8sIHN0YWNrVHJhY2UpOwogIH0KfQqArgBOTjwBFgEYFBQBSARDJkYEPAFDGAErBkRHKy1QQBwSKB8iGSMjHhQKCCwaBhwuBgQBJhwbGBIkHyEZIyMeFAoIMBoGHDIGEgQBQx5QBAEvLEsEAgEjOyQBLgZHMREBQgZESQYrHwEhAUFAR0IYGw4GGh80ERoVISwUCB4GIhkEAREaGRUGEwQBNRwSKB8iGSMjHhQKCDEaBhwxDSYGBAIBNyMmATYgNQE1KAQCAR9kYXJ0OmNvbnZlcnQvbGluZV9zcGxpdHRlci5kYXJ0Om9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb252ZXJ0L3N0cmluZ19jb252ZXJzaW9uLmRhcnSlgi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29udmVydDsKCi8vLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgY29udmVydGVycyB0bwovLy8gZWZmaWNpZW50bHkgdHJhbnNtaXQgU3RyaW5nIGRhdGEuCi8vLwovLy8gSW5zdGVhZCBvZiBsaW1pdGluZyB0aGUgaW50ZXJmYWNlIHRvIG9uZSBub24tY2h1bmtlZCBTdHJpbmcgaXQgYWNjZXB0cwovLy8gcGFydGlhbCBzdHJpbmdzIG9yIGNhbiBiZSB0cmFuc2Zvcm1lZCBpbnRvIGEgYnl0ZSBzaW5rIHRoYXQKLy8vIGFjY2VwdHMgVVRGLTggY29kZSB1bml0cy4KLy8vCi8vLyBUaGlzIGFic3RyYWN0IGNsYXNzIHdpbGwgbGlrZWx5IGdldCBtb3JlIG1ldGhvZHMgb3ZlciB0aW1lLiBJbXBsZW1lbnRlcnMgYXJlCi8vLyB1cmdlZCB0byBleHRlbmQgW1N0cmluZ0NvbnZlcnNpb25TaW5rQmFzZV0gb3IgdG8gbWl4IGluCi8vLyBbU3RyaW5nQ29udmVyc2lvblNpbmtNaXhpbl0sIHRvIGVuc3VyZSB0aGF0IHRoZWlyIGNsYXNzIGNvdmVycyB0aGUgbmV3bHkKLy8vIGFkZGVkIG1ldGhvZHMuCmFic3RyYWN0IGNsYXNzIFN0cmluZ0NvbnZlcnNpb25TaW5rIGV4dGVuZHMgQ2h1bmtlZENvbnZlcnNpb25TaW5rPFN0cmluZz4gewogIFN0cmluZ0NvbnZlcnNpb25TaW5rKCk7CiAgZmFjdG9yeSBTdHJpbmdDb252ZXJzaW9uU2luay53aXRoQ2FsbGJhY2sodm9pZCBjYWxsYmFjayhTdHJpbmcgYWNjdW11bGF0ZWQpKSA9CiAgICAgIF9TdHJpbmdDYWxsYmFja1Npbms7CiAgZmFjdG9yeSBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tKFNpbms8U3RyaW5nPiBzaW5rKSA9IF9TdHJpbmdBZGFwdGVyU2luazsKCiAgLy8vIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugd3JhcHBpbmcgdGhlIGdpdmVuIFtzaW5rXS4KICAvLy8KICAvLy8gRXZlcnkgc3RyaW5nIHRoYXQgaXMgYWRkZWQgdG8gdGhlIHJldHVybmVkIGluc3RhbmNlIGlzIGZvcndhcmRlZCB0bwogIC8vLyB0aGUgW3NpbmtdLiBUaGUgaW5zdGFuY2UgaXMgYWxsb3dlZCB0byBidWZmZXIgYW5kIGlzIG5vdCByZXF1aXJlZCB0bwogIC8vLyBmb3J3YXJkIGltbWVkaWF0ZWx5LgogIGZhY3RvcnkgU3RyaW5nQ29udmVyc2lvblNpbmsuZnJvbVN0cmluZ1NpbmsoU3RyaW5nU2luayBzaW5rKSA9CiAgICAgIF9TdHJpbmdTaW5rQ29udmVyc2lvblNpbms8U3RyaW5nU2luaz47CgogIC8vLyBBZGRzIHRoZSBuZXh0IFtjaHVua10gdG8gYHRoaXNgLgogIC8vLwogIC8vLyBBZGRzIHRoZSBzdWJzdHJpbmcgZGVmaW5lZCBieSBbc3RhcnRdIGFuZCBbZW5kXS1leGNsdXNpdmUgdG8gYHRoaXNgLgogIC8vLwogIC8vLyBJZiBbaXNMYXN0XSBpcyBgdHJ1ZWAgY2xvc2VzIGB0aGlzYC4KICB2b2lkIGFkZFNsaWNlKFN0cmluZyBjaHVuaywgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCk7CgogIC8vLyBSZXR1cm5zIGB0aGlzYCBhcyBhIHNpbmsgdGhhdCBhY2NlcHRzIFVURi04IGlucHV0LgogIC8vLwogIC8vLyBJZiB1c2VkLCB0aGlzIG1ldGhvZCBtdXN0IGJlIHRoZSBmaXJzdCBhbmQgb25seSBjYWxsIHRvIGB0aGlzYC4gSXQKICAvLy8gaW52YWxpZGF0ZXMgYHRoaXNgLiBBbGwgZnVydGhlciBvcGVyYXRpb25zIG11c3QgYmUgcGVyZm9ybWVkIG9uIHRoZSByZXN1bHQuCiAgQnl0ZUNvbnZlcnNpb25TaW5rIGFzVXRmOFNpbmsoYm9vbCBhbGxvd01hbGZvcm1lZCk7CiAgLy8gLSBhc1J1bmVTaW5rCiAgLy8gLSBhc0NvZGVVbml0c1NpbmsKCiAgLy8vIFJldHVybnMgYHRoaXNgIGFzIGEgW0Nsb3NhYmxlU3RyaW5nU2lua10uCiAgLy8vCiAgLy8vIElmIHVzZWQsIHRoaXMgbWV0aG9kIG11c3QgYmUgdGhlIGZpcnN0IGFuZCBvbmx5IGNhbGwgdG8gYHRoaXNgLiBJdAogIC8vLyBpbnZhbGlkYXRlcyBgdGhpc2AuIEFsbCBmdXJ0aGVyIG9wZXJhdGlvbnMgbXVzdCBiZSBwZXJmb3JtZWQgb24gdGhlIHJlc3VsdC4KICBDbG9zYWJsZVN0cmluZ1NpbmsgYXNTdHJpbmdTaW5rKCk7Cn0KCi8vLyBBIFtDbG9zYWJsZVN0cmluZ1NpbmtdIGV4dGVuZHMgdGhlIFtTdHJpbmdTaW5rXSBpbnRlcmZhY2UgYnkgYWRkaW5nIGEKLy8vIGBjbG9zZWAgbWV0aG9kLgphYnN0cmFjdCBjbGFzcyBDbG9zYWJsZVN0cmluZ1NpbmsgZXh0ZW5kcyBTdHJpbmdTaW5rIHsKICAvLy8gQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBjb21iaW5pbmcgYSBbU3RyaW5nU2lua10gW3NpbmtdIGFuZCBhIGNhbGxiYWNrCiAgLy8vIFtvbkNsb3NlXSB3aGljaCBpcyBpbnZva2VkIHdoZW4gdGhlIHJldHVybmVkIGluc3RhbmNlIGlzIGNsb3NlZC4KICBmYWN0b3J5IENsb3NhYmxlU3RyaW5nU2luay5mcm9tU3RyaW5nU2luayhTdHJpbmdTaW5rIHNpbmssIHZvaWQgb25DbG9zZSgpKSA9CiAgICAgIF9DbG9zYWJsZVN0cmluZ1Npbms7CgogIC8vLyBDbG9zZXMgYHRoaXNgIGFuZCBmbHVzaGVzIGFueSBvdXRzdGFuZGluZyBkYXRhLgogIHZvaWQgY2xvc2UoKTsKfQoKLy8vIFRoaXMgY2xhc3Mgd3JhcHMgYW4gZXhpc3RpbmcgW1N0cmluZ1NpbmtdIGFuZCBpbnZva2VzIGEKLy8vIGNsb3N1cmUgd2hlbiBbY2xvc2VdIGlzIGludm9rZWQuCmNsYXNzIF9DbG9zYWJsZVN0cmluZ1NpbmsgaW1wbGVtZW50cyBDbG9zYWJsZVN0cmluZ1NpbmsgewogIGZpbmFsIHZvaWQgRnVuY3Rpb24oKSBfY2FsbGJhY2s7CiAgZmluYWwgU3RyaW5nU2luayBfc2luazsKCiAgX0Nsb3NhYmxlU3RyaW5nU2luayh0aGlzLl9zaW5rLCB0aGlzLl9jYWxsYmFjayk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfY2FsbGJhY2soKTsKICB9CgogIHZvaWQgd3JpdGVDaGFyQ29kZShpbnQgY2hhckNvZGUpIHsKICAgIF9zaW5rLndyaXRlQ2hhckNvZGUoY2hhckNvZGUpOwogIH0KCiAgdm9pZCB3cml0ZShPYmplY3QgbykgewogICAgX3Npbmsud3JpdGUobyk7CiAgfQoKICB2b2lkIHdyaXRlbG4oW09iamVjdCBvID0gIiJdKSB7CiAgICBfc2luay53cml0ZWxuKG8pOwogIH0KCiAgdm9pZCB3cml0ZUFsbChJdGVyYWJsZSBvYmplY3RzLCBbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgX3Npbmsud3JpdGVBbGwob2JqZWN0cywgc2VwYXJhdG9yKTsKICB9Cn0KCi8vLyBUaGlzIGNsYXNzIHdyYXBzIGFuIGV4aXN0aW5nIFtTdHJpbmdDb252ZXJzaW9uU2lua10gYW5kIGV4cG9zZXMgYQovLy8gW0Nsb3NhYmxlU3RyaW5nU2lua10gaW50ZXJmYWNlLiBUaGUgd3JhcHBlZCBzaW5rIG9ubHkgbmVlZHMgdG8gaW1wbGVtZW50Ci8vLyBgYWRkYCBhbmQgYGNsb3NlYC4KLy8gVE9ETyhmbG9pdHNjaCk6IG1ha2UgdGhpcyBjbGFzcyBwdWJsaWM/CmNsYXNzIF9TdHJpbmdDb252ZXJzaW9uU2lua0FzU3RyaW5nU2lua0FkYXB0ZXIgaW1wbGVtZW50cyBDbG9zYWJsZVN0cmluZ1NpbmsgewogIHN0YXRpYyBjb25zdCBfTUlOX1NUUklOR19TSVpFID0gMTY7CgogIFN0cmluZ0J1ZmZlciBfYnVmZmVyOwogIFN0cmluZ0NvbnZlcnNpb25TaW5rIF9jaHVua2VkU2luazsKCiAgX1N0cmluZ0NvbnZlcnNpb25TaW5rQXNTdHJpbmdTaW5rQWRhcHRlcih0aGlzLl9jaHVua2VkU2luaykKICAgICAgOiBfYnVmZmVyID0gU3RyaW5nQnVmZmVyKCk7CgogIHZvaWQgY2xvc2UoKSB7CiAgICBpZiAoX2J1ZmZlci5pc05vdEVtcHR5KSBfZmx1c2goKTsKICAgIF9jaHVua2VkU2luay5jbG9zZSgpOwogIH0KCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgX2J1ZmZlci53cml0ZUNoYXJDb2RlKGNoYXJDb2RlKTsKICAgIGlmIChfYnVmZmVyLmxlbmd0aCA+IF9NSU5fU1RSSU5HX1NJWkUpIF9mbHVzaCgpOwogIH0KCiAgdm9pZCB3cml0ZShPYmplY3QgbykgewogICAgaWYgKF9idWZmZXIuaXNOb3RFbXB0eSkgX2ZsdXNoKCk7CiAgICBfY2h1bmtlZFNpbmsuYWRkKG8udG9TdHJpbmcoKSk7CiAgfQoKICB2b2lkIHdyaXRlbG4oW09iamVjdCBvID0gIiJdKSB7CiAgICBfYnVmZmVyLndyaXRlbG4obyk7CiAgICBpZiAoX2J1ZmZlci5sZW5ndGggPiBfTUlOX1NUUklOR19TSVpFKSBfZmx1c2goKTsKICB9CgogIHZvaWQgd3JpdGVBbGwoSXRlcmFibGUgb2JqZWN0cywgW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pIHsKICAgIGlmIChfYnVmZmVyLmlzTm90RW1wdHkpIF9mbHVzaCgpOwogICAgdmFyIGl0ZXJhdG9yID0gb2JqZWN0cy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuOwogICAgaWYgKHNlcGFyYXRvci5pc0VtcHR5KSB7CiAgICAgIGRvIHsKICAgICAgICBfY2h1bmtlZFNpbmsuYWRkKGl0ZXJhdG9yLmN1cnJlbnQudG9TdHJpbmcoKSk7CiAgICAgIH0gd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpOwogICAgfSBlbHNlIHsKICAgICAgX2NodW5rZWRTaW5rLmFkZChpdGVyYXRvci5jdXJyZW50LnRvU3RyaW5nKCkpOwogICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgIHdyaXRlKHNlcGFyYXRvcik7CiAgICAgICAgX2NodW5rZWRTaW5rLmFkZChpdGVyYXRvci5jdXJyZW50LnRvU3RyaW5nKCkpOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIF9mbHVzaCgpIHsKICAgIHZhciBhY2N1bXVsYXRlZCA9IF9idWZmZXIudG9TdHJpbmcoKTsKICAgIF9idWZmZXIuY2xlYXIoKTsKICAgIF9jaHVua2VkU2luay5hZGQoYWNjdW11bGF0ZWQpOwogIH0KfQoKLy8vIFRoaXMgY2xhc3MgcHJvdmlkZXMgYSBiYXNlLWNsYXNzIGZvciBjb252ZXJ0ZXJzIHRoYXQgbmVlZCB0byBhY2NlcHQgU3RyaW5nCi8vLyBpbnB1dHMuCmFic3RyYWN0IGNsYXNzIFN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZSBleHRlbmRzIFN0cmluZ0NvbnZlcnNpb25TaW5rTWl4aW4ge30KCi8vLyBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgbWl4aW4gZm9yIGNvbnZlcnRlcnMgdGhhdCBuZWVkIHRvIGFjY2VwdCBTdHJpbmcKLy8vIGlucHV0cy4KYWJzdHJhY3QgY2xhc3MgU3RyaW5nQ29udmVyc2lvblNpbmtNaXhpbiBpbXBsZW1lbnRzIFN0cmluZ0NvbnZlcnNpb25TaW5rIHsKICB2b2lkIGFkZFNsaWNlKFN0cmluZyBzdHIsIGludCBzdGFydCwgaW50IGVuZCwgYm9vbCBpc0xhc3QpOwogIHZvaWQgY2xvc2UoKTsKCiAgdm9pZCBhZGQoU3RyaW5nIHN0cikgewogICAgYWRkU2xpY2Uoc3RyLCAwLCBzdHIubGVuZ3RoLCBmYWxzZSk7CiAgfQoKICBCeXRlQ29udmVyc2lvblNpbmsgYXNVdGY4U2luayhib29sIGFsbG93TWFsZm9ybWVkKSB7CiAgICByZXR1cm4gX1V0ZjhDb252ZXJzaW9uU2luayh0aGlzLCBhbGxvd01hbGZvcm1lZCk7CiAgfQoKICBDbG9zYWJsZVN0cmluZ1NpbmsgYXNTdHJpbmdTaW5rKCkgewogICAgcmV0dXJuIF9TdHJpbmdDb252ZXJzaW9uU2lua0FzU3RyaW5nU2lua0FkYXB0ZXIodGhpcyk7CiAgfQp9CgovLy8gVGhpcyBjbGFzcyBpcyBhIFtTdHJpbmdDb252ZXJzaW9uU2lua10gdGhhdCB3cmFwcyBhIFtTdHJpbmdTaW5rXS4KY2xhc3MgX1N0cmluZ1NpbmtDb252ZXJzaW9uU2luazxUU3RyaW5nU2luayBleHRlbmRzIFN0cmluZ1Npbms+CiAgICBleHRlbmRzIFN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZSB7CiAgVFN0cmluZ1NpbmsgX3N0cmluZ1Npbms7CiAgX1N0cmluZ1NpbmtDb252ZXJzaW9uU2luayh0aGlzLl9zdHJpbmdTaW5rKTsKCiAgdm9pZCBjbG9zZSgpIHt9CiAgdm9pZCBhZGRTbGljZShTdHJpbmcgc3RyLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBpZiAoc3RhcnQgIT0gMCB8fCBlbmQgIT0gc3RyLmxlbmd0aCkgewogICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgIF9zdHJpbmdTaW5rLndyaXRlQ2hhckNvZGUoc3RyLmNvZGVVbml0QXQoaSkpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBfc3RyaW5nU2luay53cml0ZShzdHIpOwogICAgfQogICAgaWYgKGlzTGFzdCkgY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkKFN0cmluZyBzdHIpIHsKICAgIF9zdHJpbmdTaW5rLndyaXRlKHN0cik7CiAgfQoKICBCeXRlQ29udmVyc2lvblNpbmsgYXNVdGY4U2luayhib29sIGFsbG93TWFsZm9ybWVkKSB7CiAgICByZXR1cm4gX1V0ZjhTdHJpbmdTaW5rQWRhcHRlcih0aGlzLCBfc3RyaW5nU2luaywgYWxsb3dNYWxmb3JtZWQpOwogIH0KCiAgQ2xvc2FibGVTdHJpbmdTaW5rIGFzU3RyaW5nU2luaygpIHsKICAgIHJldHVybiBDbG9zYWJsZVN0cmluZ1NpbmsuZnJvbVN0cmluZ1NpbmsoX3N0cmluZ1NpbmssIGNsb3NlKTsKICB9Cn0KCi8vLyBUaGlzIGNsYXNzIGFjY3VtdWxhdGVzIGFsbCBjaHVua3MgaW50byBvbmUgc3RyaW5nCi8vLyBhbmQgaW52b2tlcyBhIGNhbGxiYWNrIHdoZW4gdGhlIHNpbmsgaXMgY2xvc2VkLgovLy8KLy8vIFRoaXMgY2xhc3MgY2FuIGJlIHVzZWQgdG8gdGVybWluYXRlIGEgY2h1bmtlZCBjb252ZXJzaW9uLgpjbGFzcyBfU3RyaW5nQ2FsbGJhY2tTaW5rIGV4dGVuZHMgX1N0cmluZ1NpbmtDb252ZXJzaW9uU2luazxTdHJpbmdCdWZmZXI+IHsKICBmaW5hbCB2b2lkIEZ1bmN0aW9uKFN0cmluZykgX2NhbGxiYWNrOwogIF9TdHJpbmdDYWxsYmFja1NpbmsodGhpcy5fY2FsbGJhY2spIDogc3VwZXIoU3RyaW5nQnVmZmVyKCkpOwoKICB2b2lkIGNsb3NlKCkgewogICAgdmFyIGFjY3VtdWxhdGVkID0gX3N0cmluZ1NpbmsudG9TdHJpbmcoKTsKICAgIF9zdHJpbmdTaW5rLmNsZWFyKCk7CiAgICBfY2FsbGJhY2soYWNjdW11bGF0ZWQpOwogIH0KCiAgQnl0ZUNvbnZlcnNpb25TaW5rIGFzVXRmOFNpbmsoYm9vbCBhbGxvd01hbGZvcm1lZCkgewogICAgcmV0dXJuIF9VdGY4U3RyaW5nU2lua0FkYXB0ZXIodGhpcywgX3N0cmluZ1NpbmssIGFsbG93TWFsZm9ybWVkKTsKICB9Cn0KCi8vLyBUaGlzIGNsYXNzIGFkYXB0cyBhIHNpbXBsZSBbQ2h1bmtlZENvbnZlcnNpb25TaW5rXSB0byBhCi8vLyBbU3RyaW5nQ29udmVyc2lvblNpbmtdLgovLy8KLy8vIEFsbCBhZGRpdGlvbmFsIG1ldGhvZHMgb2YgdGhlIFtTdHJpbmdDb252ZXJzaW9uU2lua10gKGNvbXBhcmVkIHRvIHRoZQovLy8gQ2h1bmtlZENvbnZlcnNpb25TaW5rKSBhcmUgcmVkaXJlY3RlZCB0byB0aGUgYGFkZGAgbWV0aG9kLgpjbGFzcyBfU3RyaW5nQWRhcHRlclNpbmsgZXh0ZW5kcyBTdHJpbmdDb252ZXJzaW9uU2lua0Jhc2UgewogIGZpbmFsIFNpbms8U3RyaW5nPiBfc2luazsKCiAgX1N0cmluZ0FkYXB0ZXJTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGFkZChTdHJpbmcgc3RyKSB7CiAgICBfc2luay5hZGQoc3RyKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoU3RyaW5nIHN0ciwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgaWYgKHN0YXJ0ID09IDAgJiYgZW5kID09IHN0ci5sZW5ndGgpIHsKICAgICAgYWRkKHN0cik7CiAgICB9IGVsc2UgewogICAgICBhZGQoc3RyLnN1YnN0cmluZyhzdGFydCwgZW5kKSk7CiAgICB9CiAgICBpZiAoaXNMYXN0KSBjbG9zZSgpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQp9CgovLy8gRGVjb2RlcyBVVEYtOCBjb2RlIHVuaXRzIGFuZCBzdG9yZXMgdGhlbSBpbiBhIFtTdHJpbmdTaW5rXS4KY2xhc3MgX1V0ZjhTdHJpbmdTaW5rQWRhcHRlciBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2luayB7CiAgZmluYWwgX1V0ZjhEZWNvZGVyIF9kZWNvZGVyOwogIGZpbmFsIFNpbmsgX3Npbms7CgogIF9VdGY4U3RyaW5nU2lua0FkYXB0ZXIodGhpcy5fc2luaywgU3RyaW5nU2luayBzdHJpbmdTaW5rLCBib29sIGFsbG93TWFsZm9ybWVkKQogICAgICA6IF9kZWNvZGVyID0gX1V0ZjhEZWNvZGVyKHN0cmluZ1NpbmssIGFsbG93TWFsZm9ybWVkKTsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9kZWNvZGVyLmNsb3NlKCk7CiAgICBpZiAoX3NpbmsgIT0gbnVsbCkgX3NpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkKExpc3Q8aW50PiBjaHVuaykgewogICAgYWRkU2xpY2UoY2h1bmssIDAsIGNodW5rLmxlbmd0aCwgZmFsc2UpOwogIH0KCiAgdm9pZCBhZGRTbGljZSgKICAgICAgTGlzdDxpbnQ+IGNvZGVVbml0cywgaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCwgYm9vbCBpc0xhc3QpIHsKICAgIF9kZWNvZGVyLmNvbnZlcnQoY29kZVVuaXRzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7CiAgICBpZiAoaXNMYXN0KSBjbG9zZSgpOwogIH0KfQoKLy8vIERlY29kZXMgVVRGLTggY29kZSB1bml0cy4KLy8vCi8vLyBGb3J3YXJkcyB0aGUgZGVjb2RlZCBzdHJpbmdzIHRvIHRoZSBnaXZlbiBbU3RyaW5nQ29udmVyc2lvblNpbmtdLgovLyBUT0RPKGZsb2l0c2NoKTogbWFrZSB0aGlzIGNsYXNzIHB1YmxpYz8KY2xhc3MgX1V0ZjhDb252ZXJzaW9uU2luayBleHRlbmRzIEJ5dGVDb252ZXJzaW9uU2luayB7CiAgZmluYWwgX1V0ZjhEZWNvZGVyIF9kZWNvZGVyOwogIGZpbmFsIFN0cmluZ0NvbnZlcnNpb25TaW5rIF9jaHVua2VkU2luazsKICBmaW5hbCBTdHJpbmdCdWZmZXIgX2J1ZmZlcjsKICBfVXRmOENvbnZlcnNpb25TaW5rKFN0cmluZ0NvbnZlcnNpb25TaW5rIHNpbmssIGJvb2wgYWxsb3dNYWxmb3JtZWQpCiAgICAgIDogdGhpcy5fKHNpbmssIFN0cmluZ0J1ZmZlcigpLCBhbGxvd01hbGZvcm1lZCk7CgogIF9VdGY4Q29udmVyc2lvblNpbmsuXygKICAgICAgdGhpcy5fY2h1bmtlZFNpbmssIFN0cmluZ0J1ZmZlciBzdHJpbmdCdWZmZXIsIGJvb2wgYWxsb3dNYWxmb3JtZWQpCiAgICAgIDogX2RlY29kZXIgPSBfVXRmOERlY29kZXIoc3RyaW5nQnVmZmVyLCBhbGxvd01hbGZvcm1lZCksCiAgICAgICAgX2J1ZmZlciA9IHN0cmluZ0J1ZmZlcjsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9kZWNvZGVyLmNsb3NlKCk7CiAgICBpZiAoX2J1ZmZlci5pc05vdEVtcHR5KSB7CiAgICAgIHZhciBhY2N1bXVsYXRlZCA9IF9idWZmZXIudG9TdHJpbmcoKTsKICAgICAgX2J1ZmZlci5jbGVhcigpOwogICAgICBfY2h1bmtlZFNpbmsuYWRkU2xpY2UoYWNjdW11bGF0ZWQsIDAsIGFjY3VtdWxhdGVkLmxlbmd0aCwgdHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBfY2h1bmtlZFNpbmsuY2xvc2UoKTsKICAgIH0KICB9CgogIHZvaWQgYWRkKExpc3Q8aW50PiBjaHVuaykgewogICAgYWRkU2xpY2UoY2h1bmssIDAsIGNodW5rLmxlbmd0aCwgZmFsc2UpOwogIH0KCiAgdm9pZCBhZGRTbGljZShMaXN0PGludD4gY2h1bmssIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgsIGJvb2wgaXNMYXN0KSB7CiAgICBfZGVjb2Rlci5jb252ZXJ0KGNodW5rLCBzdGFydEluZGV4LCBlbmRJbmRleCk7CiAgICBpZiAoX2J1ZmZlci5pc05vdEVtcHR5KSB7CiAgICAgIHZhciBhY2N1bXVsYXRlZCA9IF9idWZmZXIudG9TdHJpbmcoKTsKICAgICAgX2NodW5rZWRTaW5rLmFkZFNsaWNlKGFjY3VtdWxhdGVkLCAwLCBhY2N1bXVsYXRlZC5sZW5ndGgsIGlzTGFzdCk7CiAgICAgIF9idWZmZXIuY2xlYXIoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGlzTGFzdCkgY2xvc2UoKTsKICB9Cn0KgUAATk48ARYBNyYES0AeBFE8TRNMGlEbTQE4BkpLG0EtAScGSwYrQAE5BklSNhIXATAGSVIlAgFKFDdMR08bATYQAgE8JTojGgEzARERBAElIwQBGRQEASIWBAE9KAQCAUZNFytPJgEYJQE+IgERJhoEASUlNQQBGSYkBAEiGDUEAT0mJSYdCzclDTUkGjcIBgQBEioVIwQCAU8MTQFKDEs+EAEZKQQBNzYEASY7BAIBRkAnGy8BEj8rKjYIDR4GGQQBGRwEATdGBAEmQgQCATY0BD5MKT8BES4ZHAQBN0YEAgE8HARKPzwcASIBGRQEAT8rEA0mBhkEARETBAIBQDofFAFRPQERFiYEAR4tBAERSDcZBAIBHgRGKzcfKx5GNgEZST8gAREWHiwXRw0cBgQBHi0EAU4zHixJFw4GGQQCASNkYXJ0OmNvbnZlcnQvc3RyaW5nX2NvbnZlcnNpb24uZGFydCxvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29udmVydC91dGYuZGFydMAATocvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvbnZlcnQ7CgovLy8gVGhlIFVuaWNvZGUgUmVwbGFjZW1lbnQgY2hhcmFjdGVyIGBVK0ZGRkRgICjvv70pLgpjb25zdCBpbnQgdW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyUnVuZSA9IDB4RkZGRDsKCi8vLyBUaGUgVW5pY29kZSBCeXRlIE9yZGVyIE1hcmtlciAoQk9NKSBjaGFyYWN0ZXIgYFUrRkVGRmAuCmNvbnN0IGludCB1bmljb2RlQm9tQ2hhcmFjdGVyUnVuZSA9IDB4RkVGRjsKCi8vLyBBbiBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgW1V0ZjhDb2RlY10uCi8vLwovLy8gVGhpcyBpbnN0YW5jZSBwcm92aWRlcyBhIGNvbnZlbmllbnQgYWNjZXNzIHRvIHRoZSBtb3N0IGNvbW1vbiBVVEYtOAovLy8gdXNlIGNhc2VzLgovLy8KLy8vIEV4YW1wbGVzOgovLy8KLy8vICAgICB2YXIgZW5jb2RlZCA9IHV0ZjguZW5jb2RlKCLDjsOxxaPDqXLDscOlxaPDrsO2w7HDpcS8w67FvsOlxaPDruG7ncOxIik7Ci8vLyAgICAgdmFyIGRlY29kZWQgPSB1dGY4LmRlY29kZShbMHg2MiwgMHg2YywgMHhjMywgMHhhNSwgMHg2MiwgMHhjMywgMHhhNiwKLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcyLCAweDY3LCAweDcyLCAweGMzLCAweGI4LCAweDY0XSk7CmNvbnN0IFV0ZjhDb2RlYyB1dGY4ID0gVXRmOENvZGVjKCk7CgovLy8gQSBbVXRmOENvZGVjXSBlbmNvZGVzIHN0cmluZ3MgdG8gdXRmLTggY29kZSB1bml0cyAoYnl0ZXMpIGFuZCBkZWNvZGVzCi8vLyBVVEYtOCBjb2RlIHVuaXRzIHRvIHN0cmluZ3MuCmNsYXNzIFV0ZjhDb2RlYyBleHRlbmRzIEVuY29kaW5nIHsKICBmaW5hbCBib29sIF9hbGxvd01hbGZvcm1lZDsKCiAgLy8vIEluc3RhbnRpYXRlcyBhIG5ldyBbVXRmOENvZGVjXS4KICAvLy8KICAvLy8gVGhlIG9wdGlvbmFsIFthbGxvd01hbGZvcm1lZF0gYXJndW1lbnQgZGVmaW5lcyBob3cgW2RlY29kZXJdIChhbmQgW2RlY29kZV0pCiAgLy8vIGRlYWwgd2l0aCBpbnZhbGlkIG9yIHVudGVybWluYXRlZCBjaGFyYWN0ZXIgc2VxdWVuY2VzLgogIC8vLwogIC8vLyBJZiBpdCBpcyBgdHJ1ZWAgKGFuZCBub3Qgb3ZlcnJpZGRlbiBhdCB0aGUgbWV0aG9kIGludm9jYXRpb24pIFtkZWNvZGVdIGFuZAogIC8vLyB0aGUgW2RlY29kZXJdIHJlcGxhY2UgaW52YWxpZCAob3IgdW50ZXJtaW5hdGVkKSBvY3RldAogIC8vLyBzZXF1ZW5jZXMgd2l0aCB0aGUgVW5pY29kZSBSZXBsYWNlbWVudCBjaGFyYWN0ZXIgYFUrRkZGRGAgKO+/vSkuIE90aGVyd2lzZQogIC8vLyB0aGV5IHRocm93IGEgW0Zvcm1hdEV4Y2VwdGlvbl0uCiAgY29uc3QgVXRmOENvZGVjKHtib29sIGFsbG93TWFsZm9ybWVkID0gZmFsc2V9KQogICAgICA6IF9hbGxvd01hbGZvcm1lZCA9IGFsbG93TWFsZm9ybWVkOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhpcyBjb2RlYywgInV0Zi04Ii4KICBTdHJpbmcgZ2V0IG5hbWUgPT4gInV0Zi04IjsKCiAgLy8vIERlY29kZXMgdGhlIFVURi04IFtjb2RlVW5pdHNdIChhIGxpc3Qgb2YgdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMpIHRvIHRoZQogIC8vLyBjb3JyZXNwb25kaW5nIHN0cmluZy4KICAvLy8KICAvLy8gSWYgdGhlIFtjb2RlVW5pdHNdIHN0YXJ0IHdpdGggdGhlIGVuY29kaW5nIG9mIGEKICAvLy8gW3VuaWNvZGVCb21DaGFyYWN0ZXJSdW5lXSwgdGhhdCBjaGFyYWN0ZXIgaXMgZGlzY2FyZGVkLgogIC8vLwogIC8vLyBJZiBbYWxsb3dNYWxmb3JtZWRdIGlzIGB0cnVlYCB0aGUgZGVjb2RlciByZXBsYWNlcyBpbnZhbGlkIChvcgogIC8vLyB1bnRlcm1pbmF0ZWQpIGNoYXJhY3RlciBzZXF1ZW5jZXMgd2l0aCB0aGUgVW5pY29kZSBSZXBsYWNlbWVudCBjaGFyYWN0ZXIKICAvLy8gYFUrRkZGRGAgKO+/vSkuIE90aGVyd2lzZSBpdCB0aHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXS4KICAvLy8KICAvLy8gSWYgW2FsbG93TWFsZm9ybWVkXSBpcyBub3QgZ2l2ZW4sIGl0IGRlZmF1bHRzIHRvIHRoZSBgYWxsb3dNYWxmb3JtZWRgIHRoYXQKICAvLy8gd2FzIHVzZWQgdG8gaW5zdGFudGlhdGUgYHRoaXNgLgogIFN0cmluZyBkZWNvZGUoTGlzdDxpbnQ+IGNvZGVVbml0cywge2Jvb2wgYWxsb3dNYWxmb3JtZWR9KSB7CiAgICBhbGxvd01hbGZvcm1lZCA/Pz0gX2FsbG93TWFsZm9ybWVkOwogICAgcmV0dXJuIFV0ZjhEZWNvZGVyKGFsbG93TWFsZm9ybWVkOiBhbGxvd01hbGZvcm1lZCkuY29udmVydChjb2RlVW5pdHMpOwogIH0KCiAgVXRmOEVuY29kZXIgZ2V0IGVuY29kZXIgPT4gY29uc3QgVXRmOEVuY29kZXIoKTsKICBVdGY4RGVjb2RlciBnZXQgZGVjb2RlciB7CiAgICByZXR1cm4gVXRmOERlY29kZXIoYWxsb3dNYWxmb3JtZWQ6IF9hbGxvd01hbGZvcm1lZCk7CiAgfQp9CgovLy8gVGhpcyBjbGFzcyBjb252ZXJ0cyBzdHJpbmdzIHRvIHRoZWlyIFVURi04IGNvZGUgdW5pdHMgKGEgbGlzdCBvZgovLy8gdW5zaWduZWQgOC1iaXQgaW50ZWdlcnMpLgpjbGFzcyBVdGY4RW5jb2RlciBleHRlbmRzIENvbnZlcnRlcjxTdHJpbmcsIExpc3Q8aW50Pj4gewogIGNvbnN0IFV0ZjhFbmNvZGVyKCk7CgogIC8vLyBDb252ZXJ0cyBbc3RyaW5nXSB0byBpdHMgVVRGLTggY29kZSB1bml0cyAoYSBsaXN0IG9mCiAgLy8vIHVuc2lnbmVkIDgtYml0IGludGVnZXJzKS4KICAvLy8KICAvLy8gSWYgW3N0YXJ0XSBhbmQgW2VuZF0gYXJlIHByb3ZpZGVkLCBvbmx5IHRoZSBzdWJzdHJpbmcKICAvLy8gYHN0cmluZy5zdWJzdHJpbmcoc3RhcnQsIGVuZClgIGlzIGNvbnZlcnRlZC4KICBVaW50OExpc3QgY29udmVydChTdHJpbmcgc3RyaW5nLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pIHsKICAgIHZhciBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoOwogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgc3RyaW5nTGVuZ3RoKTsKICAgIHZhciBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuIFVpbnQ4TGlzdCgwKTsKICAgIC8vIENyZWF0ZSBhIG5ldyBlbmNvZGVyIHdpdGggYSBsZW5ndGggdGhhdCBpcyBndWFyYW50ZWVkIHRvIGJlIGJpZyBlbm91Z2guCiAgICAvLyBBIHNpbmdsZSBjb2RlIHVuaXQgdXNlcyBhdCBtb3N0IDMgYnl0ZXMsIGEgc3Vycm9nYXRlIHBhaXIgYXQgbW9zdCA0LgogICAgdmFyIGVuY29kZXIgPSBfVXRmOEVuY29kZXIud2l0aEJ1ZmZlclNpemUobGVuZ3RoICogMyk7CiAgICB2YXIgZW5kUG9zaXRpb24gPSBlbmNvZGVyLl9maWxsQnVmZmVyKHN0cmluZywgc3RhcnQsIGVuZCk7CiAgICBhc3NlcnQoZW5kUG9zaXRpb24gPj0gZW5kIC0gMSk7CiAgICBpZiAoZW5kUG9zaXRpb24gIT0gZW5kKSB7CiAgICAgIC8vIEVuY29kaW5nIHNraXBwZWQgdGhlIGxhc3QgY29kZSB1bml0LgogICAgICAvLyBUaGF0IGNhbiBvbmx5IGhhcHBlbiBpZiB0aGUgbGFzdCBjb2RlIHVuaXQgaXMgYSBsZWFkc3Vycm9nYXRlLgogICAgICAvLyBGb3JjZSBlbmNvZGluZyBvZiB0aGUgbGVhZCBzdXJyb2dhdGUgYnkgaXRzZWxmLgogICAgICB2YXIgbGFzdENvZGVVbml0ID0gc3RyaW5nLmNvZGVVbml0QXQoZW5kIC0gMSk7CiAgICAgIGFzc2VydChfaXNMZWFkU3Vycm9nYXRlKGxhc3RDb2RlVW5pdCkpOwogICAgICAvLyBXZSB1c2UgYSBub24tc3Vycm9nYXRlIGFzIGBuZXh0VW5pdGAgc28gdGhhdCBfd3JpdGVTdXJyb2dhdGUganVzdAogICAgICAvLyB3cml0ZXMgdGhlIGxlYWQtc3Vycm9nYXRlLgogICAgICB2YXIgd2FzQ29tYmluZWQgPSBlbmNvZGVyLl93cml0ZVN1cnJvZ2F0ZShsYXN0Q29kZVVuaXQsIDApOwogICAgICBhc3NlcnQoIXdhc0NvbWJpbmVkKTsKICAgIH0KICAgIHJldHVybiBlbmNvZGVyLl9idWZmZXIuc3VibGlzdCgwLCBlbmNvZGVyLl9idWZmZXJJbmRleCk7CiAgfQoKICAvLy8gU3RhcnRzIGEgY2h1bmtlZCBjb252ZXJzaW9uLgogIC8vLwogIC8vLyBUaGUgY29udmVydGVyIHdvcmtzIG1vcmUgZWZmaWNpZW50bHkgaWYgdGhlIGdpdmVuIFtzaW5rXSBpcyBhCiAgLy8vIFtCeXRlQ29udmVyc2lvblNpbmtdLgogIFN0cmluZ0NvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxMaXN0PGludD4+IHNpbmspIHsKICAgIHJldHVybiBfVXRmOEVuY29kZXJTaW5rKAogICAgICAgIHNpbmsgaXMgQnl0ZUNvbnZlcnNpb25TaW5rID8gc2luayA6IEJ5dGVDb252ZXJzaW9uU2luay5mcm9tKHNpbmspKTsKICB9CgogIC8vIE92ZXJyaWRlIHRoZSBiYXNlLWNsYXNzZXMgYmluZCwgdG8gcHJvdmlkZSBhIGJldHRlciB0eXBlLgogIFN0cmVhbTxMaXN0PGludD4+IGJpbmQoU3RyZWFtPFN0cmluZz4gc3RyZWFtKSA9PiBzdXBlci5iaW5kKHN0cmVhbSk7Cn0KCi8vLyBUaGlzIGNsYXNzIGVuY29kZXMgU3RyaW5ncyB0byBVVEYtOCBjb2RlIHVuaXRzICh1bnNpZ25lZCA4IGJpdCBpbnRlZ2VycykuCi8vIFRPRE8oZmxvaXRzY2gpOiBtYWtlIHRoaXMgY2xhc3MgcHVibGljLgpjbGFzcyBfVXRmOEVuY29kZXIgewogIGludCBfY2FycnkgPSAwOwogIGludCBfYnVmZmVySW5kZXggPSAwOwogIGZpbmFsIFVpbnQ4TGlzdCBfYnVmZmVyOwoKICBzdGF0aWMgY29uc3QgX0RFRkFVTFRfQllURV9CVUZGRVJfU0laRSA9IDEwMjQ7CgogIF9VdGY4RW5jb2RlcigpIDogdGhpcy53aXRoQnVmZmVyU2l6ZShfREVGQVVMVF9CWVRFX0JVRkZFUl9TSVpFKTsKCiAgX1V0ZjhFbmNvZGVyLndpdGhCdWZmZXJTaXplKGludCBidWZmZXJTaXplKQogICAgICA6IF9idWZmZXIgPSBfY3JlYXRlQnVmZmVyKGJ1ZmZlclNpemUpOwoKICAvLy8gQWxsb3cgYW4gaW1wbGVtZW50YXRpb24gdG8gcGljayB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IG9mIHN0b3JpbmcgYnl0ZXMuCiAgc3RhdGljIFVpbnQ4TGlzdCBfY3JlYXRlQnVmZmVyKGludCBzaXplKSA9PiBVaW50OExpc3Qoc2l6ZSk7CgogIC8vLyBUcmllcyB0byBjb21iaW5lIHRoZSBnaXZlbiBbbGVhZGluZ1N1cnJvZ2F0ZV0gd2l0aCB0aGUgW25leHRDb2RlVW5pdF0gYW5kCiAgLy8vIHdyaXRlcyBpdCB0byBbX2J1ZmZlcl0uCiAgLy8vCiAgLy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgW25leHRDb2RlVW5pdF0gd2FzIGNvbWJpbmVkIHdpdGggdGhlCiAgLy8vIFtsZWFkaW5nU3Vycm9nYXRlXS4gSWYgaXQgd2Fzbid0IHRoZW4gbmV4dENvZGVVbml0IHdhcyBub3QgYSB0cmFpbGluZwogIC8vLyBzdXJyb2dhdGUgYW5kIGhhcyBub3QgYmVlbiB3cml0dGVuIHlldC4KICAvLy8KICAvLy8gSXQgaXMgc2FmZSB0byBwYXNzIDAgZm9yIFtuZXh0Q29kZVVuaXRdIGluIHdoaWNoIGNhc2Ugb25seSB0aGUgbGVhZGluZwogIC8vLyBzdXJyb2dhdGUgaXMgd3JpdHRlbi4KICBib29sIF93cml0ZVN1cnJvZ2F0ZShpbnQgbGVhZGluZ1N1cnJvZ2F0ZSwgaW50IG5leHRDb2RlVW5pdCkgewogICAgaWYgKF9pc1RhaWxTdXJyb2dhdGUobmV4dENvZGVVbml0KSkgewogICAgICB2YXIgcnVuZSA9IF9jb21iaW5lU3Vycm9nYXRlUGFpcihsZWFkaW5nU3Vycm9nYXRlLCBuZXh0Q29kZVVuaXQpOwogICAgICAvLyBJZiB0aGUgcnVuZSBpcyBlbmNvZGVkIHdpdGggMiBjb2RlLXVuaXRzIHRoZW4gaXQgbXVzdCBiZSBlbmNvZGVkCiAgICAgIC8vIHdpdGggNCBieXRlcyBpbiBVVEYtOC4KICAgICAgYXNzZXJ0KHJ1bmUgPiBfVEhSRUVfQllURV9MSU1JVCk7CiAgICAgIGFzc2VydChydW5lIDw9IF9GT1VSX0JZVEVfTElNSVQpOwogICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IDB4RjAgfCAocnVuZSA+PiAxOCk7CiAgICAgIF9idWZmZXJbX2J1ZmZlckluZGV4KytdID0gMHg4MCB8ICgocnVuZSA+PiAxMikgJiAweDNmKTsKICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweDgwIHwgKChydW5lID4+IDYpICYgMHgzZik7CiAgICAgIF9idWZmZXJbX2J1ZmZlckluZGV4KytdID0gMHg4MCB8IChydW5lICYgMHgzZik7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IGFsbG93IHRvIHRocm93IG9uIG1hbGZvcm1lZCBzdHJpbmdzLgogICAgICAvLyBFbmNvZGUgdGhlIGhhbGYtc3Vycm9nYXRlIGRpcmVjdGx5IGludG8gVVRGLTguIFRoaXMgeWllbGRzCiAgICAgIC8vIGludmFsaWQgVVRGLTgsIGJ1dCB3ZSBzdGFydGVkIG91dCB3aXRoIGludmFsaWQgVVRGLTE2LgoKICAgICAgLy8gU3Vycm9nYXRlcyBhcmUgYWx3YXlzIGVuY29kZWQgaW4gMyBieXRlcyBpbiBVVEYtOC4KICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweEUwIHwgKGxlYWRpbmdTdXJyb2dhdGUgPj4gMTIpOwogICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IDB4ODAgfCAoKGxlYWRpbmdTdXJyb2dhdGUgPj4gNikgJiAweDNmKTsKICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweDgwIHwgKGxlYWRpbmdTdXJyb2dhdGUgJiAweDNmKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KCiAgLy8vIEZpbGxzIHRoZSBbX2J1ZmZlcl0gd2l0aCBhcyBtYW55IGNoYXJhY3RlcnMgYXMgcG9zc2libGUuCiAgLy8vCiAgLy8vIERvZXMgbm90IGVuY29kZSBhbnkgdHJhaWxpbmcgbGVhZC1zdXJyb2dhdGUuIFRoaXMgbXVzdCBiZSBkb25lIGJ5IHRoZQogIC8vLyBjYWxsZXIuCiAgLy8vCiAgLy8vIFJldHVybnMgdGhlIHBvc2l0aW9uIGluIHRoZSBzdHJpbmcuIFRoZSByZXR1cm5lZCBpbmRleCBwb2ludHMgdG8gdGhlCiAgLy8vIGZpcnN0IGNvZGUgdW5pdCB0aGF0IGhhc24ndCBiZWVuIGVuY29kZWQuCiAgaW50IF9maWxsQnVmZmVyKFN0cmluZyBzdHIsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgaWYgKHN0YXJ0ICE9IGVuZCAmJiBfaXNMZWFkU3Vycm9nYXRlKHN0ci5jb2RlVW5pdEF0KGVuZCAtIDEpKSkgewogICAgICAvLyBEb24ndCBoYW5kbGUgYSB0cmFpbGluZyBsZWFkLXN1cnJvZ2F0ZSBpbiB0aGlzIGxvb3AuIFRoZSBjYWxsZXIgaGFzCiAgICAgIC8vIHRvIGRlYWwgd2l0aCB0aG9zZS4KICAgICAgZW5kLS07CiAgICB9CiAgICBpbnQgc3RyaW5nSW5kZXg7CiAgICBmb3IgKHN0cmluZ0luZGV4ID0gc3RhcnQ7IHN0cmluZ0luZGV4IDwgZW5kOyBzdHJpbmdJbmRleCsrKSB7CiAgICAgIHZhciBjb2RlVW5pdCA9IHN0ci5jb2RlVW5pdEF0KHN0cmluZ0luZGV4KTsKICAgICAgLy8gQVNDSUkgaGFzIHRoZSBzYW1lIHJlcHJlc2VudGF0aW9uIGluIFVURi04IGFuZCBVVEYtMTYuCiAgICAgIGlmIChjb2RlVW5pdCA8PSBfT05FX0JZVEVfTElNSVQpIHsKICAgICAgICBpZiAoX2J1ZmZlckluZGV4ID49IF9idWZmZXIubGVuZ3RoKSBicmVhazsKICAgICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IGNvZGVVbml0OwogICAgICB9IGVsc2UgaWYgKF9pc0xlYWRTdXJyb2dhdGUoY29kZVVuaXQpKSB7CiAgICAgICAgaWYgKF9idWZmZXJJbmRleCArIDMgPj0gX2J1ZmZlci5sZW5ndGgpIGJyZWFrOwogICAgICAgIC8vIE5vdGUgdGhhdCBpdCBpcyBzYWZlIHRvIHJlYWQgdGhlIG5leHQgY29kZSB1bml0LiBXZSBkZWNyZW1lbnRlZAogICAgICAgIC8vIFtlbmRdIGFib3ZlIHdoZW4gdGhlIGxhc3QgdmFsaWQgY29kZSB1bml0IHdhcyBhIGxlYWRpbmcgc3Vycm9nYXRlLgogICAgICAgIHZhciBuZXh0Q29kZVVuaXQgPSBzdHIuY29kZVVuaXRBdChzdHJpbmdJbmRleCArIDEpOwogICAgICAgIHZhciB3YXNDb21iaW5lZCA9IF93cml0ZVN1cnJvZ2F0ZShjb2RlVW5pdCwgbmV4dENvZGVVbml0KTsKICAgICAgICBpZiAod2FzQ29tYmluZWQpIHN0cmluZ0luZGV4Kys7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFyIHJ1bmUgPSBjb2RlVW5pdDsKICAgICAgICBpZiAocnVuZSA8PSBfVFdPX0JZVEVfTElNSVQpIHsKICAgICAgICAgIGlmIChfYnVmZmVySW5kZXggKyAxID49IF9idWZmZXIubGVuZ3RoKSBicmVhazsKICAgICAgICAgIF9idWZmZXJbX2J1ZmZlckluZGV4KytdID0gMHhDMCB8IChydW5lID4+IDYpOwogICAgICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweDgwIHwgKHJ1bmUgJiAweDNmKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXNzZXJ0KHJ1bmUgPD0gX1RIUkVFX0JZVEVfTElNSVQpOwogICAgICAgICAgaWYgKF9idWZmZXJJbmRleCArIDIgPj0gX2J1ZmZlci5sZW5ndGgpIGJyZWFrOwogICAgICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweEUwIHwgKHJ1bmUgPj4gMTIpOwogICAgICAgICAgX2J1ZmZlcltfYnVmZmVySW5kZXgrK10gPSAweDgwIHwgKChydW5lID4+IDYpICYgMHgzZik7CiAgICAgICAgICBfYnVmZmVyW19idWZmZXJJbmRleCsrXSA9IDB4ODAgfCAocnVuZSAmIDB4M2YpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHN0cmluZ0luZGV4OwogIH0KfQoKLy8vIFRoaXMgY2xhc3MgZW5jb2RlcyBjaHVua2VkIHN0cmluZ3MgdG8gVVRGLTggY29kZSB1bml0cyAodW5zaWduZWQgOC1iaXQKLy8vIGludGVnZXJzKS4KY2xhc3MgX1V0ZjhFbmNvZGVyU2luayBleHRlbmRzIF9VdGY4RW5jb2RlciB3aXRoIFN0cmluZ0NvbnZlcnNpb25TaW5rTWl4aW4gewogIGZpbmFsIEJ5dGVDb252ZXJzaW9uU2luayBfc2luazsKCiAgX1V0ZjhFbmNvZGVyU2luayh0aGlzLl9zaW5rKTsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChfY2FycnkgIT0gMCkgewogICAgICAvLyBhZGRTbGljZSB3aWxsIGNhbGwgY2xvc2UgYWdhaW4sIGJ1dCB0aGVuIHRoZSBjYXJyeSBtdXN0IGJlIGVxdWFsIHRvIDAuCiAgICAgIGFkZFNsaWNlKCIiLCAwLCAwLCB0cnVlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgX3NpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoU3RyaW5nIHN0ciwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgX2J1ZmZlckluZGV4ID0gMDsKCiAgICBpZiAoc3RhcnQgPT0gZW5kICYmICFpc0xhc3QpIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChfY2FycnkgIT0gMCkgewogICAgICB2YXIgbmV4dENvZGVVbml0ID0gMDsKICAgICAgaWYgKHN0YXJ0ICE9IGVuZCkgewogICAgICAgIG5leHRDb2RlVW5pdCA9IHN0ci5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhc3NlcnQoaXNMYXN0KTsKICAgICAgfQogICAgICB2YXIgd2FzQ29tYmluZWQgPSBfd3JpdGVTdXJyb2dhdGUoX2NhcnJ5LCBuZXh0Q29kZVVuaXQpOwogICAgICAvLyBFaXRoZXIgd2UgZ290IGEgbm9uLWVtcHR5IHN0cmluZywgb3Igd2UgbXVzdCBub3QgaGF2ZSBiZWVuIGNvbWJpbmVkLgogICAgICBhc3NlcnQoIXdhc0NvbWJpbmVkIHx8IHN0YXJ0ICE9IGVuZCk7CiAgICAgIGlmICh3YXNDb21iaW5lZCkgc3RhcnQrKzsKICAgICAgX2NhcnJ5ID0gMDsKICAgIH0KICAgIGRvIHsKICAgICAgc3RhcnQgPSBfZmlsbEJ1ZmZlcihzdHIsIHN0YXJ0LCBlbmQpOwogICAgICB2YXIgaXNMYXN0U2xpY2UgPSBpc0xhc3QgJiYgKHN0YXJ0ID09IGVuZCk7CiAgICAgIGlmIChzdGFydCA9PSBlbmQgLSAxICYmIF9pc0xlYWRTdXJyb2dhdGUoc3RyLmNvZGVVbml0QXQoc3RhcnQpKSkgewogICAgICAgIGlmIChpc0xhc3QgJiYgX2J1ZmZlckluZGV4IDwgX2J1ZmZlci5sZW5ndGggLSAzKSB7CiAgICAgICAgICAvLyBUaGVyZSBpcyBzdGlsbCBzcGFjZSBmb3IgdGhlIGxhc3QgaW5jb21wbGV0ZSBzdXJyb2dhdGUuCiAgICAgICAgICAvLyBXZSB1c2UgYSBub24tc3Vycm9nYXRlIGFzIHNlY29uZCBhcmd1bWVudC4gVGhpcyB3YXkgdGhlCiAgICAgICAgICAvLyBmdW5jdGlvbiB3aWxsIGp1c3QgYWRkIHRoZSBzdXJyb2dhdGUtaGFsZiB0byB0aGUgYnVmZmVyLgogICAgICAgICAgdmFyIGhhc0JlZW5Db21iaW5lZCA9IF93cml0ZVN1cnJvZ2F0ZShzdHIuY29kZVVuaXRBdChzdGFydCksIDApOwogICAgICAgICAgYXNzZXJ0KCFoYXNCZWVuQ29tYmluZWQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBPdGhlcndpc2Ugc3RvcmUgaXQgaW4gdGhlIGNhcnJ5LiBJZiBpc0xhc3QgaXMgdHJ1ZSwgdGhlbgogICAgICAgICAgLy8gY2xvc2Ugd2lsbCBmbHVzaCB0aGUgbGFzdCBjYXJyeS4KICAgICAgICAgIF9jYXJyeSA9IHN0ci5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgICAgICB9CiAgICAgICAgc3RhcnQrKzsKICAgICAgfQogICAgICBfc2luay5hZGRTbGljZShfYnVmZmVyLCAwLCBfYnVmZmVySW5kZXgsIGlzTGFzdFNsaWNlKTsKICAgICAgX2J1ZmZlckluZGV4ID0gMDsKICAgIH0gd2hpbGUgKHN0YXJ0IDwgZW5kKTsKICAgIGlmIChpc0xhc3QpIGNsb3NlKCk7CiAgfQoKICAvLyBUT0RPKGZsb2l0c2NoKTogaW1wbGVtZW50IGFzVXRmOFNpbmsuIFNsaWd0aGx5IGNvbXBsaWNhdGVkIGJlY2F1c2UgaXQKICAvLyBuZWVkcyB0byBkZWFsIHdpdGggbWFsZm9ybWVkIGlucHV0Lgp9CgovLy8gVGhpcyBjbGFzcyBjb252ZXJ0cyBVVEYtOCBjb2RlIHVuaXRzIChsaXN0cyBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VycykKLy8vIHRvIGEgc3RyaW5nLgpjbGFzcyBVdGY4RGVjb2RlciBleHRlbmRzIENvbnZlcnRlcjxMaXN0PGludD4sIFN0cmluZz4gewogIGZpbmFsIGJvb2wgX2FsbG93TWFsZm9ybWVkOwoKICAvLy8gSW5zdGFudGlhdGVzIGEgbmV3IFtVdGY4RGVjb2Rlcl0uCiAgLy8vCiAgLy8vIFRoZSBvcHRpb25hbCBbYWxsb3dNYWxmb3JtZWRdIGFyZ3VtZW50IGRlZmluZXMgaG93IFtjb252ZXJ0XSBkZWFscwogIC8vLyB3aXRoIGludmFsaWQgb3IgdW50ZXJtaW5hdGVkIGNoYXJhY3RlciBzZXF1ZW5jZXMuCiAgLy8vCiAgLy8vIElmIGl0IGlzIGB0cnVlYCBbY29udmVydF0gcmVwbGFjZXMgaW52YWxpZCAob3IgdW50ZXJtaW5hdGVkKSBjaGFyYWN0ZXIKICAvLy8gc2VxdWVuY2VzIHdpdGggdGhlIFVuaWNvZGUgUmVwbGFjZW1lbnQgY2hhcmFjdGVyIGBVK0ZGRkRgICjvv70pLiBPdGhlcndpc2UKICAvLy8gaXQgdGhyb3dzIGEgW0Zvcm1hdEV4Y2VwdGlvbl0uCiAgY29uc3QgVXRmOERlY29kZXIoe2Jvb2wgYWxsb3dNYWxmb3JtZWQgPSBmYWxzZX0pCiAgICAgIDogX2FsbG93TWFsZm9ybWVkID0gYWxsb3dNYWxmb3JtZWQ7CgogIC8vLyBDb252ZXJ0cyB0aGUgVVRGLTggW2NvZGVVbml0c10gKGEgbGlzdCBvZiB1bnNpZ25lZCA4LWJpdCBpbnRlZ2VycykgdG8gdGhlCiAgLy8vIGNvcnJlc3BvbmRpbmcgc3RyaW5nLgogIC8vLwogIC8vLyBVc2VzIHRoZSBjb2RlIHVuaXRzIGZyb20gW3N0YXJ0XSB0bywgYnV0IG5vIGluY2x1ZGluZywgW2VuZF0uCiAgLy8vIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGBjb2RlVW5pdHMubGVuZ3RoYC4KICAvLy8KICAvLy8gSWYgdGhlIFtjb2RlVW5pdHNdIHN0YXJ0IHdpdGggdGhlIGVuY29kaW5nIG9mIGEKICAvLy8gW3VuaWNvZGVCb21DaGFyYWN0ZXJSdW5lXSwgdGhhdCBjaGFyYWN0ZXIgaXMgZGlzY2FyZGVkLgogIFN0cmluZyBjb252ZXJ0KExpc3Q8aW50PiBjb2RlVW5pdHMsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgLy8gQWxsb3cgdGhlIGltcGxlbWVudGF0aW9uIHRvIGludGVyY2VwdCBhbmQgc3BlY2lhbGl6ZSBiYXNlZCBvbiB0aGUgdHlwZQogICAgLy8gb2YgY29kZVVuaXRzLgogICAgdmFyIHJlc3VsdCA9IF9jb252ZXJ0SW50ZXJjZXB0ZWQoX2FsbG93TWFsZm9ybWVkLCBjb2RlVW5pdHMsIHN0YXJ0LCBlbmQpOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CgogICAgdmFyIGxlbmd0aCA9IGNvZGVVbml0cy5sZW5ndGg7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBsZW5ndGgpOwoKICAgIC8vIEZhc3QgY2FzZSBmb3IgQVNDSUkgc3RyaW5ncyBhdm9pZHMgU3RyaW5nQnVmZmVyL19VdGY4RGVjb2Rlci4KICAgIGludCBvbmVCeXRlcyA9IF9zY2FuT25lQnl0ZUNoYXJhY3RlcnMoY29kZVVuaXRzLCBzdGFydCwgZW5kKTsKICAgIFN0cmluZ0J1ZmZlciBidWZmZXI7CiAgICBib29sIGlzRmlyc3RDaGFyYWN0ZXIgPSB0cnVlOwogICAgaWYgKG9uZUJ5dGVzID4gMCkgewogICAgICB2YXIgZmlyc3RQYXJ0ID0gU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZVVuaXRzLCBzdGFydCwgc3RhcnQgKyBvbmVCeXRlcyk7CiAgICAgIHN0YXJ0ICs9IG9uZUJ5dGVzOwogICAgICBpZiAoc3RhcnQgPT0gZW5kKSB7CiAgICAgICAgcmV0dXJuIGZpcnN0UGFydDsKICAgICAgfQogICAgICBidWZmZXIgPSBTdHJpbmdCdWZmZXIoZmlyc3RQYXJ0KTsKICAgICAgaXNGaXJzdENoYXJhY3RlciA9IGZhbHNlOwogICAgfQoKICAgIGJ1ZmZlciA/Pz0gU3RyaW5nQnVmZmVyKCk7CiAgICB2YXIgZGVjb2RlciA9IF9VdGY4RGVjb2RlcihidWZmZXIsIF9hbGxvd01hbGZvcm1lZCk7CiAgICBkZWNvZGVyLl9pc0ZpcnN0Q2hhcmFjdGVyID0gaXNGaXJzdENoYXJhY3RlcjsKICAgIGRlY29kZXIuY29udmVydChjb2RlVW5pdHMsIHN0YXJ0LCBlbmQpOwogICAgZGVjb2Rlci5mbHVzaChjb2RlVW5pdHMsIGVuZCk7CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICAvLy8gU3RhcnRzIGEgY2h1bmtlZCBjb252ZXJzaW9uLgogIC8vLwogIC8vLyBUaGUgY29udmVydGVyIHdvcmtzIG1vcmUgZWZmaWNpZW50bHkgaWYgdGhlIGdpdmVuIFtzaW5rXSBpcyBhCiAgLy8vIFtTdHJpbmdDb252ZXJzaW9uU2lua10uCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxTdHJpbmc+IHNpbmspIHsKICAgIFN0cmluZ0NvbnZlcnNpb25TaW5rIHN0cmluZ1Npbms7CiAgICBpZiAoc2luayBpcyBTdHJpbmdDb252ZXJzaW9uU2luaykgewogICAgICBzdHJpbmdTaW5rID0gc2luazsKICAgIH0gZWxzZSB7CiAgICAgIHN0cmluZ1NpbmsgPSBTdHJpbmdDb252ZXJzaW9uU2luay5mcm9tKHNpbmspOwogICAgfQogICAgcmV0dXJuIHN0cmluZ1NpbmsuYXNVdGY4U2luayhfYWxsb3dNYWxmb3JtZWQpOwogIH0KCiAgLy8gT3ZlcnJpZGUgdGhlIGJhc2UtY2xhc3NlcyBiaW5kLCB0byBwcm92aWRlIGEgYmV0dGVyIHR5cGUuCiAgU3RyZWFtPFN0cmluZz4gYmluZChTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0pID0+IHN1cGVyLmJpbmQoc3RyZWFtKTsKCiAgZXh0ZXJuYWwgQ29udmVydGVyPExpc3Q8aW50PiwgVD4gZnVzZTxUPihDb252ZXJ0ZXI8U3RyaW5nLCBUPiBuZXh0KTsKCiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBfY29udmVydEludGVyY2VwdGVkKAogICAgICBib29sIGFsbG93TWFsZm9ybWVkLCBMaXN0PGludD4gY29kZVVuaXRzLCBpbnQgc3RhcnQsIGludCBlbmQpOwp9CgovLyBVVEYtOCBjb25zdGFudHMuCmNvbnN0IGludCBfT05FX0JZVEVfTElNSVQgPSAweDdmOyAvLyA3IGJpdHMKY29uc3QgaW50IF9UV09fQllURV9MSU1JVCA9IDB4N2ZmOyAvLyAxMSBiaXRzCmNvbnN0IGludCBfVEhSRUVfQllURV9MSU1JVCA9IDB4ZmZmZjsgLy8gMTYgYml0cwpjb25zdCBpbnQgX0ZPVVJfQllURV9MSU1JVCA9IDB4MTBmZmZmOyAvLyAyMSBiaXRzLCB0cnVuY2F0ZWQgdG8gVW5pY29kZSBtYXguCgovLyBVVEYtMTYgY29uc3RhbnRzLgpjb25zdCBpbnQgX1NVUlJPR0FURV9UQUdfTUFTSyA9IDB4RkMwMDsKY29uc3QgaW50IF9TVVJST0dBVEVfVkFMVUVfTUFTSyA9IDB4M0ZGOwpjb25zdCBpbnQgX0xFQURfU1VSUk9HQVRFX01JTiA9IDB4RDgwMDsKY29uc3QgaW50IF9UQUlMX1NVUlJPR0FURV9NSU4gPSAweERDMDA7Cgpib29sIF9pc0xlYWRTdXJyb2dhdGUoaW50IGNvZGVVbml0KSA9PgogICAgKGNvZGVVbml0ICYgX1NVUlJPR0FURV9UQUdfTUFTSykgPT0gX0xFQURfU1VSUk9HQVRFX01JTjsKYm9vbCBfaXNUYWlsU3Vycm9nYXRlKGludCBjb2RlVW5pdCkgPT4KICAgIChjb2RlVW5pdCAmIF9TVVJST0dBVEVfVEFHX01BU0spID09IF9UQUlMX1NVUlJPR0FURV9NSU47CmludCBfY29tYmluZVN1cnJvZ2F0ZVBhaXIoaW50IGxlYWQsIGludCB0YWlsKSA9PgogICAgMHgxMDAwMCArICgobGVhZCAmIF9TVVJST0dBVEVfVkFMVUVfTUFTSykgPDwgMTApIHwKICAgICh0YWlsICYgX1NVUlJPR0FURV9WQUxVRV9NQVNLKTsKCi8vLyBEZWNvZGVzIFVURi04LgovLy8KLy8vIFRoZSBkZWNvZGVyIGhhbmRsZXMgY2h1bmtlZCBpbnB1dC4KLy8gVE9ETyhmbG9pdHNjaCk6IG1ha2UgdGhpcyBjbGFzcyBwdWJsaWMuCmNsYXNzIF9VdGY4RGVjb2RlciB7CiAgZmluYWwgYm9vbCBfYWxsb3dNYWxmb3JtZWQ7CiAgZmluYWwgU3RyaW5nU2luayBfc3RyaW5nU2luazsKICBib29sIF9pc0ZpcnN0Q2hhcmFjdGVyID0gdHJ1ZTsKICBpbnQgX3ZhbHVlID0gMDsKICBpbnQgX2V4cGVjdGVkVW5pdHMgPSAwOwogIGludCBfZXh0cmFVbml0cyA9IDA7CgogIF9VdGY4RGVjb2Rlcih0aGlzLl9zdHJpbmdTaW5rLCB0aGlzLl9hbGxvd01hbGZvcm1lZCk7CgogIGJvb2wgZ2V0IGhhc1BhcnRpYWxJbnB1dCA9PiBfZXhwZWN0ZWRVbml0cyA+IDA7CgogIC8vIExpbWl0cyBvZiBvbmUgdGhyb3VnaCBmb3VyIGJ5dGUgZW5jb2RpbmdzLgogIHN0YXRpYyBjb25zdCBMaXN0PGludD4gX0xJTUlUUyA9IDxpbnQ+WwogICAgX09ORV9CWVRFX0xJTUlULAogICAgX1RXT19CWVRFX0xJTUlULAogICAgX1RIUkVFX0JZVEVfTElNSVQsCiAgICBfRk9VUl9CWVRFX0xJTUlUCiAgXTsKCiAgdm9pZCBjbG9zZSgpIHsKICAgIGZsdXNoKCk7CiAgfQoKICAvLy8gRmx1c2hlcyB0aGlzIGRlY29kZXIgYXMgaWYgY2xvc2VkLgogIC8vLwogIC8vLyBUaGlzIG1ldGhvZCB0aHJvd3MgaWYgdGhlIGlucHV0IHdhcyBwYXJ0aWFsIGFuZCB0aGUgZGVjb2RlciB3YXMKICAvLy8gY29uc3RydWN0ZWQgd2l0aCBgYWxsb3dNYWxmb3JtZWRgIHNldCB0byBgZmFsc2VgLgogIC8vLwogIC8vLyBUaGUgW3NvdXJjZV0gYW5kIFtvZmZzZXRdIG9mIHRoZSBjdXJyZW50IHBvc2l0aW9uIG1heSBiZSBwcm92aWRlZCwKICAvLy8gYW5kIGFyZSBpbmNsdWRlZCBpbiB0aGUgZXhjZXB0aW9uIGlmIG9uZSBpcyB0aHJvd24uCiAgdm9pZCBmbHVzaChbTGlzdDxpbnQ+IHNvdXJjZSwgaW50IG9mZnNldF0pIHsKICAgIGlmIChoYXNQYXJ0aWFsSW5wdXQpIHsKICAgICAgaWYgKCFfYWxsb3dNYWxmb3JtZWQpIHsKICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICJVbmZpbmlzaGVkIFVURi04IG9jdGV0IHNlcXVlbmNlIiwgc291cmNlLCBvZmZzZXQpOwogICAgICB9CiAgICAgIF9zdHJpbmdTaW5rLndyaXRlQ2hhckNvZGUodW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyUnVuZSk7CiAgICAgIF92YWx1ZSA9IDA7CiAgICAgIF9leHBlY3RlZFVuaXRzID0gMDsKICAgICAgX2V4dHJhVW5pdHMgPSAwOwogICAgfQogIH0KCiAgdm9pZCBjb252ZXJ0KExpc3Q8aW50PiBjb2RlVW5pdHMsIGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgpIHsKICAgIHZhciB2YWx1ZSA9IF92YWx1ZTsKICAgIHZhciBleHBlY3RlZFVuaXRzID0gX2V4cGVjdGVkVW5pdHM7CiAgICB2YXIgZXh0cmFVbml0cyA9IF9leHRyYVVuaXRzOwogICAgX3ZhbHVlID0gMDsKICAgIF9leHBlY3RlZFVuaXRzID0gMDsKICAgIF9leHRyYVVuaXRzID0gMDsKCiAgICB2YXIgaSA9IHN0YXJ0SW5kZXg7CiAgICBsb29wOgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgbXVsdGlieXRlOgogICAgICBpZiAoZXhwZWN0ZWRVbml0cyA+IDApIHsKICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoaSA9PSBlbmRJbmRleCkgewogICAgICAgICAgICBicmVhayBsb29wOwogICAgICAgICAgfQogICAgICAgICAgdmFyIHVuaXQgPSBjb2RlVW5pdHNbaV07CiAgICAgICAgICBpZiAoKHVuaXQgJiAweEMwKSAhPSAweDgwKSB7CiAgICAgICAgICAgIGV4cGVjdGVkVW5pdHMgPSAwOwogICAgICAgICAgICBpZiAoIV9hbGxvd01hbGZvcm1lZCkgewogICAgICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgIkJhZCBVVEYtOCBlbmNvZGluZyAweCR7dW5pdC50b1JhZGl4U3RyaW5nKDE2KX0iLAogICAgICAgICAgICAgICAgICBjb2RlVW5pdHMsCiAgICAgICAgICAgICAgICAgIGkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9pc0ZpcnN0Q2hhcmFjdGVyID0gZmFsc2U7CiAgICAgICAgICAgIF9zdHJpbmdTaW5rLndyaXRlQ2hhckNvZGUodW5pY29kZVJlcGxhY2VtZW50Q2hhcmFjdGVyUnVuZSk7CiAgICAgICAgICAgIGJyZWFrIG11bHRpYnl0ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHZhbHVlID0gKHZhbHVlIDw8IDYpIHwgKHVuaXQgJiAweDNmKTsKICAgICAgICAgICAgZXhwZWN0ZWRVbml0cy0tOwogICAgICAgICAgICBpKys7CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoZXhwZWN0ZWRVbml0cyA+IDApOwogICAgICAgIGlmICh2YWx1ZSA8PSBfTElNSVRTW2V4dHJhVW5pdHMgLSAxXSkgewogICAgICAgICAgLy8gT3Zlcmx5IGxvbmcgZW5jb2RpbmcuIFRoZSB2YWx1ZSBjb3VsZCBiZSBlbmNvZGVkIHdpdGggYSBzaG9ydGVyCiAgICAgICAgICAvLyBlbmNvZGluZy4KICAgICAgICAgIGlmICghX2FsbG93TWFsZm9ybWVkKSB7CiAgICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICJPdmVybG9uZyBlbmNvZGluZyBvZiAweCR7dmFsdWUudG9SYWRpeFN0cmluZygxNil9IiwKICAgICAgICAgICAgICAgIGNvZGVVbml0cywKICAgICAgICAgICAgICAgIGkgLSBleHRyYVVuaXRzIC0gMSk7CiAgICAgICAgICB9CiAgICAgICAgICBleHBlY3RlZFVuaXRzID0gZXh0cmFVbml0cyA9IDA7CiAgICAgICAgICB2YWx1ZSA9IHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlclJ1bmU7CiAgICAgICAgfQogICAgICAgIGlmICh2YWx1ZSA+IF9GT1VSX0JZVEVfTElNSVQpIHsKICAgICAgICAgIGlmICghX2FsbG93TWFsZm9ybWVkKSB7CiAgICAgICAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICJDaGFyYWN0ZXIgb3V0c2lkZSB2YWxpZCBVbmljb2RlIHJhbmdlOiAiCiAgICAgICAgICAgICAgICAiMHgke3ZhbHVlLnRvUmFkaXhTdHJpbmcoMTYpfSIsCiAgICAgICAgICAgICAgICBjb2RlVW5pdHMsCiAgICAgICAgICAgICAgICBpIC0gZXh0cmFVbml0cyAtIDEpOwogICAgICAgICAgfQogICAgICAgICAgdmFsdWUgPSB1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXJSdW5lOwogICAgICAgIH0KICAgICAgICBpZiAoIV9pc0ZpcnN0Q2hhcmFjdGVyIHx8IHZhbHVlICE9IHVuaWNvZGVCb21DaGFyYWN0ZXJSdW5lKSB7CiAgICAgICAgICBfc3RyaW5nU2luay53cml0ZUNoYXJDb2RlKHZhbHVlKTsKICAgICAgICB9CiAgICAgICAgX2lzRmlyc3RDaGFyYWN0ZXIgPSBmYWxzZTsKICAgICAgfQoKICAgICAgd2hpbGUgKGkgPCBlbmRJbmRleCkgewogICAgICAgIHZhciBvbmVCeXRlcyA9IF9zY2FuT25lQnl0ZUNoYXJhY3RlcnMoY29kZVVuaXRzLCBpLCBlbmRJbmRleCk7CiAgICAgICAgaWYgKG9uZUJ5dGVzID4gMCkgewogICAgICAgICAgX2lzRmlyc3RDaGFyYWN0ZXIgPSBmYWxzZTsKICAgICAgICAgIGFzc2VydChpICsgb25lQnl0ZXMgPD0gZW5kSW5kZXgpOwogICAgICAgICAgX3N0cmluZ1Npbmsud3JpdGUoU3RyaW5nLmZyb21DaGFyQ29kZXMoY29kZVVuaXRzLCBpLCBpICsgb25lQnl0ZXMpKTsKCiAgICAgICAgICBpICs9IG9uZUJ5dGVzOwogICAgICAgICAgaWYgKGkgPT0gZW5kSW5kZXgpIGJyZWFrOwogICAgICAgIH0KICAgICAgICB2YXIgdW5pdCA9IGNvZGVVbml0c1tpKytdOwogICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiB0aGUgd2F5IHdlIHRlc3Qgd2UgY291bGQgcG90ZW50aWFsbHkgYWxsb3cKICAgICAgICAvLyB1bml0cyB0aGF0IGFyZSB0b28gbGFyZ2UsIGlmIHRoZXkgaGFwcGVuIHRvIGhhdmUgdGhlCiAgICAgICAgLy8gcmlnaHQgYml0LXBhdHRlcm4uIChTYW1lIGlzIHRydWUgZm9yIHRoZSBtdWx0aWJ5dGUgbG9vcCBhYm92ZSkuCiAgICAgICAgLy8gVE9ETyhmbG9pdHNjaCk6IG9wdGltaXplIHRoaXMgbG9vcC4gU2VlOgogICAgICAgIC8vIGh0dHBzOi8vY29kZXJldmlldy5jaHJvbWl1bS5vcmcvMjI5MjkwMjIvZGlmZi8xL3Nkay9saWIvY29udmVydC91dGYuZGFydD9jb2x1bW5fd2lkdGg9ODAKICAgICAgICBpZiAodW5pdCA8IDApIHsKICAgICAgICAgIC8vIFRPRE8oZmxvaXRzY2gpOiBzaG91bGQgdGhpcyBiZSB1bml0IDw9IDAgPwogICAgICAgICAgaWYgKCFfYWxsb3dNYWxmb3JtZWQpIHsKICAgICAgICAgICAgdGhyb3cgRm9ybWF0RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgIk5lZ2F0aXZlIFVURi04IGNvZGUgdW5pdDogLTB4JHsoLXVuaXQpLnRvUmFkaXhTdHJpbmcoMTYpfSIsCiAgICAgICAgICAgICAgICBjb2RlVW5pdHMsCiAgICAgICAgICAgICAgICBpIC0gMSk7CiAgICAgICAgICB9CiAgICAgICAgICBfc3RyaW5nU2luay53cml0ZUNoYXJDb2RlKHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlclJ1bmUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhc3NlcnQodW5pdCA+IF9PTkVfQllURV9MSU1JVCk7CiAgICAgICAgICBpZiAoKHVuaXQgJiAweEUwKSA9PSAweEMwKSB7CiAgICAgICAgICAgIHZhbHVlID0gdW5pdCAmIDB4MUY7CiAgICAgICAgICAgIGV4cGVjdGVkVW5pdHMgPSBleHRyYVVuaXRzID0gMTsKICAgICAgICAgICAgY29udGludWUgbG9vcDsKICAgICAgICAgIH0KICAgICAgICAgIGlmICgodW5pdCAmIDB4RjApID09IDB4RTApIHsKICAgICAgICAgICAgdmFsdWUgPSB1bml0ICYgMHgwRjsKICAgICAgICAgICAgZXhwZWN0ZWRVbml0cyA9IGV4dHJhVW5pdHMgPSAyOwogICAgICAgICAgICBjb250aW51ZSBsb29wOwogICAgICAgICAgfQogICAgICAgICAgLy8gMHhGNSwgMHhGNiAuLi4gMHhGRiBuZXZlciBhcHBlYXIgaW4gdmFsaWQgVVRGLTggc2VxdWVuY2VzLgogICAgICAgICAgaWYgKCh1bml0ICYgMHhGOCkgPT0gMHhGMCAmJiB1bml0IDwgMHhGNSkgewogICAgICAgICAgICB2YWx1ZSA9IHVuaXQgJiAweDA3OwogICAgICAgICAgICBleHBlY3RlZFVuaXRzID0gZXh0cmFVbml0cyA9IDM7CiAgICAgICAgICAgIGNvbnRpbnVlIGxvb3A7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIV9hbGxvd01hbGZvcm1lZCkgewogICAgICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiQmFkIFVURi04IGVuY29kaW5nIDB4JHt1bml0LnRvUmFkaXhTdHJpbmcoMTYpfSIsCiAgICAgICAgICAgICAgICBjb2RlVW5pdHMsCiAgICAgICAgICAgICAgICBpIC0gMSk7CiAgICAgICAgICB9CiAgICAgICAgICB2YWx1ZSA9IHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlclJ1bmU7CiAgICAgICAgICBleHBlY3RlZFVuaXRzID0gZXh0cmFVbml0cyA9IDA7CiAgICAgICAgICBfaXNGaXJzdENoYXJhY3RlciA9IGZhbHNlOwogICAgICAgICAgX3N0cmluZ1Npbmsud3JpdGVDaGFyQ29kZSh2YWx1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cnQ6aXNvbGF0ZScgc2hvdyBJc29sYXRlLCBSYXdSZWNlaXZlUG9ydCwgU2VuZFBvcnQ7CgpwYXJ0ICdleHRlbnNpb24uZGFydCc7CnBhcnQgJ3Byb2ZpbGVyLmRhcnQnOwpwYXJ0ICdzZXJ2aWNlLmRhcnQnOwpwYXJ0ICd0aW1lbGluZS5kYXJ0JzsKCi8vLyBJZiBbd2hlbl0gaXMgdHJ1ZSwgc3RvcCB0aGUgcHJvZ3JhbSBhcyBpZiBhIGJyZWFrcG9pbnQgd2VyZSBoaXQgYXQgdGhlCi8vLyBmb2xsb3dpbmcgc3RhdGVtZW50LgovLy8KLy8vIFJldHVybnMgdGhlIHZhbHVlIG9mIFt3aGVuXS4gU29tZSBkZWJ1Z2dlcnMgbWF5IGRpc3BsYXkgW21lc3NhZ2VdLgovLy8KLy8vIE5PVEU6IFdoZW4gaW52b2tlZCwgdGhlIGlzb2xhdGUgd2lsbCBub3QgcmV0dXJuIHVudGlsIGEgZGVidWdnZXIKLy8vIGNvbnRpbnVlcyBleGVjdXRpb24uIFdoZW4gcnVubmluZyBpbiB0aGUgRGFydCBWTSwgdGhlIGJlaGF2aW91ciBpcyB0aGUgc2FtZQovLy8gcmVnYXJkbGVzcyBvZiB3aGV0aGVyIG9yIG5vdCBhIGRlYnVnZ2VyIGlzIGNvbm5lY3RlZC4gV2hlbiBjb21waWxlZCB0bwovLy8gSmF2YVNjcmlwdCwgdGhpcyB1c2VzIHRoZSAiZGVidWdnZXIiIHN0YXRlbWVudCwgYW5kIGJlaGF2ZXMgZXhhY3RseSBhcwovLy8gdGhhdCBkb2VzLgpleHRlcm5hbCBib29sIGRlYnVnZ2VyKHtib29sIHdoZW46IHRydWUsIFN0cmluZyBtZXNzYWdlfSk7CgovLy8gU2VuZCBhIHJlZmVyZW5jZSB0byBbb2JqZWN0XSB0byBhbnkgYXR0YWNoZWQgZGVidWdnZXJzLgovLy8KLy8vIERlYnVnZ2VycyBtYXkgb3BlbiBhbiBpbnNwZWN0b3Igb24gdGhlIG9iamVjdC4gUmV0dXJucyB0aGUgYXJndW1lbnQuCmV4dGVybmFsIE9iamVjdCBpbnNwZWN0KE9iamVjdCBvYmplY3QpOwoKLy8vIEVtaXQgYSBsb2cgZXZlbnQuCi8vLwovLy8gVGhpcyBmdW5jdGlvbiB3YXMgZGVzaWduZWQgdG8gbWFwIGNsb3NlbHkgdG8gdGhlIGxvZ2dpbmcgaW5mb3JtYXRpb24KLy8vIGNvbGxlY3RlZCBieSBgcGFja2FnZTpsb2dnaW5nYC4KLy8vCi8vLyAtIFttZXNzYWdlXSBpcyB0aGUgbG9nIG1lc3NhZ2UKLy8vIC0gW3RpbWVdIChvcHRpb25hbCkgaXMgdGhlIHRpbWVzdGFtcAovLy8gLSBbc2VxdWVuY2VOdW1iZXJdIChvcHRpb25hbCkgaXMgYSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgc2VxdWVuY2UgbnVtYmVyCi8vLyAtIFtsZXZlbF0gKG9wdGlvbmFsKSBpcyB0aGUgc2V2ZXJpdHkgbGV2ZWwgKGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAyMDAwKTsgc2VlCi8vLyAgIHRoZSBgcGFja2FnZTpsb2dnaW5nYCBgTGV2ZWxgIGNsYXNzIGZvciBhbiBvdmVydmlldyBvZiB0aGUgcG9zc2libGUgdmFsdWVzCi8vLyAtIFtuYW1lXSAob3B0aW9uYWwpIGlzIHRoZSBuYW1lIG9mIHRoZSBzb3VyY2Ugb2YgdGhlIGxvZyBtZXNzYWdlCi8vLyAtIFt6b25lXSAob3B0aW9uYWwpIHRoZSB6b25lIHdoZXJlIHRoZSBsb2cgd2FzIGVtaXR0ZWQKLy8vIC0gW2Vycm9yXSAob3B0aW9uYWwpIGFuIGVycm9yIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBsb2cgZXZlbnQKLy8vIC0gW3N0YWNrVHJhY2VdIChvcHRpb25hbCkgYSBzdGFjayB0cmFjZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBsb2cgZXZlbnQKZXh0ZXJuYWwgdm9pZCBsb2coCiAgU3RyaW5nIG1lc3NhZ2UsIHsKICBEYXRlVGltZSB0aW1lLAogIGludCBzZXF1ZW5jZU51bWJlciwKICBpbnQgbGV2ZWw6IDAsCiAgU3RyaW5nIG5hbWU6ICcnLAogIFpvbmUgem9uZSwKICBPYmplY3QgZXJyb3IsCiAgU3RhY2tUcmFjZSBzdGFja1RyYWNlLAp9KTsKRQBOTjwBRgRMRhAEJgQhBBUYARUXPgEXFhUWAUsZBEcERVBLSw87ATwESSgBFgRJJAQjKVBRUUU7SEsTFBEWEBMNEBkEAQ5kYXJ0OmRldmVsb3BlcjRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvZGV2ZWxvcGVyL2V4dGVuc2lvbi5kYXJ0l6kvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmRldmVsb3BlcjsKCi8vLyBBIHJlc3BvbnNlIHRvIGEgc2VydmljZSBwcm90b2NvbCBleHRlbnNpb24gUlBDLgovLy8KLy8vIElmIHRoZSBSUEMgd2FzIHN1Y2Nlc3NmdWwsIHVzZSBbU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLnJlc3VsdF0sIG90aGVyd2lzZQovLy8gdXNlIFtTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UuZXJyb3JdLgpjbGFzcyBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UgewogIC8vLyBUaGUgcmVzdWx0IG9mIGEgc3VjY2Vzc2Z1bCBzZXJ2aWNlIHByb3RvY29sIGV4dGVuc2lvbiBSUEMuCiAgZmluYWwgU3RyaW5nIHJlc3VsdDsKCiAgLy8vIFRoZSBlcnJvciBjb2RlIGFzc29jaWF0ZWQgd2l0aCBhIGZhaWxlZCBzZXJ2aWNlIHByb3RvY29sIGV4dGVuc2lvbiBSUEMuCiAgZmluYWwgaW50IGVycm9yQ29kZTsKCiAgLy8vIFRoZSBkZXRhaWxzIG9mIGEgZmFpbGVkIHNlcnZpY2UgcHJvdG9jb2wgZXh0ZW5zaW9uIFJQQy4KICBmaW5hbCBTdHJpbmcgZXJyb3JEZXRhaWw7CgogIC8vLyBDcmVhdGVzIGEgc3VjY2Vzc2Z1bCByZXNwb25zZSB0byBhIHNlcnZpY2UgcHJvdG9jb2wgZXh0ZW5zaW9uIFJQQy4KICAvLy8KICAvLy8gUmVxdWlyZXMgW3Jlc3VsdF0gdG8gYmUgYSBKU09OIG9iamVjdCBlbmNvZGVkIGFzIGEgc3RyaW5nLiBXaGVuIGZvcm1pbmcKICAvLy8gdGhlIEpTT04tUlBDIG1lc3NhZ2UgW3Jlc3VsdF0gd2lsbCBiZSBpbmxpbmVkIGRpcmVjdGx5LgogIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5yZXN1bHQoU3RyaW5nIHJlc3VsdCkKICAgICAgOiByZXN1bHQgPSByZXN1bHQsCiAgICAgICAgZXJyb3JDb2RlID0gbnVsbCwKICAgICAgICBlcnJvckRldGFpbCA9IG51bGwgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwocmVzdWx0LCAicmVzdWx0Iik7CiAgfQoKICAvLy8gQ3JlYXRlcyBhbiBlcnJvciByZXNwb25zZSB0byBhIHNlcnZpY2UgcHJvdG9jb2wgZXh0ZW5zaW9uIFJQQy4KICAvLy8KICAvLy8gUmVxdWlyZXMgW2Vycm9yQ29kZV0gdG8gYmUgW2ludmFsaWRQYXJhbXNdIG9yIGJldHdlZW4gW2V4dGVuc2lvbkVycm9yTWluXQogIC8vLyBhbmQgW2V4dGVuc2lvbkVycm9yTWF4XS4gUmVxdWlyZXMgW2Vycm9yRGV0YWlsXSB0byBiZSBhIEpTT04gb2JqZWN0CiAgLy8vIGVuY29kZWQgYXMgYSBzdHJpbmcuIFdoZW4gZm9ybWluZyB0aGUgSlNPTi1SUEMgbWVzc2FnZSBbZXJyb3JEZXRhaWxdIHdpbGwKICAvLy8gYmUgaW5saW5lZCBkaXJlY3RseS4KICBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UuZXJyb3IoaW50IGVycm9yQ29kZSwgU3RyaW5nIGVycm9yRGV0YWlsKQogICAgICA6IHJlc3VsdCA9IG51bGwsCiAgICAgICAgZXJyb3JDb2RlID0gZXJyb3JDb2RlLAogICAgICAgIGVycm9yRGV0YWlsID0gZXJyb3JEZXRhaWwgewogICAgX3ZhbGlkYXRlRXJyb3JDb2RlKGVycm9yQ29kZSk7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChlcnJvckRldGFpbCwgImVycm9yRGV0YWlsIik7CiAgfQoKICAvLy8gSW52YWxpZCBtZXRob2QgcGFyYW1ldGVyKHMpIGVycm9yIGNvZGUuCiAgQGRlcHJlY2F0ZWQKICBzdGF0aWMgY29uc3Qga0ludmFsaWRQYXJhbXMgPSBpbnZhbGlkUGFyYW1zOwoKICAvLy8gR2VuZXJpYyBleHRlbnNpb24gZXJyb3IgY29kZS4KICBAZGVwcmVjYXRlZAogIHN0YXRpYyBjb25zdCBrRXh0ZW5zaW9uRXJyb3IgPSBleHRlbnNpb25FcnJvcjsKCiAgLy8vIE1heGltdW0gZXh0ZW5zaW9uIHByb3ZpZGVkIGVycm9yIGNvZGUuCiAgQGRlcHJlY2F0ZWQKICBzdGF0aWMgY29uc3Qga0V4dGVuc2lvbkVycm9yTWF4ID0gZXh0ZW5zaW9uRXJyb3JNYXg7CgogIC8vLyBNaW5pbXVtIGV4dGVuc2lvbiBwcm92aWRlZCBlcnJvciBjb2RlLgogIEBkZXByZWNhdGVkCiAgc3RhdGljIGNvbnN0IGtFeHRlbnNpb25FcnJvck1pbiA9IGV4dGVuc2lvbkVycm9yTWluOwoKICAvLy8gSW52YWxpZCBtZXRob2QgcGFyYW1ldGVyKHMpIGVycm9yIGNvZGUuCiAgc3RhdGljIGNvbnN0IGludmFsaWRQYXJhbXMgPSAtMzI2MDI7CgogIC8vLyBHZW5lcmljIGV4dGVuc2lvbiBlcnJvciBjb2RlLgogIHN0YXRpYyBjb25zdCBleHRlbnNpb25FcnJvciA9IC0zMjAwMDsKCiAgLy8vIE1heGltdW0gZXh0ZW5zaW9uIHByb3ZpZGVkIGVycm9yIGNvZGUuCiAgc3RhdGljIGNvbnN0IGV4dGVuc2lvbkVycm9yTWF4ID0gLTMyMDAwOwoKICAvLy8gTWluaW11bSBleHRlbnNpb24gcHJvdmlkZWQgZXJyb3IgY29kZS4KICBzdGF0aWMgY29uc3QgZXh0ZW5zaW9uRXJyb3JNaW4gPSAtMzIwMTY7CgogIHN0YXRpYyBTdHJpbmcgX2Vycm9yQ29kZU1lc3NhZ2UoaW50IGVycm9yQ29kZSkgewogICAgX3ZhbGlkYXRlRXJyb3JDb2RlKGVycm9yQ29kZSk7CiAgICBpZiAoZXJyb3JDb2RlID09IGludmFsaWRQYXJhbXMpIHsKICAgICAgcmV0dXJuICJJbnZhbGlkIHBhcmFtcyI7CiAgICB9CiAgICByZXR1cm4gIlNlcnZlciBlcnJvciI7CiAgfQoKICBzdGF0aWMgX3ZhbGlkYXRlRXJyb3JDb2RlKGludCBlcnJvckNvZGUpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGVycm9yQ29kZSwgImVycm9yQ29kZSIpOwogICAgaWYgKGVycm9yQ29kZSA9PSBpbnZhbGlkUGFyYW1zKSByZXR1cm47CiAgICBpZiAoKGVycm9yQ29kZSA+PSBleHRlbnNpb25FcnJvck1pbikgJiYgKGVycm9yQ29kZSA8PSBleHRlbnNpb25FcnJvck1heCkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUoZXJyb3JDb2RlLCAiZXJyb3JDb2RlIiwgIk91dCBvZiByYW5nZSIpOwogIH0KCiAgLy8vIERldGVybWluZXMgaWYgdGhpcyByZXNwb25zZSByZXByZXNlbnRzIGFuIGVycm9yLgogIGJvb2wgaXNFcnJvcigpID0+IChlcnJvckNvZGUgIT0gbnVsbCkgJiYgKGVycm9yRGV0YWlsICE9IG51bGwpOwoKICAvLyBpZ25vcmU6IHVudXNlZF9lbGVtZW50LCBjYWxsZWQgZnJvbSBydW50aW1lL2xpYi9kZXZlbG9wZXIuZGFydAogIFN0cmluZyBfdG9TdHJpbmcoKSB7CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChlcnJvckNvZGUgIT0gbnVsbCk7CiAgICAgIGFzc2VydChlcnJvckRldGFpbCAhPSBudWxsKTsKICAgICAgcmV0dXJuIGpzb24uZW5jb2RlKHsKICAgICAgICAnY29kZSc6IGVycm9yQ29kZSwKICAgICAgICAnbWVzc2FnZSc6IF9lcnJvckNvZGVNZXNzYWdlKGVycm9yQ29kZSksCiAgICAgICAgJ2RhdGEnOiB7J2RldGFpbHMnOiBlcnJvckRldGFpbH0KICAgICAgfSk7CiAgICB9CiAgfQp9CgovLy8gQSBzZXJ2aWNlIHByb3RvY29sIGV4dGVuc2lvbiBoYW5kbGVyLiBSZWdpc3RlcmVkIHdpdGggW3JlZ2lzdGVyRXh0ZW5zaW9uXS4KLy8vCi8vLyBNdXN0IGNvbXBsZXRlIHRvIGEgW1NlcnZpY2VFeHRlbnNpb25SZXNwb25zZV0uIFttZXRob2RdIGlzIHRoZSBtZXRob2QgbmFtZQovLy8gb2YgdGhlIHNlcnZpY2UgcHJvdG9jb2wgcmVxdWVzdCwgYW5kIFtwYXJhbWV0ZXJzXSBpcyBhIG1hcCBob2xkaW5nIHRoZQovLy8gcGFyYW1ldGVycyB0byB0aGUgc2VydmljZSBwcm90b2NvbCByZXF1ZXN0LgovLy8KLy8vICpOT1RFKjogYWxsIHBhcmFtZXRlciBuYW1lcyBhbmQgdmFsdWVzIGFyZSBlbmNvZGVkIGFzIHN0cmluZ3MuCnR5cGVkZWYgRnV0dXJlPFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZT4gU2VydmljZUV4dGVuc2lvbkhhbmRsZXIoCiAgICBTdHJpbmcgbWV0aG9kLCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnMpOwoKLy8vIFJlZ2lzdGVyIGEgW1NlcnZpY2VFeHRlbnNpb25IYW5kbGVyXSB0aGF0IHdpbGwgYmUgaW52b2tlZCBpbiB0aGlzIGlzb2xhdGUKLy8vIGZvciBbbWV0aG9kXS4gKk5PVEUqOiBTZXJ2aWNlIHByb3RvY29sIGV4dGVuc2lvbnMgbXVzdCBiZSByZWdpc3RlcmVkCi8vLyBpbiBlYWNoIGlzb2xhdGUuCi8vLwovLy8gKk5PVEUqOiBbbWV0aG9kXSBtdXN0IGJlZ2luIHdpdGggJ2V4dC4nIGFuZCB5b3Ugc2hvdWxkIHVzZSB0aGUgZm9sbG93aW5nCi8vLyBzdHJ1Y3R1cmUgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggb3RoZXIgcGFja2FnZXM6ICdleHQucGFja2FnZS5jb21tYW5kJy4KLy8vIFRoYXQgaXMsIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgJ2V4dC4nIHByZWZpeCwgc2hvdWxkIGJlIHRoZSByZWdpc3RlcmluZwovLy8gcGFja2FnZSBuYW1lIGZvbGxvd2VkIGJ5IGFub3RoZXIgcGVyaW9kICgnLicpIGFuZCB0aGVuIHRoZSBjb21tYW5kIG5hbWUuCi8vLyBGb3IgZXhhbXBsZTogJ2V4dC5kYXJ0LmlvLmdldE9wZW5GaWxlcycuCi8vLwovLy8gQmVjYXVzZSBzZXJ2aWNlIGV4dGVuc2lvbnMgYXJlIGlzb2xhdGUgc3BlY2lmaWMsIGNsaWVudHMgdXNpbmcgZXh0ZW5zaW9ucwovLy8gbXVzdCBhbHdheXMgaW5jbHVkZSBhbiAnaXNvbGF0ZUlkJyBwYXJhbWV0ZXIgd2l0aCBlYWNoIFJQQy4Kdm9pZCByZWdpc3RlckV4dGVuc2lvbihTdHJpbmcgbWV0aG9kLCBTZXJ2aWNlRXh0ZW5zaW9uSGFuZGxlciBoYW5kbGVyKSB7CiAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobWV0aG9kLCAnbWV0aG9kJyk7CiAgaWYgKCFtZXRob2Quc3RhcnRzV2l0aCgnZXh0LicpKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShtZXRob2QsICdtZXRob2QnLCAnTXVzdCBiZWdpbiB3aXRoIGV4dC4nKTsKICB9CiAgaWYgKF9sb29rdXBFeHRlbnNpb24obWV0aG9kKSAhPSBudWxsKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignRXh0ZW5zaW9uIGFscmVhZHkgcmVnaXN0ZXJlZDogJG1ldGhvZCcpOwogIH0KICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChoYW5kbGVyLCAnaGFuZGxlcicpOwogIF9yZWdpc3RlckV4dGVuc2lvbihtZXRob2QsIGhhbmRsZXIpOwp9CgovLy8gUG9zdCBhbiBldmVudCBvZiBbZXZlbnRLaW5kXSB3aXRoIHBheWxvYWQgb2YgW2V2ZW50RGF0YV0gdG8gdGhlIGBFeHRlbnNpb25gCi8vLyBldmVudCBzdHJlYW0uCnZvaWQgcG9zdEV2ZW50KFN0cmluZyBldmVudEtpbmQsIE1hcCBldmVudERhdGEpIHsKICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChldmVudEtpbmQsICdldmVudEtpbmQnKTsKICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChldmVudERhdGEsICdldmVudERhdGEnKTsKICBTdHJpbmcgZXZlbnREYXRhQXNTdHJpbmcgPSBqc29uLmVuY29kZShldmVudERhdGEpOwogIF9wb3N0RXZlbnQoZXZlbnRLaW5kLCBldmVudERhdGFBc1N0cmluZyk7Cn0KCmV4dGVybmFsIHZvaWQgX3Bvc3RFdmVudChTdHJpbmcgZXZlbnRLaW5kLCBTdHJpbmcgZXZlbnREYXRhKTsKCi8vIEJvdGggb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSB3cml0dGVuIGluc2lkZSBDKysgdG8gYXZvaWQgdXBkYXRpbmcgdGhlIGRhdGEKLy8gc3RydWN0dXJlcyBpbiBEYXJ0LCBnZXR0aW5nIGFuIE9PQiwgYW5kIG9ic2VydmluZyBzdGFsZSBzdGF0ZS4gRG8gbm90IG1vdmUKLy8gdGhlc2UgaW50byBEYXJ0IGNvZGUgdW5sZXNzIHlvdSBjYW4gZW5zdXJlIHRoYXQgdGhlIG9wZXJhdGlvbnMgd2lsbCBjYW4gYmUKLy8gZG9uZSBhdG9taWNhbGx5LiBOYXRpdmUgY29kZSBsaXZlcyBpbiB2bS9pc29sYXRlLmNjLQovLyBMb29rdXBTZXJ2aWNlRXh0ZW5zaW9uSGFuZGxlciBhbmQgUmVnaXN0ZXJTZXJ2aWNlRXh0ZW5zaW9uSGFuZGxlci4KZXh0ZXJuYWwgU2VydmljZUV4dGVuc2lvbkhhbmRsZXIgX2xvb2t1cEV4dGVuc2lvbihTdHJpbmcgbWV0aG9kKTsKZXh0ZXJuYWwgX3JlZ2lzdGVyRXh0ZW5zaW9uKFN0cmluZyBtZXRob2QsIFNlcnZpY2VFeHRlbnNpb25IYW5kbGVyIGhhbmRsZXIpOwqAowBOTjwBGAE0BFAqIUEXAU4XAT4cAUkGTj4xGRodMgQBRQZQSlAbRBcfJCM8BAEuDi8BJA4xAS0ONwEtDjcBLicBJCgBLSsBLSsBMyMmHwYbBAEtOCxQDgZLBAE3QgFEFxoVDSEjGxsxKQoGBAIBTwRPSzAEQ0I0AU5JFQRNTVBNLQROQEkwJE0EKkYEMicCAVASMjY2NSwCAT4BTU5OOEZCTQEdZGFydDpkZXZlbG9wZXIvZXh0ZW5zaW9uLmRhcnQzb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2RldmVsb3Blci90aW1lbGluZS5kYXJ0qngvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmRldmVsb3BlcjsKCmNvbnN0IGJvb2wgX2hhc1RpbWVsaW5lID0KICAgIGNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCJkYXJ0LmRldmVsb3Blci50aW1lbGluZSIsIGRlZmF1bHRWYWx1ZTogdHJ1ZSk7CgovLy8gQSB0eXBlZGVmIGZvciB0aGUgZnVuY3Rpb24gYXJndW1lbnQgdG8gW1RpbWVsaW5lLnRpbWVTeW5jXS4KdHlwZWRlZiBUaW1lbGluZVN5bmNGdW5jdGlvbjxUPiA9IFQgRnVuY3Rpb24oKTsKCi8vIFRPRE86IFRoaXMgdHlwZWRlZiBpcyBub3QgdXNlZC4KdHlwZWRlZiBGdXR1cmUgVGltZWxpbmVBc3luY0Z1bmN0aW9uKCk7CgovLy8gQSBjbGFzcyB0byByZXByZXNlbnQgRmxvdyBldmVudHMuCi8vLwovLy8gW0Zsb3ddIG9iamVjdHMgYXJlIHVzZWQgdG8gdGhyZWFkIGZsb3cgZXZlbnRzIGJldHdlZW4gdGltZWxpbmUgc2xpY2VzLAovLy8gZm9yIGV4YW1wbGUsIHRob3NlIGNyZWF0ZWQgd2l0aCB0aGUgW1RpbWVsaW5lXSBjbGFzcyBiZWxvdy4gQWRkaW5nCi8vLyBbRmxvd10gb2JqZWN0cyBjYXVzZSBhcnJvd3MgdG8gYmUgZHJhd24gYmV0d2VlbiBzbGljZXMgaW4gQ2hyb21lJ3MgdHJhY2UKLy8vIHZpZXdlci4gVGhlIGFycm93cyBzdGFydCBhdCBlLmcgW1RpbWVsaW5lXSBldmVudHMgdGhhdCBhcmUgcGFzc2VkIGEKLy8vIFtGbG93LmJlZ2luXSBvYmplY3QsIGdvIHRocm91Z2ggW1RpbWVsaW5lXSBldmVudHMgdGhhdCBhcmUgcGFzc2VkIGEKLy8vIFtGbG93LnN0ZXBdIG9iamVjdCwgYW5kIGVuZCBhdCBbVGltZWxpbmVdIGV2ZW50cyB0aGF0IGFyZSBwYXNzZWQgYQovLy8gW0Zsb3cuZW5kXSBvYmplY3QsIGFsbCBoYXZpbmcgdGhlIHNhbWUgW0Zsb3cuaWRdLiBGb3IgZXhhbXBsZToKLy8vCi8vLyBgYGBkYXJ0Ci8vLyB2YXIgZmxvdyA9IEZsb3cuYmVnaW4oKTsKLy8vIFRpbWVsaW5lLnRpbWVTeW5jKCdmbG93X3Rlc3QnLCAoKSB7Ci8vLyAgIGRvU29tZXRoaW5nKCk7Ci8vLyB9LCBmbG93OiBmbG93KTsKLy8vCi8vLyBUaW1lbGluZS50aW1lU3luYygnZmxvd190ZXN0JywgKCkgewovLy8gICBkb1NvbWV0aGluZygpOwovLy8gfSwgZmxvdzogRmxvdy5zdGVwKGZsb3cuaWQpKTsKLy8vCi8vLyBUaW1lbGluZS50aW1lU3luYygnZmxvd190ZXN0JywgKCkgewovLy8gICBkb1NvbWV0aGluZygpOwovLy8gfSwgZmxvdzogRmxvdy5lbmQoZmxvdy5pZCkpOwovLy8gYGBgCmNsYXNzIEZsb3cgewogIC8vIFRoZXNlIHZhbHVlcyBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBlbnVtICJFdmVudFR5cGUiIGluCiAgLy8gcnVudGltZS92bS90aW1lbGluZS5oLgogIHN0YXRpYyBjb25zdCBpbnQgX2JlZ2luID0gOTsKICBzdGF0aWMgY29uc3QgaW50IF9zdGVwID0gMTA7CiAgc3RhdGljIGNvbnN0IGludCBfZW5kID0gMTE7CgogIGZpbmFsIGludCBfdHlwZTsKCiAgLy8vIFRoZSBmbG93IGlkIG9mIHRoZSBmbG93IGV2ZW50LgogIGZpbmFsIGludCBpZDsKCiAgRmxvdy5fKHRoaXMuX3R5cGUsIHRoaXMuaWQpOwoKICAvLy8gQSAiYmVnaW4iIEZsb3cgZXZlbnQuCiAgLy8vCiAgLy8vIFdoZW4gcGFzc2VkIHRvIGEgW1RpbWVsaW5lXSBtZXRob2QsIGdlbmVyYXRlcyBhICJiZWdpbiIgRmxvdyBldmVudC4KICAvLy8gSWYgW2lkXSBpcyBub3QgcHJvdmlkZWQsIGFuIGlkIHRoYXQgY29uZmxpY3RzIHdpdGggbm8gb3RoZXIgRGFydC1nZW5lcmF0ZWQKICAvLy8gZmxvdyBpZCdzIHdpbGwgYmUgZ2VuZXJhdGVkLgogIHN0YXRpYyBGbG93IGJlZ2luKHtpbnQgaWR9KSB7CiAgICByZXR1cm4gbmV3IEZsb3cuXyhfYmVnaW4sIGlkID8/IF9nZXROZXh0QXN5bmNJZCgpKTsKICB9CgogIC8vLyBBICJzdGVwIiBGbG93IGV2ZW50LgogIC8vLwogIC8vLyBXaGVuIHBhc3NlZCB0byBhIFtUaW1lbGluZV0gbWV0aG9kLCBnZW5lcmF0ZXMgYSAic3RlcCIgRmxvdyBldmVudC4KICAvLy8gVGhlIFtpZF0gYXJndW1lbnQgaXMgcmVxdWlyZWQuIEl0IGNhbiBjb21lIGVpdGhlciBmcm9tIGFub3RoZXIgW0Zsb3ddCiAgLy8vIGV2ZW50LCBvciBzb21lIGlkIHRoYXQgY29tZXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuCiAgc3RhdGljIEZsb3cgc3RlcChpbnQgaWQpID0+IG5ldyBGbG93Ll8oX3N0ZXAsIGlkKTsKCiAgLy8vIEFuICJlbmQiIEZsb3cgZXZlbnQuCiAgLy8vCiAgLy8vIFdoZW4gcGFzc2VkIHRvIGEgW1RpbWVsaW5lXSBtZXRob2QsIGdlbmVyYXRlcyBhICJlbmQiIEZsb3cgZXZlbnQuCiAgLy8vIFRoZSBbaWRdIGFyZ3VtZW50IGlzIHJlcXVpcmVkLiBJdCBjYW4gY29tZSBlaXRoZXIgZnJvbSBhbm90aGVyIFtGbG93XQogIC8vLyBldmVudCwgb3Igc29tZSBpZCB0aGF0IGNvbWVzIGZyb20gdGhlIGVudmlyb25tZW50LgogIHN0YXRpYyBGbG93IGVuZChpbnQgaWQpID0+IG5ldyBGbG93Ll8oX2VuZCwgaWQpOwp9CgovLy8gQWRkIHRvIHRoZSB0aW1lbGluZS4KLy8vCi8vLyBbVGltZWxpbmVdJ3MgbWV0aG9kcyBhZGQgc3luY2hyb25vdXMgZXZlbnRzIHRvIHRoZSB0aW1lbGluZS4gV2hlbgovLy8gZ2VuZXJhdGluZyBhIHRpbWVsaW5lIGluIENocm9tZSdzIHRyYWNpbmcgZm9ybWF0LCB1c2luZyBbVGltZWxpbmVdIGdlbmVyYXRlcwovLy8gIkNvbXBsZXRlIiBldmVudHMuIFtUaW1lbGluZV0ncyBbc3RhcnRTeW5jXSBhbmQgW2ZpbmlzaFN5bmNdIGNhbiBiZSB1c2VkCi8vLyBleHBsaWNpdGx5LCBvciBpbXBsaWNpdGx5IGJ5IHdyYXBwaW5nIGEgY2xvc3VyZSBpbiBbdGltZVN5bmNdLiBGb3IgZXhhbXBsZToKLy8vCi8vLyBgYGBkYXJ0Ci8vLyBUaW1lbGluZS5zdGFydFN5bmMoIkRvaW5nIFNvbWV0aGluZyIpOwovLy8gZG9Tb21ldGhpbmcoKTsKLy8vIFRpbWVsaW5lLmZpbmlzaFN5bmMoKTsKLy8vIGBgYAovLy8KLy8vIE9yOgovLy8KLy8vIGBgYGRhcnQKLy8vIFRpbWVsaW5lLnRpbWVTeW5jKCJEb2luZyBTb21ldGhpbmciLCAoKSB7Ci8vLyAgIGRvU29tZXRoaW5nKCk7Ci8vLyB9KTsKLy8vIGBgYApjbGFzcyBUaW1lbGluZSB7CiAgLy8vIFN0YXJ0IGEgc3luY2hyb25vdXMgb3BlcmF0aW9uIGxhYmVsZWQgW25hbWVdLiBPcHRpb25hbGx5IHRha2VzCiAgLy8vIGEgW01hcF0gb2YgW2FyZ3VtZW50c10uIFRoaXMgc2xpY2UgbWF5IGFsc28gb3B0aW9uYWxseSBiZSBhc3NvY2lhdGVkIHdpdGgKICAvLy8gYSBbRmxvd10gZXZlbnQuIFRoaXMgb3BlcmF0aW9uIG11c3QgYmUgZmluaXNoZWQgYmVmb3JlCiAgLy8vIHJldHVybmluZyB0byB0aGUgZXZlbnQgcXVldWUuCiAgc3RhdGljIHZvaWQgc3RhcnRTeW5jKFN0cmluZyBuYW1lLCB7TWFwIGFyZ3VtZW50cywgRmxvdyBmbG93fSkgewogICAgaWYgKCFfaGFzVGltZWxpbmUpIHJldHVybjsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKG5hbWUsICduYW1lJyk7CiAgICBpZiAoIV9pc0RhcnRTdHJlYW1FbmFibGVkKCkpIHsKICAgICAgLy8gUHVzaCBhIG51bGwgb250byB0aGUgc3RhY2sgYW5kIHJldHVybi4KICAgICAgX3N0YWNrLmFkZChudWxsKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIGJsb2NrID0gbmV3IF9TeW5jQmxvY2suXyhuYW1lLCBfZ2V0VHJhY2VDbG9jaygpLCBfZ2V0VGhyZWFkQ3B1Q2xvY2soKSk7CiAgICBpZiAoYXJndW1lbnRzICE9IG51bGwpIHsKICAgICAgYmxvY2suX2FyZ3VtZW50cyA9IGFyZ3VtZW50czsKICAgIH0KICAgIGlmIChmbG93ICE9IG51bGwpIHsKICAgICAgYmxvY2suZmxvdyA9IGZsb3c7CiAgICB9CiAgICBfc3RhY2suYWRkKGJsb2NrKTsKICB9CgogIC8vLyBGaW5pc2ggdGhlIGxhc3Qgc3luY2hyb25vdXMgb3BlcmF0aW9uIHRoYXQgd2FzIHN0YXJ0ZWQuCiAgc3RhdGljIHZvaWQgZmluaXNoU3luYygpIHsKICAgIGlmICghX2hhc1RpbWVsaW5lKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChfc3RhY2subGVuZ3RoID09IDApIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoJ1VuZXZlbiBjYWxscyB0byBzdGFydFN5bmMgYW5kIGZpbmlzaFN5bmMnKTsKICAgIH0KICAgIC8vIFBvcCB0b3AgaXRlbSBvZmYgb2Ygc3RhY2suCiAgICB2YXIgYmxvY2sgPSBfc3RhY2sucmVtb3ZlTGFzdCgpOwogICAgaWYgKGJsb2NrID09IG51bGwpIHsKICAgICAgLy8gRGFydCBzdHJlYW0gd2FzIGRpc2FibGVkIHdoZW4gc3RhcnRTeW5jIHdhcyBjYWxsZWQuCiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIEZpbmlzaCBpdC4KICAgIGJsb2NrLmZpbmlzaCgpOwogIH0KCiAgLy8vIEVtaXQgYW4gaW5zdGFudCBldmVudC4KICBzdGF0aWMgdm9pZCBpbnN0YW50U3luYyhTdHJpbmcgbmFtZSwge01hcCBhcmd1bWVudHN9KSB7CiAgICBpZiAoIV9oYXNUaW1lbGluZSkgcmV0dXJuOwogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobmFtZSwgJ25hbWUnKTsKICAgIGlmICghX2lzRGFydFN0cmVhbUVuYWJsZWQoKSkgewogICAgICAvLyBTdHJlYW0gaXMgZGlzYWJsZWQuCiAgICAgIHJldHVybjsKICAgIH0KICAgIE1hcCBpbnN0YW50QXJndW1lbnRzOwogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGluc3RhbnRBcmd1bWVudHMgPSBuZXcgTWFwLmZyb20oYXJndW1lbnRzKTsKICAgIH0KICAgIF9yZXBvcnRJbnN0YW50RXZlbnQoCiAgICAgICAgX2dldFRyYWNlQ2xvY2soKSwgJ0RhcnQnLCBuYW1lLCBfYXJndW1lbnRzQXNKc29uKGluc3RhbnRBcmd1bWVudHMpKTsKICB9CgogIC8vLyBBIHV0aWxpdHkgbWV0aG9kIHRvIHRpbWUgYSBzeW5jaHJvbm91cyBbZnVuY3Rpb25dLiBJbnRlcm5hbGx5IGNhbGxzCiAgLy8vIFtmdW5jdGlvbl0gYnJhY2tldGVkIGJ5IGNhbGxzIHRvIFtzdGFydFN5bmNdIGFuZCBbZmluaXNoU3luY10uCiAgc3RhdGljIFQgdGltZVN5bmM8VD4oU3RyaW5nIG5hbWUsIFRpbWVsaW5lU3luY0Z1bmN0aW9uPFQ+IGZ1bmN0aW9uLAogICAgICB7TWFwIGFyZ3VtZW50cywgRmxvdyBmbG93fSkgewogICAgc3RhcnRTeW5jKG5hbWUsIGFyZ3VtZW50czogYXJndW1lbnRzLCBmbG93OiBmbG93KTsKICAgIHRyeSB7CiAgICAgIHJldHVybiBmdW5jdGlvbigpOwogICAgfSBmaW5hbGx5IHsKICAgICAgZmluaXNoU3luYygpOwogICAgfQogIH0KCiAgLy8vIFRoZSBjdXJyZW50IHRpbWUgc3RhbXAgZnJvbSB0aGUgY2xvY2sgdXNlZCBieSB0aGUgdGltZWxpbmUuIFVuaXRzIGFyZQogIC8vLyBtaWNyb3NlY29uZHMuCiAgLy8vCiAgLy8vIFdoZW4gcnVuIG9uIHRoZSBEYXJ0IFZNLCB1c2VzIHRoZSBzYW1lIG1vbm90b25pYyBjbG9jayBhcyB0aGUgZW1iZWRkaW5nCiAgLy8vIEFQSSdzIGBEYXJ0X1RpbWVsaW5lR2V0TWljcm9zYC4KICBzdGF0aWMgaW50IGdldCBub3cgPT4gX2dldFRyYWNlQ2xvY2soKTsKICBzdGF0aWMgZmluYWwgTGlzdDxfU3luY0Jsb2NrPiBfc3RhY2sgPSBuZXcgTGlzdDxfU3luY0Jsb2NrPigpOwp9CgovLy8gQW4gYXN5bmNocm9ub3VzIHRhc2sgb24gdGhlIHRpbWVsaW5lLiBBbiBhc3luY2hyb25vdXMgdGFzayBjYW4gaGF2ZSBtYW55Ci8vLyAobmVzdGVkKSBzeW5jaHJvbm91cyBvcGVyYXRpb25zLiBTeW5jaHJvbm91cyBvcGVyYXRpb25zIGNhbiBsaXZlIGxvbmdlciB0aGFuCi8vLyB0aGUgY3VycmVudCBpc29sYXRlIGV2ZW50LiBUbyBwYXNzIGEgW1RpbWVsaW5lVGFza10gdG8gYW5vdGhlciBpc29sYXRlLAovLy8geW91IG11c3QgZmlyc3QgY2FsbCBbcGFzc10gdG8gZ2V0IHRoZSB0YXNrIGlkIGFuZCB0aGVuIGNvbnN0cnVjdCBhIG5ldwovLy8gW1RpbWVsaW5lVGFza10gaW4gdGhlIG90aGVyIGlzb2xhdGUuCmNsYXNzIFRpbWVsaW5lVGFzayB7CiAgLy8vIENyZWF0ZSBhIHRhc2suIFRoZSB0YXNrIElEIHdpbGwgYmUgc2V0IGJ5IHRoZSBzeXN0ZW0uCiAgVGltZWxpbmVUYXNrKCkgOiBfdGFza0lkID0gX2dldE5leHRBc3luY0lkKCkge30KCiAgLy8vIENyZWF0ZSBhIHRhc2sgd2l0aCBhbiBleHBsaWNpdCBbdGFza0lkXS4gVGhpcyBpcyB1c2VmdWwgaWYgeW91IGFyZQogIC8vLyBwYXNzaW5nIGEgdGFzayBmcm9tIG9uZSBpc29sYXRlIHRvIGFub3RoZXIuCiAgVGltZWxpbmVUYXNrLndpdGhUYXNrSWQoaW50IHRhc2tJZCkgOiBfdGFza0lkID0gdGFza0lkIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKHRhc2tJZCwgJ3Rhc2tJZCcpOwogIH0KCiAgLy8vIFN0YXJ0IGEgc3luY2hyb25vdXMgb3BlcmF0aW9uIHdpdGhpbiB0aGlzIHRhc2sgbmFtZWQgW25hbWVdLgogIC8vLyBPcHRpb25hbGx5IHRha2VzIGEgW01hcF0gb2YgW2FyZ3VtZW50c10uCiAgdm9pZCBzdGFydChTdHJpbmcgbmFtZSwge01hcCBhcmd1bWVudHN9KSB7CiAgICBpZiAoIV9oYXNUaW1lbGluZSkgcmV0dXJuOwogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobmFtZSwgJ25hbWUnKTsKICAgIHZhciBibG9jayA9IG5ldyBfQXN5bmNCbG9jay5fKG5hbWUsIF90YXNrSWQpOwogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGJsb2NrLl9hcmd1bWVudHMgPSBhcmd1bWVudHM7CiAgICB9CiAgICBfc3RhY2suYWRkKGJsb2NrKTsKICAgIGJsb2NrLl9zdGFydCgpOwogIH0KCiAgLy8vIEVtaXQgYW4gaW5zdGFudCBldmVudCBmb3IgdGhpcyB0YXNrLgogIHZvaWQgaW5zdGFudChTdHJpbmcgbmFtZSwge01hcCBhcmd1bWVudHN9KSB7CiAgICBpZiAoIV9oYXNUaW1lbGluZSkgcmV0dXJuOwogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobmFtZSwgJ25hbWUnKTsKICAgIE1hcCBpbnN0YW50QXJndW1lbnRzOwogICAgaWYgKGFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGluc3RhbnRBcmd1bWVudHMgPSBuZXcgTWFwLmZyb20oYXJndW1lbnRzKTsKICAgIH0KICAgIF9yZXBvcnRUYXNrRXZlbnQoX2dldFRyYWNlQ2xvY2soKSwgX3Rhc2tJZCwgJ24nLCAnRGFydCcsIG5hbWUsCiAgICAgICAgX2FyZ3VtZW50c0FzSnNvbihpbnN0YW50QXJndW1lbnRzKSk7CiAgfQoKICAvLy8gRmluaXNoIHRoZSBsYXN0IHN5bmNocm9ub3VzIG9wZXJhdGlvbiB0aGF0IHdhcyBzdGFydGVkLgogIHZvaWQgZmluaXNoKCkgewogICAgaWYgKCFfaGFzVGltZWxpbmUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKF9zdGFjay5sZW5ndGggPT0gMCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcignVW5ldmVuIGNhbGxzIHRvIHN0YXJ0IGFuZCBmaW5pc2gnKTsKICAgIH0KICAgIC8vIFBvcCB0b3AgaXRlbSBvZmYgb2Ygc3RhY2suCiAgICB2YXIgYmxvY2sgPSBfc3RhY2sucmVtb3ZlTGFzdCgpOwogICAgYmxvY2suX2ZpbmlzaCgpOwogIH0KCiAgLy8vIFJldHJpZXZlIHRoZSBbVGltZWxpbmVUYXNrXSdzIHRhc2sgaWQuIFdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIHRoZQogIC8vLyBzdGFjayBpcyBub3QgZW1wdHkuCiAgaW50IHBhc3MoKSB7CiAgICBpZiAoX3N0YWNrLmxlbmd0aCA+IDApIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoCiAgICAgICAgICAnWW91IGNhbm5vdCBwYXNzIGEgVGltZWxpbmVUYXNrIHdpdGhvdXQgZmluaXNoaW5nIGFsbCBzdGFydGVkICcKICAgICAgICAgICdvcGVyYXRpb25zJyk7CiAgICB9CiAgICBpbnQgciA9IF90YXNrSWQ7CiAgICByZXR1cm4gcjsKICB9CgogIGZpbmFsIGludCBfdGFza0lkOwogIGZpbmFsIExpc3Q8X0FzeW5jQmxvY2s+IF9zdGFjayA9IFtdOwp9CgovLy8gQW4gYXN5bmNocm9ub3VzIGJsb2NrIG9mIHRpbWUgb24gdGhlIHRpbWVsaW5lLiBUaGlzIGJsb2NrIGNhbiBiZSBrZXB0Ci8vLyBvcGVuIGFjcm9zcyBpc29sYXRlIG1lc3NhZ2VzLgpjbGFzcyBfQXN5bmNCbG9jayB7CiAgLy8vIFRoZSBjYXRlZ29yeSB0aGlzIGJsb2NrIGJlbG9uZ3MgdG8uCiAgZmluYWwgU3RyaW5nIGNhdGVnb3J5ID0gJ0RhcnQnOwoKICAvLy8gVGhlIG5hbWUgb2YgdGhpcyBibG9jay4KICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgLy8vIFRoZSBhc3luY2hyb25vdXMgdGFzayBpZC4KICBmaW5hbCBpbnQgX3Rhc2tJZDsKCiAgLy8vIEFuIChvcHRpb25hbCkgc2V0IG9mIGFyZ3VtZW50cyB3aGljaCB3aWxsIGJlIHNlcmlhbGl6ZWQgdG8gSlNPTiBhbmQKICAvLy8gYXNzb2NpYXRlZCB3aXRoIHRoaXMgYmxvY2suCiAgTWFwIF9hcmd1bWVudHM7CgogIF9Bc3luY0Jsb2NrLl8odGhpcy5uYW1lLCB0aGlzLl90YXNrSWQpOwoKICAvLyBFbWl0IHRoZSBzdGFydCBldmVudC4KICB2b2lkIF9zdGFydCgpIHsKICAgIF9yZXBvcnRUYXNrRXZlbnQoCiAgICAgICAgX2dldFRyYWNlQ2xvY2soKSwgX3Rhc2tJZCwgJ2InLCBjYXRlZ29yeSwgbmFtZSwgX2FyZ3VtZW50c0FzSnNvbihudWxsKSk7CiAgfQoKICAvLyBFbWl0IHRoZSBmaW5pc2ggZXZlbnQuCiAgdm9pZCBfZmluaXNoKCkgewogICAgX3JlcG9ydFRhc2tFdmVudChfZ2V0VHJhY2VDbG9jaygpLCBfdGFza0lkLCAnZScsIGNhdGVnb3J5LCBuYW1lLAogICAgICAgIF9hcmd1bWVudHNBc0pzb24oX2FyZ3VtZW50cykpOwogIH0KfQoKLy8vIEEgc3luY2hyb25vdXMgYmxvY2sgb2YgdGltZSBvbiB0aGUgdGltZWxpbmUuIFRoaXMgYmxvY2sgc2hvdWxkIG5vdCBiZQovLy8ga2VwdCBvcGVuIGFjcm9zcyBpc29sYXRlIG1lc3NhZ2VzLgpjbGFzcyBfU3luY0Jsb2NrIHsKICAvLy8gVGhlIGNhdGVnb3J5IHRoaXMgYmxvY2sgYmVsb25ncyB0by4KICBmaW5hbCBTdHJpbmcgY2F0ZWdvcnkgPSAnRGFydCc7CgogIC8vLyBUaGUgbmFtZSBvZiB0aGlzIGJsb2NrLgogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvLy8gQW4gKG9wdGlvbmFsKSBzZXQgb2YgYXJndW1lbnRzIHdoaWNoIHdpbGwgYmUgc2VyaWFsaXplZCB0byBKU09OIGFuZAogIC8vLyBhc3NvY2lhdGVkIHdpdGggdGhpcyBibG9jay4KICBNYXAgX2FyZ3VtZW50czsKICAvLyBUaGUgc3RhcnQgdGltZSBzdGFtcC4KICBmaW5hbCBpbnQgX3N0YXJ0OwogIC8vIFRoZSBzdGFydCB0aW1lIHN0YW1wIG9mIHRoZSB0aHJlYWQgY3B1IGNsb2NrLgogIGZpbmFsIGludCBfc3RhcnRDcHU7CgogIC8vLyBBbiAob3B0aW9uYWwpIGZsb3cgZXZlbnQgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYmxvY2suCiAgRmxvdyBfZmxvdzsKCiAgX1N5bmNCbG9jay5fKHRoaXMubmFtZSwgdGhpcy5fc3RhcnQsIHRoaXMuX3N0YXJ0Q3B1KTsKCiAgLy8vIEZpbmlzaCB0aGlzIGJsb2NrIG9mIHRpbWUuIEF0IHRoaXMgcG9pbnQsIHRoaXMgYmxvY2sgY2FuIG5vIGxvbmdlciBiZQogIC8vLyB1c2VkLgogIHZvaWQgZmluaXNoKCkgewogICAgLy8gUmVwb3J0IGV2ZW50IHRvIHJ1bnRpbWUuCiAgICBfcmVwb3J0Q29tcGxldGVFdmVudCgKICAgICAgICBfc3RhcnQsIF9zdGFydENwdSwgY2F0ZWdvcnksIG5hbWUsIF9hcmd1bWVudHNBc0pzb24oX2FyZ3VtZW50cykpOwogICAgaWYgKF9mbG93ICE9IG51bGwpIHsKICAgICAgX3JlcG9ydEZsb3dFdmVudChfc3RhcnQsIF9zdGFydENwdSwgY2F0ZWdvcnksIG5hbWUsIF9mbG93Ll90eXBlLCBfZmxvdy5pZCwKICAgICAgICAgIF9hcmd1bWVudHNBc0pzb24obnVsbCkpOwogICAgfQogIH0KCiAgdm9pZCBzZXQgZmxvdyhGbG93IGYpIHsKICAgIF9mbG93ID0gZjsKICB9Cn0KClN0cmluZyBfYXJndW1lbnRzQXNKc29uKE1hcCBhcmd1bWVudHMpIHsKICBpZiAoKGFyZ3VtZW50cyA9PSBudWxsKSB8fCAoYXJndW1lbnRzLmxlbmd0aCA9PSAwKSkgewogICAgLy8gRmFzdCBwYXRoIG5vIGFyZ3VtZW50cy4gQXZvaWQgY2FsbGluZyBqc29uRW5jb2RlLgogICAgcmV0dXJuICd7fSc7CiAgfQogIHJldHVybiBqc29uLmVuY29kZShhcmd1bWVudHMpOwp9CgovLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBEYXJ0IFRpbWVsaW5lIHN0cmVhbSBpcyBlbmFibGVkLgpleHRlcm5hbCBib29sIF9pc0RhcnRTdHJlYW1FbmFibGVkKCk7CgovLy8gUmV0dXJucyB0aGUgbmV4dCBhc3luYyB0YXNrIGlkLgpleHRlcm5hbCBpbnQgX2dldE5leHRBc3luY0lkKCk7CgovLy8gUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBmcm9tIHRoZSB0cmFjZSBjbG9jay4KZXh0ZXJuYWwgaW50IF9nZXRUcmFjZUNsb2NrKCk7CgovLy8gUmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBmcm9tIHRoZSB0aHJlYWQgQ1BVIHVzYWdlIGNsb2NrLgpleHRlcm5hbCBpbnQgX2dldFRocmVhZENwdUNsb2NrKCk7CgovLy8gUmVwb3J0cyBhbiBldmVudCBmb3IgYSB0YXNrLgpleHRlcm5hbCB2b2lkIF9yZXBvcnRUYXNrRXZlbnQoaW50IHN0YXJ0LCBpbnQgdGFza0lkLCBTdHJpbmcgcGhhc2UsCiAgICBTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBuYW1lLCBTdHJpbmcgYXJndW1lbnRzQXNKc29uKTsKCi8vLyBSZXBvcnRzIGEgY29tcGxldGUgc3luY2hyb25vdXMgZXZlbnQuCmV4dGVybmFsIHZvaWQgX3JlcG9ydENvbXBsZXRlRXZlbnQoaW50IHN0YXJ0LCBpbnQgc3RhcnRDcHUsIFN0cmluZyBjYXRlZ29yeSwKICAgIFN0cmluZyBuYW1lLCBTdHJpbmcgYXJndW1lbnRzQXNKc29uKTsKCi8vLyBSZXBvcnRzIGEgZmxvdyBldmVudC4KZXh0ZXJuYWwgdm9pZCBfcmVwb3J0Rmxvd0V2ZW50KGludCBzdGFydCwgaW50IHN0YXJ0Q3B1LCBTdHJpbmcgY2F0ZWdvcnksCiAgICBTdHJpbmcgbmFtZSwgaW50IHR5cGUsIGludCBpZCwgU3RyaW5nIGFyZ3VtZW50c0FzSnNvbik7CgovLy8gUmVwb3J0cyBhbiBpbnN0YW50IGV2ZW50LgpleHRlcm5hbCB2b2lkIF9yZXBvcnRJbnN0YW50RXZlbnQoCiAgICBpbnQgc3RhcnQsIFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG5hbWUsIFN0cmluZyBhcmd1bWVudHNBc0pzb24pOwqBXwBOTjwBGAEaTwFAMAEjKAEmBEtHTUhIR0MEDB0oFRQEKBUiBCgVIQgNRBwfHx4BEwElEAEfARwGSlEjIDgEARsGSUw5NQEbBkhMOTMCARkERlFNUAQMKxMbCAQIBAwuFQgIEUVQPSRDHy4jMBgOBlAdJAYYGQYXBAE+HRkOBh5IBiIlGT0OBhIUBAEdOh8uIx0OBhodMgYZTQQBSkVGJDcKGRAUBgQBTBQGTiYqQQIBTVFMSykVPDIBSTI7MgQBQy8tHy4yHSQGFxQEASsvHy4aHTIGQy0EAT4SGQ4GHkAGIiUVBAFMGg8dHEoZBhUOBAEVJwIBSiIUKiIBHhUBIBUBSiISASoBGxIWUQQBHBNFJwQCAUonEyoiAR4VAUoiEhsUMxcBOw4BOAFMDBIgGkoZUSMGBAEaDwQCASk4OREEIQIBOSYBJCABNB8BPyMBIUQ7ASpNKgEaSTwBHiNGARxkYXJ0OmRldmVsb3Blci90aW1lbGluZS5kYXJ0LW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvcHJvZmlsZXIuZGFydIMcLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImRldmVsb3Blci5kYXJ0IjsKCkBwYXRjaApjbGFzcyBVc2VyVGFnIHsKICBAcGF0Y2gKICBmYWN0b3J5IFVzZXJUYWcoU3RyaW5nIGxhYmVsKSB7CiAgICByZXR1cm4gbmV3IF9Vc2VyVGFnKGxhYmVsKTsKICB9CiAgQHBhdGNoCiAgc3RhdGljIFVzZXJUYWcgZ2V0IGRlZmF1bHRUYWcgPT4gX2dldERlZmF1bHRUYWcoKTsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVXNlclRhZyBpbXBsZW1lbnRzIFVzZXJUYWcgewogIGZhY3RvcnkgX1VzZXJUYWcoU3RyaW5nIGxhYmVsKSBuYXRpdmUgIlVzZXJUYWdfbmV3IjsKICBTdHJpbmcgZ2V0IGxhYmVsIG5hdGl2ZSAiVXNlclRhZ19sYWJlbCI7CiAgVXNlclRhZyBtYWtlQ3VycmVudCgpIG5hdGl2ZSAiVXNlclRhZ19tYWtlQ3VycmVudCI7Cn0KCkBwYXRjaApVc2VyVGFnIGdldEN1cnJlbnRUYWcoKSA9PiBfZ2V0Q3VycmVudFRhZygpOwpVc2VyVGFnIF9nZXRDdXJyZW50VGFnKCkgbmF0aXZlICJQcm9maWxlcl9nZXRDdXJyZW50VGFnIjsKClVzZXJUYWcgX2dldERlZmF1bHRUYWcoKSBuYXRpdmUgIlVzZXJUYWdfZGVmYXVsdFRhZyI7Ch4ATk48AR0BBxAJIiAECTUCARokNys2AgEHLToBNgEiZGFydDpkZXZlbG9wZXItcGF0Y2gvcHJvZmlsZXIuZGFydDNvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvZGV2ZWxvcGVyL3Byb2ZpbGVyLmRhcnSPYS8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuZGV2ZWxvcGVyOwoKLy8vIEEgVXNlclRhZyBjYW4gYmUgdXNlZCB0byBncm91cCBzYW1wbGVzIGluIHRoZSBPYnNlcnZhdG9yeSBwcm9maWxlci4KYWJzdHJhY3QgY2xhc3MgVXNlclRhZyB7CiAgLy8vIFRoZSBtYXhpbXVtIG51bWJlciBvZiBVc2VyVGFnIGluc3RhbmNlcyB0aGF0IGNhbiBiZSBjcmVhdGVkIGJ5IGEgcHJvZ3JhbS4KICBzdGF0aWMgY29uc3QgTUFYX1VTRVJfVEFHUyA9IDY0OwoKICBleHRlcm5hbCBmYWN0b3J5IFVzZXJUYWcoU3RyaW5nIGxhYmVsKTsKCiAgLy8vIExhYmVsIG9mIFt0aGlzXS4KICBTdHJpbmcgZ2V0IGxhYmVsOwoKICAvLy8gTWFrZSBbdGhpc10gdGhlIGN1cnJlbnQgdGFnIGZvciB0aGUgaXNvbGF0ZS4gUmV0dXJucyB0aGUgY3VycmVudCB0YWcKICAvLy8gYmVmb3JlIHNldHRpbmcuCiAgVXNlclRhZyBtYWtlQ3VycmVudCgpOwoKICAvLy8gVGhlIGRlZmF1bHQgW1VzZXJUYWddIHdpdGggbGFiZWwgJ0RlZmF1bHQnLgogIGV4dGVybmFsIHN0YXRpYyBVc2VyVGFnIGdldCBkZWZhdWx0VGFnOwp9CgovLy8gUmV0dXJucyB0aGUgY3VycmVudCBbVXNlclRhZ10gZm9yIHRoZSBpc29sYXRlLgpleHRlcm5hbCBVc2VyVGFnIGdldEN1cnJlbnRUYWcoKTsKCi8vLyBBYnN0cmFjdCBbTWV0cmljXSBjbGFzcy4gTWV0cmljIG5hbWVzIG11c3QgYmUgdW5pcXVlLCBhcmUgaGllcmFyY2hpY2FsLAovLy8gYW5kIHVzZSBwZXJpb2RzIGFzIHNlcGFyYXRvcnMuIEZvciBleGFtcGxlLCAnYS5iLmMnLiBVbmlxdWVuZXNzIGlzIG9ubHkKLy8vIGVuZm9yY2VkIHdoZW4gYSBNZXRyaWMgaXMgcmVnaXN0ZXJlZC4gVGhlIG5hbWUgb2YgYSBtZXRyaWMgY2Fubm90IGNvbnRhaW4KLy8vIHRoZSBzbGFzaCAoJy8nKSBjaGFyYWN0ZXIuCmFic3RyYWN0IGNsYXNzIE1ldHJpYyB7CiAgLy8vIFtuYW1lXSBvZiB0aGlzIG1ldHJpYy4KICBmaW5hbCBTdHJpbmcgbmFtZTsKCiAgLy8vIFtkZXNjcmlwdGlvbl0gb2YgdGhpcyBtZXRyaWMuCiAgZmluYWwgU3RyaW5nIGRlc2NyaXB0aW9uOwoKICBNZXRyaWModGhpcy5uYW1lLCB0aGlzLmRlc2NyaXB0aW9uKSB7CiAgICBpZiAoKG5hbWUgPT0gJ3ZtJykgfHwgbmFtZS5jb250YWlucygnLycpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdJbnZhbGlkIE1ldHJpYyBuYW1lLicpOwogICAgfQogIH0KCiAgTWFwIF90b0pTT04oKTsKfQoKLy8vIEEgbWVhc3VyZWQgdmFsdWUgd2l0aCBhIG1pbiBhbmQgbWF4LiBJbml0aWFsIHZhbHVlIGlzIG1pbi4gVmFsdWUgd2lsbAovLy8gYmUgY2xhbXBlZCB0byB0aGUgaW50ZXJ2YWwgW21pbiwgbWF4XS4KY2xhc3MgR2F1Z2UgZXh0ZW5kcyBNZXRyaWMgewogIGZpbmFsIGRvdWJsZSBtaW47CiAgZmluYWwgZG91YmxlIG1heDsKCiAgZG91YmxlIF92YWx1ZTsKICBkb3VibGUgZ2V0IHZhbHVlID0+IF92YWx1ZTsKICBzZXQgdmFsdWUoZG91YmxlIHYpIHsKICAgIGlmICh2IDwgbWluKSB7CiAgICAgIHYgPSBtaW47CiAgICB9IGVsc2UgaWYgKHYgPiBtYXgpIHsKICAgICAgdiA9IG1heDsKICAgIH0KICAgIF92YWx1ZSA9IHY7CiAgfQoKICBHYXVnZShTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2NyaXB0aW9uLCB0aGlzLm1pbiwgdGhpcy5tYXgpCiAgICAgIDogc3VwZXIobmFtZSwgZGVzY3JpcHRpb24pIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKG1pbiwgJ21pbicpOwogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobWF4LCAnbWF4Jyk7CiAgICBpZiAoIShtaW4gPCBtYXgpKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignbWluIG11c3QgYmUgbGVzcyB0aGFuIG1heCcpOwogICAgX3ZhbHVlID0gbWluOwogIH0KCiAgTWFwIF90b0pTT04oKSB7CiAgICB2YXIgbWFwID0gewogICAgICAndHlwZSc6ICdHYXVnZScsCiAgICAgICdpZCc6ICdtZXRyaWNzLyRuYW1lJywKICAgICAgJ25hbWUnOiBuYW1lLAogICAgICAnZGVzY3JpcHRpb24nOiBkZXNjcmlwdGlvbiwKICAgICAgJ3ZhbHVlJzogdmFsdWUsCiAgICAgICdtaW4nOiBtaW4sCiAgICAgICdtYXgnOiBtYXgsCiAgICB9OwogICAgcmV0dXJuIG1hcDsKICB9Cn0KCi8vLyBBIGNoYW5naW5nIHZhbHVlLiBJbml0aWFsIHZhbHVlIGlzIDAuMC4KY2xhc3MgQ291bnRlciBleHRlbmRzIE1ldHJpYyB7CiAgQ291bnRlcihTdHJpbmcgbmFtZSwgU3RyaW5nIGRlc2NyaXB0aW9uKSA6IHN1cGVyKG5hbWUsIGRlc2NyaXB0aW9uKTsKCiAgZG91YmxlIF92YWx1ZSA9IDAuMDsKICBkb3VibGUgZ2V0IHZhbHVlID0+IF92YWx1ZTsKICBzZXQgdmFsdWUoZG91YmxlIHYpIHsKICAgIF92YWx1ZSA9IHY7CiAgfQoKICBNYXAgX3RvSlNPTigpIHsKICAgIHZhciBtYXAgPSB7CiAgICAgICd0eXBlJzogJ0NvdW50ZXInLAogICAgICAnaWQnOiAnbWV0cmljcy8kbmFtZScsCiAgICAgICduYW1lJzogbmFtZSwKICAgICAgJ2Rlc2NyaXB0aW9uJzogZGVzY3JpcHRpb24sCiAgICAgICd2YWx1ZSc6IHZhbHVlLAogICAgfTsKICAgIHJldHVybiBtYXA7CiAgfQp9CgpjbGFzcyBNZXRyaWNzIHsKICBzdGF0aWMgZmluYWwgTWFwPFN0cmluZywgTWV0cmljPiBfbWV0cmljcyA9IG5ldyBNYXA8U3RyaW5nLCBNZXRyaWM+KCk7CgogIC8vLyBSZWdpc3RlciBbTWV0cmljXXMgdG8gbWFrZSB0aGVtIHZpc2libGUgdG8gT2JzZXJ2YXRvcnkuCiAgc3RhdGljIHZvaWQgcmVnaXN0ZXIoTWV0cmljIG1ldHJpYykgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwobWV0cmljLCAnbWV0cmljJyk7CiAgICBpZiAoX21ldHJpY3NbbWV0cmljLm5hbWVdICE9IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ1JlZ2lzdGVyZWQgbWV0cmljcyBoYXZlIHVuaXF1ZSBuYW1lcycpOwogICAgfQogICAgX21ldHJpY3NbbWV0cmljLm5hbWVdID0gbWV0cmljOwogIH0KCiAgLy8vIERlcmVnaXN0ZXIgW01ldHJpY11zIHRvIG1ha2UgdGhlbSBub3QgdmlzaWJsZSB0byBPYnNlcnZhdG9yeS4KICBzdGF0aWMgdm9pZCBkZXJlZ2lzdGVyKE1ldHJpYyBtZXRyaWMpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKG1ldHJpYywgJ21ldHJpYycpOwogICAgX21ldHJpY3MucmVtb3ZlKG1ldHJpYy5uYW1lKTsKICB9CgogIC8vIGlnbm9yZTogdW51c2VkX2VsZW1lbnQsIGNhbGxlZCBmcm9tIG5hdGl2ZSBjb2RlCiAgc3RhdGljIFN0cmluZyBfcHJpbnRNZXRyaWMoU3RyaW5nIGlkKSB7CiAgICB2YXIgbWV0cmljID0gX21ldHJpY3NbaWRdOwogICAgaWYgKG1ldHJpYyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIGpzb24uZW5jb2RlKG1ldHJpYy5fdG9KU09OKCkpOwogIH0KCiAgLy8gaWdub3JlOiB1bnVzZWRfZWxlbWVudCwgY2FsbGVkIGZyb20gbmF0aXZlIGNvZGUKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICFjb25zdCBib29sLmZyb21FbnZpcm9ubWVudCgiZGFydC52bS5wcm9kdWN0IikpCiAgc3RhdGljIFN0cmluZyBfcHJpbnRNZXRyaWNzKCkgewogICAgdmFyIG1ldHJpY3MgPSBbXTsKICAgIGZvciAodmFyIG1ldHJpYyBpbiBfbWV0cmljcy52YWx1ZXMpIHsKICAgICAgbWV0cmljcy5hZGQobWV0cmljLl90b0pTT04oKSk7CiAgICB9CiAgICB2YXIgbWFwID0gewogICAgICAndHlwZSc6ICdNZXRyaWNMaXN0JywKICAgICAgJ21ldHJpY3MnOiBtZXRyaWNzLAogICAgfTsKICAgIHJldHVybiBqc29uLmVuY29kZShtYXApOwogIH0KfQqAlwBOTjwBGAFIGVAjASoBFxQBSxYZATIqAgEzIgFMTE4fGB0VASQcASgwNwYEARECAUorHRQUAREeGBMPGg8GEAQBPSMsLEwSBAESEBcdFCIWEhIHEAQCASwfRwEXHhgQBAESEBkdFCIWBxAEAgEQSQE+KDIpRwYkBAFEKjIiBAE1Kh8aEwYqBAE1TCIWKiUGEBwaBx0EAgEcZGFydDpkZXZlbG9wZXIvcHJvZmlsZXIuZGFydDJvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvZGV2ZWxvcGVyL3NlcnZpY2UuZGFydI+BLy8gQ29weXJpZ2h0IChjKSAyMDE2LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5kZXZlbG9wZXI7CgovLy8gU2VydmljZSBwcm90b2NvbCBpcyB0aGUgcHJvdG9jb2wgdGhhdCBhIGNsaWVudCBsaWtlIHRoZSBPYnNlcnZhdG9yeQovLy8gY291bGQgdXNlIHRvIGFjY2VzcyB0aGUgc2VydmljZXMgcHJvdmlkZWQgYnkgdGhlIERhcnQgVk0gZm9yCi8vLyBkZWJ1Z2dpbmcgYW5kIGluc3BlY3RpbmcgRGFydCBwcm9ncmFtcy4gVGhpcyBjbGFzcyBlbmNhcHN1bGF0ZXMgdGhlCi8vLyB2ZXJzaW9uIG51bWJlciBhbmQgVXJpIGZvciBhY2Nlc3NpbmcgdGhpcyBzZXJ2aWNlLgpjbGFzcyBTZXJ2aWNlUHJvdG9jb2xJbmZvIHsKICAvLy8gVGhlIG1ham9yIHZlcnNpb24gb2YgdGhlIHByb3RvY29sLiBJZiB0aGUgcnVubmluZyBEYXJ0IGVudmlyb25tZW50IGRvZXMKICAvLy8gbm90IHN1cHBvcnQgdGhlIHNlcnZpY2UgcHJvdG9jb2wsIHRoaXMgaXMgMC4KICBmaW5hbCBpbnQgbWFqb3JWZXJzaW9uID0gX2dldFNlcnZpY2VNYWpvclZlcnNpb24oKTsKCiAgLy8vIFRoZSBtaW5vciB2ZXJzaW9uIG9mIHRoZSBwcm90b2NvbC4gSWYgdGhlIHJ1bm5pbmcgRGFydCBlbnZpcm9ubWVudCBkb2VzCiAgLy8vIG5vdCBzdXBwb3J0IHRoZSBzZXJ2aWNlIHByb3RvY29sLCB0aGlzIGlzIDAuCiAgZmluYWwgaW50IG1pbm9yVmVyc2lvbiA9IF9nZXRTZXJ2aWNlTWlub3JWZXJzaW9uKCk7CgogIC8vLyBUaGUgVXJpIHRvIGFjY2VzcyB0aGUgc2VydmljZS4gSWYgdGhlIHdlYiBzZXJ2ZXIgaXMgbm90IHJ1bm5pbmcsIHRoaXMKICAvLy8gd2lsbCBiZSBudWxsLgogIGZpbmFsIFVyaSBzZXJ2ZXJVcmk7CgogIFNlcnZpY2VQcm90b2NvbEluZm8odGhpcy5zZXJ2ZXJVcmkpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBpZiAoc2VydmVyVXJpICE9IG51bGwpIHsKICAgICAgcmV0dXJuICdEYXJ0IFZNIFNlcnZpY2UgUHJvdG9jb2wgdiRtYWpvclZlcnNpb24uJG1pbm9yVmVyc2lvbiAnCiAgICAgICAgICAnbGlzdGVuaW5nIG9uICRzZXJ2ZXJVcmknOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICdEYXJ0IFZNIFNlcnZpY2UgUHJvdG9jb2wgdiRtYWpvclZlcnNpb24uJG1pbm9yVmVyc2lvbic7CiAgICB9CiAgfQp9CgovLy8gQWNjZXNzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzZXJ2aWNlIHByb3RvY29sIGFuZCBjb250cm9sIHRoZSB3ZWIgc2VydmVyCi8vLyB0aGF0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgc2VydmljZXMgcHJvdmlkZWQgYnkgdGhlIERhcnQgVk0gZm9yCi8vLyBkZWJ1Z2dpbmcgYW5kIGluc3BlY3RpbmcgRGFydCBwcm9ncmFtcy4KY2xhc3MgU2VydmljZSB7CiAgLy8vIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc2VydmljZSBwcm90b2NvbCAodmVyc2lvbiBudW1iZXIgYW5kCiAgLy8vIFVyaSB0byBhY2Nlc3MgdGhlIHNlcnZpY2UpLgogIHN0YXRpYyBGdXR1cmU8U2VydmljZVByb3RvY29sSW5mbz4gZ2V0SW5mbygpIGFzeW5jIHsKICAgIC8vIFBvcnQgdG8gcmVjZWl2ZSByZXNwb25zZSBmcm9tIHNlcnZpY2UgaXNvbGF0ZS4KICAgIGZpbmFsIFJhd1JlY2VpdmVQb3J0IHJlY2VpdmVQb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KCk7CiAgICBmaW5hbCBDb21wbGV0ZXI8VXJpPiB1cmlDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFVyaT4oKTsKICAgIHJlY2VpdmVQb3J0LmhhbmRsZXIgPSAoVXJpIHVyaSkgPT4gdXJpQ29tcGxldGVyLmNvbXBsZXRlKHVyaSk7CiAgICAvLyBSZXF1ZXN0IHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzZXJ2aWNlIGlzb2xhdGUuCiAgICBfZ2V0U2VydmVySW5mbyhyZWNlaXZlUG9ydC5zZW5kUG9ydCk7CiAgICAvLyBBd2FpdCB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgc2VydmljZSBpc29sYXRlLgogICAgVXJpIHVyaSA9IGF3YWl0IHVyaUNvbXBsZXRlci5mdXR1cmU7CiAgICAvLyBDbG9zZSB0aGUgcG9ydC4KICAgIHJlY2VpdmVQb3J0LmNsb3NlKCk7CiAgICByZXR1cm4gbmV3IFNlcnZpY2VQcm90b2NvbEluZm8odXJpKTsKICB9CgogIC8vLyBDb250cm9sIHRoZSB3ZWIgc2VydmVyIHRoYXQgdGhlIHNlcnZpY2UgcHJvdG9jb2wgaXMgYWNjZXNzZWQgdGhyb3VnaC4KICAvLy8gVGhlIFtlbmFibGVdIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuIGFuZCBpcyB1c2VkIGFzIGEgdG9nZ2xlIHRvCiAgLy8vIGVuYWJsZSAodHJ1ZSkgb3IgZGlzYWJsZSAoZmFsc2UpIHRoZSB3ZWIgc2VydmVyIHNlcnZpY2luZyByZXF1ZXN0cy4KICBzdGF0aWMgRnV0dXJlPFNlcnZpY2VQcm90b2NvbEluZm8+IGNvbnRyb2xXZWJTZXJ2ZXIoCiAgICAgIHtib29sIGVuYWJsZTogZmFsc2V9KSBhc3luYyB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChlbmFibGUsICdlbmFibGUnKTsKICAgIC8vIFBvcnQgdG8gcmVjZWl2ZSByZXNwb25zZSBmcm9tIHNlcnZpY2UgaXNvbGF0ZS4KICAgIGZpbmFsIFJhd1JlY2VpdmVQb3J0IHJlY2VpdmVQb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KCk7CiAgICBmaW5hbCBDb21wbGV0ZXI8VXJpPiB1cmlDb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFVyaT4oKTsKICAgIHJlY2VpdmVQb3J0LmhhbmRsZXIgPSAoVXJpIHVyaSkgPT4gdXJpQ29tcGxldGVyLmNvbXBsZXRlKHVyaSk7CiAgICAvLyBSZXF1ZXN0IHRoZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzZXJ2aWNlIGlzb2xhdGUuCiAgICBfd2ViU2VydmVyQ29udHJvbChyZWNlaXZlUG9ydC5zZW5kUG9ydCwgZW5hYmxlKTsKICAgIC8vIEF3YWl0IHRoZSByZXNwb25zZSBmcm9tIHRoZSBzZXJ2aWNlIGlzb2xhdGUuCiAgICBVcmkgdXJpID0gYXdhaXQgdXJpQ29tcGxldGVyLmZ1dHVyZTsKICAgIC8vIENsb3NlIHRoZSBwb3J0LgogICAgcmVjZWl2ZVBvcnQuY2xvc2UoKTsKICAgIHJldHVybiBuZXcgU2VydmljZVByb3RvY29sSW5mbyh1cmkpOwogIH0KCiAgLy8vIFJldHVybnMgYSBbU3RyaW5nXSB0b2tlbiByZXByZXNlbnRpbmcgdGhlIElEIG9mIFtpc29sYXRlXS4KICAvLy8KICAvLy8gUmV0dXJucyBudWxsIGlmIHRoZSBydW5uaW5nIERhcnQgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgc2VydmljZQogIC8vLyBwcm90b2NvbC4KICBzdGF0aWMgU3RyaW5nIGdldElzb2xhdGVJRChJc29sYXRlIGlzb2xhdGUpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGlzb2xhdGUsICdpc29sYXRlJyk7CiAgICByZXR1cm4gX2dldElzb2xhdGVJREZyb21TZW5kUG9ydChpc29sYXRlLmNvbnRyb2xQb3J0KTsKICB9Cn0KCi8vLyBbc2VuZFBvcnRdIHdpbGwgcmVjZWl2ZSBhIFVyaSBvciBudWxsLgpleHRlcm5hbCB2b2lkIF9nZXRTZXJ2ZXJJbmZvKFNlbmRQb3J0IHNlbmRQb3J0KTsKCi8vLyBbc2VuZFBvcnRdIHdpbGwgcmVjZWl2ZSBhIFVyaSBvciBudWxsLgpleHRlcm5hbCB2b2lkIF93ZWJTZXJ2ZXJDb250cm9sKFNlbmRQb3J0IHNlbmRQb3J0LCBib29sIGVuYWJsZSk7CgovLy8gUmV0dXJucyB0aGUgbWFqb3IgdmVyc2lvbiBvZiB0aGUgc2VydmljZSBwcm90b2NvbC4KZXh0ZXJuYWwgaW50IF9nZXRTZXJ2aWNlTWFqb3JWZXJzaW9uKCk7CgovLy8gUmV0dXJucyB0aGUgbWlub3IgdmVyc2lvbiBvZiB0aGUgc2VydmljZSBwcm90b2NvbC4KZXh0ZXJuYWwgaW50IF9nZXRTZXJ2aWNlTWlub3JWZXJzaW9uKCk7CgovLy8gUmV0dXJucyB0aGUgc2VydmljZSBpZCBmb3IgdGhlIGlzb2xhdGUgdGhhdCBvd25zIFtzZW5kUG9ydF0uCmV4dGVybmFsIFN0cmluZyBfZ2V0SXNvbGF0ZUlERnJvbVNlbmRQb3J0KFNlbmRQb3J0IHNlbmRQb3J0KTsKZABOTjwBGAFIQUg3HE4zNgFOMzYBTBQXAScBFh1GJQ1GBgQCAU1FLBBFIjc2PT5DOSo0KRcZKQQBTElKNyQyNj0+Qzk1NCkXGSkEAUEGUBAwNDsEAgErMQErQQE3KAE3KAFBPgEbZGFydDpkZXZlbG9wZXIvc2VydmljZS5kYXJ0Lm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZGV2ZWxvcGVyLmRhcnSU9i8vIENvcHlyaWdodCAoYykgMjAxNSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTm90ZTogdGhlIFZNIGNvbmNhdGVuYXRlcyBhbGwgcGF0Y2ggZmlsZXMgaW50byBhIHNpbmdsZSBwYXRjaCBmaWxlLiBUaGlzCi8vLyBmaWxlIGlzIHRoZSBmaXJzdCBwYXRjaCBpbiAiZGFydDpkZXZlbG9wZXIiIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgaW1wb3J0cwovLy8gdXNlZCBieSBwYXRjaGVzIG9mIHRoYXQgbGlicmFyeS4gV2UgcGxhbiB0byBjaGFuZ2UgdGhpcyB3aGVuIHdlIGhhdmUgYQovLy8gc2hhcmVkIGZyb250IGVuZCBhbmQgc2ltcGx5IHVzZSBwYXJ0cy4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgcGF0Y2g7CgppbXBvcnQgImRhcnQ6YXN5bmMiIHNob3cgRnV0dXJlLCBab25lOwoKaW1wb3J0ICJkYXJ0Omlzb2xhdGUiIHNob3cgU2VuZFBvcnQ7CgovLy8gVGhlc2UgYXJlIHRoZSBhZGRpdGlvbmFsIHBhcnRzIG9mIHRoaXMgcGF0Y2ggbGlicmFyeToKLy8gcGFydCAicHJvZmlsZXIuZGFydCIKLy8gcGFydCAidGltZWxpbmUuZGFydCIKCkBwYXRjaApib29sIGRlYnVnZ2VyKHtib29sIHdoZW46IHRydWUsIFN0cmluZyBtZXNzYWdlfSkgbmF0aXZlICJEZXZlbG9wZXJfZGVidWdnZXIiOwoKQHBhdGNoCk9iamVjdCBpbnNwZWN0KE9iamVjdCBvYmplY3QpIG5hdGl2ZSAiRGV2ZWxvcGVyX2luc3BlY3QiOwoKQHBhdGNoCnZvaWQgbG9nKFN0cmluZyBtZXNzYWdlLAogICAge0RhdGVUaW1lIHRpbWUsCiAgICBpbnQgc2VxdWVuY2VOdW1iZXIsCiAgICBpbnQgbGV2ZWw6IDAsCiAgICBTdHJpbmcgbmFtZTogJycsCiAgICBab25lIHpvbmUsCiAgICBPYmplY3QgZXJyb3IsCiAgICBTdGFja1RyYWNlIHN0YWNrVHJhY2V9KSB7CiAgaWYgKG1lc3NhZ2UgaXMhIFN0cmluZykgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUobWVzc2FnZSwgIm1lc3NhZ2UiLCAiTXVzdCBiZSBhIFN0cmluZyIpOwogIH0KICB0aW1lID8/PSBuZXcgRGF0ZVRpbWUubm93KCk7CiAgaWYgKHRpbWUgaXMhIERhdGVUaW1lKSB7CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSh0aW1lLCAidGltZSIsICJNdXN0IGJlIGEgRGF0ZVRpbWUiKTsKICB9CiAgaWYgKHNlcXVlbmNlTnVtYmVyID09IG51bGwpIHsKICAgIHNlcXVlbmNlTnVtYmVyID0gX25leHRTZXF1ZW5jZU51bWJlcisrOwogIH0gZWxzZSB7CiAgICBfbmV4dFNlcXVlbmNlTnVtYmVyID0gc2VxdWVuY2VOdW1iZXIgKyAxOwogIH0KICBfbG9nKG1lc3NhZ2UsIHRpbWUubWlsbGlzZWNvbmRzU2luY2VFcG9jaCwgc2VxdWVuY2VOdW1iZXIsIGxldmVsLCBuYW1lLCB6b25lLAogICAgICBlcnJvciwgc3RhY2tUcmFjZSk7Cn0KCmludCBfbmV4dFNlcXVlbmNlTnVtYmVyID0gMDsKCl9sb2coU3RyaW5nIG1lc3NhZ2UsIGludCB0aW1lc3RhbXAsIGludCBzZXF1ZW5jZU51bWJlciwgaW50IGxldmVsLCBTdHJpbmcgbmFtZSwKICAgIFpvbmUgem9uZSwgT2JqZWN0IGVycm9yLCBTdGFja1RyYWNlIHN0YWNrVHJhY2UpIG5hdGl2ZSAiRGV2ZWxvcGVyX2xvZyI7CgpAcGF0Y2gKdm9pZCBfcG9zdEV2ZW50KFN0cmluZyBldmVudEtpbmQsIFN0cmluZyBldmVudERhdGEpCiAgICBuYXRpdmUgIkRldmVsb3Blcl9wb3N0RXZlbnQiOwoKQHBhdGNoClNlcnZpY2VFeHRlbnNpb25IYW5kbGVyIF9sb29rdXBFeHRlbnNpb24oU3RyaW5nIG1ldGhvZCkKICAgIG5hdGl2ZSAiRGV2ZWxvcGVyX2xvb2t1cEV4dGVuc2lvbiI7CgpAcGF0Y2gKX3JlZ2lzdGVyRXh0ZW5zaW9uKFN0cmluZyBtZXRob2QsIFNlcnZpY2VFeHRlbnNpb25IYW5kbGVyIGhhbmRsZXIpCiAgICBuYXRpdmUgIkRldmVsb3Blcl9yZWdpc3RlckV4dGVuc2lvbiI7CgovLyBUaGlzIGNvZGUgaXMgb25seSBpbnZva2VkIHdoZW4gdGhlcmUgaXMgbm8gb3RoZXIgRGFydCBjb2RlIG9uIHRoZSBzdGFjay4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAhY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoImRhcnQudm0ucHJvZHVjdCIpKQpfcnVuRXh0ZW5zaW9uKAogICAgU2VydmljZUV4dGVuc2lvbkhhbmRsZXIgaGFuZGxlciwKICAgIFN0cmluZyBtZXRob2QsCiAgICBMaXN0PFN0cmluZz4gcGFyYW1ldGVyS2V5cywKICAgIExpc3Q8U3RyaW5nPiBwYXJhbWV0ZXJWYWx1ZXMsCiAgICBTZW5kUG9ydCByZXBseVBvcnQsCiAgICBPYmplY3QgaWQsCiAgICBib29sIHRyYWNlX3NlcnZpY2UpIHsKICB2YXIgcGFyYW1ldGVycyA9IDxTdHJpbmcsIFN0cmluZz57fTsKICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtZXRlcktleXMubGVuZ3RoOyBpKyspIHsKICAgIHBhcmFtZXRlcnNbcGFyYW1ldGVyS2V5c1tpXV0gPSBwYXJhbWV0ZXJWYWx1ZXNbaV07CiAgfQogIHZhciByZXNwb25zZTsKICB0cnkgewogICAgcmVzcG9uc2UgPSBoYW5kbGVyKG1ldGhvZCwgcGFyYW1ldGVycyk7CiAgfSBjYXRjaCAoZSwgc3QpIHsKICAgIHZhciBlcnJvckRldGFpbHMgPSAoc3QgPT0gbnVsbCkgPyAnJGUnIDogJyRlXG4kc3QnOwogICAgcmVzcG9uc2UgPSBuZXcgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLmVycm9yKAogICAgICAgIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5rRXh0ZW5zaW9uRXJyb3IsIGVycm9yRGV0YWlscyk7CiAgICBfcG9zdFJlc3BvbnNlKHJlcGx5UG9ydCwgaWQsIHJlc3BvbnNlLCB0cmFjZV9zZXJ2aWNlKTsKICAgIHJldHVybjsKICB9CiAgaWYgKHJlc3BvbnNlIGlzISBGdXR1cmUpIHsKICAgIHJlc3BvbnNlID0gbmV3IFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5lcnJvcigKICAgICAgICBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2Uua0V4dGVuc2lvbkVycm9yLAogICAgICAgICJFeHRlbnNpb24gaGFuZGxlciBtdXN0IHJldHVybiBhIEZ1dHVyZSIpOwogICAgX3Bvc3RSZXNwb25zZShyZXBseVBvcnQsIGlkLCByZXNwb25zZSwgdHJhY2Vfc2VydmljZSk7CiAgICByZXR1cm47CiAgfQogIHJlc3BvbnNlLmNhdGNoRXJyb3IoKGUsIHN0KSB7CiAgICAvLyBDYXRjaCBhbnkgZXJyb3JzIGVhZ2VybHkgYW5kIHdyYXAgdGhlbSBpbiBhIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS4KICAgIHZhciBlcnJvckRldGFpbHMgPSAoc3QgPT0gbnVsbCkgPyAnJGUnIDogJyRlXG4kc3QnOwogICAgcmV0dXJuIG5ldyBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UuZXJyb3IoCiAgICAgICAgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLmtFeHRlbnNpb25FcnJvciwgZXJyb3JEZXRhaWxzKTsKICB9KS50aGVuKChyZXNwb25zZSkgewogICAgLy8gUG9zdCB0aGUgdmFsaWQgcmVzcG9uc2Ugb3IgdGhlIHdyYXBwZWQgZXJyb3IgYWZ0ZXIgdmVyaWZ5aW5nIHRoYXQKICAgIC8vIHRoZSByZXNwb25zZSBpcyBhIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS4KICAgIGlmIChyZXNwb25zZSBpcyEgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlKSB7CiAgICAgIHJlc3BvbnNlID0gbmV3IFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5lcnJvcigKICAgICAgICAgIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5rRXh0ZW5zaW9uRXJyb3IsCiAgICAgICAgICAiRXh0ZW5zaW9uIGhhbmRsZXIgbXVzdCBjb21wbGV0ZSB0byBhIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZSIpOwogICAgfQogICAgX3Bvc3RSZXNwb25zZShyZXBseVBvcnQsIGlkLCByZXNwb25zZSwgdHJhY2Vfc2VydmljZSk7CiAgfSkuY2F0Y2hFcnJvcigoZSwgc3QpIHsKICAgIC8vIFdlIGRvIG5vdCBleHBlY3QgYW55IGVycm9ycyB0byBvY2N1ciBpbiB0aGUgLnRoZW4gb3IgLmNhdGNoRXJyb3IgYmxvY2tzCiAgICAvLyBidXQsIHN1cHByZXNzIHRoZW0ganVzdCBpbiBjYXNlLgogIH0pOwp9CgovLyBUaGlzIGNvZGUgaXMgb25seSBpbnZva2VkIGJ5IF9ydW5FeHRlbnNpb24uCl9wb3N0UmVzcG9uc2UoU2VuZFBvcnQgcmVwbHlQb3J0LCBPYmplY3QgaWQsIFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZSByZXNwb25zZSwKICAgIGJvb2wgdHJhY2Vfc2VydmljZSkgewogIGFzc2VydChyZXBseVBvcnQgIT0gbnVsbCk7CiAgaWYgKGlkID09IG51bGwpIHsKICAgIGlmICh0cmFjZV9zZXJ2aWNlKSB7CiAgICAgIHByaW50KCJ2bS1zZXJ2aWNlOiBwb3N0aW5nIG5vIHJlc3BvbnNlIGZvciByZXF1ZXN0Iik7CiAgICB9CiAgICAvLyBObyBpZCAtPiBubyByZXNwb25zZS4KICAgIHJlcGx5UG9ydC5zZW5kKG51bGwpOwogICAgcmV0dXJuOwogIH0KICBhc3NlcnQoaWQgIT0gbnVsbCk7CiAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIHNiLndyaXRlKCd7Impzb25ycGMiOiIyLjAiLCcpOwogIGlmIChyZXNwb25zZS5pc0Vycm9yKCkpIHsKICAgIGlmICh0cmFjZV9zZXJ2aWNlKSB7CiAgICAgIHByaW50KCJ2bS1zZXJ2aWNlOiBwb3N0aW5nIGVycm9yIHJlc3BvbnNlIGZvciByZXF1ZXN0ICRpZCIpOwogICAgfQogICAgc2Iud3JpdGUoJyJlcnJvciI6Jyk7CiAgfSBlbHNlIHsKICAgIGlmICh0cmFjZV9zZXJ2aWNlKSB7CiAgICAgIHByaW50KCJ2bS1zZXJ2aWNlOiBwb3N0aW5nIHJlc3BvbnNlIGZvciByZXF1ZXN0ICRpZCIpOwogICAgfQogICAgc2Iud3JpdGUoJyJyZXN1bHQiOicpOwogIH0KICBzYi53cml0ZSgnJHtyZXNwb25zZS5fdG9TdHJpbmcoKX0sJyk7CiAgaWYgKGlkIGlzIFN0cmluZykgewogICAgc2Iud3JpdGUoJyJpZCI6IiRpZCJ9Jyk7CiAgfSBlbHNlIHsKICAgIHNiLndyaXRlKCciaWQiOiRpZH0nKTsKICB9CiAgcmVwbHlQb3J0LnNlbmQoc2IudG9TdHJpbmcoKSk7Cn0KCkBwYXRjaAppbnQgX2dldFNlcnZpY2VNYWpvclZlcnNpb24oKSBuYXRpdmUgIkRldmVsb3Blcl9nZXRTZXJ2aWNlTWFqb3JWZXJzaW9uIjsKCkBwYXRjaAppbnQgX2dldFNlcnZpY2VNaW5vclZlcnNpb24oKSBuYXRpdmUgIkRldmVsb3Blcl9nZXRTZXJ2aWNlTWlub3JWZXJzaW9uIjsKCkBwYXRjaAp2b2lkIF9nZXRTZXJ2ZXJJbmZvKFNlbmRQb3J0IHNlbmRQb3J0KSBuYXRpdmUgIkRldmVsb3Blcl9nZXRTZXJ2ZXJJbmZvIjsKCkBwYXRjaAp2b2lkIF93ZWJTZXJ2ZXJDb250cm9sKFNlbmRQb3J0IHNlbmRQb3J0LCBib29sIGVuYWJsZSkKICAgIG5hdGl2ZSAiRGV2ZWxvcGVyX3dlYlNlcnZlckNvbnRyb2wiOwoKQHBhdGNoClN0cmluZyBfZ2V0SXNvbGF0ZUlERnJvbVNlbmRQb3J0KFNlbmRQb3J0IHNlbmRQb3J0KQogICAgbmF0aXZlICJEZXZlbG9wZXJfZ2V0SXNvbGF0ZUlERnJvbVNlbmRQb3J0IjsKgKsATk48AU1PSysBJAEnASUBOhgYAQdOAQc6AQcZFBgSFQ8SHhxLBB8bRwQgLAsuBFAaAgEdAVBMAQc0IgEHOCgBB0MqAUxKDyUTICIYDxonMzcEEAgsFDgzQTsMBB0zMjM7DAQgTTgvQRdJMzE1NEwGOxpPKAYCAS9QGh0UGTwGHRoMBBYoIRwZQwYaCxk9BhsEKBYdCxsEIQIBB0kBB0kBB0kBBzcpAQc0MQEjZGFydDpkZXZlbG9wZXItcGF0Y2gvZGV2ZWxvcGVyLmRhcnQtb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi90aW1lbGluZS5kYXJ0hHMvLyBDb3B5cmlnaHQgKGMpIDIwMTUsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiZGV2ZWxvcGVyLmRhcnQiOwoKQHBhdGNoCmJvb2wgX2lzRGFydFN0cmVhbUVuYWJsZWQoKSBuYXRpdmUgIlRpbWVsaW5lX2lzRGFydFN0cmVhbUVuYWJsZWQiOwoKQHBhdGNoCmludCBfZ2V0VHJhY2VDbG9jaygpIG5hdGl2ZSAiVGltZWxpbmVfZ2V0VHJhY2VDbG9jayI7CgpAcGF0Y2gKaW50IF9nZXRUaHJlYWRDcHVDbG9jaygpIG5hdGl2ZSAiVGltZWxpbmVfZ2V0VGhyZWFkQ3B1Q2xvY2siOwoKQHBhdGNoCmludCBfZ2V0TmV4dEFzeW5jSWQoKSBuYXRpdmUgIlRpbWVsaW5lX2dldE5leHRBc3luY0lkIjsKCkBwYXRjaAp2b2lkIF9yZXBvcnRUYXNrRXZlbnQoaW50IHN0YXJ0LCBpbnQgdGFza0lkLCBTdHJpbmcgcGhhc2UsIFN0cmluZyBjYXRlZ29yeSwKICAgIFN0cmluZyBuYW1lLCBTdHJpbmcgYXJndW1lbnRzQXNKc29uKSBuYXRpdmUgIlRpbWVsaW5lX3JlcG9ydFRhc2tFdmVudCI7CgpAcGF0Y2gKdm9pZCBfcmVwb3J0Q29tcGxldGVFdmVudChpbnQgc3RhcnQsIGludCBzdGFydENwdSwgU3RyaW5nIGNhdGVnb3J5LCBTdHJpbmcgbmFtZSwKICAgIFN0cmluZyBhcmd1bWVudHNBc0pzb24pIG5hdGl2ZSAiVGltZWxpbmVfcmVwb3J0Q29tcGxldGVFdmVudCI7CgpAcGF0Y2gKdm9pZCBfcmVwb3J0Rmxvd0V2ZW50KGludCBzdGFydCwgaW50IHN0YXJ0Q3B1LCBTdHJpbmcgY2F0ZWdvcnksIFN0cmluZyBuYW1lLAogICAgaW50IHR5cGUsIGludCBpZCwgU3RyaW5nIGFyZ3VtZW50c0FzSnNvbikgbmF0aXZlICJUaW1lbGluZV9yZXBvcnRGbG93RXZlbnQiOwoKQHBhdGNoCnZvaWQgX3JlcG9ydEluc3RhbnRFdmVudChpbnQgc3RhcnQsIFN0cmluZyBjYXRlZ29yeSwgU3RyaW5nIG5hbWUsCiAgICBTdHJpbmcgYXJndW1lbnRzQXNKc29uKSBuYXRpdmUgIlRpbWVsaW5lX3JlcG9ydEluc3RhbnRFdmVudCI7CiMATk48AR0BB0MBBzYBBz4BBzgBB0xMAQdRQwEHTVEBB0JCASJkYXJ0OmRldmVsb3Blci1wYXRjaC90aW1lbGluZS5kYXJ0KG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9mZmkvZmZpLmRhcnSPaC8vIENvcHlyaWdodCAoYykgMjAxOSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUKCi8vLyB7QGNhdGVnb3J5IFZNfQovLy8ge0Bub2RvY30KbGlicmFyeSBkYXJ0LmZmaTsKCnBhcnQgIm5hdGl2ZV90eXBlLmRhcnQiOwpwYXJ0ICJhbm5vdGF0aW9ucy5kYXJ0IjsKcGFydCAiZHluYW1pY19saWJyYXJ5LmRhcnQiOwpwYXJ0ICJzdHJ1Y3QuZGFydCI7CgovLy8gTnVtYmVyIG9mIGJ5dGVzIHVzZWQgYnkgbmF0aXZlIHR5cGUgVC4KLy8vCi8vLyBJbmNsdWRlcyBwYWRkaW5nIGFuZCBhbGlnbm1lbnQgb2Ygc3RydWN0cy4KZXh0ZXJuYWwgaW50IHNpemVPZjxUIGV4dGVuZHMgTmF0aXZlVHlwZT4oKTsKCi8vLyBSZXByZXNlbnRzIGEgcG9pbnRlciBpbnRvIHRoZSBuYXRpdmUgQyBtZW1vcnkuCmZpbmFsIFBvaW50ZXI8Vm9pZD4gbnVsbHB0ciA9IFBvaW50ZXIuZnJvbUFkZHJlc3MoMCk7CgovLy8gUmVwcmVzZW50cyBhIHBvaW50ZXIgaW50byB0aGUgbmF0aXZlIEMgbWVtb3J5LiBDYW5ub3QgYmUgZXh0ZW5kZWQuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgUG9pbnRlcjxUIGV4dGVuZHMgTmF0aXZlVHlwZT4gZXh0ZW5kcyBOYXRpdmVUeXBlIHsKICAvLy8gQWxsb2NhdGUgW2NvdW50XSBlbGVtZW50cyBvZiB0eXBlIFtUXSBvbiB0aGUgbmF0aXZlIGhlYXAgdmlhIG1hbGxvYygpIGFuZAogIC8vLyByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBuZXdseSBhbGxvY2F0ZWQgbWVtb3J5LgogIC8vLwogIC8vLyBOb3RlIHRoYXQgdGhlIG1lbW9yeSBpcyB1bmluaXRpYWxpemVkLgogIGV4dGVybmFsIGZhY3RvcnkgUG9pbnRlci5hbGxvY2F0ZSh7aW50IGNvdW50OiAxfSk7CgogIC8vLyBDb25zdHJ1Y3Rpb24gZnJvbSByYXcgaW50ZWdlci4KICBleHRlcm5hbCBmYWN0b3J5IFBvaW50ZXIuZnJvbUFkZHJlc3MoaW50IHB0cik7CgogIC8vLyBDb252ZXJ0IERhcnQgZnVuY3Rpb24gdG8gYSBDIGZ1bmN0aW9uIHBvaW50ZXIsIGF1dG9tYXRpY2FsbHkgbWFyc2hhbGxpbmcKICAvLy8gdGhlIGFyZ3VtZW50cyBhbmQgcmV0dXJuIHZhbHVlCiAgLy8vCiAgLy8vIElmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24gd2hpbGUgY2FsbGluZyBgZigpYCwgdGhlIG5hdGl2ZSBmdW5jdGlvbiB3aWxsCiAgLy8vIHJldHVybiBgZXhjZXB0aW9uYWxSZXR1cm5gLCB3aGljaCBtdXN0IGJlIGFzc2lnbmFibGUgdG8gcmV0dXJuIHR5cGUgb2YgYGZgLgogIC8vLwogIC8vLyBUaGUgcmV0dXJuZWQgZnVuY3Rpb24gYWRkcmVzcyBjYW4gb25seSBiZSBpbnZva2VkIG9uIHRoZSBtdXRhdG9yIChtYWluKQogIC8vLyB0aHJlYWQgb2YgdGhlIGN1cnJlbnQgaXNvbGF0ZS4gSXQgd2lsbCBhYm9ydCB0aGUgcHJvY2VzcyBpZiBpbnZva2VkIG9uIGFueQogIC8vLyBvdGhlciB0aHJlYWQuCiAgLy8vCiAgLy8vIFRoZSBwb2ludGVyIHJldHVybmVkIHdpbGwgcmVtYWluIGFsaXZlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGN1cnJlbnQKICAvLy8gaXNvbGF0ZSdzIGxpZmV0aW1lLiBBZnRlciB0aGUgaXNvbGF0ZSBpdCB3YXMgY3JlYXRlZCBpbiBpcyB0ZXJtaW5hdGVkLAogIC8vLyBpbnZva2luZyBpdCBmcm9tIG5hdGl2ZSBjb2RlIHdpbGwgY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yLgogIC8vLwogIC8vLyBEb2VzIG5vdCBhY2NlcHQgZHluYW1pYyBpbnZvY2F0aW9ucyAtLSB3aGVyZSB0aGUgdHlwZSBvZiB0aGUgcmVjZWl2ZXIgaXMKICAvLy8gW2R5bmFtaWNdLgogIGV4dGVybmFsIHN0YXRpYyBQb2ludGVyPE5hdGl2ZUZ1bmN0aW9uPFQ+PiBmcm9tRnVuY3Rpb248VCBleHRlbmRzIEZ1bmN0aW9uPigKICAgICAgQERhcnRSZXByZXNlbnRhdGlvbk9mKCJUIikgRnVuY3Rpb24gZiwgT2JqZWN0IGV4Y2VwdGlvbmFsUmV0dXJuKTsKCiAgLy8vIFN0b3JlIGEgRGFydCB2YWx1ZSBpbnRvIHRoaXMgbG9jYXRpb24uCiAgLy8vCiAgLy8vIFRoZSBbdmFsdWVdIGlzIGF1dG9tYXRpY2FsbHkgbWFyc2hhbGxlZCBpbnRvIGl0cyBuYXRpdmUgcmVwcmVzZW50YXRpb24uCiAgLy8vIE5vdGUgdGhhdCBpbnRzIHdoaWNoIGRvIG5vdCBmaXQgaW4gW1RdIGFyZSB0cnVuY2F0ZWQgYW5kIHNpZ24gZXh0ZW5kZWQsCiAgLy8vIGFuZCBkb3VibGVzIHN0b3JlZCBpbnRvIFBvaW50ZXI8W0Zsb2F0XT4gbG9zZSBwcmVjaXNpb24uCiAgZXh0ZXJuYWwgdm9pZCBzdG9yZShARGFydFJlcHJlc2VudGF0aW9uT2YoIlQiKSBPYmplY3QgdmFsdWUpOwoKICAvLy8gTG9hZCBhIERhcnQgdmFsdWUgZnJvbSB0aGlzIGxvY2F0aW9uLgogIC8vLwogIC8vLyBUaGUgdmFsdWUgaXMgYXV0b21hdGljYWxseSB1bm1hcnNoYWxsZWQgZnJvbSBpdHMgbmF0aXZlIHJlcHJlc2VudGF0aW9uLgogIC8vLyBMb2FkaW5nIGEgW1N0cnVjdF0gcmVmZXJlbmNlIHJldHVybnMgYSByZWZlcmVuY2UgYmFja2VkIGJ5IG5hdGl2ZSBtZW1vcnkKICAvLy8gKHRoZSBzYW1lIHBvaW50ZXIgYXMgaXQncyBsb2FkZWQgZnJvbSkuCiAgZXh0ZXJuYWwgUiBsb2FkPEBEYXJ0UmVwcmVzZW50YXRpb25PZigiVCIpIFI+KCk7CgogIC8vLyBBY2Nlc3MgdG8gdGhlIHJhdyBwb2ludGVyIHZhbHVlLgogIC8vLyBPbiAzMi1iaXQgc3lzdGVtcywgdGhlIHVwcGVyIDMyLWJpdHMgb2YgdGhlIHJlc3VsdCBhcmUgMC4KICBleHRlcm5hbCBpbnQgZ2V0IGFkZHJlc3M7CgogIC8vLyBQb2ludGVyIGFyaXRobWV0aWMgKHRha2VzIGVsZW1lbnQgc2l6ZSBpbnRvIGFjY291bnQpLgogIGV4dGVybmFsIFBvaW50ZXI8VD4gZWxlbWVudEF0KGludCBpbmRleCk7CgogIC8vLyBQb2ludGVyIGFyaXRobWV0aWMgKGJ5dGUgb2Zmc2V0KS4KICAvLyBUT0RPKGRhY29oYXJrZXMpOiByZW1vdmUgdGhpcz8KICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzU4ODMKICBleHRlcm5hbCBQb2ludGVyPFQ+IG9mZnNldEJ5KGludCBvZmZzZXRJbkJ5dGVzKTsKCiAgLy8vIENhc3QgUG9pbnRlcjxUPiB0byBhIFBvaW50ZXI8Vj4uCiAgZXh0ZXJuYWwgUG9pbnRlcjxVPiBjYXN0PFUgZXh0ZW5kcyBOYXRpdmVUeXBlPigpOwoKICAvLy8gQ29udmVydCB0byBEYXJ0IGZ1bmN0aW9uLCBhdXRvbWF0aWNhbGx5IG1hcnNoYWxsaW5nIHRoZSBhcmd1bWVudHMKICAvLy8gYW5kIHJldHVybiB2YWx1ZS4KICAvLy8KICAvLy8gQ2FuIG9ubHkgYmUgY2FsbGVkIG9uIFtQb2ludGVyXTxbTmF0aXZlRnVuY3Rpb25dPi4gRG9lcyBub3QgYWNjZXB0IGR5bmFtaWMKICAvLy8gaW52b2NhdGlvbnMgLS0gd2hlcmUgdGhlIHR5cGUgb2YgdGhlIHJlY2VpdmVyIGlzIFtkeW5hbWljXS4KICBleHRlcm5hbCBSIGFzRnVuY3Rpb248QERhcnRSZXByZXNlbnRhdGlvbk9mKCJUIikgUiBleHRlbmRzIEZ1bmN0aW9uPigpOwoKICAvLy8gRnJlZSBtZW1vcnkgb24gdGhlIEMgaGVhcCBwb2ludGVkIHRvIGJ5IHRoaXMgcG9pbnRlciB3aXRoIGZyZWUoKS4KICAvLy8KICAvLy8gTm90ZSB0aGF0IHRoaXMgemVyb3Mgb3V0IHRoZSBhZGRyZXNzLgogIGV4dGVybmFsIHZvaWQgZnJlZSgpOwoKICAvLy8gRXF1YWxpdHkgZm9yIFBvaW50ZXJzIG9ubHkgZGVwZW5kcyBvbiB0aGVpciBhZGRyZXNzLgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gYWRkcmVzcyA9PSBvdGhlci5hZGRyZXNzOwogIH0KCiAgLy8vIFRoZSBoYXNoIGNvZGUgZm9yIGEgUG9pbnRlciBvbmx5IGRlcGVuZHMgb24gaXRzIGFkZHJlc3MuCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gYWRkcmVzcy5oYXNoQ29kZTsKICB9Cn0KagBOTjsBEw0SARkZHRQBKwQvLQEzNgFHGjlQNgYtNQElMQFPJQZOUgZOURQGTU1CBk8RT0gBLQZOTj9AASwGTk8uMwEnQBwBPCwBKCQzMwEnNAFIGAZRQkoBSAYsGAE7HCUlBAE/FR0EAgEIZGFydDpmZmkub3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9mZmlfcGF0Y2guZGFydIkcLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCmltcG9ydCAiZGFydDpfaW50ZXJuYWwiIHNob3cgcGF0Y2g7CgpAcGF0Y2gKaW50IHNpemVPZjxUIGV4dGVuZHMgTmF0aXZlVHlwZT4oKSBuYXRpdmUgIkZmaV9zaXplT2YiOwoKUG9pbnRlcjxUPiBfYWxsb2NhdGU8VCBleHRlbmRzIE5hdGl2ZVR5cGU+KGludCBjb3VudCkgbmF0aXZlICJGZmlfYWxsb2NhdGUiOwoKUG9pbnRlcjxUPiBfZnJvbUFkZHJlc3M8VCBleHRlbmRzIE5hdGl2ZVR5cGU+KGludCBwdHIpIG5hdGl2ZSAiRmZpX2Zyb21BZGRyZXNzIjsKCi8vIFRoZSByZWFsIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gKGZvciBpbnRlcmZhY2UgY2FsbHMpIGxpdmVzIGluCi8vIEJ1aWxkRmZpQXNGdW5jdGlvbkNhbGwgaW4gdGhlIEtlcm5lbCBmcm9udGVuZC4gTm8gY2FsbHMgY2FuIGFjdHVhbGx5IHJlYWNoCi8vIHRoaXMgZnVuY3Rpb24uCkRTIF9hc0Z1bmN0aW9uSW50ZXJuYWw8RFMgZXh0ZW5kcyBGdW5jdGlvbiwgTlMgZXh0ZW5kcyBGdW5jdGlvbj4oCiAgICBQb2ludGVyPE5hdGl2ZUZ1bmN0aW9uPE5TPj4gcHRyKSBuYXRpdmUgIkZmaV9hc0Z1bmN0aW9uSW50ZXJuYWwiOwoKQHBhdGNoCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgUG9pbnRlcjxUIGV4dGVuZHMgTmF0aXZlVHlwZT4gewogIEBwYXRjaAogIGZhY3RvcnkgUG9pbnRlci5hbGxvY2F0ZSh7aW50IGNvdW50OiAxfSkgPT4gX2FsbG9jYXRlPFQ+KGNvdW50KTsKCiAgQHBhdGNoCiAgZmFjdG9yeSBQb2ludGVyLmZyb21BZGRyZXNzKGludCBwdHIpID0+IF9mcm9tQWRkcmVzcyhwdHIpOwoKICBAcGF0Y2gKICBzdGF0aWMgUG9pbnRlcjxOYXRpdmVGdW5jdGlvbjxUPj4gZnJvbUZ1bmN0aW9uPFQgZXh0ZW5kcyBGdW5jdGlvbj4oCiAgICAgIEBEYXJ0UmVwcmVzZW50YXRpb25PZigiVCIpIEZ1bmN0aW9uIGYsCiAgICAgIE9iamVjdCBleGNlcHRpb25hbFJldHVybikgbmF0aXZlICJGZmlfZnJvbUZ1bmN0aW9uIjsKCiAgLy8gVE9ETyhzamluZGVsKTogV2hlbiBOTkJEIGlzIGF2YWlsYWJsZSwgd2Ugc2hvdWxkIGNoYW5nZSBgdmFsdWVgIHRvIGJlCiAgLy8gbm9uLW51bGwuCiAgQHBhdGNoCiAgdm9pZCBzdG9yZShPYmplY3QgdmFsdWUpIG5hdGl2ZSAiRmZpX3N0b3JlIjsKCiAgQHBhdGNoCiAgUiBsb2FkPFI+KCkgbmF0aXZlICJGZmlfbG9hZCI7CgogIEBwYXRjaAogIGludCBnZXQgYWRkcmVzcyBuYXRpdmUgIkZmaV9hZGRyZXNzIjsKCiAgLy8gTm90ZSB0aGlzIGNvdWxkIGFsc28gYmUgaW1wbG1lbnRlZCB3aXRob3V0IGFuIGV4dHJhIG5hdGl2ZSBhcyBvZmZzZXRCeQogIC8vIChlbGVtZW50U2l6ZSgpKmluZGV4KS4gVGhpcyB3b3VsZCBiZSAyIG5hdGl2ZSBjYWxscyByYXRoZXIgdGhhbiBvbmUuIFdoYXQKICAvLyB3b3VsZCBiZSBiZXR0ZXI/CiAgQHBhdGNoCiAgUG9pbnRlcjxUPiBlbGVtZW50QXQoaW50IGluZGV4KSBuYXRpdmUgIkZmaV9lbGVtZW50QXQiOwoKICAvLyBOb3RlIHRoaXMgY291bGQgYWxzbyBiZSBpbXBsbWVudGVkIHdpdGhvdXQgYW4gZXh0cmEgIG5hdGl2ZSBhcwogIC8vIGZyb21BZGRyZXNzKGFkZHJlc3MpLiBUaGlzIHdvdWxkIGJlIDIgbmF0aXZlIGNhbGxzIHJhdGhlciB0aGFuIG9uZS4KICAvLyBXaGF0IHdvdWxkIGJlIGJldHRlcj8KICBAcGF0Y2gKICBQb2ludGVyPFQ+IG9mZnNldEJ5KGludCBvZmZzZXRJbkJ5dGVzKSBuYXRpdmUgIkZmaV9vZmZzZXRCeSI7CgogIC8vIE5vdGUgdGhpcyBjb3VsZCBhbHNvIGJlIGltcGxlbWVudGVkIHdpdGhvdXQgYW4gZXh0cmEgbmF0aXZlIGFzCiAgLy8gZnJvbUFkZHJlc3MoYWRkcmVzcykuIFRoaXMgd291bGQgYmUgMiBuYXRpdmUgY2FsbHMgcmF0aGVyIHRoYW4gb25lLgogIC8vIFdoYXQgd291bGQgYmUgYmV0dGVyPwogIEBwYXRjaAogIFBvaW50ZXI8VT4gY2FzdDxVIGV4dGVuZHMgTmF0aXZlVHlwZT4oKSBuYXRpdmUgIkZmaV9jYXN0IjsKCiAgQHBhdGNoCiAgUiBhc0Z1bmN0aW9uPFIgZXh0ZW5kcyBGdW5jdGlvbj4oKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKCJQb2ludGVyLmFzRnVuY3Rpb24gY2Fubm90IGJlIGNhbGxlZCBkeW5hbWljYWxseS4iKTsKICB9CgogIEBwYXRjaAogIHZvaWQgZnJlZSgpIG5hdGl2ZSAiRmZpX2ZyZWUiOwp9CkgATk48ASQBBzgBTQFRAUtOEkJGAQcaJglDAQk9AQlGLTsBSw8JLwEJIQEJKAFMTxYJOgFESRsJQAFESRsJPQEJJ1AEAQkhAgEdZGFydDpmZmktcGF0Y2gvZmZpX3BhdGNoLmRhcnQwb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2ZmaS9uYXRpdmVfdHlwZS5kYXJ0jsEvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmZmaTsKCi8vLyBbTmF0aXZlVHlwZV0ncyBzdWJ0eXBlcyByZXByZXNlbnQgYSBuYXRpdmUgdHlwZSBpbiBDLgovLy8KLy8vIFtOYXRpdmVUeXBlXSdzIHN1YnR5cGVzIGFyZSBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZQovLy8gcHVyZWx5IGFzIG1hcmtlcnMgaW4gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBOYXRpdmVUeXBlIHsKICBjb25zdCBOYXRpdmVUeXBlKCk7Cn0KCi8vLyBbX05hdGl2ZUludGVnZXJdJ3Mgc3VidHlwZXMgcmVwcmVzZW50IGEgbmF0aXZlIGludGVnZXIgaW4gQy4KLy8vCi8vLyBbX05hdGl2ZUludGVnZXJdJ3Mgc3VidHlwZXMgYXJlIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlCi8vLyBwdXJlbHkgYXMgbWFya2VycyBpbiB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIF9OYXRpdmVJbnRlZ2VyIGV4dGVuZHMgTmF0aXZlVHlwZSB7CiAgY29uc3QgX05hdGl2ZUludGVnZXIoKTsKfQoKLy8vIFtfTmF0aXZlRG91YmxlXSdzIHN1YnR5cGVzIHJlcHJlc2VudCBhIG5hdGl2ZSBmbG9hdCBvciBkb3VibGUgaW4gQy4KLy8vCi8vLyBbX05hdGl2ZURvdWJsZV0ncyBzdWJ0eXBlcyBhcmUgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmUKLy8vIHB1cmVseSBhcyBtYXJrZXJzIGluIHR5cGUgc2lnbmF0dXJlcy4KY2xhc3MgX05hdGl2ZURvdWJsZSBleHRlbmRzIE5hdGl2ZVR5cGUgewogIGNvbnN0IF9OYXRpdmVEb3VibGUoKTsKfQoKLy8vIFJlcHJlc2VudHMgYSBuYXRpdmUgc2lnbmVkIDggYml0IGludGVnZXIgaW4gQy4KLy8vCi8vLyBbSW50OF0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcyBtYXJrZXIgaW4KLy8vIHR5cGUgc2lnbmF0dXJlcy4KY2xhc3MgSW50OCBleHRlbmRzIF9OYXRpdmVJbnRlZ2VyIHsKICBjb25zdCBJbnQ4KCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIHNpZ25lZCAxNiBiaXQgaW50ZWdlciBpbiBDLgovLy8KLy8vIFtJbnQxNl0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcyBtYXJrZXIgaW4KLy8vIHR5cGUgc2lnbmF0dXJlcy4KY2xhc3MgSW50MTYgZXh0ZW5kcyBfTmF0aXZlSW50ZWdlciB7CiAgY29uc3QgSW50MTYoKTsKfQoKLy8vIFJlcHJlc2VudHMgYSBuYXRpdmUgc2lnbmVkIDMyIGJpdCBpbnRlZ2VyIGluIEMuCi8vLwovLy8gW0ludDMyXSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzIG1hcmtlciBpbgovLy8gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBJbnQzMiBleHRlbmRzIF9OYXRpdmVJbnRlZ2VyIHsKICBjb25zdCBJbnQzMigpOwp9CgovLy8gUmVwcmVzZW50cyBhIG5hdGl2ZSBzaWduZWQgNjQgYml0IGludGVnZXIgaW4gQy4KLy8vCi8vLyBbSW50NjRdIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMgbWFya2VyIGluCi8vLyB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIEludDY0IGV4dGVuZHMgX05hdGl2ZUludGVnZXIgewogIGNvbnN0IEludDY0KCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIHVuc2lnbmVkIDggYml0IGludGVnZXIgaW4gQy4KLy8vCi8vLyBbVWludDhdIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMgbWFya2VyIGluCi8vLyB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIFVpbnQ4IGV4dGVuZHMgX05hdGl2ZUludGVnZXIgewogIGNvbnN0IFVpbnQ4KCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIHVuc2lnbmVkIDE2IGJpdCBpbnRlZ2VyIGluIEMuCi8vLwovLy8gW1VpbnQxNl0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcyBtYXJrZXIKLy8vIGluIHR5cGUgc2lnbmF0dXJlcy4KY2xhc3MgVWludDE2IGV4dGVuZHMgX05hdGl2ZUludGVnZXIgewogIGNvbnN0IFVpbnQxNigpOwp9CgovLy8gUmVwcmVzZW50cyBhIG5hdGl2ZSB1bnNpZ25lZCAzMiBiaXQgaW50ZWdlciBpbiBDLgovLy8KLy8vIFtVaW50MzJdIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMgbWFya2VyCi8vLyBpbiB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIFVpbnQzMiBleHRlbmRzIF9OYXRpdmVJbnRlZ2VyIHsKICBjb25zdCBVaW50MzIoKTsKfQoKLy8vIFJlcHJlc2VudHMgYSBuYXRpdmUgdW5zaWduZWQgNjQgYml0IGludGVnZXIgaW4gQy4KLy8vCi8vLyBbVWludDY0XSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzIG1hcmtlcgovLy8gaW4gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBVaW50NjQgZXh0ZW5kcyBfTmF0aXZlSW50ZWdlciB7CiAgY29uc3QgVWludDY0KCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIHBvaW50ZXItc2l6ZWQgaW50ZWdlciBpbiBDLgovLy8KLy8vIFtJbnRQdHJdIGlzIG5vdCBjb25zdHJ1Y3RpYmxlIGluIHRoZSBEYXJ0IGNvZGUgYW5kIHNlcnZlcyBwdXJlbHkgYXMgbWFya2VyCi8vLyBpbiB0eXBlIHNpZ25hdHVyZXMuCmNsYXNzIEludFB0ciBleHRlbmRzIF9OYXRpdmVJbnRlZ2VyIHsKICBjb25zdCBJbnRQdHIoKTsKfQoKLy8vIFJlcHJlc2VudHMgYSBuYXRpdmUgMzIgYml0IGZsb2F0IGluIEMuCi8vLwovLy8gW0Zsb2F0XSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzIG1hcmtlcgovLy8gaW4gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBGbG9hdCBleHRlbmRzIF9OYXRpdmVEb3VibGUgewogIGNvbnN0IEZsb2F0KCk7Cn0KCi8vLyBSZXByZXNlbnRzIGEgbmF0aXZlIDY0IGJpdCBkb3VibGUgaW4gQy4KLy8vCi8vLyBbRG91YmxlXSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzIG1hcmtlcgovLy8gaW4gdHlwZSBzaWduYXR1cmVzLgpjbGFzcyBEb3VibGUgZXh0ZW5kcyBfTmF0aXZlRG91YmxlIHsKICBjb25zdCBEb3VibGUoKTsKfQoKLy8vIFJlcHJlc2VudHMgYSB2b2lkIHR5cGUgaW4gQy4KLy8vCi8vLyBbVm9pZF0gaXMgbm90IGNvbnN0cnVjdGlibGUgaW4gdGhlIERhcnQgY29kZSBhbmQgc2VydmVzIHB1cmVseSBhcyBtYXJrZXIgaW4KLy8vIHR5cGUgc2lnbmF0dXJlcy4KQHVuc2l6ZWQKY2xhc3MgVm9pZCBleHRlbmRzIE5hdGl2ZVR5cGUgewogIGNvbnN0IFZvaWQoKTsKfQoKLy8vIFJlcHJlc2VudHMgYSBmdW5jdGlvbiB0eXBlIGluIEMuCi8vLwovLy8gW05hdGl2ZUZ1bmN0aW9uXSBpcyBub3QgY29uc3RydWN0aWJsZSBpbiB0aGUgRGFydCBjb2RlIGFuZCBzZXJ2ZXMgcHVyZWx5IGFzCi8vLyBtYXJrZXIgaW4gdHlwZSBzaWduYXR1cmVzLgpAdW5zaXplZApjbGFzcyBOYXRpdmVGdW5jdGlvbjxUIGV4dGVuZHMgRnVuY3Rpb24+IGV4dGVuZHMgTmF0aXZlVHlwZSB7fQqAhwBOTjwBEgE6BE0qExYCAUEEUSoqGgIBSARQKikZAgEzBFAVJBACATQEURUlEQIBNARRFSURAgE0BFEVJRECATUEURUlEQIBNgRPGCYSAgE2BE8YJhICATYETxgmEgIBNARPGCYSAgErBE4YJBECASwETxglEgIBIQRQFQkgEAIBJQRQHwk/ARlkYXJ0OmZmaS9uYXRpdmVfdHlwZS5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9mZmkvYW5ub3RhdGlvbnMuZGFydIXdLy8gQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5mZmk7CgpjbGFzcyBEYXJ0UmVwcmVzZW50YXRpb25PZiB7CiAgLy8vIFJlcHJlc2VudHMgdGhlIERhcnQgdHlwZSBjb3JyZXNwb25kaW5nIHRvIGEgW05hdGl2ZVR5cGVdLgogIC8vLwogIC8vLyBbSW50OF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gW2ludF0KICAvLy8gW0ludDE2XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IFtpbnRdCiAgLy8vIFtJbnQzMl0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBbaW50XQogIC8vLyBbSW50NjRdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gW2ludF0KICAvLy8gW1VpbnQ4XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IFtpbnRdCiAgLy8vIFtVaW50MTZdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBbaW50XQogIC8vLyBbVWludDMyXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gW2ludF0KICAvLy8gW1VpbnQ2NF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IFtpbnRdCiAgLy8vIFtJbnRQdHJdICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiBbaW50XQogIC8vLyBbRG91YmxlXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gW2RvdWJsZV0KICAvLy8gW0Zsb2F0XSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+IFtkb3VibGVdCiAgLy8vIFtQb2ludGVyXTxUPiAgICAgICAgICAgICAgICAgICAgICAgICAtPiBbUG9pbnRlcl08VD4KICAvLy8gW05hdGl2ZUZ1bmN0aW9uXTxUMSBGdW5jdGlvbihUMiwgVDMpIC0+IFMxIEZ1bmN0aW9uKFMyLCBTMykKICAvLy8gICAgd2hlcmUgRGFydFJlcHJlc2VudGF0aW9uT2YoVG4pIC0+IFNuCiAgLy8vIFQgZXh0ZW5kcyBTdHJ1Y3Q8VD4gICAgICAgICAgICAgICAgICAtPiBUCiAgY29uc3QgRGFydFJlcHJlc2VudGF0aW9uT2YoU3RyaW5nIG5hdGl2ZVR5cGUpOwp9CgpjbGFzcyBVbnNpemVkIHsKICBjb25zdCBVbnNpemVkKCk7Cn0KCi8vLyBUaGlzIFtOYXRpdmVUeXBlXSBkb2VzIG5vdCBoYXZlIHByZWRlZmluZWQgc2l6ZS4KLy8vCi8vLyBVbnNpemVkIE5hdGl2ZVR5cGVzIGRvIG5vdCBzdXBwb3J0IFtzaXplT2ZdIGJlY2F1c2UgdGhlaXIgc2l6ZSBpcyB1bmtub3duLgovLy8gQ29uc2VxdWVudGx5LCBbYWxsb2NhdGVdLCBbUG9pbnRlci5sb2FkXSwgW1BvaW50ZXIuc3RvcmVdLCBhbmQKLy8vIFtQb2ludGVyLmVsZW1lbnRBdF0gYXJlIG5vdCBhdmFpbGFibGUuCmNvbnN0IHVuc2l6ZWQgPSBjb25zdCBVbnNpemVkKCk7CicATk48ARIBHUAGNDQ0NDQ0NDQ0Nzc7Qi4wMQIBEBMCATUET0MrIQEZZGFydDpmZmkvYW5ub3RhdGlvbnMuZGFydDRvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvZmZpL2R5bmFtaWNfbGlicmFyeS5kYXJ0hQcvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmZmaTsKCi8vLyBSZXByZXNlbnRzIGEgZHluYW1pY2FsbHkgbG9hZGVkIEMgbGlicmFyeS4KY2xhc3MgRHluYW1pY0xpYnJhcnkgewogIC8vLyBMb2FkcyBhIGR5bmFtaWMgbGlicmFyeSBmaWxlLiBUaGlzIGlzIHRoZSBlcXVpdmFsZW50IG9mIGRsb3Blbi4KICAvLy8KICAvLy8gVGhyb3dzIGFuIFtBcmd1bWVudEVycm9yXSBpZiBsb2FkaW5nIHRoZSBkeW5hbWljIGxpYnJhcnkgZmFpbHMuCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCBpdCBsb2FkcyB0aGUgZnVuY3Rpb25zIGluIHRoZSBsaWJyYXJ5IGxhemlseSAoUlRMRF9MQVpZKS4KICBleHRlcm5hbCBmYWN0b3J5IER5bmFtaWNMaWJyYXJ5Lm9wZW4oU3RyaW5nIG5hbWUpOwoKICAvLy8gTG9va3MgdXAgYSBzeW1ib2wgaW4gdGhlIFtEeW5hbWljTGlicmFyeV0gYW5kIHJldHVybnMgaXRzIGFkZHJlc3MgaW4KICAvLy8gbWVtb3J5LiBFcXVpdmFsZW50IG9mIGRsc3ltLgogIC8vLwogIC8vLyBUaHJvd3MgYW4gW0FyZ3VtZW50RXJyb3JdIGlmIGl0IGZhaWxzIHRvIGxvb2t1cCB0aGUgc3ltYm9sLgogIGV4dGVybmFsIFBvaW50ZXI8VD4gbG9va3VwPFQgZXh0ZW5kcyBOYXRpdmVUeXBlPihTdHJpbmcgc3ltYm9sTmFtZSk7CgogIC8vLyBIZWxwZXIgdGhhdCBjb21iaW5lcyBsb29rdXAgYW5kIGNhc3QgdG8gYSBEYXJ0IGZ1bmN0aW9uLgogIGV4dGVybmFsIEYgbG9va3VwRnVuY3Rpb248VCBleHRlbmRzIEZ1bmN0aW9uLCBGIGV4dGVuZHMgRnVuY3Rpb24+KAogICAgICBTdHJpbmcgc3ltYm9sTmFtZSk7CgogIC8vLyBEeW5hbWljIGxpYnJhcmllcyBhcmUgZXF1YWwgaWYgdGhleSBsb2FkIHRoZSBzYW1lIGxpYnJhcnkuCiAgZXh0ZXJuYWwgYm9vbCBvcGVyYXRvciA9PShvdGhlcik7CgogIC8vLyBUaGUgaGFzaCBjb2RlIGZvciBhIER5bmFtaWNMaWJyYXJ5IG9ubHkgZGVwZW5kcyBvbiB0aGUgbG9hZGVkIGxpYnJhcnkKICBleHRlcm5hbCBpbnQgZ2V0IGhhc2hDb2RlOwoKICAvLy8gVGhlIGhhbmRsZSB0byB0aGUgZHluYW1pYyBsaWJyYXJ5LgogIGV4dGVybmFsIFBvaW50ZXI8Vm9pZD4gZ2V0IGhhbmRsZTsKfQokAE5OPAESAS8XRgZGBko1AUsjBkJHAT9FGgFBJAFMHQEpJQIBHWRhcnQ6ZmZpL2R5bmFtaWNfbGlicmFyeS5kYXJ0Pm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZmZpX2R5bmFtaWNfbGlicmFyeV9wYXRjaC5kYXJ0hT8vLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgc2hvdyBwYXRjaDsKCkR5bmFtaWNMaWJyYXJ5IF9vcGVuKFN0cmluZyBuYW1lKSBuYXRpdmUgIkZmaV9kbF9vcGVuIjsKCkBwYXRjaApAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIER5bmFtaWNMaWJyYXJ5IHsKICBAcGF0Y2gKICBmYWN0b3J5IER5bmFtaWNMaWJyYXJ5Lm9wZW4oU3RyaW5nIG5hbWUpIHsKICAgIHJldHVybiBfb3BlbihuYW1lKTsKICB9CgogIEBwYXRjaAogIFBvaW50ZXI8VD4gbG9va3VwPFQgZXh0ZW5kcyBOYXRpdmVUeXBlPihTdHJpbmcgc3ltYm9sTmFtZSkKICAgICAgbmF0aXZlICJGZmlfZGxfbG9va3VwIjsKCiAgLy8gVGhlIHJlYWwgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbiBsaXZlcyBpbiBGZmlVc2VTaXRlc1RyYW5zZm9ybWVyCiAgLy8gZm9yIGludGVyZmFjZSBjYWxscy4gT25seSBkeW5hbWljIGNhbGxzICh3aGljaCBhcmUgaWxsZWdhbCkgcmVhY2ggdGhpcwogIC8vIGltcGxlbWVudGF0aW9uLgogIEBwYXRjaAogIEYgbG9va3VwRnVuY3Rpb248VCBleHRlbmRzIEZ1bmN0aW9uLCBGIGV4dGVuZHMgRnVuY3Rpb24+KFN0cmluZyBzeW1ib2xOYW1lKSB7CiAgICB0aHJvdyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICJEeW5hbWljIGludm9jYXRpb24gb2YgbG9va3VwRnVuY3Rpb24gaXMgbm90IHN1cHBvcnRlZC4iKTsKICB9CgogIC8vIFRPRE8oZGFjb2hhcmtlcyk6IEV4cG9zZSB0aGlzIHRvIHVzZXJzLCBvciBleHRlbmQgUG9pbnRlcj8KICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzU4ODEKICBpbnQgZ2V0SGFuZGxlKCkgbmF0aXZlICJGZmlfZGxfZ2V0SGFuZGxlIjsKCiAgQHBhdGNoCiAgYm9vbCBvcGVyYXRvciA9PShvdGhlcikgewogICAgaWYgKG90aGVyID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBnZXRIYW5kbGUoKSA9PSBvdGhlci5nZXRIYW5kbGUoKTsKICB9CgogIEBwYXRjaAogIGludCBnZXQgaGFzaENvZGUgewogICAgcmV0dXJuIGdldEhhbmRsZSgpLmhhc2hDb2RlOwogIH0KCiAgQHBhdGNoCiAgUG9pbnRlcjxWb2lkPiBnZXQgaGFuZGxlID0+IFBvaW50ZXIuZnJvbUFkZHJlc3MoZ2V0SGFuZGxlKCkpOwp9CjEATk48ASQBOAEHGhcJLRgEAQk9HgFOTBUJUBxDBAFAMy0BCRwlLQQBCRUhBAEJQAIBLWRhcnQ6ZmZpLXBhdGNoL2ZmaV9keW5hbWljX2xpYnJhcnlfcGF0Y2guZGFydCtvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvZmZpL3N0cnVjdC5kYXJ0hDQvLyBDb3B5cmlnaHQgKGMpIDIwMTksIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmZmaTsKCi8vLyBUaGlzIGNsYXNzIGlzIGV4dGVuZGVkIHRvIGRlZmluZSBzdHJ1Y3RzLgovLy8KLy8vIEZpZWxkcyBpbiBhIHN0cnVjdCwgYW5ub3RhdGVkIHdpdGggYSBzdWJ0eXBlIG9mIFtOYXRpdmVUeXBlXSwgYXJlCi8vLyBhdXRvbWF0aWNhbGx5IHRyYW5zZm9ybWVkIGludG8gd3JhcHBlcnMgdG8gYWNjZXNzIHRoZSBmaWVsZHMgb2YgdGhlIHN0cnVjdAovLy8gaW4gbmF0aXZlIG1lbW9yeS4KLy8vCi8vLyBBbGwgZmllbGRzIGluIGEgc3RydWN0IG11c3QgZWl0aGVyIGhhdmUgYSB0eXBlIHdoaWNoIGV4dGVuZHMgW05hdGl2ZVR5cGVdIG9yCi8vLyBlbHNlIGhhdmUgYW4gYW5ub3RhdGlvbiBpbmRpY2F0aW5nIHRoZSBjb3JyZXNwb25kaW5nIG5hdGl2ZSB0eXBlIChlLmcuCi8vLyAiQEludDMyKCkiIGZvciAiaW50IikuCi8vLwovLy8gSW5zdGFuY2VzIG9mIGEgc3ViY2xhc3Mgb2YgW1N0cnVjdF0gaGF2ZSByZWZlcmVuY2Ugc2VtYW50aWNzIGFuZCBhcmUgYmFja2VkCi8vLyBieSBuYXRpdmUgbWVtb3J5LiBUaGUgbWF5IGFsbG9jYXRlZCB2aWEgW1BvaW50ZXIuYWxsb2NhdGVdIG9yIGxvYWRlZCBmcm9tIGEKLy8vIFtQb2ludGVyXSwgYnV0IG5vdCBieSBhIGdlbmVyYXRpdmUgY29uc3RydWN0b3IuCmFic3RyYWN0IGNsYXNzIFN0cnVjdDxTIGV4dGVuZHMgTmF0aXZlVHlwZT4gZXh0ZW5kcyBOYXRpdmVUeXBlIHsKICAvLy8gUmV0dXJucyB0aGUgYWRkcmVzcyBiYWNraW5nIHRoZSByZWZlcmVuY2UuCiAgZmluYWwgUG9pbnRlcjxTPiBhZGRyZXNzT2Y7CgogIFN0cnVjdCgpIDogYWRkcmVzc09mID0gbnVsbDsKICBTdHJ1Y3QuZnJvbVBvaW50ZXIodGhpcy5hZGRyZXNzT2YpOwp9ChwATk48ARIBLgRGTxYEUUsbBFBQNEExHgEfJgIBFGRhcnQ6ZmZpL3N0cnVjdC5kYXJ0Mm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pbnRlcm5hbC9pbnRlcm5hbC5kYXJ0tY4vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKbGlicmFyeSBkYXJ0Ll9pbnRlcm5hbDsKCmltcG9ydCAnZGFydDpjb2xsZWN0aW9uJzsKCmltcG9ydCAnZGFydDphc3luYycKICAgIHNob3cKICAgICAgICBGdXR1cmUsCiAgICAgICAgU3RyZWFtLAogICAgICAgIFN0cmVhbVN1YnNjcmlwdGlvbiwKICAgICAgICBTdHJlYW1UcmFuc2Zvcm1lciwKICAgICAgICBTdHJlYW1UcmFuc2Zvcm1lckJhc2UsCiAgICAgICAgWm9uZTsKaW1wb3J0ICdkYXJ0OmNvbnZlcnQnIHNob3cgQ29udmVydGVyOwppbXBvcnQgJ2RhcnQ6Y29yZScgaGlkZSBTeW1ib2w7CmltcG9ydCAnZGFydDpjb3JlJyBhcyBjb3JlOwppbXBvcnQgJ2RhcnQ6bWF0aCcgc2hvdyBSYW5kb207CgpwYXJ0ICdhc3luY19jYXN0LmRhcnQnOwpwYXJ0ICdjYXN0LmRhcnQnOwpwYXJ0ICdpdGVyYWJsZS5kYXJ0JzsKcGFydCAnbGlzdC5kYXJ0JzsKcGFydCAncHJpbnQuZGFydCc7CnBhcnQgJ3NvcnQuZGFydCc7CnBhcnQgJ3N5bWJvbC5kYXJ0JzsKcGFydCAnbGlua2VkX2xpc3QuZGFydCc7CgovLyBQb3dlcnMgb2YgMTAgdXAgdG8gMTBeMjIgYXJlIHJlcHJlc2VudGFibGUgYXMgZG91Ymxlcy4KLy8gUG93ZXJzIG9mIDEwIGFib3ZlIHRoYXQgYXJlIG9ubHkgYXBwcm94aW1hdGUgZHVlIHRvIGxhY2sgb2YgcHJlY2lzc2lvbi4KLy8gVXNlZCBieSBkb3VibGUtcGFyc2luZy4KY29uc3QgUE9XRVJTX09GX1RFTiA9IGNvbnN0IFsKICAxLjAsIC8vIDAKICAxMC4wLAogIDEwMC4wLAogIDEwMDAuMCwKICAxMDAwMC4wLAogIDEwMDAwMC4wLCAvLyA1CiAgMTAwMDAwMC4wLAogIDEwMDAwMDAwLjAsCiAgMTAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMC4wLAogIDEwMDAwMDAwMDAwLjAsIC8vIDEwCiAgMTAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMC4wLAogIDEwMDAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMDAwMC4wLCAvLyAxNQogIDEwMDAwMDAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMDAwMDAwMC4wLAogIDEwMDAwMDAwMDAwMDAwMDAwMDAwLjAsCiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwLjAsIC8vIDIwCiAgMTAwMDAwMDAwMDAwMDAwMDAwMDAwMC4wLAogIDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLjAsCl07CgovKioKICogQW4gW0l0ZXJhYmxlXSBvZiB0aGUgVVRGLTE2IGNvZGUgdW5pdHMgb2YgYSBbU3RyaW5nXSBpbiBpbmRleCBvcmRlci4KICovCmNsYXNzIENvZGVVbml0cyBleHRlbmRzIFVubW9kaWZpYWJsZUxpc3RCYXNlPGludD4gewogIC8qKiBUaGUgc3RyaW5nIHRoYXQgdGhpcyBpcyB0aGUgY29kZSB1bml0cyBvZi4gKi8KICBmaW5hbCBTdHJpbmcgX3N0cmluZzsKCiAgQ29kZVVuaXRzKHRoaXMuX3N0cmluZyk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9zdHJpbmcubGVuZ3RoOwogIGludCBvcGVyYXRvciBbXShpbnQgaSkgPT4gX3N0cmluZy5jb2RlVW5pdEF0KGkpOwoKICBzdGF0aWMgU3RyaW5nIHN0cmluZ09mKENvZGVVbml0cyB1KSA9PiB1Ll9zdHJpbmc7Cn0KCi8vLyBNYXJrcyBhIGZ1bmN0aW9uIG9yIGxpYnJhcnkgYXMgaGF2aW5nIGFuIGV4dGVybmFsIGltcGxlbWVudGF0aW9uICgibmF0aXZlIgovLy8gaW4gdGhlIERhcnQgVk0pLgovLy8KLy8vIE9uIGEgZnVuY3Rpb24sIHRoaXMgcHJvdmlkZXMgYSBiYWNrZW5kLXNwZWNpZmljIFN0cmluZyB0aGF0IGNhbiBiZSB1c2VkIHRvCi8vLyBpZGVudGlmeSB0aGUgZnVuY3Rpb24ncyBpbXBsZW1lbnRhdGlvbi4KLy8vCi8vLyBPbiBhIGxpYnJhcnksIGl0IHByb3ZpZGVzIGEgVXJpIHRoYXQgY2FuIGJlIHVzZWQgdG8gbG9jYXRlIHRoZSBuYXRpdmUKLy8vIGxpYnJhcnkncyBpbXBsZW1lbnRhdGlvbi4KY2xhc3MgRXh0ZXJuYWxOYW1lIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBjb25zdCBFeHRlcm5hbE5hbWUodGhpcy5uYW1lKTsKfQoKLy8gU2hhcmVkIGhleC1wYXJzaW5nIHV0aWxpdGllcy4KCi8vLyBQYXJzZXMgYSBzaW5nbGUgaGV4LWRpZ2l0IGFzIGNvZGUgdW5pdC4KLy8vCi8vLyBSZXR1cm5zIGEgbmVnYXRpdmUgdmFsdWUgaWYgdGhlIGNoYXJhY3RlciBpcyBub3QgYSB2YWxpZCBoZXgtZGlnaXQuCmludCBoZXhEaWdpdFZhbHVlKGludCBjaGFyKSB7CiAgYXNzZXJ0KGNoYXIgPj0gMCAmJiBjaGFyIDw9IDB4RkZGRik7CiAgY29uc3QgaW50IGRpZ2l0MCA9IDB4MzA7CiAgY29uc3QgaW50IGEgPSAweDYxOwogIGNvbnN0IGludCBmID0gMHg2NjsKICBpbnQgZGlnaXQgPSBjaGFyIF4gZGlnaXQwOwogIGlmIChkaWdpdCA8PSA5KSByZXR1cm4gZGlnaXQ7CiAgaW50IGxldHRlciA9IChjaGFyIHwgMHgyMCk7CiAgaWYgKGEgPD0gbGV0dGVyICYmIGxldHRlciA8PSBmKSByZXR1cm4gbGV0dGVyIC0gKGEgLSAxMCk7CiAgcmV0dXJuIC0xOwp9CgovLy8gUGFyc2VzIHR3byBoZXggZGlnaXRzIGluIGEgc3RyaW5nLgovLy8KLy8vIFJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBpZiBlaXRoZXIgZGlnaXQgaXNuJ3QgdmFsaWQuCmludCBwYXJzZUhleEJ5dGUoU3RyaW5nIHNvdXJjZSwgaW50IGluZGV4KSB7CiAgYXNzZXJ0KGluZGV4ICsgMiA8PSBzb3VyY2UubGVuZ3RoKTsKICBpbnQgZGlnaXQxID0gaGV4RGlnaXRWYWx1ZShzb3VyY2UuY29kZVVuaXRBdChpbmRleCkpOwogIGludCBkaWdpdDIgPSBoZXhEaWdpdFZhbHVlKHNvdXJjZS5jb2RlVW5pdEF0KGluZGV4ICsgMSkpOwogIHJldHVybiBkaWdpdDEgKiAxNiArIGRpZ2l0MiAtIChkaWdpdDIgJiAyNTYpOwp9CgovLy8gR2l2ZW4gYW4gW2luc3RhbmNlXSBvZiBzb21lIGdlbmVyaWMgdHlwZSBbVF0sIGFuZCBbZXh0cmFjdF0sIGEgZmlyc3QtY2xhc3MKLy8vIGdlbmVyaWMgZnVuY3Rpb24gdGhhdCB0YWtlcyB0aGUgc2FtZSBudW1iZXIgb2YgdHlwZSBwYXJhbWV0ZXJzIGFzIFtUXSwKLy8vIGludm9rZXMgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgdHlwZSBhcmd1bWVudHMgdGhhdCB3ZXJlIHBhc3NlZCB0byBUCi8vLyB3aGVuIFtpbnN0YW5jZV0gd2FzIGNvbnN0cnVjdGVkLgovLy8KLy8vIEV4YW1wbGU6Ci8vLwovLy8gYGBgZGFydAovLy8gY2xhc3MgVHdvPEEsIEI+IHt9Ci8vLwovLy8gcHJpbnQoZXh0cmFjdFR5cGVBcmd1bWVudHM8TGlzdD4oPGludD5bXSwgPFQ+KCkgPT4gbmV3IFNldDxUPigpKSk7Ci8vLyAvLyBQcmludHM6IEluc3RhbmNlIG9mICdTZXQ8aW50PicuCi8vLwovLy8gcHJpbnQoZXh0cmFjdFR5cGVBcmd1bWVudHM8TWFwPig8U3RyaW5nLCBib29sPnt9LAovLy8gICAgIDxULCBTPigpID0+IG5ldyBUd288VCwgUz4pKTsKLy8vIC8vIFByaW50czogSW5zdGFuY2Ugb2YgJ1R3bzxTdHJpbmcsIGJvb2w+Jy4KLy8vIGBgYAovLy8KLy8vIFRoZSB0eXBlIGFyZ3VtZW50IFQgaXMgaW1wb3J0YW50IHRvIGNob29zZSB3aGljaCBzcGVjaWZpYyB0eXBlIHBhcmFtZXRlcgovLy8gbGlzdCBpbiBbaW5zdGFuY2VdJ3MgdHlwZSBoaWVyYXJjaHkgaXMgYmVpbmcgZXh0cmFjdGVkLiBDb25zaWRlcjoKLy8vCi8vLyBgYGBkYXJ0Ci8vLyBjbGFzcyBBPFQ+IHt9Ci8vLyBjbGFzcyBCPFQ+IHt9Ci8vLwovLy8gY2xhc3MgQyBpbXBsZW1lbnRzIEE8aW50PiwgQjxTdHJpbmc+IHt9Ci8vLwovLy8gbWFpbigpIHsKLy8vICAgdmFyIGMgPSBuZXcgQygpOwovLy8gICBwcmludChleHRyYWN0VHlwZUFyZ3VtZW50czxBPihjLCA8VD4oKSA9PiA8VD5bXSkpOwovLy8gICAvLyBQcmludHM6IEluc3RhbmNlIG9mICdMaXN0PGludD4nLgovLy8KLy8vICAgcHJpbnQoZXh0cmFjdFR5cGVBcmd1bWVudHM8Qj4oYywgPFQ+KCkgPT4gPFQ+W10pKTsKLy8vICAgLy8gUHJpbnRzOiBJbnN0YW5jZSBvZiAnTGlzdDxTdHJpbmc+Jy4KLy8vIH0KLy8vIGBgYAovLy8KLy8vIEEgY2FsbGVyIG11c3Qgbm90OgovLy8KLy8vICogICBQYXNzIGBudWxsYCBmb3IgW2luc3RhbmNlXS4KLy8vICogICBVc2UgYSBub24tY2xhc3MgdHlwZSAoaS5lLiBhIGZ1bmN0aW9uIHR5cGUpIGZvciBbVF0uCi8vLyAqICAgVXNlIGEgbm9uLWdlbmVyaWMgdHlwZSBmb3IgW1RdLgovLy8gKiAgIFBhc3MgYW4gaW5zdGFuY2Ugb2YgYSBnZW5lcmljIHR5cGUgYW5kIGEgZnVuY3Rpb24gdGhhdCBkb24ndCBib3RoIHRha2UKLy8vICAgICB0aGUgc2FtZSBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6Ci8vLwovLy8gICAgIGBgYGRhcnQKLy8vICAgICBleHRyYWN0VHlwZUFyZ3VtZW50czxMaXN0Pig8aW50PltdLCA8VCwgUz4oKSA9PiBudWxsKTsKLy8vICAgICBgYGAKLy8vCi8vLyBTZWUgdGhpcyBpc3N1ZSBmb3IgbW9yZSBjb250ZXh0OgovLy8gaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzMxMzcxCmV4dGVybmFsIE9iamVjdCBleHRyYWN0VHlwZUFyZ3VtZW50czxUPihUIGluc3RhbmNlLCBGdW5jdGlvbiBleHRyYWN0KTsKCi8vLyBBbm5vdGF0aW9uIGNsYXNzIG1hcmtpbmcgdGhlIHZlcnNpb24gd2hlcmUgU0RLIEFQSSB3YXMgYWRkZWQuCi8vLwovLy8gQSBgU2luY2VgIGFubm90YXRpb24gY2FuIGJlIGFwcGxpZWQgdG8gYSBsaWJyYXJ5IGRlY2xhcmF0aW9uLAovLy8gYW55IHB1YmxpYyBkZWNsYXJhdGlvbiBpbiBhIGxpYnJhcnksIG9yIGluIGEgY2xhc3MsIG9yIHRvCi8vLyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIuCi8vLwovLy8gSXQgc2lnbmlmaWVzIHRoYXQgdGhlIGV4cG9ydCwgbWVtYmVyIG9yIHBhcmFtZXRlciB3YXMgKmFkZGVkKiBpbgovLy8gdGhhdCB2ZXJzaW9uLgovLy8KLy8vIFdoZW4gYXBwbGllZCB0byBhIGxpYnJhcnkgZGVjbGFyYXRpb24sIGl0IGFsc28gYSBhcHBsaWVzIHRvCi8vLyBhbGwgbWVtYmVycyBkZWNsYXJlZCBvciBleHBvcnRlZCBieSB0aGF0IGxpYnJhcnkuCi8vLyBJZiBhcHBsaWVkIHRvIGEgY2xhc3MsIGl0IGFsc28gYXBwbGllcyB0byBhbGwgbWVtYmVycyBhbmQgY29uc3RydWN0b3JzCi8vLyBvZiB0aGF0IGNsYXNzLgovLy8gSWYgYXBwbGllZCB0byBhIGNsYXNzIG1ldGhvZCwgb3IgcGFyYW1ldGVyIG9mIHN1Y2gsCi8vLyBhbnkgbWV0aG9kIGltcGxlbWVudGluZyB0aGF0IGludGVyZmFjZSBtZXRob2QgaXMgYWxzbyBhbm5vdGF0ZWQuCi8vLyBJIG11bHRpcGxlIGBTaW5jZWAgYW5ub3RhdGlvbnMgYXBwbHkgdG8gdGhlIHNhbWUgZGVjbGFyYXRpb24gb3IKLy8vIHBhcmFtZXRlciwgdGhlIGxhdGVzdCB2ZXJzaW9uIHRha2VzIHByZWNlbmRlbmNlLgovLy8KLy8vIEFueSB1c2Ugb2YgYSBtYXJrZWQgQVBJIG1heSB0cmlnZ2VyIGEgd2FybmluZyBpZiB0aGUgdXNpbmcgY29kZQovLy8gZG9lcyBub3QgcmVxdWlyZSBhbiBTREsgdmVyc2lvbiBndWFyYW50ZWVpbmcgdGhhdCB0aGUgQVBJIGlzIGF2YWlsYWJsZSwKLy8vIHVubGVzcyB0aGUgQVBJIGZlYXR1cmUgaXMgYWxzbyBwcm92aWRlZCBieSBzb21ldGhpbmcgZWxzZS4KLy8vIEl0IGlzIG9ubHkgYSBwcm9ibGVtIGlmIGFuIGFubm90YXRlZCBmZWF0dXJlIGlzIHVzZWQsIGFuZCB0aGUgYW5ub3RhdGVkCi8vLyBBUEkgaXMgdGhlICpvbmx5KiB0aGluZyBwcm92aWRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkuCi8vLyBGb3IgZXhhbXBsZSwgdXNpbmcgYEZ1dHVyZWAgZXhwb3J0ZWQgYnkgYGRhcnQ6Y29yZWAgaXMgbm90IGEgcHJvYmxlbQovLy8gaWYgdGhlIHNhbWUgbGlicmFyeSBhbHNvIGltcG9ydHMgYGRhcnQ6YXN5bmNgLCBhbmQgdXNpbmcgYW4gb3B0aW9uYWwKLy8vIHBhcmFtZXRlciBvbiBhbiBpbnRlcmZhY2UgaXMgbm90IGEgcHJvYmxlbSBpZiB0aGUgc2FtZSB0eXBlIGFsc28KLy8vIGltcGxlbWVudHMgYW5vdGhlciBpbnRlcmZhY2UgcHJvdmlkaW5nIHRoZSBzYW1lIHBhcmFtZXRlci4KLy8vCi8vLyBUaGUgdmVyc2lvbiBtdXN0IGJlIGEgc2VtYW50aWMgdmVyc2lvbiAobGlrZSBgMS40LjJgIG9yIGAwLjkuNC1yZWMuNGApLAovLy8gb3IgdGhlIGZpcnN0IHR3byBudW1iZXJzIG9mIGEgc2VtYW50aWMgdmVyc2lvbiAobGlrZSBgMS4wYCBvciBgMi4yYCksCi8vLyByZXByZXNlbnRpbmcgYSBzdGFibGUgcmVsZWFzZSwgYW5kIGVxdWl2YWxlbnQgdG8gdGhlIHNlbWFudGljIHZlcnNpb24KLy8vIHlvdSBnZXQgYnkgYXBwZW5kaW5nIGEgYC4wYC4KQFNpbmNlKCIyLjIiKQpjbGFzcyBTaW5jZSB7CiAgZmluYWwgU3RyaW5nIHZlcnNpb247CiAgY29uc3QgU2luY2UodGhpcy52ZXJzaW9uKTsKfQoKLyoqCiAqIEhUVFAgc3RhdHVzIGNvZGVzLiAgRXhwb3J0ZWQgaW4gZGFydDppbyBhbmQgZGFydDpodG1sLgogKi8KYWJzdHJhY3QgY2xhc3MgSHR0cFN0YXR1cyB7CiAgc3RhdGljIGNvbnN0IGludCBjb250aW51ZV8gPSAxMDA7CiAgc3RhdGljIGNvbnN0IGludCBzd2l0Y2hpbmdQcm90b2NvbHMgPSAxMDE7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgcHJvY2Vzc2luZyA9IDEwMjsKICBzdGF0aWMgY29uc3QgaW50IG9rID0gMjAwOwogIHN0YXRpYyBjb25zdCBpbnQgY3JlYXRlZCA9IDIwMTsKICBzdGF0aWMgY29uc3QgaW50IGFjY2VwdGVkID0gMjAyOwogIHN0YXRpYyBjb25zdCBpbnQgbm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uID0gMjAzOwogIHN0YXRpYyBjb25zdCBpbnQgbm9Db250ZW50ID0gMjA0OwogIHN0YXRpYyBjb25zdCBpbnQgcmVzZXRDb250ZW50ID0gMjA1OwogIHN0YXRpYyBjb25zdCBpbnQgcGFydGlhbENvbnRlbnQgPSAyMDY7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgbXVsdGlTdGF0dXMgPSAyMDc7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgYWxyZWFkeVJlcG9ydGVkID0gMjA4OwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IGltVXNlZCA9IDIyNjsKICBzdGF0aWMgY29uc3QgaW50IG11bHRpcGxlQ2hvaWNlcyA9IDMwMDsKICBzdGF0aWMgY29uc3QgaW50IG1vdmVkUGVybWFuZW50bHkgPSAzMDE7CiAgc3RhdGljIGNvbnN0IGludCBmb3VuZCA9IDMwMjsKICBzdGF0aWMgY29uc3QgaW50IG1vdmVkVGVtcG9yYXJpbHkgPSAzMDI7IC8vIENvbW1vbiBhbGlhcyBmb3IgZm91bmQuCiAgc3RhdGljIGNvbnN0IGludCBzZWVPdGhlciA9IDMwMzsKICBzdGF0aWMgY29uc3QgaW50IG5vdE1vZGlmaWVkID0gMzA0OwogIHN0YXRpYyBjb25zdCBpbnQgdXNlUHJveHkgPSAzMDU7CiAgc3RhdGljIGNvbnN0IGludCB0ZW1wb3JhcnlSZWRpcmVjdCA9IDMwNzsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBwZXJtYW5lbnRSZWRpcmVjdCA9IDMwODsKICBzdGF0aWMgY29uc3QgaW50IGJhZFJlcXVlc3QgPSA0MDA7CiAgc3RhdGljIGNvbnN0IGludCB1bmF1dGhvcml6ZWQgPSA0MDE7CiAgc3RhdGljIGNvbnN0IGludCBwYXltZW50UmVxdWlyZWQgPSA0MDI7CiAgc3RhdGljIGNvbnN0IGludCBmb3JiaWRkZW4gPSA0MDM7CiAgc3RhdGljIGNvbnN0IGludCBub3RGb3VuZCA9IDQwNDsKICBzdGF0aWMgY29uc3QgaW50IG1ldGhvZE5vdEFsbG93ZWQgPSA0MDU7CiAgc3RhdGljIGNvbnN0IGludCBub3RBY2NlcHRhYmxlID0gNDA2OwogIHN0YXRpYyBjb25zdCBpbnQgcHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkID0gNDA3OwogIHN0YXRpYyBjb25zdCBpbnQgcmVxdWVzdFRpbWVvdXQgPSA0MDg7CiAgc3RhdGljIGNvbnN0IGludCBjb25mbGljdCA9IDQwOTsKICBzdGF0aWMgY29uc3QgaW50IGdvbmUgPSA0MTA7CiAgc3RhdGljIGNvbnN0IGludCBsZW5ndGhSZXF1aXJlZCA9IDQxMTsKICBzdGF0aWMgY29uc3QgaW50IHByZWNvbmRpdGlvbkZhaWxlZCA9IDQxMjsKICBzdGF0aWMgY29uc3QgaW50IHJlcXVlc3RFbnRpdHlUb29MYXJnZSA9IDQxMzsKICBzdGF0aWMgY29uc3QgaW50IHJlcXVlc3RVcmlUb29Mb25nID0gNDE0OwogIHN0YXRpYyBjb25zdCBpbnQgdW5zdXBwb3J0ZWRNZWRpYVR5cGUgPSA0MTU7CiAgc3RhdGljIGNvbnN0IGludCByZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlID0gNDE2OwogIHN0YXRpYyBjb25zdCBpbnQgZXhwZWN0YXRpb25GYWlsZWQgPSA0MTc7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgbWlzZGlyZWN0ZWRSZXF1ZXN0ID0gNDIxOwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IHVucHJvY2Vzc2FibGVFbnRpdHkgPSA0MjI7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgbG9ja2VkID0gNDIzOwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IGZhaWxlZERlcGVuZGVuY3kgPSA0MjQ7CiAgc3RhdGljIGNvbnN0IGludCB1cGdyYWRlUmVxdWlyZWQgPSA0MjY7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgcHJlY29uZGl0aW9uUmVxdWlyZWQgPSA0Mjg7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgdG9vTWFueVJlcXVlc3RzID0gNDI5OwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IHJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSA9IDQzMTsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBjb25uZWN0aW9uQ2xvc2VkV2l0aG91dFJlc3BvbnNlID0gNDQ0OwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IHVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zID0gNDUxOwogIEBTaW5jZSgiMi4xIikKICBzdGF0aWMgY29uc3QgaW50IGNsaWVudENsb3NlZFJlcXVlc3QgPSA0OTk7CiAgc3RhdGljIGNvbnN0IGludCBpbnRlcm5hbFNlcnZlckVycm9yID0gNTAwOwogIHN0YXRpYyBjb25zdCBpbnQgbm90SW1wbGVtZW50ZWQgPSA1MDE7CiAgc3RhdGljIGNvbnN0IGludCBiYWRHYXRld2F5ID0gNTAyOwogIHN0YXRpYyBjb25zdCBpbnQgc2VydmljZVVuYXZhaWxhYmxlID0gNTAzOwogIHN0YXRpYyBjb25zdCBpbnQgZ2F0ZXdheVRpbWVvdXQgPSA1MDQ7CiAgc3RhdGljIGNvbnN0IGludCBodHRwVmVyc2lvbk5vdFN1cHBvcnRlZCA9IDUwNTsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCB2YXJpYW50QWxzb05lZ290aWF0ZXMgPSA1MDY7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgaW5zdWZmaWNpZW50U3RvcmFnZSA9IDUwNzsKICBAU2luY2UoIjIuMSIpCiAgc3RhdGljIGNvbnN0IGludCBsb29wRGV0ZWN0ZWQgPSA1MDg7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgbm90RXh0ZW5kZWQgPSA1MTA7CiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyBjb25zdCBpbnQgbmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQgPSA1MTE7CiAgLy8gQ2xpZW50IGdlbmVyYXRlZCBzdGF0dXMgY29kZS4KICBzdGF0aWMgY29uc3QgaW50IG5ldHdvcmtDb25uZWN0VGltZW91dEVycm9yID0gNTk5OwoKICBARGVwcmVjYXRlZCgiVXNlIGNvbnRpbnVlXyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IENPTlRJTlVFID0gY29udGludWVfOwogIEBEZXByZWNhdGVkKCJVc2Ugc3dpdGNoaW5nUHJvdG9jb2xzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgU1dJVENISU5HX1BST1RPQ09MUyA9IHN3aXRjaGluZ1Byb3RvY29sczsKICBARGVwcmVjYXRlZCgiVXNlIG9rIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgT0sgPSBvazsKICBARGVwcmVjYXRlZCgiVXNlIGNyZWF0ZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBDUkVBVEVEID0gY3JlYXRlZDsKICBARGVwcmVjYXRlZCgiVXNlIGFjY2VwdGVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgQUNDRVBURUQgPSBhY2NlcHRlZDsKICBARGVwcmVjYXRlZCgiVXNlIG5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbiBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE5PTl9BVVRIT1JJVEFUSVZFX0lORk9STUFUSU9OID0gbm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOwogIEBEZXByZWNhdGVkKCJVc2Ugbm9Db250ZW50IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTk9fQ09OVEVOVCA9IG5vQ29udGVudDsKICBARGVwcmVjYXRlZCgiVXNlIHJlc2V0Q29udGVudCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFJFU0VUX0NPTlRFTlQgPSByZXNldENvbnRlbnQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBwYXJ0aWFsQ29udGVudCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFBBUlRJQUxfQ09OVEVOVCA9IHBhcnRpYWxDb250ZW50OwogIEBEZXByZWNhdGVkKCJVc2UgbXVsdGlwbGVDaG9pY2VzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTVVMVElQTEVfQ0hPSUNFUyA9IG11bHRpcGxlQ2hvaWNlczsKICBARGVwcmVjYXRlZCgiVXNlIG1vdmVkUGVybWFuZW50bHkgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNT1ZFRF9QRVJNQU5FTlRMWSA9IG1vdmVkUGVybWFuZW50bHk7CiAgQERlcHJlY2F0ZWQoIlVzZSBmb3VuZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEZPVU5EID0gZm91bmQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBtb3ZlZFRlbXBvcmFyaWx5IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTU9WRURfVEVNUE9SQVJJTFkgPSBtb3ZlZFRlbXBvcmFyaWx5OwogIEBEZXByZWNhdGVkKCJVc2Ugc2VlT3RoZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBTRUVfT1RIRVIgPSBzZWVPdGhlcjsKICBARGVwcmVjYXRlZCgiVXNlIG5vdE1vZGlmaWVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTk9UX01PRElGSUVEID0gbm90TW9kaWZpZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSB1c2VQcm94eSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFVTRV9QUk9YWSA9IHVzZVByb3h5OwogIEBEZXByZWNhdGVkKCJVc2UgdGVtcG9yYXJ5UmVkaXJlY3QgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBURU1QT1JBUllfUkVESVJFQ1QgPSB0ZW1wb3JhcnlSZWRpcmVjdDsKICBARGVwcmVjYXRlZCgiVXNlIGJhZFJlcXVlc3QgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBCQURfUkVRVUVTVCA9IGJhZFJlcXVlc3Q7CiAgQERlcHJlY2F0ZWQoIlVzZSB1bmF1dGhvcml6ZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBVTkFVVEhPUklaRUQgPSB1bmF1dGhvcml6ZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBwYXltZW50UmVxdWlyZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBQQVlNRU5UX1JFUVVJUkVEID0gcGF5bWVudFJlcXVpcmVkOwogIEBEZXByZWNhdGVkKCJVc2UgZm9yYmlkZGVuIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgRk9SQklEREVOID0gZm9yYmlkZGVuOwogIEBEZXByZWNhdGVkKCJVc2Ugbm90Rm91bmQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBOT1RfRk9VTkQgPSBub3RGb3VuZDsKICBARGVwcmVjYXRlZCgiVXNlIG1ldGhvZE5vdEFsbG93ZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNRVRIT0RfTk9UX0FMTE9XRUQgPSBtZXRob2ROb3RBbGxvd2VkOwogIEBEZXByZWNhdGVkKCJVc2Ugbm90QWNjZXB0YWJsZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE5PVF9BQ0NFUFRBQkxFID0gbm90QWNjZXB0YWJsZTsKICBARGVwcmVjYXRlZCgiVXNlIHByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEID0gcHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOwogIEBEZXByZWNhdGVkKCJVc2UgcmVxdWVzdFRpbWVvdXQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBSRVFVRVNUX1RJTUVPVVQgPSByZXF1ZXN0VGltZW91dDsKICBARGVwcmVjYXRlZCgiVXNlIGNvbmZsaWN0IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgQ09ORkxJQ1QgPSBjb25mbGljdDsKICBARGVwcmVjYXRlZCgiVXNlIGdvbmUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBHT05FID0gZ29uZTsKICBARGVwcmVjYXRlZCgiVXNlIGxlbmd0aFJlcXVpcmVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTEVOR1RIX1JFUVVJUkVEID0gbGVuZ3RoUmVxdWlyZWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBwcmVjb25kaXRpb25GYWlsZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBQUkVDT05ESVRJT05fRkFJTEVEID0gcHJlY29uZGl0aW9uRmFpbGVkOwogIEBEZXByZWNhdGVkKCJVc2UgcmVxdWVzdEVudGl0eVRvb0xhcmdlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgUkVRVUVTVF9FTlRJVFlfVE9PX0xBUkdFID0gcmVxdWVzdEVudGl0eVRvb0xhcmdlOwogIEBEZXByZWNhdGVkKCJVc2UgcmVxdWVzdFVyaVRvb0xvbmcgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBSRVFVRVNUX1VSSV9UT09fTE9ORyA9IHJlcXVlc3RVcmlUb29Mb25nOwogIEBEZXByZWNhdGVkKCJVc2UgdW5zdXBwb3J0ZWRNZWRpYVR5cGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBVTlNVUFBPUlRFRF9NRURJQV9UWVBFID0gdW5zdXBwb3J0ZWRNZWRpYVR5cGU7CiAgQERlcHJlY2F0ZWQoIlVzZSByZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgUkVRVUVTVEVEX1JBTkdFX05PVF9TQVRJU0ZJQUJMRSA9CiAgICAgIHJlcXVlc3RlZFJhbmdlTm90U2F0aXNmaWFibGU7CiAgQERlcHJlY2F0ZWQoIlVzZSBleHBlY3RhdGlvbkZhaWxlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IEVYUEVDVEFUSU9OX0ZBSUxFRCA9IGV4cGVjdGF0aW9uRmFpbGVkOwogIEBEZXByZWNhdGVkKCJVc2UgdXBncmFkZVJlcXVpcmVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgVVBHUkFERV9SRVFVSVJFRCA9IHVwZ3JhZGVSZXF1aXJlZDsKICBARGVwcmVjYXRlZCgiVXNlIGludGVybmFsU2VydmVyRXJyb3IgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBJTlRFUk5BTF9TRVJWRVJfRVJST1IgPSBpbnRlcm5hbFNlcnZlckVycm9yOwogIEBEZXByZWNhdGVkKCJVc2Ugbm90SW1wbGVtZW50ZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBOT1RfSU1QTEVNRU5URUQgPSBub3RJbXBsZW1lbnRlZDsKICBARGVwcmVjYXRlZCgiVXNlIGJhZEdhdGV3YXkgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBCQURfR0FURVdBWSA9IGJhZEdhdGV3YXk7CiAgQERlcHJlY2F0ZWQoIlVzZSBzZXJ2aWNlVW5hdmFpbGFibGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBTRVJWSUNFX1VOQVZBSUxBQkxFID0gc2VydmljZVVuYXZhaWxhYmxlOwogIEBEZXByZWNhdGVkKCJVc2UgZ2F0ZXdheVRpbWVvdXQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBHQVRFV0FZX1RJTUVPVVQgPSBnYXRld2F5VGltZW91dDsKICBARGVwcmVjYXRlZCgiVXNlIGh0dHBWZXJzaW9uTm90U3VwcG9ydGVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgSFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURUQgPSBodHRwVmVyc2lvbk5vdFN1cHBvcnRlZDsKICBARGVwcmVjYXRlZCgiVXNlIG5ldHdvcmtDb25uZWN0VGltZW91dEVycm9yIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTkVUV09SS19DT05ORUNUX1RJTUVPVVRfRVJST1IgPSBuZXR3b3JrQ29ubmVjdFRpbWVvdXRFcnJvcjsKfQqBgABOTjwBGAEaARQJEBAcGx8OJiAcIAEYEhYSExIUGQE6SxseDAgJCgsRDQ4PEBcSExQVHBcYGRohHB0DAQRIBDQ0GAEbASQzATQCAU8VBE8sBEoeFRUhAgEhASwESB4nGxYWHSAePA0CAScEOi0mODwwAgFPS0wlBA0EDBcERycENiUwCARNRgQMEhIELAQNFzkqBDktBggEFwQkPShPKwQQPwwEJTJHAUIEQj4bBEUSBEA2SxM4RUQ1BERMP0w5SUlFPwRMSkohDg4YHQIBBDoEHCQtECUdIiM2JCcpECYQKhAhKisgRiMmIywQLCUnKiQjKyg2KSMfKS0wLC83LBAtEC4QIRArKhAvECoQNhA6EDUQLi4pJS0pMhAwEC4QJxAmEDgjNQEnKTA9IBwlJiYoOVAnKyoxLDUtNy45IyIuOSYpKS8mKS87KC0qMC03JyomKS46KzM5UCw1JigiICw1MD0zRS89MkI6NSQvOy03MUAsNSgtMD0sNTVJOE8CAQ5kYXJ0Ol9pbnRlcm5hbDJvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW50ZXJuYWwvaXRlcmFibGUuZGFydMAAXnMvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll9pbnRlcm5hbDsKCi8qKgogKiBNYXJrZXIgaW50ZXJmYWNlIGZvciBbSXRlcmFibGVdIHN1YmNsYXNzZXMgdGhhdCBoYXZlIGFuIGVmZmljaWVudAogKiBbbGVuZ3RoXSBpbXBsZW1lbnRhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPFQ+IGV4dGVuZHMgSXRlcmFibGU8VD4gewogIGNvbnN0IEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKCk7CiAgLyoqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBpdGVyYWJsZS4KICAgKgogICAqIFRoaXMgaXMgYW4gZWZmaWNpZW50IG9wZXJhdGlvbiB0aGF0IGRvZXNuJ3QgcmVxdWlyZSBpdGVyYXRpbmcgdGhyb3VnaAogICAqIHRoZSBlbGVtZW50cy4KICAgKi8KICBpbnQgZ2V0IGxlbmd0aDsKfQoKLyoqCiAqIEFuIFtJdGVyYWJsZV0gZm9yIGNsYXNzZXMgdGhhdCBoYXZlIGVmZmljaWVudCBbbGVuZ3RoXSBhbmQgW2VsZW1lbnRBdF0uCiAqCiAqIEFsbCBvdGhlciBtZXRob2RzIGFyZSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBbbGVuZ3RoXSBhbmQgW2VsZW1lbnRBdF0sCiAqIGluY2x1ZGluZyBbaXRlcmF0b3JdLgogKi8KYWJzdHJhY3QgY2xhc3MgTGlzdEl0ZXJhYmxlPEU+IGV4dGVuZHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gewogIGludCBnZXQgbGVuZ3RoOwogIEUgZWxlbWVudEF0KGludCBpKTsKCiAgY29uc3QgTGlzdEl0ZXJhYmxlKCk7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBuZXcgTGlzdEl0ZXJhdG9yPEU+KHRoaXMpOwoKICB2b2lkIGZvckVhY2godm9pZCBhY3Rpb24oRSBlbGVtZW50KSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBhY3Rpb24oZWxlbWVudEF0KGkpKTsKICAgICAgaWYgKGxlbmd0aCAhPSB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgIH0KICAgIH0KICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gbGVuZ3RoID09IDA7CgogIEUgZ2V0IGZpcnN0IHsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICByZXR1cm4gZWxlbWVudEF0KDApOwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgcmV0dXJuIGVsZW1lbnRBdChsZW5ndGggLSAxKTsKICB9CgogIEUgZ2V0IHNpbmdsZSB7CiAgICBpZiAobGVuZ3RoID09IDApIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgaWYgKGxlbmd0aCA+IDEpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgIHJldHVybiBlbGVtZW50QXQoMCk7CiAgfQoKICBib29sIGNvbnRhaW5zKE9iamVjdCBlbGVtZW50KSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChlbGVtZW50QXQoaSkgPT0gZWxlbWVudCkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBib29sIGV2ZXJ5KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICghdGVzdChlbGVtZW50QXQoaSkpKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGJvb2wgYW55KGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnRBdChpKSkpIHJldHVybiB0cnVlOwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgRSBmaXJzdFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgRSBlbGVtZW50ID0gZWxlbWVudEF0KGkpOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgcmV0dXJuIGVsZW1lbnQ7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBsYXN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IGxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIEUgZWxlbWVudCA9IGVsZW1lbnRBdChpKTsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiBlbGVtZW50OwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgc2luZ2xlV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgRSBtYXRjaCA9IG51bGw7CiAgICBib29sIG1hdGNoRm91bmQgPSBmYWxzZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgRSBlbGVtZW50ID0gZWxlbWVudEF0KGkpOwogICAgICBpZiAodGVzdChlbGVtZW50KSkgewogICAgICAgIGlmIChtYXRjaEZvdW5kKSB7CiAgICAgICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgICAgICAgfQogICAgICAgIG1hdGNoRm91bmQgPSB0cnVlOwogICAgICAgIG1hdGNoID0gZWxlbWVudDsKICAgICAgfQogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogICAgaWYgKG1hdGNoRm91bmQpIHJldHVybiBtYXRjaDsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBTdHJpbmcgam9pbihbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgaWYgKCFzZXBhcmF0b3IuaXNFbXB0eSkgewogICAgICBpZiAobGVuZ3RoID09IDApIHJldHVybiAiIjsKICAgICAgU3RyaW5nIGZpcnN0ID0gIiR7ZWxlbWVudEF0KDApfSI7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKGZpcnN0KTsKICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGJ1ZmZlci53cml0ZShzZXBhcmF0b3IpOwogICAgICAgIGJ1ZmZlci53cml0ZShlbGVtZW50QXQoaSkpOwogICAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICAgIH0gZWxzZSB7CiAgICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgICBidWZmZXIud3JpdGUoZWxlbWVudEF0KGkpKTsKICAgICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgICB9CiAgfQoKICBJdGVyYWJsZTxFPiB3aGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gc3VwZXIud2hlcmUodGVzdCk7CgogIEl0ZXJhYmxlPFQ+IG1hcDxUPihUIGYoRSBlbGVtZW50KSkgPT4gbmV3IE1hcHBlZExpc3RJdGVyYWJsZTxFLCBUPih0aGlzLCBmKTsKCiAgRSByZWR1Y2UoRSBjb21iaW5lKEUgdmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICBFIHZhbHVlID0gZWxlbWVudEF0KDApOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIGVsZW1lbnRBdChpKSk7CiAgICAgIGlmIChsZW5ndGggIT0gdGhpcy5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdmFsdWU7CiAgfQoKICBUIGZvbGQ8VD4oVCBpbml0aWFsVmFsdWUsIFQgY29tYmluZShUIHByZXZpb3VzVmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIHZhciB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCBlbGVtZW50QXQoaSkpOwogICAgICBpZiAobGVuZ3RoICE9IHRoaXMubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcChpbnQgY291bnQpID0+IG5ldyBTdWJMaXN0SXRlcmFibGU8RT4odGhpcywgY291bnQsIG51bGwpOwoKICBJdGVyYWJsZTxFPiBza2lwV2hpbGUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IHN1cGVyLnNraXBXaGlsZSh0ZXN0KTsKCiAgSXRlcmFibGU8RT4gdGFrZShpbnQgY291bnQpID0+IG5ldyBTdWJMaXN0SXRlcmFibGU8RT4odGhpcywgMCwgY291bnQpOwoKICBJdGVyYWJsZTxFPiB0YWtlV2hpbGUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IHN1cGVyLnRha2VXaGlsZSh0ZXN0KTsKCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICBMaXN0PEU+IHJlc3VsdDsKICAgIGlmIChncm93YWJsZSkgewogICAgICByZXN1bHQgPSA8RT5bXS4ubGVuZ3RoID0gbGVuZ3RoOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0ID0gbmV3IExpc3Q8RT4obGVuZ3RoKTsKICAgIH0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgcmVzdWx0W2ldID0gZWxlbWVudEF0KGkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFNldDxFPiB0b1NldCgpIHsKICAgIFNldDxFPiByZXN1bHQgPSBuZXcgU2V0PEU+KCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIHJlc3VsdC5hZGQoZWxlbWVudEF0KGkpKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQp9CgpjbGFzcyBTdWJMaXN0SXRlcmFibGU8RT4gZXh0ZW5kcyBMaXN0SXRlcmFibGU8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IF9pdGVyYWJsZTsgLy8gSGFzIGVmZmljaWVudCBsZW5ndGggYW5kIGVsZW1lbnRBdC4KICBmaW5hbCBpbnQgX3N0YXJ0OwogIC8qKiBJZiBudWxsLCByZXByZXNlbnRzIHRoZSBsZW5ndGggb2YgdGhlIGl0ZXJhYmxlLiAqLwogIGZpbmFsIGludCBfZW5kT3JMZW5ndGg7CgogIFN1Ykxpc3RJdGVyYWJsZSh0aGlzLl9pdGVyYWJsZSwgdGhpcy5fc3RhcnQsIHRoaXMuX2VuZE9yTGVuZ3RoKSB7CiAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoX3N0YXJ0LCAic3RhcnQiKTsKICAgIGlmIChfZW5kT3JMZW5ndGggIT0gbnVsbCkgewogICAgICBSYW5nZUVycm9yLmNoZWNrTm90TmVnYXRpdmUoX2VuZE9yTGVuZ3RoLCAiZW5kIik7CiAgICAgIGlmIChfc3RhcnQgPiBfZW5kT3JMZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShfc3RhcnQsIDAsIF9lbmRPckxlbmd0aCwgInN0YXJ0Iik7CiAgICAgIH0KICAgIH0KICB9CgogIGludCBnZXQgX2VuZEluZGV4IHsKICAgIGludCBsZW5ndGggPSBfaXRlcmFibGUubGVuZ3RoOwogICAgaWYgKF9lbmRPckxlbmd0aCA9PSBudWxsIHx8IF9lbmRPckxlbmd0aCA+IGxlbmd0aCkgcmV0dXJuIGxlbmd0aDsKICAgIHJldHVybiBfZW5kT3JMZW5ndGg7CiAgfQoKICBpbnQgZ2V0IF9zdGFydEluZGV4IHsKICAgIGludCBsZW5ndGggPSBfaXRlcmFibGUubGVuZ3RoOwogICAgaWYgKF9zdGFydCA+IGxlbmd0aCkgcmV0dXJuIGxlbmd0aDsKICAgIHJldHVybiBfc3RhcnQ7CiAgfQoKICBpbnQgZ2V0IGxlbmd0aCB7CiAgICBpbnQgbGVuZ3RoID0gX2l0ZXJhYmxlLmxlbmd0aDsKICAgIGlmIChfc3RhcnQgPj0gbGVuZ3RoKSByZXR1cm4gMDsKICAgIGlmIChfZW5kT3JMZW5ndGggPT0gbnVsbCB8fCBfZW5kT3JMZW5ndGggPj0gbGVuZ3RoKSB7CiAgICAgIHJldHVybiBsZW5ndGggLSBfc3RhcnQ7CiAgICB9CiAgICByZXR1cm4gX2VuZE9yTGVuZ3RoIC0gX3N0YXJ0OwogIH0KCiAgRSBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICBpbnQgcmVhbEluZGV4ID0gX3N0YXJ0SW5kZXggKyBpbmRleDsKICAgIGlmIChpbmRleCA8IDAgfHwgcmVhbEluZGV4ID49IF9lbmRJbmRleCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5pbmRleChpbmRleCwgdGhpcywgImluZGV4Iik7CiAgICB9CiAgICByZXR1cm4gX2l0ZXJhYmxlLmVsZW1lbnRBdChyZWFsSW5kZXgpOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcChpbnQgY291bnQpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShjb3VudCwgImNvdW50Iik7CiAgICBpbnQgbmV3U3RhcnQgPSBfc3RhcnQgKyBjb3VudDsKICAgIGlmIChfZW5kT3JMZW5ndGggIT0gbnVsbCAmJiBuZXdTdGFydCA+PSBfZW5kT3JMZW5ndGgpIHsKICAgICAgcmV0dXJuIG5ldyBFbXB0eUl0ZXJhYmxlPEU+KCk7CiAgICB9CiAgICByZXR1cm4gbmV3IFN1Ykxpc3RJdGVyYWJsZTxFPihfaXRlcmFibGUsIG5ld1N0YXJ0LCBfZW5kT3JMZW5ndGgpOwogIH0KCiAgSXRlcmFibGU8RT4gdGFrZShpbnQgY291bnQpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShjb3VudCwgImNvdW50Iik7CiAgICBpZiAoX2VuZE9yTGVuZ3RoID09IG51bGwpIHsKICAgICAgcmV0dXJuIG5ldyBTdWJMaXN0SXRlcmFibGU8RT4oX2l0ZXJhYmxlLCBfc3RhcnQsIF9zdGFydCArIGNvdW50KTsKICAgIH0gZWxzZSB7CiAgICAgIGludCBuZXdFbmQgPSBfc3RhcnQgKyBjb3VudDsKICAgICAgaWYgKF9lbmRPckxlbmd0aCA8IG5ld0VuZCkgcmV0dXJuIHRoaXM7CiAgICAgIHJldHVybiBuZXcgU3ViTGlzdEl0ZXJhYmxlPEU+KF9pdGVyYWJsZSwgX3N0YXJ0LCBuZXdFbmQpOwogICAgfQogIH0KCiAgTGlzdDxFPiB0b0xpc3Qoe2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICBpbnQgc3RhcnQgPSBfc3RhcnQ7CiAgICBpbnQgZW5kID0gX2l0ZXJhYmxlLmxlbmd0aDsKICAgIGlmIChfZW5kT3JMZW5ndGggIT0gbnVsbCAmJiBfZW5kT3JMZW5ndGggPCBlbmQpIGVuZCA9IF9lbmRPckxlbmd0aDsKICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW5ndGggPCAwKSBsZW5ndGggPSAwOwogICAgTGlzdDxFPiByZXN1bHQgPQogICAgICAgIGdyb3dhYmxlID8gKG5ldyBMaXN0PEU+KCkuLmxlbmd0aCA9IGxlbmd0aCkgOiBuZXcgTGlzdDxFPihsZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHRbaV0gPSBfaXRlcmFibGUuZWxlbWVudEF0KHN0YXJ0ICsgaSk7CiAgICAgIGlmIChfaXRlcmFibGUubGVuZ3RoIDwgZW5kKSB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCi8qKgogKiBBbiBbSXRlcmF0b3JdIHRoYXQgaXRlcmF0ZXMgYSBsaXN0LWxpa2UgW0l0ZXJhYmxlXS4KICoKICogQWxsIGl0ZXJhdGlvbnMgaXMgZG9uZSBpbiB0ZXJtcyBvZiBbSXRlcmFibGUubGVuZ3RoXSBhbmQKICogW0l0ZXJhYmxlLmVsZW1lbnRBdF0uIFRoZXNlIG9wZXJhdGlvbnMgYXJlIGZhc3QgZm9yIGxpc3QtbGlrZQogKiBpdGVyYWJsZXMuCiAqLwpjbGFzcyBMaXN0SXRlcmF0b3I8RT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgSXRlcmFibGU8RT4gX2l0ZXJhYmxlOwogIGZpbmFsIGludCBfbGVuZ3RoOwogIGludCBfaW5kZXg7CiAgRSBfY3VycmVudDsKCiAgTGlzdEl0ZXJhdG9yKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKQogICAgICA6IF9pdGVyYWJsZSA9IGl0ZXJhYmxlLAogICAgICAgIF9sZW5ndGggPSBpdGVyYWJsZS5sZW5ndGgsCiAgICAgICAgX2luZGV4ID0gMDsKCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGludCBsZW5ndGggPSBfaXRlcmFibGUubGVuZ3RoOwogICAgaWYgKF9sZW5ndGggIT0gbGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IoX2l0ZXJhYmxlKTsKICAgIH0KICAgIGlmIChfaW5kZXggPj0gbGVuZ3RoKSB7CiAgICAgIF9jdXJyZW50ID0gbnVsbDsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgX2N1cnJlbnQgPSBfaXRlcmFibGUuZWxlbWVudEF0KF9pbmRleCk7CiAgICBfaW5kZXgrKzsKICAgIHJldHVybiB0cnVlOwogIH0KfQoKdHlwZWRlZiBUIF9UcmFuc2Zvcm1hdGlvbjxTLCBUPihTIHZhbHVlKTsKCmNsYXNzIE1hcHBlZEl0ZXJhYmxlPFMsIFQ+IGV4dGVuZHMgSXRlcmFibGU8VD4gewogIGZpbmFsIEl0ZXJhYmxlPFM+IF9pdGVyYWJsZTsKICBmaW5hbCBfVHJhbnNmb3JtYXRpb248UywgVD4gX2Y7CgogIGZhY3RvcnkgTWFwcGVkSXRlcmFibGUoSXRlcmFibGU8Uz4gaXRlcmFibGUsIFQgZnVuY3Rpb24oUyB2YWx1ZSkpIHsKICAgIGlmIChpdGVyYWJsZSBpcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZSkgewogICAgICByZXR1cm4gbmV3IEVmZmljaWVudExlbmd0aE1hcHBlZEl0ZXJhYmxlPFMsIFQ+KGl0ZXJhYmxlLCBmdW5jdGlvbik7CiAgICB9CiAgICByZXR1cm4gbmV3IE1hcHBlZEl0ZXJhYmxlPFMsIFQ+Ll8oaXRlcmFibGUsIGZ1bmN0aW9uKTsKICB9CgogIE1hcHBlZEl0ZXJhYmxlLl8odGhpcy5faXRlcmFibGUsIHRoaXMuX2YpOwoKICBJdGVyYXRvcjxUPiBnZXQgaXRlcmF0b3IgPT4gbmV3IE1hcHBlZEl0ZXJhdG9yPFMsIFQ+KF9pdGVyYWJsZS5pdGVyYXRvciwgX2YpOwoKICAvLyBMZW5ndGggcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGluZGVwZW5kZW50IG9mIHRoZSBtYXBwaW5nLgogIGludCBnZXQgbGVuZ3RoID0+IF9pdGVyYWJsZS5sZW5ndGg7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfaXRlcmFibGUuaXNFbXB0eTsKCiAgLy8gSW5kZXggYmFzZWQgbG9va3VwIGNhbiBiZSBkb25lIGJlZm9yZSB0cmFuc2Zvcm1pbmcuCiAgVCBnZXQgZmlyc3QgPT4gX2YoX2l0ZXJhYmxlLmZpcnN0KTsKICBUIGdldCBsYXN0ID0+IF9mKF9pdGVyYWJsZS5sYXN0KTsKICBUIGdldCBzaW5nbGUgPT4gX2YoX2l0ZXJhYmxlLnNpbmdsZSk7CiAgVCBlbGVtZW50QXQoaW50IGluZGV4KSA9PiBfZihfaXRlcmFibGUuZWxlbWVudEF0KGluZGV4KSk7Cn0KCmNsYXNzIEVmZmljaWVudExlbmd0aE1hcHBlZEl0ZXJhYmxlPFMsIFQ+IGV4dGVuZHMgTWFwcGVkSXRlcmFibGU8UywgVD4KICAgIGltcGxlbWVudHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8VD4gewogIEVmZmljaWVudExlbmd0aE1hcHBlZEl0ZXJhYmxlKEl0ZXJhYmxlPFM+IGl0ZXJhYmxlLCBUIGZ1bmN0aW9uKFMgdmFsdWUpKQogICAgICA6IHN1cGVyLl8oaXRlcmFibGUsIGZ1bmN0aW9uKTsKfQoKY2xhc3MgTWFwcGVkSXRlcmF0b3I8UywgVD4gZXh0ZW5kcyBJdGVyYXRvcjxUPiB7CiAgVCBfY3VycmVudDsKICBmaW5hbCBJdGVyYXRvcjxTPiBfaXRlcmF0b3I7CiAgZmluYWwgX1RyYW5zZm9ybWF0aW9uPFMsIFQ+IF9mOwoKICBNYXBwZWRJdGVyYXRvcih0aGlzLl9pdGVyYXRvciwgdGhpcy5fZik7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX2l0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgX2N1cnJlbnQgPSBfZihfaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgX2N1cnJlbnQgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgVCBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKfQoKLyoqCiAqIFNwZWNpYWxpemVkIGFsdGVybmF0aXZlIHRvIFtNYXBwZWRJdGVyYWJsZV0gZm9yIG1hcHBlZCBbTGlzdF1zLgogKgogKiBFeHBlY3RzIGVmZmljaWVudCBgbGVuZ3RoYCBhbmQgYGVsZW1lbnRBdGAgb24gdGhlIHNvdXJjZSBpdGVyYWJsZS4KICovCmNsYXNzIE1hcHBlZExpc3RJdGVyYWJsZTxTLCBUPiBleHRlbmRzIExpc3RJdGVyYWJsZTxUPiB7CiAgZmluYWwgSXRlcmFibGU8Uz4gX3NvdXJjZTsKICBmaW5hbCBfVHJhbnNmb3JtYXRpb248UywgVD4gX2Y7CgogIE1hcHBlZExpc3RJdGVyYWJsZSh0aGlzLl9zb3VyY2UsIHRoaXMuX2YpOwoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfc291cmNlLmxlbmd0aDsKICBUIGVsZW1lbnRBdChpbnQgaW5kZXgpID0+IF9mKF9zb3VyY2UuZWxlbWVudEF0KGluZGV4KSk7Cn0KCnR5cGVkZWYgYm9vbCBfRWxlbWVudFByZWRpY2F0ZTxFPihFIGVsZW1lbnQpOwoKY2xhc3MgV2hlcmVJdGVyYWJsZTxFPiBleHRlbmRzIEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBJdGVyYWJsZTxFPiBfaXRlcmFibGU7CiAgZmluYWwgX0VsZW1lbnRQcmVkaWNhdGU8RT4gX2Y7CgogIFdoZXJlSXRlcmFibGUodGhpcy5faXRlcmFibGUsIHRoaXMuX2YpOwoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgPT4gbmV3IFdoZXJlSXRlcmF0b3I8RT4oX2l0ZXJhYmxlLml0ZXJhdG9yLCBfZik7CgogIC8vIFNwZWNpYWxpemF0aW9uIG9mIFtJdGVyYWJsZS5tYXBdIHRvIG5vbi1FZmZpY2llbnRMZW5ndGhJdGVyYWJsZS4KICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZWxlbWVudCkpID0+IG5ldyBNYXBwZWRJdGVyYWJsZTxFLCBUPi5fKHRoaXMsIGYpOwp9CgpjbGFzcyBXaGVyZUl0ZXJhdG9yPEU+IGV4dGVuZHMgSXRlcmF0b3I8RT4gewogIGZpbmFsIEl0ZXJhdG9yPEU+IF9pdGVyYXRvcjsKICBmaW5hbCBfRWxlbWVudFByZWRpY2F0ZTxFPiBfZjsKCiAgV2hlcmVJdGVyYXRvcih0aGlzLl9pdGVyYXRvciwgdGhpcy5fZik7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICB3aGlsZSAoX2l0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgaWYgKF9mKF9pdGVyYXRvci5jdXJyZW50KSkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBFIGdldCBjdXJyZW50ID0+IF9pdGVyYXRvci5jdXJyZW50Owp9Cgp0eXBlZGVmIEl0ZXJhYmxlPFQ+IF9FeHBhbmRGdW5jdGlvbjxTLCBUPihTIHNvdXJjZUVsZW1lbnQpOwoKY2xhc3MgRXhwYW5kSXRlcmFibGU8UywgVD4gZXh0ZW5kcyBJdGVyYWJsZTxUPiB7CiAgZmluYWwgSXRlcmFibGU8Uz4gX2l0ZXJhYmxlOwogIGZpbmFsIF9FeHBhbmRGdW5jdGlvbjxTLCBUPiBfZjsKCiAgRXhwYW5kSXRlcmFibGUodGhpcy5faXRlcmFibGUsIHRoaXMuX2YpOwoKICBJdGVyYXRvcjxUPiBnZXQgaXRlcmF0b3IgPT4gbmV3IEV4cGFuZEl0ZXJhdG9yPFMsIFQ+KF9pdGVyYWJsZS5pdGVyYXRvciwgX2YpOwp9CgpjbGFzcyBFeHBhbmRJdGVyYXRvcjxTLCBUPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPFQ+IHsKICBmaW5hbCBJdGVyYXRvcjxTPiBfaXRlcmF0b3I7CiAgZmluYWwgX0V4cGFuZEZ1bmN0aW9uPFMsIFQ+IF9mOwogIC8vIEluaXRpYWxpemUgX2N1cnJlbnRFeHBhbnNpb24gdG8gYW4gZW1wdHkgaXRlcmFibGUuIEEgbnVsbCB2YWx1ZQogIC8vIG1hcmtzIHRoZSBlbmQgb2YgaXRlcmF0aW9uLCBhbmQgd2UgZG9uJ3Qgd2FudCB0byBjYWxsIF9mIGJlZm9yZQogIC8vIHRoZSBmaXJzdCBtb3ZlTmV4dCBjYWxsLgogIEl0ZXJhdG9yPFQ+IF9jdXJyZW50RXhwYW5zaW9uID0gY29uc3QgRW1wdHlJdGVyYXRvcigpOwogIFQgX2N1cnJlbnQ7CgogIEV4cGFuZEl0ZXJhdG9yKHRoaXMuX2l0ZXJhdG9yLCB0aGlzLl9mKTsKCiAgVCBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfY3VycmVudEV4cGFuc2lvbiA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICB3aGlsZSAoIV9jdXJyZW50RXhwYW5zaW9uLm1vdmVOZXh0KCkpIHsKICAgICAgX2N1cnJlbnQgPSBudWxsOwogICAgICBpZiAoX2l0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgICAvLyBJZiBfZiB0aHJvd3MsIHRoaXMgZW5kcyBpdGVyYXRpb24uIE90aGVyd2lzZSBfY3VycmVudEV4cGFuc2lvbiBhbmQKICAgICAgICAvLyBfY3VycmVudCB3aWxsIGJlIHNldCBhZ2FpbiBiZWxvdy4KICAgICAgICBfY3VycmVudEV4cGFuc2lvbiA9IG51bGw7CiAgICAgICAgX2N1cnJlbnRFeHBhbnNpb24gPSBfZihfaXRlcmF0b3IuY3VycmVudCkuaXRlcmF0b3I7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBfY3VycmVudCA9IF9jdXJyZW50RXhwYW5zaW9uLmN1cnJlbnQ7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KCmNsYXNzIFRha2VJdGVyYWJsZTxFPiBleHRlbmRzIEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBJdGVyYWJsZTxFPiBfaXRlcmFibGU7CiAgZmluYWwgaW50IF90YWtlQ291bnQ7CgogIGZhY3RvcnkgVGFrZUl0ZXJhYmxlKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlLCBpbnQgdGFrZUNvdW50KSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbCh0YWtlQ291bnQsICJ0YWtlQ291bnQiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZSh0YWtlQ291bnQsICJ0YWtlQ291bnQiKTsKICAgIGlmIChpdGVyYWJsZSBpcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZSkgewogICAgICByZXR1cm4gbmV3IEVmZmljaWVudExlbmd0aFRha2VJdGVyYWJsZTxFPihpdGVyYWJsZSwgdGFrZUNvdW50KTsKICAgIH0KICAgIHJldHVybiBuZXcgVGFrZUl0ZXJhYmxlPEU+Ll8oaXRlcmFibGUsIHRha2VDb3VudCk7CiAgfQoKICBUYWtlSXRlcmFibGUuXyh0aGlzLl9pdGVyYWJsZSwgdGhpcy5fdGFrZUNvdW50KTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgVGFrZUl0ZXJhdG9yPEU+KF9pdGVyYWJsZS5pdGVyYXRvciwgX3Rha2VDb3VudCk7CiAgfQp9CgpjbGFzcyBFZmZpY2llbnRMZW5ndGhUYWtlSXRlcmFibGU8RT4gZXh0ZW5kcyBUYWtlSXRlcmFibGU8RT4KICAgIGltcGxlbWVudHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gewogIEVmZmljaWVudExlbmd0aFRha2VJdGVyYWJsZShJdGVyYWJsZTxFPiBpdGVyYWJsZSwgaW50IHRha2VDb3VudCkKICAgICAgOiBzdXBlci5fKGl0ZXJhYmxlLCB0YWtlQ291bnQpOwoKICBpbnQgZ2V0IGxlbmd0aCB7CiAgICBpbnQgaXRlcmFibGVMZW5ndGggPSBfaXRlcmFibGUubGVuZ3RoOwogICAgaWYgKGl0ZXJhYmxlTGVuZ3RoID4gX3Rha2VDb3VudCkgcmV0dXJuIF90YWtlQ291bnQ7CiAgICByZXR1cm4gaXRlcmFibGVMZW5ndGg7CiAgfQp9CgpjbGFzcyBUYWtlSXRlcmF0b3I8RT4gZXh0ZW5kcyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgSXRlcmF0b3I8RT4gX2l0ZXJhdG9yOwogIGludCBfcmVtYWluaW5nOwoKICBUYWtlSXRlcmF0b3IodGhpcy5faXRlcmF0b3IsIHRoaXMuX3JlbWFpbmluZykgewogICAgYXNzZXJ0KF9yZW1haW5pbmcgPj0gMCk7CiAgfQoKICBib29sIG1vdmVOZXh0KCkgewogICAgX3JlbWFpbmluZy0tOwogICAgaWYgKF9yZW1haW5pbmcgPj0gMCkgewogICAgICByZXR1cm4gX2l0ZXJhdG9yLm1vdmVOZXh0KCk7CiAgICB9CiAgICBfcmVtYWluaW5nID0gLTE7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBFIGdldCBjdXJyZW50IHsKICAgIGlmIChfcmVtYWluaW5nIDwgMCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gX2l0ZXJhdG9yLmN1cnJlbnQ7CiAgfQp9CgpjbGFzcyBUYWtlV2hpbGVJdGVyYWJsZTxFPiBleHRlbmRzIEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBJdGVyYWJsZTxFPiBfaXRlcmFibGU7CiAgZmluYWwgX0VsZW1lbnRQcmVkaWNhdGU8RT4gX2Y7CgogIFRha2VXaGlsZUl0ZXJhYmxlKHRoaXMuX2l0ZXJhYmxlLCB0aGlzLl9mKTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgVGFrZVdoaWxlSXRlcmF0b3I8RT4oX2l0ZXJhYmxlLml0ZXJhdG9yLCBfZik7CiAgfQp9CgpjbGFzcyBUYWtlV2hpbGVJdGVyYXRvcjxFPiBleHRlbmRzIEl0ZXJhdG9yPEU+IHsKICBmaW5hbCBJdGVyYXRvcjxFPiBfaXRlcmF0b3I7CiAgZmluYWwgX0VsZW1lbnRQcmVkaWNhdGU8RT4gX2Y7CiAgYm9vbCBfaXNGaW5pc2hlZCA9IGZhbHNlOwoKICBUYWtlV2hpbGVJdGVyYXRvcih0aGlzLl9pdGVyYXRvciwgdGhpcy5fZik7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX2lzRmluaXNoZWQpIHJldHVybiBmYWxzZTsKICAgIGlmICghX2l0ZXJhdG9yLm1vdmVOZXh0KCkgfHwgIV9mKF9pdGVyYXRvci5jdXJyZW50KSkgewogICAgICBfaXNGaW5pc2hlZCA9IHRydWU7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgRSBnZXQgY3VycmVudCB7CiAgICBpZiAoX2lzRmluaXNoZWQpIHJldHVybiBudWxsOwogICAgcmV0dXJuIF9pdGVyYXRvci5jdXJyZW50OwogIH0KfQoKY2xhc3MgU2tpcEl0ZXJhYmxlPEU+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IF9pdGVyYWJsZTsKICBmaW5hbCBpbnQgX3NraXBDb3VudDsKCiAgZmFjdG9yeSBTa2lwSXRlcmFibGUoSXRlcmFibGU8RT4gaXRlcmFibGUsIGludCBjb3VudCkgewogICAgaWYgKGl0ZXJhYmxlIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKSB7CiAgICAgIHJldHVybiBuZXcgRWZmaWNpZW50TGVuZ3RoU2tpcEl0ZXJhYmxlPEU+KGl0ZXJhYmxlLCBjb3VudCk7CiAgICB9CiAgICByZXR1cm4gbmV3IFNraXBJdGVyYWJsZTxFPi5fKGl0ZXJhYmxlLCBfY2hlY2tDb3VudChjb3VudCkpOwogIH0KCiAgU2tpcEl0ZXJhYmxlLl8odGhpcy5faXRlcmFibGUsIHRoaXMuX3NraXBDb3VudCk7CgogIEl0ZXJhYmxlPEU+IHNraXAoaW50IGNvdW50KSB7CiAgICByZXR1cm4gbmV3IFNraXBJdGVyYWJsZTxFPi5fKF9pdGVyYWJsZSwgX3NraXBDb3VudCArIF9jaGVja0NvdW50KGNvdW50KSk7CiAgfQoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBTa2lwSXRlcmF0b3I8RT4oX2l0ZXJhYmxlLml0ZXJhdG9yLCBfc2tpcENvdW50KTsKICB9Cn0KCmNsYXNzIEVmZmljaWVudExlbmd0aFNraXBJdGVyYWJsZTxFPiBleHRlbmRzIFNraXBJdGVyYWJsZTxFPgogICAgaW1wbGVtZW50cyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPiB7CiAgZmFjdG9yeSBFZmZpY2llbnRMZW5ndGhTa2lwSXRlcmFibGUoSXRlcmFibGU8RT4gaXRlcmFibGUsIGludCBjb3VudCkgewogICAgcmV0dXJuIG5ldyBFZmZpY2llbnRMZW5ndGhTa2lwSXRlcmFibGU8RT4uXyhpdGVyYWJsZSwgX2NoZWNrQ291bnQoY291bnQpKTsKICB9CgogIEVmZmljaWVudExlbmd0aFNraXBJdGVyYWJsZS5fKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlLCBpbnQgY291bnQpCiAgICAgIDogc3VwZXIuXyhpdGVyYWJsZSwgY291bnQpOwoKICBpbnQgZ2V0IGxlbmd0aCB7CiAgICBpbnQgbGVuZ3RoID0gX2l0ZXJhYmxlLmxlbmd0aCAtIF9za2lwQ291bnQ7CiAgICBpZiAobGVuZ3RoID49IDApIHJldHVybiBsZW5ndGg7CiAgICByZXR1cm4gMDsKICB9CgogIEl0ZXJhYmxlPEU+IHNraXAoaW50IGNvdW50KSB7CiAgICByZXR1cm4gbmV3IEVmZmljaWVudExlbmd0aFNraXBJdGVyYWJsZTxFPi5fKAogICAgICAgIF9pdGVyYWJsZSwgX3NraXBDb3VudCArIF9jaGVja0NvdW50KGNvdW50KSk7CiAgfQp9CgppbnQgX2NoZWNrQ291bnQoaW50IGNvdW50KSB7CiAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoY291bnQsICJjb3VudCIpOwogIFJhbmdlRXJyb3IuY2hlY2tOb3ROZWdhdGl2ZShjb3VudCwgImNvdW50Iik7CiAgcmV0dXJuIGNvdW50Owp9CgpjbGFzcyBTa2lwSXRlcmF0b3I8RT4gZXh0ZW5kcyBJdGVyYXRvcjxFPiB7CiAgZmluYWwgSXRlcmF0b3I8RT4gX2l0ZXJhdG9yOwogIGludCBfc2tpcENvdW50OwoKICBTa2lwSXRlcmF0b3IodGhpcy5faXRlcmF0b3IsIHRoaXMuX3NraXBDb3VudCkgewogICAgYXNzZXJ0KF9za2lwQ291bnQgPj0gMCk7CiAgfQoKICBib29sIG1vdmVOZXh0KCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfc2tpcENvdW50OyBpKyspIF9pdGVyYXRvci5tb3ZlTmV4dCgpOwogICAgX3NraXBDb3VudCA9IDA7CiAgICByZXR1cm4gX2l0ZXJhdG9yLm1vdmVOZXh0KCk7CiAgfQoKICBFIGdldCBjdXJyZW50ID0+IF9pdGVyYXRvci5jdXJyZW50Owp9CgpjbGFzcyBTa2lwV2hpbGVJdGVyYWJsZTxFPiBleHRlbmRzIEl0ZXJhYmxlPEU+IHsKICBmaW5hbCBJdGVyYWJsZTxFPiBfaXRlcmFibGU7CiAgZmluYWwgX0VsZW1lbnRQcmVkaWNhdGU8RT4gX2Y7CgogIFNraXBXaGlsZUl0ZXJhYmxlKHRoaXMuX2l0ZXJhYmxlLCB0aGlzLl9mKTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgU2tpcFdoaWxlSXRlcmF0b3I8RT4oX2l0ZXJhYmxlLml0ZXJhdG9yLCBfZik7CiAgfQp9CgpjbGFzcyBTa2lwV2hpbGVJdGVyYXRvcjxFPiBleHRlbmRzIEl0ZXJhdG9yPEU+IHsKICBmaW5hbCBJdGVyYXRvcjxFPiBfaXRlcmF0b3I7CiAgZmluYWwgX0VsZW1lbnRQcmVkaWNhdGU8RT4gX2Y7CiAgYm9vbCBfaGFzU2tpcHBlZCA9IGZhbHNlOwoKICBTa2lwV2hpbGVJdGVyYXRvcih0aGlzLl9pdGVyYXRvciwgdGhpcy5fZik7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoIV9oYXNTa2lwcGVkKSB7CiAgICAgIF9oYXNTa2lwcGVkID0gdHJ1ZTsKICAgICAgd2hpbGUgKF9pdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgaWYgKCFfZihfaXRlcmF0b3IuY3VycmVudCkpIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX2l0ZXJhdG9yLm1vdmVOZXh0KCk7CiAgfQoKICBFIGdldCBjdXJyZW50ID0+IF9pdGVyYXRvci5jdXJyZW50Owp9CgovKioKICogVGhlIGFsd2F5cyBlbXB0eSBbSXRlcmFibGVdLgogKi8KY2xhc3MgRW1wdHlJdGVyYWJsZTxFPiBleHRlbmRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICBjb25zdCBFbXB0eUl0ZXJhYmxlKCk7CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBjb25zdCBFbXB0eUl0ZXJhdG9yKCk7CgogIHZvaWQgZm9yRWFjaCh2b2lkIGFjdGlvbihFIGVsZW1lbnQpKSB7fQoKICBib29sIGdldCBpc0VtcHR5ID0+IHRydWU7CgogIGludCBnZXQgbGVuZ3RoID0+IDA7CgogIEUgZ2V0IGZpcnN0IHsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgZ2V0IHNpbmdsZSB7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgZWxlbWVudEF0KGludCBpbmRleCkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoaW5kZXgsIDAsIDAsICJpbmRleCIpOwogIH0KCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgPT4gZmFsc2U7CgogIGJvb2wgZXZlcnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpID0+IHRydWU7CgogIGJvb2wgYW55KGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBmYWxzZTsKCiAgRSBmaXJzdFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGxhc3RXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBzaW5nbGVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwge0Ugb3JFbHNlKCl9KSB7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgU3RyaW5nIGpvaW4oW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pID0+ICIiOwoKICBJdGVyYWJsZTxFPiB3aGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgPT4gdGhpczsKCiAgSXRlcmFibGU8VD4gbWFwPFQ+KFQgZihFIGVsZW1lbnQpKSA9PiBuZXcgRW1wdHlJdGVyYWJsZTxUPigpOwoKICBFIHJlZHVjZShFIGNvbWJpbmUoRSB2YWx1ZSwgRSBlbGVtZW50KSkgewogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBUIGZvbGQ8VD4oVCBpbml0aWFsVmFsdWUsIFQgY29tYmluZShUIHByZXZpb3VzVmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIHJldHVybiBpbml0aWFsVmFsdWU7CiAgfQoKICBJdGVyYWJsZTxFPiBza2lwKGludCBjb3VudCkgewogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGNvdW50LCAiY291bnQiKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgSXRlcmFibGU8RT4gc2tpcFdoaWxlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiB0aGlzOwoKICBJdGVyYWJsZTxFPiB0YWtlKGludCBjb3VudCkgewogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGNvdW50LCAiY291bnQiKTsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgSXRlcmFibGU8RT4gdGFrZVdoaWxlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiB0aGlzOwoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pID0+IGdyb3dhYmxlID8gPEU+W10gOiBuZXcgTGlzdDxFPigwKTsKCiAgU2V0PEU+IHRvU2V0KCkgPT4gbmV3IFNldDxFPigpOwp9CgovKiogVGhlIGFsd2F5cyBlbXB0eSBpdGVyYXRvci4gKi8KY2xhc3MgRW1wdHlJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBjb25zdCBFbXB0eUl0ZXJhdG9yKCk7CiAgYm9vbCBtb3ZlTmV4dCgpID0+IGZhbHNlOwogIEUgZ2V0IGN1cnJlbnQgPT4gbnVsbDsKfQoKY2xhc3MgRm9sbG93ZWRCeUl0ZXJhYmxlPEU+IGV4dGVuZHMgSXRlcmFibGU8RT4gewogIGZpbmFsIEl0ZXJhYmxlPEU+IF9maXJzdDsKICBmaW5hbCBJdGVyYWJsZTxFPiBfc2Vjb25kOwogIEZvbGxvd2VkQnlJdGVyYWJsZSh0aGlzLl9maXJzdCwgdGhpcy5fc2Vjb25kKTsKCiAgZmFjdG9yeSBGb2xsb3dlZEJ5SXRlcmFibGUuZmlyc3RFZmZpY2llbnQoCiAgICAgIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IGZpcnN0LCBJdGVyYWJsZTxFPiBzZWNvbmQpIHsKICAgIGlmIChzZWNvbmQgaXMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4pIHsKICAgICAgcmV0dXJuIG5ldyBFZmZpY2llbnRMZW5ndGhGb2xsb3dlZEJ5SXRlcmFibGU8RT4oZmlyc3QsIHNlY29uZCk7CiAgICB9CiAgICByZXR1cm4gbmV3IEZvbGxvd2VkQnlJdGVyYWJsZTxFPihmaXJzdCwgc2Vjb25kKTsKICB9CgogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvciA9PiBuZXcgRm9sbG93ZWRCeUl0ZXJhdG9yKF9maXJzdCwgX3NlY29uZCk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9maXJzdC5sZW5ndGggKyBfc2Vjb25kLmxlbmd0aDsKICBib29sIGdldCBpc0VtcHR5ID0+IF9maXJzdC5pc0VtcHR5ICYmIF9zZWNvbmQuaXNFbXB0eTsKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9maXJzdC5pc05vdEVtcHR5IHx8IF9zZWNvbmQuaXNOb3RFbXB0eTsKCiAgLy8gTWF5IGJlIG1vcmUgZWZmaWNpZW50IGlmIGVpdGhlciBpdGVyYWJsZSBpcyBhIFNldC4KICBib29sIGNvbnRhaW5zKE9iamVjdCB2YWx1ZSkgPT4KICAgICAgX2ZpcnN0LmNvbnRhaW5zKHZhbHVlKSB8fCBfc2Vjb25kLmNvbnRhaW5zKHZhbHVlKTsKCiAgRSBnZXQgZmlyc3QgewogICAgdmFyIGl0ZXJhdG9yID0gX2ZpcnN0Lml0ZXJhdG9yOwogICAgaWYgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybiBpdGVyYXRvci5jdXJyZW50OwogICAgcmV0dXJuIF9zZWNvbmQuZmlyc3Q7CiAgfQoKICBFIGdldCBsYXN0IHsKICAgIHZhciBpdGVyYXRvciA9IF9zZWNvbmQuaXRlcmF0b3I7CiAgICBpZiAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICBFIGxhc3QgPSBpdGVyYXRvci5jdXJyZW50OwogICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgbGFzdCA9IGl0ZXJhdG9yLmN1cnJlbnQ7CiAgICAgIHJldHVybiBsYXN0OwogICAgfQogICAgcmV0dXJuIF9maXJzdC5sYXN0OwogIH0KCiAgLy8gSWYgbGluZWFyIHNlcXVlbmNlcyBvZiBgZm9sbG93ZWRCeWAgYmVjb21lcyBhbiBpc3N1ZSwgd2UgY2FuIGZsYXR0ZW4KICAvLyBpbnRvIGEgbGlzdCBvZiBpdGVyYWJsZXMgaW5zdGVhZCBvZiBhIHRyZWUgb3Igc3BpbmUuCn0KCmNsYXNzIEVmZmljaWVudExlbmd0aEZvbGxvd2VkQnlJdGVyYWJsZTxFPiBleHRlbmRzIEZvbGxvd2VkQnlJdGVyYWJsZTxFPgogICAgaW1wbGVtZW50cyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPiB7CiAgRWZmaWNpZW50TGVuZ3RoRm9sbG93ZWRCeUl0ZXJhYmxlKAogICAgICBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxFPiBmaXJzdCwgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gc2Vjb25kKQogICAgICA6IHN1cGVyKGZpcnN0LCBzZWNvbmQpOwoKICBJdGVyYWJsZTxFPiBza2lwKGludCBjb3VudCkgewogICAgaW50IGZpcnN0TGVuZ3RoID0gX2ZpcnN0Lmxlbmd0aDsKICAgIGlmIChjb3VudCA+PSBmaXJzdExlbmd0aCkgcmV0dXJuIF9zZWNvbmQuc2tpcChjb3VudCAtIGZpcnN0TGVuZ3RoKTsKICAgIHJldHVybiBuZXcgRWZmaWNpZW50TGVuZ3RoRm9sbG93ZWRCeUl0ZXJhYmxlPEU+KAogICAgICAgIF9maXJzdC5za2lwKGNvdW50KSwgX3NlY29uZCk7CiAgfQoKICBJdGVyYWJsZTxFPiB0YWtlKGludCBjb3VudCkgewogICAgaW50IGZpcnN0TGVuZ3RoID0gX2ZpcnN0Lmxlbmd0aDsKICAgIGlmIChjb3VudCA8PSBmaXJzdExlbmd0aCkgcmV0dXJuIF9maXJzdC50YWtlKGNvdW50KTsKICAgIHJldHVybiBuZXcgRWZmaWNpZW50TGVuZ3RoRm9sbG93ZWRCeUl0ZXJhYmxlPEU+KAogICAgICAgIF9maXJzdCwgX3NlY29uZC50YWtlKGNvdW50IC0gZmlyc3RMZW5ndGgpKTsKICB9CgogIEUgZWxlbWVudEF0KGludCBpbmRleCkgewogICAgaW50IGZpcnN0TGVuZ3RoID0gX2ZpcnN0Lmxlbmd0aDsKICAgIGlmIChpbmRleCA8IGZpcnN0TGVuZ3RoKSByZXR1cm4gX2ZpcnN0LmVsZW1lbnRBdChpbmRleCk7CiAgICByZXR1cm4gX3NlY29uZC5lbGVtZW50QXQoaW5kZXggLSBmaXJzdExlbmd0aCk7CiAgfQoKICBFIGdldCBmaXJzdCB7CiAgICBpZiAoX2ZpcnN0LmlzTm90RW1wdHkpIHJldHVybiBfZmlyc3QuZmlyc3Q7CiAgICByZXR1cm4gX3NlY29uZC5maXJzdDsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgaWYgKF9zZWNvbmQuaXNOb3RFbXB0eSkgcmV0dXJuIF9zZWNvbmQubGFzdDsKICAgIHJldHVybiBfZmlyc3QubGFzdDsKICB9Cn0KCmNsYXNzIEZvbGxvd2VkQnlJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBJdGVyYXRvcjxFPiBfY3VycmVudEl0ZXJhdG9yOwogIEl0ZXJhYmxlPEU+IF9uZXh0SXRlcmFibGU7CgogIEZvbGxvd2VkQnlJdGVyYXRvcihJdGVyYWJsZTxFPiBmaXJzdCwgdGhpcy5fbmV4dEl0ZXJhYmxlKQogICAgICA6IF9jdXJyZW50SXRlcmF0b3IgPSBmaXJzdC5pdGVyYXRvcjsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGlmIChfY3VycmVudEl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybiB0cnVlOwogICAgaWYgKF9uZXh0SXRlcmFibGUgIT0gbnVsbCkgewogICAgICBfY3VycmVudEl0ZXJhdG9yID0gX25leHRJdGVyYWJsZS5pdGVyYXRvcjsKICAgICAgX25leHRJdGVyYWJsZSA9IG51bGw7CiAgICAgIHJldHVybiBfY3VycmVudEl0ZXJhdG9yLm1vdmVOZXh0KCk7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBFIGdldCBjdXJyZW50ID0+IF9jdXJyZW50SXRlcmF0b3IuY3VycmVudDsKfQoKY2xhc3MgV2hlcmVUeXBlSXRlcmFibGU8VD4gZXh0ZW5kcyBJdGVyYWJsZTxUPiB7CiAgZmluYWwgSXRlcmFibGU8T2JqZWN0PiBfc291cmNlOwogIFdoZXJlVHlwZUl0ZXJhYmxlKHRoaXMuX3NvdXJjZSk7CiAgSXRlcmF0b3I8VD4gZ2V0IGl0ZXJhdG9yID0+IG5ldyBXaGVyZVR5cGVJdGVyYXRvcjxUPihfc291cmNlLml0ZXJhdG9yKTsKfQoKY2xhc3MgV2hlcmVUeXBlSXRlcmF0b3I8VD4gaW1wbGVtZW50cyBJdGVyYXRvcjxUPiB7CiAgZmluYWwgSXRlcmF0b3I8T2JqZWN0PiBfc291cmNlOwogIFdoZXJlVHlwZUl0ZXJhdG9yKHRoaXMuX3NvdXJjZSk7CiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIHdoaWxlIChfc291cmNlLm1vdmVOZXh0KCkpIHsKICAgICAgaWYgKF9zb3VyY2UuY3VycmVudCBpcyBUKSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIFQgZ2V0IGN1cnJlbnQgPT4gX3NvdXJjZS5jdXJyZW50Owp9CgovKioKICogQ3JlYXRlcyBlcnJvcnMgdGhyb3cgYnkgW0l0ZXJhYmxlXSB3aGVuIHRoZSBlbGVtZW50IGNvdW50IGlzIHdyb25nLgogKi8KYWJzdHJhY3QgY2xhc3MgSXRlcmFibGVFbGVtZW50RXJyb3IgewogIC8qKiBFcnJvciB0aHJvd24gdGhyb3duIGJ5LCBlLmcuLCBbSXRlcmFibGUuZmlyc3RdIHdoZW4gdGhlcmUgaXMgbm8gcmVzdWx0LiAqLwogIHN0YXRpYyBTdGF0ZUVycm9yIG5vRWxlbWVudCgpID0+IG5ldyBTdGF0ZUVycm9yKCJObyBlbGVtZW50Iik7CiAgLyoqIEVycm9yIHRocm93biBieSwgZS5nLiwg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YXRhIiBzaG93IEludDMyTGlzdDsKCi8vLyBUaGVzZSBhcmUgdGhlIGFkZGl0aW9uYWwgcGFydHMgb2YgdGhpcyBwYXRjaCBsaWJyYXJ5OgovLyBwYXJ0ICJjbGFzc19pZF9mYXN0YS5kYXJ0IjsKLy8gcGFydCAicHJpbnRfcGF0Y2guZGFydCI7Ci8vIHBhcnQgInN5bWJvbF9wYXRjaC5kYXJ0IjsKCkBwYXRjaApMaXN0PFQ+IG1ha2VMaXN0Rml4ZWRMZW5ndGg8VD4oTGlzdDxUPiBncm93YWJsZUxpc3QpCiAgICBuYXRpdmUgIkludGVybmFsX21ha2VMaXN0Rml4ZWRMZW5ndGgiOwoKQHBhdGNoCkxpc3Q8VD4gbWFrZUZpeGVkTGlzdFVubW9kaWZpYWJsZTxUPihMaXN0PFQ+IGZpeGVkTGVuZ3RoTGlzdCkKICAgIG5hdGl2ZSAiSW50ZXJuYWxfbWFrZUZpeGVkTGlzdFVubW9kaWZpYWJsZSI7CgpAcGF0Y2gKT2JqZWN0IGV4dHJhY3RUeXBlQXJndW1lbnRzPFQ+KFQgaW5zdGFuY2UsIEZ1bmN0aW9uIGV4dHJhY3QpCiAgICBuYXRpdmUgIkludGVybmFsX2V4dHJhY3RUeXBlQXJndW1lbnRzIjsKCmNsYXNzIFZNTGlicmFyeUhvb2tzIHsKICAvLyBFeGFtcGxlOiAiZGFydDppc29sYXRlIF9UaW1lci5fZmFjdG9yeSIKICBzdGF0aWMgdmFyIHRpbWVyRmFjdG9yeTsKCiAgLy8gRXhhbXBsZTogImRhcnQ6aW8gX0V2ZW50SGFuZGxlci5fc2VuZERhdGEiCiAgc3RhdGljIHZhciBldmVudEhhbmRsZXJTZW5kRGF0YTsKCiAgLy8gQSBudWxsYXJ5IGNsb3N1cmUgdGhhdCBhbnN3ZXJzIHRoZSBjdXJyZW50IGNsb2NrIHZhbHVlIGluIG1pbGxpc2Vjb25kcy4KICAvLyBFeGFtcGxlOiAiZGFydDppbyBfRXZlbnRIYW5kbGVyLl90aW1lck1pbGxpc2Vjb25kQ2xvY2siCiAgc3RhdGljIHZhciB0aW1lck1pbGxpc2Vjb25kQ2xvY2s7CgogIC8vIEltcGxlbWVudGF0aW9uIG9mIFJlc291cmNlLnJlYWRBc0J5dGVzLgogIHN0YXRpYyB2YXIgcmVzb3VyY2VSZWFkQXNCeXRlczsKCiAgLy8gSW1wbGVtZW50YXRpb24gb2YgcGFja2FnZSByb290L21hcCBwcm92aXNpb24uCiAgc3RhdGljIHZhciBwYWNrYWdlUm9vdFN0cmluZzsKICBzdGF0aWMgdmFyIHBhY2thZ2VDb25maWdTdHJpbmc7CiAgc3RhdGljIHZhciBwYWNrYWdlUm9vdFVyaUZ1dHVyZTsKICBzdGF0aWMgdmFyIHBhY2thZ2VDb25maWdVcmlGdXR1cmU7CiAgc3RhdGljIHZhciByZXNvbHZlUGFja2FnZVVyaUZ1dHVyZTsKCiAgc3RhdGljIHZhciBfY29tcHV0ZVNjcmlwdFVyaTsKICBzdGF0aWMgdmFyIF9jYWNoZWRTY3JpcHQ7CiAgc3RhdGljIHNldCBwbGF0Zm9ybVNjcmlwdCh2YXIgZikgewogICAgX2NvbXB1dGVTY3JpcHRVcmkgPSBmOwogICAgX2NhY2hlZFNjcmlwdCA9IG51bGw7CiAgfQoKICBzdGF0aWMgZ2V0IHBsYXRmb3JtU2NyaXB0IHsKICAgIGlmIChfY2FjaGVkU2NyaXB0ID09IG51bGwgJiYgX2NvbXB1dGVTY3JpcHRVcmkgIT0gbnVsbCkgewogICAgICBfY2FjaGVkU2NyaXB0ID0gX2NvbXB1dGVTY3JpcHRVcmkoKTsKICAgIH0KICAgIHJldHVybiBfY2FjaGVkU2NyaXB0OwogIH0KfQoKZmluYWwgYm9vbCBpczY0Qml0ID0gX2lucXVpcmVJczY0Qml0KCk7Cgpib29sIF9pbnF1aXJlSXM2NEJpdCgpIG5hdGl2ZSAiSW50ZXJuYWxfaW5xdWlyZUlzNjRCaXQiOwoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCmJvb2wgX2NsYXNzUmFuZ2VDaGVjayhpbnQgY2lkLCBpbnQgbG93ZXJMaW1pdCwgaW50IHVwcGVyTGltaXQpIHsKICByZXR1cm4gY2lkID49IGxvd2VyTGltaXQgJiYgY2lkIDw9IHVwcGVyTGltaXQ7Cn0KCi8vIFV0aWxpdHkgY2xhc3Mgbm93IG9ubHkgdXNlZCBieSB0aGUgVk0uCmNsYXNzIExpc3RzIHsKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBzdGF0aWMgdm9pZCBjb3B5KExpc3Qgc3JjLCBpbnQgc3JjU3RhcnQsIExpc3QgZHN0LCBpbnQgZHN0U3RhcnQsIGludCBjb3VudCkgewogICAgaWYgKHNyY1N0YXJ0IDwgZHN0U3RhcnQpIHsKICAgICAgZm9yIChpbnQgaSA9IHNyY1N0YXJ0ICsgY291bnQgLSAxLCBqID0gZHN0U3RhcnQgKyBjb3VudCAtIDE7CiAgICAgICAgICBpID49IHNyY1N0YXJ0OwogICAgICAgICAgaS0tLCBqLS0pIHsKICAgICAgICBkc3Rbal0gPSBzcmNbaV07CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IGkgPSBzcmNTdGFydCwgaiA9IGRzdFN0YXJ0OyBpIDwgc3JjU3RhcnQgKyBjb3VudDsgaSsrLCBqKyspIHsKICAgICAgICBkc3Rbal0gPSBzcmNbaV07CiAgICAgIH0KICAgIH0KICB9Cn0KCi8vIFByZXBlbmQgdGhlIHBhcmVudCB0eXBlIGFyZ3VtZW50cyAobWF5YmUgbnVsbCkgb2YgbGVuZ3RoICdwYXJlbnRMZW4nIHRvIHRoZQovLyBmdW5jdGlvbiB0eXBlIGFyZ3VtZW50cyAobWF5IGJlIG51bGwpLiBUaGUgcmVzdWx0IGlzIG51bGwgaWYgYm90aCBpbnB1dAovLyB2ZWN0b3JzIGFyZSBudWxsIG9yIGlzIGEgbmV3bHkgYWxsb2NhdGVkIGFuZCBjYW5vbmljYWxpemVkIHZlY3RvciBvZiBsZW5ndGgKLy8gJ3RvdGFsTGVuJy4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCl9wcmVwZW5kVHlwZUFyZ3VtZW50cyhmdW5jdGlvblR5cGVBcmd1bWVudHMsIHBhcmVudFR5cGVBcmd1bWVudHMsIHBhcmVudExlbiwKICAgIHRvdGFsTGVuKSBuYXRpdmUgIkludGVybmFsX3ByZXBlbmRUeXBlQXJndW1lbnRzIjsKCi8vIENoZWNrIHRoYXQgYSBzZXQgb2YgdHlwZSBhcmd1bWVudHMgc2F0aXNmeSB0aGUgdHlwZSBwYXJhbWV0ZXIgYm91bmRzIG9uIGEKLy8gY2xvc3VyZS4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCl9ib3VuZHNDaGVja0ZvclBhcnRpYWxJbnN0YW50aWF0aW9uKGNsb3N1cmUsIHR5cGVBcmdzKQogICAgbmF0aXZlICJJbnRlcm5hbF9ib3VuZHNDaGVja0ZvclBhcnRpYWxJbnN0YW50aWF0aW9uIjsKCi8vIENhbGxlZCBieSBJUlJlZ0V4cE1hY3JvQXNzZW1ibGVyOjpHcm93U3RhY2suCkludDMyTGlzdCBfZ3Jvd1JlZ0V4cFN0YWNrKEludDMyTGlzdCBzdGFjaykgewogIGZpbmFsIG5ld1N0YWNrID0gbmV3IEludDMyTGlzdChzdGFjay5sZW5ndGggKiAyKTsKICBmb3IgKGludCBpID0gMDsgaSA8IHN0YWNrLmxlbmd0aDsgaSsrKSB7CiAgICBuZXdTdGFja1tpXSA9IHN0YWNrW2ldOwogIH0KICByZXR1cm4gbmV3U3RhY2s7Cn0KCi8vIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgdG8gc2tpcCBpbXBsaWNpdCBvciBleHBsaWNpdCBjaGVja2VkIGRvd24gY2FzdHMgaW4KLy8gdGhlIHBhcnRzIG9mIHRoZSBjb3JlIGxpYnJhcnkgaW1wbGVtZW50YXRpb24gd2hlcmUgd2Uga25vdyBieSBjb25zdHJ1Y3Rpb24gdGhlCi8vIHR5cGUgb2YgYSB2YWx1ZS4KLy8KLy8gSW1wb3J0YW50OiB0aGlzIGlzIHVuc2FmZSBhbmQgbXVzdCBiZSB1c2VkIHdpdGggY2FyZS4KVCB1bnNhZmVDYXN0PFQ+KE9iamVjdCB2KSBuYXRpdmUgIkludGVybmFsX3Vuc2FmZUNhc3QiOwp+AE5OPAFNT0srASABKQE6HxwdAQc1KwEHPjEBBz0sARctGwEwIwFNPSQBLSIBMyAiIyUmASAcJRsaBAEePisGGgQCASgBOQEiJhxBMQIBKg4eUB9DGRYZCA1NGQgGBAIBT0tPDyJNNgFNDCI3OgEwLjQrHAQTAgFQUhQDOTgBKGRhcnQ6X2ludGVybmFsLXBhdGNoL2ludGVybmFsX3BhdGNoLmRhcnQzb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9jbGFzc19pZF9mYXN0YS5kYXJ0g6UvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiaW50ZXJuYWxfcGF0Y2guZGFydCI7CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIENsYXNzSUQgewogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBzdGF0aWMgaW50IGdldElEKE9iamVjdCB2YWx1ZSkgbmF0aXZlICJDbGFzc0lEX2dldElEIjsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBmaW5hbCBpbnQgY2lkQXJyYXkgPSAwOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBzdGF0aWMgZmluYWwgaW50IGNpZEV4dGVybmFsT25lQnl0ZVN0cmluZyA9IDA7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBmaW5hbCBpbnQgY2lkR3Jvd2FibGVPYmplY3RBcnJheSA9IDA7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBmaW5hbCBpbnQgY2lkSW1tdXRhYmxlQXJyYXkgPSAwOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBzdGF0aWMgZmluYWwgaW50IGNpZE9uZUJ5dGVTdHJpbmcgPSAwOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBzdGF0aWMgZmluYWwgaW50IGNpZFR3b0J5dGVTdHJpbmcgPSAwOwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBzdGF0aWMgZmluYWwgaW50IGNpZFVpbnQ4QXJyYXlWaWV3ID0gMDsKfQodAE5OPAEiARoQJDQ5ARwhHDEcLxwqHCkcKRwqAgEoZGFydDpfaW50ZXJuYWwtcGF0Y2gvY2xhc3NfaWRfZmFzdGEuZGFydC9vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW50ZXJuYWwvcGF0Y2guZGFydIE9Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgImRhcnQ6X2ludGVybmFsIjsKCmNsYXNzIF9QYXRjaCB7CiAgY29uc3QgX1BhdGNoKCk7Cn0KCmNvbnN0IF9QYXRjaCBwYXRjaCA9IGNvbnN0IF9QYXRjaCgpOwoNAE5OPAEaAQ8SAgElAR9kYXJ0Ol9pbnRlcm5hbC1wYXRjaC9wYXRjaC5kYXJ0NG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pbnRlcm5hbC9hc3luY19jYXN0LmRhcnSNYC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX2ludGVybmFsOwoKLy8gQ2FzdGluZyB3cmFwcGVycyBmb3IgYXN5bmNocm9ub3VzIGNsYXNzZXMuCgpjbGFzcyBDYXN0U3RyZWFtPFMsIFQ+IGV4dGVuZHMgU3RyZWFtPFQ+IHsKICBmaW5hbCBTdHJlYW08Uz4gX3NvdXJjZTsKICBDYXN0U3RyZWFtKHRoaXMuX3NvdXJjZSk7CiAgYm9vbCBnZXQgaXNCcm9hZGNhc3QgPT4gX3NvdXJjZS5pc0Jyb2FkY2FzdDsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IGxpc3Rlbih2b2lkIG9uRGF0YShUIGRhdGEpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIG5ldyBDYXN0U3RyZWFtU3Vic2NyaXB0aW9uPFMsIFQ+KAogICAgICAgIF9zb3VyY2UubGlzdGVuKG51bGwsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKSkKICAgICAgLi5vbkRhdGEob25EYXRhKQogICAgICAuLm9uRXJyb3Iob25FcnJvcik7CiAgfQoKICBTdHJlYW08Uj4gY2FzdDxSPigpID0+IG5ldyBDYXN0U3RyZWFtPFMsIFI+KF9zb3VyY2UpOwp9CgpjbGFzcyBDYXN0U3RyZWFtU3Vic2NyaXB0aW9uPFMsIFQ+IGltcGxlbWVudHMgU3RyZWFtU3Vic2NyaXB0aW9uPFQ+IHsKICBmaW5hbCBTdHJlYW1TdWJzY3JpcHRpb248Uz4gX3NvdXJjZTsKCiAgLy8vIFpvbmUgd2hlcmUgbGlzdGVuIHdhcyBjYWxsZWQuCiAgZmluYWwgWm9uZSBfem9uZSA9IFpvbmUuY3VycmVudDsKCiAgLy8vIFVzZXIncyBkYXRhIGhhbmRsZXIuIE1heSBiZSBudWxsLgogIHZvaWQgRnVuY3Rpb24oVCkgX2hhbmRsZURhdGE7CgogIC8vLyBDb3B5IG9mIF9zb3VyY2UncyBoYW5kbGVFcnJvciBzbyB3ZSBjYW4gcmVwb3J0IGVycm9ycyBpbiBvbkRhdGEuCiAgLy8vIE1heSBiZSBudWxsLgogIEZ1bmN0aW9uIF9oYW5kbGVFcnJvcjsKCiAgQ2FzdFN0cmVhbVN1YnNjcmlwdGlvbih0aGlzLl9zb3VyY2UpIHsKICAgIF9zb3VyY2Uub25EYXRhKF9vbkRhdGEpOwogIH0KCiAgRnV0dXJlIGNhbmNlbCgpID0+IF9zb3VyY2UuY2FuY2VsKCk7CgogIHZvaWQgb25EYXRhKHZvaWQgaGFuZGxlRGF0YShUIGRhdGEpKSB7CiAgICBfaGFuZGxlRGF0YSA9IGhhbmRsZURhdGEgPT0gbnVsbAogICAgICAgID8gbnVsbAogICAgICAgIDogX3pvbmUucmVnaXN0ZXJVbmFyeUNhbGxiYWNrPGR5bmFtaWMsIFQ+KGhhbmRsZURhdGEpOwogIH0KCiAgdm9pZCBvbkVycm9yKEZ1bmN0aW9uIGhhbmRsZUVycm9yKSB7CiAgICBfc291cmNlLm9uRXJyb3IoaGFuZGxlRXJyb3IpOwogICAgaWYgKGhhbmRsZUVycm9yID09IG51bGwpIHsKICAgICAgX2hhbmRsZUVycm9yID0gbnVsbDsKICAgIH0gZWxzZSBpZiAoaGFuZGxlRXJyb3IgaXMgRnVuY3Rpb24oTnVsbCwgTnVsbCkpIHsKICAgICAgX2hhbmRsZUVycm9yID0gX3pvbmUKICAgICAgICAgIC5yZWdpc3RlckJpbmFyeUNhbGxiYWNrPGR5bmFtaWMsIE9iamVjdCwgU3RhY2tUcmFjZT4oaGFuZGxlRXJyb3IpOwogICAgfSBlbHNlIHsKICAgICAgX2hhbmRsZUVycm9yID0gX3pvbmUucmVnaXN0ZXJVbmFyeUNhbGxiYWNrPGR5bmFtaWMsIE9iamVjdD4oaGFuZGxlRXJyb3IpOwogICAgfQogIH0KCiAgdm9pZCBvbkRvbmUodm9pZCBoYW5kbGVEb25lKCkpIHsKICAgIF9zb3VyY2Uub25Eb25lKGhhbmRsZURvbmUpOwogIH0KCiAgdm9pZCBfb25EYXRhKFMgZGF0YSkgewogICAgaWYgKF9oYW5kbGVEYXRhID09IG51bGwpIHJldHVybjsKICAgIFQgdGFyZ2V0RGF0YTsKICAgIHRyeSB7CiAgICAgIHRhcmdldERhdGEgPSBkYXRhIGFzIFQ7CiAgICB9IGNhdGNoIChlcnJvciwgc3RhY2spIHsKICAgICAgaWYgKF9oYW5kbGVFcnJvciA9PSBudWxsKSB7CiAgICAgICAgX3pvbmUuaGFuZGxlVW5jYXVnaHRFcnJvcihlcnJvciwgc3RhY2spOwogICAgICB9IGVsc2UgaWYgKF9oYW5kbGVFcnJvciBpcyBGdW5jdGlvbihOdWxsLCBOdWxsKSkgewogICAgICAgIF96b25lLnJ1bkJpbmFyeUd1YXJkZWQoX2hhbmRsZUVycm9yLCBlcnJvciwgc3RhY2spOwogICAgICB9IGVsc2UgewogICAgICAgIF96b25lLnJ1blVuYXJ5R3VhcmRlZChfaGFuZGxlRXJyb3IsIGVycm9yKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBfem9uZS5ydW5VbmFyeUd1YXJkZWQoX2hhbmRsZURhdGEsIHRhcmdldERhdGEpOwogIH0KCiAgdm9pZCBwYXVzZShbRnV0dXJlIHJlc3VtZVNpZ25hbF0pIHsKICAgIF9zb3VyY2UucGF1c2UocmVzdW1lU2lnbmFsKTsKICB9CgogIHZvaWQgcmVzdW1lKCkgewogICAgX3NvdXJjZS5yZXN1bWUoKTsKICB9CgogIGJvb2wgZ2V0IGlzUGF1c2VkID0+IF9zb3VyY2UuaXNQYXVzZWQ7CgogIEZ1dHVyZTxFPiBhc0Z1dHVyZTxFPihbRSBmdXR1cmVWYWx1ZV0pID0+IF9zb3VyY2UuYXNGdXR1cmU8RT4oZnV0dXJlVmFsdWUpOwp9CgpjbGFzcyBDYXN0U3RyZWFtVHJhbnNmb3JtZXI8U1MsIFNULCBUUywgVFQ+CiAgICBleHRlbmRzIFN0cmVhbVRyYW5zZm9ybWVyQmFzZTxUUywgVFQ+IHsKICBmaW5hbCBTdHJlYW1UcmFuc2Zvcm1lcjxTUywgU1Q+IF9zb3VyY2U7CiAgQ2FzdFN0cmVhbVRyYW5zZm9ybWVyKHRoaXMuX3NvdXJjZSk7CgogIFN0cmVhbVRyYW5zZm9ybWVyPFJTLCBSVD4gY2FzdDxSUywgUlQ+KCkgPT4KICAgICAgbmV3IENhc3RTdHJlYW1UcmFuc2Zvcm1lcjxTUywgU1QsIFJTLCBSVD4oX3NvdXJjZSk7CiAgU3RyZWFtPFRUPiBiaW5kKFN0cmVhbTxUUz4gc3RyZWFtKSA9PgogICAgICBfc291cmNlLmJpbmQoc3RyZWFtLmNhc3Q8U1M+KCkpLmNhc3Q8VFQ+KCk7Cn0KCmNsYXNzIENhc3RDb252ZXJ0ZXI8U1MsIFNULCBUUywgVFQ+IGV4dGVuZHMgQ29udmVydGVyPFRTLCBUVD4gewogIGZpbmFsIENvbnZlcnRlcjxTUywgU1Q+IF9zb3VyY2U7CiAgQ2FzdENvbnZlcnRlcih0aGlzLl9zb3VyY2UpOwoKICBUVCBjb252ZXJ0KFRTIGlucHV0KSA9PiBfc291cmNlLmNvbnZlcnQoaW5wdXQgYXMgU1MpIGFzIFRUOwoKICAvLyBjYXN0IGlzIGluaGVyaXRlZCBmcm9tIENvbnZlcnRlci4KCiAgU3RyZWFtPFRUPiBiaW5kKFN0cmVhbTxUUz4gc3RyZWFtKSA9PgogICAgICBfc291cmNlLmJpbmQoc3RyZWFtLmNhc3Q8U1M+KCkpLmNhc3Q8VFQ+KCk7CgogIENvbnZlcnRlcjxSUywgUlQ+IGNhc3Q8UlMsIFJUPigpID0+CiAgICAgIG5ldyBDYXN0Q29udmVydGVyPFNTLCBTVCwgUlMsIFJUPihfc291cmNlKTsKfQp7AE5OPAEYAS4BKxscLwE0Py1MFxoEATgCAUYnASQjASggAUcTGQEpHQQBJwEpJQ8/BAEnIh8bNhtNDVAGBAEjIAQBGSUSCh4dIjE5PA80CA4GNAQBJiEEARIWBAEpAU4CASwsKycBLjooMgIBQCMfAT4BJwEoMgEmMgIBHmRhcnQ6X2ludGVybmFsL2FzeW5jX2Nhc3QuZGFydC5vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW50ZXJuYWwvY2FzdC5kYXJ0pkovLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll9pbnRlcm5hbDsKCi8vIENhc3Rpbmcgd3JhcHBlcnMgZm9yIGNvbGxlY3Rpb24gY2xhc3Nlcy4KCmFic3RyYWN0IGNsYXNzIF9DYXN0SXRlcmFibGVCYXNlPFMsIFQ+IGV4dGVuZHMgSXRlcmFibGU8VD4gewogIEl0ZXJhYmxlPFM+IGdldCBfc291cmNlOwoKICBJdGVyYXRvcjxUPiBnZXQgaXRlcmF0b3IgPT4gbmV3IENhc3RJdGVyYXRvcjxTLCBUPihfc291cmNlLml0ZXJhdG9yKTsKCiAgLy8gVGhlIGZvbGxvd2luZyBtZW1iZXJzIHVzZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvbiB0aGUKICAvLyB0aHJvd2luZyBpdGVyYXRvci4gVGhlc2UgYXJlIGFsbCBvcGVyYXRpb25zIHRoYXQgaGF2ZSBubyBtb3JlIGVmZmljaWVudAogIC8vIGltcGxlbWVudGF0aW9uIHRoYW4gdmlzaXRpbmcgZXZlcnkgZWxlbWVudCBpbiBvcmRlciwKICAvLyBvciB0aGF0IGhhcyBubyBtb3JlIGVmZmljaWVudCB3YXkgdG8gZ2V0IHRoZSBjb3JyZWN0IHR5cGUgKHRvTGlzdCwgdG9TZXQpLgogIC8vCiAgLy8gKiBtYXAKICAvLyAqIHdoZXJlCiAgLy8gKiBleHBhbmQKICAvLyAqIGZvckVhY2gKICAvLyAqIHJlZHVjZQogIC8vICogZm9sZAogIC8vICogZXZlcnkKICAvLyAqIGFueQogIC8vICogam9pbgogIC8vICogdG9MaXN0CiAgLy8gKiB0b1NldAogIC8vICogc2tpcFdoaWxlCiAgLy8gKiB0YWtlV2hpbGUKICAvLyAqIGZpcnN0V2hlcmUKICAvLyAqIHNpbmdsZVdoZXJlCgogIGludCBnZXQgbGVuZ3RoID0+IF9zb3VyY2UubGVuZ3RoOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX3NvdXJjZS5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX3NvdXJjZS5pc05vdEVtcHR5OwoKICBJdGVyYWJsZTxUPiBza2lwKGludCBjb3VudCkgPT4gbmV3IENhc3RJdGVyYWJsZTxTLCBUPihfc291cmNlLnNraXAoY291bnQpKTsKICBJdGVyYWJsZTxUPiB0YWtlKGludCBjb3VudCkgPT4gbmV3IENhc3RJdGVyYWJsZTxTLCBUPihfc291cmNlLnRha2UoY291bnQpKTsKCiAgVCBlbGVtZW50QXQoaW50IGluZGV4KSA9PiBfc291cmNlLmVsZW1lbnRBdChpbmRleCkgYXMgVDsKICBUIGdldCBmaXJzdCA9PiBfc291cmNlLmZpcnN0IGFzIFQ7CiAgVCBnZXQgbGFzdCA9PiBfc291cmNlLmxhc3QgYXMgVDsKICBUIGdldCBzaW5nbGUgPT4gX3NvdXJjZS5zaW5nbGUgYXMgVDsKCiAgYm9vbCBjb250YWlucyhPYmplY3Qgb3RoZXIpID0+IF9zb3VyY2UuY29udGFpbnMob3RoZXIpOwoKICAvLyBNaWdodCBiZSBpbXBsZW1lbnRlZCBieSB0ZXN0aW5nIGJhY2t3YXJkcyBmcm9tIHRoZSBlbmQsCiAgLy8gc28gdXNlIHRoZSBfc291cmNlJ3MgaW1wbGVtZW50YXRpb24uCiAgVCBsYXN0V2hlcmUoYm9vbCB0ZXN0KFQgZWxlbWVudCksIHtUIG9yRWxzZSgpfSkgPT4KICAgICAgX3NvdXJjZS5sYXN0V2hlcmUoKFMgZWxlbWVudCkgPT4gdGVzdChlbGVtZW50IGFzIFQpLAogICAgICAgICAgb3JFbHNlOiAob3JFbHNlID09IG51bGwpID8gbnVsbCA6ICgpID0+IG9yRWxzZSgpIGFzIFMpIGFzIFQ7CgogIFN0cmluZyB0b1N0cmluZygpID0+IF9zb3VyY2UudG9TdHJpbmcoKTsKfQoKY2xhc3MgQ2FzdEl0ZXJhdG9yPFMsIFQ+IGltcGxlbWVudHMgSXRlcmF0b3I8VD4gewogIEl0ZXJhdG9yPFM+IF9zb3VyY2U7CiAgQ2FzdEl0ZXJhdG9yKHRoaXMuX3NvdXJjZSk7CiAgYm9vbCBtb3ZlTmV4dCgpID0+IF9zb3VyY2UubW92ZU5leHQoKTsKICBUIGdldCBjdXJyZW50ID0+IF9zb3VyY2UuY3VycmVudCBhcyBUOwp9CgpjbGFzcyBDYXN0SXRlcmFibGU8UywgVD4gZXh0ZW5kcyBfQ2FzdEl0ZXJhYmxlQmFzZTxTLCBUPiB7CiAgZmluYWwgSXRlcmFibGU8Uz4gX3NvdXJjZTsKCiAgQ2FzdEl0ZXJhYmxlLl8odGhpcy5fc291cmNlKTsKCiAgZmFjdG9yeSBDYXN0SXRlcmFibGUoSXRlcmFibGU8Uz4gc291cmNlKSB7CiAgICBpZiAoc291cmNlIGlzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPFM+KSB7CiAgICAgIHJldHVybiBuZXcgX0VmZmljaWVudExlbmd0aENhc3RJdGVyYWJsZTxTLCBUPihzb3VyY2UpOwogICAgfQogICAgcmV0dXJuIG5ldyBDYXN0SXRlcmFibGU8UywgVD4uXyhzb3VyY2UpOwogIH0KCiAgSXRlcmFibGU8Uj4gY2FzdDxSPigpID0+IG5ldyBDYXN0SXRlcmFibGU8UywgUj4oX3NvdXJjZSk7Cn0KCmNsYXNzIF9FZmZpY2llbnRMZW5ndGhDYXN0SXRlcmFibGU8UywgVD4gZXh0ZW5kcyBDYXN0SXRlcmFibGU8UywgVD4KICAgIGltcGxlbWVudHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8VD4gewogIF9FZmZpY2llbnRMZW5ndGhDYXN0SXRlcmFibGUoRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8Uz4gc291cmNlKQogICAgICA6IHN1cGVyLl8oc291cmNlKTsKfQoKYWJzdHJhY3QgY2xhc3MgX0Nhc3RMaXN0QmFzZTxTLCBUPiBleHRlbmRzIF9DYXN0SXRlcmFibGVCYXNlPFMsIFQ+CiAgICB3aXRoIExpc3RNaXhpbjxUPiB7CiAgTGlzdDxTPiBnZXQgX3NvdXJjZTsKCiAgLy8gVXNpbmcgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZnJvbSBMaXN0TWl4aW46CiAgLy8gKiByZXZlcnNlZAogIC8vICogc2h1ZmZsZQogIC8vICogaW5kZXhPZgogIC8vICogbGFzdEluZGV4T2YKICAvLyAqIGNsZWFyCiAgLy8gKiBzdWJsaXN0CiAgLy8gKiBhc01hcAoKICBUIG9wZXJhdG9yIFtdKGludCBpbmRleCkgPT4gX3NvdXJjZVtpbmRleF0gYXMgVDsKCiAgdm9pZCBvcGVyYXRvciBbXT0oaW50IGluZGV4LCBUIHZhbHVlKSB7CiAgICBfc291cmNlW2luZGV4XSA9IHZhbHVlIGFzIFM7CiAgfQoKICB2b2lkIHNldCBsZW5ndGgoaW50IGxlbmd0aCkgewogICAgX3NvdXJjZS5sZW5ndGggPSBsZW5ndGg7CiAgfQoKICB2b2lkIGFkZChUIHZhbHVlKSB7CiAgICBfc291cmNlLmFkZCh2YWx1ZSBhcyBTKTsKICB9CgogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPFQ+IHZhbHVlcykgewogICAgX3NvdXJjZS5hZGRBbGwobmV3IENhc3RJdGVyYWJsZTxULCBTPih2YWx1ZXMpKTsKICB9CgogIHZvaWQgc29ydChbaW50IGNvbXBhcmUoVCB2MSwgVCB2MildKSB7CiAgICBfc291cmNlLnNvcnQoCiAgICAgICAgY29tcGFyZSA9PSBudWxsID8gbnVsbCA6IChTIHYxLCBTIHYyKSA9PiBjb21wYXJlKHYxIGFzIFQsIHYyIGFzIFQpKTsKICB9CgogIHZvaWQgc2h1ZmZsZShbUmFuZG9tIHJhbmRvbV0pIHsKICAgIF9zb3VyY2Uuc2h1ZmZsZShyYW5kb20pOwogIH0KCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBUIGVsZW1lbnQpIHsKICAgIF9zb3VyY2UuaW5zZXJ0KGluZGV4LCBlbGVtZW50IGFzIFMpOwogIH0KCiAgdm9pZCBpbnNlcnRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxUPiBlbGVtZW50cykgewogICAgX3NvdXJjZS5pbnNlcnRBbGwoaW5kZXgsIG5ldyBDYXN0SXRlcmFibGU8VCwgUz4oZWxlbWVudHMpKTsKICB9CgogIHZvaWQgc2V0QWxsKGludCBpbmRleCwgSXRlcmFibGU8VD4gZWxlbWVudHMpIHsKICAgIF9zb3VyY2Uuc2V0QWxsKGluZGV4LCBuZXcgQ2FzdEl0ZXJhYmxlPFQsIFM+KGVsZW1lbnRzKSk7CiAgfQoKICBib29sIHJlbW92ZShPYmplY3QgdmFsdWUpID0+IF9zb3VyY2UucmVtb3ZlKHZhbHVlKTsKCiAgVCByZW1vdmVBdChpbnQgaW5kZXgpID0+IF9zb3VyY2UucmVtb3ZlQXQoaW5kZXgpIGFzIFQ7CgogIFQgcmVtb3ZlTGFzdCgpID0+IF9zb3VyY2UucmVtb3ZlTGFzdCgpIGFzIFQ7CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KFQgZWxlbWVudCkpIHsKICAgIF9zb3VyY2UucmVtb3ZlV2hlcmUoKFMgZWxlbWVudCkgPT4gdGVzdChlbGVtZW50IGFzIFQpKTsKICB9CgogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KFQgZWxlbWVudCkpIHsKICAgIF9zb3VyY2UucmV0YWluV2hlcmUoKFMgZWxlbWVudCkgPT4gdGVzdChlbGVtZW50IGFzIFQpKTsKICB9CgogIEl0ZXJhYmxlPFQ+IGdldFJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgPT4KICAgICAgbmV3IENhc3RJdGVyYWJsZTxTLCBUPihfc291cmNlLmdldFJhbmdlKHN0YXJ0LCBlbmQpKTsKCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPFQ+IGl0ZXJhYmxlLCBbaW50IHNraXBDb3VudCA9IDBdKSB7CiAgICBfc291cmNlLnNldFJhbmdlKHN0YXJ0LCBlbmQsIG5ldyBDYXN0SXRlcmFibGU8VCwgUz4oaXRlcmFibGUpLCBza2lwQ291bnQpOwogIH0KCiAgdm9pZCByZW1vdmVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIF9zb3VyY2UucmVtb3ZlUmFuZ2Uoc3RhcnQsIGVuZCk7CiAgfQoKICB2b2lkIGZpbGxSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIFtUIGZpbGxWYWx1ZV0pIHsKICAgIF9zb3VyY2UuZmlsbFJhbmdlKHN0YXJ0LCBlbmQsIGZpbGxWYWx1ZSBhcyBTKTsKICB9CgogIHZvaWQgcmVwbGFjZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8VD4gcmVwbGFjZW1lbnQpIHsKICAgIF9zb3VyY2UucmVwbGFjZVJhbmdlKHN0YXJ0LCBlbmQsIG5ldyBDYXN0SXRlcmFibGU8VCwgUz4ocmVwbGFjZW1lbnQpKTsKICB9Cn0KCmNsYXNzIENhc3RMaXN0PFMsIFQ+IGV4dGVuZHMgX0Nhc3RMaXN0QmFzZTxTLCBUPiB7CiAgZmluYWwgTGlzdDxTPiBfc291cmNlOwogIENhc3RMaXN0KHRoaXMuX3NvdXJjZSk7CgogIExpc3Q8Uj4gY2FzdDxSPigpID0+IG5ldyBDYXN0TGlzdDxTLCBSPihfc291cmNlKTsKfQoKY2xhc3MgQ2FzdFNldDxTLCBUPiBleHRlbmRzIF9DYXN0SXRlcmFibGVCYXNlPFMsIFQ+IGltcGxlbWVudHMgU2V0PFQ+IHsKICBmaW5hbCBTZXQ8Uz4gX3NvdXJjZTsKCiAgLy8vIENyZWF0ZXMgYSBuZXcgZW1wdHkgc2V0IG9mIHRoZSBzYW1lICpraW5kKiBhcyBbX3NvdXJjZV0sCiAgLy8vIGJ1dCB3aXRoIGA8Uj5gIGFzIHR5cGUgYXJndW1lbnQuCiAgLy8vIFVzZWQgYnkgW3RvU2V0XSBhbmQgW3VuaW9uXS4KICBmaW5hbCBTZXQ8Uj4gRnVuY3Rpb248Uj4oKSBfZW1wdHlTZXQ7CgogIENhc3RTZXQodGhpcy5fc291cmNlLCB0aGlzLl9lbXB0eVNldCk7CgogIHN0YXRpYyBTZXQ8Uj4gX2RlZmF1bHRFbXB0eVNldDxSPigpID0+IG5ldyBTZXQ8Uj4oKTsKCiAgU2V0PFI+IGNhc3Q8Uj4oKSA9PiBuZXcgQ2FzdFNldDxTLCBSPihfc291cmNlLCBfZW1wdHlTZXQpOwogIGJvb2wgYWRkKFQgdmFsdWUpID0+IF9zb3VyY2UuYWRkKHZhbHVlIGFzIFMpOwoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxUPiBlbGVtZW50cykgewogICAgX3NvdXJjZS5hZGRBbGwobmV3IENhc3RJdGVyYWJsZTxULCBTPihlbGVtZW50cykpOwogIH0KCiAgYm9vbCByZW1vdmUoT2JqZWN0IG9iamVjdCkgPT4gX3NvdXJjZS5yZW1vdmUob2JqZWN0KTsKCiAgdm9pZCByZW1vdmVBbGwoSXRlcmFibGU8T2JqZWN0PiBvYmplY3RzKSB7CiAgICBfc291cmNlLnJlbW92ZUFsbChvYmplY3RzKTsKICB9CgogIHZvaWQgcmV0YWluQWxsKEl0ZXJhYmxlPE9iamVjdD4gb2JqZWN0cykgewogICAgX3NvdXJjZS5yZXRhaW5BbGwob2JqZWN0cyk7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChUIGVsZW1lbnQpKSB7CiAgICBfc291cmNlLnJlbW92ZVdoZXJlKChTIGVsZW1lbnQpID0+IHRlc3QoZWxlbWVudCBhcyBUKSk7CiAgfQoKICB2b2lkIHJldGFpbldoZXJlKGJvb2wgdGVzdChUIGVsZW1lbnQpKSB7CiAgICBfc291cmNlLnJldGFpbldoZXJlKChTIGVsZW1lbnQpID0+IHRlc3QoZWxlbWVudCBhcyBUKSk7CiAgfQoKICBib29sIGNvbnRhaW5zQWxsKEl0ZXJhYmxlPE9iamVjdD4gb2JqZWN0cykgPT4gX3NvdXJjZS5jb250YWluc0FsbChvYmplY3RzKTsKCiAgU2V0PFQ+IGludGVyc2VjdGlvbihTZXQ8T2JqZWN0PiBvdGhlcikgewogICAgaWYgKF9lbXB0eVNldCAhPSBudWxsKSByZXR1cm4gX2NvbmRpdGlvbmFsQWRkKG90aGVyLCB0cnVlKTsKICAgIHJldHVybiBuZXcgQ2FzdFNldDxTLCBUPihfc291cmNlLmludGVyc2VjdGlvbihvdGhlciksIG51bGwpOwogIH0KCiAgU2V0PFQ+IGRpZmZlcmVuY2UoU2V0PE9iamVjdD4gb3RoZXIpIHsKICAgIGlmIChfZW1wdHlTZXQgIT0gbnVsbCkgcmV0dXJuIF9jb25kaXRpb25hbEFkZChvdGhlciwgZmFsc2UpOwogICAgcmV0dXJuIG5ldyBDYXN0U2V0PFMsIFQ+KF9zb3VyY2UuZGlmZmVyZW5jZShvdGhlciksIG51bGwpOwogIH0KCiAgU2V0PFQ+IF9jb25kaXRpb25hbEFkZChTZXQ8T2JqZWN0PiBvdGhlciwgYm9vbCBvdGhlckNvbnRhaW5zKSB7CiAgICBTZXQ8VD4gcmVzdWx0ID0gKF9lbXB0eVNldCA9PSBudWxsKSA/IG5ldyBTZXQ8VD4oKSA6IF9lbXB0eVNldDxUPigpOwogICAgZm9yICh2YXIgZWxlbWVudCBpbiBfc291cmNlKSB7CiAgICAgIFQgY2FzdEVsZW1lbnQgPSBlbGVtZW50IGFzIFQ7CiAgICAgIGlmIChvdGhlckNvbnRhaW5zID09IG90aGVyLmNvbnRhaW5zKGNhc3RFbGVtZW50KSkgcmVzdWx0LmFkZChjYXN0RWxlbWVudCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU2V0PFQ+IHVuaW9uKFNldDxUPiBvdGhlcikgPT4gX2Nsb25lKCkuLmFkZEFsbChvdGhlcik7CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfc291cmNlLmNsZWFyKCk7CiAgfQoKICBTZXQ8VD4gX2Nsb25lKCkgewogICAgU2V0PFQ+IHJlc3VsdCA9IChfZW1wdHlTZXQgPT0gbnVsbCkgPyBuZXcgU2V0PFQ+KCkgOiBfZW1wdHlTZXQ8VD4oKTsKICAgIHJlc3VsdC5hZGRBbGwodGhpcyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU2V0PFQ+IHRvU2V0KCkgPT4gX2Nsb25lKCk7CgogIFQgbG9va3VwKE9iamVjdCBrZXkpID0+IF9zb3VyY2UubG9va3VwKGtleSkgYXMgVDsKfQoKY2xhc3MgQ2FzdE1hcDxTSywgU1YsIEssIFY+IGV4dGVuZHMgTWFwQmFzZTxLLCBWPiB7CiAgZmluYWwgTWFwPFNLLCBTVj4gX3NvdXJjZTsKCiAgQ2FzdE1hcCh0aGlzLl9zb3VyY2UpOwoKICBNYXA8UkssIFJWPiBjYXN0PFJLLCBSVj4oKSA9PiBuZXcgQ2FzdE1hcDxTSywgU1YsIFJLLCBSVj4oX3NvdXJjZSk7CgogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpID0+IF9zb3VyY2UuY29udGFpbnNWYWx1ZSh2YWx1ZSk7CgogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgPT4gX3NvdXJjZS5jb250YWluc0tleShrZXkpOwoKICBWIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpID0+IF9zb3VyY2Vba2V5XSBhcyBWOwoKICB2b2lkIG9wZXJhdG9yIFtdPShLIGtleSwgViB2YWx1ZSkgewogICAgX3NvdXJjZVtrZXkgYXMgU0tdID0gdmFsdWUgYXMgU1Y7CiAgfQoKICBWIHB1dElmQWJzZW50KEsga2V5LCBWIGlmQWJzZW50KCkpID0+IF9zb3VyY2UucHV0SWZBYnNlbnQoCiAgICAgIGtleSBhcyBTSywgKGlmQWJzZW50ID09IG51bGwpID8gbnVsbCA6ICgpID0+IGlmQWJzZW50KCkgYXMgU1YpIGFzIFY7CgogIHZvaWQgYWRkQWxsKE1hcDxLLCBWPiBvdGhlcikgewogICAgX3NvdXJjZS5hZGRBbGwobmV3IENhc3RNYXA8SywgViwgU0ssIFNWPihvdGhlcikpOwogIH0KCiAgViByZW1vdmUoT2JqZWN0IGtleSkgPT4gX3NvdXJjZS5yZW1vdmUoa2V5KSBhcyBWOwoKICB2b2lkIGNsZWFyKCkgewogICAgX3NvdXJjZS5jbGVhcigpOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihLIGtleSwgViB2YWx1ZSkpIHsKICAgIF9zb3VyY2UuZm9yRWFjaCgoU0sga2V5LCBTViB2YWx1ZSkgewogICAgICBmKGtleSBhcyBLLCB2YWx1ZSBhcyBWKTsKICAgIH0pOwogIH0KCiAgSXRlcmFibGU8Sz4gZ2V0IGtleXMgPT4gbmV3IENhc3RJdGVyYWJsZTxTSywgSz4oX3NvdXJjZS5rZXlzKTsKCiAgSXRlcmFibGU8Vj4gZ2V0IHZhbHVlcyA9PiBuZXcgQ2FzdEl0ZXJhYmxlPFNWLCBWPihfc291cmNlLnZhbHVlcyk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9zb3VyY2UubGVuZ3RoOwoKICBib29sIGdldCBpc0VtcHR5ID0+IF9zb3VyY2UuaXNFbXB0eTsKCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiBfc291cmNlLmlzTm90RW1wdHk7CgogIFYgdXBkYXRlKEsga2V5LCBWIHVwZGF0ZShWIHZhbHVlKSwge1YgaWZBYnNlbnQoKX0pIHsKICAgIHJldHVybiBfc291cmNlLnVwZGF0ZShrZXkgYXMgU0ssIChTViB2YWx1ZSkgPT4gdXBkYXRlKHZhbHVlIGFzIFYpIGFzIFNWLAogICAgICAgIGlmQWJzZW50OiAoaWZBYnNlbnQgPT0gbnVsbCkgPyBudWxsIDogKCkgPT4gaWZBYnNlbnQoKSBhcyBTVikgYXMgVjsKICB9CgogIHZvaWQgdXBkYXRlQWxsKFYgdXBkYXRlKEsga2V5LCBWIHZhbHVlKSkgewogICAgX3NvdXJjZS51cGRhdGVBbGwoKFNLIGtleSwgU1YgdmFsdWUpID0+IHVwZGF0ZShrZXkgYXMgSywgdmFsdWUgYXMgVikgYXMgU1YpOwogIH0KCiAgSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGdldCBlbnRyaWVzIHsKICAgIHJldHVybiBfc291cmNlLmVudHJpZXMubWFwPE1hcEVudHJ5PEssIFY+PigKICAgICAgICAoTWFwRW50cnk8U0ssIFNWPiBlKSA9PiBuZXcgTWFwRW50cnk8SywgVj4oZS5rZXkgYXMgSywgZS52YWx1ZSBhcyBWKSk7CiAgfQoKICB2b2lkIGFkZEVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk8SywgVj4+IGVudHJpZXMpIHsKICAgIGZvciAodmFyIGVudHJ5IGluIGVudHJpZXMpIHsKICAgICAgX3NvdXJjZVtlbnRyeS5rZXkgYXMgU0tdID0gZW50cnkudmFsdWUgYXMgU1Y7CiAgICB9CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChLIGtleSwgViB2YWx1ZSkpIHsKICAgIF9zb3VyY2UucmVtb3ZlV2hlcmUoKFNLIGtleSwgU1YgdmFsdWUpID0+IHRlc3Qoa2V5IGFzIEssIHZhbHVlIGFzIFYpKTsKICB9Cn0KCmNsYXNzIENhc3RRdWV1ZTxTLCBUPiBleHRlbmRzIF9DYXN0SXRlcmFibGVCYXNlPFMsIFQ+IGltcGxlbWVudHMgUXVldWU8VD4gewogIGZpbmFsIFF1ZXVlPFM+IF9zb3VyY2U7CiAgQ2FzdFF1ZXVlKHRoaXMuX3NvdXJjZSk7CiAgUXVldWU8Uj4gY2FzdDxSPigpID0+IG5ldyBDYXN0UXVldWU8UywgUj4oX3NvdXJjZSk7CgogIFQgcmVtb3ZlRmlyc3QoKSA9PiBfc291cmNlLnJlbW92ZUZpcnN0KCkgYXMgVDsKICBUIHJlbW92ZUxhc3QoKSA9PiBfc291cmNlLnJlbW92ZUxhc3QoKSBhcyBUOwoKICB2b2lkIGFkZChUIHZhbHVlKSB7CiAgICBfc291cmNlLmFkZCh2YWx1ZSBhcyBTKTsKICB9CgogIHZvaWQgYWRkRmlyc3QoVCB2YWx1ZSkgewogICAgX3NvdXJjZS5hZGRGaXJzdCh2YWx1ZSBhcyBTKTsKICB9CgogIHZvaWQgYWRkTGFzdChUIHZhbHVlKSB7CiAgICBfc291cmNlLmFkZExhc3QodmFsdWUgYXMgUyk7CiAgfQoKICBib29sIHJlbW92ZShPYmplY3Qgb3RoZXIpID0+IF9zb3VyY2UucmVtb3ZlKG90aGVyKTsKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxUPiBlbGVtZW50cykgewogICAgX3NvdXJjZS5hZGRBbGwobmV3IENhc3RJdGVyYWJsZTxULCBTPihlbGVtZW50cykpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgX3NvdXJjZS5yZW1vdmVXaGVyZSgoUyBlbGVtZW50KSA9PiB0ZXN0KGVsZW1lbnQgYXMgVCkpOwogIH0KCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoVCBlbGVtZW50KSkgewogICAgX3NvdXJjZS5yZXRhaW5XaGVyZSgoUyBlbGVtZW50KSA9PiB0ZXN0KGVsZW1lbnQgYXMgVCkpOwogIH0KCiAgdm9pZCBjbGVhcigpIHsKICAgIF9zb3VyY2UuY2xlYXIoKTsKICB9Cn0KgWsATk48ARgBLAE9GwFIAUFNOlAFCw0ODw4MDQsMDg0RERITASQnLQFOTgE7JSMnAToBPSo1O0cBKwIBMhceKSkCATsdASABLTA9Bi0EATwCAUQsQhkCAUMYFwE2EA8PEw0PDQEzASohBAEgHQQBFh0EASQ0BAEpEk0EASIdBAEmKQQBNEAEATE9BAE2ATkBLwErPAQBKzwEAS48AVFPBAEpJQQBNjMEAUNLBAIBMxkaATQCAUgYAT8nIygBKQE3AT0wASY2BAE4AS0gBAEtIAQBKzwEASs8BAFOAStAQQQBKUE/BAFCSSMkUQYTBAE5AREVBAEUSRkTBAEeATQCATQdARkBRgFEATwBMgEmJgQBPUsBITYEATQBERUEASkpHwgEAUEBRQEkAScBLQE3TUwEAS1RBAEpME8EATYhNAYEATBLBAIBTBobNgExLwEWHQQBGyIEARohBAE2JjYEASs8BAErPAQBERUEAgEYZGFydDpfaW50ZXJuYWwvY2FzdC5kYXJ0Lm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pbnRlcm5hbC9saXN0LmRhcnSu0S8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX2ludGVybmFsOwoKLyoqCiAqIE1peGluIHRoYXQgdGhyb3dzIG9uIHRoZSBsZW5ndGggY2hhbmdpbmcgb3BlcmF0aW9ucyBvZiBbTGlzdF0uCiAqCiAqIEludGVuZGVkIHRvIG1peC1pbiBvbiB0b3Agb2YgW0xpc3RNaXhpbl0gZm9yIGZpeGVkLWxlbmd0aCBsaXN0cy4KICovCmFic3RyYWN0IGNsYXNzIEZpeGVkTGVuZ3RoTGlzdE1peGluPEU+IHsKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhIGZpeGVkIGxlbmd0aCBsaXN0LiAqLwogIHNldCBsZW5ndGgoaW50IG5ld0xlbmd0aCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkNhbm5vdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhIGZpeGVkIGxlbmd0aCBsaXN0LiAqLwogIHZvaWQgYWRkKEUgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBFIHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGFkZCB0byBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhIGZpeGVkIGxlbmd0aCBsaXN0LiAqLwogIHZvaWQgaW5zZXJ0QWxsKGludCBhdCwgSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgYm9vbCByZW1vdmUoT2JqZWN0IGVsZW1lbnQpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhIGZpeGVkLWxlbmd0aCBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhIGZpeGVkIGxlbmd0aCBsaXN0LiAqLwogIHZvaWQgY2xlYXIoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNsZWFyIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgRSByZW1vdmVBdChpbnQgaW5kZXgpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICBFIHJlbW92ZUxhc3QoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGEgZml4ZWQgbGVuZ3RoIGxpc3QuICovCiAgdm9pZCByZW1vdmVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYSBmaXhlZCBsZW5ndGggbGlzdC4gKi8KICB2b2lkIHJlcGxhY2VSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIGEgZml4ZWQtbGVuZ3RoIGxpc3QiKTsKICB9Cn0KCi8qKgogKiBNaXhpbiBmb3IgYW4gdW5tb2RpZmlhYmxlIFtMaXN0XSBjbGFzcy4KICoKICogVGhpcyBvdmVycmlkZXMgYWxsIG11dGF0aW5nIG1ldGhvZHMgd2l0aCBtZXRob2RzIHRoYXQgdGhyb3cuCiAqIFRoaXMgbWl4aW4gaXMgaW50ZW5kZWQgdG8gYmUgbWl4ZWQgaW4gb24gdG9wIG9mIFtMaXN0TWl4aW5dIG9uCiAqIHVubW9kaWZpYWJsZSBsaXN0cy4KICovCmFic3RyYWN0IGNsYXNzIFVubW9kaWZpYWJsZUxpc3RNaXhpbjxFPiBpbXBsZW1lbnRzIExpc3Q8RT4gewogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgRSB2YWx1ZSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHNldCBsZW5ndGgoaW50IG5ld0xlbmd0aCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIkNhbm5vdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgc2V0IGZpcnN0KEUgZWxlbWVudCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIHNldCBsYXN0KEUgZWxlbWVudCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgc2V0QWxsKGludCBhdCwgSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIGFkZChFIHZhbHVlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGFkZCB0byBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBFIGVsZW1lbnQpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICB2b2lkIGluc2VydEFsbChpbnQgYXQsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGFkZCB0byBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCBhZGRBbGwoSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICBib29sIHJlbW92ZShPYmplY3QgZWxlbWVudCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCByZXRhaW5XaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCBzb3J0KFtDb21wYXJhdG9yPEU+IGNvbXBhcmVdKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCBzaHVmZmxlKFtSYW5kb20gcmFuZG9tXSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgY2xlYXIoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGNsZWFyIGFuIHVubW9kaWZpYWJsZSBsaXN0Iik7CiAgfQoKICAvKiogVGhpcyBvcGVyYXRpb24gaXMgbm90IHN1cHBvcnRlZCBieSBhbiB1bm1vZGlmaWFibGUgbGlzdC4gKi8KICBFIHJlbW92ZUF0KGludCBpbmRleCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgRSByZW1vdmVMYXN0KCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlLCBbaW50IHNraXBDb3VudCA9IDBdKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpOwogIH0KCiAgLyoqIFRoaXMgb3BlcmF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgdm9pZCByZW1vdmVSYW5nZShpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgcmVwbGFjZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8RT4gaXRlcmFibGUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9CgogIC8qKiBUaGlzIG9wZXJhdGlvbiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHZvaWQgZmlsbFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgW0UgZmlsbFZhbHVlXSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QiKTsKICB9Cn0KCi8qKgogKiBBYnN0cmFjdCBpbXBsZW1lbnRhdGlvbiBvZiBhIGZpeGVkLWxlbmd0aCBsaXN0LgogKgogKiBBbGwgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBpbiB0ZXJtcyBvZiBgbGVuZ3RoYCwgYG9wZXJhdG9yW11gIGFuZAogKiBgb3BlcmF0b3JbXT1gLCB3aGljaCBuZWVkIHRvIGJlIGltcGxlbWVudGVkLgogKi8KYWJzdHJhY3QgY2xhc3MgRml4ZWRMZW5ndGhMaXN0QmFzZTxFPiA9IExpc3RCYXNlPEU+CiAgICB3aXRoIEZpeGVkTGVuZ3RoTGlzdE1peGluPEU+OwoKLyoqCiAqIEFic3RyYWN0IGltcGxlbWVudGF0aW9uIG9mIGFuIHVubW9kaWZpYWJsZSBsaXN0LgogKgogKiBBbGwgb3BlcmF0aW9ucyBhcmUgZGVmaW5lZCBpbiB0ZXJtcyBvZiBgbGVuZ3RoYCBhbmQgYG9wZXJhdG9yW11gLAogKiB3aGljaCBuZWVkIHRvIGJlIGltcGxlbWVudGVkLgogKi8KYWJzdHJhY3QgY2xhc3MgVW5tb2RpZmlhYmxlTGlzdEJhc2U8RT4gPSBMaXN0QmFzZTxFPgogICAgd2l0aCBVbm1vZGlmaWFibGVMaXN0TWl4aW48RT47CgpjbGFzcyBfTGlzdEluZGljZXNJdGVyYWJsZSBleHRlbmRzIExpc3RJdGVyYWJsZTxpbnQ+IHsKICBMaXN0IF9iYWNrZWRMaXN0OwoKICBfTGlzdEluZGljZXNJdGVyYWJsZSh0aGlzLl9iYWNrZWRMaXN0KTsKCiAgaW50IGdldCBsZW5ndGggPT4gX2JhY2tlZExpc3QubGVuZ3RoOwogIGludCBlbGVtZW50QXQoaW50IGluZGV4KSB7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsaWRJbmRleChpbmRleCwgdGhpcyk7CiAgICByZXR1cm4gaW5kZXg7CiAgfQp9CgpjbGFzcyBMaXN0TWFwVmlldzxFPiBleHRlbmRzIFVubW9kaWZpYWJsZU1hcEJhc2U8aW50LCBFPiB7CiAgTGlzdDxFPiBfdmFsdWVzOwoKICBMaXN0TWFwVmlldyh0aGlzLl92YWx1ZXMpOwoKICBFIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpID0+IGNvbnRhaW5zS2V5KGtleSkgPyBfdmFsdWVzW2tleV0gOiBudWxsOwogIGludCBnZXQgbGVuZ3RoID0+IF92YWx1ZXMubGVuZ3RoOwoKICBJdGVyYWJsZTxFPiBnZXQgdmFsdWVzID0+IG5ldyBTdWJMaXN0SXRlcmFibGU8RT4oX3ZhbHVlcywgMCwgbnVsbCk7CiAgSXRlcmFibGU8aW50PiBnZXQga2V5cyA9PiBuZXcgX0xpc3RJbmRpY2VzSXRlcmFibGUoX3ZhbHVlcyk7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX3ZhbHVlcy5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX3ZhbHVlcy5pc05vdEVtcHR5OwogIGJvb2wgY29udGFpbnNWYWx1ZShPYmplY3QgdmFsdWUpID0+IF92YWx1ZXMuY29udGFpbnModmFsdWUpOwogIGJvb2wgY29udGFpbnNLZXkoT2JqZWN0IGtleSkgPT4ga2V5IGlzIGludCAmJiBrZXkgPj0gMCAmJiBrZXkgPCBsZW5ndGg7CgogIHZvaWQgZm9yRWFjaCh2b2lkIGYoaW50IGtleSwgRSB2YWx1ZSkpIHsKICAgIGludCBsZW5ndGggPSBfdmFsdWVzLmxlbmd0aDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgZihpLCBfdmFsdWVzW2ldKTsKICAgICAgaWYgKGxlbmd0aCAhPSBfdmFsdWVzLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IoX3ZhbHVlcyk7CiAgICAgIH0KICAgIH0KICB9Cn0KCmNsYXNzIFJldmVyc2VkTGlzdEl0ZXJhYmxlPEU+IGV4dGVuZHMgTGlzdEl0ZXJhYmxlPEU+IHsKICBJdGVyYWJsZTxFPiBfc291cmNlOwogIFJldmVyc2VkTGlzdEl0ZXJhYmxlKHRoaXMuX3NvdXJjZSk7CgogIGludCBnZXQgbGVuZ3RoID0+IF9zb3VyY2UubGVuZ3RoOwoKICBFIGVsZW1lbnRBdChpbnQgaW5kZXgpID0+IF9zb3VyY2UuZWxlbWVudEF0KF9zb3VyY2UubGVuZ3RoIC0gMSAtIGluZGV4KTsKfQoKLyoqCiAqIENyZWF0ZXMgZXJyb3JzIHRocm93biBieSB1bm1vZGlmaWFibGUgbGlzdHMgd2hlbiB0aGV5IGFyZSBhdHRlbXB0ZWQgbW9kaWZpZWQuCiAqCiAqIFRoaXMgY2xhc3MgY3JlYXRlcyBbVW5zdXBwb3J0ZWRFcnJvcl1zIHdpdGggc3BlY2lhbGl6ZWQgbWVzc2FnZXMuCiAqLwphYnN0cmFjdCBjbGFzcyBVbm1vZGlmaWFibGVMaXN0RXJyb3IgewogIC8qKiBFcnJvciB0aHJvd24gd2hlbiB0cnlpbmcgdG8gYWRkIGVsZW1lbnRzIHRvIGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHN0YXRpYyBVbnN1cHBvcnRlZEVycm9yIGFkZCgpID0+CiAgICAgIG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgYWRkIHRvIHVubW9kaWZpYWJsZSBMaXN0Iik7CgogIC8qKiBFcnJvciB0aHJvd24gd2hlbiB0cnlpbmcgdG8gYWRkIGVsZW1lbnRzIHRvIGFuIHVubW9kaWZpYWJsZSBsaXN0LiAqLwogIHN0YXRpYyBVbnN1cHBvcnRlZEVycm9yIGNoYW5nZSgpID0+CiAgICAgIG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY2hhbmdlIHRoZSBjb250ZW50IG9mIGFuIHVubW9kaWZpYWJsZSBMaXN0Iik7CgogIC8qKiBFcnJvciB0aHJvd24gd2hlbiB0cnlpbmcgdG8gY2hhbmdlIHRoZSBsZW5ndGggb2YgYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgc3RhdGljIFVuc3VwcG9ydGVkRXJyb3IgbGVuZ3RoKCkgPT4KICAgICAgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjaGFuZ2UgbGVuZ3RoIG9mIHVubW9kaWZpYWJsZSBMaXN0Iik7CgogIC8qKiBFcnJvciB0aHJvd24gd2hlbiB0cnlpbmcgdG8gcmVtb3ZlIGVsZW1lbnRzIGZyb20gYW4gdW5tb2RpZmlhYmxlIGxpc3QuICovCiAgc3RhdGljIFVuc3VwcG9ydGVkRXJyb3IgcmVtb3ZlKCkgPT4KICAgICAgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCByZW1vdmUgZnJvbSB1bm1vZGlmaWFibGUgTGlzdCIpOwp9CgovKioKICogQ3JlYXRlcyBlcnJvcnMgdGhyb3duIGJ5IG5vbi1ncm93YWJsZSBsaXN0cyB3aGVuIHRoZXkgYXJlIGF0dGVtcHRlZCBtb2RpZmllZC4KICoKICogVGhpcyBjbGFzcyBjcmVhdGVzIFtVbnN1cHBvcnRlZEVycm9yXXMgd2l0aCBzcGVjaWFsaXplZCBtZXNzYWdlcy4KICovCmFic3RyYWN0IGNsYXNzIE5vbkdyb3dhYmxlTGlzdEVycm9yIHsKICAvKiogRXJyb3IgdGhyb3duIHdoZW4gdHJ5aW5nIHRvIGFkZCBlbGVtZW50cyB0byBhbiBub24tZ3Jvd2FibGUgbGlzdC4gKi8KICBzdGF0aWMgVW5zdXBwb3J0ZWRFcnJvciBhZGQoKSA9PgogICAgICBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IGFkZCB0byBub24tZ3Jvd2FibGUgTGlzdCIpOwoKICAvKiogRXJyb3IgdGhyb3duIHdoZW4gdHJ5aW5nIHRvIGNoYW5nZSB0aGUgbGVuZ3RoIG9mIGFuIG5vbi1ncm93YWJsZSBsaXN0LiAqLwogIHN0YXRpYyBVbnN1cHBvcnRlZEVycm9yIGxlbmd0aCgpID0+CiAgICAgIG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgY2hhbmdlIGxlbmd0aCBvZiBub24tZ3Jvd2FibGUgTGlzdCIpOwoKICAvKiogRXJyb3IgdGhyb3duIHdoZW4gdHJ5aW5nIHRvIHJlbW92ZSBlbGVtZW50cyBmcm9tIGFuIG5vbi1ncm93YWJsZSBsaXN0LiAqLwogIHN0YXRpYyBVbnN1cHBvcnRlZEVycm9yIHJlbW92ZSgpID0+CiAgICAgIG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3QgcmVtb3ZlIGZyb20gbm9uLWdyb3dhYmxlIExpc3QiKTsKfQoKLyoqCiAqIENvbnZlcnRzIGEgZ3Jvd2FibGUgbGlzdCB0byBhIGZpeGVkIGxlbmd0aCBsaXN0IHdpdGggdGhlIHNhbWUgZWxlbWVudHMuCiAqCiAqIEZvciBpbnRlcm5hbCB1c2Ugb25seS4KICogT25seSB3b3JrcyBvbiBncm93YWJsZSBsaXN0cyBhcyBjcmVhdGVkIGJ5IGBbXWAgb3IgYG5ldyBMaXN0KClgLgogKiBNYXkgdGhyb3cgb24gYW55IG90aGVyIGxpc3QuCiAqCiAqIFRoZSBvcGVyYXRpb24gaXMgZWZmaWNpZW50LiBJdCBkb2Vzbid0IGNvcHkgdGhlIGVsZW1lbnRzLCBidXQgY29udmVydHMKICogdGhlIGV4aXN0aW5nIGxpc3QgZGlyZWN0bHkgdG8gYSBmaXhlZCBsZW5ndGggbGlzdC4KICogVGhhdCBtZWFucyB0aGF0IGl0IGlzIGEgZGVzdHJ1Y3RpdmUgY29udmVyc2lvbi4KICogVGhlIG9yaWdpbmFsIGxpc3Qgc2hvdWxkIG5vdCBiZSB1c2VkIGFmdGVyd2FyZHMuCiAqCiAqIFRoZSByZXR1cm5lZCBsaXN0IG1heSBiZSB0aGUgc2FtZSBsaXN0IGFzIHRoZSBvcmlnaW5hbCwKICogb3IgaXQgbWF5IGJlIGEgZGlmZmVyZW50IGxpc3QgKGFjY29yZGluZyB0byBbaWRlbnRpY2FsXSkuCiAqIFRoZSBvcmlnaW5hbCBsaXN0IG1heSBoYXZlIGNoYW5nZWQgdHlwZSB0byBiZSBhIGZpeGVkIGxpc3QsCiAqIG9yIGJlY29tZSBlbXB0eSBvciBiZWVuIG90aGVyd2lzZSBtb2RpZmllZC4KICogSXQgd2lsbCBzdGlsbCBiZSBhIHZhbGlkIG9iamVjdCwgc28gcmVmZXJlbmNlcyB0byBpdCB3aWxsIG5vdCwgZS5nLiwgY3Jhc2gKICogdGhlIHJ1bnRpbWUgaWYgYWNjZXNzZWQsIGJ1dCBubyBwcm9taXNlcyBhcmUgbWFkZSB3cnQuIGl0cyBjb250ZW50cy4KICoKICogVGhpcyB1bnNwZWNpZmllZCBiZWhhdmlvciBpcyB0aGUgcmVhc29uIHRoZSBmdW5jdGlvbiBpcyBub3QgZXhwb3NlZCB0bwogKiB1c2Vycy4gV2UgYWxsb3cgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gdG8gbWFrZSB0aGUgbW9zdCBlZmZpY2llbnQKICogY29udmVyc2lvbiwgYXQgdGhlIGNvc3Qgb2YgbGVhdmluZyB0aGUgb3JpZ2luYWwgbGlzdCBpbiBhbiB1bnNwZWNpZmllZAogKiBzdGF0ZS4KICovCmV4dGVybmFsIExpc3Q8VD4gbWFrZUxpc3RGaXhlZExlbmd0aDxUPihMaXN0PFQ+IGdyb3dhYmxlTGlzdCk7CgovKioKICogQ29udmVydHMgYSBmaXhlZC1sZW5ndGggbGlzdCB0byBhbiB1bm1vZGlmaWFibGUgbGlzdC4KICoKICogRm9yIGludGVybmFsIHVzZSBvbmx5LgogKiBPbmx5IHdvcmtzIGZvciBjb3JlIGZpeGVkLWxlbmd0aCBsaXN0cyBhcyBjcmVhdGVkIGJ5IGBuZXcgTGlzdChsZW5ndGgpYCwKICogb3IgYXMgcmV0dXJuZWQgYnkgW21ha2VMaXN0Rml4ZWRMZW5ndGhdLgogKgogKiBUaGUgb3BlcmF0aW9uIGlzIGVmZmljaWVudC4gSXQgZG9lc24ndCBjb3B5IHRoZSBlbGVtZW50cywgYnV0IGNvbnZlcnRzCiAqIHRoZSBleGlzdGluZyBsaXN0IGRpcmVjdGx5IHRvIGEgZml4ZWQgbGVuZ3RoIGxpc3QuCiAqIFRoYXQgbWVhbnMgdGhhdCBpdCBpcyBhIGRlc3RydWN0aXZlIGNvbnZlcnNpb24uCiAqIFRoZSBvcmlnaW5hbCBsaXN0IHNob3VsZCBub3QgYmUgdXNlZCBhZnRlcndhcmRzLgogKgogKiBUaGUgdW5tb2RpZmlhYmxlIGxpc3QgdHlwZSBpcyBzaW1pbGFyIHRvIHRoZSBvbmUgdXNlZCBieSBjb25zdCBsaXN0cy4KICovCmV4dGVybmFsIExpc3Q8VD4gbWFrZUZpeGVkTGlzdFVubW9kaWZpYWJsZTxUPihMaXN0PFQ+IGZpeGVkTGVuZ3RoTGlzdCk7CoFXAE5OPAEYAQRCA0QEKUEeIDwEAUEWRQQBQSRFBAFBMUUEAUEmRQQBQSBKBAFBK0oEAUErSgQBQRFEBAFBGkoEAUETSgQBQSlKBAFBQEoEAgEEKwNAQhcEPUIqRgQBQh4gPQQBGUYEARhGBAFCLkYEAUIWRgQBQiZGBAFCMUYEAUImRgQBQiBLBAFCK0sEAUIrSwQBQidGBAFCIkYEAUIRRQQBQhpLBAFCE0sEAUJRRgQBQilLBAFCQEsEAUI2RgQCAQQzA0UwBDQiAQQ0A0UhBDUjATcUASoBKB0tEgQCATsTAR0BRyQBRj8BJy0/SgErIScYJjgIBgQCATgXJgEkAUsCAQRRA0UEJ0sjPwFLJlEBUCZJAVAmRAIBBFEDRQQmSyM/AVAmSQFQJkQCAQRLAxpEIANKNjM0Azs9Py9OSANKTEoKBD8BBDkDGkwsA0o2MzQDSQRIARhkYXJ0Ol9pbnRlcm5hbC9saXN0LmRhcnQub3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2ludGVybmFsL3NvcnQuZGFydK/FLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5faW50ZXJuYWw7CgovKioKICogRHVhbC1QaXZvdCBRdWlja3NvcnQgYWxnb3JpdGhtLgogKgogKiBUaGlzIGNsYXNzIGltcGxlbWVudHMgdGhlIGR1YWwtcGl2b3QgcXVpY2tzb3J0IGFsZ29yaXRobSBhcyBwcmVzZW50ZWQgaW4KICogVmxhZGltaXIgWWFyb3NsYXZza2l5J3MgcGFwZXIuCiAqCiAqIFNvbWUgaW1wcm92ZW1lbnRzIGhhdmUgYmVlbiBjb3BpZWQgZnJvbSBBbmRyb2lkJ3MgaW1wbGVtZW50YXRpb24uCiAqLwpjbGFzcyBTb3J0IHsKICAvLyBXaGVuIGEgbGlzdCBoYXMgbGVzcyB0aGVuIFs6X0lOU0VSVElPTl9TT1JUX1RIUkVTSE9MRDpdIGVsZW1lbnRzIGl0IHdpbGwKICAvLyBiZSBzb3J0ZWQgYnkgYW4gaW5zZXJ0aW9uIHNvcnQuCiAgc3RhdGljIGNvbnN0IGludCBfSU5TRVJUSU9OX1NPUlRfVEhSRVNIT0xEID0gMzI7CgogIC8qKgogICAqIFNvcnRzIGFsbCBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gbGlzdCBbOmE6XSBhY2NvcmRpbmcgdG8gdGhlIGdpdmVuCiAgICogWzpjb21wYXJlOl0gZnVuY3Rpb24uCiAgICoKICAgKiBUaGUgWzpjb21wYXJlOl0gZnVuY3Rpb24gdGFrZXMgdHdvIGFyZ3VtZW50cyBbOng6XSBhbmQgWzp5Ol0gYW5kIHJldHVybnMKICAgKiAgLTEgaWYgWzp4IDwgeTpdLAogICAqICAgMCBpZiBbOnggPT0geTpdLCBhbmQKICAgKiAgIDEgaWYgWzp4ID4geTpdLgogICAqCiAgICogVGhlIGZ1bmN0aW9uJ3MgYmVoYXZpb3IgbXVzdCBiZSBjb25zaXN0ZW50LiBJdCBtdXN0IG5vdCByZXR1cm4gZGlmZmVyZW50CiAgICogcmVzdWx0cyBmb3IgdGhlIHNhbWUgdmFsdWVzLgogICAqLwogIHN0YXRpYyB2b2lkIHNvcnQ8RT4oTGlzdDxFPiBhLCBpbnQgY29tcGFyZShFIGEsIEUgYikpIHsKICAgIF9kb1NvcnQoYSwgMCwgYS5sZW5ndGggLSAxLCBjb21wYXJlKTsKICB9CgogIC8qKgogICAqIFNvcnRzIGFsbCBlbGVtZW50cyBpbiB0aGUgcmFuZ2UgWzpmcm9tOl0gKGluY2x1c2l2ZSkgdG8gWzp0bzpdIChleGNsdXNpdmUpCiAgICogb2YgdGhlIGdpdmVuIGxpc3QgWzphOl0uCiAgICoKICAgKiBJZiB0aGUgZ2l2ZW4gcmFuZ2UgaXMgaW52YWxpZCBhbiAiT3V0T2ZSYW5nZSIgZXJyb3IgaXMgcmFpc2VkLgogICAqIFRPRE8oZmxvaXRzY2gpOiBkbyB3ZSB3YW50IGFuIGVycm9yPwogICAqCiAgICogU2VlIFs6c29ydDpdIGZvciByZXF1aXJlbWVudHMgb2YgdGhlIFs6Y29tcGFyZTpdIGZ1bmN0aW9uLgogICAqLwogIHN0YXRpYyB2b2lkIHNvcnRSYW5nZTxFPihMaXN0PEU+IGEsIGludCBmcm9tLCBpbnQgdG8sIGludCBjb21wYXJlKEUgYSwgRSBiKSkgewogICAgaWYgKChmcm9tIDwgMCkgfHwgKHRvID4gYS5sZW5ndGgpIHx8ICh0byA8IGZyb20pKSB7CiAgICAgIHRocm93ICJPdXRPZlJhbmdlIjsKICAgIH0KICAgIF9kb1NvcnQoYSwgZnJvbSwgdG8gLSAxLCBjb21wYXJlKTsKICB9CgogIC8qKgogICAqIFNvcnRzIHRoZSBsaXN0IGluIHRoZSBpbnRlcnZhbCBbOmxlZnQ6XSB0byBbOnJpZ2h0Ol0gKGJvdGggaW5jbHVzaXZlKS4KICAgKi8KICBzdGF0aWMgdm9pZCBfZG9Tb3J0PEU+KAogICAgICBMaXN0PEU+IGEsIGludCBsZWZ0LCBpbnQgcmlnaHQsIGludCBjb21wYXJlKEUgYSwgRSBiKSkgewogICAgaWYgKChyaWdodCAtIGxlZnQpIDw9IF9JTlNFUlRJT05fU09SVF9USFJFU0hPTEQpIHsKICAgICAgX2luc2VydGlvblNvcnQoYSwgbGVmdCwgcmlnaHQsIGNvbXBhcmUpOwogICAgfSBlbHNlIHsKICAgICAgX2R1YWxQaXZvdFF1aWNrc29ydChhLCBsZWZ0LCByaWdodCwgY29tcGFyZSk7CiAgICB9CiAgfQoKICBzdGF0aWMgdm9pZCBfaW5zZXJ0aW9uU29ydDxFPigKICAgICAgTGlzdDxFPiBhLCBpbnQgbGVmdCwgaW50IHJpZ2h0LCBpbnQgY29tcGFyZShFIGEsIEUgYikpIHsKICAgIGZvciAoaW50IGkgPSBsZWZ0ICsgMTsgaSA8PSByaWdodDsgaSsrKSB7CiAgICAgIHZhciBlbCA9IGFbaV07CiAgICAgIGludCBqID0gaTsKICAgICAgd2hpbGUgKChqID4gbGVmdCkgJiYgKGNvbXBhcmUoYVtqIC0gMV0sIGVsKSA+IDApKSB7CiAgICAgICAgYVtqXSA9IGFbaiAtIDFdOwogICAgICAgIGotLTsKICAgICAgfQogICAgICBhW2pdID0gZWw7CiAgICB9CiAgfQoKICBzdGF0aWMgdm9pZCBfZHVhbFBpdm90UXVpY2tzb3J0PEU+KAogICAgICBMaXN0PEU+IGEsIGludCBsZWZ0LCBpbnQgcmlnaHQsIGludCBjb21wYXJlKEUgYSwgRSBiKSkgewogICAgYXNzZXJ0KHJpZ2h0IC0gbGVmdCA+IF9JTlNFUlRJT05fU09SVF9USFJFU0hPTEQpOwoKICAgIC8vIENvbXB1dGUgdGhlIHR3byBwaXZvdHMgYnkgbG9va2luZyBhdCA1IGVsZW1lbnRzLgogICAgaW50IHNpeHRoID0gKHJpZ2h0IC0gbGVmdCArIDEpIH4vIDY7CiAgICBpbnQgaW5kZXgxID0gbGVmdCArIHNpeHRoOwogICAgaW50IGluZGV4NSA9IHJpZ2h0IC0gc2l4dGg7CiAgICBpbnQgaW5kZXgzID0gKGxlZnQgKyByaWdodCkgfi8gMjsgLy8gVGhlIG1pZHBvaW50LgogICAgaW50IGluZGV4MiA9IGluZGV4MyAtIHNpeHRoOwogICAgaW50IGluZGV4NCA9IGluZGV4MyArIHNpeHRoOwoKICAgIHZhciBlbDEgPSBhW2luZGV4MV07CiAgICB2YXIgZWwyID0gYVtpbmRleDJdOwogICAgdmFyIGVsMyA9IGFbaW5kZXgzXTsKICAgIHZhciBlbDQgPSBhW2luZGV4NF07CiAgICB2YXIgZWw1ID0gYVtpbmRleDVdOwoKICAgIC8vIFNvcnQgdGhlIHNlbGVjdGVkIDUgZWxlbWVudHMgdXNpbmcgYSBzb3J0aW5nIG5ldHdvcmsuCiAgICBpZiAoY29tcGFyZShlbDEsIGVsMikgPiAwKSB7CiAgICAgIHZhciB0ID0gZWwxOwogICAgICBlbDEgPSBlbDI7CiAgICAgIGVsMiA9IHQ7CiAgICB9CiAgICBpZiAoY29tcGFyZShlbDQsIGVsNSkgPiAwKSB7CiAgICAgIHZhciB0ID0gZWw0OwogICAgICBlbDQgPSBlbDU7CiAgICAgIGVsNSA9IHQ7CiAgICB9CiAgICBpZiAoY29tcGFyZShlbDEsIGVsMykgPiAwKSB7CiAgICAgIHZhciB0ID0gZWwxOwogICAgICBlbDEgPSBlbDM7CiAgICAgIGVsMyA9IHQ7CiAgICB9CiAgICBpZiAoY29tcGFyZShlbDIsIGVsMykgPiAwKSB7CiAgICAgIHZhciB0ID0gZWwyOwogICAgICBlbDIgPSBlbDM7CiAgICAgIGVsMyA9IHQ7CiAgICB9CiAgICBpZiAoY29tcGFyZShlbDEsIGVsNCkgPiAwKSB7CiAgICAgIHZhciB0ID0gZWwxOwogICAgICBlbDEgPSBlbDQ7CiAgICAgIGVsNCA9IHQ7CiAgICB9CiAgICBpZiAoY29tcGFyZShlbDMsIGVsNCkgPiAwKSB7CiAgICAgIHZhciB0ID0gZWwzOwogICAgICBlbDMgPSBlbDQ7CiAgICAgIGVsNCA9IHQ7CiAgICB9CiAgICBpZiAoY29tcGFyZShlbDIsIGVsNSkgPiAwKSB7CiAgICAgIHZhciB0ID0gZWwyOwogICAgICBlbDIgPSBlbDU7CiAgICAgIGVsNSA9IHQ7CiAgICB9CiAgICBpZiAoY29tcGFyZShlbDIsIGVsMykgPiAwKSB7CiAgICAgIHZhciB0ID0gZWwyOwogICAgICBlbDIgPSBlbDM7CiAgICAgIGVsMyA9IHQ7CiAgICB9CiAgICBpZiAoY29tcGFyZShlbDQsIGVsNSkgPiAwKSB7CiAgICAgIHZhciB0ID0gZWw0OwogICAgICBlbDQgPSBlbDU7CiAgICAgIGVsNSA9IHQ7CiAgICB9CgogICAgdmFyIHBpdm90MSA9IGVsMjsKICAgIHZhciBwaXZvdDIgPSBlbDQ7CgogICAgLy8gZWwyIGFuZCBlbDQgaGF2ZSBiZWVuIHNhdmVkIGluIHRoZSBwaXZvdCB2YXJpYWJsZXMuIFRoZXkgd2lsbCBiZSB3cml0dGVuCiAgICAvLyBiYWNrLCBvbmNlIHRoZSBwYXJ0aXRpb25pbmcgaXMgZmluaXNoZWQuCiAgICBhW2luZGV4MV0gPSBlbDE7CiAgICBhW2luZGV4M10gPSBlbDM7CiAgICBhW2luZGV4NV0gPSBlbDU7CgogICAgYVtpbmRleDJdID0gYVtsZWZ0XTsKICAgIGFbaW5kZXg0XSA9IGFbcmlnaHRdOwoKICAgIGludCBsZXNzID0gbGVmdCArIDE7IC8vIEZpcnN0IGVsZW1lbnQgaW4gdGhlIG1pZGRsZSBwYXJ0aXRpb24uCiAgICBpbnQgZ3JlYXQgPSByaWdodCAtIDE7IC8vIExhc3QgZWxlbWVudCBpbiB0aGUgbWlkZGxlIHBhcnRpdGlvbi4KCiAgICBib29sIHBpdm90c19hcmVfZXF1YWwgPSAoY29tcGFyZShwaXZvdDEsIHBpdm90MikgPT0gMCk7CiAgICBpZiAocGl2b3RzX2FyZV9lcXVhbCkgewogICAgICB2YXIgcGl2b3QgPSBwaXZvdDE7CiAgICAgIC8vIERlZ2VuZXJhdGVkIGNhc2Ugd2hlcmUgdGhlIHBhcnRpdGlvbmluZyBiZWNvbWVzIGEgRHV0Y2ggbmF0aW9uYWwgZmxhZwogICAgICAvLyBwcm9ibGVtLgogICAgICAvLwogICAgICAvLyBbIHwgIDwgcGl2b3QgIHwgPT0gcGl2b3QgfCB1bnBhcnRpdGlvbmVkIHwgPiBwaXZvdCAgfCBdCiAgICAgIC8vICBeICAgICAgICAgICAgIF4gICAgICAgICAgXiAgICAgICAgICAgICBeICAgICAgICAgICAgXgogICAgICAvLyBsZWZ0ICAgICAgICAgbGVzcyAgICAgICAgIGsgICAgICAgICAgIGdyZWF0ICAgICAgICAgcmlnaHQKICAgICAgLy8KICAgICAgLy8gYVtsZWZ0XSBhbmQgYVtyaWdodF0gYXJlIHVuZGVmaW5lZCBhbmQgYXJlIGZpbGxlZCBhZnRlciB0aGUKICAgICAgLy8gcGFydGl0aW9uaW5nLgogICAgICAvLwogICAgICAvLyBJbnZhcmlhbnRzOgogICAgICAvLyAgIDEpIGZvciB4IGluIF1sZWZ0LCBsZXNzWyA6IHggPCBwaXZvdC4KICAgICAgLy8gICAyKSBmb3IgeCBpbiBbbGVzcywga1sgOiB4ID09IHBpdm90LgogICAgICAvLyAgIDMpIGZvciB4IGluIF1ncmVhdCwgcmlnaHRbIDogeCA+IHBpdm90LgogICAgICBmb3IgKGludCBrID0gbGVzczsgayA8PSBncmVhdDsgaysrKSB7CiAgICAgICAgdmFyIGFrID0gYVtrXTsKICAgICAgICBpbnQgY29tcCA9IGNvbXBhcmUoYWssIHBpdm90KTsKICAgICAgICBpZiAoY29tcCA9PSAwKSBjb250aW51ZTsKICAgICAgICBpZiAoY29tcCA8IDApIHsKICAgICAgICAgIGlmIChrICE9IGxlc3MpIHsKICAgICAgICAgICAgYVtrXSA9IGFbbGVzc107CiAgICAgICAgICAgIGFbbGVzc10gPSBhazsKICAgICAgICAgIH0KICAgICAgICAgIGxlc3MrKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gY29tcCA+IDAuCiAgICAgICAgICAvLwogICAgICAgICAgLy8gRmluZCB0aGUgZmlyc3QgZWxlbWVudCA8PSBwaXZvdCBpbiB0aGUgcmFuZ2UgW2sgLSAxLCBncmVhdF0gYW5kCiAgICAgICAgICAvLyBwdXQgWzphazpdIHRoZXJlLiBXZSBrbm93IHRoYXQgc3VjaCBhbiBlbGVtZW50IG11c3QgZXhpc3Q6CiAgICAgICAgICAvLyBXaGVuIGsgPT0gbGVzcywgdGhlbiBlbDMgKHdoaWNoIGlzIGVxdWFsIHRvIHBpdm90KSBsaWVzIGluIHRoZQogICAgICAgICAgLy8gaW50ZXJ2YWwuIE90aGVyd2lzZSBhW2sgLSAxXSA9PSBwaXZvdCBhbmQgdGhlIHNlYXJjaCBzdG9wcyBhdCBrLTEuCiAgICAgICAgICAvLyBOb3RlIHRoYXQgaW4gdGhlIGxhdHRlciBjYXNlIGludmFyaWFudCAyIHdpbGwgYmUgdmlvbGF0ZWQgZm9yIGEKICAgICAgICAgIC8vIHNob3J0IGFtb3VudCBvZiB0aW1lLiBUaGUgaW52YXJpYW50IHdpbGwgYmUgcmVzdG9yZWQgd2hlbiB0aGUKICAgICAgICAgIC8vIHBpdm90cyBhcmUgcHV0IGludG8gdGhlaXIgZmluYWwgcG9zaXRpb25zLgogICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgY29tcCA9IGNvbXBhcmUoYVtncmVhdF0sIHBpdm90KTsKICAgICAgICAgICAgaWYgKGNvbXAgPiAwKSB7CiAgICAgICAgICAgICAgZ3JlYXQtLTsKICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IGxvY2F0aW9uIGluIHRoZSB3aGlsZS1sb29wIHdoZXJlIGEgbmV3CiAgICAgICAgICAgICAgLy8gaXRlcmF0aW9uIGlzIHN0YXJ0ZWQuCiAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29tcCA8IDApIHsKICAgICAgICAgICAgICAvLyBUcmlwbGUgZXhjaGFuZ2UuCiAgICAgICAgICAgICAgYVtrXSA9IGFbbGVzc107CiAgICAgICAgICAgICAgYVtsZXNzKytdID0gYVtncmVhdF07CiAgICAgICAgICAgICAgYVtncmVhdC0tXSA9IGFrOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIC8vIGNvbXAgPT0gMDsKICAgICAgICAgICAgICBhW2tdID0gYVtncmVhdF07CiAgICAgICAgICAgICAgYVtncmVhdC0tXSA9IGFrOwogICAgICAgICAgICAgIC8vIE5vdGU6IGlmIGdyZWF0IDwgayB0aGVuIHdlIHdpbGwgZXhpdCB0aGUgb3V0ZXIgbG9vcCBhbmQgZml4CiAgICAgICAgICAgICAgLy8gaW52YXJpYW50IDIgKHdoaWNoIHdlIGp1c3QgdmlvbGF0ZWQpLgogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBXZSBwYXJ0aXRpb24gdGhlIGxpc3QgaW50byB0aHJlZSBwYXJ0czoKICAgICAgLy8gIDEuIDwgcGl2b3QxCiAgICAgIC8vICAyLiA+PSBwaXZvdDEgJiYgPD0gcGl2b3QyCiAgICAgIC8vICAzLiA+IHBpdm90MgogICAgICAvLwogICAgICAvLyBEdXJpbmcgdGhlIGxvb3Agd2UgaGF2ZToKICAgICAgLy8gWyB8IDwgcGl2b3QxIHwgPj0gcGl2b3QxICYmIDw9IHBpdm90MiB8IHVucGFydGl0aW9uZWQgIHwgPiBwaXZvdDIgIHwgXQogICAgICAvLyAgXiAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICBeICAgICAgICAgICAgIF4KICAgICAgLy8gbGVmdCAgICAgICAgIGxlc3MgICAgICAgICAgICAgICAgICAgICBrICAgICAgICAgICAgICBncmVhdCAgICAgICAgcmlnaHQKICAgICAgLy8KICAgICAgLy8gYVtsZWZ0XSBhbmQgYVtyaWdodF0gYXJlIHVuZGVmaW5lZCBhbmQgYXJlIGZpbGxlZCBhZnRlciB0aGUKICAgICAgLy8gcGFydGl0aW9uaW5nLgogICAgICAvLwogICAgICAvLyBJbnZhcmlhbnRzOgogICAgICAvLyAgIDEuIGZvciB4IGluIF1sZWZ0LCBsZXNzWyA6IHggPCBwaXZvdDEKICAgICAgLy8gICAyLiBmb3IgeCBpbiBbbGVzcywga1sgOiBwaXZvdDEgPD0geCAmJiB4IDw9IHBpdm90MgogICAgICAvLyAgIDMuIGZvciB4IGluIF1ncmVhdCwgcmlnaHRbIDogeCA+IHBpdm90MgogICAgICBmb3IgKGludCBrID0gbGVzczsgayA8PSBncmVhdDsgaysrKSB7CiAgICAgICAgdmFyIGFrID0gYVtrXTsKICAgICAgICBpbnQgY29tcF9waXZvdDEgPSBjb21wYXJlKGFrLCBwaXZvdDEpOwogICAgICAgIGlmIChjb21wX3Bpdm90MSA8IDApIHsKICAgICAgICAgIGlmIChrICE9IGxlc3MpIHsKICAgICAgICAgICAgYVtrXSA9IGFbbGVzc107CiAgICAgICAgICAgIGFbbGVzc10gPSBhazsKICAgICAgICAgIH0KICAgICAgICAgIGxlc3MrKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaW50IGNvbXBfcGl2b3QyID0gY29tcGFyZShhaywgcGl2b3QyKTsKICAgICAgICAgIGlmIChjb21wX3Bpdm90MiA+IDApIHsKICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICBpbnQgY29tcCA9IGNvbXBhcmUoYVtncmVhdF0sIHBpdm90Mik7CiAgICAgICAgICAgICAgaWYgKGNvbXAgPiAwKSB7CiAgICAgICAgICAgICAgICBncmVhdC0tOwogICAgICAgICAgICAgICAgaWYgKGdyZWF0IDwgaykgYnJlYWs7CiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBvbmx5IGxvY2F0aW9uIGluc2lkZSB0aGUgbG9vcCB3aGVyZSBhIG5ldwogICAgICAgICAgICAgICAgLy8gaXRlcmF0aW9uIGlzIHN0YXJ0ZWQuCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gYVtncmVhdF0gPD0gcGl2b3QyLgogICAgICAgICAgICAgICAgY29tcCA9IGNvbXBhcmUoYVtncmVhdF0sIHBpdm90MSk7CiAgICAgICAgICAgICAgICBpZiAoY29tcCA8IDApIHsKICAgICAgICAgICAgICAgICAgLy8gVHJpcGxlIGV4Y2hhbmdlLgogICAgICAgICAgICAgICAgICBhW2tdID0gYVtsZXNzXTsKICAgICAgICAgICAgICAgICAgYVtsZXNzKytdID0gYVtncmVhdF07CiAgICAgICAgICAgICAgICAgIGFbZ3JlYXQtLV0gPSBhazsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIC8vIGFbZ3JlYXRdID49IHBpdm90MS4KICAgICAgICAgICAgICAgICAgYVtrXSA9IGFbZ3JlYXRdOwogICAgICAgICAgICAgICAgICBhW2dyZWF0LS1dID0gYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICAvLyBNb3ZlIHBpdm90cyBpbnRvIHRoZWlyIGZpbmFsIHBvc2l0aW9ucy4KICAgIC8vIFdlIHNocnVuayB0aGUgbGlzdCBmcm9tIGJvdGggc2lkZXMgKGFbbGVmdF0gYW5kIGFbcmlnaHRdIGhhdmUKICAgIC8vIG1lYW5pbmdsZXNzIHZhbHVlcyBpbiB0aGVtKSBhbmQgbm93IHdlIG1vdmUgZWxlbWVudHMgZnJvbSB0aGUgZmlyc3QKICAgIC8vIGFuZCB0aGlyZCBwYXJ0aXRpb24gaW50byB0aGVzZSBsb2NhdGlvbnMgc28gdGhhdCB3ZSBjYW4gc3RvcmUgdGhlCiAgICAvLyBwaXZvdHMuCiAgICBhW2xlZnRdID0gYVtsZXNzIC0gMV07CiAgICBhW2xlc3MgLSAxXSA9IHBpdm90MTsKICAgIGFbcmlnaHRdID0gYVtncmVhdCArIDFdOwogICAgYVtncmVhdCArIDFdID0gcGl2b3QyOwoKICAgIC8vIFRoZSBsaXN0IGlzIG5vdyBwYXJ0aXRpb25lZCBpbnRvIHRocmVlIHBhcnRpdGlvbnM6CiAgICAvLyBbIDwgcGl2b3QxICAgfCA+PSBwaXZvdDEgJiYgPD0gcGl2b3QyICAgfCAgPiBwaXZvdDIgICBdCiAgICAvLyAgXiAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgIF4KICAgIC8vIGxlZnQgICAgICAgICBsZXNzICAgICAgICAgICAgICAgICAgICAgZ3JlYXQgICAgICAgIHJpZ2h0CgogICAgLy8gUmVjdXJzaXZlIGRlc2NlbnQuIChEb24ndCBpbmNsdWRlIHRoZSBwaXZvdCB2YWx1ZXMuKQogICAgX2RvU29ydChhLCBsZWZ0LCBsZXNzIC0gMiwgY29tcGFyZSk7CiAgICBfZG9Tb3J0KGEsIGdyZWF0ICsgMiwgcmlnaHQsIGNvbXBhcmUpOwoKICAgIGlmIChwaXZvdHNfYXJlX2VxdWFsKSB7CiAgICAgIC8vIEFsbCBlbGVtZW50cyBpbiB0aGUgc2Vjb25kIHBhcnRpdGlvbiBhcmUgZXF1YWwgdG8gdGhlIHBpdm90LiBObwogICAgICAvLyBuZWVkIHRvIHNvcnQgdGhlbS4KICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIEluIHRoZW9yeSBpdCBzaG91bGQgYmUgZW5vdWdoIHRvIGNhbGwgX2RvU29ydCByZWN1cnNpdmVseSBvbiB0aGUgc2Vjb25kCiAgICAvLyBwYXJ0aXRpb24uCiAgICAvLyBUaGUgQW5kcm9pZCBzb3VyY2UgaG93ZXZlciByZW1vdmVzIHRoZSBwaXZvdCBlbGVtZW50cyBmcm9tIHRoZSByZWN1cnNpdmUKICAgIC8vIGNhbGwgaWYgdGhlIHNlY29uZCBwYXJ0aXRpb24gaXMgdG9vIGxhcmdlIChtb3JlIHRoYW4gMi8zIG9mIHRoZSBsaXN0KS4KICAgIGlmIChsZXNzIDwgaW5kZXgxICYmIGdyZWF0ID4gaW5kZXg1KSB7CiAgICAgIHdoaWxlIChjb21wYXJlKGFbbGVzc10sIHBpdm90MSkgPT0gMCkgewogICAgICAgIGxlc3MrKzsKICAgICAgfQogICAgICB3aGlsZSAoY29tcGFyZShhW2dyZWF0XSwgcGl2b3QyKSA9PSAwKSB7CiAgICAgICAgZ3JlYXQtLTsKICAgICAgfQoKICAgICAgLy8gQ29weSBwYXN0ZSBvZiB0aGUgcHJldmlvdXMgMy13YXkgcGFydGl0aW9uaW5nIHdpdGggYWRhcHRpb25zLgogICAgICAvLwogICAgICAvLyBXZSBwYXJ0aXRpb24gdGhlIGxpc3QgaW50byB0aHJlZSBwYXJ0czoKICAgICAgLy8gIDEuID09IHBpdm90MQogICAgICAvLyAgMi4gPiBwaXZvdDEgJiYgPCBwaXZvdDIKICAgICAgLy8gIDMuID09IHBpdm90MgogICAgICAvLwogICAgICAvLyBEdXJpbmcgdGhlIGxvb3Agd2UgaGF2ZToKICAgICAgLy8gWyA9PSBwaXZvdDEgfCA+IHBpdm90MSAmJiA8IHBpdm90MiB8IHVucGFydGl0aW9uZWQgIHwgPT0gcGl2b3QyIF0KICAgICAgLy8gICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgICAgXgogICAgICAvLyAgICAgICAgICAgIGxlc3MgICAgICAgICAgICAgICAgICAgICBrICAgICAgICAgICAgICBncmVhdAogICAgICAvLwogICAgICAvLyBJbnZhcmlhbnRzOgogICAgICAvLyAgIDEuIGZvciB4IGluIFsgKiwgbGVzc1sgOiB4ID09IHBpdm90MQogICAgICAvLyAgIDIuIGZvciB4IGluIFtsZXNzLCBrWyA6IHBpdm90MSA8IHggJiYgeCA8IHBpdm90MgogICAgICAvLyAgIDMuIGZvciB4IGluIF1ncmVhdCwgKiBdIDogeCA9PSBwaXZvdDIKICAgICAgZm9yIChpbnQgayA9IGxlc3M7IGsgPD0gZ3JlYXQ7IGsrKykgewogICAgICAgIHZhciBhayA9IGFba107CiAgICAgICAgaW50IGNvbXBfcGl2b3QxID0gY29tcGFyZShhaywgcGl2b3QxKTsKICAgICAgICBpZiAoY29tcF9waXZvdDEgPT0gMCkgewogICAgICAgICAgaWYgKGsgIT0gbGVzcykgewogICAgICAgICAgICBhW2tdID0gYVtsZXNzXTsKICAgICAgICAgICAgYVtsZXNzXSA9IGFrOwogICAgICAgICAgfQogICAgICAgICAgbGVzcysrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbnQgY29tcF9waXZvdDIgPSBjb21wYXJlKGFrLCBwaXZvdDIpOwogICAgICAgICAgaWYgKGNvbXBfcGl2b3QyID09IDApIHsKICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICBpbnQgY29tcCA9IGNvbXBhcmUoYVtncmVhdF0sIHBpdm90Mik7CiAgICAgICAgICAgICAgaWYgKGNvbXAgPT0gMCkgewogICAgICAgICAgICAgICAgZ3JlYXQtLTsKICAgICAgICAgICAgICAgIGlmIChncmVhdCA8IGspIGJyZWFrOwogICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgb25seSBsb2NhdGlvbiBpbnNpZGUgdGhlIGxvb3Agd2hlcmUgYSBuZXcKICAgICAgICAgICAgICAgIC8vIGl0ZXJhdGlvbiBpcyBzdGFydGVkLgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIGFbZ3JlYXRdIDwgcGl2b3QyLgogICAgICAgICAgICAgICAgY29tcCA9IGNvbXBhcmUoYVtncmVhdF0sIHBpdm90MSk7CiAgICAgICAgICAgICAgICBpZiAoY29tcCA8IDApIHsKICAgICAgICAgICAgICAgICAgLy8gVHJpcGxlIGV4Y2hhbmdlLgogICAgICAgICAgICAgICAgICBhW2tdID0gYVtsZXNzXTsKICAgICAgICAgICAgICAgICAgYVtsZXNzKytdID0gYVtncmVhdF07CiAgICAgICAgICAgICAgICAgIGFbZ3JlYXQtLV0gPSBhazsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIC8vIGFbZ3JlYXRdID09IHBpdm90MS4KICAgICAgICAgICAgICAgICAgYVtrXSA9IGFbZ3JlYXRdOwogICAgICAgICAgICAgICAgICBhW2dyZWF0LS1dID0gYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gVGhlIHNlY29uZCBwYXJ0aXRpb24gaGFzIG5vdyBiZWVuIGNsZWFyZWQgb2YgcGl2b3QgZWxlbWVudHMgYW5kIGxvb2tzCiAgICAgIC8vIGFzIGZvbGxvd3M6CiAgICAgIC8vIFsgICogIHwgID4gcGl2b3QxICYmIDwgcGl2b3QyICB8ICogXQogICAgICAvLyAgICAgICAgXiAgICAgICAgICAgICAgICAgICAgICBeCiAgICAgIC8vICAgICAgIGxlc3MgICAgICAgICAgICAgICAgICBncmVhdAogICAgICAvLyBTb3J0IHRoZSBzZWNvbmQgcGFydGl0aW9uIHVzaW5nIHJlY3Vyc2l2ZSBkZXNjZW50LgogICAgICBfZG9Tb3J0KGEsIGxlc3MsIGdyZWF0LCBjb21wYXJlKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRoZSBzZWNvbmQgcGFydGl0aW9uIGxvb2tzIGFzIGZvbGxvd3M6CiAgICAgIC8vIFsgICogIHwgID49IHBpdm90MSAmJiA8PSBwaXZvdDIgIHwgKiBdCiAgICAgIC8vICAgICAgICBeICAgICAgICAgICAgICAgICAgICAgICAgXgogICAgICAvLyAgICAgICBsZXNzICAgICAgICAgICAgICAgICAgICBncmVhdAogICAgICAvLyBTaW1wbHkgc29ydCBpdCBieSByZWN1cnNpdmUgZGVzY2VudC4KICAgICAgX2RvU29ydChhLCBsZXNzLCBncmVhdCwgY29tcGFyZSk7CiAgICB9CiAgfQp9CoGDAE5OPAEYAQQjA0wiA0UEDU4lMwEGRxsFThccFwVOIgY6KgQBBlAeBUQqBUAGUTgaBicEAQZMBho/Ny8NNAYEASE/LhUROhkNCBEGBAEmPzYBOCkfIDchIQEZGRkZGQE9IRMRDwYhExEPBiETEQ8GIRMRDwYhExEPBiETEQ8GIRMRDwYhExEPBiETEQ8GARYWAVAwFRUVARkaAUNEATwcGk8SCUFAQwlFFwkVMS8zLBcnIRgbHBoMEhEXDU1ITFBNSzgZLRwXSScYIyIeJB8VFRwfH003FQ4MCggNMRYkFgkiUE9RCUUXCRUxPjMsFy8fGxwaDBIRMSEbNB4ZJkkpGhcnMiAmIigjGSkjIxIXEA4MCggGAS9FS0kPGxodGwE6Pz5AATwpKwEcSRwOBgFPElBOKy4QCC8RCAFHCTEXIhcJIks+QgkVMDwxLBcvIBscGgwSETEiGzQfGSZJKRoXJjIgJiIoIxkpIyMSFxAODAoITxUuKSs8KA0wMCstLigGBAIBGGRhcnQ6X2ludGVybmFsL3NvcnQuZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW50ZXJuYWwvc3ltYm9sLmRhcnSSty8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX2ludGVybmFsOwoKLyoqCiAqIEltcGxlbWVudGF0aW9uIG9mIFtjb3JlLlN5bWJvbF0uICBUaGlzIGNsYXNzIHVzZXMgdGhlIHNhbWUgbmFtZSBhcwogKiBhIGNvcmUgY2xhc3Mgc28gYSB1c2VyIGNhbid0IHRlbGwgdGhlIGRpZmZlcmVuY2UuCiAqCiAqIFRoZSBwdXJwb3NlIG9mIHRoaXMgY2xhc3MgaXMgdG8gaGlkZSBbX25hbWVdIGZyb20gdXNlciBjb2RlLCBidXQKICogbWFrZSBpdCBhY2Nlc3NpYmxlIHRvIERhcnQgcGxhdGZvcm0gY29kZSB2aWEgdGhlIHN0YXRpYyBtZXRob2QKICogW2dldE5hbWVdLgogKi8KY2xhc3MgU3ltYm9sIGltcGxlbWVudHMgY29yZS5TeW1ib2wgewogIGZpbmFsIFN0cmluZyBfbmFtZTsKCiAgLyoqCiAgICogU291cmNlIG9mIFJlZ0V4cCBtYXRjaGluZyBEYXJ0IHJlc2VydmVkIHdvcmRzLgogICAqCiAgICogUmVzZXJ2ZWQgd29yZHMgYXJlIG5vdCBhbGxvd2VkIGFzIGlkZW50aWZpZXJzLgogICAqLwogIHN0YXRpYyBjb25zdCBTdHJpbmcgcmVzZXJ2ZWRXb3JkUkUgPQogICAgICByJyg/OmFzc2VydHxicmVha3xjKD86YSg/OnNlfHRjaCl8bGFzc3xvbig/OnN0fHRpbnVlKSl8ZCg/OmVmYXVsdHxvKXwnCiAgICAgIHInZSg/OmxzZXxudW18eHRlbmRzKXxmKD86YWxzZXxpbmFsKD86bHkpP3xvcil8aVtmbnNdfG4oPzpld3x1bGwpfCcKICAgICAgcidyZXQoPzpocm93fHVybil8cyg/OnVwZXJ8d2l0Y2gpfHQoPzpoKD86aXN8cm93KXxyKD86dWV8eSkpfCcKICAgICAgcid2KD86YXJ8b2lkKXx3KD86aGlsZXxpdGgpKSc7CiAgLyoqCiAgICogU291cmNlIG9mIFJlZ0V4cCBtYXRjaGluZyBhbnkgcHVibGljIGlkZW50aWZpZXIuCiAgICoKICAgKiBBIHB1YmxpYyBpZGVudGlmaWVyIGlzIGEgdmFsaWQgaWRlbnRpZmllciAobm90IGEgcmVzZXJ2ZWQgd29yZCkKICAgKiB0aGF0IGRvZXNuJ3Qgc3RhcnQgd2l0aCAnXycuCiAgICovCiAgc3RhdGljIGNvbnN0IFN0cmluZyBwdWJsaWNJZGVudGlmaWVyUkUgPQogICAgICByJyg/IScgJyRyZXNlcnZlZFdvcmRSRScgcidcYig/IVwkKSlbYS16QS1aJF1bXHckXSonOwogIC8qKgogICAqIFNvdXJjZSBvZiBSZWdFeHAgbWF0Y2hpbmcgYW55IGlkZW50aWZpZXIuCiAgICoKICAgKiBJdCBtYXRjaGVzIGlkZW50aWZpZXJzIGJ1dCBub3QgcmVzZXJ2ZWQgd29yZHMuIFRoZSBpZGVudGlmaWVycwogICAqIG1heSBzdGFydCB3aXRoICdfJy4KICAgKi8KICBzdGF0aWMgY29uc3QgU3RyaW5nIGlkZW50aWZpZXJSRSA9CiAgICAgIHInKD8hJyAnJHJlc2VydmVkV29yZFJFJyByJ1xiKD8hXCQpKVthLXpBLVokX11bXHckXSonOwogIC8qKgogICAqIFNvdXJjZSBvZiBSZWdFeHAgbWF0Y2hpbmcgYSBkZWNsYXJhYmxlIG9wZXJhdG9yIG5hbWVzLgogICAqCiAgICogVGhlIG9wZXJhdG9ycyB0aGF0IGNhbiBiZSBkZWNsYXJlZCB1c2luZyBgb3BlcmF0b3JgIGRlY2xhcmF0aW9ucyBhcmUKICAgKiBhbHNvIHRoZSBvbmx5IG9uZXMgYWxsb3dlZCBhcyBzeW1ib2xzLiBUaGUgbmFtZSBvZiB0aGUgb3BlcmF0b3JzIGlzCiAgICogdGhlIHNhbWUgYXMgdGhlIG9wZXJhdG9yIGl0c2VsZiBleGNlcHQgZm9yIHVuYXJ5IG1pbnVzLCB3aGVyZSB0aGUgbmFtZQogICAqIGlzICJ1bmFyeS0iLgogICAqLwogIHN0YXRpYyBjb25zdCBTdHJpbmcgb3BlcmF0b3JSRSA9CiAgICAgIHInKD86W1wtKyovJSZ8Xl18XFtcXT0/fD09fH4vP3w8Wzw9XT98Pls+PV0/fHVuYXJ5LSknOwoKICAvLyBHcmFtbWFyIGlmIHN5bWJvbHM6CiAgLy8gICAgc3ltYm9sIDo6PSBxdWFsaWZpZWROYW1lIHwgPGVtcHR5PgogIC8vICAgIHF1YWxpZmllZE5hbWUgOjo9IHB1YmxpY0lkZW50aWZpZXIgJy4nIHF1YWxpZmllZE5hbWUgfCBuYW1lCiAgLy8gICAgbmFtZSA6Oj0gcHVibGljSWRlbnRpZmllcgogIC8vICAgICAgICAgICB8IHB1YmxpY0lkZW50aWZpZXIgJz0nCiAgLy8gICAgICAgICAgIHwgb3BlcmF0b3IKICAvLyB3aGVyZSBwdWJsaWNJZGVudGlmaWVyIGlzIGFueSB2YWxpZCBpZGVudGlmaWVyIChub3QgYSByZXNlcnZlZCB3b3JkKQogIC8vIHRoYXQgaXNuJ3QgcHJpdmF0ZSAoZG9lc24ndCBzdGFydCB3aXRoICdfJykuCiAgLy8KICAvLyBSYWlscm9hZCBkaWFncmFtIG9mIHRoZSBhY2NlcHRlZCBncmFtbWFyOgogIC8vCiAgLy8gICAgLy0tLS0tLS0tLS0tLS0tLS1cCiAgLy8gICAgfCAgICAgICAgICAgICAgICB8CiAgLy8gICAgfCAgICAgICAgICAvLVsuXS0vICAgICAvLVs9XS1cCiAgLy8gICAgXCAgICAgICAgIC8gICAgICAgICAgIC8gICAgICAgXAogIC8vICAtLS0tLS0tW2lkXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+CiAgLy8gICAgICAgXCAgICAgICAgICAgICAgICAgICAgIC8KICAvLyAgICAgICAgXC0tLS0tLVtvcGVyYXRvcl0tLS0vCiAgLy8gICAgICAgICAgICBcICAgICAgICAgICAgICAvCiAgLy8gICAgICAgICAgICAgXC0tLS0tLS0tLS0tLS8KICAvLwoKICAvKioKICAgKiBSZWdFeHAgdGhhdCB2YWxpZGF0ZXMgYSBub24tZW1wdHkgbm9uLXByaXZhdGUgc3ltYm9sLgogICAqCiAgICogVGhlIGVtcHR5IHN5bWJvbCBpcyBoYW5kbGVkIGJlZm9yZSB0aGlzIHJlZ2V4cCBpcyB1c2VkLCBhbmQgaXMgbm90CiAgICogYWNjZXB0ZWQuCiAgICovCiAgc3RhdGljIGZpbmFsIFJlZ0V4cCBwdWJsaWNTeW1ib2xQYXR0ZXJuID0gbmV3IFJlZ0V4cCgKICAgICAgJ14oPzokb3BlcmF0b3JSRVwkfCRwdWJsaWNJZGVudGlmaWVyUkUoPzo9P1wkfFsuXSg/IVwkKSkpKz9cJCcpOwoKICAvLyBUaGUgZ3JhbW1hciBvZiBzeW1ib2xzIHRoYXQgbWF5IGJlIHByaXZhdGUgaXMgdGhlIHNhbWUgYXMgZm9yIHB1YmxpYwogIC8vIHN5bWJvbHMsIGV4Y2VwdCB0aGF0ICJwdWJsaWNJZGVudGlmaWVyIiBpcyByZXBsYWNlZCBieSAiaWRlbnRpZmllciIsCiAgLy8gd2hpY2ggbWF0Y2hlcyBhbnkgaWRlbnRpZmllci4KCiAgLyoqCiAgICogUmVnRXhwIHRoYXQgdmFsaWRhdGVzIGEgbm9uLWVtcHR5IHN5bWJvbC4KICAgKgogICAqIFByaXZhdGUgc3ltYm9scyBhcmUgYWNjZXB0ZWQuCiAgICoKICAgKiBUaGUgZW1wdHkgc3ltYm9sIGlzIGhhbmRsZWQgYmVmb3JlIHRoaXMgcmVnZXhwIGlzIHVzZWQsIGFuZCBpcyBub3QKICAgKiBhY2NlcHRlZC4KICAgKi8KICBzdGF0aWMgZmluYWwgUmVnRXhwIHN5bWJvbFBhdHRlcm4gPQogICAgICBuZXcgUmVnRXhwKCdeKD86JG9wZXJhdG9yUkVcJHwkaWRlbnRpZmllclJFKD86PT9cJHxbLl0oPyFcJCkpKSs/XCQnKTsKCiAgZXh0ZXJuYWwgY29uc3QgU3ltYm9sKFN0cmluZyBuYW1lKTsKCiAgLyoqCiAgICogUGxhdGZvcm0tcHJpdmF0ZSBtZXRob2QgdXNlZCBieSB0aGUgbWlycm9yIHN5c3RlbSB0byBjcmVhdGUKICAgKiBvdGhlcndpc2UgaW52YWxpZCBuYW1lcy4KICAgKi8KICBjb25zdCBTeW1ib2wudW52YWxpZGF0ZWQodGhpcy5fbmFtZSk7CgogIC8vIFRoaXMgaXMgY2FsbGVkIGJ5IGRhcnQyanMuCiAgU3ltYm9sLnZhbGlkYXRlZChTdHJpbmcgbmFtZSkgOiB0aGlzLl9uYW1lID0gdmFsaWRhdGVQdWJsaWNTeW1ib2wobmFtZSk7CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpID0+IG90aGVyIGlzIFN5bWJvbCAmJiBfbmFtZSA9PSBvdGhlci5fbmFtZTsKCiAgZXh0ZXJuYWwgaW50IGdldCBoYXNoQ29kZTsKCiAgZXh0ZXJuYWwgdG9TdHJpbmcoKTsKCiAgLy8vIFBsYXRmb3JtLXByaXZhdGUgYWNjZXNzb3Igd2hpY2ggY2Fubm90IGJlIGNhbGxlZCBmcm9tIHVzZXIgbGlicmFyaWVzLgogIHN0YXRpYyBTdHJpbmcgZ2V0TmFtZShTeW1ib2wgc3ltYm9sKSA9PiBzeW1ib2wuX25hbWU7CgogIHN0YXRpYyBTdHJpbmcgdmFsaWRhdGVQdWJsaWNTeW1ib2woU3RyaW5nIG5hbWUpIHsKICAgIGlmIChuYW1lLmlzRW1wdHkgfHwgcHVibGljU3ltYm9sUGF0dGVybi5oYXNNYXRjaChuYW1lKSkgcmV0dXJuIG5hbWU7CiAgICBpZiAobmFtZS5zdGFydHNXaXRoKCdfJykpIHsKICAgICAgLy8gVGhlcmUgbWF5IGJlIG90aGVyIHByaXZhdGUgcGFydHMgaW4gYSBxdWFsaWZpZWQgbmFtZSB0aGFuIHRoZSBmaXJzdAogICAgICAvLyBvbmUsIGJ1dCB0aGlzIGlzIGEgY29tbW9uIGNhc2UgdGhhdCBkZXNlcnZlcyBhIHNwZWNpZmljIGVycm9yCiAgICAgIC8vIG1lc3NhZ2UuCiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCciJG5hbWUiIGlzIGEgcHJpdmF0ZSBpZGVudGlmaWVyJyk7CiAgICB9CiAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignIiRuYW1lIiBpcyBub3QgYSB2YWxpZCAocXVhbGlmaWVkKSBzeW1ib2wgbmFtZScpOwogIH0KCiAgLyoqCiAgICogQ2hlY2tzIHdoZXRoZXIgbmFtZSBpcyBhIHZhbGlkIHN5bWJvbCBuYW1lLgogICAqCiAgICogVGhpcyB0ZXN0IGFsbG93cyBib3RoIHByaXZhdGUgYW5kIG5vbi1wcml2YXRlIHN5bWJvbHMuCiAgICovCiAgc3RhdGljIGJvb2wgaXNWYWxpZFN5bWJvbChTdHJpbmcgbmFtZSkgewogICAgcmV0dXJuIChuYW1lLmlzRW1wdHkgfHwgc3ltYm9sUGF0dGVybi5oYXNNYXRjaChuYW1lKSk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIGNvbXB1dGVVbm1hbmdsZWROYW1lKFN5bWJvbCBzeW1ib2wpOwp9CoCQAE5OPAEYAQRGNQNEQg4EJhYBBjQFNAYnTUpFJQY2BUUiBis8Bi8FRBkGJT0GPAVKSUwSBiM9ARkrRCImGkoyBS8FGxsnKCwjIiEgBQEGOwVIDwY4RwFKSiMBBi8FIwVIDwYmTAEmAQZBHgYoASBLAUYBHQEXAUw4ATRJIE1HEkIGTwQBBjEFPAYrOwQBPgIBGmRhcnQ6X2ludGVybmFsL3N5bWJvbC5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvc3ltYm9sX3BhdGNoLmRhcnSGgy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJpbnRlcm5hbF9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBTeW1ib2wgewogIEBwYXRjaAogIGNvbnN0IFN5bWJvbChTdHJpbmcgbmFtZSkgOiB0aGlzLl9uYW1lID0gbmFtZTsKCiAgQHBhdGNoCiAgdG9TdHJpbmcoKSA9PiAnU3ltYm9sKCIke2NvbXB1dGVVbm1hbmdsZWROYW1lKHRoaXMpfSIpJzsKCiAgQHBhdGNoCiAgc3RhdGljIFN0cmluZyBjb21wdXRlVW5tYW5nbGVkTmFtZShTeW1ib2wgc3ltYm9sKSB7CiAgICBTdHJpbmcgc3RyaW5nID0gU3ltYm9sLmdldE5hbWUoc3ltYm9sKTsKCiAgICAvLyBnZXQ6Zm9vIC0+IGZvbwogICAgLy8gc2V0OmZvbyAtPiBmb289CiAgICAvLyBnZXQ6X2Zvb0B4eHggLT4gX2ZvbwogICAgLy8gc2V0Ol9mb29AeHh4IC0+IF9mb289CiAgICAvLyBDbGFzcy5fY29uc3RydWN0b3JAeHh4IC0+IENsYXNzLl9jb25zdHJ1Y3RvcgogICAgLy8gX0NsYXNzQHh4eC5fY29uc3RydWN0b3JAeHh4IC0+IF9DbGFzcy5fY29uc3RydWN0b3IKICAgIC8vIGxpYi5fU0B4eHggd2l0aCBsaWIuX00xQHh4eCwgbGliLl9NMkB4eHggLT4gbGliLl9TIHdpdGggbGliLl9NMSwgbGliLl9NMgogICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGJvb2wgYWRkX3NldHRlcl9zdWZmaXggPSBmYWxzZTsKICAgIHZhciBwb3MgPSAwOwogICAgaWYgKHN0cmluZy5sZW5ndGggPj0gNCAmJiBzdHJpbmdbM10gPT0gJzonKSB7CiAgICAgIC8vIERyb3AgJ2dldDonIG9yICdzZXQ6JyBwcmVmaXguCiAgICAgIHBvcyA9IDQ7CiAgICAgIGlmIChzdHJpbmdbMF0gPT0gJ3MnKSB7CiAgICAgICAgYWRkX3NldHRlcl9zdWZmaXggPSB0cnVlOwogICAgICB9CiAgICB9CiAgICAvLyBTa2lwIGV2ZXJ5dGhpbmcgYmV0d2VlbiBBVCBhbmQgUEVSSU9ELCBTUEFDRSwgQ09NTUEgb3IgRU5ECiAgICBib29sIHNraXAgPSBmYWxzZTsKICAgIGZvciAoOyBwb3MgPCBzdHJpbmcubGVuZ3RoOyBwb3MrKykgewogICAgICB2YXIgY2hhciA9IHN0cmluZ1twb3NdOwogICAgICBpZiAoY2hhciA9PSAnQCcpIHsKICAgICAgICBza2lwID0gdHJ1ZTsKICAgICAgfSBlbHNlIGlmIChjaGFyID09ICcuJyB8fCBjaGFyID09ICcgJyB8fCBjaGFyID09ICcsJykgewogICAgICAgIHNraXAgPSBmYWxzZTsKICAgICAgfQogICAgICBpZiAoIXNraXApIHsKICAgICAgICByZXN1bHQud3JpdGUoY2hhcik7CiAgICAgIH0KICAgIH0KICAgIGlmIChhZGRfc2V0dGVyX3N1ZmZpeCkgewogICAgICByZXN1bHQud3JpdGUoJz0nKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKICB9CgogIEBwYXRjaAogIGludCBnZXQgaGFzaENvZGUgewogICAgY29uc3QgYXJiaXRyYXJ5UHJpbWUgPSA2NjQ1OTc7CiAgICByZXR1cm4gMHgxZmZmZmZmZiAmIChhcmJpdHJhcnlQcmltZSAqIF9uYW1lLmhhc2hDb2RlKTsKICB9Cn0KPgBOTjwBIgEHDwkxAQk7AQk2LAEWFxwdNDpQLiQRMicPHiIIBkIXKR4ZFT4WCBMcCAYdGQYeBAEJFSM7BAIBJmRhcnQ6X2ludGVybmFsLXBhdGNoL3N5bWJvbF9wYXRjaC5kYXJ0NW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pbnRlcm5hbC9saW5rZWRfbGlzdC5kYXJ0jMUvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll9pbnRlcm5hbDsKCi8vLyBBIHJ1ZGltZW50YXJ5IGxpbmtlZCBsaXN0LgpjbGFzcyBMaW5rZWRMaXN0PFQgZXh0ZW5kcyBMaW5rZWRMaXN0RW50cnk8VD4+IGV4dGVuZHMgSXRlcmFibGVCYXNlPFQ+IHsKICBUIGZpcnN0OwogIFQgbGFzdDsKICBpbnQgbGVuZ3RoID0gMDsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBsZW5ndGggPT0gMDsKCiAgLyoqCiAgICogQWRkcyBbbmV3TGFzdF0gdG8gdGhlIGVuZCBvZiB0aGlzIGxpbmtlZCBsaXN0LgogICAqLwogIHZvaWQgYWRkKFQgbmV3TGFzdCkgewogICAgYXNzZXJ0KG5ld0xhc3QuX25leHQgPT0gbnVsbCAmJiBuZXdMYXN0Ll9wcmV2aW91cyA9PSBudWxsKTsKICAgIGlmIChsYXN0ICE9IG51bGwpIHsKICAgICAgYXNzZXJ0KGxhc3QuX25leHQgPT0gbnVsbCk7CiAgICAgIGxhc3QuX25leHQgPSBuZXdMYXN0OwogICAgfSBlbHNlIHsKICAgICAgZmlyc3QgPSBuZXdMYXN0OwogICAgfQogICAgbmV3TGFzdC5fcHJldmlvdXMgPSBsYXN0OwogICAgbGFzdCA9IG5ld0xhc3Q7CiAgICBsYXN0Ll9saXN0ID0gdGhpczsKICAgIGxlbmd0aCsrOwogIH0KCiAgLyoqCiAgICogQWRkcyBbbmV3Rmlyc3RdIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBsaW5rZWQgbGlzdC4KICAgKi8KICB2b2lkIGFkZEZpcnN0KFQgbmV3Rmlyc3QpIHsKICAgIGlmIChmaXJzdCAhPSBudWxsKSB7CiAgICAgIGFzc2VydChmaXJzdC5fcHJldmlvdXMgPT0gbnVsbCk7CiAgICAgIGZpcnN0Ll9wcmV2aW91cyA9IG5ld0ZpcnN0OwogICAgfSBlbHNlIHsKICAgICAgbGFzdCA9IG5ld0ZpcnN0OwogICAgfQogICAgbmV3Rmlyc3QuX25leHQgPSBmaXJzdDsKICAgIGZpcnN0ID0gbmV3Rmlyc3Q7CiAgICBmaXJzdC5fbGlzdCA9IHRoaXM7CiAgICBsZW5ndGgrKzsKICB9CgogIC8qKgogICAqIFJlbW92ZXMgdGhlIGdpdmVuIFtub2RlXSBmcm9tIHRoaXMgbGlzdC4KICAgKgogICAqIElmIHRoZSBlbnRyeSBpcyBub3QgaW4gdGhpcyBsaW5rZWQgbGlzdCBub3RoaW5nIGhhcHBlbnMuCiAgICoKICAgKiBBbHNvIHNlZSBbTGlua2VkTGlzdEVudHJ5LnVubGlua10uCiAgICovCiAgdm9pZCByZW1vdmUoVCBub2RlKSB7CiAgICBpZiAobm9kZS5fbGlzdCAhPSB0aGlzKSByZXR1cm47CiAgICBsZW5ndGgtLTsKICAgIGlmIChub2RlLl9wcmV2aW91cyA9PSBudWxsKSB7CiAgICAgIGFzc2VydChpZGVudGljYWwobm9kZSwgZmlyc3QpKTsKICAgICAgZmlyc3QgPSBub2RlLl9uZXh0OwogICAgfSBlbHNlIHsKICAgICAgbm9kZS5fcHJldmlvdXMuX25leHQgPSBub2RlLl9uZXh0OwogICAgfQogICAgaWYgKG5vZGUuX25leHQgPT0gbnVsbCkgewogICAgICBhc3NlcnQoaWRlbnRpY2FsKG5vZGUsIGxhc3QpKTsKICAgICAgbGFzdCA9IG5vZGUuX3ByZXZpb3VzOwogICAgfSBlbHNlIHsKICAgICAgbm9kZS5fbmV4dC5fcHJldmlvdXMgPSBub2RlLl9wcmV2aW91czsKICAgIH0KICAgIG5vZGUuX25leHQgPSBub2RlLl9wcmV2aW91cyA9IG51bGw7CiAgICBub2RlLl9saXN0ID0gbnVsbDsKICB9CgogIEl0ZXJhdG9yPFQ+IGdldCBpdGVyYXRvciA9PiBuZXcgX0xpbmtlZExpc3RJdGVyYXRvcjxUPih0aGlzKTsKfQoKY2xhc3MgTGlua2VkTGlzdEVudHJ5PFQgZXh0ZW5kcyBMaW5rZWRMaXN0RW50cnk8VD4+IHsKICBUIF9uZXh0OwogIFQgX3ByZXZpb3VzOwogIExpbmtlZExpc3Q8VD4gX2xpc3Q7CgogIC8qKgogICAqIFVubGlua3MgdGhlIGVsZW1lbnQgZnJvbSBpdHMgbGlua2VkIGxpc3QuCiAgICoKICAgKiBJZiB0aGUgZW50cnkgaXMgbm90IGluIGEgbGlua2VkIGxpc3QsIGRvZXMgbm90aGluZy4gT3RoZXJ3aXNlLCB0aGlzCiAgICogaXMgZXF1aXZhbGVudCB0byBjYWxsaW5nIFtMaW5rZWRMaXN0LnJlbW92ZV0gb24gdGhlIGxpc3QgdGhpcyBlbnRyeQogICAqIGlzIGN1cnJlbnRseSBpbi4KICAgKi8KICB2b2lkIHVubGluaygpIHsKICAgIGlmIChfbGlzdCA9PSBudWxsKSByZXR1cm47CiAgICBfbGlzdC5yZW1vdmUodGhpcyk7CiAgfQp9CgpjbGFzcyBfTGlua2VkTGlzdEl0ZXJhdG9yPFQgZXh0ZW5kcyBMaW5rZWRMaXN0RW50cnk8VD4+IGltcGxlbWVudHMgSXRlcmF0b3I8VD4gewogIC8vLyBUaGUgY3VycmVudCBlbGVtZW50IG9mIHRoZSBpdGVyYXRvci4KICAvLyBUaGlzIGZpZWxkIGlzIHdyaXRlYWJsZSwgYnV0IHNob3VsZCBvbmx5IHJlYWQgYnkgdXNlcnMgb2YgdGhpcyBjbGFzcy4KICBUIGN1cnJlbnQ7CgogIC8vLyBUaGUgbGlzdCB0aGUgaXRlcmF0b3IgaXRlcmF0ZXMgb3Zlci4KICAvLy8KICAvLy8gU2V0IHRvIFtudWxsXSBpZiB0aGUgcHJvdmlkZWQgbGlzdCB3YXMgZW1wdHkgKGluZGljYXRpbmcgdGhhdCB0aGVyZSB3ZXJlCiAgLy8vIG5vIGVudHJpZXMgdG8gaXRlcmF0ZSBvdmVyKS4KICAvLy8KICAvLy8gU2V0IHRvIFtudWxsXSBhcyBzb29uIGFzIFttb3ZlTmV4dF0gd2FzIGludm9rZWQgKGluZGljYXRpbmcgdGhhdCB0aGUKICAvLy8gaXRlcmF0b3IgaGFzIHRvIHdvcmsgd2l0aCBbY3VycmVudF0gZnJvbSBub3cgb24uCiAgTGlua2VkTGlzdDxUPiBfbGlzdDsKCiAgX0xpbmtlZExpc3RJdGVyYXRvcih0aGlzLl9saXN0KSB7CiAgICBpZiAoX2xpc3QubGVuZ3RoID09IDApIF9saXN0ID0gbnVsbDsKICB9CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICAvLyBjdXJyZW50IGlzIG51bGwgaWYgdGhlIGl0ZXJhdG9yIGhhc24ndCBzdGFydGVkIGl0ZXJhdGluZywgb3IgaWYgdGhlCiAgICAvLyBpdGVyYXRpb24gaXMgZmluaXNoZWQuIEluIHRoZSBmaXJzdCBjYXNlLCB0aGUgW19saXN0XSBmaWVsZCBpcyBub3QgbnVsbC4KICAgIGlmIChjdXJyZW50ID09IG51bGwpIHsKICAgICAgaWYgKF9saXN0ID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgYXNzZXJ0KF9saXN0Lmxlbmd0aCA+IDApOwogICAgICBjdXJyZW50ID0gX2xpc3QuZmlyc3Q7CiAgICAgIF9saXN0ID0gbnVsbDsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBjdXJyZW50ID0gY3VycmVudC5fbmV4dDsKICAgIHJldHVybiBjdXJyZW50ICE9IG51bGw7CiAgfQp9CoCAAE5OPAEYAR9JCwoSASMBBjQGGEAYIhwNFwYeFBcOBAEGOwYeGSciDRcGHBYYDgQBBi4FPgUoBhgkDiImGg0pBh4lHQ0tBigXBAFAAgE2Cw8XAQYvBUlJFgYSHxgEAgFRK0sNASsGTyMGSzcXASQpBAEUS1AbJyAdFBMGHRwEAgEfZGFydDpfaW50ZXJuYWwvbGlua2VkX2xpc3QuZGFydDBvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL3ByaW50X3BhdGNoLmRhcnSC/C8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJpbnRlcm5hbF9wYXRjaC5kYXJ0IjsKCi8vIEEgcHJpbnQtY2xvc3VyZSBnZXRzIGEgU3RyaW5nIHRoYXQgc2hvdWxkIGJlIHByaW50ZWQuIEluIGdlbmVyYWwgdGhlCi8vIHN0cmluZyBpcyBhIGxpbmUsIGJ1dCBpdCBtYXkgY29udGFpbiAiXG4iIGNoYXJhY3RlcnMuCnR5cGVkZWYgdm9pZCBfUHJpbnRDbG9zdXJlKFN0cmluZyBsaW5lKTsKCkBwYXRjaAp2b2lkIHByaW50VG9Db25zb2xlKFN0cmluZyBsaW5lKSB7CiAgX3ByaW50Q2xvc3VyZShsaW5lKTsKfQoKdm9pZCBfdW5zdXBwb3J0ZWRQcmludChTdHJpbmcgbGluZSkgewogIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCIncHJpbnQnIGlzIG5vdCBzdXBwb3J0ZWQiKTsKfQoKLy8gX3ByaW50Q2xvc3VyZSBjYW4gYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIGVtYmVkZGVyIHRvIHN1cHBseSBhIGRpZmZlcmVudAovLyBwcmludCBpbXBsZW1lbnRhdGlvbi4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpfUHJpbnRDbG9zdXJlIF9wcmludENsb3N1cmUgPSBfdW5zdXBwb3J0ZWRQcmludDsKGQBOTjwBIgFIOSkBByMXAgEmOgIBShkaMQElZGFydDpfaW50ZXJuYWwtcGF0Y2gvcHJpbnRfcGF0Y2guZGFydC9vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW50ZXJuYWwvcHJpbnQuZGFydII1Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5faW50ZXJuYWw7CgovKioKICogVGhpcyBmdW5jdGlvbiBpcyBzZXQgYnkgdGhlIGZpcnN0IGFsbG9jYXRpb24gb2YgYSBab25lLgogKgogKiBPbmNlIHRoZSBmdW5jdGlvbiBpcyBzZXQgdGhlIGNvcmUgYHByaW50YCBmdW5jdGlvbiBjYWxscyB0aGlzIGNsb3N1cmUgaW5zdGVhZAogKiBvZiBbcHJpbnRUb0NvbnNvbGVdLgogKgogKiBUaGlzIGRlY291cGxlcyB0aGUgY29yZSBsaWJyYXJ5IGZyb20gdGhlIGFzeW5jIGxpYnJhcnkuCiAqLwp2b2lkIEZ1bmN0aW9uKFN0cmluZykgcHJpbnRUb1pvbmUgPSBudWxsOwoKZXh0ZXJuYWwgdm9pZCBwcmludFRvQ29uc29sZShTdHJpbmcgbGluZSk7ChMATk48ARgBBDsDURgDOwQqASsBGWRhcnQ6X2ludGVybmFsL3ByaW50LmRhcnQwb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lzb2xhdGUvaXNvbGF0ZS5kYXJ0wAB3di8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovKioKICogQ29uY3VycmVudCBwcm9ncmFtbWluZyB1c2luZyBfaXNvbGF0ZXNfOgogKiBpbmRlcGVuZGVudCB3b3JrZXJzIHRoYXQgYXJlIHNpbWlsYXIgdG8gdGhyZWFkcwogKiBidXQgZG9uJ3Qgc2hhcmUgbWVtb3J5LAogKiBjb21tdW5pY2F0aW5nIG9ubHkgdmlhIG1lc3NhZ2VzLgogKgogKiBUbyB1c2UgdGhpcyBsaWJyYXJ5IGluIHlvdXIgY29kZToKICoKICogICAgIGltcG9ydCAnZGFydDppc29sYXRlJzsKICoKICoge0BjYXRlZ29yeSBWTX0KICovCmxpYnJhcnkgZGFydC5pc29sYXRlOwoKaW1wb3J0ICJkYXJ0OmFzeW5jIjsKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgc2hvdyBTaW5jZTsKaW1wb3J0ICJkYXJ0OnR5cGVkX2RhdGEiIHNob3cgQnl0ZUJ1ZmZlciwgVHlwZWREYXRhLCBVaW50OExpc3Q7CgpwYXJ0ICJjYXBhYmlsaXR5LmRhcnQiOwoKLyoqCiAqIFRocm93biB3aGVuIGFuIGlzb2xhdGUgY2Fubm90IGJlIGNyZWF0ZWQuCiAqLwpjbGFzcyBJc29sYXRlU3Bhd25FeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb24gewogIC8qKiBFcnJvciBtZXNzYWdlIHJlcG9ydGVkIGJ5IHRoZSBzcGF3biBvcGVyYXRpb24uICovCiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIElzb2xhdGVTcGF3bkV4Y2VwdGlvbih0aGlzLm1lc3NhZ2UpOwogIFN0cmluZyB0b1N0cmluZygpID0+ICJJc29sYXRlU3Bhd25FeGNlcHRpb246ICRtZXNzYWdlIjsKfQoKLyoqCiAqIEFuIGlzb2xhdGVkIERhcnQgZXhlY3V0aW9uIGNvbnRleHQuCiAqCiAqIEFsbCBEYXJ0IGNvZGUgcnVucyBpbiBhbiBpc29sYXRlLCBhbmQgY29kZSBjYW4gYWNjZXNzIGNsYXNzZXMgYW5kIHZhbHVlcwogKiBvbmx5IGZyb20gdGhlIHNhbWUgaXNvbGF0ZS4gRGlmZmVyZW50IGlzb2xhdGVzIGNhbiBjb21tdW5pY2F0ZSBieSBzZW5kaW5nCiAqIHZhbHVlcyB0aHJvdWdoIHBvcnRzIChzZWUgW1JlY2VpdmVQb3J0XSwgW1NlbmRQb3J0XSkuCiAqCiAqIEFuIGBJc29sYXRlYCBvYmplY3QgaXMgYSByZWZlcmVuY2UgdG8gYW4gaXNvbGF0ZSwgdXN1YWxseSBkaWZmZXJlbnQgZnJvbQogKiB0aGUgY3VycmVudCBpc29sYXRlLgogKiBJdCByZXByZXNlbnRzLCBhbmQgY2FuIGJlIHVzZWQgdG8gY29udHJvbCwgdGhlIG90aGVyIGlzb2xhdGUuCiAqCiAqIFdoZW4gc3Bhd25pbmcgYSBuZXcgaXNvbGF0ZSwgdGhlIHNwYXduaW5nIGlzb2xhdGUgcmVjZWl2ZXMgYW4gYElzb2xhdGVgCiAqIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5ldyBpc29sYXRlIHdoZW4gdGhlIHNwYXduIG9wZXJhdGlvbiBzdWNjZWVkcy4KICoKICogSXNvbGF0ZXMgcnVuIGNvZGUgaW4gaXRzIG93biBldmVudCBsb29wLCBhbmQgZWFjaCBldmVudCBtYXkgcnVuIHNtYWxsZXIgdGFza3MKICogaW4gYSBuZXN0ZWQgbWljcm90YXNrIHF1ZXVlLgogKgogKiBBbiBgSXNvbGF0ZWAgb2JqZWN0IGFsbG93cyBvdGhlciBpc29sYXRlcyB0byBjb250cm9sIHRoZSBldmVudCBsb29wCiAqIG9mIHRoZSBpc29sYXRlIHRoYXQgaXQgcmVwcmVzZW50cywgYW5kIHRvIGluc3BlY3QgdGhlIGlzb2xhdGUsCiAqIGZvciBleGFtcGxlIGJ5IHBhdXNpbmcgdGhlIGlzb2xhdGUgb3IgYnkgZ2V0dGluZyBldmVudHMgd2hlbiB0aGUgaXNvbGF0ZQogKiBoYXMgYW4gdW5jYXVnaHQgZXJyb3IuCiAqCiAqIFRoZSBbY29udHJvbFBvcnRdIGlkZW50aWZpZXMgYW5kIGdpdmVzIGFjY2VzcyB0byBjb250cm9sbGluZyB0aGUgaXNvbGF0ZSwKICogYW5kIHRoZSBbcGF1c2VDYXBhYmlsaXR5XSBhbmQgW3Rlcm1pbmF0ZUNhcGFiaWxpdHldIGd1YXJkIGFjY2VzcwogKiB0byBzb21lIGNvbnRyb2wgb3BlcmF0aW9ucy4KICogRm9yIGV4YW1wbGUsIGNhbGxpbmcgW3BhdXNlXSBvbiBhbiBgSXNvbGF0ZWAgb2JqZWN0IGNyZWF0ZWQgd2l0aG91dCBhCiAqIFtwYXVzZUNhcGFiaWxpdHldLCBoYXMgbm8gZWZmZWN0LgogKgogKiBUaGUgYElzb2xhdGVgIG9iamVjdCBwcm92aWRlZCBieSBhIHNwYXduIG9wZXJhdGlvbiB3aWxsIGhhdmUgdGhlCiAqIGNvbnRyb2wgcG9ydCBhbmQgY2FwYWJpbGl0aWVzIG5lZWRlZCB0byBjb250cm9sIHRoZSBpc29sYXRlLgogKiBOZXcgaXNvbGF0ZSBvYmplY3RzIGNhbiBiZSBjcmVhdGVkIHdpdGhvdXQgc29tZSBvZiB0aGVzZSBjYXBhYmlsaXRpZXMKICogaWYgbmVjZXNzYXJ5LCB1c2luZyB0aGUgW0lzb2xhdGUuSXNvbGF0ZV0gY29uc3RydWN0b3IuCiAqCiAqIEFuIGBJc29sYXRlYCBvYmplY3QgY2Fubm90IGJlIHNlbnQgb3ZlciBhIGBTZW5kUG9ydGAsIGJ1dCB0aGUgY29udHJvbCBwb3J0CiAqIGFuZCBjYXBhYmlsaXRpZXMgY2FuIGJlIHNlbnQsIGFuZCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYSBuZXcgZnVuY3Rpb25pbmcKICogYElzb2xhdGVgIG9iamVjdCBpbiB0aGUgcmVjZWl2aW5nIHBvcnQncyBpc29sYXRlLgogKi8KY2xhc3MgSXNvbGF0ZSB7CiAgLyoqIEFyZ3VtZW50IHRvIGBwaW5nYCBhbmQgYGtpbGxgOiBBc2sgZm9yIGltbWVkaWF0ZSBhY3Rpb24uICovCiAgc3RhdGljIGNvbnN0IGludCBpbW1lZGlhdGUgPSAwOwogIC8qKiBBcmd1bWVudCB0byBgcGluZ2AgYW5kIGBraWxsYDogQXNrIGZvciBhY3Rpb24gYmVmb3JlIHRoZSBuZXh0IGV2ZW50LiAqLwogIHN0YXRpYyBjb25zdCBpbnQgYmVmb3JlTmV4dEV2ZW50ID0gMTsKCiAgLyoqCiAgICogQ29udHJvbCBwb3J0IHVzZWQgdG8gc2VuZCBjb250cm9sIG1lc3NhZ2VzIHRvIHRoZSBpc29sYXRlLgogICAqCiAgICogVGhlIGNvbnRyb2wgcG9ydCBpZGVudGlmaWVzIHRoZSBpc29sYXRlLgogICAqCiAgICogQW4gYElzb2xhdGVgIG9iamVjdCBhbGxvd3Mgc2VuZGluZyBjb250cm9sIG1lc3NhZ2VzCiAgICogdGhyb3VnaCB0aGUgY29udHJvbCBwb3J0LgogICAqCiAgICogU29tZSBjb250cm9sIG1lc3NhZ2VzIHJlcXVpcmUgYSBzcGVjaWZpYyBjYXBhYmlsaXR5IHRvIGJlIHBhc3NlZCBhbG9uZwogICAqIHdpdGggdGhlIG1lc3NhZ2UgKHNlZSBbcGF1c2VDYXBhYmlsaXR5XSBhbmQgW3Rlcm1pbmF0ZUNhcGFiaWxpdHldKSwKICAgKiBvdGhlcndpc2UgdGhlIG1lc3NhZ2UgaXMgaWdub3JlZCBieSB0aGUgaXNvbGF0ZS4KICAgKi8KICBmaW5hbCBTZW5kUG9ydCBjb250cm9sUG9ydDsKCiAgLyoqCiAgICogQ2FwYWJpbGl0eSBncmFudGluZyB0aGUgYWJpbGl0eSB0byBwYXVzZSB0aGUgaXNvbGF0ZS4KICAgKgogICAqIFRoaXMgY2FwYWJpbGl0eSBpcyByZXF1aXJlZCBieSBbcGF1c2VdLgogICAqIElmIHRoZSBjYXBhYmlsaXR5IGlzIGBudWxsYCwgb3IgaWYgaXQgaXMgbm90IHRoZSBjb3JyZWN0IHBhdXNlIGNhcGFiaWxpdHkKICAgKiBvZiB0aGUgaXNvbGF0ZSBpZGVudGlmaWVkIGJ5IFtjb250cm9sUG9ydF0sCiAgICogdGhlbiBjYWxscyB0byBbcGF1c2VdIHdpbGwgaGF2ZSBubyBlZmZlY3QuCiAgICoKICAgKiBJZiB0aGUgaXNvbGF0ZSBpcyBzcGF3bmVkIGluIGEgcGF1c2VkIHN0YXRlLCB1c2UgdGhpcyBjYXBhYmlsaXR5IGFzCiAgICogYXJndW1lbnQgdG8gdGhlIFtyZXN1bWVdIG1ldGhvZCBpbiBvcmRlciB0byByZXN1bWUgdGhlIHBhdXNlZCBpc29sYXRlLgogICAqLwogIGZpbmFsIENhcGFiaWxpdHkgcGF1c2VDYXBhYmlsaXR5OwoKICAvKioKICAgKiBDYXBhYmlsaXR5IGdyYW50aW5nIHRoZSBhYmlsaXR5IHRvIHRlcm1pbmF0ZSB0aGUgaXNvbGF0ZS4KICAgKgogICAqIFRoaXMgY2FwYWJpbGl0eSBpcyByZXF1aXJlZCBieSBba2lsbF0gYW5kIFtzZXRFcnJvcnNGYXRhbF0uCiAgICogSWYgdGhlIGNhcGFiaWxpdHkgaXMgYG51bGxgLCBvciBpZiBpdCBpcyBub3QgdGhlIGNvcnJlY3QgdGVybWluYXRpb24KICAgKiBjYXBhYmlsaXR5IG9mIHRoZSBpc29sYXRlIGlkZW50aWZpZWQgYnkgW2NvbnRyb2xQb3J0XSwKICAgKiB0aGVuIGNhbGxzIHRvIHRob3NlIG1ldGhvZHMgd2lsbCBoYXZlIG5vIGVmZmVjdC4KICAgKi8KICBmaW5hbCBDYXBhYmlsaXR5IHRlcm1pbmF0ZUNhcGFiaWxpdHk7CgogIC8qKgogICAqIFRoZSBuYW1lIG9mIHRoZSBbSXNvbGF0ZV0gZGlzcGxheWVkIGZvciBkZWJ1ZyBwdXJwb3Nlcy4KICAgKgogICAqIFRoaXMgY2FuIGJlIHNldCB1c2luZyB0aGUgYGRlYnVnTmFtZWAgcGFyYW1ldGVyIGluIFtzcGF3bl0gYW5kIFtzcGF3blVyaV0uCiAgICoKICAgKiBUaGlzIG5hbWUgZG9lcyBub3QgdW5pcXVlbHkgaWRlbnRpZnkgYW4gaXNvbGF0ZS4gTXVsdGlwbGUgaXNvbGF0ZXMgaW4gdGhlCiAgICogc2FtZSBwcm9jZXNzIG1heSBoYXZlIHRoZSBzYW1lIGBkZWJ1Z05hbWVgLgogICAqCiAgICogRm9yIGEgZ2l2ZW4gaXNvbGF0ZSwgdGhpcyB2YWx1ZSB3aWxsIGJlIHRoZSBzYW1lIGFzIHRoZSB2YWx1ZXMgcmV0dXJuZWQgYnkKICAgKiBgRGFydF9EZWJ1Z05hbWVgIGluIHRoZSBDIGVtYmVkZGluZyBBUEkgYW5kIHRoZSBgZGVidWdOYW1lYCBwcm9wZXJ0eSBpbgogICAqIFtJc29sYXRlTWlycm9yXS4KICAgKi8KICBAU2luY2UoIjIuMyIpCiAgZXh0ZXJuYWwgU3RyaW5nIGdldCBkZWJ1Z05hbWU7CgogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBbSXNvbGF0ZV0gb2JqZWN0IHdpdGggYSByZXN0cmljdGVkIHNldCBvZiBjYXBhYmlsaXRpZXMuCiAgICoKICAgKiBUaGUgcG9ydCBzaG91bGQgYmUgYSBjb250cm9sIHBvcnQgZm9yIGFuIGlzb2xhdGUsIGFzIHRha2VuIGZyb20KICAgKiBhbm90aGVyIGBJc29sYXRlYCBvYmplY3QuCiAgICoKICAgKiBUaGUgY2FwYWJpbGl0aWVzIHNob3VsZCBiZSB0aGUgc3Vic2V0IG9mIHRoZSBjYXBhYmlsaXRpZXMgdGhhdCBhcmUKICAgKiBhdmFpbGFibGUgdG8gdGhlIG9yaWdpbmFsIGlzb2xhdGUuCiAgICogQ2FwYWJpbGl0aWVzIG9mIGFuIGlzb2xhdGUgYXJlIGxvY2tlZCB0byB0aGF0IGlzb2xhdGUsIGFuZCBoYXZlIG5vIGVmZmVjdAogICAqIGFueXdoZXJlIGVsc2UsIHNvIHRoZSBjYXBhYmlsaXRpZXMgc2hvdWxkIGNvbWUgZnJvbSB0aGUgc2FtZSBpc29sYXRlIGFzCiAgICogdGhlIGNvbnRyb2wgcG9ydC4KICAgKgogICAqIENhbiBhbHNvIGJlIHVzZWQgdG8gY3JlYXRlIGFuIFtJc29sYXRlXSBvYmplY3QgZnJvbSBhIGNvbnRyb2wgcG9ydCwgYW5kCiAgICogYW55IGF2YWlsYWJsZSBjYXBhYmlsaXRpZXMsIHRoYXQgaGF2ZSBiZWVuIHNlbnQgdGhyb3VnaCBhIFtTZW5kUG9ydF0uCiAgICoKICAgKiBFeGFtcGxlOgogICAqIGBgYGRhcnQKICAgKiBJc29sYXRlIGlzb2xhdGUgPSBmaW5kU29tZUlzb2xhdGUoKTsKICAgKiBJc29sYXRlIHJlc3RyaWN0ZWRJc29sYXRlID0gbmV3IElzb2xhdGUoaXNvbGF0ZS5jb250cm9sUG9ydCk7CiAgICogdW50cnVzdGVkQ29kZShyZXN0cmljdGVkSXNvbGF0ZSk7CiAgICogYGBgCiAgICogVGhpcyBleGFtcGxlIGNyZWF0ZXMgYSBuZXcgYElzb2xhdGVgIG9iamVjdCB0aGF0IGNhbm5vdCBiZSB1c2VkIHRvCiAgICogcGF1c2Ugb3IgdGVybWluYXRlIHRoZSBpc29sYXRlLiBBbGwgdGhlIHVudHJ1c3RlZCBjb2RlIGNhbiBkbyBpcyB0bwogICAqIGluc3BlY3QgdGhlIGlzb2xhdGUgYW5kIHNlZSB1bmNhdWdodCBlcnJvcnMgb3Igd2hlbiBpdCB0ZXJtaW5hdGVzLgogICAqLwogIElzb2xhdGUodGhpcy5jb250cm9sUG9ydCwge3RoaXMucGF1c2VDYXBhYmlsaXR5LCB0aGlzLnRlcm1pbmF0ZUNhcGFiaWxpdHl9KTsKCiAgLyoqCiAgICogUmV0dXJuIGFuIFtJc29sYXRlXSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IGlzb2xhdGUuCiAgICoKICAgKiBUaGUgY3VycmVudCBpc29sYXRlIGZvciBjb2RlIHVzaW5nIFtjdXJyZW50XQogICAqIGlzIHRoZSBpc29sYXRlIHJ1bm5pbmcgdGhlIGNvZGUuCiAgICoKICAgKiBUaGUgaXNvbGF0ZSBvYmplY3QgcHJvdmlkZXMgdGhlIGNhcGFiaWxpdGllcyByZXF1aXJlZCB0byBpbnNwZWN0LAogICAqIHBhdXNlIG9yIGtpbGwgdGhlIGlzb2xhdGUsIGFuZCBhbGxvd3MgZ3JhbnRpbmcgdGhlc2UgY2FwYWJpbGl0aWVzCiAgICogdG8gb3RoZXJzLgogICAqCiAgICogSXQgaXMgcG9zc2libGUgdG8gcGF1c2UgdGhlIGN1cnJlbnQgaXNvbGF0ZSwgYnV0IGRvaW5nIHNvICp3aXRob3V0KgogICAqIGZpcnN0IHBhc3NpbmcgdGhlIGFiaWxpdHkgdG8gcmVzdW1lIGl0IGFnYWluIHRvIGFub3RoZXIgaXNvbGF0ZSwKICAgKiBpcyBhIHN1cmUgd2F5IHRvIGhhbmcgeW91ciBwcm9ncmFtLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBJc29sYXRlIGdldCBjdXJyZW50OwoKICAvKioKICAgKiBUaGUgbG9jYXRpb24gb2YgdGhlIHBhY2thZ2UgY29uZmlndXJhdGlvbiBvZiB0aGUgY3VycmVudCBpc29sYXRlLCBpZiBhbnkuCiAgICoKICAgKiBUaGlzIGdldHRlciByZXR1cm5zIGBudWxsYCwgYXMgdGhlIGBwYWNrYWdlcy9gIGRpcmVjdG9yeSBpcyBub3Qgc3VwcG9ydGVkCiAgICogaW4gRGFydCAyLgogICAqLwogIEBEZXByZWNhdGVkKCdwYWNrYWdlcy8gZGlyZWN0b3J5IHJlc29sdXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBEYXJ0IDIuJykKICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPFVyaT4gZ2V0IHBhY2thZ2VSb290OwoKICAvKioKICAgKiBUaGUgcGFja2FnZSByb290IG9mIHRoZSBjdXJyZW50IGlzb2xhdGUsIGlmIGFueS4KICAgKgogICAqIElmIHRoZSBpc29sYXRlIGlzIHVzaW5nIGEgW3BhY2thZ2VSb290XSBvciB0aGUgaXNvbGF0ZSBoYXMgbm90IGJlZW4KICAgKiBzZXR1cCBmb3IgcGFja2FnZSByZXNvbHV0aW9uLCB0aGlzIGdldHRlciByZXR1cm5zIGBudWxsYCwgb3RoZXJ3aXNlIGl0CiAgICogcmV0dXJucyB0aGUgcGFja2FnZSBjb25maWcgVVJJLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8VXJpPiBnZXQgcGFja2FnZUNvbmZpZzsKCiAgLyoqCiAgICogTWFwcyBhIHBhY2thZ2U6IFVSSSB0byBhIG5vbi1wYWNrYWdlIFVyaS4KICAgKgogICAqIElmIHRoZXJlIGlzIG5vIHZhbGlkIG1hcHBpbmcgZnJvbSB0aGUgcGFja2FnZTogVVJJIGluIHRoZSBjdXJyZW50CiAgICogaXNvbGF0ZSwgdGhlbiB0aGlzIGNhbGwgcmV0dXJucyBgbnVsbGAuIE5vbi1wYWNrYWdlOiBVUklzIGFyZQogICAqIHJldHVybmVkIHVubW9kaWZpZWQuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxVcmk+IHJlc29sdmVQYWNrYWdlVXJpKFVyaSBwYWNrYWdlVXJpKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbmQgc3Bhd25zIGFuIGlzb2xhdGUgdGhhdCBzaGFyZXMgdGhlIHNhbWUgY29kZSBhcyB0aGUgY3VycmVudAogICAqIGlzb2xhdGUuCiAgICoKICAgKiBUaGUgYXJndW1lbnQgW2VudHJ5UG9pbnRdIHNwZWNpZmllcyB0aGUgaW5pdGlhbCBmdW5jdGlvbiB0byBjYWxsCiAgICogaW4gdGhlIHNwYXduZWQgaXNvbGF0ZS4KICAgKiBUaGUgZW50cnktcG9pbnQgZnVuY3Rpb24gaXMgaW52b2tlZCBpbiB0aGUgbmV3IGlzb2xhdGUgd2l0aCBbbWVzc2FnZV0KICAgKiBhcyB0aGUgb25seSBhcmd1bWVudC4KICAgKgogICAqIFRoZSBmdW5jdGlvbiBtdXN0IGJlIGEgdG9wLWxldmVsIGZ1bmN0aW9uIG9yIGEgc3RhdGljIG1ldGhvZAogICAqIHRoYXQgY2FuIGJlIGNhbGxlZCB3aXRoIGEgc2luZ2xlIGFyZ3VtZW50LAogICAqIHRoYXQgaXMsIGEgY29tcGlsZS10aW1lIGNvbnN0YW50IGZ1bmN0aW9uIHZhbHVlCiAgICogd2hpY2ggYWNjZXB0cyBhdCBsZWFzdCBvbmUgcG9zaXRpb25hbCBwYXJhbWV0ZXIKICAgKiBhbmQgaGFzIGF0IG1vc3Qgb25lIHJlcXVpcmVkIHBvc2l0aW9uYWwgcGFyYW1ldGVyLgogICAqIFRoZSBmdW5jdGlvbiBtYXkgYWNjZXB0IGFueSBudW1iZXIgb2Ygb3B0aW9uYWwgcGFyYW1ldGVycywKICAgKiBhcyBsb25nIGFzIGl0ICpjYW4qIGJlIGNhbGxlZCB3aXRoIGp1c3QgYSBzaW5nbGUgYXJndW1lbnQuCiAgICogVGhlIGZ1bmN0aW9uIG11c3Qgbm90IGJlIHRoZSB2YWx1ZSBvZiBhIGZ1bmN0aW9uIGV4cHJlc3Npb24KICAgKiBvciBhbiBpbnN0YW5jZSBtZXRob2QgdGVhci1vZmYuCiAgICoKICAgKiBVc3VhbGx5IHRoZSBpbml0aWFsIFttZXNzYWdlXSBjb250YWlucyBhIFtTZW5kUG9ydF0gc28KICAgKiB0aGF0IHRoZSBzcGF3bmVyIGFuZCBzcGF3bmVlIGNhbiBjb21tdW5pY2F0ZSB3aXRoIGVhY2ggb3RoZXIuCiAgICoKICAgKiBJZiB0aGUgW3BhdXNlZF0gcGFyYW1ldGVyIGlzIHNldCB0byBgdHJ1ZWAsCiAgICogdGhlIGlzb2xhdGUgd2lsbCBzdGFydCB1cCBpbiBhIHBhdXNlZCBzdGF0ZSwKICAgKiBqdXN0IGJlZm9yZSBjYWxsaW5nIHRoZSBbZW50cnlQb2ludF0gZnVuY3Rpb24gd2l0aCB0aGUgW21lc3NhZ2VdLAogICAqIGFzIGlmIGJ5IGFuIGluaXRpYWwgY2FsbCBvZiBgaXNvbGF0ZS5wYXVzZShpc29sYXRlLnBhdXNlQ2FwYWJpbGl0eSlgLgogICAqIFRvIHJlc3VtZSB0aGUgaXNvbGF0ZSwgY2FsbCBgaXNvbGF0ZS5yZXN1bWUoaXNvbGF0ZS5wYXVzZUNhcGFiaWxpdHkpYC4KICAgKgogICAqIElmIHRoZSBbZXJyb3JzQXJlRmF0YWxdLCBbb25FeGl0XSBhbmQvb3IgW29uRXJyb3JdIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLAogICAqIHRoZSBpc29sYXRlIHdpbGwgYWN0IGFzIGlmLCByZXNwZWN0aXZlbHksIFtzZXRFcnJvcnNGYXRhbF0sCiAgICogW2FkZE9uRXhpdExpc3RlbmVyXSBhbmQgW2FkZEVycm9yTGlzdGVuZXJdIHdlcmUgY2FsbGVkIHdpdGggdGhlCiAgICogY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgYW5kIHdhcyBwcm9jZXNzZWQgYmVmb3JlIHRoZSBpc29sYXRlIHN0YXJ0cwogICAqIHJ1bm5pbmcuCiAgICoKICAgKiBJZiBbZGVidWdOYW1lXSBpcyBwcm92aWRlZCwgdGhlIHNwYXduZWQgW0lzb2xhdGVdIHdpbGwgYmUgaWRlbnRpZmlhYmxlIGJ5CiAgICogdGhpcyBuYW1lIGluIGRlYnVnZ2VycyBhbmQgbG9nZ2luZy4KICAgKgogICAqIElmIFtlcnJvcnNBcmVGYXRhbF0gaXMgb21pdHRlZCwgdGhlIHBsYXRmb3JtIG1heSBjaG9vc2UgYSBkZWZhdWx0IGJlaGF2aW9yCiAgICogb3IgaW5oZXJpdCB0aGUgY3VycmVudCBpc29sYXRlJ3MgYmVoYXZpb3IuCiAgICoKICAgKiBZb3UgY2FuIGFsc28gY2FsbCB0aGUgW3NldEVycm9yc0ZhdGFsXSwgW2FkZE9uRXhpdExpc3RlbmVyXSBhbmQKICAgKiBbYWRkRXJyb3JMaXN0ZW5lcl0gbWV0aG9kcyBvbiB0aGUgcmV0dXJuZWQgaXNvbGF0ZSwgYnV0IHVubGVzcyB0aGUKICAgKiBpc29sYXRlIHdhcyBzdGFydGVkIGFzIFtwYXVzZWRdLCBpdCBtYXkgYWxyZWFkeSBoYXZlIHRlcm1pbmF0ZWQKICAgKiBiZWZvcmUgdGhvc2UgbWV0aG9kcyBjYW4gY29tcGxldGUuCiAgICoKICAgKiBSZXR1cm5zIGEgZnV0dXJlIHdoaWNoIHdpbGwgY29tcGxldGUgd2l0aCBhbiBbSXNvbGF0ZV0gaW5zdGFuY2UgaWYgdGhlCiAgICogc3Bhd25pbmcgc3VjY2VlZGVkLiBJdCB3aWxsIGNvbXBsZXRlIHdpdGggYW4gZXJyb3Igb3RoZXJ3aXNlLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8SXNvbGF0ZT4gc3Bhd248VD4oCiAgICAgIHZvaWQgZW50cnlQb2ludChUIG1lc3NhZ2UpLCBUIG1lc3NhZ2UsCiAgICAgIHtib29sIHBhdXNlZDogZmFsc2UsCiAgICAgIGJvb2wgZXJyb3JzQXJlRmF0YWwsCiAgICAgIFNlbmRQb3J0IG9uRXhpdCwKICAgICAgU2VuZFBvcnQgb25FcnJvciwKICAgICAgQFNpbmNlKCIyLjMiKSBTdHJpbmcgZGVidWdOYW1lfSk7CgogIC8qKgogICAqIENyZWF0ZXMgYW5kIHNwYXducyBhbiBpc29sYXRlIHRoYXQgcnVucyB0aGUgY29kZSBmcm9tIHRoZSBsaWJyYXJ5IHdpdGgKICAgKiB0aGUgc3BlY2lmaWVkIFVSSS4KICAgKgogICAqIFRoZSBpc29sYXRlIHN0YXJ0cyBleGVjdXRpbmcgdGhlIHRvcC1sZXZlbCBgbWFpbmAgZnVuY3Rpb24gb2YgdGhlIGxpYnJhcnkKICAgKiB3aXRoIHRoZSBnaXZlbiBVUkkuCiAgICoKICAgKiBUaGUgdGFyZ2V0IGBtYWluYCBtdXN0IGJlIGNhbGxhYmxlIHdpdGggemVybywgb25lIG9yIHR3byBhcmd1bWVudHMuCiAgICogRXhhbXBsZXM6CiAgICoKICAgKiAqIGBtYWluKClgCiAgICogKiBgbWFpbihhcmdzKWAKICAgKiAqIGBtYWluKGFyZ3MsIG1lc3NhZ2UpYAogICAqCiAgICogV2hlbiBwcmVzZW50LCB0aGUgcGFyYW1ldGVyIGBhcmdzYCBpcyBzZXQgdG8gdGhlIHByb3ZpZGVkIFthcmdzXSBsaXN0LgogICAqIFdoZW4gcHJlc2VudCwgdGhlIHBhcmFtZXRlciBgbWVzc2FnZWAgaXMgc2V0IHRvIHRoZSBpbml0aWFsIFttZXNzYWdlXS4KICAgKgogICAqIElmIHRoZSBbcGF1c2VkXSBwYXJhbWV0ZXIgaXMgc2V0IHRvIGB0cnVlYCwKICAgKiB0aGUgaXNvbGF0ZSB3aWxsIHN0YXJ0IHVwIGluIGEgcGF1c2VkIHN0YXRlLAogICAqIGFzIGlmIGJ5IGFuIGluaXRpYWwgY2FsbCBvZiBgaXNvbGF0ZS5wYXVzZShpc29sYXRlLnBhdXNlQ2FwYWJpbGl0eSlgLgogICAqIFRvIHJlc3VtZSB0aGUgaXNvbGF0ZSwgY2FsbCBgaXNvbGF0ZS5yZXN1bWUoaXNvbGF0ZS5wYXVzZUNhcGFiaWxpdHkpYC4KICAgKgogICAqIElmIHRoZSBbZXJyb3JzQXJlRmF0YWxdLCBbb25FeGl0XSBhbmQvb3IgW29uRXJyb3JdIHBhcmFtZXRlcnMgYXJlIHByb3ZpZGVkLAogICAqIHRoZSBpc29sYXRlIHdpbGwgYWN0IGFzIGlmLCByZXNwZWN0aXZlbHksIFtzZXRFcnJvcnNGYXRhbF0sCiAgICogW2FkZE9uRXhpdExpc3RlbmVyXSBhbmQgW2FkZEVycm9yTGlzdGVuZXJdIHdlcmUgY2FsbGVkIHdpdGggdGhlCiAgICogY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgYW5kIHdhcyBwcm9jZXNzZWQgYmVmb3JlIHRoZSBpc29sYXRlIHN0YXJ0cwogICAqIHJ1bm5pbmcuCiAgICoKICAgKiBZb3UgY2FuIGFsc28gY2FsbCB0aGUgW3NldEVycm9yc0ZhdGFsXSwgW2FkZE9uRXhpdExpc3RlbmVyXSBhbmQKICAgKiBbYWRkRXJyb3JMaXN0ZW5lcl0gbWV0aG9kcyBvbiB0aGUgcmV0dXJuZWQgaXNvbGF0ZSwgYnV0IHVubGVzcyB0aGUKICAgKiBpc29sYXRlIHdhcyBzdGFydGVkIGFzIFtwYXVzZWRdLCBpdCBtYXkgYWxyZWFkeSBoYXZlIHRlcm1pbmF0ZWQKICAgKiBiZWZvcmUgdGhvc2UgbWV0aG9kcyBjYW4gY29tcGxldGUuCiAgICoKICAgKiBJZiB0aGUgW2NoZWNrZWRdIHBhcmFtZXRlciBpcyBzZXQgdG8gYHRydWVgIG9yIGBmYWxzZWAsCiAgICogdGhlIG5ldyBpc29sYXRlIHdpbGwgcnVuIGNvZGUgaW4gY2hlY2tlZCBtb2RlIChlbmFibGluZyBhc3NlcnRzIGFuZCB0eXBlCiAgICogY2hlY2tzKSwgcmVzcGVjdGl2ZWx5IGluIHByb2R1Y3Rpb24gbW9kZSAoZGlzYWJsaW5nIGFzc2VydHMgYW5kIHR5cGUKICAgKiBjaGVja3MpLCBpZiBwb3NzaWJsZS4gSWYgdGhlIHBhcmFtZXRlciBpcyBvbWl0dGVkLCB0aGUgbmV3IGlzb2xhdGUgd2lsbAogICAqIGluaGVyaXQgdGhlIHZhbHVlIGZyb20gdGhlIGN1cnJlbnQgaXNvbGF0ZS4KICAgKgogICAqIEluIERhcnQyIHN0cm9uZyBtb2RlLCB0aGUgYGNoZWNrZWRgIHBhcmFtZXRlciBvbmx5IGNvbnRyb2xzIGFzc2VydHMsIGJ1dAogICAqIG5vdCB0eXBlIGNoZWNrcy4KICAgKgogICAqIEl0IG1heSBub3QgYWx3YXlzIGJlIHBvc3NpYmxlIHRvIGhvbm9yIHRoZSBgY2hlY2tlZGAgcGFyYW1ldGVyLgogICAqIElmIHRoZSBpc29sYXRlIGNvZGUgd2FzIHByZS1jb21waWxlZCwgaXQgbWF5IG5vdCBiZSBwb3NzaWJsZSB0byBjaGFuZ2UKICAgKiB0aGUgY2hlY2tlZCBtb2RlIHNldHRpbmcgZHluYW1pY2FsbHkuCiAgICogSW4gdGhhdCBjYXNlLCB0aGUgYGNoZWNrZWRgIHBhcmFtZXRlciBpcyBpZ25vcmVkLgogICAqCiAgICogV0FSTklORzogVGhlIFtjaGVja2VkXSBwYXJhbWV0ZXIgaXMgbm90IGltcGxlbWVudGVkIG9uIGFsbCBwbGF0Zm9ybXMgeWV0LgogICAqCiAgICogSWYgdGhlIFtwYWNrYWdlQ29uZmlnXSBwYXJhbWV0ZXIgaXMgcHJvdmlkZWQsIHRoZW4gaXQgaXMgdXNlZCB0byBmaW5kIHRoZQogICAqIGxvY2F0aW9uIG9mIGEgcGFja2FnZSByZXNvbHV0aW9uIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIHNwYXduZWQKICAgKiBpc29sYXRlLgogICAqCiAgICogSWYgdGhlIFthdXRvbWF0aWNQYWNrYWdlUmVzb2x1dGlvbl0gcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCB0aGVuIHRoZQogICAqIGxvY2F0aW9uIG9mIHRoZSBwYWNrYWdlIHNvdXJjZXMgaW4gdGhlIHNwYXduZWQgaXNvbGF0ZSBpcyBhdXRvbWF0aWNhbGx5CiAgICogZGV0ZXJtaW5lZC4KICAgKgogICAqIFRoZSBbZW52aXJvbm1lbnRdIGlzIGEgbWFwcGluZyBmcm9tIHN0cmluZ3MgdG8gc3RyaW5ncyB3aGljaCB0aGUKICAgKiBzcGF3bmVkIGlzb2xhdGUgdXNlcyB3aGVuIGxvb2tpbmcgdXAgW1N0cmluZy5mcm9tRW52aXJvbm1lbnRdIHZhbHVlcy4KICAgKiBUaGUgc3lzdGVtIG1heSBhZGQgaXRzIG93biBlbnRyaWVzIHRvIGVudmlyb25tZW50IGFzIHdlbGwuCiAgICogSWYgYGVudmlyb25tZW50YCBpcyBvbWl0dGVkLCB0aGUgc3Bhd25lZCBpc29sYXRlIGhhcyB0aGUgc2FtZSBlbnZpcm9ubWVudAogICAqIGRlY2xhcmF0aW9ucyBhcyB0aGUgc3Bhd25pbmcgaXNvbGF0ZS4KICAgKgogICAqIFdBUk5JTkc6IFRoZSBbZW52aXJvbm1lbnRdIHBhcmFtZXRlciBpcyBub3QgaW1wbGVtZW50ZWQgb24gYWxsCiAgICogcGxhdGZvcm1zIHlldC4KICAgKgogICAqIElmIFtkZWJ1Z05hbWVdIGlzIHByb3ZpZGVkLCB0aGUgc3Bhd25lZCBbSXNvbGF0ZV0gd2lsbCBiZSBpZGVudGlmaWFibGUgYnkKICAgKiB0aGlzIG5hbWUgaW4gZGVidWdnZXJzIGFuZCBsb2dnaW5nLgogICAqCiAgICogUmV0dXJucyBhIGZ1dHVyZSB0aGF0IHdpbGwgY29tcGxldGUgd2l0aCBhbiBbSXNvbGF0ZV0gaW5zdGFuY2UgaWYgdGhlCiAgICogc3Bhd25pbmcgc3VjY2VlZGVkLiBJdCB3aWxsIGNvbXBsZXRlIHdpdGggYW4gZXJyb3Igb3RoZXJ3aXNlLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8SXNvbGF0ZT4gc3Bhd25VcmkoCiAgICAgIFVyaSB1cmksCiAgICAgIExpc3Q8U3RyaW5nPiBhcmdzLAogICAgICB2YXIgbWVzc2FnZSwKICAgICAge2Jvb2wgcGF1c2VkOiBmYWxzZSwKICAgICAgU2VuZFBvcnQgb25FeGl0LAogICAgICBTZW5kUG9ydCBvbkVycm9yLAogICAgICBib29sIGVycm9yc0FyZUZhdGFsLAogICAgICBib29sIGNoZWNrZWQsCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICAgIEBEZXByZWNhdGVkKCdUaGUgcGFja2FnZXMvIGRpciBpcyBub3Qgc3VwcG9ydGVkIGluIERhcnQgMicpCiAgICAgICAgICBVcmkgcGFja2FnZVJvb3QsCiAgICAgIFVyaSBwYWNrYWdlQ29uZmlnLAogICAgICBib29sIGF1dG9tYXRpY1BhY2thZ2VSZXNvbHV0aW9uOiBmYWxzZSwKICAgICAgQFNpbmNlKCIyLjMiKQogICAgICAgICAgU3RyaW5nIGRlYnVnTmFtZX0pOwoKICAvKioKICAgKiBSZXF1ZXN0cyB0aGUgaXNvbGF0ZSB0byBwYXVzZS4KICAgKgogICAqIFdoZW4gdGhlIGlzb2xhdGUgcmVjZWl2ZXMgdGhlIHBhdXNlIGNvbW1hbmQsIGl0IHN0b3BzCiAgICogcHJvY2Vzc2luZyBldmVudHMgZnJvbSB0aGUgZXZlbnQgbG9vcCBxdWV1ZS4KICAgKiBJdCBtYXkgc3RpbGwgYWRkIG5ldyBldmVudHMgdG8gdGhlIHF1ZXVlIGluIHJlc3BvbnNlIHRvLCBlLmcuLCB0aW1lcnMKICAgKiBvciByZWNlaXZlLXBvcnQgbWVzc2FnZXMuIFdoZW4gdGhlIGlzb2xhdGUgaXMgcmVzdW1lZCwKICAgKiBpdCBzdGFydHMgaGFuZGxpbmcgdGhlIGFscmVhZHkgZW5xdWV1ZWQgZXZlbnRzLgogICAqCiAgICogVGhlIHBhdXNlIHJlcXVlc3QgaXMgc2VudCB0aHJvdWdoIHRoZSBpc29sYXRlJ3MgY29tbWFuZCBwb3J0LAogICAqIHdoaWNoIGJ5cGFzc2VzIHRoZSByZWNlaXZpbmcgaXNvbGF0ZSdzIGV2ZW50IGxvb3AuCiAgICogVGhlIHBhdXNlIHRha2VzIGVmZmVjdCB3aGVuIGl0IGlzIHJlY2VpdmVkLCBwYXVzaW5nIHRoZSBldmVudCBsb29wCiAgICogYXMgaXQgaXMgYXQgdGhhdCB0aW1lLgogICAqCiAgICogVGhlIFtyZXN1bWVDYXBhYmlsaXR5XSBpcyB1c2VkIHRvIGlkZW50aXR5IHRoZSBwYXVzZSwKICAgKiBhbmQgbXVzdCBiZSB1c2VkIGFnYWluIHRvIGVuZCB0aGUgcGF1c2UgdXNpbmcgW3Jlc3VtZV0uCiAgICogSWYgW3Jlc3VtZUNhcGFiaWxpdHldIGlzIG9taXR0ZWQsIGEgbmV3IGNhcGFiaWxpdHkgb2JqZWN0IGlzIGNyZWF0ZWQKICAgKiBhbmQgdXNlZCBpbnN0ZWFkLgogICAqCiAgICogSWYgYW4gaXNvbGF0ZSBpcyBwYXVzZWQgbW9yZSB0aGFuIG9uY2UgdXNpbmcgdGhlIHNhbWUgY2FwYWJpbGl0eSwKICAgKiBvbmx5IG9uZSByZXN1bWUgd2l0aCB0aGF0IGNhcGFiaWxpdHkgaXMgbmVlZGVkIHRvIGVuZCB0aGUgcGF1c2UuCiAgICoKICAgKiBJZiBhbiBpc29sYXRlIGlzIHBhdXNlZCB1c2luZyBtb3JlIHRoYW4gb25lIGNhcGFiaWxpdHksCiAgICogZWFjaCBwYXVzZSBtdXN0IGJlIGluZGl2aWR1YWxseSBlbmRlZCBiZWZvcmUgdGhlIGlzb2xhdGUgcmVzdW1lcy4KICAgKgogICAqIFJldHVybnMgdGhlIGNhcGFiaWxpdHkgdGhhdCBtdXN0IGJlIHVzZWQgdG8gZW5kIHRoZSBwYXVzZS4KICAgKiBUaGlzIGlzIGVpdGhlciBbcmVzdW1lQ2FwYWJpbGl0eV0sIG9yIGEgbmV3IGNhcGFiaWxpdHkgd2hlbgogICAqIFtyZXN1bWVDYXBhYmlsaXR5XSBpcyBvbWl0dGVkLgogICAqCiAgICogSWYgW3BhdXNlQ2FwYWJpbGl0eV0gaXMgYG51bGxgLCBvciBpdCdzIG5vdCB0aGUgcGF1c2UgY2FwYWJpbGl0eQogICAqIG9mIHRoZSBpc29sYXRlIGlkZW50aWZpZWQgYnkgW2NvbnRyb2xQb3J0XSwKICAgKiB0aGUgcGF1c2UgcmVxdWVzdCBpcyBpZ25vcmVkIGJ5IHRoZSByZWNlaXZpbmcgaXNvbGF0ZS4KICAgKi8KICBDYXBhYmlsaXR5IHBhdXNlKFtDYXBhYmlsaXR5IHJlc3VtZUNhcGFiaWxpdHldKSB7CiAgICByZXN1bWVDYXBhYmlsaXR5ID8/PSBuZXcgQ2FwYWJpbGl0eSgpOwogICAgX3BhdXNlKHJlc3VtZUNhcGFiaWxpdHkpOwogICAgcmV0dXJuIHJlc3VtZUNhcGFiaWxpdHk7CiAgfQoKICAvKiogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gb2YgW3BhdXNlXS4gKi8KICBleHRlcm5hbCB2b2lkIF9wYXVzZShDYXBhYmlsaXR5IHJlc3VtZUNhcGFiaWxpdHkpOwoKICAvKioKICAgKiBSZXN1bWVzIGEgcGF1c2VkIGlzb2xhdGUuCiAgICoKICAgKiBTZW5kcyBhIG1lc3NhZ2UgdG8gYW4gaXNvbGF0ZSByZXF1ZXN0aW5nIHRoYXQgaXQgZW5kcyBhIHBhdXNlCiAgICogdGhhdCB3YXMgcHJldmlvdXNseSByZXF1ZXN0ZWQuCiAgICoKICAgKiBXaGVuIGFsbCBhY3RpdmUgcGF1c2UgcmVxdWVzdHMgaGF2ZSBiZWVuIGNhbmNlbGxlZCwgdGhlIGlzb2xhdGUKICAgKiB3aWxsIGNvbnRpbnVlIHByb2Nlc3NpbmcgZXZlbnRzIGFuZCBoYW5kbGluZyBub3JtYWwgbWVzc2FnZXMuCiAgICoKICAgKiBJZiB0aGUgW3Jlc3VtZUNhcGFiaWxpdHldIGlzIG5vdCBvbmUgdGhhdCBoYXMgcHJldmlvdXNseSBiZWVuIHVzZWQKICAgKiB0byBwYXVzZSB0aGUgaXNvbGF0ZSwgb3IgaXQgaGFzIGFscmVhZHkgYmVlbiB1c2VkIHRvIHJlc3VtZSBmcm9tCiAgICogdGhhdCBwYXVzZSwgdGhlIHJlc3VtZSBjYWxsIGhhcyBubyBlZmZlY3QuCiAgICovCiAgZXh0ZXJuYWwgdm9pZCByZXN1bWUoQ2FwYWJpbGl0eSByZXN1bWVDYXBhYmlsaXR5KTsKCiAgLyoqCiAgICogUmVxdWVzdHMgYW4gZXhpdCBtZXNzYWdlIG9uIFtyZXNwb25zZVBvcnRdIHdoZW4gdGhlIGlzb2xhdGUgdGVybWluYXRlcy4KICAgKgogICAqIFRoZSBpc29sYXRlIHdpbGwgc2VuZCBbcmVzcG9uc2VdIGFzIGEgbWVzc2FnZSBvbiBbcmVzcG9uc2VQb3J0XSBhcyB0aGUgbGFzdAogICAqIHRoaW5nIGJlZm9yZSBpdCB0ZXJtaW5hdGVzLiBJdCB3aWxsIHJ1biBubyBmdXJ0aGVyIGNvZGUgYWZ0ZXIgdGhlIG1lc3NhZ2UKICAgKiBoYXMgYmVlbiBzZW50LgogICAqCiAgICogQWRkaW5nIHRoZSBzYW1lIHBvcnQgbW9yZSB0aGFuIG9uY2Ugd2lsbCBvbmx5IGNhdXNlIGl0IHRvIHJlY2VpdmUgb25lIGV4aXQKICAgKiBtZXNzYWdlLCB1c2luZyB0aGUgbGFzdCByZXNwb25zZSB2YWx1ZSB0aGF0IHdhcyBhZGRlZCwKICAgKiBhbmQgaXQgb25seSBuZWVkcyB0byBiZSByZW1vdmVkIG9uY2UgdXNpbmcgW3JlbW92ZU9uRXhpdExpc3RlbmVyXS4KICAgKgogICAqIElmIHRoZSBpc29sYXRlIGhhcyB0ZXJtaW5hdGVkIGJlZm9yZSBpdCBjYW4gcmVjZWl2ZSB0aGlzIHJlcXVlc3QsCiAgICogbm8gZXhpdCBtZXNzYWdlIHdpbGwgYmUgc2VudC4KICAgKgogICAqIFRoZSBbcmVzcG9uc2VdIG9iamVjdCBtdXN0IGZvbGxvdyB0aGUgc2FtZSByZXN0cmljdGlvbnMgYXMgZW5mb3JjZWQgYnkKICAgKiBbU2VuZFBvcnQuc2VuZF0uCiAgICogSXQgaXMgcmVjb21tZW5kZWQgdG8gb25seSB1c2Ugc2ltcGxlIHZhbHVlcyB0aGF0IGNhbiBiZSBzZW50IHRvIGFsbAogICAqIGlzb2xhdGVzLCBsaWtlIGBudWxsYCwgYm9vbGVhbnMsIG51bWJlcnMgb3Igc3RyaW5ncy4KICAgKgogICAqIFNpbmNlIGlzb2xhdGVzIHJ1biBjb25jdXJyZW50bHksIGl0J3MgcG9zc2libGUgZm9yIGl0IHRvIGV4aXQgYmVmb3JlIHRoZQogICAqIGV4aXQgbGlzdGVuZXIgaXMgZXN0YWJsaXNoZWQsIGFuZCBpbiB0aGF0IGNhc2Ugbm8gcmVzcG9uc2Ugd2lsbCBiZQogICAqIHNlbnQgb24gW3Jlc3BvbnNlUG9ydF0uCiAgICogVG8gYXZvaWQgdGhpcywgZWl0aGVyIHVzZSB0aGUgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdG8gdGhlIHNwYXduCiAgICogZnVuY3Rpb24sIG9yIHN0YXJ0IHRoZSBpc29sYXRlIHBhdXNlZCwgYWRkIHRoZSBsaXN0ZW5lciBhbmQKICAgKiB0aGVuIHJlc3VtZSB0aGUgaXNvbGF0ZS4KICAgKi8KICAvKiBUT0RPKGxybik6IENhbiB3ZSBkbyBiZXR0ZXI/IENhbiB0aGUgc3lzdGVtIHJlY29nbml6ZSB0aGlzIG1lc3NhZ2UgYW5kCiAgICogc2VuZCBhIHJlcGx5IGlmIHRoZSByZWNlaXZpbmcgaXNvbGF0ZSBpcyBkZWFkPwogICAqLwogIGV4dGVybmFsIHZvaWQgYWRkT25FeGl0TGlzdGVuZXIoU2VuZFBvcnQgcmVzcG9uc2VQb3J0LCB7T2JqZWN0IHJlc3BvbnNlfSk7CgogIC8qKgogICAqIFN0b3BzIGxpc3RlbmluZyBmb3IgZXhpdCBtZXNzYWdlcyBmcm9tIHRoZSBpc29sYXRlLgogICAqCiAgICogUmVxdWVzdHMgZm9yIHRoZSBpc29sYXRlIHRvIG5vdCBzZW5kIGV4aXQgbWVzc2FnZXMgb24gW3Jlc3BvbnNlUG9ydF0uCiAgICogSWYgdGhlIGlzb2xhdGUgaXNuJ3QgZXhwZWN0aW5nIHRvIHNlbmQgZXhpdCBtZXNzYWdlcyBvbiBbcmVzcG9uc2VQb3J0XSwKICAgKiBiZWNhdXNlIHRoZSBwb3J0IGhhc24ndCBiZWVuIGFkZGVkIHVzaW5nIFthZGRPbkV4aXRMaXN0ZW5lcl0sCiAgICogb3IgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQsIHRoZSByZXF1ZXN0IGlzIGlnbm9yZWQuCiAgICoKICAgKiBJZiB0aGUgc2FtZSBwb3J0IGhhcyBiZWVuIHBhc3NlZCB2aWEgW2FkZE9uRXhpdExpc3RlbmVyXSBtb3JlIHRoYW4gb25jZSwKICAgKiBvbmx5IG9uZSBjYWxsIHRvIGByZW1vdmVPbkV4aXRMaXN0ZW5lcmAgaXMgbmVlZGVkIHRvIHN0b3AgaXQgZnJvbSByZWNlaXZpbmcKICAgKiBleGl0IG1lc3NhZ2VzLgogICAqCiAgICogQ2xvc2luZyB0aGUgcmVjZWl2ZSBwb3J0IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBbcmVzcG9uc2VQb3J0XSBkb2VzCiAgICogbm90IHN0b3AgdGhlIGlzb2xhdGUgZnJvbSBzZW5kaW5nIHVuY2F1Z2h0IGVycm9ycywgdGhleSBhcmUganVzdCBnb2luZyB0bwogICAqIGJlIGxvc3QuCiAgICoKICAgKiBBbiBleGl0IG1lc3NhZ2UgbWF5IHN0aWxsIGJlIHNlbnQgaWYgdGhlIGlzb2xhdGUgdGVybWluYXRlcwogICAqIGJlZm9yZSB0aGlzIHJlcXVlc3QgaXMgcmVjZWl2ZWQgYW5kIHByb2Nlc3NlZC4KICAgKi8KICBleHRlcm5hbCB2b2lkIHJlbW92ZU9uRXhpdExpc3RlbmVyKFNlbmRQb3J0IHJlc3BvbnNlUG9ydCk7CgogIC8qKgogICAqIFNldHMgd2hldGhlciB1bmNhdWdodCBlcnJvcnMgd2lsbCB0ZXJtaW5hdGUgdGhlIGlzb2xhdGUuCiAgICoKICAgKiBJZiBlcnJvcnMgYXJlIGZhdGFsLCBhbnkgdW5jYXVnaHQgZXJyb3Igd2lsbCB0ZXJtaW5hdGUgdGhlIGlzb2xhdGUKICAgKiBldmVudCBsb29wIGFuZCBzaHV0IGRvd24gdGhlIGlzb2xhdGUuCiAgICoKICAgKiBUaGlzIGNhbGwgcmVxdWlyZXMgdGhlIFt0ZXJtaW5hdGVDYXBhYmlsaXR5XSBmb3IgdGhlIGlzb2xhdGUuCiAgICogSWYgdGhlIGNhcGFiaWxpdHkgaXMgYWJzZW50IG9yIGluY29ycmVjdCwgbm8gY2hhbmdlIGlzIG1hZGUuCiAgICoKICAgKiBTaW5jZSBpc29sYXRlcyBydW4gY29uY3VycmVudGx5LCBpdCdzIHBvc3NpYmxlIGZvciB0aGUgcmVjZWl2aW5nIGlzb2xhdGUKICAgKiB0byBleGl0IGR1ZSB0byBhbiBlcnJvciwgYmVmb3JlIGEgcmVxdWVzdCwgdXNpbmcgdGhpcyBtZXRob2QsIGhhcyBiZWVuCiAgICogcmVjZWl2ZWQgYW5kIHByb2Nlc3NlZC4KICAgKiBUbyBhdm9pZCB0aGlzLCBlaXRoZXIgdXNlIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0byB0aGUgc3Bhd24KICAgKiBmdW5jdGlvbiwgb3Igc3RhcnQgdGhlIGlzb2xhdGUgcGF1c2VkLCBzZXQgZXJyb3JzIG5vbi1mYXRhbCBhbmQKICAgKiB0aGVuIHJlc3VtZSB0aGUgaXNvbGF0ZS4KICAgKi8KICBleHRlcm5hbCB2b2lkIHNldEVycm9yc0ZhdGFsKGJvb2wgZXJyb3JzQXJlRmF0YWwpOwoKICAvKioKICAgKiBSZXF1ZXN0cyB0aGUgaXNvbGF0ZSB0byBzaHV0IGRvd24uCiAgICoKICAgKiBUaGUgaXNvbGF0ZSBpcyByZXF1ZXN0ZWQgdG8gdGVybWluYXRlIGl0c2VsZi4KICAgKiBUaGUgW3ByaW9yaXR5XSBhcmd1bWVudCBzcGVjaWZpZXMgd2hlbiB0aGlzIG11c3QgaGFwcGVuLgogICAqCiAgICogVGhlIFtwcmlvcml0eV0sIHdoZW4gcHJvdmlkZWQsIG11c3QgYmUgb25lIG9mIFtpbW1lZGlhdGVdIG9yCiAgICogW2JlZm9yZU5leHRFdmVudF0gKHRoZSBkZWZhdWx0KS4KICAgKiBUaGUgc2h1dGRvd24gaXMgcGVyZm9ybWVkIGF0IGRpZmZlcmVudCB0aW1lcyBkZXBlbmRpbmcgb24gdGhlIHByaW9yaXR5OgogICAqCiAgICogKiBgaW1tZWRpYXRlYDogVGhlIGlzb2xhdGUgc2h1dHMgZG93biBhcyBzb29uIGFzIHBvc3NpYmxlLgogICAqICAgICBDb250cm9sIG1lc3NhZ2VzIGFyZSBoYW5kbGVkIGluIG9yZGVyLCBzbyBhbGwgcHJldmlvdXNseSBzZW50IGNvbnRyb2wKICAgKiAgICAgZXZlbnRzIGZyb20gdGhpcyBpc29sYXRlIHdpbGwgYWxsIGhhdmUgYmVlbiBwcm9jZXNzZWQuCiAgICogICAgIFRoZSBzaHV0ZG93biBzaG91bGQgaGFwcGVuIG5vIGxhdGVyIHRoYW4gaWYgc2VudCB3aXRoCiAgICogICAgIGBiZWZvcmVOZXh0RXZlbnRgLgogICAqICAgICBJdCBtYXkgaGFwcGVuIGVhcmxpZXIgaWYgdGhlIHN5c3RlbSBoYXMgYSB3YXkgdG8gc2h1dCBkb3duIGNsZWFubHkKICAgKiAgICAgYXQgYW4gZWFybGllciB0aW1lLCBldmVuIGR1cmluZyB0aGUgZXhlY3V0aW9uIG9mIGFub3RoZXIgZXZlbnQuCiAgICogKiBgYmVmb3JlTmV4dEV2ZW50YDogVGhlIHNodXRkb3duIGlzIHNjaGVkdWxlZCBmb3IgdGhlIG5leHQgdGltZQogICAqICAgICBjb250cm9sIHJldHVybnMgdG8gdGhlIGV2ZW50IGxvb3Agb2YgdGhlIHJlY2VpdmluZyBpc29sYXRlLAogICAqICAgICBhZnRlciB0aGUgY3VycmVudCBldmVudCwgYW5kIGFueSBhbHJlYWR5IHNjaGVkdWxlZCBjb250cm9sIGV2ZW50cywKICAgKiAgICAgYXJlIGNvbXBsZXRlZC4KICAgKgogICAqIElmIFt0ZXJtaW5hdGVDYXBhYmlsaXR5XSBpcyBgbnVsbGAsIG9yIGl0J3Mgbm90IHRoZSB0ZXJtaW5hdGUgY2FwYWJpbGl0eQogICAqIG9mIHRoZSBpc29sYXRlIGlkZW50aWZpZWQgYnkgW2NvbnRyb2xQb3J0XSwKICAgKiB0aGUga2lsbCByZXF1ZXN0IGlzIGlnbm9yZWQgYnkgdGhlIHJlY2VpdmluZyBpc29sYXRlLgogICAqLwogIGV4dGVybmFsIHZvaWQga2lsbCh7aW50IHByaW9yaXR5OiBiZWZvcmVOZXh0RXZlbnR9KTsKCiAgLyoqCiAgICogUmVxdWVzdHMgdGhhdCB0aGUgaXNvbGF0ZSBzZW5kIFtyZXNwb25zZV0gb24gdGhlIFtyZXNwb25zZVBvcnRdLgogICAqCiAgICogVGhlIFtyZXNwb25zZV0gb2JqZWN0IG11c3QgZm9sbG93IHRoZSBzYW1lIHJlc3RyaWN0aW9ucyBhcyBlbmZvcmNlZCBieQogICAqIFtTZW5kUG9ydC5zZW5kXS4KICAgKiBJdCBpcyByZWNvbW1lbmRlZCB0byBvbmx5IHVzZSBzaW1wbGUgdmFsdWVzIHRoYXQgY2FuIGJlIHNlbnQgdG8gYWxsCiAgICogaXNvbGF0ZXMsIGxpa2UgYG51bGxgLCBib29sZWFucywgbnVtYmVycyBvciBzdHJpbmdzLgogICAqCiAgICogSWYgdGhlIGlzb2xhdGUgaXMgYWxpdmUsIGl0IHdpbGwgZXZlbnR1YWxseSBzZW5kIGByZXNwb25zZWAKICAgKiAoZGVmYXVsdGluZyB0byBgbnVsbGApIG9uIHRoZSByZXNwb25zZSBwb3J0LgogICAqCiAgICogVGhlIFtwcmlvcml0eV0gbXVzdCBiZSBvbmUgb2YgW2ltbWVkaWF0ZV0gb3IgW2JlZm9yZU5leHRFdmVudF0uCiAgICogVGhlIHJlc3BvbnNlIGlzIHNlbnQgYXQgZGlmZmVyZW50IHRpbWVzIGRlcGVuZGluZyBvbiB0aGUgcGluZyB0eXBlOgogICAqCiAgICogKiBgaW1tZWRpYXRlYDogVGhlIGlzb2xhdGUgcmVzcG9uZHMgYXMgc29vbiBhcyBpdCByZWNlaXZlcyB0aGUKICAgKiAgICAgY29udHJvbCBtZXNzYWdlLiBUaGlzIGlzIGFmdGVyIGFueSBwcmV2aW91cyBjb250cm9sIG1lc3NhZ2UKICAgKiAgICAgZnJvbSB0aGUgc2FtZSBpc29sYXRlIGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBwcm9jZXNzZWQsCiAgICogICAgIGJ1dCBtYXkgYmUgZHVyaW5nIGV4ZWN1dGlvbiBvZiBhbm90aGVyIGV2ZW50LgogICAqICogYGJlZm9yZU5leHRFdmVudGA6IFRoZSByZXNwb25zZSBpcyBzY2hlZHVsZWQgZm9yIHRoZSBuZXh0IHRpbWUKICAgKiAgICAgY29udHJvbCByZXR1cm5zIHRvIHRoZSBldmVudCBsb29wIG9mIHRoZSByZWNlaXZpbmcgaXNvbGF0ZSwKICAgKiAgICAgYWZ0ZXIgdGhlIGN1cnJlbnQgZXZlbnQsIGFuZCBhbnkgYWxyZWFkeSBzY2hlZHVsZWQgY29udHJvbCBldmVudHMsCiAgICogICAgIGFyZSBjb21wbGV0ZWQuCiAgICovCiAgZXh0ZXJuYWwgdm9pZCBwaW5nKFNlbmRQb3J0IHJlc3BvbnNlUG9ydCwKICAgICAge09iamVjdCByZXNwb25zZSwgaW50IHByaW9yaXR5OiBpbW1lZGlhdGV9KTsKCiAgLyoqCiAgICogUmVxdWVzdHMgdGhhdCB1bmNhdWdodCBlcnJvcnMgb2YgdGhlIGlzb2xhdGUgYXJlIHNlbnQgYmFjayB0byBbcG9ydF0uCiAgICoKICAgKiBUaGUgZXJyb3JzIGFyZSBzZW50IGJhY2sgYXMgdHdvIGVsZW1lbnRzIGxpc3RzLgogICAqIFRoZSBmaXJzdCBlbGVtZW50IGlzIGEgYFN0cmluZ2AgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yLCB1c3VhbGx5CiAgICogY3JlYXRlZCBieSBjYWxsaW5nIGB0b1N0cmluZ2Agb24gdGhlIGVycm9yLgogICAqIFRoZSBzZWNvbmQgZWxlbWVudCBpcyBhIGBTdHJpbmdgIHJlcHJlc2VudGF0aW9uIG9mIGFuIGFjY29tcGFueWluZwogICAqIHN0YWNrIHRyYWNlLCBvciBgbnVsbGAgaWYgbm8gc3RhY2sgdHJhY2Ugd2FzIHByb3ZpZGVkLgogICAqIFRvIGNvbnZlcnQgdGhpcyBiYWNrIHRvIGEgW1N0YWNrVHJhY2VdIG9iamVjdCwgdXNlIFtTdGFja1RyYWNlLmZyb21TdHJpbmddLgogICAqCiAgICogTGlzdGVuaW5nIHVzaW5nIHRoZSBzYW1lIHBvcnQgbW9yZSB0aGFuIG9uY2UgZG9lcyBub3RoaW5nLgogICAqIEEgcG9ydCB3aWxsIG9ubHkgcmVjZWl2ZSBlYWNoIGVycm9yIG9uY2UsCiAgICogYW5kIHdpbGwgb25seSBuZWVkIHRvIGJlIHJlbW92ZWQgb25jZSB1c2luZyBbcmVtb3ZlRXJyb3JMaXN0ZW5lcl0uCgogICAqIENsb3NpbmcgdGhlIHJlY2VpdmUgcG9ydCB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgcG9ydCBkb2VzIG5vdCBzdG9wCiAgICogdGhlIGlzb2xhdGUgZnJvbSBzZW5kaW5nIHVuY2F1Z2h0IGVycm9ycywgdGhleSBhcmUganVzdCBnb2luZyB0byBiZSBsb3N0LgogICAqIEluc3RlYWQgdXNlIFtyZW1vdmVFcnJvckxpc3RlbmVyXSB0byBzdG9wIHJlY2VpdmluZyBlcnJvcnMgb24gW3BvcnRdLgogICAqCiAgICogU2luY2UgaXNvbGF0ZXMgcnVuIGNvbmN1cnJlbnRseSwgaXQncyBwb3NzaWJsZSBmb3IgaXQgdG8gZXhpdCBiZWZvcmUgdGhlCiAgICogZXJyb3IgbGlzdGVuZXIgaXMgZXN0YWJsaXNoZWQuIFRvIGF2b2lkIHRoaXMsIHN0YXJ0IHRoZSBpc29sYXRlIHBhdXNlZCwKICAgKiBhZGQgdGhlIGxpc3RlbmVyIGFuZCB0aGVuIHJlc3VtZSB0aGUgaXNvbGF0ZS4KICAgKi8KICBleHRlcm5hbCB2b2lkIGFkZEVycm9yTGlzdGVuZXIoU2VuZFBvcnQgcG9ydCk7CgogIC8qKgogICAqIFN0b3BzIGxpc3RlbmluZyBmb3IgdW5jYXVnaHQgZXJyb3JzIGZyb20gdGhlIGlzb2xhdGUuCiAgICoKICAgKiBSZXF1ZXN0cyBmb3IgdGhlIGlzb2xhdGUgdG8gbm90IHNlbmQgdW5jYXVnaHQgZXJyb3JzIG9uIFtwb3J0XS4KICAgKiBJZiB0aGUgaXNvbGF0ZSBpc24ndCBleHBlY3RpbmcgdG8gc2VuZCB1bmNhdWdodCBlcnJvcnMgb24gW3BvcnRdLAogICAqIGJlY2F1c2UgdGhlIHBvcnQgaGFzbid0IGJlZW4gYWRkZWQgdXNpbmcgW2FkZEVycm9yTGlzdGVuZXJdLAogICAqIG9yIGJlY2F1c2UgaXQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkLCB0aGUgcmVxdWVzdCBpcyBpZ25vcmVkLgogICAqCiAgICogSWYgdGhlIHNhbWUgcG9ydCBoYXMgYmVlbiBwYXNzZWQgdmlhIFthZGRFcnJvckxpc3RlbmVyXSBtb3JlIHRoYW4gb25jZSwKICAgKiBvbmx5IG9uZSBjYWxsIHRvIGByZW1vdmVFcnJvckxpc3RlbmVyYCBpcyBuZWVkZWQgdG8gc3RvcCBpdCBmcm9tIHJlY2VpdmluZwogICAqIHVuY2F1Z2h0IGVycm9ycy4KICAgKgogICAqIFVuY2F1Z2h0IGVycm9ycyBtZXNzYWdlIG1heSBzdGlsbCBiZSBzZW50IGJ5IHRoZSBpc29sYXRlCiAgICogdW50aWwgdGhpcyByZXF1ZXN0IGlzIHJlY2VpdmVkIGFuZCBwcm9jZXNzZWQuCiAgICovCiAgZXh0ZXJuYWwgdm9pZCByZW1vdmVFcnJvckxpc3RlbmVyKFNlbmRQb3J0IHBvcnQpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgYnJvYWRjYXN0IHN0cmVhbSBvZiB1bmNhdWdodCBlcnJvcnMgZnJvbSB0aGUgaXNvbGF0ZS4KICAgKgogICAqIEVhY2ggZXJyb3IgaXMgcHJvdmlkZWQgYXMgYW4gZXJyb3IgZXZlbnQgb24gdGhlIHN0cmVhbS4KICAgKgogICAqIFRoZSBhY3R1YWwgZXJyb3Igb2JqZWN0IGFuZCBzdGFja1RyYWNlcyB3aWxsIG5vdCBuZWNlc3NhcmlseQogICAqIGJlIHRoZSBzYW1lIG9iamVjdCB0eXBlcyBhcyBpbiB0aGUgYWN0dWFsIGlzb2xhdGUsIGJ1dCB0aGV5IHdpbGwKICAgKiBhbHdheXMgaGF2ZSB0aGUgc2FtZSBbT2JqZWN0LnRvU3RyaW5nXSByZXN1bHQuCiAgICoKICAgKiBUaGlzIHN0cmVhbSBpcyBiYXNlZCBvbiBbYWRkRXJyb3JMaXN0ZW5lcl0gYW5kIFtyZW1vdmVFcnJvckxpc3RlbmVyXS4KICAgKi8KICBTdHJlYW0gZ2V0IGVycm9ycyB7CiAgICBTdHJlYW1Db250cm9sbGVyIGNvbnRyb2xsZXI7CiAgICBSYXdSZWNlaXZlUG9ydCBwb3J0OwogICAgdm9pZCBoYW5kbGVFcnJvcihtZXNzYWdlKSB7CiAgICAgIExpc3QgbGlzdE1lc3NhZ2UgPSBtZXNzYWdlOwogICAgICBTdHJpbmcgZXJyb3JEZXNjcmlwdGlvbiA9IGxpc3RNZXNzYWdlWzBdOwogICAgICBTdHJpbmcgc3RhY2tEZXNjcmlwdGlvbiA9IGxpc3RNZXNzYWdlWzFdOwogICAgICB2YXIgZXJyb3IgPSBuZXcgUmVtb3RlRXJyb3IoZXJyb3JEZXNjcmlwdGlvbiwgc3RhY2tEZXNjcmlwdGlvbik7CiAgICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IoZXJyb3IsIGVycm9yLnN0YWNrVHJhY2UpOwogICAgfQoKICAgIGNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlci5icm9hZGNhc3QoCiAgICAgICAgc3luYzogdHJ1ZSwKICAgICAgICBvbkxpc3RlbjogKCkgewogICAgICAgICAgcG9ydCA9IG5ldyBSYXdSZWNlaXZlUG9ydChoYW5kbGVFcnJvcik7CiAgICAgICAgICB0aGlzLmFkZEVycm9yTGlzdGVuZXIocG9ydC5zZW5kUG9ydCk7CiAgICAgICAgfSwKICAgICAgICBvbkNhbmNlbDogKCkgewogICAgICAgICAgdGhpcy5yZW1vdmVFcnJvckxpc3RlbmVyKHBvcnQuc2VuZFBvcnQpOwogICAgICAgICAgcG9ydC5jbG9zZSgpOwogICAgICAgICAgcG9ydCA9IG51bGw7CiAgICAgICAgfSk7CiAgICByZXR1cm4gY29udHJvbGxlci5zdHJlYW07CiAgfQp9CgovKioKICogU2VuZHMgbWVzc2FnZXMgdG8gaXRzIFtSZWNlaXZlUG9ydF1zLgogKgogKiBbU2VuZFBvcnRdcyBhcmUgY3JlYXRlZCBmcm9tIFtSZWNlaXZlUG9ydF1zLiBBbnkgbWVzc2FnZSBzZW50IHRocm91Z2gKICogYSBbU2VuZFBvcnRdIGlzIGRlbGl2ZXJlZCB0byBpdHMgY29ycmVzcG9uZGluZyBbUmVjZWl2ZVBvcnRdLiBUaGVyZSBtaWdodCBiZQogKiBtYW55IFtTZW5kUG9ydF1zIGZvciB0aGUgc2FtZSBbUmVjZWl2ZVBvcnRdLgogKgogKiBbU2VuZFBvcnRdcyBjYW4gYmUgdHJhbnNtaXR0ZWQgdG8gb3RoZXIgaXNvbGF0ZXMsIGFuZCB0aGV5IHByZXNlcnZlIGVxdWFsaXR5CiAqIHdoZW4gc2VudC4KICovCmFic3RyYWN0IGNsYXNzIFNlbmRQb3J0IGltcGxlbWVudHMgQ2FwYWJpbGl0eSB7CiAgLyoqCiAgICogU2VuZHMgYW4gYXN5bmNocm9ub3VzIFttZXNzYWdlXSB0aHJvdWdoIHRoaXMgc2VuZCBwb3J0LCB0byBpdHMKICAgKiBjb3JyZXNwb25kaW5nIGBSZWNlaXZlUG9ydGAuCiAgICoKICAgKiBUaGUgY29udGVudCBvZiBbbWVzc2FnZV0gY2FuIGJlOiBwcmltaXRpdmUgdmFsdWVzIChudWxsLCBudW0sIGJvb2wsIGRvdWJsZSwKICAgKiBTdHJpbmcpLCBpbnN0YW5jZXMgb2YgW1NlbmRQb3J0XSwgYW5kIGxpc3RzIGFuZCBtYXBzIHdob3NlIGVsZW1lbnRzIGFyZSBhbnkKICAgKiBvZiB0aGVzZS4gTGlzdCBhbmQgbWFwcyBhcmUgYWxzbyBhbGxvd2VkIHRvIGJlIGN5Y2xpYy4KICAgKgogICAqIEluIHRoZSBzcGVjaWFsIGNpcmN1bXN0YW5jZXMgd2hlbiB0d28gaXNvbGF0ZXMgc2hhcmUgdGhlIHNhbWUgY29kZSBhbmQgYXJlCiAgICogcnVubmluZyBpbiB0aGUgc2FtZSBwcm9jZXNzIChlLmcuIGlzb2xhdGVzIGNyZWF0ZWQgdmlhIFtJc29sYXRlLnNwYXduXSksIGl0CiAgICogaXMgYWxzbyBwb3NzaWJsZSB0byBzZW5kIG9iamVjdCBpbnN0YW5jZXMgKHdoaWNoIHdvdWxkIGJlIGNvcGllZCBpbiB0aGUKICAgKiBwcm9jZXNzKS4gVGhpcyBpcyBjdXJyZW50bHkgb25seSBzdXBwb3J0ZWQgYnkgdGhlIGRhcnR2bS4gIEZvciBub3csIHRoZQogICAqIGRhcnQyanMgY29tcGlsZXIgb25seSBzdXBwb3J0cyB0aGUgcmVzdHJpY3RlZCBtZXNzYWdlcyBkZXNjcmliZWQgYWJvdmUuCiAgICoKICAgKiBUaGUgc2VuZCBoYXBwZW5zIGltbWVkaWF0ZWx5IGFuZCBkb2Vzbid0IGJsb2NrLiAgVGhlIGNvcnJlc3BvbmRpbmcgcmVjZWl2ZQogICAqIHBvcnQgY2FuIHJlY2VpdmUgdGhlIG1lc3NhZ2UgYXMgc29vbiBhcyBpdHMgaXNvbGF0ZSdzIGV2ZW50IGxvb3AgaXMgcmVhZHkKICAgKiB0byBkZWxpdmVyIGl0LCBpbmRlcGVuZGVudGx5IG9mIHdoYXQgdGhlIHNlbmRpbmcgaXNvbGF0ZSBpcyBkb2luZy4KICAgKi8KICB2b2lkIHNlbmQodmFyIG1lc3NhZ2UpOwoKICAvKioKICAgKiBUZXN0cyB3aGV0aGVyIFtvdGhlcl0gaXMgYSBbU2VuZFBvcnRdIHBvaW50aW5nIHRvIHRoZSBzYW1lCiAgICogW1JlY2VpdmVQb3J0XSBhcyB0aGlzIG9uZS4KICAgKi8KICBib29sIG9wZXJhdG9yID09KHZhciBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgYW4gaW1tdXRhYmxlIGhhc2ggY29kZSBmb3IgdGhpcyBzZW5kIHBvcnQgdGhhdCBpcwogICAqIGNvbnNpc3RlbnQgd2l0aCB0aGUgPT0gb3BlcmF0b3IuCiAgICovCiAgaW50IGdldCBoYXNoQ29kZTsKfQoKLyoqCiAqIFRvZ2V0aGVyIHdpdGggW1NlbmRQb3J0XSwgdGhlIG9ubHkgbWVhbnMgb2YgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGlzb2xhdGVzLgogKgogKiBbUmVjZWl2ZVBvcnRdcyBoYXZlIGEgYHNlbmRQb3J0YCBnZXR0ZXIgd2hpY2ggcmV0dXJucyBhIFtTZW5kUG9ydF0uCiAqIEFueSBtZXNzYWdlIHRoYXQgaXMgc2VudCB0aHJvdWdoIHRoaXMgW1NlbmRQb3J0XQogKiBpcyBkZWxpdmVyZWQgdG8gdGhlIFtSZWNlaXZlUG9ydF0gaXQgaGFzIGJlZW4gY3JlYXRlZCBmcm9tLiBUaGVyZSwgdGhlCiAqIG1lc3NhZ2UgaXMgZGlzcGF0Y2hlZCB0byB0aGUgYFJlY2VpdmVQb3J0YCdzIGxpc3RlbmVyLgogKgogKiBBIFtSZWNlaXZlUG9ydF0gaXMgYSBub24tYnJvYWRjYXN0IHN0cmVhbS4gVGhpcyBtZWFucyB0aGF0IGl0IGJ1ZmZlcnMKICogaW5jb21pbmcgbWVzc2FnZXMgdW50aWwgYSBsaXN0ZW5lciBpcyByZWdpc3RlcmVkLiBPbmx5IG9uZSBsaXN0ZW5lciBjYW4KICogcmVjZWl2ZSBtZXNzYWdlcy4gU2VlIFtTdHJlYW0uYXNCcm9hZGNhc3RTdHJlYW1dIGZvciB0cmFuc2Zvcm1pbmcgdGhlIHBvcnQKICogdG8gYSBicm9hZGNhc3Qgc3RyZWFtLgogKgogKiBBIFtSZWNlaXZlUG9ydF0gbWF5IGhhdmUgbWFueSBbU2VuZFBvcnRdcy4KICovCmFic3RyYWN0IGNsYXNzIFJlY2VpdmVQb3J0IGltcGxlbWVudHMgU3RyZWFtIHsKICAvKioKICAgKiBPcGVucyBhIGxvbmctbGl2ZWQgcG9ydCBmb3IgcmVjZWl2aW5nIG1lc3NhZ2VzLgogICAqCiAgICogQSBbUmVjZWl2ZVBvcnRdIGlzIGEgbm9uLWJyb2FkY2FzdCBzdHJlYW0uIFRoaXMgbWVhbnMgdGhhdCBpdCBidWZmZXJzCiAgICogaW5jb21pbmcgbWVzc2FnZXMgdW50aWwgYSBsaXN0ZW5lciBpcyByZWdpc3RlcmVkLiBPbmx5IG9uZSBsaXN0ZW5lciBjYW4KICAgKiByZWNlaXZlIG1lc3NhZ2VzLiBTZWUgW1N0cmVhbS5hc0Jyb2FkY2FzdFN0cmVhbV0gZm9yIHRyYW5zZm9ybWluZyB0aGUgcG9ydAogICAqIHRvIGEgYnJvYWRjYXN0IHN0cmVhbS4KICAgKgogICAqIEEgcmVjZWl2ZSBwb3J0IGlzIGNsb3NlZCBieSBjYW5jZWxpbmcgaXRzIHN1YnNjcmlwdGlvbi4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IFJlY2VpdmVQb3J0KCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbUmVjZWl2ZVBvcnRdIGZyb20gYSBbUmF3UmVjZWl2ZVBvcnRdLgogICAqCiAgICogVGhlIGhhbmRsZXIgb2YgdGhlIGdpdmVuIFtyYXdQb3J0XSBpcyBvdmVyd3JpdHRlbiBkdXJpbmcgdGhlIGNvbnN0cnVjdGlvbgogICAqIG9mIHRoZSByZXN1bHQuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBSZWNlaXZlUG9ydC5mcm9tUmF3UmVjZWl2ZVBvcnQoUmF3UmVjZWl2ZVBvcnQgcmF3UG9ydCk7CgogIC8qKgogICAqIEluaGVyaXRlZCBmcm9tIFtTdHJlYW1dLgogICAqCiAgICogTm90ZSB0aGF0IFtvbkVycm9yXSBhbmQgW2NhbmNlbE9uRXJyb3JdIGFyZSBpZ25vcmVkIHNpbmNlIGEgUmVjZWl2ZVBvcnQKICAgKiB3aWxsIG5ldmVyIHJlY2VpdmUgYW4gZXJyb3IuCiAgICoKICAgKiBUaGUgW29uRG9uZV0gaGFuZGxlciB3aWxsIGJlIGNhbGxlZCB3aGVuIHRoZSBzdHJlYW0gY2xvc2VzLgogICAqIFRoZSBzdHJlYW0gY2xvc2VzIHdoZW4gW2Nsb3NlXSBpcyBjYWxsZWQuCiAgICovCiAgU3RyZWFtU3Vic2NyaXB0aW9uIGxpc3Rlbih2b2lkIG9uRGF0YSh2YXIgbWVzc2FnZSksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KTsKCiAgLyoqCiAgICogQ2xvc2VzIGB0aGlzYC4KICAgKgogICAqIElmIHRoZSBzdHJlYW0gaGFzIG5vdCBiZWVuIGNhbmNlbGVkIHlldCwgYWRkcyBhIGNsb3NlLWV2ZW50IHRvIHRoZSBldmVudAogICAqIHF1ZXVlIGFuZCBkaXNjYXJkcyBhbnkgZnVydGhlciBpbmNvbWluZyBtZXNzYWdlcy4KICAgKgogICAqIElmIHRoZSBzdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBjYW5jZWxlZCB0aGlzIG1ldGhvZCBoYXMgbm8gZWZmZWN0LgogICAqLwogIHZvaWQgY2xvc2UoKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIFtTZW5kUG9ydF0gdGhhdCBzZW5kcyB0byB0aGlzIHJlY2VpdmUgcG9ydC4KICAgKi8KICBTZW5kUG9ydCBnZXQgc2VuZFBvcnQ7Cn0KCmFic3RyYWN0IGNsYXNzIFJhd1JlY2VpdmVQb3J0IHsKICAvKioKICAgKiBPcGVucyBhIGxvbmctbGl2ZWQgcG9ydCBmb3IgcmVjZWl2aW5nIG1lc3NhZ2VzLgogICAqCiAgICogQSBbUmF3UmVjZWl2ZVBvcnRdIGlzIGxvdyBsZXZlbCBhbmQgZG9lcyBub3Qgd29yayB3aXRoIFtab25lXXMuIEl0CiAgICogY2FuIG5vdCBiZSBwYXVzZWQuIFRoZSBkYXRhLWhhbmRsZXIgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBmaXJzdAogICAqIGV2ZW50IGlzIHJlY2VpdmVkLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgUmF3UmVjZWl2ZVBvcnQoW0Z1bmN0aW9uIGhhbmRsZXJdKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgaGFuZGxlciB0aGF0IGlzIGludm9rZWQgZm9yIGV2ZXJ5IGluY29taW5nIG1lc3NhZ2UuCiAgICoKICAgKiBUaGUgaGFuZGxlciBpcyBpbnZva2VkIGluIHRoZSByb290LXpvbmUgKFtab25lLnJvb3RdKS4KICAgKi8KICB2b2lkIHNldCBoYW5kbGVyKEZ1bmN0aW9uIG5ld0hhbmRsZXIpOwoKICAvKioKICAgKiBDbG9zZXMgdGhlIHBvcnQuCiAgICoKICAgKiBBZnRlciBhIGNhbGwgdG8gdGhpcyBtZXRob2QgYW55IGluY29taW5nIG1lc3NhZ2UgaXMgc2lsZW50bHkgZHJvcHBlZC4KICAgKi8KICB2b2lkIGNsb3NlKCk7CgogIC8qKgogICAqIFJldHVybnMgYSBbU2VuZFBvcnRdIHRoYXQgc2VuZHMgdG8gdGhpcyByYXcgcmVjZWl2ZSBwb3J0LgogICAqLwogIFNlbmRQb3J0IGdldCBzZW5kUG9ydDsKfQoKLyoqCiAqIERlc2NyaXB0aW9uIG9mIGFuIGVycm9yIGZyb20gYW5vdGhlciBpc29sYXRlLgogKgogKiBUaGlzIGVycm9yIGhhcyB0aGUgc2FtZSBgdG9TdHJpbmcoKWAgYW5kIGBzdGFja1RyYWNlLnRvU3RyaW5nKClgIGJlaGF2aW9yCiAqIGFzIHRoZSBvcmlnaW5hbCBlcnJvciwgYnV0IGhhcyBubyBvdGhlciBmZWF0dXJlcyBvZiB0aGUgb3JpZ2luYWwgZXJyb3IuCiAqLwpjbGFzcyBSZW1vdGVFcnJvciBpbXBsZW1lbnRzIEVycm9yIHsKICBmaW5hbCBTdHJpbmcgX2Rlc2NyaXB0aW9uOwogIGZpbmFsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZTsKICBSZW1vdGVFcnJvcihTdHJpbmcgZGVzY3JpcHRpb24sIFN0cmluZyBzdGFja0Rlc2NyaXB0aW9uKQogICAgICA6IF9kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLAogICAgICAgIHN0YWNrVHJhY2UgPSBuZXcgU3RhY2tUcmFjZS5mcm9tU3RyaW5nKHN0YWNrRGVzY3JpcHRpb24pOwogIFN0cmluZyB0b1N0cmluZygpID0+IF9kZXNjcmlwdGlvbjsKfQoKLyoqCiAqIEFuIGVmZmljaWVudGx5IHRyYW5zZmVyYWJsZSBzZXF1ZW5jZSBvZiBieXRlIHZhbHVlcy4KICoKICogQSBbVHJhbnNmZXJhYmxlVHlwZWREYXRhXSBpcyBjcmVhdGVkIGZyb20gYSBudW1iZXIgb2YgYnl0ZXMuCiAqIFRoaXMgd2lsbCB0YWtlIHRpbWUgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2YgYnl0ZXMuCiAqCiAqIFRoZSBbVHJhbnNmZXJhYmxlVHlwZWREYXRhXSBjYW4gYmUgbW92ZWQgYmV0d2VlbiBpc29sYXRlcywgc28KICogc2VuZGluZyBpdCB0aHJvdWdoIGEgc2VuZCBwb3J0IHdpbGwgb25seSB0YWtlIGNvbnN0YW50IHRpbWUuCiAqCiAqIFdoZW4gc2VudCB0aGlzIHdheSwgdGhlIGxvY2FsIHRyYW5zZmVyYWJsZSBjYW4gbm8gbG9uZ2VyIGJlIG1hdGVyaWFsaXplZCwKICogYW5kIHRoZSByZWNlaXZlZCBvYmplY3QgaXMgbm93IHRoZSBvbmx5IHdheSB0byBtYXRlcmlhbGl6ZSB0aGUgZGF0YS4KICovCkBTaW5jZSgiMi4zLjIiKQphYnN0cmFjdCBjbGFzcyBUcmFuc2ZlcmFibGVUeXBlZERhdGEgewogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgW1RyYW5zZmVyYWJsZVR5cGVkRGF0YV0gY29udGFpbmluZyB0aGUgYnl0ZXMgb2YgW2xpc3RdLgogICAqCiAgICogSXQgbXVzdCBiZSBwb3NzaWJsZSB0byBjcmVhdGUgYSBzaW5nbGUgW1VpbnQ4TGlzdF0gY29udGFpbmluZyB0aGUKICAgKiBieXRlcywgc28gaWYgdGhlcmUgYXJlIG1vcmUgYnl0ZXMgdGhhbiB3aGF0IHRoZSBwbGF0Zm9ybSBhbGxvd3MgaW4KICAgKiBhIHNpbmdsZSBbVWludDhMaXN0XSwgdGhlbiBjcmVhdGlvbiBmYWlscy4KICAgKi8KICBleHRlcm5hbCBmYWN0b3J5IFRyYW5zZmVyYWJsZVR5cGVkRGF0YS5mcm9tTGlzdChMaXN0PFR5cGVkRGF0YT4gbGlzdCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgW0J5dGVCdWZmZXJdIGNvbnRhaW5pbmcgdGhlIGJ5dGVzIHN0b3JlZCBpbiB0aGlzIFtUcmFuc2ZlcmFibGVUeXBlZERhdGFdLgogICAqCiAgICogVGhlIFtUcmFuc2ZlcmFibGVUeXBlZERhdGFdIGlzIGEgY3Jvc3MtaXNvbGF0ZSBzaW5nbGUtdXNlIHJlc291cmNlLgogICAqIFRoaXMgbWV0aG9kIG11c3Qgbm90IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBvbiB0aGUgc2FtZSB1bmRlcmx5aW5nCiAgICogdHJhbnNmZXJhYmxlIGJ5dGVzLCBldmVuIGlmIHRoZSBjYWxscyBvY2N1ciBpbiBkaWZmZXJlbnQgaXNvbGF0ZXMuCiAgICovCiAgQnl0ZUJ1ZmZlciBtYXRlcmlhbGl6ZSgpOwp9CoMXAE5OPAEELDMbJAMlAx4DEgQWARUkQAEYAQQtBDM4GBwnOgIBBCcDTE05A0wYQQNLSgNRIANHQkwaA01EH0klA0RASToDTk01BBBCIk4oAQZABS4FOR8FTEk2Bh4BBjsFLU8xMAVJTAYkAQY/BUFKPDYGKAEGPQVQBU8xBVBNFgYQIQEGSgVFHwVIKE9NFwVNSwUODSpDJwlISUgGTwEGQgUyJgVHRxAFSUYpBicBBk8FTxAGTC8BBjYFSUwlBjEBBi8FR0MaBkEBBkwOBUYdSxsFQjA1NThAQEElBTxDBTEyR0tMBVFBRUkOBU8pBVAwBUVIRSgFTEMGLC0bGxcYKAEGTBgFTxkFSQ8FEBQdBUxMBTEyS0wFUUFFSQ4FRUhFKAU9TkpNMQVOFgVFTCs3BU8FT0kOBUlNEQVGS0BPKwVEFAVPKQVLQwYsDxkTGxcYGxQnQhsZLhQeAQYkBTsySzw1BUM4SBwFOz1KFwVHRgU9RwVAQSQFRjE8BjQrHh0EAS01AQYfBUMkBUVDBUhGMAY1AQZNBVFPFAVQPEgFRyMFTBZJOgVOSB1IQR4GTDQGTQEGOQVLTUNFBU5RFAVOTw4FQTQGPQEGPgVIKwVDQgVOTB1IRR4GNQEGKAUzPgVCJk0FQE9APxxMSUZFTBgFTjE7BjcBBkYFTBZJOgVBMgVFSQVERUA3RkVMGAYsMwEGSwU1SjFIPFEFQC9IAU1PSwVOTTMGMQEGOwVFR0JFBU1QFgU+MwY0AQZFBT0FQkY0BUsGFiEZICIwMEc0BgExFBcyMAsXMxgXDB4EAgEEKQNJUDADUA4EMAZEIgVRUTwFUFFNTU0FUE9IBhoBBkAgBh8BBj8mBhQCAQRPA0c0SjoDSUtOGgMuBC8GNQVLTVAcBT0GIgEGNgVPFAZLAQYeBU0iBUEvBjY+AQYUBU43BUgGEAEGOwYZAgEgBjUFSEYYBjcBBkIFPAYpAQYWBUsGEAEGPwYZAgEEMQNNSwQlHR87JEIlAgEEOANAPANBQANNSAQQJwZLBUdIMAZJAQZdBUlKSAYcAgEMZGFydDppc29sYXRlMm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvaXNvbGF0ZV9wYXRjaC5kYXJ0wABQsS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTm90ZTogdGhlIFZNIGNvbmNhdGVuYXRlcyBhbGwgcGF0Y2ggZmlsZXMgaW50byBhIHNpbmdsZSBwYXRjaCBmaWxlLiBUaGlzCi8vLyBmaWxlIGlzIHRoZSBmaXJzdCBwYXRjaCBpbiAiZGFydDppc29sYXRlIiB3aGljaCBjb250YWlucyBhbGwgdGhlIGltcG9ydHMKLy8vIHVzZWQgYnkgcGF0Y2hlcyBvZiB0aGF0IGxpYnJhcnkuIFdlIHBsYW4gdG8gY2hhbmdlIHRoaXMgd2hlbiB3ZSBoYXZlIGEKLy8vIHNoYXJlZCBmcm9udCBlbmQgYW5kIHNpbXBseSB1c2UgcGFydHMuCgppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IENsYXNzSUQsIFZNTGlicmFyeUhvb2tzLCBwYXRjaDsKCmltcG9ydCAiZGFydDphc3luYyIKICAgIHNob3cgQ29tcGxldGVyLCBGdXR1cmUsIFN0cmVhbSwgU3RyZWFtQ29udHJvbGxlciwgU3RyZWFtU3Vic2NyaXB0aW9uLCBUaW1lcjsKCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIiBzaG93IEhhc2hNYXA7CmltcG9ydCAiZGFydDp0eXBlZF9kYXRhIiBzaG93IEJ5dGVCdWZmZXIsIFR5cGVkRGF0YSwgVWludDhMaXN0OwoKLy8vIFRoZXNlIGFyZSB0aGUgYWRkaXRpb25hbCBwYXJ0cyBvZiB0aGlzIHBhdGNoIGxpYnJhcnk6Ci8vIHBhcnQgInRpbWVyX2ltcGwuZGFydCI7CgpAcGF0Y2gKY2xhc3MgUmVjZWl2ZVBvcnQgewogIEBwYXRjaAogIGZhY3RvcnkgUmVjZWl2ZVBvcnQoKSA9PiBuZXcgX1JlY2VpdmVQb3J0SW1wbCgpOwoKICBAcGF0Y2gKICBmYWN0b3J5IFJlY2VpdmVQb3J0LmZyb21SYXdSZWNlaXZlUG9ydChSYXdSZWNlaXZlUG9ydCByYXdQb3J0KSB7CiAgICByZXR1cm4gbmV3IF9SZWNlaXZlUG9ydEltcGwuZnJvbVJhd1JlY2VpdmVQb3J0KHJhd1BvcnQpOwogIH0KfQoKQHBhdGNoCmNsYXNzIENhcGFiaWxpdHkgewogIEBwYXRjaAogIGZhY3RvcnkgQ2FwYWJpbGl0eSgpID0+IG5ldyBfQ2FwYWJpbGl0eUltcGwoKTsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfQ2FwYWJpbGl0eUltcGwgaW1wbGVtZW50cyBDYXBhYmlsaXR5IHsKICBmYWN0b3J5IF9DYXBhYmlsaXR5SW1wbCgpIG5hdGl2ZSAiQ2FwYWJpbGl0eUltcGxfZmFjdG9yeSI7CgogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKSB7CiAgICByZXR1cm4gKG90aGVyIGlzIF9DYXBhYmlsaXR5SW1wbCkgJiYgX2VxdWFscyhvdGhlcik7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIHJldHVybiBfZ2V0X2hhc2hjb2RlKCk7CiAgfQoKICBfZXF1YWxzKG90aGVyKSBuYXRpdmUgIkNhcGFiaWxpdHlJbXBsX2VxdWFscyI7CiAgX2dldF9oYXNoY29kZSgpIG5hdGl2ZSAiQ2FwYWJpbGl0eUltcGxfZ2V0X2hhc2hjb2RlIjsKfQoKQHBhdGNoCmNsYXNzIFJhd1JlY2VpdmVQb3J0IHsKICAvKioKICAgKiBPcGVucyBhIGxvbmctbGl2ZWQgcG9ydCBmb3IgcmVjZWl2aW5nIG1lc3NhZ2VzLgogICAqCiAgICogQSBbUmF3UmVjZWl2ZVBvcnRdIGlzIGxvdyBsZXZlbCBhbmQgZG9lcyBub3Qgd29yayB3aXRoIFtab25lXXMuIEl0CiAgICogY2FuIG5vdCBiZSBwYXVzZWQuIFRoZSBkYXRhLWhhbmRsZXIgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBmaXJzdAogICAqIGV2ZW50IGlzIHJlY2VpdmVkLgogICAqLwogIEBwYXRjaAogIGZhY3RvcnkgUmF3UmVjZWl2ZVBvcnQoW0Z1bmN0aW9uIGhhbmRsZXJdKSB7CiAgICBfUmF3UmVjZWl2ZVBvcnRJbXBsIHJlc3VsdCA9IG5ldyBfUmF3UmVjZWl2ZVBvcnRJbXBsKCk7CiAgICByZXN1bHQuaGFuZGxlciA9IGhhbmRsZXI7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KfQoKY2xhc3MgX1JlY2VpdmVQb3J0SW1wbCBleHRlbmRzIFN0cmVhbSBpbXBsZW1lbnRzIFJlY2VpdmVQb3J0IHsKICBfUmVjZWl2ZVBvcnRJbXBsKCkgOiB0aGlzLmZyb21SYXdSZWNlaXZlUG9ydChuZXcgUmF3UmVjZWl2ZVBvcnQoKSk7CgogIF9SZWNlaXZlUG9ydEltcGwuZnJvbVJhd1JlY2VpdmVQb3J0KHRoaXMuX3Jhd1BvcnQpIHsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXIob25DYW5jZWw6IGNsb3NlLCBzeW5jOiB0cnVlKTsKICAgIF9yYXdQb3J0LmhhbmRsZXIgPSBfY29udHJvbGxlci5hZGQ7CiAgfQoKICBTZW5kUG9ydCBnZXQgc2VuZFBvcnQgewogICAgcmV0dXJuIF9yYXdQb3J0LnNlbmRQb3J0OwogIH0KCiAgU3RyZWFtU3Vic2NyaXB0aW9uIGxpc3Rlbih2b2lkIG9uRGF0YSh2YXIgbWVzc2FnZSksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gX2NvbnRyb2xsZXIuc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgY2xvc2UoKSB7CiAgICBfcmF3UG9ydC5jbG9zZSgpOwogICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICB9CgogIGZpbmFsIFJhd1JlY2VpdmVQb3J0IF9yYXdQb3J0OwogIFN0cmVhbUNvbnRyb2xsZXIgX2NvbnRyb2xsZXI7Cn0KCnR5cGVkZWYgdm9pZCBfSW1tZWRpYXRlQ2FsbGJhY2soKTsKCi8vLyBUaGUgY2FsbGJhY2sgdGhhdCBoYXMgYmVlbiByZWdpc3RlcmVkIHRocm91Z2ggYHNjaGVkdWxlSW1tZWRpYXRlYC4KX0ltbWVkaWF0ZUNhbGxiYWNrIF9wZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2s7CgovLy8gVGhlIGNsb3N1cmUgdGhhdCBzaG91bGQgYmUgdXNlZCBhcyBzY2hlZHVsZUltbWVkaWF0ZUNsb3N1cmUsIHdoZW4gdGhlIFZNCi8vLyBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGV2ZW50IGxvb3AuCnZvaWQgX2lzb2xhdGVTY2hlZHVsZUltbWVkaWF0ZSh2b2lkIGNhbGxiYWNrKCkpIHsKICBhc3NlcnQoKF9wZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2sgPT0gbnVsbCkgfHwKICAgICAgKF9wZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2sgPT0gY2FsbGJhY2spKTsKICBfcGVuZGluZ0ltbWVkaWF0ZUNhbGxiYWNrID0gY2FsbGJhY2s7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQp2b2lkIF9ydW5QZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2soKSB7CiAgaWYgKF9wZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2sgIT0gbnVsbCkgewogICAgdmFyIGNhbGxiYWNrID0gX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjazsKICAgIF9wZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2sgPSBudWxsOwogICAgY2FsbGJhY2soKTsKICB9Cn0KCl9JbW1lZGlhdGVDYWxsYmFjayBfcmVtb3ZlUGVuZGluZ0ltbWVkaWF0ZUNhbGxiYWNrKCkgewogIHZhciBjYWxsYmFjayA9IF9wZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2s7CiAgX3BlbmRpbmdJbW1lZGlhdGVDYWxsYmFjayA9IG51bGw7CiAgcmV0dXJuIGNhbGxiYWNrOwp9CgovLy8gVGhlIGVtYmVkZGVyIGNhbiBleGVjdXRlIHRoaXMgZnVuY3Rpb24gdG8gZ2V0IGhvbGQgb2YKLy8vIFtfaXNvbGF0ZVNjaGVkdWxlSW1tZWRpYXRlXSBhYm92ZS4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCkZ1bmN0aW9uIF9nZXRJc29sYXRlU2NoZWR1bGVJbW1lZGlhdGVDbG9zdXJlKCkgewogIHJldHVybiBfaXNvbGF0ZVNjaGVkdWxlSW1tZWRpYXRlOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9SYXdSZWNlaXZlUG9ydEltcGwgaW1wbGVtZW50cyBSYXdSZWNlaXZlUG9ydCB7CiAgZmFjdG9yeSBfUmF3UmVjZWl2ZVBvcnRJbXBsKCkgbmF0aXZlICJSYXdSZWNlaXZlUG9ydEltcGxfZmFjdG9yeSI7CgogIGNsb3NlKCkgewogICAgLy8gQ2xvc2UgdGhlIHBvcnQgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBoYW5kbGVyIG1hcC4KICAgIF9oYW5kbGVyTWFwLnJlbW92ZSh0aGlzLl9jbG9zZUludGVybmFsKCkpOwogIH0KCiAgU2VuZFBvcnQgZ2V0IHNlbmRQb3J0IHsKICAgIHJldHVybiBfZ2V0X3NlbmRwb3J0KCk7CiAgfQoKICBib29sIG9wZXJhdG9yID09KHZhciBvdGhlcikgewogICAgcmV0dXJuIChvdGhlciBpcyBfUmF3UmVjZWl2ZVBvcnRJbXBsKSAmJgogICAgICAgICh0aGlzLl9nZXRfaWQoKSA9PSBvdGhlci5fZ2V0X2lkKCkpOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gc2VuZFBvcnQuaGFzaENvZGU7CiAgfQoKICAvKioqKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzICoqKiovCiAgX2dldF9pZCgpIG5hdGl2ZSAiUmF3UmVjZWl2ZVBvcnRJbXBsX2dldF9pZCI7CiAgX2dldF9zZW5kcG9ydCgpIG5hdGl2ZSAiUmF3UmVjZWl2ZVBvcnRJbXBsX2dldF9zZW5kcG9ydCI7CgogIC8vIENhbGxlZCBmcm9tIHRoZSBWTSB0byByZXRyaWV2ZSB0aGUgaGFuZGxlciBmb3IgYSBtZXNzYWdlLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIHN0YXRpYyBfbG9va3VwSGFuZGxlcihpbnQgaWQpIHsKICAgIHZhciByZXN1bHQgPSBfaGFuZGxlck1hcFtpZF07CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gQ2FsbGVkIGZyb20gdGhlIFZNIHRvIGRpc3BhdGNoIHRvIHRoZSBoYW5kbGVyLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIHN0YXRpYyB2b2lkIF9oYW5kbGVNZXNzYWdlKEZ1bmN0aW9uIGhhbmRsZXIsIHZhciBtZXNzYWdlKSB7CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogdGhpcyByZWxpZXMgb24gdGhlIGZhY3QgdGhhdCBhbnkgZXhjZXB0aW9uIGFib3J0cyB0aGUKICAgIC8vIFZNLiBPbmNlIHdlIGhhdmUgbm9uLWZhdGFsIGdsb2JhbCBleGNlcHRpb25zIHdlIG5lZWQgdG8gY2F0Y2ggZXJyb3JzCiAgICAvLyBzbyB0aGF0IHdlIGNhbiBydW4gdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MuCiAgICBoYW5kbGVyKG1lc3NhZ2UpOwogICAgX3J1blBlbmRpbmdJbW1lZGlhdGVDYWxsYmFjaygpOwogIH0KCiAgLy8gQ2FsbCBpbnRvIHRoZSBWTSB0byBjbG9zZSB0aGUgVk0gbWFpbnRhaW5lZCBtYXBwaW5ncy4KICBfY2xvc2VJbnRlcm5hbCgpIG5hdGl2ZSAiUmF3UmVjZWl2ZVBvcnRJbXBsX2Nsb3NlSW50ZXJuYWwiOwoKICB2b2lkIHNldCBoYW5kbGVyKEZ1bmN0aW9uIHZhbHVlKSB7CiAgICBfaGFuZGxlck1hcFt0aGlzLl9nZXRfaWQoKV0gPSB2YWx1ZTsKICB9CgogIC8vIFRPRE8oaXBvc3ZhKTogSWRlYWxseSBrZWVwIHRoaXMgbWFwIGluIHRoZSBWTS4KICAvLyBpZCB0byBoYW5kbGVyIG1hcHBpbmcuCiAgc3RhdGljIF9pbml0SGFuZGxlck1hcCgpIHsKICAgIC8vIFRPRE8oMTg1MTEpOiBXb3JrYXJvdW5kIGJhZCBDaGVja1NtaSBob2lzdGluZy4KICAgIHZhciB0ZW1wTWFwID0gbmV3IEhhc2hNYXAoKTsKICAgIC8vIENvbGxlY3QgZmVlZGJhY2sgdGhhdCBub3QgYWxsIGtleXMgYXJlIFNtaXMuCiAgICB0ZW1wTWFwWyIuIl0gPSAxOwogICAgdGVtcE1hcFsiLiJdID0gMjsKCiAgICByZXR1cm4gbmV3IEhhc2hNYXAoKTsKICB9CgogIHN0YXRpYyBmaW5hbCBNYXAgX2hhbmRsZXJNYXAgPSBfaW5pdEhhbmRsZXJNYXAoKTsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfU2VuZFBvcnRJbXBsIGltcGxlbWVudHMgU2VuZFBvcnQgewogIGZhY3RvcnkgX1NlbmRQb3J0SW1wbC5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgLyotLS0gcHVibGljIGludGVyZmFjZSAtLS0qLwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIHZvaWQgc2VuZCh2YXIgbWVzc2FnZSkgewogICAgX3NlbmRJbnRlcm5hbChtZXNzYWdlKTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0odmFyIG90aGVyKSB7CiAgICByZXR1cm4gKG90aGVyIGlzIF9TZW5kUG9ydEltcGwpICYmICh0aGlzLl9nZXRfaWQoKSA9PSBvdGhlci5fZ2V0X2lkKCkpOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICByZXR1cm4gX2dldF9oYXNoY29kZSgpOwogIH0KCiAgLyotLS0gcHJpdmF0ZSBpbXBsZW1lbnRhdGlvbiAtLS0qLwogIF9nZXRfaWQoKSBuYXRpdmUgIlNlbmRQb3J0SW1wbF9nZXRfaWQiOwogIF9nZXRfaGFzaGNvZGUoKSBuYXRpdmUgIlNlbmRQb3J0SW1wbF9nZXRfaGFzaGNvZGUiOwoKICAvLyBGb3J3YXJkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBzZW5kaW5nIG1lc3NhZ2VzIHRvIHRoZSBWTS4KICB2b2lkIF9zZW5kSW50ZXJuYWwodmFyIG1lc3NhZ2UpIG5hdGl2ZSAiU2VuZFBvcnRJbXBsX3NlbmRJbnRlcm5hbF8iOwp9Cgp0eXBlZGVmIF9OdWxsYXJ5RnVuY3Rpb24oKTsKdHlwZWRlZiBfVW5hcnlGdW5jdGlvbihOdWxsIGFyZ3MpOwp0eXBlZGVmIF9CaW5hcnlGdW5jdGlvbihOdWxsIGFyZ3MsIE51bGwgbWVzc2FnZSk7CgovKioKICogVGFrZXMgdGhlIHJlYWwgZW50cnkgcG9pbnQgYXMgYXJndW1lbnQgYW5kIGludm9rZXMgaXQgd2l0aCB0aGUKICogaW5pdGlhbCBtZXNzYWdlLiAgRGVmZXJzIGV4ZWN1dGlvbiBvZiB0aGUgZW50cnkgcG9pbnQgdW50aWwgdGhlCiAqIGlzb2xhdGUgaXMgaW4gdGhlIG1lc3NhZ2UgbG9vcC4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQp2b2lkIF9zdGFydE1haW5Jc29sYXRlKEZ1bmN0aW9uIGVudHJ5UG9pbnQsIExpc3Q8U3RyaW5nPiBhcmdzKSB7CiAgX3N0YXJ0SXNvbGF0ZSgKICAgICAgbnVsbCwgLy8gbm8gcGFyZW50IHBvcnQKICAgICAgZW50cnlQb2ludCwKICAgICAgYXJncywKICAgICAgbnVsbCwgLy8gbm8gbWVzc2FnZQogICAgICB0cnVlLCAvLyBpc1NwYXduVXJpCiAgICAgIG51bGwsIC8vIG5vIGNvbnRyb2wgcG9ydAogICAgICBudWxsKTsgLy8gbm8gY2FwYWJpbGl0aWVzCn0KCi8qKgogKiBSZXR1cm5zIHRoZSBfc3RhcnRNYWluSXNvbGF0ZSBmdW5jdGlvbi4gVGhpcyBjbG9zdXJpemF0aW9uIGFsbG93cyBlbWJlZGRlcnMKICogdG8gc2V0dXAgdHJhbXBvbGluZXMgdG8gdGhlIG1haW4gZnVuY3Rpb24uIFRoaXMgd29ya2Fyb3VuZCBjYW4gYmUgcmVtb3ZlZAogKiBvbmNlIHN1cHBvcnQgZm9yIEBwcmFnbWEoInZtOmVudHJ5X3BvaW50IiwgImdldCIpIGFzIGRvY3VtZW50ZWQgaW4KICogaHR0cHM6Ly9naXRodWIuY29tL2RhcnQtbGFuZy9zZGsvaXNzdWVzLzM1NzIwIGxhbmRzLgogKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCkZ1bmN0aW9uIF9nZXRTdGFydE1haW5Jc29sYXRlRnVuY3Rpb24oKSB7CiAgcmV0dXJuIF9zdGFydE1haW5Jc29sYXRlOwp9CgovKioKICogVGFrZXMgdGhlIHJlYWwgZW50cnkgcG9pbnQgYXMgYXJndW1lbnQgYW5kIGludm9rZXMgaXQgd2l0aCB0aGUgaW5pdGlhbAogKiBtZXNzYWdlLgogKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCnZvaWQgX3N0YXJ0SXNvbGF0ZSgKICAgIFNlbmRQb3J0IHBhcmVudFBvcnQsCiAgICBGdW5jdGlvbiBlbnRyeVBvaW50LAogICAgTGlzdDxTdHJpbmc+IGFyZ3MsCiAgICB2YXIgbWVzc2FnZSwKICAgIGJvb2wgaXNTcGF3blVyaSwKICAgIFJhd1JlY2VpdmVQb3J0IGNvbnRyb2xQb3J0LAogICAgTGlzdCBjYXBhYmlsaXRpZXMpIHsKICAvLyBUaGUgY29udHJvbCBwb3J0IChha2EgdGhlIG1haW4gaXNvbGF0ZSBwb3J0KSBkb2VzIG5vdCBoYW5kbGUgYW55IG1lc3NhZ2VzLgogIGlmIChjb250cm9sUG9ydCAhPSBudWxsKSB7CiAgICBjb250cm9sUG9ydC5oYW5kbGVyID0gKF8pIHt9OyAvLyBOb2JvZHkgaG9tZSBvbiB0aGUgY29udHJvbCBwb3J0LgogIH0KCiAgaWYgKHBhcmVudFBvcnQgIT0gbnVsbCkgewogICAgLy8gQnVpbGQgYSBtZXNzYWdlIHRvIG91ciBwYXJlbnQgaXNvbGF0ZSBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZQogICAgLy8gY3VycmVudCBpc29sYXRlJ3MgY29udHJvbCBwb3J0IGFuZCBjYXBhYmlsaXRpZXMuCiAgICAvLwogICAgLy8gVE9ETyhmbG9pdHNjaCk6IFNlbmQgYW4gZXJyb3IgbWVzc2FnZSBpZiB3ZSBjYW4ndCBmaW5kIHRoZSBlbnRyeSBwb2ludC4KICAgIHZhciByZWFkeU1lc3NhZ2UgPSBuZXcgTGlzdCgyKTsKICAgIHJlYWR5TWVzc2FnZVswXSA9IGNvbnRyb2xQb3J0LnNlbmRQb3J0OwogICAgcmVhZHlNZXNzYWdlWzFdID0gY2FwYWJpbGl0aWVzOwoKICAgIC8vIE91dCBvZiBhbiBleGNlc3Mgb2YgcGFyYW5vaWEgd2UgY2xlYXIgdGhlIGNhcGFiaWxpdGllcyBmcm9tIHRoZQogICAgLy8gc3RhY2suICBOb3QgcmVhbGx5IG5lY2Vzc2FyeS4KICAgIGNhcGFiaWxpdGllcyA9IG51bGw7CiAgICBwYXJlbnRQb3J0LnNlbmQocmVhZHlNZXNzYWdlKTsKICB9CiAgYXNzZXJ0KGNhcGFiaWxpdGllcyA9PSBudWxsKTsKCiAgLy8gRGVsYXkgYWxsIHVzZXIgY29kZSBoYW5kbGluZyB0byB0aGUgbmV4dCBydW4gb2YgdGhlIG1lc3NhZ2UgbG9vcC4gVGhpcwogIC8vIGFsbG93cyB1cyB0byBpbnRlcmNlcHQgY2VydGFpbiBjb25kaXRpb25zIGluIHRoZSBldmVudCBkaXNwYXRjaCwgc3VjaCBhcwogIC8vIHN0YXJ0aW5nIGluIHBhdXNlZCBzdGF0ZS4KICBSYXdSZWNlaXZlUG9ydCBwb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KCk7CiAgcG9ydC5oYW5kbGVyID0gKF8pIHsKICAgIHBvcnQuY2xvc2UoKTsKCiAgICBpZiAoaXNTcGF3blVyaSkgewogICAgICBpZiAoZW50cnlQb2ludCBpcyBfQmluYXJ5RnVuY3Rpb24pIHsKICAgICAgICAoZW50cnlQb2ludCBhcyBkeW5hbWljKShhcmdzLCBtZXNzYWdlKTsKICAgICAgfSBlbHNlIGlmIChlbnRyeVBvaW50IGlzIF9VbmFyeUZ1bmN0aW9uKSB7CiAgICAgICAgKGVudHJ5UG9pbnQgYXMgZHluYW1pYykoYXJncyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZW50cnlQb2ludCgpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBlbnRyeVBvaW50KG1lc3NhZ2UpOwogICAgfQogIH07CiAgLy8gTWFrZSBzdXJlIHRoZSBtZXNzYWdlIGhhbmRsZXIgaXMgdHJpZ2dlcmVkLgogIHBvcnQuc2VuZFBvcnQuc2VuZChudWxsKTsKfQoKQHBhdGNoCmNsYXNzIElzb2xhdGUgewogIHN0YXRpYyBmaW5hbCBfY3VycmVudElzb2xhdGUgPSBfZ2V0Q3VycmVudElzb2xhdGUoKTsKICBzdGF0aWMgZmluYWwgX3Jvb3RVcmkgPSBfZ2V0Q3VycmVudFJvb3RVcmkoKTsKCiAgQHBhdGNoCiAgc3RhdGljIElzb2xhdGUgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnRJc29sYXRlOwoKICBAcGF0Y2gKICBTdHJpbmcgZ2V0IGRlYnVnTmFtZSA9PiBfZ2V0RGVidWdOYW1lKGNvbnRyb2xQb3J0KTsKCiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxVcmk+IGdldCBwYWNrYWdlUm9vdCB7CiAgICB2YXIgaG9vayA9IFZNTGlicmFyeUhvb2tzLnBhY2thZ2VSb290VXJpRnV0dXJlOwogICAgaWYgKGhvb2sgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiSXNvbGF0ZS5wYWNrYWdlUm9vdCIpOwogICAgfQogICAgcmV0dXJuIGhvb2soKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8VXJpPiBnZXQgcGFja2FnZUNvbmZpZyB7CiAgICB2YXIgaG9vayA9IFZNTGlicmFyeUhvb2tzLnBhY2thZ2VDb25maWdVcmlGdXR1cmU7CiAgICBpZiAoaG9vayA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJJc29sYXRlLnBhY2thZ2VDb25maWciKTsKICAgIH0KICAgIHJldHVybiBob29rKCk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPFVyaT4gcmVzb2x2ZVBhY2thZ2VVcmkoVXJpIHBhY2thZ2VVcmkpIHsKICAgIHZhciBob29rID0gVk1MaWJyYXJ5SG9va3MucmVzb2x2ZVBhY2thZ2VVcmlGdXR1cmU7CiAgICBpZiAoaG9vayA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJJc29sYXRlLnJlc29sdmVQYWNrYWdlVXJpIik7CiAgICB9CiAgICByZXR1cm4gaG9vayhwYWNrYWdlVXJpKTsKICB9CgogIHN0YXRpYyBib29sIF9wYWNrYWdlU3VwcG9ydGVkKCkgPT4KICAgICAgKFZNTGlicmFyeUhvb2tzLnBhY2thZ2VSb290VXJpRnV0dXJlICE9IG51bGwpICYmCiAgICAgIChWTUxpYnJhcnlIb29rcy5wYWNrYWdlQ29uZmlnVXJpRnV0dXJlICE9IG51bGwpICYmCiAgICAgIChWTUxpYnJhcnlIb29rcy5yZXNvbHZlUGFja2FnZVVyaUZ1dHVyZSAhPSBudWxsKTsKCiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxJc29sYXRlPiBzcGF3bjxUPih2b2lkIGVudHJ5UG9pbnQoVCBtZXNzYWdlKSwgVCBtZXNzYWdlLAogICAgICB7Ym9vbCBwYXVzZWQ6IGZhbHNlLAogICAgICBib29sIGVycm9yc0FyZUZhdGFsLAogICAgICBTZW5kUG9ydCBvbkV4aXQsCiAgICAgIFNlbmRQb3J0IG9uRXJyb3IsCiAgICAgIFN0cmluZyBkZWJ1Z05hbWV9KSBhc3luYyB7CiAgICAvLyBgcGF1c2VkYCBpc24ndCBoYW5kbGVkIHlldC4KICAgIFJhd1JlY2VpdmVQb3J0IHJlYWR5UG9ydDsKICAgIHRyeSB7CiAgICAgIC8vIENoZWNrIGZvciB0aGUgdHlwZSBvZiBgZW50cnlQb2ludGAgb24gdGhlIHNwYXduaW5nIGlzb2xhdGUgdG8gbWFrZQogICAgICAvLyBlcnJvci1oYW5kbGluZyBlYXNpZXIuCiAgICAgIGlmIChlbnRyeVBvaW50IGlzISBfVW5hcnlGdW5jdGlvbikgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKGVudHJ5UG9pbnQpOwogICAgICB9CiAgICAgIC8vIFRoZSBWTSB3aWxsIGludm9rZSBbX3N0YXJ0SXNvbGF0ZV0gd2l0aCBlbnRyeVBvaW50IGFzIGFyZ3VtZW50LgogICAgICByZWFkeVBvcnQgPSBuZXcgUmF3UmVjZWl2ZVBvcnQoKTsKCiAgICAgIC8vIFdlIGRvIG5vdCBpbmhlcml0IHRoZSBwYWNrYWdlIGNvbmZpZyBzZXR0aW5ncyBmcm9tIHRoZSBwYXJlbnQgaXNvbGF0ZSwKICAgICAgLy8gaW5zdGVhZCB3ZSB1c2UgdGhlIHZhbHVlcyB0aGF0IHdlcmUgc2V0IG9uIHRoZSBjb21tYW5kIGxpbmUuCiAgICAgIHZhciBwYWNrYWdlQ29uZmlnID0gVk1MaWJyYXJ5SG9va3MucGFja2FnZUNvbmZpZ1N0cmluZzsKICAgICAgdmFyIHNjcmlwdCA9IFZNTGlicmFyeUhvb2tzLnBsYXRmb3JtU2NyaXB0OwogICAgICBpZiAoc2NyaXB0ID09IG51bGwpIHsKICAgICAgICAvLyBXZSBkbyBub3QgaGF2ZSBlbm91Z2ggaW5mb3JtYXRpb24gdG8gc3VwcG9ydCBzcGF3bmluZyB0aGUgbmV3CiAgICAgICAgLy8gaXNvbGF0ZS4KICAgICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiSXNvbGF0ZS5zcGF3biIpOwogICAgICB9CiAgICAgIGlmIChzY3JpcHQuc2NoZW1lID09ICJwYWNrYWdlIikgewogICAgICAgIHNjcmlwdCA9IGF3YWl0IElzb2xhdGUucmVzb2x2ZVBhY2thZ2VVcmkoc2NyaXB0KTsKICAgICAgfQoKICAgICAgX3NwYXduRnVuY3Rpb24oCiAgICAgICAgICByZWFkeVBvcnQuc2VuZFBvcnQsCiAgICAgICAgICBzY3JpcHQudG9TdHJpbmcoKSwKICAgICAgICAgIGVudHJ5UG9pbnQsCiAgICAgICAgICBtZXNzYWdlLAogICAgICAgICAgcGF1c2VkLAogICAgICAgICAgZXJyb3JzQXJlRmF0YWwsCiAgICAgICAgICBvbkV4aXQsCiAgICAgICAgICBvbkVycm9yLAogICAgICAgICAgbnVsbCwKICAgICAgICAgIHBhY2thZ2VDb25maWcsCiAgICAgICAgICBkZWJ1Z05hbWUpOwogICAgICByZXR1cm4gYXdhaXQgX3NwYXduQ29tbW9uKHJlYWR5UG9ydCk7CiAgICB9IGNhdGNoIChlLCBzdCkgewogICAgICBpZiAocmVhZHlQb3J0ICE9IG51bGwpIHsKICAgICAgICByZWFkeVBvcnQuY2xvc2UoKTsKICAgICAgfQogICAgICByZXR1cm4gYXdhaXQgbmV3IEZ1dHVyZTxJc29sYXRlPi5lcnJvcihlLCBzdCk7CiAgICB9CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPElzb2xhdGU+IHNwYXduVXJpKFVyaSB1cmksIExpc3Q8U3RyaW5nPiBhcmdzLCB2YXIgbWVzc2FnZSwKICAgICAge2Jvb2wgcGF1c2VkOiBmYWxzZSwKICAgICAgU2VuZFBvcnQgb25FeGl0LAogICAgICBTZW5kUG9ydCBvbkVycm9yLAogICAgICBib29sIGVycm9yc0FyZUZhdGFsLAogICAgICBib29sIGNoZWNrZWQsCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICAgIFVyaSBwYWNrYWdlUm9vdCwKICAgICAgVXJpIHBhY2thZ2VDb25maWcsCiAgICAgIGJvb2wgYXV0b21hdGljUGFja2FnZVJlc29sdXRpb246IGZhbHNlLAogICAgICBTdHJpbmcgZGVidWdOYW1lfSkgYXN5bmMgewogICAgUmF3UmVjZWl2ZVBvcnQgcmVhZHlQb3J0OwogICAgaWYgKGVudmlyb25tZW50ICE9IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcigiZW52aXJvbm1lbnQiKTsKICAgIH0KCiAgICAvLyBWZXJpZnkgdGhhdCBubyBtdXR1YWxseSBleGNsdXNpdmUgYXJndW1lbnRzIGhhdmUgYmVlbiBwYXNzZWQuCiAgICBpZiAoYXV0b21hdGljUGFja2FnZVJlc29sdXRpb24pIHsKICAgICAgaWYgKHBhY2thZ2VSb290ICE9IG51bGwpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiQ2Fubm90IHNpbXVsdGFuZW91c2x5IHJlcXVlc3QgIgogICAgICAgICAgICAiYXV0b21hdGljUGFja2FnZVJlc29sdXRpb24gYW5kIHNwZWNpZnkgYSIKICAgICAgICAgICAgInBhY2thZ2VSb290LiIpOwogICAgICB9CiAgICAgIGlmIChwYWNrYWdlQ29uZmlnICE9IG51bGwpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiQ2Fubm90IHNpbXVsdGFuZW91c2x5IHJlcXVlc3QgIgogICAgICAgICAgICAiYXV0b21hdGljUGFja2FnZVJlc29sdXRpb24gYW5kIHNwZWNpZnkgYSIKICAgICAgICAgICAgInBhY2thZ2VDb25maWcuIik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmICgocGFja2FnZVJvb3QgIT0gbnVsbCkgJiYgKHBhY2thZ2VDb25maWcgIT0gbnVsbCkpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiQ2Fubm90IHNpbXVsdGFuZW91c2x5IHNwZWNpZnkgYSAiCiAgICAgICAgICAgICJwYWNrYWdlUm9vdCBhbmQgYSBwYWNrYWdlQ29uZmlnLiIpOwogICAgICB9CiAgICB9CiAgICB0cnkgewogICAgICAvLyBSZXNvbHZlIHRoZSB1cmkgYWdhaW5zdCB0aGUgY3VycmVudCBpc29sYXRlJ3Mgcm9vdCBVcmkgZmlyc3QuCiAgICAgIHZhciBzcGF3bmVkVXJpID0gX3Jvb3RVcmkucmVzb2x2ZVVyaSh1cmkpOwoKICAgICAgLy8gSW5oZXJpdCB0aGlzIGlzb2xhdGUncyBwYWNrYWdlIHJlc29sdXRpb24gc2V0dXAgaWYgbm90IG92ZXJyaWRkZW4uCiAgICAgIGlmICghYXV0b21hdGljUGFja2FnZVJlc29sdXRpb24gJiYKICAgICAgICAgIChwYWNrYWdlUm9vdCA9PSBudWxsKSAmJgogICAgICAgICAgKHBhY2thZ2VDb25maWcgPT0gbnVsbCkpIHsKICAgICAgICBpZiAoSXNvbGF0ZS5fcGFja2FnZVN1cHBvcnRlZCgpKSB7CiAgICAgICAgICBwYWNrYWdlUm9vdCA9IGF3YWl0IElzb2xhdGUucGFja2FnZVJvb3Q7CiAgICAgICAgICBwYWNrYWdlQ29uZmlnID0gYXdhaXQgSXNvbGF0ZS5wYWNrYWdlQ29uZmlnOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLy8gRW5zdXJlIHRvIHJlc29sdmUgcGFja2FnZTogVVJJcyBiZWluZyBoYW5kZWQgaW4gYXMgcGFyYW1ldGVycy4KICAgICAgaWYgKHBhY2thZ2VSb290ICE9IG51bGwpIHsKICAgICAgICAvLyBgcGFja2FnZXMvYCBkaXJlY3RvcnkgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gRm9yY2UgaXQgbnVsbC4KICAgICAgICAvLyBUT0RPKG1mYWlyaHVyc3QpIFNob3VsZCB0aGlzIHRocm93IGFuIGV4Y2VwdGlvbj8KICAgICAgICBwYWNrYWdlUm9vdCA9IG51bGw7CiAgICAgIH0gZWxzZSBpZiAocGFja2FnZUNvbmZpZyAhPSBudWxsKSB7CiAgICAgICAgLy8gQXZvaWQgY2FsbGluZyByZXNvbHZlUGFja2FnZVVyaSBpZiBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGluIGNhc2UKICAgICAgICAvLyB0aGUgQVBJIGlzIG5vdCBzdXBwb3J0ZWQuCiAgICAgICAgaWYgKHBhY2thZ2VDb25maWcuc2NoZW1lID09ICJwYWNrYWdlIikgewogICAgICAgICAgcGFja2FnZUNvbmZpZyA9IGF3YWl0IElzb2xhdGUucmVzb2x2ZVBhY2thZ2VVcmkocGFja2FnZUNvbmZpZyk7CiAgICAgICAgfQogICAgICB9CgogICAgICAvLyBUaGUgVk0gd2lsbCBpbnZva2UgW19zdGFydElzb2xhdGVdIGFuZCBub3QgYG1haW5gLgogICAgICByZWFkeVBvcnQgPSBuZXcgUmF3UmVjZWl2ZVBvcnQoKTsKICAgICAgdmFyIHBhY2thZ2VSb290U3RyaW5nID0gcGFja2FnZVJvb3Q/LnRvU3RyaW5nKCk7CiAgICAgIHZhciBwYWNrYWdlQ29uZmlnU3RyaW5nID0gcGFja2FnZUNvbmZpZz8udG9TdHJpbmcoKTsKCiAgICAgIF9zcGF3blVyaSgKICAgICAgICAgIHJlYWR5UG9ydC5zZW5kUG9ydCwKICAgICAgICAgIHNwYXduZWRVcmkudG9TdHJpbmcoKSwKICAgICAgICAgIGFyZ3MsCiAgICAgICAgICBtZXNzYWdlLAogICAgICAgICAgcGF1c2VkLAogICAgICAgICAgb25FeGl0LAogICAgICAgICAgb25FcnJvciwKICAgICAgICAgIGVycm9yc0FyZUZhdGFsLAogICAgICAgICAgY2hlY2tlZCwKICAgICAgICAgIG51bGwsCiAgICAgICAgICAvKiBlbnZpcm9ubWVudCAqLwogICAgICAgICAgcGFja2FnZVJvb3RTdHJpbmcsCiAgICAgICAgICBwYWNrYWdlQ29uZmlnU3RyaW5nLAogICAgICAgICAgZGVidWdOYW1lKTsKICAgICAgcmV0dXJuIGF3YWl0IF9zcGF3bkNvbW1vbihyZWFkeVBvcnQpOwogICAgfSBjYXRjaCAoZSkgewogICAgICBpZiAocmVhZHlQb3J0ICE9IG51bGwpIHsKICAgICAgICByZWFkeVBvcnQuY2xvc2UoKTsKICAgICAgfQogICAgICByZXRocm93OwogICAgfQogIH0KCiAgc3RhdGljIEZ1dHVyZTxJc29sYXRlPiBfc3Bhd25Db21tb24oUmF3UmVjZWl2ZVBvcnQgcmVhZHlQb3J0KSB7CiAgICBDb21wbGV0ZXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlcjxJc29sYXRlPi5zeW5jKCk7CiAgICByZWFkeVBvcnQuaGFuZGxlciA9IChyZWFkeU1lc3NhZ2UpIHsKICAgICAgcmVhZHlQb3J0LmNsb3NlKCk7CiAgICAgIGlmIChyZWFkeU1lc3NhZ2UgaXMgTGlzdCAmJiByZWFkeU1lc3NhZ2UubGVuZ3RoID09IDIpIHsKICAgICAgICBTZW5kUG9ydCBjb250cm9sUG9ydCA9IHJlYWR5TWVzc2FnZVswXTsKICAgICAgICBMaXN0IGNhcGFiaWxpdGllcyA9IHJlYWR5TWVzc2FnZVsxXTsKICAgICAgICBjb21wbGV0ZXIuY29tcGxldGUobmV3IElzb2xhdGUoY29udHJvbFBvcnQsCiAgICAgICAgICAgIHBhdXNlQ2FwYWJpbGl0eTogY2FwYWJpbGl0aWVzWzBdLAogICAgICAgICAgICB0ZXJtaW5hdGVDYXBhYmlsaXR5OiBjYXBhYmlsaXRpZXNbMV0pKTsKICAgICAgfSBlbHNlIGlmIChyZWFkeU1lc3NhZ2UgaXMgU3RyaW5nKSB7CiAgICAgICAgLy8gV2UgZW5jb3VudGVyZWQgYW4gZXJyb3Igd2hpbGUgc3RhcnRpbmcgdGhlIG5ldyBpc29sYXRlLgogICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKG5ldyBJc29sYXRlU3Bhd25FeGNlcHRpb24oCiAgICAgICAgICAgICdVbmFibGUgdG8gc3Bhd24gaXNvbGF0ZTogJHtyZWFkeU1lc3NhZ2V9JykpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbi4KICAgICAgICBjb21wbGV0ZXIuY29tcGxldGVFcnJvcihuZXcgSXNvbGF0ZVNwYXduRXhjZXB0aW9uKAogICAgICAgICAgICAiSW50ZXJuYWwgZXJyb3I6IHVuZXhwZWN0ZWQgZm9ybWF0IGZvciByZWFkeSBtZXNzYWdlOiAiCiAgICAgICAgICAgICInJHtyZWFkeU1lc3NhZ2V9JyIpKTsKICAgICAgfQogICAgfTsKICAgIHJldHVybiBjb21wbGV0ZXIuZnV0dXJlOwogIH0KCiAgLy8gVE9ETyhpcG9zdmEpOiBDbGVhbnVwIHRvIGhhdmUgb25seSBvbmUgZGVmaW5pdGlvbi4KICAvLyBUaGVzZSB2YWx1ZXMgbmVlZCB0byBiZSBrZXB0IGluIHN5bmMgd2l0aCB0aGUgY2xhc3MgSXNvbGF0ZU1lc3NhZ2VIYW5kbGVyCiAgLy8gaW4gdm0vaXNvbGF0ZS5jYy4KICBzdGF0aWMgY29uc3QgX1BBVVNFID0gMTsKICBzdGF0aWMgY29uc3QgX1JFU1VNRSA9IDI7CiAgc3RhdGljIGNvbnN0IF9QSU5HID0gMzsKICBzdGF0aWMgY29uc3QgX0tJTEwgPSA0OwogIHN0YXRpYyBjb25zdCBfQUREX0VYSVQgPSA1OwogIHN0YXRpYyBjb25zdCBfREVMX0VYSVQgPSA2OwogIHN0YXRpYyBjb25zdCBfQUREX0VSUk9SID0gNzsKICBzdGF0aWMgY29uc3QgX0RFTF9FUlJPUiA9IDg7CiAgc3RhdGljIGNvbnN0IF9FUlJPUl9GQVRBTCA9IDk7CgogIHN0YXRpYyB2b2lkIF9zcGF3bkZ1bmN0aW9uKAogICAgICBTZW5kUG9ydCByZWFkeVBvcnQsCiAgICAgIFN0cmluZyB1cmksCiAgICAgIEZ1bmN0aW9uIHRvcExldmVsRnVuY3Rpb24sCiAgICAgIHZhciBtZXNzYWdlLAogICAgICBib29sIHBhdXNlZCwKICAgICAgYm9vbCBlcnJvcnNBcmVGYXRhbCwKICAgICAgU2VuZFBvcnQgb25FeGl0LAogICAgICBTZW5kUG9ydCBvbkVycm9yLAogICAgICBTdHJpbmcgcGFja2FnZVJvb3QsCiAgICAgIFN0cmluZyBwYWNrYWdlQ29uZmlnLAogICAgICBTdHJpbmcgZGVidWdOYW1lKSBuYXRpdmUgIklzb2xhdGVfc3Bhd25GdW5jdGlvbiI7CgogIHN0YXRpYyB2b2lkIF9zcGF3blVyaSgKICAgICAgU2VuZFBvcnQgcmVhZHlQb3J0LAogICAgICBTdHJpbmcgdXJpLAogICAgICBMaXN0PFN0cmluZz4gYXJncywKICAgICAgdmFyIG1lc3NhZ2UsCiAgICAgIGJvb2wgcGF1c2VkLAogICAgICBTZW5kUG9ydCBvbkV4aXQsCiAgICAgIFNlbmRQb3J0IG9uRXJyb3IsCiAgICAgIGJvb2wgZXJyb3JzQXJlRmF0YWwsCiAgICAgIGJvb2wgY2hlY2tlZCwKICAgICAgTGlzdCBlbnZpcm9ubWVudCwKICAgICAgU3RyaW5nIHBhY2thZ2VSb290LAogICAgICBTdHJpbmcgcGFja2FnZUNvbmZpZywKICAgICAgU3RyaW5nIGRlYnVnTmFtZSkgbmF0aXZlICJJc29sYXRlX3NwYXduVXJpIjsKCiAgc3RhdGljIHZvaWQgX3NlbmRPT0IocG9ydCwgbXNnKSBuYXRpdmUgIklzb2xhdGVfc2VuZE9PQiI7CgogIHN0YXRpYyBTdHJpbmcgX2dldERlYnVnTmFtZShTZW5kUG9ydCBjb250cm9sUG9ydCkKICAgICAgbmF0aXZlICJJc29sYXRlX2dldERlYnVnTmFtZSI7CgogIEBwYXRjaAogIHZvaWQgX3BhdXNlKENhcGFiaWxpdHkgcmVzdW1lQ2FwYWJpbGl0eSkgewogICAgdmFyIG1zZyA9IG5ldyBMaXN0KDQpCiAgICAgIC4uWzBdID0gMCAvLyBNYWtlIHJvb20gZm9yIE9PQiBtZXNzYWdlIHR5cGUuCiAgICAgIC4uWzFdID0gX1BBVVNFCiAgICAgIC4uWzJdID0gcGF1c2VDYXBhYmlsaXR5CiAgICAgIC4uWzNdID0gcmVzdW1lQ2FwYWJpbGl0eTsKICAgIF9zZW5kT09CKGNvbnRyb2xQb3J0LCBtc2cpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCByZXN1bWUoQ2FwYWJpbGl0eSByZXN1bWVDYXBhYmlsaXR5KSB7CiAgICB2YXIgbXNnID0gbmV3IExpc3QoNCkKICAgICAgLi5bMF0gPSAwIC8vIE1ha2Ugcm9vbSBmb3IgT09CIG1lc3NhZ2UgdHlwZS4KICAgICAgLi5bMV0gPSBfUkVTVU1FCiAgICAgIC4uWzJdID0gcGF1c2VDYXBhYmlsaXR5CiAgICAgIC4uWzNdID0gcmVzdW1lQ2FwYWJpbGl0eTsKICAgIF9zZW5kT09CKGNvbnRyb2xQb3J0LCBtc2cpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCBhZGRPbkV4aXRMaXN0ZW5lcihTZW5kUG9ydCByZXNwb25zZVBvcnQsIHtPYmplY3QgcmVzcG9uc2V9KSB7CiAgICB2YXIgbXNnID0gbmV3IExpc3QoNCkKICAgICAgLi5bMF0gPSAwIC8vIE1ha2Ugcm9vbSBmb3IgT09CIG1lc3NhZ2UgdHlwZS4KICAgICAgLi5bMV0gPSBfQUREX0VYSVQKICAgICAgLi5bMl0gPSByZXNwb25zZVBvcnQKICAgICAgLi5bM10gPSByZXNwb25zZTsKICAgIF9zZW5kT09CKGNvbnRyb2xQb3J0LCBtc2cpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCByZW1vdmVPbkV4aXRMaXN0ZW5lcihTZW5kUG9ydCByZXNwb25zZVBvcnQpIHsKICAgIHZhciBtc2cgPSBuZXcgTGlzdCgzKQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT0IgbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IF9ERUxfRVhJVAogICAgICAuLlsyXSA9IHJlc3BvbnNlUG9ydDsKICAgIF9zZW5kT09CKGNvbnRyb2xQb3J0LCBtc2cpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCBzZXRFcnJvcnNGYXRhbChib29sIGVycm9yc0FyZUZhdGFsKSB7CiAgICB2YXIgbXNnID0gbmV3IExpc3QoNCkKICAgICAgLi5bMF0gPSAwIC8vIE1ha2Ugcm9vbSBmb3IgT09CIG1lc3NhZ2UgdHlwZS4KICAgICAgLi5bMV0gPSBfRVJST1JfRkFUQUwKICAgICAgLi5bMl0gPSB0ZXJtaW5hdGVDYXBhYmlsaXR5CiAgICAgIC4uWzNdID0gZXJyb3JzQXJlRmF0YWw7CiAgICBfc2VuZE9PQihjb250cm9sUG9ydCwgbXNnKTsKICB9CgogIEBwYXRjaAogIHZvaWQga2lsbCh7aW50IHByaW9yaXR5OiBiZWZvcmVOZXh0RXZlbnR9KSB7CiAgICB2YXIgbXNnID0gbmV3IExpc3QoNCkKICAgICAgLi5bMF0gPSAwIC8vIE1ha2Ugcm9vbSBmb3IgT09CIG1lc3NhZ2UgdHlwZS4KICAgICAgLi5bMV0gPSBfS0lMTAogICAgICAuLlsyXSA9IHRlcm1pbmF0ZUNhcGFiaWxpdHkKICAgICAgLi5bM10gPSBwcmlvcml0eTsKICAgIF9zZW5kT09CKGNvbnRyb2xQb3J0LCBtc2cpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCBwaW5nKFNlbmRQb3J0IHJlc3BvbnNlUG9ydCwge09iamVjdCByZXNwb25zZSwgaW50IHByaW9yaXR5OiBpbW1lZGlhdGV9KSB7CiAgICB2YXIgbXNnID0gbmV3IExpc3QoNSkKICAgICAgLi5bMF0gPSAwIC8vIE1ha2Ugcm9vbSBmb3IgT09NIG1lc3NhZ2UgdHlwZS4KICAgICAgLi5bMV0gPSBfUElORwogICAgICAuLlsyXSA9IHJlc3BvbnNlUG9ydAogICAgICAuLlszXSA9IHByaW9yaXR5CiAgICAgIC4uWzRdID0gcmVzcG9uc2U7CiAgICBfc2VuZE9PQihjb250cm9sUG9ydCwgbXNnKTsKICB9CgogIEBwYXRjaAogIHZvaWQgYWRkRXJyb3JMaXN0ZW5lcihTZW5kUG9ydCBwb3J0KSB7CiAgICB2YXIgbXNnID0gbmV3IExpc3QoMykKICAgICAgLi5bMF0gPSAwIC8vIE1ha2Ugcm9vbSBmb3IgT09CIG1lc3NhZ2UgdHlwZS4KICAgICAgLi5bMV0gPSBfQUREX0VSUk9SCiAgICAgIC4uWzJdID0gcG9ydDsKICAgIF9zZW5kT09CKGNvbnRyb2xQb3J0LCBtc2cpOwogIH0KCiAgQHBhdGNoCiAgdm9pZCByZW1vdmVFcnJvckxpc3RlbmVyKFNlbmRQb3J0IHBvcnQpIHsKICAgIHZhciBtc2cgPSBuZXcgTGlzdCgzKQogICAgICAuLlswXSA9IDAgLy8gTWFrZSByb29tIGZvciBPT0IgbWVzc2FnZSB0eXBlLgogICAgICAuLlsxXSA9IF9ERUxfRVJST1IKICAgICAgLi5bMl0gPSBwb3J0OwogICAgX3NlbmRPT0IoY29udHJvbFBvcnQsIG1zZyk7CiAgfQoKICBzdGF0aWMgSXNvbGF0ZSBfZ2V0Q3VycmVudElzb2xhdGUoKSB7CiAgICBMaXN0IHBvcnRBbmRDYXBhYmlsaXRpZXMgPSBfZ2V0UG9ydEFuZENhcGFiaWxpdGllc09mQ3VycmVudElzb2xhdGUoKTsKICAgIHJldHVybiBuZXcgSXNvbGF0ZShwb3J0QW5kQ2FwYWJpbGl0aWVzWzBdLAogICAgICAgIHBhdXNlQ2FwYWJpbGl0eTogcG9ydEFuZENhcGFiaWxpdGllc1sxXSwKICAgICAgICB0ZXJtaW5hdGVDYXBhYmlsaXR5OiBwb3J0QW5kQ2FwYWJpbGl0aWVzWzJdKTsKICB9CgogIHN0YXRpYyBMaXN0IF9nZXRQb3J0QW5kQ2FwYWJpbGl0aWVzT2ZDdXJyZW50SXNvbGF0ZSgpCiAgICAgIG5hdGl2ZSAiSXNvbGF0ZV9nZXRQb3J0QW5kQ2FwYWJpbGl0aWVzT2ZDdXJyZW50SXNvbGF0ZSI7CgogIHN0YXRpYyBVcmkgX2dldEN1cnJlbnRSb290VXJpKCkgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIFVyaS5wYXJzZShfZ2V0Q3VycmVudFJvb3RVcmlTdHIoKSk7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KCiAgc3RhdGljIFN0cmluZyBfZ2V0Q3VycmVudFJvb3RVcmlTdHIoKSBuYXRpdmUgIklzb2xhdGVfZ2V0Q3VycmVudFJvb3RVcmlTdHIiOwp9CgpAcGF0Y2gKYWJzdHJhY3QgY2xhc3MgVHJhbnNmZXJhYmxlVHlwZWREYXRhIHsKICBAcGF0Y2gKICBmYWN0b3J5IFRyYW5zZmVyYWJsZVR5cGVkRGF0YS5mcm9tTGlzdChMaXN0PFR5cGVkRGF0YT4gY2h1bmtzKSB7CiAgICBpZiAoY2h1bmtzID09IG51bGwpIHsKICAgICAgdGhyb3cgQXJndW1lbnRFcnJvcihjaHVua3MpOwogICAgfQogICAgZmluYWwgaW50IGNpZCA9IENsYXNzSUQuZ2V0SUQoY2h1bmtzKTsKICAgIGlmIChjaWQgIT0gQ2xhc3NJRC5jaWRBcnJheSAmJgogICAgICAgIGNpZCAhPSBDbGFzc0lELmNpZEdyb3dhYmxlT2JqZWN0QXJyYXkgJiYKICAgICAgICBjaWQgIT0gQ2xhc3NJRC5jaWRJbW11dGFibGVBcnJheSkgewogICAgICBjaHVua3MgPSBMaXN0LnVubW9kaWZpYWJsZShjaHVua3MpOwogICAgfQogICAgcmV0dXJuIF9UcmFuc2ZlcmFibGVUeXBlZERhdGFJbXBsKGNodW5rcyk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9UcmFuc2ZlcmFibGVUeXBlZERhdGFJbXBsIGltcGxlbWVudHMgVHJhbnNmZXJhYmxlVHlwZWREYXRhIHsKICBmYWN0b3J5IF9UcmFuc2ZlcmFibGVUeXBlZERhdGFJbXBsKExpc3Q8VHlwZWREYXRhPiBsaXN0KQogICAgICBuYXRpdmUgIlRyYW5zZmVyYWJsZVR5cGVkRGF0YV9mYWN0b3J5IjsKCiAgQnl0ZUJ1ZmZlciBtYXRlcmlhbGl6ZSgpIHsKICAgIHJldHVybiBfbWF0ZXJpYWxpemVJbnRvVWludDhMaXN0KCkuYnVmZmVyOwogIH0KCiAgVWludDhMaXN0IF9tYXRlcmlhbGl6ZUludG9VaW50OExpc3QoKQogICAgICBuYXRpdmUgIlRyYW5zZmVyYWJsZVR5cGVkRGF0YV9tYXRlcmlhbGl6ZSI7Cn0KgsYATk48AU1NSysBPQEUUQEnQAE6GwEHFAkzAQlDPQQCAQcTCTECARouPQEgOQQBFRwEATE4AgEHFwY1BUhGGAYJLzweEwQCAT9GATdFKAQBGh4EATY/LUkEAQwWGQQBISACASMBRy4BTScyMDAoAgEiJisuJhAEAgE3LCQTAgE6JyIxJAIBGjZFAQw6LwQBGhwEASAtLQQBFR4EAS4wPAE/JCIiEwQBNCQ+TUwzFiQEATs+ASUpBAE0HB02ITQWFgEaBAE0AgEaKiwZBAEfJBscBAEgTAQBFRwEASUqNgE/RwIBHCMyAQRCQyMEIkERHhIMGhofIAIBBE9NRjgEIiocAgEESgwEIhQZGRcRFSAZUB1GBAEcRTgHTyQsJAFHJRkjBCABTE4fLhcSARYrMDEnDxYIDRsGBTEcAgEHEDcwAQkxAQk2AQknNBg5BhMEAQkpNhg7BhMEAQk5Nxg/Bh0EASU3OTgBCUkbGxcYISMeCkwgKy0ISSgBUEY+MhxJFDUIKDoIARYeHRYTEhoSExAZFiwWHxsINQYEAQlLGxcYGxQnFxkuIR4fMwYBRSYhQTcdCCNBNx8IDT5DMQgGCkcxAUwpIyUrMzcKCAFIIUg8HCpNJTFKCggBPCg3OwERHiEQExISExoTEBwdHxYsEh8bCA8GBAFCOSkZPjAtNC40K0M7Og8iO0QjCAcdBAE4TxcbHBoaHh4fHyEBHhoSIRMTGxcYGhw4ARkaEhkTExcYGxQYGhwzATwBNCUBCS0aMxUeICAEAQktGjMWHiAgBAEJRRozGBsYIAQBCTUaMxgcIAQBCS0aMxsiHiAEAQkvGjMUIhggBAEJURozFBsXGCAEAQkpGjMZFCAEAQksGjMZFCAEAShKLzE2BAE4PwEkCjESEwYEAU8CAQcnCUMaIwYrIzEsKgYvBAIBGkQ7LgEdLwQBKDICASVkYXJ0Omlzb2xhdGUtcGF0Y2gvaXNvbGF0ZV9wYXRjaC5kYXJ0L29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvdGltZXJfaW1wbC5kYXJ0umMvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiaXNvbGF0ZV9wYXRjaC5kYXJ0IjsKCi8vIFRpbWVyIGhlYXAgaW1wbGVtZW50ZWQgYXMgYSBhcnJheS1iYXNlZCBiaW5hcnkgaGVhcFswXS4KLy8gVGhpcyBhbGxvd3MgZm9yIE8oMSkgYGZpcnN0YCwgTyhsb2cobikpIGByZW1vdmVgL2ByZW1vdmVGaXJzdGAgYW5kIE8obG9nKG4pKQovLyBgYWRkYC4KLy8KLy8gVG8gZW5zdXJlIHRoZSB0aW1lcnMgYXJlIG9yZGVyZWQgYnkgaW5zZXJ0aW9uIHRpbWUsIHRoZSBfVGltZXIgY2xhc3MgaGFzIGEKLy8gYF9pZGAgZmllbGQgc2V0IHdoZW4gYWRkZWQgdG8gdGhlIGhlYXAuCi8vCi8vIFswXSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpbmFyeV9oZWFwCmNsYXNzIF9UaW1lckhlYXAgewogIExpc3Q8X1RpbWVyPiBfbGlzdDsKICBpbnQgX3VzZWQgPSAwOwoKICBfVGltZXJIZWFwKFtpbnQgaW5pdFNpemUgPSA3XSkgOiBfbGlzdCA9IG5ldyBMaXN0PF9UaW1lcj4oaW5pdFNpemUpOwoKICBib29sIGdldCBpc0VtcHR5ID0+IF91c2VkID09IDA7CgogIF9UaW1lciBnZXQgZmlyc3QgPT4gX2xpc3RbMF07CgogIGJvb2wgaXNGaXJzdChfVGltZXIgdGltZXIpID0+IHRpbWVyLl9pbmRleE9yTmV4dCA9PSAwOwoKICB2b2lkIGFkZChfVGltZXIgdGltZXIpIHsKICAgIGlmIChfdXNlZCA9PSBfbGlzdC5sZW5ndGgpIHsKICAgICAgX3Jlc2l6ZSgpOwogICAgfQogICAgdGltZXIuX2luZGV4T3JOZXh0ID0gX3VzZWQrKzsKICAgIF9saXN0W3RpbWVyLl9pbmRleE9yTmV4dF0gPSB0aW1lcjsKICAgIF9idWJibGVVcCh0aW1lcik7CiAgfQoKICBfVGltZXIgcmVtb3ZlRmlyc3QoKSB7CiAgICB2YXIgZiA9IGZpcnN0OwogICAgcmVtb3ZlKGYpOwogICAgcmV0dXJuIGY7CiAgfQoKICB2b2lkIHJlbW92ZShfVGltZXIgdGltZXIpIHsKICAgIF91c2VkLS07CiAgICBpZiAoaXNFbXB0eSkgewogICAgICBfbGlzdFswXSA9IG51bGw7CiAgICAgIHRpbWVyLl9pbmRleE9yTmV4dCA9IG51bGw7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBsYXN0ID0gX2xpc3RbX3VzZWRdOwogICAgaWYgKCFpZGVudGljYWwobGFzdCwgdGltZXIpKSB7CiAgICAgIGxhc3QuX2luZGV4T3JOZXh0ID0gdGltZXIuX2luZGV4T3JOZXh0OwogICAgICBfbGlzdFtsYXN0Ll9pbmRleE9yTmV4dF0gPSBsYXN0OwogICAgICBpZiAobGFzdC5fY29tcGFyZVRvKHRpbWVyKSA8IDApIHsKICAgICAgICBfYnViYmxlVXAobGFzdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2J1YmJsZURvd24obGFzdCk7CiAgICAgIH0KICAgIH0KICAgIF9saXN0W191c2VkXSA9IG51bGw7CiAgICB0aW1lci5faW5kZXhPck5leHQgPSBudWxsOwogIH0KCiAgdm9pZCBfcmVzaXplKCkgewogICAgdmFyIG5ld0xpc3QgPSBuZXcgTGlzdDxfVGltZXI+KF9saXN0Lmxlbmd0aCAqIDIgKyAxKTsKICAgIG5ld0xpc3Quc2V0UmFuZ2UoMCwgX3VzZWQsIF9saXN0KTsKICAgIF9saXN0ID0gbmV3TGlzdDsKICB9CgogIHZvaWQgX2J1YmJsZVVwKF9UaW1lciB0aW1lcikgewogICAgd2hpbGUgKCFpc0ZpcnN0KHRpbWVyKSkgewogICAgICBUaW1lciBwYXJlbnQgPSBfcGFyZW50KHRpbWVyKTsKICAgICAgaWYgKHRpbWVyLl9jb21wYXJlVG8ocGFyZW50KSA8IDApIHsKICAgICAgICBfc3dhcCh0aW1lciwgcGFyZW50KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfYnViYmxlRG93bihfVGltZXIgdGltZXIpIHsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGludCBsZWZ0SW5kZXggPSBfbGVmdENoaWxkSW5kZXgodGltZXIuX2luZGV4T3JOZXh0KTsKICAgICAgaW50IHJpZ2h0SW5kZXggPSBfcmlnaHRDaGlsZEluZGV4KHRpbWVyLl9pbmRleE9yTmV4dCk7CiAgICAgIF9UaW1lciBuZXdlc3QgPSB0aW1lcjsKICAgICAgaWYgKGxlZnRJbmRleCA8IF91c2VkICYmIF9saXN0W2xlZnRJbmRleF0uX2NvbXBhcmVUbyhuZXdlc3QpIDwgMCkgewogICAgICAgIG5ld2VzdCA9IF9saXN0W2xlZnRJbmRleF07CiAgICAgIH0KICAgICAgaWYgKHJpZ2h0SW5kZXggPCBfdXNlZCAmJiBfbGlzdFtyaWdodEluZGV4XS5fY29tcGFyZVRvKG5ld2VzdCkgPCAwKSB7CiAgICAgICAgbmV3ZXN0ID0gX2xpc3RbcmlnaHRJbmRleF07CiAgICAgIH0KICAgICAgaWYgKGlkZW50aWNhbChuZXdlc3QsIHRpbWVyKSkgewogICAgICAgIC8vIFdlIGFyZSB3aGVyZSB3ZSBzaG91bGQgYmUsIGJyZWFrLgogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIF9zd2FwKG5ld2VzdCwgdGltZXIpOwogICAgfQogIH0KCiAgdm9pZCBfc3dhcChfVGltZXIgZmlyc3QsIF9UaW1lciBzZWNvbmQpIHsKICAgIGludCB0bXAgPSBmaXJzdC5faW5kZXhPck5leHQ7CiAgICBmaXJzdC5faW5kZXhPck5leHQgPSBzZWNvbmQuX2luZGV4T3JOZXh0OwogICAgc2Vjb25kLl9pbmRleE9yTmV4dCA9IHRtcDsKICAgIF9saXN0W2ZpcnN0Ll9pbmRleE9yTmV4dF0gPSBmaXJzdDsKICAgIF9saXN0W3NlY29uZC5faW5kZXhPck5leHRdID0gc2Vjb25kOwogIH0KCiAgVGltZXIgX3BhcmVudChfVGltZXIgdGltZXIpID0+IF9saXN0W19wYXJlbnRJbmRleCh0aW1lci5faW5kZXhPck5leHQpXTsKICBUaW1lciBfbGVmdENoaWxkKF9UaW1lciB0aW1lcikgPT4gX2xpc3RbX2xlZnRDaGlsZEluZGV4KHRpbWVyLl9pbmRleE9yTmV4dCldOwogIFRpbWVyIF9yaWdodENoaWxkKF9UaW1lciB0aW1lcikgPT4KICAgICAgX2xpc3RbX3JpZ2h0Q2hpbGRJbmRleCh0aW1lci5faW5kZXhPck5leHQpXTsKCiAgc3RhdGljIGludCBfcGFyZW50SW5kZXgoaW50IGluZGV4KSA9PiAoaW5kZXggLSAxKSB+LyAyOwogIHN0YXRpYyBpbnQgX2xlZnRDaGlsZEluZGV4KGludCBpbmRleCkgPT4gMiAqIGluZGV4ICsgMTsKICBzdGF0aWMgaW50IF9yaWdodENoaWxkSW5kZXgoaW50IGluZGV4KSA9PiAyICogaW5kZXggKyAyOwp9CgpjbGFzcyBfVGltZXIgaW1wbGVtZW50cyBUaW1lciB7CiAgLy8gQ2FuY2VscyB0aGUgdGltZXIgaW4gdGhlIGV2ZW50IGhhbmRsZXIuCiAgc3RhdGljIGNvbnN0IF9OT19USU1FUiA9IC0xOwoKICAvLyBXZSBkaXN0aW5ndWlzaCB3aGF0IGtpbmQgb2YgbWVzc2FnZSBhcnJpdmVkIGJhc2VkIG9uIHRoZSB2YWx1ZSBiZWluZyBzZW50LgogIHN0YXRpYyBjb25zdCBfWkVST19FVkVOVCA9IDE7CiAgc3RhdGljIGNvbnN0IF9USU1FT1VUX0VWRU5UID0gbnVsbDsKCiAgLy8gVGltZXJzIGFyZSBvcmRlcmVkIGJ5IHdha2V1cCB0aW1lLiBUaW1lcnMgd2l0aCBhIHRpbWVvdXQgdmFsdWUgb2YgPiAwIGRvCiAgLy8gZW5kIHVwIG9uIHRoZSBUaW1lckhlYXAuIFRpbWVycyB3aXRoIGEgdGltZW91dCBvZiAwIGFyZSBxdWV1ZWQgaW4gYSBsaXN0LgogIHN0YXRpYyBmaW5hbCBfaGVhcCA9IG5ldyBfVGltZXJIZWFwKCk7CiAgc3RhdGljIF9UaW1lciBfZmlyc3RaZXJvVGltZXI7CiAgc3RhdGljIF9UaW1lciBfbGFzdFplcm9UaW1lcjsKCiAgLy8gV2UgdXNlIGFuIGlkIHRvIGJlIGFibGUgdG8gc29ydCB0aW1lcnMgd2l0aCB0aGUgc2FtZSBleHBpcmF0aW9uIHRpbWUuCiAgLy8gaWRzIGFyZSByZWN5Y2xlZCBhZnRlciBJRF9NQVNLIGVucXVldWVzIG9yIHdoZW4gdGhlIHRpbWVyIHF1ZXVlIGlzIGVtcHR5LgogIHN0YXRpYyBjb25zdCBfSURfTUFTSyA9IDB4MWZmZmZmZmY7CiAgc3RhdGljIGludCBfaWRDb3VudCA9IDA7CgogIHN0YXRpYyBSYXdSZWNlaXZlUG9ydCBfcmVjZWl2ZVBvcnQ7CiAgc3RhdGljIFNlbmRQb3J0IF9zZW5kUG9ydDsKICBzdGF0aWMgaW50IF9zY2hlZHVsZWRXYWtldXBUaW1lOwoKICBzdGF0aWMgYm9vbCBfaGFuZGxpbmdDYWxsYmFja3MgPSBmYWxzZTsKCiAgRnVuY3Rpb24gX2NhbGxiYWNrOyAvLyBDbG9zdXJlIHRvIGNhbGwgd2hlbiB0aW1lciBmaXJlcy4gbnVsbCBpZiBjYW5jZWxlZC4KICBpbnQgX3dha2V1cFRpbWU7IC8vIEV4cGlyYXRpb24gdGltZS4KICBmaW5hbCBpbnQgX21pbGxpU2Vjb25kczsgLy8gRHVyYXRpb24gc3BlY2lmaWVkIGF0IGNyZWF0aW9uLgogIGZpbmFsIGJvb2wgX3JlcGVhdGluZzsgLy8gSW5kaWNhdGVzIHBlcmlvZGljIHRpbWVycy4KICB2YXIgX2luZGV4T3JOZXh0OyAvLyBJbmRleCBpZiBwYXJ0IG9mIHRoZSBUaW1lckhlYXAsIGxpbmsgb3RoZXJ3aXNlLgogIGludCBfaWQ7IC8vIEluY3JlbWVudGluZyBpZCB0byBlbmFibGUgc29ydGluZyBvZiB0aW1lcnMgd2l0aCBzYW1lIGV4cGlyeS4KCiAgaW50IF90aWNrID0gMDsgLy8gQmFja2luZyBmb3IgW3RpY2tdLAoKICAvLyBHZXQgdGhlIG5leHQgYXZhaWxhYmxlIGlkLiBXZSBhY2NlcHQgY29sbGlzaW9ucyBhbmQgcmVvcmRlcmluZyB3aGVuIHRoZQogIC8vIF9pZENvdW50IG92ZXJmbG93cyBhbmQgdGhlIHRpbWVycyBleHBpcmUgYXQgdGhlIHNhbWUgbWlsbGlzZWNvbmQuCiAgc3RhdGljIGludCBfbmV4dElkKCkgewogICAgdmFyIHJlc3VsdCA9IF9pZENvdW50OwogICAgX2lkQ291bnQgPSAoX2lkQ291bnQgKyAxKSAmIF9JRF9NQVNLOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIF9UaW1lci5faW50ZXJuYWwoCiAgICAgIHRoaXMuX2NhbGxiYWNrLCB0aGlzLl93YWtldXBUaW1lLCB0aGlzLl9taWxsaVNlY29uZHMsIHRoaXMuX3JlcGVhdGluZykKICAgICAgOiBfaWQgPSBfbmV4dElkKCk7CgogIHN0YXRpYyBUaW1lciBfY3JlYXRlVGltZXIoCiAgICAgIHZvaWQgY2FsbGJhY2soVGltZXIgdGltZXIpLCBpbnQgbWlsbGlTZWNvbmRzLCBib29sIHJlcGVhdGluZykgewogICAgLy8gTmVnYXRpdmUgdGltZW91dHMgYXJlIHRyZWF0ZWQgYXMgaWYgMCB0aW1lb3V0LgogICAgaWYgKG1pbGxpU2Vjb25kcyA8IDApIHsKICAgICAgbWlsbGlTZWNvbmRzID0gMDsKICAgIH0KICAgIC8vIEFkZCBvbmUgYmVjYXVzZSBEYXRlVGltZS5ub3coKSBpcyBhc3N1bWVkIHRvIHJvdW5kIGRvd24KICAgIC8vIHRvIG5lYXJlc3QgbWlsbGlzZWNvbmQsIG5vdCB1cCwgc28gdGhhdCB0aW1lICsgZHVyYXRpb24gaXMgYmVmb3JlCiAgICAvLyBkdXJhdGlvbiBtaWxsaXNlY29uZHMgZnJvbSBub3cuIFVzaW5nIG1pY3Jvc2Vjb25kIHRpbWVycyBsaWtlCiAgICAvLyBTdG9wd2F0Y2ggYWxsb3dzIGRldGVjdGluZyB0aGF0IHRoZSB0aW1lciBmaXJlcyBlYXJseS4KICAgIGludCBub3cgPSBWTUxpYnJhcnlIb29rcy50aW1lck1pbGxpc2Vjb25kQ2xvY2soKTsKICAgIGludCB3YWtldXBUaW1lID0gKG1pbGxpU2Vjb25kcyA9PSAwKSA/IG5vdyA6IChub3cgKyAxICsgbWlsbGlTZWNvbmRzKTsKCiAgICBfVGltZXIgdGltZXIgPQogICAgICAgIG5ldyBfVGltZXIuX2ludGVybmFsKGNhbGxiYWNrLCB3YWtldXBUaW1lLCBtaWxsaVNlY29uZHMsIHJlcGVhdGluZyk7CiAgICAvLyBFbnF1ZXVlIHRoaXMgbmV3bHkgY3JlYXRlZCB0aW1lciBpbiB0aGUgYXBwcm9wcmlhdGUgc3RydWN0dXJlIGFuZAogICAgLy8gbm90aWZ5IGlmIG5lY2Vzc2FyeS4KICAgIHRpbWVyLl9lbnF1ZXVlKCk7CiAgICByZXR1cm4gdGltZXI7CiAgfQoKICBmYWN0b3J5IF9UaW1lcihpbnQgbWlsbGlTZWNvbmRzLCB2b2lkIGNhbGxiYWNrKFRpbWVyIHRpbWVyKSkgewogICAgcmV0dXJuIF9jcmVhdGVUaW1lcihjYWxsYmFjaywgbWlsbGlTZWNvbmRzLCBmYWxzZSk7CiAgfQoKICBmYWN0b3J5IF9UaW1lci5wZXJpb2RpYyhpbnQgbWlsbGlTZWNvbmRzLCB2b2lkIGNhbGxiYWNrKFRpbWVyIHRpbWVyKSkgewogICAgcmV0dXJuIF9jcmVhdGVUaW1lcihjYWxsYmFjaywgbWlsbGlTZWNvbmRzLCB0cnVlKTsKICB9CgogIGJvb2wgZ2V0IF9pc0luSGVhcCA9PiBfaW5kZXhPck5leHQgaXMgaW50OwoKICBpbnQgX2NvbXBhcmVUbyhfVGltZXIgb3RoZXIpIHsKICAgIGludCBjID0gX3dha2V1cFRpbWUgLSBvdGhlci5fd2FrZXVwVGltZTsKICAgIGlmIChjICE9IDApIHJldHVybiBjOwogICAgcmV0dXJuIF9pZCAtIG90aGVyLl9pZDsKICB9CgogIGJvb2wgZ2V0IGlzQWN0aXZlID0+IF9jYWxsYmFjayAhPSBudWxsOwoKICBpbnQgZ2V0IHRpY2sgPT4gX3RpY2s7CgogIC8vIENhbmNlbHMgYSBzZXQgdGltZXIuIFRoZSB0aW1lciBpcyByZW1vdmVkIGZyb20gdGhlIHRpbWVyIGhlYXAgaWYgaXQgaXMgYQogIC8vIG5vbi16ZXJvIHRpbWVyLiBaZXJvIHRpbWVycyBhcmUga2VwdCBpbiB0aGUgbGlzdCBhcyB0aGV5IG5lZWQgdG8gY29uc3VtZQogIC8vIHRoZSBjb3JyZXNwb25kaW5nIHBlbmRpbmcgbWVzc2FnZS4KICB2b2lkIGNhbmNlbCgpIHsKICAgIF9jYWxsYmFjayA9IG51bGw7CiAgICAvLyBPbmx5IGhlYXAgdGltZXJzIGFyZSByZWFsbHkgcmVtb3ZlZC4gWmVybyB0aW1lcnMgbmVlZCB0byBjb25zdW1lIHRoZWlyCiAgICAvLyBjb3JyZXNwb25kaW5nIHdha2V1cCBtZXNzYWdlIHNvIHRoZXkgYXJlIGxlZnQgaW4gdGhlIHF1ZXVlLgogICAgaWYgKCFfaXNJbkhlYXApIHJldHVybjsKICAgIGJvb2wgdXBkYXRlID0gX2hlYXAuaXNGaXJzdCh0aGlzKTsKICAgIF9oZWFwLnJlbW92ZSh0aGlzKTsKICAgIGlmICh1cGRhdGUpIHsKICAgICAgX25vdGlmeUV2ZW50SGFuZGxlcigpOwogICAgfQogIH0KCiAgdm9pZCBfYWR2YW5jZVdha2V1cFRpbWUoKSB7CiAgICAvLyBSZWNhbGN1bGF0ZSB0aGUgbmV4dCB3YWtldXAgdGltZS4gRm9yIHJlcGVhdGluZyB0aW1lcnMgd2l0aCBhIDAgdGltZW91dAogICAgLy8gdGhlIG5leHQgd2FrZXVwIHRpbWUgaXMgbm93LgogICAgX2lkID0gX25leHRJZCgpOwogICAgaWYgKF9taWxsaVNlY29uZHMgPiAwKSB7CiAgICAgIF93YWtldXBUaW1lICs9IF9taWxsaVNlY29uZHM7CiAgICB9IGVsc2UgewogICAgICBfd2FrZXVwVGltZSA9IFZNTGlicmFyeUhvb2tzLnRpbWVyTWlsbGlzZWNvbmRDbG9jaygpOwogICAgfQogIH0KCiAgLy8gQWRkcyBhIHRpbWVyIHRvIHRoZSBoZWFwIG9yIHRpbWVyIGxpc3QuIFRpbWVycyB3aXRoIHRoZSBzYW1lIHdha2V1cCB0aW1lCiAgLy8gYXJlIGVucXVldWVkIGluIG9yZGVyIGFuZCBub3RpZmllZCBpbiBGSUZPIG9yZGVyLgogIHZvaWQgX2VucXVldWUoKSB7CiAgICBpZiAoX21pbGxpU2Vjb25kcyA9PSAwKSB7CiAgICAgIGlmIChfZmlyc3RaZXJvVGltZXIgPT0gbnVsbCkgewogICAgICAgIF9sYXN0WmVyb1RpbWVyID0gdGhpczsKICAgICAgICBfZmlyc3RaZXJvVGltZXIgPSB0aGlzOwogICAgICB9IGVsc2UgewogICAgICAgIF9sYXN0WmVyb1RpbWVyLl9pbmRleE9yTmV4dCA9IHRoaXM7CiAgICAgICAgX2xhc3RaZXJvVGltZXIgPSB0aGlzOwogICAgICB9CiAgICAgIC8vIEV2ZXJ5IHplcm8gdGltZXIgZ2V0cyBpdHMgb3duIGV2ZW50LgogICAgICBfbm90aWZ5WmVyb0hhbmRsZXIoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9oZWFwLmFkZCh0aGlzKTsKICAgICAgaWYgKF9oZWFwLmlzRmlyc3QodGhpcykpIHsKICAgICAgICBfbm90aWZ5RXZlbnRIYW5kbGVyKCk7CiAgICAgIH0KICAgIH0KICB9CgogIC8vIEVucXVldWUgb25lIG1lc3NhZ2UgZm9yIGVhY2ggemVybyB0aW1lci4gVG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBmcm9tCiAgLy8gRXZlbnRIYW5kbGVyIG1lc3NhZ2VzIHdlIHNlbmQgYSBfWkVST19FVkVOVCBpbnN0ZWFkIG9mIGEgX1RJTUVPVVRfRVZFTlQuCiAgc3RhdGljIHZvaWQgX25vdGlmeVplcm9IYW5kbGVyKCkgewogICAgaWYgKF9zZW5kUG9ydCA9PSBudWxsKSB7CiAgICAgIF9jcmVhdGVUaW1lckhhbmRsZXIoKTsKICAgIH0KICAgIF9zZW5kUG9ydC5zZW5kKF9aRVJPX0VWRU5UKTsKICB9CgogIC8vIEhhbmRsZSB0aGUgbm90aWZpY2F0aW9uIG9mIGEgemVybyB0aW1lci4gTWFrZSBzdXJlIHRvIGFsc28gZXhlY3V0ZSBub24temVybwogIC8vIHRpbWVycyB3aXRoIGEgbG93ZXIgZXhwaXJhdGlvbiB0aW1lLgogIHN0YXRpYyBMaXN0IF9xdWV1ZUZyb21aZXJvRXZlbnQoKSB7CiAgICB2YXIgcGVuZGluZ1RpbWVycyA9IG5ldyBMaXN0KCk7CiAgICBhc3NlcnQoX2ZpcnN0WmVyb1RpbWVyICE9IG51bGwpOwogICAgLy8gQ29sbGVjdCBwZW5kaW5nIHRpbWVycyBmcm9tIHRoZSB0aW1lciBoZWFwIHRoYXQgaGF2ZSBhbiBleHBpcmF0aW9uIHByaW9yCiAgICAvLyB0byB0aGUgY3VycmVudGx5IG5vdGlmaWVkIHplcm8gdGltZXIuCiAgICB2YXIgdGltZXI7CiAgICB3aGlsZSAoIV9oZWFwLmlzRW1wdHkgJiYgKF9oZWFwLmZpcnN0Ll9jb21wYXJlVG8oX2ZpcnN0WmVyb1RpbWVyKSA8IDApKSB7CiAgICAgIHRpbWVyID0gX2hlYXAucmVtb3ZlRmlyc3QoKTsKICAgICAgcGVuZGluZ1RpbWVycy5hZGQodGltZXIpOwogICAgfQogICAgLy8gQXBwZW5kIHRoZSBmaXJzdCB6ZXJvIHRpbWVyIHRvIHRoZSBwZW5kaW5nIHRpbWVycy4KICAgIHRpbWVyID0gX2ZpcnN0WmVyb1RpbWVyOwogICAgX2ZpcnN0WmVyb1RpbWVyID0gdGltZXIuX2luZGV4T3JOZXh0OwogICAgdGltZXIuX2luZGV4T3JOZXh0ID0gbnVsbDsKICAgIHBlbmRpbmdUaW1lcnMuYWRkKHRpbWVyKTsKICAgIHJldHVybiBwZW5kaW5nVGltZXJzOwogIH0KCiAgc3RhdGljIHZvaWQgX25vdGlmeUV2ZW50SGFuZGxlcigpIHsKICAgIGlmIChfaGFuZGxpbmdDYWxsYmFja3MpIHsKICAgICAgLy8gV2hpbGUgd2UgYXJlIGFscmVhZHkgaGFuZGxpbmcgY2FsbGJhY2tzIHdlIHdpbGwgbm90IG5vdGlmeSB0aGUgZXZlbnQKICAgICAgLy8gaGFuZGxlci4gX2hhbmRsZVRpbWVvdXQgd2lsbCBjYWxsIF9ub3RpZnlFdmVudEhhbmRsZXIgb25jZSBhbGwgcGVuZGluZwogICAgICAvLyB0aW1lcnMgYXJlIHByb2Nlc3NlZC4KICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIHRpbWVycy4gQ2xvc2UgZG93biB0aGUgcmVjZWl2ZSBwb3J0LgogICAgaWYgKChfZmlyc3RaZXJvVGltZXIgPT0gbnVsbCkgJiYgX2hlYXAuaXNFbXB0eSkgewogICAgICAvLyBObyBwZW5kaW5nIHRpbWVyczogQ2xvc2UgdGhlIHJlY2VpdmUgcG9ydCBhbmQgbGV0IHRoZSBldmVudCBoYW5kbGVyCiAgICAgIC8vIGtub3cuCiAgICAgIGlmIChfc2VuZFBvcnQgIT0gbnVsbCkgewogICAgICAgIF9jYW5jZWxXYWtldXAoKTsKICAgICAgICBfc2h1dGRvd25UaW1lckhhbmRsZXIoKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKF9oZWFwLmlzRW1wdHkpIHsKICAgICAgLy8gT25seSB6ZXJvIHRpbWVycyBhcmUgbGVmdC4gQ2FuY2VsIGFueSBzY2hlZHVsZWQgd2FrZXVwcy4KICAgICAgX2NhbmNlbFdha2V1cCgpOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gT25seSBzZW5kIGEgbWVzc2FnZSBpZiB0aGUgcmVxdWVzdGVkIHdha2V1cCB0aW1lIGRpZmZlcnMgZnJvbSB0aGUKICAgIC8vIGFscmVhZHkgc2NoZWR1bGVkIHdha2V1cCB0aW1lLgogICAgdmFyIHdha2V1cFRpbWUgPSBfaGVhcC5maXJzdC5fd2FrZXVwVGltZTsKICAgIGlmICgoX3NjaGVkdWxlZFdha2V1cFRpbWUgPT0gbnVsbCkgfHwKICAgICAgICAod2FrZXVwVGltZSAhPSBfc2NoZWR1bGVkV2FrZXVwVGltZSkpIHsKICAgICAgX3NjaGVkdWxlV2FrZXVwKHdha2V1cFRpbWUpOwogICAgfQogIH0KCiAgc3RhdGljIExpc3QgX3F1ZXVlRnJvbVRpbWVvdXRFdmVudCgpIHsKICAgIHZhciBwZW5kaW5nVGltZXJzID0gbmV3IExpc3QoKTsKICAgIGlmIChfZmlyc3RaZXJvVGltZXIgIT0gbnVsbCkgewogICAgICAvLyBDb2xsZWN0IHBlbmRpbmcgdGltZXJzIGZyb20gdGhlIHRpbWVyIGhlYXAgdGhhdCBoYXZlIGFuIGV4cGlyYXRpb24KICAgICAgLy8gcHJpb3IgdG8gdGhlIG5leHQgemVybyB0aW1lci4KICAgICAgLy8gQnkgZGVmaW5pdGlvbiB0aGUgZmlyc3QgemVybyB0aW1lciBoYXMgYmVlbiBzY2hlZHVsZWQgYmVmb3JlIHRoZQogICAgICAvLyBjdXJyZW50IHRpbWUsIG1lYW5pbmcgYWxsIHRpbWVycyB3aGljaCBhcmUgImxlc3MgdGhhbiIgdGhlIGZpcnN0IHplcm8KICAgICAgLy8gdGltZXIgYXJlIGV4cGlyZWQuIFRoZSBmaXJzdCB6ZXJvIHRpbWVyIHdpbGwgYmUgZGlzcGF0Y2hlZCB3aGVuIGl0cwogICAgICAvLyBjb3JyZXNwb25kaW5nIG1lc3NhZ2UgaXMgZGVsaXZlcmVkLgogICAgICB2YXIgdGltZXI7CiAgICAgIHdoaWxlICghX2hlYXAuaXNFbXB0eSAmJiAoX2hlYXAuZmlyc3QuX2NvbXBhcmVUbyhfZmlyc3RaZXJvVGltZXIpIDwgMCkpIHsKICAgICAgICB0aW1lciA9IF9oZWFwLnJlbW92ZUZpcnN0KCk7CiAgICAgICAgcGVuZGluZ1RpbWVycy5hZGQodGltZXIpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICAvLyBDb2xsZWN0IHBlbmRpbmcgdGltZXJzIGZyb20gdGhlIHRpbWVyIGhlYXAgd2hpY2ggaGF2ZSBleHBpcmVkIGF0IHRoaXMKICAgICAgLy8gdGltZS4KICAgICAgdmFyIGN1cnJlbnRUaW1lID0gVk1MaWJyYXJ5SG9va3MudGltZXJNaWxsaXNlY29uZENsb2NrKCk7CiAgICAgIHZhciB0aW1lcjsKICAgICAgd2hpbGUgKCFfaGVhcC5pc0VtcHR5ICYmIChfaGVhcC5maXJzdC5fd2FrZXVwVGltZSA8PSBjdXJyZW50VGltZSkpIHsKICAgICAgICB0aW1lciA9IF9oZWFwLnJlbW92ZUZpcnN0KCk7CiAgICAgICAgcGVuZGluZ1RpbWVycy5hZGQodGltZXIpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcGVuZGluZ1RpbWVyczsKICB9CgogIHN0YXRpYyB2b2lkIF9ydW5UaW1lcnMoTGlzdCBwZW5kaW5nVGltZXJzKSB7CiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcGVuZGluZyB0aW1lcnMgY3VycmVudGx5IHJlc2V0IHRoZSBpZCBzcGFjZSBiZWZvcmUgd2UKICAgIC8vIGhhdmUgYSBjaGFuY2UgdG8gZW5xdWV1ZSBuZXcgdGltZXJzLgogICAgaWYgKF9oZWFwLmlzRW1wdHkgJiYgKF9maXJzdFplcm9UaW1lciA9PSBudWxsKSkgewogICAgICBfaWRDb3VudCA9IDA7CiAgICB9CgogICAgLy8gRmFzdCBleGl0IGlmIG5vIHBlbmRpbmcgdGltZXJzLgogICAgaWYgKHBlbmRpbmdUaW1lcnMubGVuZ3RoID09IDApIHsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIFRyaWdnZXIgYWxsIG9mIHRoZSBwZW5kaW5nIHRpbWVycy4gTmV3IHRpbWVycyBhZGRlZCBhcyBwYXJ0IG9mIHRoZQogICAgLy8gY2FsbGJhY2tzIHdpbGwgYmUgZW5xdWV1ZWQgbm93IGFuZCBub3RpZmllZCBpbiB0aGUgbmV4dCBzcGluIGF0IHRoZQogICAgLy8gZWFybGllc3QuCiAgICBfaGFuZGxpbmdDYWxsYmFja3MgPSB0cnVlOwogICAgdmFyIGkgPSAwOwogICAgdHJ5IHsKICAgICAgZm9yICg7IGkgPCBwZW5kaW5nVGltZXJzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgLy8gTmV4dCBwZW5kaW5nIHRpbWVyLgogICAgICAgIHZhciB0aW1lciA9IHBlbmRpbmdUaW1lcnNbaV07CiAgICAgICAgdGltZXIuX2luZGV4T3JOZXh0ID0gbnVsbDsKCiAgICAgICAgLy8gT25lIG9mIHRoZSB0aW1lcnMgaW4gdGhlIHBlbmRpbmdfdGltZXJzIGxpc3QgY2FuIGNhbmNlbAogICAgICAgIC8vIG9uZSBvZiB0aGUgbGF0ZXIgdGltZXJzIHdoaWNoIHdpbGwgc2V0IHRoZSBjYWxsYmFjayB0bwogICAgICAgIC8vIG51bGwuIE9yIHRoZSBwZW5kaW5nIHplcm8gdGltZXIgaGFzIGJlZW4gY2FuY2VsZWQgZWFybGllci4KICAgICAgICBpZiAodGltZXIuX2NhbGxiYWNrICE9IG51bGwpIHsKICAgICAgICAgIHZhciBjYWxsYmFjayA9IHRpbWVyLl9jYWxsYmFjazsKICAgICAgICAgIGlmICghdGltZXIuX3JlcGVhdGluZykgewogICAgICAgICAgICAvLyBNYXJrIHRpbWVyIGFzIGluYWN0aXZlLgogICAgICAgICAgICB0aW1lci5fY2FsbGJhY2sgPSBudWxsOwogICAgICAgICAgfSBlbHNlIGlmICh0aW1lci5fbWlsbGlTZWNvbmRzID4gMCkgewogICAgICAgICAgICB2YXIgbXMgPSB0aW1lci5fbWlsbGlTZWNvbmRzOwogICAgICAgICAgICBpbnQgb3ZlcmR1ZSA9CiAgICAgICAgICAgICAgICBWTUxpYnJhcnlIb29rcy50aW1lck1pbGxpc2Vjb25kQ2xvY2soKSAtIHRpbWVyLl93YWtldXBUaW1lOwogICAgICAgICAgICBpZiAob3ZlcmR1ZSA+IG1zKSB7CiAgICAgICAgICAgICAgaW50IG1pc3NlZFRpY2tzID0gb3ZlcmR1ZSB+LyBtczsKICAgICAgICAgICAgICB0aW1lci5fd2FrZXVwVGltZSArPSBtaXNzZWRUaWNrcyAqIG1zOwogICAgICAgICAgICAgIHRpbWVyLl90aWNrICs9IG1pc3NlZFRpY2tzOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB0aW1lci5fdGljayArPSAxOwoKICAgICAgICAgIGNhbGxiYWNrKHRpbWVyKTsKICAgICAgICAgIC8vIFJlLWluc2VydCByZXBlYXRpbmcgdGltZXIgaWYgbm90IGNhbmNlbGVkLgogICAgICAgICAgaWYgKHRpbWVyLl9yZXBlYXRpbmcgJiYgKHRpbWVyLl9jYWxsYmFjayAhPSBudWxsKSkgewogICAgICAgICAgICB0aW1lci5fYWR2YW5jZVdha2V1cFRpbWUoKTsKICAgICAgICAgICAgdGltZXIuX2VucXVldWUoKTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIEV4ZWN1dGUgcGVuZGluZyBtaWNybyB0YXNrcy4KICAgICAgICAgIHZhciBpbW1lZGlhdGVDYWxsYmFjayA9IF9yZW1vdmVQZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2soKTsKICAgICAgICAgIGlmIChpbW1lZGlhdGVDYWxsYmFjayAhPSBudWxsKSB7CiAgICAgICAgICAgIGltbWVkaWF0ZUNhbGxiYWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9IGZpbmFsbHkgewogICAgICBfaGFuZGxpbmdDYWxsYmFja3MgPSBmYWxzZTsKICAgICAgLy8gUmUtcXVldWUgdGltZXJzIHdlIGRpZG4ndCBnZXQgdG8uCiAgICAgIGZvciAoaSsrOyBpIDwgcGVuZGluZ1RpbWVycy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciB0aW1lciA9IHBlbmRpbmdUaW1lcnNbaV07CiAgICAgICAgdGltZXIuX2VucXVldWUoKTsKICAgICAgfQogICAgICBfbm90aWZ5RXZlbnRIYW5kbGVyKCk7CiAgICB9CiAgfQoKICBzdGF0aWMgdm9pZCBfaGFuZGxlTWVzc2FnZShtc2cpIHsKICAgIHZhciBwZW5kaW5nVGltZXJzOwogICAgaWYgKG1zZyA9PSBfWkVST19FVkVOVCkgewogICAgICBwZW5kaW5nVGltZXJzID0gX3F1ZXVlRnJvbVplcm9FdmVudCgpOwogICAgICBhc3NlcnQocGVuZGluZ1RpbWVycy5sZW5ndGggPiAwKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChtc2cgPT0gX1RJTUVPVVRfRVZFTlQpOwogICAgICBfc2NoZWR1bGVkV2FrZXVwVGltZSA9IG51bGw7IC8vIENvbnN1bWVkIHRoZSBsYXN0IHNjaGVkdWxlZCB3YWtldXAgbm93LgogICAgICBwZW5kaW5nVGltZXJzID0gX3F1ZXVlRnJvbVRpbWVvdXRFdmVudCgpOwogICAgfQogICAgX3J1blRpbWVycyhwZW5kaW5nVGltZXJzKTsKICAgIC8vIE5vdGlmeSB0aGUgZXZlbnQgaGFuZGxlciBvciBzaHV0ZG93biB0aGUgcG9ydCBpZiBubyBtb3JlIHBlbmRpbmcKICAgIC8vIHRpbWVycyBhcmUgcHJlc2VudC4KICAgIF9ub3RpZnlFdmVudEhhbmRsZXIoKTsKICB9CgogIC8vIFRlbGwgdGhlIGV2ZW50IGhhbmRsZXIgdG8gd2FrZSB0aGlzIGlzb2xhdGUgYXQgYSBzcGVjaWZpYyB0aW1lLgogIHN0YXRpYyB2b2lkIF9zY2hlZHVsZVdha2V1cChpbnQgd2FrZXVwVGltZSkgewogICAgaWYgKF9zZW5kUG9ydCA9PSBudWxsKSB7CiAgICAgIF9jcmVhdGVUaW1lckhhbmRsZXIoKTsKICAgIH0KICAgIFZNTGlicmFyeUhvb2tzLmV2ZW50SGFuZGxlclNlbmREYXRhKG51bGwsIF9zZW5kUG9ydCwgd2FrZXVwVGltZSk7CiAgICBfc2NoZWR1bGVkV2FrZXVwVGltZSA9IHdha2V1cFRpbWU7CiAgfQoKICAvLyBDYW5jZWwgcGVuZGluZyB3YWtldXBzIGluIHRoZSBldmVudCBoYW5kbGVyLgogIHN0YXRpYyB2b2lkIF9jYW5jZWxXYWtldXAoKSB7CiAgICBpZiAoX3NlbmRQb3J0ICE9IG51bGwpIHsKICAgICAgVk1MaWJyYXJ5SG9va3MuZXZlbnRIYW5kbGVyU2VuZERhdGEobnVsbCwgX3NlbmRQb3J0LCBfTk9fVElNRVIpOwogICAgICBfc2NoZWR1bGVkV2FrZXVwVGltZSA9IG51bGw7CiAgICB9CiAgfQoKICAvLyBDcmVhdGUgYSByZWNlaXZlIHBvcnQgYW5kIHJlZ2lzdGVyIGEgbWVzc2FnZSBoYW5kbGVyIGZvciB0aGUgdGltZXIKICAvLyBldmVudHMuCiAgc3RhdGljIHZvaWQgX2NyZWF0ZVRpbWVySGFuZGxlcigpIHsKICAgIGFzc2VydChfcmVjZWl2ZVBvcnQgPT0gbnVsbCk7CiAgICBhc3NlcnQoX3NlbmRQb3J0ID09IG51bGwpOwogICAgX3JlY2VpdmVQb3J0ID0gbmV3IFJhd1JlY2VpdmVQb3J0KF9oYW5kbGVNZXNzYWdlKTsKICAgIF9zZW5kUG9ydCA9IF9yZWNlaXZlUG9ydC5zZW5kUG9ydDsKICAgIF9zY2hlZHVsZWRXYWtldXBUaW1lID0gbnVsbDsKICB9CgogIHN0YXRpYyB2b2lkIF9zaHV0ZG93blRpbWVySGFuZGxlcigpIHsKICAgIF9yZWNlaXZlUG9ydC5jbG9zZSgpOwogICAgX3JlY2VpdmVQb3J0ID0gbnVsbDsKICAgIF9zZW5kUG9ydCA9IG51bGw7CiAgICBfc2NoZWR1bGVkV2FrZXVwVGltZSA9IG51bGw7CiAgfQoKICAvLyBUaGUgVGltZXIgZmFjdG9yeSByZWdpc3RlcmVkIHdpdGggdGhlIGRhcnQ6YXN5bmMgbGlicmFyeSBieSB0aGUgZW1iZWRkZXIuCiAgc3RhdGljIFRpbWVyIF9mYWN0b3J5KAogICAgICBpbnQgbWlsbGlTZWNvbmRzLCB2b2lkIGNhbGxiYWNrKFRpbWVyIHRpbWVyKSwgYm9vbCByZXBlYXRpbmcpIHsKICAgIGlmIChyZXBlYXRpbmcpIHsKICAgICAgcmV0dXJuIG5ldyBfVGltZXIucGVyaW9kaWMobWlsbGlTZWNvbmRzLCBjYWxsYmFjayk7CiAgICB9CiAgICByZXR1cm4gbmV3IF9UaW1lcihtaWxsaVNlY29uZHMsIGNhbGxiYWNrKTsKICB9Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQpfc2V0dXBIb29rcygpIHsKICBWTUxpYnJhcnlIb29rcy50aW1lckZhY3RvcnkgPSBfVGltZXIuX2ZhY3Rvcnk7Cn0KgdcATk48ASEBO1AKA04rAzATFhEBRwEiASABOQEbIREGIicWBAEZEw8OBAEeDRMXIQ4GHSMuJygZDxsIBhkfBAETOicVBAEhHiUqHg8PCAYEASMTOz0dSiMITCQIJi0PCBwGBAEsIi4fJykEAUpQJTMBOjo7AgEgLR8BUCAmAU5PKSEgAUtPJhsBJh0jASoBTSc+N0dMASgBTUcZGyoTBAEUTRkBHUY2HBgGP0lFPjZLARNNSRwWEgQBQTgEAUo3BAEtASEtGhwEASoBGQFOTigSFk5DHCcYEh0GBAEeTyQVHSQNPAYEAU43FB4lHyAPLB8ILhwNFyEfCAYEAU1OJR0dBiEEAVEqJiQlUC0PTiMgBjodKh8eGgQBJh5OUB8OBgFENk0PHxkhCA4gQhcOBgFJJi4qMCMGBAEpJCNMJ0pPTS0RUCUiCA1PD0ARSyUiCAYaBAEvTSw2FAYBJyUOBgFKSxEfDwouHyYjAUNCRicqIyckMCoaTCAvNSoODBwBGzg/KB4MKkUrIQwKCBAiKzEmGggdBgQBJBceLSgNJU4wBh9IGxsEAUUwHR0GRicEATIgHUcjBgQBSA0mIh83JyEEASgaGRYhBAFPGUYVOgYvBAIBIhAxAgEiZGFydDppc29sYXRlLXBhdGNoL3RpbWVyX2ltcGwuZGFydDNvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaXNvbGF0ZS9jYXBhYmlsaXR5LmRhcnSE6S8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaXNvbGF0ZTsKCi8qKgogKiBBbiB1bmZvcmdlYWJsZSBvYmplY3QgdGhhdCBjb21lcyBiYWNrIGFzIGVxdWFsIHdoZW4gcGFzc2VkIHRocm91Z2ggb3RoZXIKICogaXNvbGF0ZXMuCiAqCiAqIFNlbmRpbmcgYSBjYXBhYmlsaXR5IG9iamVjdCB0byBhbm90aGVyIGlzb2xhdGUsIGFuZCBnZXR0aW5nIGl0IGJhY2ssCiAqIHdpbGwgcHJvZHVjZSBhbiBvYmplY3QgdGhhdCBpcyBlcXVhbCB0byB0aGUgb3JpZ2luYWwuCiAqIFRoZXJlIGlzIG5vIG90aGVyIHdheSB0byBjcmVhdGUgb2JqZWN0cyBlcXVhbCB0byBhIGNhcGFiaWxpdHkgb2JqZWN0LgogKgogKiBDYXBhYmlsaXRpZXMgY2FuIGJlIHVzZWQgYXMgYWNjZXNzIGd1YXJkczogQSByZW1vdGUgaXNvbGF0ZSBjYW4gc2VuZAogKiBhIHJlcXVlc3QgZm9yIGFuIG9wZXJhdGlvbiwgYnV0IGl0IGlzIG9ubHkgYWxsb3dlZCBpZiB0aGUgcmVxdWVzdCBjb250YWlucwogKiB0aGUgY29ycmVjdCBjYXBhYmlsaXR5IG9iamVjdC4KICoKICogVGhpcyBhbGxvd3MgZXhwb3NpbmcgdGhlIHNhbWUgaW50ZXJmYWNlIHRvIG11bHRpcGxlIGNsaWVudHMsCiAqIGJ1dCByZXN0cmljdGluZyBzb21lIG9wZXJhdGlvbnMgdG8gb25seSB0aG9zZSBjbGllbnRzCiAqIHRoYXQgaGF2ZSBhbHNvIGJlZW4gZ2l2ZW4gdGhlIGNvcnJlc3BvbmRpbmcgY2FwYWJpbGl0eS4KICoKICogQ2FwYWJpbGl0aWVzIGNhbiBiZSB1c2VkIGluc2lkZSBhIHNpbmdsZSBpc29sYXRlLAogKiBidXQgdGhleSBoYXZlIG5vIGFkdmFudGFnZSBvdmVyCiAqIGp1c3QgdXNpbmcgYG5ldyBPYmplY3RgIHRvIGNyZWF0ZSBhIHVuaXF1ZSBvYmplY3QsCiAqIGFuZCBpdCBvZmZlcnMgbm8gcmVhbCBzZWN1cml0eSBhZ2FpbnN0IG90aGVyIGNvZGUKICogcnVubmluZyBpbiB0aGUgc2FtZSBpc29sYXRlLgogKi8KY2xhc3MgQ2FwYWJpbGl0eSB7CiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IHVuZm9yZ2VhYmxlIGNhcGFiaWxpdHkgb2JqZWN0LgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgQ2FwYWJpbGl0eSgpOwp9CiQATk48ARYBBEwNA0g5SQNITiIDQDk7AzUjNjUgBBMGMQYhAgEcZGFydDppc29sYXRlL2NhcGFiaWxpdHkuZGFydCpvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvbWF0aC9tYXRoLmRhcnSZSC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTWF0aGVtYXRpY2FsIGNvbnN0YW50cyBhbmQgZnVuY3Rpb25zLCBwbHVzIGEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuCi8vLwovLy8gVG8gdXNlIHRoaXMgbGlicmFyeSBpbiB5b3VyIGNvZGU6Ci8vLwovLy8gICAgIGltcG9ydCAnZGFydDptYXRoJzsKLy8vCi8vLyB7QGNhdGVnb3J5IENvcmV9CmxpYnJhcnkgZGFydC5tYXRoOwoKcGFydCAiamVua2luc19zbWlfaGFzaC5kYXJ0IjsKcGFydCAicG9pbnQuZGFydCI7CnBhcnQgInJhbmRvbS5kYXJ0IjsKcGFydCAicmVjdGFuZ2xlLmRhcnQiOwoKLy8vIEJhc2Ugb2YgdGhlIG5hdHVyYWwgbG9nYXJpdGhtcy4KLy8vCi8vLyBUeXBpY2FsbHkgd3JpdHRlbiBhcyAiZSIuCmNvbnN0IGRvdWJsZSBlID0gMi43MTgyODE4Mjg0NTkwNDU7CgovLy8gTmF0dXJhbCBsb2dhcml0aG0gb2YgMTAuCi8vLwovLy8gVGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIDEwIGlzIHRoZSBudW1iZXIgc3VjaCB0aGF0IGBwb3coRSwgTE4xMCkgPT0gMTBgLgovLy8gVGhpcyB2YWx1ZSBpcyBub3QgZXhhY3QsIGJ1dCBpdCBpcyB0aGUgY2xvc2VzdCByZXByZXNlbnRhYmxlIGRvdWJsZSB0byB0aGUKLy8vIGV4YWN0IG1hdGhlbWF0aWNhbCB2YWx1ZS4KY29uc3QgZG91YmxlIGxuMTAgPSAyLjMwMjU4NTA5Mjk5NDA0NjsKCi8vLyBOYXR1cmFsIGxvZ2FyaXRobSBvZiAyLgovLy8KLy8vIFRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiAyIGlzIHRoZSBudW1iZXIgc3VjaCB0aGF0IGBwb3coRSwgTE4yKSA9PSAyYC4KLy8vIFRoaXMgdmFsdWUgaXMgbm90IGV4YWN0LCBidXQgaXQgaXMgdGhlIGNsb3Nlc3QgcmVwcmVzZW50YWJsZSBkb3VibGUgdG8gdGhlCi8vLyBleGFjdCBtYXRoZW1hdGljYWwgdmFsdWUuCmNvbnN0IGRvdWJsZSBsbjIgPSAwLjY5MzE0NzE4MDU1OTk0NTM7CgovLy8gQmFzZS0yIGxvZ2FyaXRobSBvZiBbZV0uCmNvbnN0IGRvdWJsZSBsb2cyZSA9IDEuNDQyNjk1MDQwODg4OTYzNDsKCi8vLyBCYXNlLTEwIGxvZ2FyaXRobSBvZiBbZV0uCmNvbnN0IGRvdWJsZSBsb2cxMGUgPSAwLjQzNDI5NDQ4MTkwMzI1MTg7CgovLy8gVGhlIFBJIGNvbnN0YW50Lgpjb25zdCBkb3VibGUgcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzI7CgovLy8gU3F1YXJlIHJvb3Qgb2YgMS8yLgpjb25zdCBkb3VibGUgc3FydDFfMiA9IDAuNzA3MTA2NzgxMTg2NTQ3NjsKCi8vLyBTcXVhcmUgcm9vdCBvZiAyLgpjb25zdCBkb3VibGUgc3FydDIgPSAxLjQxNDIxMzU2MjM3MzA5NTE7CgovLy8gUmV0dXJucyB0aGUgbGVzc2VyIG9mIHR3byBudW1iZXJzLgovLy8KLy8vIFJldHVybnMgTmFOIGlmIGVpdGhlciBhcmd1bWVudCBpcyBOYU4uCi8vLyBUaGUgbGVzc2VyIG9mIGAtMC4wYCBhbmQgYDAuMGAgaXMgYC0wLjBgLgovLy8gSWYgdGhlIGFyZ3VtZW50cyBhcmUgb3RoZXJ3aXNlIGVxdWFsIChpbmNsdWRpbmcgaW50IGFuZCBkb3VibGVzIHdpdGggdGhlCi8vLyBzYW1lIG1hdGhlbWF0aWNhbCB2YWx1ZSkgdGhlbiBpdCBpcyB1bnNwZWNpZmllZCB3aGljaCBvZiB0aGUgdHdvIGFyZ3VtZW50cwovLy8gaXMgcmV0dXJuZWQuCmV4dGVybmFsIFQgbWluPFQgZXh0ZW5kcyBudW0+KFQgYSwgVCBiKTsKCi8vLyBSZXR1cm5zIHRoZSBsYXJnZXIgb2YgdHdvIG51bWJlcnMuCi8vLwovLy8gUmV0dXJucyBOYU4gaWYgZWl0aGVyIGFyZ3VtZW50IGlzIE5hTi4KLy8vIFRoZSBsYXJnZXIgb2YgYC0wLjBgIGFuZCBgMC4wYCBpcyBgMC4wYC4gSWYgdGhlIGFyZ3VtZW50cyBhcmUKLy8vIG90aGVyd2lzZSBlcXVhbCAoaW5jbHVkaW5nIGludCBhbmQgZG91YmxlcyB3aXRoIHRoZSBzYW1lIG1hdGhlbWF0aWNhbCB2YWx1ZSkKLy8vIHRoZW4gaXQgaXMgdW5zcGVjaWZpZWQgd2hpY2ggb2YgdGhlIHR3byBhcmd1bWVudHMgaXMgcmV0dXJuZWQuCmV4dGVybmFsIFQgbWF4PFQgZXh0ZW5kcyBudW0+KFQgYSwgVCBiKTsKCi8vLyBBIHZhcmlhbnQgb2YgW2F0YW5dLgovLy8KLy8vIENvbnZlcnRzIGJvdGggYXJndW1lbnRzIHRvIFtkb3VibGVdcy4KLy8vCi8vLyBSZXR1cm5zIHRoZSBhbmdsZSBpbiByYWRpYW5zIGJldHdlZW4gdGhlIHBvc2l0aXZlIHgtYXhpcwovLy8gYW5kIHRoZSB2ZWN0b3IgKFtiXSxbYV0pLgovLy8gVGhlIHJlc3VsdCBpcyBpbiB0aGUgcmFuZ2UgLVBJLi5QSS4KLy8vCi8vLyBJZiBbYl0gaXMgcG9zaXRpdmUsIHRoaXMgaXMgdGhlIHNhbWUgYXMgYGF0YW4oYi9hKWAuCi8vLwovLy8gVGhlIHJlc3VsdCBpcyBuZWdhdGl2ZSB3aGVuIFthXSBpcyBuZWdhdGl2ZSAoaW5jbHVkaW5nIHdoZW4gW2FdIGlzIHRoZQovLy8gZG91YmxlIC0wLjApLgovLy8KLy8vIElmIFthXSBpcyBlcXVhbCB0byB6ZXJvLCB0aGUgdmVjdG9yIChbYl0sW2FdKSBpcyBjb25zaWRlcmVkIHBhcmFsbGVsIHRvCi8vLyB0aGUgeC1heGlzLCBldmVuIGlmIFtiXSBpcyBhbHNvIGVxdWFsIHRvIHplcm8uIFRoZSBzaWduIG9mIFtiXSBkZXRlcm1pbmVzCi8vLyB0aGUgZGlyZWN0aW9uIG9mIHRoZSB2ZWN0b3IgYWxvbmcgdGhlIHgtYXhpcy4KLy8vCi8vLyBSZXR1cm5zIE5hTiBpZiBlaXRoZXIgYXJndW1lbnQgaXMgTmFOLgpleHRlcm5hbCBkb3VibGUgYXRhbjIobnVtIGEsIG51bSBiKTsKCi8vLyBSZXR1cm5zIFt4XSB0byB0aGUgcG93ZXIgb2YgW2V4cG9uZW50XS4KLy8vCi8vLyBJZiBbeF0gaXMgYW4gW2ludF0gYW5kIFtleHBvbmVudF0gaXMgYSBub24tbmVnYXRpdmUgW2ludF0sIHRoZSByZXN1bHQgaXMKLy8vIGFuIFtpbnRdLCBvdGhlcndpc2UgYm90aCBhcmd1bWVudHMgYXJlIGNvbnZlcnRlZCB0byBkb3VibGVzIGZpcnN0LCBhbmQgdGhlCi8vLyByZXN1bHQgaXMgYSBbZG91YmxlXS4KLy8vCi8vLyBGb3IgaW50ZWdlcnMsIHRoZSBwb3dlciBpcyBhbHdheXMgZXF1YWwgdG8gdGhlIG1hdGhlbWF0aWNhbCByZXN1bHQgb2YgYHhgIHRvCi8vLyB0aGUgcG93ZXIgYGV4cG9uZW50YCwgb25seSBsaW1pdGVkIGJ5IHRoZSBhdmFpbGFibGUgbWVtb3J5LgovLy8KLy8vIEZvciBkb3VibGVzLCBgcG93KHgsIHkpYCBoYW5kbGVzIGVkZ2UgY2FzZXMgYXMgZm9sbG93czoKLy8vCi8vLyAtIGlmIGB5YCBpcyB6ZXJvICgwLjAgb3IgLTAuMCksIHRoZSByZXN1bHQgaXMgYWx3YXlzIDEuMC4KLy8vIC0gaWYgYHhgIGlzIDEuMCwgdGhlIHJlc3VsdCBpcyBhbHdheXMgMS4wLgovLy8gLSBvdGhlcndpc2UsIGlmIGVpdGhlciBgeGAgb3IgYHlgIGlzIE5hTiB0aGVuIHRoZSByZXN1bHQgaXMgTmFOLgovLy8gLSBpZiBgeGAgaXMgbmVnYXRpdmUgKGJ1dCBub3QgLTAuMCkgYW5kIGB5YCBpcyBhIGZpbml0ZSBub24taW50ZWdlciwgdGhlCi8vLyAgIHJlc3VsdCBpcyBOYU4uCi8vLyAtIGlmIGB4YCBpcyBJbmZpbml0eSBhbmQgYHlgIGlzIG5lZ2F0aXZlLCB0aGUgcmVzdWx0IGlzIDAuMC4KLy8vIC0gaWYgYHhgIGlzIEluZmluaXR5IGFuZCBgeWAgaXMgcG9zaXRpdmUsIHRoZSByZXN1bHQgaXMgSW5maW5pdHkuCi8vLyAtIGlmIGB4YCBpcyAwLjAgYW5kIGB5YCBpcyBuZWdhdGl2ZSwgdGhlIHJlc3VsdCBpcyBJbmZpbml0eS4KLy8vIC0gaWYgYHhgIGlzIDAuMCBhbmQgYHlgIGlzIHBvc2l0aXZlLCB0aGUgcmVzdWx0IGlzIDAuMC4KLy8vIC0gaWYgYHhgIGlzIC1JbmZpbml0eSBvciAtMC4wIGFuZCBgeWAgaXMgYW4gb2RkIGludGVnZXIsIHRoZW4gdGhlIHJlc3VsdCBpcwovLy8gICBgLXBvdygteCAseSlgLgovLy8gLSBpZiBgeGAgaXMgLUluZmluaXR5IG9yIC0wLjAgYW5kIGB5YCBpcyBub3QgYW4gb2RkIGludGVnZXIsIHRoZW4gdGhlIHJlc3VsdAovLy8gICBpcyB0aGUgc2FtZSBhcyBgcG93KC14ICwgeSlgLgovLy8gLSBpZiBgeWAgaXMgSW5maW5pdHkgYW5kIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBgeGAgaXMgbGVzcyB0aGFuIDEsIHRoZQovLy8gICByZXN1bHQgaXMgMC4wLgovLy8gLSBpZiBgeWAgaXMgSW5maW5pdHkgYW5kIGB4YCBpcyAtMSwgdGhlIHJlc3VsdCBpcyAxLjAuCi8vLyAtIGlmIGB5YCBpcyBJbmZpbml0eSBhbmQgdGhlIGFic29sdXRlIHZhbHVlIG9mIGB4YCBpcyBncmVhdGVyIHRoYW4gMSwKLy8vICAgdGhlIHJlc3VsdCBpcyBJbmZpbml0eS4KLy8vIC0gaWYgYHlgIGlzIC1JbmZpbml0eSwgdGhlIHJlc3VsdCBpcyBgMS9wb3coeCwgSW5maW5pdHkpYC4KLy8vCi8vLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBgcG93YCBmdW5jdGlvbiBkZWZpbmVkIGluIHRoZSBJRUVFIFN0YW5kYXJkCi8vLyA3NTQtMjAwOC4KLy8vCi8vLyBOb3RpY2UgdGhhdCB0aGUgcmVzdWx0IG1heSBvdmVyZmxvdy4gSWYgaW50ZWdlcnMgYXJlIHJlcHJlc2VudGVkIGFzIDY0LWJpdAovLy8gbnVtYmVycywgYW4gaW50ZWdlciByZXN1bHQgbWF5IGJlIHRydW5jYXRlZCwgYW5kIGEgZG91YmxlIHJlc3VsdCBtYXkKLy8vIG92ZXJmbG93IHRvIHBvc2l0aXZlIG9yIG5lZ2F0aXZlIFtkb3VibGUuaW5maW5pdHldLgpleHRlcm5hbCBudW0gcG93KG51bSB4LCBudW0gZXhwb25lbnQpOwoKLy8vIENvbnZlcnRzIFtyYWRpYW5zXSB0byBhIFtkb3VibGVdIGFuZCByZXR1cm5zIHRoZSBzaW5lIG9mIHRoZSB2YWx1ZS4KLy8vCi8vLyBJZiBbcmFkaWFuc10gaXMgbm90IGEgZmluaXRlIG51bWJlciwgdGhlIHJlc3VsdCBpcyBOYU4uCmV4dGVybmFsIGRvdWJsZSBzaW4obnVtIHJhZGlhbnMpOwoKLy8vIENvbnZlcnRzIFtyYWRpYW5zXSB0byBhIFtkb3VibGVdIGFuZCByZXR1cm5zIHRoZSBjb3NpbmUgb2YgdGhlIHZhbHVlLgovLy8KLy8vIElmIFtyYWRpYW5zXSBpcyBub3QgYSBmaW5pdGUgbnVtYmVyLCB0aGUgcmVzdWx0IGlzIE5hTi4KZXh0ZXJuYWwgZG91YmxlIGNvcyhudW0gcmFkaWFucyk7CgovLy8gQ29udmVydHMgW3JhZGlhbnNdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgdGhlIHRhbmdlbnQgb2YgdGhlIHZhbHVlLgovLy8KLy8vIFRoZSB0YW5nZW50IGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gYHNpbihyYWRpYW5zKS9jb3MocmFkaWFucylgIGFuZCBtYXkgYmUKLy8vIGluZmluaXRlIChwb3NpdGl2ZSBvciBuZWdhdGl2ZSkgd2hlbiBgY29zKHJhZGlhbnMpYCBpcyBlcXVhbCB0byB6ZXJvLgovLy8gSWYgW3JhZGlhbnNdIGlzIG5vdCBhIGZpbml0ZSBudW1iZXIsIHRoZSByZXN1bHQgaXMgTmFOLgpleHRlcm5hbCBkb3VibGUgdGFuKG51bSByYWRpYW5zKTsKCi8vLyBDb252ZXJ0cyBbeF0gdG8gYSBbZG91YmxlXSBhbmQgcmV0dXJucyBpdHMgYXJjIGNvc2luZSBpbiByYWRpYW5zLgovLy8KLy8vIFJldHVybnMgYSB2YWx1ZSBpbiB0aGUgcmFuZ2UgMC4uUEksIG9yIE5hTiBpZiBbeF0gaXMgb3V0c2lkZQovLy8gdGhlIHJhbmdlIC0xLi4xLgpleHRlcm5hbCBkb3VibGUgYWNvcyhudW0geCk7CgovLy8gQ29udmVydHMgW3hdIHRvIGEgW2RvdWJsZV0gYW5kIHJldHVybnMgaXRzIGFyYyBzaW5lIGluIHJhZGlhbnMuCi8vLwovLy8gUmV0dXJucyBhIHZhbHVlIGluIHRoZSByYW5nZSAtUEkvMi4uUEkvMiwgb3IgTmFOIGlmIFt4XSBpcyBvdXRzaWRlCi8vLyB0aGUgcmFuZ2UgLTEuLjEuCmV4dGVybmFsIGRvdWJsZSBhc2luKG51bSB4KTsKCi8vLyBDb252ZXJ0cyBbeF0gdG8gYSBbZG91YmxlXSBhbmQgcmV0dXJucyBpdHMgYXJjIHRhbmdlbnQgaW4gcmFkaWFucy4KLy8vCi8vLyBSZXR1cm5zIGEgdmFsdWUgaW4gdGhlIHJhbmdlIC1QSS8yLi5QSS8yLCBvciBOYU4gaWYgW3hdIGlzIE5hTi4KZXh0ZXJuYWwgZG91YmxlIGF0YW4obnVtIHgpOwoKLy8vIENvbnZlcnRzIFt4XSB0byBhIFtkb3VibGVdIGFuZCByZXR1cm5zIHRoZSBwb3NpdGl2ZSBzcXVhcmUgcm9vdCBvZiB0aGUKLy8vIHZhbHVlLgovLy8KLy8vIFJldHVybnMgLTAuMCBpZiBbeF0gaXMgLTAuMCwgYW5kIE5hTiBpZiBbeF0gaXMgb3RoZXJ3aXNlIG5lZ2F0aXZlIG9yIE5hTi4KZXh0ZXJuYWwgZG91YmxlIHNxcnQobnVtIHgpOwoKLy8vIENvbnZlcnRzIFt4XSB0byBhIFtkb3VibGVdIGFuZCByZXR1cm5zIHRoZSBuYXR1cmFsIGV4cG9uZW50LCBbZV0sCi8vLyB0byB0aGUgcG93ZXIgW3hdLgovLy8KLy8vIFJldHVybnMgTmFOIGlmIFt4XSBpcyBOYU4uCmV4dGVybmFsIGRvdWJsZSBleHAobnVtIHgpOwoKLy8vIENvbnZlcnRzIFt4XSB0byBhIFtkb3VibGVdIGFuZCByZXR1cm5zIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiB0aGUgdmFsdWUuCi8vLwovLy8gUmV0dXJucyBuZWdhdGl2ZSBpbmZpbml0eSBpZiBbeF0gaXMgZXF1YWwgdG8gemVyby4KLy8vIFJldHVybnMgTmFOIGlmIFt4XSBpcyBOYU4gb3IgbGVzcyB0aGFuIHplcm8uCmV4dGVybmFsIGRvdWJsZSBsb2cobnVtIHgpOwqAtQBOTjwBSgQmBBwEFRMBHhMUFwEkBB4kAR0ETk8eJwEcBEtPHicBHSkBHioBFSYBGCsBFikBJwQrLk1PESkBJwQrQlFDKQEZBCoEPR4oBDkESxIETE4yBCslASwETU8aBFFABDwEPi9FTRVBRkE8UBVRJEsVO0oePwRIDgRPSTgnAUgEPCIBSgQ8IgFLBFFKPCIBRgRBFR0BRARHFR0BRwREHQFLCwROHQFGFgQfHAFPBDcxHAEJZGFydDptYXRoL29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvbWF0aF9wYXRjaC5kYXJ0pTQvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIE5vdGU6IHRoZSBWTSBjb25jYXRlbmF0ZXMgYWxsIHBhdGNoIGZpbGVzIGludG8gYSBzaW5nbGUgcGF0Y2ggZmlsZS4gVGhpcwovLy8gZmlsZSBpcyB0aGUgZmlyc3QgcGF0Y2ggaW4gImRhcnQ6bWF0aCIgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBpbXBvcnRzIHVzZWQKLy8vIGJ5IHBhdGNoZXMgb2YgdGhhdCBsaWJyYXJ5LiBXZSBwbGFuIHRvIGNoYW5nZSB0aGlzIHdoZW4gd2UgaGF2ZSBhIHNoYXJlZAovLy8gZnJvbnQgZW5kIGFuZCBzaW1wbHkgdXNlIHBhcnRzLgoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgc2hvdyBwYXRjaDsKCmltcG9ydCAiZGFydDp0eXBlZF9kYXRhIiBzaG93IFVpbnQzMkxpc3Q7CgovLy8gVGhlcmUgYXJlIG5vIHBhcnRzIG9mIHRoaXMgcGF0Y2ggbGlicmFyeS4KCkBwYXRjaApAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKVCBtaW48VCBleHRlbmRzIG51bT4oVCBhLCBUIGIpIHsKICAvLyBUaGVzZSBwYXJ0aWFsbHkgcmVkdW5kYW50IHR5cGUgY2hlY2tzIGltcHJvdmUgY29kZSBxdWFsaXR5IGZvciBkYXJ0MmpzLgogIC8vIE1vc3Qgb2YgdGhlIGltcHJvdmVtZW50IGlzIGF0IGNhbGwgc2l0ZXMgZnJvbSB0aGUgaW5mZXJyZWQgbm9uLW51bGwgbnVtCiAgLy8gcmV0dXJuIHR5cGUuCiAgaWYgKGEgaXMhIG51bSkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoYSk7CiAgaWYgKGIgaXMhIG51bSkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoYik7CgogIGlmIChhID4gYikgcmV0dXJuIGI7CiAgaWYgKGEgPCBiKSByZXR1cm4gYTsKICBpZiAoYiBpcyBkb3VibGUpIHsKICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgTmFOIGFuZCAtMC4wLiBJZiBvbmUgYXJndW1lbnQgaXMgTmFOIHJldHVybiBOYU4uCiAgICAvLyBbbWluXSBtdXN0IGFsc28gZGlzdGluZ3Vpc2ggYmV0d2VlbiAtMC4wIGFuZCAwLjAuCiAgICBpZiAoYSBpcyBkb3VibGUpIHsKICAgICAgaWYgKGEgPT0gMC4wKSB7CiAgICAgICAgLy8gYSBpcyBlaXRoZXIgMC4wIG9yIC0wLjAuIGIgaXMgZWl0aGVyIDAuMCwgLTAuMCBvciBOYU4uCiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyByZXR1cm5zIC0wLjAgaWYgZWl0aGVyIGEgb3IgYiBpcyAtMC4wLCBhbmQgaXQKICAgICAgICAvLyByZXR1cm5zIE5hTiBpZiBiIGlzIE5hTi4KICAgICAgICBudW0gbiA9IChhICsgYikgKiBhICogYjsKICAgICAgICByZXR1cm4gbjsKICAgICAgfQogICAgfQogICAgLy8gQ2hlY2sgZm9yIE5hTiBhbmQgYiA9PSAtMC4wLgogICAgaWYgKGEgPT0gMCAmJiBiLmlzTmVnYXRpdmUgfHwgYi5pc05hTikgcmV0dXJuIGI7CiAgICByZXR1cm4gYTsKICB9CiAgcmV0dXJuIGE7Cn0KCkBwYXRjaApAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKVCBtYXg8VCBleHRlbmRzIG51bT4oVCBhLCBUIGIpIHsKICAvLyBUaGVzZSBwYXJ0aWFsbHkgcmVkdW5kYW50IHR5cGUgY2hlY2tzIGltcHJvdmUgY29kZSBxdWFsaXR5IGZvciBkYXJ0MmpzLgogIC8vIE1vc3Qgb2YgdGhlIGltcHJvdmVtZW50IGlzIGF0IGNhbGwgc2l0ZXMgZnJvbSB0aGUgaW5mZXJyZWQgbm9uLW51bGwgbnVtCiAgLy8gcmV0dXJuIHR5cGUuCiAgaWYgKGEgaXMhIG51bSkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoYSk7CiAgaWYgKGIgaXMhIG51bSkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoYik7CgogIGlmIChhID4gYikgcmV0dXJuIGE7CiAgaWYgKGEgPCBiKSByZXR1cm4gYjsKICBpZiAoYiBpcyBkb3VibGUpIHsKICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgTmFOIGFuZCAtMC4wLiBJZiBvbmUgYXJndW1lbnQgaXMgTmFOIHJldHVybiBOYU4uCiAgICAvLyBbbWF4XSBtdXN0IGFsc28gZGlzdGluZ3Vpc2ggYmV0d2VlbiAtMC4wIGFuZCAwLjAuCiAgICBpZiAoYSBpcyBkb3VibGUpIHsKICAgICAgaWYgKGEgPT0gMC4wKSB7CiAgICAgICAgLy8gYSBpcyBlaXRoZXIgMC4wIG9yIC0wLjAuIGIgaXMgZWl0aGVyIDAuMCwgLTAuMCwgb3IgTmFOLgogICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgcmV0dXJucyAwLjAgaWYgZWl0aGVyIGEgb3IgYiBpcyAwLjAsIGFuZCBpdAogICAgICAgIC8vIHJldHVybnMgTmFOIGlmIGIgaXMgTmFOLgogICAgICAgIG51bSBuID0gYSArIGI7CiAgICAgICAgcmV0dXJuIG47CiAgICAgIH0KICAgIH0KICAgIC8vIENoZWNrIGZvciBOYU4uCiAgICBpZiAoYi5pc05hTikgcmV0dXJuIGI7CiAgICByZXR1cm4gYTsKICB9CiAgLy8gbWF4KC0wLjAsIDApIG11c3QgcmV0dXJuIDAuCiAgaWYgKGIgPT0gMCAmJiBhLmlzTmVnYXRpdmUpIHJldHVybiBiOwogIHJldHVybiBhOwp9CgovLyBJZiBbeF0gaXMgYW4gW2ludF0gYW5kIFtleHBvbmVudF0gaXMgYSBub24tbmVnYXRpdmUgW2ludF0sIHRoZSByZXN1bHQgaXMKLy8gYW4gW2ludF0sIG90aGVyd2lzZSB0aGUgcmVzdWx0IGlzIGEgW2RvdWJsZV0uCkBwYXRjaApAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKbnVtIHBvdyhudW0geCwgbnVtIGV4cG9uZW50KSB7CiAgaWYgKCh4IGlzIGludCkgJiYgKGV4cG9uZW50IGlzIGludCkgJiYgKGV4cG9uZW50ID49IDApKSB7CiAgICByZXR1cm4gX2ludFBvdyh4LCBleHBvbmVudCk7CiAgfQogIHJldHVybiBfZG91YmxlUG93KHgudG9Eb3VibGUoKSwgZXhwb25lbnQudG9Eb3VibGUoKSk7Cn0KCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKZG91YmxlIF9kb3VibGVQb3coZG91YmxlIGJhc2UsIGRvdWJsZSBleHBvbmVudCkgewogIGlmIChleHBvbmVudCA9PSAwLjApIHsKICAgIHJldHVybiAxLjA7IC8vIEVDTUEtMjYyIDE1LjguMi4xMwogIH0KICAvLyBTcGVlZCB1cCBzaW1wbGUgY2FzZXMuCiAgaWYgKGV4cG9uZW50ID09IDEuMCkgcmV0dXJuIGJhc2U7CiAgaWYgKGV4cG9uZW50ID09IDIuMCkgcmV0dXJuIGJhc2UgKiBiYXNlOwogIGlmIChleHBvbmVudCA9PSAzLjApIHJldHVybiBiYXNlICogYmFzZSAqIGJhc2U7CgogIGlmIChiYXNlID09IDEuMCkgcmV0dXJuIDEuMDsKCiAgaWYgKGJhc2UuaXNOYU4gfHwgZXhwb25lbnQuaXNOYU4pIHsKICAgIHJldHVybiBkb3VibGUubmFuOwogIH0KICBpZiAoKGJhc2UgIT0gLWRvdWJsZS5pbmZpbml0eSkgJiYgKGV4cG9uZW50ID09IDAuNSkpIHsKICAgIGlmIChiYXNlID09IDAuMCkgewogICAgICByZXR1cm4gMC4wOwogICAgfQogICAgcmV0dXJuIHNxcnQoYmFzZSk7CiAgfQogIHJldHVybiBfcG93KGJhc2UudG9Eb3VibGUoKSwgZXhwb25lbnQudG9Eb3VibGUoKSk7Cn0KCmRvdWJsZSBfcG93KGRvdWJsZSBiYXNlLCBkb3VibGUgZXhwb25lbnQpIG5hdGl2ZSAiTWF0aF9kb3VibGVQb3ciOwoKaW50IF9pbnRQb3coaW50IGJhc2UsIGludCBleHBvbmVudCkgewogIC8vIEV4cG9uZW50aWF0aW9uIGJ5IHNxdWFyaW5nLgogIGludCByZXN1bHQgPSAxOwogIHdoaWxlIChleHBvbmVudCAhPSAwKSB7CiAgICBpZiAoKGV4cG9uZW50ICYgMSkgPT0gMSkgewogICAgICByZXN1bHQgKj0gYmFzZTsKICAgIH0KICAgIGV4cG9uZW50ID4+PSAxOwogICAgLy8gU2tpcCB1bm5lY2Vzc2FyeSBvcGVyYXRpb24gKGNhbiBvdmVyZmxvdyB0byBNaW50KS4KICAgIGlmIChleHBvbmVudCAhPSAwKSB7CiAgICAgIGJhc2UgKj0gYmFzZTsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQoKQHBhdGNoCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKZG91YmxlIGF0YW4yKG51bSBhLCBudW0gYikgPT4gX2F0YW4yKGEudG9Eb3VibGUoKSwgYi50b0RvdWJsZSgpKTsKQHBhdGNoCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKZG91YmxlIHNpbihudW0gcmFkaWFucykgPT4gX3NpbihyYWRpYW5zLnRvRG91YmxlKCkpOwpAcGF0Y2gKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQpAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQpkb3VibGUgY29zKG51bSByYWRpYW5zKSA9PiBfY29zKHJhZGlhbnMudG9Eb3VibGUoKSk7CkBwYXRjaApAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCkBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCmRvdWJsZSB0YW4obnVtIHJhZGlhbnMpID0+IF90YW4ocmFkaWFucy50b0RvdWJsZSgpKTsKQHBhdGNoCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKZG91YmxlIGFjb3MobnVtIHgpID0+IF9hY29zKHgudG9Eb3VibGUoKSk7CkBwYXRjaApAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCkBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCmRvdWJsZSBhc2luKG51bSB4KSA9PiBfYXNpbih4LnRvRG91YmxlKCkpOwpAcGF0Y2gKQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19Eb3VibGUiKQpAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQpkb3VibGUgYXRhbihudW0geCkgPT4gX2F0YW4oeC50b0RvdWJsZSgpKTsKQHBhdGNoCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfRG91YmxlIikKQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKZG91YmxlIHNxcnQobnVtIHgpID0+IF9zcXJ0KHgudG9Eb3VibGUoKSk7CkBwYXRjaApAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKZG91YmxlIGV4cChudW0geCkgPT4gX2V4cCh4LnRvRG91YmxlKCkpOwpAcGF0Y2gKQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCmRvdWJsZSBsb2cobnVtIHgpID0+IF9sb2coeC50b0RvdWJsZSgpKTsKCmRvdWJsZSBfYXRhbjIoZG91YmxlIGEsIGRvdWJsZSBiKSBuYXRpdmUgIk1hdGhfYXRhbjIiOwpkb3VibGUgX3Npbihkb3VibGUgeCkgbmF0aXZlICJNYXRoX3NpbiI7CmRvdWJsZSBfY29zKGRvdWJsZSB4KSBuYXRpdmUgIk1hdGhfY29zIjsKZG91YmxlIF90YW4oZG91YmxlIHgpIG5hdGl2ZSAiTWF0aF90YW4iOwpkb3VibGUgX2Fjb3MoZG91YmxlIHgpIG5hdGl2ZSAiTWF0aF9hY29zIjsKZG91YmxlIF9hc2luKGRvdWJsZSB4KSBuYXRpdmUgIk1hdGhfYXNpbiI7CmRvdWJsZSBfYXRhbihkb3VibGUgeCkgbmF0aXZlICJNYXRoX2F0YW4iOwpkb3VibGUgX3NxcnQoZG91YmxlIHgpIG5hdGl2ZSAiTWF0aF9zcXJ0IjsKZG91YmxlIF9leHAoZG91YmxlIHgpIG5hdGl2ZSAiTWF0aF9leHAiOwpkb3VibGUgX2xvZyhkb3VibGUgeCkgbmF0aXZlICJNYXRoX2xvZyI7CgovLyBUT0RPKGlwb3N2YSk6IEhhbmRsZSBwYXRjaCBtZXRob2RzIHdpdGhpbiBhIHBhdGNoIGNsYXNzIGNvcnJlY3RseS4KQHBhdGNoCmNsYXNzIFJhbmRvbSB7CiAgQHBhdGNoCiAgZmFjdG9yeSBSYW5kb20oW2ludCBzZWVkXSkgewogICAgdmFyIHN0YXRlID0gX1JhbmRvbS5fc2V0dXBTZWVkKChzZWVkID09IG51bGwpID8gX1JhbmRvbS5fbmV4dFNlZWQoKSA6IHNlZWQpOwogICAgLy8gQ3JhbmsgYSBjb3VwbGUgb2YgdGltZXMgdG8gZGlzdHJpYnV0ZSB0aGUgc2VlZCBiaXRzIGEgYml0IGZ1cnRoZXIuCiAgICByZXR1cm4gbmV3IF9SYW5kb20uX3dpdGhTdGF0ZShzdGF0ZSkKICAgICAgLi5fbmV4dFN0YXRlKCkKICAgICAgLi5fbmV4dFN0YXRlKCkKICAgICAgLi5fbmV4dFN0YXRlKCkKICAgICAgLi5fbmV4dFN0YXRlKCk7CiAgfQoKICBAcGF0Y2gKICBmYWN0b3J5IFJhbmRvbS5zZWN1cmUoKSB7CiAgICByZXR1cm4gbmV3IF9TZWN1cmVSYW5kb20oKTsKICB9Cn0KCmNsYXNzIF9SYW5kb20gaW1wbGVtZW50cyBSYW5kb20gewogIC8vIEludGVybmFsIHN0YXRlIG9mIHRoZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZmluYWwgVWludDMyTGlzdCBfc3RhdGU7CiAgc3RhdGljIGNvbnN0IF9rU1RBVEVfTE8gPSAwOwogIHN0YXRpYyBjb25zdCBfa1NUQVRFX0hJID0gMTsgLy8gVW51c2VkIGluIERhcnQgY29kZS4KCiAgX1JhbmRvbS5fd2l0aFN0YXRlKHRoaXMuX3N0YXRlKTsKCiAgLy8gVGhlIGFsZ29yaXRobSB1c2VkIGhlcmUgaXMgTXVsdGlwbHkgd2l0aCBDYXJyeSAoTVdDKSB3aXRoIGEgQmFzZSBiID0gMl4zMi4KICAvLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL011bHRpcGx5LXdpdGgtY2FycnkKICAvLyBUaGUgY29uc3RhbnQgQSBpcyBzZWxlY3RlZCBmcm9tICJOdW1lcmljYWwgUmVjaXBlcyAzcmQgRWRpdGlvbiIgcC4zNDggQjEuCgogIC8vIEltcGxlbWVudHM6CiAgLy8gICBjb25zdCBfQSA9IDB4ZmZmZmRhNjE7CiAgLy8gICB2YXIgc3RhdGUgPQogIC8vICAgICAgICgoX0EgKiAoX3N0YXRlW19rU1RBVEVfTE9dKSkgKyBfc3RhdGVbX2tTVEFURV9ISV0pICYgKCgxIDw8IDY0KSAtIDEpOwogIC8vICAgX3N0YXRlW19rU1RBVEVfTE9dID0gc3RhdGUgJiAoKDEgPDwgMzIpIC0gMSk7CiAgLy8gICBfc3RhdGVbX2tTVEFURV9ISV0gPSBzdGF0ZSA+PiAzMjsKICAvLyBUaGlzIGlzIGEgbmF0aXZlIHRvIHByZXZlbnQgNjQtYml0IG9wZXJhdGlvbnMgaW4gRGFydCwgd2hpY2gKICAvLyBmYWlsIHdpdGggLS10aHJvd19vbl9qYXZhc2NyaXB0X2ludF9vdmVyZmxvdy4KICAvLyBUT0RPKHJlZ2lzKTogSW1wbGVtZW50IGluIERhcnQgYW5kIHJlbW92ZSBSYW5kb21fbmV4dFN0YXRlIGluIG1hdGguY2MuCiAgdm9pZCBfbmV4dFN0YXRlKCkgbmF0aXZlICJSYW5kb21fbmV4dFN0YXRlIjsKCiAgaW50IG5leHRJbnQoaW50IG1heCkgewogICAgY29uc3QgbGltaXQgPSAweDNGRkZGRkZGOwogICAgaWYgKChtYXggPD0gMCkgfHwgKChtYXggPiBsaW1pdCkgJiYgKG1heCA+IF9QT1cyXzMyKSkpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoCiAgICAgICAgICBtYXgsIDEsIF9QT1cyXzMyLCAibWF4IiwgIk11c3QgYmUgcG9zaXRpdmUgYW5kIDw9IDJeMzIiKTsKICAgIH0KICAgIGlmICgobWF4ICYgLW1heCkgPT0gbWF4KSB7CiAgICAgIC8vIEZhc3QgY2FzZSBmb3IgcG93ZXJzIG9mIHR3by4KICAgICAgX25leHRTdGF0ZSgpOwogICAgICByZXR1cm4gX3N0YXRlW19rU1RBVEVfTE9dICYgKG1heCAtIDEpOwogICAgfQoKICAgIHZhciBybmQzMjsKICAgIHZhciByZXN1bHQ7CiAgICBkbyB7CiAgICAgIF9uZXh0U3RhdGUoKTsKICAgICAgcm5kMzIgPSBfc3RhdGVbX2tTVEFURV9MT107CiAgICAgIHJlc3VsdCA9IHJuZDMyICUgbWF4OwogICAgfSB3aGlsZSAoKHJuZDMyIC0gcmVzdWx0ICsgbWF4KSA+IF9QT1cyXzMyKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBkb3VibGUgbmV4dERvdWJsZSgpIHsKICAgIHJldHVybiAoKG5leHRJbnQoMSA8PCAyNikgKiBfUE9XMl8yN19EKSArIG5leHRJbnQoMSA8PCAyNykpIC8gX1BPVzJfNTNfRDsKICB9CgogIGJvb2wgbmV4dEJvb2woKSB7CiAgICByZXR1cm4gbmV4dEludCgyKSA9PSAwOwogIH0KCiAgLy8gQ29uc3RhbnRzIHVzZWQgYnkgdGhlIGFsZ29yaXRobS4KICBzdGF0aWMgY29uc3QgX1BPVzJfMzIgPSAxIDw8IDMyOwogIHN0YXRpYyBjb25zdCBfUE9XMl81M19EID0gMS4wICogKDEgPDwgNTMpOwogIHN0YXRpYyBjb25zdCBfUE9XMl8yN19EID0gMS4wICogKDEgPDwgMjcpOwoKICAvLyBVc2UgYSBzaW5nbGV0b24gUmFuZG9tIG9iamVjdCB0byBnZXQgYSBuZXcgc2VlZCBpZiBubyBzZWVkIHdhcyBwYXNzZWQuCiAgc3RhdGljIGZpbmFsIF9wcm5nID0gbmV3IF9SYW5kb20uX3dpdGhTdGF0ZShfaW5pdGlhbFNlZWQoKSk7CgogIC8vIFRoaXMgaXMgYSBuYXRpdmUgdG8gcHJldmVudCA2NC1iaXQgb3BlcmF0aW9ucyBpbiBEYXJ0LCB3aGljaAogIC8vIGZhaWwgd2l0aCAtLXRocm93X29uX2phdmFzY3JpcHRfaW50X292ZXJmbG93LgogIC8vIFRPRE8ocmVnaXMpOiBJbXBsZW1lbnQgaGVyZSBpbiBEYXJ0IGFuZCByZW1vdmUgbmF0aXZlIGluIG1hdGguY2MuCiAgc3RhdGljIFVpbnQzMkxpc3QgX3NldHVwU2VlZChpbnQgc2VlZCkgbmF0aXZlICJSYW5kb21fc2V0dXBTZWVkIjsKICAvLyBHZXQgYSBzZWVkIGZyb20gdGhlIFZNJ3MgcmFuZG9tIG51bWJlciBwcm92aWRlci4KICBzdGF0aWMgVWludDMyTGlzdCBfaW5pdGlhbFNlZWQoKSBuYXRpdmUgIlJhbmRvbV9pbml0aWFsU2VlZCI7CgogIHN0YXRpYyBpbnQgX25leHRTZWVkKCkgewogICAgLy8gVHJpZ2dlciB0aGUgUFJORyBvbmNlIHRvIGNoYW5nZSB0aGUgaW50ZXJuYWwgc3RhdGUuCiAgICBfcHJuZy5fbmV4dFN0YXRlKCk7CiAgICByZXR1cm4gX3BybmcuX3N0YXRlW19rU1RBVEVfTE9dOwogIH0KfQoKY2xhc3MgX1NlY3VyZVJhbmRvbSBpbXBsZW1lbnRzIFJhbmRvbSB7CiAgX1NlY3VyZVJhbmRvbSgpIHsKICAgIC8vIFRocm93IGVhcmx5IGluIGNvbnN0cnVjdG9yIGlmIGVudHJvcHkgc291cmNlIGlzIG5vdCBob29rZWQgdXAuCiAgICBfZ2V0Qnl0ZXMoMSk7CiAgfQoKICAvLyBSZXR1cm4gY291bnQgYnl0ZXMgb2YgZW50cm9weSBhcyBhIHBvc2l0aXZlIGludGVnZXI7IGNvdW50IDw9IDguCiAgc3RhdGljIGludCBfZ2V0Qnl0ZXMoaW50IGNvdW50KSBuYXRpdmUgIlNlY3VyZVJhbmRvbV9nZXRCeXRlcyI7CgogIGludCBuZXh0SW50KGludCBtYXgpIHsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwoCiAgICAgICAgbWF4LCAxLCBfUE9XMl8zMiwgIm1heCIsICJNdXN0IGJlIHBvc2l0aXZlIGFuZCA8PSAyXjMyIik7CiAgICBmaW5hbCBieXRlQ291bnQgPSAoKG1heCAtIDEpLmJpdExlbmd0aCArIDcpID4+IDM7CiAgICBpZiAoYnl0ZUNvdW50ID09IDApIHsKICAgICAgcmV0dXJuIDA7IC8vIE5vdCByYW5kb20gaWYgbWF4ID09IDEuCiAgICB9CiAgICB2YXIgcm5kOwogICAgdmFyIHJlc3VsdDsKICAgIGRvIHsKICAgICAgcm5kID0gX2dldEJ5dGVzKGJ5dGVDb3VudCk7CiAgICAgIHJlc3VsdCA9IHJuZCAlIG1heDsKICAgIH0gd2hpbGUgKChybmQgLSByZXN1bHQgKyBtYXgpID4gKDEgPDwgKGJ5dGVDb3VudCA8PCAzKSkpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGRvdWJsZSBuZXh0RG91YmxlKCkgewogICAgcmV0dXJuIChfZ2V0Qnl0ZXMoNykgPj4gMykgLyBfUE9XMl81M19EOwogIH0KCiAgYm9vbCBuZXh0Qm9vbCgpIHsKICAgIHJldHVybiBfZ2V0Qnl0ZXMoMSkuaXNFdmVuOwogIH0KCiAgLy8gQ29uc3RhbnRzIHVzZWQgYnkgdGhlIGFsZ29yaXRobS4KICBzdGF0aWMgY29uc3QgX1BPVzJfMzIgPSAxIDw8IDMyOwogIHN0YXRpYyBjb25zdCBfUE9XMl81M19EID0gMS4wICogKDEgPDwgNTMpOwp9CoE7AE5OPAFNT00kASQBKgEuAQccIU1NEi0tARcXFUk5FxZCRyQhEggGJDUOBAwCAQccIU1NEi0tARcXFUk5FxZDRSQXEggGFhsOBCEoDAIBTDEHHB88IQQ4AgE1MhkmBBwkKzIBHwEmFwQ5FxIGFwQ1AgFDASYhEhofFgYUOhkUBgQRAgEHNRtCBzUbNQc1GzUHNRs1BzUbKwc1GysHNRsrBzUbKwccKQccKQE3KSkpKysrKykpAUYHDwkfUUopFRUVFgQBCRwgBAIBIjQcGx83ASMBUDZPAREeE1E1KUIzTC8BGR49IkQGHyYULQYBDxAJFCIcMRMEARhOBAEUHAQBJiMtLQFMPwFCM0dENkABGzsYJQQCASgURhIEAUZCARklQjYaKwYNEAkiGj4TBAEYLQQBFCAEASYjLQIBH2RhcnQ6bWF0aC1wYXRjaC9tYXRoX3BhdGNoLmRhcnQ2b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL21hdGgvamVua2luc19zbWlfaGFzaC5kYXJ0hTMvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgpwYXJ0IG9mIGRhcnQubWF0aDsKCi8vLyBUaGlzIGlzIHRoZSBbSmVua2lucyBoYXNoIGZ1bmN0aW9uXVsxXSBidXQgdXNpbmcgbWFza2luZyB0byBrZWVwCi8vLyB2YWx1ZXMgaW4gU01JIHJhbmdlLgovLy8KLy8vIFsxXTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9KZW5raW5zX2hhc2hfZnVuY3Rpb24KLy8vCi8vLyBVc2U6Ci8vLyBIYXNoIGVhY2ggdmFsdWUgd2l0aCB0aGUgaGFzaCBvZiB0aGUgcHJldmlvdXMgdmFsdWUsIHRoZW4gZ2V0IHRoZSBmaW5hbAovLy8gaGFzaCBieSBjYWxsaW5nIGZpbmlzaC4KLy8vCi8vLyAgICAgdmFyIGhhc2ggPSAwOwovLy8gICAgIGZvciAodmFyIHZhbHVlIGluIHZhbHVlcykgewovLy8gICAgICAgaGFzaCA9IEplbmtpbnNTbWlIYXNoLmNvbWJpbmUoaGFzaCwgdmFsdWUuaGFzaENvZGUpOwovLy8gICAgIH0KLy8vICAgICBoYXNoID0gSmVua2luc1NtaUhhc2guZmluaXNoKGhhc2gpOwpjbGFzcyBfSmVua2luc1NtaUhhc2ggewogIC8vIFRPRE8oMTE2MTcpOiBUaGlzIGNsYXNzIHNob3VsZCBiZSBvcHRpbWl6ZWQgYW5kIHN0YW5kYXJkaXplZCBlbHNld2hlcmUuCgogIHN0YXRpYyBpbnQgY29tYmluZShpbnQgaGFzaCwgaW50IHZhbHVlKSB7CiAgICBoYXNoID0gMHgxZmZmZmZmZiAmIChoYXNoICsgdmFsdWUpOwogICAgaGFzaCA9IDB4MWZmZmZmZmYgJiAoaGFzaCArICgoMHgwMDA3ZmZmZiAmIGhhc2gpIDw8IDEwKSk7CiAgICByZXR1cm4gaGFzaCBeIChoYXNoID4+IDYpOwogIH0KCiAgc3RhdGljIGludCBmaW5pc2goaW50IGhhc2gpIHsKICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDNmZmZmZmYgJiBoYXNoKSA8PCAzKSk7CiAgICBoYXNoID0gaGFzaCBeIChoYXNoID4+IDExKTsKICAgIHJldHVybiAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDAwMDNmZmYgJiBoYXNoKSA8PCAxNSkpOwogIH0KCiAgc3RhdGljIGludCBoYXNoMihhLCBiKSA9PiBmaW5pc2goY29tYmluZShjb21iaW5lKDAsIGEpLCBiKSk7CgogIHN0YXRpYyBpbnQgaGFzaDQoYSwgYiwgYywgZCkgPT4KICAgICAgZmluaXNoKGNvbWJpbmUoY29tYmluZShjb21iaW5lKGNvbWJpbmUoMCwgYSksIGIpLCBjKSwgZCkpOwp9CikATk48EwFFGQQ8BAlMHAQWJD8KLBhNASwoPh8EASA9ID4EAT8BIkECAR9kYXJ0Om1hdGgvamVua2luc19zbWlfaGFzaC5kYXJ0K29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9tYXRoL3BvaW50LmRhcnSJ8i8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCnBhcnQgb2YgZGFydC5tYXRoOwoKLy8vIEEgdXRpbGl0eSBjbGFzcyBmb3IgcmVwcmVzZW50aW5nIHR3by1kaW1lbnNpb25hbCBwb3NpdGlvbnMuCmNsYXNzIFBvaW50PFQgZXh0ZW5kcyBudW0+IHsKICBmaW5hbCBUIHg7CiAgZmluYWwgVCB5OwoKICBjb25zdCBQb2ludChUIHgsIFQgeSkKICAgICAgOiB0aGlzLnggPSB4LAogICAgICAgIHRoaXMueSA9IHk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICdQb2ludCgkeCwgJHkpJzsKCiAgLy8vIEEgYFBvaW50YCBpcyBvbmx5IGVxdWFsIHRvIGFub3RoZXIgYFBvaW50YCB3aXRoIHRoZSBzYW1lIGNvb3JkaW5hdGVzLgogIC8vLwogIC8vLyBUaGlzIHBvaW50IGlzIGVxdWFsIHRvIGBvdGhlcmAgaWYsIGFuZCBvbmx5IGlmLAogIC8vLyBgb3RoZXJgIGlzIGEgYFBvaW50YCB3aXRoCiAgLy8vIFt4XSBlcXVhbCB0byBgb3RoZXIueGAgYW5kIFt5XSBlcXVhbCB0byBgb3RoZXIueWAuCiAgYm9vbCBvcGVyYXRvciA9PShkeW5hbWljIG90aGVyKSA9PgogICAgICAvLyBDYW5ub3QgY2hhbmdlIHBhcmFtZXRlciB0eXBlIHRvIGBPYmplY3RgIGluIGNhc2Ugc29tZSBjbGFzcwogICAgICAvLyBpbmhlcml0cyB0aGUgdHlwZSBhbmQgdXNlcyB0aGVpciBhcmd1bWVudCBkeW5hbWljYWxseS4KICAgICAgb3RoZXIgaXMgUG9pbnQgJiYgeCA9PSBvdGhlci54ICYmIHkgPT0gb3RoZXIueTsKCiAgaW50IGdldCBoYXNoQ29kZSA9PiBfSmVua2luc1NtaUhhc2guaGFzaDIoeC5oYXNoQ29kZSwgeS5oYXNoQ29kZSk7CgogIC8vLyBBZGQgW290aGVyXSB0byBgdGhpc2AsIGFzIGlmIGJvdGggcG9pbnRzIHdlcmUgdmVjdG9ycy4KICAvLy8KICAvLy8gUmV0dXJucyB0aGUgcmVzdWx0aW5nICJ2ZWN0b3IiIGFzIGEgUG9pbnQuCiAgUG9pbnQ8VD4gb3BlcmF0b3IgKyhQb2ludDxUPiBvdGhlcikgewogICAgcmV0dXJuIFBvaW50PFQ+KHggKyBvdGhlci54LCB5ICsgb3RoZXIueSk7CiAgfQoKICAvLy8gU3VidHJhY3QgW290aGVyXSBmcm9tIGB0aGlzYCwgYXMgaWYgYm90aCBwb2ludHMgd2VyZSB2ZWN0b3JzLgogIC8vLwogIC8vLyBSZXR1cm5zIHRoZSByZXN1bHRpbmcgInZlY3RvciIgYXMgYSBQb2ludC4KICBQb2ludDxUPiBvcGVyYXRvciAtKFBvaW50PFQ+IG90aGVyKSB7CiAgICByZXR1cm4gUG9pbnQ8VD4oeCAtIG90aGVyLngsIHkgLSBvdGhlci55KTsKICB9CgogIC8vLyBTY2FsZSB0aGlzIHBvaW50IGJ5IFtmYWN0b3JdIGFzIGlmIGl0IHdlcmUgYSB2ZWN0b3IuCiAgLy8vCiAgLy8vICpJbXBvcnRhbnQqICpOb3RlKjogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIGEgYG51bWAgYXMgaXRzIGFyZ3VtZW50IG9ubHkgc28KICAvLy8gdGhhdCB5b3UgY2FuIHNjYWxlIFBvaW50PGRvdWJsZT4gb2JqZWN0cyBieSBhbiBgaW50YCBmYWN0b3IuIEJlY2F1c2UgdGhlCiAgLy8vIHN0YXIgb3BlcmF0b3IgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgdHlwZSBvZiBQb2ludCB0aGF0IG9yaWdpbmFsbHkgY2FsbGVkCiAgLy8vIGl0LCBwYXNzaW5nIGluIGEgZG91YmxlIFtmYWN0b3JdIG9uIGEgYFBvaW50PGludD5gIF9jYXVzZXNfIF9hXwogIC8vLyBfcnVudGltZV8gX2Vycm9yXyBpbiBjaGVja2VkIG1vZGUuCiAgUG9pbnQ8VD4gb3BlcmF0b3IgKihudW0gLypUfGludCovIGZhY3RvcikgewogICAgcmV0dXJuIFBvaW50PFQ+KCh4ICogZmFjdG9yKSwgKHkgKiBmYWN0b3IpKTsKICB9CgogIC8vLyBHZXQgdGhlIHN0cmFpZ2h0IGxpbmUgKEV1Y2xpZGVhbikgZGlzdGFuY2UgYmV0d2VlbiB0aGUgb3JpZ2luICgwLCAwKSBhbmQKICAvLy8gdGhpcyBwb2ludC4KICBkb3VibGUgZ2V0IG1hZ25pdHVkZSA9PiBzcXJ0KHggKiB4ICsgeSAqIHkpOwoKICAvLy8gUmV0dXJucyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBgdGhpc2AgYW5kIFtvdGhlcl0uCiAgZG91YmxlIGRpc3RhbmNlVG8oUG9pbnQ8VD4gb3RoZXIpIHsKICAgIHZhciBkeCA9IHggLSBvdGhlci54OwogICAgdmFyIGR5ID0geSAtIG90aGVyLnk7CiAgICByZXR1cm4gc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgc3F1YXJlZCBkaXN0YW5jZSBiZXR3ZWVuIGB0aGlzYCBhbmQgW290aGVyXS4KICAvLy8KICAvLy8gU3F1YXJlZCBkaXN0YW5jZXMgY2FuIGJlIHVzZWQgZm9yIGNvbXBhcmlzb25zIHdoZW4gdGhlIGFjdHVhbCB2YWx1ZSBpcyBub3QKICAvLy8gcmVxdWlyZWQuCiAgVCBzcXVhcmVkRGlzdGFuY2VUbyhQb2ludDxUPiBvdGhlcikgewogICAgdmFyIGR4ID0geCAtIG90aGVyLng7CiAgICB2YXIgZHkgPSB5IC0gb3RoZXIueTsKICAgIHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTsKICB9Cn0KTABOTjwTAUAdDQ0BGBQUASgBTAY2IDklRUA2AUUBPQYxKC8EAUQGMSgvBAE7BlBPUUYpLjEEAU8SLwE3JhoaJAQBPwZRECgaGh4EAgEUZGFydDptYXRoL3BvaW50LmRhcnQsb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL21hdGgvcmFuZG9tLmRhcnSF/C8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQubWF0aDsKCi8vLyBBIGdlbmVyYXRvciBvZiByYW5kb20gYm9vbCwgaW50LCBvciBkb3VibGUgdmFsdWVzLgovLy8KLy8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHN1cHBsaWVzIGEgc3RyZWFtIG9mIHBzZXVkby1yYW5kb20gYml0cyB0aGF0IGFyZQovLy8gbm90IHN1aXRhYmxlIGZvciBjcnlwdG9ncmFwaGljIHB1cnBvc2VzLgovLy8KLy8vIFVzZSB0aGUgW1JhbmRvbS5zZWN1cmVdKCkgY29uc3RydWN0b3IgZm9yIGNyeXB0b2dyYXBoaWMgcHVycG9zZXMuCmFic3RyYWN0IGNsYXNzIFJhbmRvbSB7CiAgLy8vIENyZWF0ZXMgYSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KICAvLy8KICAvLy8gVGhlIG9wdGlvbmFsIHBhcmFtZXRlciBbc2VlZF0gaXMgdXNlZCB0byBpbml0aWFsaXplIHRoZQogIC8vLyBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgZ2VuZXJhdG9yLiBUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlCiAgLy8vIHJhbmRvbSBzdHJlYW0gY2FuIGNoYW5nZSBiZXR3ZWVuIHJlbGVhc2VzIG9mIHRoZSBsaWJyYXJ5LgogIGV4dGVybmFsIGZhY3RvcnkgUmFuZG9tKFtpbnQgc2VlZF0pOwoKICAvLy8gQ3JlYXRlcyBhIGNyeXB0b2dyYXBoaWNhbGx5IHNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvci4KICAvLy8KICAvLy8gSWYgdGhlIHByb2dyYW0gY2Fubm90IHByb3ZpZGUgYSBjcnlwdG9ncmFwaGljYWxseSBzZWN1cmUKICAvLy8gc291cmNlIG9mIHJhbmRvbSBudW1iZXJzLCBpdCB0aHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgogIGV4dGVybmFsIGZhY3RvcnkgUmFuZG9tLnNlY3VyZSgpOwoKICAvLy8gR2VuZXJhdGVzIGEgbm9uLW5lZ2F0aXZlIHJhbmRvbSBpbnRlZ2VyIHVuaWZvcm1seSBkaXN0cmlidXRlZCBpbiB0aGUgcmFuZ2UKICAvLy8gZnJvbSAwLCBpbmNsdXNpdmUsIHRvIFttYXhdLCBleGNsdXNpdmUuCiAgLy8vCiAgLy8vIEltcGxlbWVudGF0aW9uIG5vdGU6IFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIFttYXhdIHZhbHVlcwogIC8vLyBiZXR3ZWVuIDEgYW5kICgxPDwzMikgaW5jbHVzaXZlLgogIGludCBuZXh0SW50KGludCBtYXgpOwoKICAvLy8gR2VuZXJhdGVzIGEgbm9uLW5lZ2F0aXZlIHJhbmRvbSBmbG9hdGluZyBwb2ludCB2YWx1ZSB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQKICAvLy8gaW4gdGhlIHJhbmdlIGZyb20gMC4wLCBpbmNsdXNpdmUsIHRvIDEuMCwgZXhjbHVzaXZlLgogIGRvdWJsZSBuZXh0RG91YmxlKCk7CgogIC8vLyBHZW5lcmF0ZXMgYSByYW5kb20gYm9vbGVhbiB2YWx1ZS4KICBib29sIG5leHRCb29sKCk7Cn0KKgBOTjwBEwE3BFAtBEYYKQY+QUAnAUIGP0EkAVEuBkwnGAFROxcBKBMCARVkYXJ0Om1hdGgvcmFuZG9tLmRhcnQvb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL21hdGgvcmVjdGFuZ2xlLmRhcnShXC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCnBhcnQgb2YgZGFydC5tYXRoOwoKLy8vIEEgYmFzZSBjbGFzcyBmb3IgcmVwcmVzZW50aW5nIHR3by1kaW1lbnNpb25hbCBheGlzLWFsaWduZWQgcmVjdGFuZ2xlcy4KLy8vCi8vLyBUaGlzIHJlY3RhbmdsZSB1c2VzIGEgbGVmdC1oYW5kZWQgQ2FydGVzaWFuIGNvb3JkaW5hdGUgc3lzdGVtLCB3aXRoIHgKLy8vIGRpcmVjdGVkIHRvIHRoZSByaWdodCBhbmQgeSBkaXJlY3RlZCBkb3duLCBhcyBwZXIgdGhlIGNvbnZlbnRpb24gaW4gMkQKLy8vIGNvbXB1dGVyIGdyYXBoaWNzLgovLy8KLy8vIFNlZSBhbHNvOgovLy8gICAgW1czQyBDb29yZGluYXRlIFN5c3RlbXMgU3BlY2lmaWNhdGlvbl0oaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHL2Nvb3Jkcy5odG1sI0luaXRpYWxDb29yZGluYXRlU3lzdGVtKS4KLy8vCi8vLyBUaGUgcmVjdGFuZ2xlIGlzIHRoZSBzZXQgb2YgcG9pbnRzIHdpdGggcmVwcmVzZW50YWJsZSBjb29yZGluYXRlcyBncmVhdGVyCi8vLyB0aGFuIG9yIGVxdWFsIHRvIGxlZnQvdG9wLCBhbmQgd2l0aCBkaXN0YW5jZSB0byBsZWZ0L3RvcCBubyBncmVhdGVyIHRoYW4KLy8vIHdpZHRoL2hlaWdodCAodG8gdGhlIGxpbWl0IG9mIHRoZSBwcmVjaXNpb24gb2YgdGhlIGNvb3JkaW5hdGVzKS4KYWJzdHJhY3QgY2xhc3MgX1JlY3RhbmdsZUJhc2U8VCBleHRlbmRzIG51bT4gewogIGNvbnN0IF9SZWN0YW5nbGVCYXNlKCk7CgogIC8vLyBUaGUgeC1jb29yZGluYXRlIG9mIHRoZSBsZWZ0IGVkZ2UuCiAgVCBnZXQgbGVmdDsKCiAgLy8vIFRoZSB5LWNvb3JkaW5hdGUgb2YgdGhlIHRvcCBlZGdlLgogIFQgZ2V0IHRvcDsKCiAgLy8vIFRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlLgogIFQgZ2V0IHdpZHRoOwoKICAvLy8gVGhlIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlLgogIFQgZ2V0IGhlaWdodDsKCiAgLy8vIFRoZSB4LWNvb3JkaW5hdGUgb2YgdGhlIHJpZ2h0IGVkZ2UuCiAgVCBnZXQgcmlnaHQgPT4gbGVmdCArIHdpZHRoOwoKICAvLy8gVGhlIHktY29vcmRpbmF0ZSBvZiB0aGUgYm90dG9tIGVkZ2UuCiAgVCBnZXQgYm90dG9tID0+IHRvcCArIGhlaWdodDsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgcmV0dXJuICdSZWN0YW5nbGUgKCRsZWZ0LCAkdG9wKSAkd2lkdGggeCAkaGVpZ2h0JzsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0oZHluYW1pYyBvdGhlcikgPT4KICAgICAgLy8gQ2FuJ3QgY2hhbmdlIGFyZ3VtZW50IHR5cGUgdG8gYE9iamVjdGAgc2luY2Ugc3ViY2xhc3NlcyBpbmhlcml0IGl0CiAgICAgIC8vIGFuZCB1c2VzIHRoZWlyIGFyZ3VtZW50IGR5bmFtaWNhbGx5LgogICAgICBvdGhlciBpcyBSZWN0YW5nbGUgJiYKICAgICAgbGVmdCA9PSBvdGhlci5sZWZ0ICYmCiAgICAgIHRvcCA9PSBvdGhlci50b3AgJiYKICAgICAgcmlnaHQgPT0gb3RoZXIucmlnaHQgJiYKICAgICAgYm90dG9tID09IG90aGVyLmJvdHRvbTsKCiAgaW50IGdldCBoYXNoQ29kZSA9PiBfSmVua2luc1NtaUhhc2guaGFzaDQoCiAgICAgIGxlZnQuaGFzaENvZGUsIHRvcC5oYXNoQ29kZSwgcmlnaHQuaGFzaENvZGUsIGJvdHRvbS5oYXNoQ29kZSk7CgogIC8vLyBDb21wdXRlcyB0aGUgaW50ZXJzZWN0aW9uIG9mIGB0aGlzYCBhbmQgW290aGVyXS4KICAvLy8KICAvLy8gVGhlIGludGVyc2VjdGlvbiBvZiB0d28gYXhpcy1hbGlnbmVkIHJlY3RhbmdsZXMsIGlmIGFueSwgaXMgYWx3YXlzIGFub3RoZXIKICAvLy8gYXhpcy1hbGlnbmVkIHJlY3RhbmdsZS4KICAvLy8KICAvLy8gUmV0dXJucyB0aGUgaW50ZXJzZWN0aW9uIG9mIHRoaXMgYW5kIGBvdGhlcmAsIG9yIGBudWxsYCBpZiB0aGV5IGRvbid0CiAgLy8vIGludGVyc2VjdC4KICBSZWN0YW5nbGU8VD4gaW50ZXJzZWN0aW9uKFJlY3RhbmdsZTxUPiBvdGhlcikgewogICAgdmFyIHgwID0gbWF4KGxlZnQsIG90aGVyLmxlZnQpOwogICAgdmFyIHgxID0gbWluKGxlZnQgKyB3aWR0aCwgb3RoZXIubGVmdCArIG90aGVyLndpZHRoKTsKCiAgICBpZiAoeDAgPD0geDEpIHsKICAgICAgdmFyIHkwID0gbWF4KHRvcCwgb3RoZXIudG9wKTsKICAgICAgdmFyIHkxID0gbWluKHRvcCArIGhlaWdodCwgb3RoZXIudG9wICsgb3RoZXIuaGVpZ2h0KTsKCiAgICAgIGlmICh5MCA8PSB5MSkgewogICAgICAgIHJldHVybiBSZWN0YW5nbGU8VD4oeDAsIHkwLCB4MSAtIHgwLCB5MSAtIHkwKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICAvLy8gUmV0dXJucyB0cnVlIGlmIGB0aGlzYCBpbnRlcnNlY3RzIFtvdGhlcl0uCiAgYm9vbCBpbnRlcnNlY3RzKFJlY3RhbmdsZTxudW0+IG90aGVyKSB7CiAgICByZXR1cm4gKGxlZnQgPD0gb3RoZXIubGVmdCArIG90aGVyLndpZHRoICYmCiAgICAgICAgb3RoZXIubGVmdCA8PSBsZWZ0ICsgd2lkdGggJiYKICAgICAgICB0b3AgPD0gb3RoZXIudG9wICsgb3RoZXIuaGVpZ2h0ICYmCiAgICAgICAgb3RoZXIudG9wIDw9IHRvcCArIGhlaWdodCk7CiAgfQoKICAvLy8gUmV0dXJucyBhIG5ldyByZWN0YW5nbGUgd2hpY2ggY29tcGxldGVseSBjb250YWlucyBgdGhpc2AgYW5kIFtvdGhlcl0uCiAgUmVjdGFuZ2xlPFQ+IGJvdW5kaW5nQm94KFJlY3RhbmdsZTxUPiBvdGhlcikgewogICAgdmFyIHJpZ2h0ID0gbWF4KHRoaXMubGVmdCArIHRoaXMud2lkdGgsIG90aGVyLmxlZnQgKyBvdGhlci53aWR0aCk7CiAgICB2YXIgYm90dG9tID0gbWF4KHRoaXMudG9wICsgdGhpcy5oZWlnaHQsIG90aGVyLnRvcCArIG90aGVyLmhlaWdodCk7CgogICAgdmFyIGxlZnQgPSBtaW4odGhpcy5sZWZ0LCBvdGhlci5sZWZ0KTsKICAgIHZhciB0b3AgPSBtaW4odGhpcy50b3AsIG90aGVyLnRvcCk7CgogICAgcmV0dXJuIFJlY3RhbmdsZTxUPihsZWZ0LCB0b3AsIHJpZ2h0IC0gbGVmdCwgYm90dG9tIC0gdG9wKTsKICB9CgogIC8vLyBUZXN0cyB3aGV0aGVyIGB0aGlzYCBlbnRpcmVseSBjb250YWlucyBbYW5vdGhlcl0uCiAgYm9vbCBjb250YWluc1JlY3RhbmdsZShSZWN0YW5nbGU8bnVtPiBhbm90aGVyKSB7CiAgICByZXR1cm4gbGVmdCA8PSBhbm90aGVyLmxlZnQgJiYKICAgICAgICBsZWZ0ICsgd2lkdGggPj0gYW5vdGhlci5sZWZ0ICsgYW5vdGhlci53aWR0aCAmJgogICAgICAgIHRvcCA8PSBhbm90aGVyLnRvcCAmJgogICAgICAgIHRvcCArIGhlaWdodCA+PSBhbm90aGVyLnRvcCArIGFub3RoZXIuaGVpZ2h0OwogIH0KCiAgLy8vIFRlc3RzIHdoZXRoZXIgW2Fub3RoZXJdIGlzIGluc2lkZSBvciBhbG9uZyB0aGUgZWRnZXMgb2YgYHRoaXNgLgogIGJvb2wgY29udGFpbnNQb2ludChQb2ludDxudW0+IGFub3RoZXIpIHsKICAgIHJldHVybiBhbm90aGVyLnggPj0gbGVmdCAmJgogICAgICAgIGFub3RoZXIueCA8PSBsZWZ0ICsgd2lkdGggJiYKICAgICAgICBhbm90aGVyLnkgPj0gdG9wICYmCiAgICAgICAgYW5vdGhlci55IDw9IHRvcCArIGhlaWdodDsKICB9CgogIFBvaW50PFQ+IGdldCB0b3BMZWZ0ID0+IFBvaW50PFQ+KHRoaXMubGVmdCwgdGhpcy50b3ApOwogIFBvaW50PFQ+IGdldCB0b3BSaWdodCA9PiBQb2ludDxUPih0aGlzLmxlZnQgKyB0aGlzLndpZHRoLCB0aGlzLnRvcCk7CiAgUG9pbnQ8VD4gZ2V0IGJvdHRvbVJpZ2h0ID0+CiAgICAgIFBvaW50PFQ+KHRoaXMubGVmdCArIHRoaXMud2lkdGgsIHRoaXMudG9wICsgdGhpcy5oZWlnaHQpOwogIFBvaW50PFQ+IGdldCBib3R0b21MZWZ0ID0+IFBvaW50PFQ+KHRoaXMubGVmdCwgdGhpcy50b3AgKyB0aGlzLmhlaWdodCk7Cn0KCi8vLyBBIGNsYXNzIGZvciByZXByZXNlbnRpbmcgdHdvLWRpbWVuc2lvbmFsIHJlY3RhbmdsZXMgd2hvc2UgcHJvcGVydGllcyBhcmUKLy8vIGltbXV0YWJsZS4KY2xhc3MgUmVjdGFuZ2xlPFQgZXh0ZW5kcyBudW0+IGV4dGVuZHMgX1JlY3RhbmdsZUJhc2U8VD4gewogIGZpbmFsIFQgbGVmdDsKICBmaW5hbCBUIHRvcDsKICBmaW5hbCBUIHdpZHRoOwogIGZpbmFsIFQgaGVpZ2h0OwoKICAvLy8gQ3JlYXRlIGEgcmVjdGFuZ2xlIHNwYW5uZWQgYnkgYChsZWZ0LCB0b3ApYCBhbmQKICAvLy8gYChsZWZ0K3dpZHRoLCB0b3AraGVpZ2h0KWAuCiAgLy8vCiAgLy8vIFRoZSByZWN0YW5nbGUgY29udGFpbnMgdGhlIHBvaW50cwogIC8vLyB3aXRoIHgtY29vcmRpbmF0ZSBiZXR3ZWVuIGBsZWZ0YCBhbmQgYGxlZnQgKyB3aWR0aGAsIGFuZAogIC8vLyB3aXRoIHktY29vcmRpbmF0ZSBiZXR3ZWVuIGB0b3BgIGFuZCBgdG9wICsgaGVpZ2h0YCwgYm90aCBpbmNsdXNpdmUuCiAgLy8vCiAgLy8vIFRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBzaG91bGQgYmUgbm9uLW5lZ2F0aXZlLgogIC8vLyBJZiBgd2lkdGhgIG9yIGBoZWlnaHRgIGFyZSBuZWdhdGl2ZSwgdGhleSBhcmUgY2xhbXBlZCB0byB6ZXJvLgogIC8vLwogIC8vLyBJZiBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBhcmUgemVybywgdGhlICJyZWN0YW5nbGUiIGNvbXByaXNlcyBvbmx5IHRoZQogIC8vLyBzaW5nbGUgcG9pbnQgYChsZWZ0LCB0b3ApYC4KICBjb25zdCBSZWN0YW5nbGUodGhpcy5sZWZ0LCB0aGlzLnRvcCwgVCB3aWR0aCwgVCBoZWlnaHQpCiAgICAgIDogdGhpcy53aWR0aCA9ICh3aWR0aCA8IDApID8gLXdpZHRoICogMCA6IHdpZHRoLCAvLyBJbmxpbmUgX2NsYW1wVG9aZXJvLgogICAgICAgIHRoaXMuaGVpZ2h0ID0gKGhlaWdodCA8IDApID8gLWhlaWdodCAqIDAgOiBoZWlnaHQ7CgogIC8vLyBDcmVhdGUgYSByZWN0YW5nbGUgc3Bhbm5lZCBieSB0aGUgcG9pbnRzIFthXSBhbmQgW2JdOwogIC8vLwogIC8vLyBUaGUgcmVjdGFuZ2xlIGNvbnRhaW5zIHRoZSBwb2ludHMKICAvLy8gd2l0aCB4LWNvb3JkaW5hdGUgYmV0d2VlbiBgYS54YCBhbmQgYGIueGAsIGFuZAogIC8vLyB3aXRoIHktY29vcmRpbmF0ZSBiZXR3ZWVuIGBhLnlgIGFuZCBgYi55YCwgYm90aCBpbmNsdXNpdmUuCiAgLy8vCiAgLy8vIElmIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGBhLnhgIGFuZCBgYi54YCBpcyBub3QgcmVwcmVzZW50YWJsZQogIC8vLyAod2hpY2ggY2FuIGhhcHBlbiBpZiBvbmUgb3IgYm90aCBpcyBhIGRvdWJsZSksCiAgLy8vIHRoZSBhY3R1YWwgcmlnaHQgZWRnZSBtaWdodCBiZSBzbGlnaHRseSBvZmYgZnJvbSBgbWF4KGEueCwgYi54KWAuCiAgLy8vIFNpbWlsYXIgZm9yIHRoZSB5LWNvb3JkaW5hdGVzIGFuZCB0aGUgYm90dG9tIGVkZ2UuCiAgZmFjdG9yeSBSZWN0YW5nbGUuZnJvbVBvaW50cyhQb2ludDxUPiBhLCBQb2ludDxUPiBiKSB7CiAgICBUIGxlZnQgPSBtaW4oYS54LCBiLngpOwogICAgVCB3aWR0aCA9IG1heChhLngsIGIueCkgLSBsZWZ0OwogICAgVCB0b3AgPSBtaW4oYS55LCBiLnkpOwogICAgVCBoZWlnaHQgPSBtYXgoYS55LCBiLnkpIC0gdG9wOwogICAgcmV0dXJuIFJlY3RhbmdsZTxUPihsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQpOwogIH0KfQoKLy8vIEEgY2xhc3MgZm9yIHJlcHJlc2VudGluZyB0d28tZGltZW5zaW9uYWwgYXhpcy1hbGlnbmVkIHJlY3RhbmdsZXMgd2l0aAovLy8gbXV0YWJsZSBwcm9wZXJ0aWVzLgpjbGFzcyBNdXRhYmxlUmVjdGFuZ2xlPFQgZXh0ZW5kcyBudW0+IGV4dGVuZHMgX1JlY3RhbmdsZUJhc2U8VD4KICAgIGltcGxlbWVudHMgUmVjdGFuZ2xlPFQ+IHsKICAvLy8gVGhlIHgtY29vcmRpbmF0ZSBvZiB0aGUgbGVmdCBlZGdlLgogIC8vLwogIC8vLyBTZXR0aW5nIHRoZSB2YWx1ZSB3aWxsIG1vdmUgdGhlIHJlY3RhbmdsZSB3aXRob3V0IGNoYW5naW5nIGl0cyB3aWR0aC4KICBUIGxlZnQ7CgogIC8vLyBUaGUgeS1jb29yZGluYXRlIG9mIHRoZSBsZWZ0IGVkZ2UuCiAgLy8vCiAgLy8vIFNldHRpbmcgdGhlIHZhbHVlIHdpbGwgbW92ZSB0aGUgcmVjdGFuZ2xlIHdpdGhvdXQgY2hhbmdpbmcgaXRzIGhlaWdodC4KICBUIHRvcDsKICBUIF93aWR0aDsKICBUIF9oZWlnaHQ7CgogIC8vLyBDcmVhdGUgYSBtdXRhYmxlIHJlY3RhbmdsZSBzcGFubmVkIGJ5IGAobGVmdCwgdG9wKWAgYW5kCiAgLy8vIGAobGVmdCt3aWR0aCwgdG9wK2hlaWdodClgLgogIC8vLwogIC8vLyBUaGUgcmVjdGFuZ2xlIGNvbnRhaW5zIHRoZSBwb2ludHMKICAvLy8gd2l0aCB4LWNvb3JkaW5hdGUgYmV0d2VlbiBgbGVmdGAgYW5kIGBsZWZ0ICsgd2lkdGhgLCBhbmQKICAvLy8gd2l0aCB5LWNvb3JkaW5hdGUgYmV0d2VlbiBgdG9wYCBhbmQgYHRvcCArIGhlaWdodGAsIGJvdGggaW5jbHVzaXZlLgogIC8vLwogIC8vLyBUaGUgYHdpZHRoYCBhbmQgYGhlaWdodGAgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZS4KICAvLy8gSWYgYHdpZHRoYCBvciBgaGVpZ2h0YCBhcmUgbmVnYXRpdmUsIHRoZXkgYXJlIGNsYW1wZWQgdG8gemVyby4KICAvLy8KICAvLy8gSWYgYHdpZHRoYCBhbmQgYGhlaWdodGAgYXJlIHplcm8sIHRoZSAicmVjdGFuZ2xlIiBjb21wcmlzZXMgb25seSB0aGUKICAvLy8gc2luZ2xlIHBvaW50IGAobGVmdCwgdG9wKWAuCiAgTXV0YWJsZVJlY3RhbmdsZSh0aGlzLmxlZnQsIHRoaXMudG9wLCBUIHdpZHRoLCBUIGhlaWdodCkKICAgICAgOiB0aGlzLl93aWR0aCA9ICh3aWR0aCA8IDApID8gX2NsYW1wVG9aZXJvPFQ+KHdpZHRoKSA6IHdpZHRoLAogICAgICAgIHRoaXMuX2hlaWdodCA9IChoZWlnaHQgPCAwKSA/IF9jbGFtcFRvWmVybzxUPihoZWlnaHQpIDogaGVpZ2h0OwoKICAvLy8gQ3JlYXRlIGEgbXV0YWJsZSByZWN0YW5nbGUgc3Bhbm5lZCBieSB0aGUgcG9pbnRzIFthXSBhbmQgW2JdOwogIC8vLwogIC8vLyBUaGUgcmVjdGFuZ2xlIGNvbnRhaW5zIHRoZSBwb2ludHMKICAvLy8gd2l0aCB4LWNvb3JkaW5hdGUgYmV0d2VlbiBgYS54YCBhbmQgYGIueGAsIGFuZAogIC8vLyB3aXRoIHktY29vcmRpbmF0ZSBiZXR3ZWVuIGBhLnlgIGFuZCBgYi55YCwgYm90aCBpbmNsdXNpdmUuCiAgLy8vCiAgLy8vIElmIHRoZSBkaXN0YW5jZSBiZXR3ZWVuIGBhLnhgIGFuZCBgYi54YCBpcyBub3QgcmVwcmVzZW50YWJsZQogIC8vLyAod2hpY2ggY2FuIGhhcHBlbiBpZiBvbmUgb3IgYm90aCBpcyBhIGRvdWJsZSksCiAgLy8vIHRoZSBhY3R1YWwgcmlnaHQgZWRnZSBtaWdodCBiZSBzbGlnaHRseSBvZmYgZnJvbSBgbWF4KGEueCwgYi54KWAuCiAgLy8vIFNpbWlsYXIgZm9yIHRoZSB5LWNvb3JkaW5hdGVzIGFuZCB0aGUgYm90dG9tIGVkZ2UuCiAgZmFjdG9yeSBNdXRhYmxlUmVjdGFuZ2xlLmZyb21Qb2ludHMoUG9pbnQ8VD4gYSwgUG9pbnQ8VD4gYikgewogICAgVCBsZWZ0ID0gbWluKGEueCwgYi54KTsKICAgIFQgd2lkdGggPSBtYXgoYS54LCBiLngpIC0gbGVmdDsKICAgIFQgdG9wID0gbWluKGEueSwgYi55KTsKICAgIFQgaGVpZ2h0ID0gbWF4KGEueSwgYi55KSAtIHRvcDsKICAgIHJldHVybiBNdXRhYmxlUmVjdGFuZ2xlPFQ+KGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCk7CiAgfQoKICBUIGdldCB3aWR0aCA9PiBfd2lkdGg7CgogIC8vLyBTZXRzIHRoZSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlLgogIC8vLwogIC8vLyBUaGUgd2lkdGggbXVzdCBiZSBub24tbmVnYXRpdmUuCiAgLy8vIElmIGEgbmVnYXRpdmUgd2lkdGggaXMgc3VwcGxpZWQsIGl0IGlzIGNsYW1wZWQgdG8gemVyby4KICAvLy8KICAvLy8gU2V0dGluZyB0aGUgdmFsdWUgd2lsbCBjaGFuZ2UgdGhlIHJpZ2h0IGVkZ2Ugb2YgdGhlIHJlY3RhbmdsZSwKICAvLy8gYnV0IHdpbGwgbm90IGNoYW5nZSBbbGVmdF0uCiAgc2V0IHdpZHRoKFQgd2lkdGgpIHsKICAgIGlmICh3aWR0aCA8IDApIHdpZHRoID0gX2NsYW1wVG9aZXJvPFQ+KHdpZHRoKTsKICAgIF93aWR0aCA9IHdpZHRoOwogIH0KCiAgVCBnZXQgaGVpZ2h0ID0+IF9oZWlnaHQ7CgogIC8vLyBTZXRzIHRoZSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS4KICAvLy8KICAvLy8gVGhlIGhlaWdodCBtdXN0IGJlIG5vbi1uZWdhdGl2ZS4KICAvLy8gSWYgYSBuZWdhdGl2ZSBoZWlnaHQgaXMgc3VwcGxpZWQsIGl0IGlzIGNsYW1wZWQgdG8gemVyby4KICAvLy8KICAvLy8gU2V0dGluZyB0aGUgdmFsdWUgd2lsbCBjaGFuZ2UgdGhlIGJvdHRvbSBlZGdlIG9mIHRoZSByZWN0YW5nbGUsCiAgLy8vIGJ1dCB3aWxsIG5vdCBjaGFuZ2UgW3RvcF0uCiAgc2V0IGhlaWdodChUIGhlaWdodCkgewogICAgaWYgKGhlaWdodCA8IDApIGhlaWdodCA9IF9jbGFtcFRvWmVybzxUPihoZWlnaHQpOwogICAgX2hlaWdodCA9IGhlaWdodDsKICB9Cn0KCi8vLyBDb252ZXJ0cyBhIG5lZ2F0aXZlIFtpbnRdIG9yIFtkb3VibGVdIHRvIGEgemVyby12YWx1ZSBvZiB0aGUgc2FtZSB0eXBlLgovLy8KLy8vIFJldHVybnMgYDBgIGlmIHZhbHVlIGlzIGludCwgYDAuMGAgaWYgdmFsdWUgaXMgZG91YmxlLgpUIF9jbGFtcFRvWmVybzxUIGV4dGVuZHMgbnVtPihUIHZhbHVlKSB7CiAgYXNzZXJ0KHZhbHVlIDwgMCk7CiAgcmV0dXJuIC12YWx1ZSAqIDA7Cn0KgPkATk48EwFLBEpLFwQObQROTUUvGgEpDgEoDQEiDwEjEAEqHwErIAEWNwQBJUwuHBwaHh4BLUUBNwZRHgZMETIkOgEUJDwBFjcIBhEEATEqMCYrJAQBTDFHSAErKAFABAE4MyM4HjYEAUYrICUcIwQBOUceQEoCAU0POxAPERIBNiIGKD9KBjdFBksiOk87ATwGKDVBBkM1SDk5HCQbJDMEAgFKGEAeKQZMCgEpBk0JDA0BPiIGKD9KBjdFBksiO0RIAUQGKDVBBkM1SDlAHCQbJDoEARkBJwYmPgZFIhczFAQBGwEoBic/BkYhGTYWBAIBTAQ7KRUVAgEYZGFydDptYXRoL3JlY3RhbmdsZS5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9taXJyb3JzL21pcnJvcnMuZGFydMAAwpcvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGUgbWlycm9ycyBsaWJyYXJ5LCB3ZSBhZG9wdCBhIG5hbWluZwovLyBjb252ZW50aW9uIHdpdGggcmVzcGVjdCB0byBnZXR0ZXJzIGFuZCBzZXR0ZXJzLiAgU3BlY2lmaWNhbGx5LCBmb3IKLy8gc29tZSB2YXJpYWJsZSBvciBmaWVsZC4uLgovLwovLyAgIHZhciBteUZpZWxkOwovLwovLyAuLi50aGUgZ2V0dGVyIGlzIG5hbWVkICdteUZpZWxkJyBhbmQgdGhlIHNldHRlciBpcyBuYW1lZAovLyAnbXlGaWVsZD0nLiAgVGhpcyBhbGxvd3MgdXMgdG8gYXNzaWduIHVuaXF1ZSBuYW1lcyB0byBnZXR0ZXJzIGFuZAovLyBzZXR0ZXJzIGZvciB0aGUgcHVycG9zZXMgb2YgbWVtYmVyIGxvb2t1cC4KCi8qKgogKiBCYXNpYyByZWZsZWN0aW9uIGluIERhcnQsCiAqIHdpdGggc3VwcG9ydCBmb3IgaW50cm9zcGVjdGlvbiBhbmQgZHluYW1pYyBpbnZvY2F0aW9uLgogKgogKiAqSW50cm9zcGVjdGlvbiogaXMgdGhhdCBzdWJzZXQgb2YgcmVmbGVjdGlvbiBieSB3aGljaCBhIHJ1bm5pbmcKICogcHJvZ3JhbSBjYW4gZXhhbWluZSBpdHMgb3duIHN0cnVjdHVyZS4gRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24KICogdGhhdCBwcmludHMgb3V0IHRoZSBuYW1lcyBvZiBhbGwgdGhlIG1lbWJlcnMgb2YgYW4gYXJiaXRyYXJ5IG9iamVjdC4KICoKICogKkR5bmFtaWMgaW52b2NhdGlvbiogcmVmZXJzIHRoZSBhYmlsaXR5IHRvIGV2YWx1YXRlIGNvZGUgdGhhdAogKiBoYXMgbm90IGJlZW4gbGl0ZXJhbGx5IHNwZWNpZmllZCBhdCBjb21waWxlIHRpbWUsIHN1Y2ggYXMgY2FsbGluZyBhIG1ldGhvZAogKiB3aG9zZSBuYW1lIGlzIHByb3ZpZGVkIGFzIGFuIGFyZ3VtZW50IChiZWNhdXNlIGl0IGlzIGxvb2tlZCB1cAogKiBpbiBhIGRhdGFiYXNlLCBvciBwcm92aWRlZCBpbnRlcmFjdGl2ZWx5IGJ5IHRoZSB1c2VyKS4KICoKICogIyMgSG93IHRvIGludGVycHJldCB0aGlzIGxpYnJhcnkncyBkb2N1bWVudGF0aW9uCiAqCiAqIEFzIGEgcnVsZSwgdGhlIG5hbWVzIG9mIERhcnQgZGVjbGFyYXRpb25zIGFyZSByZXByZXNlbnRlZCB1c2luZwogKiBpbnN0YW5jZXMgb2YgY2xhc3MgW1N5bWJvbF0uIFdoZW5ldmVyIHRoZSBkb2Mgc3BlYWtzIG9mIGFuIG9iamVjdCAqcyoKICogb2YgY2xhc3MgW1N5bWJvbF0gZGVub3RpbmcgYSBuYW1lLCBpdCBtZWFucyB0aGUgc3RyaW5nIHRoYXQKICogd2FzIHVzZWQgdG8gY29uc3RydWN0ICpzKi4KICoKICogVGhlIGRvY3VtZW50YXRpb24gZnJlcXVlbnRseSBhYnVzZXMgbm90YXRpb24gd2l0aAogKiBEYXJ0IHBzZXVkby1jb2RlIHN1Y2ggYXMgWzpvLngoYSk6XSwgd2hlcmUKICogbyBhbmQgYSBhcmUgZGVmaW5lZCB0byBiZSBvYmplY3RzOyB3aGF0IGlzIGFjdHVhbGx5IG1lYW50IGluIHRoZXNlCiAqIGNhc2VzIGlzIFs6bycueChhJyk6XSB3aGVyZSAqbycqIGFuZCAqYScqIGFyZSBEYXJ0IHZhcmlhYmxlcwogKiBib3VuZCB0byAqbyogYW5kICphKiByZXNwZWN0aXZlbHkuIEZ1cnRoZXJtb3JlLCAqbycqIGFuZCAqYScqCiAqIGFyZSBhc3N1bWVkIHRvIGJlIGZyZXNoIHZhcmlhYmxlcyAobWVhbmluZyB0aGF0IHRoZXkgYXJlCiAqIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIHZhcmlhYmxlcyBpbiB0aGUgcHJvZ3JhbSkuCiAqCiAqIFNvbWV0aW1lcyB0aGUgZG9jdW1lbnRhdGlvbiByZWZlcnMgdG8gKnNlcmlhbGl6YWJsZSogb2JqZWN0cy4KICogQW4gb2JqZWN0IGlzIHNlcmlhbGl6YWJsZSBhY3Jvc3MgaXNvbGF0ZXMgaWYgYW5kIG9ubHkgaWYgaXQgaXMgYW4gaW5zdGFuY2Ugb2YKICogbnVtLCBib29sLCBTdHJpbmcsIGEgbGlzdCBvZiBvYmplY3RzIHRoYXQgYXJlIHNlcmlhbGl6YWJsZQogKiBhY3Jvc3MgaXNvbGF0ZXMsIG9yIGEgbWFwIHdpdGgga2V5cyBhbmQgdmFsdWVzIHRoYXQgYXJlIGFsbCBzZXJpYWxpemFibGUgYWNyb3NzCiAqIGlzb2xhdGVzLgogKgogKiAjIyBTdGF0dXM6IFVuc3RhYmxlCiAqCiAqIFRoZSBkYXJ0Om1pcnJvcnMgbGlicmFyeSBpcyB1bnN0YWJsZSBhbmQgaXRzIEFQSSBtaWdodCBjaGFuZ2Ugc2xpZ2h0bHkgYXMgYQogKiByZXN1bHQgb2YgdXNlciBmZWVkYmFjay4gVGhpcyBsaWJyYXJ5IGlzIHBsYXRmb3JtIGRlcGVuZGVudCBhbmQgdGhlcmVmb3JlIGl0CiAqIGhhcyBpbXBsZW1lbnRhdGlvbnMgZm9yIGJvdGggZGFydDJqcyBhbmQgdGhlIERhcnQgVk0uIEJvdGggYXJlIHVuZGVyCiAqIGRldmVsb3BtZW50IGFuZCBtYXkgbm90IHN1cHBvcnQgYWxsIG9wZXJhdGlvbnMgeWV0LgogKgogKiB7QGNhdGVnb3J5IFZNfQogKi8KbGlicmFyeSBkYXJ0Lm1pcnJvcnM7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnIHNob3cgRnV0dXJlOwoKLyoqCiAqIEEgW01pcnJvclN5c3RlbV0gaXMgdGhlIG1haW4gaW50ZXJmYWNlIHVzZWQgdG8gcmVmbGVjdCBvbiBhIHNldCBvZgogKiBhc3NvY2lhdGVkIGxpYnJhcmllcy4KICoKICogQXQgcnVudGltZSBlYWNoIHJ1bm5pbmcgaXNvbGF0ZSBoYXMgYSBkaXN0aW5jdCBbTWlycm9yU3lzdGVtXS4KICoKICogSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBoYXZlIGEgW01pcnJvclN5c3RlbV0gd2hpY2ggcmVwcmVzZW50cyBhIHNldAogKiBvZiBsaWJyYXJpZXMgd2hpY2ggYXJlIG5vdCBydW5uaW5nIC0tIHBlcmhhcHMgYXQgY29tcGlsZS10aW1lLiAgSW4KICogdGhpcyBjYXNlLCBhbGwgYXZhaWxhYmxlIHJlZmxlY3RpdmUgZnVuY3Rpb25hbGl0eSB3b3VsZCBiZQogKiBzdXBwb3J0ZWQsIGJ1dCBydW50aW1lIGZ1bmN0aW9uYWxpdHkgKHN1Y2ggYXMgaW52b2tpbmcgYSBmdW5jdGlvbgogKiBvciBpbnNwZWN0aW5nIHRoZSBjb250ZW50cyBvZiBhIHZhcmlhYmxlKSB3b3VsZCBmYWlsIGR5bmFtaWNhbGx5LgogKi8KYWJzdHJhY3QgY2xhc3MgTWlycm9yU3lzdGVtIHsKICAvKioKICAgKiBBbGwgbGlicmFyaWVzIGtub3duIHRvIHRoZSBtaXJyb3Igc3lzdGVtLCBpbmRleGVkIGJ5IHRoZWlyIFVSSS4KICAgKgogICAqIFJldHVybnMgYW4gdW5tb2RpZmlhYmxlIG1hcCBvZiB0aGUgbGlicmFyaWVzIHdpdGggW0xpYnJhcnlNaXJyb3IudXJpXSBhcwogICAqIGtleXMuCiAgICoKICAgKiBGb3IgYSBydW50aW1lIG1pcnJvciBzeXN0ZW0sIG9ubHkgbGlicmFyaWVzIHdoaWNoIGFyZSBjdXJyZW50bHkgbG9hZGVkCiAgICogYXJlIGluY2x1ZGVkLCBhbmQgcmVwZWF0ZWQgY2FsbHMgb2YgdGhpcyBtZXRob2QgbWF5IHJldHVybiBkaWZmZXJlbnQgbWFwcwogICAqIGFzIGxpYnJhcmllcyBhcmUgbG9hZGVkLgogICAqLwogIE1hcDxVcmksIExpYnJhcnlNaXJyb3I+IGdldCBsaWJyYXJpZXM7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHVuaXF1ZSBsaWJyYXJ5IG5hbWVkIFtsaWJyYXJ5TmFtZV0gaWYgaXQgZXhpc3RzLgogICAqCiAgICogSWYgbm8gdW5pcXVlIGxpYnJhcnkgZXhpc3RzLCBhbiBlcnJvciBpcyB0aHJvd24uCiAgICovCiAgZXh0ZXJuYWwgTGlicmFyeU1pcnJvciBmaW5kTGlicmFyeShTeW1ib2wgbGlicmFyeU5hbWUpOwoKICAvKioKICAgKiBBIG1pcnJvciBvbiB0aGUgaXNvbGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBbTWlycm9yU3lzdGVtXS4KICAgKgogICAqIFRoaXMgbWF5IGJlIG51bGwgaWYgdGhpcyBtaXJyb3Igc3lzdGVtIGlzIG5vdCBydW5uaW5nLgogICAqLwogIElzb2xhdGVNaXJyb3IgZ2V0IGlzb2xhdGU7CgogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSBbOmR5bmFtaWM6XSB0eXBlLgogICAqLwogIFR5cGVNaXJyb3IgZ2V0IGR5bmFtaWNUeXBlOwoKICAvKioKICAgKiBBIG1pcnJvciBvbiB0aGUgWzp2b2lkOl0gdHlwZS4KICAgKi8KICBUeXBlTWlycm9yIGdldCB2b2lkVHlwZTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbmFtZSBvZiBbc3ltYm9sXS4KICAgKgogICAqIFRoZSBmb2xsb3dpbmcgdGV4dCBpcyBub24tbm9ybWF0aXZlOgogICAqCiAgICogVXNpbmcgdGhpcyBtZXRob2QgbWF5IHJlc3VsdCBpbiBsYXJnZXIgb3V0cHV0LiAgSWYgcG9zc2libGUsIHVzZQogICAqIFtNaXJyb3JzVXNlZF0gdG8gc3BlY2lmeSB3aGljaCBzeW1ib2xzIG11c3QgYmUgcmV0YWluZWQgaW4gY2xlYXIgdGV4dC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIGdldE5hbWUoU3ltYm9sIHN5bWJvbCk7CgogIC8qKgogICAqIFJldHVybnMgYSBzeW1ib2wgZm9yIFtuYW1lXS4KICAgKgogICAqIElmIFtsaWJyYXJ5XSBpcyBub3QgYSBbTGlicmFyeU1pcnJvcl0gb3IgaWYgW25hbWVdIGlzIGEgcHJpdmF0ZSBpZGVudGlmaWVyCiAgICogYW5kIFtsaWJyYXJ5XSBpcyBgbnVsbGAsIHRocm93cyBhbiBbQXJndW1lbnRFcnJvcl0uIElmIFtuYW1lXSBpcyBhIHByaXZhdGUKICAgKiBpZGVudGlmaWVyLCB0aGUgc3ltYm9sIHJldHVybmVkIGlzIHdpdGggcmVzcGVjdCB0byBbbGlicmFyeV0uCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIHRleHQgaXMgbm9uLW5vcm1hdGl2ZToKICAgKgogICAqIFVzaW5nIHRoaXMgbWV0aG9kIG1heSByZXN1bHQgaW4gbGFyZ2VyIG91dHB1dC4gIElmIHBvc3NpYmxlLCB1c2UKICAgKiB0aGUgY29uc3QgY29uc3RydWN0b3Igb2YgW1N5bWJvbF0gb3Igc3ltYm9sIGxpdGVyYWxzLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBTeW1ib2wgZ2V0U3ltYm9sKFN0cmluZyBuYW1lLCBbTGlicmFyeU1pcnJvciBsaWJyYXJ5XSk7Cn0KCi8qKgogKiBSZXR1cm5zIGEgW01pcnJvclN5c3RlbV0gZm9yIHRoZSBjdXJyZW50IGlzb2xhdGUuCiAqLwpleHRlcm5hbCBNaXJyb3JTeXN0ZW0gY3VycmVudE1pcnJvclN5c3RlbSgpOwoKLyoqCiAqIFJlZmxlY3RzIGFuIGluc3RhbmNlLgogKgogKiBSZXR1cm5zIGFuIFtJbnN0YW5jZU1pcnJvcl0gcmVmbGVjdGluZyBbcmVmbGVjdGVlXS4gSWYgW3JlZmxlY3RlZV0gaXMgYQogKiBmdW5jdGlvbiBvciBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgaGFzIGEgWzpjYWxsOl0gbWV0aG9kLCB0aGUgcmV0dXJuZWQKICogaW5zdGFuY2UgbWlycm9yIHdpbGwgYmUgYSBbQ2xvc3VyZU1pcnJvcl0uCiAqCiAqIE5vdGUgdGhhdCBzaW5jZSBvbmUgY2Fubm90IG9idGFpbiBhbiBvYmplY3QgZnJvbSBhbm90aGVyIGlzb2xhdGUsIHRoaXMKICogZnVuY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCB0byBvYnRhaW4gIG1pcnJvcnMgb24gb2JqZWN0cyBvZiB0aGUgY3VycmVudAogKiBpc29sYXRlLgogKi8KZXh0ZXJuYWwgSW5zdGFuY2VNaXJyb3IgcmVmbGVjdChPYmplY3QgcmVmbGVjdGVlKTsKCi8qKgogKiBSZWZsZWN0cyBhIGNsYXNzIGRlY2xhcmF0aW9uLgogKgogKiBMZXQgKkMqIGJlIHRoZSBvcmlnaW5hbCBjbGFzcyBkZWNsYXJhdGlvbiBvZiB0aGUgY2xhc3MgcmVwcmVzZW50ZWQgYnkgW2tleV0uCiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIFtDbGFzc01pcnJvcl0gcmVmbGVjdGluZyAqQyouCiAqCiAqIElmIFtrZXldIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBbVHlwZV0sIHRoZW4gdGhpcyBmdW5jdGlvbiB0aHJvd3MgYW4KICogW0FyZ3VtZW50RXJyb3JdLiBJZiBba2V5XSBpcyB0aGUgVHlwZSBmb3IgZHluYW1pYyBvciBhIGZ1bmN0aW9uIHR5cGVkZWYsCiAqIHRocm93cyBhbiBbQXJndW1lbnRFcnJvcl0uCiAqCiAqIE5vdGUgdGhhdCBzaW5jZSBvbmUgY2Fubm90IG9idGFpbiBhIFtUeXBlXSBvYmplY3QgZnJvbSBhbm90aGVyIGlzb2xhdGUsIHRoaXMKICogZnVuY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCB0byBvYnRhaW4gY2xhc3MgbWlycm9ycyBvbiBjbGFzc2VzIG9mIHRoZSBjdXJyZW50CiAqIGlzb2xhdGUuCiAqLwpleHRlcm5hbCBDbGFzc01pcnJvciByZWZsZWN0Q2xhc3MoVHlwZSBrZXkpOwoKLyoqCiAqIFJlZmxlY3RzIHRoZSB0eXBlIHJlcHJlc2VudGVkIGJ5IFtrZXldLgogKgogKiBJZiBba2V5XSBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgW1R5cGVdLCB0aGVuIHRoaXMgZnVuY3Rpb24gdGhyb3dzIGFuCiAqIFtBcmd1bWVudEVycm9yXS4KICoKICogT3B0aW9uYWxseSB0YWtlcyBhIGxpc3Qgb2YgW3R5cGVBcmd1bWVudHNdIGZvciBnZW5lcmljIGNsYXNzZXMuIElmIHRoZSBsaXN0CiAqIGlzIHByb3ZpZGVkLCB0aGVuIHRoZSBba2V5XSBtdXN0IGJlIGEgZ2VuZXJpYyBjbGFzcyB0eXBlLCBhbmQgdGhlIG51bWJlciBvZgogKiB0aGUgcHJvdmlkZWQgdHlwZSBhcmd1bWVudHMgbXVzdCBiZSBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIHR5cGUgdmFyaWFibGVzCiAqIGRlY2xhcmVkIGJ5IHRoZSBjbGFzcy4KICoKICogTm90ZSB0aGF0IHNpbmNlIG9uZSBjYW5ub3Qgb2J0YWluIGEgW1R5cGVdIG9iamVjdCBmcm9tIGFub3RoZXIgaXNvbGF0ZSwgdGhpcwogKiBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkIHRvIG9idGFpbiB0eXBlIG1pcnJvcnMgb24gdHlwZXMgb2YgdGhlIGN1cnJlbnQKICogaXNvbGF0ZS4KICovCmV4dGVybmFsIFR5cGVNaXJyb3IgcmVmbGVjdFR5cGUoVHlwZSBrZXksIFtMaXN0PFR5cGU+IHR5cGVBcmd1bWVudHNdKTsKCi8qKgogKiBBIFtNaXJyb3JdIHJlZmxlY3RzIHNvbWUgRGFydCBsYW5ndWFnZSBlbnRpdHkuCiAqCiAqIEV2ZXJ5IFtNaXJyb3JdIG9yaWdpbmF0ZXMgZnJvbSBzb21lIFtNaXJyb3JTeXN0ZW1dLgogKi8KYWJzdHJhY3QgY2xhc3MgTWlycm9yIHt9CgovKioKICogQW4gW0lzb2xhdGVNaXJyb3JdIHJlZmxlY3RzIGFuIGlzb2xhdGUuCiAqLwphYnN0cmFjdCBjbGFzcyBJc29sYXRlTWlycm9yIGltcGxlbWVudHMgTWlycm9yIHsKICAvKioKICAgKiBBIHVuaXF1ZSBuYW1lIHVzZWQgdG8gcmVmZXIgdG8gdGhlIGlzb2xhdGUgaW4gZGVidWdnaW5nIG1lc3NhZ2VzLgogICAqLwogIFN0cmluZyBnZXQgZGVidWdOYW1lOwoKICAvKioKICAgKiBXaGV0aGVyIHRoaXMgbWlycm9yIHJlZmxlY3RzIHRoZSBjdXJyZW50bHkgcnVubmluZyBpc29sYXRlLgogICAqLwogIGJvb2wgZ2V0IGlzQ3VycmVudDsKCiAgLyoqCiAgICogVGhlIHJvb3QgbGlicmFyeSBmb3IgdGhlIHJlZmxlY3RlZCBpc29sYXRlLgogICAqLwogIExpYnJhcnlNaXJyb3IgZ2V0IHJvb3RMaWJyYXJ5OwoKICAvKioKICAgKiBXaGV0aGVyIFtvdGhlcl0gaXMgYW4gW0lzb2xhdGVNaXJyb3JdIG9uIHRoZSBzYW1lIGlzb2xhdGUgYXMgdGhpcyBtaXJyb3IuCiAgICoKICAgKiBUaGUgZXF1YWxpdHkgaG9sZHMgaWYgYW5kIG9ubHkgaWYKICAgKgogICAqIDEuIFtvdGhlcl0gaXMgYSBtaXJyb3Igb2YgdGhlIHNhbWUga2luZCwgYW5kCiAgICogMi4gdGhlIGlzb2xhdGUgYmVpbmcgcmVmbGVjdGVkIGJ5IHRoaXMgbWlycm9yIGlzIHRoZSBzYW1lIGlzb2xhdGUgYmVpbmcKICAgKiAgICByZWZsZWN0ZWQgYnkgW290aGVyXS4KICAgKi8KICBib29sIG9wZXJhdG9yID09KG90aGVyKTsKCiAgLyoqCiAgICogTG9hZHMgdGhlIGxpYnJhcnkgYXQgdGhlIGdpdmVuIHVyaSBpbnRvIHRoaXMgaXNvbGF0ZS4KICAgKgogICAqIFdBUk5JTkc6IFlvdSBhcmUgc3Ryb25nbHkgZW5jb3VyYWdlZCB0byB1c2UgSXNvbGF0ZS5zcGF3blVyaSBpbnN0ZWFkIHdoZW4KICAgKiBwb3NzaWJsZS4gSXNvbGF0ZU1pcnJvci5sb2FkVXJpIHNob3VsZCBvbmx5IGJlIHVzZWQgd2hlbiBzeW5jaHJvbm91cwogICAqIGNvbW11bmljYXRpb24gb3Igc2hhcmVkIHN0YXRlIHdpdGggZHluYW1pY2FsbHkgbG9hZGVkIGNvZGUgaXMgbmVlZGVkLgogICAqCiAgICogSWYgYSBsaWJyYXJ5IHdpdGggdGhlIHNhbWUgY2Fub25pY2FsaXplZCB1cmkgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQsCiAgICogdGhlIGV4aXN0aW5nIGxpYnJhcnkgd2lsbCBiZSByZXR1cm5lZC4gKFRoZSBpc29sYXRlIHdpbGwgbm90IGxvYWQgYSBuZXcKICAgKiBjb3B5IG9mIHRoZSBsaWJyYXJ5LikKICAgKgogICAqIFRoaXMgYmVoYXZpb3IgaXMgc2ltaWxhciB0byB0aGUgYmVoYXZpb3Igb2YgYW4gaW1wb3J0IHN0YXRlbWVudCB0aGF0CiAgICogYXBwZWFycyBpbiB0aGUgcm9vdCBsaWJyYXJ5LCBleGNlcHQgdGhhdCB0aGUgaW1wb3J0IHNjb3BlIG9mIHRoZSByb290CiAgICogbGlicmFyeSBpcyBub3QgY2hhbmdlZC4KICAgKi8KICBGdXR1cmU8TGlicmFyeU1pcnJvcj4gbG9hZFVyaShVcmkgdXJpKTsKfQoKLyoqCiAqIEEgW0RlY2xhcmF0aW9uTWlycm9yXSByZWZsZWN0cyBzb21lIGVudGl0eSBkZWNsYXJlZCBpbiBhIERhcnQgcHJvZ3JhbS4KICovCmFic3RyYWN0IGNsYXNzIERlY2xhcmF0aW9uTWlycm9yIGltcGxlbWVudHMgTWlycm9yIHsKICAvKioKICAgKiBUaGUgc2ltcGxlIG5hbWUgZm9yIHRoaXMgRGFydCBsYW5ndWFnZSBlbnRpdHkuCiAgICoKICAgKiBUaGUgc2ltcGxlIG5hbWUgaXMgaW4gbW9zdCBjYXNlcyB0aGUgaWRlbnRpZmllciBuYW1lIG9mIHRoZSBlbnRpdHksCiAgICogc3VjaCBhcyAnbXlNZXRob2QnIGZvciBhIG1ldGhvZCwgWzp2b2lkIG15TWV0aG9kKCkgey4uLn06XSBvciAnbXlsaWJyYXJ5JwogICAqIGZvciBhIFs6bGlicmFyeSAnbXlsaWJyYXJ5Jzs6XSBkZWNsYXJhdGlvbi4KICAgKi8KICBTeW1ib2wgZ2V0IHNpbXBsZU5hbWU7CgogIC8qKgogICAqIFRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZSBmb3IgdGhpcyBEYXJ0IGxhbmd1YWdlIGVudGl0eS4KICAgKgogICAqIFRoaXMgbmFtZSBpcyBxdWFsaWZpZWQgYnkgdGhlIG5hbWUgb2YgdGhlIG93bmVyLiBGb3IgaW5zdGFuY2UsCiAgICogdGhlIHF1YWxpZmllZCBuYW1lIG9mIGEgbWV0aG9kICdtZXRob2QnIGluIGNsYXNzICdDbGFzcycgaW4KICAgKiBsaWJyYXJ5ICdsaWJyYXJ5JyBpcyAnbGlicmFyeS5DbGFzcy5tZXRob2QnLgogICAqCiAgICogUmV0dXJucyBhIFtTeW1ib2xdIGNvbnN0cnVjdGVkIGZyb20gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZQogICAqIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSByZWZsZWN0ZWUuCiAgICogTGV0ICpvKiBiZSB0aGUgW293bmVyXSBvZiB0aGlzIG1pcnJvciwgbGV0ICpyKiBiZSB0aGUgcmVmbGVjdGVlIG9mCiAgICogdGhpcyBtaXJyb3IsIGxldCAqcCogYmUgdGhlIGZ1bGx5IHF1YWxpZmllZAogICAqIG5hbWUgb2YgdGhlIHJlZmxlY3RlZSBvZiAqbyosIGFuZCBsZXQgKnMqIGJlIHRoZSBzaW1wbGUgbmFtZSBvZiAqcioKICAgKiBjb21wdXRlZCBieSBbc2ltcGxlTmFtZV0uCiAgICogVGhlIGZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mICpyKiBpcyB0aGUKICAgKiBjb25jYXRlbmF0aW9uIG9mICpwKiwgJy4nLCBhbmQgKnMqLgogICAqCiAgICogQmVjYXVzZSBhbiBpc29sYXRlIGNhbiBjb250YWluIG1vcmUgdGhhbiBvbmUgbGlicmFyeSB3aXRoIHRoZSBzYW1lIG5hbWUgKGF0CiAgICogZGlmZmVyZW50IFVSSXMpLCBhIGZ1bGx5LXF1YWxpZmllZCBuYW1lIGRvZXMgbm90IHVuaXF1ZWx5IGlkZW50aWZ5IGFueQogICAqIGxhbmd1YWdlIGVudGl0eS4KICAgKi8KICBTeW1ib2wgZ2V0IHF1YWxpZmllZE5hbWU7CgogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSBvd25lciBvZiB0aGlzIERhcnQgbGFuZ3VhZ2UgZW50aXR5LgogICAqCiAgICogVGhlIG93bmVyIGlzIHRoZSBkZWNsYXJhdGlvbiBpbW1lZGlhdGVseSBzdXJyb3VuZGluZyB0aGUgcmVmbGVjdGVlOgogICAqCiAgICogKiBGb3IgYSBsaWJyYXJ5LCB0aGUgb3duZXIgaXMgWzpudWxsOl0uCiAgICogKiBGb3IgYSBjbGFzcyBkZWNsYXJhdGlvbiwgdHlwZWRlZiBvciB0b3AgbGV2ZWwgZnVuY3Rpb24gb3IgdmFyaWFibGUsIHRoZQogICAqICAgb3duZXIgaXMgdGhlIGVuY2xvc2luZyBsaWJyYXJ5LgogICAqICogRm9yIGEgbWl4aW4gYXBwbGljYXRpb24gYFMgd2l0aCBNYCwgdGhlIG93bmVyIGlzIHRoZSBvd25lciBvZiBgTWAuCiAgICogKiBGb3IgYSBjb25zdHJ1Y3RvciwgdGhlIG93bmVyIGlzIHRoZSBpbW1lZGlhdGVseSBlbmNsb3NpbmcgY2xhc3MuCiAgICogKiBGb3IgYSBtZXRob2QsIGluc3RhbmNlIHZhcmlhYmxlIG9yIGEgc3RhdGljIHZhcmlhYmxlLCB0aGUgb3duZXIgaXMgdGhlCiAgICogICBpbW1lZGlhdGVseSBlbmNsb3NpbmcgY2xhc3MsIHVubGVzcyB0aGUgY2xhc3MgaXMgYSBtaXhpbiBhcHBsaWNhdGlvbgogICAqICAgYFMgd2l0aCBNYCwgaW4gd2hpY2ggY2FzZSB0aGUgb3duZXIgaXMgYE1gLiBOb3RlIHRoYXQgYE1gIG1heSBiZSBhbgogICAqICAgaW52b2NhdGlvbiBvZiBhIGdlbmVyaWMuCiAgICogKiBGb3IgYSBwYXJhbWV0ZXIsIGxvY2FsIHZhcmlhYmxlIG9yIGxvY2FsIGZ1bmN0aW9uIHRoZSBvd25lciBpcyB0aGUKICAgKiAgIGltbWVkaWF0ZWx5IGVuY2xvc2luZyBmdW5jdGlvbi4KICAgKi8KICBEZWNsYXJhdGlvbk1pcnJvciBnZXQgb3duZXI7CgogIC8qKgogICAqIFdoZXRoZXIgdGhpcyBkZWNsYXJhdGlvbiBpcyBsaWJyYXJ5IHByaXZhdGUuCiAgICoKICAgKiBBbHdheXMgcmV0dXJucyBgZmFsc2VgIGZvciBhIGxpYnJhcnkgZGVjbGFyYXRpb24sCiAgICogb3RoZXJ3aXNlIHJldHVybnMgYHRydWVgIGlmIHRoZSBkZWNsYXJhdGlvbidzIG5hbWUgc3RhcnRzIHdpdGggYW4KICAgKiB1bmRlcnNjb3JlIGNoYXJhY3RlciAoYF9gKSwgYW5kIGBmYWxzZWAgaWYgaXQgZG9lc24ndC4KICAgKi8KICBib29sIGdldCBpc1ByaXZhdGU7CgogIC8qKgogICAqIFdoZXRoZXIgdGhpcyBkZWNsYXJhdGlvbiBpcyB0b3AtbGV2ZWwuCiAgICoKICAgKiBBIGRlY2xhcmF0aW9uIGlzIGNvbnNpZGVyZWQgdG9wLWxldmVsIGlmIGl0cyBbb3duZXJdIGlzIGEgW0xpYnJhcnlNaXJyb3JdLgogICAqLwogIGJvb2wgZ2V0IGlzVG9wTGV2ZWw7CgogIC8qKgogICAqIFRoZSBzb3VyY2UgbG9jYXRpb24gb2YgdGhpcyBEYXJ0IGxhbmd1YWdlIGVudGl0eSwgb3IgWzpudWxsOl0gaWYgdGhlCiAgICogZW50aXR5IGlzIHN5bnRoZXRpYy4KICAgKgogICAqIElmIHRoZSByZWZsZWN0ZWUgaXMgYSB2YXJpYWJsZSwgdGhlIHJldHVybmVkIGxvY2F0aW9uIGdpdmVzIHRoZSBwb3NpdGlvbgogICAqIG9mIHRoZSB2YXJpYWJsZSBuYW1lIGF0IGl0cyBwb2ludCBvZiBkZWNsYXJhdGlvbi4KICAgKgogICAqIElmIHRoZSByZWZsZWN0ZWUgaXMgYSBsaWJyYXJ5LCBjbGFzcywgdHlwZWRlZiwgZnVuY3Rpb24gb3IgdHlwZSB2YXJpYWJsZQogICAqIHdpdGggYXNzb2NpYXRlZCBtZXRhZGF0YSwgdGhlIHJldHVybmVkIGxvY2F0aW9uIGdpdmVzIHRoZSBwb3NpdGlvbiBvZiB0aGUKICAgKiBmaXJzdCBtZXRhZGF0YSBkZWNsYXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHJlZmxlY3RlZS4KICAgKgogICAqIE90aGVyd2lzZToKICAgKgogICAqIElmIHRoZSByZWZsZWN0ZWUgaXMgYSBsaWJyYXJ5LCB0aGUgcmV0dXJuZWQgbG9jYXRpb24gZ2l2ZXMgdGhlIHBvc2l0aW9uIG9mCiAgICogdGhlIGtleXdvcmQgJ2xpYnJhcnknIGF0IHRoZSByZWZsZWN0ZWUncyBwb2ludCBvZiBkZWNsYXJhdGlvbiwgaWYgdGhlCiAgICogcmVmbGVjdGVlIGlzIGEgbmFtZWQgbGlicmFyeSwgb3IgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgZmlyc3QgbGluZSBpbgogICAqIHRoZSBjb21waWxhdGlvbiB1bml0IGRlZmluaW5nIHRoZSByZWZsZWN0ZWUgaWYgdGhlIHJlZmxlY3RlZSBpcyBhbm9ueW1vdXMuCiAgICoKICAgKiBJZiB0aGUgcmVmbGVjdGVlIGlzIGFuIGFic3RyYWN0IGNsYXNzLCB0aGUgcmV0dXJuZWQgbG9jYXRpb24gZ2l2ZXMgdGhlCiAgICogcG9zaXRpb24gb2YgdGhlIGtleXdvcmQgJ2Fic3RyYWN0JyBhdCB0aGUgcmVmbGVjdGVlJ3MgcG9pbnQgb2YgZGVjbGFyYXRpb24uCiAgICogT3RoZXJ3aXNlLCBpZiB0aGUgcmVmbGVjdGVlIGlzIGEgY2xhc3MsIHRoZSByZXR1cm5lZCBsb2NhdGlvbiBnaXZlcyB0aGUKICAgKiBwb3NpdGlvbiBvZiB0aGUga2V5d29yZCAnY2xhc3MnIGF0IHRoZSByZWZsZWN0ZWUncyBwb2ludCBvZiBkZWNsYXJhdGlvbi4KICAgKgogICAqIElmIHRoZSByZWZsZWN0ZWUgaXMgYSB0eXBlZGVmIHRoZSByZXR1cm5lZCBsb2NhdGlvbiBnaXZlcyB0aGUgcG9zaXRpb24gb2YKICAgKiB0aGUgb2YgdGhlIGtleXdvcmQgJ3R5cGVkZWYnIGF0IHRoZSByZWZsZWN0ZWUncyBwb2ludCBvZiBkZWNsYXJhdGlvbi4KICAgKgogICAqIElmIHRoZSByZWZsZWN0ZWUgaXMgYSBmdW5jdGlvbiB3aXRoIGEgZGVjbGFyZWQgcmV0dXJuIHR5cGUsIHRoZSByZXR1cm5lZAogICAqIGxvY2F0aW9uIGdpdmVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZnVuY3Rpb24ncyByZXR1cm4gdHlwZSBhdCB0aGUKICAgKiByZWZsZWN0ZWUncyBwb2ludCBvZiBkZWNsYXJhdGlvbi4gT3RoZXJ3aXNlLiB0aGUgcmV0dXJuZWQgbG9jYXRpb24gZ2l2ZXMKICAgKiB0aGUgcG9zaXRpb24gb2YgdGhlIGZ1bmN0aW9uJ3MgbmFtZSBhdCB0aGUgcmVmbGVjdGVlJ3MgcG9pbnQgb2YKICAgKiBkZWNsYXJhdGlvbi4KICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGlzIG9wdGlvbmFsIGFuZCBtYXkgdGhyb3cgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbjsKCiAgLyoqCiAgICogQSBsaXN0IG9mIHRoZSBtZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZWNsYXJhdGlvbi4KICAgKgogICAqIExldCAqRCogYmUgdGhlIGRlY2xhcmF0aW9uIHRoaXMgbWlycm9yIHJlZmxlY3RzLgogICAqIElmICpEKiBpcyBkZWNvcmF0ZWQgd2l0aCBhbm5vdGF0aW9ucyAqQTEsIC4uLiwgQW4qCiAgICogd2hlcmUgKm4gPiAwKiwgdGhlbiBmb3IgZWFjaCBhbm5vdGF0aW9uICpBaSogYXNzb2NpYXRlZAogICAqIHdpdGggKkQsIDEgPD0gaSA8PSBuKiwgbGV0ICpjaSogYmUgdGhlIGNvbnN0YW50IG9iamVjdAogICAqIHNwZWNpZmllZCBieSAqQWkqLiBUaGVuIHRoaXMgbWV0aG9kIHJldHVybnMgYSBsaXN0IHdob3NlCiAgICogbWVtYmVycyBhcmUgaW5zdGFuY2UgbWlycm9ycyBvbiAqYzEsIC4uLiwgY24qLgogICAqIElmIG5vIGFubm90YXRpb25zIGFyZSBhc3NvY2lhdGVkIHdpdGggKkQqLCB0aGVuCiAgICogYW4gZW1wdHkgbGlzdCBpcyByZXR1cm5lZC4KICAgKgogICAqIElmIGV2YWx1YXRpbmcgYW55IG9mICpjMSwgLi4uLCBjbiogd291bGQgY2F1c2UgYQogICAqIGNvbXBpbGF0aW9uIGVycm9yCiAgICogdGhlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBpZiBhIG5vbi1yZWZsZWN0aXZlIGNvbXBpbGF0aW9uIGVycm9yCiAgICogaGFkIGJlZW4gZW5jb3VudGVyZWQuCiAgICovCiAgTGlzdDxJbnN0YW5jZU1pcnJvcj4gZ2V0IG1ldGFkYXRhOwp9CgovKioKICogQW4gW09iamVjdE1pcnJvcl0gaXMgYSBjb21tb24gc3VwZXJpbnRlcmZhY2Ugb2YgW0luc3RhbmNlTWlycm9yXSwKICogW0NsYXNzTWlycm9yXSwgYW5kIFtMaWJyYXJ5TWlycm9yXSB0aGF0IHJlcHJlc2VudHMgdGhlaXIgc2hhcmVkCiAqIGZ1bmN0aW9uYWxpdHkuCiAqCiAqIEZvciB0aGUgcHVycG9zZXMgb2YgdGhlIG1pcnJvcnMgbGlicmFyeSwgdGhlc2UgdHlwZXMgYXJlIGFsbAogKiBvYmplY3QtbGlrZSwgaW4gdGhhdCB0aGV5IHN1cHBvcnQgbWV0aG9kIGludm9jYXRpb24gYW5kIGZpZWxkCiAqIGFjY2Vzcy4gIFJlYWwgRGFydCBvYmplY3RzIGFyZSByZXByZXNlbnRlZCBieSB0aGUgW0luc3RhbmNlTWlycm9yXQogKiB0eXBlLgogKgogKiBTZWUgW0luc3RhbmNlTWlycm9yXSwgW0NsYXNzTWlycm9yXSwgYW5kIFtMaWJyYXJ5TWlycm9yXS4KICovCmFic3RyYWN0IGNsYXNzIE9iamVjdE1pcnJvciBpbXBsZW1lbnRzIE1pcnJvciB7CiAgLyoqCiAgICogSW52b2tlcyB0aGUgbmFtZWQgZnVuY3Rpb24gYW5kIHJldHVybnMgYSBtaXJyb3Igb24gdGhlIHJlc3VsdC4KICAgKgogICAqIExldCAqbyogYmUgdGhlIG9iamVjdCByZWZsZWN0ZWQgYnkgdGhpcyBtaXJyb3IsIGxldCAqZiogYmUgdGhlIHNpbXBsZSBuYW1lCiAgICogb2YgdGhlIG1lbWJlciBkZW5vdGVkIGJ5IFttZW1iZXJOYW1lXSwgbGV0ICphMSwgLi4uLCBhbiogYmUgdGhlIGVsZW1lbnRzCiAgICogb2YgW3Bvc2l0aW9uYWxBcmd1bWVudHNdLCBsZXQgKmsxLCAuLi4sIGttKiBiZSB0aGUgaWRlbnRpZmllcnMgZGVub3RlZCBieQogICAqIHRoZSBlbGVtZW50cyBvZiBbbmFtZWRBcmd1bWVudHMua2V5c10sIGFuZCBsZXQgKnYxLCAuLi4sIHZtKiBiZSB0aGUKICAgKiBlbGVtZW50cyBvZiBbbmFtZWRBcmd1bWVudHMudmFsdWVzXS4gVGhlbiB0aGlzIG1ldGhvZCB3aWxsIHBlcmZvcm0gdGhlCiAgICogbWV0aG9kIGludm9jYXRpb24gKm8uZihhMSwgLi4uLCBhbiwgazE6IHYxLCAuLi4sIGttOiB2bSkqIGluIGEgc2NvcGUgdGhhdAogICAqIGhhcyBhY2Nlc3MgdG8gdGhlIHByaXZhdGUgbWVtYmVycyBvZiAqbyogKGlmICpvKiBpcyBhIGNsYXNzIG9yIGxpYnJhcnkpIG9yCiAgICogdGhlIHByaXZhdGUgbWVtYmVycyBvZiB0aGUgY2xhc3Mgb2YgKm8qIChvdGhlcndpc2UpLgogICAqCiAgICogSWYgdGhlIGludm9jYXRpb24gcmV0dXJucyBhIHJlc3VsdCAqciosIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHJlc3VsdCBvZgogICAqIGNhbGxpbmcgW3JlZmxlY3RdXCgqcipcKS4KICAgKgogICAqIElmIHRoZSBpbnZvY2F0aW9uIGNhdXNlcyBhIGNvbXBpbGF0aW9uIGVycm9yIHRoZSBlZmZlY3QgaXMgdGhlIHNhbWUgYXMgaWYKICAgKiBhIG5vbi1yZWZsZWN0aXZlIGNvbXBpbGF0aW9uIGVycm9yIGhhZCBiZWVuIGVuY291bnRlcmVkLgogICAqCiAgICogSWYgdGhlIGludm9jYXRpb24gdGhyb3dzIGFuIGV4Y2VwdGlvbiAqZSogKHRoYXQgaXQgZG9lcyBub3QgY2F0Y2gpLCB0aGlzCiAgICogbWV0aG9kIHRocm93cyAqZSouCiAgICovCiAgLyoKICAgKiBUT0RPKHR1cm5pZGdlKTogSGFuZGxlIGFtYmlndW91cyBuYW1lcy4KICAgKiBUT0RPKHR1cm5pZGdlKTogSGFuZGxlIG9wdGlvbmFsICYgbmFtZWQgYXJndW1lbnRzLgogICAqLwogIEluc3RhbmNlTWlycm9yIGludm9rZShTeW1ib2wgbWVtYmVyTmFtZSwgTGlzdCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBbTWFwPFN5bWJvbCwgZHluYW1pYz4gbmFtZWRBcmd1bWVudHNdKTsKCiAgLyoqCiAgICogSW52b2tlcyBhIGdldHRlciBhbmQgcmV0dXJucyBhIG1pcnJvciBvbiB0aGUgcmVzdWx0LgogICAqCiAgICogVGhlIGdldHRlciBjYW4gYmUgdGhlIGltcGxpY2l0IGdldHRlciBmb3IgYSBmaWVsZCBvciBhIHVzZXItZGVmaW5lZCBnZXR0ZXIKICAgKiBtZXRob2QuCiAgICoKICAgKiBMZXQgKm8qIGJlIHRoZSBvYmplY3QgcmVmbGVjdGVkIGJ5IHRoaXMgbWlycm9yLAogICAqIGxldCAqZiogYmUgdGhlIHNpbXBsZSBuYW1lIG9mIHRoZSBnZXR0ZXIgZGVub3RlZCBieSBbZmllbGROYW1lXS4KICAgKgogICAqIFRoZW4gdGhpcyBtZXRob2Qgd2lsbCBwZXJmb3JtIHRoZSBnZXR0ZXIgaW52b2NhdGlvbiAqby5mKiBpbiBhIHNjb3BlIHRoYXQKICAgKiBoYXMgYWNjZXNzIHRvIHRoZSBwcml2YXRlIG1lbWJlcnMgb2YgKm8qIChpZiAqbyogaXMgYSBjbGFzcyBvciBsaWJyYXJ5KSBvcgogICAqIHRoZSBwcml2YXRlIG1lbWJlcnMgb2YgdGhlIGNsYXNzIG9mICpvKiAob3RoZXJ3aXNlKS4KICAgKgogICAqIElmIHRoaXMgbWlycm9yIGlzIGFuIFtJbnN0YW5jZU1pcnJvcl0sIGFuZCBbZmllbGROYW1lXSBkZW5vdGVzIGFuIGluc3RhbmNlCiAgICogbWV0aG9kIG9uIGl0cyByZWZsZWN0ZWUsIHRoZSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gaXMgYW4gaW5zdGFuY2UKICAgKiBtaXJyb3Igb24gYSBjbG9zdXJlIGNvcnJlc3BvbmRpbmcgdG8gdGhhdCBtZXRob2QuCiAgICoKICAgKiBJZiB0aGlzIG1pcnJvciBpcyBhIFtMaWJyYXJ5TWlycm9yXSwgYW5kIFtmaWVsZE5hbWVdIGRlbm90ZXMgYSB0b3AtbGV2ZWwKICAgKiBtZXRob2QgaW4gdGhlIGNvcnJlc3BvbmRpbmcgbGlicmFyeSwgdGhlIHJlc3VsdCBvZiB0aGUgaW52b2NhdGlvbiBpcyBhbgogICAqIGluc3RhbmNlIG1pcnJvciBvbiBhIGNsb3N1cmUgY29ycmVzcG9uZGluZyB0byB0aGF0IG1ldGhvZC4KICAgKgogICAqIElmIHRoaXMgbWlycm9yIGlzIGEgW0NsYXNzTWlycm9yXSwgYW5kIFtmaWVsZE5hbWVdIGRlbm90ZXMgYSBzdGF0aWMgbWV0aG9kCiAgICogaW4gdGhlIGNvcnJlc3BvbmRpbmcgY2xhc3MsIHRoZSByZXN1bHQgb2YgdGhlIGludm9jYXRpb24gaXMgYW4gaW5zdGFuY2UKICAgKiBtaXJyb3Igb24gYSBjbG9zdXJlIGNvcnJlc3BvbmRpbmcgdG8gdGhhdCBtZXRob2QuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiByZXR1cm5zIGEgcmVzdWx0ICpyKiwgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVzdWx0IG9mCiAgICogY2FsbGluZyBbcmVmbGVjdF1cKCpyKlwpLgogICAqCiAgICogSWYgdGhlIGludm9jYXRpb24gY2F1c2VzIGEgY29tcGlsYXRpb24gZXJyb3IsIHRoZSBlZmZlY3QgaXMgdGhlIHNhbWUgYXMgaWYKICAgKiBhIG5vbi1yZWZsZWN0aXZlIGNvbXBpbGF0aW9uIGVycm9yIGhhZCBiZWVuIGVuY291bnRlcmVkLgogICAqCiAgICogSWYgdGhlIGludm9jYXRpb24gdGhyb3dzIGFuIGV4Y2VwdGlvbiAqZSogKHRoYXQgaXQgZG9lcyBub3QgY2F0Y2gpLCB0aGlzCiAgICogbWV0aG9kIHRocm93cyAqZSouCiAgICovCiAgLy8gVE9ETyhhaGUpOiBSZW1vdmUgc3R1ZmYgYWJvdXQgc2NvcGUgYW5kIHByaXZhdGUgbWVtYmVycy4gW2ZpZWxkTmFtZV0gaXMgYQogIC8vIGNhcGFiaWxpdHkgZ2l2aW5nIGFjY2VzcyB0byBwcml2YXRlIG1lbWJlcnMuCiAgSW5zdGFuY2VNaXJyb3IgZ2V0RmllbGQoU3ltYm9sIGZpZWxkTmFtZSk7CgogIC8qKgogICAqIEludm9rZXMgYSBzZXR0ZXIgYW5kIHJldHVybnMgYSBtaXJyb3Igb24gdGhlIHJlc3VsdC4KICAgKgogICAqIFRoZSBzZXR0ZXIgbWF5IGJlIGVpdGhlciB0aGUgaW1wbGljaXQgc2V0dGVyIGZvciBhIG5vbi1maW5hbCBmaWVsZCBvciBhCiAgICogdXNlci1kZWZpbmVkIHNldHRlciBtZXRob2QuCiAgICoKICAgKiBMZXQgKm8qIGJlIHRoZSBvYmplY3QgcmVmbGVjdGVkIGJ5IHRoaXMgbWlycm9yLAogICAqIGxldCAqZiogYmUgdGhlIHNpbXBsZSBuYW1lIG9mIHRoZSBnZXR0ZXIgZGVub3RlZCBieSBbZmllbGROYW1lXSwKICAgKiBhbmQgbGV0ICphKiBiZSB0aGUgb2JqZWN0IGJvdW5kIHRvIFt2YWx1ZV0uCiAgICoKICAgKiBUaGVuIHRoaXMgbWV0aG9kIHdpbGwgcGVyZm9ybSB0aGUgc2V0dGVyIGludm9jYXRpb24gKm8uZiA9IGEqIGluIGEgc2NvcGUKICAgKiB0aGF0IGhhcyBhY2Nlc3MgdG8gdGhlIHByaXZhdGUgbWVtYmVycyBvZiAqbyogKGlmICpvKiBpcyBhIGNsYXNzIG9yCiAgICogbGlicmFyeSkgb3IgdGhlIHByaXZhdGUgbWVtYmVycyBvZiB0aGUgY2xhc3Mgb2YgKm8qIChvdGhlcndpc2UpLgogICAqCiAgICogSWYgdGhlIGludm9jYXRpb24gcmV0dXJucyBhIHJlc3VsdCAqciosIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHJlc3VsdCBvZgogICAqIGNhbGxpbmcgW3JlZmxlY3RdXChbdmFsdWVdXCkuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiBjYXVzZXMgYSBjb21waWxhdGlvbiBlcnJvciwgdGhlIGVmZmVjdCBpcyB0aGUgc2FtZSBhcyBpZgogICAqIGEgbm9uLXJlZmxlY3RpdmUgY29tcGlsYXRpb24gZXJyb3IgaGFkIGJlZW4gZW5jb3VudGVyZWQuCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiB0aHJvd3MgYW4gZXhjZXB0aW9uICplKiAodGhhdCBpdCBkb2VzIG5vdCBjYXRjaCkgdGhpcwogICAqIG1ldGhvZCB0aHJvd3MgKmUqLgogICAqLwogIC8qIFRPRE8odHVybmlkZ2UpOiBIYW5kbGUgYW1iaWd1b3VzIG5hbWVzLiovCiAgSW5zdGFuY2VNaXJyb3Igc2V0RmllbGQoU3ltYm9sIGZpZWxkTmFtZSwgT2JqZWN0IHZhbHVlKTsKCiAgLyoqCiAgICogUGVyZm9ybXMgW2ludm9jYXRpb25dIG9uIHRoZSByZWZsZWN0ZWUgb2YgdGhpcyBbT2JqZWN0TWlycm9yXS4KICAgKgogICAqIEVxdWl2YWxlbnQgdG8KICAgKgogICAqICAgICBpZiAoaW52b2NhdGlvbi5pc0dldHRlcikgewogICAqICAgICAgIHJldHVybiB0aGlzLmdldEZpZWxkKGludm9jYXRpb24ubWVtYmVyTmFtZSkucmVmbGVjdGVlOwogICAqICAgICB9IGVsc2UgaWYgKGludm9jYXRpb24uaXNTZXR0ZXIpIHsKICAgKiAgICAgICByZXR1cm4gdGhpcy5zZXRGaWVsZChpbnZvY2F0aW9uLm1lbWJlck5hbWUsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbi5wb3NpdGlvbmFsQXJndW1lbnRzWzBdKS5yZWZsZWN0ZWU7CiAgICogICAgIH0gZWxzZSB7CiAgICogICAgICAgcmV0dXJuIHRoaXMuaW52b2tlKGludm9jYXRpb24ubWVtYmVyTmFtZSwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgaW52b2NhdGlvbi5wb3NpdGlvbmFsQXJndW1lbnRzLAogICAqICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZvY2F0aW9uLm5hbWVkQXJndW1lbnRzKS5yZWZsZWN0ZWU7CiAgICogICAgIH0KICAgKi8KICBkZWxlZ2F0ZShJbnZvY2F0aW9uIGludm9jYXRpb24pOwp9CgovKioKICogQW4gW0luc3RhbmNlTWlycm9yXSByZWZsZWN0cyBhbiBpbnN0YW5jZSBvZiBhIERhcnQgbGFuZ3VhZ2Ugb2JqZWN0LgogKi8KYWJzdHJhY3QgY2xhc3MgSW5zdGFuY2VNaXJyb3IgaW1wbGVtZW50cyBPYmplY3RNaXJyb3IgewogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSB0eXBlIG9mIHRoZSByZWZsZWN0ZWUuCiAgICoKICAgKiBSZXR1cm5zIGEgbWlycm9yIG9uIHRoZSBhY3R1YWwgY2xhc3Mgb2YgdGhlIHJlZmxlY3RlZS4KICAgKiBUaGUgY2xhc3Mgb2YgdGhlIHJlZmxlY3RlZSBtYXkgZGlmZmVyIGZyb20KICAgKiB0aGUgb2JqZWN0IHJldHVybmVkIGJ5IGludm9raW5nIFtydW50aW1lVHlwZV0gb24KICAgKiB0aGUgcmVmbGVjdGVlLgogICAqLwogIENsYXNzTWlycm9yIGdldCB0eXBlOwoKICAvKioKICAgKiBXaGV0aGVyIFtyZWZsZWN0ZWVdIHdpbGwgcmV0dXJuIHRoZSBpbnN0YW5jZSByZWZsZWN0ZWQgYnkgdGhpcyBtaXJyb3IuCiAgICoKICAgKiBUaGlzIHdpbGwgYWx3YXlzIGJlIHRydWUgaW4gdGhlIGxvY2FsIGNhc2UgKHJlZmxlY3RpbmcgaW5zdGFuY2VzIGluIHRoZQogICAqIHNhbWUgaXNvbGF0ZSksIGJ1dCBvbmx5IHRydWUgaW4gdGhlIHJlbW90ZSBjYXNlIGlmIHRoaXMgbWlycm9yIHJlZmxlY3RzIGEKICAgKiBzaW1wbGUgdmFsdWUuCiAgICoKICAgKiBBIHZhbHVlIGlzIHNpbXBsZSBpZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBob2xkczoKICAgKgogICAqICogdGhlIHZhbHVlIGlzIFs6bnVsbDpdCiAgICogKiB0aGUgdmFsdWUgaXMgb2YgdHlwZSBbbnVtXQogICAqICogdGhlIHZhbHVlIGlzIG9mIHR5cGUgW2Jvb2xdCiAgICogKiB0aGUgdmFsdWUgaXMgb2YgdHlwZSBbU3RyaW5nXQogICAqLwogIGJvb2wgZ2V0IGhhc1JlZmxlY3RlZTsKCiAgLyoqCiAgICogSWYgdGhlIFtJbnN0YW5jZU1pcnJvcl0gcmVmbGVjdHMgYW4gaW5zdGFuY2UgaXQgaXMgbWVhbmluZ2Z1bCB0bwogICAqIGhhdmUgYSBsb2NhbCByZWZlcmVuY2UgdG8sIHdlIHByb3ZpZGUgYWNjZXNzIHRvIHRoZSBhY3R1YWwKICAgKiBpbnN0YW5jZSBoZXJlLgogICAqCiAgICogSWYgeW91IGFjY2VzcyBbcmVmbGVjdGVlXSB3aGVuIFtoYXNSZWZsZWN0ZWVdIGlzIGZhbHNlLCBhbgogICAqIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICovCiAgZ2V0IHJlZmxlY3RlZTsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIG1pcnJvciBpcyBlcXVhbCB0byBbb3RoZXJdLgogICAqCiAgICogVGhlIGVxdWFsaXR5IGhvbGRzIGlmIGFuZCBvbmx5IGlmCiAgICoKICAgKiAxLiBbb3RoZXJdIGlzIGEgbWlycm9yIG9mIHRoZSBzYW1lIGtpbmQsIGFuZAogICAqIDIuIGVpdGhlcgogICAqCiAgICogICAgYS4gW2hhc1JlZmxlY3RlZV0gaXMgdHJ1ZSBhbmQgc28gaXMKICAgKiAgICBbOmlkZW50aWNhbChyZWZsZWN0ZWUsIG90aGVyLnJlZmxlY3RlZSk6XSwgb3IKICAgKgogICAqICAgIGIuIHRoZSByZW1vdGUgb2JqZWN0cyByZWZsZWN0ZWQgYnkgdGhpcyBtaXJyb3IgYW5kIGJ5IFtvdGhlcl0gYXJlCiAgICogICAgaWRlbnRpY2FsLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpOwp9CgovKioKICogQSBbQ2xvc3VyZU1pcnJvcl0gcmVmbGVjdHMgYSBjbG9zdXJlLgogKgogKiBBIFtDbG9zdXJlTWlycm9yXSBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGl0cyByZWZsZWN0ZWUgYW5kCiAqIGludHJvc3BlY3QgaXRzIGZ1bmN0aW9uLgogKi8KYWJzdHJhY3QgY2xhc3MgQ2xvc3VyZU1pcnJvciBpbXBsZW1lbnRzIEluc3RhbmNlTWlycm9yIHsKICAvKioKICAgKiBBIG1pcnJvciBvbiB0aGUgZnVuY3Rpb24gYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2xvc3VyZS4KICAgKgogICAqIFRoZSBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggYW4gaW1wbGljaXQgY2xvc3VyZSBvZiBhIGZ1bmN0aW9uIGlzIHRoYXQKICAgKiBmdW5jdGlvbi4KICAgKgogICAqIFRoZSBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggYW4gaW5zdGFuY2Ugb2YgYSBjbGFzcyB0aGF0IGhhcyBhIFs6Y2FsbDpdCiAgICogbWV0aG9kIGlzIHRoYXQgWzpjYWxsOl0gbWV0aG9kLgogICAqCiAgICogQSBEYXJ0IGltcGxlbWVudGF0aW9uIG1pZ2h0IGNob29zZSB0byBjcmVhdGUgYSBjbGFzcyBmb3IgZWFjaCBjbG9zdXJlCiAgICogZXhwcmVzc2lvbiwgaW4gd2hpY2ggY2FzZSBbOmZ1bmN0aW9uOl0gd291bGQgYmUgdGhlIHNhbWUgYXMKICAgKiBbOnR5cGUuZGVjbGFyYXRpb25zWyNjYWxsXTpdLiBCdXQgdGhlIERhcnQgbGFuZ3VhZ2UgbW9kZWwgZG9lcyBub3QgcmVxdWlyZQogICAqIHRoaXMuIEEgbW9yZSB0eXBpY2FsIGltcGxlbWVudGF0aW9uIGludm9sdmVzIGEgc2luZ2xlIGNsb3N1cmUgY2xhc3MgZm9yCiAgICogZWFjaCB0eXBlIHNpZ25hdHVyZSwgd2hlcmUgdGhlIGNhbGwgbWV0aG9kIGRpc3BhdGNoZXMgdG8gYSBmdW5jdGlvbiBoZWxkCiAgICogaW4gdGhlIGNsb3N1cmUgcmF0aGVyIHRoZSBjYWxsIG1ldGhvZAogICAqIGRpcmVjdGx5IGltcGxlbWVudGluZyB0aGUgY2xvc3VyZSBib2R5LiBTbyBvbmUgY2Fubm90IHJlbHkgb24gY2xvc3VyZXMgZnJvbQogICAqIGRpc3RpbmN0IGNsb3N1cmUgZXhwcmVzc2lvbnMgaGF2aW5nIGRpc3RpbmN0IGNsYXNzZXMgKFs6dHlwZTpdKSwgYnV0IG9uZQogICAqIGNhbiByZWx5IG9uIHRoZW0gaGF2aW5nIGRpc3RpbmN0IGZ1bmN0aW9ucyAoWzpmdW5jdGlvbjpdKS4KICAgKi8KICBNZXRob2RNaXJyb3IgZ2V0IGZ1bmN0aW9uOwoKICAvKioKICAgKiBFeGVjdXRlcyB0aGUgY2xvc3VyZSBhbmQgcmV0dXJucyBhIG1pcnJvciBvbiB0aGUgcmVzdWx0LgogICAqCiAgICogTGV0ICpmKiBiZSB0aGUgY2xvc3VyZSByZWZsZWN0ZWQgYnkgdGhpcyBtaXJyb3IsCiAgICogbGV0ICphMSwgLi4uLCBhbiogYmUgdGhlIGVsZW1lbnRzIG9mIFtwb3NpdGlvbmFsQXJndW1lbnRzXSwKICAgKiBsZXQgKmsxLCAuLi4sIGttKiBiZSB0aGUgaWRlbnRpZmllcnMgZGVub3RlZCBieSB0aGUgZWxlbWVudHMgb2YKICAgKiBbbmFtZWRBcmd1bWVudHMua2V5c10sCiAgICogYW5kIGxldCAqdjEsIC4uLiwgdm0qIGJlIHRoZSBlbGVtZW50cyBvZiBbbmFtZWRBcmd1bWVudHMudmFsdWVzXS4KICAgKgogICAqIFRoZW4gdGhpcyBtZXRob2Qgd2lsbCBwZXJmb3JtIHRoZSBtZXRob2QgaW52b2NhdGlvbgogICAqICpmKGExLCAuLi4sIGFuLCBrMTogdjEsIC4uLiwga206IHZtKSouCiAgICoKICAgKiBJZiB0aGUgaW52b2NhdGlvbiByZXR1cm5zIGEgcmVzdWx0ICpyKiwgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVzdWx0IG9mCiAgICogY2FsbGluZyBbcmVmbGVjdF1cKCpyKlwpLgogICAqCiAgICogSWYgdGhlIGludm9jYXRpb24gY2F1c2VzIGEgY29tcGlsYXRpb24gZXJyb3IsIHRoZSBlZmZlY3QgaXMgdGhlIHNhbWUgYXMgaWYKICAgKiBhIG5vbi1yZWZsZWN0aXZlIGNvbXBpbGF0aW9uIGVycm9yIGhhZCBiZWVuIGVuY291bnRlcmVkLgogICAqCiAgICogSWYgdGhlIGludm9jYXRpb24gdGhyb3dzIGFuIGV4Y2VwdGlvbiAqZSogKHRoYXQgaXQgZG9lcyBub3QgY2F0Y2gpLCB0aGlzCiAgICogbWV0aG9kIHRocm93cyAqZSouCiAgICovCiAgSW5zdGFuY2VNaXJyb3IgYXBwbHkoTGlzdCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBbTWFwPFN5bWJvbCwgZHluYW1pYz4gbmFtZWRBcmd1bWVudHNdKTsKfQoKLyoqCiAqIEEgW0xpYnJhcnlNaXJyb3JdIHJlZmxlY3RzIGEgRGFydCBsYW5ndWFnZSBsaWJyYXJ5LCBwcm92aWRpbmcKICogYWNjZXNzIHRvIHRoZSB2YXJpYWJsZXMsIGZ1bmN0aW9ucywgYW5kIGNsYXNzZXMgb2YgdGhlCiAqIGxpYnJhcnkuCiAqLwphYnN0cmFjdCBjbGFzcyBMaWJyYXJ5TWlycm9yIGltcGxlbWVudHMgRGVjbGFyYXRpb25NaXJyb3IsIE9iamVjdE1pcnJvciB7CiAgLyoqCiAgICogVGhlIGFic29sdXRlIHVyaSBvZiB0aGUgbGlicmFyeS4KICAgKi8KICBVcmkgZ2V0IHVyaTsKCiAgLyoqCiAgICogUmV0dXJucyBhbiBpbW11dGFibGUgbWFwIG9mIHRoZSBkZWNsYXJhdGlvbnMgYWN0dWFsbHkgZ2l2ZW4gaW4gdGhlIGxpYnJhcnkuCiAgICoKICAgKiBUaGlzIG1hcCBpbmNsdWRlcyBhbGwgcmVndWxhciBtZXRob2RzLCBnZXR0ZXJzLCBzZXR0ZXJzLCBmaWVsZHMsIGNsYXNzZXMKICAgKiBhbmQgdHlwZWRlZnMgYWN0dWFsbHkgZGVjbGFyZWQgaW4gdGhlIGxpYnJhcnkuIFRoZSBtYXAgaXMga2V5ZWQgYnkgdGhlCiAgICogc2ltcGxlIG5hbWVzIG9mIHRoZSBkZWNsYXJhdGlvbnMuCiAgICovCiAgTWFwPFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+IGdldCBkZWNsYXJhdGlvbnM7CgogIC8qKgogICAqIFdoZXRoZXIgdGhpcyBtaXJyb3IgaXMgZXF1YWwgdG8gW290aGVyXS4KICAgKgogICAqIFRoZSBlcXVhbGl0eSBob2xkcyBpZiBhbmQgb25seSBpZgogICAqCiAgICogMS4gW290aGVyXSBpcyBhIG1pcnJvciBvZiB0aGUgc2FtZSBraW5kLCBhbmQKICAgKiAyLiBUaGUgbGlicmFyeSBiZWluZyByZWZsZWN0ZWQgYnkgdGhpcyBtaXJyb3IgYW5kIHRoZSBsaWJyYXJ5IGJlaW5nCiAgICogICAgcmVmbGVjdGVkIGJ5IFtvdGhlcl0gYXJlIHRoZSBzYW1lIGxpYnJhcnkgaW4gdGhlIHNhbWUgaXNvbGF0ZS4KICAgKi8KICBib29sIG9wZXJhdG9yID09KG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGxpc3Qgb2YgdGhlIGltcG9ydHMgYW5kIGV4cG9ydHMgaW4gdGhpcyBsaWJyYXJ5OwogICAqLwogIExpc3Q8TGlicmFyeURlcGVuZGVuY3lNaXJyb3I+IGdldCBsaWJyYXJ5RGVwZW5kZW5jaWVzOwp9CgovLy8gQSBtaXJyb3Igb24gYW4gaW1wb3J0IG9yIGV4cG9ydCBkZWNsYXJhdGlvbi4KYWJzdHJhY3QgY2xhc3MgTGlicmFyeURlcGVuZGVuY3lNaXJyb3IgaW1wbGVtZW50cyBNaXJyb3IgewogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyBkZXBlbmRlbmN5IGlzIGFuIGltcG9ydC4KICBib29sIGdldCBpc0ltcG9ydDsKCiAgLy8vIElzIGB0cnVlYCBpZiB0aGlzIGRlcGVuZGVuY3kgaXMgYW4gZXhwb3J0LgogIGJvb2wgZ2V0IGlzRXhwb3J0OwoKICAvLy8gUmV0dXJucyB0cnVlIGlmZiB0aGlzIGRlcGVuZGVuY3kgaXMgYSBkZWZlcnJlZCBpbXBvcnQuIE90aGVyd2lzZSByZXR1cm5zCiAgLy8vIGZhbHNlLgogIGJvb2wgZ2V0IGlzRGVmZXJyZWQ7CgogIC8vLyBSZXR1cm5zIHRoZSBsaWJyYXJ5IG1pcnJvciBvZiB0aGUgbGlicmFyeSB0aGF0IGltcG9ydHMgb3IgZXhwb3J0cyB0aGUKICAvLy8gW3RhcmdldExpYnJhcnldLgogIExpYnJhcnlNaXJyb3IgZ2V0IHNvdXJjZUxpYnJhcnk7CgogIC8vLyBSZXR1cm5zIHRoZSBsaWJyYXJ5IG1pcnJvciBvZiB0aGUgbGlicmFyeSB0aGF0IGlzIGltcG9ydGVkIG9yIGV4cG9ydGVkLAogIC8vLyBvciBudWxsIGlmIHRoZSBsaWJyYXJ5IGlzIG5vdCBsb2FkZWQuCiAgTGlicmFyeU1pcnJvciBnZXQgdGFyZ2V0TGlicmFyeTsKCiAgLy8vIFJldHVybnMgdGhlIHByZWZpeCBpZiB0aGlzIGlzIGEgcHJlZml4ZWQgaW1wb3J0IGFuZCBgbnVsbGAgb3RoZXJ3aXNlLgogIFN5bWJvbCBnZXQgcHJlZml4OwoKICAvLy8gUmV0dXJucyB0aGUgbGlzdCBvZiBzaG93L2hpZGUgY29tYmluYXRvcnMgb24gdGhlIGltcG9ydC9leHBvcnQKICAvLy8gZGVjbGFyYXRpb24uCiAgTGlzdDxDb21iaW5hdG9yTWlycm9yPiBnZXQgY29tYmluYXRvcnM7CgogIC8vLyBSZXR1cm5zIHRoZSBzb3VyY2UgbG9jYXRpb24gZm9yIHRoaXMgaW1wb3J0L2V4cG9ydCBkZWNsYXJhdGlvbi4KICBTb3VyY2VMb2NhdGlvbiBnZXQgbG9jYXRpb247CgogIExpc3Q8SW5zdGFuY2VNaXJyb3I+IGdldCBtZXRhZGF0YTsKCiAgLy8vIFJldHVybnMgYSBmdXR1cmUgdGhhdCBjb21wbGV0ZXMgd2l0aCBhIGxpYnJhcnkgbWlycm9yIG9uIHRoZSBsaWJyYXJ5IGJlaW5nCiAgLy8vIGltcG9ydGVkIG9yIGV4cG9ydGVkIHdoZW4gaXQgaXMgbG9hZGVkLCBhbmQgaW5pdGlhdGVzIGEgbG9hZCBvZiB0aGF0CiAgLy8vIGxpYnJhcnkgaWYgaXQgaXMgbm90IGxvYWRlZC4KICBGdXR1cmU8TGlicmFyeU1pcnJvcj4gbG9hZExpYnJhcnkoKTsKfQoKLy8vIEEgbWlycm9yIG9uIGEgc2hvdy9oaWRlIGNvbWJpbmF0b3IgZGVjbGFyZWQgb24gYSBsaWJyYXJ5IGRlcGVuZGVuY3kuCmFic3RyYWN0IGNsYXNzIENvbWJpbmF0b3JNaXJyb3IgaW1wbGVtZW50cyBNaXJyb3IgewogIC8vLyBUaGUgbGlzdCBvZiBpZGVudGlmaWVycyBvbiB0aGUgY29tYmluYXRvci4KICBMaXN0PFN5bWJvbD4gZ2V0IGlkZW50aWZpZXJzOwoKICAvLy8gSXMgYHRydWVgIGlmIHRoaXMgaXMgYSAnc2hvdycgY29tYmluYXRvci4KICBib29sIGdldCBpc1Nob3c7CgogIC8vLyBJcyBgdHJ1ZWAgaWYgdGhpcyBpcyBhICdoaWRlJyBjb21iaW5hdG9yLgogIGJvb2wgZ2V0IGlzSGlkZTsKfQoKLyoqCiAqIEEgW1R5cGVNaXJyb3JdIHJlZmxlY3RzIGEgRGFydCBsYW5ndWFnZSBjbGFzcywgdHlwZWRlZiwKICogZnVuY3Rpb24gdHlwZSBvciB0eXBlIHZhcmlhYmxlLgogKi8KYWJzdHJhY3QgY2xhc3MgVHlwZU1pcnJvciBpbXBsZW1lbnRzIERlY2xhcmF0aW9uTWlycm9yIHsKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhpcyBtaXJyb3IgcmVmbGVjdHMgZHluYW1pYywgYSBub24tZ2VuZXJpYyBjbGFzcyBvcgogICAqIHR5cGVkZWYsIG9yIGFuIGluc3RhbnRpYXRlZCBnZW5lcmljIGNsYXNzIG9yIHR5cGVkZWYgaW4gdGhlIGN1cnJlbnQKICAgKiBpc29sYXRlLiBPdGhlcndpc2UsIHJldHVybnMgZmFsc2UuCiAgICovCiAgYm9vbCBnZXQgaGFzUmVmbGVjdGVkVHlwZTsKCiAgLyoqCiAgICogSWYgWzpoYXNSZWZsZWN0ZWRUeXBlOl0gcmV0dXJucyB0cnVlLCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIFtUeXBlXS4KICAgKiBPdGhlcndpc2UsIGFuIFtVbnN1cHBvcnRlZEVycm9yXSBpcyB0aHJvd24uCiAgICovCiAgVHlwZSBnZXQgcmVmbGVjdGVkVHlwZTsKCiAgLyoqCiAgICogQW4gaW1tdXRhYmxlIGxpc3Qgd2l0aCBtaXJyb3JzIGZvciBhbGwgdHlwZSB2YXJpYWJsZXMgZm9yIHRoaXMgdHlwZS4KICAgKgogICAqIElmIHRoaXMgdHlwZSBpcyBhIGdlbmVyaWMgZGVjbGFyYXRpb24gb3IgYW4gaW52b2NhdGlvbiBvZiBhIGdlbmVyaWMKICAgKiBkZWNsYXJhdGlvbiwgdGhlIHJldHVybmVkIGxpc3QgY29udGFpbnMgbWlycm9ycyBvbiB0aGUgdHlwZSB2YXJpYWJsZXMKICAgKiBkZWNsYXJlZCBpbiB0aGUgb3JpZ2luYWwgZGVjbGFyYXRpb24uCiAgICogT3RoZXJ3aXNlLCB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKgogICAqIFRoaXMgbGlzdCBwcmVzZXJ2ZXMgdGhlIG9yZGVyIG9mIGRlY2xhcmF0aW9uIG9mIHRoZSB0eXBlIHZhcmlhYmxlcy4KICAgKi8KICBMaXN0PFR5cGVWYXJpYWJsZU1pcnJvcj4gZ2V0IHR5cGVWYXJpYWJsZXM7CgogIC8qKgogICAqIEFuIGltbXV0YWJsZSBsaXN0IHdpdGggbWlycm9ycyBmb3IgYWxsIHR5cGUgYXJndW1lbnRzIGZvcgogICAqIHRoaXMgdHlwZS4KICAgKgogICAqIElmIHRoZSByZWZsZWN0ZWUgaXMgYW4gaW52b2NhdGlvbiBvZiBhIGdlbmVyaWMgY2xhc3MsCiAgICogdGhlIHR5cGUgYXJndW1lbnRzIGFyZSB0aGUgYmluZGluZ3Mgb2YgaXRzIHR5cGUgcGFyYW1ldGVycy4KICAgKiBJZiB0aGUgcmVmbGVjdGVlIGlzIHRoZSBvcmlnaW5hbCBkZWNsYXJhdGlvbiBvZiBhIGdlbmVyaWMsCiAgICogaXQgaGFzIG5vIHR5cGUgYXJndW1lbnRzIGFuZCB0aGlzIG1ldGhvZCByZXR1cm5zIGFuIGVtcHR5IGxpc3QuCiAgICogSWYgdGhlIHJlZmxlY3RlZSBpcyBub3QgZ2VuZXJpYywgdGhlbgogICAqIGl0IGhhcyBubyB0eXBlIGFyZ3VtZW50cyBhbmQgdGhpcyBtZXRob2QgcmV0dXJucyBhbiBlbXB0eSBsaXN0LgogICAqCiAgICogVGhpcyBsaXN0IHByZXNlcnZlcyB0aGUgb3JkZXIgb2YgZGVjbGFyYXRpb24gb2YgdGhlIHR5cGUgdmFyaWFibGVzLgogICAqLwogIExpc3Q8VHlwZU1pcnJvcj4gZ2V0IHR5cGVBcmd1bWVudHM7CgogIC8qKgogICAqIElzIHRoaXMgdGhlIG9yaWdpbmFsIGRlY2xhcmF0aW9uIG9mIHRoaXMgdHlwZT8KICAgKgogICAqIEZvciBtb3N0IGNsYXNzZXMsIHRoZXkgYXJlIHRoZWlyIG93biBvcmlnaW5hbCBkZWNsYXJhdGlvbi4gIEZvcgogICAqIGdlbmVyaWMgY2xhc3NlcywgaG93ZXZlciwgdGhlcmUgaXMgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZQogICAqIG9yaWdpbmFsIGNsYXNzIGRlY2xhcmF0aW9uLCB3aGljaCBoYXMgdW5ib3VuZCB0eXBlIHZhcmlhYmxlcywgYW5kCiAgICogdGhlIGluc3RhbnRpYXRpb25zIG9mIGdlbmVyaWMgY2xhc3Nlcywgd2hpY2ggaGF2ZSBib3VuZCB0eXBlCiAgICogdmFyaWFibGVzLgogICAqLwogIGJvb2wgZ2V0IGlzT3JpZ2luYWxEZWNsYXJhdGlvbjsKCiAgLyoqCiAgICogQSBtaXJyb3Igb24gdGhlIG9yaWdpbmFsIGRlY2xhcmF0aW9uIG9mIHRoaXMgdHlwZS4KICAgKgogICAqIEZvciBtb3N0IGNsYXNzZXMsIHRoZXkgYXJlIHRoZWlyIG93biBvcmlnaW5hbCBkZWNsYXJhdGlvbi4gIEZvcgogICAqIGdlbmVyaWMgY2xhc3NlcywgaG93ZXZlciwgdGhlcmUgaXMgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZQogICAqIG9yaWdpbmFsIGNsYXNzIGRlY2xhcmF0aW9uLCB3aGljaCBoYXMgdW5ib3VuZCB0eXBlIHZhcmlhYmxlcywgYW5kCiAgICogdGhlIGluc3RhbnRpYXRpb25zIG9mIGdlbmVyaWMgY2xhc3Nlcywgd2hpY2ggaGF2ZSBib3VuZCB0eXBlCiAgICogdmFyaWFibGVzLgogICAqLwogIFR5cGVNaXJyb3IgZ2V0IG9yaWdpbmFsRGVjbGFyYXRpb247CgogIC8qKgogICAqIENoZWNrcyB0aGUgc3VidHlwZSByZWxhdGlvbnNoaXAsIGRlbm90ZWQgYnkgYDw6YCBpbiB0aGUgbGFuZ3VhZ2UKICAgKiBzcGVjaWZpY2F0aW9uLgogICAqCiAgICogVGhpcyBpcyB0aGUgdHlwZSByZWxhdGlvbnNoaXAgdXNlZCBpbiBgaXNgIHRlc3QgY2hlY2tzLgogICAqLwogIGJvb2wgaXNTdWJ0eXBlT2YoVHlwZU1pcnJvciBvdGhlcik7CgogIC8qKgogICAqIENoZWNrcyB0aGUgYXNzaWduYWJpbGl0eSByZWxhdGlvbnNoaXAsIGRlbm90ZWQgYnkgYDw9PmAgaW4gdGhlIGxhbmd1YWdlCiAgICogc3BlY2lmaWNhdGlvbi4KICAgKgogICAqIFRoaXMgaXMgdGhlIHR5cGUgcmVsYXRpb25zaGlwIHRlc3RlZCBvbiBhc3NpZ25tZW50IGluIGNoZWNrZWQgbW9kZS4KICAgKi8KICBib29sIGlzQXNzaWduYWJsZVRvKFR5cGVNaXJyb3Igb3RoZXIpOwp9CgovKioKICogQSBbQ2xhc3NNaXJyb3JdIHJlZmxlY3RzIGEgRGFydCBsYW5ndWFnZSBjbGFzcy4KICovCmFic3RyYWN0IGNsYXNzIENsYXNzTWlycm9yIGltcGxlbWVudHMgVHlwZU1pcnJvciwgT2JqZWN0TWlycm9yIHsKICAvKioKICAgKiBBIG1pcnJvciBvbiB0aGUgc3VwZXJjbGFzcyBvbiB0aGUgcmVmbGVjdGVlLgogICAqCiAgICogSWYgdGhpcyB0eXBlIGlzIFs6T2JqZWN0Ol0sIHRoZSBzdXBlcmNsYXNzIHdpbGwgYmUgbnVsbC4KICAgKi8KICBDbGFzc01pcnJvciBnZXQgc3VwZXJjbGFzczsKCiAgLyoqCiAgICogQSBsaXN0IG9mIG1pcnJvcnMgb24gdGhlIHN1cGVyaW50ZXJmYWNlcyBvZiB0aGUgcmVmbGVjdGVlLgogICAqLwogIExpc3Q8Q2xhc3NNaXJyb3I+IGdldCBzdXBlcmludGVyZmFjZXM7CgogIC8qKgogICAqIElzIHRoZSByZWZsZWN0ZWUgYWJzdHJhY3Q/CiAgICovCiAgYm9vbCBnZXQgaXNBYnN0cmFjdDsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhbiBlbnVtPwogICAqLwogIGJvb2wgZ2V0IGlzRW51bTsKCiAgLyoqCiAgICogUmV0dXJucyBhbiBpbW11dGFibGUgbWFwIG9mIHRoZSBkZWNsYXJhdGlvbnMgYWN0dWFsbHkgZ2l2ZW4gaW4gdGhlIGNsYXNzCiAgICogZGVjbGFyYXRpb24uCiAgICoKICAgKiBUaGlzIG1hcCBpbmNsdWRlcyBhbGwgcmVndWxhciBtZXRob2RzLCBnZXR0ZXJzLCBzZXR0ZXJzLCBmaWVsZHMsCiAgICogY29uc3RydWN0b3JzIGFuZCB0eXBlIHZhcmlhYmxlcyBhY3R1YWxseSBkZWNsYXJlZCBpbiB0aGUgY2xhc3MuIEJvdGgKICAgKiBzdGF0aWMgYW5kIGluc3RhbmNlIG1lbWJlcnMgYXJlIGluY2x1ZGVkLCBidXQgbm8gaW5oZXJpdGVkIG1lbWJlcnMgYXJlCiAgICogaW5jbHVkZWQuIFRoZSBtYXAgaXMga2V5ZWQgYnkgdGhlIHNpbXBsZSBuYW1lcyBvZiB0aGUgZGVjbGFyYXRpb25zLgogICAqCiAgICogVGhpcyBkb2VzIG5vdCBpbmNsdWRlIGluaGVyaXRlZCBtZW1iZXJzLgogICAqLwogIE1hcDxTeW1ib2wsIERlY2xhcmF0aW9uTWlycm9yPiBnZXQgZGVjbGFyYXRpb25zOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbWFwIG9mIHRoZSBtZXRob2RzLCBnZXR0ZXJzIGFuZCBzZXR0ZXJzIG9mIGFuIGluc3RhbmNlIG9mIHRoZQogICAqIGNsYXNzLgogICAqCiAgICogVGhlIGludGVudCBpcyB0byBjYXB0dXJlIHRob3NlIG1lbWJlcnMgdGhhdCBjb25zdGl0dXRlIHRoZSBBUEkgb2YgYW4KICAgKiBpbnN0YW5jZS4gSGVuY2UgZmllbGRzIGFyZSBub3QgaW5jbHVkZWQsIGJ1dCB0aGUgZ2V0dGVycyBhbmQgc2V0dGVycwogICAqIGltcGxpY2l0bHkgaW50cm9kdWNlZCBieSBmaWVsZHMgYXJlIGluY2x1ZGVkLiBUaGUgbWFwIGluY2x1ZGVzIG1ldGhvZHMsCiAgICogZ2V0dGVycyBhbmQgc2V0dGVycyB0aGF0IGFyZSBpbmhlcml0ZWQgYXMgd2VsbCBhcyB0aG9zZSBpbnRyb2R1Y2VkIGJ5IHRoZQogICAqIGNsYXNzIGl0c2VsZi4KICAgKgogICAqIFRoZSBtYXAgaXMga2V5ZWQgYnkgdGhlIHNpbXBsZSBuYW1lcyBvZiB0aGUgbWVtYmVycy4KICAgKi8KICBNYXA8U3ltYm9sLCBNZXRob2RNaXJyb3I+IGdldCBpbnN0YW5jZU1lbWJlcnM7CgogIC8qKgogICAqIFJldHVybnMgYSBtYXAgb2YgdGhlIHN0YXRpYyBtZXRob2RzLCBnZXR0ZXJzIGFuZCBzZXR0ZXJzIG9mIHRoZSBjbGFzcy4KICAgKgogICAqIFRoZSBpbnRlbnQgaXMgdG8gY2FwdHVyZSB0aG9zZSBtZW1iZXJzIHRoYXQgY29uc3RpdHV0ZSB0aGUgQVBJIG9mIGEgY2xhc3MuCiAgICogSGVuY2UgZmllbGRzIGFyZSBub3QgaW5jbHVkZWQsIGJ1dCB0aGUgZ2V0dGVycyBhbmQgc2V0dGVycyBpbXBsaWNpdGx5CiAgICogaW50cm9kdWNlZCBieSBmaWVsZHMgYXJlIGluY2x1ZGVkLgogICAqCiAgICogVGhlIG1hcCBpcyBrZXllZCBieSB0aGUgc2ltcGxlIG5hbWVzIG9mIHRoZSBtZW1iZXJzLgogICAqLwogIE1hcDxTeW1ib2wsIE1ldGhvZE1pcnJvcj4gZ2V0IHN0YXRpY01lbWJlcnM7CgogIC8qKgogICAqIFRoZSBtaXhpbiBvZiB0aGlzIGNsYXNzLgogICAqCiAgICogSWYgdGhpcyBjbGFzcyBpcyB0aGUgcmVzdWx0IG9mIGEgbWl4aW4gYXBwbGljYXRpb24gb2YgdGhlIGZvcm0gUyB3aXRoIE0sCiAgICogcmV0dXJucyBhIGNsYXNzIG1pcnJvciBvbiBNLiBPdGhlcndpc2UgcmV0dXJucyBhIGNsYXNzIG1pcnJvciBvbgogICAqIHRoZSByZWZsZWN0ZWUuCiAgICovCiAgQ2xhc3NNaXJyb3IgZ2V0IG1peGluOwoKICAvLyBUT0RPKGFoZSk6IFdoYXQgYWJvdXQ6CiAgLy8gLy8vIEZpbmRzIHRoZSBpbnN0YW5jZSBtZW1iZXIgbmFtZWQgW25hbWVdIGRlY2xhcmVkIG9yIGluaGVyaXRlZCBpbiB0aGUKICAvLyAvLy8gcmVmbGVjdGVkIGNsYXNzLgogIC8vIERlY2xhcmF0aW9uTWlycm9yIGluc3RhbmNlTG9va3VwKFN5bWJvbCBuYW1lKTsKCiAgLyoqCiAgICogSW52b2tlcyB0aGUgbmFtZWQgY29uc3RydWN0b3IgYW5kIHJldHVybnMgYSBtaXJyb3Igb24gdGhlIHJlc3VsdC4KICAgKgogICAqIExldCAqYyogYmUgdGhlIGNsYXNzIHJlZmxlY3RlZCBieSB0aGlzIG1pcnJvciwKICAgKiBsZXQgKmExLCAuLi4sIGFuKiBiZSB0aGUgZWxlbWVudHMgb2YgW3Bvc2l0aW9uYWxBcmd1bWVudHNdLAogICAqIGxldCAqazEsIC4uLiwga20qIGJlIHRoZSBpZGVudGlmaWVycyBkZW5vdGVkIGJ5IHRoZSBlbGVtZW50cyBvZgogICAqIFtuYW1lZEFyZ3VtZW50cy5rZXlzXSwKICAgKiBhbmQgbGV0ICp2MSwgLi4uLCB2bSogYmUgdGhlIGVsZW1lbnRzIG9mIFtuYW1lZEFyZ3VtZW50cy52YWx1ZXNdLgogICAqCiAgICogSWYgW2NvbnN0cnVjdG9yTmFtZV0gd2FzIGNyZWF0ZWQgZnJvbSB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHRoaXMgbWV0aG9kCiAgICogd2lsbCBleGVjdXRlIHRoZSBpbnN0YW5jZSBjcmVhdGlvbiBleHByZXNzaW9uCiAgICogKm5ldyBjKGExLCAuLi4sIGFuLCBrMTogdjEsIC4uLiwga206IHZtKSogaW4gYSBzY29wZSB0aGF0IGhhcyBhY2Nlc3MgdG8KICAgKiB0aGUgcHJpdmF0ZSBtZW1iZXJzIG9mICpjKi4KICAgKgogICAqIE90aGVyd2lzZSwgbGV0ICpmKiBiZSB0aGUgc2ltcGxlIG5hbWUgb2YgdGhlIGNvbnN0cnVjdG9yIGRlbm90ZWQgYnkKICAgKiBbY29uc3RydWN0b3JOYW1lXS4gVGhlbiB0aGlzIG1ldGhvZCB3aWxsIGV4ZWN1dGUgdGhlIGluc3RhbmNlIGNyZWF0aW9uCiAgICogZXhwcmVzc2lvbiAqbmV3IGMuZihhMSwgLi4uLCBhbiwgazE6IHYxLCAuLi4sIGttOiB2bSkqIGluIGEgc2NvcGUgdGhhdCBoYXMKICAgKiBhY2Nlc3MgdG8gdGhlIHByaXZhdGUgbWVtYmVycyBvZiAqYyouCiAgICoKICAgKiBJbiBlaXRoZXIgY2FzZToKICAgKgogICAqICogSWYgdGhlIGV4cHJlc3Npb24gZXZhbHVhdGVzIHRvIGEgcmVzdWx0ICpyKiwgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUKICAgKiAgIHJlc3VsdCBvZiBjYWxsaW5nIFtyZWZsZWN0XVwoKnIqXCkuCiAgICogKiBJZiBldmFsdWF0aW5nIHRoZSBleHByZXNzaW9uIGNhdXNlcyBhIGNvbXBpbGF0aW9uIGVycm9yLCB0aGUgZWZmZWN0IGlzCiAgICogICB0aGUgc2FtZSBhcyBpZiBhIG5vbi1yZWZsZWN0aXZlIGNvbXBpbGF0aW9uIGVycm9yIGhhZCBiZWVuIGVuY291bnRlcmVkLgogICAqICogSWYgZXZhbHVhdGluZyB0aGUgZXhwcmVzc2lvbiB0aHJvd3MgYW4gZXhjZXB0aW9uICplKiAodGhhdCBpdCBkb2VzIG5vdAogICAqICAgY2F0Y2gpLCB0aGlzIG1ldGhvZCB0aHJvd3MgKmUqLgogICAqLwogIEluc3RhbmNlTWlycm9yIG5ld0luc3RhbmNlKFN5bWJvbCBjb25zdHJ1Y3Rvck5hbWUsIExpc3QgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgW01hcDxTeW1ib2wsIGR5bmFtaWM+IG5hbWVkQXJndW1lbnRzXSk7CgogIC8qKgogICAqIFdoZXRoZXIgdGhpcyBtaXJyb3IgaXMgZXF1YWwgdG8gW290aGVyXS4KICAgKgogICAqIFRoZSBlcXVhbGl0eSBob2xkcyBpZiBhbmQgb25seSBpZgogICAqCiAgICogMS4gW290aGVyXSBpcyBhIG1pcnJvciBvZiB0aGUgc2FtZSBraW5kLCBhbmQKICAgKiAyLiBUaGlzIG1pcnJvciBhbmQgW290aGVyXSByZWZsZWN0IHRoZSBzYW1lIGNsYXNzLgogICAqCiAgICogTm90ZSB0aGF0IGlmIHRoZSByZWZsZWN0ZWQgY2xhc3MgaXMgYW4gaW52b2NhdGlvbiBvZiBhIGdlbmVyaWMgY2xhc3MsIDIuCiAgICogaW1wbGllcyB0aGF0IHRoZSByZWZsZWN0ZWQgY2xhc3MgYW5kIFtvdGhlcl0gaGF2ZSBlcXVhbCB0eXBlIGFyZ3VtZW50cy4KICAgKi8KICBib29sIG9wZXJhdG9yID09KG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBjbGFzcyBkZW5vdGVkIGJ5IHRoZSByZWNlaXZlciBpcyBhIHN1YmNsYXNzIG9mIHRoZQogICAqIGNsYXNzIGRlbm90ZWQgYnkgdGhlIGFyZ3VtZW50LgogICAqCiAgICogTm90ZSB0aGF0IHRoZSBzdWJjbGFzcyByZWxhdGlvbnNoaXAgaXMgcmVmbGV4aXZlLgogICAqLwogIGJvb2wgaXNTdWJjbGFzc09mKENsYXNzTWlycm9yIG90aGVyKTsKfQoKLyoqCiAqIEEgW0Z1bmN0aW9uVHlwZU1pcnJvcl0gcmVwcmVzZW50cyB0aGUgdHlwZSBvZiBhIGZ1bmN0aW9uIGluIHRoZQogKiBEYXJ0IGxhbmd1YWdlLgogKi8KYWJzdHJhY3QgY2xhc3MgRnVuY3Rpb25UeXBlTWlycm9yIGltcGxlbWVudHMgQ2xhc3NNaXJyb3IgewogIC8qKgogICAqIFJldHVybnMgdGhlIHJldHVybiB0eXBlIG9mIHRoZSByZWZsZWN0ZWUuCiAgICovCiAgVHlwZU1pcnJvciBnZXQgcmV0dXJuVHlwZTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGxpc3Qgb2YgdGhlIHBhcmFtZXRlciB0eXBlcyBvZiB0aGUgcmVmbGVjdGVlLgogICAqLwogIExpc3Q8UGFyYW1ldGVyTWlycm9yPiBnZXQgcGFyYW1ldGVyczsKCiAgLyoqCiAgICogQSBtaXJyb3Igb24gdGhlIFs6Y2FsbDpdIG1ldGhvZCBmb3IgdGhlIHJlZmxlY3RlZS4KICAgKi8KICAvLyBUaGlzIGlzIG9ubHkgaGVyZSBiZWNhdXNlIGluIHRoZSBwYXN0IHRoZSBWTSBkaWQgbm90IGltcGxlbWVudCBhIGNhbGwKICAvLyBtZXRob2Qgb24gY2xvc3VyZXMuCiAgTWV0aG9kTWlycm9yIGdldCBjYWxsTWV0aG9kOwp9CgovKioKICogQSBbVHlwZVZhcmlhYmxlTWlycm9yXSByZXByZXNlbnRzIGEgdHlwZSBwYXJhbWV0ZXIgb2YgYSBnZW5lcmljIHR5cGUuCiAqLwphYnN0cmFjdCBjbGFzcyBUeXBlVmFyaWFibGVNaXJyb3IgZXh0ZW5kcyBUeXBlTWlycm9yIHsKICAvKioKICAgKiBBIG1pcnJvciBvbiB0aGUgdHlwZSB0aGF0IGlzIHRoZSB1cHBlciBib3VuZCBvZiB0aGlzIHR5cGUgdmFyaWFibGUuCiAgICovCiAgVHlwZU1pcnJvciBnZXQgdXBwZXJCb3VuZDsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBzdGF0aWM/CiAgICoKICAgKiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoZSBtaXJyb3JzIGxpYnJhcnksIHR5cGUgdmFyaWFibGVzIGFyZSBjb25zaWRlcmVkCiAgICogbm9uLXN0YXRpYy4KICAgKi8KICBib29sIGdldCBpc1N0YXRpYzsKCiAgLyoqCiAgICogV2hldGhlciBbb3RoZXJdIGlzIGEgW1R5cGVWYXJpYWJsZU1pcnJvcl0gb24gdGhlIHNhbWUgdHlwZSB2YXJpYWJsZSBhcyB0aGlzCiAgICogbWlycm9yLgogICAqCiAgICogVGhlIGVxdWFsaXR5IGhvbGRzIGlmIGFuZCBvbmx5IGlmCiAgICoKICAgKiAxLiBbb3RoZXJdIGlzIGEgbWlycm9yIG9mIHRoZSBzYW1lIGtpbmQsIGFuZAogICAqIDIuIFs6c2ltcGxlTmFtZSA9PSBvdGhlci5zaW1wbGVOYW1lOl0gYW5kIFs6b3duZXIgPT0gb3RoZXIub3duZXI6XS4KICAgKi8KICBib29sIG9wZXJhdG9yID09KG90aGVyKTsKfQoKLyoqCiAqIEEgW1R5cGVkZWZNaXJyb3JdIHJlcHJlc2VudHMgYSB0eXBlZGVmIGluIGEgRGFydCBsYW5ndWFnZSBwcm9ncmFtLgogKi8KYWJzdHJhY3QgY2xhc3MgVHlwZWRlZk1pcnJvciBpbXBsZW1lbnRzIFR5cGVNaXJyb3IgewogIC8qKgogICAqIFRoZSBkZWZpbmluZyB0eXBlIGZvciB0aGlzIHR5cGVkZWYuCiAgICoKICAgKiBJZiB0aGUgdHlwZSByZWZlcnJlZCB0byBieSB0aGUgcmVmbGVjdGVlIGlzIGEgZnVuY3Rpb24gdHlwZSAqRiosIHRoZQogICAqIHJlc3VsdCB3aWxsIGJlIFs6RnVuY3Rpb25UeXBlTWlycm9yOl0gcmVmbGVjdGluZyAqRiogd2hpY2ggaXMgYWJzdHJhY3QKICAgKiBhbmQgaGFzIGFuIGFic3RyYWN0IG1ldGhvZCBbOmNhbGw6XSB3aG9zZSBzaWduYXR1cmUgY29ycmVzcG9uZHMgdG8gKkYqLgogICAqIEZvciBpbnN0YW5jZSBbOnZvaWQgZihpbnQpOl0gaXMgdGhlIHJlZmVyZW50IGZvciBbOnR5cGVkZWYgdm9pZCBmKGludCk6XS4KICAgKi8KICBGdW5jdGlvblR5cGVNaXJyb3IgZ2V0IHJlZmVyZW50Owp9CgovKioKICogQSBbTWV0aG9kTWlycm9yXSByZWZsZWN0cyBhIERhcnQgbGFuZ3VhZ2UgZnVuY3Rpb24sIG1ldGhvZCwKICogY29uc3RydWN0b3IsIGdldHRlciwgb3Igc2V0dGVyLgogKi8KYWJzdHJhY3QgY2xhc3MgTWV0aG9kTWlycm9yIGltcGxlbWVudHMgRGVjbGFyYXRpb25NaXJyb3IgewogIC8qKgogICAqIEEgbWlycm9yIG9uIHRoZSByZXR1cm4gdHlwZSBmb3IgdGhlIHJlZmxlY3RlZS4KICAgKi8KICBUeXBlTWlycm9yIGdldCByZXR1cm5UeXBlOwoKICAvKioKICAgKiBUaGUgc291cmNlIGNvZGUgZm9yIHRoZSByZWZsZWN0ZWUsIGlmIGF2YWlsYWJsZS4gT3RoZXJ3aXNlIG51bGwuCiAgICovCiAgU3RyaW5nIGdldCBzb3VyY2U7CgogIC8qKgogICAqIEEgbGlzdCBvZiBtaXJyb3JzIG9uIHRoZSBwYXJhbWV0ZXJzIGZvciB0aGUgcmVmbGVjdGVlLgogICAqLwogIExpc3Q8UGFyYW1ldGVyTWlycm9yPiBnZXQgcGFyYW1ldGVyczsKCiAgLyoqCiAgICogQSBmdW5jdGlvbiBpcyBjb25zaWRlcmVkIG5vbi1zdGF0aWMgaWZmIGl0IGlzIHBlcm1pdGVkIHRvIHJlZmVyIHRvICd0aGlzJy4KICAgKgogICAqIE5vdGUgdGhhdCBnZW5lcmF0aXZlIGNvbnN0cnVjdG9ycyBhcmUgY29uc2lkZXJlZCBub24tc3RhdGljLCB3aGVyZWFzCiAgICogZmFjdG9yeSBjb25zdHJ1Y3RvcnMgYXJlIGNvbnNpZGVyZWQgc3RhdGljLgogICAqLwogIGJvb2wgZ2V0IGlzU3RhdGljOwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIGFic3RyYWN0PwogICAqLwogIGJvb2wgZ2V0IGlzQWJzdHJhY3Q7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmbGVjdGVlIGlzIHN5bnRoZXRpYywgYW5kIHJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlLgogICAqCiAgICogQSByZWZsZWN0ZWUgaXMgc3ludGhldGljIGlmIGl0IGlzIGEgZ2V0dGVyIG9yIHNldHRlciBpbXBsaWNpdGx5IGludHJvZHVjZWQKICAgKiBmb3IgYSBmaWVsZCBvciBUeXBlLCBvciBpZiBpdCBpcyBhIGNvbnN0cnVjdG9yIHRoYXQgd2FzIGltcGxpY2l0bHkKICAgKiBpbnRyb2R1Y2VkIGFzIGEgZGVmYXVsdCBjb25zdHJ1Y3RvciBvciBhcyBwYXJ0IG9mIGEgbWl4aW4gYXBwbGljYXRpb24uCiAgICovCiAgYm9vbCBnZXQgaXNTeW50aGV0aWM7CgogIC8qKgogICAqIElzIHRoZSByZWZsZWN0ZWUgYSByZWd1bGFyIGZ1bmN0aW9uIG9yIG1ldGhvZD8KICAgKgogICAqIEEgZnVuY3Rpb24gb3IgbWV0aG9kIGlzIHJlZ3VsYXIgaWYgaXQgaXMgbm90IGEgZ2V0dGVyLCBzZXR0ZXIsIG9yCiAgICogY29uc3RydWN0b3IuICBOb3RlIHRoYXQgb3BlcmF0b3JzLCBieSB0aGlzIGRlZmluaXRpb24sIGFyZQogICAqIHJlZ3VsYXIgbWV0aG9kcy4KICAgKi8KICBib29sIGdldCBpc1JlZ3VsYXJNZXRob2Q7CgogIC8qKgogICAqIElzIHRoZSByZWZsZWN0ZWUgYW4gb3BlcmF0b3I/CiAgICovCiAgYm9vbCBnZXQgaXNPcGVyYXRvcjsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhIGdldHRlcj8KICAgKi8KICBib29sIGdldCBpc0dldHRlcjsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhIHNldHRlcj8KICAgKi8KICBib29sIGdldCBpc1NldHRlcjsKCiAgLyoqCiAgICogSXMgdGhlIHJlZmxlY3RlZSBhIGNvbnN0cnVjdG9yPwogICAqLwogIGJvb2wgZ2V0IGlzQ29uc3RydWN0b3I7CgogIC8qKgogICAqIFRoZSBjb25zdHJ1Y3RvciBuYW1lIGZvciBuYW1lZCBjb25zdHJ1Y3RvcnMgYW5kIGZhY3RvcnkgbWV0aG9kcy4KICAgKgogICAqIEZvciB1bm5hbWVkIGNvbnN0cnVjdG9ycywgdGhpcyBpcyB0aGUgZW1wdHkgc3RyaW5nLiAgRm9yCiAgICogbm9uLWNvbnN0cnVjdG9ycywgdGhpcyBpcyB0aGUgZW1wdHkgc3RyaW5nLgogICAqCiAgICogRm9yIGV4YW1wbGUsIFs6J2Jhcic6XSBpcyB0aGUgY29uc3RydWN0b3IgbmFtZSBmb3IgY29uc3RydWN0b3IKICAgKiBbOkZvby5iYXI6XSBvZiB0eXBlIFs6Rm9vOl0uCiAgICovCiAgU3ltYm9sIGdldCBjb25zdHJ1Y3Rvck5hbWU7CgogIC8qKgogICAqIElzIHRoZSByZWZsZWN0ZWUgYSBjb25zdCBjb25zdHJ1Y3Rvcj8KICAgKi8KICBib29sIGdldCBpc0NvbnN0Q29uc3RydWN0b3I7CgogIC8qKgogICAqIElzIHRoZSByZWZsZWN0ZWUgYSBnZW5lcmF0aXZlIGNvbnN0cnVjdG9yPwogICAqLwogIGJvb2wgZ2V0IGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yOwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIGEgcmVkaXJlY3RpbmcgY29uc3RydWN0b3I/CiAgICovCiAgYm9vbCBnZXQgaXNSZWRpcmVjdGluZ0NvbnN0cnVjdG9yOwoKICAvKioKICAgKiBJcyB0aGUgcmVmbGVjdGVlIGEgZmFjdG9yeSBjb25zdHJ1Y3Rvcj8KICAgKi8KICBib29sIGdldCBpc0ZhY3RvcnlDb25zdHJ1Y3RvcjsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIG1pcnJvciBpcyBlcXVhbCB0byBbb3RoZXJdLgogICAqCiAgICogVGhlIGVxdWFsaXR5IGhvbGRzIGlmIGFuZCBvbmx5IGlmCiAgICoKICAgKiAxLiBbb3RoZXJdIGlzIGEgbWlycm9yIG9mIHRoZSBzYW1lIGtpbmQsIGFuZAogICAqIDIuIFs6c2ltcGxlTmFtZSA9PSBvdGhlci5zaW1wbGVOYW1lOl0gYW5kIFs6b3duZXIgPT0gb3RoZXIub3duZXI6XS4KICAgKi8KICBib29sIG9wZXJhdG9yID09KG90aGVyKTsKfQoKLyoqCiAqIEEgW1ZhcmlhYmxlTWlycm9yXSByZWZsZWN0cyBhIERhcnQgbGFuZ3VhZ2UgdmFyaWFibGUgZGVjbGFyYXRpb24uCiAqLwphYnN0cmFjdCBjbGFzcyBWYXJpYWJsZU1pcnJvciBpbXBsZW1lbnRzIERlY2xhcmF0aW9uTWlycm9yIHsKICAvKioKICAgKiBSZXR1cm5zIGEgbWlycm9yIG9uIHRoZSB0eXBlIG9mIHRoZSByZWZsZWN0ZWUuCiAgICovCiAgVHlwZU1pcnJvciBnZXQgdHlwZTsKCiAgLyoqCiAgICogUmV0dXJucyBbOnRydWU6XSBpZiB0aGUgcmVmbGVjdGVlIGlzIGEgc3RhdGljIHZhcmlhYmxlLgogICAqIE90aGVyd2lzZSByZXR1cm5zIFs6ZmFsc2U6XS4KICAgKgogICAqIEZvciB0aGUgcHVycG9zZXMgb2YgdGhlIG1pcnJvciBsaWJyYXJ5LCB0b3AtbGV2ZWwgdmFyaWFibGVzIGFyZQogICAqIGltcGxpY2l0bHkgZGVjbGFyZWQgc3RhdGljLgogICAqLwogIGJvb2wgZ2V0IGlzU3RhdGljOwoKICAvKioKICAgKiBSZXR1cm5zIFs6dHJ1ZTpdIGlmIHRoZSByZWZsZWN0ZWUgaXMgYSBmaW5hbCB2YXJpYWJsZS4KICAgKiBPdGhlcndpc2UgcmV0dXJucyBbOmZhbHNlOl0uCiAgICovCiAgYm9vbCBnZXQgaXNGaW5hbDsKCiAgLyoqCiAgICogUmV0dXJucyBbOnRydWU6XSBpZiB0aGUgcmVmbGVjdGVlIGlzIGRlY2xhcmVkIFs6Y29uc3Q6XS4KICAgKiBPdGhlcndpc2UgcmV0dXJucyBbOmZhbHNlOl0uCiAgICovCiAgYm9vbCBnZXQgaXNDb25zdDsKCiAgLyoqCiAgICogV2hldGhlciB0aGlzIG1pcnJvciBpcyBlcXVhbCB0byBbb3RoZXJdLgogICAqCiAgICogVGhlIGVxdWFsaXR5IGhvbGRzIGlmIGFuZCBvbmx5IGlmCiAgICoKICAgKiAxLiBbb3RoZXJdIGlzIGEgbWlycm9yIG9mIHRoZSBzYW1lIGtpbmQsIGFuZAogICAqIDIuIFs6c2ltcGxlTmFtZSA9PSBvdGhlci5zaW1wbGVOYW1lOl0gYW5kIFs6b3duZXIgPT0gb3RoZXIub3duZXI6XS4KICAgKi8KICBib29sIG9wZXJhdG9yID09KG90aGVyKTsKfQoKLyoqCiAqIEEgW1BhcmFtZXRlck1pcnJvcl0gcmVmbGVjdHMgYSBEYXJ0IGZvcm1hbCBwYXJhbWV0ZXIgZGVjbGFyYXRpb24uCiAqLwphYnN0cmFjdCBjbGFzcyBQYXJhbWV0ZXJNaXJyb3IgaW1wbGVtZW50cyBWYXJpYWJsZU1pcnJvciB7CiAgLyoqCiAgICogQSBtaXJyb3Igb24gdGhlIHR5cGUgb2YgdGhpcyBwYXJhbWV0ZXIuCiAgICovCiAgVHlwZU1pcnJvciBnZXQgdHlwZTsKCiAgLyoqCiAgICogUmV0dXJucyBbOnRydWU6XSBpZiB0aGUgcmVmbGVjdGVlIGlzIGFuIG9wdGlvbmFsIHBhcmFtZXRlci4KICAgKiBPdGhlcndpc2UgcmV0dXJucyBbOmZhbHNlOl0uCiAgICovCiAgYm9vbCBnZXQgaXNPcHRpb25hbDsKCiAgLyoqCiAgICogUmV0dXJucyBbOnRydWU6XSBpZiB0aGUgcmVmbGVjdGVlIGlzIGEgbmFtZWQgcGFyYW1ldGVyLgogICAqIE90aGVyd2lzZSByZXR1cm5zIFs6ZmFsc2U6XS4KICAgKi8KICBib29sIGdldCBpc05hbWVkOwoKICAvKioKICAgKiBSZXR1cm5zIFs6dHJ1ZTpdIGlmIHRoZSByZWZsZWN0ZWUgaGFzIGV4cGxpY2l0bHkgZGVjbGFyZWQgYSBkZWZhdWx0IHZhbHVlLgogICAqIE90aGVyd2lzZSByZXR1cm5zIFs6ZmFsc2U6XS4KICAgKi8KICBib29sIGdldCBoYXNEZWZhdWx0VmFsdWU7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYW4gb3B0aW9uYWwgcGFyYW1ldGVyLgogICAqCiAgICogUmV0dXJucyBhbiBbSW5zdGFuY2VNaXJyb3JdIG9uIHRoZSAoY29tcGlsZS10aW1lIGNvbnN0YW50KQogICAqIGRlZmF1bHQgdmFsdWUgZm9yIGFuIG9wdGlvbmFsIHBhcmFtZXRlci4KICAgKiBJZiBubyBkZWZhdWx0IHZhbHVlIGlzIGRlY2xhcmVkLCBpdCBkZWZhdWx0cyB0byBgbnVsbGAKICAgKiBhbmQgYSBtaXJyb3Igb2YgYG51bGxgIGlzIHJldHVybmVkLgogICAqCiAgICogUmV0dXJucyBgbnVsbGAgZm9yIGEgcmVxdWlyZWQgcGFyYW1ldGVyLgogICAqLwogIEluc3RhbmNlTWlycm9yIGdldCBkZWZhdWx0VmFsdWU7Cn0KCi8qKgogKiBBIFtTb3VyY2VMb2NhdGlvbl0gZGVzY3JpYmVzIHRoZSBzcGFuIG9mIGFuIGVudGl0eSBpbiBEYXJ0IHNvdXJjZSBjb2RlLgogKi8KYWJzdHJhY3QgY2xhc3MgU291cmNlTG9jYXRpb24gewogIC8qKgogICAqIFRoZSAxLWJhc2VkIGxpbmUgbnVtYmVyIGZvciB0aGlzIHNvdXJjZSBsb2NhdGlvbi4KICAgKgogICAqIEEgdmFsdWUgb2YgMCBtZWFucyB0aGF0IHRoZSBsaW5lIG51bWJlciBpcyB1bmtub3duLgogICAqLwogIGludCBnZXQgbGluZTsKCiAgLyoqCiAgICogVGhlIDEtYmFzZWQgY29sdW1uIG51bWJlciBmb3IgdGhpcyBzb3VyY2UgbG9jYXRpb24uCiAgICoKICAgKiBBIHZhbHVlIG9mIDAgbWVhbnMgdGhhdCB0aGUgY29sdW1uIG51bWJlciBpcyB1bmtub3duLgogICAqLwogIGludCBnZXQgY29sdW1uOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBVUkkgd2hlcmUgdGhlIHNvdXJjZSBvcmlnaW5hdGVkLgogICAqLwogIFVyaSBnZXQgc291cmNlVXJpOwp9CgovKioKICogQ2xhc3MgdXNlZCBmb3IgZW5jb2RpbmcgY29tbWVudHMgYXMgbWV0YWRhdGEgYW5ub3RhdGlvbnMuCiAqLwpjbGFzcyBDb21tZW50IHsKICAvKioKICAgKiBUaGUgY29tbWVudCB0ZXh0IGFzIHdyaXR0ZW4gaW4gdGhlIHNvdXJjZSB0ZXh0LgogICAqLwogIGZpbmFsIFN0cmluZyB0ZXh0OwoKICAvKioKICAgKiBUaGUgY29tbWVudCB0ZXh0IHdpdGhvdXQgdGhlIHN0YXJ0LCBlbmQsIGFuZCBwYWRkaW5nIHRleHQuCiAgICoKICAgKiBGb3IgZXhhbXBsZSwgaWYgW3RleHRdIGlzIFs6IC8qKiBDb21tZW50IHRleHQuICovIDpdIHRoZW4gdGhlIFt0cmltbWVkVGV4dF0KICAgKiBpcyBbOiBDb21tZW50IHRleHQuIDpdLgogICAqLwogIGZpbmFsIFN0cmluZyB0cmltbWVkVGV4dDsKCiAgLyoqCiAgICogSXMgWzp0cnVlOl0gaWYgdGhpcyBjb21tZW50IGlzIGEgZG9jdW1lbnRhdGlvbiBjb21tZW50LgogICAqCiAgICogVGhhdCBpcywgdGhhdCB0aGUgY29tbWVudCBpcyBlaXRoZXIgZW5jbG9zZWQgaW4gWzogLyoqIC4uLiAqLyA6XSBvciBzdGFydHMKICAgKiB3aXRoIFs6IC8vLyA6XS4KICAgKi8KICBmaW5hbCBib29sIGlzRG9jQ29tbWVudDsKCiAgY29uc3QgQ29tbWVudCh0aGlzLnRleHQsIHRoaXMudHJpbW1lZFRleHQsIHRoaXMuaXNEb2NDb21tZW50KTsKfQoKLyoqCiAqIEFubm90YXRpb24gZGVzY3JpYmluZyBob3cgImRhcnQ6bWlycm9ycyIgaXMgdXNlZCAoRVhQRVJJTUVOVEFMKS4KICoKICogV2hlbiB1c2VkIGFzIG1ldGFkYXRhIG9uIGFuIGltcG9ydCBvZiAiZGFydDptaXJyb3JzIiBpbiBsaWJyYXJ5ICpMKiwgdGhpcwogKiBjbGFzcyBkZXNjcmliZXMgaG93ICJkYXJ0Om1pcnJvcnMiIGlzIHVzZWQgYnkgbGlicmFyeSAqTCogdW5sZXNzIG92ZXJyaWRkZW4uCiAqIFNlZSBbb3ZlcnJpZGVdLgogKgogKiBUaGUgZm9sbG93aW5nIHRleHQgaXMgbm9uLW5vcm1hdGl2ZToKICoKICogSW4gc29tZSBzY2VuYXJpb3MsIGZvciBleGFtcGxlLCB3aGVuIG1pbmlmeWluZyBEYXJ0IGNvZGUsIG9yIHdoZW4gZ2VuZXJhdGluZwogKiBKYXZhU2NyaXB0IGNvZGUgZnJvbSBhIERhcnQgcHJvZ3JhbSwgdGhlIHNpemUgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBvdXRwdXQKICogY2FuIHN1ZmZlciBmcm9tIHVzZSBvZiByZWZsZWN0aW9uLiAgSW4gdGhvc2UgY2FzZXMsIHRlbGxpbmcgdGhlIGNvbXBpbGVyCiAqIHdoYXQgaXMgdXNlZCwgY2FuIGhhdmUgYSBzaWduaWZpY2FudCBpbXBhY3QuCiAqCiAqIEV4YW1wbGUgdXNhZ2U6CiAqCiAqICAgICBATWlycm9yc1VzZWQoc3ltYm9sczogJ2ZvbycpCiAqICAgICBpbXBvcnQgJ2RhcnQ6bWlycm9ycyc7CiAqCiAqICAgICBjbGFzcyBGb28gewogKiAgICAgICBub1N1Y2hNZXRob2QoSW52b2NhdGlvbiBpbnZvY2F0aW9uKSB7CiAqICAgICAgICAgcHJpbnQoTWlycm9yU3lzdGVtLmdldE5hbWUoaW52b2NhdGlvbi5tZW1iZXJOYW1lKSk7CiAqICAgICAgIH0KICogICAgIH0KICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIG5ldyBGb28oKS5mb28oKTsgLy8gUHJpbnRzICJmb28iLgogKiAgICAgICBuZXcgRm9vKCkuYmFyKCk7IC8vIE1pZ2h0IHByaW50IGFuIGFyYml0cmFyeSAobWFuZ2xlZCkgbmFtZSwgImJhciIuCiAqICAgICB9CiAqCiAqIEZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBbTWlycm9yc1VzZWRdIGNvbnN0cnVjdG9yCiAqIHNlZSB0aGUgY29tbWVudHMgZm9yIFtzeW1ib2xzXSwgW3RhcmdldHNdLCBbbWV0YVRhcmdldHNdIGFuZCBbb3ZlcnJpZGVdLgogKgogKiBBbiBpbXBvcnQgb2YgYGRhcnQ6bWlycm9yc2AgbWF5IGhhdmUgbXVsdGlwbGUgW01pcnJvcnNVc2VkXSBhbm5vdGF0aW9ucy4gVGhpcwogKiBpcyBwYXJ0aWN1bGFybHkgaGVscGZ1bCB0byBzcGVjaWZ5IG92ZXJyaWRlcyBmb3Igc3BlY2lmaWMgbGlicmFyaWVzLiBGb3IKICogZXhhbXBsZToKICoKICogICAgIEBNaXJyb3JzVXNlZCh0YXJnZXRzOiAnZm9vLkJhcicsIG92ZXJyaWRlOiAnZm9vJykKICogICAgIEBNaXJyb3JzVXNlZCh0YXJnZXRzOiAnQmFyJykKICogICAgIGltcG9ydCAnZGFydDptaXJyb3JzJzsKICoKICogd2lsbCBlbnN1cmUgdGhhdCB0aGUgdGFyZ2V0IGBCYXJgIGZyb20gdGhlIGN1cnJlbnQgbGlicmFyeSBhbmQgZnJvbSBsaWJyYXJ5CiAqIGBmb29gIGlzIGF2YWlsYWJsZSBmb3IgcmVmbGVjdGlvbi4gU2VlIGFsc28gW292ZXJyaWRlXS4KICovCkBEZXByZWNhdGVkKCJObyBsb25nZXIgaGFzIGFueSBlZmZlY3QuIFdpbGwgYmUgcmVtb3ZlZCBpbiBhIGxhdGVyIHJlbGVhc2UuIikKY2xhc3MgTWlycm9yc1VzZWQgewogIC8vIE5vdGU6IHRoZSBmaWVsZHMgb2YgdGhpcyBjbGFzcyBhcmUgdW50eXBlZC4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgbW9zdAogIC8vIGNvbnZlbmllbnQgd2F5IHRvIHNwZWNpZnkgc3ltYm9scyB0b2RheSBpcyB1c2luZyBhIHNpbmdsZSBzdHJpbmcuIEluCiAgLy8gc29tZSBjYXNlcywgYSBjb25zdCBsaXN0IG9mIGNsYXNzZXMgbWlnaHQgYmUgY29udmVuaWVudC4gU29tZQogIC8vIG1pZ2h0IHByZWZlciB0byB1c2UgYSBjb25zdCBsaXN0IG9mIHN5bWJvbHMuCgogIC8qKgogICAqIFRoZSBsaXN0IG9mIHN0cmluZ3MgcGFzc2VkIHRvIG5ldyBbU3ltYm9sXSwgYW5kIHN5bWJvbHMgdGhhdCBtaWdodCBiZQogICAqIHBhc3NlZCB0byBbTWlycm9yU3lzdGVtLmdldE5hbWVdLgogICAqCiAgICogQ29tYmluZWQgd2l0aCB0aGUgbmFtZXMgb2YgW3RhcmdldHNdLCBbbWV0YVRhcmdldHNdIGFuZCB0aGVpciBtZW1iZXJzLAogICAqIHRoaXMgZm9ybXMgdGhlIGNvbXBsZXRlIGxpc3Qgb2Ygc3RyaW5ncyBwYXNzZWQgdG8gbmV3IFtTeW1ib2xdLCBhbmQKICAgKiBzeW1ib2xzIHRoYXQgbWlnaHQgYmUgcGFzc2VkIHRvIFtNaXJyb3JTeXN0ZW0uZ2V0TmFtZV0gYnkgdGhlIGxpYnJhcnkgdG8KICAgKiB3aGljaCB0aGlzIG1ldGFkYXRhIGFwcGxpZXMuCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIHRleHQgaXMgbm9uLW5vcm1hdGl2ZToKICAgKgogICAqIERhcnQyanMgY3VycmVudGx5IHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgZm9ybWF0cyB0byBzcGVjaWZ5IHN5bWJvbHM6CiAgICoKICAgKiAqIEEgY29uc3RhbnQgW0xpc3RdIG9mIFtTdHJpbmddIGNvbnN0YW50cyByZXByZXNlbnRpbmcgc3ltYm9sIG5hbWVzLAogICAqICAgZS5nLiwgYGNvbnN0IFsnZm9vJywgJ2JhciddYC4KICAgKiAqIEEgc2luZ2xlIFtTdHJpbmddIGNvbnN0YW50IHdob3NlIHZhbHVlIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YKICAgKiAgIHN5bWJvbCBuYW1lcywgZS5nLiwgYCJmb28sIGJhciJgLgogICAqCiAgICogU3BlY2lmeWluZyB0aGUgYHN5bWJvbHNgIGZpZWxkIHR1cm5zIG9mZiB0aGUgZm9sbG93aW5nIHdhcm5pbmdzIGVtaXR0ZWQgYnkKICAgKiBkYXJ0MmpzOgogICAqCiAgICogKiBVc2luZyAiTWlycm9yU3lzdGVtLmdldE5hbWUiIG1heSByZXN1bHQgaW4gbGFyZ2VyIG91dHB1dC4KICAgKiAqIFVzaW5nICJuZXcgU3ltYm9sIiBtYXkgcmVzdWx0IGluIGxhcmdlciBvdXRwdXQuCiAgICoKICAgKiBGb3IgZXhhbXBsZSwgaWYgeW91J3JlIHVzaW5nIFtub1N1Y2hNZXRob2RdIHRvIGludGVyYWN0IHdpdGggYSBkYXRhYmFzZSwKICAgKiBleHRyYWN0IGFsbCB0aGUgcG9zc2libGUgY29sdW1uIG5hbWVzIGFuZCBpbmNsdWRlIHRoZW0gaW4gdGhpcyBsaXN0LgogICAqIFNpbWlsYXJseSwgaWYgeW91J3JlIHVzaW5nIFtub1N1Y2hNZXRob2RdIHRvIGludGVyYWN0IHdpdGggYW5vdGhlcgogICAqIGxhbmd1YWdlIChKYXZhU2NyaXB0LCBmb3IgZXhhbXBsZSkgZXh0cmFjdCBhbGwgdGhlIGlkZW50aWZpZXJzIGZyb20gdGhlCiAgICogQVBJIHlvdSB1c2UgYW5kIGluY2x1ZGUgdGhlbSBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBOb3RlIHRoYXQgc3BlY2lmeWluZyBhIHN5bWJvbCBvbmx5IGVuc3VyZXMgdGhhdCB0aGUgc3ltYm9sIHdpbGwgYmUKICAgKiBhdmFpbGFibGUgdW5kZXIgdGhhdCBuYW1lIGF0IHJ1bnRpbWUuIEl0IGRvZXMgbm90IG1hcmsgdGFyZ2V0cyB3aXRoCiAgICogdGhhdCBuYW1lIGFzIGF2YWlsYWJsZSBmb3IgcmVmbGVjdGlvbi4gU2VlIFt0YXJnZXRzXSBhbmQgW21ldGFUYXJnZXRzXQogICAqIGZvciB0aGF0IHB1cnBvc2UuCiAgICovCiAgZmluYWwgc3ltYm9sczsKCiAgLyoqCiAgICogQSBsaXN0IG9mIHJlZmxlY3RpdmUgdGFyZ2V0cy4KICAgKgogICAqIENvbWJpbmVkIHdpdGggW21ldGFUYXJnZXRzXSwgdGhpcyBwcm92aWRlcyB0aGUgY29tcGxldGUgbGlzdCBvZiByZWZsZWN0aXZlCiAgICogdGFyZ2V0cyB1c2VkIGJ5IHRoZSBsaWJyYXJ5IHRvIHdoaWNoIHRoaXMgbWV0YWRhdGEgYXBwbGllcy4KICAgKgogICAqIFRoZSBmb2xsb3dpbmcgdGV4dCBpcyBub24tbm9ybWF0aXZlOgogICAqCiAgICogRm9yIG5vdywgdGhlcmUgaXMgbm8gZm9ybWFsIGRlc2NyaXB0aW9uIG9mIHdoYXQgYSByZWZsZWN0aXZlIHRhcmdldCBpcy4KICAgKiBJbmZvcm1hbGx5LCBhIHRhcmdldCBpcyBhIGxpYnJhcnksIGEgY2xhc3MsIGEgbWV0aG9kIG9yIGEgZmllbGQuCiAgICoKICAgKiBEYXJ0MmpzIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgZm9sbG93aW5nIGZvcm1hdHMgdG8gc3BlY2lmeSB0YXJnZXRzOgogICAqCiAgICogKiBBIGNvbnN0YW50IFtMaXN0XSBjb250YWluaW5nIFtTdHJpbmddIGNvbnN0YW50cyByZXByZXNlbnRpbmcgKHF1YWxpZmllZCkKICAgKiAgIG5hbWVzIG9mIHRhcmdldHMgYW5kIERhcnQgdHlwZXMuCiAgICogKiBBIHNpbmdsZSBbU3RyaW5nXSBjb25zdGFudCB3aG9zZSB2YWx1ZSBpcyBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mCiAgICogICAocXVhbGlmaWVkKSBuYW1lcy4KICAgKiAqIEEgc2luZ2xlIERhcnQgdHlwZS4KICAgKgogICAqIEEgKHF1YWxpZmllZCkgbmFtZSBpcyByZXNvbHZlZCB0byBhIHRhcmdldCBhcyBmb2xsb3dzOgogICAqCiAgICogMS4gSWYgdGhlIHF1YWxpZmllZCBuYW1lIG1hdGNoZXMgYSBsaWJyYXJ5IG5hbWUsIHRoZSBtYXRjaGluZyBsaWJyYXJ5IGlzCiAgICogICAgdGhlIHRhcmdldC4KICAgKiAyLiBFbHNlLCBmaW5kIHRoZSBsb25nZXN0IHByZWZpeCBvZiB0aGUgbmFtZSBzdWNoIHRoYXQgdGhlIHByZWZpeCBlbmRzCiAgICogICAganVzdCBiZWZvcmUgYSBgLmAgYW5kIGlzIGEgbGlicmFyeSBuYW1lLgogICAqIDMuIFVzZSB0aGF0IGxpYnJhcnkgYXMgY3VycmVudCBzY29wZS4gSWYgbm8gbWF0Y2hpbmcgcHJlZml4IHdhcyBmb3VuZCwgdXNlCiAgICogICAgdGhlIGN1cnJlbnQgbGlicmFyeSwgaS5lLiwgdGhlIGxpYnJhcnkgd2hlcmUgdGhlIFtNaXJyb3JzVXNlZF0KICAgKiAgICBhbm5vdGF0aW9uIHdhcyBwbGFjZWQuCiAgICogNC4gU3BsaXQgdGhlIHJlbWFpbmluZyBzdWZmaXggKHRoZSBlbnRpcmUgbmFtZSBpZiBubyBsaWJyYXJ5IG5hbWUgd2FzCiAgICogICAgZm91bmQgaW4gc3RlcCAzKSBpbnRvIGEgbGlzdCBvZiBbU3RyaW5nXSB1c2luZyBgLmAgYXMgYQogICAqICAgIHNlcGFyYXRvci4KICAgKiA1LiBTZWxlY3QgYWxsIHRhcmdldHMgaW4gdGhlIGN1cnJlbnQgc2NvcGUgd2hvc2UgbmFtZSBtYXRjaGVzIGEgW1N0cmluZ10KICAgKiAgICBmcm9tIHRoZSBsaXN0LgogICAqCiAgICogRm9yIGV4YW1wbGU6CiAgICoKICAgKiAgICAgbGlicmFyeSBteS5saWJyYXJ5Lm9uZTsKICAgKgogICAqICAgICBjbGFzcyBBIHsKICAgKiAgICAgICB2YXIgYUZpZWxkOwogICAqICAgICB9CiAgICoKICAgKiAgICAgbGlicmFyeSBtYWluOwogICAqCiAgICogICAgIEBNaXJyb3JzVXNlZCh0YXJnZXRzOiAibXkubGlicmFyeS5vbmUuQS5hRmllbGQiKQogICAqICAgICBpbXBvcnQgImRhcnQ6bWlycm9ycyI7CiAgICoKICAgKiBUaGUgW01pcnJvcnNVc2VkXSBhbm5vdGF0aW9uIHNwZWNpZmllcyBgQWAgYW5kIGBhRmllbGRgIGZyb20gbGlicmFyeQogICAqIGBteS5saWJyYXJ5Lm9uZWAgYXMgdGFyZ2V0cy4gVGhpcyB3aWxsIG1hcmsgdGhlIGNsYXNzIGBBYCBhcyBhIHJlZmxlY3RpdmUKICAgKiB0YXJnZXQuIFRoZSB0YXJnZXQgc3BlY2lmaWNhdGlvbiBmb3IgYGFGaWVsZGAgaGFzIG5vIGVmZmVjdCwgYXMgdGhlcmUgaXMKICAgKiBubyB0YXJnZXQgaW4gYG15LmxpYnJhcnkub25lYCB3aXRoIHRoYXQgbmFtZS4KICAgKgogICAqIE5vdGUgdGhhdCBldmVyeXRoaW5nIHdpdGhpbiBhIHRhcmdldCBhbHNvIGlzIGF2YWlsYWJsZSBmb3IgcmVmbGVjdGlvbi4KICAgKiBTbywgaWYgYSBsaWJyYXJ5IGlzIHNwZWNpZmllZCBhcyB0YXJnZXQsIGFsbCBjbGFzc2VzIGluIHRoYXQgbGlicmFyeQogICAqIGJlY29tZSB0YXJnZXRzIGZvciByZWZsZWN0aW9uLiBMaWtld2lzZSwgaWYgYSBjbGFzcyBpcyBhIHRhcmdldCwgYWxsCiAgICogaXRzIG1ldGhvZHMgYW5kIGZpZWxkcyBiZWNvbWUgdGFyZ2V0cyBmb3IgcmVmbGVjdGlvbi4gQXMgYSBjb25zZXF1ZW5jZSwKICAgKiBgYUZpZWxkYCBpbiB0aGUgYWJvdmUgZXhhbXBsZSBpcyBhbHNvIGEgcmVmbGVjdGl2ZSB0YXJnZXQuCiAgICoKICAgKi8KICBmaW5hbCB0YXJnZXRzOwoKICAvKioKICAgKiBBIGxpc3Qgb2YgY2xhc3NlcyB0aGF0IHdoZW4gdXNlZCBhcyBtZXRhZGF0YSBpbmRpY2F0ZXMgYSByZWZsZWN0aXZlCiAgICogdGFyZ2V0LiBTZWUgYWxzbyBbdGFyZ2V0c10uCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIHRleHQgaXMgbm9uLW5vcm1hdGl2ZToKICAgKgogICAqIFRoZSBmb3JtYXQgZm9yIHNwZWNpZnlpbmcgdGhlIGxpc3Qgb2YgY2xhc3NlcyBpcyB0aGUgc2FtZSBhcyB1c2VkIGZvcgogICAqIHNwZWNpZnlpbmcgW3RhcmdldHNdLiBIb3dldmVyLCBhcyBhIGxpYnJhcnkgY2Fubm90IGJlIHVzZWQgYXMgYSBtZXRhZGF0YQogICAqIGFubm90YXRpb24gaW4gRGFydCwgYWRkaW5nIGEgbGlicmFyeSB0byB0aGUgbGlzdCBvZiBbbWV0YVRhcmdldHNdIGhhcyBubwogICAqIGVmZmVjdC4gSW4gcGFydGljdWxhciwgYWRkaW5nIGEgbGlicmFyeSB0byBbbWV0YVRhcmdldHNdIGRvZXMgbm90IG1ha2UKICAgKiB0aGUgbGlicmFyeSdzIGNsYXNzZXMgdmFsaWQgbWV0YWRhdGEgYW5ub3RhdGlvbnMgdG8gZW5hYmxlIHJlZmxlY3Rpb24uCiAgICoKICAgKiBJZiBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHNwZWNpZmllZCBpbiBbbWV0YVRhcmdldHNdIGlzIHVzZWQgYXMKICAgKiBtZXRhZGF0YSBhbm5vdGF0aW9uIG9uIGEgbGlicmFyeSwgY2xhc3MsIGZpZWxkIG9yIG1ldGhvZCwgdGhhdCBsaWJyYXJ5LAogICAqIGNsYXNzLCBmaWVsZCBvciAgbWV0aG9kIGlzIGFkZGVkIHRvIHRoZSBzZXQgb2YgdGFyZ2V0cyBmb3IgcmVmbGVjdGlvbi4KICAgKgogICAqIEV4YW1wbGUgdXNhZ2U6CiAgICoKICAgKiAgICAgbGlicmFyeSBleGFtcGxlOwogICAqICAgICBATWlycm9yc1VzZWQobWV0YVRhcmdldHM6ICJleGFtcGxlLlJlZmxlY3RhYmxlIikKICAgKiAgICAgaW1wb3J0ICJkYXJ0Om1pcnJvcnMiOwogICAqCiAgICogICAgIGNsYXNzIFJlZmxlY3RhYmxlIHsKICAgKiAgICAgICBjb25zdCBSZWZsZWN0YWJsZSgpOwogICAqICAgICB9CiAgICoKICAgKiAgICAgY2xhc3MgRm9vIHsKICAgKiAgICAgICBAUmVmbGVjdGFibGUoKQogICAqICAgICAgIHJlZmxlY3RhYmxlTWV0aG9kKCkgeyAuLi4gfQogICAqCiAgICogICAgICAgbm9uUmVmbGVjdGFibGVNZXRob2QoKSB7IC4uLiB9CiAgICogICAgIH0KICAgKgogICAqIEluIHRoZSBhYm92ZSBleGFtcGxlLiBgcmVmbGVjdGFibGVNZXRob2RgIGlzIG1hcmtlZCBhcyByZWZsZWN0YWJsZSBieQogICAqIHVzaW5nIHRoZSBgUmVmbGVjdGFibGVgIGNsYXNzLCB3aGljaCBpbiB0dXJuIGlzIHNwZWNpZmllZCBpbiB0aGUKICAgKiBbbWV0YVRhcmdldHNdIGFubm90YXRpb24uCiAgICoKICAgKiBUaGUgbWV0aG9kIGBub25SZWZsZWN0YWJsZU1ldGhvZGAgbGFja3MgYSBtZXRhZGF0YSBhbm5vdGF0aW9uIGFuZCB0aHVzCiAgICogd2lsbCBub3QgYmUgcmVmbGVjdGFibGUgYXQgcnVudGltZS4KICAgKi8KICBmaW5hbCBtZXRhVGFyZ2V0czsKCiAgLyoqCiAgICogQSBsaXN0IG9mIGxpYnJhcnkgbmFtZXMgb3IgIioiLgogICAqCiAgICogV2hlbiB1c2VkIGFzIG1ldGFkYXRhIG9uIGFuIGltcG9ydCBvZiAiZGFydDptaXJyb3JzIiwgdGhpcyBtZXRhZGF0YSBkb2VzCiAgICogbm90IGFwcGx5IHRvIHRoZSBsaWJyYXJ5IGluIHdoaWNoIHRoZSBhbm5vdGF0aW9uIGlzIHVzZWQsIGJ1dCBpbnN0ZWFkCiAgICogYXBwbGllcyB0byB0aGUgb3RoZXIgbGlicmFyaWVzIChhbGwgbGlicmFyaWVzIGlmICIqIiBpcyB1c2VkKS4KICAgKgogICAqIFRoZSBmb2xsb3dpbmcgdGV4dCBpcyBub24tbm9ybWF0aXZlOgogICAqCiAgICogRGFydDJqcyBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIGZvbGxvd2luZyBmb3JtYXRzIHRvIHNwZWNpZnkgbGlicmFyaWVzOgogICAqCiAgICogKiBBIGNvbnN0YW50IFtMaXN0XSBjb250YWluaW5nIFtTdHJpbmddIGNvbnN0YW50cyByZXByZXNlbnRpbmcgbmFtZXMgb2YKICAgKiAgIGxpYnJhcmllcy4KICAgKiAqIEEgc2luZ2xlIFtTdHJpbmddIGNvbnN0YW50IHdob3NlIHZhbHVlIGlzIGEgY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YKICAgKiAgIGxpYnJhcnkgbmFtZXMuCiAgICoKICAgKiBDb25jZXB0dWFsbHksIGEgW01pcnJvcnNVc2VkXSBhbm5vdGF0aW9uIHdpdGggW292ZXJyaWRlXSBoYXMgdGhlIHNhbWUKICAgKiBlZmZlY3QgYXMgcGxhY2luZyB0aGUgYW5ub3RhdGlvbiBkaXJlY3RseSBvbiB0aGUgaW1wb3J0IG9mIGBkYXJ0Om1pcnJvcnNgCiAgICogaW4gZWFjaCBvZiB0aGUgcmVmZXJlbmNlZCBsaWJyYXJpZXMuIFRodXMsIGlmIHRoZSBsaWJyYXJ5IGhhZCBubwogICAqIFtNaXJyb3JzVXNlZF0gYW5ub3RhdGlvbiBiZWZvcmUsIGl0cyB1bmNvbmRpdGlvbmFsIGltcG9ydCBvZgogICAqIGBkYXJ0Om1pcnJvcnNgIGlzIG92ZXJyaWRkZW4gYnkgYW4gYW5ub3RhdGVkIGltcG9ydC4KICAgKgogICAqIE5vdGUgdGhhdCwgbGlrZSBtdWx0aXBsZSBleHBsaWNpdCBbTWlycm9yc1VzZWRdIGFubm90YXRpb25zLCB1c2luZwogICAqIG92ZXJyaWRlIG9uIGEgbGlicmFyeSB3aXRoIGFuIGV4aXN0aW5nIFtNaXJyb3JzVXNlZF0gYW5ub3RhdGlvbiBpcwogICAqIGFkZGl0aXZlLiBUaGF0IGlzLCB0aGUgb3ZlcmFsbCBzZXQgb2YgcmVmbGVjdGl2ZSB0YXJnZXRzIGlzIHRoZSB1bmlvbgogICAqIG9mIHRoZSByZWZsZWN0aXZlIHRhcmdldHMgdGhhdCBhcmlzZSBmcm9tIHRoZSBvcmlnaW5hbCBhbmQgdGhlCiAgICogb3ZlcnJpZGluZyBbTWlycm9yc1VzZWRdIGFubm90YXRpb25zLgogICAqCiAgICogVGhlIHVzZSBvZiBbb3ZlcnJpZGVdIGlzIG9ubHkgbWVhbmluZ2Z1bCBmb3IgbGlicmFyaWVzIHRoYXQgaGF2ZSBhbgogICAqIGltcG9ydCBvZiBgZGFydDptaXJyb3JzYCB3aXRob3V0IGFubm90YXRpb24gYmVjYXVzZSBvdGhlcndpc2UgaXQgd291bGQKICAgKiB3b3JrIGV4YWN0bHkgdGhlIHNhbWUgd2F5IHdpdGhvdXQgdGhlIFtvdmVycmlkZV0gcGFyYW1ldGVyLgogICAqCiAgICogV2hpbGUgdGhlIGFubm90YXRpb24gd2lsbCBhcHBseSB0byB0aGUgZ2l2ZW4gdGFyZ2V0IGxpYnJhcmllcywgdGhlCiAgICogW3N5bWJvbHNdLCBbdGFyZ2V0c10gYW5kIFttZXRhVGFyZ2V0c10gYXJlIHN0aWxsIGV2YWx1YXRlZCBpbiB0aGUKICAgKiBzY29wZSBvZiB0aGUgYW5ub3RhdGlvbi4gVGh1cywgdG8gc2VsZWN0IGEgdGFyZ2V0IGZyb20gbGlicmFyeSBgZm9vYCwKICAgKiBhIHF1YWxpZmllZCBuYW1lIGhhcyB0byBiZSB1c2VkIG9yLCBpZiB0aGUgdGFyZ2V0IGlzIHZpc2libGUgaW4gdGhlCiAgICogY3VycmVudCBzY29wZSwgaXRzIHR5cGUgbWF5IGJlIHJlZmVyZW5jZWQuCiAgICoKICAgKiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb2RlIG1hcmtzIGFsbCB0YXJnZXRzIGluIHRoZSBsaWJyYXJ5IGBmb29gCiAgICogYXMgcmVmbGVjdGFibGUgdGhhdCBoYXZlIGEgbWV0YWRhdGEgYW5ub3RhdGlvbiB1c2luZyB0aGUgYFJlZmxlY3RhYmxlYAogICAqIGNsYXNzIGZyb20gdGhlIHNhbWUgbGlicmFyeS4KICAgKgogICAqICAgICBATWlycm9yc1VzZWQobWV0YVRhcmdldHM6ICJmb28uUmVmbGVjdGFibGUiLCBvdmVycmlkZTogImZvbyIpCiAgICoKICAgKiBIb3dldmVyLCB0aGUgZm9sbG93aW5nIGNvZGUgd291bGQgcmVxdWlyZSB0aGUgdXNlIG9mIHRoZSBgUmVmbGVjdGFibGVgCiAgICogY2xhc3MgZnJvbSB0aGUgY3VycmVudCBsaWJyYXJ5LCBpbnN0ZWFkLgogICAqCiAgICogICAgIEBNaXJyb3JzVXNlZChtZXRhVGFyZ2V0czogIlJlZmxlY3RhYmxlIiwgb3ZlcnJpZGU6ICJmb28iKQogICAqCiAgICovCiAgZmluYWwgb3ZlcnJpZGU7CgogIC8qKgogICAqIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgW01pcnJvcnNVc2VkLnN5bWJvbHNdLCBbTWlycm9yc1VzZWQudGFyZ2V0c10sCiAgICogW01pcnJvcnNVc2VkLm1ldGFUYXJnZXRzXSBhbmQgW01pcnJvcnNVc2VkLm92ZXJyaWRlXSBmb3IgZG9jdW1lbnRhdGlvbgogICAqIG9mIHRoZSBwYXJhbWV0ZXJzLgogICAqLwogIGNvbnN0IE1pcnJvcnNVc2VkKAogICAgICB7dGhpcy5zeW1ib2xzLCB0aGlzLnRhcmdldHMsIHRoaXMubWV0YVRhcmdldHMsIHRoaXMub3ZlcnJpZGV9KTsKfQqFvQBOTjwBPkYdAxIDPEUuAQQdOgNDQkgDQU5COgM0A0NJPx4DNS5GQEE8NgNBUT5TDQMXA09QSDcDEgQWASEBBEYZA0IDR0Y+RUUEHgZFBU4LBUxPHgYpAQZCBTYG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ZXh0ZW5kcyBFcnJvciB7CiAgZmluYWwgU3RyaW5nIF9tc2c7CiAgX0ludGVybmFsTWlycm9yRXJyb3IodGhpcy5fbXNnKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfbXNnOwp9CgpTdHJpbmcgX24oU3ltYm9sIHN5bWJvbCkgPT4gaW50ZXJuYWwuU3ltYm9sLmdldE5hbWUoc3ltYm9sKTsKClN5bWJvbCBfcyhTdHJpbmcgbmFtZSkgewogIGlmIChuYW1lID09IG51bGwpIHJldHVybiBudWxsOwogIHJldHVybiBuZXcgaW50ZXJuYWwuU3ltYm9sLnVudmFsaWRhdGVkKG5hbWUpOwp9CgpTeW1ib2wgX2NvbXB1dGVRdWFsaWZpZWROYW1lKERlY2xhcmF0aW9uTWlycm9yIG93bmVyLCBTeW1ib2wgc2ltcGxlTmFtZSkgewogIGlmIChvd25lciA9PSBudWxsKSByZXR1cm4gc2ltcGxlTmFtZTsKICByZXR1cm4gX3MoJyR7X24ob3duZXIucXVhbGlmaWVkTmFtZSl9LiR7X24oc2ltcGxlTmFtZSl9Jyk7Cn0KClN0cmluZyBfbWFrZVNpZ25hdHVyZVN0cmluZygKICAgIFR5cGVNaXJyb3IgcmV0dXJuVHlwZSwgTGlzdDxQYXJhbWV0ZXJNaXJyb3I+IHBhcmFtZXRlcnMpIHsKICBTdHJpbmdCdWZmZXIgYnVmID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogIGJ1Zi53cml0ZSgnKCcpOwogIGJvb2wgZm91bmRfb3B0aW9uYWxfcG9zaXRpb25hbCA9IGZhbHNlOwogIGJvb2wgZm91bmRfb3B0aW9uYWxfbmFtZWQgPSBmYWxzZTsKCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgcGFyYW0gPSBwYXJhbWV0ZXJzW2ldOwogICAgaWYgKHBhcmFtLmlzT3B0aW9uYWwgJiYgcGFyYW0uaXNOYW1lZCAmJiAhZm91bmRfb3B0aW9uYWxfbmFtZWQpIHsKICAgICAgYnVmLndyaXRlKCd7Jyk7CiAgICAgIGZvdW5kX29wdGlvbmFsX25hbWVkID0gdHJ1ZTsKICAgIH0KICAgIGlmIChwYXJhbS5pc09wdGlvbmFsICYmICFwYXJhbS5pc05hbWVkICYmICFmb3VuZF9vcHRpb25hbF9wb3NpdGlvbmFsKSB7CiAgICAgIGJ1Zi53cml0ZSgnWycpOwogICAgICBmb3VuZF9vcHRpb25hbF9wb3NpdGlvbmFsID0gdHJ1ZTsKICAgIH0KICAgIGlmIChwYXJhbS5pc05hbWVkKSB7CiAgICAgIGJ1Zi53cml0ZShfbihwYXJhbS5zaW1wbGVOYW1lKSk7CiAgICAgIGJ1Zi53cml0ZSgnOiAnKTsKICAgIH0KICAgIGJ1Zi53cml0ZShfbihwYXJhbS50eXBlLnF1YWxpZmllZE5hbWUpKTsKICAgIGlmIChpIDwgKHBhcmFtZXRlcnMubGVuZ3RoIC0gMSkpIHsKICAgICAgYnVmLndyaXRlKCcsICcpOwogICAgfQogIH0KICBpZiAoZm91bmRfb3B0aW9uYWxfbmFtZWQpIHsKICAgIGJ1Zi53cml0ZSgnfScpOwogIH0KICBpZiAoZm91bmRfb3B0aW9uYWxfcG9zaXRpb25hbCkgewogICAgYnVmLndyaXRlKCddJyk7CiAgfQogIGJ1Zi53cml0ZSgnKSAtPiAnKTsKICBidWYud3JpdGUoX24ocmV0dXJuVHlwZS5xdWFsaWZpZWROYW1lKSk7CiAgcmV0dXJuIGJ1Zi50b1N0cmluZygpOwp9CgpTb3VyY2VMb2NhdGlvbiBfbG9jYXRpb24ocmVmbGVjdGVlKSBuYXRpdmUgIkRlY2xhcmF0aW9uTWlycm9yX2xvY2F0aW9uIjsKCkxpc3Q8ZHluYW1pYz4gX21ldGFkYXRhKHJlZmxlY3RlZSkgbmF0aXZlICdEZWNsYXJhdGlvbk1pcnJvcl9tZXRhZGF0YSc7Cgpib29sIF9zdWJ0eXBlVGVzdChUeXBlIGEsIFR5cGUgYikgbmF0aXZlICdUeXBlTWlycm9yX3N1YnR5cGVUZXN0JzsKCmNsYXNzIF9Mb2NhbE1pcnJvclN5c3RlbSBleHRlbmRzIE1pcnJvclN5c3RlbSB7CiAgZmluYWwgVHlwZU1pcnJvciBkeW5hbWljVHlwZSA9IG5ldyBfU3BlY2lhbFR5cGVNaXJyb3IuXygnZHluYW1pYycpOwogIGZpbmFsIFR5cGVNaXJyb3Igdm9pZFR5cGUgPSBuZXcgX1NwZWNpYWxUeXBlTWlycm9yLl8oJ3ZvaWQnKTsKCiAgdmFyIF9saWJyYXJpZXM7CiAgTWFwPFVyaSwgTGlicmFyeU1pcnJvcj4gZ2V0IGxpYnJhcmllcyB7CiAgICBpZiAoKF9saWJyYXJpZXMgPT0gbnVsbCkgfHwgX2RpcnR5KSB7CiAgICAgIF9saWJyYXJpZXMgPSBuZXcgTWFwPFVyaSwgTGlicmFyeU1pcnJvcj4oKTsKICAgICAgZm9yIChMaWJyYXJ5TWlycm9yIGxpYiBpbiBfY29tcHV0ZUxpYnJhcmllcygpKSB7CiAgICAgICAgX2xpYnJhcmllc1tsaWIudXJpXSA9IGxpYjsKICAgICAgfQogICAgICBfbGlicmFyaWVzID0gbmV3IFVubW9kaWZpYWJsZU1hcFZpZXc8VXJpLCBMaWJyYXJ5TWlycm9yPihfbGlicmFyaWVzKTsKICAgICAgX2RpcnR5ID0gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gX2xpYnJhcmllczsKICB9CgogIHN0YXRpYyBMaXN0PGR5bmFtaWM+IF9jb21wdXRlTGlicmFyaWVzKCkgbmF0aXZlICJNaXJyb3JTeXN0ZW1fbGlicmFyaWVzIjsKCiAgSXNvbGF0ZU1pcnJvciBfaXNvbGF0ZTsKICBJc29sYXRlTWlycm9yIGdldCBpc29sYXRlIHsKICAgIGlmIChfaXNvbGF0ZSA9PSBudWxsKSB7CiAgICAgIF9pc29sYXRlID0gX2NvbXB1dGVJc29sYXRlKCk7CiAgICB9CiAgICByZXR1cm4gX2lzb2xhdGU7CiAgfQoKICBzdGF0aWMgSXNvbGF0ZU1pcnJvciBfY29tcHV0ZUlzb2xhdGUoKSBuYXRpdmUgIk1pcnJvclN5c3RlbV9pc29sYXRlIjsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIk1pcnJvclN5c3RlbSBmb3IgaXNvbGF0ZSAnJHtpc29sYXRlLmRlYnVnTmFtZX0nIjsKfQoKY2xhc3MgX1NvdXJjZUxvY2F0aW9uIGltcGxlbWVudHMgU291cmNlTG9jYXRpb24gewogIF9Tb3VyY2VMb2NhdGlvbi5fKHVyaVN0cmluZywgdGhpcy5saW5lLCB0aGlzLmNvbHVtbikKICAgICAgOiB0aGlzLnNvdXJjZVVyaSA9IFVyaS5wYXJzZSh1cmlTdHJpbmcpOwoKICAvLyBMaW5lIGFuZCBjb2x1bW4gcG9zaXRpb25zIGFyZSAxLW9yaWdpbiwgb3IgMCBpZiB1bmtub3duLgogIGZpbmFsIGludCBsaW5lOwogIGZpbmFsIGludCBjb2x1bW47CgogIGZpbmFsIFVyaSBzb3VyY2VVcmk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiBjb2x1bW4gPT0gMCA/ICIkc291cmNlVXJpOiRsaW5lIiA6ICIkc291cmNlVXJpOiRsaW5lOiRjb2x1bW4iOwogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX0xvY2FsTWlycm9yIGltcGxlbWVudHMgTWlycm9yIHt9CgpjbGFzcyBfTG9jYWxJc29sYXRlTWlycm9yIGV4dGVuZHMgX0xvY2FsTWlycm9yIGltcGxlbWVudHMgSXNvbGF0ZU1pcnJvciB7CiAgZmluYWwgU3RyaW5nIGRlYnVnTmFtZTsKICBmaW5hbCBMaWJyYXJ5TWlycm9yIHJvb3RMaWJyYXJ5OwoKICBfTG9jYWxJc29sYXRlTWlycm9yLl8odGhpcy5kZWJ1Z05hbWUsIHRoaXMucm9vdExpYnJhcnkpOwoKICBib29sIGdldCBpc0N1cnJlbnQgPT4gdHJ1ZTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIklzb2xhdGVNaXJyb3Igb24gJyRkZWJ1Z05hbWUnIjsKCiAgRnV0dXJlPExpYnJhcnlNaXJyb3I+IGxvYWRVcmkoVXJpIHVyaSkgYXN5bmMgewogICAgdmFyIHJlc3VsdCA9IF9sb2FkVXJpKHVyaS50b1N0cmluZygpKTsKICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewogICAgICAvLyBDZW5zb3JlZCBsaWJyYXJ5LgogICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJDYW5ub3QgbG9hZCAkdXJpIik7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIExpYnJhcnlNaXJyb3IgX2xvYWRVcmkoU3RyaW5nIHVyaSkgbmF0aXZlICJJc29sYXRlTWlycm9yX2xvYWRVcmkiOwp9CgpjbGFzcyBfU3ludGhldGljQWNjZXNzb3IgaW1wbGVtZW50cyBNZXRob2RNaXJyb3IgewogIGZpbmFsIERlY2xhcmF0aW9uTWlycm9yIG93bmVyOwogIGZpbmFsIFN5bWJvbCBzaW1wbGVOYW1lOwogIGZpbmFsIGJvb2wgaXNHZXR0ZXI7CiAgZmluYWwgYm9vbCBpc1N0YXRpYzsKICBmaW5hbCBib29sIGlzVG9wTGV2ZWw7CiAgZmluYWwgX3RhcmdldDsKCiAgX1N5bnRoZXRpY0FjY2Vzc29yKHRoaXMub3duZXIsIHRoaXMuc2ltcGxlTmFtZSwgdGhpcy5pc0dldHRlciwgdGhpcy5pc1N0YXRpYywKICAgICAgdGhpcy5pc1RvcExldmVsLCB0aGlzLl90YXJnZXQpOwoKICBib29sIGdldCBpc1N5bnRoZXRpYyA9PiB0cnVlOwogIGJvb2wgZ2V0IGlzUmVndWxhck1ldGhvZCA9PiBmYWxzZTsKICBib29sIGdldCBpc09wZXJhdG9yID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzQ29uc3RydWN0b3IgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNDb25zdENvbnN0cnVjdG9yID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzRmFjdG9yeUNvbnN0cnVjdG9yID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzRXh0ZXJuYWwgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNSZWRpcmVjdGluZ0NvbnN0cnVjdG9yID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzQWJzdHJhY3QgPT4gZmFsc2U7CgogIGJvb2wgZ2V0IGlzU2V0dGVyID0+ICFpc0dldHRlcjsKICBib29sIGdldCBpc1ByaXZhdGUgPT4gX24oc2ltcGxlTmFtZSkuc3RhcnRzV2l0aCgnXycpOwoKICBTeW1ib2wgZ2V0IHF1YWxpZmllZE5hbWUgPT4gX2NvbXB1dGVRdWFsaWZpZWROYW1lKG93bmVyLCBzaW1wbGVOYW1lKTsKICBTeW1ib2wgZ2V0IGNvbnN0cnVjdG9yTmFtZSA9PiBTeW1ib2wuZW1wdHk7CgogIFR5cGVNaXJyb3IgZ2V0IHJldHVyblR5cGUgPT4gX3RhcmdldC50eXBlOwogIExpc3Q8UGFyYW1ldGVyTWlycm9yPiBnZXQgcGFyYW1ldGVycyB7CiAgICBpZiAoaXNHZXR0ZXIpIHJldHVybiBjb25zdCA8UGFyYW1ldGVyTWlycm9yPltdOwogICAgcmV0dXJuIG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxQYXJhbWV0ZXJNaXJyb3I+KAogICAgICAgIDxQYXJhbWV0ZXJNaXJyb3I+W25ldyBfU3ludGhldGljU2V0dGVyUGFyYW1ldGVyKHRoaXMsIHRoaXMuX3RhcmdldCldKTsKICB9CgogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbiA9PiBudWxsOwogIExpc3Q8SW5zdGFuY2VNaXJyb3I+IGdldCBtZXRhZGF0YSA9PiBjb25zdCA8SW5zdGFuY2VNaXJyb3I+W107CiAgU3RyaW5nIGdldCBzb3VyY2UgPT4gbnVsbDsKfQoKY2xhc3MgX1N5bnRoZXRpY1NldHRlclBhcmFtZXRlciBpbXBsZW1lbnRzIFBhcmFtZXRlck1pcnJvciB7CiAgZmluYWwgRGVjbGFyYXRpb25NaXJyb3Igb3duZXI7CiAgZmluYWwgVmFyaWFibGVNaXJyb3IgX3RhcmdldDsKCiAgX1N5bnRoZXRpY1NldHRlclBhcmFtZXRlcih0aGlzLm93bmVyLCB0aGlzLl90YXJnZXQpOwoKICBTeW1ib2wgZ2V0IHNpbXBsZU5hbWUgPT4gX3RhcmdldC5zaW1wbGVOYW1lOwogIFN5bWJvbCBnZXQgcXVhbGlmaWVkTmFtZSA9PiBfY29tcHV0ZVF1YWxpZmllZE5hbWUob3duZXIsIHNpbXBsZU5hbWUpOwogIFR5cGVNaXJyb3IgZ2V0IHR5cGUgPT4gX3RhcmdldC50eXBlOwoKICBib29sIGdldCBpc09wdGlvbmFsID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzTmFtZWQgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNTdGF0aWMgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiBmYWxzZTsKICBib29sIGdldCBpc0NvbnN0ID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzRmluYWwgPT4gdHJ1ZTsKICBib29sIGdldCBpc1ByaXZhdGUgPT4gZmFsc2U7CiAgYm9vbCBnZXQgaGFzRGVmYXVsdFZhbHVlID0+IGZhbHNlOwogIEluc3RhbmNlTWlycm9yIGdldCBkZWZhdWx0VmFsdWUgPT4gbnVsbDsKICBTb3VyY2VMb2NhdGlvbiBnZXQgbG9jYXRpb24gPT4gbnVsbDsKICBMaXN0PEluc3RhbmNlTWlycm9yPiBnZXQgbWV0YWRhdGEgPT4gY29uc3QgPEluc3RhbmNlTWlycm9yPltdOwp9CgphYnN0cmFjdCBjbGFzcyBfTG9jYWxPYmplY3RNaXJyb3IgZXh0ZW5kcyBfTG9jYWxNaXJyb3IgaW1wbGVtZW50cyBPYmplY3RNaXJyb3IgewogIF9pbnZva2UocmVmbGVjdGVlLCBmdW5jdGlvbk5hbWUsIGFyZ3VtZW50cywgYXJndW1lbnROYW1lcyk7CiAgX2ludm9rZUdldHRlcihyZWZsZWN0ZWUsIGdldHRlck5hbWUpOwogIF9pbnZva2VTZXR0ZXIocmVmbGVjdGVlLCBzZXR0ZXJOYW1lLCB2YWx1ZSk7CgogIGZpbmFsIF9yZWZsZWN0ZWU7IC8vIE1heSBiZSBhIE1pcnJvclJlZmVyZW5jZSBvciBhbiBvcmRpbmFyeSBvYmplY3QuCgogIF9Mb2NhbE9iamVjdE1pcnJvci5fKHRoaXMuX3JlZmxlY3RlZSk7CgogIEluc3RhbmNlTWlycm9yIGludm9rZShTeW1ib2wgbWVtYmVyTmFtZSwgTGlzdCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBbTWFwPFN5bWJvbCwgZHluYW1pYz4gbmFtZWRBcmd1bWVudHNdKSB7CiAgICBpbnQgbnVtUG9zaXRpb25hbEFyZ3VtZW50cyA9IHBvc2l0aW9uYWxBcmd1bWVudHMubGVuZ3RoOwogICAgaW50IG51bU5hbWVkQXJndW1lbnRzID0gbmFtZWRBcmd1bWVudHMgIT0gbnVsbCA/IG5hbWVkQXJndW1lbnRzLmxlbmd0aCA6IDA7CiAgICBpbnQgbnVtQXJndW1lbnRzID0gbnVtUG9zaXRpb25hbEFyZ3VtZW50cyArIG51bU5hbWVkQXJndW1lbnRzOwogICAgTGlzdCBhcmd1bWVudHMgPSBuZXcgTGlzdChudW1Bcmd1bWVudHMpOwogICAgYXJndW1lbnRzLnNldFJhbmdlKDAsIG51bVBvc2l0aW9uYWxBcmd1bWVudHMsIHBvc2l0aW9uYWxBcmd1bWVudHMpOwogICAgTGlzdCBuYW1lcyA9IG5ldyBMaXN0KG51bU5hbWVkQXJndW1lbnRzKTsKICAgIGludCBhcmd1bWVudEluZGV4ID0gbnVtUG9zaXRpb25hbEFyZ3VtZW50czsKICAgIGludCBuYW1lSW5kZXggPSAwOwogICAgaWYgKG51bU5hbWVkQXJndW1lbnRzID4gMCkgewogICAgICBuYW1lZEFyZ3VtZW50cy5mb3JFYWNoKChuYW1lLCB2YWx1ZSkgewogICAgICAgIGFyZ3VtZW50c1thcmd1bWVudEluZGV4KytdID0gdmFsdWU7CiAgICAgICAgbmFtZXNbbmFtZUluZGV4KytdID0gX24obmFtZSk7CiAgICAgIH0pOwogICAgfQoKICAgIHJldHVybiByZWZsZWN0KHRoaXMuX2ludm9rZShfcmVmbGVjdGVlLCBfbihtZW1iZXJOYW1lKSwgYXJndW1lbnRzLCBuYW1lcykpOwogIH0KCiAgSW5zdGFuY2VNaXJyb3IgZ2V0RmllbGQoU3ltYm9sIG1lbWJlck5hbWUpIHsKICAgIHJldHVybiByZWZsZWN0KHRoaXMuX2ludm9rZUdldHRlcihfcmVmbGVjdGVlLCBfbihtZW1iZXJOYW1lKSkpOwogIH0KCiAgSW5zdGFuY2VNaXJyb3Igc2V0RmllbGQoU3ltYm9sIG1lbWJlck5hbWUsIE9iamVjdCB2YWx1ZSkgewogICAgdGhpcy5faW52b2tlU2V0dGVyKF9yZWZsZWN0ZWUsIF9uKG1lbWJlck5hbWUpLCB2YWx1ZSk7CiAgICByZXR1cm4gcmVmbGVjdCh2YWx1ZSk7CiAgfQoKICBkZWxlZ2F0ZShJbnZvY2F0aW9uIGludm9jYXRpb24pIHsKICAgIGlmIChpbnZvY2F0aW9uLmlzTWV0aG9kKSB7CiAgICAgIHJldHVybiB0aGlzCiAgICAgICAgICAuaW52b2tlKGludm9jYXRpb24ubWVtYmVyTmFtZSwgaW52b2NhdGlvbi5wb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICAgICAgICAgIGludm9jYXRpb24ubmFtZWRBcmd1bWVudHMpCiAgICAgICAgICAucmVmbGVjdGVlOwogICAgfQogICAgaWYgKGludm9jYXRpb24uaXNHZXR0ZXIpIHsKICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGQoaW52b2NhdGlvbi5tZW1iZXJOYW1lKS5yZWZsZWN0ZWU7CiAgICB9CiAgICBpZiAoaW52b2NhdGlvbi5pc1NldHRlcikgewogICAgICB2YXIgdW53cmFwcGVkID0gX24oaW52b2NhdGlvbi5tZW1iZXJOYW1lKTsKICAgICAgdmFyIHdpdGhvdXRFcXVhbCA9IF9zKHVud3JhcHBlZC5zdWJzdHJpbmcoMCwgdW53cmFwcGVkLmxlbmd0aCAtIDEpKTsKICAgICAgdmFyIGFyZyA9IGludm9jYXRpb24ucG9zaXRpb25hbEFyZ3VtZW50c1swXTsKICAgICAgdGhpcy5zZXRGaWVsZCh3aXRob3V0RXF1YWwsIGFyZykucmVmbGVjdGVlOwogICAgICByZXR1cm4gYXJnOwogICAgfQogICAgdGhyb3cgIlVOUkVBQ0hBQkxFIjsKICB9Cn0KCmNsYXNzIF9Mb2NhbEluc3RhbmNlTWlycm9yIGV4dGVuZHMgX0xvY2FsT2JqZWN0TWlycm9yCiAgICBpbXBsZW1lbnRzIEluc3RhbmNlTWlycm9yIHsKICBfTG9jYWxJbnN0YW5jZU1pcnJvci5fKHJlZmxlY3RlZSkgOiBzdXBlci5fKHJlZmxlY3RlZSk7CgogIENsYXNzTWlycm9yIF90eXBlOwogIENsYXNzTWlycm9yIGdldCB0eXBlIHsKICAgIGlmIChfdHlwZSA9PSBudWxsKSB7CiAgICAgIC8vIE5vdGUgaXQgbm90IHNhZmUgdG8gdXNlIHJlZmxlY3RlZS5ydW50aW1lVHlwZSBiZWNhdXNlIHJ1bnRpbWVUeXBlIG1heQogICAgICAvLyBiZSBvdmVycmlkZGVuLgogICAgICBfdHlwZSA9IHJlZmxlY3RUeXBlKF9jb21wdXRlVHlwZShyZWZsZWN0ZWUpKTsKICAgIH0KICAgIHJldHVybiBfdHlwZTsKICB9CgogIC8vIExvY2FsSW5zdGFuY2VNaXJyb3JzIGFsd2F5cyByZWZsZWN0IGxvY2FsIGluc3RhbmNlcwogIGJvb2wgZ2V0IGhhc1JlZmxlY3RlZSA9PiB0cnVlOwoKICBnZXQgcmVmbGVjdGVlID0+IF9yZWZsZWN0ZWU7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICdJbnN0YW5jZU1pcnJvciBvbiAke0Vycm9yLnNhZmVUb1N0cmluZyhfcmVmbGVjdGVlKX0nOwoKICBib29sIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgX0xvY2FsSW5zdGFuY2VNaXJyb3IgJiYKICAgICAgICBpZGVudGljYWwoX3JlZmxlY3RlZSwgb3RoZXIuX3JlZmxlY3RlZSk7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIC8vIEF2b2lkIGhhc2ggY29sbGlzaW9ucyB3aXRoIHRoZSByZWZsZWN0ZWUuIFRoaXMgY29uc3RhbnQgaXMgaW4gU21pIHJhbmdlCiAgICAvLyBhbmQgaGFwcGVucyB0byBiZSB0aGUgaW5uZXIgcGFkZGluZyBmcm9tIFJGQyAyMTA0LgogICAgcmV0dXJuIGlkZW50aXR5SGFzaENvZGUoX3JlZmxlY3RlZSkgXiAweDM2MzYzNjM2OwogIH0KCiAgSW5zdGFuY2VNaXJyb3IgZ2V0RmllbGQoU3ltYm9sIG1lbWJlck5hbWUpIHsKICAgIHJldHVybiByZWZsZWN0KF9pbnZva2VHZXR0ZXIoX3JlZmxlY3RlZSwgX24obWVtYmVyTmFtZSkpKTsKICB9CgogIEluc3RhbmNlTWlycm9yIHNldEZpZWxkKFN5bWJvbCBtZW1iZXJOYW1lLCBhcmcpIHsKICAgIF9pbnZva2VTZXR0ZXIoX3JlZmxlY3RlZSwgX24obWVtYmVyTmFtZSksIGFyZyk7CiAgICByZXR1cm4gcmVmbGVjdChhcmcpOwogIH0KCiAgLy8gT3ZlcnJpZGUgdG8gaW5jbHVkZSB0aGUgcmVjZWl2ZXIgaW4gdGhlIGFyZ3VtZW50cy4KICBJbnN0YW5jZU1pcnJvciBpbnZva2UoU3ltYm9sIG1lbWJlck5hbWUsIExpc3QgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgW01hcDxTeW1ib2wsIGR5bmFtaWM+IG5hbWVkQXJndW1lbnRzXSkgewogICAgaW50IG51bVBvc2l0aW9uYWxBcmd1bWVudHMgPSBwb3NpdGlvbmFsQXJndW1lbnRzLmxlbmd0aCArIDE7IC8vIFJlY2VpdmVyLgogICAgaW50IG51bU5hbWVkQXJndW1lbnRzID0gbmFtZWRBcmd1bWVudHMgIT0gbnVsbCA/IG5hbWVkQXJndW1lbnRzLmxlbmd0aCA6IDA7CiAgICBpbnQgbnVtQXJndW1lbnRzID0gbnVtUG9zaXRpb25hbEFyZ3VtZW50cyArIG51bU5hbWVkQXJndW1lbnRzOwogICAgTGlzdCBhcmd1bWVudHMgPSBuZXcgTGlzdChudW1Bcmd1bWVudHMpOwogICAgYXJndW1lbnRzWzBdID0gX3JlZmxlY3RlZTsgLy8gUmVjZWl2ZXIuCiAgICBhcmd1bWVudHMuc2V0UmFuZ2UoMSwgbnVtUG9zaXRpb25hbEFyZ3VtZW50cywgcG9zaXRpb25hbEFyZ3VtZW50cyk7CiAgICBMaXN0IG5hbWVzID0gbmV3IExpc3QobnVtTmFtZWRBcmd1bWVudHMpOwogICAgaW50IGFyZ3VtZW50SW5kZXggPSBudW1Qb3NpdGlvbmFsQXJndW1lbnRzOwogICAgaW50IG5hbWVJbmRleCA9IDA7CiAgICBpZiAobnVtTmFtZWRBcmd1bWVudHMgPiAwKSB7CiAgICAgIG5hbWVkQXJndW1lbnRzLmZvckVhY2goKG5hbWUsIHZhbHVlKSB7CiAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50SW5kZXgrK10gPSB2YWx1ZTsKICAgICAgICBuYW1lc1tuYW1lSW5kZXgrK10gPSBfbihuYW1lKTsKICAgICAgfSk7CiAgICB9CgogICAgcmV0dXJuIHJlZmxlY3QodGhpcy5faW52b2tlKF9yZWZsZWN0ZWUsIF9uKG1lbWJlck5hbWUpLCBhcmd1bWVudHMsIG5hbWVzKSk7CiAgfQoKICBfaW52b2tlKHJlZmxlY3RlZSwgZnVuY3Rpb25OYW1lLCBhcmd1bWVudHMsIGFyZ3VtZW50TmFtZXMpCiAgICAgIG5hdGl2ZSAnSW5zdGFuY2VNaXJyb3JfaW52b2tlJzsKCiAgX2ludm9rZUdldHRlcihyZWZsZWN0ZWUsIGdldHRlck5hbWUpIG5hdGl2ZSAnSW5zdGFuY2VNaXJyb3JfaW52b2tlR2V0dGVyJzsKCiAgX2ludm9rZVNldHRlcihyZWZsZWN0ZWUsIHNldHRlck5hbWUsIHZhbHVlKQogICAgICBuYXRpdmUgJ0luc3RhbmNlTWlycm9yX2ludm9rZVNldHRlcic7CgogIHN0YXRpYyBfY29tcHV0ZVR5cGUocmVmbGVjdGVlKSBuYXRpdmUgJ0luc3RhbmNlTWlycm9yX2NvbXB1dGVUeXBlJzsKfQoKY2xhc3MgX0xvY2FsQ2xvc3VyZU1pcnJvciBleHRlbmRzIF9Mb2NhbEluc3RhbmNlTWlycm9yCiAgICBpbXBsZW1lbnRzIENsb3N1cmVNaXJyb3IgewogIF9Mb2NhbENsb3N1cmVNaXJyb3IuXyhyZWZsZWN0ZWUpIDogc3VwZXIuXyhyZWZsZWN0ZWUpOwoKICBNZXRob2RNaXJyb3IgX2Z1bmN0aW9uOwogIE1ldGhvZE1pcnJvciBnZXQgZnVuY3Rpb24gewogICAgaWYgKF9mdW5jdGlvbiA9PSBudWxsKSB7CiAgICAgIF9mdW5jdGlvbiA9IF9jb21wdXRlRnVuY3Rpb24ocmVmbGVjdGVlKTsKICAgIH0KICAgIHJldHVybiBfZnVuY3Rpb247CiAgfQoKICBJbnN0YW5jZU1pcnJvciBhcHBseShMaXN0PE9iamVjdD4gcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgW01hcDxTeW1ib2wsIE9iamVjdD4gbmFtZWRBcmd1bWVudHNdKSB7CiAgICByZXR1cm4gdGhpcy5pbnZva2UoI2NhbGwsIHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzKTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJDbG9zdXJlTWlycm9yIG9uICcke0Vycm9yLnNhZmVUb1N0cmluZyhfcmVmbGVjdGVlKX0nIjsKCiAgc3RhdGljIF9jb21wdXRlRnVuY3Rpb24ocmVmbGVjdGVlKSBuYXRpdmUgJ0Nsb3N1cmVNaXJyb3JfZnVuY3Rpb24nOwp9CgphYnN0cmFjdCBjbGFzcyBfTG9jYWxUeXBlTWlycm9yIHsKICBUeXBlIGdldCBfcmVmbGVjdGVkVHlwZTsKfQoKY2xhc3MgX0xvY2FsQ2xhc3NNaXJyb3IgZXh0ZW5kcyBfTG9jYWxPYmplY3RNaXJyb3IKICAgIGltcGxlbWVudHMgQ2xhc3NNaXJyb3IsIF9Mb2NhbFR5cGVNaXJyb3IgewogIGZpbmFsIFR5cGUgX3JlZmxlY3RlZFR5cGU7CiAgU3ltYm9sIF9zaW1wbGVOYW1lOwogIERlY2xhcmF0aW9uTWlycm9yIF9vd25lcjsKICBmaW5hbCBib29sIGlzQWJzdHJhY3Q7CiAgZmluYWwgYm9vbCBfaXNHZW5lcmljOwoKICAvLyBTaW5jZSBEYXJ0IDIsIG1peGlucyBhcmUgZXJhc2VkIGJ5IGtlcm5lbCB0cmFuc2Zvcm1hdGlvbi4KICAvLyBSZXN1bHRpbmcgY2xhc3NlcyBoYXZlIHRoaXMgZmxhZyBzZXQsIGFuZCBtaXhlZC1pbiB0eXBlIGlzIHB1bGxlZCBpbnRvCiAgLy8gdGhlIGVuZCBvZiBpbnRlcmZhY2VzIGxpc3QuCiAgZmluYWwgYm9vbCBfaXNUcmFuc2Zvcm1lZE1peGluQXBwbGljYXRpb247CgogIGZpbmFsIGJvb2wgX2lzR2VuZXJpY0RlY2xhcmF0aW9uOwogIGZpbmFsIGJvb2wgaXNFbnVtOwogIFR5cGUgX2luc3RhbnRpYXRvcjsKCiAgX0xvY2FsQ2xhc3NNaXJyb3IuXygKICAgICAgcmVmbGVjdGVlLAogICAgICByZWZsZWN0ZWRUeXBlLAogICAgICBTdHJpbmcgc2ltcGxlTmFtZSwKICAgICAgdGhpcy5fb3duZXIsCiAgICAgIHRoaXMuaXNBYnN0cmFjdCwKICAgICAgdGhpcy5faXNHZW5lcmljLAogICAgICB0aGlzLl9pc1RyYW5zZm9ybWVkTWl4aW5BcHBsaWNhdGlvbiwKICAgICAgdGhpcy5faXNHZW5lcmljRGVjbGFyYXRpb24sCiAgICAgIHRoaXMuaXNFbnVtKQogICAgICA6IHRoaXMuX3NpbXBsZU5hbWUgPSBfcyhzaW1wbGVOYW1lKSwKICAgICAgICB0aGlzLl9yZWZsZWN0ZWRUeXBlID0gcmVmbGVjdGVkVHlwZSwKICAgICAgICB0aGlzLl9pbnN0YW50aWF0b3IgPSByZWZsZWN0ZWRUeXBlLAogICAgICAgIHN1cGVyLl8ocmVmbGVjdGVlKTsKCiAgYm9vbCBnZXQgaGFzUmVmbGVjdGVkVHlwZSA9PiAhX2lzR2VuZXJpY0RlY2xhcmF0aW9uOwogIFR5cGUgZ2V0IHJlZmxlY3RlZFR5cGUgewogICAgaWYgKCFoYXNSZWZsZWN0ZWRUeXBlKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIkRlY2xhcmF0aW9ucyBvZiBnZW5lcmljcyBoYXZlIG5vIHJlZmxlY3RlZCB0eXBlIik7CiAgICB9CiAgICByZXR1cm4gX3JlZmxlY3RlZFR5cGU7CiAgfQoKICBTeW1ib2wgZ2V0IHNpbXBsZU5hbWUgewogICAgLy8gQWxsIGJ1dCBhbm9ueW1vdXMgbWl4aW4gYXBwbGljYXRpb25zIGhhdmUgdGhlaXIgbmFtZSBzZXQgYXQgY29uc3RydWN0aW9uLgogICAgaWYgKF9zaW1wbGVOYW1lID09IG51bGwpIHsKICAgICAgX3NpbXBsZU5hbWUgPSB0aGlzLl9taXhpbkFwcGxpY2F0aW9uTmFtZTsKICAgIH0KICAgIHJldHVybiBfc2ltcGxlTmFtZTsKICB9CgogIFN5bWJvbCBfcXVhbGlmaWVkTmFtZTsKICBTeW1ib2wgZ2V0IHF1YWxpZmllZE5hbWUgewogICAgaWYgKF9xdWFsaWZpZWROYW1lID09IG51bGwpIHsKICAgICAgX3F1YWxpZmllZE5hbWUgPSBfY29tcHV0ZVF1YWxpZmllZE5hbWUob3duZXIsIHNpbXBsZU5hbWUpOwogICAgfQogICAgcmV0dXJuIF9xdWFsaWZpZWROYW1lOwogIH0KCiAgRGVjbGFyYXRpb25NaXJyb3IgZ2V0IG93bmVyIHsKICAgIGlmIChfb3duZXIgPT0gbnVsbCkgewogICAgICB2YXIgdXJpID0gX0xvY2FsQ2xhc3NNaXJyb3IuX2xpYnJhcnlVcmkoX3JlZmxlY3RlZSk7CiAgICAgIF9vd25lciA9IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS5saWJyYXJpZXNbVXJpLnBhcnNlKHVyaSldOwogICAgfQogICAgcmV0dXJuIF9vd25lcjsKICB9CgogIGJvb2wgZ2V0IGlzUHJpdmF0ZSA9PiBfbihzaW1wbGVOYW1lKS5zdGFydHNXaXRoKCdfJyk7CgogIGJvb2wgZ2V0IGlzVG9wTGV2ZWwgPT4gdHJ1ZTsKCiAgU291cmNlTG9jYXRpb24gZ2V0IGxvY2F0aW9uIHsKICAgIHJldHVybiBfbG9jYXRpb24oX3JlZmxlY3RlZSk7CiAgfQoKICBfTG9jYWxDbGFzc01pcnJvciBfdHJ1ZVN1cGVyY2xhc3NGaWVsZDsKICBfTG9jYWxDbGFzc01pcnJvciBnZXQgX3RydWVTdXBlcmNsYXNzIHsKICAgIGlmIChfdHJ1ZVN1cGVyY2xhc3NGaWVsZCA9PSBudWxsKSB7CiAgICAgIFR5cGUgc3VwZXJ0eXBlID0gaXNPcmlnaW5hbERlY2xhcmF0aW9uCiAgICAgICAgICA/IF9zdXBlcnR5cGUoX3JlZmxlY3RlZFR5cGUpCiAgICAgICAgICA6IF9zdXBlcnR5cGVJbnN0YW50aWF0ZWQoX3JlZmxlY3RlZFR5cGUpOwogICAgICBpZiAoc3VwZXJ0eXBlID09IG51bGwpIHsKICAgICAgICAvLyBPYmplY3QgaGFzIG5vIHN1cGVyY2xhc3MuCiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgX3RydWVTdXBlcmNsYXNzRmllbGQgPSByZWZsZWN0VHlwZShzdXBlcnR5cGUpOwogICAgICBfdHJ1ZVN1cGVyY2xhc3NGaWVsZC5faW5zdGFudGlhdG9yID0gX2luc3RhbnRpYXRvcjsKICAgIH0KICAgIHJldHVybiBfdHJ1ZVN1cGVyY2xhc3NGaWVsZDsKICB9CgogIENsYXNzTWlycm9yIGdldCBzdXBlcmNsYXNzIHsKICAgIHJldHVybiBfdHJ1ZVN1cGVyY2xhc3M7CiAgfQoKICB2YXIgX3N1cGVyaW50ZXJmYWNlczsKICBMaXN0PENsYXNzTWlycm9yPiBnZXQgc3VwZXJpbnRlcmZhY2VzIHsKICAgIGlmIChfc3VwZXJpbnRlcmZhY2VzID09IG51bGwpIHsKICAgICAgdmFyIGludGVyZmFjZVR5cGVzID0gaXNPcmlnaW5hbERlY2xhcmF0aW9uCiAgICAgICAgICA/IF9uYXRpdmVJbnRlcmZhY2VzKF9yZWZsZWN0ZWRUeXBlKQogICAgICAgICAgOiBfbmF0aXZlSW50ZXJmYWNlc0luc3RhbnRpYXRlZChfcmVmbGVjdGVkVHlwZSk7CiAgICAgIGlmIChfaXNUcmFuc2Zvcm1lZE1peGluQXBwbGljYXRpb24pIHsKICAgICAgICBpbnRlcmZhY2VUeXBlcyA9IGludGVyZmFjZVR5cGVzLnN1Ymxpc3QoMCwgaW50ZXJmYWNlVHlwZXMubGVuZ3RoIC0gMSk7CiAgICAgIH0KICAgICAgdmFyIGludGVyZmFjZU1pcnJvcnMgPSBuZXcgTGlzdDxDbGFzc01pcnJvcj4oKTsKICAgICAgZm9yICh2YXIgaW50ZXJmYWNlVHlwZSBpbiBpbnRlcmZhY2VUeXBlcykgewogICAgICAgIGludGVyZmFjZU1pcnJvcnMuYWRkKHJlZmxlY3RUeXBlKGludGVyZmFjZVR5cGUpKTsKICAgICAgfQogICAgICBfc3VwZXJpbnRlcmZhY2VzID0KICAgICAgICAgIG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxDbGFzc01pcnJvcj4oaW50ZXJmYWNlTWlycm9ycyk7CiAgICB9CiAgICByZXR1cm4gX3N1cGVyaW50ZXJmYWNlczsKICB9CgogIGdldCBfbWl4aW5BcHBsaWNhdGlvbk5hbWUgewogICAgdmFyIG1peGlucyA9IG5ldyBMaXN0PENsYXNzTWlycm9yPigpOwogICAgdmFyIGtsYXNzID0gdGhpczsKICAgIHdoaWxlIChfbmF0aXZlTWl4aW4oa2xhc3MuX3JlZmxlY3RlZFR5cGUpICE9IG51bGwpIHsKICAgICAgbWl4aW5zLmFkZChrbGFzcy5taXhpbik7CiAgICAgIGtsYXNzID0ga2xhc3Muc3VwZXJjbGFzczsKICAgIH0KICAgIHJldHVybiBfcyhfbihrbGFzcy5xdWFsaWZpZWROYW1lKSArCiAgICAgICAgJyB3aXRoICcgKwogICAgICAgIG1peGlucy5yZXZlcnNlZC5tYXAoKG0pID0+IF9uKG0ucXVhbGlmaWVkTmFtZSkpLmpvaW4oJywgJykpOwogIH0KCiAgdmFyIF9taXhpbjsKICBDbGFzc01pcnJvciBnZXQgbWl4aW4gewogICAgaWYgKF9taXhpbiA9PSBudWxsKSB7CiAgICAgIFR5cGUgbWl4aW5UeXBlID0KICAgICAgICAgIF9uYXRpdmVNaXhpbkluc3RhbnRpYXRlZChfcmVmbGVjdGVkVHlwZSwgX2luc3RhbnRpYXRvcik7CiAgICAgIGlmIChtaXhpblR5cGUgPT0gbnVsbCkgewogICAgICAgIC8vIFRoZSByZWZsZWN0ZWUgaXMgbm90IGEgbWl4aW4gYXBwbGljYXRpb24uCiAgICAgICAgX21peGluID0gdGhpczsKICAgICAgfSBlbHNlIHsKICAgICAgICBfbWl4aW4gPSByZWZsZWN0VHlwZShtaXhpblR5cGUpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX21peGluOwogIH0KCiAgdmFyIF9jYWNoZWRTdGF0aWNNZW1iZXJzOwogIE1hcDxTeW1ib2wsIE1ldGhvZE1pcnJvcj4gZ2V0IHN0YXRpY01lbWJlcnMgewogICAgaWYgKF9jYWNoZWRTdGF0aWNNZW1iZXJzID09IG51bGwpIHsKICAgICAgdmFyIHJlc3VsdCA9IG5ldyBNYXA8U3ltYm9sLCBNZXRob2RNaXJyb3I+KCk7CiAgICAgIGRlY2xhcmF0aW9ucy52YWx1ZXMuZm9yRWFjaCgoZGVjbCkgewogICAgICAgIGlmIChkZWNsIGlzIE1ldGhvZE1pcnJvciAmJiBkZWNsLmlzU3RhdGljICYmICFkZWNsLmlzQ29uc3RydWN0b3IpIHsKICAgICAgICAgIHJlc3VsdFtkZWNsLnNpbXBsZU5hbWVdID0gZGVjbDsKICAgICAgICB9CiAgICAgICAgaWYgKGRlY2wgaXMgVmFyaWFibGVNaXJyb3IgJiYgZGVjbC5pc1N0YXRpYykgewogICAgICAgICAgdmFyIGdldHRlck5hbWUgPSBkZWNsLnNpbXBsZU5hbWU7CiAgICAgICAgICByZXN1bHRbZ2V0dGVyTmFtZV0gPQogICAgICAgICAgICAgIG5ldyBfU3ludGhldGljQWNjZXNzb3IodGhpcywgZ2V0dGVyTmFtZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2UsIGRlY2wpOwogICAgICAgICAgaWYgKCFkZWNsLmlzRmluYWwpIHsKICAgICAgICAgICAgdmFyIHNldHRlck5hbWUgPSBfYXNTZXR0ZXIoZGVjbC5zaW1wbGVOYW1lLCB0aGlzLm93bmVyKTsKICAgICAgICAgICAgcmVzdWx0W3NldHRlck5hbWVdID0gbmV3IF9TeW50aGV0aWNBY2Nlc3NvcigKICAgICAgICAgICAgICAgIHRoaXMsIHNldHRlck5hbWUsIGZhbHNlLCB0cnVlLCBmYWxzZSwgZGVjbCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgICAgX2NhY2hlZFN0YXRpY01lbWJlcnMgPQogICAgICAgICAgbmV3IFVubW9kaWZpYWJsZU1hcFZpZXc8U3ltYm9sLCBNZXRob2RNaXJyb3I+KHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gX2NhY2hlZFN0YXRpY01lbWJlcnM7CiAgfQoKICB2YXIgX2NhY2hlZEluc3RhbmNlTWVtYmVyczsKICBNYXA8U3ltYm9sLCBNZXRob2RNaXJyb3I+IGdldCBpbnN0YW5jZU1lbWJlcnMgewogICAgaWYgKF9jYWNoZWRJbnN0YW5jZU1lbWJlcnMgPT0gbnVsbCkgewogICAgICB2YXIgcmVzdWx0ID0gbmV3IE1hcDxTeW1ib2wsIE1ldGhvZE1pcnJvcj4oKTsKICAgICAgaWYgKHN1cGVyY2xhc3MgIT0gbnVsbCkgewogICAgICAgIHJlc3VsdC5hZGRBbGwoc3VwZXJjbGFzcy5pbnN0YW5jZU1lbWJlcnMpOwogICAgICB9CiAgICAgIGRlY2xhcmF0aW9ucy52YWx1ZXMuZm9yRWFjaCgoZGVjbCkgewogICAgICAgIGlmIChkZWNsIGlzIE1ldGhvZE1pcnJvciAmJgogICAgICAgICAgICAhZGVjbC5pc1N0YXRpYyAmJgogICAgICAgICAgICAhZGVjbC5pc0NvbnN0cnVjdG9yICYmCiAgICAgICAgICAgICFkZWNsLmlzQWJzdHJhY3QpIHsKICAgICAgICAgIHJlc3VsdFtkZWNsLnNpbXBsZU5hbWVdID0gZGVjbDsKICAgICAgICB9CiAgICAgICAgaWYgKGRlY2wgaXMgVmFyaWFibGVNaXJyb3IgJiYgIWRlY2wuaXNTdGF0aWMpIHsKICAgICAgICAgIHZhciBnZXR0ZXJOYW1lID0gZGVjbC5zaW1wbGVOYW1lOwogICAgICAgICAgcmVzdWx0W2dldHRlck5hbWVdID0gbmV3IF9TeW50aGV0aWNBY2Nlc3NvcigKICAgICAgICAgICAgICB0aGlzLCBnZXR0ZXJOYW1lLCB0cnVlLCBmYWxzZSwgZmFsc2UsIGRlY2wpOwogICAgICAgICAgaWYgKCFkZWNsLmlzRmluYWwpIHsKICAgICAgICAgICAgdmFyIHNldHRlck5hbWUgPSBfYXNTZXR0ZXIoZGVjbC5zaW1wbGVOYW1lLCB0aGlzLm93bmVyKTsKICAgICAgICAgICAgcmVzdWx0W3NldHRlck5hbWVdID0gbmV3IF9TeW50aGV0aWNBY2Nlc3NvcigKICAgICAgICAgICAgICAgIHRoaXMsIHNldHRlck5hbWUsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGRlY2wpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIF9jYWNoZWRJbnN0YW5jZU1lbWJlcnMgPQogICAgICAgICAgbmV3IFVubW9kaWZpYWJsZU1hcFZpZXc8U3ltYm9sLCBNZXRob2RNaXJyb3I+KHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gX2NhY2hlZEluc3RhbmNlTWVtYmVyczsKICB9CgogIE1hcDxTeW1ib2wsIERlY2xhcmF0aW9uTWlycm9yPiBfZGVjbGFyYXRpb25zOwogIE1hcDxTeW1ib2wsIERlY2xhcmF0aW9uTWlycm9yPiBnZXQgZGVjbGFyYXRpb25zIHsKICAgIGlmIChfZGVjbGFyYXRpb25zICE9IG51bGwpIHJldHVybiBfZGVjbGFyYXRpb25zOwoKICAgIHZhciBkZWNscyA9IG5ldyBNYXA8U3ltYm9sLCBEZWNsYXJhdGlvbk1pcnJvcj4oKTsKCiAgICB2YXIgbWVtYmVycyA9IChtaXhpbiBhcyBfTG9jYWxDbGFzc01pcnJvcikuX2NvbXB1dGVNZW1iZXJzKAogICAgICAgIF9pbnN0YW50aWF0b3IsIChtaXhpbiBhcyBfTG9jYWxDbGFzc01pcnJvcikuX3JlZmxlY3RlZSk7CiAgICBmb3IgKHZhciBtZW1iZXIgaW4gbWVtYmVycykgewogICAgICBkZWNsc1ttZW1iZXIuc2ltcGxlTmFtZV0gPSBtZW1iZXI7CiAgICB9CgogICAgdmFyIGNvbnN0cnVjdG9ycyA9IF9jb21wdXRlQ29uc3RydWN0b3JzKF9pbnN0YW50aWF0b3IsIF9yZWZsZWN0ZWUpOwogICAgdmFyIHN0cmluZ05hbWUgPSBfbihzaW1wbGVOYW1lKTsKICAgIGZvciAodmFyIGNvbnN0cnVjdG9yIGluIGNvbnN0cnVjdG9ycykgewogICAgICBjb25zdHJ1Y3Rvci5fcGF0Y2hDb25zdHJ1Y3Rvck5hbWUoc3RyaW5nTmFtZSk7CiAgICAgIGRlY2xzW2NvbnN0cnVjdG9yLnNpbXBsZU5hbWVdID0gY29uc3RydWN0b3I7CiAgICB9CgogICAgZm9yICh2YXIgdHlwZVZhcmlhYmxlIGluIHR5cGVWYXJpYWJsZXMpIHsKICAgICAgZGVjbHNbdHlwZVZhcmlhYmxlLnNpbXBsZU5hbWVdID0gdHlwZVZhcmlhYmxlOwogICAgfQoKICAgIHJldHVybiBfZGVjbGFyYXRpb25zID0KICAgICAgICBuZXcgVW5tb2RpZmlhYmxlTWFwVmlldzxTeW1ib2wsIERlY2xhcmF0aW9uTWlycm9yPihkZWNscyk7CiAgfQoKICAvLyBOb3RlOiByZXR1cm5zIGNvcnJlY3QgcmVzdWx0IG9ubHkgZm9yIERhcnQgMSBhbm9ueW1vdXMgbWl4aW4gYXBwbGljYXRpb25zLgogIGJvb2wgZ2V0IF9pc0Fub255bW91c01peGluQXBwbGljYXRpb24gewogICAgaWYgKG1peGluID09IHRoaXMpIHJldHVybiBmYWxzZTsgLy8gTm90IGEgbWl4aW4gYXBwbGljYXRpb24uCiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIExpc3Q8VHlwZVZhcmlhYmxlTWlycm9yPiBfdHlwZVZhcmlhYmxlczsKICBMaXN0PFR5cGVWYXJpYWJsZU1pcnJvcj4gZ2V0IHR5cGVWYXJpYWJsZXMgewogICAgaWYgKF90eXBlVmFyaWFibGVzID09IG51bGwpIHsKICAgICAgaWYgKCFfaXNUcmFuc2Zvcm1lZE1peGluQXBwbGljYXRpb24gJiYgX2lzQW5vbnltb3VzTWl4aW5BcHBsaWNhdGlvbikgewogICAgICAgIHJldHVybiBfdHlwZVZhcmlhYmxlcyA9IGNvbnN0IDxUeXBlVmFyaWFibGVNaXJyb3I+W107CiAgICAgIH0KICAgICAgX3R5cGVWYXJpYWJsZXMgPSBuZXcgTGlzdDxUeXBlVmFyaWFibGVNaXJyb3I+KCk7CgogICAgICBMaXN0IHBhcmFtcyA9IF9DbGFzc01pcnJvcl90eXBlX3ZhcmlhYmxlcyhfcmVmbGVjdGVlKTsKICAgICAgQ2xhc3NNaXJyb3Igb3duZXIgPSBvcmlnaW5hbERlY2xhcmF0aW9uOwogICAgICB2YXIgbWlycm9yOwogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkgKz0gMikgewogICAgICAgIG1pcnJvciA9IG5ldyBfTG9jYWxUeXBlVmFyaWFibGVNaXJyb3IuXyhwYXJhbXNbaSArIDFdLCBwYXJhbXNbaV0sIG93bmVyKTsKICAgICAgICBfdHlwZVZhcmlhYmxlcy5hZGQobWlycm9yKTsKICAgICAgfQogICAgICBfdHlwZVZhcmlhYmxlcyA9CiAgICAgICAgICBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8VHlwZVZhcmlhYmxlTWlycm9yPihfdHlwZVZhcmlhYmxlcyk7CiAgICB9CiAgICByZXR1cm4gX3R5cGVWYXJpYWJsZXM7CiAgfQoKICBMaXN0PFR5cGVNaXJyb3I+IF90eXBlQXJndW1lbnRzOwogIExpc3Q8VHlwZU1pcnJvcj4gZ2V0IHR5cGVBcmd1bWVudHMgewogICAgaWYgKF90eXBlQXJndW1lbnRzID09IG51bGwpIHsKICAgICAgaWYgKF9pc0dlbmVyaWNEZWNsYXJhdGlvbiB8fAogICAgICAgICAgKCFfaXNUcmFuc2Zvcm1lZE1peGluQXBwbGljYXRpb24gJiYgX2lzQW5vbnltb3VzTWl4aW5BcHBsaWNhdGlvbikpIHsKICAgICAgICBfdHlwZUFyZ3VtZW50cyA9IGNvbnN0IDxUeXBlTWlycm9yPltdOwogICAgICB9IGVsc2UgewogICAgICAgIF90eXBlQXJndW1lbnRzID0gbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PFR5cGVNaXJyb3I+KAogICAgICAgICAgICBfY29tcHV0ZVR5cGVBcmd1bWVudHMoX3JlZmxlY3RlZFR5cGUpLmNhc3Q8VHlwZU1pcnJvcj4oKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfdHlwZUFyZ3VtZW50czsKICB9CgogIGJvb2wgZ2V0IGlzT3JpZ2luYWxEZWNsYXJhdGlvbiA9PiAhX2lzR2VuZXJpYyB8fCBfaXNHZW5lcmljRGVjbGFyYXRpb247CgogIENsYXNzTWlycm9yIGdldCBvcmlnaW5hbERlY2xhcmF0aW9uIHsKICAgIGlmIChpc09yaWdpbmFsRGVjbGFyYXRpb24pIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gcmVmbGVjdENsYXNzKF9yZWZsZWN0ZWRUeXBlKTsKICAgIH0KICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJDbGFzc01pcnJvciBvbiAnJHtNaXJyb3JTeXN0ZW0uZ2V0TmFtZShzaW1wbGVOYW1lKX0nIjsKCiAgSW5zdGFuY2VNaXJyb3IgbmV3SW5zdGFuY2UoU3ltYm9sIGNvbnN0cnVjdG9yTmFtZSwgTGlzdCBwb3NpdGlvbmFsQXJndW1lbnRzLAogICAgICBbTWFwPFN5bWJvbCwgZHluYW1pYz4gbmFtZWRBcmd1bWVudHNdKSB7CiAgICAvLyBOYXRpdmUgY29kZSB3aWxsIGFkZCB0aGUgMSBvciAyIGltcGxpY2l0IGFyZ3VtZW50cyBkZXBlbmRpbmcgb24gd2hldGhlcgogICAgLy8gd2UgZW5kIHVwIGludm9raW5nIGEgZmFjdG9yeSBvciBjb25zdHJ1Y3RvciByZXNwZWN0aXZlbHkuCiAgICBpbnQgbnVtUG9zaXRpb25hbEFyZ3VtZW50cyA9IHBvc2l0aW9uYWxBcmd1bWVudHMubGVuZ3RoOwogICAgaW50IG51bU5hbWVkQXJndW1lbnRzID0gbmFtZWRBcmd1bWVudHMgIT0gbnVsbCA/IG5hbWVkQXJndW1lbnRzLmxlbmd0aCA6IDA7CiAgICBpbnQgbnVtQXJndW1lbnRzID0gbnVtUG9zaXRpb25hbEFyZ3VtZW50cyArIG51bU5hbWVkQXJndW1lbnRzOwogICAgTGlzdCBhcmd1bWVudHMgPSBuZXcgTGlzdChudW1Bcmd1bWVudHMpOwogICAgYXJndW1lbnRzLnNldFJhbmdlKDAsIG51bVBvc2l0aW9uYWxBcmd1bWVudHMsIHBvc2l0aW9uYWxBcmd1bWVudHMpOwogICAgTGlzdCBuYW1lcyA9IG5ldyBMaXN0KG51bU5hbWVkQXJndW1lbnRzKTsKICAgIGludCBhcmd1bWVudEluZGV4ID0gbnVtUG9zaXRpb25hbEFyZ3VtZW50czsKICAgIGludCBuYW1lSW5kZXggPSAwOwogICAgaWYgKG51bU5hbWVkQXJndW1lbnRzID4gMCkgewogICAgICBuYW1lZEFyZ3VtZW50cy5mb3JFYWNoKChuYW1lLCB2YWx1ZSkgewogICAgICAgIGFyZ3VtZW50c1thcmd1bWVudEluZGV4KytdID0gdmFsdWU7CiAgICAgICAgbmFtZXNbbmFtZUluZGV4KytdID0gX24obmFtZSk7CiAgICAgIH0pOwogICAgfQoKICAgIHJldHVybiByZWZsZWN0KF9pbnZva2VDb25zdHJ1Y3RvcigKICAgICAgICBfcmVmbGVjdGVlLCBfcmVmbGVjdGVkVHlwZSwgX24oY29uc3RydWN0b3JOYW1lKSwgYXJndW1lbnRzLCBuYW1lcykpOwogIH0KCiAgTGlzdDxJbnN0YW5jZU1pcnJvcj4gZ2V0IG1ldGFkYXRhIHsKICAgIC8vIEdldCB0aGUgbWV0YWRhdGEgb2JqZWN0cywgY29udmVydCB0aGVtIGludG8gSW5zdGFuY2VNaXJyb3JzIHVzaW5nCiAgICAvLyByZWZsZWN0KCkgYW5kIHRoZW4gbWFrZSB0aGVtIGludG8gYSBEYXJ0IGxpc3QuCiAgICByZXR1cm4gbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PEluc3RhbmNlTWlycm9yPigKICAgICAgICBfbWV0YWRhdGEoX3JlZmxlY3RlZSkubWFwKHJlZmxlY3QpKTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiB0aGlzLnJ1bnRpbWVUeXBlID09IG90aGVyLnJ1bnRpbWVUeXBlICYmCiAgICAgICAgdGhpcy5fcmVmbGVjdGVlID09IG90aGVyLl9yZWZsZWN0ZWUgJiYKICAgICAgICB0aGlzLl9yZWZsZWN0ZWRUeXBlID09IG90aGVyLl9yZWZsZWN0ZWRUeXBlICYmCiAgICAgICAgdGhpcy5faXNHZW5lcmljRGVjbGFyYXRpb24gPT0gb3RoZXIuX2lzR2VuZXJpY0RlY2xhcmF0aW9uOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSA9PiBzaW1wbGVOYW1lLmhhc2hDb2RlOwoKICBib29sIGlzU3VidHlwZU9mKFR5cGVNaXJyb3Igb3RoZXIpIHsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkuZHluYW1pY1R5cGUpIHJldHVybiB0cnVlOwogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS52b2lkVHlwZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIF9zdWJ0eXBlVGVzdCgKICAgICAgICBfcmVmbGVjdGVkVHlwZSwgKG90aGVyIGFzIF9Mb2NhbFR5cGVNaXJyb3IpLl9yZWZsZWN0ZWRUeXBlKTsKICB9CgogIGJvb2wgaXNBc3NpZ25hYmxlVG8oVHlwZU1pcnJvciBvdGhlcikgewogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS5keW5hbWljVHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLnZvaWRUeXBlKSByZXR1cm4gZmFsc2U7CiAgICBmaW5hbCBvdGhlclJlZmxlY3RlZFR5cGUgPSAob3RoZXIgYXMgX0xvY2FsVHlwZU1pcnJvcikuX3JlZmxlY3RlZFR5cGU7CiAgICByZXR1cm4gX3N1YnR5cGVUZXN0KF9yZWZsZWN0ZWRUeXBlLCBvdGhlclJlZmxlY3RlZFR5cGUpIHx8CiAgICAgICAgX3N1YnR5cGVUZXN0KG90aGVyUmVmbGVjdGVkVHlwZSwgX3JlZmxlY3RlZFR5cGUpOwogIH0KCiAgYm9vbCBpc1N1YmNsYXNzT2YoQ2xhc3NNaXJyb3Igb3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgQ2xhc3NNaXJyb3IpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKG90aGVyKTsKICAgIENsYXNzTWlycm9yIG90aGVyRGVjbGFyYXRpb24gPSBvdGhlci5vcmlnaW5hbERlY2xhcmF0aW9uOwogICAgQ2xhc3NNaXJyb3IgYyA9IHRoaXM7CiAgICB3aGlsZSAoYyAhPSBudWxsKSB7CiAgICAgIGMgPSBjLm9yaWdpbmFsRGVjbGFyYXRpb247CiAgICAgIGlmIChjID09IG90aGVyRGVjbGFyYXRpb24pIHJldHVybiB0cnVlOwogICAgICBjID0gYy5zdXBlcmNsYXNzOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgc3RhdGljIFN0cmluZyBfbGlicmFyeVVyaShyZWZsZWN0ZWUpIG5hdGl2ZSAiQ2xhc3NNaXJyb3JfbGlicmFyeVVyaSI7CgogIHN0YXRpYyBUeXBlIF9zdXBlcnR5cGUocmVmbGVjdGVkVHlwZSkgbmF0aXZlICJDbGFzc01pcnJvcl9zdXBlcnR5cGUiOwoKICBzdGF0aWMgVHlwZSBfc3VwZXJ0eXBlSW5zdGFudGlhdGVkKHJlZmxlY3RlZFR5cGUpCiAgICAgIG5hdGl2ZSAiQ2xhc3NNaXJyb3Jfc3VwZXJ0eXBlX2luc3RhbnRpYXRlZCI7CgogIHN0YXRpYyBMaXN0PGR5bmFtaWM+IF9uYXRpdmVJbnRlcmZhY2VzKHJlZmxlY3RlZFR5cGUpCiAgICAgIG5hdGl2ZSAiQ2xhc3NNaXJyb3JfaW50ZXJmYWNlcyI7CgogIHN0YXRpYyBMaXN0PGR5bmFtaWM+IF9uYXRpdmVJbnRlcmZhY2VzSW5zdGFudGlhdGVkKHJlZmxlY3RlZFR5cGUpCiAgICAgIG5hdGl2ZSAiQ2xhc3NNaXJyb3JfaW50ZXJmYWNlc19pbnN0YW50aWF0ZWQiOwoKICBzdGF0aWMgVHlwZSBfbmF0aXZlTWl4aW4ocmVmbGVjdGVkVHlwZSkgbmF0aXZlICJDbGFzc01pcnJvcl9taXhpbiI7CgogIHN0YXRpYyBUeXBlIF9uYXRpdmVNaXhpbkluc3RhbnRpYXRlZChyZWZsZWN0ZWRUeXBlLCBpbnN0YW50aWF0b3IpCiAgICAgIG5hdGl2ZSAiQ2xhc3NNaXJyb3JfbWl4aW5faW5zdGFudGlhdGVkIjsKCiAgTGlzdDxkeW5hbWljPiBfY29tcHV0ZU1lbWJlcnMocmVmbGVjdGVlLCBpbnN0YW50aWF0b3IpCiAgICAgIG5hdGl2ZSAiQ2xhc3NNaXJyb3JfbWVtYmVycyI7CgogIExpc3Q8ZHluYW1pYz4gX2NvbXB1dGVDb25zdHJ1Y3RvcnMocmVmbGVjdGVlLCBpbnN0YW50aWF0b3IpCiAgICAgIG5hdGl2ZSAiQ2xhc3NNaXJyb3JfY29uc3RydWN0b3JzIjsKCiAgX2ludm9rZShyZWZsZWN0ZWUsIG1lbWJlck5hbWUsIGFyZ3VtZW50cywgYXJndW1lbnROYW1lcykKICAgICAgbmF0aXZlICdDbGFzc01pcnJvcl9pbnZva2UnOwoKICBfaW52b2tlR2V0dGVyKHJlZmxlY3RlZSwgZ2V0dGVyTmFtZSkgbmF0aXZlICdDbGFzc01pcnJvcl9pbnZva2VHZXR0ZXInOwoKICBfaW52b2tlU2V0dGVyKHJlZmxlY3RlZSwgc2V0dGVyTmFtZSwgdmFsdWUpIG5hdGl2ZSAnQ2xhc3NNaXJyb3JfaW52b2tlU2V0dGVyJzsKCiAgc3RhdGljIF9pbnZva2VDb25zdHJ1Y3RvcihyZWZsZWN0ZWUsIHR5cGUsIGNvbnN0cnVjdG9yTmFtZSwgYXJndW1lbnRzLAogICAgICBhcmd1bWVudE5hbWVzKSBuYXRpdmUgJ0NsYXNzTWlycm9yX2ludm9rZUNvbnN0cnVjdG9yJzsKCiAgc3RhdGljIExpc3Q8ZHluYW1pYz4gX0NsYXNzTWlycm9yX3R5cGVfdmFyaWFibGVzKHJlZmxlY3RlZSkKICAgICAgbmF0aXZlICJDbGFzc01pcnJvcl90eXBlX3ZhcmlhYmxlcyI7CgogIHN0YXRpYyBMaXN0PGR5bmFtaWM+IF9jb21wdXRlVHlwZUFyZ3VtZW50cyhyZWZsZWN0ZWUpCiAgICAgIG5hdGl2ZSAiQ2xhc3NNaXJyb3JfdHlwZV9hcmd1bWVudHMiOwp9CgpjbGFzcyBfTG9jYWxGdW5jdGlvblR5cGVNaXJyb3IgZXh0ZW5kcyBfTG9jYWxDbGFzc01pcnJvcgogICAgaW1wbGVtZW50cyBGdW5jdGlvblR5cGVNaXJyb3IgewogIGZpbmFsIF9mdW5jdGlvblJlZmxlY3RlZTsKICBfTG9jYWxGdW5jdGlvblR5cGVNaXJyb3IuXyhyZWZsZWN0ZWUsIHRoaXMuX2Z1bmN0aW9uUmVmbGVjdGVlLCByZWZsZWN0ZWRUeXBlKQogICAgICA6IHN1cGVyLl8ocmVmbGVjdGVlLCByZWZsZWN0ZWRUeXBlLCBudWxsLCBudWxsLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwKICAgICAgICAgICAgZmFsc2UpOwoKICBib29sIGdldCBfaXNBbm9ueW1vdXNNaXhpbkFwcGxpY2F0aW9uID0+IGZhbHNlOwoKICAvLyBGdW5jdGlvblR5cGVNaXJyb3JzIGhhdmUgYSBzaW1wbGVOYW1lIGdlbmVyYXRlZCBmcm9tIHRoZWlyIHNpZ25hdHVyZS4KICBTeW1ib2wgX3NpbXBsZU5hbWU7CiAgU3ltYm9sIGdldCBzaW1wbGVOYW1lIHsKICAgIGlmIChfc2ltcGxlTmFtZSA9PSBudWxsKSB7CiAgICAgIF9zaW1wbGVOYW1lID0gX3MoX21ha2VTaWduYXR1cmVTdHJpbmcocmV0dXJuVHlwZSwgcGFyYW1ldGVycykpOwogICAgfQogICAgcmV0dXJuIF9zaW1wbGVOYW1lOwogIH0KCiAgTWV0aG9kTWlycm9yIF9jYWxsTWV0aG9kOwogIE1ldGhvZE1pcnJvciBnZXQgY2FsbE1ldGhvZCB7CiAgICBpZiAoX2NhbGxNZXRob2QgPT0gbnVsbCkgewogICAgICBfY2FsbE1ldGhvZCA9IF9GdW5jdGlvblR5cGVNaXJyb3JfY2FsbF9tZXRob2QoX2Z1bmN0aW9uUmVmbGVjdGVlKTsKICAgIH0KICAgIHJldHVybiBfY2FsbE1ldGhvZDsKICB9CgogIFR5cGVNaXJyb3IgX3JldHVyblR5cGU7CiAgVHlwZU1pcnJvciBnZXQgcmV0dXJuVHlwZSB7CiAgICBpZiAoX3JldHVyblR5cGUgPT0gbnVsbCkgewogICAgICBfcmV0dXJuVHlwZSA9CiAgICAgICAgICByZWZsZWN0VHlwZShfRnVuY3Rpb25UeXBlTWlycm9yX3JldHVybl90eXBlKF9mdW5jdGlvblJlZmxlY3RlZSkpOwogICAgfQogICAgcmV0dXJuIF9yZXR1cm5UeXBlOwogIH0KCiAgTGlzdDxQYXJhbWV0ZXJNaXJyb3I+IF9wYXJhbWV0ZXJzOwogIExpc3Q8UGFyYW1ldGVyTWlycm9yPiBnZXQgcGFyYW1ldGVycyB7CiAgICBpZiAoX3BhcmFtZXRlcnMgPT0gbnVsbCkgewogICAgICBfcGFyYW1ldGVycyA9IF9GdW5jdGlvblR5cGVNaXJyb3JfcGFyYW1ldGVycyhfZnVuY3Rpb25SZWZsZWN0ZWUpCiAgICAgICAgICAuY2FzdDxQYXJhbWV0ZXJNaXJyb3I+KCk7CiAgICAgIF9wYXJhbWV0ZXJzID0gbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PFBhcmFtZXRlck1pcnJvcj4oX3BhcmFtZXRlcnMpOwogICAgfQogICAgcmV0dXJuIF9wYXJhbWV0ZXJzOwogIH0KCiAgYm9vbCBnZXQgaXNPcmlnaW5hbERlY2xhcmF0aW9uID0+IHRydWU7CiAgQ2xhc3NNaXJyb3IgZ2V0IG9yaWdpbmFsRGVjbGFyYXRpb24gPT4gdGhpczsKICBnZXQgdHlwZVZhcmlhYmxlcyA9PiBjb25zdCA8VHlwZVZhcmlhYmxlTWlycm9yPltdOwogIGdldCB0eXBlQXJndW1lbnRzID0+IGNvbnN0IDxUeXBlTWlycm9yPltdOwogIGdldCBtZXRhZGF0YSA9PiBjb25zdCA8SW5zdGFuY2VNaXJyb3I+W107CiAgZ2V0IGxvY2F0aW9uID0+IG51bGw7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJGdW5jdGlvblR5cGVNaXJyb3Igb24gJyR7X24oc2ltcGxlTmFtZSl9JyI7CgogIE1ldGhvZE1pcnJvciBfRnVuY3Rpb25UeXBlTWlycm9yX2NhbGxfbWV0aG9kKGZ1bmN0aW9uUmVmbGVjdGVlKQogICAgICBuYXRpdmUgIkZ1bmN0aW9uVHlwZU1pcnJvcl9jYWxsX21ldGhvZCI7CgogIHN0YXRpYyBUeXBlIF9GdW5jdGlvblR5cGVNaXJyb3JfcmV0dXJuX3R5cGUoZnVuY3Rpb25SZWZsZWN0ZWUpCiAgICAgIG5hdGl2ZSAiRnVuY3Rpb25UeXBlTWlycm9yX3JldHVybl90eXBlIjsKCiAgTGlzdDxkeW5hbWljPiBfRnVuY3Rpb25UeXBlTWlycm9yX3BhcmFtZXRlcnMoZnVuY3Rpb25SZWZsZWN0ZWUpCiAgICAgIG5hdGl2ZSAiRnVuY3Rpb25UeXBlTWlycm9yX3BhcmFtZXRlcnMiOwp9CgphYnN0cmFjdCBjbGFzcyBfTG9jYWxEZWNsYXJhdGlvbk1pcnJvciBleHRlbmRzIF9Mb2NhbE1pcnJvcgogICAgaW1wbGVtZW50cyBEZWNsYXJhdGlvbk1pcnJvciB7CiAgZmluYWwgX3JlZmxlY3RlZTsKICBTeW1ib2wgX3NpbXBsZU5hbWU7CgogIF9Mb2NhbERlY2xhcmF0aW9uTWlycm9yLl8odGhpcy5fcmVmbGVjdGVlLCB0aGlzLl9zaW1wbGVOYW1lKTsKCiAgU3ltYm9sIGdldCBzaW1wbGVOYW1lID0+IF9zaW1wbGVOYW1lOwoKICBTeW1ib2wgX3F1YWxpZmllZE5hbWU7CiAgU3ltYm9sIGdldCBxdWFsaWZpZWROYW1lIHsKICAgIGlmIChfcXVhbGlmaWVkTmFtZSA9PSBudWxsKSB7CiAgICAgIF9xdWFsaWZpZWROYW1lID0gX2NvbXB1dGVRdWFsaWZpZWROYW1lKG93bmVyLCBzaW1wbGVOYW1lKTsKICAgIH0KICAgIHJldHVybiBfcXVhbGlmaWVkTmFtZTsKICB9CgogIGJvb2wgZ2V0IGlzUHJpdmF0ZSA9PiBfbihzaW1wbGVOYW1lKS5zdGFydHNXaXRoKCdfJyk7CgogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbiB7CiAgICByZXR1cm4gX2xvY2F0aW9uKF9yZWZsZWN0ZWUpOwogIH0KCiAgTGlzdDxJbnN0YW5jZU1pcnJvcj4gZ2V0IG1ldGFkYXRhIHsKICAgIC8vIEdldCB0aGUgbWV0YWRhdGEgb2JqZWN0cywgY29udmVydCB0aGVtIGludG8gSW5zdGFuY2VNaXJyb3JzIHVzaW5nCiAgICAvLyByZWZsZWN0KCkgYW5kIHRoZW4gbWFrZSB0aGVtIGludG8gYSBEYXJ0IGxpc3QuCiAgICByZXR1cm4gbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PEluc3RhbmNlTWlycm9yPigKICAgICAgICBfbWV0YWRhdGEoX3JlZmxlY3RlZSkubWFwKHJlZmxlY3QpKTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiB0aGlzLnJ1bnRpbWVUeXBlID09IG90aGVyLnJ1bnRpbWVUeXBlICYmCiAgICAgICAgdGhpcy5fcmVmbGVjdGVlID09IG90aGVyLl9yZWZsZWN0ZWU7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHNpbXBsZU5hbWUuaGFzaENvZGU7Cn0KCmNsYXNzIF9Mb2NhbFR5cGVWYXJpYWJsZU1pcnJvciBleHRlbmRzIF9Mb2NhbERlY2xhcmF0aW9uTWlycm9yCiAgICBpbXBsZW1lbnRzIFR5cGVWYXJpYWJsZU1pcnJvciwgX0xvY2FsVHlwZU1pcnJvciB7CiAgX0xvY2FsVHlwZVZhcmlhYmxlTWlycm9yLl8ocmVmbGVjdGVlLCBTdHJpbmcgc2ltcGxlTmFtZSwgdGhpcy5fb3duZXIpCiAgICAgIDogc3VwZXIuXyhyZWZsZWN0ZWUsIF9zKHNpbXBsZU5hbWUpKTsKCiAgRGVjbGFyYXRpb25NaXJyb3IgX293bmVyOwogIERlY2xhcmF0aW9uTWlycm9yIGdldCBvd25lciB7CiAgICBpZiAoX293bmVyID09IG51bGwpIHsKICAgICAgX293bmVyID0gKF9UeXBlVmFyaWFibGVNaXJyb3Jfb3duZXIoX3JlZmxlY3RlZSkgYXMgVHlwZU1pcnJvcikKICAgICAgICAgIC5vcmlnaW5hbERlY2xhcmF0aW9uOwogICAgfQogICAgcmV0dXJuIF9vd25lcjsKICB9CgogIGJvb2wgZ2V0IGlzU3RhdGljID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzVG9wTGV2ZWwgPT4gZmFsc2U7CgogIFR5cGVNaXJyb3IgX3VwcGVyQm91bmQ7CiAgVHlwZU1pcnJvciBnZXQgdXBwZXJCb3VuZCB7CiAgICBpZiAoX3VwcGVyQm91bmQgPT0gbnVsbCkgewogICAgICBfdXBwZXJCb3VuZCA9IHJlZmxlY3RUeXBlKF9UeXBlVmFyaWFibGVNaXJyb3JfdXBwZXJfYm91bmQoX3JlZmxlY3RlZSkpOwogICAgfQogICAgcmV0dXJuIF91cHBlckJvdW5kOwogIH0KCiAgYm9vbCBnZXQgaGFzUmVmbGVjdGVkVHlwZSA9PiBmYWxzZTsKICBUeXBlIGdldCByZWZsZWN0ZWRUeXBlIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCdUeXBlIHZhcmlhYmxlcyBoYXZlIG5vIHJlZmxlY3RlZCB0eXBlJyk7CiAgfQoKICBUeXBlIGdldCBfcmVmbGVjdGVkVHlwZSA9PiBfcmVmbGVjdGVlOwoKICBMaXN0PFR5cGVWYXJpYWJsZU1pcnJvcj4gZ2V0IHR5cGVWYXJpYWJsZXMgPT4gY29uc3QgPFR5cGVWYXJpYWJsZU1pcnJvcj5bXTsKICBMaXN0PFR5cGVNaXJyb3I+IGdldCB0eXBlQXJndW1lbnRzID0+IGNvbnN0IDxUeXBlTWlycm9yPltdOwoKICBib29sIGdldCBpc09yaWdpbmFsRGVjbGFyYXRpb24gPT4gdHJ1ZTsKICBUeXBlTWlycm9yIGdldCBvcmlnaW5hbERlY2xhcmF0aW9uID0+IHRoaXM7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJUeXBlVmFyaWFibGVNaXJyb3Igb24gJyR7X24oc2ltcGxlTmFtZSl9JyI7CgogIG9wZXJhdG9yID09KG90aGVyKSB7CiAgICByZXR1cm4gb3RoZXIgaXMgVHlwZVZhcmlhYmxlTWlycm9yICYmCiAgICAgICAgc2ltcGxlTmFtZSA9PSBvdGhlci5zaW1wbGVOYW1lICYmCiAgICAgICAgb3duZXIgPT0gb3RoZXIub3duZXI7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHNpbXBsZU5hbWUuaGFzaENvZGU7CgogIGJvb2wgaXNTdWJ0eXBlT2YoVHlwZU1pcnJvciBvdGhlcikgewogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS5keW5hbWljVHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLnZvaWRUeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX3N1YnR5cGVUZXN0KAogICAgICAgIF9yZWZsZWN0ZWRUeXBlLCAob3RoZXIgYXMgX0xvY2FsVHlwZU1pcnJvcikuX3JlZmxlY3RlZFR5cGUpOwogIH0KCiAgYm9vbCBpc0Fzc2lnbmFibGVUbyhUeXBlTWlycm9yIG90aGVyKSB7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLmR5bmFtaWNUeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkudm9pZFR5cGUpIHJldHVybiBmYWxzZTsKICAgIGZpbmFsIG90aGVyUmVmbGVjdGVkVHlwZSA9IChvdGhlciBhcyBfTG9jYWxUeXBlTWlycm9yKS5fcmVmbGVjdGVkVHlwZTsKICAgIHJldHVybiBfc3VidHlwZVRlc3QoX3JlZmxlY3RlZFR5cGUsIG90aGVyUmVmbGVjdGVkVHlwZSkgfHwKICAgICAgICBfc3VidHlwZVRlc3Qob3RoZXJSZWZsZWN0ZWRUeXBlLCBfcmVmbGVjdGVkVHlwZSk7CiAgfQoKICBzdGF0aWMgRGVjbGFyYXRpb25NaXJyb3IgX1R5cGVWYXJpYWJsZU1pcnJvcl9vd25lcihyZWZsZWN0ZWUpCiAgICAgIG5hdGl2ZSAiVHlwZVZhcmlhYmxlTWlycm9yX293bmVyIjsKCiAgc3RhdGljIFR5cGUgX1R5cGVWYXJpYWJsZU1pcnJvcl91cHBlcl9ib3VuZChyZWZsZWN0ZWUpCiAgICAgIG5hdGl2ZSAiVHlwZVZhcmlhYmxlTWlycm9yX3VwcGVyX2JvdW5kIjsKfQoKY2xhc3MgX0xvY2FsVHlwZWRlZk1pcnJvciBleHRlbmRzIF9Mb2NhbERlY2xhcmF0aW9uTWlycm9yCiAgICBpbXBsZW1lbnRzIFR5cGVkZWZNaXJyb3IsIF9Mb2NhbFR5cGVNaXJyb3IgewogIGZpbmFsIFR5cGUgX3JlZmxlY3RlZFR5cGU7CiAgZmluYWwgYm9vbCBfaXNHZW5lcmljOwogIGZpbmFsIGJvb2wgX2lzR2VuZXJpY0RlY2xhcmF0aW9uOwoKICBfTG9jYWxUeXBlZGVmTWlycm9yKHJlZmxlY3RlZSwgdGhpcy5fcmVmbGVjdGVkVHlwZSwgU3RyaW5nIHNpbXBsZU5hbWUsCiAgICAgIHRoaXMuX2lzR2VuZXJpYywgdGhpcy5faXNHZW5lcmljRGVjbGFyYXRpb24sIHRoaXMuX293bmVyKQogICAgICA6IHN1cGVyLl8ocmVmbGVjdGVlLCBfcyhzaW1wbGVOYW1lKSk7CgogIGJvb2wgZ2V0IGlzVG9wTGV2ZWwgPT4gdHJ1ZTsKCiAgRGVjbGFyYXRpb25NaXJyb3IgX293bmVyOwogIERlY2xhcmF0aW9uTWlycm9yIGdldCBvd25lciB7CiAgICBpZiAoX293bmVyID09IG51bGwpIHsKICAgICAgdmFyIHVyaSA9IF9Mb2NhbENsYXNzTWlycm9yLl9saWJyYXJ5VXJpKF9yZWZsZWN0ZWUpOwogICAgICBfb3duZXIgPSBjdXJyZW50TWlycm9yU3lzdGVtKCkubGlicmFyaWVzW1VyaS5wYXJzZSh1cmkpXTsKICAgIH0KICAgIHJldHVybiBfb3duZXI7CiAgfQoKICBfTG9jYWxGdW5jdGlvblR5cGVNaXJyb3IgX3JlZmVyZW50OwogIEZ1bmN0aW9uVHlwZU1pcnJvciBnZXQgcmVmZXJlbnQgewogICAgaWYgKF9yZWZlcmVudCA9PSBudWxsKSB7CiAgICAgIF9yZWZlcmVudCA9IF9uYXRpdmVSZWZlcmVudChfcmVmbGVjdGVkVHlwZSk7CiAgICAgIF9yZWZlcmVudC5faW5zdGFudGlhdG9yID0gX3JlZmxlY3RlZFR5cGU7CiAgICB9CiAgICByZXR1cm4gX3JlZmVyZW50OwogIH0KCiAgYm9vbCBnZXQgaGFzUmVmbGVjdGVkVHlwZSA9PiAhX2lzR2VuZXJpY0RlY2xhcmF0aW9uOwogIFR5cGUgZ2V0IHJlZmxlY3RlZFR5cGUgewogICAgaWYgKCFoYXNSZWZsZWN0ZWRUeXBlKSB7CiAgICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKAogICAgICAgICAgIkRlY2xhcmF0aW9ucyBvZiBnZW5lcmljcyBoYXZlIG5vIHJlZmxlY3RlZCB0eXBlIik7CiAgICB9CiAgICByZXR1cm4gX3JlZmxlY3RlZFR5cGU7CiAgfQoKICBib29sIGdldCBpc09yaWdpbmFsRGVjbGFyYXRpb24gPT4gIV9pc0dlbmVyaWMgfHwgX2lzR2VuZXJpY0RlY2xhcmF0aW9uOwoKICBUeXBlZGVmTWlycm9yIGdldCBvcmlnaW5hbERlY2xhcmF0aW9uIHsKICAgIGlmIChpc09yaWdpbmFsRGVjbGFyYXRpb24pIHsKICAgICAgcmV0dXJuIHRoaXM7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gX25hdGl2ZURlY2xhcmF0aW9uKF9yZWZsZWN0ZWRUeXBlKTsKICAgIH0KICB9CgogIExpc3Q8VHlwZVZhcmlhYmxlTWlycm9yPiBfdHlwZVZhcmlhYmxlczsKICBMaXN0PFR5cGVWYXJpYWJsZU1pcnJvcj4gZ2V0IHR5cGVWYXJpYWJsZXMgewogICAgaWYgKF90eXBlVmFyaWFibGVzID09IG51bGwpIHsKICAgICAgX3R5cGVWYXJpYWJsZXMgPSBuZXcgTGlzdDxUeXBlVmFyaWFibGVNaXJyb3I+KCk7CiAgICAgIExpc3QgcGFyYW1zID0gX0xvY2FsQ2xhc3NNaXJyb3IuX0NsYXNzTWlycm9yX3R5cGVfdmFyaWFibGVzKF9yZWZsZWN0ZWUpOwogICAgICBUeXBlZGVmTWlycm9yIG93bmVyID0gb3JpZ2luYWxEZWNsYXJhdGlvbjsKICAgICAgdmFyIG1pcnJvcjsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgICBtaXJyb3IgPSBuZXcgX0xvY2FsVHlwZVZhcmlhYmxlTWlycm9yLl8ocGFyYW1zW2kgKyAxXSwgcGFyYW1zW2ldLCBvd25lcik7CiAgICAgICAgX3R5cGVWYXJpYWJsZXMuYWRkKG1pcnJvcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfdHlwZVZhcmlhYmxlczsKICB9CgogIExpc3Q8VHlwZU1pcnJvcj4gX3R5cGVBcmd1bWVudHM7CiAgTGlzdDxUeXBlTWlycm9yPiBnZXQgdHlwZUFyZ3VtZW50cyB7CiAgICBpZiAoX3R5cGVBcmd1bWVudHMgPT0gbnVsbCkgewogICAgICBpZiAoX2lzR2VuZXJpY0RlY2xhcmF0aW9uKSB7CiAgICAgICAgX3R5cGVBcmd1bWVudHMgPSBjb25zdCA8VHlwZU1pcnJvcj5bXTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfdHlwZUFyZ3VtZW50cyA9IG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxUeXBlTWlycm9yPihfTG9jYWxDbGFzc01pcnJvcgogICAgICAgICAgICAuX2NvbXB1dGVUeXBlQXJndW1lbnRzKF9yZWZsZWN0ZWRUeXBlKQogICAgICAgICAgICAuY2FzdDxUeXBlTWlycm9yPigpKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIF90eXBlQXJndW1lbnRzOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlR5cGVkZWZNaXJyb3Igb24gJyR7X24oc2ltcGxlTmFtZSl9JyI7CgogIGJvb2wgaXNTdWJ0eXBlT2YoVHlwZU1pcnJvciBvdGhlcikgewogICAgaWYgKG90aGVyID09IGN1cnJlbnRNaXJyb3JTeXN0ZW0oKS5keW5hbWljVHlwZSkgcmV0dXJuIHRydWU7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLnZvaWRUeXBlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX3N1YnR5cGVUZXN0KAogICAgICAgIF9yZWZsZWN0ZWRUeXBlLCAob3RoZXIgYXMgX0xvY2FsVHlwZU1pcnJvcikuX3JlZmxlY3RlZFR5cGUpOwogIH0KCiAgYm9vbCBpc0Fzc2lnbmFibGVUbyhUeXBlTWlycm9yIG90aGVyKSB7CiAgICBpZiAob3RoZXIgPT0gY3VycmVudE1pcnJvclN5c3RlbSgpLmR5bmFtaWNUeXBlKSByZXR1cm4gdHJ1ZTsKICAgIGlmIChvdGhlciA9PSBjdXJyZW50TWlycm9yU3lzdGVtKCkudm9pZFR5cGUpIHJldHVybiBmYWxzZTsKICAgIGZpbmFsIG90aGVyUmVmbGVjdGVkVHlwZSA9IChvdGhlciBhcyBfTG9jYWxUeXBlTWlycm9yKS5fcmVmbGVjdGVkVHlwZTsKICAgIHJldHVybiBfc3VidHlwZVRlc3QoX3JlZmxlY3RlZFR5cGUsIG90aGVyUmVmbGVjdGVkVHlwZSkgfHwKICAgICAgICBfc3VidHlwZVRlc3Qob3RoZXJSZWZsZWN0ZWRUeXBlLCBfcmVmbGVjdGVkVHlwZSk7CiAgfQoKICBzdGF0aWMgRnVuY3Rpb25UeXBlTWlycm9yIF9uYXRpdmVSZWZlcmVudChyZWZsZWN0ZWRUeXBlKQogICAgICBuYXRpdmUgIlR5cGVkZWZNaXJyb3JfcmVmZXJlbnQiOwoKICBzdGF0aWMgVHlwZWRlZk1pcnJvciBfbmF0aXZlRGVjbGFyYXRpb24ocmVmbGVjdGVkVHlwZSkKICAgICAgbmF0aXZlICJUeXBlZGVmTWlycm9yX2RlY2xhcmF0aW9uIjsKfQoKU3ltYm9sIF9hc1NldHRlcihTeW1ib2wgZ2V0dGVyLCBMaWJyYXJ5TWlycm9yIGxpYnJhcnkpIHsKICB2YXIgdW53cmFwcGVkID0gTWlycm9yU3lzdGVtLmdldE5hbWUoZ2V0dGVyKTsKICByZXR1cm4gTWlycm9yU3lzdGVtLmdldFN5bWJvbCgnJHt1bndyYXBwZWR9PScsIGxpYnJhcnkpOwp9CgpjbGFzcyBfTG9jYWxMaWJyYXJ5TWlycm9yIGV4dGVuZHMgX0xvY2FsT2JqZWN0TWlycm9yIGltcGxlbWVudHMgTGlicmFyeU1pcnJvciB7CiAgZmluYWwgU3ltYm9sIHNpbXBsZU5hbWU7CiAgZmluYWwgVXJpIHVyaTsKCiAgX0xvY2FsTGlicmFyeU1pcnJvci5fKHJlZmxlY3RlZSwgU3RyaW5nIHNpbXBsZU5hbWUsIFN0cmluZyB1cmwpCiAgICAgIDogdGhpcy5zaW1wbGVOYW1lID0gX3Moc2ltcGxlTmFtZSksCiAgICAgICAgdGhpcy51cmkgPSBVcmkucGFyc2UodXJsKSwKICAgICAgICBzdXBlci5fKHJlZmxlY3RlZSk7CgogIC8vIFRoZSBzaW1wbGUgbmFtZSBhbmQgdGhlIHF1YWxpZmllZCBuYW1lIGFyZSB0aGUgc2FtZSBmb3IgYSBsaWJyYXJ5LgogIFN5bWJvbCBnZXQgcXVhbGlmaWVkTmFtZSA9PiBzaW1wbGVOYW1lOwoKICBEZWNsYXJhdGlvbk1pcnJvciBnZXQgb3duZXIgPT4gbnVsbDsKCiAgYm9vbCBnZXQgaXNQcml2YXRlID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzVG9wTGV2ZWwgPT4gZmFsc2U7CgogIFR5cGUgZ2V0IF9pbnN0YW50aWF0b3IgPT4gbnVsbDsKCiAgTWFwPFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+IF9kZWNsYXJhdGlvbnM7CiAgTWFwPFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+IGdldCBkZWNsYXJhdGlvbnMgewogICAgaWYgKF9kZWNsYXJhdGlvbnMgIT0gbnVsbCkgcmV0dXJuIF9kZWNsYXJhdGlvbnM7CgogICAgdmFyIGRlY2xzID0gbmV3IE1hcDxTeW1ib2wsIERlY2xhcmF0aW9uTWlycm9yPigpOwogICAgdmFyIG1lbWJlcnMgPSBfY29tcHV0ZU1lbWJlcnMoX3JlZmxlY3RlZSk7CiAgICBmb3IgKHZhciBtZW1iZXIgaW4gbWVtYmVycykgewogICAgICBkZWNsc1ttZW1iZXIuc2ltcGxlTmFtZV0gPSBtZW1iZXI7CiAgICB9CgogICAgcmV0dXJuIF9kZWNsYXJhdGlvbnMgPQogICAgICAgIG5ldyBVbm1vZGlmaWFibGVNYXBWaWV3PFN5bWJvbCwgRGVjbGFyYXRpb25NaXJyb3I+KGRlY2xzKTsKICB9CgogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbiB7CiAgICByZXR1cm4gX2xvY2F0aW9uKF9yZWZsZWN0ZWUpOwogIH0KCiAgTGlzdDxJbnN0YW5jZU1pcnJvcj4gZ2V0IG1ldGFkYXRhIHsKICAgIC8vIEdldCB0aGUgbWV0YWRhdGEgb2JqZWN0cywgY29udmVydCB0aGVtIGludG8gSW5zdGFuY2VNaXJyb3JzIHVzaW5nCiAgICAvLyByZWZsZWN0KCkgYW5kIHRoZW4gbWFrZSB0aGVtIGludG8gYSBEYXJ0IGxpc3QuCiAgICByZXR1cm4gbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PEluc3RhbmNlTWlycm9yPigKICAgICAgICBfbWV0YWRhdGEoX3JlZmxlY3RlZSkubWFwKHJlZmxlY3QpKTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIHJldHVybiB0aGlzLnJ1bnRpbWVUeXBlID09IG90aGVyLnJ1bnRpbWVUeXBlICYmCiAgICAgICAgdGhpcy5fcmVmbGVjdGVlID09IG90aGVyLl9yZWZsZWN0ZWU7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlID0+IHNpbXBsZU5hbWUuaGFzaENvZGU7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJMaWJyYXJ5TWlycm9yIG9uICcke19uKHNpbXBsZU5hbWUpfSciOwoKICB2YXIgX2NhY2hlZExpYnJhcnlEZXBlbmRlbmNpZXM7CiAgZ2V0IGxpYnJhcnlEZXBlbmRlbmNpZXMgewogICAgaWYgKF9jYWNoZWRMaWJyYXJ5RGVwZW5kZW5jaWVzID09IG51bGwpIHsKICAgICAgX2NhY2hlZExpYnJhcnlEZXBlbmRlbmNpZXMgPQogICAgICAgICAgbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PExpYnJhcnlEZXBlbmRlbmN5TWlycm9yPigKICAgICAgICAgICAgICBfbGlicmFyeURlcGVuZGVuY2llcyhfcmVmbGVjdGVlKS5jYXN0PExpYnJhcnlEZXBlbmRlbmN5TWlycm9yPigpKTsKICAgIH0KICAgIHJldHVybiBfY2FjaGVkTGlicmFyeURlcGVuZGVuY2llczsKICB9CgogIExpc3Q8ZHluYW1pYz4gX2xpYnJhcnlEZXBlbmRlbmNpZXMocmVmbGVjdGVlKQogICAgICBuYXRpdmUgJ0xpYnJhcnlNaXJyb3JfbGlicmFyeURlcGVuZGVuY2llcyc7CgogIF9pbnZva2UocmVmbGVjdGVlLCBtZW1iZXJOYW1lLCBhcmd1bWVudHMsIGFyZ3VtZW50TmFtZXMpCiAgICAgIG5hdGl2ZSAnTGlicmFyeU1pcnJvcl9pbnZva2UnOwoKICBfaW52b2tlR2V0dGVyKHJlZmxlY3RlZSwgZ2V0dGVyTmFtZSkgbmF0aXZlICdMaWJyYXJ5TWlycm9yX2ludm9rZUdldHRlcic7CgogIF9pbnZva2VTZXR0ZXIocmVmbGVjdGVlLCBzZXR0ZXJOYW1lLCB2YWx1ZSkKICAgICAgbmF0aXZlICdMaWJyYXJ5TWlycm9yX2ludm9rZVNldHRlcic7CgogIExpc3Q8ZHluYW1pYz4gX2NvbXB1dGVNZW1iZXJzKHJlZmxlY3RlZSkgbmF0aXZlICJMaWJyYXJ5TWlycm9yX21lbWJlcnMiOwp9CgpjbGFzcyBfTG9jYWxMaWJyYXJ5RGVwZW5kZW5jeU1pcnJvciBleHRlbmRzIF9Mb2NhbE1pcnJvcgogICAgaW1wbGVtZW50cyBMaWJyYXJ5RGVwZW5kZW5jeU1pcnJvciB7CiAgZmluYWwgTGlicmFyeU1pcnJvciBzb3VyY2VMaWJyYXJ5OwogIHZhciBfdGFyZ2V0TWlycm9yT3JQcmVmaXg7CiAgZmluYWwgTGlzdDxDb21iaW5hdG9yTWlycm9yPiBjb21iaW5hdG9yczsKICBmaW5hbCBTeW1ib2wgcHJlZml4OwogIGZpbmFsIGJvb2wgaXNJbXBvcnQ7CiAgZmluYWwgYm9vbCBpc0RlZmVycmVkOwogIGZpbmFsIExpc3Q8SW5zdGFuY2VNaXJyb3I+IG1ldGFkYXRhOwoKICBfTG9jYWxMaWJyYXJ5RGVwZW5kZW5jeU1pcnJvci5fKAogICAgICB0aGlzLnNvdXJjZUxpYnJhcnksCiAgICAgIHRoaXMuX3RhcmdldE1pcnJvck9yUHJlZml4LAogICAgICBMaXN0PGR5bmFtaWM+IG11dGFibGVDb21iaW5hdG9ycywKICAgICAgcHJlZml4U3RyaW5nLAogICAgICB0aGlzLmlzSW1wb3J0LAogICAgICB0aGlzLmlzRGVmZXJyZWQsCiAgICAgIExpc3Q8ZHluYW1pYz4gdW53cmFwcGVkTWV0YWRhdGEpCiAgICAgIDogcHJlZml4ID0gX3MocHJlZml4U3RyaW5nKSwKICAgICAgICBjb21iaW5hdG9ycyA9IG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxDb21iaW5hdG9yTWlycm9yPigKICAgICAgICAgICAgbXV0YWJsZUNvbWJpbmF0b3JzLmNhc3Q8Q29tYmluYXRvck1pcnJvcj4oKSksCiAgICAgICAgbWV0YWRhdGEgPSBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8SW5zdGFuY2VNaXJyb3I+KAogICAgICAgICAgICB1bndyYXBwZWRNZXRhZGF0YS5tYXAocmVmbGVjdCkpOwoKICBib29sIGdldCBpc0V4cG9ydCA9PiAhaXNJbXBvcnQ7CgogIExpYnJhcnlNaXJyb3IgZ2V0IHRhcmdldExpYnJhcnkgewogICAgaWYgKF90YXJnZXRNaXJyb3JPclByZWZpeCBpcyBfTG9jYWxMaWJyYXJ5TWlycm9yKSB7CiAgICAgIHJldHVybiBfdGFyZ2V0TWlycm9yT3JQcmVmaXg7CiAgICB9CiAgICB2YXIgbWlycm9yT3JOdWxsID0gX3RyeVVwZ3JhZGVQcmVmaXgoX3RhcmdldE1pcnJvck9yUHJlZml4KTsKICAgIGlmIChtaXJyb3JPck51bGwgIT0gbnVsbCkgewogICAgICBfdGFyZ2V0TWlycm9yT3JQcmVmaXggPSBtaXJyb3JPck51bGw7CiAgICB9CiAgICByZXR1cm4gbWlycm9yT3JOdWxsOwogIH0KCiAgRnV0dXJlPExpYnJhcnlNaXJyb3I+IGxvYWRMaWJyYXJ5KCkgewogICAgaWYgKF90YXJnZXRNaXJyb3JPclByZWZpeCBpcyBfTG9jYWxMaWJyYXJ5TWlycm9yKSB7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKF90YXJnZXRNaXJyb3JPclByZWZpeCk7CiAgICB9CiAgICB2YXIgc2F2ZWRQcmVmaXggPSBfdGFyZ2V0TWlycm9yT3JQcmVmaXg7CiAgICByZXR1cm4gc2F2ZWRQcmVmaXgubG9hZExpYnJhcnkoKS50aGVuKChfKSB7CiAgICAgIHJldHVybiBfdHJ5VXBncmFkZVByZWZpeChzYXZlZFByZWZpeCk7CiAgICB9KTsKICB9CgogIHN0YXRpYyBMaWJyYXJ5TWlycm9yIF90cnlVcGdyYWRlUHJlZml4KGxpYnJhcnlQcmVmaXgpCiAgICAgIG5hdGl2ZSAiTGlicmFyeU1pcnJvcl9mcm9tUHJlZml4IjsKCiAgU291cmNlTG9jYXRpb24gZ2V0IGxvY2F0aW9uID0+IG51bGw7Cn0KCmNsYXNzIF9Mb2NhbENvbWJpbmF0b3JNaXJyb3IgZXh0ZW5kcyBfTG9jYWxNaXJyb3IgaW1wbGVtZW50cyBDb21iaW5hdG9yTWlycm9yIHsKICBmaW5hbCBMaXN0PFN5bWJvbD4gaWRlbnRpZmllcnM7CiAgZmluYWwgYm9vbCBpc1Nob3c7CgogIF9Mb2NhbENvbWJpbmF0b3JNaXJyb3IuXyhpZGVudGlmaWVyU3RyaW5nLCB0aGlzLmlzU2hvdykKICAgICAgOiB0aGlzLmlkZW50aWZpZXJzID0KICAgICAgICAgICAgbmV3IFVubW9kaWZpYWJsZUxpc3RWaWV3PFN5bWJvbD4oPFN5bWJvbD5bX3MoaWRlbnRpZmllclN0cmluZyldKTsKCiAgYm9vbCBnZXQgaXNIaWRlID0+ICFpc1Nob3c7Cn0KCmNsYXNzIF9Mb2NhbE1ldGhvZE1pcnJvciBleHRlbmRzIF9Mb2NhbERlY2xhcmF0aW9uTWlycm9yCiAgICBpbXBsZW1lbnRzIE1ldGhvZE1pcnJvciB7CiAgZmluYWwgVHlwZSBfaW5zdGFudGlhdG9yOwogIGZpbmFsIGJvb2wgaXNTdGF0aWM7CiAgZmluYWwgaW50IF9raW5kRmxhZ3M7CgogIF9Mb2NhbE1ldGhvZE1pcnJvci5fKHJlZmxlY3RlZSwgU3RyaW5nIHNpbXBsZU5hbWUsIHRoaXMuX293bmVyLAogICAgICB0aGlzLl9pbnN0YW50aWF0b3IsIHRoaXMuaXNTdGF0aWMsIHRoaXMuX2tpbmRGbGFncykKICAgICAgOiBzdXBlci5fKHJlZmxlY3RlZSwgX3Moc2ltcGxlTmFtZSkpOwoKICBzdGF0aWMgY29uc3Qga0Fic3RyYWN0ID0gMDsKICBzdGF0aWMgY29uc3Qga0dldHRlciA9IDE7CiAgc3RhdGljIGNvbnN0IGtTZXR0ZXIgPSAyOwogIHN0YXRpYyBjb25zdCBrQ29uc3RydWN0b3IgPSAzOwogIHN0YXRpYyBjb25zdCBrQ29uc3RDdG9yID0gNDsKICBzdGF0aWMgY29uc3Qga0dlbmVyYXRpdmVDdG9yID0gNTsKICBzdGF0aWMgY29uc3Qga1JlZGlyZWN0aW5nQ3RvciA9IDY7CiAgc3RhdGljIGNvbnN0IGtGYWN0b3J5Q3RvciA9IDc7CiAgc3RhdGljIGNvbnN0IGtFeHRlcm5hbCA9IDg7CiAgc3RhdGljIGNvbnN0IGtTeW50aGV0aWMgPSA5OwoKICAvLyBUaGVzZSBvZmZzZXRzIG11Y2ggYmUga2VwdCBpbiBzeW5jIHdpdGggdGhvc2UgaW4gbWlycm9ycy5oLgogIGJvb2wgZ2V0IGlzQWJzdHJhY3QgPT4gMCAhPSAoX2tpbmRGbGFncyAmICgxIDw8IGtBYnN0cmFjdCkpOwogIGJvb2wgZ2V0IGlzR2V0dGVyID0+IDAgIT0gKF9raW5kRmxhZ3MgJiAoMSA8PCBrR2V0dGVyKSk7CiAgYm9vbCBnZXQgaXNTZXR0ZXIgPT4gMCAhPSAoX2tpbmRGbGFncyAmICgxIDw8IGtTZXR0ZXIpKTsKICBib29sIGdldCBpc0NvbnN0cnVjdG9yID0+IDAgIT0gKF9raW5kRmxhZ3MgJiAoMSA8PCBrQ29uc3RydWN0b3IpKTsKICBib29sIGdldCBpc0NvbnN0Q29uc3RydWN0b3IgPT4gMCAhPSAoX2tpbmRGbGFncyAmICgxIDw8IGtDb25zdEN0b3IpKTsKICBib29sIGdldCBpc0dlbmVyYXRpdmVDb25zdHJ1Y3RvciA9PgogICAgICAwICE9IChfa2luZEZsYWdzICYgKDEgPDwga0dlbmVyYXRpdmVDdG9yKSk7CiAgYm9vbCBnZXQgaXNSZWRpcmVjdGluZ0NvbnN0cnVjdG9yID0+CiAgICAgIDAgIT0gKF9raW5kRmxhZ3MgJiAoMSA8PCBrUmVkaXJlY3RpbmdDdG9yKSk7CiAgYm9vbCBnZXQgaXNGYWN0b3J5Q29uc3RydWN0b3IgPT4gMCAhPSAoX2tpbmRGbGFncyAmICgxIDw8IGtGYWN0b3J5Q3RvcikpOwogIGJvb2wgZ2V0IGlzRXh0ZXJuYWwgPT4gMCAhPSAoX2tpbmRGbGFncyAmICgxIDw8IGtFeHRlcm5hbCkpOwogIGJvb2wgZ2V0IGlzU3ludGhldGljID0+IDAgIT0gKF9raW5kRmxhZ3MgJiAoMSA8PCBrU3ludGhldGljKSk7CgogIHN0YXRpYyBjb25zdCBfb3BlcmF0b3JzID0gY29uc3QgWwogICAgIiUiLCAiJiIsICIqIiwgIisiLCAiLSIsICIvIiwgIjwiLCAiPDwiLCAvLwogICAgIjw9IiwgIj09IiwgIj4iLCAiPj0iLCAiPj4iLCAiW10iLCAiW109IiwKICAgICJeIiwgInwiLCAifiIsICJ1bmFyeS0iLCAifi8iLAogIF07CiAgYm9vbCBnZXQgaXNPcGVyYXRvciA9PiBfb3BlcmF0b3JzLmNvbnRhaW5zKF9uKHNpbXBsZU5hbWUpKTsKCiAgRGVjbGFyYXRpb25NaXJyb3IgX293bmVyOwogIERlY2xhcmF0aW9uTWlycm9yIGdldCBvd25lciB7CiAgICAvLyBGb3IgbmVzdGVkIGNsb3N1cmVzIGl0IGlzIHBvc3NpYmxlLCB0aGF0IHRoZSBtaXJyb3IgZm9yIHRoZSBvd25lciBoYXMgbm90CiAgICAvLyBiZWVuIGNyZWF0ZWQgeWV0LgogICAgaWYgKF9vd25lciA9PSBudWxsKSB7CiAgICAgIF9vd25lciA9IF9NZXRob2RNaXJyb3Jfb3duZXIoX3JlZmxlY3RlZSwgX2luc3RhbnRpYXRvcik7CiAgICB9CiAgICByZXR1cm4gX293bmVyOwogIH0KCiAgYm9vbCBnZXQgaXNQcml2YXRlID0+CiAgICAgIF9uKHNpbXBsZU5hbWUpLnN0YXJ0c1dpdGgoJ18nKSB8fCBfbihjb25zdHJ1Y3Rvck5hbWUpLnN0YXJ0c1dpdGgoJ18nKTsKCiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiBvd25lciBpcyBMaWJyYXJ5TWlycm9yOwoKICBUeXBlTWlycm9yIF9yZXR1cm5UeXBlOwogIFR5cGVNaXJyb3IgZ2V0IHJldHVyblR5cGUgewogICAgaWYgKF9yZXR1cm5UeXBlID09IG51bGwpIHsKICAgICAgaWYgKGlzQ29uc3RydWN0b3IpIHsKICAgICAgICBfcmV0dXJuVHlwZSA9IG93bmVyOwogICAgICB9IGVsc2UgewogICAgICAgIF9yZXR1cm5UeXBlID0KICAgICAgICAgICAgcmVmbGVjdFR5cGUoX01ldGhvZE1pcnJvcl9yZXR1cm5fdHlwZShfcmVmbGVjdGVlLCBfaW5zdGFudGlhdG9yKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBfcmV0dXJuVHlwZTsKICB9CgogIExpc3Q8UGFyYW1ldGVyTWlycm9yPiBfcGFyYW1ldGVyczsKICBMaXN0PFBhcmFtZXRlck1pcnJvcj4gZ2V0IHBhcmFtZXRlcnMgewogICAgaWYgKF9wYXJhbWV0ZXJzID09IG51bGwpIHsKICAgICAgX3BhcmFtZXRlcnMgPSBuZXcgVW5tb2RpZmlhYmxlTGlzdFZpZXc8UGFyYW1ldGVyTWlycm9yPigKICAgICAgICAgIF9NZXRob2RNaXJyb3JfcGFyYW1ldGVycyhfcmVmbGVjdGVlKS5jYXN0PFBhcmFtZXRlck1pcnJvcj4oKSk7CiAgICB9CiAgICByZXR1cm4gX3BhcmFtZXRlcnM7CiAgfQoKICBib29sIGdldCBpc1JlZ3VsYXJNZXRob2QgPT4gIWlzR2V0dGVyICYmICFpc1NldHRlciAmJiAhaXNDb25zdHJ1Y3RvcjsKCiAgU3ltYm9sIF9jb25zdHJ1Y3Rvck5hbWU7CiAgU3ltYm9sIGdldCBjb25zdHJ1Y3Rvck5hbWUgewogICAgaWYgKF9jb25zdHJ1Y3Rvck5hbWUgPT0gbnVsbCkgewogICAgICBpZiAoIWlzQ29uc3RydWN0b3IpIHsKICAgICAgICBfY29uc3RydWN0b3JOYW1lID0gX3MoJycpOwogICAgICB9IGVsc2UgewogICAgICAgIHZhciBwYXJ0cyA9IE1pcnJvclN5c3RlbS5nZXROYW1lKHNpbXBsZU5hbWUpLnNwbGl0KCcuJyk7CiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDIpIHsKICAgICAgICAgIHRocm93IG5ldyBfSW50ZXJuYWxNaXJyb3JFcnJvcigKICAgICAgICAgICAgICAnSW50ZXJuYWwgZXJyb3IgaW4gTWV0aG9kTWlycm9yLmNvbnN0cnVjdG9yTmFtZTogJwogICAgICAgICAgICAgICdtYWxmb3JtZWQgbmFtZSA8JHNpbXBsZU5hbWU+Jyk7CiAgICAgICAgfSBlbHNlIGlmIChwYXJ0cy5sZW5ndGggPT0gMikgewogICAgICAgICAgTGlicmFyeU1pcnJvciBkZWZpbmluZ0xpYnJhcnkgPSBvd25lci5vd25lcjsKICAgICAgICAgIF9jb25zdHJ1Y3Rvck5hbWUgPSBNaXJyb3JTeXN0ZW0uZ2V0U3ltYm9sKHBhcnRzWzFdLCBkZWZpbmluZ0xpYnJhcnkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfY29uc3RydWN0b3JOYW1lID0gX3MoJycpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIF9jb25zdHJ1Y3Rvck5hbWU7CiAgfQoKICBTdHJpbmcgZ2V0IHNvdXJjZSA9PiBfTWV0aG9kTWlycm9yX3NvdXJjZShfcmVmbGVjdGVlKTsKCiAgdm9pZCBfcGF0Y2hDb25zdHJ1Y3Rvck5hbWUob3duZXJOYW1lKSB7CiAgICB2YXIgY24gPSBfbihjb25zdHJ1Y3Rvck5hbWUpOwogICAgaWYgKGNuID09ICcnKSB7CiAgICAgIF9zaW1wbGVOYW1lID0gX3Mob3duZXJOYW1lKTsKICAgIH0gZWxzZSB7CiAgICAgIF9zaW1wbGVOYW1lID0gX3Mob3duZXJOYW1lICsgIi4iICsgY24pOwogICAgfQogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIk1ldGhvZE1pcnJvciBvbiAnJHtNaXJyb3JTeXN0ZW0uZ2V0TmFtZShzaW1wbGVOYW1lKX0nIjsKCiAgc3RhdGljIGR5bmFtaWMgX01ldGhvZE1pcnJvcl9vd25lcihyZWZsZWN0ZWUsIGluc3RhbnRpYXRvcikKICAgICAgbmF0aXZlICJNZXRob2RNaXJyb3Jfb3duZXIiOwoKICBzdGF0aWMgZHluYW1pYyBfTWV0aG9kTWlycm9yX3JldHVybl90eXBlKHJlZmxlY3RlZSwgaW5zdGFudGlhdG9yKQogICAgICBuYXRpdmUgIk1ldGhvZE1pcnJvcl9yZXR1cm5fdHlwZSI7CgogIExpc3Q8ZHluYW1pYz4gX01ldGhvZE1pcnJvcl9wYXJhbWV0ZXJzKHJlZmxlY3RlZSkKICAgICAgbmF0aXZlICJNZXRob2RNaXJyb3JfcGFyYW1ldGVycyI7CgogIHN0YXRpYyBTdHJpbmcgX01ldGhvZE1pcnJvcl9zb3VyY2UocmVmbGVjdGVlKSBuYXRpdmUgIk1ldGhvZE1pcnJvcl9zb3VyY2UiOwp9CgpjbGFzcyBfTG9jYWxWYXJpYWJsZU1pcnJvciBleHRlbmRzIF9Mb2NhbERlY2xhcmF0aW9uTWlycm9yCiAgICBpbXBsZW1lbnRzIFZhcmlhYmxlTWlycm9yIHsKICBmaW5hbCBEZWNsYXJhdGlvbk1pcnJvciBvd25lcjsKICBmaW5hbCBib29sIGlzU3RhdGljOwogIGZpbmFsIGJvb2wgaXNGaW5hbDsKICBmaW5hbCBib29sIGlzQ29uc3Q7CgogIF9Mb2NhbFZhcmlhYmxlTWlycm9yLl8ocmVmbGVjdGVlLCBTdHJpbmcgc2ltcGxlTmFtZSwgdGhpcy5vd25lciwgdGhpcy5fdHlwZSwKICAgICAgdGhpcy5pc1N0YXRpYywgdGhpcy5pc0ZpbmFsLCB0aGlzLmlzQ29uc3QpCiAgICAgIDogc3VwZXIuXyhyZWZsZWN0ZWUsIF9zKHNpbXBsZU5hbWUpKTsKCiAgYm9vbCBnZXQgaXNUb3BMZXZlbCA9PiBvd25lciBpcyBMaWJyYXJ5TWlycm9yOwoKICBUeXBlIGdldCBfaW5zdGFudGlhdG9yIHsKICAgIGZpbmFsIG8gPSBvd25lcjsgLy8gTm90ZTogbmVlZCBsb2NhbCB2YXJpYWJsZSBmb3IgcHJvbW90aW9uIHRvIGhhcHBlbi4KICAgIGlmIChvIGlzIF9Mb2NhbENsYXNzTWlycm9yKSB7CiAgICAgIHJldHVybiBvLl9pbnN0YW50aWF0b3I7CiAgICB9IGVsc2UgaWYgKG8gaXMgX0xvY2FsTWV0aG9kTWlycm9yKSB7CiAgICAgIHJldHVybiBvLl9pbnN0YW50aWF0b3I7CiAgICB9IGVsc2UgaWYgKG8gaXMgX0xvY2FsTGlicmFyeU1pcnJvcikgewogICAgICByZXR1cm4gby5faW5zdGFudGlhdG9yOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoInVuZXhwZWN0ZWQgb3duZXIgJHtvd25lcn0iKTsKICAgIH0KICB9CgogIFR5cGVNaXJyb3IgX3R5cGU7CiAgVHlwZU1pcnJvciBnZXQgdHlwZSB7CiAgICBpZiAoX3R5cGUgPT0gbnVsbCkgewogICAgICBfdHlwZSA9IHJlZmxlY3RUeXBlKF9WYXJpYWJsZU1pcnJvcl90eXBlKF9yZWZsZWN0ZWUsIF9pbnN0YW50aWF0b3IpKTsKICAgIH0KICAgIHJldHVybiBfdHlwZTsKICB9CgogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICJWYXJpYWJsZU1pcnJvciBvbiAnJHtNaXJyb3JTeXN0ZW0uZ2V0TmFtZShzaW1wbGVOYW1lKX0nIjsKCiAgc3RhdGljIF9WYXJpYWJsZU1pcnJvcl90eXBlKHJlZmxlY3RlZSwgaW5zdGFudGlhdG9yKQogICAgICBuYXRpdmUgIlZhcmlhYmxlTWlycm9yX3R5cGUiOwp9CgpjbGFzcyBfTG9jYWxQYXJhbWV0ZXJNaXJyb3IgZXh0ZW5kcyBfTG9jYWxWYXJpYWJsZU1pcnJvcgogICAgaW1wbGVtZW50cyBQYXJhbWV0ZXJNaXJyb3IgewogIGZpbmFsIGludCBfcG9zaXRpb247CiAgZmluYWwgYm9vbCBpc09wdGlvbmFsOwogIGZpbmFsIGJvb2wgaXNOYW1lZDsKICBmaW5hbCBMaXN0IF91bm1pcnJvcmVkTWV0YWRhdGE7CgogIF9Mb2NhbFBhcmFtZXRlck1pcnJvci5fKAogICAgICByZWZsZWN0ZWUsCiAgICAgIFN0cmluZyBzaW1wbGVOYW1lLAogICAgICBEZWNsYXJhdGlvbk1pcnJvciBvd25lciwKICAgICAgdGhpcy5fcG9zaXRpb24sCiAgICAgIHRoaXMuaXNPcHRpb25hbCwKICAgICAgdGhpcy5pc05hbWVkLAogICAgICBib29sIGlzRmluYWwsCiAgICAgIHRoaXMuX2RlZmF1bHRWYWx1ZVJlZmxlY3RlZSwKICAgICAgdGhpcy5fdW5taXJyb3JlZE1ldGFkYXRhKQogICAgICA6IHN1cGVyLl8oCiAgICAgICAgICAgIHJlZmxlY3RlZSwKICAgICAgICAgICAgc2ltcGxlTmFtZSwKICAgICAgICAgICAgb3duZXIsCiAgICAgICAgICAgIG51bGwsIC8vIFdlIG92ZXJyaWRlIHRoZSB0eXBlLgogICAgICAgICAgICBmYWxzZSwgLy8gaXNTdGF0aWMgZG9lcyBub3QgYXBwbHkuCiAgICAgICAgICAgIGlzRmluYWwsCiAgICAgICAgICAgIGZhbHNlIC8vIE5vdCBjb25zdC4KICAgICAgICAgICAgKTsKCiAgT2JqZWN0IF9kZWZhdWx0VmFsdWVSZWZsZWN0ZWU7CiAgSW5zdGFuY2VNaXJyb3IgX2RlZmF1bHRWYWx1ZTsKICBJbnN0YW5jZU1pcnJvciBnZXQgZGVmYXVsdFZhbHVlIHsKICAgIGlmICghaXNPcHRpb25hbCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChfZGVmYXVsdFZhbHVlID09IG51bGwpIHsKICAgICAgX2RlZmF1bHRWYWx1ZSA9IHJlZmxlY3QoX2RlZmF1bHRWYWx1ZVJlZmxlY3RlZSk7CiAgICB9CiAgICByZXR1cm4gX2RlZmF1bHRWYWx1ZTsKICB9CgogIGJvb2wgZ2V0IGhhc0RlZmF1bHRWYWx1ZSA9PiBfZGVmYXVsdFZhbHVlUmVmbGVjdGVlICE9IG51bGw7CgogIFNvdXJjZUxvY2F0aW9uIGdldCBsb2NhdGlvbiB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiUGFyYW1ldGVyTWlycm9yLmxvY2F0aW9uIHVuaW1wbGVtZW50ZWQiKTsKICB9CgogIExpc3Q8SW5zdGFuY2VNaXJyb3I+IGdldCBtZXRhZGF0YSB7CiAgICBpZiAoX3VubWlycm9yZWRNZXRhZGF0YSA9PSBudWxsKSByZXR1cm4gY29uc3QgPEluc3RhbmNlTWlycm9yPltdOwogICAgcmV0dXJuIG5ldyBVbm1vZGlmaWFibGVMaXN0VmlldzxJbnN0YW5jZU1pcnJvcj4oCiAgICAgICAgX3VubWlycm9yZWRNZXRhZGF0YS5tYXAocmVmbGVjdCkpOwogIH0KCiAgVHlwZU1pcnJvciBfdHlwZTsKICBUeXBlTWlycm9yIGdldCB0eXBlIHsKICAgIGlmIChfdHlwZSA9PSBudWxsKSB7CiAgICAgIF90eXBlID0gcmVmbGVjdFR5cGUoCiAgICAgICAgICBfUGFyYW1ldGVyTWlycm9yX3R5cGUoX3JlZmxlY3RlZSwgX3Bvc2l0aW9uLCBfaW5zdGFudGlhdG9yKSk7CiAgICB9CiAgICByZXR1cm4gX3R5cGU7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiUGFyYW1ldGVyTWlycm9yIG9uICcke19uKHNpbXBsZU5hbWUpfSciOwoKICBzdGF0aWMgVHlwZSBfUGFyYW1ldGVyTWlycm9yX3R5cGUoX3JlZmxlY3RlZSwgX3Bvc2l0aW9uLCBpbnN0YW50aWF0b3IpCiAgICAgIG5hdGl2ZSAiUGFyYW1ldGVyTWlycm9yX3R5cGUiOwp9CgpjbGFzcyBfU3BlY2lhbFR5cGVNaXJyb3IgZXh0ZW5kcyBfTG9jYWxNaXJyb3IKICAgIGltcGxlbWVudHMgVHlwZU1pcnJvciwgRGVjbGFyYXRpb25NaXJyb3IgewogIGZpbmFsIFN5bWJvbCBzaW1wbGVOYW1lOwoKICBfU3BlY2lhbFR5cGVNaXJyb3IuXyhTdHJpbmcgbmFtZSkgOiBzaW1wbGVOYW1lID0gX3MobmFtZSk7CgogIGJvb2wgZ2V0IGlzUHJpdmF0ZSA9PiBmYWxzZTsKICBib29sIGdldCBpc1RvcExldmVsID0+IHRydWU7CgogIERlY2xhcmF0aW9uTWlycm9yIGdldCBvd25lciA9PiBudWxsOwoKICBTb3VyY2VMb2NhdGlvbiBnZXQgbG9jYXRpb24gPT4gbnVsbDsKICBMaXN0PEluc3RhbmNlTWlycm9yPiBnZXQgbWV0YWRhdGEgPT4gY29uc3QgPEluc3RhbmNlTWlycm9yPltdOwoKICBib29sIGdldCBoYXNSZWZsZWN0ZWRUeXBlID0+IHNpbXBsZU5hbWUgPT0gI2R5bmFtaWM7CiAgVHlwZSBnZXQgcmVmbGVjdGVkVHlwZSB7CiAgICBpZiAoc2ltcGxlTmFtZSA9PSAjZHluYW1pYykgcmV0dXJuIGR5bmFtaWM7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigidm9pZCBoYXMgbm8gcmVmbGVjdGVkIHR5cGUiKTsKICB9CgogIExpc3Q8VHlwZVZhcmlhYmxlTWlycm9yPiBnZXQgdHlwZVZhcmlhYmxlcyA9PiBjb25zdCA8VHlwZVZhcmlhYmxlTWlycm9yPltdOwogIExpc3Q8VHlwZU1pcnJvcj4gZ2V0IHR5cGVBcmd1bWVudHMgPT4gY29uc3QgPFR5cGVNaXJyb3I+W107CgogIGJvb2wgZ2V0IGlzT3JpZ2luYWxEZWNsYXJhdGlvbiA9PiB0cnVlOwogIFR5cGVNaXJyb3IgZ2V0IG9yaWdpbmFsRGVjbGFyYXRpb24gPT4gdGhpczsKCiAgU3ltYm9sIGdldCBxdWFsaWZpZWROYW1lID0+IHNpbXBsZU5hbWU7CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyEgX1NwZWNpYWxUeXBlTWlycm9yKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0aGlzLnNpbXBsZU5hbWUgPT0gb3RoZXIuc2ltcGxlTmFtZTsKICB9CgogIGludCBnZXQgaGFzaENvZGUgPT4gc2ltcGxlTmFtZS5oYXNoQ29kZTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIlR5cGVNaXJyb3Igb24gJyR7X24oc2ltcGxlTmFtZSl9JyI7CgogIGJvb2wgaXNTdWJ0eXBlT2YoVHlwZU1pcnJvciBvdGhlcikgewogICAgcmV0dXJuIHNpbXBsZU5hbWUgPT0gI2R5bmFtaWMgfHwgb3RoZXIgaXMgX1NwZWNpYWxUeXBlTWlycm9yOwogIH0KCiAgYm9vbCBpc0Fzc2lnbmFibGVUbyhUeXBlTWlycm9yIG90aGVyKSB7CiAgICByZXR1cm4gc2ltcGxlTmFtZSA9PSAjZHluYW1pYyB8fCBvdGhlciBpcyBfU3BlY2lhbFR5cGVNaXJyb3I7CiAgfQp9CgpjbGFzcyBfTWlycm9ycyB7CiAgc3RhdGljIE1pcnJvclN5c3RlbSBfY3VycmVudE1pcnJvclN5c3RlbSA9IG5ldyBfTG9jYWxNaXJyb3JTeXN0ZW0oKTsKICBzdGF0aWMgTWlycm9yU3lzdGVtIGN1cnJlbnRNaXJyb3JTeXN0ZW0oKSB7CiAgICByZXR1cm4gX2N1cnJlbnRNaXJyb3JTeXN0ZW07CiAgfQoKICAvLyBDcmVhdGVzIGEgbmV3IGxvY2FsIG1pcnJvciBmb3Igc29tZSBPYmplY3QuCiAgc3RhdGljIEluc3RhbmNlTWlycm9yIHJlZmxlY3QoT2JqZWN0IHJlZmxlY3RlZSkgewogICAgcmV0dXJuIHJlZmxlY3RlZSBpcyBGdW5jdGlvbgogICAgICAgID8gbmV3IF9Mb2NhbENsb3N1cmVNaXJyb3IuXyhyZWZsZWN0ZWUpCiAgICAgICAgOiBuZXcgX0xvY2FsSW5zdGFuY2VNaXJyb3IuXyhyZWZsZWN0ZWUpOwogIH0KCiAgc3RhdGljIENsYXNzTWlycm9yIF9tYWtlTG9jYWxDbGFzc01pcnJvcihUeXBlIGtleSkKICAgICAgbmF0aXZlICJNaXJyb3JzX21ha2VMb2NhbENsYXNzTWlycm9yIjsKICBzdGF0aWMgVHlwZU1pcnJvciBfbWFrZUxvY2FsVHlwZU1pcnJvcihUeXBlIGtleSkKICAgICAgbmF0aXZlICJNaXJyb3JzX21ha2VMb2NhbFR5cGVNaXJyb3IiOwogIHN0YXRpYyBUeXBlIF9pbnN0YW50aWF0ZUdlbmVyaWNUeXBlKFR5cGUga2V5LCB0eXBlQXJndW1lbnRzKQogICAgICBuYXRpdmUgIk1pcnJvcnNfaW5zdGFudGlhdGVHZW5lcmljVHlwZSI7CgogIHN0YXRpYyBFeHBhbmRvPF9Mb2NhbENsYXNzTWlycm9yPiBfZGVjbGFyYXRpb25DYWNoZSA9CiAgICAgIG5ldyBFeHBhbmRvKCJDbGFzc01pcnJvciIpOwogIHN0YXRpYyBFeHBhbmRvPFR5cGVNaXJyb3I+IF9pbnN0YW50aWF0aW9uQ2FjaGUgPSBuZXcgRXhwYW5kbygiVHlwZU1pcnJvciIpOwoKICBzdGF0aWMgQ2xhc3NNaXJyb3IgcmVmbGVjdENsYXNzKFR5cGUga2V5KSB7CiAgICB2YXIgY2xhc3NNaXJyb3IgPSBfZGVjbGFyYXRpb25DYWNoZVtrZXldOwogICAgaWYgKGNsYXNzTWlycm9yID09IG51bGwpIHsKICAgICAgY2xhc3NNaXJyb3IgPSBfbWFrZUxvY2FsQ2xhc3NNaXJyb3Ioa2V5KTsKICAgICAgX2RlY2xhcmF0aW9uQ2FjaGVba2V5XSA9IGNsYXNzTWlycm9yOwogICAgICBpZiAoIWNsYXNzTWlycm9yLl9pc0dlbmVyaWMpIHsKICAgICAgICBfaW5zdGFudGlhdGlvbkNhY2hlW2tleV0gPSBjbGFzc01pcnJvcjsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGNsYXNzTWlycm9yOwogIH0KCiAgc3RhdGljIFR5cGVNaXJyb3IgcmVmbGVjdFR5cGUoVHlwZSBrZXksIFtMaXN0PFR5cGU+IHR5cGVBcmd1bWVudHNdKSB7CiAgICBpZiAodHlwZUFyZ3VtZW50cyAhPSBudWxsKSB7CiAgICAgIGtleSA9IF9pbnN0YW50aWF0ZVR5cGUoa2V5LCB0eXBlQXJndW1lbnRzKTsKICAgIH0KICAgIHZhciB0eXBlTWlycm9yID0gX2luc3RhbnRpYXRpb25DYWNoZVtrZXldOwogICAgaWYgKHR5cGVNaXJyb3IgPT0gbnVsbCkgewogICAgICB0eXBlTWlycm9yID0gX21ha2VMb2NhbFR5cGVNaXJyb3Ioa2V5KTsKICAgICAgX2luc3RhbnRpYXRpb25DYWNoZVtrZXldID0gdHlwZU1pcnJvcjsKICAgICAgaWYgKHR5cGVNaXJyb3IgaXMgX0xvY2FsQ2xhc3NNaXJyb3IgJiYgIXR5cGVNaXJyb3IuX2lzR2VuZXJpYykgewogICAgICAgIF9kZWNsYXJhdGlvbkNhY2hlW2tleV0gPSB0eXBlTWlycm9yOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHlwZU1pcnJvcjsKICB9CgogIHN0YXRpYyBUeXBlIF9pbnN0YW50aWF0ZVR5cGUoVHlwZSBrZXksIExpc3Q8VHlwZT4gdHlwZUFyZ3VtZW50cykgewogICAgaWYgKHR5cGVBcmd1bWVudHMuaXNFbXB0eSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSh0eXBlQXJndW1lbnRzLCAndHlwZUFyZ3VtZW50cycsCiAgICAgICAgICAnVHlwZSBhcmd1bWVudHMgbGlzdCBjYW5ub3QgYmUgZW1wdHkuJyk7CiAgICB9CiAgICByZXR1cm4gX2luc3RhbnRpYXRlR2VuZXJpY1R5cGUoa2V5LCB0eXBlQXJndW1lbnRzLnRvTGlzdChncm93YWJsZTogZmFsc2UpKTsKICB9Cn0KheQATk48ASEBTQErFSMdAgE9ARkhMAIBSyg9AgEdPykSKiUBMB9GFiMGTBYoBhknFwYtJxcGBB4UBCMUBBYrGQIBSQFIAUMBMEZAARIqKjI3IwhMFgYXBAFMARoeHCQGFQQBSAFKAgEyNy8BPhIUARcBFkoEAgExAUoaIwE7AR4BOAExKxobLwYTBAFMAgEzIRsXFxkRAVAmASAlICMoLSogLiABIjgBSC4BLSk0Nk8EASdBHQIBPSEgATcBL0gnASAdHiAdHB8lKydBAgFRPigvAUcBKQFFLz1QQy1ILjAXIS0sJwoGAVAEAS9EBAE9OxsEASQfEkkpFgYfPQYfMUszMhIGGQQCATYgOgEVGRlPGDQGEgQBOSEBHwFOARwsMQQBFU86NgQBLz8EATQ0GQQBOEUvTlBDLSxILjAXIS0sJwoGAVAEAT0mAU0BLiwBRgIBNx85ARoeHS8GFgQBOS5EBAFPAUYCASIbAgEzLx0WHBkZAT9MIS0BJBUWARcRFRkTFxcrIhMrLSwcATcbHSI+BhsEARpRHzAGGAQBGR0iQQYbBAEgGjtABhMEATgBHwEgIgQBKiooLSc0HyUVCDU6BiEEAR8cBAEYKiQxLjssTwg2MjoIGUMGHQQBHioWOR8gBigTRQQBDhoaF0MfNRcPKQgGEwQBHDAoNCtMKgo3LB9RH0U5PQwKCh1BBiEEAR4yKjQgMwgrJB4jICoKOCw3Ox9FOT4MCgofQQYjBAEwNDUBNgFAQSIpBgFIJSw1MwYBLjUGARtDBAFQKkERBAErLyJNPgg3AT0vEjNSJAgXSAYbBAEjJyIjTy8PP0cIBhsEAUoBKCETDSsGBAFPAU8vT0E9UEMtSC4wFyEtLCcKBgEnTQQBJkk2NS0EARw0LzdDBAErASdBPxlFBAEqQT9LPzoEASk/PhoYIS4YBhIEAUgBSAE0MwE4JwFENAFGAUQvATkkAT4pATsjAUoBUQFJPQE+KwE4KwIBOSQcUFIUATIBSxYaH0YGGAQBHCAfSQYYBAEaHh8UTAYYBAElKR9HJEwGGAQBKi81LSwYAUQBQi8BQS8BQi4CATwjFBYBQAEoARkdIkEGGwQBOAEgIgQBJkk2NS0EARw0LQQBKwIBPzZILAEcIBpFIAYTBAEeIAEaHh9OBhgEASYbSQQBKQFOPgEqLgFEARcqKh4EASsBJ0E/GUUEASpBP0s/OgQBQCkBOS8CAToxHRkkAUlALAEfARwgGjtABhMEASYkHTMwBhYEATcbHSI+BhsEAUoBKiETDTEGBAErLyI3TzESM1IkCAYbBAEjJyIjLw9QMyIIBhsEAT8BJ0E/GUUEASpBP0s/OgQBOycBOSoCATkwOwIBUBsRAUIqIxwBSCoBJwEfIAEiATA0NQE2LyIpBgEbQwQBICIEASZJNjUtBAEcNC0EASsBPwEiHC4jPVEGJwQBMDIBOyUBTAEuKwFLAgE5KSUdLBcXGScBIxoiKBQVFycjQjo9LQEiASQ4JAZBICwGGQQBKDg2Bi0wLQgEATgpAScCAVAiFQE6G04BHgIBOR4cFxgBQjosAR4cHCEfJCUhHh8BQT87O0VIJjInM0w/QQEkMC4jBT4BHCBRGRo/BhMEARhNATEBGh4fGx0PFk8IBhgEASUpHz9JBhgEAUgBGx8kHCMPQSAqQS8oN1ARJQoIBh0EATkBKiIUIw0uBgQBUAE+IwFEKQE0KAFOAgE7ICEXFhYBTzEsATEBG0siHioeKx4NPwYEARQYGUwGEgQBF0EBNyQCATkhFxkWIgEbERkfFhcUFCMgERcYEysvFSAPASEgJBcTBiE3BhoEAT4BIEoEASZGNSsEARQYGRtIBhIEAUEBSSUCAS4vGwE9AR8fAScBJ0EBNxswPgQBTj4BKi4BKgEcKBQGMAQBKwE8ASdCBAEqQgQCARFHLiEEATE0IS8xBAE1LTMsPy8BOCJOAS4uHzAsJTAIBhgEAUghMgYvHi4tRy0IBhcEAUUhRDMGUAQCASRkYXJ0Om1pcnJvcnMtcGF0Y2gvbWlycm9yc19pbXBsLmRhcnQ1b3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9taXJyb3JfcmVmZXJlbmNlLmRhcnSBuC8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJtaXJyb3JzX3BhdGNoLmRhcnQiOwoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfTWlycm9yUmVmZXJlbmNlIHsKICBmYWN0b3J5IF9NaXJyb3JSZWZlcmVuY2UuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIG5hdGl2ZSAiTWlycm9yUmVmZXJlbmNlX2VxdWFscyI7Cn0KEABOTjwBIQEaGS8ZBAE7AgEoZGFydDptaXJyb3JzLXBhdGNoL21pcnJvcl9yZWZlcmVuY2UuZGFydDJvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL21pcnJvcnNfcGF0Y2guZGFydIq6Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vLyBOb3RlOiB0aGUgVk0gY29uY2F0ZW5hdGVzIGFsbCBwYXRjaCBmaWxlcyBpbnRvIGEgc2luZ2xlIHBhdGNoIGZpbGUuIFRoaXMKLy8vIGZpbGUgaXMgdGhlIGZpcnN0IHBhdGNoIGluICJkYXJ0Ol9pbnRlcm5hbCIgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBpbXBvcnRzCi8vLyB1c2VkIGJ5IHBhdGNoZXMgb2YgdGhhdCBsaWJyYXJ5LiBXZSBwbGFuIHRvIGNoYW5nZSB0aGlzIHdoZW4gd2UgaGF2ZSBhCi8vLyBzaGFyZWQgZnJvbnQgZW5kIGFuZCBzaW1wbHkgdXNlIHBhcnRzLgoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgYXMgaW50ZXJuYWw7CgppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBzaG93IHBhdGNoOwoKaW1wb3J0ICJkYXJ0OmFzeW5jIiBzaG93IEZ1dHVyZTsKCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIiBzaG93IFVubW9kaWZpYWJsZUxpc3RWaWV3LCBVbm1vZGlmaWFibGVNYXBWaWV3OwoKLy8vIFRoZXNlIGFyZSB0aGUgYWRkaXRpb25hbCBwYXJ0cyBvZiB0aGlzIHBhdGNoIGxpYnJhcnk6Ci8vIHBhcnQgIm1pcnJvcnNfaW1wbC5kYXJ0IjsKLy8gcGFydCAibWlycm9yX3JlZmVyZW5jZS5kYXJ0IjsKCi8qKgogKiBSZXR1cm5zIGEgW01pcnJvclN5c3RlbV0gZm9yIHRoZSBjdXJyZW50IGlzb2xhdGUuCiAqLwpAcGF0Y2gKTWlycm9yU3lzdGVtIGN1cnJlbnRNaXJyb3JTeXN0ZW0oKSB7CiAgcmV0dXJuIF9NaXJyb3JzLmN1cnJlbnRNaXJyb3JTeXN0ZW0oKTsKfQoKLyoqCiAqIFJldHVybnMgYW4gW0luc3RhbmNlTWlycm9yXSBmb3Igc29tZSBEYXJ0IGxhbmd1YWdlIG9iamVjdC4KICoKICogVGhpcyBvbmx5IHdvcmtzIGlmIHRoaXMgbWlycm9yIHN5c3RlbSBpcyBhc3NvY2lhdGVkIHdpdGggdGhlCiAqIGN1cnJlbnQgcnVubmluZyBpc29sYXRlLgogKi8KQHBhdGNoCkluc3RhbmNlTWlycm9yIHJlZmxlY3QoT2JqZWN0IHJlZmxlY3RlZSkgewogIHJldHVybiBfTWlycm9ycy5yZWZsZWN0KHJlZmxlY3RlZSk7Cn0KCi8qKgogKiBSZXR1cm5zIGEgW0NsYXNzTWlycm9yXSBmb3IgdGhlIGNsYXNzIHJlcHJlc2VudGVkIGJ5IGEgRGFydAogKiBUeXBlIG9iamVjdC4KICoKICogVGhpcyBvbmx5IHdvcmtzIHdpdGggb2JqZWN0cyBsb2NhbCB0byB0aGUgY3VycmVudCBpc29sYXRlLgogKi8KQHBhdGNoCkNsYXNzTWlycm9yIHJlZmxlY3RDbGFzcyhUeXBlIGtleSkgewogIHJldHVybiBfTWlycm9ycy5yZWZsZWN0Q2xhc3Moa2V5KTsKfQoKQHBhdGNoClR5cGVNaXJyb3IgcmVmbGVjdFR5cGUoVHlwZSBrZXksIFtMaXN0PFR5cGU+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+YC4KICAgKi8KICBMaXN0PEZsb2F0NjR4Mj4gb3BlcmF0b3IgKyhMaXN0PEZsb2F0NjR4Mj4gb3RoZXIpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgW0Zsb2F0NjR4Mkxpc3RdIF92aWV3XyBvZiB0aGUgc3BlY2lmaWVkIHJlZ2lvbiBpbiBbYnVmZmVyXS4KICAgKgogICAqIENoYW5nZXMgaW4gdGhlIFtGbG9hdDY0eDJMaXN0XSB3aWxsIGJlIHZpc2libGUgaW4gdGhlIGJ5dGUKICAgKiBidWZmZXIgYW5kIHZpY2UgdmVyc2EuCiAgICogSWYgdGhlIFtvZmZzZXRJbkJ5dGVzXSBpbmRleCBvZiB0aGUgcmVnaW9uIGlzIG5vdCBzcGVjaWZpZWQsCiAgICogaXQgZGVmYXVsdHMgdG8gemVybyAodGhlIGZpcnN0IGJ5dGUgaW4gdGhlIGJ5dGUgYnVmZmVyKS4KICAgKiBJZiB0aGUgbGVuZ3RoIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIGBudWxsYCwKICAgKiB3aGljaCBpbmRpY2F0ZXMgdGhhdCB0aGUgdmlldyBleHRlbmRzIHRvIHRoZSBlbmQgb2YgdGhlIGJ5dGUgYnVmZmVyLgogICAqCiAgICogVGhyb3dzIFtSYW5nZUVycm9yXSBpZiBbb2Zmc2V0SW5CeXRlc10gb3IgW2xlbmd0aF0gYXJlIG5lZ2F0aXZlLCBvcgogICAqIGlmIFtvZmZzZXRJbkJ5dGVzXSArIChbbGVuZ3RoXSAqIGVsZW1lbnRTaXplSW5CeXRlcykgaXMgZ3JlYXRlciB0aGFuCiAgICogdGhlIGxlbmd0aCBvZiBbYnVmZmVyXS4KICAgKgogICAqIFRocm93cyBbQXJndW1lbnRFcnJvcl0gaWYgW29mZnNldEluQnl0ZXNdIGlzIG5vdCBhIG11bHRpcGxlIG9mCiAgICogW2J5dGVzUGVyRWxlbWVudF0uCiAgICovCiAgZmFjdG9yeSBGbG9hdDY0eDJMaXN0LnZpZXcoQnl0ZUJ1ZmZlciBidWZmZXIsCiAgICAgIFtpbnQgb2Zmc2V0SW5CeXRlcyA9IDAsIGludCBsZW5ndGhdKSB7CiAgICByZXR1cm4gYnVmZmVyLmFzRmxvYXQ2NHgyTGlzdChvZmZzZXRJbkJ5dGVzLCBsZW5ndGgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIG5ldyBsaXN0IGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIGJldHdlZW4gW3N0YXJ0XSBhbmQgW2VuZF0uCiAgICoKICAgKiBUaGUgbmV3IGxpc3QgaXMgYSBgRmxvYXQ2NHgyTGlzdGAgY29udGFpbmluZyB0aGUgZWxlbWVudHMgb2YgdGhpcwogICAqIGxpc3QgYXQgcG9zaXRpb25zIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBbc3RhcnRdIGFuZCBsZXNzIHRoYW4gW2VuZF0gaW4KICAgKiB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IG9jY3VyIGluIHRoaXMgbGlzdC4KICAgKgogICAqIGBgYGRhcnQKICAgKiB2YXIgbnVtYmVycyA9IEZsb2F0NjR4Mkxpc3QuZnJvbUxpc3QoWzAsIDEsIDIsIDMsIDRdKTsKICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykpOyAvLyBbMSwgMl0KICAgKiBwcmludChudW1iZXJzLnN1Ymxpc3QoMSwgMykucnVudGltZVR5cGUpOyAvLyBGbG9hdDY0eDJMaXN0CiAgICogYGBgCiAgICoKICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aGUgW2xlbmd0aF0gb2YgdGhpcyBsaXN0LgogICAqCiAgICogYGBgZGFydAogICAqIHByaW50KG51bWJlcnMuc3VibGlzdCgxKSk7IC8vIFsxLCAyLCAzLCA0XQogICAqIGBgYAogICAqCiAgICogVGhlIGBzdGFydGAgYW5kIGBlbmRgIHBvc2l0aW9ucyBtdXN0IHNhdGlzZnkgdGhlIHJlbGF0aW9ucwogICAqIDAg4omkIGBzdGFydGAg4omkIGBlbmRgIOKJpCBgdGhpcy5sZW5ndGhgCiAgICogSWYgYGVuZGAgaXMgZXF1YWwgdG8gYHN0YXJ0YCwgdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBpcyBlbXB0eS4KICAgKi8KICBGbG9hdDY0eDJMaXN0IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pOwoKICBzdGF0aWMgY29uc3QgaW50IGJ5dGVzUGVyRWxlbWVudCA9IDE2Owp9CgovKioKICogRmxvYXQzMng0IGltbXV0YWJsZSB2YWx1ZSB0eXBlIGFuZCBvcGVyYXRpb25zLgogKgogKiBGbG9hdDMyeDQgc3RvcmVzIDQgMzItYml0IGZsb2F0aW5nIHBvaW50IHZhbHVlcyBpbiAibGFuZXMiLgogKiBUaGUgbGFuZXMgYXJlICJ4IiwgInkiLCAieiIsIGFuZCAidyIgcmVzcGVjdGl2ZWx5LgogKi8KYWJzdHJhY3QgY2xhc3MgRmxvYXQzMng0IHsKICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0MzJ4NChkb3VibGUgeCwgZG91YmxlIHksIGRvdWJsZSB6LCBkb3VibGUgdyk7CiAgZXh0ZXJuYWwgZmFjdG9yeSBGbG9hdDMyeDQuc3BsYXQoZG91YmxlIHYpOwogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQzMng0Lnplcm8oKTsKICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0MzJ4NC5mcm9tSW50MzJ4NEJpdHMoSW50MzJ4NCB4KTsKCiAgLy8vIFNldHMgdGhlIHggYW5kIHkgbGFuZXMgdG8gdGhlaXIgcmVzcGVjdGl2ZSB2YWx1ZXMgaW4gW3ZdIGFuZCBzZXRzIHRoZSB6CiAgLy8vIGFuZCB3IGxhbmVzIHRvIDAuMC4KICBleHRlcm5hbCBmYWN0b3J5IEZsb2F0MzJ4NC5mcm9tRmxvYXQ2NHgyKEZsb2F0NjR4MiB2KTsKCiAgLy8vIEFkZGl0aW9uIG9wZXJhdG9yLgogIEZsb2F0MzJ4NCBvcGVyYXRvciArKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBOZWdhdGUgb3BlcmF0b3IuCiAgRmxvYXQzMng0IG9wZXJhdG9yIC0oKTsKCiAgLy8vIFN1YnRyYWN0aW9uIG9wZXJhdG9yLgogIEZsb2F0MzJ4NCBvcGVyYXRvciAtKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBNdWx0aXBsaWNhdGlvbiBvcGVyYXRvci4KICBGbG9hdDMyeDQgb3BlcmF0b3IgKihGbG9hdDMyeDQgb3RoZXIpOwoKICAvLy8gRGl2aXNpb24gb3BlcmF0b3IuCiAgRmxvYXQzMng0IG9wZXJhdG9yIC8oRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIFJlbGF0aW9uYWwgbGVzcyB0aGFuLgogIEludDMyeDQgbGVzc1RoYW4oRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIFJlbGF0aW9uYWwgbGVzcyB0aGFuIG9yIGVxdWFsLgogIEludDMyeDQgbGVzc1RoYW5PckVxdWFsKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBSZWxhdGlvbmFsIGdyZWF0ZXIgdGhhbi4KICBJbnQzMng0IGdyZWF0ZXJUaGFuKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBSZWxhdGlvbmFsIGdyZWF0ZXIgdGhhbiBvciBlcXVhbC4KICBJbnQzMng0IGdyZWF0ZXJUaGFuT3JFcXVhbChGbG9hdDMyeDQgb3RoZXIpOwoKICAvLy8gUmVsYXRpb25hbCBlcXVhbC4KICBJbnQzMng0IGVxdWFsKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBSZWxhdGlvbmFsIG5vdC1lcXVhbC4KICBJbnQzMng0IG5vdEVxdWFsKEZsb2F0MzJ4NCBvdGhlcik7CgogIC8vLyBSZXR1cm5zIGEgY29weSBvZiBbdGhpc10gZWFjaCBsYW5lIGJlaW5nIHNjYWxlZCBieSBbc10uCiAgLy8vIEVxdWl2YWxlbnQgdG8gdGhpcyAqIG5ldyBGbG9hdDMyeDQuc3BsYXQocykKICBGbG9hdDMyeDQgc2NhbGUoZG91YmxlIHMpOwoKICAvLy8gUmV0dXJucyB0aGUgbGFuZS13aXNlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgW0Zsb2F0MzJ4NF0uCiAgRmxvYXQzMng0IGFicygpOwoKICAvLy8gTGFuZS13aXNlIGNsYW1wIFt0aGlzXSB0byBiZSBpbiB0aGUgcmFuZ2UgW2xvd2VyTGltaXRdLVt1cHBlckxpbWl0XS4KICBGbG9hdDMyeDQgY2xhbXAoRmxvYXQzMng0IGxvd2VyTGltaXQsIEZsb2F0MzJ4NCB1cHBlckxpbWl0KTsKCiAgLy8vIEV4dHJhY3RlZCB4IHZhbHVlLgogIGRvdWJsZSBnZXQgeDsKCiAgLy8vIEV4dHJhY3RlZCB5IHZhbHVlLgogIGRvdWJsZSBnZXQgeTsKCiAgLy8vIEV4dHJhY3RlZCB6IHZhbHVlLgogIGRvdWJsZSBnZXQgejsKCiAgLy8vIEV4dHJhY3RlZCB3IHZhbHVlLgogIGRvdWJsZSBnZXQgdzsKCiAgLy8vIEV4dHJhY3QgdGhlIHNpZ24gYml0cyBmcm9tIGVhY2ggbGFuZSByZXR1cm4gdGhlbSBpbiB0aGUgZmlyc3QgNCBiaXRzLgogIC8vLyAieCIgbGFuZSBpcyBiaXQgMC4KICAvLy8gInkiIGxhbmUgaXMgYml0IDEuCiAgLy8vICJ6IiBsYW5lIGlzIGJpdCAyLgogIC8vLyAidyIgbGFuZSBpcyBiaXQgMy4KICBpbnQgZ2V0IHNpZ25NYXNrOwoKICAvLy8gTWFzayBwYXNzZWQgdG8gW3NodWZmbGVdIG9yIFtzaHVmZmxlTWl4XS4KICBzdGF0aWMgY29uc3QgaW50IHh4eHggPSAweDA7CiAgc3RhdGljIGNvbnN0IGludCB4eHh5ID0gMHg0MDsKICBzdGF0aWMgY29uc3QgaW50IHh4eHogPSAweDgwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh4dyA9IDB4QzA7CiAgc3RhdGljIGNvbnN0IGludCB4eHl4ID0gMHgxMDsKICBzdGF0aWMgY29uc3QgaW50IHh4eXkgPSAweDUwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh5eiA9IDB4OTA7CiAgc3RhdGljIGNvbnN0IGludCB4eHl3ID0gMHhEMDsKICBzdGF0aWMgY29uc3QgaW50IHh4enggPSAweDIwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh6eSA9IDB4NjA7CiAgc3RhdGljIGNvbnN0IGludCB4eHp6ID0gMHhBMDsKICBzdGF0aWMgY29uc3QgaW50IHh4encgPSAweEUwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh3eCA9IDB4MzA7CiAgc3RhdGljIGNvbnN0IGludCB4eHd5ID0gMHg3MDsKICBzdGF0aWMgY29uc3QgaW50IHh4d3ogPSAweEIwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh3dyA9IDB4RjA7CiAgc3RhdGljIGNvbnN0IGludCB4eXh4ID0gMHg0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl4eSA9IDB4NDQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXh6ID0gMHg4NDsKICBzdGF0aWMgY29uc3QgaW50IHh5eHcgPSAweEM0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl5eCA9IDB4MTQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXl5ID0gMHg1NDsKICBzdGF0aWMgY29uc3QgaW50IHh5eXogPSAweDk0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl5dyA9IDB4RDQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXp4ID0gMHgyNDsKICBzdGF0aWMgY29uc3QgaW50IHh5enkgPSAweDY0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl6eiA9IDB4QTQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXp3ID0gMHhFNDsKICBzdGF0aWMgY29uc3QgaW50IHh5d3ggPSAweDM0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl3eSA9IDB4NzQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXd6ID0gMHhCNDsKICBzdGF0aWMgY29uc3QgaW50IHh5d3cgPSAweEY0OwogIHN0YXRpYyBjb25zdCBpbnQgeHp4eCA9IDB4ODsKICBzdGF0aWMgY29uc3QgaW50IHh6eHkgPSAweDQ4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp4eiA9IDB4ODg7CiAgc3RhdGljIGNvbnN0IGludCB4enh3ID0gMHhDODsKICBzdGF0aWMgY29uc3QgaW50IHh6eXggPSAweDE4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp5eSA9IDB4NTg7CiAgc3RhdGljIGNvbnN0IGludCB4enl6ID0gMHg5ODsKICBzdGF0aWMgY29uc3QgaW50IHh6eXcgPSAweEQ4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp6eCA9IDB4Mjg7CiAgc3RhdGljIGNvbnN0IGludCB4enp5ID0gMHg2ODsKICBzdGF0aWMgY29uc3QgaW50IHh6enogPSAweEE4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp6dyA9IDB4RTg7CiAgc3RhdGljIGNvbnN0IGludCB4end4ID0gMHgzODsKICBzdGF0aWMgY29uc3QgaW50IHh6d3kgPSAweDc4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp3eiA9IDB4Qjg7CiAgc3RhdGljIGNvbnN0IGludCB4end3ID0gMHhGODsKICBzdGF0aWMgY29uc3QgaW50IHh3eHggPSAweEM7CiAgc3RhdGljIGNvbnN0IGludCB4d3h5ID0gMHg0QzsKICBzdGF0aWMgY29uc3QgaW50IHh3eHogPSAweDhDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd4dyA9IDB4Q0M7CiAgc3RhdGljIGNvbnN0IGludCB4d3l4ID0gMHgxQzsKICBzdGF0aWMgY29uc3QgaW50IHh3eXkgPSAweDVDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd5eiA9IDB4OUM7CiAgc3RhdGljIGNvbnN0IGludCB4d3l3ID0gMHhEQzsKICBzdGF0aWMgY29uc3QgaW50IHh3enggPSAweDJDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd6eSA9IDB4NkM7CiAgc3RhdGljIGNvbnN0IGludCB4d3p6ID0gMHhBQzsKICBzdGF0aWMgY29uc3QgaW50IHh3encgPSAweEVDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd3eCA9IDB4M0M7CiAgc3RhdGljIGNvbnN0IGludCB4d3d5ID0gMHg3QzsKICBzdGF0aWMgY29uc3QgaW50IHh3d3ogPSAweEJDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd3dyA9IDB4RkM7CiAgc3RhdGljIGNvbnN0IGludCB5eHh4ID0gMHgxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh4eSA9IDB4NDE7CiAgc3RhdGljIGNvbnN0IGludCB5eHh6ID0gMHg4MTsKICBzdGF0aWMgY29uc3QgaW50IHl4eHcgPSAweEMxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh5eCA9IDB4MTE7CiAgc3RhdGljIGNvbnN0IGludCB5eHl5ID0gMHg1MTsKICBzdGF0aWMgY29uc3QgaW50IHl4eXogPSAweDkxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh5dyA9IDB4RDE7CiAgc3RhdGljIGNvbnN0IGludCB5eHp4ID0gMHgyMTsKICBzdGF0aWMgY29uc3QgaW50IHl4enkgPSAweDYxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh6eiA9IDB4QTE7CiAgc3RhdGljIGNvbnN0IGludCB5eHp3ID0gMHhFMTsKICBzdGF0aWMgY29uc3QgaW50IHl4d3ggPSAweDMxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh3eSA9IDB4NzE7CiAgc3RhdGljIGNvbnN0IGludCB5eHd6ID0gMHhCMTsKICBzdGF0aWMgY29uc3QgaW50IHl4d3cgPSAweEYxOwogIHN0YXRpYyBjb25zdCBpbnQgeXl4eCA9IDB4NTsKICBzdGF0aWMgY29uc3QgaW50IHl5eHkgPSAweDQ1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl4eiA9IDB4ODU7CiAgc3RhdGljIGNvbnN0IGludCB5eXh3ID0gMHhDNTsKICBzdGF0aWMgY29uc3QgaW50IHl5eXggPSAweDE1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl5eSA9IDB4NTU7CiAgc3RhdGljIGNvbnN0IGludCB5eXl6ID0gMHg5NTsKICBzdGF0aWMgY29uc3QgaW50IHl5eXcgPSAweEQ1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl6eCA9IDB4MjU7CiAgc3RhdGljIGNvbnN0IGludCB5eXp5ID0gMHg2NTsKICBzdGF0aWMgY29uc3QgaW50IHl5enogPSAweEE1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl6dyA9IDB4RTU7CiAgc3RhdGljIGNvbnN0IGludCB5eXd4ID0gMHgzNTsKICBzdGF0aWMgY29uc3QgaW50IHl5d3kgPSAweDc1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl3eiA9IDB4QjU7CiAgc3RhdGljIGNvbnN0IGludCB5eXd3ID0gMHhGNTsKICBzdGF0aWMgY29uc3QgaW50IHl6eHggPSAweDk7CiAgc3RhdGljIGNvbnN0IGludCB5enh5ID0gMHg0OTsKICBzdGF0aWMgY29uc3QgaW50IHl6eHogPSAweDg5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp4dyA9IDB4Qzk7CiAgc3RhdGljIGNvbnN0IGludCB5enl4ID0gMHgxOTsKICBzdGF0aWMgY29uc3QgaW50IHl6eXkgPSAweDU5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp5eiA9IDB4OTk7CiAgc3RhdGljIGNvbnN0IGludCB5enl3ID0gMHhEOTsKICBzdGF0aWMgY29uc3QgaW50IHl6enggPSAweDI5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp6eSA9IDB4Njk7CiAgc3RhdGljIGNvbnN0IGludCB5enp6ID0gMHhBOTsKICBzdGF0aWMgY29uc3QgaW50IHl6encgPSAweEU5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp3eCA9IDB4Mzk7CiAgc3RhdGljIGNvbnN0IGludCB5end5ID0gMHg3OTsKICBzdGF0aWMgY29uc3QgaW50IHl6d3ogPSAweEI5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp3dyA9IDB4Rjk7CiAgc3RhdGljIGNvbnN0IGludCB5d3h4ID0gMHhEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd4eSA9IDB4NEQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3h6ID0gMHg4RDsKICBzdGF0aWMgY29uc3QgaW50IHl3eHcgPSAweENEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd5eCA9IDB4MUQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3l5ID0gMHg1RDsKICBzdGF0aWMgY29uc3QgaW50IHl3eXogPSAweDlEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd5dyA9IDB4REQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3p4ID0gMHgyRDsKICBzdGF0aWMgY29uc3QgaW50IHl3enkgPSAweDZEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd6eiA9IDB4QUQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3p3ID0gMHhFRDsKICBzdGF0aWMgY29uc3QgaW50IHl3d3ggPSAweDNEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd3eSA9IDB4N0Q7CiAgc3RhdGljIGNvbnN0IGludCB5d3d6ID0gMHhCRDsKICBzdGF0aWMgY29uc3QgaW50IHl3d3cgPSAweEZEOwogIHN0YXRpYyBjb25zdCBpbnQgenh4eCA9IDB4MjsKICBzdGF0aWMgY29uc3QgaW50IHp4eHkgPSAweDQyOwogIHN0YXRpYyBjb25zdCBpbnQgenh4eiA9IDB4ODI7CiAgc3RhdGljIGNvbnN0IGludCB6eHh3ID0gMHhDMjsKICBzdGF0aWMgY29uc3QgaW50IHp4eXggPSAweDEyOwogIHN0YXRpYyBjb25zdCBpbnQgenh5eSA9IDB4NTI7CiAgc3RhdGljIGNvbnN0IGludCB6eHl6ID0gMHg5MjsKICBzdGF0aWMgY29uc3QgaW50IHp4eXcgPSAweEQyOwogIHN0YXRpYyBjb25zdCBpbnQgenh6eCA9IDB4MjI7CiAgc3RhdGljIGNvbnN0IGludCB6eHp5ID0gMHg2MjsKICBzdGF0aWMgY29uc3QgaW50IHp4enogPSAweEEyOwogIHN0YXRpYyBjb25zdCBpbnQgenh6dyA9IDB4RTI7CiAgc3RhdGljIGNvbnN0IGludCB6eHd4ID0gMHgzMjsKICBzdGF0aWMgY29uc3QgaW50IHp4d3kgPSAweDcyOwogIHN0YXRpYyBjb25zdCBpbnQgenh3eiA9IDB4QjI7CiAgc3RhdGljIGNvbnN0IGludCB6eHd3ID0gMHhGMjsKICBzdGF0aWMgY29uc3QgaW50IHp5eHggPSAweDY7CiAgc3RhdGljIGNvbnN0IGludCB6eXh5ID0gMHg0NjsKICBzdGF0aWMgY29uc3QgaW50IHp5eHogPSAweDg2OwogIHN0YXRpYyBjb25zdCBpbnQgenl4dyA9IDB4QzY7CiAgc3RhdGljIGNvbnN0IGludCB6eXl4ID0gMHgxNjsKICBzdGF0aWMgY29uc3QgaW50IHp5eXkgPSAweDU2OwogIHN0YXRpYyBjb25zdCBpbnQgenl5eiA9IDB4OTY7CiAgc3RhdGljIGNvbnN0IGludCB6eXl3ID0gMHhENjsKICBzdGF0aWMgY29uc3QgaW50IHp5enggPSAweDI2OwogIHN0YXRpYyBjb25zdCBpbnQgenl6eSA9IDB4NjY7CiAgc3RhdGljIGNvbnN0IGludCB6eXp6ID0gMHhBNjsKICBzdGF0aWMgY29uc3QgaW50IHp5encgPSAweEU2OwogIHN0YXRpYyBjb25zdCBpbnQgenl3eCA9IDB4MzY7CiAgc3RhdGljIGNvbnN0IGludCB6eXd5ID0gMHg3NjsKICBzdGF0aWMgY29uc3QgaW50IHp5d3ogPSAweEI2OwogIHN0YXRpYyBjb25zdCBpbnQgenl3dyA9IDB4RjY7CiAgc3RhdGljIGNvbnN0IGludCB6enh4ID0gMHhBOwogIHN0YXRpYyBjb25zdCBpbnQgenp4eSA9IDB4NEE7CiAgc3RhdGljIGNvbnN0IGludCB6enh6ID0gMHg4QTsKICBzdGF0aWMgY29uc3QgaW50IHp6eHcgPSAweENBOwogIHN0YXRpYyBjb25zdCBpbnQgenp5eCA9IDB4MUE7CiAgc3RhdGljIGNvbnN0IGludCB6enl5ID0gMHg1QTsKICBzdGF0aWMgY29uc3QgaW50IHp6eXogPSAweDlBOwogIHN0YXRpYyBjb25zdCBpbnQgenp5dyA9IDB4REE7CiAgc3RhdGljIGNvbnN0IGludCB6enp4ID0gMHgyQTsKICBzdGF0aWMgY29uc3QgaW50IHp6enkgPSAweDZBOwogIHN0YXRpYyBjb25zdCBpbnQgenp6eiA9IDB4QUE7CiAgc3RhdGljIGNvbnN0IGludCB6enp3ID0gMHhFQTsKICBzdGF0aWMgY29uc3QgaW50IHp6d3ggPSAweDNBOwogIHN0YXRpYyBjb25zdCBpbnQgenp3eSA9IDB4N0E7CiAgc3RhdGljIGNvbnN0IGludCB6end6ID0gMHhCQTsKICBzdGF0aWMgY29uc3QgaW50IHp6d3cgPSAweEZBOwogIHN0YXRpYyBjb25zdCBpbnQgend4eCA9IDB4RTsKICBzdGF0aWMgY29uc3QgaW50IHp3eHkgPSAweDRFOwogIHN0YXRpYyBjb25zdCBpbnQgend4eiA9IDB4OEU7CiAgc3RhdGljIGNvbnN0IGludCB6d3h3ID0gMHhDRTsKICBzdGF0aWMgY29uc3QgaW50IHp3eXggPSAweDFFOwogIHN0YXRpYyBjb25zdCBpbnQgend5eSA9IDB4NUU7CiAgc3RhdGljIGNvbnN0IGludCB6d3l6ID0gMHg5RTsKICBzdGF0aWMgY29uc3QgaW50IHp3eXcgPSAweERFOwogIHN0YXRpYyBjb25zdCBpbnQgend6eCA9IDB4MkU7CiAgc3RhdGljIGNvbnN0IGludCB6d3p5ID0gMHg2RTsKICBzdGF0aWMgY29uc3QgaW50IHp3enogPSAweEFFOwogIHN0YXRpYyBjb25zdCBpbnQgend6dyA9IDB4RUU7CiAgc3RhdGljIGNvbnN0IGludCB6d3d4ID0gMHgzRTsKICBzdGF0aWMgY29uc3QgaW50IHp3d3kgPSAweDdFOwogIHN0YXRpYyBjb25zdCBpbnQgend3eiA9IDB4QkU7CiAgc3RhdGljIGNvbnN0IGludCB6d3d3ID0gMHhGRTsKICBzdGF0aWMgY29uc3QgaW50IHd4eHggPSAweDM7CiAgc3RhdGljIGNvbnN0IGludCB3eHh5ID0gMHg0MzsKICBzdGF0aWMgY29uc3QgaW50IHd4eHogPSAweDgzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h4dyA9IDB4QzM7CiAgc3RhdGljIGNvbnN0IGludCB3eHl4ID0gMHgxMzsKICBzdGF0aWMgY29uc3QgaW50IHd4eXkgPSAweDUzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h5eiA9IDB4OTM7CiAgc3RhdGljIGNvbnN0IGludCB3eHl3ID0gMHhEMzsKICBzdGF0aWMgY29uc3QgaW50IHd4enggPSAweDIzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h6eSA9IDB4NjM7CiAgc3RhdGljIGNvbnN0IGludCB3eHp6ID0gMHhBMzsKICBzdGF0aWMgY29uc3QgaW50IHd4encgPSAweEUzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h3eCA9IDB4MzM7CiAgc3RhdGljIGNvbnN0IGludCB3eHd5ID0gMHg3MzsKICBzdGF0aWMgY29uc3QgaW50IHd4d3ogPSAweEIzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h3dyA9IDB4RjM7CiAgc3RhdGljIGNvbnN0IGludCB3eXh4ID0gMHg3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l4eSA9IDB4NDc7CiAgc3RhdGljIGNvbnN0IGludCB3eXh6ID0gMHg4NzsKICBzdGF0aWMgY29uc3QgaW50IHd5eHcgPSAweEM3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l5eCA9IDB4MTc7CiAgc3RhdGljIGNvbnN0IGludCB3eXl5ID0gMHg1NzsKICBzdGF0aWMgY29uc3QgaW50IHd5eXogPSAweDk3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l5dyA9IDB4RDc7CiAgc3RhdGljIGNvbnN0IGludCB3eXp4ID0gMHgyNzsKICBzdGF0aWMgY29uc3QgaW50IHd5enkgPSAweDY3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l6eiA9IDB4QTc7CiAgc3RhdGljIGNvbnN0IGludCB3eXp3ID0gMHhFNzsKICBzdGF0aWMgY29uc3QgaW50IHd5d3ggPSAweDM3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l3eSA9IDB4Nzc7CiAgc3RhdGljIGNvbnN0IGludCB3eXd6ID0gMHhCNzsKICBzdGF0aWMgY29uc3QgaW50IHd5d3cgPSAweEY3OwogIHN0YXRpYyBjb25zdCBpbnQgd3p4eCA9IDB4QjsKICBzdGF0aWMgY29uc3QgaW50IHd6eHkgPSAweDRCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p4eiA9IDB4OEI7CiAgc3RhdGljIGNvbnN0IGludCB3enh3ID0gMHhDQjsKICBzdGF0aWMgY29uc3QgaW50IHd6eXggPSAweDFCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p5eSA9IDB4NUI7CiAgc3RhdGljIGNvbnN0IGludCB3enl6ID0gMHg5QjsKICBzdGF0aWMgY29uc3QgaW50IHd6eXcgPSAweERCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p6eCA9IDB4MkI7CiAgc3RhdGljIGNvbnN0IGludCB3enp5ID0gMHg2QjsKICBzdGF0aWMgY29uc3QgaW50IHd6enogPSAweEFCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p6dyA9IDB4RUI7CiAgc3RhdGljIGNvbnN0IGludCB3end4ID0gMHgzQjsKICBzdGF0aWMgY29uc3QgaW50IHd6d3kgPSAweDdCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p3eiA9IDB4QkI7CiAgc3RhdGljIGNvbnN0IGludCB3end3ID0gMHhGQjsKICBzdGF0aWMgY29uc3QgaW50IHd3eHggPSAweEY7CiAgc3RhdGljIGNvbnN0IGludCB3d3h5ID0gMHg0RjsKICBzdGF0aWMgY29uc3QgaW50IHd3eHogPSAweDhGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d4dyA9IDB4Q0Y7CiAgc3RhdGljIGNvbnN0IGludCB3d3l4ID0gMHgxRjsKICBzdGF0aWMgY29uc3QgaW50IHd3eXkgPSAweDVGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d5eiA9IDB4OUY7CiAgc3RhdGljIGNvbnN0IGludCB3d3l3ID0gMHhERjsKICBzdGF0aWMgY29uc3QgaW50IHd3enggPSAweDJGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d6eSA9IDB4NkY7CiAgc3RhdGljIGNvbnN0IGludCB3d3p6ID0gMHhBRjsKICBzdGF0aWMgY29uc3QgaW50IHd3encgPSAweEVGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d3eCA9IDB4M0Y7CiAgc3RhdGljIGNvbnN0IGludCB3d3d5ID0gMHg3RjsKICBzdGF0aWMgY29uc3QgaW50IHd3d3ogPSAweEJGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d3dyA9IDB4RkY7CgogIC8vLyBTaHVmZmxlIHRoZSBsYW5lIHZhbHVlcy4gW21hc2tdIG11c3QgYmUgb25lIG9mIHRoZSAyNTYgc2h1ZmZsZSBjb25zdGFudHMuCiAgRmxvYXQzMng0IHNodWZmbGUoaW50IG1hc2spOwoKICAvLy8gU2h1ZmZsZSB0aGUgbGFuZSB2YWx1ZXMgaW4gW3RoaXNdIGFuZCBbb3RoZXJdLiBUaGUgcmV0dXJuZWQKICAvLy8gRmxvYXQzMng0IHdpbGwgaGF2ZSBYWSBsYW5lcyBmcm9tIFt0aGlzXSBhbmQgWlcgbGFuZXMgZnJvbSBbb3RoZXJdLgogIC8vLyBVc2VzIHRoZSBzYW1lIFttYXNrXSBhcyBbc2h1ZmZsZV0uCiAgRmxvYXQzMng0IHNodWZmbGVNaXgoRmxvYXQzMng0IG90aGVyLCBpbnQgbWFzayk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtGbG9hdDMyeDRdIGNvcGllZCBmcm9tIFt0aGlzXSB3aXRoIGEgbmV3IHggdmFsdWUuCiAgRmxvYXQzMng0IHdpdGhYKGRvdWJsZSB4KTsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0Zsb2F0MzJ4NF0gY29waWVkIGZyb20gW3RoaXNdIHdpdGggYSBuZXcgeSB2YWx1ZS4KICBGbG9hdDMyeDQgd2l0aFkoZG91YmxlIHkpOwoKICAvLy8gUmV0dXJucyBhIG5ldyBbRmxvYXQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB6IHZhbHVlLgogIEZsb2F0MzJ4NCB3aXRoWihkb3VibGUgeik7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtGbG9hdDMyeDRdIGNvcGllZCBmcm9tIFt0aGlzXSB3aXRoIGEgbmV3IHcgdmFsdWUuCiAgRmxvYXQzMng0IHdpdGhXKGRvdWJsZSB3KTsKCiAgLy8vIFJldHVybnMgdGhlIGxhbmUtd2lzZSBtaW5pbXVtIHZhbHVlIGluIFt0aGlzXSBvciBbb3RoZXJdLgogIEZsb2F0MzJ4NCBtaW4oRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIFJldHVybnMgdGhlIGxhbmUtd2lzZSBtYXhpbXVtIHZhbHVlIGluIFt0aGlzXSBvciBbb3RoZXJdLgogIEZsb2F0MzJ4NCBtYXgoRmxvYXQzMng0IG90aGVyKTsKCiAgLy8vIFJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIFt0aGlzXS4KICBGbG9hdDMyeDQgc3FydCgpOwoKICAvLy8gUmV0dXJucyB0aGUgcmVjaXByb2NhbCBvZiBbdGhpc10uCiAgRmxvYXQzMng0IHJlY2lwcm9jYWwoKTsKCiAgLy8vIFJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIHRoZSByZWNpcHJvY2FsIG9mIFt0aGlzXS4KICBGbG9hdDMyeDQgcmVjaXByb2NhbFNxcnQoKTsKfQoKLyoqCiAqIEludDMyeDQgYW5kIG9wZXJhdGlvbnMuCiAqCiAqIEludDMyeDQgc3RvcmVzIDQgMzItYml0IGJpdC1tYXNrcyBpbiAibGFuZXMiLgogKiBUaGUgbGFuZXMgYXJlICJ4IiwgInkiLCAieiIsIGFuZCAidyIgcmVzcGVjdGl2ZWx5LgogKi8KYWJzdHJhY3QgY2xhc3MgSW50MzJ4NCB7CiAgZXh0ZXJuYWwgZmFjdG9yeSBJbnQzMng0KGludCB4LCBpbnQgeSwgaW50IHosIGludCB3KTsKICBleHRlcm5hbCBmYWN0b3J5IEludDMyeDQuYm9vbChib29sIHgsIGJvb2wgeSwgYm9vbCB6LCBib29sIHcpOwogIGV4dGVybmFsIGZhY3RvcnkgSW50MzJ4NC5mcm9tRmxvYXQzMng0Qml0cyhGbG9hdDMyeDQgeCk7CgogIC8vLyBUaGUgYml0LXdpc2Ugb3Igb3BlcmF0b3IuCiAgSW50MzJ4NCBvcGVyYXRvciB8KEludDMyeDQgb3RoZXIpOwoKICAvLy8gVGhlIGJpdC13aXNlIGFuZCBvcGVyYXRvci4KICBJbnQzMng0IG9wZXJhdG9yICYoSW50MzJ4NCBvdGhlcik7CgogIC8vLyBUaGUgYml0LXdpc2UgeG9yIG9wZXJhdG9yLgogIEludDMyeDQgb3BlcmF0b3IgXihJbnQzMng0IG90aGVyKTsKCiAgLy8vIEFkZGl0aW9uIG9wZXJhdG9yLgogIEludDMyeDQgb3BlcmF0b3IgKyhJbnQzMng0IG90aGVyKTsKCiAgLy8vIFN1YnRyYWN0aW9uIG9wZXJhdG9yLgogIEludDMyeDQgb3BlcmF0b3IgLShJbnQzMng0IG90aGVyKTsKCiAgLy8vIEV4dHJhY3QgMzItYml0IG1hc2sgZnJvbSB4IGxhbmUuCiAgaW50IGdldCB4OwoKICAvLy8gRXh0cmFjdCAzMi1iaXQgbWFzayBmcm9tIHkgbGFuZS4KICBpbnQgZ2V0IHk7CgogIC8vLyBFeHRyYWN0IDMyLWJpdCBtYXNrIGZyb20geiBsYW5lLgogIGludCBnZXQgejsKCiAgLy8vIEV4dHJhY3QgMzItYml0IG1hc2sgZnJvbSB3IGxhbmUuCiAgaW50IGdldCB3OwoKICAvLy8gRXh0cmFjdCB0aGUgdG9wIGJpdCBmcm9tIGVhY2ggbGFuZSByZXR1cm4gdGhlbSBpbiB0aGUgZmlyc3QgNCBiaXRzLgogIC8vLyAieCIgbGFuZSBpcyBiaXQgMC4KICAvLy8gInkiIGxhbmUgaXMgYml0IDEuCiAgLy8vICJ6IiBsYW5lIGlzIGJpdCAyLgogIC8vLyAidyIgbGFuZSBpcyBiaXQgMy4KICBpbnQgZ2V0IHNpZ25NYXNrOwoKICAvLy8gTWFzayBwYXNzZWQgdG8gW3NodWZmbGVdIG9yIFtzaHVmZmxlTWl4XS4KICBzdGF0aWMgY29uc3QgaW50IHh4eHggPSAweDA7CiAgc3RhdGljIGNvbnN0IGludCB4eHh5ID0gMHg0MDsKICBzdGF0aWMgY29uc3QgaW50IHh4eHogPSAweDgwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh4dyA9IDB4QzA7CiAgc3RhdGljIGNvbnN0IGludCB4eHl4ID0gMHgxMDsKICBzdGF0aWMgY29uc3QgaW50IHh4eXkgPSAweDUwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh5eiA9IDB4OTA7CiAgc3RhdGljIGNvbnN0IGludCB4eHl3ID0gMHhEMDsKICBzdGF0aWMgY29uc3QgaW50IHh4enggPSAweDIwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh6eSA9IDB4NjA7CiAgc3RhdGljIGNvbnN0IGludCB4eHp6ID0gMHhBMDsKICBzdGF0aWMgY29uc3QgaW50IHh4encgPSAweEUwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh3eCA9IDB4MzA7CiAgc3RhdGljIGNvbnN0IGludCB4eHd5ID0gMHg3MDsKICBzdGF0aWMgY29uc3QgaW50IHh4d3ogPSAweEIwOwogIHN0YXRpYyBjb25zdCBpbnQgeHh3dyA9IDB4RjA7CiAgc3RhdGljIGNvbnN0IGludCB4eXh4ID0gMHg0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl4eSA9IDB4NDQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXh6ID0gMHg4NDsKICBzdGF0aWMgY29uc3QgaW50IHh5eHcgPSAweEM0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl5eCA9IDB4MTQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXl5ID0gMHg1NDsKICBzdGF0aWMgY29uc3QgaW50IHh5eXogPSAweDk0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl5dyA9IDB4RDQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXp4ID0gMHgyNDsKICBzdGF0aWMgY29uc3QgaW50IHh5enkgPSAweDY0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl6eiA9IDB4QTQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXp3ID0gMHhFNDsKICBzdGF0aWMgY29uc3QgaW50IHh5d3ggPSAweDM0OwogIHN0YXRpYyBjb25zdCBpbnQgeHl3eSA9IDB4NzQ7CiAgc3RhdGljIGNvbnN0IGludCB4eXd6ID0gMHhCNDsKICBzdGF0aWMgY29uc3QgaW50IHh5d3cgPSAweEY0OwogIHN0YXRpYyBjb25zdCBpbnQgeHp4eCA9IDB4ODsKICBzdGF0aWMgY29uc3QgaW50IHh6eHkgPSAweDQ4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp4eiA9IDB4ODg7CiAgc3RhdGljIGNvbnN0IGludCB4enh3ID0gMHhDODsKICBzdGF0aWMgY29uc3QgaW50IHh6eXggPSAweDE4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp5eSA9IDB4NTg7CiAgc3RhdGljIGNvbnN0IGludCB4enl6ID0gMHg5ODsKICBzdGF0aWMgY29uc3QgaW50IHh6eXcgPSAweEQ4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp6eCA9IDB4Mjg7CiAgc3RhdGljIGNvbnN0IGludCB4enp5ID0gMHg2ODsKICBzdGF0aWMgY29uc3QgaW50IHh6enogPSAweEE4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp6dyA9IDB4RTg7CiAgc3RhdGljIGNvbnN0IGludCB4end4ID0gMHgzODsKICBzdGF0aWMgY29uc3QgaW50IHh6d3kgPSAweDc4OwogIHN0YXRpYyBjb25zdCBpbnQgeHp3eiA9IDB4Qjg7CiAgc3RhdGljIGNvbnN0IGludCB4end3ID0gMHhGODsKICBzdGF0aWMgY29uc3QgaW50IHh3eHggPSAweEM7CiAgc3RhdGljIGNvbnN0IGludCB4d3h5ID0gMHg0QzsKICBzdGF0aWMgY29uc3QgaW50IHh3eHogPSAweDhDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd4dyA9IDB4Q0M7CiAgc3RhdGljIGNvbnN0IGludCB4d3l4ID0gMHgxQzsKICBzdGF0aWMgY29uc3QgaW50IHh3eXkgPSAweDVDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd5eiA9IDB4OUM7CiAgc3RhdGljIGNvbnN0IGludCB4d3l3ID0gMHhEQzsKICBzdGF0aWMgY29uc3QgaW50IHh3enggPSAweDJDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd6eSA9IDB4NkM7CiAgc3RhdGljIGNvbnN0IGludCB4d3p6ID0gMHhBQzsKICBzdGF0aWMgY29uc3QgaW50IHh3encgPSAweEVDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd3eCA9IDB4M0M7CiAgc3RhdGljIGNvbnN0IGludCB4d3d5ID0gMHg3QzsKICBzdGF0aWMgY29uc3QgaW50IHh3d3ogPSAweEJDOwogIHN0YXRpYyBjb25zdCBpbnQgeHd3dyA9IDB4RkM7CiAgc3RhdGljIGNvbnN0IGludCB5eHh4ID0gMHgxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh4eSA9IDB4NDE7CiAgc3RhdGljIGNvbnN0IGludCB5eHh6ID0gMHg4MTsKICBzdGF0aWMgY29uc3QgaW50IHl4eHcgPSAweEMxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh5eCA9IDB4MTE7CiAgc3RhdGljIGNvbnN0IGludCB5eHl5ID0gMHg1MTsKICBzdGF0aWMgY29uc3QgaW50IHl4eXogPSAweDkxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh5dyA9IDB4RDE7CiAgc3RhdGljIGNvbnN0IGludCB5eHp4ID0gMHgyMTsKICBzdGF0aWMgY29uc3QgaW50IHl4enkgPSAweDYxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh6eiA9IDB4QTE7CiAgc3RhdGljIGNvbnN0IGludCB5eHp3ID0gMHhFMTsKICBzdGF0aWMgY29uc3QgaW50IHl4d3ggPSAweDMxOwogIHN0YXRpYyBjb25zdCBpbnQgeXh3eSA9IDB4NzE7CiAgc3RhdGljIGNvbnN0IGludCB5eHd6ID0gMHhCMTsKICBzdGF0aWMgY29uc3QgaW50IHl4d3cgPSAweEYxOwogIHN0YXRpYyBjb25zdCBpbnQgeXl4eCA9IDB4NTsKICBzdGF0aWMgY29uc3QgaW50IHl5eHkgPSAweDQ1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl4eiA9IDB4ODU7CiAgc3RhdGljIGNvbnN0IGludCB5eXh3ID0gMHhDNTsKICBzdGF0aWMgY29uc3QgaW50IHl5eXggPSAweDE1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl5eSA9IDB4NTU7CiAgc3RhdGljIGNvbnN0IGludCB5eXl6ID0gMHg5NTsKICBzdGF0aWMgY29uc3QgaW50IHl5eXcgPSAweEQ1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl6eCA9IDB4MjU7CiAgc3RhdGljIGNvbnN0IGludCB5eXp5ID0gMHg2NTsKICBzdGF0aWMgY29uc3QgaW50IHl5enogPSAweEE1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl6dyA9IDB4RTU7CiAgc3RhdGljIGNvbnN0IGludCB5eXd4ID0gMHgzNTsKICBzdGF0aWMgY29uc3QgaW50IHl5d3kgPSAweDc1OwogIHN0YXRpYyBjb25zdCBpbnQgeXl3eiA9IDB4QjU7CiAgc3RhdGljIGNvbnN0IGludCB5eXd3ID0gMHhGNTsKICBzdGF0aWMgY29uc3QgaW50IHl6eHggPSAweDk7CiAgc3RhdGljIGNvbnN0IGludCB5enh5ID0gMHg0OTsKICBzdGF0aWMgY29uc3QgaW50IHl6eHogPSAweDg5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp4dyA9IDB4Qzk7CiAgc3RhdGljIGNvbnN0IGludCB5enl4ID0gMHgxOTsKICBzdGF0aWMgY29uc3QgaW50IHl6eXkgPSAweDU5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp5eiA9IDB4OTk7CiAgc3RhdGljIGNvbnN0IGludCB5enl3ID0gMHhEOTsKICBzdGF0aWMgY29uc3QgaW50IHl6enggPSAweDI5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp6eSA9IDB4Njk7CiAgc3RhdGljIGNvbnN0IGludCB5enp6ID0gMHhBOTsKICBzdGF0aWMgY29uc3QgaW50IHl6encgPSAweEU5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp3eCA9IDB4Mzk7CiAgc3RhdGljIGNvbnN0IGludCB5end5ID0gMHg3OTsKICBzdGF0aWMgY29uc3QgaW50IHl6d3ogPSAweEI5OwogIHN0YXRpYyBjb25zdCBpbnQgeXp3dyA9IDB4Rjk7CiAgc3RhdGljIGNvbnN0IGludCB5d3h4ID0gMHhEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd4eSA9IDB4NEQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3h6ID0gMHg4RDsKICBzdGF0aWMgY29uc3QgaW50IHl3eHcgPSAweENEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd5eCA9IDB4MUQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3l5ID0gMHg1RDsKICBzdGF0aWMgY29uc3QgaW50IHl3eXogPSAweDlEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd5dyA9IDB4REQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3p4ID0gMHgyRDsKICBzdGF0aWMgY29uc3QgaW50IHl3enkgPSAweDZEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd6eiA9IDB4QUQ7CiAgc3RhdGljIGNvbnN0IGludCB5d3p3ID0gMHhFRDsKICBzdGF0aWMgY29uc3QgaW50IHl3d3ggPSAweDNEOwogIHN0YXRpYyBjb25zdCBpbnQgeXd3eSA9IDB4N0Q7CiAgc3RhdGljIGNvbnN0IGludCB5d3d6ID0gMHhCRDsKICBzdGF0aWMgY29uc3QgaW50IHl3d3cgPSAweEZEOwogIHN0YXRpYyBjb25zdCBpbnQgenh4eCA9IDB4MjsKICBzdGF0aWMgY29uc3QgaW50IHp4eHkgPSAweDQyOwogIHN0YXRpYyBjb25zdCBpbnQgenh4eiA9IDB4ODI7CiAgc3RhdGljIGNvbnN0IGludCB6eHh3ID0gMHhDMjsKICBzdGF0aWMgY29uc3QgaW50IHp4eXggPSAweDEyOwogIHN0YXRpYyBjb25zdCBpbnQgenh5eSA9IDB4NTI7CiAgc3RhdGljIGNvbnN0IGludCB6eHl6ID0gMHg5MjsKICBzdGF0aWMgY29uc3QgaW50IHp4eXcgPSAweEQyOwogIHN0YXRpYyBjb25zdCBpbnQgenh6eCA9IDB4MjI7CiAgc3RhdGljIGNvbnN0IGludCB6eHp5ID0gMHg2MjsKICBzdGF0aWMgY29uc3QgaW50IHp4enogPSAweEEyOwogIHN0YXRpYyBjb25zdCBpbnQgenh6dyA9IDB4RTI7CiAgc3RhdGljIGNvbnN0IGludCB6eHd4ID0gMHgzMjsKICBzdGF0aWMgY29uc3QgaW50IHp4d3kgPSAweDcyOwogIHN0YXRpYyBjb25zdCBpbnQgenh3eiA9IDB4QjI7CiAgc3RhdGljIGNvbnN0IGludCB6eHd3ID0gMHhGMjsKICBzdGF0aWMgY29uc3QgaW50IHp5eHggPSAweDY7CiAgc3RhdGljIGNvbnN0IGludCB6eXh5ID0gMHg0NjsKICBzdGF0aWMgY29uc3QgaW50IHp5eHogPSAweDg2OwogIHN0YXRpYyBjb25zdCBpbnQgenl4dyA9IDB4QzY7CiAgc3RhdGljIGNvbnN0IGludCB6eXl4ID0gMHgxNjsKICBzdGF0aWMgY29uc3QgaW50IHp5eXkgPSAweDU2OwogIHN0YXRpYyBjb25zdCBpbnQgenl5eiA9IDB4OTY7CiAgc3RhdGljIGNvbnN0IGludCB6eXl3ID0gMHhENjsKICBzdGF0aWMgY29uc3QgaW50IHp5enggPSAweDI2OwogIHN0YXRpYyBjb25zdCBpbnQgenl6eSA9IDB4NjY7CiAgc3RhdGljIGNvbnN0IGludCB6eXp6ID0gMHhBNjsKICBzdGF0aWMgY29uc3QgaW50IHp5encgPSAweEU2OwogIHN0YXRpYyBjb25zdCBpbnQgenl3eCA9IDB4MzY7CiAgc3RhdGljIGNvbnN0IGludCB6eXd5ID0gMHg3NjsKICBzdGF0aWMgY29uc3QgaW50IHp5d3ogPSAweEI2OwogIHN0YXRpYyBjb25zdCBpbnQgenl3dyA9IDB4RjY7CiAgc3RhdGljIGNvbnN0IGludCB6enh4ID0gMHhBOwogIHN0YXRpYyBjb25zdCBpbnQgenp4eSA9IDB4NEE7CiAgc3RhdGljIGNvbnN0IGludCB6enh6ID0gMHg4QTsKICBzdGF0aWMgY29uc3QgaW50IHp6eHcgPSAweENBOwogIHN0YXRpYyBjb25zdCBpbnQgenp5eCA9IDB4MUE7CiAgc3RhdGljIGNvbnN0IGludCB6enl5ID0gMHg1QTsKICBzdGF0aWMgY29uc3QgaW50IHp6eXogPSAweDlBOwogIHN0YXRpYyBjb25zdCBpbnQgenp5dyA9IDB4REE7CiAgc3RhdGljIGNvbnN0IGludCB6enp4ID0gMHgyQTsKICBzdGF0aWMgY29uc3QgaW50IHp6enkgPSAweDZBOwogIHN0YXRpYyBjb25zdCBpbnQgenp6eiA9IDB4QUE7CiAgc3RhdGljIGNvbnN0IGludCB6enp3ID0gMHhFQTsKICBzdGF0aWMgY29uc3QgaW50IHp6d3ggPSAweDNBOwogIHN0YXRpYyBjb25zdCBpbnQgenp3eSA9IDB4N0E7CiAgc3RhdGljIGNvbnN0IGludCB6end6ID0gMHhCQTsKICBzdGF0aWMgY29uc3QgaW50IHp6d3cgPSAweEZBOwogIHN0YXRpYyBjb25zdCBpbnQgend4eCA9IDB4RTsKICBzdGF0aWMgY29uc3QgaW50IHp3eHkgPSAweDRFOwogIHN0YXRpYyBjb25zdCBpbnQgend4eiA9IDB4OEU7CiAgc3RhdGljIGNvbnN0IGludCB6d3h3ID0gMHhDRTsKICBzdGF0aWMgY29uc3QgaW50IHp3eXggPSAweDFFOwogIHN0YXRpYyBjb25zdCBpbnQgend5eSA9IDB4NUU7CiAgc3RhdGljIGNvbnN0IGludCB6d3l6ID0gMHg5RTsKICBzdGF0aWMgY29uc3QgaW50IHp3eXcgPSAweERFOwogIHN0YXRpYyBjb25zdCBpbnQgend6eCA9IDB4MkU7CiAgc3RhdGljIGNvbnN0IGludCB6d3p5ID0gMHg2RTsKICBzdGF0aWMgY29uc3QgaW50IHp3enogPSAweEFFOwogIHN0YXRpYyBjb25zdCBpbnQgend6dyA9IDB4RUU7CiAgc3RhdGljIGNvbnN0IGludCB6d3d4ID0gMHgzRTsKICBzdGF0aWMgY29uc3QgaW50IHp3d3kgPSAweDdFOwogIHN0YXRpYyBjb25zdCBpbnQgend3eiA9IDB4QkU7CiAgc3RhdGljIGNvbnN0IGludCB6d3d3ID0gMHhGRTsKICBzdGF0aWMgY29uc3QgaW50IHd4eHggPSAweDM7CiAgc3RhdGljIGNvbnN0IGludCB3eHh5ID0gMHg0MzsKICBzdGF0aWMgY29uc3QgaW50IHd4eHogPSAweDgzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h4dyA9IDB4QzM7CiAgc3RhdGljIGNvbnN0IGludCB3eHl4ID0gMHgxMzsKICBzdGF0aWMgY29uc3QgaW50IHd4eXkgPSAweDUzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h5eiA9IDB4OTM7CiAgc3RhdGljIGNvbnN0IGludCB3eHl3ID0gMHhEMzsKICBzdGF0aWMgY29uc3QgaW50IHd4enggPSAweDIzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h6eSA9IDB4NjM7CiAgc3RhdGljIGNvbnN0IGludCB3eHp6ID0gMHhBMzsKICBzdGF0aWMgY29uc3QgaW50IHd4encgPSAweEUzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h3eCA9IDB4MzM7CiAgc3RhdGljIGNvbnN0IGludCB3eHd5ID0gMHg3MzsKICBzdGF0aWMgY29uc3QgaW50IHd4d3ogPSAweEIzOwogIHN0YXRpYyBjb25zdCBpbnQgd3h3dyA9IDB4RjM7CiAgc3RhdGljIGNvbnN0IGludCB3eXh4ID0gMHg3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l4eSA9IDB4NDc7CiAgc3RhdGljIGNvbnN0IGludCB3eXh6ID0gMHg4NzsKICBzdGF0aWMgY29uc3QgaW50IHd5eHcgPSAweEM3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l5eCA9IDB4MTc7CiAgc3RhdGljIGNvbnN0IGludCB3eXl5ID0gMHg1NzsKICBzdGF0aWMgY29uc3QgaW50IHd5eXogPSAweDk3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l5dyA9IDB4RDc7CiAgc3RhdGljIGNvbnN0IGludCB3eXp4ID0gMHgyNzsKICBzdGF0aWMgY29uc3QgaW50IHd5enkgPSAweDY3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l6eiA9IDB4QTc7CiAgc3RhdGljIGNvbnN0IGludCB3eXp3ID0gMHhFNzsKICBzdGF0aWMgY29uc3QgaW50IHd5d3ggPSAweDM3OwogIHN0YXRpYyBjb25zdCBpbnQgd3l3eSA9IDB4Nzc7CiAgc3RhdGljIGNvbnN0IGludCB3eXd6ID0gMHhCNzsKICBzdGF0aWMgY29uc3QgaW50IHd5d3cgPSAweEY3OwogIHN0YXRpYyBjb25zdCBpbnQgd3p4eCA9IDB4QjsKICBzdGF0aWMgY29uc3QgaW50IHd6eHkgPSAweDRCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p4eiA9IDB4OEI7CiAgc3RhdGljIGNvbnN0IGludCB3enh3ID0gMHhDQjsKICBzdGF0aWMgY29uc3QgaW50IHd6eXggPSAweDFCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p5eSA9IDB4NUI7CiAgc3RhdGljIGNvbnN0IGludCB3enl6ID0gMHg5QjsKICBzdGF0aWMgY29uc3QgaW50IHd6eXcgPSAweERCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p6eCA9IDB4MkI7CiAgc3RhdGljIGNvbnN0IGludCB3enp5ID0gMHg2QjsKICBzdGF0aWMgY29uc3QgaW50IHd6enogPSAweEFCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p6dyA9IDB4RUI7CiAgc3RhdGljIGNvbnN0IGludCB3end4ID0gMHgzQjsKICBzdGF0aWMgY29uc3QgaW50IHd6d3kgPSAweDdCOwogIHN0YXRpYyBjb25zdCBpbnQgd3p3eiA9IDB4QkI7CiAgc3RhdGljIGNvbnN0IGludCB3end3ID0gMHhGQjsKICBzdGF0aWMgY29uc3QgaW50IHd3eHggPSAweEY7CiAgc3RhdGljIGNvbnN0IGludCB3d3h5ID0gMHg0RjsKICBzdGF0aWMgY29uc3QgaW50IHd3eHogPSAweDhGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d4dyA9IDB4Q0Y7CiAgc3RhdGljIGNvbnN0IGludCB3d3l4ID0gMHgxRjsKICBzdGF0aWMgY29uc3QgaW50IHd3eXkgPSAweDVGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d5eiA9IDB4OUY7CiAgc3RhdGljIGNvbnN0IGludCB3d3l3ID0gMHhERjsKICBzdGF0aWMgY29uc3QgaW50IHd3enggPSAweDJGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d6eSA9IDB4NkY7CiAgc3RhdGljIGNvbnN0IGludCB3d3p6ID0gMHhBRjsKICBzdGF0aWMgY29uc3QgaW50IHd3encgPSAweEVGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d3eCA9IDB4M0Y7CiAgc3RhdGljIGNvbnN0IGludCB3d3d5ID0gMHg3RjsKICBzdGF0aWMgY29uc3QgaW50IHd3d3ogPSAweEJGOwogIHN0YXRpYyBjb25zdCBpbnQgd3d3dyA9IDB4RkY7CgogIC8vLyBTaHVmZmxlIHRoZSBsYW5lIHZhbHVlcy4gW21hc2tdIG11c3QgYmUgb25lIG9mIHRoZSAyNTYgc2h1ZmZsZSBjb25zdGFudHMuCiAgSW50MzJ4NCBzaHVmZmxlKGludCBtYXNrKTsKCiAgLy8vIFNodWZmbGUgdGhlIGxhbmUgdmFsdWVzIGluIFt0aGlzXSBhbmQgW290aGVyXS4gVGhlIHJldHVybmVkCiAgLy8vIEludDMyeDQgd2lsbCBoYXZlIFhZIGxhbmVzIGZyb20gW3RoaXNdIGFuZCBaVyBsYW5lcyBmcm9tIFtvdGhlcl0uCiAgLy8vIFVzZXMgdGhlIHNhbWUgW21hc2tdIGFzIFtzaHVmZmxlXS4KICBJbnQzMng0IHNodWZmbGVNaXgoSW50MzJ4NCBvdGhlciwgaW50IG1hc2spOwoKICAvLy8gUmV0dXJucyBhIG5ldyBbSW50MzJ4NF0gY29waWVkIGZyb20gW3RoaXNdIHdpdGggYSBuZXcgeCB2YWx1ZS4KICBJbnQzMng0IHdpdGhYKGludCB4KTsKCiAgLy8vIFJldHVybnMgYSBuZXcgW0ludDMyeDRdIGNvcGllZCBmcm9tIFt0aGlzXSB3aXRoIGEgbmV3IHkgdmFsdWUuCiAgSW50MzJ4NCB3aXRoWShpbnQgeSk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB6IHZhbHVlLgogIEludDMyeDQgd2l0aFooaW50IHopOwoKICAvLy8gUmV0dXJucyBhIG5ldyBbSW50MzJ4NF0gY29waWVkIGZyb20gW3RoaXNdIHdpdGggYSBuZXcgdyB2YWx1ZS4KICBJbnQzMng0IHdpdGhXKGludCB3KTsKCiAgLy8vIEV4dHJhY3RlZCB4IHZhbHVlLiBSZXR1cm5zIGZhbHNlIGZvciAwLCB0cnVlIGZvciBhbnkgb3RoZXIgdmFsdWUuCiAgYm9vbCBnZXQgZmxhZ1g7CgogIC8vLyBFeHRyYWN0ZWQgeSB2YWx1ZS4gUmV0dXJucyBmYWxzZSBmb3IgMCwgdHJ1ZSBmb3IgYW55IG90aGVyIHZhbHVlLgogIGJvb2wgZ2V0IGZsYWdZOwoKICAvLy8gRXh0cmFjdGVkIHogdmFsdWUuIFJldHVybnMgZmFsc2UgZm9yIDAsIHRydWUgZm9yIGFueSBvdGhlciB2YWx1ZS4KICBib29sIGdldCBmbGFnWjsKCiAgLy8vIEV4dHJhY3RlZCB3IHZhbHVlLiBSZXR1cm5zIGZhbHNlIGZvciAwLCB0cnVlIGZvciBhbnkgb3RoZXIgdmFsdWUuCiAgYm9vbCBnZXQgZmxhZ1c7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB4IHZhbHVlLgogIEludDMyeDQgd2l0aEZsYWdYKGJvb2wgeCk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB5IHZhbHVlLgogIEludDMyeDQgd2l0aEZsYWdZKGJvb2wgeSk7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB6IHZhbHVlLgogIEludDMyeDQgd2l0aEZsYWdaKGJvb2wgeik7CgogIC8vLyBSZXR1cm5zIGEgbmV3IFtJbnQzMng0XSBjb3BpZWQgZnJvbSBbdGhpc10gd2l0aCBhIG5ldyB3IHZhbHVlLgogIEludDMyeDQgd2l0aEZsYWdXKGJvb2wgdyk7CgogIC8vLyBNZXJnZSBbdHJ1ZVZhbHVlXSBhbmQgW2ZhbHNlVmFsdWVdIGJhc2VkIG9uIFt0aGlzXScgYml0IG1hc2s6CiAgLy8vIFNlbGVjdCBiaXQgZnJvbSBbdHJ1ZVZhbHVlXSB3aGVuIGJpdCBpbiBbdGhpc10gaXMgb24uCiAgLy8vIFNlbGVjdCBiaXQgZnJvbSBbZmFsc2VWYWx1ZV0gd2hlbiBiaXQgaW4gW3RoaXNdIGlzIG9mZi4KICBGbG9hdDMyeDQgc2VsZWN0KEZsb2F0MzJ4NCB0cnVlVmFsdWUsIEZsb2F0MzJ4NCBmYWxzZVZhbHVlKTsKfQoKLyoqCiAqIEZsb2F0NjR4MiBpbW11dGFibGUgdmFsdWUgdHlwZSBhbmQgb3BlcmF0aW9ucy4KICoKICogRmxvYXQ2NHgyIHN0b3JlcyAyIDY0LWJpdCBmbG9hdGluZyBwb2ludCB2YWx1ZXMgaW4gImxhbmVzIi4KICogVGhlIGxhbmVzIGFyZSAieCIgYW5kICJ5IiByZXNwZWN0aXZlbHkuCiAqLwphYnN0cmFjdCBjbGFzcyBGbG9hdDY0eDIgewogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQ2NHgyKGRvdWJsZSB4LCBkb3VibGUgeSk7CiAgZXh0ZXJuYWwgZmFjdG9yeSBGbG9hdDY0eDIuc3BsYXQoZG91YmxlIHYpOwogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQ2NHgyLnplcm8oKTsKCiAgLy8vIFVzZXMgdGhlICJ4IiBhbmQgInkiIGxhbmVzIGZyb20gW3ZdLgogIGV4dGVybmFsIGZhY3RvcnkgRmxvYXQ2NHgyLmZyb21GbG9hdDMyeDQoRmxvYXQzMng0IHYpOwoKICAvLy8gQWRkaXRpb24gb3BlcmF0b3IuCiAgRmxvYXQ2NHgyIG9wZXJhdG9yICsoRmxvYXQ2NHgyIG90aGVyKTsKCiAgLy8vIE5lZ2F0ZSBvcGVyYXRvci4KICBGbG9hdDY0eDIgb3BlcmF0b3IgLSgpOwoKICAvLy8gU3VidHJhY3Rpb24gb3BlcmF0b3IuCiAgRmxvYXQ2NHgyIG9wZXJhdG9yIC0oRmxvYXQ2NHgyIG90aGVyKTsKCiAgLy8vIE11bHRpcGxpY2F0aW9uIG9wZXJhdG9yLgogIEZsb2F0NjR4MiBvcGVyYXRvciAqKEZsb2F0NjR4MiBvdGhlcik7CgogIC8vLyBEaXZpc2lvbiBvcGVyYXRvci4KICBGbG9hdDY0eDIgb3BlcmF0b3IgLyhGbG9hdDY0eDIgb3RoZXIpOwoKICAvLy8gUmV0dXJucyBhIGNvcHkgb2YgW3RoaXNdIGVhY2ggbGFuZSBiZWluZyBzY2FsZWQgYnkgW3NdLgogIC8vLyBFcXVpdmFsZW50IHRvIHRoaXMgKiBuZXcgRmxvYXQ2NHgyLnNwbGF0KHMpCiAgRmxvYXQ2NHgyIHNjYWxlKGRvdWJsZSBzKTsKCiAgLy8vIFJldHVybnMgdGhlIGxhbmUtd2lzZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIFtGbG9hdDY0eDJdLgogIEZsb2F0NjR4MiBhYnMoKTsKCiAgLy8vIExhbmUtd2lzZSBjbGFtcCBbdGhpc10gdG8gYmUgaW4gdGhlIHJhbmdlIFtsb3dlckxpbWl0XS1bdXBwZXJMaW1pdF0uCiAgRmxvYXQ2NHgyIGNsYW1wKEZsb2F0NjR4MiBsb3dlckxpbWl0LCBGbG9hdDY0eDIgdXBwZXJM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ICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgAVAfAUJKKTMBRx0BRx0BRx0BRx0BQCIBQCIBKRQBKBoBOx4CAQQbAzE2BBk4QTsBICUBISUBISUBGSUBHCUBJw0BJw0BJw0BJw0BShkZGRkUATAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgHyAgICAgICAgICAgICAgIB8gICAgICAgICAgICAgICAfICAgICAgICAgICAgICAgAVAdAUJIKS8BRRgBRRgBRRgBRRgBSBIBSBIBSBIBSBIBRR0BRR0BRR0BRR0BRDw+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+IDB4RkYpIHJldHVybiAweEZGOwogIHJldHVybiB2YWx1ZTsKfQoKQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCmludCBfdG9JbnQxNihpbnQgdmFsdWUpIHsKICByZXR1cm4gX3RvSW50KHZhbHVlLCAweEZGRkYpOwp9CgpAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKaW50IF90b1VpbnQxNihpbnQgdmFsdWUpIHsKICByZXR1cm4gdmFsdWUgJiAweEZGRkY7Cn0KCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQppbnQgX3RvSW50MzIoaW50IHZhbHVlKSB7CiAgcmV0dXJuIF90b0ludCh2YWx1ZSwgMHhGRkZGRkZGRik7Cn0KCkBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQppbnQgX3RvVWludDMyKGludCB2YWx1ZSkgewogIHJldHVybiB2YWx1ZSAmIDB4RkZGRkZGRkY7Cn0KCi8vIEluIGFkZGl0aW9uIHRvIGV4cGxpY2l0bHkgY2hlY2tpbmcgdGhlIHJhbmdlLCB0aGlzIG1ldGhvZCBpbXBsaWNpdGx5IGVuc3VyZXMKLy8gdGhhdCBhbGwgYXJndW1lbnRzIGFyZSBub24tbnVsbCAoYSBubyBzdWNoIG1ldGhvZCBlcnJvciBnZXRzIHRocm93bgovLyBvdGhlcndpc2UpLgp2b2lkIF9yYW5nZUNoZWNrKGludCBsaXN0TGVuZ3RoLCBpbnQgc3RhcnQsIGludCBsZW5ndGgpIHsKICBpZiAobGVuZ3RoIDwgMCkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IudmFsdWUobGVuZ3RoKTsKICB9CiAgaWYgKHN0YXJ0IDwgMCkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IudmFsdWUoc3RhcnQpOwogIH0KICBpZiAoc3RhcnQgKyBsZW5ndGggPiBsaXN0TGVuZ3RoKSB7CiAgICB0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ZUJ5dGVCdWZmZXJWaWV3KEJ5dGVCdWZmZXIgZGF0YSkgOiBfZGF0YSA9IGRhdGE7CgogIGludCBnZXQgbGVuZ3RoSW5CeXRlcyA9PiBfZGF0YS5sZW5ndGhJbkJ5dGVzOwoKICBVaW50OExpc3QgYXNVaW50OExpc3QoW2ludCBvZmZzZXRJbkJ5dGVzID0gMCwgaW50IGxlbmd0aF0pID0+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+IF9sb2FkSHR0cFBhY2thZ2VzRmlsZSgKICAgIFNlbmRQb3J0IHNwLCBib29sIHRyYWNlTG9hZGluZywgVXJpIHJlc291cmNlKSBhc3luYyB7CiAgdHJ5IHsKICAgIGlmIChfaHR0cENsaWVudCA9PSBudWxsKSB7CiAgICAgIF9odHRwQ2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKS4ubWF4Q29ubmVjdGlvbnNQZXJIb3N0ID0gNjsKICAgIH0KICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgX2xvZygiRmV0Y2hpbmcgcGFja2FnZXMgZmlsZSBmcm9tICckcmVzb3VyY2UnLiIpOwogICAgfQogICAgdmFyIHJlcSA9IGF3YWl0IF9odHRwQ2xpZW50LmdldFVybChyZXNvdXJjZSk7CiAgICB2YXIgcnNwID0gYXdhaXQgcmVxLmNsb3NlKCk7CiAgICB2YXIgYnVpbGRlciA9IG5ldyBCeXRlc0J1aWxkZXIoY29weTogZmFsc2UpOwogICAgYXdhaXQgZm9yICh2YXIgYnl0ZXMgaW4gcnNwKSB7CiAgICAgIGJ1aWxkZXIuYWRkKGJ5dGVzKTsKICAgIH0KICAgIGlmIChyc3Auc3RhdHVzQ29kZSAhPSAyMDApIHsKICAgICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICAgIF9sb2coIkdvdCBzdGF0dXMgJHtyc3Auc3RhdHVzQ29kZX0gZmV0Y2hpbmcgJyRyZXNvdXJjZScuIik7CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgdmFyIGRhdGEgPSBidWlsZGVyLnRha2VCeXRlcygpOwogICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICBfbG9nKCJMb2FkZWQgcGFja2FnZXMgZmlsZSBmcm9tICckcmVzb3VyY2UnOlxuIgogICAgICAgICAgIiR7bmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKGRhdGEpfSIpOwogICAgfQogICAgX3BhcnNlUGFja2FnZXNGaWxlKHNwLCB0cmFjZUxvYWRpbmcsIHJlc291cmNlLCBkYXRhKTsKICB9IGNhdGNoIChlLCBzKSB7CiAgICBpZiAodHJhY2VMb2FkaW5nKSB7CiAgICAgIF9sb2coIkVycm9yIGxvYWRpbmcgcGFja2FnZXMgZmlsZSBmcm9tICckcmVzb3VyY2UnOiAkZVxuJHMiKTsKICAgIH0KICAgIHNwLnNlbmQoIlVuY2F1Z2h0IGVycm9yICgkZSkgbG9hZGluZyBwYWNrYWdlcyBmaWxlIGZyb20gJyRyZXNvdXJjZScuIik7CiAgfQogIHJldHVybiBmYWxzZTsKfQoKX2xvYWRQYWNrYWdlc0RhdGEoc3AsIHRyYWNlTG9hZGluZywgcmVzb3VyY2UpIHsKICB0cnkgewogICAgdmFyIGRhdGEgPSByZXNvdXJjZS5kYXRhOwogICAgdmFyIG1pbWUgPSBkYXRhLm1pbWVUeXBlOwogICAgaWYgKG1pbWUgIT0gInRleHQvcGxhaW4iKSB7CiAgICAgIHRocm93ICJNSU1FLXR5cGUgbXVzdCBiZSB0ZXh0L3BsYWluOiAkbWltZSBnaXZlbi4iOwogICAgfQogICAgdmFyIGNoYXJzZXQgPSBkYXRhLmNoYXJzZXQ7CiAgICBpZiAoKGNoYXJzZXQgIT0gInV0Zi04IikgJiYgKGNoYXJzZXQgIT0gIlVTLUFTQ0lJIikpIHsKICAgICAgLy8gVGhlIEMrKyBwb3J0aW9uIG9mIHRoZSBlbWJlZGRlciBhc3N1bWVzIFVURi04LgogICAgICB0aHJvdyAiT25seSB1dGYtOCBvciBVUy1BU0NJSSBlbmNvZGluZ3MgYXJlIHN1cHBvcnRlZDogJGNoYXJzZXQgZ2l2ZW4uIjsKICAgIH0KICAgIF9wYXJzZVBhY2thZ2VzRmlsZShzcCwgdHJhY2VMb2FkaW5nLCByZXNvdXJjZSwgZGF0YS5jb250ZW50QXNCeXRlcygpKTsKICB9IGNhdGNoIChlKSB7CiAgICBzcC5zZW5kKCJVbmNhdWdodCBlcnJvciAoJGUpIGxvYWRpbmcgcGFja2FnZXMgZGF0YS4iKTsKICB9Cn0KCi8vIFRoaXMgY29kZSB1c2VkIHRvIGV4aXN0IGluIGEgc2Vjb25kIGlzb2xhdGUgYW5kIHNvIGl0IHVzZXMgYSBTZW5kUG9ydCB0bwovLyByZXBvcnQgaXQncyByZXR1cm4gdmFsdWUuIFRoaXMgY291bGQgYmUgcmVmYWN0b3JlZCBzbyB0aGF0IGl0IHJldHVybnMgaXQncwovLyB2YWx1ZSBhbmQgdGhlIGNhbGxlciBjb3VsZCB3YWl0IG9uIHRoZSBmdXR1cmUgcmF0aGVyIHRoYW4gYSBtZXNzYWdlIG9uCi8vIFNlbmRQb3J0LgpfaGFuZGxlUGFja2FnZXNSZXF1ZXN0KAogICAgU2VuZFBvcnQgc3AsIGJvb2wgdHJhY2VMb2FkaW5nLCBpbnQgdGFnLCBVcmkgcmVzb3VyY2UpIGFzeW5jIHsKICB0cnkgewogICAgaWYgKHRhZyA9PSAtMSkgewogICAgICBpZiAocmVzb3VyY2Uuc2NoZW1lID09ICcnIHx8IHJlc291cmNlLnNjaGVtZSA9PSAnZmlsZScpIHsKICAgICAgICBfZmluZFBhY2thZ2VzRmlsZShzcCwgdHJhY2VMb2FkaW5nLCByZXNvdXJjZSk7CiAgICAgIH0gZWxzZSBpZiAoKHJlc291cmNlLnNjaGVtZSA9PSAnaHR0cCcpIHx8IChyZXNvdXJjZS5zY2hlbWUgPT0gJ2h0dHBzJykpIHsKICAgICAgICAvLyBUcnkgdG8gbG9hZCB0aGUgLnBhY2thZ2VzIGZpbGUgbmV4dCB0byB0aGUgcmVzb3VyY2UuCiAgICAgICAgdmFyIHBhY2thZ2VzVXJpID0gcmVzb3VyY2UucmVzb2x2ZSgiLnBhY2thZ2VzIik7CiAgICAgICAgdmFyIGV4aXN0cyA9IGF3YWl0IF9sb2FkSHR0cFBhY2thZ2VzRmlsZShzcCwgdHJhY2VMb2FkaW5nLCBwYWNrYWdlc1VyaSk7CiAgICAgICAgaWYgKCFleGlzdHMpIHsKICAgICAgICAgIC8vIExvYWRpbmcgb2YgdGhlIC5wYWNrYWdlcyBmaWxlIGZhaWxlZCBmb3IgaHR0cC9odHRwcyBiYXNlZCBzY3JpcHRzCiAgICAgICAgICBzcC5zZW5kKFtudWxsXSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHNwLnNlbmQoIlVuc3VwcG9ydGVkIHNjaGVtZSB1c2VkIHRvIGxvY2F0ZSAucGFja2FnZXMgZmlsZTogIgogICAgICAgICAgICAiJyRyZXNvdXJjZScuIik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodGFnID09IC0yKSB7CiAgICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgICBfbG9nKCJIYW5kbGluZyBsb2FkIG9mIHBhY2thZ2VzIG1hcDogJyRyZXNvdXJjZScuIik7CiAgICAgIH0KICAgICAgaWYgKHJlc291cmNlLnNjaGVtZSA9PSAnJyB8fCByZXNvdXJjZS5zY2hlbWUgPT0gJ2ZpbGUnKSB7CiAgICAgICAgdmFyIGV4aXN0cyA9IGF3YWl0IG5ldyBGaWxlLmZyb21VcmkocmVzb3VyY2UpLmV4aXN0cygpOwogICAgICAgIGlmIChleGlzdHMpIHsKICAgICAgICAgIF9sb2FkUGFja2FnZXNGaWxlKHNwLCB0cmFjZUxvYWRpbmcsIHJlc291cmNlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc3Auc2VuZCgiUGFja2FnZXMgZmlsZSAnJHJlc291cmNlJyBub3QgZm91bmQuIik7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKChyZXNvdXJjZS5zY2hlbWUgPT0gJ2h0dHAnKSB8fCAocmVzb3VyY2Uuc2NoZW1lID09ICdodHRwcycpKSB7CiAgICAgICAgdmFyIGV4aXN0cyA9IGF3YWl0IF9sb2FkSHR0cFBhY2thZ2VzRmlsZShzcCwgdHJhY2VMb2FkaW5nLCByZXNvdXJjZSk7CiAgICAgICAgaWYgKCFleGlzdHMpIHsKICAgICAgICAgIHNwLnNlbmQoIlBhY2thZ2VzIGZpbGUgJyRyZXNvdXJjZScgbm90IGZvdW5kLiIpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChyZXNvdXJjZS5zY2hlbWUgPT0gJ2RhdGEnKSB7CiAgICAgICAgX2xvYWRQYWNrYWdlc0RhdGEoc3AsIHRyYWNlTG9hZGluZywgcmVzb3VyY2UpOwogICAgICB9IGVsc2UgewogICAgICAgIHNwLnNlbmQoIlVua25vd24gc2NoZW1lICgke3Jlc291cmNlLnNjaGVtZX0pIGZvciBwYWNrYWdlIGZpbGUgYXQgIgogICAgICAgICAgICAiJyRyZXNvdXJjZScuIik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHNwLnNlbmQoIlVua25vd24gcGFja2FnZXMgcmVxdWVzdCB0YWc6ICR0YWcgZm9yICckcmVzb3VyY2UnLiIpOwogICAgfQogIH0gY2F0Y2ggKGUsIHMpIHsKICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgX2xvZygiRXJyb3IgaGFuZGxpbmcgcGFja2FnZXMgcmVxdWVzdDogJGVcbiRzIik7CiAgICB9CiAgICBzcC5zZW5kKCJVbmNhdWdodCBlcnJvciAoJGUpIGhhbmRsaW5nIHBhY2thZ2VzIHJlcXVlc3QuIik7CiAgfQp9CgovLyBTaHV0ZG93biBhbGwgYWN0aXZlIGxvYWRlcnMgYnkgc2VuZGluZyBhbiBlcnJvciBtZXNzYWdlLgp2b2lkIHNodXRkb3duTG9hZGVycygpIHsKICBTdHJpbmcgbWVzc2FnZSA9ICdTZXJ2aWNlIHNodXRkb3duJzsKICBpZiAoX2h0dHBDbGllbnQgIT0gbnVsbCkgewogICAgX2h0dHBDbGllbnQuY2xvc2UoZm9yY2U6IHRydWUpOwogICAgX2h0dHBDbGllbnQgPSBudWxsOwogIH0KICBpc29sYXRlRW1iZWRkZXJEYXRhLnZhbHVlcy50b0xpc3QoKS5mb3JFYWNoKChpZWQpIHsKICAgIElzb2xhdGVMb2FkZXJTdGF0ZSBpbHMgPSBpZWQ7CiAgICBpbHMuY2xlYW51cCgpOwogICAgYXNzZXJ0KGlscy5zcCAhPSBudWxsKTsKICAgIF9zZW5kUmVzb3VyY2VSZXNwb25zZShpbHMuc3AsIDEsIG51bGwsIG51bGwsIG51bGwsIG1lc3NhZ2UpOwogIH0pOwp9CgovLyBTZWUgRGFydF9MaWJyYXJ5VGFnIGluIGRhcnRfYXBpLmgKY29uc3QgX0RhcnRfa0Nhbm9uaWNhbGl6ZVVybCA9IDA7IC8vIENhbm9uaWNhbGl6ZSB0aGUgVVJMLgpjb25zdCBfRGFydF9rU2NyaXB0VGFnID0gMTsgLy8gTG9hZCB0aGUgcm9vdCBzY3JpcHQuCmNvbnN0IF9EYXJ0X2tTb3VyY2VUYWcgPSAyOyAvLyBMb2FkIGEgcGFydCBzb3VyY2UuCmNvbnN0IF9EYXJ0X2tJbXBvcnRUYWcgPSAzOyAvLyBJbXBvcnQgYSBsaWJyYXJ5LgoKLy8gRXh0cmEgcmVxdWVzdHMuIEtlZXAgdGhlc2UgaW4gc3luYyBiZXR3ZWVuIGxvYWRlci5kYXJ0IGFuZCBidWlsdGluLmRhcnQuCmNvbnN0IF9EYXJ0X2tJbml0TG9hZGVyID0gNDsgLy8gSW5pdGlhbGl6ZSB0aGUgbG9hZGVyLgpjb25zdCBfRGFydF9rUmVzb3VyY2VMb2FkID0gNTsgLy8gUmVzb3VyY2UgY2xhc3Mgc3VwcG9ydC4KY29uc3QgX0RhcnRfa0dldFBhY2thZ2VSb290VXJpID0gNjsgLy8gVXJpIG9mIHRoZSBwYWNrYWdlcy8gZGlyZWN0b3J5Lgpjb25zdCBfRGFydF9rR2V0UGFja2FnZUNvbmZpZ1VyaSA9IDc7IC8vIFVyaSBvZiB0aGUgLnBhY2thZ2VzIGZpbGUuCmNvbnN0IF9EYXJ0X2tSZXNvbHZlUGFja2FnZVVyaSA9IDg7IC8vIFJlc29sdmUgYSBwYWNrYWdlOiB1cmkuCgovLyBFeHRyYSByZXF1ZXN0cy4gS2VlcCB0aGVzZSBpbiBzeW5jIGJldHdlZW4gbG9hZGVyLmRhcnQgYW5kIGxvYWRlci5jYy4KY29uc3QgX0RhcnRfa0ltcG9ydEV4dGVuc2lvbiA9IDk7IC8vIEltcG9ydCBhIGRhcnQtZXh0OiBmaWxlLgpjb25zdCBfRGFydF9rUmVzb2x2ZUFzRmlsZVBhdGggPSAxMDsgLy8gUmVzb2x2ZSB1cmkgdG8gZmlsZSBwYXRoLgoKLy8gRXh0ZXJuYWwgZW50cnkgcG9pbnQgZm9yIGxvYWRlciByZXF1ZXN0cy4KX3Byb2Nlc3NMb2FkUmVxdWVzdChyZXF1ZXN0KSB7CiAgYXNzZXJ0KHJlcXVlc3QgaXMgTGlzdCk7CiAgYXNzZXJ0KHJlcXVlc3QubGVuZ3RoID4gNCk7CgogIC8vIFNob3VsZCB3ZSB0cmFjZSBsb2FkaW5nPwogIGJvb2wgdHJhY2VMb2FkaW5nID0gcmVxdWVzdFswXTsKCiAgLy8gVGhpcyBpcyB0aGUgc2VuZGluZyBpc29sYXRlJ3MgRGFydF9HZXRNYWluUG9ydElkKCkuCiAgaW50IGlzb2xhdGVJZCA9IHJlcXVlc3RbMV07CgogIC8vIFRoZSB0YWcgZGVzY3JpYmluZyB0aGUgb3BlcmF0aW9uLgogIGludCB0YWcgPSByZXF1ZXN0WzJdOwoKICAvLyBUaGUgc2VuZCBwb3J0IHRvIHNlbmQgdGhlIHJlc3BvbnNlIG9uLgogIFNlbmRQb3J0IHNwID0gcmVxdWVzdFszXTsKCiAgLy8gR3JhYiB0aGUgbG9hZGVyIHN0YXRlIGZvciB0aGUgcmVxdWVzdGluZyBpc29sYXRlLgogIElzb2xhdGVMb2FkZXJTdGF0ZSBsb2FkZXJTdGF0ZSA9IGlzb2xhdGVFbWJlZGRlckRhdGFbaXNvbGF0ZUlkXTsKCiAgLy8gV2UgYXJlIGVpdGhlciBhYm91dCB0byBpbml0aWFsaXplIHRoZSBsb2FkZXIsIG9yLCB3ZSBhbHJlYWR5IGhhdmUuCiAgYXNzZXJ0KCh0YWcgPT0gX0RhcnRfa0luaXRMb2FkZXIpIHx8IChsb2FkZXJTdGF0ZSAhPSBudWxsKSk7CgogIC8vIEhhbmRsZSB0aGUgcmVxdWVzdCBzcGVjaWZpZWQgaW4gdGhlIHRhZy4KICBzd2l0Y2ggKHRhZykgewogICAgY2FzZSBfRGFydF9rSW5pdExvYWRlcjoKICAgICAgewogICAgICAgIFN0cmluZyBwYWNrYWdlUm9vdCA9IHJlcXVlc3RbNF07CiAgICAgICAgU3RyaW5nIHBhY2thZ2VzRmlsZSA9IHJlcXVlc3RbNV07CiAgICAgICAgU3RyaW5nIHdvcmtpbmdEaXJlY3RvcnkgPSByZXF1ZXN0WzZdOwogICAgICAgIFN0cmluZyByb290U2NyaXB0ID0gcmVxdWVzdFs3XTsKICAgICAgICBib29sIGlzUmVsb2FkaW5nID0gcmVxdWVzdFs4XTsKICAgICAgICBpZiAobG9hZGVyU3RhdGUgPT0gbnVsbCkgewogICAgICAgICAgbG9hZGVyU3RhdGUgPSBuZXcgSXNvbGF0ZUxvYWRlclN0YXRlKGlzb2xhdGVJZCk7CiAgICAgICAgICBpc29sYXRlRW1iZWRkZXJEYXRhW2lzb2xhdGVJZF0gPSBsb2FkZXJTdGF0ZTsKICAgICAgICAgIGxvYWRlclN0YXRlLmluaXQoCiAgICAgICAgICAgICAgcGFja2FnZVJvb3QsIHBhY2thZ2VzRmlsZSwgd29ya2luZ0RpcmVjdG9yeSwgcm9vdFNjcmlwdCk7CiAgICAgICAgfSBlbHNlIGlmIChpc1JlbG9hZGluZykgewogICAgICAgICAgbG9hZGVyU3RhdGUudXBkYXRlUGFja2FnZU1hcChwYWNrYWdlc0ZpbGUpOwogICAgICAgIH0KICAgICAgICBsb2FkZXJTdGF0ZS5zcCA9IHNwOwogICAgICAgIGFzc2VydChpc29sYXRlRW1iZWRkZXJEYXRhW2lzb2xhdGVJZF0gPT0gbG9hZGVyU3RhdGUpOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSBfRGFydF9rUmVzb3VyY2VMb2FkOgogICAgICB7CiAgICAgICAgVXJpIHVyaSA9IFVyaS5wYXJzZShyZXF1ZXN0WzRdKTsKICAgICAgICBfaGFuZGxlUmVzb3VyY2VSZXF1ZXN0KAogICAgICAgICAgICBsb2FkZXJTdGF0ZSwgc3AsIHRyYWNlTG9hZGluZywgdGFnLCB1cmksIHVyaSwgbnVsbCk7CiAgICAgIH0KICAgICAgYnJlYWs7CiAgICBjYXNlIF9EYXJ0X2tHZXRQYWNrYWdlUm9vdFVyaToKICAgICAgbG9hZGVyU3RhdGUuX3RyaWdnZXJQYWNrYWdlUmVzb2x1dGlvbigoKSB7CiAgICAgICAgLy8gVGhlIHBhY2thZ2Ugcm9vdCBpcyBkZXByZWNhdGVkIGFuZCBub3cgYWx3YXlzIHJldHVybnMgbnVsbC4KICAgICAgICBzcC5zZW5kKG51bGwpOwogICAgICB9KTsKICAgICAgYnJlYWs7CiAgICBjYXNlIF9EYXJ0X2tHZXRQYWNrYWdlQ29uZmlnVXJpOgogICAgICBsb2FkZXJTdGF0ZS5fdHJpZ2dlclBhY2thZ2VSZXNvbHV0aW9uKCgpIHsKICAgICAgICAvLyBSZXNwb25kIHdpdGggdGhlIHBhY2thZ2VzIGNvbmZpZyAoaWYgYW55KSBhZnRlciBwYWNrYWdlIHJlc29sdXRpb24uCiAgICAgICAgc3Auc2VuZChsb2FkZXJTdGF0ZS5fcGFja2FnZUNvbmZpZyk7CiAgICAgIH0pOwogICAgICBicmVhazsKICAgIGNhc2UgX0RhcnRfa1Jlc29sdmVQYWNrYWdlVXJpOgogICAgICBVcmkgdXJpID0gVXJpLnBhcnNlKHJlcXVlc3RbNF0pOwogICAgICBsb2FkZXJTdGF0ZS5fdHJpZ2dlclBhY2thZ2VSZXNvbHV0aW9uKCgpIHsKICAgICAgICAvLyBSZXNwb25kIHdpdGggdGhlIHJlc29sdmVkIHBhY2thZ2UgdXJpIGFmdGVyIHBhY2thZ2UgcmVzb2x1dGlvbi4KICAgICAgICBVcmkgcmVzb2x2ZWRVcmk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJlc29sdmVkVXJpID0gbG9hZGVyU3RhdGUuX3Jlc29sdmVQYWNrYWdlVXJpKHVyaSk7CiAgICAgICAgfSBjYXRjaCAoZSwgcykgewogICAgICAgICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICAgICAgICBfbG9nKCJFeGNlcHRpb24gKCRlKSB3aGVuIHJlc29sdmluZyBwYWNrYWdlIFVSSTogJHVyaSIpOwogICAgICAgICAgfQogICAgICAgICAgcmVzb2x2ZWRVcmkgPSBudWxsOwogICAgICAgIH0KICAgICAgICBzcC5zZW5kKHJlc29sdmVkVXJpKTsKICAgICAgfSk7CiAgICAgIGJyZWFrOwogICAgY2FzZSBfRGFydF9rSW1wb3J0RXh0ZW5zaW9uOgogICAgICBVcmkgdXJpID0gVXJpLnBhcnNlKHJlcXVlc3RbNF0pOwogICAgICBTdHJpbmcgbGlicmFyeVVyaSA9IHJlcXVlc3RbNV07CiAgICAgIC8vIFN0cmlwIGFueSBmaWxlbmFtZSBvZmYgb2YgdGhlIGxpYnJhcnlVcmkncyBwYXRoLgogICAgICBpbnQgaW5kZXggPSBsaWJyYXJ5VXJpLmxhc3RJbmRleE9mKCcvJyk7CiAgICAgIHZhciBwYXRoOwogICAgICBpZiAoaW5kZXggPT0gLTEpIHsKICAgICAgICBwYXRoID0gJy4vJzsKICAgICAgfSBlbHNlIHsKICAgICAgICBwYXRoID0gbGlicmFyeVVyaS5zdWJzdHJpbmcoMCwgaW5kZXggKyAxKTsKICAgICAgfQogICAgICB2YXIgcGF0aFVyaSA9IFVyaS5wYXJzZShwYXRoKTsKICAgICAgc3dpdGNoIChwYXRoVXJpLnNjaGVtZSkgewogICAgICAgIGNhc2UgJyc6CiAgICAgICAgY2FzZSAnZmlsZSc6CiAgICAgICAgICBfc2VuZEV4dGVuc2lvbkltcG9ydFJlc3BvbnNlKAogICAgICAgICAgICAgIHNwLCB1cmksIGxpYnJhcnlVcmksIHBhdGhVcmkudG9GaWxlUGF0aCgpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ2RhdGEnOgogICAgICAgIGNhc2UgJ2h0dHAnOgogICAgICAgIGNhc2UgJ2h0dHBzJzoKICAgICAgICAgIF9zZW5kRXh0ZW5zaW9uSW1wb3J0UmVzcG9uc2Uoc3AsIHVyaSwgbGlicmFyeVVyaSwgcGF0aFVyaS50b1N0cmluZygpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3BhY2thZ2UnOgogICAgICAgICAgLy8gU3RhcnQgcGFja2FnZSByZXNvbHV0aW9uLgogICAgICAgICAgbG9hZGVyU3RhdGUuX3RyaWdnZXJQYWNrYWdlUmVzb2x1dGlvbigoKSB7CiAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gZmluZCB0aGUgZnVsbHkgcmVzb2x2ZWQgdXJpIG9mIFtwYXRoXS4KICAgICAgICAgICAgVXJpIHJlc29sdmVkVXJpOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIHJlc29sdmVkVXJpID0gbG9hZGVyU3RhdGUuX3Jlc29sdmVQYWNrYWdlVXJpKHBhdGhVcmkpOwogICAgICAgICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgICAgICAgaWYgKHRyYWNlTG9hZGluZykgewogICAgICAgICAgICAgICAgX2xvZygiRXhjZXB0aW9uICgkZSkgd2hlbiByZXNvbHZpbmcgcGFja2FnZSBVUkk6ICR1cmkiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmVzb2x2ZWRVcmkgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9zZW5kRXh0ZW5zaW9uSW1wb3J0UmVzcG9uc2UoCiAgICAgICAgICAgICAgICBzcCwgdXJpLCBsaWJyYXJ5VXJpLCByZXNvbHZlZFVyaS50b1N0cmluZygpKTsKICAgICAgICAgIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGlmICh0cmFjZUxvYWRpbmcpIHsKICAgICAgICAgICAgX2xvZygnVW5rbm93biBzY2hlbWUgKCR7cGF0aFVyaS5zY2hlbWV9KSBpbiAkcGF0aFVyaS4nKTsKICAgICAgICAgIH0KICAgICAgICAgIF9zZW5kRXh0ZW5zaW9uSW1wb3J0UmVzcG9uc2Uoc3AsIHVyaSwgbGlicmFyeVVyaSwgbnVsbCk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2UgX0RhcnRfa1Jlc29sdmVBc0ZpbGVQYXRoOgogICAgICBsb2FkZXJTdGF0ZS5fdHJpZ2dlclBhY2thZ2VSZXNvbHV0aW9uKCgpIHsKICAgICAgICBTdHJpbmcgdXJpID0gcmVxdWVzdFs0XTsKICAgICAgICBVcmkgcmVzb2x2ZWRVcmkgPSBVcmkucGFyc2UoX3Nhbml0aXplV2luZG93c1BhdGgodXJpKSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGlmIChyZXNvbHZlZFVyaS5zY2hlbWUgPT0gJ3BhY2thZ2UnKSB7CiAgICAgICAgICAgIHJlc29sdmVkVXJpID0gbG9hZGVyU3RhdGUuX3Jlc29sdmVQYWNrYWdlVXJpKHJlc29sdmVkVXJpKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChyZXNvbHZlZFVyaS5zY2hlbWUgPT0gJycgfHwgcmVzb2x2ZWRVcmkuc2NoZW1lID09ICdmaWxlJykgewogICAgICAgICAgICByZXNvbHZlZFVyaSA9IGxvYWRlclN0YXRlLl93b3JraW5nRGlyZWN0b3J5LnJlc29sdmVVcmkocmVzb2x2ZWRVcmkpOwogICAgICAgICAgICB2YXIgbXNnID0gbmV3IExpc3QoNSk7CiAgICAgICAgICAgIG1zZ1swXSA9IHRhZzsKICAgICAgICAgICAgbXNnWzFdID0gdXJpOwogICAgICAgICAgICBtc2dbMl0gPSByZXNvbHZlZFVyaS50b1N0cmluZygpOwogICAgICAgICAgICBtc2dbM10gPSBudWxsOwogICAgICAgICAgICBtc2dbNF0gPSByZXNvbHZlZFVyaS50b0ZpbGVQYXRoKCk7CiAgICAgICAgICAgIHNwLnNlbmQobXNnKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93ICJDYW5ub3QgcmVzb2x2ZSBzY2hlbWUgKCR7cmVzb2x2ZWRVcmkuc2NoZW1lfSkgdG8gZmlsZSBwYXRoIgogICAgICAgICAgICAgICAgIiBmb3IgJHJlc29sdmVkVXJpIjsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICB2YXIgbXNnID0gbmV3IExpc3QoNSk7CiAgICAgICAgICBtc2dbMF0gPSAtdGFnOwogICAgICAgICAgbXNnWzFdID0gdXJpOwogICAgICAgICAgbXNnWzJdID0gcmVzb2x2ZWRVcmkudG9TdHJpbmcoKTsKICAgICAgICAgIG1zZ1szXSA9IG51bGw7CiAgICAgICAgICBtc2dbNF0gPSBlLnRvU3RyaW5nKCk7CiAgICAgICAgICBzcC5zZW5kKG1zZyk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgYnJlYWs7CiAgICBkZWZhdWx0OgogICAgICBfbG9nKCdVbmtub3duIGxvYWRlciByZXF1ZXN0IHRhZz0kdGFnIGZyb20gJGlzb2xhdGVJZCcpOwogIH0KfQqEbgBOTjwBFgEdQU0FDRYIFwEdLBEEATMBLygaBAEUAgEZGh0sEQQ0EQQSLhseBA8CAS4dHBQEDgIBFBURERkbTwIBGhwaHQE/NyYBFxYPAT80EQ4GLD0eKwYuIygGKiYuBgQBNSYOBhgsBAETEiEdHAYEATYZARwTAVATHSAfHwFNUDAfAU87GwFGHScBTE1IPx9HAU0sHwQBJSkTBioEASg1KyssOD0NNzMVSAYEAS08LyRCMz8GJiIXCAQBSyYaNRANKkw1HwhHKAYEAVANLAFNSSQlHAEfKyMlAUElBgEwH09BSQYZPAYVIRtRCBsnNA0gThVDQQg/Lhs9CB1OCBA0ORs3CCsGGTIGGAQBIAEyIRwOBjU+JQEhLkQNO0IGARk6BgQBIyEOBkQbGgEZKAYZGz4IJRseHR02CioPSychICwuMj03Ch0zCggNSBsdCAYBTy5NM0QNBksXHwQCAQwTAgERAS5LJzMZGEsQHi0NQgYEEBsjFxEQAgEuI0MZJB0vEEEEEBsYFxgQAgEQSR0/BA4bPCwxLig0QUsPH0kIFh1ACBZQBk0bFAIBTionIylIFFAXJzE5GA8IEU4pBgYCARNJCCJCTgYkOzhPBhtLEEErBAIBSwhNPCQVCjkVGkEIFx1ADgYzHEsLNEozKQZPES4eRQgYLkEGBAIBTUJET0IuRSkNTyoGLyk2LzkyEksLGwwNDRUUNhkEAgFLGhISFRQTFRMBKRIODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OEAMBFEhMGzARGRgXHCofDxAGATsYE0MYJAEsGhxMMR0gURohEU0dLTUhHzcKCB8sGQ8IBgE1IBo0PggQBgE+Hj0aOBYIORQOBgEwGz0aMxYIOhQOBgFIASUpPRpECEgUDgYBGCkGSRgwBi0lIwY+GDQGHRwEARZGBBMCAUwIQxg4MAY+ExguBjsEAgFECEVIMy0VLzhNHBw2GjIIQhovCBQ7EAgcEhgGASQYPwZHExguBjsEAgEkOggfQQYYOAYyITEjGgYhGkQIFAYkGDYwBjoTGEQGTAQQAgEwCB4eIDoGIDs4TwZLEDsEAgFMTkoNGEMIFUA3UEA5URdPGwoPRR0IHBo9CEBAFjkROwpQThc7Ci43D0sdCA1GBhMYNwY/BAIBPBknHSQYBDYiExxBBgIBJTs1MzEBTDc6R0Q/AUk+QgEtHxseAR4iATkeAScYASwcATdDAUg/AS4RHAgpKi4oJyM7OBxIIjYKHT8IDR4IKSBBCA0jMUcXCg0lMU8tCg0jJzFLGQ49GR5FDB4KHgoNIScmOi8QGRUPMwglIBEVKDoRFRUWUREYJzVBHRJFHSJJECIOKj4OEREeRQxDEQgNIzEhQA4xRwxKUSMaGi0bLxoTTyUMFiEZGCsZIRgKCg0NPwQCAR1kYXJ0OnZtc2VydmljZV9pby9sb2FkZXIuZGFydDVvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvYmluL3Ztc2VydmljZS9zZXJ2ZXIuZGFydLh1Ly8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2Ygdm1zZXJ2aWNlX2lvOwoKZmluYWwgYm9vbCBzaWxlbnRPYnNlcnZhdG9yeSA9IG5ldyBib29sLmZyb21FbnZpcm9ubWVudCgnU0lMRU5UX09CU0VSVkFUT1JZJyk7Cgp2b2lkIHNlcnZlclByaW50KFN0cmluZyBzKSB7CiAgaWYgKHNpbGVudE9ic2VydmF0b3J5KSB7CiAgICAvLyBXZSd2ZSBiZWVuIHJlcXVlc3RlZCB0byBiZSBzaWxlbnQuCiAgICByZXR1cm47CiAgfQogIHByaW50KHMpOwp9CgpjbGFzcyBXZWJTb2NrZXRDbGllbnQgZXh0ZW5kcyBDbGllbnQgewogIHN0YXRpYyBjb25zdCBpbnQgUEFSU0VfRVJST1JfQ09ERSA9IDQwMDA7CiAgc3RhdGljIGNvbnN0IGludCBCSU5BUllfTUVTU0FHRV9FUlJPUl9DT0RFID0gNDAwMTsKICBzdGF0aWMgY29uc3QgaW50IE5PVF9NQVBfRVJST1JfQ09ERSA9IDQwMDI7CiAgc3RhdGljIGNvbnN0IGludCBJRF9FUlJPUl9DT0RFID0gNDAwMzsKICBmaW5hbCBXZWJTb2NrZXQgc29ja2V0OwoKICBXZWJTb2NrZXRDbGllbnQodGhpcy5zb2NrZXQsIFZNU2VydmljZSBzZXJ2aWNlKSA6IHN1cGVyKHNlcnZpY2UpIHsKICAgIHNvY2tldC5saXN0ZW4oKG1lc3NhZ2UpID0+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+IF9OYW1lc3BhY2VJbXBsLl9uYW1lc3BhY2VQb2ludGVyOwp9CjIATk48ARpOFgFBITMlOgFJQDEvQwQBKSRML0kGHQQBPwIBBxoTCSQvLwQBCUEBCUgCASJkYXJ0OmlvLXBhdGNoL25hbWVzcGFjZV9wYXRjaC5kYXJ0Mm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9iaW4vcHJvY2Vzc19wYXRjaC5kYXJ0wABKPy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb21tb25fcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgX1dpbmRvd3NDb2RlUGFnZURlY29kZXIgewogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX2RlY29kZUJ5dGVzKExpc3Q8aW50PiBieXRlcykgbmF0aXZlICJTeXN0ZW1FbmNvZGluZ1RvU3RyaW5nIjsKfQoKQHBhdGNoCmNsYXNzIF9XaW5kb3dzQ29kZVBhZ2VFbmNvZGVyIHsKICBAcGF0Y2gKICBzdGF0aWMgTGlzdDxpbnQ+IF9lbmNvZGVTdHJpbmcoU3RyaW5nIHN0cmluZykgbmF0aXZlICJTdHJpbmdUb1N5c3RlbUVuY29kaW5nIjsKfQoKQHBhdGNoCmNsYXNzIFByb2Nlc3MgewogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8UHJvY2Vzcz4gc3RhcnQoU3RyaW5nIGV4ZWN1dGFibGUsIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICAgIHtTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgYm9vbCBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQ6IHRydWUsCiAgICAgIGJvb2wgcnVuSW5TaGVsbDogZmFsc2UsCiAgICAgIFByb2Nlc3NTdGFydE1vZGUgbW9kZTogUHJvY2Vzc1N0YXJ0TW9kZS5ub3JtYWx9KSB7CiAgICBfUHJvY2Vzc0ltcGwgcHJvY2VzcyA9IG5ldyBfUHJvY2Vzc0ltcGwoCiAgICAgICAgZXhlY3V0YWJsZSwKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICBlbnZpcm9ubWVudCwKICAgICAgICBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQsCiAgICAgICAgcnVuSW5TaGVsbCwKICAgICAgICBtb2RlKTsKICAgIHJldHVybiBwcm9jZXNzLl9zdGFydCgpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxQcm9jZXNzUmVzdWx0PiBydW4oU3RyaW5nIGV4ZWN1dGFibGUsIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICAgIHtTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgYm9vbCBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQ6IHRydWUsCiAgICAgIGJvb2wgcnVuSW5TaGVsbDogZmFsc2UsCiAgICAgIEVuY29kaW5nIHN0ZG91dEVuY29kaW5nOiBzeXN0ZW1FbmNvZGluZywKICAgICAgRW5jb2Rpbmcgc3RkZXJyRW5jb2Rpbmc6IHN5c3RlbUVuY29kaW5nfSkgewogICAgcmV0dXJuIF9ydW5Ob25JbnRlcmFjdGl2ZVByb2Nlc3MoCiAgICAgICAgZXhlY3V0YWJsZSwKICAgICAgICBhcmd1bWVudHMsCiAgICAgICAgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICBlbnZpcm9ubWVudCwKICAgICAgICBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQsCiAgICAgICAgcnVuSW5TaGVsbCwKICAgICAgICBzdGRvdXRFbmNvZGluZywKICAgICAgICBzdGRlcnJFbmNvZGluZyk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgUHJvY2Vzc1Jlc3VsdCBydW5TeW5jKFN0cmluZyBleGVjdXRhYmxlLCBMaXN0PFN0cmluZz4gYXJndW1lbnRzLAogICAgICB7U3RyaW5nIHdvcmtpbmdEaXJlY3RvcnksCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICAgIGJvb2wgaW5jbHVkZVBhcmVudEVudmlyb25tZW50OiB0cnVlLAogICAgICBib29sIHJ1bkluU2hlbGw6IGZhbHNlLAogICAgICBFbmNvZGluZyBzdGRvdXRFbmNvZGluZzogc3lzdGVtRW5jb2RpbmcsCiAgICAgIEVuY29kaW5nIHN0ZGVyckVuY29kaW5nOiBzeXN0ZW1FbmNvZGluZ30pIHsKICAgIHJldHVybiBfcnVuTm9uSW50ZXJhY3RpdmVQcm9jZXNzU3luYygKICAgICAgICBleGVjdXRhYmxlLAogICAgICAgIGFyZ3VtZW50cywKICAgICAgICB3b3JraW5nRGlyZWN0b3J5LAogICAgICAgIGVudmlyb25tZW50LAogICAgICAgIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudCwKICAgICAgICBydW5JblNoZWxsLAogICAgICAgIHN0ZG91dEVuY29kaW5nLAogICAgICAgIHN0ZGVyckVuY29kaW5nKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBib29sIGtpbGxQaWQoaW50IHBpZCwgW1Byb2Nlc3NTaWduYWwgc2lnbmFsID0gUHJvY2Vzc1NpZ25hbC5zaWd0ZXJtXSkgewogICAgaWYgKHNpZ25hbCBpcyEgUHJvY2Vzc1NpZ25hbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiQXJndW1lbnQgJ3NpZ25hbCcgbXVzdCBiZSBhIFByb2Nlc3NTaWduYWwiKTsKICAgIH0KICAgIHJldHVybiBfUHJvY2Vzc1V0aWxzLl9raWxsUGlkKHBpZCwgc2lnbmFsLl9zaWduYWxOdW1iZXIpOwogIH0KfQoKTGlzdDxfU2lnbmFsQ29udHJvbGxlcj4gX3NpZ25hbENvbnRyb2xsZXJzID0gbmV3IExpc3QoMzIpOwoKY2xhc3MgX1NpZ25hbENvbnRyb2xsZXIgewogIGZpbmFsIFByb2Nlc3NTaWduYWwgc2lnbmFsOwoKICBTdHJlYW1Db250cm9sbGVyPFByb2Nlc3NTaWduYWw+IF9jb250cm9sbGVyOwogIHZhciBfaWQ7CgogIF9TaWduYWxDb250cm9sbGVyKHRoaXMuc2lnbmFsKSB7CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFByb2Nlc3NTaWduYWw+LmJyb2FkY2FzdCgKICAgICAgICBvbkxpc3RlbjogX2xpc3Rlbiwgb25DYW5jZWw6IF9jYW5jZWwpOwogIH0KCiAgU3RyZWFtPFByb2Nlc3NTaWduYWw+IGdldCBzdHJlYW0gPT4gX2NvbnRyb2xsZXIuc3RyZWFtOwoKICB2b2lkIF9saXN0ZW4oKSB7CiAgICB2YXIgaWQgPSBfc2V0U2lnbmFsSGFuZGxlcihzaWduYWwuX3NpZ25hbE51bWJlcik7CiAgICBpZiAoaWQgaXMhIGludCkgewogICAgICBfY29udHJvbGxlcgogICAgICAgICAgLmFkZEVycm9yKG5ldyBTaWduYWxFeGNlcHRpb24oIkZhaWxlZCB0byBsaXN0ZW4gZm9yICRzaWduYWwiLCBpZCkpOwogICAgICByZXR1cm47CiAgICB9CiAgICBfaWQgPSBpZDsKICAgIHZhciBzb2NrZXQgPSBuZXcgX1Jhd1NvY2tldChuZXcgX05hdGl2ZVNvY2tldC53YXRjaFNpZ25hbChpZCkpOwogICAgc29ja2V0Lmxpc3RlbigoZXZlbnQpIHsKICAgICAgaWYgKGV2ZW50ID09IFJhd1NvY2tldEV2ZW50LnJlYWQpIHsKICAgICAgICB2YXIgYnl0ZXMgPSBzb2NrZXQucmVhZCgpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIF9jb250cm9sbGVyLmFkZChzaWduYWwpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIF9jYW5jZWwoKSB7CiAgICBpZiAoX2lkICE9IG51bGwpIHsKICAgICAgX2NsZWFyU2lnbmFsSGFuZGxlcihzaWduYWwuX3NpZ25hbE51bWJlcik7CiAgICAgIF9pZCA9IG51bGw7CiAgICB9CiAgfQoKICBzdGF0aWMgX3NldFNpZ25hbEhhbmRsZXIoaW50IHNpZ25hbCkgbmF0aXZlICJQcm9jZXNzX1NldFNpZ25hbEhhbmRsZXIiOwogIHN0YXRpYyBpbnQgX2NsZWFyU2lnbmFsSGFuZGxlcihpbnQgc2lnbmFsKQogICAgICBuYXRpdmUgIlByb2Nlc3NfQ2xlYXJTaWduYWxIYW5kbGVyIjsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCkZ1bmN0aW9uIF9nZXRXYXRjaFNpZ25hbEludGVybmFsKCkgPT4gX1Byb2Nlc3NVdGlscy5fd2F0Y2hTaWduYWxJbnRlcm5hbDsKCkBwYXRjaApjbGFzcyBfUHJvY2Vzc1V0aWxzIHsKICBAcGF0Y2gKICBzdGF0aWMgdm9pZCBfZXhpdChpbnQgc3RhdHVzKSBuYXRpdmUgIlByb2Nlc3NfRXhpdCI7CiAgQHBhdGNoCiAgc3RhdGljIHZvaWQgX3NldEV4aXRDb2RlKGludCBzdGF0dXMpIG5hdGl2ZSAiUHJvY2Vzc19TZXRFeGl0Q29kZSI7CiAgQHBhdGNoCiAgc3RhdGljIGludCBfZ2V0RXhpdENvZGUoKSBuYXRpdmUgIlByb2Nlc3NfR2V0RXhpdENvZGUiOwogIEBwYXRjaAogIHN0YXRpYyB2b2lkIF9zbGVlcChpbnQgbWlsbGlzKSBuYXRpdmUgIlByb2Nlc3NfU2xlZXAiOwogIEBwYXRjaAogIHN0YXRpYyBpbnQgX3BpZChQcm9jZXNzIHByb2Nlc3MpIG5hdGl2ZSAiUHJvY2Vzc19QaWQiOwogIHN0YXRpYyBib29sIF9raWxsUGlkKGludCBwaWQsIGludCBzaWduYWwpIG5hdGl2ZSAiUHJvY2Vzc19LaWxsUGlkIjsKICBAcGF0Y2gKICBzdGF0aWMgU3RyZWFtPFByb2Nlc3NTaWduYWw+IF93YXRjaFNpZ25hbChQcm9jZXNzU2lnbmFsIHNpZ25hbCkgewogICAgaWYgKHNpZ25hbCAhPSBQcm9jZXNzU2lnbmFsLnNpZ2h1cCAmJgogICAgICAgIHNpZ25hbCAhPSBQcm9jZXNzU2lnbmFsLnNpZ2ludCAmJgogICAgICAgIHNpZ25hbCAhPSBQcm9jZXNzU2lnbmFsLnNpZ3Rlcm0gJiYKICAgICAgICAoUGxhdGZvcm0uaXNXaW5kb3dzIHx8CiAgICAgICAgICAgIChzaWduYWwgIT0gUHJvY2Vzc1NpZ25hbC5zaWd1c3IxICYmCiAgICAgICAgICAgICAgICBzaWduYWwgIT0gUHJvY2Vzc1NpZ25hbC5zaWd1c3IyICYmCiAgICAgICAgICAgICAgICBzaWduYWwgIT0gUHJvY2Vzc1NpZ25hbC5zaWd3aW5jaCkpKSB7CiAgICAgIHRocm93IG5ldyBTaWduYWxFeGNlcHRpb24oCiAgICAgICAgICAiTGlzdGVuaW5nIGZvciBzaWduYWwgJHNpZ25hbCBpcyBub3Qgc3VwcG9ydGVkIik7CiAgICB9CiAgICByZXR1cm4gX3dhdGNoU2lnbmFsSW50ZXJuYWwoc2lnbmFsKTsKICB9CgogIHN0YXRpYyBTdHJlYW08UHJvY2Vzc1NpZ25hbD4gX3dhdGNoU2lnbmFsSW50ZXJuYWwoUHJvY2Vzc1NpZ25hbCBzaWduYWwpIHsKICAgIGlmIChfc2lnbmFsQ29udHJvbGxlcnNbc2lnbmFsLl9zaWduYWxOdW1iZXJdID09IG51bGwpIHsKICAgICAgX3NpZ25hbENvbnRyb2xsZXJzW3NpZ25hbC5fc2lnbmFsTnVtYmVyXSA9IG5ldyBfU2lnbmFsQ29udHJvbGxlcihzaWduYWwpOwogICAgfQogICAgcmV0dXJuIF9zaWduYWxDb250cm9sbGVyc1tzaWduYWwuX3NpZ25hbE51bWJlcl0uc3RyZWFtOwogIH0KfQoKQHBhdGNoCmNsYXNzIFByb2Nlc3NJbmZvIHsKICBAcGF0Y2gKICBzdGF0aWMgaW50IGdldCBtYXhSc3MgewogICAgdmFyIHJlc3VsdCA9IF9tYXhSc3MoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIGludCBnZXQgY3VycmVudFJzcyB7CiAgICB2YXIgcmVzdWx0ID0gX2N1cnJlbnRSc3MoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIF9tYXhSc3MoKSBuYXRpdmUgIlByb2Nlc3NJbmZvX01heFJTUyI7CiAgc3RhdGljIF9jdXJyZW50UnNzKCkgbmF0aXZlICJQcm9jZXNzSW5mb19DdXJyZW50UlNTIjsKfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfUHJvY2Vzc1N0YXJ0U3RhdHVzIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJzZXQiKQogIGludCBfZXJyb3JDb2RlOyAvLyBTZXQgdG8gT1MgZXJyb3IgY29kZSBpZiBwcm9jZXNzIHN0YXJ0IGZhaWxlZC4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJzZXQiKQogIFN0cmluZyBfZXJyb3JNZXNzYWdlOyAvLyBTZXQgdG8gT1MgZXJyb3IgbWVzc2FnZSBpZiBwcm9jZXNzIHN0YXJ0IGZhaWxlZC4KfQoKLy8gVGhlIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMSBjYW4gbm90IGJlIHVzZWQgd2l0aCBhIG1peGluLCBkdWUgdG8gbWlzc2luZwovLyBpbXBsaWNpdCBjb25zdHJ1Y3Rvci4KY2xhc3MgX1Byb2Nlc3NJbXBsTmF0aXZlV3JhcHBlciBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMSB7fQoKY2xhc3MgX1Byb2Nlc3NJbXBsIGV4dGVuZHMgX1Byb2Nlc3NJbXBsTmF0aXZlV3JhcHBlciBpbXBsZW1lbnRzIFByb2Nlc3MgewogIF9Qcm9jZXNzUmVzb3VyY2VJbmZvIF9yZXNvdXJjZUluZm87CiAgc3RhdGljIGJvb2wgY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyID0gZmFsc2U7CgogIF9Qcm9jZXNzSW1wbCgKICAgICAgU3RyaW5nIHBhdGgsCiAgICAgIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICAgIHRoaXMuX3dvcmtpbmdEaXJlY3RvcnksCiAgICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICAgIGJvb2wgaW5jbHVkZVBhcmVudEVudmlyb25tZW50LAogICAgICBib29sIHJ1bkluU2hlbGwsCiAgICAgIFByb2Nlc3NTdGFydE1vZGUgbW9kZSkKICAgICAgOiBzdXBlcigpIHsKICAgIGlmICghY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyKSB7CiAgICAgIHJlZ2lzdGVyRXh0ZW5zaW9uKAogICAgICAgICAgJ2V4dC5kYXJ0LmlvLmdldFByb2Nlc3NlcycsIF9Qcm9jZXNzUmVzb3VyY2VJbmZvLmdldFN0YXJ0ZWRQcm9jZXNzZXMpOwogICAgICByZWdpc3RlckV4dGVuc2lvbignZXh0LmRhcnQuaW8uZ2V0UHJvY2Vzc0J5SWQnLAogICAgICAgICAgX1Byb2Nlc3NSZXNvdXJjZUluZm8uZ2V0UHJvY2Vzc0luZm9NYXBCeUlkKTsKICAgICAgY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyID0gdHJ1ZTsKICAgIH0KCiAgICBpZiAocnVuSW5TaGVsbCkgewogICAgICBhcmd1bWVudHMgPSBfZ2V0U2hlbGxBcmd1bWVudHMocGF0aCwgYXJndW1lbnRzKTsKICAgICAgcGF0aCA9IF9nZXRTaGVsbENvbW1hbmQoKTsKICAgIH0KCiAgICBpZiAocGF0aCBpcyEgU3RyaW5nKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJQYXRoIGlzIG5vdCBhIFN0cmluZzogJHBhdGgiKTsKICAgIH0KICAgIF9wYXRoID0gcGF0aDsKCiAgICBpZiAoYXJndW1lbnRzIGlzISBMaXN0KSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJBcmd1bWVudHMgaXMgbm90IGEgTGlzdDogJGFyZ3VtZW50cyIpOwogICAgfQogICAgaW50IGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7CiAgICBfYXJndW1lbnRzID0gbmV3IExpc3Q8U3RyaW5nPihsZW4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICB2YXIgYXJnID0gYXJndW1lbnRzW2ldOwogICAgICBpZiAoYXJnIGlzISBTdHJpbmcpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiTm9uLXN0cmluZyBhcmd1bWVudDogJGFyZyIpOwogICAgICB9CiAgICAgIF9hcmd1bWVudHNbaV0gPSBhcmd1bWVudHNbaV07CiAgICAgIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgICAgICBfYXJndW1lbnRzW2ldID0gX3dpbmRvd3NBcmd1bWVudEVzY2FwZShfYXJndW1lbnRzW2ldKTsKICAgICAgfQogICAgfQoKICAgIGlmIChfd29ya2luZ0RpcmVjdG9yeSAhPSBudWxsICYmIF93b3JraW5nRGlyZWN0b3J5IGlzISBTdHJpbmcpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAiV29ya2luZ0RpcmVjdG9yeSBpcyBub3QgYSBTdHJpbmc6ICRfd29ya2luZ0RpcmVjdG9yeSIpOwogICAgfQoKICAgIF9lbnZpcm9ubWVudCA9IFtdOwogICAgLy8gRW5zdXJlIHRoYXQgd2UgaGF2ZSBhIG5vbi1udWxsIGVudmlyb25tZW50LgogICAgZW52aXJvbm1lbnQgPSAoZW52aXJvbm1lbnQgPT0gbnVsbCkgPyAoY29uc3Qge30pIDogZW52aXJvbm1lbnQ7CiAgICBpZiAoZW52aXJvbm1lbnQgaXMhIE1hcCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiRW52aXJvbm1lbnQgaXMgbm90IGEgbWFwOiAkZW52aXJvbm1lbnQiKTsKICAgIH0KICAgIGVudmlyb25tZW50LmZvckVhY2goKGtleSwgdmFsdWUpIHsKICAgICAgaWYgKGtleSBpcyEgU3RyaW5nIHx8IHZhbHVlIGlzISBTdHJpbmcpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgIkVudmlyb25tZW50IGtleSBvciB2YWx1ZSBpcyBub3QgYSBzdHJpbmc6ICgka2V5LCAkdmFsdWUpIik7CiAgICAgIH0KICAgICAgX2Vudmlyb25tZW50LmFkZCgnJGtleT0kdmFsdWUnKTsKICAgIH0pOwogICAgaWYgKGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudCkgewogICAgICBQbGF0Zm9ybS5lbnZpcm9ubWVudC5mb3JFYWNoKChrZXksIHZhbHVlKSB7CiAgICAgICAgYXNzZXJ0KGtleSBpcyBTdHJpbmcpOwogICAgICAgIGFzc2VydCh2YWx1ZSBpcyBTdHJpbmcpOwogICAgICAgIC8vIERvIG5vdCBvdmVycmlkZSBrZXlzIGFscmVhZHkgc2V0IGFzIHBhcnQgb2YgZW52aXJvbm1lbnQuCiAgICAgICAgaWYgKCFlbnZpcm9ubWVudC5jb250YWluc0tleShrZXkpKSB7CiAgICAgICAgICBfZW52aXJvbm1lbnQuYWRkKCcka2V5PSR2YWx1ZScpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CgogICAgaWYgKG1vZGUgaXMhIFByb2Nlc3NTdGFydE1vZGUpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIk1vZGUgaXMgbm90IGEgUHJvY2Vzc1N0YXJ0TW9kZTogJG1vZGUiKTsKICAgIH0KICAgIF9tb2RlID0gbW9kZTsKCiAgICBpZiAoX21vZGVIYXNTdGRpbyhtb2RlKSkgewogICAgICAvLyBzdGRpbiBnb2luZyB0byBwcm9jZXNzLgogICAgICBfc3RkaW4gPSBuZXcgX1N0ZFNpbmsobmV3IF9Tb2NrZXQuX3dyaXRlUGlwZSgpLi5fb3duZXIgPSB0aGlzKTsKICAgICAgLy8gc3Rkb3V0IGNvbWluZyBmcm9tIHByb2Nlc3MuCiAgICAgIF9zdGRvdXQgPSBuZXcgX1N0ZFN0cmVhbShuZXcgX1NvY2tldC5fcmVhZFBpcGUoKS4uX293bmVyID0gdGhpcyk7CiAgICAgIC8vIHN0ZGVyciBjb21pbmcgZnJvbSBwcm9jZXNzLgogICAgICBfc3RkZXJyID0gbmV3IF9TdGRTdHJlYW0obmV3IF9Tb2NrZXQuX3JlYWRQaXBlKCkuLl9vd25lciA9IHRoaXMpOwogICAgfQogICAgaWYgKF9tb2RlSXNBdHRhY2hlZChtb2RlKSkgewogICAgICBfZXhpdEhhbmRsZXIgPSBuZXcgX1NvY2tldC5fcmVhZFBpcGUoKTsKICAgIH0KICAgIF9lbmRlZCA9IGZhbHNlOwogICAgX3N0YXJ0ZWQgPSBmYWxzZTsKICB9CgogIF9OYXRpdmVTb2NrZXQgZ2V0IF9zdGRpbk5hdGl2ZVNvY2tldCA9PgogICAgICAoX3N0ZGluLl9zaW5rIGFzIF9Tb2NrZXQpLl9uYXRpdmVTb2NrZXQ7CiAgX05hdGl2ZVNvY2tldCBnZXQgX3N0ZG91dE5hdGl2ZVNvY2tldCA9PgogICAgICAoX3N0ZG91dC5fc3RyZWFtIGFzIF9Tb2NrZXQpLl9uYXRpdmVTb2NrZXQ7CiAgX05hdGl2ZVNvY2tldCBnZXQgX3N0ZGVyck5hdGl2ZVNvY2tldCA9PgogICAgICAoX3N0ZGVyci5fc3RyZWFtIGFzIF9Tb2NrZXQpLl9uYXRpdmVTb2NrZXQ7CgogIHN0YXRpYyBib29sIF9tb2RlSXNBdHRhY2hlZChQcm9jZXNzU3RhcnRNb2RlIG1vZGUpIHsKICAgIHJldHVybiAobW9kZSA9PSBQcm9jZXNzU3RhcnRNb2RlLm5vcm1hbCkgfHwKICAgICAgICAobW9kZSA9PSBQcm9jZXNzU3RhcnRNb2RlLmluaGVyaXRTdGRpbyk7CiAgfQoKICBzdGF0aWMgYm9vbCBfbW9kZUhhc1N0ZGlvKFByb2Nlc3NTdGFydE1vZGUgbW9kZSkgewogICAgcmV0dXJuIChtb2RlID09IFByb2Nlc3NTdGFydE1vZGUubm9ybWFsKSB8fAogICAgICAgIChtb2RlID09IFByb2Nlc3NTdGFydE1vZGUuZGV0YWNoZWRXaXRoU3RkaW8pOwogIH0KCiAgc3RhdGljIFN0cmluZyBfZ2V0U2hlbGxDb21tYW5kKCkgewogICAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgICByZXR1cm4gJ2NtZC5leGUnOwogICAgfQogICAgcmV0dXJuICcvYmluL3NoJzsKICB9CgogIHN0YXRpYyBMaXN0PFN0cmluZz4gX2dldFNoZWxsQXJndW1lbnRzKAogICAgICBTdHJpbmcgZXhlY3V0YWJsZSwgTGlzdDxTdHJpbmc+IGFyZ3VtZW50cykgewogICAgTGlzdDxTdHJpbmc+IHNoZWxsQXJndW1lbnRzID0gW107CiAgICBpZiAoUGxhdGZvcm0uaXNXaW5kb3dzKSB7CiAgICAgIHNoZWxsQXJndW1lbnRzLmFkZCgnL2MnKTsKICAgICAgc2hlbGxBcmd1bWVudHMuYWRkKGV4ZWN1dGFibGUpOwogICAgICBmb3IgKHZhciBhcmcgaW4gYXJndW1lbnRzKSB7CiAgICAgICAgc2hlbGxBcmd1bWVudHMuYWRkKGFyZyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZhciBjb21tYW5kTGluZSA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgICAgZXhlY3V0YWJsZSA9IGV4ZWN1dGFibGUucmVwbGFjZUFsbCgiJyIsICInXCInXCInIik7CiAgICAgIGNvbW1hbmRMaW5lLndyaXRlKCInJGV4ZWN1dGFibGUnIik7CiAgICAgIHNoZWxsQXJndW1lbnRzLmFkZCgiLWMiKTsKICAgICAgZm9yICh2YXIgYXJnIGluIGFyZ3VtZW50cykgewogICAgICAgIGFyZyA9IGFyZy5yZXBsYWNlQWxsKCInIiwgIidcIidcIiciKTsKICAgICAgICBjb21tYW5kTGluZS53cml0ZSgiICckYXJnJyIpOwogICAgICB9CiAgICAgIHNoZWxsQXJndW1lbnRzLmFkZChjb21tYW5kTGluZS50b1N0cmluZygpKTsKICAgIH0KICAgIHJldHVybiBzaGVsbEFyZ3VtZW50czsKICB9CgogIFN0cmluZyBfd2luZG93c0FyZ3VtZW50RXNjYXBlKFN0cmluZyBhcmd1bWVudCkgewogICAgdmFyIHJlc3VsdCA9IGFyZ3VtZW50OwogICAgaWYgKGFyZ3VtZW50LmNvbnRhaW5zKCdcdCcpIHx8CiAgICAgICAgYXJndW1lbnQuY29udGFpbnMoJyAnKSB8fAogICAgICAgIGFyZ3VtZW50LmNvbnRhaW5zKCciJykpIHsKICAgICAgLy8gUHJvZHVjZSBzb21ldGhpbmcgdGhhdCB0aGUgQyBydW50aW1lIG9uIFdpbmRvd3Mgd2lsbCBwYXJzZQogICAgICAvLyBiYWNrIGFzIHRoaXMgc3RyaW5nLgoKICAgICAgLy8gUmVwbGFjZSBhbnkgbnVtYmVyIG9mICdcJyBmb2xsb3dlZCBieSAnIicgd2l0aAogICAgICAvLyB0d2ljZSBhcyBtYW55ICdcJyBmb2xsb3dlZCBieSAnXCInLgogICAgICB2YXIgYmFja3NsYXNoID0gJ1xcJy5jb2RlVW5pdEF0KDApOwogICAgICB2YXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgIHZhciBuZXh0UG9zID0gMDsKICAgICAgdmFyIHF1b3RlUG9zID0gYXJndW1lbnQuaW5kZXhPZignIicsIG5leHRQb3MpOwogICAgICB3aGlsZSAocXVvdGVQb3MgIT0gLTEpIHsKICAgICAgICB2YXIgbnVtQmFja3NsYXNoID0gMDsKICAgICAgICB2YXIgcG9zID0gcXVvdGVQb3MgLSAxOwogICAgICAgIHdoaWxlIChwb3MgPj0gMCAmJiBhcmd1bWVudC5jb2RlVW5pdEF0KHBvcykgPT0gYmFja3NsYXNoKSB7CiAgICAgICAgICBudW1CYWNrc2xhc2grKzsKICAgICAgICAgIHBvcy0tOwogICAgICAgIH0KICAgICAgICBzYi53cml0ZShhcmd1bWVudC5zdWJzdHJpbmcobmV4dFBvcywgcXVvdGVQb3MgLSBudW1CYWNrc2xhc2gpKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUJhY2tzbGFzaDsgaSsrKSB7CiAgICAgICAgICBzYi53cml0ZShyJ1xcJyk7CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlKHInXCInKTsKICAgICAgICBuZXh0UG9zID0gcXVvdGVQb3MgKyAxOwogICAgICAgIHF1b3RlUG9zID0gYXJndW1lbnQuaW5kZXhPZignIicsIG5leHRQb3MpOwogICAgICB9CiAgICAgIHNiLndyaXRlKGFyZ3VtZW50LnN1YnN0cmluZyhuZXh0UG9zLCBhcmd1bWVudC5sZW5ndGgpKTsKICAgICAgcmVzdWx0ID0gc2IudG9TdHJpbmcoKTsKCiAgICAgIC8vIEFkZCAnIicgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIGFuZCByZXBsYWNlIGFsbCAnXCcgYXQKICAgICAgLy8gdGhlIGVuZCB3aXRoIHR3byAnXCcuCiAgICAgIHNiID0gbmV3IFN0cmluZ0J1ZmZlcignIicpOwogICAgICBzYi53cml0ZShyZXN1bHQpOwogICAgICBuZXh0UG9zID0gYXJndW1lbnQubGVuZ3RoIC0gMTsKICAgICAgd2hpbGUgKGFyZ3VtZW50LmNvZGVVbml0QXQobmV4dFBvcykgPT0gYmFja3NsYXNoKSB7CiAgICAgICAgc2Iud3JpdGUoJ1xcJyk7CiAgICAgICAgbmV4dFBvcy0tOwogICAgICB9CiAgICAgIHNiLndyaXRlKCciJyk7CiAgICAgIHJlc3VsdCA9IHNiLnRvU3RyaW5nKCk7CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGludCBfaW50RnJvbUJ5dGVzKExpc3Q8aW50PiBieXRlcywgaW50IG9mZnNldCkgewogICAgcmV0dXJuIChieXRlc1tvZmZzZXRdICsKICAgICAgICAoYnl0ZXNbb2Zmc2V0ICsgMV0gPDwgOCkgKwogICAgICAgIChieXRlc1tvZmZzZXQgKyAyXSA8PCAxNikgKwogICAgICAgIChieXRlc1tvZmZzZXQgKyAzXSA8PCAyNCkpOwogIH0KCiAgRnV0dXJlPFByb2Nlc3M+IF9zdGFydCgpIHsKICAgIHZhciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFByb2Nlc3M+KCk7CiAgICBpZiAoX21vZGVJc0F0dGFjaGVkKF9tb2RlKSkgewogICAgICBfZXhpdENvZGUgPSBuZXcgQ29tcGxldGVyPGludD4oKTsKICAgIH0KICAgIC8vIFRPRE8oYWdlcik6IE1ha2UgdGhlIGFjdHVhbCBwcm9jZXNzIHN0YXJ0aW5nIHJlYWxseSBhc3luYyBpbnN0ZWFkIG9mCiAgICAvLyBzaW11bGF0aW5nIGl0IHdpdGggYSB0aW1lci4KICAgIFRpbWVyLnJ1bigoKSB7CiAgICAgIHZhciBzdGF0dXMgPSBuZXcgX1Byb2Nlc3NTdGFydFN0YXR1cygpOwogICAgICBib29sIHN1Y2Nlc3MgPSBfc3RhcnROYXRpdmUoCiAgICAgICAgICBfTmFtZXNwYWNlLl9uYW1lc3BhY2UsCiAgICAgICAgICBfcGF0aCwKICAgICAgICAgIF9hcmd1bWVudHMsCiAgICAgICAgICBfd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICAgIF9lbnZpcm9ubWVudCwKICAgICAgICAgIF9tb2RlLl9tb2RlLAogICAgICAgICAgX21vZGVIYXNTdGRpbyhfbW9kZSkgPyBfc3RkaW5OYXRpdmVTb2NrZXQgOiBudWxsLAogICAgICAgICAgX21vZGVIYXNTdGRpbyhfbW9kZSkgPyBfc3Rkb3V0TmF0aXZlU29ja2V0IDogbnVsbCwKICAgICAgICAgIF9tb2RlSGFzU3RkaW8oX21vZGUpID8gX3N0ZGVyck5hdGl2ZVNvY2tldCA6IG51bGwsCiAgICAgICAgICBfbW9kZUlzQXR0YWNoZWQoX21vZGUpID8gX2V4aXRIYW5kbGVyLl9uYXRpdmVTb2NrZXQgOiBudWxsLAogICAgICAgICAgc3RhdHVzKTsKICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlRXJyb3IobmV3IFByb2Nlc3NFeGNlcHRpb24oCiAgICAgICAgICAgIF9wYXRoLCBfYXJndW1lbnRzLCBzdGF0dXMuX2Vycm9yTWVzc2FnZSwgc3RhdHVzLl9lcnJvckNvZGUpKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIF9zdGFydGVkID0gdHJ1ZTsKICAgICAgX3Jlc291cmNlSW5mbyA9IG5ldyBfUHJvY2Vzc1Jlc291cmNlSW5mbyh0aGlzKTsKCiAgICAgIC8vIFNldHVwIGFuIGV4aXQgaGFuZGxlciB0byBoYW5kbGUgaW50ZXJuYWwgY2xlYW51cCBhbmQgcG9zc2libGUKICAgICAgLy8gY2FsbGJhY2sgd2hlbiBhIHByb2Nlc3MgdGVybWluYXRlcy4KICAgICAgaWYgKF9tb2RlSXNBdHRhY2hlZChfbW9kZSkpIHsKICAgICAgICBpbnQgZXhpdERhdGFSZWFkID0gMDsKICAgICAgICBmaW5hbCBpbnQgRVhJVF9EQVRBX1NJWkUgPSA4OwogICAgICAgIExpc3Q8aW50PiBleGl0RGF0YUJ1ZmZlciA9IG5ldyBMaXN0PGludD4oRVhJVF9EQVRBX1NJWkUpOwogICAgICAgIF9leGl0SGFuZGxlci5saXN0ZW4oKGRhdGEpIHsKICAgICAgICAgIGludCBleGl0Q29kZShMaXN0PGludD4gaW50cykgewogICAgICAgICAgICB2YXIgY29kZSA9IF9pbnRGcm9tQnl0ZXMoaW50cywgMCk7CiAgICAgICAgICAgIHZhciBuZWdhdGl2ZSA9IF9pbnRGcm9tQnl0ZXMoaW50cywgNCk7CiAgICAgICAgICAgIGFzc2VydChuZWdhdGl2ZSA9PSAwIHx8IG5lZ2F0aXZlID09IDEpOwogICAgICAgICAgICByZXR1cm4gKG5lZ2F0aXZlID09IDApID8gY29kZSA6IC1jb2RlOwogICAgICAgICAgfQoKICAgICAgICAgIHZvaWQgaGFuZGxlRXhpdCgpIHsKICAgICAgICAgICAgX2VuZGVkID0gdHJ1ZTsKICAgICAgICAgICAgX2V4aXRDb2RlLmNvbXBsZXRlKGV4aXRDb2RlKGV4aXREYXRhQnVmZmVyKSk7CiAgICAgICAgICAgIC8vIEtpbGwgc3RkaW4sIGhlbHBpbmcgaGFuZCBpZiB0aGUgdXNlciBmb3Jnb3QgdG8gZG8gaXQuCiAgICAgICAgICAgIGlmIChfbW9kZUhhc1N0ZGlvKF9tb2RlKSkgewogICAgICAgICAgICAgIChfc3RkaW4uX3NpbmsgYXMgX1NvY2tldCkuZGVzdHJveSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9yZXNvdXJjZUluZm8uc3RvcHBlZCgpOwogICAgICAgICAgfQoKICAgICAgICAgIGV4aXREYXRhQnVmZmVyLnNldFJhbmdlKAogICAgICAgICAgICAgIGV4aXREYXRhUmVhZCwgZXhpdERhdGFSZWFkICsgZGF0YS5sZW5ndGgsIGRhdGEpOwogICAgICAgICAgZXhpdERhdGFSZWFkICs9IGRhdGEubGVuZ3RoOwogICAgICAgICAgaWYgKGV4aXREYXRhUmVhZCA9PSBFWElUX0RBVEFfU0laRSkgewogICAgICAgICAgICBoYW5kbGVFeGl0KCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIGNvbXBsZXRlci5jb21wbGV0ZSh0aGlzKTsKICAgIH0pOwogICAgcmV0dXJuIGNvbXBsZXRlci5mdXR1cmU7CiAgfQoKICBQcm9jZXNzUmVzdWx0IF9ydW5BbmRXYWl0KEVuY29kaW5nIHN0ZG91dEVuY29kaW5nLCBFbmNvZGluZyBzdGRlcnJFbmNvZGluZykgewogICAgdmFyIHN0YXR1cyA9IG5ldyBfUHJvY2Vzc1N0YXJ0U3RhdHVzKCk7CiAgICBfZXhpdENvZGUgPSBuZXcgQ29tcGxldGVyPGludD4oKTsKICAgIGJvb2wgc3VjY2VzcyA9IF9zdGFydE5hdGl2ZSgKICAgICAgICBfTmFtZXNwYWNlLl9uYW1lc3BhY2UsCiAgICAgICAgX3BhdGgsCiAgICAgICAgX2FyZ3VtZW50cywKICAgICAgICBfd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICBfZW52aXJvbm1lbnQsCiAgICAgICAgUHJvY2Vzc1N0YXJ0TW9kZS5ub3JtYWwuX21vZGUsCiAgICAgICAgX3N0ZGluTmF0aXZlU29ja2V0LAogICAgICAgIF9zdGRvdXROYXRpdmVTb2NrZXQsCiAgICAgICAgX3N0ZGVyck5hdGl2ZVNvY2tldCwKICAgICAgICBfZXhpdEhhbmRsZXIuX25hdGl2ZVNvY2tldCwKICAgICAgICBzdGF0dXMpOwogICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgIHRocm93IG5ldyBQcm9jZXNzRXhjZXB0aW9uKAogICAgICAgICAgX3BhdGgsIF9hcmd1bWVudHMsIHN0YXR1cy5fZXJyb3JNZXNzYWdlLCBzdGF0dXMuX2Vycm9yQ29kZSk7CiAgICB9CgogICAgX3Jlc291cmNlSW5mbyA9IG5ldyBfUHJvY2Vzc1Jlc291cmNlSW5mbyh0aGlzKTsKCiAgICB2YXIgcmVzdWx0ID0gX3dhaXQoX3N0ZGluTmF0aXZlU29ja2V0LCBfc3Rkb3V0TmF0aXZlU29ja2V0LAogICAgICAgIF9zdGRlcnJOYXRpdmVTb2NrZXQsIF9leGl0SGFuZGxlci5fbmF0aXZlU29ja2V0KTsKCiAgICBnZXRPdXRwdXQob3V0cHV0LCBlbmNvZGluZykgewogICAgICBpZiAoZW5jb2RpbmcgPT0gbnVsbCkgcmV0dXJuIG91dHB1dDsKICAgICAgcmV0dXJuIGVuY29kaW5nLmRlY29kZShvdXRwdXQpOwogICAgfQoKICAgIF9yZXNvdXJjZUluZm8uc3RvcHBlZCgpOwoKICAgIHJldHVybiBuZXcgUHJvY2Vzc1Jlc3VsdCgKICAgICAgICByZXN1bHRbMF0sCiAgICAgICAgcmVzdWx0WzFdLAogICAgICAgIGdldE91dHB1dChyZXN1bHRbMl0sIHN0ZG91dEVuY29kaW5nKSwKICAgICAgICBnZXRPdXRwdXQocmVzdWx0WzNdLCBzdGRlcnJFbmNvZGluZykpOwogIH0KCiAgYm9vbCBfc3RhcnROYXRpdmUoCiAgICAgIF9OYW1lc3BhY2UgbmFtZXNwYWNlLAogICAgICBTdHJpbmcgcGF0aCwKICAgICAgTGlzdDxTdHJpbmc+IGFyZ3VtZW50cywKICAgICAgU3RyaW5nIHdvcmtpbmdEaXJlY3RvcnksCiAgICAgIExpc3Q8U3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgaW50IG1vZGUsCiAgICAgIF9OYXRpdmVTb2NrZXQgc3RkaW4sCiAgICAgIF9OYXRpdmVTb2NrZXQgc3Rkb3V0LAogICAgICBfTmF0aXZlU29ja2V0IHN0ZGVyciwKICAgICAgX05hdGl2ZVNvY2tldCBleGl0SGFuZGxlciwKICAgICAgX1Byb2Nlc3NTdGFydFN0YXR1cyBzdGF0dXMpIG5hdGl2ZSAiUHJvY2Vzc19TdGFydCI7CgogIF93YWl0KF9OYXRpdmVTb2NrZXQgc3RkaW4sIF9OYXRpdmVTb2NrZXQgc3Rkb3V0LCBfTmF0aXZlU29ja2V0IHN0ZGVyciwKICAgICAgX05hdGl2ZVNvY2tldCBleGl0SGFuZGxlcikgbmF0aXZlICJQcm9jZXNzX1dhaXQiOwoKICBTdHJlYW08TGlzdDxpbnQ+PiBnZXQgc3Rkb3V0IHsKICAgIHJldHVybiBfc3Rkb3V0OwogIH0KCiAgU3RyZWFtPExpc3Q8aW50Pj4gZ2V0IHN0ZGVyciB7CiAgICByZXR1cm4gX3N0ZGVycjsKICB9CgogIElPU2luayBnZXQgc3RkaW4gewogICAgcmV0dXJuIF9zdGRpbjsKICB9CgogIEZ1dHVyZTxpbnQ+IGdldCBleGl0Q29kZSA9PiBfZXhpdENvZGUgIT0gbnVsbCA/IF9leGl0Q29kZS5mdXR1cmUgOiBudWxsOwoKICBib29sIGtpbGwoW1Byb2Nlc3NTaWduYWwgc2lnbmFsID0gUHJvY2Vzc1NpZ25hbC5zaWd0ZXJtXSkgewogICAgaWYgKHNpZ25hbCBpcyEgUHJvY2Vzc1NpZ25hbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiQXJndW1lbnQgJ3NpZ25hbCcgbXVzdCBiZSBhIFByb2Nlc3NTaWduYWwiKTsKICAgIH0KICAgIGFzc2VydChfc3RhcnRlZCk7CiAgICBpZiAoX2VuZGVkKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gX1Byb2Nlc3NVdGlscy5fa2lsbFBpZChwaWQsIHNpZ25hbC5fc2lnbmFsTnVtYmVyKTsKICB9CgogIGludCBnZXQgcGlkID0+IF9Qcm9jZXNzVXRpbHMuX3BpZCh0aGlzKTsKCiAgU3RyaW5nIF9wYXRoOwogIExpc3Q8U3RyaW5nPiBfYXJndW1lbnRzOwogIFN0cmluZyBfd29ya2luZ0RpcmVjdG9yeTsKICBMaXN0PFN0cmluZz4gX2Vudmlyb25tZW50OwogIFByb2Nlc3NTdGFydE1vZGUgX21vZGU7CiAgLy8gUHJpdmF0ZSBtZXRob2RzIG9mIFNvY2tldCBhcmUgdXNlZCBieSBfaW4sIF9vdXQsIGFuZCBfZXJyLgogIF9TdGRTaW5rIF9zdGRpbjsKICBfU3RkU3RyZWFtIF9zdGRvdXQ7CiAgX1N0ZFN0cmVhbSBfc3RkZXJyOwogIF9Tb2NrZXQgX2V4aXRIYW5kbGVyOwogIGJvb2wgX2VuZGVkOwogIGJvb2wgX3N0YXJ0ZWQ7CiAgQ29tcGxldGVyPGludD4gX2V4aXRDb2RlOwp9CgovLyBfTm9uSW50ZXJhY3RpdmVQcm9jZXNzIGlzIGEgd3JhcHBlciBhcm91bmQgYW4gaW50ZXJhY3RpdmUgcHJvY2VzcwovLyB0aGF0IGJ1ZmZlcnMgb3V0cHV0IHNvIGl0IGNhbiBiZSBkZWxpdmVyZWQgd2hlbiB0aGUgcHJvY2VzcyBleGl0cy4KLy8gX05vbkludGVyYWN0aXZlUHJvY2VzcyBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgUHJvY2Vzcy5ydW4KLy8gbWV0aG9kLgpGdXR1cmU8UHJvY2Vzc1Jlc3VsdD4gX3J1bk5vbkludGVyYWN0aXZlUHJvY2VzcygKICAgIFN0cmluZyBwYXRoLAogICAgTGlzdDxTdHJpbmc+IGFyZ3VtZW50cywKICAgIFN0cmluZyB3b3JraW5nRGlyZWN0b3J5LAogICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgIGJvb2wgaW5jbHVkZVBhcmVudEVudmlyb25tZW50LAogICAgYm9vbCBydW5JblNoZWxsLAogICAgRW5jb2Rpbmcgc3Rkb3V0RW5jb2RpbmcsCiAgICBFbmNvZGluZyBzdGRlcnJFbmNvZGluZykgewogIC8vIFN0YXJ0IHRoZSB1bmRlcmx5aW5nIHByb2Nlc3MuCiAgcmV0dXJuIFByb2Nlc3Muc3RhcnQocGF0aCwgYXJndW1lbnRzLAogICAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogd29ya2luZ0RpcmVjdG9yeSwKICAgICAgICAgIGVudmlyb25tZW50OiBlbnZpcm9ubWVudCwKICAgICAgICAgIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudDogaW5jbHVkZVBhcmVudEVudmlyb25tZW50LAogICAgICAgICAgcnVuSW5TaGVsbDogcnVuSW5TaGVsbCkKICAgICAgLnRoZW4oKFByb2Nlc3MgcCkgewogICAgaW50IHBpZCA9IHAucGlkOwoKICAgIC8vIE1ha2Ugc3VyZSB0aGUgcHJvY2VzcyBzdGRpbiBpcyBjbG9zZWQuCiAgICBwLnN0ZGluLmNsb3NlKCk7CgogICAgLy8gU2V0dXAgc3Rkb3V0IGFuZCBzdGRlcnIgaGFuZGxpbmcuCiAgICBGdXR1cmUgZm9sZFN0cmVhbShTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0sIEVuY29kaW5nIGVuY29kaW5nKSB7CiAgICAgIGlmIChlbmNvZGluZyA9PSBudWxsKSB7CiAgICAgICAgcmV0dXJuIHN0cmVhbQogICAgICAgICAgICAuZm9sZChuZXcgQnl0ZXNCdWlsZGVyKCksIChidWlsZGVyLCBkYXRhKSA9PiBidWlsZGVyLi5hZGQoZGF0YSkpCiAgICAgICAgICAgIC50aGVuKChidWlsZGVyKSA9PiBidWlsZGVyLnRha2VCeXRlcygpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gc3RyZWFtLnRyYW5zZm9ybShlbmNvZGluZy5kZWNvZGVyKS5mb2xkKG5ldyBTdHJpbmdCdWZmZXIoKSwKICAgICAgICAgICAgKGJ1ZiwgZGF0YSkgewogICAgICAgICAgYnVmLndyaXRlKGRhdGEpOwogICAgICAgICAgcmV0dXJuIGJ1ZjsKICAgICAgICB9KS50aGVuKChzYikgPT4gc2IudG9TdHJpbmcoKSk7CiAgICAgIH0KICAgIH0KCiAgICBGdXR1cmUgc3Rkb3V0ID0gZm9sZFN0cmVhbShwLnN0ZG91dCwgc3Rkb3V0RW5jb2RpbmcpOwogICAgRnV0dXJlIHN0ZGVyciA9IGZvbGRTdHJlYW0ocC5zdGRlcnIsIHN0ZGVyckVuY29kaW5nKTsKCiAgICByZXR1cm4gRnV0dXJlLndhaXQoW3AuZXhpdENvZGUsIHN0ZG91dCwgc3RkZXJyXSkudGhlbigocmVzdWx0KSB7CiAgICAgIHJldHVybiBuZXcgUHJvY2Vzc1Jlc3VsdChwaWQsIHJlc3VsdFswXSwgcmVzdWx0WzFdLCByZXN1bHRbMl0pOwogICAgfSk7CiAgfSk7Cn0KClByb2Nlc3NSZXN1bHQgX3J1bk5vbkludGVyYWN0aXZlUHJvY2Vzc1N5bmMoCiAgICBTdHJpbmcgZXhlY3V0YWJsZSwKICAgIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICBTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICAgIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQsCiAgICBib29sIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudCwKICAgIGJvb2wgcnVuSW5TaGVsbCwKICAgIEVuY29kaW5nIHN0ZG91dEVuY29kaW5nLAogICAgRW5jb2Rpbmcgc3RkZXJyRW5jb2RpbmcpIHsKICB2YXIgcHJvY2VzcyA9IG5ldyBfUHJvY2Vzc0ltcGwoCiAgICAgIGV4ZWN1dGFibGUsCiAgICAgIGFyZ3VtZW50cywKICAgICAgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgZW52aXJvbm1lbnQsCiAgICAgIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudCwKICAgICAgcnVuSW5TaGVsbCwKICAgICAgUHJvY2Vzc1N0YXJ0TW9kZS5ub3JtYWwpOwogIHJldHVybiBwcm9jZXNzLl9ydW5BbmRXYWl0KHN0ZG91dEVuY29kaW5nLCBzdGRlcnJFbmNvZGluZyk7Cn0Kgn0ATk48ASABByAJTwIBByAJUQIBBxAJSiAnKx45LRQTGhUiFA8dBAEJTiAnKx4vMiYUExoVIhQYGQQBCUogJyseLzIqFBMaFSIUGBkEAQlRJEwGPgQCATsBGh4BLwsBI0EvBAE6ARM2FhJODgYORBwqIzEjCggIBAETFzESBgQBSi0rAgEiSgEHFgk3CUUJOgk5CTlGCUQqKisfMDM2ITwGKQQBTDxQBjwEAgEHFAkaHB0UBhMEAQkeIB0UBhMEATA4AgEaHCNDI0wCAU0ZRAFKJjABEBMeHiclFx0SJRlRNjcnBgEWNyEGARs+BhIBHkYGICgkHhw+CCQgPwgGAUUfQwYBFzNEH0kGJzAhSQgnCCQyHyFELSsKCgYBJUgGEgEfIUYlSCVIBiEuBhQWBAEqLysyKzIBNzAxBAE1MDYEASUeGAYWBAEqMyYeICYjIQgNLDoqICMuJggyBhsEATMbIyIiRB4BOC0qIxc1Hx4gRBoRCkgxGwoZIDMIPh4BQR8iGCU6GBMIFR4GARMEATMcIyQkBAEdLiIoBkwjEy4jIREWHRgXPD09RhMWNkoQCAEXNgFHLSQeJkIlKS8zNDMMAR4bOkUoMw4lDAEjPycwGgwMCAEgCB0EAVAsJiEfDxQbFiccHR0kERQiRwYBNAFAOgEiKyYGAR0BHhMTLi8EARUcEx4fIBAbHBwhOgFJOAEhFAQBIRQEARUTBAFLAT4kTAYWHj4EASsBEBscHRpAExYWGA8RHAIBRUY/CzERHB0lIxUdHyMoLiQ+IhoVAS4VASlFHhZNNQ9LGhsWKAgGATo6AUVGCAYCAS0XHB0lIxUdHyISERgTIBIgPgIBIGRhcnQ6aW8tcGF0Y2gvcHJvY2Vzc19wYXRjaC5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9iaW4vc29ja2V0X3BhdGNoLmRhcnTAAPLiLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvbW1vbl9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBSYXdTZXJ2ZXJTb2NrZXQgewogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8UmF3U2VydmVyU29ja2V0PiBiaW5kKGFkZHJlc3MsIGludCBwb3J0LAogICAgICB7aW50IGJhY2tsb2c6IDAsIGJvb2wgdjZPbmx5OiBmYWxzZSwgYm9vbCBzaGFyZWQ6IGZhbHNlfSkgewogICAgcmV0dXJuIF9SYXdTZXJ2ZXJTb2NrZXQuYmluZChhZGRyZXNzLCBwb3J0LCBiYWNrbG9nLCB2Nk9ubHksIHNoYXJlZCk7CiAgfQp9CgpAcGF0Y2gKY2xhc3MgUmF3U29ja2V0IHsKICBAcGF0Y2gKICBzdGF0aWMgRnV0dXJlPFJhd1NvY2tldD4gY29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KSB7CiAgICByZXR1cm4gX1Jhd1NvY2tldC5jb25uZWN0KGhvc3QsIHBvcnQsIHNvdXJjZUFkZHJlc3MsIHRpbWVvdXQpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxDb25uZWN0aW9uVGFzazxSYXdTb2NrZXQ+PiBzdGFydENvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtzb3VyY2VBZGRyZXNzfSkgewogICAgcmV0dXJuIF9SYXdTb2NrZXQuc3RhcnRDb25uZWN0KGhvc3QsIHBvcnQsIHNvdXJjZUFkZHJlc3MpOwogIH0KfQoKQHBhdGNoCmNsYXNzIFJhd1NvY2tldE9wdGlvbiB7CiAgc3RhdGljIGZpbmFsIExpc3Q8aW50PiBfb3B0aW9uc0NhY2hlID0KICAgICAgTGlzdDxpbnQ+KF9SYXdTb2NrZXRPcHRpb25zLnZhbHVlcy5sZW5ndGgpOwoKICBAcGF0Y2gKICBzdGF0aWMgaW50IF9nZXRPcHRpb25WYWx1ZShpbnQga2V5KSB7CiAgICBpZiAoa2V5ID4gX1Jhd1NvY2tldE9wdGlvbnMudmFsdWVzLmxlbmd0aCkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yLnZhbHVlKGtleSwgJ2tleScpOwogICAgfQogICAgX29wdGlvbnNDYWNoZVtrZXldID8/PSBfZ2V0TmF0aXZlT3B0aW9uVmFsdWUoa2V5KTsKICAgIHJldHVybiBfb3B0aW9uc0NhY2hlW2tleV07CiAgfQoKICBzdGF0aWMgaW50IF9nZXROYXRpdmVPcHRpb25WYWx1ZShpbnQga2V5KQogICAgICBuYXRpdmUgIlJhd1NvY2tldE9wdGlvbl9HZXRPcHRpb25WYWx1ZSI7Cn0KCkBwYXRjaApjbGFzcyBJbnRlcm5ldEFkZHJlc3MgewogIEBwYXRjaAogIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IExPT1BCQUNLX0lQX1Y0IHsKICAgIHJldHVybiBfSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2NDsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IExPT1BCQUNLX0lQX1Y2IHsKICAgIHJldHVybiBfSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2NjsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IEFOWV9JUF9WNCB7CiAgICByZXR1cm4gX0ludGVybmV0QWRkcmVzcy5hbnlJUHY0OwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIEludGVybmV0QWRkcmVzcyBnZXQgQU5ZX0lQX1Y2IHsKICAgIHJldHVybiBfSW50ZXJuZXRBZGRyZXNzLmFueUlQdjY7CiAgfQoKICBAcGF0Y2gKICBmYWN0b3J5IEludGVybmV0QWRkcmVzcyhTdHJpbmcgYWRkcmVzcykgewogICAgcmV0dXJuIG5ldyBfSW50ZXJuZXRBZGRyZXNzLnBhcnNlKGFkZHJlc3MpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIEZ1dHVyZTxMaXN0PEludGVybmV0QWRkcmVzcz4+IGxvb2t1cChTdHJpbmcgaG9zdCwKICAgICAge0ludGVybmV0QWRkcmVzc1R5cGUgdHlwZTogSW50ZXJuZXRBZGRyZXNzVHlwZS5hbnl9KSB7CiAgICByZXR1cm4gX05hdGl2ZVNvY2tldC5sb29rdXAoaG9zdCwgdHlwZTogdHlwZSk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIF9jbG9uZVdpdGhOZXdIb3N0KAogICAgICBJbnRlcm5ldEFkZHJlc3MgYWRkcmVzcywgU3RyaW5nIGhvc3QpIHsKICAgIHJldHVybiAoYWRkcmVzcyBhcyBfSW50ZXJuZXRBZGRyZXNzKS5fY2xvbmVXaXRoTmV3SG9zdChob3N0KTsKICB9Cn0KCkBwYXRjaApjbGFzcyBOZXR3b3JrSW50ZXJmYWNlIHsKICBAcGF0Y2gKICBzdGF0aWMgYm9vbCBnZXQgbGlzdFN1cHBvcnRlZCB7CiAgICByZXR1cm4gX2xpc3RTdXBwb3J0ZWQoKTsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBGdXR1cmU8TGlzdDxOZXR3b3JrSW50ZXJmYWNlPj4gbGlzdCgKICAgICAge2Jvb2wgaW5jbHVkZUxvb3BiYWNrOiBmYWxzZSwKICAgICAgYm9vbCBpbmNsdWRlTGlua0xvY2FsOiBmYWxzZSwKICAgICAgSW50ZXJuZXRBZGRyZXNzVHlwZSB0eXBlOiBJbnRlcm5ldEFkZHJlc3NUeXBlLmFueX0pIHsKICAgIHJldHVybiBfTmF0aXZlU29ja2V0Lmxpc3RJbnRlcmZhY2VzKAogICAgICAgIGluY2x1ZGVMb29wYmFjazogaW5jbHVkZUxvb3BiYWNrLAogICAgICAgIGluY2x1ZGVMaW5rTG9jYWw6IGluY2x1ZGVMaW5rTG9jYWwsCiAgICAgICAgdHlwZTogdHlwZSk7CiAgfQoKICBzdGF0aWMgYm9vbCBfbGlzdFN1cHBvcnRlZCgpIG5hdGl2ZSAiTmV0d29ya0ludGVyZmFjZV9MaXN0U3VwcG9ydGVkIjsKfQoKdm9pZCBfdGhyb3dPbkJhZFBvcnQoaW50IHBvcnQpIHsKICBpZiAoKHBvcnQgPT0gbnVsbCkgfHwgKHBvcnQgPCAwKSB8fCAocG9ydCA+IDB4RkZGRikpIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIHBvcnQgJHBvcnQiKTsKICB9Cn0KCnZvaWQgX3Rocm93T25CYWRUdGwoaW50IHR0bCkgewogIGlmICh0dGwgPT0gbnVsbCB8fCB0dGwgPCAxIHx8IHR0bCA+IDI1NSkgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgdHRsICR0dGwnKTsKICB9Cn0KCmNsYXNzIF9JbnRlcm5ldEFkZHJlc3MgaW1wbGVtZW50cyBJbnRlcm5ldEFkZHJlc3MgewogIHN0YXRpYyBjb25zdCBpbnQgX2FkZHJlc3NMb29wYmFja0lQdjQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgX2FkZHJlc3NMb29wYmFja0lQdjYgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgX2FkZHJlc3NBbnlJUHY0ID0gMjsKICBzdGF0aWMgY29uc3QgaW50IF9hZGRyZXNzQW55SVB2NiA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBfSVB2NEFkZHJMZW5ndGggPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgX0lQdjZBZGRyTGVuZ3RoID0gMTY7CgogIHN0YXRpYyBfSW50ZXJuZXRBZGRyZXNzIGxvb3BiYWNrSVB2NCA9CiAgICAgIG5ldyBfSW50ZXJuZXRBZGRyZXNzLmZpeGVkKF9hZGRyZXNzTG9vcGJhY2tJUHY0KTsKICBzdGF0aWMgX0ludGVybmV0QWRkcmVzcyBsb29wYmFja0lQdjYgPQogICAgICBuZXcgX0ludGVybmV0QWRkcmVzcy5maXhlZChfYWRkcmVzc0xvb3BiYWNrSVB2Nik7CiAgc3RhdGljIF9JbnRlcm5ldEFkZHJlc3MgYW55SVB2NCA9IG5ldyBfSW50ZXJuZXRBZGRyZXNzLmZpeGVkKF9hZGRyZXNzQW55SVB2NCk7CiAgc3RhdGljIF9JbnRlcm5ldEFkZHJlc3MgYW55SVB2NiA9IG5ldyBfSW50ZXJuZXRBZGRyZXNzLmZpeGVkKF9hZGRyZXNzQW55SVB2Nik7CgogIGZpbmFsIFN0cmluZyBhZGRyZXNzOwogIGZpbmFsIFN0cmluZyBfaG9zdDsKICBmaW5hbCBVaW50OExpc3QgX2luX2FkZHI7CgogIEludGVybmV0QWRkcmVzc1R5cGUgZ2V0IHR5cGUgPT4gX2luX2FkZHIubGVuZ3RoID09IF9JUHY0QWRkckxlbmd0aAogICAgICA/IEludGVybmV0QWRkcmVzc1R5cGUuSVB2NAogICAgICA6IEludGVybmV0QWRkcmVzc1R5cGUuSVB2NjsKCiAgU3RyaW5nIGdldCBob3N0ID0+IF9ob3N0ICE9IG51bGwgPyBfaG9zdCA6IGFkZHJlc3M7CgogIFVpbnQ4TGlzdCBnZXQgcmF3QWRkcmVzcyA9PiBuZXcgVWludDhMaXN0LmZyb21MaXN0KF9pbl9hZGRyKTsKCiAgYm9vbCBnZXQgaXNMb29wYmFjayB7CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSBJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjQ6CiAgICAgICAgcmV0dXJuIF9pbl9hZGRyWzBdID09IDEyNzsKCiAgICAgIGNhc2UgSW50ZXJuZXRBZGRyZXNzVHlwZS5JUHY2OgogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX0lQdjZBZGRyTGVuZ3RoIC0gMTsgaSsrKSB7CiAgICAgICAgICBpZiAoX2luX2FkZHJbaV0gIT0gMCkgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX2luX2FkZHJbX0lQdjZBZGRyTGVuZ3RoIC0gMV0gPT0gMTsKICAgIH0KICB9CgogIGJvb2wgZ2V0IGlzTGlua0xvY2FsIHsKICAgIHN3aXRjaCAodHlwZSkgewogICAgICBjYXNlIEludGVybmV0QWRkcmVzc1R5cGUuSVB2NDoKICAgICAgICAvLyBDaGVja2luZyBmb3IgMTY5LjI1NC4wLjAvMTYuCiAgICAgICAgcmV0dXJuIF9pbl9hZGRyWzBdID09IDE2OSAmJiBfaW5fYWRkclsxXSA9PSAyNTQ7CgogICAgICBjYXNlIEludGVybmV0QWRkcmVzc1R5cGUuSVB2NjoKICAgICAgICAvLyBDaGVja2luZyBmb3IgZmU4MDo6LzEwLgogICAgICAgIHJldHVybiBfaW5fYWRkclswXSA9PSAweEZFICYmIChfaW5fYWRkclsxXSAmIDB4QjApID09IDB4ODA7CiAgICB9CiAgfQoKICBib29sIGdldCBpc011bHRpY2FzdCB7CiAgICBzd2l0Y2ggKHR5cGUpIHsKICAgICAgY2FzZSBJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjQ6CiAgICAgICAgLy8gQ2hlY2tpbmcgZm9yIDIyNC4wLjAuMCB0aHJvdWdoIDIzOS4yNTUuMjU1LjI1NS4KICAgICAgICByZXR1cm4gX2luX2FkZHJbMF0gPj0gMjI0ICYmIF9pbl9hZGRyWzBdIDwgMjQwOwoKICAgICAgY2FzZSBJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjY6CiAgICAgICAgLy8gQ2hlY2tpbmcgZm9yIGZmMDA6Oi84LgogICAgICAgIHJldHVybiBfaW5fYWRkclswXSA9PSAweEZGOwogICAgfQogIH0KCiAgRnV0dXJlPEludGVybmV0QWRkcmVzcz4gcmV2ZXJzZSgpID0+IF9OYXRpdmVTb2NrZXQucmV2ZXJzZUxvb2t1cCh0aGlzKTsKCiAgX0ludGVybmV0QWRkcmVzcyh0aGlzLmFkZHJlc3MsIHRoaXMuX2hvc3QsIHRoaXMuX2luX2FkZHIpOwoKICBmYWN0b3J5IF9JbnRlcm5ldEFkZHJlc3MucGFyc2UoU3RyaW5nIGFkZHJlc3MpIHsKICAgIGlmIChhZGRyZXNzIGlzISBTdHJpbmcpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkludmFsaWQgaW50ZXJuZXQgYWRkcmVzcyAkYWRkcmVzcyIpOwogICAgfQogICAgdmFyIGluX2FkZHIgPSBfcGFyc2UoYWRkcmVzcyk7CiAgICBpZiAoaW5fYWRkciA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIGludGVybmV0IGFkZHJlc3MgJGFkZHJlc3MiKTsKICAgIH0KICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcyhhZGRyZXNzLCBudWxsLCBpbl9hZGRyKTsKICB9CgogIGZhY3RvcnkgX0ludGVybmV0QWRkcmVzcy5maXhlZChpbnQgaWQpIHsKICAgIHN3aXRjaCAoaWQpIHsKICAgICAgY2FzZSBfYWRkcmVzc0xvb3BiYWNrSVB2NDoKICAgICAgICB2YXIgaW5fYWRkciA9IG5ldyBVaW50OExpc3QoX0lQdjRBZGRyTGVuZ3RoKTsKICAgICAgICBpbl9hZGRyWzBdID0gMTI3OwogICAgICAgIGluX2FkZHJbX0lQdjRBZGRyTGVuZ3RoIC0gMV0gPSAxOwogICAgICAgIHJldHVybiBuZXcgX0ludGVybmV0QWRkcmVzcygiMTI3LjAuMC4xIiwgbnVsbCwgaW5fYWRkcik7CiAgICAgIGNhc2UgX2FkZHJlc3NMb29wYmFja0lQdjY6CiAgICAgICAgdmFyIGluX2FkZHIgPSBuZXcgVWludDhMaXN0KF9JUHY2QWRkckxlbmd0aCk7CiAgICAgICAgaW5fYWRkcltfSVB2NkFkZHJMZW5ndGggLSAxXSA9IDE7CiAgICAgICAgcmV0dXJuIG5ldyBfSW50ZXJuZXRBZGRyZXNzKCI6OjEiLCBudWxsLCBpbl9hZGRyKTsKICAgICAgY2FzZSBfYWRkcmVzc0FueUlQdjQ6CiAgICAgICAgdmFyIGluX2FkZHIgPSBuZXcgVWludDhMaXN0KF9JUHY0QWRkckxlbmd0aCk7CiAgICAgICAgcmV0dXJuIG5ldyBfSW50ZXJuZXRBZGRyZXNzKCIwLjAuMC4wIiwgIjAuMC4wLjAiLCBpbl9hZGRyKTsKICAgICAgY2FzZSBfYWRkcmVzc0FueUlQdjY6CiAgICAgICAgdmFyIGluX2FkZHIgPSBuZXcgVWludDhMaXN0KF9JUHY2QWRkckxlbmd0aCk7CiAgICAgICAgcmV0dXJuIG5ldyBfSW50ZXJuZXRBZGRyZXNzKCI6OiIsICI6OiIsIGluX2FkZHIpOwogICAgICBkZWZhdWx0OgogICAgICAgIGFzc2VydChmYWxzZSk7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICB9CgogIC8vIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgX0ludGVybmV0QWRkcmVzcyByZXBsYWNpbmcgdGhlIGhvc3QuCiAgX0ludGVybmV0QWRkcmVzcyBfY2xvbmVXaXRoTmV3SG9zdChTdHJpbmcgaG9zdCkgewogICAgcmV0dXJuIG5ldyBfSW50ZXJuZXRBZGRyZXNzKAogICAgICAgIGFkZHJlc3MsIGhvc3QsIG5ldyBVaW50OExpc3QuZnJvbUxpc3QoX2luX2FkZHIpKTsKICB9CgogIGJvb2wgb3BlcmF0b3IgPT0ob3RoZXIpIHsKICAgIGlmICghKG90aGVyIGlzIF9JbnRlcm5ldEFkZHJlc3MpKSByZXR1cm4gZmFsc2U7CiAgICBpZiAob3RoZXIudHlwZSAhPSB0eXBlKSByZXR1cm4gZmFsc2U7CiAgICBib29sIGVxdWFscyA9IHRydWU7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9pbl9hZGRyLmxlbmd0aCAmJiBlcXVhbHM7IGkrKykgewogICAgICBlcXVhbHMgPSBvdGhlci5faW5fYWRkcltpXSA9PSBfaW5fYWRkcltpXTsKICAgIH0KICAgIHJldHVybiBlcXVhbHM7CiAgfQoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIGludCByZXN1bHQgPSAxOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfaW5fYWRkci5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHQgPSAocmVzdWx0ICogMzEgKyBfaW5fYWRkcltpXSkgJiAweDNGRkZGRkZGOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAiSW50ZXJuZXRBZGRyZXNzKCckYWRkcmVzcycsICR7dHlwZS5uYW1lfSkiOwogIH0KCiAgc3RhdGljIFVpbnQ4TGlzdCBfcGFyc2UoU3RyaW5nIGFkZHJlc3MpIG5hdGl2ZSAiSW50ZXJuZXRBZGRyZXNzX1BhcnNlIjsKfQoKY2xhc3MgX05ldHdvcmtJbnRlcmZhY2UgaW1wbGVtZW50cyBOZXR3b3JrSW50ZXJmYWNlIHsKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBmaW5hbCBpbnQgaW5kZXg7CiAgZmluYWwgTGlzdDxJbnRlcm5ldEFkZHJlc3M+IGFkZHJlc3NlcyA9IFtdOwoKICBfTmV0d29ya0ludGVyZmFjZSh0aGlzLm5hbWUsIHRoaXMuaW5kZXgpOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gIk5ldHdvcmtJbnRlcmZhY2UoJyRuYW1lJywgJGFkZHJlc3NlcykiOwogIH0KfQoKLy8gVGhlIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMSBjYW5ub3QgYmUgdXNlZCB3aXRoIGEgbWl4aW4sIGR1ZSB0byBtaXNzaW5nCi8vIGltcGxpY2l0IGNvbnN0cnVjdG9yLgpjbGFzcyBfTmF0aXZlU29ja2V0TmF0aXZlV3JhcHBlciBleHRlbmRzIE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMSB7fQoKLy8gVGhlIF9OYXRpdmVTb2NrZXQgY2xhc3MgZW5jYXBzdWxhdGVzIGFuIE9TIHNvY2tldC4KY2xhc3MgX05hdGl2ZVNvY2tldCBleHRlbmRzIF9OYXRpdmVTb2NrZXROYXRpdmVXcmFwcGVyIHdpdGggX1NlcnZpY2VPYmplY3QgewogIC8vIEJpdCBmbGFncyB1c2VkIHdoZW4gY29tbXVuaWNhdGluZyBiZXR3ZWVuIHRoZSBldmVudGhhbmRsZXIgYW5kCiAgLy8gZGFydCBjb2RlLiBUaGUgRVZFTlQgZmxhZ3MgYXJlIHVzZWQgdG8gaW5kaWNhdGUgZXZlbnRzIG9mCiAgLy8gaW50ZXJlc3Qgd2hlbiBzZW5kaW5nIGEgbWVzc2FnZSBmcm9tIGRhcnQgY29kZSB0byB0aGUKICAvLyBldmVudGhhbmRsZXIuIFdoZW4gcmVjZWl2aW5nIGEgbWVzc2FnZSBmcm9tIHRoZSBldmVudGhhbmRsZXIgdGhlCiAgLy8gRVZFTlQgZmxhZ3MgaW5kaWNhdGUgdGhlIGV2ZW50cyB0aGF0IGFjdHVhbGx5IGhhcHBlbmVkLiBUaGUKICAvLyBDT01NQU5EIGZsYWdzIGFyZSB1c2VkIHRvIHNlbmQgY29tbWFuZHMgZnJvbSBkYXJ0IHRvIHRoZQogIC8vIGV2ZW50aGFuZGxlci4gQ09NTUFORCBmbGFncyBhcmUgbmV2ZXIgcmVjZWl2ZWQgZnJvbSB0aGUKICAvLyBldmVudGhhbmRsZXIuIEFkZGl0aW9uYWwgZmxhZ3MgYXJlIHVzZWQgdG8gY29tbXVuaWNhdGUgb3RoZXIKICAvLyBpbmZvcm1hdGlvbi4KICBzdGF0aWMgY29uc3QgaW50IHJlYWRFdmVudCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCB3cml0ZUV2ZW50ID0gMTsKICBzdGF0aWMgY29uc3QgaW50IGVycm9yRXZlbnQgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgY2xvc2VkRXZlbnQgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgZGVzdHJveWVkRXZlbnQgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgZmlyc3RFdmVudCA9IHJlYWRFdmVudDsKICBzdGF0aWMgY29uc3QgaW50IGxhc3RFdmVudCA9IGRlc3Ryb3llZEV2ZW50OwogIHN0YXRpYyBjb25zdCBpbnQgZXZlbnRDb3VudCA9IGxhc3RFdmVudCAtIGZpcnN0RXZlbnQgKyAxOwoKICBzdGF0aWMgY29uc3QgaW50IGNsb3NlQ29tbWFuZCA9IDg7CiAgc3RhdGljIGNvbnN0IGludCBzaHV0ZG93blJlYWRDb21tYW5kID0gOTsKICBzdGF0aWMgY29uc3QgaW50IHNodXRkb3duV3JpdGVDb21tYW5kID0gMTA7CiAgLy8gVGhlIGxvd2VyIGJpdHMgb2YgcmV0dXJuVG9rZW5Db21tYW5kIG1lc3NhZ2VzIGNvbnRhaW5zIHRoZSBudW1iZXIKICAvLyBvZiB0b2tlbnMgcmV0dXJuZWQuCiAgc3RhdGljIGNvbnN0IGludCByZXR1cm5Ub2tlbkNvbW1hbmQgPSAxMTsKICBzdGF0aWMgY29uc3QgaW50IHNldEV2ZW50TWFza0NvbW1hbmQgPSAxMjsKICBzdGF0aWMgY29uc3QgaW50IGZpcnN0Q29tbWFuZCA9IGNsb3NlQ29tbWFuZDsKICBzdGF0aWMgY29uc3QgaW50IGxhc3RDb21tYW5kID0gc2V0RXZlbnRNYXNrQ29tbWFuZDsKCiAgLy8gVHlwZSBmbGFnIHNlbmQgdG8gdGhlIGV2ZW50aGFuZGxlciBwcm92aWRpbmcgYWRkaXRpb25hbAogIC8vIGluZm9ybWF0aW9uIG9uIHRoZSB0eXBlIG9mIHRoZSBmaWxlIGRlc2NyaXB0b3IuCiAgc3RhdGljIGNvbnN0IGludCBsaXN0ZW5pbmdTb2NrZXQgPSAxNjsKICBzdGF0aWMgY29uc3QgaW50IHBpcGVTb2NrZXQgPSAxNzsKICBzdGF0aWMgY29uc3QgaW50IHR5cGVOb3JtYWxTb2NrZXQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgdHlwZUxpc3RlbmluZ1NvY2tldCA9IDEgPDwgbGlzdGVuaW5nU29ja2V0OwogIHN0YXRpYyBjb25zdCBpbnQgdHlwZVBpcGUgPSAxIDw8IHBpcGVTb2NrZXQ7CiAgc3RhdGljIGNvbnN0IGludCB0eXBlVHlwZU1hc2sgPSB0eXBlTGlzdGVuaW5nU29ja2V0IHwgcGlwZVNvY2tldDsKCiAgLy8gUHJvdG9jb2wgZmxhZ3MuCiAgLy8gS2VlcCBpbiBzeW5jIHdpdGggU29ja2V0VHlwZSBlbnVtIGluIHNvY2tldC5oLgogIHN0YXRpYyBjb25zdCBpbnQgdGNwU29ja2V0ID0gMTg7CiAgc3RhdGljIGNvbnN0IGludCB1ZHBTb2NrZXQgPSAxOTsKICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsU29ja2V0ID0gMjA7CiAgc3RhdGljIGNvbnN0IGludCBpbnRlcm5hbFNpZ25hbFNvY2tldCA9IDIxOwogIHN0YXRpYyBjb25zdCBpbnQgdHlwZVRjcFNvY2tldCA9IDEgPDwgdGNwU29ja2V0OwogIHN0YXRpYyBjb25zdCBpbnQgdHlwZVVkcFNvY2tldCA9IDEgPDwgdWRwU29ja2V0OwogIHN0YXRpYyBjb25zdCBpbnQgdHlwZUludGVybmFsU29ja2V0ID0gMSA8PCBpbnRlcm5hbFNvY2tldDsKICBzdGF0aWMgY29uc3QgaW50IHR5cGVJbnRlcm5hbFNpZ25hbFNvY2tldCA9IDEgPDwgaW50ZXJuYWxTaWduYWxTb2NrZXQ7CiAgc3RhdGljIGNvbnN0IGludCB0eXBlUHJvdG9jb2xNYXNrID0gdHlwZVRjcFNvY2tldCB8CiAgICAgIHR5cGVVZHBTb2NrZXQgfAogICAgICB0eXBlSW50ZXJuYWxTb2NrZXQgfAogICAgICB0eXBlSW50ZXJuYWxTaWduYWxTb2NrZXQ7CgogIC8vIE5hdGl2ZSBwb3J0IG1lc3NhZ2VzLgogIHN0YXRpYyBjb25zdCBob3N0TmFtZUxvb2t1cE1lc3NhZ2UgPSAwOwogIHN0YXRpYyBjb25zdCBsaXN0SW50ZXJmYWNlc01lc3NhZ2UgPSAxOwogIHN0YXRpYyBjb25zdCByZXZlcnNlTG9va3VwTWVzc2FnZSA9IDI7CgogIC8vIFByb3RvY29sIGZsYWdzLgogIHN0YXRpYyBjb25zdCBpbnQgcHJvdG9jb2xJUHY0ID0gMSA8PCAwOwogIHN0YXRpYyBjb25zdCBpbnQgcHJvdG9jb2xJUHY2ID0gMSA8PCAxOwoKICBzdGF0aWMgY29uc3QgaW50IG5vcm1hbFRva2VuQmF0Y2hTaXplID0gODsKICBzdGF0aWMgY29uc3QgaW50IGxpc3RlbmluZ1Rva2VuQmF0Y2hTaXplID0gMjsKCiAgc3RhdGljIGNvbnN0IER1cmF0aW9uIF9yZXRyeUR1cmF0aW9uID0gY29uc3QgRHVyYXRpb24obWlsbGlzZWNvbmRzOiAyNTApOwogIHN0YXRpYyBjb25zdCBEdXJhdGlvbiBfcmV0cnlEdXJhdGlvbkxvb3BiYWNrID0KICAgICAgY29uc3QgRHVyYXRpb24obWlsbGlzZWNvbmRzOiAyNSk7CgogIC8vIFNvY2tldCBjbG9zZSBzdGF0ZQogIGJvb2wgaXNDbG9zZWQgPSBmYWxzZTsKICBib29sIGlzQ2xvc2luZyA9IGZhbHNlOwogIGJvb2wgaXNDbG9zZWRSZWFkID0gZmFsc2U7CiAgYm9vbCBjbG9zZWRSZWFkRXZlbnRTZW50ID0gZmFsc2U7CiAgYm9vbCBpc0Nsb3NlZFdyaXRlID0gZmFsc2U7CiAgQ29tcGxldGVyIGNsb3NlQ29tcGxldGVyID0gbmV3IENvbXBsZXRlci5zeW5jKCk7CgogIC8vIEhhbmRsZXJzIGFuZCByZWNlaXZlIHBvcnQgZm9yIHNvY2tldCBldmVudHMgZnJvbSB0aGUgZXZlbnQgaGFuZGxlci4KICBmaW5hbCBMaXN0IGV2ZW50SGFuZGxlcnMgPSBuZXcgTGlzdChldmVudENvdW50ICsgMSk7CiAgUmF3UmVjZWl2ZVBvcnQgZXZlbnRQb3J0OwogIGJvb2wgZmxhZ3NTZW50ID0gZmFsc2U7CgogIC8vIFRoZSB0eXBlIGZsYWdzIGZvciB0aGlzIHNvY2tldC4KICBmaW5hbCBpbnQgdHlwZUZsYWdzOwoKICAvLyBIb2xkcyB0aGUgcG9ydCBvZiB0aGUgc29ja2V0LCAwIGlmIG5vdCBrbm93bi4KICBpbnQgbG9jYWxQb3J0ID0gMDsKCiAgLy8gSG9sZHMgdGhlIGFkZHJlc3MgdXNlZCB0byBjb25uZWN0IG9yIGJpbmQgdGhlIHNvY2tldC4KICBJbnRlcm5ldEFkZHJlc3MgbG9jYWxBZGRyZXNzOwoKICBpbnQgYXZhaWxhYmxlID0gMDsKCiAgaW50IHRva2VucyA9IDA7CgogIGJvb2wgc2VuZFJlYWRFdmVudHMgPSBmYWxzZTsKICBib29sIHJlYWRFdmVudElzc3VlZCA9IGZhbHNlOwoKICBib29sIHNlbmRXcml0ZUV2ZW50cyA9IGZhbHNlOwogIGJvb2wgd3JpdGVFdmVudElzc3VlZCA9IGZhbHNlOwogIGJvb2wgd3JpdGVBdmFpbGFibGUgPSBmYWxzZTsKCiAgc3RhdGljIGJvb2wgY29ubmVjdGVkUmVzb3VyY2VIYW5kbGVyID0gZmFsc2U7CiAgX1JlYWRXcml0ZVJlc291cmNlSW5mbyByZXNvdXJjZUluZm87CgogIC8vIFRoZSBvd25lciBvYmplY3QgaXMgdGhlIG9iamVjdCB0aGF0IHRoZSBTb2NrZXQgaXMgYmVpbmcgdXNlZCBieSwgZS5nLgogIC8vIGEgSHR0cFNlcnZlciwgYSBXZWJTb2NrZXQgY29ubmVjdGlvbiwgYSBwcm9jZXNzIHBpcGUsIGV0Yy4KICBPYmplY3Qgb3duZXI7CgogIHN0YXRpYyBGdXR1cmU8TGlzdDxJbnRlcm5ldEFkZHJlc3M+PiBsb29rdXAoU3RyaW5nIGhvc3QsCiAgICAgIHtJbnRlcm5ldEFkZHJlc3NUeXBlIHR5cGU6IEludGVybmV0QWRkcmVzc1R5cGUuYW55fSkgewogICAgcmV0dXJuIF9JT1NlcnZpY2UuX2Rpc3BhdGNoKF9JT1NlcnZpY2Uuc29ja2V0TG9va3VwLCBbaG9zdCwgdHlwZS5fdmFsdWVdKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IGNyZWF0ZUVycm9yKHJlc3BvbnNlLCAiRmFpbGVkIGhvc3QgbG9va3VwOiAnJGhvc3QnIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnNraXAoMSkubWFwPEludGVybmV0QWRkcmVzcz4oKHJlc3VsdCkgewogICAgICAgICAgdmFyIHR5cGUgPSBuZXcgSW50ZXJuZXRBZGRyZXNzVHlwZS5fZnJvbShyZXN1bHRbMF0pOwogICAgICAgICAgcmV0dXJuIG5ldyBfSW50ZXJuZXRBZGRyZXNzKHJlc3VsdFsxXSwgaG9zdCwgcmVzdWx0WzJdKTsKICAgICAgICB9KS50b0xpc3QoKTsKICAgICAgfQogICAgfSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPEludGVybmV0QWRkcmVzcz4gcmV2ZXJzZUxvb2t1cChJbnRlcm5ldEFkZHJlc3MgYWRkcikgewogICAgcmV0dXJuIF9JT1NlcnZpY2UuX2Rpc3BhdGNoKF9JT1NlcnZpY2Uuc29ja2V0UmV2ZXJzZUxvb2t1cCwKICAgICAgICBbKGFkZHIgYXMgX0ludGVybmV0QWRkcmVzcykuX2luX2FkZHJdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IGNyZWF0ZUVycm9yKHJlc3BvbnNlLCAiRmFpbGVkIHJldmVyc2UgaG9zdCBsb29rdXAiLCBhZGRyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gKGFkZHIgYXMgX0ludGVybmV0QWRkcmVzcykuX2Nsb25lV2l0aE5ld0hvc3QocmVzcG9uc2UpOwogICAgICB9CiAgICB9KTsKICB9CgogIHN0YXRpYyBGdXR1cmU8TGlzdDxOZXR3b3JrSW50ZXJmYWNlPj4gbGlzdEludGVyZmFjZXMoCiAgICAgIHtib29sIGluY2x1ZGVMb29wYmFjazogZmFsc2UsCiAgICAgIGJvb2wgaW5jbHVkZUxpbmtMb2NhbDogZmFsc2UsCiAgICAgIEludGVybmV0QWRkcmVzc1R5cGUgdHlwZTogSW50ZXJuZXRBZGRyZXNzVHlwZS5hbnl9KSB7CiAgICByZXR1cm4gX0lPU2VydmljZS5fZGlzcGF0Y2goX0lPU2VydmljZS5zb2NrZXRMaXN0SW50ZXJmYWNlcywgW3R5cGUuX3ZhbHVlXSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKGlzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihyZXNwb25zZSwgIkZhaWxlZCBsaXN0aW5nIGludGVyZmFjZXMiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgbWFwID0gcmVzcG9uc2Uuc2tpcCgxKS5mb2xkKG5ldyBNYXA8U3RyaW5nLCBOZXR3b3JrSW50ZXJmYWNlPigpLAogICAgICAgICAgICAobWFwLCByZXN1bHQpIHsKICAgICAgICAgIHZhciB0eXBlID0gbmV3IEludGVybmV0QWRkcmVzc1R5cGUuX2Zyb20ocmVzdWx0WzBdKTsKICAgICAgICAgIHZhciBuYW1lID0gcmVzdWx0WzNdOwogICAgICAgICAgdmFyIGluZGV4ID0gcmVzdWx0WzRdOwogICAgICAgICAgdmFyIGFkZHJlc3MgPSBuZXcgX0ludGVybmV0QWRkcmVzcyhyZXN1bHRbMV0sICIiLCByZXN1bHRbMl0pOwogICAgICAgICAgaWYgKCFpbmNsdWRlTGlua0xvY2FsICYmIGFkZHJlc3MuaXNMaW5rTG9jYWwpIHJldHVybiBtYXA7CiAgICAgICAgICBpZiAoIWluY2x1ZGVMb29wYmFjayAmJiBhZGRyZXNzLmlzTG9vcGJhY2spIHJldHVybiBtYXA7CiAgICAgICAgICBtYXAucHV0SWZBYnNlbnQobmFtZSwgKCkgPT4gbmV3IF9OZXR3b3JrSW50ZXJmYWNlKG5hbWUsIGluZGV4KSk7CiAgICAgICAgICBtYXBbbmFtZV0uYWRkcmVzc2VzLmFkZChhZGRyZXNzKTsKICAgICAgICAgIHJldHVybiBtYXA7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIG1hcC52YWx1ZXMudG9MaXN0KCk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxDb25uZWN0aW9uVGFzazxfTmF0aXZlU29ja2V0Pj4gc3RhcnRDb25uZWN0KAogICAgICBob3N0LCBpbnQgcG9ydCwgc291cmNlQWRkcmVzcykgewogICAgX3Rocm93T25CYWRQb3J0KHBvcnQpOwogICAgaWYgKHNvdXJjZUFkZHJlc3MgIT0gbnVsbCAmJiBzb3VyY2VBZGRyZXNzIGlzISBfSW50ZXJuZXRBZGRyZXNzKSB7CiAgICAgIGlmIChzb3VyY2VBZGRyZXNzIGlzIFN0cmluZykgewogICAgICAgIHNvdXJjZUFkZHJlc3MgPSBuZXcgSW50ZXJuZXRBZGRyZXNzKHNvdXJjZUFkZHJlc3MpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShob3N0KS50aGVuKChob3N0KSB7CiAgICAgIGlmIChob3N0IGlzIF9JbnRlcm5ldEFkZHJlc3MpIHJldHVybiBbaG9zdF07CiAgICAgIHJldHVybiBsb29rdXAoaG9zdCkudGhlbigoYWRkcmVzc2VzKSB7CiAgICAgICAgaWYgKGFkZHJlc3Nlcy5pc0VtcHR5KSB7CiAgICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihudWxsLCAiRmFpbGVkIGhvc3QgbG9va3VwOiAnJGhvc3QnIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhZGRyZXNzZXM7CiAgICAgIH0pOwogICAgfSkudGhlbigoYWRkcmVzc2VzKSB7CiAgICAgIHZhciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPF9OYXRpdmVTb2NrZXQ+KCk7CiAgICAgIHZhciBpdCA9IChhZGRyZXNzZXMgYXMgTGlzdDxJbnRlcm5ldEFkZHJlc3M+KS5pdGVyYXRvcjsKICAgICAgdmFyIGVycm9yID0gbnVsbDsKICAgICAgdmFyIGNvbm5lY3RpbmcgPSBuZXcgSGFzaE1hcCgpOwoKICAgICAgdm9pZCBjb25uZWN0TmV4dCgpIHsKICAgICAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgICAgICAgIGlmIChjb25uZWN0aW5nLmlzRW1wdHkpIHsKICAgICAgICAgICAgYXNzZXJ0KGVycm9yICE9IG51bGwpOwogICAgICAgICAgICBjb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGZpbmFsIF9JbnRlcm5ldEFkZHJlc3MgYWRkcmVzcyA9IGl0LmN1cnJlbnQ7CiAgICAgICAgdmFyIHNvY2tldCA9IG5ldyBfTmF0aXZlU29ja2V0Lm5vcm1hbCgpOwogICAgICAgIHNvY2tldC5sb2NhbEFkZHJlc3MgPSBhZGRyZXNzOwogICAgICAgIHZhciByZXN1bHQ7CiAgICAgICAgaWYgKHNvdXJjZUFkZHJlc3MgPT0gbnVsbCkgewogICAgICAgICAgcmVzdWx0ID0gc29ja2V0Lm5hdGl2ZUNyZWF0ZUNvbm5lY3QoYWRkcmVzcy5faW5fYWRkciwgcG9ydCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFzc2VydChzb3VyY2VBZGRyZXNzIGlzIF9JbnRlcm5ldEFkZHJlc3MpOwogICAgICAgICAgcmVzdWx0ID0gc29ja2V0Lm5hdGl2ZUNyZWF0ZUJpbmRDb25uZWN0KAogICAgICAgICAgICAgIGFkZHJlc3MuX2luX2FkZHIsIHBvcnQsIHNvdXJjZUFkZHJlc3MuX2luX2FkZHIpOwogICAgICAgIH0KICAgICAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgICAgIC8vIEtlZXAgZmlyc3QgZXJyb3IsIGlmIHByZXNlbnQuCiAgICAgICAgICBpZiAoZXJyb3IgPT0gbnVsbCkgewogICAgICAgICAgICBpbnQgZXJyb3JDb2RlID0gcmVzdWx0LmVycm9yQ29kZTsKICAgICAgICAgICAgaWYgKHNvdXJjZUFkZHJlc3MgIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgZXJyb3JDb2RlICE9IG51bGwgJiYKICAgICAgICAgICAgICAgIHNvY2tldC5pc0JpbmRFcnJvcihlcnJvckNvZGUpKSB7CiAgICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVFcnJvcihyZXN1bHQsICJCaW5kIGZhaWxlZCIsIHNvdXJjZUFkZHJlc3MpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGVycm9yID0gY3JlYXRlRXJyb3IocmVzdWx0LCAiQ29ubmVjdGlvbiBmYWlsZWQiLCBhZGRyZXNzLCBwb3J0KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgY29ubmVjdE5leHQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gUXVlcnkgdGhlIGxvY2FsIHBvcnQgZm9yIGVycm9yIG1lc3NhZ2VzLgogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgc29ja2V0LnBvcnQ7CiAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIGlmIChlcnJvciA9PSBudWxsKSB7CiAgICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVFcnJvcihlLCAiQ29ubmVjdGlvbiBmYWlsZWQiLCBhZGRyZXNzLCBwb3J0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25uZWN0TmV4dCgpOwogICAgICAgICAgfQogICAgICAgICAgLy8gU2V0IHVwIHRpbWVyIGZvciB3aGVuIHdlIHNob3VsZCByZXRyeSB0aGUgbmV4dCBhZGRyZXNzCiAgICAgICAgICAvLyAoaWYgYW55KS4KICAgICAgICAgIHZhciBkdXJhdGlvbiA9CiAgICAgICAgICAgICAgYWRkcmVzcy5pc0xvb3BiYWNrID8gX3JldHJ5RHVyYXRpb25Mb29wYmFjayA6IF9yZXRyeUR1cmF0aW9uOwogICAgICAgICAgdmFyIHRpbWVyID0gbmV3IFRpbWVyKGR1cmF0aW9uLCBjb25uZWN0TmV4dCk7CiAgICAgICAgICBzZXR1cFJlc291cmNlSW5mbyhzb2NrZXQpOwoKICAgICAgICAgIGNvbm5lY3Rpbmdbc29ja2V0XSA9IHRpbWVyOwogICAgICAgICAgLy8gU2V0dXAgaGFuZGxlcnMgZm9yIHJlY2VpdmluZyB0aGUgZmlyc3Qgd3JpdGUgZXZlbnQgd2hpY2gKICAgICAgICAgIC8vIGluZGljYXRlIHRoYXQgdGhlIHNvY2tldCBpcyBmdWxseSBjb25uZWN0ZWQuCiAgICAgICAgICBzb2NrZXQuc2V0SGFuZGxlcnMod3JpdGU6ICgpIHsKICAgICAgICAgICAgdGltZXIuY2FuY2VsKCk7CiAgICAgICAgICAgIGNvbm5lY3RpbmcucmVtb3ZlKHNvY2tldCk7CiAgICAgICAgICAgIC8vIEZyb20gJ21hbiAyIGNvbm5lY3QnOgogICAgICAgICAgICAvLyBBZnRlciBzZWxlY3QoMikgaW5kaWNhdGVzIHdyaXRhYmlsaXR5LCB1c2UgZ2V0c29ja29wdCgyKSB0byByZWFkCiAgICAgICAgICAgIC8vIHRoZSBTT19FUlJPUiBvcHRpb24gYXQgbGV2ZWwgU09MX1NPQ0tFVCB0byBkZXRlcm1pbmUgd2hldGhlcgogICAgICAgICAgICAvLyBjb25uZWN0KCkgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSAoU09fRVJST1IgaXMgemVybykgb3IKICAgICAgICAgICAgLy8gdW5zdWNjZXNzZnVsbHkuCiAgICAgICAgICAgIE9TRXJyb3Igb3NFcnJvciA9IHNvY2tldC5uYXRpdmVHZXRFcnJvcigpOwogICAgICAgICAgICBpZiAob3NFcnJvci5lcnJvckNvZGUgIT0gMCkgewogICAgICAgICAgICAgIHNvY2tldC5jbG9zZSgpOwogICAgICAgICAgICAgIGlmIChlcnJvciA9PSBudWxsKSBlcnJvciA9IG9zRXJyb3I7CiAgICAgICAgICAgICAgaWYgKGNvbm5lY3RpbmcuaXNFbXB0eSkgY29ubmVjdE5leHQoKTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc29ja2V0LnNldExpc3RlbmluZyhyZWFkOiBmYWxzZSwgd3JpdGU6IGZhbHNlKTsKICAgICAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlKHNvY2tldCk7CiAgICAgICAgICAgIGNvbm5lY3RpbmcuZm9yRWFjaCgocywgdCkgewogICAgICAgICAgICAgIHQuY2FuY2VsKCk7CiAgICAgICAgICAgICAgcy5jbG9zZSgpOwogICAgICAgICAgICAgIHMuc2V0SGFuZGxlcnMoKTsKICAgICAgICAgICAgICBzLnNldExpc3RlbmluZyhyZWFkOiBmYWxzZSwgd3JpdGU6IGZhbHNlKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNvbm5lY3RpbmcuY2xlYXIoKTsKICAgICAgICAgIH0sIGVycm9yOiAoZSkgewogICAgICAgICAgICB0aW1lci5jYW5jZWwoKTsKICAgICAgICAgICAgc29ja2V0LmNsb3NlKCk7CiAgICAgICAgICAgIC8vIEtlZXAgZmlyc3QgZXJyb3IsIGlmIHByZXNlbnQuCiAgICAgICAgICAgIGlmIChlcnJvciA9PSBudWxsKSBlcnJvciA9IGU7CiAgICAgICAgICAgIGNvbm5lY3RpbmcucmVtb3ZlKHNvY2tldCk7CiAgICAgICAgICAgIGlmIChjb25uZWN0aW5nLmlzRW1wdHkpIGNvbm5lY3ROZXh0KCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHNvY2tldC5zZXRMaXN0ZW5pbmcocmVhZDogZmFsc2UsIHdyaXRlOiB0cnVlKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZvaWQgb25DYW5jZWwoKSB7CiAgICAgICAgY29ubmVjdGluZy5mb3JFYWNoKChzLCB0KSB7CiAgICAgICAgICB0LmNhbmNlbCgpOwogICAgICAgICAgcy5jbG9zZSgpOwogICAgICAgICAgcy5zZXRIYW5kbGVycygpOwogICAgICAgICAgcy5zZXRMaXN0ZW5pbmcocmVhZDogZmFsc2UsIHdyaXRlOiBmYWxzZSk7CiAgICAgICAgICBpZiAoZXJyb3IgPT0gbnVsbCkgewogICAgICAgICAgICBlcnJvciA9IGNyZWF0ZUVycm9yKG51bGwsCiAgICAgICAgICAgICAgICAiQ29ubmVjdGlvbiBhdHRlbXB0IGNhbmNlbGxlZCwgaG9zdDogJHtob3N0fSwgcG9ydDogJHtwb3J0fSIpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGNvbm5lY3RpbmcuY2xlYXIoKTsKICAgICAgICBpZiAoIWNvbXBsZXRlci5pc0NvbXBsZXRlZCkgewogICAgICAgICAgY29tcGxldGVyLmNvbXBsZXRlRXJyb3IoZXJyb3IpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgY29ubmVjdE5leHQoKTsKICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uVGFzazxfTmF0aXZlU29ja2V0Pi5fKAogICAgICAgICAgc29ja2V0OiBjb21wbGV0ZXIuZnV0dXJlLCBvbkNhbmNlbDogb25DYW5jZWwpOwogICAgfSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPF9OYXRpdmVTb2NrZXQ+IGNvbm5lY3QoCiAgICAgIGhvc3QsIGludCBwb3J0LCBzb3VyY2VBZGRyZXNzLCBEdXJhdGlvbiB0aW1lb3V0KSB7CiAgICByZXR1cm4gc3RhcnRDb25uZWN0KGhvc3QsIHBvcnQsIHNvdXJjZUFkZHJlc3MpCiAgICAgICAgLnRoZW4oKENvbm5lY3Rpb25UYXNrPF9OYXRpdmVTb2NrZXQ+IHRhc2spIHsKICAgICAgRnV0dXJlPF9OYXRpdmVTb2NrZXQ+IHNvY2tldEZ1dHVyZSA9IHRhc2suc29ja2V0OwogICAgICBpZiAodGltZW91dCAhPSBudWxsKSB7CiAgICAgICAgc29ja2V0RnV0dXJlID0gc29ja2V0RnV0dXJlLnRpbWVvdXQodGltZW91dCwgb25UaW1lb3V0OiAoKSB7CiAgICAgICAgICB0YXNrLmNhbmNlbCgpOwogICAgICAgICAgdGhyb3cgY3JlYXRlRXJyb3IoCiAgICAgICAgICAgICAgbnVsbCwgIkNvbm5lY3Rpb24gdGltZWQgb3V0LCBob3N0OiAke2hvc3R9LCBwb3J0OiAke3BvcnR9Iik7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHNvY2tldEZ1dHVyZTsKICAgIH0pOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxfSW50ZXJuZXRBZGRyZXNzPiBfcmVzb2x2ZUhvc3QoaG9zdCkgYXN5bmMgewogICAgaWYgKGhvc3QgaXMgX0ludGVybmV0QWRkcmVzcykgewogICAgICByZXR1cm4gaG9zdDsKICAgIH0gZWxzZSB7CiAgICAgIGZpbmFsIGxpc3QgPSBhd2FpdCBsb29rdXAoaG9zdCk7CiAgICAgIGlmIChsaXN0LmlzRW1wdHkpIHsKICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihudWxsLCAiRmFpbGVkIGhvc3QgbG9va3VwOiAnJGhvc3QnIik7CiAgICAgIH0KICAgICAgcmV0dXJuIGxpc3QuZmlyc3QgYXMgX0ludGVybmV0QWRkcmVzczsKICAgIH0KICB9CgogIHN0YXRpYyBGdXR1cmU8X05hdGl2ZVNvY2tldD4gYmluZCgKICAgICAgaG9zdCwgaW50IHBvcnQsIGludCBiYWNrbG9nLCBib29sIHY2T25seSwgYm9vbCBzaGFyZWQpIGFzeW5jIHsKICAgIF90aHJvd09uQmFkUG9ydChwb3J0KTsKCiAgICBmaW5hbCBhZGRyZXNzID0gYXdhaXQgX3Jlc29sdmVIb3N0KGhvc3QpOwoKICAgIHZhciBzb2NrZXQgPSBuZXcgX05hdGl2ZVNvY2tldC5saXN0ZW4oKTsKICAgIHNvY2tldC5sb2NhbEFkZHJlc3MgPSBhZGRyZXNzOwogICAgdmFyIHJlc3VsdCA9IHNvY2tldC5uYXRpdmVDcmVhdGVCaW5kTGlzdGVuKAogICAgICAgIGFkZHJlc3MuX2luX2FkZHIsIHBvcnQsIGJhY2tsb2csIHY2T25seSwgc2hhcmVkKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgU29ja2V0RXhjZXB0aW9uKCJGYWlsZWQgdG8gY3JlYXRlIHNlcnZlciBzb2NrZXQiLAogICAgICAgICAgb3NFcnJvcjogcmVzdWx0LCBhZGRyZXNzOiBhZGRyZXNzLCBwb3J0OiBwb3J0KTsKICAgIH0KICAgIGlmIChwb3J0ICE9IDApIHNvY2tldC5sb2NhbFBvcnQgPSBwb3J0OwogICAgc2V0dXBSZXNvdXJjZUluZm8oc29ja2V0KTsKICAgIHNvY2tldC5jb25uZWN0VG9FdmVudEhhbmRsZXIoKTsKICAgIHJldHVybiBzb2NrZXQ7CiAgfQoKICBzdGF0aWMgdm9pZCBzZXR1cFJlc291cmNlSW5mbyhfTmF0aXZlU29ja2V0IHNvY2tldCkgewogICAgc29ja2V0LnJlc291cmNlSW5mbyA9IG5ldyBfU29ja2V0UmVzb3VyY2VJbmZvKHNvY2tldCk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPF9OYXRpdmVTb2NrZXQ+IGJpbmREYXRhZ3JhbSgKICAgICAgaG9zdCwgaW50IHBvcnQsIGJvb2wgcmV1c2VBZGRyZXNzLCBib29sIHJldXNlUG9ydCwgaW50IHR0bCkgYXN5bmMgewogICAgX3Rocm93T25CYWRQb3J0KHBvcnQpOwogICAgX3Rocm93T25CYWRUdGwodHRsKTsKCiAgICBmaW5hbCBhZGRyZXNzID0gYXdhaXQgX3Jlc29sdmVIb3N0KGhvc3QpOwoKICAgIHZhciBzb2NrZXQgPSBuZXcgX05hdGl2ZVNvY2tldC5kYXRhZ3JhbShhZGRyZXNzKTsKICAgIHZhciByZXN1bHQgPSBzb2NrZXQubmF0aXZlQ3JlYXRlQmluZERhdGFncmFtKAogICAgICAgIGFkZHJlc3MuX2luX2FkZHIsIHBvcnQsIHJldXNlQWRkcmVzcywgcmV1c2VQb3J0LCB0dGwpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBTb2NrZXRFeGNlcHRpb24oIkZhaWxlZCB0byBjcmVhdGUgZGF0YWdyYW0gc29ja2V0IiwKICAgICAgICAgIG9zRXJyb3I6IHJlc3VsdCwgYWRkcmVzczogYWRkcmVzcywgcG9ydDogcG9ydCk7CiAgICB9CiAgICBpZiAocG9ydCAhPSAwKSBzb2NrZXQubG9jYWxQb3J0ID0gcG9ydDsKICAgIHNldHVwUmVzb3VyY2VJbmZvKHNvY2tldCk7CiAgICByZXR1cm4gc29ja2V0OwogIH0KCiAgX05hdGl2ZVNvY2tldC5kYXRhZ3JhbSh0aGlzLmxvY2FsQWRkcmVzcykKICAgICAgOiB0eXBlRmxhZ3MgPSB0eXBlTm9ybWFsU29ja2V0IHwgdHlwZVVkcFNvY2tldDsKCiAgX05hdGl2ZVNvY2tldC5ub3JtYWwoKSA6IHR5cGVGbGFncyA9IHR5cGVOb3JtYWxTb2NrZXQgfCB0eXBlVGNwU29ja2V0OwoKICBfTmF0aXZlU29ja2V0Lmxpc3RlbigpIDogdHlwZUZsYWdzID0gdHlwZUxpc3RlbmluZ1NvY2tldCB8IHR5cGVUY3BTb2NrZXQgewogICAgaXNDbG9zZWRXcml0ZSA9IHRydWU7CiAgfQoKICBfTmF0aXZlU29ja2V0LnBpcGUoKSA6IHR5cGVGbGFncyA9IHR5cGVQaXBlOwoKICBfTmF0aXZlU29ja2V0Ll93YXRjaENvbW1vbihpbnQgaWQsIGludCB0eXBlKQogICAgICA6IHR5cGVGbGFncyA9IHR5cGVOb3JtYWxTb2NrZXQgfCB0eXBlIHsKICAgIGlzQ2xvc2VkV3JpdGUgPSB0cnVlOwogICAgbmF0aXZlU2V0U29ja2V0SWQoaWQsIHR5cGVGbGFncyk7CiAgfQoKICBfTmF0aXZlU29ja2V0LndhdGNoU2lnbmFsKGludCBpZCkKICAgICAgOiB0aGlzLl93YXRjaENvbW1vbihpZCwgdHlwZUludGVybmFsU2lnbmFsU29ja2V0KTsKCiAgX05hdGl2ZVNvY2tldC53YXRjaChpbnQgaWQpIDogdGhpcy5fd2F0Y2hDb21tb24oaWQsIHR5cGVJbnRlcm5hbFNvY2tldCk7CgogIGJvb2wgZ2V0IGlzTGlzdGVuaW5nID0+ICh0eXBlRmxhZ3MgJiB0eXBlTGlzdGVuaW5nU29ja2V0KSAhPSAwOwogIGJvb2wgZ2V0IGlzUGlwZSA9PiAodHlwZUZsYWdzICYgdHlwZVBpcGUpICE9IDA7CiAgYm9vbCBnZXQgaXNJbnRlcm5hbCA9PiAodHlwZUZsYWdzICYgdHlwZUludGVybmFsU29ja2V0KSAhPSAwOwogIGJvb2wgZ2V0IGlzSW50ZXJuYWxTaWduYWwgPT4gKHR5cGVGbGFncyAmIHR5cGVJbnRlcm5hbFNpZ25hbFNvY2tldCkgIT0gMDsKICBib29sIGdldCBpc1RjcCA9PiAodHlwZUZsYWdzICYgdHlwZVRjcFNvY2tldCkgIT0gMDsKICBib29sIGdldCBpc1VkcCA9PiAodHlwZUZsYWdzICYgdHlwZVVkcFNvY2tldCkgIT0gMDsKCiAgTWFwIF90b0pTT04oYm9vbCByZWYpID0+IHRocm93IG5ldyBVbmltcGxlbWVudGVkRXJyb3IoKTsKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlVHlwZVBhdGggPT4gdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcigpOwogIFN0cmluZyBnZXQgX3NlcnZpY2VUeXBlTmFtZSA9PiB0aHJvdyBuZXcgVW5pbXBsZW1lbnRlZEVycm9yKCk7CgogIFVpbnQ4TGlzdCByZWFkKGludCBsZW4pIHsKICAgIGlmIChsZW4gIT0gbnVsbCAmJiBsZW4gPD0gMCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSWxsZWdhbCBsZW5ndGggJGxlbiIpOwogICAgfQogICAgaWYgKGlzQ2xvc2luZyB8fCBpc0Nsb3NlZCkgcmV0dXJuIG51bGw7CiAgICBsZW4gPSBtaW4oYXZhaWxhYmxlLCBsZW4gPT0gbnVsbCA/IGF2YWlsYWJsZSA6IGxlbik7CiAgICBpZiAobGVuID09IDApIHJldHVybiBudWxsOwogICAgdmFyIHJlc3VsdCA9IG5hdGl2ZVJlYWQobGVuKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICByZXBvcnRFcnJvcihyZXN1bHQsICJSZWFkIGZhaWxlZCIpOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgewogICAgICBhdmFpbGFibGUgLT0gcmVzdWx0Lmxlbmd0aDsKICAgICAgLy8gVE9ETyhyaWNvdyk6IFJlbW92ZSB3aGVuIHdlIHRyYWNrIGludGVybmFsIGFuZCBwaXBlIHVzZXMuCiAgICAgIGFzc2VydChyZXNvdXJjZUluZm8gIT0gbnVsbCB8fCBpc1BpcGUgfHwgaXNJbnRlcm5hbCB8fCBpc0ludGVybmFsU2lnbmFsKTsKICAgICAgaWYgKHJlc291cmNlSW5mbyAhPSBudWxsKSB7CiAgICAgICAgcmVzb3VyY2VJbmZvLnRvdGFsUmVhZCArPSByZXN1bHQubGVuZ3RoOwogICAgICB9CiAgICB9CiAgICAvLyBUT0RPKHJpY293KTogUmVtb3ZlIHdoZW4gd2UgdHJhY2sgaW50ZXJuYWwgYW5kIHBpcGUgdXNlcy4KICAgIGFzc2VydChyZXNvdXJjZUluZm8gIT0gbnVsbCB8fCBpc1BpcGUgfHwgaXNJbnRlcm5hbCB8fCBpc0ludGVybmFsU2lnbmFsKTsKICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICByZXNvdXJjZUluZm8uZGlkUmVhZCgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIERhdGFncmFtIHJlY2VpdmUoKSB7CiAgICBpZiAoaXNDbG9zaW5nIHx8IGlzQ2xvc2VkKSByZXR1cm4gbnVsbDsKICAgIHZhciByZXN1bHQgPSBuYXRpdmVSZWN2RnJvbSgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHJlcG9ydEVycm9yKHJlc3VsdCwgIlJlY2VpdmUgZmFpbGVkIik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7CiAgICAgIC8vIFJlYWQgdGhlIG5leHQgYXZhaWxhYmxlLiBBdmFpbGFibGUgaXMgb25seSBmb3IgdGhlIG5leHQgZGF0YWdyYW0sIG5vdAogICAgICAvLyB0aGUgc3VtIG9mIGFsbCBkYXRhZ3JhbXMgcGVuZGluZywgc28gd2UgbmVlZCB0byBjYWxsIGFmdGVyIGVhY2gKICAgICAgLy8gcmVjZWl2ZS4gSWYgYXZhaWxhYmxlIGJlY29tZXMgPiAwLCB0aGUgX05hdGl2ZVNvY2tldCB3aWxsIGNvbnRpbnVlIHRvCiAgICAgIC8vIGVtaXQgcmVhZCBldmVudHMuCiAgICAgIGF2YWlsYWJsZSA9IG5hdGl2ZUF2YWlsYWJsZSgpOwogICAgICAvLyBUT0RPKHJpY293KTogUmVtb3ZlIHdoZW4gd2UgdHJhY2sgaW50ZXJuYWwgYW5kIHBpcGUgdXNlcy4KICAgICAgYXNzZXJ0KHJlc291cmNlSW5mbyAhPSBudWxsIHx8IGlzUGlwZSB8fCBpc0ludGVybmFsIHx8IGlzSW50ZXJuYWxTaWduYWwpOwogICAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKICAgICAgICByZXNvdXJjZUluZm8udG90YWxSZWFkICs9IHJlc3VsdC5kYXRhLmxlbmd0aDsKICAgICAgfQogICAgfQogICAgLy8gVE9ETyhyaWNvdyk6IFJlbW92ZSB3aGVuIHdlIHRyYWNrIGludGVybmFsIGFuZCBwaXBlIHVzZXMuCiAgICBhc3NlcnQocmVzb3VyY2VJbmZvICE9IG51bGwgfHwgaXNQaXBlIHx8IGlzSW50ZXJuYWwgfHwgaXNJbnRlcm5hbFNpZ25hbCk7CiAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKICAgICAgcmVzb3VyY2VJbmZvLmRpZFJlYWQoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBpbnQgd3JpdGUoTGlzdDxpbnQ+IGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGJ5dGVzKSB7CiAgICBpZiAoYnVmZmVyIGlzISBMaXN0KSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgaWYgKG9mZnNldCA9PSBudWxsKSBvZmZzZXQgPSAwOwogICAgaWYgKGJ5dGVzID09IG51bGwpIHsKICAgICAgaWYgKG9mZnNldCA+IGJ1ZmZlci5sZW5ndGgpIHsKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShvZmZzZXQpOwogICAgICB9CiAgICAgIGJ5dGVzID0gYnVmZmVyLmxlbmd0aCAtIG9mZnNldDsKICAgIH0KICAgIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShvZmZzZXQpOwogICAgaWYgKGJ5dGVzIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IudmFsdWUoYnl0ZXMpOwogICAgaWYgKChvZmZzZXQgKyBieXRlcykgPiBidWZmZXIubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnZhbHVlKG9mZnNldCArIGJ5dGVzKTsKICAgIH0KICAgIGlmIChvZmZzZXQgaXMhIGludCB8fCBieXRlcyBpcyEgaW50KSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIGFyZ3VtZW50cyB0byB3cml0ZSBvbiBTb2NrZXQiKTsKICAgIH0KICAgIGlmIChpc0Nsb3NpbmcgfHwgaXNDbG9zZWQpIHJldHVybiAwOwogICAgaWYgKGJ5dGVzID09IDApIHJldHVybiAwOwogICAgX0J1ZmZlckFuZFN0YXJ0IGJ1ZmZlckFuZFN0YXJ0ID0KICAgICAgICBfZW5zdXJlRmFzdEFuZFNlcmlhbGl6YWJsZUJ5dGVEYXRhKGJ1ZmZlciwgb2Zmc2V0LCBvZmZzZXQgKyBieXRlcyk7CiAgICB2YXIgcmVzdWx0ID0KICAgICAgICBuYXRpdmVXcml0ZShidWZmZXJBbmRTdGFydC5idWZmZXIsIGJ1ZmZlckFuZFN0YXJ0LnN0YXJ0LCBieXRlcyk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgT1NFcnJvciBvc0Vycm9yID0gcmVzdWx0OwogICAgICBzY2hlZHVsZU1pY3JvdGFzaygoKSA9PiByZXBvcnRFcnJvcihvc0Vycm9yLCAiV3JpdGUgZmFpbGVkIikpOwogICAgICByZXN1bHQgPSAwOwogICAgfQogICAgLy8gVGhlIHJlc3VsdCBtYXkgYmUgbmVnYXRpdmUsIGlmIHdlIGZvcmNlZCBhIHNob3J0IHdyaXRlIGZvciB0ZXN0aW5nCiAgICAvLyBwdXJwb3NlLiBJbiBzdWNoIGNhc2UsIGRvbid0IG1hcmsgd3JpdGVBdmFpbGFibGUgYXMgZmFsc2UsIGFzIHdlIGRvbid0CiAgICAvLyBrbm93IGlmIHdlJ2xsIHJlY2VpdmUgYW4gZXZlbnQuIEl0J3MgYmV0dGVyIHRvIGp1c3QgcmV0cnkuCiAgICBpZiAocmVzdWx0ID49IDAgJiYgcmVzdWx0IDwgYnl0ZXMpIHsKICAgICAgd3JpdGVBdmFpbGFibGUgPSBmYWxzZTsKICAgIH0KICAgIC8vIE5lZ2F0ZSB0aGUgcmVzdWx0LCBhcyBzdGF0ZWQgYWJvdmUuCiAgICBpZiAocmVzdWx0IDwgMCkgcmVzdWx0ID0gLXJlc3VsdDsKICAgIC8vIFRPRE8ocmljb3cpOiBSZW1vdmUgd2hlbiB3ZSB0cmFjayBpbnRlcm5hbCBhbmQgcGlwZSB1c2VzLgogICAgYXNzZXJ0KHJlc291cmNlSW5mbyAhPSBudWxsIHx8IGlzUGlwZSB8fCBpc0ludGVybmFsIHx8IGlzSW50ZXJuYWxTaWduYWwpOwogICAgaWYgKHJlc291cmNlSW5mbyAhPSBudWxsKSB7CiAgICAgIHJlc291cmNlSW5mby5hZGRXcml0ZShyZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGludCBzZW5kKExpc3Q8aW50PiBidWZmZXIsIGludCBvZmZzZXQsIGludCBieXRlcywgSW50ZXJuZXRBZGRyZXNzIGFkZHJlc3MsCiAgICAgIGludCBwb3J0KSB7CiAgICBfdGhyb3dPbkJhZFBvcnQocG9ydCk7CiAgICBpZiAoaXNDbG9zaW5nIHx8IGlzQ2xvc2VkKSByZXR1cm4gMDsKICAgIF9CdWZmZXJBbmRTdGFydCBidWZmZXJBbmRTdGFydCA9CiAgICAgICAgX2Vuc3VyZUZhc3RBbmRTZXJpYWxpemFibGVCeXRlRGF0YShidWZmZXIsIG9mZnNldCwgYnl0ZXMpOwogICAgdmFyIHJlc3VsdCA9IG5hdGl2ZVNlbmRUbyhidWZmZXJBbmRTdGFydC5idWZmZXIsIGJ1ZmZlckFuZFN0YXJ0LnN0YXJ0LAogICAgICAgIGJ5dGVzLCAoYWRkcmVzcyBhcyBfSW50ZXJuZXRBZGRyZXNzKS5faW5fYWRkciwgcG9ydCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgT1NFcnJvciBvc0Vycm9yID0gcmVzdWx0OwogICAgICBzY2hlZHVsZU1pY3JvdGFzaygoKSA9PiByZXBvcnRFcnJvcihvc0Vycm9yLCAiU2VuZCBmYWlsZWQiKSk7CiAgICAgIHJlc3VsdCA9IDA7CiAgICB9CiAgICAvLyBUT0RPKHJpY293KTogUmVtb3ZlIHdoZW4gd2UgdHJhY2sgaW50ZXJuYWwgYW5kIHBpcGUgdXNlcy4KICAgIGFzc2VydChyZXNvdXJjZUluZm8gIT0gbnVsbCB8fCBpc1BpcGUgfHwgaXNJbnRlcm5hbCB8fCBpc0ludGVybmFsU2lnbmFsKTsKICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICByZXNvdXJjZUluZm8uYWRkV3JpdGUocmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBfTmF0aXZlU29ja2V0IGFjY2VwdCgpIHsKICAgIC8vIERvbid0IGlzc3VlIGFjY2VwdCBpZiB3ZSdyZSBjbG9zaW5nLgogICAgaWYgKGlzQ2xvc2luZyB8fCBpc0Nsb3NlZCkgcmV0dXJuIG51bGw7CiAgICBhc3NlcnQoYXZhaWxhYmxlID4gMCk7CiAgICBhdmFpbGFibGUtLTsKICAgIHRva2VucysrOwogICAgcmV0dXJuVG9rZW5zKGxpc3RlbmluZ1Rva2VuQmF0Y2hTaXplKTsKICAgIHZhciBzb2NrZXQgPSBuZXcgX05hdGl2ZVNvY2tldC5ub3JtYWwoKTsKICAgIGlmIChuYXRpdmVBY2NlcHQoc29ja2V0KSAhPSB0cnVlKSByZXR1cm4gbnVsbDsKICAgIHNvY2tldC5sb2NhbFBvcnQgPSBsb2NhbFBvcnQ7CiAgICBzb2NrZXQubG9jYWxBZGRyZXNzID0gYWRkcmVzczsKICAgIHNldHVwUmVzb3VyY2VJbmZvKHNvY2tldCk7CiAgICAvLyBUT0RPKHJpY293KTogUmVtb3ZlIHdoZW4gd2UgdHJhY2sgaW50ZXJuYWwgYW5kIHBpcGUgdXNlcy4KICAgIGFzc2VydChyZXNvdXJjZUluZm8gIT0gbnVsbCB8fCBpc1BpcGUgfHwgaXNJbnRlcm5hbCB8fCBpc0ludGVybmFsU2lnbmFsKTsKICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICAvLyBXZSB0cmFjayB0aGlzIGFzIHJlYWQgb25lIGJ5dGUuCiAgICAgIHJlc291cmNlSW5mby5hZGRSZWFkKDEpOwogICAgfQogICAgcmV0dXJuIHNvY2tldDsKICB9CgogIGludCBnZXQgcG9ydCB7CiAgICBpZiAobG9jYWxQb3J0ICE9IDApIHJldHVybiBsb2NhbFBvcnQ7CiAgICBpZiAoaXNDbG9zaW5nIHx8IGlzQ2xvc2VkKSB0aHJvdyBjb25zdCBTb2NrZXRFeGNlcHRpb24uY2xvc2VkKCk7CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlR2V0UG9ydCgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB0aHJvdyByZXN1bHQ7CiAgICByZXR1cm4gbG9jYWxQb3J0ID0gcmVzdWx0OwogIH0KCiAgaW50IGdldCByZW1vdGVQb3J0IHsKICAgIGlmIChpc0Nsb3NpbmcgfHwgaXNDbG9zZWQpIHRocm93IGNvbnN0IFNvY2tldEV4Y2VwdGlvbi5jbG9zZWQoKTsKICAgIHZhciByZXN1bHQgPSBuYXRpdmVHZXRSZW1vdGVQZWVyKCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHRocm93IHJlc3VsdDsKICAgIHJldHVybiByZXN1bHRbMV07CiAgfQoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3MgPT4gbG9jYWxBZGRyZXNzOwoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IHJlbW90ZUFkZHJlc3MgewogICAgaWYgKGlzQ2xvc2luZyB8fCBpc0Nsb3NlZCkgdGhyb3cgY29uc3QgU29ja2V0RXhjZXB0aW9uLmNsb3NlZCgpOwogICAgdmFyIHJlc3VsdCA9IG5hdGl2ZUdldFJlbW90ZVBlZXIoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgdGhyb3cgcmVzdWx0OwogICAgdmFyIGFkZHIgPSByZXN1bHRbMF07CiAgICB2YXIgdHlwZSA9IG5ldyBJbnRlcm5ldEFkZHJlc3NUeXBlLl9mcm9tKGFkZHJbMF0pOwogICAgcmV0dXJuIG5ldyBfSW50ZXJuZXRBZGRyZXNzKGFkZHJbMV0sIG51bGwsIGFkZHJbMl0pOwogIH0KCiAgdm9pZCBpc3N1ZVJlYWRFdmVudCgpIHsKICAgIGlmIChjbG9zZWRSZWFkRXZlbnRTZW50KSByZXR1cm47CiAgICBpZiAocmVhZEV2ZW50SXNzdWVkKSByZXR1cm47CiAgICByZWFkRXZlbnRJc3N1ZWQgPSB0cnVlOwogICAgdm9pZCBpc3N1ZSgpIHsKICAgICAgcmVhZEV2ZW50SXNzdWVkID0gZmFsc2U7CiAgICAgIGlmIChpc0Nsb3NpbmcpIHJldHVybjsKICAgICAgaWYgKCFzZW5kUmVhZEV2ZW50cykgcmV0dXJuOwogICAgICBpZiAoYXZhaWxhYmxlID09IDApIHsKICAgICAgICBpZiAoaXNDbG9zZWRSZWFkICYmICFjbG9zZWRSZWFkRXZlbnRTZW50KSB7CiAgICAgICAgICBpZiAoaXNDbG9zZWRXcml0ZSkgY2xvc2UoKTsKICAgICAgICAgIHZhciBoYW5kbGVyID0gZXZlbnRIYW5kbGVyc1tjbG9zZWRFdmVudF07CiAgICAgICAgICBpZiAoaGFuZGxlciA9PSBudWxsKSByZXR1cm47CiAgICAgICAgICBjbG9zZWRSZWFkRXZlbnRTZW50ID0gdHJ1ZTsKICAgICAgICAgIGhhbmRsZXIoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHZhciBoYW5kbGVyID0gZXZlbnRIYW5kbGVyc1tyZWFkRXZlbnRdOwogICAgICBpZiAoaGFuZGxlciA9PSBudWxsKSByZXR1cm47CiAgICAgIHJlYWRFdmVudElzc3VlZCA9IHRydWU7CiAgICAgIGhhbmRsZXIoKTsKICAgICAgc2NoZWR1bGVNaWNyb3Rhc2soaXNzdWUpOwogICAgfQoKICAgIHNjaGVkdWxlTWljcm90YXNrKGlzc3VlKTsKICB9CgogIHZvaWQgaXNzdWVXcml0ZUV2ZW50KHtib29sIGRlbGF5ZWQ6IHRydWV9KSB7CiAgICBpZiAod3JpdGVFdmVudElzc3VlZCkgcmV0dXJuOwogICAgaWYgKCF3cml0ZUF2YWlsYWJsZSkgcmV0dXJuOwogICAgdm9pZCBpc3N1ZSgpIHsKICAgICAgd3JpdGVFdmVudElzc3VlZCA9IGZhbHNlOwogICAgICBpZiAoIXdyaXRlQXZhaWxhYmxlKSByZXR1cm47CiAgICAgIGlmIChpc0Nsb3NpbmcpIHJldHVybjsKICAgICAgaWYgKCFzZW5kV3JpdGVFdmVudHMpIHJldHVybjsKICAgICAgc2VuZFdyaXRlRXZlbnRzID0gZmFsc2U7CiAgICAgIHZhciBoYW5kbGVyID0gZXZlbnRIYW5kbGVyc1t3cml0ZUV2ZW50XTsKICAgICAgaWYgKGhhbmRsZXIgPT0gbnVsbCkgcmV0dXJuOwogICAgICBoYW5kbGVyKCk7CiAgICB9CgogICAgaWYgKGRlbGF5ZWQpIHsKICAgICAgd3JpdGVFdmVudElzc3VlZCA9IHRydWU7CiAgICAgIHNjaGVkdWxlTWljcm90YXNrKGlzc3VlKTsKICAgIH0gZWxzZSB7CiAgICAgIGlzc3VlKCk7CiAgICB9CiAgfQoKICAvLyBNdWx0aXBsZXhlcyBzb2NrZXQgZXZlbnRzIHRvIHRoZSBzb2NrZXQgaGFuZGxlcnMuCiAgdm9pZCBtdWx0aXBsZXgoT2JqZWN0IGV2ZW50c09iaikgewogICAgLy8gVE9ETyhwYXVsYmVycnkpOiB3aGVuIGlzc3VlICMzMTMwNSBpcyBmaXhlZCwgd2Ugc2hvdWxkIGJlIGFibGUgdG8gc2ltcGx5CiAgICAvLyBkZWNsYXJlIGBldmVudHNgIGFzIGEgYGNvdmFyaWFudCBpbnRgIHBhcmFtZXRlci4KICAgIGludCBldmVudHMgPSBldmVudHNPYmo7CiAgICBmb3IgKGludCBpID0gZmlyc3RFdmVudDsgaSA8PSBsYXN0RXZlbnQ7IGkrKykgewogICAgICBpZiAoKChldmVudHMgJiAoMSA8PCBpKSkgIT0gMCkpIHsKICAgICAgICBpZiAoKGkgPT0gY2xvc2VkRXZlbnQgfHwgaSA9PSByZWFkRXZlbnQpICYmIGlzQ2xvc2VkUmVhZCkgY29udGludWU7CiAgICAgICAgaWYgKGlzQ2xvc2luZyAmJiBpICE9IGRlc3Ryb3llZEV2ZW50KSBjb250aW51ZTsKICAgICAgICBpZiAoaSA9PSBjbG9zZWRFdmVudCAmJiAhaXNMaXN0ZW5pbmcgJiYgIWlzQ2xvc2luZyAmJiAhaXNDbG9zZWQpIHsKICAgICAgICAgIGlzQ2xvc2VkUmVhZCA9IHRydWU7CiAgICAgICAgICBpc3N1ZVJlYWRFdmVudCgpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoaSA9PSB3cml0ZUV2ZW50KSB7CiAgICAgICAgICB3cml0ZUF2YWlsYWJsZSA9IHRydWU7CiAgICAgICAgICBpc3N1ZVdyaXRlRXZlbnQoZGVsYXllZDogZmFsc2UpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBpZiAoaSA9PSByZWFkRXZlbnQpIHsKICAgICAgICAgIGlmIChpc0xpc3RlbmluZykgewogICAgICAgICAgICBhdmFpbGFibGUrKzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGF2YWlsYWJsZSA9IG5hdGl2ZUF2YWlsYWJsZSgpOwogICAgICAgICAgICBpc3N1ZVJlYWRFdmVudCgpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciBoYW5kbGVyID0gZXZlbnRIYW5kbGVyc1tpXTsKICAgICAgICBpZiAoaSA9PSBkZXN0cm95ZWRFdmVudCkgewogICAgICAgICAgYXNzZXJ0KGlzQ2xvc2luZyk7CiAgICAgICAgICBhc3NlcnQoIWlzQ2xvc2VkKTsKICAgICAgICAgIC8vIFRPRE8ocmljb3cpOiBSZW1vdmUvdXBkYXRlIHdoZW4gd2UgdHJhY2sgaW50ZXJuYWwgYW5kIHBpcGUgdXNlcy4KICAgICAgICAgIGFzc2VydCgKICAgICAgICAgICAgICByZXNvdXJjZUluZm8gIT0gbnVsbCB8fCBpc1BpcGUgfHwgaXNJbnRlcm5hbCB8fCBpc0ludGVybmFsU2lnbmFsKTsKICAgICAgICAgIGlmIChyZXNvdXJjZUluZm8gIT0gbnVsbCkgewogICAgICAgICAgICBfU29ja2V0UmVzb3VyY2VJbmZvLlNvY2tldENsb3NlZChyZXNvdXJjZUluZm8pOwogICAgICAgICAgfQogICAgICAgICAgaXNDbG9zZWQgPSB0cnVlOwogICAgICAgICAgY2xvc2VDb21wbGV0ZXIuY29tcGxldGUoKTsKICAgICAgICAgIGRpc2Nvbm5lY3RGcm9tRXZlbnRIYW5kbGVyKCk7CiAgICAgICAgICBpZiAoaGFuZGxlciAhPSBudWxsKSBoYW5kbGVyKCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIGlmIChpID09IGVycm9yRXZlbnQpIHsKICAgICAgICAgIGlmICghaXNDbG9zaW5nKSB7CiAgICAgICAgICAgIHJlcG9ydEVycm9yKG5hdGl2ZUdldEVycm9yKCksICIiKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKCFpc0Nsb3NlZCkgewogICAgICAgICAgLy8gSWYgdGhlIGNvbm5lY3Rpb24gaXMgY2xvc2VkIHJpZ2h0IGFmdGVyIGl0J3MgYWNjZXB0ZWQsIHRoZXJlJ3MgYQogICAgICAgICAgLy8gY2hhbmNlIHRoZSBjbG9zZS1oYW5kbGVyIGlzIG5vdCBzZXQuCiAgICAgICAgICBpZiAoaGFuZGxlciAhPSBudWxsKSBoYW5kbGVyKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoIWlzTGlzdGVuaW5nKSB7CiAgICAgIHRva2VucysrOwogICAgICByZXR1cm5Ub2tlbnMobm9ybWFsVG9rZW5CYXRjaFNpemUpOwogICAgfQogIH0KCiAgdm9pZCByZXR1cm5Ub2tlbnMoaW50IHRva2VuQmF0Y2hTaXplKSB7CiAgICBpZiAoIWlzQ2xvc2luZyAmJiAhaXNDbG9zZWQpIHsKICAgICAgYXNzZXJ0KGV2ZW50UG9ydCAhPSBudWxsKTsKICAgICAgLy8gUmV0dXJuIGluIGJhdGNoZXMuCiAgICAgIGlmICh0b2tlbnMgPT0gdG9rZW5CYXRjaFNpemUpIHsKICAgICAgICBhc3NlcnQodG9rZW5zIDwgKDEgPDwgZmlyc3RDb21tYW5kKSk7CiAgICAgICAgc2VuZFRvRXZlbnRIYW5kbGVyKCgxIDw8IHJldHVyblRva2VuQ29tbWFuZCkgfCB0b2tlbnMpOwogICAgICAgIHRva2VucyA9IDA7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgc2V0SGFuZGxlcnMoe3JlYWQsIHdyaXRlLCBlcnJvciwgY2xvc2VkLCBkZXN0cm95ZWR9KSB7CiAgICBldmVudEhhbmRsZXJzW3JlYWRFdmVudF0gPSByZWFkOwogICAgZXZlbnRIYW5kbGVyc1t3cml0ZUV2ZW50XSA9IHdyaXRlOwogICAgZXZlbnRIYW5kbGVyc1tlcnJvckV2ZW50XSA9IGVycm9yOwogICAgZXZlbnRIYW5kbGVyc1tjbG9zZWRFdmVudF0gPSBjbG9zZWQ7CiAgICBldmVudEhhbmRsZXJzW2Rlc3Ryb3llZEV2ZW50XSA9IGRlc3Ryb3llZDsKICB9CgogIHZvaWQgc2V0TGlzdGVuaW5nKHtyZWFkOiB0cnVlLCB3cml0ZTogdHJ1ZX0pIHsKICAgIHNlbmRSZWFkRXZlbnRzID0gcmVhZDsKICAgIHNlbmRXcml0ZUV2ZW50cyA9IHdyaXRlOwogICAgaWYgKHJlYWQpIGlzc3VlUmVhZEV2ZW50KCk7CiAgICBpZiAod3JpdGUpIGlzc3VlV3JpdGVFdmVudCgpOwogICAgaWYgKCFmbGFnc1NlbnQgJiYgIWlzQ2xvc2luZykgewogICAgICBmbGFnc1NlbnQgPSB0cnVlOwogICAgICBpbnQgZmxhZ3MgPSAxIDw8IHNldEV2ZW50TWFza0NvbW1hbmQ7CiAgICAgIGlmICghaXNDbG9zZWRSZWFkKSBmbGFncyB8PSAxIDw8IHJlYWRFdmVudDsKICAgICAgaWYgKCFpc0Nsb3NlZFdyaXRlKSBmbGFncyB8PSAxIDw8IHdyaXRlRXZlbnQ7CiAgICAgIHNlbmRUb0V2ZW50SGFuZGxlcihmbGFncyk7CiAgICB9CiAgfQoKICBGdXR1cmUgY2xvc2UoKSB7CiAgICBpZiAoIWlzQ2xvc2luZyAmJiAhaXNDbG9zZWQpIHsKICAgICAgc2VuZFRvRXZlbnRIYW5kbGVyKDEgPDwgY2xvc2VDb21tYW5kKTsKICAgICAgaXNDbG9zaW5nID0gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBjbG9zZUNvbXBsZXRlci5mdXR1cmU7CiAgfQoKICB2b2lkIHNodXRkb3duKFNvY2tldERpcmVjdGlvbiBkaXJlY3Rpb24pIHsKICAgIGlmICghaXNDbG9zaW5nICYmICFpc0Nsb3NlZCkgewogICAgICBzd2l0Y2ggKGRpcmVjdGlvbikgewogICAgICAgIGNhc2UgU29ja2V0RGlyZWN0aW9uLnJlY2VpdmU6CiAgICAgICAgICBzaHV0ZG93blJlYWQoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgU29ja2V0RGlyZWN0aW9uLnNlbmQ6CiAgICAgICAgICBzaHV0ZG93bldyaXRlKCk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIFNvY2tldERpcmVjdGlvbi5ib3RoOgogICAgICAgICAgY2xvc2UoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihkaXJlY3Rpb24pOwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHNodXRkb3duV3JpdGUoKSB7CiAgICBpZiAoIWlzQ2xvc2luZyAmJiAhaXNDbG9zZWQpIHsKICAgICAgaWYgKGNsb3NlZFJlYWRFdmVudFNlbnQpIHsKICAgICAgICBjbG9zZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIHNlbmRUb0V2ZW50SGFuZGxlcigxIDw8IHNodXRkb3duV3JpdGVDb21tYW5kKTsKICAgICAgfQogICAgICBpc0Nsb3NlZFdyaXRlID0gdHJ1ZTsKICAgIH0KICB9CgogIHZvaWQgc2h1dGRvd25SZWFkKCkgewogICAgaWYgKCFpc0Nsb3NpbmcgJiYgIWlzQ2xvc2VkKSB7CiAgICAgIGlmIChpc0Nsb3NlZFdyaXRlKSB7CiAgICAgICAgY2xvc2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzZW5kVG9FdmVudEhhbmRsZXIoMSA8PCBzaHV0ZG93blJlYWRDb21tYW5kKTsKICAgICAgfQogICAgICBpc0Nsb3NlZFJlYWQgPSB0cnVlOwogICAgfQogIH0KCiAgdm9pZCBzZW5kVG9FdmVudEhhbmRsZXIoaW50IGRhdGEpIHsKICAgIGludCBmdWxsRGF0YSA9ICh0eXBlRmxhZ3MgJiB0eXBlVHlwZU1hc2spIHwgZGF0YTsKICAgIGFzc2VydCghaXNDbG9zaW5nKTsKICAgIGNvbm5lY3RUb0V2ZW50SGFuZGxlcigpOwogICAgX0V2ZW50SGFuZGxlci5fc2VuZERhdGEodGhpcywgZXZlbnRQb3J0LnNlbmRQb3J0LCBmdWxsRGF0YSk7CiAgfQoKICB2b2lkIGNvbm5lY3RUb0V2ZW50SGFuZGxlcigpIHsKICAgIGFzc2VydCghaXNDbG9zZWQpOwogICAgaWYgKGV2ZW50UG9ydCA9PSBudWxsKSB7CiAgICAgIGV2ZW50UG9ydCA9IG5ldyBSYXdSZWNlaXZlUG9ydChtdWx0aXBsZXgpOwogICAgfQogICAgaWYgKCFjb25uZWN0ZWRSZXNvdXJjZUhhbmRsZXIpIHsKICAgICAgcmVnaXN0ZXJFeHRlbnNpb24oCiAgICAgICAgICAnZXh0LmRhcnQuaW8uZ2V0T3BlblNvY2tldHMnLCBfU29ja2V0UmVzb3VyY2VJbmZvLmdldE9wZW5Tb2NrZXRzKTsKICAgICAgcmVnaXN0ZXJFeHRlbnNpb24oJ2V4dC5kYXJ0LmlvLmdldFNvY2tldEJ5SUQnLAogICAgICAgICAgX1NvY2tldFJlc291cmNlSW5mby5nZXRTb2NrZXRJbmZvTWFwQnlJRCk7CgogICAgICBjb25uZWN0ZWRSZXNvdXJjZUhhbmRsZXIgPSB0cnVlOwogICAgfQogIH0KCiAgdm9pZCBkaXNjb25uZWN0RnJvbUV2ZW50SGFuZGxlcigpIHsKICAgIGFzc2VydChldmVudFBvcnQgIT0gbnVsbCk7CiAgICBldmVudFBvcnQuY2xvc2UoKTsKICAgIGV2ZW50UG9ydCA9IG51bGw7CiAgICAvLyBOb3cgdGhhdCB3ZSBkb24ndCB0cmFjayB0aGlzIFNvY2tldCBhbnltb3JlLCB3ZSBjYW4gY2xlYXIgdGhlIG93bmVyCiAgICAvLyBmaWVsZC4KICAgIG93bmVyID0gbnVsbDsKICB9CgogIC8vIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiBlcnJvciByZXNwb25zZSBmcm9tIGEgbmF0aXZlIHBvcnQgY2FsbC4KICBzdGF0aWMgYm9vbCBpc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpIHsKICAgIHJldHVybiByZXNwb25zZSBpcyBMaXN0ICYmIHJlc3BvbnNlWzBdICE9IF9zdWNjZXNzUmVzcG9uc2U7CiAgfQoKICAvLyBDcmVhdGUgdGhlIGFwcHJvcHJpYXRlIGVycm9yL2V4Y2VwdGlvbiBmcm9tIGRpZmZlcmVudCByZXR1cm5lZAogIC8vIGVycm9yIG9iamVjdHMuCiAgc3RhdGljIGNyZWF0ZUVycm9yKGVycm9yLCBTdHJpbmcgbWVzc2FnZSwKICAgICAgW0ludGVybmV0QWRkcmVzcyBhZGRyZXNzLCBpbnQgcG9ydF0pIHsKICAgIGlmIChlcnJvciBpcyBPU0Vycm9yKSB7CiAgICAgIHJldHVybiBuZXcgU29ja2V0RXhjZXB0aW9uKG1lc3NhZ2UsCiAgICAgICAgICBvc0Vycm9yOiBlcnJvciwgYWRkcmVzczogYWRkcmVzcywgcG9ydDogcG9ydCk7CiAgICB9IGVsc2UgaWYgKGVycm9yIGlzIExpc3QpIHsKICAgICAgYXNzZXJ0KGlzRXJyb3JSZXNwb25zZShlcnJvcikpOwogICAgICBzd2l0Y2ggKGVycm9yWzBdKSB7CiAgICAgICAgY2FzZSBfaWxsZWdhbEFyZ3VtZW50UmVzcG9uc2U6CiAgICAgICAgICByZXR1cm4gbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgICAgICBjYXNlIF9vc0Vycm9yUmVzcG9uc2U6CiAgICAgICAgICByZXR1cm4gbmV3IFNvY2tldEV4Y2VwdGlvbihtZXNzYWdlLAogICAgICAgICAgICAgIG9zRXJyb3I6IG5ldyBPU0Vycm9yKGVycm9yWzJdLCBlcnJvclsxXSksCiAgICAgICAgICAgICAgYWRkcmVzczogYWRkcmVzcywKICAgICAgICAgICAgICBwb3J0OiBwb3J0KTsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIG5ldyBFeGNlcHRpb24oIlVua25vd24gZXJyb3IiKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBTb2NrZXRFeGNlcHRpb24obWVzc2FnZSwgYWRkcmVzczogYWRkcmVzcywgcG9ydDogcG9ydCk7CiAgICB9CiAgfQoKICB2b2lkIHJlcG9ydEVycm9yKGVycm9yLCBTdHJpbmcgbWVzc2FnZSkgewogICAgdmFyIGUgPSBjcmVhdGVFcnJvcihlcnJvciwgbWVzc2FnZSwgYWRkcmVzcywgbG9jYWxQb3J0KTsKICAgIC8vIEludm9rZSB0aGUgZXJyb3IgaGFuZGxlciBpZiBhbnkuCiAgICBpZiAoZXZlbnRIYW5kbGVyc1tlcnJvckV2ZW50XSAhPSBudWxsKSB7CiAgICAgIGV2ZW50SGFuZGxlcnNbZXJyb3JFdmVudF0oZSk7CiAgICB9CiAgICAvLyBGb3IgYWxsIGVycm9ycyB3ZSBjbG9zZSB0aGUgc29ja2V0CiAgICBjbG9zZSgpOwogIH0KCiAgZ2V0T3B0aW9uKFNvY2tldE9wdGlvbiBvcHRpb24pIHsKICAgIGlmIChvcHRpb24gPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgib3B0aW9uIik7CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlR2V0T3B0aW9uKG9wdGlvbi5fdmFsdWUsIGFkZHJlc3MudHlwZS5fdmFsdWUpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB0aHJvdyByZXN1bHQ7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgYm9vbCBzZXRPcHRpb24oU29ja2V0T3B0aW9uIG9wdGlvbiwgdmFsdWUpIHsKICAgIGlmIChvcHRpb24gPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgib3B0aW9uIik7CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlU2V0T3B0aW9uKG9wdGlvbi5fdmFsdWUsIGFkZHJlc3MudHlwZS5fdmFsdWUsIHZhbHVlKTsKICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgdGhyb3cgcmVzdWx0OwogICAgcmV0dXJuIHRydWU7CiAgfQoKICBVaW50OExpc3QgZ2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pIHsKICAgIGlmIChvcHRpb24gPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgib3B0aW9uIik7CiAgICBpZiAob3B0aW9uLnZhbHVlID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoIm9wdGlvbi52YWx1ZSIpOwoKICAgIHZhciByZXN1bHQgPSBuYXRpdmVHZXRSYXdPcHRpb24ob3B0aW9uLmxldmVsLCBvcHRpb24ub3B0aW9uLCBvcHRpb24udmFsdWUpOwogICAgaWYgKHJlc3VsdCAhPSBudWxsKSB0aHJvdyByZXN1bHQ7CiAgICByZXR1cm4gb3B0aW9uLnZhbHVlOwogIH0KCiAgdm9pZCBzZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgewogICAgaWYgKG9wdGlvbiA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJvcHRpb24iKTsKICAgIGlmIChvcHRpb24udmFsdWUgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgib3B0aW9uLnZhbHVlIik7CgogICAgdmFyIHJlc3VsdCA9IG5hdGl2ZVNldFJhd09wdGlvbihvcHRpb24ubGV2ZWwsIG9wdGlvbi5vcHRpb24sIG9wdGlvbi52YWx1ZSk7CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHRocm93IHJlc3VsdDsKICB9CgogIEludGVybmV0QWRkcmVzcyBtdWx0aWNhc3RBZGRyZXNzKAogICAgICBJbnRlcm5ldEFkZHJlc3MgYWRkciwgTmV0d29ya0ludGVyZmFjZSBpbnRlcmZhY2UpIHsKICAgIC8vIE9uIE1hYyBPUyB1c2luZyB0aGUgaW50ZXJmYWNlIGluZGV4IGZvciBqb2luaW5nIElQdjQgbXVsdGljYXN0IGdyb3VwcwogICAgLy8gaXMgbm90IHN1cHBvcnRlZC4gSGVyZSB0aGUgSVAgYWRkcmVzcyBvZiB0aGUgaW50ZXJmYWNlIGlzIG5lZWRlZC4KICAgIGlmIChQbGF0Zm9ybS5pc01hY09TICYmIGFkZHIudHlwZSA9PSBJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjQpIHsKICAgICAgaWYgKGludGVyZmFjZSAhPSBudWxsKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbnRlcmZhY2UuYWRkcmVzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBpZiAoaW50ZXJmYWNlLmFkZHJlc3Nlc1tpXS50eXBlID09IEludGVybmV0QWRkcmVzc1R5cGUuSVB2NCkgewogICAgICAgICAgICByZXR1cm4gaW50ZXJmYWNlLmFkZHJlc3Nlc1tpXTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gTm8gSVB2NCBhZGRyZXNzIGZvdW5kIG9uIHRoZSBpbnRlcmZhY2UuCiAgICAgICAgdGhyb3cgbmV3IFNvY2tldEV4Y2VwdGlvbigKICAgICAgICAgICAgIlRoZSBuZXR3b3JrIGludGVyZmFjZSBkb2VzIG5vdCBoYXZlIGFuIGFkZHJlc3MgIgogICAgICAgICAgICAib2YgdGhlIHNhbWUgZmFtaWx5IGFzIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyIpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIERlZmF1bHQgdG8gdGhlIEFOWSBhZGRyZXNzIGlmIG5vIGludGVyZmFjZSBpcyBzcGVjaWZpZWQuCiAgICAgICAgcmV0dXJuIEludGVybmV0QWRkcmVzcy5hbnlJUHY0OwogICAgICB9CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIHZvaWQgam9pbk11bHRpY2FzdChJbnRlcm5ldEFkZHJlc3MgYWRkciwgTmV0d29ya0ludGVyZmFjZSBpbnRlcmZhY2UpIHsKICAgIF9JbnRlcm5ldEFkZHJlc3MgaW50ZXJmYWNlQWRkciA9IG11bHRpY2FzdEFkZHJlc3MoYWRkciwgaW50ZXJmYWNlKTsKICAgIHZhciBpbnRlcmZhY2VJbmRleCA9IGludGVyZmFjZSA9PSBudWxsID8gMCA6IGludGVyZmFjZS5pbmRleDsKICAgIHZhciByZXN1bHQgPSBuYXRpdmVKb2luTXVsdGljYXN0KChhZGRyIGFzIF9JbnRlcm5ldEFkZHJlc3MpLl9pbl9hZGRyLAogICAgICAgIGludGVyZmFjZUFkZHI/Ll9pbl9hZGRyLCBpbnRlcmZhY2VJbmRleCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHRocm93IHJlc3VsdDsKICB9CgogIHZvaWQgbGVhdmVNdWx0aWNhc3QoSW50ZXJuZXRBZGRyZXNzIGFkZHIsIE5ldHdvcmtJbnRlcmZhY2UgaW50ZXJmYWNlKSB7CiAgICBfSW50ZXJuZXRBZGRyZXNzIGludGVyZmFjZUFkZHIgPSBtdWx0aWNhc3RBZGRyZXNzKGFkZHIsIGludGVyZmFjZSk7CiAgICB2YXIgaW50ZXJmYWNlSW5kZXggPSBpbnRlcmZhY2UgPT0gbnVsbCA/IDAgOiBpbnRlcmZhY2UuaW5kZXg7CiAgICB2YXIgcmVzdWx0ID0gbmF0aXZlTGVhdmVNdWx0aWNhc3QoKGFkZHIgYXMgX0ludGVybmV0QWRkcmVzcykuX2luX2FkZHIsCiAgICAgICAgaW50ZXJmYWNlQWRkcj8uX2luX2FkZHIsIGludGVyZmFjZUluZGV4KTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgdGhyb3cgcmVzdWx0OwogIH0KCiAgdm9pZCBuYXRpdmVTZXRTb2NrZXRJZChpbnQgaWQsIGludCB0eXBlRmxhZ3MpIG5hdGl2ZSAiU29ja2V0X1NldFNvY2tldElkIjsKICBuYXRpdmVBdmFpbGFibGUoKSBuYXRpdmUgIlNvY2tldF9BdmFpbGFibGUiOwogIG5hdGl2ZVJlYWQoaW50IGxlbikgbmF0aXZlICJTb2NrZXRfUmVhZCI7CiAgbmF0aXZlUmVjdkZyb20oKSBuYXRpdmUgIlNvY2tldF9SZWN2RnJvbSI7CiAgbmF0aXZlV3JpdGUoTGlzdDxpbnQ+IGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGJ5dGVzKQogICAgICBuYXRpdmUgIlNvY2tldF9Xcml0ZUxpc3QiOwogIG5hdGl2ZVNlbmRUbyhMaXN0PGludD4gYnVmZmVyLCBpbnQgb2Zmc2V0LCBpbnQgYnl0ZXMsIFVpbnQ4TGlzdCBhZGRyZXNzLAogICAgICBpbnQgcG9ydCkgbmF0aXZlICJTb2NrZXRfU2VuZFRvIjsKICBuYXRpdmVDcmVhdGVDb25uZWN0KFVpbnQ4TGlzdCBhZGRyLCBpbnQgcG9ydCkgbmF0aXZlICJTb2NrZXRfQ3JlYXRlQ29ubmVjdCI7CiAgbmF0aXZlQ3JlYXRlQmluZENvbm5lY3QoVWludDhMaXN0IGFkZHIsIGludCBwb3J0LCBVaW50OExpc3Qgc291cmNlQWRkcikKICAgICAgbmF0aXZlICJTb2NrZXRfQ3JlYXRlQmluZENvbm5lY3QiOwogIGJvb2wgaXNCaW5kRXJyb3IoaW50IGVycm9yTnVtYmVyKSBuYXRpdmUgIlNvY2tldEJhc2VfSXNCaW5kRXJyb3IiOwogIG5hdGl2ZUNyZWF0ZUJpbmRMaXN0ZW4oVWludDhMaXN0IGFkZHIsIGludCBwb3J0LCBpbnQgYmFja2xvZywgYm9vbCB2Nk9ubHksCiAgICAgIGJvb2wgc2hhcmVkKSBuYXRpdmUgIlNlcnZlclNvY2tldF9DcmVhdGVCaW5kTGlzdGVuIjsKICBuYXRpdmVDcmVhdGVCaW5kRGF0YWdyYW0oVWludDhMaXN0IGFkZHIsIGludCBwb3J0LCBib29sIHJldXNlQWRkcmVzcywKICAgICAgYm9vbCByZXVzZVBvcnQsIGludCB0dGwpIG5hdGl2ZSAiU29ja2V0X0NyZWF0ZUJpbmREYXRhZ3JhbSI7CiAgbmF0aXZlQWNjZXB0KF9OYXRpdmVTb2NrZXQgc29ja2V0KSBuYXRpdmUgIlNlcnZlclNvY2tldF9BY2NlcHQiOwogIGludCBuYXRpdmVHZXRQb3J0KCkgbmF0aXZlICJTb2NrZXRfR2V0UG9ydCI7CiAgTGlzdCBuYXRpdmVHZXRSZW1vdGVQZWVyKCkgbmF0aXZlICJTb2NrZXRfR2V0UmVtb3RlUGVlciI7CiAgaW50IG5hdGl2ZUdldFNvY2tldElkKCkgbmF0aXZlICJTb2NrZXRfR2V0U29ja2V0SWQiOwogIE9TRXJyb3IgbmF0aXZlR2V0RXJyb3IoKSBuYXRpdmUgIlNvY2tldF9HZXRFcnJvciI7CiAgbmF0aXZlR2V0T3B0aW9uKGludCBvcHRpb24sIGludCBwcm90b2NvbCkgbmF0aXZlICJTb2NrZXRfR2V0T3B0aW9uIjsKICBPU0Vycm9yIG5hdGl2ZUdldFJhd09wdGlvbihpbnQgbGV2ZWwsIGludCBvcHRpb24sIFVpbnQ4TGlzdCBkYXRhKQogICAgICBuYXRpdmUgIlNvY2tldF9HZXRSYXdPcHRpb24iOwogIE9TRXJyb3IgbmF0aXZlU2V0T3B0aW9uKGludCBvcHRpb24sIGludCBwcm90b2NvbCwgdmFsdWUpCiAgICAgIG5hdGl2ZSAiU29ja2V0X1NldE9wdGlvbiI7CiAgT1NFcnJvciBuYXRpdmVTZXRSYXdPcHRpb24oaW50IGxldmVsLCBpbnQgb3B0aW9uLCBVaW50OExpc3QgZGF0YSkKICAgICAgbmF0aXZlICJTb2NrZXRfU2V0UmF3T3B0aW9uIjsKICBPU0Vycm9yIG5hdGl2ZUpvaW5NdWx0aWNhc3QoVWludDhMaXN0IGFkZHIsIFVpbnQ4TGlzdCBpbnRlcmZhY2VBZGRyLAogICAgICBpbnQgaW50ZXJmYWNlSW5kZXgpIG5hdGl2ZSAiU29ja2V0X0pvaW5NdWx0aWNhc3QiOwogIGJvb2wgbmF0aXZlTGVhdmVNdWx0aWNhc3QoVWludDhMaXN0IGFkZHIsIFVpbnQ4TGlzdCBpbnRlcmZhY2VBZGRyLAogICAgICBpbnQgaW50ZXJmYWNlSW5kZXgpIG5hdGl2ZSAiU29ja2V0X0xlYXZlTXVsdGljYXN0IjsKfQoKY2xhc3MgX1Jhd1NlcnZlclNvY2tldCBleHRlbmRzIFN0cmVhbTxSYXdTb2NrZXQ+IGltcGxlbWVudHMgUmF3U2VydmVyU29ja2V0IHsKICBmaW5hbCBfTmF0aXZlU29ja2V0IF9zb2NrZXQ7CiAgU3RyZWFtQ29udHJvbGxlcjxSYXdTb2NrZXQ+IF9jb250cm9sbGVyOwogIFJlY2VpdmVQb3J0IF9yZWZlcmVuY2VQb3J0OwogIGJvb2wgX3Y2T25seTsKCiAgc3RhdGljIEZ1dHVyZTxfUmF3U2VydmVyU29ja2V0PiBiaW5kKAogICAgICBhZGRyZXNzLCBpbnQgcG9ydCwgaW50IGJhY2tsb2csIGJvb2wgdjZPbmx5LCBib29sIHNoYXJlZCkgewogICAgX3Rocm93T25CYWRQb3J0KHBvcnQpOwogICAgaWYgKGJhY2tsb2cgPCAwKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSW52YWxpZCBiYWNrbG9nICRiYWNrbG9nIik7CiAgICByZXR1cm4gX05hdGl2ZVNvY2tldC5iaW5kKGFkZHJlc3MsIHBvcnQsIGJhY2tsb2csIHY2T25seSwgc2hhcmVkKQogICAgICAgIC50aGVuKChzb2NrZXQpID0+IG5ldyBfUmF3U2VydmVyU29ja2V0KHNvY2tldCwgdjZPbmx5KSk7CiAgfQoKICBfUmF3U2VydmVyU29ja2V0KHRoaXMuX3NvY2tldCwgdGhpcy5fdjZPbmx5KTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NvY2tldD4gbGlzdGVuKHZvaWQgb25EYXRhKFJhd1NvY2tldCBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBpZiAoX2NvbnRyb2xsZXIgIT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtIHdhcyBhbHJlYWR5IGxpc3RlbmVkIHRvIik7CiAgICB9CiAgICB2YXIgem9uZSA9IFpvbmUuY3VycmVudDsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXIoCiAgICAgICAgc3luYzogdHJ1ZSwKICAgICAgICBvbkxpc3RlbjogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UsCiAgICAgICAgb25DYW5jZWw6IF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlLAogICAgICAgIG9uUGF1c2U6IF9vblBhdXNlU3RhdGVDaGFuZ2UsCiAgICAgICAgb25SZXN1bWU6IF9vblBhdXNlU3RhdGVDaGFuZ2UpOwogICAgX3NvY2tldC5zZXRIYW5kbGVycyhyZWFkOiB6b25lLmJpbmRDYWxsYmFja0d1YXJkZWQoKCkgewogICAgICB3aGlsZSAoX3NvY2tldC5hdmFpbGFibGUgPiAwKSB7CiAgICAgICAgdmFyIHNvY2tldCA9IF9zb2NrZXQuYWNjZXB0KCk7CiAgICAgICAgaWYgKHNvY2tldCA9PSBudWxsKSByZXR1cm47CiAgICAgICAgX2NvbnRyb2xsZXIuYWRkKG5ldyBfUmF3U29ja2V0KHNvY2tldCkpOwogICAgICAgIGlmIChfY29udHJvbGxlci5pc1BhdXNlZCkgcmV0dXJuOwogICAgICB9CiAgICB9KSwgZXJyb3I6IHpvbmUuYmluZFVuYXJ5Q2FsbGJhY2tHdWFyZGVkKChlKSB7CiAgICAgIF9jb250cm9sbGVyLmFkZEVycm9yKGUpOwogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgfSksIGRlc3Ryb3llZDogKCkgewogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICBpZiAoX3JlZmVyZW5jZVBvcnQgIT0gbnVsbCkgewogICAgICAgIF9yZWZlcmVuY2VQb3J0LmNsb3NlKCk7CiAgICAgICAgX3JlZmVyZW5jZVBvcnQgPSBudWxsOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICBpbnQgZ2V0IHBvcnQgPT4gX3NvY2tldC5wb3J0OwoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3MgPT4gX3NvY2tldC5hZGRyZXNzOwoKICBGdXR1cmU8UmF3U2VydmVyU29ja2V0PiBjbG9zZSgpIHsKICAgIHJldHVybiBfc29ja2V0LmNsb3NlKCkudGhlbjxSYXdTZXJ2ZXJTb2NrZXQ+KChfKSB7CiAgICAgIGlmIChfcmVmZXJlbmNlUG9ydCAhPSBudWxsKSB7CiAgICAgICAgX3JlZmVyZW5jZVBvcnQuY2xvc2UoKTsKICAgICAgICBfcmVmZXJlbmNlUG9ydCA9IG51bGw7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIHZvaWQgX3BhdXNlKCkgewogICAgX3NvY2tldC5zZXRMaXN0ZW5pbmcocmVhZDogZmFsc2UsIHdyaXRlOiBmYWxzZSk7CiAgfQoKICB2b2lkIF9yZXN1bWUoKSB7CiAgICBfc29ja2V0LnNldExpc3RlbmluZyhyZWFkOiB0cnVlLCB3cml0ZTogZmFsc2UpOwogIH0KCiAgdm9pZCBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSgpIHsKICAgIGlmIChfY29udHJvbGxlci5oYXNMaXN0ZW5lcikgewogICAgICBfcmVzdW1lKCk7CiAgICB9IGVsc2UgewogICAgICBfc29ja2V0LmNsb3NlKCk7CiAgICB9CiAgfQoKICB2b2lkIF9vblBhdXNlU3RhdGVDaGFuZ2UoKSB7CiAgICBpZiAoX2NvbnRyb2xsZXIuaXNQYXVzZWQpIHsKICAgICAgX3BhdXNlKCk7CiAgICB9IGVsc2UgewogICAgICBfcmVzdW1lKCk7CiAgICB9CiAgfQoKICB2b2lkIHNldCBfb3duZXIob3duZXIpIHsKICAgIF9zb2NrZXQub3duZXIgPSBvd25lcjsKICB9Cn0KCmNsYXNzIF9SYXdTb2NrZXQgZXh0ZW5kcyBTdHJlYW08UmF3U29ja2V0RXZlbnQ+IGltcGxlbWVudHMgUmF3U29ja2V0IHsKICBmaW5hbCBfTmF0aXZlU29ja2V0IF9zb2NrZXQ7CiAgU3RyZWFtQ29udHJvbGxlcjxSYXdTb2NrZXRFdmVudD4gX2NvbnRyb2xsZXI7CiAgYm9vbCBfcmVhZEV2ZW50c0VuYWJsZWQgPSB0cnVlOwogIGJvb2wgX3dyaXRlRXZlbnRzRW5hYmxlZCA9IHRydWU7CgogIC8vIEZsYWcgdG8gaGFuZGxlIEN0cmwtRCBjbG9zaW5nIG9mIHN0ZGlvIG9uIE1hYyBPUy4KICBib29sIF9pc01hY09TVGVybWluYWxJbnB1dCA9IGZhbHNlOwoKICBzdGF0aWMgRnV0dXJlPFJhd1NvY2tldD4gY29ubmVjdCgKICAgICAgaG9zdCwgaW50IHBvcnQsIHNvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXQpIHsKICAgIHJldHVybiBfTmF0aXZlU29ja2V0LmNvbm5lY3QoaG9zdCwgcG9ydCwgc291cmNlQWRkcmVzcywgdGltZW91dCkKICAgICAgICAudGhlbigoc29ja2V0KSA9PiBuZXcgX1Jhd1NvY2tldChzb2NrZXQpKTsKICB9CgogIHN0YXRpYyBGdXR1cmU8Q29ubmVjdGlvblRhc2s8X1Jhd1NvY2tldD4+IHN0YXJ0Q29ubmVjdCgKICAgICAgaG9zdCwgaW50IHBvcnQsIHNvdXJjZUFkZHJlc3MpIHsKICAgIHJldHVybiBfTmF0aXZlU29ja2V0LnN0YXJ0Q29ubmVjdChob3N0LCBwb3J0LCBzb3VyY2VBZGRyZXNzKQogICAgICAgIC50aGVuKChDb25uZWN0aW9uVGFzazxfTmF0aXZlU29ja2V0PiBuYXRpdmVUYXNrKSB7CiAgICAgIGZpbmFsIEZ1dHVyZTxfUmF3U29ja2V0PiByYXcgPSBuYXRpdmVUYXNrLnNvY2tldAogICAgICAgICAgLnRoZW4oKF9OYXRpdmVTb2NrZXQgbmF0aXZlU29ja2V0KSA9PiBuZXcgX1Jhd1NvY2tldChuYXRpdmVTb2NrZXQpKTsKICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uVGFzazxfUmF3U29ja2V0Pi5fKAogICAgICAgICAgc29ja2V0OiByYXcsIG9uQ2FuY2VsOiBuYXRpdmVUYXNrLl9vbkNhbmNlbCk7CiAgICB9KTsKICB9CgogIF9SYXdTb2NrZXQodGhpcy5fc29ja2V0KSB7CiAgICB2YXIgem9uZSA9IFpvbmUuY3VycmVudDsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXIoCiAgICAgICAgc3luYzogdHJ1ZSwKICAgICAgICBvbkxpc3RlbjogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UsCiAgICAgICAgb25DYW5jZWw6IF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlLAogICAgICAgIG9uUGF1c2U6IF9vblBhdXNlU3RhdGVDaGFuZ2UsCiAgICAgICAgb25SZXN1bWU6IF9vblBhdXNlU3RhdGVDaGFuZ2UpOwogICAgX3NvY2tldC5zZXRIYW5kbGVycygKICAgICAgICByZWFkOiAoKSA9PiBfY29udHJvbGxlci5hZGQoUmF3U29ja2V0RXZlbnQucmVhZCksCiAgICAgICAgd3JpdGU6ICgpIHsKICAgICAgICAgIC8vIFRoZSB3cml0ZSBldmVudCBoYW5kbGVyIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgYnkgdGhlCiAgICAgICAgICAvLyBldmVudCBoYW5kbGVyIHdoZW4gaXQgZmlyZXMuCiAgICAgICAgICB3cml0ZUV2ZW50c0VuYWJsZWQgPSBmYWxzZTsKICAgICAgICAgIF9jb250cm9sbGVyLmFkZChSYXdTb2NrZXRFdmVudC53cml0ZSk7CiAgICAgICAgfSwKICAgICAgICBjbG9zZWQ6ICgpID0+IF9jb250cm9sbGVyLmFkZChSYXdTb2NrZXRFdmVudC5yZWFkQ2xvc2VkKSwKICAgICAgICBkZXN0cm95ZWQ6ICgpIHsKICAgICAgICAgIF9jb250cm9sbGVyLmFkZChSYXdTb2NrZXRFdmVudC5jbG9zZWQpOwogICAgICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgICB9LAogICAgICAgIGVycm9yOiB6b25lLmJpbmRVbmFyeUNhbGxiYWNrR3VhcmRlZCgoZSkgewogICAgICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZSk7CiAgICAgICAgICBfc29ja2V0LmNsb3NlKCk7CiAgICAgICAgfSkpOwogIH0KCiAgZmFjdG9yeSBfUmF3U29ja2V0Ll93cml0ZVBpcGUoKSB7CiAgICB2YXIgbmF0aXZlID0gbmV3IF9OYXRpdmVTb2NrZXQucGlwZSgpOwogICAgbmF0aXZlLmlzQ2xvc2VkUmVhZCA9IHRydWU7CiAgICBuYXRpdmUuY2xvc2VkUmVhZEV2ZW50U2VudCA9IHRydWU7CiAgICByZXR1cm4gbmV3IF9SYXdTb2NrZXQobmF0aXZlKTsKICB9CgogIGZhY3RvcnkgX1Jhd1NvY2tldC5fcmVhZFBpcGUoaW50IGZkKSB7CiAgICB2YXIgbmF0aXZlID0gbmV3IF9OYXRpdmVTb2NrZXQucGlwZSgpOwogICAgbmF0aXZlLmlzQ2xvc2VkV3JpdGUgPSB0cnVlOwogICAgaWYgKGZkICE9IG51bGwpIF9nZXRTdGRpb0hhbmRsZShuYXRpdmUsIGZkKTsKICAgIHZhciByZXN1bHQgPSBuZXcgX1Jhd1NvY2tldChuYXRpdmUpOwogICAgaWYgKGZkICE9IG51bGwpIHsKICAgICAgdmFyIHNvY2tldFR5cGUgPSBfU3RkSU9VdGlscy5fbmF0aXZlU29ja2V0VHlwZShyZXN1bHQuX3NvY2tldCk7CiAgICAgIHJlc3VsdC5faXNNYWNPU1Rlcm1pbmFsSW5wdXQgPQogICAgICAgICAgUGxhdGZvcm0uaXNNYWNPUyAmJiBzb2NrZXRUeXBlID09IF9zdGRpb0hhbmRsZVR5cGVUZXJtaW5hbDsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJlYW1TdWJzY3JpcHRpb248UmF3U29ja2V0RXZlbnQ+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+IF9jb250cm9sbGVyLmFkZChSYXdTb2NrZXRFdmVudC5yZWFkKSwKICAgICAgICB3cml0ZTogKCkgewogICAgICAgICAgLy8gVGhlIHdyaXRlIGV2ZW50IGhhbmRsZXIgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCBieSB0aGUKICAgICAgICAgIC8vIGV2ZW50IGhhbmRsZXIgd2hlbiBpdCBmaXJlcy4KICAgICAgICAgIHdyaXRlRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgICAgICAgX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LndyaXRlKTsKICAgICAgICB9LAogICAgICAgIGNsb3NlZDogKCkgPT4gX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWQpLAogICAgICAgIGRlc3Ryb3llZDogKCkgewogICAgICAgICAgX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LmNsb3NlZCk7CiAgICAgICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICAgIH0sCiAgICAgICAgZXJyb3I6IHpvbmUuYmluZFVuYXJ5Q2FsbGJhY2tHdWFyZGVkKChlKSB7CiAgICAgICAgICBfY29udHJvbGxlci5hZGRFcnJvcihlKTsKICAgICAgICAgIF9zb2NrZXQuY2xvc2UoKTsKICAgICAgICB9KSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPFJhd0RhdGFncmFtU29ja2V0PiBiaW5kKAogICAgICBob3N0LCBpbnQgcG9ydCwgYm9vbCByZXVzZUFkZHJlc3MsIGJvb2wgcmV1c2VQb3J0LCBpbnQgdHRsKSB7CiAgICBfdGhyb3dPbkJhZFBvcnQocG9ydCk7CiAgICBfdGhyb3dPbkJhZFR0bCh0dGwpOwogICAgcmV0dXJuIF9OYXRpdmVTb2NrZXQuYmluZERhdGFncmFtKGhvc3QsIHBvcnQsIHJldXNlQWRkcmVzcywgcmV1c2VQb3J0LCB0dGwpCiAgICAgICAgLnRoZW4oKHNvY2tldCkgPT4gbmV3IF9SYXdEYXRhZ3JhbVNvY2tldChzb2NrZXQpKTsKICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxSYXdTb2NrZXRFdmVudD4gbGlzdGVuKHZvaWQgb25EYXRhKFJhd1NvY2tldEV2ZW50IGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfY29udHJvbGxlci5zdHJlYW0ubGlzdGVuKG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLCBvbkRvbmU6IG9uRG9uZSwgY2FuY2VsT25FcnJvcjogY2FuY2VsT25FcnJvcik7CiAgfQoKICBGdXR1cmUgY2xvc2UoKSA9PiBfc29ja2V0LmNsb3NlKCkudGhlbjxSYXdEYXRhZ3JhbVNvY2tldD4oKF8pID0+IHRoaXMpOwoKICBpbnQgc2VuZChMaXN0PGludD4gYnVmZmVyLCBJbnRlcm5ldEFkZHJlc3MgYWRkcmVzcywgaW50IHBvcnQpID0+CiAgICAgIF9zb2NrZXQuc2VuZChidWZmZXIsIDAsIGJ1ZmZlci5sZW5ndGgsIGFkZHJlc3MsIHBvcnQpOwoKICBEYXRhZ3JhbSByZWNlaXZlKCkgewogICAgcmV0dXJuIF9zb2NrZXQucmVjZWl2ZSgpOwogIH0KCiAgdm9pZCBqb2luTXVsdGljYXN0KEludGVybmV0QWRkcmVzcyBncm91cCwgW05ldHdvcmtJbnRlcmZhY2UgaW50ZXJmYWNlXSkgewogICAgX3NvY2tldC5qb2luTXVsdGljYXN0KGdyb3VwLCBpbnRlcmZhY2UpOwogIH0KCiAgdm9pZCBsZWF2ZU11bHRpY2FzdChJbnRlcm5ldEFkZHJlc3MgZ3JvdXAsIFtOZXR3b3JrSW50ZXJmYWNlIGludGVyZmFjZV0pIHsKICAgIF9zb2NrZXQubGVhdmVNdWx0aWNhc3QoZ3JvdXAsIGludGVyZmFjZSk7CiAgfQoKICBib29sIGdldCByZWFkRXZlbnRzRW5hYmxlZCA9PiBfcmVhZEV2ZW50c0VuYWJsZWQ7CiAgdm9pZCBzZXQgcmVhZEV2ZW50c0VuYWJsZWQoYm9vbCB2YWx1ZSkgewogICAgaWYgKHZhbHVlICE9IF9yZWFkRXZlbnRzRW5hYmxlZCkgewogICAgICBfcmVhZEV2ZW50c0VuYWJsZWQgPSB2YWx1ZTsKICAgICAgaWYgKCFfY29udHJvbGxlci5pc1BhdXNlZCkgX3Jlc3VtZSgpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgd3JpdGVFdmVudHNFbmFibGVkID0+IF93cml0ZUV2ZW50c0VuYWJsZWQ7CiAgdm9pZCBzZXQgd3JpdGVFdmVudHNFbmFibGVkKGJvb2wgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSAhPSBfd3JpdGVFdmVudHNFbmFibGVkKSB7CiAgICAgIF93cml0ZUV2ZW50c0VuYWJsZWQgPSB2YWx1ZTsKICAgICAgaWYgKCFfY29udHJvbGxlci5pc1BhdXNlZCkgX3Jlc3VtZSgpOwogICAgfQogIH0KCiAgYm9vbCBnZXQgbXVsdGljYXN0TG9vcGJhY2sgPT4KICAgICAgX3NvY2tldC5nZXRPcHRpb24oU29ja2V0T3B0aW9uLl9pcE11bHRpY2FzdExvb3ApOwogIHZvaWQgc2V0IG11bHRpY2FzdExvb3BiYWNrKGJvb2wgdmFsdWUpID0+CiAgICAgIF9zb2NrZXQuc2V0T3B0aW9uKFNvY2tldE9wdGlvbi5faXBNdWx0aWNhc3RMb29wLCB2YWx1ZSk7CgogIGludCBnZXQgbXVsdGljYXN0SG9wcyA9PiBfc29ja2V0LmdldE9wdGlvbihTb2NrZXRPcHRpb24uX2lwTXVsdGljYXN0SG9wcyk7CiAgdm9pZCBzZXQgbXVsdGljYXN0SG9wcyhpbnQgdmFsdWUpID0+CiAgICAgIF9zb2NrZXQuc2V0T3B0aW9uKFNvY2tldE9wdGlvbi5faXBNdWx0aWNhc3RIb3BzLCB2YWx1ZSk7CgogIE5ldHdvcmtJbnRlcmZhY2UgZ2V0IG11bHRpY2FzdEludGVyZmFjZSA9PiB0aHJvdyAiTm90IGltcGxlbWVudGVkIjsKICB2b2lkIHNldCBtdWx0aWNhc3RJbnRlcmZhY2UoTmV0d29ya0ludGVyZmFjZSB2YWx1ZSkgPT4KICAgICAgdGhyb3cgIk5vdCBpbXBsZW1lbnRlZCI7CgogIGJvb2wgZ2V0IGJyb2FkY2FzdEVuYWJsZWQgPT4gX3NvY2tldC5nZXRPcHRpb24oU29ja2V0T3B0aW9uLl9pcEJyb2FkY2FzdCk7CiAgdm9pZCBzZXQgYnJvYWRjYXN0RW5hYmxlZChib29sIHZhbHVlKSA9PgogICAgICBfc29ja2V0LnNldE9wdGlvbihTb2NrZXRPcHRpb24uX2lwQnJvYWRjYXN0LCB2YWx1ZSk7CgogIGludCBnZXQgcG9ydCA9PiBfc29ja2V0LnBvcnQ7CgogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzcyA9PiBfc29ja2V0LmFkZHJlc3M7CgogIF9wYXVzZSgpIHsKICAgIF9zb2NrZXQuc2V0TGlzdGVuaW5nKHJlYWQ6IGZhbHNlLCB3cml0ZTogZmFsc2UpOwogIH0KCiAgdm9pZCBfcmVzdW1lKCkgewogICAgX3NvY2tldC5zZXRMaXN0ZW5pbmcocmVhZDogX3JlYWRFdmVudHNFbmFibGVkLCB3cml0ZTogX3dyaXRlRXZlbnRzRW5hYmxlZCk7CiAgfQoKICB2b2lkIF9vblBhdXNlU3RhdGVDaGFuZ2UoKSB7CiAgICBpZiAoX2NvbnRyb2xsZXIuaXNQYXVzZWQpIHsKICAgICAgX3BhdXNlKCk7CiAgICB9IGVsc2UgewogICAgICBfcmVzdW1lKCk7CiAgICB9CiAgfQoKICB2b2lkIF9vblN1YnNjcmlwdGlvblN0YXRlQ2hhbmdlKCkgewogICAgaWYgKF9jb250cm9sbGVyLmhhc0xpc3RlbmVyKSB7CiAgICAgIF9yZXN1bWUoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9zb2NrZXQuY2xvc2UoKTsKICAgIH0KICB9CgogIFVpbnQ4TGlzdCBnZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbikgPT4KICAgICAgX3NvY2tldC5nZXRSYXdPcHRpb24ob3B0aW9uKTsKICB2b2lkIHNldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKSA9PiBfc29ja2V0LnNldFJhd09wdGlvbihvcHRpb24pOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKRGF0YWdyYW0gX21ha2VEYXRhZ3JhbSgKICAgIFVpbnQ4TGlzdCBkYXRhLCBTdHJpbmcgYWRkcmVzcywgVWludDhMaXN0IGluX2FkZHIsIGludCBwb3J0KSB7CiAgcmV0dXJuIG5ldyBEYXRhZ3JhbShkYXRhLCBuZXcgX0ludGVybmV0QWRkcmVzcyhhZGRyZXNzLCBudWxsLCBpbl9hZGRyKSwgcG9ydCk7Cn0Kh9EATk48ASABBxgJOUJKBAIBBxIJMytDBAEJSBk/BAIBBxgpMgEJKDEtBjcfBAEsLwIBBxgJLioEAQkuKgQBCSklBAEJKSUEAQksMAQBCTs9MwQBCSwuQgQCAQcZCSIdBAEJLiQkPCkqLBUEAUgCASE5MwQCAR8tMQQCATQtLSgoKCkBKTgpOFFRARgWHAFFISIBNgFAARgUJSMBJTguCjMGBAEZFCUoOQElI0QGBAEZFCU7OAElIiQGBAFKAT0BMx5EBiMbRAY5BAErEiE2GipB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by1wYXRjaC9zb2NrZXRfcGF0Y2guZGFydDJvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vc2VydmljZV9vYmplY3QuZGFydILqLy8gQ29weXJpZ2h0IChjKSAyMDE0LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCmludCBfbmV4dFNlcnZpY2VJZCA9IDE7CgovLyBUT0RPKGFqb2huc2VuKTogVXNlIG90aGVyIHdheSBvZiBnZXR0aW5nIGEgdW5pcXVlIGlkLgphYnN0cmFjdCBjbGFzcyBfU2VydmljZU9iamVjdCB7CiAgaW50IF9fc2VydmljZUlkID0gMDsKICBpbnQgZ2V0IF9zZXJ2aWNlSWQgewogICAgaWYgKF9fc2VydmljZUlkID09IDApIF9fc2VydmljZUlkID0gX25leHRTZXJ2aWNlSWQrKzsKICAgIHJldHVybiBfX3NlcnZpY2VJZDsKICB9CgogIE1hcCBfdG9KU09OKGJvb2wgcmVmKTsKCiAgU3RyaW5nIGdldCBfc2VydmljZVBhdGggPT4gIiRfc2VydmljZVR5cGVQYXRoLyRfc2VydmljZUlkIjsKCiAgU3RyaW5nIGdldCBfc2VydmljZVR5cGVQYXRoOwoKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlVHlwZU5hbWU7CgogIFN0cmluZyBfc2VydmljZVR5cGUoYm9vbCByZWYpIHsKICAgIGlmIChyZWYpIHJldHVybiAiQCRfc2VydmljZVR5cGVOYW1lIjsKICAgIHJldHVybiBfc2VydmljZVR5cGVOYW1lOwogIH0KfQofAE5OPAERARgBOSAXFzoYBAEZAT4BHwEfASIqHQQCARtkYXJ0OmlvL3NlcnZpY2Vfb2JqZWN0LmRhcnQ4b3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2Jpbi9zZWN1cmVfc29ja2V0X3BhdGNoLmRhcnSdsS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb21tb25fcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgU2VjdXJlU29ja2V0IHsKICBAcGF0Y2gKICBmYWN0b3J5IFNlY3VyZVNvY2tldC5fKFJhd1NlY3VyZVNvY2tldCByYXdTb2NrZXQpID0+CiAgICAgIG5ldyBfU2VjdXJlU29ja2V0KHJhd1NvY2tldCk7Cn0KCkBwYXRjaApjbGFzcyBfU2VjdXJlRmlsdGVyIHsKICBAcGF0Y2gKICBmYWN0b3J5IF9TZWN1cmVGaWx0ZXIuXygpID0+IG5ldyBfU2VjdXJlRmlsdGVySW1wbC5fKCk7Cn0KCkBwYXRjaApAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIFg1MDlDZXJ0aWZpY2F0ZSB7CiAgQHBhdGNoCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGZhY3RvcnkgWDUwOUNlcnRpZmljYXRlLl8oKSA9PiBuZXcgX1g1MDlDZXJ0aWZpY2F0ZUltcGwuXygpOwp9CgpjbGFzcyBfU2VjdXJlU29ja2V0IGV4dGVuZHMgX1NvY2tldCBpbXBsZW1lbnRzIFNlY3VyZVNvY2tldCB7CiAgX1Jhd1NlY3VyZVNvY2tldCBnZXQgX3JhdyA9PiBzdXBlci5fcmF3IGFzIF9SYXdTZWN1cmVTb2NrZXQ7CgogIF9TZWN1cmVTb2NrZXQoUmF3U2VjdXJlU29ja2V0IHJhdykgOiBzdXBlcihyYXcpOwoKICB2b2lkIHJlbmVnb3RpYXRlKAogICAgICB7Ym9vbCB1c2VTZXNzaW9uQ2FjaGU6IHRydWUsCiAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlfSkgewogICAgX3Jhdy5yZW5lZ290aWF0ZSgKICAgICAgICB1c2VTZXNzaW9uQ2FjaGU6IHVzZVNlc3Npb25DYWNoZSwKICAgICAgICByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSk7CiAgfQoKICBYNTA5Q2VydGlmaWNhdGUgZ2V0IHBlZXJDZXJ0aWZpY2F0ZSB7CiAgICBpZiAoX3JhdyA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJwZWVyQ2VydGlmaWNhdGUgY2FsbGVkIG9uIGRlc3Ryb3llZCBTZWN1cmVTb2NrZXQiKTsKICAgIH0KICAgIHJldHVybiBfcmF3LnBlZXJDZXJ0aWZpY2F0ZTsKICB9CgogIFN0cmluZyBnZXQgc2VsZWN0ZWRQcm90b2NvbCB7CiAgICBpZiAoX3JhdyA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJzZWxlY3RlZFByb3RvY29sIGNhbGxlZCBvbiBkZXN0cm95ZWQgU2VjdXJlU29ja2V0Iik7CiAgICB9CiAgICByZXR1cm4gX3Jhdy5zZWxlY3RlZFByb3RvY29sOwogIH0KfQoKLyoqCiAqIF9TZWN1cmVGaWx0ZXJJbXBsIHdyYXBzIGEgZmlsdGVyIHRoYXQgZW5jcnlwdHMgYW5kIGRlY3J5cHRzIGRhdGEgdHJhdmVsbGluZwogKiBvdmVyIGFuIGVuY3J5cHRlZCBzb2NrZXQuICBUaGUgZmlsdGVyIGFsc28gaGFuZGxlcyB0aGUgaGFuZHNoYWtpbmcKICogYW5kIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbi4KICoKICogVGhlIGZpbHRlciBleHBvc2VzIGl0cyBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgYXMgRGFydCBvYmplY3RzIHRoYXQKICogYXJlIGJhY2tlZCBieSBhbiBleHRlcm5hbCBDIGFycmF5IG9mIGJ5dGVzLCBzbyB0aGF0IGJvdGggRGFydCBjb2RlIGFuZAogKiBuYXRpdmUgY29kZSBjYW4gYWNjZXNzIHRoZSBzYW1lIGRhdGEuCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9TZWN1cmVGaWx0ZXJJbXBsIGV4dGVuZHMgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MxCiAgICBpbXBsZW1lbnRzIF9TZWN1cmVGaWx0ZXIgewogIC8vIFBlcmZvcm1hbmNlIGlzIGltcHJvdmVkIGlmIGEgZnVsbCBidWZmZXIgb2YgcGxhaW50ZXh0IGZpdHMKICAvLyBpbiB0aGUgZW5jcnlwdGVkIGJ1ZmZlciwgd2hlbiBlbmNyeXB0ZWQuCiAgLy8gU0laRSBhbmQgRU5DUllQVEVEX1NJWkUgYXJlIHJlZmVyZW5jZWQgZnJvbSBDKysuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHN0YXRpYyBmaW5hbCBpbnQgU0laRSA9IDggKiAxMDI0OwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBzdGF0aWMgZmluYWwgaW50IEVOQ1JZUFRFRF9TSVpFID0gMTAgKiAxMDI0OwoKICBfU2VjdXJlRmlsdGVySW1wbC5fKCkgewogICAgYnVmZmVycyA9IG5ldyBMaXN0PF9FeHRlcm5hbEJ1ZmZlcj4oX1Jhd1NlY3VyZVNvY2tldC5idWZmZXJDb3VudCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9SYXdTZWN1cmVTb2NrZXQuYnVmZmVyQ291bnQ7ICsraSkgewogICAgICBidWZmZXJzW2ldID0gbmV3IF9FeHRlcm5hbEJ1ZmZlcigKICAgICAgICAgIF9SYXdTZWN1cmVTb2NrZXQuX2lzQnVmZmVyRW5jcnlwdGVkKGkpID8gRU5DUllQVEVEX1NJWkUgOiBTSVpFKTsKICAgIH0KICB9CgogIHZvaWQgY29ubmVjdCgKICAgICAgU3RyaW5nIGhvc3ROYW1lLAogICAgICBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAgYm9vbCBpc19zZXJ2ZXIsCiAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgVWludDhMaXN0IHByb3RvY29scykgbmF0aXZlICJTZWN1cmVTb2NrZXRfQ29ubmVjdCI7CgogIHZvaWQgZGVzdHJveSgpIHsKICAgIGJ1ZmZlcnMgPSBudWxsOwogICAgX2Rlc3Ryb3koKTsKICB9CgogIHZvaWQgX2Rlc3Ryb3koKSBuYXRpdmUgIlNlY3VyZVNvY2tldF9EZXN0cm95IjsKCiAgdm9pZCBoYW5kc2hha2UoKSBuYXRpdmUgIlNlY3VyZVNvY2tldF9IYW5kc2hha2UiOwoKICB2b2lkIHJlaGFuZHNoYWtlKCkgPT4gdGhyb3cgbmV3IFVuaW1wbGVtZW50ZWRFcnJvcigpOwoKICBpbnQgcHJvY2Vzc0J1ZmZlcihpbnQgYnVmZmVySW5kZXgpID0+IHRocm93IG5ldyBVbmltcGxlbWVudGVkRXJyb3IoKTsKCiAgU3RyaW5nIHNlbGVjdGVkUHJvdG9jb2woKSBuYXRpdmUgIlNlY3VyZVNvY2tldF9HZXRTZWxlY3RlZFByb3RvY29sIjsKCiAgdm9pZCByZW5lZ290aWF0ZShib29sIHVzZVNlc3Npb25DYWNoZSwgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlKSBuYXRpdmUgIlNlY3VyZVNvY2tldF9SZW5lZ290aWF0ZSI7CgogIHZvaWQgaW5pdCgpIG5hdGl2ZSAiU2VjdXJlU29ja2V0X0luaXQiOwoKICBYNTA5Q2VydGlmaWNhdGUgZ2V0IHBlZXJDZXJ0aWZpY2F0ZSBuYXRpdmUgIlNlY3VyZVNvY2tldF9QZWVyQ2VydGlmaWNhdGUiOwoKICB2b2lkIHJlZ2lzdGVyQmFkQ2VydGlmaWNhdGVDYWxsYmFjayhGdW5jdGlvbiBjYWxsYmFjaykKICAgICAgbmF0aXZlICJTZWN1cmVTb2NrZXRfUmVnaXN0ZXJCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrIjsKCiAgdm9pZCByZWdpc3RlckhhbmRzaGFrZUNvbXBsZXRlQ2FsbGJhY2soRnVuY3Rpb24gaGFuZHNoYWtlQ29tcGxldGVIYW5kbGVyKQogICAgICBuYXRpdmUgIlNlY3VyZVNvY2tldF9SZWdpc3RlckhhbmRzaGFrZUNvbXBsZXRlQ2FsbGJhY2siOwoKICAvLyBUaGlzIGlzIGEgc2VjdXJpdHkgaXNzdWUsIGFzIGl0IGV4cG9zZXMgYSByYXcgcG9pbnRlciB0byBEYXJ0IGNvZGUuCiAgaW50IF9wb2ludGVyKCkgbmF0aXZlICJTZWN1cmVTb2NrZXRfRmlsdGVyUG9pbnRlciI7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImdldCIpCiAgTGlzdDxfRXh0ZXJuYWxCdWZmZXI+IGJ1ZmZlcnM7Cn0KCkBwYXRjaApjbGFzcyBTZWN1cml0eUNvbnRleHQgewogIEBwYXRjaAogIGZhY3RvcnkgU2VjdXJpdHlDb250ZXh0KHtib29sIHdpdGhUcnVzdGVkUm9vdHM6IGZhbHNlfSkgewogICAgcmV0dXJuIG5ldyBfU2VjdXJpdHlDb250ZXh0KHdpdGhUcnVzdGVkUm9vdHMpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIFNlY3VyaXR5Q29udGV4dCBnZXQgZGVmYXVsdENvbnRleHQgewogICAgcmV0dXJuIF9TZWN1cml0eUNvbnRleHQuZGVmYXVsdENvbnRleHQ7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgYm9vbCBnZXQgYWxwblN1cHBvcnRlZCA9PiB0cnVlOwp9CgpjbGFzcyBfU2VjdXJpdHlDb250ZXh0IGV4dGVuZHMgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MxCiAgICBpbXBsZW1lbnRzIFNlY3VyaXR5Q29udGV4dCB7CiAgX1NlY3VyaXR5Q29udGV4dChib29sIHdpdGhUcnVzdGVkUm9vdHMpIHsKICAgIF9jcmVhdGVOYXRpdmVDb250ZXh0KCk7CiAgICBpZiAod2l0aFRydXN0ZWRSb290cykgewogICAgICBfdHJ1c3RCdWlsdGluUm9vdHMoKTsKICAgIH0KICB9CgogIHZvaWQgX2NyZWF0ZU5hdGl2ZUNvbnRleHQoKSBuYXRpdmUgIlNlY3VyaXR5Q29udGV4dF9BbGxvY2F0ZSI7CgogIHN0YXRpYyBmaW5hbCBTZWN1cml0eUNvbnRleHQgZGVmYXVsdENvbnRleHQgPSBuZXcgX1NlY3VyaXR5Q29udGV4dCh0cnVlKTsKCiAgdm9pZCB1c2VQcml2YXRlS2V5KFN0cmluZyBmaWxlLCB7U3RyaW5nIHBhc3N3b3JkfSkgewogICAgTGlzdDxpbnQ+IGJ5dGVzID0gKG5ldyBGaWxlKGZpbGUpKS5yZWFkQXNCeXRlc1N5bmMoKTsKICAgIHVzZVByaXZhdGVLZXlCeXRlcyhieXRlcywgcGFzc3dvcmQ6IHBhc3N3b3JkKTsKICB9CgogIHZvaWQgdXNlUHJpdmF0ZUtleUJ5dGVzKExpc3Q8aW50PiBrZXlCeXRlcywge1N0cmluZyBwYXNzd29yZH0pCiAgICAgIG5hdGl2ZSAiU2VjdXJpdHlDb250ZXh0X1VzZVByaXZhdGVLZXlCeXRlcyI7CgogIHZvaWQgc2V0VHJ1c3RlZENlcnRpZmljYXRlcyhTdHJpbmcgZmlsZSwge1N0cmluZyBwYXNzd29yZH0pIHsKICAgIExpc3Q8aW50PiBieXRlcyA9IChuZXcgRmlsZShmaWxlKSkucmVhZEFzQnl0ZXNTeW5jKCk7CiAgICBzZXRUcnVzdGVkQ2VydGlmaWNhdGVzQnl0ZXMoYnl0ZXMsIHBhc3N3b3JkOiBwYXNzd29yZCk7CiAgfQoKICB2b2lkIHNldFRydXN0ZWRDZXJ0aWZpY2F0ZXNCeXRlcyhMaXN0PGludD4gY2VydEJ5dGVzLCB7U3RyaW5nIHBhc3N3b3JkfSkKICAgICAgbmF0aXZlICJTZWN1cml0eUNvbnRleHRfU2V0VHJ1c3RlZENlcnRpZmljYXRlc0J5dGVzIjsKCiAgdm9pZCB1c2VDZXJ0aWZpY2F0ZUNoYWluKFN0cmluZyBmaWxlLCB7U3RyaW5nIHBhc3N3b3JkfSkgewogICAgTGlzdDxpbnQ+IGJ5dGVzID0gKG5ldyBGaWxlKGZpbGUpKS5yZWFkQXNCeXRlc1N5bmMoKTsKICAgIHVzZUNlcnRpZmljYXRlQ2hhaW5CeXRlcyhieXRlcywgcGFzc3dvcmQ6IHBhc3N3b3JkKTsKICB9CgogIHZvaWQgdXNlQ2VydGlmaWNhdGVDaGFpbkJ5dGVzKExpc3Q8aW50PiBjaGFpbkJ5dGVzLCB7U3RyaW5nIHBhc3N3b3JkfSkKICAgICAgbmF0aXZlICJTZWN1cml0eUNvbnRleHRfVXNlQ2VydGlmaWNhdGVDaGFpbkJ5dGVzIjsKCiAgdm9pZCBzZXRDbGllbnRBdXRob3JpdGllcyhTdHJpbmcgZmlsZSwge1N0cmluZyBwYXNzd29yZH0pIHsKICAgIExpc3Q8aW50PiBieXRlcyA9IChuZXcgRmlsZShmaWxlKSkucmVhZEFzQnl0ZXNTeW5jKCk7CiAgICBzZXRDbGllbnRBdXRob3JpdGllc0J5dGVzKGJ5dGVzLCBwYXNzd29yZDogcGFzc3dvcmQpOwogIH0KCiAgdm9pZCBzZXRDbGllbnRBdXRob3JpdGllc0J5dGVzKExpc3Q8aW50PiBhdXRoQ2VydEJ5dGVzLCB7U3RyaW5nIHBhc3N3b3JkfSkKICAgICAgbmF0aXZlICJTZWN1cml0eUNvbnRleHRfU2V0Q2xpZW50QXV0aG9yaXRpZXNCeXRlcyI7CgogIHZvaWQgc2V0QWxwblByb3RvY29scyhMaXN0PFN0cmluZz4gcHJvdG9jb2xzLCBib29sIGlzU2VydmVyKSB7CiAgICBVaW50OExpc3QgZW5jb2RlZFByb3RvY29scyA9CiAgICAgICAgU2VjdXJpdHlDb250ZXh0Ll9wcm90b2NvbHNUb0xlbmd0aEVuY29kaW5nKHByb3RvY29scyk7CiAgICBfc2V0QWxwblByb3RvY29scyhlbmNvZGVkUHJvdG9jb2xzLCBpc1NlcnZlcik7CiAgfQoKICB2b2lkIF9zZXRBbHBuUHJvdG9jb2xzKFVpbnQ4TGlzdCBwcm90b2NvbHMsIGJvb2wgaXNTZXJ2ZXIpCiAgICAgIG5hdGl2ZSAiU2VjdXJpdHlDb250ZXh0X1NldEFscG5Qcm90b2NvbHMiOwogIHZvaWQgX3RydXN0QnVpbHRpblJvb3RzKCkgbmF0aXZlICJTZWN1cml0eUNvbnRleHRfVHJ1c3RCdWlsdGluUm9vdHMiOwp9CgovKioKICogX1g1MDlDZXJ0aWZpY2F0ZUltcGwgd3JhcHMgYW4gWDUwOSBjZXJ0aWZpY2F0ZSBvYmplY3QgaGVsZCBieSB0aGUgQm9yaW5nU1NMCiAqIGxpYnJhcnkuIEl0IGV4cG9zZXMgdGhlIGZpZWxkcyBvZiB0aGUgY2VydGlmaWNhdGUgb2JqZWN0LgogKi8KY2xhc3MgX1g1MDlDZXJ0aWZpY2F0ZUltcGwgZXh0ZW5kcyBOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczEKICAgIGltcGxlbWVudHMgWDUwOUNlcnRpZmljYXRlIHsKICAvLyBUaGUgbmF0aXZlIGZpZWxkIG11c3QgYmUgc2V0IG1hbnVhbGx5IG9uIGEgbmV3IG9iamVjdCwgaW4gbmF0aXZlIGNvZGUuCiAgLy8gVGhpcyBpcyBkb25lIGJ5IFdyYXBwZWRYNTA5IGluIHNlY3VyZV9zb2NrZXQuY2MuCiAgX1g1MDlDZXJ0aWZpY2F0ZUltcGwuXygpOwoKICBVaW50OExpc3QgX2NhY2hlZERlcjsKICBVaW50OExpc3QgZ2V0IF9kZXIgbmF0aXZlICJYNTA5X0RlciI7CiAgVWludDhMaXN0IGdldCBkZXIgewogICAgaWYgKF9jYWNoZWREZXIgPT0gbnVsbCkgewogICAgICBfY2FjaGVkRGVyID0gX2RlcjsKICAgIH0KICAgIHJldHVybiBfY2FjaGVkRGVyOwogIH0KCiAgU3RyaW5nIF9jYWNoZWRQZW07CiAgU3RyaW5nIGdldCBfcGVtIG5hdGl2ZSAiWDUwOV9QZW0iOwogIFN0cmluZyBnZXQgcGVtIHsKICAgIGlmIChfY2FjaGVkUGVtID09IG51bGwpIHsKICAgICAgX2NhY2hlZFBlbSA9IF9wZW07CiAgICB9CiAgICByZXR1cm4gX2NhY2hlZFBlbTsKICB9CgogIFVpbnQ4TGlzdCBfY2FjaGVkU2hhMTsKICBVaW50OExpc3QgZ2V0IF9zaGExIG5hdGl2ZSAiWDUwOV9TaGExIjsKICBVaW50OExpc3QgZ2V0IHNoYTEgewogICAgaWYgKF9jYWNoZWRTaGExID09IG51bGwpIHsKICAgICAgX2NhY2hlZFNoYTEgPSBfc2hhMTsKICAgIH0KICAgIHJldHVybiBfY2FjaGVkU2hhMTsKICB9CgogIFN0cmluZyBnZXQgc3ViamVjdCBuYXRpdmUgIlg1MDlfU3ViamVjdCI7CiAgU3RyaW5nIGdldCBpc3N1ZXIgbmF0aXZlICJYNTA5X0lzc3VlciI7CiAgRGF0ZVRpbWUgZ2V0IHN0YXJ0VmFsaWRpdHkgewogICAgcmV0dXJuIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChfc3RhcnRWYWxpZGl0eSgpLAogICAgICAgIGlzVXRjOiB0cnVlKTsKICB9CgogIERhdGVUaW1lIGdldCBlbmRWYWxpZGl0eSB7CiAgICByZXR1cm4gbmV3IERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKF9lbmRWYWxpZGl0eSgpLCBpc1V0YzogdHJ1ZSk7CiAgfQoKICBpbnQgX3N0YXJ0VmFsaWRpdHkoKSBuYXRpdmUgIlg1MDlfU3RhcnRWYWxpZGl0eSI7CiAgaW50IF9lbmRWYWxpZGl0eSgpIG5hdGl2ZSAiWDUwOV9FbmRWYWxpZGl0eSI7Cn0KgP0ATk48ASABBxUJNyQCAQcWCToCAQcaGAkcPwIBPj8BMwEUIywvFio8PQQBKBhQBiEEASAYUQYiBAIBBE9GIQNISikEGjkfQC42HCQcLwEaRz0oSwYEARAXHxYlJToBExQQBAExATQBOAFIAUcBSEgBKgFNATk8AUw/AUk2ASMhAgEHGAk8MwQBCS4sBAEJKQIBOCEsHBwcBgQBQQFMATc6MwQBQTMBQDo8BAFLPAE9OjkEAUk5AT46OgQBTToBQSE/MwQBPTFIAgEETz0EPCFMNhwBGCgWHhkGFwQBFSUTHhkGFwQBGSoXHxsGGAQBLCofRRYEAR1RBAE0MAIBJmRhcnQ6aW8tcGF0Y2gvc2VjdXJlX3NvY2tldF9wYXRjaC5kYXJ0Nm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9iaW4vc3luY19zb2NrZXRfcGF0Y2guZGFydKbiLy8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvbW1vbl9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBSYXdTeW5jaHJvbm91c1NvY2tldCB7CiAgQHBhdGNoCiAgc3RhdGljIFJhd1N5bmNocm9ub3VzU29ja2V0IGNvbm5lY3RTeW5jKGhvc3QsIGludCBwb3J0KSB7CiAgICByZXR1cm4gX1Jhd1N5bmNocm9ub3VzU29ja2V0LmNvbm5lY3RTeW5jKGhvc3QsIHBvcnQpOwogIH0KfQoKY2xhc3MgX1Jhd1N5bmNocm9ub3VzU29ja2V0IGltcGxlbWVudHMgUmF3U3luY2hyb25vdXNTb2NrZXQgewogIGZpbmFsIF9OYXRpdmVTeW5jaHJvbm91c1NvY2tldCBfc29ja2V0OwoKICBfUmF3U3luY2hyb25vdXNTb2NrZXQodGhpcy5fc29ja2V0KTsKCiAgc3RhdGljIFJhd1N5bmNocm9ub3VzU29ja2V0IGNvbm5lY3RTeW5jKGhvc3QsIGludCBwb3J0KSB7CiAgICBfdGhyb3dPbkJhZFBvcnQocG9ydCk7CiAgICByZXR1cm4gbmV3IF9SYXdTeW5jaHJvbm91c1NvY2tldCgKICAgICAgICBfTmF0aXZlU3luY2hyb25vdXNTb2NrZXQuY29ubmVjdFN5bmMoaG9zdCwgcG9ydCkpOwogIH0KCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzID0+IF9zb2NrZXQuYWRkcmVzczsKICBpbnQgZ2V0IHBvcnQgPT4gX3NvY2tldC5wb3J0OwogIEludGVybmV0QWRkcmVzcyBnZXQgcmVtb3RlQWRkcmVzcyA9PiBfc29ja2V0LnJlbW90ZUFkZHJlc3M7CiAgaW50IGdldCByZW1vdGVQb3J0ID0+IF9zb2NrZXQucmVtb3RlUG9ydDsKCiAgaW50IGF2YWlsYWJsZSgpID0+IF9zb2NrZXQuYXZhaWxhYmxlOwoKICB2b2lkIGNsb3NlU3luYygpID0+IF9zb2NrZXQuY2xvc2VTeW5jKCk7CgogIGludCByZWFkSW50b1N5bmMoTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSA9PgogICAgICBfc29ja2V0LnJlYWRJbnRvU3luYyhidWZmZXIsIHN0YXJ0LCBlbmQpOwoKICBMaXN0PGludD4gcmVhZFN5bmMoaW50IGJ5dGVzKSA9PiBfc29ja2V0LnJlYWRTeW5jKGJ5dGVzKTsKCiAgdm9pZCBzaHV0ZG93bihTb2NrZXREaXJlY3Rpb24gZGlyZWN0aW9uKSA9PiBfc29ja2V0LnNodXRkb3duKGRpcmVjdGlvbik7CgogIHZvaWQgd3JpdGVGcm9tU3luYyhMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pID0+CiAgICAgIF9zb2NrZXQud3JpdGVGcm9tU3luYyhidWZmZXIsIHN0YXJ0LCBlbmQpOwp9CgovLyBUaGUgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MxIGNhbiBub3QgYmUgdXNlZCB3aXRoIGEgbWl4aW4sIGR1ZSB0byBtaXNzaW5nCi8vIGltcGxpY2l0IGNvbnN0cnVjdG9yLgpjbGFzcyBfTmF0aXZlU3luY2hyb25vdXNTb2NrZXROYXRpdmVXcmFwcGVyIGV4dGVuZHMgTmF0aXZlRmllbGRXcmFwcGVyQ2xhc3MxIHt9CgovLyBUaGUgX05hdGl2ZVN5bmNocm9ub3VzU29ja2V0IGNsYXNzIGVuY2Fwc3VsYXRlcyBhIHN5bmNocm9ub3VzIE9TIHNvY2tldC4KY2xhc3MgX05hdGl2ZVN5bmNocm9ub3VzU29ja2V0IGV4dGVuZHMgX05hdGl2ZVN5bmNocm9ub3VzU29ja2V0TmF0aXZlV3JhcHBlciB7CiAgLy8gU29ja2V0IGNsb3NlIHN0YXRlLgogIGJvb2wgaXNDbG9zZWQgPSBmYWxzZTsKICBib29sIGlzQ2xvc2VkUmVhZCA9IGZhbHNlOwogIGJvb2wgaXNDbG9zZWRXcml0ZSA9IGZhbHNlOwoKICAvLyBIb2xkcyB0aGUgYWRkcmVzcyB1c2VkIHRvIGNvbm5lY3QgdGhlIHNvY2tldC4KICBJbnRlcm5ldEFkZHJlc3MgbG9jYWxBZGRyZXNzOwoKICAvLyBIb2xkcyB0aGUgcG9ydCBvZiB0aGUgc29ja2V0LCAwIGlmIG5vdCBrbm93bi4KICBpbnQgbG9jYWxQb3J0ID0gMDsKCiAgX1JlYWRXcml0ZVJlc291cmNlSW5mbyByZXNvdXJjZUluZm87CgogIHN0YXRpYyBfTmF0aXZlU3luY2hyb25vdXNTb2NrZXQgY29ubmVjdFN5bmMoaG9zdCwgaW50IHBvcnQpIHsKICAgIGlmIChob3N0ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlBhcmFtZXRlciBob3N0IGNhbm5vdCBiZSBudWxsIik7CiAgICB9CiAgICBMaXN0PF9JbnRlcm5ldEFkZHJlc3M+IGFkZHJlc3NlcyA9IG51bGw7CiAgICB2YXIgZXJyb3IgPSBudWxsOwogICAgaWYgKGhvc3QgaXMgX0ludGVybmV0QWRkcmVzcykgewogICAgICBhZGRyZXNzZXMgPSBbaG9zdF07CiAgICB9IGVsc2UgewogICAgICB0cnkgewogICAgICAgIGFkZHJlc3NlcyA9IGxvb2t1cChob3N0KTsKICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIGVycm9yID0gZTsKICAgICAgfQogICAgICBpZiAoZXJyb3IgIT0gbnVsbCB8fCBhZGRyZXNzZXMgPT0gbnVsbCB8fCBhZGRyZXNzZXMuaXNFbXB0eSkgewogICAgICAgIHRocm93IGNyZWF0ZUVycm9yKGVycm9yLCAiRmFpbGVkIGhvc3QgbG9va3VwOiAnJGhvc3QnIik7CiAgICAgIH0KICAgIH0KICAgIGFzc2VydChhZGRyZXNzZXMgaXMgTGlzdCk7CiAgICB2YXIgaXQgPSBhZGRyZXNzZXMuaXRlcmF0b3I7CiAgICBfTmF0aXZlU3luY2hyb25vdXNTb2NrZXQgY29ubmVjdE5leHQoKSB7CiAgICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICAgIC8vIENvdWxkIG5vdCBjb25uZWN0LiBUaHJvdyB0aGUgZmlyc3QgY29ubmVjdGlvbiBlcnJvciB3ZSBlbmNvdW50ZXJlZC4KICAgICAgICBhc3NlcnQoZXJyb3IgIT0gbnVsbCk7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgICAgdmFyIGFkZHJlc3MgPSBpdC5jdXJyZW50OwogICAgICB2YXIgc29ja2V0ID0gbmV3IF9OYXRpdmVTeW5jaHJvbm91c1NvY2tldCgpOwogICAgICBzb2NrZXQubG9jYWxBZGRyZXNzID0gYWRkcmVzczsKICAgICAgdmFyIHJlc3VsdCA9IHNvY2tldC5fbmF0aXZlQ3JlYXRlQ29ubmVjdFN5bmMoYWRkcmVzcy5faW5fYWRkciwgcG9ydCk7CiAgICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICAgIC8vIEtlZXAgZmlyc3QgZXJyb3IsIGlmIHByZXNlbnQuCiAgICAgICAgaWYgKGVycm9yID09IG51bGwpIHsKICAgICAgICAgIGVycm9yID0gY3JlYXRlRXJyb3IocmVzdWx0LCAiQ29ubmVjdGlvbiBmYWlsZWQiLCBhZGRyZXNzLCBwb3J0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvbm5lY3ROZXh0KCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gUXVlcnkgdGhlIGxvY2FsIHBvcnQsIGZvciBlcnJvciBtZXNzYWdlcy4KICAgICAgICB0cnkgewogICAgICAgICAgc29ja2V0LnBvcnQ7CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgaWYgKGVycm9yID09IG51bGwpIHsKICAgICAgICAgICAgZXJyb3IgPSBjcmVhdGVFcnJvcihlLCAiQ29ubmVjdGlvbiBmYWlsZWQiLCBhZGRyZXNzLCBwb3J0KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBjb25uZWN0TmV4dCgpOwogICAgICAgIH0KICAgICAgICBzZXR1cFJlc291cmNlSW5mbyhzb2NrZXQpOwogICAgICB9CiAgICAgIHJldHVybiBzb2NrZXQ7CiAgICB9CgogICAgcmV0dXJuIGNvbm5lY3ROZXh0KCk7CiAgfQoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3MgPT4gbG9jYWxBZGRyZXNzOwogIGludCBnZXQgYXZhaWxhYmxlID0+IF9uYXRpdmVBdmFpbGFibGUoKTsKCiAgaW50IGdldCBwb3J0IHsKICAgIGlmIChsb2NhbFBvcnQgIT0gMCkgewogICAgICByZXR1cm4gbG9jYWxQb3J0OwogICAgfQogICAgaWYgKGlzQ2xvc2VkKSB7CiAgICAgIHRocm93IGNvbnN0IFNvY2tldEV4Y2VwdGlvbi5jbG9zZWQoKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfbmF0aXZlR2V0UG9ydCgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBsb2NhbFBvcnQgPSByZXN1bHQ7CiAgfQoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IHJlbW90ZUFkZHJlc3MgewogICAgaWYgKGlzQ2xvc2VkKSB7CiAgICAgIHRocm93IGNvbnN0IFNvY2tldEV4Y2VwdGlvbi5jbG9zZWQoKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfbmF0aXZlR2V0UmVtb3RlUGVlcigpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IHJlc3VsdDsKICAgIH0KICAgIHZhciBhZGRyID0gcmVzdWx0WzBdOwogICAgcmV0dXJuIG5ldyBfSW50ZXJuZXRBZGRyZXNzKGFkZHJbMV0sIG51bGwsIGFkZHJbMl0pOwogIH0KCiAgaW50IGdldCByZW1vdGVQb3J0IHsKICAgIGlmIChpc0Nsb3NlZCkgewogICAgICB0aHJvdyBjb25zdCBTb2NrZXRFeGNlcHRpb24uY2xvc2VkKCk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX25hdGl2ZUdldFJlbW90ZVBlZXIoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0WzFdOwogIH0KCiAgdm9pZCBjbG9zZVN5bmMoKSB7CiAgICBpZiAoIWlzQ2xvc2VkKSB7CiAgICAgIF9uYXRpdmVDbG9zZVN5bmMoKTsKICAgICAgX1NvY2tldFJlc291cmNlSW5mby5Tb2NrZXRDbG9zZWQocmVzb3VyY2VJbmZvKTsKICAgICAgaXNDbG9zZWQgPSB0cnVlOwogICAgfQogIH0KCiAgLy8gQ3JlYXRlIHRoZSBhcHByb3ByaWF0ZSBlcnJvci9leGNlcHRpb24gZnJvbSBkaWZmZXJlbnQgcmV0dXJuZWQKICAvLyBlcnJvciBvYmplY3RzLgogIHN0YXRpYyBjcmVhdGVFcnJvcihlcnJvciwgU3RyaW5nIG1lc3NhZ2UsCiAgICAgIFtJbnRlcm5ldEFkZHJlc3MgYWRkcmVzcywgaW50IHBvcnRdKSB7CiAgICBpZiAoZXJyb3IgaXMgT1NFcnJvcikgewogICAgICByZXR1cm4gbmV3IFNvY2tldEV4Y2VwdGlvbihtZXNzYWdlLAogICAgICAgICAgb3NFcnJvcjogZXJyb3IsIGFkZHJlc3M6IGFkZHJlc3MsIHBvcnQ6IHBvcnQpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBTb2NrZXRFeGNlcHRpb24obWVzc2FnZSwgYWRkcmVzczogYWRkcmVzcywgcG9ydDogcG9ydCk7CiAgICB9CiAgfQoKICBzdGF0aWMgTGlzdDxfSW50ZXJuZXRBZGRyZXNzPiBsb29rdXAoU3RyaW5nIGhvc3QsCiAgICAgIHtJbnRlcm5ldEFkZHJlc3NUeXBlIHR5cGU6IEludGVybmV0QWRkcmVzc1R5cGUuQU5ZfSkgewogICAgdmFyIHJlc3BvbnNlID0gX25hdGl2ZUxvb2t1cFJlcXVlc3QoaG9zdCwgdHlwZS5fdmFsdWUpOwogICAgaWYgKHJlc3BvbnNlIGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgcmVzcG9uc2U7CiAgICB9CiAgICBMaXN0PF9JbnRlcm5ldEFkZHJlc3M+IGFkZHJlc3NlcyA9CiAgICAgICAgbmV3IExpc3Q8X0ludGVybmV0QWRkcmVzcz4ocmVzcG9uc2UubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzcG9uc2UubGVuZ3RoOyArK2kpIHsKICAgICAgdmFyIHJlc3VsdCA9IHJlc3BvbnNlW2ldOwogICAgICBhZGRyZXNzZXNbaV0gPSBuZXcgX0ludGVybmV0QWRkcmVzcyhyZXN1bHRbMV0sIGhvc3QsIHJlc3VsdFsyXSk7CiAgICB9CiAgICByZXR1cm4gYWRkcmVzc2VzOwogIH0KCiAgaW50IHJlYWRJbnRvU3luYyhMaXN0PGludD4gYnVmZmVyLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgaWYgKGlzQ2xvc2VkUmVhZCkgewogICAgICB0aHJvdyBuZXcgU29ja2V0RXhjZXB0aW9uKCJTb2NrZXQgaXMgY2xvc2VkIGZvciByZWFkaW5nIik7CiAgICB9CgogICAgaWYgKChidWZmZXIgaXMhIExpc3QpIHx8CiAgICAgICAgKChzdGFydCAhPSBudWxsKSAmJiAoc3RhcnQgaXMhIGludCkpIHx8CiAgICAgICAgKChlbmQgIT0gbnVsbCkgJiYgKGVuZCBpcyEgaW50KSkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkludmFsaWQgYXJndW1lbnRzIHRvIHJlYWRJbnRvU3luYyIpOwogICAgfQogICAgaWYgKHN0YXJ0ID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoInN0YXJ0IGNhbm5vdCBiZSBudWxsIik7CiAgICB9CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBidWZmZXIubGVuZ3RoKTsKICAgIGlmIChlbmQgPT0gc3RhcnQpIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX25hdGl2ZVJlYWRJbnRvKGJ1ZmZlciwgc3RhcnQsIChlbmQgLSBzdGFydCkpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBTb2NrZXRFeGNlcHRpb24oInJlYWRJbnRvU3luYyBmYWlsZWQiLCBvc0Vycm9yOiByZXN1bHQpOwogICAgfQogICAgcmVzb3VyY2VJbmZvLmFkZFJlYWQocmVzdWx0KTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBMaXN0PGludD4gcmVhZFN5bmMoaW50IGxlbikgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICBpZiAoaXNDbG9zZWRSZWFkKSB7CiAgICAgIHRocm93IG5ldyBTb2NrZXRFeGNlcHRpb24oIlNvY2tldCBpcyBjbG9zZWQgZm9yIHJlYWRpbmciKTsKICAgIH0KCiAgICBpZiAoKGxlbiAhPSBudWxsKSAmJiAobGVuIDwgMCkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIklsbGVnYWwgbGVuZ3RoICRsZW4iKTsKICAgIH0KICAgIGlmIChsZW4gPT0gMCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfbmF0aXZlUmVhZChsZW4pOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IHJlc3VsdDsKICAgIH0KICAgIGFzc2VydChyZXNvdXJjZUluZm8gIT0gbnVsbCk7CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHsKICAgICAgaWYgKHJlc291cmNlSW5mbyAhPSBudWxsKSB7CiAgICAgICAgcmVzb3VyY2VJbmZvLnRvdGFsUmVhZCArPSByZXN1bHQubGVuZ3RoOwogICAgICB9CiAgICB9CiAgICBpZiAocmVzb3VyY2VJbmZvICE9IG51bGwpIHsKICAgICAgcmVzb3VyY2VJbmZvLmRpZFJlYWQoKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgdm9pZCBzZXR1cFJlc291cmNlSW5mbyhfTmF0aXZlU3luY2hyb25vdXNTb2NrZXQgc29ja2V0KSB7CiAgICBzb2NrZXQucmVzb3VyY2VJbmZvID0gbmV3IF9Tb2NrZXRSZXNvdXJjZUluZm8oc29ja2V0KTsKICB9CgogIHZvaWQgc2h1dGRvd24oU29ja2V0RGlyZWN0aW9uIGRpcmVjdGlvbikgewogICAgaWYgKGlzQ2xvc2VkKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CiAgICAgIGNhc2UgU29ja2V0RGlyZWN0aW9uLnJlY2VpdmU6CiAgICAgICAgc2h1dGRvd25SZWFkKCk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgU29ja2V0RGlyZWN0aW9uLnNlbmQ6CiAgICAgICAgc2h1dGRvd25Xcml0ZSgpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlIFNvY2tldERpcmVjdGlvbi5ib3RoOgogICAgICAgIGNsb3NlU3luYygpOwogICAgICAgIGJyZWFrOwogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKGRpcmVjdGlvbik7CiAgICB9CiAgfQoKICB2b2lkIHNodXRkb3duUmVhZCgpIHsKICAgIGlmIChpc0Nsb3NlZCB8fCBpc0Nsb3NlZFJlYWQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGlzQ2xvc2VkV3JpdGUpIHsKICAgICAgY2xvc2VTeW5jKCk7CiAgICB9IGVsc2UgewogICAgICBfbmF0aXZlU2h1dGRvd25SZWFkKCk7CiAgICB9CiAgICBpc0Nsb3NlZFJlYWQgPSB0cnVlOwogIH0KCiAgdm9pZCBzaHV0ZG93bldyaXRlKCkgewogICAgaWYgKGlzQ2xvc2VkIHx8IGlzQ2xvc2VkV3JpdGUpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGlzQ2xvc2VkUmVhZCkgewogICAgICBjbG9zZVN5bmMoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9uYXRpdmVTaHV0ZG93bldyaXRlKCk7CiAgICB9CiAgICBpc0Nsb3NlZFdyaXRlID0gdHJ1ZTsKICB9CgogIHZvaWQgd3JpdGVGcm9tU3luYyhMaXN0PGludD4gYnVmZmVyLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgaWYgKGlzQ2xvc2VkV3JpdGUpIHsKICAgICAgdGhyb3cgbmV3IFNvY2tldEV4Y2VwdGlvbigiU29ja2V0IGlzIGNsb3NlZCBmb3Igd3JpdGluZyIpOwogICAgfQogICAgaWYgKChidWZmZXIgaXMhIExpc3QpIHx8CiAgICAgICAgKChzdGFydCAhPSBudWxsKSAmJiAoc3RhcnQgaXMhIGludCkpIHx8CiAgICAgICAgKChlbmQgIT0gbnVsbCkgJiYgKGVuZCBpcyEgaW50KSkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkludmFsaWQgYXJndW1lbnRzIHRvIHdyaXRlRnJvbVN5bmMiKTsKICAgIH0KICAgIGlmIChzdGFydCA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJzdGFydCBjYW5ub3QgYmUgZXF1YWwgdG8gbnVsbCIpOwogICAgfQoKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGJ1ZmZlci5sZW5ndGgpOwogICAgaWYgKGVuZCA9PSBzdGFydCkgewogICAgICByZXR1cm47CiAgICB9CgogICAgX0J1ZmZlckFuZFN0YXJ0IGJ1ZmZlckFuZFN0YXJ0ID0KICAgICAgICBfZW5zdXJlRmFzdEFuZFNlcmlhbGl6YWJsZUJ5dGVEYXRhKGJ1ZmZlciwgc3RhcnQsIGVuZCk7CiAgICB2YXIgcmVzdWx0ID0gX25hdGl2ZVdyaXRlKGJ1ZmZlckFuZFN0YXJ0LmJ1ZmZlciwgYnVmZmVyQW5kU3RhcnQuc3RhcnQsCiAgICAgICAgZW5kIC0gKHN0YXJ0IC0gYnVmZmVyQW5kU3RhcnQuc3RhcnQpKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgU29ja2V0RXhjZXB0aW9uKCJ3cml0ZUZyb21TeW5jIGZhaWxlZCIsIG9zRXJyb3I6IHJlc3VsdCk7CiAgICB9CiAgICBhc3NlcnQocmVzb3VyY2VJbmZvICE9IG51bGwpOwogICAgaWYgKHJlc291cmNlSW5mbyAhPSBudWxsKSB7CiAgICAgIHJlc291cmNlSW5mby5hZGRXcml0ZShyZXN1bHQpOwogICAgfQogIH0KCiAgdm9pZCBfY2hlY2tBdmFpbGFibGUoKSB7CiAgICBpZiAoaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgY29uc3QgU29ja2V0RXhjZXB0aW9uLmNsb3NlZCgpOwogICAgfQogIH0KCiAgLy8gTmF0aXZlIG1ldGhvZCBkZWNsYXJhdGlvbnMuCiAgc3RhdGljIF9uYXRpdmVMb29rdXBSZXF1ZXN0KGhvc3QsIGludCB0eXBlKQogICAgICBuYXRpdmUgIlN5bmNocm9ub3VzU29ja2V0X0xvb2t1cFJlcXVlc3QiOwogIF9uYXRpdmVDcmVhdGVDb25uZWN0U3luYyhob3N0LCBpbnQgcG9ydCkKICAgICAgbmF0aXZlICJTeW5jaHJvbm91c1NvY2tldF9DcmVhdGVDb25uZWN0U3luYyI7CiAgX25hdGl2ZUF2YWlsYWJsZSgpIG5hdGl2ZSAiU3luY2hyb25vdXNTb2NrZXRfQXZhaWxhYmxlIjsKICBfbmF0aXZlQ2xvc2VTeW5jKCkgbmF0aXZlICJTeW5jaHJvbm91c1NvY2tldF9DbG9zZVN5bmMiOwogIGludCBfbmF0aXZlR2V0UG9ydCgpIG5hdGl2ZSAiU3luY2hyb25vdXNTb2NrZXRfR2V0UG9ydCI7CiAgTGlzdCBfbmF0aXZlR2V0UmVtb3RlUGVlcigpIG5hdGl2ZSAiU3luY2hyb25vdXNTb2NrZXRfR2V0UmVtb3RlUGVlciI7CiAgX25hdGl2ZVJlYWQoaW50IGxlbikgbmF0aXZlICJTeW5jaHJvbm91c1NvY2tldF9SZWFkIjsKICBfbmF0aXZlUmVhZEludG8oTGlzdDxpbnQ+IGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGJ5dGVzKQogICAgICBuYXRpdmUgIlN5bmNocm9ub3VzU29ja2V0X1JlYWRMaXN0IjsKICBfbmF0aXZlU2h1dGRvd25SZWFkKCkgbmF0aXZlICJTeW5jaHJvbm91c1NvY2tldF9TaHV0ZG93blJlYWQiOwogIF9uYXRpdmVTaHV0ZG93bldyaXRlKCkgbmF0aXZlICJTeW5jaHJvbm91c1NvY2tldF9TaHV0ZG93bldyaXRlIjsKICBfbmF0aXZlV3JpdGUoTGlzdDxpbnQ+IGJ1ZmZlciwgaW50IG9mZnNldCwgaW50IGJ5dGVzKQogICAgICBuYXRpdmUgIlN5bmNocm9ub3VzU29ja2V0X1dyaXRlTGlzdCI7Cn0KgV8ATk48ASABBx0JPDoEAgE+KgEnATwbJjsEATIgPiwBKAErAUIwATwBSwFEMQIBTRlQAUxPGRkdHgEzIAEzFQEnAUAYQAYtFiQaDQwiFBMIRUEIBh8hLRxPHxUIIDMlTB8pHUsKHg81DhcWH0gMIAojCBUGARoEAS8rAREaGAYULAYjHRQGHwQBJhQsBikdFAYaOQQBFxQsBikdFAYWBAEVFRo2FwYEAUQULC0cKjkNSQYEATQ9PB8WBic1MCBHBhYEATsXGEEGAR0wLEQGGTcGQRgQBkAdSQYiEwQBIBcYQQYBJjYGFBMGIx0UBiIaIjEIBiAeBhMEAUM7BAEtFA4GGSQYDyEZDyEVDw8sBgQBGCQOBhkTDR0GGQQBGSUOBhgTDR4GGgQBPRcZQQYdMCxFBhlABgFBGA4GASVASy8dSgYiICUGBAEbFCwGBAEhLjArNDs7O0g4OytBQzgsAgEkZGFydDppby1wYXRjaC9zeW5jX3NvY2tldF9wYXRjaC5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9ieXRlc19idWlsZGVyLmRhcnSVri8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovKioKICogQnVpbGRzIGEgbGlzdCBvZiBieXRlcywgYWxsb3dpbmcgYnl0ZXMgYW5kIGxpc3RzIG9mIGJ5dGVzIHRvIGJlIGFkZGVkIGF0IHRoZQogKiBlbmQuCiAqCiAqIFVzZWQgdG8gZWZmaWNpZW50bHkgY29sbGVjdCBieXRlcyBhbmQgbGlzdHMgb2YgYnl0ZXMuCiAqLwphYnN0cmFjdCBjbGFzcyBCeXRlc0J1aWxkZXIgewogIC8qKgogICAqIENvbnN0cnVjdCBhIG5ldyBlbXB0eSBbQnl0ZXNCdWlsZGVyXS4KICAgKgogICAqIElmIFtjb3B5XSBpcyB0cnVlLCB0aGUgZGF0YSBpcyBhbHdheXMgY29waWVkIHdoZW4gYWRkZWQgdG8gdGhlIGxpc3QuIElmCiAgICogaXQgW2NvcHldIGlzIGZhbHNlLCB0aGUgZGF0YSBpcyBvbmx5IGNvcGllZCBpZiBuZWVkZWQuIFRoYXQgbWVhbnMgdGhhdCBpZgogICAqIHRoZSBsaXN0cyBhcmUgY2hhbmdlZCBhZnRlciBhZGRlZCB0byB0aGUgW0J5dGVzQnVpbGRlcl0sIGl0IG1heSBlZmZlY3QgdGhlCiAgICogb3V0cHV0LiBEZWZhdWx0IGlzIGB0cnVlYC4KICAgKi8KICBmYWN0b3J5IEJ5dGVzQnVpbGRlcih7Ym9vbCBjb3B5OiB0cnVlfSkgewogICAgaWYgKGNvcHkpIHsKICAgICAgcmV0dXJuIG5ldyBfQ29weWluZ0J5dGVzQnVpbGRlcigpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG5ldyBfQnl0ZXNCdWlsZGVyKCk7CiAgICB9CiAgfQoKICAvKioKICAgKiBBcHBlbmRzIFtieXRlc10gdG8gdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIGJ1aWxkZXIuCiAgICoKICAgKiBFYWNoIHZhbHVlIG9mIFtieXRlc10gd2lsbCBiZSBiaXQtcmVwcmVzZW50YXRpb24gdHJ1bmNhdGVkIHRvIHRoZSByYW5nZQogICAqIDAgLi4gMjU1LgogICAqLwogIHZvaWQgYWRkKExpc3Q8aW50PiBieXRlcyk7CgogIC8qKgogICAqIEFwcGVuZCBbYnl0ZV0gdG8gdGhlIGN1cnJlbnQgY29udGVudHMgb2YgdGhlIGJ1aWxkZXIuCiAgICoKICAgKiBUaGUgW2J5dGVdIHdpbGwgYmUgYml0LXJlcHJlc2VudGF0aW9uIHRydW5jYXRlZCB0byB0aGUgcmFuZ2UgMCAuLiAyNTUuCiAgICovCiAgdm9pZCBhZGRCeXRlKGludCBieXRlKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgY29udGVudHMgb2YgYHRoaXNgIGFuZCBjbGVhcnMgYHRoaXNgLgogICAqCiAgICogVGhlIGxpc3QgcmV0dXJuZWQgaXMgYSB2aWV3IG9mIHRoZSBpbnRlcm5hbCBidWZmZXIsIGxpbWl0ZWQgdG8gdGhlCiAgICogW2xlbmd0aF0uCiAgICovCiAgVWludDhMaXN0IHRha2VCeXRlcygpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBjb250ZW50cyBvZiB0aGUgYnVpbGRlci4KICAgKgogICAqIExlYXZlcyB0aGUgY29udGVudHMgb2YgdGhlIGJ1aWxkZXIgaW50YWN0LgogICAqLwogIFVpbnQ4TGlzdCB0b0J5dGVzKCk7CgogIC8qKgogICAqIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIGJ1aWxkZXIuCiAgICovCiAgaW50IGdldCBsZW5ndGg7CgogIC8qKgogICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBidWZmZXIgaXMgZW1wdHkuCiAgICovCiAgYm9vbCBnZXQgaXNFbXB0eTsKCiAgLyoqCiAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGJ1ZmZlciBpcyBub3QgZW1wdHkuCiAgICovCiAgYm9vbCBnZXQgaXNOb3RFbXB0eTsKCiAgLyoqCiAgICogQ2xlYXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBidWlsZGVyLgogICAqLwogIHZvaWQgY2xlYXIoKTsKfQoKY2xhc3MgX0NvcHlpbmdCeXRlc0J1aWxkZXIgaW1wbGVtZW50cyBCeXRlc0J1aWxkZXIgewogIC8vIFN0YXJ0IHdpdGggMTAyNCBieXRlcy4KICBzdGF0aWMgY29uc3QgaW50IF9pbml0U2l6ZSA9IDEwMjQ7CgogIC8vIFNhZmUgZm9yIHJldXNlIGJlY2F1c2UgYSBmaXhlZC1sZW5ndGggZW1wdHkgbGlzdCBpcyBpbW11dGFibGUuCiAgc3RhdGljIGZpbmFsIF9lbXB0eUxpc3QgPSBuZXcgVWludDhMaXN0KDApOwoKICBpbnQgX2xlbmd0aCA9IDA7CiAgVWludDhMaXN0IF9idWZmZXI7CgogIF9Db3B5aW5nQnl0ZXNCdWlsZGVyKFtpbnQgaW5pdGlhbENhcGFjaXR5ID0gMF0pCiAgICAgIDogX2J1ZmZlciA9IChpbml0aWFsQ2FwYWNpdHkgPD0gMCkKICAgICAgICAgICAgPyBfZW1wdHlMaXN0CiAgICAgICAgICAgIDogbmV3IFVpbnQ4TGlzdChfcG93MnJvdW5kdXAoaW5pdGlhbENhcGFjaXR5KSk7CgogIHZvaWQgYWRkKExpc3Q8aW50PiBieXRlcykgewogICAgaW50IGJ5dGVzTGVuZ3RoID0gYnl0ZXMubGVuZ3RoOwogICAgaWYgKGJ5dGVzTGVuZ3RoID09IDApIHJldHVybjsKICAgIGludCByZXF1aXJlZCA9IF9sZW5ndGggKyBieXRlc0xlbmd0aDsKICAgIGlmIChfYnVmZmVyLmxlbmd0aCA8IHJlcXVpcmVkKSB7CiAgICAgIF9ncm93KHJlcXVpcmVkKTsKICAgIH0KICAgIGFzc2VydChfYnVmZmVyLmxlbmd0aCA+PSByZXF1aXJlZCk7CiAgICBpZiAoYnl0ZXMgaXMgVWludDhMaXN0KSB7CiAgICAgIF9idWZmZXIuc2V0UmFuZ2UoX2xlbmd0aCwgcmVxdWlyZWQsIGJ5dGVzKTsKICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYnl0ZXNMZW5ndGg7IGkrKykgewogICAgICAgIF9idWZmZXJbX2xlbmd0aCArIGldID0gYnl0ZXNbaV07CiAgICAgIH0KICAgIH0KICAgIF9sZW5ndGggPSByZXF1aXJlZDsKICB9CgogIHZvaWQgYWRkQnl0ZShpbnQgYnl0ZSkgewogICAgaWYgKF9idWZmZXIubGVuZ3RoID09IF9sZW5ndGgpIHsKICAgICAgLy8gVGhlIGdyb3cgYWxnb3JpdGhtIGFsd2F5cyBhdCBsZWFzdCBkb3VibGVzLgogICAgICAvLyBJZiB3ZSBhZGRlZCBvbmUgdG8gX2xlbmd0aCBpdCB3b3VsZCBxdWFkcnVwbGUgdW5uZWNlc3NhcmlseS4KICAgICAgX2dyb3coX2xlbmd0aCk7CiAgICB9CiAgICBhc3NlcnQoX2J1ZmZlci5sZW5ndGggPiBfbGVuZ3RoKTsKICAgIF9idWZmZXJbX2xlbmd0aF0gPSBieXRlOwogICAgX2xlbmd0aCsrOwogIH0KCiAgdm9pZCBfZ3JvdyhpbnQgcmVxdWlyZWQpIHsKICAgIC8vIFdlIHdpbGwgY3JlYXRlIGEgbGlzdCBpbiB0aGUgcmFuZ2Ugb2YgMi00IHRpbWVzIGxhcmdlciB0aGFuCiAgICAvLyByZXF1aXJlZC4KICAgIGludCBuZXdTaXplID0gcmVxdWlyZWQgKiAyOwogICAgaWYgKG5ld1NpemUgPCBfaW5pdFNpemUpIHsKICAgICAgbmV3U2l6ZSA9IF9pbml0U2l6ZTsKICAgIH0gZWxzZSB7CiAgICAgIG5ld1NpemUgPSBfcG93MnJvdW5kdXAobmV3U2l6ZSk7CiAgICB9CiAgICB2YXIgbmV3QnVmZmVyID0gbmV3IFVpbnQ4TGlzdChuZXdTaXplKTsKICAgIG5ld0J1ZmZlci5zZXRSYW5nZSgwLCBfYnVmZmVyLmxlbmd0aCwgX2J1ZmZlcik7CiAgICBfYnVmZmVyID0gbmV3QnVmZmVyOwogIH0KCiAgVWludDhMaXN0IHRha2VCeXRlcygpIHsKICAgIGlmIChfbGVuZ3RoID09IDApIHJldHVybiBfZW1wdHlMaXN0OwogICAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OExpc3QudmlldyhfYnVmZmVyLmJ1ZmZlciwgMCwgX2xlbmd0aCk7CiAgICBjbGVhcigpOwogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CgogIFVpbnQ4TGlzdCB0b0J5dGVzKCkgewogICAgaWYgKF9sZW5ndGggPT0gMCkgcmV0dXJuIF9lbXB0eUxpc3Q7CiAgICByZXR1cm4gbmV3IFVpbnQ4TGlzdC5mcm9tTGlzdCgKICAgICAgICBuZXcgVWludDhMaXN0LnZpZXcoX2J1ZmZlci5idWZmZXIsIDAsIF9sZW5ndGgpKTsKICB9CgogIGludCBnZXQgbGVuZ3RoID0+IF9sZW5ndGg7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2xlbmd0aCA9PSAwOwoKICBib29sIGdldCBpc05vdEVtcHR5ID0+IF9sZW5ndGggIT0gMDsKCiAgdm9pZCBjbGVhcigpIHsKICAgIF9sZW5ndGggPSAwOwogICAgX2J1ZmZlciA9IF9lbXB0eUxpc3Q7CiAgfQoKICBzdGF0aWMgaW50IF9wb3cycm91bmR1cChpbnQgeCkgewogICAgYXNzZXJ0KHggPiAwKTsKICAgIC0teDsKICAgIHggfD0geCA+PiAxOwogICAgeCB8PSB4ID4+IDI7CiAgICB4IHw9IHggPj4gNDsKICAgIHggfD0geCA+PiA4OwogICAgeCB8PSB4ID4+IDE2OwogICAgcmV0dXJuIHggKyAxOwogIH0KfQoKY2xhc3MgX0J5dGVzQnVpbGRlciBpbXBsZW1lbnRzIEJ5dGVzQnVpbGRlciB7CiAgaW50IF9sZW5ndGggPSAwOwogIGZpbmFsIExpc3Q8VWludDhMaXN0PiBfY2h1bmtzID0gW107CgogIHZvaWQgYWRkKExpc3Q8aW50PiBieXRlcykgewogICAgVWludDhMaXN0IHR5cGVkQnl0ZXM7CiAgICBpZiAoYnl0ZXMgaXMgVWludDhMaXN0KSB7CiAgICAgIHR5cGVkQnl0ZXMgPSBieXRlczsKICAgIH0gZWxzZSB7CiAgICAgIHR5cGVkQnl0ZXMgPSBuZXcgVWludDhMaXN0LmZyb21MaXN0KGJ5dGVzKTsKICAgIH0KICAgIF9jaHVua3MuYWRkKHR5cGVkQnl0ZXMpOwogICAgX2xlbmd0aCArPSB0eXBlZEJ5dGVzLmxlbmd0aDsKICB9CgogIHZvaWQgYWRkQnl0ZShpbnQgYnl0ZSkgewogICAgX2NodW5rcy5hZGQobmV3IFVpbnQ4TGlzdCgxKS4uWzBdID0gYnl0ZSk7CiAgICBfbGVuZ3RoKys7CiAgfQoKICBVaW50OExpc3QgdGFrZUJ5dGVzKCkgewogICAgaWYgKF9sZW5ndGggPT0gMCkgcmV0dXJuIF9Db3B5aW5nQnl0ZXNCdWlsZGVyLl9lbXB0eUxpc3Q7CiAgICBpZiAoX2NodW5rcy5sZW5ndGggPT0gMSkgewogICAgICB2YXIgYnVmZmVyID0gX2NodW5rc1swXTsKICAgICAgY2xlYXIoKTsKICAgICAgcmV0dXJuIGJ1ZmZlcjsKICAgIH0KICAgIHZhciBidWZmZXIgPSBuZXcgVWludDhMaXN0KF9sZW5ndGgpOwogICAgaW50IG9mZnNldCA9IDA7CiAgICBmb3IgKHZhciBjaHVuayBpbiBfY2h1bmtzKSB7CiAgICAgIGJ1ZmZlci5zZXRSYW5nZShvZmZzZXQsIG9mZnNldCArIGNodW5rLmxlbmd0aCwgY2h1bmspOwogICAgICBvZmZzZXQgKz0gY2h1bmsubGVuZ3RoOwogICAgfQogICAgY2xlYXIoKTsKICAgIHJldHVybiBidWZmZXI7CiAgfQoKICBVaW50OExpc3QgdG9CeXRlcygpIHsKICAgIGlmIChfbGVuZ3RoID09IDApIHJldHVybiBfQ29weWluZ0J5dGVzQnVpbGRlci5fZW1wdHlMaXN0OwogICAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OExpc3QoX2xlbmd0aCk7CiAgICBpbnQgb2Zmc2V0ID0gMDsKICAgIGZvciAodmFyIGNodW5rIGluIF9jaHVua3MpIHsKICAgICAgYnVmZmVyLnNldFJhbmdlKG9mZnNldCwgb2Zmc2V0ICsgY2h1bmsubGVuZ3RoLCBjaHVuayk7CiAgICAgIG9mZnNldCArPSBjaHVuay5sZW5ndGg7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyOwogIH0KCiAgaW50IGdldCBsZW5ndGggPT4gX2xlbmd0aDsKCiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfbGVuZ3RoID09IDA7CgogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2xlbmd0aCAhPSAwOwoKICB2b2lkIGNsZWFyKCkgewogICAgX2xlbmd0aCA9IDA7CiAgICBfY2h1bmtzLmNsZWFyKCk7CiAgfQp9CoDrAE5OPAERAQRQCAM5BB4GKwVNT1AgBiwQKQ0iBgQBBj0FTQ8GHQEGOwVMBhoBBjcFSA8GGQEGPAUwBhcBBikGEgEGLAYUAQYwBhcBBigGEAIBNRwlAUQuARMVATIpGTwBHiQiKiUXBigeMg0uKQgGGAQBGyU1RhYGJh0PBAEdQxEgHxsNJwYsNBkEARopQQ0TBAEYKSM5BAEdASQBJwERERoEASMTCRERERESEgQCAS4TJgEeGh4aDTIGHSIEARsvDwQBGj4fHw8VBikUIT0eBg0TBAEYPikUIT0eBhMEAR0BJAEnARERFQQCARpkYXJ0OmlvL2J5dGVzX2J1aWxkZXIuZGFydCpvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vY29tbW9uLmRhcnSOyi8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovLyBDb25zdGFudHMgdXNlZCB3aGVuIHdvcmtpbmcgd2l0aCBuYXRpdmUgcG9ydHMuCi8vIFRoZXNlIG11c3QgbWF0Y2ggdGhlIGNvbnN0YW50cyBpbiBydW50aW1lL2Jpbi9kYXJ0dXRpbHMuaCBjbGFzcyBDT2JqZWN0Lgpjb25zdCBpbnQgX3N1Y2Nlc3NSZXNwb25zZSA9IDA7CmNvbnN0IGludCBfaWxsZWdhbEFyZ3VtZW50UmVzcG9uc2UgPSAxOwpjb25zdCBpbnQgX29zRXJyb3JSZXNwb25zZSA9IDI7CmNvbnN0IGludCBfZmlsZUNsb3NlZFJlc3BvbnNlID0gMzsKCmNvbnN0IGludCBfZXJyb3JSZXNwb25zZUVycm9yVHlwZSA9IDA7CmNvbnN0IGludCBfb3NFcnJvclJlc3BvbnNlRXJyb3JDb2RlID0gMTsKY29uc3QgaW50IF9vc0Vycm9yUmVzcG9uc2VNZXNzYWdlID0gMjsKCi8vIEZ1bmN0aW9ucyB1c2VkIHRvIHJlY2VpdmUgZXhjZXB0aW9ucyBmcm9tIG5hdGl2ZSBwb3J0cy4KYm9vbCBfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSA9PgogICAgcmVzcG9uc2UgaXMgTGlzdCAmJiByZXNwb25zZVswXSAhPSBfc3VjY2Vzc1Jlc3BvbnNlOwoKLyoqCiAqIFJldHVybnMgYW4gRXhjZXB0aW9uIG9yIGFuIEVycm9yCiAqLwpfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCBTdHJpbmcgbWVzc2FnZSwgU3RyaW5nIHBhdGgpIHsKICBhc3NlcnQoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpOwogIHN3aXRjaCAocmVzcG9uc2VbX2Vycm9yUmVzcG9uc2VFcnJvclR5cGVdKSB7CiAgICBjYXNlIF9pbGxlZ2FsQXJndW1lbnRSZXNwb25zZToKICAgICAgcmV0dXJuIG5ldyBBcmd1bWVudEVycm9yKCIkbWVzc2FnZTogJHBhdGgiKTsKICAgIGNhc2UgX29zRXJyb3JSZXNwb25zZToKICAgICAgdmFyIGVyciA9IG5ldyBPU0Vycm9yKHJlc3BvbnNlW19vc0Vycm9yUmVzcG9uc2VNZXNzYWdlXSwKICAgICAgICAgIHJlc3BvbnNlW19vc0Vycm9yUmVzcG9uc2VFcnJvckNvZGVdKTsKICAgICAgcmV0dXJuIG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKG1lc3NhZ2UsIHBhdGgsIGVycik7CiAgICBjYXNlIF9maWxlQ2xvc2VkUmVzcG9uc2U6CiAgICAgIHJldHVybiBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiRmlsZSBjbG9zZWQiLCBwYXRoKTsKICAgIGRlZmF1bHQ6CiAgICAgIHJldHVybiBuZXcgRXhjZXB0aW9uKCJVbmtub3duIGVycm9yIik7CiAgfQp9CgovKioKICogQmFzZSBjbGFzcyBmb3IgYWxsIElPIHJlbGF0ZWQgZXhjZXB0aW9ucy4KICovCmFic3RyYWN0IGNsYXNzIElPRXhjZXB0aW9uIGltcGxlbWVudHMgRXhjZXB0aW9uIHsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiSU9FeGNlcHRpb24iOwp9CgovKioKICAqIEFuIFtPU0Vycm9yXSBvYmplY3QgaG9sZHMgaW5mb3JtYXRpb24gYWJvdXQgYW4gZXJyb3IgZnJvbSB0aGUKICAqIG9wZXJhdGluZyBzeXN0ZW0uCiAgKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBPU0Vycm9yIHsKICAvKiogQ29uc3RhbnQgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IG5vIE9TIGVycm9yIGNvZGUgaXMgYXZhaWxhYmxlLiAqLwogIHN0YXRpYyBjb25zdCBpbnQgbm9FcnJvckNvZGUgPSAtMTsKCiAgLy8vIEVycm9yIG1lc3NhZ2Ugc3VwcGxpZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uIFRoaXMgbWF5IGJlIGBudWxsYCBvcgogIC8vLyBlbXB0eSBpZiBubyBtZXNzYWdlIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXJyb3IuCiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIC8vLyBFcnJvciBjb2RlIHN1cHBsaWVkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtLgogIC8vLwogIC8vLyBXaWxsIGhhdmUgdGhlIHZhbHVlIFtPU0Vycm9yLm5vRXJyb3JDb2RlXSBpZiB0aGVyZSBpcyBubyBlcnJvciBjb2RlCiAgLy8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgZXJyb3IuCiAgZmluYWwgaW50IGVycm9yQ29kZTsKCiAgLyoqIENyZWF0ZXMgYW4gT1NFcnJvciBvYmplY3QgZnJvbSBhIG1lc3NhZ2UgYW5kIGFuIGVycm9yQ29kZS4gKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgY29uc3QgT1NFcnJvcihbdGhpcy5tZXNzYWdlID0gIiIsIHRoaXMuZXJyb3JDb2RlID0gbm9FcnJvckNvZGVdKTsKCiAgLyoqIENvbnZlcnRzIGFuIE9TRXJyb3Igb2JqZWN0IHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiAqLwogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKCJPUyBFcnJvciIpOwogICAgaWYgKG1lc3NhZ2UuaXNOb3RFbXB0eSkgewogICAgICBzYi4ud3JpdGUoIjogIikuLndyaXRlKG1lc3NhZ2UpOwogICAgICBpZiAoZXJyb3JDb2RlICE9IG5vRXJyb3JDb2RlKSB7CiAgICAgICAgc2IuLndyaXRlKCIsIGVycm5vID0gIikuLndyaXRlKGVycm9yQ29kZS50b1N0cmluZygpKTsKICAgICAgfQogICAgfSBlbHNlIGlmIChlcnJvckNvZGUgIT0gbm9FcnJvckNvZGUpIHsKICAgICAgc2IuLndyaXRlKCI6IGVycm5vID0gIikuLndyaXRlKGVycm9yQ29kZS50b1N0cmluZygpKTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KfQoKLy8gT2JqZWN0IGZvciBob2xkaW5nIGEgYnVmZmVyIGFuZCBhbiBvZmZzZXQuCmNsYXNzIF9CdWZmZXJBbmRTdGFydCB7CiAgTGlzdDxpbnQ+IGJ1ZmZlcjsKICBpbnQgc3RhcnQ7CiAgX0J1ZmZlckFuZFN0YXJ0KHRoaXMuYnVmZmVyLCB0aGlzLnN0YXJ0KTsKfQoKLy8gRW5zdXJlIHRoYXQgdGhlIGlucHV0IExpc3QgY2FuIGJlIHNlcmlhbGl6ZWQgdGhyb3VnaCBhIG5hdGl2ZSBwb3J0LgovLyBPbmx5IEludDhMaXN0IGFuZCBVaW50OExpc3QgTGlzdHMgYXJlIHNlcmlhbGl6ZWQgZGlyZWN0bHkuCi8vIEFsbCBvdGhlciBsaXN0cyBhcmUgZmlyc3QgY29waWVkIGludG8gYSBVaW50OExpc3QuIFRoaXMgaGFzIHRoZSBhZGRlZAovLyBiZW5lZml0IHRoYXQgaXQgaXMgZmFzdGVyIHRvIGFjY2VzcyBmcm9tIHRoZSBDIGNvZGUgYXMgd2VsbC4KX0J1ZmZlckFuZFN0YXJ0IF9lbnN1cmVGYXN0QW5kU2VyaWFsaXphYmxlQnl0ZURhdGEoCiAgICBMaXN0PGludD4gYnVmZmVyLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICBpZiAoYnVmZmVyIGlzIFVpbnQ4TGlzdCB8fCBidWZmZXIgaXMgSW50OExpc3QpIHsKICAgIHJldHVybiBuZXcgX0J1ZmZlckFuZFN0YXJ0KGJ1ZmZlciwgc3RhcnQpOwogIH0KICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgdmFyIG5ld0J1ZmZlciA9IG5ldyBVaW50OExpc3QobGVuZ3RoKTsKICBpbnQgaiA9IHN0YXJ0OwogIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgIGludCB2YWx1ZSA9IGJ1ZmZlcltqXTsKICAgIGlmICh2YWx1ZSA9PSBudWxsKSB0aHJvdyBBcmd1bWVudEVycm9yKCJMaXN0IGVsZW1lbnQgaXMgbnVsbCBhdCBpbmRleCAkaiIpOwogICAgbmV3QnVmZmVyW2ldID0gdmFsdWU7CiAgICBqKys7CiAgfQogIHJldHVybiBuZXcgX0J1ZmZlckFuZFN0YXJ0KG5ld0J1ZmZlciwgMCk7Cn0KCmNsYXNzIF9JT0NyeXB0byB7CiAgZXh0ZXJuYWwgc3RhdGljIFVpbnQ4TGlzdCBnZXRSYW5kb21CeXRlcyhpbnQgY291bnQpOwp9CncATk48AREBMkwgKCAjAScpJwE7IzkBBCQEQCYvIzMbPzA6HjsNLQQCAQQtBDImAgEEQhYFGhBHJQFMOBgBMwZKIRcBRBxEAUAWKhoeJyY+CCs8BhoEAgEuGBQNLAIBRz5JQDQsMy8EHCkRJRtQGgkELAIBEjcCARNkYXJ0OmlvL2NvbW1vbi5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9iaW4vY29tbW9uX3BhdGNoLmRhcnSHMC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLy8gTm90ZTogdGhlIFZNIGNvbmNhdGVuYXRlcyBhbGwgcGF0Y2ggZmlsZXMgaW50byBhIHNpbmdsZSBwYXRjaCBmaWxlLiBUaGlzCi8vLyBmaWxlIGlzIHRoZSBmaXJzdCBwYXRjaCBpbiAiZGFydDppbyIgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBpbXBvcnRzIHVzZWQgYnkKLy8vIHBhdGNoZXMgb2YgdGhhdCBsaWJyYXJ5LiBXZSBwbGFuIHRvIGNoYW5nZSB0aGlzIHdoZW4gd2UgaGF2ZSBhIHNoYXJlZCBmcm9udAovLy8gZW5kIGFuZCBzaW1wbHkgdXNlIHBhcnRzLgoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgc2hvdyBWTUxpYnJhcnlIb29rcywgcGF0Y2g7CgppbXBvcnQgImRhcnQ6YXN5bmMiCiAgICBzaG93CiAgICAgICAgQ29tcGxldGVyLAogICAgICAgIEZ1dHVyZSwKICAgICAgICBTdHJlYW0sCiAgICAgICAgU3RyZWFtQ29uc3VtZXIsCiAgICAgICAgU3RyZWFtQ29udHJvbGxlciwKICAgICAgICBTdHJlYW1TdWJzY3JpcHRpb24sCiAgICAgICAgVGltZXIsCiAgICAgICAgWm9uZSwKICAgICAgICBzY2hlZHVsZU1pY3JvdGFzazsKCmltcG9ydCAiZGFydDpjb2xsZWN0aW9uIiBzaG93IEhhc2hNYXA7CgppbXBvcnQgImRhcnQ6Y29udmVydCIgc2hvdyBFbmNvZGluZywgdXRmODsKCmltcG9ydCAiZGFydDpkZXZlbG9wZXIiIHNob3cgcmVnaXN0ZXJFeHRlbnNpb247CgppbXBvcnQgImRhcnQ6aXNvbGF0ZSIgc2hvdyBSYXdSZWNlaXZlUG9ydCwgUmVjZWl2ZVBvcnQsIFNlbmRQb3J0OwoKaW1wb3J0ICJkYXJ0Om1hdGgiIHNob3cgbWluOwoKaW1wb3J0ICJkYXJ0Om5hdGl2ZXdyYXBwZXJzIiBzaG93IE5hdGl2ZUZpZWxkV3JhcHBlckNsYXNzMTsKCmltcG9ydCAiZGFydDp0eXBlZF9kYXRhIiBzaG93IFVpbnQ4TGlzdDsKCi8vLyBUaGVzZSBhcmUgdGhlIGFkZGl0aW9uYWwgcGFydHMgb2YgdGhpcyBwYXRjaCBsaWJyYXJ5OgovLyBwYXJ0ICJkaXJlY3RvcnlfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImV2ZW50aGFuZGxlcl9wYXRjaC5kYXJ0IjsKLy8gcGFydCAiZmlsZV9wYXRjaC5kYXJ0IjsKLy8gcGFydCAiZmlsZV9zeXN0ZW1fZW50aXR5X3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJmaWx0ZXJfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImlvX3NlcnZpY2VfcGF0Y2guZGFydCI7Ci8vIHBhcnQgInBsYXRmb3JtX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJwcm9jZXNzX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJzb2NrZXRfcGF0Y2guZGFydCI7Ci8vIHBhcnQgInN0ZGlvX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJzZWN1cmVfc29ja2V0X3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJzeW5jX3NvY2tldF9wYXRjaC5kYXJ0IjsKCkBwYXRjaApjbGFzcyBfSU9DcnlwdG8gewogIEBwYXRjaAogIHN0YXRpYyBVaW50OExpc3QgZ2V0UmFuZG9tQnl0ZXMoaW50IGNvdW50KSBuYXRpdmUgIkNyeXB0b19HZXRSYW5kb21CeXRlcyI7Cn0KCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQpfc2V0dXBIb29rcygpIHsKICBWTUxpYnJhcnlIb29rcy5ldmVudEhhbmRsZXJTZW5kRGF0YSA9IF9FdmVudEhhbmRsZXIuX3NlbmREYXRhOwogIFZNTGlicmFyeUhvb2tzLnRpbWVyTWlsbGlzZWNvbmRDbG9jayA9IF9FdmVudEhhbmRsZXIuX3RpbWVyTWlsbGlzZWNvbmRDbG9jazsKfQpAAE5OPAFNUFAeATQBFAkTEBAYGhwPDhsBJwErATABQgEdATwBKQE6ICMbKR0hHx4dHCQiAQcSCU0CASIQQU8CAR9kYXJ0OmlvLXBhdGNoL2NvbW1vbl9wYXRjaC5kYXJ0NG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9kYXRhX3RyYW5zZm9ybWVyLmRhcnTAAFWVLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8qKgogKiBFeHBvc2VzIFpMaWIgb3B0aW9ucyBmb3IgaW5wdXQgcGFyYW1ldGVycy4KICoKICogU2VlIGh0dHA6Ly93d3cuemxpYi5uZXQvbWFudWFsLmh0bWwgZm9yIG1vcmUgZG9jdW1lbnRhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIFpMaWJPcHRpb24gewogIC8vLyBNaW5pbWFsIHZhbHVlIGZvciBbWkxpYkNvZGVjLndpbmRvd0JpdHNdLCBbWkxpYkVuY29kZXIud2luZG93Qml0c10KICAvLy8gYW5kIFtaTGliRGVjb2Rlci53aW5kb3dCaXRzXS4KICBzdGF0aWMgY29uc3QgaW50IG1pbldpbmRvd0JpdHMgPSA4OwogIEBEZXByZWNhdGVkKCJVc2UgbWluV2luZG93Qml0cyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1JTl9XSU5ET1dfQklUUyA9IDg7CgogIC8vLyBNYXhpbWFsIHZhbHVlIGZvciBbWkxpYkNvZGVjLndpbmRvd0JpdHNdLCBbWkxpYkVuY29kZXIud2luZG93Qml0c10KICAvLy8gYW5kIFtaTGliRGVjb2Rlci53aW5kb3dCaXRzXS4KICBzdGF0aWMgY29uc3QgaW50IG1heFdpbmRvd0JpdHMgPSAxNTsKICBARGVwcmVjYXRlZCgiVXNlIG1heFdpbmRvd0JpdHMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNQVhfV0lORE9XX0JJVFMgPSAxNTsKCiAgLy8vIERlZmF1bHQgdmFsdWUgZm9yIFtaTGliQ29kZWMud2luZG93Qml0c10sIFtaTGliRW5jb2Rlci53aW5kb3dCaXRzXQogIC8vLyBhbmQgW1pMaWJEZWNvZGVyLndpbmRvd0JpdHNdLgogIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdFdpbmRvd0JpdHMgPSAxNTsKICBARGVwcmVjYXRlZCgiVXNlIGRlZmF1bHRXaW5kb3dCaXRzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgREVGQVVMVF9XSU5ET1dfQklUUyA9IDE1OwoKICAvLy8gTWluaW1hbCB2YWx1ZSBmb3IgW1pMaWJDb2RlYy5sZXZlbF0gYW5kIFtaTGliRW5jb2Rlci5sZXZlbF0uCiAgc3RhdGljIGNvbnN0IGludCBtaW5MZXZlbCA9IC0xOwogIEBEZXByZWNhdGVkKCJVc2UgbWluTGV2ZWwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNSU5fTEVWRUwgPSAtMTsKCiAgLy8vIE1heGltYWwgdmFsdWUgZm9yIFtaTGliQ29kZWMubGV2ZWxdIGFuZCBbWkxpYkVuY29kZXIubGV2ZWxdCiAgc3RhdGljIGNvbnN0IGludCBtYXhMZXZlbCA9IDk7CiAgQERlcHJlY2F0ZWQoIlVzZSBtYXhMZXZlbCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IE1BWF9MRVZFTCA9IDk7CgogIC8vLyBEZWZhdWx0IHZhbHVlIGZvciBbWkxpYkNvZGVjLmxldmVsXSBhbmQgW1pMaWJFbmNvZGVyLmxldmVsXS4KICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRMZXZlbCA9IDY7CiAgQERlcHJlY2F0ZWQoIlVzZSBkZWZhdWx0TGV2ZWwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBERUZBVUxUX0xFVkVMID0gNjsKCiAgLy8vIE1pbmltYWwgdmFsdWUgZm9yIFtaTGliQ29kZWMubWVtTGV2ZWxdIGFuZCBbWkxpYkVuY29kZXIubWVtTGV2ZWxdLgogIHN0YXRpYyBjb25zdCBpbnQgbWluTWVtTGV2ZWwgPSAxOwogIEBEZXByZWNhdGVkKCJVc2UgbWluTWVtTGV2ZWwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNSU5fTUVNX0xFVkVMID0gMTsKCiAgLy8vIE1heGltYWwgdmFsdWUgZm9yIFtaTGliQ29kZWMubWVtTGV2ZWxdIGFuZCBbWkxpYkVuY29kZXIubWVtTGV2ZWxdLgogIHN0YXRpYyBjb25zdCBpbnQgbWF4TWVtTGV2ZWwgPSA5OwogIEBEZXByZWNhdGVkKCJVc2UgbWF4TWVtTGV2ZWwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNQVhfTUVNX0xFVkVMID0gOTsKCiAgLy8vIERlZmF1bHQgdmFsdWUgZm9yIFtaTGliQ29kZWMubWVtTGV2ZWxdIGFuZCBbWkxpYkVuY29kZXIubWVtTGV2ZWxdLgogIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdE1lbUxldmVsID0gODsKICBARGVwcmVjYXRlZCgiVXNlIGRlZmF1bHRNZW1MZXZlbCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IERFRkFVTFRfTUVNX0xFVkVMID0gODsKCiAgLy8vIFJlY29tbWVuZGVkIHN0cmF0ZWd5IGZvciBkYXRhIHByb2R1Y2VkIGJ5IGEgZmlsdGVyIChvciBwcmVkaWN0b3IpCiAgc3RhdGljIGNvbnN0IGludCBzdHJhdGVneUZpbHRlcmVkID0gMTsKICBARGVwcmVjYXRlZCgiVXNlIHN0cmF0ZWd5RmlsdGVyZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBTVFJBVEVHWV9GSUxURVJFRCA9IDE7CgogIC8vLyBVc2UgdGhpcyBzdHJhdGVneSB0byBmb3JjZSBIdWZmbWFuIGVuY29kaW5nIG9ubHkgKG5vIHN0cmluZyBtYXRjaCkKICBzdGF0aWMgY29uc3QgaW50IHN0cmF0ZWd5SHVmZm1hbk9ubHkgPSAyOwogIEBEZXByZWNhdGVkKCJVc2Ugc3RyYXRlZ3lIdWZmbWFuT25seSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFNUUkFURUdZX0hVRkZNQU5fT05MWSA9IDI7CgogIC8vLyBVc2UgdGhpcyBzdHJhdGVneSB0byBsaW1pdCBtYXRjaCBkaXN0YW5jZXMgdG8gb25lIChydW4tbGVuZ3RoIGVuY29kaW5nKQogIHN0YXRpYyBjb25zdCBpbnQgc3RyYXRlZ3lSbGUgPSAzOwogIEBEZXByZWNhdGVkKCJVc2Ugc3RyYXRlZ3lSbGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBTVFJBVEVHWV9STEUgPSAzOwoKICAvLy8gVGhpcyBzdHJhdGVneSBwcmV2ZW50cyB0aGUgdXNlIG9mIGR5bmFtaWMgSHVmZm1hbiBjb2RlcywgYWxsb3dpbmcgZm9yIGEKICAvLy8gc2ltcGxlciBkZWNvZGVyCiAgc3RhdGljIGNvbnN0IGludCBzdHJhdGVneUZpeGVkID0gNDsKICBARGVwcmVjYXRlZCgiVXNlIHN0cmF0ZWd5Rml4ZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBTVFJBVEVHWV9GSVhFRCA9IDQ7CgogIC8vLyBSZWNvbW1lbmRlZCBzdHJhdGVneSBmb3Igbm9ybWFsIGRhdGEKICBzdGF0aWMgY29uc3QgaW50IHN0cmF0ZWd5RGVmYXVsdCA9IDA7CiAgQERlcHJlY2F0ZWQoIlVzZSBzdHJhdGVneURlZmF1bHQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBTVFJBVEVHWV9ERUZBVUxUID0gMDsKfQoKLyoqCiAqIEFuIGluc3RhbmNlIG9mIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBbWkxpYkNvZGVjXS4KICovCmNvbnN0IFpMaWJDb2RlYyB6bGliID0gY29uc3QgWkxpYkNvZGVjLl9kZWZhdWx0KCk7CkBEZXByZWNhdGVkKCJVc2UgemxpYiBpbnN0ZWFkIikKY29uc3QgWkxpYkNvZGVjIFpMSUIgPSB6bGliOwoKLyoqCiAqIFRoZSBbWkxpYkNvZGVjXSBlbmNvZGVzIHJhdyBieXRlcyB0byBaTGliIGNvbXByZXNzZWQgYnl0ZXMgYW5kIGRlY29kZXMgWkxpYgogKiBjb21wcmVzc2VkIGJ5dGVzIHRvIHJhdyBieXRlcy4KICovCmNsYXNzIFpMaWJDb2RlYyBleHRlbmRzIENvZGVjPExpc3Q8aW50PiwgTGlzdDxpbnQ+PiB7CiAgLyoqCiAgICogV2hlbiB0cnVlLCBgR1ppcGAgZnJhbWVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGNvbXByZXNzZWQgZGF0YS4KICAgKi8KICBmaW5hbCBib29sIGd6aXA7CgogIC8qKgogICAqIFRoZSBjb21wcmVzc2lvbi1bbGV2ZWxdIGNhbiBiZSBzZXQgaW4gdGhlIHJhbmdlIG9mIGAtMS4uOWAsIHdpdGggYDZgIGJlaW5nCiAgICogdGhlIGRlZmF1bHQgY29tcHJlc3Npb24gbGV2ZWwuIExldmVscyBhYm92ZSBgNmAgd2lsbCBoYXZlIGhpZ2hlcgogICAqIGNvbXByZXNzaW9uIHJhdGVzIGF0IHRoZSBjb3N0IG9mIG1vcmUgQ1BVIGFuZCBtZW1vcnkgdXNhZ2UuIExldmVscyBiZWxvdwogICAqIGA2YCB3aWxsIHVzZSBsZXNzIENQVSBhbmQgbWVtb3J5IGF0IHRoZSBjb3N0IG9mIGxvd2VyIGNvbXByZXNzaW9uIHJhdGVzLgogICAqLwogIGZpbmFsIGludCBsZXZlbDsKCiAgLyoqCiAgICogU3BlY2lmaWVzIGhvdyBtdWNoIG1lbW9yeSBzaG91bGQgYmUgYWxsb2NhdGVkIGZvciB0aGUgaW50ZXJuYWwgY29tcHJlc3Npb24KICAgKiBzdGF0ZS4gYDFgIHVzZXMgbWluaW11bSBtZW1vcnkgYnV0IGlzIHNsb3cgYW5kIHJlZHVjZXMgY29tcHJlc3Npb24gcmF0aW87CiAgICogYDlgIHVzZXMgbWF4aW11bSBtZW1vcnkgZm9yIG9wdGltYWwgc3BlZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGA4YC4KICAgKgogICAqIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBkZWZsYXRlIGFyZSAoaW4gYnl0ZXMpOgogICAqCiAgICogICAgICgxIDw8ICh3aW5kb3dCaXRzICsgMikpICsgICgxIDw8IChtZW1MZXZlbCArIDkpKQogICAqIHRoYXQgaXM6IDEyOEsgZm9yIHdpbmRvd0JpdHMgPSAxNSArIDEyOEsgZm9yIG1lbUxldmVsID0gOCAoZGVmYXVsdCB2YWx1ZXMpCiAgICovCiAgZmluYWwgaW50IG1lbUxldmVsOwoKICAvKioKICAgKiBUdW5lcyB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBVc2UgdGhlIHZhbHVlIHN0cmF0ZWd5RGVmYXVsdCBmb3Igbm9ybWFsCiAgICogZGF0YSwgc3RyYXRlZ3lGaWx0ZXJlZCBmb3IgZGF0YSBwcm9kdWNlZCBieSBhIGZpbHRlciAob3IgcHJlZGljdG9yKSwKICAgKiBzdHJhdGVneUh1ZmZtYW5Pbmx5IHRvIGZvcmNlIEh1ZmZtYW4gZW5jb2Rpbmcgb25seSAobm8gc3RyaW5nIG1hdGNoKSwgb3IKICAgKiBzdHJhdGVneVJsZSB0byBsaW1pdCBtYXRjaCBkaXN0YW5jZXMgdG8gb25lIChydW4tbGVuZ3RoIGVuY29kaW5nKS4KICAgKi8KICBmaW5hbCBpbnQgc3RyYXRlZ3k7CgogIC8qKgogICAqIEJhc2UgdHdvIGxvZ2FyaXRobSBvZiB0aGUgd2luZG93IHNpemUgKHRoZSBzaXplIG9mIHRoZSBoaXN0b3J5IGJ1ZmZlcikuIEl0CiAgICogc2hvdWxkIGJlIGluIHRoZSByYW5nZSA4Li4xNS4gTGFyZ2VyIHZhbHVlcyByZXN1bHQgaW4gYmV0dGVyIGNvbXByZXNzaW9uIGF0CiAgICogdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxNQogICAqLwogIGZpbmFsIGludCB3aW5kb3dCaXRzOwoKICAvKioKICAgKiBXaGVuIHRydWUsIGRlZmxhdGUgZ2VuZXJhdGVzIHJhdyBkYXRhIHdpdGggbm8gemxpYiBoZWFkZXIgb3IgdHJhaWxlciwgYW5kCiAgICogd2lsbCBub3QgY29tcHV0ZSBhbiBhZGxlcjMyIGNoZWNrIHZhbHVlCiAgICovCiAgZmluYWwgYm9vbCByYXc7CgogIC8qKgogICAqIEluaXRpYWwgY29tcHJlc3Npb24gZGljdGlvbmFyeS4KICAgKgogICAqIEl0IHNob3VsZCBjb25zaXN0IG9mIHN0cmluZ3MgKGJ5dGUgc2VxdWVuY2VzKSB0aGF0IGFyZSBsaWtlbHkgdG8gYmUKICAgKiBlbmNvdW50ZXJlZCBsYXRlciBpbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkLCB3aXRoIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQKICAgKiBzdHJpbmdzIHByZWZlcmFibHkgcHV0IHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgZGljdGlvbmFyeS4gVXNpbmcgYQogICAqIGRpY3Rpb25hcnkgaXMgbW9zdCB1c2VmdWwgd2hlbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkIGlzIHNob3J0IGFuZCBjYW4KICAgKiBiZSBwcmVkaWN0ZWQgd2l0aCBnb29kIGFjY3VyYWN5OyB0aGUgZGF0YSBjYW4gdGhlbiBiZSBjb21wcmVzc2VkIGJldHRlcgogICAqIHRoYW4gd2l0aCB0aGUgZGVmYXVsdCBlbXB0eSBkaWN0aW9uYXJ5LgogICAqLwogIGZpbmFsIExpc3Q8aW50PiBkaWN0aW9uYXJ5OwoKICBaTGliQ29kZWMoCiAgICAgIHt0aGlzLmxldmVsOiBaTGliT3B0aW9uLmRlZmF1bHRMZXZlbCwKICAgICAgdGhpcy53aW5kb3dCaXRzOiBaTGliT3B0aW9uLmRlZmF1bHRXaW5kb3dCaXRzLAogICAgICB0aGlzLm1lbUxldmVsOiBaTGliT3B0aW9uLmRlZmF1bHRNZW1MZXZlbCwKICAgICAgdGhpcy5zdHJhdGVneTogWkxpYk9wdGlvbi5zdHJhdGVneURlZmF1bHQsCiAgICAgIHRoaXMuZGljdGlvbmFyeSwKICAgICAgdGhpcy5yYXc6IGZhbHNlLAogICAgICB0aGlzLmd6aXA6IGZhbHNlfSkgewogICAgX3ZhbGlkYXRlWkxpYmVMZXZlbChsZXZlbCk7CiAgICBfdmFsaWRhdGVaTGliTWVtTGV2ZWwobWVtTGV2ZWwpOwogICAgX3ZhbGlkYXRlWkxpYlN0cmF0ZWd5KHN0cmF0ZWd5KTsKICAgIF92YWxpZGF0ZVpMaWJXaW5kb3dCaXRzKHdpbmRvd0JpdHMpOwogIH0KCiAgY29uc3QgWkxpYkNvZGVjLl9kZWZhdWx0KCkKICAgICAgOiBsZXZlbCA9IFpMaWJPcHRpb24uZGVmYXVsdExldmVsLAogICAgICAgIHdpbmRvd0JpdHMgPSBaTGliT3B0aW9uLmRlZmF1bHRXaW5kb3dCaXRzLAogICAgICAgIG1lbUxldmVsID0gWkxpYk9wdGlvbi5kZWZhdWx0TWVtTGV2ZWwsCiAgICAgICAgc3RyYXRlZ3kgPSBaTGliT3B0aW9uLnN0cmF0ZWd5RGVmYXVsdCwKICAgICAgICByYXcgPSBmYWxzZSwKICAgICAgICBnemlwID0gZmFsc2UsCiAgICAgICAgZGljdGlvbmFyeSA9IG51bGw7CgogIC8qKgogICAqIEdldCBhIFtaTGliRW5jb2Rlcl0gZm9yIGVuY29kaW5nIHRvIGBaTGliYCBjb21wcmVzc2VkIGRhdGEuCiAgICovCiAgWkxpYkVuY29kZXIgZ2V0IGVuY29kZXIgPT4gbmV3IFpMaWJFbmNvZGVyKAogICAgICBnemlwOiBmYWxzZSwKICAgICAgbGV2ZWw6IGxldmVsLAogICAgICB3aW5kb3dCaXRzOiB3aW5kb3dCaXRzLAogICAgICBtZW1MZXZlbDogbWVtTGV2ZWwsCiAgICAgIHN0cmF0ZWd5OiBzdHJhdGVneSwKICAgICAgZGljdGlvbmFyeTogZGljdGlvbmFyeSwKICAgICAgcmF3OiByYXcpOwoKICAvKioKICAgKiBHZXQgYSBbWkxpYkRlY29kZXJdIGZvciBkZWNvZGluZyBgWkxpYmAgY29tcHJlc3NlZCBkYXRhLgogICAqLwogIFpMaWJEZWNvZGVyIGdldCBkZWNvZGVyID0+CiAgICAgIG5ldyBaTGliRGVjb2Rlcih3aW5kb3dCaXRzOiB3aW5kb3dCaXRzLCBkaWN0aW9uYXJ5OiBkaWN0aW9uYXJ5LCByYXc6IHJhdyk7Cn0KCi8qKgogKiBBbiBpbnN0YW5jZSBvZiB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgW0daaXBDb2RlY10uCiAqLwpjb25zdCBHWmlwQ29kZWMgZ3ppcCA9IGNvbnN0IEdaaXBDb2RlYy5fZGVmYXVsdCgpOwpARGVwcmVjYXRlZCgiVXNlIGd6aXAgaW5zdGVhZCIpCmNvbnN0IEdaaXBDb2RlYyBHWklQID0gZ3ppcDsKCi8qKgogKiBUaGUgW0daaXBDb2RlY10gZW5jb2RlcyByYXcgYnl0ZXMgdG8gR1ppcCBjb21wcmVzc2VkIGJ5dGVzIGFuZCBkZWNvZGVzIEdaaXAKICogY29tcHJlc3NlZCBieXRlcyB0byByYXcgYnl0ZXMuCiAqCiAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gW1pMaWJDb2RlY10gYW5kIFtHWmlwQ29kZWNdIGlzIHRoYXQgdGhlIFtHWmlwQ29kZWNdCiAqIHdyYXBzIHRoZSBgWkxpYmAgY29tcHJlc3NlZCBieXRlcyBpbiBgR1ppcGAgZnJhbWVzLgogKi8KY2xhc3MgR1ppcENvZGVjIGV4dGVuZHMgQ29kZWM8TGlzdDxpbnQ+LCBMaXN0PGludD4+IHsKICAvKioKICAgKiBXaGVuIHRydWUsIGBHWmlwYCBmcmFtZXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgY29tcHJlc3NlZCBkYXRhLgogICAqLwogIGZpbmFsIGJvb2wgZ3ppcDsKCiAgLyoqCiAgICogVGhlIGNvbXByZXNzaW9uLVtsZXZlbF0gY2FuIGJlIHNldCBpbiB0aGUgcmFuZ2Ugb2YgYC0xLi45YCwgd2l0aCBgNmAgYmVpbmcKICAgKiB0aGUgZGVmYXVsdCBjb21wcmVzc2lvbiBsZXZlbC4gTGV2ZWxzIGFib3ZlIGA2YCB3aWxsIGhhdmUgaGlnaGVyCiAgICogY29tcHJlc3Npb24gcmF0ZXMgYXQgdGhlIGNvc3Qgb2YgbW9yZSBDUFUgYW5kIG1lbW9yeSB1c2FnZS4gTGV2ZWxzIGJlbG93CiAgICogYDZgIHdpbGwgdXNlIGxlc3MgQ1BVIGFuZCBtZW1vcnkgYXQgdGhlIGNvc3Qgb2YgbG93ZXIgY29tcHJlc3Npb24gcmF0ZXMuCiAgICovCiAgZmluYWwgaW50IGxldmVsOwoKICAvKioKICAgKiBTcGVjaWZpZXMgaG93IG11Y2ggbWVtb3J5IHNob3VsZCBiZSBhbGxvY2F0ZWQgZm9yIHRoZSBpbnRlcm5hbCBjb21wcmVzc2lvbgogICAqIHN0YXRlLiBgMWAgdXNlcyBtaW5pbXVtIG1lbW9yeSBidXQgaXMgc2xvdyBhbmQgcmVkdWNlcyBjb21wcmVzc2lvbiByYXRpbzsKICAgKiBgOWAgdXNlcyBtYXhpbXVtIG1lbW9yeSBmb3Igb3B0aW1hbCBzcGVlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDhgLgogICAqCiAgICogVGhlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGRlZmxhdGUgYXJlIChpbiBieXRlcyk6CiAgICoKICAgKiAgICAgKDEgPDwgKHdpbmRvd0JpdHMgKyAyKSkgKyAgKDEgPDwgKG1lbUxldmVsICsgOSkpCiAgICogdGhhdCBpczogMTI4SyBmb3Igd2luZG93Qml0cyA9IDE1ICsgMTI4SyBmb3IgbWVtTGV2ZWwgPSA4IChkZWZhdWx0IHZhbHVlcykKICAgKi8KICBmaW5hbCBpbnQgbWVtTGV2ZWw7CgogIC8qKgogICAqIFR1bmVzIHRoZSBjb21wcmVzc2lvbiBhbGdvcml0aG0uIFVzZSB0aGUgdmFsdWUKICAgKiBbWkxpYk9wdGlvbi5zdHJhdGVneURlZmF1bHRdIGZvciBub3JtYWwgZGF0YSwKICAgKiBbWkxpYk9wdGlvbi5zdHJhdGVneUZpbHRlcmVkXSBmb3IgZGF0YSBwcm9kdWNlZCBieSBhIGZpbHRlcgogICAqIChvciBwcmVkaWN0b3IpLCBbWkxpYk9wdGlvbi5zdHJhdGVneUh1ZmZtYW5Pbmx5XSB0byBmb3JjZSBIdWZmbWFuCiAgICogZW5jb2Rpbmcgb25seSAobm8gc3RyaW5nIG1hdGNoKSwgb3IgW1pMaWJPcHRpb24uc3RyYXRlZ3lSbGVdIHRvIGxpbWl0CiAgICogbWF0Y2ggZGlzdGFuY2VzIHRvIG9uZSAocnVuLWxlbmd0aCBlbmNvZGluZykuCiAgICovCiAgZmluYWwgaW50IHN0cmF0ZWd5OwoKICAvKioKICAgKiBCYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplICh0aGUgc2l6ZSBvZiB0aGUgaGlzdG9yeSBidWZmZXIpLiBJdAogICAqIHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgYDguLjE1YC4gTGFyZ2VyIHZhbHVlcyByZXN1bHQgaW4gYmV0dGVyIGNvbXByZXNzaW9uCiAgICogYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMTVgCiAgICovCiAgZmluYWwgaW50IHdpbmRvd0JpdHM7CgogIC8qKgogICAqIEluaXRpYWwgY29tcHJlc3Npb24gZGljdGlvbmFyeS4KICAgKgogICAqIEl0IHNob3VsZCBjb25zaXN0IG9mIHN0cmluZ3MgKGJ5dGUgc2VxdWVuY2VzKSB0aGF0IGFyZSBsaWtlbHkgdG8gYmUKICAgKiBlbmNvdW50ZXJlZCBsYXRlciBpbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkLCB3aXRoIHRoZSBtb3N0IGNvbW1vbmx5IHVzZWQKICAgKiBzdHJpbmdzIHByZWZlcmFibHkgcHV0IHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgZGljdGlvbmFyeS4gVXNpbmcgYQogICAqIGRpY3Rpb25hcnkgaXMgbW9zdCB1c2VmdWwgd2hlbiB0aGUgZGF0YSB0byBiZSBjb21wcmVzc2VkIGlzIHNob3J0IGFuZCBjYW4KICAgKiBiZSBwcmVkaWN0ZWQgd2l0aCBnb29kIGFjY3VyYWN5OyB0aGUgZGF0YSBjYW4gdGhlbiBiZSBjb21wcmVzc2VkIGJldHRlcgogICAqIHRoYW4gd2l0aCB0aGUgZGVmYXVsdCBlbXB0eSBkaWN0aW9uYXJ5LgogICAqLwogIGZpbmFsIExpc3Q8aW50PiBkaWN0aW9uYXJ5OwoKICAvKioKICAgKiBXaGVuIHRydWUsIGRlZmxhdGUgZ2VuZXJhdGVzIHJhdyBkYXRhIHdpdGggbm8gemxpYiBoZWFkZXIgb3IgdHJhaWxlciwgYW5kCiAgICogd2lsbCBub3QgY29tcHV0ZSBhbiBhZGxlcjMyIGNoZWNrIHZhbHVlCiAgICovCiAgZmluYWwgYm9vbCByYXc7CgogIEdaaXBDb2RlYygKICAgICAge3RoaXMubGV2ZWw6IFpMaWJPcHRpb24uZGVmYXVsdExldmVsLAogICAgICB0aGlzLndpbmRvd0JpdHM6IFpMaWJPcHRpb24uZGVmYXVsdFdpbmRvd0JpdHMsCiAgICAgIHRoaXMubWVtTGV2ZWw6IFpMaWJPcHRpb24uZGVmYXVsdE1lbUxldmVsLAogICAgICB0aGlzLnN0cmF0ZWd5OiBaTGliT3B0aW9uLnN0cmF0ZWd5RGVmYXVsdCwKICAgICAgdGhpcy5kaWN0aW9uYXJ5LAogICAgICB0aGlzLnJhdzogZmFsc2UsCiAgICAgIHRoaXMuZ3ppcDogdHJ1ZX0pIHsKICAgIF92YWxpZGF0ZVpMaWJlTGV2ZWwobGV2ZWwpOwogICAgX3ZhbGlkYXRlWkxpYk1lbUxldmVsKG1lbUxldmVsKTsKICAgIF92YWxpZGF0ZVpMaWJTdHJhdGVneShzdHJhdGVneSk7CiAgICBfdmFsaWRhdGVaTGliV2luZG93Qml0cyh3aW5kb3dCaXRzKTsKICB9CgogIGNvbnN0IEdaaXBDb2RlYy5fZGVmYXVsdCgpCiAgICAgIDogbGV2ZWwgPSBaTGliT3B0aW9uLmRlZmF1bHRMZXZlbCwKICAgICAgICB3aW5kb3dCaXRzID0gWkxpYk9wdGlvbi5kZWZhdWx0V2luZG93Qml0cywKICAgICAgICBtZW1MZXZlbCA9IFpMaWJPcHRpb24uZGVmYXVsdE1lbUxldmVsLAogICAgICAgIHN0cmF0ZWd5ID0gWkxpYk9wdGlvbi5zdHJhdGVneURlZmF1bHQsCiAgICAgICAgcmF3ID0gZmFsc2UsCiAgICAgICAgZ3ppcCA9IHRydWUsCiAgICAgICAgZGljdGlvbmFyeSA9IG51bGw7CgogIC8qKgogICAqIEdldCBhIFtaTGliRW5jb2Rlcl0gZm9yIGVuY29kaW5nIHRvIGBHWmlwYCBjb21wcmVzc2VkIGRhdGEuCiAgICovCiAgWkxpYkVuY29kZXIgZ2V0IGVuY29kZXIgPT4gbmV3IFpMaWJFbmNvZGVyKAogICAgICBnemlwOiB0cnVlLAogICAgICBsZXZlbDogbGV2ZWwsCiAgICAgIHdpbmRvd0JpdHM6IHdpbmRvd0JpdHMsCiAgICAgIG1lbUxldmVsOiBtZW1MZXZlbCwKICAgICAgc3RyYXRlZ3k6IHN0cmF0ZWd5LAogICAgICBkaWN0aW9uYXJ5OiBkaWN0aW9uYXJ5LAogICAgICByYXc6IHJhdyk7CgogIC8qKgogICAqIEdldCBhIFtaTGliRGVjb2Rlcl0gZm9yIGRlY29kaW5nIGBHWmlwYCBjb21wcmVzc2VkIGRhdGEuCiAgICovCiAgWkxpYkRlY29kZXIgZ2V0IGRlY29kZXIgPT4KICAgICAgbmV3IFpMaWJEZWNvZGVyKHdpbmRvd0JpdHM6IHdpbmRvd0JpdHMsIGRpY3Rpb25hcnk6IGRpY3Rpb25hcnksIHJhdzogcmF3KTsKfQoKLyoqCiAqIFRoZSBbWkxpYkVuY29kZXJdIGVuY29kZXIgaXMgdXNlZCBieSBbWkxpYkNvZGVjXSBhbmQgW0daaXBDb2RlY10gdG8gY29tcHJlc3MKICogZGF0YS4KICovCmNsYXNzIFpMaWJFbmNvZGVyIGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgTGlzdDxpbnQ+PiB7CiAgLyoqCiAgICogV2hlbiB0cnVlLCBgR1ppcGAgZnJhbWVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGNvbXByZXNzZWQgZGF0YS4KICAgKi8KICBmaW5hbCBib29sIGd6aXA7CgogIC8qKgogICAqIFRoZSBjb21wcmVzc2lvbi1bbGV2ZWxdIGNhbiBiZSBzZXQgaW4gdGhlIHJhbmdlIG9mIGAtMS4uOWAsIHdpdGggYDZgIGJlaW5nCiAgICogdGhlIGRlZmF1bHQgY29tcHJlc3Npb24gbGV2ZWwuIExldmVscyBhYm92ZSBgNmAgd2lsbCBoYXZlIGhpZ2hlcgogICAqIGNvbXByZXNzaW9uIHJhdGVzIGF0IHRoZSBjb3N0IG9mIG1vcmUgQ1BVIGFuZCBtZW1vcnkgdXNhZ2UuIExldmVscyBiZWxvdwogICAqIGA2YCB3aWxsIHVzZSBsZXNzIENQVSBhbmQgbWVtb3J5IGF0IHRoZSBjb3N0IG9mIGxvd2VyIGNvbXByZXNzaW9uIHJhdGVzLgogICAqLwogIGZpbmFsIGludCBsZXZlbDsKCiAgLyoqCiAgICogU3BlY2lmaWVzIGhvdyBtdWNoIG1lbW9yeSBzaG91bGQgYmUgYWxsb2NhdGVkIGZvciB0aGUgaW50ZXJuYWwgY29tcHJlc3Npb24KICAgKiBzdGF0ZS4gYDFgIHVzZXMgbWluaW11bSBtZW1vcnkgYnV0IGlzIHNsb3cgYW5kIHJlZHVjZXMgY29tcHJlc3Npb24gcmF0aW87CiAgICogYDlgIHVzZXMgbWF4aW11bSBtZW1vcnkgZm9yIG9wdGltYWwgc3BlZWQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGA4YC4KICAgKgogICAqIFRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBkZWZsYXRlIGFyZSAoaW4gYnl0ZXMpOgogICAqCiAgICogICAgICgxIDw8ICh3aW5kb3dCaXRzICsgMikpICsgICgxIDw8IChtZW1MZXZlbCArIDkpKQogICAqIHRoYXQgaXM6IDEyOEsgZm9yIHdpbmRvd0JpdHMgPSAxNSArIDEyOEsgZm9yIG1lbUxldmVsID0gOCAoZGVmYXVsdCB2YWx1ZXMpCiAgICovCiAgZmluYWwgaW50IG1lbUxldmVsOwoKICAvKioKICAgKiBUdW5lcyB0aGUgY29tcHJlc3Npb24gYWxnb3JpdGhtLiBVc2UgdGhlIHZhbHVlCiAgICogW1pMaWJPcHRpb24uc3RyYXRlZ3lEZWZhdWx0XSBmb3Igbm9ybWFsIGRhdGEsCiAgICogW1pMaWJPcHRpb24uc3RyYXRlZ3lGaWx0ZXJlZF0gZm9yIGRhdGEgcHJvZHVjZWQgYnkgYSBmaWx0ZXIKICAgKiAob3IgcHJlZGljdG9yKSwgW1pMaWJPcHRpb24uc3RyYXRlZ3lIdWZmbWFuT25seV0gdG8gZm9yY2UgSHVmZm1hbgogICAqIGVuY29kaW5nIG9ubHkgKG5vIHN0cmluZyBtYXRjaCksIG9yIFtaTGliT3B0aW9uLnN0cmF0ZWd5UmxlXSB0byBsaW1pdAogICAqIG1hdGNoIGRpc3RhbmNlcyB0byBvbmUgKHJ1bi1sZW5ndGggZW5jb2RpbmcpLgogICAqLwogIGZpbmFsIGludCBzdHJhdGVneTsKCiAgLyoqCiAgICogQmFzZSB0d28gbG9nYXJpdGhtIG9mIHRoZSB3aW5kb3cgc2l6ZSAodGhlIHNpemUgb2YgdGhlIGhpc3RvcnkgYnVmZmVyKS4gSXQKICAgKiBzaG91bGQgYmUgaW4gdGhlIHJhbmdlIGA4Li4xNWAuIExhcmdlciB2YWx1ZXMgcmVzdWx0IGluIGJldHRlciBjb21wcmVzc2lvbgogICAqIGF0IHRoZSBleHBlbnNlIG9mIG1lbW9yeSB1c2FnZS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYDE1YAogICAqLwogIGZpbmFsIGludCB3aW5kb3dCaXRzOwoKICAvKioKICAgKiBJbml0aWFsIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkuCiAgICoKICAgKiBJdCBzaG91bGQgY29uc2lzdCBvZiBzdHJpbmdzIChieXRlIHNlcXVlbmNlcykgdGhhdCBhcmUgbGlrZWx5IHRvIGJlCiAgICogZW5jb3VudGVyZWQgbGF0ZXIgaW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCwgd2l0aCB0aGUgbW9zdCBjb21tb25seSB1c2VkCiAgICogc3RyaW5ncyBwcmVmZXJhYmx5IHB1dCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnkuIFVzaW5nIGEKICAgKiBkaWN0aW9uYXJ5IGlzIG1vc3QgdXNlZnVsIHdoZW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCBpcyBzaG9ydCBhbmQgY2FuCiAgICogYmUgcHJlZGljdGVkIHdpdGggZ29vZCBhY2N1cmFjeTsgdGhlIGRhdGEgY2FuIHRoZW4gYmUgY29tcHJlc3NlZCBiZXR0ZXIKICAgKiB0aGFuIHdpdGggdGhlIGRlZmF1bHQgZW1wdHkgZGljdGlvbmFyeS4KICAgKi8KICBmaW5hbCBMaXN0PGludD4gZGljdGlvbmFyeTsKCiAgLyoqCiAgICogV2hlbiB0cnVlLCBkZWZsYXRlIGdlbmVyYXRlcyByYXcgZGF0YSB3aXRoIG5vIHpsaWIgaGVhZGVyIG9yIHRyYWlsZXIsIGFuZAogICAqIHdpbGwgbm90IGNvbXB1dGUgYW4gYWRsZXIzMiBjaGVjayB2YWx1ZQogICAqLwogIGZpbmFsIGJvb2wgcmF3OwoKICBaTGliRW5jb2RlcigKICAgICAge3RoaXMuZ3ppcDogZmFsc2UsCiAgICAgIHRoaXMubGV2ZWw6IFpMaWJPcHRpb24uZGVmYXVsdExldmVsLAogICAgICB0aGlzLndpbmRvd0JpdHM6IFpMaWJPcHRpb24uZGVmYXVsdFdpbmRvd0JpdHMsCiAgICAgIHRoaXMubWVtTGV2ZWw6IFpMaWJPcHRpb24uZGVmYXVsdE1lbUxldmVsLAogICAgICB0aGlzLnN0cmF0ZWd5OiBaTGliT3B0aW9uLnN0cmF0ZWd5RGVmYXVsdCwKICAgICAgdGhpcy5kaWN0aW9uYXJ5LAogICAgICB0aGlzLnJhdzogZmFsc2V9KSB7CiAgICBfdmFsaWRhdGVaTGliZUxldmVsKGxldmVsKTsKICAgIF92YWxpZGF0ZVpMaWJNZW1MZXZlbChtZW1MZXZlbCk7CiAgICBfdmFsaWRhdGVaTGliU3RyYXRlZ3koc3RyYXRlZ3kpOwogICAgX3ZhbGlkYXRlWkxpYldpbmRvd0JpdHMod2luZG93Qml0cyk7CiAgfQoKICAvKioKICAgKiBDb252ZXJ0IGEgbGlzdCBvZiBieXRlcyB1c2luZyB0aGUgb3B0aW9ucyBnaXZlbiB0byB0aGUgWkxpYkVuY29kZXIKICAgKiBjb25zdHJ1Y3Rvci4KICAgKi8KICBMaXN0PGludD4gY29udmVydChMaXN0PGludD4gYnl0ZXMpIHsKICAgIF9CdWZmZXJTaW5rIHNpbmsgPSBuZXcgX0J1ZmZlclNpbmsoKTsKICAgIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oc2luaykKICAgICAgLi5hZGQoYnl0ZXMpCiAgICAgIC4uY2xvc2UoKTsKICAgIHJldHVybiBzaW5rLmJ1aWxkZXIudGFrZUJ5dGVzKCk7CiAgfQoKICAvKioKICAgKiBTdGFydCBhIGNodW5rZWQgY29udmVyc2lvbiB1c2luZyB0aGUgb3B0aW9ucyBnaXZlbiB0byB0aGUgW1pMaWJFbmNvZGVyXQogICAqIGNvbnN0cnVjdG9yLiBXaGlsZSBpdCBhY2NlcHRzIGFueSBbU2lua10gdGFraW5nIFtMaXN0PGludD5dJ3MsCiAgICogdGhlIG9wdGltYWwgc2luayB0byBiZSBwYXNzZWQgYXMgW3NpbmtdIGlzIGEgW0J5dGVDb252ZXJzaW9uU2lua10uCiAgICovCiAgQnl0ZUNvbnZlcnNpb25TaW5rIHN0YXJ0Q2h1bmtlZENvbnZlcnNpb24oU2luazxMaXN0PGludD4+IHNpbmspIHsKICAgIGlmIChzaW5rIGlzISBCeXRlQ29udmVyc2lvblNpbmspIHsKICAgICAgc2luayA9IG5ldyBCeXRlQ29udmVyc2lvblNpbmsuZnJvbShzaW5rKTsKICAgIH0KICAgIHJldHVybiBuZXcgX1pMaWJFbmNvZGVyU2luay5fKAogICAgICAgIHNpbmssIGd6aXAsIGxldmVsLCB3aW5kb3dCaXRzLCBtZW1MZXZlbCwgc3RyYXRlZ3ksIGRpY3Rpb25hcnksIHJhdyk7CiAgfQp9CgovKioKICogVGhlIFtaTGliRGVjb2Rlcl0gaXMgdXNlZCBieSBbWkxpYkNvZGVjXSBhbmQgW0daaXBDb2RlY10gdG8gZGVjb21wcmVzcyBkYXRhLgogKi8KY2xhc3MgWkxpYkRlY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8TGlzdDxpbnQ+LCBMaXN0PGludD4+IHsKICAvKioKICAgKiBCYXNlIHR3byBsb2dhcml0aG0gb2YgdGhlIHdpbmRvdyBzaXplICh0aGUgc2l6ZSBvZiB0aGUgaGlzdG9yeSBidWZmZXIpLiBJdAogICAqIHNob3VsZCBiZSBpbiB0aGUgcmFuZ2UgYDguLjE1YC4gTGFyZ2VyIHZhbHVlcyByZXN1bHQgaW4gYmV0dGVyIGNvbXByZXNzaW9uCiAgICogYXQgdGhlIGV4cGVuc2Ugb2YgbWVtb3J5IHVzYWdlLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgMTVgLgogICAqLwogIGZpbmFsIGludCB3aW5kb3dCaXRzOwoKICAvKioKICAgKiBJbml0aWFsIGNvbXByZXNzaW9uIGRpY3Rpb25hcnkuCiAgICoKICAgKiBJdCBzaG91bGQgY29uc2lzdCBvZiBzdHJpbmdzIChieXRlIHNlcXVlbmNlcykgdGhhdCBhcmUgbGlrZWx5IHRvIGJlCiAgICogZW5jb3VudGVyZWQgbGF0ZXIgaW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCwgd2l0aCB0aGUgbW9zdCBjb21tb25seSB1c2VkCiAgICogc3RyaW5ncyBwcmVmZXJhYmx5IHB1dCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGRpY3Rpb25hcnkuIFVzaW5nIGEKICAgKiBkaWN0aW9uYXJ5IGlzIG1vc3QgdXNlZnVsIHdoZW4gdGhlIGRhdGEgdG8gYmUgY29tcHJlc3NlZCBpcyBzaG9ydCBhbmQgY2FuCiAgICogYmUgcHJlZGljdGVkIHdpdGggZ29vZCBhY2N1cmFjeTsgdGhlIGRhdGEgY2FuIHRoZW4gYmUgY29tcHJlc3NlZCBiZXR0ZXIKICAgKiB0aGFuIHdpdGggdGhlIGRlZmF1bHQgZW1wdHkgZGljdGlvbmFyeS4KICAgKi8KICBmaW5hbCBMaXN0PGludD4gZGljdGlvbmFyeTsKCiAgLyoqCiAgICogV2hlbiB0cnVlLCBkZWZsYXRlIGdlbmVyYXRlcyByYXcgZGF0YSB3aXRoIG5vIHpsaWIgaGVhZGVyIG9yIHRyYWlsZXIsIGFuZAogICAqIHdpbGwgbm90IGNvbXB1dGUgYW4gYWRsZXIzMiBjaGVjayB2YWx1ZQogICAqLwogIGZpbmFsIGJvb2wgcmF3OwoKICBaTGliRGVjb2RlcigKICAgICAge3RoaXMud2luZG93Qml0czogWkxpYk9wdGlvbi5kZWZhdWx0V2luZG93Qml0cywKICAgICAgdGhpcy5kaWN0aW9uYXJ5LAogICAgICB0aGlzLnJhdzogZmFsc2V9KSB7CiAgICBfdmFsaWRhdGVaTGliV2luZG93Qml0cyh3aW5kb3dCaXRzKTsKICB9CgogIC8qKgogICAqIENvbnZlcnQgYSBsaXN0IG9mIGJ5dGVzIHVzaW5nIHRoZSBvcHRpb25zIGdpdmVuIHRvIHRoZSBbWkxpYkRlY29kZXJdCiAgICogY29uc3RydWN0b3IuCiAgICovCiAgTGlzdDxpbnQ+IGNvbnZlcnQoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICBfQnVmZmVyU2luayBzaW5rID0gbmV3IF9CdWZmZXJTaW5rKCk7CiAgICBzdGFydENodW5rZWRDb252ZXJzaW9uKHNpbmspCiAgICAgIC4uYWRkKGJ5dGVzKQogICAgICAuLmNsb3NlKCk7CiAgICByZXR1cm4gc2luay5idWlsZGVyLnRha2VCeXRlcygpOwogIH0KCiAgLyoqCiAgICogU3RhcnQgYSBjaHVua2VkIGNvbnZlcnNpb24uIFdoaWxlIGl0IGFjY2VwdHMgYW55IFtTaW5rXQogICAqIHRha2luZyBbTGlzdDxpbnQ+XSdzLCB0aGUgb3B0aW1hbCBzaW5rIHRvIGJlIHBhc3NlZCBhcyBbc2lua10gaXMgYQogICAqIFtCeXRlQ29udmVyc2lvblNpbmtdLgogICAqLwogIEJ5dGVDb252ZXJzaW9uU2luayBzdGFydENodW5rZWRDb252ZXJzaW9uKFNpbms8TGlzdDxpbnQ+PiBzaW5rKSB7CiAgICBpZiAoc2luayBpcyEgQnl0ZUNvbnZlcnNpb25TaW5rKSB7CiAgICAgIHNpbmsgPSBuZXcgQnl0ZUNvbnZlcnNpb25TaW5rLmZyb20oc2luayk7CiAgICB9CiAgICByZXR1cm4gbmV3IF9aTGliRGVjb2RlclNpbmsuXyhzaW5rLCB3aW5kb3dCaXRzLCBkaWN0aW9uYXJ5LCByYXcpOwogIH0KfQoKLyoqCiAqIFRoZSBbUmF3WkxpYkZpbHRlcl0gY2xhc3MgcHJvdmlkZXMgYSBsb3ctbGV2ZWwgaW50ZXJmYWNlIHRvIHpsaWIuCiAqLwphYnN0cmFjdCBjbGFzcyBSYXdaTGliRmlsdGVyIHsKICAvKioKICAgKiBSZXR1cm5zIGEgYSBbUmF3WkxpYkZpbHRlcl0gd2hvc2UgW3Byb2Nlc3NdIGFuZCBbcHJvY2Vzc2VkXSBtZXRob2RzCiAgICogY29tcHJlc3MgZGF0YS4KICAgKi8KICBmYWN0b3J5IFJhd1pMaWJGaWx0ZXIuZGVmbGF0ZUZpbHRlcih7CiAgICBib29sIGd6aXA6IGZhbHNlLAogICAgaW50IGxldmVsOiBaTGliT3B0aW9uLmRlZmF1bHRMZXZlbCwKICAgIGludCB3aW5kb3dCaXRzOiBaTGliT3B0aW9uLmRlZmF1bHRXaW5kb3dCaXRzLAogICAgaW50IG1lbUxldmVsOiBaTGliT3B0aW9uLmRlZmF1bHRNZW1MZXZlbCwKICAgIGludCBzdHJhdGVneTogWkxpYk9wdGlvbi5zdHJhdGVneURlZmF1bHQsCiAgICBMaXN0PGludD4gZGljdGlvbmFyeSwKICAgIGJvb2wgcmF3OiBmYWxzZSwKICB9KSB7CiAgICByZXR1cm4gX21ha2VaTGliRGVmbGF0ZUZpbHRlcigKICAgICAgICBnemlwLCBsZXZlbCwgd2luZG93Qml0cywgbWVtTGV2ZWwsIHN0cmF0ZWd5LCBkaWN0aW9uYXJ5LCByYXcpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIGEgW1Jhd1pMaWJGaWx0ZXJdIHdob3NlIFtwcm9jZXNzXSBhbmQgW3Byb2Nlc3NlZF0gbWV0aG9kcwogICAqIGRlY29tcHJlc3MgZGF0YS4KICAgKi8KICBmYWN0b3J5IFJhd1pMaWJGaWx0ZXIuaW5mbGF0ZUZpbHRlcih7CiAgICBpbnQgd2luZG93Qml0czogWkxpYk9wdGlvbi5kZWZhdWx0V2luZG93Qml0cywKICAgIExpc3Q8aW50PiBkaWN0aW9uYXJ5LAogICAgYm9vbCByYXc6IGZhbHNlLAogIH0pIHsKICAgIHJldHVybiBfbWFrZVpMaWJJbmZsYXRlRmlsdGVyKHdpbmRvd0JpdHMsIGRpY3Rpb25hcnksIHJhdyk7CiAgfQoKICAvKioKICAgKiBDYWxsIHRvIHByb2Nlc3MgYSBjaHVuayBvZiBkYXRhLiBBIGNhbGwgdG8gW3Byb2Nlc3NdIHNob3VsZCBvbmx5IGJlIG1hZGUKICAgKiB3aGVuIFtwcm9jZXNzZWRdIHJldHVybnMgWzpudWxsOl0uCiAgICovCiAgdm9pZCBwcm9jZXNzKExpc3Q8aW50PiBkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQpOwoKICAvKioKICAgKiBHZXQgYSBjaHVuayBvZiBwcm9jZXNzZWQgZGF0YS4gV2hlbiB0aGVyZSBhcmUgbm8gbW9yZSBkYXRhIGF2YWlsYWJsZSwKICAgKiBbcHJvY2Vzc2VkXSB3aWxsIHJldHVybiBbOm51bGw6XS4gU2V0IFtmbHVzaF0gdG8gWzpmYWxzZTpdIGZvciBub24tZmluYWwKICAgKiBjYWxscyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIHNvbWUgZmlsdGVycy4KICAgKgogICAqIFRoZSBsYXN0IGNhbGwgdG8gW3Byb2Nlc3NlZF0gc2hvdWxkIGhhdmUgW2VuZF0gc2V0IHRvIFs6dHJ1ZTpdLiBUaGlzIHdpbGwKICAgKiBtYWtlIHN1cmUgYW4gJ2VuZCcgcGFja2V0IGlzIHdyaXR0ZW4gb24gdGhlIHN0cmVhbS4KICAgKi8KICBMaXN0PGludD4gcHJvY2Vzc2VkKHtib29sIGZsdXNoOiB0cnVlLCBib29sIGVuZDogZmFsc2V9KTsKCiAgZXh0ZXJuYWwgc3RhdGljIFJhd1pMaWJGaWx0ZXIgX21ha2VaTGliRGVmbGF0ZUZpbHRlcigKICAgICAgYm9vbCBnemlwLAogICAgICBpbnQgbGV2ZWwsCiAgICAgIGludCB3aW5kb3dCaXRzLAogICAgICBpbnQgbWVtTGV2ZWwsCiAgICAgIGludCBzdHJhdGVneSwKICAgICAgTGlzdDxpbnQ+IGRpY3Rpb25hcnksCiAgICAgIGJvb2wgcmF3KTsKCiAgZXh0ZXJuYWwgc3RhdGljIFJhd1pMaWJGaWx0ZXIgX21ha2VaTGliSW5mbGF0ZUZpbHRlcigKICAgICAgaW50IHdpbmRvd0JpdHMsIExpc3Q8aW50PiBkaWN0aW9uYXJ5LCBib29sIHJhdyk7Cn0KCmNsYXNzIF9CdWZmZXJTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rIHsKICBmaW5hbCBCeXRlc0J1aWxkZXIgYnVpbGRlciA9IG5ldyBCeXRlc0J1aWxkZXIoY29weTogZmFsc2UpOwoKICB2b2lkIGFkZChMaXN0PGludD4gY2h1bmspIHsKICAgIGJ1aWxkZXIuYWRkKGNodW5rKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoTGlzdDxpbnQ+IGNodW5rLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBpZiAoY2h1bmsgaXMgVWludDhMaXN0KSB7CiAgICAgIFVpbnQ4TGlzdCBsaXN0ID0gY2h1bms7CiAgICAgIGJ1aWxkZXIuYWRkKG5ldyBVaW50OExpc3QudmlldyhsaXN0LmJ1ZmZlciwgc3RhcnQsIGVuZCAtIHN0YXJ0KSk7CiAgICB9IGVsc2UgewogICAgICBidWlsZGVyLmFkZChjaHVuay5zdWJsaXN0KHN0YXJ0LCBlbmQpKTsKICAgIH0KICB9CgogIHZvaWQgY2xvc2UoKSB7fQp9CgpjbGFzcyBfWkxpYkVuY29kZXJTaW5rIGV4dGVuZHMgX0ZpbHRlclNpbmsgewogIF9aTGliRW5jb2RlclNpbmsuXygKICAgICAgQnl0ZUNvbnZlcnNpb25TaW5rIHNpbmssCiAgICAgIGJvb2wgZ3ppcCwKICAgICAgaW50IGxldmVsLAogICAgICBpbnQgd2luZG93Qml0cywKICAgICAgaW50IG1lbUxldmVsLAogICAgICBpbnQgc3RyYXRlZ3ksCiAgICAgIExpc3Q8aW50PiBkaWN0aW9uYXJ5LAogICAgICBib29sIHJhdykKICAgICAgOiBzdXBlcigKICAgICAgICAgICAgc2luaywKICAgICAgICAgICAgUmF3WkxpYkZpbHRlci5fbWFrZVpMaWJEZWZsYXRlRmlsdGVyKAogICAgICAgICAgICAgICAgZ3ppcCwgbGV2ZWwsIHdpbmRvd0JpdHMsIG1lbUxldmVsLCBzdHJhdGVneSwgZGljdGlvbmFyeSwgcmF3KSk7Cn0KCmNsYXNzIF9aTGliRGVjb2RlclNpbmsgZXh0ZW5kcyBfRmlsdGVyU2luayB7CiAgX1pMaWJEZWNvZGVyU2luay5fKAogICAgICBCeXRlQ29udmVyc2lvblNpbmsgc2luaywgaW50IHdpbmRvd0JpdHMsIExpc3Q8aW50PiBkaWN0aW9uYXJ5LCBib29sIHJhdykKICAgICAgOiBzdXBlcihzaW5rLAogICAgICAgICAgICBSYXdaTGliRmlsdGVyLl9tYWtlWkxpYkluZmxhdGVGaWx0ZXIod2luZG93Qml0cywgZGljdGlvbmFyeSwgcmF3KSk7Cn0KCmNsYXNzIF9GaWx0ZXJTaW5rIGV4dGVuZHMgQnl0ZUNvbnZlcnNpb25TaW5rIHsKICBmaW5hbCBSYXdaTGliRmlsdGVyIF9maWx0ZXI7CiAgZmluYWwgQnl0ZUNvbnZlcnNpb25TaW5rIF9zaW5rOwogIGJvb2wgX2Nsb3NlZCA9IGZhbHNlOwogIGJvb2wgX2VtcHR5ID0gdHJ1ZTsKCiAgX0ZpbHRlclNpbmsodGhpcy5fc2luaywgdGhpcy5fZmlsdGVyKTsKCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGRhdGEpIHsKICAgIGFkZFNsaWNlKGRhdGEsIDAsIGRhdGEubGVuZ3RoLCBmYWxzZSk7CiAgfQoKICB2b2lkIGFkZFNsaWNlKExpc3Q8aW50PiBkYXRhLCBpbnQgc3RhcnQsIGludCBlbmQsIGJvb2wgaXNMYXN0KSB7CiAgICBpZiAoX2Nsb3NlZCkgcmV0dXJuOwogICAgaWYgKGVuZCA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJlbmQiKTsKICAgIFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGRhdGEubGVuZ3RoKTsKICAgIHRyeSB7CiAgICAgIF9lbXB0eSA9IGZhbHNlOwogICAgICBfQnVmZmVyQW5kU3RhcnQgYnVmZmVyQW5kU3RhcnQgPQogICAgICAgICAgX2Vuc3VyZUZhc3RBbmRTZXJpYWxpemFibGVCeXRlRGF0YShkYXRhLCBzdGFydCwgZW5kKTsKICAgICAgX2ZpbHRlci5wcm9jZXNzKGJ1ZmZlckFuZFN0YXJ0LmJ1ZmZlciwgYnVmZmVyQW5kU3RhcnQuc3RhcnQsCiAgICAgICAgICBlbmQgLSAoc3RhcnQgLSBidWZmZXJBbmRTdGFydC5zdGFydCkpOwogICAgICBMaXN0PGludD4gb3V0OwogICAgICB3aGlsZSAoKG91dCA9IF9maWx0ZXIucHJvY2Vzc2VkKGZsdXNoOiBmYWxzZSkpICE9IG51bGwpIHsKICAgICAgICBfc2luay5hZGQob3V0KTsKICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICBfY2xvc2VkID0gdHJ1ZTsKICAgICAgcmV0aHJvdzsKICAgIH0KCiAgICBpZiAoaXNMYXN0KSBjbG9zZSgpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIGlmIChfY2xvc2VkKSByZXR1cm47CiAgICAvLyBCZSBzdXJlIHRvIHNlbmQgcHJvY2VzcyBhbiBlbXB0eSBjaHVuayBvZiBkYXRhLiBXaXRob3V0IHRoaXMsIHRoZSBlbXB0eQogICAgLy8gbWVzc2FnZSB3b3VsZCBub3QgaGF2ZSBhIEdaaXAgZnJhbWUgKGlmIGNvbXByZXNzZWQgd2l0aCBHWmlwKS4KICAgIGlmIChfZW1wdHkpIF9maWx0ZXIucHJvY2Vzcyhjb25zdCBbXSwgMCwgMCk7CiAgICB0cnkgewogICAgICBMaXN0PGludD4gb3V0OwogICAgICB3aGlsZSAoKG91dCA9IF9maWx0ZXIucHJvY2Vzc2VkKGVuZDogdHJ1ZSkpICE9IG51bGwpIHsKICAgICAgICBfc2luay5hZGQob3V0KTsKICAgICAgfQogICAgfSBjYXRjaCAoZSkgewogICAgICAvLyBUT0RPKGtldm1vbyk6IG5vdCBzdXJlIHdoeSB0aGlzIGlzbid0IGEgdHJ5L2ZpbmFsbHkKICAgICAgX2Nsb3NlZCA9IHRydWU7CiAgICAgIHRocm93IGU7CiAgICB9CiAgICBfY2xvc2VkID0gdHJ1ZTsKICAgIF9zaW5rLmNsb3NlKCk7CiAgfQp9Cgp2b2lkIF92YWxpZGF0ZVpMaWJXaW5kb3dCaXRzKGludCB3aW5kb3dCaXRzKSB7CiAgaWYgKFpMaWJPcHRpb24ubWluV2luZG93Qml0cyA+IHdpbmRvd0JpdHMgfHwKICAgICAgWkxpYk9wdGlvbi5tYXhXaW5kb3dCaXRzIDwgd2luZG93Qml0cykgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoCiAgICAgICAgd2luZG93Qml0cywgWkxpYk9wdGlvbi5taW5XaW5kb3dCaXRzLCBaTGliT3B0aW9uLm1heFdpbmRvd0JpdHMpOwogIH0KfQoKdm9pZCBfdmFsaWRhdGVaTGliZUxldmVsKGludCBsZXZlbCkgewogIGlmIChaTGliT3B0aW9uLm1pbkxldmVsID4gbGV2ZWwgfHwgWkxpYk9wdGlvbi5tYXhMZXZlbCA8IGxldmVsKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShsZXZlbCwgWkxpYk9wdGlvbi5taW5MZXZlbCwgWkxpYk9wdGlvbi5tYXhMZXZlbCk7CiAgfQp9Cgp2b2lkIF92YWxpZGF0ZVpMaWJNZW1MZXZlbChpbnQgbWVtTGV2ZWwpIHsKICBpZiAoWkxpYk9wdGlvbi5taW5NZW1MZXZlbCA+IG1lbUxldmVsIHx8IFpMaWJPcHRpb24ubWF4TWVtTGV2ZWwgPCBtZW1MZXZlbCkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoCiAgICAgICAgbWVtTGV2ZWwsIFpMaWJPcHRpb24ubWluTWVtTGV2ZWwsIFpMaWJPcHRpb24ubWF4TWVtTGV2ZWwpOwogIH0KfQoKdm9pZCBfdmFsaWRhdGVaTGliU3RyYXRlZ3koaW50IHN0cmF0ZWd5KSB7CiAgY29uc3Qgc3RyYXRlZ2llcyA9IGNvbnN0IDxpbnQ+WwogICAgWkxpYk9wdGlvbi5zdHJhdGVneUZpbHRlcmVkLAogICAgWkxpYk9wdGlvbi5zdHJhdGVneUh1ZmZtYW5Pbmx5LAogICAgWkxpYk9wdGlvbi5zdHJhdGVneVJsZSwKICAgIFpMaWJPcHRpb24uc3RyYXRlZ3lGaXhlZCwKICAgIFpMaWJPcHRpb24uc3RyYXRlZ3lEZWZhdWx0CiAgXTsKICBpZiAoc3RyYXRlZ2llcy5pbmRleE9mKHN0cmF0ZWd5KSA9PSAtMSkgewogICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlVuc3VwcG9ydGVkICdzdHJhdGVneSciKTsKICB9Cn0KgqMATk48AREBBC4DPwQcSSQmKygBSSQnKykBSSQrLy0BQyImIwFCISYiAUMlKiYBSSQpJgFJJCkmAUkoLSoBSCkuKgFJLDEuAU4kKSUBThYmKycBKygtKQIBBEEEMyAdAQRPIgQ2BkQGEwEGUEZOTgYTAQZQT0oFOQU6UAYWAQZPSk5IBhYBBlBROgYYAQZPLQYSAQYlBUlRR09NLQYeAQ0sNTExFxcbICUlKQQBHSkzLy8VFhsBBkEGLhMUHhoaHhEBBj4GHVECAQRBBDMgHQEETyIDTjcENgZEBhMBBlBGTk4GEwEGUE9KBTkFOlAGFgEGNDNBR0szBhYBBlBQPwYYAQYlBUlRR09NLQYeAQZPLQYSAQ0sNTExFxcaICUlKQQBHSkzLy8VFRsBBkEGLhIUHhoaHhEBBj4GHVECAQRQCQQ8BkQGEwEGUEZOTgYTAQZQT0oFOQU6UAYWAQY0M0FHSzMGFgEGUFA/BhgBBiUFSVFHT00tBh4BBk8tBhIBDxkrNTExFxogJSUpBAEGSBIGJyohExElBAEGTURIBkQnMAYjTQQCAQRQBDwGUFBABhgBBiUFSVFHT00tBh4BBk8tBhIBDzYXGikEAQZKEgYnKiETESUEAQY9SBsGRCcwBkYEAgEERQQfBkkUBigWKDIuLhoVByNHBAEGSRYGKDIaFQdABAEGTigGNAEGS04zBU85BjwBOBERFhQUHBEBODcCAS8+AR4YBAFEHh5IDS4GBAESAgEtFh8RERYUFBwQDxIyUAIBLRZPFFACAS8fIhgWASkBHSsEAUMZPTkKFidAQzEVQBgIEhYPBgEZBAERGU9GMQoVPRgIEj0WDwYUEwQCAS8vLyBJBAIBJkRRBAIBK1AgQwQCASsiISQcHh8FLDcEAgEdZGFydDppby9kYXRhX3RyYW5zZm9ybWVyLmRhcnQtb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL2RpcmVjdG9yeS5kYXJ0r6gvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLyoqCiAqIEEgcmVmZXJlbmNlIHRvIGEgZGlyZWN0b3J5IChvciBfZm9sZGVyXykgb24gdGhlIGZpbGUgc3lzdGVtLgogKgogKiBBIERpcmVjdG9yeSBpbnN0YW5jZSBpcyBhbiBvYmplY3QgaG9sZGluZyBhIFtwYXRoXSBvbiB3aGljaCBvcGVyYXRpb25zIGNhbgogKiBiZSBwZXJmb3JtZWQuIFRoZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY2FuIGJlIFthYnNvbHV0ZV0gb3IgcmVsYXRpdmUuCiAqIFlvdSBjYW4gZ2V0IHRoZSBwYXJlbnQgZGlyZWN0b3J5IHVzaW5nIHRoZSBnZXR0ZXIgW3BhcmVudF0sCiAqIGEgcHJvcGVydHkgaW5oZXJpdGVkIGZyb20gW0ZpbGVTeXN0ZW1FbnRpdHldLgogKgogKiBJbiBhZGRpdGlvbiB0byBiZWluZyB1c2VkIGFzIGFuIGluc3RhbmNlIHRvIGFjY2VzcyB0aGUgZmlsZSBzeXN0ZW0sCiAqIERpcmVjdG9yeSBoYXMgYSBudW1iZXIgb2Ygc3RhdGljIHByb3BlcnRpZXMsIHN1Y2ggYXMgW3N5c3RlbVRlbXBdLAogKiB3aGljaCBnZXRzIHRoZSBzeXN0ZW0ncyB0ZW1wb3JhcnkgZGlyZWN0b3J5LCBhbmQgdGhlIGdldHRlciBhbmQgc2V0dGVyCiAqIFtjdXJyZW50XSwgd2hpY2ggeW91IGNhbiB1c2UgdG8gYWNjZXNzIG9yIGNoYW5nZSB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAqCiAqIENyZWF0ZSBhIG5ldyBEaXJlY3Rvcnkgb2JqZWN0IHdpdGggYSBwYXRobmFtZSB0byBhY2Nlc3MgdGhlIHNwZWNpZmllZAogKiBkaXJlY3Rvcnkgb24gdGhlIGZpbGUgc3lzdGVtIGZyb20geW91ciBwcm9ncmFtLgogKgogKiAgICAgdmFyIG15RGlyID0gbmV3IERpcmVjdG9yeSgnbXlEaXInKTsKICoKICogTW9zdCBtZXRob2RzIGluIHRoaXMgY2xhc3Mgb2NjdXIgaW4gc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyBwYWlycywKICogZm9yIGV4YW1wbGUsIFtjcmVhdGVdIGFuZCBbY3JlYXRlU3luY10uCiAqIFVubGVzcyB5b3UgaGF2ZSBhIHNwZWNpZmljIHJlYXNvbiBmb3IgdXNpbmcgdGhlIHN5bmNocm9ub3VzIHZlcnNpb24KICogb2YgYSBtZXRob2QsIHByZWZlciB0aGUgYXN5bmNocm9ub3VzIHZlcnNpb24gdG8gYXZvaWQgYmxvY2tpbmcgeW91ciBwcm9ncmFtLgogKgogKiAjIyBDcmVhdGUgYSBkaXJlY3RvcnkKICoKICogVGhlIGZvbGxvd2luZyBjb2RlIHNhbXBsZSBjcmVhdGVzIGEgZGlyZWN0b3J5IHVzaW5nIHRoZSBbY3JlYXRlXSBtZXRob2QuCiAqIEJ5IHNldHRpbmcgdGhlIGByZWN1cnNpdmVgIHBhcmFtZXRlciB0byB0cnVlLCB5b3UgY2FuIGNyZWF0ZSB0aGUKICogbmFtZWQgZGlyZWN0b3J5IGFuZCBhbGwgaXRzIG5lY2Vzc2FyeSBwYXJlbnQgZGlyZWN0b3JpZXMsCiAqIGlmIHRoZXkgZG8gbm90IGFscmVhZHkgZXhpc3QuCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKgogKiAgICAgdm9pZCBtYWluKCkgewogKiAgICAgICAvLyBDcmVhdGVzIGRpci8gYW5kIGRpci9zdWJkaXIvLgogKiAgICAgICBuZXcgRGlyZWN0b3J5KCdkaXIvc3ViZGlyJykuY3JlYXRlKHJlY3Vyc2l2ZTogdHJ1ZSkKICogICAgICAgICAvLyBUaGUgY3JlYXRlZCBkaXJlY3RvcnkgaXMgcmV0dXJuZWQgYXMgYSBGdXR1cmUuCiAqICAgICAgICAgLnRoZW4oKERpcmVjdG9yeSBkaXJlY3RvcnkpIHsKICogICAgICAgICAgIHByaW50KGRpcmVjdG9yeS5wYXRoKTsKICogICAgICAgfSk7CiAqICAgICB9CiAqCiAqICMjIExpc3QgYSBkaXJlY3RvcnkKICoKICogVXNlIHRoZSBbbGlzdF0gb3IgW2xpc3RTeW5jXSBtZXRob2RzIHRvIGdldCB0aGUgZmlsZXMgYW5kIGRpcmVjdG9yaWVzCiAqIGNvbnRhaW5lZCBieSBhIGRpcmVjdG9yeS4KICogU2V0IGByZWN1cnNpdmVgIHRvIHRydWUgdG8gcmVjdXJzaXZlbHkgbGlzdCBhbGwgc3ViZGlyZWN0b3JpZXMuCiAqIFNldCBgZm9sbG93TGlua3NgIHRvIHRydWUgdG8gZm9sbG93IHN5bWJvbGljIGxpbmtzLgogKiBUaGUgbGlzdCBtZXRob2QgcmV0dXJucyBhIFtTdHJlYW1dIHRoYXQgcHJvdmlkZXMgRmlsZVN5c3RlbUVudGl0eQogKiBvYmplY3RzLiBVc2UgdGhlIGxpc3RlbiBjYWxsYmFjayBmdW5jdGlvbiB0byBwcm9jZXNzIGVhY2ggb2JqZWN0CiAqIGFzIGl0IGJlY29tZSBhdmFpbGFibGUuCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKgogKiAgICAgdm9pZCBtYWluKCkgewogKiAgICAgICAvLyBHZXQgdGhlIHN5c3RlbSB0ZW1wIGRpcmVjdG9yeS4KICogICAgICAgdmFyIHN5c3RlbVRlbXBEaXIgPSBEaXJlY3Rvcnkuc3lzdGVtVGVtcDsKICoKICogICAgICAgLy8gTGlzdCBkaXJlY3RvcnkgY29udGVudHMsIHJlY3Vyc2luZyBpbnRvIHN1Yi1kaXJlY3RvcmllcywKICogICAgICAgLy8gYnV0IG5vdCBmb2xsb3dpbmcgc3ltYm9saWMgbGlua3MuCiAqICAgICAgIHN5c3RlbVRlbXBEaXIubGlzdChyZWN1cnNpdmU6IHRydWUsIGZvbGxvd0xpbmtzOiBmYWxzZSkKICogICAgICAgICAubGlzdGVuKChGaWxlU3lzdGVtRW50aXR5IGVudGl0eSkgewogKiAgICAgICAgICAgcHJpbnQoZW50aXR5LnBhdGgpOwogKiAgICAgICAgIH0pOwogKiAgICAgfQogKgogKiAjIyBUaGUgdXNlIG9mIEZ1dHVyZXMKICoKICogSS9PIG9wZXJhdGlvbnMgY2FuIGJsb2NrIGEgcHJvZ3JhbSBmb3Igc29tZSBwZXJpb2Qgb2YgdGltZSB3aGlsZSBpdCB3YWl0cyBmb3IKICogdGhlIG9wZXJhdGlvbiB0byBjb21wbGV0ZS4gVG8gYXZvaWQgdGhpcywgYWxsCiAqIG1ldGhvZHMgaW52b2x2aW5nIEkvTyBoYXZlIGFuIGFzeW5jaHJvbm91cyB2YXJpYW50IHdoaWNoIHJldHVybnMgYSBbRnV0dXJlXS4KICogVGhpcyBmdXR1cmUgY29tcGxldGVzIHdoZW4gdGhlIEkvTyBvcGVyYXRpb24gZmluaXNoZXMuIFdoaWxlIHRoZSBJL08KICogb3BlcmF0aW9uIGlzIGluIHByb2dyZXNzLCB0aGUgRGFydCBwcm9ncmFtIGlzIG5vdCBibG9ja2VkLAogKiBhbmQgY2FuIHBlcmZvcm0gb3RoZXIgb3BlcmF0aW9ucy4KICoKICogRm9yIGV4YW1wbGUsCiAqIHRoZSBbZXhpc3RzXSBtZXRob2QsIHdoaWNoIGRldGVybWluZXMgd2hldGhlciB0aGUgZGlyZWN0b3J5IGV4aXN0cywKICogcmV0dXJucyBhIGJvb2xlYW4gdmFsdWUgdXNpbmcgYSBGdXR1cmUuCiAqIFVzZSBgdGhlbmAgdG8gcmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2ggaXMgY2FsbGVkIHdoZW4KICogdGhlIHZhbHVlIGlzIHJlYWR5LgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIGZpbmFsIG15RGlyID0gbmV3IERpcmVjdG9yeSgnZGlyJyk7CiAqICAgICAgIG15RGlyLmV4aXN0cygpLnRoZW4oKGlzVGhlcmUpIHsKICogICAgICAgICBpc1RoZXJlID8gcHJpbnQoJ2V4aXN0cycpIDogcHJpbnQoJ25vbi1leGlzdGVudCcpOwogKiAgICAgICB9KTsKICogICAgIH0KICoKICoKICogSW4gYWRkaXRpb24gdG8gZXhpc3RzLCB0aGUgW3N0YXRdLCBbcmVuYW1lXSwgYW5kCiAqIG90aGVyIG1ldGhvZHMsIHJldHVybiBGdXR1cmVzLgogKgogKiAjIyBPdGhlciByZXNvdXJjZXMKICoKICogKiBbRGFydCBieSBFeGFtcGxlXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZGFydC1ieS1leGFtcGxlLyNmaWxlcy1kaXJlY3Rvcmllcy1hbmQtc3ltbGlua3MpCiAqICAgcHJvdmlkZXMgYWRkaXRpb25hbCB0YXNrLW9yaWVudGVkIGNvZGUgc2FtcGxlcyB0aGF0IHNob3cgaG93IHRvIHVzZQogKiAgIHZhcmlvdXMgQVBJIGZyb20gdGhlIERpcmVjdG9yeSBjbGFzcyBhbmQgdGhlIHJlbGF0ZWQgW0ZpbGVdIGNsYXNzLgogKgogKiAqIFtJL08gZm9yIENvbW1hbmQtTGluZQogKiAgIEFwcHNdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY2gwMy5odG1sI2RhcnRpby0tLWlvLWZvci1jb21tYW5kLWxpbmUtYXBwcykKICogICBhIHNlY3Rpb24gZnJvbSBfQSBUb3VyIG9mIHRoZSBEYXJ0IExpYnJhcmllc18gY292ZXJzIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KICoKICogKiBbV3JpdGUgQ29tbWFuZC1MaW5lIEFwcHNdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL3R1dG9yaWFscy9jbWRsaW5lLyksCiAqICAgYSB0dXRvcmlhbCBhYm91dCB3cml0aW5nIGNvbW1hbmQtbGluZSBhcHBzLCBpbmNsdWRlcyBpbmZvcm1hdGlvbiBhYm91dAogKiAgIGZpbGVzIGFuZCBkaXJlY3Rvcmllcy4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKYWJzdHJhY3QgY2xhc3MgRGlyZWN0b3J5IGltcGxlbWVudHMgRmlsZVN5c3RlbUVudGl0eSB7CiAgLyoqCiAgICogR2V0cyB0aGUgcGF0aCBvZiB0aGlzIGRpcmVjdG9yeS4KICAgKi8KICBTdHJpbmcgZ2V0IHBhdGg7CgogIC8qKgogICAqIENyZWF0ZXMgYSBbRGlyZWN0b3J5XSBvYmplY3QuCiAgICoKICAgKiBJZiBbcGF0aF0gaXMgYSByZWxhdGl2ZSBwYXRoLCBpdCB3aWxsIGJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZQogICAqIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKHNlZSBbRGlyZWN0b3J5LmN1cnJlbnRdKSwgd2hlbiB1c2VkLgogICAqCiAgICogSWYgW3BhdGhdIGlzIGFuIGFic29sdXRlIHBhdGgsIGl0IHdpbGwgYmUgaW1tdW5lIHRvIGNoYW5nZXMgdG8gdGhlCiAgICogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZmFjdG9yeSBEaXJlY3RvcnkoU3RyaW5nIHBhdGgpIHsKICAgIGZpbmFsIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIG5ldyBfRGlyZWN0b3J5KHBhdGgpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5jcmVhdGVEaXJlY3RvcnkocGF0aCk7CiAgfQoKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZmFjdG9yeSBEaXJlY3RvcnkuZnJvbVJhd1BhdGgoVWludDhMaXN0IHBhdGgpIHsKICAgIC8vIFRPRE8oYmtvbnlpKTogSGFuZGxlIG92ZXJyaWRlcy4KICAgIHJldHVybiBuZXcgX0RpcmVjdG9yeS5mcm9tUmF3UGF0aChwYXRoKTsKICB9CgogIC8qKgogICAqIENyZWF0ZSBhIERpcmVjdG9yeSBvYmplY3QgZnJvbSBhIFVSSS4KICAgKgogICAqIElmIFt1cmldIGNhbm5vdCByZWZlcmVuY2UgYSBkaXJlY3RvcnkgdGhpcyB0aHJvd3MgW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIGZhY3RvcnkgRGlyZWN0b3J5LmZyb21VcmkoVXJpIHVyaSkgPT4gbmV3IERpcmVjdG9yeSh1cmkudG9GaWxlUGF0aCgpKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIGRpcmVjdG9yeSBvYmplY3QgcG9pbnRpbmcgdG8gdGhlIGN1cnJlbnQgd29ya2luZwogICAqIGRpcmVjdG9yeS4KICAgKi8KICBzdGF0aWMgRGlyZWN0b3J5IGdldCBjdXJyZW50IHsKICAgIGZpbmFsIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9EaXJlY3RvcnkuY3VycmVudDsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuZ2V0Q3VycmVudERpcmVjdG9yeSgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIFtVcmldIHJlcHJlc2VudGluZyB0aGUgZGlyZWN0b3J5J3MgbG9jYXRpb24uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgVVJJJ3Mgc2NoZW1lIGlzIGFsd2F5cyAiZmlsZSIgaWYgdGhlIGVudGl0eSdzIFtwYXRoXSBpcwogICAqIGFic29sdXRlLCBvdGhlcndpc2UgdGhlIHNjaGVtZSB3aWxsIGJlIGVtcHR5LgogICAqIFRoZSByZXR1cm5lZCBVUkkncyBwYXRoIGFsd2F5cyBlbmRzIGluIGEgc2xhc2ggKCcvJykuCiAgICovCiAgVXJpIGdldCB1cmk7CgogIC8qKgogICAqIFNldHMgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3Rvcnkgb2YgdGhlIERhcnQgcHJvY2VzcyBpbmNsdWRpbmcKICAgKiBhbGwgcnVubmluZyBpc29sYXRlcy4gVGhlIG5ldyB2YWx1ZSBzZXQgY2FuIGJlIGVpdGhlciBhIFtEaXJlY3RvcnldCiAgICogb3IgYSBbU3RyaW5nXS4KICAgKgogICAqIFRoZSBuZXcgdmFsdWUgaXMgcGFzc2VkIHRvIHRoZSBPUydzIHN5c3RlbSBjYWxsIHVuY2hhbmdlZCwgc28gYQogICAqIHJlbGF0aXZlIHBhdGggcGFzc2VkIGFzIHRoZSBuZXcgd29ya2luZyBkaXJlY3Rvcnkgd2lsbCBiZQogICAqIHJlc29sdmVkIGJ5IHRoZSBPUy4KICAgKgogICAqIE5vdGUgdGhhdCBzZXR0aW5nIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGlzIGEgc3luY2hyb25vdXMKICAgKiBvcGVyYXRpb24gYW5kIHRoYXQgaXQgY2hhbmdlcyB0aGUgd29ya2luZyBkaXJlY3Rvcnkgb2YgKmFsbCoKICAgKiBpc29sYXRlcy4KICAgKgogICAqIFVzZSB0aGlzIHdpdGggY2FyZSAtIGVzcGVjaWFsbHkgd2hlbiB3b3JraW5nIHdpdGggYXN5bmNocm9ub3VzCiAgICogb3BlcmF0aW9ucyBhbmQgbXVsdGlwbGUgaXNvbGF0ZXMuIENoYW5naW5nIHRoZSB3b3JraW5nIGRpcmVjdG9yeSwKICAgKiB3aGlsZSBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyBhcmUgcGVuZGluZyBvciB3aGVuIG90aGVyIGlzb2xhdGVzCiAgICogYXJlIHdvcmtpbmcgd2l0aCB0aGUgZmlsZSBzeXN0ZW0sIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgcmVzdWx0cy4KICAgKi8KICBzdGF0aWMgdm9pZCBzZXQgY3VycmVudChwYXRoKSB7CiAgICBmaW5hbCBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIF9EaXJlY3RvcnkuY3VycmVudCA9IHBhdGg7CiAgICAgIHJldHVybjsKICAgIH0KICAgIG92ZXJyaWRlcy5zZXRDdXJyZW50RGlyZWN0b3J5KHBhdGgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyB0aGUgZGlyZWN0b3J5IHdpdGggdGhpcyBuYW1lLgogICAqCiAgICogSWYgW3JlY3Vyc2l2ZV0gaXMgZmFsc2UsIG9ubHkgdGhlIGxhc3QgZGlyZWN0b3J5IGluIHRoZSBwYXRoIGlzCiAgICogY3JlYXRlZC4gSWYgW3JlY3Vyc2l2ZV0gaXMgdHJ1ZSwgYWxsIG5vbi1leGlzdGluZyBwYXRoIGNvbXBvbmVudHMKICAgKiBhcmUgY3JlYXRlZC4gSWYgdGhlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cyBub3RoaW5nIGlzIGRvbmUuCiAgICoKICAgKiBSZXR1cm5zIGEgWzpGdXR1cmU8RGlyZWN0b3J5PjpdIHRoYXQgY29tcGxldGVzIHdpdGggdGhpcwogICAqIGRpcmVjdG9yeSBvbmNlIGl0IGhhcyBiZWVuIGNyZWF0ZWQuIElmIHRoZSBkaXJlY3RvcnkgY2Fubm90IGJlCiAgICogY3JlYXRlZCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGV4Y2VwdGlvbi4KICAgKi8KICBGdXR1cmU8RGlyZWN0b3J5PiBjcmVhdGUoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNyZWF0ZXMgdGhlIGRpcmVjdG9yeSB3aXRoIHRoaXMgbmFtZS4KICAgKgogICAqIElmIFtyZWN1cnNpdmVdIGlzIGZhbHNlLCBvbmx5IHRoZSBsYXN0IGRpcmVjdG9yeSBpbiB0aGUgcGF0aCBpcwogICAqIGNyZWF0ZWQuIElmIFtyZWN1cnNpdmVdIGlzIHRydWUsIGFsbCBub24tZXhpc3RpbmcgcGF0aCBjb21wb25lbnRzCiAgICogYXJlIGNyZWF0ZWQuIElmIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdHMgbm90aGluZyBpcyBkb25lLgogICAqCiAgICogSWYgdGhlIGRpcmVjdG9yeSBjYW5ub3QgYmUgY3JlYXRlZCBhbiBleGNlcHRpb24gaXMgdGhyb3duLgogICAqLwogIHZvaWQgY3JlYXRlU3luYyh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSk7CgogIC8qKgogICAqIEdldHMgdGhlIHN5c3RlbSB0ZW1wIGRpcmVjdG9yeS4KICAgKgogICAqIEdldHMgdGhlIGRpcmVjdG9yeSBwcm92aWRlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBmb3IgY3JlYXRpbmcKICAgKiB0ZW1wb3JhcnkgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIGluLgogICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgc3lzdGVtIHRlbXAgZGlyZWN0b3J5IGlzIHBsYXRmb3JtLWRlcGVuZGVudCwKICAgKiBhbmQgbWF5IGJlIHNldCBieSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KICAgKi8KICBzdGF0aWMgRGlyZWN0b3J5IGdldCBzeXN0ZW1UZW1wIHsKICAgIGZpbmFsIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9EaXJlY3Rvcnkuc3lzdGVtVGVtcDsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuZ2V0U3lzdGVtVGVtcERpcmVjdG9yeSgpOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgaW4gdGhpcyBkaXJlY3RvcnkuIEFkZGl0aW9uYWwgcmFuZG9tCiAgICogY2hhcmFjdGVycyBhcmUgYXBwZW5kZWQgdG8gW3ByZWZpeF0gdG8gcHJvZHVjZSBhIHVuaXF1ZSBkaXJlY3RvcnkKICAgKiBuYW1lLiBJZiBbcHJlZml4XSBpcyBtaXNzaW5nIG9yIG51bGwsIHRoZSBlbXB0eSBzdHJpbmcgaXMgdXNlZAogICAqIGZvciBbcHJlZml4XS4KICAgKgogICAqIFJldHVybnMgYSBbOkZ1dHVyZTxEaXJlY3Rvcnk+Ol0gdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgbmV3bHkKICAgKiBjcmVhdGVkIHRlbXBvcmFyeSBkaXJlY3RvcnkuCiAgICovCiAgRnV0dXJlPERpcmVjdG9yeT4gY3JlYXRlVGVtcChbU3RyaW5nIHByZWZpeF0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNyZWF0ZXMgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGluIHRoaXMgZGlyZWN0b3J5LgogICAqIEFkZGl0aW9uYWwgcmFuZG9tIGNoYXJhY3RlcnMgYXJlIGFwcGVuZGVkIHRvIFtwcmVmaXhdIHRvIHByb2R1Y2UKICAgKiBhIHVuaXF1ZSBkaXJlY3RvcnkgbmFtZS4gSWYgW3ByZWZpeF0gaXMgbWlzc2luZyBvciBudWxsLCB0aGUgZW1wdHkKICAgKiBzdHJpbmcgaXMgdXNlZCBmb3IgW3ByZWZpeF0uCiAgICoKICAgKiBSZXR1cm5zIHRoZSBuZXdseSBjcmVhdGVkIHRlbXBvcmFyeSBkaXJlY3RvcnkuCiAgICovCiAgRGlyZWN0b3J5IGNyZWF0ZVRlbXBTeW5jKFtTdHJpbmcgcHJlZml4XSk7CgogIEZ1dHVyZTxTdHJpbmc+IHJlc29sdmVTeW1ib2xpY0xpbmtzKCk7CgogIFN0cmluZyByZXNvbHZlU3ltYm9saWNMaW5rc1N5bmMoKTsKCiAgLyoqCiAgICogUmVuYW1lcyB0aGlzIGRpcmVjdG9yeS4gUmV0dXJucyBhIFs6RnV0dXJlPERpcmVjdG9yeT46XSB0aGF0IGNvbXBsZXRlcwogICAqIHdpdGggYSBbRGlyZWN0b3J5XSBpbnN0YW5jZSBmb3IgdGhlIHJlbmFtZWQgZGlyZWN0b3J5LgogICAqCiAgICogSWYgbmV3UGF0aCBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSwgdGhhdCBkaXJlY3RvcnkgaXMKICAgKiByZXBsYWNlZC4gSWYgbmV3UGF0aCBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGZpbGUsIHRoZSBvcGVyYXRpb24KICAgKiBmYWlscyBhbmQgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBleGNlcHRpb24uCiAgICovCiAgRnV0dXJlPERpcmVjdG9yeT4gcmVuYW1lKFN0cmluZyBuZXdQYXRoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZW5hbWVzIHRoaXMgZGlyZWN0b3J5LiBSZXR1cm5zIGEgW0RpcmVjdG9yeV0KICAgKiBpbnN0YW5jZSBmb3IgdGhlIHJlbmFtZWQgZGlyZWN0b3J5LgogICAqCiAgICogSWYgbmV3UGF0aCBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSwgdGhhdCBkaXJlY3RvcnkgaXMKICAgKiByZXBsYWNlZC4gSWYgbmV3UGF0aCBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGZpbGUgdGhlIG9wZXJhdGlvbgogICAqIGZhaWxzIGFuZCBhbiBleGNlcHRpb24gaXMgdGhyb3duLgogICAqLwogIERpcmVjdG9yeSByZW5hbWVTeW5jKFN0cmluZyBuZXdQYXRoKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIFtEaXJlY3RvcnldIGluc3RhbmNlIHdob3NlIHBhdGggaXMgdGhlIGFic29sdXRlIHBhdGggdG8gW3RoaXNdLgogICAqCiAgICogVGhlIGFic29sdXRlIHBhdGggaXMgY29tcHV0ZWQgYnkgcHJlZml4aW5nCiAgICogYSByZWxhdGl2ZSBwYXRoIHdpdGggdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIGFuZCByZXR1cm5pbmcKICAgKiBhbiBhYnNvbHV0ZSBwYXRoIHVuY2hhbmdlZC4KICAgKi8KICBEaXJlY3RvcnkgZ2V0IGFic29sdXRlOwoKICAvKioKICAgKiBMaXN0cyB0aGUgc3ViLWRpcmVjdG9yaWVzIGFuZCBmaWxlcyBvZiB0aGlzIFtEaXJlY3RvcnldLgogICAqIE9wdGlvbmFsbHkgcmVjdXJzZXMgaW50byBzdWItZGlyZWN0b3JpZXMuCiAgICoKICAgKiBJZiBbZm9sbG93TGlua3NdIGlzIGZhbHNlLCB0aGVuIGFueSBzeW1ib2xpYyBsaW5rcyBmb3VuZAogICAqIGFyZSByZXBvcnRlZCBhcyBbTGlua10gb2JqZWN0cywgcmF0aGVyIHRoYW4gYXMgZGlyZWN0b3JpZXMgb3IgZmlsZXMsCiAgICogYW5kIGFyZSBub3QgcmVjdXJzZWQgaW50by4KICAgKgogICAqIElmIFtmb2xsb3dMaW5rc10gaXMgdHJ1ZSwgdGhlbiB3b3JraW5nIGxpbmtzIGFyZSByZXBvcnRlZCBhcwogICAqIGRpcmVjdG9yaWVzIG9yIGZpbGVzLCBkZXBlbmRpbmcgb24KICAgKiB0aGVpciB0eXBlLCBhbmQgbGlua3MgdG8gZGlyZWN0b3JpZXMgYXJlIHJlY3Vyc2VkIGludG8uCiAgICogQnJva2VuIGxpbmtzIGFyZSByZXBvcnRlZCBhcyBbTGlua10gb2JqZWN0cy4KICAgKiBJZiBhIHN5bWJvbGljIGxpbmsgbWFrZXMgYSBsb29wIGluIHRoZSBmaWxlIHN5c3RlbSwgdGhlbiBhIHJlY3Vyc2l2ZQogICAqIGxpc3Rpbmcgd2lsbCBub3QgZm9sbG93IGEgbGluayB0d2ljZSBpbiB0aGUKICAgKiBzYW1lIHJlY3Vyc2l2ZSBkZXNjZW50LCBidXQgd2lsbCByZXBvcnQgaXQgYXMgYSBbTGlua10KICAgKiB0aGUgc2Vjb25kIHRpbWUgaXQgaXMgc2Vlbi4KICAgKgogICAqIFRoZSByZXN1bHQgaXMgYSBzdHJlYW0gb2YgW0ZpbGVTeXN0ZW1FbnRpdHldIG9iamVjdHMKICAgKiBmb3IgdGhlIGRpcmVjdG9yaWVzLCBmaWxlcywgYW5kIGxpbmtzLgogICAqLwogIFN0cmVhbTxGaWxlU3lzdGVtRW50aXR5PiBsaXN0KAogICAgICB7Ym9vbCByZWN1cnNpdmU6IGZhbHNlLCBib29sIGZvbGxvd0xpbmtzOiB0cnVlfSk7CgogIC8qKgogICAqIExpc3RzIHRoZSBzdWItZGlyZWN0b3JpZXMgYW5kIGZpbGVzIG9mIHRoaXMgW0RpcmVjdG9yeV0uCiAgICogT3B0aW9uYWxseSByZWN1cnNlcyBpbnRvIHN1Yi1kaXJlY3Rvcmllcy4KICAgKgogICAqIElmIFtmb2xsb3dMaW5rc10gaXMgZmFsc2UsIHRoZW4gYW55IHN5bWJvbGljIGxpbmtzIGZvdW5kCiAgICogYXJlIHJlcG9ydGVkIGFzIFtMaW5rXSBvYmplY3RzLCByYXRoZXIgdGhhbiBhcyBkaXJlY3RvcmllcyBvciBmaWxlcywKICAgKiBhbmQgYXJlIG5vdCByZWN1cnNlZCBpbnRvLgogICAqCiAgICogSWYgW2ZvbGxvd0xpbmtzXSBpcyB0cnVlLCB0aGVuIHdvcmtpbmcgbGlua3MgYXJlIHJlcG9ydGVkIGFzCiAgICogZGlyZWN0b3JpZXMgb3IgZmlsZXMsIGRlcGVuZGluZyBvbgogICAqIHRoZWlyIHR5cGUsIGFuZCBsaW5rcyB0byBkaXJlY3RvcmllcyBhcmUgcmVjdXJzZWQgaW50by4KICAgKiBCcm9rZW4gbGlua3MgYXJlIHJlcG9ydGVkIGFzIFtMaW5rXSBvYmplY3RzLgogICAqIElmIGEgbGluayBtYWtlcyBhIGxvb3AgaW4gdGhlIGZpbGUgc3lzdGVtLCB0aGVuIGEgcmVjdXJzaXZlCiAgICogbGlzdGluZyB3aWxsIG5vdCBmb2xsb3cgYSBsaW5rIHR3aWNlIGluIHRoZQogICAqIHNhbWUgcmVjdXJzaXZlIGRlc2NlbnQsIGJ1dCB3aWxsIHJlcG9ydCBpdCBhcyBhIFtMaW5rXQogICAqIHRoZSBzZWNvbmQgdGltZSBpdCBpcyBzZWVuLgogICAqCiAgICogUmV0dXJucyBhIFtMaXN0XSBjb250YWluaW5nIFtGaWxlU3lzdGVtRW50aXR5XSBvYmplY3RzIGZvciB0aGUKICAgKiBkaXJlY3RvcmllcywgZmlsZXMsIGFuZCBsaW5rcy4KICAgKi8KICBMaXN0PEZpbGVTeXN0ZW1FbnRpdHk+IGxpc3RTeW5jKAogICAgICB7Ym9vbCByZWN1cnNpdmU6IGZhbHNlLCBib29sIGZvbGxvd0xpbmtzOiB0cnVlfSk7CgogIC8qKgogICAqIFJldHVybnMgYSBodW1hbiByZWFkYWJsZSBzdHJpbmcgZm9yIHRoaXMgRGlyZWN0b3J5IGluc3RhbmNlLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpOwp9CoFaAE5OPAERAQRAA05KPzEDR0ZKSwNJMwMrA0srR1ADGQNMRD0hAxkDFSo9PSkkDQkDFwNJHUM3RUQbAxkDFSszA0UuQS8hDwkDGQNRMVBIPiUDEEcrRBcDGQMQLSk+DQkDAzQiAxYDYUlIAxtqUQNSTBwEGjcGJgYTAQYjBUpFBUggBhwjNx0jBiwEARwyJy0EAQYrBUsGSQEGQBAGITcdIQYsBAEGPAVKMzsGDwEGRkkUBUU/GQVGQg8FREdGRwYiNx0hDgYpBAEGKwVFR0MFPkQ1BjUBBjkFRUdDBUAGLAEGJQVGKUYwBiQ3HSQGLwQBBkhHRBMFQyIGMQEGREZIIgU0Bi0BKQElAQZMPAVERTcGLAEGQSkFREQnBigBBk8FMEchBhoBBj4vBT5KIAVCKD0ySjE8IQU6LAYhOAEGPi8FPkogBUIoPTJBMTwhBUQkBiM4AQZCBhUCARZkYXJ0OmlvL2RpcmVjdG9yeS5kYXJ0Mm9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9kaXJlY3RvcnlfaW1wbC5kYXJ0tpovLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKY2xhc3MgX0RpcmVjdG9yeSBleHRlbmRzIEZpbGVTeXN0ZW1FbnRpdHkgaW1wbGVtZW50cyBEaXJlY3RvcnkgewogIFN0cmluZyBfcGF0aDsKICBVaW50OExpc3QgX3Jhd1BhdGg7CgogIF9EaXJlY3RvcnkoU3RyaW5nIHBhdGgpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKHBhdGgsICdwYXRoJyk7CiAgICBfcGF0aCA9IHBhdGg7CiAgICBfcmF3UGF0aCA9IEZpbGVTeXN0ZW1FbnRpdHkuX3RvVXRmOEFycmF5KF9wYXRoKTsKICB9CgogIF9EaXJlY3RvcnkuZnJvbVJhd1BhdGgoVWludDhMaXN0IHJhd1BhdGgpIHsKICAgIGlmIChyYXdQYXRoID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoJ3Jhd1BhdGggY2Fubm90IGJlIG51bGwnKTsKICAgIH0KICAgIF9yYXdQYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdG9OdWxsVGVybWluYXRlZFV0ZjhBcnJheShyYXdQYXRoKTsKICAgIF9wYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdG9TdHJpbmdGcm9tVXRmOEFycmF5KHJhd1BhdGgpOwogIH0KCiAgU3RyaW5nIGdldCBwYXRoID0+IF9wYXRoOwoKICBleHRlcm5hbCBzdGF0aWMgX2N1cnJlbnQoX05hbWVzcGFjZSBuYW1lc3BhY2UpOwogIGV4dGVybmFsIHN0YXRpYyBfc2V0Q3VycmVudChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwogIGV4dGVybmFsIHN0YXRpYyBfY3JlYXRlVGVtcChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgX3N5c3RlbVRlbXAoX05hbWVzcGFjZSBuYW1lc3BhY2UpOwogIGV4dGVybmFsIHN0YXRpYyBfZXhpc3RzKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCk7CiAgZXh0ZXJuYWwgc3RhdGljIF9jcmVhdGUoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKICBleHRlcm5hbCBzdGF0aWMgX2RlbGV0ZU5hdGl2ZSgKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLCBib29sIHJlY3Vyc2l2ZSk7CiAgZXh0ZXJuYWwgc3RhdGljIF9yZW5hbWUoCiAgICAgIF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwgU3RyaW5nIG5ld1BhdGgpOwogIGV4dGVybmFsIHN0YXRpYyB2b2lkIF9maWxsV2l0aERpcmVjdG9yeUxpc3RpbmcoCiAgICAgIF9OYW1lc3BhY2UgbmFtZXNwYWNlLAogICAgICBMaXN0PEZpbGVTeXN0ZW1FbnRpdHk+IGxpc3QsCiAgICAgIFVpbnQ4TGlzdCByYXdQYXRoLAogICAgICBib29sIHJlY3Vyc2l2ZSwKICAgICAgYm9vbCBmb2xsb3dMaW5rcyk7CgogIHN0YXRpYyBEaXJlY3RvcnkgZ2V0IGN1cnJlbnQgewogICAgdmFyIHJlc3VsdCA9IF9jdXJyZW50KF9OYW1lc3BhY2UuX25hbWVzcGFjZSk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgICAiR2V0dGluZyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGZhaWxlZCIsICIiLCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIG5ldyBfRGlyZWN0b3J5KHJlc3VsdCk7CiAgfQoKICBzdGF0aWMgdm9pZCBzZXQgY3VycmVudChwYXRoKSB7CiAgICBVaW50OExpc3QgX3Jhd1BhdGg7CiAgICBpZiAocGF0aCBpcyBfRGlyZWN0b3J5KSB7CiAgICAgIC8vIEZvciBvdXIgaW50ZXJuYWwgRGlyZWN0b3J5IGltcGxlbWVudGF0aW9uLCBnbyBhaGVhZCBhbmQgdXNlIHRoZSByYXcKICAgICAgLy8gcGF0aC4KICAgICAgX3Jhd1BhdGggPSBwYXRoLl9yYXdQYXRoOwogICAgfSBlbHNlIGlmIChwYXRoIGlzIERpcmVjdG9yeSkgewogICAgICAvLyBGSVhNRShia29ueWkpOiBwYWNrYWdlOmZpbGUgcGFzc2VzIGluIGluc3RhbmNlcyBvZiBjbGFzc2VzIHdoaWNoIGRvCiAgICAgIC8vIG5vdCBoYXZlIF9wYXRoIGRlZmluZWQsIHNvIHdlIHdpbGwgZmFsbGJhY2sgdG8gdXNpbmcgdGhlIGV4aXN0aW5nCiAgICAgIC8vIHBhdGggU3RyaW5nIGZvciBub3cuCiAgICAgIF9yYXdQYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdG9VdGY4QXJyYXkocGF0aC5wYXRoKTsKICAgIH0gZWxzZSBpZiAocGF0aCBpcyBTdHJpbmcpIHsKICAgICAgX3Jhd1BhdGggPSBGaWxlU3lzdGVtRW50aXR5Ll90b1V0ZjhBcnJheShwYXRoKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCcke0Vycm9yLnNhZmVUb1N0cmluZyhwYXRoKX0gaXMgbm90IGEgU3RyaW5nIG9yJwogICAgICAgICAgJyBEaXJlY3RvcnknKTsKICAgIH0KICAgIGlmICghX0VtYmVkZGVyQ29uZmlnLl9tYXlDaGRpcikgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICJUaGlzIGVtYmVkZGVyIGRpc2FsbG93cyBzZXR0aW5nIERpcmVjdG9yeS5jdXJyZW50Iik7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX3NldEN1cnJlbnQoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCk7CiAgICBpZiAocmVzdWx0IGlzIEFyZ3VtZW50RXJyb3IpIHRocm93IHJlc3VsdDsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigKICAgICAgICAgICJTZXR0aW5nIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICB9CgogIFVyaSBnZXQgdXJpIHsKICAgIHJldHVybiBuZXcgVXJpLmRpcmVjdG9yeShwYXRoKTsKICB9CgogIEZ1dHVyZTxib29sPiBleGlzdHMoKSB7CiAgICByZXR1cm4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmRpcmVjdG9yeUV4aXN0cywgW251bGwsIF9yYXdQYXRoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbk9yRXJyb3JGcm9tUmVzcG9uc2UocmVzcG9uc2UsICJFeGlzdHMgZmFpbGVkIik7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlID09IDE7CiAgICB9KTsKICB9CgogIGJvb2wgZXhpc3RzU3luYygpIHsKICAgIHZhciByZXN1bHQgPSBfZXhpc3RzKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJFeGlzdHMgZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiAocmVzdWx0ID09IDEpOwogIH0KCiAgRGlyZWN0b3J5IGdldCBhYnNvbHV0ZSA9PiBuZXcgRGlyZWN0b3J5KF9hYnNvbHV0ZVBhdGgpOwoKICBGdXR1cmU8RGlyZWN0b3J5PiBjcmVhdGUoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIGlmIChyZWN1cnNpdmUpIHsKICAgICAgcmV0dXJuIGV4aXN0cygpLnRoZW4oKGV4aXN0cykgewogICAgICAgIGlmIChleGlzdHMpIHJldHVybiB0aGlzOwogICAgICAgIGlmIChwYXRoICE9IHBhcmVudC5wYXRoKSB7CiAgICAgICAgICByZXR1cm4gcGFyZW50LmNyZWF0ZShyZWN1cnNpdmU6IHRydWUpLnRoZW4oKF8pIHsKICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZSgpOwogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBjcmVhdGUoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgICBfSU9TZXJ2aWNlLmRpcmVjdG9yeUNyZWF0ZSwgW251bGwsIF9yYXdQYXRoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICAgIHRocm93IF9leGNlcHRpb25PckVycm9yRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAiQ3JlYXRpb24gZmFpbGVkIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9KTsKICAgIH0KICB9CgogIHZvaWQgY3JlYXRlU3luYyh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSkgewogICAgaWYgKHJlY3Vyc2l2ZSkgewogICAgICBpZiAoZXhpc3RzU3luYygpKSByZXR1cm47CiAgICAgIGlmIChwYXRoICE9IHBhcmVudC5wYXRoKSB7CiAgICAgICAgcGFyZW50LmNyZWF0ZVN5bmMocmVjdXJzaXZlOiB0cnVlKTsKICAgICAgfQogICAgfQogICAgdmFyIHJlc3VsdCA9IF9jcmVhdGUoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIkNyZWF0aW9uIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBzdGF0aWMgRGlyZWN0b3J5IGdldCBzeXN0ZW1UZW1wID0+CiAgICAgIG5ldyBEaXJlY3RvcnkoX3N5c3RlbVRlbXAoX05hbWVzcGFjZS5fbmFtZXNwYWNlKSk7CgogIEZ1dHVyZTxEaXJlY3Rvcnk+IGNyZWF0ZVRlbXAoW1N0cmluZyBwcmVmaXhdKSB7CiAgICBwcmVmaXggPz89ICcnOwogICAgaWYgKHBhdGggPT0gJycpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkRpcmVjdG9yeS5jcmVhdGVUZW1wIGNhbGxlZCB3aXRoIGFuIGVtcHR5IHBhdGguICIKICAgICAgICAgICJUbyB1c2UgdGhlIHN5c3RlbSB0ZW1wIGRpcmVjdG9yeSwgdXNlIERpcmVjdG9yeS5zeXN0ZW1UZW1wIik7CiAgICB9CiAgICBTdHJpbmcgZnVsbFByZWZpeDsKICAgIC8vIEZJWE1FKGJrb255aSk6IGhlcmUgd2UncmUgdXNpbmcgYHBhdGhgIGRpcmVjdGx5LCB3aGljaCBtaWdodCBjYXVzZQogICAgLy8gaXNzdWVzIGlmIGl0IGlzIG5vdCBVVEYtOCBlbmNvZGVkLgogICAgaWYgKHBhdGguZW5kc1dpdGgoJy8nKSB8fCAoUGxhdGZvcm0uaXNXaW5kb3dzICYmIHBhdGguZW5kc1dpdGgoJ1xcJykpKSB7CiAgICAgIGZ1bGxQcmVmaXggPSAiJHBhdGgkcHJlZml4IjsKICAgIH0gZWxzZSB7CiAgICAgIGZ1bGxQcmVmaXggPSAiJHBhdGgke1BsYXRmb3JtLnBhdGhTZXBhcmF0b3J9JHByZWZpeCI7CiAgICB9CiAgICByZXR1cm4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZShfSU9TZXJ2aWNlLmRpcmVjdG9yeUNyZWF0ZVRlbXAsCiAgICAgICAgW251bGwsIEZpbGVTeXN0ZW1FbnRpdHkuX3RvVXRmOEFycmF5KGZ1bGxQcmVmaXgpXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbk9yRXJyb3JGcm9tUmVzcG9uc2UoCiAgICAgICAgICAgIHJlc3BvbnNlLCAiQ3JlYXRpb24gb2YgdGVtcG9yYXJ5IGRpcmVjdG9yeSBmYWlsZWQiKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IERpcmVjdG9yeShyZXNwb25zZSk7CiAgICB9KTsKICB9CgogIERpcmVjdG9yeSBjcmVhdGVUZW1wU3luYyhbU3RyaW5nIHByZWZpeF0pIHsKICAgIHByZWZpeCA/Pz0gJyc7CiAgICBpZiAocGF0aCA9PSAnJykgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiRGlyZWN0b3J5LmNyZWF0ZVRlbXAgY2FsbGVkIHdpdGggYW4gZW1wdHkgcGF0aC4gIgogICAgICAgICAgIlRvIHVzZSB0aGUgc3lzdGVtIHRlbXAgZGlyZWN0b3J5LCB1c2UgRGlyZWN0b3J5LnN5c3RlbVRlbXAiKTsKICAgIH0KICAgIFN0cmluZyBmdWxsUHJlZml4OwogICAgLy8gRklYTUUoYmtvbnlpKTogaGVyZSB3ZSdyZSB1c2luZyBgcGF0aGAgZGlyZWN0bHksIHdoaWNoIG1pZ2h0IGNhdXNlCiAgICAvLyBpc3N1ZXMgaWYgaXQgaXMgbm90IFVURi04IGVuY29kZWQuCiAgICBpZiAocGF0aC5lbmRzV2l0aCgnLycpIHx8IChQbGF0Zm9ybS5pc1dpbmRvd3MgJiYgcGF0aC5lbmRzV2l0aCgnXFwnKSkpIHsKICAgICAgZnVsbFByZWZpeCA9ICIkcGF0aCRwcmVmaXgiOwogICAgfSBlbHNlIHsKICAgICAgZnVsbFByZWZpeCA9ICIkcGF0aCR7UGxhdGZvcm0ucGF0aFNlcGFyYXRvcn0kcHJlZml4IjsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfY3JlYXRlVGVtcCgKICAgICAgICBfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIEZpbGVTeXN0ZW1FbnRpdHkuX3RvVXRmOEFycmF5KGZ1bGxQcmVmaXgpKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigKICAgICAgICAgICJDcmVhdGlvbiBvZiB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZhaWxlZCIsIGZ1bGxQcmVmaXgsIHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gbmV3IERpcmVjdG9yeShyZXN1bHQpOwogIH0KCiAgRnV0dXJlPERpcmVjdG9yeT4gX2RlbGV0ZSh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSkgewogICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgICAgIF9JT1NlcnZpY2UuZGlyZWN0b3J5RGVsZXRlLCBbbnVsbCwgX3Jhd1BhdGgsIHJlY3Vyc2l2ZV0pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25PckVycm9yRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAiRGVsZXRpb24gZmFpbGVkIik7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIHZvaWQgX2RlbGV0ZVN5bmMoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIHZhciByZXN1bHQgPSBfZGVsZXRlTmF0aXZlKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgsIHJlY3Vyc2l2ZSk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIkRlbGV0aW9uIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBGdXR1cmU8RGlyZWN0b3J5PiByZW5hbWUoU3RyaW5nIG5ld1BhdGgpIHsKICAgIHJldHVybiBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgIF9JT1NlcnZpY2UuZGlyZWN0b3J5UmVuYW1lLCBbbnVsbCwgX3Jhd1BhdGgsIG5ld1BhdGhdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uT3JFcnJvckZyb21SZXNwb25zZShyZXNwb25zZSwgIlJlbmFtZSBmYWlsZWQiKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IERpcmVjdG9yeShuZXdQYXRoKTsKICAgIH0pOwogIH0KCiAgRGlyZWN0b3J5IHJlbmFtZVN5bmMoU3RyaW5nIG5ld1BhdGgpIHsKICAgIGlmIChuZXdQYXRoIGlzISBTdHJpbmcpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfcmVuYW1lKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgsIG5ld1BhdGgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJSZW5hbWUgZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiBuZXcgRGlyZWN0b3J5KG5ld1BhdGgpOwogIH0KCiAgU3RyZWFtPEZpbGVTeXN0ZW1FbnRpdHk+IGxpc3QoCiAgICAgIHtib29sIHJlY3Vyc2l2ZTogZmFsc2UsIGJvb2wgZm9sbG93TGlua3M6IHRydWV9KSB7CiAgICByZXR1cm4gbmV3IF9Bc3luY0RpcmVjdG9yeUxpc3RlcigKICAgICAgICAgICAgLy8gRklYTUUoYmtvbnlpKTogaGVyZSB3ZSdyZSB1c2luZyBgcGF0aGAgZGlyZWN0bHksIHdoaWNoIG1pZ2h0IGNhdXNlIGlzc3VlcwogICAgICAgICAgICAvLyBpZiBpdCBpcyBub3QgVVRGLTggZW5jb2RlZC4KICAgICAgICAgICAgRmlsZVN5c3RlbUVudGl0eS5fdG9VdGY4QXJyYXkoCiAgICAgICAgICAgICAgICBGaWxlU3lzdGVtRW50aXR5Ll9lbnN1cmVUcmFpbGluZ1BhdGhTZXBhcmF0b3JzKHBhdGgpKSwKICAgICAgICAgICAgcmVjdXJzaXZlLAogICAgICAgICAgICBmb2xsb3dMaW5rcykKICAgICAgICAuc3RyZWFtOwogIH0KCiAgTGlzdDxGaWxlU3lzdGVtRW50aXR5PiBsaXN0U3luYygKICAgICAge2Jvb2wgcmVjdXJzaXZlOiBmYWxzZSwgYm9vbCBmb2xsb3dMaW5rczogdHJ1ZX0pIHsKICAgIGlmIChyZWN1cnNpdmUgaXMhIGJvb2wgfHwgZm9sbG93TGlua3MgaXMhIGJvb2wpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSA8RmlsZVN5c3RlbUVudGl0eT5bXTsKICAgIF9maWxsV2l0aERpcmVjdG9yeUxpc3RpbmcoCiAgICAgICAgX05hbWVzcGFjZS5fbmFtZXNwYWNlLAogICAgICAgIHJlc3VsdCwKICAgICAgICAvLyBGSVhNRShia29ueWkpOiBoZXJlIHdlJ3JlIHVzaW5nIGBwYXRoYCBkaXJlY3RseSwgd2hpY2ggbWlnaHQgY2F1c2UgaXNzdWVzCiAgICAgICAgLy8gaWYgaXQgaXMgbm90IFVURi04IGVuY29kZWQuCiAgICAgICAgRmlsZVN5c3RlbUVudGl0eS5fdG9VdGY4QXJyYXkoCiAgICAgICAgICAgIEZpbGVTeXN0ZW1FbnRpdHkuX2Vuc3VyZVRyYWlsaW5nUGF0aFNlcGFyYXRvcnMocGF0aCkpLAogICAgICAgIHJlY3Vyc2l2ZSwKICAgICAgICBmb2xsb3dMaW5rcyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkRpcmVjdG9yeTogJyRwYXRoJyI7CgogIGJvb2wgX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkgPT4KICAgICAgcmVzcG9uc2UgaXMgTGlzdCAmJiByZXNwb25zZVswXSAhPSBfc3VjY2Vzc1Jlc3BvbnNlOwoKICBfZXhjZXB0aW9uT3JFcnJvckZyb21SZXNwb25zZShyZXNwb25zZSwgU3RyaW5nIG1lc3NhZ2UpIHsKICAgIGFzc2VydChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSk7CiAgICBzd2l0Y2ggKHJlc3BvbnNlW19lcnJvclJlc3BvbnNlRXJyb3JUeXBlXSkgewogICAgICBjYXNlIF9pbGxlZ2FsQXJndW1lbnRSZXNwb25zZToKICAgICAgICByZXR1cm4gbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgICAgY2FzZSBfb3NFcnJvclJlc3BvbnNlOgogICAgICAgIHZhciBlcnIgPSBuZXcgT1NFcnJvcihyZXNwb25zZVtfb3NFcnJvclJlc3BvbnNlTWVzc2FnZV0sCiAgICAgICAgICAgIHJlc3BvbnNlW19vc0Vycm9yUmVzcG9uc2VFcnJvckNvZGVdKTsKICAgICAgICByZXR1cm4gbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24obWVzc2FnZSwgcGF0aCwgZXJyKTsKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gbmV3IEV4Y2VwdGlvbigiVW5rbm93biBlcnJvciIpOwogICAgfQogIH0KfQoKYWJzdHJhY3QgY2xhc3MgX0FzeW5jRGlyZWN0b3J5TGlzdGVyT3BzIHsKICBleHRlcm5hbCBmYWN0b3J5IF9Bc3luY0RpcmVjdG9yeUxpc3Rlck9wcyhpbnQgcG9pbnRlcik7CgogIGludCBnZXRQb2ludGVyKCk7Cn0KCmNsYXNzIF9Bc3luY0RpcmVjdG9yeUxpc3RlciB7CiAgc3RhdGljIGNvbnN0IGludCBsaXN0RmlsZSA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBsaXN0RGlyZWN0b3J5ID0gMTsKICBzdGF0aWMgY29uc3QgaW50IGxpc3RMaW5rID0gMjsKICBzdGF0aWMgY29uc3QgaW50IGxpc3RFcnJvciA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBsaXN0RG9uZSA9IDQ7CgogIHN0YXRpYyBjb25zdCBpbnQgcmVzcG9uc2VUeXBlID0gMDsKICBzdGF0aWMgY29uc3QgaW50IHJlc3BvbnNlUGF0aCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCByZXNwb25zZUNvbXBsZXRlID0gMTsKICBzdGF0aWMgY29uc3QgaW50IHJlc3BvbnNlRXJyb3IgPSAyOwoKICBmaW5hbCBVaW50OExpc3QgcmF3UGF0aDsKICBmaW5hbCBib29sIHJlY3Vyc2l2ZTsKICBmaW5hbCBib29sIGZvbGxvd0xpbmtzOwoKICBTdHJlYW1Db250cm9sbGVyPEZpbGVTeXN0ZW1FbnRpdHk+IGNvbnRyb2xsZXI7CiAgYm9vbCBjYW5jZWxlZCA9IGZhbHNlOwogIGJvb2wgbmV4dFJ1bm5pbmcgPSBmYWxzZTsKICBib29sIGNsb3NlZCA9IGZhbHNlOwogIF9Bc3luY0RpcmVjdG9yeUxpc3Rlck9wcyBfb3BzOwogIENvbXBsZXRlciBjbG9zZUNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKCiAgX0FzeW5jRGlyZWN0b3J5TGlzdGVyKHRoaXMucmF3UGF0aCwgdGhpcy5yZWN1cnNpdmUsIHRoaXMuZm9sbG93TGlua3MpIHsKICAgIGNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxGaWxlU3lzdGVtRW50aXR5PigKICAgICAgICBvbkxpc3Rlbjogb25MaXN0ZW4sIG9uUmVzdW1lOiBvblJlc3VtZSwgb25DYW5jZWw6IG9uQ2FuY2VsLCBzeW5jOiB0cnVlKTsKICB9CgogIC8vIFdBUk5JTkc6CiAgLy8gQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgaW5jcmVhc2UgdGhlIHJlZmVyZW5jZSBjb3VudCBvbiB0aGUgbmF0aXZlCiAgLy8gb2JqZWN0IHRoYXQgaW1wbGVtZW50cyB0aGUgYXN5bmMgZGlyZWN0b3J5IGxpc3RlciBvcGVyYXRpb25zLiBJdCBzaG91bGQKICAvLyBvbmx5IGJlIGNhbGxlZCB0byBwYXNzIHRoZSBwb2ludGVyIHRvIHRoZSBJTyBTZXJ2aWNlLCB3aGljaCB3aWxsIGRlY3JlbWVudAogIC8vIHRoZSByZWZlcmVuY2UgY291bnQgd2hlbiBpdCBpcyBmaW5pc2hlZCB3aXRoIGl0LgogIGludCBfcG9pbnRlcigpIHsKICAgIHJldHVybiAoX29wcyA9PSBudWxsKSA/IG51bGwgOiBfb3BzLmdldFBvaW50ZXIoKTsKICB9CgogIFN0cmVhbTxGaWxlU3lzdGVtRW50aXR5PiBnZXQgc3RyZWFtID0+IGNvbnRyb2xsZXIuc3RyZWFtOwoKICB2b2lkIG9uTGlzdGVuKCkgewogICAgX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZShfSU9TZXJ2aWNlLmRpcmVjdG9yeUxpc3RTdGFydCwKICAgICAgICBbbnVsbCwgcmF3UGF0aCwgcmVjdXJzaXZlLCBmb2xsb3dMaW5rc10pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChyZXNwb25zZSBpcyBpbnQpIHsKICAgICAgICBfb3BzID0gbmV3IF9Bc3luY0RpcmVjdG9yeUxpc3Rlck9wcyhyZXNwb25zZSk7CiAgICAgICAgbmV4dCgpOwogICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlIGlzIEVycm9yKSB7CiAgICAgICAgY29udHJvbGxlci5hZGRFcnJvcihyZXNwb25zZSwgcmVzcG9uc2Uuc3RhY2tUcmFjZSk7CiAgICAgICAgY2xvc2UoKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBlcnJvcihyZXNwb25zZSk7CiAgICAgICAgY2xvc2UoKTsKICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIG9uUmVzdW1lKCkgewogICAgaWYgKCFuZXh0UnVubmluZykgewogICAgICBuZXh0KCk7CiAgICB9CiAgfQoKICBGdXR1cmUgb25DYW5jZWwoKSB7CiAgICBjYW5jZWxlZCA9IHRydWU7CiAgICAvLyBJZiB3ZSBhcmUgYWN0aXZlLCBidXQgbm90IHJlcXVlc3RpbmcsIGNsb3NlLgogICAgaWYgKCFuZXh0UnVubmluZykgewogICAgICBjbG9zZSgpOwogICAgfQoKICAgIHJldHVybiBjbG9zZUNvbXBsZXRlci5mdXR1cmU7CiAgfQoKICB2b2lkIG5leHQoKSB7CiAgICBpZiAoY2FuY2VsZWQpIHsKICAgICAgY2xvc2UoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGNvbnRyb2xsZXIuaXNQYXVzZWQgfHwgbmV4dFJ1bm5pbmcpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIHBvaW50ZXIgPSBfcG9pbnRlcigpOwogICAgaWYgKHBvaW50ZXIgPT0gbnVsbCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBuZXh0UnVubmluZyA9IHRydWU7CiAgICBfSU9TZXJ2aWNlLl9kaXNwYXRjaChfSU9TZXJ2aWNlLmRpcmVjdG9yeUxpc3ROZXh0LCBbcG9pbnRlcl0pCiAgICAgICAgLnRoZW4oKHJlc3VsdCkgewogICAgICBuZXh0UnVubmluZyA9IGZhbHNlOwogICAgICBpZiAocmVzdWx0IGlzIExpc3QpIHsKICAgICAgICBuZXh0KCk7CiAgICAgICAgYXNzZXJ0KHJlc3VsdC5sZW5ndGggJSAyID09IDApOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVzdWx0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBhc3NlcnQoaSAlIDIgPT0gMCk7CiAgICAgICAgICBzd2l0Y2ggKHJlc3VsdFtpKytdKSB7CiAgICAgICAgICAgIGNhc2UgbGlzdEZpbGU6CiAgICAgICAgICAgICAgY29udHJvbGxlci5hZGQobmV3IEZpbGUuZnJvbVJhd1BhdGgocmVzdWx0W2ldKSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgbGlzdERpcmVjdG9yeToKICAgICAgICAgICAgICBjb250cm9sbGVyLmFkZChuZXcgRGlyZWN0b3J5LmZyb21SYXdQYXRoKHJlc3VsdFtpXSkpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGxpc3RMaW5rOgogICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWRkKG5ldyBMaW5rLmZyb21SYXdQYXRoKHJlc3VsdFtpXSkpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGxpc3RFcnJvcjoKICAgICAgICAgICAgICBlcnJvcihyZXN1bHRbaV0pOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGxpc3REb25lOgogICAgICAgICAgICAgIGNhbmNlbGVkID0gdHJ1ZTsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGNvbnRyb2xsZXIuYWRkRXJyb3IobmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIkludGVybmFsIGVycm9yIikpOwogICAgICB9CiAgICB9KTsKICB9CgogIHZvaWQgX2NsZWFudXAoKSB7CiAgICBjb250cm9sbGVyLmNsb3NlKCk7CiAgICBjbG9zZUNvbXBsZXRlci5jb21wbGV0ZSgpOwogICAgX29wcyA9IG51bGw7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgaWYgKGNsb3NlZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAobmV4dFJ1bm5pbmcpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgY2xvc2VkID0gdHJ1ZTsKCiAgICB2YXIgcG9pbnRlciA9IF9wb2ludGVyKCk7CiAgICBpZiAocG9pbnRlciA9PSBudWxsKSB7CiAgICAgIF9jbGVhbnVwKCk7CiAgICB9IGVsc2UgewogICAgICBfSU9TZXJ2aWNlLl9kaXNwYXRjaChfSU9TZXJ2aWNlLmRpcmVjdG9yeUxpc3RTdG9wLCBbcG9pbnRlcl0pCiAgICAgICAgICAud2hlbkNvbXBsZXRlKF9jbGVhbnVwKTsKICAgIH0KICB9CgogIHZvaWQgZXJyb3IobWVzc2FnZSkgewogICAgdmFyIGVycm9yVHlwZSA9IG1lc3NhZ2VbcmVzcG9uc2VFcnJvcl1bX2Vycm9yUmVzcG9uc2VFcnJvclR5cGVdOwogICAgaWYgKGVycm9yVHlwZSA9PSBfaWxsZWdhbEFyZ3VtZW50UmVzcG9uc2UpIHsKICAgICAgY29udHJvbGxlci5hZGRFcnJvcihuZXcgQXJndW1lbnRFcnJvcigpKTsKICAgIH0gZWxzZSBpZiAoZXJyb3JUeXBlID09IF9vc0Vycm9yUmVzcG9uc2UpIHsKICAgICAgdmFyIHJlc3BvbnNlRXJyb3JJbmZvID0gbWVzc2FnZVtyZXNwb25zZUVycm9yXTsKICAgICAgdmFyIGVyciA9IG5ldyBPU0Vycm9yKHJlc3BvbnNlRXJyb3JJbmZvW19vc0Vycm9yUmVzcG9uc2VNZXNzYWdlXSwKICAgICAgICAgIHJlc3BvbnNlRXJyb3JJbmZvW19vc0Vycm9yUmVzcG9uc2VFcnJvckNvZGVdKTsKICAgICAgdmFyIGVycm9yUGF0aCA9IG1lc3NhZ2VbcmVzcG9uc2VQYXRoXTsKICAgICAgaWYgKGVycm9yUGF0aCA9PSBudWxsKSB7CiAgICAgICAgZXJyb3JQYXRoID0gdXRmOC5kZWNvZGUocmF3UGF0aCwgYWxsb3dNYWxmb3JtZWQ6IHRydWUpOwogICAgICB9IGVsc2UgaWYgKGVycm9yUGF0aCBpcyBVaW50OExpc3QpIHsKICAgICAgICBlcnJvclBhdGggPSB1dGY4LmRlY29kZShtZXNzYWdlW3Jlc3BvbnNlUGF0aF0sIGFsbG93TWFsZm9ybWVkOiB0cnVlKTsKICAgICAgfQogICAgICBjb250cm9sbGVyLmFkZEVycm9yKAogICAgICAgICAgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIkRpcmVjdG9yeSBsaXN0aW5nIGZhaWxlZCIsIGVycm9yUGF0aCwgZXJyKSk7CiAgICB9IGVsc2UgewogICAgICBjb250cm9sbGVyLmFkZEVycm9yKG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJJbnRlcm5hbCBlcnJvciIpKTsKICAgIH0KICB9Cn0KgcEATk48AREBQRAWARwuEjUEAS4bOQZFPgQBHAEySEg8REQhQBtAMhwjGRYZASEyHSVDBiMEASIYHk0PICRNSx47ITYNTxkGJiJABj8vHSVFBgQBECQEARopSChICBwIBAEWOx1EBhoEAToBNhUmISM7HQ4RGwoKDStKKkwKFQoGBAEtFSAhLAgGOx1GBgQBJTkBMhMWUUkGF0oqTSMNPAZITSgtQQgmCAQBLhMWUUkGF0oqTSMNPAYeSx0lSQYiBAE3KUUbKEoIEwgEAS5MHUYGBAEtKVEoSAglCAQBKR4hBkQdRAYjBAEhOSZZKytHFxkRBAEjOTYhBicfHxBVJydDExYTBAEtASU7ATwoMSUkHUEyPA8vBgQCASo6ARQCAR4hJiEiIQElJSkmARsYGgExGRwXIS4BSjlRBAEOS01QNhM2BAE8ARRAQx03ECY8EQ8ZEQgIBAEUGA4GBAEWFTQYDwYBIgQBEBQPDgYuDgYeGw4GGEIZGxwQKDIeIRs/FSBEFRs/FRwgFRsfFgwKD0gICAQBFBgfEQQBERIOBhcOBhMBHhsSDUQjBgQBGEUxMDA2SDktH0ArTggbUA1GBgQCARtkYXJ0OmlvL2RpcmVjdG9yeV9pbXBsLmRhcnQzb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL2VtYmVkZGVyX2NvbmZpZy5kYXJ0hSgvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLy8vIEVtYmVkZGVyLXNwZWNpZmljLCBmaW5lLWdyYWluZWQgZGFydDppbyBjb25maWd1cmF0aW9uLgovLy8KLy8vIFRoaXMgY2xhc3MgY29udGFpbnMgcGVyLUlzb2xhdGUgZmxhZ3MgdGhhdCBhbiBlbWJlZGRlciBjYW4gc2V0IHRvIHB1dAovLy8gZmluZS1ncmFpbmVkIGxpbWl0YXRpb25zIG9uIHdoYXQgcHJvY2Vzcy12aXNpYmxlIG9wZXJhdGlvbnMgSXNvbGF0ZXMgYXJlCi8vLyBwZXJtaXR0ZWQgdG8gdXNlIChlLmcuIGV4aXQoKSkuIEJ5IGRlZmF1bHQsIHRoZSB3aG9sZSBkYXJ0OmlvIEFQSSBpcwovLy8gZW5hYmxlZC4gV2hlbiBhIGRpc2FsbG93ZWQgb3BlcmF0aW9uIGlzIGF0dGVtcHRlZCwgYW4gYFVuc3VwcG9ydGVkRXJyb3JgIGlzCi8vLyB0aHJvd24uCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKYWJzdHJhY3QgY2xhc3MgX0VtYmVkZGVyQ29uZmlnIHsKICAvLy8gVGhlIElzb2xhdGUgbWF5IHNldCBEaXJlY3RvcnkuY3VycmVudC4KICBzdGF0aWMgYm9vbCBfbWF5Q2hkaXIgPSB0cnVlOwoKICAvLy8gVGhlIElzb2xhdGUgbWF5IGNhbGwgZXhpdCgpLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBzdGF0aWMgYm9vbCBfbWF5RXhpdCA9IHRydWU7CgogIC8vIFRoZSBJc29sYXRlIG1heSBzZXQgU3RkaW4uZWNob01vZGUuCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIHN0YXRpYyBib29sIF9tYXlTZXRFY2hvTW9kZSA9IHRydWU7CgogIC8vIFRoZSBJc29sYXRlIG1heSBzZXQgU3RkaW4ubGluZU1vZGUuCiAgQHByYWdtYSgndm06ZW50cnktcG9pbnQnKQogIHN0YXRpYyBib29sIF9tYXlTZXRMaW5lTW9kZSA9IHRydWU7CgogIC8vLyBUaGUgSXNvbGF0ZSBtYXkgY2FsbCBzbGVlcCgpLgogIEBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JykKICBzdGF0aWMgYm9vbCBfbWF5U2xlZXAgPSB0cnVlOwoKICAvLyBUT0RPKHpyYSk6IENvbnNpZGVyIGFkZGluZzoKICAvLyAtIGFuIG9wdGlvbiB0byBkaXNhbGxvdyBtb2RpZnlpbmcgU2VjdXJpdHlDb250ZXh0LmRlZmF1bHRDb250ZXh0CiAgLy8gLSBhbiBvcHRpb24gdG8gZGlzYWxsb3cgY2xvc2luZyBzdGRvdXQgYW5kIHN0ZGVyci4KfQooAE5OPAERATsESk1JUAwaIS0gASMcHwEpHCYBKRwmASQcIAEhRjgCARxkYXJ0OmlvL2VtYmVkZGVyX2NvbmZpZy5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9ldmVudGhhbmRsZXIuZGFydIFRLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCmNsYXNzIF9FdmVudEhhbmRsZXIgewogIGV4dGVybmFsIHN0YXRpYyB2b2lkIF9zZW5kRGF0YShPYmplY3Qgc2VuZGVyLCBTZW5kUG9ydCBzZW5kUG9ydCwgaW50IGRhdGEpOwp9CgsATk48AREBFk4CARlkYXJ0OmlvL2V2ZW50aGFuZGxlci5kYXJ0N29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9iaW4vZXZlbnRoYW5kbGVyX3BhdGNoLmRhcnSB5i8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb21tb25fcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgX0V2ZW50SGFuZGxlciB7CiAgQHBhdGNoCiAgc3RhdGljIHZvaWQgX3NlbmREYXRhKE9iamVjdCBzZW5kZXIsIFNlbmRQb3J0IHNlbmRQb3J0LCBpbnQgZGF0YSkKICAgICAgbmF0aXZlICJFdmVudEhhbmRsZXJfU2VuZERhdGEiOwoKICBzdGF0aWMgaW50IF90aW1lck1pbGxpc2Vjb25kQ2xvY2soKQogICAgICBuYXRpdmUgIkV2ZW50SGFuZGxlcl9UaW1lck1pbGxpc2Vjb25kQ2xvY2siOwp9ChEATk48ASABBxYJRCYBJjMCASVkYXJ0OmlvLXBhdGNoL2V2ZW50aGFuZGxlcl9wYXRjaC5kYXJ0KG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9maWxlLmRhcnTAAIUBLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8qKgogKiBUaGUgbW9kZXMgaW4gd2hpY2ggYSBGaWxlIGNhbiBiZSBvcGVuZWQuCiAqLwpjbGFzcyBGaWxlTW9kZSB7CiAgLy8vIFRoZSBtb2RlIGZvciBvcGVuaW5nIGEgZmlsZSBvbmx5IGZvciByZWFkaW5nLgogIHN0YXRpYyBjb25zdCByZWFkID0gY29uc3QgRmlsZU1vZGUuX2ludGVybmFsKDApOwogIEBEZXByZWNhdGVkKCJVc2UgcmVhZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUkVBRCA9IHJlYWQ7CgogIC8vLyBNb2RlIGZvciBvcGVuaW5nIGEgZmlsZSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4gVGhlIGZpbGUgaXMKICAvLy8gb3ZlcndyaXR0ZW4gaWYgaXQgYWxyZWFkeSBleGlzdHMuIFRoZSBmaWxlIGlzIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QKICAvLy8gYWxyZWFkeSBleGlzdC4KICBzdGF0aWMgY29uc3Qgd3JpdGUgPSBjb25zdCBGaWxlTW9kZS5faW50ZXJuYWwoMSk7CiAgQERlcHJlY2F0ZWQoIlVzZSB3cml0ZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgV1JJVEUgPSB3cml0ZTsKCiAgLy8vIE1vZGUgZm9yIG9wZW5pbmcgYSBmaWxlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoZQogIC8vLyBlbmQgb2YgaXQuIFRoZSBmaWxlIGlzIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KICBzdGF0aWMgY29uc3QgYXBwZW5kID0gY29uc3QgRmlsZU1vZGUuX2ludGVybmFsKDIpOwogIEBEZXByZWNhdGVkKCJVc2UgYXBwZW5kIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBBUFBFTkQgPSBhcHBlbmQ7CgogIC8vLyBNb2RlIGZvciBvcGVuaW5nIGEgZmlsZSBmb3Igd3JpdGluZyAqb25seSouIFRoZSBmaWxlIGlzCiAgLy8vIG92ZXJ3cml0dGVuIGlmIGl0IGFscmVhZHkgZXhpc3RzLiBUaGUgZmlsZSBpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90CiAgLy8vIGFscmVhZHkgZXhpc3QuCiAgc3RhdGljIGNvbnN0IHdyaXRlT25seSA9IGNvbnN0IEZpbGVNb2RlLl9pbnRlcm5hbCgzKTsKICBARGVwcmVjYXRlZCgiVXNlIHdyaXRlT25seSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgV1JJVEVfT05MWSA9IHdyaXRlT25seTsKCiAgLy8vIE1vZGUgZm9yIG9wZW5pbmcgYSBmaWxlIGZvciB3cml0aW5nICpvbmx5KiB0byB0aGUKICAvLy8gZW5kIG9mIGl0LiBUaGUgZmlsZSBpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCiAgc3RhdGljIGNvbnN0IHdyaXRlT25seUFwcGVuZCA9IGNvbnN0IEZpbGVNb2RlLl9pbnRlcm5hbCg0KTsKICBARGVwcmVjYXRlZCgiVXNlIHdyaXRlT25seUFwcGVuZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgV1JJVEVfT05MWV9BUFBFTkQgPSB3cml0ZU9ubHlBcHBlbmQ7CgogIGZpbmFsIGludCBfbW9kZTsKCiAgY29uc3QgRmlsZU1vZGUuX2ludGVybmFsKHRoaXMuX21vZGUpOwp9CgovLy8gVGhlIG1vZGUgZm9yIG9wZW5pbmcgYSBmaWxlIG9ubHkgZm9yIHJlYWRpbmcuCkBEZXByZWNhdGVkKCJVc2UgRmlsZU1vZGUucmVhZCBpbnN0ZWFkIikKY29uc3QgUkVBRCA9IEZpbGVNb2RlLnJlYWQ7CgovLy8gVGhlIG1vZGUgZm9yIG9wZW5pbmcgYSBmaWxlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nLiBUaGUgZmlsZSBpcwovLy8gb3ZlcndyaXR0ZW4gaWYgaXQgYWxyZWFkeSBleGlzdHMuIFRoZSBmaWxlIGlzIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QKLy8vIGFscmVhZHkgZXhpc3QuCkBEZXByZWNhdGVkKCJVc2UgRmlsZU1vZGUud3JpdGUgaW5zdGVhZCIpCmNvbnN0IFdSSVRFID0gRmlsZU1vZGUud3JpdGU7CgovLy8gVGhlIG1vZGUgZm9yIG9wZW5pbmcgYSBmaWxlIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHRvIHRoZQovLy8gZW5kIG9mIGl0LiBUaGUgZmlsZSBpcyBjcmVhdGVkIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuCkBEZXByZWNhdGVkKCJVc2UgRmlsZU1vZGUuYXBwZW5kIGluc3RlYWQiKQpjb25zdCBBUFBFTkQgPSBGaWxlTW9kZS5hcHBlbmQ7CgovLy8gTW9kZSBmb3Igb3BlbmluZyBhIGZpbGUgZm9yIHdyaXRpbmcgKm9ubHkqLiBUaGUgZmlsZSBpcwovLy8gb3ZlcndyaXR0ZW4gaWYgaXQgYWxyZWFkeSBleGlzdHMuIFRoZSBmaWxlIGlzIGNyZWF0ZWQgaWYgaXQgZG9lcyBub3QKLy8vIGFscmVhZHkgZXhpc3QuCkBEZXByZWNhdGVkKCJVc2UgRmlsZU1vZGUud3JpdGVPbmx5IGluc3RlYWQiKQpjb25zdCBXUklURV9PTkxZID0gRmlsZU1vZGUud3JpdGVPbmx5OwoKLy8vIE1vZGUgZm9yIG9wZW5pbmcgYSBmaWxlIGZvciB3cml0aW5nICpvbmx5KiB0byB0aGUKLy8vIGVuZCBvZiBpdC4gVGhlIGZpbGUgaXMgY3JlYXRlZCBpZiBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LgpARGVwcmVjYXRlZCgiVXNlIEZpbGVNb2RlLndyaXRlT25seUFwcGVuZCBpbnN0ZWFkIikKY29uc3QgV1JJVEVfT05MWV9BUFBFTkQgPSBGaWxlTW9kZS53cml0ZU9ubHlBcHBlbmQ7CgovLy8gVHlwZSBvZiBsb2NrIHdoZW4gcmVxdWVzdGluZyBhIGxvY2sgb24gYSBmaWxlLgpjbGFzcyBGaWxlTG9jayB7CiAgLy8vIFNoYXJlZCBmaWxlIGxvY2suCiAgc3RhdGljIGNvbnN0IHNoYXJlZCA9IGNvbnN0IEZpbGVMb2NrLl9pbnRlcm5hbCgxKTsKICBARGVwcmVjYXRlZCgiVXNlIHNoYXJlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgU0hBUkVEID0gc2hhcmVkOwoKICAvLy8gRXhjbHVzaXZlIGZpbGUgbG9jay4KICBzdGF0aWMgY29uc3QgZXhjbHVzaXZlID0gY29uc3QgRmlsZUxvY2suX2ludGVybmFsKDIpOwogIEBEZXByZWNhdGVkKCJVc2UgZXhjbHVzaXZlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBFWENMVVNJVkUgPSBleGNsdXNpdmU7CgogIC8vLyBCbG9ja2luZyBzaGFyZWQgZmlsZSBsb2NrLgogIHN0YXRpYyBjb25zdCBibG9ja2luZ1NoYXJlZCA9IGNvbnN0IEZpbGVMb2NrLl9pbnRlcm5hbCgzKTsKICBARGVwcmVjYXRlZCgiVXNlIGJsb2NraW5nU2hhcmVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBCTE9DS0lOR19TSEFSRUQgPSBibG9ja2luZ1NoYXJlZDsKCiAgLy8vIEJsb2NraW5nIGV4Y2x1c2l2ZSBmaWxlIGxvY2suCiAgc3RhdGljIGNvbnN0IGJsb2NraW5nRXhjbHVzaXZlID0gY29uc3QgRmlsZUxvY2suX2ludGVybmFsKDQpOwogIEBEZXByZWNhdGVkKCJVc2UgYmxvY2tpbmdFeGNsdXNpdmUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEJMT0NLSU5HX0VYQ0xVU0lWRSA9IGJsb2NraW5nRXhjbHVzaXZlOwoKICBmaW5hbCBpbnQgX3R5cGU7CgogIGNvbnN0IEZpbGVMb2NrLl9pbnRlcm5hbCh0aGlzLl90eXBlKTsKfQoKLyoqCiAqIEEgcmVmZXJlbmNlIHRvIGEgZmlsZSBvbiB0aGUgZmlsZSBzeXN0ZW0uCiAqCiAqIEEgRmlsZSBpbnN0YW5jZSBpcyBhbiBvYmplY3QgdGhhdCBob2xkcyBhIFtwYXRoXSBvbiB3aGljaCBvcGVyYXRpb25zIGNhbgogKiBiZSBwZXJmb3JtZWQuCiAqIFlvdSBjYW4gZ2V0IHRoZSBwYXJlbnQgZGlyZWN0b3J5IG9mIHRoZSBmaWxlIHVzaW5nIHRoZSBnZXR0ZXIgW3BhcmVudF0sCiAqIGEgcHJvcGVydHkgaW5oZXJpdGVkIGZyb20gW0ZpbGVTeXN0ZW1FbnRpdHldLgogKgogKiBDcmVhdGUgYSBuZXcgRmlsZSBvYmplY3Qgd2l0aCBhIHBhdGhuYW1lIHRvIGFjY2VzcyB0aGUgc3BlY2lmaWVkIGZpbGUgb24gdGhlCiAqIGZpbGUgc3lzdGVtIGZyb20geW91ciBwcm9ncmFtLgogKgogKiAgICAgdmFyIG15RmlsZSA9IG5ldyBGaWxlKCdmaWxlLnR4dCcpOwogKgogKiBUaGUgRmlsZSBjbGFzcyBjb250YWlucyBtZXRob2RzIGZvciBtYW5pcHVsYXRpbmcgZmlsZXMgYW5kIHRoZWlyIGNvbnRlbnRzLgogKiBVc2luZyBtZXRob2RzIGluIHRoaXMgY2xhc3MsIHlvdSBjYW4gb3BlbiBhbmQgY2xvc2UgZmlsZXMsIHJlYWQgdG8gYW5kIHdyaXRlCiAqIGZyb20gdGhlbSwgY3JlYXRlIGFuZCBkZWxldGUgdGhlbSwgYW5kIGNoZWNrIGZvciB0aGVpciBleGlzdGVuY2UuCiAqCiAqIFdoZW4gcmVhZGluZyBvciB3cml0aW5nIGEgZmlsZSwgeW91IGNhbiB1c2Ugc3RyZWFtcyAod2l0aCBbb3BlblJlYWRdKSwKICogcmFuZG9tIGFjY2VzcyBvcGVyYXRpb25zICh3aXRoIFtvcGVuXSksCiAqIG9yIGNvbnZlbmllbmNlIG1ldGhvZHMgc3VjaCBhcyBbcmVhZEFzU3RyaW5nXSwKICoKICogTW9zdCBtZXRob2RzIGluIHRoaXMgY2xhc3Mgb2NjdXIgaW4gc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyBwYWlycywKICogZm9yIGV4YW1wbGUsIFtyZWFkQXNTdHJpbmddIGFuZCBbcmVhZEFzU3RyaW5nU3luY10uCiAqIFVubGVzcyB5b3UgaGF2ZSBhIHNwZWNpZmljIHJlYXNvbiBmb3IgdXNpbmcgdGhlIHN5bmNocm9ub3VzIHZlcnNpb24KICogb2YgYSBtZXRob2QsIHByZWZlciB0aGUgYXN5bmNocm9ub3VzIHZlcnNpb24gdG8gYXZvaWQgYmxvY2tpbmcgeW91ciBwcm9ncmFtLgogKgogKiAjIyBJZiBwYXRoIGlzIGEgbGluawogKgogKiBJZiBbcGF0aF0gaXMgYSBzeW1ib2xpYyBsaW5rLCByYXRoZXIgdGhhbiBhIGZpbGUsCiAqIHRoZW4gdGhlIG1ldGhvZHMgb2YgRmlsZSBvcGVyYXRlIG9uIHRoZSB1bHRpbWF0ZSB0YXJnZXQgb2YgdGhlCiAqIGxpbmssIGV4Y2VwdCBmb3IgW2RlbGV0ZV0gYW5kIFtkZWxldGVTeW5jXSwgd2hpY2ggb3BlcmF0ZSBvbgogKiB0aGUgbGluay4KICoKICogIyMgUmVhZCBmcm9tIGEgZmlsZQogKgogKiBUaGUgZm9sbG93aW5nIGNvZGUgc2FtcGxlIHJlYWRzIHRoZSBlbnRpcmUgY29udGVudHMgZnJvbSBhIGZpbGUgYXMgYSBzdHJpbmcKICogdXNpbmcgdGhlIGFzeW5jaHJvbm91cyBbcmVhZEFzU3RyaW5nXSBtZXRob2Q6CiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6YXN5bmMnOwogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICoKICogICAgIHZvaWQgbWFpbigpIHsKICogICAgICAgbmV3IEZpbGUoJ2ZpbGUudHh0JykucmVhZEFzU3RyaW5nKCkudGhlbigoU3RyaW5nIGNvbnRlbnRzKSB7CiAqICAgICAgICAgcHJpbnQoY29udGVudHMpOwogKiAgICAgICB9KTsKICogICAgIH0KICoKICogQSBtb3JlIGZsZXhpYmxlIGFuZCB1c2VmdWwgd2F5IHRvIHJlYWQgYSBmaWxlIGlzIHdpdGggYSBbU3RyZWFtXS4KICogT3BlbiB0aGUgZmlsZSB3aXRoIFtvcGVuUmVhZF0sIHdoaWNoIHJldHVybnMgYSBzdHJlYW0gdGhhdAogKiBwcm92aWRlcyB0aGUgZGF0YSBpbiB0aGUgZmlsZSBhcyBjaHVua3Mgb2YgYnl0ZXMuCiAqIExpc3RlbiB0byB0aGUgc3RyZWFtIGZvciBkYXRhIGFuZCBwcm9jZXNzIGFzIG5lZWRlZC4KICogWW91IGNhbiB1c2UgdmFyaW91cyB0cmFuc2Zvcm1lcnMgaW4gc3VjY2Vzc2lvbiB0byBtYW5pcHVsYXRlIHRoZQogKiBkYXRhIGludG8gdGhlIHJlcXVpcmVkIGZvcm1hdCBvciB0byBwcmVwYXJlIGl0IGZvciBvdXRwdXQuCiAqCiAqIFlvdSBtaWdodCB3YW50IHRvIHVzZSBhIHN0cmVhbSB0byByZWFkIGxhcmdlIGZpbGVzLAogKiB0byBtYW5pcHVsYXRlIHRoZSBkYXRhIHdpdGggdHJhbnNmb3JtZXJzLAogKiBvciBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFub3RoZXIgQVBJLCBzdWNoIGFzIFtXZWJTb2NrZXRdcy4KICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqICAgICBpbXBvcnQgJ2RhcnQ6Y29udmVydCc7CiAqICAgICBpbXBvcnQgJ2RhcnQ6YXN5bmMnOwogKgogKiAgICAgbWFpbigpIHsKICogICAgICAgZmluYWwgZmlsZSA9IG5ldyBGaWxlKCdmaWxlLnR4dCcpOwogKiAgICAgICBTdHJlYW08TGlzdDxpbnQ+PiBpbnB1dFN0cmVhbSA9IGZpbGUub3BlblJlYWQoKTsKICoKICogICAgICAgaW5wdXRTdHJlYW0KICogICAgICAgICAudHJhbnNmb3JtKHV0ZjguZGVjb2RlcikgICAgICAgLy8gRGVjb2RlIGJ5dGVzIHRvIFVURi04LgogKiAgICAgICAgIC50cmFuc2Zvcm0obmV3IExpbmVTcGxpdHRlcigpKSAvLyBDb252ZXJ0IHN0cmVhbSB0byBpbmRpdmlkdWFsIGxpbmVzLgogKiAgICAgICAgIC5saXN0ZW4oKFN0cmluZyBsaW5lKSB7ICAgICAgICAvLyBQcm9jZXNzIHJlc3VsdHMuCiAqICAgICAgICAgICAgIHByaW50KCckbGluZTogJHtsaW5lLmxlbmd0aH0gYnl0ZXMnKTsKICogICAgICAgICAgIH0sCiAqICAgICAgICAgICBvbkRvbmU6ICgpIHsgcHJpbnQoJ0ZpbGUgaXMgbm93IGNsb3NlZC4nKTsgfSwKICogICAgICAgICAgIG9uRXJyb3I6IChlKSB7IHByaW50KGUudG9TdHJpbmcoKSk7IH0pOwogKiAgICAgfQogKgogKiAjIyBXcml0ZSB0byBhIGZpbGUKICoKICogVG8gd3JpdGUgYSBzdHJpbmcgdG8gYSBmaWxlLCB1c2UgdGhlIFt3cml0ZUFzU3RyaW5nXSBtZXRob2Q6CiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKgogKiAgICAgdm9pZCBtYWluKCkgewogKiAgICAgICBmaW5hbCBmaWxlbmFtZSA9ICdmaWxlLnR4dCc7CiAqICAgICAgIG5ldyBGaWxlKGZpbGVuYW1lKS53cml0ZUFzU3RyaW5nKCdzb21lIGNvbnRlbnQnKQogKiAgICAgICAgIC50aGVuKChGaWxlIGZpbGUpIHsKICogICAgICAgICAgIC8vIERvIHNvbWV0aGluZyB3aXRoIHRoZSBmaWxlLgogKiAgICAgICAgIH0pOwogKiAgICAgfQogKgogKiBZb3UgY2FuIGFsc28gd3JpdGUgdG8gYSBmaWxlIHVzaW5nIGEgW1N0cmVhbV0uIE9wZW4gdGhlIGZpbGUgd2l0aAogKiBbb3BlbldyaXRlXSwgd2hpY2ggcmV0dXJucyBhbiBbSU9TaW5rXSB0byB3aGljaCB5b3UgY2FuIHdyaXRlIGRhdGEuCiAqIEJlIHN1cmUgdG8gY2xvc2UgdGhlIHNpbmsgd2l0aCB0aGUgW0lPU2luay5jbG9zZV0gbWV0aG9kLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICoKICogICAgIHZvaWQgbWFpbigpIHsKICogICAgICAgdmFyIGZpbGUgPSBuZXcgRmlsZSgnZmlsZS50eHQnKTsKICogICAgICAgdmFyIHNpbmsgPSBmaWxlLm9wZW5Xcml0ZSgpOwogKiAgICAgICBzaW5rLndyaXRlKCdGSUxFIEFDQ0VTU0VEICR7bmV3IERhdGVUaW1lLm5vdygpfVxuJyk7CiAqCiAqICAgICAgIC8vIENsb3NlIHRoZSBJT1NpbmsgdG8gZnJlZSBzeXN0ZW0gcmVzb3VyY2VzLgogKiAgICAgICBzaW5rLmNsb3NlKCk7CiAqICAgICB9CiAqCiAqICMjIFRoZSB1c2Ugb2YgRnV0dXJlcwogKgogKiBUbyBhdm9pZCB1bmludGVudGlvbmFsIGJsb2NraW5nIG9mIHRoZSBwcm9ncmFtLAogKiBzZXZlcmFsIG1ldGhvZHMgdXNlIGEgW0Z1dHVyZV0gdG8gcmV0dXJuIGEgdmFsdWUuIEZvciBleGFtcGxlLAogKiB0aGUgW2xlbmd0aF0gbWV0aG9kLCB3aGljaCBnZXRzIHRoZSBsZW5ndGggb2YgYSBmaWxlLCByZXR1cm5zIGEgRnV0dXJlLgogKiBVc2UgYHRoZW5gIHRvIHJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24sIHdoaWNoIGlzIGNhbGxlZCB3aGVuCiAqIHRoZSB2YWx1ZSBpcyByZWFkeS4KICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICBtYWluKCkgewogKiAgICAgICBmaW5hbCBmaWxlID0gbmV3IEZpbGUoJ2ZpbGUudHh0Jyk7CiAqCiAqICAgICAgIGZpbGUubGVuZ3RoKCkudGhlbigobGVuKSB7CiAqICAgICAgICAgcHJpbnQobGVuKTsKICogICAgICAgfSk7CiAqICAgICB9CiAqCiAqIEluIGFkZGl0aW9uIHRvIGxlbmd0aCwgdGhlIFtleGlzdHNdLCBbbGFzdE1vZGlmaWVkXSwgW3N0YXRdLCBhbmQKICogb3RoZXIgbWV0aG9kcywgcmV0dXJuIEZ1dHVyZXMuCiAqCiAqICMjIE90aGVyIHJlc291cmNlcwogKgogKiAqIFtEYXJ0IGJ5IEV4YW1wbGVdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kYXJ0LWJ5LWV4YW1wbGUvI2ZpbGVzLWRpcmVjdG9yaWVzLWFuZC1zeW1saW5rcykKICogICBwcm92aWRlcyBhZGRpdGlvbmFsIHRhc2stb3JpZW50ZWQgY29kZSBzYW1wbGVzIHRoYXQgc2hvdyBob3cgdG8gdXNlCiAqICAgdmFyaW91cyBBUEkgZnJvbSB0aGUgRGlyZWN0b3J5IGNsYXNzIGFuZCB0aGUgcmVsYXRlZCBbRmlsZV0gY2xhc3MuCiAqCiAqICogW0kvTyBmb3IgQ29tbWFuZC1MaW5lCiAqICAgQXBwc10oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy9jaDAzLmh0bWwjZGFydGlvLS0taW8tZm9yLWNvbW1hbmQtbGluZS1hcHBzKQogKiAgIGEgc2VjdGlvbiBmcm9tIF9BIFRvdXIgb2YgdGhlIERhcnQgTGlicmFyaWVzXyBjb3ZlcnMgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgogKgogKiAqIFtXcml0ZSBDb21tYW5kLUxpbmUgQXBwc10oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvdHV0b3JpYWxzL2NtZGxpbmUvKSwKICogICBhIHR1dG9yaWFsIGFib3V0IHdyaXRpbmcgY29tbWFuZC1saW5lIGFwcHMsIGluY2x1ZGVzIGluZm9ybWF0aW9uIGFib3V0CiAqICAgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgogKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQphYnN0cmFjdCBjbGFzcyBGaWxlIGltcGxlbWVudHMgRmlsZVN5c3RlbUVudGl0eSB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIFtGaWxlXSBvYmplY3QuCiAgICoKICAgKiBJZiBbcGF0aF0gaXMgYSByZWxhdGl2ZSBwYXRoLCBpdCB3aWxsIGJlIGludGVycHJldGVkIHJlbGF0aXZlIHRvIHRoZQogICAqIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgKHNlZSBbRGlyZWN0b3J5LmN1cnJlbnRdKSwgd2hlbiB1c2VkLgogICAqCiAgICogSWYgW3BhdGhdIGlzIGFuIGFic29sdXRlIHBhdGgsIGl0IHdpbGwgYmUgaW1tdW5lIHRvIGNoYW5nZXMgdG8gdGhlCiAgICogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZmFjdG9yeSBGaWxlKFN0cmluZyBwYXRoKSB7CiAgICBmaW5hbCBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBuZXcgX0ZpbGUocGF0aCk7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLmNyZWF0ZUZpbGUocGF0aCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGUgYSBGaWxlIG9iamVjdCBmcm9tIGEgVVJJLgogICAqCiAgICogSWYgW3VyaV0gY2Fubm90IHJlZmVyZW5jZSBhIGZpbGUgdGhpcyB0aHJvd3MgW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIGZhY3RvcnkgRmlsZS5mcm9tVXJpKFVyaSB1cmkpID0+IG5ldyBGaWxlKHVyaS50b0ZpbGVQYXRoKCkpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgRmlsZSBvYmplY3QgZnJvbSBhIHJhdyBwYXRoLCB0aGF0IGlzLCBhIHNlcXVlbmNlIG9mIGJ5dGVzCiAgICogYXMgcmVwcmVzZW50ZWQgYnkgdGhlIE9TLgogICAqLwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBmYWN0b3J5IEZpbGUuZnJvbVJhd1BhdGgoVWludDhMaXN0IHJhd1BhdGgpIHsKICAgIC8vIFRPRE8oYmtvbnlpKTogSGFuZGxlIG92ZXJyaWRlcy4KICAgIHJldHVybiBuZXcgX0ZpbGUuZnJvbVJhd1BhdGgocmF3UGF0aCk7CiAgfQoKICAvKioKICAgKiBDcmVhdGUgdGhlIGZpbGUuIFJldHVybnMgYSBgRnV0dXJlPEZpbGU+YCB0aGF0IGNvbXBsZXRlcyB3aXRoCiAgICogdGhlIGZpbGUgd2hlbiBpdCBoYXMgYmVlbiBjcmVhdGVkLgogICAqCiAgICogSWYgW3JlY3Vyc2l2ZV0gaXMgZmFsc2UsIHRoZSBkZWZhdWx0LCB0aGUgZmlsZSBpcyBjcmVhdGVkIG9ubHkgaWYKICAgKiBhbGwgZGlyZWN0b3JpZXMgaW4gdGhlIHBhdGggZXhpc3QuIElmIFtyZWN1cnNpdmVdIGlzIHRydWUsIGFsbAogICAqIG5vbi1leGlzdGluZyBwYXRoIGNvbXBvbmVudHMgYXJlIGNyZWF0ZWQuCiAgICoKICAgKiBFeGlzdGluZyBmaWxlcyBhcmUgbGVmdCB1bnRvdWNoZWQgYnkgW2NyZWF0ZV0uIENhbGxpbmcgW2NyZWF0ZV0gb24gYW4KICAgKiBleGlzdGluZyBmaWxlIG1pZ2h0IGZhaWwgaWYgdGhlcmUgYXJlIHJlc3RyaWN0aXZlIHBlcm1pc3Npb25zIG9uCiAgICogdGhlIGZpbGUuCiAgICoKICAgKiBDb21wbGV0ZXMgdGhlIGZ1dHVyZSB3aXRoIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgRnV0dXJlPEZpbGU+IGNyZWF0ZSh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY3JlYXRlIHRoZSBmaWxlLiBFeGlzdGluZyBmaWxlcyBhcmUgbGVmdCB1bnRvdWNoZWQKICAgKiBieSBbY3JlYXRlU3luY10uIENhbGxpbmcgW2NyZWF0ZVN5bmNdIG9uIGFuIGV4aXN0aW5nIGZpbGUgbWlnaHQgZmFpbAogICAqIGlmIHRoZXJlIGFyZSByZXN0cmljdGl2ZSBwZXJtaXNzaW9ucyBvbiB0aGUgZmlsZS4KICAgKgogICAqIElmIFtyZWN1cnNpdmVdIGlzIGZhbHNlLCB0aGUgZGVmYXVsdCwgdGhlIGZpbGUgaXMgY3JlYXRlZAogICAqIG9ubHkgaWYgYWxsIGRpcmVjdG9yaWVzIGluIHRoZSBwYXRoIGV4aXN0LgogICAqIElmIFtyZWN1cnNpdmVdIGlzIHRydWUsIGFsbCBub24tZXhpc3RpbmcgcGF0aCBjb21wb25lbnRzIGFyZSBjcmVhdGVkLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgdm9pZCBjcmVhdGVTeW5jKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KTsKCiAgLyoqCiAgICogUmVuYW1lcyB0aGlzIGZpbGUuIFJldHVybnMgYSBgRnV0dXJlPEZpbGU+YCB0aGF0IGNvbXBsZXRlcwogICAqIHdpdGggYSBbRmlsZV0gaW5zdGFuY2UgZm9yIHRoZSByZW5hbWVkIGZpbGUuCiAgICoKICAgKiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBmaWxlLCB0aGF0IGZpbGUgaXMKICAgKiByZXBsYWNlZC4gSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZGlyZWN0b3J5LCB0aGUKICAgKiBvcGVyYXRpb24gZmFpbHMgYW5kIHRoZSBmdXR1cmUgY29tcGxldGVzIHdpdGggYW4gZXhjZXB0aW9uLgogICAqLwogIEZ1dHVyZTxGaWxlPiByZW5hbWUoU3RyaW5nIG5ld1BhdGgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHJlbmFtZXMgdGhpcyBmaWxlLiBSZXR1cm5zIGEgW0ZpbGVdCiAgICogaW5zdGFuY2UgZm9yIHRoZSByZW5hbWVkIGZpbGUuCiAgICoKICAgKiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBmaWxlLCB0aGF0IGZpbGUgaXMKICAgKiByZXBsYWNlZC4gSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZGlyZWN0b3J5IHRoZQogICAqIG9wZXJhdGlvbiBmYWlscyBhbmQgYW4gZXhjZXB0aW9uIGlzIHRocm93bi4KICAgKi8KICBGaWxlIHJlbmFtZVN5bmMoU3RyaW5nIG5ld1BhdGgpOwoKICAvKioKICAgKiBDb3B5IHRoaXMgZmlsZS4gUmV0dXJucyBhIGBGdXR1cmU8RmlsZT5gIHRoYXQgY29tcGxldGVzCiAgICogd2l0aCBhIFtGaWxlXSBpbnN0YW5jZSBmb3IgdGhlIGNvcGllZCBmaWxlLgogICAqCiAgICogSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZmlsZSwgdGhhdCBmaWxlIGlzCiAgICogcmVwbGFjZWQuIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSwgdGhlCiAgICogb3BlcmF0aW9uIGZhaWxzIGFuZCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGV4Y2VwdGlvbi4KICAgKi8KICBGdXR1cmU8RmlsZT4gY29weShTdHJpbmcgbmV3UGF0aCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY29weSB0aGlzIGZpbGUuIFJldHVybnMgYSBbRmlsZV0KICAgKiBpbnN0YW5jZSBmb3IgdGhlIGNvcGllZCBmaWxlLgogICAqCiAgICogSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZmlsZSwgdGhhdCBmaWxlIGlzCiAgICogcmVwbGFjZWQuIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGRpcmVjdG9yeSB0aGUKICAgKiBvcGVyYXRpb24gZmFpbHMgYW5kIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICovCiAgRmlsZSBjb3B5U3luYyhTdHJpbmcgbmV3UGF0aCk7CgogIC8qKgogICAqIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlLiBSZXR1cm5zIGEgYEZ1dHVyZTxpbnQ+YCB0aGF0CiAgICogY29tcGxldGVzIHdpdGggdGhlIGxlbmd0aCBpbiBieXRlcy4KICAgKi8KICBGdXR1cmU8aW50PiBsZW5ndGgoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBnZXQgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZS4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIGludCBsZW5ndGhTeW5jKCk7CgogIC8qKgogICAqIFJldHVybnMgYSBbRmlsZV0gaW5zdGFuY2Ugd2hvc2UgcGF0aCBpcyB0aGUgYWJzb2x1dGUgcGF0aCB0byBbdGhpc10uCiAgICoKICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBpcyBjb21wdXRlZCBieSBwcmVmaXhpbmcKICAgKiBhIHJlbGF0aXZlIHBhdGggd2l0aCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgYW5kIHJldHVybmluZwogICAqIGFuIGFic29sdXRlIHBhdGggdW5jaGFuZ2VkLgogICAqLwogIEZpbGUgZ2V0IGFic29sdXRlOwoKLyoqCiAqIEdldCB0aGUgbGFzdC1hY2Nlc3NlZCB0aW1lIG9mIHRoZSBmaWxlLgogKgogKiBSZXR1cm5zIGEgYEZ1dHVyZTxEYXRlVGltZT5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIGRhdGUgYW5kIHRpbWUgd2hlbiB0aGUKICogZmlsZSB3YXMgbGFzdCBhY2Nlc3NlZCwgaWYgdGhlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4KICoKICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAqLwogIEZ1dHVyZTxEYXRlVGltZT4gbGFzdEFjY2Vzc2VkKCk7CgovKioKICogR2V0IHRoZSBsYXN0LWFjY2Vzc2VkIHRpbWUgb2YgdGhlIGZpbGUuCiAqCiAqIFJldHVybnMgdGhlIGRhdGUgYW5kIHRpbWUgd2hlbiB0aGUgZmlsZSB3YXMgbGFzdCBhY2Nlc3NlZCwKICogaWYgdGhlIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZS4gQmxvY2tzIHVudGlsIHRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgcmV0dXJuZWQKICogb3IgaXQgaXMgZGV0ZXJtaW5lZCB0aGF0IHRoZSBpbmZvcm1hdGlvbiBpcyBub3QgYXZhaWxhYmxlLgogKgogKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICovCiAgRGF0ZVRpbWUgbGFzdEFjY2Vzc2VkU3luYygpOwoKICAvKioKICAgKiBNb2RpZmllcyB0aGUgdGltZSB0aGUgZmlsZSB3YXMgbGFzdCBhY2Nlc3NlZC4KICAgKgogICAqIFJldHVybnMgYSBbRnV0dXJlXSB0aGF0IGNvbXBsZXRlcyBvbmNlIHRoZSBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZC4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgdGltZSBjYW5ub3QgYmUgc2V0LgogICAqLwogIEZ1dHVyZSBzZXRMYXN0QWNjZXNzZWQoRGF0ZVRpbWUgdGltZSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgbW9kaWZpZXMgdGhlIHRpbWUgdGhlIGZpbGUgd2FzIGxhc3QgYWNjZXNzZWQuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIHRpbWUgY2Fubm90IGJlIHNldC4KICAgKi8KICB2b2lkIHNldExhc3RBY2Nlc3NlZFN5bmMoRGF0ZVRpbWUgdGltZSk7CgovKioKICogR2V0IHRoZSBsYXN0LW1vZGlmaWVkIHRpbWUgb2YgdGhlIGZpbGUuCiAqCiAqIFJldHVybnMgYSBgRnV0dXJlPERhdGVUaW1lPmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgZGF0ZSBhbmQgdGltZSB3aGVuIHRoZQogKiBmaWxlIHdhcyBsYXN0IG1vZGlmaWVkLCBpZiB0aGUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLgogKgogKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICovCiAgRnV0dXJlPERhdGVUaW1lPiBsYXN0TW9kaWZpZWQoKTsKCi8qKgogKiBHZXQgdGhlIGxhc3QtbW9kaWZpZWQgdGltZSBvZiB0aGUgZmlsZS4KICoKICogUmV0dXJucyB0aGUgZGF0ZSBhbmQgdGltZSB3aGVuIHRoZSBmaWxlIHdhcyBsYXN0IG1vZGlmaWVkLAogKiBpZiB0aGUgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlLiBCbG9ja3MgdW50aWwgdGhlIGluZm9ybWF0aW9uIGNhbiBiZSByZXR1cm5lZAogKiBvciBpdCBpcyBkZXRlcm1pbmVkIHRoYXQgdGhlIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUuCiAqCiAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogKi8KICBEYXRlVGltZSBsYXN0TW9kaWZpZWRTeW5jKCk7CgogIC8qKgogICAqIE1vZGlmaWVzIHRoZSB0aW1lIHRoZSBmaWxlIHdhcyBsYXN0IG1vZGlmaWVkLgogICAqCiAgICogUmV0dXJucyBhIFtGdXR1cmVdIHRoYXQgY29tcGxldGVzIG9uY2UgdGhlIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSB0aW1lIGNhbm5vdCBiZSBzZXQuCiAgICovCiAgRnV0dXJlIHNldExhc3RNb2RpZmllZChEYXRlVGltZSB0aW1lKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBtb2RpZmllcyB0aGUgdGltZSB0aGUgZmlsZSB3YXMgbGFzdCBtb2RpZmllZC4KICAgKgogICAqIElmIHRoZSBhdHRyaWJ1dGVzIGNhbm5vdCBiZSBzZXQsIHRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXS4KICAgKi8KICB2b2lkIHNldExhc3RNb2RpZmllZFN5bmMoRGF0ZVRpbWUgdGltZSk7CgogIC8qKgogICAqIE9wZW4gdGhlIGZpbGUgZm9yIHJhbmRvbSBhY2Nlc3Mgb3BlcmF0aW9ucy4gUmV0dXJucyBhCiAgICogYEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgb3BlbmVkCiAgICogcmFuZG9tIGFjY2VzcyBmaWxlLiBbUmFuZG9tQWNjZXNzRmlsZV1zIG11c3QgYmUgY2xvc2VkIHVzaW5nIHRoZQogICAqIFtSYW5kb21BY2Nlc3NGaWxlLmNsb3NlXSBtZXRob2QuCiAgICoKICAgKiBGaWxlcyBjYW4gYmUgb3BlbmVkIGluIHRocmVlIG1vZGVzOgogICAqCiAgICogW0ZpbGVNb2RlLnJlYWRdOiBvcGVuIHRoZSBmaWxlIGZvciByZWFkaW5nLgogICAqCiAgICogW0ZpbGVNb2RlLndyaXRlXTogb3BlbiB0aGUgZmlsZSBmb3IgYm90aCByZWFkaW5nIGFuZCB3cml0aW5nIGFuZAogICAqIHRydW5jYXRlIHRoZSBmaWxlIHRvIGxlbmd0aCB6ZXJvLiBJZiB0aGUgZmlsZSBkb2VzIG5vdCBleGlzdCB0aGUKICAgKiBmaWxlIGlzIGNyZWF0ZWQuCiAgICoKICAgKiBbRmlsZU1vZGUuYXBwZW5kXTogc2FtZSBhcyBbRmlsZU1vZGUud3JpdGVdIGV4Y2VwdCB0aGF0IHRoZSBmaWxlIGlzCiAgICogbm90IHRydW5jYXRlZC4KICAgKi8KICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gb3Blbih7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUucmVhZH0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IG9wZW4gdGhlIGZpbGUgZm9yIHJhbmRvbSBhY2Nlc3Mgb3BlcmF0aW9ucy4gVGhlCiAgICogcmVzdWx0IGlzIGEgW1JhbmRvbUFjY2Vzc0ZpbGVdIG9uIHdoaWNoIHJhbmRvbSBhY2Nlc3Mgb3BlcmF0aW9ucwogICAqIGNhbiBiZSBwZXJmb3JtZWQuIE9wZW5lZCBbUmFuZG9tQWNjZXNzRmlsZV1zIG11c3QgYmUgY2xvc2VkIHVzaW5nCiAgICogdGhlIFtSYW5kb21BY2Nlc3NGaWxlLmNsb3NlXSBtZXRob2QuCiAgICoKICAgKiBTZWUgW29wZW5dIGZvciBpbmZvcm1hdGlvbiBvbiB0aGUgW21vZGVdIGFyZ3VtZW50LgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgUmFuZG9tQWNjZXNzRmlsZSBvcGVuU3luYyh7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUucmVhZH0pOwoKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgaW5kZXBlbmRlbnQgW1N0cmVhbV0gZm9yIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUuCiAgICoKICAgKiBJZiBbc3RhcnRdIGlzIHByZXNlbnQsIHRoZSBmaWxlIHdpbGwgYmUgcmVhZCBmcm9tIGJ5dGUtb2Zmc2V0IFtzdGFydF0uCiAgICogT3RoZXJ3aXNlIGZyb20gdGhlIGJlZ2lubmluZyAoaW5kZXggMCkuCiAgICoKICAgKiBJZiBbZW5kXSBpcyBwcmVzZW50LCBvbmx5IHVwIHRvIGJ5dGUtaW5kZXggW2VuZF0gd2lsbCBiZSByZWFkLiBPdGhlcndpc2UsCiAgICogdW50aWwgZW5kIG9mIGZpbGUuCiAgICoKICAgKiBJbiBvcmRlciB0byBtYWtlIHN1cmUgdGhhdCBzeXN0ZW0gcmVzb3VyY2VzIGFyZSBmcmVlZCwgdGhlIHN0cmVhbQogICAqIG11c3QgYmUgcmVhZCB0byBjb21wbGV0aW9uIG9yIHRoZSBzdWJzY3JpcHRpb24gb24gdGhlIHN0cmVhbSBtdXN0CiAgICogYmUgY2FuY2VsbGVkLgogICAqLwogIFN0cmVhbTxMaXN0PGludD4+IG9wZW5SZWFkKFtpbnQgc3RhcnQsIGludCBlbmRdKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBpbmRlcGVuZGVudCBbSU9TaW5rXSBmb3IgdGhlIGZpbGUuIFRoZQogICAqIFtJT1NpbmtdIG11c3QgYmUgY2xvc2VkIHdoZW4gbm8gbG9uZ2VyIHVzZWQsIHRvIGZyZWUKICAgKiBzeXN0ZW0gcmVzb3VyY2VzLgogICAqCiAgICogQW4gW0lPU2lua10gZm9yIGEgZmlsZSBjYW4gYmUgb3BlbmVkIGluIHR3byBtb2RlczoKICAgKgogICAqICogW0ZpbGVNb2RlLndyaXRlXTogdHJ1bmNhdGVzIHRoZSBmaWxlIHRvIGxlbmd0aCB6ZXJvLgogICAqICogW0ZpbGVNb2RlLmFwcGVuZF06IHNldHMgdGhlIGluaXRpYWwgd3JpdGUgcG9zaXRpb24gdG8gdGhlIGVuZAogICAqICAgb2YgdGhlIGZpbGUuCiAgICoKICAgKiAgV2hlbiB3cml0aW5nIHN0cmluZ3MgdGhyb3VnaCB0aGUgcmV0dXJuZWQgW0lPU2lua10gdGhlIGVuY29kaW5nCiAgICogIHNwZWNpZmllZCB1c2luZyBbZW5jb2RpbmddIHdpbGwgYmUgdXNlZC4gVGhlIHJldHVybmVkIFtJT1NpbmtdCiAgICogIGhhcyBhbiBgZW5jb2RpbmdgIHByb3BlcnR5IHdoaWNoIGNhbiBiZSBjaGFuZ2VkIGFmdGVyIHRoZQogICAqICBbSU9TaW5rXSBoYXMgYmVlbiBjcmVhdGVkLgogICAqLwogIElPU2luayBvcGVuV3JpdGUoe0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLndyaXRlLCBFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pOwoKICAvKioKICAgKiBSZWFkIHRoZSBlbnRpcmUgZmlsZSBjb250ZW50cyBhcyBhIGxpc3Qgb2YgYnl0ZXMuIFJldHVybnMgYQogICAqIGBGdXR1cmU8VWludDhMaXN0PmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgbGlzdCBvZiBieXRlcyB0aGF0CiAgICogaXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgogICAqLwogIEZ1dHVyZTxVaW50OExpc3Q+IHJlYWRBc0J5dGVzKCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgcmVhZCB0aGUgZW50aXJlIGZpbGUgY29udGVudHMgYXMgYSBsaXN0IG9mIGJ5dGVzLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgVWludDhMaXN0IHJlYWRBc0J5dGVzU3luYygpOwoKICAvKioKICAgKiBSZWFkIHRoZSBlbnRpcmUgZmlsZSBjb250ZW50cyBhcyBhIHN0cmluZyB1c2luZyB0aGUgZ2l2ZW4KICAgKiBbRW5jb2RpbmddLgogICAqCiAgICogUmV0dXJucyBhIGBGdXR1cmU8U3RyaW5nPmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgc3RyaW5nIG9uY2UKICAgKiB0aGUgZmlsZSBjb250ZW50cyBoYXMgYmVlbiByZWFkLgogICAqLwogIEZ1dHVyZTxTdHJpbmc+IHJlYWRBc1N0cmluZyh7RW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZWFkIHRoZSBlbnRpcmUgZmlsZSBjb250ZW50cyBhcyBhIHN0cmluZyB1c2luZyB0aGUKICAgKiBnaXZlbiBbRW5jb2RpbmddLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgU3RyaW5nIHJlYWRBc1N0cmluZ1N5bmMoe0VuY29kaW5nIGVuY29kaW5nOiB1dGY4fSk7CgogIC8qKgogICAqIFJlYWQgdGhlIGVudGlyZSBmaWxlIGNvbnRlbnRzIGFzIGxpbmVzIG9mIHRleHQgdXNpbmcgdGhlIGdpdmVuCiAgICogW0VuY29kaW5nXS4KICAgKgogICAqIFJldHVybnMgYSBgRnV0dXJlPExpc3Q8U3RyaW5nPj5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIGxpbmVzCiAgICogb25jZSB0aGUgZmlsZSBjb250ZW50cyBoYXMgYmVlbiByZWFkLgogICAqLwogIEZ1dHVyZTxMaXN0PFN0cmluZz4+IHJlYWRBc0xpbmVzKHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHJlYWQgdGhlIGVudGlyZSBmaWxlIGNvbnRlbnRzIGFzIGxpbmVzIG9mIHRleHQKICAgKiB1c2luZyB0aGUgZ2l2ZW4gW0VuY29kaW5nXS4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIExpc3Q8U3RyaW5nPiByZWFkQXNMaW5lc1N5bmMoe0VuY29kaW5nIGVuY29kaW5nOiB1dGY4fSk7CgogIC8qKgogICAqIFdyaXRlIGEgbGlzdCBvZiBieXRlcyB0byBhIGZpbGUuCiAgICoKICAgKiBPcGVucyB0aGUgZmlsZSwgd3JpdGVzIHRoZSBsaXN0IG9mIGJ5dGVzIHRvIGl0LCBhbmQgY2xvc2VzIHRoZSBmaWxlLgogICAqIFJldHVybnMgYSBgRnV0dXJlPEZpbGU+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoaXMgW0ZpbGVdIG9iamVjdCBvbmNlCiAgICogdGhlIGVudGlyZSBvcGVyYXRpb24gaGFzIGNvbXBsZXRlZC4KICAgKgogICAqIEJ5IGRlZmF1bHQgW3dyaXRlQXNCeXRlc10gY3JlYXRlcyB0aGUgZmlsZSBmb3Igd3JpdGluZyBhbmQgdHJ1bmNhdGVzIHRoZQogICAqIGZpbGUgaWYgaXQgYWxyZWFkeSBleGlzdHMuIEluIG9yZGVyIHRvIGFwcGVuZCB0aGUgYnl0ZXMgdG8gYW4gZXhpc3RpbmcKICAgKiBmaWxlLCBwYXNzIFtGaWxlTW9kZS5hcHBlbmRdIGFzIHRoZSBvcHRpb25hbCBtb2RlIHBhcmFtZXRlci4KICAgKgogICAqIElmIHRoZSBhcmd1bWVudCBbZmx1c2hdIGlzIHNldCB0byBgdHJ1ZWAsIHRoZSBkYXRhIHdyaXR0ZW4gd2lsbCBiZQogICAqIGZsdXNoZWQgdG8gdGhlIGZpbGUgc3lzdGVtIGJlZm9yZSB0aGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcy4KICAgKi8KICBGdXR1cmU8RmlsZT4gd3JpdGVBc0J5dGVzKExpc3Q8aW50PiBieXRlcywKICAgICAge0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLndyaXRlLCBib29sIGZsdXNoOiBmYWxzZX0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHdyaXRlIGEgbGlzdCBvZiBieXRlcyB0byBhIGZpbGUuCiAgICoKICAgKiBPcGVucyB0aGUgZmlsZSwgd3JpdGVzIHRoZSBsaXN0IG9mIGJ5dGVzIHRvIGl0IGFuZCBjbG9zZXMgdGhlIGZpbGUuCiAgICoKICAgKiBCeSBkZWZhdWx0IFt3cml0ZUFzQnl0ZXNTeW5jXSBjcmVhdGVzIHRoZSBmaWxlIGZvciB3cml0aW5nIGFuZCB0cnVuY2F0ZXMKICAgKiB0aGUgZmlsZSBpZiBpdCBhbHJlYWR5IGV4aXN0cy4gSW4gb3JkZXIgdG8gYXBwZW5kIHRoZSBieXRlcyB0byBhbiBleGlzdGluZwogICAqIGZpbGUsIHBhc3MgW0ZpbGVNb2RlLmFwcGVuZF0gYXMgdGhlIG9wdGlvbmFsIG1vZGUgcGFyYW1ldGVyLgogICAqCiAgICogSWYgdGhlIFtmbHVzaF0gYXJndW1lbnQgaXMgc2V0IHRvIGB0cnVlYCBkYXRhIHdyaXR0ZW4gd2lsbCBiZQogICAqIGZsdXNoZWQgdG8gdGhlIGZpbGUgc3lzdGVtIGJlZm9yZSByZXR1cm5pbmcuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICB2b2lkIHdyaXRlQXNCeXRlc1N5bmMoTGlzdDxpbnQ+IGJ5dGVzLAogICAgICB7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUud3JpdGUsIGJvb2wgZmx1c2g6IGZhbHNlfSk7CgogIC8qKgogICAqIFdyaXRlIGEgc3RyaW5nIHRvIGEgZmlsZS4KICAgKgogICAqIE9wZW5zIHRoZSBmaWxlLCB3cml0ZXMgdGhlIHN0cmluZyBpbiB0aGUgZ2l2ZW4gZW5jb2RpbmcsIGFuZCBjbG9zZXMgdGhlCiAgICogZmlsZS4gUmV0dXJucyBhIGBGdXR1cmU8RmlsZT5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhpcyBbRmlsZV0gb2JqZWN0CiAgICogb25jZSB0aGUgZW50aXJlIG9wZXJhdGlvbiBoYXMgY29tcGxldGVkLgogICAqCiAgICogQnkgZGVmYXVsdCBbd3JpdGVBc1N0cmluZ10gY3JlYXRlcyB0aGUgZmlsZSBmb3Igd3JpdGluZyBhbmQgdHJ1bmNhdGVzIHRoZQogICAqIGZpbGUgaWYgaXQgYWxyZWFkeSBleGlzdHMuIEluIG9yZGVyIHRvIGFwcGVuZCB0aGUgYnl0ZXMgdG8gYW4gZXhpc3RpbmcKICAgKiBmaWxlLCBwYXNzIFtGaWxlTW9kZS5hcHBlbmRdIGFzIHRoZSBvcHRpb25hbCBtb2RlIHBhcmFtZXRlci4KICAgKgogICAqIElmIHRoZSBhcmd1bWVudCBbZmx1c2hdIGlzIHNldCB0byBgdHJ1ZWAsIHRoZSBkYXRhIHdyaXR0ZW4gd2lsbCBiZQogICAqIGZsdXNoZWQgdG8gdGhlIGZpbGUgc3lzdGVtIGJlZm9yZSB0aGUgcmV0dXJuZWQgZnV0dXJlIGNvbXBsZXRlcy4KICAgKgogICAqLwogIEZ1dHVyZTxGaWxlPiB3cml0ZUFzU3RyaW5nKFN0cmluZyBjb250ZW50cywKICAgICAge0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLndyaXRlLAogICAgICBFbmNvZGluZyBlbmNvZGluZzogdXRmOCwKICAgICAgYm9vbCBmbHVzaDogZmFsc2V9KTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSB3cml0ZSBhIHN0cmluZyB0byBhIGZpbGUuCiAgICoKICAgKiBPcGVucyB0aGUgZmlsZSwgd3JpdGVzIHRoZSBzdHJpbmcgaW4gdGhlIGdpdmVuIGVuY29kaW5nLCBhbmQgY2xvc2VzIHRoZQogICAqIGZpbGUuCiAgICoKICAgKiBCeSBkZWZhdWx0IFt3cml0ZUFzU3RyaW5nU3luY10gY3JlYXRlcyB0aGUgZmlsZSBmb3Igd3JpdGluZyBhbmQKICAgKiB0cnVuY2F0ZXMgdGhlIGZpbGUgaWYgaXQgYWxyZWFkeSBleGlzdHMuIEluIG9yZGVyIHRvIGFwcGVuZCB0aGUgYnl0ZXMKICAgKiB0byBhbiBleGlzdGluZyBmaWxlLCBwYXNzIFtGaWxlTW9kZS5hcHBlbmRdIGFzIHRoZSBvcHRpb25hbCBtb2RlCiAgICogcGFyYW1ldGVyLgogICAqCiAgICogSWYgdGhlIFtmbHVzaF0gYXJndW1lbnQgaXMgc2V0IHRvIGB0cnVlYCBkYXRhIHdyaXR0ZW4gd2lsbCBiZQogICAqIGZsdXNoZWQgdG8gdGhlIGZpbGUgc3lzdGVtIGJlZm9yZSByZXR1cm5pbmcuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICB2b2lkIHdyaXRlQXNTdHJpbmdTeW5jKFN0cmluZyBjb250ZW50cywKICAgICAge0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLndyaXRlLAogICAgICBFbmNvZGluZyBlbmNvZGluZzogdXRmOCwKICAgICAgYm9vbCBmbHVzaDogZmFsc2V9KTsKCiAgLyoqCiAgICogR2V0IHRoZSBwYXRoIG9mIHRoZSBmaWxlLgogICAqLwogIFN0cmluZyBnZXQgcGF0aDsKfQoKLyoqCiAqIGBSYW5kb21BY2Nlc3NGaWxlYCBwcm92aWRlcyByYW5kb20gYWNjZXNzIHRvIHRoZSBkYXRhIGluIGEKICogZmlsZS4KICoKICogYFJhbmRvbUFjY2Vzc0ZpbGVgIG9iamVjdHMgYXJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgdGhlCiAqIGBvcGVuYCBtZXRob2Qgb24gYSBbRmlsZV0gb2JqZWN0LgogKgogKiBBIGBSYW5kb21BY2Nlc3NGaWxlYCBoYXZlIGJvdGggYXN5bmNocm9ub3VzIGFuZCBzeW5jaHJvbm91cwogKiBtZXRob2RzLiBUaGUgYXN5bmNocm9ub3VzIG1ldGhvZHMgYWxsIHJldHVybiBhIGBGdXR1cmVgCiAqIHdoZXJlYXMgdGhlIHN5bmNocm9ub3VzIG1ldGhvZHMgd2lsbCByZXR1cm4gdGhlIHJlc3VsdCBkaXJlY3RseSwKICogYW5kIGJsb2NrIHRoZSBjdXJyZW50IGlzb2xhdGUgdW50aWwgdGhlIHJlc3VsdCBpcyByZWFkeS4KICoKICogQXQgbW9zdCBvbmUgYXN5bmNocm9ub3VzIG1ldGhvZCBjYW4gYmUgcGVuZGluZyBvbiBhIGdpdmVuIGBSYW5kb21BY2Nlc3NGaWxlYAogKiBpbnN0YW5jZSBhdCB0aGUgdGltZS4gSWYgYW4gYXN5bmNocm9ub3VzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiBvbmUgaXMKICogYWxyZWFkeSBpbiBwcm9ncmVzcyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpcyB0aHJvd24uCiAqCiAqIElmIGFuIGFzeW5jaHJvbm91cyBtZXRob2QgaXMgcGVuZGluZyBpdCBpcyBhbHNvIG5vdCBwb3NzaWJsZSB0byBjYWxsIGFueQogKiBzeW5jaHJvbm91cyBtZXRob2RzLiBUaGlzIHdpbGwgYWxzbyB0aHJvdyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXS4KICovCmFic3RyYWN0IGNsYXNzIFJhbmRvbUFjY2Vzc0ZpbGUgewogIC8qKgogICAqIENsb3NlcyB0aGUgZmlsZS4gUmV0dXJucyBhIGBGdXR1cmVgIHRoYXQKICAgKiBjb21wbGV0ZXMgd2hlbiBpdCBoYXMgYmVlbiBjbG9zZWQuCiAgICovCiAgRnV0dXJlPHZvaWQ+IGNsb3NlKCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY2xvc2VzIHRoZSBmaWxlLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgdm9pZCBjbG9zZVN5bmMoKTsKCiAgLyoqCiAgICogUmVhZHMgYSBieXRlIGZyb20gdGhlIGZpbGUuIFJldHVybnMgYSBgRnV0dXJlPGludD5gIHRoYXQKICAgKiBjb21wbGV0ZXMgd2l0aCB0aGUgYnl0ZSwgb3Igd2l0aCAtMSBpZiBlbmQtb2YtZmlsZSBoYXMgYmVlbiByZWFjaGVkLgogICAqLwogIEZ1dHVyZTxpbnQ+IHJlYWRCeXRlKCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgcmVhZHMgYSBzaW5nbGUgYnl0ZSBmcm9tIHRoZSBmaWxlLiBJZiBlbmQtb2YtZmlsZQogICAqIGhhcyBiZWVuIHJlYWNoZWQgLTEgaXMgcmV0dXJuZWQuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICBpbnQgcmVhZEJ5dGVTeW5jKCk7CgogIC8qKgogICAqIFJlYWRzIFtieXRlc10gYnl0ZXMgZnJvbSBhIGZpbGUgYW5kIHJldHVybnMgdGhlIHJlc3VsdCBhcyBhIGxpc3Qgb2YgYnl0ZXMuCiAgICovCiAgRnV0dXJlPFVpbnQ4TGlzdD4gcmVhZChpbnQgYnl0ZXMpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHJlYWRzIGEgbWF4aW11bSBvZiBbYnl0ZXNdIGJ5dGVzIGZyb20gYSBmaWxlIGFuZAogICAqIHJldHVybnMgdGhlIHJlc3VsdCBpbiBhIGxpc3Qgb2YgYnl0ZXMuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICBVaW50OExpc3QgcmVhZFN5bmMoaW50IGJ5dGVzKTsKCiAgLyoqCiAgICogUmVhZHMgaW50byBhbiBleGlzdGluZyBbTGlzdDxpbnQ+XSBmcm9tIHRoZSBmaWxlLiBJZiBbc3RhcnRdIGlzIHByZXNlbnQsCiAgICogdGhlIGJ5dGVzIHdpbGwgYmUgZmlsbGVkIGludG8gW2J1ZmZlcl0gZnJvbSBhdCBpbmRleCBbc3RhcnRdLCBvdGhlcndpc2UKICAgKiBpbmRleCAwLiBJZiBbZW5kXSBpcyBwcmVzZW50LCB0aGUgW2VuZF0gLSBbc3RhcnRdIGJ5dGVzIHdpbGwgYmUgcmVhZCBpbnRvCiAgICogW2J1ZmZlcl0sIG90aGVyd2lzZSB1cCB0byBbYnVmZmVyLmxlbmd0aF0uIElmIFtlbmRdID09IFtzdGFydF0gbm90aGluZwogICAqIGhhcHBlbnMuCiAgICoKICAgKiBSZXR1cm5zIGEgYEZ1dHVyZTxpbnQ+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4KICAgKi8KICBGdXR1cmU8aW50PiByZWFkSW50byhMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHJlYWRzIGludG8gYW4gZXhpc3RpbmcgW0xpc3Q8aW50Pl0gZnJvbSB0aGUgZmlsZS4gSWYgW3N0YXJ0XQogICAqIGlzIHByZXNlbnQsIHRoZSBieXRlcyB3aWxsIGJlIGZpbGxlZCBpbnRvIFtidWZmZXJdIGZyb20gYXQgaW5kZXggW3N0YXJ0XSwKICAgKiBvdGhlcndpc2UgaW5kZXggMC4gIElmIFtlbmRdIGlzIHByZXNlbnQsIHRoZSBbZW5kXSAtIFtzdGFydF0gYnl0ZXMgd2lsbCBiZQogICAqIHJlYWQgaW50byBbYnVmZmVyXSwgb3RoZXJ3aXNlIHVwIHRvIFtidWZmZXIubGVuZ3RoXS4gSWYgW2VuZF0gPT0gW3N0YXJ0XQogICAqIG5vdGhpbmcgaGFwcGVucy4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIGludCByZWFkSW50b1N5bmMoTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKTsKCiAgLyoqCiAgICogV3JpdGVzIGEgc2luZ2xlIGJ5dGUgdG8gdGhlIGZpbGUuIFJldHVybnMgYQogICAqIGBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhpcwogICAqIFJhbmRvbUFjY2Vzc0ZpbGUgd2hlbiB0aGUgd3JpdGUgY29tcGxldGVzLgogICAqLwogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiB3cml0ZUJ5dGUoaW50IHZhbHVlKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSB3cml0ZXMgYSBzaW5nbGUgYnl0ZSB0byB0aGUgZmlsZS4gUmV0dXJucyB0aGUKICAgKiBudW1iZXIgb2YgYnl0ZXMgc3VjY2Vzc2Z1bGx5IHdyaXR0ZW4uCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICBpbnQgd3JpdGVCeXRlU3luYyhpbnQgdmFsdWUpOwoKICAvKioKICAgKiBXcml0ZXMgZnJvbSBhIFtMaXN0PGludD5dIHRvIHRoZSBmaWxlLiBJdCB3aWxsIHJlYWQgdGhlIGJ1ZmZlciBmcm9tIGluZGV4CiAgICogW3N0YXJ0XSB0byBpbmRleCBbZW5kXS4gSWYgW3N0YXJ0XSBpcyBvbWl0dGVkLCBpdCdsbCBzdGFydCBmcm9tIGluZGV4IDAuCiAgICogSWYgW2VuZF0gaXMgb21pdHRlZCwgaXQgd2lsbCB3cml0ZSB0byBlbmQgb2YgW2J1ZmZlcl0uCiAgICoKICAgKiBSZXR1cm5zIGEgYEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGlzCiAgICogW1JhbmRvbUFjY2Vzc0ZpbGVdIHdoZW4gdGhlIHdyaXRlIGNvbXBsZXRlcy4KICAgKi8KICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gd3JpdGVGcm9tKExpc3Q8aW50PiBidWZmZXIsCiAgICAgIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgd3JpdGVzIGZyb20gYSBbTGlzdDxpbnQ+XSB0byB0aGUgZmlsZS4gSXQgd2lsbCByZWFkIHRoZQogICAqIGJ1ZmZlciBmcm9tIGluZGV4IFtzdGFydF0gdG8gaW5kZXggW2VuZF0uIElmIFtzdGFydF0gaXMgb21pdHRlZCwgaXQnbGwKICAgKiBzdGFydCBmcm9tIGluZGV4IDAuIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IHdpbGwgd3JpdGUgdG8gdGhlIGVuZCBvZgogICAqIFtidWZmZXJdLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgdm9pZCB3cml0ZUZyb21TeW5jKExpc3Q8aW50PiBidWZmZXIsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSk7CgogIC8qKgogICAqIFdyaXRlcyBhIHN0cmluZyB0byB0aGUgZmlsZSB1c2luZyB0aGUgZ2l2ZW4gW0VuY29kaW5nXS4gUmV0dXJucyBhCiAgICogYEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGlzCiAgICogUmFuZG9tQWNjZXNzRmlsZSB3aGVuIHRoZSB3cml0ZSBjb21wbGV0ZXMuCiAgICovCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IHdyaXRlU3RyaW5nKFN0cmluZyBzdHJpbmcsCiAgICAgIHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHdyaXRlcyBhIHNpbmdsZSBzdHJpbmcgdG8gdGhlIGZpbGUgdXNpbmcgdGhlIGdpdmVuCiAgICogW0VuY29kaW5nXS4KICAgKgogICAqIFRocm93cyBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSBpZiB0aGUgb3BlcmF0aW9uIGZhaWxzLgogICAqLwogIHZvaWQgd3JpdGVTdHJpbmdTeW5jKFN0cmluZyBzdHJpbmcsIHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pOwoKICAvKioKICAgKiBHZXRzIHRoZSBjdXJyZW50IGJ5dGUgcG9zaXRpb24gaW4gdGhlIGZpbGUuIFJldHVybnMgYQogICAqIGBGdXR1cmU8aW50PmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUgcG9zaXRpb24uCiAgICovCiAgRnV0dXJlPGludD4gcG9zaXRpb24oKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBnZXRzIHRoZSBjdXJyZW50IGJ5dGUgcG9zaXRpb24gaW4gdGhlIGZpbGUuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICBpbnQgcG9zaXRpb25TeW5jKCk7CgogIC8qKgogICAqIFNldHMgdGhlIGJ5dGUgcG9zaXRpb24gaW4gdGhlIGZpbGUuIFJldHVybnMgYQogICAqIGBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT5gIHRoYXQgY29tcGxldGVzIHdpdGggdGhpcwogICAqIFJhbmRvbUFjY2Vzc0ZpbGUgd2hlbiB0aGUgcG9zaXRpb24gaGFzIGJlZW4gc2V0LgogICAqLwogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiBzZXRQb3NpdGlvbihpbnQgcG9zaXRpb24pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHNldHMgdGhlIGJ5dGUgcG9zaXRpb24gaW4gdGhlIGZpbGUuCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICB2b2lkIHNldFBvc2l0aW9uU3luYyhpbnQgcG9zaXRpb24pOwoKICAvKioKICAgKiBUcnVuY2F0ZXMgKG9yIGV4dGVuZHMpIHRoZSBmaWxlIHRvIFtsZW5ndGhdIGJ5dGVzLiBSZXR1cm5zIGEKICAgKiBgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoaXMKICAgKiBSYW5kb21BY2Nlc3NGaWxlIHdoZW4gdGhlIHRydW5jYXRpb24gaGFzIGJlZW4gcGVyZm9ybWVkLgogICAqLwogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiB0cnVuY2F0ZShpbnQgbGVuZ3RoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSB0cnVuY2F0ZXMgKG9yIGV4dGVuZHMpIHRoZSBmaWxlIHRvIFtsZW5ndGhdIGJ5dGVzLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgdm9pZCB0cnVuY2F0ZVN5bmMoaW50IGxlbmd0aCk7CgogIC8qKgogICAqIEdldHMgdGhlIGxlbmd0aCBvZiB0aGUgZmlsZS4gUmV0dXJucyBhIGBGdXR1cmU8aW50PmAgdGhhdAogICAqIGNvbXBsZXRlcyB3aXRoIHRoZSBsZW5ndGggaW4gYnl0ZXMuCiAgICovCiAgRnV0dXJlPGludD4gbGVuZ3RoKCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgZ2V0cyB0aGUgbGVuZ3RoIG9mIHRoZSBmaWxlLgogICAqCiAgICogVGhyb3dzIGEgW0ZpbGVTeXN0ZW1FeGNlcHRpb25dIGlmIHRoZSBvcGVyYXRpb24gZmFpbHMuCiAgICovCiAgaW50IGxlbmd0aFN5bmMoKTsKCiAgLyoqCiAgICogRmx1c2hlcyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUgdG8gZGlzay4gUmV0dXJucyBhCiAgICogYEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGlzCiAgICogUmFuZG9tQWNjZXNzRmlsZSB3aGVuIHRoZSBmbHVzaCBvcGVyYXRpb24gY29tcGxldGVzLgogICAqLwogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiBmbHVzaCgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGZsdXNoZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIHRvIGRpc2suCiAgICoKICAgKiBUaHJvd3MgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gaWYgdGhlIG9wZXJhdGlvbiBmYWlscy4KICAgKi8KICB2b2lkIGZsdXNoU3luYygpOwoKICAvKioKICAgKiBMb2NrcyB0aGUgZmlsZSBvciBwYXJ0IG9mIHRoZSBmaWxlLgogICAqCiAgICogQnkgZGVmYXVsdCBhbiBleGNsdXNpdmUgbG9jayB3aWxsIGJlIG9idGFpbmVkLCBidXQgdGhhdCBjYW4gYmUgb3ZlcnJpZGRlbgogICAqIGJ5IHRoZSBbbW9kZV0gYXJndW1lbnQuCiAgICoKICAgKiBMb2NrcyB0aGUgYnl0ZSByYW5nZSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gb2YgdGhlIGZpbGUsIHdpdGggdGhlCiAgICogYnl0ZSBhdCBwb3NpdGlvbiBgZW5kYCBub3QgaW5jbHVkZWQuIElmIG5vIGFyZ3VtZW50cyBhcmUKICAgKiBzcGVjaWZpZWQsIHRoZSBmdWxsIGZpbGUgaXMgbG9ja2VkLCBJZiBvbmx5IGBzdGFydGAgaXMgc3BlY2lmaWVkCiAgICogdGhlIGZpbGUgaXMgbG9ja2VkIGZyb20gYnl0ZSBwb3NpdGlvbiBgc3RhcnRgIHRvIHRoZSBlbmQgb2YgdGhlCiAgICogZmlsZSwgbm8gbWF0dGVyIGhvdyBsYXJnZSBpdCBncm93cy4gSXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSBhbgogICAqIGV4cGxpY2l0IHZhbHVlIG9mIGBlbmRgIHdoaWNoIGlzIHBhc3QgdGhlIGN1cnJlbnQgbGVuZ3RoIG9mIHRoZSBmaWxlLgogICAqCiAgICogVG8gb2J0YWluIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIGEgZmlsZSBpdCBtdXN0IGJlIG9wZW5lZCBmb3Igd3JpdGluZy4KICAgKgogICAqIElmIFttb2RlXSBpcyBbRmlsZUxvY2suZXhjbHVzaXZlXSBvciBbRmlsZUxvY2suc2hhcmVkXSwgYW4gZXJyb3IgaXMKICAgKiBzaWduYWxlZCBpZiB0aGUgbG9jayBjYW5ub3QgYmUgb2J0YWluZWQuIElmIFttb2RlXSBpcwogICAqIFtGaWxlTG9jay5ibG9ja2luZ0V4Y2x1c2l2ZV0gb3IgW0ZpbGVMb2NrLmJsb2NraW5nU2hhcmVkXSwgdGhlCiAgICogcmV0dXJuZWQgW0Z1dHVyZV0gaXMgcmVzb2x2ZWQgb25seSB3aGVuIHRoZSBsb2NrIGhhcyBiZWVuIG9idGFpbmVkLgogICAqCiAgICogKk5PVEUqIGZpbGUgbG9ja2luZyBkb2VzIGhhdmUgc2xpZ2h0IGRpZmZlcmVuY2VzIGluIGJlaGF2aW9yIGFjcm9zcwogICAqIHBsYXRmb3JtczoKICAgKgogICAqIE9uIExpbnV4IGFuZCBPUyBYIHRoaXMgdXNlcyBhZHZpc29yeSBsb2Nrcywgd2hpY2ggaGF2ZSB0aGUKICAgKiBzdXJwcmlzaW5nIHNlbWFudGljcyB0aGF0IGFsbCBsb2NrcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBmaWxlCiAgICogYXJlIHJlbW92ZWQgd2hlbiAqYW55KiBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoYXQgZmlsZSBpcyBjbG9zZWQgYnkKICAgKiB0aGUgcHJvY2Vzcy4gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgYWN0dWFsbHkgbG9jayB0aGUgZmlsZSBmb3IKICAgKiBhY2Nlc3MuIEFsc28gbm90ZSB0aGF0IGFkdmlzb3J5IGxvY2tzIGFyZSBvbiBhIHByb2Nlc3MKICAgKiBsZXZlbC4gVGhpcyBtZWFucyB0aGF0IHNldmVyYWwgaXNvbGF0ZXMgaW4gdGhlIHNhbWUgcHJvY2VzcyBjYW4KICAgKiBvYnRhaW4gYW4gZXhjbHVzaXZlIGxvY2sgb24gdGhlIHNhbWUgZmlsZS4KICAgKgogICAqIE9uIFdpbmRvd3MgdGhlIHJlZ2lvbnMgdXNlZCBmb3IgbG9jayBhbmQgdW5sb2NrIG5lZWRzIHRvIG1hdGNoLiBJZiB0aGF0CiAgICogaXMgbm90IHRoZSBjYXNlIHVubG9ja2luZyB3aWxsIHJlc3VsdCBpbiB0aGUgT1MgZXJyb3IgIlRoZSBzZWdtZW50IGlzCiAgICogYWxyZWFkeSB1bmxvY2tlZCIuCiAgICovCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IGxvY2soCiAgICAgIFtGaWxlTG9jayBtb2RlID0gRmlsZUxvY2suZXhjbHVzaXZlLCBpbnQgc3RhcnQgPSAwLCBpbnQgZW5kID0gLTFdKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBsb2NrcyB0aGUgZmlsZSBvciBwYXJ0IG9mIHRoZSBmaWxlLgogICAqCiAgICogQnkgZGVmYXVsdCBhbiBleGNsdXNpdmUgbG9jayB3aWxsIGJlIG9idGFpbmVkLCBidXQgdGhhdCBjYW4gYmUgb3ZlcnJpZGRlbgogICAqIGJ5IHRoZSBbbW9kZV0gYXJndW1lbnQuCiAgICoKICAgKiBMb2NrcyB0aGUgYnl0ZSByYW5nZSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gb2YgdGhlIGZpbGUgLHdpdGggdGhlCiAgICogYnl0ZSBhdCBwb3NpdGlvbiBgZW5kYCBub3QgaW5jbHVkZWQuIElmIG5vIGFyZ3VtZW50cyBhcmUKICAgKiBzcGVjaWZpZWQsIHRoZSBmdWxsIGZpbGUgaXMgbG9ja2VkLCBJZiBvbmx5IGBzdGFydGAgaXMgc3BlY2lmaWVkCiAgICogdGhlIGZpbGUgaXMgbG9ja2VkIGZyb20gYnl0ZSBwb3NpdGlvbiBgc3RhcnRgIHRvIHRoZSBlbmQgb2YgdGhlCiAgICogZmlsZSwgbm8gbWF0dGVyIGhvdyBsYXJnZSBpdCBncm93cy4gSXQgaXMgcG9zc2libGUgdG8gc3BlY2lmeSBhbgogICAqIGV4cGxpY2l0IHZhbHVlIG9mIGBlbmRgIHdoaWNoIGlzIHBhc3QgdGhlIGN1cnJlbnQgbGVuZ3RoIG9mIHRoZSBmaWxlLgogICAqCiAgICogVG8gb2J0YWluIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIGEgZmlsZSBpdCBtdXN0IGJlIG9wZW5lZCBmb3Igd3JpdGluZy4KICAgKgogICAqIElmIFttb2RlXSBpcyBbRmlsZUxvY2suZXhjbHVzaXZlXSBvciBbRmlsZUxvY2suc2hhcmVkXSwgYW4gZXhjZXB0aW9uIGlzCiAgICogdGhyb3duIGlmIHRoZSBsb2NrIGNhbm5vdCBiZSBvYnRhaW5lZC4gSWYgW21vZGVdIGlzCiAgICogW0ZpbGVMb2NrLmJsb2NraW5nRXhjbHVzaXZlXSBvciBbRmlsZUxvY2suYmxvY2tpbmdTaGFyZWRdLCB0aGUKICAgKiBjYWxsIHJldHVybnMgb25seSBhZnRlciB0aGUgbG9jayBoYXMgYmVlbiBvYnRhaW5lZC4KICAgKgogICAqICpOT1RFKiBmaWxlIGxvY2tpbmcgZG9lcyBoYXZlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBhY3Jvc3MKICAgKiBwbGF0Zm9ybXM6CiAgICoKICAgKiBPbiBMaW51eCBhbmQgT1MgWCB0aGlzIHVzZXMgYWR2aXNvcnkgbG9ja3MsIHdoaWNoIGhhdmUgdGhlCiAgICogc3VycHJpc2luZyBzZW1hbnRpY3MgdGhhdCBhbGwgbG9ja3MgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gZmlsZQogICAqIGFyZSByZW1vdmVkIHdoZW4gKmFueSogZmlsZSBkZXNjcmlwdG9yIGZvciB0aGF0IGZpbGUgaXMgY2xvc2VkIGJ5CiAgICogdGhlIHByb2Nlc3MuIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGFjdHVhbGx5IGxvY2sgdGhlIGZpbGUgZm9yCiAgICogYWNjZXNzLiBBbHNvIG5vdGUgdGhhdCBhZHZpc29yeSBsb2NrcyBhcmUgb24gYSBwcm9jZXNzCiAgICogbGV2ZWwuIFRoaXMgbWVhbnMgdGhhdCBzZXZlcmFsIGlzb2xhdGVzIGluIHRoZSBzYW1lIHByb2Nlc3MgY2FuCiAgICogb2J0YWluIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBzYW1lIGZpbGUuCiAgICoKICAgKiBPbiBXaW5kb3dzIHRoZSByZWdpb25zIHVzZWQgZm9yIGxvY2sgYW5kIHVubG9jayBuZWVkcyB0byBtYXRjaC4gSWYgdGhhdAogICAqIGlzIG5vdCB0aGUgY2FzZSB1bmxvY2tpbmcgd2lsbCByZXN1bHQgaW4gdGhlIE9TIGVycm9yICJUaGUgc2VnbWVudCBpcwogICAqIGFscmVhZHkgdW5sb2NrZWQiLgogICAqCiAgICovCiAgdm9pZCBsb2NrU3luYygKICAgICAgW0ZpbGVMb2NrIG1vZGUgPSBGaWxlTG9jay5leGNsdXNpdmUsIGludCBzdGFydCA9IDAsIGludCBlbmQgPSAtMV0pOwoKICAvKioKICAgKiBVbmxvY2tzIHRoZSBmaWxlIG9yIHBhcnQgb2YgdGhlIGZpbGUuCiAgICoKICAgKiBVbmxvY2tzIHRoZSBieXRlIHJhbmdlIGZyb20gW3N0YXJ0XSB0byBbZW5kXSBvZiB0aGUgZmlsZSwgd2l0aAogICAqIHRoZSBieXRlIGF0IHBvc2l0aW9uIGBlbmRgIG5vdCBpbmNsdWRlZC4gSWYgbm8gYXJndW1lbnRzIGFyZQogICAqIHNwZWNpZmllZCwgdGhlIGZ1bGwgZmlsZSBpcyB1bmxvY2tlZCwgSWYgb25seSBgc3RhcnRgIGlzCiAgICogc3BlY2lmaWVkIHRoZSBmaWxlIGlzIHVubG9ja2VkIGZyb20gYnl0ZSBwb3NpdGlvbiBgc3RhcnRgIHRvIHRoZQogICAqIGVuZCBvZiB0aGUgZmlsZS4KICAgKgogICAqICpOT1RFKiBmaWxlIGxvY2tpbmcgZG9lcyBoYXZlIHNsaWdodCBkaWZmZXJlbmNlcyBpbiBiZWhhdmlvciBhY3Jvc3MKICAgKiBwbGF0Zm9ybXM6CiAgICoKICAgKiBTZWUgW2xvY2tdIGZvciBtb3JlIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IHVubG9jayhbaW50IHN0YXJ0ID0gMCwgaW50IGVuZCA9IC0xXSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgdW5sb2NrcyB0aGUgZmlsZSBvciBwYXJ0IG9mIHRoZSBmaWxlLgogICAqCiAgICogVW5sb2NrcyB0aGUgYnl0ZSByYW5nZSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gb2YgdGhlIGZpbGUsIHdpdGgKICAgKiB0aGUgYnl0ZSBhdCBwb3NpdGlvbiBgZW5kYCBub3QgaW5jbHVkZWQuIElmIG5vIGFyZ3VtZW50cyBhcmUKICAgKiBzcGVjaWZpZWQsIHRoZSBmdWxsIGZpbGUgaXMgdW5sb2NrZWQsIElmIG9ubHkgYHN0YXJ0YCBpcwogICAqIHNwZWNpZmllZCB0aGUgZmlsZSBpcyB1bmxvY2tlZCBmcm9tIGJ5dGUgcG9zaXRpb24gYHN0YXJ0YCB0byB0aGUKICAgKiBlbmQgb2YgdGhlIGZpbGUuCiAgICoKICAgKiAqTk9URSogZmlsZSBsb2NraW5nIGRvZXMgaGF2ZSBzbGlnaHQgZGlmZmVyZW5jZXMgaW4gYmVoYXZpb3IgYWNyb3NzCiAgICogcGxhdGZvcm1zOgogICAqCiAgICogU2VlIFtsb2NrU3luY10gZm9yIG1vcmUgZGV0YWlscy4KICAgKi8KICB2b2lkIHVubG9ja1N5bmMoW2ludCBzdGFydCA9IDAsIGludCBlbmQgPSAtMV0pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGZvciB0aGlzIFJhbmRvbUFjY2Vzc0ZpbGUgaW5zdGFuY2UuCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCk7CgogIC8qKgogICAqIEdldHMgdGhlIHBhdGggb2YgdGhlIGZpbGUgdW5kZXJseWluZyB0aGlzIFJhbmRvbUFjY2Vzc0ZpbGUuCiAgICovCiAgU3RyaW5nIGdldCBwYXRoOwp9CgovKioKICogRXhjZXB0aW9uIHRocm93biB3aGVuIGEgZmlsZSBvcGVyYXRpb24gZmFpbHMuCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIEZpbGVTeXN0ZW1FeGNlcHRpb24gaW1wbGVtZW50cyBJT0V4Y2VwdGlvbiB7CiAgLyoqCiAgICogTWVzc2FnZSBkZXNjcmliaW5nIHRoZSBlcnJvci4gVGhpcyBkb2VzIG5vdCBpbmNsdWRlIGFueSBkZXRhaWxlZAogICAqIGluZm9ybWF0aW9uIGZvcm0gdGhlIHVuZGVybHlpbmcgT1MgZXJyb3IuIENoZWNrIFtvc0Vycm9yXSBmb3IKICAgKiB0aGF0IGluZm9ybWF0aW9uLgogICAqLwogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwoKICAvKioKICAgKiBUaGUgZmlsZSBzeXN0ZW0gcGF0aCBvbiB3aGljaCB0aGUgZXJyb3Igb2NjdXJyZWQuIENhbiBiZSBgbnVsbGAKICAgKiBpZiB0aGUgZXhjZXB0aW9uIGRvZXMgbm90IHJlbGF0ZSBkaXJlY3RseSB0byBhIGZpbGUgc3lzdGVtIHBhdGguCiAgICovCiAgZmluYWwgU3RyaW5nIHBhdGg7CgogIC8qKgogICAqIFRoZSB1bmRlcmx5aW5nIE9TIGVycm9yLiBDYW4gYmUgYG51bGxgIGlmIHRoZSBleGNlcHRpb24gaXMgbm90CiAgICogcmFpc2VkIGR1ZSB0byBhbiBPUyBlcnJvci4KICAgKi8KICBmaW5hbCBPU0Vycm9yIG9zRXJyb3I7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbiB3aXRoIGFuIG9wdGlvbmFsIGVycm9yIG1lc3NhZ2UKICAgKiBbbWVzc2FnZV0sIG9wdGlvbmFsIGZpbGUgc3lzdGVtIHBhdGggW3BhdGhdIGFuZCBvcHRpb25hbCBPUyBlcnJvcgogICAqIFtvc0Vycm9yXS4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgY29uc3QgRmlsZVN5c3RlbUV4Y2VwdGlvbihbdGhpcy5tZXNzYWdlID0gIiIsIHRoaXMucGF0aCA9ICIiLCB0aGlzLm9zRXJyb3JdKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoIkZpbGVTeXN0ZW1FeGNlcHRpb24iKTsKICAg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bG9ja1NpemUgPSA2NCAqIDEwMjQ7CgpjbGFzcyBfRmlsZVN0cmVhbSBleHRlbmRzIFN0cmVhbTxMaXN0PGludD4+IHsKICAvLyBTdHJlYW0gY29udHJvbGxlci4KICBTdHJlYW1Db250cm9sbGVyPFVpbnQ4TGlzdD4gX2NvbnRyb2xsZXI7CgogIC8vIEluZm9ybWF0aW9uIGFib3V0IHRoZSB1bmRlcmx5aW5nIGZpbGUuCiAgU3RyaW5nIF9wYXRoOwogIFJhbmRvbUFjY2Vzc0ZpbGUgX29wZW5lZEZpbGU7CiAgaW50IF9wb3NpdGlvbjsKICBpbnQgX2VuZDsKICBmaW5hbCBDb21wbGV0ZXIgX2Nsb3NlQ29tcGxldGVyID0gbmV3IENvbXBsZXRlcigpOwoKICAvLyBIYXMgdGhlIHN0cmVhbSBiZWVuIHBhdXNlZCBvciB1bnN1YnNjcmliZWQ/CiAgYm9vbCBfdW5zdWJzY3JpYmVkID0gZmFsc2U7CgogIC8vIElzIHRoZXJlIGEgcmVhZCBjdXJyZW50bHkgaW4gcHJvZ3Jlc3M/CiAgYm9vbCBfcmVhZEluUHJvZ3Jlc3MgPSB0cnVlOwogIGJvb2wgX2Nsb3NlZCA9IGZhbHNlOwoKICBib29sIF9hdEVuZCA9IGZhbHNlOwoKICBfRmlsZVN0cmVhbSh0aGlzLl9wYXRoLCB0aGlzLl9wb3NpdGlvbiwgdGhpcy5fZW5kKSB7CiAgICBfcG9zaXRpb24gPz89IDA7CiAgfQoKICBfRmlsZVN0cmVhbS5mb3JTdGRpbigpIDogX3Bvc2l0aW9uID0gMDsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFVpbnQ4TGlzdD4gbGlzdGVuKHZvaWQgb25EYXRhKFVpbnQ4TGlzdCBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBfc2V0dXBDb250cm9sbGVyKCk7CiAgICByZXR1cm4gX2NvbnRyb2xsZXIuc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgdm9pZCBfc2V0dXBDb250cm9sbGVyKCkgewogICAgX2NvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxVaW50OExpc3Q+KAogICAgICAgIHN5bmM6IHRydWUsCiAgICAgICAgb25MaXN0ZW46IF9zdGFydCwKICAgICAgICBvblJlc3VtZTogX3JlYWRCbG9jaywKICAgICAgICBvbkNhbmNlbDogKCkgewogICAgICAgICAgX3Vuc3Vic2NyaWJlZCA9IHRydWU7CiAgICAgICAgICByZXR1cm4gX2Nsb3NlRmlsZSgpOwogICAgICAgIH0pOwogIH0KCiAgRnV0dXJlIF9jbG9zZUZpbGUoKSB7CiAgICBpZiAoX3JlYWRJblByb2dyZXNzIHx8IF9jbG9zZWQpIHsKICAgICAgcmV0dXJuIF9jbG9zZUNvbXBsZXRlci5mdXR1cmU7CiAgICB9CiAgICBfY2xvc2VkID0gdHJ1ZTsKCiAgICB2b2lkIGRvbmUoKSB7CiAgICAgIF9jbG9zZUNvbXBsZXRlci5jb21wbGV0ZSgpOwogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgfQoKICAgIF9vcGVuZWRGaWxlLmNsb3NlKCkuY2F0Y2hFcnJvcihfY29udHJvbGxlci5hZGRFcnJvcikud2hlbkNvbXBsZXRlKGRvbmUpOwogICAgcmV0dXJuIF9jbG9zZUNvbXBsZXRlci5mdXR1cmU7CiAgfQoKICB2b2lkIF9yZWFkQmxvY2soKSB7CiAgICAvLyBEb24ndCBzdGFydCBhIG5ldyByZWFkIGlmIG9uZSBpcyBhbHJlYWR5IGluIHByb2dyZXNzLgogICAgaWYgKF9yZWFkSW5Qcm9ncmVzcykgcmV0dXJuOwogICAgaWYgKF9hdEVuZCkgewogICAgICBfY2xvc2VGaWxlKCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9yZWFkSW5Qcm9ncmVzcyA9IHRydWU7CiAgICBpbnQgcmVhZEJ5dGVzID0gX2Jsb2NrU2l6ZTsKICAgIGlmIChfZW5kICE9IG51bGwpIHsKICAgICAgcmVhZEJ5dGVzID0gbWluKHJlYWRCeXRlcywgX2VuZCAtIF9wb3NpdGlvbik7CiAgICAgIGlmIChyZWFkQnl0ZXMgPCAwKSB7CiAgICAgICAgX3JlYWRJblByb2dyZXNzID0gZmFsc2U7CiAgICAgICAgaWYgKCFfdW5zdWJzY3JpYmVkKSB7CiAgICAgICAgICBfY29udHJvbGxlci5hZGRFcnJvcihuZXcgUmFuZ2VFcnJvcigiQmFkIGVuZCBwb3NpdGlvbjogJF9lbmQiKSk7CiAgICAgICAgICBfY2xvc2VGaWxlKCk7CiAgICAgICAgICBfdW5zdWJzY3JpYmVkID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CiAgICBfb3BlbmVkRmlsZS5yZWFkKHJlYWRCeXRlcykudGhlbigoYmxvY2spIHsKICAgICAgX3JlYWRJblByb2dyZXNzID0gZmFsc2U7CiAgICAgIGlmIChfdW5zdWJzY3JpYmVkKSB7CiAgICAgICAgX2Nsb3NlRmlsZSgpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfcG9zaXRpb24gKz0gYmxvY2subGVuZ3RoOwogICAgICBpZiAoYmxvY2subGVuZ3RoIDwgcmVhZEJ5dGVzIHx8IChfZW5kICE9IG51bGwgJiYgX3Bvc2l0aW9uID09IF9lbmQpKSB7CiAgICAgICAgX2F0RW5kID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoIV9hdEVuZCAmJiAhX2NvbnRyb2xsZXIuaXNQYXVzZWQpIHsKICAgICAgICBfcmVhZEJsb2NrKCk7CiAgICAgIH0KICAgICAgX2NvbnRyb2xsZXIuYWRkKGJsb2NrKTsKICAgICAgaWYgKF9hdEVuZCkgewogICAgICAgIF9jbG9zZUZpbGUoKTsKICAgICAgfQogICAgfSkuY2F0Y2hFcnJvcigoZSwgcykgewogICAgICBpZiAoIV91bnN1YnNjcmliZWQpIHsKICAgICAgICBfY29udHJvbGxlci5hZGRFcnJvcihlLCBzKTsKICAgICAgICBfY2xvc2VGaWxlKCk7CiAgICAgICAgX3Vuc3Vic2NyaWJlZCA9IHRydWU7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgdm9pZCBfc3RhcnQoKSB7CiAgICBpZiAoX3Bvc2l0aW9uIDwgMCkgewogICAgICBfY29udHJvbGxlci5hZGRFcnJvcihuZXcgUmFuZ2VFcnJvcigiQmFkIHN0YXJ0IHBvc2l0aW9uOiAkX3Bvc2l0aW9uIikpOwogICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICBfY2xvc2VDb21wbGV0ZXIuY29tcGxldGUoKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIHZvaWQgb25SZWFkeShSYW5kb21BY2Nlc3NGaWxlIGZpbGUpIHsKICAgICAgX29wZW5lZEZpbGUgPSBmaWxlOwogICAgICBfcmVhZEluUHJvZ3Jlc3MgPSBmYWxzZTsKICAgICAgX3JlYWRCbG9jaygpOwogICAgfQoKICAgIHZvaWQgb25PcGVuRmlsZShSYW5kb21BY2Nlc3NGaWxlIGZpbGUpIHsKICAgICAgaWYgKF9wb3NpdGlvbiA+IDApIHsKICAgICAgICBmaWxlLnNldFBvc2l0aW9uKF9wb3NpdGlvbikudGhlbihvblJlYWR5LCBvbkVycm9yOiAoZSwgcykgewogICAgICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IoZSwgcyk7CiAgICAgICAgICBfcmVhZEluUHJvZ3Jlc3MgPSBmYWxzZTsKICAgICAgICAgIF9jbG9zZUZpbGUoKTsKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBvblJlYWR5KGZpbGUpOwogICAgICB9CiAgICB9CgogICAgdm9pZCBvcGVuRmFpbGVkKGVycm9yLCBzdGFja1RyYWNlKSB7CiAgICAgIF9jb250cm9sbGVyLmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgX2Nsb3NlQ29tcGxldGVyLmNvbXBsZXRlKCk7CiAgICB9CgogICAgaWYgKF9wYXRoICE9IG51bGwpIHsKICAgICAgbmV3IEZpbGUoX3BhdGgpCiAgICAgICAgICAub3Blbihtb2RlOiBGaWxlTW9kZS5yZWFkKQogICAgICAgICAgLnRoZW4ob25PcGVuRmlsZSwgb25FcnJvcjogb3BlbkZhaWxlZCk7CiAgICB9IGVsc2UgewogICAgICB0cnkgewogICAgICAgIG9uT3BlbkZpbGUoX0ZpbGUuX29wZW5TdGRpb1N5bmMoMCkpOwogICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgb3BlbkZhaWxlZChlLCBzKTsKICAgICAgfQogICAgfQogIH0KfQoKY2xhc3MgX0ZpbGVTdHJlYW1Db25zdW1lciBleHRlbmRzIFN0cmVhbUNvbnN1bWVyPExpc3Q8aW50Pj4gewogIEZpbGUgX2ZpbGU7CiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IF9vcGVuRnV0dXJlOwoKICBfRmlsZVN0cmVhbUNvbnN1bWVyKHRoaXMuX2ZpbGUsIEZpbGVNb2RlIG1vZGUpIHsKICAgIF9vcGVuRnV0dXJlID0gX2ZpbGUub3Blbihtb2RlOiBtb2RlKTsKICB9CgogIF9GaWxlU3RyZWFtQ29uc3VtZXIuZnJvbVN0ZGlvKGludCBmZCkgewogICAgX29wZW5GdXR1cmUgPSBuZXcgRnV0dXJlLnZhbHVlKF9GaWxlLl9vcGVuU3RkaW9TeW5jKGZkKSk7CiAgfQoKICBGdXR1cmU8RmlsZT4gYWRkU3RyZWFtKFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSkgewogICAgQ29tcGxldGVyPEZpbGU+IGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8RmlsZT4uc3luYygpOwogICAgX29wZW5GdXR1cmUudGhlbigob3BlbmVkRmlsZSkgewogICAgICB2YXIgX3N1YnNjcmlwdGlvbjsKICAgICAgdm9pZCBlcnJvcihlLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgICAgIF9zdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICAgICAgb3BlbmVkRmlsZS5jbG9zZSgpOwogICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGUsIHN0YWNrVHJhY2UpOwogICAgICB9CgogICAgICBfc3Vic2NyaXB0aW9uID0gc3RyZWFtLmxpc3RlbigoZCkgewogICAgICAgIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgICB0cnkgewogICAgICAgICAgb3BlbmVkRmlsZQogICAgICAgICAgICAgIC53cml0ZUZyb20oZCwgMCwgZC5sZW5ndGgpCiAgICAgICAgICAgICAgLnRoZW4oKF8pID0+IF9zdWJzY3JpcHRpb24ucmVzdW1lKCksIG9uRXJyb3I6IGVycm9yKTsKICAgICAgICB9IGNhdGNoIChlLCBzdGFja1RyYWNlKSB7CiAgICAgICAgICBlcnJvcihlLCBzdGFja1RyYWNlKTsKICAgICAgICB9CiAgICAgIH0sIG9uRG9uZTogKCkgewogICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZShfZmlsZSk7CiAgICAgIH0sIG9uRXJyb3I6IGVycm9yLCBjYW5jZWxPbkVycm9yOiB0cnVlKTsKICAgIH0pLmNhdGNoRXJyb3IoY29tcGxldGVyLmNvbXBsZXRlRXJyb3IpOwogICAgcmV0dXJuIGNvbXBsZXRlci5mdXR1cmU7CiAgfQoKICBGdXR1cmU8RmlsZT4gY2xvc2UoKSA9PgogICAgICBfb3BlbkZ1dHVyZS50aGVuKChvcGVuZWRGaWxlKSA9PiBvcGVuZWRGaWxlLmNsb3NlKCkpLnRoZW4oKF8pID0+IF9maWxlKTsKfQoKLy8gQ2xhc3MgZm9yIGVuY2Fwc3VsYXRpbmcgdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBvZiBmaWxlcy4KY2xhc3MgX0ZpbGUgZXh0ZW5kcyBGaWxlU3lzdGVtRW50aXR5IGltcGxlbWVudHMgRmlsZSB7CiAgU3RyaW5nIF9wYXRoOwogIFVpbnQ4TGlzdCBfcmF3UGF0aDsKCiAgX0ZpbGUoU3RyaW5nIHBhdGgpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKHBhdGgsICdwYXRoJyk7CiAgICBfcGF0aCA9IHBhdGg7CiAgICBfcmF3UGF0aCA9IEZpbGVTeXN0ZW1FbnRpdHkuX3RvVXRmOEFycmF5KHBhdGgpOwogIH0KCiAgX0ZpbGUuZnJvbVJhd1BhdGgoVWludDhMaXN0IHJhd1BhdGgpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKHJhd1BhdGgsICdyYXdQYXRoJyk7CiAgICBfcmF3UGF0aCA9IEZpbGVTeXN0ZW1FbnRpdHkuX3RvTnVsbFRlcm1pbmF0ZWRVdGY4QXJyYXkocmF3UGF0aCk7CiAgICBfcGF0aCA9IEZpbGVTeXN0ZW1FbnRpdHkuX3RvU3RyaW5nRnJvbVV0ZjhBcnJheShyYXdQYXRoKTsKICB9CgogIFN0cmluZyBnZXQgcGF0aCA9PiBfcGF0aDsKCiAgLy8gV0FSTklORzoKICAvLyBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSBuYXRpdmUKICAvLyBuYW1lc3BhY2Ugb2JqZWN0LiBJdCBzaG91bGQgb25seSBiZSBjYWxsZWQgdG8gcGFzcyB0aGUgcG9pbnRlciB0byB0aGUKICAvLyBJT1NlcnZpY2UsIHdoaWNoIHdpbGwgZGVjcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnQgd2hlbiBpdCBpcyBmaW5pc2hlZAogIC8vIHdpdGggaXQuCiAgc3RhdGljIGludCBfbmFtZXNwYWNlUG9pbnRlcigpID0+IF9OYW1lc3BhY2UuX25hbWVzcGFjZVBvaW50ZXI7CgogIHN0YXRpYyBGdXR1cmUgX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZShpbnQgcmVxdWVzdCwgTGlzdCBkYXRhKSB7CiAgICBkYXRhWzBdID0gX25hbWVzcGFjZVBvaW50ZXIoKTsKICAgIHJldHVybiBfSU9TZXJ2aWNlLl9kaXNwYXRjaChyZXF1ZXN0LCBkYXRhKTsKICB9CgogIEZ1dHVyZTxib29sPiBleGlzdHMoKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZShfSU9TZXJ2aWNlLmZpbGVFeGlzdHMsIFtudWxsLCBfcmF3UGF0aF0pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJDYW5ub3QgY2hlY2sgZXhpc3RlbmNlIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfSk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX2V4aXN0cyhfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwoKICBib29sIGV4aXN0c1N5bmMoKSB7CiAgICB2YXIgcmVzdWx0ID0gX2V4aXN0cyhfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIHRocm93SWZFcnJvcihyZXN1bHQsICJDYW5ub3QgY2hlY2sgZXhpc3RlbmNlIG9mIGZpbGUiLCBwYXRoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBGaWxlIGdldCBhYnNvbHV0ZSA9PiBuZXcgRmlsZShfYWJzb2x1dGVQYXRoKTsKCiAgRnV0dXJlPEZpbGU+IGNyZWF0ZSh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSkgewogICAgdmFyIHJlc3VsdCA9CiAgICAgICAgcmVjdXJzaXZlID8gcGFyZW50LmNyZWF0ZShyZWN1cnNpdmU6IHRydWUpIDogbmV3IEZ1dHVyZS52YWx1ZShudWxsKTsKICAgIHJldHVybiByZXN1bHQKICAgICAgICAudGhlbigoXykgPT4KICAgICAgICAgICAgX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZShfSU9TZXJ2aWNlLmZpbGVDcmVhdGUsIFtudWxsLCBfcmF3UGF0aF0pKQogICAgICAgIC50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAiQ2Fubm90IGNyZWF0ZSBmaWxlIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBfY3JlYXRlKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCk7CgogIGV4dGVybmFsIHN0YXRpYyBfY3JlYXRlTGluaygKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLCBTdHJpbmcgdGFyZ2V0KTsKCiAgZXh0ZXJuYWwgc3RhdGljIF9saW5rVGFyZ2V0KF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCk7CgogIHZvaWQgY3JlYXRlU3luYyh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSkgewogICAgaWYgKHJlY3Vyc2l2ZSkgewogICAgICBwYXJlbnQuY3JlYXRlU3luYyhyZWN1cnNpdmU6IHRydWUpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9jcmVhdGUoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCk7CiAgICB0aHJvd0lmRXJyb3IocmVzdWx0LCAiQ2Fubm90IGNyZWF0ZSBmaWxlIiwgcGF0aCk7CiAgfQoKICBGdXR1cmU8RmlsZT4gX2RlbGV0ZSh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSkgewogICAgaWYgKHJlY3Vyc2l2ZSkgewogICAgICByZXR1cm4gbmV3IERpcmVjdG9yeShwYXRoKS5kZWxldGUocmVjdXJzaXZlOiB0cnVlKS50aGVuKChfKSA9PiB0aGlzKTsKICAgIH0KICAgIHJldHVybiBfZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKF9JT1NlcnZpY2UuZmlsZURlbGV0ZSwgW251bGwsIF9yYXdQYXRoXSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgIkNhbm5vdCBkZWxldGUgZmlsZSIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX2RlbGV0ZU5hdGl2ZShfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwoKICBleHRlcm5hbCBzdGF0aWMgX2RlbGV0ZUxpbmtOYXRpdmUoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoKTsKCiAgdm9pZCBfZGVsZXRlU3luYyh7Ym9vbCByZWN1cnNpdmU6IGZhbHNlfSkgewogICAgaWYgKHJlY3Vyc2l2ZSkgewogICAgICByZXR1cm4gbmV3IERpcmVjdG9yeS5mcm9tUmF3UGF0aChfcmF3UGF0aCkuZGVsZXRlU3luYyhyZWN1cnNpdmU6IHRydWUpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9kZWxldGVOYXRpdmUoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCk7CiAgICB0aHJvd0lmRXJyb3IocmVzdWx0LCAiQ2Fubm90IGRlbGV0ZSBmaWxlIiwgcGF0aCk7CiAgfQoKICBGdXR1cmU8RmlsZT4gcmVuYW1lKFN0cmluZyBuZXdQYXRoKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmZpbGVSZW5hbWUsIFtudWxsLCBfcmF3UGF0aCwgbmV3UGF0aF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UoCiAgICAgICAgICAgIHJlc3BvbnNlLCAiQ2Fubm90IHJlbmFtZSBmaWxlIHRvICckbmV3UGF0aCciLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IEZpbGUobmV3UGF0aCk7CiAgICB9KTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBfcmVuYW1lKAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IG9sZFBhdGgsIFN0cmluZyBuZXdQYXRoKTsKCiAgZXh0ZXJuYWwgc3RhdGljIF9yZW5hbWVMaW5rKAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IG9sZFBhdGgsIFN0cmluZyBuZXdQYXRoKTsKCiAgRmlsZSByZW5hbWVTeW5jKFN0cmluZyBuZXdQYXRoKSB7CiAgICB2YXIgcmVzdWx0ID0gX3JlbmFtZShfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoLCBuZXdQYXRoKTsKICAgIHRocm93SWZFcnJvcihyZXN1bHQsICJDYW5ub3QgcmVuYW1lIGZpbGUgdG8gJyRuZXdQYXRoJyIsIHBhdGgpOwogICAgcmV0dXJuIG5ldyBGaWxlKG5ld1BhdGgpOwogIH0KCiAgRnV0dXJlPEZpbGU+IGNvcHkoU3RyaW5nIG5ld1BhdGgpIHsKICAgIHJldHVybiBfZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgIF9JT1NlcnZpY2UuZmlsZUNvcHksIFtudWxsLCBfcmF3UGF0aCwgbmV3UGF0aF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UoCiAgICAgICAgICAgIHJlc3BvbnNlLCAiQ2Fubm90IGNvcHkgZmlsZSB0byAnJG5ld1BhdGgnIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBGaWxlKG5ld1BhdGgpOwogICAgfSk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgX2NvcHkoCiAgICAgIF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3Qgb2xkUGF0aCwgU3RyaW5nIG5ld1BhdGgpOwoKICBGaWxlIGNvcHlTeW5jKFN0cmluZyBuZXdQYXRoKSB7CiAgICB2YXIgcmVzdWx0ID0gX2NvcHkoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCwgbmV3UGF0aCk7CiAgICB0aHJvd0lmRXJyb3IocmVzdWx0LCAiQ2Fubm90IGNvcHkgZmlsZSB0byAnJG5ld1BhdGgnIiwgcGF0aCk7CiAgICByZXR1cm4gbmV3IEZpbGUobmV3UGF0aCk7CiAgfQoKICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gb3Blbih7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUucmVhZH0pIHsKICAgIGlmIChtb2RlICE9IEZpbGVNb2RlLnJlYWQgJiYKICAgICAgICBtb2RlICE9IEZpbGVNb2RlLndyaXRlICYmCiAgICAgICAgbW9kZSAhPSBGaWxlTW9kZS5hcHBlbmQgJiYKICAgICAgICBtb2RlICE9IEZpbGVNb2RlLndyaXRlT25seSAmJgogICAgICAgIG1vZGUgIT0gRmlsZU1vZGUud3JpdGVPbmx5QXBwZW5kKSB7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLmVycm9yKAogICAgICAgICAgbmV3IEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgZmlsZSBtb2RlIGZvciB0aGlzIG9wZXJhdGlvbicpKTsKICAgIH0KICAgIHJldHVybiBfZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgIF9JT1NlcnZpY2UuZmlsZU9wZW4sIFtudWxsLCBfcmF3UGF0aCwgbW9kZS5fbW9kZV0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJDYW5ub3Qgb3BlbiBmaWxlIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBfUmFuZG9tQWNjZXNzRmlsZShyZXNwb25zZSwgcGF0aCk7CiAgICB9KTsKICB9CgogIEZ1dHVyZTxpbnQ+IGxlbmd0aCgpIHsKICAgIHJldHVybiBfZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgIF9JT1NlcnZpY2UuZmlsZUxlbmd0aEZyb21QYXRoLCBbbnVsbCwgX3Jhd1BhdGhdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKAogICAgICAgICAgICByZXNwb25zZSwgIkNhbm5vdCByZXRyaWV2ZSBsZW5ndGggb2YgZmlsZSIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0pOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIF9sZW5ndGhGcm9tUGF0aChfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgpOwoKICBpbnQgbGVuZ3RoU3luYygpIHsKICAgIHZhciByZXN1bHQgPSBfbGVuZ3RoRnJvbVBhdGgoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCk7CiAgICB0aHJvd0lmRXJyb3IocmVzdWx0LCAiQ2Fubm90IHJldHJpZXZlIGxlbmd0aCBvZiBmaWxlIiwgcGF0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRnV0dXJlPERhdGVUaW1lPiBsYXN0QWNjZXNzZWQoKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZShfSU9TZXJ2aWNlLmZpbGVMYXN0QWNjZXNzZWQsIFtudWxsLCBfcmF3UGF0aF0pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UoCiAgICAgICAgICAgIHJlc3BvbnNlLCAiQ2Fubm90IHJldHJpZXZlIGFjY2VzcyB0aW1lIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChyZXNwb25zZSk7CiAgICB9KTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBfbGFzdEFjY2Vzc2VkKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCk7CgogIERhdGVUaW1lIGxhc3RBY2Nlc3NlZFN5bmMoKSB7CiAgICB2YXIgbXMgPSBfbGFzdEFjY2Vzc2VkKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgdGhyb3dJZkVycm9yKG1zLCAiQ2Fubm90IHJldHJpZXZlIGFjY2VzcyB0aW1lIiwgcGF0aCk7CiAgICByZXR1cm4gbmV3IERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKG1zKTsKICB9CgogIEZ1dHVyZSBzZXRMYXN0QWNjZXNzZWQoRGF0ZVRpbWUgdGltZSkgewogICAgaW50IG1pbGxpcyA9IHRpbWUubWlsbGlzZWNvbmRzU2luY2VFcG9jaDsKICAgIHJldHVybiBfZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgICAgICBfSU9TZXJ2aWNlLmZpbGVTZXRMYXN0QWNjZXNzZWQsIFtudWxsLCBfcmF3UGF0aCwgbWlsbGlzXSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgIkNhbm5vdCBzZXQgYWNjZXNzIHRpbWUiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0pOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIF9zZXRMYXN0QWNjZXNzZWQoCiAgICAgIF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwgaW50IG1pbGxpcyk7CgogIHZvaWQgc2V0TGFzdEFjY2Vzc2VkU3luYyhEYXRlVGltZSB0aW1lKSB7CiAgICBpbnQgbWlsbGlzID0gdGltZS5taWxsaXNlY29uZHNTaW5jZUVwb2NoOwogICAgdmFyIHJlc3VsdCA9IF9zZXRMYXN0QWNjZXNzZWQoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCwgbWlsbGlzKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigKICAgICAgICAgICJGYWlsZWQgdG8gc2V0IGZpbGUgYWNjZXNzIHRpbWUiLCBwYXRoLCByZXN1bHQpOwogICAgfQogIH0KCiAgRnV0dXJlPERhdGVUaW1lPiBsYXN0TW9kaWZpZWQoKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZShfSU9TZXJ2aWNlLmZpbGVMYXN0TW9kaWZpZWQsIFtudWxsLCBfcmF3UGF0aF0pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UoCiAgICAgICAgICAgIHJlc3BvbnNlLCAiQ2Fubm90IHJldHJpZXZlIG1vZGlmaWNhdGlvbiB0aW1lIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChyZXNwb25zZSk7CiAgICB9KTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBfbGFzdE1vZGlmaWVkKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCk7CgogIERhdGVUaW1lIGxhc3RNb2RpZmllZFN5bmMoKSB7CiAgICB2YXIgbXMgPSBfbGFzdE1vZGlmaWVkKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgpOwogICAgdGhyb3dJZkVycm9yKG1zLCAiQ2Fubm90IHJldHJpZXZlIG1vZGlmaWNhdGlvbiB0aW1lIiwgcGF0aCk7CiAgICByZXR1cm4gbmV3IERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKG1zKTsKICB9CgogIEZ1dHVyZSBzZXRMYXN0TW9kaWZpZWQoRGF0ZVRpbWUgdGltZSkgewogICAgaW50IG1pbGxpcyA9IHRpbWUubWlsbGlzZWNvbmRzU2luY2VFcG9jaDsKICAgIHJldHVybiBfZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgICAgICBfSU9TZXJ2aWNlLmZpbGVTZXRMYXN0TW9kaWZpZWQsIFtudWxsLCBfcmF3UGF0aCwgbWlsbGlzXSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZSgKICAgICAgICAgICAgcmVzcG9uc2UsICJDYW5ub3Qgc2V0IG1vZGlmaWNhdGlvbiB0aW1lIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9KTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBfc2V0TGFzdE1vZGlmaWVkKAogICAgICBfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgsIGludCBtaWxsaXMpOwoKICB2b2lkIHNldExhc3RNb2RpZmllZFN5bmMoRGF0ZVRpbWUgdGltZSkgewogICAgaW50IG1pbGxpcyA9IHRpbWUubWlsbGlzZWNvbmRzU2luY2VFcG9jaDsKICAgIHZhciByZXN1bHQgPSBfc2V0TGFzdE1vZGlmaWVkKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgsIG1pbGxpcyk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgICAiRmFpbGVkIHRvIHNldCBmaWxlIG1vZGlmaWNhdGlvbiB0aW1lIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICB9CgogIGV4dGVybmFsIHN0YXRpYyBfb3BlbihfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHJhd1BhdGgsIGludCBtb2RlKTsKCiAgUmFuZG9tQWNjZXNzRmlsZSBvcGVuU3luYyh7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUucmVhZH0pIHsKICAgIGlmIChtb2RlICE9IEZpbGVNb2RlLnJlYWQgJiYKICAgICAgICBtb2RlICE9IEZpbGVNb2RlLndyaXRlICYmCiAgICAgICAgbW9kZSAhPSBGaWxlTW9kZS5hcHBlbmQgJiYKICAgICAgICBtb2RlICE9IEZpbGVNb2RlLndyaXRlT25seSAmJgogICAgICAgIG1vZGUgIT0gRmlsZU1vZGUud3JpdGVPbmx5QXBwZW5kKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCdJbnZhbGlkIGZpbGUgbW9kZSBmb3IgdGhpcyBvcGVyYXRpb24nKTsKICAgIH0KICAgIHZhciBpZCA9IF9vcGVuKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgsIG1vZGUuX21vZGUpOwogICAgdGhyb3dJZkVycm9yKGlkLCAiQ2Fubm90IG9wZW4gZmlsZSIsIHBhdGgpOwogICAgcmV0dXJuIG5ldyBfUmFuZG9tQWNjZXNzRmlsZShpZCwgX3BhdGgpOwogIH0KCiAgZXh0ZXJuYWwgc3RhdGljIGludCBfb3BlblN0ZGlvKGludCBmZCk7CgogIHN0YXRpYyBSYW5kb21BY2Nlc3NGaWxlIF9vcGVuU3RkaW9TeW5jKGludCBmZCkgewogICAgdmFyIGlkID0gX29wZW5TdGRpbyhmZCk7CiAgICBpZiAoaWQgPT0gMCkgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiQ2Fubm90IG9wZW4gc3RkaW8gZmlsZSBmb3I6ICRmZCIpOwogICAgfQogICAgcmV0dXJuIG5ldyBfUmFuZG9tQWNjZXNzRmlsZShpZCwgIiIpOwogIH0KCiAgU3RyZWFtPExpc3Q8aW50Pj4gb3BlblJlYWQoW2ludCBzdGFydCwgaW50IGVuZF0pIHsKICAgIHJldHVybiBuZXcgX0ZpbGVTdHJlYW0ocGF0aCwgc3RhcnQsIGVuZCk7CiAgfQoKICBJT1Npbmsgb3BlbldyaXRlKHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS53cml0ZSwgRW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KSB7CiAgICBpZiAobW9kZSAhPSBGaWxlTW9kZS53cml0ZSAmJgogICAgICAgIG1vZGUgIT0gRmlsZU1vZGUuYXBwZW5kICYmCiAgICAgICAgbW9kZSAhPSBGaWxlTW9kZS53cml0ZU9ubHkgJiYKICAgICAgICBtb2RlICE9IEZpbGVNb2RlLndyaXRlT25seUFwcGVuZCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcignSW52YWxpZCBmaWxlIG1vZGUgZm9yIHRoaXMgb3BlcmF0aW9uJyk7CiAgICB9CiAgICB2YXIgY29uc3VtZXIgPSBuZXcgX0ZpbGVTdHJlYW1Db25zdW1lcih0aGlzLCBtb2RlKTsKICAgIHJldHVybiBuZXcgSU9TaW5rKGNvbnN1bWVyLCBlbmNvZGluZzogZW5jb2RpbmcpOwogIH0KCiAgRnV0dXJlPFVpbnQ4TGlzdD4gcmVhZEFzQnl0ZXMoKSB7CiAgICBGdXR1cmU8VWludDhMaXN0PiByZWFkRGF0YUNodW5rZWQoUmFuZG9tQWNjZXNzRmlsZSBmaWxlKSB7CiAgICAgIHZhciBidWlsZGVyID0gbmV3IEJ5dGVzQnVpbGRlcihjb3B5OiBmYWxzZSk7CiAgICAgIHZhciBjb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyPFVpbnQ4TGlzdD4oKTsKICAgICAgdm9pZCByZWFkKCkgewogICAgICAgIGZpbGUucmVhZChfYmxvY2tTaXplKS50aGVuKChkYXRhKSB7CiAgICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGJ1aWxkZXIuYWRkKGRhdGEpOwogICAgICAgICAgICByZWFkKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb21wbGV0ZXIuY29tcGxldGUoYnVpbGRlci50YWtlQnl0ZXMoKSk7CiAgICAgICAgICB9CiAgICAgICAgfSwgb25FcnJvcjogY29tcGxldGVyLmNvbXBsZXRlRXJyb3IpOwogICAgICB9CgogICAgICByZWFkKCk7CiAgICAgIHJldHVybiBjb21wbGV0ZXIuZnV0dXJlOwogICAgfQoKICAgIHJldHVybiBvcGVuKCkudGhlbigoZmlsZSkgewogICAgICByZXR1cm4gZmlsZS5sZW5ndGgoKS50aGVuKChsZW5ndGgpIHsKICAgICAgICBpZiAobGVuZ3RoID09IDApIHsKICAgICAgICAgIC8vIE1heSBiZSBjaGFyYWN0ZXIgZGV2aWNlLCB0cnkgdG8gcmVhZCBpdCBpbiBjaHVua3MuCiAgICAgICAgICByZXR1cm4gcmVhZERhdGFDaHVua2VkKGZpbGUpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmlsZS5yZWFkKGxlbmd0aCk7CiAgICAgIH0pLndoZW5Db21wbGV0ZShmaWxlLmNsb3NlKTsKICAgIH0pOwogIH0KCiAgVWludDhMaXN0IHJlYWRBc0J5dGVzU3luYygpIHsKICAgIHZhciBvcGVuZWQgPSBvcGVuU3luYygpOwogICAgdHJ5IHsKICAgICAgVWludDhMaXN0IGRhdGE7CiAgICAgIHZhciBsZW5ndGggPSBvcGVuZWQubGVuZ3RoU3luYygpOwogICAgICBpZiAobGVuZ3RoID09IDApIHsKICAgICAgICAvLyBNYXkgYmUgY2hhcmFjdGVyIGRldmljZSwgdHJ5IHRvIHJlYWQgaXQgaW4gY2h1bmtzLgogICAgICAgIHZhciBidWlsZGVyID0gbmV3IEJ5dGVzQnVpbGRlcihjb3B5OiBmYWxzZSk7CiAgICAgICAgZG8gewogICAgICAgICAgZGF0YSA9IG9wZW5lZC5yZWFkU3luYyhfYmxvY2tTaXplKTsKICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIGJ1aWxkZXIuYWRkKGRhdGEpOwogICAgICAgIH0gd2hpbGUgKGRhdGEubGVuZ3RoID4gMCk7CiAgICAgICAgZGF0YSA9IGJ1aWxkZXIudGFrZUJ5dGVzKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZGF0YSA9IG9wZW5lZC5yZWFkU3luYyhsZW5ndGgpOwogICAgICB9CiAgICAgIHJldHVybiBkYXRhOwogICAgfSBmaW5hbGx5IHsKICAgICAgb3BlbmVkLmNsb3NlU3luYygpOwogICAgfQogIH0KCiAgU3RyaW5nIF90cnlEZWNvZGUoTGlzdDxpbnQ+IGJ5dGVzLCBFbmNvZGluZyBlbmNvZGluZykgewogICAgdHJ5IHsKICAgICAgcmV0dXJuIGVuY29kaW5nLmRlY29kZShieXRlcyk7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICAgIkZhaWxlZCB0byBkZWNvZGUgZGF0YSB1c2luZyBlbmNvZGluZyAnJHtlbmNvZGluZy5uYW1lfSciLCBwYXRoKTsKICAgIH0KICB9CgogIEZ1dHVyZTxTdHJpbmc+IHJlYWRBc1N0cmluZyh7RW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KSB7CiAgICAvLyBUT0RPKGRhcnQ6aW8pOiBJZiB0aGUgY2hhbmdlIGluIGFzeW5jIHNlbWFudGljcyB0byBydW4gc3luY2hyb25vdXNseQogICAgLy8gdW50aWwgYXdhaXQgbGFuZHMsIHRoaXMgaXMgYXMgZWZmaWNpZW50IGFzCiAgICAvLyByZXR1cm4gX3RyeURlY29kZShhd2FpdCByZWFkQXNCeXRlcygpLCBlbmNvZGluZyk7CiAgICB2YXIgc3RhY2sgPSBTdGFja1RyYWNlLmN1cnJlbnQ7CiAgICByZXR1cm4gcmVhZEFzQnl0ZXMoKS50aGVuKChieXRlcykgewogICAgICB0cnkgewogICAgICAgIHJldHVybiBfdHJ5RGVjb2RlKGJ5dGVzLCBlbmNvZGluZyk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcihlLCBzdGFjayk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgU3RyaW5nIHJlYWRBc1N0cmluZ1N5bmMoe0VuY29kaW5nIGVuY29kaW5nOiB1dGY4fSkgPT4KICAgICAgX3RyeURlY29kZShyZWFkQXNCeXRlc1N5bmMoKSwgZW5jb2RpbmcpOwoKICBGdXR1cmU8TGlzdDxTdHJpbmc+PiByZWFkQXNMaW5lcyh7RW5jb2RpbmcgZW5jb2Rpbmc6IHV0Zjh9KSA9PgogICAgICByZWFkQXNTdHJpbmcoZW5jb2Rpbmc6IGVuY29kaW5nKS50aGVuKGNvbnN0IExpbmVTcGxpdHRlcigpLmNvbnZlcnQpOwoKICBMaXN0PFN0cmluZz4gcmVhZEFzTGluZXNTeW5jKHtFbmNvZGluZyBlbmNvZGluZzogdXRmOH0pID0+CiAgICAgIGNvbnN0IExpbmVTcGxpdHRlcigpLmNvbnZlcnQocmVhZEFzU3RyaW5nU3luYyhlbmNvZGluZzogZW5jb2RpbmcpKTsKCiAgRnV0dXJlPEZpbGU+IHdyaXRlQXNCeXRlcyhMaXN0PGludD4gYnl0ZXMsCiAgICAgIHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS53cml0ZSwgYm9vbCBmbHVzaDogZmFsc2V9KSB7CiAgICByZXR1cm4gb3Blbihtb2RlOiBtb2RlKS50aGVuKChmaWxlKSB7CiAgICAgIHJldHVybiBmaWxlLndyaXRlRnJvbShieXRlcywgMCwgYnl0ZXMubGVuZ3RoKS50aGVuPEZpbGU+KChfKSB7CiAgICAgICAgaWYgKGZsdXNoKSByZXR1cm4gZmlsZS5mbHVzaCgpLnRoZW4oKF8pID0+IHRoaXMpOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9KS53aGVuQ29tcGxldGUoZmlsZS5jbG9zZSk7CiAgICB9KTsKICB9CgogIHZvaWQgd3JpdGVBc0J5dGVzU3luYyhMaXN0PGludD4gYnl0ZXMsCiAgICAgIHtGaWxlTW9kZSBtb2RlOiBGaWxlTW9kZS53cml0ZSwgYm9vbCBmbHVzaDogZmFsc2V9KSB7CiAgICBSYW5kb21BY2Nlc3NGaWxlIG9wZW5lZCA9IG9wZW5TeW5jKG1vZGU6IG1vZGUpOwogICAgdHJ5IHsKICAgICAgb3BlbmVkLndyaXRlRnJvbVN5bmMoYnl0ZXMsIDAsIGJ5dGVzLmxlbmd0aCk7CiAgICAgIGlmIChmbHVzaCkgb3BlbmVkLmZsdXNoU3luYygpOwogICAgfSBmaW5hbGx5IHsKICAgICAgb3BlbmVkLmNsb3NlU3luYygpOwogICAgfQogIH0KCiAgRnV0dXJlPEZpbGU+IHdyaXRlQXNTdHJpbmcoU3RyaW5nIGNvbnRlbnRzLAogICAgICB7RmlsZU1vZGUgbW9kZTogRmlsZU1vZGUud3JpdGUsCiAgICAgIEVuY29kaW5nIGVuY29kaW5nOiB1dGY4LAogICAgICBib29sIGZsdXNoOiBmYWxzZX0pIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiB3cml0ZUFzQnl0ZXMoZW5jb2RpbmcuZW5jb2RlKGNvbnRlbnRzKSwgbW9kZTogbW9kZSwgZmx1c2g6IGZsdXNoKTsKICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IoZSk7CiAgICB9CiAgfQoKICB2b2lkIHdyaXRlQXNTdHJpbmdTeW5jKFN0cmluZyBjb250ZW50cywKICAgICAge0ZpbGVNb2RlIG1vZGU6IEZpbGVNb2RlLndyaXRlLAogICAgICBFbmNvZGluZyBlbmNvZGluZzogdXRmOCwKICAgICAgYm9vbCBmbHVzaDogZmFsc2V9KSB7CiAgICB3cml0ZUFzQnl0ZXNTeW5jKGVuY29kaW5nLmVuY29kZShjb250ZW50cyksIG1vZGU6IG1vZGUsIGZsdXNoOiBmbHVzaCk7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiRmlsZTogJyRwYXRoJyI7CgogIHN0YXRpYyB0aHJvd0lmRXJyb3IoT2JqZWN0IHJlc3VsdCwgU3RyaW5nIG1zZywgU3RyaW5nIHBhdGgpIHsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbihtc2csIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQp9CgphYnN0cmFjdCBjbGFzcyBfUmFuZG9tQWNjZXNzRmlsZU9wcyB7CiAgZXh0ZXJuYWwgZmFjdG9yeSBfUmFuZG9tQWNjZXNzRmlsZU9wcyhpbnQgcG9pbnRlcik7CgogIGludCBnZXRQb2ludGVyKCk7CiAgaW50IGNsb3NlKCk7CiAgcmVhZEJ5dGUoKTsKICByZWFkKGludCBieXRlcyk7CiAgcmVhZEludG8oTGlzdDxpbnQ+IGJ1ZmZlciwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKICB3cml0ZUJ5dGUoaW50IHZhbHVlKTsKICB3cml0ZUZyb20oTGlzdDxpbnQ+IGJ1ZmZlciwgaW50IHN0YXJ0LCBpbnQgZW5kKTsKICBwb3NpdGlvbigpOwogIHNldFBvc2l0aW9uKGludCBwb3NpdGlvbik7CiAgdHJ1bmNhdGUoaW50IGxlbmd0aCk7CiAgbGVuZ3RoKCk7CiAgZmx1c2goKTsKICBsb2NrKGludCBsb2NrLCBpbnQgc3RhcnQsIGludCBlbmQpOwp9CgpjbGFzcyBfUmFuZG9tQWNjZXNzRmlsZSBpbXBsZW1lbnRzIFJhbmRvbUFjY2Vzc0ZpbGUgewogIHN0YXRpYyBib29sIF9jb25uZWN0ZWRSZXNvdXJjZUhhbmRsZXIgPSBmYWxzZTsKCiAgZmluYWwgU3RyaW5nIHBhdGg7CgogIGJvb2wgX2FzeW5jRGlzcGF0Y2hlZCA9IGZhbHNlOwogIFNlbmRQb3J0IF9maWxlU2VydmljZTsKCiAgX0ZpbGVSZXNvdXJjZUluZm8gX3Jlc291cmNlSW5mbzsKICBfUmFuZG9tQWNjZXNzRmlsZU9wcyBfb3BzOwoKICBfUmFuZG9tQWNjZXNzRmlsZShpbnQgcG9pbnRlciwgdGhpcy5wYXRoKSB7CiAgICBfb3BzID0gbmV3IF9SYW5kb21BY2Nlc3NGaWxlT3BzKHBvaW50ZXIpOwogICAgX3Jlc291cmNlSW5mbyA9IG5ldyBfRmlsZVJlc291cmNlSW5mbyh0aGlzKTsKICAgIF9tYXliZUNvbm5lY3RIYW5kbGVyKCk7CiAgfQoKICB2b2lkIF9tYXliZVBlcmZvcm1DbGVhbnVwKCkgewogICAgaWYgKGNsb3NlZCkgewogICAgICBfRmlsZVJlc291cmNlSW5mby5GaWxlQ2xvc2VkKF9yZXNvdXJjZUluZm8pOwogICAgfQogIH0KCiAgX21heWJlQ29ubmVjdEhhbmRsZXIoKSB7CiAgICBpZiAoIV9jb25uZWN0ZWRSZXNvdXJjZUhhbmRsZXIpIHsKICAgICAgLy8gVE9ETyhyaWNvdyk6IFdlIHByb2JhYmx5IG5lZWQgdG8gc2V0IHRoZXNlIGluIHNvbWUgaW5pdGlhbGl6YXRpb24gY29kZS4KICAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVzZSBhcmUgYWx3YXlzIGF2YWlsYWJsZSBmcm9tIHRoZQogICAgICAvLyBvYnNlcnZhdG9yeSBldmVuIGlmIG5vIGZpbGVzIChvciBzb2NrZXRzIGZvciB0aGUgc29ja2V0IG9uZXMpIGFyZQogICAgICAvLyBvcGVuLgogICAgICByZWdpc3RlckV4dGVuc2lvbigKICAgICAgICAgICdleHQuZGFydC5pby5nZXRPcGVuRmlsZXMnLCBfRmlsZVJlc291cmNlSW5mby5nZXRPcGVuRmlsZXMpOwogICAgICByZWdpc3RlckV4dGVuc2lvbigKICAgICAgICAgICdleHQuZGFydC5pby5nZXRGaWxlQnlJRCcsIF9GaWxlUmVzb3VyY2VJbmZvLmdldEZpbGVJbmZvTWFwQnlJRCk7CiAgICAgIF9jb25uZWN0ZWRSZXNvdXJjZUhhbmRsZXIgPSB0cnVlOwogICAgfQogIH0KCiAgRnV0dXJlPHZvaWQ+IGNsb3NlKCkgewogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVDbG9zZSwgW251bGxdLCBtYXJrQ2xvc2VkOiB0cnVlKQogICAgICAgIC50aGVuKChyZXN1bHQpIHsKICAgICAgaWYgKHJlc3VsdCA9PSAtMSkgewogICAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJDYW5ub3QgY2xvc2UgZmlsZSIsIHBhdGgpOwogICAgICB9CiAgICAgIGNsb3NlZCA9IGNsb3NlZCB8fCAocmVzdWx0ID09IDApOwogICAgICBfbWF5YmVQZXJmb3JtQ2xlYW51cCgpOwogICAgfSk7CiAgfQoKICB2b2lkIGNsb3NlU3luYygpIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgdmFyIGlkID0gX29wcy5jbG9zZSgpOwogICAgaWYgKGlkID09IC0xKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJDYW5ub3QgY2xvc2UgZmlsZSIsIHBhdGgpOwogICAgfQogICAgY2xvc2VkID0gY2xvc2VkIHx8IChpZCA9PSAwKTsKICAgIF9tYXliZVBlcmZvcm1DbGVhbnVwKCk7CiAgfQoKICBGdXR1cmU8aW50PiByZWFkQnl0ZSgpIHsKICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlUmVhZEJ5dGUsIFtudWxsXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgInJlYWRCeXRlIGZhaWxlZCIsIHBhdGgpOwogICAgICB9CiAgICAgIF9yZXNvdXJjZUluZm8uYWRkUmVhZCgxKTsKICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfSk7CiAgfQoKICBpbnQgcmVhZEJ5dGVTeW5jKCkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICB2YXIgcmVzdWx0ID0gX29wcy5yZWFkQnl0ZSgpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJyZWFkQnl0ZSBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogICAgX3Jlc291cmNlSW5mby5hZGRSZWFkKDEpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEZ1dHVyZTxVaW50OExpc3Q+IHJlYWQoaW50IGJ5dGVzKSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChieXRlcywgJ2J5dGVzJyk7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZVJlYWQsIFtudWxsLCBieXRlc10pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJyZWFkIGZhaWxlZCIsIHBhdGgpOwogICAgICB9CiAgICAgIF9yZXNvdXJjZUluZm8uYWRkUmVhZChyZXNwb25zZVsxXS5sZW5ndGgpOwogICAgICBVaW50OExpc3QgcmVzdWx0ID0gcmVzcG9uc2VbMV07CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9KTsKICB9CgogIFVpbnQ4TGlzdCByZWFkU3luYyhpbnQgYnl0ZXMpIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoYnl0ZXMsICdieXRlcycpOwogICAgdmFyIHJlc3VsdCA9IF9vcHMucmVhZChieXRlcyk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oInJlYWRTeW5jIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgICBfcmVzb3VyY2VJbmZvLmFkZFJlYWQocmVzdWx0Lmxlbmd0aCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRnV0dXJlPGludD4gcmVhZEludG8oTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBpZiAoKGJ1ZmZlciBpcyEgTGlzdCkgfHwKICAgICAgICAoKHN0YXJ0ICE9IG51bGwpICYmIChzdGFydCBpcyEgaW50KSkgfHwKICAgICAgICAoKGVuZCAhPSBudWxsKSAmJiAoZW5kIGlzISBpbnQpKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgfQogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgYnVmZmVyLmxlbmd0aCk7CiAgICBpZiAoZW5kID09IHN0YXJ0KSB7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKDApOwogICAgfQogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVSZWFkSW50bywgW251bGwsIGxlbmd0aF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJyZWFkSW50byBmYWlsZWQiLCBwYXRoKTsKICAgICAgfQogICAgICBpbnQgcmVhZCA9IHJlc3BvbnNlWzFdOwogICAgICBMaXN0PGludD4gZGF0YSA9IHJlc3BvbnNlWzJdOwogICAgICBidWZmZXIuc2V0UmFuZ2Uoc3RhcnQsIHN0YXJ0ICsgcmVhZCwgZGF0YSk7CiAgICAgIF9yZXNvdXJjZUluZm8uYWRkUmVhZChyZWFkKTsKICAgICAgcmV0dXJuIHJlYWQ7CiAgICB9KTsKICB9CgogIGludCByZWFkSW50b1N5bmMoTGlzdDxpbnQ+IGJ1ZmZlciwgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIGlmICgoYnVmZmVyIGlzISBMaXN0KSB8fAogICAgICAgICgoc3RhcnQgIT0gbnVsbCkgJiYgKHN0YXJ0IGlzISBpbnQpKSB8fAogICAgICAgICgoZW5kICE9IG51bGwpICYmIChlbmQgaXMhIGludCkpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBidWZmZXIubGVuZ3RoKTsKICAgIGlmIChlbmQgPT0gc3RhcnQpIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX29wcy5yZWFkSW50byhidWZmZXIsIHN0YXJ0LCBlbmQpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJyZWFkSW50byBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogICAgX3Jlc291cmNlSW5mby5hZGRSZWFkKHJlc3VsdCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IHdyaXRlQnl0ZShpbnQgdmFsdWUpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKHZhbHVlLCAndmFsdWUnKTsKICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlV3JpdGVCeXRlLCBbbnVsbCwgdmFsdWVdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAid3JpdGVCeXRlIGZhaWxlZCIsIHBhdGgpOwogICAgICB9CiAgICAgIF9yZXNvdXJjZUluZm8uYWRkV3JpdGUoMSk7CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICBpbnQgd3JpdGVCeXRlU3luYyhpbnQgdmFsdWUpIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwodmFsdWUsICd2YWx1ZScpOwogICAgdmFyIHJlc3VsdCA9IF9vcHMud3JpdGVCeXRlKHZhbHVlKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigid3JpdGVCeXRlIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgICBfcmVzb3VyY2VJbmZvLmFkZFdyaXRlKDEpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiB3cml0ZUZyb20oTGlzdDxpbnQ+IGJ1ZmZlciwKICAgICAgW2ludCBzdGFydCA9IDAsIGludCBlbmRdKSB7CiAgICBpZiAoKGJ1ZmZlciBpcyEgTGlzdCkgfHwKICAgICAgICAoKHN0YXJ0ICE9IG51bGwpICYmIChzdGFydCBpcyEgaW50KSkgfHwKICAgICAgICAoKGVuZCAhPSBudWxsKSAmJiAoZW5kIGlzISBpbnQpKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSW52YWxpZCBhcmd1bWVudHMgdG8gd3JpdGVGcm9tIik7CiAgICB9CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBidWZmZXIubGVuZ3RoKTsKICAgIGlmIChlbmQgPT0gc3RhcnQpIHsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUodGhpcyk7CiAgICB9CiAgICBfQnVmZmVyQW5kU3RhcnQgcmVzdWx0OwogICAgdHJ5IHsKICAgICAgcmVzdWx0ID0gX2Vuc3VyZUZhc3RBbmRTZXJpYWxpemFibGVCeXRlRGF0YShidWZmZXIsIHN0YXJ0LCBlbmQpOwogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcihlKTsKICAgIH0KCiAgICBMaXN0IHJlcXVlc3QgPSBuZXcgTGlzdCg0KTsKICAgIHJlcXVlc3RbMF0gPSBudWxsOwogICAgcmVxdWVzdFsxXSA9IHJlc3VsdC5idWZmZXI7CiAgICByZXF1ZXN0WzJdID0gcmVzdWx0LnN0YXJ0OwogICAgcmVxdWVzdFszXSA9IGVuZCAtIChzdGFydCAtIHJlc3VsdC5zdGFydCk7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZVdyaXRlRnJvbSwgcmVxdWVzdCkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgIndyaXRlRnJvbSBmYWlsZWQiLCBwYXRoKTsKICAgICAgfQogICAgICBfcmVzb3VyY2VJbmZvLmFkZFdyaXRlKGVuZCAtIChzdGFydCAtIHJlc3VsdC5zdGFydCkpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgdm9pZCB3cml0ZUZyb21TeW5jKExpc3Q8aW50PiBidWZmZXIsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgX2NoZWNrQXZhaWxhYmxlKCk7CiAgICBpZiAoKGJ1ZmZlciBpcyEgTGlzdCkgfHwKICAgICAgICAoKHN0YXJ0ICE9IG51bGwpICYmIChzdGFydCBpcyEgaW50KSkgfHwKICAgICAgICAoKGVuZCAhPSBudWxsKSAmJiAoZW5kIGlzISBpbnQpKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSW52YWxpZCBhcmd1bWVudHMgdG8gd3JpdGVGcm9tU3luYyIpOwogICAgfQogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgYnVmZmVyLmxlbmd0aCk7CiAgICBpZiAoZW5kID09IHN0YXJ0KSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIF9CdWZmZXJBbmRTdGFydCBidWZmZXJBbmRTdGFydCA9CiAgICAgICAgX2Vuc3VyZUZhc3RBbmRTZXJpYWxpemFibGVCeXRlRGF0YShidWZmZXIsIHN0YXJ0LCBlbmQpOwogICAgdmFyIHJlc3VsdCA9IF9vcHMud3JpdGVGcm9tKGJ1ZmZlckFuZFN0YXJ0LmJ1ZmZlciwgYnVmZmVyQW5kU3RhcnQuc3RhcnQsCiAgICAgICAgZW5kIC0gKHN0YXJ0IC0gYnVmZmVyQW5kU3RhcnQuc3RhcnQpKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigid3JpdGVGcm9tIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgICBfcmVzb3VyY2VJbmZvLmFkZFdyaXRlKGVuZCAtIChzdGFydCAtIGJ1ZmZlckFuZFN0YXJ0LnN0YXJ0KSk7CiAgfQoKICBGdXR1cmU8UmFuZG9tQWNjZXNzRmlsZT4gd3JpdGVTdHJpbmcoU3RyaW5nIHN0cmluZywKICAgICAge0VuY29kaW5nIGVuY29kaW5nOiB1dGY4fSkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoZW5jb2RpbmcsICdlbmNvZGluZycpOwogICAgdmFyIGRhdGEgPSBlbmNvZGluZy5lbmNvZGUoc3RyaW5nKTsKICAgIHJldHVybiB3cml0ZUZyb20oZGF0YSwgMCwgZGF0YS5sZW5ndGgpOwogIH0KCiAgdm9pZCB3cml0ZVN0cmluZ1N5bmMoU3RyaW5nIHN0cmluZywge0VuY29kaW5nIGVuY29kaW5nOiB1dGY4fSkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoZW5jb2RpbmcsICdlbmNvZGluZycpOwogICAgdmFyIGRhdGEgPSBlbmNvZGluZy5lbmNvZGUoc3RyaW5nKTsKICAgIHdyaXRlRnJvbVN5bmMoZGF0YSwgMCwgZGF0YS5sZW5ndGgpOwogIH0KCiAgRnV0dXJlPGludD4gcG9zaXRpb24oKSB7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZVBvc2l0aW9uLCBbbnVsbF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJwb3NpdGlvbiBmYWlsZWQiLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICB9KTsKICB9CgogIGludCBwb3NpdGlvblN5bmMoKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIHZhciByZXN1bHQgPSBfb3BzLnBvc2l0aW9uKCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oInBvc2l0aW9uIGZhaWxlZCIsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IHNldFBvc2l0aW9uKGludCBwb3NpdGlvbikgewogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVTZXRQb3NpdGlvbiwgW251bGwsIHBvc2l0aW9uXSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgInNldFBvc2l0aW9uIGZhaWxlZCIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICB2b2lkIHNldFBvc2l0aW9uU3luYyhpbnQgcG9zaXRpb24pIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgdmFyIHJlc3VsdCA9IF9vcHMuc2V0UG9zaXRpb24ocG9zaXRpb24pOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJzZXRQb3NpdGlvbiBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogIH0KCiAgRnV0dXJlPFJhbmRvbUFjY2Vzc0ZpbGU+IHRydW5jYXRlKGludCBsZW5ndGgpIHsKICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlVHJ1bmNhdGUsIFtudWxsLCBsZW5ndGhdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAidHJ1bmNhdGUgZmFpbGVkIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIHZvaWQgdHJ1bmNhdGVTeW5jKGludCBsZW5ndGgpIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgdmFyIHJlc3VsdCA9IF9vcHMudHJ1bmNhdGUobGVuZ3RoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigidHJ1bmNhdGUgZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICB9CgogIEZ1dHVyZTxpbnQ+IGxlbmd0aCgpIHsKICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlTGVuZ3RoLCBbbnVsbF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICJsZW5ndGggZmFpbGVkIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3BvbnNlOwogICAgfSk7CiAgfQoKICBpbnQgbGVuZ3RoU3luYygpIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgdmFyIHJlc3VsdCA9IF9vcHMubGVuZ3RoKCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oImxlbmd0aCBmYWlsZWQiLCBwYXRoLCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiBmbHVzaCgpIHsKICAgIHJldHVybiBfZGlzcGF0Y2goX0lPU2VydmljZS5maWxlRmx1c2gsIFtudWxsXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgImZsdXNoIGZhaWxlZCIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzOwogICAgfSk7CiAgfQoKICB2b2lkIGZsdXNoU3luYygpIHsKICAgIF9jaGVja0F2YWlsYWJsZSgpOwogICAgdmFyIHJlc3VsdCA9IF9vcHMuZmx1c2goKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigiZmx1c2ggZmFpbGVkIiwgcGF0aCwgcmVzdWx0KTsKICAgIH0KICB9CgogIHN0YXRpYyBjb25zdCBpbnQgbG9ja1VubG9jayA9IDA7CiAgLy8gc3RhdGljIGNvbnN0IGludCBsb2NrU2hhcmVkID0gMTsKICAvLyBzdGF0aWMgY29uc3QgaW50IGxvY2tFeGNsdXNpdmUgPSAyOwogIC8vIHN0YXRpYyBjb25zdCBpbnQgbG9ja0Jsb2NraW5nU2hhcmVkID0gMzsKICAvLyBzdGF0aWMgY29uc3QgaW50IGxvY2tCbG9ja2luZ0V4Y2x1c2l2ZSA9IDQ7CgogIGludCBfZmlsZUxvY2tWYWx1ZShGaWxlTG9jayBmbCkgPT4gZmwuX3R5cGU7CgogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiBsb2NrKAogICAgICBbRmlsZUxvY2sgbW9kZSA9IEZpbGVMb2NrLmV4Y2x1c2l2ZSwgaW50IHN0YXJ0ID0gMCwgaW50IGVuZCA9IC0xXSkgewogICAgaWYgKChtb2RlIGlzISBGaWxlTG9jaykgfHwgKHN0YXJ0IGlzISBpbnQpIHx8IChlbmQgaXMhIGludCkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIGlmICgoc3RhcnQgPCAwKSB8fCAoZW5kIDwgLTEpIHx8ICgoZW5kICE9IC0xKSAmJiAoc3RhcnQgPj0gZW5kKSkpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICAgIH0KICAgIGludCBsb2NrID0gX2ZpbGVMb2NrVmFsdWUobW9kZSk7CiAgICByZXR1cm4gX2Rpc3BhdGNoKF9JT1NlcnZpY2UuZmlsZUxvY2ssIFtudWxsLCBsb2NrLCBzdGFydCwgZW5kXSkKICAgICAgICAudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgJ2xvY2sgZmFpbGVkJywgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIEZ1dHVyZTxSYW5kb21BY2Nlc3NGaWxlPiB1bmxvY2soW2ludCBzdGFydCA9IDAsIGludCBlbmQgPSAtMV0pIHsKICAgIGlmICgoc3RhcnQgaXMhIGludCkgfHwgKGVuZCBpcyEgaW50KSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgfQogICAgaWYgKHN0YXJ0ID09IGVuZCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgfQogICAgcmV0dXJuIF9kaXNwYXRjaChfSU9TZXJ2aWNlLmZpbGVMb2NrLCBbbnVsbCwgbG9ja1VubG9jaywgc3RhcnQsIGVuZF0pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UocmVzcG9uc2UsICd1bmxvY2sgZmFpbGVkJywgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIHZvaWQgbG9ja1N5bmMoCiAgICAgIFtGaWxlTG9jayBtb2RlID0gRmlsZUxvY2suZXhjbHVzaXZlLCBpbnQgc3RhcnQgPSAwLCBpbnQgZW5kID0gLTFdKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIGlmICgobW9kZSBpcyEgRmlsZUxvY2spIHx8IChzdGFydCBpcyEgaW50KSB8fCAoZW5kIGlzISBpbnQpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgICBpZiAoKHN0YXJ0IDwgMCkgfHwgKGVuZCA8IC0xKSB8fCAoKGVuZCAhPSAtMSkgJiYgKHN0YXJ0ID49IGVuZCkpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICB9CiAgICBpbnQgbG9jayA9IF9maWxlTG9ja1ZhbHVlKG1vZGUpOwogICAgdmFyIHJlc3VsdCA9IF9vcHMubG9jayhsb2NrLCBzdGFydCwgZW5kKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbignbG9jayBmYWlsZWQnLCBwYXRoLCByZXN1bHQpOwogICAgfQogIH0KCiAgdm9pZCB1bmxvY2tTeW5jKFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kID0gLTFdKSB7CiAgICBfY2hlY2tBdmFpbGFibGUoKTsKICAgIGlmICgoc3RhcnQgaXMhIGludCkgfHwgKGVuZCBpcyEgaW50KSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgfQogICAgaWYgKHN0YXJ0ID09IGVuZCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9vcHMubG9jayhsb2NrVW5sb2NrLCBzdGFydCwgZW5kKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbigndW5sb2NrIGZhaWxlZCcsIHBhdGgsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBib29sIGNsb3NlZCA9IGZhbHNlOwoKICAvLyBXQVJOSU5HOgogIC8vIENhbGxpbmcgdGhpcyBmdW5jdGlvbiB3aWxsIGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIG5hdGl2ZQogIC8vIG9iamVjdCB0aGF0IGltcGxlbWVudHMgdGhlIGZpbGUgb3BlcmF0aW9ucy4gSXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHRvCiAgLy8gcGFzcyB0aGUgcG9pbnRlciB0byB0aGUgSU8gU2VydmljZSwgd2hpY2ggd2lsbCBkZWNyZW1lbnQgdGhlIHJlZmVyZW5jZQogIC8vIGNvdW50IHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCBpdC4KICBpbnQgX3BvaW50ZXIoKSA9PiBfb3BzLmdldFBvaW50ZXIoKTsKCiAgRnV0dXJlIF9kaXNwYXRjaChpbnQgcmVxdWVzdCwgTGlzdCBkYXRhLCB7Ym9vbCBtYXJrQ2xvc2VkOiBmYWxzZX0pIHsKICAgIGlmIChjbG9zZWQpIHsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IobmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oIkZpbGUgY2xvc2VkIiwgcGF0aCkpOwogICAgfQogICAgaWYgKF9hc3luY0Rpc3BhdGNoZWQpIHsKICAgICAgdmFyIG1zZyA9ICJBbiBhc3luYyBvcGVyYXRpb24gaXMgY3VycmVudGx5IHBlbmRpbmciOwogICAgICByZXR1cm4gbmV3IEZ1dHVyZS5lcnJvcihuZXcgRmlsZVN5c3RlbUV4Y2VwdGlvbihtc2csIHBhdGgpKTsKICAgIH0KICAgIGlmIChtYXJrQ2xvc2VkKSB7CiAgICAgIC8vIFNldCBjbG9zZWQgdG8gdHJ1ZSB0byBlbnN1cmUgdGhhdCBubyBtb3JlIGFzeW5jIHJlcXVlc3RzIGNhbiBiZSBpc3N1ZWQKICAgICAgLy8gZm9yIHRoaXMgZmlsZS4KICAgICAgY2xvc2VkID0gdHJ1ZTsKICAgIH0KICAgIF9hc3luY0Rpc3BhdGNoZWQgPSB0cnVlOwogICAgZGF0YVswXSA9IF9wb2ludGVyKCk7CiAgICByZXR1cm4gX0lPU2VydmljZS5fZGlzcGF0Y2gocmVxdWVzdCwgZGF0YSkud2hlbkNvbXBsZXRlKCgpIHsKICAgICAgX2FzeW5jRGlzcGF0Y2hlZCA9IGZhbHNlOwogICAgfSk7CiAgfQoKICB2b2lkIF9jaGVja0F2YWlsYWJsZSgpIHsKICAgIGlmIChfYXN5bmNEaXNwYXRjaGVkKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICAgIkFuIGFzeW5jIG9wZXJhdGlvbiBpcyBjdXJyZW50bHkgcGVu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bCgwKTsKICBARGVwcmVjYXRlZCgiVXNlIGZpbGUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEZJTEUgPSBmaWxlOwoKICBzdGF0aWMgY29uc3QgZGlyZWN0b3J5ID0gY29uc3QgRmlsZVN5c3RlbUVudGl0eVR5cGUuX2ludGVybmFsKDEpOwogIEBEZXByZWNhdGVkKCJVc2UgZGlyZWN0b3J5IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBESVJFQ1RPUlkgPSBkaXJlY3Rvcnk7CgogIHN0YXRpYyBjb25zdCBsaW5rID0gY29uc3QgRmlsZVN5c3RlbUVudGl0eVR5cGUuX2ludGVybmFsKDIpOwogIEBEZXByZWNhdGVkKCJVc2UgbGluayBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgTElOSyA9IGxpbms7CgogIHN0YXRpYyBjb25zdCBub3RGb3VuZCA9IGNvbnN0IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLl9pbnRlcm5hbCgzKTsKICBARGVwcmVjYXRlZCgiVXNlIG5vdEZvdW5kIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBOT1RfRk9VTkQgPSBub3RGb3VuZDsKCiAgc3RhdGljIGNvbnN0IF90eXBlTGlzdCA9IGNvbnN0IFsKICAgIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmZpbGUsCiAgICBGaWxlU3lzdGVtRW50aXR5VHlwZS5kaXJlY3RvcnksCiAgICBGaWxlU3lzdGVtRW50aXR5VHlwZS5saW5rLAogICAgRmlsZVN5c3RlbUVudGl0eVR5cGUubm90Rm91bmQsCiAgXTsKICBmaW5hbCBpbnQgX3R5cGU7CgogIGNvbnN0IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLl9pbnRlcm5hbCh0aGlzLl90eXBlKTsKCiAgc3RhdGljIEZpbGVTeXN0ZW1FbnRpdHlUeXBlIF9sb29rdXAoaW50IHR5cGUpID0+IF90eXBlTGlzdFt0eXBlXTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBjb25zdCBbJ2ZpbGUnLCAnZGlyZWN0b3J5JywgJ2xpbmsnLCAnbm90Rm91bmQnXVtfdHlwZV07Cn0KCi8qKgogKiBBIEZpbGVTdGF0IG9iamVjdCByZXByZXNlbnRzIHRoZSByZXN1bHQgb2YgY2FsbGluZyB0aGUgUE9TSVggc3RhdCgpIGZ1bmN0aW9uCiAqIG9uIGEgZmlsZSBzeXN0ZW0gb2JqZWN0LiAgSXQgaXMgYW4gaW1tdXRhYmxlIG9iamVjdCwgcmVwcmVzZW50aW5nIHRoZQogKiBzbmFwc2hvdHRlZCB2YWx1ZXMgcmV0dXJuZWQgYnkgdGhlIHN0YXQoKSBjYWxsLgogKi8KY2xhc3MgRmlsZVN0YXQgewogIC8vIFRoZXNlIG11c3QgYWdyZWUgd2l0aCBlbnVtIEZpbGVTdGF0IGluIGZpbGUuaC4KICBzdGF0aWMgY29uc3QgX3R5cGUgPSAwOwogIHN0YXRpYyBjb25zdCBfY2hhbmdlZFRpbWUgPSAxOwogIHN0YXRpYyBjb25zdCBfbW9kaWZpZWRUaW1lID0gMjsKICBzdGF0aWMgY29uc3QgX2FjY2Vzc2VkVGltZSA9IDM7CiAgc3RhdGljIGNvbnN0IF9tb2RlID0gNDsKICBzdGF0aWMgY29uc3QgX3NpemUgPSA1OwoKICBzdGF0aWMgY29uc3QgX25vdEZvdW5kID0gY29uc3QgRmlsZVN0YXQuX2ludGVybmFsTm90Rm91bmQoKTsKCiAgLyoqCiAgICogVGhlIHRpbWUgb2YgdGhlIGxhc3QgY2hhbmdlIHRvIHRoZSBkYXRhIG9yIG1ldGFkYXRhIG9mIHRoZSBmaWxlIHN5c3RlbQogICAqIG9iamVjdC4KICAgKgogICAqIE9uIFdpbmRvd3MgcGxhdGZvcm1zLCB0aGlzIGlzIGluc3RlYWQgdGhlIGZpbGUgY3JlYXRpb24gdGltZS4KICAgKi8KICBmaW5hbCBEYXRlVGltZSBjaGFuZ2VkOwoKICAvKioKICAgKiBUaGUgdGltZSBvZiB0aGUgbGFzdCBjaGFuZ2UgdG8gdGhlIGRhdGEgb2YgdGhlIGZpbGUgc3lzdGVtIG9iamVjdC4KICAgKi8KICBmaW5hbCBEYXRlVGltZSBtb2RpZmllZDsKCiAgLyoqCiAgICogVGhlIHRpbWUgb2YgdGhlIGxhc3QgYWNjZXNzIHRvIHRoZSBkYXRhIG9mIHRoZSBmaWxlIHN5c3RlbSBvYmplY3QuCiAgICoKICAgKiBPbiBXaW5kb3dzIHBsYXRmb3JtcywgdGhpcyBtYXkgaGF2ZSAxIGRheSBncmFudWxhcml0eSwgYW5kIGJlCiAgICogb3V0IG9mIGRhdGUgYnkgYW4gaG91ci4KICAgKi8KICBmaW5hbCBEYXRlVGltZSBhY2Nlc3NlZDsKCiAgLyoqCiAgICogVGhlIHR5cGUgb2YgdGhlIHVuZGVybHlpbmcgZmlsZSBzeXN0ZW0gb2JqZWN0LgogICAqCiAgICogW0ZpbGVTeXN0ZW1FbnRpdHlUeXBlLm5vdEZvdW5kXSBpZiBbc3RhdF0gb3IgW3N0YXRTeW5jXSBmYWlsZWQuCiAgICovCiAgZmluYWwgRmlsZVN5c3RlbUVudGl0eVR5cGUgdHlwZTsKCiAgLyoqCiAgICogVGhlIG1vZGUgb2YgdGhlIGZpbGUgc3lzdGVtIG9iamVjdC4KICAgKgogICAqIFBlcm1pc3Npb25zIGFyZSBlbmNvZGVkIGluIHRoZSBsb3dlciAxNiBiaXRzIG9mIHRoaXMgbnVtYmVyLCBhbmQgY2FuIGJlCiAgICogZGVjb2RlZCB1c2luZyB0aGUgW21vZGVTdHJpbmddIGdldHRlci4KICAgKi8KICBmaW5hbCBpbnQgbW9kZTsKCiAgLyoqCiAgICogVGhlIHNpemUgb2YgdGhlIGZpbGUgc3lzdGVtIG9iamVjdC4KICAgKi8KICBmaW5hbCBpbnQgc2l6ZTsKCiAgRmlsZVN0YXQuX2ludGVybmFsKHRoaXMuY2hhbmdlZCwgdGhpcy5tb2RpZmllZCwgdGhpcy5hY2Nlc3NlZCwgdGhpcy50eXBlLAogICAgICB0aGlzLm1vZGUsIHRoaXMuc2l6ZSk7CgogIGNvbnN0IEZpbGVTdGF0Ll9pbnRlcm5hbE5vdEZvdW5kKCkKICAgICAgOiBjaGFuZ2VkID0gbnVsbCwKICAgICAgICBtb2RpZmllZCA9IG51bGwsCiAgICAgICAgYWNjZXNzZWQgPSBudWxsLAogICAgICAgIHR5cGUgPSBGaWxlU3lzdGVtRW50aXR5VHlwZS5ub3RGb3VuZCwKICAgICAgICBtb2RlID0gMCwKICAgICAgICBzaXplID0gLTE7CgogIGV4dGVybmFsIHN0YXRpYyBfc3RhdFN5bmMoX05hbWVzcGFjZSBuYW1lc3BhY2UsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogQ2FsbHMgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBgc3RhdCgpYCBmdW5jdGlvbiAob3IgZXF1aXZhbGVudCkgb24gW3BhdGhdLgogICAqCiAgICogUmV0dXJucyBhIFtGaWxlU3RhdF0gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRhdGEgcmV0dXJuZWQgYnkgYHN0YXQoKWAuCiAgICogSWYgdGhlIGNhbGwgZmFpbHMsIHJldHVybnMgYSBbRmlsZVN0YXRdIG9iamVjdCB3aXRoIFtGaWxlU3RhdC50eXBlXSBzZXQgdG8KICAgKiBbRmlsZVN5c3RlbUVudGl0eVR5cGUubm90Rm91bmRdIGFuZCB0aGUgb3RoZXIgZmllbGRzIGludmFsaWQuCiAgICovCiAgc3RhdGljIEZpbGVTdGF0IHN0YXRTeW5jKFN0cmluZyBwYXRoKSB7CiAgICBmaW5hbCBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfc3RhdFN5bmNJbnRlcm5hbChwYXRoKTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuc3RhdFN5bmMocGF0aCk7CiAgfQoKICBzdGF0aWMgRmlsZVN0YXQgX3N0YXRTeW5jSW50ZXJuYWwoU3RyaW5nIHBhdGgpIHsKICAgIC8vIFRyYWlsaW5nIHBhdGggaXMgbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzLgogICAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgICBwYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdHJpbVRyYWlsaW5nUGF0aFNlcGFyYXRvcnMocGF0aCk7CiAgICB9CiAgICB2YXIgZGF0YSA9IF9zdGF0U3luYyhfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIHBhdGgpOwogICAgaWYgKGRhdGEgaXMgT1NFcnJvcikgcmV0dXJuIEZpbGVTdGF0Ll9ub3RGb3VuZDsKICAgIHJldHVybiBuZXcgRmlsZVN0YXQuX2ludGVybmFsKAogICAgICAgIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChkYXRhW19jaGFuZ2VkVGltZV0pLAogICAgICAgIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChkYXRhW19tb2RpZmllZFRpbWVdKSwKICAgICAgICBuZXcgRGF0ZVRpbWUuZnJvbU1pbGxpc2Vjb25kc1NpbmNlRXBvY2goZGF0YVtfYWNjZXNzZWRUaW1lXSksCiAgICAgICAgRmlsZVN5c3RlbUVudGl0eVR5cGUuX2xvb2t1cChkYXRhW190eXBlXSksCiAgICAgICAgZGF0YVtfbW9kZV0sCiAgICAgICAgZGF0YVtfc2l6ZV0pOwogIH0KCiAgLyoqCiAgICogQXN5bmNocm9ub3VzbHkgY2FsbHMgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBgc3RhdCgpYCBmdW5jdGlvbiAob3IKICAgKiBlcXVpdmFsZW50KSBvbiBbcGF0aF0uCiAgICoKICAgKiBSZXR1cm5zIGEgW0Z1dHVyZV0gd2hpY2ggY29tcGxldGVzIHdpdGggdGhlIHNhbWUgcmVzdWx0cyBhcyBbc3RhdFN5bmNdLgogICAqLwogIHN0YXRpYyBGdXR1cmU8RmlsZVN0YXQ+IHN0YXQoU3RyaW5nIHBhdGgpIHsKICAgIGZpbmFsIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9zdGF0KHBhdGgpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5zdGF0KHBhdGgpOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxGaWxlU3RhdD4gX3N0YXQoU3RyaW5nIHBhdGgpIHsKICAgIC8vIFRyYWlsaW5nIHBhdGggaXMgbm90IHN1cHBvcnRlZCBvbiBXaW5kb3dzLgogICAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgICBwYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdHJpbVRyYWlsaW5nUGF0aFNlcGFyYXRvcnMocGF0aCk7CiAgICB9CiAgICByZXR1cm4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZShfSU9TZXJ2aWNlLmZpbGVTdGF0LCBbbnVsbCwgcGF0aF0pCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHJldHVybiBGaWxlU3RhdC5fbm90Rm91bmQ7CiAgICAgIH0KICAgICAgLy8gVW53cmFwIHRoZSByZWFsIGxpc3QgZnJvbSB0aGUgIkknbSBub3QgYW4gZXJyb3IiIHdyYXBwZXIuCiAgICAgIExpc3QgZGF0YSA9IHJlc3BvbnNlWzFdOwogICAgICByZXR1cm4gbmV3IEZpbGVTdGF0Ll9pbnRlcm5hbCgKICAgICAgICAgIG5ldyBEYXRlVGltZS5mcm9tTWlsbGlzZWNvbmRzU2luY2VFcG9jaChkYXRhW19jaGFuZ2VkVGltZV0pLAogICAgICAgICAgbmV3IERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKGRhdGFbX21vZGlmaWVkVGltZV0pLAogICAgICAgICAgbmV3IERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKGRhdGFbX2FjY2Vzc2VkVGltZV0pLAogICAgICAgICAgRmlsZVN5c3RlbUVudGl0eVR5cGUuX2xvb2t1cChkYXRhW190eXBlXSksCiAgICAgICAgICBkYXRhW19tb2RlXSwKICAgICAgICAgIGRhdGFbX3NpemVdKTsKICAgIH0pOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIiIiCkZpbGVTdGF0OiB0eXBlICR0eXBlCiAgICAgICAgICBjaGFuZ2VkICRjaGFuZ2VkCiAgICAgICAgICBtb2RpZmllZCAkbW9kaWZpZWQKICAgICAgICAgIGFjY2Vzc2VkICRhY2Nlc3NlZAogICAgICAgICAgbW9kZSAke21vZGVTdHJpbmcoKX0KICAgICAgICAgIHNpemUgJHNpemUiIiI7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG1vZGUgdmFsdWUgYXMgYSBodW1hbi1yZWFkYWJsZSBzdHJpbmcuCiAgICoKICAgKiBUaGUgc3RyaW5nIGlzIGluIHRoZSBmb3JtYXQgInJ3eHJ3eHJ3eCIsIHJlZmxlY3RpbmcgdGhlIHVzZXIsIGdyb3VwLCBhbmQKICAgKiB3b3JsZCBwZXJtaXNzaW9ucyB0byByZWFkLCB3cml0ZSwgYW5kIGV4ZWN1dGUgdGhlIGZpbGUgc3lzdGVtIG9iamVjdCwgd2l0aAogICAqICItIiByZXBsYWNpbmcgdGhlIGxldHRlciBmb3IgbWlzc2luZyBwZXJtaXNzaW9ucy4gIEV4dHJhIHBlcm1pc3Npb24gYml0cwogICAqIG1heSBiZSByZXByZXNlbnRlZCBieSBwcmVwZW5kaW5nICIoc3VpZCkiLCAiKGd1aWQpIiwgYW5kL29yICIoc3RpY2t5KSIgdG8KICAgKiB0aGUgbW9kZSBzdHJpbmcuCiAgICovCiAgU3RyaW5nIG1vZGVTdHJpbmcoKSB7CiAgICB2YXIgcGVybWlzc2lvbnMgPSBtb2RlICYgMHhGRkY7CiAgICB2YXIgY29kZXMgPSBjb25zdCBbJy0tLScsICctLXgnLCAnLXctJywgJy13eCcsICdyLS0nLCAnci14JywgJ3J3LScsICdyd3gnXTsKICAgIHZhciByZXN1bHQgPSBbXTsKICAgIGlmICgocGVybWlzc2lvbnMgJiAweDgwMCkgIT0gMCkgcmVzdWx0LmFkZCgiKHN1aWQpICIpOwogICAgaWYgKChwZXJtaXNzaW9ucyAmIDB4NDAwKSAhPSAwKSByZXN1bHQuYWRkKCIoZ3VpZCkgIik7CiAgICBpZiAoKHBlcm1pc3Npb25zICYgMHgyMDApICE9IDApIHJlc3VsdC5hZGQoIihzdGlja3kpICIpOwogICAgcmVzdWx0CiAgICAgIC4uYWRkKGNvZGVzWyhwZXJtaXNzaW9ucyA+PiA2KSAmIDB4N10pCiAgICAgIC4uYWRkKGNvZGVzWyhwZXJtaXNzaW9ucyA+PiAzKSAmIDB4N10pCiAgICAgIC4uYWRkKGNvZGVzW3Blcm1pc3Npb25zICYgMHg3XSk7CiAgICByZXR1cm4gcmVzdWx0LmpvaW4oKTsKICB9Cn0KCi8qKgogKiBUaGUgY29tbW9uIHN1cGVyIGNsYXNzIGZvciBbRmlsZV0sIFtEaXJlY3RvcnldLCBhbmQgW0xpbmtdIG9iamVjdHMuCiAqCiAqIFtGaWxlU3lzdGVtRW50aXR5XSBvYmplY3RzIGFyZSByZXR1cm5lZCBmcm9tIGRpcmVjdG9yeSBsaXN0aW5nCiAqIG9wZXJhdGlvbnMuIFRvIGRldGVybWluZSBpZiBhIEZpbGVTeXN0ZW1FbnRpdHkgaXMgYSBbRmlsZV0sIGEKICogW0RpcmVjdG9yeV0sIG9yIGEgW0xpbmtdIHBlcmZvcm0gYSB0eXBlIGNoZWNrOgogKgogKiAgICAgaWYgKGVudGl0eSBpcyBGaWxlKSAoZW50aXR5IGFzIEZpbGUpLnJlYWRBc1N0cmluZ1N5bmMoKTsKICoKICogWW91IGNhbiBhbHNvIHVzZSB0aGUgW3R5cGVdIG9yIFt0eXBlU3luY10gbWV0aG9kcyB0byBkZXRlcm1pbmUKICogdGhlIHR5cGUgb2YgYSBmaWxlIHN5c3RlbSBvYmplY3QuCiAqCiAqIE1vc3QgbWV0aG9kcyBpbiB0aGlzIGNsYXNzIG9jY3VyIGluIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcGFpcnMsCiAqIGZvciBleGFtcGxlLCBbZXhpc3RzXSBhbmQgW2V4aXN0c1N5bmNdLgogKiBVbmxlc3MgeW91IGhhdmUgYSBzcGVjaWZpYyByZWFzb24gZm9yIHVzaW5nIHRoZSBzeW5jaHJvbm91cyB2ZXJzaW9uCiAqIG9mIGEgbWV0aG9kLCBwcmVmZXIgdGhlIGFzeW5jaHJvbm91cyB2ZXJzaW9uIHRvIGF2b2lkIGJsb2NraW5nIHlvdXIgcHJvZ3JhbS4KICoKICogSGVyZSdzIHRoZSBleGlzdHMgbWV0aG9kIGluIGFjdGlvbjoKICoKICogICAgIGVudGl0eS5leGlzdHMoKS50aGVuKChpc1RoZXJlKSB7CiAqICAgICAgIGlzVGhlcmUgPyBwcmludCgnZXhpc3RzJykgOiBwcmludCgnbm9uLWV4aXN0ZW50Jyk7CiAqICAgICB9KTsKICoKICoKICogIyMgT3RoZXIgcmVzb3VyY2VzCiAqCiAqICogW0RhcnQgYnkKICogICBFeGFtcGxlXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZGFydC1ieS1leGFtcGxlLyNmaWxlcy1kaXJlY3Rvcmllcy1hbmQtc3ltbGlua3MpCiAqICAgcHJvdmlkZXMgYWRkaXRpb25hbCB0YXNrLW9yaWVudGVkIGNvZGUgc2FtcGxlcyB0aGF0IHNob3cgaG93IHRvIHVzZSB2YXJpb3VzCiAqICAgQVBJIGZyb20gdGhlIFtEaXJlY3RvcnldIGNsYXNzIGFuZCB0aGUgW0ZpbGVdIGNsYXNzLCBib3RoIHN1YmNsYXNzZXMgb2YKICogICBGaWxlU3lzdGVtRW50aXR5LgogKgogKiAqIFtJL08gZm9yIENvbW1hbmQtTGluZQogKiAgIEFwcHNdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY2gwMy5odG1sI2RhcnRpby0tLWlvLWZvci1jb21tYW5kLWxpbmUtYXBwcyksCiAqICAgYSBzZWN0aW9uIGZyb20gX0EgVG91ciBvZiB0aGUgRGFydCBMaWJyYXJpZXNfIGNvdmVycyBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCiAqCiAqICogW1dyaXRlIENvbW1hbmQtTGluZSBBcHBzXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy90dXRvcmlhbHMvY21kbGluZS8pLAogKiAgIGEgdHV0b3JpYWwgYWJvdXQgd3JpdGluZyBjb21tYW5kLWxpbmUgYXBwcywgaW5jbHVkZXMgaW5mb3JtYXRpb24gYWJvdXQKICogICBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuCiAqLwphYnN0cmFjdCBjbGFzcyBGaWxlU3lzdGVtRW50aXR5IHsKICBTdHJpbmcgX3BhdGg7CiAgVWludDhMaXN0IF9yYXdQYXRoOwoKICBTdHJpbmcgZ2V0IHBhdGg7CgogIC8qKgogICAqIFJldHVybnMgYSBbVXJpXSByZXByZXNlbnRpbmcgdGhlIGZpbGUgc3lzdGVtIGVudGl0eSdzIGxvY2F0aW9uLgogICAqCiAgICogVGhlIHJldHVybmVkIFVSSSdzIHNjaGVtZSBpcyBhbHdheXMgImZpbGUiIGlmIHRoZSBlbnRpdHkncyBbcGF0aF0gaXMKICAgKiBhYnNvbHV0ZSwgb3RoZXJ3aXNlIHRoZSBzY2hlbWUgd2lsbCBiZSBlbXB0eS4KICAgKi8KICBVcmkgZ2V0IHVyaSA9PiBuZXcgVXJpLmZpbGUocGF0aCk7CgogIC8qKgogICAqIENoZWNrcyB3aGV0aGVyIHRoZSBmaWxlIHN5c3RlbSBlbnRpdHkgd2l0aCB0aGlzIHBhdGggZXhpc3RzLiBSZXR1cm5zCiAgICogYSBbOkZ1dHVyZTxib29sPjpdIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIHJlc3VsdC4KICAgKgogICAqIFNpbmNlIEZpbGVTeXN0ZW1FbnRpdHkgaXMgYWJzdHJhY3QsIGV2ZXJ5IEZpbGVTeXN0ZW1FbnRpdHkgb2JqZWN0CiAgICogaXMgYWN0dWFsbHkgYW4gaW5zdGFuY2Ugb2Ygb25lIG9mIHRoZSBzdWJjbGFzc2VzIFtGaWxlXSwKICAgKiBbRGlyZWN0b3J5XSwgYW5kIFtMaW5rXS4gIENhbGxpbmcgW2V4aXN0c10gb24gYW4gaW5zdGFuY2Ugb2Ygb25lCiAgICogb2YgdGhlc2Ugc3ViY2xhc3NlcyBjaGVja3Mgd2hldGhlciB0aGUgb2JqZWN0IGV4aXN0cyBpbiB0aGUgZmlsZQogICAqIHN5c3RlbSBvYmplY3QgZXhpc3RzIGFuZCBpcyBvZiB0aGUgY29ycmVjdCB0eXBlIChmaWxlLCBkaXJlY3RvcnksCiAgICogb3IgbGluaykuICBUbyBjaGVjayB3aGV0aGVyIGEgcGF0aCBwb2ludHMgdG8gYW4gb2JqZWN0IG9uIHRoZQogICAqIGZpbGUgc3lzdGVtLCByZWdhcmRsZXNzIG9mIHRoZSBvYmplY3QncyB0eXBlLCB1c2UgdGhlIFt0eXBlXQogICAqIHN0YXRpYyBtZXRob2QuCiAgICoKICAgKi8KICBGdXR1cmU8Ym9vbD4gZXhpc3RzKCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY2hlY2tzIHdoZXRoZXIgdGhlIGZpbGUgc3lzdGVtIGVudGl0eSB3aXRoIHRoaXMgcGF0aAogICAqIGV4aXN0cy4KICAgKgogICAqIFNpbmNlIEZpbGVTeXN0ZW1FbnRpdHkgaXMgYWJzdHJhY3QsIGV2ZXJ5IEZpbGVTeXN0ZW1FbnRpdHkgb2JqZWN0CiAgICogaXMgYWN0dWFsbHkgYW4gaW5zdGFuY2Ugb2Ygb25lIG9mIHRoZSBzdWJjbGFzc2VzIFtGaWxlXSwKICAgKiBbRGlyZWN0b3J5XSwgYW5kIFtMaW5rXS4gIENhbGxpbmcgW2V4aXN0c1N5bmNdIG9uIGFuIGluc3RhbmNlIG9mCiAgICogb25lIG9mIHRoZXNlIHN1YmNsYXNzZXMgY2hlY2tzIHdoZXRoZXIgdGhlIG9iamVjdCBleGlzdHMgaW4gdGhlCiAgICogZmlsZSBzeXN0ZW0gb2JqZWN0IGV4aXN0cyBhbmQgaXMgb2YgdGhlIGNvcnJlY3QgdHlwZSAoZmlsZSwKICAgKiBkaXJlY3RvcnksIG9yIGxpbmspLiAgVG8gY2hlY2sgd2hldGhlciBhIHBhdGggcG9pbnRzIHRvIGFuIG9iamVjdAogICAqIG9uIHRoZSBmaWxlIHN5c3RlbSwgcmVnYXJkbGVzcyBvZiB0aGUgb2JqZWN0J3MgdHlwZSwgdXNlIHRoZQogICAqIFt0eXBlU3luY10gc3RhdGljIG1ldGhvZC4KICAgKi8KICBib29sIGV4aXN0c1N5bmMoKTsKCiAgLyoqCiAgICogUmVuYW1lcyB0aGlzIGZpbGUgc3lzdGVtIGVudGl0eS4KICAgKgogICAqIFJldHVybnMgYSBgRnV0dXJlPEZpbGVTeXN0ZW1FbnRpdHk+YCB0aGF0IGNvbXBsZXRlcyB3aXRoIGEKICAgKiBbRmlsZVN5c3RlbUVudGl0eV0gaW5zdGFuY2UgZm9yIHRoZSByZW5hbWVkIGZpbGUgc3lzdGVtIGVudGl0eS4KICAgKgogICAqIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGVudGl0eSBvZiB0aGUgc2FtZSB0eXBlLCB0aGF0IGVudGl0eQogICAqIGlzIHJlcGxhY2VkLiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBlbnRpdHkgb2YgYSBkaWZmZXJlbnQKICAgKiB0eXBlLCB0aGUgb3BlcmF0aW9uIGZhaWxzIGFuZCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGV4Y2VwdGlvbi4KICAgKi8KICBGdXR1cmU8RmlsZVN5c3RlbUVudGl0eT4gcmVuYW1lKFN0cmluZyBuZXdQYXRoKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSByZW5hbWVzIHRoaXMgZmlsZSBzeXN0ZW0gZW50aXR5LgogICAqCiAgICogUmV0dXJucyBhIFtGaWxlU3lzdGVtRW50aXR5XSBpbnN0YW5jZSBmb3IgdGhlIHJlbmFtZWQgZW50aXR5LgogICAqCiAgICogSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZW50aXR5IG9mIHRoZSBzYW1lIHR5cGUsIHRoYXQgZW50aXR5CiAgICogaXMgcmVwbGFjZWQuIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGVudGl0eSBvZiBhIGRpZmZlcmVudAogICAqIHR5cGUsIHRoZSBvcGVyYXRpb24gZmFpbHMgYW5kIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICovCiAgRmlsZVN5c3RlbUVudGl0eSByZW5hbWVTeW5jKFN0cmluZyBuZXdQYXRoKTsKCiAgLyoqCiAgICogUmVzb2x2ZXMgdGhlIHBhdGggb2YgYSBmaWxlIHN5c3RlbSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlCiAgICogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgKgogICAqIFJlc29sdmVzIGFsbCBzeW1ib2xpYyBsaW5rcyBvbiB0aGUgcGF0aCBhbmQgcmVzb2x2ZXMgYWxsIGAuLmAgYW5kIGAuYCBwYXRoCiAgICogc2VnbWVudHMuCiAgICoKICAgKiBbcmVzb2x2ZVN5bWJvbGljTGlua3NdIHVzZXMgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBuYXRpdmUKICAgKiBmaWxlIHN5c3RlbSBBUEkgdG8gcmVzb2x2ZSB0aGUgcGF0aCwgdXNpbmcgdGhlIGByZWFscGF0aGAgZnVuY3Rpb24KICAgKiBvbiBsaW51eCBhbmQgT1MgWCwgYW5kIHRoZSBgR2V0RmluYWxQYXRoTmFtZUJ5SGFuZGxlYCBmdW5jdGlvbiBvbgogICAqIFdpbmRvd3MuIElmIHRoZSBwYXRoIGRvZXMgbm90IHBvaW50IHRvIGFuIGV4aXN0aW5nIGZpbGUgc3lzdGVtIG9iamVjdCwKICAgKiBgcmVzb2x2ZVN5bWJvbGljTGlua3NgIHRocm93cyBhIGBGaWxlU3lzdGVtRXhjZXB0aW9uYC4KICAgKgogICAqIE9uIFdpbmRvd3MgdGhlIGAuLmAgc2VnbWVudHMgYXJlIHJlc29sdmVkIF9iZWZvcmVfIHJlc29sdmluZyB0aGUgc3ltYm9saWMKICAgKiBsaW5rLCBhbmQgb24gb3RoZXIgcGxhdGZvcm1zIHRoZSBzeW1ib2xpYyBsaW5rcyBhcmUgX3Jlc29sdmVkIHRvIHRoZWlyCiAgICogdGFyZ2V0XyBiZWZvcmUgYXBwbHlpbmcgYSBgLi5gIHRoYXQgZm9sbG93cy4KICAgKgogICAqIFRvIGVuc3VyZSB0aGUgc2FtZSBiZWhhdmlvciBvbiBhbGwgcGxhdGZvcm1zIHJlc29sdmUgYC4uYCBzZWdtZW50cyBiZWZvcmUKICAgKiBjYWxsaW5nIGByZXNvbHZlU3ltYm9saWNMaW5rc2AuIE9uZSB3YXkgb2YgZG9pbmcgdGhpcyBpcyB3aXRoIHRoZSBgVXJpYAogICAqIGNsYXNzOgogICAqCiAgICogICAgIHZhciBwYXRoID0gVXJpLnBhcnNlKCcuJykucmVzb2x2ZVVyaShuZXcgVXJpLmZpbGUoaW5wdXQpKS50b0ZpbGVQYXRoKCk7CiAgICogICAgIGlmIChwYXRoID09ICcnKSBwYXRoID0gJy4nOwogICAqICAgICBuZXcgRmlsZShwYXRoKS5yZXNvbHZlU3ltYm9saWNMaW5rcygpLnRoZW4oKHJlc29sdmVkKSB7CiAgICogICAgICAgcHJpbnQocmVzb2x2ZWQpOwogICAqICAgICB9KTsKICAgKgogICAqIHNpbmNlIGBVcmkucmVzb2x2ZWAgcmVtb3ZlcyBgLi5gIHNlZ21lbnRzLiBUaGlzIHdpbGwgcmVzdWx0IGluIHRoZSBXaW5kb3dzCiAgICogYmVoYXZpb3IuCiAgICovCiAgRnV0dXJlPFN0cmluZz4gcmVzb2x2ZVN5bWJvbGljTGlua3MoKSB7CiAgICByZXR1cm4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmZpbGVSZXNvbHZlU3ltYm9saWNMaW5rcywgW251bGwsIF9yYXdQYXRoXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZSgKICAgICAgICAgICAgcmVzcG9uc2UsICJDYW5ub3QgcmVzb2x2ZSBzeW1ib2xpYyBsaW5rcyIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0pOwogIH0KCiAgLyoqCiAgICogUmVzb2x2ZXMgdGhlIHBhdGggb2YgYSBmaWxlIHN5c3RlbSBvYmplY3QgcmVsYXRpdmUgdG8gdGhlCiAgICogY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeS4KICAgKgogICAqIFJlc29sdmVzIGFsbCBzeW1ib2xpYyBsaW5rcyBvbiB0aGUgcGF0aCBhbmQgcmVzb2x2ZXMgYWxsIGAuLmAgYW5kIGAuYCBwYXRoCiAgICogc2VnbWVudHMuCiAgICoKICAgKiBbcmVzb2x2ZVN5bWJvbGljTGlua3NTeW5jXSB1c2VzIHRoZSBvcGVyYXRpbmcgc3lzdGVtJ3MgbmF0aXZlCiAgICogZmlsZSBzeXN0ZW0gQVBJIHRvIHJlc29sdmUgdGhlIHBhdGgsIHVzaW5nIHRoZSBgcmVhbHBhdGhgIGZ1bmN0aW9uCiAgICogb24gbGludXggYW5kIE9TIFgsIGFuZCB0aGUgYEdldEZpbmFsUGF0aE5hbWVCeUhhbmRsZWAgZnVuY3Rpb24gb24KICAgKiBXaW5kb3dzLiBJZiB0aGUgcGF0aCBkb2VzIG5vdCBwb2ludCB0byBhbiBleGlzdGluZyBmaWxlIHN5c3RlbSBvYmplY3QsCiAgICogYHJlc29sdmVTeW1ib2xpY0xpbmtzU3luY2AgdGhyb3dzIGEgYEZpbGVTeXN0ZW1FeGNlcHRpb25gLgogICAqCiAgICogT24gV2luZG93cyB0aGUgYC4uYCBzZWdtZW50cyBhcmUgcmVzb2x2ZWQgX2JlZm9yZV8gcmVzb2x2aW5nIHRoZSBzeW1ib2xpYwogICAqIGxpbmssIGFuZCBvbiBvdGhlciBwbGF0Zm9ybXMgdGhlIHN5bWJvbGljIGxpbmtzIGFyZSBfcmVzb2x2ZWQgdG8gdGhlaXIKICAgKiB0YXJnZXRfIGJlZm9yZSBhcHBseWluZyBhIGAuLmAgdGhhdCBmb2xsb3dzLgogICAqCiAgICogVG8gZW5zdXJlIHRoZSBzYW1lIGJlaGF2aW9yIG9uIGFsbCBwbGF0Zm9ybXMgcmVzb2x2ZSBgLi5gIHNlZ21lbnRzIGJlZm9yZQogICAqIGNhbGxpbmcgYHJlc29sdmVTeW1ib2xpY0xpbmtzU3luY2AuIE9uZSB3YXkgb2YgZG9pbmcgdGhpcyBpcyB3aXRoIHRoZSBgVXJpYAogICAqIGNsYXNzOgogICAqCiAgICogICAgIHZhciBwYXRoID0gVXJpLnBhcnNlKCcuJykucmVzb2x2ZVVyaShuZXcgVXJpLmZpbGUoaW5wdXQpKS50b0ZpbGVQYXRoKCk7CiAgICogICAgIGlmIChwYXRoID09ICcnKSBwYXRoID0gJy4nOwogICAqICAgICB2YXIgcmVzb2x2ZWQgPSBuZXcgRmlsZShwYXRoKS5yZXNvbHZlU3ltYm9saWNMaW5rc1N5bmMoKTsKICAgKiAgICAgcHJpbnQocmVzb2x2ZWQpOwogICAqCiAgICogc2luY2UgYFVyaS5yZXNvbHZlYCByZW1vdmVzIGAuLmAgc2VnbWVudHMuIFRoaXMgd2lsbCByZXN1bHQgaW4gdGhlIFdpbmRvd3MKICAgKiBiZWhhdmlvci4KICAgKi8KICBTdHJpbmcgcmVzb2x2ZVN5bWJvbGljTGlua3NTeW5jKCkgewogICAgdmFyIHJlc3VsdCA9IF9yZXNvbHZlU3ltYm9saWNMaW5rcyhfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIF90aHJvd0lmRXJyb3IocmVzdWx0LCAiQ2Fubm90IHJlc29sdmUgc3ltYm9saWMgbGlua3MiLCBwYXRoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBDYWxscyB0aGUgb3BlcmF0aW5nIHN5c3RlbSdzIHN0YXQoKSBmdW5jdGlvbiBvbiB0aGUgW3BhdGhdIG9mIHRoaXMKICAgKiBbRmlsZVN5c3RlbUVudGl0eV0uCiAgICoKICAgKiBJZGVudGljYWwgdG8gWzpGaWxlU3RhdC5zdGF0KHRoaXMucGF0aCk6XS4KICAgKgogICAqIFJldHVybnMgYSBbOkZ1dHVyZTxGaWxlU3RhdD46XSBvYmplY3QgY29udGFpbmluZyB0aGUgZGF0YSByZXR1cm5lZCBieQogICAqIHN0YXQoKS4KICAgKgogICAqIElmIHRoZSBjYWxsIGZhaWxzLCBjb21wbGV0ZXMgdGhlIGZ1dHVyZSB3aXRoIGEgW0ZpbGVTdGF0XSBvYmplY3QKICAgKiB3aXRoIGAudHlwZWAgc2V0IHRvIFtGaWxlU3lzdGVtRW50aXR5VHlwZS5ub3RGb3VuZF0gYW5kIHRoZSBvdGhlciBmaWVsZHMKICAgKiBpbnZhbGlkLgogICAqLwogIEZ1dHVyZTxGaWxlU3RhdD4gc3RhdCgpID0+IEZpbGVTdGF0LnN0YXQocGF0aCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY2FsbHMgdGhlIG9wZXJhdGluZyBzeXN0ZW0ncyBzdGF0KCkgZnVuY3Rpb24gb24gdGhlCiAgICogW3BhdGhdIG9mIHRoaXMgW0ZpbGVTeXN0ZW1FbnRpdHldLgogICAqCiAgICogSWRlbnRpY2FsIHRvIFs6RmlsZVN0YXQuc3RhdFN5bmModGhpcy5wYXRoKTpdLgogICAqCiAgICogUmV0dXJucyBhIFtGaWxlU3RhdF0gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGRhdGEgcmV0dXJuZWQgYnkgc3RhdCgpLgogICAqCiAgICogSWYgdGhlIGNhbGwgZmFpbHMsIHJldHVybnMgYSBbRmlsZVN0YXRdIG9iamVjdCB3aXRoIGAudHlwZWAgc2V0IHRvCiAgICogW0ZpbGVTeXN0ZW1FbnRpdHlUeXBlLm5vdEZvdW5kXSBhbmQgdGhlIG90aGVyIGZpZWxkcyBpbnZhbGlkLgogICAqLwogIEZpbGVTdGF0IHN0YXRTeW5jKCkgPT4gRmlsZVN0YXQuc3RhdFN5bmMocGF0aCk7CgogIC8qKgogICAqIERlbGV0ZXMgdGhpcyBbRmlsZVN5c3RlbUVudGl0eV0uCiAgICoKICAgKiBJZiB0aGUgW0ZpbGVTeXN0ZW1FbnRpdHldIGlzIGEgZGlyZWN0b3J5LCBhbmQgaWYgW3JlY3Vyc2l2ZV0gaXMgZmFsc2UsCiAgICogdGhlIGRpcmVjdG9yeSBtdXN0IGJlIGVtcHR5LiBPdGhlcndpc2UsIGlmIFtyZWN1cnNpdmVdIGlzIHRydWUsIHRoZQogICAqIGRpcmVjdG9yeSBhbmQgYWxsIHN1Yi1kaXJlY3RvcmllcyBhbmQgZmlsZXMgaW4gdGhlIGRpcmVjdG9yaWVzIGFyZQogICAqIGRlbGV0ZWQuIExpbmtzIGFyZSBub3QgZm9sbG93ZWQgd2hlbiBkZWxldGluZyByZWN1cnNpdmVseS4gT25seSB0aGUgbGluawogICAqIGlzIGRlbGV0ZWQsIG5vdCBpdHMgdGFyZ2V0LgogICAqCiAgICogSWYgW3JlY3Vyc2l2ZV0gaXMgdHJ1ZSwgdGhlIFtGaWxlU3lzdGVtRW50aXR5XSBpcyBkZWxldGVkIGV2ZW4gaWYgdGhlIHR5cGUKICAgKiBvZiB0aGUgW0ZpbGVTeXN0ZW1FbnRpdHldIGRvZXNuJ3QgbWF0Y2ggdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGUgc3lzdGVtLgogICAqIFRoaXMgYmVoYXZpb3IgYWxsb3dzIFtkZWxldGVdIHRvIGJlIHVzZWQgdG8gdW5jb25kaXRpb25hbGx5IGRlbGV0ZSBhbnkgZmlsZQogICAqIHN5c3RlbSBvYmplY3QuCiAgICoKICAgKiBSZXR1cm5zIGEgWzpGdXR1cmU8RmlsZVN5c3RlbUVudGl0eT46XSB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoaXMKICAgKiBbRmlsZVN5c3RlbUVudGl0eV0gd2hlbiB0aGUgZGVsZXRpb24gaXMgZG9uZS4gSWYgdGhlIFtGaWxlU3lzdGVtRW50aXR5XQogICAqIGNhbm5vdCBiZSBkZWxldGVkLCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoIGFuIGV4Y2VwdGlvbi4KICAgKi8KICBGdXR1cmU8RmlsZVN5c3RlbUVudGl0eT4gZGVsZXRlKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSA9PgogICAgICBfZGVsZXRlKHJlY3Vyc2l2ZTogcmVjdXJzaXZlKTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBkZWxldGVzIHRoaXMgW0ZpbGVTeXN0ZW1FbnRpdHldLgogICAqCiAgICogSWYgdGhlIFtGaWxlU3lzdGVtRW50aXR5XSBpcyBhIGRpcmVjdG9yeSwgYW5kIGlmIFtyZWN1cnNpdmVdIGlzIGZhbHNlLAogICAqIHRoZSBkaXJlY3RvcnkgbXVzdCBiZSBlbXB0eS4gT3RoZXJ3aXNlLCBpZiBbcmVjdXJzaXZlXSBpcyB0cnVlLCB0aGUKICAgKiBkaXJlY3RvcnkgYW5kIGFsbCBzdWItZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGluIHRoZSBkaXJlY3RvcmllcyBhcmUKICAgKiBkZWxldGVkLiBMaW5rcyBhcmUgbm90IGZvbGxvd2VkIHdoZW4gZGVsZXRpbmcgcmVjdXJzaXZlbHkuIE9ubHkgdGhlIGxpbmsKICAgKiBpcyBkZWxldGVkLCBub3QgaXRzIHRhcmdldC4KICAgKgogICAqIElmIFtyZWN1cnNpdmVdIGlzIHRydWUsIHRoZSBbRmlsZVN5c3RlbUVudGl0eV0gaXMgZGVsZXRlZCBldmVuIGlmIHRoZSB0eXBlCiAgICogb2YgdGhlIFtGaWxlU3lzdGVtRW50aXR5XSBkb2Vzbid0IG1hdGNoIHRoZSBjb250ZW50IG9mIHRoZSBmaWxlIHN5c3RlbS4KICAgKiBUaGlzIGJlaGF2aW9yIGFsbG93cyBbZGVsZXRlU3luY10gdG8gYmUgdXNlZCB0byB1bmNvbmRpdGlvbmFsbHkgZGVsZXRlIGFueQogICAqIGZpbGUgc3lzdGVtIG9iamVjdC4KICAgKgogICAqIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIFtGaWxlU3lzdGVtRW50aXR5XSBjYW5ub3QgYmUgZGVsZXRlZC4KICAgKi8KICB2b2lkIGRlbGV0ZVN5bmMoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pID0+IF9kZWxldGVTeW5jKHJlY3Vyc2l2ZTogcmVjdXJzaXZlKTsKCiAgLyoqCiAgICogU3RhcnQgd2F0Y2hpbmcgdGhlIFtGaWxlU3lzdGVtRW50aXR5XSBmb3IgY2hhbmdlcy4KICAgKgogICAqIFRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHBsYXRmb3JtLWRlcGVuZGVudCBldmVudC1iYXNlZCBBUElzIGZvciByZWNlaXZpbmcKICAgKiBmaWxlLXN5c3RlbSBub3RpZmljYXRpb25zLCB0aHVzIGJlaGF2aW9yIGRlcGVuZHMgb24gdGhlIHBsYXRmb3JtLgogICAqCiAgICogICAqIGBXaW5kb3dzYDogVXNlcyBgUmVhZERpcmVjdG9yeUNoYW5nZXNXYC4gVGhlIGltcGxlbWVudGF0aW9uIG9ubHkKICAgKiAgICAgc3VwcG9ydHMgd2F0Y2hpbmcgZGlyZWN0b3JpZXMuIFJlY3Vyc2l2ZSB3YXRjaGluZyBpcyBzdXBwb3J0ZWQuCiAgICogICAqIGBMaW51eGA6IFVzZXMgYGlub3RpZnlgLiBUaGUgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgd2F0Y2hpbmcgYm90aAogICAqICAgICBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuIFJlY3Vyc2l2ZSB3YXRjaGluZyBpcyBub3Qgc3VwcG9ydGVkLgogICAqICAgICBOb3RlOiBXaGVuIHdhdGNoaW5nIGZpbGVzIGRpcmVjdGx5LCBkZWxldGUgZXZlbnRzIG1pZ2h0IG5vdCBoYXBwZW4KICAgKiAgICAgYXMgZXhwZWN0ZWQuCiAgICogICAqIGBPUyBYYDogVXNlcyBgRlNFdmVudHNgLiBUaGUgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgd2F0Y2hpbmcgYm90aAogICAqICAgICBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuIFJlY3Vyc2l2ZSB3YXRjaGluZyBpcyBzdXBwb3J0ZWQuCiAgICoKICAgKiBUaGUgc3lzdGVtIHdpbGwgc3RhcnQgbGlzdGVuaW5nIGZvciBldmVudHMgb25jZSB0aGUgcmV0dXJuZWQgW1N0cmVhbV0gaXMKICAgKiBiZWluZyBsaXN0ZW5lZCB0bywgbm90IHdoZW4gdGhlIGNhbGwgdG8gW3dhdGNoXSBpcyBpc3N1ZWQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgaXMgYW4gZW5kbGVzcyBicm9hZGNhc3QgW1N0cmVhbV0sIHRoYXQgb25seSBzdG9wcyB3aGVuCiAgICogb25lIG9mIHRoZSBmb2xsb3dpbmcgaGFwcGVuczoKICAgKgogICAqICAgKiBUaGUgW1N0cmVhbV0gaXMgY2FuY2VsZWQsIGUuZy4gYnkgY2FsbGluZyBgY2FuY2VsYCBvbiB0aGUKICAgKiAgICAgIFtTdHJlYW1TdWJzY3JpcHRpb25dLgogICAqICAgKiBUaGUgW0ZpbGVTeXN0ZW1FbnRpdHldIGJlaW5nIHdhdGNoZXMsIGlzIGRlbGV0ZWQuCiAgICoKICAgKiBVc2UgYGV2ZW50c2AgdG8gc3BlY2lmeSB3aGF0IGV2ZW50cyB0byBsaXN0ZW4gZm9yLiBUaGUgY29uc3RhbnRzIGluCiAgICogW0ZpbGVTeXN0ZW1FdmVudF0gY2FuIGJlIG9yJ2VkIHRvZ2V0aGVyIHRvIG1peCBldmVudHMuIERlZmF1bHQgaXMKICAgKiBbRmlsZVN5c3RlbUV2ZW50LkFMTF0uCiAgICoKICAgKiBBIG1vdmUgZXZlbnQgbWF5IGJlIHJlcG9ydGVkIGFzIHNlcGVyYXRlIGRlbGV0ZSBhbmQgY3JlYXRlIGV2ZW50cy4KICAgKi8KICBTdHJlYW08RmlsZVN5c3RlbUV2ZW50PiB3YXRjaCgKICAgICAge2ludCBldmVudHM6IEZpbGVTeXN0ZW1FdmVudC5hbGwsIGJvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIC8vIEZJWE1FKGJrb255aSk6IGZpbmQgYSB3YXkgdG8gZG8gdGhpcyB1c2luZyB0aGUgcmF3IHBhdGguCiAgICBmaW5hbCBTdHJpbmcgdHJpbW1lZFBhdGggPSBfdHJpbVRyYWlsaW5nUGF0aFNlcGFyYXRvcnMocGF0aCk7CiAgICBmaW5hbCBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBfRmlsZVN5c3RlbVdhdGNoZXIuX3dhdGNoKHRyaW1tZWRQYXRoLCBldmVudHMsIHJlY3Vyc2l2ZSk7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLmZzV2F0Y2godHJpbW1lZFBhdGgsIGV2ZW50cywgcmVjdXJzaXZlKTsKICB9CgogIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5PiBfZGVsZXRlKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KTsKICB2b2lkIF9kZWxldGVTeW5jKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KTsKCiAgc3RhdGljIEZ1dHVyZTxib29sPiBfaWRlbnRpY2FsKFN0cmluZyBwYXRoMSwgU3RyaW5nIHBhdGgyKSB7CiAgICByZXR1cm4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmZpbGVJZGVudGljYWwsIFtudWxsLCBwYXRoMSwgcGF0aDJdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLAogICAgICAgICAgICAiRXJyb3IgaW4gRmlsZVN5c3RlbUVudGl0eS5pZGVudGljYWwoJHBhdGgxLCAkcGF0aDIpIiwgIiIpOwogICAgICB9CiAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0pOwogIH0KCiAgLyoqCiAgICogQ2hlY2tzIHdoZXRoZXIgdHdvIHBhdGhzIHJlZmVyIHRvIHRoZSBzYW1lIG9iamVjdCBpbiB0aGUKICAgKiBmaWxlIHN5c3RlbS4KICAgKgogICAqIFJldHVybnMgYSBbOkZ1dHVyZTxib29sPjpdIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIHJlc3VsdC4KICAgKgogICAqIENvbXBhcmluZyBhIGxpbmsgdG8gaXRzIHRhcmdldCByZXR1cm5zIGZhbHNlLCBhcyBkb2VzIGNvbXBhcmluZyB0d28gbGlua3MKICAgKiB0aGF0IHBvaW50IHRvIHRoZSBzYW1lIHRhcmdldC4gIFRvIGNoZWNrIHRoZSB0YXJnZXQgb2YgYSBsaW5rLCB1c2UKICAgKiBMaW5rLnRhcmdldCBleHBsaWNpdGx5IHRvIGZldGNoIGl0LiAgRGlyZWN0b3J5IGxpbmtzIGFwcGVhcmluZwogICAqIGluc2lkZSBhIHBhdGggYXJlIGZvbGxvd2VkLCB0aG91Z2gsIHRvIGZpbmQgdGhlIGZpbGUgc3lzdGVtIG9iamVjdC4KICAgKgogICAqIENvbXBsZXRlcyB0aGUgcmV0dXJuZWQgRnV0dXJlIHdpdGggYW4gZXJyb3IgaWYgb25lIG9mIHRoZSBwYXRocyBwb2ludHMKICAgKiB0byBhbiBvYmplY3QgdGhhdCBkb2VzIG5vdCBleGlzdC4KICAgKi8KICBzdGF0aWMgRnV0dXJlPGJvb2w+IGlkZW50aWNhbChTdHJpbmcgcGF0aDEsIFN0cmluZyBwYXRoMikgewogICAgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2lkZW50aWNhbChwYXRoMSwgcGF0aDIpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5mc2VJZGVudGljYWwocGF0aDEsIHBhdGgyKTsKICB9CgogIHN0YXRpYyBmaW5hbCBSZWdFeHAgX2Fic29sdXRlV2luZG93c1BhdGhQYXR0ZXJuID0KICAgICAgbmV3IFJlZ0V4cChyJ14oXFxcXHxbYS16QS1aXTpbL1xcXSknKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIFtib29sXSBpbmRpY2F0aW5nIHdoZXRoZXIgdGhpcyBvYmplY3QncyBwYXRoIGlzIGFic29sdXRlLgogICAqCiAgICogT24gV2luZG93cywgYSBwYXRoIGlzIGFic29sdXRlIGlmIGl0IHN0YXJ0cyB3aXRoIFxcXFwgb3IgYSBkcml2ZSBsZXR0ZXIKICAgKiBiZXR3ZWVuIGEgYW5kIHogKHVwcGVyIG9yIGxvd2VyIGNhc2UpIGZvbGxvd2VkIGJ5IDpcXCBvciA6Ly4KICAgKiBPbiBub24tV2luZG93cywgYSBwYXRoIGlzIGFic29sdXRlIGlmIGl0IHN0YXJ0cyB3aXRoIC8uCiAgICovCiAgYm9vbCBnZXQgaXNBYnNvbHV0ZSB7CiAgICBpZiAoUGxhdGZvcm0uaXNXaW5kb3dzKSB7CiAgICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoX2Fic29sdXRlV2luZG93c1BhdGhQYXR0ZXJuKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBwYXRoLnN0YXJ0c1dpdGgoJy8nKTsKICAgIH0KICB9CgogIC8qKgogICAqIFJldHVybnMgYSBbRmlsZVN5c3RlbUVudGl0eV0gd2hvc2UgcGF0aCBpcyB0aGUgYWJzb2x1dGUgcGF0aCB0byBbdGhpc10uCiAgICoKICAgKiBUaGUgdHlwZSBvZiB0aGUgcmV0dXJuZWQgaW5zdGFuY2UgaXMgdGhlIHR5cGUgb2YgW3RoaXNdLgogICAqCiAgICogVGhlIGFic29sdXRlIHBhdGggaXMgY29tcHV0ZWQgYnkgcHJlZml4aW5nCiAgICogYSByZWxhdGl2ZSBwYXRoIHdpdGggdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnksIGFuZCByZXR1cm5pbmcKICAgKiBhbiBhYnNvbHV0ZSBwYXRoIHVuY2hhbmdlZC4KICAgKi8KICBGaWxlU3lzdGVtRW50aXR5IGdldCBhYnNvbHV0ZTsKCiAgU3RyaW5nIGdldCBfYWJzb2x1dGVQYXRoIHsKICAgIGlmIChpc0Fic29sdXRlKSByZXR1cm4gcGF0aDsKICAgIFN0cmluZyBjdXJyZW50ID0gRGlyZWN0b3J5LmN1cnJlbnQucGF0aDsKICAgIGlmIChjdXJyZW50LmVuZHNXaXRoKCcvJykgfHwKICAgICAgICAoUGxhdGZvcm0uaXNXaW5kb3dzICYmIGN1cnJlbnQuZW5kc1dpdGgoJ1xcJykpKSB7CiAgICAgIHJldHVybiAnJGN1cnJlbnQkcGF0aCc7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gJyRjdXJyZW50JHtQbGF0Zm9ybS5wYXRoU2VwYXJhdG9yfSRwYXRoJzsKICAgIH0KICB9CgogIFVpbnQ4TGlzdCBnZXQgX3Jhd0Fic29sdXRlUGF0aCB7CiAgICBpZiAoaXNBYnNvbHV0ZSkgcmV0dXJuIF9yYXdQYXRoOwogICAgdmFyIGN1cnJlbnQgPSBEaXJlY3RvcnkuY3VycmVudC5fcmF3UGF0aC50b0xpc3QoKTsKICAgIGFzc2VydChjdXJyZW50Lmxhc3QgPT0gMCk7CiAgICBjdXJyZW50LnJlbW92ZUxhc3QoKTsgLy8gUmVtb3ZlIG51bGwgdGVybWluYXRvci4KICAgIGlmICgoY3VycmVudC5sYXN0ID09ICcvJy5jb2RlVW5pdEF0KDApKSB8fAogICAgICAgIChQbGF0Zm9ybS5pc1dpbmRvd3MgJiYgKGN1cnJlbnQubGFzdCA9PSAnXFwnLmNvZGVVbml0QXQoMCkpKSkgewogICAgICBjdXJyZW50LmFkZEFsbChfcmF3UGF0aCk7CiAgICAgIHJldHVybiBuZXcgVWludDhMaXN0LmZyb21MaXN0KGN1cnJlbnQpOwogICAgfSBlbHNlIHsKICAgICAgY3VycmVudC5hZGRBbGwodXRmOC5lbmNvZGUoUGxhdGZvcm0ucGF0aFNlcGFyYXRvcikpOwogICAgICBjdXJyZW50LmFkZEFsbChfcmF3UGF0aCk7CiAgICAgIHJldHVybiBuZXcgVWludDhMaXN0LmZyb21MaXN0KGN1cnJlbnQpOwogICAgfQogIH0KCiAgc3RhdGljIGJvb2wgX2lkZW50aWNhbFN5bmMoU3RyaW5nIHBhdGgxLCBTdHJpbmcgcGF0aDIpIHsKICAgIHZhciByZXN1bHQgPSBfaWRlbnRpY2FsTmF0aXZlKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgcGF0aDEsIHBhdGgyKTsKICAgIF90aHJvd0lmRXJyb3IocmVzdWx0LCAnRXJyb3IgaW4gRmlsZVN5c3RlbUVudGl0eS5pZGVudGljYWxTeW5jJyk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogU3luY2hyb25vdXNseSBjaGVja3Mgd2hldGhlciB0d28gcGF0aHMgcmVmZXIgdG8gdGhlIHNhbWUgb2JqZWN0IGluIHRoZQogICAqIGZpbGUgc3lzdGVtLgogICAqCiAgICogQ29tcGFyaW5nIGEgbGluayB0byBpdHMgdGFyZ2V0IHJldHVybnMgZmFsc2UsIGFzIGRvZXMgY29tcGFyaW5nIHR3byBsaW5rcwogICAqIHRoYXQgcG9pbnQgdG8gdGhlIHNhbWUgdGFyZ2V0LiAgVG8gY2hlY2sgdGhlIHRhcmdldCBvZiBhIGxpbmssIHVzZQogICAqIExpbmsudGFyZ2V0IGV4cGxpY2l0bHkgdG8gZmV0Y2ggaXQuICBEaXJlY3RvcnkgbGlua3MgYXBwZWFyaW5nCiAgICogaW5zaWRlIGEgcGF0aCBhcmUgZm9sbG93ZWQsIHRob3VnaCwgdG8gZmluZCB0aGUgZmlsZSBzeXN0ZW0gb2JqZWN0LgogICAqCiAgICogVGhyb3dzIGFuIGVycm9yIGlmIG9uZSBvZiB0aGUgcGF0aHMgcG9pbnRzIHRvIGFuIG9iamVjdCB0aGF0IGRvZXMgbm90CiAgICogZXhpc3QuCiAgICovCiAgc3RhdGljIGJvb2wgaWRlbnRpY2FsU3luYyhTdHJpbmcgcGF0aDEsIFN0cmluZyBwYXRoMikgewogICAgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX2lkZW50aWNhbFN5bmMocGF0aDEsIHBhdGgyKTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuZnNlSWRlbnRpY2FsU3luYyhwYXRoMSwgcGF0aDIpOwogIH0KCiAgLyoqCiAgICogVGVzdCBpZiBbd2F0Y2hdIGlzIHN1cHBvcnRlZCBvbiB0aGUgY3VycmVudCBzeXN0ZW0uCiAgICoKICAgKiBPUyBYIDEwLjYgYW5kIGJlbG93IGlzIG5vdCBzdXBwb3J0ZWQuCiAgICovCiAgc3RhdGljIGJvb2wgZ2V0IGlzV2F0Y2hTdXBwb3J0ZWQgewogICAgZmluYWwgSU9PdmVycmlkZXMgb3ZlcnJpZGVzID0gSU9PdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX0ZpbGVTeXN0ZW1XYXRjaGVyLmlzU3VwcG9ydGVkOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5mc1dhdGNoSXNTdXBwb3J0ZWQoKTsKICB9CgogIC8vIFRoZSBuYXRpdmUgbWV0aG9kcyB3aGljaCBkZXRlcm1pbmUgdHlwZSBvZiB0aGUgRmlsZVN5c3RlbUVudGl0eSByZXF1aXJlCiAgLy8gdGhhdCB0aGUgYnVmZmVyIHByb3ZpZGVkIGlzIG51bGwgdGVybWluYXRlZC4KICBzdGF0aWMgVWludDhMaXN0IF90b1V0ZjhBcnJheShTdHJpbmcgcykgPT4KICAgICAgX3RvTnVsbFRlcm1pbmF0ZWRVdGY4QXJyYXkodXRmOC5lbmNvZGUocykpOwoKICBzdGF0aWMgVWludDhMaXN0IF90b051bGxUZXJtaW5hdGVkVXRmOEFycmF5KFVpbnQ4TGlzdCBsKSB7CiAgICBpZiAobCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKGwuaXNOb3RFbXB0eSAmJiBsLmxhc3QgIT0gMCkgewogICAgICBmaW5hbCB0bXAgPSBuZXcgVWludDhMaXN0KGwubGVuZ3RoICsgMSk7CiAgICAgIHRtcC5zZXRSYW5nZSgwLCBsLmxlbmd0aCwgbCk7CiAgICAgIHJldHVybiB0bXA7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbDsKICAgIH0KICB9CgogIHN0YXRpYyBTdHJpbmcgX3RvU3RyaW5nRnJvbVV0ZjhBcnJheShVaW50OExpc3QgbCkgewogICAgaWYgKGwgPT0gbnVsbCkgewogICAgICByZXR1cm4gJyc7CiAgICB9CiAgICBVaW50OExpc3Qgbm9uTnVsbFRlcm1pbmF0ZWQgPSBsOwogICAgaWYgKGwubGFzdCA9PSAwKSB7CiAgICAgIG5vbk51bGxUZXJtaW5hdGVkID0gbmV3IFVpbnQ4TGlzdC52aWV3KGwuYnVmZmVyLCAwLCBsLmxlbmd0aCAtIDEpOwogICAgfQogICAgcmV0dXJuIHV0ZjguZGVjb2RlKG5vbk51bGxUZXJtaW5hdGVkLCBhbGxvd01hbGZvcm1lZDogdHJ1ZSk7CiAgfQoKICAvKioKICAgKiBGaW5kcyB0aGUgdHlwZSBvZiBmaWxlIHN5c3RlbSBvYmplY3QgdGhhdCBhIHBhdGggcG9pbnRzIHRvLgogICAqCiAgICogUmV0dXJucyBhIFs6RnV0dXJlPEZpbGVTeXN0ZW1FbnRpdHlUeXBlPjpdIHRoYXQgY29tcGxldGVzIHdpdGggdGhlIHNhbWUKICAgKiByZXN1bHRzIGFzIFt0eXBlU3luY10uCiAgICovCiAgc3RhdGljIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5VHlwZT4gdHlwZShTdHJpbmcgcGF0aCwKICAgICAge2Jvb2wgZm9sbG93TGlua3M6IHRydWV9KSB7CiAgICByZXR1cm4gX2dldFR5cGUoX3RvVXRmOEFycmF5KHBhdGgpLCBmb2xsb3dMaW5rcyk7CiAgfQoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGZpbmRzIHRoZSB0eXBlIG9mIGZpbGUgc3lzdGVtIG9iamVjdCB0aGF0IGEgcGF0aCBwb2ludHMgdG8uCiAgICoKICAgKiBSZXR1cm5zIGEgW0ZpbGVTeXN0ZW1FbnRpdHlUeXBlXS4KICAgKgogICAqIFJldHVybnMgW0ZpbGVTeXN0ZW1FbnRpdHlUeXBlLmxpbmtdIG9ubHkgaWYgW2ZvbGxvd0xpbmtzXSBpcyBmYWxzZSBhbmQgaWYKICAgKiBbcGF0aF0gcG9pbnRzIHRvIGEgbGluay4KICAgKgogICAqIFJldHVybnMgW0ZpbGVTeXN0ZW1FbnRpdHlUeXBlLm5vdEZvdW5kXSBpZiBbcGF0aF0gZG9lcyBub3QgcG9pbnQgdG8gYSBmaWxlCiAgICogc3lzdGVtIG9iamVjdCBvciBpZiBhbnkgb3RoZXIgZXJyb3Igb2NjdXJzIGluIGxvb2tpbmcgdXAgdGhlIHBhdGguCiAgICovCiAgc3RhdGljIEZpbGVTeXN0ZW1FbnRpdHlUeXBlIHR5cGVTeW5jKFN0cmluZyBwYXRoLCB7Ym9vbCBmb2xsb3dMaW5rczogdHJ1ZX0pIHsKICAgIHJldHVybiBfZ2V0VHlwZVN5bmMoX3RvVXRmOEFycmF5KHBhdGgpLCBmb2xsb3dMaW5rcyk7CiAgfQoKICAvKioKICAgKiBDaGVja3MgaWYgdHlwZShwYXRoLCBmb2xsb3dMaW5rczogZmFsc2UpIHJldHVybnMgRmlsZVN5c3RlbUVudGl0eVR5cGUubGluay4KICAgKi8KICBzdGF0aWMgRnV0dXJlPGJvb2w+IGlzTGluayhTdHJpbmcgcGF0aCkgPT4gX2lzTGlua1JhdyhfdG9VdGY4QXJyYXkocGF0aCkpOwoKICBzdGF0aWMgRnV0dXJlPGJvb2w+IF9pc0xpbmtSYXcoVWludDhMaXN0IHJhd1BhdGgpID0+IF9nZXRUeXBlKHJhd1BhdGgsIGZhbHNlKQogICAgICAudGhlbigodHlwZSkgPT4gKHR5cGUgPT0gRmlsZVN5c3RlbUVudGl0eVR5cGUubGluaykpOwoKICAvKioKICAgKiBDaGVja3MgaWYgdHlwZShwYXRoKSByZXR1cm5zIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmZpbGUuCiAgICovCiAgc3RhdGljIEZ1dHVyZTxib29sPiBpc0ZpbGUoU3RyaW5nIHBhdGgpID0+IF9nZXRUeXBlKF90b1V0ZjhBcnJheShwYXRoKSwgdHJ1ZSkKICAgICAgLnRoZW4oKHR5cGUpID0+ICh0eXBlID09IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmZpbGUpKTsKCiAgLyoqCiAgICogQ2hlY2tzIGlmIHR5cGUocGF0aCkgcmV0dXJucyBGaWxlU3lzdGVtRW50aXR5VHlwZS5kaXJlY3RvcnkuCiAgICovCiAgc3RhdGljIEZ1dHVyZTxib29sPiBpc0RpcmVjdG9yeShTdHJpbmcgcGF0aCkgPT4KICAgICAgX2dldFR5cGUoX3RvVXRmOEFycmF5KHBhdGgpLCB0cnVlKQogICAgICAgICAgLnRoZW4oKHR5cGUpID0+ICh0eXBlID09IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmRpcmVjdG9yeSkpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNoZWNrcyBpZiB0eXBlU3luYyhwYXRoLCBmb2xsb3dMaW5rczogZmFsc2UpIHJldHVybnMKICAgKiBGaWxlU3lzdGVtRW50aXR5VHlwZS5saW5rLgogICAqLwogIHN0YXRpYyBib29sIGlzTGlua1N5bmMoU3RyaW5nIHBhdGgpID0+IF9pc0xpbmtSYXdTeW5jKF90b1V0ZjhBcnJheShwYXRoKSk7CgogIHN0YXRpYyBib29sIF9pc0xpbmtSYXdTeW5jKHJhd1BhdGgpID0+CiAgICAgIChfZ2V0VHlwZVN5bmMocmF3UGF0aCwgZmFsc2UpID09IEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmxpbmspOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNoZWNrcyBpZiB0eXBlU3luYyhwYXRoKSByZXR1cm5zCiAgICogRmlsZVN5c3RlbUVudGl0eVR5cGUuZmlsZS4KICAgKi8KICBzdGF0aWMgYm9vbCBpc0ZpbGVTeW5jKFN0cmluZyBwYXRoKSA9PgogICAgICAoX2dldFR5cGVTeW5jKF90b1V0ZjhBcnJheShwYXRoKSwgdHJ1ZSkgPT0gRmlsZVN5c3RlbUVudGl0eVR5cGUuZmlsZSk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgY2hlY2tzIGlmIHR5cGVTeW5jKHBhdGgpIHJldHVybnMKICAgKiBGaWxlU3lzdGVtRW50aXR5VHlwZS5kaXJlY3RvcnkuCiAgICovCiAgc3RhdGljIGJvb2wgaXNEaXJlY3RvcnlTeW5jKFN0cmluZyBwYXRoKSA9PgogICAgICAoX2dldFR5cGVTeW5jKF90b1V0ZjhBcnJheShwYXRoKSwgdHJ1ZSkgPT0KICAgICAgICAgIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLmRpcmVjdG9yeSk7CgogIGV4dGVybmFsIHN0YXRpYyBfZ2V0VHlwZU5hdGl2ZSgKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsIFVpbnQ4TGlzdCByYXdQYXRoLCBib29sIGZvbGxvd0xpbmtzKTsKICBleHRlcm5hbCBzdGF0aWMgX2lkZW50aWNhbE5hdGl2ZSgKICAgICAgX05hbWVzcGFjZSBuYW1lc3BhY2UsIFN0cmluZyBwYXRoMSwgU3RyaW5nIHBhdGgyKTsKICBleHRlcm5hbCBzdGF0aWMgX3Jlc29sdmVTeW1ib2xpY0xpbmtzKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcGF0aCk7CgogIC8vIEZpbmRzIHRoZSBuZXh0LXRvLWxhc3QgY29tcG9uZW50IHdoZW4gZGl2aWRpbmcgYXQgcGF0aCBzZXBhcmF0b3JzLgogIHN0YXRpYyBmaW5hbCBSZWdFeHAgX3BhcmVudFJlZ0V4cCA9IFBsYXRmb3JtLmlzV2luZG93cwogICAgICA/IG5ldyBSZWdFeHAocidbXi9cXF1bL1xcXStbXi9cXF0nKQogICAgICA6IG5ldyBSZWdFeHAocidbXi9dLytbXi9dJyk7CgogIC8qKgogICAqIFJlbW92ZXMgdGhlIGZpbmFsIHBhdGggY29tcG9uZW50IG9mIGEgcGF0aCwgdXNpbmcgdGhlIHBsYXRmb3JtJ3MKICAgKiBwYXRoIHNlcGFyYXRvciB0byBzcGxpdCB0aGUgcGF0aC4KICAgKgogICAqIFdpbGwgbm90IHJlbW92ZSB0aGUgcm9vdCBjb21wb25lbnQgb2YgYSBXaW5kb3dzIHBhdGgsIGxpa2UgIkM6XFwiIG9yCiAgICogIlxcXFxzZXJ2ZXJfbmFtZVxcIi4gSWdub3JlcyB0cmFpbGluZyBwYXRoIHNlcGFyYXRvcnMsIGFuZCBsZWF2ZXMgbm8KICAgKiB0cmFpbGluZyBwYXRoIHNlcGFyYXRvcnMuCiAgICovCiAgc3RhdGljIFN0cmluZyBwYXJlbnRPZihTdHJpbmcgcGF0aCkgewogICAgaW50IHJvb3RFbmQgPSAtMTsKICAgIGlmIChQbGF0Zm9ybS5pc1dpbmRvd3MpIHsKICAgICAgaWYgKHBhdGguc3RhcnRzV2l0aChfYWJzb2x1dGVXaW5kb3dzUGF0aFBhdHRlcm4pKSB7CiAgICAgICAgLy8gUm9vdCBlbmRzIGF0IGZpcnN0IC8gb3IgXCBhZnRlciB0aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMuCiAgICAgICAgcm9vdEVuZCA9IHBhdGguaW5kZXhPZihuZXcgUmVnRXhwKHInWy9cXF0nKSwgMik7CiAgICAgICAgaWYgKHJvb3RFbmQgPT0gLTEpIHJldHVybiBwYXRoOwogICAgICB9IGVsc2UgaWYgKHBhdGguc3RhcnRzV2l0aCgnXFwnKSB8fCBwYXRoLnN0YXJ0c1dpdGgoJy8nKSkgewogICAgICAgIHJvb3RFbmQgPSAwOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHBhdGguc3RhcnRzV2l0aCgnLycpKSB7CiAgICAgIHJvb3RFbmQgPSAwOwogICAgfQogICAgLy8gSWdub3JlIHRyYWlsaW5nIHNsYXNoZXMuCiAgICAvLyBBbGwgbm9uLXRyaXZpYWwgY2FzZXMgaGF2ZSBzZXBhcmF0b3JzIGJldHdlZW4gdHdvIG5vbi1zZXBhcmF0b3JzLgogICAgaW50IHBvcyA9IHBhdGgubGFzdEluZGV4T2YoX3BhcmVudFJlZ0V4cCk7CiAgICBpZiAocG9zID4gcm9vdEVuZCkgewogICAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcoMCwgcG9zICsgMSk7CiAgICB9IGVsc2UgaWYgKHJvb3RFbmQgPiAtMSkgewogICAgICByZXR1cm4gcGF0aC5zdWJzdHJpbmcoMCwgcm9vdEVuZCArIDEpOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICcuJzsKICAgIH0KICB9CgogIC8qKgogICAqIFRoZSBkaXJlY3RvcnkgY29udGFpbmluZyBbdGhpc10uCiAgICovCiAgRGlyZWN0b3J5IGdldCBwYXJlbnQgPT4gbmV3IERpcmVjdG9yeShwYXJlbnRPZihwYXRoKSk7CgogIHN0YXRpYyBGaWxlU3lzdGVtRW50aXR5VHlwZSBfZ2V0VHlwZVN5bmNIZWxwZXIoCiAgICAgIFVpbnQ4TGlzdCByYXdQYXRoLCBib29sIGZvbGxvd0xpbmtzKSB7CiAgICB2YXIgcmVzdWx0ID0gX2dldFR5cGVOYXRpdmUoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCByYXdQYXRoLCBmb2xsb3dMaW5rcyk7CiAgICBfdGhyb3dJZkVycm9yKHJlc3VsdCwgJ0Vycm9yIGdldHRpbmcgdHlwZSBvZiBGaWxlU3lzdGVtRW50aXR5Jyk7CiAgICByZXR1cm4gRmlsZVN5c3RlbUVudGl0eVR5cGUuX2xvb2t1cChyZXN1bHQpOwogIH0KCiAgc3RhdGljIEZpbGVTeXN0ZW1FbnRpdHlUeXBlIF9nZXRUeXBlU3luYygKICAgICAgVWludDhMaXN0IHJhd1BhdGgsIGJvb2wgZm9sbG93TGlua3MpIHsKICAgIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9nZXRUeXBlU3luY0hlbHBlcihyYXdQYXRoLCBmb2xsb3dMaW5rcyk7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLmZzZUdldFR5cGVTeW5jKAogICAgICAgIHV0ZjguZGVjb2RlKHJhd1BhdGgsIGFsbG93TWFsZm9ybWVkOiB0cnVlKSwgZm9sbG93TGlua3MpOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5VHlwZT4gX2dldFR5cGVSZXF1ZXN0KAogICAgICBVaW50OExpc3QgcmF3UGF0aCwgYm9vbCBmb2xsb3dMaW5rcykgewogICAgcmV0dXJuIF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgX0lPU2VydmljZS5maWxlVHlwZSwgW251bGwsIHJhd1BhdGgsIGZvbGxvd0xpbmtzXSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgaWYgKF9pc0Vycm9yUmVzcG9uc2UocmVzcG9uc2UpKSB7CiAgICAgICAgdGhyb3cgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgIkVycm9yIGdldHRpbmcgdHlwZSIsCiAgICAgICAgICAgIHV0ZjguZGVjb2RlKHJhd1BhdGgsIGFsbG93TWFsZm9ybWVkOiB0cnVlKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIEZpbGVTeXN0ZW1FbnRpdHlUeXBlLl9sb29rdXAocmVzcG9uc2UpOwogICAgfSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPEZpbGVTeXN0ZW1FbnRpdHlUeXBlPiBfZ2V0VHlwZSgKICAgICAgVWludDhMaXN0IHJhd1BhdGgsIGJvb2wgZm9sbG93TGlua3MpIHsKICAgIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIF9nZXRUeXBlUmVxdWVzdChyYXdQYXRoLCBmb2xsb3dMaW5rcyk7CiAgICB9CiAgICByZXR1cm4gb3ZlcnJpZGVzLmZzZUdldFR5cGUoCiAgICAgICAgdXRmOC5kZWNvZGUocmF3UGF0aCwgYWxsb3dNYWxmb3JtZWQ6IHRydWUpLCBmb2xsb3dMaW5rcyk7CiAgfQoKICBzdGF0aWMgX3Rocm93SWZFcnJvcihPYmplY3QgcmVzdWx0LCBTdHJpbmcgbXNnLCBbU3RyaW5nIHBhdGhdKSB7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24obXNnLCBwYXRoLCByZXN1bHQpOwogICAgfSBlbHNlIGlmIChyZXN1bHQgaXMgQXJndW1lbnRFcnJvcikgewogICAgICB0aHJvdyByZXN1bHQ7CiAgICB9CiAgfQoKICAvLyBUT0RPKGJrb255aSk6IGZpbmQgYSB3YXkgdG8gZG8gdGhpcyB3aXRoIHJhdyBwYXRocy4KICBzdGF0aWMgU3RyaW5nIF90cmltVHJhaWxpbmdQYXRoU2VwYXJhdG9ycyhTdHJpbmcgcGF0aCkgewogICAgLy8gRG9uJ3QgaGFuZGxlIGFyZ3VtZW50IGVycm9ycyBoZXJlLgogICAgaWYgKHBhdGggPT0gbnVsbCkgcmV0dXJuIHBhdGg7CiAgICBpZiAoUGxhdGZvcm0uaXNXaW5kb3dzKSB7CiAgICAgIHdoaWxlIChwYXRoLmxlbmd0aCA+IDEgJiYKICAgICAgICAgIChwYXRoLmVuZHNXaXRoKFBsYXRmb3JtLnBhdGhTZXBhcmF0b3IpIHx8IHBhdGguZW5kc1dpdGgoJy8nKSkpIHsKICAgICAgICBwYXRoID0gcGF0aC5zdWJzdHJpbmcoMCwgcGF0aC5sZW5ndGggLSAxKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgd2hpbGUgKHBhdGgubGVuZ3RoID4gMSAmJiBwYXRoLmVuZHNXaXRoKFBsYXRmb3JtLnBhdGhTZXBhcmF0b3IpKSB7CiAgICAgICAgcGF0aCA9IHBhdGguc3Vic3RyaW5nKDAsIHBhdGgubGVuZ3RoIC0gMSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBwYXRoOwogIH0KCiAgLy8gVE9ETyhia29ueWkpOiBmaW5kIGEgd2F5IHRvIGRvIHRoaXMgd2l0aCByYXcgcGF0aHMuCiAgc3RhdGljIFN0cmluZyBfZW5zdXJlVHJhaWxpbmdQYXRoU2VwYXJhdG9ycyhTdHJpbmcgcGF0aCkgewogICAgLy8gRG9uJ3QgaGFuZGxlIGFyZ3VtZW50IGVycm9ycyBoZXJlLgogICAgaWYgKHBhdGggPT0gbnVsbCkgcmV0dXJuIHBhdGg7CiAgICBpZiAocGF0aC5pc0VtcHR5KSBwYXRoID0gJy4nOwogICAgaWYgKFBsYXRmb3JtLmlzV2luZG93cykgewogICAgICB3aGlsZSAoIXBhdGguZW5kc1dpdGgoUGxhdGZvcm0ucGF0aFNlcGFyYXRvcikgJiYgIXBhdGguZW5kc1dpdGgoJy8nKSkgewogICAgICAgIHBhdGggPSAiJHBhdGgke1BsYXRmb3JtLnBhdGhTZXBhcmF0b3J9IjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgd2hpbGUgKCFwYXRoLmVuZHNXaXRoKFBsYXRmb3JtLnBhdGhTZXBhcmF0b3IpKSB7CiAgICAgICAgcGF0aCA9ICIkcGF0aCR7UGxhdGZvcm0ucGF0aFNlcGFyYXRvcn0iOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcGF0aDsKICB9Cn0KCi8qKgogKiBCYXNlIGV2ZW50IGNsYXNzIGVtaXR0ZWQgYnkgW0ZpbGVTeXN0ZW1FbnRpdHkud2F0Y2hdLgogKi8KY2xhc3MgRmlsZVN5c3RlbUV2ZW50IHsKICAvKioKICAgKiBCaXRmaWVsZCBmb3IgW0ZpbGVTeXN0ZW1FbnRpdHkud2F0Y2hdLCB0byBlbmFibGUgW0ZpbGVTeXN0ZW1DcmVhdGVFdmVudF1zLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgY3JlYXRlID0gMSA8PCAwOwogIEBEZXByZWNhdGVkKCJVc2UgY3JlYXRlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgQ1JFQVRFID0gMSA8PCAwOwoKICAvKioKICAgKiBCaXRmaWVsZCBmb3IgW0ZpbGVTeXN0ZW1FbnRpdHkud2F0Y2hdLCB0byBlbmFibGUgW0ZpbGVTeXN0ZW1Nb2RpZnlFdmVudF1zLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgbW9kaWZ5ID0gMSA8PCAxOwogIEBEZXByZWNhdGVkKCJVc2UgbW9kaWZ5IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTU9ESUZZID0gMSA8PCAxOwoKICAvKioKICAgKiBCaXRmaWVsZCBmb3IgW0ZpbGVTeXN0ZW1FbnRpdHkud2F0Y2hdLCB0byBlbmFibGUgW0ZpbGVTeXN0ZW1EZWxldGVFdmVudF1zLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgZGVsZXRlID0gMSA8PCAyOwogIEBEZXByZWNhdGVkKCJVc2UgZGVsZXRlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgREVMRVRFID0gMSA8PCAyOwoKICAvKioKICAgKiBCaXRmaWVsZCBmb3IgW0ZpbGVTeXN0ZW1FbnRpdHkud2F0Y2hdLCB0byBlbmFibGUgW0ZpbGVTeXN0ZW1Nb3ZlRXZlbnRdcy4KICAgKi8KICBzdGF0aWMgY29uc3QgaW50IG1vdmUgPSAxIDw8IDM7CiAgQERlcHJlY2F0ZWQoIlVzZSBtb3ZlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTU9WRSA9IDEgPDwgMzsKCiAgLyoqCiAgICogQml0ZmllbGQgZm9yIFtGaWxlU3lzdGVtRW50aXR5LndhdGNoXSwgZm9yIGVuYWJsaW5nIGFsbCBvZiBbY3JlYXRlXSwKICAgKiBbbW9kaWZ5XSwgW2RlbGV0ZV0gYW5kIFttb3ZlXS4KICAgKi8KICBzdGF0aWMgY29uc3QgaW50IGFsbCA9IGNyZWF0ZSB8IG1vZGlmeSB8IGRlbGV0ZSB8IG1vdmU7CiAgQERlcHJlY2F0ZWQoIlVzZSBhbGwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBBTEwgPSBjcmVhdGUgfCBtb2RpZnkgfCBkZWxldGUgfCBtb3ZlOwoKICBzdGF0aWMgY29uc3QgaW50IF9tb2RpZnlBdHRyaWJ1dGVzID0gMSA8PCA0OwogIHN0YXRpYyBjb25zdCBpbnQgX2RlbGV0ZVNlbGYgPSAxIDw8IDU7CiAgc3RhdGljIGNvbnN0IGludCBfaXNEaXIgPSAxIDw8IDY7CgogIC8qKgogICAqIFRoZSB0eXBlIG9mIGV2ZW50LiBTZWUgW0ZpbGVTeXN0ZW1FdmVudF0gZm9yIGEgbGlzdCBvZiBldmVudHMuCiAgICovCiAgZmluYWwgaW50IHR5cGU7CgogIC8qKgogICAqIFRoZSBwYXRoIHRoYXQgdHJpZ2dlcmVkIHRoZSBldmVudC4KICAgKgogICAqIERlcGVuZGluZyBvbiB0aGUgcGxhdGZvcm0gYW5kIHRoZSBGaWxlU3lzdGVtRW50aXR5LCB0aGUgcGF0aCBtYXkgYmUKICAgKiByZWxhdGl2ZS4KICAgKi8KICBmaW5hbCBTdHJpbmcgcGF0aDsKCiAgLyoqCiAgICogSXMgYHRydWVgIGlmIHRoZSBldmVudCB0YXJnZXQgd2FzIGEgZGlyZWN0b3J5LgogICAqCiAgICogTm90ZSB0aGF0IGlmIHRoZSBmaWxlIGhhcyBiZWVuIGRlbGV0ZWQgYnkgdGhlIHRpbWUgdGhlIGV2ZW50IGhhcyBhcnJpdmVkLAogICAqIHRoaXMgd2lsbCBhbHdheXMgYmUgYGZhbHNlYCBvbiBXaW5kb3dzLiBJbiBwYXJ0aWN1bGFyLCBpdCB3aWxsIGFsd2F5cyBiZQogICAqIGBmYWxzZWAgZm9yIGBkZWxldGVgIGV2ZW50cy4KICAgKi8KICBmaW5hbCBib29sIGlzRGlyZWN0b3J5OwoKICBGaWxlU3lzdGVtRXZlbnQuXyh0aGlzLnR5cGUsIHRoaXMucGF0aCwgdGhpcy5pc0RpcmVjdG9yeSk7Cn0KCi8qKgogKiBGaWxlIHN5c3RlbSBldmVudCBmb3IgbmV3bHkgY3JlYXRlZCBmaWxlIHN5c3RlbSBvYmplY3RzLgogKi8KY2xhc3MgRmlsZVN5c3RlbUNyZWF0ZUV2ZW50IGV4dGVuZHMgRmlsZVN5c3RlbUV2ZW50IHsKICBGaWxlU3lzdGVtQ3JlYXRlRXZlbnQuXyhwYXRoLCBpc0RpcmVjdG9yeSkKICAgICAgOiBzdXBlci5fKEZpbGVTeXN0ZW1FdmVudC5jcmVhdGUsIHBhdGgsIGlzRGlyZWN0b3J5KTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkZpbGVTeXN0ZW1DcmVhdGVFdmVudCgnJHBhdGgnKSI7Cn0KCi8qKgogKiBGaWxlIHN5c3RlbSBldmVudCBmb3IgbW9kaWZpY2F0aW9ucyBvZiBmaWxlIHN5c3RlbSBvYmplY3RzLgogKi8KY2xhc3MgRmlsZVN5c3RlbU1vZGlmeUV2ZW50IGV4dGVuZHMgRmlsZVN5c3RlbUV2ZW50IHsKICAvKioKICAgKiBJZiB0aGUgY29udGVudCB3YXMgY2hhbmdlZCBhbmQgbm90IG9ubHkgdGhlIGF0dHJpYnV0ZXMsIFtjb250ZW50Q2hhbmdlZF0KICAgKiBpcyBgdHJ1ZWAuCiAgICovCiAgZmluYWwgYm9vbCBjb250ZW50Q2hhbmdlZDsKCiAgRmlsZVN5c3RlbU1vZGlmeUV2ZW50Ll8ocGF0aCwgaXNEaXJlY3RvcnksIHRoaXMuY29udGVudENoYW5nZWQpCiAgICAgIDogc3VwZXIuXyhGaWxlU3lzdGVtRXZlbnQubW9kaWZ5LCBwYXRoLCBpc0RpcmVjdG9yeSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgICJGaWxlU3lzdGVtTW9kaWZ5RXZlbnQoJyRwYXRoJywgY29udGVudENoYW5nZWQ9JGNvbnRlbnRDaGFuZ2VkKSI7Cn0KCi8qKgogKiBGaWxlIHN5c3RlbSBldmVudCBmb3IgZGVsZXRpb24gb2YgZmlsZSBzeXN0ZW0gb2JqZWN0cy4KICovCmNsYXNzIEZpbGVTeXN0ZW1EZWxldGVFdmVudCBleHRlbmRzIEZpbGVTeXN0ZW1FdmVudCB7CiAgRmlsZVN5c3RlbURlbGV0ZUV2ZW50Ll8ocGF0aCwgaXNEaXJlY3RvcnkpCiAgICAgIDogc3VwZXIuXyhGaWxlU3lzdGVtRXZlbnQuZGVsZXRlLCBwYXRoLCBpc0RpcmVjdG9yeSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJGaWxlU3lzdGVtRGVsZXRlRXZlbnQoJyRwYXRoJykiOwp9CgovKioKICogRmlsZSBzeXN0ZW0gZXZlbnQgZm9yIG1vdmluZyBvZiBmaWxlIHN5c3RlbSBvYmplY3RzLgogKi8KY2xhc3MgRmlsZVN5c3RlbU1vdmVFdmVudCBleHRlbmRzIEZpbGVTeXN0ZW1FdmVudCB7CiAgLyoqCiAgICogSWYgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gaXMgYWJsZSB0byBpZGVudGlmeSB0aGUg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ZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29tbW9uX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIEZpbGVTdGF0IHsKICBAcGF0Y2gKICBzdGF0aWMgX3N0YXRTeW5jKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBTdHJpbmcgcGF0aCkgbmF0aXZlICJGaWxlX1N0YXQiOwp9CgpAcGF0Y2gKY2xhc3MgRmlsZVN5c3RlbUVudGl0eSB7CiAgQHBhdGNoCiAgc3RhdGljIF9nZXRUeXBlTmF0aXZlKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBVaW50OExpc3QgcmF3UGF0aCwKICAgICAgYm9vbCBmb2xsb3dMaW5rcykgbmF0aXZlICJGaWxlX0dldFR5cGUiOwogIEBwYXRjaAogIHN0YXRpYyBfaWRlbnRpY2FsTmF0aXZlKF9OYW1lc3BhY2UgbmFtZXNwYWNlLCBTdHJpbmcgcGF0aDEsIFN0cmluZyBwYXRoMikKICAgICAgbmF0aXZlICJGaWxlX0FyZUlkZW50aWNhbCI7CiAgQHBhdGNoCiAgc3RhdGljIF9yZXNvbHZlU3ltYm9saWNMaW5rcyhfTmFtZXNwYWNlIG5hbWVzcGFjZSwgVWludDhMaXN0IHBhdGgpCiAgICAgIG5hdGl2ZSAiRmlsZV9SZXNvbHZlU3ltYm9saWNMaW5rcyI7Cn0KGgBOTjwBIAEHEQlKAgEHGQlBLwlMIglFKgIBK2RhcnQ6aW8tcGF0Y2gvZmlsZV9zeXN0ZW1fZW50aXR5X3BhdGNoLmRhcnQ0b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL2lvX3Jlc291cmNlX2luZm8uZGFydKH+Ly8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCmFic3RyYWN0IGNsYXNzIF9JT1Jlc291cmNlSW5mbyB7CiAgZmluYWwgU3RyaW5nIHR5cGU7CiAgZmluYWwgaW50IGlkOwogIFN0cmluZyBnZXQgbmFtZTsKICBzdGF0aWMgaW50IF9jb3VudCA9IDA7CgogIHN0YXRpYyBmaW5hbCBTdG9wd2F0Y2ggX3N3ID0gbmV3IFN0b3B3YXRjaCgpLi5zdGFydCgpOwogIHN0YXRpYyBmaW5hbCBfc3RhcnRUaW1lID0gbmV3IERhdGVUaW1lLm5vdygpLm1pbGxpc2Vjb25kc1NpbmNlRXBvY2g7CgogIHN0YXRpYyBkb3VibGUgZ2V0IHRpbWVzdGFtcCA9PiBfc3RhcnRUaW1lICsgX3N3LmVsYXBzZWRNaWNyb3NlY29uZHMgLyAxMDAwOwoKICBfSU9SZXNvdXJjZUluZm8odGhpcy50eXBlKSA6IGlkID0gX0lPUmVzb3VyY2VJbmZvLmdldE5leHRJRCgpOwoKICAvLy8gR2V0IHRoZSBmdWxsIHNldCBvZiB2YWx1ZXMgZm9yIGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24uIFRoaXMgaXMgbm9ybWFsbHkKICAvLy8gbG9va2VkIHVwIGJhc2VkIG9uIGFuIGlkIGZyb20gYSByZWZlcmVuY2VWYWx1ZU1hcC4KICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXQgZnVsbFZhbHVlTWFwOwoKICAvLy8gVGhlIHJlZmVyZW5jZSBtYXAsIHVzZWQgdG8gcmV0dXJuIGEgbGlzdCBvZiB2YWx1ZXMsIGUuZy4sIGdldHRpbmcKICAvLy8gYWxsIG9wZW4gc29ja2V0cy4gVGhlIHN0cnVjdHVyZSBvZiB0aGlzIGlzIHNoYXJlZCBhbW9uZyBhbGwgc3ViY2xhc3Nlcy4KICBNYXA8U3RyaW5nLCBkeW5hbWljPiBnZXQgcmVmZXJlbmNlVmFsdWVNYXAgPT4gewogICAgICAgIC8vIFRoZSB0eXBlIGZvciBhIHJlZmVyZW5jZSBvYmplY3QgaXMgcHJlZml4ZWQgd2l0aCBAIGluIG9ic2VydmF0b3J5LgogICAgICAgICd0eXBlJzogJ0AkdHlwZScsCiAgICAgICAgJ2lkJzogaWQsCiAgICAgICAgJ25hbWUnOiBuYW1lLAogICAgICB9OwoKICBzdGF0aWMgaW50IGdldE5leHRJRCgpID0+IF9jb3VudCsrOwp9CgphYnN0cmFjdCBjbGFzcyBfUmVhZFdyaXRlUmVzb3VyY2VJbmZvIGV4dGVuZHMgX0lPUmVzb3VyY2VJbmZvIHsKICBpbnQgdG90YWxSZWFkOwogIGludCB0b3RhbFdyaXR0ZW47CiAgaW50IHJlYWRDb3VudDsKICBpbnQgd3JpdGVDb3VudDsKICBkb3VibGUgbGFzdFJlYWQ7CiAgZG91YmxlIGxhc3RXcml0ZTsKCiAgLy8gTm90IGFsbCBjYWxsIHNpdGVzIHVzZSB0aGlzLiBJbiBzb21lIGNhc2VzLCBlLmcuLCBhIHNvY2tldCwgYSByZWFkIGRvZXMKICAvLyBub3QgYWx3YXlzIG1lYW4gdGhhdCB3ZSBhY3R1YWxseSByZWFkIHNvbWUgYnl0ZXMgKHdlIG1heSBkbyBhIHJlYWQgdG8gc2VlCiAgLy8gaWYgdGhlcmUgYXJlIHNvbWUgYnl0ZXMgYXZhaWxhYmxlKS4KICB2b2lkIGFkZFJlYWQoaW50IGJ5dGVzKSB7CiAgICB0b3RhbFJlYWQgKz0gYnl0ZXM7CiAgICByZWFkQ291bnQrKzsKICAgIGxhc3RSZWFkID0gX0lPUmVzb3VyY2VJbmZvLnRpbWVzdGFtcDsKICB9CgogIC8vIEluIGNhc2VzIHdoZXJlIHdlIHJlYWQgYnV0IGRpZCBub3QgbmVjZXNzYXJpbHkgZ2V0IGFueSBieXRlcywgdXNlIHRoaXMgdG8KICAvLyB1cGRhdGUgdGhlIHJlYWRDb3VudCBhbmQgdGltZXN0YW1wLiBNYW51YWxseSB1cGRhdGUgdG90YWxSZWFkIGlmIGFueSBieXRlcwogIC8vIHdoZXJlIGFjdHVhbGx5IHJlYWQuCiAgdm9pZCBkaWRSZWFkKCkgewogICAgYWRkUmVhZCgwKTsKICB9CgogIHZvaWQgYWRkV3JpdGUoaW50IGJ5dGVzKSB7CiAgICB0b3RhbFdyaXR0ZW4gKz0gYnl0ZXM7CiAgICB3cml0ZUNvdW50Kys7CiAgICBsYXN0V3JpdGUgPSBfSU9SZXNvdXJjZUluZm8udGltZXN0YW1wOwogIH0KCiAgX1JlYWRXcml0ZVJlc291cmNlSW5mbyhTdHJpbmcgdHlwZSkKICAgICAgOiB0b3RhbFJlYWQgPSAwLAogICAgICAgIHRvdGFsV3JpdHRlbiA9IDAsCiAgICAgICAgcmVhZENvdW50ID0gMCwKICAgICAgICB3cml0ZUNvdW50ID0gMCwKICAgICAgICBsYXN0UmVhZCA9IDAuMCwKICAgICAgICBsYXN0V3JpdGUgPSAwLjAsCiAgICAgICAgc3VwZXIodHlwZSk7CgogIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGdldCBmdWxsVmFsdWVNYXAgPT4gewogICAgICAgICd0eXBlJzogdHlwZSwKICAgICAgICAnaWQnOiBpZCwKICAgICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICAgJ3RvdGFsUmVhZCc6IHRvdGFsUmVhZCwKICAgICAgICAndG90YWxXcml0dGVuJzogdG90YWxXcml0dGVuLAogICAgICAgICdyZWFkQ291bnQnOiByZWFkQ291bnQsCiAgICAgICAgJ3dyaXRlQ291bnQnOiB3cml0ZUNvdW50LAogICAgICAgICdsYXN0UmVhZCc6IGxhc3RSZWFkLAogICAgICAgICdsYXN0V3JpdGUnOiBsYXN0V3JpdGUKICAgICAgfTsKfQoKY2xhc3MgX0ZpbGVSZXNvdXJjZUluZm8gZXh0ZW5kcyBfUmVhZFdyaXRlUmVzb3VyY2VJbmZvIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF90eXBlID0gJ19maWxlJzsKCiAgZmluYWwgZmlsZTsKCiAgc3RhdGljIE1hcDxpbnQsIF9GaWxlUmVzb3VyY2VJbmZvPiBvcGVuRmlsZXMgPQogICAgICBuZXcgTWFwPGludCwgX0ZpbGVSZXNvdXJjZUluZm8+KCk7CgogIF9GaWxlUmVzb3VyY2VJbmZvKHRoaXMuZmlsZSkgOiBzdXBlcihfdHlwZSkgewogICAgRmlsZU9wZW5lZCh0aGlzKTsKICB9CgogIHN0YXRpYyBGaWxlT3BlbmVkKF9GaWxlUmVzb3VyY2VJbmZvIGluZm8pIHsKICAgIGFzc2VydCghb3BlbkZpbGVzLmNvbnRhaW5zS2V5KGluZm8uaWQpKTsKICAgIG9wZW5GaWxlc1tpbmZvLmlkXSA9IGluZm87CiAgfQoKICBzdGF0aWMgRmlsZUNsb3NlZChfRmlsZVJlc291cmNlSW5mbyBpbmZvKSB7CiAgICBhc3NlcnQob3BlbkZpbGVzLmNvbnRhaW5zS2V5KGluZm8uaWQpKTsKICAgIG9wZW5GaWxlcy5yZW1vdmUoaW5mby5pZCk7CiAgfQoKICBzdGF0aWMgSXRlcmFibGU8TWFwPFN0cmluZywgZHluYW1pYz4+IGdldE9wZW5GaWxlc0xpc3QoKSB7CiAgICByZXR1cm4gbmV3IExpc3QuZnJvbShvcGVuRmlsZXMudmFsdWVzLm1hcCgoZSkgPT4gZS5yZWZlcmVuY2VWYWx1ZU1hcCkpOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2U+IGdldE9wZW5GaWxlcyhmdW5jdGlvbiwgcGFyYW1zKSB7CiAgICBhc3NlcnQoZnVuY3Rpb24gPT0gJ2V4dC5kYXJ0LmlvLmdldE9wZW5GaWxlcycpOwogICAgdmFyIGRhdGEgPSB7J3R5cGUnOiAnX29wZW5maWxlcycsICdkYXRhJzogZ2V0T3BlbkZpbGVzTGlzdCgpfTsKICAgIHZhciBqc29uVmFsdWUgPSBqc29uLmVuY29kZShkYXRhKTsKICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG5ldyBTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2UucmVzdWx0KGpzb25WYWx1ZSkpOwogIH0KCiAgTWFwPFN0cmluZywgZHluYW1pYz4gZ2V0RmlsZUluZm9NYXAoKSB7CiAgICByZXR1cm4gZnVsbFZhbHVlTWFwOwogIH0KCiAgc3RhdGljIEZ1dHVyZTxTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2U+IGdldEZpbGVJbmZvTWFwQnlJRChmdW5jdGlvbiwgcGFyYW1zKSB7CiAgICBhc3NlcnQocGFyYW1zLmNvbnRhaW5zS2V5KCdpZCcpKTsKICAgIHZhciBpZCA9IGludC5wYXJzZShwYXJhbXNbJ2lkJ10pOwogICAgdmFyIHJlc3VsdCA9CiAgICAgICAgb3BlbkZpbGVzLmNvbnRhaW5zS2V5KGlkKSA/IG9wZW5GaWxlc1tpZF0uZ2V0RmlsZUluZm9NYXAoKSA6IHt9OwogICAgdmFyIGpzb25WYWx1ZSA9IGpzb24uZW5jb2RlKHJlc3VsdCk7CiAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShuZXcgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLnJlc3VsdChqc29uVmFsdWUpKTsKICB9CgogIFN0cmluZyBnZXQgbmFtZSB7CiAgICByZXR1cm4gJyR7ZmlsZS5wYXRofSc7CiAgfQp9CgpjbGFzcyBfUHJvY2Vzc1Jlc291cmNlSW5mbyBleHRlbmRzIF9JT1Jlc291cmNlSW5mbyB7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBfdHlwZSA9ICdfcHJvY2Vzcyc7CiAgZmluYWwgcHJvY2VzczsKICBmaW5hbCBkb3VibGUgc3RhcnRlZEF0OwoKICBzdGF0aWMgTWFwPGludCwgX1Byb2Nlc3NSZXNvdXJjZUluZm8+IHN0YXJ0ZWRQcm9jZXNzZXMgPQogICAgICBuZXcgTWFwPGludCwgX1Byb2Nlc3NSZXNvdXJjZUluZm8+KCk7CgogIF9Qcm9jZXNzUmVzb3VyY2VJbmZvKHRoaXMucHJvY2VzcykKICAgICAgOiBzdGFydGVkQXQgPSBfSU9SZXNvdXJjZUluZm8udGltZXN0YW1wLAogICAgICAgIHN1cGVyKF90eXBlKSB7CiAgICBQcm9jZXNzU3RhcnRlZCh0aGlzKTsKICB9CgogIFN0cmluZyBnZXQgbmFtZSA9PiBwcm9jZXNzLl9wYXRoOwoKICB2b2lkIHN0b3BwZWQoKSB7CiAgICBQcm9jZXNzU3RvcHBlZCh0aGlzKTsKICB9CgogIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGdldCBmdWxsVmFsdWVNYXAgPT4gewogICAgICAgICd0eXBlJzogdHlwZSwKICAgICAgICAnaWQnOiBpZCwKICAgICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICAgJ3BpZCc6IHByb2Nlc3MucGlkLAogICAgICAgICdzdGFydGVkQXQnOiBzdGFydGVkQXQsCiAgICAgICAgJ2FyZ3VtZW50cyc6IHByb2Nlc3MuX2FyZ3VtZW50cywKICAgICAgICAnd29ya2luZ0RpcmVjdG9yeSc6CiAgICAgICAgICAgIHByb2Nlc3MuX3dvcmtpbmdEaXJlY3RvcnkgPT0gbnVsbCA/ICcuJyA6IHByb2Nlc3MuX3dvcmtpbmdEaXJlY3RvcnksCiAgICAgIH07CgogIHN0YXRpYyBQcm9jZXNzU3RhcnRlZChfUHJvY2Vzc1Jlc291cmNlSW5mbyBpbmZvKSB7CiAgICBhc3NlcnQoIXN0YXJ0ZWRQcm9jZXNzZXMuY29udGFpbnNLZXkoaW5mby5pZCkpOwogICAgc3RhcnRlZFByb2Nlc3Nlc1tpbmZvLmlkXSA9IGluZm87CiAgfQoKICBzdGF0aWMgUHJvY2Vzc1N0b3BwZWQoX1Byb2Nlc3NSZXNvdXJjZUluZm8gaW5mbykgewogICAgYXNzZXJ0KHN0YXJ0ZWRQcm9jZXNzZXMuY29udGFpbnNLZXkoaW5mby5pZCkpOwogICAgc3RhcnRlZFByb2Nlc3Nlcy5yZW1vdmUoaW5mby5pZCk7CiAgfQoKICBzdGF0aWMgSXRlcmFibGU8TWFwPFN0cmluZywgZHluYW1pYz4+IGdldFN0YXJ0ZWRQcm9jZXNzZXNMaXN0KCkgPT4KICAgICAgbmV3IExpc3QuZnJvbShzdGFydGVkUHJvY2Vzc2VzLnZhbHVlcy5tYXAoKGUpID0+IGUucmVmZXJlbmNlVmFsdWVNYXApKTsKCiAgc3RhdGljIEZ1dHVyZTxTZXJ2aWNlRXh0ZW5zaW9uUmVzcG9uc2U+IGdldFN0YXJ0ZWRQcm9jZXNzZXMoCiAgICAgIFN0cmluZyBmdW5jdGlvbiwgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbXMpIHsKICAgIGFzc2VydChmdW5jdGlvbiA9PSAnZXh0LmRhcnQuaW8uZ2V0UHJvY2Vzc2VzJyk7CiAgICB2YXIgZGF0YSA9IHsndHlwZSc6ICdfc3RhcnRlZHByb2Nlc3NlcycsICdkYXRhJzogZ2V0U3RhcnRlZFByb2Nlc3Nlc0xpc3QoKX07CiAgICB2YXIganNvblZhbHVlID0ganNvbi5lbmNvZGUoZGF0YSk7CiAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShuZXcgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLnJlc3VsdChqc29uVmFsdWUpKTsKICB9CgogIHN0YXRpYyBGdXR1cmU8U2VydmljZUV4dGVuc2lvblJlc3BvbnNlPiBnZXRQcm9jZXNzSW5mb01hcEJ5SWQoCiAgICAgIFN0cmluZyBmdW5jdGlvbiwgTWFwPFN0cmluZywgU3RyaW5nPiBwYXJhbXMpIHsKICAgIHZhciBpZCA9IGludC5wYXJzZShwYXJhbXNbJ2lkJ10pOwogICAgdmFyIHJlc3VsdCA9IHN0YXJ0ZWRQcm9jZXNzZXMuY29udGFpbnNLZXkoaWQpCiAgICAgICAgPyBzdGFydGVkUHJvY2Vzc2VzW2lkXS5mdWxsVmFsdWVNYXAKICAgICAgICA6IHt9OwogICAgdmFyIGpzb25WYWx1ZSA9IGpzb24uZW5jb2RlKHJlc3VsdCk7CiAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShuZXcgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLnJlc3VsdChqc29uVmFsdWUpKTsKICB9Cn0KCmNsYXNzIF9Tb2NrZXRSZXNvdXJjZUluZm8gZXh0ZW5kcyBfUmVhZFdyaXRlUmVzb3VyY2VJbmZvIHsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF90Y3BTdHJpbmcgPSAnVENQJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF91ZHBTdHJpbmcgPSAnVURQJzsKICBzdGF0aWMgY29uc3QgU3RyaW5nIF90eXBlID0gJ19zb2NrZXQnOwoKICBmaW5hbCAvKl9OYXRpdmVTb2NrZXR8Ki8gc29ja2V0OwoKICBzdGF0aWMgTWFwPGludCwgX1NvY2tldFJlc291cmNlSW5mbz4gb3BlblNvY2tldHMgPQogICAgICBuZXcgTWFwPGludCwgX1NvY2tldFJlc291cmNlSW5mbz4oKTsKCiAgX1NvY2tldFJlc291cmNlSW5mbyh0aGlzLnNvY2tldCkgOiBzdXBlcihfdHlwZSkgewogICAgU29ja2V0T3BlbmVkKHRoaXMpOwogIH0KCiAgU3RyaW5nIGdldCBuYW1lIHsKICAgIGlmIChzb2NrZXQuaXNMaXN0ZW5pbmcpIHsKICAgICAgcmV0dXJuICdsaXN0ZW5pbmc6JHtzb2NrZXQuYWRkcmVzcy5ob3N0fToke3NvY2tldC5wb3J0fSc7CiAgICB9CiAgICB2YXIgcmVtb3RlID0gJyc7CiAgICB0cnkgewogICAgICB2YXIgcmVtb3RlSG9zdCA9IHNvY2tldC5yZW1vdGVBZGRyZXNzLmhvc3Q7CiAgICAgIHZhciByZW1vdGVQb3J0ID0gc29ja2V0LnJlbW90ZVBvcnQ7CiAgICAgIHJlbW90ZSA9ICcgLT4gJHJlbW90ZUhvc3Q6JHJlbW90ZVBvcnQnOwogICAgfSBjYXRjaCAoZSkge30gLy8gaWdub3JlZCBpZiB3ZSBjYW4ndCBnZXQgdGhlIGluZm9ybWF0aW9uCiAgICByZXR1cm4gJyR7c29ja2V0LmFkZHJlc3MuaG9zdH06JHtzb2NrZXQucG9ydH0kcmVtb3RlJzsKICB9CgogIHN0YXRpYyBJdGVyYWJsZTxNYXA8U3RyaW5nLCBkeW5hbWljPj4gZ2V0T3BlblNvY2tldHNMaXN0KCkgewogICAgcmV0dXJuIG5ldyBMaXN0LmZyb20ob3BlblNvY2tldHMudmFsdWVzLm1hcCgoZSkgPT4gZS5yZWZlcmVuY2VWYWx1ZU1hcCkpOwogIH0KCiAgTWFwPFN0cmluZywgZHluYW1pYz4gZ2V0U29ja2V0SW5mb01hcCgpIHsKICAgIHZhciByZXN1bHQgPSBmdWxsVmFsdWVNYXA7CiAgICByZXN1bHRbJ3NvY2tldFR5cGUnXSA9IHNvY2tldC5pc1RjcCA/IF90Y3BTdHJpbmcgOiBfdWRwU3RyaW5nOwogICAgcmVzdWx0WydsaXN0ZW5pbmcnXSA9IHNvY2tldC5pc0xpc3RlbmluZzsKICAgIHJlc3VsdFsnaG9zdCddID0gc29ja2V0LmFkZHJlc3MuaG9zdDsKICAgIHJlc3VsdFsncG9ydCddID0gc29ja2V0LnBvcnQ7CiAgICBpZiAoIXNvY2tldC5pc0xpc3RlbmluZykgewogICAgICB0cnkgewogICAgICAgIHJlc3VsdFsncmVtb3RlSG9zdCddID0gc29ja2V0LnJlbW90ZUFkZHJlc3MuaG9zdDsKICAgICAgICByZXN1bHRbJ3JlbW90ZVBvcnQnXSA9IHNvY2tldC5yZW1vdGVQb3J0OwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgLy8gVURQLgogICAgICAgIHJlc3VsdFsncmVtb3RlUG9ydCddID0gJ05BJzsKICAgICAgICByZXN1bHRbJ3JlbW90ZUhvc3QnXSA9ICdOQSc7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdFsncmVtb3RlUG9ydCddID0gJ05BJzsKICAgICAgcmVzdWx0WydyZW1vdGVIb3N0J10gPSAnTkEnOwogICAgfQogICAgcmVzdWx0WydhZGRyZXNzVHlwZSddID0gc29ja2V0LmFkZHJlc3MudHlwZS5uYW1lOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBGdXR1cmU8U2VydmljZUV4dGVuc2lvblJlc3BvbnNlPiBnZXRTb2NrZXRJbmZvTWFwQnlJRCgKICAgICAgU3RyaW5nIGZ1bmN0aW9uLCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtcykgewogICAgYXNzZXJ0KHBhcmFtcy5jb250YWluc0tleSgnaWQnKSk7CiAgICB2YXIgaWQgPSBpbnQucGFyc2UocGFyYW1zWydpZCddKTsKICAgIHZhciByZXN1bHQgPQogICAgICAgIG9wZW5Tb2NrZXRzLmNvbnRhaW5zS2V5KGlkKSA/IG9wZW5Tb2NrZXRzW2lkXS5nZXRTb2NrZXRJbmZvTWFwKCkgOiB7fTsKICAgIHZhciBqc29uVmFsdWUgPSBqc29uLmVuY29kZShyZXN1bHQpOwogICAgcmV0dXJuIG5ldyBGdXR1cmUudmFsdWUobmV3IFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZS5yZXN1bHQoanNvblZhbHVlKSk7CiAgfQoKICBzdGF0aWMgRnV0dXJlPFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZT4gZ2V0T3BlblNvY2tldHMoZnVuY3Rpb24sIHBhcmFtcykgewogICAgYXNzZXJ0KGZ1bmN0aW9uID09ICdleHQuZGFydC5pby5nZXRPcGVuU29ja2V0cycpOwogICAgdmFyIGRhdGEgPSB7J3R5cGUnOiAnX29wZW5zb2NrZXRzJywgJ2RhdGEnOiBnZXRPcGVuU29ja2V0c0xpc3QoKX07CiAgICB2YXIganNvblZhbHVlID0ganNvbi5lbmNvZGUoZGF0YSk7CiAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZShuZXcgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlLnJlc3VsdChqc29uVmFsdWUpKTsKICB9CgogIHN0YXRpYyBTb2NrZXRPcGVuZWQoX1NvY2tldFJlc291cmNlSW5mbyBpbmZvKSB7CiAgICBhc3NlcnQoIW9wZW5Tb2NrZXRzLmNvbnRhaW5zS2V5KGluZm8uaWQpKTsKICAgIG9wZW5Tb2NrZXRzW2luZm8uaWRdID0gaW5mbzsKICB9CgogIHN0YXRpYyBTb2NrZXRDbG9zZWQoX1NvY2tldFJlc291cmNlSW5mbyBpbmZvKSB7CiAgICBhc3NlcnQob3BlblNvY2tldHMuY29udGFpbnNLZXkoaW5mby5pZCkpOwogICAgb3BlblNvY2tldHMucmVtb3ZlKGluZm8uaWQpOwogIH0KfQqBHABOTjwBEQEhFRATGQE5RwFOAUEBUTkpAUhOMk4aEhYJASYCAUARFBESExQBTU8pHBgRKgQBT1AaExAEAR0bEisEASYXGhcYGBkVAS0WEhYgJiAiHh8JAgE5JwEOATEpATAWBAEuLR8EAS4sHwQBPUwEAUs0QydNBAEqGQQBUSYmEUkpTQQBFBsEAgE1KhEaATssASUvFxoEASQBExoEAS0WEhYcICkcUQkBNTQmBAE1MyYEAUVOAT81NFEnTQQBQTUmMiwOKU0EAgE7KiopASMBNSsBNBgEARQeQAYVCjIqLj47BAE/TgQBLB9DLioiHww6MhQQJSUIDSMjBjYTBAFANSYmEU8pTQQBTTZHJ00EATIvIQQBMi4hBAIBHWRhcnQ6aW8vaW9fcmVzb3VyY2VfaW5mby5kYXJ0K29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9pb19zaW5rLmRhcnSkXy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovKioKICogQSBjb21iaW5lZCBieXRlIGFuZCB0ZXh0IG91dHB1dC4KICoKICogQW4gW0lPU2lua10gY29tYmluZXMgYSBbU3RyZWFtU2lua10gb2YgYnl0ZXMgd2l0aCBhIFtTdHJpbmdTaW5rXSwKICogYW5kIGFsbG93cyBlYXN5IG91dHB1dCBvZiBib3RoIGJ5dGVzIGFuZCB0ZXh0LgogKgogKiBXcml0aW5nIHRleHQgKFt3cml0ZV0pIGFuZCBhZGRpbmcgYnl0ZXMgKFthZGRdKSBtYXkgYmUgaW50ZXJsZWF2ZWQgZnJlZWx5LgogKgogKiBXaGlsZSBhIHN0cmVhbSBpcyBiZWluZyBhZGRlZCB1c2luZyBbYWRkU3RyZWFtXSwgYW55IGZ1cnRoZXIgYXR0ZW1wdHMKICogdG8gYWRkIG9yIHdyaXRlIHRvIHRoZSBbSU9TaW5rXSB3aWxsIGZhaWwgdW50aWwgdGhlIFthZGRTdHJlYW1dIGNvbXBsZXRlcy4KICoKICogSXQgaXMgYW4gZXJyb3IgdG8gYWRkIGRhdGEgdG8gdGhlIFtJT1NpbmtdIGFmdGVyIHRoZSBzaW5rIGlzIGNsb3NlZC4KICovCmFic3RyYWN0IGNsYXNzIElPU2luayBpbXBsZW1lbnRzIFN0cmVhbVNpbms8TGlzdDxpbnQ+PiwgU3RyaW5nU2luayB7CiAgLyoqCiAgICogQ3JlYXRlIGFuIFtJT1NpbmtdIHRoYXQgb3V0cHV0cyB0byBhIFt0YXJnZXRdIFtTdHJlYW1Db25zdW1lcl0gb2YgYnl0ZXMuCiAgICoKICAgKiBUZXh0IHdyaXR0ZW4gdG8gW1N0cmVhbVNpbmtdIG1ldGhvZHMgaXMgZW5jb2RlZCB0byBieXRlcyB1c2luZyBbZW5jb2RpbmddCiAgICogYmVmb3JlIGJlaW5nIG91dHB1dCBvbiBbdGFyZ2V0XS4KICAgKi8KICBmYWN0b3J5IElPU2luayhTdHJlYW1Db25zdW1lcjxMaXN0PGludD4+IHRhcmdldCwge0VuY29kaW5nIGVuY29kaW5nOiB1dGY4fSkgPT4KICAgICAgbmV3IF9JT1NpbmtJbXBsKHRhcmdldCwgZW5jb2RpbmcpOwoKICAvKioKICAgKiBUaGUgW0VuY29kaW5nXSB1c2VkIHdoZW4gd3JpdGluZyBzdHJpbmdzLiBEZXBlbmRpbmcgb24gdGhlCiAgICogdW5kZXJseWluZyBjb25zdW1lciB0aGlzIHByb3BlcnR5IG1pZ2h0IGJlIG11dGFibGUuCiAgICovCiAgRW5jb2RpbmcgZW5jb2Rpbmc7CgogIC8qKgogICAqIEFkZHMgYnl0ZSBbZGF0YV0gdG8gdGhlIHRhcmdldCBjb25zdW1lciwgaWdub3JpbmcgW2VuY29kaW5nXS4KICAgKgogICAqIFRoZSBbZW5jb2RpbmddIGRvZXMgbm90IGFwcGx5IHRvIHRoaXMgbWV0aG9kLCBhbmQgdGhlIGBkYXRhYCBsaXN0IGlzIHBhc3NlZAogICAqIGRpcmVjdGx5IHRvIHRoZSB0YXJnZXQgY29uc3VtZXIgYXMgYSBzdHJlYW0gZXZlbnQuCiAgICoKICAgKiBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlIGNhbGxlZCB3aGVuIGEgc3RyZWFtIGlzIGN1cnJlbnRseSBiZWluZyBhZGRlZAogICAqIHVzaW5nIFthZGRTdHJlYW1dLgogICAqCiAgICogVGhpcyBvcGVyYXRpb24gaXMgbm9uLWJsb2NraW5nLiBTZWUgW2ZsdXNoXSBvciBbZG9uZV0gZm9yIGhvdyB0byBnZXQgYW55CiAgICogZXJyb3JzIGdlbmVyYXRlZCBieSB0aGlzIGNhbGwuCiAgICoKICAgKiBUaGUgZGF0YSBsaXN0IHNob3VsZCBub3QgYmUgbW9kaWZpZWQgYWZ0ZXIgaXQgaGFzIGJlZW4gcGFzc2VkIHRvIGBhZGRgLgogICAqLwogIHZvaWQgYWRkKExpc3Q8aW50PiBkYXRhKTsKCiAgLyoqCiAgICogQ29udmVydHMgW29ial0gdG8gYSBTdHJpbmcgYnkgaW52b2tpbmcgW09iamVjdC50b1N0cmluZ10gYW5kCiAgICogW2FkZF1zIHRoZSBlbmNvZGluZyBvZiB0aGUgcmVzdWx0IHRvIHRoZSB0YXJnZXQgY29uc3VtZXIuCiAgICoKICAgKiBUaGlzIG9wZXJhdGlvbiBpcyBub24tYmxvY2tpbmcuIFNlZSBbZmx1c2hdIG9yIFtkb25lXSBmb3IgaG93IHRvIGdldCBhbnkKICAgKiBlcnJvcnMgZ2VuZXJhdGVkIGJ5IHRoaXMgY2FsbC4KICAgKi8KICB2b2lkIHdyaXRlKE9iamVjdCBvYmopOwoKICAvKioKICAgKiBJdGVyYXRlcyBvdmVyIHRoZSBnaXZlbiBbb2JqZWN0c10gYW5kIFt3cml0ZV1zIHRoZW0gaW4gc2VxdWVuY2UuCiAgICoKICAgKiBJZiBbc2VwYXJhdG9yXSBpcyBwcm92aWRlZCwgYSBgd3JpdGVgIHdpdGggdGhlIGBzZXBhcmF0b3JgIGlzIHBlcmZvcm1lZAogICAqIGJldHdlZW4gYW55IHR3byBlbGVtZW50cyBvZiBvYmplY3RzYC4KICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1ibG9ja2luZy4gU2VlIFtmbHVzaF0gb3IgW2RvbmVdIGZvciBob3cgdG8gZ2V0IGFueQogICAqIGVycm9ycyBnZW5lcmF0ZWQgYnkgdGhpcyBjYWxsLgogICAqLwogIHZvaWQgd3JpdGVBbGwoSXRlcmFibGUgb2JqZWN0cywgW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pOwoKICAvKioKICAgKiBDb252ZXJ0cyBbb2JqXSB0byBhIFN0cmluZyBieSBpbnZva2luZyBbT2JqZWN0LnRvU3RyaW5nXSBhbmQKICAgKiB3cml0ZXMgdGhlIHJlc3VsdCB0byBgdGhpc2AsIGZvbGxvd2VkIGJ5IGEgbmV3bGluZS4KICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1ibG9ja2luZy4gU2VlIFtmbHVzaF0gb3IgW2RvbmVdIGZvciBob3cgdG8gZ2V0IGFueQogICAqIGVycm9ycyBnZW5lcmF0ZWQgYnkgdGhpcyBjYWxsLgogICAqLwogIHZvaWQgd3JpdGVsbihbT2JqZWN0IG9iaiA9ICIiXSk7CgogIC8qKgogICAqIFdyaXRlcyB0aGUgY2hhcmFjdGVyIG9mIFtjaGFyQ29kZV0uCiAgICoKICAgKiBUaGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIGB3cml0ZShuZXcgU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSkpYC4KICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGlzIG5vbi1ibG9ja2luZy4gU2VlIFtmbHVzaF0gb3IgW2RvbmVdIGZvciBob3cgdG8gZ2V0IGFueQogICAqIGVycm9ycyBnZW5lcmF0ZWQgYnkgdGhpcyBjYWxsLgogICAqLwogIHZvaWQgd3JpdGVDaGFyQ29kZShpbnQgY2hhckNvZGUpOwoKICAvKioKICAgKiBQYXNzZXMgdGhlIGVycm9yIHRvIHRoZSB0YXJnZXQgY29uc3VtZXIgYXMgYW4gZXJyb3IgZXZlbnQuCiAgICoKICAgKiBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlIGNhbGxlZCB3aGVuIGEgc3RyZWFtIGlzIGN1cnJlbnRseSBiZWluZyBhZGRlZAogICAqIHVzaW5nIFthZGRTdHJlYW1dLgogICAqCiAgICogVGhpcyBvcGVyYXRpb24gaXMgbm9uLWJsb2NraW5nLiBTZWUgW2ZsdXNoXSBvciBbZG9uZV0gZm9yIGhvdyB0byBnZXQgYW55CiAgICogZXJyb3JzIGdlbmVyYXRlZCBieSB0aGlzIGNhbGwuCiAgICovCiAgdm9pZCBhZGRFcnJvcihlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pOwoKICAvKioKICAgKiBBZGRzIGFsbCBlbGVtZW50cyBvZiB0aGUgZ2l2ZW4gW3N0cmVhbV0gdG8gYHRoaXNgLgogICAqCiAgICogUmV0dXJucyBhIFtGdXR1cmVdIHRoYXQgY29tcGxldGVzIHdoZW4KICAgKiBhbGwgZWxlbWVudHMgb2YgdGhlIGdpdmVuIFtzdHJlYW1dIGFyZSBhZGRlZCB0byBgdGhpc2AuCiAgICoKICAgKiBUaGlzIGZ1bmN0aW9uIG11c3Qgbm90IGJlIGNhbGxlZCB3aGVuIGEgc3RyZWFtIGlzIGN1cnJlbnRseSBiZWluZyBhZGRlZAogICAqIHVzaW5nIHRoaXMgZnVuY3Rpb24uCiAgICovCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW08TGlzdDxpbnQ+PiBzdHJlYW0pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgW0Z1dHVyZV0gdGhhdCBjb21wbGV0ZXMgb25jZSBhbGwgYnVmZmVyZWQgZGF0YSBpcyBhY2NlcHRlZCBieSB0aGUKICAgKiB1bmRlcmx5aW5nIFtTdHJlYW1Db25zdW1lcl0uCiAgICoKICAgKiBUaGlzIG1ldGhvZCBtdXN0IG5vdCBiZSBjYWxsZWQgd2hpbGUgYW4gW2FkZFN0cmVhbV0gaXMgaW5jb21wbGV0ZS4KICAgKgogICAqIE5PVEU6IFRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIGFzIHRoZSBkYXRhIGJlaW5nIGZsdXNoZWQgYnkgdGhlCiAgICogb3BlcmF0aW5nIHN5c3RlbS4KICAgKi8KICBGdXR1cmUgZmx1c2goKTsKCiAgLyoqCiAgICogQ2xvc2UgdGhlIHRhcmdldCBjb25zdW1lci4KICAgKgogICAqIE5PVEU6IFdyaXRlcyB0byB0aGUgW0lPU2lua10gbWF5IGJlIGJ1ZmZlcmVkLCBhbmQgbWF5IG5vdCBiZSBmbHVzaGVkIGJ5CiAgICogYSBjYWxsIHRvIGBjbG9zZSgpYC4gVG8gZmx1c2ggYWxsIGJ1ZmZlcmVkIHdyaXRlcywgY2FsbCBgZmx1c2goKWAgYmVmb3JlCiAgICogY2FsbGluZyBgY2xvc2UoKWAuCiAgICovCiAgRnV0dXJlIGNsb3NlKCk7CgogIC8qKgogICAqIEdldCBhIGZ1dHVyZSB0aGF0IHdpbGwgY29tcGxldGUgd2hlbiB0aGUgY29uc3VtZXIgY2xvc2VzLCBvciB3aGVuIGFuCiAgICogZXJyb3Igb2NjdXJzLiBUaGlzIGZ1dHVyZSBpcyBpZGVudGljYWwgdG8gdGhlIGZ1dHVyZSByZXR1cm5lZCBieQogICAqIFtjbG9zZV0uCiAgICovCiAgRnV0dXJlIGdldCBkb25lOwp9CgpjbGFzcyBfU3RyZWFtU2lua0ltcGw8VD4gaW1wbGVtZW50cyBTdHJlYW1TaW5rPFQ+IHsKICBmaW5hbCBTdHJlYW1Db25zdW1lcjxUPiBfdGFyZ2V0OwogIGZpbmFsIENvbXBsZXRlciBfZG9uZUNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKICBTdHJlYW1Db250cm9sbGVyPFQ+IF9jb250cm9sbGVySW5zdGFuY2U7CiAgQ29tcGxldGVyIF9jb250cm9sbGVyQ29tcGxldGVyOwogIGJvb2wgX2lzQ2xvc2VkID0gZmFsc2U7CiAgYm9vbCBfaXNCb3VuZCA9IGZhbHNlOwogIGJvb2wgX2hhc0Vycm9yID0gZmFsc2U7CgogIF9TdHJlYW1TaW5rSW1wbCh0aGlzLl90YXJnZXQpOwoKICB2b2lkIGFkZChUIGRhdGEpIHsKICAgIGlmIChfaXNDbG9zZWQpIHsKICAgICAgdGhyb3cgU3RhdGVFcnJvcigiU3RyZWFtU2luayBpcyBjbG9zZWQiKTsKICAgIH0KICAgIF9jb250cm9sbGVyLmFkZChkYXRhKTsKICB9CgogIHZvaWQgYWRkRXJyb3IoZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBpZiAoX2lzQ2xvc2VkKSB7CiAgICAgIHRocm93IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgY2xvc2VkIik7CiAgICB9CiAgICBfY29udHJvbGxlci5hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICBGdXR1cmUgYWRkU3RyZWFtKFN0cmVhbTxUPiBzdHJlYW0pIHsKICAgIGlmIChfaXNCb3VuZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtU2luayBpcyBhbHJlYWR5IGJvdW5kIHRvIGEgc3RyZWFtIik7CiAgICB9CiAgICBpZiAoX2hhc0Vycm9yKSByZXR1cm4gZG9uZTsKCiAgICBfaXNCb3VuZCA9IHRydWU7CiAgICB2YXIgZnV0dXJlID0gX2NvbnRyb2xsZXJDb21wbGV0ZXIgPT0gbnVsbAogICAgICAgID8gX3RhcmdldC5hZGRTdHJlYW0oc3RyZWFtKQogICAgICAgIDogX2NvbnRyb2xsZXJDb21wbGV0ZXIuZnV0dXJlLnRoZW4oKF8pID0+IF90YXJnZXQuYWRkU3RyZWFtKHN0cmVhbSkpOwogICAgX2NvbnRyb2xsZXJJbnN0YW5jZT8uY2xvc2UoKTsKCiAgICAvLyBXYWl0IGZvciBhbnkgcGVuZGluZyBldmVudHMgaW4gW19jb250cm9sbGVyXSB0byBiZSBkaXNwYXRjaGVkIGJlZm9yZQogICAgLy8gYWRkaW5nIFtzdHJlYW1dLgogICAgcmV0dXJuIGZ1dHVyZS53aGVuQ29tcGxldGUoKCkgewogICAgICBfaXNCb3VuZCA9IGZhbHNlOwogICAgfSk7CiAgfQoKICBGdXR1cmUgZmx1c2goKSB7CiAgICBpZiAoX2lzQm91bmQpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIlN0cmVhbVNpbmsgaXMgYm91bmQgdG8gYSBzdHJlYW0iKTsKICAgIH0KICAgIGlmIChfY29udHJvbGxlckluc3RhbmNlID09IG51bGwpIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKHRoaXMpOwogICAgLy8gQWRkaW5nIGFuIGVtcHR5IHN0cmVhbS1jb250cm9sbGVyIHdpbGwgcmV0dXJuIGEgZnV0dXJlIHRoYXQgd2lsbCBjb21wbGV0ZQogICAgLy8gd2hlbiBhbGwgZGF0YSBpcyBkb25lLgogICAgX2lzQm91bmQgPSB0cnVlOwogICAgdmFyIGZ1dHVyZSA9IF9jb250cm9sbGVyQ29tcGxldGVyLmZ1dHVyZTsKICAgIF9jb250cm9sbGVySW5zdGFuY2UuY2xvc2UoKTsKICAgIHJldHVybiBmdXR1cmUud2hlbkNvbXBsZXRlKCgpIHsKICAgICAgX2lzQm91bmQgPSBmYWxzZTsKICAgIH0pOwogIH0KCiAgRnV0dXJlIGNsb3NlKCkgewogICAgaWYgKF9pc0JvdW5kKSB7CiAgICAgIHRocm93IG5ldyBTdGF0ZUVycm9yKCJTdHJlYW1TaW5rIGlzIGJvdW5kIHRvIGEgc3RyZWFtIik7CiAgICB9CiAgICBpZiAoIV9pc0Nsb3NlZCkgewogICAgICBfaXNDbG9zZWQgPSB0cnVlOwogICAgICBpZiAoX2NvbnRyb2xsZXJJbnN0YW5jZSAhPSBudWxsKSB7CiAgICAgICAgX2NvbnRyb2xsZXJJbnN0YW5jZS5jbG9zZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIF9jbG9zZVRhcmdldCgpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZG9uZTsKICB9CgogIHZvaWQgX2Nsb3NlVGFyZ2V0KCkgewogICAgX3RhcmdldC5jbG9zZSgpLnRoZW4oX2NvbXBsZXRlRG9uZVZhbHVlLCBvbkVycm9yOiBfY29tcGxldGVEb25lRXJyb3IpOwogIH0KCiAgRnV0dXJlIGdldCBkb25lID0+IF9kb25lQ29tcGxldGVyLmZ1dHVyZTsKCiAgdm9pZCBfY29tcGxldGVEb25lVmFsdWUodmFsdWUpIHsKICAgIGlmICghX2RvbmVDb21wbGV0ZXIuaXNDb21wbGV0ZWQpIHsKICAgICAgX2RvbmVDb21wbGV0ZXIuY29tcGxldGUodmFsdWUpOwogICAgfQogIH0KCiAgdm9pZCBfY29tcGxldGVEb25lRXJyb3IoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgaWYgKCFfZG9uZUNvbXBsZXRlci5pc0NvbXBsZXRlZCkgewogICAgICBfaGFzRXJyb3IgPSB0cnVlOwogICAgICBfZG9uZUNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgIH0KICB9CgogIFN0cmVhbUNvbnRyb2xsZXI8VD4gZ2V0IF9jb250cm9sbGVyIHsKICAgIGlmIChfaXNCb3VuZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtU2luayBpcyBib3VuZCB0byBhIHN0cmVhbSIpOwogICAgfQogICAgaWYgKF9pc0Nsb3NlZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiU3RyZWFtU2luayBpcyBjbG9zZWQiKTsKICAgIH0KICAgIGlmIChfY29udHJvbGxlckluc3RhbmNlID09IG51bGwpIHsKICAgICAgX2NvbnRyb2xsZXJJbnN0YW5jZSA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFQ+KHN5bmM6IHRydWUpOwogICAgICBfY29udHJvbGxlckNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXIoKTsKICAgICAgX3RhcmdldC5hZGRTdHJlYW0oX2NvbnRyb2xsZXIuc3RyZWFtKS50aGVuKChfKSB7CiAgICAgICAgaWYgKF9pc0JvdW5kKSB7CiAgICAgICAgICAvLyBBIG5ldyBzdHJlYW0gdGFrZXMgb3ZlciAtIGZvcndhcmQgdmFsdWVzIHRvIHRoYXQgc3RyZWFtLgogICAgICAgICAgX2NvbnRyb2xsZXJDb21wbGV0ZXIuY29tcGxldGUodGhpcyk7CiAgICAgICAgICBfY29udHJvbGxlckNvbXBsZXRlciA9IG51bGw7CiAgICAgICAgICBfY29udHJvbGxlckluc3RhbmNlID0gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gTm8gbmV3IHN0cmVhbSwgLmNsb3NlIHdhcyBjYWxsZWQuIENsb3NlIF90YXJnZXQuCiAgICAgICAgICBfY2xvc2VUYXJnZXQoKTsKICAgICAgICB9CiAgICAgIH0sIG9uRXJyb3I6IChlcnJvciwgc3RhY2tUcmFjZSkgewogICAgICAgIGlmIChfaXNCb3VuZCkgewogICAgICAgICAgLy8gQSBuZXcgc3RyZWFtIHRha2VzIG92ZXIgLSBmb3J3YXJkIGVycm9ycyB0byB0aGF0IHN0cmVhbS4KICAgICAgICAgIF9jb250cm9sbGVyQ29tcGxldGVyLmNvbXBsZXRlRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogICAgICAgICAgX2NvbnRyb2xsZXJDb21wbGV0ZXIgPSBudWxsOwogICAgICAgICAgX2NvbnRyb2xsZXJJbnN0YW5jZSA9IG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIE5vIG5ldyBzdHJlYW0uIE5vIG5lZWQgdG8gY2xvc2UgdGFyZ2V0LCBhcyBpdCBoYXMgYWxyZWFkeQogICAgICAgICAgLy8gZmFpbGVkLgogICAgICAgICAgX2NvbXBsZXRlRG9uZUVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgcmV0dXJuIF9jb250cm9sbGVySW5zdGFuY2U7CiAgfQp9CgpjbGFzcyBfSU9TaW5rSW1wbCBleHRlbmRzIF9TdHJlYW1TaW5rSW1wbDxMaXN0PGludD4+IGltcGxlbWVudHMgSU9TaW5rIHsKICBFbmNvZGluZyBfZW5jb2Rpbmc7CiAgYm9vbCBfZW5jb2RpbmdNdXRhYmxlID0gdHJ1ZTsKCiAgX0lPU2lua0ltcGwoU3RyZWFtQ29uc3VtZXI8TGlzdDxpbnQ+PiB0YXJnZXQsIHRoaXMuX2VuY29kaW5nKSA6IHN1cGVyKHRhcmdldCk7CgogIEVuY29kaW5nIGdldCBlbmNvZGluZyA9PiBfZW5jb2Rpbmc7CgogIHZvaWQgc2V0IGVuY29kaW5nKEVuY29kaW5nIHZhbHVlKSB7CiAgICBpZiAoIV9lbmNvZGluZ011dGFibGUpIHsKICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIklPU2luayBlbmNvZGluZyBpcyBub3QgbXV0YWJsZSIpOwogICAgfQogICAgX2VuY29kaW5nID0gdmFsdWU7CiAgfQoKICB2b2lkIHdyaXRlKE9iamVjdCBvYmopIHsKICAgIFN0cmluZyBzdHJpbmcgPSAnJG9iaic7CiAgICBpZiAoc3RyaW5nLmlzRW1wdHkpIHJldHVybjsKICAgIGFkZChfZW5jb2RpbmcuZW5jb2RlKHN0cmluZykpOwogIH0KCiAgdm9pZCB3cml0ZUFsbChJdGVyYWJsZSBvYmplY3RzLCBbU3RyaW5nIHNlcGFyYXRvciA9ICIiXSkgewogICAgSXRlcmF0b3IgaXRlcmF0b3IgPSBvYmplY3RzLml0ZXJhdG9yOwogICAgaWYgKCFpdGVyYXRvci5tb3ZlTmV4dCgpKSByZXR1cm47CiAgICBpZiAoc2VwYXJhdG9yLmlzRW1wdHkpIHsKICAgICAgZG8gewogICAgICAgIHdyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB9IHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKTsKICAgIH0gZWxzZSB7CiAgICAgIHdyaXRlKGl0ZXJhdG9yLmN1cnJlbnQpOwogICAgICB3aGlsZSAoaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgIHdyaXRlKHNlcGFyYXRvcik7CiAgICAgICAgd3JpdGUoaXRlcmF0b3IuY3VycmVudCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgd3JpdGVsbihbT2JqZWN0IG9iamVjdCA9ICIiXSkgewogICAgd3JpdGUob2JqZWN0KTsKICAgIHdyaXRlKCJcbiIpOwogIH0KCiAgdm9pZCB3cml0ZUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgd3JpdGUobmV3IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpKTsKICB9Cn0KgT4ATk48AREBBCQDRTIDTgNJTgNIBEUGTgVPJgZRKQEGQDkGFQEGQwVROAVNGAVOJAVNBhwBBkI/BU4kBhoBBkYFTSsFTiQGPAEGQjkFTiQGIwEGKQVOBU4kBiQBBkAFTRgFTiQGMQEGOAUsPQVNGgYuAQZRIgVIBU0XBhIBBiAFTU4YBhIBBkpGDgYTAgE0IzQrIhoZGgEhARUVMAYbBAEyFTAGLQQBJxRHBiABFS4kTiIBTBgkGAgEARMUPwZEUR4VLiEkGAgEARMUPwYWGCklDxgIBhEEARhLBAEsASMnJgYEATonGDcGBAEoFD8GFTQGJ0EuNxhGLycmET4aCigYRkEnJhFHFTEKCgYgBAIBSRYgAVEBJgEmHT4GFwQBGxwgIwQBPSomHQshJQ0fJBohCAYEAScTEQQBJS4EAgEUZGFydDppby9pb19zaW5rLmRhcnQub3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL2lvX3NlcnZpY2UuZGFydIgnLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCmNsYXNzIF9JT1NlcnZpY2UgewogIC8vIFRoaXMgbGlzdCBtdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBsaXN0IGluIHJ1bnRpbWUvYmluL2lvX3NlcnZpY2UuaAogIHN0YXRpYyBjb25zdCBpbnQgZmlsZUV4aXN0cyA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlQ3JlYXRlID0gMTsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVEZWxldGUgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVJlbmFtZSA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlQ29weSA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlT3BlbiA9IDU7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlUmVzb2x2ZVN5bWJvbGljTGlua3MgPSA2OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZUNsb3NlID0gNzsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVQb3NpdGlvbiA9IDg7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlU2V0UG9zaXRpb24gPSA5OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVRydW5jYXRlID0gMTA7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlTGVuZ3RoID0gMTE7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlTGVuZ3RoRnJvbVBhdGggPSAxMjsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVMYXN0QWNjZXNzZWQgPSAxMzsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVTZXRMYXN0QWNjZXNzZWQgPSAxNDsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVMYXN0TW9kaWZpZWQgPSAxNTsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVTZXRMYXN0TW9kaWZpZWQgPSAxNjsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVGbHVzaCA9IDE3OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVJlYWRCeXRlID0gMTg7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlV3JpdGVCeXRlID0gMTk7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlUmVhZCA9IDIwOwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVJlYWRJbnRvID0gMjE7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlV3JpdGVGcm9tID0gMjI7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlQ3JlYXRlTGluayA9IDIzOwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZURlbGV0ZUxpbmsgPSAyNDsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVSZW5hbWVMaW5rID0gMjU7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlTGlua1RhcmdldCA9IDI2OwogIHN0YXRpYyBjb25zdCBpbnQgZmlsZVR5cGUgPSAyNzsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVJZGVudGljYWwgPSAyODsKICBzdGF0aWMgY29uc3QgaW50IGZpbGVTdGF0ID0gMjk7CiAgc3RhdGljIGNvbnN0IGludCBmaWxlTG9jayA9IDMwOwogIHN0YXRpYyBjb25zdCBpbnQgc29ja2V0TG9va3VwID0gMzE7CiAgc3RhdGljIGNvbnN0IGludCBzb2NrZXRMaXN0SW50ZXJmYWNlcyA9IDMyOwogIHN0YXRpYyBjb25zdCBpbnQgc29ja2V0UmV2ZXJzZUxvb2t1cCA9IDMzOwogIHN0YXRpYyBjb25zdCBpbnQgZGlyZWN0b3J5Q3JlYXRlID0gMzQ7CiAgc3RhdGljIGNvbnN0IGludCBkaXJlY3RvcnlEZWxldGUgPSAzNTsKICBzdGF0aWMgY29uc3QgaW50IGRpcmVjdG9yeUV4aXN0cyA9IDM2OwogIHN0YXRpYyBjb25zdCBpbnQgZGlyZWN0b3J5Q3JlYXRlVGVtcCA9IDM3OwogIHN0YXRpYyBjb25zdCBpbnQgZGlyZWN0b3J5TGlzdFN0YXJ0ID0gMzg7CiAgc3RhdGljIGNvbnN0IGludCBkaXJlY3RvcnlMaXN0TmV4dCA9IDM5OwogIHN0YXRpYyBjb25zdCBpbnQgZGlyZWN0b3J5TGlzdFN0b3AgPSA0MDsKICBzdGF0aWMgY29uc3QgaW50IGRpcmVjdG9yeVJlbmFtZSA9IDQxOwogIHN0YXRpYyBjb25zdCBpbnQgc3NsUHJvY2Vzc0ZpbHRlciA9IDQyOwoKICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlIF9kaXNwYXRjaChpbnQgcmVxdWVzdCwgTGlzdCBkYXRhKTsKfQo4AE5OPAERARNOIyMjIyEhMSIlKCYkLCotKi0jJiciJicoKCgoIiciIiYuLSkpKS0sKyspKgE8AgEXZGFydDppby9pb19zZXJ2aWNlLmRhcnQob3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL2xpbmsuZGFydKgjLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8qKgogKiBbTGlua10gb2JqZWN0cyBhcmUgcmVmZXJlbmNlcyB0byBmaWxlc3lzdGVtIGxpbmtzLgogKgogKi8KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQphYnN0cmFjdCBjbGFzcyBMaW5rIGltcGxlbWVudHMgRmlsZVN5c3RlbUVudGl0eSB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIExpbmsgb2JqZWN0LgogICAqLwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBmYWN0b3J5IExpbmsoU3RyaW5nIHBhdGgpIHsKICAgIGZpbmFsIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIG5ldyBfTGluayhwYXRoKTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuY3JlYXRlTGluayhwYXRoKTsKICB9CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBmYWN0b3J5IExpbmsuZnJvbVJhd1BhdGgoVWludDhMaXN0IHJhd1BhdGgpIHsKICAgIC8vIFRPRE8oYmtvbnlpKTogaGFuZGxlIG92ZXJyaWRlcwogICAgcmV0dXJuIG5ldyBfTGluay5mcm9tUmF3UGF0aChyYXdQYXRoKTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBbTGlua10gb2JqZWN0LgogICAqCiAgICogSWYgW3BhdGhdIGlzIGEgcmVsYXRpdmUgcGF0aCwgaXQgd2lsbCBiZSBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUKICAgKiBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IChzZWUgW0RpcmVjdG9yeS5jdXJyZW50XSksIHdoZW4gdXNlZC4KICAgKgogICAqIElmIFtwYXRoXSBpcyBhbiBhYnNvbHV0ZSBwYXRoLCBpdCB3aWxsIGJlIGltbXVuZSB0byBjaGFuZ2VzIHRvIHRoZQogICAqIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuCiAgICovCiAgZmFjdG9yeSBMaW5rLmZyb21VcmkoVXJpIHVyaSkgPT4gbmV3IExpbmsodXJpLnRvRmlsZVBhdGgoKSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBzeW1ib2xpYyBsaW5rLiBSZXR1cm5zIGEgWzpGdXR1cmU8TGluaz46XSB0aGF0IGNvbXBsZXRlcyB3aXRoCiAgICogdGhlIGxpbmsgd2hlbiBpdCBoYXMgYmVlbiBjcmVhdGVkLiBJZiB0aGUgbGluayBleGlzdHMsCiAgICogdGhlIGZ1dHVyZSB3aWxsIGNvbXBsZXRlIHdpdGggYW4gZXJyb3IuCiAgICoKICAgKiBJZiBbcmVjdXJzaXZlXSBpcyBmYWxzZSwgdGhlIGRlZmF1bHQsIHRoZSBsaW5rIGlzIGNyZWF0ZWQKICAgKiBvbmx5IGlmIGFsbCBkaXJlY3RvcmllcyBpbiBpdHMgcGF0aCBleGlzdC4KICAgKiBJZiBbcmVjdXJzaXZlXSBpcyB0cnVlLCBhbGwgbm9uLWV4aXN0aW5nIHBhdGgKICAgKiBjb21wb25lbnRzIGFyZSBjcmVhdGVkLiBUaGUgZGlyZWN0b3JpZXMgaW4gdGhlIHBhdGggb2YgW3RhcmdldF0gYXJlCiAgICogbm90IGFmZmVjdGVkLCB1bmxlc3MgdGhleSBhcmUgYWxzbyBpbiBbcGF0aF0uCiAgICoKICAgKiBPbiB0aGUgV2luZG93cyBwbGF0Zm9ybSwgdGhpcyBjYWxsIHdpbGwgY3JlYXRlIGEgdHJ1ZSBzeW1ib2xpYyBsaW5rCiAgICogaW5zdGVhZCBvZiBhIEp1bmN0aW9uLiBJbiBvcmRlciB0byBjcmVhdGUgYSBzeW1ib2xpYyBsaW5rIG9uIFdpbmRvd3MsIERhcnQKICAgKiBtdXN0IGJlIHJ1biBpbiBBZG1pbmlzdHJhdG9yIG1vZGUgb3IgdGhlIHN5c3RlbSBtdXN0IGhhdmUgRGV2ZWxvcGVyIE1vZGUKICAgKiBlbmFibGVkLCBvdGhlcndpc2UgYSBbRmlsZVN5c3RlbUV4Y2VwdGlvbl0gd2lsbCBiZSByYWlzZWQgd2l0aCAKICAgKiBgRVJST1JfUFJJVklMRUdFX05PVF9IRUxEYCBzZXQgYXMgdGhlIGVycm5vIHdoZW4gdGhpcyBjYWxsIGlzIG1hZGUuCiAgICoKICAgKiBPbiBvdGhlciBwbGF0Zm9ybXMsIHRoZSBwb3NpeCBzeW1saW5rKCkgY2FsbCBpcyB1c2VkIHRvIG1ha2UgYSBzeW1ib2xpYwogICAqIGxpbmsgY29udGFpbmluZyB0aGUgc3RyaW5nIFt0YXJnZXRdLiAgSWYgW3RhcmdldF0gaXMgYSByZWxhdGl2ZSBwYXRoLAogICAqIGl0IHdpbGwgYmUgaW50ZXJwcmV0ZWQgcmVsYXRpdmUgdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBsaW5rLgogICAqLwogIEZ1dHVyZTxMaW5rPiBjcmVhdGUoU3RyaW5nIHRhcmdldCwge2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGNyZWF0ZSB0aGUgbGluay4gQ2FsbGluZyBbY3JlYXRlU3luY10gb24gYW4gZXhpc3RpbmcgbGluawogICAqIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uLgogICAqCiAgICogSWYgW3JlY3Vyc2l2ZV0gaXMgZmFsc2UsIHRoZSBkZWZhdWx0LCB0aGUgbGluayBpcyBjcmVhdGVkIG9ubHkgaWYgYWxsCiAgICogZGlyZWN0b3JpZXMgaW4gaXRzIHBhdGggZXhpc3QuIElmIFtyZWN1cnNpdmVdIGlzIHRydWUsIGFsbAogICAqIG5vbi1leGlzdGluZyBwYXRoIGNvbXBvbmVudHMgYXJlIGNyZWF0ZWQuIFRoZSBkaXJlY3RvcmllcyBpbgogICAqIHRoZSBwYXRoIG9mIFt0YXJnZXRdIGFyZSBub3QgYWZmZWN0ZWQsIHVubGVzcyB0aGV5IGFyZSBhbHNvIGluIFtwYXRoXS4KICAgKgogICAqIE9uIHRoZSBXaW5kb3dzIHBsYXRmb3JtLCB0aGlzIGNhbGwgd2lsbCBjcmVhdGUgYSB0cnVlIHN5bWJvbGljIGxpbmsKICAgKiBpbnN0ZWFkIG9mIGEgSnVuY3Rpb24uIEluIG9yZGVyIHRvIGNyZWF0ZSBhIHN5bWJvbGljIGxpbmsgb24gV2luZG93cywgRGFydAogICAqIG11c3QgYmUgcnVuIGluIEFkbWluaXN0cmF0b3IgbW9kZSBvciB0aGUgc3lzdGVtIG11c3QgaGF2ZSBEZXZlbG9wZXIgTW9kZQogICAqIGVuYWJsZWQsIG90aGVyd2lzZSBhIFtGaWxlU3lzdGVtRXhjZXB0aW9uXSB3aWxsIGJlIHJhaXNlZCB3aXRoIAogICAqIGBFUlJPUl9QUklWSUxFR0VfTk9UX0hFTERgIHNldCBhcyB0aGUgZXJybm8gd2hlbiB0aGlzIGNhbGwgaXMgbWFkZS4KICAgKgogICAqIE9uIG90aGVyIHBsYXRmb3JtcywgdGhlIHBvc2l4IHN5bWxpbmsoKSBjYWxsIGlzIHVzZWQgdG8gbWFrZSBhIHN5bWJvbGljCiAgICogbGluayBjb250YWluaW5nIHRoZSBzdHJpbmcgW3RhcmdldF0uICBJZiBbdGFyZ2V0XSBpcyBhIHJlbGF0aXZlIHBhdGgsCiAgICogaXQgd2lsbCBiZSBpbnRlcnByZXRlZCByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGxpbmsuCiAgICovCiAgdm9pZCBjcmVhdGVTeW5jKFN0cmluZyB0YXJnZXQsIHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KTsKCiAgLyoqCiAgICogU3luY2hyb25vdXNseSB1cGRhdGVzIHRoZSBsaW5rLiBDYWxsaW5nIFt1cGRhdGVTeW5jXSBvbiBhIG5vbi1leGlzdGluZyBsaW5rCiAgICogd2lsbCB0aHJvdyBhbiBleGNlcHRpb24uCiAgICovCiAgdm9pZCB1cGRhdGVTeW5jKFN0cmluZyB0YXJnZXQpOwoKICAvKioKICAgKiBVcGRhdGVzIHRoZSBsaW5rLiBSZXR1cm5zIGEgWzpGdXR1cmU8TGluaz46XSB0aGF0IGNvbXBsZXRlcyB3aXRoIHRoZQogICAqIGxpbmsgd2hlbiBpdCBoYXMgYmVlbiB1cGRhdGVkLiAgQ2FsbGluZyBbdXBkYXRlXSBvbiBhIG5vbi1leGlzdGluZyBsaW5rCiAgICogd2lsbCBjb21wbGV0ZSBpdHMgcmV0dXJuZWQgZnV0dXJlIHdpdGggYW4gZXhjZXB0aW9uLgogICAqLwogIEZ1dHVyZTxMaW5rPiB1cGRhdGUoU3RyaW5nIHRhcmdldCk7CgogIEZ1dHVyZTxTdHJpbmc+IHJlc29sdmVTeW1ib2xpY0xpbmtzKCk7CgogIFN0cmluZyByZXNvbHZlU3ltYm9saWNMaW5rc1N5bmMoKTsKCiAgLyoqCiAgICogUmVuYW1lcyB0aGlzIGxpbmsuIFJldHVybnMgYSBgRnV0dXJlPExpbms+YCB0aGF0IGNvbXBsZXRlcwogICAqIHdpdGggYSBbTGlua10gaW5zdGFuY2UgZm9yIHRoZSByZW5hbWVkIGxpbmsuCiAgICoKICAgKiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBsaW5rLCB0aGF0IGxpbmsgaXMKICAgKiByZXBsYWNlZC4gSWYgW25ld1BhdGhdIGlkZW50aWZpZXMgYW4gZXhpc3RpbmcgZmlsZSBvciBkaXJlY3RvcnksCiAgICogdGhlIG9wZXJhdGlvbiBmYWlscyBhbmQgdGhlIGZ1dHVyZSBjb21wbGV0ZXMgd2l0aCBhbiBleGNlcHRpb24uCiAgICovCiAgRnV0dXJlPExpbms+IHJlbmFtZShTdHJpbmcgbmV3UGF0aCk7CgogIC8qKgogICAqIFN5bmNocm9ub3VzbHkgcmVuYW1lcyB0aGlzIGxpbmsuIFJldHVybnMgYSBbTGlua10KICAgKiBpbnN0YW5jZSBmb3IgdGhlIHJlbmFtZWQgbGluay4KICAgKgogICAqIElmIFtuZXdQYXRoXSBpZGVudGlmaWVzIGFuIGV4aXN0aW5nIGxpbmssIHRoYXQgbGluayBpcwogICAqIHJlcGxhY2VkLiBJZiBbbmV3UGF0aF0gaWRlbnRpZmllcyBhbiBleGlzdGluZyBmaWxlIG9yIGRpcmVjdG9yeQogICAqIHRoZSBvcGVyYXRpb24gZmFpbHMgYW5kIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICovCiAgTGluayByZW5hbWVTeW5jKFN0cmluZyBuZXdQYXRoKTsKCiAgLyoqCiAgICogUmV0dXJucyBhIFtMaW5rXSBpbnN0YW5jZSB3aG9zZSBwYXRoIGlzIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIFt0aGlzXS4KICAgKgogICAqIFRoZSBhYnNvbHV0ZSBwYXRoIGlzIGNvbXB1dGVkIGJ5IHByZWZpeGluZwogICAqIGEgcmVsYXRpdmUgcGF0aCB3aXRoIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBhbmQgcmV0dXJuaW5nCiAgICogYW4gYWJzb2x1dGUgcGF0aCB1bmNoYW5nZWQuCiAgICovCiAgTGluayBnZXQgYWJzb2x1dGU7CgogIC8qKgogICAqIEdldHMgdGhlIHRhcmdldCBvZiB0aGUgbGluay4gUmV0dXJucyBhIGZ1dHVyZSB0aGF0IGNvbXBsZXRlcyB3aXRoCiAgICogdGhlIHBhdGggdG8gdGhlIHRhcmdldC4KICAgKgogICAqIElmIHRoZSByZXR1cm5lZCB0YXJnZXQgaXMgYSByZWxhdGl2ZSBwYXRoLCBpdCBpcyByZWxhdGl2ZSB0byB0aGUKICAgKiBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgbGluay4KICAgKgogICAqIElmIHRoZSBsaW5rIGRvZXMgbm90IGV4aXN0LCBvciBpcyBub3QgYSBsaW5rLCB0aGUgZnV0dXJlIGNvbXBsZXRlcyB3aXRoCiAgICogYSBGaWxlU3lzdGVtRXhjZXB0aW9uLgogICAqLwogIEZ1dHVyZTxTdHJpbmc+IHRhcmdldCgpOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IGdldHMgdGhlIHRhcmdldCBvZiB0aGUgbGluay4gUmV0dXJucyB0aGUgcGF0aCB0byB0aGUgdGFyZ2V0LgogICAqCiAgICogSWYgdGhlIHJldHVybmVkIHRhcmdldCBpcyBhIHJlbGF0aXZlIHBhdGgsIGl0IGlzIHJlbGF0aXZlIHRvIHRoZQogICAqIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBsaW5rLgogICAqCiAgICogSWYgdGhlIGxpbmsgZG9lcyBub3QgZXhpc3QsIG9yIGlzIG5vdCBhIGxpbmssIHRocm93cyBhIEZpbGVTeXN0ZW1FeGNlcHRpb24uCiAgICovCiAgU3RyaW5nIHRhcmdldFN5bmMoKTsKfQoKY2xhc3MgX0xpbmsgZXh0ZW5kcyBGaWxlU3lzdGVtRW50aXR5IGltcGxlbWVudHMgTGluayB7CiAgU3RyaW5nIF9wYXRoOwogIFVpbnQ4TGlzdCBfcmF3UGF0aDsKCiAgX0xpbmsoU3RyaW5nIHBhdGgpIHsKICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKHBhdGgsICdwYXRoJyk7CiAgICBfcGF0aCA9IHBhdGg7CiAgICBfcmF3UGF0aCA9IEZpbGVTeXN0ZW1FbnRpdHkuX3RvVXRmOEFycmF5KHBhdGgpOwogIH0KCiAgX0xpbmsuZnJvbVJhd1BhdGgoVWludDhMaXN0IHJhd1BhdGgpIHsKICAgIF9yYXdQYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdG9OdWxsVGVybWluYXRlZFV0ZjhBcnJheShyYXdQYXRoKTsKICAgIF9wYXRoID0gRmlsZVN5c3RlbUVudGl0eS5fdG9TdHJpbmdGcm9tVXRmOEFycmF5KHJhd1BhdGgpOwogIH0KCiAgU3RyaW5nIGdldCBwYXRoID0+IF9wYXRoOwoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiTGluazogJyRwYXRoJyI7CgogIEZ1dHVyZTxib29sPiBleGlzdHMoKSA9PiBGaWxlU3lzdGVtRW50aXR5Ll9pc0xpbmtSYXcoX3Jhd1BhdGgpOwoKICBib29sIGV4aXN0c1N5bmMoKSA9PiBGaWxlU3lzdGVtRW50aXR5Ll9pc0xpbmtSYXdTeW5jKF9yYXdQYXRoKTsKCiAgTGluayBnZXQgYWJzb2x1dGUgPT4gbmV3IExpbmsuZnJvbVJhd1BhdGgoX3Jhd0Fic29sdXRlUGF0aCk7CgogIEZ1dHVyZTxMaW5rPiBjcmVhdGUoU3RyaW5nIHRhcmdldCwge2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIHZhciByZXN1bHQgPQogICAgICAgIHJlY3Vyc2l2ZSA/IHBhcmVudC5jcmVhdGUocmVjdXJzaXZlOiB0cnVlKSA6IG5ldyBGdXR1cmUudmFsdWUobnVsbCk7CiAgICByZXR1cm4gcmVzdWx0CiAgICAgICAgLnRoZW4oKF8pID0+IF9GaWxlLl9kaXNwYXRjaFdpdGhOYW1lc3BhY2UoCiAgICAgICAgICAgIF9JT1NlcnZpY2UuZmlsZUNyZWF0ZUxpbmssIFtudWxsLCBfcmF3UGF0aCwgdGFyZ2V0XSkpCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UoCiAgICAgICAgICAgIHJlc3BvbnNlLCAiQ2Fubm90IGNyZWF0ZSBsaW5rIHRvIHRhcmdldCAnJHRhcmdldCciLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgdm9pZCBjcmVhdGVTeW5jKFN0cmluZyB0YXJnZXQsIHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSB7CiAgICBpZiAocmVjdXJzaXZlKSB7CiAgICAgIHBhcmVudC5jcmVhdGVTeW5jKHJlY3Vyc2l2ZTogdHJ1ZSk7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX0ZpbGUuX2NyZWF0ZUxpbmsoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCwgdGFyZ2V0KTsKICAgIHRocm93SWZFcnJvcihyZXN1bHQsICJDYW5ub3QgY3JlYXRlIGxpbmsiLCBwYXRoKTsKICB9CgogIHZvaWQgdXBkYXRlU3luYyhTdHJpbmcgdGFyZ2V0KSB7CiAgICAvLyBUT0RPKDEyNDE0KTogUmVwbGFjZSB3aXRoIGF0b21pYyB1cGRhdGUsIHdoZXJlIHN1cHBvcnRlZCBieSBwbGF0Zm9ybS4KICAgIC8vIEF0b21pY2FsbHkgY2hhbmdpbmcgYSBsaW5rIGNhbiBiZSBkb25lIGJ5IGNyZWF0aW5nIHRoZSBuZXcgbGluaywgd2l0aAogICAgLy8gYSBkaWZmZXJlbnQgbmFtZSwgYW5kIHVzaW5nIHRoZSByZW5hbWUoKSBwb3NpeCBjYWxsIHRvIG1vdmUgaXQgdG8KICAgIC8vIHRoZSBvbGQgbmFtZSBhdG9taWNhbGx5LgogICAgZGVsZXRlU3luYygpOwogICAgY3JlYXRlU3luYyh0YXJnZXQpOwogIH0KCiAgRnV0dXJlPExpbms+IHVwZGF0ZShTdHJpbmcgdGFyZ2V0KSB7CiAgICAvLyBUT0RPKDEyNDE0KTogUmVwbGFjZSB3aXRoIGF0b21pYyB1cGRhdGUsIHdoZXJlIHN1cHBvcnRlZCBieSBwbGF0Zm9ybS4KICAgIC8vIEF0b21pY2FsbHkgY2hhbmdpbmcgYSBsaW5rIGNhbiBiZSBkb25lIGJ5IGNyZWF0aW5nIHRoZSBuZXcgbGluaywgd2l0aAogICAgLy8gYSBkaWZmZXJlbnQgbmFtZSwgYW5kIHVzaW5nIHRoZSByZW5hbWUoKSBwb3NpeCBjYWxsIHRvIG1vdmUgaXQgdG8KICAgIC8vIHRoZSBvbGQgbmFtZSBhdG9taWNhbGx5LgogICAgcmV0dXJuIGRlbGV0ZSgpLnRoZW48TGluaz4oKF8pID0+IGNyZWF0ZSh0YXJnZXQpKTsKICB9CgogIEZ1dHVyZTxMaW5rPiBfZGVsZXRlKHtib29sIHJlY3Vyc2l2ZTogZmFsc2V9KSB7CiAgICBpZiAocmVjdXJzaXZlKSB7CiAgICAgIHJldHVybiBuZXcgRGlyZWN0b3J5LmZyb21SYXdQYXRoKF9yYXdQYXRoKQogICAgICAgICAgLmRlbGV0ZShyZWN1cnNpdmU6IHRydWUpCiAgICAgICAgICAudGhlbigoXykgPT4gdGhpcyk7CiAgICB9CiAgICByZXR1cm4gX0ZpbGUuX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZSgKICAgICAgICBfSU9TZXJ2aWNlLmZpbGVEZWxldGVMaW5rLCBbbnVsbCwgX3Jhd1BhdGhdKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpIHsKICAgICAgICB0aHJvdyBfZXhjZXB0aW9uRnJvbVJlc3BvbnNlKHJlc3BvbnNlLCAiQ2Fubm90IGRlbGV0ZSBsaW5rIiwgcGF0aCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXM7CiAgICB9KTsKICB9CgogIHZvaWQgX2RlbGV0ZVN5bmMoe2Jvb2wgcmVjdXJzaXZlOiBmYWxzZX0pIHsKICAgIGlmIChyZWN1cnNpdmUpIHsKICAgICAgcmV0dXJuIG5ldyBEaXJlY3RvcnkuZnJvbVJhd1BhdGgoX3Jhd1BhdGgpLmRlbGV0ZVN5bmMocmVjdXJzaXZlOiB0cnVlKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfRmlsZS5fZGVsZXRlTGlua05hdGl2ZShfTmFtZXNwYWNlLl9uYW1lc3BhY2UsIF9yYXdQYXRoKTsKICAgIHRocm93SWZFcnJvcihyZXN1bHQsICJDYW5ub3QgZGVsZXRlIGxpbmsiLCBwYXRoKTsKICB9CgogIEZ1dHVyZTxMaW5rPiByZW5hbWUoU3RyaW5nIG5ld1BhdGgpIHsKICAgIHJldHVybiBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgIF9JT1NlcnZpY2UuZmlsZVJlbmFtZUxpbmssIFtudWxsLCBfcmF3UGF0aCwgbmV3UGF0aF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UoCiAgICAgICAgICAgIHJlc3BvbnNlLCAiQ2Fubm90IHJlbmFtZSBsaW5rIHRvICckbmV3UGF0aCciLCBwYXRoKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IExpbmsobmV3UGF0aCk7CiAgICB9KTsKICB9CgogIExpbmsgcmVuYW1lU3luYyhTdHJpbmcgbmV3UGF0aCkgewogICAgdmFyIHJlc3VsdCA9IF9GaWxlLl9yZW5hbWVMaW5rKF9OYW1lc3BhY2UuX25hbWVzcGFjZSwgX3Jhd1BhdGgsIG5ld1BhdGgpOwogICAgdGhyb3dJZkVycm9yKHJlc3VsdCwgIkNhbm5vdCByZW5hbWUgbGluayAnJHBhdGgnIHRvICckbmV3UGF0aCciKTsKICAgIHJldHVybiBuZXcgTGluayhuZXdQYXRoKTsKICB9CgogIEZ1dHVyZTxTdHJpbmc+IHRhcmdldCgpIHsKICAgIHJldHVybiBfRmlsZS5fZGlzcGF0Y2hXaXRoTmFtZXNwYWNlKAogICAgICAgIF9JT1NlcnZpY2UuZmlsZUxpbmtUYXJnZXQsIFtudWxsLCBfcmF3UGF0aF0pLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSkgewogICAgICAgIHRocm93IF9leGNlcHRpb25Gcm9tUmVzcG9uc2UoCiAgICAgICAgICAgIHJlc3BvbnNlLCAiQ2Fubm90IGdldCB0YXJnZXQgb2YgbGluayIsIHBhdGgpOwogICAgICB9CiAgICAgIHJldHVybiByZXNwb25zZTsKICAgIH0pOwogIH0KCiAgU3RyaW5nIHRhcmdldFN5bmMoKSB7CiAgICB2YXIgcmVzdWx0ID0gX0ZpbGUuX2xpbmtUYXJnZXQoX05hbWVzcGFjZS5fbmFtZXNwYWNlLCBfcmF3UGF0aCk7CiAgICB0aHJvd0lmRXJyb3IocmVzdWx0LCAiQ2Fubm90IHJlYWQgbGluayIsIHBhdGgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyB0aHJvd0lmRXJyb3IoT2JqZWN0IHJlc3VsdCwgU3RyaW5nIG1zZywgW1N0cmluZyBwYXRoID0gIiJdKSB7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24obXNnLCBwYXRoLCByZXN1bHQpOwogICAgfQogIH0KCiAgYm9vbCBfaXNFcnJvclJlc3BvbnNlKHJlc3BvbnNlKSB7CiAgICByZXR1cm4gcmVzcG9uc2UgaXMgTGlzdCAmJiByZXNwb25zZVswXSAhPSBfc3VjY2Vzc1Jlc3BvbnNlOwogIH0KCiAgX2V4Y2VwdGlvbkZyb21SZXNwb25zZShyZXNwb25zZSwgU3RyaW5nIG1lc3NhZ2UsIFN0cmluZyBwYXRoKSB7CiAgICBhc3NlcnQoX2lzRXJyb3JSZXNwb25zZShyZXNwb25zZSkpOwogICAgc3dpdGNoIChyZXNwb25zZVtfZXJyb3JSZXNwb25zZUVycm9yVHlwZV0pIHsKICAgICAgY2FzZSBfaWxsZWdhbEFyZ3VtZW50UmVzcG9uc2U6CiAgICAgICAgcmV0dXJuIG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICAgIGNhc2UgX29zRXJyb3JSZXNwb25zZToKICAgICAgICB2YXIgZXJyID0gbmV3IE9TRXJyb3IocmVzcG9uc2VbX29zRXJyb3JSZXNwb25zZU1lc3NhZ2VdLAogICAgICAgICAgICByZXNwb25zZVtfb3NFcnJvclJlc3BvbnNlRXJyb3JDb2RlXSk7CiAgICAgICAgcmV0dXJuIG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKG1lc3NhZ2UsIHBhdGgsIGVycik7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIG5ldyBFeGNlcHRpb24oIlVua25vd24gZXJyb3IiKTsKICAgIH0KICB9Cn0KgS4ATk48AREBBDYDBBoyBhwGHB43HR4GJwQBHDAmKwQBBh4FSkUFSCAGPwEGTTwtBT8wM0kzBUlQTkVJBU1LSwY/AQZNHgVLQEJMBUlQTkVJBU1LSwY7AQZRHgYiAQZKTToGJgEpASUBBkAyBTxGRQYnAQY3JAU8RTUGIwEGSgUwRyEGFQEGRx0FRiQFTRwGGwEGUAVGJAVRBhcCATcQFgEXLhI0BAEpRT4EARwBKAFCAUIBPwFAEU0SM0IbKCZHCBMIBAE8FSoGTTYEASNNTUkgEhgEASdNTUkgNwQBMhUxIx4GKUcoTAgTCAQBLhVOBks2BAEoKVAoJkEIIAgEASRORh4EARwpRygmOggXCAQBGEU0EwQBRx04BgQBJEAEAUIoMSUkHUEyPA8vBgQCARFkYXJ0OmlvL2xpbmsuZGFydDJvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vbmFtZXNwYWNlX2ltcGwuZGFydIR+Ly8gQ29weXJpZ2h0IChjKSAyMDE3LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8vIEVhY2ggSXNvbGF0ZSBtYXkgcnVuIGluIGEgZGlmZmVyZW50ICJuYW1lc3BhY2UiLCB3aGljaCBwcm92aWRlcyB0aGUgc2NvcGUgaW4KLy8gd2hpY2ggZmlsZSBwYXRocyBhcmUgcmVzb2x2ZWQuCmFic3RyYWN0IGNsYXNzIF9OYW1lc3BhY2UgewogIC8vIFRoaXMgZ2V0dGVyIGRvZXMgbm90IGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIHVuZGVybHlpbmcgbmF0aXZlCiAgLy8gb2JqZWN0LiBJdCBjYW5ub3QgYmUgcGFzc2VkIGluIGEgZGlzcGF0Y2ggbWVzc2FnZSB0byB0aGUgSU9TZXJ2aWNlIHRocmVhZC4KICBleHRlcm5hbCBzdGF0aWMgX05hbWVzcGFjZSBnZXQgX25hbWVzcGFjZTsKCiAgLy8gVGhpcyBnZXR0ZXIgZG9lcyBpbmNyZWFzZSB0aGUgcmVmZXJlbmNlIGNvdW50IG9uIHRoZSB1bmRlcmx5aW5nIG5hdGl2ZQogIC8vIG9iamVjdC4gSXQgbXVzdCBiZSBwYXNzZWQgaW4gYSBkaXNwYXRjaCBtZXNzYWdlIHRvIHRoZSBJT1NlcnZpY2UgdGhyZWFkLgogIGV4dGVybmFsIHN0YXRpYyBpbnQgZ2V0IF9uYW1lc3BhY2VQb2ludGVyOwoKICAvLyBUaGlzIHNldHMgdXAgdGhlIElzb2xhdGUncyBuYW1lc3BhY2UuIEl0IHNob3VsZCBiZSBzZXQgdXAgYnkgdGhlIGVtYmVkZGVyLgogIC8vIElmIGl0IGlzIG5vdCBzZXQgdXAgYnkgdGhlIGVtYmVkZGVyLCByZWxhdGl2ZSBwYXRocyB3aWxsIGJlIHJlc29sdmVkCiAgLy8gcmVsYXRpdmUgdG8gdGhlIHByb2Nlc3MncyBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IGFuZCBhYnNvbHV0ZSBwYXRocyB3aWxsCiAgLy8gYmUgbGVmdCByZWxhdGl2ZSB0byB0aGUgZmlsZSBzeXN0ZW0gcm9vdC4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZXh0ZXJuYWwgc3RhdGljIHZvaWQgX3NldHVwTmFtZXNwYWNlKHZhciBuYW1lc3BhY2UpOwp9ChoATk48AREBUCIcUFAtAUxOLQFQSlEvHDcCARtkYXJ0OmlvL25hbWVzcGFjZV9pbXBsLmRhcnQtb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL292ZXJyaWRlcy5kYXJ0uqUvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKZmluYWwgX2lvT3ZlcnJpZGVzVG9rZW4gPSBuZXcgT2JqZWN0KCk7Cgpjb25zdCBfYXN5bmNSdW5ab25lZCA9IHJ1blpvbmVkOwoKLy8vIFRoaXMgY2xhc3MgZmFjaWxpdGF0ZXMgb3ZlcnJpZGluZyB2YXJpb3VzIEFQSXMgb2YgZGFydDppbyB3aXRoIG1vY2sKLy8vIGltcGxlbWVudGF0aW9ucy4KLy8vCi8vLyBUaGlzIGFic3RyYWN0IGJhc2UgY2xhc3Mgc2hvdWxkIGJlIGV4dGVuZGVkIHdpdGggb3ZlcnJpZGVzIGZvciB0aGUKLy8vIG9wZXJhdGlvbnMgbmVlZGVkIHRvIGNvbnN0cnVjdCBtb2Nrcy4gVGhlIGltcGxlbWVudGF0aW9ucyBpbiB0aGlzIGJhc2UgY2xhc3MKLy8vIGRlZmF1bHQgdG8gdGhlIGFjdHVhbCBkYXJ0OmlvIGltcGxlbWVudGF0aW9uLiBGb3IgZXhhbXBsZToKLy8vCi8vLyBgYGAKLy8vIGNsYXNzIE15RGlyZWN0b3J5IGltcGxlbWVudHMgRGlyZWN0b3J5IHsKLy8vICAgLi4uCi8vLyAgIC8vIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEaXJlY3RvcnkgaW50ZXJmYWNlCi8vLyAgIC4uLgovLy8gfQovLy8KLy8vIG1haW4oKSB7Ci8vLyAgIElPT3ZlcnJpZGVzLnJ1blpvbmVkKCgpIHsKLy8vICAgICAuLi4KLy8vICAgICAvLyBPcGVyYXRpb25zIHdpbGwgdXNlIE15RGlyZWN0b3J5IGluc3RlYWQgb2YgZGFydDppbydzIERpcmVjdG9yeQovLy8gICAgIC8vIGltcGxlbWVudGF0aW9uIHdoZW5ldmVyIERpcmVjdG9yeSBpcyB1c2VkLgovLy8gICAgIC4uLgovLy8gICB9LCBjcmVhdGVEaXJlY3Rvcnk6IChTdHJpbmcgcGF0aCkgPT4gbmV3IE15RGlyZWN0b3J5KHBhdGgpKTsKLy8vIH0KLy8vIGBgYAphYnN0cmFjdCBjbGFzcyBJT092ZXJyaWRlcyB7CiAgc3RhdGljIElPT3ZlcnJpZGVzIF9nbG9iYWw7CgogIHN0YXRpYyBJT092ZXJyaWRlcyBnZXQgY3VycmVudCB7CiAgICByZXR1cm4gWm9uZS5jdXJyZW50W19pb092ZXJyaWRlc1Rva2VuXSA/PyBfZ2xvYmFsOwogIH0KCiAgLy8vIFRoZSBbSU9PdmVycmlkZXNdIHRvIHVzZSBpbiB0aGUgcm9vdCBbWm9uZV0uCiAgLy8vCiAgLy8vIFRoZXNlIGFyZSB0aGUgW0lPT3ZlcnJpZGVzXSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgcm9vdCBab25lLCBhbmQgaW4KICAvLy8gWm9uZSdzIHRoYXQgZG8gbm90IHNldCBbSU9PdmVycmlkZXNdIGFuZCB3aG9zZSBhbmNlc3RvcnMgdXAgdG8gdGhlIHJvb3QKICAvLy8gWm9uZSBkbyBub3Qgc2V0IFtJT092ZXJyaWRlc10uCiAgc3RhdGljIHNldCBnbG9iYWwoSU9PdmVycmlkZXMgb3ZlcnJpZGVzKSB7CiAgICBfZ2xvYmFsID0gb3ZlcnJpZGVzOwogIH0KCiAgLy8vIFJ1bnMgW2JvZHldIGluIGEgZnJlc2ggW1pvbmVdIHVzaW5nIHRoZSBwcm92aWRlZCBvdmVycmlkZXMuCiAgLy8vCiAgLy8vIFNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgY29ycmVzcG9uZGluZyBtZXRob2RzIG9mIElPT3ZlcnJpZGVzIGZvcgogIC8vLyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IHRoZSBvcHRpb25hbCBhcmd1bWVudHMgZG8uCiAgc3RhdGljIFIgcnVuWm9uZWQ8Uj4oUiBib2R5KCksCiAgICAgIHsKICAgICAgLy8gRGlyZWN0b3J5CiAgICAgIERpcmVjdG9yeSBGdW5jdGlvbihTdHJpbmcpIGNyZWF0ZURpcmVjdG9yeSwKICAgICAgRGlyZWN0b3J5IEZ1bmN0aW9uKCkgZ2V0Q3VycmVudERpcmVjdG9yeSwKICAgICAgdm9pZCBGdW5jdGlvbihTdHJpbmcpIHNldEN1cnJlbnREaXJlY3RvcnksCiAgICAgIERpcmVjdG9yeSBGdW5jdGlvbigpIGdldFN5c3RlbVRlbXBEaXJlY3RvcnksCgogICAgICAvLyBGaWxlCiAgICAgIEZpbGUgRnVuY3Rpb24oU3RyaW5nKSBjcmVhdGVGaWxlLAoKICAgICAgLy8gRmlsZVN0YXQKICAgICAgRnV0dXJlPEZpbGVTdGF0PiBGdW5jdGlvbihTdHJpbmcpIHN0YXQsCiAgICAgIEZpbGVTdGF0IEZ1bmN0aW9uKFN0cmluZykgc3RhdFN5bmMsCgogICAgICAvLyBGaWxlU3lzdGVtRW50aXR5CiAgICAgIEZ1dHVyZTxib29sPiBGdW5jdGlvbihTdHJpbmcsIFN0cmluZykgZnNlSWRlbnRpY2FsLAogICAgICBib29sIEZ1bmN0aW9uKFN0cmluZywgU3RyaW5nKSBmc2VJZGVudGljYWxTeW5jLAogICAgICBGdXR1cmU8RmlsZVN5c3RlbUVudGl0eVR5cGU+IEZ1bmN0aW9uKFN0cmluZywgYm9vbCkgZnNlR2V0VHlwZSwKICAgICAgRmlsZVN5c3RlbUVudGl0eVR5cGUgRnVuY3Rpb24oU3RyaW5nLCBib29sKSBmc2VHZXRUeXBlU3luYywKCiAgICAgIC8vIF9GaWxlU3lzdGVtV2F0Y2hlcgogICAgICBTdHJlYW08RmlsZVN5c3RlbUV2ZW50PiBGdW5jdGlvbihTdHJpbmcsIGludCwgYm9vbCkgZnNXYXRjaCwKICAgICAgYm9vbCBGdW5jdGlvbigpIGZzV2F0Y2hJc1N1cHBvcnRlZCwKCiAgICAgIC8vIExpbmsKICAgICAgTGluayBGdW5jdGlvbihTdHJpbmcpIGNyZWF0ZUxpbmssCgogICAgICAvLyBTb2NrZXQKICAgICAgRnV0dXJlPFNvY2tldD4gRnVuY3Rpb24oZHluYW1pYywgaW50LAogICAgICAgICAgICAgIHtkeW5hbWljIHNvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KQogICAgICAgICAgc29ja2V0Q29ubmVjdCwKICAgICAgRnV0dXJlPENvbm5lY3Rpb25UYXNrPFNvY2tldD4+IEZ1bmN0aW9uKGR5bmFtaWMsIGludCwKICAgICAgICAgICAgICB7ZHluYW1pYyBzb3VyY2VBZGRyZXNzfSkKICAgICAgICAgIHNvY2tldFN0YXJ0Q29ubmVjdCwKCiAgICAgIC8vIE9wdGlvbmFsIFpvbmUgcGFyYW1ldGVycwogICAgICBab25lU3BlY2lmaWNhdGlvbiB6b25lU3BlY2lmaWNhdGlvbiwKICAgICAgRnVuY3Rpb24gb25FcnJvcn0pIHsKICAgIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IG5ldyBfSU9PdmVycmlkZXNTY29wZSgKICAgICAgLy8gRGlyZWN0b3J5CiAgICAgIGNyZWF0ZURpcmVjdG9yeSwKICAgICAgZ2V0Q3VycmVudERpcmVjdG9yeSwKICAgICAgc2V0Q3VycmVudERpcmVjdG9yeSwKICAgICAgZ2V0U3lzdGVtVGVtcERpcmVjdG9yeSwKCiAgICAgIC8vIEZpbGUKICAgICAgY3JlYXRlRmlsZSwKCiAgICAgIC8vIEZpbGVTdGF0CiAgICAgIHN0YXQsCiAgICAgIHN0YXRTeW5jLAoKICAgICAgLy8gRmlsZVN5c3RlbUVudGl0eQogICAgICBmc2VJZGVudGljYWwsCiAgICAgIGZzZUlkZW50aWNhbFN5bmMsCiAgICAgIGZzZUdldFR5cGUsCiAgICAgIGZzZUdldFR5cGVTeW5jLAoKICAgICAgLy8gX0ZpbGVTeXN0ZW1XYXRjaGVyCiAgICAgIGZzV2F0Y2gsCiAgICAgIGZzV2F0Y2hJc1N1cHBvcnRlZCwKCiAgICAgIC8vIExpbmsKICAgICAgY3JlYXRlTGluaywKCiAgICAgIC8vIFNvY2tldAogICAgICBzb2NrZXRDb25uZWN0LAogICAgICBzb2NrZXRTdGFydENvbm5lY3QsCiAgICApOwogICAgcmV0dXJuIF9hc3luY1J1blpvbmVkPFI+KGJvZHksCiAgICAgICAgem9uZVZhbHVlczoge19pb092ZXJyaWRlc1Rva2VuOiBvdmVycmlkZXN9LAogICAgICAgIHpvbmVTcGVjaWZpY2F0aW9uOiB6b25lU3BlY2lmaWNhdGlvbiwKICAgICAgICBvbkVycm9yOiBvbkVycm9yKTsKICB9CgogIC8vLyBSdW5zIFtib2R5XSBpbiBhIGZyZXNoIFtab25lXSB1c2luZyB0aGUgb3ZlcnJpZGVzIGZvdW5kIGluIFtvdmVycmlkZXNdLgogIC8vLwogIC8vLyBOb3RlIHRoYXQgW292ZXJyaWRlc10gc2hvdWxkIGJlIGFuIGluc3RhbmNlIG9mIGEgY2xhc3MgdGhhdCBleHRlbmRzCiAgLy8vIFtJT092ZXJyaWRlc10uCiAgc3RhdGljIFIgcnVuV2l0aElPT3ZlcnJpZGVzPFI+KFIgYm9keSgpLCBJT092ZXJyaWRlcyBvdmVycmlkZXMsCiAgICAgIHtab25lU3BlY2lmaWNhdGlvbiB6b25lU3BlY2lmaWNhdGlvbiwgRnVuY3Rpb24gb25FcnJvcn0pIHsKICAgIHJldHVybiBfYXN5bmNSdW5ab25lZDxSPihib2R5LAogICAgICAgIHpvbmVWYWx1ZXM6IHtfaW9PdmVycmlkZXNUb2tlbjogb3ZlcnJpZGVzfSwKICAgICAgICB6b25lU3BlY2lmaWNhdGlvbjogem9uZVNwZWNpZmljYXRpb24sCiAgICAgICAgb25FcnJvcjogb25FcnJvcik7CiAgfQoKICAvLyBEaXJlY3RvcnkKCiAgLy8vIENyZWF0ZXMgYSBuZXcgW0RpcmVjdG9yeV0gb2JqZWN0IGZvciB0aGUgZ2l2ZW4gW3BhdGhdLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYG5ldyBEaXJlY3RvcnkoKWAgYW5kIGBuZXcgRGlyZWN0b3J5LmZyb21VcmkoKWAuCiAgRGlyZWN0b3J5IGNyZWF0ZURpcmVjdG9yeShTdHJpbmcgcGF0aCkgPT4gbmV3IF9EaXJlY3RvcnkocGF0aCk7CgogIC8vLyBSZXR1cm5zIHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gdGhlIHN0YXRpYyBnZXR0ZXIgYERpcmVjdG9yeS5jdXJyZW50YAogIERpcmVjdG9yeSBnZXRDdXJyZW50RGlyZWN0b3J5KCkgPT4gX0RpcmVjdG9yeS5jdXJyZW50OwoKICAvLy8gU2V0cyB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSB0byBiZSBbcGF0aF0uCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyB0aGUgc2V0dGVyIGBEaXJlY3RvcnkuY3VycmVudGAuCiAgdm9pZCBzZXRDdXJyZW50RGlyZWN0b3J5KFN0cmluZyBwYXRoKSB7CiAgICBfRGlyZWN0b3J5LmN1cnJlbnQgPSBwYXRoOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIHN5c3RlbSB0ZW1wb3JhcnkgZGlyZWN0b3J5LgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYERpcmVjdG9yeS5zeXN0ZW1UZW1wYC4KICBEaXJlY3RvcnkgZ2V0U3lzdGVtVGVtcERpcmVjdG9yeSgpID0+IF9EaXJlY3Rvcnkuc3lzdGVtVGVtcDsKCiAgLy8gRmlsZQoKICAvLy8gQ3JlYXRlcyBhIG5ldyBbRmlsZV0gb2JqZWN0IGZvciB0aGUgZ2l2ZW4gW3BhdGhdLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYG5ldyBGaWxlKClgIGFuZCBgbmV3IEZpbGUuZnJvbVVyaSgpYC4KICBGaWxlIGNyZWF0ZUZpbGUoU3RyaW5nIHBhdGgpID0+IG5ldyBfRmlsZShwYXRoKTsKCiAgLy8gRmlsZVN0YXQKCiAgLy8vIEFzeW5jaHJvbm91c2x5IHJldHVybnMgW0ZpbGVTdGF0XSBpbmZvcm1hdGlvbiBmb3IgW3BhdGhdLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9uIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYEZpbGVTdGF0LnN0YXQoKWAuCiAgRnV0dXJlPEZpbGVTdGF0PiBzdGF0KFN0cmluZyBwYXRoKSB7CiAgICByZXR1cm4gRmlsZVN0YXQuX3N0YXQocGF0aCk7CiAgfQoKICAvLy8gUmV0dXJucyBbRmlsZVN0YXRdIGluZm9ybWF0aW9uIGZvciBbcGF0aF0uCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgRmlsZVN0YXQuc3RhdFN5bmMoKWAuCiAgRmlsZVN0YXQgc3RhdFN5bmMoU3RyaW5nIHBhdGgpIHsKICAgIHJldHVybiBGaWxlU3RhdC5fc3RhdFN5bmNJbnRlcm5hbChwYXRoKTsKICB9CgogIC8vIEZpbGVTeXN0ZW1FbnRpdHkKCiAgLy8vIEFzeW5jaHJvbm91c2x5IHJldHVybnMgYHRydWVgIGlmIFtwYXRoMV0gYW5kIFtwYXRoMl0gYXJlIHBhdGhzIHRvIHRoZQogIC8vLyBzYW1lIGZpbGUgc3lzdGVtIG9iamVjdC4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBGaWxlU3lzdGVtRW50aXR5LmlkZW50aWNhbGAuCiAgRnV0dXJlPGJvb2w+IGZzZUlkZW50aWNhbChTdHJpbmcgcGF0aDEsIFN0cmluZyBwYXRoMikgewogICAgcmV0dXJuIEZpbGVTeXN0ZW1FbnRpdHkuX2lkZW50aWNhbChwYXRoMSwgcGF0aDIpOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIFtwYXRoMV0gYW5kIFtwYXRoMl0gYXJlIHBhdGhzIHRvIHRoZQogIC8vLyBzYW1lIGZpbGUgc3lzdGVtIG9iamVjdC4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBGaWxlU3lzdGVtRW50aXR5LmlkZW50aWNhbFN5bmNgLgogIGJvb2wgZnNlSWRlbnRpY2FsU3luYyhTdHJpbmcgcGF0aDEsIFN0cmluZyBwYXRoMikgewogICAgcmV0dXJuIEZpbGVTeXN0ZW1FbnRpdHkuX2lkZW50aWNhbFN5bmMocGF0aDEsIHBhdGgyKTsKICB9CgogIC8vLyBBc3luY2hyb25vdXNseSByZXR1cm5zIHRoZSBbRmlsZVN5c3RlbUVudGl0eVR5cGVdIGZvciBbcGF0aF0uCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgRmlsZVN5c3RlbUVudGl0eS50eXBlYC4KICBGdXR1cmU8RmlsZVN5c3RlbUVudGl0eVR5cGU+IGZzZUdldFR5cGUoU3RyaW5nIHBhdGgsIGJvb2wgZm9sbG93TGlua3MpIHsKICAgIHJldHVybiBGaWxlU3lzdGVtRW50aXR5Ll9nZXRUeXBlUmVxdWVzdCh1dGY4LmVuY29kZShwYXRoKSwgZm9sbG93TGlua3MpOwogIH0KCiAgLy8vIFJldHVybnMgdGhlIFtGaWxlU3lzdGVtRW50aXR5VHlwZV0gZm9yIFtwYXRoXS4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBGaWxlU3lzdGVtRW50aXR5LnR5cGVTeW5jYC4KICBGaWxlU3lzdGVtRW50aXR5VHlwZSBmc2VHZXRUeXBlU3luYyhTdHJpbmcgcGF0aCwgYm9vbCBmb2xsb3dMaW5rcykgewogICAgcmV0dXJuIEZpbGVTeXN0ZW1FbnRpdHkuX2dldFR5cGVTeW5jSGVscGVyKHV0ZjguZW5jb2RlKHBhdGgpLCBmb2xsb3dMaW5rcyk7CiAgfQoKICAvLyBfRmlsZVN5c3RlbVdhdGNoZXIKCiAgLy8vIFJldHVybnMgYSBbU3RyZWFtXSBvZiBbRmlsZVN5c3RlbUV2ZW50XXMuCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgRmlsZVN5c3RlbUVudGl0eS53YXRjaCgpYC4KICBTdHJlYW08RmlsZVN5c3RlbUV2ZW50PiBmc1dhdGNoKFN0cmluZyBwYXRoLCBpbnQgZXZlbnRzLCBib29sIHJlY3Vyc2l2ZSkgewogICAgcmV0dXJuIF9GaWxlU3lzdGVtV2F0Y2hlci5fd2F0Y2gocGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpOwogIH0KCiAgLy8vIFJldHVybnMgYHRydWVgIHdoZW4gW0ZpbGVTeXN0ZW1FbnRpdHkud2F0Y2hdIGlzIHN1cHBvcnRlZC4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBGaWxlU3lzdGVtRW50aXR5LmlzV2F0Y2hTdXBwb3J0ZWRgLgogIGJvb2wgZnNXYXRjaElzU3VwcG9ydGVkKCkgPT4gX0ZpbGVTeXN0ZW1XYXRjaGVyLmlzU3VwcG9ydGVkOwoKICAvLyBMaW5rCgogIC8vLyBSZXR1cm5zIGEgbmV3IFtMaW5rXSBvYmplY3QgZm9yIHRoZSBnaXZlbiBbcGF0aF0uCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb24gb3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZgogIC8vLyBgbmV3IExpbmsoKWAgYW5kIGBuZXcgTGluay5mcm9tVXJpKClgLgogIExpbmsgY3JlYXRlTGluayhTdHJpbmcgcGF0aCkgPT4gbmV3IF9MaW5rKHBhdGgpOwoKICAvLyBTb2NrZXQKCiAgLy8vIEFzeW5jaHJvbm91c2x5IHJldHVybnMgYSBbU29ja2V0XSBjb25uZWN0ZWQgdG8gdGhlIGdpdmVuIGhvc3QgYW5kIHBvcnQuCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBvdmVycmlkZSBpcyBpbnN0YWxsZWQsIHRoaXMgZnVuY3Rpb25zIG92ZXJyaWRlcyB0aGUgYmVoYXZpb3Igb2YKICAvLy8gYFNvY2tldC5jb25uZWN0KC4uLilgLgogIEZ1dHVyZTxTb2NrZXQ+IHNvY2tldENvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtzb3VyY2VBZGRyZXNzLCBEdXJhdGlvbiB0aW1lb3V0fSkgewogICAgcmV0dXJuIFNvY2tldC5fY29ubmVjdChob3N0LCBwb3J0LAogICAgICAgIHNvdXJjZUFkZHJlc3M6IHNvdXJjZUFkZHJlc3MsIHRpbWVvdXQ6IHRpbWVvdXQpOwogIH0KCiAgLy8vIEFzeW5jaHJvbm91c2x5IHJldHVybnMgYSBbQ29ubmVjdGlvblRhc2tdIHRoYXQgY29ubmVjdHMgdG8gdGhlIGdpdmVuIGhvc3QKICAvLy8gYW5kIHBvcnQgd2hlbiBzdWNjZXNzZnVsLgogIC8vLwogIC8vLyBXaGVuIHRoaXMgb3ZlcnJpZGUgaXMgaW5zdGFsbGVkLCB0aGlzIGZ1bmN0aW9ucyBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBTb2NrZXQuc3RhcnRDb25uZWN0KC4uLilgLgogIEZ1dHVyZTxDb25uZWN0aW9uVGFzazxTb2NrZXQ+PiBzb2NrZXRTdGFydENvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtzb3VyY2VBZGRyZXNzfSkgewogICAgcmV0dXJuIFNvY2tldC5fc3RhcnRDb25uZWN0KGhvc3QsIHBvcnQsIHNvdXJjZUFkZHJlc3M6IHNvdXJjZUFkZHJlc3MpOwogIH0KfQoKY2xhc3MgX0lPT3ZlcnJpZGVzU2NvcGUgZXh0ZW5kcyBJT092ZXJyaWRlcyB7CiAgZmluYWwgSU9PdmVycmlkZXMgX3ByZXZpb3VzID0gSU9PdmVycmlkZXMuY3VycmVudDsKCiAgLy8gRGlyZWN0b3J5CiAgRGlyZWN0b3J5IEZ1bmN0aW9uKFN0cmluZykgX2NyZWF0ZURpcmVjdG9yeTsKICBEaXJlY3RvcnkgRnVuY3Rpb24oKSBfZ2V0Q3VycmVudERpcmVjdG9yeTsKICB2b2lkIEZ1bmN0aW9uKFN0cmluZykgX3NldEN1cnJlbnREaXJlY3Rvcnk7CiAgRGlyZWN0b3J5IEZ1bmN0aW9uKCkgX2dldFN5c3RlbVRlbXBEaXJlY3Rvcnk7CgogIC8vIEZpbGUKICBGaWxlIEZ1bmN0aW9uKFN0cmluZykgX2NyZWF0ZUZpbGU7CgogIC8vIEZpbGVTdGF0CiAgRnV0dXJlPEZpbGVTdGF0PiBGdW5jdGlvbihTdHJpbmcpIF9zdGF0OwogIEZpbGVTdGF0IEZ1bmN0aW9uKFN0cmluZykgX3N0YXRTeW5jOwoKICAvLyBGaWxlU3lzdGVtRW50aXR5CiAgRnV0dXJlPGJvb2w+IEZ1bmN0aW9uKFN0cmluZywgU3RyaW5nKSBfZnNlSWRlbnRpY2FsOwogIGJvb2wgRnVuY3Rpb24oU3RyaW5nLCBTdHJpbmcpIF9mc2VJZGVudGljYWxTeW5jOwogIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5VHlwZT4gRnVuY3Rpb24oU3RyaW5nLCBib29sKSBfZnNlR2V0VHlwZTsKICBGaWxlU3lzdGVtRW50aXR5VHlwZSBGdW5jdGlvbihTdHJpbmcsIGJvb2wpIF9mc2VHZXRUeXBlU3luYzsKCiAgLy8gX0ZpbGVTeXN0ZW1XYXRjaGVyCiAgU3RyZWFtPEZpbGVTeXN0ZW1FdmVudD4gRnVuY3Rpb24oU3RyaW5nLCBpbnQsIGJvb2wpIF9mc1dhdGNoOwogIGJvb2wgRnVuY3Rpb24oKSBfZnNXYXRjaElzU3VwcG9ydGVkOwoKICAvLyBMaW5rCiAgTGluayBGdW5jdGlvbihTdHJpbmcpIF9jcmVhdGVMaW5rOwoKICAvLyBTb2NrZXQKICBGdXR1cmU8U29ja2V0PiBGdW5jdGlvbihkeW5hbWljLCBpbnQsCiAgICAgIHtkeW5hbWljIHNvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KSBfc29ja2V0Q29ubmVjdDsKICBGdXR1cmU8Q29ubmVjdGlvblRhc2s8U29ja2V0Pj4gRnVuY3Rpb24oZHluYW1pYywgaW50LCB7ZHluYW1pYyBzb3VyY2VBZGRyZXNzfSkKICAgICAgX3NvY2tldFN0YXJ0Q29ubmVjdDsKCiAgX0lPT3ZlcnJpZGVzU2NvcGUoCiAgICAvLyBEaXJlY3RvcnkKICAgIHRoaXMuX2NyZWF0ZURpcmVjdG9yeSwKICAgIHRoaXMuX2dldEN1cnJlbnREaXJlY3RvcnksCiAgICB0aGlzLl9zZXRDdXJyZW50RGlyZWN0b3J5LAogICAgdGhpcy5fZ2V0U3lzdGVtVGVtcERpcmVjdG9yeSwKCiAgICAvLyBGaWxlCiAgICB0aGlzLl9jcmVhdGVGaWxlLAoKICAgIC8vIEZpbGVTdGF0CiAgICB0aGlzLl9zdGF0LAogICAgdGhpcy5fc3RhdFN5bmMsCgogICAgLy8gRmlsZVN5c3RlbUVudGl0eQogICAgdGhpcy5fZnNlSWRlbnRpY2FsLAogICAgdGhpcy5fZnNlSWRlbnRpY2FsU3luYywKICAgIHRoaXMuX2ZzZUdldFR5cGUsCiAgICB0aGlzLl9mc2VHZXRUeXBlU3luYywKCiAgICAvLyBfRmlsZVN5c3RlbVdhdGNoZXIKICAgIHRoaXMuX2ZzV2F0Y2gsCiAgICB0aGlzLl9mc1dhdGNoSXNTdXBwb3J0ZWQsCgogICAgLy8gTGluawogICAgdGhpcy5fY3JlYXRlTGluaywKCiAgICAvLyBTb2NrZXQKICAgIHRoaXMuX3NvY2tldENvbm5lY3QsCiAgICB0aGlzLl9zb2NrZXRTdGFydENvbm5lY3QsCiAgKTsKCiAgLy8gRGlyZWN0b3J5CiAgQG92ZXJyaWRlCiAgRGlyZWN0b3J5IGNyZWF0ZURpcmVjdG9yeShTdHJpbmcgcGF0aCkgewogICAgaWYgKF9jcmVhdGVEaXJlY3RvcnkgIT0gbnVsbCkgcmV0dXJuIF9jcmVhdGVEaXJlY3RvcnkocGF0aCk7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuY3JlYXRlRGlyZWN0b3J5KHBhdGgpOwogICAgcmV0dXJuIHN1cGVyLmNyZWF0ZURpcmVjdG9yeShwYXRoKTsKICB9CgogIEBvdmVycmlkZQogIERpcmVjdG9yeSBnZXRDdXJyZW50RGlyZWN0b3J5KCkgewogICAgaWYgKF9nZXRDdXJyZW50RGlyZWN0b3J5ICE9IG51bGwpIHJldHVybiBfZ2V0Q3VycmVudERpcmVjdG9yeSgpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmdldEN1cnJlbnREaXJlY3RvcnkoKTsKICAgIHJldHVybiBzdXBlci5nZXRDdXJyZW50RGlyZWN0b3J5KCk7CiAgfQoKICBAb3ZlcnJpZGUKICB2b2lkIHNldEN1cnJlbnREaXJlY3RvcnkoU3RyaW5nIHBhdGgpIHsKICAgIGlmIChfc2V0Q3VycmVudERpcmVjdG9yeSAhPSBudWxsKQogICAgICBfc2V0Q3VycmVudERpcmVjdG9yeShwYXRoKTsKICAgIGVsc2UgaWYgKF9wcmV2aW91cyAhPSBudWxsKQogICAgICBfcHJldmlvdXMuc2V0Q3VycmVudERpcmVjdG9yeShwYXRoKTsKICAgIGVsc2UKICAgICAgc3VwZXIuc2V0Q3VycmVudERpcmVjdG9yeShwYXRoKTsKICB9CgogIEBvdmVycmlkZQogIERpcmVjdG9yeSBnZXRTeXN0ZW1UZW1wRGlyZWN0b3J5KCkgewogICAgaWYgKF9nZXRTeXN0ZW1UZW1wRGlyZWN0b3J5ICE9IG51bGwpIHJldHVybiBfZ2V0U3lzdGVtVGVtcERpcmVjdG9yeSgpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmdldFN5c3RlbVRlbXBEaXJlY3RvcnkoKTsKICAgIHJldHVybiBzdXBlci5nZXRTeXN0ZW1UZW1wRGlyZWN0b3J5KCk7CiAgfQoKICAvLyBGaWxlCiAgQG92ZXJyaWRlCiAgRmlsZSBjcmVhdGVGaWxlKFN0cmluZyBwYXRoKSB7CiAgICBpZiAoX2NyZWF0ZUZpbGUgIT0gbnVsbCkgcmV0dXJuIF9jcmVhdGVGaWxlKHBhdGgpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmNyZWF0ZUZpbGUocGF0aCk7CiAgICByZXR1cm4gc3VwZXIuY3JlYXRlRmlsZShwYXRoKTsKICB9CgogIC8vIEZpbGVTdGF0CiAgQG92ZXJyaWRlCiAgRnV0dXJlPEZpbGVTdGF0PiBzdGF0KFN0cmluZyBwYXRoKSB7CiAgICBpZiAoX3N0YXQgIT0gbnVsbCkgcmV0dXJuIF9zdGF0KHBhdGgpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLnN0YXQocGF0aCk7CiAgICByZXR1cm4gc3VwZXIuc3RhdChwYXRoKTsKICB9CgogIEBvdmVycmlkZQogIEZpbGVTdGF0IHN0YXRTeW5jKFN0cmluZyBwYXRoKSB7CiAgICBpZiAoX3N0YXQgIT0gbnVsbCkgcmV0dXJuIF9zdGF0U3luYyhwYXRoKTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5zdGF0U3luYyhwYXRoKTsKICAgIHJldHVybiBzdXBlci5zdGF0U3luYyhwYXRoKTsKICB9CgogIC8vIEZpbGVTeXN0ZW1FbnRpdHkKICBAb3ZlcnJpZGUKICBGdXR1cmU8Ym9vbD4gZnNlSWRlbnRpY2FsKFN0cmluZyBwYXRoMSwgU3RyaW5nIHBhdGgyKSB7CiAgICBpZiAoX2ZzZUlkZW50aWNhbCAhPSBudWxsKSByZXR1cm4gX2ZzZUlkZW50aWNhbChwYXRoMSwgcGF0aDIpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmZzZUlkZW50aWNhbChwYXRoMSwgcGF0aDIpOwogICAgcmV0dXJuIHN1cGVyLmZzZUlkZW50aWNhbChwYXRoMSwgcGF0aDIpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBmc2VJZGVudGljYWxTeW5jKFN0cmluZyBwYXRoMSwgU3RyaW5nIHBhdGgyKSB7CiAgICBpZiAoX2ZzZUlkZW50aWNhbFN5bmMgIT0gbnVsbCkgcmV0dXJuIF9mc2VJZGVudGljYWxTeW5jKHBhdGgxLCBwYXRoMik7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuZnNlSWRlbnRpY2FsU3luYyhwYXRoMSwgcGF0aDIpOwogICAgcmV0dXJuIHN1cGVyLmZzZUlkZW50aWNhbFN5bmMocGF0aDEsIHBhdGgyKTsKICB9CgogIEBvdmVycmlkZQogIEZ1dHVyZTxGaWxlU3lzdGVtRW50aXR5VHlwZT4gZnNlR2V0VHlwZShTdHJpbmcgcGF0aCwgYm9vbCBmb2xsb3dMaW5rcykgewogICAgaWYgKF9mc2VHZXRUeXBlICE9IG51bGwpIHJldHVybiBfZnNlR2V0VHlwZShwYXRoLCBmb2xsb3dMaW5rcyk7CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHJldHVybiBfcHJldmlvdXMuZnNlR2V0VHlwZShwYXRoLCBmb2xsb3dMaW5rcyk7CiAgICByZXR1cm4gc3VwZXIuZnNlR2V0VHlwZShwYXRoLCBmb2xsb3dMaW5rcyk7CiAgfQoKICBAb3ZlcnJpZGUKICBGaWxlU3lzdGVtRW50aXR5VHlwZSBmc2VHZXRUeXBlU3luYyhTdHJpbmcgcGF0aCwgYm9vbCBmb2xsb3dMaW5rcykgewogICAgaWYgKF9mc2VHZXRUeXBlU3luYyAhPSBudWxsKSByZXR1cm4gX2ZzZUdldFR5cGVTeW5jKHBhdGgsIGZvbGxvd0xpbmtzKTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5mc2VHZXRUeXBlU3luYyhwYXRoLCBmb2xsb3dMaW5rcyk7CiAgICByZXR1cm4gc3VwZXIuZnNlR2V0VHlwZVN5bmMocGF0aCwgZm9sbG93TGlua3MpOwogIH0KCiAgLy8gX0ZpbGVTeXN0ZW1XYXRjaGVyCiAgQG92ZXJyaWRlCiAgU3RyZWFtPEZpbGVTeXN0ZW1FdmVudD4gZnNXYXRjaChTdHJpbmcgcGF0aCwgaW50IGV2ZW50cywgYm9vbCByZWN1cnNpdmUpIHsKICAgIGlmIChfZnNXYXRjaCAhPSBudWxsKSByZXR1cm4gX2ZzV2F0Y2gocGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmZzV2F0Y2gocGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpOwogICAgcmV0dXJuIHN1cGVyLmZzV2F0Y2gocGF0aCwgZXZlbnRzLCByZWN1cnNpdmUpOwogIH0KCiAgQG92ZXJyaWRlCiAgYm9vbCBmc1dhdGNoSXNTdXBwb3J0ZWQoKSB7CiAgICBpZiAoX2ZzV2F0Y2hJc1N1cHBvcnRlZCAhPSBudWxsKSByZXR1cm4gX2ZzV2F0Y2hJc1N1cHBvcnRlZCgpOwogICAgaWYgKF9wcmV2aW91cyAhPSBudWxsKSByZXR1cm4gX3ByZXZpb3VzLmZzV2F0Y2hJc1N1cHBvcnRlZCgpOwogICAgcmV0dXJuIHN1cGVyLmZzV2F0Y2hJc1N1cHBvcnRlZCgpOwogIH0KCiAgLy8gTGluawogIEBvdmVycmlkZQogIExpbmsgY3JlYXRlTGluayhTdHJpbmcgcGF0aCkgewogICAgaWYgKF9jcmVhdGVMaW5rICE9IG51bGwpIHJldHVybiBfY3JlYXRlTGluayhwYXRoKTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5jcmVhdGVMaW5rKHBhdGgpOwogICAgcmV0dXJuIHN1cGVyLmNyZWF0ZUxpbmsocGF0aCk7CiAgfQoKICAvLyBTb2NrZXQKICBAb3ZlcnJpZGUKICBGdXR1cmU8U29ja2V0PiBzb2NrZXRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzcywgRHVyYXRpb24gdGltZW91dH0pIHsKICAgIGlmIChfc29ja2V0Q29ubmVjdCAhPSBudWxsKSB7CiAgICAgIHJldHVybiBfc29ja2V0Q29ubmVjdChob3N0LCBwb3J0LAogICAgICAgICAgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcywgdGltZW91dDogdGltZW91dCk7CiAgICB9CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9wcmV2aW91cy5zb2NrZXRDb25uZWN0KGhvc3QsIHBvcnQsCiAgICAgICAgICBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzLCB0aW1lb3V0OiB0aW1lb3V0KTsKICAgIH0KICAgIHJldHVybiBzdXBlci5zb2NrZXRDb25uZWN0KGhvc3QsIHBvcnQsCiAgICAgICAgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcywgdGltZW91dDogdGltZW91dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBGdXR1cmU8Q29ubmVjdGlvblRhc2s8U29ja2V0Pj4gc29ja2V0U3RhcnRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzc30pIHsKICAgIGlmIChfc29ja2V0U3RhcnRDb25uZWN0ICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9zb2NrZXRTdGFydENvbm5lY3QoaG9zdCwgcG9ydCwgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcyk7CiAgICB9CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9wcmV2aW91cy5zb2NrZXRTdGFydENvbm5lY3QoaG9zdCwgcG9ydCwKICAgICAgICAgIHNvdXJjZUFkZHJlc3M6IHNvdXJjZUFkZHJlc3MpOwogICAgfQogICAgcmV0dXJuIHN1cGVyLnNvY2tldFN0YXJ0Q29ubmVjdChob3N0LCBwb3J0LCBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzKTsKICB9Cn0KgeMATk48AREBKAEhAUgVBEdRPwQILQo2CgYEDSAMSjYMQwYIHR4BIzcEATMGTU4lLRkEAUIGTDghCBMyMDEzAQ4oARIuKgEaOjZGQgEcQyoBDigBECw5GTwnHgEiKxszExcbGx4BDhIBEgwQARoUGBIWARwPGgEOEgEQFRoHIzQuGwQBTgZKFUJBIzQuGwQBDwE9Bk83QgEtBk8sOQE3Bk8mKh8EAS4GTx4/AQoBOAZPLTMBDgFABk8ZJyEEATEGTx0jLQQBFgFMHwZPJDo2BAE9HwZPKDY6BAFEBk8fS00EATUGTyNHUAQBGAEwBk8iTT8EAUEGTys/AQoBOAZPLTMBDAFOBlAdLysnOQQBUCAGUCJEGUsEAgEuNQEPLy0uMAEKJQEOKycBFjczQz8BGEAnAQolAQwoQVEbARURGx8fIgEMFgEQEBQBGBgcFhoBGhMeAQwWAQ4ZHgUBDwwrQUMoBAEMJEVDKAQBDComIiArCScEAQwnS0YrBAEKDCE3PiMEAQ4MJys4HQQBDCMvPCEEARYMOkNILQQBDDZLTDEEAQxLREswBAEMR0xPNAQBGAxNRE4zBAEMHkNCJwQBCgwhNz4jBAEMDC8rIig7Bh0xOwYrOQQBDEQZJ0wGHTYpBk8EAgEWZGFydDppby9vdmVycmlkZXMuZGFydCxvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vcGxhdGZvcm0uZGFydJ3sLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8qKgogKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgZW52aXJvbm1lbnQgaW4gd2hpY2ggdGhlIGN1cnJlbnQgcHJvZ3JhbSBpcyBydW5uaW5nLgogKgogKiBQbGF0Zm9ybSBwcm92aWRlcyBpbmZvcm1hdGlvbiBzdWNoIGFzIHRoZSBvcGVyYXRpbmcgc3lzdGVtLAogKiB0aGUgaG9zdG5hbWUgb2YgdGhlIGNvbXB1dGVyLCB0aGUgdmFsdWUgb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzLAogKiB0aGUgcGF0aCB0byB0aGUgcnVubmluZyBwcm9ncmFtLAogKiBhbmQgc28gb24uCiAqCiAqICMjIEdldCB0aGUgVVJJIHRvIHRoZSBjdXJyZW50IERhcnQgc2NyaXB0CiAqCiAqIFVzZSB0aGUgW3NjcmlwdF0gZ2V0dGVyIHRvIGdldCB0aGUgVVJJIHRvIHRoZSBjdXJyZW50bHkgcnVubmluZwogKiBEYXJ0IHNjcmlwdC4KICoKICogICAgIGltcG9ydCAnZGFydDppbycgc2hvdyBQbGF0Zm9ybTsKICoKICogICAgIHZvaWQgbWFpbigpIHsKICogICAgICAgLy8gR2V0IHRoZSBVUkkgb2YgdGhlIHNjcmlwdCBiZWluZyBydW4uCiAqICAgICAgIHZhciB1cmkgPSBQbGF0Zm9ybS5zY3JpcHQ7CiAqICAgICAgIC8vIENvbnZlcnQgdGhlIFVSSSB0byBhIHBhdGguCiAqICAgICAgIHZhciBwYXRoID0gdXJpLnRvRmlsZVBhdGgoKTsKICogICAgIH0KICoKICogIyMgR2V0IHRoZSB2YWx1ZSBvZiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZQogKgogKiBUaGUgW2Vudmlyb25tZW50XSBnZXR0ZXIgcmV0dXJucyBhIHRoZSBuYW1lcyBhbmQgdmFsdWVzIG9mIGVudmlyb25tZW50CiAqIHZhcmlhYmxlcyBpbiBhIFtNYXBdIHRoYXQgY29udGFpbnMga2V5LXZhbHVlIHBhaXJzIG9mIHN0cmluZ3MuIFRoZSBNYXAgaXMKICogdW5tb2RpZmlhYmxlLiBUaGlzIHNhbXBsZSBzaG93cyBob3cgdG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgYFBBVEhgCiAqIGVudmlyb25tZW50IHZhcmlhYmxlLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJyBzaG93IFBsYXRmb3JtOwogKgogKiAgICAgdm9pZCBtYWluKCkgewogKiAgICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudlZhcnMgPSBQbGF0Zm9ybS5lbnZpcm9ubWVudDsKICogICAgICAgcHJpbnQoZW52VmFyc1snUEFUSCddKTsKICogICAgIH0KICoKICogIyMgRGV0ZXJtaW5lIHRoZSBPUwogKgogKiBZb3UgY2FuIGdldCB0aGUgbmFtZSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhcyBhIHN0cmluZyB3aXRoIHRoZQogKiBbb3BlcmF0aW5nU3lzdGVtXSBnZXR0ZXIuIFlvdSBjYW4gYWxzbyB1c2Ugb25lIG9mIHRoZSBzdGF0aWMgYm9vbGVhbgogKiBnZXR0ZXJzOiBbaXNNYWNPU10sIFtpc0xpbnV4XSwgYW5kIFtpc1dpbmRvd3NdLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJyBzaG93IFBsYXRmb3JtLCBzdGRvdXQ7CiAqCiAqICAgICB2b2lkIG1haW4oKSB7CiAqICAgICAgIC8vIEdldCB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhcyBhIHN0cmluZy4KICogICAgICAgU3RyaW5nIG9zID0gUGxhdGZvcm0ub3BlcmF0aW5nU3lzdGVtOwogKiAgICAgICAvLyBPciwgdXNlIGEgcHJlZGljYXRlIGdldHRlci4KICogICAgICAgaWYgKFBsYXRmb3JtLmlzTWFjT1MpIHsKICogICAgICAgICBwcmludCgnaXMgYSBNYWMnKTsKICogICAgICAgfSBlbHNlIHsKICogICAgICAgICBwcmludCgnaXMgbm90IGEgTWFjJyk7CiAqICAgICAgIH0KICogICAgIH0KICoKICogIyMgT3RoZXIgcmVzb3VyY2VzCiAqCiAqIFtEYXJ0IGJ5IEV4YW1wbGVdKGh0dHBzOi8vd3d3LmRhcnRsYW5nLm9yZy9kYXJ0LWJ5LWV4YW1wbGUvI2RhcnQtaW8tYW5kLWNvbW1hbmQtbGluZS1hcHBzKQogKiBwcm92aWRlcyBhZGRpdGlvbmFsIHRhc2stb3JpZW50ZWQgY29kZSBzYW1wbGVzIHRoYXQgc2hvdyBob3cgdG8gdXNlCiAqIHZhcmlvdXMgQVBJIGZyb20gdGhlIFtkYXJ0OmlvXSBsaWJyYXJ5LgogKi8KY2xhc3MgUGxhdGZvcm0gewogIHN0YXRpYyBmaW5hbCBfbnVtYmVyT2ZQcm9jZXNzb3JzID0gX1BsYXRmb3JtLm51bWJlck9mUHJvY2Vzc29yczsKICBzdGF0aWMgZmluYWwgX3BhdGhTZXBhcmF0b3IgPSBfUGxhdGZvcm0ucGF0aFNlcGFyYXRvcjsKICBzdGF0aWMgZmluYWwgX29wZXJhdGluZ1N5c3RlbSA9IF9QbGF0Zm9ybS5vcGVyYXRpbmdTeXN0ZW07CiAgc3RhdGljIGZpbmFsIF9vcGVyYXRpbmdTeXN0ZW1WZXJzaW9uID0gX1BsYXRmb3JtLm9wZXJhdGluZ1N5c3RlbVZlcnNpb247CiAgc3RhdGljIGZpbmFsIF9sb2NhbEhvc3RuYW1lID0gX1BsYXRmb3JtLmxvY2FsSG9zdG5hbWU7CiAgc3RhdGljIGZpbmFsIF92ZXJzaW9uID0gX1BsYXRmb3JtLnZlcnNpb247CgogIC8qKgogICAqIFRoZSBudW1iZXIgb2YgaW5kaXZpZHVhbCBleGVjdXRpb24gdW5pdHMgb2YgdGhlIG1hY2hpbmUuCiAgICovCiAgc3RhdGljIGludCBnZXQgbnVtYmVyT2ZQcm9jZXNzb3JzID0+IF9udW1iZXJPZlByb2Nlc3NvcnM7CgogIC8qKgogICAqIFRoZSBwYXRoIHNlcGFyYXRvciB1c2VkIGJ5IHRoZSBvcGVyYXRpbmcgc3lzdGVtIHRvIHNlcGFyYXRlCiAgICogY29tcG9uZW50cyBpbiBmaWxlIHBhdGhzLgogICAqLwogIHN0YXRpYyBTdHJpbmcgZ2V0IHBhdGhTZXBhcmF0b3IgPT4gX3BhdGhTZXBhcmF0b3I7CgogIC8qKgogICAqIEdldCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBsb2NhbGUuCiAgICovCiAgc3RhdGljIFN0cmluZyBnZXQgbG9jYWxlTmFtZSA9PiBfUGxhdGZvcm0ubG9jYWxlTmFtZSgpOwoKICAvKioKICAgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb3IgcGxhdGZvcm0uCiAgICovCiAgc3RhdGljIFN0cmluZyBnZXQgb3BlcmF0aW5nU3lzdGVtID0+IF9vcGVyYXRpbmdTeXN0ZW07CgogIC8qKgogICAqIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmVyc2lvbiBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvciBwbGF0Zm9ybS4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGdldCBvcGVyYXRpbmdTeXN0ZW1WZXJzaW9uID0+IF9vcGVyYXRpbmdTeXN0ZW1WZXJzaW9uOwoKICAvKioKICAgKiBUaGUgbG9jYWwgaG9zdG5hbWUgZm9yIHRoZSBzeXN0ZW0uCiAgICovCiAgc3RhdGljIFN0cmluZyBnZXQgbG9jYWxIb3N0bmFtZSA9PiBfbG9jYWxIb3N0bmFtZTsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpcyBhIHZlcnNpb24gb2YKICAgKiBbTGludXhdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpbnV4KS4KICAgKgogICAqIFRoaXMgdmFsdWUgaXMgYGZhbHNlYCBpZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpcyBhIHNwZWNpYWxpemVkCiAgICogdmVyc2lvbiBvZiBMaW51eCB0aGF0IGlkZW50aWZpZXMgaXRzZWxmIGJ5IGEgZGlmZmVyZW50IG5hbWUsCiAgICogZm9yIGV4YW1wbGUgQW5kcm9pZCAoc2VlIFtpc0FuZHJvaWRdKS4KICAgKi8KICBzdGF0aWMgZmluYWwgYm9vbCBpc0xpbnV4ID0gKF9vcGVyYXRpbmdTeXN0ZW0gPT0gImxpbnV4Iik7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaXMgYSB2ZXJzaW9uIG9mCiAgICogW21hY09TXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYWNPUykuCiAgICovCiAgc3RhdGljIGZpbmFsIGJvb2wgaXNNYWNPUyA9IChfb3BlcmF0aW5nU3lzdGVtID09ICJtYWNvcyIpOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGlzIGEgdmVyc2lvbiBvZgogICAqIFtNaWNyb3NvZnQgV2luZG93c10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWljcm9zb2Z0X1dpbmRvd3MpLgogICAqLwogIHN0YXRpYyBmaW5hbCBib29sIGlzV2luZG93cyA9IChfb3BlcmF0aW5nU3lzdGVtID09ICJ3aW5kb3dzIik7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIG9wZXJhdGluZyBzeXN0ZW0gaXMgYSB2ZXJzaW9uIG9mCiAgICogW0FuZHJvaWRdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FuZHJvaWRfJTI4b3BlcmF0aW5nX3N5c3RlbSUyOSkuCiAgICovCiAgc3RhdGljIGZpbmFsIGJvb2wgaXNBbmRyb2lkID0gKF9vcGVyYXRpbmdTeXN0ZW0gPT0gImFuZHJvaWQiKTsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgb3BlcmF0aW5nIHN5c3RlbSBpcyBhIHZlcnNpb24gb2YKICAgKiBbaU9TXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JT1MpLgogICAqLwogIHN0YXRpYyBmaW5hbCBib29sIGlzSU9TID0gKF9vcGVyYXRpbmdTeXN0ZW0gPT0gImlvcyIpOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGlzIGEgdmVyc2lvbiBvZgogICAqIFtGdWNoc2lhXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Hb29nbGVfRnVjaHNpYSkuCiAgICovCiAgc3RhdGljIGZpbmFsIGJvb2wgaXNGdWNoc2lhID0gKF9vcGVyYXRpbmdTeXN0ZW0gPT0gImZ1Y2hzaWEiKTsKCiAgLyoqCiAgICogVGhlIGVudmlyb25tZW50IGZvciB0aGlzIHByb2Nlc3MgYXMgYSBtYXAgZnJvbSBzdHJpbmcga2V5IHRvIHN0cmluZyB2YWx1ZS4KICAgKgogICAqIFRoZSBtYXAgaXMgdW5tb2RpZmlhYmxlLAogICAqIGFuZCBpdHMgY29udGVudCBpcyByZXRyaWV2ZWQgZnJvbSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiBpdHMgZmlyc3QgdXNlLgogICAqCiAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIG9uIFdpbmRvd3MgYXJlIGNhc2UtaW5zZW5zaXRpdmUsCiAgICogc28gb24gV2luZG93cyB0aGUgbWFwIGlzIGNhc2UtaW5zZW5zaXRpdmUgYW5kIHdpbGwgY29udmVydAogICAqIGFsbCBrZXlzIHRvIHVwcGVyIGNhc2UuCiAgICogT24gb3RoZXIgcGxhdGZvcm1zLCBrZXlzIGNhbiBiZSBkaXN0aW5ndWlzaGVkIGJ5IGNhc2UuCiAgICovCiAgc3RhdGljIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0IGVudmlyb25tZW50ID0+IF9QbGF0Zm9ybS5lbnZpcm9ubWVudDsKCiAgLyoqCiAgICogVGhlIHBhdGggb2YgdGhlIGV4ZWN1dGFibGUgdXNlZCB0byBydW4gdGhlIHNjcmlwdCBpbiB0aGlzIGlzb2xhdGUuCiAgICoKICAgKiBUaGUgbGl0ZXJhbCBwYXRoIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHNjcmlwdC4KICAgKiBUaGlzIHBhdGggbWlnaHQgYmUgcmVsYXRpdmUgb3IganVzdCBiZSBhIG5hbWUgZnJvbSB3aGljaCB0aGUgZXhlY3V0YWJsZQogICAqIHdhcyBmb3VuZCBieSBzZWFyY2hpbmcgdGhlIHN5c3RlbSBwYXRoLgogICAqCiAgICogVXNlIFtyZXNvbHZlZEV4ZWN1dGFibGVdIHRvIGdldCBhbiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBleGVjdXRhYmxlLgogICAqLwogIHN0YXRpYyBTdHJpbmcgZ2V0IGV4ZWN1dGFibGUgPT4gX1BsYXRmb3JtLmV4ZWN1dGFibGU7CgogIC8qKgogICAqIFRoZSBwYXRoIG9mIHRoZSBleGVjdXRhYmxlIHVzZWQgdG8gcnVuIHRoZSBzY3JpcHQgaW4gdGhpcwogICAqIGlzb2xhdGUgYWZ0ZXIgaXQgaGFzIGJlZW4gcmVzb2x2ZWQgYnkgdGhlIE9TLgogICAqCiAgICogVGhpcyBpcyB0aGUgYWJzb2x1dGUgcGF0aCwgd2l0aCBhbGwgc3ltbGlua3MgcmVzb2x2ZWQsIHRvIHRoZQogICAqIGV4ZWN1dGFibGUgdXNlZCB0byBydW4gdGhlIHNjcmlwdC4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGdldCByZXNvbHZlZEV4ZWN1dGFibGUgPT4gX1BsYXRmb3JtLnJlc29sdmVkRXhlY3V0YWJsZTsKCiAgLyoqCiAgICogVGhlIGFic29sdXRlIFVSSSBvZiB0aGUgc2NyaXB0IGJlaW5nIHJ1biBpbiB0aGlzIGlzb2xhdGUuCiAgICoKICAgKiBJZiB0aGUgc2NyaXB0IGFyZ3VtZW50IG9uIHRoZSBjb21tYW5kIGxpbmUgaXMgcmVsYXRpdmUsCiAgICogaXQgaXMgcmVzb2x2ZWQgdG8gYW4gYWJzb2x1dGUgVVJJIGJlZm9yZSBmZXRjaGluZyB0aGUgc2NyaXB0LCBhbmQKICAgKiB0aGF0IGFic29sdXRlIFVSSSBpcyByZXR1cm5lZC4KICAgKgogICAqIFVSSSByZXNvbHV0aW9uIG9ubHkgZG9lcyBzdHJpbmcgbWFuaXB1bGF0aW9uIG9uIHRoZSBzY3JpcHQgcGF0aCwgYW5kIHRoaXMKICAgKiBtYXkgYmUgZGlmZmVyZW50IGZyb20gdGhlIGZpbGUgc3lzdGVtJ3MgcGF0aCByZXNvbHV0aW9uIGJlaGF2aW9yLiBGb3IKICAgKiBleGFtcGxlLCBhIHN5bWJvbGljIGxpbmsgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgJy4uJyB3aWxsIG5vdCBiZQogICAqIGxvb2tlZCB1cC4KICAgKgogICAqIElmIHRoZSBleGVjdXRhYmxlIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgW3NjcmlwdF0sCiAgICogdGhlIFVSSSBpcyBlbXB0eS4KICAgKi8KICBzdGF0aWMgVXJpIGdldCBzY3JpcHQgPT4gX1BsYXRmb3JtLnNjcmlwdDsKCiAgLyoqCiAgICogVGhlIGZsYWdzIHBhc3NlZCB0byB0aGUgZXhlY3V0YWJsZSB1c2VkIHRvIHJ1biB0aGUgc2NyaXB0IGluIHRoaXMgaXNvbGF0ZS4KICAgKgogICAqIFRoZXNlIGFyZSB0aGUgY29tbWFuZC1saW5lIGZsYWdzIHRvIHRoZSBleGVjdXRhYmxlIHRoYXQgcHJlY2VkZXMKICAgKiB0aGUgc2NyaXB0IG5hbWUuCiAgICogUHJvdmlkZXMgYSBuZXcgbGlzdCBldmVyeSB0aW1lIHRoZSB2YWx1ZSBpcyByZWFkLgogICAqLwogIHN0YXRpYyBMaXN0PFN0cmluZz4gZ2V0IGV4ZWN1dGFibGVBcmd1bWVudHMgPT4gX1BsYXRmb3JtLmV4ZWN1dGFibGVBcmd1bWVudHM7CgogIC8qKgogICAqIFRoaXMgcmV0dXJucyBgbnVsbGAsIGFzIGBwYWNrYWdlcy9gIGRpcmVjdG9yaWVzIGFyZSBubyBsb25nZXIgc3VwcG9ydGVkLgogICAqCiAgICovCiAgQERlcHJlY2F0ZWQoJ3BhY2thZ2VzLyBkaXJlY3RvcnkgcmVzb2x1dGlvbiBpcyBub3Qgc3VwcG9ydGVkIGluIERhcnQgMicpCiAgc3RhdGljIFN0cmluZyBnZXQgcGFja2FnZVJvb3QgPT4gbnVsbDsgLy8gVE9ETyhtZmFpcmh1cnN0KTogcmVtb3ZlIHRoaXMKCiAgLyoqCiAgICogVGhlIGAtLXBhY2thZ2VzYCBmbGFnIHBhc3NlZCB0byB0aGUgZXhlY3V0YWJsZSB1c2VkIHRvIHJ1biB0aGUgc2NyaXB0CiAgICogaW4gdGhpcyBpc29sYXRlLgogICAqCiAgICogSWYgcHJlc2VudCwgaXQgc3BlY2lmaWVzIGEgZmlsZSBkZXNjcmliaW5nIGhvdyBEYXJ0IHBhY2thZ2VzIGFyZSBsb29rZWQgdXAuCiAgICoKICAgKiBJcyBgbnVsbGAgaWYgdGhlcmUgaXMgbm8gYC0tcGFja2FnZXNgIGZsYWcuCiAgICovCiAgc3RhdGljIFN0cmluZyBnZXQgcGFja2FnZUNvbmZpZyA9PiBfUGxhdGZvcm0ucGFja2FnZUNvbmZpZzsKCiAgLyoqCiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgRGFydCBydW50aW1lLgogICAqCiAgICogVGhlIHZhbHVlIGlzIGEgW3NlbWFudGljIHZlcnNpb25pbmddKGh0dHA6Ly9zZW12ZXIub3JnKQogICAqIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZlcnNpb24gb2YgdGhlIGN1cnJlbnQgRGFydCBydW50aW1lLAogICAqIHBvc3NpYmx5IGZvbGxvd2VkIGJ5IHdoaXRlc3BhY2UgYW5kIG90aGVyIHZlcnNpb24gYW5kCiAgICogYnVpbGQgZGV0YWlscy4KICAgKi8KICBzdGF0aWMgU3RyaW5nIGdldCB2ZXJzaW9uID0+IF92ZXJzaW9uOwp9CoDqAE5OPAERAQROAz9FJA4DLQNDEAMnAxUxJCcmCQMvA0pNRhkDJwMVPSEJAxcDRUgzAy8DFTIvKCEeEiILCQMWA15HKwQRQzk9SzktAQY+BjwBBkEfBjUBBikGOgEGPQY5AQZMBkcBBigGNQEGMjMFREIsBj0BBjIzBj0BBjJLBkEBBjJOBkEBBjIvBjkBBjI+BkEBBlAFHk4FPEAdPAZHAQZIBTNNLQVJBjgBBj8zBUMoBkgBBj8FPUckBU9LRxAFPhcGLQEGUAVGFjcGUAEGTgUGS0oBBksWBVEFMQY+AQYuBT1COxQGKQIBFWRhcnQ6aW8vcGxhdGZvcm0uZGFydDFvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vcGxhdGZvcm1faW1wbC5kYXJ0lo0vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKY2xhc3MgX1BsYXRmb3JtIHsKICBleHRlcm5hbCBzdGF0aWMgaW50IF9udW1iZXJPZlByb2Nlc3NvcnMoKTsKICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIF9wYXRoU2VwYXJhdG9yKCk7CiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBfb3BlcmF0aW5nU3lzdGVtKCk7CiAgZXh0ZXJuYWwgc3RhdGljIF9vcGVyYXRpbmdTeXN0ZW1WZXJzaW9uKCk7CiAgZXh0ZXJuYWwgc3RhdGljIF9sb2NhbEhvc3RuYW1lKCk7CiAgZXh0ZXJuYWwgc3RhdGljIF9leGVjdXRhYmxlKCk7CiAgZXh0ZXJuYWwgc3RhdGljIF9yZXNvbHZlZEV4ZWN1dGFibGUoKTsKCiAgLyoqCiAgICogUmV0cmlldmUgdGhlIGVudHJpZXMgb2YgdGhlIHByb2Nlc3MgZW52aXJvbm1lbnQuCiAgICoKICAgKiBUaGUgcmVzdWx0IGlzIGFuIFtJdGVyYWJsZV0gb2Ygc3RyaW5ncywgd2hlcmUgZWFjaCBzdHJpbmcgcmVwcmVzZW50cwogICAqIGFuIGVudmlyb25tZW50IGVudHJ5LgogICAqCiAgICogRW52aXJvbm1lbnQgZW50cmllcyBzaG91bGQgYmUgc3RyaW5ncyBjb250YWluaW5nCiAgICogYSBub24tZW1wdHkgbmFtZSBhbmQgYSB2YWx1ZSBzZXBhcmF0ZWQgYnkgYSAnPScgY2hhcmFjdGVyLgogICAqIFRoZSBuYW1lIGRvZXMgbm90IGNvbnRhaW4gYSAnPScgY2hhcmFjdGVyLAogICAqIHNvIHRoZSBuYW1lIGlzIGV2ZXJ5dGhpbmcgdXAgdG8gdGhlIGZpcnN0ICc9JyBjaGFyYWN0ZXIuCiAgICogVmFsdWVzIGFyZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCAnPScgY2hhcmFjdGVyLgogICAqIEEgdmFsdWUgbWF5IGNvbnRhaW4gZnVydGhlciAnPScgY2hhcmFjdGVycywgYW5kIGl0IG1heSBiZSBlbXB0eS4KICAgKgogICAqIFJldHVybnMgYW4gW09TRXJyb3JdIGlmIHJldHJpZXZpbmcgdGhlIGVudmlyb25tZW50IGZhaWxzLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBfZW52aXJvbm1lbnQoKTsKICBleHRlcm5hbCBzdGF0aWMgTGlzdDxTdHJpbmc+IF9leGVjdXRhYmxlQXJndW1lbnRzKCk7CiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBfcGFja2FnZVJvb3QoKTsgLy8gVE9ETyhtZmFpcmh1cnN0KTogcmVtb3ZlIHRoaXMKICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIF9wYWNrYWdlQ29uZmlnKCk7CiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBfdmVyc2lvbigpOwogIGV4dGVybmFsIHN0YXRpYyBTdHJpbmcgX2xvY2FsZU5hbWUoKTsKICBleHRlcm5hbCBzdGF0aWMgVXJpIF9zY3JpcHQoKTsKCiAgc3RhdGljIFN0cmluZyBleGVjdXRhYmxlID0gX2V4ZWN1dGFibGUoKTsKICBzdGF0aWMgU3RyaW5nIHJlc29sdmVkRXhlY3V0YWJsZSA9IF9yZXNvbHZlZEV4ZWN1dGFibGUoKTsKICBzdGF0aWMgU3RyaW5nIHBhY2thZ2VSb290OyAvLyBUT0RPKG1mYWlyaHVyc3QpOiByZW1vdmUgdGhpcwogIHN0YXRpYyBTdHJpbmcgcGFja2FnZUNvbmZpZyA9IF9wYWNrYWdlQ29uZmlnKCk7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBzdGF0aWMgU3RyaW5nIEZ1bmN0aW9uKCkgX2xvY2FsZUNsb3N1cmU7CiAgc3RhdGljIFN0cmluZyBsb2NhbGVOYW1lKCkgewogICAgZmluYWwgcmVzdWx0ID0gKF9sb2NhbGVDbG9zdXJlID09IG51bGwpID8gX2xvY2FsZU5hbWUoKSA6IF9sb2NhbGVDbG9zdXJlKCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgcmVzdWx0OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIENhY2hlIHRoZSBPUyBlbnZpcm9ubWVudC4gVGhpcyBjYW4gYmUgYW4gT1NFcnJvciBpbnN0YW5jZSBpZgogIC8vIHJldHJpZXZpbmcgdGhlIGVudmlyb25tZW50IGZhaWxlZC4KICBzdGF0aWMgdmFyIC8qT1NFcnJvcnxNYXA8U3RyaW5nLFN0cmluZz4qLyBfZW52aXJvbm1lbnRDYWNoZTsKCiAgc3RhdGljIGludCBnZXQgbnVtYmVyT2ZQcm9jZXNzb3JzID0+IF9udW1iZXJPZlByb2Nlc3NvcnMoKTsKICBzdGF0aWMgU3RyaW5nIGdldCBwYXRoU2VwYXJhdG9yID0+IF9wYXRoU2VwYXJhdG9yKCk7CiAgc3RhdGljIFN0cmluZyBnZXQgb3BlcmF0aW5nU3lzdGVtID0+IF9vcGVyYXRpbmdTeXN0ZW0oKTsKICBzdGF0aWMgVXJpIGdldCBzY3JpcHQgPT4gX3NjcmlwdCgpOwoKICBzdGF0aWMgU3RyaW5nIF9jYWNoZWRPU1ZlcnNpb247CiAgc3RhdGljIFN0cmluZyBnZXQgb3BlcmF0aW5nU3lzdGVtVmVyc2lvbiB7CiAgICBpZiAoX2NhY2hlZE9TVmVyc2lvbiA9PSBudWxsKSB7CiAgICAgIHZhciByZXN1bHQgPSBfb3BlcmF0aW5nU3lzdGVtVmVyc2lvbigpOwogICAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgICB0aHJvdyByZXN1bHQ7CiAgICAgIH0KICAgICAgX2NhY2hlZE9TVmVyc2lvbiA9IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBfY2FjaGVkT1NWZXJzaW9uOwogIH0KCiAgc3RhdGljIFN0cmluZyBnZXQgbG9jYWxIb3N0bmFtZSB7CiAgICB2YXIgcmVzdWx0ID0gX2xvY2FsSG9zdG5hbWUoKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIExpc3Q8U3RyaW5nPiBnZXQgZXhlY3V0YWJsZUFyZ3VtZW50cyA9PiBfZXhlY3V0YWJsZUFyZ3VtZW50cygpOwoKICBzdGF0aWMgTWFwPFN0cmluZywgU3RyaW5nPiBnZXQgZW52aXJvbm1lbnQgewogICAgaWYgKF9lbnZpcm9ubWVudENhY2hlID09IG51bGwpIHsKICAgICAgdmFyIGVudiA9IF9lbnZpcm9ubWVudCgpOwogICAgICBpZiAoZW52IGlzISBPU0Vycm9yKSB7CiAgICAgICAgdmFyIGlzV2luZG93cyA9IG9wZXJhdGluZ1N5c3RlbSA9PSAnd2luZG93cyc7CiAgICAgICAgdmFyIHJlc3VsdCA9IGlzV2luZG93cwogICAgICAgICAgICA/IG5ldyBfQ2FzZUluc2Vuc2l0aXZlU3RyaW5nTWFwPFN0cmluZz4oKQogICAgICAgICAgICA6IG5ldyBNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CiAgICAgICAgZm9yICh2YXIgc3RyIGluIGVudikgewogICAgICAgICAgaWYgKHN0ciA9PSBudWxsKSB7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgLy8gVGhlIFN0cmluZ3MgcmV0dXJuZWQgYnkgW19lbnZpcm9ubWVudCgpXSBhcmUgZXhwZWN0ZWQgdG8gYmUKICAgICAgICAgIC8vIHZhbGlkIGVudmlyb25tZW50IGVudHJpZXMsIGJ1dCBleGNlcHRpb25zIGhhdmUgYmVlbiBzZWVuCiAgICAgICAgICAvLyAoZS5nLiwgYW4gZW50cnkgb2YganVzdCAnPScgaGFzIGJlZW4gc2VlbiBvbiBPUy9YKS4KICAgICAgICAgIC8vIEludmFsaWQgZW50cmllcyAobGluZXMgd2l0aG91dCBhICc9JyBvciB3aXRoIGFuIGVtcHR5IG5hbWUpCiAgICAgICAgICAvLyBhcmUgZGlzY2FyZGVkLgogICAgICAgICAgdmFyIGVxdWFsc0luZGV4ID0gc3RyLmluZGV4T2YoJz0nKTsKICAgICAgICAgIGlmIChlcXVhbHNJbmRleCA+IDApIHsKICAgICAgICAgICAgcmVzdWx0W3N0ci5zdWJzdHJpbmcoMCwgZXF1YWxzSW5kZXgpXSA9CiAgICAgICAgICAgICAgICBzdHIuc3Vic3RyaW5nKGVxdWFsc0luZGV4ICsgMSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9lbnZpcm9ubWVudENhY2hlID0gbmV3IFVubW9kaWZpYWJsZU1hcFZpZXc8U3RyaW5nLCBTdHJpbmc+KHJlc3VsdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX2Vudmlyb25tZW50Q2FjaGUgPSBlbnY7CiAgICAgIH0KICAgIH0KCiAgICBpZiAoX2Vudmlyb25tZW50Q2FjaGUgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBfZW52aXJvbm1lbnRDYWNoZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfZW52aXJvbm1lbnRDYWNoZTsKICAgIH0KICB9CgogIHN0YXRpYyBTdHJpbmcgZ2V0IHZlcnNpb24gPT4gX3ZlcnNpb24oKTsKfQoKLy8gRW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIG9uIFdpbmRvd3MuIEluIG9yZGVyCi8vIHRvIHJlZmxlY3QgdGhhdCB3ZSB1c2UgYSBjYXNlLWluc2Vuc2l0aXZlIHN0cmluZyBtYXAgb24gV2luZG93cy4KY2xhc3MgX0Nhc2VJbnNlbnNpdGl2ZVN0cmluZ01hcDxWPiBleHRlbmRzIE1hcEJhc2U8U3RyaW5nLCBWPiB7CiAgZmluYWwgTWFwPFN0cmluZywgVj4gX21hcCA9IG5ldyBNYXA8U3RyaW5nLCBWPigpOwoKICBib29sIGNvbnRhaW5zS2V5KE9iamVjdCBrZXkpID0+CiAgICAgIGtleSBpcyBTdHJpbmcgJiYgX21hcC5jb250YWluc0tleShrZXkudG9VcHBlckNhc2UoKSk7CiAgYm9vbCBjb250YWluc1ZhbHVlKE9iamVjdCB2YWx1ZSkgPT4gX21hcC5jb250YWluc1ZhbHVlKHZhbHVlKTsKICBWIG9wZXJhdG9yIFtdKE9iamVjdCBrZXkpID0+IGtleSBpcyBTdHJpbmcgPyBfbWFwW2tleS50b1VwcGVyQ2FzZSgpXSA6IG51bGw7CiAgdm9pZCBvcGVyYXRvciBbXT0oU3RyaW5nIGtleSwgViB2YWx1ZSkgewogICAgX21hcFtrZXkudG9VcHBlckNhc2UoKV0gPSB2YWx1ZTsKICB9CgogIFYgcHV0SWZBYnNlbnQoU3RyaW5nIGtleSwgViBpZkFic2VudCgpKSB7CiAgICByZXR1cm4gX21hcC5wdXRJZkFic2VudChrZXkudG9VcHBlckNhc2UoKSwgaWZBYnNlbnQpOwogIH0KCiAgdm9pZCBhZGRBbGwoTWFwPFN0cmluZywgVj4gb3RoZXIpIHsKICAgIG90aGVyLmZvckVhY2goKGtleSwgdmFsdWUpID0+IHRoaXNba2V5LnRvVXBwZXJDYXNlKCldID0gdmFsdWUpOwogIH0KCiAgViByZW1vdmUoT2JqZWN0IGtleSkgPT4ga2V5IGlzIFN0cmluZyA/IF9tYXAucmVtb3ZlKGtleS50b1VwcGVyQ2FzZSgpKSA6IG51bGw7CgogIHZvaWQgY2xlYXIoKSB7CiAgICBfbWFwLmNsZWFyKCk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKFN0cmluZyBrZXksIFYgdmFsdWUpKSB7CiAgICBfbWFwLmZvckVhY2goZik7CiAgfQoKICBJdGVyYWJsZTxTdHJpbmc+IGdldCBrZXlzID0+IF9tYXAua2V5czsKICBJdGVyYWJsZTxWPiBnZXQgdmFsdWVzID0+IF9tYXAudmFsdWVzOwogIGludCBnZXQgbGVuZ3RoID0+IF9tYXAubGVuZ3RoOwogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX21hcC5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX21hcC5pc05vdEVtcHR5OwoKICBJdGVyYWJsZTxNYXBFbnRyeTxTdHJpbmcsIFY+PiBnZXQgZW50cmllcyA9PiBfbWFwLmVudHJpZXM7CgogIE1hcDxLMiwgVjI+IG1hcDxLMiwgVjI+KE1hcEVudHJ5PEsyLCBWMj4gdHJhbnNmb3JtKFN0cmluZyBrZXksIFYgdmFsdWUpKSA9PgogICAgICBfbWFwLm1hcCh0cmFuc2Zvcm0pOwoKICBWIHVwZGF0ZShTdHJpbmcga2V5LCBWIHVwZGF0ZShWIHZhbHVlKSwge1YgaWZBYnNlbnQoKX0pID0+CiAgICAgIF9tYXAudXBkYXRlKGtleS50b1VwcGVyQ2FzZSgpLCB1cGRhdGUsIGlmQWJzZW50OiBpZkFic2VudCk7CgogIHZvaWQgdXBkYXRlQWxsKFYgdXBkYXRlKFN0cmluZyBrZXksIFYgdmFsdWUpKSB7CiAgICBfbWFwLnVwZGF0ZUFsbCh1cGRhdGUpOwogIH0KCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoU3RyaW5nIGtleSwgViB2YWx1ZSkpIHsKICAgIF9tYXAucmVtb3ZlV2hlcmUodGVzdCk7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiBfbWFwLnRvU3RyaW5nKCk7Cn0KgLQATk48AREBEi0rLS0kISkBBjYFShsFNkAwPjpGBT8GIjdKKyUoIQEsPD4yARwrH1AdFAYTBAFCKD8BPjc7JgEiLSQuHxYIIQYdBAEkIx0UBhMEAUkBLyUgHTYfNikfHRYMSUZBSRwuITQwDApNDyEIBgEoHw0gBgQBKwIBQ0RANAEiPEFPKyUEASw6BAEmRAQBUQEREgQBLhUEASopISQqAT0BThsBPUIBMhwEATUcBAEoAgEaZGFydDppby9wbGF0Zm9ybV9pbXBsLmRhcnQzb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2Jpbi9wbGF0Zm9ybV9wYXRjaC5kYXJ0h3cvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29tbW9uX3BhdGNoLmRhcnQiOwoKQHBhdGNoCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX1BsYXRmb3JtIHsKICBAcGF0Y2gKICBzdGF0aWMgaW50IF9udW1iZXJPZlByb2Nlc3NvcnMoKSBuYXRpdmUgIlBsYXRmb3JtX051bWJlck9mUHJvY2Vzc29ycyI7CiAgQHBhdGNoCiAgc3RhdGljIFN0cmluZyBfcGF0aFNlcGFyYXRvcigpIG5hdGl2ZSAiUGxhdGZvcm1fUGF0aFNlcGFyYXRvciI7CiAgQHBhdGNoCiAgc3RhdGljIFN0cmluZyBfb3BlcmF0aW5nU3lzdGVtKCkgbmF0aXZlICJQbGF0Zm9ybV9PcGVyYXRpbmdTeXN0ZW0iOwogIEBwYXRjaAogIHN0YXRpYyBfb3BlcmF0aW5nU3lzdGVtVmVyc2lvbigpIG5hdGl2ZSAiUGxhdGZvcm1fT3BlcmF0aW5nU3lzdGVtVmVyc2lvbiI7CiAgQHBhdGNoCiAgc3RhdGljIF9sb2NhbEhvc3RuYW1lKCkgbmF0aXZlICJQbGF0Zm9ybV9Mb2NhbEhvc3RuYW1lIjsKICBAcGF0Y2gKICBzdGF0aWMgX2V4ZWN1dGFibGUoKSBuYXRpdmUgIlBsYXRmb3JtX0V4ZWN1dGFibGVOYW1lIjsKICBAcGF0Y2gKICBzdGF0aWMgX3Jlc29sdmVkRXhlY3V0YWJsZSgpIG5hdGl2ZSAiUGxhdGZvcm1fUmVzb2x2ZWRFeGVjdXRhYmxlTmFtZSI7CiAgQHBhdGNoCiAgc3RhdGljIF9lbnZpcm9ubWVudCgpIG5hdGl2ZSAiUGxhdGZvcm1fRW52aXJvbm1lbnQiOwogIEBwYXRjaAogIHN0YXRpYyBMaXN0PFN0cmluZz4gX2V4ZWN1dGFibGVBcmd1bWVudHMoKQogICAgICBuYXRpdmUgIlBsYXRmb3JtX0V4ZWN1dGFibGVBcmd1bWVudHMiOwogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgX3ZlcnNpb24oKSBuYXRpdmUgIlBsYXRmb3JtX0dldFZlcnNpb24iOwoKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIF9sb2NhbGVOYW1lKCkgbmF0aXZlICJQbGF0Zm9ybV9Mb2NhbGVOYW1lIjsKCiAgQHBhdGNoCiAgc3RhdGljIFN0cmluZyBfcGFja2FnZVJvb3QoKSA9PiBWTUxpYnJhcnlIb29rcy5wYWNrYWdlUm9vdFN0cmluZzsKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIF9wYWNrYWdlQ29uZmlnKCkgPT4gVk1MaWJyYXJ5SG9va3MucGFja2FnZUNvbmZpZ1N0cmluZzsKCiAgQHBhdGNoCiAgc3RhdGljIFVyaSBfc2NyaXB0KCkgPT4gVk1MaWJyYXJ5SG9va3MucGxhdGZvcm1TY3JpcHQ7CgogIC8vIFRoaXMgc2NyaXB0IHNpbmdsZXRvbiBpcyB3cml0dGVuIHRvIGJ5IHRoZSBlbWJlZGRlciBpZiBhcHBsaWNhYmxlLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBzdGF0aWMgdm9pZCBzZXQgX25hdGl2ZVNjcmlwdChTdHJpbmcgcGF0aCkgewogICAgVk1MaWJyYXJ5SG9va3MucGxhdGZvcm1TY3JpcHQgPSAoKCkgewogICAgICBpZiAocGF0aC5zdGFydHNXaXRoKCdodHRwOicpIHx8CiAgICAgICAgICBwYXRoLnN0YXJ0c1dpdGgoJ2h0dHBzOicpIHx8CiAgICAgICAgICBwYXRoLnN0YXJ0c1dpdGgoJ3BhY2thZ2U6JykgfHwKICAgICAgICAgIHBhdGguc3RhcnRzV2l0aCgnZGFydDonKSB8fAogICAgICAgICAgcGF0aC5zdGFydHNXaXRoKCdkYXRhOicpIHx8CiAgICAgICAgICBwYXRoLnN0YXJ0c1dpdGgoJ2ZpbGU6JykpIHsKICAgICAgICByZXR1cm4gVXJpLnBhcnNlKHBhdGgpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBVcmkuYmFzZS5yZXNvbHZlVXJpKG5ldyBVcmkuZmlsZShwYXRoKSk7CiAgICAgIH0KICAgIH0pOwogIH0KfQo9AE5OPAEgAQcaEglJCUIJRglNCTsJOQlJCTcJLS0JOQEJPAEJRAlIAQk5AUgcLyomJykmJiYgDzgICAQCASFkYXJ0OmlvLXBhdGNoL3BsYXRmb3JtX3BhdGNoLmRhcnQrb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL3Byb2Nlc3MuZGFydMAAZ+0vLyBDb3B5cmlnaHQgKGMpIDIwMTQsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLy8gVE9ETyhhZ2VyKTogVGhlIG9ubHkgcmVhc29uIGZvciB0aGlzIGNsYXNzIGlzIHRoYXQgd2UKLy8gY2Fubm90IHBhdGNoIGEgdG9wLWxldmVsIGF0IHRoaXMgcG9pbnQuCmNsYXNzIF9Qcm9jZXNzVXRpbHMgewogIGV4dGVybmFsIHN0YXRpYyB2b2lkIF9leGl0KGludCBzdGF0dXMpOwogIGV4dGVybmFsIHN0YXRpYyB2b2lkIF9zZXRFeGl0Q29kZShpbnQgc3RhdHVzKTsKICBleHRlcm5hbCBzdGF0aWMgaW50IF9nZXRFeGl0Q29kZSgpOwogIGV4dGVybmFsIHN0YXRpYyB2b2lkIF9zbGVlcChpbnQgbWlsbGlzKTsKICBleHRlcm5hbCBzdGF0aWMgaW50IF9waWQoUHJvY2VzcyBwcm9jZXNzKTsKICBleHRlcm5hbCBzdGF0aWMgU3RyZWFtPFByb2Nlc3NTaWduYWw+IF93YXRjaFNpZ25hbChQcm9jZXNzU2lnbmFsIHNpZ25hbCk7Cn0KCi8qKgogKiBFeGl0IHRoZSBEYXJ0IFZNIHByb2Nlc3MgaW1tZWRpYXRlbHkgd2l0aCB0aGUgZ2l2ZW4gZXhpdCBjb2RlLgogKgogKiBUaGlzIGRvZXMgbm90IHdhaXQgZm9yIGFueSBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyB0byB0ZXJtaW5hdGUuIFVzaW5nCiAqIFtleGl0XSBpcyB0aGVyZWZvcmUgdmVyeSBsaWtlbHkgdG8gbG9zZSBkYXRhLgogKgogKiBXaGlsZSBkZWJ1Z2dpbmcsIHRoZSBWTSB3aWxsIG5vdCByZXNwZWN0IHRoZSBgLS1wYXVzZS1pc29sYXRlcy1vbi1leGl0YAogKiBmbGFnIGlmIFtleGl0XSBpcyBjYWxsZWQgYXMgaW52b2tpbmcgdGhpcyBtZXRob2QgY2F1c2VzIHRoZSBEYXJ0IFZNCiAqIHByb2Nlc3MgdG8gc2h1dGRvd24gaW1tZWRpYXRlbHkuIFRvIHByb3Blcmx5IGJyZWFrIG9uIGV4aXQsIGNvbnNpZGVyCiAqIGNhbGxpbmcgW2RlYnVnZ2VyXSBmcm9tIGBkYXJ0OmRldmVsb3BlcmAgb3IgW0lzb2xhdGUucGF1c2VdIGZyb20KICogYGRhcnQ6aXNvbGF0ZWAgb24gW0lzb2xhdGUuY3VycmVudF0gdG8gcGF1c2UgdGhlIGlzb2xhdGUgYmVmb3JlCiAqIGludm9raW5nIFtleGl0XS4KICoKICogVGhlIGhhbmRsaW5nIG9mIGV4aXQgY29kZXMgaXMgcGxhdGZvcm0gc3BlY2lmaWMuCiAqCiAqIE9uIExpbnV4IGFuZCBPUyBYIGFuIGV4aXQgY29kZSBmb3Igbm9ybWFsIHRlcm1pbmF0aW9uIHdpbGwgYWx3YXlzCiAqIGJlIGluIHRoZSByYW5nZSBbMC4uMjU1XS4gSWYgYW4gZXhpdCBjb2RlIG91dHNpZGUgdGhpcyByYW5nZSBpcwogKiBzZXQgdGhlIGFjdHVhbCBleGl0IGNvZGUgd2lsbCBiZSB0aGUgbG93ZXIgOCBiaXRzIG1hc2tlZCBvZmYgYW5kCiAqIHRyZWF0ZWQgYXMgYW4gdW5zaWduZWQgdmFsdWUuIEUuZy4gdXNpbmcgYW4gZXhpdCBjb2RlIG9mIC0xIHdpbGwKICogcmVzdWx0IGluIGFuIGFjdHVhbCBleGl0IGNvZGUgb2YgMjU1IGJlaW5nIHJlcG9ydGVkLgogKgogKiBPbiBXaW5kb3dzIHRoZSBleGl0IGNvZGUgY2FuIGJlIHNldCB0byBhbnkgMzItYml0IHZhbHVlLiBIb3dldmVyCiAqIHNvbWUgb2YgdGhlc2UgdmFsdWVzIGFyZSByZXNlcnZlZCBmb3IgcmVwb3J0aW5nIHN5c3RlbSBlcnJvcnMgbGlrZQogKiBjcmFzaGVzLgogKgogKiBCZXNpZGVzIHRoaXMgdGhlIERhcnQgZXhlY3V0YWJsZSBpdHNlbGYgdXNlcyBhbiBleGl0IGNvZGUgb2YgYDI1NGAKICogZm9yIHJlcG9ydGluZyBjb21waWxlIHRpbWUgZXJyb3JzIGFuZCBhbiBleGl0IGNvZGUgb2YgYDI1NWAgZm9yCiAqIHJlcG9ydGluZyBydW50aW1lIGVycm9yICh1bmhhbmRsZWQgZXhjZXB0aW9uKS4KICoKICogRHVlIHRvIHRoZXNlIGZhY3RzIGl0IGlzIHJlY29tbWVuZGVkIHRvIG9ubHkgdXNlIGV4aXQgY29kZXMgaW4gdGhlCiAqIHJhbmdlIFswLi4xMjddIGZvciBjb21tdW5pY2F0aW5nIHRoZSByZXN1bHQgb2YgcnVubmluZyBhIERhcnQKICogcHJvZ3JhbSB0byB0aGUgc3Vycm91bmRpbmcgZW52aXJvbm1lbnQuIFRoaXMgd2lsbCBhdm9pZCBhbnkKICogY3Jvc3MtcGxhdGZvcm0gaXNzdWVzLgogKi8Kdm9pZCBleGl0KGludCBjb2RlKSB7CiAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoY29kZSwgImNvZGUiKTsKICBpZiAoIV9FbWJlZGRlckNvbmZpZy5fbWF5RXhpdCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIlRoaXMgZW1iZWRkZXIgZGlzYWxsb3dzIGNhbGxpbmcgZGFydDppbydzIGV4aXQoKSIpOwogIH0KICBfUHJvY2Vzc1V0aWxzLl9leGl0KGNvZGUpOwp9CgovKioKICogU2V0IHRoZSBnbG9iYWwgZXhpdCBjb2RlIGZvciB0aGUgRGFydCBWTS4KICoKICogVGhlIGV4aXQgY29kZSBpcyBnbG9iYWwgZm9yIHRoZSBEYXJ0IFZNIGFuZCB0aGUgbGFzdCBhc3NpZ25tZW50IHRvCiAqIGV4aXRDb2RlIGZyb20gYW55IGlzb2xhdGUgZGV0ZXJtaW5lcyB0aGUgZXhpdCBjb2RlIG9mIHRoZSBEYXJ0IFZNCiAqIG9uIG5vcm1hbCB0ZXJtaW5hdGlvbi4KICoKICogRGVmYXVsdCB2YWx1ZSBpcyBgMGAuCiAqCiAqIFNlZSBbZXhpdF0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGNob3NlIGEgdmFsdWUgZm9yIHRoZQogKiBleGl0IGNvZGUuCiAqLwp2b2lkIHNldCBleGl0Q29kZShpbnQgY29kZSkgewogIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKGNvZGUsICJjb2RlIik7CiAgX1Byb2Nlc3NVdGlscy5fc2V0RXhpdENvZGUoY29kZSk7Cn0KCi8qKgogKiBHZXQgdGhlIGdsb2JhbCBleGl0IGNvZGUgZm9yIHRoZSBEYXJ0IFZNLgogKgogKiBUaGUgZXhpdCBjb2RlIGlzIGdsb2JhbCBmb3IgdGhlIERhcnQgVk0gYW5kIHRoZSBsYXN0IGFzc2lnbm1lbnQgdG8KICogZXhpdENvZGUgZnJvbSBhbnkgaXNvbGF0ZSBkZXRlcm1pbmVzIHRoZSBleGl0IGNvZGUgb2YgdGhlIERhcnQgVk0KICogb24gbm9ybWFsIHRlcm1pbmF0aW9uLgogKgogKiBTZWUgW2V4aXRdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjaG9zZSBhIHZhbHVlIGZvciB0aGUKICogZXhpdCBjb2RlLgogKi8KaW50IGdldCBleGl0Q29kZSA9PiBfUHJvY2Vzc1V0aWxzLl9nZXRFeGl0Q29kZSgpOwoKLyoqCiAqIFNsZWVwIGZvciB0aGUgZHVyYXRpb24gc3BlY2lmaWVkIGluIFtkdXJhdGlvbl0uCiAqCiAqIFVzZSB0aGlzIHdpdGggY2FyZSwgYXMgbm8gYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgY2FuIGJlIHByb2Nlc3NlZAogKiBpbiBhIGlzb2xhdGUgd2hpbGUgaXQgaXMgYmxvY2tlZCBpbiBhIFtzbGVlcF0gY2FsbC4KICovCnZvaWQgc2xlZXAoRHVyYXRpb24gZHVyYXRpb24pIHsKICBpbnQgbWlsbGlzZWNvbmRzID0gZHVyYXRpb24uaW5NaWxsaXNlY29uZHM7CiAgaWYgKG1pbGxpc2Vjb25kcyA8IDApIHsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJzbGVlcDogZHVyYXRpb24gY2Fubm90IGJlIG5lZ2F0aXZlIik7CiAgfQogIGlmICghX0VtYmVkZGVyQ29uZmlnLl9tYXlTbGVlcCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgIlRoaXMgZW1iZWRkZXIgZGlzYWxsb3dzIGNhbGxpbmcgZGFydDppbydzIHNsZWVwKCkiKTsKICB9CiAgX1Byb2Nlc3NVdGlscy5fc2xlZXAobWlsbGlzZWNvbmRzKTsKfQoKLyoqCiAqIFJldHVybnMgdGhlIFBJRCBvZiB0aGUgY3VycmVudCBwcm9jZXNzLgogKi8KaW50IGdldCBwaWQgPT4gX1Byb2Nlc3NVdGlscy5fcGlkKG51bGwpOwoKLyoqCiAqIFtQcm9jZXNzSW5mb10gcHJvdmlkZXMgbWV0aG9kcyBmb3IgcmV0cmlldmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUKICogY3VycmVudCBwcm9jZXNzLgogKi8KY2xhc3MgUHJvY2Vzc0luZm8gewogIC8qKgogICAqIFRoZSBjdXJyZW50IHJlc2lkZW50IHNldCBzaXplIG9mIG1lbW9yeSBmb3IgdGhlIHByb2Nlc3MuCiAgICoKICAgKiBOb3RlIHRoYXQgdGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQuIEZvciBleGFtcGxlLAogICAqIHNvbWUgbWVtb3J5IGFjY291bnRlZCBmb3IgaGVyZSBtYXkgYmUgc2hhcmVkIHdpdGggb3RoZXIgcHJvY2Vzc2VzLCBvciBpZgogICAqIHRoZSBzYW1lIHBhZ2UgaXMgbWFwcGVkIGludG8gYSBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZSwgaXQgbWF5IGJlIGNvdW50ZWQKICAgKiB0d2ljZS4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgaW50IGdldCBjdXJyZW50UnNzOwoKICAvKioKICAgKiBUaGUgaGlnaC13YXRlcm1hcmsgaW4gYnl0ZXMgZm9yIHRoZSByZXNpZGVudCBzZXQgc2l6ZSBvZiBtZW1vcnkgZm9yIHRoZQogICAqIHByb2Nlc3MuCiAgICoKICAgKiBOb3RlIHRoYXQgdGhlIG1lYW5pbmcgb2YgdGhpcyBmaWVsZCBpcyBwbGF0Zm9ybSBkZXBlbmRlbnQuIEZvciBleGFtcGxlLAogICAqIHNvbWUgbWVtb3J5IGFjY291bnRlZCBmb3IgaGVyZSBtYXkgYmUgc2hhcmVkIHdpdGggb3RoZXIgcHJvY2Vzc2VzLCBvciBpZgogICAqIHRoZSBzYW1lIHBhZ2UgaXMgbWFwcGVkIGludG8gYSBwcm9jZXNzJ3MgYWRkcmVzcyBzcGFjZSwgaXQgbWF5IGJlIGNvdW50ZWQKICAgKiB0d2ljZS4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgaW50IGdldCBtYXhSc3M7Cn0KCi8qKgogKiBNb2RlcyBmb3IgcnVubmluZyBhIG5ldyBwcm9jZXNzLgogKi8KY2xhc3MgUHJvY2Vzc1N0YXJ0TW9kZSB7CiAgLy8vIE5vcm1hbCBjaGlsZCBwcm9jZXNzLgogIHN0YXRpYyBjb25zdCBub3JtYWwgPSBjb25zdCBQcm9jZXNzU3RhcnRNb2RlLl9pbnRlcm5hbCgwKTsKICBARGVwcmVjYXRlZCgiVXNlIG5vcm1hbCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgTk9STUFMID0gbm9ybWFsOwoKICAvLy8gU3RkaW8gaGFuZGxlcyBhcmUgaW5oZXJpdGVkIGJ5IHRoZSBjaGlsZCBwcm9jZXNzLgogIHN0YXRpYyBjb25zdCBpbmhlcml0U3RkaW8gPSBjb25zdCBQcm9jZXNzU3RhcnRNb2RlLl9pbnRlcm5hbCgxKTsKICBARGVwcmVjYXRlZCgiVXNlIGluaGVyaXRTdGRpbyBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgSU5IRVJJVF9TVERJTyA9IGluaGVyaXRTdGRpbzsKCiAgLy8vIERldGFjaGVkIGNoaWxkIHByb2Nlc3Mgd2l0aCBubyBvcGVuIGNvbW11bmljYXRpb24gY2hhbm5lbC4KICBzdGF0aWMgY29uc3QgZGV0YWNoZWQgPSBjb25zdCBQcm9jZXNzU3RhcnRNb2RlLl9pbnRlcm5hbCgyKTsKICBARGVwcmVjYXRlZCgiVXNlIGRldGFjaGVkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBERVRBQ0hFRCA9IGRldGFjaGVkOwoKICAvLy8gRGV0YWNoZWQgY2hpbGQgcHJvY2VzcyB3aXRoIHN0ZGluLCBzdGRvdXQgYW5kIHN0ZGVyciBzdGlsbCBvcGVuCiAgLy8vIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIGNoaWxkLgogIHN0YXRpYyBjb25zdCBkZXRhY2hlZFdpdGhTdGRpbyA9IGNvbnN0IFByb2Nlc3NTdGFydE1vZGUuX2ludGVybmFsKDMpOwogIEBEZXByZWNhdGVkKCJVc2UgZGV0YWNoZWRXaXRoU3RkaW8gaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IERFVEFDSEVEX1dJVEhfU1RESU8gPSBkZXRhY2hlZFdpdGhTdGRpbzsKCiAgc3RhdGljIExpc3Q8UHJvY2Vzc1N0YXJ0TW9kZT4gZ2V0IHZhbHVlcyA9PiBjb25zdCA8UHJvY2Vzc1N0YXJ0TW9kZT5bCiAgICAgICAgbm9ybWFsLAogICAgICAgIGluaGVyaXRTdGRpbywKICAgICAgICBkZXRhY2hlZCwKICAgICAgICBkZXRhY2hlZFdpdGhTdGRpbwogICAgICBdOwogIFN0cmluZyB0b1N0cmluZygpID0+CiAgICAgIGNvbnN0IFsibm9ybWFsIiwgImluaGVyaXRTdGRpbyIsICJkZXRhY2hlZCIsICJkZXRhY2hlZFdpdGhTdGRpbyJdW19tb2RlXTsKCiAgZmluYWwgaW50IF9tb2RlOwogIGNvbnN0IFByb2Nlc3NTdGFydE1vZGUuX2ludGVybmFsKHRoaXMuX21vZGUpOwp9CgovKioKICogVGhlIG1lYW5zIHRvIGV4ZWN1dGUgYSBwcm9ncmFtLgogKgogKiBVc2UgdGhlIHN0YXRpYyBbc3RhcnRdIGFuZCBbcnVuXSBtZXRob2RzIHRvIHN0YXJ0IGEgbmV3IHByb2Nlc3MuCiAqIFRoZSBydW4gbWV0aG9kIGV4ZWN1dGVzIHRoZSBwcm9jZXNzIG5vbi1pbnRlcmFjdGl2ZWx5IHRvIGNvbXBsZXRpb24uCiAqIEluIGNvbnRyYXN0LCB0aGUgc3RhcnQgbWV0aG9kIGFsbG93cyB5b3VyIGNvZGUgdG8gaW50ZXJhY3Qgd2l0aCB0aGUKICogcnVubmluZyBwcm9jZXNzLgogKgogKiAjIyBTdGFydCBhIHByb2Nlc3Mgd2l0aCB0aGUgcnVuIG1ldGhvZAogKgogKiBUaGUgZm9sbG93aW5nIGNvZGUgc2FtcGxlIHVzZXMgdGhlIHJ1biBtZXRob2QgdG8gY3JlYXRlIGEgcHJvY2VzcwogKiB0aGF0IHJ1bnMgdGhlIFVOSVggY29tbWFuZCBgbHNgLCB3aGljaCBsaXN0cyB0aGUgY29udGVudHMgb2YgYSBkaXJlY3RvcnkuCiAqIFRoZSBydW4gbWV0aG9kIGNvbXBsZXRlcyB3aXRoIGEgW1Byb2Nlc3NSZXN1bHRdIG9iamVjdCB3aGVuIHRoZSBwcm9jZXNzCiAqIHRlcm1pbmF0ZXMuIFRoaXMgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZSBvdXRwdXQgYW5kIGV4aXQgY29kZSBmcm9tIHRoZQogKiBwcm9jZXNzLiBUaGUgcnVuIG1ldGhvZCBkb2VzIG5vdCByZXR1cm4gYSBQcm9jZXNzIG9iamVjdDsgdGhpcyBwcmV2ZW50cyB5b3VyCiAqIGNvZGUgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBydW5uaW5nIHByb2Nlc3MuCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKgogKiAgICAgbWFpbigpIHsKICogICAgICAgLy8gTGlzdCBhbGwgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGluIFVOSVgtbGlrZSBzeXN0ZW1zLgogKiAgICAgICBQcm9jZXNzLnJ1bignbHMnLCBbJy1sJ10pLnRoZW4oKFByb2Nlc3NSZXN1bHQgcmVzdWx0cykgewogKiAgICAgICAgIHByaW50KHJlc3VsdHMuc3Rkb3V0KTsKICogICAgICAgfSk7CiAqICAgICB9CiAqCiAqICMjIFN0YXJ0IGEgcHJvY2VzcyB3aXRoIHRoZSBzdGFydCBtZXRob2QKICoKICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHVzZXMgc3RhcnQgdG8gY3JlYXRlIHRoZSBwcm9jZXNzLgogKiBUaGUgc3RhcnQgbWV0aG9kIHJldHVybnMgYSBbRnV0dXJlXSBmb3IgYSBQcm9jZXNzIG9iamVjdC4KICogV2hlbiB0aGUgZnV0dXJlIGNvbXBsZXRlcyB0aGUgcHJvY2VzcyBpcyBzdGFydGVkIGFuZAogKiB5b3VyIGNvZGUgY2FuIGludGVyYWN0IHdpdGggdGhlCiAqIFByb2Nlc3M6IHdyaXRpbmcgdG8gc3RkaW4sIGxpc3RlbmluZyB0byBzdGRvdXQsIGFuZCBzbyBvbi4KICoKICogVGhlIGZvbGxvd2luZyBzYW1wbGUgc3RhcnRzIHRoZSBVTklYIGBjYXRgIHV0aWxpdHksIHdoaWNoIHdoZW4gZ2l2ZW4gbm8KICogY29tbWFuZC1saW5lIGFyZ3VtZW50cywgZWNob3MgaXRzIGlucHV0LgogKiBUaGUgcHJvZ3JhbSB3cml0ZXMgdG8gdGhlIHByb2Nlc3MncyBzdGFuZGFyZCBpbnB1dCBzdHJlYW0KICogYW5kIHByaW50cyBkYXRhIGZyb20gaXRzIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0uCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKiAgICAgaW1wb3J0ICdkYXJ0OmNvbnZlcnQnOwogKgogKiAgICAgbWFpbigpIHsKICogICAgICAgUHJvY2Vzcy5zdGFydCgnY2F0JywgW10pLnRoZW4oKFByb2Nlc3MgcHJvY2VzcykgewogKiAgICAgICAgIHByb2Nlc3Muc3Rkb3V0CiAqICAgICAgICAgICAgIC50cmFuc2Zvcm0odXRmOC5kZWNvZGVyKQogKiAgICAgICAgICAgICAubGlzdGVuKChkYXRhKSB7IHByaW50KGRhdGEpOyB9KTsKICogICAgICAgICBwcm9jZXNzLnN0ZGluLndyaXRlbG4oJ0hlbGxvLCB3b3JsZCEnKTsKICogICAgICAgICBwcm9jZXNzLnN0ZGluLndyaXRlbG4oJ0hlbGxvLCBnYWxheHkhJyk7CiAqICAgICAgICAgcHJvY2Vzcy5zdGRpbi53cml0ZWxuKCdIZWxsbywgdW5pdmVyc2UhJyk7CiAqICAgICAgIH0pOwogKiAgICAgfQogKgogKiAjIyBTdGFuZGFyZCBJL08gc3RyZWFtcwogKgogKiBBcyBzZWVuIGluIHRoZSBwcmV2aW91cyBjb2RlIHNhbXBsZSwgeW91IGNhbiBpbnRlcmFjdCB3aXRoIHRoZSBQcm9jZXNzJ3MKICogc3RhbmRhcmQgb3V0cHV0IHN0cmVhbSB0aHJvdWdoIHRoZSBnZXR0ZXIgW3N0ZG91dF0sCiAqIGFuZCB5b3UgY2FuIGludGVyYWN0IHdpdGggdGhlIFByb2Nlc3MncyBzdGFuZGFyZCBpbnB1dCBzdHJlYW0gdGhyb3VnaAogKiB0aGUgZ2V0dGVyIFtzdGRpbl0uCiAqIEluIGFkZGl0aW9uLCBQcm9jZXNzIHByb3ZpZGVzIGEgZ2V0dGVyIFtzdGRlcnJdIGZvciB1c2luZyB0aGUgUHJvY2VzcydzCiAqIHN0YW5kYXJkIGVycm9yIHN0cmVhbS4KICoKICogQSBQcm9jZXNzJ3Mgc3RyZWFtcyBhcmUgZGlzdGluY3QgZnJvbSB0aGUgdG9wLWxldmVsIHN0cmVhbXMKICogZm9yIHRoZSBjdXJyZW50IHByb2dyYW0uCiAqCiAqICMjIEV4aXQgY29kZXMKICoKICogQ2FsbCB0aGUgW2V4aXRDb2RlXSBtZXRob2QgdG8gZ2V0IHRoZSBleGl0IGNvZGUgb2YgdGhlIHByb2Nlc3MuCiAqIFRoZSBleGl0IGNvZGUgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHByb2dyYW0gdGVybWluYXRlZCBzdWNjZXNzZnVsbHkKICogKHVzdWFsbHkgaW5kaWNhdGVkIHdpdGggYW4gZXhpdCBjb2RlIG9mIDApIG9yIHdpdGggYW4gZXJyb3IuCiAqCiAqIElmIHRoZSBzdGFydCBtZXRob2QgaXMgdXNlZCwgdGhlIGV4aXRDb2RlIGlzIGF2YWlsYWJsZSB0aHJvdWdoIGEgZnV0dXJlCiAqIG9uIHRoZSBQcm9jZXNzIG9iamVjdCAoYXMgc2hvd24gaW4gdGhlIGV4YW1wbGUgYmVsb3cpLgogKiBJZiB0aGUgcnVuIG1ldGhvZCBpcyB1c2VkLCB0aGUgZXhpdENvZGUgaXMgYXZhaWxhYmxlCiAqIHRocm91Z2ggYSBnZXR0ZXIgb24gdGhlIFByb2Nlc3NSZXN1bHQgaW5zdGFuY2UuCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKgogKiAgICAgbWFpbigpIHsKICogICAgICAgUHJvY2Vzcy5zdGFydCgnbHMnLCBbJy1sJ10pLnRoZW4oKHByb2Nlc3MpIHsKICogICAgICAgICAvLyBHZXQgdGhlIGV4aXQgY29kZSBmcm9tIHRoZSBuZXcgcHJvY2Vzcy4KICogICAgICAgICBwcm9jZXNzLmV4aXRDb2RlLnRoZW4oKGV4aXRDb2RlKSB7CiAqICAgICAgICAgICBwcmludCgnZXhpdCBjb2RlOiAkZXhpdENvZGUnKTsKICogICAgICAgICB9KTsKICogICAgICAgfSk7CiAqICAgICB9CiAqCiAqICMjIE90aGVyIHJlc291cmNlcwogKgogKiBbRGFydCBieSBFeGFtcGxlXShodHRwczovL3d3dy5kYXJ0bGFuZy5vcmcvZGFydC1ieS1leGFtcGxlLyNkYXJ0LWlvLWFuZC1jb21tYW5kLWxpbmUtYXBwcykKICogcHJvdmlkZXMgYWRkaXRpb25hbCB0YXNrLW9yaWVudGVkIGNvZGUgc2FtcGxlcyB0aGF0IHNob3cgaG93IHRvIHVzZQogKiB2YXJpb3VzIEFQSSBmcm9tIHRoZSBbZGFydDppb10gbGlicmFyeS4KICovCmFic3RyYWN0IGNsYXNzIFByb2Nlc3MgewogIC8qKgogICAqIFJldHVybnMgYSBbOkZ1dHVyZTpdIHdoaWNoIGNvbXBsZXRlcyB3aXRoIHRoZSBleGl0IGNvZGUgb2YgdGhlIHByb2Nlc3MKICAgKiB3aGVuIHRoZSBwcm9jZXNzIGNvbXBsZXRlcy4KICAgKgogICAqIFRoZSBoYW5kbGluZyBvZiBleGl0IGNvZGVzIGlzIHBsYXRmb3JtIHNwZWNpZmljLgogICAqCiAgICogT24gTGludXggYW5kIE9TIFggYSBub3JtYWwgZXhpdCBjb2RlIHdpbGwgYmUgYSBwb3NpdGl2ZSB2YWx1ZSBpbgogICAqIHRoZSByYW5nZSBbMC4uMjU1XS4gSWYgdGhlIHByb2Nlc3Mgd2FzIHRlcm1pbmF0ZWQgZHVlIHRvIGEgc2lnbmFsCiAgICogdGhlIGV4aXQgY29kZSB3aWxsIGJlIGEgbmVnYXRpdmUgdmFsdWUgaW4gdGhlIHJhbmdlIFstMjU1Li4tMV0sCiAgICogd2hlcmUgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBleGl0IGNvZGUgaXMgdGhlIHNpZ25hbAogICAqIG51bWJlci4gRm9yIGV4YW1wbGUsIGlmIGEgcHJvY2VzcyBjcmFzaGVzIGR1ZSB0byBhIHNlZ21lbnRhdGlvbgogICAqIHZpb2xhdGlvbiB0aGUgZXhpdCBjb2RlIHdpbGwgYmUgLTExLCBhcyB0aGUgc2lnbmFsIFNJR1NFR1YgaGFzIHRoZQogICAqIG51bWJlciAxMS4KICAgKgogICAqIE9uIFdpbmRvd3MgYSBwcm9jZXNzIGNhbiByZXBvcnQgYW55IDMyLWJpdCB2YWx1ZSBhcyBhbiBleGl0CiAgICogY29kZS4gV2hlbiByZXR1cm5pbmcgdGhlIGV4aXQgY29kZSB0aGlzIGV4aXQgY29kZSBpcyB0dXJuZWQgaW50bwogICAqIGEgc2lnbmVkIHZhbHVlLiBTb21lIHNwZWNpYWwgdmFsdWVzIGFyZSB1c2VkIHRvIHJlcG9ydAogICAqIHRlcm1pbmF0aW9uIGR1ZSB0byBzb21lIHN5c3RlbSBldmVudC4gRS5nLiBpZiBhIHByb2Nlc3MgY3Jhc2hlcwogICAqIGR1ZSB0byBhbiBhY2Nlc3MgdmlvbGF0aW9uIHRoZSAzMi1iaXQgZXhpdCBjb2RlIGlzIGAweGMwMDAwMDA1YCwKICAgKiB3aGljaCB3aWxsIGJlIHJldHVybmVkIGFzIHRoZSBuZWdhdGl2ZSBudW1iZXIgYC0xMDczNzQxODE5YC4gVG8KICAgKiBnZXQgdGhlIG9yaWdpbmFsIDMyLWJpdCB2YWx1ZSB1c2UgYCgweDEwMDAwMDAwMCArIGV4aXRDb2RlKSAmCiAgICogMHhmZmZmZmZmZmAuCiAgICoKICAgKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBbc3Rkb3V0XSBhbmQgW3N0ZGVycl0gaGF2ZSBmaW5pc2hlZCByZXBvcnRpbmcKICAgKiB0aGUgYnVmZmVyZWQgb3V0cHV0IG9mIHRoZSBwcm9jZXNzIHdoZW4gdGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMuCiAgICogVG8gYmUgc3VyZSB0aGF0IGFsbCBvdXRwdXQgaXMgY2FwdHVyZWQsCiAgICogd2FpdCBmb3IgdGhlIGRvbmUgZXZlbnQgb24gdGhlIHN0cmVhbXMuCiAgICovCiAgRnV0dXJlPGludD4gZ2V0IGV4aXRDb2RlOwoKICAvKioKICAgKiBTdGFydHMgYSBwcm9jZXNzIHJ1bm5pbmcgdGhlIFtleGVjdXRhYmxlXSB3aXRoIHRoZSBzcGVjaWZpZWQKICAgKiBbYXJndW1lbnRzXS4gUmV0dXJucyBhIFs6RnV0dXJlPFByb2Nlc3M+Ol0gdGhhdCBjb21wbGV0ZXMgd2l0aCBhCiAgICogUHJvY2VzcyBpbnN0YW5jZSB3aGVuIHRoZSBwcm9jZXNzIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseQogICAqIHN0YXJ0ZWQuIFRoYXQgW1Byb2Nlc3NdIG9iamVjdCBjYW4gYmUgdXNlZCB0byBpbnRlcmFjdCB3aXRoIHRoZQogICAqIHByb2Nlc3MuIElmIHRoZSBwcm9jZXNzIGNhbm5vdCBiZSBzdGFydGVkIHRoZSByZXR1cm5lZCBbRnV0dXJlXQogICAqIGNvbXBsZXRlcyB3aXRoIGFuIGV4Y2VwdGlvbi4KICAgKgogICAqIFVzZSBbd29ya2luZ0RpcmVjdG9yeV0gdG8gc2V0IHRoZSB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIHByb2Nlc3MuIE5vdGUKICAgKiB0aGF0IHRoZSBjaGFuZ2Ugb2YgZGlyZWN0b3J5IG9jY3VycyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBwcm9jZXNzIG9uIHNvbWUKICAgKiBwbGF0Zm9ybXMsIHdoaWNoIG1heSBoYXZlIGltcGFjdCB3aGVuIHVzaW5nIHJlbGF0aXZlIHBhdGhzIGZvciB0aGUKICAgKiBleGVjdXRhYmxlIGFuZCB0aGUgYXJndW1lbnRzLgogICAqCiAgICogVXNlIFtlbnZpcm9ubWVudF0gdG8gc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBwcm9jZXNzLiBJZiBub3QKICAgKiBzZXQgdGhlIGVudmlyb25tZW50IG9mIHRoZSBwYXJlbnQgcHJvY2VzcyBpcyBpbmhlcml0ZWQuIEN1cnJlbnRseSwgb25seQogICAqIFVTLUFTQ0lJIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgc3VwcG9ydGVkIGFuZCBlcnJvcnMgYXJlIGxpa2VseSB0byBvY2N1cgogICAqIGlmIGFuIGVudmlyb25tZW50IHZhcmlhYmxlIHdpdGggY29kZS1wb2ludHMgb3V0c2lkZSB0aGUgVVMtQVNDSUkgcmFuZ2UgaXMKICAgKiBwYXNzZWQgaW4uCiAgICoKICAgKiBJZiBbaW5jbHVkZVBhcmVudEVudmlyb25tZW50XSBpcyBgdHJ1ZWAsIHRoZSBwcm9jZXNzJ3MgZW52aXJvbm1lbnQgd2lsbAogICAqIGluY2x1ZGUgdGhlIHBhcmVudCBwcm9jZXNzJ3MgZW52aXJvbm1lbnQsIHdpdGggW2Vudmlyb25tZW50XSB0YWtpbmcKICAgKiBwcmVjZWRlbmNlLiBEZWZhdWx0IGlzIGB0cnVlYC4KICAgKgogICAqIElmIFtydW5JblNoZWxsXSBpcyBgdHJ1ZWAsIHRoZSBwcm9jZXNzIHdpbGwgYmUgc3Bhd25lZCB0aHJvdWdoIGEgc3lzdGVtCiAgICogc2hlbGwuIE9uIExpbnV4IGFuZCBPUyBYLCBbOi9iaW4vc2g6XSBpcyB1c2VkLCB3aGlsZQogICAqIFs6JVdJTkRJUiVcc3lzdGVtMzJcY21kLmV4ZTpdIGlzIHVzZWQgb24gV2luZG93cy4KICAgKgogICAqIFVzZXJzIG11c3QgcmVhZCBhbGwgZGF0YSBjb21pbmcgb24gdGhlIFtzdGRvdXRdIGFuZCBbc3RkZXJyXQogICAqIHN0cmVhbXMgb2YgcHJvY2Vzc2VzIHN0YXJ0ZWQgd2l0aCBbOlByb2Nlc3Muc3RhcnQ6XS4gSWYgdGhlIHVzZXIKICAgKiBkb2VzIG5vdCByZWFkIGFsbCBkYXRhIG9uIHRoZSBzdHJlYW1zIHRoZSB1bmRlcmx5aW5nIHN5c3RlbQogICAqIHJlc291cmNlcyB3aWxsIG5vdCBiZSByZWxlYXNlZCBzaW5jZSB0aGVyZSBpcyBzdGlsbCBwZW5kaW5nIGRhdGEuCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIGNvZGUgdXNlcyBgUHJvY2Vzcy5zdGFydGAgdG8gZ3JlcCBmb3IgYG1haW5gIGluIHRoZQogICAqIGZpbGUgYHRlc3QuZGFydGAgb24gTGludXguCiAgICoKICAgKiAgICAgUHJvY2Vzcy5zdGFydCgnZ3JlcCcsIFsnLWknLCAnbWFpbicsICd0ZXN0LmRhcnQnXSkudGhlbigocHJvY2VzcykgewogICAqICAgICAgIHN0ZG91dC5hZGRTdHJlYW0ocHJvY2Vzcy5zdGRvdXQpOwogICAqICAgICAgIHN0ZGVyci5hZGRTdHJlYW0ocHJvY2Vzcy5zdGRlcnIpOwogICAqICAgICB9KTsKICAgKgogICAqIElmIFttb2RlXSBpcyBbUHJvY2Vzc1N0YXJ0TW9kZS5ub3JtYWxdICh0aGUgZGVmYXVsdCkgYSBjaGlsZAogICAqIHByb2Nlc3Mgd2lsbCBiZSBzdGFydGVkIHdpdGggYHN0ZGluYCwgYHN0ZG91dGAgYW5kIGBzdGRlcnJgCiAgICogY29ubmVjdGVkLgogICAqCiAgICogSWYgYG1vZGVgIGlzIFtQcm9jZXNzU3RhcnRNb2RlLmRldGFjaGVkXSBhIGRldGFjaGVkIHByb2Nlc3Mgd2lsbAogICAqIGJlIGNyZWF0ZWQuIEEgZGV0YWNoZWQgcHJvY2VzcyBoYXMgbm8gY29ubmVjdGlvbiB0byBpdHMgcGFyZW50LAogICAqIGFuZCBjYW4ga2VlcCBydW5uaW5nIG9uIGl0cyBvd24gd2hlbiB0aGUgcGFyZW50IGRpZXMuIFRoZSBvbmx5CiAgICogaW5mb3JtYXRpb24gYXZhaWxhYmxlIGZyb20gYSBkZXRhY2hlZCBwcm9jZXNzIGlzIGl0cyBgcGlkYC4gVGhlcmUKICAgKiBpcyBubyBjb25uZWN0aW9uIHRvIGl0cyBgc3RkaW5gLCBgc3Rkb3V0YCBvciBgc3RkZXJyYCwgbm9yIHdpbGwKICAgKiB0aGUgcHJvY2VzcycgZXhpdCBjb2RlIGJlY29tZSBhdmFpbGFibGUgd2hlbiBpdCB0ZXJtaW5hdGVzLgogICAqCiAgICogSWYgYG1vZGVgIGlzIFtQcm9jZXNzU3RhcnRNb2RlLmRldGFjaGVkV2l0aFN0ZGlvXSBhIGRldGFjaGVkCiAgICogcHJvY2VzcyB3aWxsIGJlIGNyZWF0ZWQgd2hlcmUgdGhlIGBzdGRpbmAsIGBzdGRvdXRgIGFuZCBgc3RkZXJyYAogICAqIGFyZSBjb25uZWN0ZWQuIFRoZSBjcmVhdG9yIGNhbiBjb21tdW5pY2F0ZSB3aXRoIHRoZSBjaGlsZCB0aHJvdWdoCiAgICogdGhlc2UuIFRoZSBkZXRhY2hlZCBwcm9jZXNzIHdpbGwga2VlcCBydW5uaW5nIGV2ZW4gaWYgdGhlc2UKICAgKiBjb21tdW5pY2F0aW9uIGNoYW5uZWxzIGFyZSBjbG9zZWQuIFRoZSBwcm9jZXNzJyBleGl0IGNvZGUgd2lsbAogICAqIG5vdCBiZWNvbWUgYXZhaWxhYmxlIHdoZW4gaXQgdGVybWluYXRlZC4KICAgKgogICAqIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBgbW9kZWAgaXMgYFByb2Nlc3NTdGFydE1vZGUubm9ybWFsYC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPFByb2Nlc3M+IHN0YXJ0KAogICAgICBTdHJpbmcgZXhlY3V0YWJsZSwgTGlzdDxTdHJpbmc+IGFyZ3VtZW50cywKICAgICAge1N0cmluZyB3b3JraW5nRGlyZWN0b3J5LAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50LAogICAgICBib29sIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudDogdHJ1ZSwKICAgICAgYm9vbCBydW5JblNoZWxsOiBmYWxzZSwKICAgICAgUHJvY2Vzc1N0YXJ0TW9kZSBtb2RlOiBQcm9jZXNzU3RhcnRNb2RlLm5vcm1hbH0pOwoKICAvKioKICAgKiBTdGFydHMgYSBwcm9jZXNzIGFuZCBydW5zIGl0IG5vbi1pbnRlcmFjdGl2ZWx5IHRvIGNvbXBsZXRpb24uIFRoZQogICAqIHByb2Nlc3MgcnVuIGlzIFtleGVjdXRhYmxlXSB3aXRoIHRoZSBzcGVjaWZpZWQgW2FyZ3VtZW50c10uCiAgICoKICAgKiBVc2UgW3dvcmtpbmdEaXJlY3RvcnldIHRvIHNldCB0aGUgd29ya2luZyBkaXJlY3RvcnkgZm9yIHRoZSBwcm9jZXNzLiBOb3RlCiAgICogdGhhdCB0aGUgY2hhbmdlIG9mIGRpcmVjdG9yeSBvY2N1cnMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgcHJvY2VzcyBvbiBzb21lCiAgICogcGxhdGZvcm1zLCB3aGljaCBtYXkgaGF2ZSBpbXBhY3Qgd2hlbiB1c2luZyByZWxhdGl2ZSBwYXRocyBmb3IgdGhlCiAgICogZXhlY3V0YWJsZSBhbmQgdGhlIGFyZ3VtZW50cy4KICAgKgogICAqIFVzZSBbZW52aXJvbm1lbnRdIHRvIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgcHJvY2Vzcy4gSWYgbm90CiAgICogc2V0IHRoZSBlbnZpcm9ubWVudCBvZiB0aGUgcGFyZW50IHByb2Nlc3MgaXMgaW5oZXJpdGVkLiBDdXJyZW50bHksIG9ubHkKICAgKiBVUy1BU0NJSSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIHN1cHBvcnRlZCBhbmQgZXJyb3JzIGFyZSBsaWtlbHkgdG8gb2NjdXIKICAgKiBpZiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aXRoIGNvZGUtcG9pbnRzIG91dHNpZGUgdGhlIFVTLUFTQ0lJIHJhbmdlIGlzCiAgICogcGFzc2VkIGluLgogICAqCiAgICogSWYgW2luY2x1ZGVQYXJlbnRFbnZpcm9ubWVudF0gaXMgYHRydWVgLCB0aGUgcHJvY2VzcydzIGVudmlyb25tZW50IHdpbGwKICAgKiBpbmNsdWRlIHRoZSBwYXJlbnQgcHJvY2VzcydzIGVudmlyb25tZW50LCB3aXRoIFtlbnZpcm9ubWVudF0gdGFraW5nCiAgICogcHJlY2VkZW5jZS4gRGVmYXVsdCBpcyBgdHJ1ZWAuCiAgICoKICAgKiBJZiBbcnVuSW5TaGVsbF0gaXMgdHJ1ZSwgdGhlIHByb2Nlc3Mgd2lsbCBiZSBzcGF3bmVkIHRocm91Z2ggYSBzeXN0ZW0KICAgKiBzaGVsbC4gT24gTGludXggYW5kIE9TIFgsIGAvYmluL3NoYCBpcyB1c2VkLCB3aGlsZQogICAqIGAlV0lORElSJVxzeXN0ZW0zMlxjbWQuZXhlYCBpcyB1c2VkIG9uIFdpbmRvd3MuCiAgICoKICAgKiBUaGUgZW5jb2RpbmcgdXNlZCBmb3IgZGVjb2RpbmcgYHN0ZG91dGAgYW5kIGBzdGRlcnJgIGludG8gdGV4dCBpcwogICAqIGNvbnRyb2xsZWQgdGhyb3VnaCBbc3Rkb3V0RW5jb2RpbmddIGFuZCBbc3RkZXJyRW5jb2RpbmddLiBUaGUKICAgKiBkZWZhdWx0IGVuY29kaW5nIGlzIFtzeXN0ZW1FbmNvZGluZ10uIElmIGBudWxsYCBpcyB1c2VkIG5vCiAgICogZGVjb2Rpbmcgd2lsbCBoYXBwZW4gYW5kIHRoZSBbUHJvY2Vzc1Jlc3VsdF0gd2lsbCBob2xkIGJpbmFyeQogICAqIGRhdGEuCiAgICoKICAgKiBSZXR1cm5zIGEgYEZ1dHVyZTxQcm9jZXNzUmVzdWx0PmAgdGhhdCBjb21wbGV0ZXMgd2l0aCB0aGUKICAgKiByZXN1bHQgb2YgcnVubmluZyB0aGUgcHJvY2VzcywgaS5lLiwgZXhpdCBjb2RlLCBzdGFuZGFyZCBvdXQgYW5kCiAgICogc3RhbmRhcmQgaW4uCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIGNvZGUgdXNlcyBgUHJvY2Vzcy5ydW5gIHRvIGdyZXAgZm9yIGBtYWluYCBpbiB0aGUKICAgKiBmaWxlIGB0ZXN0LmRhcnRgIG9uIExpbnV4LgogICAqCiAgICogICAgIFByb2Nlc3MucnVuKCdncmVwJywgWyctaScsICdtYWluJywgJ3Rlc3QuZGFydCddKS50aGVuKChyZXN1bHQpIHsKICAgKiAgICAgICBzdGRvdXQud3JpdGUocmVzdWx0LnN0ZG91dCk7CiAgICogICAgICAgc3RkZXJyLndyaXRlKHJlc3VsdC5zdGRlcnIpOwogICAqICAgICB9KTsKICAgKi8KICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPFByb2Nlc3NSZXN1bHQ+IHJ1bigKICAgICAgU3RyaW5nIGV4ZWN1dGFibGUsIExpc3Q8U3RyaW5nPiBhcmd1bWVudHMsCiAgICAgIHtTdHJpbmcgd29ya2luZ0RpcmVjdG9yeSwKICAgICAgTWFwPFN0cmluZywgU3RyaW5nPiBlbnZpcm9ubWVudCwKICAgICAgYm9vbCBpbmNsdWRlUGFyZW50RW52aXJvbm1lbnQ6IHRydWUsCiAgICAgIGJvb2wgcnVuSW5TaGVsbDogZmFsc2UsCiAgICAgIEVuY29kaW5nIHN0ZG91dEVuY29kaW5nOiBzeXN0ZW1FbmNvZGluZywKICAgICAgRW5jb2Rpbmcgc3RkZXJyRW5jb2Rpbmc6IHN5c3RlbUVuY29kaW5nfSk7CgogIC8qKgogICAqIFN0YXJ0cyBhIHByb2Nlc3MgYW5kIHJ1bnMgaXQgdG8gY29tcGxldGlvbi4gVGhpcyBpcyBhIHN5bmNocm9ub3VzCiAgICogY2FsbCBhbmQgd2lsbCBibG9jayB1bnRpbCB0aGUgY2hpbGQgcHJvY2VzcyB0ZXJtaW5hdGVzLgogICAqCiAgICogVGhlIGFyZ3VtZW50cyBhcmUgdGhlIHNhbWUgYXMgZm9yIGBQcm9jZXNzLnJ1bmAuCiAgICoKICAgKiBSZXR1cm5zIGEgYFByb2Nlc3NSZXN1bHRgIHdpdGggdGhlIHJlc3VsdCBvZiBydW5uaW5nIHRoZSBwcm9jZXNzLAogICAqIGkuZS4sIGV4aXQgY29kZSwgc3RhbmRhcmQgb3V0IGFuZCBzdGFuZGFyZCBpbi4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgUHJvY2Vzc1Jlc3VsdCBydW5TeW5jKAogICAgICBTdHJpbmcgZXhlY3V0YWJsZSwgTGlzdDxTdHJpbmc+IGFyZ3VtZW50cywKICAgICAge1N0cmluZyB3b3JraW5nRGlyZWN0b3J5LAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50LAogICAgICBib29sIGluY2x1ZGVQYXJlbnRFbnZpcm9ubWVudDogdHJ1ZSwKICAgICAgYm9vbCBydW5JblNoZWxsOiBmYWxzZSwKICAgICAgRW5jb2Rpbmcgc3Rkb3V0RW5jb2Rpbmc6IHN5c3RlbUVuY29kaW5nLAogICAgICBFbmNvZGluZyBzdGRlcnJFbmNvZGluZzogc3lzdGVtRW5jb2Rpbmd9KTsKCiAgLyoqCiAgICogS2lsbHMgdGhlIHByb2Nlc3Mgd2l0aCBpZCBbcGlkXS4KICAgKgogICAqIFdoZXJlIHBvc3NpYmxlLCBzZW5kcyB0aGUgW3NpZ25hbF0gdG8gdGhlIHByb2Nlc3Mgd2l0aCBpZAogICAqIGBwaWRgLiBUaGlzIGluY2x1ZGVzIExpbnV4IGFuZCBPUyBYLiBUaGUgZGVmYXVsdCBzaWduYWwgaXMKICAgKiBbUHJvY2Vzc1NpZ25hbC5zaWd0ZXJtXSB3aGljaCB3aWxsIG5vcm1hbGx5IHRlcm1pbmF0ZSB0aGUKICAgKiBwcm9jZXNzLgogICAqCiAgICogT24gcGxhdGZvcm1zIHdpdGhvdXQgc2lnbmFsIHN1cHBvcnQsIGluY2x1ZGluZyBXaW5kb3dzLCB0aGUgY2FsbAogICAqIGp1c3QgdGVybWluYXRlcyB0aGUgcHJvY2VzcyB3aXRoIGlkIGBwaWRgIGluIGEgcGxhdGZvcm0gc3BlY2lmaWMKICAgKiB3YXksIGFuZCB0aGUgYHNpZ25hbGAgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCiAgICoKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgc2lnbmFsIGlzIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQgdG8gdGhlCiAgICogcHJvY2Vzcy4gT3RoZXJ3aXNlIHRoZSBzaWduYWwgY291bGQgbm90IGJlIHNlbnQsIHVzdWFsbHkgbWVhbmluZwogICAqIHRoYXQgdGhlIHByb2Nlc3MgaXMgYWxyZWFkeSBkZWFkLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBib29sIGtpbGxQaWQoaW50IHBpZCwKICAgICAgW1Byb2Nlc3NTaWduYWwgc2lnbmFsID0gUHJvY2Vzc1NpZ25hbC5zaWd0ZXJtXSk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0gb2YgdGhlIHByb2Nlc3MgYXMgYSBbOlN0cmVhbTpdLgogICAqLwogIFN0cmVhbTxMaXN0PGludD4+IGdldCBzdGRvdXQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbSBvZiB0aGUgcHJvY2VzcyBhcyBhIFs6U3RyZWFtOl0uCiAgICovCiAgU3RyZWFtPExpc3Q8aW50Pj4gZ2V0IHN0ZGVycjsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc3RhbmRhcmQgaW5wdXQgc3RyZWFtIG9mIHRoZSBwcm9jZXNzIGFzIGFuIFtJT1NpbmtdLgogICAqLwogIElPU2luayBnZXQgc3RkaW47CgogIC8qKgogICAqIFJldHVybnMgdGhlIHByb2Nlc3MgaWQgb2YgdGhlIHByb2Nlc3MuCiAgICovCiAgaW50IGdldCBwaWQ7CgogIC8qKgogICAqIEtpbGxzIHRoZSBwcm9jZXNzLgogICAqCiAgICogV2hlcmUgcG9zc2libGUsIHNlbmRzIHRoZSBbc2lnbmFsXSB0byB0aGUgcHJvY2Vzcy4gVGhpcyBpbmNsdWRlcwogICAqIExpbnV4IGFuZCBPUyBYLiBUaGUgZGVmYXVsdCBzaWduYWwgaXMgW1Byb2Nlc3NTaWduYWwuc2lndGVybV0KICAgKiB3aGljaCB3aWxsIG5vcm1hbGx5IHRlcm1pbmF0ZSB0aGUgcHJvY2Vzcy4KICAgKgogICAqIE9uIHBsYXRmb3JtcyB3aXRob3V0IHNpZ25hbCBzdXBwb3J0LCBpbmNsdWRpbmcgV2luZG93cywgdGhlIGNhbGwKICAgKiBqdXN0IHRlcm1pbmF0ZXMgdGhlIHByb2Nlc3MgaW4gYSBwbGF0Zm9ybSBzcGVjaWZpYyB3YXksIGFuZCB0aGUKICAgKiBgc2lnbmFsYCBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KICAgKgogICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBzaWduYWwgaXMgc3VjY2Vzc2Z1bGx5IGRlbGl2ZXJlZCB0byB0aGUKICAgKiBwcm9jZXNzLiBPdGhlcndpc2UgdGhlIHNpZ25hbCBjb3VsZCBub3QgYmUgc2VudCwgdXN1YWxseSBtZWFuaW5nCiAgICogdGhhdCB0aGUgcHJvY2VzcyBpcyBhbHJlYWR5IGRlYWQuCiAgICovCiAgYm9vbCBraWxsKFtQcm9jZXNzU2lnbmFsIHNpZ25hbCA9IFByb2Nlc3NTaWduYWwuc2lndGVybV0pOwp9CgovKioKICogW1Byb2Nlc3NSZXN1bHRdIHJlcHJlc2VudHMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIGEgbm9uLWludGVyYWN0aXZlCiAqIHByb2Nlc3Mgc3RhcnRlZCB3aXRoIFtQcm9jZXNzLnJ1bl0gb3IgW1Byb2Nlc3MucnVuU3luY10uCiAqLwpjbGFzcyBQcm9jZXNzUmVzdWx0IHsKICAvKioKICAgKiBFeGl0IGNvZGUgZm9yIHRoZSBwcm9jZXNzLgogICAqCiAgICogU2VlIFtQcm9jZXNzLmV4aXRDb2RlXSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBpbiB0aGUgZXhpdCBjb2RlCiAgICogdmFsdWUuCiAgICovCiAgZmluYWwgaW50IGV4aXRDb2RlOwoKICAvKioKICAgKiBTdGFuZGFyZCBvdXRwdXQgZnJvbSB0aGUgcHJvY2Vzcy4gVGhlIHZhbHVlIHVzZWQgZm9yIHRoZQogICAqIGBzdGRvdXRFbmNvZGluZ2AgYXJndW1lbnQgdG8gYFByb2Nlc3MucnVuYCBkZXRlcm1pbmVzIHRoZSB0eXBlLiBJZgogICAqIGBudWxsYCB3YXMgdXNlZCB0aGlzIHZhbHVlIGlzIG9mIHR5cGUgYExpc3Q8aW50PmAgb3RoZXJ3aXNlIGl0IGlzCiAgICogb2YgdHlwZSBgU3RyaW5nYC4KICAgKi8KICBmaW5hbCBzdGRvdXQ7CgogIC8qKgogICAqIFN0YW5kYXJkIGVycm9yIGZyb20gdGhlIHByb2Nlc3MuIFRoZSB2YWx1ZSB1c2VkIGZvciB0aGUKICAgKiBgc3RkZXJyRW5jb2RpbmdgIGFyZ3VtZW50IHRvIGBQcm9jZXNzLnJ1bmAgZGV0ZXJtaW5lcyB0aGUgdHlwZS4gSWYKICAgKiBgbnVsbGAgd2FzIHVzZWQgdGhpcyB2YWx1ZSBpcyBvZiB0eXBlIGBMaXN0PGludD5gCiAgICogb3RoZXJ3aXNlIGl0IGlzIG9mIHR5cGUgYFN0cmluZ2AuCiAgICovCiAgZmluYWwgc3RkZXJyOwoKICAvKioKICAgKiBQcm9jZXNzIGlkIG9mIHRoZSBwcm9jZXNzLgogICAqLwogIGZpbmFsIGludCBwaWQ7CgogIFByb2Nlc3NSZXN1bHQodGhpcy5waWQsIHRoaXMuZXhpdENvZGUsIHRoaXMuc3Rkb3V0LCB0aGlzLnN0ZGVycik7Cn0KCi8qKgogKiBPbiBQb3NpeCBzeXN0ZW1zLCBbUHJvY2Vzc1NpZ25hbF0gaXMgdXNlZCB0byBzZW5kIGEgc3BlY2lmaWMgc2lnbmFsCiAqIHRvIGEgY2hpbGQgcHJvY2Vzcywgc2VlIFs6UHJvY2Vzcy5raWxsOl0uCiAqCiAqIFNvbWUgW1Byb2Nlc3NTaWduYWxdcyBjYW4gYWxzbyBiZSB3YXRjaGVkLCBhcyBhIHdheSB0byBpbnRlcmNlcHQgdGhlIGRlZmF1bHQKICogc2lnbmFsIGhhbmRsZXIgYW5kIGltcGxlbWVudCBhbm90aGVyLiBTZWUgW1Byb2Nlc3NTaWduYWwud2F0Y2hdIGZvciBtb3JlCiAqIGluZm9ybWF0aW9uLgogKi8KY2xhc3MgUHJvY2Vzc1NpZ25hbCB7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnaHVwID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDEsICJTSUdIVVAiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdpbnQgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMiwgIlNJR0lOVCIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3F1aXQgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMywgIlNJR1FVSVQiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdpbGwgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oNCwgIlNJR0lMTCIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3RyYXAgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oNSwgIlNJR1RSQVAiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdhYnJ0ID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDYsICJTSUdBQlJUIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnYnVzID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDcsICJTSUdCVVMiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdmcGUgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oOCwgIlNJR0ZQRSIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ2tpbGwgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oOSwgIlNJR0tJTEwiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWd1c3IxID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDEwLCAiU0lHVVNSMSIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3NlZ3YgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMTEsICJTSUdTRUdWIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lndXNyMiA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygxMiwgIlNJR1VTUjIiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdwaXBlID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDEzLCAiU0lHUElQRSIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ2Fscm0gPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMTQsICJTSUdBTFJNIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lndGVybSA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygxNSwgIlNJR1RFUk0iKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdjaGxkID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDE3LCAiU0lHQ0hMRCIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ2NvbnQgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMTgsICJTSUdDT05UIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lnc3RvcCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygxOSwgIlNJR1NUT1AiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWd0c3RwID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDIwLCAiU0lHVFNUUCIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3R0aW4gPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMjEsICJTSUdUVElOIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lndHRvdSA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygyMiwgIlNJR1RUT1UiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWd1cmcgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMjMsICJTSUdVUkciKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWd4Y3B1ID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDI0LCAiU0lHWENQVSIpOwogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIHNpZ3hmc3ogPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMjUsICJTSUdYRlNaIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lndnRhbHJtID0gY29uc3QgUHJvY2Vzc1NpZ25hbC5fKDI2LCAiU0lHVlRBTFJNIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lncHJvZiA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygyNywgIlNJR1BST0YiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWd3aW5jaCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygyOCwgIlNJR1dJTkNIIik7CiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgc2lncG9sbCA9IGNvbnN0IFByb2Nlc3NTaWduYWwuXygyOSwgIlNJR1BPTEwiKTsKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBzaWdzeXMgPSBjb25zdCBQcm9jZXNzU2lnbmFsLl8oMzEsICJTSUdTWVMiKTsKCiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdodXAgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHSFVQID0gc2lnaHVwOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lnaW50IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR0lOVCA9IHNpZ2ludDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3F1aXQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHUVVJVCA9IHNpZ3F1aXQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdpbGwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHSUxMID0gc2lnaWxsOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lndHJhcCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdUUkFQID0gc2lndHJhcDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ2FicnQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHQUJSVCA9IHNpZ2FicnQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdidXMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHQlVTID0gc2lnYnVzOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lnZnBlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR0ZQRSA9IHNpZ2ZwZTsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ2tpbGwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHS0lMTCA9IHNpZ2tpbGw7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd1c3IxIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1VTUjEgPSBzaWd1c3IxOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lnc2VndiBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdTRUdWID0gc2lnc2VndjsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3VzcjIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHVVNSMiA9IHNpZ3VzcjI7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdwaXBlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1BJUEUgPSBzaWdwaXBlOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lnYWxybSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdBTFJNID0gc2lnYWxybTsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3Rlcm0gaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHVEVSTSA9IHNpZ3Rlcm07CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdjaGxkIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR0NITEQgPSBzaWdjaGxkOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lnY29udCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdDT05UID0gc2lnY29udDsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3N0b3AgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHU1RPUCA9IHNpZ3N0b3A7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd0c3RwIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1RTVFAgPSBzaWd0c3RwOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lndHRpbiBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdUVElOID0gc2lndHRpbjsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3R0b3UgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHVFRPVSA9IHNpZ3R0b3U7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd1cmcgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHVVJHID0gc2lndXJnOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lneGNwdSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdYQ1BVID0gc2lneGNwdTsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3hmc3ogaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHWEZTWiA9IHNpZ3hmc3o7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWd2dGFscm0gaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFByb2Nlc3NTaWduYWwgU0lHVlRBTFJNID0gc2lndnRhbHJtOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lncHJvZiBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUHJvY2Vzc1NpZ25hbCBTSUdQUk9GID0gc2lncHJvZjsKICBARGVwcmVjYXRlZCgiVXNlIHNpZ3dpbmNoIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1dJTkNIID0gc2lnd2luY2g7CiAgQERlcHJlY2F0ZWQoIlVzZSBzaWdwb2xsIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1BPTEwgPSBzaWdwb2xsOwogIEBEZXByZWNhdGVkKCJVc2Ugc2lnc3lzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQcm9jZXNzU2lnbmFsIFNJR1NZUyA9IHNpZ3N5czsKCiAgZmluYWwgaW50IF9zaWduYWxOdW1iZXI7CiAgZmluYWwgU3RyaW5nIF9uYW1lOwoKICBjb25zdCBQcm9jZXNzU2lnbmFsLl8odGhpcy5fc2lnbmFsTnVtYmVyLCB0aGlzLl9uYW1lKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX25hbWU7CgogIC8qKgogICAqIFdhdGNoIGZvciBwcm9jZXNzIHNpZ25hbHMuCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIFtQcm9jZXNzU2lnbmFsXXMgY2FuIGJlIGxpc3RlbmVkIHRvOgogICAqCiAgICogICAqIFtQcm9jZXNzU2lnbmFsLnNpZ2h1cF0uCiAgICogICAqIFtQcm9jZXNzU2lnbmFsLnNpZ2ludF0uIFNpZ25hbCBzZW50IGJ5IGUuZy4gQ1RSTC1DLgogICAqICAgKiBbUHJvY2Vzc1NpZ25hbC5zaWd0ZXJtXS4gTm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgogICAqICAgKiBbUHJvY2Vzc1NpZ25hbC5zaWd1c3IxXS4gTm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgogICAqICAgKiBbUHJvY2Vzc1NpZ25hbC5zaWd1c3IyXS4gTm90IGF2YWlsYWJsZSBvbiBXaW5kb3dzLgogICAqICAgKiBbUHJvY2Vzc1NpZ25hbC5zaWd3aW5jaF0uIE5vdCBhdmFpbGFibGUgb24gV2luZG93cy4KICAgKgogICAqIE90aGVyIHNpZ25hbHMgYXJlIGRpc2FsbG93ZWQsIGFzIHRoZXkgbWF5IGJlIHVzZWQgYnkgdGhlIFZNLgogICAqCiAgICogQSBzaWduYWwgY2FuIGJlIHdhdGNoZWQgbXVsdGlwbGUgdGltZXMsIGZyb20gbXVsdGlwbGUgaXNvbGF0ZXMsIHdoZXJlIGFsbAogICAqIGNhbGxiYWNrcyBhcmUgaW52b2tlZCB3aGVuIHNpZ25hbGVkLCBpbiBubyBzcGVjaWZpYyBvcmRlci4KICAgKi8KICBTdHJlYW08UHJvY2Vzc1NpZ25hbD4gd2F0Y2goKSA9PiBfUHJvY2Vzc1V0aWxzLl93YXRjaFNpZ25hbCh0aGlzKTsKfQoKY2xhc3MgU2lnbmFsRXhjZXB0aW9uIGltcGxlbWVudHMgSU9FeGNlcHRpb24gewogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwogIGZpbmFsIG9zRXJyb3I7CgogIGNvbnN0IFNpZ25hbEV4Y2VwdGlvbih0aGlzLm1lc3NhZ2UsIFt0aGlzLm9zRXJyb3JdKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgdmFyIG1zZyA9ICIiOwogICAgaWYgKG9zRXJyb3IgIT0gbnVsbCkgewogICAgICBtc2cgPSAiLCBvc0Vycm9yOiAkb3NFcnJvciI7CiAgICB9CiAgICByZXR1cm4gIlNpZ25hbEV4Y2VwdGlvbjogJG1lc3NhZ2UkbXNnIjsKICB9Cn0KCmNsYXNzIFByb2Nlc3NFeGNlcHRpb24gaW1wbGVtZW50cyBJT0V4Y2VwdGlvbiB7CiAgLyoqCiAgICogQ29udGFpbnMgdGhlIGV4ZWN1dGFibGUgcHJvdmlkZWQgZm9yIHRoZSBwcm9jZXNzLgogICAqLwogIGZpbmFsIFN0cmluZyBleGVjdXRhYmxlOwoKICAvKioKICAgKiBDb250YWlucyB0aGUgYXJndW1lbnRzIHByb3ZpZGVkIGZvciB0aGUgcHJvY2Vzcy4KICAgKi8KICBmaW5hbCBMaXN0PFN0cmluZz4gYXJndW1lbnRzOwoKICAvKioKICAgKiBDb250YWlucyB0aGUgc3lzdGVtIG1lc3NhZ2UgZm9yIHRoZSBwcm9jZXNzIGV4Y2VwdGlvbiBpZiBhbnkuCiAgICovCiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CgogIC8qKgogICAqIENvbnRhaW5zIHRoZSBPUyBlcnJvciBjb2RlIGZvciB0aGUgcHJvY2VzcyBleGNlcHRpb24gaWYgYW55LgogICAqLwogIGZpbmFsIGludCBlcnJvckNvZGU7CgogIGNvbnN0IFByb2Nlc3NFeGNlcHRpb24odGhpcy5leGVjdXRhYmxlLCB0aGlzLmFyZ3VtZW50cywKICAgICAgW3RoaXMubWVzc2FnZSA9ICIiLCB0aGlzLmVycm9yQ29kZSA9IDBdKTsKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICB2YXIgbXNnID0gKG1lc3NhZ2UgPT0gbnVsbCkgPyAnT1MgZXJyb3IgY29kZTogJGVycm9yQ29kZScgOiBtZXNzYWdlOwogICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMuam9pbignICcpOwogICAgcmV0dXJuICJQcm9jZXNzRXhjZXB0aW9uOiAkbXNnXG4gIENvbW1hbmQ6ICRleGVjdXRhYmxlICRhcmdzIjsKICB9Cn0Kgr4ATk48AREBOSsWKjEmKy1MAgEEQgNKMQNLR0hEQxQDNANFQ0REOANERgwDRkMyA0ZBPxoEFiwjID0EHQIBBC0DRkUaAxkDQw4EHiwkAgEELQNGRRoDQw4EMgEEMwNGNwQgLhpDBCQgPgQmAgEEKwQpAQRHFAQUBj4FTU5PDAYmAQZNDgVNTk8MBiICAQQkBBkcPSQgAThDKi0BQT8mJAFGKEgvOAFIEBYSGgkXUAETMAIBBCMDREhHFAMqA0VNS0lQMwMZAxBKQiINCQMsAzs9OCM+A0ssPTQDGR4DEDsaKDEzNDYNCQMbA0w3SRdLGgM/HAMRA0NHQANLOjgzAxkDEDY2LiwPDQkDFgNeRysEGQZMIQU2BUZHRT1FSBAFQUY8RUZFQxIFTkwtLQYcAQZCRj1FRSIFT05IIwVQTVFPEAVNSSQFTTo3BUJGQUcFRyAFTS0tDQVCQRAFRkVER0VBBUJGR0FELgVABikxICcrHjgBBkdBBU9OSCMFUE1RTxAFTUkkBUs4NQVHQ0BDCwU/RhIFRSAFSigoDQYtMSAnKx4vMQEGRz0FNgVHNAYpMSAnKx4vMQEGJgU/QD8OBUZGMQVDRicGKDcBBkgGIAEGRwYgAQZGBhQBBiwGDwEGGAVGQzAFRkUkBUNGJwY9AgEERjwEFgYgBUIMBhYBBj5IRxcGEAEGPUg3JwYQAQYgBhEBRAIBBEctA1BMEAQWSkpMSkxMSkpMTU1NTU1NTU1NTU1NS01NUU1PTUsBJC4kLiUwJC4lMCUwJC4kLiUwJTAlMCUwJTAlMCUwJTAlMCUwJTAlMCUwJC4lMCUwJzQlMCYyJTAkLgEbFgE5AR4BBiAFOAUhPTw8PD0FQgVPQAZFAgEvGBEBNwEWEhsjBiwEAgEwBjcGGwEGNgYgAQZDBhgBBkIGFwE6MBZJJEMEAgEUZGFydDppby9wcm9jZXNzLmRhcnQ4b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL3NlY3VyZV9zZXJ2ZXJfc29ja2V0LmRhcnSqiS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87CgovKioKICogVGhlIFtTZWN1cmVTZXJ2ZXJTb2NrZXRdIGlzIGEgc2VydmVyIHNvY2tldCwgcHJvdmlkaW5nIGEgc3RyZWFtIG9mIGhpZ2gtbGV2ZWwKICogW1NvY2tldF1zLgogKgogKiBTZWUgW1NlY3VyZVNvY2tldF0gZm9yIG1vcmUgaW5mby4KICovCmNsYXNzIFNlY3VyZVNlcnZlclNvY2tldCBleHRlbmRzIFN0cmVhbTxTZWN1cmVTb2NrZXQ+IHsKICBmaW5hbCBSYXdTZWN1cmVTZXJ2ZXJTb2NrZXQgX3NvY2tldDsKCiAgU2VjdXJlU2VydmVyU29ja2V0Ll8odGhpcy5fc29ja2V0KTsKCiAgLyoqCiAgICogUmV0dXJucyBhIGZ1dHVyZSBmb3IgYSBbU2VjdXJlU2VydmVyU29ja2V0XS4gV2hlbiB0aGUgZnV0dXJlCiAgICogY29tcGxldGVzIHRoZSBzZXJ2ZXIgc29ja2V0IGlzIGJvdW5kIHRvIHRoZSBnaXZlbiBbYWRkcmVzc10gYW5kCiAgICogW3BvcnRdIGFuZCBoYXMgc3RhcnRlZCBsaXN0ZW5pbmcgb24gaXQuCiAgICoKICAgKiBUaGUgW2FkZHJlc3NdIGNhbiBlaXRoZXIgYmUgYSBbU3RyaW5nXSBvciBhbgogICAqIFtJbnRlcm5ldEFkZHJlc3NdLiBJZiBbYWRkcmVzc10gaXMgYSBbU3RyaW5nXSwgW2JpbmRdIHdpbGwKICAgKiBwZXJmb3JtIGEgW0ludGVybmV0QWRkcmVzcy5sb29rdXBdIGFuZCB1c2UgdGhlIGZpcnN0IHZhbHVlIGluIHRoZQogICAqIGxpc3QuIFRvIGxpc3RlbiBvbiB0aGUgbG9vcGJhY2sgYWRhcHRlciwgd2hpY2ggd2lsbCBhbGxvdyBvbmx5CiAgICogaW5jb21pbmcgY29ubmVjdGlvbnMgZnJvbSB0aGUgbG9jYWwgaG9zdCwgdXNlIHRoZSB2YWx1ZQogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY0XSBvcgogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY2XS4gVG8gYWxsb3cgZm9yIGluY29taW5nCiAgICogY29ubmVjdGlvbiBmcm9tIHRoZSBuZXR3b3JrIHVzZSBlaXRoZXIgb25lIG9mIHRoZSB2YWx1ZXMKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmFueUlQdjRdIG9yIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2Nl0gdG8KICAgKiBiaW5kIHRvIGFsbCBpbnRlcmZhY2VzIG9yIHRoZSBJUCBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgaW50ZXJmYWNlLgogICAqCiAgICogSWYgW3BvcnRdIGhhcyB0aGUgdmFsdWUgWzowOl0gYW4gZXBoZW1lcmFsIHBvcnQgd2lsbCBiZSBjaG9zZW4gYnkKICAgKiB0aGUgc3lzdGVtLiBUaGUgYWN0dWFsIHBvcnQgdXNlZCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZQogICAqIFtwb3J0XSBnZXR0ZXIuCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW2JhY2tsb2ddIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxpc3RlbgogICAqIGJhY2tsb2cgZm9yIHRoZSB1bmRlcmx5aW5nIE9TIGxpc3RlbiBzZXR1cC4gSWYgW2JhY2tsb2ddIGhhcyB0aGUKICAgKiB2YWx1ZSBvZiBbOjA6XSAodGhlIGRlZmF1bHQpIGEgcmVhc29uYWJsZSB2YWx1ZSB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uCiAgICoKICAgKiBJbmNvbWluZyBjbGllbnQgY29ubmVjdGlvbnMgYXJlIHByb21vdGVkIHRvIHNlY3VyZSBjb25uZWN0aW9ucywgdXNpbmcKICAgKiB0aGUgc2VydmVyIGNlcnRpZmljYXRlIGFuZCBrZXkgc2V0IGluIFtjb250ZXh0XS4KICAgKgogICAqIFthZGRyZXNzXSBtdXN0IGJlIGdpdmVuIGFzIGEgbnVtZXJpYyBhZGRyZXNzLCBub3QgYSBob3N0IG5hbWUuCiAgICoKICAgKiBUbyByZXF1ZXN0IG9yIHJlcXVpcmUgdGhhdCBjbGllbnRzIGF1dGhlbnRpY2F0ZSBieSBwcm92aWRpbmcgYW4gU1NMIChUTFMpCiAgICogY2xpZW50IGNlcnRpZmljYXRlLCBzZXQgdGhlIG9wdGlvbmFsIHBhcmFtZXRlciBbcmVxdWVzdENsaWVudENlcnRpZmljYXRlXQogICAqIG9yIFtyZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGVdIHRvIHRydWUuICBSZXF1aXJpbmcgYSBjZXJ0aWZpY2F0ZSBpbXBsaWVzCiAgICogcmVxdWVzdGluZyBhIGNlcnRpZmljYXRlLCBzbyBzZXR0aW5nIGJvdGggaXMgcmVkdW5kYW50LgogICAqIFRvIGNoZWNrIHdoZXRoZXIgYSBjbGllbnQgY2VydGlmaWNhdGUgd2FzIHJlY2VpdmVkLCBjaGVjawogICAqIFNlY3VyZVNvY2tldC5wZWVyQ2VydGlmaWNhdGUgYWZ0ZXIgY29ubmVjdGluZy4gIElmIG5vIGNlcnRpZmljYXRlCiAgICogd2FzIHJlY2VpdmVkLCB0aGUgcmVzdWx0IHdpbGwgYmUgbnVsbC4KICAgKgogICAqIFtzdXBwb3J0ZWRQcm90b2NvbHNdIGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgcHJvdG9jb2xzIChpbiBkZWNyZWFzaW5nCiAgICogb3JkZXIgb2YgcHJlZmVyZW5jZSkgdG8gdXNlIGR1cmluZyB0aGUgQUxQTiBwcm90b2NvbCBuZWdvZ2lhdGlvbiB3aXRoCiAgICogY2xpZW50cy4gIEV4YW1wbGUgdmFsdWVzIGFyZSAiaHR0cC8xLjEiIG9yICJoMiIuICBUaGUgc2VsZWN0ZWQgcHJvdG9jb2wKICAgKiBjYW4gYmUgb2J0YWluZWQgdmlhIFtTZWN1cmVTb2NrZXQuc2VsZWN0ZWRQcm90b2NvbF0uCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW3NoYXJlZF0gc3BlY2lmaWVzIHdoZXRoZXIgYWRkaXRpb25hbAogICAqIFNlY3VyZVNlcnZlclNvY2tldCBvYmplY3RzIGNhbiBiaW5kIHRvIHRoZSBzYW1lIGNvbWJpbmF0aW9uIG9mIGBhZGRyZXNzYCwKICAgKiBgcG9ydGAgYW5kIGB2Nk9ubHlgLiAgSWYgYHNoYXJlZGAgaXMgYHRydWVgIGFuZCBtb3JlIGBTZWN1cmVTZXJ2ZXJTb2NrZXRgcwogICAqIGZyb20gdGhpcyBpc29sYXRlIG9yIG90aGVyIGlzb2xhdGVzIGFyZSBib3VuZCB0byB0aGUgcG9ydCwgdGhlbiB0aGUKICAgKiBpbmNvbWluZyBjb25uZWN0aW9ucyB3aWxsIGJlIGRpc3RyaWJ1dGVkIGFtb25nIGFsbCB0aGUgYm91bmQKICAgKiBgU2VjdXJlU2VydmVyU29ja2V0YHMuIENvbm5lY3Rpb25zIGNhbiBiZSBkaXN0cmlidXRlZCBvdmVyIG11bHRpcGxlCiAgICogaXNvbGF0ZXMgdGhpcyB3YXkuCiAgICovCiAgc3RhdGljIEZ1dHVyZTxTZWN1cmVTZXJ2ZXJTb2NrZXQ+IGJpbmQoCiAgICAgIGFkZHJlc3MsIGludCBwb3J0LCBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAge2ludCBiYWNrbG9nOiAwLAogICAgICBib29sIHY2T25seTogZmFsc2UsCiAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzLAogICAgICBib29sIHNoYXJlZDogZmFsc2V9KSB7CiAgICByZXR1cm4gUmF3U2VjdXJlU2VydmVyU29ja2V0CiAgICAgICAgLmJpbmQoYWRkcmVzcywgcG9ydCwgY29udGV4dCwKICAgICAgICAgICAgYmFja2xvZzogYmFja2xvZywKICAgICAgICAgICAgdjZPbmx5OiB2Nk9ubHksCiAgICAgICAgICAgIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgICByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzOiBzdXBwb3J0ZWRQcm90b2NvbHMsCiAgICAgICAgICAgIHNoYXJlZDogc2hhcmVkKQogICAgICAgIC50aGVuKChzZXJ2ZXJTb2NrZXQpID0+IG5ldyBTZWN1cmVTZXJ2ZXJTb2NrZXQuXyhzZXJ2ZXJTb2NrZXQpKTsKICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxTZWN1cmVTb2NrZXQ+IGxpc3Rlbih2b2lkIG9uRGF0YShTZWN1cmVTb2NrZXQgc29ja2V0KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfc29ja2V0Lm1hcCgocmF3U29ja2V0KSA9PiBuZXcgU2VjdXJlU29ja2V0Ll8ocmF3U29ja2V0KSkubGlzdGVuKAogICAgICAgIG9uRGF0YSwKICAgICAgICBvbkVycm9yOiBvbkVycm9yLAogICAgICAgIG9uRG9uZTogb25Eb25lLAogICAgICAgIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcG9ydCB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIGludCBnZXQgcG9ydCA9PiBfc29ja2V0LnBvcnQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGFkZHJlc3MgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3MgPT4gX3NvY2tldC5hZGRyZXNzOwoKICAvKioKICAgKiBDbG9zZXMgdGhlIHNvY2tldC4gVGhlIHJldHVybmVkIGZ1dHVyZSBjb21wbGV0ZXMgd2hlbiB0aGUgc29ja2V0CiAgICogaXMgZnVsbHkgY2xvc2VkIGFuZCBpcyBubyBsb25nZXIgYm91bmQuCiAgICovCiAgRnV0dXJlPFNlY3VyZVNlcnZlclNvY2tldD4gY2xvc2UoKSA9PiBfc29ja2V0LmNsb3NlKCkudGhlbigoXykgPT4gdGhpcyk7CgogIHZvaWQgc2V0IF9vd25lcihvd25lcikgewogICAgX3NvY2tldC5fb3duZXIgPSBvd25lcjsKICB9Cn0KCi8qKgogKiBUaGUgUmF3U2VjdXJlU2VydmVyU29ja2V0IGlzIGEgc2VydmVyIHNvY2tldCwgcHJvdmlkaW5nIGEgc3RyZWFtIG9mIGxvdy1sZXZlbAogKiBbUmF3U2VjdXJlU29ja2V0XXMuCiAqCiAqIFNlZSBbUmF3U2VjdXJlU29ja2V0XSBmb3IgbW9yZSBpbmZvLgogKi8KY2xhc3MgUmF3U2VjdXJlU2VydmVyU29ja2V0IGV4dGVuZHMgU3RyZWFtPFJhd1NlY3VyZVNvY2tldD4gewogIGZpbmFsIFJhd1NlcnZlclNvY2tldCBfc29ja2V0OwogIFN0cmVhbUNvbnRyb2xsZXI8UmF3U2VjdXJlU29ja2V0PiBfY29udHJvbGxlcjsKICBTdHJlYW1TdWJzY3JpcHRpb248UmF3U29ja2V0PiBfc3Vic2NyaXB0aW9uOwogIGZpbmFsIFNlY3VyaXR5Q29udGV4dCBfY29udGV4dDsKICBmaW5hbCBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTsKICBmaW5hbCBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTsKICBmaW5hbCBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzOwogIGJvb2wgX2Nsb3NlZCA9IGZhbHNlOwoKICBSYXdTZWN1cmVTZXJ2ZXJTb2NrZXQuXygKICAgICAgdGhpcy5fc29ja2V0LAogICAgICB0aGlzLl9jb250ZXh0LAogICAgICB0aGlzLnJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgdGhpcy5yZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIHRoaXMuc3VwcG9ydGVkUHJvdG9jb2xzKSB7CiAgICBfY29udHJvbGxlciA9IG5ldyBTdHJlYW1Db250cm9sbGVyPFJhd1NlY3VyZVNvY2tldD4oCiAgICAgICAgc3luYzogdHJ1ZSwKICAgICAgICBvbkxpc3RlbjogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UsCiAgICAgICAgb25QYXVzZTogX29uUGF1c2VTdGF0ZUNoYW5nZSwKICAgICAgICBvblJlc3VtZTogX29uUGF1c2VTdGF0ZUNoYW5nZSwKICAgICAgICBvbkNhbmNlbDogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIGZ1dHVyZSBmb3IgYSBbUmF3U2VjdXJlU2VydmVyU29ja2V0XS4gV2hlbiB0aGUgZnV0dXJlCiAgICogY29tcGxldGVzIHRoZSBzZXJ2ZXIgc29ja2V0IGlzIGJvdW5kIHRvIHRoZSBnaXZlbiBbYWRkcmVzc10gYW5kCiAgICogW3BvcnRdIGFuZCBoYXMgc3RhcnRlZCBsaXN0ZW5pbmcgb24gaXQuCiAgICoKICAgKiBUaGUgW2FkZHJlc3NdIGNhbiBlaXRoZXIgYmUgYSBbU3RyaW5nXSBvciBhbgogICAqIFtJbnRlcm5ldEFkZHJlc3NdLiBJZiBbYWRkcmVzc10gaXMgYSBbU3RyaW5nXSwgW2JpbmRdIHdpbGwKICAgKiBwZXJmb3JtIGEgW0ludGVybmV0QWRkcmVzcy5sb29rdXBdIGFuZCB1c2UgdGhlIGZpcnN0IHZhbHVlIGluIHRoZQogICAqIGxpc3QuIFRvIGxpc3RlbiBvbiB0aGUgbG9vcGJhY2sgYWRhcHRlciwgd2hpY2ggd2lsbCBhbGxvdyBvbmx5CiAgICogaW5jb21pbmcgY29ubmVjdGlvbnMgZnJvbSB0aGUgbG9jYWwgaG9zdCwgdXNlIHRoZSB2YWx1ZQogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY0XSBvcgogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY2XS4gVG8gYWxsb3cgZm9yIGluY29taW5nCiAgICogY29ubmVjdGlvbiBmcm9tIHRoZSBuZXR3b3JrIHVzZSBlaXRoZXIgb25lIG9mIHRoZSB2YWx1ZXMKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmFueUlQdjRdIG9yIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2Nl0gdG8KICAgKiBiaW5kIHRvIGFsbCBpbnRlcmZhY2VzIG9yIHRoZSBJUCBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgaW50ZXJmYWNlLgogICAqCiAgICogSWYgW3BvcnRdIGhhcyB0aGUgdmFsdWUgWzowOl0gYW4gZXBoZW1lcmFsIHBvcnQgd2lsbCBiZSBjaG9zZW4gYnkKICAgKiB0aGUgc3lzdGVtLiBUaGUgYWN0dWFsIHBvcnQgdXNlZCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZQogICAqIFtwb3J0XSBnZXR0ZXIuCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW2JhY2tsb2ddIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxpc3RlbgogICAqIGJhY2tsb2cgZm9yIHRoZSB1bmRlcmx5aW5nIE9TIGxpc3RlbiBzZXR1cC4gSWYgW2JhY2tsb2ddIGhhcyB0aGUKICAgKiB2YWx1ZSBvZiBbOjA6XSAodGhlIGRlZmF1bHQpIGEgcmVhc29uYWJsZSB2YWx1ZSB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uCiAgICoKICAgKiBJbmNvbWluZyBjbGllbnQgY29ubmVjdGlvbnMgYXJlIHByb21vdGVkIHRvIHNlY3VyZSBjb25uZWN0aW9ucywKICAgKiB1c2luZyB0aGUgc2VydmVyIGNlcnRpZmljYXRlIGFuZCBrZXkgc2V0IGluIFtjb250ZXh0XS4KICAgKgogICAqIFthZGRyZXNzXSBtdXN0IGJlIGdpdmVuIGFzIGEgbnVtZXJpYyBhZGRyZXNzLCBub3QgYSBob3N0IG5hbWUuCiAgICoKICAgKiBUbyByZXF1ZXN0IG9yIHJlcXVpcmUgdGhhdCBjbGllbnRzIGF1dGhlbnRpY2F0ZSBieSBwcm92aWRpbmcgYW4gU1NMIChUTFMpCiAgICogY2xpZW50IGNlcnRpZmljYXRlLCBzZXQgdGhlIG9wdGlvbmFsIHBhcmFtZXRlcnMgcmVxdWVzdENsaWVudENlcnRpZmljYXRlIG9yCiAgICogcmVxdWlyZUNsaWVudENlcnRpZmljYXRlIHRvIHRydWUuICBSZXF1aXJlIGltcGxpZXMgcmVxdWVzdCwgc28gb25lIGRvZXNuJ3QKICAgKiBuZWVkIHRvIHNwZWNpZnkgYm90aC4gIFRvIGNoZWNrIHdoZXRoZXIgYSBjbGllbnQgY2VydGlmaWNhdGUgd2FzIHJlY2VpdmVkLAogICAqIGNoZWNrIFNlY3VyZVNvY2tldC5wZWVyQ2VydGlmaWNhdGUgYWZ0ZXIgY29ubmVjdGluZy4gIElmIG5vIGNlcnRpZmljYXRlCiAgICogd2FzIHJlY2VpdmVkLCB0aGUgcmVzdWx0IHdpbGwgYmUgbnVsbC4KICAgKgogICAqIFtzdXBwb3J0ZWRQcm90b2NvbHNdIGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgcHJvdG9jb2xzIChpbiBkZWNyZWFzaW5nCiAgICogb3JkZXIgb2YgcHJlZmVyZW5jZSkgdG8gdXNlIGR1cmluZyB0aGUgQUxQTiBwcm90b2NvbCBuZWdvdGlhdGlvbiB3aXRoCiAgICogY2xpZW50cy4gIEV4YW1wbGUgdmFsdWVzIGFyZSAiaHR0cC8xLjEiIG9yICJoMiIuICBUaGUgc2VsZWN0ZWQgcHJvdG9jb2wKICAgKiBjYW4gYmUgb2J0YWluZWQgdmlhIFtSYXdTZWN1cmVTb2NrZXQuc2VsZWN0ZWRQcm90b2NvbF0uCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW3NoYXJlZF0gc3BlY2lmaWVzIHdoZXRoZXIgYWRkaXRpb25hbAogICAqIFJhd1NlY3VyZVNlcnZlclNvY2tldCBvYmplY3RzIGNhbiBiaW5kIHRvIHRoZSBzYW1lIGNvbWJpbmF0aW9uIG9mCiAgICogYGFkZHJlc3NgLCBgcG9ydGAgYW5kIGB2Nk9ubHlgLiAgSWYgYHNoYXJlZGAgaXMgYHRydWVgIGFuZCBtb3JlCiAgICogYFJhd1NlY3VyZVNlcnZlclNvY2tldGBzIGZyb20gdGhpcyBpc29sYXRlIG9yIG90aGVyIGlzb2xhdGVzIGFyZSBib3VuZCB0bwogICAqIHRoZSBwb3J0LCB0aGVuIHRoZSBpbmNvbWluZyBjb25uZWN0aW9ucyB3aWxsIGJlIGRpc3RyaWJ1dGVkIGFtb25nIGFsbCB0aGUKICAgKiBib3VuZCBgUmF3U2VjdXJlU2VydmVyU29ja2V0YHMuIENvbm5lY3Rpb25zIGNhbiBiZSBkaXN0cmlidXRlZCBvdmVyCiAgICogbXVsdGlwbGUgaXNvbGF0ZXMgdGhpcyB3YXkuCiAgICovCiAgc3RhdGljIEZ1dHVyZTxSYXdTZWN1cmVTZXJ2ZXJTb2NrZXQ+IGJpbmQoCiAgICAgIGFkZHJlc3MsIGludCBwb3J0LCBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAge2ludCBiYWNrbG9nOiAwLAogICAgICBib29sIHY2T25seTogZmFsc2UsCiAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBMaXN0PFN0cmluZz4gc3VwcG9ydGVkUHJvdG9jb2xzLAogICAgICBib29sIHNoYXJlZDogZmFsc2V9KSB7CiAgICByZXR1cm4gUmF3U2VydmVyU29ja2V0CiAgICAgICAgLmJpbmQoYWRkcmVzcywgcG9ydCwgYmFja2xvZzogYmFja2xvZywgdjZPbmx5OiB2Nk9ubHksIHNoYXJlZDogc2hhcmVkKQogICAgICAgIC50aGVuKChzZXJ2ZXJTb2NrZXQpID0+IG5ldyBSYXdTZWN1cmVTZXJ2ZXJTb2NrZXQuXygKICAgICAgICAgICAgc2VydmVyU29ja2V0LAogICAgICAgICAgICBjb250ZXh0LAogICAgICAgICAgICByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICAgIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzKSk7CiAgfQoKICBTdHJlYW1TdWJzY3JpcHRpb248UmF3U2VjdXJlU29ja2V0PiBsaXN0ZW4odm9pZCBvbkRhdGEoUmF3U2VjdXJlU29ja2V0IHMpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgcmV0dXJuIF9jb250cm9sbGVyLnN0cmVhbS5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvcnQgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBpbnQgZ2V0IHBvcnQgPT4gX3NvY2tldC5wb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBhZGRyZXNzIHVzZWQgYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzID0+IF9zb2NrZXQuYWRkcmVzczsKCiAgLyoqCiAgICogQ2xvc2VzIHRoZSBzb2NrZXQuIFRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdoZW4gdGhlIHNvY2tldAogICAqIGlzIGZ1bGx5IGNsb3NlZCBhbmQgaXMgbm8gbG9uZ2VyIGJvdW5kLgogICAqLwogIEZ1dHVyZTxSYXdTZWN1cmVTZXJ2ZXJTb2NrZXQ+IGNsb3NlKCkgewogICAgX2Nsb3NlZCA9IHRydWU7CiAgICByZXR1cm4gX3NvY2tldC5jbG9zZSgpLnRoZW4oKF8pID0+IHRoaXMpOwogIH0KCiAgdm9pZCBfb25EYXRhKFJhd1NvY2tldCBjb25uZWN0aW9uKSB7CiAgICB2YXIgcmVtb3RlUG9ydDsKICAgIHRyeSB7CiAgICAgIHJlbW90ZVBvcnQgPSBjb25uZWN0aW9uLnJlbW90ZVBvcnQ7CiAgICB9IGNhdGNoIChlKSB7CiAgICAgIC8vIElmIGNvbm5lY3Rpb24gaXMgYWxyZWFkeSBjbG9zZWQsIHJlbW90ZVBvcnQgdGhyb3dzIGFuIGV4Y2VwdGlvbi4KICAgICAgLy8gRG8gbm90aGluZyAtIGNvbm5lY3Rpb24gaXMgY2xvc2VkLgogICAgICByZXR1cm47CiAgICB9CiAgICBfUmF3U2VjdXJlU29ja2V0CiAgICAgICAgLmNvbm5lY3QoY29ubmVjdGlvbi5hZGRyZXNzLCByZW1vdGVQb3J0LAogICAgICAgICAgICBjb250ZXh0OiBfY29udGV4dCwKICAgICAgICAgICAgaXNfc2VydmVyOiB0cnVlLAogICAgICAgICAgICBzb2NrZXQ6IGNvbm5lY3Rpb24sCiAgICAgICAgICAgIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgICByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzOiBzdXBwb3J0ZWRQcm90b2NvbHMpCiAgICAgICAgLnRoZW4oKFJhd1NlY3VyZVNvY2tldCBzZWN1cmVDb25uZWN0aW9uKSB7CiAgICAgIGlmIChfY2xvc2VkKSB7CiAgICAgICAgc2VjdXJlQ29ubmVjdGlvbi5jbG9zZSgpOwogICAgICB9IGVsc2UgewogICAgICAgIF9jb250cm9sbGVyLmFkZChzZWN1cmVDb25uZWN0aW9uKTsKICAgICAgfQogICAgfSkuY2F0Y2hFcnJvcigoZSwgcykgewogICAgICBpZiAoIV9jbG9zZWQpIHsKICAgICAgICBfY29udHJvbGxlci5hZGRFcnJvcihlLCBzKTsKICAgICAgfQogICAgfSk7CiAgfQoKICB2b2lkIF9vblBhdXNlU3RhdGVDaGFuZ2UoKSB7CiAgICBpZiAoX2NvbnRyb2xsZXIuaXNQYXVzZWQpIHsKICAgICAgX3N1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAgfSBlbHNlIHsKICAgICAgX3N1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgIH0KICB9CgogIHZvaWQgX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UoKSB7CiAgICBpZiAoX2NvbnRyb2xsZXIuaGFzTGlzdGVuZXIpIHsKICAgICAgX3N1YnNjcmlwdGlvbiA9IF9zb2NrZXQubGlzdGVuKF9vbkRhdGEsCiAgICAgICAgICBvbkVycm9yOiBfY29udHJvbGxlci5hZGRFcnJvciwgb25Eb25lOiBfY29udHJvbGxlci5jbG9zZSk7CiAgICB9IGVsc2UgewogICAgICBjbG9zZSgpOwogICAgfQogIH0KCiAgdm9pZCBzZXQgX293bmVyKG93bmVyKSB7CiAgICAoX3NvY2tldCBhcyBkeW5hbWljKS5fb3duZXIgPSBvd25lcjsKICB9Cn0KgSUATk48AREBBFEOAyUEOCcBJgEGQkUtBTJAR0Q9Jzs+P0cFR0EUBUdGRxEFSzYFRAVPT009P0csBUpLTToFQU9QSUJJGAYqMhcaLCwnHSEmHhxAQDQcSQQBTD9NEBoYJwQBBisGIAEGLgYyAQZGLQZLARscBAIBBFEXAygEPiExLyInJykYARsUFSUlITkULiYnLwQBBkVFLQUyQEdEPSc7Pj9HBUdBFAVHRkcRBUU8BUQFT1FQUE0sBUpLTT0FQUdFT09JIQYtMhcaLCwnHRtPPRoVJiYiBAFNPy1JBAEGKwYgAQYuBjIBBkYtBioULgQBJxQKKhJKLA4GFTEfHSBAQDQzFSIPKwgbFiQICAQBHyAdDR4GBAEmIy5FDQ8GBAEbKQQCASFkYXJ0OmlvL3NlY3VyZV9zZXJ2ZXJfc29ja2V0LmRhcnQxb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL3NlY3VyZV9zb2NrZXQuZGFydMAArDsvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLyoqCiAqIEEgaGlnaC1sZXZlbCBjbGFzcyBmb3IgY29tbXVuaWNhdGluZyBzZWN1cmVseSBvdmVyIGEgVENQIHNvY2tldCwgdXNpbmcKICogVExTIGFuZCBTU0wuIFRoZSBbU2VjdXJlU29ja2V0XSBleHBvc2VzIGJvdGggYSBbU3RyZWFtXSBhbmQgYW4KICogW0lPU2lua10gaW50ZXJmYWNlLCBtYWtpbmcgaXQgaWRlYWwgZm9yIHVzaW5nIHRvZ2V0aGVyIHdpdGgKICogb3RoZXIgW1N0cmVhbV1zLgogKi8KYWJzdHJhY3QgY2xhc3MgU2VjdXJlU29ja2V0IGltcGxlbWVudHMgU29ja2V0IHsKICBleHRlcm5hbCBmYWN0b3J5IFNlY3VyZVNvY2tldC5fKFJhd1NlY3VyZVNvY2tldCByYXdTb2NrZXQpOwoKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgbmV3IHNlY3VyZSBjbGllbnQgc29ja2V0IGFuZCBjb25uZWN0cyBpdCB0byB0aGUgZ2l2ZW4KICAgKiBbaG9zdF0gb24gcG9ydCBbcG9ydF0uIFRoZSByZXR1cm5lZCBGdXR1cmUgd2lsbCBjb21wbGV0ZSB3aXRoIGEKICAgKiBbU2VjdXJlU29ja2V0XSB0aGF0IGlzIGNvbm5lY3RlZCBhbmQgcmVhZHkgZm9yIHN1YnNjcmlwdGlvbi4KICAgKgogICAqIFRoZSBjZXJ0aWZpY2F0ZSBwcm92aWRlZCBieSB0aGUgc2VydmVyIGlzIGNoZWNrZWQKICAgKiB1c2luZyB0aGUgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgc2V0IGluIHRoZSBTZWN1cml0eUNvbnRleHQgb2JqZWN0LgogICAqIFRoZSBkZWZhdWx0IFNlY3VyaXR5Q29udGV4dCBvYmplY3QgY29udGFpbnMgYSBidWlsdC1pbiBzZXQgb2YgdHJ1c3RlZAogICAqIHJvb3QgY2VydGlmaWNhdGVzIGZvciB3ZWxsLWtub3duIGNlcnRpZmljYXRlIGF1dGhvcml0aWVzLgogICAqCiAgICogW29uQmFkQ2VydGlmaWNhdGVdIGlzIGFuIG9wdGlvbmFsIGhhbmRsZXIgZm9yIHVudmVyaWZpYWJsZSBjZXJ0aWZpY2F0ZXMuCiAgICogVGhlIGhhbmRsZXIgcmVjZWl2ZXMgdGhlIFtYNTA5Q2VydGlmaWNhdGVdLCBhbmQgY2FuIGluc3BlY3QgaXQgYW5kCiAgICogZGVjaWRlIChvciBsZXQgdGhlIHVzZXIgZGVjaWRlKSB3aGV0aGVyIHRvIGFjY2VwdAogICAqIHRoZSBjb25uZWN0aW9uIG9yIG5vdC4gIFRoZSBoYW5kbGVyIHNob3VsZCByZXR1cm4gdHJ1ZQogICAqIHRvIGNvbnRpbnVlIHRoZSBbU2VjdXJlU29ja2V0XSBjb25uZWN0aW9uLgogICAqCiAgICogW3N1cHBvcnRlZFByb3RvY29sc10gaXMgYW4gb3B0aW9uYWwgbGlzdCBvZiBwcm90b2NvbHMgKGluIGRlY3JlYXNpbmcKICAgKiBvcmRlciBvZiBwcmVmZXJlbmNlKSB0byB1c2UgZHVyaW5nIHRoZSBBTFBOIHByb3RvY29sIG5lZ290aWF0aW9uIHdpdGggdGhlCiAgICogc2VydmVyLiAgRXhhbXBsZSB2YWx1ZXMgYXJlICJodHRwLzEuMSIgb3IgImgyIi4gIFRoZSBzZWxlY3RlZCBwcm90b2NvbAogICAqIGNhbiBiZSBvYnRhaW5lZCB2aWEgW1NlY3VyZVNvY2tldC5zZWxlY3RlZFByb3RvY29sXS4KICAgKgogICAqIFRoZSBhcmd1bWVudCBbdGltZW91dF0gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBtYXhpbXVtIGFsbG93ZWQgdGltZSB0byB3YWl0CiAgICogZm9yIGEgY29ubmVjdGlvbiB0byBiZSBlc3RhYmxpc2hlZC4gSWYgW3RpbWVvdXRdIGlzIGxvbmdlciB0aGFuIHRoZSBzeXN0ZW0KICAgKiBsZXZlbCB0aW1lb3V0IGR1cmF0aW9uLCBhIHRpbWVvdXQgbWF5IG9jY3VyIHNvb25lciB0aGFuIHNwZWNpZmllZCBpbgogICAqIFt0aW1lb3V0XS4gT24gdGltZW91dCwgYSBbU29ja2V0RXhjZXB0aW9uXSBpcyB0aHJvd24gYW5kIGFsbCBvbmdvaW5nCiAgICogY29ubmVjdGlvbiBhdHRlbXB0cyB0byBbaG9zdF0gYXJlIGNhbmNlbGxlZC4KCiAgICovCiAgc3RhdGljIEZ1dHVyZTxTZWN1cmVTb2NrZXQ+IGNvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAgYm9vbCBvbkJhZENlcnRpZmljYXRlKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0aWZpY2F0ZSksCiAgICAgIExpc3Q8U3RyaW5nPiBzdXBwb3J0ZWRQcm90b2NvbHMsCiAgICAgIER1cmF0aW9uIHRpbWVvdXR9KSB7CiAgICByZXR1cm4gUmF3U2VjdXJlU29ja2V0LmNvbm5lY3QoaG9zdCwgcG9ydCwKICAgICAgICAgICAgY29udGV4dDogY29udGV4dCwKICAgICAgICAgICAgb25CYWRDZXJ0aWZpY2F0ZTogb25CYWRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzOiBzdXBwb3J0ZWRQcm90b2NvbHMsCiAgICAgICAgICAgIHRpbWVvdXQ6IHRpbWVvdXQpCiAgICAgICAgLnRoZW4oKHJhd1NvY2tldCkgPT4gbmV3IFNlY3VyZVNvY2tldC5fKHJhd1NvY2tldCkpOwogIH0KCiAgLy8vIExpa2UgW2Nvbm5lY3RdLCBidXQgcmV0dXJucyBhIFtGdXR1cmVdIHRoYXQgY29tcGxldGVzIHdpdGggYQogIC8vLyBbQ29ubmVjdGlvblRhc2tdIHRoYXQgY2FuIGJlIGNhbmNlbGxlZCBpZiB0aGUgW1NlY3VyZVNvY2tldF0gaXMgbm8KICAvLy8gbG9uZ2VyIG5lZWRlZC4KICBzdGF0aWMgRnV0dXJlPENvbm5lY3Rpb25UYXNrPFNlY3VyZVNvY2tldD4+IHN0YXJ0Q29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge1NlY3VyaXR5Q29udGV4dCBjb250ZXh0LAogICAgICBib29sIG9uQmFkQ2VydGlmaWNhdGUoWDUwOUNlcnRpZmljYXRlIGNlcnRpZmljYXRlKSwKICAgICAgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZFByb3RvY29sc30pIHsKICAgIHJldHVybiBSYXdTZWN1cmVTb2NrZXQuc3RhcnRDb25uZWN0KGhvc3QsIHBvcnQsCiAgICAgICAgICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICAgICAgICAgIG9uQmFkQ2VydGlmaWNhdGU6IG9uQmFkQ2VydGlmaWNhdGUsCiAgICAgICAgICAgIHN1cHBvcnRlZFByb3RvY29sczogc3VwcG9ydGVkUHJvdG9jb2xzKQogICAgICAgIC50aGVuKChyYXdTdGF0ZSkgewogICAgICBGdXR1cmU8U2VjdXJlU29ja2V0PiBzb2NrZXQgPQogICAgICAgICAgcmF3U3RhdGUuc29ja2V0LnRoZW4oKHJhd1NvY2tldCkgPT4gbmV3IFNlY3VyZVNvY2tldC5fKHJhd1NvY2tldCkpOwogICAgICByZXR1cm4gbmV3IENvbm5lY3Rpb25UYXNrPFNlY3VyZVNvY2tldD4uXygKICAgICAgICAgIHNvY2tldDogc29ja2V0LCBvbkNhbmNlbDogcmF3U3RhdGUuX29uQ2FuY2VsKTsKICAgIH0pOwogIH0KCiAgLyoqCiAgICogVGFrZXMgYW4gYWxyZWFkeSBjb25uZWN0ZWQgW3NvY2tldF0gYW5kIHN0YXJ0cyBjbGllbnQgc2lkZSBUTFMKICAgKiBoYW5kc2hha2UgdG8gbWFrZSB0aGUgY29tbXVuaWNhdGlvbiBzZWN1cmUuIFdoZW4gdGhlIHJldHVybmVkCiAgICogZnV0dXJlIGNvbXBsZXRlcyB0aGUgW1NlY3VyZVNvY2tldF0gaGFzIGNvbXBsZXRlZCB0aGUgVExTCiAgICogaGFuZHNoYWtlLiBVc2luZyB0aGlzIGZ1bmN0aW9uIHJlcXVpcmVzIHRoYXQgdGhlIG90aGVyIGVuZCBvZiB0aGUKICAgKiBjb25uZWN0aW9uIGlzIHByZXBhcmVkIGZvciBUTFMgaGFuZHNoYWtlLgogICAqCiAgICogSWYgdGhlIFtzb2NrZXRdIGFscmVhZHkgaGFzIGEgc3Vic2NyaXB0aW9uLCB0aGlzIHN1YnNjcmlwdGlvbgogICAqIHdpbGwgbm8gbG9uZ2VyIHJlY2VpdmUgYW5kIGV2ZW50cy4gSW4gbW9zdCBjYXNlcyBjYWxsaW5nCiAgICogYHBhdXNlYCBvbiB0aGlzIHN1YnNjcmlwdGlvbiBiZWZvcmUgc3RhcnRpbmcgVExTIGhhbmRzaGFrZSBpcwogICAqIHRoZSByaWdodCB0aGluZyB0byBkby4KICAgKgogICAqIFRoZSBnaXZlbiBbc29ja2V0XSBpcyBjbG9zZWQgYW5kIG1heSBub3QgYmUgdXNlZCBhbnltb3JlLgogICAqCiAgICogSWYgdGhlIFtob3N0XSBhcmd1bWVudCBpcyBwYXNzZWQgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBob3N0IG5hbWUKICAgKiBmb3IgdGhlIFRMUyBoYW5kc2hha2UuIElmIFtob3N0XSBpcyBub3QgcGFzc2VkIHRoZSBob3N0IG5hbWUgZnJvbQogICAqIHRoZSBbc29ja2V0XSB3aWxsIGJlIHVzZWQuIFRoZSBbaG9zdF0gY2FuIGJlIGVpdGhlciBhIFtTdHJpbmddIG9yCiAgICogYW4gW0ludGVybmV0QWRkcmVzc10uCiAgICoKICAgKiBDYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBfbm90XyBjYXVzZSBhIEROUyBob3N0IGxvb2t1cC4gSWYgdGhlCiAgICogW2hvc3RdIHBhc3NlZCBpcyBhIFtTdHJpbmddIHRoZSBbSW50ZXJuZXRBZGRyZXNzXSBmb3IgdGhlCiAgICogcmVzdWx0aW5nIFtTZWN1cmVTb2NrZXRdIHdpbGwgaGF2ZSB0aGUgcGFzc2VkIGluIFtob3N0XSBhcyBpdHMKICAgKiBob3N0IHZhbHVlIGFuZCB0aGUgaW50ZXJuZXQgYWRkcmVzcyBvZiB0aGUgYWxyZWFkeSBjb25uZWN0ZWQKICAgKiBzb2NrZXQgYXMgaXRzIGFkZHJlc3MgdmFsdWUuCiAgICoKICAgKiBTZWUgW2Nvbm5lY3RdIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBhcmd1bWVudHMuCiAgICoKICAgKi8KICBzdGF0aWMgRnV0dXJlPFNlY3VyZVNvY2tldD4gc2VjdXJlKFNvY2tldCBzb2NrZXQsCiAgICAgIHtob3N0LAogICAgICBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAgYm9vbCBvbkJhZENlcnRpZmljYXRlKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0aWZpY2F0ZSl9KSB7CiAgICByZXR1cm4gKChzb2NrZXQgYXMgZHluYW1pYyAvKl9Tb2NrZXQqLykuX2RldGFjaFJhdygpIGFzIEZ1dHVyZSkKICAgICAgICAudGhlbjxSYXdTZWN1cmVTb2NrZXQ+KChkZXRhY2hlZFJhdykgewogICAgICByZXR1cm4gUmF3U2VjdXJlU29ja2V0LnNlY3VyZShkZXRhY2hlZFJhd1swXSBhcyBSYXdTb2NrZXQsCiAgICAgICAgICBzdWJzY3JpcHRpb246IGRldGFjaGVkUmF3WzFdIGFzIFN0cmVhbVN1YnNjcmlwdGlvbjxSYXdTb2NrZXRFdmVudD4sCiAgICAgICAgICBob3N0OiBob3N0LAogICAgICAgICAgY29udGV4dDogY29udGV4dCwKICAgICAgICAgIG9uQmFkQ2VydGlmaWNhdGU6IG9uQmFkQ2VydGlmaWNhdGUpOwogICAgfSkudGhlbjxTZWN1cmVTb2NrZXQ+KChyYXcpID0+IG5ldyBTZWN1cmVTb2NrZXQuXyhyYXcpKTsKICB9CgogIC8qKgogICAqIFRha2VzIGFuIGFscmVhZHkgY29ubmVjdGVkIFtzb2NrZXRdIGFuZCBzdGFydHMgc2VydmVyIHNpZGUgVExTCiAgICogaGFuZHNoYWtlIHRvIG1ha2UgdGhlIGNvbW11bmljYXRpb24gc2VjdXJlLiBXaGVuIHRoZSByZXR1cm5lZAogICAqIGZ1dHVyZSBjb21wbGV0ZXMgdGhlIFtTZWN1cmVTb2NrZXRdIGhhcyBjb21wbGV0ZWQgdGhlIFRMUwogICAqIGhhbmRzaGFrZS4gVXNpbmcgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyB0aGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlCiAgICogY29ubmVjdGlvbiBpcyBnb2luZyB0byBzdGFydCB0aGUgVExTIGhhbmRzaGFrZS4KICAgKgogICAqIElmIHRoZSBbc29ja2V0XSBhbHJlYWR5IGhhcyBhIHN1YnNjcmlwdGlvbiwgdGhpcyBzdWJzY3JpcHRpb24KICAgKiB3aWxsIG5vIGxvbmdlciByZWNlaXZlIGFuZCBldmVudHMuIEluIG1vc3QgY2FzZXMgY2FsbGluZwogICAqIFs6cGF1c2U6XSBvbiB0aGlzIHN1YnNjcmlwdGlvbiBiZWZvcmUgc3RhcnRpbmcgVExTIGhhbmRzaGFrZSBpcwogICAqIHRoZSByaWdodCB0aGluZyB0byBkby4KICAgKgogICAqIElmIHNvbWUgb2YgdGhlIGRhdGEgb2YgdGhlIFRMUyBoYW5kc2hha2UgaGFzIGFscmVhZHkgYmVlbiByZWFkCiAgICogZnJvbSB0aGUgc29ja2V0IHRoaXMgZGF0YSBjYW4gYmUgcGFzc2VkIGluIHRoZSBbYnVmZmVyZWREYXRhXQogICAqIHBhcmFtZXRlci4gVGhpcyBkYXRhIHdpbGwgYmUgcHJvY2Vzc2VkIGJlZm9yZSBhbnkgb3RoZXIgZGF0YQogICAqIGF2YWlsYWJsZSBvbiB0aGUgc29ja2V0LgogICAqCiAgICogU2VlIFtTZWN1cmVTZXJ2ZXJTb2NrZXQuYmluZF0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlCiAgICogYXJndW1lbnRzLgogICAqCiAgICovCiAgc3RhdGljIEZ1dHVyZTxTZWN1cmVTb2NrZXQ+IHNlY3VyZVNlcnZlcigKICAgICAgU29ja2V0IHNvY2tldCwgU2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIHtMaXN0PGludD4gYnVmZmVyZWREYXRhLAogICAgICBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZFByb3RvY29sc30pIHsKICAgIHJldHVybiAoKHNvY2tldCBhcyBkeW5hbWljIC8qX1NvY2tldCovKS5fZGV0YWNoUmF3KCkgYXMgRnV0dXJlKQogICAgICAgIC50aGVuPFJhd1NlY3VyZVNvY2tldD4oKGRldGFjaGVkUmF3KSB7CiAgICAgIHJldHVybiBSYXdTZWN1cmVTb2NrZXQuc2VjdXJlU2VydmVyKGRldGFjaGVkUmF3WzBdIGFzIFJhd1NvY2tldCwgY29udGV4dCwKICAgICAgICAgIHN1YnNjcmlwdGlvbjogZGV0YWNoZWRSYXdbMV0gYXMgU3RyZWFtU3Vic2NyaXB0aW9uPFJhd1NvY2tldEV2ZW50PiwKICAgICAgICAgIGJ1ZmZlcmVkRGF0YTogYnVmZmVyZWREYXRhLAogICAgICAgICAgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgICAgICByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGU6IHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICAgIHN1cHBvcnRlZFByb3RvY29sczogc3VwcG9ydGVkUHJvdG9jb2xzKTsKICAgIH0pLnRoZW48U2VjdXJlU29ja2V0PigocmF3KSA9PiBuZXcgU2VjdXJlU29ja2V0Ll8ocmF3KSk7CiAgfQoKICAvKioKICAgKiBHZXQgdGhlIHBlZXIgY2VydGlmaWNhdGUgZm9yIGEgY29ubmVjdGVkIFNlY3VyZVNvY2tldC4gIElmIHRoaXMKICAgKiBTZWN1cmVTb2NrZXQgaXMgdGhlIHNlcnZlciBlbmQgb2YgYSBzZWN1cmUgc29ja2V0IGNvbm5lY3Rpb24sCiAgICogW3BlZXJDZXJ0aWZpY2F0ZV0gd2lsbCByZXR1cm4gdGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSwgb3IgbnVsbCwgaWYgbm8KICAgKiBjbGllbnQgY2VydGlmaWNhdGUgd2FzIHJlY2VpdmVkLiAgSWYgaXQgaXMgdGhlIGNsaWVudCBlbmQsCiAgICogW3BlZXJDZXJ0aWZpY2F0ZV0gd2lsbCByZXR1cm4gdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlLgogICAqLwogIFg1MDlDZXJ0aWZpY2F0ZSBnZXQgcGVlckNlcnRpZmljYXRlOwoKICAvKioKICAgKiBUaGUgcHJvdG9jb2wgd2hpY2ggd2FzIHNlbGVjdGVkIGR1cmluZyBBTFBOIHByb3RvY29sIG5lZ290aWF0aW9uLgogICAqCiAgICogUmV0dXJucyBudWxsIGlmIG9uZSBvZiB0aGUgcGVlcnMgZG9lcyBub3QgaGF2ZSBzdXBwb3J0IGZvciBBTFBOLCBkaWQgbm90CiAgICogc3BlY2lmeSBhIGxpc3Qgb2Ygc3VwcG9ydGVkIEFMUE4gcHJvdG9jb2xzIG9yIHRoZXJlIHdhcyBubyBjb21tb24KICAgKiBwcm90b2NvbCBiZXR3ZWVuIGNsaWVudCBhbmQgc2VydmVyLgogICAqLwogIFN0cmluZyBnZXQgc2VsZWN0ZWRQcm90b2NvbDsKCiAgLyoqCiAgICogUmVuZWdvdGlhdGUgYW4gZXhpc3Rpbmcgc2VjdXJlIGNvbm5lY3Rpb24sIHJlbmV3aW5nIHRoZSBzZXNzaW9uIGtleXMKICAgKiBhbmQgcG9zc2libHkgY2hhbmdpbmcgdGhlIGNvbm5lY3Rpb24gcHJvcGVydGllcy4KICAgKgogICAqIFRoaXMgcmVwZWF0cyB0aGUgU1NMIG9yIFRMUyBoYW5kc2hha2UsIHdpdGggb3B0aW9ucyB0aGF0IGFsbG93IGNsZWFyaW5nCiAgICogdGhlIHNlc3Npb24gY2FjaGUgYW5kIHJlcXVlc3RpbmcgYSBjbGllbnQgY2VydGlmaWNhdGUuCiAgICovCiAgdm9pZCByZW5lZ290aWF0ZSgKICAgICAge2Jvb2wgdXNlU2Vzc2lvbkNhY2hlOiB0cnVlLAogICAgICBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiBmYWxzZX0pOwp9CgovKioKICogUmF3U2VjdXJlU29ja2V0IHByb3ZpZGVzIGEgc2VjdXJlIChTU0wgb3IgVExTKSBuZXR3b3JrIGNvbm5lY3Rpb24uCiAqIENsaWVudCBjb25uZWN0aW9ucyB0byBhIHNlcnZlciBhcmUgcHJvdmlkZWQgYnkgY2FsbGluZwogKiBSYXdTZWN1cmVTb2NrZXQuY29ubmVjdC4gIEEgc2VjdXJlIHNlcnZlciwgY3JlYXRlZCB3aXRoCiAqIFtSYXdTZWN1cmVTZXJ2ZXJTb2NrZXRdLCBhbHNvIHJldHVybnMgUmF3U2VjdXJlU29ja2V0IG9iamVjdHMgcmVwcmVzZW50aW5nCiAqIHRoZSBzZXJ2ZXIgZW5kIG9mIGEgc2VjdXJlIGNvbm5lY3Rpb24uCiAqIFRoZSBjZXJ0aWZpY2F0ZSBwcm92aWRlZCBieSB0aGUgc2VydmVyIGlzIGNoZWNrZWQKICogdXNpbmcgdGhlIHRydXN0ZWQgY2VydGlmaWNhdGVzIHNldCBpbiB0aGUgU2VjdXJpdHlDb250ZXh0IG9iamVjdC4KICogVGhlIGRlZmF1bHQgW1NlY3VyaXR5Q29udGV4dF0gb2JqZWN0IGNvbnRhaW5zIGEgYnVpbHQtaW4gc2V0IG9mIHRydXN0ZWQKICogcm9vdCBjZXJ0aWZpY2F0ZXMgZm9yIHdlbGwta25vd24gY2VydGlmaWNhdGUgYXV0aG9yaXRpZXMuCiAqLwphYnN0cmFjdCBjbGFzcyBSYXdTZWN1cmVTb2NrZXQgaW1wbGVtZW50cyBSYXdTb2NrZXQgewogIC8qKgogICAqIENvbnN0cnVjdHMgYSBuZXcgc2VjdXJlIGNsaWVudCBzb2NrZXQgYW5kIGNvbm5lY3QgaXQgdG8gdGhlIGdpdmVuCiAgICogaG9zdCBvbiB0aGUgZ2l2ZW4gcG9ydC4gVGhlIHJldHVybmVkIFtGdXR1cmVdIGlzIGNvbXBsZXRlZCB3aXRoIHRoZQogICAqIFJhd1NlY3VyZVNvY2tldCB3aGVuIGl0IGlzIGNvbm5lY3RlZCBhbmQgcmVhZHkgZm9yIHN1YnNjcmlwdGlvbi4KICAgKgogICAqIFRoZSBjZXJ0aWZpY2F0ZSBwcm92aWRlZCBieSB0aGUgc2VydmVyIGlzIGNoZWNrZWQgdXNpbmcgdGhlIHRydXN0ZWQKICAgKiBjZXJ0aWZpY2F0ZXMgc2V0IGluIHRoZSBTZWN1cml0eUNvbnRleHQgb2JqZWN0IElmIGEgY2VydGlmaWNhdGUgYW5kIGtleSBhcmUKICAgKiBzZXQgb24gdGhlIGNsaWVudCwgdXNpbmcgW1NlY3VyaXR5Q29udGV4dC51c2VDZXJ0aWZpY2F0ZUNoYWluXSBhbmQKICAgKiBbU2VjdXJpdHlDb250ZXh0LnVzZVByaXZhdGVLZXldLCBhbmQgdGhlIHNlcnZlciBhc2tzIGZvciBhIGNsaWVudAogICAqIGNlcnRpZmljYXRlLCB0aGVuIHRoYXQgY2xpZW50IGNlcnRpZmljYXRlIGlzIHNlbnQgdG8gdGhlIHNlcnZlci4KICAgKgogICAqIFtvbkJhZENlcnRpZmljYXRlXSBpcyBhbiBvcHRpb25hbCBoYW5kbGVyIGZvciB1bnZlcmlmaWFibGUgY2VydGlmaWNhdGVzLgogICAqIFRoZSBoYW5kbGVyIHJlY2VpdmVzIHRoZSBbWDUwOUNlcnRpZmljYXRlXSwgYW5kIGNhbiBpbnNwZWN0IGl0IGFuZAogICAqIGRlY2lkZSAob3IgbGV0IHRoZSB1c2VyIGRlY2lkZSkgd2hldGhlciB0byBhY2NlcHQKICAgKiB0aGUgY29ubmVjdGlvbiBvciBub3QuICBUaGUgaGFuZGxlciBzaG91bGQgcmV0dXJuIHRydWUKICAgKiB0byBjb250aW51ZSB0aGUgW1Jhd1NlY3VyZVNvY2tldF0gY29ubmVjdGlvbi4KICAgKgogICAqIFtzdXBwb3J0ZWRQcm90b2NvbHNdIGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgcHJvdG9jb2xzIChpbiBkZWNyZWFzaW5nCiAgICogb3JkZXIgb2YgcHJlZmVyZW5jZSkgdG8gdXNlIGR1cmluZyB0aGUgQUxQTiBwcm90b2NvbCBuZWdvdGlhdGlvbiB3aXRoIHRoZQogICAqIHNlcnZlci4gIEV4YW1wbGUgdmFsdWVzIGFyZSAiaHR0cC8xLjEiIG9yICJoMiIuICBUaGUgc2VsZWN0ZWQgcHJvdG9jb2wKICAgKiBjYW4gYmUgb2J0YWluZWQgdmlhIFtSYXdTZWN1cmVTb2NrZXQuc2VsZWN0ZWRQcm90b2NvbF0uCiAgICovCiAgc3RhdGljIEZ1dHVyZTxSYXdTZWN1cmVTb2NrZXQ+IGNvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAgYm9vbCBvbkJhZENlcnRpZmljYXRlKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0aWZpY2F0ZSksCiAgICAgIExpc3Q8U3RyaW5nPiBzdXBwb3J0ZWRQcm90b2NvbHMsCiAgICAgIER1cmF0aW9uIHRpbWVvdXR9KSB7CiAgICBfUmF3U2VjdXJlU29ja2V0Ll92ZXJpZnlGaWVsZHMoCiAgICAgICAgaG9zdCwgcG9ydCwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgb25CYWRDZXJ0aWZpY2F0ZSk7CiAgICByZXR1cm4gUmF3U29ja2V0LmNvbm5lY3QoaG9zdCwgcG9ydCwgdGltZW91dDogdGltZW91dCkudGhlbigoc29ja2V0KSB7CiAgICAgIHJldHVybiBzZWN1cmUoc29ja2V0LAogICAgICAgICAgY29udGV4dDogY29udGV4dCwKICAgICAgICAgIG9uQmFkQ2VydGlmaWNhdGU6IG9uQmFkQ2VydGlmaWNhdGUsCiAgICAgICAgICBzdXBwb3J0ZWRQcm90b2NvbHM6IHN1cHBvcnRlZFByb3RvY29scyk7CiAgICB9KTsKICB9CgogIC8vLyBMaWtlIFtjb25uZWN0XSwgYnV0IHJldHVybnMgYSBbRnV0dXJlXSB0aGF0IGNvbXBsZXRlcyB3aXRoIGEKICAvLy8gW0Nvbm5lY3Rpb25UYXNrXSB0aGF0IGNhbiBiZSBjYW5jZWxsZWQgaWYgdGhlIFtSYXdTZWN1cmVTb2NrZXRdIGlzIG5vCiAgLy8vIGxvbmdlciBuZWVkZWQuCiAgc3RhdGljIEZ1dHVyZTxDb25uZWN0aW9uVGFzazxSYXdTZWN1cmVTb2NrZXQ+PiBzdGFydENvbm5lY3QoaG9zdCwgaW50IHBvcnQsCiAgICAgIHtTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAgYm9vbCBvbkJhZENlcnRpZmljYXRlKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0aWZpY2F0ZSksCiAgICAgIExpc3Q8U3RyaW5nPiBzdXBwb3J0ZWRQcm90b2NvbHN9KSB7CiAgICByZXR1cm4gUmF3U29ja2V0LnN0YXJ0Q29ubmVjdChob3N0LCBwb3J0KQogICAgICAgIC50aGVuKChDb25uZWN0aW9uVGFzazxSYXdTb2NrZXQ+IHJhd1N0YXRlKSB7CiAgICAgIEZ1dHVyZTxSYXdTZWN1cmVTb2NrZXQ+IHNvY2tldCA9IHJhd1N0YXRlLnNvY2tldC50aGVuKChyYXdTb2NrZXQpIHsKICAgICAgICByZXR1cm4gc2VjdXJlKHJhd1NvY2tldCwKICAgICAgICAgICAgY29udGV4dDogY29udGV4dCwKICAgICAgICAgICAgb25CYWRDZXJ0aWZpY2F0ZTogb25CYWRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgc3VwcG9ydGVkUHJvdG9jb2xzOiBzdXBwb3J0ZWRQcm90b2NvbHMpOwogICAgICB9KTsKICAgICAgcmV0dXJuIG5ldyBDb25uZWN0aW9uVGFzazxSYXdTZWN1cmVTb2NrZXQ+Ll8oCiAgICAgICAgICBzb2NrZXQ6IHNvY2tldCwgb25DYW5jZWw6IHJhd1N0YXRlLl9vbkNhbmNlbCk7CiAgICB9KTsKICB9CgogIC8qKgogICAqIFRha2VzIGFuIGFscmVhZHkgY29ubmVjdGVkIFtzb2NrZXRdIGFuZCBzdGFydHMgY2xpZW50IHNpZGUgVExTCiAgICogaGFuZHNoYWtlIHRvIG1ha2UgdGhlIGNvbW11bmljYXRpb24gc2VjdXJlLiBXaGVuIHRoZSByZXR1cm5lZAogICAqIGZ1dHVyZSBjb21wbGV0ZXMgdGhlIFtSYXdTZWN1cmVTb2NrZXRdIGhhcyBjb21wbGV0ZWQgdGhlIFRMUwogICAqIGhhbmRzaGFrZS4gVXNpbmcgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyB0aGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlCiAgICogY29ubmVjdGlvbiBpcyBwcmVwYXJlZCBmb3IgVExTIGhhbmRzaGFrZS4KICAgKgogICAqIElmIHRoZSBbc29ja2V0XSBhbHJlYWR5IGhhcyBhIHN1YnNjcmlwdGlvbiwgcGFzcyB0aGUgZXhpc3RpbmcKICAgKiBzdWJzY3JpcHRpb24gaW4gdGhlIFtzdWJzY3JpcHRpb25dIHBhcmFtZXRlci4gVGhlIFtzZWN1cmVdCiAgICogb3BlcmF0aW9uIHdpbGwgdGFrZSBvdmVyIHRoZSBzdWJzY3JpcHRpb24gYnkgcmVwbGFjaW5nIHRoZQogICAqIGhhbmRsZXJzIHdpdGggaXQgb3duIHNlY3VyZSBwcm9jZXNzaW5nLiBUaGUgY2FsbGVyIG11c3Qgbm90IHRvdWNoCiAgICogdGhpcyBzdWJzY3JpcHRpb24gYW55bW9yZS4gUGFzc2luZyBhIHBhdXNlZCBzdWJzY3JpcHRpb24gaXMgYW4KICAgKiBlcnJvci4KICAgKgogICAqIElmIHRoZSBbaG9zdF0gYXJndW1lbnQgaXMgcGFzc2VkIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaG9zdCBuYW1lCiAgICogZm9yIHRoZSBUTFMgaGFuZHNoYWtlLiBJZiBbaG9zdF0gaXMgbm90IHBhc3NlZCB0aGUgaG9zdCBuYW1lIGZyb20KICAgKiB0aGUgW3NvY2tldF0gd2lsbCBiZSB1c2VkLiBUaGUgW2hvc3RdIGNhbiBiZSBlaXRoZXIgYSBbU3RyaW5nXSBvcgogICAqIGFuIFtJbnRlcm5ldEFkZHJlc3NdLgogICAqCiAgICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpbGwgX25vdF8gY2F1c2UgYSBETlMgaG9zdCBsb29rdXAuIElmIHRoZQogICAqIFtob3N0XSBwYXNzZWQgaXMgYSBbU3RyaW5nXSB0aGUgW0ludGVybmV0QWRkcmVzc10gZm9yIHRoZQogICAqIHJlc3VsdGluZyBbU2VjdXJlU29ja2V0XSB3aWxsIGhhdmUgdGhpcyBwYXNzZWQgaW4gW2hvc3RdIGFzIGl0cwogICAqIGhvc3QgdmFsdWUgYW5kIHRoZSBpbnRlcm5ldCBhZGRyZXNzIG9mIHRoZSBhbHJlYWR5IGNvbm5lY3RlZAogICAqIHNvY2tldCBhcyBpdHMgYWRkcmVzcyB2YWx1ZS4KICAgKgogICAqIFNlZSBbY29ubmVjdF0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIGFyZ3VtZW50cy4KICAgKgogICAqLwogIHN0YXRpYyBGdXR1cmU8UmF3U2VjdXJlU29ja2V0PiBzZWN1cmUoUmF3U29ja2V0IHNvY2tldCwKICAgICAge1N0cmVhbVN1YnNjcmlwdGlvbjxSYXdTb2NrZXRFdmVudD4gc3Vic2NyaXB0aW9uLAogICAgICBob3N0LAogICAgICBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAgYm9vbCBvbkJhZENlcnRpZmljYXRlKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0aWZpY2F0ZSksCiAgICAgIExpc3Q8U3RyaW5nPiBzdXBwb3J0ZWRQcm90b2NvbHN9KSB7CiAgICBzb2NrZXQucmVhZEV2ZW50c0VuYWJsZWQgPSBmYWxzZTsKICAgIHNvY2tldC53cml0ZUV2ZW50c0VuYWJsZWQgPSBmYWxzZTsKICAgIHJldHVybiBfUmF3U2VjdXJlU29ja2V0LmNvbm5lY3QoCiAgICAgICAgaG9zdCAhPSBudWxsID8gaG9zdCA6IHNvY2tldC5hZGRyZXNzLmhvc3QsIHNvY2tldC5wb3J0LAogICAgICAgIGlzX3NlcnZlcjogZmFsc2UsCiAgICAgICAgc29ja2V0OiBzb2NrZXQsCiAgICAgICAgc3Vic2NyaXB0aW9uOiBzdWJzY3JpcHRpb24sCiAgICAgICAgY29udGV4dDogY29udGV4dCwKICAgICAgICBvbkJhZENlcnRpZmljYXRlOiBvbkJhZENlcnRpZmljYXRlLAogICAgICAgIHN1cHBvcnRlZFByb3RvY29sczogc3VwcG9ydGVkUHJvdG9jb2xzKTsKICB9CgogIC8qKgogICAqIFRha2VzIGFuIGFscmVhZHkgY29ubmVjdGVkIFtzb2NrZXRdIGFuZCBzdGFydHMgc2VydmVyIHNpZGUgVExTCiAgICogaGFuZHNoYWtlIHRvIG1ha2UgdGhlIGNvbW11bmljYXRpb24gc2VjdXJlLiBXaGVuIHRoZSByZXR1cm5lZAogICAqIGZ1dHVyZSBjb21wbGV0ZXMgdGhlIFtSYXdTZWN1cmVTb2NrZXRdIGhhcyBjb21wbGV0ZWQgdGhlIFRMUwogICAqIGhhbmRzaGFrZS4gVXNpbmcgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyB0aGF0IHRoZSBvdGhlciBlbmQgb2YgdGhlCiAgICogY29ubmVjdGlvbiBpcyBnb2luZyB0byBzdGFydCB0aGUgVExTIGhhbmRzaGFrZS4KICAgKgogICAqIElmIHRoZSBbc29ja2V0XSBhbHJlYWR5IGhhcyBhIHN1YnNjcmlwdGlvbiwgcGFzcyB0aGUgZXhpc3RpbmcKICAgKiBzdWJzY3JpcHRpb24gaW4gdGhlIFtzdWJzY3JpcHRpb25dIHBhcmFtZXRlci4gVGhlIFtzZWN1cmVTZXJ2ZXJdCiAgICogb3BlcmF0aW9uIHdpbGwgdGFrZSBvdmVyIHRoZSBzdWJzY3JpcHRpb24gYnkgcmVwbGFjaW5nIHRoZQogICAqIGhhbmRsZXJzIHdpdGggaXQgb3duIHNlY3VyZSBwcm9jZXNzaW5nLiBUaGUgY2FsbGVyIG11c3Qgbm90IHRvdWNoCiAgICogdGhpcyBzdWJzY3JpcHRpb24gYW55bW9yZS4gUGFzc2luZyBhIHBhdXNlZCBzdWJzY3JpcHRpb24gaXMgYW4KICAgKiBlcnJvci4KICAgKgogICAqIElmIHNvbWUgb2YgdGhlIGRhdGEgb2YgdGhlIFRMUyBoYW5kc2hha2UgaGFzIGFscmVhZHkgYmVlbiByZWFkCiAgICogZnJvbSB0aGUgc29ja2V0IHRoaXMgZGF0YSBjYW4gYmUgcGFzc2VkIGluIHRoZSBbYnVmZmVyZWREYXRhXQogICAqIHBhcmFtZXRlci4gVGhpcyBkYXRhIHdpbGwgYmUgcHJvY2Vzc2VkIGJlZm9yZSBhbnkgb3RoZXIgZGF0YQogICAqIGF2YWlsYWJsZSBvbiB0aGUgc29ja2V0LgogICAqCiAgICogU2VlIFtSYXdTZWN1cmVTZXJ2ZXJTb2NrZXQuYmluZF0gZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlCiAgICogYXJndW1lbnRzLgogICAqCiAgICovCiAgc3RhdGljIEZ1dHVyZTxSYXdTZWN1cmVTb2NrZXQ+IHNlY3VyZVNlcnZlcigKICAgICAgUmF3U29ja2V0IHNvY2tldCwgU2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIHtTdHJlYW1TdWJzY3JpcHRpb248UmF3U29ja2V0RXZlbnQ+IHN1YnNjcmlwdGlvbiwKICAgICAgTGlzdDxpbnQ+IGJ1ZmZlcmVkRGF0YSwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIExpc3Q8U3RyaW5nPiBzdXBwb3J0ZWRQcm90b2NvbHN9KSB7CiAgICBzb2NrZXQucmVhZEV2ZW50c0VuYWJsZWQgPSBmYWxzZTsKICAgIHNvY2tldC53cml0ZUV2ZW50c0VuYWJsZWQgPSBmYWxzZTsKICAgIHJldHVybiBfUmF3U2VjdXJlU29ja2V0LmNvbm5lY3Qoc29ja2V0LmFkZHJlc3MsIHNvY2tldC5yZW1vdGVQb3J0LAogICAgICAgIGNvbnRleHQ6IGNvbnRleHQsCiAgICAgICAgaXNfc2VydmVyOiB0cnVlLAogICAgICAgIHNvY2tldDogc29ja2V0LAogICAgICAgIHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uLAogICAgICAgIGJ1ZmZlcmVkRGF0YTogYnVmZmVyZWREYXRhLAogICAgICAgIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICAgIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLAogICAgICAgIHN1cHBvcnRlZFByb3RvY29sczogc3VwcG9ydGVkUHJvdG9jb2xzKTsKICB9CgogIC8qKgogICAqIFJlbmVnb3RpYXRlIGFuIGV4aXN0aW5nIHNlY3VyZSBjb25uZWN0aW9uLCByZW5ld2luZyB0aGUgc2Vzc2lvbiBrZXlzCiAgICogYW5kIHBvc3NpYmx5IGNoYW5naW5nIHRoZSBjb25uZWN0aW9uIHByb3BlcnRpZXMuCiAgICoKICAgKiBUaGlzIHJlcGVhdHMgdGhlIFNTTCBvciBUTFMgaGFuZHNoYWtlLCB3aXRoIG9wdGlvbnMgdGhhdCBhbGxvdyBjbGVhcmluZwogICAqIHRoZSBzZXNzaW9uIGNhY2hlIGFuZCByZXF1ZXN0aW5nIGEgY2xpZW50IGNlcnRpZmljYXRlLgogICAqLwogIHZvaWQgcmVuZWdvdGlhdGUoCiAgICAgIHtib29sIHVzZVNlc3Npb25DYWNoZTogdHJ1ZSwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGU6IGZhbHNlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2V9KTsKCiAgLyoqCiAgICogR2V0IHRoZSBwZWVyIGNlcnRpZmljYXRlIGZvciBhIGNvbm5lY3RlZCBSYXdTZWN1cmVTb2NrZXQuICBJZiB0aGlzCiAgICogUmF3U2VjdXJlU29ja2V0IGlzIHRoZSBzZXJ2ZXIgZW5kIG9mIGEgc2VjdXJlIHNvY2tldCBjb25uZWN0aW9uLAogICAqIFtwZWVyQ2VydGlmaWNhdGVdIHdpbGwgcmV0dXJuIHRoZSBjbGllbnQgY2VydGlmaWNhdGUsIG9yIG51bGwsIGlmIG5vCiAgICogY2xpZW50IGNlcnRpZmljYXRlIHdhcyByZWNlaXZlZC4gIElmIGl0IGlzIHRoZSBjbGllbnQgZW5kLAogICAqIFtwZWVyQ2VydGlmaWNhdGVdIHdpbGwgcmV0dXJuIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZS4KICAgKi8KICBYNTA5Q2VydGlmaWNhdGUgZ2V0IHBlZXJDZXJ0aWZpY2F0ZTsKCiAgLyoqCiAgICogVGhlIHByb3RvY29sIHdoaWNoIHdhcyBzZWxlY3RlZCBkdXJpbmcgcHJvdG9jb2wgbmVnb3RpYXRpb24uCiAgICoKICAgKiBSZXR1cm5zIG51bGwgaWYgb25lIG9mIHRoZSBwZWVycyBkb2VzIG5vdCBoYXZlIHN1cHBvcnQgZm9yIEFMUE4sIGRpZCBub3QKICAgKiBzcGVjaWZ5IGEgbGlzdCBvZiBzdXBwb3J0ZWQgQUxQTiBwcm90b2NvbHMgb3IgdGhlcmUgd2FzIG5vIGNvbW1vbgogICAqIHByb3RvY29sIGJldHdlZW4gY2xpZW50IGFuZCBzZXJ2ZXIuCiAgICovCiAgU3RyaW5nIGdldCBzZWxlY3RlZFByb3RvY29sOwp9CgovKioKICogWDUwOUNlcnRpZmljYXRlIHJlcHJlc2VudHMgYW4gU1NMIGNlcnRpZmljYXRlLCB3aXRoIGFjY2Vzc29ycyB0bwogKiBnZXQgdGhlIGZpZWxkcyBvZiB0aGUgY2VydGlmaWNhdGUuCiAqLwpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmFic3RyYWN0IGNsYXNzIFg1MDlDZXJ0aWZpY2F0ZSB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGV4dGVybmFsIGZhY3RvcnkgWDUwOUNlcnRpZmljYXRlLl8oKTsKCiAgLy8vIFRoZSBERVIgZW5jb2RlZCBieXRlcyBvZiB0aGUgY2VydGlmaWNhdGUuCiAgVWludDhMaXN0IGdldCBkZXI7CgogIC8vLyBUaGUgUEVNIGVuY29kZWQgU3RyaW5nIG9mIHRoZSBjZXJ0aWZpY2F0ZS4KICBTdHJpbmcgZ2V0IHBlbTsKCiAgLy8vIFRoZSBTSEExIGhhc2ggb2YgdGhlIGNlcnRpZmljYXRlLgogIFVpbnQ4TGlzdCBnZXQgc2hhMTsKCiAgU3RyaW5nIGdldCBzdWJqZWN0OwogIFN0cmluZyBnZXQgaXNzdWVyOwogIERhdGVUaW1lIGdldCBzdGFydFZhbGlkaXR5OwogIERhdGVUaW1lIGdldCBlbmRWYWxpZGl0eTsKfQoKY2xhc3MgX0ZpbHRlclN0YXR1cyB7CiAgYm9vbCBwcm9ncmVzcyA9IGZhbHNlOyAvLyBUaGUgZmlsdGVyIHJlYWQgb3Igd3JvdGUgZGF0YSB0byB0aGUgYnVmZmVycy4KICBib29sIHJlYWRFbXB0eSA9IHRydWU7IC8vIFRoZSByZWFkIGJ1ZmZlcnMgYW5kIGRlY3J5cHRpb24gZmlsdGVyIGFyZSBlbXB0eS4KICBib29sIHdyaXRlRW1wdHkgPSB0cnVlOyAvLyBUaGUgd3JpdGUgYnVmZmVycyBhbmQgZW5jcnlwdGlvbiBmaWx0ZXIgYXJlIGVtcHR5LgogIC8vIFRoZXNlIGFyZSBzZXQgaWYgYSBidWZmZXIgY2hhbmdlcyBzdGF0ZSBmcm9tIGVtcHR5IG9yIGZ1bGwuCiAgYm9vbCByZWFkUGxhaW50ZXh0Tm9Mb25nZXJFbXB0eSA9IGZhbHNlOwogIGJvb2wgd3JpdGVQbGFpbnRleHROb0xvbmdlckZ1bGwgPSBmYWxzZTsKICBib29sIHJlYWRFbmNyeXB0ZWROb0xvbmdlckZ1bGwgPSBmYWxzZTsKICBib29sIHdyaXRlRW5jcnlwdGVkTm9Mb25nZXJFbXB0eSA9IGZhbHNlOwoKICBfRmlsdGVyU3RhdHVzKCk7Cn0KCmNsYXNzIF9SYXdTZWN1cmVTb2NrZXQgZXh0ZW5kcyBTdHJlYW08UmF3U29ja2V0RXZlbnQ+CiAgICBpbXBsZW1lbnRzIFJhd1NlY3VyZVNvY2tldCB7CiAgLy8gU3RhdHVzIHN0YXRlcwogIHN0YXRpYyBjb25zdCBpbnQgaGFuZHNoYWtlU3RhdHVzID0gMjAxOwogIHN0YXRpYyBjb25zdCBpbnQgY29ubmVjdGVkU3RhdHVzID0gMjAyOwogIHN0YXRpYyBjb25zdCBpbnQgY2xvc2VkU3RhdHVzID0gMjAzOwoKICAvLyBCdWZmZXIgaWRlbnRpZmllcnMuCiAgLy8gVGhlc2UgbXVzdCBhZ3JlZSB3aXRoIHRob3NlIGluIHRoZSBuYXRpdmUgQysrIGltcGxlbWVudGF0aW9uLgogIHN0YXRpYyBjb25zdCBpbnQgcmVhZFBsYWludGV4dElkID0gMDsKICBzdGF0aWMgY29uc3QgaW50IHdyaXRlUGxhaW50ZXh0SWQgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgcmVhZEVuY3J5cHRlZElkID0gMjsKICBzdGF0aWMgY29uc3QgaW50IHdyaXRlRW5jcnlwdGVkSWQgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgYnVmZmVyQ291bnQgPSA0OwoKICAvLyBJcyBhIGJ1ZmZlciBpZGVudGlmaWVyIGZvciBhbiBlbmNyeXB0ZWQgYnVmZmVyPwogIHN0YXRpYyBib29sIF9pc0J1ZmZlckVuY3J5cHRlZChpbnQgaWRlbnRpZmllcikgPT4KICAgICAgaWRlbnRpZmllciA+PSByZWFkRW5jcnlwdGVkSWQ7CgogIFJhd1NvY2tldCBfc29ja2V0OwogIGZpbmFsIENvbXBsZXRlcjxfUmF3U2VjdXJlU29ja2V0PiBfaGFuZHNoYWtlQ29tcGxldGUgPQogICAgICBuZXcgQ29tcGxldGVyPF9SYXdTZWN1cmVTb2NrZXQ+KCk7CiAgU3RyZWFtQ29udHJvbGxlcjxSYXdTb2NrZXRFdmVudD4gX2NvbnRyb2xsZXI7CiAgU3RyZWFtPFJhd1NvY2tldEV2ZW50PiBfc3RyZWFtOwogIFN0cmVhbVN1YnNjcmlwdGlvbjxSYXdTb2NrZXRFdmVudD4gX3NvY2tldFN1YnNjcmlwdGlvbjsKICBMaXN0PGludD4gX2J1ZmZlcmVkRGF0YTsKICBpbnQgX2J1ZmZlcmVkRGF0YUluZGV4ID0gMDsKICBmaW5hbCBJbnRlcm5ldEFkZHJlc3MgYWRkcmVzczsKICBmaW5hbCBib29sIGlzX3NlcnZlcjsKICBTZWN1cml0eUNvbnRleHQgY29udGV4dDsKICBmaW5hbCBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTsKICBmaW5hbCBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZTsKICBmaW5hbCBGdW5jdGlvbiBvbkJhZENlcnRpZmljYXRlOwoKICB2YXIgX3N0YXR1cyA9IGhhbmRzaGFrZVN0YXR1czsKICBib29sIF93cml0ZUV2ZW50c0VuYWJsZWQgPSB0cnVlOwogIGJvb2wgX3JlYWRFdmVudHNFbmFibGVkID0gdHJ1ZTsKICBpbnQgX3BhdXNlQ291bnQgPSAwOwogIGJvb2wgX3BlbmRpbmdSZWFkRXZlbnQgPSBmYWxzZTsKICBib29sIF9zb2NrZXRDbG9zZWRSZWFkID0gZmFsc2U7IC8vIFRoZSBuZXR3b3JrIHNvY2tldCBpcyBjbG9zZWQgZm9yIHJlYWRpbmcuCiAgYm9vbCBfc29ja2V0Q2xvc2VkV3JpdGUgPSBmYWxzZTsgLy8gVGhlIG5ldHdvcmsgc29ja2V0IGlzIGNsb3NlZCBmb3Igd3JpdGluZy4KICBib29sIF9jbG9zZWRSZWFkID0gZmFsc2U7IC8vIFRoZSBzZWN1cmUgc29ja2V0IGhhcyBmaXJlZCBhbiBvbkNsb3NlZCBldmVudC4KICBib29sIF9jbG9zZWRXcml0ZSA9IGZhbHNlOyAvLyBUaGUgc2VjdXJlIHNvY2tldCBoYXMgYmVlbiBjbG9zZWQgZm9yIHdyaXRpbmcuCiAgLy8gVGhlIG5ldHdvcmsgc29ja2V0IGlzIGdvbmUuCiAgQ29tcGxldGVyPFJhd1NlY3VyZVNvY2tldD4gX2Nsb3NlQ29tcGxldGVyID0gbmV3IENvbXBsZXRlcjxSYXdTZWN1cmVTb2NrZXQ+KCk7CiAgX0ZpbHRlclN0YXR1cyBfZmlsdGVyU3RhdHVzID0gbmV3IF9GaWx0ZXJTdGF0dXMoKTsKICBib29sIF9jb25uZWN0UGVuZGluZyA9IHRydWU7CiAgYm9vbCBfZmlsdGVyUGVuZGluZyA9IGZhbHNlOwogIGJvb2wgX2ZpbHRlckFjdGl2ZSA9IGZhbHNlOwoKICBfU2VjdXJlRmlsdGVyIF9zZWN1cmVGaWx0ZXIgPSBuZXcgX1NlY3VyZUZpbHRlci5fKCk7CiAgU3RyaW5nIF9zZWxlY3RlZFByb3RvY29sOwoKICBzdGF0aWMgRnV0dXJlPF9SYXdTZWN1cmVTb2NrZXQ+IGNvbm5lY3QoCiAgICAgIGR5bmFtaWMgLypTdHJpbmd8SW50ZXJuZXRBZGRyZXNzKi8gaG9zdCwgaW50IHJlcXVlc3RlZFBvcnQsCiAgICAgIHtib29sIGlzX3NlcnZlciwKICAgICAgU2VjdXJpdHlDb250ZXh0IGNvbnRleHQsCiAgICAgIFJhd1NvY2tldCBzb2NrZXQsCiAgICAgIFN0cmVhbVN1YnNjcmlwdGlvbjxSYXdTb2NrZXRFdmVudD4gc3Vic2NyaXB0aW9uLAogICAgICBMaXN0PGludD4gYnVmZmVyZWREYXRhLAogICAgICBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgYm9vbCBvbkJhZENlcnRpZmljYXRlKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0aWZpY2F0ZSksCiAgICAgIExpc3Q8U3RyaW5nPiBzdXBwb3J0ZWRQcm90b2NvbHN9KSB7CiAgICBfdmVyaWZ5RmllbGRzKGhvc3QsIHJlcXVlc3RlZFBvcnQsIGlzX3NlcnZlciwgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICAgIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwgb25CYWRDZXJ0aWZpY2F0ZSk7CiAgICBpZiAoaG9zdCBpcyBJbnRlcm5ldEFkZHJlc3MpIGhvc3QgPSBob3N0Lmhvc3Q7CiAgICBJbnRlcm5ldEFkZHJlc3MgYWRkcmVzcyA9IHNvY2tldC5hZGRyZXNzOwogICAgaWYgKGhvc3QgIT0gbnVsbCkgewogICAgICBhZGRyZXNzID0gSW50ZXJuZXRBZGRyZXNzLl9jbG9uZVdpdGhOZXdIb3N0KGFkZHJlc3MsIGhvc3QpOwogICAgfQogICAgcmV0dXJuIG5ldyBfUmF3U2VjdXJlU29ja2V0KAogICAgICAgICAgICBhZGRyZXNzLAogICAgICAgICAgICByZXF1ZXN0ZWRQb3J0LAogICAgICAgICAgICBpc19zZXJ2ZXIsCiAgICAgICAgICAgIGNvbnRleHQsCiAgICAgICAgICAgIHNvY2tldCwKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLAogICAgICAgICAgICBidWZmZXJlZERhdGEsCiAgICAgICAgICAgIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICAgICAgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLAogICAgICAgICAgICBvbkJhZENlcnRpZmljYXRlLAogICAgICAgICAgICBzdXBwb3J0ZWRQcm90b2NvbHMpCiAgICAgICAgLl9oYW5kc2hha2VDb21wbGV0ZQogICAgICAgIC5mdXR1cmU7CiAgfQoKICBfUmF3U2VjdXJlU29ja2V0KAogICAgICB0aGlzLmFkZHJlc3MsCiAgICAgIGludCByZXF1ZXN0ZWRQb3J0LAogICAgICB0aGlzLmlzX3NlcnZlciwKICAgICAgdGhpcy5jb250ZXh0LAogICAgICB0aGlzLl9zb2NrZXQsCiAgICAgIHRoaXMuX3NvY2tldFN1YnNjcmlwdGlvbiwKICAgICAgdGhpcy5fYnVmZmVyZWREYXRhLAogICAgICB0aGlzLnJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgdGhpcy5yZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIHRoaXMub25CYWRDZXJ0aWZpY2F0ZSwKICAgICAgTGlzdDxTdHJpbmc+IHN1cHBvcnRlZFByb3RvY29scykgewogICAgY29udGV4dCA/Pz0gU2VjdXJpdHlDb250ZXh0LmRlZmF1bHRDb250ZXh0OwogICAgX2NvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxSYXdTb2NrZXRFdmVudD4oCiAgICAgICAgc3luYzogdHJ1ZSwKICAgICAgICBvbkxpc3RlbjogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UsCiAgICAgICAgb25QYXVzZTogX29uUGF1c2VTdGF0ZUNoYW5nZSwKICAgICAgICBvblJlc3VtZTogX29uUGF1c2VTdGF0ZUNoYW5nZSwKICAgICAgICBvbkNhbmNlbDogX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2UpOwogICAgX3N0cmVhbSA9IF9jb250cm9sbGVyLnN0cmVhbTsKICAgIC8vIFRocm93IGFuIEFyZ3VtZW50RXJyb3IgaWYgYW55IGZpZWxkIGlzIGludmFsaWQuICBBZnRlciB0aGlzLCBhbGwKICAgIC8vIGVycm9ycyB3aWxsIGJlIHJlcG9ydGVkIHRocm91Z2ggdGhlIGZ1dHVyZSBvciB0aGUgc3RyZWFtLgogICAgX3NlY3VyZUZpbHRlci5pbml0KCk7CiAgICBfc2VjdXJlRmlsdGVyCiAgICAgICAgLnJlZ2lzdGVySGFuZHNoYWtlQ29tcGxldGVDYWxsYmFjayhfc2VjdXJlSGFuZHNoYWtlQ29tcGxldGVIYW5kbGVyKTsKICAgIGlmIChvbkJhZENlcnRpZmljYXRlICE9IG51bGwpIHsKICAgICAgX3NlY3VyZUZpbHRlci5yZWdpc3RlckJhZENlcnRpZmljYXRlQ2FsbGJhY2soX29uQmFkQ2VydGlmaWNhdGVXcmFwcGVyKTsKICAgIH0KICAgIF9zb2NrZXQucmVhZEV2ZW50c0VuYWJsZWQgPSB0cnVlOwogICAgX3NvY2tldC53cml0ZUV2ZW50c0VuYWJsZWQgPSBmYWxzZTsKICAgIGlmIChfc29ja2V0U3Vic2NyaXB0aW9uID09IG51bGwpIHsKICAgICAgLy8gSWYgYSBjdXJyZW50IHN1YnNjcmlwdGlvbiBpcyBwcm92aWRlZCB1c2UgdGhpcyBvdGhlcndpc2UKICAgICAgLy8gY3JlYXRlIGEgbmV3IG9uZS4KICAgICAgX3NvY2tldFN1YnNjcmlwdGlvbiA9IF9zb2NrZXQubGlzdGVuKF9ldmVudERpc3BhdGNoZXIsCiAgICAgICAgICBvbkVycm9yOiBfcmVwb3J0RXJyb3IsIG9uRG9uZTogX2RvbmVIYW5kbGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIGlmIChfc29ja2V0U3Vic2NyaXB0aW9uLmlzUGF1c2VkKSB7CiAgICAgICAgX3NvY2tldC5jbG9zZSgpOwogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJTdWJzY3JpcHRpb24gcGFzc2VkIHRvIFRMUyB1cGdyYWRlIGlzIHBhdXNlZCIpOwogICAgICB9CiAgICAgIC8vIElmIHdlIGFyZSB1cGdyYWRpbmcgYSBzb2NrZXQgdGhhdCBpcyBhbHJlYWR5IGNsb3NlZCBmb3IgcmVhZCwKICAgICAgLy8gcmVwb3J0IGFuIGVycm9yIGFzIGlmIHdlIHJlY2VpdmVkIHJlYWRDbG9zZWQgZHVyaW5nIHRoZSBoYW5kc2hha2UuCiAgICAgIGR5bmFtaWMgcyA9IF9zb2NrZXQ7IC8vIENhc3QgdG8gZHluYW1pYyB0byBhdm9pZCB3YXJuaW5nLgogICAgICBpZiAocy5fc29ja2V0LmNsb3NlZFJlYWRFdmVudFNlbnQpIHsKICAgICAgICBfZXZlbnREaXNwYXRjaGVyKFJhd1NvY2tldEV2ZW50LnJlYWRDbG9zZWQpOwogICAgICB9CiAgICAgIF9zb2NrZXRTdWJzY3JpcHRpb24KICAgICAgICAuLm9uRGF0YShfZXZlbnREaXNwYXRjaGVyKQogICAgICAgIC4ub25FcnJvcihfcmVwb3J0RXJyb3IpCiAgICAgICAgLi5vbkRvbmUoX2RvbmVIYW5kbGVyKTsKICAgIH0KICAgIHRyeSB7CiAgICAgIHZhciBlbmNvZGVkUHJvdG9jb2xzID0KICAgICAgICAgIFNlY3VyaXR5Q29udGV4dC5fcHJvdG9jb2xzVG9MZW5ndGhFbmNvZGluZyhzdXBwb3J0ZWRQcm90b2NvbHMpOwogICAgICBfc2VjdXJlRmlsdGVyLmNvbm5lY3QoCiAgICAgICAgICBhZGRyZXNzLmhvc3QsCiAgICAgICAgICBjb250ZXh0LAogICAgICAgICAgaXNfc2VydmVyLAogICAgICAgICAgcmVxdWVzdENsaWVudENlcnRpZmljYXRlIHx8IHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICAgIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgICAgIGVuY29kZWRQcm90b2NvbHMpOwogICAgICBfc2VjdXJlSGFuZHNoYWtlKCk7CiAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgIF9yZXBvcnRFcnJvcihlLCBzKTsKICAgIH0KICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxSYXdTb2NrZXRFdmVudD4gbGlzdGVuKHZvaWQgb25EYXRhKFJhd1NvY2tldEV2ZW50IGRhdGEpLAogICAgICB7RnVuY3Rpb24gb25FcnJvciwgdm9pZCBvbkRvbmUoKSwgYm9vbCBjYW5jZWxPbkVycm9yfSkgewogICAgX3NlbmRXcml0ZUV2ZW50KCk7CiAgICByZXR1cm4gX3N0cmVhbS5saXN0ZW4ob25EYXRhLAogICAgICAgIG9uRXJyb3I6IG9uRXJyb3IsIG9uRG9uZTogb25Eb25lLCBjYW5jZWxPbkVycm9yOiBjYW5jZWxPbkVycm9yKTsKICB9CgogIHN0YXRpYyB2b2lkIF92ZXJpZnlGaWVsZHMoCiAgICAgIGhvc3QsCiAgICAgIGludCByZXF1ZXN0ZWRQb3J0LAogICAgICBib29sIGlzX3NlcnZlciwKICAgICAgYm9vbCByZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGUsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLAogICAgICBGdW5jdGlvbiBvbkJhZENlcnRpZmljYXRlKSB7CiAgICBpZiAoaG9zdCBpcyEgU3RyaW5nICYmIGhvc3QgaXMhIEludGVybmV0QWRkcmVzcykgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiaG9zdCBpcyBub3QgYSBTdHJpbmcgb3IgYW4gSW50ZXJuZXRBZGRyZXNzIik7CiAgICB9CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChyZXF1ZXN0ZWRQb3J0LCAicmVxdWVzdGVkUG9ydCIpOwogICAgaWYgKHJlcXVlc3RlZFBvcnQgPCAwIHx8IHJlcXVlc3RlZFBvcnQgPiA2NTUzNSkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCJyZXF1ZXN0ZWRQb3J0IGlzIG5vdCBpbiB0aGUgcmFuZ2UgMC4uNjU1MzUiKTsKICAgIH0KICAgIEFyZ3VtZW50RXJyb3IuY2hlY2tOb3ROdWxsKAogICAgICAgIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwgInJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSIpOwogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoCiAgICAgICAgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlLCAicmVxdWlyZUNsaWVudENlcnRpZmljYXRlIik7CiAgfQoKICBpbnQgZ2V0IHBvcnQgPT4gX3NvY2tldC5wb3J0OwoKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IHJlbW90ZUFkZHJlc3MgPT4gX3NvY2tldC5yZW1vdGVBZGRyZXNzOwoKICBpbnQgZ2V0IHJlbW90ZVBvcnQgPT4gX3NvY2tldC5yZW1vdGVQb3J0OwoKICB2b2lkIHNldCBfb3duZXIob3duZXIpIHsKICAgIChfc29ja2V0IGFzIGR5bmFtaWMpLl9vd25lciA9IG93bmVyOwogIH0KCiAgaW50IGF2YWlsYWJsZSgpIHsKICAgIHJldHVybiBfc3RhdHVzICE9IGNvbm5lY3RlZFN0YXR1cwogICAgICAgID8gMAogICAgICAgIDogX3NlY3VyZUZpbHRlci5idWZmZXJzW3JlYWRQbGFpbnRleHRJZF0ubGVuZ3RoOwogIH0KCiAgRnV0dXJlPFJhd1NlY3VyZVNvY2tldD4gY2xvc2UoKSB7CiAgICBzaHV0ZG93bihTb2NrZXREaXJlY3Rpb24uYm90aCk7CiAgICByZXR1cm4gX2Nsb3NlQ29tcGxldGVyLmZ1dHVyZTsKICB9CgogIHZvaWQgX2NvbXBsZXRlQ2xvc2VDb21wbGV0ZXIoW1Jhd1NvY2tldCBkdW1teV0pIHsKICAgIGlmICghX2Nsb3NlQ29tcGxldGVyLmlzQ29tcGxldGVkKSBfY2xvc2VDb21wbGV0ZXIuY29tcGxldGUodGhpcyk7CiAgfQoKICB2b2lkIF9jbG9zZSgpIHsKICAgIF9jbG9zZWRXcml0ZSA9IHRydWU7CiAgICBfY2xvc2VkUmVhZCA9IHRydWU7CiAgICBpZiAoX3NvY2tldCAhPSBudWxsKSB7CiAgICAgIF9zb2NrZXQuY2xvc2UoKS50aGVuKF9jb21wbGV0ZUNsb3NlQ29tcGxldGVyKTsKICAgIH0gZWxzZSB7CiAgICAgIF9jb21wbGV0ZUNsb3NlQ29tcGxldGVyKCk7CiAgICB9CiAgICBfc29ja2V0Q2xvc2VkV3JpdGUgPSB0cnVlOwogICAgX3NvY2tldENsb3NlZFJlYWQgPSB0cnVlOwogICAgaWYgKCFfZmlsdGVyQWN0aXZlICYmIF9zZWN1cmVGaWx0ZXIgIT0gbnVsbCkgewogICAgICBfc2VjdXJlRmlsdGVyLmRlc3Ryb3koKTsKICAgICAgX3NlY3VyZUZpbHRlciA9IG51bGw7CiAgICB9CiAgICBpZiAoX3NvY2tldFN1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgIF9zb2NrZXRTdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICB9CiAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgX3N0YXR1cyA9IGNsb3NlZFN0YXR1czsKICB9CgogIHZvaWQgc2h1dGRvd24oU29ja2V0RGlyZWN0aW9uIGRpcmVjdGlvbikgewogICAgaWYgKGRpcmVjdGlvbiA9PSBTb2NrZXREaXJlY3Rpb24uc2VuZCB8fAogICAgICAgIGRpcmVjdGlvbiA9PSBTb2NrZXREaXJlY3Rpb24uYm90aCkgewogICAgICBfY2xvc2VkV3JpdGUgPSB0cnVlOwogICAgICBpZiAoX2ZpbHRlclN0YXR1cy53cml0ZUVtcHR5KSB7CiAgICAgICAgX3NvY2tldC5zaHV0ZG93bihTb2NrZXREaXJlY3Rpb24uc2VuZCk7CiAgICAgICAgX3NvY2tldENsb3NlZFdyaXRlID0gdHJ1ZTsKICAgICAgICBpZiAoX2Nsb3NlZFJlYWQpIHsKICAgICAgICAgIF9jbG9zZSgpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGRpcmVjdGlvbiA9PSBTb2NrZXREaXJlY3Rpb24ucmVjZWl2ZSB8fAogICAgICAgIGRpcmVjdGlvbiA9PSBTb2NrZXREaXJlY3Rpb24uYm90aCkgewogICAgICBfY2xvc2VkUmVhZCA9IHRydWU7CiAgICAgIF9zb2NrZXRDbG9zZWRSZWFkID0gdHJ1ZTsKICAgICAgX3NvY2tldC5zaHV0ZG93bihTb2NrZXREaXJlY3Rpb24ucmVjZWl2ZSk7CiAgICAgIGlmIChfc29ja2V0Q2xvc2VkV3JpdGUpIHsKICAgICAgICBfY2xvc2UoKTsKICAgICAgfQogICAgfQogIH0KCiAgYm9vbCBnZXQgd3JpdGVFdmVudHNFbmFibGVkID0+IF93cml0ZUV2ZW50c0VuYWJsZWQ7CgogIHZvaWQgc2V0IHdyaXRlRXZlbnRzRW5hYmxlZChib29sIHZhbHVlKSB7CiAgICBfd3JpdGVFdmVudHNFbmFibGVkID0gdmFsdWU7CiAgICBpZiAodmFsdWUpIHsKICAgICAgVGltZXIucnVuKCgpID0+IF9zZW5kV3JpdGVFdmVudCgpKTsKICAgIH0KICB9CgogIGJvb2wgZ2V0IHJlYWRFdmVudHNFbmFibGVkID0+IF9yZWFkRXZlbnRzRW5hYmxlZDsKCiAgdm9pZCBzZXQgcmVhZEV2ZW50c0VuYWJsZWQoYm9vbCB2YWx1ZSkgewogICAgX3JlYWRFdmVudHNFbmFibGVkID0gdmFsdWU7CiAgICBfc2NoZWR1bGVSZWFkRXZlbnQoKTsKICB9CgogIFVpbnQ4TGlzdCByZWFkKFtpbnQgbGVuZ3RoXSkgewogICAgaWYgKGxlbmd0aCAhPSBudWxsICYmIChsZW5ndGggaXMhIGludCB8fCBsZW5ndGggPCAwKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigKICAgICAgICAgICJJbnZhbGlkIGxlbmd0aCBwYXJhbWV0ZXIgaW4gU2VjdXJlU29ja2V0LnJlYWQgKGxlbmd0aDogJGxlbmd0aCkiKTsKICAgIH0KICAgIGlmIChfY2xvc2VkUmVhZCkgewogICAgICB0aHJvdyBuZXcgU29ja2V0RXhjZXB0aW9uKCJSZWFkaW5nIGZyb20gYSBjbG9zZWQgc29ja2V0Iik7CiAgICB9CiAgICBpZiAoX3N0YXR1cyAhPSBjb25uZWN0ZWRTdGF0dXMpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX3NlY3VyZUZpbHRlci5idWZmZXJzW3JlYWRQbGFpbnRleHRJZF0ucmVhZChsZW5ndGgpOwogICAgX3NjaGVkdWxlRmlsdGVyKCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gV3JpdGUgdGhlIGRhdGEgdG8gdGhlIHNvY2tldCwgYW5kIHNjaGVkdWxlIHRoZSBmaWx0ZXIgdG8gZW5jcnlwdCBpdC4KICBpbnQgd3JpdGUoTGlzdDxpbnQ+IGRhdGEsIFtpbnQgb2Zmc2V0LCBpbnQgYnl0ZXNdKSB7CiAgICBpZiAoYnl0ZXMgIT0gbnVsbCAmJiAoYnl0ZXMgaXMhIGludCB8fCBieXRlcyA8IDApKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgIkludmFsaWQgYnl0ZXMgcGFyYW1ldGVyIGluIFNlY3VyZVNvY2tldC5yZWFkIChieXRlczogJGJ5dGVzKSIpOwogICAgfQogICAgaWYgKG9mZnNldCAhPSBudWxsICYmIChvZmZzZXQgaXMhIGludCB8fCBvZmZzZXQgPCAwKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigKICAgICAgICAgICJJbnZhbGlkIG9mZnNldCBwYXJhbWV0ZXIgaW4gU2VjdXJlU29ja2V0LnJlYWQgKG9mZnNldDogJG9mZnNldCkiKTsKICAgIH0KICAgIGlmIChfY2xvc2VkV3JpdGUpIHsKICAgICAgX2NvbnRyb2xsZXIuYWRkRXJyb3IobmV3IFNvY2tldEV4Y2VwdGlvbigiV3JpdGluZyB0byBhIGNsb3NlZCBzb2NrZXQiKSk7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgaWYgKF9zdGF0dXMgIT0gY29ubmVjdGVkU3RhdHVzKSByZXR1cm4gMDsKICAgIG9mZnNldCA/Pz0gMDsKICAgIGJ5dGVzID8/PSBkYXRhLmxlbmd0aCAtIG9mZnNldDsKCiAgICBpbnQgd3JpdHRlbiA9CiAgICAgICAgX3NlY3VyZUZpbHRlci5idWZmZXJzW3dyaXRlUGxhaW50ZXh0SWRdLndyaXRlKGRhdGEsIG9mZnNldCwgYnl0ZXMpOwogICAgaWYgKHdyaXR0ZW4gPiAwKSB7CiAgICAgIF9maWx0ZXJTdGF0dXMud3JpdGVFbXB0eSA9IGZhbHNlOwogICAgfQogICAgX3NjaGVkdWxlRmlsdGVyKCk7CiAgICByZXR1cm4gd3JpdHRlbjsKICB9CgogIFg1MDlDZXJ0aWZpY2F0ZSBnZXQgcGVlckNlcnRpZmljYXRlID0+IF9zZWN1cmVGaWx0ZXIucGVlckNlcnRpZmljYXRlOwoKICBTdHJpbmcgZ2V0IHNlbGVjdGVkUHJvdG9jb2wgPT4gX3NlbGVjdGVkUHJvdG9jb2w7CgogIGJvb2wgX29uQmFkQ2VydGlmaWNhdGVXcmFwcGVyKFg1MDlDZXJ0aWZpY2F0ZSBjZXJ0aWZpY2F0ZSkgewogICAgaWYgKG9uQmFkQ2VydGlmaWNhdGUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgdmFyIHJlc3VsdCA9IG9uQmFkQ2VydGlmaWNhdGUoY2VydGlmaWNhdGUpOwogICAgaWYgKHJlc3VsdCBpcyBib29sKSByZXR1cm4gcmVzdWx0OwogICAgdGhyb3cgbmV3IEhhbmRzaGFrZUV4Y2VwdGlvbigKICAgICAgICAib25CYWRDZXJ0aWZpY2F0ZSBjYWxsYmFjayByZXR1cm5lZCBub24tYm9vbGVhbiAkcmVzdWx0Iik7CiAgfQoKICBib29sIHNldE9wdGlvbihTb2NrZXRPcHRpb24gb3B0aW9uLCBib29sIGVuYWJsZWQpIHsKICAgIGlmIChfc29ja2V0ID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBfc29ja2V0LnNldE9wdGlvbihvcHRpb24sIGVuYWJsZWQpOwogIH0KCiAgVWludDhMaXN0IGdldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKSB7CiAgICByZXR1cm4gX3NvY2tldD8uZ2V0UmF3T3B0aW9uKG9wdGlvbik7CiAgfQoKICB2b2lkIHNldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKSB7CiAgICBfc29ja2V0Py5zZXRSYXdPcHRpb24ob3B0aW9uKTsKICB9CgogIHZvaWQgX2V2ZW50RGlzcGF0Y2hlcihSYXdTb2NrZXRFdmVudCBldmVudCkgewogICAgdHJ5IHsKICAgICAgaWYgKGV2ZW50ID09IFJhd1NvY2tldEV2ZW50LnJlYWQpIHsKICAgICAgICBfcmVhZEhhbmRsZXIoKTsKICAgICAgfSBlbHNlIGlmIChldmVudCA9PSBSYXdTb2NrZXRFdmVudC53cml0ZSkgewogICAgICAgIF93cml0ZUhhbmRsZXIoKTsKICAgICAgfSBlbHNlIGlmIChldmVudCA9PSBSYXdTb2NrZXRFdmVudC5yZWFkQ2xvc2VkKSB7CiAgICAgICAgX2Nsb3NlSGFuZGxlcigpOwogICAgICB9CiAgICB9IGNhdGNoIChlLCBzdGFja1RyYWNlKSB7CiAgICAgIF9yZXBvcnRFcnJvcihlLCBzdGFja1RyYWNlKTsKICAgIH0KICB9CgogIHZvaWQgX3JlYWRIYW5kbGVyKCkgewogICAgX3JlYWRTb2NrZXQoKTsKICAgIF9zY2hlZHVsZUZpbHRlcigpOwogIH0KCiAgdm9pZCBfd3JpdGVIYW5kbGVyKCkgewogICAgX3dyaXRlU29ja2V0KCk7CiAgICBfc2NoZWR1bGVGaWx0ZXIoKTsKICB9CgogIHZvaWQgX2RvbmVIYW5kbGVyKCkgewogICAgaWYgKF9maWx0ZXJTdGF0dXMucmVhZEVtcHR5KSB7CiAgICAgIF9jbG9zZSgpOwogICAgfQogIH0KCiAgdm9pZCBfcmVwb3J0RXJyb3IoZSwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIGlmIChfc3RhdHVzID09IGNsb3NlZFN0YXR1cykgewogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYgKF9jb25uZWN0UGVuZGluZykgewogICAgICAvLyBfY29ubmVjdFBlbmRpbmcgaXMgdHJ1ZSB1bnRpbCB0aGUgaGFuZHNoYWtlIGhhcyBjb21wbGV0ZWQsIGFuZCB0aGUKICAgICAgLy8gX2hhbmRzaGFrZUNvbXBsZXRlIGZ1dHVyZSByZXR1cm5lZCBmcm9tIFNlY3VyZVNvY2tldC5jb25uZWN0IGhhcwogICAgICAvLyBjb21wbGV0ZWQuICBCZWZvcmUgdGhpcyBwb2ludCwgd2UgbXVzdCBjb21wbGV0ZSBpdCB3aXRoIGFuIGVycm9yLgogICAgICBfaGFuZHNoYWtlQ29tcGxldGUuY29tcGxldGVFcnJvcihlLCBzdGFja1RyYWNlKTsKICAgIH0gZWxzZSB7CiAgICAgIF9jb250cm9sbGVyLmFkZEVycm9yKGUsIHN0YWNrVHJhY2UpOwogICAgfQogICAgX2Nsb3NlKCk7CiAgfQoKICB2b2lkIF9jbG9zZUhhbmRsZXIoKSB7CiAgICBpZiAoX3N0YXR1cyA9PSBjb25uZWN0ZWRTdGF0dXMpIHsKICAgICAgaWYgKF9jbG9zZWRSZWFkKSByZXR1cm47CiAgICAgIF9zb2NrZXRDbG9zZWRSZWFkID0gdHJ1ZTsKICAgICAgaWYgKF9maWx0ZXJTdGF0dXMucmVhZEVtcHR5KSB7CiAgICAgICAgX2Nsb3NlZFJlYWQgPSB0cnVlOwogICAgICAgIF9jb250cm9sbGVyLmFkZChSYXdTb2NrZXRFdmVudC5yZWFkQ2xvc2VkKTsKICAgICAgICBpZiAoX3NvY2tldENsb3NlZFdyaXRlKSB7CiAgICAgICAgICBfY2xvc2UoKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3NjaGVkdWxlRmlsdGVyKCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoX3N0YXR1cyA9PSBoYW5kc2hha2VTdGF0dXMpIHsKICAgICAgX3NvY2tldENsb3NlZFJlYWQgPSB0cnVlOwogICAgICBpZiAoX2ZpbHRlclN0YXR1cy5yZWFkRW1wdHkpIHsKICAgICAgICBfcmVwb3J0RXJyb3IoCiAgICAgICAgICAgIG5ldyBIYW5kc2hha2VFeGNlcHRpb24oJ0Nvbm5lY3Rpb24gdGVybWluYXRlZCBkdXJpbmcgaGFuZHNoYWtlJyksCiAgICAgICAgICAgIG51bGwpOwogICAgICB9IGVsc2UgewogICAgICAgIF9zZWN1cmVIYW5kc2hha2UoKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfc2VjdXJlSGFuZHNoYWtlKCkgewogICAgdHJ5IHsKICAgICAgX3NlY3VyZUZpbHRlci5oYW5kc2hha2UoKTsKICAgICAgX2ZpbHRlclN0YXR1cy53cml0ZUVtcHR5ID0gZmFsc2U7CiAgICAgIF9yZWFkU29ja2V0KCk7CiAgICAgIF93cml0ZVNvY2tldCgpOwogICAgICBfc2NoZWR1bGVGaWx0ZXIoKTsKICAgIH0gY2F0Y2ggKGUsIHN0YWNrVHJhY2UpIHsKICAgICAgX3JlcG9ydEVycm9yKGUsIHN0YWNrVHJhY2UpOwogICAgfQogIH0KCiAgdm9pZCByZW5lZ290aWF0ZSgKICAgICAge2Jvb2wgdXNlU2Vzc2lvbkNhY2hlOiB0cnVlLAogICAgICBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZTogZmFsc2UsCiAgICAgIGJvb2wgcmVxdWlyZUNsaWVudENlcnRpZmljYXRlOiBmYWxzZX0pIHsKICAgIGlmIChfc3RhdHVzICE9IGNvbm5lY3RlZFN0YXR1cykgewogICAgICB0aHJvdyBuZXcgSGFuZHNoYWtlRXhjZXB0aW9uKAogICAgICAgICAgIkNhbGxlZCByZW5lZ290aWF0ZSBvbiBhIG5vbi1jb25uZWN0ZWQgc29ja2V0Iik7CiAgICB9CiAgICBfc2VjdXJlRmlsdGVyLnJlbmVnb3RpYXRlKAogICAgICAgIHVzZVNlc3Npb25DYWNoZSwgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUpOwogICAgX3N0YXR1cyA9IGhhbmRzaGFrZVN0YXR1czsKICAgIF9maWx0ZXJTdGF0dXMud3JpdGVFbXB0eSA9IGZhbHNlOwogICAgX3NjaGVkdWxlRmlsdGVyKCk7CiAgfQoKICB2b2lkIF9zZWN1cmVIYW5kc2hha2VDb21wbGV0ZUhhbmRsZXIoKSB7CiAgICBfc3RhdHVzID0gY29ubmVjdGVkU3RhdHVzOwogICAgaWYgKF9jb25uZWN0UGVuZGluZykgewogICAgICBfY29ubmVjdFBlbmRpbmcgPSBmYWxzZTsKICAgICAgdHJ5IHsKICAgICAgICBfc2VsZWN0ZWRQcm90b2NvbCA9IF9zZWN1cmVGaWx0ZXIuc2VsZWN0ZWRQcm90b2NvbCgpOwogICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdXNlciBjb2RlIHRvIHJ1biBzeW5jaHJvbm91c2x5IGluIHRoaXMgY2FsbGJhY2suCiAgICAgICAgVGltZXIucnVuKCgpID0+IF9oYW5kc2hha2VDb21wbGV0ZS5jb21wbGV0ZSh0aGlzKSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yLCBzdGFjaykgewogICAgICAgIF9oYW5kc2hha2VDb21wbGV0ZS5jb21wbGV0ZUVycm9yKGVycm9yLCBzdGFjayk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX29uUGF1c2VTdGF0ZUNoYW5nZSgpIHsKICAgIGlmIChfY29udHJvbGxlci5pc1BhdXNlZCkgewogICAgICBfcGF1c2VDb3VudCsrOwogICAgfSBlbHNlIHsKICAgICAgX3BhdXNlQ291bnQtLTsKICAgICAgaWYgKF9wYXVzZUNvdW50ID09IDApIHsKICAgICAgICBfc2NoZWR1bGVSZWFkRXZlbnQoKTsKICAgICAgICBfc2VuZFdyaXRlRXZlbnQoKTsgLy8gQ2FuIHNlbmQgZXZlbnQgc3luY2hyb25vdXNseS4KICAgICAgfQogICAgfQoKICAgIGlmICghX3NvY2tldENsb3NlZFJlYWQgfHwgIV9zb2NrZXRDbG9zZWRXcml0ZSkgewogICAgICBpZiAoX2NvbnRyb2xsZXIuaXNQYXVzZWQpIHsKICAgICAgICBfc29ja2V0U3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX3NvY2tldFN1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgICAgfQogICAgfQogIH0KCiAgdm9pZCBfb25TdWJzY3JpcHRpb25TdGF0ZUNoYW5nZSgpIHsKICAgIGlmIChfY29udHJvbGxlci5oYXNMaXN0ZW5lcikgewogICAgICAvLyBUT0RPKGFqb2huc2VuKTogRG8gc29tZXRoaW5nIGhlcmU/CiAgICB9CiAgfQoKICB2b2lkIF9zY2hlZHVsZUZpbHRlcigpIHsKICAgIF9maWx0ZXJQZW5kaW5nID0gdHJ1ZTsKICAgIF90cnlGaWx0ZXIoKTsKICB9CgogIHZvaWQgX3RyeUZpbHRlcigpIHsKICAgIGlmIChfc3RhdHVzID09IGNsb3NlZFN0YXR1cykgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoX2ZpbHRlclBlbmRpbmcgJiYgIV9maWx0ZXJBY3RpdmUpIHsKICAgICAgX2ZpbHRlckFjdGl2ZSA9IHRydWU7CiAgICAgIF9maWx0ZXJQZW5kaW5nID0gZmFsc2U7CiAgICAgIF9wdXNoQWxsRmlsdGVyU3RhZ2VzKCkudGhlbigoc3RhdHVzKSB7CiAgICAgICAgX2ZpbHRlclN0YXR1cyA9IHN0YXR1czsKICAgICAgICBfZmlsdGVyQWN0aXZlID0gZmFsc2U7CiAgICAgICAgaWYgKF9zdGF0dXMgPT0gY2xvc2VkU3RhdHVzKSB7CiAgICAgICAgICBfc2VjdXJlRmlsdGVyLmRlc3Ryb3koKTsKICAgICAgICAgIF9zZWN1cmVGaWx0ZXIgPSBudWxsOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBfc29ja2V0LnJlYWRFdmVudHNFbmFibGVkID0gdHJ1ZTsKICAgICAgICBpZiAoX2ZpbHRlclN0YXR1cy53cml0ZUVtcHR5ICYmIF9jbG9zZWRXcml0ZSAmJiAhX3NvY2tldENsb3NlZFdyaXRlKSB7CiAgICAgICAgICAvLyBDaGVja3MgZm9yIGFuZCBoYW5kbGVzIGFsbCBjYXNlcyBvZiBwYXJ0aWFsbHkgY2xvc2VkIHNvY2tldHMuCiAgICAgICAgICBzaHV0ZG93bihTb2NrZXREaXJlY3Rpb24uc2VuZCk7CiAgICAgICAgICBpZiAoX3N0YXR1cyA9PSBjbG9zZWRTdGF0dXMpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoX2ZpbHRlclN0YXR1cy5yZWFkRW1wdHkgJiYgX3NvY2tldENsb3NlZFJlYWQgJiYgIV9jbG9zZWRSZWFkKSB7CiAgICAgICAgICBpZiAoX3N0YXR1cyA9PSBoYW5kc2hha2VTdGF0dXMpIHsKICAgICAgICAgICAgX3NlY3VyZUZpbHRlci5oYW5kc2hha2UoKTsKICAgICAgICAgICAgaWYgKF9zdGF0dXMgPT0gaGFuZHNoYWtlU3RhdHVzKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEhhbmRzaGFrZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgJ0Nvbm5lY3Rpb24gdGVybWluYXRlZCBkdXJpbmcgaGFuZHNoYWtlJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIF9jbG9zZUhhbmRsZXIoKTsKICAgICAgICB9CiAgICAgICAgaWYgKF9zdGF0dXMgPT0gY2xvc2VkU3RhdHVzKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChfZmlsdGVyU3RhdHVzLnByb2dyZXNzKSB7CiAgICAgICAgICBfZmlsdGVyUGVuZGluZyA9IHRydWU7CiAgICAgICAgICBpZiAoX2ZpbHRlclN0YXR1cy53cml0ZUVuY3J5cHRlZE5vTG9uZ2VyRW1wdHkpIHsKICAgICAgICAgICAgX3dyaXRlU29ja2V0KCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX2ZpbHRlclN0YXR1cy53cml0ZVBsYWludGV4dE5vTG9uZ2VyRnVsbCkgewogICAgICAgICAgICBfc2VuZFdyaXRlRXZlbnQoKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfZmlsdGVyU3RhdHVzLnJlYWRFbmNyeXB0ZWROb0xvbmdlckZ1bGwpIHsKICAgICAgICAgICAgX3JlYWRTb2NrZXQoKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChfZmlsdGVyU3RhdHVzLnJlYWRQbGFpbnRleHROb0xvbmdlckVtcHR5KSB7CiAgICAgICAgICAgIF9zY2hlZHVsZVJlYWRFdmVudCgpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9zdGF0dXMgPT0gaGFuZHNoYWtlU3RhdHVzKSB7CiAgICAgICAgICAgIF9zZWN1cmVIYW5kc2hha2UoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX3RyeUZpbHRlcigpOwogICAgICB9KS5jYXRjaEVycm9yKF9yZXBvcnRFcnJvcik7CiAgICB9CiAgfQoKICBMaXN0PGludD4gX3JlYWRTb2NrZXRPckJ1ZmZlcmVkRGF0YShpbnQgYnl0ZXMpIHsKICAgIGlmIChfYnVmZmVyZWREYXRhICE9IG51bGwpIHsKICAgICAgaWYgKGJ5dGVzID4gX2J1ZmZlcmVkRGF0YS5sZW5ndGggLSBfYnVmZmVyZWREYXRhSW5kZXgpIHsKICAgICAgICBieXRlcyA9IF9idWZmZXJlZERhdGEubGVuZ3RoIC0gX2J1ZmZlcmVkRGF0YUluZGV4OwogICAgICB9CiAgICAgIHZhciByZXN1bHQgPQogICAgICAgICAgX2J1ZmZlcmVkRGF0YS5zdWJsaXN0KF9idWZmZXJlZERhdGFJbmRleCwgX2J1ZmZlcmVkRGF0YUluZGV4ICsgYnl0ZXMpOwogICAgICBfYnVmZmVyZWREYXRhSW5kZXggKz0gYnl0ZXM7CiAgICAgIGlmIChfYnVmZmVyZWREYXRhLmxlbmd0aCA9PSBfYnVmZmVyZWREYXRhSW5kZXgpIHsKICAgICAgICBfYnVmZmVyZWREYXRhID0gbnVsbDsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfSBlbHNlIGlmICghX3NvY2tldENsb3NlZFJlYWQpIHsKICAgICAgcmV0dXJuIF9zb2NrZXQucmVhZChieXRlcyk7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIHZvaWQgX3JlYWRTb2NrZXQoKSB7CiAgICBpZiAoX3N0YXR1cyA9PSBjbG9zZWRTdGF0dXMpIHJldHVybjsKICAgIHZhciBidWZmZXIgPSBfc2VjdXJlRmlsdGVyLmJ1ZmZlcnNbcmVhZEVuY3J5cHRlZElkXTsKICAgIGlmIChidWZmZXIud3JpdGVGcm9tU291cmNlKF9yZWFkU29ja2V0T3JCdWZmZXJlZERhdGEpID4gMCkgewogICAgICBfZmlsdGVyU3RhdHVzLnJlYWRFbXB0eSA9IGZhbHNlOwogICAgfSBlbHNlIHsKICAgICAgX3NvY2tldC5yZWFkRXZlbnRzRW5hYmxlZCA9IGZhbHNlOwogICAgfQogIH0KCiAgdm9pZCBfd3JpdGVTb2NrZXQoKSB7CiAgICBpZiAoX3NvY2tldENsb3NlZFdyaXRlKSByZXR1cm47CiAgICB2YXIgYnVmZmVyID0gX3NlY3VyZUZpbHRlci5idWZmZXJzW3dyaXRlRW5jcnlwdGVkSWRdOwogICAgaWYgKGJ1ZmZlci5yZWFkVG9Tb2NrZXQoX3NvY2tldCkpIHsKICAgICAgLy8gUmV0dXJucyB0cnVlIGlmIGJsb2NrZWQKICAgICAgX3NvY2tldC53cml0ZUV2ZW50c0VuYWJsZWQgPSB0cnVlOwogICAgfQogIH0KCiAgLy8gSWYgYSByZWFkIGV2ZW50IHNob3VsZCBiZSBzZW50LCBhZGQgaXQgdG8gdGhlIGNvbnRyb2xsZXIuCiAgX3NjaGVkdWxlUmVhZEV2ZW50KCkgewogICAgaWYgKCFfcGVuZGluZ1JlYWRFdmVudCAmJgogICAgICAgIF9yZWFkRXZlbnRzRW5hYmxlZCAmJgogICAgICAgIF9wYXVzZUNvdW50ID09IDAgJiYKICAgICAgICBfc2VjdXJlRmlsdGVyICE9IG51bGwgJiYKICAgICAgICAhX3NlY3VyZUZpbHRlci5idWZmZXJzW3JlYWRQbGFpbnRleHRJZF0uaXNFbXB0eSkgewogICAgICBfcGVuZGluZ1JlYWRFdmVudCA9IHRydWU7CiAgICAgIFRpbWVyLnJ1bihfc2VuZFJlYWRFdmVudCk7CiAgICB9CiAgfQoKICBfc2VuZFJlYWRFdmVudCgpIHsKICAgIF9wZW5kaW5nUmVhZEV2ZW50ID0gZmFsc2U7CiAgICBpZiAoX3N0YXR1cyAhPSBjbG9zZWRTdGF0dXMgJiYKICAgICAgICBfcmVhZEV2ZW50c0VuYWJsZWQgJiYKICAgICAgICBfcGF1c2VDb3VudCA9PSAwICYmCiAgICAgICAgX3NlY3VyZUZpbHRlciAhPSBudWxsICYmCiAgICAgICAgIV9zZWN1cmVGaWx0ZXIuYnVmZmVyc1tyZWFkUGxhaW50ZXh0SWRdLmlzRW1wdHkpIHsKICAgICAgX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LnJlYWQpOwogICAgICBfc2NoZWR1bGVSZWFkRXZlbnQoKTsKICAgIH0KICB9CgogIC8vIElmIGEgd3JpdGUgZXZlbnQgc2hvdWxkIGJlIHNlbnQsIGFkZCBpdCB0byB0aGUgY29udHJvbGxlci4KICBfc2VuZFdyaXRlRXZlbnQoKSB7CiAgICBpZiAoIV9jbG9zZWRXcml0ZSAmJgogICAgICAgIF93cml0ZUV2ZW50c0VuYWJsZWQgJiYKICAgICAgICBfcGF1c2VDb3VudCA9PSAwICYmCiAgICAgICAgX3NlY3VyZUZpbHRlciAhPSBudWxsICYmCiAgICAgICAgX3NlY3VyZUZpbHRlci5idWZmZXJzW3dyaXRlUGxhaW50ZXh0SWRdLmZyZWUgPiAwKSB7CiAgICAgIF93cml0ZUV2ZW50c0VuYWJsZWQgPSBmYWxzZTsKICAgICAgX2NvbnRyb2xsZXIuYWRkKFJhd1NvY2tldEV2ZW50LndyaXRlKTsKICAgIH0KICB9CgogIEZ1dHVyZTxfRmlsdGVyU3RhdHVzPiBfcHVzaEFsbEZpbHRlclN0YWdlcygpIHsKICAgIGJvb2wgd2FzSW5IYW5kc2hha2UgPSBfc3RhdHVzICE9IGNvbm5lY3RlZFN0YXR1czsKICAgIExpc3QgYXJncyA9IG5ldyBMaXN0KDIgKyBidWZmZXJDb3VudCAqIDIpOwogICAgYXJnc1swXSA9IF9zZWN1cmVGaWx0ZXIuX3BvaW50ZXIoKTsKICAgIGFyZ3NbMV0gPSB3YXNJbkhhbmRzaGFrZTsKICAgIHZhciBidWZzID0gX3NlY3VyZUZpbHRlci5idWZmZXJzOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZmZXJDb3VudDsgKytpKSB7CiAgICAgIGFyZ3NbMiAqIGkgKyAyXSA9IGJ1ZnNbaV0uc3RhcnQ7CiAgICAgIGFyZ3NbMiAqIGkgKyAzXSA9IGJ1ZnNbaV0uZW5kOwogICAgfQoKICAgIHJldHVybiBfSU9TZXJ2aWNlLl9kaXNwYXRjaChfSU9TZXJ2aWNlLnNzbFByb2Nlc3NGaWx0ZXIsIGFyZ3MpCiAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSB7CiAgICAgIGlmIChyZXNwb25zZS5sZW5ndGggPT0gMikgewogICAgICAgIGlmICh3YXNJbkhhbmRzaGFrZSkgewogICAgICAgICAgLy8gSWYgd2UncmUgaW4gaGFuZHNoYWtlLCB0aHJvdyBhIGhhbmRzaGFrZSBlcnJvci4KICAgICAgICAgIF9yZXBvcnRFcnJvcigKICAgICAgICAgICAgICBuZXcgSGFuZHNoYWtlRXhjZXB0aW9uKCcke3Jlc3BvbnNlWzFdfSBlcnJvciAke3Jlc3BvbnNlWzBdfScpLAogICAgICAgICAgICAgIG51bGwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBJZiB3ZSdyZSBjb25uZWN0ZWQsIHRocm93IGEgVExTIGVycm9yLgogICAgICAgICAgX3JlcG9ydEVycm9yKAogICAgICAgICAgICAgIG5ldyBUbHNFeGNlcHRpb24oJyR7cmVzcG9uc2VbMV19IGVycm9yICR7cmVzcG9uc2VbMF19JyksIG51bGwpOwogICAgICAgIH0KICAgICAgfQogICAgICBpbnQgc3RhcnQoaW50IGluZGV4KSA9PiByZXNwb25zZVsyICogaW5kZXhdOwogICAgICBpbnQgZW5kKGludCBpbmRleCkgPT4gcmVzcG9uc2VbMiAqIGluZGV4ICsgMV07CgogICAgICBfRmlsdGVyU3RhdHVzIHN0YXR1cyA9IG5ldyBfRmlsdGVyU3RhdHVzKCk7CiAgICAgIC8vIENvbXB1dGUgd3JpdGVFbXB0eSBhcyAid3JpdGUgcGxhaW50ZXh0IGJ1ZmZlciBhbmQgd3JpdGUgZW5jcnlwdGVkCiAgICAgIC8vIGJ1ZmZlciB3ZXJlIGVtcHR5IHdoZW4gd2Ugc3RhcnRlZCBhbmQgYXJlIGVtcHR5IG5vdyIuCiAgICAgIHN0YXR1cy53cml0ZUVtcHR5ID0gYnVmc1t3cml0ZVBsYWludGV4dElkXS5pc0VtcHR5ICYmCiAgICAgICAgICBzdGFydCh3cml0ZUVuY3J5cHRlZElkKSA9PSBlbmQod3JpdGVFbmNyeXB0ZWRJZCk7CiAgICAgIC8vIElmIHdlIHdlcmUgaW4gaGFuZHNoYWtlIHdoZW4gdGhpcyBzdGFydGVkLCBfd3JpdGVFbXB0eSBtYXkgYmUgZmFsc2UKICAgICAgLy8gYmVjYXVzZSB0aGUgaGFuZHNoYWtlIHdyb3RlIGRhdGEgYWZ0ZXIgd2UgY2hlY2tlZC4KICAgICAgaWYgKHdhc0luSGFuZHNoYWtlKSBzdGF0dXMud3JpdGVFbXB0eSA9IGZhbHNlOwoKICAgICAgLy8gQ29tcHV0ZSByZWFkRW1wdHkgYXMgImJvdGggcmVhZCBidWZmZXJzIHdlcmUgZW1wdHkgd2hlbiB3ZSBzdGFydGVkCiAgICAgIC8vIGFuZCBhcmUgZW1wdHkgbm93Ii4KICAgICAgc3RhdHVzLnJlYWRFbXB0eSA9IGJ1ZnNbcmVhZEVuY3J5cHRlZElkXS5pc0VtcHR5ICYmCiAgICAgICAgICBzdGFydChyZWFkUGxhaW50ZXh0SWQpID09IGVuZChyZWFkUGxhaW50ZXh0SWQpOwoKICAgICAgX0V4dGVybmFsQnVmZmVyIGJ1ZmZlciA9IGJ1ZnNbd3JpdGVQbGFpbnRleHRJZF07CiAgICAgIGludCBuZXdfc3RhcnQgPSBzdGFydCh3cml0ZVBsYWludGV4dElkKTsKICAgICAgaWYgKG5ld19zdGFydCAhPSBidWZmZXIuc3RhcnQpIHsKICAgICAgICBzdGF0dXMucHJvZ3Jlc3MgPSB0cnVlOwogICAgICAgIGlmIChidWZmZXIuZnJlZSA9PSAwKSB7CiAgICAgICAgICBzdGF0dXMud3JpdGVQbGFpbnRleHROb0xvbmdlckZ1bGwgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBidWZmZXIuc3RhcnQgPSBuZXdfc3RhcnQ7CiAgICAgIH0KICAgICAgYnVmZmVyID0gYnVmc1tyZWFkRW5jcnlwdGVkSWRdOwogICAgICBuZXdfc3RhcnQgPSBzdGFydChyZWFkRW5jcnlwdGVkSWQpOwogICAgICBpZiAobmV3X3N0YXJ0ICE9IGJ1ZmZlci5zdGFydCkgewogICAgICAgIHN0YXR1cy5wcm9ncmVzcyA9IHRydWU7CiAgICAgICAgaWYgKGJ1ZmZlci5mcmVlID09IDApIHsKICAgICAgICAgIHN0YXR1cy5yZWFkRW5jcnlwdGVkTm9Mb25nZXJGdWxsID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgYnVmZmVyLnN0YXJ0ID0gbmV3X3N0YXJ0OwogICAgICB9CiAgICAgIGJ1ZmZlciA9IGJ1ZnNbd3JpdGVFbmNyeXB0ZWRJZF07CiAgICAgIGludCBuZXdfZW5kID0gZW5kKHdyaXRlRW5jcnlwdGVkSWQpOwogICAgICBpZiAobmV3X2VuZCAhPSBidWZmZXIuZW5kKSB7CiAgICAgICAgc3RhdHVzLnByb2dyZXNzID0gdHJ1ZTsKICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICBzdGF0dXMud3JpdGVFbmNyeXB0ZWROb0xvbmdlckVtcHR5ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgYnVmZmVyLmVuZCA9IG5ld19lbmQ7CiAgICAgIH0KICAgICAgYnVmZmVyID0gYnVmc1tyZWFkUGxhaW50ZXh0SWRdOwogICAgICBuZXdfZW5kID0gZW5kKHJlYWRQbGFpbnRleHRJZCk7CiAgICAgIGlmIChuZXdfZW5kICE9IGJ1ZmZlci5lbmQpIHsKICAgICAgICBzdGF0dXMucHJvZ3Jlc3MgPSB0cnVlOwogICAgICAgIGlmIChidWZmZXIubGVuZ3RoID09IDApIHsKICAgICAgICAgIHN0YXR1cy5yZWFkUGxhaW50ZXh0Tm9Mb25nZXJFbXB0eSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGJ1ZmZlci5lbmQgPSBuZXdfZW5kOwogICAgICB9CiAgICAgIHJldHVybiBzdGF0dXM7CiAgICB9KTsKICB9Cn0KCi8qKgogKiBBIGNpcmN1bGFyIGJ1ZmZlciBiYWNrZWQgYnkgYW4gZXh0ZXJuYWwgYnl0ZSBhcnJheS4gIEFjY2Vzc2VkIGZyb20KICogYm90aCBDKysgYW5kIERhcnQgY29kZSBpbiBhbiB1bnN5bmNocm9uaXplZCB3YXksIHdpdGggb25lIHJlYWRpbmcKICogYW5kIG9uZSB3cml0aW5nLiAgQWxsIHVwZGF0ZXMgdG8gc3RhcnQgYW5kIGVuZCBhcmUgZG9uZSBieSBEYXJ0IGNvZGUuCiAqLwpjbGFzcyBfRXh0ZXJuYWxCdWZmZXIgewogIC8vIFRoaXMgd2lsbCBiZSBhbiBFeHRlcm5hbEJ5dGVBcnJheSwgYmFja2VkIGJ5IEMgYWxsb2NhdGVkIGRhdGEuCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAic2V0IikKICBMaXN0PGludD4gZGF0YTsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGludCBzdGFydDsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGludCBlbmQ7CgogIGZpbmFsIHNpemU7CgogIF9FeHRlcm5hbEJ1ZmZlcih0aGlzLnNpemUpIHsKICAgIHN0YXJ0ID0gZW5kID0gc2l6ZSB+LyAyOwogIH0KCiAgdm9pZCBhZHZhbmNlU3RhcnQoaW50IGJ5dGVzKSB7CiAgICBhc3NlcnQoc3RhcnQgPiBlbmQgfHwgc3RhcnQgKyBieXRlcyA8PSBlbmQpOwogICAgc3RhcnQgKz0gYnl0ZXM7CiAgICBpZiAoc3RhcnQgPj0gc2l6ZSkgewogICAgICBzdGFydCAtPSBzaXplOwogICAgICBhc3NlcnQoc3RhcnQgPD0gZW5kKTsKICAgICAgYXNzZXJ0KHN0YXJ0IDwgc2l6ZSk7CiAgICB9CiAgfQoKICB2b2lkIGFkdmFuY2VFbmQoaW50IGJ5dGVzKSB7CiAgICBhc3NlcnQoc3RhcnQgPD0gZW5kIHx8IHN0YXJ0ID4gZW5kICsgYnl0ZXMpOwogICAgZW5kICs9IGJ5dGVzOwogICAgaWYgKGVuZCA+PSBzaXplKSB7CiAgICAgIGVuZCAtPSBzaXplOwogICAgICBhc3NlcnQoZW5kIDwgc3RhcnQpOwogICAgICBhc3NlcnQoZW5kIDwgc2l6ZSk7CiAgICB9CiAgfQoKICBib29sIGdldCBpc0VtcHR5ID0+IGVuZCA9PSBzdGFydDsKCiAgaW50IGdldCBsZW5ndGggPT4gc3RhcnQgPiBlbmQgPyBzaXplICsgZW5kIC0gc3RhcnQgOiBlbmQgLSBzdGFydDsKCiAgaW50IGdldCBsaW5lYXJMZW5ndGggPT4gc3RhcnQgPiBlbmQgPyBzaXplIC0gc3RhcnQgOiBlbmQgLSBzdGFydDsKCiAgaW50IGdldCBmcmVlID0+IHN0YXJ0ID4gZW5kID8gc3RhcnQgLSBlbmQgLSAxIDogc2l6ZSArIHN0YXJ0IC0gZW5kIC0gMTsKCiAgaW50IGdldCBsaW5lYXJGcmVlIHsKICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIHN0YXJ0IC0gZW5kIC0gMTsKICAgIGlmIChzdGFydCA9PSAwKSByZXR1cm4gc2l6ZSAtIGVuZCAtIDE7CiAgICByZXR1cm4gc2l6ZSAtIGVuZDsKICB9CgogIFVpbnQ4TGlzdCByZWFkKGludCBieXRlcykgewogICAgaWYgKGJ5dGVzID09IG51bGwpIHsKICAgICAgYnl0ZXMgPSBsZW5ndGg7CiAgICB9IGVsc2UgewogICAgICBieXRlcyA9IG1pbihieXRlcywgbGVuZ3RoKTsKICAgIH0KICAgIGlmIChieXRlcyA9PSAwKSByZXR1cm4gbnVsbDsKICAgIFVpbnQ4TGlzdCByZXN1bHQgPSBuZXcgVWludDhMaXN0KGJ5dGVzKTsKICAgIGludCBieXRlc1JlYWQgPSAwOwogICAgLy8gTG9vcCBvdmVyIHplcm8sIG9uZSwgb3IgdHdvIGxpbmVhciBkYXRhIHJhbmdlcy4KICAgIHdoaWxlIChieXRlc1JlYWQgPCBieXRlcykgewogICAgICBpbnQgdG9SZWFkID0gbWluKGJ5dGVzIC0gYnl0ZXNSZWFkLCBsaW5lYXJMZW5ndGgpOwogICAgICByZXN1bHQuc2V0UmFuZ2UoYnl0ZXNSZWFkLCBieXRlc1JlYWQgKyB0b1JlYWQsIGRhdGEsIHN0YXJ0KTsKICAgICAgYWR2YW5jZVN0YXJ0KHRvUmVhZCk7CiAgICAgIGJ5dGVzUmVhZCArPSB0b1JlYWQ7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgaW50IHdyaXRlKExpc3Q8aW50PiBpbnB1dERhdGEsIGludCBvZmZzZXQsIGludCBieXRlcykgewogICAgaWYgKGJ5dGVzID4gZnJlZSkgewogICAgICBieXRlcyA9IGZyZWU7CiAgICB9CiAgICBpbnQgd3JpdHRlbiA9IDA7CiAgICBpbnQgdG9Xcml0ZSA9IG1pbihieXRlcywgbGluZWFyRnJlZSk7CiAgICAvLyBMb29wIG92ZXIgemVybywgb25lLCBvciB0d28gbGluZWFyIGRhdGEgcmFuZ2VzLgogICAgd2hpbGUgKHRvV3JpdGUgPiAwKSB7CiAgICAgIGRhdGEuc2V0UmFuZ2UoZW5kLCBlbmQgKyB0b1dyaXRlLCBpbnB1dERhdGEsIG9mZnNldCk7CiAgICAgIGFkdmFuY2VFbmQodG9Xcml0ZSk7CiAgICAgIG9mZnNldCArPSB0b1dyaXRlOwogICAgICB3cml0dGVuICs9IHRvV3JpdGU7CiAgICAgIHRvV3JpdGUgPSBtaW4oYnl0ZXMgLSB3cml0dGVuLCBsaW5lYXJGcmVlKTsKICAgIH0KICAgIHJldHVybiB3cml0dGVuOwogIH0KCiAgaW50IHdyaXRlRnJvbVNvdXJjZShMaXN0PGludD4gZ2V0RGF0YShpbnQgcmVxdWVzdGVkKSkgewogICAgaW50IHdyaXR0ZW4gPSAwOwogICAgaW50IHRvV3JpdGUgPSBsaW5lYXJGcmVlOwogICAgLy8gTG9vcCBvdmVyIHplcm8sIG9uZSwgb3IgdHdvIGxpbmVhciBkYXRhIHJhbmdlcy4KICAgIHdoaWxlICh0b1dyaXRlID4gMCkgewogICAgICAvLyBTb3VyY2UgcmV0dXJucyBhdCBtb3N0IHRvV3JpdGUgYnl0ZXMsIGFuZCBpdCByZXR1cm5zIG51bGwgd2hlbiBlbXB0eS4KICAgICAgdmFyIGlucHV0RGF0YSA9IGdldERhdGEodG9Xcml0ZSk7CiAgICAgIGlmIChpbnB1dERhdGEgPT0gbnVsbCB8fCBpbnB1dERhdGEubGVuZ3RoID09IDApIGJyZWFrOwogICAgICB2YXIgbGVuID0gaW5wdXREYXRhLmxlbmd0aDsKICAgICAgZGF0YS5zZXRSYW5nZShlbmQsIGVuZCArIGxlbiwgaW5wdXREYXRhKTsKICAgICAgYWR2YW5jZUVuZChsZW4pOwogICAgICB3cml0dGVuICs9IGxlbjsKICAgICAgdG9Xcml0ZSA9IGxpbmVhckZyZWU7CiAgICB9CiAgICByZXR1cm4gd3JpdHRlbjsKICB9CgogIGJvb2wgcmVhZFRvU29ja2V0KFJhd1NvY2tldCBzb2NrZXQpIHsKICAgIC8vIExvb3Agb3ZlciB6ZXJvLCBvbmUsIG9yIHR3byBsaW5lYXIgZGF0YSByYW5nZXMuCiAgICB3aGlsZSAodHJ1ZSkgewogICAgICB2YXIgdG9Xcml0ZSA9IGxpbmVhckxlbmd0aDsKICAgICAgaWYgKHRvV3JpdGUgPT0gMCkgcmV0dXJuIGZhbHNlOwogICAgICBpbnQgYnl0ZXMgPSBzb2NrZXQud3JpdGUoZGF0YSwgc3RhcnQsIHRvV3JpdGUpOwogICAgICBhZHZhbmNlU3RhcnQoYnl0ZXMpOwogICAgICBpZiAoYnl0ZXMgPCB0b1dyaXRlKSB7CiAgICAgICAgLy8gVGhlIHNvY2tldCBoYXMgYmxvY2tlZCB3aGlsZSB3ZSBoYXZlIGRhdGEgdG8gd3JpdGUuCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICB9Cn0KCmFic3RyYWN0IGNsYXNzIF9TZWN1cmVGaWx0ZXIgewogIGV4dGVybmFsIGZhY3RvcnkgX1NlY3VyZUZpbHRlci5fKCk7CgogIHZvaWQgY29ubmVjdCgKICAgICAgU3RyaW5nIGhvc3ROYW1lLAogICAgICBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAgYm9vbCBpc19zZXJ2ZXIsCiAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLAogICAgICBib29sIHJlcXVpcmVDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgVWludDhMaXN0IHByb3RvY29scyk7CiAgdm9pZCBkZXN0cm95KCk7CiAgdm9pZCBoYW5kc2hha2UoKTsKICBTdHJpbmcgc2VsZWN0ZWRQcm90b2NvbCgpOwogIHZvaWQgcmVoYW5kc2hha2UoKTsKICB2b2lkIHJlbmVnb3RpYXRlKGJvb2wgdXNlU2Vzc2lvbkNhY2hlLCBib29sIHJlcXVlc3RDbGllbnRDZXJ0aWZpY2F0ZSwKICAgICAgYm9vbCByZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGUpOwogIHZvaWQgaW5pdCgpOwogIFg1MDlDZXJ0aWZpY2F0ZSBnZXQgcGVlckNlcnRpZmljYXRlOwogIGludCBwcm9jZXNzQnVmZmVyKGludCBidWZmZXJJbmRleCk7CiAgdm9pZCByZWdpc3RlckJhZENlcnRpZmljYXRlQ2FsbGJhY2soRnVuY3Rpb24gY2FsbGJhY2spOwogIHZvaWQgcmVnaXN0ZXJIYW5kc2hha2VDb21wbGV0ZUNhbGxiYWNrKEZ1bmN0aW9uIGhhbmRzaGFrZUNvbXBsZXRlSGFuZGxlcik7CgogIC8vIFRoaXMgY2FsbCBtYXkgY2F1c2UgYSByZWZlcmVuY2UgY291bnRlZCBwb2ludGVyIGluIHRoZSBuYXRpdmUKICAvLyBpbXBsZW1lbnRhdGlvbiB0byBiZSByZXRhaW5lZC4gSXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gdGhlIHJlc3VsdGluZwogIC8vIHZhbHVlIGlzIHBhc3NlZCB0byB0aGUgSU8gc2VydmljZSB0aHJvdWdoIGEgY2FsbCB0byBkaXNwYXRjaCgpLgogIGludCBfcG9pbnRlcigpOwoKICBMaXN0PF9FeHRlcm5hbEJ1ZmZlcj4gZ2V0IGJ1ZmZlcnM7Cn0KCi8qKiBBIHNlY3VyZSBuZXR3b3JraW5nIGV4Y2VwdGlvbiBjYXVzZWQgYnkgYSBmYWlsdXJlIGluIHRoZQogKiAgVExTL1NTTCBwcm90b2NvbC4KICovCmNsYXNzIFRsc0V4Y2VwdGlvbiBpbXBsZW1lbnRzIElPRXhjZXB0aW9uIHsKICBmaW5hbCBTdHJpbmcgdHlwZTsKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICBmaW5hbCBPU0Vycm9yIG9zRXJyb3I7CgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBjb25zdCBUbHNFeGNlcHRpb24oW1N0cmluZyBtZXNzYWdlID0gIiIsIE9TRXJyb3Igb3NFcnJvcl0pCiAgICAgIDogdGhpcy5fKCJUbHNFeGNlcHRpb24iLCBtZXNzYWdlLCBvc0Vycm9yKTsKCiAgY29uc3QgVGxzRXhjZXB0aW9uLl8odGhpcy50eXBlLCB0aGlzLm1lc3NhZ2UsIHRoaXMub3NFcnJvcik7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKHR5cGUpOwogICAgaWYgKG1lc3NhZ2UuaXNOb3RFbXB0eSkgewogICAgICBzYi53cml0ZSgiOiAkbWVzc2FnZSIpOwogICAgICBpZiAob3NFcnJvciAhPSBudWxsKSB7CiAgICAgICAgc2Iud3JpdGUoIiAoJG9zRXJyb3IpIik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAob3NFcnJvciAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCI6ICRvc0Vycm9yIik7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0KCi8qKgogKiBBbiBleGNlcHRpb24gdGhhdCBoYXBwZW5zIGluIHRoZSBoYW5kc2hha2UgcGhhc2Ugb2YgZXN0YWJsaXNoaW5nCiAqIGEgc2VjdXJlIG5ldHdvcmsgY29ubmVjdGlvbi4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgSGFuZHNoYWtlRXhjZXB0aW9uIGV4dGVuZHMgVGxzRXhjZXB0aW9uIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAg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ZGFydDppby9zZWN1cmVfc29ja2V0LmRhcnQ0b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL3NlY3VyaXR5X2NvbnRleHQuZGFydKvELy8gQ29weXJpZ2h0IChjKSAyMDE1LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8qKgogKiBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNlcnRpZmljYXRlcyB0byB0cnVzdCB3aGVuIG1ha2luZwogKiBhIHNlY3VyZSBjbGllbnQgY29ubmVjdGlvbiwgYW5kIHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbiBhbmQKICogcHJpdmF0ZSBrZXkgdG8gc2VydmUgZnJvbSBhIHNlY3VyZSBzZXJ2ZXIuCiAqCiAqIFRoZSBbU2VjdXJlU29ja2V0XSAgYW5kIFtTZWN1cmVTZXJ2ZXJTb2NrZXRdIGNsYXNzZXMgdGFrZSBhIFNlY3VyaXR5Q29udGV4dAogKiBhcyBhbiBhcmd1bWVudCB0byB0aGVpciBjb25uZWN0IGFuZCBiaW5kIG1ldGhvZHMuCiAqCiAqIENlcnRpZmljYXRlcyBhbmQga2V5cyBjYW4gYmUgYWRkZWQgdG8gYSBTZWN1cml0eUNvbnRleHQgZnJvbSBlaXRoZXIgUEVNCiAqIG9yIFBLQ1MxMiBjb250YWluZXJzLgogKgogKiBpT1Mgbm90ZTogU29tZSBtZXRob2RzIHRvIGFkZCwgcmVtb3ZlLCBhbmQgaW5zcGVjdCBjZXJ0aWZpY2F0ZXMgYXJlIG5vdCB5ZXQKICogaW1wbGVtZW50ZWQuIEhvd2V2ZXIsIHRoZSBwbGF0Zm9ybSdzIGJ1aWx0LWluIHRydXN0ZWQgY2VydGlmaWNhdGVzIGNhbgogKiBiZSB1c2VkLCBieSB3YXkgb2YgW1NlY3VyaXR5Q29udGV4dC5kZWZhdWx0Q29udGV4dF0uCiAqLwphYnN0cmFjdCBjbGFzcyBTZWN1cml0eUNvbnRleHQgewogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgW1NlY3VyaXR5Q29udGV4dF0uCiAgICoKICAgKiBCeSBkZWZhdWx0LCB0aGUgY3JlYXRlZCBbU2VjdXJpdHlDb250ZXh0XSBjb250YWlucyBubyBrZXlzIG9yIGNlcnRpZmljYXRlcy4KICAgKiBUaGVzZSBjYW4gYmUgYWRkZWQgYnkgY2FsbGluZyB0aGUgbWV0aG9kcyBvZiB0aGlzIGNsYXNzLgogICAqCiAgICogSWYgYHdpdGhUcnVzdGVkUm9vdHNgIGlzIHBhc3NlZCBhcyBgdHJ1ZWAsIHRoZSBbU2VjdXJpdHlDb250ZXh0XSB3aWxsIGJlCiAgICogc2VlZGVkIGJ5IHRoZSB0cnVzdGVkIHJvb3QgY2VydGlmaWNhdGVzIHByb3ZpZGVkIGFzIGV4cGxhaW5lZCBiZWxvdy4gVG8KICAgKiBvYnRhaW4gYSBbU2VjdXJpdHlDb250ZXh0XSBjb250YWluaW5nIHRydXN0ZWQgcm9vdCBjZXJ0aWZpY2F0ZXMsCiAgICogW1NlY3VyaXR5Q29udGV4dC5kZWZhdWx0Q29udGV4dF0gaXMgdXN1YWxseSBzdWZmaWNpZW50LCBhbmQgc2hvdWxkCiAgICogYmUgdXNlZCBpbnN0ZWFkLiBIb3dldmVyLCBpZiB0aGUgW1NlY3VyaXR5Q29udGV4dF0gY29udGFpbmluZyB0aGUgdHJ1c3RlZAogICAqIHJvb3QgY2VydGlmaWNhdGVzIG11c3QgYmUgbW9kaWZpZWQgcGVyLWNvbm5lY3Rpb24sIHRoZW4gYHdpdGhUcnVzdGVkUm9vdHNgCiAgICogc2hvdWxkIGJlIHVzZWQuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBTZWN1cml0eUNvbnRleHQoe2Jvb2wgd2l0aFRydXN0ZWRSb290czogZmFsc2V9KTsKCiAgLyoqCiAgICogU2VjdXJlIG5ldHdvcmtpbmcgY2xhc3NlcyB3aXRoIGFuIG9wdGlvbmFsIGBjb250ZXh0YCBwYXJhbWV0ZXIKICAgKiB1c2UgdGhlIFtkZWZhdWx0Q29udGV4dF0gb2JqZWN0IGlmIHRoZSBwYXJhbWV0ZXIgaXMgb21pdHRlZC4KICAgKiBUaGlzIG9iamVjdCBjYW4gYWxzbyBiZSBhY2Nlc3NlZCwgYW5kIG1vZGlmaWVkLCBkaXJlY3RseS4KICAgKiBFYWNoIGlzb2xhdGUgaGFzIGEgZGlmZmVyZW50IFtkZWZhdWx0Q29udGV4dF0gb2JqZWN0LgogICAqIFRoZSBbZGVmYXVsdENvbnRleHRdIG9iamVjdCB1c2VzIGEgbGlzdCBvZiB3ZWxsLWtub3duIHRydXN0ZWQKICAgKiBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcyBhcyBpdHMgdHJ1c3RlZCByb290cy4gT24gTGludXggYW5kIFdpbmRvd3MsIHRoaXMKICAgKiBsaXN0IGlzIHRha2VuIGZyb20gTW96aWxsYSwgd2hvIG1haW50YWlucyBpdCBhcyBwYXJ0IG9mIEZpcmVmb3guIE9uLAogICAqIE1hY09TLCBpT1MsIGFuZCBBbmRyb2lkLCB0aGlzIGxpc3QgY29tZXMgZnJvbSB0aGUgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMKICAgKiBzdG9yZXMgYnVpbHQgaW4gdG8gdGhlIHBsYXRmb3Jtcy4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgU2VjdXJpdHlDb250ZXh0IGdldCBkZWZhdWx0Q29udGV4dDsKCiAgLyoqCiAgICogU2V0cyB0aGUgcHJpdmF0ZSBrZXkgZm9yIGEgc2VydmVyIGNlcnRpZmljYXRlIG9yIGNsaWVudCBjZXJ0aWZpY2F0ZS4KICAgKgogICAqIEEgc2VjdXJlIGNvbm5lY3Rpb24gdXNpbmcgdGhpcyBTZWN1cml0eUNvbnRleHQgd2lsbCB1c2UgdGhpcyBrZXkgd2l0aAogICAqIHRoZSBzZXJ2ZXIgb3IgY2xpZW50IGNlcnRpZmljYXRlIHRvIHNpZ24gYW5kIGRlY3J5cHQgbWVzc2FnZXMuCiAgICogW2ZpbGVdIGlzIHRoZSBwYXRoIHRvIGEgUEVNIG9yIFBLQ1MxMiBmaWxlIGNvbnRhaW5pbmcgYW4gZW5jcnlwdGVkCiAgICogcHJpdmF0ZSBrZXksIGVuY3J5cHRlZCB3aXRoIFtwYXNzd29yZF0uIEFzc3VtaW5nIGl0IGlzIHdlbGwtZm9ybWF0dGVkLCBhbGwKICAgKiBvdGhlciBjb250ZW50cyBvZiBbZmlsZV0gYXJlIGlnbm9yZWQuIEFuIHVuZW5jcnlwdGVkIGZpbGUgY2FuIGJlIHVzZWQsCiAgICogYnV0IHRoaXMgaXMgbm90IHVzdWFsLgogICAqCiAgICogTkI6IFRoaXMgZnVuY3Rpb24gY2FsbHMgW0ZpbGUucmVhZEFzQnl0ZXNTeW5jXSwgYW5kIHdpbGwgYmxvY2sgb24gZmlsZSBJTy4KICAgKiBQcmVmZXIgdXNpbmcgW3VzZVByaXZhdGVLZXlCeXRlc10uCiAgICoKICAgKiBpT1Mgbm90ZTogT25seSBQS0NTMTIgZGF0YSBpcyBzdXBwb3J0ZWQuIEl0IHNob3VsZCBjb250YWluIGJvdGggdGhlIHByaXZhdGUKICAgKiBrZXkgYW5kIHRoZSBjZXJ0aWZpY2F0ZSBjaGFpbi4gT24gaU9TIG9uZSBjYWxsIHRvIFt1c2VQcml2YXRlS2V5XSB3aXRoIHRoaXMKICAgKiBkYXRhIGlzIHVzZWQgaW5zdGVhZCBvZiB0d28gY2FsbHMgdG8gW3VzZUNlcnRpZmljYXRlQ2hhaW5dIGFuZAogICAqIFt1c2VQcml2YXRlS2V5XS4KICAgKi8KICB2b2lkIHVzZVByaXZhdGVLZXkoU3RyaW5nIGZpbGUsIHtTdHJpbmcgcGFzc3dvcmR9KTsKCiAgLyoqCiAgICogU2V0cyB0aGUgcHJpdmF0ZSBrZXkgZm9yIGEgc2VydmVyIGNlcnRpZmljYXRlIG9yIGNsaWVudCBjZXJ0aWZpY2F0ZS4KICAgKgogICAqIExpa2UgW3VzZVByaXZhdGVLZXldLCBidXQgdGFrZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlIGFzIGEgbGlzdAogICAqIG9mIGJ5dGVzLgogICAqLwogIHZvaWQgdXNlUHJpdmF0ZUtleUJ5dGVzKExpc3Q8aW50PiBrZXlCeXRlcywge1N0cmluZyBwYXNzd29yZH0pOwoKICAvKioKICAgKiBTZXRzIHRoZSBzZXQgb2YgdHJ1c3RlZCBYNTA5IGNlcnRpZmljYXRlcyB1c2VkIGJ5IFtTZWN1cmVTb2NrZXRdCiAgICogY2xpZW50IGNvbm5lY3Rpb25zLCB3aGVuIGNvbm5lY3RpbmcgdG8gYSBzZWN1cmUgc2VydmVyLgogICAqCiAgICogW2ZpbGVdIGlzIHRoZSBwYXRoIHRvIGEgUEVNIG9yIFBLQ1MxMiBmaWxlIGNvbnRhaW5pbmcgWDUwOSBjZXJ0aWZpY2F0ZXMsCiAgICogdXN1YWxseSByb290IGNlcnRpZmljYXRlcyBmcm9tIGNlcnRpZmljYXRlIGF1dGhvcml0aWVzLiBGb3IgUEtDUzEyIGZpbGVzLAogICAqIFtwYXNzd29yZF0gaXMgdGhlIHBhc3N3b3JkIGZvciB0aGUgZmlsZS4gRm9yIFBFTSBmaWxlcywgW3Bhc3N3b3JkXSBpcwogICAqIGlnbm9yZWQuIEFzc3VtaW5nIGl0IGlzIHdlbGwtZm9ybWF0dGVkLCBhbGwgb3RoZXIgY29udGVudHMgb2YgW2ZpbGVdIGFyZQogICAqIGlnbm9yZWQuCiAgICoKICAgKiBOQjogVGhpcyBmdW5jdGlvbiBjYWxscyBbRmlsZS5yZWFkQXNCeXRlc1N5bmNdLCBhbmQgd2lsbCBibG9jayBvbiBmaWxlIElPLgogICAqIFByZWZlciB1c2luZyBbc2V0VHJ1c3RlZENlcnRpZmljYXRlc0J5dGVzXS4KICAgKgogICAqIGlPUyBub3RlOiBPbiBpT1MsIHRoaXMgY2FsbCB0YWtlcyBvbmx5IHRoZSBieXRlcyBmb3IgYSBzaW5nbGUgREVSCiAgICogZW5jb2RlZCBYNTA5IGNlcnRpZmljYXRlLiBJdCBtYXkgYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIHRvIGFkZAogICAqIG11bHRpcGxlIHRydXN0ZWQgY2VydGlmaWNhdGVzIHRvIHRoZSBjb250ZXh0LiBBIERFUiBlbmNvZGVkIGNlcnRpZmljYXRlCiAgICogY2FuIGJlIG9idGFpbmVkIGZyb20gYSBQRU0gZW5jb2RlZCBjZXJ0aWZpY2F0ZSBieSB1c2luZyB0aGUgb3BlbnNzbCB0b29sOgogICAqCiAgICogICAkIG9wZW5zc2wgeDUwOSAtb3V0Zm9ybSBkZXIgLWluIGNlcnQucGVtIC1vdXQgY2VydC5kZXIKICAgKi8KICB2b2lkIHNldFRydXN0ZWRDZXJ0aWZpY2F0ZXMoU3RyaW5nIGZpbGUsIHtTdHJpbmcgcGFzc3dvcmR9KTsKCiAgLyoqCiAgICogU2V0cyB0aGUgc2V0IG9mIHRydXN0ZWQgWDUwOSBjZXJ0aWZpY2F0ZXMgdXNlZCBieSBbU2VjdXJlU29ja2V0XQogICAqIGNsaWVudCBjb25uZWN0aW9ucywgd2hlbiBjb25uZWN0aW5nIHRvIGEgc2VjdXJlIHNlcnZlci4KICAgKgogICAqIExpa2UgW3NldFRydXN0ZWRDZXJ0aWZpY2F0ZXNdIGJ1dCB0YWtlcyB0aGUgY29udGVudHMgb2YgdGhlIGZpbGUuCiAgICovCiAgdm9pZCBzZXRUcnVzdGVkQ2VydGlmaWNhdGVzQnl0ZXMoTGlzdDxpbnQ+IGNlcnRCeXRlcywge1N0cmluZyBwYXNzd29yZH0pOwoKICAvKioKICAgKiBTZXRzIHRoZSBjaGFpbiBvZiBYNTA5IGNlcnRpZmljYXRlcyBzZXJ2ZWQgYnkgW1NlY3VyZVNlcnZlclNvY2tldF0KICAgKiB3aGVuIG1ha2luZyBzZWN1cmUgY29ubmVjdGlvbnMsIGluY2x1ZGluZyB0aGUgc2VydmVyIGNlcnRpZmljYXRlLgogICAqCiAgICogW2ZpbGVdIGlzIGEgUEVNIG9yIFBLQ1MxMiBmaWxlIGNvbnRhaW5pbmcgWDUwOSBjZXJ0aWZpY2F0ZXMsIHN0YXJ0aW5nIHdpdGgKICAgKiB0aGUgcm9vdCBhdXRob3JpdHkgYW5kIGludGVybWVkaWF0ZSBhdXRob3JpdGllcyBmb3JtaW5nIHRoZSBzaWduZWQKICAgKiBjaGFpbiB0byB0aGUgc2VydmVyIGNlcnRpZmljYXRlLCBhbmQgZW5kaW5nIHdpdGggdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZS4KICAgKiBUaGUgcHJpdmF0ZSBrZXkgZm9yIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgaXMgc2V0IGJ5IFt1c2VQcml2YXRlS2V5XS4gRm9yCiAgICogUEtDUzEyIGZpbGVzLCBbcGFzc3dvcmRdIGlzIHRoZSBwYXNzd29yZCBmb3IgdGhlIGZpbGUuIEZvciBQRU0gZmlsZXMsCiAgICogW3Bhc3N3b3JkXSBpcyBpZ25vcmVkLiBBc3N1bWluZyBpdCBpcyB3ZWxsLWZvcm1hdHRlZCwgYWxsCiAgICogb3RoZXIgY29udGVudHMgb2YgW2ZpbGVdIGFyZSBpZ25vcmVkLgogICAqCiAgICogTkI6IFRoaXMgZnVuY3Rpb24gY2FsbHMgW0ZpbGUucmVhZEFzQnl0ZXNTeW5jXSwgYW5kIHdpbGwgYmxvY2sgb24gZmlsZSBJTy4KICAgKiBQcmVmZXIgdXNpbmcgW3VzZUNlcnRpZmljYXRlQ2hhaW5CeXRlc10uCiAgICoKICAgKiBpT1Mgbm90ZTogQXMgbm90ZWQgYWJvdmUsIFt1c2VQcml2YXRlS2V5XSBkb2VzIHRoZSBqb2Igb2YgYm90aAogICAqIHRoYXQgY2FsbCBhbmQgdGhpcyBvbmUuIE9uIGlPUywgdGhpcyBjYWxsIGlzIGEgbm8tb3AuCiAgICovCiAgdm9pZCB1c2VDZXJ0aWZpY2F0ZUNoYWluKFN0cmluZyBmaWxlLCB7U3RyaW5nIHBhc3N3b3JkfSk7CgogIC8qKgogICAqIFNldHMgdGhlIGNoYWluIG9mIFg1MDkgY2VydGlmaWNhdGVzIHNlcnZlZCBieSBbU2VjdXJlU2VydmVyU29ja2V0XQogICAqIHdoZW4gbWFraW5nIHNlY3VyZSBjb25uZWN0aW9ucywgaW5jbHVkaW5nIHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUuCiAgICoKICAgKiBMaWtlIFt1c2VDZXJ0aWZpY2F0ZUNoYWluXSBidXQgdGFrZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgogICAqLwogIHZvaWQgdXNlQ2VydGlmaWNhdGVDaGFpbkJ5dGVzKExpc3Q8aW50PiBjaGFpbkJ5dGVzLCB7U3RyaW5nIHBhc3N3b3JkfSk7CgogIC8qKgogICAqIFNldHMgdGhlIGxpc3Qgb2YgYXV0aG9yaXR5IG5hbWVzIHRoYXQgYSBbU2VjdXJlU2VydmVyU29ja2V0XSB3aWxsIGFkdmVydGlzZQogICAqIGFzIGFjY2VwdGVkIHdoZW4gcmVxdWVzdGluZyBhIGNsaWVudCBjZXJ0aWZpY2F0ZSBmcm9tIGEgY29ubmVjdGluZwogICAqIGNsaWVudC4KICAgKgogICAqIFtmaWxlXSBpcyBhIFBFTSBvciBQS0NTMTIgZmlsZSBjb250YWluaW5nIHRoZSBhY2NlcHRlZCBzaWduaW5nCiAgICogYXV0aG9yaXR5IGNlcnRpZmljYXRlcyAtIHRoZSBhdXRob3JpdHkgbmFtZXMgYXJlIGV4dHJhY3RlZCBmcm9tIHRoZQogICAqIGNlcnRpZmljYXRlcy4gRm9yIFBLQ1MxMiBmaWxlcywgW3Bhc3N3b3JkXSBpcyB0aGUgcGFzc3dvcmQgZm9yIHRoZSBmaWxlLgogICAqIEZvciBQRU0gZmlsZXMsIFtwYXNzd29yZF0gaXMgaWdub3JlZC4gQXNzdW1pbmcgaXQgaXMgd2VsbC1mb3JtYXR0ZWQsIGFsbAogICAqIG90aGVyIGNvbnRlbnRzIG9mIFtmaWxlXSBhcmUgaWdub3JlZC4KICAgKgogICAqIE5COiBUaGlzIGZ1bmN0aW9uIGNhbGxzIFtGaWxlLnJlYWRBc0J5dGVzU3luY10sIGFuZCB3aWxsIGJsb2NrIG9uIGZpbGUgSU8uCiAgICogUHJlZmVyIHVzaW5nIFtzZXRDbGllbnRBdXRob3JpdGllc0J5dGVzXS4KICAgKgogICAqIGlPUyBub3RlOiBUaGlzIGNhbGwgaXMgbm90IHN1cHBvcnRlZC4KICAgKi8KICB2b2lkIHNldENsaWVudEF1dGhvcml0aWVzKFN0cmluZyBmaWxlLCB7U3RyaW5nIHBhc3N3b3JkfSk7CgogIC8qKgogICAqIFNldHMgdGhlIGxpc3Qgb2YgYXV0aG9yaXR5IG5hbWVzIHRoYXQgYSBbU2VjdXJlU2VydmVyU29ja2V0XSB3aWxsIGFkdmVydGlzZQogICAqIGFzIGFjY2VwdGVkLCB3aGVuIHJlcXVlc3RpbmcgYSBjbGllbnQgY2VydGlmaWNhdGUgZnJvbSBhIGNvbm5lY3RpbmcKICAgKiBjbGllbnQuCiAgICoKICAgKiBMaWtlIFtzZXRDbGllbnRBdXRob3JpdGllc10gYnV0IHRha2VzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4KICAgKi8KICB2b2lkIHNldENsaWVudEF1dGhvcml0aWVzQnl0ZXMoTGlzdDxpbnQ+IGF1dGhDZXJ0Qnl0ZXMsIHtTdHJpbmcgcGFzc3dvcmR9KTsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgcGxhdGZvcm0gc3VwcG9ydHMgQUxQTi4gVGhpcyBhbHdheXMgcmV0dXJucyB0cnVlIGFuZCB3aWxsIGJlCiAgICogcmVtb3ZlZCBpbiBhIGZ1dHVyZSByZWxlYXNlLgogICAqLwogIEBkZXByZWNhdGVkCiAgZXh0ZXJuYWwgc3RhdGljIGJvb2wgZ2V0IGFscG5TdXBwb3J0ZWQ7CgogIC8qKgogICAqIFNldHMgdGhlIGxpc3Qgb2YgYXBwbGljYXRpb24tbGV2ZWwgcHJvdG9jb2xzIHN1cHBvcnRlZCBieSBhIGNsaWVudAogICAqIGNvbm5lY3Rpb24gb3Igc2VydmVyIGNvbm5lY3Rpb24uIFRoZSBBTFBOIChhcHBsaWNhdGlvbiBsZXZlbCBwcm90b2NvbAogICAqIG5lZ290aWF0aW9uKSBleHRlbnNpb24gdG8gVExTIGFsbG93cyBhIGNsaWVudCB0byBzZW5kIGEgbGlzdCBvZgogICAqIHByb3RvY29scyBpbiB0aGUgVExTIGNsaWVudCBoZWxsbyBtZXNzYWdlLCBhbmQgdGhlIHNlcnZlciB0byBwaWNrCiAgICogb25lIGFuZCBzZW5kIHRoZSBzZWxlY3RlZCBvbmUgYmFjayBpbiBpdHMgc2VydmVyIGhlbGxvIG1lc3NhZ2UuCiAgICoKICAgKiBTZXBhcmF0ZSBsaXN0cyBvZiBwcm90b2NvbHMgY2FuIGJlIHNlbnQgZm9yIGNsaWVudCBjb25uZWN0aW9ucyBhbmQKICAgKiBmb3Igc2VydmVyIGNvbm5lY3Rpb25zLCB1c2luZyB0aGUgc2FtZSBTZWN1cml0eUNvbnRleHQuICBUaGUgW2lzU2VydmVyXQogICAqIGJvb2xlYW4gYXJndW1lbnQgc3BlY2lmaWVzIHdoZXRoZXIgdG8gc2V0IHRoZSBsaXN0IGZvciBzZXJ2ZXIgY29ubmVjdGlvbnMKICAgKiBvciBjbGllbnQgY29ubmVjdGlvbnMuCiAgICovCiAgdm9pZCBzZXRBbHBuUHJvdG9jb2xzKExpc3Q8U3RyaW5nPiBwcm90b2NvbHMsIGJvb2wgaXNTZXJ2ZXIpOwoKICAvLy8gRW5jb2RlcyBhIHNldCBvZiBzdXBwb3J0ZWQgcHJvdG9jb2xzIGZvciBBTFBOL05QTiB1c2FnZS4KICAvLy8KICAvLy8gVGhlIGBwcm90b2NvbHNgIGxpc3QgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBwcm90b2NvbHMgaW4gZGVzY2VuZGluZyBvcmRlcgogIC8vLyBvZiBwcmVmZXJlbmNlLgogIC8vLwogIC8vLyBTZWUgUkZDIDczMDEgKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MzAxKSBmb3IgdGhlIGVuY29kaW5nIG9mCiAgLy8vIGBMaXN0PFN0cmluZz4gcHJvdG9jb2xzYDoKICAvLy8gICAgIG9wYXF1ZSBQcm90b2NvbE5hbWU8MS4uMl44LTE+OwogIC8vLwogIC8vLyAgICAgc3RydWN0IHsKICAvLy8gICAgICAgICBQcm90b2NvbE5hbWUgcHJvdG9jb2xfbmFtZV9saXN0PDIuLjJeMTYtMT4KICAvLy8gICAgIH0gUHJvdG9jb2xOYW1lTGlzdDsKICAvLy8KICAvLy8gVGhlIGVuY29kaW5nIG9mIHRoZSBvcGFxdWUgYFByb3RvY29sTmFtZTxsb3dlci4udXBwZXI+YCB2ZWN0b3IgaXMKICAvLy8gZGVzY3JpYmVkIGluIFJGQyAyMjQ2OiA0LjMgVmVjdG9ycy4KICAvLy8KICAvLy8gTm90ZTogRXZlbiB0aG91Z2ggdGhpcyBlbmNvZGluZyBzY2hlbWUgd291bGQgYWxsb3cgYSB0b3RhbAogIC8vLyBgUHJvdG9jb2xOYW1lTGlzdGAgbGVuZ3RoIG9mIDY1NTM1LCB0aGlzIGxpbWl0IGNhbm5vdCBiZSByZWFjaGVkLiBUZXN0aW5nCiAgLy8vIHNob3dlZCB0aGF0IG1vcmUgdGhhbiB+IDJeMTQgIGJ5dGVzIHdpbGwgZmFpbCB0byBuZWdvdGlhdGUgYSBwcm90b2NvbC4KICAvLy8gV2Ugd2lsbCBiZSBjb25zZXJ2YXRpdmUgYW5kIHN1cHBvcnQgb25seSBtZXNzYWdlcyB1cCB0byAoMTw8MTMpLTEgYnl0ZXMuCiAgc3RhdGljIFVpbnQ4TGlzdCBfcHJvdG9jb2xzVG9MZW5ndGhFbmNvZGluZyhMaXN0PFN0cmluZz4gcHJvdG9jb2xzKSB7CiAgICBpZiAocHJvdG9jb2xzID09IG51bGwgfHwgcHJvdG9jb2xzLmxlbmd0aCA9PSAwKSB7CiAgICAgIHJldHVybiBuZXcgVWludDhMaXN0KDApOwogICAgfQogICAgaW50IHByb3RvY29sc0xlbmd0aCA9IHByb3RvY29scy5sZW5ndGg7CgogICAgLy8gQ2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2Ugd2lsbCBuZWVkIGlmIGl0IGlzIEFTQ0lJLgogICAgaW50IGV4cGVjdGVkTGVuZ3RoID0gcHJvdG9jb2xzTGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwcm90b2NvbHNMZW5ndGg7IGkrKykgewogICAgICBpbnQgbGVuZ3RoID0gcHJvdG9jb2xzW2ldLmxlbmd0aDsKICAgICAgaWYgKGxlbmd0aCA+IDAgJiYgbGVuZ3RoIDw9IDI1NSkgewogICAgICAgIGV4cGVjdGVkTGVuZ3RoICs9IGxlbmd0aDsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgJ0xlbmd0aCBvZiBwcm90b2NvbCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMjU1ICh3YXM6ICRsZW5ndGgpLicpOwogICAgICB9CiAgICB9CgogICAgaWYgKGV4cGVjdGVkTGVuZ3RoID49ICgxIDw8IDEzKSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigKICAgICAgICAgICdUaGUgbWF4aW11bSBtZXNzYWdlIGxlbmd0aCBzdXBwb3J0ZWQgaXMgMl4xMy0xLicpOwogICAgfQoKICAgIC8vIFRyeSBlbmNvZGluZyB0aGUgYExpc3Q8U3RyaW5nPiBwcm90b2NvbHNgIGFycmF5IHVzaW5nIGZhc3QgQVNDSUkgcGF0aC4KICAgIHZhciBieXRlcyA9IG5ldyBVaW50OExpc3QoZXhwZWN0ZWRMZW5ndGgpOwogICAgaW50IGJ5dGVzT2Zmc2V0ID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcHJvdG9jb2xzTGVuZ3RoOyBpKyspIHsKICAgICAgU3RyaW5nIHByb3RvID0gcHJvdG9jb2xzW2ldOwoKICAgICAgLy8gQWRkIGxlbmd0aCBieXRlLgogICAgICBieXRlc1tieXRlc09mZnNldCsrXSA9IHByb3RvLmxlbmd0aDsKICAgICAgaW50IGJpdHMgPSAwOwoKICAgICAgLy8gQWRkIHByb3RvY29sIGJ5dGVzLgogICAgICBmb3IgKGludCBqID0gMDsgaiA8IHByb3RvLmxlbmd0aDsgaisrKSB7CiAgICAgICAgdmFyIGNoYXIgPSBwcm90by5jb2RlVW5pdEF0KGopOwogICAgICAgIGJpdHMgfD0gY2hhcjsKICAgICAgICBieXRlc1tieXRlc09mZnNldCsrXSA9IGNoYXIgJiAweGZmOwogICAgICB9CgogICAgICAvLyBHbyBzbG93IGNhc2UgaWYgd2UgaGF2ZSBlbmNvdW50ZXJlZCBhbnl0aGluZyBub24tYXNjaWkuCiAgICAgIGlmIChiaXRzID4gMHg3ZikgewogICAgICAgIHJldHVybiBfcHJvdG9jb2xzVG9MZW5ndGhFbmNvZGluZ05vbkFzY2lpQmFpbG91dChwcm90b2NvbHMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gYnl0ZXM7CiAgfQoKICBzdGF0aWMgVWludDhMaXN0IF9wcm90b2NvbHNUb0xlbmd0aEVuY29kaW5nTm9uQXNjaWlCYWlsb3V0KAogICAgICBMaXN0PFN0cmluZz4gcHJvdG9jb2xzKSB7CiAgICB2b2lkIGFkZFByb3RvY29sKExpc3Q8aW50PiBvdXRCeXRlcywgU3RyaW5nIHByb3RvY29sKSB7CiAgICAgIHZhciBwcm90b2NvbEJ5dGVzID0gdXRmOC5lbmNvZGUocHJvdG9jb2wpOwogICAgICB2YXIgbGVuID0gcHJvdG9jb2xCeXRlcy5sZW5ndGg7CgogICAgICBpZiAobGVuID4gMjU1KSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgICdMZW5ndGggb2YgcHJvdG9jb2wgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NSAod2FzOiAkbGVuKScpOwogICAgICB9CiAgICAgIC8vIEFkZCBsZW5ndGggYnl0ZS4KICAgICAgb3V0Qnl0ZXMuYWRkKGxlbik7CgogICAgICAvLyBBZGQgcHJvdG9jb2wgYnl0ZXMuCiAgICAgIG91dEJ5dGVzLmFkZEFsbChwcm90b2NvbEJ5dGVzKTsKICAgIH0KCiAgICBMaXN0PGludD4gYnl0ZXMgPSBbXTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvdG9jb2xzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGFkZFByb3RvY29sKGJ5dGVzLCBwcm90b2NvbHNbaV0pOwogICAgfQoKICAgIGlmIChieXRlcy5sZW5ndGggPj0gKDEgPDwgMTMpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKAogICAgICAgICAgJ1RoZSBtYXhpbXVtIG1lc3NhZ2UgbGVuZ3RoIHN1cHBvcnRlZCBpcyAyXjEzLTEuJyk7CiAgICB9CgogICAgcmV0dXJuIG5ldyBVaW50OExpc3QuZnJvbUxpc3QoYnl0ZXMpOwogIH0KfQqBHQBOTjwBEQEEPz0uA081A0sZA09KOAQhBiYFUT4FTk1GSE9QFQZEAQZEQj87Q05KTCcGNgEGSgVLREhQTBwFUCgFUVFEFgY2AQZKBUgPBkIBBkY9BU5PS04OBVAxBUdGTU8FPgY/AQZGPQVHBkwBBkhHBVBITk9LPysFUC4FRDsGPAEGSEcFRAZKAQZRSA0FRElOTisFUC8FKwY9AQZRSQ0FRQZOAQZOIgYOKgEGSEtFR0UFSE1PHAZAAT8GUBUGTSApBhM5HgZIKgZBUE1PSDYfBiwBQiowKCkiDyFNCAYBJx8+BgFOLxkwIwEaKxQBHS8oFiwIAUEZRQgGEgQBPiA8MSYBFyFJCBoZAR0mBgEaMSgGASUfPgYBKgQCAR1kYXJ0OmlvL3NlY3VyaXR5X2NvbnRleHQuZGFydCpvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvaW8vc29ja2V0LmRhcnTAAIDZLy8gQ29weXJpZ2h0IChjKSAyMDEzLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5pbzsKCi8qKgogKiBbSW50ZXJuZXRBZGRyZXNzVHlwZV0gaXMgdGhlIHR5cGUgYW4gW0ludGVybmV0QWRkcmVzc10uIEN1cnJlbnRseSwKICogSVAgdmVyc2lvbiA0IChJUHY0KSBhbmQgSVAgdmVyc2lvbiA2IChJUHY2KSBhcmUgc3VwcG9ydGVkLgogKi8KY2xhc3MgSW50ZXJuZXRBZGRyZXNzVHlwZSB7CiAgc3RhdGljIGNvbnN0IEludGVybmV0QWRkcmVzc1R5cGUgSVB2NCA9IGNvbnN0IEludGVybmV0QWRkcmVzc1R5cGUuXygwKTsKICBzdGF0aWMgY29uc3QgSW50ZXJuZXRBZGRyZXNzVHlwZSBJUHY2ID0gY29uc3QgSW50ZXJuZXRBZGRyZXNzVHlwZS5fKDEpOwogIHN0YXRpYyBjb25zdCBJbnRlcm5ldEFkZHJlc3NUeXBlIGFueSA9IGNvbnN0IEludGVybmV0QWRkcmVzc1R5cGUuXygtMSk7CgogIEBEZXByZWNhdGVkKCJVc2UgSVB2NCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgSW50ZXJuZXRBZGRyZXNzVHlwZSBJUF9WNCA9IElQdjQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBJUHY2IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBJbnRlcm5ldEFkZHJlc3NUeXBlIElQX1Y2ID0gSVB2NjsKICBARGVwcmVjYXRlZCgiVXNlIGFueSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgSW50ZXJuZXRBZGRyZXNzVHlwZSBBTlkgPSBhbnk7CgogIGZpbmFsIGludCBfdmFsdWU7CgogIGNvbnN0IEludGVybmV0QWRkcmVzc1R5cGUuXyh0aGlzLl92YWx1ZSk7CgogIGZhY3RvcnkgSW50ZXJuZXRBZGRyZXNzVHlwZS5fZnJvbShpbnQgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSAwKSByZXR1cm4gSVB2NDsKICAgIGlmICh2YWx1ZSA9PSAxKSByZXR1cm4gSVB2NjsKICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCJJbnZhbGlkIHR5cGU6ICR2YWx1ZSIpOwogIH0KCiAgLyoqCiAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSB0eXBlLCBlLmcuICJJUHY0IiBvciAiSVB2NiIuCiAgICovCiAgU3RyaW5nIGdldCBuYW1lIHsKICAgIHN3aXRjaCAoX3ZhbHVlKSB7CiAgICAgIGNhc2UgLTE6CiAgICAgICAgcmV0dXJuICJBTlkiOwogICAgICBjYXNlIDA6CiAgICAgICAgcmV0dXJuICJJUHY0IjsKICAgICAgY2FzZSAxOgogICAgICAgIHJldHVybiAiSVB2NiI7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIkludmFsaWQgSW50ZXJuZXRBZGRyZXNzIik7CiAgICB9CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiSW50ZXJuZXRBZGRyZXNzVHlwZTogJG5hbWUiOwp9CgovKioKICogQW4gaW50ZXJuZXQgYWRkcmVzcy4KICoKICogVGhpcyBvYmplY3QgaG9sZHMgYW4gaW50ZXJuZXQgYWRkcmVzcy4gSWYgdGhpcyBpbnRlcm5ldCBhZGRyZXNzCiAqIGlzIHRoZSByZXN1bHQgb2YgYSBETlMgbG9va3VwLCB0aGUgYWRkcmVzcyBhbHNvIGhvbGRzIHRoZSBob3N0bmFtZQogKiB1c2VkIHRvIG1ha2UgdGhlIGxvb2t1cC4KICogQW4gSW50ZXJuZXQgYWRkcmVzcyBjb21iaW5lZCB3aXRoIGEgcG9ydCBudW1iZXIgcmVwcmVzZW50cyBhbgogKiBlbmRwb2ludCB0byB3aGljaCBhIHNvY2tldCBjYW4gY29ubmVjdCBvciBhIGxpc3RlbmluZyBzb2NrZXQgY2FuCiAqIGJpbmQuCiAqLwphYnN0cmFjdCBjbGFzcyBJbnRlcm5ldEFkZHJlc3MgewogIC8qKgogICAqIElQIHZlcnNpb24gNCBsb29wYmFjayBhZGRyZXNzLiBVc2UgdGhpcyBhZGRyZXNzIHdoZW4gbGlzdGVuaW5nIG9uCiAgICogb3IgY29ubmVjdGluZyB0byB0aGUgbG9vcGJhY2sgYWRhcHRlciB1c2luZyBJUCB2ZXJzaW9uIDQgKElQdjQpLgogICAqLwogIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IGxvb3BiYWNrSVB2NCA9PiBMT09QQkFDS19JUF9WNDsKICBARGVwcmVjYXRlZCgiVXNlIGxvb3BiYWNrSVB2NCBpbnN0ZWFkIikKICBleHRlcm5hbCBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIGdldCBMT09QQkFDS19JUF9WNDsKCiAgLyoqCiAgICogSVAgdmVyc2lvbiA2IGxvb3BiYWNrIGFkZHJlc3MuIFVzZSB0aGlzIGFkZHJlc3Mgd2hlbiBsaXN0ZW5pbmcgb24KICAgKiBvciBjb25uZWN0aW5nIHRvIHRoZSBsb29wYmFjayBhZGFwdGVyIHVzaW5nIElQIHZlcnNpb24gNiAoSVB2NikuCiAgICovCiAgc3RhdGljIEludGVybmV0QWRkcmVzcyBnZXQgbG9vcGJhY2tJUHY2ID0+IExPT1BCQUNLX0lQX1Y2OwogIEBEZXByZWNhdGVkKCJVc2UgbG9vcGJhY2tJUHY2IGluc3RlYWQiKQogIGV4dGVybmFsIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IExPT1BCQUNLX0lQX1Y2OwoKICAvKioKICAgKiBJUCB2ZXJzaW9uIDQgYW55IGFkZHJlc3MuIFVzZSB0aGlzIGFkZHJlc3Mgd2hlbiBsaXN0ZW5pbmcgb24KICAgKiBhbGwgYWRhcHRlcnMgSVAgYWRkcmVzc2VzIHVzaW5nIElQIHZlcnNpb24gNCAoSVB2NCkuCiAgICovCiAgc3RhdGljIEludGVybmV0QWRkcmVzcyBnZXQgYW55SVB2NCA9PiBBTllfSVBfVjQ7CiAgQERlcHJlY2F0ZWQoIlVzZSBhbnlJUHY0IGluc3RlYWQiKQogIGV4dGVybmFsIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IEFOWV9JUF9WNDsKCiAgLyoqCiAgICogSVAgdmVyc2lvbiA2IGFueSBhZGRyZXNzLiBVc2UgdGhpcyBhZGRyZXNzIHdoZW4gbGlzdGVuaW5nIG9uCiAgICogYWxsIGFkYXB0ZXJzIElQIGFkZHJlc3NlcyB1c2luZyBJUCB2ZXJzaW9uIDYgKElQdjYpLgogICAqLwogIHN0YXRpYyBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFueUlQdjYgPT4gQU5ZX0lQX1Y2OwogIEBEZXByZWNhdGVkKCJVc2UgYW55SVB2NiBpbnN0ZWFkIikKICBleHRlcm5hbCBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIGdldCBBTllfSVBfVjY7CgogIC8qKgogICAqIFRoZSBbdHlwZV0gb2YgdGhlIFtJbnRlcm5ldEFkZHJlc3NdIHNwZWNpZmllZCB3aGF0IElQIHByb3RvY29sLgogICAqLwogIEludGVybmV0QWRkcmVzc1R5cGUgZ2V0IHR5cGU7CgogIC8qKgogICAqIFRoZSBudW1lcmljIGFkZHJlc3Mgb2YgdGhlIGhvc3QuIEZvciBJUHY0IGFkZHJlc3NlcyB0aGlzIGlzIHVzaW5nCiAgICogdGhlIGRvdHRlZC1kZWNpbWFsIG5vdGF0aW9uLiBGb3IgSVB2NiBpdCBpcyB1c2luZyB0aGUKICAgKiBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbi4KICAgKi8KICBTdHJpbmcgZ2V0IGFkZHJlc3M7CgogIC8qKgogICAqIFRoZSBob3N0IHVzZWQgdG8gbG9va3VwIHRoZSBhZGRyZXNzLiBJZiB0aGVyZSBpcyBubyBob3N0CiAgICogYXNzb2NpYXRlZCB3aXRoIHRoZSBhZGRyZXNzIHRoaXMgcmV0dXJucyB0aGUgbnVtZXJpYyBhZGRyZXNzLgogICAqLwogIFN0cmluZyBnZXQgaG9zdDsKCiAgLyoqCiAgICogR2V0IHRoZSByYXcgYWRkcmVzcyBvZiB0aGlzIFtJbnRlcm5ldEFkZHJlc3NdLiBUaGUgcmVzdWx0IGlzIGVpdGhlciBhCiAgICogNCBvciAxNiBieXRlIGxvbmcgbGlzdC4gVGhlIHJldHVybmVkIGxpc3QgaXMgYSBjb3B5LCBtYWtpbmcgaXQgcG9zc2libGUKICAgKiB0byBjaGFuZ2UgdGhlIGxpc3Qgd2l0aG91dCBtb2RpZnlpbmcgdGhlIFtJbnRlcm5ldEFkZHJlc3NdLgogICAqLwogIFVpbnQ4TGlzdCBnZXQgcmF3QWRkcmVzczsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBbSW50ZXJuZXRBZGRyZXNzXSBpcyBhIGxvb3BiYWNrIGFkZHJlc3MuCiAgICovCiAgYm9vbCBnZXQgaXNMb29wYmFjazsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBbSW50ZXJuZXRBZGRyZXNzXXMgc2NvcGUgaXMgYSBsaW5rLWxvY2FsLgogICAqLwogIGJvb2wgZ2V0IGlzTGlua0xvY2FsOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFtJbnRlcm5ldEFkZHJlc3NdcyBzY29wZSBpcyBtdWx0aWNhc3QuCiAgICovCiAgYm9vbCBnZXQgaXNNdWx0aWNhc3Q7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgW0ludGVybmV0QWRkcmVzc10gZnJvbSBhIG51bWVyaWMgYWRkcmVzcy4KICAgKgogICAqIElmIHRoZSBhZGRyZXNzIGluIFthZGRyZXNzXSBpcyBub3QgYSBudW1lcmljIElQdjQKICAgKiAoZG90dGVkLWRlY2ltYWwgbm90YXRpb24pIG9yIElQdjYgKGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uKS4KICAgKiBhZGRyZXNzIFtBcmd1bWVudEVycm9yXSBpcyB0aHJvd24uCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBJbnRlcm5ldEFkZHJlc3MoU3RyaW5nIGFkZHJlc3MpOwoKICAvKioKICAgKiBQZXJmb3JtIGEgcmV2ZXJzZSBkbnMgbG9va3VwIG9uIHRoZSBbYWRkcmVzc10sIGNyZWF0aW5nIGEgbmV3CiAgICogW0ludGVybmV0QWRkcmVzc10gd2hlcmUgdGhlIGhvc3QgZmllbGQgc2V0IHRvIHRoZSByZXN1bHQuCiAgICovCiAgRnV0dXJlPEludGVybmV0QWRkcmVzcz4gcmV2ZXJzZSgpOwoKICAvKioKICAgKiBMb29rdXAgYSBob3N0LCByZXR1cm5pbmcgYSBGdXR1cmUgb2YgYSBsaXN0IG9mCiAgICogW0ludGVybmV0QWRkcmVzc11zLiBJZiBbdHlwZV0gaXMgW0ludGVybmV0QWRkcmVzc1R5cGUuQU5ZXSwgaXQKICAgKiB3aWxsIGxvb2t1cCBib3RoIElQIHZlcnNpb24gNCAoSVB2NCkgYW5kIElQIHZlcnNpb24gNiAoSVB2NikKICAgKiBhZGRyZXNzZXMuIElmIFt0eXBlXSBpcyBlaXRoZXIgW0ludGVybmV0QWRkcmVzc1R5cGUuSVB2NF0gb3IKICAgKiBbSW50ZXJuZXRBZGRyZXNzVHlwZS5JUHY2XSBpdCB3aWxsIG9ubHkgbG9va3VwIGFkZHJlc3NlcyBvZiB0aGUKICAgKiBzcGVjaWZpZWQgdHlwZS4gVGhlIG9yZGVyIG9mIHRoZSBsaXN0IGNhbiwgYW5kIG1vc3QgbGlrZWx5IHdpbGwsCiAgICogY2hhbmdlIG92ZXIgdGltZS4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPExpc3Q8SW50ZXJuZXRBZGRyZXNzPj4gbG9va3VwKFN0cmluZyBob3N0LAogICAgICB7SW50ZXJuZXRBZGRyZXNzVHlwZSB0eXBlOiBJbnRlcm5ldEFkZHJlc3NUeXBlLmFueX0pOwoKICAvKioKICAgKiBDbG9uZXMgdGhlIGdpdmVuIFthZGRyZXNzXSB3aXRoIHRoZSBuZXcgW2hvc3RdLgogICAqCiAgICogVGhlIFthZGRyZXNzXSBtdXN0IGJlIGFuIFtJbnRlcm5ldEFkZHJlc3NdIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBvbmUKICAgKiBvZiB0aGUgc3RhdGljIG1ldGhvZHMgb2YgdGhpcyBjbGFzcy4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgSW50ZXJuZXRBZGRyZXNzIF9jbG9uZVdpdGhOZXdIb3N0KAogICAgICBJbnRlcm5ldEFkZHJlc3MgYWRkcmVzcywgU3RyaW5nIGhvc3QpOwp9CgovKioKICogQSBbTmV0d29ya0ludGVyZmFjZV0gcmVwcmVzZW50cyBhbiBhY3RpdmUgbmV0d29yayBpbnRlcmZhY2Ugb24gdGhlIGN1cnJlbnQKICogc3lzdGVtLiBJdCBjb250YWlucyBhIGxpc3Qgb2YgW0ludGVybmV0QWRkcmVzc11lcyB0aGF0IGFyZSBib3VuZCB0byB0aGUKICogaW50ZXJmYWNlLgogKi8KYWJzdHJhY3QgY2xhc3MgTmV0d29ya0ludGVyZmFjZSB7CiAgLyoqCiAgICogR2V0IHRoZSBuYW1lIG9mIHRoZSBbTmV0d29ya0ludGVyZmFjZV0uCiAgICovCiAgU3RyaW5nIGdldCBuYW1lOwoKICAvKioKICAgKiBHZXQgdGhlIGluZGV4IG9mIHRoZSBbTmV0d29ya0ludGVyZmFjZV0uCiAgICovCiAgaW50IGdldCBpbmRleDsKCiAgLyoqCiAgICogR2V0IGEgbGlzdCBvZiBbSW50ZXJuZXRBZGRyZXNzXWVzIGN1cnJlbnRseSBib3VuZCB0byB0aGlzCiAgICogW05ldHdvcmtJbnRlcmZhY2VdLgogICAqLwogIExpc3Q8SW50ZXJuZXRBZGRyZXNzPiBnZXQgYWRkcmVzc2VzOwoKICAvKioKICAgKiBXaGV0aGVyIFtsaXN0XSBpcyBzdXBwb3J0ZWQuCiAgICoKICAgKiBbbGlzdF0gaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkIG9uIEFuZHJvaWQuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIGJvb2wgZ2V0IGxpc3RTdXBwb3J0ZWQ7CgogIC8qKgogICAqIFF1ZXJ5IHRoZSBzeXN0ZW0gZm9yIFtOZXR3b3JrSW50ZXJmYWNlXXMuCiAgICoKICAgKiBJZiBbaW5jbHVkZUxvb3BiYWNrXSBpcyBgdHJ1ZWAsIHRoZSByZXR1cm5lZCBsaXN0IHdpbGwgaW5jbHVkZSB0aGUKICAgKiBsb29wYmFjayBkZXZpY2UuIERlZmF1bHQgaXMgYGZhbHNlYC4KICAgKgogICAqIElmIFtpbmNsdWRlTGlua0xvY2FsXSBpcyBgdHJ1ZWAsIHRoZSBsaXN0IG9mIGFkZHJlc3NlcyBvZiB0aGUgcmV0dXJuZWQKICAgKiBbTmV0d29ya0ludGVyZmFjZV1zLCBtYXkgaW5jbHVkZSBsaW5rIGxvY2FsIGFkZHJlc3Nlcy4gRGVmYXVsdCBpcyBgZmFsc2VgLgogICAqCiAgICogSWYgW3R5cGVdIGlzIGVpdGhlciBbSW50ZXJuZXRBZGRyZXNzVHlwZS5JUHY0XSBvcgogICAqIFtJbnRlcm5ldEFkZHJlc3NUeXBlLklQdjZdIGl0IHdpbGwgb25seSBsb29rdXAgYWRkcmVzc2VzIG9mIHRoZQogICAqIHNwZWNpZmllZCB0eXBlLiBEZWZhdWx0IGlzIFtJbnRlcm5ldEFkZHJlc3NUeXBlLmFueV0uCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxMaXN0PE5ldHdvcmtJbnRlcmZhY2U+PiBsaXN0KAogICAgICB7Ym9vbCBpbmNsdWRlTG9vcGJhY2s6IGZhbHNlLAogICAgICBib29sIGluY2x1ZGVMaW5rTG9jYWw6IGZhbHNlLAogICAgICBJbnRlcm5ldEFkZHJlc3NUeXBlIHR5cGU6IEludGVybmV0QWRkcmVzc1R5cGUuYW55fSk7Cn0KCi8qKgogKiBBIFtSYXdTZXJ2ZXJTb2NrZXRdIHJlcHJlc2VudHMgYSBsaXN0ZW5pbmcgc29ja2V0LCBhbmQgcHJvdmlkZXMgYQogKiBzdHJlYW0gb2YgbG93LWxldmVsIFtSYXdTb2NrZXRdIG9iamVjdHMsIG9uZSBmb3IgZWFjaCBjb25uZWN0aW9uCiAqIG1hZGUgdG8gdGhlIGxpc3RlbmluZyBzb2NrZXQuCiAqCiAqIFNlZSBbUmF3U29ja2V0XSBmb3IgbW9yZSBpbmZvLgogKi8KYWJzdHJhY3QgY2xhc3MgUmF3U2VydmVyU29ja2V0IGltcGxlbWVudHMgU3RyZWFtPFJhd1NvY2tldD4gewogIC8qKgogICAqIFJldHVybnMgYSBmdXR1cmUgZm9yIGEgWzpSYXdTZXJ2ZXJTb2NrZXQ6XS4gV2hlbiB0aGUgZnV0dXJlCiAgICogY29tcGxldGVzIHRoZSBzZXJ2ZXIgc29ja2V0IGlzIGJvdW5kIHRvIHRoZSBnaXZlbiBbYWRkcmVzc10gYW5kCiAgICogW3BvcnRdIGFuZCBoYXMgc3RhcnRlZCBsaXN0ZW5pbmcgb24gaXQuCiAgICoKICAgKiBUaGUgW2FkZHJlc3NdIGNhbiBlaXRoZXIgYmUgYSBbU3RyaW5nXSBvciBhbgogICAqIFtJbnRlcm5ldEFkZHJlc3NdLiBJZiBbYWRkcmVzc10gaXMgYSBbU3RyaW5nXSwgW2JpbmRdIHdpbGwKICAgKiBwZXJmb3JtIGEgW0ludGVybmV0QWRkcmVzcy5sb29rdXBdIGFuZCB1c2UgdGhlIGZpcnN0IHZhbHVlIGluIHRoZQogICAqIGxpc3QuIFRvIGxpc3RlbiBvbiB0aGUgbG9vcGJhY2sgYWRhcHRlciwgd2hpY2ggd2lsbCBhbGxvdyBvbmx5CiAgICogaW5jb21pbmcgY29ubmVjdGlvbnMgZnJvbSB0aGUgbG9jYWwgaG9zdCwgdXNlIHRoZSB2YWx1ZQogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY0XSBvcgogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY2XS4gVG8gYWxsb3cgZm9yIGluY29taW5nCiAgICogY29ubmVjdGlvbiBmcm9tIHRoZSBuZXR3b3JrIHVzZSBlaXRoZXIgb25lIG9mIHRoZSB2YWx1ZXMKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmFueUlQdjRdIG9yIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2Nl0gdG8KICAgKiBiaW5kIHRvIGFsbCBpbnRlcmZhY2VzIG9yIHRoZSBJUCBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgaW50ZXJmYWNlLgogICAqCiAgICogSWYgYW4gSVAgdmVyc2lvbiA2IChJUHY2KSBhZGRyZXNzIGlzIHVzZWQsIGJvdGggSVAgdmVyc2lvbiA2CiAgICogKElQdjYpIGFuZCB2ZXJzaW9uIDQgKElQdjQpIGNvbm5lY3Rpb25zIHdpbGwgYmUgYWNjZXB0ZWQuIFRvCiAgICogcmVzdHJpY3QgdGhpcyB0byB2ZXJzaW9uIDYgKElQdjYpIG9ubHksIHVzZSBbdjZPbmx5XSB0byBzZXQKICAgKiB2ZXJzaW9uIDYgb25seS4KICAgKgogICAqIElmIFtwb3J0XSBoYXMgdGhlIHZhbHVlIFs6MDpdIGFuIGVwaGVtZXJhbCBwb3J0IHdpbGwKICAgKiBiZSBjaG9zZW4gYnkgdGhlIHN5c3RlbS4gVGhlIGFjdHVhbCBwb3J0IHVzZWQgY2FuIGJlIHJldHJpZXZlZAogICAqIHVzaW5nIHRoZSBbOnBvcnQ6XSBnZXR0ZXIuCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW2JhY2tsb2ddIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxpc3RlbgogICAqIGJhY2tsb2cgZm9yIHRoZSB1bmRlcmx5aW5nIE9TIGxpc3RlbiBzZXR1cC4gSWYgW2JhY2tsb2ddIGhhcyB0aGUKICAgKiB2YWx1ZSBvZiBbOjA6XSAodGhlIGRlZmF1bHQpIGEgcmVhc29uYWJsZSB2YWx1ZSB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW3NoYXJlZF0gc3BlY2lmaWVzIHdoZXRoZXIgYWRkaXRpb25hbCBSYXdTZXJ2ZXJTb2NrZXQKICAgKiBvYmplY3RzIGNhbiBiaW5kIHRvIHRoZSBzYW1lIGNvbWJpbmF0aW9uIG9mIGBhZGRyZXNzYCwgYHBvcnRgIGFuZCBgdjZPbmx5YC4KICAgKiBJZiBgc2hhcmVkYCBpcyBgdHJ1ZWAgYW5kIG1vcmUgYFJhd1NlcnZlclNvY2tldGBzIGZyb20gdGhpcyBpc29sYXRlIG9yCiAgICogb3RoZXIgaXNvbGF0ZXMgYXJlIGJvdW5kIHRvIHRoZSBwb3J0LCB0aGVuIHRoZSBpbmNvbWluZyBjb25uZWN0aW9ucyB3aWxsIGJlCiAgICogZGlzdHJpYnV0ZWQgYW1vbmcgYWxsIHRoZSBib3VuZCBgUmF3U2VydmVyU29ja2V0YHMuIENvbm5lY3Rpb25zIGNhbiBiZQogICAqIGRpc3RyaWJ1dGVkIG92ZXIgbXVsdGlwbGUgaXNvbGF0ZXMgdGhpcyB3YXkuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxSYXdTZXJ2ZXJTb2NrZXQ+IGJpbmQoYWRkcmVzcywgaW50IHBvcnQsCiAgICAgIHtpbnQgYmFja2xvZzogMCwgYm9vbCB2Nk9ubHk6IGZhbHNlLCBib29sIHNoYXJlZDogZmFsc2V9KTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcG9ydCB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIGludCBnZXQgcG9ydDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgYWRkcmVzcyB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzczsKCiAgLyoqCiAgICogQ2xvc2VzIHRoZSBzb2NrZXQuIFRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdoZW4gdGhlIHNvY2tldAogICAqIGlzIGZ1bGx5IGNsb3NlZCBhbmQgaXMgbm8gbG9uZ2VyIGJvdW5kLgogICAqLwogIEZ1dHVyZTxSYXdTZXJ2ZXJTb2NrZXQ+IGNsb3NlKCk7Cn0KCi8qKgogKiBBIFtTZXJ2ZXJTb2NrZXRdIHJlcHJlc2VudHMgYSBsaXN0ZW5pbmcgc29ja2V0LCBhbmQgcHJvdmlkZXMgYQogKiBzdHJlYW0gb2YgW1NvY2tldF0gb2JqZWN0cywgb25lIGZvciBlYWNoIGNvbm5lY3Rpb24gbWFkZSB0byB0aGUKICogbGlzdGVuaW5nIHNvY2tldC4KICoKICogU2VlIFtTb2NrZXRdIGZvciBtb3JlIGluZm8uCiAqLwphYnN0cmFjdCBjbGFzcyBTZXJ2ZXJTb2NrZXQgaW1wbGVtZW50cyBTdHJlYW08U29ja2V0PiB7CiAgLyoqCiAgICogUmV0dXJucyBhIGZ1dHVyZSBmb3IgYSBbOlNlcnZlclNvY2tldDpdLiBXaGVuIHRoZSBmdXR1cmUKICAgKiBjb21wbGV0ZXMgdGhlIHNlcnZlciBzb2NrZXQgaXMgYm91bmQgdG8gdGhlIGdpdmVuIFthZGRyZXNzXSBhbmQKICAgKiBbcG9ydF0gYW5kIGhhcyBzdGFydGVkIGxpc3RlbmluZyBvbiBpdC4KICAgKgogICAqIFRoZSBbYWRkcmVzc10gY2FuIGVpdGhlciBiZSBhIFtTdHJpbmddIG9yIGFuCiAgICogW0ludGVybmV0QWRkcmVzc10uIElmIFthZGRyZXNzXSBpcyBhIFtTdHJpbmddLCBbYmluZF0gd2lsbAogICAqIHBlcmZvcm0gYSBbSW50ZXJuZXRBZGRyZXNzLmxvb2t1cF0gYW5kIHVzZSB0aGUgZmlyc3QgdmFsdWUgaW4gdGhlCiAgICogbGlzdC4gVG8gbGlzdGVuIG9uIHRoZSBsb29wYmFjayBhZGFwdGVyLCB3aGljaCB3aWxsIGFsbG93IG9ubHkKICAgKiBpbmNvbWluZyBjb25uZWN0aW9ucyBmcm9tIHRoZSBsb2NhbCBob3N0LCB1c2UgdGhlIHZhbHVlCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjRdIG9yCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjZdLiBUbyBhbGxvdyBmb3IgaW5jb21pbmcKICAgKiBjb25uZWN0aW9uIGZyb20gdGhlIG5ldHdvcmsgdXNlIGVpdGhlciBvbmUgb2YgdGhlIHZhbHVlcwogICAqIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2NF0gb3IgW0ludGVybmV0QWRkcmVzcy5hbnlJUHY2XSB0bwogICAqIGJpbmQgdG8gYWxsIGludGVyZmFjZXMgb3IgdGhlIElQIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBpbnRlcmZhY2UuCiAgICoKICAgKiBJZiBhbiBJUCB2ZXJzaW9uIDYgKElQdjYpIGFkZHJlc3MgaXMgdXNlZCwgYm90aCBJUCB2ZXJzaW9uIDYKICAgKiAoSVB2NikgYW5kIHZlcnNpb24gNCAoSVB2NCkgY29ubmVjdGlvbnMgd2lsbCBiZSBhY2NlcHRlZC4gVG8KICAgKiByZXN0cmljdCB0aGlzIHRvIHZlcnNpb24gNiAoSVB2Nikgb25seSwgdXNlIFt2Nk9ubHldIHRvIHNldAogICAqIHZlcnNpb24gNiBvbmx5LgogICAqCiAgICogSWYgW3BvcnRdIGhhcyB0aGUgdmFsdWUgWzowOl0gYW4gZXBoZW1lcmFsIHBvcnQgd2lsbCBiZSBjaG9zZW4gYnkKICAgKiB0aGUgc3lzdGVtLiBUaGUgYWN0dWFsIHBvcnQgdXNlZCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZQogICAqIFtwb3J0XSBnZXR0ZXIuCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW2JhY2tsb2ddIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxpc3RlbgogICAqIGJhY2tsb2cgZm9yIHRoZSB1bmRlcmx5aW5nIE9TIGxpc3RlbiBzZXR1cC4gSWYgW2JhY2tsb2ddIGhhcyB0aGUKICAgKiB2YWx1ZSBvZiBbOjA6XSAodGhlIGRlZmF1bHQpIGEgcmVhc29uYWJsZSB2YWx1ZSB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW3NoYXJlZF0gc3BlY2lmaWVzIHdoZXRoZXIgYWRkaXRpb25hbCBTZXJ2ZXJTb2NrZXQKICAgKiBvYmplY3RzIGNhbiBiaW5kIHRvIHRoZSBzYW1lIGNvbWJpbmF0aW9uIG9mIGBhZGRyZXNzYCwgYHBvcnRgIGFuZCBgdjZPbmx5YC4KICAgKiBJZiBgc2hhcmVkYCBpcyBgdHJ1ZWAgYW5kIG1vcmUgYFNlcnZlclNvY2tldGBzIGZyb20gdGhpcyBpc29sYXRlIG9yIG90aGVyCiAgICogaXNvbGF0ZXMgYXJlIGJvdW5kIHRvIHRoZSBwb3J0LCB0aGVuIHRoZSBpbmNvbWluZyBjb25uZWN0aW9ucyB3aWxsIGJlCiAgICogZGlzdHJpYnV0ZWQgYW1vbmcgYWxsIHRoZSBib3VuZCBgU2VydmVyU29ja2V0YHMuIENvbm5lY3Rpb25zIGNhbiBiZQogICAqIGRpc3RyaWJ1dGVkIG92ZXIgbXVsdGlwbGUgaXNvbGF0ZXMgdGhpcyB3YXkuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxTZXJ2ZXJTb2NrZXQ+IGJpbmQoYWRkcmVzcywgaW50IHBvcnQsCiAgICAgIHtpbnQgYmFja2xvZzogMCwgYm9vbCB2Nk9ubHk6IGZhbHNlLCBib29sIHNoYXJlZDogZmFsc2V9KTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcG9ydCB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIGludCBnZXQgcG9ydDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgYWRkcmVzcyB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzczsKCiAgLyoqCiAgICogQ2xvc2VzIHRoZSBzb2NrZXQuIFRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdoZW4gdGhlIHNvY2tldAogICAqIGlzIGZ1bGx5IGNsb3NlZCBhbmQgaXMgbm8gbG9uZ2VyIGJvdW5kLgogICAqLwogIEZ1dHVyZTxTZXJ2ZXJTb2NrZXQ+IGNsb3NlKCk7Cn0KCi8qKgogKiBUaGUgW1NvY2tldERpcmVjdGlvbl0gaXMgdXNlZCBhcyBhIHBhcmFtZXRlciB0byBbU29ja2V0LmNsb3NlXSBhbmQKICogW1Jhd1NvY2tldC5jbG9zZV0gdG8gY2xvc2UgYSBzb2NrZXQgaW4gdGhlIHNwZWNpZmllZCBkaXJlY3Rpb24ocykuCiAqLwpjbGFzcyBTb2NrZXREaXJlY3Rpb24gewogIHN0YXRpYyBjb25zdCBTb2NrZXREaXJlY3Rpb24gcmVjZWl2ZSA9IGNvbnN0IFNvY2tldERpcmVjdGlvbi5fKDApOwogIHN0YXRpYyBjb25zdCBTb2NrZXREaXJlY3Rpb24gc2VuZCA9IGNvbnN0IFNvY2tldERpcmVjdGlvbi5fKDEpOwogIHN0YXRpYyBjb25zdCBTb2NrZXREaXJlY3Rpb24gYm90aCA9IGNvbnN0IFNvY2tldERpcmVjdGlvbi5fKDIpOwoKICBARGVwcmVjYXRlZCgiVXNlIHJlY2VpdmUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFNvY2tldERpcmVjdGlvbiBSRUNFSVZFID0gcmVjZWl2ZTsKICBARGVwcmVjYXRlZCgiVXNlIHNlbmQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFNvY2tldERpcmVjdGlvbiBTRU5EID0gc2VuZDsKICBARGVwcmVjYXRlZCgiVXNlIGJvdGggaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFNvY2tldERpcmVjdGlvbiBCT1RIID0gYm90aDsKCiAgZmluYWwgX3ZhbHVlOwoKICBjb25zdCBTb2NrZXREaXJlY3Rpb24uXyh0aGlzLl92YWx1ZSk7Cn0KCi8qKgogKiBUaGUgW1NvY2tldE9wdGlvbl0gaXMgdXNlZCBhcyBhIHBhcmFtZXRlciB0byBbU29ja2V0LnNldE9wdGlvbl0gYW5kCiAqIFtSYXdTb2NrZXQuc2V0T3B0aW9uXSB0byBzZXQgY3VzdG9taXplIHRoZSBiZWhhdmlvdXIgb2YgdGhlIHVuZGVybHlpbmcKICogc29ja2V0LgogKi8KY2xhc3MgU29ja2V0T3B0aW9uIHsKICAvKioKICAgKiBFbmFibGUgb3IgZGlzYWJsZSBuby1kZWxheSBvbiB0aGUgc29ja2V0LiBJZiB0Y3BOb0RlbGF5IGlzIGVuYWJsZWQsIHRoZQogICAqIHNvY2tldCB3aWxsIG5vdCBidWZmZXIgZGF0YSBpbnRlcm5hbGx5LCBidXQgaW5zdGVhZCB3cml0ZSBlYWNoIGRhdGEgY2h1bmsKICAgKiBhcyBhbiBpbmRpdmlkdWFsIFRDUCBwYWNrZXQuCiAgICoKICAgKiB0Y3BOb0RlbGF5IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuCiAgICovCiAgc3RhdGljIGNvbnN0IFNvY2tldE9wdGlvbiB0Y3BOb0RlbGF5ID0gY29uc3QgU29ja2V0T3B0aW9uLl8oMCk7CiAgQERlcHJlY2F0ZWQoIlVzZSB0Y3BOb0RlbGF5IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTb2NrZXRPcHRpb24gVENQX05PREVMQVkgPSB0Y3BOb0RlbGF5OwoKICBzdGF0aWMgY29uc3QgU29ja2V0T3B0aW9uIF9pcE11bHRpY2FzdExvb3AgPSBjb25zdCBTb2NrZXRPcHRpb24uXygxKTsKICBzdGF0aWMgY29uc3QgU29ja2V0T3B0aW9uIF9pcE11bHRpY2FzdEhvcHMgPSBjb25zdCBTb2NrZXRPcHRpb24uXygyKTsKICBzdGF0aWMgY29uc3QgU29ja2V0T3B0aW9uIF9pcE11bHRpY2FzdElmID0gY29uc3QgU29ja2V0T3B0aW9uLl8oMyk7CiAgc3RhdGljIGNvbnN0IFNvY2tldE9wdGlvbiBfaXBCcm9hZGNhc3QgPSBjb25zdCBTb2NrZXRPcHRpb24uXyg0KTsKCiAgZmluYWwgX3ZhbHVlOwoKICBjb25zdCBTb2NrZXRPcHRpb24uXyh0aGlzLl92YWx1ZSk7Cn0KCi8vIE11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggZW51bSBpbiBzb2NrZXQuY2MKZW51bSBfUmF3U29ja2V0T3B0aW9ucyB7CiAgU09MX1NPQ0tFVCwgLy8gMAogIElQUFJPVE9fSVAsIC8vIDEKICBJUF9NVUxUSUNBU1RfSUYsIC8vIDIKICBJUFBST1RPX0lQVjYsIC8vIDMKICBJUFY2X01VTFRJQ0FTVF9JRiwgLy8gNAogIElQUFJPVE9fVENQLCAvLyA1CiAgSVBQUk9UT19VRFAsIC8vIDYKfQoKLy8vIFRoZSBbUmF3U29ja2V0T3B0aW9uXSBpcyB1c2VkIGFzIGEgcGFyYW1ldGVyIHRvIFtTb2NrZXQuc2V0UmF3T3B0aW9uXSBhbmQKLy8vIFtSYXdTb2NrZXQuc2V0UmF3T3B0aW9uXSB0byBzZXQgY3VzdG9taXplIHRoZSBiZWhhdmlvdXIgb2YgdGhlIHVuZGVybHlpbmcKLy8vIHNvY2tldC4KLy8vCi8vLyBJdCBhbGxvd3MgZm9yIGZpbmUgZ3JhaW5lZCBjb250cm9sIG9mIHRoZSBzb2NrZXQgb3B0aW9ucywgYW5kIGl0cyB2YWx1ZXMgd2lsbAovLy8gYmUgcGFzc2VkIHRvIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtJ3MgaW1wbGVtZW50YXRpb24gb2Ygc2V0c29ja29wdCBhbmQKLy8vIGdldHNvY2tvcHQuCkBTaW5jZSgiMi4yIikKY2xhc3MgUmF3U29ja2V0T3B0aW9uIHsKICAvLy8gQ3JlYXRlcyBhIFJhd1NvY2tldE9wdGlvbiBmb3IgZ2V0UmF3T3B0aW9uIGFuZFNldFJhd09wdGlvbi4KICAvLy8KICAvLy8gQWxsIGFyZ3VtZW50cyBhcmUgcmVxdWlyZWQgYW5kIG11c3Qgbm90IGJlIG51bGwuCiAgLy8vCiAgLy8vIFRoZSBsZXZlbCBhbmQgb3B0aW9uIGFyZ3VtZW50cyBjb3JyZXNwb25kIHRvIGxldmVsIGFuZCBvcHRuYW1lIGFyZ3VtZW50cwogIC8vLyBvbiB0aGUgZ2V0L3NldHNvY2tvcHQgbmF0aXZlIGNhbGxzLgogIC8vLwogIC8vLyBUaGUgdmFsdWUgYXJndW1lbnQgYW5kIGl0cyBsZW5ndGggY29ycmVzcG9uZCB0byB0aGUgb3B0dmFsIGFuZCBsZW5ndGgKICAvLy8gYXJndW1lbnRzIG9uIHRoZSBuYXRpdmUgY2FsbC4KICAvLy8KICAvLy8gRm9yIGEgW2dldFJhd09wdGlvbl0gY2FsbCwgdGhlIHZhbHVlIHBhcmFtZXRlciB3aWxsIGJlIHVwZGF0ZWQgYWZ0ZXIgYQogIC8vLyBzdWNjZXNzZnVsIGNhbGwgKGFsdGhvdWdoIGl0cyBsZW5ndGggd2lsbCBub3QgYmUgY2hhbmdlZCkuCiAgLy8vCiAgLy8vIEZvciBhIFtzZXRSYXdPcHRpb25dIGNhbGwsIHRoZSB2YWx1ZSBwYXJhbWV0ZXIgd2lsbCBiZSB1c2VkIHNldCB0aGUKICAvLy8gb3B0aW9uLgogIGNvbnN0IFJhd1NvY2tldE9wdGlvbih0aGlzLmxldmVsLCB0aGlzLm9wdGlvbiwgdGhpcy52YWx1ZSk7CgogIC8vLyBDb252ZW5pZW5jZSBjb25zdHJ1Y3RvciBmb3IgY3JlYXRpbmcgYW4gaW50IGJhc2VkIFJhd1NvY2tldE9wdGlvbi4KICBmYWN0b3J5IFJhd1NvY2tldE9wdGlvbi5mcm9tSW50KGludCBsZXZlbCwgaW50IG9wdGlvbiwgaW50IHZhbHVlKSB7CiAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICB2YWx1ZSA9IDA7CiAgICB9CiAgICBmaW5hbCBVaW50OExpc3QgbGlzdCA9IFVpbnQ4TGlzdCg0KTsKICAgIGZpbmFsIGJ1ZmZlciA9IEJ5dGVEYXRhLnZpZXcobGlzdC5idWZmZXIpOwogICAgYnVmZmVyLnNldEludDMyKDAsIHZhbHVlKTsKICAgIHJldHVybiBSYXdTb2NrZXRPcHRpb24obGV2ZWwsIG9wdGlvbiwgbGlzdCk7CiAgfQoKICAvLy8gQ29udmVuaWVuY2UgY29uc3RydWN0b3IgZm9yIGNyZWF0aW5nIGEgYm9vbCBiYXNlZCBSYXdTb2NrZXRPcHRpb24uCiAgZmFjdG9yeSBSYXdTb2NrZXRPcHRpb24uZnJvbUJvb2woaW50IGxldmVsLCBpbnQgb3B0aW9uLCBib29sIHZhbHVlKSA9PgogICAgICBSYXdTb2NrZXRPcHRpb24uZnJvbUludChsZXZlbCwgb3B0aW9uLCB2YWx1ZSA9PSB0cnVlID8gMSA6IDApOwoKICAvLy8gVGhlIGxldmVsIGZvciB0aGUgb3B0aW9uIHRvIHNldCBvciBnZXQuCiAgLy8vCiAgLy8vIFNlZSBhbHNvOgogIC8vLyAgICogW1Jhd1NvY2tldE9wdGlvbi5sZXZlbFNvY2tldF0KICAvLy8gICAqIFtSYXdTb2NrZXRPcHRpb24ubGV2ZWxJUHY0XQogIC8vLyAgICogW1Jhd1NvY2tldE9wdGlvbi5sZXZlbElQdjZdCiAgLy8vICAgKiBbUmF3U29ja2V0T3B0aW9uLmxldmVsVGNwXQogIC8vLyAgICogW1Jhd1NvY2tldE9wdGlvbi5sZXZlbFVkcF0KICBmaW5hbCBpbnQgbGV2ZWw7CgogIC8vLyBUaGUgb3B0aW9uIHRvIHNldCBvciBnZXQuCiAgZmluYWwgaW50IG9wdGlvbjsKCiAgLy8vIFRoZSByYXcgZGF0YSB0byBzZXQsIG9yIHRoZSBhcnJheSB0byB3cml0ZSB0aGUgY3VycmVudCBvcHRpb24gdmFsdWUgaW50by4KICAvLy8KICAvLy8gVGhpcyBsaXN0IG11c3QgYmUgdGhlIGNvcnJlY3QgbGVuZ3RoIGZvciB0aGUgZXhwZWN0ZWQgb3B0aW9uLiBGb3IgbW9zdAogIC8vLyBvcHRpb25zIHRoYXQgdGFrZSBpbnQgb3IgYm9vbCB2YWx1ZXMsIHRoZSBsZW5ndGggc2hvdWxkIGJlIDQuIEZvciBvcHRpb25zCiAgLy8vIHRoYXQgZXhwZWN0IGEgc3RydWN0IChzdWNoIGFzIGFuIGluX2FkZHJfdCksIHRoZSBsZW5ndGggc2hvdWxkIGJlIHRoZQogIC8vLyBjb3JyZWN0IGxlbmd0aCBmb3IgdGhhdCBzdHJ1Y3QuCiAgZmluYWwgVWludDhMaXN0IHZhbHVlOwoKICAvLy8gU29ja2V0IGxldmVsIG9wdGlvbiBmb3IgU09MX1NPQ0tFVC4KICBzdGF0aWMgaW50IGdldCBsZXZlbFNvY2tldCA9PgogICAgICBfZ2V0T3B0aW9uVmFsdWUoX1Jhd1NvY2tldE9wdGlvbnMuU09MX1NPQ0tFVC5pbmRleCk7CgogIC8vLyBTb2NrZXQgbGV2ZWwgb3B0aW9uIGZvciBJUFBST1RPX0lQLgogIHN0YXRpYyBpbnQgZ2V0IGxldmVsSVB2NCA9PgogICAgICBfZ2V0T3B0aW9uVmFsdWUoX1Jhd1NvY2tldE9wdGlvbnMuSVBQUk9UT19JUC5pbmRleCk7CgogIC8vLyBTb2NrZXQgb3B0aW9uIGZvciBJUF9NVUxUSUNBU1RfSUYuCiAgc3RhdGljIGludCBnZXQgSVB2NE11bHRpY2FzdEludGVyZmFjZSA9PgogICAgICBfZ2V0T3B0aW9uVmFsdWUoX1Jhd1NvY2tldE9wdGlvbnMuSVBfTVVMVElDQVNUX0lGLmluZGV4KTsKCiAgLy8vIFNvY2tldCBsZXZlbCBvcHRpb24gZm9yIElQUFJPVE9fSVBWNi4KICBzdGF0aWMgaW50IGdldCBsZXZlbElQdjYgPT4KICAgICAgX2dldE9wdGlvblZhbHVlKF9SYXdTb2NrZXRPcHRpb25zLklQUFJPVE9fSVBWNi5pbmRleCk7CgogIC8vLyBTb2NrZXQgb3B0aW9uIGZvciBJUFY2X01VTFRJQ0FTVF9JRi4KICBzdGF0aWMgaW50IGdldCBJUHY2TXVsdGljYXN0SW50ZXJmYWNlID0+CiAgICAgIF9nZXRPcHRpb25WYWx1ZShfUmF3U29ja2V0T3B0aW9ucy5JUFY2X01VTFRJQ0FTVF9JRi5pbmRleCk7CgogIC8vLyBTb2NrZXQgbGV2ZWwgb3B0aW9uIGZvciBJUFBST1RPX1RDUC4KICBzdGF0aWMgaW50IGdldCBsZXZlbFRjcCA9PgogICAgICBfZ2V0T3B0aW9uVmFsdWUoX1Jhd1NvY2tldE9wdGlvbnMuSVBQUk9UT19UQ1AuaW5kZXgpOwoKICAvLy8gU29ja2V0IGxldmVsIG9wdGlvbiBmb3IgSVBQUk9UT19VRFAuCiAgc3RhdGljIGludCBnZXQgbGV2ZWxVZHAgPT4KICAgICAgX2dldE9wdGlvblZhbHVlKF9SYXdTb2NrZXRPcHRpb25zLklQUFJPVE9fVURQLmluZGV4KTsKCiAgZXh0ZXJuYWwgc3RhdGljIGludCBfZ2V0T3B0aW9uVmFsdWUoaW50IGtleSk7Cn0KCi8qKgogKiBFdmVudHMgZm9yIHRoZSBbUmF3U29ja2V0XS4KICovCmNsYXNzIFJhd1NvY2tldEV2ZW50IHsKICBzdGF0aWMgY29uc3QgUmF3U29ja2V0RXZlbnQgcmVhZCA9IGNvbnN0IFJhd1NvY2tldEV2ZW50Ll8oMCk7CiAgc3RhdGljIGNvbnN0IFJhd1NvY2tldEV2ZW50IHdyaXRlID0gY29uc3QgUmF3U29ja2V0RXZlbnQuXygxKTsKICBzdGF0aWMgY29uc3QgUmF3U29ja2V0RXZlbnQgcmVhZENsb3NlZCA9IGNvbnN0IFJhd1NvY2tldEV2ZW50Ll8oMik7CiAgc3RhdGljIGNvbnN0IFJhd1NvY2tldEV2ZW50IGNsb3NlZCA9IGNvbnN0IFJhd1NvY2tldEV2ZW50Ll8oMyk7CgogIEBEZXByZWNhdGVkKCJVc2UgcmVhZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUmF3U29ja2V0RXZlbnQgUkVBRCA9IHJlYWQ7CiAgQERlcHJlY2F0ZWQoIlVzZSB3cml0ZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUmF3U29ja2V0RXZlbnQgV1JJVEUgPSB3cml0ZTsKICBARGVwcmVjYXRlZCgiVXNlIHJlYWRDbG9zZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJhd1NvY2tldEV2ZW50IFJFQURfQ0xPU0VEID0gcmVhZENsb3NlZDsKICBARGVwcmVjYXRlZCgiVXNlIGNsb3NlZCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUmF3U29ja2V0RXZlbnQgQ0xPU0VEID0gY2xvc2VkOwoKICBmaW5hbCBpbnQgX3ZhbHVlOwoKICBjb25zdCBSYXdTb2NrZXRFdmVudC5fKHRoaXMuX3ZhbHVlKTsKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gY29uc3QgWwogICAgICAnUmF3U29ja2V0RXZlbnQucmVhZCcsCiAgICAgICdSYXdTb2NrZXRFdmVudC53cml0ZScsCiAgICAgICdSYXdTb2NrZXRFdmVudC5yZWFkQ2xvc2VkJywKICAgICAgJ1Jhd1NvY2tldEV2ZW50LmNsb3NlZCcKICAgIF1bX3ZhbHVlXTsKICB9Cn0KCi8vLyBSZXR1cm5lZCBieSB0aGUgYHN0YXJ0Q29ubmVjdGAgbWV0aG9kcyBvbiBjbGllbnQtc2lkZSBzb2NrZXQgdHlwZXMgYFNgLAovLy8gYENvbm5lY3Rpb25UYXNrPFM+YCBhbGxvd3MgY2FuY2VsbGluZyBhbiBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gYSBob3N0LgpjbGFzcyBDb25uZWN0aW9uVGFzazxTPiB7CiAgLy8vIEEgYEZ1dHVyZWAgdGhhdCBjb21wbGV0ZXMgd2l0aCB2YWx1ZSB0aGF0IGBTLmNvbm5lY3QoKWAgd291bGQgcmV0dXJuCiAgLy8vIHVubGVzcyBbY2FuY2VsXSBpcyBjYWxsZWQgb24gdGhpcyBbQ29ubmVjdGlvblRhc2tdLgogIC8vLwogIC8vLyBJZiBbY2FuY2VsXSBpcyBjYWxsZWQsIHRoZSBgRnV0dXJlYCBjb21wbGV0ZXMgd2l0aCBhIFtTb2NrZXRFeGNlcHRpb25dCiAgLy8vIGVycm9yIHdob3NlIG1lc3NhZ2UgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbm5lY3Rpb24gYXR0ZW1wdCB3YXMgY2FuY2VsbGVkLgogIGZpbmFsIEZ1dHVyZTxTPiBzb2NrZXQ7CiAgZmluYWwgdm9pZCBGdW5jdGlvbigpIF9vbkNhbmNlbDsKCiAgQ29ubmVjdGlvblRhc2suXyh7RnV0dXJlPFM+IHNvY2tldCwgdm9pZCBGdW5jdGlvbigpIG9uQ2FuY2VsfSkKICAgICAgOiBhc3NlcnQoc29ja2V0ICE9IG51bGwpLAogICAgICAgIGFzc2VydChvbkNhbmNlbCAhPSBudWxsKSwKICAgICAgICB0aGlzLnNvY2tldCA9IHNvY2tldCwKICAgICAgICB0aGlzLl9vbkNhbmNlbCA9IG9uQ2FuY2VsOwoKICAvLy8gQ2FuY2VscyB0aGUgY29ubmVjdGlvbiBhdHRlbXB0LgogIC8vLwogIC8vLyBUaGlzIGFsc28gY2F1c2VzIHRoZSBbc29ja2V0XSBgRnV0dXJlYCB0byBjb21wbGV0ZSB3aXRoIGEKICAvLy8gW1NvY2tldEV4Y2VwdGlvbl0gZXJyb3IuCiAgdm9pZCBjYW5jZWwoKSB7CiAgICBfb25DYW5jZWwoKTsKICB9Cn0KCi8qKgogKiBBIFtSYXdTb2NrZXRdIGlzIGFuIHVuYnVmZmVyZWQgaW50ZXJmYWNlIHRvIGEgVENQIHNvY2tldC4KICoKICogVGhlIHJhdyBzb2NrZXQgZGVsaXZlcnMgdGhlIGRhdGEgc3RyZWFtIGluIHRoZSBzYW1lIGNodW5rcyBhcyB0aGUgdW5kZXJseWluZwogKiBvcGVyYXRpbmcgc3lzdGVtLgogKgogKiBJdCBpcyBub3QgdGhlIHNhbWUgYXMgYQogKiBbUE9TSVggcmF3IHNvY2tldF0oaHR0cDovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW43L3Jhdy43Lmh0bWwpLgogKi8KYWJzdHJhY3QgY2xhc3MgUmF3U29ja2V0IGltcGxlbWVudHMgU3RyZWFtPFJhd1NvY2tldEV2ZW50PiB7CiAgLyoqCiAgICogU2V0IG9yIGdldCwgaWYgdGhlIFtSYXdTb2NrZXRdIHNob3VsZCBsaXN0ZW4gZm9yIFtSYXdTb2NrZXRFdmVudC5yZWFkXQogICAqIGV2ZW50cy4gRGVmYXVsdCBpcyBbOnRydWU6XS4KICAgKi8KICBib29sIHJlYWRFdmVudHNFbmFibGVkOwoKICAvKioKICAgKiBTZXQgb3IgZ2V0LCBpZiB0aGUgW1Jhd1NvY2tldF0gc2hvdWxkIGxpc3RlbiBmb3IgW1Jhd1NvY2tldEV2ZW50LndyaXRlXQogICAqIGV2ZW50cy4gRGVmYXVsdCBpcyBbOnRydWU6XS4KICAgKiBUaGlzIGlzIGEgb25lLXNob3QgbGlzdGVuZXIsIGFuZCB3cml0ZUV2ZW50c0VuYWJsZWQgbXVzdCBiZSBzZXQKICAgKiB0byB0cnVlIGFnYWluIHRvIHJlY2VpdmUgYW5vdGhlciB3cml0ZSBldmVudC4KICAgKi8KICBib29sIHdyaXRlRXZlbnRzRW5hYmxlZDsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBzb2NrZXQgY29ubmVjdGlvbiB0byB0aGUgaG9zdCBhbmQgcG9ydCBhbmQgcmV0dXJucyBhIFtGdXR1cmVdCiAgICogdGhhdCB3aWxsIGNvbXBsZXRlIHdpdGggZWl0aGVyIGEgW1Jhd1NvY2tldF0gb25jZSBjb25uZWN0ZWQgb3IgYW4gZXJyb3IKICAgKiBpZiB0aGUgaG9zdC1sb29rdXAgb3IgY29ubmVjdGlvbiBmYWlsZWQuCiAgICoKICAgKiBbaG9zdF0gY2FuIGVpdGhlciBiZSBhIFtTdHJpbmddIG9yIGFuIFtJbnRlcm5ldEFkZHJlc3NdLiBJZiBbaG9zdF0gaXMgYQogICAqIFtTdHJpbmddLCBbY29ubmVjdF0gd2lsbCBwZXJmb3JtIGEgW0ludGVybmV0QWRkcmVzcy5sb29rdXBdIGFuZCB0cnkKICAgKiBhbGwgcmV0dXJuZWQgW0ludGVybmV0QWRkcmVzc11lcywgdW50aWwgY29ubmVjdGVkLiBVbmxlc3MgYQogICAqIGNvbm5lY3Rpb24gd2FzIGVzdGFibGlzaGVkLCB0aGUgZXJyb3IgZnJvbSB0aGUgZmlyc3QgZmFpbGluZyBjb25uZWN0aW9uIGlzCiAgICogcmV0dXJuZWQuCiAgICoKICAgKiBUaGUgYXJndW1lbnQgW3NvdXJjZUFkZHJlc3NdIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxvY2FsCiAgICogYWRkcmVzcyB0byBiaW5kIHdoZW4gbWFraW5nIHRoZSBjb25uZWN0aW9uLiBgc291cmNlQWRkcmVzc2AgY2FuIGVpdGhlcgogICAqIGJlIGEgYFN0cmluZ2Agb3IgYW4gYEludGVybmV0QWRkcmVzc2AuIElmIGEgYFN0cmluZ2AgaXMgcGFzc2VkIGl0IG11c3QKICAgKiBob2xkIGEgbnVtZXJpYyBJUCBhZGRyZXNzLgogICAqCiAgICogVGhlIGFyZ3VtZW50IFt0aW1lb3V0XSBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIG1heGltdW0gYWxsb3dlZCB0aW1lIHRvIHdhaXQKICAgKiBmb3IgYSBjb25uZWN0aW9uIHRvIGJlIGVzdGFibGlzaGVkLiBJZiBbdGltZW91dF0gaXMgbG9uZ2VyIHRoYW4gdGhlIHN5c3RlbQogICAqIGxldmVsIHRpbWVvdXQgZHVyYXRpb24sIGEgdGltZW91dCBtYXkgb2NjdXIgc29vbmVyIHRoYW4gc3BlY2lmaWVkIGluCiAgICogW3RpbWVvdXRdLiBPbiB0aW1lb3V0LCBhIFtTb2NrZXRFeGNlcHRpb25dIGlzIHRocm93biBhbmQgYWxsIG9uZ29pbmcKICAgKiBjb25uZWN0aW9uIGF0dGVtcHRzIHRvIFtob3N0XSBhcmUgY2FuY2VsbGVkLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8UmF3U29ja2V0PiBjb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzcywgRHVyYXRpb24gdGltZW91dH0pOwoKICAvLy8gTGlrZSBbY29ubmVjdF0sIGJ1dCByZXR1cm5zIGEgW0Z1dHVyZV0gdGhhdCBjb21wbGV0ZXMgd2l0aCBhCiAgLy8vIFtDb25uZWN0aW9uVGFza10gdGhhdCBjYW4gYmUgY2FuY2VsbGVkIGlmIHRoZSBbUmF3U29ja2V0XSBpcyBubwogIC8vLyBsb25nZXIgbmVlZGVkLgogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8Q29ubmVjdGlvblRhc2s8UmF3U29ja2V0Pj4gc3RhcnRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzc30pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgYW5kIG5vbi1yZWFkIGJ5dGVzIGluIHRoZSBzb2NrZXQgdGhhdAogICAqIGNhbiBiZSByZWFkLgogICAqLwogIGludCBhdmFpbGFibGUoKTsKCiAgLyoqCiAgICogUmVhZCB1cCB0byBbbGVuXSBieXRlcyBmcm9tIHRoZSBzb2NrZXQuIFRoaXMgZnVuY3Rpb24gaXMKICAgKiBub24tYmxvY2tpbmcgYW5kIHdpbGwgb25seSByZXR1cm4gZGF0YSBpZiBkYXRhIGlzIGF2YWlsYWJsZS4gVGhlCiAgICogbnVtYmVyIG9mIGJ5dGVzIHJlYWQgY2FuIGJlIGxlc3MgdGhlbiBbbGVuXSBpZiBmZXdlciBieXRlcyBhcmUKICAgKiBhdmFpbGFibGUgZm9yIGltbWVkaWF0ZSByZWFkaW5nLiBJZiBubyBkYXRhIGlzIGF2YWlsYWJsZSBbOm51bGw6XQogICAqIGlzIHJldHVybmVkLgogICAqLwogIFVpbnQ4TGlzdCByZWFkKFtpbnQgbGVuXSk7CgogIC8qKgogICAqIFdyaXRlcyB1cCB0byBbY291bnRdIGJ5dGVzIG9mIHRoZSBidWZmZXIgZnJvbSBbb2Zmc2V0XSBidWZmZXIgb2Zmc2V0IHRvCiAgICogdGhlIHNvY2tldC4gVGhlIG51bWJlciBvZiBzdWNjZXNzZnVsbHkgd3JpdHRlbiBieXRlcyBpcyByZXR1cm5lZC4gVGhpcwogICAqIGZ1bmN0aW9uIGlzIG5vbi1ibG9ja2luZyBhbmQgd2lsbCBvbmx5IHdyaXRlIGRhdGEgaWYgYnVmZmVyIHNwYWNlIGlzCiAgICogYXZhaWxhYmxlIGluIHRoZSBzb2NrZXQuCiAgICoKICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgW29mZnNldF0gaXMgMCwgYW5kIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBbY291bnRdIGlzCiAgICogWzpidWZmZXIubGVuZ3RoIC0gb2Zmc2V0Ol0uCiAgICovCiAgaW50IHdyaXRlKExpc3Q8aW50PiBidWZmZXIsIFtpbnQgb2Zmc2V0LCBpbnQgY291bnRdKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcG9ydCB1c2VkIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIGludCBnZXQgcG9ydDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmVtb3RlIHBvcnQgY29ubmVjdGVkIHRvIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIGludCBnZXQgcmVtb3RlUG9ydDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgW0ludGVybmV0QWRkcmVzc10gdXNlZCB0byBjb25uZWN0IHRoaXMgc29ja2V0LgogICAqLwogIEludGVybmV0QWRkcmVzcyBnZXQgYWRkcmVzczsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmVtb3RlIFtJbnRlcm5ldEFkZHJlc3NdIGNvbm5lY3RlZCB0byBieSB0aGlzIHNvY2tldC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IHJlbW90ZUFkZHJlc3M7CgogIC8qKgogICAqIENsb3NlcyB0aGUgc29ja2V0LiBSZXR1cm5zIGEgRnV0dXJlIHRoYXQgY29tcGxldGVzIHdpdGggW3RoaXNdIHdoZW4gdGhlCiAgICogdW5kZXJseWluZyBjb25uZWN0aW9uIGlzIGNvbXBsZXRlbHkgZGVzdHJveWVkLgogICAqCiAgICogQ2FsbGluZyBbY2xvc2VdIHdpbGwgbmV2ZXIgdGhyb3cgYW4gZXhjZXB0aW9uCiAgICogYW5kIGNhbGxpbmcgaXQgc2V2ZXJhbCB0aW1lcyBpcyBzdXBwb3J0ZWQuIENhbGxpbmcgW2Nsb3NlXSBjYW4gcmVzdWx0IGluCiAgICogYSBbUmF3U29ja2V0RXZlbnQucmVhZENsb3NlZF0gZXZlbnQuCiAgICovCiAgRnV0dXJlPFJhd1NvY2tldD4gY2xvc2UoKTsKCiAgLyoqCiAgICogU2h1dGRvd24gdGhlIHNvY2tldCBpbiB0aGUgW2RpcmVjdGlvbl0uIENhbGxpbmcgW3NodXRkb3duXSB3aWxsIG5ldmVyCiAgICogdGhyb3cgYW4gZXhjZXB0aW9uIGFuZCBjYWxsaW5nIGl0IHNldmVyYWwgdGltZXMgaXMgc3VwcG9ydGVkLiBDYWxsaW5nCiAgICogc2h1dGRvd24gd2l0aCBlaXRoZXIgW1NvY2tldERpcmVjdGlvbi5ib3RoXSBvciBbU29ja2V0RGlyZWN0aW9uLnJlY2VpdmVdCiAgICogY2FuIHJlc3VsdCBpbiBhIFtSYXdTb2NrZXRFdmVudC5yZWFkQ2xvc2VkXSBldmVudC4KICAgKi8KICB2b2lkIHNodXRkb3duKFNvY2tldERpcmVjdGlvbiBkaXJlY3Rpb24pOwoKICAvKioKICAgKiBVc2UgW3NldE9wdGlvbl0gdG8gY3VzdG9taXplIHRoZSBbUmF3U29ja2V0XS4gU2VlIFtTb2NrZXRPcHRpb25dIGZvcgogICAqIGF2YWlsYWJsZSBvcHRpb25zLgogICAqCiAgICogUmV0dXJucyBbOnRydWU6XSBpZiB0aGUgb3B0aW9uIHdhcyBzZXQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBvdGhlcndpc2UuCiAgICovCiAgYm9vbCBzZXRPcHRpb24oU29ja2V0T3B0aW9uIG9wdGlvbiwgYm9vbCBlbmFibGVkKTsKCiAgLyoqCiAgICogVXNlIFtnZXRSYXdPcHRpb25dIHRvIGdldCBsb3cgbGV2ZWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFtSYXdTb2NrZXRdLiBTZWUKICAgKiBbUmF3U29ja2V0T3B0aW9uXSBmb3IgYXZhaWxhYmxlIG9wdGlvbnMuCiAgICoKICAgKiBSZXR1cm5zIHRoZSBbUmF3U29ja2V0T3B0aW9uLnZhbHVlXSBvbiBzdWNjZXNzLgogICAqCiAgICogVGhyb3dzIGFuIFtPU0Vycm9yXSBvbiBmYWlsdXJlLgogICAqLwogIEBTaW5jZSgiMi4yIikKICBVaW50OExpc3QgZ2V0UmF3T3B0aW9uKFJhd1NvY2tldE9wdGlvbiBvcHRpb24pOwoKICAvKioKICAgKiBVc2UgW3NldFJhd09wdGlvbl0gdG8gY3VzdG9taXplIHRoZSBbUmF3U29ja2V0XS4gU2VlIFtSYXdTb2NrZXRPcHRpb25dIGZvcgogICAqIGF2YWlsYWJsZSBvcHRpb25zLgogICAqCiAgICogVGhyb3dzIGFuIFtPU0Vycm9yXSBvbiBmYWlsdXJlLgogICAqLwogIEBTaW5jZSgiMi4yIikKICB2b2lkIHNldFJhd09wdGlvbihSYXdTb2NrZXRPcHRpb24gb3B0aW9uKTsKfQoKLyoqCiAqIEEgaGlnaC1sZXZlbCBjbGFzcyBmb3IgY29tbXVuaWNhdGluZyBvdmVyIGEgVENQIHNvY2tldC4KICoKICogVGhlIFtTb2NrZXRdIGV4cG9zZXMgYm90aCBhIFtTdHJlYW1dIGFuZCBhIFtJT1NpbmtdIGludGVyZmFjZSwgbWFraW5nIGl0CiAqIGlkZWFsIGZvciB1c2luZyB0b2dldGhlciB3aXRoIG90aGVyIFtTdHJlYW1dcy4KICovCmFic3RyYWN0IGNsYXNzIFNvY2tldCBpbXBsZW1lbnRzIFN0cmVhbTxVaW50OExpc3Q+LCBJT1NpbmsgewogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgc29ja2V0IGNvbm5lY3Rpb24gdG8gdGhlIGhvc3QgYW5kIHBvcnQgYW5kIHJldHVybnMgYSBbRnV0dXJlXQogICAqIHRoYXQgd2lsbCBjb21wbGV0ZSB3aXRoIGVpdGhlciBhIFtTb2NrZXRdIG9uY2UgY29ubmVjdGVkIG9yIGFuIGVycm9yCiAgICogaWYgdGhlIGhvc3QtbG9va3VwIG9yIGNvbm5lY3Rpb24gZmFpbGVkLgogICAqCiAgICogW2hvc3RdIGNhbiBlaXRoZXIgYmUgYSBbU3RyaW5nXSBvciBhbiBbSW50ZXJuZXRBZGRyZXNzXS4gSWYgW2hvc3RdIGlzIGEKICAgKiBbU3RyaW5nXSwgW2Nvbm5lY3RdIHdpbGwgcGVyZm9ybSBhIFtJbnRlcm5ldEFkZHJlc3MubG9va3VwXSBhbmQgdHJ5CiAgICogYWxsIHJldHVybmVkIFtJbnRlcm5ldEFkZHJlc3NdZXMsIHVudGlsIGNvbm5lY3RlZC4gVW5sZXNzIGEKICAgKiBjb25uZWN0aW9uIHdhcyBlc3RhYmxpc2hlZCwgdGhlIGVycm9yIGZyb20gdGhlIGZpcnN0IGZhaWxpbmcgY29ubmVjdGlvbiBpcwogICAqIHJldHVybmVkLgogICAqCiAgICogVGhlIGFyZ3VtZW50IFtzb3VyY2VBZGRyZXNzXSBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBsb2NhbAogICAqIGFkZHJlc3MgdG8gYmluZCB3aGVuIG1ha2luZyB0aGUgY29ubmVjdGlvbi4gYHNvdXJjZUFkZHJlc3NgIGNhbiBlaXRoZXIKICAgKiBiZSBhIGBTdHJpbmdgIG9yIGFuIGBJbnRlcm5ldEFkZHJlc3NgLiBJZiBhIGBTdHJpbmdgIGlzIHBhc3NlZCBpdCBtdXN0CiAgICogaG9sZCBhIG51bWVyaWMgSVAgYWRkcmVzcy4KICAgKgogICAqIFRoZSBhcmd1bWVudCBbdGltZW91dF0gaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBtYXhpbXVtIGFsbG93ZWQgdGltZSB0byB3YWl0CiAgICogZm9yIGEgY29ubmVjdGlvbiB0byBiZSBlc3RhYmxpc2hlZC4gSWYgW3RpbWVvdXRdIGlzIGxvbmdlciB0aGFuIHRoZSBzeXN0ZW0KICAgKiBsZXZlbCB0aW1lb3V0IGR1cmF0aW9uLCBhIHRpbWVvdXQgbWF5IG9jY3VyIHNvb25lciB0aGFuIHNwZWNpZmllZCBpbgogICAqIFt0aW1lb3V0XS4gT24gdGltZW91dCwgYSBbU29ja2V0RXhjZXB0aW9uXSBpcyB0aHJvd24gYW5kIGFsbCBvbmdvaW5nCiAgICogY29ubmVjdGlvbiBhdHRlbXB0cyB0byBbaG9zdF0gYXJlIGNhbmNlbGxlZC4KICAgKi8KICBzdGF0aWMgRnV0dXJlPFNvY2tldD4gY29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KSB7CiAgICBmaW5hbCBJT092ZXJyaWRlcyBvdmVycmlkZXMgPSBJT092ZXJyaWRlcy5jdXJyZW50OwogICAgaWYgKG92ZXJyaWRlcyA9PSBudWxsKSB7CiAgICAgIHJldHVybiBTb2NrZXQuX2Nvbm5lY3QoaG9zdCwgcG9ydCwKICAgICAgICAgIHNvdXJjZUFkZHJlc3M6IHNvdXJjZUFkZHJlc3MsIHRpbWVvdXQ6IHRpbWVvdXQpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5zb2NrZXRDb25uZWN0KGhvc3QsIHBvcnQsCiAgICAgICAgc291cmNlQWRkcmVzczogc291cmNlQWRkcmVzcywgdGltZW91dDogdGltZW91dCk7CiAgfQoKICAvLy8gTGlrZSBbY29ubmVjdF0sIGJ1dCByZXR1cm5zIGEgW0Z1dHVyZV0gdGhhdCBjb21wbGV0ZXMgd2l0aCBhCiAgLy8vIFtDb25uZWN0aW9uVGFza10gdGhhdCBjYW4gYmUgY2FuY2VsbGVkIGlmIHRoZSBbU29ja2V0XSBpcyBubwogIC8vLyBsb25nZXIgbmVlZGVkLgogIHN0YXRpYyBGdXR1cmU8Q29ubmVjdGlvblRhc2s8U29ja2V0Pj4gc3RhcnRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzc30pIHsKICAgIGZpbmFsIElPT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IElPT3ZlcnJpZGVzLmN1cnJlbnQ7CiAgICBpZiAob3ZlcnJpZGVzID09IG51bGwpIHsKICAgICAgcmV0dXJuIFNvY2tldC5fc3RhcnRDb25uZWN0KGhvc3QsIHBvcnQsIHNvdXJjZUFkZHJlc3M6IHNvdXJjZUFkZHJlc3MpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5zb2NrZXRTdGFydENvbm5lY3QoaG9zdCwgcG9ydCwKICAgICAgICBzb3VyY2VBZGRyZXNzOiBzb3VyY2VBZGRyZXNzKTsKICB9CgogIGV4dGVybmFsIHN0YXRpYyBGdXR1cmU8U29ja2V0PiBfY29ubmVjdChob3N0LCBpbnQgcG9ydCwKICAgICAge3NvdXJjZUFkZHJlc3MsIER1cmF0aW9uIHRpbWVvdXR9KTsKCiAgZXh0ZXJuYWwgc3RhdGljIEZ1dHVyZTxDb25uZWN0aW9uVGFzazxTb2NrZXQ+PiBfc3RhcnRDb25uZWN0KGhvc3QsIGludCBwb3J0LAogICAgICB7c291cmNlQWRkcmVzc30pOwoKICAvKioKICAgKiBEZXN0cm95IHRoZSBzb2NrZXQgaW4gYm90aCBkaXJlY3Rpb25zLiBDYWxsaW5nIFtkZXN0cm95XSB3aWxsIG1ha2UgdGhlCiAgICogc2VuZCBhIGNsb3NlIGV2ZW50IG9uIHRoZSBzdHJlYW0gYW5kIHdpbGwgbm8gbG9uZ2VyIHJlYWN0IG9uIGRhdGEgYmVpbmcKICAgKiBwaXBlZCB0byBpdC4KICAgKgogICAqIENhbGwgW2Nsb3NlXShpbmhlcml0ZWQgZnJvbSBbSU9TaW5rXSkgdG8gb25seSBjbG9zZSB0aGUgW1NvY2tldF0KICAgKiBmb3Igc2VuZGluZyBkYXRhLgogICAqLwogIHZvaWQgZGVzdHJveSgpOwoKICAvKioKICAgKiBVc2UgW3NldE9wdGlvbl0gdG8gY3VzdG9taXplIHRoZSBbUmF3U29ja2V0XS4gU2VlIFtTb2NrZXRPcHRpb25dIGZvcgogICAqIGF2YWlsYWJsZSBvcHRpb25zLgogICAqCiAgICogUmV0dXJucyBbOnRydWU6XSBpZiB0aGUgb3B0aW9uIHdhcyBzZXQgc3VjY2Vzc2Z1bGx5LCBmYWxzZSBvdGhlcndpc2UuCiAgICovCiAgYm9vbCBzZXRPcHRpb24oU29ja2V0T3B0aW9uIG9wdGlvbiwgYm9vbCBlbmFibGVkKTsKCiAgLyoqCiAgICogVXNlIFtnZXRSYXdPcHRpb25dIHRvIGdldCBsb3cgbGV2ZWwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFtSYXdTb2NrZXRdLiBTZWUKICAgKiBbUmF3U29ja2V0T3B0aW9uXSBmb3IgYXZhaWxhYmxlIG9wdGlvbnMuCiAgICoKICAgKiBSZXR1cm5zIHRoZSBbUmF3U29ja2V0T3B0aW9uLnZhbHVlXSBvbiBzdWNjZXNzLgogICAqCiAgICogVGhyb3dzIGFuIFtPU0Vycm9yXSBvbiBmYWlsdXJlLgogICAqLwogIFVpbnQ4TGlzdCBnZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbik7CgogIC8qKgogICAqIFVzZSBbc2V0UmF3T3B0aW9uXSB0byBjdXN0b21pemUgdGhlIFtSYXdTb2NrZXRdLiBTZWUgW1Jhd1NvY2tldE9wdGlvbl0gZm9yCiAgICogYXZhaWxhYmxlIG9wdGlvbnMuCiAgICoKICAgKiBUaHJvd3MgYW4gW09TRXJyb3JdIG9uIGZhaWx1cmUuCiAgICovCiAgdm9pZCBzZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbik7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHBvcnQgdXNlZCBieSB0aGlzIHNvY2tldC4KICAgKi8KICBpbnQgZ2V0IHBvcnQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHJlbW90ZSBwb3J0IGNvbm5lY3RlZCB0byBieSB0aGlzIHNvY2tldC4KICAgKi8KICBpbnQgZ2V0IHJlbW90ZVBvcnQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIFtJbnRlcm5ldEFkZHJlc3NdIHVzZWQgdG8gY29ubmVjdCB0aGlzIHNvY2tldC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3M7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHJlbW90ZSBbSW50ZXJuZXRBZGRyZXNzXSBjb25uZWN0ZWQgdG8gYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgSW50ZXJuZXRBZGRyZXNzIGdldCByZW1vdGVBZGRyZXNzOwoKICBGdXR1cmUgY2xvc2UoKTsKCiAgRnV0dXJlIGdldCBkb25lOwp9CgovKioKICogRGF0YWdyYW0gcGFja2FnZS4gRGF0YSBzZW50IHRvIGFuZCByZWNlaXZlZCBmcm9tIGRhdGFncmFtIHNvY2tldHMKICogY29udGFpbnMgdGhlIGludGVybmV0IGFkZHJlc3MgYW5kIHBvcnQgb2YgdGhlIGRlc3RpbmF0aW9uIG9yIHNvdXJjZQogKiB0b2dldGVyIHdpdGggdGhlIGRhdGEuCiAqLwpjbGFzcyBEYXRhZ3JhbSB7CiAgVWludDhMaXN0IGRhdGE7CiAgSW50ZXJuZXRBZGRyZXNzIGFkZHJlc3M7CiAgaW50IHBvcnQ7CgogIERhdGFncmFtKHRoaXMuZGF0YSwgdGhpcy5hZGRyZXNzLCB0aGlzLnBvcnQpOwp9CgovKioKICogQSBbUmF3RGF0YWdyYW1Tb2NrZXRdIGlzIGFuIHVuYnVmZmVyZWQgaW50ZXJmYWNlIHRvIGEgVURQIHNvY2tldC4KICoKICogVGhlIHJhdyBkYXRhZ3JhbSBzb2NrZXQgZGVsaXZlcnMgdGhlIGRhdGFncmFtcyBpbiB0aGUgc2FtZSBjaHVua3MgYXMgdGhlCiAqIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbS4gSXQncyBhIFtTdHJlYW1dIG9mIFtSYXdTb2NrZXRFdmVudF1zLgogKgogKiBOb3RlIHRoYXQgdGhlIGV2ZW50IFtSYXdTb2NrZXRFdmVudC5yZWFkQ2xvc2VkXSB3aWxsIG5ldmVyIGJlCiAqIHJlY2VpdmVkIGFzIGFuIFVEUCBzb2NrZXQgY2Fubm90IGJlIGNsb3NlZCBieSBhIHJlbW90ZSBwZWVyLgogKgogKiBJdCBpcyBub3QgdGhlIHNhbWUgYXMgYQogKiBbUE9TSVggcmF3IHNvY2tldF0oaHR0cDovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW43L3Jhdy43Lmh0bWwpLgogKi8KYWJzdHJhY3QgY2xhc3MgUmF3RGF0YWdyYW1Tb2NrZXQgZXh0ZW5kcyBTdHJlYW08UmF3U29ja2V0RXZlbnQ+IHsKICAvKioKICAgKiBTZXQgb3IgZ2V0LCBpZiB0aGUgW1Jhd0RhdGFncmFtU29ja2V0XSBzaG91bGQgbGlzdGVuIGZvcgogICAqIFtSYXdTb2NrZXRFdmVudC5yZWFkXSBldmVudHMuIERlZmF1bHQgaXMgWzp0cnVlOl0uCiAgICovCiAgYm9vbCByZWFkRXZlbnRzRW5hYmxlZDsKCiAgLyoqCiAgICogU2V0IG9yIGdldCwgaWYgdGhlIFtSYXdEYXRhZ3JhbVNvY2tldF0gc2hvdWxkIGxpc3RlbiBmb3IKICAgKiBbUmF3U29ja2V0RXZlbnQud3JpdGVdIGV2ZW50cy4gRGVmYXVsdCBpcyBbOnRydWU6XS4gIFRoaXMgaXMgYQogICAqIG9uZS1zaG90IGxpc3RlbmVyLCBhbmQgd3JpdGVFdmVudHNFbmFibGVkIG11c3QgYmUgc2V0IHRvIHRydWUKICAgKiBhZ2FpbiB0byByZWNlaXZlIGFub3RoZXIgd3JpdGUgZXZlbnQuCiAgICovCiAgYm9vbCB3cml0ZUV2ZW50c0VuYWJsZWQ7CgogIC8qKgogICAqIFNldCBvciBnZXQsIHdoZXRoZXIgbXVsdGljYXN0IHRyYWZmaWMgaXMgbG9vcGVkIGJhY2sgdG8gdGhlIGhvc3QuCiAgICoKICAgKiBCeSBkZWZhdWx0IG11bHRpY2FzdCBsb29wYmFjayBpcyBlbmFibGVkLgogICAqLwogIGJvb2wgbXVsdGljYXN0TG9vcGJhY2s7CgogIC8qKgogICAqIFNldCBvciBnZXQsIHRoZSBtYXhpbXVtIG5ldHdvcmsgaG9wcyBmb3IgbXVsdGljYXN0IHBhY2thZ2VzCiAgICogb3JpZ2luYXRpbmcgZnJvbSB0aGlzIHNvY2tldC4KICAgKgogICAqIEZvciBJUHY0IHRoaXMgaXMgcmVmZXJyZWQgdG8gYXMgVFRMICh0aW1lIHRvIGxpdmUpLgogICAqCiAgICogQnkgZGVmYXVsdCB0aGlzIHZhbHVlIGlzIDEgY2F1c2luZyBtdWx0aWNhc3QgdHJhZmZpYyB0byBzdGF5IG9uCiAgICogdGhlIGxvY2FsIG5ldHdvcmsuCiAgICovCiAgaW50IG11bHRpY2FzdEhvcHM7CgogIC8qKgogICAqIFNldCBvciBnZXQsIHRoZSBuZXR3b3JrIGludGVyZmFjZSB1c2VkIGZvciBvdXRnb2luZyBtdWx0aWNhc3QgcGFja2FnZXMuCiAgICoKICAgKiBBIHZhbHVlIG9mIGBudWxsYGluZGljYXRlIHRoYXQgdGhlIHN5c3RlbSBjaG9vc2VzIHRoZSBuZXR3b3JrCiAgICogaW50ZXJmYWNlIHRvIHVzZS4KICAgKgogICAqIEJ5IGRlZmF1bHQgdGhpcyB2YWx1ZSBpcyBgbnVsbGAKICAgKi8KICBARGVwcmVjYXRlZCgiVGhpcyBwcm9wZXJ0eSBpcyBub3QgaW1wbGVtZW50ZWQuIFVzZSBnZXRSYXdPcHRpb24gYW5kICIKICAgICAgInNldFJhd09wdGlvbiBpbnN0ZWFkLiIpCiAgTmV0d29ya0ludGVyZmFjZSBtdWx0aWNhc3RJbnRlcmZhY2U7CgogIC8qKgogICAqIFNldCBvciBnZXQsIHdoZXRoZXIgSVB2NCBicm9hZGNhc3QgaXMgZW5hYmxlZC4KICAgKgogICAqIElQdjQgYnJvYWRjYXN0IG5lZWRzIHRvIGJlIGVuYWJsZWQgYnkgdGhlIHNlbmRlciBmb3Igc2VuZGluZyBJUHY0CiAgICogYnJvYWRjYXN0IHBhY2thZ2VzLiBCeSBkZWZhdWx0IElQdjQgYnJvYWRjYXN0IGlzIGRpc2FibGVkLgogICAqCiAgICogRm9yIElQdjYgdGhlcmUgaXMgbm8gZ2VuZXJhbCBicm9hZGNhc3QgbWVjaGFuaXNtLiBVc2UgbXVsdGljYXN0CiAgICogaW5zdGVhZC4KICAgKi8KICBib29sIGJyb2FkY2FzdEVuYWJsZWQ7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgcmF3IGRhdGFncmFtIHNvY2tldCBiaW5kaW5nIGl0IHRvIGFuIGFkZHJlc3MgYW5kCiAgICogcG9ydC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgRnV0dXJlPFJhd0RhdGFncmFtU29ja2V0PiBiaW5kKGhvc3QsIGludCBwb3J0LAogICAgICB7Ym9vbCByZXVzZUFkZHJlc3M6IHRydWUsIGJvb2wgcmV1c2VQb3J0OiBmYWxzZSwgaW50IHR0bDogMX0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3J0IHVzZWQgYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgaW50IGdldCBwb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBhZGRyZXNzIHVzZWQgYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgSW50ZXJuZXRBZGRyZXNzIGdldCBhZGRyZXNzOwoKICAvKioKICAgKiBDbG9zZSB0aGUgZGF0YWdyYW0gc29ja2V0LgogICAqLwogIHZvaWQgY2xvc2UoKTsKCiAgLyoqCiAgICogU2VuZCBhIGRhdGFncmFtLgogICAqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4uIFRoaXMgd2lsbCBhbHdheXMgYmUgZWl0aGVyCiAgICogdGhlIHNpemUgb2YgW2J1ZmZlcl0gb3IgYDBgLgogICAqLwogIGludCBzZW5kKExpc3Q8aW50PiBidWZmZXIsIEludGVybmV0QWRkcmVzcyBhZGRyZXNzLCBpbnQgcG9ydCk7CgogIC8qKgogICAqIFJlY2VpdmUgYSBkYXRhZ3JhbS4gSWYgdGhlcmUgYXJlIG5vIGRhdGFncmFtcyBhdmFpbGFibGUgYG51bGxgIGlzCiAgICogcmV0dXJuZWQuCiAgICoKICAgKiBUaGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIGRhdGFncmFtIHRoYXQgY2FuIGJlIHJlY2VpdmVkIGlzIDY1NTAzIGJ5dGVzLgogICAqLwogIERhdGFncmFtIHJlY2VpdmUoKTsKCiAgLyoqCiAgICogSm9pbiBhIG11bHRpY2FzdCBncm91cC4KICAgKgogICAqIElmIGFuIGVycm9yIG9jY3VyIHdoZW4gdHJ5aW5nIHRvIGpvaW4gdGhlIG11bHRpY2FzdCBncm91cCBhbgogICAqIGV4Y2VwdGlvbiBpcyB0aHJvd24uCiAgICovCiAgdm9pZCBqb2luTXVsdGljYXN0KEludGVybmV0QWRkcmVzcyBncm91cCwgW05ldHdvcmtJbnRlcmZhY2UgaW50ZXJmYWNlXSk7CgogIC8qKgogICAqIExlYXZlIGEgbXVsdGljYXN0IGdyb3VwLgogICAqCiAgICogSWYgYW4gZXJyb3Igb2NjdXIgd2hlbiB0cnlpbmcgdG8gam9pbiB0aGUgbXVsdGljYXNlIGdyb3VwIGFuCiAgICogZXhjZXB0aW9uIGlzIHRocm93bi4KICAgKi8KICB2b2lkIGxlYXZlTXVsdGljYXN0KEludGVybmV0QWRkcmVzcyBncm91cCwgW05ldHdvcmtJbnRlcmZhY2UgaW50ZXJmYWNlXSk7CgogIC8qKgogICAqIFVzZSBbZ2V0UmF3T3B0aW9uXSB0byBnZXQgbG93IGxldmVsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBbUmF3U29ja2V0XS4gU2VlCiAgICogW1Jhd1NvY2tldE9wdGlvbl0gZm9yIGF2YWlsYWJsZSBvcHRpb25zLgogICAqCiAgICogUmV0dXJucyBbUmF3U29ja2V0T3B0aW9uLnZhbHVlXSBvbiBzdWNjZXNzLgogICAqCiAgICogVGhyb3dzIGFuIFtPU0Vycm9yXSBvbiBmYWlsdXJlLgogICAqLwogIFVpbnQ4TGlzdCBnZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbik7CgogIC8qKgogICAqIFVzZSBbc2V0UmF3T3B0aW9uXSB0byBjdXN0b21pemUgdGhlIFtSYXdTb2NrZXRdLiBTZWUgW1Jhd1NvY2tldE9wdGlvbl0gZm9yCiAgICogYXZhaWxhYmxlIG9wdGlvbnMuCiAgICoKICAgKiBUaHJvd3MgYW4gW09TRXJyb3JdIG9uIGZhaWx1cmUuCiAgICovCiAgdm9pZCBzZXRSYXdPcHRpb24oUmF3U29ja2V0T3B0aW9uIG9wdGlvbik7Cn0KCmNsYXNzIFNvY2tldEV4Y2VwdGlvbiBpbXBsZW1lbnRzIElPRXhjZXB0aW9uIHsKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICBmaW5hbCBPU0Vycm9yIG9zRXJyb3I7CiAgZmluYWwgSW50ZXJuZXRBZGRyZXNzIGFkZHJlc3M7CiAgZmluYWwgaW50IHBvcnQ7CgogIGNvbnN0IFNvY2tldEV4Y2VwdGlvbih0aGlzLm1lc3NhZ2UsIHt0aGlzLm9zRXJyb3IsIHRoaXMuYWRkcmVzcywgdGhpcy5wb3J0fSk7CiAgY29uc3QgU29ja2V0RXhjZXB0aW9uLmNsb3NlZCgpCiAgICAgIDogbWVzc2FnZSA9ICdTb2NrZXQgaGFzIGJlZW4gY2xvc2VkJywKICAgICAgICBvc0Vycm9yID0gbnVsbCwKICAgICAgICBhZGRyZXNzID0gbnVsbCwKICAgICAgICBwb3J0ID0gbnVsbDsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgc2Iud3JpdGUoIlNvY2tldEV4Y2VwdGlvbiIpOwogICAgaWYgKG1lc3NhZ2UuaXNOb3RFbXB0eSkgewogICAgICBzYi53cml0ZSgiOiAkbWVzc2FnZSIpOwogICAgICBpZiAob3NFcnJvciAhPSBudWxsKSB7CiAgICAgICAgc2Iud3JpdGUoIiAoJG9zRXJyb3IpIik7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAob3NFcnJvciAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCI6ICRvc0Vycm9yIik7CiAgICB9CiAgICBpZiAoYWRkcmVzcyAhPSBudWxsKSB7CiAgICAgIHNiLndyaXRlKCIsIGFkZHJlc3MgPSAke2FkZHJlc3MuaG9zdH0iKTsKICAgIH0KICAgIGlmIChwb3J0ICE9IG51bGwpIHsKICAgICAgc2Iud3JpdGUoIiwgcG9ydCA9ICRwb3J0Iik7CiAgICB9CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9Cn0Kg/cATk48AREBBEY+BBxKSkoBIjEiMSEuARQBLAExISE1BAEGNgYUFg8WDhcOFw88BgQBNQIBBBgDQ0YcQUQJBCEGR0YGPSo2AQZHRgY9KjYBBkI6BjMlMQEGQjoGMyUxAQZFBiABBkc7IQYWAQY+QwYTAQZLTUEGHAEGQgYXAQZDBhgBBkAGGAEGPQU3RSgGNAEGQz8GJQEGNERCQkVGFwZEPAEGNQVKKgY1LQIBBE5LDgQiBi0GEwEGLgYRAQY/GQYnAQYiBTEGKgEGLwVIKgVMUAU3RTsGNyQkOwIBBEVEIQMiBD4GQUUtBTJAR0Q9Jzs+P0cFQkJBFQU6RCAFR0ZHEQVRUUxRTDIGQkEBBisGEAEGLgYfAQZGLQYjAgEEQkMVAx8EOAY+RS0FMkBHRD0nOz4/RwVCQkEVBUdBFAVHRkcRBU5RT0tJMgY/QQEGKwYQAQYuBh8BBkYtBiACAQRGRgQYRUJCASUyIiwiLAEQASgCAQRHSgsEFQZNTyIFKAZCKDYBSEhGRAEQASUCAS8ZExMYFRoUFAIBTk4MBFJMEA4YQgY3Bk8qBkwkBk1BBkoOPgFJRhkRBikvHzEEAUlJRQEuBhAoJiYlJRMBIBQBUAZNUEwmGQEqIDsBKh47ASkrQAEsHj0BKytCASsdPAErHTwBMAIBBB8EF0BBRkIBIisjLSg4JC8BFAEnFhMdHiMeDwQCAUxLGks6Bk1PGiMBQSAiHiMBJgZAHxIRBAIBBD0DUBUDG0gEPQZMIgYaAQZNIkUzBhsBBlFNLgVNSUFQDwVDTEwgBVBQSkoyBjwqAUNGFVEYAQZKEgYTAQY+RkRHEgYdAQZNTEoeBU8hBjgBBisGEAEGOgYWAQZABh8BBkcGJQEGTTQFM04qBh0BBktLTjgGLAEGShgFSwY1AQZQLgU1BSUGEDIBBlAYBSUGEC0CAQQ7A0wyBD0GUUouBU1JQVAPBUNMTCAFUFBKSjIGMCs3HSk7Bi85BAFDQxVFGTcdTQY0JwQBOioBTxgBBkxNEgVGFwYSAQZKGAVLBjUBBlAuBTUFJQYyAQZQGAUlBi0BBisGEAEGOgYWAQZABh8BBkcGJQESARMCAQRFRxoEERIbDAEwAgEERQNMRgNBQAMbSARCBj44BhoBBj5EQysGGwEGRwUvBhoBBkEjBTkFRRgGFQEGTQVDFwUlBkgfJwEGNAVHQAVFDgYZAQZECwZBRQEGKwYQAQYuBh8BBiAGEAEGFgVFIgZBAQZHDwVNBhYBBh0FQhoGSwEGHgVCGgZMAQZQLgUxBSUGMgEGUBgFJQYtAgEvGBkhEgFQISwYGBUBFiohHh4dIQgiHgYbLwYYIgYaBAIBE2RhcnQ6aW8vc29ja2V0LmRhcnQpb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL3N0ZGlvLmRhcnS4Pi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuaW87Cgpjb25zdCBpbnQgX3N0ZGlvSGFuZGxlVHlwZVRlcm1pbmFsID0gMDsKY29uc3QgaW50IF9zdGRpb0hhbmRsZVR5cGVQaXBlID0gMTsKY29uc3QgaW50IF9zdGRpb0hhbmRsZVR5cGVGaWxlID0gMjsKY29uc3QgaW50IF9zdGRpb0hhbmRsZVR5cGVTb2NrZXQgPSAzOwpjb25zdCBpbnQgX3N0ZGlvSGFuZGxlVHlwZU90aGVyID0gNDsKCmNsYXNzIF9TdGRTdHJlYW0gZXh0ZW5kcyBTdHJlYW08TGlzdDxpbnQ+PiB7CiAgZmluYWwgU3RyZWFtPExpc3Q8aW50Pj4gX3N0cmVhbTsKCiAgX1N0ZFN0cmVhbSh0aGlzLl9zdHJlYW0pOwoKICBTdHJlYW1TdWJzY3JpcHRpb248TGlzdDxpbnQ+PiBsaXN0ZW4odm9pZCBvbkRhdGEoTGlzdDxpbnQ+IGV2ZW50KSwKICAgICAge0Z1bmN0aW9uIG9uRXJyb3IsIHZvaWQgb25Eb25lKCksIGJvb2wgY2FuY2VsT25FcnJvcn0pIHsKICAgIHJldHVybiBfc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KfQoKLyoqCiAqIFtTdGRpbl0gYWxsb3dzIGJvdGggc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyByZWFkcyBmcm9tIHRoZSBzdGFuZGFyZAogKiBpbnB1dCBzdHJlYW0uCiAqCiAqIE1peGluZyBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIHJlYWRzIGlzIHVuZGVmaW5lZC4KICovCmNsYXNzIFN0ZGluIGV4dGVuZHMgX1N0ZFN0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbTxMaXN0PGludD4+IHsKICBpbnQgX2ZkOwoKICBTdGRpbi5fKFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSwgdGhpcy5fZmQpIDogc3VwZXIoc3RyZWFtKTsKCiAgLyoqCiAgICogUmVhZCBhIGxpbmUgZnJvbSBzdGRpbi4KICAgKgogICAqIEJsb2NrcyB1bnRpbCBhIGZ1bGwgbGluZSBpcyBhdmFpbGFibGUuCiAgICoKICAgKiBMaW5lcyBteSBiZSB0ZXJtaW5hdGVkIGJ5IGVpdGhlciBgPENSPjxMRj5gIG9yIGA8TEY+YC4gT24gV2luZG93cyBpbiBjYXNlcwogICAqIHdoZXJlIHRoZSBbc3RkaW9UeXBlXSBvZiBzdGRpbiBpcyBbU3RkaW9UeXBlLnRlcm1pbWFsXSB0aGUgdGVybWluYXRvciBtYXkKICAgKiBhbHNvIGJlIGEgc2luZ2xlIGA8Q1I+YC4KICAgKgogICAqIElucHV0IGJ5dGVzIGFyZSBjb252ZXJ0ZWQgdG8gYSBzdHJpbmcgYnkgW2VuY29kaW5nXS4KICAgKiBJZiBbZW5jb2RpbmddIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIFtzeXN0ZW1FbmNvZGluZ10uCiAgICoKICAgKiBJZiBbcmV0YWluTmV3bGluZXNdIGlzIGBmYWxzZWAsIHRoZSByZXR1cm5lZCBTdHJpbmcgd2lsbCBub3QgaW5jbHVkZSB0aGUKICAgKiBmaW5hbCBsaW5lIHRlcm1pbmF0b3IuIElmIGB0cnVlYCwgdGhlIHJldHVybmVkIFN0cmluZyB3aWxsIGluY2x1ZGUgdGhlIGxpbmUKICAgKiB0ZXJtaW5hdG9yLiBEZWZhdWx0IGlzIGBmYWxzZWAuCiAgICoKICAgKiBJZiBlbmQtb2YtZmlsZSBpcyByZWFjaGVkIGFmdGVyIGFueSBieXRlcyBoYXZlIGJlZW4gcmVhZCBmcm9tIHN0ZGluLAogICAqIHRoYXQgZGF0YSBpcyByZXR1cm5lZCB3aXRob3V0IGEgbGluZSB0ZXJtaW5hdG9yLgogICAqIFJldHVybnMgYG51bGxgIGlmIG5vIGJ5dGVzIHByZWNlZGVkIHRoZSBlbmQgb2YgaW5wdXQuCiAgICovCiAgU3RyaW5nIHJlYWRMaW5lU3luYygKICAgICAge0VuY29kaW5nIGVuY29kaW5nOiBzeXN0ZW1FbmNvZGluZywgYm9vbCByZXRhaW5OZXdsaW5lczogZmFsc2V9KSB7CiAgICBjb25zdCBDUiA9IDEzOwogICAgY29uc3QgTEYgPSAxMDsKICAgIGZpbmFsIExpc3Q8aW50PiBsaW5lID0gPGludD5bXTsKICAgIC8vIE9uIFdpbmRvd3MsIGlmIGxpbmVNb2RlIGlzIGRpc2FibGVkLCBvbmx5IENSIGlzIHJlY2VpdmVkLgogICAgYm9vbCBjcklzTmV3bGluZSA9IFBsYXRmb3JtLmlzV2luZG93cyAmJgogICAgICAgIChzdGRpb1R5cGUoc3RkaW4pID09IFN0ZGlvVHlwZS50ZXJtaW5hbCkgJiYKICAgICAgICAhbGluZU1vZGU7CiAgICBpZiAocmV0YWluTmV3bGluZXMpIHsKICAgICAgaW50IGJ5dGU7CiAgICAgIGRvIHsKICAgICAgICBieXRlID0gcmVhZEJ5dGVTeW5jKCk7CiAgICAgICAgaWYgKGJ5dGUgPCAwKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgbGluZS5hZGQoYnl0ZSk7CiAgICAgIH0gd2hpbGUgKGJ5dGUgIT0gTEYgJiYgIShieXRlID09IENSICYmIGNySXNOZXdsaW5lKSk7CiAgICAgIGlmIChsaW5lLmlzRW1wdHkpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfSBlbHNlIGlmIChjcklzTmV3bGluZSkgewogICAgICAvLyBDUiBhbmQgTEYgYXJlIGJvdGggbGluZSB0ZXJtaW5hdG9ycywgbmVpdGhlciBpcyByZXRhaW5lZC4KICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBpbnQgYnl0ZSA9IHJlYWRCeXRlU3luYygpOwogICAgICAgIGlmIChieXRlIDwgMCkgewogICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSkgcmV0dXJuIG51bGw7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKGJ5dGUgPT0gTEYgfHwgYnl0ZSA9PSBDUikgYnJlYWs7CiAgICAgICAgbGluZS5hZGQoYnl0ZSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIENhc2UgaGF2aW5nIHRvIGhhbmRsZSBDUiBMRiBhcyBhIHNpbmdsZSB1bnJldGFpbmVkIGxpbmUgdGVybWluYXRvci4KICAgICAgb3V0ZXI6CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgaW50IGJ5dGUgPSByZWFkQnl0ZVN5bmMoKTsKICAgICAgICBpZiAoYnl0ZSA9PSBMRikgYnJlYWs7CiAgICAgICAgaWYgKGJ5dGUgPT0gQ1IpIHsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgYnl0ZSA9IHJlYWRCeXRlU3luYygpOwogICAgICAgICAgICBpZiAoYnl0ZSA9PSBMRikgYnJlYWsgb3V0ZXI7CgogICAgICAgICAgICBsaW5lLmFkZChDUik7CiAgICAgICAgICB9IHdoaWxlIChieXRlID09IENSKTsKICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCBhbmQgaGFuZGxlIG5vbi1DUiBjaGFyYWN0ZXIuCiAgICAgICAgfQogICAgICAgIGlmIChieXRlIDwgMCkgewogICAgICAgICAgaWYgKGxpbmUuaXNFbXB0eSkgcmV0dXJuIG51bGw7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgbGluZS5hZGQoYnl0ZSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBlbmNvZGluZy5kZWNvZGUobGluZSk7CiAgfQoKICAvKioKICAgKiBDaGVjayBpZiBlY2hvIG1vZGUgaXMgZW5hYmxlZCBvbiBbc3RkaW5dLgogICAqLwogIGV4dGVybmFsIGJvb2wgZ2V0IGVjaG9Nb2RlOwoKICAvKioKICAgKiBFbmFibGUgb3IgZGlzYWJsZSBlY2hvIG1vZGUgb24gW3N0ZGluXS4KICAgKgogICAqIElmIGRpc2FibGVkLCBpbnB1dCBmcm9tIHRvIGNvbnNvbGUgd2lsbCBub3QgYmUgZWNob2VkLgogICAqCiAgICogRGVmYXVsdCBkZXBlbmRzIG9uIHRoZSBwYXJlbnQgcHJvY2VzcywgYnV0IHVzdWFsbHkgZW5hYmxlZC4KICAgKgogICAqIE9uIFdpbmRvd3MgdGhpcyBtb2RlIGNhbiBvbmx5IGJlIGVuYWJsZWQgaWYgW2xpbmVNb2RlXSBpcyBlbmFibGVkIGFzIHdlbGwuCiAgICovCiAgZXh0ZXJuYWwgdm9pZCBzZXQgZWNob01vZGUoYm9vbCBlbmFibGVkKTsKCiAgLyoqCiAgICogQ2hlY2sgaWYgbGluZSBtb2RlIGlzIGVuYWJsZWQgb24gW3N0ZGluXS4KICAgKi8KICBleHRlcm5hbCBib29sIGdldCBsaW5lTW9kZTsKCiAgLyoqCiAgICogRW5hYmxlIG9yIGRpc2FibGUgbGluZSBtb2RlIG9uIFtzdGRpbl0uCiAgICoKICAgKiBJZiBlbmFibGVkLCBjaGFyYWN0ZXJzIGFyZSBkZWxheWVkIHVudGlsIGEgbmV3LWxpbmUgY2hhcmFjdGVyIGlzIGVudGVyZWQuCiAgICogSWYgZGlzYWJsZWQsIGNoYXJhY3RlcnMgd2lsbCBiZSBhdmFpbGFibGUgYXMgdHlwZWQuCiAgICoKICAgKiBEZWZhdWx0IGRlcGVuZHMgb24gdGhlIHBhcmVudCBwcm9jZXNzLCBidXQgdXN1YWxseSBlbmFibGVkLgogICAqCiAgICogT24gV2luZG93cyB0aGlzIG1vZGUgY2FuIG9ubHkgYmUgZGlzYWJsZWQgaWYgW2VjaG9Nb2RlXSBpcyBkaXNhYmxlZCBhcyB3ZWxsLgogICAqLwogIGV4dGVybmFsIHZvaWQgc2V0IGxpbmVNb2RlKGJvb2wgZW5hYmxlZCk7CgogIC8qKgogICAgKiBXaGV0aGVyIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsIHRoYXQgc3VwcG9ydHMgQU5TSSBlc2NhcGUgc2VxdWVuY2VzLgogICAgKgogICAgKiBOb3QgYWxsIHRlcm1pbmFscyBhcmUgcmVjb2duaXplZCwgYW5kIG5vdCBhbGwgcmVjb2duaXplZCB0ZXJtaW5hbHMgY2FuCiAgICAqIHJlcG9ydCB3aGV0aGVyIHRoZXkgc3VwcG9ydCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMsIHNvIHRoaXMgdmFsdWUgaXMgYQogICAgKiBiZXN0LWVmZm9ydCBhdHRlbXB0IGF0IGRldGVjdGluZyB0aGUgc3VwcG9ydC4KICAgICoKICAgICogVGhlIGFjdHVhbCBlc2NhcGUgc2VxdWVuY2Ugc3VwcG9ydCBtYXkgZGlmZmVyIGJldHdlZW4gdGVybWluYWxzLAogICAgKiB3aXRoIHNvbWUgdGVybWluYWxzIHN1cHBvcnRpbmcgbW9yZSBlc2NhcGUgc2VxdWVuY2VzIHRoYW4gb3RoZXJzLAogICAgKiBhbmQgc29tZSB0ZXJtaW5hbHMgZXZlbiBkaWZmZXJpbmcgaW4gYmVoYXZpb3IgZm9yIHRoZSBzYW1lIGVzY2FwZQogICAgKiBzZXF1ZW5jZS4KICAgICoKICAgICogVGhlIEFOU0kgY29sb3Igc2VsZWN0aW9uIGlzIGdlbmVyYWxseSBzdXBwb3J0ZWQuCiAgICAqCiAgICAqIEN1cnJlbnRseSwgYSBgVEVSTWAgZW52aXJvbm1lbnQgdmFyaWFibGUgY29udGFpbmluZyB0aGUgc3RyaW5nIGB4dGVybWAKICAgICogd2lsbCBiZSB0YWtlbiBhcyBldmlkZW5jZSB0aGF0IEFOU0kgZXNjYXBlIHNlcXVlbmNlcyBhcmUgc3VwcG9ydGVkLgogICAgKiBPbiBXaW5kb3dzLCBvbmx5IHZlcnNpb25zIG9mIFdpbmRvd3MgMTAgYWZ0ZXIgdi4xNTExCiAgICAqICgiVEgyIiwgT1MgYnVpbGQgMTA1ODYpIHdpbGwgYmUgZGV0ZWN0ZWQgYXMgc3VwcG9ydGluZyB0aGUgb3V0cHV0IG9mCiAgICAqIEFOU0kgZXNjYXBlIHNlcXVlbmNlcywgYW5kIG9ubHkgdmVyc2lvbnMgYWZ0ZXIgdi4xNjA3ICgiQW5uaXZlcnNhcnkKICAgICogVXBkYXRlIiwgT1MgYnVpbGQgMTQzOTMpIHdpbGwgYmUgZGV0ZWN0ZWQgYXMgc3VwcG9ydGluZyB0aGUgaW5wdXQgb2YKICAgICogQU5TSSBlc2NhcGUgc2VxdWVuY2VzLgogICAgKi8KICBleHRlcm5hbCBib29sIGdldCBzdXBwb3J0c0Fuc2lFc2NhcGVzOwoKICAvKioKICAgKiBTeW5jaHJvbm91c2x5IHJlYWQgYSBieXRlIGZyb20gc3RkaW4uIFRoaXMgY2FsbCB3aWxsIGJsb2NrIHVudGlsIGEgYnl0ZSBpcwogICAqIGF2YWlsYWJsZS4KICAgKgogICAqIElmIGF0IGVuZCBvZiBmaWxlLCAtMSBpcyByZXR1cm5lZC4KICAgKi8KICBleHRlcm5hbCBpbnQgcmVhZEJ5dGVTeW5jKCk7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiB0aGVyZSBpcyBhIHRlcm1pbmFsIGF0dGFjaGVkIHRvIHN0ZGluLgogICAqLwogIGJvb2wgZ2V0IGhhc1Rlcm1pbmFsIHsKICAgIHRyeSB7CiAgICAgIHJldHVybiBzdGRpb1R5cGUodGhpcykgPT0gU3RkaW9UeXBlLnRlcm1pbmFsOwogICAgfSBvbiBGaWxlU3lzdGVtRXhjZXB0aW9uIGNhdGNoIChfKSB7CiAgICAgIC8vIElmIHN0ZGlvVHlwZSB0aHJvd3MgYSBGaWxlU3lzdGVtRXhjZXB0aW9uLCB0aGVuIGl0IGlzIG5vdCBob29rZWQgdXAgdG8KICAgICAgLy8gYSB0ZXJtaW5hbCwgcHJvYmFibHkgYmVjYXVzZSBpdCBpcyBjbG9zZWQsIGJ1dCBsZXQgb3RoZXIgZXhjZXB0aW9uCiAgICAgIC8vIHR5cGVzIGJ1YmJsZSB1cC4KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKLyoqCiAqIFtTdGRvdXRdIHJlcHJlc2VudHMgdGhlIFtJT1NpbmtdIGZvciBlaXRoZXIgYHN0ZG91dGAgb3IgYHN0ZGVycmAuCiAqCiAqIEl0IHByb3ZpZGVzIGEgKmJsb2NraW5nKiBgSU9TaW5rYCwgc28gdXNpbmcgdGhpcyB0byB3cml0ZSB3aWxsIGJsb2NrIHVudGlsCiAqIHRoZSBvdXRwdXQgaXMgd3JpdHRlbi4KICoKICogSW4gc29tZSBzaXR1YXRpb25zIHRoaXMgYmxvY2tpbmcgYmVoYXZpb3IgaXMgdW5kZXNpcmFibGUgYXMgaXQgZG9lcyBub3QKICogcHJvdmlkZSB0aGUgc2FtZSBub24tYmxvY2tpbmcgYmVoYXZpb3IgYXMgZGFydDppbyBpbiBnZW5lcmFsIGV4cG9zZXMuCiAqIFVzZSB0aGUgcHJvcGVydHkgW25vbkJsb2NraW5nXSB0byBnZXQgYW4gYElPU2lua2Agd2hpY2ggaGFzIHRoZSBub24tYmxvY2tpbmcKICogYmVoYXZpb3IuCiAqCiAqIFRoaXMgY2xhc3MgY2FuIGFsc28gYmUgdXNlZCB0byBjaGVjayB3aGV0aGVyIGBzdGRvdXRgIG9yIGBzdGRlcnJgIGlzCiAqIGNvbm5lY3RlZCB0byBhIHRlcm1pbmFsIGFuZCBxdWVyeSBzb21lIHRlcm1pbmFsIHByb3BlcnRpZXMuCiAqCiAqIFRoZSBbYWRkRXJyb3JdIEFQSSBpcyBpbmhlcml0ZWQgZnJvbSAgW1N0cmVhbVNpbmtdIGFuZCBjYWxsaW5nIGl0IHdpbGwgcmVzdWx0CiAqIGluIGFuIHVuaGFuZGxlZCBhc3luY2hyb25vdXMgZXJyb3IgdW5sZXNzIHRoZXJlIGlzIGFuIGVycm9yIGhhbmRsZXIgb24KICogW2RvbmVdLgogKi8KY2xhc3MgU3Rkb3V0IGV4dGVuZHMgX1N0ZFNpbmsgaW1wbGVtZW50cyBJT1NpbmsgewogIGZpbmFsIGludCBfZmQ7CiAgSU9TaW5rIF9ub25CbG9ja2luZzsKCiAgU3Rkb3V0Ll8oSU9TaW5rIHNpbmssIHRoaXMuX2ZkKSA6IHN1cGVyKHNpbmspOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYSB0ZXJtaW5hbCBhdHRhY2hlZCB0byBzdGRvdXQuCiAgICovCiAgYm9vbCBnZXQgaGFzVGVybWluYWwgPT4gX2hhc1Rlcm1pbmFsKF9mZCk7CgogIC8qKgogICAqIEdldCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIHRlcm1pbmFsLgogICAqCiAgICogSWYgbm8gdGVybWluYWwgaXMgYXR0YWNoZWQgdG8gc3Rkb3V0LCBhIFtTdGRvdXRFeGNlcHRpb25dIGlzIHRocm93bi4gU2VlCiAgICogW2hhc1Rlcm1pbmFsXSBmb3IgbW9yZSBpbmZvLgogICAqLwogIGludCBnZXQgdGVybWluYWxDb2x1bW5zID0+IF90ZXJtaW5hbENvbHVtbnMoX2ZkKTsKCiAgLyoqCiAgICogR2V0IHRoZSBudW1iZXIgb2YgbGluZXMgb2YgdGhlIHRlcm1pbmFsLgogICAqCiAgICogSWYgbm8gdGVybWluYWwgaXMgYXR0YWNoZWQgdG8gc3Rkb3V0LCBhIFtTdGRvdXRFeGNlcHRpb25dIGlzIHRocm93bi4gU2VlCiAgICogW2hhc1Rlcm1pbmFsXSBmb3IgbW9yZSBpbmZvLgogICAqLwogIGludCBnZXQgdGVybWluYWxMaW5lcyA9PiBfdGVybWluYWxMaW5lcyhfZmQpOwoKICAvKioKICAgICogV2hldGhlciBjb25uZWN0ZWQgdG8gYSB0ZXJtaW5hbCB0aGF0IHN1cHBvcnRzIEFOU0kgZXNjYXBlIHNlcXVlbmNlcy4KICAgICoKICAgICogTm90IGFsbCB0ZXJtaW5hbHMgYXJlIHJlY29nbml6ZWQsIGFuZCBub3QgYWxsIHJlY29nbml6ZWQgdGVybWluYWxzIGNhbgogICAgKiByZXBvcnQgd2hldGhlciB0aGV5IHN1cHBvcnQgQU5TSSBlc2NhcGUgc2VxdWVuY2VzLCBzbyB0aGlzIHZhbHVlIGlzIGEKICAgICogYmVzdC1lZmZvcnQgYXR0ZW1wdCBhdCBkZXRlY3RpbmcgdGhlIHN1cHBvcnQuCiAgICAqCiAgICAqIFRoZSBhY3R1YWwgZXNjYXBlIHNlcXVlbmNlIHN1cHBvcnQgbWF5IGRpZmZlciBiZXR3ZWVuIHRlcm1pbmFscywKICAgICogd2l0aCBzb21lIHRlcm1pbmFscyBzdXBwb3J0aW5nIG1vcmUgZXNjYXBlIHNlcXVlbmNlcyB0aGFuIG90aGVycywKICAgICogYW5kIHNvbWUgdGVybWluYWxzIGV2ZW4gZGlmZmVyaW5nIGluIGJlaGF2aW9yIGZvciB0aGUgc2FtZSBlc2NhcGUKICAgICogc2VxdWVuY2UuCiAgICAqCiAgICAqIFRoZSBBTlNJIGNvbG9yIHNlbGVjdGlvbiBpcyBnZW5lcmFsbHkgc3VwcG9ydGVkLgogICAgKgogICAgKiBDdXJyZW50bHksIGEgYFRFUk1gIGVudmlyb25tZW50IHZhcmlhYmxlIGNvbnRhaW5pbmcgdGhlIHN0cmluZyBgeHRlcm1gCiAgICAqIHdpbGwgYmUgdGFrZW4gYXMgZXZpZGVuY2UgdGhhdCBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMgYXJlIHN1cHBvcnRlZC4KICAgICogT24gV2luZG93cywgb25seSB2ZXJzaW9ucyBvZiBXaW5kb3dzIDEwIGFmdGVyIHYuMTUxMQogICAgKiAoIlRIMiIsIE9TIGJ1aWxkIDEwNTg2KSB3aWxsIGJlIGRldGVjdGVkIGFzIHN1cHBvcnRpbmcgdGhlIG91dHB1dCBvZgogICAgKiBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMsIGFuZCBvbmx5IHZlcnNpb25zIGFmdGVyIHYuMTYwNyAoIkFubml2ZXJzYXJ5CiAgICAqIFVwZGF0ZSIsIE9TIGJ1aWxkIDE0MzkzKSB3aWxsIGJlIGRldGVjdGVkIGFzIHN1cHBvcnRpbmcgdGhlIGlucHV0IG9mCiAgICAqIEFOU0kgZXNjYXBlIHNlcXVlbmNlcy4KICAgICovCiAgYm9vbCBnZXQgc3VwcG9ydHNBbnNpRXNjYXBlcyA9PiBfc3VwcG9ydHNBbnNpRXNjYXBlcyhfZmQpOwoKICBleHRlcm5hbCBib29sIF9oYXNUZXJtaW5hbChpbnQgZmQpOwogIGV4dGVybmFsIGludCBfdGVybWluYWxDb2x1bW5zKGludCBmZCk7CiAgZXh0ZXJuYWwgaW50IF90ZXJtaW5hbExpbmVzKGludCBmZCk7CiAgZXh0ZXJuYWwgc3RhdGljIGJvb2wgX3N1cHBvcnRzQW5zaUVzY2FwZXMoaW50IGZkKTsKCiAgLyoqCiAgICogR2V0IGEgbm9uLWJsb2NraW5nIGBJT1NpbmtgLgogICAqLwogIElPU2luayBnZXQgbm9uQmxvY2tpbmcgewogICAgX25vbkJsb2NraW5nID8/PSBuZXcgSU9TaW5rKG5ldyBfRmlsZVN0cmVhbUNvbnN1bWVyLmZyb21TdGRpbyhfZmQpKTsKICAgIHJldHVybiBfbm9uQmxvY2tpbmc7CiAgfQp9CgpjbGFzcyBTdGRvdXRFeGNlcHRpb24gaW1wbGVtZW50cyBJT0V4Y2VwdGlvbiB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CiAgZmluYWwgT1NFcnJvciBvc0Vycm9yOwoKICBjb25zdCBTdGRvdXRFeGNlcHRpb24odGhpcy5tZXNzYWdlLCBbdGhpcy5vc0Vycm9yXSk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAiU3Rkb3V0RXhjZXB0aW9uOiAkbWVzc2FnZSR7b3NFcnJvciA9PSBudWxsID8gIiIgOiAiLCAkb3NFcnJvciJ9IjsKICB9Cn0KCmNsYXNzIFN0ZGluRXhjZXB0aW9uIGltcGxlbWVudHMgSU9FeGNlcHRpb24gewogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwogIGZpbmFsIE9TRXJyb3Igb3NFcnJvcjsKCiAgY29uc3QgU3RkaW5FeGNlcHRpb24odGhpcy5tZXNzYWdlLCBbdGhpcy5vc0Vycm9yXSk7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIHJldHVybiAiU3RkaW5FeGNlcHRpb246ICRtZXNzYWdlJHtvc0Vycm9yID09IG51bGwgPyAiIiA6ICIsICRvc0Vycm9yIn0iOwogIH0KfQoKY2xhc3MgX1N0ZENvbnN1bWVyIGltcGxlbWVudHMgU3RyZWFtQ29uc3VtZXI8TGlzdDxpbnQ+PiB7CiAgZmluYWwgX2ZpbGU7CgogIF9TdGRDb25zdW1lcihpbnQgZmQpIDogX2ZpbGUgPSBfRmlsZS5fb3BlblN0ZGlvU3luYyhmZCk7CgogIEZ1dHVyZSBhZGRTdHJlYW0oU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtKSB7CiAgICB2YXIgY29tcGxldGVyID0gbmV3IENvbXBsZXRlcigpOwogICAgdmFyIHN1YjsKICAgIHN1YiA9IHN0cmVhbS5saXN0ZW4oKGRhdGEpIHsKICAgICAgdHJ5IHsKICAgICAgICBfZmlsZS53cml0ZUZyb21TeW5jKGRhdGEpOwogICAgICB9IGNhdGNoIChlLCBzKSB7CiAgICAgICAgc3ViLmNhbmNlbCgpOwogICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZUVycm9yKGUsIHMpOwogICAgICB9CiAgICB9LAogICAgICAgIG9uRXJyb3I6IGNvbXBsZXRlci5jb21wbGV0ZUVycm9yLAogICAgICAgIG9uRG9uZTogY29tcGxldGVyLmNvbXBsZXRlLAogICAgICAgIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgcmV0dXJuIGNvbXBsZXRlci5mdXR1cmU7CiAgfQoKICBGdXR1cmUgY2xvc2UoKSB7CiAgICBfZmlsZS5jbG9zZVN5bmMoKTsKICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKCk7CiAgfQp9CgpjbGFzcyBfU3RkU2luayBpbXBsZW1lbnRzIElPU2luayB7CiAgZmluYWwgSU9TaW5rIF9zaW5rOwoKICBfU3RkU2luayh0aGlzLl9zaW5rKTsKCiAgRW5jb2RpbmcgZ2V0IGVuY29kaW5nID0+IF9zaW5rLmVuY29kaW5nOwogIHZvaWQgc2V0IGVuY29kaW5nKEVuY29kaW5nIGVuY29kaW5nKSB7CiAgICBfc2luay5lbmNvZGluZyA9IGVuY29kaW5nOwogIH0KCiAgdm9pZCB3cml0ZShvYmplY3QpIHsKICAgIF9zaW5rLndyaXRlKG9iamVjdCk7CiAgfQoKICB2b2lkIHdyaXRlbG4oW29iamVjdCA9ICIiXSkgewogICAgX3Npbmsud3JpdGVsbihvYmplY3QpOwogIH0KCiAgdm9pZCB3cml0ZUFsbChvYmplY3RzLCBbc2VwID0gIiJdKSB7CiAgICBfc2luay53cml0ZUFsbChvYmplY3RzLCBzZXApOwogIH0KCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGRhdGEpIHsKICAgIF9zaW5rLmFkZChkYXRhKTsKICB9CgogIHZvaWQgYWRkRXJyb3IoZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBfc2luay5hZGRFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgfQoKICB2b2lkIHdyaXRlQ2hhckNvZGUoaW50IGNoYXJDb2RlKSB7CiAgICBfc2luay53cml0ZUNoYXJDb2RlKGNoYXJDb2RlKTsKICB9CgogIEZ1dHVyZSBhZGRTdHJlYW0oU3RyZWFtPExpc3Q8aW50Pj4gc3RyZWFtKSA9PiBfc2luay5hZGRTdHJlYW0oc3RyZWFtKTsKICBGdXR1cmUgZmx1c2goKSA9PiBfc2luay5mbHVzaCgpOwogIEZ1dHVyZSBjbG9zZSgpID0+IF9zaW5rLmNsb3NlKCk7CiAgRnV0dXJlIGdldCBkb25lID0+IF9zaW5rLmRvbmU7Cn0KCi8vLyBUaGUgdHlwZSBvZiBvYmplY3QgYSBzdGFuZGFyZCBJTyBzdHJlYW0gaXMgYXR0YWNoZWQgdG8uCmNsYXNzIFN0ZGlvVHlwZSB7CiAgc3RhdGljIGNvbnN0IFN0ZGlvVHlwZSB0ZXJtaW5hbCA9IGNvbnN0IFN0ZGlvVHlwZS5fKCJ0ZXJtaW5hbCIpOwogIHN0YXRpYyBjb25zdCBTdGRpb1R5cGUgcGlwZSA9IGNvbnN0IFN0ZGlvVHlwZS5fKCJwaXBlIik7CiAgc3RhdGljIGNvbnN0IFN0ZGlvVHlwZSBmaWxlID0gY29uc3QgU3RkaW9UeXBlLl8oImZpbGUiKTsKICBzdGF0aWMgY29uc3QgU3RkaW9UeXBlIG90aGVyID0gY29uc3QgU3RkaW9UeXBlLl8oIm90aGVyIik7CgogIEBEZXByZWNhdGVkKCJVc2UgdGVybWluYWwgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFN0ZGlvVHlwZSBURVJNSU5BTCA9IHRlcm1pbmFsOwogIEBEZXByZWNhdGVkKCJVc2UgcGlwZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgU3RkaW9UeXBlIFBJUEUgPSBwaXBlOwogIEBEZXByZWNhdGVkKCJVc2UgZmlsZSBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgU3RkaW9UeXBlIEZJTEUgPSBmaWxlOwogIEBEZXByZWNhdGVkKCJVc2Ugb3RoZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFN0ZGlvVHlwZSBPVEhFUiA9IG90aGVyOwoKICBmaW5hbCBTdHJpbmcgbmFtZTsKICBjb25zdCBTdGRpb1R5cGUuXyh0aGlzLm5hbWUpOwogIFN0cmluZyB0b1N0cmluZygpID0+ICJTdGRpb1R5cGU6ICRuYW1lIjsKfQoKU3RkaW4gX3N0ZGluOwpTdGRvdXQgX3N0ZG91dDsKU3Rkb3V0IF9zdGRlcnI7CgovLyBUaGVzZSBtYXkgYmUgc2V0IHRvIGRpZmZlcmVudCB2YWx1ZXMgYnkgdGhlIGVtYmVkZGVyIGJ5IGNhbGxpbmcKLy8gX3NldFN0ZGlvRkRzIHdoZW4gaW5pdGlhbGl6aW5nIGRhcnQ6aW8uCmludCBfc3RkaW5GRCA9IDA7CmludCBfc3Rkb3V0RkQgPSAxOwppbnQgX3N0ZGVyckZEID0gMjsKCkBwcmFnbWEoJ3ZtOmVudHJ5LXBvaW50JywgJ2NhbGwnKQp2b2lkIF9zZXRTdGRpb0ZEcyhpbnQgc3RkaW4sIGludCBzdGRvdXQsIGludCBzdGRlcnIpIHsKICBfc3RkaW5GRCA9IHN0ZGluOwogIF9zdGRvdXRGRCA9IHN0ZG91dDsKICBfc3RkZXJyRkQgPSBzdGRlcnI7Cn0KCi8vLyBUaGUgc3RhbmRhcmQgaW5wdXQgc3RyZWFtIG9mIGRhdGEgcmVhZCBieSB0aGlzIHByb2dyYW0uClN0ZGluIGdldCBzdGRpbiB7CiAgX3N0ZGluID8/PSBfU3RkSU9VdGlscy5fZ2V0U3RkaW9JbnB1dFN0cmVhbShfc3RkaW5GRCk7CiAgcmV0dXJuIF9zdGRpbjsKfQoKLy8vIFRoZSBzdGFuZGFyZCBvdXRwdXQgc3RyZWFtIG9mIGRhdGEgd3JpdHRlbiBieSB0aGlzIHByb2dyYW0uCi8vLwovLy8gVGhlIGBhZGRFcnJvcmAgQVBJIGlzIGluaGVyaXRlZCBmcm9tICBgU3RyZWFtU2lua2AgYW5kIGNhbGxpbmcgaXQgd2lsbAovLy8gcmVzdWx0IGluIGFuIHVuaGFuZGxlZCBhc3luY2hyb25vdXMgZXJyb3IgdW5sZXNzIHRoZXJlIGlzIGFuIGVycm9yIGhhbmRsZXIKLy8vIG9uIGBkb25lYC4KU3Rkb3V0IGdldCBzdGRvdXQgewogIF9zdGRvdXQgPz89IF9TdGRJT1V0aWxzLl9nZXRTdGRpb091dHB1dFN0cmVhbShfc3Rkb3V0RkQpOwogIHJldHVybiBfc3Rkb3V0Owp9CgovLy8gVGhlIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0gb2YgZXJyb3JzIHdyaXR0ZW4gYnkgdGhpcyBwcm9ncmFtLgovLy8KLy8vIFRoZSBgYWRkRXJyb3JgIEFQSSBpcyBpbmhlcml0ZWQgZnJvbSAgYFN0cmVhbVNpbmtgIGFuZCBjYWxsaW5nIGl0IHdpbGwKLy8vIHJlc3VsdCBpbiBhbiB1bmhhbmRsZWQgYXN5bmNocm9ub3VzIGVycm9yIHVubGVzcyB0aGVyZSBpcyBhbiBlcnJvciBoYW5kbGVyCi8vLyBvbiBgZG9uZWAuClN0ZG91dCBnZXQgc3RkZXJyIHsKICBfc3RkZXJyID8/PSBfU3RkSU9VdGlscy5fZ2V0U3RkaW9PdXRwdXRTdHJlYW0oX3N0ZGVyckZEKTsKICByZXR1cm4gX3N0ZGVycjsKfQoKLy8vIEZvciBhIHN0cmVhbSwgcmV0dXJucyB3aGV0aGVyIGl0IGlzIGF0dGFjaGVkIHRvIGEgZmlsZSwgcGlwZSwgdGVybWluYWwsIG9yCi8vLyBzb21ldGhpbmcgZWxzZS4KU3RkaW9UeXBlIHN0ZGlvVHlwZShvYmplY3QpIHsKICBpZiAob2JqZWN0IGlzIF9TdGRTdHJlYW0pIHsKICAgIG9iamVjdCA9IG9iamVjdC5fc3RyZWFtOwogIH0gZWxzZSBpZiAob2JqZWN0ID09IHN0ZG91dCB8fCBvYmplY3QgPT0gc3RkZXJyKSB7CiAgICBpbnQgc3RkaW9mZCA9IG9iamVjdCA9PSBzdGRvdXQgPyBfc3Rkb3V0RkQgOiBfc3RkZXJyRkQ7CiAgICBzd2l0Y2ggKF9TdGRJT1V0aWxzLl9nZXRTdGRpb0hhbmRsZVR5cGUoc3RkaW9mZCkpIHsKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlVGVybWluYWw6CiAgICAgICAgcmV0dXJuIFN0ZGlvVHlwZS50ZXJtaW5hbDsKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlUGlwZToKICAgICAgICByZXR1cm4gU3RkaW9UeXBlLnBpcGU7CiAgICAgIGNhc2UgX3N0ZGlvSGFuZGxlVHlwZUZpbGU6CiAgICAgICAgcmV0dXJuIFN0ZGlvVHlwZS5maWxlOwogICAgfQogIH0KICBpZiAob2JqZWN0IGlzIF9GaWxlU3RyZWFtKSB7CiAgICByZXR1cm4gU3RkaW9UeXBlLmZpbGU7CiAgfQogIGlmIChvYmplY3QgaXMgU29ja2V0KSB7CiAgICBpbnQgc29ja2V0VHlwZSA9IF9TdGRJT1V0aWxzLl9zb2NrZXRUeXBlKG9iamVjdCk7CiAgICBpZiAoc29ja2V0VHlwZSA9PSBudWxsKSByZXR1cm4gU3RkaW9UeXBlLm90aGVyOwogICAgc3dpdGNoIChzb2NrZXRUeXBlKSB7CiAgICAgIGNhc2UgX3N0ZGlvSGFuZGxlVHlwZVRlcm1pbmFsOgogICAgICAgIHJl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OwogICAgICBjYXNlIF9zdGRpb0hhbmRsZVR5cGVGaWxlOgogICAgICAgIHJldHVybiBuZXcgU3RkaW4uXyhuZXcgX0ZpbGVTdHJlYW0uZm9yU3RkaW4oKSwgZmQpOwogICAgICBkZWZhdWx0OgogICAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKAogICAgICAgICAgICAiQ291bGRuJ3QgZGV0ZXJtaW5lIGZpbGUgdHlwZSBvZiBzdGRpbiAoZmQgJGZkKSIpOwogICAgfQogIH0KCiAgQHBhdGNoCiAgc3RhdGljIF9nZXRTdGRpb091dHB1dFN0cmVhbShpbnQgZmQpIHsKICAgIHN3aXRjaCAoX2dldFN0ZGlvSGFuZGxlVHlwZShmZCkpIHsKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlVGVybWluYWw6CiAgICAgIGNhc2UgX3N0ZGlvSGFuZGxlVHlwZVBpcGU6CiAgICAgIGNhc2UgX3N0ZGlvSGFuZGxlVHlwZVNvY2tldDoKICAgICAgY2FzZSBfc3RkaW9IYW5kbGVUeXBlRmlsZToKICAgICAgICByZXR1cm4gbmV3IFN0ZG91dC5fKG5ldyBJT1NpbmsobmV3IF9TdGRDb25zdW1lcihmZCkpLCBmZCk7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgdGhyb3cgbmV3IEZpbGVTeXN0ZW1FeGNlcHRpb24oCiAgICAgICAgICAgICJDb3VsZG4ndCBkZXRlcm1pbmUgZmlsZSB0eXBlIG9mIHN0ZGlvIGhhbmRsZSAoZmQgJGZkKSIpOwogICAgfQogIH0KCiAgQHBhdGNoCiAgc3RhdGljIGludCBfc29ja2V0VHlwZShTb2NrZXQgc29ja2V0KSB7CiAgICBpZiAoc29ja2V0IGlzIF9Tb2NrZXQpIHJldHVybiBfbmF0aXZlU29ja2V0VHlwZShzb2NrZXQuX25hdGl2ZVNvY2tldCk7CiAgICByZXR1cm4gbnVsbDsKICB9CgogIHN0YXRpYyBpbnQgX25hdGl2ZVNvY2tldFR5cGUoX05hdGl2ZVNvY2tldCBuYXRpdmVTb2NrZXQpIHsKICAgIHZhciByZXN1bHQgPSBfZ2V0U29ja2V0VHlwZShuYXRpdmVTb2NrZXQpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBGaWxlU3lzdGVtRXhjZXB0aW9uKCJFcnJvciByZXRyaWV2aW5nIHNvY2tldCB0eXBlIiwgIiIsIHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIF9nZXRTdGRpb0hhbmRsZVR5cGUoaW50IGZkKSBuYXRpdmUgIkZpbGVfR2V0U3RkaW9IYW5kbGVUeXBlIjsKfQoKQHBhdGNoCmNsYXNzIFN0ZGluIHsKICBAcGF0Y2gKICBpbnQgcmVhZEJ5dGVTeW5jKCkgewogICAgdmFyIHJlc3VsdCA9IF9yZWFkQnl0ZShfZmQpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBTdGRpbkV4Y2VwdGlvbigiRXJyb3IgcmVhZGluZyBieXRlIGZyb20gc3RkaW4iLCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIEBwYXRjaAogIGJvb2wgZ2V0IGVjaG9Nb2RlIHsKICAgIHZhciByZXN1bHQgPSBfZWNob01vZGUoX2ZkKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgU3RkaW5FeGNlcHRpb24oIkVycm9yIGdldHRpbmcgdGVybWluYWwgZWNobyBtb2RlIiwgcmVzdWx0KTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAcGF0Y2gKICB2b2lkIHNldCBlY2hvTW9kZShib29sIGVuYWJsZWQpIHsKICAgIGlmICghX0VtYmVkZGVyQ29uZmlnLl9tYXlTZXRFY2hvTW9kZSkgewogICAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAgICJUaGlzIGVtYmVkZGVyIGRpc2FsbG93cyBzZXR0aW5nIFN0ZGluLmVjaG9Nb2RlIik7CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gX3NldEVjaG9Nb2RlKF9mZCwgZW5hYmxlZCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IFN0ZGluRXhjZXB0aW9uKCJFcnJvciBzZXR0aW5nIHRlcm1pbmFsIGVjaG8gbW9kZSIsIHJlc3VsdCk7CiAgICB9CiAgfQoKICBAcGF0Y2gKICBib29sIGdldCBsaW5lTW9kZSB7CiAgICB2YXIgcmVzdWx0ID0gX2xpbmVNb2RlKF9mZCk7CiAgICBpZiAocmVzdWx0IGlzIE9TRXJyb3IpIHsKICAgICAgdGhyb3cgbmV3IFN0ZGluRXhjZXB0aW9uKCJFcnJvciBnZXR0aW5nIHRlcm1pbmFsIGxpbmUgbW9kZSIsIHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQHBhdGNoCiAgdm9pZCBzZXQgbGluZU1vZGUoYm9vbCBlbmFibGVkKSB7CiAgICBpZiAoIV9FbWJlZGRlckNvbmZpZy5fbWF5U2V0TGluZU1vZGUpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoCiAgICAgICAgICAiVGhpcyBlbWJlZGRlciBkaXNhbGxvd3Mgc2V0dGluZyBTdGRpbi5saW5lTW9kZSIpOwogICAgfQogICAgdmFyIHJlc3VsdCA9IF9zZXRMaW5lTW9kZShfZmQsIGVuYWJsZWQpOwogICAgaWYgKHJlc3VsdCBpcyBPU0Vycm9yKSB7CiAgICAgIHRocm93IG5ldyBTdGRpbkV4Y2VwdGlvbigiRXJyb3Igc2V0dGluZyB0ZXJtaW5hbCBsaW5lIG1vZGUiLCByZXN1bHQpOwogICAgfQogIH0KCiAgQHBhdGNoCiAgYm9vbCBnZXQgc3VwcG9ydHNBbnNpRXNjYXBlcyB7CiAgICB2YXIgcmVzdWx0ID0gX3N1cHBvcnRzQW5zaUVzY2FwZXMoX2ZkKTsKICAgIGlmIChyZXN1bHQgaXMgT1NFcnJvcikgewogICAgICB0aHJvdyBuZXcgU3RkaW5FeGNlcHRpb24oIkVycm9yIGRldGVybWluaW5nIEFOU0kgc3VwcG9ydCIsIHJlc3VsdCk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgc3RhdGljIF9lY2hvTW9kZShpbnQgZmQpIG5hdGl2ZSAiU3RkaW5fR2V0RWNob01vZGUiOwogIHN0YXRpYyBfc2V0RWNob01vZGUoaW50IGZkLCBib29sIGVuYWJsZWQpIG5hdGl2ZSAiU3RkaW5fU2V0RWNob01vZGUiOwogIHN0YXRpYyBfbGluZU1vZGUoaW50IGZkKSBuYXRpdmUgIlN0ZGluX0dldExpbmVNb2RlIjsKICBzdGF0aWMgX3NldExpbmVNb2RlKGludCBmZCwgYm9vbCBlbmFibGVkKSBuYXRpdmUgIlN0ZGluX1NldExpbmVNb2RlIjsKICBzdGF0aWMgX3JlYWRCeXRlKGludCBmZCkgbmF0aXZlICJTdGRpbl9SZWFkQnl0ZSI7CiAgc3RhdGljIF9zdXBwb3J0c0Fuc2lFc2NhcGVzKGludCBmZCkgbmF0aXZlICJTdGRpbl9BbnNpU3VwcG9ydGVkIjsKfQoKQHBhdGNoCmNsYXNzIFN0ZG91dCB7CiAgQHBhdGNoCiAgYm9vbCBfaGFzVGVybWluYWwoaW50IGZkKSB7CiAgICB0cnkgewogICAgICBfdGVybWluYWxTaXplKGZkKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9IGNhdGNoIChfKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIEBwYXRjaAogIGludCBfdGVybWluYWxDb2x1bW5zKGludCBmZCkgPT4gX3Rlcm1pbmFsU2l6ZShmZClbMF07CiAgQHBhdGNoCiAgaW50IF90ZXJtaW5hbExpbmVzKGludCBmZCkgPT4gX3Rlcm1pbmFsU2l6ZShmZClbMV07CgogIHN0YXRpYyBMaXN0IF90ZXJtaW5hbFNpemUoaW50IGZkKSB7CiAgICB2YXIgc2l6ZSA9IF9nZXRUZXJtaW5hbFNpemUoZmQpOwogICAgaWYgKHNpemUgaXMhIExpc3QpIHsKICAgICAgdGhyb3cgbmV3IFN0ZG91dEV4Y2VwdGlvbigiQ291bGQgbm90IGdldCB0ZXJtaW5hbCBzaXplIiwgc2l6ZSk7CiAgICB9CiAgICByZXR1cm4gc2l6ZTsKICB9CgogIHN0YXRpYyBfZ2V0VGVybWluYWxTaXplKGludCBmZCkgbmF0aXZlICJTdGRvdXRfR2V0VGVybWluYWxTaXplIjsKCiAgQHBhdGNoCiAgc3RhdGljIGJvb2wgX3N1cHBvcnRzQW5zaUVzY2FwZXMoaW50IGZkKSB7CiAgICB2YXIgcmVzdWx0ID0gX2dldEFuc2lTdXBwb3J0ZWQoZmQpOwogICAgaWYgKHJlc3VsdCBpcyEgYm9vbCkgewogICAgICB0aHJvdyBuZXcgU3Rkb3V0RXhjZXB0aW9uKCJFcnJvciBkZXRlcm1pbmluZyBBTlNJIHN1cHBvcnQiLCByZXN1bHQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHN0YXRpYyBfZ2V0QW5zaVN1cHBvcnRlZChpbnQgZmQpIG5hdGl2ZSAiU3Rkb3V0X0Fuc2lTdXBwb3J0ZWQiOwp9CgpfZ2V0U3RkaW9IYW5kbGUoX05hdGl2ZVNvY2tldCBzb2NrZXQsIGludCBudW0pIG5hdGl2ZSAiU29ja2V0X0dldFN0ZGlvSGFuZGxlIjsKX2dldFNvY2tldFR5cGUoX05hdGl2ZVNvY2tldCBuYXRpdmVTb2NrZXQpIG5hdGl2ZSAiU29ja2V0X0dldFR5cGUiOwqAqABOTjwBIAEHFAkuJyUhIzshPA8nPwYEAQkpJyUhIyFDDydGBgQBCSpLEQQBPS8dUQYTBAEJRwIBBw4JFyEdSQYTBAEJFiEdTAYTBAEJJCwiPQYtHUwGBAEJFiEdTAYTBAEJJCwiPQYtHUwGBAEJISwdSgYTBAE3SDdINEQCAQcPCR4KGRMSFAYEAQk4CTYBJiUZRgYRBAFDAQktKBtLBhMEAUICAU9EAR5kYXJ0OmlvLXBhdGNoL3N0ZGlvX3BhdGNoLmRhcnQ2b3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2lvL3N0cmluZ190cmFuc2Zvcm1lci5kYXJ0jdovLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLy8vIFRoZSBjdXJyZW50IHN5c3RlbSBlbmNvZGluZy4KLy8vCi8vLyBUaGlzIGlzIHVzZWQgZm9yIGNvbnZlcnRpbmcgZnJvbSBieXRlcyB0byBhbmQgZnJvbSBTdHJpbmdzIHdoZW4KLy8vIGNvbW11bmljYXRpbmcgb24gc3RkaW4sIHN0ZG91dCBhbmQgc3RkZXJyLgovLy8KLy8vIE9uIFdpbmRvd3MgdGhpcyB3aWxsIHVzZSB0aGUgY3VycmVudGx5IGFjdGl2ZSBjb2RlIHBhZ2UgZm9yIHRoZSBjb252ZXJzaW9uLgovLy8gT24gYWxsIG90aGVyIHN5c3RlbXMgaXQgd2lsbCBhbHdheXMgdXNlIFVURi04Lgpjb25zdCBTeXN0ZW1FbmNvZGluZyBzeXN0ZW1FbmNvZGluZyA9IGNvbnN0IFN5c3RlbUVuY29kaW5nKCk7CkBEZXByZWNhdGVkKCJVc2Ugc3lzdGVtRW5jb2RpbmcgaW5zdGVhZCIpCmNvbnN0IFN5c3RlbUVuY29kaW5nIFNZU1RFTV9FTkNPRElORyA9IGNvbnN0IFN5c3RlbUVuY29kaW5nKCk7CgovLy8gVGhlIHN5c3RlbSBlbmNvZGluZyBpcyB0aGUgY3VycmVudCBjb2RlIHBhZ2Ugb24gV2luZG93cyBhbmQgVVRGLTggb24gTGludXgKLy8vIGFuZCBNYWMuCmNsYXNzIFN5c3RlbUVuY29kaW5nIGV4dGVuZHMgRW5jb2RpbmcgewogIC8vLyBDcmVhdGVzIGEgY29uc3QgU3lzdGVtRW5jb2RpbmcuCiAgLy8vCiAgLy8vIFVzZXJzIHNob3VsZCB1c2UgdGhlIHRvcC1sZXZlbCBjb25zdGFudCwgW3N5c3RlbUVuY29kaW5nXS4KICBjb25zdCBTeXN0ZW1FbmNvZGluZygpOwoKICBTdHJpbmcgZ2V0IG5hbWUgPT4gJ3N5c3RlbSc7CgogIExpc3Q8aW50PiBlbmNvZGUoU3RyaW5nIGlucHV0KSA9PiBlbmNvZGVyLmNvbnZlcnQoaW5wdXQpOwogIFN0cmluZyBkZWNvZGUoTGlzdDxpbnQ+IGVuY29kZWQpID0+IGRlY29kZXIuY29udmVydChlbmNvZGVkKTsKCiAgQ29udmVydGVyPFN0cmluZywgTGlzdDxpbnQ+PiBnZXQgZW5jb2RlciB7CiAgICBpZiAoUGxhdGZvcm0ub3BlcmF0aW5nU3lzdGVtID09ICJ3aW5kb3dzIikgewogICAgICByZXR1cm4gY29uc3QgX1dpbmRvd3NDb2RlUGFnZUVuY29kZXIoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBjb25zdCBVdGY4RW5jb2RlcigpOwogICAgfQogIH0KCiAgQ29udmVydGVyPExpc3Q8aW50PiwgU3RyaW5nPiBnZXQgZGVjb2RlciB7CiAgICBpZiAoUGxhdGZvcm0ub3BlcmF0aW5nU3lzdGVtID09ICJ3aW5kb3dzIikgewogICAgICByZXR1cm4gY29uc3QgX1dpbmRvd3NDb2RlUGFnZURlY29kZXIoKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBjb25zdCBVdGY4RGVjb2RlcigpOwogICAgfQogIH0KfQoKY2xhc3MgX1dpbmRvd3NDb2RlUGFnZUVuY29kZXIgZXh0ZW5kcyBDb252ZXJ0ZXI8U3RyaW5nLCBMaXN0PGludD4+IHsKICBjb25zdCBfV2luZG93c0NvZGVQYWdlRW5jb2RlcigpOwoKICBMaXN0PGludD4gY29udmVydChTdHJpbmcgaW5wdXQpIHsKICAgIExpc3Q8aW50PiBlbmNvZGVkID0gX2VuY29kZVN0cmluZyhpbnB1dCk7CiAgICBpZiAoZW5jb2RlZCA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgY2hhcmFjdGVyIGZvciBlbmNvZGluZyIpOwogICAgfQogICAgcmV0dXJuIGVuY29kZWQ7CiAgfQoKICAvKioKICAgKiBTdGFydHMgYSBjaHVua2VkIGNvbnZlcnNpb24uCiAgICovCiAgU3RyaW5nQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPExpc3Q8aW50Pj4gc2luaykgewogICAgcmV0dXJuIG5ldyBfV2luZG93c0NvZGVQYWdlRW5jb2RlclNpbmsoc2luayk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgTGlzdDxpbnQ+IF9lbmNvZGVTdHJpbmcoU3RyaW5nIHN0cmluZyk7Cn0KCmNsYXNzIF9XaW5kb3dzQ29kZVBhZ2VFbmNvZGVyU2luayBleHRlbmRzIFN0cmluZ0NvbnZlcnNpb25TaW5rQmFzZSB7CiAgLy8gVE9ETyhmbG9pdHNjaCk6IHByb3ZpZGUgbW9yZSBlZmZpY2llbnQgY29udmVyc2lvbnMgd2hlbiB0aGUgaW5wdXQgaXMKICAvLyBub3QgYSBTdHJpbmcuCgogIGZpbmFsIFNpbms8TGlzdDxpbnQ+PiBfc2luazsKCiAgX1dpbmRvd3NDb2RlUGFnZUVuY29kZXJTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkKFN0cmluZyBzdHJpbmcpIHsKICAgIExpc3Q8aW50PiBlbmNvZGVkID0gX1dpbmRvd3NDb2RlUGFnZUVuY29kZXIuX2VuY29kZVN0cmluZyhzdHJpbmcpOwogICAgaWYgKGVuY29kZWQgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIGNoYXJhY3RlciBmb3IgZW5jb2RpbmciKTsKICAgIH0KICAgIF9zaW5rLmFkZChlbmNvZGVkKTsKICB9CgogIHZvaWQgYWRkU2xpY2UoU3RyaW5nIHNvdXJjZSwgaW50IHN0YXJ0LCBpbnQgZW5kLCBib29sIGlzTGFzdCkgewogICAgaWYgKHN0YXJ0ICE9IDAgfHwgZW5kICE9IHNvdXJjZS5sZW5ndGgpIHsKICAgICAgc291cmNlID0gc291cmNlLnN1YnN0cmluZyhzdGFydCwgZW5kKTsKICAgIH0KICAgIGFkZChzb3VyY2UpOwogICAgaWYgKGlzTGFzdCkgY2xvc2UoKTsKICB9Cn0KCmNsYXNzIF9XaW5kb3dzQ29kZVBhZ2VEZWNvZGVyIGV4dGVuZHMgQ29udmVydGVyPExpc3Q8aW50PiwgU3RyaW5nPiB7CiAgY29uc3QgX1dpbmRvd3NDb2RlUGFnZURlY29kZXIoKTsKCiAgU3RyaW5nIGNvbnZlcnQoTGlzdDxpbnQ+IGlucHV0KSB7CiAgICByZXR1cm4gX2RlY29kZUJ5dGVzKGlucHV0KTsKICB9CgogIC8qKgogICAqIFN0YXJ0cyBhIGNodW5rZWQgY29udmVyc2lvbi4KICAgKi8KICBCeXRlQ29udmVyc2lvblNpbmsgc3RhcnRDaHVua2VkQ29udmVyc2lvbihTaW5rPFN0cmluZz4gc2luaykgewogICAgcmV0dXJuIG5ldyBfV2luZG93c0NvZGVQYWdlRGVjb2RlclNpbmsoc2luayk7CiAgfQoKICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIF9kZWNvZGVCeXRlcyhMaXN0PGludD4gYnl0ZXMpOwp9CgpjbGFzcyBfV2luZG93c0NvZGVQYWdlRGVjb2RlclNpbmsgZXh0ZW5kcyBCeXRlQ29udmVyc2lvblNpbmtCYXNlIHsKICAvLyBUT0RPKGZsb2l0c2NoKTogcHJvdmlkZSBtb3JlIGVmZmljaWVudCBjb252ZXJzaW9ucyB3aGVuIHRoZSBpbnB1dCBpcwogIC8vIGEgc2xpY2UuCgogIGZpbmFsIFNpbms8U3RyaW5nPiBfc2luazsKCiAgX1dpbmRvd3NDb2RlUGFnZURlY29kZXJTaW5rKHRoaXMuX3NpbmspOwoKICB2b2lkIGNsb3NlKCkgewogICAgX3NpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkKExpc3Q8aW50PiBieXRlcykgewogICAgX3NpbmsuYWRkKF9XaW5kb3dzQ29kZVBhZ2VEZWNvZGVyLl9kZWNvZGVCeXRlcyhieXRlcykpOwogIH0KfQqAhABOTjwBEQEhBEQvBFAzPio/AU8NKCYGQRoBHwE8QAEtMS4NIgYEAS0xLg0iBgQCAUUjASQuG0MGFAQBBiIGRjIEAToCAUVKEwEfASsBERMEARxHG0MGGAQBQi4tBhEZBAIBRSMBJCAEAQYiBkEyBAE4AgFDSg4BHAErARETBAEePAQCAR9kYXJ0OmlvL3N0cmluZ190cmFuc2Zvcm1lci5kYXJ0L29yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9pby9zeW5jX3NvY2tldC5kYXJ0j9IvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmlvOwoKLyoqCiAqIEEgbG93LWxldmVsIGNsYXNzIGZvciBjb21tdW5pY2F0aW5nIHN5bmNocm9ub3VzbHkgb3ZlciBhIFRDUCBzb2NrZXQuCiAqCiAqIFdhcm5pbmc6IFtSYXdTeW5jaHJvbm91c1NvY2tldF0gc2hvdWxkIHByb2JhYmx5IG9ubHkgYmUgdXNlZCB0byBjb25uZWN0IHRvCiAqICdsb2NhbGhvc3QnLiBUaGUgb3BlcmF0aW9ucyBiZWxvdyB3aWxsIGJsb2NrIHRoZSBjYWxsaW5nIHRocmVhZCB0byB3YWl0IGZvcgogKiBhIHJlc3BvbnNlIGZyb20gdGhlIG5ldHdvcmsuIFRoZSB0aHJlYWQgY2FuIHByb2Nlc3Mgbm8gb3RoZXIgZXZlbnRzIHdoaWxlCiAqIHdhaXRpbmcgZm9yIHRoZXNlIG9wZXJhdGlvbnMgdG8gY29tcGxldGUuIFtSYXdTeW5jaHJvbm91c1NvY2tldF0gaXMgbm90CiAqIHN1aXRhYmxlIGZvciBhcHBsaWNhdGlvbnMgdGhhdCByZXF1aXJlIGhpZ2ggcGVyZm9ybWFuY2Ugb3IgYXN5bmNocm9ub3VzIEkvTwogKiBzdWNoIGFzIGEgc2VydmVyLiBJbnN0ZWFkIHN1Y2ggYXBwbGljYXRpb25zIHNob3VsZCB1c2UgdGhlIG5vbi1ibG9ja2luZwogKiBzb2NrZXRzIGFuZCBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyBpbiB0aGUgU29ja2V0IG9yIFJhd1NvY2tldCBjbGFzc2VzLgogKi8KYWJzdHJhY3QgY2xhc3MgUmF3U3luY2hyb25vdXNTb2NrZXQgewogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgc29ja2V0IGNvbm5lY3Rpb24gYW5kIHJldHVybnMgYSBbUmF3U3luY2hyb25vdXNTb2NrZXRdLgogICAqCiAgICogW2hvc3RdIGNhbiBlaXRoZXIgYmUgYSBbU3RyaW5nXSBvciBhbiBbSW50ZXJuZXRBZGRyZXNzXS4gSWYgW2hvc3RdIGlzIGEKICAgKiBbU3RyaW5nXSwgW2Nvbm5lY3RTeW5jXSB3aWxsIHBlcmZvcm0gYSBbSW50ZXJuZXRBZGRyZXNzLmxvb2t1cF0gYW5kIHRyeQogICAqIGFsbCByZXR1cm5lZCBbSW50ZXJuZXRBZGRyZXNzXWVzLCB1bnRpbCBjb25uZWN0ZWQuIFVubGVzcyBhCiAgICogY29ubmVjdGlvbiB3YXMgZXN0YWJsaXNoZWQsIHRoZSBlcnJvciBmcm9tIHRoZSBmaXJzdCBmYWlsaW5nIGNvbm5lY3Rpb24gaXMKICAgKiByZXR1cm5lZC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgUmF3U3luY2hyb25vdXNTb2NrZXQgY29ubmVjdFN5bmMoaG9zdCwgaW50IHBvcnQpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVjZWl2ZWQgYW5kIHVucmVhZCBieXRlcyBpbiB0aGUgc29ja2V0IHRoYXQgY2FuIGJlCiAgICogcmVhZC4KICAgKi8KICBpbnQgYXZhaWxhYmxlKCk7CgogIC8qKgogICAqIENsb3NlcyB0aGUgW1Jhd1N5bmNocm9ub3VzU29ja2V0XS4KICAgKgogICAqIE9uY2UgW2Nsb3NlU3luY10gaGFzIGJlZW4gY2FsbGVkLCBhdHRlbXB0aW5nIHRvIGNhbGwgW3JlYWRTeW5jXSwKICAgKiBbcmVhZEludG9TeW5jXSwgW3dyaXRlRnJvbVN5bmNdLCBbcmVtb3RlQWRkcmVzc10sIGFuZCBbcmVtb3RlUG9ydF0gd2lsbAogICAqIGNhdXNlIGEgW1NvY2tldEV4Y2VwdGlvbl0gdG8gYmUgdGhyb3duLgogICAqLwogIHZvaWQgY2xvc2VTeW5jKCk7CgogIC8qKgogICAqIFJlYWRzIGludG8gYW4gZXhpc3RpbmcgW0xpc3Q8aW50Pl0gZnJvbSB0aGUgc29ja2V0IGludG8gdGhlIHJhbmdlOgogICAqIFtbc3RhcnRdLFtlbmRdKS4KICAgKgogICAqIFJlYWRzIGludG8gYW4gZXhpc3RpbmcgW0xpc3Q8aW50Pl0gZnJvbSB0aGUgc29ja2V0LiBJZiBbc3RhcnRdIGlzIHByZXNlbnQsCiAgICogdGhlIGJ5dGVzIHdpbGwgYmUgZmlsbGVkIGludG8gW2J1ZmZlcl0gZnJvbSBpbmRleCBbc3RhcnRdLCBvdGhlcndpc2UgaW5kZXgKICAgKiAwLiBJZiBbZW5kXSBpcyBwcmVzZW50LCBbZW5kXSAtIFtzdGFydF0gYnl0ZXMgd2lsbCBiZSByZWFkIGludG8gW2J1ZmZlcl0sCiAgICogb3RoZXJ3aXNlIHVwIHRvIFtidWZmZXIubGVuZ3RoXS4gSWYgW2VuZF0gPT0gW3N0YXJ0XSwgbm8gYnl0ZXMgYXJlIHJlYWQuCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuCiAgICovCiAgaW50IHJlYWRJbnRvU3luYyhMaXN0PGludD4gYnVmZmVyLCBbaW50IHN0YXJ0ID0gMCwgaW50IGVuZF0pOwoKICAvKioKICAgKiBSZWFkcyB1cCB0byBbYnl0ZXNdIGJ5dGVzIGZyb20gdGhlIHNvY2tldC4KICAgKgogICAqIEJsb2NrcyBhbmQgd2FpdHMgZm9yIGEgcmVzcG9uc2Ugb2YgdXAgdG8gYSBzcGVjaWZpZWQgbnVtYmVyIG9mIGJ5dGVzCiAgICogc2VudCBieSB0aGUgc29ja2V0LiBbYnl0ZXNdIHNwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8KICAgKiBiZSByZWFkLiBSZXR1cm5zIHRoZSBsaXN0IG9mIGJ5dGVzIHJlYWQsIHdoaWNoIGNvdWxkIGJlIGxlc3MgdGhhbiB0aGUKICAgKiB2YWx1ZSBzcGVjaWZpZWQgYnkgW2J5dGVzXS4KICAgKi8KICBMaXN0PGludD4gcmVhZFN5bmMoaW50IGJ5dGVzKTsKCiAgLyoqCiAgICogU2h1dGRvd24gYSBzb2NrZXQgaW4gdGhlIHByb3ZpZGVkIGRpcmVjdGlvbi4KICAgKgogICAqIENhbGxpbmcgc2h1dGRvd24gd2lsbCBuZXZlciB0aHJvdyBhbiBleGNlcHRpb24gYW5kIGNhbGxpbmcgaXQgc2V2ZXJhbCB0aW1lcwogICAqIGlzIHN1cHBvcnRlZC4gSWYgYm90aCBbU29ja2V0RGlyZWN0aW9uLlJFQ0VJVkVdIGFuZCBbU29ja2V0RGlyZWN0aW9uLlNFTkRdCiAgICogZGlyZWN0aW9ucyBhcmUgY2xvc2VkLCB0aGUgc29ja2V0IGlzIGNsb3NlZCBjb21wbGV0ZWx5LCB0aGUgc2FtZSBhcyBpZgogICAqIFtjbG9zZVN5bmNdIGhhcyBiZWVuIGNhbGxlZC4KICAgKi8KICB2b2lkIHNodXRkb3duKFNvY2tldERpcmVjdGlvbiBkaXJlY3Rpb24pOwoKICAvKioKICAgKiBXcml0ZXMgZGF0YSBmcm9tIGEgc3BlY2lmaWVkIHJhbmdlIGluIGEgW0xpc3Q8aW50Pl0gdG8gdGhlIHNvY2tldC4KICAgKgogICAqIFdyaXRlcyBpbnRvIHRoZSBzb2NrZXQgZnJvbSBhIFtMaXN0PGludD5dLiBJZiBbc3RhcnRdIGlzIHByZXNlbnQsIHRoZSBieXRlcwogICAqIHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgc29ja2V0IHN0YXJ0aW5nIGZyb20gaW5kZXggW3N0YXJ0XS4gSWYgW3N0YXJ0XSBpcwogICAqIG5vdCBwcmVzZW50LCB0aGUgYnl0ZXMgd2lsbCBiZSB3cml0dGVuIHN0YXJ0aW5nIGZyb20gaW5kZXggMC4gSWYgW2VuZF0gaXMKICAgKiBwcmVzZW50LCB0aGUgW2VuZF0gLSBbc3RhcnRdIGJ5dGVzIHdpbGwgYmUgd3JpdHRlbiBpbnRvIHRoZSBzb2NrZXQgc3RhcnRpbmcKICAgKiBhdCBpbmRleCBbc3RhcnRdLiBJZiBbZW5kXSBpcyBub3QgcHJvdmlkZWQsIFtidWZmZXIubGVuZ3RoXSBlbGVtZW50cyB3aWxsCiAgICogYmUgd3JpdHRlbiB0byB0aGUgc29ja2V0IHN0YXJ0aW5nIGZyb20gaW5kZXggW3N0YXJ0XS4gSWYgW2VuZF0gPT0gW3N0YXJ0XSwKICAgKiBub3RoaW5nIGhhcHBlbnMuCiAgICovCiAgdm9pZCB3cml0ZUZyb21TeW5jKExpc3Q8aW50PiBidWZmZXIsIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSk7CgogIC8qKgogICAqIFRoZSBwb3J0IHVzZWQgYnkgdGhpcyBzb2NrZXQuCiAgICovCiAgaW50IGdldCBwb3J0OwoKICAvKioKICAgKiBUaGUgcmVtb3RlIHBvcnQgY29ubmVjdGVkIHRvIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIGludCBnZXQgcmVtb3RlUG9ydDsKCiAgLyoqCiAgICogVGhlIFtJbnRlcm5ldEFkZHJlc3NdIHVzZWQgdG8gY29ubmVjdCB0aGlzIHNvY2tldC4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3M7CgogIC8qKgogICAqIFRoZSByZW1vdGUgW0ludGVybmV0QWRkcmVzc10gY29ubmVjdGVkIHRvIGJ5IHRoaXMgc29ja2V0LgogICAqLwogIEludGVybmV0QWRkcmVzcyBnZXQgcmVtb3RlQWRkcmVzczsKfQpvAE5OPAERAQRIA05PTUtPS0sEJgZLBU1NQVAPBkQBBk8LBhMBBigFRk0tBhQBBkgWBVBQT04nBkABBjAFSkpLIQYhAQYyBVFQTCIGLAEGSAVRTk9RT1AWBkIBBiMGEAEGMgYWAQY4Bh8BBj8GJQIBGGRhcnQ6aW8vc3luY19zb2NrZXQuZGFydChvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY2xpL2NsaS5kYXJ0gT8vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8vIHtAY2F0ZWdvcnkgVk19CmxpYnJhcnkgZGFydC5jbGk7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6bWF0aCc7CgpwYXJ0ICd3YWl0X2Zvci5kYXJ0JzsKDQBOTjwBExIBFRQBFgEIZGFydDpjbGktb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NsaS93YWl0X2Zvci5kYXJ0mF0vLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNsaTsKCi8qKgogKiBTeW5jaHJvbm91c2x5IGJsb2NrcyB0aGUgY2FsbGluZyBpc29sYXRlIHRvIHdhaXQgZm9yIGFzeW5jaHJvbm91cyBldmVudHMgdG8KICogY29tcGxldGUuCiAqCiAqIElmIHRoZSBbdGltZW91dF0gcGFyYW1ldGVyIGlzIHN1cHBsaWVkLCBbd2FpdEZvckV2ZW50XSB3aWxsIHJldHVybiBhZnRlcgogKiB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgZXZlbiBpZiBubyBldmVudHMgaGF2ZSBvY2N1cnJlZC4KICoKICogVGhpcyBjYWxsIGRvZXMgdGhlIGZvbGxvd2luZzoKICogLSBzdXNwZW5kcyB0aGUgY3VycmVudCBleGVjdXRpb24gc3RhY2ssCiAqIC0gcnVucyB0aGUgbWljcm90YXNrIHF1ZXVlIHVudGlsIGl0IGlzIGVtcHR5LAogKiAtIHdhaXRzIHVudGlsIHRoZSBtZXNzYWdlIHF1ZXVlIGlzIG5vdCBlbXB0eSwKICogLSBoYW5kbGVzIG1lc3NhZ2VzIG9uIHRoZSBtZXNzYWdlIHF1ZXVlLCBwbHVzIHRoZWlyIGFzc29jaWF0ZWQgbWljcm90YXNrcywKICogICB1bnRpbCB0aGUgbWVzc2FnZSBxdWV1ZSBpcyBlbXB0eSwKICogLSByZXN1bWVzIHRoZSBvcmlnaW5hbCBzdGFjay4KICoKICogVGhpcyBmdW5jdGlvbiBicmVha3MgdGhlIHVzdWFsIHByb21pc2Ugb2ZmZXJlZCBieSBEYXJ0IHNlbWFudGljcyB0aGF0CiAqIG1lc3NhZ2UgaGFuZGxlcnMgYW5kIG1pY3JvdGFza3MgcnVuIHRvIGNvbXBsZXRpb24gYmVmb3JlIHRoZSBuZXh0IG1lc3NhZ2UKICogaGFuZGxlciBvciBtaWNyb3Rhc2sgYmVnaW5zIHRvIHJ1bi4gT2YgcGFydGljdWxhciBub3RlIGlzIHRoYXQgdXNlIG9mIHRoaXMKICogZnVuY3Rpb24gaW4gYSBmaW5hbGx5IGJsb2NrIHdpbGwgYWxsb3cgbWljcm90YXNrcyBhbmQgbWVzc2FnZSBoYW5kbGVycyB0bwogKiBydW4gYmVmb3JlIGFsbCBmaW5hbGx5IGJsb2NrcyBmb3IgYW4gZXhjZXB0aW9uIGhhdmUgY29tcGxldGVkLCBwb3NzaWJseQogKiBicmVha2luZyBpbnZhcmlhbnRzIGluIHlvdXIgcHJvZ3JhbS4KICoKICogVGhpcyBmdW5jdGlvbiB3aWxsIHN5bmNocm9ub3VzbHkgdGhyb3cgdGhlIGZpcnN0IHVuaGFuZGxlZCBleGNlcHRpb24gaXQKICogZW5jb3VudGVycyBpbiBydW5uaW5nIHRoZSBtaWNyb3Rhc2tzIGFuZCBtZXNzYWdlIGhhbmRsZXJzIGFzIHRob3VnaCB0aGUKICogdGhyb3dpbmcgbWljcm90YXNrIG9yIG1lc3NhZ2UgaGFuZGxlciB3YXMgdGhlIG9ubHkgRGFydCBpbnZvY2F0aW9uIG9uIHRoZQogKiBzdGFjay4gVGhhdCBpcywgdW5oYW5kbGVkIGV4Y2VwdGlvbnMgaW4gYSBtaWNyb3Rhc2sgb3IgbWVzc2FnZSBoYW5kbGVyIHdpbGwKICogc2tpcCBvdmVyIHN0YWNrcyBzdXNwZW5kZWQgaW4gYSBjYWxsIHRvIFt3YWl0Rm9yRXZlbnRdLgogKgogKiBDYWxscyB0byB0aGlzIGZ1bmN0aW9uIG1heSBiZSBuZXN0ZWQuIEVhcmxpZXIgaW52b2NhdGlvbnMgd2lsbCBub3QKICogYmUgYWJsZSB0byBjb21wbGV0ZSB1bnRpbCBzdWJzZXF1ZW50IG9uZXMgZG8uIE1lc3NhZ2VzIHRoYXQgYXJyaXZlIGFmdGVyCiAqIGEgc3Vic2VxdWVudCBpbnZvY2F0aW9uIGFyZSAiY29uc3VtZWQiIGJ5IHRoYXQgaW52b2NhdGlvbiwgYW5kIGRvIG5vdAogKiB1bmJsb2NrIGFuIGVhcmxpZXIgaW52b2NhdGlvbi4gUGxlYXNlIGJlIGF3YXJlIHRoYXQgbmVzdGluZyBjYWxscyB0bwogKiBbd2FpdEZvckV2ZW50XSBjYW4gbGVhZCB0byBkZWFkbG9jayB3aGVuIHN1YnNlcXVlbnQgY2FsbHMgYmxvY2sgdG8gd2FpdCBmb3IKICogYSBjb25kaXRpb24gdGhhdCBpcyBvbmx5IHNhdGlzZmllZCBhZnRlciBhbiBlYXJsaWVyIGNhbGwgcmV0dXJucy4KICoKICogUGxlYXNlIG5vdGUgdGhhdCB0aGlzIGNhbGwgaXMgb25seSBhdmFpbGFibGUgaW4gdGhlIHN0YW5kYWxvbmUgY29tbWFuZC1saW5lCiAqIERhcnQgVk0uIEZ1cnRoZXIsIGJlY2F1c2UgaXQgc3VzcGVuZHMgdGhlIGN1cnJlbnQgZXhlY3V0aW9uIHN0YWNrIHVudGlsIHRoZQogKiBtZXNzYWdlIHF1ZXVlIGlzIGVtcHR5LCBldmVuIHdoZW4gcnVubmluZyBpbiB0aGUgc3RhbmRhbG9uZSBjb21tYW5kLWxpbmUgVk0KICogdGhlcmUgZXhpc3RzIGEgcmlzayB0aGF0IHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBzdGFjayB3aWxsIGJlIHN0YXJ2ZWQuCiAqLwpleHRlcm5hbCB2b2lkIF93YWl0Rm9yRXZlbnQoaW50IHRpbWVvdXRNaWxsaXMpOwoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQp2b2lkIEZ1bmN0aW9uKGludCkgX2dldFdhaXRGb3JFdmVudCgpID0+IF93YWl0Rm9yRXZlbnQ7CgovLyBUaGlzIHNob3VsZCBiZSBzZXQgZnJvbSBDKysgY29kZSBieSB0aGUgZW1iZWRkZXIgdG8gd2lyZSB1cCB3YWl0Rm9yKCkgdG8gdGhlCi8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbi4gSW4gdGhlIHN0YW5kYWxvbmUgVk0gdGhpcyBpcyBzZXQgdG8gX3dhaXRGb3JFdmVudCgpCi8vIGFib3ZlLiBJZiBpdCBpcyBudWxsLCBjYWxsaW5nIHdhaXRGb3IoKSB3aWxsIHRocm93IGFuIFVuc3VwcG9ydGVkRXJyb3IuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKdm9pZCBGdW5jdGlvbihpbnQpIF93YWl0Rm9yRXZlbnRDbG9zdXJlOwoKY2xhc3MgX1dhaXRGb3JVdGlscyB7CiAgc3RhdGljIHZvaWQgd2FpdEZvckV2ZW50KHtEdXJhdGlvbiB0aW1lb3V0fSkgewogICAgaWYgKF93YWl0Rm9yRXZlbnRDbG9zdXJlID09IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIndhaXRGb3IgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVtYmVkZGVyIik7CiAgICB9CiAgICBfd2FpdEZvckV2ZW50Q2xvc3VyZSh0aW1lb3V0ID09IG51bGwgPyAwIDogbWF4KDEsIHRpbWVvdXQuaW5NaWxsaXNlY29uZHMpKTsKICB9Cn0KCi8qKgogKiBTdXNwZW5kcyB0aGUgc3RhY2ssIHJ1bnMgbWljcm90YXNrcywgYW5kIGhhbmRsZXMgaW5jb21pbmcgZXZlbnRzIHVudGlsCiAqIFtmdXR1cmVdIGNvbXBsZXRlcy4KICoKICogV0FSTklORzogRVhQRVJJTUVOVEFMLiBVU0UgQVQgWU9VUiBPV04gUklTSy4KICoKICogVGhpcyBjYWxsIGRvZXMgdGhlIGZvbGxvd2luZzoKICogLSBXaGlsZSBbZnV0dXJlXSBpcyBub3QgY29tcGxldGVkOgogKiAgIC0gc3VzcGVuZHMgdGhlIGN1cnJlbnQgZXhlY3V0aW9uIHN0YWNrLAogKiAgIC0gcnVucyB0aGUgbWljcm90YXNrIHF1ZXVlIHVudGlsIGl0IGlzIGVtcHR5LAogKiAgIC0gd2FpdHMgdW50aWwgdGhlIG1lc3NhZ2UgcXVldWUgaXMgbm90IGVtcHR5LAogKiAgIC0gaGFuZGxlcyBtZXNzYWdlcyBvbiB0aGUgbWVzc2FnZSBxdWV1ZSwgcGx1cyB0aGVpciBhc3NvY2lhdGVkIG1pY3JvdGFza3MsCiAqICAgICB1bnRpbCB0aGUgbWVzc2FnZSBxdWV1ZSBpcyBlbXB0eSwKICogICAtIHJlc3VtZXMgdGhlIG9yaWdpbmFsIHN0YWNrLgogKgogKiBUaGlzIGZ1bmN0aW9uIGJyZWFrcyB0aGUgdXN1YWwgcHJvbWlzZSBvZmZlcmVkIGJ5IERhcnQgc2VtYW50aWNzIHRoYXQKICogbWVzc2FnZSBoYW5kbGVycyBhbmQgbWljcm90YXNrcyBydW4gdG8gY29tcGxldGlvbiBiZWZvcmUgdGhlIG5leHQgbWVzc2FnZQogKiBoYW5kbGVyIG9yIG1pY3JvdGFzayBiZWdpbnMgdG8gcnVuLiBPZiBwYXJ0aWN1bGFyIG5vdGUgaXMgdGhhdCB1c2Ugb2YgdGhpcwogKiBmdW5jdGlvbiBpbiBhIGZpbmFsbHkgYmxvY2sgd2lsbCBhbGxvdyBtaWNyb3Rhc2tzIGFuZCBtZXNzYWdlIGhhbmRsZXJzIHRvCiAqIHJ1biBiZWZvcmUgYWxsIGZpbmFsbHkgYmxvY2tzIGZvciBhbiBleGNlcHRpb24gaGF2ZSBjb21wbGV0ZWQsIHBvc3NpYmx5CiAqIGJyZWFraW5nIGludmFyaWFudHMgaW4geW91ciBwcm9ncmFtLgogKgogKiBVc2Ugb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY29uc2lkZXJlZCBhIGxhc3QgcmVzb3J0IHdoZW4gaXQgaXMgbm90CiAqIHBvc3NpYmxlIHRvIGNvbnZlcnQgYSBEYXJ0IHByb2dyYW0gZW50aXJlbHkgdG8gYW4gYXN5bmNocm9ub3VzIHN0eWxlIHVzaW5nCiAqIGBhc3luY2AgYW5kIGBhd2FpdGAuCiAqCiAqIElmIHRoZSBbRnV0dXJlXSBjb21wbGV0ZXMgbm9ybWFsbHksIGl0cyByZXN1bHQgaXMgcmV0dXJuZWQuIElmIHRoZSBbRnV0dXJlXQogKiBjb21wbGV0ZXMgd2l0aCBhbiBlcnJvciwgdGhlIGVycm9yIGFuZCBzdGFjayB0cmFjZSBhcmUgd3JhcHBlZCBpbiBhbgogKiBbQXN5bmNFcnJvcl0gYW5kIHRocm93bi4gSWYgYSBtaWNyb3Rhc2sgb3IgbWVzc2FnZSBoYW5kbGVyIHJ1biBkdXJpbmcgdGhpcwogKiBjYWxsIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbiwgdGhhdCBleGNlcHRpb24gd2lsbCBiZSBwcm9wYWdhdGVkCiAqIGFzIHRob3VnaCB0aGUgbWljcm90YXNrIG9yIG1lc3NhZ2UgaGFuZGxlciB3YXMgdGhlIG9ubHkgRGFydCBpbnZvY2F0aW9uIG9uCiAqIHRoZSBzdGFjay4gVGhhdCBpcywgdW5oYW5kbGVkIGV4Y2VwdGlvbnMgaW4gYSBtaWNyb3Rhc2sgb3IgbWVzc2FnZSBoYW5kbGVyCiAqIHdpbGwgc2tpcCBvdmVyIHN0YWNrcyBzdXNwZW5kZWQgaW4gYSBjYWxsIHRvIFt3YWl0Rm9yXS4KICoKICogSWYgdGhlIG9wdGlvbmFsIGB0aW1lb3V0YCBwYXJhbWV0ZXIgaXMgcGFzc2VkLCBbd2FpdEZvcl0gdGhyb3dzIGEKICogW1RpbWVvdXRFeGNlcHRpb25dIGlmIHRoZSBbRnV0dXJlXSBpcyBub3QgY29tcGxldGVkIHdpdGhpbiB0aGUgc3BlY2lmaWVkCiAqIHBlcmlvZC4KICoKICogQ2FsbHMgdG8gW3dhaXRGb3JdIG1heSBiZSBuZXN0ZWQuIEVhcmxpZXIgaW52b2NhdGlvbnMgd2lsbCBub3QgY29tcGxldGUKICogdW50aWwgc3Vic2VxdWVudCBvbmVzIGRvLCBidXQgdGhlIGNvbXBsZXRpb24gb2YgYSBzdWJzZXF1ZW50IGludm9jYXRpb24gd2lsbAogKiBjYXVzZSB0aGUgcHJldmlvdXMgaW52b2NhdGlvbiB0byB3YWtlIHVwIGFuZCBjaGVjayBpdHMgW0Z1dHVyZV0gZm9yCiAqIGNvbXBsZXRpb24uCiAqCiAqIFBsZWFzZSBiZSBhd2FyZSB0aGF0IG5lc3RpbmcgY2FsbHMgdG8gW3dhaXRGb3JdIGNhbiBsZWFkIHRvIGRlYWRsb2NrIGlmCiAqIHN1YnNlcXVlbnQgY2FsbHMgYmxvY2sgd2FpdGluZyBmb3IgYSBjb25kaXRpb24gdGhhdCBpcyBvbmx5IHNhdGlzZmllZCB3aGVuCiAqIGFuIGVhcmxpZXIgY2FsbCByZXR1cm5zLgogKi8KVCB3YWl0Rm9yPFQ+KEZ1dHVyZTxUPiBmdXR1cmUsIHtEdXJhdGlvbiB0aW1lb3V0fSkgewogIFQgcmVzdWx0OwogIGJvb2wgZnV0dXJlQ29tcGxldGVkID0gZmFsc2U7CiAgT2JqZWN0IGVycm9yOwogIFN0YWNrVHJhY2Ugc3RhY2t0cmFjZTsKICBmdXR1cmUudGhlbigocikgewogICAgZnV0dXJlQ29tcGxldGVkID0gdHJ1ZTsKICAgIHJlc3VsdCA9IHI7CiAgfSwgb25FcnJvcjogKGUsIHN0KSB7CiAgICBlcnJvciA9IGU7CiAgICBzdGFja3RyYWNlID0gc3Q7CiAgfSk7CgogIFN0b3B3YXRjaCBzOwogIGlmICh0aW1lb3V0ICE9IG51bGwpIHsKICAgIHMgPSBuZXcgU3RvcHdhdGNoKCkuLnN0YXJ0KCk7CiAgfQogIFRpbWVyLnJ1bigoKSB7fSk7IC8vIEVudXNyZSB0aGVyZSBpcyBhdCBsZWFzdCBvbmUgbWVzc2FnZS4KICB3aGlsZSAoIWZ1dHVyZUNvbXBsZXRlZCAmJiAoZXJyb3IgPT0gbnVsbCkpIHsKICAgIER1cmF0aW9uIHJlbWFpbmluZzsKICAgIGlmICh0aW1lb3V0ICE9IG51bGwpIHsKICAgICAgaWYgKHMuZWxhcHNlZCA+PSB0aW1lb3V0KSB7CiAgICAgICAgdGhyb3cgbmV3IFRpbWVvdXRFeGNlcHRpb24oIndhaXRGb3IoKSB0aW1lZCBvdXQiLCB0aW1lb3V0KTsKICAgICAgfQogICAgICByZW1haW5pbmcgPSB0aW1lb3V0IC0gcy5lbGFwc2VkOwogICAgfQogICAgX1dhaXRGb3JVdGlscy53YWl0Rm9yRXZlbnQodGltZW91dDogcmVtYWluaW5nKTsKICB9CiAgaWYgKHRpbWVvdXQgIT0gbnVsbCkgewogICAgcy5zdG9wKCk7CiAgfQogIFRpbWVyLnJ1bigoKSB7fSk7IC8vIEVuc3VyZSB0aGF0IHByZXZpb3VzIGNhbGxzIHRvIHdhaXRGb3IgYXJlIHdva2VuIHVwLgoKICBpZiAoZXJyb3IgIT0gbnVsbCkgewogICAgdGhyb3cgbmV3IEFzeW5jRXJyb3IoZXJyb3IsIHN0YWNrdHJhY2UpOwogIH0KCiAgcmV0dXJuIHJlc3VsdDsKfQqAmgBOTjwBEgEETw0DTDoDISsxMU4nIQNJTU5NSygDS0tNTzsDRkxJSE9FA09PT0kEMAEaOAFQTksaKQEWMShPBlAEAgEEShcDMAMhJi0zM1ApIwNJTU5NSygDSk4YA09ITk1OTjsDRUwLA0tQRw8DS04cBDUMIBAZFBwQGA8VBgEPGSIEPTAYGyJECCcGNAQZDgRLARctBAERAgEWZGFydDpjbGkvd2FpdF9mb3IuZGFydC5vcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvYmluL2NsaV9wYXRjaC5kYXJ0gUYvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgc2hvdyBwYXRjaDsKCkBwYXRjaAp2b2lkIF93YWl0Rm9yRXZlbnQoaW50IHRpbWVvdXRNaWxsaXMpIG5hdGl2ZSAiQ0xJX1dhaXRGb3JFdmVudCI7CgoATk48ASQBB0EBHWRhcnQ6Y2xpLXBhdGNoL2NsaV9wYXRjaC5kYXJ0Km9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL2NvcmUuZGFydJntLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8qKgogKgogKiBCdWlsdC1pbiB0eXBlcywgY29sbGVjdGlvbnMsCiAqIGFuZCBvdGhlciBjb3JlIGZ1bmN0aW9uYWxpdHkgZm9yIGV2ZXJ5IERhcnQgcHJvZ3JhbS4KICoKICogVGhpcyBsaWJyYXJ5IGlzIGF1dG9tYXRpY2FsbHkgaW1wb3J0ZWQuCiAqCiAqIFNvbWUgY2xhc3NlcyBpbiB0aGlzIGxpYnJhcnksCiAqIHN1Y2ggYXMgW1N0cmluZ10gYW5kIFtudW1dLAogKiBzdXBwb3J0IERhcnQncyBidWlsdC1pbiBkYXRhIHR5cGVzLgogKiBPdGhlciBjbGFzc2VzLCBzdWNoIGFzIFtMaXN0XSBhbmQgW01hcF0sIHByb3ZpZGUgZGF0YSBzdHJ1Y3R1cmVzCiAqIGZvciBtYW5hZ2luZyBjb2xsZWN0aW9ucyBvZiBvYmplY3RzLgogKiBBbmQgc3RpbGwgb3RoZXIgY2xhc3NlcyByZXByZXNlbnQgY29tbW9ubHkgdXNlZCB0eXBlcyBvZiBkYXRhCiAqIHN1Y2ggYXMgVVJJcywgZGF0ZXMgYW5kIHRpbWVzLCBhbmQgZXJyb3JzLgogKgogKiAjIyBOdW1iZXJzIGFuZCBib29sZWFucwogKgogKiBbaW50XSBhbmQgW2RvdWJsZV0gcHJvdmlkZSBzdXBwb3J0IGZvciBEYXJ0J3MgYnVpbHQtaW4gbnVtZXJpY2FsIGRhdGEgdHlwZXM6CiAqIGludGVnZXJzIGFuZCBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIHJlc3BlY3RpdmVseS4KICogQW4gb2JqZWN0IG9mIHR5cGUgW2Jvb2xdIGlzIGVpdGhlciB0cnVlIG9yIGZhbHNlLgogKiBWYXJpYWJsZXMgb2YgdGhlc2UgdHlwZXMgY2FuIGJlIGNvbnN0cnVjdGVkIGZyb20gbGl0ZXJhbHM6CiAqCiAqICAgICBpbnQgbWVhbmluZ09mTGlmZSA9IDQyOwogKiAgICAgZG91YmxlIHZhbHVlT2ZQaSAgPSAzLjE0MTU5MjsKICogICAgIGJvb2wgdmlzaWJsZSAgICAgID0gdHJ1ZTsKICoKICogIyMgU3RyaW5ncyBhbmQgcmVndWxhciBleHByZXNzaW9ucwogKgogKiBBIFtTdHJpbmddIGlzIGltbXV0YWJsZSBhbmQgcmVwcmVzZW50cyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMuCiAqCiAqICAgICBTdHJpbmcgc2hha2VzcGVhcmVRdW90ZSA9ICJBbGwgdGhlIHdvcmxkJ3MgYSBzdGFnZSwgLi4uIjsKICoKICogW1N0cmluZ0J1ZmZlcl0gcHJvdmlkZXMgYSB3YXkgdG8gY29uc3RydWN0IHN0cmluZ3MgZWZmaWNpZW50bHkuCiAqCiAqICAgICBTdHJpbmdCdWZmZXIgbW9yZVNoYWtlc3BlYXJlID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogKiAgICAgbW9yZVNoYWtlc3BlYXJlLndyaXRlKCdBbmQgYWxsIHRoZSBtZW4gYW5kIHdvbWVuICcpOwogKiAgICAgbW9yZVNoYWtlc3BlYXJlLndyaXRlKCdtZXJlbHkgcGxheWVyczsgLi4uJyk7CiAqCiAqIFRoZSBTdHJpbmcgYW5kIFN0cmluZ0J1ZmZlciBjbGFzc2VzIGltcGxlbWVudCBzdHJpbmcgY29uY2F0ZW5hdGlvbiwKICogaW50ZXJwb2xhdGlvbiwgYW5kIG90aGVyIHN0cmluZyBtYW5pcHVsYXRpb24gZmVhdHVyZXMuCiAqCiAqICAgICBTdHJpbmcgcGhpbG9zb3BoeSA9ICdMaXZlIG9uICc7CiAqICAgICBTdHJpbmcgZ2V0IHBhbGluZHJvbWUgPT4gcGhpbG9zb3BoeSArIHBoaWxvc29waHkuc3BsaXQoJycpLnJldmVyc2VkLmpvaW4oKTsKICoKICogW1JlZ0V4cF0gaW1wbGVtZW50cyBEYXJ0IHJlZ3VsYXIgZXhwcmVzc2lvbnMsCiAqIHdoaWNoIHByb3ZpZGUgYSBncmFtbWFyIGZvciBtYXRjaGluZyBwYXR0ZXJucyB3aXRoaW4gdGV4dC4KICogRm9yIGV4YW1wbGUsIGhlcmUncyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiB0aGF0IG1hdGNoZXMKICogYSBzdHJpbmcgb2Ygb25lIG9yIG1vcmUgZGlnaXRzOgogKgogKiAgICAgdmFyIG51bWJlcnMgPSBuZXcgUmVnRXhwKHInXGQrJyk7CiAqCiAqIERhcnQgcmVndWxhciBleHByZXNzaW9ucyBoYXZlIHRoZSBzYW1lIHN5bnRheCBhbmQgc2VtYW50aWNzIGFzCiAqIEphdmFTY3JpcHQgcmVndWxhciBleHByZXNzaW9ucy4gU2VlCiAqIDxodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy0xNS4xMD4KICogZm9yIHRoZSBzcGVjaWZpY2F0aW9uIG9mIEphdmFTY3JpcHQgcmVndWxhciBleHByZXNzaW9ucy4KICoKICogIyMgQ29sbGVjdGlvbnMKICoKICogVGhlIGRhcnQ6Y29yZSBsaWJyYXJ5IHByb3ZpZGVzIGJhc2ljIGNvbGxlY3Rpb25zLAogKiBzdWNoIGFzIFtMaXN0XSwgW01hcF0sIGFuZCBbU2V0XS4KICoKICogQSBMaXN0IGlzIGFuIG9yZGVyZWQgY29sbGVjdGlvbiBvZiBvYmplY3RzLCB3aXRoIGEgbGVuZ3RoLgogKiBMaXN0cyBhcmUgc29tZXRpbWVzIGNhbGxlZCBhcnJheXMuCiAqIFVzZSBhIExpc3Qgd2hlbiB5b3UgbmVlZCB0byBhY2Nlc3Mgb2JqZWN0cyBieSBpbmRleC4KICoKICogICAgIExpc3Qgc3VwZXJoZXJvZXMgPSBbICdCYXRtYW4nLCAnU3VwZXJtYW4nLCAnSGFycnkgUG90dGVyJyBdOwogKgogKiBBIFNldCBpcyBhbiB1bm9yZGVyZWQgY29sbGVjdGlvbiBvZiB1bmlxdWUgb2JqZWN0cy4KICogWW91IGNhbm5vdCBnZXQgYW4gaXRlbSBieSBpbmRleCAocG9zaXRpb24pLgogKiBBZGRpbmcgYSBkdXBsaWNhdGUgaXRlbSBoYXMgbm8gZWZmZWN0LgogKgogKiAgICAgU2V0IHZpbGxhaW5zID0gbmV3IFNldCgpOwogKiAgICAgdmlsbGFpbnMuYWRkKCdKb2tlcicpOwogKiAgICAgdmlsbGFpbnMuYWRkQWxsKCBbJ0xleCBMdXRoZXInLCAnVm9sZGVtb3J0J10gKTsKICoKICogQSBNYXAgaXMgYW4gdW5vcmRlcmVkIGNvbGxlY3Rpb24gb2Yga2V5LXZhbHVlIHBhaXJzLgogKiBNYXBzIGFyZSBzb21ldGltZXMgY2FsbGVkIGFzc29jaWF0aXZlIGFycmF5cyBiZWNhdXNlCiAqIG1hcHMgYXNzb2NpYXRlIGEga2V5IHRvIHNvbWUgdmFsdWUgZm9yIGVhc3kgcmV0cmlldmFsLgogKiBLZXlzIGFyZSB1bmlxdWUuCiAqIFVzZSBhIE1hcCB3aGVuIHlvdSBuZWVkIHRvIGFjY2VzcyBvYmplY3RzCiAqIGJ5IGEgdW5pcXVlIGlkZW50aWZpZXIuCiAqCiAqICAgICBNYXAgc2lkZWtpY2tzID0geyAnQmF0bWFuJzogJ1JvYmluJywKICogICAgICAgICAgICAgICAgICAgICAgICdTdXBlcm1hbic6ICdMb2lzIExhbmUnLAogKiAgICAgICAgICAgICAgICAgICAgICAgJ0hhcnJ5IFBvdHRlcic6ICdSb24gYW5kIEhlcm1pb25lJyB9OwogKgogKiBJbiBhZGRpdGlvbiB0byB0aGVzZSBjbGFzc2VzLAogKiBkYXJ0OmNvcmUgY29udGFpbnMgW0l0ZXJhYmxlXSwKICogYW4gaW50ZXJmYWNlIHRoYXQgZGVmaW5lcyBmdW5jdGlvbmFsaXR5CiAqIGNvbW1vbiBpbiBjb2xsZWN0aW9ucyBvZiBvYmplY3RzLgogKiBFeGFtcGxlcyBpbmNsdWRlIHRoZSBhYmlsaXR5CiAqIHRvIHJ1biBhIGZ1bmN0aW9uIG9uIGVhY2ggZWxlbWVudCBpbiB0aGUgY29sbGVjdGlvbiwKICogdG8gYXBwbHkgYSB0ZXN0IHRvIGVhY2ggZWxlbWVudCwKICogdG8gcmV0cmlldmUgYW4gb2JqZWN0LCBhbmQgdG8gZGV0ZXJtaW5lIGxlbmd0aC4KICoKICogSXRlcmFibGUgaXMgaW1wbGVtZW50ZWQgYnkgTGlzdCBhbmQgU2V0LAogKiBhbmQgdXNlZCBieSBNYXAgZm9yIGl0cyBrZXlzIGFuZCB2YWx1ZXMuCiAqCiAqIEZvciBvdGhlciBraW5kcyBvZiBjb2xsZWN0aW9ucywgY2hlY2sgb3V0IHRoZQogKiBgZGFydDpjb2xsZWN0aW9uYCBsaWJyYXJ5LgogKgogKiAjIyBEYXRlIGFuZCB0aW1lCiAqCiAqIFVzZSBbRGF0ZVRpbWVdIHRvIHJlcHJlc2VudCBhIHBvaW50IGluIHRpbWUKICogYW5kIFtEdXJhdGlvbl0gdG8gcmVwcmVzZW50IGEgc3BhbiBvZiB0aW1lLgogKgogKiBZb3UgY2FuIGNyZWF0ZSBEYXRlVGltZSBvYmplY3RzIHdpdGggY29uc3RydWN0b3JzCiAqIG9yIGJ5IHBhcnNpbmcgYSBjb3JyZWN0bHkgZm9ybWF0dGVkIHN0cmluZy4KICoKICogICAgIERhdGVUaW1lIG5vdyA9IG5ldyBEYXRlVGltZS5ub3coKTsKICogICAgIERhdGVUaW1lIGJlcmxpbldhbGxGZWxsID0gbmV3IERhdGVUaW1lKDE5ODksIDExLCA5KTsKICogICAgIERhdGVUaW1lIG1vb25MYW5kaW5nID0gRGF0ZVRpbWUucGFyc2UoIjE5NjktMDctMjAiKTsKICoKICogQ3JlYXRlIGEgRHVyYXRpb24gb2JqZWN0IHNwZWNpZnlpbmcgdGhlIGluZGl2aWR1YWwgdGltZSB1bml0cy4KICoKICogICAgIER1cmF0aW9uIHRpbWVSZW1haW5pbmcgPSBuZXcgRHVyYXRpb24oaG91cnM6NTYsIG1pbnV0ZXM6MTQpOwogKgogKiBJbiBhZGRpdGlvbiB0byBEYXRlVGltZSBhbmQgRHVyYXRpb24sCiAqIGRhcnQ6Y29yZSBjb250YWlucyB0aGUgW1N0b3B3YXRjaF0gY2xhc3MgZm9yIG1lYXN1cmluZyBlbGFwc2VkIHRpbWUuCiAqCiAqICMjIFVyaQogKgogKiBBIFtVcmldIG9iamVjdCByZXByZXNlbnRzIGEgdW5pZm9ybSByZXNvdXJjZSBpZGVudGlmaWVyLAogKiB3aGljaCBpZGVudGlmaWVzIGEgcmVzb3VyY2Ugb24gdGhlIHdlYi4KICoKICogICAgIFVyaSBkYXJ0bGFuZyA9IFVyaS5wYXJzZSgnaHR0cDovL2RhcnRsYW5nLm9yZy8nKTsKICoKICogIyMgRXJyb3JzCiAqCiAqIFRoZSBbRXJyb3JdIGNsYXNzIHJlcHJlc2VudHMgdGhlIG9jY3VycmVuY2Ugb2YgYW4gZXJyb3IKICogZHVyaW5nIHJ1bnRpbWUuCiAqIFN1YmNsYXNzZXMgb2YgdGhpcyBjbGFzcyByZXByZXNlbnQgc3BlY2lmaWMga2luZHMgb2YgZXJyb3JzLgogKgogKiAjIyBPdGhlciBkb2N1bWVudGF0aW9uCiAqCiAqIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byB1c2UgdGhlIGJ1aWx0LWluIHR5cGVzLCByZWZlciB0byBbQnVpbHQtaW4KICogVHlwZXNdKGh0dHA6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy9jb250ZW50cy9jaDAyLmh0bWwjYnVpbHQtaW4tdHlwZXMpCiAqIGluIENoYXB0ZXIgMiBvZgogKiBbRGFydDogVXAgYW5kIFJ1bm5pbmddKGh0dHA6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy8pLgogKgogKiBBbHNvLCBzZWUgW2RhcnQ6Y29yZSAtIE51bWJlcnMsIENvbGxlY3Rpb25zLCBTdHJpbmdzLCBhbmQKICogTW9yZV0oaHR0cHM6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy9jaDAzLmh0bWwjZGFydGNvcmUtLS1udW1iZXJzLWNvbGxlY3Rpb25zLXN0cmluZ3MtYW5kLW1vcmUpCiAqIGZvciBtb3JlIGNvdmVyYWdlIG9mIGNsYXNzZXMgaW4gdGhpcyBwYWNrYWdlLgogKgogKiBUaGUKICogW0RhcnQgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbl0oaHR0cDovL3d3dy5kYXJ0bGFuZy5vcmcvZG9jcy9zcGVjLykKICogcHJvdmlkZXMgdGVjaG5pY2FsIGRldGFpbHMuCiAqCiAqIHtAY2F0ZWdvcnkgQ29yZX0KICovCmxpYnJhcnkgZGFydC5jb3JlOwoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iOwppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBoaWRlIFN5bWJvbCwgTGlua2VkTGlzdCwgTGlua2VkTGlzdEVudHJ5OwppbXBvcnQgImRhcnQ6X2ludGVybmFsIiBhcyBpbnRlcm5hbCBzaG93IFN5bWJvbDsKaW1wb3J0ICJkYXJ0OmNvbnZlcnQiCiAgICBzaG93CiAgICAgICAgYXNjaWksCiAgICAgICAgYmFzZTY0LAogICAgICAgIEJhc2U2NENvZGVjLAogICAgICAgIEVuY29kaW5nLAogICAgICAgIGxhdGluMSwKICAgICAgICBTdHJpbmdDb252ZXJzaW9uU2luaywKICAgICAgICB1dGY4OwppbXBvcnQgImRhcnQ6bWF0aCIgc2hvdyBSYW5kb207IC8vIFVzZWQgYnkgTGlzdC5zaHVmZmxlLgppbXBvcnQgImRhcnQ6dHlwZWRfZGF0YSIgc2hvdyBVaW50OExpc3QsIFVpbnQxNkxpc3QsIEVuZGlhbjsKCkBTaW5jZSgiMi4xIikKZXhwb3J0ICJkYXJ0OmFzeW5jIiBzaG93IEZ1dHVyZSwgU3RyZWFtOwoKcGFydCAiYW5ub3RhdGlvbnMuZGFydCI7CnBhcnQgImJpZ2ludC5kYXJ0IjsKcGFydCAiYm9vbC5kYXJ0IjsKcGFydCAiY29tcGFyYWJsZS5kYXJ0IjsKcGFydCAiZGF0ZV90aW1lLmRhcnQiOwpwYXJ0ICJkb3VibGUuZGFydCI7CnBhcnQgImR1cmF0aW9uLmRhcnQiOwpwYXJ0ICJlcnJvcnMuZGFydCI7CnBhcnQgImV4Y2VwdGlvbnMuZGFydCI7CnBhcnQgImV4cGFuZG8uZGFydCI7CnBhcnQgImZ1bmN0aW9uLmRhcnQiOwpwYXJ0ICJpZGVudGljYWwuZGFydCI7CnBhcnQgImludC5kYXJ0IjsKcGFydCAiaW52b2NhdGlvbi5kYXJ0IjsKcGFydCAiaXRlcmFibGUuZGFydCI7CnBhcnQgIml0ZXJhdG9yLmRhcnQiOwpwYXJ0ICJsaXN0LmRhcnQiOwpwYXJ0ICJtYXAuZGFydCI7CnBhcnQgIm51bGwuZGFydCI7CnBhcnQgIm51bS5kYXJ0IjsKcGFydCAib2JqZWN0LmRhcnQiOwpwYXJ0ICJwYXR0ZXJuLmRhcnQiOwpwYXJ0ICJwcmludC5kYXJ0IjsKcGFydCAicmVnZXhwLmRhcnQiOwpwYXJ0ICJzZXQuZGFydCI7CnBhcnQgInNpbmsuZGFydCI7CnBhcnQgInN0YWNrdHJhY2UuZGFydCI7CnBhcnQgInN0b3B3YXRjaC5kYXJ0IjsKcGFydCAic3RyaW5nLmRhcnQiOwpwYXJ0ICJzdHJpbmdfYnVmZmVyLmRhcnQiOwpwYXJ0ICJzdHJpbmdfc2luay5kYXJ0IjsKcGFydCAic3ltYm9sLmRhcnQiOwpwYXJ0ICJ0eXBlLmRhcnQiOwpwYXJ0ICJ1cmkuZGFydCI7CoDSAE5OPAEEAyA4AysDIR8nRChBLgMbA1BHNT4DHyUhAyYDRANBA0MDOjw1A0c6AydTAzE+OSMDKQNCJzs8AxIDNSUDPiY4A0QDNy8qAyEeNwM4ODoULRsDLDI/AyEiKyUgOCQzAywsAzEeAxQDLy8DNS8DKjw8A0IDRAMpSAMKAzwrAzkDDQM7E0ADGgNQXhNOAz12MQMHRR8DFAQTARpCMRYJDxAVEhAeDjk9AQ4pARkUEhgXFBYUGBUWFxEYFhYSERIRFBUTFBESGBcUGxkUEhEBCWRhcnQ6Y29yZTBvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9jb21wYXJhYmxlLmRhcnSOVS8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBUaGUgc2lnbmF0dXJlIG9mIGEgZ2VuZXJpYyBjb21wYXJpc29uIGZ1bmN0aW9uLgogKgogKiBBIGNvbXBhcmlzb24gZnVuY3Rpb24gcmVwcmVzZW50cyBhbiBvcmRlcmluZyBvbiBhIHR5cGUgb2Ygb2JqZWN0cy4KICogQSB0b3RhbCBvcmRlcmluZyBvbiBhIHR5cGUgbWVhbnMgdGhhdCBmb3IgdHdvIHZhbHVlcywgZWl0aGVyIHRoZXkKICogYXJlIGVxdWFsIG9yIG9uZSBpcyBncmVhdGVyIHRoYW4gdGhlIG90aGVyIChhbmQgdGhlIGxhdHRlciBtdXN0IHRoZW4gYmUKICogc21hbGxlciB0aGFuIHRoZSBmb3JtZXIpLgogKgogKiBBIFtDb21wYXJhdG9yXSBmdW5jdGlvbiByZXByZXNlbnRzIHN1Y2ggYSB0b3RhbCBvcmRlcmluZyBieSByZXR1cm5pbmcKICoKICogKiBhIG5lZ2F0aXZlIGludGVnZXIgaWYgW2FdIGlzIHNtYWxsZXIgdGhhbiBbYl0sCiAqICogemVybyBpZiBbYV0gaXMgZXF1YWwgdG8gW2JdLCBhbmQKICogKiBhIHBvc2l0aXZlIGludGVnZXIgaWYgW2FdIGlzIGdyZWF0ZXIgdGhhbiBbYl0uCiAqLwp0eXBlZGVmIENvbXBhcmF0b3I8VD4gPSBpbnQgRnVuY3Rpb24oVCBhLCBUIGIpOwoKLyoqCiAqIEludGVyZmFjZSB1c2VkIGJ5IHR5cGVzIHRoYXQgaGF2ZSBhbiBpbnRyaW5zaWMgb3JkZXJpbmcuCiAqCiAqIFRoZSBbY29tcGFyZVRvXSBvcGVyYXRpb24gZGVmaW5lcyBhIHRvdGFsIG9yZGVyaW5nIG9mIG9iamVjdHMsCiAqIHdoaWNoIGNhbiBiZSB1c2VkIGZvciBvcmRlcmluZyBhbmQgc29ydGluZy4KICoKICogVGhlIFtDb21wYXJhYmxlXSBpbnRlcmZhY2Ugc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBuYXR1cmFsIG9yZGVyaW5nIG9mIGEgdHlwZS4KICogSWYgYSB0eXBlIGNhbiBiZSBvcmRlcmVkIGluIG1vcmUgdGhhbiBvbmUgd2F5LAogKiBhbmQgbm9uZSBvZiB0aGVtIGlzIHRoZSBvYnZpb3VzIG5hdHVyYWwgb3JkZXJpbmcsCiAqIHRoZW4gaXQgbWlnaHQgYmUgYmV0dGVyIG5vdCB0byB1c2UgdGhlIFtDb21wYXJhYmxlXSBpbnRlcmZhY2UsCiAqIGFuZCB0byBwcm92aWRlIHNlcGFyYXRlIFtDb21wYXJhdG9yXXMgaW5zdGVhZC4KICoKICogSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB0aGUgb3JkZXIgb2YgYSBbQ29tcGFyYWJsZV0gYWdyZWVzCiAqIHdpdGggaXRzIG9wZXJhdG9yIFtvcGVyYXRvciA9PV0gZXF1YWxpdHkgKGBhLmNvbXBhcmVUbyhiKSA9PSAwYCBpZmYgYGEgPT0gYmApLAogKiBidXQgdGhpcyBpcyBub3QgYSByZXF1aXJlbWVudC4KICogRm9yIGV4YW1wbGUsIFtkb3VibGVdIGFuZCBbRGF0ZVRpbWVdIGhhdmUgYGNvbXBhcmVUb2AgbWV0aG9kcwogKiB0aGF0IGRvIG5vdCBhZ3JlZSB3aXRoIG9wZXJhdG9yIFtvcGVyYXRvciA9PV0uCiAqIEZvciBkb3VibGVzIHRoZSBbY29tcGFyZVRvXSBtZXRob2QgaXMgbW9yZSBwcmVjaXNlIHRoYW4gdGhlIGVxdWFsaXR5LAogKiBhbmQgZm9yIFtEYXRlVGltZV0gaXQgaXMgbGVzcyBwcmVjaXNlLgogKgogKiBFeGFtcGxlczoKICoKICogICAgICAoMC4wKS5jb21wYXJlVG8oLTAuMCk7ICAvLyA9PiAxCiAqICAgICAgMC4wID09IC0wLjA7ICAgICAgICAgICAgLy8gPT4gdHJ1ZQogKiAgICAgIHZhciBkdCA9IG5ldyBEYXRlVGltZS5ub3coKTsKICogICAgICB2YXIgZHQyID0gZHQudG9VdGMoKTsKICogICAgICBkdCA9PSBkdDI7ICAgICAgICAgICAgICAvLyA9PiBmYWxzZQogKiAgICAgIGR0LmNvbXBhcmVUbyhkdDIpOyAgICAgIC8vID0+IDAKICoKICogVGhlIFtDb21wYXJhYmxlXSBpbnRlcmZhY2UgZG9lcyBub3QgaW1wbHkgdGhlIGV4aXN0ZW5jZQogKiBvZiB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMgYDxgLCBgPD1gLCBgPmAgYW5kIGA+PWAuCiAqIFRoZXNlIHNob3VsZCBvbmx5IGJlIGRlZmluZWQKICogaWYgdGhlIG9yZGVyaW5nIGlzIGEgbGVzcy10aGFuL2dyZWF0ZXItdGhhbiBvcmRlcmluZywKICogdGhhdCBpcywgYW4gb3JkZXJpbmcgd2hlcmUgeW91IHdvdWxkIG5hdHVyYWxseQogKiB1c2UgdGhlIHdvcmRzICJsZXNzIHRoYW4iIGFib3V0IHRoZSBvcmRlciBvZiB0d28gZWxlbWVudHMuCiAqCiAqIElmIHRoZSBlcXVhbGl0eSBvcGVyYXRvciBhbmQgW2NvbXBhcmVUb10gZGlzYWdyZWUsCiAqIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycyBzaG91bGQgZm9sbG93IHRoZSBlcXVhbGl0eSBvcGVyYXRvciwKICogYW5kIHdpbGwgbGlrZWx5IGFsc28gZGlzYWdyZWUgd2l0aCBbY29tcGFyZVRvXS4KICogT3RoZXJ3aXNlIHRoZXkgc2hvdWxkIG1hdGNoIHRoZSBbY29tcGFyZVRvXSBtZXRob2QsCiAqIHNvIHRoYXQgYGEgPCBiYCBpZmYgYGEuY29tcGFyZVRvKGIpIDwgMGAuCiAqCiAqIFRoZSBbZG91YmxlXSBjbGFzcyBkZWZpbmVzIGNvbXBhcmlzb24gb3BlcmF0b3JzCiAqIHRoYXQgYXJlIGNvbXBhdGlibGUgd2l0aCBlcXVhbGl0eS4KICogVGhlIG9wZXJhdG9ycyBkaWZmZXIgZnJvbSBgZG91YmxlLmNvbXBhcmVUb2Agb24gLTAuMCBhbmQgTmFOLgogKgogKiBUaGUgW0RhdGVUaW1lXSBjbGFzcyBoYXMgbm8gY29tcGFyaXNvbiBvcGVyYXRvcnMsIGluc3RlYWQgaXQgaGFzIHRoZSBtb3JlCiAqIHByZWNpc2VseSBuYW1lZCBbRGF0ZVRpbWUuaXNCZWZvcmVdIGFuZCBbRGF0ZVRpbWUuaXNBZnRlcl0uCiAqLwphYnN0cmFjdCBjbGFzcyBDb21wYXJhYmxlPFQ+IHsKICAvKioKICAgKiBDb21wYXJlcyB0aGlzIG9iamVjdCB0byBhbm90aGVyIFtDb21wYXJhYmxlXQogICAqCiAgICogUmV0dXJucyBhIHZhbHVlIGxpa2UgYSBbQ29tcGFyYXRvcl0gd2hlbiBjb21wYXJpbmcgYHRoaXNgIHRvIFtvdGhlcl0uCiAgICogVGhhdCBpcywgaXQgcmV0dXJucyBhIG5lZ2F0aXZlIGludGVnZXIgaWYgYHRoaXNgIGlzIG9yZGVyZWQgYmVmb3JlIFtvdGhlcl0sCiAgICogYSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIGB0aGlzYCBpcyBvcmRlcmVkIGFmdGVyIFtvdGhlcl0sCiAgICogYW5kIHplcm8gaWYgYHRoaXNgIGFuZCBbb3RoZXJdIGFyZSBvcmRlcmVkIHRvZ2V0aGVyLgogICAqCiAgICogVGhlIFtvdGhlcl0gYXJndW1lbnQgbXVzdCBiZSBhIHZhbHVlIHRoYXQgaXMgY29tcGFyYWJsZSB0byB0aGlzIG9iamVjdC4KICAgKi8KICBpbnQgY29tcGFyZVRvKFQgb3RoZXIpOwoKICAvKioKICAgKiBBIFtDb21wYXJhdG9yXSB0aGF0IGNvbXBhcmVzIG9uZSBjb21wYXJhYmxlIHRvIGFub3RoZXIuCiAgICoKICAgKiBJdCByZXR1cm5zIHRoZSByZXN1bHQgb2YgYGEuY29tcGFyZVRvKGIpYC4KICAgKgogICAqIFRoaXMgdXRpbGl0eSBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBkZWZhdWx0IGNvbXBhcmF0b3IKICAgKiBmb3Igb3JkZXJpbmcgY29sbGVjdGlvbnMsIGZvciBleGFtcGxlIGluIHRoZSBbTGlzdF0gc29ydCBmdW5jdGlvbi4KICAgKi8KICBzdGF0aWMgaW50IGNvbXBhcmUoQ29tcGFyYWJsZSBhLCBDb21wYXJhYmxlIGIpID0+IGEuY29tcGFyZVRvKGIpOwp9CmAATk48ARMBBDMDRkVLHQNJAzQmNAQwAQQ8A0IvA1EyNUIyAz1SIkEySSoDDQMoKyUeLCgDOzggOTI+AzZBMzctAzMmQQNNPwQfBjIFS1E8OgVNBhoBBj0FMAU9SAZEAgEZZGFydDpjb3JlL2NvbXBhcmFibGUuZGFydC5vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9pdGVyYWJsZS5kYXJ0wABizC8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBIGNvbGxlY3Rpb24gb2YgdmFsdWVzLCBvciAiZWxlbWVudHMiLCB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBzZXF1ZW50aWFsbHkuCiAqCiAqIFRoZSBlbGVtZW50cyBvZiB0aGUgaXRlcmFibGUgYXJlIGFjY2Vzc2VkIGJ5IGdldHRpbmcgYW4gW0l0ZXJhdG9yXQogKiB1c2luZyB0aGUgW2l0ZXJhdG9yXSBnZXR0ZXIsIGFuZCB1c2luZyBpdCB0byBzdGVwIHRocm91Z2ggdGhlIHZhbHVlcy4KICogU3RlcHBpbmcgd2l0aCB0aGUgaXRlcmF0b3IgaXMgZG9uZSBieSBjYWxsaW5nIFtJdGVyYXRvci5tb3ZlTmV4dF0sCiAqIGFuZCBpZiB0aGUgY2FsbCByZXR1cm5zIGB0cnVlYCwKICogdGhlIGl0ZXJhdG9yIGhhcyBub3cgbW92ZWQgdG8gdGhlIG5leHQgZWxlbWVudCwKICogd2hpY2ggaXMgdGhlbiBhdmFpbGFibGUgYXMgW0l0ZXJhdG9yLmN1cnJlbnRdLgogKiBJZiB0aGUgY2FsbCByZXR1cm5zIGBmYWxzZWAsIHRoZXJlIGFyZSBubyBtb3JlIGVsZW1lbnRzLAogKiBhbmQgYGl0ZXJhdG9yLmN1cnJlbnRgIHJldHVybnMgYG51bGxgLgogKgogKiBZb3UgY2FuIGNyZWF0ZSBtb3JlIHRoYW4gb25lIGl0ZXJhdG9yIGZyb20gdGhlIHNhbWUgYEl0ZXJhYmxlYC4KICogRWFjaCB0aW1lIGBpdGVyYXRvcmAgaXMgcmVhZCwgaXQgcmV0dXJucyBhIG5ldyBpdGVyYXRvciwKICogYW5kIGRpZmZlcmVudCBpdGVyYXRvcnMgY2FuIGJlIHN0ZXBwZWQgdGhyb3VnaCBpbmRlcGVuZGVudGx5LAogKiBlYWNoIGdpdmluZyBhY2Nlc3MgdG8gYWxsIHRoZSBlbGVtZW50cyBvZiB0aGUgaXRlcmFibGUuCiAqIFRoZSBpdGVyYXRvcnMgb2YgdGhlIHNhbWUgaXRlcmFibGUgKnNob3VsZCogcHJvdmlkZSB0aGUgc2FtZSB2YWx1ZXMKICogaW4gdGhlIHNhbWUgb3JkZXIgKHVubGVzcyB0aGUgdW5kZXJseWluZyBjb2xsZWN0aW9uIGlzIG1vZGlmaWVkIGJldHdlZW4KICogdGhlIGl0ZXJhdGlvbnMsIHdoaWNoIHNvbWUgY29sbGVjdGlvbnMgYWxsb3cpLgogKgogKiBZb3UgY2FuIGFsc28gaXRlcmF0ZSBvdmVyIHRoZSBlbGVtZW50cyBvZiBhbiBgSXRlcmFibGVgCiAqIHVzaW5nIHRoZSBmb3ItaW4gbG9vcCBjb25zdHJ1Y3QsIHdoaWNoIHVzZXMgdGhlIGBpdGVyYXRvcmAgZ2V0dGVyIGJlaGluZCB0aGUKICogc2NlbmVzLgogKiBGb3IgZXhhbXBsZSwgeW91IGNhbiBpdGVyYXRlIG92ZXIgYWxsIG9mIHRoZSBrZXlzIG9mIGEgW01hcF0sCiAqIGJlY2F1c2UgYE1hcGAga2V5cyBhcmUgaXRlcmFibGUuCiAqCiAqICAgICBNYXAga2lkc0Jvb2tzID0geydNYXRpbGRhJzogJ1JvYWxkIERhaGwnLAogKiAgICAgICAgICAgICAgICAgICAgICAnR3JlZW4gRWdncyBhbmQgSGFtJzogJ0RyIFNldXNzJywKICogICAgICAgICAgICAgICAgICAgICAgJ1doZXJlIHRoZSBXaWxkIFRoaW5ncyBBcmUnOiAnTWF1cmljZSBTZW5kYWsnfTsKICogICAgIGZvciAodmFyIGJvb2sgaW4ga2lkc0Jvb2tzLmtleXMpIHsKICogICAgICAgcHJpbnQoJyRib29rIHdhcyB3cml0dGVuIGJ5ICR7a2lkc0Jvb2tzW2Jvb2tdfScpOwogKiAgICAgfQogKgogKiBUaGUgW0xpc3RdIGFuZCBbU2V0XSBjbGFzc2VzIGFyZSBib3RoIGBJdGVyYWJsZWAsCiAqIGFzIGFyZSBtb3N0IGNsYXNzZXMgaW4gdGhlIGBkYXJ0OmNvbGxlY3Rpb25gIGxpYnJhcnkuCiAqCiAqIFNvbWUgW0l0ZXJhYmxlXSBjb2xsZWN0aW9ucyBjYW4gYmUgbW9kaWZpZWQuCiAqIEFkZGluZyBhbiBlbGVtZW50IHRvIGEgYExpc3RgIG9yIGBTZXRgIHdpbGwgY2hhbmdlIHdoaWNoIGVsZW1lbnRzIGl0CiAqIGNvbnRhaW5zLCBhbmQgYWRkaW5nIGEgbmV3IGtleSB0byBhIGBNYXBgIGNoYW5nZXMgdGhlIGVsZW1lbnRzIG9mIFtNYXAua2V5c10uCiAqIEl0ZXJhdG9ycyBjcmVhdGVkIGFmdGVyIHRoZSBjaGFuZ2Ugd2lsbCBwcm92aWRlIHRoZSBuZXcgZWxlbWVudHMsIGFuZCBtYXkKICogb3IgbWF5IG5vdCBwcmVzZXJ2ZSB0aGUgb3JkZXIgb2YgZXhpc3RpbmcgZWxlbWVudHMKICogKGZvciBleGFtcGxlLCBhIFtIYXNoU2V0XSBtYXkgY29tcGxldGVseSBjaGFuZ2UgaXRzIG9yZGVyIHdoZW4gYSBzaW5nbGUKICogZWxlbWVudCBpcyBhZGRlZCkuCiAqCiAqIENoYW5naW5nIGEgY29sbGVjdGlvbiAqd2hpbGUqIGl0IGlzIGJlaW5nIGl0ZXJhdGVkCiAqIGlzIGdlbmVyYWxseSAqbm90KiBhbGxvd2VkLgogKiBEb2luZyBzbyB3aWxsIGJyZWFrIHRoZSBpdGVyYXRpb24sIHdoaWNoIGlzIHR5cGljYWxseSBzaWduYWxsZWQKICogYnkgdGhyb3dpbmcgYSBbQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yXQogKiB0aGUgbmV4dCB0aW1lIFtJdGVyYXRvci5tb3ZlTmV4dF0gaXMgY2FsbGVkLgogKiBUaGUgY3VycmVudCB2YWx1ZSBvZiBbSXRlcmF0b3IuY3VycmVudF0gZ2V0dGVyCiAqIHNob3VsZCBub3QgYmUgYWZmZWN0ZWQgYnkgdGhlIGNoYW5nZSBpbiB0aGUgY29sbGVjdGlvbiwKICogdGhlIGBjdXJyZW50YCB2YWx1ZSB3YXMgc2V0IGJ5IHRoZSBwcmV2aW91cyBjYWxsIHRvIFtJdGVyYXRvci5tb3ZlTmV4dF0uCiAqCiAqIFNvbWUgaXRlcmFibGVzIGNvbXB1dGUgdGhlaXIgZWxlbWVudHMgZHluYW1pY2FsbHkgZXZlcnkgdGltZSB0aGV5IGFyZQogKiBpdGVyYXRlZCwgbGlrZSB0aGUgb25lIHJldHVybmVkIGJ5IFtJdGVyYWJsZS5nZW5lcmF0ZV0gb3IgdGhlIGl0ZXJhYmxlCiAqIHJldHVybmVkIGJ5IGEgYHN5bmMqYCBnZW5lcmF0b3IgZnVuY3Rpb24uIElmIHRoZSBjb21wdXRhdGlvbiBkb2Vzbid0IGRlcGVuZAogKiBvbiBvdGhlciBvYmplY3RzIHRoYXQgbWF5IGNoYW5nZSwgdGhlbiB0aGUgZ2VuZXJhdGVkIHNlcXVlbmNlIHNob3VsZCBiZQogKiB0aGUgc2FtZSBvbmUgZXZlcnkgdGltZSBpdCdzIGl0ZXJhdGVkLgogKgogKiBUaGUgbWVtYmVycyBvZiBgSXRlcmFibGVgLCBvdGhlciB0aGFuIGBpdGVyYXRvcmAgaXRzZWxmLAogKiB3b3JrIGJ5IGxvb2tpbmcgYXQgdGhlIGVsZW1lbnRzIG9mIHRoZSBpdGVyYWJsZS4KICogVGhpcyBjYW4gYmUgaW1wbGVtZW50ZWQgYnkgcnVubmluZyB0aHJvdWdoIHRoZSBbaXRlcmF0b3JdLCBidXQgc29tZSBjbGFzc2VzCiAqIG1heSBoYXZlIG1vcmUgZWZmaWNpZW50IHdheXMgb2YgZmluZGluZyB0aGUgcmVzdWx0CiAqIChsaWtlIFtsYXN0XSBvciBbbGVuZ3RoXSBvbiBhIFtMaXN0XSwgb3IgW2NvbnRhaW5zXSBvbiBhIFtTZXRdKS4KICoKICogVGhlIG1ldGhvZHMgdGhhdCByZXR1cm4gYW5vdGhlciBgSXRlcmFibGVgIChsaWtlIFttYXBdIGFuZCBbd2hlcmVdKQogKiBhcmUgYWxsICpsYXp5KiAtIHRoZXkgd2lsbCBpdGVyYXRlIHRoZSBvcmlnaW5hbCAoYXMgbmVjZXNzYXJ5KQogKiBldmVyeSB0aW1lIHRoZSByZXR1cm5lZCBpdGVyYWJsZSBpcyBpdGVyYXRlZCwgYW5kIG5vdCBiZWZvcmUuCiAqCiAqIFNpbmNlIGFuIGl0ZXJhYmxlIG1heSBiZSBpdGVyYXRlZCBtb3JlIHRoYW4gb25jZSwgaXQncyBub3QgcmVjb21tZW5kZWQgdG8KICogaGF2ZSBkZXRlY3RhYmxlIHNpZGUtZWZmZWN0cyBpbiB0aGUgaXRlcmF0b3IuCiAqIEZvciBtZXRob2RzIGxpa2UgW21hcF0gYW5kIFt3aGVyZV0sIHRoZSByZXR1cm5lZCBpdGVyYWJsZSB3aWxsIGV4ZWN1dGUgdGhlCiAqIGFyZ3VtZW50IGZ1bmN0aW9uIG9uIGV2ZXJ5IGl0ZXJhdGlvbiwgc28gdGhvc2UgZnVuY3Rpb25zIHNob3VsZCBhbHNvIG5vdAogKiBoYXZlIHNpZGUgZWZmZWN0cy4KICovCmFic3RyYWN0IGNsYXNzIEl0ZXJhYmxlPEU+IHsKICAvLyBUT0RPKGxybik6IFdoZW4gd2UgYWxsb3cgZm9yd2FyZGluZyBjb25zdCBjb25zdHJ1Y3RvcnMgdGhyb3VnaAogIC8vIG1peGluIGFwcGxpY2F0aW9ucywgbWFrZSB0aGlzIGNsYXNzIGltcGxlbWVudCBbSXRlcmFibGVNaXhpbl0uCiAgY29uc3QgSXRlcmFibGUoKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBgSXRlcmFibGVgIHdoaWNoIGdlbmVyYXRlcyBpdHMgZWxlbWVudHMgZHluYW1pY2FsbHkuCiAgICoKICAgKiBUaGUgZ2VuZXJhdGVkIGl0ZXJhYmxlIGhhcyBbY291bnRdIGVsZW1lbnRzLAogICAqIGFuZCB0aGUgZWxlbWVudCBhdCBpbmRleCBgbmAgaXMgY29tcHV0ZWQgYnkgY2FsbGluZyBgZ2VuZXJhdG9yKG4pYC4KICAgKiBWYWx1ZXMgYXJlIG5vdCBjYWNoZWQsIHNvIGVhY2ggaXRlcmF0aW9uIGNvbXB1dGVzIHRoZSB2YWx1ZXMgYWdhaW4uCiAgICoKICAgKiBJZiBbZ2VuZXJhdG9yXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBhbiBpZGVudGl0eSBmdW5jdGlvbgogICAqIG9uIGludGVnZXJzIGAoaW50IHgpID0+IHhgLCBzbyBpdCBtYXkgb25seSBiZSBvbWl0dGVkIGlmIHRoZSB0eXBlCiAgICogcGFyYW1ldGVyIGFsbG93cyBpbnRlZ2VyIHZhbHVlcy4gVGhhdCBpcywgaWYgW0VdIGlzIGEgc3VwZXItdHlwZQogICAqIG9mIFtpbnRdLgogICAqCiAgICogQXMgYW4gYEl0ZXJhYmxlYCwgYG5ldyBJdGVyYWJsZS5nZW5lcmF0ZShuLCBnZW5lcmF0b3IpKWAgaXMgZXF1aXZhbGVudCB0bwogICAqIGBjb25zdCBbMCwgLi4uLCBuIC0gMV0ubWFwKGdlbmVyYXRvcilgLgogICAqLwogIGZhY3RvcnkgSXRlcmFibGUuZ2VuZXJhdGUoaW50IGNvdW50LCBbRSBnZW5lcmF0b3IoaW50IGluZGV4KV0pIHsKICAgIGlmIChjb3VudCA8PSAwKSByZXR1cm4gRW1wdHlJdGVyYWJsZTxFPigpOwogICAgcmV0dXJuIF9HZW5lcmF0b3JJdGVyYWJsZTxFPihjb3VudCwgZ2VuZXJhdG9yKTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYW4gZW1wdHkgaXRlcmFibGUuCiAgICoKICAgKiBUaGUgZW1wdHkgaXRlcmFibGUgaGFzIG5vIGVsZW1lbnRzLCBhbmQgaXRlcmF0aW5nIGl0IGFsd2F5cyBzdG9wcwogICAqIGltbWVkaWF0ZWx5LgogICAqLwogIGNvbnN0IGZhY3RvcnkgSXRlcmFibGUuZW1wdHkoKSA9IEVtcHR5SXRlcmFibGU8RT47CgogIC8qKgogICAqIEFkYXB0cyBbc291cmNlXSB0byBiZSBhbiBgSXRlcmFibGU8VD5gLgogICAqCiAgICogQW55IHRpbWUgdGhlIGl0ZXJhYmxlIHdvdWxkIHByb2R1Y2UgYW4gZWxlbWVudCB0aGF0IGlzIG5vdCBhIFtUXSwKICAgKiB0aGUgZWxlbWVudCBhY2Nlc3Mgd2lsbCB0aHJvdy4gSWYgYWxsIGVsZW1lbnRzIG9mIFtzb3VyY2VdIGFyZSBhY3R1YWxseQogICAqIGluc3RhbmNlcyBvZiBbVF0sIG9yIGlmIG9ubHkgZWxlbWVudHMgdGhhdCBhcmUgYWN0dWFsbHkgaW5zdGFuY2VzIG9mIFtUXQogICAqIGFyZSBhY2Nlc3NlZCwgdGhlbiB0aGUgcmVzdWx0aW5nIGl0ZXJhYmxlIGNhbiBiZSB1c2VkIGFzIGFuIGBJdGVyYWJsZTxUPmAuCiAgICovCiAgc3RhdGljIEl0ZXJhYmxlPFQ+IGNhc3RGcm9tPFMsIFQ+KEl0ZXJhYmxlPFM+IHNvdXJjZSkgPT4KICAgICAgQ2FzdEl0ZXJhYmxlPFMsIFQ+KHNvdXJjZSk7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgYEl0ZXJhdG9yYCB0aGF0IGFsbG93cyBpdGVyYXRpbmcgdGhlIGVsZW1lbnRzIG9mIHRoaXMKICAgKiBgSXRlcmFibGVgLgogICAqCiAgICogSXRlcmFibGUgY2xhc3NlcyBtYXkgc3BlY2lmeSB0aGUgaXRlcmF0aW9uIG9yZGVyIG9mIHRoZWlyIGVsZW1lbnRzCiAgICogKGZvciBleGFtcGxlIFtMaXN0XSBhbHdheXMgaXRlcmF0ZSBpbiBpbmRleCBvcmRlciksCiAgICogb3IgdGhleSBtYXkgbGVhdmUgaXQgdW5zcGVjaWZpZWQgKGZvciBleGFtcGxlIGEgaGFzaC1iYXNlZCBbU2V0XQogICAqIG1heSBpdGVyYXRlIGluIGFueSBvcmRlcikuCiAgICoKICAgKiBFYWNoIHRpbWUgYGl0ZXJhdG9yYCBpcyByZWFkLCBpdCByZXR1cm5zIGEgbmV3IGl0ZXJhdG9yLAogICAqIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIGVsZW1lbnRzIGFnYWluLgogICAqIFRoZSBpdGVyYXRvcnMgb2YgdGhlIHNhbWUgaXRlcmFibGUgY2FuIGJlIHN0ZXBwZWQgdGhyb3VnaCBpbmRlcGVuZGVudGx5LAogICAqIGJ1dCBzaG91bGQgcmV0dXJuIHRoZSBzYW1lIGVsZW1lbnRzIGluIHRoZSBzYW1lIG9yZGVyLAogICAqIGFzIGxvbmcgYXMgdGhlIHVuZGVybHlpbmcgY29sbGVjdGlvbiBpc24ndCBjaGFuZ2VkLgogICAqCiAgICogTW9kaWZ5aW5nIHRoZSBjb2xsZWN0aW9uIG1heSBjYXVzZSBuZXcgaXRlcmF0b3JzIHRvIHByb2R1Y2UKICAgKiBkaWZmZXJlbnQgZWxlbWVudHMsIGFuZCBtYXkgY2hhbmdlIHRoZSBvcmRlciBvZiBleGlzdGluZyBlbGVtZW50cy4KICAgKiBBIFtMaXN0XSBzcGVjaWZpZXMgaXRzIGl0ZXJhdGlvbiBvcmRlciBwcmVjaXNlbHksCiAgICogc28gbW9kaWZ5aW5nIHRoZSBsaXN0IGNoYW5nZXMgdGhlIGl0ZXJhdGlvbiBvcmRlciBwcmVkaWN0YWJseS4KICAgKiBBIGhhc2gtYmFzZWQgW1NldF0gbWF5IGNoYW5nZSBpdHMgaXRlcmF0aW9uIG9yZGVyIGNvbXBsZXRlbHkKICAgKiB3aGVuIGFkZGluZyBhIG5ldyBlbGVtZW50IHRvIHRoZSBzZXQuCiAgICoKICAgKiBNb2RpZnlpbmcgdGhlIHVuZGVybHlpbmcgY29sbGVjdGlvbiBhZnRlciBjcmVhdGluZyB0aGUgbmV3IGl0ZXJhdG9yCiAgICogbWF5IGNhdXNlIGFuIGVycm9yIHRoZSBuZXh0IHRpbWUgW0l0ZXJhdG9yLm1vdmVOZXh0XSBpcyBjYWxsZWQKICAgKiBvbiB0aGF0IGl0ZXJhdG9yLgogICAqIEFueSAqbW9kaWZpYWJsZSogaXRlcmFibGUgY2xhc3Mgc2hvdWxkIHNwZWNpZnkgd2hpY2ggb3BlcmF0aW9ucyB3aWxsCiAgICogYnJlYWsgaXRlcmF0aW9uLgogICAqLwogIEl0ZXJhdG9yPEU+IGdldCBpdGVyYXRvcjsKCiAgLyoqCiAgICogUHJvdmlkZXMgYSB2aWV3IG9mIHRoaXMgaXRlcmFibGUgYXMgYW4gaXRlcmFibGUgb2YgW1JdIGluc3RhbmNlcy4KICAgKgogICAqIElmIHRoaXMgaXRlcmFibGUgb25seSBjb250YWlucyBpbnN0YW5jZXMgb2YgW1JdLCBhbGwgb3BlcmF0aW9ucwogICAqIHdpbGwgd29yayBjb3JyZWN0bHkuIElmIGFueSBvcGVyYXRpb24gdHJpZXMgdG8gYWNjZXNzIGFuIGVsZW1lbnQKICAgKiB0aGF0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBbUl0sIHRoZSBhY2Nlc3Mgd2lsbCB0aHJvdyBpbnN0ZWFkLgogICAqCiAgICogV2hlbiB0aGUgcmV0dXJuZWQgaXRlcmFibGUgY3JlYXRlcyBhIG5ldyBvYmplY3QgdGhhdCBkZXBlbmRzIG9uCiAgICogdGhlIHR5cGUgW1JdLCBlLmcuLCBmcm9tIFt0b0xpc3RdLCBpdCB3aWxsIGhhdmUgZXhhY3RseSB0aGUgdHlwZSBbUl0uCiAgICovCiAgSXRlcmFibGU8Uj4gY2FzdDxSPigpID0+IEl0ZXJhYmxlLmNhc3RGcm9tPEUsIFI+KHRoaXMpOwogIC8qKgogICAqIFJldHVybnMgdGhlIGxhenkgY29uY2F0ZW50YXRpb24gb2YgdGhpcyBpdGVyYWJsZSBhbmQgW290aGVyXS4KICAgKgogICAqIFRoZSByZXR1cm5lZCBpdGVyYWJsZSB3aWxsIHByb3ZpZGUgdGhlIHNhbWUgZWxlbWVudHMgYXMgdGhpcyBpdGVyYWJsZSwKICAgKiBhbmQsIGFmdGVyIHRoYXQsIHRoZSBlbGVtZW50cyBvZiBbb3RoZXJdLCBpbiB0aGUgc2FtZSBvcmRlciBhcyBpbiB0aGUKICAgKiBvcmlnaW5hbCBpdGVyYWJsZXMuCiAgICovCiAgSXRlcmFibGU8RT4gZm9sbG93ZWRCeShJdGVyYWJsZTxFPiBvdGhlcikgewogICAgaWYgKHRoaXMgaXMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4pIHsKICAgICAgcmV0dXJuIEZvbGxvd2VkQnlJdGVyYWJsZTxFPi5maXJzdEVmZmljaWVudCh0aGlzLCBvdGhlcik7CiAgICB9CiAgICByZXR1cm4gRm9sbG93ZWRCeUl0ZXJhYmxlPEU+KHRoaXMsIG90aGVyKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbGF6eSBbSXRlcmFibGVdIHdpdGggZWxlbWVudHMgdGhhdCBhcmUgY3JlYXRlZCBieQogICAqIGNhbGxpbmcgYGZgIG9uIGVhY2ggZWxlbWVudCBvZiB0aGlzIGBJdGVyYWJsZWAgaW4gaXRlcmF0aW9uIG9yZGVyLgogICAqCiAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHZpZXcgb2YgdGhlIG1hcHBlZCBlbGVtZW50cy4gQXMgbG9uZyBhcyB0aGUKICAgKiByZXR1cm5lZCBbSXRlcmFibGVdIGlzIG5vdCBpdGVyYXRlZCBvdmVyLCB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gW2ZdIHdpbGwKICAgKiBub3QgYmUgaW52b2tlZC4gVGhlIHRyYW5zZm9ybWVkIGVsZW1lbnRzIHdpbGwgbm90IGJlIGNhY2hlZC4gSXRlcmF0aW5nCiAgICogbXVsdGlwbGUgdGltZXMgb3ZlciB0aGUgcmV0dXJuZWQgW0l0ZXJhYmxlXSB3aWxsIGludm9rZSB0aGUgc3VwcGxpZWQKICAgKiBmdW5jdGlvbiBbZl0gbXVsdGlwbGUgdGltZXMgb24gdGhlIHNhbWUgZWxlbWVudC4KICAgKgogICAqIE1ldGhvZHMgb24gdGhlIHJldHVybmVkIGl0ZXJhYmxlIGFyZSBhbGxvd2VkIHRvIG9taXQgY2FsbGluZyBgZmAKICAgKiBvbiBhbnkgZWxlbWVudCB3aGVyZSB0aGUgcmVzdWx0IGlzbid0IG5lZWRlZC4KICAgKiBGb3IgZXhhbXBsZSwgW2VsZW1lbnRBdF0gbWF5IGNhbGwgYGZgIG9ubHkgb25jZS4KICAgKi8KICBJdGVyYWJsZTxUPiBtYXA8VD4oVCBmKEUgZSkpID0+IE1hcHBlZEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxhenkgW0l0ZXJhYmxlXSB3aXRoIGFsbCBlbGVtZW50cyB0aGF0IHNhdGlzZnkgdGhlCiAgICogcHJlZGljYXRlIFt0ZXN0XS4KICAgKgogICAqIFRoZSBtYXRjaGluZyBlbGVtZW50cyBoYXZlIHRoZSBzYW1lIG9yZGVyIGluIHRoZSByZXR1cm5lZCBpdGVyYWJsZQogICAqIGFzIHRoZXkgaGF2ZSBpbiBbaXRlcmF0b3JdLgogICAqCiAgICogVGhpcyBtZXRob2QgcmV0dXJucyBhIHZpZXcgb2YgdGhlIG1hcHBlZCBlbGVtZW50cy4KICAgKiBBcyBsb25nIGFzIHRoZSByZXR1cm5lZCBbSXRlcmFibGVdIGlzIG5vdCBpdGVyYXRlZCBvdmVyLAogICAqIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBbdGVzdF0gd2lsbCBub3QgYmUgaW52b2tlZC4KICAgKiBJdGVyYXRpbmcgd2lsbCBub3QgY2FjaGUgcmVzdWx0cywgYW5kIHRodXMgaXRlcmF0aW5nIG11bHRpcGxlIHRpbWVzIG92ZXIKICAgKiB0aGUgcmV0dXJuZWQgW0l0ZXJhYmxlXSBtYXkgaW52b2tlIHRoZSBzdXBwbGllZAogICAqIGZ1bmN0aW9uIFt0ZXN0XSBtdWx0aXBsZSB0aW1lcyBvbiB0aGUgc2FtZSBlbGVtZW50LgogICAqLwogIEl0ZXJhYmxlPEU+IHdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpKSA9PiBXaGVyZUl0ZXJhYmxlPEU+KHRoaXMsIHRlc3QpOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGxhenkgW0l0ZXJhYmxlXSB3aXRoIGFsbCBlbGVtZW50cyB0aGF0IGhhdmUgdHlwZSBbVF0uCiAgICoKICAgKiBUaGUgbWF0Y2hpbmcgZWxlbWVudHMgaGF2ZSB0aGUgc2FtZSBvcmRlciBpbiB0aGUgcmV0dXJuZWQgaXRlcmFibGUKICAgKiBhcyB0aGV5IGhhdmUgaW4gW2l0ZXJhdG9yXS4KICAgKgogICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYSB2aWV3IG9mIHRoZSBtYXBwZWQgZWxlbWVudHMuCiAgICogSXRlcmF0aW5nIHdpbGwgbm90IGNhY2hlIHJlc3VsdHMsIGFuZCB0aHVzIGl0ZXJhdGluZyBtdWx0aXBsZSB0aW1lcyBvdmVyCiAgICogdGhlIHJldHVybmVkIFtJdGVyYWJsZV0gbWF5IHlpZWxkIGRpZmZlcmVudCByZXN1bHRzLAogICAqIGlmIHRoZSB1bmRlcmx5aW5nIGVsZW1lbnRzIGNoYW5nZSBiZXR3ZWVuIGl0ZXJhdGlvbnMuCiAgICovCiAgSXRlcmFibGU8VD4gd2hlcmVUeXBlPFQ+KCkgPT4gV2hlcmVUeXBlSXRlcmFibGU8VD4odGhpcyk7CgogIC8qKgogICAqIEV4cGFuZHMgZWFjaCBlbGVtZW50IG9mIHRoaXMgW0l0ZXJhYmxlXSBpbnRvIHplcm8gb3IgbW9yZSBlbGVtZW50cy4KICAgKgogICAqIFRoZSByZXN1bHRpbmcgSXRlcmFibGUgcnVucyB0aHJvdWdoIHRoZSBlbGVtZW50cyByZXR1cm5lZAogICAqIGJ5IFtmXSBmb3IgZWFjaCBlbGVtZW50IG9mIHRoaXMsIGluIGl0ZXJhdGlvbiBvcmRlci4KICAgKgogICAqIFRoZSByZXR1cm5lZCBbSXRlcmFibGVdIGlzIGxhenksIGFuZCBjYWxscyBbZl0gZm9yIGVhY2ggZWxlbWVudAogICAqIG9mIHRoaXMgZXZlcnkgdGltZSBpdCdzIGl0ZXJhdGVkLgogICAqCiAgICogRXhhbXBsZToKICAgKgogICAqICAgICB2YXIgcGFpcnMgPSBbWzEsIDJdLCBbMywgNF1dOwogICAqICAgICB2YXIgZmxhdHRlbmVkID0gcGFpcnMuZXhwYW5kKChwYWlyKSA9PiBwYWlyKS50b0xpc3QoKTsKICAgKiAgICAgcHJpbnQoZmxhdHRlbmVkKTsgLy8gPT4gWzEsIDIsIDMsIDRdOwogICAqCiAgICogICAgIHZhciBpbnB1dCA9IFsxLCAyLCAzXTsKICAgKiAgICAgdmFyIGR1cGxpY2F0ZWQgPSBpbnB1dC5leHBhbmQoKGkpID0+IFtpLCBpXSkudG9MaXN0KCk7CiAgICogICAgIHByaW50KGR1cGxpY2F0ZWQpOyAvLyA9PiBbMSwgMSwgMiwgMiwgMywgM10KICAgKgogICAqLwogIEl0ZXJhYmxlPFQ+IGV4cGFuZDxUPihJdGVyYWJsZTxUPiBmKEUgZWxlbWVudCkpID0+CiAgICAgIEV4cGFuZEl0ZXJhYmxlPEUsIFQ+KHRoaXMsIGYpOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbGxlY3Rpb24gY29udGFpbnMgYW4gZWxlbWVudCBlcXVhbCB0byBbZWxlbWVudF0uCiAgICoKICAgKiBUaGlzIG9wZXJhdGlvbiB3aWxsIGNoZWNrIGVhY2ggZWxlbWVudCBpbiBvcmRlciBmb3IgYmVpbmcgZXF1YWwgdG8KICAgKiBbZWxlbWVudF0sIHVubGVzcyBpdCBoYXMgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gZmluZCBhbiBlbGVtZW50CiAgICogZXF1YWwgdG8gW2VsZW1lbnRdLgogICAqCiAgICogVGhlIGVxdWFsaXR5IHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgW2VsZW1lbnRdIGlzIGVxdWFsIHRvIGFuIGVsZW1lbnQgb2YKICAgKiB0aGUgaXRlcmFibGUgZGVmYXVsdHMgdG8gdGhlIFtPYmplY3QuPT1dIG9mIHRoZSBlbGVtZW50LgogICAqCiAgICogU29tZSB0eXBlcyBvZiBpdGVyYWJsZSBtYXkgaGF2ZSBhIGRpZmZlcmVudCBlcXVhbGl0eSB1c2VkIGZvciBpdHMgZWxlbWVudHMuCiAgICogRm9yIGV4YW1wbGUsIGEgW1NldF0gbWF5IGhhdmUgYSBjdXN0b20gZXF1YWxpdHkKICAgKiAoc2VlIFtTZXQuaWRlbnRpdHldKSB0aGF0IGl0cyBgY29udGFpbnNgIHVzZXMuCiAgICogTGlrZXdpc2UgdGhlIGBJdGVyYWJsZWAgcmV0dXJuZWQgYnkgYSBbTWFwLmtleXNdIGNhbGwKICAgKiBzaG91bGQgdXNlIHRoZSBzYW1lIGVxdWFsaXR5IHRoYXQgdGhlIGBNYXBgIHVzZXMgZm9yIGtleXMuCiAgICovCiAgYm9vbCBjb250YWlucyhPYmplY3QgZWxlbWVudCkgewogICAgZm9yIChFIGUgaW4gdGhpcykgewogICAgICBpZiAoZSA9PSBlbGVtZW50KSByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8qKgogICAqIEFwcGxpZXMgdGhlIGZ1bmN0aW9uIFtmXSB0byBlYWNoIGVsZW1lbnQgb2YgdGhpcyBjb2xsZWN0aW9uIGluIGl0ZXJhdGlvbgogICAqIG9yZGVyLgogICAqLwogIHZvaWQgZm9yRWFjaCh2b2lkIGYoRSBlbGVtZW50KSkgewogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgZihlbGVtZW50KTsKICB9CgogIC8qKgogICAqIFJlZHVjZXMgYSBjb2xsZWN0aW9uIHRvIGEgc2luZ2xlIHZhbHVlIGJ5IGl0ZXJhdGl2ZWx5IGNvbWJpbmluZyBlbGVtZW50cwogICAqIG9mIHRoZSBjb2xsZWN0aW9uIHVzaW5nIHRoZSBwcm92aWRlZCBmdW5jdGlvbi4KICAgKgogICAqIFRoZSBpdGVyYWJsZSBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGVsZW1lbnQuCiAgICogSWYgaXQgaGFzIG9ubHkgb25lIGVsZW1lbnQsIHRoYXQgZWxlbWVudCBpcyByZXR1cm5lZC4KICAgKgogICAqIE90aGVyd2lzZSB0aGlzIG1ldGhvZCBzdGFydHMgd2l0aCB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIHRoZSBpdGVyYXRvciwKICAgKiBhbmQgdGhlbiBjb21iaW5lcyBpdCB3aXRoIHRoZSByZW1haW5pbmcgZWxlbWVudHMgaW4gaXRlcmF0aW9uIG9yZGVyLAogICAqIGFzIGlmIGJ5OgogICAqCiAgICogICAgIEUgdmFsdWUgPSBpdGVyYWJsZS5maXJzdDsKICAgKiAgICAgaXRlcmFibGUuc2tpcCgxKS5mb3JFYWNoKChlbGVtZW50KSB7CiAgICogICAgICAgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCBlbGVtZW50KTsKICAgKiAgICAgfSk7CiAgICogICAgIHJldHVybiB2YWx1ZTsKICAgKgogICAqIEV4YW1wbGUgb2YgY2FsY3VsYXRpbmcgdGhlIHN1bSBvZiBhbiBpdGVyYWJsZToKICAgKgogICAqICAgICBpdGVyYWJsZS5yZWR1Y2UoKHZhbHVlLCBlbGVtZW50KSA9PiB2YWx1ZSArIGVsZW1lbnQpOwogICAqCiAgICovCiAgRSByZWR1Y2UoRSBjb21iaW5lKEUgdmFsdWUsIEUgZWxlbWVudCkpIHsKICAgIEl0ZXJhdG9yPEU+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIH0KICAgIEUgdmFsdWUgPSBpdGVyYXRvci5jdXJyZW50OwogICAgd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCBpdGVyYXRvci5jdXJyZW50KTsKICAgIH0KICAgIHJldHVybiB2YWx1ZTsKICB9CgogIC8qKgogICAqIFJlZHVjZXMgYSBjb2xsZWN0aW9uIHRvIGEgc2luZ2xlIHZhbHVlIGJ5IGl0ZXJhdGl2ZWx5IGNvbWJpbmluZyBlYWNoCiAgICogZWxlbWVudCBvZiB0aGUgY29sbGVjdGlvbiB3aXRoIGFuIGV4aXN0aW5nIHZhbHVlCiAgICoKICAgKiBVc2VzIFtpbml0aWFsVmFsdWVdIGFzIHRoZSBpbml0aWFsIHZhbHVlLAogICAqIHRoZW4gaXRlcmF0ZXMgdGhyb3VnaCB0aGUgZWxlbWVudHMgYW5kIHVwZGF0ZXMgdGhlIHZhbHVlIHdpdGgKICAgKiBlYWNoIGVsZW1lbnQgdXNpbmcgdGhlIFtjb21iaW5lXSBmdW5jdGlvbiwgYXMgaWYgYnk6CiAgICoKICAgKiAgICAgdmFyIHZhbHVlID0gaW5pdGlhbFZhbHVlOwogICAqICAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICogICAgICAgdmFsdWUgPSBjb21iaW5lKHZhbHVlLCBlbGVtZW50KTsKICAgKiAgICAgfQogICAqICAgICByZXR1cm4gdmFsdWU7CiAgICoKICAgKiBFeGFtcGxlIG9mIGNhbGN1bGF0aW5nIHRoZSBzdW0gb2YgYW4gaXRlcmFibGU6CiAgICoKICAgKiAgICAgaXRlcmFibGUuZm9sZCgwLCAocHJldiwgZWxlbWVudCkgPT4gcHJldiArIGVsZW1lbnQpOwogICAqCiAgICovCiAgVCBmb2xkPFQ+KFQgaW5pdGlhbFZhbHVlLCBUIGNvbWJpbmUoVCBwcmV2aW91c1ZhbHVlLCBFIGVsZW1lbnQpKSB7CiAgICB2YXIgdmFsdWUgPSBpbml0aWFsVmFsdWU7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB2YWx1ZSA9IGNvbWJpbmUodmFsdWUsIGVsZW1lbnQpOwogICAgcmV0dXJuIHZhbHVlOwogIH0KCiAgLyoqCiAgICogQ2hlY2tzIHdoZXRoZXIgZXZlcnkgZWxlbWVudCBvZiB0aGlzIGl0ZXJhYmxlIHNhdGlzZmllcyBbdGVzdF0uCiAgICoKICAgKiBDaGVja3MgZXZlcnkgZWxlbWVudCBpbiBpdGVyYXRpb24gb3JkZXIsIGFuZCByZXR1cm5zIGBmYWxzZWAgaWYKICAgKiBhbnkgb2YgdGhlbSBtYWtlIFt0ZXN0XSByZXR1cm4gYGZhbHNlYCwgb3RoZXJ3aXNlIHJldHVybnMgYHRydWVgLgogICAqLwogIGJvb2wgZXZlcnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKCF0ZXN0KGVsZW1lbnQpKSByZXR1cm4gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8qKgogICAqIENvbnZlcnRzIGVhY2ggZWxlbWVudCB0byBhIFtTdHJpbmddIGFuZCBjb25jYXRlbmF0ZXMgdGhlIHN0cmluZ3MuCiAgICoKICAgKiBJdGVyYXRlcyB0aHJvdWdoIGVsZW1lbnRzIG9mIHRoaXMgaXRlcmFibGUsCiAgICogY29udmVydHMgZWFjaCBvbmUgdG8gYSBbU3RyaW5nXSBieSBjYWxsaW5nIFtPYmplY3QudG9TdHJpbmddLAogICAqIGFuZCB0aGVuIGNvbmNhdGVuYXRlcyB0aGUgc3RyaW5ncywgd2l0aCB0aGUKICAgKiBbc2VwYXJhdG9yXSBzdHJpbmcgaW50ZXJsZWF2ZWQgYmV0d2VlbiB0aGUgZWxlbWVudHMuCiAgICovCiAgU3RyaW5nIGpvaW4oW1N0cmluZyBzZXBhcmF0b3IgPSAiIl0pIHsKICAgIEl0ZXJhdG9yPEU+IGl0ZXJhdG9yID0gdGhpcy5pdGVyYXRvcjsKICAgIGlmICghaXRlcmF0b3IubW92ZU5leHQoKSkgcmV0dXJuICIiOwogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IFN0cmluZ0J1ZmZlcigpOwogICAgaWYgKHNlcGFyYXRvciA9PSBudWxsIHx8IHNlcGFyYXRvciA9PSAiIikgewogICAgICBkbyB7CiAgICAgICAgYnVmZmVyLndyaXRlKCIke2l0ZXJhdG9yLmN1cnJlbnR9Iik7CiAgICAgIH0gd2hpbGUgKGl0ZXJhdG9yLm1vdmVOZXh0KCkpOwogICAgfSBlbHNlIHsKICAgICAgYnVmZmVyLndyaXRlKCIke2l0ZXJhdG9yLmN1cnJlbnR9Iik7CiAgICAgIHdoaWxlIChpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgICAgYnVmZmVyLndyaXRlKHNlcGFyYXRvcik7CiAgICAgICAgYnVmZmVyLndyaXRlKCIke2l0ZXJhdG9yLmN1cnJlbnR9Iik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBidWZmZXIudG9TdHJpbmcoKTsKICB9CgogIC8qKgogICAqIENoZWNrcyB3aGV0aGVyIGFueSBlbGVtZW50IG9mIHRoaXMgaXRlcmFibGUgc2F0aXNmaWVzIFt0ZXN0XS4KICAgKgogICAqIENoZWNrcyBldmVyeSBlbGVtZW50IGluIGl0ZXJhdGlvbiBvcmRlciwgYW5kIHJldHVybnMgYHRydWVgIGlmCiAgICogYW55IG9mIHRoZW0gbWFrZSBbdGVzdF0gcmV0dXJuIGB0cnVlYCwgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCiAgICovCiAgYm9vbCBhbnkoYm9vbCB0ZXN0KEUgZWxlbWVudCkpIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiB0cnVlOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhIFtMaXN0XSBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzIFtJdGVyYWJsZV0uCiAgICoKICAgKiBUaGUgZWxlbWVudHMgYXJlIGluIGl0ZXJhdGlvbiBvcmRlci4KICAgKiBUaGUgbGlzdCBpcyBmaXhlZC1sZW5ndGggaWYgW2dyb3dhYmxlXSBpcyBmYWxzZS4KICAgKi8KICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZSA9IHRydWV9KSB7CiAgICByZXR1cm4gTGlzdDxFPi5mcm9tKHRoaXMsIGdyb3dhYmxlOiBncm93YWJsZSk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgW1NldF0gY29udGFpbmluZyB0aGUgc2FtZSBlbGVtZW50cyBhcyB0aGlzIGl0ZXJhYmxlLgogICAqCiAgICogVGhlIHNldCBtYXkgY29udGFpbiBmZXdlciBlbGVtZW50cyB0aGFuIHRoZSBpdGVyYWJsZSwKICAgKiBpZiB0aGUgaXRlcmFibGUgY29udGFpbnMgYW4gZWxlbWVudCBtb3JlIHRoYW4gb25jZSwKICAgKiBvciBpdCBjb250YWlucyBvbmUgb3IgbW9yZSBlbGVtZW50cyB0aGF0IGFyZSBlcXVhbC4KICAgKiBUaGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBzZXQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgdGhlIHNhbWUKICAgKiBhcyBmb3IgdGhlIGl0ZXJhYmxlLgogICAqLwogIFNldDxFPiB0b1NldCgpID0+IFNldDxFPi5mcm9tKHRoaXMpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgaW4gW3RoaXNdLgogICAqCiAgICogQ291bnRpbmcgYWxsIGVsZW1lbnRzIG1heSBpbnZvbHZlIGl0ZXJhdGluZyB0aHJvdWdoIGFsbCBlbGVtZW50cyBhbmQgY2FuCiAgICogdGhlcmVmb3JlIGJlIHNsb3cuCiAgICogU29tZSBpdGVyYWJsZXMgaGF2ZSBhIG1vcmUgZWZmaWNpZW50IHdheSB0byBmaW5kIHRoZSBudW1iZXIgb2YgZWxlbWVudHMuCiAgICovCiAgaW50IGdldCBsZW5ndGggewogICAgYXNzZXJ0KHRoaXMgaXMhIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlKTsKICAgIGludCBjb3VudCA9IDA7CiAgICBJdGVyYXRvciBpdCA9IGl0ZXJhdG9yOwogICAgd2hpbGUgKGl0Lm1vdmVOZXh0KCkpIHsKICAgICAgY291bnQrKzsKICAgIH0KICAgIHJldHVybiBjb3VudDsKICB9CgogIC8qKgogICAqIFJldHVybnMgYHRydWVgIGlmIHRoZXJlIGFyZSBubyBlbGVtZW50cyBpbiB0aGlzIGNvbGxlY3Rpb24uCiAgICoKICAgKiBNYXkgYmUgY29tcHV0ZWQgYnkgY2hlY2tpbmcgaWYgYGl0ZXJhdG9yLm1vdmVOZXh0KClgIHJldHVybnMgYGZhbHNlYC4KICAgKi8KICBib29sIGdldCBpc0VtcHR5ID0+ICFpdGVyYXRvci5tb3ZlTmV4dCgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGVsZW1lbnQgaW4gdGhpcyBjb2xsZWN0aW9uLgogICAqCiAgICogTWF5IGJlIGNvbXB1dGVkIGJ5IGNoZWNraW5nIGlmIGBpdGVyYXRvci5tb3ZlTmV4dCgpYCByZXR1cm5zIGB0cnVlYC4KICAgKi8KICBib29sIGdldCBpc05vdEVtcHR5ID0+ICFpc0VtcHR5OwoKICAvKioKICAgKiBSZXR1cm5zIGEgbGF6eSBpdGVyYWJsZSBvZiB0aGUgW2NvdW50XSBmaXJzdCBlbGVtZW50cyBvZiB0aGlzIGl0ZXJhYmxlLgogICAqCiAgICogVGhlIHJldHVybmVkIGBJdGVyYWJsZWAgbWF5IGNvbnRhaW4gZmV3ZXIgdGhhbiBgY291bnRgIGVsZW1lbnRzLCBpZiBgdGhpc2AKICAgKiBjb250YWlucyBmZXdlciB0aGFuIGBjb3VudGAgZWxlbWVudHMuCiAgICoKICAgKiBUaGUgZWxlbWVudHMgY2FuIGJlIGNvbXB1dGVkIGJ5IHN0ZXBwaW5nIHRocm91Z2ggW2l0ZXJhdG9yXSB1bnRpbCBbY291bnRdCiAgICogZWxlbWVudHMgaGF2ZSBiZWVuIHNlZW4uCiAgICoKICAgKiBUaGUgYGNvdW50YCBtdXN0IG5vdCBiZSBuZWdhdGl2ZS4KICAgKi8KICBJdGVyYWJsZTxFPiB0YWtlKGludCBjb3VudCkgewogICAgcmV0dXJuIFRha2VJdGVyYWJsZTxFPih0aGlzLCBjb3VudCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbGF6eSBpdGVyYWJsZSBvZiB0aGUgbGVhZGluZyBlbGVtZW50cyBzYXRpc2Z5aW5nIFt0ZXN0XS4KICAgKgogICAqIFRoZSBmaWx0ZXJpbmcgaGFwcGVucyBsYXppbHkuIEV2ZXJ5IG5ldyBpdGVyYXRvciBvZiB0aGUgcmV0dXJuZWQKICAgKiBpdGVyYWJsZSBzdGFydHMgaXRlcmF0aW5nIG92ZXIgdGhlIGVsZW1lbnRzIG9mIGB0aGlzYC4KICAgKgogICAqIFRoZSBlbGVtZW50cyBjYW4gYmUgY29tcHV0ZWQgYnkgc3RlcHBpbmcgdGhyb3VnaCBbaXRlcmF0b3JdIHVudGlsIGFuCiAgICogZWxlbWVudCBpcyBmb3VuZCB3aGVyZSBgdGVzdChlbGVtZW50KWAgaXMgZmFsc2UuIEF0IHRoYXQgcG9pbnQsCiAgICogdGhlIHJldHVybmVkIGl0ZXJhYmxlIHN0b3BzIChpdHMgYG1vdmVOZXh0KClgIHJldHVybnMgZmFsc2UpLgogICAqLwogIEl0ZXJhYmxlPEU+IHRha2VXaGlsZShib29sIHRlc3QoRSB2YWx1ZSkpIHsKICAgIHJldHVybiBUYWtlV2hpbGVJdGVyYWJsZTxFPih0aGlzLCB0ZXN0KTsKICB9CgogIC8qKgogICAqIFJldHVybnMgYW4gW0l0ZXJhYmxlXSB0aGF0IHByb3ZpZGVzIGFsbCBidXQgdGhlIGZpcnN0IFtjb3VudF0gZWxlbWVudHMuCiAgICoKICAgKiBXaGVuIHRoZSByZXR1cm5lZCBpdGVyYWJsZSBpcyBpdGVyYXRlZCwgaXQgc3RhcnRzIGl0ZXJhdGluZyBvdmVyIGB0aGlzYCwKICAgKiBmaXJzdCBza2lwcGluZyBwYXN0IHRoZSBpbml0aWFsIFtjb3VudF0gZWxlbWVudHMuCiAgICogSWYgYHRoaXNgIGhhcyBmZXdlciB0aGFuIGBjb3VudGAgZWxlbWVudHMsIHRoZW4gdGhlIHJlc3VsdGluZyBJdGVyYWJsZSBpcwogICAqIGVtcHR5LgogICAqIEFmdGVyIHRoYXQsIHRoZSByZW1haW5pbmcgZWxlbWVudHMgYXJlIGl0ZXJhdGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzCiAgICogaW4gdGhpcyBpdGVyYWJsZS4KICAgKgogICAqIFNvbWUgaXRlcmFibGVzIG1heSBiZSBhYmxlIHRvIGZpbmQgbGF0ZXIgZWxlbWVudHMgd2l0aG91dCBmaXJzdCBpdGVyYXRpbmcKICAgKiB0aHJvdWdoIGVhcmxpZXIgZWxlbWVudHMsIGZvciBleGFtcGxlIHdoZW4gaXRlcmF0aW5nIGEgW0xpc3RdLgogICAqIFN1Y2ggaXRlcmFibGVzIGFyZSBhbGxvd2VkIHRvIGlnbm9yZSB0aGUgaW5pdGlhbCBza2lwcGVkIGVsZW1lbnRzLgogICAqCiAgICogVGhlIFtjb3VudF0gbXVzdCBub3QgYmUgbmVnYXRpdmUuCiAgICovCiAgSXRlcmFibGU8RT4gc2tpcChpbnQgY291bnQpIHsKICAgIHJldHVybiBTa2lwSXRlcmFibGU8RT4odGhpcywgY291bnQpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhbiBgSXRlcmFibGVgIHRoYXQgc2tpcHMgbGVhZGluZyBlbGVtZW50cyB3aGlsZSBbdGVzdF0gaXMgc2F0aXNmaWVkLgogICAqCiAgICogVGhlIGZpbHRlcmluZyBoYXBwZW5zIGxhemlseS4gRXZlcnkgbmV3IFtJdGVyYXRvcl0gb2YgdGhlIHJldHVybmVkCiAgICogaXRlcmFibGUgaXRlcmF0ZXMgb3ZlciBhbGwgZWxlbWVudHMgb2YgYHRoaXNgLgogICAqCiAgICogVGhlIHJldHVybmVkIGl0ZXJhYmxlIHByb3ZpZGVzIGVsZW1lbnRzIGJ5IGl0ZXJhdGluZyB0aGlzIGl0ZXJhYmxlLAogICAqIGJ1dCBza2lwcGluZyBvdmVyIGFsbCBpbml0aWFsIGVsZW1lbnRzIHdoZXJlIGB0ZXN0KGVsZW1lbnQpYCByZXR1cm5zCiAgICogdHJ1ZS4gSWYgYWxsIGVsZW1lbnRzIHNhdGlzZnkgYHRlc3RgIHRoZSByZXN1bHRpbmcgaXRlcmFibGUgaXMgZW1wdHksCiAgICogb3RoZXJ3aXNlIGl0IGl0ZXJhdGVzIHRoZSByZW1haW5pbmcgZWxlbWVudHMgaW4gdGhlaXIgb3JpZ2luYWwgb3JkZXIsCiAgICogc3RhcnRpbmcgd2l0aCB0aGUgZmlyc3QgZWxlbWVudCBmb3Igd2hpY2ggYHRlc3QoZWxlbWVudClgIHJldHVybnMgYGZhbHNlYC4KICAgKi8KICBJdGVyYWJsZTxFPiBza2lwV2hpbGUoYm9vbCB0ZXN0KEUgdmFsdWUpKSB7CiAgICByZXR1cm4gU2tpcFdoaWxlSXRlcmFibGU8RT4odGhpcywgdGVzdCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50LgogICAqCiAgICogVGhyb3dzIGEgW1N0YXRlRXJyb3JdIGlmIGB0aGlzYCBpcyBlbXB0eS4KICAgKiBPdGhlcndpc2UgcmV0dXJucyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgaXRlcmF0aW9uIG9yZGVyLAogICAqIGVxdWl2YWxlbnQgdG8gYHRoaXMuZWxlbWVudEF0KDApYC4KICAgKi8KICBFIGdldCBmaXJzdCB7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgfQogICAgcmV0dXJuIGl0LmN1cnJlbnQ7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsYXN0IGVsZW1lbnQuCiAgICoKICAgKiBUaHJvd3MgYSBbU3RhdGVFcnJvcl0gaWYgYHRoaXNgIGlzIGVtcHR5LgogICAqIE90aGVyd2lzZSBtYXkgaXRlcmF0ZSB0aHJvdWdoIHRoZSBlbGVtZW50cyBhbmQgcmV0dXJucyB0aGUgbGFzdCBvbmUKICAgKiBzZWVuLgogICAqIFNvbWUgaXRlcmFibGVzIG1heSBoYXZlIG1vcmUgZWZmaWNpZW50IHdheXMgdG8gZmluZCB0aGUgbGFzdCBlbGVtZW50CiAgICogKGZvciBleGFtcGxlIGEgbGlzdCBjYW4gZGlyZWN0bHkgYWNjZXNzIHRoZSBsYXN0IGVsZW1lbnQsCiAgICogd2l0aG91dCBpdGVyYXRpbmcgdGhyb3VnaCB0aGUgcHJldmlvdXMgb25lcykuCiAgICovCiAgRSBnZXQgbGFzdCB7CiAgICBJdGVyYXRvcjxFPiBpdCA9IGl0ZXJhdG9yOwogICAgaWYgKCFpdC5tb3ZlTmV4dCgpKSB7CiAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgfQogICAgRSByZXN1bHQ7CiAgICBkbyB7CiAgICAgIHJlc3VsdCA9IGl0LmN1cnJlbnQ7CiAgICB9IHdoaWxlIChpdC5tb3ZlTmV4dCgpKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBDaGVja3MgdGhhdCB0aGlzIGl0ZXJhYmxlIGhhcyBvbmx5IG9uZSBlbGVtZW50LCBhbmQgcmV0dXJucyB0aGF0IGVsZW1lbnQuCiAgICoKICAgKiBUaHJvd3MgYSBbU3RhdGVFcnJvcl0gaWYgYHRoaXNgIGlzIGVtcHR5IG9yIGhhcyBtb3JlIHRoYW4gb25lIGVsZW1lbnQuCiAgICovCiAgRSBnZXQgc2luZ2xlIHsKICAgIEl0ZXJhdG9yPEU+IGl0ID0gaXRlcmF0b3I7CiAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogICAgRSByZXN1bHQgPSBpdC5jdXJyZW50OwogICAgaWYgKGl0Lm1vdmVOZXh0KCkpIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgc2F0aXNmaWVzIHRoZSBnaXZlbiBwcmVkaWNhdGUgW3Rlc3RdLgogICAqCiAgICogSXRlcmF0ZXMgdGhyb3VnaCBlbGVtZW50cyBhbmQgcmV0dXJucyB0aGUgZmlyc3QgdG8gc2F0aXNmeSBbdGVzdF0uCiAgICoKICAgKiBJZiBubyBlbGVtZW50IHNhdGlzZmllcyBbdGVzdF0sIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIFtvckVsc2VdCiAgICogZnVuY3Rpb24gaXMgcmV0dXJuZWQuCiAgICogSWYgW29yRWxzZV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhyb3dpbmcgYSBbU3RhdGVFcnJvcl0uCiAgICovCiAgRSBmaXJzdFdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHJldHVybiBlbGVtZW50OwogICAgfQogICAgaWYgKG9yRWxzZSAhPSBudWxsKSByZXR1cm4gb3JFbHNlKCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxhc3QgZWxlbWVudCB0aGF0IHNhdGlzZmllcyB0aGUgZ2l2ZW4gcHJlZGljYXRlIFt0ZXN0XS4KICAgKgogICAqIEFuIGl0ZXJhYmxlIHRoYXQgY2FuIGFjY2VzcyBpdHMgZWxlbWVudHMgZGlyZWN0bHkgbWF5IGNoZWNrIGl0cwogICAqIGVsZW1lbnRzIGluIGFueSBvcmRlciAoZm9yIGV4YW1wbGUgYSBsaXN0IHN0YXJ0cyBieSBjaGVja2luZyB0aGUKICAgKiBsYXN0IGVsZW1lbnQgYW5kIHRoZW4gbW92ZXMgdG93YXJkcyB0aGUgc3RhcnQgb2YgdGhlIGxpc3QpLgogICAqIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGl0ZXJhdGVzIGVsZW1lbnRzIGluIGl0ZXJhdGlvbiBvcmRlciwKICAgKiBjaGVja3MgYHRlc3QoZWxlbWVudClgIGZvciBlYWNoLAogICAqIGFuZCBmaW5hbGx5IHJldHVybnMgdGhhdCBsYXN0IG9uZSB0aGF0IG1hdGNoZWQuCiAgICoKICAgKiBJZiBubyBlbGVtZW50IHNhdGlzZmllcyBbdGVzdF0sIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIFtvckVsc2VdCiAgICogZnVuY3Rpb24gaXMgcmV0dXJuZWQuCiAgICogSWYgW29yRWxzZV0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gdGhyb3dpbmcgYSBbU3RhdGVFcnJvcl0uCiAgICovCiAgRSBsYXN0V2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCksIHtFIG9yRWxzZSgpfSkgewogICAgRSByZXN1bHQ7CiAgICBib29sIGZvdW5kTWF0Y2hpbmcgPSBmYWxzZTsKICAgIGZvciAoRSBlbGVtZW50IGluIHRoaXMpIHsKICAgICAgaWYgKHRlc3QoZWxlbWVudCkpIHsKICAgICAgICByZXN1bHQgPSBlbGVtZW50OwogICAgICAgIGZvdW5kTWF0Y2hpbmcgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBpZiAoZm91bmRNYXRjaGluZykgcmV0dXJuIHJlc3VsdDsKICAgIGlmIChvckVsc2UgIT0gbnVsbCkgcmV0dXJuIG9yRWxzZSgpOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzaW5nbGUgZWxlbWVudCB0aGF0IHNhdGlzZmllcyBbdGVzdF0uCiAgICoKICAgKiBDaGVja3MgZWxlbWVudHMgdG8gc2VlIGlmIGB0ZXN0KGVsZW1lbnQpYCByZXR1cm5zIHRydWUuCiAgICogSWYgZXhhY3RseSBvbmUgZWxlbWVudCBzYXRpc2ZpZXMgW3Rlc3RdLCB0aGF0IGVsZW1lbnQgaXMgcmV0dXJuZWQuCiAgICogSWYgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyBlbGVtZW50IGlzIGZvdW5kLCB0aHJvd3MgW1N0YXRlRXJyb3JdLgogICAqIElmIG5vIG1hdGNoaW5nIGVsZW1lbnQgaXMgZm91bmQsIHJldHVybnMgdGhlIHJlc3VsdCBvZiBbb3JFbHNlXS4KICAgKiBJZiBbb3JFbHNlXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byB0aHJvd2luZyBhIFtTdGF0ZUVycm9yXS4KICAgKi8KICBFIHNpbmdsZVdoZXJlKGJvb2wgdGVzdChFIGVsZW1lbnQpLCB7RSBvckVsc2UoKX0pIHsKICAgIEUgcmVzdWx0OwogICAgYm9vbCBmb3VuZE1hdGNoaW5nID0gZmFsc2U7CiAgICBmb3IgKEUgZWxlbWVudCBpbiB0aGlzKSB7CiAgICAgIGlmICh0ZXN0KGVsZW1lbnQpKSB7CiAgICAgICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHsKICAgICAgICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gZWxlbWVudDsKICAgICAgICBmb3VuZE1hdGNoaW5nID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgaWYgKGZvdW5kTWF0Y2hpbmcpIHJldHVybiByZXN1bHQ7CiAgICBpZiAob3JFbHNlICE9IG51bGwpIHJldHVybiBvckVsc2UoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgW2luZGV4XXRoIGVsZW1lbnQuCiAgICoKICAgKiBUaGUgW2luZGV4XSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgbGVzcyB0aGFuIFtsZW5ndGhdLgogICAqIEluZGV4IHplcm8gcmVwcmVzZW50cyB0aGUgZmlyc3QgZWxlbWVudCAoc28gYGl0ZXJhYmxlLmVsZW1lbnRBdCgwKWAgaXMKICAgKiBlcXVpdmFsZW50IHRvIGBpdGVyYWJsZS5maXJzdGApLgogICAqCiAgICogTWF5IGl0ZXJhdGUgdGhyb3VnaCB0aGUgZWxlbWVudHMgaW4gaXRlcmF0aW9uIG9yZGVyLCBpZ25vcmluZyB0aGUKICAgKiBmaXJzdCBbaW5kZXhdIGVsZW1lbnRzIGFuZCB0aGVuIHJldHVybmluZyB0aGUgbmV4dC4KICAgKiBTb21lIGl0ZXJhYmxlcyBtYXkgaGF2ZSBtb3JlIGEgZWZmaWNpZW50IHdheSB0byBmaW5kIHRoZSBlbGVtZW50LgogICAqLwogIEUgZWxlbWVudEF0KGludCBpbmRleCkgewogICAgQXJndW1lbnRFcnJvci5jaGVja05vdE51bGwoaW5kZXgsICJpbmRleCIpOwogICAgUmFuZ2VFcnJvci5jaGVja05vdE5lZ2F0aXZlKGluZGV4LCAiaW5kZXgiKTsKICAgIGludCBlbGVtZW50SW5kZXggPSAwOwogICAgZm9yIChFIGVsZW1lbnQgaW4gdGhpcykgewogICAgICBpZiAoaW5kZXggPT0gZWxlbWVudEluZGV4KSByZXR1cm4gZWxlbWVudDsKICAgICAgZWxlbWVudEluZGV4Kys7CiAgICB9CiAgICB0aHJvdyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCB0aGlzLCAiaW5kZXgiLCBudWxsLCBlbGVtZW50SW5kZXgpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiAoc29tZSBvZikgdGhlIGVsZW1lbnRzIG9mIGB0aGlzYC4KICAgKgogICAqIEVsZW1lbnRzIGFyZSByZXByZXNlbnRlZCBieSB0aGVpciBvd24gYHRvU3RyaW5nYCByZXN1bHRzLgogICAqCiAgICogVGhlIGRlZmF1bHQgcmVwcmVzZW50YXRpb24gYWx3YXlzIGNvbnRhaW5zIHRoZSBmaXJzdCB0aHJlZSBlbGVtZW50cy4KICAgKiBJZiB0aGVyZSBhcmUgbGVzcyB0aGFuIGEgaHVuZHJlZCBlbGVtZW50cyBpbiB0aGUgaXRlcmFibGUsIGl0IGFsc28KICAgKiBjb250YWlucyB0aGUgbGFzdCB0d28gZWxlbWVudHMuCiAgICoKICAgKiBJZiB0aGUgcmVzdWx0aW5nIHN0cmluZyBpc24ndCBhYm92ZSA4MCBjaGFyYWN0ZXJzLCBtb3JlIGVsZW1lbnRzIGFyZQogICAqIGluY2x1ZGVkIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBpdGVyYWJsZS4KICAgKgogICAqIFRoZSBjb252ZXJzaW9uIG1heSBvbWl0IGNhbGxpbmcgYHRvU3RyaW5nYCBvbiBzb21lIGVsZW1lbnRzIGlmIHRoZXkKICAgKiBhcmUga25vd24gdG8gbm90IG9jY3VyIGluIHRoZSBvdXRwdXQsIGFuZCBpdCBtYXkgc3RvcCBpdGVyYXRpbmcgYWZ0ZXIKICAgKiBhIGh1bmRyZWQgZWxlbWVudHMuCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gSXRlcmFibGVCYXNlLml0ZXJhYmxlVG9TaG9ydFN0cmluZyh0aGlzLCAnKCcsICcpJyk7Cn0KCnR5cGVkZWYgX0dlbmVyYXRvcjxFPiA9IEUgRnVuY3Rpb24oaW50IGluZGV4KTsKCmNsYXNzIF9HZW5lcmF0b3JJdGVyYWJsZTxFPiBleHRlbmRzIExpc3RJdGVyYWJsZTxFPiB7CiAgLy8vIFRoZSBsZW5ndGggb2YgdGhlIGdlbmVyYXRlZCBpdGVyYWJsZS4KICBmaW5hbCBpbnQgbGVuZ3RoOwoKICAvLy8gVGhlIGZ1bmN0aW9uIG1hcHBpbmcgaW5kaWNlcyB0byB2YWx1ZXMuCiAgZmluYWwgX0dlbmVyYXRvcjxFPiBfZ2VuZXJhdG9yOwoKICAvLy8gQ3JlYXRlcyB0aGUgZ2VuZXJhdGVkIGl0ZXJhYmxlLgogIC8vLwogIC8vLyBJZiBbZ2VuZXJhdG9yXSBpcyBgbnVsbGAsIGl0IGlzIGNoZWNrZWQgdGhhdCBgaW50YCBpcyBhc3NpZ25hYmxlIHRvIFtFXS4KICBfR2VuZXJhdG9ySXRlcmFibGUodGhpcy5sZW5ndGgsIEUgZ2VuZXJhdG9yKGludCBpbmRleCkpCiAgICAgIDogLy8gVGhlIGBhc2AgYmVs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aGUgZmlyc3QgcGF0Y2ggaW4gImRhcnQ6Y29yZSIgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBpbXBvcnRzCi8vLyB1c2VkIGJ5IHBhdGNoZXMgb2YgdGhhdCBsaWJyYXJ5LiBXZSBwbGFuIHRvIGNoYW5nZSB0aGlzIHdoZW4gd2UgaGF2ZSBhCi8vLyBzaGFyZWQgZnJvbnQgZW5kIGFuZCBzaW1wbHkgdXNlIHBhcnRzLgoKaW1wb3J0ICJkYXJ0Ol9pbnRlcm5hbCIgYXMgaW50ZXJuYWwgc2hvdyBTeW1ib2w7CgppbXBvcnQgImRhcnQ6X2ludGVybmFsIgogICAgc2hvdwogICAgICAgIENsYXNzSUQsCiAgICAgICAgQ29kZVVuaXRzLAogICAgICAgIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlLAogICAgICAgIEZpeGVkTGVuZ3RoTGlzdEJhc2UsCiAgICAgICAgSXRlcmFibGVFbGVtZW50RXJyb3IsCiAgICAgICAgTGlzdEl0ZXJhdG9yLAogICAgICAgIExpc3RzLAogICAgICAgIFBPV0VSU19PRl9URU4sCiAgICAgICAgU3ViTGlzdEl0ZXJhYmxlLAogICAgICAgIFVubW9kaWZpYWJsZUxpc3RCYXNlLAogICAgICAgIGlzNjRCaXQsCiAgICAgICAgbWFrZUZpeGVkTGlzdFVubW9kaWZpYWJsZSwKICAgICAgICBtYWtlTGlzdEZpeGVkTGVuZ3RoLAogICAgICAgIHBhdGNoLAogICAgICAgIHVuc2FmZUNhc3Q7CgppbXBvcnQgImRhcnQ6YXN5bmMiIHNob3cgQ29tcGxldGVyLCBGdXR1cmUsIFRpbWVyOwoKaW1wb3J0ICJkYXJ0OmNvbGxlY3Rpb24iCiAgICBzaG93CiAgICAgICAgSGFzaE1hcCwKICAgICAgICBJdGVyYWJsZUJhc2UsCiAgICAgICAgTGlua2VkSGFzaE1hcCwKICAgICAgICBMaW5rZWRMaXN0LAogICAgICAgIExpbmtlZExpc3RFbnRyeSwKICAgICAgICBMaXN0QmFzZSwKICAgICAgICBNYXBCYXNlLAogICAgICAgIE1hcHMsCiAgICAgICAgVW5tb2RpZmlhYmxlTWFwQmFzZSwKICAgICAgICBVbm1vZGlmaWFibGVNYXBWaWV3OwoKaW1wb3J0ICJkYXJ0OmNvbnZlcnQiIHNob3cgYXNjaWksIEVuY29kaW5nLCBqc29uLCBsYXRpbjEsIHV0Zjg7CgppbXBvcnQgImRhcnQ6aXNvbGF0ZSIgc2hvdyBJc29sYXRlOwoKaW1wb3J0ICJkYXJ0Om1hdGgiIHNob3cgUmFuZG9tOwoKaW1wb3J0ICJkYXJ0OnR5cGVkX2RhdGEiCiAgICBzaG93IEVuZGlhbiwgVWludDhMaXN0LCBJbnQ2NExpc3QsIFVpbnQxNkxpc3QsIFVpbnQzMkxpc3Q7CgovLy8gVGhlc2UgYXJlIHRoZSBhZGRpdGlvbmFsIHBhcnRzIG9mIHRoaXMgcGF0Y2ggbGlicmFyeToKLy8gcGFydCAiYXJyYXkuZGFydCI7Ci8vIHBhcnQgImFycmF5X3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJiaWdpbnRfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImJvb2xfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImRhdGVfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImRvdWJsZS5kYXJ0IjsKLy8gcGFydCAiZG91YmxlX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJlcnJvcnNfcGF0Y2guZGFydCI7Ci8vIHBhcnQgImV4cGFuZG9fcGF0Y2guZGFydCI7Ci8vIHBhcnQgImZ1bmN0aW9uLmRhcnQiOwovLyBwYXJ0ICJmdW5jdGlvbl9wYXRjaC5kYXJ0IjsKLy8gcGFydCAiZ3Jvd2FibGVfYXJyYXkuZGFydCI7Ci8vIHBhcnQgImlkZW50aWNhbF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAiaW1tdXRhYmxlX21hcC5kYXJ0IjsKLy8gcGFydCAiaW50ZWdlcnMuZGFydCI7Ci8vIHBhcnQgImludGVnZXJzX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJpbnZvY2F0aW9uX21pcnJvcl9wYXRjaC5kYXJ0IjsKLy8gcGFydCAibGliX3ByZWZpeC5kYXJ0IjsKLy8gcGFydCAibWFwX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJudWxsX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJvYmplY3RfcGF0Y2guZGFydCI7Ci8vIHBhcnQgInJlZ2V4cF9wYXRjaC5kYXJ0IjsKLy8gcGFydCAic3RhY2t0cmFjZS5kYXJ0IjsKLy8gcGFydCAic3RvcHdhdGNoX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJzdHJpbmdfYnVmZmVyX3BhdGNoLmRhcnQiOwovLyBwYXJ0ICJzdHJpbmdfcGF0Y2guZGFydCI7Ci8vIHBhcnQgInR5cGVfcGF0Y2guZGFydCI7Ci8vIHBhcnQgInVyaV9wYXRjaC5kYXJ0IjsKLy8gcGFydCAid2Vha19wcm9wZXJ0eS5kYXJ0IjsKCkBwYXRjaApjbGFzcyBudW0gewogIG51bSBfYWRkRnJvbUludGVnZXIoaW50IG90aGVyKTsKICBudW0gX3N1YkZyb21JbnRlZ2VyKGludCBvdGhlcik7CiAgbnVtIF9tdWxGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwogIGludCBfdHJ1bmNEaXZGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwogIG51bSBfbW9kdWxvRnJvbUludGVnZXIoaW50IG90aGVyKTsKICBudW0gX3JlbWFpbmRlckZyb21JbnRlZ2VyKGludCBvdGhlcik7CiAgYm9vbCBfZ3JlYXRlclRoYW5Gcm9tSW50ZWdlcihpbnQgb3RoZXIpOwogIGJvb2wgX2VxdWFsVG9JbnRlZ2VyKGludCBvdGhlcik7Cn0KCi8vIF9TeW5jSXRlcmFibGUgYW5kIF9zeW5jSXRlcmF0b3IgYXJlIHVzZWQgYnkgdGhlIGNvbXBpbGVyIHRvCi8vIGltcGxlbWVudCBzeW5jKiBnZW5lcmF0b3IgZnVuY3Rpb25zLiBBIHN5bmMqIGdlbmVyYXRvciBhbGxvY2F0ZXMKLy8gYW5kIHJldHVybnMgYSBuZXcgX1N5bmNJdGVyYWJsZSBvYmplY3QuCgp0eXBlZGVmIGJvb2wgX1N5bmNHZW5lcmF0b3JDYWxsYmFjazxUPihfU3luY0l0ZXJhdG9yPFQ+IGl0ZXJhdG9yKTsKCmNsYXNzIF9TeW5jSXRlcmFibGU8VD4gZXh0ZW5kcyBJdGVyYWJsZUJhc2U8VD4gewogIC8vIF9tb3ZlTmV4dEZuIGlzIHRoZSBjbG9zdXJpemVkIGJvZHkgb2YgdGhlIGdlbmVyYXRvciBmdW5jdGlvbi4KICBmaW5hbCBfU3luY0dlbmVyYXRvckNhbGxiYWNrPFQ+IF9tb3ZlTmV4dEZuOwoKICBjb25zdCBfU3luY0l0ZXJhYmxlKHRoaXMuX21vdmVOZXh0Rm4pOwoKICBJdGVyYXRvcjxUPiBnZXQgaXRlcmF0b3IgewogICAgLy8gTm90ZTogX0Nsb3N1cmUuX2Nsb25lIHJldHVybnMgX0Nsb3N1cmUgd2hpY2ggaXMgbm90IHJlbGF0ZWQgdG8KICAgIC8vIF9TeW5jR2VuZXJhdG9yQ2FsbGJhY2ssIHdoaWNoIG1lYW5zIHdlIG5lZWQgZXhwbGljaXQgY2FzdC4KICAgIHJldHVybiBuZXcgX1N5bmNJdGVyYXRvcjxUPih1bnNhZmVDYXN0PF9TeW5jR2VuZXJhdG9yQ2FsbGJhY2s8VD4+KAogICAgICAgIHVuc2FmZUNhc3Q8X0Nsb3N1cmU+KF9tb3ZlTmV4dEZuKS5fY2xvbmUoKSkpOwogIH0KfQoKY2xhc3MgX1N5bmNJdGVyYXRvcjxUPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPFQ+IHsKICBfU3luY0dlbmVyYXRvckNhbGxiYWNrPFQ+IF9tb3ZlTmV4dEZuOwogIEl0ZXJhdG9yPFQ+IF95aWVsZEVhY2hJdGVyYXRvcjsKCiAgLy8gVGhlc2UgdHdvIGZpZWxkcyBhcmUgc2V0IGJ5IGdlbmVyYXRlZCBjb2RlIGZvciB0aGUgeWllbGQgYW5kIHlpZWxkKgogIC8vIHN0YXRlbWVudC4KICBUIF9jdXJyZW50OwogIEl0ZXJhYmxlPFQ+IF95aWVsZEVhY2hJdGVyYWJsZTsKCiAgVCBnZXQgY3VycmVudCA9PgogICAgICBfeWllbGRFYWNoSXRlcmF0b3IgIT0gbnVsbCA/IF95aWVsZEVhY2hJdGVyYXRvci5jdXJyZW50IDogX2N1cnJlbnQ7CgogIF9TeW5jSXRlcmF0b3IodGhpcy5fbW92ZU5leHRGbik7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX21vdmVOZXh0Rm4gPT0gbnVsbCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICBpZiAoX3lpZWxkRWFjaEl0ZXJhdG9yICE9IG51bGwpIHsKICAgICAgICBpZiAoX3lpZWxkRWFjaEl0ZXJhdG9yLm1vdmVOZXh0KCkpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBfeWllbGRFYWNoSXRlcmF0b3IgPSBudWxsOwogICAgICB9CiAgICAgIC8vIF9tb3ZlTmV4dEZuKCkgd2lsbCB1cGRhdGUgdGhlIHZhbHVlcyBvZiBfeWllbGRFYWNoSXRlcmFibGUKICAgICAgLy8gIGFuZCBfY3VycmVudC4KICAgICAgaWYgKCFfbW92ZU5leHRGbih0aGlzKSkgewogICAgICAgIF9tb3ZlTmV4dEZuID0gbnVsbDsKICAgICAgICBfY3VycmVudCA9IG51bGw7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChfeWllbGRFYWNoSXRlcmFibGUgIT0gbnVsbCkgewogICAgICAgIC8vIFNwZWMgbWFuZGF0ZXM6IGl0IGlzIGEgZHluYW1pYyBlcnJvciBpZiB0aGUgY2xhc3Mgb2YgW3RoZSBvYmplY3QKICAgICAgICAvLyByZXR1cm5lZCBieSB5aWVsZCpdIGRvZXMgbm90IGltcGxlbWVudCBJdGVyYWJsZS4KICAgICAgICBfeWllbGRFYWNoSXRlcmF0b3IgPSBfeWllbGRFYWNoSXRlcmFibGUuaXRlcmF0b3I7CiAgICAgICAgX3lpZWxkRWFjaEl0ZXJhYmxlID0gbnVsbDsKICAgICAgICBfY3VycmVudCA9IG51bGw7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfQp9CgpAcGF0Y2gKY2xhc3MgU3RhY2tUcmFjZSB7CiAgQHBhdGNoCiAgc3RhdGljIFN0YWNrVHJhY2UgZ2V0IGN1cnJlbnQgbmF0aXZlICJTdGFja1RyYWNlX2N1cnJlbnQiOwp9CoCoAE5OPAFNSksrATEBGAkREyEdHhYPFxkeESMdDxQBMwEZCREWFxQZEhEOHR0BQAEkASABGT8BOhYcHRsbFx0dHhkfHyAeGR8oGxobHR0bICQdGxoeAQcMIiIiJyUoKyMCAT9EKwFDATFDLwEpAR1GQkc2BAIBMCkiAUkQDiIBE0oBIwEUHxQGEygtFwojCEQYIBwZFggoTDw6IxkSCBMGBAIBBxMJPQIBH2RhcnQ6Y29yZS1wYXRjaC9jb3JlX3BhdGNoLmRhcnQqb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9hcnJheS5kYXJ0nSAvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0xpc3Q8RT4gZXh0ZW5kcyBGaXhlZExlbmd0aExpc3RCYXNlPEU+IHsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9MaXN0KQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGZhY3RvcnkgX0xpc3QobGVuZ3RoKSBuYXRpdmUgIkxpc3RfYWxsb2NhdGUiOwoKICBFIG9wZXJhdG9yIFtdKGludCBpbmRleCkgbmF0aXZlICJMaXN0X2dldEluZGV4ZWQiOwoKICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIEUgdmFsdWUpIHsKICAgIF9zZXRJbmRleGVkKGluZGV4LCB2YWx1ZSk7CiAgfQoKICB2b2lkIF9zZXRJbmRleGVkKGludCBpbmRleCwgRSB2YWx1ZSkgbmF0aXZlICJMaXN0X3NldEluZGV4ZWQiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgaW50IGdldCBsZW5ndGggbmF0aXZlICJMaXN0X2dldExlbmd0aCI7CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIExpc3QgX3NsaWNlKGludCBzdGFydCwgaW50IGNvdW50LCBib29sIG5lZWRzVHlwZUFyZ3VtZW50KSB7CiAgICBpZiAoY291bnQgPD0gNjQpIHsKICAgICAgZmluYWwgcmVzdWx0ID0gbmVlZHNUeXBlQXJndW1lbnQgPyBuZXcgX0xpc3Q8RT4oY291bnQpIDogbmV3IF9MaXN0KGNvdW50KTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCByZXN1bHQubGVuZ3RoOyBpKyspIHsKICAgICAgICByZXN1bHRbaV0gPSB0aGlzW3N0YXJ0ICsgaV07CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBfc2xpY2VJbnRlcm5hbChzdGFydCwgY291bnQsIG5lZWRzVHlwZUFyZ3VtZW50KTsKICAgIH0KICB9CgogIExpc3QgX3NsaWNlSW50ZXJuYWwoaW50IHN0YXJ0LCBpbnQgY291bnQsIGJvb2wgbmVlZHNUeXBlQXJndW1lbnQpCiAgICAgIG5hdGl2ZSAiTGlzdF9zbGljZSI7CgogIC8vIExpc3QgaW50ZXJmYWNlLgogIHZvaWQgc2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBJdGVyYWJsZTxFPiBpdGVyYWJsZSwgW2ludCBza2lwQ291bnQgPSAwXSkgewogICAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHN0YXJ0LCAwLCB0aGlzLmxlbmd0aCk7CiAgICB9CiAgICBpZiAoZW5kIDwgc3RhcnQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoZW5kLCBzdGFydCwgdGhpcy5sZW5ndGgpOwogICAgfQogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm47CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIGl0ZXJhYmxlKSkgewogICAgICBMaXN0cy5jb3B5KHRoaXMsIHNraXBDb3VudCwgdGhpcywgc3RhcnQsIGxlbmd0aCk7CiAgICB9IGVsc2UgaWYgKENsYXNzSUQuZ2V0SUQoaXRlcmFibGUpID09IENsYXNzSUQuY2lkQXJyYXkpIHsKICAgICAgZmluYWwgX0xpc3Q8RT4gaXRlcmFibGVBc0xpc3QgPSBpdGVyYWJsZTsKICAgICAgTGlzdHMuY29weShpdGVyYWJsZUFzTGlzdCwgc2tpcENvdW50LCB0aGlzLCBzdGFydCwgbGVuZ3RoKTsKICAgIH0gZWxzZSBpZiAoaXRlcmFibGUgaXMgTGlzdDxFPikgewogICAgICBMaXN0cy5jb3B5KGl0ZXJhYmxlLCBza2lwQ291bnQsIHRoaXMsIHN0YXJ0LCBsZW5ndGgpOwogICAgfSBlbHNlIHsKICAgICAgSXRlcmF0b3IgaXQgPSBpdGVyYWJsZS5pdGVyYXRvcjsKICAgICAgd2hpbGUgKHNraXBDb3VudCA+IDApIHsKICAgICAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHJldHVybjsKICAgICAgICBza2lwQ291bnQtLTsKICAgICAgfQogICAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgIGlmICghaXQubW92ZU5leHQoKSkgcmV0dXJuOwogICAgICAgIHRoaXNbaV0gPSBpdC5jdXJyZW50OwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHNldEFsbChpbnQgaW5kZXgsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKSB7CiAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID4gdGhpcy5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoaW5kZXgsIDAsIHRoaXMubGVuZ3RoLCAiaW5kZXgiKTsKICAgIH0KICAgIExpc3Q8RT4gaXRlcmFibGVBc0xpc3Q7CiAgICBpZiAoaWRlbnRpY2FsKHRoaXMsIGl0ZXJhYmxlKSkgewogICAgICBpdGVyYWJsZUFzTGlzdCA9IHRoaXM7CiAgICB9IGVsc2UgaWYgKENsYXNzSUQuZ2V0SUQoaXRlcmFibGUpID09IENsYXNzSUQuY2lkQXJyYXkpIHsKICAgICAgaXRlcmFibGVBc0xpc3QgPSBpdGVyYWJsZTsKICAgIH0gZWxzZSBpZiAoaXRlcmFibGUgaXMgTGlzdDxFPikgewogICAgICBpdGVyYWJsZUFzTGlzdCA9IGl0ZXJhYmxlOwogICAgfSBlbHNlIHsKICAgICAgZm9yICh2YXIgdmFsdWUgaW4gaXRlcmFibGUpIHsKICAgICAgICB0aGlzW2luZGV4KytdID0gdmFsdWU7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IGxlbmd0aCA9IGl0ZXJhYmxlQXNMaXN0Lmxlbmd0aDsKICAgIGlmIChpbmRleCArIGxlbmd0aCA+IHRoaXMubGVuZ3RoKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKGluZGV4ICsgbGVuZ3RoLCAwLCB0aGlzLmxlbmd0aCk7CiAgICB9CiAgICBMaXN0cy5jb3B5KGl0ZXJhYmxlQXNMaXN0LCAwLCB0aGlzLCBpbmRleCwgbGVuZ3RoKTsKICB9CgogIExpc3Q8RT4gc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSkgewogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gPEU+W107CiAgICB2YXIgcmVzdWx0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8RT4uX3dpdGhEYXRhKF9zbGljZShzdGFydCwgbGVuZ3RoLCBmYWxzZSkpOwogICAgcmVzdWx0Ll9zZXRMZW5ndGgobGVuZ3RoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBJdGVyYWJsZSBpbnRlcmZhY2UuCgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIHZvaWQgZm9yRWFjaChmKEUgZWxlbWVudCkpIHsKICAgIGZpbmFsIGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICBmKHRoaXNbaV0pOwogICAgfQogIH0KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgX0ZpeGVkU2l6ZUFycmF5SXRlcmF0b3I8RT4odGhpcyk7CiAgfQoKICBFIGdldCBmaXJzdCB7CiAgICBpZiAobGVuZ3RoID4gMCkgcmV0dXJuIHRoaXNbMF07CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgZ2V0IGxhc3QgewogICAgaWYgKGxlbmd0aCA+IDApIHJldHVybiB0aGlzW2xlbmd0aCAtIDFdOwogICAgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgfQoKICBFIGdldCBzaW5nbGUgewogICAgaWYgKGxlbmd0aCA9PSAxKSByZXR1cm4gdGhpc1swXTsKICAgIGlmIChsZW5ndGggPT0gMCkgdGhyb3cgSXRlcmFibGVFbGVtZW50RXJyb3Iubm9FbGVtZW50KCk7CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci50b29NYW55KCk7CiAgfQoKICBMaXN0PEU+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pIHsKICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGlmIChsZW5ndGggPiAwKSB7CiAgICAgIHZhciByZXN1bHQgPSBfc2xpY2UoMCwgbGVuZ3RoLCAhZ3Jvd2FibGUpOwogICAgICBpZiAoZ3Jvd2FibGUpIHsKICAgICAgICByZXN1bHQgPSBuZXcgX0dyb3dhYmxlTGlzdDxFPi5fd2l0aERhdGEocmVzdWx0KS4uX3NldExlbmd0aChsZW5ndGgpOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICAvLyBfR3Jvd2FibGVMaXN0Ll93aXRoRGF0YSBtdXN0IG5vdCBiZSBjYWxsZWQgd2l0aCBlbXB0eSBsaXN0LgogICAgcmV0dXJuIGdyb3dhYmxlID8gPEU+W10gOiBuZXcgTGlzdDxFPigwKTsKICB9Cn0KCi8vIFRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgY2xhc3MgYXMgX0xpc3QsIGJ1dCBpdCBkb2VzIG5vdAovLyBwZXJtaXQgYW55IG1vZGlmaWNhdGlvbiBvZiBhcnJheSBlbGVtZW50cyBmcm9tIERhcnQgY29kZS4gV2UgdXNlCi8vIHRoaXMgY2xhc3MgZm9yIGFycmF5cyBjb25zdHJ1Y3RlZCBmcm9tIERhcnQgYXJyYXkgbGl0ZXJhbHMuCi8vIFRPRE8oaGF1c25lcik6IFdlIHNob3VsZCBjb25zaWRlciB0aGUgdHJhZGUtb2ZmcyBiZXR3ZWVuIHR3bwovLyBjbGFzc2VzIChhbmQgaW5saW5lIGNhY2hlIG1pc3NlcykgdmVyc3VzIGEgZmllbGQgaW4gdGhlIG5hdGl2ZQovLyBpbXBsZW1lbnRhdGlvbiAoY2hlY2tzIHdoZW4gbW9kaWZ5aW5nKS4gV2Ugc2hvdWxkIGtlZXAgd2F0Y2hpbmcKLy8gdGhlIGlubGluZSBjYWNoZSBtaXNzZXMuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0ltbXV0YWJsZUxpc3Q8RT4gZXh0ZW5kcyBVbm1vZGlmaWFibGVMaXN0QmFzZTxFPiB7CiAgZmFjdG9yeSBfSW1tdXRhYmxlTGlzdC5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigKICAgICAgICAiSW1tdXRhYmxlQXJyYXkgY2FuIG9ubHkgYmUgYWxsb2NhdGVkIGJ5IHRoZSBWTSIpOwogIH0KCiAgZmFjdG9yeSBfSW1tdXRhYmxlTGlzdC5fZnJvbShMaXN0IGZyb20sIGludCBvZmZzZXQsIGludCBsZW5ndGgpCiAgICAgIG5hdGl2ZSAiSW1tdXRhYmxlTGlzdF9mcm9tIjsKCiAgRSBvcGVyYXRvciBbXShpbnQgaW5kZXgpIG5hdGl2ZSAiTGlzdF9nZXRJbmRleGVkIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgbGVuZ3RoIG5hdGl2ZSAiTGlzdF9nZXRMZW5ndGgiOwoKICBMaXN0PEU+IHN1Ymxpc3QoaW50IHN0YXJ0LCBbaW50IGVuZF0pIHsKICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIHRoaXMubGVuZ3RoKTsKICAgIGludCBsZW5ndGggPSBlbmQgLSBzdGFydDsKICAgIGlmIChsZW5ndGggPT0gMCkgcmV0dXJuIDxFPltdOwogICAgTGlzdCBsaXN0ID0gbmV3IF9MaXN0KGxlbmd0aCk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGxpc3RbaV0gPSB0aGlzW3N0YXJ0ICsgaV07CiAgICB9CiAgICB2YXIgcmVzdWx0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8RT4uX3dpdGhEYXRhKGxpc3QpOwogICAgcmVzdWx0Ll9zZXRMZW5ndGgobGVuZ3RoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBDb2xsZWN0aW9uIGludGVyZmFjZS4KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBmb3JFYWNoKGYoRSBlbGVtZW50KSkgewogICAgZmluYWwgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGYodGhpc1tpXSk7CiAgICB9CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBfRml4ZWRTaXplQXJyYXlJdGVyYXRvcjxFPih0aGlzKTsKICB9CgogIEUgZ2V0IGZpcnN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1swXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgRSBnZXQgbGFzdCB7CiAgICBpZiAobGVuZ3RoID4gMCkgcmV0dXJuIHRoaXNbbGVuZ3RoIC0gMV07CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIEUgZ2V0IHNpbmdsZSB7CiAgICBpZiAobGVuZ3RoID09IDEpIHJldHVybiB0aGlzWzBdOwogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICB9CgogIExpc3Q8RT4gdG9MaXN0KHtib29sIGdyb3dhYmxlOiB0cnVlfSkgewogICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgaWYgKGxlbmd0aCA+IDApIHsKICAgICAgTGlzdCBsaXN0ID0gZ3Jvd2FibGUgPyBuZXcgX0xpc3QobGVuZ3RoKSA6IG5ldyBfTGlzdDxFPihsZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgbGlzdFtpXSA9IHRoaXNbaV07CiAgICAgIH0KICAgICAgaWYgKCFncm93YWJsZSkgcmV0dXJuIGxpc3Q7CiAgICAgIHZhciByZXN1bHQgPSBuZXcgX0dyb3dhYmxlTGlzdDxFPi5fd2l0aERhdGEobGlzdCk7CiAgICAgIHJlc3VsdC5fc2V0TGVuZ3RoKGxlbmd0aCk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICByZXR1cm4gZ3Jvd2FibGUgPyA8RT5bXSA6IG5ldyBfTGlzdDxFPigwKTsKICB9Cn0KCi8vIEl0ZXJhdG9yIGZvciBhcnJheXMgd2l0aCBmaXhlZCBzaXplLgpjbGFzcyBfRml4ZWRTaXplQXJyYXlJdGVyYXRvcjxFPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPEU+IHsKICBmaW5hbCBMaXN0PEU+IF9hcnJheTsKICBmaW5hbCBpbnQgX2xlbmd0aDsgLy8gQ2FjaGUgYXJyYXkgbGVuZ3RoIGZvciBmYXN0ZXIgYWNjZXNzLgogIGludCBfaW5kZXg7CiAgRSBfY3VycmVudDsKCiAgX0ZpeGVkU2l6ZUFycmF5SXRlcmF0b3IoTGlzdDxFPiBhcnJheSkKICAgICAgOiBfYXJyYXkgPSBhcnJheSwKICAgICAgICBfbGVuZ3RoID0gYXJyYXkubGVuZ3RoLAogICAgICAgIF9pbmRleCA9IDAgewogICAgYXNzZXJ0KGFycmF5IGlzIF9MaXN0PEU+IHx8IGFycmF5IGlzIF9JbW11dGFibGVMaXN0PEU+KTsKICB9CgogIEUgZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7CgogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpZiAoX2luZGV4ID49IF9sZW5ndGgpIHsKICAgICAgX2N1cnJlbnQgPSBudWxsOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBfY3VycmVudCA9IF9hcnJheVtfaW5kZXhdOwogICAgX2luZGV4Kys7CiAgICByZXR1cm4gdHJ1ZTsKICB9Cn0KgQQATk48AR4BGjApHjABNQEqHwQBQQE0HioBHj4XUTAlCBUNPgYEAUQbARVRLDkGLDsGHh0lOD4wQiY8DSceJBUIKiQeCAYEATEsQgYcJR0+ISYhDSQfCA4GKChCBjgEASo/HiNPHxMEARkBHh8gJxIGBAEeHTEEARAkLAQBDy0sBAERJT0qBAEqHhYxFk0IFQZDLgQCAUBEP0BCQxwaOi0gOwQBQiMBNQE0HioBKj8eIyMnIQY3HxMEARsBHh8gJxIGBAEeHTEEARAkLAQBDy0sBAERJT0qBAEqHhZHKRsIIjkhFQYvBAIBKDoYPg4OASkYIBU9BAEdAR4UHRcUBh8OEQQCARpkYXJ0OmNvcmUtcGF0Y2gvYXJyYXkuZGFydDFvcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2JpZ2ludF9wYXRjaC5kYXJ0wAF9Hi8vIENvcHlyaWdodCAoYykgMjAxNywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mIGRhcnQuY29yZTsKCi8vIENvcHlyaWdodCAyMDA5IFRoZSBHbyBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgovLyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZQovLyBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovKgogKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSAgVG9tIFd1CiAqIENvcHlyaWdodCAoYykgMjAxMiBBZGFtIFNpbmdlciAoYWRhbUBzb2x2ci5pbykKICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICoKICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nCiAqIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQogKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCiAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKICogZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCiAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwogKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAqCiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCiAqIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgogKgogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTLUlTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKICogRVhQUkVTUywgSU1QTElFRCBPUiBPVEhFUldJU0UsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWQogKiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAqCiAqIElOIE5PIEVWRU5UIFNIQUxMIFRPTSBXVSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLAogKiBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIKICogUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBPUiBOT1QgQURWSVNFRCBPRgogKiBUSEUgUE9TU0lCSUxJVFkgT0YgREFNQUdFLCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIEFSSVNJTkcgT1VUCiAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCiAqCiAqIEluIGFkZGl0aW9uLCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbiBhcHBsaWVzOgogKgogKiBBbGwgcmVkaXN0cmlidXRpb25zIG11c3QgcmV0YWluIGFuIGludGFjdCBjb3B5IG9mIHRoaXMgY29weXJpZ2h0IG5vdGljZQogKiBhbmQgZGlzY2xhaW1lci4KICovCgpAcGF0Y2gKY2xhc3MgQmlnSW50IGltcGxlbWVudHMgQ29tcGFyYWJsZTxCaWdJbnQ+IHsKICBAcGF0Y2gKICBzdGF0aWMgQmlnSW50IGdldCB6ZXJvID0+IF9CaWdJbnRJbXBsLnplcm87CiAgQHBhdGNoCiAgc3RhdGljIEJpZ0ludCBnZXQgb25lID0+IF9CaWdJbnRJbXBsLm9uZTsKICBAcGF0Y2gKICBzdGF0aWMgQmlnSW50IGdldCB0d28gPT4gX0JpZ0ludEltcGwudHdvOwoKICBAcGF0Y2gKICBzdGF0aWMgQmlnSW50IHBhcnNlKFN0cmluZyBzb3VyY2UsIHtpbnQgcmFkaXh9KSA9PgogICAgICBfQmlnSW50SW1wbC5wYXJzZShzb3VyY2UsIHJhZGl4OiByYWRpeCk7CgogIEBwYXRjaAogIHN0YXRpYyBCaWdJbnQgdHJ5UGFyc2UoU3RyaW5nIHNvdXJjZSwge2ludCByYWRpeH0pID0+CiAgICAgIF9CaWdJbnRJbXBsLl90cnlQYXJzZShzb3VyY2UsIHJhZGl4OiByYWRpeCk7CgogIEBwYXRjaAogIGZhY3RvcnkgQmlnSW50LmZyb20obnVtIHZhbHVlKSA9PiBuZXcgX0JpZ0ludEltcGwuZnJvbSh2YWx1ZSk7Cn0KCmludCBfbWF4KGludCBhLCBpbnQgYikgPT4gYSA+IGIgPyBhIDogYjsKaW50IF9taW4oaW50IGEsIGludCBiKSA9PiBhIDwgYiA/IGEgOiBiOwoKLy8vIEFsbG9jYXRlIGEgbmV3IGRpZ2l0cyBsaXN0IG9mIGV2ZW4gbGVuZ3RoLgpVaW50MzJMaXN0IF9uZXdEaWdpdHMoaW50IGxlbmd0aCkgPT4gbmV3IFVpbnQzMkxpc3QobGVuZ3RoICsgKGxlbmd0aCAmIDEpKTsKCi8qKgogKiBBbiBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGFyYml0cmFyaWx5IGxhcmdlIGludGVnZXIuCiAqCiAqIFRoZSBpbnRlZ2VyIG51bWJlciBpcyByZXByZXNlbnRlZCBieSBhIHNpZ24sIGFuIGFycmF5IG9mIDMyLWJpdCB1bnNpZ25lZAogKiBpbnRlZ2VycyBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCwgYW5kIGEgbnVtYmVyIG9mIHVzZWQgZGlnaXRzIGluIHRoYXQgYXJyYXkuCiAqLwpjbGFzcyBfQmlnSW50SW1wbCBpbXBsZW1lbnRzIEJpZ0ludCB7CiAgLy8gQml0cyBwZXIgZGlnaXQuCiAgc3RhdGljIGNvbnN0IGludCBfZGlnaXRCaXRzID0gMzI7CiAgc3RhdGljIGNvbnN0IGludCBfZGlnaXRCYXNlID0gMSA8PCBfZGlnaXRCaXRzOwogIHN0YXRpYyBjb25zdCBpbnQgX2RpZ2l0TWFzayA9ICgxIDw8IF9kaWdpdEJpdHMpIC0gMTsKCiAgLy8gQml0cyBwZXIgaGFsZiBkaWdpdC4KICBzdGF0aWMgY29uc3QgaW50IF9oYWxmRGlnaXRCaXRzID0gX2RpZ2l0Qml0cyA+PiAxOwogIHN0YXRpYyBjb25zdCBpbnQgX2hhbGZEaWdpdE1hc2sgPSAoMSA8PCBfaGFsZkRpZ2l0Qml0cykgLSAxOwoKICBzdGF0aWMgZmluYWwgX0JpZ0ludEltcGwgemVybyA9IG5ldyBfQmlnSW50SW1wbC5fZnJvbUludCgwKTsKICBzdGF0aWMgZmluYWwgX0JpZ0ludEltcGwgb25lID0gbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KDEpOwogIHN0YXRpYyBmaW5hbCBfQmlnSW50SW1wbCB0d28gPSBuZXcgX0JpZ0ludEltcGwuX2Zyb21JbnQoMik7CgogIHN0YXRpYyBmaW5hbCBfQmlnSW50SW1wbCBfbWludXNPbmUgPSAtb25lOwogIHN0YXRpYyBmaW5hbCBfQmlnSW50SW1wbCBfb25lRGlnaXRNYXNrID0gbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KF9kaWdpdE1hc2spOwogIHN0YXRpYyBmaW5hbCBfQmlnSW50SW1wbCBfdHdvRGlnaXRNYXNrID0gKG9uZSA8PCAoMiAqIF9kaWdpdEJpdHMpKSAtIG9uZTsKICBzdGF0aWMgZmluYWwgX0JpZ0ludEltcGwgX29uZUJpbGxpb24gPSBuZXcgX0JpZ0ludEltcGwuX2Zyb21JbnQoMTAwMDAwMDAwMCk7CiAgc3RhdGljIGNvbnN0IGludCBfbWluSW50ID0gLTB4ODAwMDAwMDAwMDAwMDAwMDsKICBzdGF0aWMgY29uc3QgaW50IF9tYXhJbnQgPSAweDdmZmZmZmZmZmZmZmZmZmY7CgogIC8vIFJlc3VsdCBjYWNoZSBmb3IgbGFzdCBfZGl2UmVtIGNhbGwuCiAgLy8gUmVzdWx0IGNhY2hlIGZvciBsYXN0IF9kaXZSZW0gY2FsbC4KICBzdGF0aWMgVWludDMyTGlzdCBfbGFzdERpdmlkZW5kRGlnaXRzOwogIHN0YXRpYyBpbnQgX2xhc3REaXZpZGVuZFVzZWQ7CiAgc3RhdGljIFVpbnQzMkxpc3QgX2xhc3REaXZpc29yRGlnaXRzOwogIHN0YXRpYyBpbnQgX2xhc3REaXZpc29yVXNlZDsKICBzdGF0aWMgVWludDMyTGlzdCBfbGFzdFF1b1JlbURpZ2l0czsKICBzdGF0aWMgaW50IF9sYXN0UXVvUmVtVXNlZDsKICBzdGF0aWMgaW50IF9sYXN0UmVtVXNlZDsKICBzdGF0aWMgaW50IF9sYXN0UmVtX25zaDsKCiAgLy8vIFdoZXRoZXIgdGhpcyBiaWdpbnQgaXMgbmVnYXRpdmUuCiAgZmluYWwgYm9vbCBfaXNOZWdhdGl2ZTsKCiAgLy8vIFRoZSB1bnNpZ25lZCBkaWdpdHMgb2YgdGhpcyBiaWdpbnQuCiAgLy8vCiAgLy8vIFRoZSBsZWFzdCBzaWduaWZpY2FudCBkaWdpdCBpcyBpbiBzbG90IDAuCiAgLy8vIFRoZSBsaXN0IG1heSBoYXZlIG1vcmUgZGlnaXRzIHRoYW4gbmVlZGVkLiBUaGF0IGlzLCBgX2RpZ2l0cy5sZW5ndGhgIG1heQogIC8vLyBiZSBzdHJpY3RseSBncmVhdGVyIHRoYW4gYF91c2VkYC4KICAvLy8gQWxzbywgYF9kaWdpdHMubGVuZ3RoYCBtdXN0IGFsd2F5cyBiZSBldmVuLCBiZWNhdXNlIGludHJpbnNpY3Mgb24gNjQtYml0CiAgLy8vIHBsYXRmb3JtcyBtYXkgcHJvY2VzcyBhIGRpZ2l0IHBhaXIgYXMgYSA2NC1iaXQgdmFsdWUuCiAgZmluYWwgVWludDMyTGlzdCBfZGlnaXRzOwoKICAvLy8gVGhlIG51bWJlciBvZiB1c2VkIGVudHJpZXMgaW4gW19kaWdpdHNdLgogIC8vLwogIC8vLyBUbyBhdm9pZCByZWFsbG9jYXRpbmcgW1VpbnQzMkxpc3RdcywgbGlzdHMgdGhhdCBhcmUgdG9vIGJpZyBhcmUgbm90CiAgLy8vIHJlcGxhY2VkLCBidXQgYF91c2VkYCByZWZsZWN0cyB0aGUgc21hbGxlciBudW1iZXIgb2YgZGlnaXRzIGFjdHVhbGx5IHVzZWQuCiAgLy8vCiAgLy8vIE5vdGUgdGhhdCBmdW5jdGlvbnMgc2hvcnRlbmluZyBhbiBleGlzdGluZyBsaXN0IG9mIGRpZ2l0cyB0byBhIHNtYWxsZXIKICAvLy8gYF91c2VkYCBudW1iZXIgb2YgZGlnaXRzIG11c3QgZW5zdXJlIHRoYXQgdGhlIGhpZ2hlcm1vc3QgcGFpciBvZiBkaWdpdHMKICAvLy8gaXMgY29ycmVjdCB3aGVuIHJlYWQgYXMgYSA2NC1iaXQgdmFsdWUgYnkgaW50cmluc2ljcy4gVGhlcmVmb3JlLCBpZiB0aGUKICAvLy8gc21hbGxlciAnX3VzZWQnIG51bWJlciBpcyBvZGQsIHRoZSBoaWdoIGRpZ2l0IG9mIHRoYXQgcGFpciBtdXN0IGJlCiAgLy8vIGV4cGxpY2l0bHkgY2xlYXJlZCwgaS5lLiBfZGlnaXRzW191c2VkXSA9IDAsIHdoaWNoIGNhbm5vdCByZXN1bHQgaW4gYW4KICAvLy8gb3V0IG9mIGJvdW5kcyBhY2Nlc3MsIHNpbmNlIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgaXMgZ3VhcmFudGVlZCB0byBiZQogIC8vLyBldmVuLgogIGZpbmFsIGludCBfdXNlZDsKCiAgLyoqCiAgICogUGFyc2VzIFtzb3VyY2VdIGFzIGEsIHBvc3NpYmx5IHNpZ25lZCwgaW50ZWdlciBsaXRlcmFsIGFuZCByZXR1cm5zIGl0cwogICAqIHZhbHVlLgogICAqCiAgICogVGhlIFtzb3VyY2VdIG11c3QgYmUgYSBub24tZW1wdHkgc2VxdWVuY2Ugb2YgYmFzZS1bcmFkaXhdIGRpZ2l0cywKICAgKiBvcHRpb25hbGx5IHByZWZpeGVkIHdpdGggYSBtaW51cyBvciBwbHVzIHNpZ24gKCctJyBvciAnKycpLgogICAqCiAgICogVGhlIFtyYWRpeF0gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMi4uMzYuIFRoZSBkaWdpdHMgdXNlZCBhcmUKICAgKiBmaXJzdCB0aGUgZGVjaW1hbCBkaWdpdHMgMC4uOSwgYW5kIHRoZW4gdGhlIGxldHRlcnMgJ2EnLi4neicgd2l0aAogICAqIHZhbHVlcyAxMCB0aHJvdWdoIDM1LiBBbHNvIGFjY2VwdHMgdXBwZXItY2FzZSBsZXR0ZXJzIHdpdGggdGhlIHNhbWUKICAgKiB2YWx1ZXMgYXMgdGhlIGxvd2VyLWNhc2Ugb25lcy4KICAgKgogICAqIElmIG5vIFtyYWRpeF0gaXMgZ2l2ZW4gdGhlbiBpdCBkZWZhdWx0cyB0byAxMC4gSW4gdGhpcyBjYXNlLCB0aGUgW3NvdXJjZV0KICAgKiBkaWdpdHMgbWF5IGFsc28gc3RhcnQgd2l0aCBgMHhgLCBpbiB3aGljaCBjYXNlIHRoZSBudW1iZXIgaXMgaW50ZXJwcmV0ZWQKICAgKiBhcyBhIGhleGFkZWNpbWFsIGxpdGVyYWwsIHdoaWNoIGVmZmVjdGl2ZWx5IG1lYW5zIHRoYXQgdGhlIGAweGAgaXMgaWdub3JlZAogICAqIGFuZCB0aGUgcmFkaXggaXMgaW5zdGVhZCBzZXQgdG8gMTYuCiAgICoKICAgKiBGb3IgYW55IGludCBgbmAgYW5kIHJhZGl4IGByYCwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0CiAgICogYG4gPT0gaW50LnBhcnNlKG4udG9SYWRpeFN0cmluZyhyKSwgcmFkaXg6IHIpYC4KICAgKgogICAqIFRocm93cyBhIFtGb3JtYXRFeGNlcHRpb25dIGlmIHRoZSBbc291cmNlXSBpcyBub3QgYSB2YWxpZCBpbnRlZ2VyIGxpdGVyYWwsCiAgICogb3B0aW9uYWxseSBwcmVmaXhlZCBieSBhIHNpZ24uCiAgICovCiAgc3RhdGljIF9CaWdJbnRJbXBsIHBhcnNlKFN0cmluZyBzb3VyY2UsIHtpbnQgcmFkaXh9KSB7CiAgICB2YXIgcmVzdWx0ID0gX3RyeVBhcnNlKHNvdXJjZSwgcmFkaXg6IHJhZGl4KTsKICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCJDb3VsZCBub3QgcGFyc2UgQmlnSW50Iiwgc291cmNlKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUGFyc2VzIGEgZGVjaW1hbCBiaWdpbnQgbGl0ZXJhbC4KICAvLy8KICAvLy8gVGhlIFtzb3VyY2VdIG11c3Qgbm90IGNvbnRhaW4gbGVhZGluZyBvciB0cmFpbGluZyB3aGl0ZXNwYWNlLgogIHN0YXRpYyBfQmlnSW50SW1wbCBfcGFyc2VEZWNpbWFsKFN0cmluZyBzb3VyY2UsIGJvb2wgaXNOZWdhdGl2ZSkgewogICAgY29uc3QgXzAgPSA0ODsKCiAgICBpbnQgcGFydCA9IDA7CiAgICBfQmlnSW50SW1wbCByZXN1bHQgPSB6ZXJvOwogICAgLy8gUmVhZCBpbiB0aGUgc291cmNlIDkgZGlnaXRzIGF0IGEgdGltZS4KICAgIC8vIFRoZSBmaXJzdCBwYXJ0IG1heSBoYXZlIGEgZmV3IGxlYWRpbmcgdmlydHVhbCAnMCdzIHRvIG1ha2UgdGhlIHJlbWFpbmluZwogICAgLy8gcGFydHMgYWxsIGhhdmUgZXhhY3RseSA5IGRpZ2l0cy4KICAgIGludCBkaWdpdEluUGFydENvdW50ID0gOSAtIHNvdXJjZS5sZW5ndGgucmVtYWluZGVyKDkpOwogICAgaWYgKGRpZ2l0SW5QYXJ0Q291bnQgPT0gOSkgZGlnaXRJblBhcnRDb3VudCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7IGkrKykgewogICAgICBwYXJ0ID0gcGFydCAqIDEwICsgc291cmNlLmNvZGVVbml0QXQoaSkgLSBfMDsKICAgICAgaWYgKCsrZGlnaXRJblBhcnRDb3VudCA9PSA5KSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICogX29uZUJpbGxpb24gKyBuZXcgX0JpZ0ludEltcGwuX2Zyb21JbnQocGFydCk7CiAgICAgICAgcGFydCA9IDA7CiAgICAgICAgZGlnaXRJblBhcnRDb3VudCA9IDA7CiAgICAgIH0KICAgIH0KICAgIGlmIChpc05lZ2F0aXZlKSByZXR1cm4gLXJlc3VsdDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBnaXZlbiBzb3VyY2UgZGlnaXQuCiAgLy8vCiAgLy8vIFNvdXJjZSBkaWdpdHMgYmV0d2VlbiAiMCIgYW5kICI5IiAoaW5jbHVzaXZlKSByZXR1cm4gdGhlaXIgZGVjaW1hbCB2YWx1ZS4KICAvLy8KICAvLy8gU291cmNlIGRpZ2l0cyBiZXR3ZWVuICJhIiBhbmQgInoiLCBvciAiQSIgYW5kICJaIiAoaW5jbHVzaXZlKSByZXR1cm4KICAvLy8gMTAgKyB0aGVpciBwb3NpdGlvbiBpbiB0aGUgQVNDSUkgYWxwaGFiZXQuCiAgLy8vCiAgLy8vIFRoZSBpbmNvbWluZyBbY29kZVVuaXRdIG11c3QgYmUgYW4gQVNDSUkgY29kZS11bml0LgogIHN0YXRpYyBpbnQgX2NvZGVVbml0VG9SYWRpeFZhbHVlKGludCBjb2RlVW5pdCkgewogICAgLy8gV2Uga25vdyB0aGF0IHRoZSBjaGFyYWN0ZXJzIG11c3QgYmUgQVNDSUkgYXMgb3RoZXJ3aXNlIHRoZQogICAgLy8gcmVnZXhwIHdvdWxkbid0IGhhdmUgbWF0Y2hlZC4gTG93ZXJjYXNpbmcgYnkgZG9pbmcgYHwgMHgyMGAgaXMgdGh1cwogICAgLy8gZ3VhcmFudGVlZCB0byBiZSBhIHNhZmUgb3BlcmF0aW9uLCBzaW5jZSBpdCBwcmVzZXJ2ZXMgZGlnaXRzCiAgICAvLyBhbmQgbG93ZXItY2FzZXMgQVNDSUkgbGV0dGVycy4KICAgIGNvbnN0IGludCBfMCA9IDQ4OwogICAgY29uc3QgaW50IF85ID0gNTc7CiAgICBjb25zdCBpbnQgX2EgPSA5NzsKICAgIGlmIChfMCA8PSBjb2RlVW5pdCAmJiBjb2RlVW5pdCA8PSBfOSkgcmV0dXJuIGNvZGVVbml0IC0gXzA7CiAgICBjb2RlVW5pdCB8PSAweDIwOwogICAgdmFyIHJlc3VsdCA9IGNvZGVVbml0IC0gX2EgKyAxMDsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gUGFyc2VzIHRoZSBnaXZlbiBbc291cmNlXSBzdHJpbmcsIHN0YXJ0aW5nIGF0IFtzdGFydFBvc10sIGFzIGEgaGV4CiAgLy8vIGxpdGVyYWwuCiAgLy8vCiAgLy8vIElmIFtpc05lZ2F0aXZlXSBpcyB0cnVlLCBuZWdhdGVzIHRoZSByZXN1bHQgYmVmb3JlIHJldHVybmluZyBpdC4KICAvLy8KICAvLy8gVGhlIFtzb3VyY2VdIChzdWJzdHJpbmcpIG11c3QgYmUgYSB2YWxpZCBoZXggbGl0ZXJhbC4KICBzdGF0aWMgX0JpZ0ludEltcGwgX3BhcnNlSGV4KFN0cmluZyBzb3VyY2UsIGludCBzdGFydFBvcywgYm9vbCBpc05lZ2F0aXZlKSB7CiAgICBpbnQgaGV4Q2hhcnNQZXJEaWdpdCA9IF9kaWdpdEJpdHMgfi8gNDsKICAgIGludCBzb3VyY2VMZW5ndGggPSBzb3VyY2UubGVuZ3RoIC0gc3RhcnRQb3M7CiAgICBpbnQgdXNlZCA9IChzb3VyY2VMZW5ndGggKyBoZXhDaGFyc1BlckRpZ2l0IC0gMSkgfi8gaGV4Q2hhcnNQZXJEaWdpdDsKICAgIHZhciBkaWdpdHMgPSBfbmV3RGlnaXRzKHVzZWQpOwoKICAgIGludCBsYXN0RGlnaXRMZW5ndGggPSBzb3VyY2VMZW5ndGggLSAodXNlZCAtIDEpICogaGV4Q2hhcnNQZXJEaWdpdDsKICAgIGludCBkaWdpdEluZGV4ID0gdXNlZCAtIDE7CiAgICBpbnQgaSA9IHN0YXJ0UG9zOwogICAgaW50IGRpZ2l0ID0gMDsKICAgIGZvciAoaW50IGogPSAwOyBqIDwgbGFzdERpZ2l0TGVuZ3RoOyBqKyspIHsKICAgICAgdmFyIHZhbHVlID0gX2NvZGVVbml0VG9SYWRpeFZhbHVlKHNvdXJjZS5jb2RlVW5pdEF0KGkrKykpOwogICAgICBpZiAodmFsdWUgPj0gMTYpIHJldHVybiBudWxsOwogICAgICBkaWdpdCA9IGRpZ2l0ICogMTYgKyB2YWx1ZTsKICAgIH0KICAgIGRpZ2l0c1tkaWdpdEluZGV4LS1dID0gZGlnaXQ7CgogICAgd2hpbGUgKGkgPCBzb3VyY2UubGVuZ3RoKSB7CiAgICAgIGRpZ2l0ID0gMDsKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBoZXhDaGFyc1BlckRpZ2l0OyBqKyspIHsKICAgICAgICB2YXIgdmFsdWUgPSBfY29kZVVuaXRUb1JhZGl4VmFsdWUoc291cmNlLmNvZGVVbml0QXQoaSsrKSk7CiAgICAgICAgaWYgKHZhbHVlID49IDE2KSByZXR1cm4gbnVsbDsKICAgICAgICBkaWdpdCA9IGRpZ2l0ICogMTYgKyB2YWx1ZTsKICAgICAgfQogICAgICBkaWdpdHNbZGlnaXRJbmRleC0tXSA9IGRpZ2l0OwogICAgfQogICAgaWYgKHVzZWQgPT0gMSAmJiBkaWdpdHNbMF0gPT0gMCkgcmV0dXJuIHplcm87CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oaXNOZWdhdGl2ZSwgdXNlZCwgZGlnaXRzKTsKICB9CgogIC8vLyBQYXJzZXMgdGhlIGdpdmVuIFtzb3VyY2VdIGFzIGEgW3JhZGl4XSBsaXRlcmFsLgogIC8vLwogIC8vLyBUaGUgW3NvdXJjZV0gd2lsbCBiZSBjaGVja2VkIGZvciBpbnZhbGlkIGNoYXJhY3RlcnMuIElmIGl0IGlzIGludmFsaWQsCiAgLy8vIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBgbnVsbGAuCiAgc3RhdGljIF9CaWdJbnRJbXBsIF9wYXJzZVJhZGl4KFN0cmluZyBzb3VyY2UsIGludCByYWRpeCwgYm9vbCBpc05lZ2F0aXZlKSB7CiAgICB2YXIgcmVzdWx0ID0gemVybzsKICAgIHZhciBiYXNlID0gbmV3IF9CaWdJbnRJbXBsLl9mcm9tSW50KHJhZGl4KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc291cmNlLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciB2YWx1ZSA9IF9jb2RlVW5pdFRvUmFkaXhWYWx1ZShzb3VyY2UuY29kZVVuaXRBdChpKSk7CiAgICAgIGlmICh2YWx1ZSA+PSByYWRpeCkgcmV0dXJuIG51bGw7CiAgICAgIHJlc3VsdCA9IHJlc3VsdCAqIGJhc2UgKyBuZXcgX0JpZ0ludEltcGwuX2Zyb21JbnQodmFsdWUpOwogICAgfQogICAgaWYgKGlzTmVnYXRpdmUpIHJldHVybiAtcmVzdWx0OwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBUcmllcyB0byBwYXJzZSB0aGUgZ2l2ZW4gW3NvdXJjZV0gYXMgYSBbcmFkaXhdIGxpdGVyYWwuCiAgLy8vCiAgLy8vIFJldHVybnMgdGhlIHBhcnNlZCBiaWcgaW50ZWdlciwgb3IgYG51bGxgIGlmIGl0IGZhaWxlZC4KICAvLy8KICAvLy8gSWYgdGhlIFtyYWRpeF0gaXMgYG51bGxgIGFjY2VwdHMgZGVjaW1hbCBsaXRlcmFscyBvciBgMHhgIGhleCBsaXRlcmFscy4KICBzdGF0aWMgX0JpZ0ludEltcGwgX3RyeVBhcnNlKFN0cmluZyBzb3VyY2UsIHtpbnQgcmFkaXh9KSB7CiAgICBpZiAoc291cmNlID09ICIiKSByZXR1cm4gbnVsbDsKCiAgICB2YXIgcmUgPSBuZXcgUmVnRXhwKHInXlxzKihbKy1dPykoKDB4W2EtZjAtOV0rKXwoXGQrKXwoW2EtejAtOV0rKSlccyokJywKICAgICAgICBjYXNlU2Vuc2l0aXZlOiBmYWxzZSk7CiAgICB2YXIgbWF0Y2ggPSByZS5maXJzdE1hdGNoKHNvdXJjZSk7CiAgICBpbnQgc2lnbkluZGV4ID0gMTsKICAgIGludCBoZXhJbmRleCA9IDM7CiAgICBpbnQgZGVjaW1hbEluZGV4ID0gNDsKICAgIGludCBub25EZWNpbWFsSGV4SW5kZXggPSA1OwogICAgaWYgKG1hdGNoID09IG51bGwpIHJldHVybiBudWxsOwoKICAgIGJvb2wgaXNOZWdhdGl2ZSA9IG1hdGNoW3NpZ25JbmRleF0gPT0gIi0iOwoKICAgIFN0cmluZyBkZWNpbWFsTWF0Y2ggPSBtYXRjaFtkZWNpbWFsSW5kZXhdOwogICAgU3RyaW5nIGhleE1hdGNoID0gbWF0Y2hbaGV4SW5kZXhdOwogICAgU3RyaW5nIG5vbkRlY2ltYWxNYXRjaCA9IG1hdGNoW25vbkRlY2ltYWxIZXhJbmRleF07CgogICAgaWYgKHJhZGl4ID09IG51bGwpIHsKICAgICAgaWYgKGRlY2ltYWxNYXRjaCAhPSBudWxsKSB7CiAgICAgICAgLy8gQ2Fubm90IGZhaWwgYmVjYXVzZSB3ZSBrbm93IHRoYXQgdGhlIGRpZ2l0cyBhcmUgYWxsIGRlY2ltYWwuCiAgICAgICAgcmV0dXJuIF9wYXJzZURlY2ltYWwoZGVjaW1hbE1hdGNoLCBpc05lZ2F0aXZlKTsKICAgICAgfQogICAgICBpZiAoaGV4TWF0Y2ggIT0gbnVsbCkgewogICAgICAgIC8vIENhbm5vdCBmYWlsIGJlY2F1c2Ugd2Uga25vdyB0aGF0IHRoZSBkaWdpdHMgYXJlIGFsbCBoZXguCiAgICAgICAgcmV0dXJuIF9wYXJzZUhleChoZXhNYXRjaCwgMiwgaXNOZWdhdGl2ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgaWYgKHJhZGl4IGlzISBpbnQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUocmFkaXgsICdyYWRpeCcsICdpcyBub3QgYW4gaW50ZWdlcicpOwogICAgfQogICAgaWYgKHJhZGl4IDwgMiB8fCByYWRpeCA+IDM2KSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHJhZGl4LCAyLCAzNiwgJ3JhZGl4Jyk7CiAgICB9CiAgICBpZiAocmFkaXggPT0gMTAgJiYgZGVjaW1hbE1hdGNoICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9wYXJzZURlY2ltYWwoZGVjaW1hbE1hdGNoLCBpc05lZ2F0aXZlKTsKICAgIH0KICAgIGlmIChyYWRpeCA9PSAxNiAmJiAoZGVjaW1hbE1hdGNoICE9IG51bGwgfHwgbm9uRGVjaW1hbE1hdGNoICE9IG51bGwpKSB7CiAgICAgIHJldHVybiBfcGFyc2VIZXgoZGVjaW1hbE1hdGNoID8/IG5vbkRlY2ltYWxNYXRjaCwgMCwgaXNOZWdhdGl2ZSk7CiAgICB9CgogICAgcmV0dXJuIF9wYXJzZVJhZGl4KAogICAgICAgIGRlY2ltYWxNYXRjaCA/PyBub25EZWNpbWFsTWF0Y2ggPz8gaGV4TWF0Y2gsIHJhZGl4LCBpc05lZ2F0aXZlKTsKICB9CgogIC8vLyBGaW5kcyB0aGUgYW1vdW50IHNpZ25pZmljYW50IGRpZ2l0cyBpbiB0aGUgcHJvdmlkZWQgW2RpZ2l0c10gYXJyYXkuCiAgc3RhdGljIGludCBfbm9ybWFsaXplKGludCB1c2VkLCBVaW50MzJMaXN0IGRpZ2l0cykgewogICAgd2hpbGUgKHVzZWQgPiAwICYmIGRpZ2l0c1t1c2VkIC0gMV0gPT0gMCkgdXNlZC0tOwogICAgcmV0dXJuIHVzZWQ7CiAgfQoKICAvLy8gRmFjdG9yeSByZXR1cm5pbmcgYW4gaW5zdGFuY2UgaW5pdGlhbGl6ZWQgd2l0aCB0aGUgZ2l2ZW4gZmllbGQgdmFsdWVzLgogIC8vLyBJZiB0aGUgW2RpZ2l0c10gYXJyYXkgY29udGFpbnMgbGVhZGluZyAwcywgdGhlIFt1c2VkXSB2YWx1ZSBpcyBhZGp1c3RlZAogIC8vLyBhY2NvcmRpbmdseS4gVGhlIFtkaWdpdHNdIGFycmF5IGlzIG5vdCBtb2RpZmllZC4KICBfQmlnSW50SW1wbC5fKGJvb2wgaXNOZWdhdGl2ZSwgaW50IHVzZWQsIFVpbnQzMkxpc3QgZGlnaXRzKQogICAgICA6IHRoaXMuX25vcm1hbGl6ZWQoaXNOZWdhdGl2ZSwgX25vcm1hbGl6ZSh1c2VkLCBkaWdpdHMpLCBkaWdpdHMpOwoKICBfQmlnSW50SW1wbC5fbm9ybWFsaXplZChib29sIGlzTmVnYXRpdmUsIHRoaXMuX3VzZWQsIHRoaXMuX2RpZ2l0cykKICAgICAgOiBfaXNOZWdhdGl2ZSA9IF91c2VkID09IDAgPyBmYWxzZSA6IGlzTmVnYXRpdmUgewogICAgYXNzZXJ0KF9kaWdpdHMubGVuZ3RoLmlzRXZlbik7CiAgICBhc3NlcnQoX3VzZWQuaXNFdmVuIHx8IF9kaWdpdHNbX3VzZWRdID09IDApOyAvLyBMZWFkaW5nIHplcm8gZm9yIDY0LWJpdC4KICB9CgogIC8vLyBXaGV0aGVyIHRoaXMgYmlnIGludGVnZXIgaXMgemVyby4KICBib29sIGdldCBfaXNaZXJvID0+IF91c2VkID09IDA7CgogIC8vLyBBbGxvY2F0ZXMgYW4gYXJyYXkgb2YgdGhlIGdpdmVuIFtsZW5ndGhdIGFuZCBjb3BpZXMgdGhlIFtkaWdpdHNdIGluIHRoZQogIC8vLyByYW5nZSBbZnJvbV0gdG8gW3RvLTFdLCBzdGFydGluZyBhdCBpbmRleCAwLCBmb2xsb3dlZCBieSBsZWFkaW5nIHplcm8KICAvLy8gZGlnaXRzLgogIHN0YXRpYyBVaW50MzJMaXN0IF9jbG9uZURpZ2l0cygKICAgICAgVWludDMyTGlzdCBkaWdpdHMsIGludCBmcm9tLCBpbnQgdG8sIGludCBsZW5ndGgpIHsKICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKGxlbmd0aCk7CiAgICB2YXIgbiA9IHRvIC0gZnJvbTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGRpZ2l0c1tmcm9tICsgaV07CiAgICB9CiAgICByZXR1cm4gcmVzdWx0RGlnaXRzOwogIH0KCiAgLy8vIEFsbG9jYXRlcyBhIGJpZyBpbnRlZ2VyIGZyb20gdGhlIHByb3ZpZGVkIFt2YWx1ZV0gbnVtYmVyLgogIGZhY3RvcnkgX0JpZ0ludEltcGwuZnJvbShudW0gdmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSAwKSByZXR1cm4gemVybzsKICAgIGlmICh2YWx1ZSA9PSAxKSByZXR1cm4gb25lOwogICAgaWYgKHZhbHVlID09IDIpIHJldHVybiB0d287CgogICAgaWYgKHZhbHVlLmFicygpIDwgMHgxMDAwMDAwMDApCiAgICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuX2Zyb21JbnQodmFsdWUudG9JbnQoKSk7CiAgICBpZiAodmFsdWUgaXMgZG91YmxlKSByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl9mcm9tRG91YmxlKHZhbHVlKTsKICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuX2Zyb21JbnQodmFsdWUpOwogIH0KCiAgZmFjdG9yeSBfQmlnSW50SW1wbC5fZnJvbUludChpbnQgdmFsdWUpIHsKICAgIGJvb2wgaXNOZWdhdGl2ZSA9IHZhbHVlIDwgMDsKICAgIGFzc2VydChfZGlnaXRCaXRzID09IDMyKTsKICAgIHZhciBkaWdpdHMgPSBfbmV3RGlnaXRzKDIpOwogICAgaWYgKGlzTmVnYXRpdmUpIHsKICAgICAgLy8gSGFuZGxlIHRoZSBtaW4gNjQtYml0IHZhbHVlIGRpZmZlcmVudGx5LCBzaW5jZSBpdHMgbmVnYXRpb24gaXMgbm90CiAgICAgIC8vIHBvc2l0aXZlLgogICAgICBpZiAodmFsdWUgPT0gX21pbkludCkgewogICAgICAgIGRpZ2l0c1sxXSA9IDB4ODAwMDAwMDA7CiAgICAgICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKHRydWUsIDIsIGRpZ2l0cyk7CiAgICAgIH0KICAgICAgdmFsdWUgPSAtdmFsdWU7CiAgICB9CiAgICBpZiAodmFsdWUgPCBfZGlnaXRCYXNlKSB7CiAgICAgIGRpZ2l0c1swXSA9IHZhbHVlOwogICAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oaXNOZWdhdGl2ZSwgMSwgZGlnaXRzKTsKICAgIH0KICAgIGRpZ2l0c1swXSA9IHZhbHVlICYgX2RpZ2l0TWFzazsKICAgIGRpZ2l0c1sxXSA9IHZhbHVlID4+IF9kaWdpdEJpdHM7CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oaXNOZWdhdGl2ZSwgMiwgZGlnaXRzKTsKICB9CgogIC8vLyBBbiA4LWJ5dGUgVWludDhMaXN0IHdlIGNhbiByZXVzZSBmb3IgW19mcm9tRG91YmxlXSB0byBhdm9pZCBnZW5lcmF0aW5nCiAgLy8vIGdhcmJhZ2UuCiAgc3RhdGljIGZpbmFsIFVpbnQ4TGlzdCBfYml0c0ZvckZyb21Eb3VibGUgPSBuZXcgVWludDhMaXN0KDgpOwoKICBmYWN0b3J5IF9CaWdJbnRJbXBsLl9mcm9tRG91YmxlKGRvdWJsZSB2YWx1ZSkgewogICAgY29uc3QgaW50IGV4cG9uZW50QmlhcyA9IDEwNzU7CgogICAgaWYgKHZhbHVlLmlzTmFOIHx8IHZhbHVlLmlzSW5maW5pdGUpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoIlZhbHVlIG11c3QgYmUgZmluaXRlOiAkdmFsdWUiKTsKICAgIH0KICAgIGJvb2wgaXNOZWdhdGl2ZSA9IHZhbHVlIDwgMDsKICAgIGlmIChpc05lZ2F0aXZlKSB2YWx1ZSA9IC12YWx1ZTsKCiAgICB2YWx1ZSA9IHZhbHVlLmZsb29yVG9Eb3VibGUoKTsKICAgIGlmICh2YWx1ZSA9PSAwKSByZXR1cm4gemVybzsKCiAgICB2YXIgYml0cyA9IF9iaXRzRm9yRnJvbURvdWJsZTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgODsgaSsrKSB7CiAgICAgIGJpdHNbaV0gPSAwOwogICAgfQogICAgYml0cy5idWZmZXIuYXNCeXRlRGF0YSgpLnNldEZsb2F0NjQoMCwgdmFsdWUsIEVuZGlhbi5saXR0bGUpOwogICAgLy8gVGhlIGV4cG9uZW50IGlzIGluIGJpdHMgNTMuLjYzLgogICAgdmFyIGJpYXNlZEV4cG9uZW50ID0gKGJpdHNbN10gPDwgNCkgKyAoYml0c1s2XSA+PiA0KTsKICAgIHZhciBleHBvbmVudCA9IGJpYXNlZEV4cG9uZW50IC0gZXhwb25lbnRCaWFzOwoKICAgIGFzc2VydChfZGlnaXRCaXRzID09IDMyKTsKICAgIC8vIFRoZSBzaWduaWZpY2FudCBiaXRzIGFyZSBpbiAwIC4uIDUyLgogICAgdmFyIHVuc2hpZnRlZERpZ2l0cyA9IF9uZXdEaWdpdHMoMik7CiAgICB1bnNoaWZ0ZWREaWdpdHNbMF0gPQogICAgICAgIChiaXRzWzNdIDw8IDI0KSArIChiaXRzWzJdIDw8IDE2KSArIChiaXRzWzFdIDw8IDgpICsgYml0c1swXTsKICAgIC8vIERvbid0IGZvcmdldCB0byBhZGQgdGhlIGhpZGRlbiBiaXQuCiAgICB1bnNoaWZ0ZWREaWdpdHNbMV0gPQogICAgICAgICgoMHgxMCB8IChiaXRzWzZdICYgMHhGKSkgPDwgMTYpICsgKGJpdHNbNV0gPDwgOCkgKyBiaXRzWzRdOwoKICAgIHZhciB1bnNoaWZ0ZWRCaWcgPSBuZXcgX0JpZ0ludEltcGwuX25vcm1hbGl6ZWQoZmFsc2UsIDIsIHVuc2hpZnRlZERpZ2l0cyk7CiAgICBfQmlnSW50SW1wbCBhYnNSZXN1bHQgPSB1bnNoaWZ0ZWRCaWc7CiAgICBpZiAoZXhwb25lbnQgPCAwKSB7CiAgICAgIGFic1Jlc3VsdCA9IHVuc2hpZnRlZEJpZyA+PiAtZXhwb25lbnQ7CiAgICB9IGVsc2UgaWYgKGV4cG9uZW50ID4gMCkgewogICAgICBhYnNSZXN1bHQgPSB1bnNoaWZ0ZWRCaWcgPDwgZXhwb25lbnQ7CiAgICB9CiAgICBpZiAoaXNOZWdhdGl2ZSkgcmV0dXJuIC1hYnNSZXN1bHQ7CiAgICByZXR1cm4gYWJzUmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJuIHRoZSBuZWdhdGl2ZSB2YWx1ZSBvZiB0aGlzIGludGVnZXIuCiAgICoKICAgKiBUaGUgcmVzdWx0IG9mIG5lZ2F0aW5nIGFuIGludGVnZXIgYWx3YXlzIGhhcyB0aGUgb3Bwb3NpdGUgc2lnbiwgZXhjZXB0CiAgICogZm9yIHplcm8sIHdoaWNoIGlzIGl0cyBvd24gbmVnYXRpb24uCiAgICovCiAgX0JpZ0ludEltcGwgb3BlcmF0b3IgLSgpIHsKICAgIGlmIChfdXNlZCA9PSAwKSByZXR1cm4gdGhpczsKICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuXyghX2lzTmVnYXRpdmUsIF91c2VkLCBfZGlnaXRzKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgaW50ZWdlci4KICAgKgogICAqIEZvciBhbnkgaW50ZWdlciBgeGAsIHRoZSByZXN1bHQgaXMgdGhlIHNhbWUgYXMgYHggPCAwID8gLXggOiB4YC4KICAgKi8KICBfQmlnSW50SW1wbCBhYnMoKSA9PiBfaXNOZWdhdGl2ZSA/IC10aGlzIDogdGhpczsKCiAgLy8vIFJldHVybnMgdGhpcyA8PCBuKl9kaWdpdEJpdHMuCiAgX0JpZ0ludEltcGwgX2RsU2hpZnQoaW50IG4pIHsKICAgIGZpbmFsIHVzZWQgPSBfdXNlZDsKICAgIGlmICh1c2VkID09IDApIHsKICAgICAgcmV0dXJuIHplcm87CiAgICB9CiAgICBmaW5hbCByZXN1bHRVc2VkID0gdXNlZCArIG47CiAgICBmaW5hbCBkaWdpdHMgPSBfZGlnaXRzOwogICAgZmluYWwgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhyZXN1bHRVc2VkKTsKICAgIGZvciAoaW50IGkgPSB1c2VkIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgcmVzdWx0RGlnaXRzW2kgKyBuXSA9IGRpZ2l0c1tpXTsKICAgIH0KICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuXyhfaXNOZWdhdGl2ZSwgcmVzdWx0VXNlZCwgcmVzdWx0RGlnaXRzKTsKICB9CgogIC8vLyBTYW1lIGFzIFtfZGxTaGlmdF0gYnV0IHdvcmtzIG9uIHRoZSBkZWNvbXBvc2VkIGJpZyBpbnRlZ2Vycy4KICAvLy8KICAvLy8gUmV0dXJucyBgcmVzdWx0VXNlZGAuCiAgLy8vCiAgLy8vIGByZXN1bHREaWdpdHNbMC4ucmVzdWx0VXNlZC0xXSA9IHhEaWdpdHNbMC4ueFVzZWQtMV0gPDwgbipfZGlnaXRCaXRzYC4KICBzdGF0aWMgaW50IF9kbFNoaWZ0RGlnaXRzKAogICAgICBVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgaW50IG4sIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICBpZiAoeFVzZWQgPT0gMCkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGlmIChuID09IDAgJiYgaWRlbnRpY2FsKHJlc3VsdERpZ2l0cywgeERpZ2l0cykpIHsKICAgICAgcmV0dXJuIHhVc2VkOwogICAgfQogICAgZmluYWwgcmVzdWx0VXNlZCA9IHhVc2VkICsgbjsKICAgIGFzc2VydChyZXN1bHREaWdpdHMubGVuZ3RoID49IHJlc3VsdFVzZWQgKyAocmVzdWx0VXNlZCAmIDEpKTsKICAgIGZvciAoaW50IGkgPSB4VXNlZCAtIDE7IGkgPj0gMDsgaS0tKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpICsgbl0gPSB4RGlnaXRzW2ldOwogICAgfQogICAgZm9yIChpbnQgaSA9IG4gLSAxOyBpID49IDA7IGktLSkgewogICAgICByZXN1bHREaWdpdHNbaV0gPSAwOwogICAgfQogICAgaWYgKHJlc3VsdFVzZWQuaXNPZGQpIHsKICAgICAgcmVzdWx0RGlnaXRzW3Jlc3VsdFVzZWRdID0gMDsKICAgIH0KICAgIHJldHVybiByZXN1bHRVc2VkOwogIH0KCiAgLy8vIFJldHVybnMgYHRoaXMgPj4gbipfZGlnaXRCaXRzYC4KICBfQmlnSW50SW1wbCBfZHJTaGlmdChpbnQgbikgewogICAgZmluYWwgdXNlZCA9IF91c2VkOwogICAgaWYgKHVzZWQgPT0gMCkgewogICAgICByZXR1cm4gemVybzsKICAgIH0KICAgIGZpbmFsIHJlc3VsdFVzZWQgPSB1c2VkIC0gbjsKICAgIGlmIChyZXN1bHRVc2VkIDw9IDApIHsKICAgICAgcmV0dXJuIF9pc05lZ2F0aXZlID8gX21pbnVzT25lIDogemVybzsKICAgIH0KICAgIGZpbmFsIGRpZ2l0cyA9IF9kaWdpdHM7CiAgICBmaW5hbCByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQpOwogICAgZm9yICh2YXIgaSA9IG47IGkgPCB1c2VkOyBpKyspIHsKICAgICAgcmVzdWx0RGlnaXRzW2kgLSBuXSA9IGRpZ2l0c1tpXTsKICAgIH0KICAgIGZpbmFsIHJlc3VsdCA9IG5ldyBfQmlnSW50SW1wbC5fKF9pc05lZ2F0aXZlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogICAgaWYgKF9pc05lZ2F0aXZlKSB7CiAgICAgIC8vIFJvdW5kIGRvd24gaWYgYW55IGJpdCB3YXMgc2hpZnRlZCBvdXQuCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgaWYgKGRpZ2l0c1tpXSAhPSAwKSB7CiAgICAgICAgICByZXR1cm4gcmVzdWx0IC0gb25lOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vLyBTYW1lIGFzIFtfZHJTaGlmdF0gYnV0IHdvcmtzIG9uIHRoZSBkZWNvbXBvc2VkIGJpZyBpbnRlZ2Vycy4KICAvLy8KICAvLy8gUmV0dXJucyBgcmVzdWx0VXNlZGAuCiAgLy8vCiAgLy8vIGByZXN1bHREaWdpdHNbMC4ucmVzdWx0VXNlZC0xXSA9IHhEaWdpdHNbMC4ueFVzZWQtMV0gPj4gbipfZGlnaXRCaXRzYC4KICBzdGF0aWMgaW50IF9kclNoaWZ0RGlnaXRzKAogICAgICBVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgaW50IG4sIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICBmaW5hbCByZXN1bHRVc2VkID0geFVzZWQgLSBuOwogICAgaWYgKHJlc3VsdFVzZWQgPD0gMCkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGFzc2VydChyZXN1bHREaWdpdHMubGVuZ3RoID49IHJlc3VsdFVzZWQgKyAocmVzdWx0VXNlZCAmIDEpKTsKICAgIGZvciAodmFyIGkgPSBuOyBpIDwgeFVzZWQ7IGkrKykgewogICAgICByZXN1bHREaWdpdHNbaSAtIG5dID0geERpZ2l0c1tpXTsKICAgIH0KICAgIGlmIChyZXN1bHRVc2VkLmlzT2RkKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkXSA9IDA7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0VXNlZDsKICB9CgogIC8vLyBTaGlmdHMgdGhlIGRpZ2l0cyBvZiBbeERpZ2l0c10gaW50byB0aGUgcmlnaHQgcGxhY2UgaW4gW3Jlc3VsdERpZ2l0c10uCiAgLy8vCiAgLy8vIGByZXN1bHREaWdpdHNbZHMuLnhVc2VkK2RzXSA9IHhEaWdpdHNbMC4ueFVzZWQtMV0gPDwgKG4gJSBfZGlnaXRCaXRzKWAKICAvLy8gICB3aGVyZSBgZHMgPSBuIH4vIF9kaWdpdEJpdHNgCiAgLy8vCiAgLy8vIERvZXMgKm5vdCogY2xlYXIgZGlnaXRzIGJlbG93IGRzLgogIC8vLwogIC8vLyBOb3RlOiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnRyaW5zaWZpZWQuCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBzdGF0aWMgdm9pZCBfbHNoKAogICAgICBVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgaW50IG4sIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICBhc3NlcnQoeFVzZWQgPiAwKTsKICAgIGZpbmFsIGRpZ2l0U2hpZnQgPSBuIH4vIF9kaWdpdEJpdHM7CiAgICBmaW5hbCBiaXRTaGlmdCA9IG4gJSBfZGlnaXRCaXRzOwogICAgZmluYWwgY2FycnlCaXRTaGlmdCA9IF9kaWdpdEJpdHMgLSBiaXRTaGlmdDsKICAgIGZpbmFsIGJpdE1hc2sgPSAoMSA8PCBjYXJyeUJpdFNoaWZ0KSAtIDE7CiAgICB2YXIgY2FycnkgPSAwOwogICAgZm9yIChpbnQgaSA9IHhVc2VkIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgZmluYWwgZGlnaXQgPSB4RGlnaXRzW2ldOwogICAgICByZXN1bHREaWdpdHNbaSArIGRpZ2l0U2hpZnQgKyAxXSA9IChkaWdpdCA+PiBjYXJyeUJpdFNoaWZ0KSB8IGNhcnJ5OwogICAgICBjYXJyeSA9IChkaWdpdCAmIGJpdE1hc2spIDw8IGJpdFNoaWZ0OwogICAgfQogICAgcmVzdWx0RGlnaXRzW2RpZ2l0U2hpZnRdID0gY2Fycnk7CiAgfQoKICAvKioKICAgKiBTaGlmdCB0aGUgYml0cyBvZiB0aGlzIGludGVnZXIgdG8gdGhlIGxlZnQgYnkgW3NoaWZ0QW1vdW50XS4KICAgKgogICAqIFNoaWZ0aW5nIHRvIHRoZSBsZWZ0IG1ha2VzIHRoZSBudW1iZXIgbGFyZ2VyLCBlZmZlY3RpdmVseSBtdWx0aXBseWluZwogICAqIHRoZSBudW1iZXIgYnkgYHBvdygyLCBzaGlmdEluZGV4KWAuCiAgICoKICAgKiBUaGVyZSBpcyBubyBsaW1pdCBvbiB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0LiBJdCBtYXkgYmUgcmVsZXZhbnQgdG8KICAgKiBsaW1pdCBpbnRlcm1lZGlhdGUgdmFsdWVzIGJ5IHVzaW5nIHRoZSAiYW5kIiBvcGVyYXRvciB3aXRoIGEgc3VpdGFibGUKICAgKiBtYXNrLgogICAqCiAgICogSXQgaXMgYW4gZXJyb3IgaWYgW3NoaWZ0QW1vdW50XSBpcyBuZWdhdGl2ZS4KICAgKi8KICBfQmlnSW50SW1wbCBvcGVyYXRvciA8PChpbnQgc2hpZnRBbW91bnQpIHsKICAgIGlmIChzaGlmdEFtb3VudCA8IDApIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoInNoaWZ0LWFtb3VudCBtdXN0IGJlIHBvc2l0aXZlICRzaGlmdEFtb3VudCIpOwogICAgfQogICAgaWYgKF9pc1plcm8pIHJldHVybiB0aGlzOwogICAgZmluYWwgZGlnaXRTaGlmdCA9IHNoaWZ0QW1vdW50IH4vIF9kaWdpdEJpdHM7CiAgICBmaW5hbCBiaXRTaGlmdCA9IHNoaWZ0QW1vdW50ICUgX2RpZ2l0Qml0czsKICAgIGlmIChiaXRTaGlmdCA9PSAwKSB7CiAgICAgIHJldHVybiBfZGxTaGlmdChkaWdpdFNoaWZ0KTsKICAgIH0KICAgIC8vIE5lZWQgb25lIGV4dHJhIGRpZ2l0IHRvIGhvbGQgYml0cyBzaGlmdGVkIGJ5IGJpdFNoaWZ0LgogICAgdmFyIHJlc3VsdFVzZWQgPSBfdXNlZCArIGRpZ2l0U2hpZnQgKyAxOwogICAgLy8gVGhlIDY0LWJpdCBpbnRyaW5zaWMgcmVxdWlyZXMgb25lIGV4dHJhIHBhaXIgdG8gd29yayB3aXRoLgogICAgdmFyIHJlc3VsdERpZ2l0cyA9IF9uZXdEaWdpdHMocmVzdWx0VXNlZCArIDEpOwogICAgX2xzaChfZGlnaXRzLCBfdXNlZCwgc2hpZnRBbW91bnQsIHJlc3VsdERpZ2l0cyk7CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oX2lzTmVnYXRpdmUsIHJlc3VsdFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgfQoKICAvLy8gcmVzdWx0RGlnaXRzWzAuLnJlc3VsdFVzZWQtMV0gPSB4RGlnaXRzWzAuLnhVc2VkLTFdIDw8IG4uCiAgLy8vIFJldHVybnMgcmVzdWx0VXNlZC4KICBzdGF0aWMgaW50IF9sU2hpZnREaWdpdHMoCiAgICAgIFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkLCBpbnQgbiwgVWludDMyTGlzdCByZXN1bHREaWdpdHMpIHsKICAgIGZpbmFsIGRpZ2l0c1NoaWZ0ID0gbiB+LyBfZGlnaXRCaXRzOwogICAgZmluYWwgYml0U2hpZnQgPSBuICUgX2RpZ2l0Qml0czsKICAgIGlmIChiaXRTaGlmdCA9PSAwKSB7CiAgICAgIHJldHVybiBfZGxTaGlmdERpZ2l0cyh4RGlnaXRzLCB4VXNlZCwgZGlnaXRzU2hpZnQsIHJlc3VsdERpZ2l0cyk7CiAgICB9CiAgICAvLyBOZWVkIG9uZSBleHRyYSBkaWdpdCB0byBob2xkIGJpdHMgc2hpZnRlZCBieSBiaXRTaGlmdC4KICAgIHZhciByZXN1bHRVc2VkID0geFVzZWQgKyBkaWdpdHNTaGlmdCArIDE7CiAgICAvLyBUaGUgNjQtYml0IGludHJpbnNpYyByZXF1aXJlcyBvbmUgZXh0cmEgcGFpciB0byB3b3JrIHdpdGguCiAgICBhc3NlcnQocmVzdWx0RGlnaXRzLmxlbmd0aCA+PSByZXN1bHRVc2VkICsgMiAtIChyZXN1bHRVc2VkICYgMSkpOwogICAgX2xzaCh4RGlnaXRzLCB4VXNlZCwgbiwgcmVzdWx0RGlnaXRzKTsKICAgIHZhciBpID0gZGlnaXRzU2hpZnQ7CiAgICB3aGlsZSAoLS1pID49IDApIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gMDsKICAgIH0KICAgIGlmIChyZXN1bHREaWdpdHNbcmVzdWx0VXNlZCAtIDFdID09IDApIHsKICAgICAgcmVzdWx0VXNlZC0tOyAvLyBDbGFtcCByZXN1bHQuCiAgICB9IGVsc2UgaWYgKHJlc3VsdFVzZWQuaXNPZGQpIHsKICAgICAgcmVzdWx0RGlnaXRzW3Jlc3VsdFVzZWRdID0gMDsKICAgIH0KICAgIHJldHVybiByZXN1bHRVc2VkOwogIH0KCiAgLy8vIHJlc3VsdERpZ2l0c1swLi5yZXN1bHRVc2VkLTFdID0geERpZ2l0c1swLi54VXNlZC0xXSA+PiBuLgogIC8vLwogIC8vLyBOb3RlOiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnRyaW5zaWZpZWQuCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBzdGF0aWMgdm9pZCBfcnNoKAogICAgICBVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgaW50IG4sIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICBhc3NlcnQoeFVzZWQgPiAwKTsKICAgIGZpbmFsIGRpZ2l0c1NoaWZ0ID0gbiB+LyBfZGlnaXRCaXRzOwogICAgZmluYWwgYml0U2hpZnQgPSBuICUgX2RpZ2l0Qml0czsKICAgIGZpbmFsIGNhcnJ5Qml0U2hpZnQgPSBfZGlnaXRCaXRzIC0gYml0U2hpZnQ7CiAgICBmaW5hbCBiaXRNYXNrID0gKDEgPDwgYml0U2hpZnQpIC0gMTsKICAgIHZhciBjYXJyeSA9IHhEaWdpdHNbZGlnaXRzU2hpZnRdID4+IGJpdFNoaWZ0OwogICAgZmluYWwgbGFzdCA9IHhVc2VkIC0gZGlnaXRzU2hpZnQgLSAxOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0OyBpKyspIHsKICAgICAgZmluYWwgZGlnaXQgPSB4RGlnaXRzW2kgKyBkaWdpdHNTaGlmdCArIDFdOwogICAgICByZXN1bHREaWdpdHNbaV0gPSAoKGRpZ2l0ICYgYml0TWFzaykgPDwgY2FycnlCaXRTaGlmdCkgfCBjYXJyeTsKICAgICAgY2FycnkgPSBkaWdpdCA+PiBiaXRTaGlmdDsKICAgIH0KICAgIHJlc3VsdERpZ2l0c1tsYXN0XSA9IGNhcnJ5OwogIH0KCiAgLyoqCiAgICogU2hpZnQgdGhlIGJpdHMgb2YgdGhpcyBpbnRlZ2VyIHRvIHRoZSByaWdodCBieSBbc2hpZnRBbW91bnRdLgogICAqCiAgICogU2hpZnRpbmcgdG8gdGhlIHJpZ2h0IG1ha2VzIHRoZSBudW1iZXIgc21hbGxlciBhbmQgZHJvcHMgdGhlIGxlYXN0CiAgICogc2lnbmlmaWNhbnQgYml0cywgZWZmZWN0aXZlbHkgZG9pbmcgYW4gaW50ZWdlciBkaXZpc2lvbiBieQogICAqYHBvdygyLCBzaGlmdEluZGV4KWAuCiAgICoKICAgKiBJdCBpcyBhbiBlcnJvciBpZiBbc2hpZnRBbW91bnRdIGlzIG5lZ2F0aXZlLgogICAqLwogIF9CaWdJbnRJbXBsIG9wZXJhdG9yID4+KGludCBzaGlmdEFtb3VudCkgewogICAgaWYgKHNoaWZ0QW1vdW50IDwgMCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigic2hpZnQtYW1vdW50IG11c3QgYmUgcG9zaXRpdmUgJHNoaWZ0QW1vdW50Iik7CiAgICB9CiAgICBpZiAoX2lzWmVybykgcmV0dXJuIHRoaXM7CiAgICBmaW5hbCBkaWdpdFNoaWZ0ID0gc2hpZnRBbW91bnQgfi8gX2RpZ2l0Qml0czsKICAgIGZpbmFsIGJpdFNoaWZ0ID0gc2hpZnRBbW91bnQgJSBfZGlnaXRCaXRzOwogICAgaWYgKGJpdFNoaWZ0ID09IDApIHsKICAgICAgcmV0dXJuIF9kclNoaWZ0KGRpZ2l0U2hpZnQpOwogICAgfQogICAgZmluYWwgdXNlZCA9IF91c2VkOwogICAgZmluYWwgcmVzdWx0VXNlZCA9IHVzZWQgLSBkaWdpdFNoaWZ0OwogICAgaWYgKHJlc3VsdFVzZWQgPD0gMCkgewogICAgICByZXR1cm4gX2lzTmVnYXRpdmUgPyBfbWludXNPbmUgOiB6ZXJvOwogICAgfQogICAgZmluYWwgZGlnaXRzID0gX2RpZ2l0czsKICAgIGZpbmFsIHJlc3VsdERpZ2l0cyA9IF9uZXdEaWdpdHMocmVzdWx0VXNlZCk7CiAgICBfcnNoKGRpZ2l0cywgdXNlZCwgc2hpZnRBbW91bnQsIHJlc3VsdERpZ2l0cyk7CiAgICBmaW5hbCByZXN1bHQgPSBuZXcgX0JpZ0ludEltcGwuXyhfaXNOZWdhdGl2ZSwgcmVzdWx0VXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgIGlmIChfaXNOZWdhdGl2ZSkgewogICAgICAvLyBSb3VuZCBkb3duIGlmIGFueSBiaXQgd2FzIHNoaWZ0ZWQgb3V0LgogICAgICBpZiAoKGRpZ2l0c1tkaWdpdFNoaWZ0XSAmICgoMSA8PCBiaXRTaGlmdCkgLSAxKSkgIT0gMCkgewogICAgICAgIHJldHVybiByZXN1bHQgLSBvbmU7CiAgICAgIH0KICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaWdpdFNoaWZ0OyBpKyspIHsKICAgICAgICBpZiAoZGlnaXRzW2ldICE9IDApIHsKICAgICAgICAgIHJldHVybiByZXN1bHQgLSBvbmU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8vIHJlc3VsdERpZ2l0c1swLi5yZXN1bHRVc2VkLTFdID0geERpZ2l0c1swLi54VXNlZC0xXSA+PiBuLgogIC8vLyBSZXR1cm5zIHJlc3VsdFVzZWQuCiAgc3RhdGljIGludCBfclNoaWZ0RGlnaXRzKAogICAgICBVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCwgaW50IG4sIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICBmaW5hbCBkaWdpdFNoaWZ0ID0gbiB+LyBfZGlnaXRCaXRzOwogICAgZmluYWwgYml0U2hpZnQgPSBuICUgX2RpZ2l0Qml0czsKICAgIGlmIChiaXRTaGlmdCA9PSAwKSB7CiAgICAgIHJldHVybiBfZHJTaGlmdERpZ2l0cyh4RGlnaXRzLCB4VXNlZCwgZGlnaXRTaGlmdCwgcmVzdWx0RGlnaXRzKTsKICAgIH0KICAgIHZhciByZXN1bHRVc2VkID0geFVzZWQgLSBkaWdpdFNoaWZ0OwogICAgaWYgKHJlc3VsdFVzZWQgPD0gMCkgewogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGFzc2VydChyZXN1bHREaWdpdHMubGVuZ3RoID49IHJlc3VsdFVzZWQgKyAocmVzdWx0VXNlZCAmIDEpKTsKICAgIF9yc2goeERpZ2l0cywgeFVzZWQsIG4sIHJlc3VsdERpZ2l0cyk7CiAgICBpZiAocmVzdWx0RGlnaXRzW3Jlc3VsdFVzZWQgLSAxXSA9PSAwKSB7CiAgICAgIHJlc3VsdFVzZWQtLTsgLy8gQ2xhbXAgcmVzdWx0LgogICAgfSBlbHNlIGlmIChyZXN1bHRVc2VkLmlzT2RkKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkXSA9IDA7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0VXNlZDsKICB9CgogIC8vLyBDb21wYXJlcyB0aGlzIHRvIFtvdGhlcl0gdGFraW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBib3RoIG9wZXJhbmRzLgogIC8vLwogIC8vLyBSZXR1cm5zIDAgaWYgYWJzKHRoaXMpID09IGFicyhvdGhlcik7IGEgcG9zaXRpdmUgbnVtYmVyIGlmCiAgLy8vIGFicyh0aGlzKSA+IGFicyhvdGhlcik7IGFuZCBhIG5lZ2F0aXZlIG51bWJlciBpZiBhYnModGhpcykgPCBhYnMob3RoZXIpLgogIGludCBfYWJzQ29tcGFyZShCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIHJldHVybiBfY29tcGFyZURpZ2l0cyhfZGlnaXRzLCBfdXNlZCwgb3RoZXIuX2RpZ2l0cywgb3RoZXIuX3VzZWQpOwogIH0KCiAgLyoqCiAgICogQ29tcGFyZXMgdGhpcyB0byBgb3RoZXJgLgogICAqCiAgICogUmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciBpZiBgdGhpc2AgaXMgbGVzcyB0aGFuIGBvdGhlcmAsIHplcm8gaWYgdGhleSBhcmUKICAgKiBlcXVhbCwgYW5kIGEgcG9zaXRpdmUgbnVtYmVyIGlmIGB0aGlzYCBpcyBncmVhdGVyIHRoYW4gYG90aGVyYC4KICAgKi8KICBpbnQgY29tcGFyZVRvKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgaWYgKF9pc05lZ2F0aXZlID09IG90aGVyLl9pc05lZ2F0aXZlKSB7CiAgICAgIHZhciByZXN1bHQgPSBfYWJzQ29tcGFyZShvdGhlcik7CiAgICAgIC8vIFVzZSAwIC0gcmVzdWx0IHRvIGF2b2lkIG5lZ2F0aXZlIHplcm8gaW4gSmF2YVNjcmlwdC4KICAgICAgcmV0dXJuIF9pc05lZ2F0aXZlID8gMCAtIHJlc3VsdCA6IHJlc3VsdDsKICAgIH0KICAgIHJldHVybiBfaXNOZWdhdGl2ZSA/IC0xIDogMTsKICB9CgogIC8vLyBDb21wYXJlcyBgZGlnaXRzWzAuLnVzZWQtMV1gIHdpdGggYG90aGVyRGlnaXRzWzAuLm90aGVyVXNlZC0xXWAuCiAgLy8vCiAgLy8vIFJldHVybnMgMCBpZiBlcXVhbDsgYSBwb3NpdGl2ZSBudW1iZXIgaWYgbGFyZ2VyOwogIC8vLyBhbmQgYSBuZWdhdGl2ZSBudW1iZXIgaWYgc21hbGxlci4KICBzdGF0aWMgaW50IF9jb21wYXJlRGlnaXRzKAogICAgICBVaW50MzJMaXN0IGRpZ2l0cywgaW50IHVzZWQsIFVpbnQzMkxpc3Qgb3RoZXJEaWdpdHMsIGludCBvdGhlclVzZWQpIHsKICAgIHZhciByZXN1bHQgPSB1c2VkIC0gb3RoZXJVc2VkOwogICAgaWYgKHJlc3VsdCA9PSAwKSB7CiAgICAgIGZvciAoaW50IGkgPSB1c2VkIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgICAgICByZXN1bHQgPSBkaWdpdHNbaV0gLSBvdGhlckRpZ2l0c1tpXTsKICAgICAgICBpZiAocmVzdWx0ICE9IDApIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLy8gcmVzdWx0RGlnaXRzWzAuLnVzZWRdID0gZGlnaXRzWzAuLnVzZWQtMV0gKyBvdGhlckRpZ2l0c1swLi5vdGhlclVzZWQtMV0uCiAgLy8vIHVzZWQgPj0gb3RoZXJVc2VkID4gMC4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50cmluc2lmaWVkLgogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgc3RhdGljIHZvaWQgX2Fic0FkZChVaW50MzJMaXN0IGRpZ2l0cywgaW50IHVzZWQsIFVpbnQzMkxpc3Qgb3RoZXJEaWdpdHMsCiAgICAgIGludCBvdGhlclVzZWQsIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICBhc3NlcnQodXNlZCA+PSBvdGhlclVzZWQgJiYgb3RoZXJVc2VkID4gMCk7CiAgICB2YXIgY2FycnkgPSAwOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvdGhlclVzZWQ7IGkrKykgewogICAgICBjYXJyeSArPSBkaWdpdHNbaV0gKyBvdGhlckRpZ2l0c1tpXTsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gY2FycnkgJiBfZGlnaXRNYXNrOwogICAgICBjYXJyeSA+Pj0gX2RpZ2l0Qml0czsKICAgIH0KICAgIGZvciAodmFyIGkgPSBvdGhlclVzZWQ7IGkgPCB1c2VkOyBpKyspIHsKICAgICAgY2FycnkgKz0gZGlnaXRzW2ldOwogICAgICByZXN1bHREaWdpdHNbaV0gPSBjYXJyeSAmIF9kaWdpdE1hc2s7CiAgICAgIGNhcnJ5ID4+PSBfZGlnaXRCaXRzOwogICAgfQogICAgcmVzdWx0RGlnaXRzW3VzZWRdID0gY2Fycnk7CiAgfQoKICAvLy8gcmVzdWx0RGlnaXRzWzAuLnVzZWQtMV0gPSBkaWdpdHNbMC4udXNlZC0xXSAtIG90aGVyRGlnaXRzWzAuLm90aGVyVXNlZC0xXS4KICAvLy8gdXNlZCA+PSBvdGhlclVzZWQgPiAwLgogIC8vLwogIC8vLyBOb3RlOiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnRyaW5zaWZpZWQuCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBzdGF0aWMgdm9pZCBfYWJzU3ViKFVpbnQzMkxpc3QgZGlnaXRzLCBpbnQgdXNlZCwgVWludDMyTGlzdCBvdGhlckRpZ2l0cywKICAgICAgaW50IG90aGVyVXNlZCwgVWludDMyTGlzdCByZXN1bHREaWdpdHMpIHsKICAgIGFzc2VydCh1c2VkID49IG90aGVyVXNlZCAmJiBvdGhlclVzZWQgPiAwKTsKICAgIHZhciBjYXJyeSA9IDA7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG90aGVyVXNlZDsgaSsrKSB7CiAgICAgIGNhcnJ5ICs9IGRpZ2l0c1tpXSAtIG90aGVyRGlnaXRzW2ldOwogICAgICByZXN1bHREaWdpdHNbaV0gPSBjYXJyeSAmIF9kaWdpdE1hc2s7CiAgICAgIGNhcnJ5ID4+PSBfZGlnaXRCaXRzOwogICAgfQogICAgZm9yICh2YXIgaSA9IG90aGVyVXNlZDsgaSA8IHVzZWQ7IGkrKykgewogICAgICBjYXJyeSArPSBkaWdpdHNbaV07CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGNhcnJ5ICYgX2RpZ2l0TWFzazsKICAgICAgY2FycnkgPj49IF9kaWdpdEJpdHM7CiAgICB9CiAgfQoKICAvLy8gUmV0dXJucyBgYWJzKHRoaXMpICsgYWJzKG90aGVyKWAgd2l0aCBzaWduIHNldCBhY2NvcmRpbmcgdG8gW2lzTmVnYXRpdmVdLgogIF9CaWdJbnRJbXBsIF9hYnNBZGRTZXRTaWduKF9CaWdJbnRJbXBsIG90aGVyLCBib29sIGlzTmVnYXRpdmUpIHsKICAgIHZhciB1c2VkID0gX3VzZWQ7CiAgICB2YXIgb3RoZXJVc2VkID0gb3RoZXIuX3VzZWQ7CiAgICBpZiAodXNlZCA8IG90aGVyVXNlZCkgewogICAgICByZXR1cm4gb3RoZXIuX2Fic0FkZFNldFNpZ24odGhpcywgaXNOZWdhdGl2ZSk7CiAgICB9CiAgICBpZiAodXNlZCA9PSAwKSB7CiAgICAgIGFzc2VydCghaXNOZWdhdGl2ZSk7CiAgICAgIHJldHVybiB6ZXJvOwogICAgfQogICAgaWYgKG90aGVyVXNlZCA9PSAwKSB7CiAgICAgIHJldHVybiBfaXNOZWdhdGl2ZSA9PSBpc05lZ2F0aXZlID8gdGhpcyA6IC10aGlzOwogICAgfQogICAgdmFyIHJlc3VsdFVzZWQgPSB1c2VkICsgMTsKICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQpOwogICAgX2Fic0FkZChfZGlnaXRzLCB1c2VkLCBvdGhlci5fZGlnaXRzLCBvdGhlclVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oaXNOZWdhdGl2ZSwgcmVzdWx0VXNlZCwgcmVzdWx0RGlnaXRzKTsKICB9CgogIC8vLyBSZXR1cm5zIGBhYnModGhpcykgLSBhYnMob3RoZXIpYCB3aXRoIHNpZ24gc2V0IGFjY29yZGluZyB0byBbaXNOZWdhdGl2ZV0uCiAgLy8vCiAgLy8vIFJlcXVpcmVtZW50OiBgYWJzKHRoaXMpID49IGFicyhvdGhlcilgLgogIF9CaWdJbnRJbXBsIF9hYnNTdWJTZXRTaWduKF9CaWdJbnRJbXBsIG90aGVyLCBib29sIGlzTmVnYXRpdmUpIHsKICAgIGFzc2VydChfYWJzQ29tcGFyZShvdGhlcikgPj0gMCk7CiAgICB2YXIgdXNlZCA9IF91c2VkOwogICAgaWYgKHVzZWQgPT0gMCkgewogICAgICBhc3NlcnQoIWlzTmVnYXRpdmUpOwogICAgICByZXR1cm4gemVybzsKICAgIH0KICAgIHZhciBvdGhlclVzZWQgPSBvdGhlci5fdXNlZDsKICAgIGlmIChvdGhlclVzZWQgPT0gMCkgewogICAgICByZXR1cm4gX2lzTmVnYXRpdmUgPT0gaXNOZWdhdGl2ZSA/IHRoaXMgOiAtdGhpczsKICAgIH0KICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHVzZWQpOwogICAgX2Fic1N1YihfZGlnaXRzLCB1c2VkLCBvdGhlci5fZGlnaXRzLCBvdGhlclVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oaXNOZWdhdGl2ZSwgdXNlZCwgcmVzdWx0RGlnaXRzKTsKICB9CgogIC8vLyBSZXR1cm5zIGBhYnModGhpcykgJiBhYnMob3RoZXIpYCB3aXRoIHNpZ24gc2V0IGFjY29yZGluZyB0byBbaXNOZWdhdGl2ZV0uCiAgX0JpZ0ludEltcGwgX2Fic0FuZFNldFNpZ24oX0JpZ0ludEltcGwgb3RoZXIsIGJvb2wgaXNOZWdhdGl2ZSkgewogICAgdmFyIHJlc3VsdFVzZWQgPSBfbWluKF91c2VkLCBvdGhlci5fdXNlZCk7CiAgICB2YXIgZGlnaXRzID0gX2RpZ2l0czsKICAgIHZhciBvdGhlckRpZ2l0cyA9IG90aGVyLl9kaWdpdHM7CiAgICB2YXIgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cyhyZXN1bHRVc2VkKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0VXNlZDsgaSsrKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGRpZ2l0c1tpXSAmIG90aGVyRGlnaXRzW2ldOwogICAgfQogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIHJlc3VsdFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgfQoKICAvLy8gUmV0dXJucyBgYWJzKHRoaXMpICZ+IGFicyhvdGhlcilgIHdpdGggc2lnbiBzZXQgYWNjb3JkaW5nIHRvIFtpc05lZ2F0aXZlXS4KICBfQmlnSW50SW1wbCBfYWJzQW5kTm90U2V0U2lnbihfQmlnSW50SW1wbCBvdGhlciwgYm9vbCBpc05lZ2F0aXZlKSB7CiAgICB2YXIgcmVzdWx0VXNlZCA9IF91c2VkOwogICAgdmFyIGRpZ2l0cyA9IF9kaWdpdHM7CiAgICB2YXIgb3RoZXJEaWdpdHMgPSBvdGhlci5fZGlnaXRzOwogICAgdmFyIHJlc3VsdERpZ2l0cyA9IF9uZXdEaWdpdHMocmVzdWx0VXNlZCk7CiAgICB2YXIgbSA9IF9taW4ocmVzdWx0VXNlZCwgb3RoZXIuX3VzZWQpOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtOyBpKyspIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gZGlnaXRzW2ldICYgfm90aGVyRGlnaXRzW2ldOwogICAgfQogICAgZm9yICh2YXIgaSA9IG07IGkgPCByZXN1bHRVc2VkOyBpKyspIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gZGlnaXRzW2ldOwogICAgfQogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIHJlc3VsdFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgfQoKICAvLy8gUmV0dXJucyBgYWJzKHRoaXMpIHwgYWJzKG90aGVyKWAgd2l0aCBzaWduIHNldCBhY2NvcmRpbmcgdG8gW2lzTmVnYXRpdmVdLgogIF9CaWdJbnRJbXBsIF9hYnNPclNldFNpZ24oX0JpZ0ludEltcGwgb3RoZXIsIGJvb2wgaXNOZWdhdGl2ZSkgewogICAgdmFyIHVzZWQgPSBfdXNlZDsKICAgIHZhciBvdGhlclVzZWQgPSBvdGhlci5fdXNlZDsKICAgIHZhciByZXN1bHRVc2VkID0gX21heCh1c2VkLCBvdGhlclVzZWQpOwogICAgdmFyIGRpZ2l0cyA9IF9kaWdpdHM7CiAgICB2YXIgb3RoZXJEaWdpdHMgPSBvdGhlci5fZGlnaXRzOwogICAgdmFyIHJlc3VsdERpZ2l0cyA9IF9uZXdEaWdpdHMocmVzdWx0VXNlZCk7CiAgICB2YXIgbCwgbTsKICAgIGlmICh1c2VkIDwgb3RoZXJVc2VkKSB7CiAgICAgIGwgPSBvdGhlcjsKICAgICAgbSA9IHVzZWQ7CiAgICB9IGVsc2UgewogICAgICBsID0gdGhpczsKICAgICAgbSA9IG90aGVyVXNlZDsKICAgIH0KICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbTsgaSsrKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IGRpZ2l0c1tpXSB8IG90aGVyRGlnaXRzW2ldOwogICAgfQogICAgdmFyIGxEaWdpdHMgPSBsLl9kaWdpdHM7CiAgICBmb3IgKHZhciBpID0gbTsgaSA8IHJlc3VsdFVzZWQ7IGkrKykgewogICAgICByZXN1bHREaWdpdHNbaV0gPSBsRGlnaXRzW2ldOwogICAgfQogICAgcmV0dXJuIG5ldyBfQmlnSW50SW1wbC5fKGlzTmVnYXRpdmUsIHJlc3VsdFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgfQoKICAvLy8gUmV0dXJucyBgYWJzKHRoaXMpIF4gYWJzKG90aGVyKWAgd2l0aCBzaWduIHNldCBhY2NvcmRpbmcgdG8gW2lzTmVnYXRpdmVdLgogIF9CaWdJbnRJbXBsIF9hYnNYb3JTZXRTaWduKF9CaWdJbnRJbXBsIG90aGVyLCBib29sIGlzTmVnYXRpdmUpIHsKICAgIHZhciB1c2VkID0gX3VzZWQ7CiAgICB2YXIgb3RoZXJVc2VkID0gb3RoZXIuX3VzZWQ7CiAgICB2YXIgcmVzdWx0VXNlZCA9IF9tYXgodXNlZCwgb3RoZXJVc2VkKTsKICAgIHZhciBkaWdpdHMgPSBfZGlnaXRzOwogICAgdmFyIG90aGVyRGlnaXRzID0gb3RoZXIuX2RpZ2l0czsKICAgIHZhciByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKHJlc3VsdFVzZWQpOwogICAgdmFyIGwsIG07CiAgICBpZiAodXNlZCA8IG90aGVyVXNlZCkgewogICAgICBsID0gb3RoZXI7CiAgICAgIG0gPSB1c2VkOwogICAgfSBlbHNlIHsKICAgICAgbCA9IHRoaXM7CiAgICAgIG0gPSBvdGhlclVzZWQ7CiAgICB9CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG07IGkrKykgewogICAgICByZXN1bHREaWdpdHNbaV0gPSBkaWdpdHNbaV0gXiBvdGhlckRpZ2l0c1tpXTsKICAgIH0KICAgIHZhciBsRGlnaXRzID0gbC5fZGlnaXRzOwogICAgZm9yICh2YXIgaSA9IG07IGkgPCByZXN1bHRVc2VkOyBpKyspIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gbERpZ2l0c1tpXTsKICAgIH0KICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuXyhpc05lZ2F0aXZlLCByZXN1bHRVc2VkLCByZXN1bHREaWdpdHMpOwogIH0KCiAgLyoqCiAgICogQml0LXdpc2UgYW5kIG9wZXJhdG9yLgogICAqCiAgICogVHJlYXRpbmcgYm90aCBgdGhpc2AgYW5kIFtvdGhlcl0gYXMgc3VmZmljaWVudGx5IGxhcmdlIHR3bydzIGNvbXBvbmVudAogICAqIGludGVnZXJzLCB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggb25seSB0aGUgYml0cyBzZXQgdGhhdCBhcmUgc2V0IGluCiAgICogYm90aCBgdGhpc2AgYW5kIFtvdGhlcl0KICAgKgogICAqIE9mIGJvdGggb3BlcmFuZHMgYXJlIG5lZ2F0aXZlLCB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvdGhlcndpc2UKICAgKiB0aGUgcmVzdWx0IGlzIG5vbi1uZWdhdGl2ZS4KICAgKi8KICBfQmlnSW50SW1wbCBvcGVyYXRvciAmKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgaWYgKF9pc1plcm8gfHwgb3RoZXIuX2lzWmVybykgcmV0dXJuIHplcm87CiAgICBpZiAoX2lzTmVnYXRpdmUgPT0gb3RoZXIuX2lzTmVnYXRpdmUpIHsKICAgICAgaWYgKF9pc05lZ2F0aXZlKSB7CiAgICAgICAgLy8gKC10aGlzKSAmICgtb3RoZXIpID09IH4odGhpcy0xKSAmIH4ob3RoZXItMSkKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgPT0gfigodGhpcy0xKSB8IChvdGhlci0xKSkKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgPT0gLSgoKHRoaXMtMSkgfCAob3RoZXItMSkpICsgMSkKICAgICAgICBfQmlnSW50SW1wbCB0aGlzMSA9IF9hYnNTdWJTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgICAgICAgX0JpZ0ludEltcGwgb3RoZXIxID0gb3RoZXIuX2Fic1N1YlNldFNpZ24ob25lLCB0cnVlKTsKICAgICAgICAvLyBSZXN1bHQgY2Fubm90IGJlIHplcm8gaWYgdGhpcyBhbmQgb3RoZXIgYXJlIG5lZ2F0aXZlLgogICAgICAgIHJldHVybiB0aGlzMS5fYWJzT3JTZXRTaWduKG90aGVyMSwgdHJ1ZSkuX2Fic0FkZFNldFNpZ24ob25lLCB0cnVlKTsKICAgICAgfQogICAgICByZXR1cm4gX2Fic0FuZFNldFNpZ24ob3RoZXIsIGZhbHNlKTsKICAgIH0KICAgIC8vIF9pc05lZ2F0aXZlICE9IG90aGVyLl9pc05lZ2F0aXZlCiAgICB2YXIgcCwgbjsKICAgIGlmIChfaXNOZWdhdGl2ZSkgewogICAgICBwID0gb3RoZXI7CiAgICAgIG4gPSB0aGlzOwogICAgfSBlbHNlIHsKICAgICAgLy8gJiBpcyBzeW1tZXRyaWMuCiAgICAgIHAgPSB0aGlzOwogICAgICBuID0gb3RoZXI7CiAgICB9CiAgICAvLyBwICYgKC1uKSA9PSBwICYgfihuLTEpID09IHAgJn4gKG4tMSkKICAgIHZhciBuMSA9IG4uX2Fic1N1YlNldFNpZ24ob25lLCBmYWxzZSk7CiAgICByZXR1cm4gcC5fYWJzQW5kTm90U2V0U2lnbihuMSwgZmFsc2UpOwogIH0KCiAgLyoqCiAgICogQml0LXdpc2Ugb3Igb3BlcmF0b3IuCiAgICoKICAgKiBUcmVhdGluZyBib3RoIGB0aGlzYCBhbmQgW290aGVyXSBhcyBzdWZmaWNpZW50bHkgbGFyZ2UgdHdvJ3MgY29tcG9uZW50CiAgICogaW50ZWdlcnMsIHRoZSByZXN1bHQgaXMgYSBudW1iZXIgd2l0aCB0aGUgYml0cyBzZXQgdGhhdCBhcmUgc2V0IGluIGVpdGhlcgogICAqIG9mIGB0aGlzYCBhbmQgW290aGVyXQogICAqCiAgICogSWYgYm90aCBvcGVyYW5kcyBhcmUgbm9uLW5lZ2F0aXZlLCB0aGUgcmVzdWx0IGlzIG5vbi1uZWdhdGl2ZSwKICAgKiBvdGhlcndpc2UgdGhlIHJlc3VsdCB1cyBuZWdhdGl2ZS4KICAgKi8KICBfQmlnSW50SW1wbCBvcGVyYXRvciB8KEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgaWYgKF9pc1plcm8pIHJldHVybiBvdGhlcjsKICAgIGlmIChvdGhlci5faXNaZXJvKSByZXR1cm4gdGhpczsKICAgIGlmIChfaXNOZWdhdGl2ZSA9PSBvdGhlci5faXNOZWdhdGl2ZSkgewogICAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgICAvLyAoLXRoaXMpIHwgKC1vdGhlcikgPT0gfih0aGlzLTEpIHwgfihvdGhlci0xKQogICAgICAgIC8vICAgICAgICAgICAgICAgICAgICA9PSB+KCh0aGlzLTEpICYgKG90aGVyLTEpKQogICAgICAgIC8vICAgICAgICAgICAgICAgICAgICA9PSAtKCgodGhpcy0xKSAmIChvdGhlci0xKSkgKyAxKQogICAgICAgIHZhciB0aGlzMSA9IF9hYnNTdWJTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgICAgICAgdmFyIG90aGVyMSA9IG90aGVyLl9hYnNTdWJTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgICAgICAgLy8gUmVzdWx0IGNhbm5vdCBiZSB6ZXJvIGlmIHRoaXMgYW5kIGEgYXJlIG5lZ2F0aXZlLgogICAgICAgIHJldHVybiB0aGlzMS5fYWJzQW5kU2V0U2lnbihvdGhlcjEsIHRydWUpLl9hYnNBZGRTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIF9hYnNPclNldFNpZ24ob3RoZXIsIGZhbHNlKTsKICAgIH0KICAgIC8vIF9uZWcgIT0gYS5fbmVnCiAgICB2YXIgcCwgbjsKICAgIGlmIChfaXNOZWdhdGl2ZSkgewogICAgICBwID0gb3RoZXI7CiAgICAgIG4gPSB0aGlzOwogICAgfSBlbHNlIHsKICAgICAgLy8gfCBpcyBzeW1tZXRyaWMuCiAgICAgIHAgPSB0aGlzOwogICAgICBuID0gb3RoZXI7CiAgICB9CiAgICAvLyBwIHwgKC1uKSA9PSBwIHwgfihuLTEpID09IH4oKG4tMSkgJn4gcCkgPT0gLSh+KChuLTEpICZ+IHApICsgMSkKICAgIHZhciBuMSA9IG4uX2Fic1N1YlNldFNpZ24ob25lLCB0cnVlKTsKICAgIC8vIFJlc3VsdCBjYW5ub3QgYmUgemVybyBpZiBvbmx5IG9uZSBvZiB0aGlzIG9yIGEgaXMgbmVnYXRpdmUuCiAgICByZXR1cm4gbjEuX2Fic0FuZE5vdFNldFNpZ24ocCwgdHJ1ZSkuX2Fic0FkZFNldFNpZ24ob25lLCB0cnVlKTsKICB9CgogIC8qKgogICAqIEJpdC13aXNlIGV4Y2x1c2l2ZS1vciBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdIGFzIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQKICAgKiBpbnRlZ2VycywgdGhlIHJlc3VsdCBpcyBhIG51bWJlciB3aXRoIHRoZSBiaXRzIHNldCB0aGF0IGFyZSBzZXQgaW4gb25lLAogICAqIGJ1dCBub3QgYm90aCwgb2YgYHRoaXNgIGFuZCBbb3RoZXJdCiAgICoKICAgKiBJZiB0aGUgb3BlcmFuZHMgaGF2ZSB0aGUgc2FtZSBzaWduLCB0aGUgcmVzdWx0IGlzIG5vbi1uZWdhdGl2ZSwKICAgKiBvdGhlcndpc2UgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZS4KICAgKi8KICBfQmlnSW50SW1wbCBvcGVyYXRvciBeKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgaWYgKF9pc1plcm8pIHJldHVybiBvdGhlcjsKICAgIGlmIChvdGhlci5faXNaZXJvKSByZXR1cm4gdGhpczsKICAgIGlmIChfaXNOZWdhdGl2ZSA9PSBvdGhlci5faXNOZWdhdGl2ZSkgewogICAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgICAvLyAoLXRoaXMpIF4gKC1vdGhlcikgPT0gfih0aGlzLTEpIF4gfihvdGhlci0xKSA9PSAodGhpcy0xKSBeIChvdGhlci0xKQogICAgICAgIHZhciB0aGlzMSA9IF9hYnNTdWJTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgICAgICAgdmFyIG90aGVyMSA9IG90aGVyLl9hYnNTdWJTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgICAgICAgcmV0dXJuIHRoaXMxLl9hYnNYb3JTZXRTaWduKG90aGVyMSwgZmFsc2UpOwogICAgICB9CiAgICAgIHJldHVybiBfYWJzWG9yU2V0U2lnbihvdGhlciwgZmFsc2UpOwogICAgfQogICAgLy8gX2lzTmVnYXRpdmUgIT0gYS5faXNOZWdhdGl2ZQogICAgdmFyIHAsIG47CiAgICBpZiAoX2lzTmVnYXRpdmUpIHsKICAgICAgcCA9IG90aGVyOwogICAgICBuID0gdGhpczsKICAgIH0gZWxzZSB7CiAgICAgIC8vIF4gaXMgc3ltbWV0cmljLgogICAgICBwID0gdGhpczsKICAgICAgbiA9IG90aGVyOwogICAgfQogICAgLy8gcCBeICgtbikgPT0gcCBeIH4obi0xKSA9PSB+KHAgXiAobi0xKSkgPT0gLSgocCBeIChuLTEpKSArIDEpCiAgICB2YXIgbjEgPSBuLl9hYnNTdWJTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgICAvLyBSZXN1bHQgY2Fubm90IGJlIHplcm8gaWYgb25seSBvbmUgb2YgdGhpcyBvciBhIGlzIG5lZ2F0aXZlLgogICAgcmV0dXJuIHAuX2Fic1hvclNldFNpZ24objEsIHRydWUpLl9hYnNBZGRTZXRTaWduKG9uZSwgdHJ1ZSk7CiAgfQoKICAvKioKICAgKiBUaGUgYml0LXdpc2UgbmVnYXRlIG9wZXJhdG9yLgogICAqCiAgICogVHJlYXRpbmcgYHRoaXNgIGFzIGEgc3VmZmljaWVudGx5IGxhcmdlIHR3bydzIGNvbXBvbmVudCBpbnRlZ2VyLAogICAqIHRoZSByZXN1bHQgaXMgYSBudW1iZXIgd2l0aCB0aGUgb3Bwb3NpdGUgYml0cyBzZXQuCiAgICoKICAgKiBUaGlzIG1hcHMgYW55IGludGVnZXIgYHhgIHRvIGAteCAtIDFgLgogICAqLwogIF9CaWdJbnRJbXBsIG9wZXJhdG9yIH4oKSB7CiAgICBpZiAoX2lzWmVybykgcmV0dXJuIF9taW51c09uZTsKICAgIGlmIChfaXNOZWdhdGl2ZSkgewogICAgICAvLyB+KC10aGlzKSA9PSB+KH4odGhpcy0xKSkgPT0gdGhpcy0xCiAgICAgIHJldHVybiBfYWJzU3ViU2V0U2lnbihvbmUsIGZhbHNlKTsKICAgIH0KICAgIC8vIH50aGlzID09IC10aGlzLTEgPT0gLSh0aGlzKzEpCiAgICAvLyBSZXN1bHQgY2Fubm90IGJlIHplcm8gaWYgdGhpcyBpcyBwb3NpdGl2ZS4KICAgIHJldHVybiBfYWJzQWRkU2V0U2lnbihvbmUsIHRydWUpOwogIH0KCiAgLy8vIEFkZGl0aW9uIG9wZXJhdG9yLgogIF9CaWdJbnRJbXBsIG9wZXJhdG9yICsoQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICBpZiAoX2lzWmVybykgcmV0dXJuIG90aGVyOwogICAgaWYgKG90aGVyLl9pc1plcm8pIHJldHVybiB0aGlzOwogICAgdmFyIGlzTmVnYXRpdmUgPSBfaXNOZWdhdGl2ZTsKICAgIGlmIChpc05lZ2F0aXZlID09IG90aGVyLl9pc05lZ2F0aXZlKSB7CiAgICAgIC8vIHRoaXMgKyBvdGhlciA9PSB0aGlzICsgb3RoZXIKICAgICAgLy8gKC10aGlzKSArICgtb3RoZXIpID09IC0odGhpcyArIG90aGVyKQogICAgICByZXR1cm4gX2Fic0FkZFNldFNpZ24ob3RoZXIsIGlzTmVnYXRpdmUpOwogICAgfQogICAgLy8gdGhpcyArICgtb3RoZXIpID09IHRoaXMgLSBvdGhlciA9PSAtKHRoaXMgLSBvdGhlcikKICAgIC8vICgtdGhpcykgKyBvdGhlciA9PSBvdGhlciAtIHRoaXMgPT0gLSh0aGlzIC0gb3RoZXIpCiAgICBpZiAoX2Fic0NvbXBhcmUob3RoZXIpID49IDApIHsKICAgICAgcmV0dXJuIF9hYnNTdWJTZXRTaWduKG90aGVyLCBpc05lZ2F0aXZlKTsKICAgIH0KICAgIHJldHVybiBvdGhlci5fYWJzU3ViU2V0U2lnbih0aGlzLCAhaXNOZWdhdGl2ZSk7CiAgfQoKICAvLy8gU3VidHJhY3Rpb24gb3BlcmF0b3IuCiAgX0JpZ0ludEltcGwgb3BlcmF0b3IgLShCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIGlmIChfaXNaZXJvKSByZXR1cm4gLW90aGVyOwogICAgaWYgKG90aGVyLl9pc1plcm8pIHJldHVybiB0aGlzOwogICAgdmFyIGlzTmVnYXRpdmUgPSBfaXNOZWdhdGl2ZTsKICAgIGlmIChpc05lZ2F0aXZlICE9IG90aGVyLl9pc05lZ2F0aXZlKSB7CiAgICAgIC8vIHRoaXMgLSAoLW90aGVyKSA9PSB0aGlzICsgb3RoZXIKICAgICAgLy8gKC10aGlzKSAtIG90aGVyID09IC0odGhpcyArIG90aGVyKQogICAgICByZXR1cm4gX2Fic0FkZFNldFNpZ24ob3RoZXIsIGlzTmVnYXRpdmUpOwogICAgfQogICAgLy8gdGhpcyAtIG90aGVyID09IHRoaXMgLSBhID09IC0odGhpcyAtIG90aGVyKQogICAgLy8gKC10aGlzKSAtICgtb3RoZXIpID09IG90aGVyIC0gdGhpcyA9PSAtKHRoaXMgLSBvdGhlcikKICAgIGlmIChfYWJzQ29tcGFyZShvdGhlcikgPj0gMCkgewogICAgICByZXR1cm4gX2Fic1N1YlNldFNpZ24ob3RoZXIsIGlzTmVnYXRpdmUpOwogICAgfQogICAgcmV0dXJuIG90aGVyLl9hYnNTdWJTZXRTaWduKHRoaXMsICFpc05lZ2F0aXZlKTsKICB9CgogIC8vLyBNdWx0aXBsaWVzIGB4RGlnaXRzW3hJbmRleF1gIHdpdGggYG11bHRpcGxpY2FuZERpZ2l0c2AgYW5kIGFkZHMgdGhlIHJlc3VsdAogIC8vLyB0byBgYWNjdW11bGF0b3JEaWdpdHNgLgogIC8vLwogIC8vLyBUaGUgYG11bHRpcGxpY2FuZERpZ2l0c2AgaW4gdGhlIHJhbmdlIGBpYCB0byBgaWArYG5gLTEgYXJlIHRoZQogIC8vLyBtdWx0aXBsaWNhbmQgZGlnaXRzLgogIC8vLwogIC8vLyBUaGUgYGFjY3VtdWxhdG9yRGlnaXRzYCBpbiB0aGUgcmFuZ2UgYGpgIHRvIGBqYCtgbmAtMSBhcmUgdGhlIGFjY3VtdWxhdG9yCiAgLy8vIGRpZ2l0cy4KICAvLy8KICAvLy8gQ29uY3JldGVseToKICAvLy8gYGFjY3VtdWxhdG9yRGlnaXRzW2ouLmorbl0gKz0geERpZ2l0c1t4SW5kZXhdICogbV9kaWdpdHNbaS4uaStuLTFdYC4KICAvLy8gUmV0dXJucyAxLgogIC8vLwogIC8vLyBOb3RlOiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnRyaW5zaWZpZWQuIEludHJpbnNpY3Mgb24gNjQtYml0IHBsYXRmb3JtcwogIC8vLyBwcm9jZXNzIGRpZ2l0IHBhaXJzIGF0IGV2ZW4gaW5kaWNlcyBhbmQgcmV0dXJucyAyLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIHN0YXRpYyBpbnQgX211bEFkZCgKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLAogICAgICBpbnQgeEluZGV4LAogICAgICBVaW50MzJMaXN0IG11bHRpcGxpY2FuZERpZ2l0cywKICAgICAgaW50IGksCiAgICAgIFVpbnQzMkxpc3QgYWNjdW11bGF0b3JEaWdpdHMsCiAgICAgIGludCBqLAogICAgICBpbnQgbikgewogICAgaW50IHggPSB4RGlnaXRzW3hJbmRleF07CiAgICBpZiAoeCA9PSAwKSB7CiAgICAgIC8vIE5vLW9wIGlmIHggaXMgMC4KICAgICAgcmV0dXJuIDE7CiAgICB9CiAgICBpbnQgY2FycnkgPSAwOwogICAgaW50IHhsID0geCAmIF9oYWxmRGlnaXRNYXNrOwogICAgaW50IHhoID0geCA+PiBfaGFsZkRpZ2l0Qml0czsKICAgIHdoaWxlICgtLW4gPj0gMCkgewogICAgICBpbnQgbWwgPSBtdWx0aXBsaWNhbmREaWdpdHNbaV0gJiBfaGFsZkRpZ2l0TWFzazsKICAgICAgaW50IG1oID0gbXVsdGlwbGljYW5kRGlnaXRzW2krK10gPj4gX2hhbGZEaWdpdEJpdHM7CiAgICAgIGludCBwaCA9IHhoICogbWwgKyBtaCAqIHhsOwogICAgICBpbnQgcGwgPSB4bCAqIG1sICsKICAgICAgICAgICgocGggJiBfaGFsZkRpZ2l0TWFzaykgPDwgX2hhbGZEaWdpdEJpdHMpICsKICAgICAgICAgIGFjY3VtdWxhdG9yRGlnaXRzW2pdICsKICAgICAgICAgIGNhcnJ5OwogICAgICBjYXJyeSA9IChwbCA+PiBfZGlnaXRCaXRzKSArIChwaCA+PiBfaGFsZkRpZ2l0Qml0cykgKyB4aCAqIG1oOwogICAgICBhY2N1bXVsYXRvckRpZ2l0c1tqKytdID0gcGwgJiBfZGlnaXRNYXNrOwogICAgfQogICAgd2hpbGUgKGNhcnJ5ICE9IDApIHsKICAgICAgaW50IGwgPSBhY2N1bXVsYXRvckRpZ2l0c1tqXSArIGNhcnJ5OwogICAgICBjYXJyeSA9IGwgPj4gX2RpZ2l0Qml0czsKICAgICAgYWNjdW11bGF0b3JEaWdpdHNbaisrXSA9IGwgJiBfZGlnaXRNYXNrOwogICAgfQogICAgcmV0dXJuIDE7CiAgfQoKICAvLy8gTXVsdGlwbGllcyBgeERpZ2l0c1tpXWAgd2l0aCBgeERpZ2l0c2AgYW5kIGFkZHMgdGhlIHJlc3VsdCB0bwogIC8vLyBgYWNjdW11bGF0b3JEaWdpdHNgLgogIC8vLwogIC8vLyBUaGUgYHhEaWdpdHNgIGluIHRoZSByYW5nZSBgaWAgdG8gYHVzZWRgLTEgYXJlIHRoZSBtdWx0aXBsaWNhbmQgZGlnaXRzLgogIC8vLwogIC8vLyBUaGUgYGFjY3VtdWxhdG9yRGlnaXRzYCBpbiB0aGUgcmFuZ2UgMipgaWAgdG8gYGlgK2B1c2VkYC0xIGFyZSB0aGUKICAvLy8gYWNjdW11bGF0b3IgZGlnaXRzLgogIC8vLwogIC8vLyBDb25jcmV0ZWx5OgogIC8vLyBgYWNjdW11bGF0b3JEaWdpdHNbMippLi5pK3VzZWQtMV0gKz0geERpZ2l0c1tpXSp4RGlnaXRzW2ldICsKICAvLy8gMip4RGlnaXRzW2ldKnhEaWdpdHNbaSsxLi51c2VkLTFdYC4KICAvLy8gUmV0dXJucyAxLgogIC8vLwogIC8vLyBOb3RlOiBUaGlzIGZ1bmN0aW9uIG1heSBiZSBpbnRyaW5zaWZpZWQuIEludHJpbnNpY3Mgb24gNjQtYml0IHBsYXRmb3JtcwogIC8vLyBwcm9jZXNzIGRpZ2l0IHBhaXJzIGF0IGV2ZW4gaW5kaWNlcyBhbmQgcmV0dXJucyAyLgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIHN0YXRpYyBpbnQgX3NxckFkZCgKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgaSwgVWludDMyTGlzdCBhY2N1bHVtYXRvckRpZ2l0cywgaW50IHVzZWQpIHsKICAgIGludCB4ID0geERpZ2l0c1tpXTsKICAgIGlmICh4ID09IDApIHJldHVybiAxOwogICAgaW50IGogPSAyICogaTsKICAgIGludCBjYXJyeSA9IDA7CiAgICBpbnQgeGwgPSB4ICYgX2hhbGZEaWdpdE1hc2s7CiAgICBpbnQgeGggPSB4ID4+IF9oYWxmRGlnaXRCaXRzOwogICAgaW50IHBoID0gMiAqIHhoICogeGw7CiAgICBpbnQgcGwgPSB4bCAqIHhsICsKICAgICAgICAoKHBoICYgX2hhbGZEaWdpdE1hc2spIDw8IF9oYWxmRGlnaXRCaXRzKSArCiAgICAgICAgYWNjdWx1bWF0b3JEaWdpdHNbal07CiAgICBjYXJyeSA9IChwbCA+PiBfZGlnaXRCaXRzKSArIChwaCA+PiBfaGFsZkRpZ2l0Qml0cykgKyB4aCAqIHhoOwogICAgYWNjdWx1bWF0b3JEaWdpdHNbal0gPSBwbCAmIF9kaWdpdE1hc2s7CiAgICB4IDw8PSAxOwogICAgeGwgPSB4ICYgX2hhbGZEaWdpdE1hc2s7CiAgICB4aCA9IHggPj4gX2hhbGZEaWdpdEJpdHM7CiAgICBpbnQgbiA9IHVzZWQgLSBpIC0gMTsKICAgIGludCBrID0gaSArIDE7CiAgICBqKys7CiAgICB3aGlsZSAoLS1uID49IDApIHsKICAgICAgaW50IGwgPSB4RGlnaXRzW2tdICYgX2hhbGZEaWdpdE1hc2s7CiAgICAgIGludCBoID0geERpZ2l0c1trKytdID4+IF9oYWxmRGlnaXRCaXRzOwogICAgICBpbnQgcGggPSB4aCAqIGwgKyBoICogeGw7CiAgICAgIGludCBwbCA9IHhsICogbCArCiAgICAgICAgICAoKHBoICYgX2hhbGZEaWdpdE1hc2spIDw8IF9oYWxmRGlnaXRCaXRzKSArCiAgICAgICAgICBhY2N1bHVtYXRvckRpZ2l0c1tqXSArCiAgICAgICAgICBjYXJyeTsKICAgICAgY2FycnkgPSAocGwgPj4gX2RpZ2l0Qml0cykgKyAocGggPj4gX2hhbGZEaWdpdEJpdHMpICsgeGggKiBoOwogICAgICBhY2N1bHVtYXRvckRpZ2l0c1tqKytdID0gcGwgJiBfZGlnaXRNYXNrOwogICAgfQogICAgY2FycnkgKz0gYWNjdWx1bWF0b3JEaWdpdHNbaSArIHVzZWRdOwogICAgaWYgKGNhcnJ5ID49IF9kaWdpdEJhc2UpIHsKICAgICAgYWNjdWx1bWF0b3JEaWdpdHNbaSArIHVzZWRdID0gY2FycnkgLSBfZGlnaXRCYXNlOwogICAgICBhY2N1bHVtYXRvckRpZ2l0c1tpICsgdXNlZCArIDFdID0gMTsKICAgIH0gZWxzZSB7CiAgICAgIGFjY3VsdW1hdG9yRGlnaXRzW2kgKyB1c2VkXSA9IGNhcnJ5OwogICAgfQogICAgcmV0dXJuIDE7CiAgfQoKICAvLy8gTXVsdGlwbGljYXRpb24gb3BlcmF0b3IuCiAgX0JpZ0ludEltcGwgb3BlcmF0b3IgKihCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBvdGhlciA9IGJpZ0ludDsKICAgIHZhciB1c2VkID0gX3VzZWQ7CiAgICB2YXIgb3RoZXJVc2VkID0gb3RoZXIuX3VzZWQ7CiAgICBpZiAodXNlZCA9PSAwIHx8IG90aGVyVXNlZCA9PSAwKSB7CiAgICAgIHJldHVybiB6ZXJvOwogICAgfQogICAgdmFyIHJlc3VsdFVzZWQgPSB1c2VkICsgb3RoZXJVc2VkOwogICAgdmFyIGRpZ2l0cyA9IF9kaWdpdHM7CiAgICB2YXIgb3RoZXJEaWdpdHMgPSBvdGhlci5fZGlnaXRzOwogICAgdmFyIHJlc3VsdERpZ2l0cyA9IF9uZXdEaWdpdHMocmVzdWx0VXNlZCk7CiAgICB2YXIgaSA9IDA7CiAgICB3aGlsZSAoaSA8IG90aGVyVXNlZCkgewogICAgICBpICs9IF9tdWxBZGQob3RoZXJEaWdpdHMsIGksIGRpZ2l0cywgMCwgcmVzdWx0RGlnaXRzLCBpLCB1c2VkKTsKICAgIH0KICAgIHJldHVybiBuZXcgX0JpZ0ludEltcGwuXygKICAgICAgICBfaXNOZWdhdGl2ZSAhPSBvdGhlci5faXNOZWdhdGl2ZSwgcmVzdWx0VXNlZCwgcmVzdWx0RGlnaXRzKTsKICB9CgogIC8vIHJlc3VsdERpZ2l0c1swLi5yZXN1bHRVc2VkLTFdID0KICAvLyAgICAgeERpZ2l0c1swLi54VXNlZC0xXSpvdGhlckRpZ2l0c1swLi5vdGhlclVzZWQtMV0uCiAgLy8gUmV0dXJucyByZXN1bHRVc2VkID0geFVzZWQgKyBvdGhlclVzZWQuCiAgc3RhdGljIGludCBfbXVsRGlnaXRzKFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkLCBVaW50MzJMaXN0IG90aGVyRGlnaXRzLAogICAgICBpbnQgb3RoZXJVc2VkLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgdmFyIHJlc3VsdFVzZWQgPSB4VXNlZCArIG90aGVyVXNlZDsKICAgIHZhciBpID0gcmVzdWx0VXNlZCArIChyZXN1bHRVc2VkICYgMSk7CiAgICBhc3NlcnQocmVzdWx0RGlnaXRzLmxlbmd0aCA+PSBpKTsKICAgIHdoaWxlICgtLWkgPj0gMCkgewogICAgICByZXN1bHREaWdpdHNbaV0gPSAwOwogICAgfQogICAgaSA9IDA7CiAgICB3aGlsZSAoaSA8IG90aGVyVXNlZCkgewogICAgICBpICs9IF9tdWxBZGQob3RoZXJEaWdpdHMsIGksIHhEaWdpdHMsIDAsIHJlc3VsdERpZ2l0cywgaSwgeFVzZWQpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdFVzZWQ7CiAgfQoKICAvLyByZXN1bHREaWdpdHNbMC4ucmVzdWx0VXNlZC0xXSA9IHhEaWdpdHNbMC4ueFVzZWQtMV1eMi4KICAvLyBSZXR1cm5zIHJlc3VsdFVzZWQgPSAyKnhVc2VkLgogIHN0YXRpYyBpbnQgX3NxckRpZ2l0cygKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICB2YXIgcmVzdWx0VXNlZCA9IDIgKiB4VXNlZDsKICAgIGFzc2VydChyZXN1bHREaWdpdHMubGVuZ3RoID49IHJlc3VsdFVzZWQpOwogICAgLy8gU2luY2UgcmVzdWx0VXNlZCBpcyBldmVuLCBubyBuZWVkIGZvciBhIGxlYWRpbmcgemVybyBmb3IKICAgIC8vIDY0LWJpdCBwcm9jZXNzaW5nLgogICAgdmFyIGkgPSByZXN1bHRVc2VkOwogICAgd2hpbGUgKC0taSA+PSAwKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IDA7CiAgICB9CiAgICBpID0gMDsKICAgIHdoaWxlIChpIDwgeFVzZWQgLSAxKSB7CiAgICAgIGkgKz0gX3NxckFkZCh4RGlnaXRzLCBpLCByZXN1bHREaWdpdHMsIHhVc2VkKTsKICAgIH0KICAgIC8vIFRoZSBsYXN0IHN0ZXAgaXMgYWxyZWFkeSBkb25lIGlmIGRpZ2l0IHBhaXJzIHdlcmUgcHJvY2Vzc2VkIGFib3ZlLgogICAgaWYgKGkgPCB4VXNlZCkgewogICAgICBfbXVsQWRkKHhEaWdpdHMsIGksIHhEaWdpdHMsIGksIHJlc3VsdERpZ2l0cywgMiAqIGksIDEpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdFVzZWQ7CiAgfQoKICAvLyBJbmRpY2VzIG9mIHRoZSBhcmd1bWVudHMgb2YgX2VzdGltYXRlUXVvdGllbnREaWdpdC4KICAvLyBGb3IgNjQtYml0IHByb2Nlc3NpbmcgYnkgaW50cmluc2ljcyBvbiA2NC1iaXQgcGxhdGZvcm1zLCB0aGUgdG9wIGRpZ2l0IHBhaXIKICAvLyBvZiB0aGUgZGl2aXNvciBpcyBwcm92aWRlZCBpbiB0aGUgYXJncyBhcnJheSwgYW5kIGEgNjQtYml0IGVzdGltYXRlZAogIC8vIHF1b3RpZW50IGlzIHJldHVybmVkLiBIb3dldmVyLCBvbiAzMi1iaXQgcGxhdGZvcm1zLCB0aGUgbG93IDMyLWJpdCBkaWdpdCBpcwogIC8vIGlnbm9yZWQgYW5kIG9ubHkgb25lIDMyLWJpdCBkaWdpdCBpcyByZXR1cm5lZCBhcyB0aGUgZXN0aW1hdGVkIHF1b3RpZW50LgogIHN0YXRpYyBjb25zdCBpbnQgX2Rpdmlzb3JMb3dUb3BEaWdpdCA9IDA7IC8vIExvdyBkaWdpdCBvZiB0b3AgcGFpciBvZiBkaXZpc29yLgogIHN0YXRpYyBjb25zdCBpbnQgX2Rpdmlzb3JUb3BEaWdpdCA9IDE7IC8vIFRvcCBkaWdpdCBvZiBkaXZpc29yLgogIHN0YXRpYyBjb25zdCBpbnQgX3F1b3RpZW50RGlnaXQgPSAyOyAvLyBFc3RpbWF0ZWQgcXVvdGllbnQuCiAgc3RhdGljIGNvbnN0IGludCBfcXVvdGllbnRIaWdoRGlnaXQgPSAzOyAvLyBIaWdoIGRpZ2l0IG9mIGVzdGltYXRlZCBxdW90aWVudC4KCiAgLy8vIEVzdGltYXRlIGBhcmdzW19xdW90aWVudERpZ2l0XSA9IGRpZ2l0c1tpLTEuLmldIH4vIGFyZ3NbX2Rpdmlzb3JUb3BEaWdpdF1gCiAgLy8vIFJldHVybnMgMS4KICAvLy8KICAvLy8gTm90ZTogVGhpcyBmdW5jdGlvbiBtYXkgYmUgaW50cmluc2lmaWVkLiBJbnRyaW5zaWNzIG9uIDY0LWJpdCBwbGF0Zm9ybXMKICAvLy8gcHJvY2VzcyBhIGRpZ2l0IHBhaXIgKGkgYWx3YXlzIG9kZCk6CiAgLy8vIEVzdGltYXRlIGBhcmdzW19xdW90aWVudERpZ2l0Li5fcXVvdGllbnRIaWdoRGlnaXRdID0gZGlnaXRzW2ktMy4uaV0gfi8KICAvLy8gYXJnc1tfZGl2aXNvckxvd1RvcERpZ2l0Li5fZGl2aXNvclRvcERpZ2l0XWAuCiAgLy8vIFJldHVybnMgMi4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBzdGF0aWMgaW50IF9lc3RpbWF0ZVF1b3RpZW50RGlnaXQoVWludDMyTGlzdCBhcmdzLCBVaW50MzJMaXN0IGRpZ2l0cywgaW50IGkpIHsKICAgIC8vIFZlcmlmeSB0aGF0IGRpZ2l0IHBhaXJzIGFyZSBhY2Nlc3NpYmxlIGZvciA2NC1iaXQgcHJvY2Vzc2luZy4KICAgIGFzc2VydChkaWdpdHMubGVuZ3RoID49IDQpOwogICAgaWYgKGRpZ2l0c1tpXSA9PSBhcmdzW19kaXZpc29yVG9wRGlnaXRdKSB7CiAgICAgIGFyZ3NbX3F1b3RpZW50RGlnaXRdID0gX2RpZ2l0TWFzazsKICAgIH0gZWxzZSB7CiAgICAgIC8vIENob3Agb2ZmIG9uZSBiaXQsIHNpbmNlIGEgTWludCBjYW5ub3QgaG9sZCAyIGRpZ2l0cy4KICAgICAgdmFyIHF1b3RpZW50RGlnaXQgPQogICAgICAgICAgKChkaWdpdHNbaV0gPDwgKF9kaWdpdEJpdHMgLSAxKSkgfCAoZGlnaXRzW2kgLSAxXSA+PiAxKSkgfi8KICAgICAgICAgICAgICAoYXJnc1tfZGl2aXNvclRvcERpZ2l0XSA+PiAxKTsKICAgICAgaWYgKHF1b3RpZW50RGlnaXQgPiBfZGlnaXRNYXNrKSB7CiAgICAgICAgYXJnc1tfcXVvdGllbnREaWdpdF0gPSBfZGlnaXRNYXNrOwogICAgICB9IGVsc2UgewogICAgICAgIGFyZ3NbX3F1b3RpZW50RGlnaXRdID0gcXVvdGllbnREaWdpdDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIDE7CiAgfQoKICAvLy8gUmV0dXJucyBgdHJ1bmModGhpcyAvIG90aGVyKWAsIHdpdGggYG90aGVyICE9IDBgLgogIF9CaWdJbnRJbXBsIF9kaXYoQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICBhc3NlcnQob3RoZXIuX3VzZWQgPiAwKTsKICAgIGlmIChfdXNlZCA8IG90aGVyLl91c2VkKSB7CiAgICAgIHJldHVybiB6ZXJvOwogICAgfQogICAgX2RpdlJlbShvdGhlcik7CiAgICAvLyBSZXR1cm4gcXVvdGllbnQsIGkuZS4KICAgIC8vIF9sYXN0UXVvUmVtX2RpZ2l0c1tfbGFzdFJlbV91c2VkLi5fbGFzdFF1b1JlbV91c2VkLTFdIHdpdGggcHJvcGVyIHNpZ24uCiAgICB2YXIgbGFzdFF1b191c2VkID0gX2xhc3RRdW9SZW1Vc2VkIC0gX2xhc3RSZW1Vc2VkOwogICAgdmFyIHF1b19kaWdpdHMgPSBfY2xvbmVEaWdpdHMoCiAgICAgICAgX2xhc3RRdW9SZW1EaWdpdHMsIF9sYXN0UmVtVXNlZCwgX2xhc3RRdW9SZW1Vc2VkLCBsYXN0UXVvX3VzZWQpOwogICAgdmFyIHF1byA9IG5ldyBfQmlnSW50SW1wbC5fKGZhbHNlLCBsYXN0UXVvX3VzZWQsIHF1b19kaWdpdHMpOwogICAgaWYgKChfaXNOZWdhdGl2ZSAhPSBvdGhlci5faXNOZWdhdGl2ZSkgJiYgKHF1by5fdXNlZCA+IDApKSB7CiAgICAgIHF1byA9IC1xdW87CiAgICB9CiAgICByZXR1cm4gcXVvOwogIH0KCiAgLy8vIFJldHVybnMgYHRoaXMgLSBvdGhlciAqIHRydW5jKHRoaXMgLyBvdGhlcilgLCB3aXRoIGBvdGhlciAhPSAwYC4KICBfQmlnSW50SW1wbCBfcmVtKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgYXNzZXJ0KG90aGVyLl91c2VkID4gMCk7CiAgICBpZiAoX3VzZWQgPCBvdGhlci5fdXNlZCkgewogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIF9kaXZSZW0ob3RoZXIpOwogICAgLy8gUmV0dXJuIHJlbWFpbmRlciwgaS5lLgogICAgLy8gZGVub3JtYWxpemVkIF9sYXN0UXVvUmVtX2RpZ2l0c1swLi5fbGFzdFJlbV91c2VkLTFdIHdpdGggcHJvcGVyIHNpZ24uCiAgICB2YXIgcmVtRGlnaXRzID0KICAgICAgICBfY2xvbmVEaWdpdHMoX2xhc3RRdW9SZW1EaWdpdHMsIDAsIF9sYXN0UmVtVXNlZCwgX2xhc3RSZW1Vc2VkKTsKICAgIHZhciByZW0gPSBuZXcgX0JpZ0ludEltcGwuXyhmYWxzZSwgX2xhc3RSZW1Vc2VkLCByZW1EaWdpdHMpOwogICAgaWYgKF9sYXN0UmVtX25zaCA+IDApIHsKICAgICAgcmVtID0gcmVtID4+IF9sYXN0UmVtX25zaDsgLy8gRGVub3JtYWxpemUgcmVtYWluZGVyLgogICAgfQogICAgaWYgKF9pc05lZ2F0aXZlICYmIChyZW0uX3VzZWQgPiAwKSkgewogICAgICByZW0gPSAtcmVtOwogICAgfQogICAgcmV0dXJuIHJlbTsKICB9CgogIC8vLyBDb21wdXRlcyB0aGlzIH4vIG90aGVyIGFuZCB0aGlzLnJlbWFpbmRlcihvdGhlcikuCiAgLy8vCiAgLy8vIFN0b3JlcyB0aGUgcmVzdWx0IGluIFtfbGFzdFF1b1JlbURpZ2l0c10sIFtfbGFzdFF1b1JlbVVzZWRdIGFuZAogIC8vLyBbX2xhc3RSZW1Vc2VkXS4gVGhlIFtfbGFzdFF1b1JlbURpZ2l0c10gY29udGFpbnMgdGhlIGRpZ2l0cyBvZiAqYm90aCosIHRoZQogIC8vLyBxdW90aWVudCBhbmQgdGhlIHJlbWFpbmRlci4KICAvLy8KICAvLy8gQ2FjaGVzIHRoZSBpbnB1dCB0byBhdm9pZCBkb2luZyB0aGUgd29yayBhZ2FpbiB3aGVuIHVzZXJzIHdyaXRlCiAgLy8vIGBhIH4vIGJgIGZvbGxvd2VkIGJ5IGEgYGEgJSBiYC4KICB2b2lkIF9kaXZSZW0oX0JpZ0ludEltcGwgb3RoZXIpIHsKICAgIC8vIENoZWNrIGlmIHJlc3VsdCBpcyBhbHJlYWR5IGNhY2hlZC4KICAgIGlmICgodGhpcy5fdXNlZCA9PSBfbGFzdERpdmlkZW5kVXNlZCkgJiYKICAgICAgICAob3RoZXIuX3VzZWQgPT0gX2xhc3REaXZpc29yVXNlZCkgJiYKICAgICAgICBpZGVudGljYWwodGhpcy5fZGlnaXRzLCBfbGFzdERpdmlkZW5kRGlnaXRzKSAmJgogICAgICAgIGlkZW50aWNhbChvdGhlci5fZGlnaXRzLCBfbGFzdERpdmlzb3JEaWdpdHMpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGFzc2VydChfdXNlZCA+PSBvdGhlci5fdXNlZCk7CgogICAgdmFyIG5zaCA9IF9kaWdpdEJpdHMgLSBvdGhlci5fZGlnaXRzW290aGVyLl91c2VkIC0gMV0uYml0TGVuZ3RoOwogICAgLy8gRm9yIDY0LWJpdCBwcm9jZXNzaW5nLCBtYWtlIHN1cmUgb3RoZXIgaGFzIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0cy4KICAgIGlmIChvdGhlci5fdXNlZC5pc09kZCkgewogICAgICBuc2ggKz0gX2RpZ2l0Qml0czsKICAgIH0KICAgIC8vIENvbmNhdGVuYXRlZCBwb3NpdGl2ZSBxdW90aWVudCBhbmQgbm9ybWFsaXplZCBwb3NpdGl2ZSByZW1haW5kZXIuCiAgICAvLyBUaGUgcmVzdWx0RGlnaXRzIGNhbiBoYXZlIGF0IG1vc3Qgb25lIG1vcmUgZGlnaXQgdGhhbiB0aGUgZGl2aWRlbmQuCiAgICBVaW50MzJMaXN0IHJlc3VsdERpZ2l0czsKICAgIGludCByZXN1bHRVc2VkOwogICAgLy8gTm9ybWFsaXplZCBwb3NpdGl2ZSBkaXZpc29yIChyZWZlcnJlZCB0byBhcyAneScpLgogICAgLy8gVGhlIG5vcm1hbGl6ZWQgZGl2aXNvciBoYXMgdGhlIG1vc3Qtc2lnbmlmaWNhbnQgYml0IG9mIGl0cyBtb3N0CiAgICAvLyBzaWduaWZpY2FudCBkaWdpdCBzZXQuCiAgICAvLyBUaGlzIG1ha2VzIGVzdGltYXRpbmcgdGhlIHF1b3RpZW50IGVhc2llci4KICAgIFVpbnQzMkxpc3QgeURpZ2l0czsKICAgIGludCB5VXNlZDsKICAgIGlmIChuc2ggPiAwKSB7CiAgICAgIC8vIEV4dHJhIGRpZ2l0cyBmb3Igbm9ybWFsaXphdGlvbiwgYWxzbyB1c2VkIGZvciBwb3NzaWJsZSBfbXVsQWRkIGNhcnJ5LgogICAgICB2YXIgbnVtRXh0cmFEaWdpdHMgPSAobnNoICsgX2RpZ2l0Qml0cyAtIDEpIH4vIF9kaWdpdEJpdHMgKyAxOwogICAgICB5RGlnaXRzID0gX25ld0RpZ2l0cyhvdGhlci5fdXNlZCArIG51bUV4dHJhRGlnaXRzKTsKICAgICAgeVVzZWQgPSBfbFNoaWZ0RGlnaXRzKG90aGVyLl9kaWdpdHMsIG90aGVyLl91c2VkLCBuc2gsIHlEaWdpdHMpOwogICAgICByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKF91c2VkICsgbnVtRXh0cmFEaWdpdHMpOwogICAgICByZXN1bHRVc2VkID0gX2xTaGlmdERpZ2l0cyhfZGlnaXRzLCBfdXNlZCwgbnNoLCByZXN1bHREaWdpdHMpOwogICAgfSBlbHNlIHsKICAgICAgeURpZ2l0cyA9IG90aGVyLl9kaWdpdHM7CiAgICAgIHlVc2VkID0gb3RoZXIuX3VzZWQ7CiAgICAgIC8vIEV4dHJhIGRpZ2l0IHRvIGhvbGQgcG9zc2libGUgX211bEFkZCBjYXJyeS4KICAgICAgcmVzdWx0RGlnaXRzID0gX2Nsb25lRGlnaXRzKF9kaWdpdHMsIDAsIF91c2VkLCBfdXNlZCArIDEpOwogICAgICByZXN1bHRVc2VkID0gX3VzZWQ7CiAgICB9CiAgICBVaW50MzJMaXN0IGFyZ3MgPSBfbmV3RGlnaXRzKDQpOwogICAgYXJnc1tfZGl2aXNvckxvd1RvcERpZ2l0XSA9IHlEaWdpdHNbeVVzZWQgLSAyXTsKICAgIGFyZ3NbX2Rpdmlzb3JUb3BEaWdpdF0gPSB5RGlnaXRzW3lVc2VkIC0gMV07CiAgICAvLyBGb3IgNjQtYml0IHByb2Nlc3NpbmcsIG1ha2Ugc3VyZSB5VXNlZCwgaSwgYW5kIGogYXJlIGV2ZW4uCiAgICBhc3NlcnQoeVVzZWQuaXNFdmVuKTsKICAgIHZhciBpID0gcmVzdWx0VXNlZCArIChyZXN1bHRVc2VkICYgMSk7CiAgICB2YXIgaiA9IGkgLSB5VXNlZDsKICAgIC8vIHRtcERpZ2l0cyBpcyBhIHRlbXBvcmFyeSBhcnJheSBvZiBpIChldmVuIHJlc3VsdFVzZWQpIGRpZ2l0cy4KICAgIHZhciB0bXBEaWdpdHMgPSBfbmV3RGlnaXRzKGkpOwogICAgdmFyIHRtcFVzZWQgPSBfZGxTaGlmdERpZ2l0cyh5RGlnaXRzLCB5VXNlZCwgaiwgdG1wRGlnaXRzKTsKICAgIC8vIEV4cGxpY2l0IGZpcnN0IGRpdmlzaW9uIHN0ZXAgaW4gY2FzZSBub3JtYWxpemVkIGRpdmlkZW5kIGlzIGxhcmdlciBvcgogICAgLy8gZXF1YWwgdG8gc2hpZnRlZCBub3JtYWxpemVkIGRpdmlzb3IuCiAgICBpZiAoX2NvbXBhcmVEaWdpdHMocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQpID49IDApIHsKICAgICAgYXNzZXJ0KGkgPT0gcmVzdWx0VXNlZCk7CiAgICAgIHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkKytdID0gMTsgLy8gUXVvdGllbnQgPSAxLgogICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLgogICAgICBfYWJzU3ViKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgdG1wRGlnaXRzLCB0bXBVc2VkLCByZXN1bHREaWdpdHMpOwogICAgfSBlbHNlIHsKICAgICAgLy8gQWNjb3VudCBmb3IgcG9zc2libGUgY2FycnkgaW4gX211bEFkZCBzdGVwLgogICAgICByZXN1bHREaWdpdHNbcmVzdWx0VXNlZCsrXSA9IDA7CiAgICB9CiAgICBpZiAocmVzdWx0VXNlZC5pc09kZCkgewogICAgICByZXN1bHREaWdpdHNbcmVzdWx0VXNlZF0gPSAwOyAvLyBMZWFkaW5nIHplcm8gZm9yIDY0LWJpdCBwcm9jZXNzaW5nLgogICAgfQogICAgLy8gTmVnYXRlIHkgc28gd2UgY2FuIGxhdGVyIHVzZSBfbXVsQWRkIGluc3RlYWQgb2Ygbm9uLWV4aXN0ZW50IF9tdWxTdWIuCiAgICB2YXIgbnlEaWdpdHMgPSBfbmV3RGlnaXRzKHlVc2VkICsgMik7CiAgICBueURpZ2l0c1t5VXNlZF0gPSAxOwogICAgX2Fic1N1YihueURpZ2l0cywgeVVzZWQgKyAxLCB5RGlnaXRzLCB5VXNlZCwgbnlEaWdpdHMpOwogICAgLy8gbnlEaWdpdHMgaXMgcmVhZC1vbmx5IGFuZCBoYXMgeVVzZWQgZGlnaXRzIChwb3NzaWJseSBpbmNsdWRpbmcgc2V2ZXJhbAogICAgLy8gbGVhZGluZyB6ZXJvcykgcGx1cyBhIGxlYWRpbmcgemVybyBmb3IgNjQtYml0IHByb2Nlc3NpbmcuCiAgICAvLyByZXN1bHREaWdpdHMgaXMgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4KICAgIC8vIHJlc3VsdERpZ2l0c1swLi55VXNlZC0xXSBpcyB0aGUgY3VycmVudCByZW1haW5kZXIuCiAgICAvLyByZXN1bHREaWdpdHNbeVVzZWQuLnJlc3VsdFVzZWQtMV0gaXMgdGhlIGN1cnJlbnQgcXVvdGllbnQuCiAgICAtLWk7CiAgICB3aGlsZSAoaiA+IDApIHsKICAgICAgdmFyIGQwID0gX2VzdGltYXRlUXVvdGllbnREaWdpdChhcmdzLCByZXN1bHREaWdpdHMsIGkpOwogICAgICBqIC09IGQwOwogICAgICB2YXIgZDEgPQogICAgICAgICAgX211bEFkZChhcmdzLCBfcXVvdGllbnREaWdpdCwgbnlEaWdpdHMsIDAsIHJlc3VsdERpZ2l0cywgaiwgeVVzZWQpOwogICAgICAvLyBfZXN0aW1hdGVRdW90aWVudERpZ2l0IGFuZCBfbXVsQWRkIG11c3QgYWdyZWUgb24gdGhlIG51bWJlciBvZiBkaWdpdHMKICAgICAgLy8gdG8gcHJvY2Vzcy4KICAgICAgYXNzZXJ0KGQwID09IGQxKTsKICAgICAgaWYgKGQwID09IDEpIHsKICAgICAgICBpZiAocmVzdWx0RGlnaXRzW2ldIDwgYXJnc1tfcXVvdGllbnREaWdpdF0pIHsKICAgICAgICAgIC8vIFJldXNpbmcgdGhlIGFscmVhZHkgZXhpc3RpbmcgdG1wRGlnaXRzIGFycmF5LgogICAgICAgICAgdmFyIHRtcFVzZWQgPSBfZGxTaGlmdERpZ2l0cyhueURpZ2l0cywgeVVzZWQsIGosIHRtcERpZ2l0cyk7CiAgICAgICAgICBfYWJzU3ViKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgdG1wRGlnaXRzLCB0bXBVc2VkLCByZXN1bHREaWdpdHMpOwogICAgICAgICAgd2hpbGUgKHJlc3VsdERpZ2l0c1tpXSA8IC0tYXJnc1tfcXVvdGllbnREaWdpdF0pIHsKICAgICAgICAgICAgX2Fic1N1YihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHRtcERpZ2l0cywgdG1wVXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KGQwID09IDIpOwogICAgICAgIGFzc2VydChyZXN1bHREaWdpdHNbaV0gPD0gYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdKTsKICAgICAgICBpZiAocmVzdWx0RGlnaXRzW2ldIDwgYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdIHx8CiAgICAgICAgICAgIHJlc3VsdERpZ2l0c1tpIC0gMV0gPCBhcmdzW19xdW90aWVudERpZ2l0XSkgewogICAgICAgICAgLy8gUmV1c2luZyB0aGUgYWxyZWFkeSBleGlzdGluZyB0bXBEaWdpdHMgYXJyYXkuCiAgICAgICAgICB2YXIgdG1wVXNlZCA9IF9kbFNoaWZ0RGlnaXRzKG55RGlnaXRzLCB5VXNlZCwgaiwgdG1wRGlnaXRzKTsKICAgICAgICAgIF9hYnNTdWIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICAgICAgICBpZiAoYXJnc1tfcXVvdGllbnREaWdpdF0gPT0gMCkgewogICAgICAgICAgICAtLWFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XTsKICAgICAgICAgIH0KICAgICAgICAgIC0tYXJnc1tfcXVvdGllbnREaWdpdF07CiAgICAgICAgICBhc3NlcnQocmVzdWx0RGlnaXRzW2ldIDw9IGFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XSk7CiAgICAgICAgICB3aGlsZSAocmVzdWx0RGlnaXRzW2ldIDwgYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdIHx8CiAgICAgICAgICAgICAgcmVzdWx0RGlnaXRzW2kgLSAxXSA8IGFyZ3NbX3F1b3RpZW50RGlnaXRdKSB7CiAgICAgICAgICAgIF9hYnNTdWIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICAgICAgICAgIGlmIChhcmdzW19xdW90aWVudERpZ2l0XSA9PSAwKSB7CiAgICAgICAgICAgICAgLS1hcmdzW19xdW90aWVudEhpZ2hEaWdpdF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLS1hcmdzW19xdW90aWVudERpZ2l0XTsKICAgICAgICAgICAgYXNzZXJ0KHJlc3VsdERpZ2l0c1tpXSA8PSBhcmdzW19xdW90aWVudEhpZ2hEaWdpdF0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpIC09IGQwOwogICAgfQogICAgLy8gQ2FjaGUgcmVzdWx0LgogICAgX2xhc3REaXZpZGVuZERpZ2l0cyA9IF9kaWdpdHM7CiAgICBfbGFzdERpdmlkZW5kVXNlZCA9IF91c2VkOwogICAgX2xhc3REaXZpc29yRGlnaXRzID0gb3RoZXIuX2RpZ2l0czsKICAgIF9sYXN0RGl2aXNvclVzZWQgPSBvdGhlci5fdXNlZDsKICAgIF9sYXN0UXVvUmVtRGlnaXRzID0gcmVzdWx0RGlnaXRzOwogICAgX2xhc3RRdW9SZW1Vc2VkID0gcmVzdWx0VXNlZDsKICAgIF9sYXN0UmVtVXNlZCA9IHlVc2VkOwogICAgX2xhc3RSZW1fbnNoID0gbnNoOwogIH0KCiAgLy8gQ3VzdG9taXplZCB2ZXJzaW9uIG9mIF9yZW0oKSBtaW5pbWl6aW5nIGFsbG9jYXRpb25zIGZvciB1c2UgaW4gcmVkdWN0aW9uLgogIC8vIElucHV0OgogIC8vICAgeERpZ2l0c1swLi54VXNlZC0xXTogcG9zaXRpdmUgZGl2aWRlbmQuCiAgLy8gICB5RGlnaXRzWzAuLnlVc2VkLTFdOiBub3JtYWxpemVkIHBvc2l0aXZlIGRpdmlzb3IuCiAgLy8gICBueURpZ2l0c1swLi55VXNlZC0xXTogbmVnYXRlZCB5RGlnaXRzLgogIC8vICAgbnNoOiBub3JtYWxpemF0aW9uIHNoaWZ0IGFtb3VudC4KICAvLyAgIGFyZ3M6IHRvcCB5IGRpZ2l0KHMpIGFuZCBwbGFjZSBob2xkZXIgZm9yIGVzdGltYXRlZCBxdW90aWVudCBkaWdpdChzKS4KICAvLyAgIHRtcERpZ2l0czogdGVtcCBhcnJheSBvZiAyKnlVc2VkIGRpZ2l0cy4KICAvLyAgIHJlc3VsdERpZ2l0czogcmVzdWx0IGRpZ2l0cyBhcnJheSBsYXJnZSBlbm91Z2ggdG8gdGVtcG9yYXJpbHkgaG9sZAogIC8vICAgICAgICAgICAgICAgICBjb25jYXRlbmF0ZWQgcXVvdGllbnQgYW5kIG5vcm1hbGl6ZWQgcmVtYWluZGVyLgogIC8vIE91dHB1dDoKICAvLyAgIHJlc3VsdERpZ2l0c1swLi5yZXN1bHRVc2VkLTFdOiBwb3NpdGl2ZSByZW1haW5kZXIuCiAgLy8gUmV0dXJucyByZXN1bHRVc2VkLgogIHN0YXRpYyBpbnQgX3JlbURpZ2l0cygKICAgICAgVWludDMyTGlzdCB4RGlnaXRzLAogICAgICBpbnQgeFVzZWQsCiAgICAgIFVpbnQzMkxpc3QgeURpZ2l0cywKICAgICAgaW50IHlVc2VkLAogICAgICBVaW50MzJMaXN0IG55RGlnaXRzLAogICAgICBpbnQgbnNoLAogICAgICBVaW50MzJMaXN0IGFyZ3MsCiAgICAgIFVpbnQzMkxpc3QgdG1wRGlnaXRzLAogICAgICBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgLy8gSW5pdGlhbGl6ZSByZXN1bHREaWdpdHMgdG8gbm9ybWFsaXplZCBwb3NpdGl2ZSBkaXZpZGVuZC4KICAgIHZhciByZXN1bHRVc2VkID0gX2xTaGlmdERpZ2l0cyh4RGlnaXRzLCB4VXNlZCwgbnNoLCByZXN1bHREaWdpdHMpOwogICAgLy8gRm9yIDY0LWJpdCBwcm9jZXNzaW5nLCBtYWtlIHN1cmUgeVVzZWQsIGksIGFuZCBqIGFyZSBldmVuLgogICAgYXNzZXJ0KHlVc2VkLmlzRXZlbik7CiAgICB2YXIgaSA9IHJlc3VsdFVzZWQgKyAocmVzdWx0VXNlZCAmIDEpOwogICAgdmFyIGogPSBpIC0geVVzZWQ7CiAgICB2YXIgdG1wVXNlZCA9IF9kbFNoaWZ0RGlnaXRzKHlEaWdpdHMsIHlVc2VkLCBqLCB0bXBEaWdpdHMpOwogICAgLy8gRXhwbGljaXQgZmlyc3QgZGl2aXNpb24gc3RlcCBpbiBjYXNlIG5vcm1hbGl6ZWQgZGl2aWRlbmQgaXMgbGFyZ2VyIG9yCiAgICAvLyBlcXVhbCB0byBzaGlmdGVkIG5vcm1hbGl6ZWQgZGl2aXNvci4KICAgIGlmIChfY29tcGFyZURpZ2l0cyhyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHRtcERpZ2l0cywgdG1wVXNlZCkgPj0gMCkgewogICAgICBhc3NlcnQoaSA9PSByZXN1bHRVc2VkKTsKICAgICAgcmVzdWx0RGlnaXRzW3Jlc3VsdFVzZWQrK10gPSAxOyAvLyBRdW90aWVudCA9IDEuCiAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuCiAgICAgIF9hYnNTdWIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICB9IGVsc2UgewogICAgICAvLyBBY2NvdW50IGZvciBwb3NzaWJsZSBjYXJyeSBpbiBfbXVsQWRkIHN0ZXAuCiAgICAgIHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkKytdID0gMDsKICAgIH0KICAgIGlmIChyZXN1bHRVc2VkLmlzT2RkKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tyZXN1bHRVc2VkXSA9IDA7IC8vIExlYWRpbmcgemVybyBmb3IgNjQtYml0IHByb2Nlc3NpbmcuCiAgICB9CiAgICAvLyBOZWdhdGVkIHlEaWdpdHMgcGFzc2VkIGluIG55RGlnaXRzIGFsbG93IHRoZSB1c2Ugb2YgX211bEFkZCBpbnN0ZWFkIG9mCiAgICAvLyB1bmltcGxlbWVudGVkIF9tdWxTdWIuCiAgICAvLyBueURpZ2l0cyBpcyByZWFkLW9ubHkgYW5kIGhhcyB5VXNlZCBkaWdpdHMgKHBvc3NpYmx5IGluY2x1ZGluZyBzZXZlcmFsCiAgICAvLyBsZWFkaW5nIHplcm9zKSBwbHVzIGEgbGVhZGluZyB6ZXJvIGZvciA2NC1iaXQgcHJvY2Vzc2luZy4KICAgIC8vIHJlc3VsdERpZ2l0cyBpcyBtb2RpZmllZCBkdXJpbmcgaXRlcmF0aW9uLgogICAgLy8gcmVzdWx0RGlnaXRzWzAuLnlVc2VkLTFdIGlzIHRoZSBjdXJyZW50IHJlbWFpbmRlci4KICAgIC8vIHJlc3VsdERpZ2l0c1t5VXNlZC4ucmVzdWx0VXNlZC0xXSBpcyB0aGUgY3VycmVudCBxdW90aWVudC4KICAgIC0taTsKICAgIHdoaWxlIChqID4gMCkgewogICAgICB2YXIgZDAgPSBfZXN0aW1hdGVRdW90aWVudERpZ2l0KGFyZ3MsIHJlc3VsdERpZ2l0cywgaSk7CiAgICAgIGogLT0gZDA7CiAgICAgIHZhciBkMSA9CiAgICAgICAgICBfbXVsQWRkKGFyZ3MsIF9xdW90aWVudERpZ2l0LCBueURpZ2l0cywgMCwgcmVzdWx0RGlnaXRzLCBqLCB5VXNlZCk7CiAgICAgIC8vIF9lc3RpbWF0ZVF1b3RpZW50RGlnaXQgYW5kIF9tdWxBZGQgbXVzdCBhZ3JlZSBvbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cwogICAgICAvLyB0byBwcm9jZXNzLgogICAgICBhc3NlcnQoZDAgPT0gZDEpOwogICAgICBpZiAoZDAgPT0gMSkgewogICAgICAgIGlmIChyZXN1bHREaWdpdHNbaV0gPCBhcmdzW19xdW90aWVudERpZ2l0XSkgewogICAgICAgICAgdmFyIHRtcFVzZWQgPSBfZGxTaGlmdERpZ2l0cyhueURpZ2l0cywgeVVzZWQsIGosIHRtcERpZ2l0cyk7CiAgICAgICAgICBfYWJzU3ViKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgdG1wRGlnaXRzLCB0bXBVc2VkLCByZXN1bHREaWdpdHMpOwogICAgICAgICAgd2hpbGUgKHJlc3VsdERpZ2l0c1tpXSA8IC0tYXJnc1tfcXVvdGllbnREaWdpdF0pIHsKICAgICAgICAgICAgX2Fic1N1YihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHRtcERpZ2l0cywgdG1wVXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYXNzZXJ0KGQwID09IDIpOwogICAgICAgIGFzc2VydChyZXN1bHREaWdpdHNbaV0gPD0gYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdKTsKICAgICAgICBpZiAoKHJlc3VsdERpZ2l0c1tpXSA8IGFyZ3NbX3F1b3RpZW50SGlnaERpZ2l0XSkgfHwKICAgICAgICAgICAgKHJlc3VsdERpZ2l0c1tpIC0gMV0gPCBhcmdzW19xdW90aWVudERpZ2l0XSkpIHsKICAgICAgICAgIHZhciB0bXBVc2VkID0gX2RsU2hpZnREaWdpdHMobnlEaWdpdHMsIHlVc2VkLCBqLCB0bXBEaWdpdHMpOwogICAgICAgICAgX2Fic1N1YihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHRtcERpZ2l0cywgdG1wVXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgICAgICAgIGlmIChhcmdzW19xdW90aWVudERpZ2l0XSA9PSAwKSB7CiAgICAgICAgICAgIC0tYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdOwogICAgICAgICAgfQogICAgICAgICAgLS1hcmdzW19xdW90aWVudERpZ2l0XTsKICAgICAgICAgIGFzc2VydChyZXN1bHREaWdpdHNbaV0gPD0gYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdKTsKICAgICAgICAgIHdoaWxlICgocmVzdWx0RGlnaXRzW2ldIDwgYXJnc1tfcXVvdGllbnRIaWdoRGlnaXRdKSB8fAogICAgICAgICAgICAgIChyZXN1bHREaWdpdHNbaSAtIDFdIDwgYXJnc1tfcXVvdGllbnREaWdpdF0pKSB7CiAgICAgICAgICAgIF9hYnNTdWIocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkLCB0bXBEaWdpdHMsIHRtcFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgICAgICAgICAgIGlmIChhcmdzW19xdW90aWVudERpZ2l0XSA9PSAwKSB7CiAgICAgICAgICAgICAgLS1hcmdzW19xdW90aWVudEhpZ2hEaWdpdF07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLS1hcmdzW19xdW90aWVudERpZ2l0XTsKICAgICAgICAgICAgYXNzZXJ0KHJlc3VsdERpZ2l0c1tpXSA8PSBhcmdzW19xdW90aWVudEhpZ2hEaWdpdF0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpIC09IGQwOwogICAgfQogICAgLy8gUmV0dXJuIHJlbWFpbmRlciwgaS5lLiBkZW5vcm1hbGl6ZWQgcmVzdWx0RGlnaXRzWzAuLnlVc2VkLTFdLgogICAgcmVzdWx0VXNlZCA9IHlVc2VkOwogICAgaWYgKG5zaCA+IDApIHsKICAgICAgLy8gRGVub3JtYWxpemUgcmVtYWluZGVyLgogICAgICByZXN1bHRVc2VkID0gX3JTaGlmdERpZ2l0cyhyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIG5zaCwgcmVzdWx0RGlnaXRzKTsKICAgIH0KICAgIHJldHVybiByZXN1bHRVc2VkOwogIH0KCiAgaW50IGdldCBoYXNoQ29kZSB7CiAgICAvLyBUaGlzIGlzIHRoZSBbSmVua2lucyBoYXNoIGZ1bmN0aW9uXVsxXSBidXQgdXNpbmcgbWFza2luZyB0byBrZWVwCiAgICAvLyB2YWx1ZXMgaW4gU01JIHJhbmdlLgogICAgLy8KICAgIC8vIFsxXTogaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9KZW5raW5zX2hhc2hfZnVuY3Rpb24KCiAgICBpbnQgY29tYmluZShpbnQgaGFzaCwgaW50IHZhbHVlKSB7CiAgICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyB2YWx1ZSk7CiAgICAgIGhhc2ggPSAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDAwN2ZmZmYgJiBoYXNoKSA8PCAxMCkpOwogICAgICByZXR1cm4gaGFzaCBeIChoYXNoID4+IDYpOwogICAgfQoKICAgIGludCBmaW5pc2goaW50IGhhc2gpIHsKICAgICAgaGFzaCA9IDB4MWZmZmZmZmYgJiAoaGFzaCArICgoMHgwM2ZmZmZmZiAmIGhhc2gpIDw8IDMpKTsKICAgICAgaGFzaCA9IGhhc2ggXiAoaGFzaCA+PiAxMSk7CiAgICAgIHJldHVybiAweDFmZmZmZmZmICYgKGhhc2ggKyAoKDB4MDAwMDNmZmYgJiBoYXNoKSA8PCAxNSkpOwogICAgfQoKICAgIGlmIChfaXNaZXJvKSByZXR1cm4gNjcwNzsgLy8gSnVzdCBhIHJhbmRvbSBudW1iZXIuCiAgICB2YXIgaGFzaCA9IF9pc05lZ2F0aXZlID8gODM1ODUgOiA0Mjk2ODk7IC8vIEFsc28gcmFuZG9tLgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfdXNlZDsgaSsrKSB7CiAgICAgIGhhc2ggPSBjb21iaW5lKGhhc2gsIF9kaWdpdHNbaV0pOwogICAgfQogICAgcmV0dXJuIGZpbmlzaChoYXNoKTsKICB9CgogIC8qKgogICAqIFRlc3Qgd2hldGhlciB0aGlzIHZhbHVlIGlzIG51bWVyaWNhbGx5IGVxdWFsIHRvIGBvdGhlcmAuCiAgICoKICAgKiBJZiBbb3RoZXJdIGlzIGEgW19CaWdJbnRJbXBsXSByZXR1cm5zIHdoZXRoZXIgdGhlIHR3byBvcGVyYW5kcyBoYXZlIHRoZQogICAqIHNhbWUgdmFsdWUuCiAgICoKICAgKiBSZXR1cm5zIGZhbHNlIGlmIGBvdGhlcmAgaXMgbm90IGEgW19CaWdJbnRJbXBsXS4KICAgKi8KICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgPT4KICAgICAgb3RoZXIgaXMgX0JpZ0ludEltcGwgJiYgY29tcGFyZVRvKG90aGVyKSA9PSAwOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG51bWJlciBvZiBiaXRzIHJlcXVpcmVkIHRvIHN0b3JlIHRoaXMgYmlnIGludGVnZXIuCiAgICoKICAgKiBUaGUgbnVtYmVyIG9mIGJpdHMgZXhjbHVkZXMgdGhlIHNpZ24gYml0LCB3aGljaCBnaXZlcyB0aGUgbmF0dXJhbCBsZW5ndGgKICAgKiBmb3Igbm9uLW5lZ2F0aXZlICh1bnNpZ25lZCkgdmFsdWVzLiAgTmVnYXRpdmUgdmFsdWVzIGFyZSBjb21wbGVtZW50ZWQgdG8KICAgKiByZXR1cm4gdGhlIGJpdCBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYml0IHRoYXQgZGlmZmVycyBmcm9tIHRoZSBzaWduIGJpdC4KICAgKgogICAqIFRvIGZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCB0byBzdG9yZSB0aGUgdmFsdWUgYXMgYSBzaWduZWQgdmFsdWUsCiAgICogYWRkIG9uZSwgaS5lLiB1c2UgYHguYml0TGVuZ3RoICsgMWAuCiAgICoKICAgKiBgYGAKICAgKiB4LmJpdExlbmd0aCA9PSAoLXgtMSkuYml0TGVuZ3RoCiAgICoKICAgKiBuZXcgQmlnSW50LmZyb20oMykuYml0TGVuZ3RoID09IDI7ICAgLy8gMDAwMDAwMTEKICAgKiBuZXcgQmlnSW50LmZyb20oMikuYml0TGVuZ3RoID09IDI7ICAgLy8gMDAwMDAwMTAKICAgKiBuZXcgQmlnSW50LmZyb20oMSkuYml0TGVuZ3RoID09IDE7ICAgLy8gMDAwMDAwMDEKICAgKiBuZXcgQmlnSW50LmZyb20oMCkuYml0TGVuZ3RoID09IDA7ICAgLy8gMDAwMDAwMDAKICAgKiBuZXcgQmlnSW50LmZyb20oLTEpLmJpdExlbmd0aCA9PSAwOyAgLy8gMTExMTExMTEKICAgKiBuZXcgQmlnSW50LmZyb20oLTIpLmJpdExlbmd0aCA9PSAxOyAgLy8gMTExMTExMTAKICAgKiBuZXcgQmlnSW50LmZyb20oLTMpLmJpdExlbmd0aCA9PSAyOyAgLy8gMTExMTExMDEKICAgKiBuZXcgQmlnSW50LmZyb20oLTQpLmJpdExlbmd0aCA9PSAyOyAgLy8gMTExMTExMDAKICAgKiBgYGAKICAgKi8KICBpbnQgZ2V0IGJpdExlbmd0aCB7CiAgICBpZiAoX3VzZWQgPT0gMCkgcmV0dXJuIDA7CiAgICBpZiAoX2lzTmVnYXRpdmUpIHJldHVybiAofnRoaXMpLmJpdExlbmd0aDsKICAgIHJldHVybiBfZGlnaXRCaXRzICogKF91c2VkIC0gMSkgKyBfZGlnaXRzW191c2VkIC0gMV0uYml0TGVuZ3RoOwogIH0KCiAgLyoqCiAgICogVHJ1bmNhdGluZyBkaXZpc2lvbiBvcGVyYXRvci4KICAgKgogICAqIFBlcmZvcm1zIGEgdHJ1bmNhdGluZyBpbnRlZ2VyIGRpdmlzaW9uLCB3aGVyZSB0aGUgcmVtYWluZGVyIGlzIGRpc2NhcmRlZC4KICAgKgogICAqIFRoZSByZW1haW5kZXIgY2FuIGJlIGNvbXB1dGVkIHVzaW5nIHRoZSBbcmVtYWluZGVyXSBtZXRob2QuCiAgICoKICAgKiBFeGFtcGxlczoKICAgKiBgYGAKICAgKiB2YXIgc2V2ZW4gPSBuZXcgQmlnSW50LmZyb20oNyk7CiAgICogdmFyIHRocmVlID0gbmV3IEJpZ0ludC5mcm9tKDMpOwogICAqIHNldmVuIH4vIHRocmVlOyAgICAvLyA9PiAyCiAgICogKC1zZXZlbikgfi8gdGhyZWU7IC8vID0+IC0yCiAgICogc2V2ZW4gfi8gLXRocmVlOyAgIC8vID0+IC0yCiAgICogc2V2ZW4ucmVtYWluZGVyKHRocmVlKTsgICAgLy8gPT4gMQogICAqICgtc2V2ZW4pLnJlbWFpbmRlcih0aHJlZSk7IC8vID0+IC0xCiAgICogc2V2ZW4ucmVtYWluZGVyKC10aHJlZSk7ICAgLy8gPT4gMQogICAqIGBgYAogICAqLwogIF9CaWdJbnRJbXBsIG9wZXJhdG9yIH4vKEJpZ0ludCBiaWdJbnQpIHsKICAgIF9CaWdJbnRJbXBsIG90aGVyID0gYmlnSW50OwogICAgaWYgKG90aGVyLl91c2VkID09IDApIHsKICAgICAgdGhyb3cgY29uc3QgSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uKCk7CiAgICB9CiAgICByZXR1cm4gX2RpdihvdGhlcik7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSByZW1haW5kZXIgb2YgdGhlIHRydW5jYXRpbmcgZGl2aXNpb24gb2YgYHRoaXNgIGJ5IFtvdGhlcl0uCiAgICoKICAgKiBUaGUgcmVzdWx0IGByYCBvZiB0aGlzIG9wZXJhdGlvbiBzYXRpc2ZpZXM6CiAgICogYHRoaXMgPT0gKHRoaXMgfi8gb3RoZXIpICogb3RoZXIgKyByYC4KICAgKiBBcyBhIGNvbnNlcXVlbmNlIHRoZSByZW1haW5kZXIgYHJgIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpZGVyIGB0aGlzYC4KICAgKi8KICBfQmlnSW50SW1wbCByZW1haW5kZXIoQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICBpZiAob3RoZXIuX3VzZWQgPT0gMCkgewogICAgICB0aHJvdyBjb25zdCBJbnRlZ2VyRGl2aXNpb25CeVplcm9FeGNlcHRpb24oKTsKICAgIH0KICAgIHJldHVybiBfcmVtKG90aGVyKTsKICB9CgogIC8vLyBEaXZpc2lvbiBvcGVyYXRvci4KICBkb3VibGUgb3BlcmF0b3IgLyhCaWdJbnQgb3RoZXIpID0+IHRoaXMudG9Eb3VibGUoKSAvIG90aGVyLnRvRG91YmxlKCk7CgogIC8qKiBSZWxhdGlvbmFsIGxlc3MgdGhhbiBvcGVyYXRvci4gKi8KICBib29sIG9wZXJhdG9yIDwoQmlnSW50IG90aGVyKSA9PiBjb21wYXJlVG8ob3RoZXIpIDwgMDsKCiAgLyoqIFJlbGF0aW9uYWwgbGVzcyB0aGFuIG9yIGVxdWFsIG9wZXJhdG9yLiAqLwogIGJvb2wgb3BlcmF0b3IgPD0oQmlnSW50IG90aGVyKSA9PiBjb21wYXJlVG8ob3RoZXIpIDw9IDA7CgogIC8qKiBSZWxhdGlvbmFsIGdyZWF0ZXIgdGhhbiBvcGVyYXRvci4gKi8KICBib29sIG9wZXJhdG9yID4oQmlnSW50IG90aGVyKSA9PiBjb21wYXJlVG8ob3RoZXIpID4gMDsKCiAgLyoqIFJlbGF0aW9uYWwgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIG9wZXJhdG9yLiAqLwogIGJvb2wgb3BlcmF0b3IgPj0oQmlnSW50IG90aGVyKSA9PiBjb21wYXJlVG8ob3RoZXIpID49IDA7CgogIC8qKgogICAqIEV1Y2xpZGVhbiBtb2R1bG8gb3BlcmF0b3IuCiAgICoKICAgKiBSZXR1cm5zIHRoZSByZW1haW5kZXIgb2YgdGhlIEV1Y2xpZGVhbiBkaXZpc2lvbi4gVGhlIEV1Y2xpZGVhbiBkaXZpc2lvbiBvZgogICAqIHR3byBpbnRlZ2VycyBgYWAgYW5kIGBiYCB5aWVsZHMgdHdvIGludGVnZXJzIGBxYCBhbmQgYHJgIHN1Y2ggdGhhdAogICAqIGBhID09IGIgKiBxICsgcmAgYW5kIGAwIDw9IHIgPCBiLmFicygpYC4KICAgKgogICAqIFRoZSBzaWduIG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBgcmAgaXMgYWx3YXlzIHBvc2l0aXZlLgogICAqCiAgICogU2VlIFtyZW1haW5kZXJdIGZvciB0aGUgcmVtYWluZGVyIG9mIHRoZSB0cnVuY2F0aW5nIGRpdmlzaW9uLgogICAqLwogIF9CaWdJbnRJbXBsIG9wZXJhdG9yICUoQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICBpZiAob3RoZXIuX3VzZWQgPT0gMCkgewogICAgICB0aHJvdyBjb25zdCBJbnRlZ2VyRGl2aXNpb25CeVplcm9FeGNlcHRpb24oKTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBfcmVtKG90aGVyKTsKICAgIGlmIChyZXN1bHQuX2lzTmVnYXRpdmUpIHsKICAgICAgaWYgKG90aGVyLl9pc05lZ2F0aXZlKSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0IC0gb3RoZXI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0ICsgb3RoZXI7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzaWduIG9mIHRoaXMgYmlnIGludGVnZXIuCiAgICoKICAgKiBSZXR1cm5zIDAgZm9yIHplcm8sIC0xIGZvciB2YWx1ZXMgbGVzcyB0aGFuIHplcm8gYW5kCiAgICogKzEgZm9yIHZhbHVlcyBncmVhdGVyIHRoYW4gemVyby4KICAgKi8KICBpbnQgZ2V0IHNpZ24gewogICAgaWYgKF91c2VkID09IDApIHJldHVybiAwOwogICAgcmV0dXJuIF9pc05lZ2F0aXZlID8gLTEgOiAxOwogIH0KCiAgLy8vIFdoZXRoZXIgdGhpcyBiaWcgaW50ZWdlciBpcyBldmVuLgogIGJvb2wgZ2V0IGlzRXZlbiA9PiBfdXNlZCA9PSAwIHx8IChfZGlnaXRzWzBdICYgMSkgPT0gMDsKCiAgLy8vIFdoZXRoZXIgdGhpcyBiaWcgaW50ZWdlciBpcyBvZGQuCiAgYm9vbCBnZXQgaXNPZGQgPT4gIWlzRXZlbjsKCiAgLy8vIFdoZXRoZXIgdGhpcyBudW1iZXIgaXMgbmVnYXRpdmUuCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSA9PiBfaXNOZWdhdGl2ZTsKCiAgX0JpZ0ludEltcGwgcG93KGludCBleHBvbmVudCkgewogICAgaWYgKGV4cG9uZW50IDwgMCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiRXhwb25lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmU6ICRleHBvbmVudCIpOwogICAgfQogICAgaWYgKGV4cG9uZW50ID09IDApIHJldHVybiBvbmU7CgogICAgLy8gRXhwb25lbnRpYXRpb24gYnkgc3F1YXJpbmcuCiAgICB2YXIgcmVzdWx0ID0gb25lOwogICAgdmFyIGJhc2UgPSB0aGlzOwogICAgd2hpbGUgKGV4cG9uZW50ICE9IDApIHsKICAgICAgaWYgKChleHBvbmVudCAmIDEpID09IDEpIHsKICAgICAgICByZXN1bHQgKj0gYmFzZTsKICAgICAgfQogICAgICBleHBvbmVudCA+Pj0gMTsKICAgICAgLy8gU2tpcCB1bm5lY2Vzc2FyeSBvcGVyYXRpb24uCiAgICAgIGlmIChleHBvbmVudCAhPSAwKSB7CiAgICAgICAgYmFzZSAqPSBiYXNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGlzIGludGVnZXIgdG8gdGhlIHBvd2VyIG9mIFtleHBvbmVudF0gbW9kdWxvIFttb2R1bHVzXS4KICAgKgogICAqIFRoZSBbZXhwb25lbnRdIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZCBbbW9kdWx1c10gbXVzdCBiZQogICAqIHBvc2l0aXZlLgogICAqLwogIF9CaWdJbnRJbXBsIG1vZFBvdyhCaWdJbnQgYmlnRXhwb25lbnQsIEJpZ0ludCBiaWdNb2R1bHVzKSB7CiAgICBfQmlnSW50SW1wbCBleHBvbmVudCA9IGJpZ0V4cG9uZW50OwogICAgX0JpZ0ludEltcGwgbW9kdWx1cyA9IGJpZ01vZHVsdXM7CiAgICBpZiAoZXhwb25lbnQuX2lzTmVnYXRpdmUpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoImV4cG9uZW50IG11c3QgYmUgcG9zaXRpdmU6ICRleHBvbmVudCIpOwogICAgfQogICAgaWYgKG1vZHVsdXMgPD0gemVybykgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigibW9kdWx1cyBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlOiAkbW9kdWx1cyIpOwogICAgfQogICAgaWYgKGV4cG9uZW50Ll9pc1plcm8pIHJldHVybiBvbmU7CgogICAgZmluYWwgZXhwb25lbnRCaXRsZW4gPSBleHBvbmVudC5iaXRMZW5ndGg7CiAgICBpZiAoZXhwb25lbnRCaXRsZW4gPD0gMCkgcmV0dXJuIG9uZTsKICAgIGZpbmFsIGJvb2wgY2Fubm90VXNlTW9udGdvbWVyeSA9IG1vZHVsdXMuaXNFdmVuIHx8IGFicygpID49IG1vZHVsdXM7CiAgICBpZiAoY2Fubm90VXNlTW9udGdvbWVyeSB8fCBleHBvbmVudEJpdGxlbiA8IDY0KSB7CiAgICAgIF9CaWdJbnRSZWR1Y3Rpb24geiA9IChjYW5ub3RVc2VNb250Z29tZXJ5IHx8IGV4cG9uZW50Qml0bGVuIDwgOCkKICAgICAgICAgID8gbmV3IF9CaWdJbnRDbGFzc2ljUmVkdWN0aW9uKG1vZHVsdXMpCiAgICAgICAgICA6IG5ldyBfQmlnSW50TW9udGdvbWVyeVJlZHVjdGlvbihtb2R1bHVzKTsKICAgICAgdmFyIHJlc3VsdERpZ2l0cyA9IF9uZXdEaWdpdHMoMiAqIHouX25vcm1Nb2R1bHVzVXNlZCArIDIpOwogICAgICB2YXIgcmVzdWx0MkRpZ2l0cyA9IF9uZXdEaWdpdHMoMiAqIHouX25vcm1Nb2R1bHVzVXNlZCArIDIpOwogICAgICB2YXIgZ0RpZ2l0cyA9IF9uZXdEaWdpdHMoei5fbm9ybU1vZHVsdXNVc2VkKTsKICAgICAgdmFyIGdVc2VkID0gei5fY29udmVydCh0aGlzLCBnRGlnaXRzKTsKICAgICAgLy8gSW5pdGlhbGl6ZSByZXN1bHQgd2l0aCBnLgogICAgICAvLyBDb3B5IGxlYWRpbmcgemVybyBpZiBhbnkuCiAgICAgIGZvciAoaW50IGogPSBnVXNlZCArIChnVXNlZCAmIDEpIC0gMTsgaiA+PSAwOyBqLS0pIHsKICAgICAgICByZXN1bHREaWdpdHNbal0gPSBnRGlnaXRzW2pdOwogICAgICB9CiAgICAgIHZhciByZXN1bHRVc2VkID0gZ1VzZWQ7CiAgICAgIHZhciByZXN1bHQyVXNlZDsKICAgICAgZm9yIChpbnQgaSA9IGV4cG9uZW50Qml0bGVuIC0gMjsgaSA+PSAwOyBpLS0pIHsKICAgICAgICByZXN1bHQyVXNlZCA9IHouX3NxcihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHJlc3VsdDJEaWdpdHMpOwogICAgICAgIGlmIChleHBvbmVudC5fZGlnaXRzW2kgfi8gX2RpZ2l0Qml0c10gJiAoMSA8PCAoaSAlIF9kaWdpdEJpdHMpKSAhPSAwKSB7CiAgICAgICAgICByZXN1bHRVc2VkID0KICAgICAgICAgICAgICB6Ll9tdWwocmVzdWx0MkRpZ2l0cywgcmVzdWx0MlVzZWQsIGdEaWdpdHMsIGdVc2VkLCByZXN1bHREaWdpdHMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBTd2FwIHJlc3VsdCBhbmQgcmVzdWx0Mi4KICAgICAgICAgIHZhciB0bXBEaWdpdHMgPSByZXN1bHREaWdpdHM7CiAgICAgICAgICB2YXIgdG1wVXNlZCA9IHJlc3VsdFVzZWQ7CiAgICAgICAgICByZXN1bHREaWdpdHMgPSByZXN1bHQyRGlnaXRzOwogICAgICAgICAgcmVzdWx0VXNlZCA9IHJlc3VsdDJVc2VkOwogICAgICAgICAgcmVzdWx0MkRpZ2l0cyA9IHRtcERpZ2l0czsKICAgICAgICAgIHJlc3VsdDJVc2VkID0gdG1wVXNlZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHouX3JldmVydChyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQpOwogICAgfQogICAgdmFyIGs7CiAgICBpZiAoZXhwb25lbnRCaXRsZW4gPCAxOCkKICAgICAgayA9IDE7CiAgICBlbHNlIGlmIChleHBvbmVudEJpdGxlbiA8IDQ4KQogICAgICBrID0gMzsKICAgIGVsc2UgaWYgKGV4cG9uZW50Qml0bGVuIDwgMTQ0KQogICAgICBrID0gNDsKICAgIGVsc2UgaWYgKGV4cG9uZW50Qml0bGVuIDwgNzY4KQogICAgICBrID0gNTsKICAgIGVsc2UKICAgICAgayA9IDY7CiAgICBfQmlnSW50UmVkdWN0aW9uIHogPSBuZXcgX0JpZ0ludE1vbnRnb21lcnlSZWR1Y3Rpb24obW9kdWx1cyk7CiAgICB2YXIgbiA9IDM7CiAgICBmaW5hbCBrMSA9IGsgLSAxOwogICAgZmluYWwga20gPSAoMSA8PCBrKSAtIDE7CiAgICBMaXN0IGdEaWdpdHMgPSBuZXcgTGlzdChrbSArIDEpOwogICAgTGlzdCBnVXNlZCA9IG5ldyBMaXN0KGttICsgMSk7CiAgICBnRGlnaXRzWzFdID0gX25ld0RpZ2l0cyh6Ll9ub3JtTW9kdWx1c1VzZWQpOwogICAgZ1VzZWRbMV0gPSB6Ll9jb252ZXJ0KHRoaXMsIGdEaWdpdHNbMV0pOwogICAgaWYgKGsgPiAxKSB7CiAgICAgIHZhciBnMkRpZ2l0cyA9IF9uZXdEaWdpdHMoMiAqIHouX25vcm1Nb2R1bHVzVXNlZCArIDIpOwogICAgICB2YXIgZzJVc2VkID0gei5fc3FyKGdEaWdpdHNbMV0sIGdVc2VkWzFdLCBnMkRpZ2l0cyk7CiAgICAgIHdoaWxlIChuIDw9IGttKSB7CiAgICAgICAgZ0RpZ2l0c1tuXSA9IF9uZXdEaWdpdHMoMiAqIHouX25vcm1Nb2R1bHVzVXNlZCArIDIpOwogICAgICAgIGdVc2VkW25dID0KICAgICAgICAgICAgei5fbXVsKGcyRGlnaXRzLCBnMlVzZWQsIGdEaWdpdHNbbiAtIDJdLCBnVXNlZFtuIC0gMl0sIGdEaWdpdHNbbl0pOwogICAgICAgIG4gKz0gMjsKICAgICAgfQogICAgfQogICAgdmFyIHc7CiAgICB2YXIgaXNPbmUgPSB0cnVlOwogICAgdmFyIHJlc3VsdERpZ2l0cyA9IG9uZS5fZGlnaXRzOwogICAgdmFyIHJlc3VsdFVzZWQgPSBvbmUuX3VzZWQ7CiAgICB2YXIgcmVzdWx0MkRpZ2l0cyA9IF9uZXdEaWdpdHMoMiAqIHouX25vcm1Nb2R1bHVzVXNlZCArIDIpOwogICAgdmFyIHJlc3VsdDJVc2VkOwogICAgdmFyIGV4cG9uZW50RGlnaXRzID0gZXhwb25lbnQuX2RpZ2l0czsKICAgIHZhciBqID0gZXhwb25lbnQuX3VzZWQgLSAxOwogICAgdmFyIGkgPSBleHBvbmVudERpZ2l0c1tqXS5iaXRMZW5ndGggLSAxOwogICAgd2hpbGUgKGogPj0gMCkgewogICAgICBpZiAoaSA+PSBrMSkgewogICAgICAgIHcgPSAoZXhwb25lbnREaWdpdHNbal0gPj4gKGkgLSBrMSkpICYga207CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdyA9IChleHBvbmVudERpZ2l0c1tqXSAmICgoMSA8PCAoaSArIDEpKSAtIDEpKSA8PCAoazEgLSBpKTsKICAgICAgICBpZiAoaiA+IDApIHsKICAgICAgICAgIHcgfD0gZXhwb25lbnREaWdpdHNbaiAtIDFdID4+IChfZGlnaXRCaXRzICsgaSAtIGsxKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbiA9IGs7CiAgICAgIHdoaWxlICgodyAmIDEpID09IDApIHsKICAgICAgICB3ID4+PSAxOwogICAgICAgIC0tbjsKICAgICAgfQogICAgICBpZiAoKGkgLT0gbikgPCAwKSB7CiAgICAgICAgaSArPSBfZGlnaXRCaXRzOwogICAgICAgIC0tajsKICAgICAgfQogICAgICBpZiAoaXNPbmUpIHsKICAgICAgICAvLyByID09IDEsIGRvbid0IGJvdGhlciBzcXVhcmluZyBvciBtdWx0aXBseWluZyBpdC4KICAgICAgICByZXN1bHREaWdpdHMgPSBfbmV3RGlnaXRzKDIgKiB6Ll9ub3JtTW9kdWx1c1VzZWQgKyAyKTsKICAgICAgICByZXN1bHRVc2VkID0gZ1VzZWRbd107CiAgICAgICAgdmFyIGd3RGlnaXRzID0gZ0RpZ2l0c1t3XTsKICAgICAgICB2YXIgcmkgPSByZXN1bHRVc2VkICsgKHJlc3VsdFVzZWQgJiAxKTsgLy8gQ29weSBsZWFkaW5nIHplcm8gaWYgYW55LgogICAgICAgIHdoaWxlICgtLXJpID49IDApIHsKICAgICAgICAgIHJlc3VsdERpZ2l0c1tyaV0gPSBnd0RpZ2l0c1tyaV07CiAgICAgICAgfQogICAgICAgIGlzT25lID0gZmFsc2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd2hpbGUgKG4gPiAxKSB7CiAgICAgICAgICByZXN1bHQyVXNlZCA9IHouX3NxcihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHJlc3VsdDJEaWdpdHMpOwogICAgICAgICAgcmVzdWx0VXNlZCA9IHouX3NxcihyZXN1bHQyRGlnaXRzLCByZXN1bHQyVXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgICAgICAgIG4gLT0gMjsKICAgICAgICB9CiAgICAgICAgaWYgKG4gPiAwKSB7CiAgICAgICAgICByZXN1bHQyVXNlZCA9IHouX3NxcihyZXN1bHREaWdpdHMsIHJlc3VsdFVzZWQsIHJlc3VsdDJEaWdpdHMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgc3dhcERpZ2l0cyA9IHJlc3VsdERpZ2l0czsKICAgICAgICAgIHZhciBzd2FwVXNlZCA9IHJlc3VsdFVzZWQ7CiAgICAgICAgICByZXN1bHREaWdpdHMgPSByZXN1bHQyRGlnaXRzOwogICAgICAgICAgcmVzdWx0VXNlZCA9IHJlc3VsdDJVc2VkOwogICAgICAgICAgcmVzdWx0MkRpZ2l0cyA9IHN3YXBEaWdpdHM7CiAgICAgICAgICByZXN1bHQyVXNlZCA9IHN3YXBVc2VkOwogICAgICAgIH0KICAgICAgICByZXN1bHRVc2VkID0gei5fbXVsKAogICAgICAgICAgICByZXN1bHQyRGlnaXRzLCByZXN1bHQyVXNlZCwgZ0RpZ2l0c1t3XSwgZ1VzZWRbd10sIHJlc3VsdERpZ2l0cyk7CiAgICAgIH0KICAgICAgd2hpbGUgKGogPj0gMCAmJiAoZXhwb25lbnREaWdpdHNbal0gJiAoMSA8PCBpKSkgPT0gMCkgewogICAgICAgIHJlc3VsdDJVc2VkID0gei5fc3FyKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCwgcmVzdWx0MkRpZ2l0cyk7CiAgICAgICAgdmFyIHN3YXBEaWdpdHMgPSByZXN1bHREaWdpdHM7CiAgICAgICAgdmFyIHN3YXBVc2VkID0gcmVzdWx0VXNlZDsKICAgICAgICByZXN1bHREaWdpdHMgPSByZXN1bHQyRGlnaXRzOwogICAgICAgIHJlc3VsdFVzZWQgPSByZXN1bHQyVXNlZDsKICAgICAgICByZXN1bHQyRGlnaXRzID0gc3dhcERpZ2l0czsKICAgICAgICByZXN1bHQyVXNlZCA9IHN3YXBVc2VkOwogICAgICAgIGlmICgtLWkgPCAwKSB7CiAgICAgICAgICBpID0gX2RpZ2l0Qml0cyAtIDE7CiAgICAgICAgICAtLWo7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhc3NlcnQoIWlzT25lKTsKICAgIHJldHVybiB6Ll9yZXZlcnQocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkKTsKICB9CgogIC8vIElmIGludiBpcyBmYWxzZSwgcmV0dXJucyBnY2QoeCwgeSkuCiAgLy8gSWYgaW52IGlzIHRydWUgYW5kIGdjZCh4LCB5KSA9IDEsIHJldHVybnMgZCwgc28gdGhhdCBjKnggKyBkKnkgPSAxLgogIC8vIElmIGludiBpcyB0cnVlIGFuZCBnY2QoeCwgeSkgIT0gMSwgdGhyb3dzIEV4Y2VwdGlvbigiTm90IGNvcHJpbWUiKS4KICBzdGF0aWMgX0JpZ0ludEltcGwgX2JpbmFyeUdjZChfQmlnSW50SW1wbCB4LCBfQmlnSW50SW1wbCB5LCBib29sIGludikgewogICAgdmFyIHhEaWdpdHMgPSB4Ll9kaWdpdHM7CiAgICB2YXIgeURpZ2l0cyA9IHkuX2RpZ2l0czsKICAgIHZhciB4VXNlZCA9IHguX3VzZWQ7CiAgICB2YXIgeVVzZWQgPSB5Ll91c2VkOwogICAgdmFyIG1heFVzZWQgPSBfbWF4KHhVc2VkLCB5VXNlZCk7CiAgICBmaW5hbCBtYXhMZW4gPSBtYXhVc2VkICsgKG1heFVzZWQgJiAxKTsKICAgIHhEaWdpdHMgPSBfY2xvbmVEaWdpdHMoeERpZ2l0cywgMCwgeFVzZWQsIG1heExlbik7CiAgICB5RGlnaXRzID0gX2Nsb25lRGlnaXRzKHlEaWdpdHMsIDAsIHlVc2VkLCBtYXhMZW4pOwogICAgaW50IHNoaWZ0QW1vdW50ID0gMDsKICAgIGlmIChpbnYpIHsKICAgICAgaWYgKCh5VXNlZCA9PSAxKSAmJiAoeURpZ2l0c1swXSA9PSAxKSkgcmV0dXJuIG9uZTsKICAgICAgaWYgKCh5VXNlZCA9PSAwKSB8fCAoeURpZ2l0c1swXS5pc0V2ZW4gJiYgeERpZ2l0c1swXS5pc0V2ZW4pKSB7CiAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTm90IGNvcHJpbWUiKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgaWYgKHguX2lzWmVybykgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKDAsICJ0aGlzIiwgIm11c3Qgbm90IGJlIHplcm8iKTsKICAgICAgfQogICAgICBpZiAoeS5faXNaZXJvKSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUoMCwgIm90aGVyIiwgIm11c3Qgbm90IGJlIHplcm8iKTsKICAgICAgfQogICAgICBpZiAoKCh4VXNlZCA9PSAxKSAmJiAoeERpZ2l0c1swXSA9PSAxKSkgfHwKICAgICAgICAgICgoeVVzZWQgPT0gMSkgJiYgKHlEaWdpdHNbMF0gPT0gMSkpKSByZXR1cm4gb25lOwogICAgICB3aGlsZSAoKCh4RGlnaXRzWzBdICYgMSkgPT0gMCkgJiYgKCh5RGlnaXRzWzBdICYgMSkgPT0gMCkpIHsKICAgICAgICBfcnNoKHhEaWdpdHMsIHhVc2VkLCAxLCB4RGlnaXRzKTsKICAgICAgICBfcnNoKHlEaWdpdHMsIHlVc2VkLCAxLCB5RGlnaXRzKTsKICAgICAgICBzaGlmdEFtb3VudCsrOwogICAgICB9CiAgICAgIGlmIChzaGlmdEFtb3VudCA+PSBfZGlnaXRCaXRzKSB7CiAgICAgICAgdmFyIGRpZ2l0U2hpZnRBbW91bnQgPSBzaGlmdEFtb3VudCB+LyBfZGlnaXRCaXRzOwogICAgICAgIHhVc2VkIC09IGRpZ2l0U2hpZnRBbW91bnQ7CiAgICAgICAgeVVzZWQgLT0gZGlnaXRTaGlmdEFtb3VudDsKICAgICAgICBtYXhVc2VkIC09IGRpZ2l0U2hpZnRBbW91bnQ7CiAgICAgIH0KICAgICAgaWYgKCh5RGlnaXRzWzBdICYgMSkgPT0gMSkgewogICAgICAgIC8vIFN3YXAgeCBhbmQgeS4KICAgICAgICB2YXIgdG1wRGlnaXRzID0geERpZ2l0czsKICAgICAgICB2YXIgdG1wVXNlZCA9IHhVc2VkOwogICAgICAgIHhEaWdpdHMgPSB5RGlnaXRzOwogICAgICAgIHhVc2VkID0geVVzZWQ7CiAgICAgICAgeURpZ2l0cyA9IHRtcERpZ2l0czsKICAgICAgICB5VXNlZCA9IHRtcFVzZWQ7CiAgICAgIH0KICAgIH0KICAgIHZhciB1RGlnaXRzID0gX2Nsb25lRGlnaXRzKHhEaWdpdHMsIDAsIHhVc2VkLCBtYXhMZW4pOwogICAgdmFyIHZEaWdpdHMgPSBfY2xvbmVEaWdpdHMoeURpZ2l0cywgMCwgeVVzZWQsIG1heExlbiArIDIpOyAvLyArMiBmb3IgbHNoLgogICAgZmluYWwgYm9vbCBhYyA9ICh4RGlnaXRzWzBdICYgMSkgPT0gMDsKCiAgICAvLyBWYXJpYWJsZXMgYSwgYiwgYywgYW5kIGQgcmVxdWlyZSBvbmUgbW9yZSBkaWdpdC4KICAgIGZpbmFsIGFiY2RVc2VkID0gbWF4VXNlZCArIDE7CiAgICBmaW5hbCBhYmNkTGVuID0gYWJjZFVzZWQgKyAoYWJjZFVzZWQgJiAxKSArIDI7IC8vICsyIHRvIHNhdGlzZnkgX2Fic0FkZC4KICAgIHZhciBhRGlnaXRzLCBiRGlnaXRzLCBjRGlnaXRzLCBkRGlnaXRzOwogICAgYm9vbCBhSXNOZWdhdGl2ZSwgYklzTmVnYXRpdmUsIGNJc05lZ2F0aXZlLCBkSXNOZWdhdGl2ZTsKICAgIGlmIChhYykgewogICAgICBhRGlnaXRzID0gX25ld0RpZ2l0cyhhYmNkTGVuKTsKICAgICAgYUlzTmVnYXRpdmUgPSBmYWxzZTsKICAgICAgYURpZ2l0c1swXSA9IDE7CiAgICAgIGNEaWdpdHMgPSBfbmV3RGlnaXRzKGFiY2RMZW4pOwogICAgICBjSXNOZWdhdGl2ZSA9IGZhbHNlOwogICAgfQogICAgYkRpZ2l0cyA9IF9uZXdEaWdpdHMoYWJjZExlbik7CiAgICBiSXNOZWdhdGl2ZSA9IGZhbHNlOwogICAgZERpZ2l0cyA9IF9uZXdEaWdpdHMoYWJjZExlbik7CiAgICBkSXNOZWdhdGl2ZSA9IGZhbHNlOwogICAgZERpZ2l0c1swXSA9IDE7CgogICAgd2hpbGUgKHRydWUpIHsKICAgICAgd2hpbGUgKCh1RGlnaXRzWzBdICYgMSkgPT0gMCkgewogICAgICAgIF9yc2godURpZ2l0cywgbWF4VXNlZCwgMSwgdURpZ2l0cyk7CiAgICAgICAgaWYgKGFjKSB7CiAgICAgICAgICBpZiAoKChhRGlnaXRzWzBdICYgMSkgPT0gMSkgfHwgKChiRGlnaXRzWzBdICYgMSkgPT0gMSkpIHsKICAgICAgICAgICAgLy8gYSArPSB5CiAgICAgICAgICAgIGlmIChhSXNOZWdhdGl2ZSkgewogICAgICAgICAgICAgIGlmICgoYURpZ2l0c1ttYXhVc2VkXSAhPSAwKSB8fAogICAgICAgICAgICAgICAgICAoX2NvbXBhcmVEaWdpdHMoYURpZ2l0cywgbWF4VXNlZCwgeURpZ2l0cywgbWF4VXNlZCkpID4gMCkgewogICAgICAgICAgICAgICAgX2Fic1N1YihhRGlnaXRzLCBhYmNkVXNlZCwgeURpZ2l0cywgbWF4VXNlZCwgYURpZ2l0cyk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIF9hYnNTdWIoeURpZ2l0cywgbWF4VXNlZCwgYURpZ2l0cywgbWF4VXNlZCwgYURpZ2l0cyk7CiAgICAgICAgICAgICAgICBhSXNOZWdhdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfYWJzQWRkKGFEaWdpdHMsIGFiY2RVc2VkLCB5RGlnaXRzLCBtYXhVc2VkLCBhRGlnaXRzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBiIC09IHgKICAgICAgICAgICAgaWYgKGJJc05lZ2F0aXZlKSB7CiAgICAgICAgICAgICAgX2Fic0FkZChiRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGJEaWdpdHNbbWF4VXNlZF0gIT0gMCkgfHwKICAgICAgICAgICAgICAgIChfY29tcGFyZURpZ2l0cyhiRGlnaXRzLCBtYXhVc2VkLCB4RGlnaXRzLCBtYXhVc2VkKSA+IDApKSB7CiAgICAgICAgICAgICAgX2Fic1N1YihiRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2Fic1N1Yih4RGlnaXRzLCBtYXhVc2VkLCBiRGlnaXRzLCBtYXhVc2VkLCBiRGlnaXRzKTsKICAgICAgICAgICAgICBiSXNOZWdhdGl2ZSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIF9yc2goYURpZ2l0cywgYWJjZFVzZWQsIDEsIGFEaWdpdHMpOwogICAgICAgIH0gZWxzZSBpZiAoKGJEaWdpdHNbMF0gJiAxKSA9PSAxKSB7CiAgICAgICAgICAvLyBiIC09IHgKICAgICAgICAgIGlmIChiSXNOZWdhdGl2ZSkgewogICAgICAgICAgICBfYWJzQWRkKGJEaWdpdHMsIGFiY2RVc2VkLCB4RGlnaXRzLCBtYXhVc2VkLCBiRGlnaXRzKTsKICAgICAgICAgIH0gZWxzZSBpZiAoKGJEaWdpdHNbbWF4VXNlZF0gIT0gMCkgfHwKICAgICAgICAgICAgICAoX2NvbXBhcmVEaWdpdHMoYkRpZ2l0cywgbWF4VXNlZCwgeERpZ2l0cywgbWF4VXNlZCkgPiAwKSkgewogICAgICAgICAgICBfYWJzU3ViKGJEaWdpdHMsIGFiY2RVc2VkLCB4RGlnaXRzLCBtYXhVc2VkLCBiRGlnaXRzKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9hYnNTdWIoeERpZ2l0cywgbWF4VXNlZCwgYkRpZ2l0cywgbWF4VXNlZCwgYkRpZ2l0cyk7CiAgICAgICAgICAgIGJJc05lZ2F0aXZlID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX3JzaChiRGlnaXRzLCBhYmNkVXNlZCwgMSwgYkRpZ2l0cyk7CiAgICAgIH0KICAgICAgd2hpbGUgKCh2RGlnaXRzWzBdICYgMSkgPT0gMCkgewogICAgICAgIF9yc2godkRpZ2l0cywgbWF4VXNlZCwgMSwgdkRpZ2l0cyk7CiAgICAgICAgaWYgKGFjKSB7CiAgICAgICAgICBpZiAoKChjRGlnaXRzWzBdICYgMSkgPT0gMSkgfHwgKChkRGlnaXRzWzBdICYgMSkgPT0gMSkpIHsKICAgICAgICAgICAgLy8gYyArPSB5CiAgICAgICAgICAgIGlmIChjSXNOZWdhdGl2ZSkgewogICAgICAgICAgICAgIGlmICgoY0RpZ2l0c1ttYXhVc2VkXSAhPSAwKSB8fAogICAgICAgICAgICAgICAgICAoX2NvbXBhcmVEaWdpdHMoY0RpZ2l0cywgbWF4VXNlZCwgeURpZ2l0cywgbWF4VXNlZCkgPiAwKSkgewogICAgICAgICAgICAgICAgX2Fic1N1YihjRGlnaXRzLCBhYmNkVXNlZCwgeURpZ2l0cywgbWF4VXNlZCwgY0RpZ2l0cyk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIF9hYnNTdWIoeURpZ2l0cywgbWF4VXNlZCwgY0RpZ2l0cywgbWF4VXNlZCwgY0RpZ2l0cyk7CiAgICAgICAgICAgICAgICBjSXNOZWdhdGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfYWJzQWRkKGNEaWdpdHMsIGFiY2RVc2VkLCB5RGlnaXRzLCBtYXhVc2VkLCBjRGlnaXRzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAvLyBkIC09IHgKICAgICAgICAgICAgaWYgKGRJc05lZ2F0aXZlKSB7CiAgICAgICAgICAgICAgX2Fic0FkZChkRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cyk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGREaWdpdHNbbWF4VXNlZF0gIT0gMCkgfHwKICAgICAgICAgICAgICAgIChfY29tcGFyZURpZ2l0cyhkRGlnaXRzLCBtYXhVc2VkLCB4RGlnaXRzLCBtYXhVc2VkKSA+IDApKSB7CiAgICAgICAgICAgICAgX2Fic1N1YihkRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2Fic1N1Yih4RGlnaXRzLCBtYXhVc2VkLCBkRGlnaXRzLCBtYXhVc2VkLCBkRGlnaXRzKTsKICAgICAgICAgICAgICBkSXNOZWdhdGl2ZSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIF9yc2goY0RpZ2l0cywgYWJjZFVzZWQsIDEsIGNEaWdpdHMpOwogICAgICAgIH0gZWxzZSBpZiAoKGREaWdpdHNbMF0gJiAxKSA9PSAxKSB7CiAgICAgICAgICAvLyBkIC09IHgKICAgICAgICAgIGlmIChkSXNOZWdhdGl2ZSkgewogICAgICAgICAgICBfYWJzQWRkKGREaWdpdHMsIGFiY2RVc2VkLCB4RGlnaXRzLCBtYXhVc2VkLCBkRGlnaXRzKTsKICAgICAgICAgIH0gZWxzZSBpZiAoKGREaWdpdHNbbWF4VXNlZF0gIT0gMCkgfHwKICAgICAgICAgICAgICAoX2NvbXBhcmVEaWdpdHMoZERpZ2l0cywgbWF4VXNlZCwgeERpZ2l0cywgbWF4VXNlZCkgPiAwKSkgewogICAgICAgICAgICBfYWJzU3ViKGREaWdpdHMsIGFiY2RVc2VkLCB4RGlnaXRzLCBtYXhVc2VkLCBkRGlnaXRzKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9hYnNTdWIoeERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cyk7CiAgICAgICAgICAgIGRJc05lZ2F0aXZlID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX3JzaChkRGlnaXRzLCBhYmNkVXNlZCwgMSwgZERpZ2l0cyk7CiAgICAgIH0KICAgICAgaWYgKF9jb21wYXJlRGlnaXRzKHVEaWdpdHMsIG1heFVzZWQsIHZEaWdpdHMsIG1heFVzZWQpID49IDApIHsKICAgICAgICAvLyB1IC09IHYKICAgICAgICBfYWJzU3ViKHVEaWdpdHMsIG1heFVzZWQsIHZEaWdpdHMsIG1heFVzZWQsIHVEaWdpdHMpOwogICAgICAgIGlmIChhYykgewogICAgICAgICAgLy8gYSAtPSBjCiAgICAgICAgICBpZiAoYUlzTmVnYXRpdmUgPT0gY0lzTmVnYXRpdmUpIHsKICAgICAgICAgICAgdmFyIGFfY21wX2MgPSBfY29tcGFyZURpZ2l0cyhhRGlnaXRzLCBhYmNkVXNlZCwgY0RpZ2l0cywgYWJjZFVzZWQpOwogICAgICAgICAgICBpZiAoYV9jbXBfYyA+IDApIHsKICAgICAgICAgICAgICBfYWJzU3ViKGFEaWdpdHMsIGFiY2RVc2VkLCBjRGlnaXRzLCBhYmNkVXNlZCwgYURpZ2l0cyk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX2Fic1N1YihjRGlnaXRzLCBhYmNkVXNlZCwgYURpZ2l0cywgYWJjZFVzZWQsIGFEaWdpdHMpOwogICAgICAgICAgICAgIGFJc05lZ2F0aXZlID0gIWFJc05lZ2F0aXZlICYmIChhX2NtcF9jICE9IDApOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfYWJzQWRkKGFEaWdpdHMsIGFiY2RVc2VkLCBjRGlnaXRzLCBhYmNkVXNlZCwgYURpZ2l0cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIGIgLT0gZAogICAgICAgIGlmIChiSXNOZWdhdGl2ZSA9PSBkSXNOZWdhdGl2ZSkgewogICAgICAgICAgdmFyIGJfY21wX2QgPSBfY29tcGFyZURpZ2l0cyhiRGlnaXRzLCBhYmNkVXNlZCwgZERpZ2l0cywgYWJjZFVzZWQpOwogICAgICAgICAgaWYgKGJfY21wX2QgPiAwKSB7CiAgICAgICAgICAgIF9hYnNTdWIoYkRpZ2l0cywgYWJjZFVzZWQsIGREaWdpdHMsIGFiY2RVc2VkLCBiRGlnaXRzKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9hYnNTdWIoZERpZ2l0cywgYWJjZFVzZWQsIGJEaWdpdHMsIGFiY2RVc2VkLCBiRGlnaXRzKTsKICAgICAgICAgICAgYklzTmVnYXRpdmUgPSAhYklzTmVnYXRpdmUgJiYgKGJfY21wX2QgIT0gMCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9hYnNBZGQoYkRpZ2l0cywgYWJjZFVzZWQsIGREaWdpdHMsIGFiY2RVc2VkLCBiRGlnaXRzKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gdiAtPSB1CiAgICAgICAgX2Fic1N1Yih2RGlnaXRzLCBtYXhVc2VkLCB1RGlnaXRzLCBtYXhVc2VkLCB2RGlnaXRzKTsKICAgICAgICBpZiAoYWMpIHsKICAgICAgICAgIC8vIGMgLT0gYQogICAgICAgICAgaWYgKGNJc05lZ2F0aXZlID09IGFJc05lZ2F0aXZlKSB7CiAgICAgICAgICAgIHZhciBjX2NtcF9hID0gX2NvbXBhcmVEaWdpdHMoY0RpZ2l0cywgYWJjZFVzZWQsIGFEaWdpdHMsIGFiY2RVc2VkKTsKICAgICAgICAgICAgaWYgKGNfY21wX2EgPiAwKSB7CiAgICAgICAgICAgICAgX2Fic1N1YihjRGlnaXRzLCBhYmNkVXNlZCwgYURpZ2l0cywgYWJjZFVzZWQsIGNEaWdpdHMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9hYnNTdWIoYURpZ2l0cywgYWJjZFVzZWQsIGNEaWdpdHMsIGFiY2RVc2VkLCBjRGlnaXRzKTsKICAgICAgICAgICAgICBjSXNOZWdhdGl2ZSA9ICFjSXNOZWdhdGl2ZSAmJiAoY19jbXBfYSAhPSAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX2Fic0FkZChjRGlnaXRzLCBhYmNkVXNlZCwgYURpZ2l0cywgYWJjZFVzZWQsIGNEaWdpdHMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBkIC09IGIKICAgICAgICBpZiAoZElzTmVnYXRpdmUgPT0gYklzTmVnYXRpdmUpIHsKICAgICAgICAgIHZhciBkX2NtcF9iID0gX2NvbXBhcmVEaWdpdHMoZERpZ2l0cywgYWJjZFVzZWQsIGJEaWdpdHMsIGFiY2RVc2VkKTsKICAgICAgICAgIGlmIChkX2NtcF9iID4gMCkgewogICAgICAgICAgICBfYWJzU3ViKGREaWdpdHMsIGFiY2RVc2VkLCBiRGlnaXRzLCBhYmNkVXNlZCwgZERpZ2l0cyk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfYWJzU3ViKGJEaWdpdHMsIGFiY2RVc2VkLCBkRGlnaXRzLCBhYmNkVXNlZCwgZERpZ2l0cyk7CiAgICAgICAgICAgIGRJc05lZ2F0aXZlID0gIWRJc05lZ2F0aXZlICYmIChkX2NtcF9iICE9IDApOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfYWJzQWRkKGREaWdpdHMsIGFiY2RVc2VkLCBiRGlnaXRzLCBhYmNkVXNlZCwgZERpZ2l0cyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIEV4aXQgbG9vcCBpZiB1ID09IDAuCiAgICAgIHZhciBpID0gbWF4VXNlZDsKICAgICAgd2hpbGUgKChpID4gMCkgJiYgKHVEaWdpdHNbaSAtIDFdID09IDApKSAtLWk7CiAgICAgIGlmIChpID09IDApIGJyZWFrOwogICAgfQogICAgaWYgKCFpbnYpIHsKICAgICAgaWYgKHNoaWZ0QW1vdW50ID4gMCkgewogICAgICAgIG1heFVzZWQgPSBfbFNoaWZ0RGlnaXRzKHZEaWdpdHMsIG1heFVzZWQsIHNoaWZ0QW1vdW50LCB2RGlnaXRzKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oZmFsc2UsIG1heFVzZWQsIHZEaWdpdHMpOwogICAgfQogICAgLy8gTm8gaW52ZXJzZSBpZiB2ICE9IDEuCiAgICB2YXIgaSA9IG1heFVzZWQgLSAxOwogICAgd2hpbGUgKChpID4gMCkgJiYgKHZEaWdpdHNbaV0gPT0gMCkpIC0taTsKICAgIGlmICgoaSAhPSAwKSB8fCAodkRpZ2l0c1swXSAhPSAxKSkgewogICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJOb3QgY29wcmltZSIpOwogICAgfQoKICAgIGlmIChkSXNOZWdhdGl2ZSkgewogICAgICB3aGlsZSAoKGREaWdpdHNbbWF4VXNlZF0gIT0gMCkgfHwKICAgICAgICAgIChfY29tcGFyZURpZ2l0cyhkRGlnaXRzLCBtYXhVc2VkLCB4RGlnaXRzLCBtYXhVc2VkKSA+IDApKSB7CiAgICAgICAgLy8gZCArPSB4LCBkIHN0aWxsIG5lZ2F0aXZlCiAgICAgICAgX2Fic1N1YihkRGlnaXRzLCBhYmNkVXNlZCwgeERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cyk7CiAgICAgIH0KICAgICAgLy8gZCArPSB4CiAgICAgIF9hYnNTdWIoeERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cywgbWF4VXNlZCwgZERpZ2l0cyk7CiAgICAgIGRJc05lZ2F0aXZlID0gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICB3aGlsZSAoKGREaWdpdHNbbWF4VXNlZF0gIT0gMCkgfHwKICAgICAgICAgIChfY29tcGFyZURpZ2l0cyhkRGlnaXRzLCBtYXhVc2VkLCB4RGlnaXRzLCBtYXhVc2VkKSA+PSAwKSkgewogICAgICAgIC8vIGQgLT0geAogICAgICAgIF9hYnNTdWIoZERpZ2l0cywgYWJjZFVzZWQsIHhEaWdpdHMsIG1heFVzZWQsIGREaWdpdHMpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oZmFsc2UsIG1heFVzZWQsIGREaWdpdHMpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbW9kdWxhciBtdWx0aXBsaWNhdGl2ZSBpbnZlcnNlIG9mIHRoaXMgYmlnIGludGVnZXIKICAgKiBtb2R1bG8gW21vZHVsdXNdLgogICAqCiAgICogVGhlIFttb2R1bHVzXSBtdXN0IGJlIHBvc2l0aXZlLgogICAqCiAgICogSXQgaXMgYW4gZXJyb3IgaWYgbm8gbW9kdWxhciBpbnZlcnNlIGV4aXN0cy4KICAgKi8KICAvLyBSZXR1cm5zIDEvdGhpcyAlIG1vZHVsdXMsIHdpdGggbW9kdWx1cyA+IDAuCiAgX0JpZ0ludEltcGwgbW9kSW52ZXJzZShCaWdJbnQgYmlnSW50KSB7CiAgICBfQmlnSW50SW1wbCBtb2R1bHVzID0gYmlnSW50OwogICAgaWYgKG1vZHVsdXMgPD0gemVybykgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiTW9kdWx1cyBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlOiAkbW9kdWx1cyIpOwogICAgfQogICAgaWYgKG1vZHVsdXMgPT0gb25lKSByZXR1cm4gemVybzsKICAgIHZhciB0bXAgPSB0aGlzOwogICAgaWYgKHRtcC5faXNOZWdhdGl2ZSB8fCAodG1wLl9hYnNDb21wYXJlKG1vZHVsdXMpID49IDApKSB7CiAgICAgIHRtcCAlPSBtb2R1bHVzOwogICAgfQogICAgcmV0dXJuIF9iaW5hcnlHY2QobW9kdWx1cywgdG1wLCB0cnVlKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIHRoaXMgYmlnIGludGVnZXIgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBJZiBlaXRoZXIgbnVtYmVyIGlzIG5vbi16ZXJvLCB0aGUgcmVzdWx0IGlzIHRoZSBudW1lcmljYWxseSBncmVhdGVzdAogICAqIGludGVnZXIgZGl2aWRpbmcgYm90aCBgdGhpc2AgYW5kIGBvdGhlcmAuCiAgICoKICAgKiBUaGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIG9yZGVyLAogICAqIHNvIGB4LmdjZCh5KWAgaXMgIGFsd2F5cyB0aGUgc2FtZSBhcyBgeS5nY2QoeClgLgogICAqCiAgICogRm9yIGFueSBpbnRlZ2VyIGB4YCwgYHguZ2NkKHgpYCBpcyBgeC5hYnMoKWAuCiAgICoKICAgKiBJZiBib3RoIGB0aGlzYCBhbmQgYG90aGVyYCBpcyB6ZXJvLCB0aGUgcmVzdWx0IGlzIGFsc28gemVyby4KICAgKi8KICBfQmlnSW50SW1wbCBnY2QoQmlnSW50IGJpZ0ludCkgewogICAgX0JpZ0ludEltcGwgb3RoZXIgPSBiaWdJbnQ7CiAgICBpZiAoX2lzWmVybykgcmV0dXJuIG90aGVyLmFicygpOwogICAgaWYgKG90aGVyLl9pc1plcm8pIHJldHVybiB0aGlzLmFicygpOwogICAgcmV0dXJuIF9iaW5hcnlHY2QodGhpcywgb3RoZXIsIGZhbHNlKTsKICB9CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxlYXN0IHNpZ25pZmljYW50IFt3aWR0aF0gYml0cyBvZiB0aGlzIGJpZyBpbnRlZ2VyIGFzIGEKICAgKiBub24tbmVnYXRpdmUgbnVtYmVyIChpLmUuIHVuc2lnbmVkIHJlcHJlc2VudGF0aW9uKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBoYXMKICAgKiB6ZXJvcyBpbiBhbGwgYml0IHBvc2l0aW9ucyBoaWdoZXIgdGhhbiBbd2lkdGhdLgogICAqCiAgICogYGBgCiAgICogbmV3IEJpZ0ludC5mcm9tKC0xKS50b1Vuc2lnbmVkKDUpID09IDMxICAgLy8gMTExMTExMTEgIC0+ICAwMDAxMTExMQogICAqIGBgYAogICAqCiAgICogVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gc2ltdWxhdGUgYXJpdGhtZXRpYyBmcm9tIGxvdyBsZXZlbCBsYW5ndWFnZXMuCiAgICogRm9yIGV4YW1wbGUsIHRvIGluY3JlbWVudCBhbiA4IGJpdCBxdWFudGl0eToKICAgKgogICAqIGBgYAogICAqIHEgPSAocSArIDEpLnRvVW5zaWduZWQoOCk7CiAgICogYGBgCiAgICoKICAgKiBgcWAgd2lsbCBjb3VudCBmcm9tIGAwYCB1cCB0byBgMjU1YCBhbmQgdGhlbiB3cmFwIGFyb3VuZCB0byBgMGAuCiAgICoKICAgKiBJZiB0aGUgaW5wdXQgZml0cyBpbiBbd2lkdGhdIGJpdHMgd2l0aG91dCB0cnVuY2F0aW9uLCB0aGUgcmVzdWx0IGlzIHRoZQogICAqIHNhbWUgYXMgdGhlIGlucHV0LiAgVGhlIG1pbmltdW0gd2lkdGggbmVlZGVkIHRvIGF2b2lkIHRydW5jYXRpb24gb2YgYHhgIGlzCiAgICogZ2l2ZW4gYnkgYHguYml0TGVuZ3RoYCwgaS5lLgogICAqCiAgICogYGBgCiAgICogeCA9PSB4LnRvVW5zaWduZWQoeC5iaXRMZW5ndGgpOwogICAqIGBgYAogICAqLwogIF9CaWdJbnRJbXBsIHRvVW5zaWduZWQoaW50IHdpZHRoKSB7CiAgICByZXR1cm4gdGhpcyAmICgob25lIDw8IHdpZHRoKSAtIG9uZSk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZWFzdCBzaWduaWZpY2FudCBbd2lkdGhdIGJpdHMgb2YgdGhpcyBpbnRlZ2VyLCBleHRlbmRpbmcgdGhlCiAgICogaGlnaGVzdCByZXRhaW5lZCBiaXQgdG8gdGhlIHNpZ24uICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRydW5jYXRpbmcgdGhlIHZhbHVlCiAgICogdG8gZml0IGluIFt3aWR0aF0gYml0cyB1c2luZyBhbiBzaWduZWQgMi1zIGNvbXBsZW1lbnQgcmVwcmVzZW50YXRpb24uICBUaGUKICAgKiByZXR1cm5lZCB2YWx1ZSBoYXMgdGhlIHNhbWUgYml0IHZhbHVlIGluIGFsbCBwb3NpdGlvbnMgaGlnaGVyIHRoYW4gW3dpZHRoXS4KICAgKgogICAqIGBgYAogICAqIHZhciBiaWcxNSA9IG5ldyBCaWdJbnQuZnJvbSgxNSk7CiAgICogdmFyIGJpZzE2ID0gbmV3IEJpZ0ludC5mcm9tKDE2KTsKICAgKiB2YXIgYmlnMjM5ID0gbmV3IEJpZ0ludC5mcm9tKDIzOSk7CiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFYtLXNpZ24gYml0LVYKICAgKiBiaWcxNi50b1NpZ25lZCg1KSA9PSAtYmlnMTYgICAvLyAgMDAwMTAwMDAgLT4gMTExMTAwMDAKICAgKiBiaWcyMzkudG9TaWduZWQoNSkgPT0gYmlnMTUgICAvLyAgMTExMDExMTEgLT4gMDAwMDExMTEKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXiAgICAgICAgICAgXgogICAqIGBgYAogICAqCiAgICogVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gc2ltdWxhdGUgYXJpdGhtZXRpYyBmcm9tIGxvdyBsZXZlbCBsYW5ndWFnZXMuCiAgICogRm9yIGV4YW1wbGUsIHRvIGluY3JlbWVudCBhbiA4IGJpdCBzaWduZWQgcXVhbnRpdHk6CiAgICoKICAgKiBgYGAKICAgKiBxID0gKHEgKyAxKS50b1NpZ25lZCg4KTsKICAgKiBgYGAKICAgKgogICAqIGBxYCB3aWxsIGNvdW50IGZyb20gYDBgIHVwIHRvIGAxMjdgLCB3cmFwIHRvIGAtMTI4YCBhbmQgY291bnQgYmFjayB1cCB0bwogICAqIGAxMjdgLgogICAqCiAgICogSWYgdGhlIGlucHV0IHZhbHVlIGZpdHMgaW4gW3dpZHRoXSBiaXRzIHdpdGhvdXQgdHJ1bmNhdGlvbiwgdGhlIHJlc3VsdCBpcwogICAqIHRoZSBzYW1lIGFzIHRoZSBpbnB1dC4gIFRoZSBtaW5pbXVtIHdpZHRoIG5lZWRlZCB0byBhdm9pZCB0cnVuY2F0aW9uIG9mIGB4YAogICAqIGlzIGB4LmJpdExlbmd0aCArIDFgLCBpLmUuCiAgICoKICAgKiBgYGAKICAgKiB4ID09IHgudG9TaWduZWQoeC5iaXRMZW5ndGggKyAxKTsKICAgKiBgYGAKICAgKi8KICBfQmlnSW50SW1wbCB0b1NpZ25lZChpbnQgd2lkdGgpIHsKICAgIC8vIFRoZSB2YWx1ZSBvZiBiaW5hcnkgbnVtYmVyIHdlaWdodHMgZWFjaCBiaXQgYnkgYSBwb3dlciBvZiB0d28uICBUaGUKICAgIC8vIHR3b3MtY29tcGxlbWVudCB2YWx1ZSB3ZWlnaHRzIHRoZSBzaWduIGJpdCBuZWdhdGl2ZWx5LiAgV2UgY29tcHV0ZSB0aGUKICAgIC8vIHZhbHVlIG9mIHRoZSBuZWdhdGl2ZSB3ZWlnaHRpbmcgYnkgaXNvbGF0aW5nIHRoZSBzaWduIGJpdCB3aXRoIHRoZQogICAgLy8gY29ycmVjdCBwb3dlciBvZiB0d28gd2VpZ2h0aW5nIGFuZCBzdWJ0cmFjdGluZyBpdCBmcm9tIHRoZSB2YWx1ZSBvZiB0aGUKICAgIC8vIGxvd2VyIGJpdHMuCiAgICB2YXIgc2lnbk1hc2sgPSBvbmUgPDwgKHdpZHRoIC0gMSk7CiAgICByZXR1cm4gKHRoaXMgJiAoc2lnbk1hc2sgLSBvbmUpKSAtICh0aGlzICYgc2lnbk1hc2spOwogIH0KCiAgYm9vbCBnZXQgaXNWYWxpZEludCB7CiAgICBhc3NlcnQoX2RpZ2l0Qml0cyA9PSAzMik7CiAgICByZXR1cm4gX3VzZWQgPCAyIHx8CiAgICAgICAgKF91c2VkID09IDIgJiYKICAgICAgICAgICAgKF9kaWdpdHNbMV0gPCAweDgwMDAwMDAwIHx8CiAgICAgICAgICAgICAgICAoX2lzTmVnYXRpdmUgJiYgX2RpZ2l0c1sxXSA9PSAweDgwMDAwMDAwICYmIF9kaWdpdHNbMF0gPT0gMCkpKTsKICB9CgogIGludCB0b0ludCgpIHsKICAgIGFzc2VydChfZGlnaXRCaXRzID09IDMyKTsKICAgIGlmIChfdXNlZCA9PSAwKSByZXR1cm4gMDsKICAgIGlmIChfdXNlZCA9PSAxKSByZXR1cm4gX2lzTmVnYXRpdmUgPyAtX2RpZ2l0c1swXSA6IF9kaWdpdHNbMF07CiAgICBpZiAoX3VzZWQgPT0gMiAmJiBfZGlnaXRzWzFdIDwgMHg4MDAwMDAwMCkgewogICAgICB2YXIgcmVzdWx0ID0gKF9kaWdpdHNbMV0gPDwgX2RpZ2l0Qml0cykgfCBfZGlnaXRzWzBdOwogICAgICByZXR1cm4gX2lzTmVnYXRpdmUgPyAtcmVzdWx0IDogcmVzdWx0OwogICAgfQogICAgcmV0dXJuIF9pc05lZ2F0aXZlID8gX21pbkludCA6IF9tYXhJbnQ7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoaXMgW19CaWdJbnRJbXBsXSBhcyBhIFtkb3VibGVdLgogICAqCiAgICogSWYgdGhlIG51bWJlciBpcyBub3QgcmVwcmVzZW50YWJsZSBhcyBhIFtkb3VibGVdLCBhbgogICAqIGFwcHJveGltYXRpb24gaXMgcmV0dXJuZWQuIEZvciBudW1lcmljYWxseSBsYXJnZSBpbnRlZ2VycywgdGhlCiAgICogYXBwcm94aW1hdGlvbiBtYXkgYmUgaW5maW5pdGUuCiAgICovCiAgZG91YmxlIHRvRG91YmxlKCkgewogICAgY29uc3QgaW50IGV4cG9uZW50QmlhcyA9IDEwNzU7CiAgICAvLyBUaGVyZSBhcmUgMTEgYml0cyBmb3IgdGhlIGV4cG9uZW50LgogICAgLy8gMjA0NyAoYWxsIGJpdHMgc2V0IHRvIDEpIGlzIHJlc2VydmVkIGZvciBpbmZpbml0eSBhbmQgTmFOLgogICAgLy8gV2hlbiBzdG9yaW5nIHRoZSBleHBvbmVudCBpbiB0aGUgMTEgYml0cywgaXQgaXMgYmlhc2VkIGJ5IGV4cG9uZW50QmlhcwogICAgLy8gdG8gc3VwcG9ydCBuZWdhdGl2ZSBleHBvbmVudHMuCiAgICBjb25zdCBpbnQgbWF4RG91YmxlRXhwb25lbnQgPSAyMDQ2IC0gZXhwb25lbnRCaWFzOwogICAgaWYgKF9pc1plcm8pIHJldHVybiAwLjA7CgogICAgLy8gV2UgZmlsbCB0aGUgNTMgYml0cyBsaXR0bGUtZW5kaWFuLgogICAgdmFyIHJlc3VsdEJpdHMgPSBuZXcgVWludDhMaXN0KDgpOwoKICAgIHZhciBsZW5ndGggPSBfZGlnaXRCaXRzICogKF91c2VkIC0gMSkgKyBfZGlnaXRzW191c2VkIC0gMV0uYml0TGVuZ3RoOwogICAgaWYgKGxlbmd0aCA+IG1heERvdWJsZUV4cG9uZW50ICsgNTMpIHsKICAgICAgcmV0dXJuIF9pc05lZ2F0aXZlID8gZG91YmxlLm5lZ2F0aXZlSW5maW5pdHkgOiBkb3VibGUuaW5maW5pdHk7CiAgICB9CgogICAgLy8gVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGlzIGZvciB0aGUgc2lnbi4KICAgIGlmIChfaXNOZWdhdGl2ZSkgcmVzdWx0Qml0c1s3XSA9IDB4ODA7CgogICAgLy8gV3JpdGUgdGhlIGV4cG9uZW50IGludG8gYml0cyAxLi4xMjoKICAgIHZhciBiaWFzZWRFeHBvbmVudCA9IGxlbmd0aCAtIDUzICsgZXhwb25lbnRCaWFzOwogICAgcmVzdWx0Qml0c1s2XSA9IChiaWFzZWRFeHBvbmVudCAmIDB4RikgPDwgNDsKICAgIHJlc3VsdEJpdHNbN10gfD0gYmlhc2VkRXhwb25lbnQgPj4gNDsKCiAgICBpbnQgY2FjaGVkQml0cyA9IDA7CiAgICBpbnQgY2FjaGVkQml0c0xlbmd0aCA9IDA7CiAgICBpbnQgZGlnaXRJbmRleCA9IF91c2VkIC0gMTsKICAgIGludCByZWFkQml0cyhpbnQgbikgewogICAgICAvLyBFbnN1cmUgdGhhdCB3ZSBoYXZlIGVub3VnaCBiaXRzIGluIFtjYWNoZWRCaXRzXS4KICAgICAgd2hpbGUgKGNhY2hlZEJpdHNMZW5ndGggPCBuKSB7CiAgICAgICAgaW50IG5leHREaWdpdDsKICAgICAgICBpbnQgbmV4dERpZ2l0TGVuZ3RoID0gX2RpZ2l0Qml0czsgLy8gTWF5IGdldCB1cGRhdGVkLgogICAgICAgIGlmIChkaWdpdEluZGV4IDwgMCkgewogICAgICAgICAgbmV4dERpZ2l0ID0gMDsKICAgICAgICAgIGRpZ2l0SW5kZXgtLTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbmV4dERpZ2l0ID0gX2RpZ2l0c1tkaWdpdEluZGV4XTsKICAgICAgICAgIGlmIChkaWdpdEluZGV4ID09IF91c2VkIC0gMSkgbmV4dERpZ2l0TGVuZ3RoID0gbmV4dERpZ2l0LmJpdExlbmd0aDsKICAgICAgICAgIGRpZ2l0SW5kZXgtLTsKICAgICAgICB9CiAgICAgICAgY2FjaGVkQml0cyA9IChjYWNoZWRCaXRzIDw8IG5leHREaWdpdExlbmd0aCkgKyBuZXh0RGlnaXQ7CiAgICAgICAgY2FjaGVkQml0c0xlbmd0aCArPSBuZXh0RGlnaXRMZW5ndGg7CiAgICAgIH0KICAgICAgLy8gUmVhZCB0aGUgdG9wIFtuXSBiaXRzLgogICAgICB2YXIgcmVzdWx0ID0gY2FjaGVkQml0cyA+PiAoY2FjaGVkQml0c0xlbmd0aCAtIG4pOwogICAgICAvLyBSZW1vdmUgdGhlIGJpdHMgZnJvbSB0aGUgY2FjaGUuCiAgICAgIGNhY2hlZEJpdHMgLT0gcmVzdWx0IDw8IChjYWNoZWRCaXRzTGVuZ3RoIC0gbik7CiAgICAgIGNhY2hlZEJpdHNMZW5ndGggLT0gbjsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KCiAgICAvLyBUaGUgZmlyc3QgbGVhZGluZyAxIGJpdCBpcyBpbXBsaWNpdCBpbiB0aGUgZG91YmxlLXJlcHJlc2VudGF0aW9uIGFuZCBjYW4KICAgIC8vIGJlIGRpc2NhcmRlZC4KICAgIHZhciBsZWFkaW5nQml0cyA9IHJlYWRCaXRzKDUpICYgMHhGOwogICAgcmVzdWx0Qml0c1s2XSB8PSBsZWFkaW5nQml0czsKCiAgICBmb3IgKGludCBpID0gNTsgaSA+PSAwOyBpLS0pIHsKICAgICAgLy8gR2V0IHRoZSByZW1haW5pbmcgNDggYml0cy4KICAgICAgcmVzdWx0Qml0c1tpXSA9IHJlYWRCaXRzKDgpOwogICAgfQoKICAgIHZvaWQgcm91bmRVcCgpIHsKICAgICAgLy8gU2ltcGx5IGNvbnNpc3RzIG9mIGFkZGluZyAxIHRvIHRoZSB3aG9sZSA2NCBiaXQgIm51bWJlciIuCiAgICAgIC8vIEl0IHdpbGwgdXBkYXRlIHRoZSBleHBvbmVudCwgaWYgbmVjZXNzYXJ5LgogICAgICAvLyBJdCBtaWdodCBldmVuIHJvdW5kIHVwIHRvIGluZmluaXR5ICh3aGljaCBpcyB3aGF0IHdlIHdhbnQpLgogICAgICB2YXIgY2FycnkgPSAxOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IDg7IGkrKykgewogICAgICAgIGlmIChjYXJyeSA9PSAwKSBicmVhazsKICAgICAgICB2YXIgc3VtID0gcmVzdWx0Qml0c1tpXSArIGNhcnJ5OwogICAgICAgIHJlc3VsdEJpdHNbaV0gPSBzdW0gJiAweEZGOwogICAgICAgIGNhcnJ5ID0gc3VtID4+IDg7CiAgICAgIH0KICAgIH0KCiAgICBpZiAocmVhZEJpdHMoMSkgPT0gMSkgewogICAgICBpZiAocmVzdWx0Qml0c1swXS5pc09kZCkgewogICAgICAgIC8vIFJvdW5kcyB0byBldmVuIGFsbCB0aGUgdGltZS4KICAgICAgICByb3VuZFVwKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gUm91bmQgdXAsIGlmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBvdGhlciBkaWdpdCB0aGF0IGlzIG5vdCAwLgogICAgICAgIGlmIChjYWNoZWRCaXRzICE9IDApIHsKICAgICAgICAgIC8vIFRoZXJlIGlzIGFscmVhZHkgb25lIGluIHRoZSBjYWNoZWRCaXRzLgogICAgICAgICAgcm91bmRVcCgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBmb3IgKGludCBpID0gZGlnaXRJbmRleDsgZGlnaXRJbmRleCA+PSAwOyBpLS0pIHsKICAgICAgICAgICAgaWYgKF9kaWdpdHNbaV0gIT0gMCkgewogICAgICAgICAgICAgIHJvdW5kVXAoKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdEJpdHMuYnVmZmVyLmFzQnl0ZURhdGEoKS5nZXRGbG9hdDY0KDAsIEVuZGlhbi5saXR0bGUpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIFN0cmluZy1yZXByZXNlbnRhdGlvbiBvZiB0aGlzIGludGVnZXIuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgc3RyaW5nIGlzIHBhcnNhYmxlIGJ5IFtwYXJzZV0uCiAgICogRm9yIGFueSBgX0JpZ0ludEltcGxgIGBpYCwgaXQgaXMgZ3VhcmFudGVlZCB0aGF0CiAgICogYGkgPT0gX0JpZ0ludEltcGwucGFyc2UoaS50b1N0cmluZygpKWAuCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaWYgKF91c2VkID09IDApIHJldHVybiAiMCI7CiAgICBpZiAoX3VzZWQgPT0gMSkgewogICAgICBpZiAoX2lzTmVnYXRpdmUpIHJldHVybiAoLV9kaWdpdHNbMF0pLnRvU3RyaW5nKCk7CiAgICAgIHJldHVybiBfZGlnaXRzWzBdLnRvU3RyaW5nKCk7CiAgICB9CgogICAgLy8gR2VuZXJhdGUgaW4gY2h1bmtzIG9mIDkgZGlnaXRzLgogICAgLy8gVGhlIGNodW5rcyBhcmUgaW4gcmV2ZXJzZWQgb3JkZXIuCiAgICB2YXIgZGVjaW1hbERpZ2l0Q2h1bmtzID0gPFN0cmluZz5bXTsKICAgIHZhciByZXN0ID0gaXNOZWdhdGl2ZSA/IC10aGlzIDogdGhpczsKICAgIHdoaWxlIChyZXN0Ll91c2VkID4gMSkgewogICAgICB2YXIgZGlnaXRzOSA9IHJlc3QucmVtYWluZGVyKF9vbmVCaWxsaW9uKS50b1N0cmluZygpOwogICAgICBkZWNpbWFsRGlnaXRDaHVua3MuYWRkKGRpZ2l0czkpOwogICAgICB2YXIgemVyb3MgPSA5IC0gZGlnaXRzOS5sZW5ndGg7CiAgICAgIGlmICh6ZXJvcyA9PSA4KSB7CiAgICAgICAgZGVjaW1hbERpZ2l0Q2h1bmtzLmFkZCgiMDAwMDAwMDAiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoemVyb3MgPj0gNCkgewogICAgICAgICAgemVyb3MgLT0gNDsKICAgICAgICAgIGRlY2ltYWxEaWdpdENodW5rcy5hZGQoIjAwMDAiKTsKICAgICAgICB9CiAgICAgICAgaWYgKHplcm9zID49IDIpIHsKICAgICAgICAgIHplcm9zIC09IDI7CiAgICAgICAgICBkZWNpbWFsRGlnaXRDaHVua3MuYWRkKCIwMCIpOwogICAgICAgIH0KICAgICAgICBpZiAoemVyb3MgPj0gMSkgewogICAgICAgICAgZGVjaW1hbERpZ2l0Q2h1bmtzLmFkZCgiMCIpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXN0ID0gcmVzdCB+LyBfb25lQmlsbGlvbjsKICAgIH0KICAgIGRlY2ltYWxEaWdpdENodW5rcy5hZGQocmVzdC5fZGlnaXRzWzBdLnRvU3RyaW5nKCkpOwogICAgaWYgKF9pc05lZ2F0aXZlKSBkZWNpbWFsRGlnaXRDaHVua3MuYWRkKCItIik7CiAgICByZXR1cm4gZGVjaW1hbERpZ2l0Q2h1bmtzLnJldmVyc2VkLmpvaW4oKTsKICB9CgogIGludCBfdG9SYWRpeENvZGVVbml0KGludCBkaWdpdCkgewogICAgY29uc3QgaW50IF8wID0gNDg7CiAgICBjb25zdCBpbnQgX2EgPSA5NzsKICAgIGlmIChkaWdpdCA8IDEwKSByZXR1cm4gXzAgKyBkaWdpdDsKICAgIHJldHVybiBfYSArIGRpZ2l0IC0gMTA7CiAgfQoKICAvKioKICAgKiBDb252ZXJ0cyBbdGhpc10gdG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gdGhlIGdpdmVuIFtyYWRpeF0uCiAgICoKICAgKiBJbiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLCBsb3dlci1jYXNlIGxldHRlcnMgYXJlIHVzZWQgZm9yIGRpZ2l0cyBhYm92ZQogICAqICc5Jywgd2l0aCAnYScgYmVpbmcgMTAgYW4gJ3onIGJlaW5nIDM1LgogICAqCiAgICogVGhlIFtyYWRpeF0gYXJndW1lbnQgbXVzdCBiZSBhbiBpbnRlZ2VyIGluIHRoZSByYW5nZSAyIHRvIDM2LgogICAqLwogIFN0cmluZyB0b1JhZGl4U3RyaW5nKGludCByYWRpeCkgewogICAgaWYgKHJhZGl4ID4gMzYpIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHJhZGl4LCAyLCAzNik7CgogICAgaWYgKF91c2VkID09IDApIHJldHVybiAiMCI7CgogICAgaWYgKF91c2VkID09IDEpIHsKICAgICAgdmFyIGRpZ2l0U3RyaW5nID0gX2RpZ2l0c1swXS50b1JhZGl4U3RyaW5nKHJhZGl4KTsKICAgICAgaWYgKF9pc05lZ2F0aXZlKSByZXR1cm4gIi0iICsgZGlnaXRTdHJpbmc7CiAgICAgIHJldHVybiBkaWdpdFN0cmluZzsKICAgIH0KCiAgICBpZiAocmFkaXggPT0gMTYpIHJldHVybiBfdG9IZXhTdHJpbmcoKTsKCiAgICB2YXIgYmFzZSA9IG5ldyBfQmlnSW50SW1wbC5fZnJvbUludChyYWRpeCk7CiAgICB2YXIgcmV2ZXJzZWREaWdpdENvZGVVbml0cyA9IDxpbnQ+W107CiAgICB2YXIgcmVzdCA9IHRoaXMuYWJzKCk7CiAgICB3aGlsZSAoIXJlc3QuX2lzWmVybykgewogICAgICB2YXIgZGlnaXQgPSByZXN0LnJlbWFpbmRlcihiYXNlKS50b0ludCgpOwogICAgICByZXN0ID0gcmVzdCB+LyBiYXNlOwogICAgICByZXZlcnNlZERpZ2l0Q29kZVVuaXRzLmFkZChfdG9SYWRpeENvZGVVbml0KGRpZ2l0KSk7CiAgICB9CiAgICB2YXIgZGlnaXRTdHJpbmcgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMocmV2ZXJzZWREaWdpdENvZGVVbml0cy5yZXZlcnNlZCk7CiAgICBpZiAoX2lzTmVnYXRpdmUpIHJldHVybiAiLSIgKyBkaWdpdFN0cmluZzsKICAgIHJldHVybiBkaWdpdFN0cmluZzsKICB9CgogIFN0cmluZyBfdG9IZXhTdHJpbmcoKSB7CiAgICB2YXIgY2hhcnMgPSA8aW50PltdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfdXNlZCAtIDE7IGkrKykgewogICAgICBpbnQgY2h1bmsgPSBfZGlnaXRzW2ldOwogICAgICBmb3IgKGludCBqID0gMDsgaiA8IChfZGlnaXRCaXRzIH4vIDQpOyBqKyspIHsKICAgICAgICBjaGFycy5hZGQoX3RvUmFkaXhDb2RlVW5pdChjaHVuayAmIDB4RikpOwogICAgICAgIGNodW5rID4+PSA0OwogICAgICB9CiAgICB9CiAgICB2YXIgbXNiQ2h1bmsgPSBfZGlnaXRzW191c2VkIC0gMV07CiAgICB3aGlsZSAobXNiQ2h1bmsgIT0gMCkgewogICAgICBjaGFycy5hZGQoX3RvUmFkaXhDb2RlVW5pdChtc2JDaHVuayAmIDB4RikpOwogICAgICBtc2JDaHVuayA+Pj0gNDsKICAgIH0KICAgIGlmIChfaXNOZWdhdGl2ZSkgewogICAgICBjb25zdCBfZGFzaCA9IDQ1OwogICAgICBjaGFycy5hZGQoX2Rhc2gpOwogICAgfQogICAgcmV0dXJuIG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhjaGFycy5yZXZlcnNlZCk7CiAgfQp9CgovLyBJbnRlcmZhY2UgZm9yIG1vZHVsYXIgcmVkdWN0aW9uLgphYnN0cmFjdCBjbGFzcyBfQmlnSW50UmVkdWN0aW9uIHsKICBpbnQgZ2V0IF9ub3JtTW9kdWx1c1VzZWQ7CiAgLy8gUmV0dXJuIHRoZSBudW1iZXIgb2YgZGlnaXRzIHVzZWQgYnkgcmVzdWx0RGlnaXRzLgogIGludCBfY29udmVydChfQmlnSW50SW1wbCB4LCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cyk7CiAgaW50IF9tdWwoVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIFVpbnQzMkxpc3QgeURpZ2l0cywgaW50IHlVc2VkLAogICAgICBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cyk7CiAgaW50IF9zcXIoVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQsIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKTsKCiAgLy8gUmV0dXJuIHggcmV2ZXJ0ZWQgdG8gX0JpZ0ludEltcGwuCiAgX0JpZ0ludEltcGwgX3JldmVydChVaW50MzJMaXN0IHhEaWdpdHMsIGludCB4VXNlZCk7Cn0KCi8vIE1vbnRnb21lcnkgcmVkdWN0aW9uIG9uIF9CaWdJbnRJbXBsLgpjbGFzcyBfQmlnSW50TW9udGdvbWVyeVJlZHVjdGlvbiBpbXBsZW1lbnRzIF9CaWdJbnRSZWR1Y3Rpb24gewogIGZpbmFsIF9CaWdJbnRJbXBsIF9tb2R1bHVzOwogIGludCBfbm9ybU1vZHVsdXNVc2VkOyAvLyBFdmVuIGlmIHByb2Nlc3NpbmcgNjQtYml0IChkaWdpdCBwYWlycykuCiAgVWludDMyTGlzdCBfbW9kdWx1c0RpZ2l0czsKICBVaW50MzJMaXN0IF9hcmdzOwogIGludCBfZGlnaXRzUGVyU3RlcDsgLy8gTnVtYmVyIG9mIGRpZ2l0cyBwcm9jZXNzZWQgaW4gb25lIHN0ZXAuIDEgb3IgMi4KICBzdGF0aWMgY29uc3QgaW50IF94RGlnaXQgPSAwOyAvLyBJbmRleCBvZiBkaWdpdCBvZiB4LgogIHN0YXRpYyBjb25zdCBpbnQgX3hIaWdoRGlnaXQgPSAxOyAvLyBJbmRleCBvZiBoaWdoIGRpZ2l0IG9mIHggKDY0LWJpdCBvbmx5KS4KICBzdGF0aWMgY29uc3QgaW50IF9yaG9EaWdpdCA9IDI7IC8vIEluZGV4IG9mIGRpZ2l0IG9mIHJoby4KICBzdGF0aWMgY29uc3QgaW50IF9yaG9IaWdoRGlnaXQgPSAzOyAvLyBJbmRleCBvZiBoaWdoIGRpZ2l0IG9mIHJobyAoNjQtYml0KS4KICBzdGF0aWMgY29uc3QgaW50IF9tdURpZ2l0ID0gNDsgLy8gSW5kZXggb2YgbXUuCiAgc3RhdGljIGNvbnN0IGludCBfbXVIaWdoRGlnaXQgPSA1OyAvLyBJbmRleCBvZiBoaWdoIDMyLWJpdHMgb2YgbXUgKDY0LWJpdCkuCgogIF9CaWdJbnRNb250Z29tZXJ5UmVkdWN0aW9uKHRoaXMuX21vZHVsdXMpIHsKICAgIF9tb2R1bHVzRGlnaXRzID0gX21vZHVsdXMuX2RpZ2l0czsKICAgIF9hcmdzID0gX25ld0RpZ2l0cyg2KTsKICAgIC8vIERldGVybWluZSBpZiB3ZSBjYW4gcHJvY2VzcyBkaWdpdCBwYWlycyBieSBjYWxsaW5nIGFuIGludHJpbnNpYy4KICAgIF9kaWdpdHNQZXJTdGVwID0gX211bE1vZChfYXJncywgX2FyZ3MsIDApOwogICAgX2FyZ3NbX3hEaWdpdF0gPSBfbW9kdWx1c0RpZ2l0c1swXTsKICAgIGlmIChfZGlnaXRzUGVyU3RlcCA9PSAxKSB7CiAgICAgIF9ub3JtTW9kdWx1c1VzZWQgPSBfbW9kdWx1cy5fdXNlZDsKICAgICAgX2ludkRpZ2l0KF9hcmdzKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChfZGlnaXRzUGVyU3RlcCA9PSAyKTsKICAgICAgX25vcm1Nb2R1bHVzVXNlZCA9IF9tb2R1bHVzLl91c2VkICsgKF9tb2R1bHVzLl91c2VkICYgMSk7CiAgICAgIF9hcmdzW194SGlnaERpZ2l0XSA9IF9tb2R1bHVzRGlnaXRzWzFdOwogICAgICBfaW52RGlnaXRQYWlyKF9hcmdzKTsKICAgIH0KICB9CgogIC8vIENhbGN1bGF0ZXMgLTEveCAlIF9kaWdpdEJhc2UsIHggaXMgMzItYml0IGRpZ2l0LgogIC8vICAgICAgICAgeHkgPT0gMSAobW9kIG0pCiAgLy8gICAgICAgICB4eSA9ICAxK2ttCiAgLy8gICB4eSgyLXh5KSA9ICgxK2ttKSgxLWttKQogIC8vIHgoeSgyLXh5KSkgPSAxLWteMiBtXjIKICAvLyB4KHkoMi14eSkpID09IDEgKG1vZCBtXjIpCiAgLy8gaWYgeSBpcyAxL3ggbW9kIG0sIHRoZW4geSgyLXh5KSBpcyAxL3ggbW9kIG1eMgogIC8vIFNob3VsZCByZWR1Y2UgeCBhbmQgeSgyLXh5KSBieSBtXjIgYXQgZWFjaCBzdGVwIHRvIGtlZXAgc2l6ZSBib3VuZGVkLgogIC8vCiAgLy8gT3BlcmF0aW9uOgogIC8vICAgYXJnc1tfcmhvRGlnaXRdID0gMS9hcmdzW194RGlnaXRdIG1vZCBfZGlnaXRCYXNlLgogIHN0YXRpYyB2b2lkIF9pbnZEaWdpdChVaW50MzJMaXN0IGFyZ3MpIHsKICAgIHZhciB4ID0gYXJnc1tfeERpZ2l0XTsKICAgIHZhciB5ID0geCAmIDM7IC8vIHkgPT0gMS94IG1vZCAyXjIKICAgIHkgPSAoeSAqICgyIC0gKHggJiAweGYpICogeSkpICYgMHhmOyAvLyB5ID09IDEveCBtb2QgMl40CiAgICB5ID0gKHkgKiAoMiAtICh4ICYgMHhmZikgKiB5KSkgJiAweGZmOyAvLyB5ID09IDEveCBtb2QgMl44CiAgICB5ID0gKHkgKiAoMiAtICgoKHggJiAweGZmZmYpICogeSkgJiAweGZmZmYpKSkgJiAweGZmZmY7IC8vIHkgPT0gMS94IG1vZCAyXjE2CiAgICB5ID0gKHkgKiAoMiAtIHggKiB5ICUgX0JpZ0ludEltcGwuX2RpZ2l0QmFzZSkpICUgX0JpZ0ludEltcGwuX2RpZ2l0QmFzZTsKICAgIC8vIHkgPT0gMS94IG1vZCBfZGlnaXRCYXNlCiAgICB5ID0gLXk7IC8vIFdlIHJlYWxseSB3YW50IHRoZSBuZWdhdGl2ZSBpbnZlcnNlLgogICAgYXJnc1tfcmhvRGlnaXRdID0geSAmIF9CaWdJbnRJbXBsLl9kaWdpdE1hc2s7CiAgICBhc3NlcnQoKCh4ICogeSkgJiBfQmlnSW50SW1wbC5fZGlnaXRNYXNrKSA9PSBfQmlnSW50SW1wbC5fZGlnaXRNYXNrKTsKICB9CgogIC8vIENhbGN1bGF0ZXMgLTEveCAlIF9kaWdpdEJhc2VeMiwgeCBpcyBhIHBhaXIgb2YgMzItYml0IGRpZ2l0cy4KICAvLyBPcGVyYXRpb246CiAgLy8gICBhcmdzW19yaG9EaWdpdC4uX3Job0hpZ2hEaWdpdF0gPQogIC8vICAgICAxL2FyZ3NbX3hEaWdpdC4uX3hIaWdoRGlnaXRdIG1vZCBfZGlnaXRCYXNlXjIuCiAgc3RhdGljIHZvaWQgX2ludkRpZ2l0UGFpcihVaW50MzJMaXN0IGFyZ3MpIHsKICAgIHZhciB4bCA9IGFyZ3NbX3hEaWdpdF07IC8vIExvd2VyIDMyLWJpdCBkaWdpdCBvZiB4LgogICAgdmFyIHkgPSB4bCAmIDM7IC8vIHkgPT0gMS94IG1vZCAyXjIKICAgIHkgPSAoeSAqICgyIC0gKHhsICYgMHhmKSAqIHkpKSAmIDB4ZjsgLy8geSA9PSAxL3ggbW9kIDJeNAogICAgeSA9ICh5ICogKDIgLSAoeGwgJiAweGZmKSAqIHkpKSAmIDB4ZmY7IC8vIHkgPT0gMS94IG1vZCAyXjgKICAgIHkgPSAoeSAqICgyIC0gKCgoeGwgJiAweGZmZmYpICogeSkgJiAweGZmZmYpKSkgJiAweGZmZmY7CiAgICAvLyB5ID09IDEveCBtb2QgMl4xNgogICAgeSA9ICh5ICogKDIgLSAoKHhsICogeSkgJiAweGZmZmZmZmZmKSkpICYgMHhmZmZmZmZmZjsgLy8geSA9PSAxL3ggbW9kIDJeMzIKICAgIHZhciB4ID0gKGFyZ3NbX3hIaWdoRGlnaXRdIDw8IF9CaWdJbnRJbXBsLl9kaWdpdEJpdHMpIHwgeGw7CiAgICB5ICo9IDIgLSB4ICogeTsgLy8gTWFza2luZyB3aXRoIDJeNjQtMSBpcyBpbXBsaWVkIGJ5IDY0LWJpdCBhcml0aG1ldGljLgogICAgLy8geSA9PSAxL3ggbW9kIF9kaWdpdEJhc2VeMgogICAgeSA9IC15OyAvLyBXZSByZWFsbHkgd2FudCB0aGUgbmVnYXRpdmUgaW52ZXJzZS4KICAgIGFyZ3NbX3Job0RpZ2l0XSA9IHkgJiBfQmlnSW50SW1wbC5fZGlnaXRNYXNrOwogICAgYXJnc1tfcmhvSGlnaERpZ2l0XSA9CiAgICAgICAgKHkgPj4gX0JpZ0ludEltcGwuX2RpZ2l0Qml0cykgJiBfQmlnSW50SW1wbC5fZGlnaXRNYXNrOwogICAgYXNzZXJ0KHggKiB5ID09IC0xKTsKICB9CgogIC8vIE9wZXJhdGlvbjoKICAvLyAgIGFyZ3NbX211RGlnaXRdID0gYXJnc1tfcmhvRGlnaXRdKmRpZ2l0c1tpXSBtb2QgX2RpZ2l0QmFzZS4KICAvLyAgIFJldHVybnMgMS4KICAvLyBOb3RlOiBJbnRyaW5zaWNzIG9uIDY0LWJpdCBwbGF0Zm9ybXMgcHJvY2VzcyBkaWdpdCBwYWlycyBhdCBldmVuIGluZGljZXM6CiAgLy8gICBhcmdzW19tdURpZ2l0Li5fbXVIaWdoRGlnaXRdID0KICAvLyAgICAgYXJnc1tfcmhvRGlnaXQuLl9yaG9IaWdoRGlnaXRdICogZGlnaXRzW2kuLmkrMV0gbW9kIF9kaWdpdEJhc2VeMi4KICAvLyAgIFJldHVybnMgMi4KICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBzdGF0aWMgaW50IF9tdWxNb2QoVWludDMyTGlzdCBhcmdzLCBVaW50MzJMaXN0IGRpZ2l0cywgaW50IGkpIHsKICAgIHZhciByaG9sID0gYXJnc1tfcmhvRGlnaXRdICYgX0JpZ0ludEltcGwuX2hhbGZEaWdpdE1hc2s7CiAgICB2YXIgcmhvaCA9IGFyZ3NbX3Job0RpZ2l0XSA+PiBfQmlnSW50SW1wbC5faGFsZkRpZ2l0Qml0czsKICAgIHZhciBkaCA9IGRpZ2l0c1tpXSA+PiBfQmlnSW50SW1wbC5faGFsZkRpZ2l0Qml0czsKICAgIHZhciBkbCA9IGRpZ2l0c1tpXSAmIF9CaWdJbnRJbXBsLl9oYWxmRGlnaXRNYXNrOwogICAgYXJnc1tfbXVEaWdpdF0gPSAoZGwgKiByaG9sICsKICAgICAgICAgICAgKCgoZGwgKiByaG9oICsgZGggKiByaG9sKSAmIF9CaWdJbnRJbXBsLl9oYWxmRGlnaXRNYXNrKSA8PAogICAgICAgICAgICAgICAgX0JpZ0ludEltcGwuX2hhbGZEaWdpdEJpdHMpKSAmCiAgICAgICAgX0JpZ0ludEltcGwuX2RpZ2l0TWFzazsKICAgIHJldHVybiAxOwogIH0KCiAgLy8gcmVzdWx0ID0geCpSIG1vZCBfbW9kdWx1cy4KICAvLyBSZXR1cm5zIHJlc3VsdFVzZWQuCiAgaW50IF9jb252ZXJ0KF9CaWdJbnRJbXBsIHgsIFVpbnQzMkxpc3QgcmVzdWx0RGlnaXRzKSB7CiAgICAvLyBNb250Z29tZXJ5IHJlZHVjdGlvbiBvbmx5IHdvcmtzIGlmIGFicyh4KSA8IF9tb2R1bHVzLgogICAgYXNzZXJ0KHguYWJzKCkgPCBfbW9kdWx1cyk7CiAgICBhc3NlcnQoX2RpZ2l0c1BlclN0ZXAgPT0gMSB8fCBfbm9ybU1vZHVsdXNVc2VkLmlzRXZlbik7CiAgICB2YXIgcmVzdWx0ID0geC5hYnMoKS5fZGxTaGlmdChfbm9ybU1vZHVsdXNVc2VkKS5fcmVtKF9tb2R1bHVzKTsKICAgIGlmICh4Ll9pc05lZ2F0aXZlICYmICFyZXN1bHQuX2lzTmVnYXRpdmUgJiYgcmVzdWx0Ll91c2VkID4gMCkgewogICAgICByZXN1bHQgPSBfbW9kdWx1cyAtIHJlc3VsdDsKICAgIH0KICAgIHZhciB1c2VkID0gcmVzdWx0Ll91c2VkOwogICAgdmFyIGRpZ2l0cyA9IHJlc3VsdC5fZGlnaXRzOwogICAgdmFyIGkgPSB1c2VkICsgKHVzZWQgJiAxKTsKICAgIHdoaWxlICgtLWkgPj0gMCkgewogICAgICByZXN1bHREaWdpdHNbaV0gPSBkaWdpdHNbaV07CiAgICB9CiAgICByZXR1cm4gdXNlZDsKICB9CgogIF9CaWdJbnRJbXBsIF9yZXZlcnQoVWludDMyTGlzdCB4RGlnaXRzLCBpbnQgeFVzZWQpIHsKICAgIC8vIFJlc2VydmUgZW5vdWdoIGRpZ2l0cyBmb3IgbW9kdWx1cyBzcXVhcmluZyBhbmQgYWNjdW11bGF0b3IgY2FycnkuCiAgICB2YXIgcmVzdWx0RGlnaXRzID0gX25ld0RpZ2l0cygyICogX25vcm1Nb2R1bHVzVXNlZCArIDIpOwogICAgdmFyIGkgPSB4VXNlZCArICh4VXNlZCAmIDEpOwogICAgd2hpbGUgKC0taSA+PSAwKSB7CiAgICAgIHJlc3VsdERpZ2l0c1tpXSA9IHhEaWdpdHNbaV07CiAgICB9CiAgICB2YXIgcmVzdWx0VXNlZCA9IF9yZWR1Y2UocmVzdWx0RGlnaXRzLCB4VXNlZCk7CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oZmFsc2UsIHJlc3VsdFVzZWQsIHJlc3VsdERpZ2l0cyk7CiAgfQoKICAvLyB4ID0geC9SIG1vZCBfbW9kdWx1cy4KICAvLyBSZXR1cm5zIHhVc2VkLgogIGludCBfcmVkdWNlKFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkKSB7CiAgICB3aGlsZSAoeFVzZWQgPCAyICogX25vcm1Nb2R1bHVzVXNlZCArIDIpIHsKICAgICAgLy8gUGFkIHggc28gX211bEFkZCBoYXMgZW5vdWdoIHJvb20gbGF0ZXIgZm9yIGEgcG9zc2libGUgY2FycnkuCiAgICAgIHhEaWdpdHNbeFVzZWQrK10gPSAwOwogICAgfQogICAgdmFyIGkgPSAwOwogICAgd2hpbGUgKGkgPCBfbm9ybU1vZHVsdXNVc2VkKSB7CiAgICAgIHZhciBkID0gX211bE1vZChfYXJncywgeERpZ2l0cywgaSk7CiAgICAgIGFzc2VydChkID09IF9kaWdpdHNQZXJTdGVwKTsKICAgICAgZCA9IF9CaWdJbnRJbXBsLl9tdWxBZGQoCiAgICAgICAgICBfYXJncywgX211RGlnaXQsIF9tb2R1bHVzRGlnaXRzLCAwLCB4RGlnaXRzLCBpLCBfbm9ybU1vZHVsdXNVc2VkKTsKICAgICAgYXNzZXJ0KGQgPT0gX2RpZ2l0c1BlclN0ZXApOwogICAgICBpICs9IGQ7CiAgICB9CiAgICAvLyBDbGFtcCB4LgogICAgd2hpbGUgKHhVc2VkID4gMCAmJiB4RGlnaXRzW3hVc2VkIC0gMV0gPT0gMCkgewogICAgICAtLXhVc2VkOwogICAgfQogICAgeFVzZWQgPSBfQmlnSW50SW1wbC5fZHJTaGlmdERpZ2l0cyh4RGlnaXRzLCB4VXNlZCwgaSwgeERpZ2l0cyk7CiAgICBpZiAoX0JpZ0ludEltcGwuX2NvbXBhcmVEaWdpdHMoCiAgICAgICAgICAgIHhEaWdpdHMsIHhVc2VkLCBfbW9kdWx1c0RpZ2l0cywgX25vcm1Nb2R1bHVzVXNlZCkgPj0KICAgICAgICAwKSB7CiAgICAgIF9CaWdJbnRJbXBsLl9hYnNTdWIoCiAgICAgICAgICB4RGlnaXRzLCB4VXNlZCwgX21vZHVsdXNEaWdpdHMsIF9ub3JtTW9kdWx1c1VzZWQsIHhEaWdpdHMpOwogICAgfQogICAgLy8gQ2xhbXAgeC4KICAgIHdoaWxlICh4VXNlZCA+IDAgJiYgeERpZ2l0c1t4VXNlZCAtIDFdID09IDApIHsKICAgICAgLS14VXNlZDsKICAgIH0KICAgIHJldHVybiB4VXNlZDsKICB9CgogIGludCBfc3FyKFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgdmFyIHJlc3VsdFVzZWQgPSBfQmlnSW50SW1wbC5fc3FyRGlnaXRzKHhEaWdpdHMsIHhVc2VkLCByZXN1bHREaWdpdHMpOwogICAgcmV0dXJuIF9yZWR1Y2UocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkKTsKICB9CgogIGludCBfbXVsKFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkLCBVaW50MzJMaXN0IHlEaWdpdHMsIGludCB5VXNlZCwKICAgICAgVWludDMyTGlzdCByZXN1bHREaWdpdHMpIHsKICAgIHZhciByZXN1bHRVc2VkID0KICAgICAgICBfQmlnSW50SW1wbC5fbXVsRGlnaXRzKHhEaWdpdHMsIHhVc2VkLCB5RGlnaXRzLCB5VXNlZCwgcmVzdWx0RGlnaXRzKTsKICAgIHJldHVybiBfcmVkdWNlKHJlc3VsdERpZ2l0cywgcmVzdWx0VXNlZCk7CiAgfQp9CgovLyBNb2R1bGFyIHJlZHVjdGlvbiB1c2luZyAiY2xhc3NpYyIgYWxnb3JpdGhtLgpjbGFzcyBfQmlnSW50Q2xhc3NpY1JlZHVjdGlvbiBpbXBsZW1lbnRzIF9CaWdJbnRSZWR1Y3Rpb24gewogIGZpbmFsIF9CaWdJbnRJbXBsIF9tb2R1bHVzOyAvLyBNb2R1bHVzLgogIGludCBfbm9ybU1vZHVsdXNVc2VkOwogIF9CaWdJbnRJbXBsIF9ub3JtTW9kdWx1czsgLy8gTm9ybWFsaXplZCBfbW9kdWx1cy4KICBVaW50MzJMaXN0IF9ub3JtTW9kdWx1c0RpZ2l0czsKICBVaW50MzJMaXN0IF9uZWdOb3JtTW9kdWx1c0RpZ2l0czsgLy8gTmVnYXRlZCBfbm9ybU1vZHVsdXMgZGlnaXRzLgogIGludCBfbW9kdWx1c05zaDsgLy8gTm9ybWFsaXphdGlvbiBzaGlmdCBhbW91bnQuCiAgVWludDMyTGlzdCBfYXJnczsgLy8gVG9wIF9ub3JtTW9kdWx1cyBkaWdpdChzKSBhbmQgcGxhY2UgaG9sZGVyIGZvciBlc3RpbWF0ZWQKICAvLyBxdW90aWVudCBkaWdpdChzKS4KICBVaW50MzJMaXN0IF90bXBEaWdpdHM7IC8vIFRlbXBvcmFyeSBkaWdpdHMgdXNlZCBkdXJpbmcgcmVkdWN0aW9uLgoKICBfQmlnSW50Q2xhc3NpY1JlZHVjdGlvbih0aGlzLl9tb2R1bHVzKSB7CiAgICAvLyBQcmVwcm9jZXNzIGFyZ3VtZW50cyB0byBfcmVtRGlnaXRzLgogICAgdmFyIG5zaCA9CiAgICAgICAgX0JpZ0ludEltcGwuX2RpZ2l0Qml0cyAtIF9tb2R1bHVzLl9kaWdpdHNbX21vZHVsdXMuX3VzZWQgLSAxXS5iaXRMZW5ndGg7CiAgICAvLyBGb3IgNjQtYml0IHByb2Nlc3NpbmcsIG1ha2Ugc3VyZSBfbmVnTm9ybU1vZHVsdXNEaWdpdHMgaGFzIGFuIGV2ZW4gbnVtYmVyCiAgICAvLyBvZiBkaWdpdHMuCiAgICBpZiAoX21vZHVsdXMuX3VzZWQuaXNPZGQpIHsKICAgICAgbnNoICs9IF9CaWdJbnRJbXBsLl9kaWdpdEJpdHM7CiAgICB9CiAgICBfbW9kdWx1c05zaCA9IG5zaDsKICAgIF9ub3JtTW9kdWx1cyA9IF9tb2R1bHVzIDw8IG5zaDsKICAgIF9ub3JtTW9kdWx1c1VzZWQgPSBfbm9ybU1vZHVsdXMuX3VzZWQ7CiAgICBfbm9ybU1vZHVsdXNEaWdpdHMgPSBfbm9ybU1vZHVsdXMuX2RpZ2l0czsKICAgIGFzc2VydChfbm9ybU1vZHVsdXNVc2VkLmlzRXZlbik7CiAgICBfYXJncyA9IF9uZXdEaWdpdHMoNCk7CiAgICBfYXJnc1tfQmlnSW50SW1wbC5fZGl2aXNvckxvd1RvcERpZ2l0XSA9CiAgICAgICAgX25vcm1Nb2R1bHVzRGlnaXRzW19ub3JtTW9kdWx1c1VzZWQgLSAyXTsKICAgIF9hcmdzW19CaWdJbnRJbXBsLl9kaXZpc29yVG9wRGlnaXRdID0KICAgICAgICBfbm9ybU1vZHVsdXNEaWdpdHNbX25vcm1Nb2R1bHVzVXNlZCAtIDFdOwogICAgLy8gTmVnYXRlIF9ub3JtTW9kdWx1cyBzbyB3ZSBjYW4gdXNlIF9tdWxBZGQgaW5zdGVhZCBvZgogICAgLy8gdW5pbXBsZW1lbnRlZCAgX211bFN1Yi4KICAgIHZhciBuZWdOb3JtTW9kdWx1cyA9CiAgICAgICAgX0JpZ0ludEltcGwub25lLl9kbFNoaWZ0KF9ub3JtTW9kdWx1c1VzZWQpIC0gX25vcm1Nb2R1bHVzOwogICAgaWYgKG5lZ05vcm1Nb2R1bHVzLl91c2VkIDwgX25vcm1Nb2R1bHVzVXNlZCkgewogICAgICBfbmVnTm9ybU1vZHVsdXNEaWdpdHMgPSBfQmlnSW50SW1wbC5fY2xvbmVEaWdpdHMoCiAgICAgICAgICBuZWdOb3JtTW9kdWx1cy5fZGlnaXRzLCAwLCBfbm9ybU1vZHVsdXNVc2VkLCBfbm9ybU1vZHVsdXNVc2VkKTsKICAgIH0gZWxzZSB7CiAgICAgIF9uZWdOb3JtTW9kdWx1c0RpZ2l0cyA9IG5lZ05vcm1Nb2R1bHVzLl9kaWdpdHM7CiAgICB9CiAgICAvLyBfbmVnTm9ybU1vZHVsdXNEaWdpdHMgaXMgcmVhZC1vbmx5IGFuZCBoYXMgX25vcm1Nb2R1bHVzVXNlZCBkaWdpdHMgKHBvc3NpYmx5CiAgICAvLyBpbmNsdWRpbmcgc2V2ZXJhbCBsZWFkaW5nIHplcm9zKSBwbHVzIGEgbGVhZGluZyB6ZXJvIGZvciA2NC1iaXQKICAgIC8vIHByb2Nlc3NpbmcuCiAgICBfdG1wRGlnaXRzID0gX25ld0RpZ2l0cygyICogX25vcm1Nb2R1bHVzVXNlZCk7CiAgfQoKICBpbnQgX2NvbnZlcnQoX0JpZ0ludEltcGwgeCwgVWludDMyTGlzdCByZXN1bHREaWdpdHMpIHsKICAgIHZhciBkaWdpdHM7CiAgICB2YXIgdXNlZDsKICAgIGlmICh4Ll9pc05lZ2F0aXZlIHx8IHguX2Fic0NvbXBhcmUoX21vZHVsdXMpID49IDApIHsKICAgICAgdmFyIHJlbWFpbmRlciA9IHguX3JlbShfbW9kdWx1cyk7CiAgICAgIGlmICh4Ll9pc05lZ2F0aXZlICYmIHJlbWFpbmRlci5fdXNlZCA+IDApIHsKICAgICAgICBhc3NlcnQocmVtYWluZGVyLl9pc05lZ2F0aXZlKTsKICAgICAgICByZW1haW5kZXIgKz0gX21vZHVsdXM7CiAgICAgIH0KICAgICAgYXNzZXJ0KCFyZW1haW5kZXIuX2lzTmVnYXRpdmUpOwogICAgICB1c2VkID0gcmVtYWluZGVyLl91c2VkOwogICAgICBkaWdpdHMgPSByZW1haW5kZXIuX2RpZ2l0czsKICAgIH0gZWxzZSB7CiAgICAgIHVzZWQgPSB4Ll91c2VkOwogICAgICBkaWdpdHMgPSB4Ll9kaWdpdHM7CiAgICB9CiAgICB2YXIgaSA9IHVzZWQgKyAodXNlZCAmIDEpOyAvLyBDb3B5IGxlYWRpbmcgemVybyBpZiBhbnkuCiAgICB3aGlsZSAoLS1pID49IDApIHsKICAgICAgcmVzdWx0RGlnaXRzW2ldID0gZGlnaXRzW2ldOwogICAgfQogICAgcmV0dXJuIHVzZWQ7CiAgfQoKICBfQmlnSW50SW1wbCBfcmV2ZXJ0KFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkKSB7CiAgICByZXR1cm4gbmV3IF9CaWdJbnRJbXBsLl8oZmFsc2UsIHhVc2VkLCB4RGlnaXRzKTsKICB9CgogIGludCBfcmVkdWNlKFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkKSB7CiAgICBpZiAoeFVzZWQgPCBfbW9kdWx1cy5fdXNlZCkgewogICAgICByZXR1cm4geFVzZWQ7CiAgICB9CiAgICAvLyBUaGUgZnVuY3Rpb24gX0JpZ0ludEltcGwuX3JlbURpZ2l0cyguLi4pIGlzIG9wdGltaXplZCBmb3IgcmVkdWN0aW9uIGFuZAogICAgLy8gZXF1aXZhbGVudCB0byBjYWxsaW5nCiAgICAvLyAnY29udmVydChyZXZlcnQoeERpZ2l0cywgeFVzZWQpLl9yZW0oX25vcm1Nb2R1bHVzKSwgeERpZ2l0cyk7JwogICAgcmV0dXJuIF9CaWdJbnRJbXBsLl9yZW1EaWdpdHMoCiAgICAgICAgeERpZ2l0cywKICAgICAgICB4VXNlZCwKICAgICAgICBfbm9ybU1vZHVsdXNEaWdpdHMsCiAgICAgICAgX25vcm1Nb2R1bHVzVXNlZCwKICAgICAgICBfbmVnTm9ybU1vZHVsdXNEaWdpdHMsCiAgICAgICAgX21vZHVsdXNOc2gsCiAgICAgICAgX2FyZ3MsCiAgICAgICAgX3RtcERpZ2l0cywKICAgICAgICB4RGlnaXRzKTsKICB9CgogIGludCBfc3FyKFVpbnQzMkxpc3QgeERpZ2l0cywgaW50IHhVc2VkLCBVaW50MzJMaXN0IHJlc3VsdERpZ2l0cykgewogICAgdmFyIHJlc3VsdFVzZWQgPSBfQmlnSW50SW1wbC5fc3FyRGlnaXRzKHhEaWdpdHMsIHhVc2VkLCByZXN1bHREaWdpdHMpOwogICAgcmV0dXJuIF9yZWR1Y2UocmVzdWx0RGlnaXRzLCByZXN1bHRVc2VkKTsKICB9CgogIGludCBfbXVsKFVpbnQzMkxpc3QgeERpZ2l0cywgaW50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X2lkZW50aXR5SGFzaENvZGUgbmF0aXZlICJEb3VibGVfaGFzaENvZGUiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBkb3VibGUgb3BlcmF0b3IgKyhudW0gb3RoZXIpIHsKICAgIHJldHVybiBfYWRkKG90aGVyLnRvRG91YmxlKCkpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIGRvdWJsZSBfYWRkKGRvdWJsZSBvdGhlcikgbmF0aXZlICJEb3VibGVfYWRkIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgZG91YmxlIG9wZXJhdG9yIC0obnVtIG90aGVyKSB7CiAgICByZXR1cm4gX3N1YihvdGhlci50b0RvdWJsZSgpKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgX3N1Yihkb3VibGUgb3RoZXIpIG5hdGl2ZSAiRG91YmxlX3N1YiI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGRvdWJsZSBvcGVyYXRvciAqKG51bSBvdGhlcikgewogICAgcmV0dXJuIF9tdWwob3RoZXIudG9Eb3VibGUoKSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgZG91YmxlIF9tdWwoZG91YmxlIG90aGVyKSBuYXRpdmUgIkRvdWJsZV9tdWwiOwoKICBpbnQgb3BlcmF0b3Igfi8obnVtIG90aGVyKSB7CiAgICByZXR1cm4gX3RydW5jX2RpdihvdGhlci50b0RvdWJsZSgpKTsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF90cnVuY19kaXYoZG91YmxlIG90aGVyKSBuYXRpdmUgIkRvdWJsZV90cnVuY19kaXYiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBkb3VibGUgb3BlcmF0b3IgLyhudW0gb3RoZXIpIHsKICAgIHJldHVybiBfZGl2KG90aGVyLnRvRG91YmxlKCkpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIGRvdWJsZSBfZGl2KGRvdWJsZSBvdGhlcikgbmF0aXZlICJEb3VibGVfZGl2IjsKCiAgZG91YmxlIG9wZXJhdG9yICUobnVtIG90aGVyKSB7CiAgICByZXR1cm4gX21vZHVsbyhvdGhlci50b0RvdWJsZSgpKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgX21vZHVsbyhkb3VibGUgb3RoZXIpIG5hdGl2ZSAiRG91YmxlX21vZHVsbyI7CgogIGRvdWJsZSByZW1haW5kZXIobnVtIG90aGVyKSB7CiAgICByZXR1cm4gX3JlbWFpbmRlcihvdGhlci50b0RvdWJsZSgpKTsKICB9CgogIGRvdWJsZSBfcmVtYWluZGVyKGRvdWJsZSBvdGhlcikgbmF0aXZlICJEb3VibGVfcmVtYWluZGVyIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIGRvdWJsZSBvcGVyYXRvciAtKCkgbmF0aXZlICJEb3VibGVfZmxpcFNpZ25CaXQiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgcmV0dXJuIChvdGhlciBpcyBudW0pICYmIF9lcXVhbChvdGhlci50b0RvdWJsZSgpKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIF9lcXVhbChkb3VibGUgb3RoZXIpIG5hdGl2ZSAiRG91YmxlX2VxdWFsIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBfZXF1YWxUb0ludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkRvdWJsZV9lcXVhbFRvSW50ZWdlciI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPChudW0gb3RoZXIpIHsKICAgIHJldHVybiBvdGhlciA+IHRoaXM7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBib29sIG9wZXJhdG9yID4obnVtIG90aGVyKSB7CiAgICByZXR1cm4gX2dyZWF0ZXJUaGFuKG90aGVyLnRvRG91YmxlKCkpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIGJvb2wgX2dyZWF0ZXJUaGFuKGRvdWJsZSBvdGhlcikgbmF0aXZlICJEb3VibGVfZ3JlYXRlclRoYW4iOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBib29sIG9wZXJhdG9yID49KG51bSBvdGhlcikgewogICAgcmV0dXJuICh0aGlzID09IG90aGVyKSB8fCAodGhpcyA+IG90aGVyKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPD0obnVtIG90aGVyKSB7CiAgICByZXR1cm4gKHRoaXMgPT0gb3RoZXIpIHx8ICh0aGlzIDwgb3RoZXIpOwogIH0KCiAgZG91YmxlIF9hZGRGcm9tSW50ZWdlcihpbnQgb3RoZXIpIHsKICAgIHJldHVybiBuZXcgX0RvdWJsZS5mcm9tSW50ZWdlcihvdGhlcikuX2FkZCh0aGlzKTsKICB9CgogIGRvdWJsZSBfc3ViRnJvbUludGVnZXIoaW50IG90aGVyKSB7CiAgICByZXR1cm4gbmV3IF9Eb3VibGUuZnJvbUludGVnZXIob3RoZXIpLl9zdWIodGhpcyk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX0RvdWJsZSIpCiAgZG91YmxlIF9tdWxGcm9tSW50ZWdlcihpbnQgb3RoZXIpIHsKICAgIHJldHVybiBuZXcgX0RvdWJsZS5mcm9tSW50ZWdlcihvdGhlcikuX211bCh0aGlzKTsKICB9CgogIGludCBfdHJ1bmNEaXZGcm9tSW50ZWdlcihpbnQgb3RoZXIpIHsKICAgIHJldHVybiBuZXcgX0RvdWJsZS5mcm9tSW50ZWdlcihvdGhlcikuX3RydW5jX2Rpdih0aGlzKTsKICB9CgogIGRvdWJsZSBfbW9kdWxvRnJvbUludGVnZXIoaW50IG90aGVyKSB7CiAgICByZXR1cm4gbmV3IF9Eb3VibGUuZnJvbUludGVnZXIob3RoZXIpLl9tb2R1bG8odGhpcyk7CiAgfQoKICBkb3VibGUgX3JlbWFpbmRlckZyb21JbnRlZ2VyKGludCBvdGhlcikgewogICAgcmV0dXJuIG5ldyBfRG91YmxlLmZyb21JbnRlZ2VyKG90aGVyKS5fcmVtYWluZGVyKHRoaXMpOwogIH0KCiAgYm9vbCBfZ3JlYXRlclRoYW5Gcm9tSW50ZWdlcihpbnQgb3RoZXIpCiAgICAgIG5hdGl2ZSAiRG91YmxlX2dyZWF0ZXJUaGFuRnJvbUludGVnZXIiOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSBuYXRpdmUgIkRvdWJsZV9nZXRJc05lZ2F0aXZlIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBnZXQgaXNJbmZpbml0ZSBuYXRpdmUgIkRvdWJsZV9nZXRJc0luZmluaXRlIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBnZXQgaXNOYU4gbmF0aXZlICJEb3VibGVfZ2V0SXNOYU4iOwogIGJvb2wgZ2V0IGlzRmluaXRlID0+ICFpc0luZmluaXRlICYmICFpc05hTjsgLy8gQ2FuIGJlIG9wdGltaXplZC4KCiAgZG91YmxlIGFicygpIHsKICAgIC8vIEhhbmRsZSBuZWdhdGl2ZSAwLjAuCiAgICBpZiAodGhpcyA9PSAwLjApIHJldHVybiAwLjA7CiAgICByZXR1cm4gdGhpcyA8IDAuMCA/IC10aGlzIDogdGhpczsKICB9CgogIGRvdWJsZSBnZXQgc2lnbiB7CiAgICBpZiAodGhpcyA+IDAuMCkgcmV0dXJuIDEuMDsKICAgIGlmICh0aGlzIDwgMC4wKSByZXR1cm4gLTEuMDsKICAgIHJldHVybiB0aGlzOyAvLyArLy0wLjAgb3IgTmFOLgogIH0KCiAgaW50IHJvdW5kKCkgPT4gcm91bmRUb0RvdWJsZSgpLnRvSW50KCk7CiAgaW50IGZsb29yKCkgPT4gZmxvb3JUb0RvdWJsZSgpLnRvSW50KCk7CiAgaW50IGNlaWwoKSA9PiBjZWlsVG9Eb3VibGUoKS50b0ludCgpOwogIGludCB0cnVuY2F0ZSgpID0+IHRydW5jYXRlVG9Eb3VibGUoKS50b0ludCgpOwoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIF9Eb3VibGUpCiAgZG91YmxlIHJvdW5kVG9Eb3VibGUoKSBuYXRpdmUgIkRvdWJsZV9yb3VuZCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIGRvdWJsZSBmbG9vclRvRG91YmxlKCkgbmF0aXZlICJEb3VibGVfZmxvb3IiOwogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0RvdWJsZSkKICBkb3VibGUgY2VpbFRvRG91YmxlKCkgbmF0aXZlICJEb3VibGVfY2VpbCI7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIGRvdWJsZSB0cnVuY2F0ZVRvRG91YmxlKCkgbmF0aXZlICJEb3VibGVfdHJ1bmNhdGUiOwoKICBudW0gY2xhbXAobnVtIGxvd2VyTGltaXQsIG51bSB1cHBlckxpbWl0KSB7CiAgICBpZiAobG93ZXJMaW1pdCBpcyEgbnVtKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKGxvd2VyTGltaXQsICJsb3dlckxpbWl0IiwgIm5vdCBhIG51bWJlciIpOwogICAgfQogICAgaWYgKHVwcGVyTGltaXQgaXMhIG51bSkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZSh1cHBlckxpbWl0LCAidXBwZXJMaW1pdCIsICJub3QgYSBudW1iZXIiKTsKICAgIH0KCiAgICBpZiAobG93ZXJMaW1pdC5jb21wYXJlVG8odXBwZXJMaW1pdCkgPiAwKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKGxvd2VyTGltaXQpOwogICAgfQogICAgaWYgKGxvd2VyTGltaXQuaXNOYU4pIHJldHVybiBsb3dlckxpbWl0OwogICAgaWYgKHRoaXMuY29tcGFyZVRvKGxvd2VyTGltaXQpIDwgMCkgcmV0dXJuIGxvd2VyTGltaXQ7CiAgICBpZiAodGhpcy5jb21wYXJlVG8odXBwZXJMaW1pdCkgPiAwKSByZXR1cm4gdXBwZXJMaW1pdDsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBpbnQgdG9JbnQoKSBuYXRpdmUgIkRvdWJsZV90b0ludCI7CgogIGRvdWJsZSB0b0RvdWJsZSgpIHsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgc3RhdGljIGNvbnN0IGludCBDQUNIRV9TSVpFX0xPRzIgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgQ0FDSEVfTEVOR1RIID0gMSA8PCAoQ0FDSEVfU0laRV9MT0cyICsgMSk7CiAgc3RhdGljIGNvbnN0IGludCBDQUNIRV9NQVNLID0gQ0FDSEVfTEVOR1RIIC0gMTsKICAvLyBFYWNoIGtleSAoZG91YmxlKSBmb2xsb3dlZCBieSBpdHMgdG9TdHJpbmcgcmVzdWx0LgogIHN0YXRpYyBmaW5hbCBMaXN0IF9jYWNoZSA9IG5ldyBMaXN0KENBQ0hFX0xFTkdUSCk7CiAgc3RhdGljIGludCBfY2FjaGVFdmljdEluZGV4ID0gMDsKCiAgU3RyaW5nIF90b1N0cmluZygpIG5hdGl2ZSAiRG91YmxlX3RvU3RyaW5nIjsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgLy8gVE9ETyhrb2RhKTogQ29uc2lkZXIgc3RhcnRpbmcgYXQgbW9zdCByZWNlbnRseSBpbnNlcnRlZC4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQ0FDSEVfTEVOR1RIOyBpICs9IDIpIHsKICAgICAgLy8gTmVlZCAnaWRlbnRpY2FsJyB0byBoYW5kbGUgbmVnYXRpdmUgemVybywgZXRjLgogICAgICBpZiAoaWRlbnRpY2FsKF9jYWNoZVtpXSwgdGhpcykpIHsKICAgICAgICByZXR1cm4gX2NhY2hlW2kgKyAxXTsKICAgICAgfQogICAgfQogICAgLy8gVE9ETyhrb2RhKTogQ29uc2lkZXIgb3B0aW1pemluZyBhbGwgc21hbGwgaW50ZWdyYWwgdmFsdWVzLgogICAgaWYgKGlkZW50aWNhbCgwLjAsIHRoaXMpKSB7CiAgICAgIHJldHVybiAiMC4wIjsKICAgIH0KICAgIFN0cmluZyByZXN1bHQgPSBfdG9TdHJpbmcoKTsKICAgIC8vIFJlcGxhY2UgdGhlIGxlYXN0IHJlY2VudGx5IGluc2VydGVkIGVudHJ5LgogICAgX2NhY2hlW19jYWNoZUV2aWN0SW5kZXhdID0gdGhpczsKICAgIF9jYWNoZVtfY2FjaGVFdmljdEluZGV4ICsgMV0gPSByZXN1bHQ7CiAgICBfY2FjaGVFdmljdEluZGV4ID0gKF9jYWNoZUV2aWN0SW5kZXggKyAyKSAmIENBQ0hFX01BU0s7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nQXNGaXhlZChpbnQgZnJhY3Rpb25EaWdpdHMpIHsKICAgIC8vIFNlZSBFQ01BU2NyaXB0LTI2MiwgMTUuNy40LjUgZm9yIGRldGFpbHMuCgogICAgaWYgKGZyYWN0aW9uRGlnaXRzIGlzISBpbnQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUoCiAgICAgICAgICBmcmFjdGlvbkRpZ2l0cywgImZyYWN0aW9uRGlnaXRzIiwgIm5vdCBhbiBpbnRlZ2VyIik7CiAgICB9CiAgICAvLyBTdGVwIDIuCiAgICBpZiAoZnJhY3Rpb25EaWdpdHMgPCAwIHx8IGZyYWN0aW9uRGlnaXRzID4gMjApIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoZnJhY3Rpb25EaWdpdHMsIDAsIDIwLCAiZnJhY3Rpb25EaWdpdHMiKTsKICAgIH0KCiAgICAvLyBTdGVwIDMuCiAgICBkb3VibGUgeCA9IHRoaXM7CgogICAgLy8gU3RlcCA0LgogICAgaWYgKGlzTmFOKSByZXR1cm4gIk5hTiI7CgogICAgLy8gU3RlcCA1IGFuZCA2IHNraXBwZWQuIFdpbGwgYmUgZGVhbHQgd2l0aCBieSBuYXRpdmUgZnVuY3Rpb24uCgogICAgLy8gU3RlcCA3LgogICAgaWYgKHggPj0gMWUyMSB8fCB4IDw9IC0xZTIxKSB7CiAgICAgIHJldHVybiB4LnRvU3RyaW5nKCk7CiAgICB9CgogICAgcmV0dXJuIF90b1N0cmluZ0FzRml4ZWQoZnJhY3Rpb25EaWdpdHMpOwogIH0KCiAgU3RyaW5nIF90b1N0cmluZ0FzRml4ZWQoaW50IGZyYWN0aW9uRGlnaXRzKSBuYXRpdmUgIkRvdWJsZV90b1N0cmluZ0FzRml4ZWQiOwoKICBTdHJpbmcgdG9TdHJpbmdBc0V4cG9uZW50aWFsKFtpbnQgZnJhY3Rpb25EaWdpdHNdKSB7CiAgICAvLyBTZWUgRUNNQVNjcmlwdC0yNjIsIDE1LjcuNC42IGZvciBkZXRhaWxzLgoKICAgIC8vIFRoZSBFY21hU2NyaXB0IHNwZWNpZmljYXRpb24gY2hlY2tzIGZvciBOYU4gYW5kIEluZmluaXR5IGJlZm9yZSBsb29raW5nCiAgICAvLyBhdCB0aGUgZnJhY3Rpb25EaWdpdHMuIEluIERhcnQgd2UgYXJlIGNvbnNpc3RlbnQgd2l0aCB0b1N0cmluZ0FzRml4ZWQgYW5kCiAgICAvLyBsb29rIGF0IHRoZSBmcmFjdGlvbkRpZ2l0cyBmaXJzdC4KCiAgICAvLyBTdGVwIDcuCiAgICBpZiAoZnJhY3Rpb25EaWdpdHMgIT0gbnVsbCkgewogICAgICBpZiAoZnJhY3Rpb25EaWdpdHMgaXMhIGludCkgewogICAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKAogICAgICAgICAgICBmcmFjdGlvbkRpZ2l0cywgImZyYWN0aW9uRGlnaXRzIiwgIm5vdCBhbiBpbnRlZ2VyIik7CiAgICAgIH0KICAgICAgaWYgKGZyYWN0aW9uRGlnaXRzIDwgMCB8fCBmcmFjdGlvbkRpZ2l0cyA+IDIwKSB7CiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoZnJhY3Rpb25EaWdpdHMsIDAsIDIwLCAiZnJhY3Rpb25EaWdpdHMiKTsKICAgICAgfQogICAgfQoKICAgIGlmIChpc05hTikgcmV0dXJuICJOYU4iOwogICAgaWYgKHRoaXMgPT0gZG91YmxlLmluZmluaXR5KSByZXR1cm4gIkluZmluaXR5IjsKICAgIGlmICh0aGlzID09IC1kb3VibGUuaW5maW5pdHkpIHJldHVybiAiLUluZmluaXR5IjsKCiAgICAvLyBUaGUgZGFydCBmdW5jdGlvbiBwcmludHMgdGhlIHNob3J0ZXN0IHJlcHJlc2VudGF0aW9uIHdoZW4gZnJhY3Rpb25EaWdpdHMKICAgIC8vIGVxdWFscyBudWxsLiBUaGUgbmF0aXZlIGZ1bmN0aW9uIHdhbnRzIC0xIGluc3RlYWQuCiAgICBmcmFjdGlvbkRpZ2l0cyA9IChmcmFjdGlvbkRpZ2l0cyA9PSBudWxsKSA/IC0xIDogZnJhY3Rpb25EaWdpdHM7CgogICAgcmV0dXJuIF90b1N0cmluZ0FzRXhwb25lbnRpYWwoZnJhY3Rpb25EaWdpdHMpOwogIH0KCiAgU3RyaW5nIF90b1N0cmluZ0FzRXhwb25lbnRpYWwoaW50IGZyYWN0aW9uRGlnaXRzKQogICAgICBuYXRpdmUgIkRvdWJsZV90b1N0cmluZ0FzRXhwb25lbnRpYWwiOwoKICBTdHJpbmcgdG9TdHJpbmdBc1ByZWNpc2lvbihpbnQgcHJlY2lzaW9uKSB7CiAgICAvLyBTZWUgRUNNQVNjcmlwdC0yNjIsIDE1LjcuNC43IGZvciBkZXRhaWxzLgoKICAgIC8vIFRoZSBFY21hU2NyaXB0IHNwZWNpZmljYXRpb24gY2hlY2tzIGZvciBOYU4gYW5kIEluZmluaXR5IGJlZm9yZSBsb29raW5nCiAgICAvLyBhdCB0aGUgZnJhY3Rpb25EaWdpdHMuIEluIERhcnQgd2UgYXJlIGNvbnNpc3RlbnQgd2l0aCB0b1N0cmluZ0FzRml4ZWQgYW5kCiAgICAvLyBsb29rIGF0IHRoZSBmcmFjdGlvbkRpZ2l0cyBmaXJzdC4KCiAgICBpZiAocHJlY2lzaW9uIGlzISBpbnQpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUocHJlY2lzaW9uLCAicHJlY2lzaW9uIiwgIm5vdCBhbiBpbnRlZ2VyIik7CiAgICB9CiAgICAvLyBTdGVwIDguCiAgICBpZiAocHJlY2lzaW9uIDwgMSB8fCBwcmVjaXNpb24gPiAyMSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShwcmVjaXNpb24sIDEsIDIxLCAicHJlY2lzaW9uIik7CiAgICB9CgogICAgaWYgKGlzTmFOKSByZXR1cm4gIk5hTiI7CiAgICBpZiAodGhpcyA9PSBkb3VibGUuaW5maW5pdHkpIHJldHVybiAiSW5maW5pdHkiOwogICAgaWYgKHRoaXMgPT0gLWRvdWJsZS5pbmZpbml0eSkgcmV0dXJuICItSW5maW5pdHkiOwoKICAgIHJldHVybiBfdG9TdHJpbmdBc1ByZWNpc2lvbihwcmVjaXNpb24pOwogIH0KCiAgU3RyaW5nIF90b1N0cmluZ0FzUHJlY2lzaW9uKGludCBmcmFjdGlvbkRpZ2l0cykKICAgICAgbmF0aXZlICJEb3VibGVfdG9TdHJpbmdBc1ByZWNpc2lvbiI7CgogIC8vIE9yZGVyIGlzOiBOYU4gPiBJbmZpbml0eSA+IC4uLiA+IDAuMCA+IC0wLjAgPiAuLi4gPiAtSW5maW5pdHkuCiAgaW50IGNvbXBhcmVUbyhudW0gb3RoZXIpIHsKICAgIGNvbnN0IGludCBFUVVBTCA9IDAsIExFU1MgPSAtMSwgR1JFQVRFUiA9IDE7CiAgICBpZiAodGhpcyA8IG90aGVyKSB7CiAgICAgIHJldHVybiBMRVNTOwogICAgfSBlbHNlIGlmICh0aGlzID4gb3RoZXIpIHsKICAgICAgcmV0dXJuIEdSRUFURVI7CiAgICB9IGVsc2UgaWYgKHRoaXMgPT0gb3RoZXIpIHsKICAgICAgaWYgKHRoaXMgPT0gMC4wKSB7CiAgICAgICAgYm9vbCB0aGlzSXNOZWdhdGl2ZSA9IGlzTmVnYXRpdmU7CiAgICAgICAgYm9vbCBvdGhlcklzTmVnYXRpdmUgPSBvdGhlci5pc05lZ2F0aXZlOwogICAgICAgIGlmICh0aGlzSXNOZWdhdGl2ZSA9PSBvdGhlcklzTmVnYXRpdmUpIHsKICAgICAgICAgIHJldHVybiBFUVVBTDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXNJc05lZ2F0aXZlID8gTEVTUyA6IEdSRUFURVI7CiAgICAgIH0gZWxzZSBpZiAob3RoZXIgaXMgaW50KSB7CiAgICAgICAgLy8gQ29tcGFyZSBhcyBpbnRlZ2VycyBhcyBpdCBpcyBtb3JlIHByZWNpc2UgaWYgdGhlIGludGVnZXIgdmFsdWUgaXMKICAgICAgICAvLyBvdXRzaWRlIG9mIE1JTl9FWEFDVF9JTlRfVE9fRE9VQkxFLi5NQVhfRVhBQ1RfSU5UX1RPX0RPVUJMRSByYW5nZS4KICAgICAgICBjb25zdCBpbnQgTUFYX0VYQUNUX0lOVF9UT19ET1VCTEUgPSA5MDA3MTk5MjU0NzQwOTkyOyAvLyAyXjUzLgogICAgICAgIGNvbnN0IGludCBNSU5fRVhBQ1RfSU5UX1RPX0RPVUJMRSA9IC1NQVhfRVhBQ1RfSU5UX1RPX0RPVUJMRTsKICAgICAgICBpZiAoKE1JTl9FWEFDVF9JTlRfVE9fRE9VQkxFIDw9IG90aGVyKSAmJgogICAgICAgICAgICAob3RoZXIgPD0gTUFYX0VYQUNUX0lOVF9UT19ET1VCTEUpKSB7CiAgICAgICAgICByZXR1cm4gRVFVQUw7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGJvb2wgbGltaXRJbnRzVG82NEJpdHMgPSAoKDEgPDwgNjQpID09IDApOwogICAgICAgIGlmIChsaW1pdEludHNUbzY0Qml0cykgewogICAgICAgICAgLy8gV2l0aCBpbnRlZ2VycyBsaW1pdGVkIHRvIDY0IGJpdHMsIGRvdWJsZS50b0ludCgpIGNsYW1wcwogICAgICAgICAgLy8gZG91YmxlIHZhbHVlIHRvIGZpdCBpbnRvIHRoZSBNSU5fSU5UNjQuLk1BWF9JTlQ2NCByYW5nZS4KICAgICAgICAgIC8vIE1BWF9JTlQ2NCBpcyBub3QgcHJlY2lzZWx5IHJlcHJlc2VudGFibGUgYXMgZG91YmxlLCBzbwogICAgICAgICAgLy8gaW50ZWdlcnMgbmVhciBNQVhfSU5UNjQgY29tcGFyZSBhcyBlcXVhbCB0byAoTUFYX0lOVDY0ICsgMSkgd2hlbgogICAgICAgICAgLy8gcmVwcmVzZW50ZWQgYXMgZG91Ymxlcy4KICAgICAgICAgIC8vIFRoZXJlIGlzIG5vIHNpbWlsYXIgcHJvYmxlbSB3aXRoIE1JTl9JTlQ2NCBhcyBpdCBpcyBwcmVjaXNlbHkKICAgICAgICAgIC8vIHJlcHJlc2VudGFibGUgYXMgZG91YmxlLgogICAgICAgICAgY29uc3QgZG91YmxlIG1heEludDY0UGx1czFBc0RvdWJsZSA9IDkyMjMzNzIwMzY4NTQ3NzU4MDguMDsKICAgICAgICAgIGlmICh0aGlzID49IG1heEludDY0UGx1czFBc0RvdWJsZSkgewogICAgICAgICAgICByZXR1cm4gR1JFQVRFUjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRvSW50KCkuY29tcGFyZVRvKG90aGVyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gRVFVQUw7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoaXNOYU4pIHsKICAgICAgcmV0dXJuIG90aGVyLmlzTmFOID8gRVFVQUwgOiBHUkVBVEVSOwogICAgfSBlbHNlIHsKICAgICAgLy8gT3RoZXIgaXMgTmFOLgogICAgICByZXR1cm4gTEVTUzsKICAgIH0KICB9Cn0KgW0ATk48AR4BGiIrTAEtNgErHSEjBAErMQErHSEjBAErMQErHSEjBAErMQEfKQQBKToBKx0hIwQBKzEBISYEASs3ASApBAE9ASszASgdIzcEASgzKEIBKB0fGQQBKB0fKwQBKD8BKB0gLgQBKB0gLgQBJjYEASY2BAE3JjYEASg8BAEpOQQBLDwEASouASg1KDUoK0MBERwhJgQBFCAhIwQBKiooMAErMCswKy4rNgEuHk8GHk8GATArBi07OxEEASklARYRBAEoPjI4NSMBLwEWQDA4KB4IBkIgFAYhMiUrPBMEAS8xASIlPwYPNUsGAQ8VAQ8dAUQBDyMbBgEtBAFPATcxAU9RKQEPIiQnQQg3TQgGAR00NgFQOkUBMwQBNC0BLjEBT1EpAR1PBg8rQQYBHTQ2ASwEATIrAUQdMRgTHxYgGSoxMRgKMCFNTkdGMjIYCjkhRUZETiVLJkYvHAwKKQ8WCBgsDRcTBgQCARtkYXJ0OmNvcmUtcGF0Y2gvZG91YmxlLmRhcnQtb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9mdW5jdGlvbi5kYXJ0h2UvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0Nsb3N1cmUgaW1wbGVtZW50cyBGdW5jdGlvbiB7CiAgZmFjdG9yeSBfQ2xvc3VyZS5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyAiVW5yZWFjaGFibGUiOwogIH0KCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIG5hdGl2ZSAiQ2xvc3VyZV9lcXVhbHMiOwoKICBpbnQgZ2V0IGhhc2hDb2RlIHsKICAgIF9oYXNoID8/PSBfY29tcHV0ZUhhc2goKTsKICAgIHJldHVybiBfaGFzaDsKICB9CgogIF9DbG9zdXJlIGdldCBjYWxsID0+IHRoaXM7CgogIF9DbG9zdXJlIF9jbG9uZSgpIG5hdGl2ZSAiQ2xvc3VyZV9jbG9uZSI7CgogIGludCBfY29tcHV0ZUhhc2goKSBuYXRpdmUgIkNsb3N1cmVfY29tcHV0ZUhhc2giOwoKICAvLyBObyBpbnN0YW5jZSBmaWVsZHMgc2hvdWxkIGJlIGRlY2xhcmVkIGJlZm9yZSB0aGUgZm9sbG93aW5nIGZpZWxkcyB3aG9zZQogIC8vIG9mZnNldHMgbXVzdCBiZSBpZGVudGljYWwgaW4gRGFydCBhbmQgQysrLgoKICAvLyBUaGUgZm9sbG93aW5nIGZpZWxkcyBhcmUgZGVjbGFyZWQgYm90aCBpbiByYXdfb2JqZWN0LmggKGZvciBkaXJlY3QgYWNjZXNzCiAgLy8gZnJvbSBDKysgY29kZSkgYW5kIGFsc28gaGVyZSBzbyB0aGF0IHRoZSBvZmZzZXQtdG8tZmllbGQgbWFwIHVzZWQgYnkKICAvLyBkZWZlcnJlZCBvYmplY3RzIGlzIHByb3Blcmx5IGluaXRpYWxpemVkLgogIC8vIENhdXRpb246IFRoZXNlIGZpZWxkcyBhcmUgbm90IERhcnQgaW5zdGFuY2VzLCBidXQgVk0gb2JqZWN0cy4gVGhlaXIgRGFydAogIC8vIG5hbWVzIGRvIG5vdCBuZWVkIHRvIG1hdGNoIHRoZSBDKysgbmFtZXMsIGJ1dCB0aGV5IG11c3QgYmUgcHJpdmF0ZS4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgdmFyIF9pbnN0YW50aWF0b3JfdHlwZV9hcmd1bWVudHM7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHZhciBfZnVuY3Rpb25fdHlwZV9hcmd1bWVudHM7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIHZhciBfZGVsYXllZF90eXBlX2FyZ3VtZW50czsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgdmFyIF9mdW5jdGlvbjsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgdmFyIF9jb250ZXh0OwoKICAvLyBOb3RlOiBfQ2xvc3VyZSBvYmplY3RzIGFyZSBjcmVhdGVkIGJ5IFZNICJtYWdpY2FsbHkiLCB3aXRob3V0IGludm9raW5nCiAgLy8gY29uc3RydWN0b3IuIFNvLCBfQ2xvc3VyZSBkZWZhdWx0IGNvbnN0cnVjdG9yIGlzIG5ldmVyIGNvbXBpbGVkIGFuZAogIC8vIGRldGVjdGlvbiBvZiBkZWZhdWx0LWluaXRpYWxpemVkIGZpZWxkcyBpcyBub3QgcGVyZm9ybWVkLgogIC8vIEFzIGEgY29uc2VxdWVuY2UsIFZNIGluY29ycmVjdGx5IGFzc3VtZXMgdGhhdCBfaGFzaCBmaWVsZCBpcyBub3QKICAvLyBudWxsYWJsZSBhbmQgbWF5IGluY29ycmVjdGx5IHJlbW92ZSAnaWYgKF9oYXNoID09IG51bGwpJyBpbiBnZXQ6aGFzaENvZGUuCiAgLy8gVGhpcyBpbml0aWFsaXplciBtYWtlcyBfaGFzaCBmaWVsZCBudWxsYWJsZSBldmVuIHdpdGhvdXQgY29uc3RydWN0b3IKICAvLyBjb21waWxhdGlvbi4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgdmFyIF9oYXNoID0gbnVsbDsKfQo4AE5OPAEeARolJxkEAToBFR4SBAEdASwBMwFNMAFPSi9OSRwkHCAcHxwRHBABTEk/Rk9KEhwUAgEdZGFydDpjb3JlLXBhdGNoL2Z1bmN0aW9uLmRhcnQzb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9ncm93YWJsZV9hcnJheS5kYXJ0rcsvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgX0dyb3dhYmxlTGlzdDxUPiBleHRlbmRzIExpc3RCYXNlPFQ+IHsKICB2b2lkIGluc2VydChpbnQgaW5kZXgsIFQgZWxlbWVudCkgewogICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+IGxlbmd0aCkpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoaW5kZXgsIDAsIGxlbmd0aCk7CiAgICB9CiAgICBpZiAoaW5kZXggPT0gdGhpcy5sZW5ndGgpIHsKICAgICAgYWRkKGVsZW1lbnQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgb2xkTGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICAvLyBXZSBhcmUgbW9kaWZ5aW5nIHRoZSBsZW5ndGgganVzdCBiZWxvdyB0aGUgaXMtY2hlY2suIFdpdGhvdXQgdGhlIGNoZWNrCiAgICAvLyBBcnJheS5jb3B5IGNvdWxkIHRocm93IGFuIGV4Y2VwdGlvbiwgbGVhdmluZyB0aGUgbGlzdCBpbiBhIGJhZCBzdGF0ZQogICAgLy8gKHdpdGggYSBsZW5ndGggdGhhdCBoYXMgYmVlbiBpbmNyZWFzZWQsIGJ1dCB3aXRob3V0IGEgbmV3IGVsZW1lbnQpLgogICAgaWYgKGluZGV4IGlzISBpbnQpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKGluZGV4KTsKICAgIHRoaXMubGVuZ3RoKys7CiAgICBMaXN0cy5jb3B5KHRoaXMsIGluZGV4LCB0aGlzLCBpbmRleCArIDEsIG9sZExlbmd0aCAtIGluZGV4KTsKICAgIHRoaXNbaW5kZXhdID0gZWxlbWVudDsKICB9CgogIFQgcmVtb3ZlQXQoaW50IGluZGV4KSB7CiAgICB2YXIgcmVzdWx0ID0gdGhpc1tpbmRleF07CiAgICBpbnQgbmV3TGVuZ3RoID0gdGhpcy5sZW5ndGggLSAxOwogICAgaWYgKGluZGV4IDwgbmV3TGVuZ3RoKSB7CiAgICAgIExpc3RzLmNvcHkodGhpcywgaW5kZXggKyAxLCB0aGlzLCBpbmRleCwgbmV3TGVuZ3RoIC0gaW5kZXgpOwogICAgfQogICAgdGhpcy5sZW5ndGggPSBuZXdMZW5ndGg7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgYm9vbCByZW1vdmUoT2JqZWN0IGVsZW1lbnQpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodGhpc1tpXSA9PSBlbGVtZW50KSB7CiAgICAgICAgcmVtb3ZlQXQoaSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIHZvaWQgaW5zZXJ0QWxsKGludCBpbmRleCwgSXRlcmFibGU8VD4gaXRlcmFibGUpIHsKICAgIGlmIChpbmRleCA8IDAgfHwgaW5kZXggPiBsZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoaW5kZXgsIDAsIGxlbmd0aCk7CiAgICB9CiAgICAvLyBUT0RPKGZsb2l0c2NoKTogd2UgY2FuIHByb2JhYmx5IGRldGVjdCBtb3JlIGNhc2VzLgogICAgaWYgKGl0ZXJhYmxlIGlzISBMaXN0ICYmIGl0ZXJhYmxlIGlzISBTZXQgJiYgaXRlcmFibGUgaXMhIFN1Ykxpc3RJdGVyYWJsZSkgewogICAgICBpdGVyYWJsZSA9IGl0ZXJhYmxlLnRvTGlzdCgpOwogICAgfQogICAgaW50IGluc2VydGlvbkxlbmd0aCA9IGl0ZXJhYmxlLmxlbmd0aDsKICAgIC8vIFRoZXJlIG1pZ2h0IGJlIGVycm9ycyBhZnRlciB0aGUgbGVuZ3RoIGNoYW5nZSwgaW4gd2hpY2ggY2FzZSB0aGUgbGlzdAogICAgLy8gd2lsbCBlbmQgdXAgYmVpbmcgbW9kaWZpZWQgYnV0IHRoZSBvcGVyYXRpb24gbm90IGNvbXBsZXRlLiBVbmxlc3Mgd2UKICAgIC8vIGFsd2F5cyBnbyB0aHJvdWdoIGEgInRvTGlzdCIgd2UgY2FuJ3QgcmVhbGx5IGF2b2lkIHRoYXQuCiAgICB0aGlzLmxlbmd0aCArPSBpbnNlcnRpb25MZW5ndGg7CiAgICBzZXRSYW5nZShpbmRleCArIGluc2VydGlvbkxlbmd0aCwgdGhpcy5sZW5ndGgsIHRoaXMsIGluZGV4KTsKICAgIHNldEFsbChpbmRleCwgaXRlcmFibGUpOwogIH0KCiAgdm9pZCBzZXRBbGwoaW50IGluZGV4LCBJdGVyYWJsZTxUPiBpdGVyYWJsZSkgewogICAgaWYgKGl0ZXJhYmxlIGlzIExpc3QpIHsKICAgICAgc2V0UmFuZ2UoaW5kZXgsIGluZGV4ICsgaXRlcmFibGUubGVuZ3RoLCBpdGVyYWJsZSk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKFQgZWxlbWVudCBpbiBpdGVyYWJsZSkgewogICAgICAgIHRoaXNbaW5kZXgrK10gPSBlbGVtZW50OwogICAgICB9CiAgICB9CiAgfQoKICB2b2lkIHJlbW92ZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgTGlzdHMuY29weSh0aGlzLCBlbmQsIHRoaXMsIHN0YXJ0LCB0aGlzLmxlbmd0aCAtIGVuZCk7CiAgICB0aGlzLmxlbmd0aCA9IHRoaXMubGVuZ3RoIC0gKGVuZCAtIHN0YXJ0KTsKICB9CgogIExpc3Q8VD4gc3VibGlzdChpbnQgc3RhcnQsIFtpbnQgZW5kXSkgewogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgdGhpcy5sZW5ndGgpOwogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA9PSAwKSByZXR1cm4gPFQ+W107CiAgICBMaXN0IGxpc3QgPSBuZXcgX0xpc3QobGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKICAgICAgbGlzdFtpXSA9IHRoaXNbc3RhcnQgKyBpXTsKICAgIH0KICAgIHZhciByZXN1bHQgPSBuZXcgX0dyb3dhYmxlTGlzdDxUPi5fd2l0aERhdGEobGlzdCk7CiAgICByZXN1bHQuX3NldExlbmd0aChsZW5ndGgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGZhY3RvcnkgX0dyb3dhYmxlTGlzdChpbnQgbGVuZ3RoKSB7CiAgICB2YXIgZGF0YSA9IF9hbGxvY2F0ZURhdGEobGVuZ3RoKTsKICAgIHZhciByZXN1bHQgPSBuZXcgX0dyb3dhYmxlTGlzdDxUPi5fd2l0aERhdGEoZGF0YSk7CiAgICBpZiAobGVuZ3RoID4gMCkgewogICAgICByZXN1bHQuX3NldExlbmd0aChsZW5ndGgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIGZhY3RvcnkgX0dyb3dhYmxlTGlzdC53aXRoQ2FwYWNpdHkoaW50IGNhcGFjaXR5KSB7CiAgICB2YXIgZGF0YSA9IF9hbGxvY2F0ZURhdGEoY2FwYWNpdHkpOwogICAgcmV0dXJuIG5ldyBfR3Jvd2FibGVMaXN0PFQ+Ll93aXRoRGF0YShkYXRhKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX0dyb3dhYmxlTGlzdCkKICBmYWN0b3J5IF9Hcm93YWJsZUxpc3QuX3dpdGhEYXRhKF9MaXN0IGRhdGEpIG5hdGl2ZSAiR3Jvd2FibGVMaXN0X2FsbG9jYXRlIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgX2NhcGFjaXR5IG5hdGl2ZSAiR3Jvd2FibGVMaXN0X2dldENhcGFjaXR5IjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgbGVuZ3RoIG5hdGl2ZSAiR3Jvd2FibGVMaXN0X2dldExlbmd0aCI7CgogIHZvaWQgc2V0IGxlbmd0aChpbnQgbmV3X2xlbmd0aCkgewogICAgaW50IG9sZF9jYXBhY2l0eSA9IF9jYXBhY2l0eTsKICAgIGludCBuZXdfY2FwYWNpdHkgPSBuZXdfbGVuZ3RoOwogICAgaWYgKG5ld19jYXBhY2l0eSA+IG9sZF9jYXBhY2l0eSkgewogICAgICBfZ3JvdyhuZXdfY2FwYWNpdHkpOwogICAgICBfc2V0TGVuZ3RoKG5ld19sZW5ndGgpOwogICAgICByZXR1cm47CiAgICB9CiAgICAvLyBXZSBhcmUgc2hyaW5raW5nLiBQaWNrIHRoZSBtZXRob2Qgd2hpY2ggaGFzIGZld2VyIHdyaXRlcy4KICAgIC8vIEluIHRoZSBzaHJpbmstdG8tZml0IHBhdGgsIHdlIHdyaXRlIHxuZXdfY2FwYWNpdHkgKyBuZXdfbGVuZ3RofCB3b3JkcwogICAgLy8gKG51bGwgaW5pdCArIGNvcHkpLgogICAgLy8gSW4gdGhlIG5vbi1zaHJpbmstdG8tZml0IHBhdGgsIHdlIHdyaXRlIHxsZW5ndGggLSBuZXdfbGVuZ3RofCB3b3JkcwogICAgLy8gKG51bGwgb3ZlcndyaXRlKS4KICAgIGZpbmFsIGJvb2wgc2hvdWxkU2hyaW5rVG9GaXQgPQogICAgICAgIChuZXdfY2FwYWNpdHkgKyBuZXdfbGVuZ3RoKSA8IChsZW5ndGggLSBuZXdfbGVuZ3RoKTsKICAgIGlmIChzaG91bGRTaHJpbmtUb0ZpdCkgewogICAgICBfc2hyaW5rKG5ld19jYXBhY2l0eSwgbmV3X2xlbmd0aCk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gbmV3X2xlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgdGhpc1tpXSA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIF9zZXRMZW5ndGgobmV3X2xlbmd0aCk7CiAgfQoKICB2b2lkIF9zZXRMZW5ndGgoaW50IG5ld19sZW5ndGgpIG5hdGl2ZSAiR3Jvd2FibGVMaXN0X3NldExlbmd0aCI7CgogIHZvaWQgX3NldERhdGEoX0xpc3QgYXJyYXkpIG5hdGl2ZSAiR3Jvd2FibGVMaXN0X3NldERhdGEiOwoKICBUIG9wZXJhdG9yIFtdKGludCBpbmRleCkgbmF0aXZlICJHcm93YWJsZUxpc3RfZ2V0SW5kZXhlZCI7CgogIHZvaWQgb3BlcmF0b3IgW109KGludCBpbmRleCwgVCB2YWx1ZSkgewogICAgX3NldEluZGV4ZWQoaW5kZXgsIHZhbHVlKTsKICB9CgogIHZvaWQgX3NldEluZGV4ZWQoaW50IGluZGV4LCBUIHZhbHVlKSBuYXRpdmUgIkdyb3dhYmxlTGlzdF9zZXRJbmRleGVkIjsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiLCAiY2FsbCIpCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBhZGQoVCB2YWx1ZSkgewogICAgdmFyIGxlbiA9IGxlbmd0aDsKICAgIGlmIChsZW4gPT0gX2NhcGFjaXR5KSB7CiAgICAgIF9ncm93KF9uZXh0Q2FwYWNpdHkobGVuKSk7CiAgICB9CiAgICBfc2V0TGVuZ3RoKGxlbiArIDEpOwogICAgdGhpc1tsZW5dID0gdmFsdWU7CiAgfQoKICB2b2lkIGFkZEFsbChJdGVyYWJsZTxUPiBpdGVyYWJsZSkgewogICAgdmFyIGxlbiA9IGxlbmd0aDsKICAgIGZpbmFsIGNpZCA9IENsYXNzSUQuZ2V0SUQoaXRlcmFibGUpOwogICAgZmluYWwgaXNWTUxpc3QgPSAoY2lkID09IENsYXNzSUQuY2lkQXJyYXkpIHx8CiAgICAgICAgKGNpZCA9PSBDbGFzc0lELmNpZEdyb3dhYmxlT2JqZWN0QXJyYXkpIHx8CiAgICAgICAgKGNpZCA9PSBDbGFzc0lELmNpZEltbXV0YWJsZUFycmF5KTsKICAgIGlmIChpc1ZNTGlzdCB8fCAoaXRlcmFibGUgaXMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGUpKSB7CiAgICAgIHZhciBjYXAgPSBfY2FwYWNpdHk7CiAgICAgIC8vIFByZWdyb3cgaWYgd2Uga25vdyBpdGVyYWJsZS5sZW5ndGguCiAgICAgIHZhciBpdGVyTGVuID0gaXRlcmFibGUubGVuZ3RoOwogICAgICB2YXIgbmV3TGVuID0gbGVuICsgaXRlckxlbjsKICAgICAgaWYgKG5ld0xlbiA+IGNhcCkgewogICAgICAgIGRvIHsKICAgICAgICAgIGNhcCA9IF9uZXh0Q2FwYWNpdHkoY2FwKTsKICAgICAgICB9IHdoaWxlIChuZXdMZW4gPiBjYXApOwogICAgICAgIF9ncm93KGNhcCk7CiAgICAgIH0KICAgICAgaWYgKGlzVk1MaXN0KSB7CiAgICAgICAgaWYgKGlkZW50aWNhbChpdGVyYWJsZSwgdGhpcykpIHsKICAgICAgICAgIHRocm93IG5ldyBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IodGhpcyk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX3NldExlbmd0aChuZXdMZW4pOwogICAgICAgIGZpbmFsIExpc3RCYXNlPFQ+IGl0ZXJhYmxlQXNMaXN0ID0gaXRlcmFibGU7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpdGVyTGVuOyBpKyspIHsKICAgICAgICAgIHRoaXNbbGVuKytdID0gaXRlcmFibGVBc0xpc3RbaV07CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgSXRlcmF0b3IgaXQgPSBpdGVyYWJsZS5pdGVyYXRvcjsKICAgIGlmICghaXQubW92ZU5leHQoKSkgcmV0dXJuOwogICAgZG8gewogICAgICB3aGlsZSAobGVuIDwgX2NhcGFjaXR5KSB7CiAgICAgICAgaW50IG5ld0xlbiA9IGxlbiArIDE7CiAgICAgICAgdGhpcy5fc2V0TGVuZ3RoKG5ld0xlbik7CiAgICAgICAgdGhpc1tsZW5dID0gaXQuY3VycmVudDsKICAgICAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHJldHVybjsKICAgICAgICBpZiAodGhpcy5sZW5ndGggIT0gbmV3TGVuKSB0aHJvdyBuZXcgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yKHRoaXMpOwogICAgICAgIGxlbiA9IG5ld0xlbjsKICAgICAgfQogICAgICBfZ3JvdyhfbmV4dENhcGFjaXR5KF9jYXBhY2l0eSkpOwogICAgfSB3aGlsZSAodHJ1ZSk7CiAgfQoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBUIHJlbW92ZUxhc3QoKSB7CiAgICB2YXIgbGVuID0gbGVuZ3RoIC0gMTsKICAgIHZhciBlbGVtID0gdGhpc1tsZW5dOwogICAgdGhpcy5sZW5ndGggPSBsZW47CiAgICByZXR1cm4gZWxlbTsKICB9CgogIFQgZ2V0IGZpcnN0IHsKICAgIGlmIChsZW5ndGggPiAwKSByZXR1cm4gdGhpc1swXTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KCiAgVCBnZXQgbGFzdCB7CiAgICBpZiAobGVuZ3RoID4gMCkgcmV0dXJuIHRoaXNbbGVuZ3RoIC0gMV07CiAgICB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICB9CgogIFQgZ2V0IHNpbmdsZSB7CiAgICBpZiAobGVuZ3RoID09IDEpIHJldHVybiB0aGlzWzBdOwogICAgaWYgKGxlbmd0aCA9PSAwKSB0aHJvdyBJdGVyYWJsZUVsZW1lbnRFcnJvci5ub0VsZW1lbnQoKTsKICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLnRvb01hbnkoKTsKICB9CgogIC8vIFNoYXJlZCBhcnJheSB1c2VkIGFzIGJhY2tpbmcgZm9yIG5ldyBlbXB0eSBncm93YWJsZSBhcnJheXMuCiAgc3RhdGljIGZpbmFsIF9MaXN0IF9lbXB0eUxpc3QgPSBuZXcgX0xpc3QoMCk7CgogIHN0YXRpYyBfTGlzdCBfYWxsb2NhdGVEYXRhKGludCBjYXBhY2l0eSkgewogICAgaWYgKGNhcGFjaXR5ID09IDApIHsKICAgICAgLy8gVXNlIHNoYXJlZCBlbXB0eSBsaXN0IGFzIGJhY2tpbmcuCiAgICAgIHJldHVybiBfZW1wdHlMaXN0OwogICAgfQogICAgLy8gUm91bmQgdXAgc2l6ZSB0byB0aGUgbmV4dCBvZGQgbnVtYmVyLCBzaW5jZSB0aGlzIGlzIGZyZWUKICAgIC8vIGJlY2F1c2Ugb2YgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBvZiB0aGUgR0MuCiAgICByZXR1cm4gbmV3IF9MaXN0KGNhcGFjaXR5IHwgMSk7CiAgfQoKICAvLyBHcm93IGZyb20gMCB0byAzLCBhbmQgdGhlbiBkb3VibGUgKyAxLgogIGludCBfbmV4dENhcGFjaXR5KGludCBvbGRfY2FwYWNpdHkpID0+IChvbGRfY2FwYWNpdHkgKiAyKSB8IDM7CgogIHZvaWQgX2dyb3coaW50IG5ld19jYXBhY2l0eSkgewogICAgdmFyIG5ld0RhdGEgPSBfYWxsb2NhdGVEYXRhKG5ld19jYXBhY2l0eSk7CiAgICAvLyBUaGlzIGlzIGEgd29yay1hcm91bmQgZm9yIGRhcnRidWcuY29tLzMwMDkwOiBhcnJheS1ib3VuZC1jaGVjawogICAgLy8gZ2VuZXJhbGl6YXRpb24gY2F1c2VzIGV4Y2Vzc2l2ZSBkZW9wdGltaXphdGlvbnMgYmVjYXVzZSBpdAogICAgLy8gaG9pc3RzIENoZWNrQXJyYXlCb3VuZChpLCAuLi4pIG91dCBvZiB0aGUgbG9vcCBiZWxvdyBhbmQgdHVybnMgaXQKICAgIC8vIGludG8gQ2hlY2tBcnJheUJvdW5kKGxlbmd0aCAtIDEsIC4uLikuIFdoaWNoIGRlb3B0aW1pemVzCiAgICAvLyBpZiBsZW5ndGggPT0gMC4gSG93ZXZlciB0aGUgbG9vcCBpdHNlbGYgZG9lcyBub3QgZXhlY3V0ZQogICAgLy8gaWYgbGVuZ3RoID09IDAuCiAgICBpZiAobGVuZ3RoID4gMCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgbmV3RGF0YVtpXSA9IHRoaXNbaV07CiAgICAgIH0KICAgIH0KICAgIF9zZXREYXRhKG5ld0RhdGEpOwogIH0KCiAgdm9pZCBfc2hyaW5rKGludCBuZXdfY2FwYWNpdHksIGludCBuZXdfbGVuZ3RoKSB7CiAgICB2YXIgbmV3RGF0YSA9IF9hbGxvY2F0ZURhdGEobmV3X2NhcGFjaXR5KTsKICAgIC8vIFRoaXMgaXMgYSB3b3JrLWFyb3VuZCBmb3IgZGFydGJ1Zy5jb20vMzAwOTAuIFNlZSB0aGUgY29tbWVudCBpbiBfZ3Jvdy4KICAgIGlmIChuZXdfbGVuZ3RoID4gMCkgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5ld19sZW5ndGg7IGkrKykgewogICAgICAgIG5ld0RhdGFbaV0gPSB0aGlzW2ldOwogICAgICB9CiAgICB9CiAgICBfc2V0RGF0YShuZXdEYXRhKTsKICB9CgogIC8vIEl0ZXJhYmxlIGludGVyZmFjZS4KCiAgQHByYWdtYSgidm06cHJlZmVyLWlubGluZSIpCiAgdm9pZCBmb3JFYWNoKGYoVCBlbGVtZW50KSkgewogICAgaW50IGluaXRpYWxMZW5ndGggPSBsZW5ndGg7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgIGYodGhpc1tpXSk7CiAgICAgIGlmIChsZW5ndGggIT0gaW5pdGlhbExlbmd0aCkgdGhyb3cgbmV3IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcih0aGlzKTsKICAgIH0KICB9CgogIFN0cmluZyBqb2luKFtTdHJpbmcgc2VwYXJhdG9yID0gIiJdKSB7CiAgICBmaW5hbCBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpZiAobGVuZ3RoID09IDApIHJldHVybiAiIjsKICAgIGlmIChsZW5ndGggPT0gMSkgcmV0dXJuICIke3RoaXNbMF19IjsKICAgIGlmIChzZXBhcmF0b3IuaXNOb3RFbXB0eSkgcmV0dXJuIF9qb2luV2l0aFNlcGFyYXRvcihzZXBhcmF0b3IpOwogICAgdmFyIGkgPSAwOwogICAgdmFyIGNvZGVVbml0Q291bnQgPSAwOwogICAgd2hpbGUgKGkgPCBsZW5ndGgpIHsKICAgICAgZmluYWwgZWxlbWVudCA9IHRoaXNbaV07CiAgICAgIC8vIFdoaWxlIGxpc3QgY29udGFpbnMgb25lLWJ5dGUgc3RyaW5ncy4KICAgICAgaWYgKGVsZW1lbnQgaXMgX09uZUJ5dGVTdHJpbmcpIHsKICAgICAgICBjb2RlVW5pdENvdW50ICs9IGVsZW1lbnQubGVuZ3RoOwogICAgICAgIGkrKzsKICAgICAgICAvLyBMb29wIGJhY2sgd2hpbGUgc3RyaW5ncyBhcmUgb25lLWJ5dGUgc3RyaW5ncy4KICAgICAgICBjb250aW51ZTsKICAgICAgfQogICAgICAvLyBPdGhlcndpc2UsIG5ldmVyIGxvb3AgYmFjayB0byB0aGUgb3V0ZXIgbG9vcCwgYW5kCiAgICAgIC8vIGhhbmRsZSB0aGUgcmVtYWluaW5nIHN0cmluZ3MgYmVsb3cuCgogICAgICAvLyBMb29wIHdoaWxlIGVsZW1lbnRzIGFyZSBzdHJpbmdzLAogICAgICBmaW5hbCBpbnQgZmlyc3ROb25PbmVCeXRlU3RyaW5nTGltaXQgPSBpOwogICAgICB2YXIgbmV4dEVsZW1lbnQgPSBlbGVtZW50OwogICAgICB3aGlsZSAobmV4dEVsZW1lbnQgaXMgU3RyaW5nKSB7CiAgICAgICAgaSsrOwogICAgICAgIGlmIChpID09IGxlbmd0aCkgewogICAgICAgICAgcmV0dXJuIF9TdHJpbmdCYXNlLl9jb25jYXRSYW5nZU5hdGl2ZSh0aGlzLCAwLCBsZW5ndGgpOwogICAgICAgIH0KICAgICAgICBuZXh0RWxlbWVudCA9IHRoaXNbaV07CiAgICAgIH0KCiAgICAgIC8vIE5vdCBhbGwgZWxlbWVudHMgYXJlIHN0cmluZ3MsIHNvIGFsbG9jYXRlIGEgbmV3IGJhY2tpbmcgYXJyYXkuCiAgICAgIGZpbmFsIGxpc3QgPSBuZXcgX0xpc3QobGVuZ3RoKTsKICAgICAgZm9yIChpbnQgY29weUluZGV4ID0gMDsgY29weUluZGV4IDwgaTsgY29weUluZGV4KyspIHsKICAgICAgICBsaXN0W2NvcHlJbmRleF0gPSB0aGlzW2NvcHlJbmRleF07CiAgICAgIH0KICAgICAgLy8gSXMgbm9uLXplcm8gaWYgbGlzdCBjb250YWlucyBhIG5vbi1vbmVieXRlIHN0cmluZy4KICAgICAgdmFyIG9uZWJ5dGVDYW5hcnkgPSBpIC0gZmlyc3ROb25PbmVCeXRlU3RyaW5nTGltaXQ7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgZmluYWwgU3RyaW5nIGVsZW1lbnRTdHJpbmcgPSAiJG5leHRFbGVtZW50IjsKICAgICAgICBvbmVieXRlQ2FuYXJ5IHw9CiAgICAgICAgICAgIChDbGFzc0lELmdldElEKGVsZW1lbnRTdHJpbmcpIF4gQ2xhc3NJRC5jaWRPbmVCeXRlU3RyaW5nKTsKICAgICAgICBsaXN0W2ldID0gZWxlbWVudFN0cmluZzsKICAgICAgICBjb2RlVW5pdENvdW50ICs9IGVsZW1lbnRTdHJpbmcubGVuZ3RoOwogICAgICAgIGkrKzsKICAgICAgICBpZiAoaSA9PSBsZW5ndGgpIGJyZWFrOwogICAgICAgIG5leHRFbGVtZW50ID0gdGhpc1tpXTsKICAgICAgfQogICAgICBpZiAob25lYnl0ZUNhbmFyeSA9PSAwKSB7CiAgICAgICAgLy8gQWxsIGVsZW1lbnRzIHJldHVybmVkIGEgb25lLWJ5dGUgc3RyaW5nIGZyb20gdG9TdHJpbmcuCiAgICAgICAgcmV0dXJuIF9PbmVCeXRlU3RyaW5nLl9jb25jYXRBbGwobGlzdCwgY29kZVVuaXRDb3VudCk7CiAgICAgIH0KICAgICAgcmV0dXJuIF9TdHJpbmdCYXNlLl9jb25jYXRSYW5nZU5hdGl2ZShsaXN0LCAwLCBsZW5ndGgpOwogICAgfQogICAgLy8gQWxsIGVsZW1lbnRzIHdlcmUgb25lLWJ5dGUgc3RyaW5ncy4KICAgIHJldHVybiBfT25lQnl0ZVN0cmluZy5fY29uY2F0QWxsKHRoaXMsIGNvZGVVbml0Q291bnQpOwogIH0KCiAgU3RyaW5nIF9qb2luV2l0aFNlcGFyYXRvcihTdHJpbmcgc2VwYXJhdG9yKSB7CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgYnVmZmVyLndyaXRlKHRoaXNbMF0pOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGJ1ZmZlci53cml0ZShzZXBhcmF0b3IpOwogICAgICBidWZmZXIud3JpdGUodGhpc1tpXSk7CiAgICB9CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBUIGVsZW1lbnRBdChpbnQgaW5kZXgpIHsKICAgIHJldHVybiB0aGlzW2luZGV4XTsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgewogICAgcmV0dXJuIHRoaXMubGVuZ3RoID09IDA7CiAgfQoKICBib29sIGdldCBpc05vdEVtcHR5ID0+ICFpc0VtcHR5OwoKICB2b2lkIGNsZWFyKCkgewogICAgdGhpcy5sZW5ndGggPSAwOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gTGlzdEJhc2UubGlzdFRvU3RyaW5nKHRoaXMpOwoKICBAcHJhZ21hKCJ2bTpwcmVmZXItaW5saW5lIikKICBJdGVyYXRvcjxUPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBMaXN0SXRlcmF0b3I8VD4odGhpcyk7CiAgfQoKICBMaXN0PFQ+IHRvTGlzdCh7Ym9vbCBncm93YWJsZTogdHJ1ZX0pIHsKICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGlmIChsZW5ndGggPiAwKSB7CiAgICAgIExpc3QgbGlzdCA9IGdyb3dhYmxlID8gbmV3IF9MaXN0KGxlbmd0aCkgOiBuZXcgX0xpc3Q8VD4obGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIGxpc3RbaV0gPSB0aGlzW2ldOwogICAgICB9CiAgICAgIGlmICghZ3Jvd2FibGUpIHJldHVybiBsaXN0OwogICAgICB2YXIgcmVzdWx0ID0gbmV3IF9Hcm93YWJsZUxpc3Q8VD4uX3dpdGhEYXRhKGxpc3QpOwogICAgICByZXN1bHQuX3NldExlbmd0aChsZW5ndGgpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIGdyb3dhYmxlID8gPFQ+W10gOiBuZXcgTGlzdDxUPigwKTsKICB9CgogIFNldDxUPiB0b1NldCgpIHsKICAgIHJldHVybiBuZXcgU2V0PFQ+LmZyb20odGhpcyk7CiAgfQp9CoGMAE5OPAEeARotJis0BiAUDgYhTkxLNxNBGwQBGh4lHUMGHRMEASAsIBUVCAYSBAE0JzQGOlEkBitNTEAkQR0EATEcOg0kIQgGBAEpOTsvBAEqPx4jIychBjcfEwQBJiY3FiEGEwQBNSgxBAExTgE0HjcBNB4yASQiIycbHg4GQU0bSxkjPR0pDTIYCAYcBAFDATwBPQEqHwQBSQEkHhYWHCEGGRcEASYWKTIzLD0bLSUiGg0kIBQIFik3CiE1LCsKEAgGJSAJIB4hICRQFggnFAQBHhMaGhcRBAEQJCwEAQ8tLAQBESU9KgQBQTABLRkrGQZANCQEASxBASEvRkJJQEAXFikeCAYXBAEzL04aLR4IBhcEARkBHh8gJxJQBgQBKSQgKkQPGxkfLycpDTkSCDstASowISYNG0IKHwgBSCY8Kwg8OhU1GUchLw0gHwggQj8IPgYrOwQBMC4bLB8dBh4EARsYBAEVHQQBIwERFQQBNAEeHSYEASoeFkcpGwgiOSEVBi4EARMiBAIBI2RhcnQ6Y29yZS1wYXRjaC9ncm93YWJsZV9hcnJheS5kYXJ0Mm9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvaW1tdXRhYmxlX21hcC5kYXJ0lZ0vLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCi8vLyBJbW11dGFibGUgbWFwIGNsYXNzIGZvciBjb21waWxlciBnZW5lcmF0ZWQgbWFwIGxpdGVyYWxzLgovLyBUT0RPKGxybik6IEV4dGVuZCBNYXBCYXNlIHdpdGggVW5tb2RpZmlhYmxlTWFwTWl4aW4gd2hlbiBtaXhpbnMKLy8gc3VwcG9ydCBmb3J3YXJkaW5nIGNvbnN0IGNvbnN0cnVjdG9ycy4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfSW1tdXRhYmxlTWFwPEssIFY+IGltcGxlbWVudHMgTWFwPEssIFY+IHsKICBmaW5hbCBfSW1tdXRhYmxlTGlzdCBfa3ZQYWlyczsKCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGNvbnN0IF9JbW11dGFibGVNYXAuX2NyZWF0ZShfSW1tdXRhYmxlTGlzdCBrZXlWYWx1ZVBhaXJzKQogICAgICA6IF9rdlBhaXJzID0ga2V5VmFsdWVQYWlyczsKCiAgTWFwPEsyLCBWMj4gY2FzdDxLMiwgVjI+KCkgPT4gTWFwLmNhc3RGcm9tPEssIFYsIEsyLCBWMj4odGhpcyk7CiAgViBvcGVyYXRvciBbXShPYmplY3Qga2V5KSB7CiAgICAvLyBUbyBwcmVzZXJ2ZSB0aGUga2V5LXZhbHVlIG9yZGVyIG9mIHRoZSBtYXAgbGl0ZXJhbCwgdGhlIGtleXMgYXJlCiAgICAvLyBub3Qgc29ydGVkLiBOZWVkIHRvIGRvIGxpbmVhciBzZWFyY2ggb3IgaW1wbGVtZW50IGFuIGFkZGl0aW9uYWwKICAgIC8vIGxvb2t1cCB0YWJsZS4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2t2UGFpcnMubGVuZ3RoIC0gMTsgaSArPSAyKSB7CiAgICAgIGlmIChrZXkgPT0gX2t2UGFpcnNbaV0pIHsKICAgICAgICByZXR1cm4gX2t2UGFpcnNbaSArIDFdOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CgogIGJvb2wgZ2V0IGlzRW1wdHkgewogICAgcmV0dXJuIF9rdlBhaXJzLmxlbmd0aCA9PSAwOwogIH0KCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKCiAgaW50IGdldCBsZW5ndGggewogICAgcmV0dXJuIF9rdlBhaXJzLmxlbmd0aCB+LyAyOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihLIGtleSwgViB2YWx1ZSkpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX2t2UGFpcnMubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgZihfa3ZQYWlyc1tpXSwgX2t2UGFpcnNbaSArIDFdKTsKICAgIH0KICB9CgogIEl0ZXJhYmxlPEs+IGdldCBrZXlzIHsKICAgIHJldHVybiBuZXcgX0ltbXV0YWJsZU1hcEtleUl0ZXJhYmxlPEs+KHRoaXMpOwogIH0KCiAgSXRlcmFibGU8Vj4gZ2V0IHZhbHVlcyB7CiAgICByZXR1cm4gbmV3IF9JbW11dGFibGVNYXBWYWx1ZUl0ZXJhYmxlPFY+KHRoaXMpOwogIH0KCiAgYm9vbCBjb250YWluc0tleShPYmplY3Qga2V5KSB7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IF9rdlBhaXJzLmxlbmd0aDsgaSArPSAyKSB7CiAgICAgIGlmIChrZXkgPT0gX2t2UGFpcnNbaV0pIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgYm9vbCBjb250YWluc1ZhbHVlKE9iamVjdCB2YWx1ZSkgewogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBfa3ZQYWlycy5sZW5ndGg7IGkgKz0gMikgewogICAgICBpZiAodmFsdWUgPT0gX2t2UGFpcnNbaV0pIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgdm9pZCBvcGVyYXRvciBbXT0oSyBrZXksIFYgdmFsdWUpIHsKICAgIHRocm93IG5ldyBVbnN1cHBvcnRlZEVycm9yKCJDYW5ub3Qgc2V0IHZhbHVlIGluIHVubW9kaWZpYWJsZSBNYXAiKTsKICB9CgogIHZvaWQgYWRkQWxsKE1hcDxLLCBWPiBvdGhlcikgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBzZXQgdmFsdWUgaW4gdW5tb2RpZmlhYmxlIE1hcCIpOwogIH0KCiAgViBwdXRJZkFic2VudChLIGtleSwgViBpZkFic2VudCgpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHNldCB2YWx1ZSBpbiB1bm1vZGlmaWFibGUgTWFwIik7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBjbGVhciB1bm1vZGlmaWFibGUgTWFwIik7CiAgfQoKICBWIHJlbW92ZShPYmplY3Qga2V5KSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IHJlbW92ZSBmcm9tIHVubW9kaWZpYWJsZSBNYXAiKTsKICB9CgogIEl0ZXJhYmxlPE1hcEVudHJ5PEssIFY+PiBnZXQgZW50cmllcyA9PgogICAgICBuZXcgX0ltbXV0YWJsZU1hcEVudHJ5SXRlcmFibGU8SywgVj4odGhpcyk7CgogIE1hcDxLMiwgVjI+IG1hcDxLMiwgVjI+KE1hcEVudHJ5PEsyLCBWMj4gZihLIGtleSwgViB2YWx1ZSkpIHsKICAgIHZhciByZXN1bHQgPSA8SzIsIFYyPnt9OwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfa3ZQYWlycy5sZW5ndGg7IGkgKz0gMikgewogICAgICB2YXIgZW50cnkgPSBmKF9rdlBhaXJzW2ldLCBfa3ZQYWlyc1tpICsgMV0pOwogICAgICByZXN1bHRbZW50cnkua2V5XSA9IGVudHJ5LnZhbHVlOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIHZvaWQgYWRkRW50cmllcyhJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gbmV3RW50cmllcykgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIE1hcCIpOwogIH0KCiAgViB1cGRhdGUoSyBrZXksIFYgdXBkYXRlKFYgdmFsdWUpLCB7ViBpZkFic2VudCgpfSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIE1hcCIpOwogIH0KCiAgdm9pZCB1cGRhdGVBbGwoViB1cGRhdGUoSyBrZXksIFYgdmFsdWUpKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgTWFwIik7CiAgfQoKICB2b2lkIHJlbW92ZVdoZXJlKGJvb2wgcHJlZGljYXRlKEsga2V5LCBWIHZhbHVlKSkgewogICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIE1hcCIpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gTWFwQmFzZS5tYXBUb1N0cmluZyh0aGlzKTsKfQoKY2xhc3MgX0ltbXV0YWJsZU1hcEtleUl0ZXJhYmxlPEU+IGV4dGVuZHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gewogIGZpbmFsIF9JbW11dGFibGVNYXAgX21hcDsKICBfSW1tdXRhYmxlTWFwS2V5SXRlcmFibGUodGhpcy5fbWFwKTsKCiAgSXRlcmF0b3I8RT4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgX0ltbXV0YWJsZU1hcEtleUl0ZXJhdG9yPEU+KF9tYXApOwogIH0KCiAgaW50IGdldCBsZW5ndGggPT4gX21hcC5sZW5ndGg7Cn0KCmNsYXNzIF9JbW11dGFibGVNYXBWYWx1ZUl0ZXJhYmxlPEU+IGV4dGVuZHMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4gewogIGZpbmFsIF9JbW11dGFibGVNYXAgX21hcDsKICBfSW1tdXRhYmxlTWFwVmFsdWVJdGVyYWJsZSh0aGlzLl9tYXApOwoKICBJdGVyYXRvcjxFPiBnZXQgaXRlcmF0b3IgewogICAgcmV0dXJuIG5ldyBfSW1tdXRhYmxlTWFwVmFsdWVJdGVyYXRvcjxFPihfbWFwKTsKICB9CgogIGludCBnZXQgbGVuZ3RoID0+IF9tYXAubGVuZ3RoOwp9CgpjbGFzcyBfSW1tdXRhYmxlTWFwRW50cnlJdGVyYWJsZTxLLCBWPgogICAgZXh0ZW5kcyBFZmZpY2llbnRMZW5ndGhJdGVyYWJsZTxNYXBFbnRyeTxLLCBWPj4gewogIGZpbmFsIF9JbW11dGFibGVNYXAgX21hcDsKICBfSW1tdXRhYmxlTWFwRW50cnlJdGVyYWJsZSh0aGlzLl9tYXApOwoKICBJdGVyYXRvcjxNYXBFbnRyeTxLLCBWPj4gZ2V0IGl0ZXJhdG9yIHsKICAgIHJldHVybiBuZXcgX0ltbXV0YWJsZU1hcEVudHJ5SXRlcmF0b3I8SywgVj4oX21hcCk7CiAgfQoKICBpbnQgZ2V0IGxlbmd0aCA9PiBfbWFwLmxlbmd0aDsKfQoKY2xhc3MgX0ltbXV0YWJsZU1hcEtleUl0ZXJhdG9yPEU+IGltcGxlbWVudHMgSXRlcmF0b3I8RT4gewogIF9JbW11dGFibGVNYXAgX21hcDsKICBpbnQgX25leHRJbmRleCA9IDA7CiAgRSBfY3VycmVudDsKCiAgX0ltbXV0YWJsZU1hcEtleUl0ZXJhdG9yKHRoaXMuX21hcCk7CgogIGJvb2wgbW92ZU5leHQoKSB7CiAgICBpbnQgbmV3SW5kZXggPSBfbmV4dEluZGV4OwogICAgaWYgKG5ld0luZGV4IDwgX21hcC5sZW5ndGgpIHsKICAgICAgX25leHRJbmRleCA9IG5ld0luZGV4ICsgMTsKICAgICAgX2N1cnJlbnQgPSBfbWFwLl9rdlBhaXJzW25ld0luZGV4ICogMl07CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgX2N1cnJlbnQgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgRSBnZXQgY3VycmVudCA9PiBfY3VycmVudDsKfQoKY2xhc3MgX0ltbXV0YWJsZU1hcFZhbHVlSXRlcmF0b3I8RT4gaW1wbGVtZW50cyBJdGVyYXRvcjxFPiB7CiAgX0ltbXV0YWJsZU1hcCBfbWFwOwogIGludCBfbmV4dEluZGV4ID0gMDsKICBFIF9jdXJyZW50OwoKICBfSW1tdXRhYmxlTWFwVmFsdWVJdGVyYXRvcih0aGlzLl9tYXApOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaW50IG5ld0luZGV4ID0gX25leHRJbmRleDsKICAgIGlmIChuZXdJbmRleCA8IF9tYXAubGVuZ3RoKSB7CiAgICAgIF9uZXh0SW5kZXggPSBuZXdJbmRleCArIDE7CiAgICAgIF9jdXJyZW50ID0gX21hcC5fa3ZQYWlyc1tuZXdJbmRleCAqIDIgKyAxXTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBfY3VycmVudCA9IG51bGw7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBFIGdldCBjdXJyZW50ID0+IF9jdXJyZW50Owp9CgpjbGFzcyBfSW1tdXRhYmxlTWFwRW50cnlJdGVyYXRvcjxLLCBWPiBpbXBsZW1lbnRzIEl0ZXJhdG9yPE1hcEVudHJ5PEssIFY+PiB7CiAgX0ltbXV0YWJsZU1hcCBfbWFwOwogIGludCBfbmV4dEluZGV4ID0gMDsKICBNYXBFbnRyeTxLLCBWPiBfY3VycmVudDsKCiAgX0ltbXV0YWJsZU1hcEVudHJ5SXRlcmF0b3IodGhpcy5fbWFwKTsKCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIGludCBuZXdJbmRleCA9IF9uZXh0SW5kZXg7CiAgICBpZiAobmV3SW5kZXggPCBfbWFwLmxlbmd0aCkgewogICAgICBfbmV4dEluZGV4ID0gbmV3SW5kZXggKyAxOwogICAgICBfY3VycmVudCA9IG5ldyBNYXBFbnRyeTxLLCBWPigKICAgICAgICAgIF9tYXAuX2t2UGFpcnNbbmV3SW5kZXggKiAyXSwgX21hcC5fa3ZQYWlyc1tuZXdJbmRleCAqIDIgKyAxXSk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgX2N1cnJlbnQgPSBudWxsOwogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgTWFwRW50cnk8SywgVj4gZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7Cn0KgN4ATk48AR4BPUMqGjEhARw8IgFCHkhHFTcgIAgGEQQBFSEEASMBEyEEASkzJwYEARkyBAEbNAQBITMgFQgGEgQBJTMiFQgGEgQBJkgEASFIBAEnSAQBEUEEARlHBAEqMgFAHTMzJwYTBAE5RQQBN0UEAS1FBAE1RQQBMgIBRxwnAR0yBAEhAgFJHCkBHTQEASECASc2HCkBKjcEASECATsWFg4BJwEUHyIhLhMGFRIEAR0CAT0WFg4BKQEUHyIhMhMGFRIEAR0CAU0WFhsBKQEUHyIhJUkTBhUSBAEqAgEiZGFydDpjb3JlLXBhdGNoL2ltbXV0YWJsZV9tYXAuZGFydC1vcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2ludGVnZXJzLmRhcnTAAFrTLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgphYnN0cmFjdCBjbGFzcyBfSW50ZWdlckltcGxlbWVudGF0aW9uIGltcGxlbWVudHMgaW50IHsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgbnVtIG9wZXJhdG9yICsobnVtIG90aGVyKSA9PiBvdGhlci5fYWRkRnJvbUludGVnZXIodGhpcyk7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIG51bSBvcGVyYXRvciAtKG51bSBvdGhlcikgPT4gb3RoZXIuX3N1YkZyb21JbnRlZ2VyKHRoaXMpOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBudW0gb3BlcmF0b3IgKihudW0gb3RoZXIpID0+IG90aGVyLl9tdWxGcm9tSW50ZWdlcih0aGlzKTsKCiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGludCBvcGVyYXRvciB+LyhudW0gb3RoZXIpIHsKICAgIGlmICgob3RoZXIgaXMgaW50KSAmJiAob3RoZXIgPT0gMCkpIHsKICAgICAgdGhyb3cgY29uc3QgSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uKCk7CiAgICB9CiAgICByZXR1cm4gb3RoZXIuX3RydW5jRGl2RnJvbUludGVnZXIodGhpcyk7CiAgfQoKICBkb3VibGUgb3BlcmF0b3IgLyhudW0gb3RoZXIpIHsKICAgIHJldHVybiB0aGlzLnRvRG91YmxlKCkgLyBvdGhlci50b0RvdWJsZSgpOwogIH0KCiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBudW0gb3BlcmF0b3IgJShudW0gb3RoZXIpIHsKICAgIGlmICgob3RoZXIgaXMgaW50KSAmJiAob3RoZXIgPT0gMCkpIHsKICAgICAgdGhyb3cgY29uc3QgSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uKCk7CiAgICB9CiAgICByZXR1cm4gb3RoZXIuX21vZHVsb0Zyb21JbnRlZ2VyKHRoaXMpOwogIH0KCiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGludCBvcGVyYXRvciAtKCkgewogICAgcmV0dXJuIDAgLSB0aGlzOwogIH0KCiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGludCBvcGVyYXRvciAmKGludCBvdGhlcikgPT4gb3RoZXIuX2JpdEFuZEZyb21JbnRlZ2VyKHRoaXMpOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgfChpbnQgb3RoZXIpID0+IG90aGVyLl9iaXRPckZyb21JbnRlZ2VyKHRoaXMpOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgXihpbnQgb3RoZXIpID0+IG90aGVyLl9iaXRYb3JGcm9tSW50ZWdlcih0aGlzKTsKCiAgbnVtIHJlbWFpbmRlcihudW0gb3RoZXIpIHsKICAgIHJldHVybiBvdGhlci5fcmVtYWluZGVyRnJvbUludGVnZXIodGhpcyk7CiAgfQoKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIGludCBfYml0QW5kRnJvbVNtaShfU21pIG90aGVyKSBuYXRpdmUgIkludGVnZXJfYml0QW5kRnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF9iaXRBbmRGcm9tSW50ZWdlcihpbnQgb3RoZXIpIG5hdGl2ZSAiSW50ZWdlcl9iaXRBbmRGcm9tSW50ZWdlciI7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBpbnQgX2JpdE9yRnJvbUludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkludGVnZXJfYml0T3JGcm9tSW50ZWdlciI7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBpbnQgX2JpdFhvckZyb21JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX2JpdFhvckZyb21JbnRlZ2VyIjsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIGludCBfc2hyRnJvbUludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkludGVnZXJfc2hyRnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF9zaGxGcm9tSW50ZWdlcihpbnQgb3RoZXIpIG5hdGl2ZSAiSW50ZWdlcl9zaGxGcm9tSW50ZWdlciI7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBpbnQgX2FkZEZyb21JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX2FkZEZyb21JbnRlZ2VyIjsKICBAcHJhZ21hKCJ2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGUiKQogIGludCBfc3ViRnJvbUludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkludGVnZXJfc3ViRnJvbUludGVnZXIiOwogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgaW50IF9tdWxGcm9tSW50ZWdlcihpbnQgb3RoZXIpIG5hdGl2ZSAiSW50ZWdlcl9tdWxGcm9tSW50ZWdlciI7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBpbnQgX3RydW5jRGl2RnJvbUludGVnZXIoaW50IG90aGVyKSBuYXRpdmUgIkludGVnZXJfdHJ1bmNEaXZGcm9tSW50ZWdlciI7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBpbnQgX21vZHVsb0Zyb21JbnRlZ2VyKGludCBvdGhlcikgbmF0aXZlICJJbnRlZ2VyX21vZHVsb0Zyb21JbnRlZ2VyIjsKICBpbnQgX3JlbWFpbmRlckZyb21JbnRlZ2VyKGludCBvdGhlcikgewogICAgcmV0dXJuIG90aGVyIC0gKG90aGVyIH4vIHRoaXMpICogdGhpczsKICB9CgogIEBwcmFnbWEoInZtOm5vbi1udWxsYWJsZS1yZXN1bHQtdHlwZSIpCiAgQHByYWdtYSgidm06bmV2ZXItaW5saW5lIikKICBpbnQgb3BlcmF0b3IgPj4oaW50IG90aGVyKSA9PiBvdGhlci5fc2hyRnJvbUludGVnZXIodGhpcyk7CiAgQHByYWdtYSgidm06bm9uLW51bGxhYmxlLXJlc3VsdC10eXBlIikKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGludCBvcGVyYXRvciA8PChpbnQgb3RoZXIpID0+IG90aGVyLl9zaGxGcm9tSW50ZWdlcih0aGlzKTsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgYm9vbCBvcGVyYXRvciA8KG51bSBvdGhlcikgewogICAgcmV0dXJuIG90aGVyID4gdGhpczsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPihudW0gb3RoZXIpIHsKICAgIHJldHVybiBvdGhlci5fZ3JlYXRlclRoYW5Gcm9tSW50ZWdlcih0aGlzKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBAcHJhZ21hKCJ2bTpuZXZlci1pbmxpbmUiKQogIGJvb2wgb3BlcmF0b3IgPj0obnVtIG90aGVyKSB7CiAgICByZXR1cm4gKHRoaXMgPT0gb3RoZXIpIHx8ICh0aGlzID4gb3RoZXIpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgYm9vbCBvcGVyYXRvciA8PShudW0gb3RoZXIpIHsKICAgIHJldHVybiAodGhpcyA9PSBvdGhlcikgfHwgKHRoaXMgPCBvdGhlcik7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBfZ3JlYXRlclRoYW5Gcm9tSW50ZWdlcihpbnQgb3RoZXIpCiAgICAgIG5hdGl2ZSAiSW50ZWdlcl9ncmVhdGVyVGhhbkZyb21JbnRlZ2VyIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBib29sKQogIEBwcmFnbWEoInZtOm5ldmVyLWlubGluZSIpCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIGlmIChvdGhlciBpcyBudW0pIHsKICAgICAgcmV0dXJuIG90aGVyLl9lcXVhbFRvSW50ZWdlcih0aGlzKTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIF9lcXVhbFRvSW50ZWdlcihpbnQgb3RoZXIpIG5hdGl2ZSAiSW50ZWdlcl9lcXVhbFRvSW50ZWdlciI7CiAgaW50IGFicygpIHsKICAgIHJldHVybiB0aGlzIDwgMCA/IC10aGlzIDogdGhpczsKICB9CgogIGludCBnZXQgc2lnbiB7CiAgICByZXR1cm4gKHRoaXMgPiAwKSA/IDEgOiAodGhpcyA8IDApID8gLTEgOiAwOwogIH0KCiAgYm9vbCBnZXQgaXNFdmVuID0+ICgodGhpcyAmIDEpID09IDApOwogIGJvb2wgZ2V0IGlzT2RkID0+ICFpc0V2ZW47CiAgYm9vbCBnZXQgaXNOYU4gPT4gZmFsc2U7CiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSA9PiB0aGlzIDwgMDsKICBib29sIGdldCBpc0luZmluaXRlID0+IGZhbHNlOwogIGJvb2wgZ2V0IGlzRmluaXRlID0+IHRydWU7CgogIGludCB0b1Vuc2lnbmVkKGludCB3aWR0aCkgewogICAgcmV0dXJuIHRoaXMgJiAoKDEgPDwgd2lkdGgpIC0gMSk7CiAgfQoKICBpbnQgdG9TaWduZWQoaW50IHdpZHRoKSB7CiAgICAvLyBUaGUgdmFsdWUgb2YgYmluYXJ5IG51bWJlciB3ZWlnaHRzIGVhY2ggYml0IGJ5IGEgcG93ZXIgb2YgdHdvLiAgVGhlCiAgICAvLyB0d29zLWNvbXBsZW1lbnQgdmFsdWUgd2VpZ2h0cyB0aGUgc2lnbiBiaXQgbmVnYXRpdmVseS4gIFdlIGNvbXB1dGUgdGhlCiAgICAvLyB2YWx1ZSBvZiB0aGUgbmVnYXRpdmUgd2VpZ2h0aW5nIGJ5IGlzb2xhdGluZyB0aGUgc2lnbiBiaXQgd2l0aCB0aGUKICAgIC8vIGNvcnJlY3QgcG93ZXIgb2YgdHdvIHdlaWdodGluZyBhbmQgc3VidHJhY3RpbmcgaXQgZnJvbSB0aGUgdmFsdWUgb2YgdGhlCiAgICAvLyBsb3dlciBiaXRzLgogICAgaW50IHNpZ25NYXNrID0gMSA8PCAod2lkdGggLSAxKTsKICAgIHJldHVybiAodGhpcyAmIChzaWduTWFzayAtIDEpKSAtICh0aGlzICYgc2lnbk1hc2spOwogIH0KCiAgaW50IGNvbXBhcmVUbyhudW0gb3RoZXIpIHsKICAgIGNvbnN0IGludCBFUVVBTCA9IDAsIExFU1MgPSAtMSwgR1JFQVRFUiA9IDE7CiAgICBpZiAob3RoZXIgaXMgZG91YmxlKSB7CiAgICAgIGNvbnN0IGludCBNQVhfRVhBQ1RfSU5UX1RPX0RPVUJMRSA9IDkwMDcxOTkyNTQ3NDA5OTI7IC8vIDJeNTMuCiAgICAgIGNvbnN0IGludCBNSU5fRVhBQ1RfSU5UX1RPX0RPVUJMRSA9IC1NQVhfRVhBQ1RfSU5UX1RPX0RPVUJMRTsKICAgICAgY29uc3QgYm9vbCBsaW1pdEludHNUbzY0Qml0cyA9ICgoMSA8PCA2NCkgPT0gMCk7CiAgICAgIGlmIChsaW1pdEludHNUbzY0Qml0cykgewogICAgICAgIC8vIFdpdGggaW50ZWdlcnMgbGltaXRlZCB0byA2NCBiaXRzLCBkb3VibGUudG9JbnQoKSBjbGFtcHMKICAgICAgICAvLyBkb3VibGUgdmFsdWUgdG8gZml0IGludG8gdGhlIE1JTl9JTlQ2NC4uTUFYX0lOVDY0IHJhbmdlLgogICAgICAgIC8vIENoZWNrIGlmIHRoZSBkb3VibGUgdmFsdWUgaXMgb3V0c2lkZSBvZiB0aGlzIHJhbmdlLgogICAgICAgIC8vIFRoaXMgY2hlY2sgaGFuZGxlcyArLy1pbmZpbml0eSBhcyB3ZWxsLgogICAgICAgIGNvbnN0IGRvdWJsZSBtaW5JbnQ2NEFzRG91YmxlID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDguMDsKICAgICAgICAvLyBNQVhfSU5UNjQgaXMgbm90IHByZWNpc2VseSByZXByZXNlbnRhYmxlIGluIGRvdWJsZXMsIHNvCiAgICAgICAgLy8gY2hlY2sgYWdhaW5zdCAoTUFYX0lOVDY0ICsgMSkuCiAgICAgICAgY29uc3QgZG91YmxlIG1heEludDY0UGx1czFBc0RvdWJsZSA9IDkyMjMzNzIwMzY4NTQ3NzU4MDguMDsKICAgICAgICBpZiAob3RoZXIgPCBtaW5JbnQ2NEFzRG91YmxlKSB7CiAgICAgICAgICByZXR1cm4gR1JFQVRFUjsKICAgICAgICB9IGVsc2UgaWYgKG90aGVyID49IG1heEludDY0UGx1czFBc0RvdWJsZSkgewogICAgICAgICAgcmV0dXJuIExFU1M7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmIChvdGhlci5pc0luZmluaXRlKSB7CiAgICAgICAgICByZXR1cm4gb3RoZXIuaXNOZWdhdGl2ZSA/IEdSRUFURVIgOiBMRVNTOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAob3RoZXIuaXNOYU4pIHsKICAgICAgICByZXR1cm4gTEVTUzsKICAgICAgfQogICAgICBpZiAoTUlOX0VYQUNUX0lOVF9UT19ET1VCTEUgPD0gdGhpcyAmJiB0aGlzIDw9IE1BWF9FWEFDVF9JTlRfVE9fRE9VQkxFKSB7CiAgICAgICAgLy8gTGV0IHRoZSBkb3VibGUgaW1wbGVtZW50YXRpb24gZGVhbCB3aXRoIC0wLjAuCiAgICAgICAgcmV0dXJuIC0ob3RoZXIuY29tcGFyZVRvKHRoaXMudG9Eb3VibGUoKSkpOwogICAgICB9IGVsc2UgewogICAgICAgIC8vIElmIGFicyhvdGhlcikgPiBNQVhfRVhBQ1RfSU5UX1RPX0RPVUJMRSwgdGhlbiBvdGhlciBoYXMgYW4gaW50ZWdlcgogICAgICAgIC8vIHZhbHVlIChubyBiaXRzIGJlbG93IHRoZSBkZWNpbWFsIHBvaW50KS4KICAgICAgICBvdGhlciA9IG90aGVyLnRvSW50KCk7CiAgICAgIH0KICAgIH0KICAgIGlmICh0aGlzIDwgb3RoZXIpIHsKICAgICAgcmV0dXJuIExFU1M7CiAgICB9IGVsc2UgaWYgKHRoaXMgPiBvdGhlcikgewogICAgICByZXR1cm4gR1JFQVRFUjsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBFUVVBTDsKICAgIH0KICB9CgogIGludCByb3VuZCgpIHsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgaW50IGZsb29yKCkgewogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBpbnQgY2VpbCgpIHsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgaW50IHRydW5jYXRlKCkgewogICAgcmV0dXJuIHRoaXM7CiAgfQoKICBkb3VibGUgcm91bmRUb0RvdWJsZSgpIHsKICAgIHJldHVybiB0aGlzLnRvRG91YmxlKCk7CiAgfQoKICBkb3VibGUgZmxvb3JUb0RvdWJsZSgpIHsKICAgIHJldHVybiB0aGlzLnRvRG91YmxlKCk7CiAgfQoKICBkb3VibGUgY2VpbFRvRG91YmxlKCkgewogICAgcmV0dXJuIHRoaXMudG9Eb3VibGUoKTsKICB9CgogIGRvdWJsZSB0cnVuY2F0ZVRvRG91YmxlKCkgewogICAgcmV0dXJuIHRoaXMudG9Eb3VibGUoKTsKICB9CgogIG51bSBjbGFtcChudW0gbG93ZXJMaW1pdCwgbnVtIHVwcGVyTGltaXQpIHsKICAgIGlmIChsb3dlckxpbWl0IGlzISBudW0pIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUobG93ZXJMaW1pdCwgImxvd2VyTGltaXQiLCAibm90IGEgbnVtYmVyIik7CiAgICB9CiAgICBpZiAodXBwZXJMaW1pdCBpcyEgbnVtKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKHVwcGVyTGltaXQsICJ1cHBlckxpbWl0IiwgIm5vdCBhIG51bWJlciIpOwogICAgfQoKICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgaW50ZWdlcnMuCiAgICBpZiAobG93ZXJMaW1pdCBpcyBpbnQgJiYgdXBwZXJMaW1pdCBpcyBpbnQgJiYgbG93ZXJMaW1pdCA8PSB1cHBlckxpbWl0KSB7CiAgICAgIGlmICh0aGlzIDwgbG93ZXJMaW1pdCkgcmV0dXJuIGxvd2VyTGltaXQ7CiAgICAgIGlmICh0aGlzID4gdXBwZXJMaW1pdCkgcmV0dXJuIHVwcGVyTGltaXQ7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgLy8gR2VuZXJpYyBjYXNlIGludm9sdmluZyBkb3VibGVzLCBhbmQgaW52YWxpZCBpbnRlZ2VyIHJhbmdlcy4KICAgIGlmIChsb3dlckxpbWl0LmNvbXBhcmVUbyh1cHBlckxpbWl0KSA+IDApIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IobG93ZXJMaW1pdCk7CiAgICB9CiAgICBpZiAobG93ZXJMaW1pdC5pc05hTikgcmV0dXJuIGxvd2VyTGltaXQ7CiAgICAvLyBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBjYXJlIGZvciAtMC4wIGZvciB0aGUgbG93ZXIgbGltaXQuCiAgICBpZiAodGhpcyA8IGxvd2VyTGltaXQpIHJldHVybiBsb3dlckxpbWl0OwogICAgaWYgKHRoaXMuY29tcGFyZVRvKHVwcGVyTGltaXQpID4gMCkgcmV0dXJuIHVwcGVyTGltaXQ7CiAgICByZXR1cm4gdGhpczsKICB9CgogIGludCB0b0ludCgpIHsKICAgIHJldHVybiB0aGlzOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCBfRG91YmxlKQogIGRvdWJsZSB0b0RvdWJsZSgpIHsKICAgIHJldHVybiBuZXcgX0RvdWJsZS5mcm9tSW50ZWdlcih0aGlzKTsKICB9CgogIFN0cmluZyB0b1N0cmluZ0FzRml4ZWQoaW50IGZyYWN0aW9uRGlnaXRzKSB7CiAgICByZXR1cm4gdGhpcy50b0RvdWJsZSgpLnRvU3RyaW5nQXNGaXhlZChmcmFjdGlvbkRpZ2l0cyk7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmdBc0V4cG9uZW50aWFsKFtpbnQgZnJhY3Rpb25EaWdpdHNdKSB7CiAgICByZXR1cm4gdGhpcy50b0RvdWJsZSgpLnRvU3RyaW5nQXNFeHBvbmVudGlhbChmcmFjdGlvbkRpZ2l0cyk7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmdBc1ByZWNpc2lvbihpbnQgcHJlY2lzaW9uKSB7CiAgICByZXR1cm4gdGhpcy50b0RvdWJsZSgpLnRvU3RyaW5nQXNQcmVjaXNpb24ocHJlY2lzaW9uKTsKICB9CgogIHN0YXRpYyBjb25zdCBfZGlnaXRzID0gIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiI7CgogIFN0cmluZyB0b1JhZGl4U3RyaW5nKGludCByYWRpeCkgewogICAgaWYgKHJhZGl4IDwgMiB8fCAzNiA8IHJhZGl4KSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHJhZGl4LCAyLCAzNiwgInJhZGl4Iik7CiAgICB9CiAgICBpZiAocmFkaXggJiAocmFkaXggLSAxKSA9PSAwKSB7CiAgICAgIHJldHVybiBfdG9Qb3cyU3RyaW5nKHJhZGl4KTsKICAgIH0KICAgIGlmIChyYWRpeCA9PSAxMCkgcmV0dXJuIHRoaXMudG9TdHJpbmcoKTsKICAgIGZpbmFsIGJvb2wgaXNOZWdhdGl2ZSA9IHRoaXMgPCAwOwogICAgaW50IHZhbHVlID0gaXNOZWdhdGl2ZSA/IC10aGlzIDogdGhpczsKICAgIGlmICh2YWx1ZSA8IDApIHsKICAgICAgLy8gV2l0aCBpbnRlZ2VycyBsaW1pdGVkIHRvIDY0IGJpdHMsIHRoZSB2YWx1ZQogICAgICAvLyBNSU5fSU5UNjQgPSAtMHg4MDAwMDAwMDAwMDAwMDAwIG92ZXJmbG93cyBhdCBuZWdhdGlvbjoKICAgICAgLy8gLU1JTl9JTlQ2NCA9PSBNSU5fSU5UNjQsIHNvIGl0IHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcuCiAgICAgIHJldHVybiBfbWluSW50NjRUb1JhZGl4U3RyaW5nKHJhZGl4KTsKICAgIH0KICAgIExpc3QgdGVtcCA9IG5ldyBMaXN0KCk7CiAgICBkbyB7CiAgICAgIGludCBkaWdpdCA9IHZhbHVlICUgcmFkaXg7CiAgICAgIHZhbHVlIH4vPSByYWRpeDsKICAgICAgdGVtcC5hZGQoX2RpZ2l0cy5jb2RlVW5pdEF0KGRpZ2l0KSk7CiAgICB9IHdoaWxlICh2YWx1ZSA+IDApOwogICAgaWYgKGlzTmVnYXRpdmUpIHRlbXAuYWRkKDB4MmQpOyAvLyAnLScuCgogICAgX09uZUJ5dGVTdHJpbmcgc3RyaW5nID0gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKHRlbXAubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwLCBqID0gdGVtcC5sZW5ndGg7IGogPiAwOyBpKyspIHsKICAgICAgc3RyaW5nLl9zZXRBdChpLCB0ZW1wWy0tal0pOwogICAgfQogICAgcmV0dXJuIHN0cmluZzsKICB9CgogIFN0cmluZyBfdG9Qb3cyU3RyaW5nKGludCByYWRpeCkgewogICAgaW50IHZhbHVlID0gdGhpczsKICAgIGlmICh2YWx1ZSA9PSAwKSByZXR1cm4gIjAiOwogICAgYXNzZXJ0KHJhZGl4ICYgKHJhZGl4IC0gMSkgPT0gMCk7CiAgICB2YXIgbmVnYXRpdmUgPSB2YWx1ZSA8IDA7CiAgICB2YXIgYml0c1BlckRpZ2l0ID0gcmFkaXguYml0TGVuZ3RoIC0gMTsKICAgIHZhciBsZW5ndGggPSAwOwogICAgaWYgKG5lZ2F0aXZlKSB7CiAgICAgIHZhbHVlID0gLXZhbHVlOwogICAgICBsZW5ndGggPSAxOwogICAgICBpZiAodmFsdWUgPCAwKSB7CiAgICAgICAgLy8gV2l0aCBpbnRlZ2VycyBsaW1pdGVkIHRvIDY0IGJpdHMsIHRoZSB2YWx1ZQogICAgICAgIC8vIE1JTl9JTlQ2NCA9IC0weDgwMDAwMDAwMDAwMDAwMDAgb3ZlcmZsb3dzIGF0IG5lZ2F0aW9uOgogICAgICAgIC8vIC1NSU5fSU5UNjQgPT0gTUlOX0lOVDY0LCBzbyBpdCByZXF1aXJlcyBzcGVjaWFsIGhhbmRsaW5nLgogICAgICAgIHJldHVybiBfbWluSW50NjRUb1JhZGl4U3RyaW5nKHJhZGl4KTsKICAgICAgfQogICAgfQogICAgLy8gSW50ZWdlciBkaXZpc2lvbiwgcm91bmRpbmcgdXAsIHRvIGZpbmQgbnVtYmVyIG9mIF9kaWdpdHMuCiAgICBsZW5ndGggKz0gKHZhbHVlLmJpdExlbmd0aCArIGJpdHNQZXJEaWdpdCAtIDEpIH4vIGJpdHNQZXJEaWdpdDsKICAgIF9PbmVCeXRlU3RyaW5nIHN0cmluZyA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZShsZW5ndGgpOwogICAgc3RyaW5nLl9zZXRBdCgwLCAweDJkKTsgLy8gJy0nLiBJcyBvdmVyd3JpdHRlbiBpZiBub3QgbmVnYXRpdmUuCiAgICB2YXIgbWFzayA9IHJhZGl4IC0gMTsKICAgIGRvIHsKICAgICAgc3RyaW5nLl9zZXRBdCgtLWxlbmd0aCwgX2RpZ2l0cy5jb2RlVW5pdEF0KHZhbHVlICYgbWFzaykpOwogICAgICB2YWx1ZSA+Pj0gYml0c1BlckRpZ2l0OwogICAgfSB3aGlsZSAodmFsdWUgPiAwKTsKICAgIHJldHVybiBzdHJpbmc7CiAgfQoKICAvLy8gQ29udmVydHMgbmVnYXRpdmUgdmFsdWUgdG8gcmFkaXggc3RyaW5nLgogIC8vLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gaGFuZGxlIGNvcm5lciBjYXNlIG9mCiAgLy8vIE1JTl9JTlQ2NCA9IC0weDgwMDAwMDAwMDAwMDAwMDAuCiAgU3RyaW5nIF9taW5JbnQ2NFRvUmFkaXhTdHJpbmcoaW50IHJhZGl4KSB7CiAgICBMaXN0IHRlbXAgPSBuZXcgTGlzdCgpOwogICAgaW50IHZhbHVlID0gdGhpczsKICAgIGFzc2VydCh2YWx1ZSA8IDApOwogICAgZG8gewogICAgICBpbnQgZGlnaXQgPSAtdmFsdWUucmVtYWluZGVyKHJhZGl4KTsKICAgICAgdmFsdWUgfi89IHJhZGl4OwogICAgICB0ZW1wLmFkZChfZGlnaXRzLmNvZGVVbml0QXQoZGlnaXQpKTsKICAgIH0gd2hpbGUgKHZhbHVlICE9IDApOwogICAgdGVtcC5hZGQoMHgyZCk7IC8vICctJy4KCiAgICBfT25lQnl0ZVN0cmluZyBzdHJpbmcgPSBfT25lQnl0ZVN0cmluZy5fYWxsb2NhdGUodGVtcC5sZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IDAsIGogPSB0ZW1wLmxlbmd0aDsgaiA+IDA7IGkrKykgewogICAgICBzdHJpbmcuX3NldEF0KGksIHRlbXBbLS1qXSk7CiAgICB9CiAgICByZXR1cm4gc3RyaW5nOwogIH0KCiAgLy8gUmV0dXJucyBwb3codGhpcywgZSkgJSBtLgogIGludCBtb2RQb3coaW50IGUsIGludCBtKSB7CiAgICBpZiAoZSBpcyEgaW50KSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKGUsICJleHBvbmVudCIsICJub3QgYW4gaW50ZWdlciIpOwogICAgfQogICAgaWYgKG0gaXMhIGludCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShtLCAibW9kdWx1cyIsICJub3QgYW4gaW50ZWdlciIpOwogICAgfQogICAgaWYgKGUgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShlLCAwLCBudWxsLCAiZXhwb25lbnQiKTsKICAgIGlmIChtIDw9IDApIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKG0sIDEsIG51bGwsICJtb2R1bHVzIik7CiAgICBpZiAoZSA9PSAwKSByZXR1cm4gMTsKCiAgICAvLyBUaGlzIGlzIGZsb29yKHNxcnQoMl42MykpLgogICAgY29uc3QgaW50IG1heFZhbHVlVGhhdENhbkJlU3F1YXJlZFdpdGhvdXRUcnVuY2F0aW9uID0gMzAzNzAwMDQ5OTsKICAgIGlmIChtID4gbWF4VmFsdWVUaGF0Q2FuQmVTcXVhcmVkV2l0aG91dFRydW5jYXRpb24pIHsKICAgICAgLy8gVXNlIEJpZ0ludCB2ZXJzaW9uIHRvIGF2b2lkIHRydW5jYXRpb24gaW4gbXVsdGlwbGljYXRpb25zIGJlbG93LgogICAgICByZXR1cm4gQmlnSW50LmZyb20odGhpcykubW9kUG93KEJpZ0ludC5mcm9tKGUpLCBCaWdJbnQuZnJvbShtKSkudG9JbnQoKTsKICAgIH0KCiAgICBpbnQgYiA9IHRoaXM7CiAgICBpZiAoYiA8IDAgfHwgYiA+IG0pIHsKICAgICAgYiAlPSBtOwogICAgfQogICAgaW50IHIgPSAxOwogICAgd2hpbGUgKGUgPiAwKSB7CiAgICAgIGlmIChlLmlzT2RkKSB7CiAgICAgICAgciA9IChyICogYikgJSBtOwogICAgICB9CiAgICAgIGUgPj49IDE7CiAgICAgIGIgPSAoYiAqIGIpICUgbTsKICAgIH0KICAgIHJldHVybiByOwogIH0KCiAgLy8gSWYgaW52IGlzIGZhbHNlLCByZXR1cm5zIGdjZCh4LCB5KS4KICAvLyBJZiBpbnYgaXMgdHJ1ZSBhbmQgZ2NkKHgsIHkpID0gMSwgcmV0dXJucyBkLCBzbyB0aGF0IGMqeCArIGQqeSA9IDEuCiAgLy8gSWYgaW52IGlzIHRydWUgYW5kIGdjZCh4LCB5KSAhPSAxLCB0aHJvd3MgRXhjZXB0aW9uKCJOb3QgY29wcmltZSIpLgogIHN0YXRpYyBpbnQgX2JpbmFyeUdjZChpbnQgeCwgaW50IHksIGJvb2wgaW52KSB7CiAgICBpbnQgcyA9IDA7CiAgICBpZiAoIWludikgewogICAgICB3aGlsZSAoeC5pc0V2ZW4gJiYgeS5pc0V2ZW4pIHsKICAgICAgICB4ID4+PSAxOwogICAgICAgIHkgPj49IDE7CiAgICAgICAgcysrOwogICAgICB9CiAgICAgIGlmICh5LmlzT2RkKSB7CiAgICAgICAgdmFyIHQgPSB4OwogICAgICAgIHggPSB5OwogICAgICAgIHkgPSB0OwogICAgICB9CiAgICB9CiAgICBmaW5hbCBib29sIGFjID0geC5pc0V2ZW47CiAgICBpbnQgdSA9IHg7CiAgICBpbnQgdiA9IHk7CiAgICBpbnQgYSA9IDEsIGIgPSAwLCBjID0gMCwgZCA9IDE7CiAgICBkbyB7CiAgICAgIHdoaWxlICh1LmlzRXZlbikgewogICAgICAgIHUgPj49IDE7CiAgICAgICAgaWYgKGFjKSB7CiAgICAgICAgICBpZiAoIWEuaXNFdmVuIHx8ICFiLmlzRXZlbikgewogICAgICAgICAgICBhICs9IHk7CiAgICAgICAgICAgIGIgLT0geDsKICAgICAgICAgIH0KICAgICAgICAgIGEgPj49IDE7CiAgICAgICAgfSBlbHNlIGlmICghYi5pc0V2ZW4pIHsKICAgICAgICAgIGIgLT0geDsKICAgICAgICB9CiAgICAgICAgYiA+Pj0gMTsKICAgICAgfQogICAgICB3aGlsZSAodi5pc0V2ZW4pIHsKICAgICAgICB2ID4+PSAxOwogICAgICAgIGlmIChhYykgewogICAgICAgICAgaWYgKCFjLmlzRXZlbiB8fCAhZC5pc0V2ZW4pIHsKICAgICAgICAgICAgYyArPSB5OwogICAgICAgICAgICBkIC09IHg7CiAgICAgICAgICB9CiAgICAgICAgICBjID4+PSAxOwogICAgICAgIH0gZWxzZSBpZiAoIWQuaXNFdmVuKSB7CiAgICAgICAgICBkIC09IHg7CiAgICAgICAgfQogICAgICAgIGQgPj49IDE7CiAgICAgIH0KICAgICAgaWYgKHUgPj0gdikgewogICAgICAgIHUgLT0gdjsKICAgICAgICBpZiAoYWMpIGEgLT0gYzsKICAgICAgICBiIC09IGQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdiAtPSB1OwogICAgICAgIGlmIChhYykgYyAtPSBhOwogICAgICAgIGQgLT0gYjsKICAgICAgfQogICAgfSB3aGlsZSAodSAhPSAwKTsKICAgIGlmICghaW52KSByZXR1cm4gdiA8PCBzOwogICAgaWYgKHYgIT0gMSkgewogICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJOb3QgY29wcmltZSIpOwogICAgfQogICAgaWYgKGQgPCAwKSB7CiAgICAgIGQgKz0geDsKICAgICAgaWYgKGQgPCAwKSBkICs9IHg7CiAgICB9IGVsc2UgaWYgKGQgPiB4KSB7CiAgICAgIGQgLT0geDsKICAgICAgaWYgKGQgPiB4KSBkIC09IHg7CiAgICB9CiAgICByZXR1cm4gZDsKICB9CgogIC8vIFJldHVybnMgMS90aGlzICUgbSwgd2l0aCBtID4gMC4KICBpbnQgbW9kSW52ZXJzZShpbnQgbSkgewogICAgaWYgKG0gaXMhIGludCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShtLCAibW9kdWx1cyIsICJub3QgYW4gaW50ZWdlciIpOwogICAgfQogICAgaWYgKG0gPD0gMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UobSwgMSwgbnVsbCwgIm1vZHVsdXMiKTsKICAgIGlmIChtID09IDEpIHJldHVybiAwOwogICAgaW50IHQgPSB0aGlzOwogICAgaWYgKCh0IDwgMCkgfHwgKHQgPj0gbSkpIHQgJT0gbTsKICAgIGlmICh0ID09IDEpIHJldHVybiAxOwogICAgaWYgKCh0ID09IDApIHx8ICh0LmlzRXZlbiAmJiBtLmlzRXZlbikpIHsKICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiTm90IGNvcHJpbWUiKTsKICAgIH0KICAgIHJldHVybiBfYmluYXJ5R2NkKG0sIHQsIHRydWUpOwogIH0KCiAgLy8gUmV0dXJucyBnY2Qgb2YgYWJzKHRoaXMpIGFuZCBhYnMob3RoZXIpLgogIGludCBnY2QoaW50IG90aGVyKSB7CiAgICBpZiAob3RoZXIgaXMhIGludCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci52YWx1ZShvdGhlciwgIm90aGVyIiwgIm5vdCBhbiBpbnRlZ2VyIik7CiAgICB9CiAgICBpbnQgeCA9IHRoaXMuYWJzKCk7CiAgICBpbnQgeSA9IG90aGVyLmFicygpOwogICAgaWYgKHggPT0gMCkgcmV0dXJuIHk7CiAgICBpZiAoeSA9PSAwKSByZXR1cm4geDsKICAgIGlmICgoeCA9PSAxKSB8fCAoeSA9PSAxKSkgcmV0dXJuIDE7CiAgICByZXR1cm4gX2JpbmFyeUdjZCh4LCB5LCBmYWxzZSk7CiAgfQp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9TbWkgZXh0ZW5kcyBfSW50ZWdlckltcGxlbWVudGF0aW9uIHsKICBmYWN0b3J5IF9TbWkuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIGludCBnZXQgaGFzaENvZGUgPT4gdGhpczsKICBpbnQgZ2V0IF9pZGVudGl0eUhhc2hDb2RlID0+IHRoaXM7CiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBvcGVyYXRvciB+KCkgbmF0aXZlICJTbWlfYml0TmVnYXRlIjsKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsICJkYXJ0OmNvcmUjX1NtaSIpCiAgaW50IGdldCBiaXRMZW5ndGggbmF0aXZlICJTbWlfYml0TGVuZ3RoIjsKCiAgaW50IG9wZXJhdG9yICYoaW50IG90aGVyKSA9PiBvdGhlci5fYml0QW5kRnJvbVNtaSh0aGlzKTsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBfYml0QW5kRnJvbVNtaShfU21pIG90aGVyKSBuYXRpdmUgIlNtaV9iaXRBbmRGcm9tU21pIjsKCiAgLyoqCiAgICogVGhlIGRpZ2l0cyBvZiAnMDAnLCAnMDEnLCAuLi4gJzk5JyBhcyBhIHNpbmdsZSBhcnJheS4KICAgKgogICAqIEdldCB0aGUgZGlnaXRzIG9mIGBuYCwgd2l0aCBgMCA8PSBuIDwgMTAwYCwgYXMKICAgKiBgX2RpZ2l0VGFibGVbbiAqIDJdYCBhbmQgYF9kaWdpdFRhYmxlW24gKiAyICsgMV1gLgogICAqLwogIHN0YXRpYyBjb25zdCBfZGlnaXRUYWJsZSA9IGNvbnN0IFsKICAgIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzEsIDB4MzAsIDB4MzIsIDB4MzAsIDB4MzMsIC8vCiAgICAweDMwLCAweDM0LCAweDMwLCAweDM1LCAweDMwLCAweDM2LCAweDMwLCAweDM3LCAvLwogICAgMHgzMCwgMHgzOCwgMHgzMCwgMHgzOSwgMHgzMSwgMHgzMCwgMHgzMSwgMHgzMSwgLy8KICAgIDB4MzEsIDB4MzIsIDB4MzEsIDB4MzMsIDB4MzEsIDB4MzQsIDB4MzEsIDB4MzUsIC8vCiAgICAweDMxLCAweDM2LCAweDMxLCAweDM3LCAweDMxLCAweDM4LCAweDMxLCAweDM5LCAvLwogICAgMHgzMiwgMHgzMCwgMHgzMiwgMHgzMSwgMHgzMiwgMHgzMiwgMHgzMiwgMHgzMywgLy8KICAgIDB4MzIsIDB4MzQsIDB4MzIsIDB4MzUsIDB4MzIsIDB4MzYsIDB4MzIsIDB4MzcsIC8vCiAgICAweDMyLCAweDM4LCAweDMyLCAweDM5LCAweDMzLCAweDMwLCAweDMzLCAweDMxLCAvLwogICAgMHgzMywgMHgzMiwgMHgzMywgMHgzMywgMHgzMywgMHgzNCwgMHgzMywgMHgzNSwgLy8KICAgIDB4MzMsIDB4MzYsIDB4MzMsIDB4MzcsIDB4MzMsIDB4MzgsIDB4MzMsIDB4MzksIC8vCiAgICAweDM0LCAweDMwLCAweDM0LCAweDMxLCAweDM0LCAweDMyLCAweDM0LCAweDMzLCAvLwogICAgMHgzNCwgMHgzNCwgMHgzNCwgMHgzNSwgMHgzNCwgMHgzNiwgMHgzNCwgMHgzNywgLy8KICAgIDB4MzQsIDB4MzgsIDB4MzQsIDB4MzksIDB4MzUsIDB4MzAsIDB4MzUsIDB4MzEsIC8vCiAgICAweDM1LCAweDMyLCAweDM1LCAweDMzLCAweDM1LCAweDM0LCAweDM1LCAweDM1LCAvLwogICAgMHgzNSwgMHgzNiwgMHgzNSwgMHgzNywgMHgzNSwgMHgzOCwgMHgzNSwgMHgzOSwgLy8KICAgIDB4MzYsIDB4MzAsIDB4MzYsIDB4MzEsIDB4MzYsIDB4MzIsIDB4MzYsIDB4MzMsIC8vCiAgICAweDM2LCAweDM0LCAweDM2LCAweDM1LCAweDM2LCAweDM2LCAweDM2LCAweDM3LCAvLwogICAgMHgzNiwgMHgzOCwgMHgzNiwgMHgzOSwgMHgzNywgMHgzMCwgMHgzNywgMHgzMSwgLy8KICAgIDB4MzcsIDB4MzIsIDB4MzcsIDB4MzMsIDB4MzcsIDB4MzQsIDB4MzcsIDB4MzUsIC8vCiAgICAweDM3LCAweDM2LCAweDM3LCAweDM3LCAweDM3LCAweDM4LCAweDM3LCAweDM5LCAvLwogICAgMHgzOCwgMHgzMCwgMHgzOCwgMHgzMSwgMHgzOCwgMHgzMiwgMHgzOCwgMHgzMywgLy8KICAgIDB4MzgsIDB4MzQsIDB4MzgsIDB4MzUsIDB4MzgsIDB4MzYsIDB4MzgsIDB4MzcsIC8vCiAgICAweDM4LCAweDM4LCAweDM4LCAweDM5LCAweDM5LCAweDMwLCAweDM5LCAweDMxLCAvLwogICAgMHgzOSwgMHgzMiwgMHgzOSwgMHgzMywgMHgzOSwgMHgzNCwgMHgzOSwgMHgzNSwgLy8KICAgIDB4MzksIDB4MzYsIDB4MzksIDB4MzcsIDB4MzksIDB4MzgsIDB4MzksIDB4MzksIC8vCiAgXTsKCiAgLyoqCiAgICogUmVzdWx0IG9mIGludC50b1N0cmluZyBmb3IgLTk5LCAtOTgsIC4uLiwgOTgsIDk5LgogICAqLwogIHN0YXRpYyBjb25zdCBfc21hbGxMb29rdXBUYWJsZSA9IGNvbnN0IFsKICAgICItOTkiLCAiLTk4IiwgIi05NyIsICItOTYiLCAiLTk1IiwgIi05NCIsICItOTMiLCAiLTkyIiwgIi05MSIsICItOTAiLCAvLwogICAgIi04OSIsICItODgiLCAiLTg3IiwgIi04NiIsICItODUiLCAiLTg0IiwgIi04MyIsICItODIiLCAiLTgxIiwgIi04MCIsIC8vCiAgICAiLTc5IiwgIi03OCIsICItNzciLCAiLTc2IiwgIi03NSIsICItNzQiLCAiLTczIiwgIi03MiIsICItNzEiLCAiLTcwIiwgLy8KICAgICItNjkiLCAiLTY4IiwgIi02NyIsICItNjYiLCAiLTY1IiwgIi02NCIsICItNjMiLCAiLTYyIiwgIi02MSIsICItNjAiLCAvLwogICAgIi01OSIsICItNTgiLCAiLTU3IiwgIi01NiIsICItNTUiLCAiLTU0IiwgIi01MyIsICItNTIiLCAiLTUxIiwgIi01MCIsIC8vCiAgICAiLTQ5IiwgIi00OCIsICItNDciLCAiLTQ2IiwgIi00NSIsICItNDQiLCAiLTQzIiwgIi00MiIsICItNDEiLCAiLTQwIiwgLy8KICAgICItMzkiLCAiLTM4IiwgIi0zNyIsICItMzYiLCAiLTM1IiwgIi0zNCIsICItMzMiLCAiLTMyIiwgIi0zMSIsICItMzAiLCAvLwogICAgIi0yOSIsICItMjgiLCAiLTI3IiwgIi0yNiIsICItMjUiLCAiLTI0IiwgIi0yMyIsICItMjIiLCAiLTIxIiwgIi0yMCIsIC8vCiAgICAiLTE5IiwgIi0xOCIsICItMTciLCAiLTE2IiwgIi0xNSIsICItMTQiLCAiLTEzIiwgIi0xMiIsICItMTEiLCAiLTEwIiwgLy8KICAgICItOSIsICItOCIsICItNyIsICItNiIsICItNSIsICItNCIsICItMyIsICItMiIsICItMSIsICIwIiwgLy8KICAgICIxIiwgIjIiLCAiMyIsICI0IiwgIjUiLCAiNiIsICI3IiwgIjgiLCAiOSIsICIxMCIsIC8vCiAgICAiMTEiLCAiMTIiLCAiMTMiLCAiMTQiLCAiMTUiLCAiMTYiLCAiMTciLCAiMTgiLCAiMTkiLCAiMjAiLCAvLwogICAgIjIxIiwgIjIyIiwgIjIzIiwgIjI0IiwgIjI1IiwgIjI2IiwgIjI3IiwgIjI4IiwgIjI5IiwgIjMwIiwgLy8KICAgICIzMSIsICIzMiIsICIzMyIsICIzNCIsICIzNSIsICIzNiIsICIzNyIsICIzOCIsICIzOSIsICI0MCIsIC8vCiAgICAiNDEiLCAiNDIiLCAiNDMiLCAiNDQiLCAiNDUiLCAiNDYiLCAiNDciLCAiNDgiLCAiNDkiLCAiNTAiLCAvLwogICAgIjUxIiwgIjUyIiwgIjUzIiwgIjU0IiwgIjU1IiwgIjU2IiwgIjU3IiwgIjU4IiwgIjU5IiwgIjYwIiwgLy8KICAgICI2MSIsICI2MiIsICI2MyIsICI2NCIsICI2NSIsICI2NiIsICI2NyIsICI2OCIsICI2OSIsICI3MCIsIC8vCiAgICAiNzEiLCAiNzIiLCAiNzMiLCAiNzQiLCAiNzUiLCAiNzYiLCAiNzciLCAiNzgiLCAiNzkiLCAiODAiLCAvLwogICAgIjgxIiwgIjgyIiwgIjgzIiwgIjg0IiwgIjg1IiwgIjg2IiwgIjg3IiwgIjg4IiwgIjg5IiwgIjkwIiwgLy8KICAgICI5MSIsICI5MiIsICI5MyIsICI5NCIsICI5NSIsICI5NiIsICI5NyIsICI5OCIsICI5OSIgLy8KICBdOwoKICAvLyBQb3dlcnMgb2YgMTAgYWJvdmUgMTAwMDAwMCBhcmUgaW5kaXN0aW5ndWlzaGFibGUgYnkgZXllLgogIHN0YXRpYyBjb25zdCBpbnQgX1BPV18xMF83ID0gMTAwMDAwMDA7CiAgc3RhdGljIGNvbnN0IGludCBfUE9XXzEwXzggPSAxMDAwMDAwMDA7CiAgc3RhdGljIGNvbnN0IGludCBfUE9XXzEwXzkgPSAxMDAwMDAwMDAwOwoKICAvLyBGaW5kIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBkaWdpdHMgaW4gYSBwb3NpdGl2ZSBzbWkuCiAgLy8gTmV2ZXIgY2FsbGVkIHdpdGggbnVtYmVycyA8IDEwMC4gVGhlc2UgYXJlIGhhbmRsZWQgYmVmb3JlIGNhbGxpbmcuCiAgc3RhdGljIGludCBfcG9zaXRpdmVCYXNlMTBMZW5ndGgodmFyIHNtaSkgewogICAgLy8gQSBwb3NpdGl2ZSBzbWkgaGFzIGxlbmd0aCA8PSAxOSBpZiA2My1iaXQsICA8PTEwIGlmIDMxLWJpdC4KICAgIC8vIEF2b2lkIGNvbXBhcmluZyBhIDMxLWJpdCBzbWkgdG8gYSBub24tc21pLgogICAgaWYgKHNtaSA8IDEwMDApIHJldHVybiAzOwogICAgaWYgKHNtaSA8IDEwMDAwKSByZXR1cm4gNDsKICAgIGlmIChzbWkgPCBfUE9XXzEwXzcpIHsKICAgICAgaWYgKHNtaSA8IDEwMDAwMCkgcmV0dXJuIDU7CiAgICAgIGlmIChzbWkgPCAxMDAwMDAwKSByZXR1cm4gNjsKICAgICAgcmV0dXJuIDc7CiAgICB9CiAgICBpZiAoc21pIDwgX1BPV18xMF84KSByZXR1cm4gODsKICAgIGlmIChzbWkgPCBfUE9XXzEwXzkpIHJldHVybiA5OwogICAgc21pID0gc21pIH4vIF9QT1dfMTBfOTsKICAgIC8vIEhhbmRsZSBudW1iZXJzIDwgMTAwIGJlZm9yZSBjYWxsaW5nIHJlY3Vyc2l2ZWx5LgogICAgaWYgKHNtaSA8IDEwKSByZXR1cm4gMTA7CiAgICBpZiAoc21pIDwgMTAwKSByZXR1cm4gMTE7CiAgICByZXR1cm4gOSArIF9wb3NpdGl2ZUJhc2UxMExlbmd0aChzbWkpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaWYgKHRoaXMgPCAxMDAgJiYgdGhpcyA+IC0xMDApIHJldHVybiBfc21hbGxMb29rdXBUYWJsZVt0aGlzICsgOTldOwogICAgaWYgKHRoaXMgPCAwKSByZXR1cm4gX25lZ2F0aXZlVG9TdHJpbmcodGhpcyk7CiAgICAvLyBJbnNwaXJlZCBieSBBbmRyZWkgQWxleGFuZHJlc2N1OiAiVGhyZWUgT3B0aW1pemF0aW9uIFRpcHMgZm9yIEMrKyIKICAgIC8vIEF2b2lkIGV4cGVuc2l2ZSByZW1haW5kZXIgb3BlcmF0aW9uIGJ5IGRvaW5nIGl0IG9uIG1vcmUgdGhhbgogICAgLy8gb25lIGRpZ2l0IGF0IGEgdGltZS4KICAgIGNvbnN0IGludCBESUdJVF9aRVJPID0gMHgzMDsKICAgIGludCBsZW5ndGggPSBfcG9zaXRpdmVCYXNlMTBMZW5ndGgodGhpcyk7CiAgICBfT25lQnl0ZVN0cmluZyByZXN1bHQgPSBfT25lQnl0ZVN0cmluZy5fYWxsb2NhdGUobGVuZ3RoKTsKICAgIGludCBpbmRleCA9IGxlbmd0aCAtIDE7CiAgICB2YXIgc21pID0gdGhpczsKICAgIGRvIHsKICAgICAgLy8gVHdvIGRpZ2l0cyBhdCBhIHRpbWUuCiAgICAgIHZhciB0d29EaWdpdHMgPSBzbWkucmVtYWluZGVyKDEwMCk7CiAgICAgIHNtaSA9IHNtaSB+LyAxMDA7CiAgICAgIGludCBkaWdpdEluZGV4ID0gdHdvRGlnaXRzICogMjsKICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCwgX2RpZ2l0VGFibGVbZGlnaXRJbmRleCArIDFdKTsKICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCAtIDEsIF9kaWdpdFRhYmxlW2RpZ2l0SW5kZXhdKTsKICAgICAgaW5kZXggLT0gMjsKICAgIH0gd2hpbGUgKHNtaSA+PSAxMDApOwogICAgaWYgKHNtaSA8IDEwKSB7CiAgICAgIC8vIENoYXJhY3RlciBjb2RlIGZvciAnMCcuCiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXgsIERJR0lUX1pFUk8gKyBzbWkpOwogICAgfSBlbHNlIHsKICAgICAgLy8gTm8gcmVtYWluZGVyIGZvciB0aGlzIGNhc2UuCiAgICAgIGludCBkaWdpdEluZGV4ID0gc21pICogMjsKICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCwgX2RpZ2l0VGFibGVbZGlnaXRJbmRleCArIDFdKTsKICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCAtIDEsIF9kaWdpdFRhYmxlW2RpZ2l0SW5kZXhdKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBGaW5kIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBkaWdpdHMgaW4gYSBuZWdhdGl2ZSBzbWkuCiAgLy8gTmV2ZXIgY2FsbGVkIHdpdGggbnVtYmVycyA+IC0xMDAuIFRoZXNlIGFyZSBoYW5kbGVkIGJlZm9yZSBjYWxsaW5nLgogIHN0YXRpYyBpbnQgX25lZ2F0aXZlQmFzZTEwTGVuZ3RoKHZhciBuZWdTbWkpIHsKICAgIC8vIEEgbmVnYXRpdmUgc21pIGhhcyBsZW5ndGggPD0gMTkgaWYgNjMtYml0LCA8PTEwIGlmIDMxLWJpdC4KICAgIC8vIEF2b2lkIGNvbXBhcmluZyBhIDMxLWJpdCBzbWkgdG8gYSBub24tc21pLgogICAgaWYgKG5lZ1NtaSA+IC0xMDAwKSByZXR1cm4gMzsKICAgIGlmIChuZWdTbWkgPiAtMTAwMDApIHJldHVybiA0OwogICAgaWYgKG5lZ1NtaSA+IC1fUE9XXzEwXzcpIHsKICAgICAgaWYgKG5lZ1NtaSA+IC0xMDAwMDApIHJldHVybiA1OwogICAgICBpZiAobmVnU21pID4gLTEwMDAwMDApIHJldHVybiA2OwogICAgICByZXR1cm4gNzsKICAgIH0KICAgIGlmIChuZWdTbWkgPiAtX1BPV18xMF84KSByZXR1cm4gODsKICAgIGlmIChuZWdTbWkgPiAtX1BPV18xMF85KSByZXR1cm4gOTsKICAgIG5lZ1NtaSA9IG5lZ1NtaSB+LyBfUE9XXzEwXzk7CiAgICAvLyBIYW5kbGUgbnVtYmVycyA+IC0xMDAgYmVmb3JlIGNhbGxpbmcgcmVjdXJzaXZlbHkuCiAgICBpZiAobmVnU21pID4gLTEwKSByZXR1cm4gMTA7CiAgICBpZiAobmVnU21pID4gLTEwMCkgcmV0dXJuIDExOwogICAgcmV0dXJuIDkgKyBfbmVnYXRpdmVCYXNlMTBMZW5ndGgobmVnU21pKTsKICB9CgogIC8vIENvbnZlcnQgYSBuZWdhdGl2ZSBzbWkgdG8gYSBzdHJpbmcuCiAgLy8gRG9lc24ndCBuZWdhdGUgdGhlIHNtaSB0byBhdm9pZCBuZWdhdGluZyB0aGUgbW9zdCBuZWdhdGl2ZSBzbWksIHdoaWNoCiAgLy8gd291bGQgYmVjb21lIGEgbm9uLXNtaS4KICBzdGF0aWMgU3RyaW5nIF9uZWdhdGl2ZVRvU3RyaW5nKGludCBuZWdTbWkpIHsKICAgIC8vIENoYXJhY3RlciBjb2RlIGZvciAnLScKICAgIGNvbnN0IGludCBNSU5VU19TSUdOID0gMHgyZDsKICAgIC8vIENoYXJhY3RlciBjb2RlIGZvciAnMCcuCiAgICBjb25zdCBpbnQgRElHSVRfWkVSTyA9IDB4MzA7CiAgICBpZiAobmVnU21pID4gLTEwKSB7CiAgICAgIHJldHVybiBfT25lQnl0ZVN0cmluZy5fYWxsb2NhdGUoMikKICAgICAgICAuLl9zZXRBdCgwLCBNSU5VU19TSUdOKQogICAgICAgIC4uX3NldEF0KDEsIERJR0lUX1pFUk8gLSBuZWdTbWkpOwogICAgfQogICAgaWYgKG5lZ1NtaSA+IC0xMDApIHsKICAgICAgaW50IGRpZ2l0SW5kZXggPSAyICogLW5lZ1NtaTsKICAgICAgcmV0dXJuIF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZSgzKQogICAgICAgIC4uX3NldEF0KDAsIE1JTlVTX1NJR04pCiAgICAgICAgLi5fc2V0QXQoMSwgX2RpZ2l0VGFibGVbZGlnaXRJbmRleF0pCiAgICAgICAgLi5fc2V0QXQoMiwgX2RpZ2l0VGFibGVbZGlnaXRJbmRleCArIDFdKTsKICAgIH0KICAgIC8vIE51bWJlciBvZiBkaWdpdHMsIG5vdCBpbmNsdWRpbmcgbWludXMuCiAgICBpbnQgZGlnaXRDb3VudCA9IF9uZWdhdGl2ZUJhc2UxMExlbmd0aChuZWdTbWkpOwogICAgX09uZUJ5dGVTdHJpbmcgcmVzdWx0ID0gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKGRpZ2l0Q291bnQgKyAxKTsKICAgIHJlc3VsdC5fc2V0QXQoMCwgTUlOVVNfU0lHTik7IC8vICctJy4KICAgIGludCBpbmRleCA9IGRpZ2l0Q291bnQ7CiAgICBkbyB7CiAgICAgIHZhciB0d29EaWdpdHMgPSBuZWdTbWkucmVtYWluZGVyKDEwMCk7CiAgICAgIG5lZ1NtaSA9IG5lZ1NtaSB+LyAxMDA7CiAgICAgIGludCBkaWdpdEluZGV4ID0gLXR3b0RpZ2l0cyAqIDI7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXgsIF9kaWdpdFRhYmxlW2RpZ2l0SW5kZXggKyAxXSk7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXggLSAxLCBfZGlnaXRUYWJsZVtkaWdpdEluZGV4XSk7CiAgICAgIGluZGV4IC09IDI7CiAgICB9IHdoaWxlIChuZWdTbWkgPD0gLTEwMCk7CiAgICBpZiAobmVnU21pID4gLTEwKSB7CiAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXgsIERJR0lUX1pFUk8gLSBuZWdTbWkpOwogICAgfSBlbHNlIHsKICAgICAgLy8gTm8gcmVtYWluZGVyIG5lY2Vzc2FyeSBmb3IgdGhpcyBjYXNlLgogICAgICBpbnQgZGlnaXRJbmRleCA9IC1uZWdTbWkgKiAyOwogICAgICByZXN1bHQuX3NldEF0KGluZGV4LCBfZGlnaXRUYWJsZVtkaWdpdEluZGV4ICsgMV0pOwogICAgICByZXN1bHQuX3NldEF0KGluZGV4IC0gMSwgX2RpZ2l0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Z2V0L3ZtLmRhcnRgLgpjbGFzcyBfSW52b2NhdGlvbk1pcnJvciBpbXBsZW1lbnRzIEludm9jYXRpb24gewogIC8vIENvbnN0YW50cyBkZXNjcmliaW5nIHRoZSBpbnZvY2F0aW9uIGtpbmQuCiAgLy8gX0ZJRUxEIGNhbm5vdCBiZSBnZW5lcmF0ZWQgYnkgcmVndWxhciBpbnZvY2F0aW9uIG1pcnJvcnMuCiAgc3RhdGljIGNvbnN0IGludCBfTUVUSE9EID0gMDsKICBzdGF0aWMgY29uc3QgaW50IF9HRVRURVIgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgX1NFVFRFUiA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBfRklFTEQgPSAzOwogIHN0YXRpYyBjb25zdCBpbnQgX0xPQ0FMX1ZBUiA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBfS0lORF9TSElGVCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBfS0lORF9CSVRTID0gMzsKICBzdGF0aWMgY29uc3QgaW50IF9LSU5EX01BU0sgPSAoMSA8PCBfS0lORF9CSVRTKSAtIDE7CgogIC8vIFRoZXNlIHZhbHVlcywgZXhjZXB0IF9EWU5BTUlDIGFuZCBfU1VQRVIsIGFyZSBvbmx5IHVzZWQgd2hlbiB0aHJvd2luZwogIC8vIE5vU3VjaE1ldGhvZEVycm9yIGZvciBjb21waWxlLXRpbWUgcmVzb2x1dGlvbiBmYWlsdXJlcy4KICBzdGF0aWMgY29uc3QgaW50IF9EWU5BTUlDID0gMDsKICBzdGF0aWMgY29uc3QgaW50IF9TVVBFUiA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBfU1RBVElDID0gMjsKICBzdGF0aWMgY29uc3QgaW50IF9DT05TVFJVQ1RPUiA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBfVE9QX0xFVkVMID0gNDsKICBzdGF0aWMgY29uc3QgaW50IF9MRVZFTF9TSElGVCA9IF9LSU5EX0JJVFM7CiAgc3RhdGljIGNvbnN0IGludCBfTEVWRUxfQklUUyA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBfTEVWRUxfTUFTSyA9ICgxIDw8IF9MRVZFTF9CSVRTKSAtIDE7CgogIC8vIEFyZ3VtZW50c0Rlc2NyaXB0b3IgbGF5b3V0LiBLZWVwIGluIHN5bmMgd2l0aCBlbnVtIGluIGRhcnRfZW50cnkuaC4KICBzdGF0aWMgY29uc3QgaW50IF9UWVBFX0FSR1NfTEVOID0gMDsKICBzdGF0aWMgY29uc3QgaW50IF9DT1VOVCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBfUE9TSVRJT05BTF9DT1VOVCA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBfRklSU1RfTkFNRURfRU5UUlkgPSAzOwoKICAvLyBJbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW52b2NhdGlvbiBtaXJyb3IuCiAgU3RyaW5nIF9mdW5jdGlvbk5hbWU7CiAgTGlzdCBfYXJndW1lbnRzRGVzY3JpcHRvcjsKICBMaXN0IF9hcmd1bWVudHM7CiAgYm9vbCBfaXNTdXBlckludm9jYXRpb247CiAgaW50IF9kZWxheWVkVHlwZUFyZ3VtZW50c0xlbjsKCiAgLy8gRXh0ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGludm9jYXRpb24gbWlycm9yOyBwb3B1bGF0ZWQgb24gZGVtYW5kLgogIFN5bWJvbCBfbWVtYmVyTmFtZTsKICBpbnQgX3R5cGU7CiAgTGlzdDxUeXBlPiBfdHlwZUFyZ3VtZW50czsKICBMaXN0IF9wb3NpdGlvbmFsQXJndW1lbnRzOwogIE1hcDxTeW1ib2wsIGR5bmFtaWM+IF9uYW1lZEFyZ3VtZW50czsKCiAgX0ludm9jYXRpb25NaXJyb3IuX3dpdGhUeXBlKHRoaXMuX21lbWJlck5hbWUsIHRoaXMuX3R5cGUsIHRoaXMuX3R5cGVBcmd1bWVudHMsCiAgICAgIHRoaXMuX3Bvc2l0aW9uYWxBcmd1bWVudHMsIHRoaXMuX25hbWVkQXJndW1lbnRzKSB7CiAgICBfdHlwZUFyZ3VtZW50cyA/Pz0gY29uc3QgPFR5cGU+W107CiAgICBfcG9zaXRpb25hbEFyZ3VtZW50cyA/Pz0gY29uc3QgW107CiAgICBfbmFtZWRBcmd1bWVudHMgPz89IGNvbnN0IHt9OwogIH0KCiAgdm9pZCBfc2V0TWVtYmVyTmFtZUFuZFR5cGUoKSB7CiAgICBfdHlwZSA/Pz0gMDsKICAgIGlmIChfZnVuY3Rpb25OYW1lLnN0YXJ0c1dpdGgoImdldDoiKSkgewogICAgICBfdHlwZSB8PSBfR0VUVEVSOwogICAgICBfbWVtYmVyTmFtZSA9IG5ldyBpbnRlcm5hbC5TeW1ib2wudW52YWxpZGF0ZWQoX2Z1bmN0aW9uTmFtZS5zdWJzdHJpbmcoNCkpOwogICAgfSBlbHNlIGlmIChfZnVuY3Rpb25OYW1lLnN0YXJ0c1dpdGgoInNldDoiKSkgewogICAgICBfdHlwZSB8PSBfU0VUVEVSOwogICAgICBfbWVtYmVyTmFtZSA9CiAgICAgICAgICBuZXcgaW50ZXJuYWwuU3ltYm9sLnVudmFsaWRhdGVkKF9mdW5jdGlvbk5hbWUuc3Vic3RyaW5nKDQpICsgIj0iKTsKICAgIH0gZWxzZSB7CiAgICAgIF90eXBlIHw9CiAgICAgICAgICBfaXNTdXBlckludm9jYXRpb24gPyAoX1NVUEVSIDw8IF9MRVZFTF9TSElGVCkgfCBfTUVUSE9EIDogX01FVEhPRDsKICAgICAgX21lbWJlck5hbWUgPSBuZXcgaW50ZXJuYWwuU3ltYm9sLnVudmFsaWRhdGVkKF9mdW5jdGlvbk5hbWUpOwogICAgfQogIH0KCiAgU3ltYm9sIGdldCBtZW1iZXJOYW1lIHsKICAgIGlmIChfbWVtYmVyTmFtZSA9PSBudWxsKSB7CiAgICAgIF9zZXRNZW1iZXJOYW1lQW5kVHlwZSgpOwogICAgfQogICAgcmV0dXJuIF9tZW1iZXJOYW1lOwogIH0KCiAgaW50IGdldCBfdHlwZUFyZ3NMZW4gewogICAgaW50IHR5cGVBcmdzTGVuID0gX2FyZ3VtZW50c0Rlc2NyaXB0b3JbX1RZUEVfQVJHU19MRU5dOwogICAgcmV0dXJuIHR5cGVBcmdzTGVuID09IDAgPyBfZGVsYXllZFR5cGVBcmd1bWVudHNMZW4gOiB0eXBlQXJnc0xlbjsKICB9CgogIExpc3Q8VHlwZT4gZ2V0IHR5cGVBcmd1bWVudHMgewogICAgaWYgKF90eXBlQXJndW1lbnRzID09IG51bGwpIHsKICAgICAgaWYgKF90eXBlQXJnc0xlbiA9PSAwKSB7CiAgICAgICAgcmV0dXJuIF90eXBlQXJndW1lbnRzID0gY29uc3QgPFR5cGU+W107CiAgICAgIH0KICAgICAgLy8gQSBUeXBlQXJndW1lbnRzIG9iamVjdCBkb2VzIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBEYXJ0IGNsYXNzIGFuZAogICAgICAvLyBjYW5ub3QgYmUgYWNjZXNzZWQgYXMgYW4gYXJyYXkgaW4gRGFydC4gVGhlcmVmb3JlLCB3ZSBuZWVkIGEgbmF0aXZlCiAgICAgIC8vIGNhbGwgdG8gdW5wYWNrIHRoZSBpbmRpdmlkdWFsIHR5cGVzIGludG8gYSBsaXN0LgogICAgICBfdHlwZUFyZ3VtZW50cyA9IF91bnBhY2tUeXBlQXJndW1lbnRzKF9hcmd1bWVudHNbMF0sIF90eXBlQXJnc0xlbik7CiAgICB9CiAgICByZXR1cm4gX3R5cGVBcmd1bWVudHM7CiAgfQoKICAvLyBVbnBhY2sgdGhlIGdpdmVuIFR5cGVBcmd1bWVudHMgb2JqZWN0IGludG8gYSBuZXcgbGlzdCBvZiBpbmRpdmlkdWFsIHR5cGVzLgogIHN0YXRpYyBMaXN0PFR5cGU+IF91bnBhY2tUeXBlQXJndW1lbnRzKHR5cGVBcmd1bWVudHMsIGludCBudW1UeXBlQXJndW1lbnRzKQogICAgICBuYXRpdmUgIkludm9jYXRpb25NaXJyb3JfdW5wYWNrVHlwZUFyZ3VtZW50cyI7CgogIExpc3QgZ2V0IHBvc2l0aW9uYWxBcmd1bWVudHMgewogICAgaWYgKF9wb3NpdGlvbmFsQXJndW1lbnRzID09IG51bGwpIHsKICAgICAgLy8gVGhlIGFyZ3VtZW50IGRlc2NyaXB0b3IgY291bnRzIHRoZSByZWNlaXZlciwgYnV0IG5vdCB0aGUgdHlwZSBhcmd1bWVudHMKICAgICAgLy8gYXMgcG9zaXRpb25hbCBhcmd1bWVudHMuCiAgICAgIGludCBudW1Qb3NpdGlvbmFsQXJndW1lbnRzID0gX2FyZ3VtZW50c0Rlc2NyaXB0b3JbX1BPU0lUSU9OQUxfQ09VTlRdIC0gMTsKICAgICAgaWYgKG51bVBvc2l0aW9uYWxBcmd1bWVudHMgPT0gMCkgewogICAgICAgIHJldHVybiBfcG9zaXRpb25hbEFyZ3VtZW50cyA9IGNvbnN0IFtdOwogICAgICB9CiAgICAgIC8vIEV4Y2x1ZGUgcmVjZWl2ZXIgYW5kIHR5cGUgYXJncyBpbiB0aGUgcmV0dXJuZWQgbGlzdC4KICAgICAgaW50IHJlY2VpdmVySW5kZXggPSBfdHlwZUFyZ3NMZW4gPiAwID8gMSA6IDA7CiAgICAgIF9wb3NpdGlvbmFsQXJndW1lbnRzID0gbmV3IF9JbW11dGFibGVMaXN0Ll9mcm9tKAogICAgICAgICAgX2FyZ3VtZW50cywgcmVjZWl2ZXJJbmRleCArIDEsIG51bVBvc2l0aW9uYWxBcmd1bWVudHMpOwogICAgfQogICAgcmV0dXJuIF9wb3NpdGlvbmFsQXJndW1lbnRzOwogIH0KCiAgTWFwPFN5bWJvbCwgZHluYW1pYz4gZ2V0IG5hbWVkQXJndW1lbnRzIHsKICAgIGlmIChfbmFtZWRBcmd1bWVudHMgPT0gbnVsbCkgewogICAgICBpbnQgbnVtQXJndW1lbnRzID0gX2FyZ3VtZW50c0Rlc2NyaXB0b3JbX0NPVU5UXSAtIDE7IC8vIEV4Y2x1ZGUgcmVjZWl2ZXIuCiAgICAgIGludCBudW1Qb3NpdGlvbmFsQXJndW1lbnRzID0gX2FyZ3VtZW50c0Rlc2NyaXB0b3JbX1BPU0lUSU9OQUxfQ09VTlRdIC0gMTsKICAgICAgaW50IG51bU5hbWVkQXJndW1lbnRzID0gbnVtQXJndW1lbnRzIC0gbnVtUG9zaXRpb25hbEFyZ3VtZW50czsKICAgICAgaWYgKG51bU5hbWVkQXJndW1lbnRzID09IDApIHsKICAgICAgICByZXR1cm4gX25hbWVkQXJndW1lbnRzID0gY29uc3Qge307CiAgICAgIH0KICAgICAgaW50IHJlY2VpdmVySW5kZXggPSBfdHlwZUFyZ3NMZW4gPiAwID8gMSA6IDA7CiAgICAgIF9uYW1lZEFyZ3VtZW50cyA9IG5ldyBNYXA8U3ltYm9sLCBkeW5hbWljPigpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bU5hbWVkQXJndW1lbnRzOyBpKyspIHsKICAgICAgICBpbnQgbmFtZWRFbnRyeUluZGV4ID0gX0ZJUlNUX05BTUVEX0VOVFJZICsgMiAqIGk7CiAgICAgICAgU3RyaW5nIGFyZ19uYW1lID0gX2FyZ3VtZW50c0Rlc2NyaXB0b3JbbmFtZWRFbnRyeUluZGV4XTsKICAgICAgICB2YXIgYXJnX3ZhbHVlID0gX2FyZ3VtZW50c1sKICAgICAgICAgICAgcmVjZWl2ZXJJbmRleCArIF9hcmd1bWVudHNEZXNjcmlwdG9yW25hbWVkRW50cnlJbmRleCArIDFdXTsKICAgICAgICBfbmFtZWRBcmd1bWVudHNbbmV3IGludGVybmFsLlN5bWJvbC51bnZhbGlkYXRlZChhcmdfbmFtZSldID0gYXJnX3ZhbHVlOwogICAgICB9CiAgICAgIF9uYW1lZEFyZ3VtZW50cyA9IG5ldyBNYXAudW5tb2RpZmlhYmxlKF9uYW1lZEFyZ3VtZW50cyk7CiAgICB9CiAgICByZXR1cm4gX25hbWVkQXJndW1lbnRzOwogIH0KCiAgYm9vbCBnZXQgaXNNZXRob2QgewogICAgaWYgKF90eXBlID09IG51bGwpIHsKICAgICAgX3NldE1lbWJlck5hbWVBbmRUeXBlKCk7CiAgICB9CiAgICByZXR1cm4gKF90eXBlICYgX0tJTkRfTUFTSykgPT0gX01FVEhPRDsKICB9CgogIGJvb2wgZ2V0IGlzQWNjZXNzb3IgewogICAgaWYgKF90eXBlID09IG51bGwpIHsKICAgICAgX3NldE1lbWJlck5hbWVBbmRUeXBlKCk7CiAgICB9CiAgICByZXR1cm4gKF90eXBlICYgX0tJTkRfTUFTSykgIT0gX01FVEhPRDsKICB9CgogIGJvb2wgZ2V0IGlzR2V0dGVyIHsKICAgIGlmIChfdHlwZSA9PSBudWxsKSB7CiAgICAgIF9zZXRNZW1iZXJOYW1lQW5kVHlwZSgpOwogICAgfQogICAgcmV0dXJuIChfdHlwZSAmIF9LSU5EX01BU0spID09IF9HRVRURVI7CiAgfQoKICBib29sIGdldCBpc1NldHRlciB7CiAgICBpZiAoX3R5cGUgPT0gbnVsbCkgewogICAgICBfc2V0TWVtYmVyTmFtZUFuZFR5cGUoKTsKICAgIH0KICAgIHJldHVybiAoX3R5cGUgJiBfS0lORF9NQVNLKSA9PSBfU0VUVEVSOwogIH0KCiAgX0ludm9jYXRpb25NaXJyb3IodGhpcy5fZnVuY3Rpb25OYW1lLCB0aGlzLl9hcmd1bWVudHNEZXNjcmlwdG9yLAogICAgICB0aGlzLl9hcmd1bWVudHMsIHRoaXMuX2lzU3VwZXJJbnZvY2F0aW9uLCB0aGlzLl90eXBlLAogICAgICBbdGhpcy5fZGVsYXllZFR5cGVBcmd1bWVudHNMZW4gPSAwXSk7CgogIF9JbnZvY2F0aW9uTWlycm9yLl93aXRob3V0VHlwZSh0aGlzLl9mdW5jdGlvbk5hbWUsIHRoaXMuX3R5cGVBcmd1bWVudHMsCiAgICAgIHRoaXMuX3Bvc2l0aW9uYWxBcmd1bWVudHMsIHRoaXMuX25hbWVkQXJndW1lbnRzLCB0aGlzLl9pc1N1cGVySW52b2NhdGlvbiwKICAgICAgW3RoaXMuX2RlbGF5ZWRUeXBlQXJndW1lbnRzTGVuID0gMF0pOwoKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBzdGF0aWMgX2FsbG9jYXRlSW52b2NhdGlvbk1pcnJvcihTdHJpbmcgZnVuY3Rpb25OYW1lLAogICAgICBMaXN0IGFyZ3VtZW50c0Rlc2NyaXB0b3IsIExpc3QgYXJndW1lbnRzLCBib29sIGlzU3VwZXJJbnZvY2F0aW9uLAogICAgICBbaW50IHR5cGUgPSBudWxsXSkgewogICAgcmV0dXJuIG5ldyBfSW52b2NhdGlvbk1pcnJvcigKICAgICAgICBmdW5jdGlvbk5hbWUsIGFyZ3VtZW50c0Rlc2NyaXB0b3IsIGFyZ3VtZW50cywgaXNTdXBlckludm9jYXRpb24sIHR5cGUpOwogIH0KCiAgLy8gVGhpcyBmYWN0b3J5IGlzIHVzZWQgd2hlbiBjcmVhdGluZyBhbiBgSW52b2NhdGlvbmAgZm9yIGEgY2xvc3VyZSBjYWxsIHdoaWNoCiAgLy8gbWF5IGhhdmUgZGVsYXllZCB0eXBlIGFyZ3VtZW50cy4gSW4gdGhhdCBjYXNlLCB0aGUgYXJndW1lbnRzIGRlc2NyaXB0b3Igd2lsbAogIC8vIGluZGljYXRlIDAgdHlwZSBhcmd1bWVudHMsIGJ1dCB0aGUgYWN0dWFsIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyBhcmUKICAvLyBwYXNzZWQgaW4gYGRlbGF5ZWRUeXBlQXJndW1lbnRzTGVuYC4gSWYgYW55IHR5cGUgYXJndW1lbnRzIGFyZSBhdmFpbGFibGUsCiAgLy8gdGhlIHR5cGUgYXJndW1lbnRzIHZlY3RvciB3aWxsIGJlIHRoZSBmaXJzdCBlbnRyeSBpbiBgYXJndW1lbnRzYC4KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKICBzdGF0aWMgX2FsbG9jYXRlSW52b2NhdGlvbk1pcnJvckZvckNsb3N1cmUoCiAgICAgIFN0cmluZyBmdW5jdGlvbk5hbWUsCiAgICAgIExpc3QgYXJndW1lbnRzRGVzY3JpcHRvciwKICAgICAgTGlzdCBhcmd1bWVudHMsCiAgICAgIGludCB0eXBlLAogICAgICBpbnQgZGVsYXllZFR5cGVBcmd1bWVudHNMZW4pIHsKICAgIHJldHVybiBuZXcgX0ludm9jYXRpb25NaXJyb3IoZnVuY3Rpb25OYW1lLCBhcmd1bWVudHNEZXNjcmlwdG9yLCBhcmd1bWVudHMsCiAgICAgICAgZmFsc2UsIHR5cGUsIGRlbGF5ZWRUeXBlQXJndW1lbnRzTGVuKTsKICB9Cn0KgMwATk48AR4BP0YkMC8/ICAgHyMkIzcBSz0hHyAlIy4kOQFJJx8qKwE3GB0TGyABTBYNHR0oAVE5JyciBAEhESwYUTMYFE0ND01EBgQBGh8fBhgEARk8RgQBISIfMAhNTTpKBhsEAVBONQEhKFEiUCkwCD40N0IGIQQBLCNQUEUkKwg0NDQ6QSRIUAg/BhwEARYZHwYsBAEYGR8GLAQBFhkfBiwEARYZHwYsBAFDPCwBSlAsASQ4SBsiUAQBUVJMT0ckLhsgFhAlTy8EAgEsZGFydDpjb3JlLXBhdGNoL2ludm9jYXRpb25fbWlycm9yX3BhdGNoLmRhcnQvb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9saWJfcHJlZml4LmRhcnSMHi8vIENvcHlyaWdodCAoYykgMjAxNCwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKLy8gVGhpcyB0eXBlIGNvcnJlc3BvbmRzIHRvIHRoZSBWTS1pbnRlcm5hbCBjbGFzcyBMaWJyYXJ5UHJlZml4LgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9MaWJyYXJ5UHJlZml4IHsKICBmYWN0b3J5IF9MaWJyYXJ5UHJlZml4Ll91bmluc3RhbnRpYWJsZSgpIHsKICAgIHRocm93ICJVbnJlYWNoYWJsZSI7CiAgfQoKICBib29sIF9sb2FkKCkgbmF0aXZlICJMaWJyYXJ5UHJlZml4X2xvYWQiOwogIE9iamVjdCBfbG9hZEVycm9yKCkgbmF0aXZlICJMaWJyYXJ5UHJlZml4X2xvYWRFcnJvciI7CiAgYm9vbCBpc0xvYWRlZCgpIG5hdGl2ZSAiTGlicmFyeVByZWZpeF9pc0xvYWRlZCI7CiAgYm9vbCBfaW52YWxpZGF0ZURlcGVuZGVudENvZGUoKQogICAgICBuYXRpdmUgIkxpYnJhcnlQcmVmaXhfaW52YWxpZGF0ZURlcGVuZGVudENvZGUiOwoKICBsb2FkTGlicmFyeSgpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgX291dHN0YW5kaW5nTG9hZFJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmIChfb3V0c3RhbmRpbmdMb2FkUmVxdWVzdHNbaV1bMF0gPT0gdGhpcykgewogICAgICAgIHJldHVybiBfb3V0c3RhbmRpbmdMb2FkUmVxdWVzdHNbaV1bMV0uZnV0dXJlOwogICAgICB9CiAgICB9CgogICAgdmFyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8Ym9vbD4oKTsKICAgIHZhciBwYWlyID0gbmV3IExpc3QoKTsKICAgIHBhaXIuYWRkKHRoaXMpOwogICAgcGFpci5hZGQoY29tcGxldGVyKTsKICAgIF9vdXRzdGFuZGluZ0xvYWRSZXF1ZXN0cy5hZGQocGFpcik7CiAgICBUaW1lci5ydW4oKCkgewogICAgICB2YXIgaGFzQ29tcGxldGVkID0gdGhpcy5fbG9hZCgpOwogICAgICAvLyBMb2FkaW5nIGNhbiBjb21wbGV0ZSBpbW1lZGlhdGVseSwgZm9yIGV4YW1wbGUgd2hlbiB0aGUgc2FtZQogICAgICAvLyBsaWJyYXJ5IGhhcyBiZWVuIGxvYWRlZCBlYWdlcmx5IG9yIHRocm91Z2ggYW5vdGhlciBkZWZlcnJlZAogICAgICAvLyBwcmVmaXguIElmIHRoYXQgaXMgdGhlIGNhc2UsIHdlIG11c3QgaW52YWxpZGF0ZSB0aGUgZGVwZW5kZW50CiAgICAgIC8vIGNvZGUgYW5kIGNvbXBsZXRlIHRoZSBmdXR1cmUgbm93IHNpbmNlIHRoZXJlIHdpbGwgYmUgbm8gY2FsbGJhY2sKICAgICAgLy8gZnJvbSB0aGUgVk0uCiAgICAgIGlmIChoYXNDb21wbGV0ZWQgJiYgIWNvbXBsZXRlci5pc0NvbXBsZXRlZCkgewogICAgICAgIF9pbnZhbGlkYXRlRGVwZW5kZW50Q29kZSgpOwogICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZSh0cnVlKTsKICAgICAgICBfb3V0c3RhbmRpbmdMb2FkUmVxdWVzdHMucmVtb3ZlKHBhaXIpOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBjb21wbGV0ZXIuZnV0dXJlOwogIH0KfQoKLy8gQSBsaXN0IG9mIHR3byBlbGVtZW50IGxpc3RzLiBUaGUgZmlyc3QgZWxlbWVudCBpcyB0aGUgX0xpYnJhcnlQcmVmaXguIFRoZQovLyBzZWNvbmQgZWxlbWVudCBpcyB0aGUgQ29tcGxldGVyIGZvciB0aGUgbG9hZCByZXF1ZXN0Lgp2YXIgX291dHN0YW5kaW5nTG9hZFJlcXVlc3RzID0gbmV3IExpc3Q8TGlzdD4oKTsKCi8vIENhbGxlZCBmcm9tIHRoZSBWTSB3aGVuIGFuIG91dHN0YW5kaW5nIGxvYWQgcmVxdWVzdCBoYXMgZmluaXNoZWQuCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQpfY29tcGxldGVEZWZlcnJlZExvYWRzKCkgewogIC8vIERldGVybWluZSB3aGljaCBvdXRzdGFuZGluZyBsb2FkIHJlcXVlc3RzIGhhdmUgY29tcGxldGVkIGFuZCBjb21wbGV0ZQogIC8vIHRoZWlyIGNvbXBsZXRlciAod2l0aCBhbiBlcnJvciBvciB0cnVlKS4gRm9yIG91dHN0YW5kaW5nIGxvYWQgcmVxdWVzdHMKICAvLyB3aGljaCBoYXZlIG5vdCBjb21wbGV0ZWQsIHJlbWVtYmVyIHRoZW0gZm9yIG5leHQgdGltZSBpbgogIC8vIHN0aWxsT3V0c3RhbmRpbmdMb2FkUmVxdWVzdHMuCiAgdmFyIHN0aWxsT3V0c3RhbmRpbmdMb2FkUmVxdWVzdHMgPSBuZXcgTGlzdDxMaXN0PigpOwoKICAvLyBNYWtlIGEgY29weSBvZiB0aGUgb3V0c3RhbmRpbmdSZXF1ZXN0cyBiZWNhdXNlIHRoZSBjYWxsIHRvIF9sb2FkIGJlbG93CiAgLy8gbWF5IHJlY3Vyc2l2ZWx5IHRyaWdnZXIgYW5vdGhlciBjYWxsIHRvIHxfY29tcGxldGVEZWZlcnJlZExvYWRzfCwgd2hpY2gKICAvLyBjYW4gY2F1c2UgfF9vdXRzdGFuZGluZ0xvYWRSZXF1ZXN0c3wgdG8gYmUgbW9kaWZpZWQuCiAgdmFyIG91dHN0YW5kaW5nUmVxdWVzdHMgPSBfb3V0c3RhbmRpbmdMb2FkUmVxdWVzdHMudG9MaXN0KCk7CiAgZm9yIChpbnQgaSA9IDA7IGkgPCBvdXRzdGFuZGluZ1JlcXVlc3RzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgcHJlZml4ID0gb3V0c3RhbmRpbmdSZXF1ZXN0c1tpXVswXTsKICAgIHZhciBjb21wbGV0ZXIgPSBvdXRzdGFuZGluZ1JlcXVlc3RzW2ldWzFdOwogICAgdmFyIGVycm9yID0gcHJlZml4Ll9sb2FkRXJyb3IoKTsKICAgIGlmIChjb21wbGV0ZXIuaXNDb21wbGV0ZWQpIHsKICAgICAgLy8gQWxyZWFkeSBjb21wbGV0ZWQuIFNraXAuCiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKGVycm9yICE9IG51bGwpIHsKICAgICAgY29tcGxldGVyLmNvbXBsZXRlRXJyb3IoZXJyb3IpOwogICAgfSBlbHNlIGlmIChwcmVmaXguX2xvYWQoKSkgewogICAgICBwcmVmaXguX2ludmFsaWRhdGVEZXBlbmRlbnRDb2RlKCk7CiAgICAgIGNvbXBsZXRlci5jb21wbGV0ZSh0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHN0aWxsT3V0c3RhbmRpbmdMb2FkUmVxdWVzdHMuYWRkKG91dHN0YW5kaW5nUmVxdWVzdHNbaV0pOwogICAgfQogIH0KICBfb3V0c3RhbmRpbmdMb2FkUmVxdWVzdHMgPSBzdGlsbE91dHN0YW5kaW5nTG9hZFJlcXVlc3RzOwp9ClYATk48AR4BQRoXLRkEASw4MyI2ARJANDYIBgErGxQZKBMnRUVHShY0JCIvCAgdBAIBTTkxAUUiG0tMPiM3AUxNOj85LC8lISIQBhkmISkgDUAGBDsCAR9kYXJ0OmNvcmUtcGF0Y2gvbGliX3ByZWZpeC5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvcmVnZXhwX3BhdGNoLmRhcnS1Ei8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIFJlZ0V4cCB7CiAgQHBhdGNoCiAgZmFjdG9yeSBSZWdFeHAoU3RyaW5nIHNvdXJjZSwKICAgICAge2Jvb2wgbXVsdGlMaW5lOiBmYWxzZSwKICAgICAgYm9vbCBjYXNlU2Vuc2l0aXZlOiB0cnVlLAogICAgICBib29sIHVuaWNvZGU6IGZhbHNlLAogICAgICBib29sIGRvdEFsbDogZmFsc2V9KSB7CiAgICBfUmVnRXhwSGFzaEtleSBrZXkgPQogICAgICAgIG5ldyBfUmVnRXhwSGFzaEtleShzb3VyY2UsIG11bHRpTGluZSwgY2FzZVNlbnNpdGl2ZSwgdW5pY29kZSwgZG90QWxsKTsKICAgIF9SZWdFeHBIYXNoVmFsdWUgdmFsdWUgPSBfY2FjaGVba2V5XTsKCiAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICBpZiAoX2NhY2hlLmxlbmd0aCA+IF9NQVhfQ0FDSEVfU0laRSkgewogICAgICAgIF9SZWdFeHBIYXNoS2V5IGxhc3RLZXkgPSBfcmVjZW50bHlVc2VkLmxhc3Q7CiAgICAgICAgX3JlY2VudGx5VXNlZC5yZW1vdmUobGFzdEtleSk7CiAgICAgICAgX2NhY2hlLnJlbW92ZShsYXN0S2V5KTsKICAgICAgfQoKICAgICAgdmFsdWUgPSBuZXcgX1JlZ0V4cEhhc2hWYWx1ZSgKICAgICAgICAgIG5ldyBfUmVnRXhwKHNvdXJjZSwKICAgICAgICAgICAgICBtdWx0aUxpbmU6IG11bHRpTGluZSwKICAgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlOiBjYXNlU2Vuc2l0aXZlLAogICAgICAgICAgICAgIHVuaWNvZGU6IHVuaWNvZGUsCiAgICAgICAgICAgICAgZG90QWxsOiBkb3RBbGwpLAogICAgICAgICAga2V5KTsKICAgICAgX2NhY2hlW2tleV0gPSB2YWx1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlLmtleS51bmxpbmsoKTsKICAgIH0KCiAgICBhc3NlcnQodmFsdWUgIT0gbnVsbCk7CgogICAgX3JlY2VudGx5VXNlZC5hZGRGaXJzdCh2YWx1ZS5rZXkpOwogICAgYXNzZXJ0KF9yZWNlbnRseVVzZWQubGVuZ3RoID09IF9jYWNoZS5sZW5ndGgpOwoKICAgIC8vIFRPRE8oemVybnkpOiBXZSBtaWdodCBub3Qgd2FudCB0byBjYW5vbmljYWxpemUgcmVnZXhwIG9iamVjdHMuCiAgICByZXR1cm4gdmFsdWUucmVnZXhwOwogIH0KCiAgLyoqCiAgICogRmluZHMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBSZWdFeHAtc2lnbmlmaWNhbnQgY2hhciBpbiBbdGV4dF0uCiAgICoKICAgKiBTdGFydHMgbG9va2luZyBmcm9tIFtzdGFydF0uIFJldHVybnMgYHRleHQubGVuZ3RoYCBpZiBubyBjaGFyYWN0ZXIKICAgKiBpcyBmb3VuZCB0aGF0IGhhcyBzcGVjaWFsIG1lYW5pbmcgaW4gUmVnRXhwIHN5bnRheC4KICAgKi8KICBzdGF0aWMgaW50IF9maW5kRXNjYXBlQ2hhcihTdHJpbmcgdGV4dCwgaW50IHN0YXJ0KSB7CiAgICAvLyBUYWJsZSB3aGVyZSBlYWNoIGNoYXJhY3RlciBpbiB0aGUgcmFuZ2UgVSswMDAwIHRvIFUrMDA3ZiBpcyByZXByZXNlbnRlZAogICAgLy8gYnkgd2hldGhlciBpdCBuZWVkcyB0byBiZSBlc2NhcGVkIGluIGEgcmVnZXhwLgogICAgLy8gVGhlIFx4MDAgY2hhcmFjdGVycyBtZWFucyBlc2NhY3BlZCwgYW5kIFx4MDEgbWVhbnMgbm9uLWVzY2FwZWQuCiAgICBjb25zdCBlc2NhcGVzID0KICAgICAgICAiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIKICAgICAgICAiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMSIKICAgICAgICAvLyAgICAgICAgICAgICAgICAgJCAgICAgICAgICAgICAgICggICApICAgKiAgICsgICAgICAgICAgIC4KICAgICAgICAiXHgwMVx4MDFceDAxXHgwMVx4MDBceDAxXHgwMVx4MDFceDAwXHgwMFx4MDBceDAwXHgwMVx4MDFceDAwXHgwMSIKICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/CiAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDAiCiAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbICAgXCAgIF0gICBeCiAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMFx4MDBceDAwXHgwMFx4MDEiCiAgICAgICAgIlx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDEiCiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICAgfCAgIH0KICAgICAgICAiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAxXHgwMVx4MDFceDAwXHgwMFx4MDBceDAxXHgwMSI7CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCB0ZXh0Lmxlbmd0aDsgaSsrKSB7CiAgICAgIGludCBjaGFyID0gdGV4dC5jb2RlVW5pdEF0KGkpOwogICAgICBpZiAoY2hhciA8PSAweDdmICYmIGVzY2FwZXMuY29kZVVuaXRBdChjaGFyKSA9PSAwKSByZXR1cm4gaTsKICAgIH0KICAgIHJldHVybiB0ZXh0Lmxlbmd0aDsKICB9CgogIEBwYXRjaAogIHN0YXRpYyBTdHJpbmcgZXNjYXBlKFN0cmluZyB0ZXh0KSB7CiAgICBpbnQgZXNjYXBlQ2hhckluZGV4ID0gX2ZpbmRFc2NhcGVDaGFyKHRleHQsIDApOwogICAgLy8gSWYgdGhlIHRleHQgY29udGFpbnMgbm8gY2hhcmFjdGVycyBuZWVkaW5nIGVzY2FwZSwgcmV0dXJuIGl0IGRpcmVjdGx5LgogICAgaWYgKGVzY2FwZUNoYXJJbmRleCA9PSB0ZXh0Lmxlbmd0aCkgcmV0dXJuIHRleHQ7CgogICAgdmFyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGludCBwcmV2aW91c1NsaWNlRW5kSW5kZXggPSAwOwogICAgZG8gewogICAgICAvLyBDb3B5IGNoYXJhY3RlcnMgZnJvbSBwcmV2aW91cyBlc2NhcGUgdG8gY3VycmVudCBlc2NhcGUgaW50byByZXN1bHQuCiAgICAgIC8vIFRoaXMgaW5jbHVkZXMgdGhlIHByZXZpb3VzbHkgZXNjYXBlZCBjaGFyYWN0ZXIuCiAgICAgIGJ1ZmZlci53cml0ZSh0ZXh0LnN1YnN0cmluZyhwcmV2aW91c1NsaWNlRW5kSW5kZXgsIGVzY2FwZUNoYXJJbmRleCkpOwogICAgICAvLyBQcmVwYXJlIHRoZSBjdXJyZW50IGNoYXJhY3RlciB0byBiZSBlc2NhcGVkIGJ5IHByZWZpeGluZyBpdCB3aXRoIGEgJ1wnLgogICAgICBidWZmZXIud3JpdGUociJcIik7CiAgICAgIHByZXZpb3VzU2xpY2VFbmRJbmRleCA9IGVzY2FwZUNoYXJJbmRleDsKICAgICAgZXNjYXBlQ2hhckluZGV4ID0gX2ZpbmRFc2NhcGVDaGFyKHRleHQsIGVzY2FwZUNoYXJJbmRleCArIDEpOwogICAgfSB3aGlsZSAoZXNjYXBlQ2hhckluZGV4IDwgdGV4dC5sZW5ndGgpOwogICAgLy8gQ29weSB0YWlsIG9mIHN0cmluZyBpbnRvIHJlc3VsdC4KICAgIGJ1ZmZlci53cml0ZSh0ZXh0LnN1YnN0cmluZyhwcmV2aW91c1NsaWNlRW5kSW5kZXgsIGVzY2FwZUNoYXJJbmRleCkpOwogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgLy8gUmVndWxhciBleHByZXNzaW9uIG9iamVjdHMgYXJlIHN0b3JlZCBpbiBhIGNhY2hlIG9mIHVwIHRvIF9NQVhfQ0FDSEVfU0laRQogIC8vIGVsZW1lbnRzIHVzaW5nIGFuIExSVSBldmljdGlvbiBzdHJhdGVneS4KICAvLyBUT0RPKHplcm55KTogRG8gbm90IGltcG9zZSBhIGZpeGVkIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgY2FjaGVkIG9iamVjdHMuCiAgLy8gT3RoZXIgcG9zc2liaWxpdGllcyBjb3VsZCBiZSBsaW1pdGluZyBieSB0aGUgc2l6ZSBvZiB0aGUgcmVnZXhwIG9iamVjdHMsCiAgLy8gb3IgaW1wb3NpbmcgYSBsb3dlciB0aW1lIGJvdW5kIGZvciB0aGUgbW9zdCByZWNlbnQgdXNlIHVuZGVyIHdoaWNoIGEgcmVnZXhwCiAgLy8gbWF5IG5vdCBiZSByZW1vdmVkIGZyb20gdGhlIGNhY2hlLgogIC8vIFRPRE8oemVybnkpOiBVc2Ugc2VsZi1zaXppbmcgY2FjaGUgc2ltaWxhciB0byBfQWNjZXNzb3JDYWNoZSBpbgogIC8vIG1pcnJvcnNfaW1wbC5kYXJ0LgogIHN0YXRpYyBjb25zdCBpbnQgX01BWF9DQUNIRV9TSVpFID0gMjU2OwogIHN0YXRpYyBmaW5hbCBNYXA8X1JlZ0V4cEhhc2hLZXksIF9SZWdFeHBIYXNoVmFsdWU+IF9jYWNoZSA9CiAgICAgIG5ldyBIYXNoTWFwPF9SZWdFeHBIYXNoS2V5LCBfUmVnRXhwSGFzaFZhbHVlPigpOwogIHN0YXRpYyBmaW5hbCBMaW5rZWRMaXN0PF9SZWdFeHBIYXNoS2V5PiBfcmVjZW50bHlVc2VkID0KICAgICAgbmV3IExpbmtlZExpc3Q8X1JlZ0V4cEhhc2hLZXk+KCk7CgogIGludCBnZXQgX2dyb3VwQ291bnQ7CiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgX2dyb3VwTmFtZXM7CiAgaW50IF9ncm91cE5hbWVJbmRleChTdHJpbmcgbmFtZSk7Cn0KCi8vIFJlcHJlc2VudHMgYm90aCBhIGtleSBpbiB0aGUgcmVndWxhciBleHByZXNzaW9uIGNhY2hlIGFzIHdlbGwgYXMgaXRzCi8vIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdGhlIExSVSBsaXN0LgpjbGFzcyBfUmVnRXhwSGFzaEtleSBleHRlbmRzIExpbmtlZExpc3RFbnRyeTxfUmVnRXhwSGFzaEtleT4gewogIGZpbmFsIFN0cmluZyBwYXR0ZXJuOwogIGZpbmFsIGJvb2wgbXVsdGlMaW5lOwogIGZpbmFsIGJvb2wgY2FzZVNlbnNpdGl2ZTsKICBmaW5hbCBib29sIHVuaWNvZGU7CiAgZmluYWwgYm9vbCBkb3RBbGw7CgogIF9SZWdFeHBIYXNoS2V5KHRoaXMucGF0dGVybiwgdGhpcy5tdWx0aUxpbmUsIHRoaXMuY2FzZVNlbnNpdGl2ZSwgdGhpcy51bmljb2RlLAogICAgICB0aGlzLmRvdEFsbCk7CgogIGludCBnZXQgaGFzaENvZGUgPT4gcGF0dGVybi5oYXNoQ29kZTsKICBib29sIG9wZXJhdG9yID09KHRoYXQpIHsKICAgIHJldHVybiAodGhhdCBpcyBfUmVnRXhwSGFzaEtleSkgJiYKICAgICAgICAodGhpcy5wYXR0ZXJuID09IHRoYXQucGF0dGVybikgJiYKICAgICAgICAodGhpcy5tdWx0aUxpbmUgPT0gdGhhdC5tdWx0aUxpbmUpICYmCiAgICAgICAgKHRoaXMuY2FzZVNlbnNpdGl2ZSA9PSB0aGF0LmNhc2VTZW5zaXRpdmUpICYmCiAgICAgICAgKHRoaXMudW5pY29kZSA9PSB0aGF0LnVuaWNvZGUpICYmCiAgICAgICAgKHRoaXMuZG90QWxsID09IHRoYXQuZG90QWxsKTsKICB9Cn0KCi8vIFJlcHJlc2VudHMgYSB2YWx1ZSBpbiB0aGUgcmVndWxhciBleHByZXNzaW9uIGNhY2hlLiBDb250YWlucyBhIHBvaW50ZXIKLy8gYmFjayB0byB0aGUga2V5IGluIG9yZGVyIHRvIGFjY2VzcyB0aGUgY29ycmVzcG9uZGluZyBMUlUgZW50cnkuCmNsYXNzIF9SZWdFeHBIYXNoVmFsdWUgewogIGZpbmFsIF9SZWdFeHAgcmVnZXhwOwogIGZpbmFsIF9SZWdFeHBIYXNoS2V5IGtleTsKCiAgX1JlZ0V4cEhhc2hWYWx1ZSh0aGlzLnJlZ2V4cCwgdGhpcy5rZXkpOwp9CgpjbGFzcyBfUmVnRXhwTWF0Y2ggaW1wbGVtZW50cyBSZWdFeHBNYXRjaCB7CiAgX1JlZ0V4cE1hdGNoLl8odGhpcy5fcmVnZXhwLCB0aGlzLmlucHV0LCB0aGlzLl9tYXRjaCk7CgogIGludCBnZXQgc3RhcnQgPT4gX3N0YXJ0KDApOwogIGludCBnZXQgZW5kID0+IF9lbmQoMCk7CgogIGludCBfc3RhcnQoaW50IGdyb3VwSWR4KSB7CiAgICByZXR1cm4gX21hdGNoWyhncm91cElkeCAqIF9NQVRDSF9QQUlSKV07CiAgfQoKICBpbnQgX2VuZChpbnQgZ3JvdXBJZHgpIHsKICAgIHJldHVybiBfbWF0Y2hbKGdyb3VwSWR4ICogX01BVENIX1BBSVIpICsgMV07CiAgfQoKICBTdHJpbmcgZ3JvdXAoaW50IGdyb3VwSWR4KSB7CiAgICBpZiAoZ3JvdXBJZHggPCAwIHx8IGdyb3VwSWR4ID4gX3JlZ2V4cC5fZ3JvdXBDb3VudCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShncm91cElkeCk7CiAgICB9CiAgICBpbnQgc3RhcnRJbmRleCA9IF9zdGFydChncm91cElkeCk7CiAgICBpbnQgZW5kSW5kZXggPSBfZW5kKGdyb3VwSWR4KTsKICAgIGlmIChzdGFydEluZGV4ID09IC0xKSB7CiAgICAgIGFzc2VydChlbmRJbmRleCA9PSAtMSk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIGlucHV0Ll9zdWJzdHJpbmdVbmNoZWNrZWQoc3RhcnRJbmRleCwgZW5kSW5kZXgpOwogIH0KCiAgU3RyaW5nIG9wZXJhdG9yIFtdKGludCBncm91cElkeCkgewogICAgcmV0dXJuIHRoaXMuZ3JvdXAoZ3JvdXBJZHgpOwogIH0KCiAgTGlzdDxTdHJpbmc+IGdyb3VwcyhMaXN0PGludD4gZ3JvdXBzU3BlYykgewogICAgdmFyIGdyb3Vwc0xpc3QgPSBuZXcgTGlzdDxTdHJpbmc+KGdyb3Vwc1NwZWMubGVuZ3RoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZ3JvdXBzU3BlYy5sZW5ndGg7IGkrKykgewogICAgICBncm91cHNMaXN0W2ldID0gZ3JvdXAoZ3JvdXBzU3BlY1tpXSk7CiAgICB9CiAgICByZXR1cm4gZ3JvdXBzTGlzdDsKICB9CgogIGludCBnZXQgZ3JvdXBDb3VudCA9PiBfcmVnZXhwLl9ncm91cENvdW50OwoKICBQYXR0ZXJuIGdldCBwYXR0ZXJuID0+IF9yZWdleHA7CgogIFN0cmluZyBuYW1lZEdyb3VwKFN0cmluZyBuYW1lKSB7CiAgICB2YXIgaWR4ID0gX3JlZ2V4cC5fZ3JvdXBOYW1lSW5kZXgobmFtZSk7CiAgICBpZiAoaWR4IDwgMCkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCJOb3QgYSBjYXB0dXJlIGdyb3VwIG5hbWU6ICR7bmFtZX0iKTsKICAgIH0KICAgIHJldHVybiBncm91cChpZHgpOwogIH0KCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgZ3JvdXBOYW1lcyB7CiAgICByZXR1cm4gX3JlZ2V4cC5fZ3JvdXBOYW1lczsKICB9CgogIGZpbmFsIFJlZ0V4cCBfcmVnZXhwOwogIGZpbmFsIFN0cmluZyBpbnB1dDsKICBmaW5hbCBMaXN0PGludD4gX21hdGNoOwogIHN0YXRpYyBjb25zdCBpbnQgX01BVENIX1BBSVIgPSAyOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9SZWdFeHAgaW1wbGVtZW50cyBSZWdFeHAgewogIGZhY3RvcnkgX1JlZ0V4cChTdHJpbmcgcGF0dGVybiwKICAgICAge2Jvb2wgbXVsdGlMaW5lOiBmYWxzZSwKICAgICAgYm9vbCBjYXNlU2Vuc2l0aXZlOiB0cnVlLAogICAgICBib29sIHVuaWNvZGU6IGZhbHNlLAogICAgICBib29sIGRvdEFsbDogZmFsc2V9KSBuYXRpdmUgIlJlZ0V4cF9mYWN0b3J5IjsKCiAgUmVnRXhwTWF0Y2ggZmlyc3RNYXRjaChTdHJpbmcgc3RyKSB7CiAgICBpZiAoc3RyIGlzISBTdHJpbmcpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKHN0cik7CiAgICBMaXN0IG1hdGNoID0gX0V4ZWN1dGVNYXRjaChzdHIsIDApOwogICAgaWYgKG1hdGNoID09IG51bGwpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICByZXR1cm4gbmV3IF9SZWdFeHBNYXRjaC5fKHRoaXMsIHN0ciwgbWF0Y2gpOwogIH0KCiAgSXRlcmFibGU8UmVnRXhwTWF0Y2g+IGFsbE1hdGNoZXMoU3RyaW5nIHN0cmluZywgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RyaW5nIGlzISBTdHJpbmcpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKHN0cmluZyk7CiAgICBpZiAoc3RhcnQgaXMhIGludCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Ioc3RhcnQpOwogICAgaWYgKDAgPiBzdGFydCB8fCBzdGFydCA+IHN0cmluZy5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2Uoc3RhcnQsIDAsIHN0cmluZy5sZW5ndGgpOwogICAgfQogICAgcmV0dXJuIG5ldyBfQWxsTWF0Y2hlc0l0ZXJhYmxlKHRoaXMsIHN0cmluZywgc3RhcnQpOwogIH0KCiAgUmVnRXhwTWF0Y2ggbWF0Y2hBc1ByZWZpeChTdHJpbmcgc3RyaW5nLCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmIChzdHJpbmcgaXMhIFN0cmluZykgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Ioc3RyaW5nKTsKICAgIGlmIChzdGFydCBpcyEgaW50KSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihzdGFydCk7CiAgICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID4gc3RyaW5nLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgc3RyaW5nLmxlbmd0aCk7CiAgICB9CiAgICBMaXN0PGludD4gbGlzdCA9IF9FeGVjdXRlTWF0Y2hTdGlja3koc3RyaW5nLCBzdGFydCk7CiAgICBpZiAobGlzdCA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBuZXcgX1JlZ0V4cE1hdGNoLl8odGhpcywgc3RyaW5nLCBsaXN0KTsKICB9CgogIGJvb2wgaGFzTWF0Y2goU3RyaW5nIHN0cikgewogICAgaWYgKHN0ciBpcyEgU3RyaW5nKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihzdHIpOwogICAgTGlzdCBtYXRjaCA9IF9FeGVjdXRlTWF0Y2goc3RyLCAwKTsKICAgIHJldHVybiAobWF0Y2ggPT0gbnVsbCkgPyBmYWxzZSA6IHRydWU7CiAgfQoKICBTdHJpbmcgc3RyaW5nTWF0Y2goU3RyaW5nIHN0cikgewogICAgaWYgKHN0ciBpcyEgU3RyaW5nKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihzdHIpOwogICAgTGlzdCBtYXRjaCA9IF9FeGVjdXRlTWF0Y2goc3RyLCAwKTsKICAgIGlmIChtYXRjaCA9PSBudWxsKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIHN0ci5fc3Vic3RyaW5nVW5jaGVja2VkKG1hdGNoWzBdLCBtYXRjaFsxXSk7CiAgfQoKICBTdHJpbmcgZ2V0IHBhdHRlcm4gbmF0aXZlICJSZWdFeHBfZ2V0UGF0dGVybiI7CgogIGJvb2wgZ2V0IGlzTXVsdGlMaW5lIG5hdGl2ZSAiUmVnRXhwX2dldElzTXVsdGlMaW5lIjsKCiAgYm9vbCBnZXQgaXNDYXNlU2Vuc2l0aXZlIG5hdGl2ZSAiUmVnRXhwX2dldElzQ2FzZVNlbnNpdGl2ZSI7CgogIGJvb2wgZ2V0IGlzVW5pY29kZSBuYXRpdmUgIlJlZ0V4cF9nZXRJc1VuaWNvZGUiOwoKICBib29sIGdldCBpc0RvdEFsbCBuYXRpdmUgIlJlZ0V4cF9nZXRJc0RvdEFsbCI7CgogIGludCBnZXQgX2dyb3VwQ291bnQgbmF0aXZlICJSZWdFeHBfZ2V0R3JvdXBDb3VudCI7CgogIC8vIFJldHVybnMgYSBMaXN0IFtTdHJpbmcsIGludCwgU3RyaW5nLCBpbnQsIC4uLl0gd2hlcmUgZWFjaAogIC8vIFN0cmluZyBpcyB0aGUgbmFtZSBvZiBhIGNhcHR1cmUgZ3JvdXAgYW5kIHRoZSBmb2xsb3dpbmcKICAvLyBpbnQgaXMgdGhhdCBjYXB0dXJlIGdyb3VwJ3MgaW5kZXguCiAgTGlzdCBnZXQgX2dyb3VwTmFtZUxpc3QgbmF0aXZlICJSZWdFeHBfZ2V0R3JvdXBOYW1lTWFwIjsKCiAgSXRlcmFibGU8U3RyaW5nPiBnZXQgX2dyb3VwTmFtZXMgc3luYyogewogICAgZmluYWwgbmFtZUxpc3QgPSBfZ3JvdXBOYW1lTGlzdDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZUxpc3QubGVuZ3RoOyBpICs9IDIpIHsKICAgICAgeWllbGQgbmFtZUxpc3RbaV0gYXMgU3RyaW5nOwogICAgfQogIH0KCiAgaW50IF9ncm91cE5hbWVJbmRleChTdHJpbmcgbmFtZSkgewogICAgdmFyIG5hbWVMaXN0ID0gX2dyb3VwTmFtZUxpc3Q7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVMaXN0Lmxlbmd0aDsgaSArPSAyKSB7CiAgICAgIGlmIChuYW1lID09IG5hbWVMaXN0W2ldKSB7CiAgICAgICAgcmV0dXJuIG5hbWVMaXN0W2kgKyAxXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgLy8gQnl0ZSBtYXAgb2Ygb25lIGJ5dGUgY2hhcmFjdGVycyB3aXRoIGEgMHhmZiBpZiB0aGUgY2hhcmFjdGVyIGlzIGEgd29yZAogIC8vIGNoYXJhY3RlciAoZGlnaXQsIGxldHRlciBvciB1bmRlcnNjb3JlKSBhbmQgMHgwMCBvdGhlcndpc2UuCiAgLy8gVXNlZCBieSBnZW5lcmF0ZWQgUmVnRXhwIGNvZGUuCiAgc3RhdGljIGNvbnN0IExpc3Q8aW50PiBfd29yZENoYXJhY3Rlck1hcCA9IGNvbnN0IDxpbnQ+WwogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8vICcwJyAtICc3JwogICAgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgLy8gJzgnIC0gJzknCgogICAgMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLy8gJ0EnIC0gJ0cnCiAgICAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvLyAnSCcgLSAnTycKICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8vICdQJyAtICdXJwogICAgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgLy8gJ1gnIC0gJ1onLCAnXycKCiAgICAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAvLyAnYScgLSAnZycKICAgIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIC8vICdoJyAtICdvJwogICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgLy8gJ3AnIC0gJ3cnCiAgICAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAvLyAneCcgLSAneicKICAgIC8vIExhdGluLTEgcmFuZ2UKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCgogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAoKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiAgXTsKCiAgTGlzdCBfRXhlY3V0ZU1hdGNoKFN0cmluZyBzdHIsIGludCBzdGFydF9pbmRleCkgbmF0aXZlICJSZWdFeHBfRXhlY3V0ZU1hdGNoIjsKCiAgTGlzdCBfRXhlY3V0ZU1hdGNoU3RpY2t5KFN0cmluZyBzdHIsIGludCBzdGFydF9pbmRleCkKICAgICAgbmF0aXZlICJSZWdFeHBfRXhlY3V0ZU1hdGNoU3RpY2t5IjsKfQoKY2xhc3MgX0FsbE1hdGNoZXNJdGVyYWJsZSBleHRlbmRzIEl0ZXJhYmxlQmFzZTxSZWdFeHBNYXRjaD4gewogIGZpbmFsIF9SZWdFeHAgX3JlOwogIGZpbmFsIFN0cmluZyBfc3RyOwogIGZpbmFsIGludCBfc3RhcnQ7CgogIF9BbGxNYXRjaGVzSXRlcmFibGUodGhpcy5fcmUsIHRoaXMuX3N0ciwgdGhpcy5fc3RhcnQpOwoKICBJdGVyYXRvcjxSZWdFeHBNYXRjaD4gZ2V0IGl0ZXJhdG9yID0+CiAgICAgIG5ldyBfQWxsTWF0Y2hlc0l0ZXJhdG9yKF9yZSwgX3N0ciwgX3N0YXJ0KTsKfQoKY2xhc3MgX0FsbE1hdGNoZXNJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yPFJlZ0V4cE1hdGNoPiB7CiAgZmluYWwgU3RyaW5nIF9zdHI7CiAgaW50IF9uZXh0SW5kZXg7CiAgX1JlZ0V4cCBfcmU7CiAgUmVnRXhwTWF0Y2ggX2N1cnJlbnQ7CgogIF9BbGxNYXRjaGVzSXRlcmF0b3IodGhpcy5fcmUsIHRoaXMuX3N0ciwgdGhpcy5fbmV4dEluZGV4KTsKCiAgUmVnRXhwTWF0Y2ggZ2V0IGN1cnJlbnQgPT4gX2N1cnJlbnQ7CgogIHN0YXRpYyBib29sIF9pc0xlYWRTdXJyb2dhdGUoaW50IGMpIHsKICAgIHJldHVybiBjID49IDB4ZDgwMCAmJiBjIDw9IDB4ZGJmZjsKICB9CgogIHN0YXRpYyBib29sIF9pc1RyYWlsU3Vycm9nYXRlKGludCBjKSB7CiAgICByZXR1cm4gYyA+PSAweGRjMDAgJiYgYyA8PSAweGRmZmY7CiAgfQoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9yZSA9PSBudWxsKSByZXR1cm4gZmFsc2U7IC8vIENsZWFyZWQgYWZ0ZXIgYSBmYWlsZWQgbWF0Y2guCiAgICBpZiAoX25leHRJbmRleCA8PSBfc3RyLmxlbmd0aCkgewogICAgICB2YXIgbWF0Y2ggPSBfcmUuX0V4ZWN1dGVNYXRjaChfc3RyLCBfbmV4dEluZGV4KTsKICAgICAgaWYgKG1hdGNoICE9IG51bGwpIHsKICAgICAgICBfY3VycmVudCA9IG5ldyBfUmVnRXhwTWF0Y2guXyhfcmUsIF9zdHIsIG1hdGNoKTsKICAgICAgICBfbmV4dEluZGV4ID0gX2N1cnJlbnQuZW5kOwogICAgICAgIGlmIChfbmV4dEluZGV4ID09IF9jdXJyZW50LnN0YXJ0KSB7CiAgICAgICAgICAvLyBaZXJvLXdpZHRoIG1hdGNoLiBBZHZhbmNlIGJ5IG9uZSBtb3JlLCB1bmxlc3MgdGhlIHJlZ2V4cAogICAgICAgICAgLy8gaXMgaW4gdW5pY29kZSBtb2RlIGFuZCBpdCB3b3VsZCBwdXQgdXMgd2l0aGluIGEgc3Vycm9nYXRlCiAgICAgICAgICAvLyBwYWlyLiBJbiB0aGF0IGNhc2UsIGFkdmFuY2UgcGFzdCB0aGUgY29kZSBwb2ludCBhcyBhIHdob2xlLgogICAgICAgICAgaWYgKF9yZS5pc1VuaWNvZGUgJiYKICAgICAgICAgICAgICBfbmV4dEluZGV4ICsgMSA8IF9zdHIubGVuZ3RoICYmCiAgICAgICAgICAgICAgX2lzTGVhZFN1cnJvZ2F0ZShfc3RyLmNvZGVVbml0QXQoX25leHRJbmRleCkpICYmCiAgICAgICAgICAgICAgX2lzVHJhaWxTdXJyb2dhdGUoX3N0ci5jb2RlVW5pdEF0KF9uZXh0SW5kZXggKyAxKSkpIHsKICAgICAgICAgICAgX25leHRJbmRleCsrOwogICAgICAgICAgfQogICAgICAgICAgX25leHRJbmRleCsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgX2N1cnJlbnQgPSBudWxsOwogICAgX3JlID0gbnVsbDsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0KgZUATk48AR4BBw8JIB4gGx0ZTyoBGS01JyAIASQeJCwgHxAbDRoGARsBJzMBRhkEAQZFBUg5BjdPNkcUS0tFS0lLS0VLS0FMMCVDBhgEAQkmNE41ASUjCU05TFEaL0QtKEoeBAFPLk9OUShFGCo+NzooARckJAIBSCg/GBgcFhUBURQBKBsnKi42KiYEAgFKQxkYHAErAgEsOQEeGgEdLQQBGzEEAR86LAYnIxweEwY8BAElIQQBLjoyLAYXBAEtASIBIy0TQAYXBAEkIAQBGBYaJAIBGiIiHiAbNAEnNigZEwYxBAFFPDcuOwY5BAE+PDcuOwY5IzMEAR42KCsEASM2KBkTBjgEATEBNwE/ATMBMQE1AT89KDsBKyUzIwYEASUjMyEgCAYPBAFMQSQ6NDQ0NAE0NEFBAUFBQUYBQUFBQRU0NDQ0ATQ0NDQBNDQ0NAE0NDQ0BQFQATgqAgE+FRUUATkBKDICAT0VEg8YAT0BJwEoJwQBKScEARREJTcbOSMsRkdJHy4/RBoMGAoVCAYVEBIEAgEhZGFydDpjb3JlLXBhdGNoL3JlZ2V4cF9wYXRjaC5kYXJ0L29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvc3RhY2t0cmFjZS5kYXJ0gZgvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCi8vLyBWTSBpbnRlcm5hbCBTdGFja1RyYWNlIGltcGxlbWVudGF0aW9uLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9TdGFja1RyYWNlIGltcGxlbWVudHMgU3RhY2tUcmFjZSB7CiAgLy8gdG9TdHJpbmcoKSBpcyBvdmVycmlkZGVuIG9uIHRoZSBDKysgc2lkZS4KfQoNAE5OPAEeASsaKi8CAR9kYXJ0OmNvcmUtcGF0Y2gvc3RhY2t0cmFjZS5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvc3RyaW5nX3BhdGNoLmRhcnTAALXQLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7Cgpjb25zdCBpbnQgX21heEFzY2lpID0gMHg3ZjsKY29uc3QgaW50IF9tYXhMYXRpbjEgPSAweGZmOwpjb25zdCBpbnQgX21heFV0ZjE2ID0gMHhmZmZmOwpjb25zdCBpbnQgX21heFVuaWNvZGUgPSAweDEwZmZmZjsKCkBwYXRjaApjbGFzcyBTdHJpbmcgewogIEBwYXRjaAogIGZhY3RvcnkgU3RyaW5nLmZyb21DaGFyQ29kZXMoSXRlcmFibGU8aW50PiBjaGFyQ29kZXMsCiAgICAgIFtpbnQgc3RhcnQgPSAwLCBpbnQgZW5kXSkgewogICAgaWYgKGNoYXJDb2RlcyBpcyEgSXRlcmFibGUpCiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKGNoYXJDb2RlcywgImNoYXJDb2RlcyIpOwogICAgaWYgKHN0YXJ0IGlzISBpbnQpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKHN0YXJ0LCAic3RhcnQiKTsKICAgIGlmIChlbmQgIT0gbnVsbCAmJiBlbmQgaXMhIGludCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IudmFsdWUoZW5kLCAiZW5kIik7CiAgICByZXR1cm4gX1N0cmluZ0Jhc2UuY3JlYXRlRnJvbUNoYXJDb2RlcyhjaGFyQ29kZXMsIHN0YXJ0LCBlbmQsIG51bGwpOwogIH0KCiAgQHBhdGNoCiAgZmFjdG9yeSBTdHJpbmcuZnJvbUNoYXJDb2RlKGludCBjaGFyQ29kZSkgewogICAgaWYgKGNoYXJDb2RlID49IDApIHsKICAgICAgaWYgKGNoYXJDb2RlIDw9IDB4ZmYpIHsKICAgICAgICByZXR1cm4gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKDEpLi5fc2V0QXQoMCwgY2hhckNvZGUpOwogICAgICB9CiAgICAgIGlmIChjaGFyQ29kZSA8PSAweGZmZmYpIHsKICAgICAgICByZXR1cm4gX1N0cmluZ0Jhc2UuX2NyZWF0ZUZyb21Db2RlUG9pbnRzKAogICAgICAgICAgICBuZXcgX0xpc3QoMSkuLlswXSA9IGNoYXJDb2RlLCAwLCAxKTsKICAgICAgfQogICAgICBpZiAoY2hhckNvZGUgPD0gMHgxMGZmZmYpIHsKICAgICAgICB2YXIgbG93ID0gMHhEQzAwIHwgKGNoYXJDb2RlICYgMHgzZmYpOwogICAgICAgIGludCBiaXRzID0gY2hhckNvZGUgLSAweDEwMDAwOwogICAgICAgIHZhciBoaWdoID0gMHhEODAwIHwgKGJpdHMgPj4gMTApOwogICAgICAgIHJldHVybiBfU3RyaW5nQmFzZS5fY3JlYXRlRnJvbUNvZGVQb2ludHMoCiAgICAgICAgICAgIG5ldyBfTGlzdCgyKQogICAgICAgICAgICAgIC4uWzBdID0gaGlnaAogICAgICAgICAgICAgIC4uWzFdID0gbG93LAogICAgICAgICAgICAwLAogICAgICAgICAgICAyKTsKICAgICAgfQogICAgfQogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoY2hhckNvZGUsIDAsIDB4MTBmZmZmKTsKICB9CgogIEBwYXRjaAogIGNvbnN0IGZhY3RvcnkgU3RyaW5nLmZyb21FbnZpcm9ubWVudChTdHJpbmcgbmFtZSwge1N0cmluZyBkZWZhdWx0VmFsdWV9KQogICAgICBuYXRpdmUgIlN0cmluZ19mcm9tRW52aXJvbm1lbnQiOwoKICBib29sIGdldCBfaXNPbmVCeXRlOwogIFN0cmluZyBfc3Vic3RyaW5nVW5jaGVja2VkKGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgpOwp9CgovKioKICogW19TdHJpbmdCYXNlXSBjb250YWlucyBjb21tb24gbWV0aG9kcyB1c2VkIGJ5IGNvbmNyZXRlIFN0cmluZwogKiBpbXBsZW1lbnRhdGlvbnMsIGUuZy4sIF9PbmVCeXRlU3RyaW5nLgogKi8KYWJzdHJhY3QgY2xhc3MgX1N0cmluZ0Jhc2UgaW1wbGVtZW50cyBTdHJpbmcgewogIGJvb2wgX2lzV2hpdGVzcGFjZShpbnQgY29kZVVuaXQpOwoKICAvLyBDb25zdGFudHMgdXNlZCBieSByZXBsYWNlQWxsIGVuY29kaW5nIG9mIHN0cmluZyBzbGljZXMgYmV0d2VlbiBtYXRjaGVzLgogIC8vIEEgc3RyaW5nIHNsaWNlIChzdGFydCtsZW5ndGgpIGlzIGVuY29kZWQgaW4gYSBzaW5nbGUgU21pIHRvIHNhdmUgbWVtb3J5CiAgLy8gb3ZlcmhlYWQgaW4gdGhlIGNvbW1vbiBjYXNlLgogIC8vIFdlIHVzZSBmZXdlciBiaXRzIGZvciBsZW5ndGggKDExIGJpdHMpIHRoYW4gZm9yIHRoZSBzdGFydCBpbmRleCAoMTkrIGJpdHMpLgogIC8vIEZvciBsb25nIHN0cmluZ3MsIGl0J3MgcG9zc2libGUgdG8gaGF2ZSBtYW55IGxhcmdlIGluZGljZXMsCiAgLy8gYnV0IGl0J3MgdW5saWtlbHkgdG8gaGF2ZSBtYW55IGxvbmcgbGVuZ3RocyBzaW5jZSBzbGljZXMgZG9uJ3Qgb3ZlcmxhcC4KICAvLyBJZiB0aGVyZSBhcmUgZmV3IG1hdGNoZXMgaW4gYSBsb25nIHN0cmluZywgdGhlbiB0aGVyZSBhcmUgZmV3IGxvbmcgc2xpY2VzLAogIC8vIGFuZCBpZiB0aGVyZSBhcmUgbWFueSBtYXRjaGVzLCB0aGVyZSdsbCBsaWtlbHkgYmUgbWFueSBzaG9ydCBzbGljZXMuCiAgLy8KICAvLyBFbmNvZGluZyBpczogMCgoc3RhcnQgPDwgX2xlbmd0aEJpdHMpIHwgbGVuZ3RoKQoKICAvLyBOdW1iZXIgb2YgYml0cyB1c2VkIGJ5IGxlbmd0aC4KICAvLyBUaGlzIGlzIHRoZSBzaGlmdCB1c2VkIHRvIGVuY29kZSBhbmQgZGVjb2RlIHRoZSBzdGFydCBpbmRleC4KICBzdGF0aWMgY29uc3QgaW50IF9sZW5ndGhCaXRzID0gMTE7CiAgLy8gVGhlIG1heGltYWwgYWxsb3dlZCBsZW5ndGggdmFsdWUgaW4gYW4gZW5jb2RlZCBzbGljZS4KICBzdGF0aWMgY29uc3QgaW50IF9tYXhMZW5ndGhWYWx1ZSA9ICgxIDw8IF9sZW5ndGhCaXRzKSAtIDE7CiAgLy8gTWFzayBvZiBsZW5ndGggaW4gZW5jb2RlZCBzbWkgdmFsdWUuCiAgc3RhdGljIGNvbnN0IGludCBfbGVuZ3RoTWFzayA9IF9tYXhMZW5ndGhWYWx1ZTsKICBzdGF0aWMgY29uc3QgaW50IF9zdGFydEJpdHMgPSBfbWF4VW5zaWduZWRTbWlCaXRzIC0gX2xlbmd0aEJpdHM7CiAgLy8gTWF4aW1hbCBhbGxvd2VkIHN0YXJ0IGluZGV4IHZhbHVlIGluIGFuIGVuY29kZWQgc2xpY2UuCiAgc3RhdGljIGNvbnN0IGludCBfbWF4U3RhcnRWYWx1ZSA9ICgxIDw8IF9zdGFydEJpdHMpIC0gMTsKICAvLyBXZSBwaWNrIDMwIGFzIGEgc2FmZSBsb3dlciBib3VuZCBvbiBhdmFpbGFibGUgYml0cyBpbiBhIG5lZ2F0aXZlIHNtaS4KICAvLyBUT0RPKGxybik6IENvbnNpZGVyIGFsbG93aW5nIG1vcmUgYml0cyBmb3Igc3RhcnQgb24gNjQtYml0IHN5c3RlbXMuCiAgc3RhdGljIGNvbnN0IGludCBfbWF4VW5zaWduZWRTbWlCaXRzID0gMzA7CgogIC8vIEZvciBsb25nZXIgc3RyaW5ncywgY2FsbGluZyBpbnRvIEMrKyB0byBjcmVhdGUgdGhlIHJlc3VsdCBvZiBhCiAgLy8gW3JlcGxhY2VBbGxdIGlzIGZhc3RlciB0aGFuIFtfam9pblJlcGxhY2VBbGxPbmVCeXRlUmVzdWx0XS4KICAvLyBUT0RPKGxybik6IFNlZSBpZiB0aGlzIGxpbWl0IGNhbiBiZSB0d2Vha2VkLgogIHN0YXRpYyBjb25zdCBpbnQgX21heEpvaW5SZXBsYWNlT25lQnl0ZVN0cmluZ0xlbmd0aCA9IDUwMDsKCiAgZmFjdG9yeSBfU3RyaW5nQmFzZS5fdW5pbnN0YW50aWFibGUoKSB7CiAgICB0aHJvdyBuZXcgVW5zdXBwb3J0ZWRFcnJvcigiX1N0cmluZ0Jhc2UgY2FuJ3QgYmUgaW5zdGFuaWF0ZWQiKTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgZ2V0IGhhc2hDb2RlIG5hdGl2ZSAiU3RyaW5nX2dldEhhc2hDb2RlIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBnZXQgX2lkZW50aXR5SGFzaENvZGUgbmF0aXZlICJTdHJpbmdfZ2V0SGFzaENvZGUiOwoKICBib29sIGdldCBfaXNPbmVCeXRlIHsKICAgIC8vIEFsdGVybmF0aXZlbHkgcmV0dXJuIGZhbHNlIGFuZCBvdmVycmlkZSBpdCBvbiBvbmUtYnl0ZSBzdHJpbmcgY2xhc3Nlcy4KICAgIGludCBpZCA9IENsYXNzSUQuZ2V0SUQodGhpcyk7CiAgICByZXR1cm4gaWQgPT0gQ2xhc3NJRC5jaWRPbmVCeXRlU3RyaW5nIHx8CiAgICAgICAgaWQgPT0gQ2xhc3NJRC5jaWRFeHRlcm5hbE9uZUJ5dGVTdHJpbmc7CiAgfQoKICAvKioKICAgKiBDcmVhdGUgdGhlIG1vc3QgZWZmaWNpZW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBmb3Igc3BlY2lmaWVkCiAgICogW2NoYXJDb2Rlc10uCiAgICoKICAgKiBPbmx5IHVzZXMgdGhlIGNoYXJhY3RlciBjb2RlcyBiZXR3ZWVuIGluZGV4IFtzdGFydF0gYW5kIGluZGV4IFtlbmRdIG9mCiAgICogYGNoYXJDb2Rlc2AuIFRoZXkgbXVzdCBzYXRpc2Z5IGAwIDw9IHN0YXJ0IDw9IGVuZCA8PSBjaGFyQ29kZXMubGVuZ3RoYC4KICAgKgogICAqIFRoZSBbbGltaXRdIGlzIGFuIHVwcGVyIGxpbWl0IG9uIHRoZSBjaGFyYWN0ZXIgY29kZXMgaW4gdGhlIGl0ZXJhYmxlLgogICAqIEl0J3MgYG51bGxgIGlmIHVua25vd24uCiAgICovCiAgc3RhdGljIFN0cmluZyBjcmVhdGVGcm9tQ2hhckNvZGVzKAogICAgICBJdGVyYWJsZTxpbnQ+IGNoYXJDb2RlcywgaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgbGltaXQpIHsKICAgIGlmIChzdGFydCA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJzdGFydCIpOwogICAgaWYgKGNoYXJDb2RlcyA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihjaGFyQ29kZXMpOwogICAgLy8gVE9ETyhzcmRqYW4pOiBBbHNvIHNraXAgY29weWluZyBvZiB3aWRlIHR5cGVkIGFycmF5cy4KICAgIGZpbmFsIGNjaWQgPSBDbGFzc0lELmdldElEKGNoYXJDb2Rlcyk7CiAgICBpZiAoKGNjaWQgIT0gQ2xhc3NJRC5jaWRBcnJheSkgJiYKICAgICAgICAoY2NpZCAhPSBDbGFzc0lELmNpZEdyb3dhYmxlT2JqZWN0QXJyYXkpICYmCiAgICAgICAgKGNjaWQgIT0gQ2xhc3NJRC5jaWRJbW11dGFibGVBcnJheSkpIHsKICAgICAgaWYgKGNoYXJDb2RlcyBpcyBVaW50OExpc3QpIHsKICAgICAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBjaGFyQ29kZXMubGVuZ3RoKTsKICAgICAgICByZXR1cm4gX2NyZWF0ZU9uZUJ5dGVTdHJpbmcoY2hhckNvZGVzLCBzdGFydCwgZW5kIC0gc3RhcnQpOwogICAgICB9IGVsc2UgaWYgKGNoYXJDb2RlcyBpcyEgVWludDE2TGlzdCkgewogICAgICAgIHJldHVybiBfY3JlYXRlU3RyaW5nRnJvbUl0ZXJhYmxlKGNoYXJDb2Rlcywgc3RhcnQsIGVuZCk7CiAgICAgIH0KICAgIH0KICAgIGludCBjb2RlQ291bnQgPSBjaGFyQ29kZXMubGVuZ3RoOwogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgY29kZUNvdW50KTsKICAgIGZpbmFsIGxlbiA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbiA9PSAwKSByZXR1cm4gIiI7CiAgICBsaW1pdCA/Pz0gX3NjYW5Db2RlVW5pdHMoY2hhckNvZGVzLCBzdGFydCwgZW5kKTsKICAgIGlmIChsaW1pdCA8IDApIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoY2hhckNvZGVzKTsKICAgIH0KICAgIGlmIChsaW1pdCA8PSBfbWF4TGF0aW4xKSB7CiAgICAgIHJldHVybiBfY3JlYXRlT25lQnl0ZVN0cmluZyhjaGFyQ29kZXMsIHN0YXJ0LCBsZW4pOwogICAgfQogICAgaWYgKGxpbWl0IDw9IF9tYXhVdGYxNikgewogICAgICByZXR1cm4gX1R3b0J5dGVTdHJpbmcuX2FsbG9jYXRlRnJvbVR3b0J5dGVMaXN0KGNoYXJDb2Rlcywgc3RhcnQsIGVuZCk7CiAgICB9CiAgICAvLyBUT0RPKGxybik6IENvbnNpZGVyIHBhc3NpbmcgbGltaXQgdG8gX2NyZWF0ZUZyb21Db2RlUG9pbnRzLCBiZWNhdXNlCiAgICAvLyB0aGUgZnVuY3Rpb24gaXMgY3VycmVudGx5IGZ1bGx5IGdlbmVyaWMgYW5kIGRvZXNuJ3Qga25vdyB0aGF0IGl0cwogICAgLy8gY2hhckNvZGVzIGFyZSBub3QgYWxsIExhdGluLTEgb3IgVXRmLTE2LgogICAgcmV0dXJuIF9jcmVhdGVGcm9tQ29kZVBvaW50cyhjaGFyQ29kZXMsIHN0YXJ0LCBlbmQpOwogIH0KCiAgc3RhdGljIGludCBfc2NhbkNvZGVVbml0cyhMaXN0PGludD4gY2hhckNvZGVzLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGludCBiaXRzID0gMDsKICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgIGludCBjb2RlID0gY2hhckNvZGVzW2ldOwogICAgICBpZiAoY29kZSBpcyEgX1NtaSkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoY2hhckNvZGVzKTsKICAgICAgYml0cyB8PSBjb2RlOwogICAgfQogICAgcmV0dXJuIGJpdHM7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9jcmVhdGVTdHJpbmdGcm9tSXRlcmFibGUoCiAgICAgIEl0ZXJhYmxlPGludD4gY2hhckNvZGVzLCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIC8vIFRyZWF0IGNoYXJDb2RlcyBhcyBJdGVyYWJsZS4KICAgIGlmIChjaGFyQ29kZXMgaXMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGUpIHsKICAgICAgaW50IGxlbmd0aCA9IGNoYXJDb2Rlcy5sZW5ndGg7CiAgICAgIGVuZCA9IFJhbmdlRXJyb3IuY2hlY2tWYWxpZFJhbmdlKHN0YXJ0LCBlbmQsIGxlbmd0aCk7CiAgICAgIGZpbmFsIGNoYXJDb2RlTGlzdCA9CiAgICAgICAgICBuZXcgTGlzdDxpbnQ+LmZyb20oY2hhckNvZGVzLnRha2UoZW5kKS5za2lwKHN0YXJ0KSwgZ3Jvd2FibGU6IGZhbHNlKTsKICAgICAgcmV0dXJuIGNyZWF0ZUZyb21DaGFyQ29kZXMoY2hhckNvZGVMaXN0LCAwLCBjaGFyQ29kZUxpc3QubGVuZ3RoLCBudWxsKTsKICAgIH0KICAgIC8vIERvbid0IGtub3cgbGVuZ3RoIG9mIGl0ZXJhYmxlLCBzbyBpdGVyYXRlIGFuZCBzZWUgaWYgYWxsIHRoZSB2YWx1ZXMKICAgIC8vIGFyZSB0aGVyZS4KICAgIGlmIChzdGFydCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHN0YXJ0LCAwLCBjaGFyQ29kZXMubGVuZ3RoKTsKICAgIHZhciBpdCA9IGNoYXJDb2Rlcy5pdGVyYXRvcjsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc3RhcnQ7IGkrKykgewogICAgICBpZiAoIWl0Lm1vdmVOZXh0KCkpIHsKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgaSk7CiAgICAgIH0KICAgIH0KICAgIExpc3Q8aW50PiBjaGFyQ29kZUxpc3Q7CiAgICBpbnQgYml0cyA9IDA7IC8vIEJpdHdpc2Utb3Igb2YgYWxsIGNoYXIgY29kZXMgaW4gbGlzdC4KICAgIGlmIChlbmQgPT0gbnVsbCkgewogICAgICB2YXIgbGlzdCA9IDxpbnQ+W107CiAgICAgIHdoaWxlIChpdC5tb3ZlTmV4dCgpKSB7CiAgICAgICAgaW50IGNvZGUgPSBpdC5jdXJyZW50OwogICAgICAgIGJpdHMgfD0gY29kZTsKICAgICAgICBsaXN0LmFkZChjb2RlKTsKICAgICAgfQogICAgICBjaGFyQ29kZUxpc3QgPSBtYWtlTGlzdEZpeGVkTGVuZ3RoPGludD4obGlzdCk7CiAgICB9IGVsc2UgewogICAgICBpZiAoZW5kIDwgc3RhcnQpIHsKICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShlbmQsIHN0YXJ0LCBjaGFyQ29kZXMubGVuZ3RoKTsKICAgICAgfQogICAgICBpbnQgbGVuID0gZW5kIC0gc3RhcnQ7CiAgICAgIGNoYXJDb2RlTGlzdCA9IG5ldyBMaXN0PGludD4obGVuKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgIGlmICghaXQubW92ZU5leHQoKSkgewogICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2UoZW5kLCBzdGFydCwgc3RhcnQgKyBpKTsKICAgICAgICB9CiAgICAgICAgaW50IGNvZGUgPSBpdC5jdXJyZW50OwogICAgICAgIGJpdHMgfD0gY29kZTsKICAgICAgICBjaGFyQ29kZUxpc3RbaV0gPSBjb2RlOwogICAgICB9CiAgICB9CiAgICBpbnQgbGVuZ3RoID0gY2hhckNvZGVMaXN0Lmxlbmd0aDsKICAgIGlmIChiaXRzIDwgMCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihjaGFyQ29kZXMpOwogICAgfQogICAgYm9vbCBpc09uZUJ5dGVTdHJpbmcgPSAoYml0cyA8PSBfbWF4TGF0aW4xKTsKICAgIGlmIChpc09uZUJ5dGVTdHJpbmcpIHsKICAgICAgcmV0dXJuIF9jcmVhdGVPbmVCeXRlU3RyaW5nKGNoYXJDb2RlTGlzdCwgMCwgbGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiBjcmVhdGVGcm9tQ2hhckNvZGVzKGNoYXJDb2RlTGlzdCwgMCwgbGVuZ3RoLCBiaXRzKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgX2NyZWF0ZU9uZUJ5dGVTdHJpbmcoTGlzdDxpbnQ+IGNoYXJDb2RlcywgaW50IHN0YXJ0LCBpbnQgbGVuKSB7CiAgICAvLyBJdCdzIGFsd2F5cyBmYXN0ZXIgdG8gZG8gdGhpcyBpbiBEYXJ0IHRoYW4gdG8gY2FsbCBpbnRvIHRoZSBydW50aW1lLgogICAgdmFyIHMgPSBfT25lQnl0ZVN0cmluZy5fYWxsb2NhdGUobGVuKTsKCiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIF9VaW50OEFycmF5Vmlldy4KICAgIGlmIChjaGFyQ29kZXMgaXMgVWludDhMaXN0KSB7CiAgICAgIGlmIChzdGFydCA+PSAwICYmIGxlbiA+PSAwKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgICAgcy5fc2V0QXQoaSwgY2hhckNvZGVzW3N0YXJ0ICsgaV0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gczsKICAgICAgfQogICAgfQoKICAgIC8vIEZhbGwgdGhyb3VnaCB0byBub3JtYWwgY2FzZS4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgcy5fc2V0QXQoaSwgY2hhckNvZGVzW3N0YXJ0ICsgaV0pOwogICAgfQogICAgcmV0dXJuIHM7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9jcmVhdGVGcm9tQ29kZVBvaW50cyhMaXN0PGludD4gY29kZVBvaW50cywgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgICBuYXRpdmUgIlN0cmluZ0Jhc2VfY3JlYXRlRnJvbUNvZGVQb2ludHMiOwoKICBTdHJpbmcgb3BlcmF0b3IgW10oaW50IGluZGV4KSBuYXRpdmUgIlN0cmluZ19jaGFyQXQiOwoKICBpbnQgY29kZVVuaXRBdChpbnQgaW5kZXgpOyAvLyBJbXBsZW1lbnRlZCBpbiB0aGUgc3ViY2xhc3Nlcy4KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIEBwcmFnbWEoInZtOnByZWZlci1pbmxpbmUiKQogIGludCBnZXQgbGVuZ3RoIG5hdGl2ZSAiU3RyaW5nX2dldExlbmd0aCI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIGdldCBpc0VtcHR5IHsKICAgIHJldHVybiB0aGlzLmxlbmd0aCA9PSAwOwogIH0KCiAgYm9vbCBnZXQgaXNOb3RFbXB0eSA9PiAhaXNFbXB0eTsKCiAgU3RyaW5nIG9wZXJhdG9yICsoU3RyaW5nIG90aGVyKSBuYXRpdmUgIlN0cmluZ19jb25jYXQiOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gdGhpczsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgaWYgKGlkZW50aWNhbCh0aGlzLCBvdGhlcikpIHsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAob3RoZXIgaXMgU3RyaW5nICYmIHRoaXMubGVuZ3RoID09IG90aGVyLmxlbmd0aCkgewogICAgICBmaW5hbCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgIGlmICh0aGlzLmNvZGVVbml0QXQoaSkgIT0gb3RoZXIuY29kZVVuaXRBdChpKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgogIGludCBjb21wYXJlVG8oU3RyaW5nIG90aGVyKSB7CiAgICBpbnQgdGhpc0xlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgaW50IG90aGVyTGVuZ3RoID0gb3RoZXIubGVuZ3RoOwogICAgaW50IGxlbiA9ICh0aGlzTGVuZ3RoIDwgb3RoZXJMZW5ndGgpID8gdGhpc0xlbmd0aCA6IG90aGVyTGVuZ3RoOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBpbnQgdGhpc0NvZGVVbml0ID0gdGhpcy5jb2RlVW5pdEF0KGkpOwogICAgICBpbnQgb3RoZXJDb2RlVW5pdCA9IG90aGVyLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmICh0aGlzQ29kZVVuaXQgPCBvdGhlckNvZGVVbml0KSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgICB9CiAgICAgIGlmICh0aGlzQ29kZVVuaXQgPiBvdGhlckNvZGVVbml0KSB7CiAgICAgICAgcmV0dXJuIDE7CiAgICAgIH0KICAgIH0KICAgIGlmICh0aGlzTGVuZ3RoIDwgb3RoZXJMZW5ndGgpIHJldHVybiAtMTsKICAgIGlmICh0aGlzTGVuZ3RoID4gb3RoZXJMZW5ndGgpIHJldHVybiAxOwogICAgcmV0dXJuIDA7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBfc3Vic3RyaW5nTWF0Y2hlcyhpbnQgc3RhcnQsIFN0cmluZyBvdGhlcikgewogICAgaWYgKG90aGVyLmlzRW1wdHkpIHJldHVybiB0cnVlOwogICAgZmluYWwgbGVuID0gb3RoZXIubGVuZ3RoOwogICAgaWYgKChzdGFydCA8IDApIHx8IChzdGFydCArIGxlbiA+IHRoaXMubGVuZ3RoKSkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgIGlmICh0aGlzLmNvZGVVbml0QXQoaSArIHN0YXJ0KSAhPSBvdGhlci5jb2RlVW5pdEF0KGkpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGJvb2wgZW5kc1dpdGgoU3RyaW5nIG90aGVyKSB7CiAgICByZXR1cm4gX3N1YnN0cmluZ01hdGNoZXModGhpcy5sZW5ndGggLSBvdGhlci5sZW5ndGgsIG90aGVyKTsKICB9CgogIGJvb2wgc3RhcnRzV2l0aChQYXR0ZXJuIHBhdHRlcm4sIFtpbnQgaW5kZXggPSAwXSkgewogICAgaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+IHRoaXMubGVuZ3RoKSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShpbmRleCwgMCwgdGhpcy5sZW5ndGgpOwogICAgfQogICAgaWYgKHBhdHRlcm4gaXMgU3RyaW5nKSB7CiAgICAgIHJldHVybiBfc3Vic3RyaW5nTWF0Y2hlcyhpbmRleCwgcGF0dGVybik7CiAgICB9CiAgICByZXR1cm4gcGF0dGVybi5tYXRjaEFzUHJlZml4KHRoaXMsIGluZGV4KSAhPSBudWxsOwogIH0KCiAgaW50IGluZGV4T2YoUGF0dGVybiBwYXR0ZXJuLCBbaW50IHN0YXJ0ID0gMF0pIHsKICAgIGlmICgoc3RhcnQgPCAwKSB8fCAoc3RhcnQgPiB0aGlzLmxlbmd0aCkpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2Uoc3RhcnQsIDAsIHRoaXMubGVuZ3RoLCAic3RhcnQiKTsKICAgIH0KICAgIGlmIChwYXR0ZXJuIGlzIFN0cmluZykgewogICAgICBTdHJpbmcgb3RoZXIgPSBwYXR0ZXJuOwogICAgICBpbnQgbWF4SW5kZXggPSB0aGlzLmxlbmd0aCAtIG90aGVyLmxlbmd0aDsKICAgICAgLy8gVE9ETzogVXNlIGFuIGVmZmljaWVudCBzdHJpbmcgc2VhcmNoIChlLmcuIEJNSCkuCiAgICAgIGZvciAoaW50IGluZGV4ID0gc3RhcnQ7IGluZGV4IDw9IG1heEluZGV4OyBpbmRleCsrKSB7CiAgICAgICAgaWYgKF9zdWJzdHJpbmdNYXRjaGVzKGluZGV4LCBvdGhlcikpIHsKICAgICAgICAgIHJldHVybiBpbmRleDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDw9IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgLy8gVE9ETygxMTI3Nik7IFRoaXMgaGFzIHF1YWRyYXRpYyBiZWhhdmlvciBiZWNhdXNlIG1hdGNoQXNQcmVmaXggdHJpZXMKICAgICAgLy8gdG8gZmluZCBhIGxhdGVyIG1hdGNoIHRvby4gT3B0aW1pemUgbWF0Y2hBc1ByZWZpeCB0byBhdm9pZCB0aGlzLgogICAgICBpZiAocGF0dGVybi5tYXRjaEFzUHJlZml4KHRoaXMsIGkpICE9IG51bGwpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgaW50IGxhc3RJbmRleE9mKFBhdHRlcm4gcGF0dGVybiwgW2ludCBzdGFydCA9IG51bGxdKSB7CiAgICBpZiAoc3RhcnQgPT0gbnVsbCkgewogICAgICBzdGFydCA9IHRoaXMubGVuZ3RoOwogICAgfSBlbHNlIGlmIChzdGFydCA8IDAgfHwgc3RhcnQgPiB0aGlzLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgdGhpcy5sZW5ndGgpOwogICAgfQogICAgaWYgKHBhdHRlcm4gaXMgU3RyaW5nKSB7CiAgICAgIFN0cmluZyBvdGhlciA9IHBhdHRlcm47CiAgICAgIGludCBtYXhJbmRleCA9IHRoaXMubGVuZ3RoIC0gb3RoZXIubGVuZ3RoOwogICAgICBpZiAobWF4SW5kZXggPCBzdGFydCkgc3RhcnQgPSBtYXhJbmRleDsKICAgICAgZm9yIChpbnQgaW5kZXggPSBzdGFydDsgaW5kZXggPj0gMDsgaW5kZXgtLSkgewogICAgICAgIGlmIChfc3Vic3RyaW5nTWF0Y2hlcyhpbmRleCwgb3RoZXIpKSB7CiAgICAgICAgICByZXR1cm4gaW5kZXg7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA+PSAwOyBpLS0pIHsKICAgICAgLy8gVE9ETygxMTI3Nik7IFRoaXMgaGFzIHF1YWRyYXRpYyBiZWhhdmlvciBiZWNhdXNlIG1hdGNoQXNQcmVmaXggdHJpZXMKICAgICAgLy8gdG8gZmluZCBhIGxhdGVyIG1hdGNoIHRvby4gT3B0aW1pemUgbWF0Y2hBc1ByZWZpeCB0byBhdm9pZCB0aGlzLgogICAgICBpZiAocGF0dGVybi5tYXRjaEFzUHJlZml4KHRoaXMsIGkpICE9IG51bGwpIHJldHVybiBpOwogICAgfQogICAgcmV0dXJuIC0xOwogIH0KCiAgU3RyaW5nIHN1YnN0cmluZyhpbnQgc3RhcnRJbmRleCwgW2ludCBlbmRJbmRleF0pIHsKICAgIGVuZEluZGV4ID8/PSB0aGlzLmxlbmd0aDsKCiAgICBpZiAoKHN0YXJ0SW5kZXggPCAwKSB8fCAoc3RhcnRJbmRleCA+IHRoaXMubGVuZ3RoKSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShzdGFydEluZGV4KTsKICAgIH0KICAgIGlmICgoZW5kSW5kZXggPCAwKSB8fCAoZW5kSW5kZXggPiB0aGlzLmxlbmd0aCkpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IudmFsdWUoZW5kSW5kZXgpOwogICAgfQogICAgaWYgKHN0YXJ0SW5kZXggPiBlbmRJbmRleCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci52YWx1ZShzdGFydEluZGV4KTsKICAgIH0KICAgIHJldHVybiBfc3Vic3RyaW5nVW5jaGVja2VkKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKICB9CgogIFN0cmluZyBfc3Vic3RyaW5nVW5jaGVja2VkKGludCBzdGFydEluZGV4LCBpbnQgZW5kSW5kZXgpIHsKICAgIGFzc2VydChlbmRJbmRleCAhPSBudWxsKTsKICAgIGFzc2VydCgoc3RhcnRJbmRleCA+PSAwKSAmJiAoc3RhcnRJbmRleCA8PSB0aGlzLmxlbmd0aCkpOwogICAgYXNzZXJ0KChlbmRJbmRleCA+PSAwKSAmJiAoZW5kSW5kZXggPD0gdGhpcy5sZW5ndGgpKTsKICAgIGFzc2VydChzdGFydEluZGV4IDw9IGVuZEluZGV4KTsKCiAgICBpZiAoc3RhcnRJbmRleCA9PSBlbmRJbmRleCkgewogICAgICByZXR1cm4gIiI7CiAgICB9CiAgICBpZiAoKHN0YXJ0SW5kZXggPT0gMCkgJiYgKGVuZEluZGV4ID09IHRoaXMubGVuZ3RoKSkgewogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIGlmICgoc3RhcnRJbmRleCArIDEpID09IGVuZEluZGV4KSB7CiAgICAgIHJldHVybiB0aGlzW3N0YXJ0SW5kZXhdOwogICAgfQogICAgcmV0dXJuIF9zdWJzdHJpbmdVbmNoZWNrZWROYXRpdmUoc3RhcnRJbmRleCwgZW5kSW5kZXgpOwogIH0KCiAgU3RyaW5nIF9zdWJzdHJpbmdVbmNoZWNrZWROYXRpdmUoaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCkKICAgICAgbmF0aXZlICJTdHJpbmdCYXNlX3N1YnN0cmluZ1VuY2hlY2tlZCI7CgogIC8vIENoZWNrcyBmb3Igb25lLWJ5dGUgd2hpdGVzcGFjZXMgb25seS4KICBzdGF0aWMgYm9vbCBfaXNPbmVCeXRlV2hpdGVzcGFjZShpbnQgY29kZVVuaXQpIHsKICAgIGlmIChjb2RlVW5pdCA8PSAzMikgewogICAgICByZXR1cm4gKChjb2RlVW5pdCA9PSAzMikgfHwgLy8gU3BhY2UuCiAgICAgICAgICAoKGNvZGVVbml0IDw9IDEzKSAmJiAoY29kZVVuaXQgPj0gOSkpKTsgLy8gQ1IsIExGLCBUQUIsIGV0Yy4KICAgIH0KICAgIHJldHVybiAoY29kZVVuaXQgPT0gMHg4NSkgfHwgKGNvZGVVbml0ID09IDB4QTApOyAvLyBORUwsIE5CU1AuCiAgfQoKICAvLyBDaGFyYWN0ZXJzIHdpdGggV2hpdGVzcGFjZSBwcm9wZXJ0eSAoVW5pY29kZSA2LjMpLgogIC8vIDAwMDkuLjAwMEQgICAgOyBXaGl0ZV9TcGFjZSAjIENjICAgICAgIDxjb250cm9sLTAwMDk+Li48Y29udHJvbC0wMDBEPgogIC8vIDAwMjAgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpzICAgICAgIFNQQUNFCiAgLy8gMDA4NSAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgQ2MgICAgICAgPGNvbnRyb2wtMDA4NT4KICAvLyAwMEEwICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBacyAgICAgICBOTy1CUkVBSyBTUEFDRQogIC8vIDE2ODAgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpzICAgICAgIE9HSEFNIFNQQUNFIE1BUksKICAvLyAyMDAwLi4yMDBBICAgIDsgV2hpdGVfU3BhY2UgIyBacyAgICAgICBFTiBRVUFELi5IQUlSIFNQQUNFCiAgLy8gMjAyOCAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWmwgICAgICAgTElORSBTRVBBUkFUT1IKICAvLyAyMDI5ICAgICAgICAgIDsgV2hpdGVfU3BhY2UgIyBacCAgICAgICBQQVJBR1JBUEggU0VQQVJBVE9SCiAgLy8gMjAyRiAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnMgICAgICAgTkFSUk9XIE5PLUJSRUFLIFNQQUNFCiAgLy8gMjA1RiAgICAgICAgICA7IFdoaXRlX1NwYWNlICMgWnMgICAgICAgTUVESVVNIE1BVEhFTUFUSUNBTCBTUEFDRQogIC8vIDMwMDAgICAgICAgICAgOyBXaGl0ZV9TcGFjZSAjIFpzICAgICAgIElERU9HUkFQSElDIFNQQUNFCiAgLy8KICAvLyBCT006IDB4RkVGRgogIHN0YXRpYyBib29sIF9pc1R3b0J5dGVXaGl0ZXNwYWNlKGludCBjb2RlVW5pdCkgewogICAgaWYgKGNvZGVVbml0IDw9IDMyKSB7CiAgICAgIHJldHVybiAoY29kZVVuaXQgPT0gMzIpIHx8ICgoY29kZVVuaXQgPD0gMTMpICYmIChjb2RlVW5pdCA+PSA5KSk7CiAgICB9CiAgICBpZiAoY29kZVVuaXQgPCAweDg1KSByZXR1cm4gZmFsc2U7CiAgICBpZiAoKGNvZGVVbml0ID09IDB4ODUpIHx8IChjb2RlVW5pdCA9PSAweEEwKSkgcmV0dXJuIHRydWU7CiAgICByZXR1cm4gKGNvZGVVbml0IDw9IDB4MjAwQSkKICAgICAgICA/ICgoY29kZVVuaXQgPT0gMHgxNjgwKSB8fCAoMHgyMDAwIDw9IGNvZGVVbml0KSkKICAgICAgICA6ICgoY29kZVVuaXQgPT0gMHgyMDI4KSB8fAogICAgICAgICAgICAoY29kZVVuaXQgPT0gMHgyMDI5KSB8fAogICAgICAgICAgICAoY29kZVVuaXQgPT0gMHgyMDJGKSB8fAogICAgICAgICAgICAoY29kZVVuaXQgPT0gMHgyMDVGKSB8fAogICAgICAgICAgICAoY29kZVVuaXQgPT0gMHgzMDAwKSB8fAogICAgICAgICAgICAoY29kZVVuaXQgPT0gMHhGRUZGKSk7CiAgfQoKICBpbnQgX2ZpcnN0Tm9uV2hpdGVzcGFjZSgpIHsKICAgIGZpbmFsIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgaW50IGZpcnN0ID0gMDsKICAgIGZvciAoOyBmaXJzdCA8IGxlbjsgZmlyc3QrKykgewogICAgICBpZiAoIV9pc1doaXRlc3BhY2UodGhpcy5jb2RlVW5pdEF0KGZpcnN0KSkpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZpcnN0OwogIH0KCiAgaW50IF9sYXN0Tm9uV2hpdGVzcGFjZSgpIHsKICAgIGludCBsYXN0ID0gdGhpcy5sZW5ndGggLSAxOwogICAgZm9yICg7IGxhc3QgPj0gMDsgbGFzdC0tKSB7CiAgICAgIGlmICghX2lzV2hpdGVzcGFjZSh0aGlzLmNvZGVVbml0QXQobGFzdCkpKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBsYXN0OwogIH0KCiAgU3RyaW5nIHRyaW0oKSB7CiAgICBmaW5hbCBsZW4gPSB0aGlzLmxlbmd0aDsKICAgIGludCBmaXJzdCA9IF9maXJzdE5vbldoaXRlc3BhY2UoKTsKICAgIGlmIChsZW4gPT0gZmlyc3QpIHsKICAgICAgLy8gU3RyaW5nIGNvbnRhaW5zIG9ubHkgd2hpdGVzcGFjZXMuCiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGludCBsYXN0ID0gX2xhc3ROb25XaGl0ZXNwYWNlKCkgKyAxOwogICAgaWYgKChmaXJzdCA9PSAwKSAmJiAobGFzdCA9PSBsZW4pKSB7CiAgICAgIC8vIFJldHVybnMgdGhpcyBzdHJpbmcgc2luY2UgaXQgZG9lcyBub3QgaGF2ZSBsZWFkaW5nIG9yIHRyYWlsaW5nCiAgICAgIC8vIHdoaXRlc3BhY2VzLgogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIHJldHVybiBfc3Vic3RyaW5nVW5jaGVja2VkKGZpcnN0LCBsYXN0KTsKICB9CgogIFN0cmluZyB0cmltTGVmdCgpIHsKICAgIGZpbmFsIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgaW50IGZpcnN0ID0gMDsKICAgIGZvciAoOyBmaXJzdCA8IGxlbjsgZmlyc3QrKykgewogICAgICBpZiAoIV9pc1doaXRlc3BhY2UodGhpcy5jb2RlVW5pdEF0KGZpcnN0KSkpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKGxlbiA9PSBmaXJzdCkgewogICAgICAvLyBTdHJpbmcgY29udGFpbnMgb25seSB3aGl0ZXNwYWNlcy4KICAgICAgcmV0dXJuICIiOwogICAgfQogICAgaWYgKGZpcnN0ID09IDApIHsKICAgICAgLy8gUmV0dXJucyB0aGlzIHN0cmluZyBzaW5jZSBpdCBkb2VzIG5vdCBoYXZlIGxlYWRpbmcgb3IgdHJhaWxpbmcKICAgICAgLy8gd2hpdGVzcGFjZXMuCiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgcmV0dXJuIF9zdWJzdHJpbmdVbmNoZWNrZWQoZmlyc3QsIGxlbik7CiAgfQoKICBTdHJpbmcgdHJpbVJpZ2h0KCkgewogICAgZmluYWwgbGVuID0gdGhpcy5sZW5ndGg7CiAgICBpbnQgbGFzdCA9IGxlbiAtIDE7CiAgICBmb3IgKDsgbGFzdCA+PSAwOyBsYXN0LS0pIHsKICAgICAgaWYgKCFfaXNXaGl0ZXNwYWNlKHRoaXMuY29kZVVuaXRBdChsYXN0KSkpIHsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKGxhc3QgPT0gLTEpIHsKICAgICAgLy8gU3RyaW5nIGNvbnRhaW5zIG9ubHkgd2hpdGVzcGFjZXMuCiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGlmIChsYXN0ID09IChsZW4gLSAxKSkgewogICAgICAvLyBSZXR1cm5zIHRoaXMgc3RyaW5nIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgdHJhaWxpbmcgd2hpdGVzcGFjZXMuCiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgcmV0dXJuIF9zdWJzdHJpbmdVbmNoZWNrZWQoMCwgbGFzdCArIDEpOwogIH0KCiAgU3RyaW5nIG9wZXJhdG9yICooaW50IHRpbWVzKSB7CiAgICBpZiAodGltZXMgPD0gMCkgcmV0dXJuICIiOwogICAgaWYgKHRpbWVzID09IDEpIHJldHVybiB0aGlzOwogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIodGhpcyk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8IHRpbWVzOyBpKyspIHsKICAgICAgYnVmZmVyLndyaXRlKHRoaXMpOwogICAgfQogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgU3RyaW5nIHBhZExlZnQoaW50IHdpZHRoLCBbU3RyaW5nIHBhZGRpbmcgPSAnICddKSB7CiAgICBpbnQgZGVsdGEgPSB3aWR0aCAtIHRoaXMubGVuZ3RoOwogICAgaWYgKGRlbHRhIDw9IDApIHJldHVybiB0aGlzOwogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVsdGE7IGkrKykgewogICAgICBidWZmZXIud3JpdGUocGFkZGluZyk7CiAgICB9CiAgICBidWZmZXIud3JpdGUodGhpcyk7CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBTdHJpbmcgcGFkUmlnaHQoaW50IHdpZHRoLCBbU3RyaW5nIHBhZGRpbmcgPSAnICddKSB7CiAgICBpbnQgZGVsdGEgPSB3aWR0aCAtIHRoaXMubGVuZ3RoOwogICAgaWYgKGRlbHRhIDw9IDApIHJldHVybiB0aGlzOwogICAgU3RyaW5nQnVmZmVyIGJ1ZmZlciA9IG5ldyBTdHJpbmdCdWZmZXIodGhpcyk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGRlbHRhOyBpKyspIHsKICAgICAgYnVmZmVyLndyaXRlKHBhZGRpbmcpOwogICAgfQogICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygpOwogIH0KCiAgYm9vbCBjb250YWlucyhQYXR0ZXJuIHBhdHRlcm4sIFtpbnQgc3RhcnRJbmRleCA9IDBdKSB7CiAgICBpZiAocGF0dGVybiBpcyBTdHJpbmcpIHsKICAgICAgaWYgKHN0YXJ0SW5kZXggPCAwIHx8IHN0YXJ0SW5kZXggPiB0aGlzLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnJhbmdlKHN0YXJ0SW5kZXgsIDAsIHRoaXMubGVuZ3RoKTsKICAgICAgfQogICAgICByZXR1cm4gaW5kZXhPZihwYXR0ZXJuLCBzdGFydEluZGV4KSA+PSAwOwogICAgfQogICAgcmV0dXJuIHBhdHRlcm4uYWxsTWF0Y2hlcyh0aGlzLnN1YnN0cmluZyhzdGFydEluZGV4KSkuaXNOb3RFbXB0eTsKICB9CgogIFN0cmluZyByZXBsYWNlRmlyc3QoUGF0dGVybiBwYXR0ZXJuLCBTdHJpbmcgcmVwbGFjZW1lbnQsCiAgICAgIFtpbnQgc3RhcnRJbmRleCA9IDBdKSB7CiAgICBpZiAocGF0dGVybiBpcyEgUGF0dGVybikgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiJHtwYXR0ZXJufSBpcyBub3QgYSBQYXR0ZXJuIik7CiAgICB9CiAgICBpZiAocmVwbGFjZW1lbnQgaXMhIFN0cmluZykgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiJHtyZXBsYWNlbWVudH0gaXMgbm90IGEgU3RyaW5nIik7CiAgICB9CiAgICBpZiAoc3RhcnRJbmRleCBpcyEgaW50KSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCIke3N0YXJ0SW5kZXh9IGlzIG5vdCBhbiBpbnQiKTsKICAgIH0KICAgIFJhbmdlRXJyb3IuY2hlY2tWYWx1ZUluSW50ZXJ2YWwoc3RhcnRJbmRleCwgMCwgdGhpcy5sZW5ndGgsICJzdGFydEluZGV4Iik7CiAgICBJdGVyYXRvciBpdGVyYXRvciA9IHN0YXJ0SW5kZXggPT0gMAogICAgICAgID8gcGF0dGVybi5hbGxNYXRjaGVzKHRoaXMpLml0ZXJhdG9yCiAgICAgICAgOiBwYXR0ZXJuLmFsbE1hdGNoZXModGhpcywgc3RhcnRJbmRleCkuaXRlcmF0b3I7CiAgICBpZiAoIWl0ZXJhdG9yLm1vdmVOZXh0KCkpIHJldHVybiB0aGlzOwogICAgTWF0Y2ggbWF0Y2ggPSBpdGVyYXRvci5jdXJyZW50OwogICAgcmV0dXJuIHJlcGxhY2VSYW5nZShtYXRjaC5zdGFydCwgbWF0Y2guZW5kLCByZXBsYWNlbWVudCk7CiAgfQoKICBTdHJpbmcgcmVwbGFjZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgU3RyaW5nIHJlcGxhY2VtZW50KSB7CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBlbmQgPSBSYW5nZUVycm9yLmNoZWNrVmFsaWRSYW5nZShzdGFydCwgZW5kLCBsZW5ndGgpOwogICAgYm9vbCByZXBsYWNlbWVudElzT25lQnl0ZSA9IHJlcGxhY2VtZW50Ll9pc09uZUJ5dGU7CiAgICBpZiAoc3RhcnQgPT0gMCAmJiBlbmQgPT0gbGVuZ3RoKSByZXR1cm4gcmVwbGFjZW1lbnQ7CiAgICBpbnQgcmVwbGFjZW1lbnRMZW5ndGggPSByZXBsYWNlbWVudC5sZW5ndGg7CiAgICBpbnQgdG90YWxMZW5ndGggPSBzdGFydCArIChsZW5ndGggLSBlbmQpICsgcmVwbGFjZW1lbnRMZW5ndGg7CiAgICBpZiAocmVwbGFjZW1lbnRJc09uZUJ5dGUgJiYgdGhpcy5faXNPbmVCeXRlKSB7CiAgICAgIHZhciByZXN1bHQgPSBfT25lQnl0ZVN0cmluZy5fYWxsb2NhdGUodG90YWxMZW5ndGgpOwogICAgICBpbnQgaW5kZXggPSAwOwogICAgICBpbmRleCA9IHJlc3VsdC5fc2V0UmFuZ2UoaW5kZXgsIHRoaXMsIDAsIHN0YXJ0KTsKICAgICAgaW5kZXggPSByZXN1bHQuX3NldFJhbmdlKHN0YXJ0LCByZXBsYWNlbWVudCwgMCwgcmVwbGFjZW1lbnRMZW5ndGgpOwogICAgICByZXN1bHQuX3NldFJhbmdlKGluZGV4LCB0aGlzLCBlbmQsIGxlbmd0aCk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBMaXN0IHNsaWNlcyA9IFtdOwogICAgX2FkZFJlcGxhY2VTbGljZShzbGljZXMsIDAsIHN0YXJ0KTsKICAgIGlmIChyZXBsYWNlbWVudC5sZW5ndGggPiAwKSBzbGljZXMuYWRkKHJlcGxhY2VtZW50KTsKICAgIF9hZGRSZXBsYWNlU2xpY2Uoc2xpY2VzLCBlbmQsIGxlbmd0aCk7CiAgICByZXR1cm4gX2pvaW5SZXBsYWNlQWxsUmVzdWx0KAogICAgICAgIHRoaXMsIHNsaWNlcywgdG90YWxMZW5ndGgsIHJlcGxhY2VtZW50SXNPbmVCeXRlKTsKICB9CgogIHN0YXRpYyBpbnQgX2FkZFJlcGxhY2VTbGljZShMaXN0IG1hdGNoZXMsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0YXJ0OwogICAgaWYgKGxlbmd0aCA+IDApIHsKICAgICAgaWYgKGxlbmd0aCA8PSBfbWF4TGVuZ3RoVmFsdWUgJiYgc3RhcnQgPD0gX21heFN0YXJ0VmFsdWUpIHsKICAgICAgICBtYXRjaGVzLmFkZCgtKChzdGFydCA8PCBfbGVuZ3RoQml0cykgfCBsZW5ndGgpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBtYXRjaGVzLmFkZChzdGFydCk7CiAgICAgICAgbWF0Y2hlcy5hZGQoZW5kKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGxlbmd0aDsKICB9CgogIFN0cmluZyByZXBsYWNlQWxsKFBhdHRlcm4gcGF0dGVybiwgU3RyaW5nIHJlcGxhY2VtZW50KSB7CiAgICBpZiAocGF0dGVybiA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJwYXR0ZXJuIik7CiAgICBpZiAocmVwbGFjZW1lbnQgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgicmVwbGFjZW1lbnQiKTsKCiAgICBpbnQgc3RhcnRJbmRleCA9IDA7CiAgICAvLyBTdHJpbmcgZnJhZ21lbnRzIHRoYXQgcmVwbGFjZSB0aGUgdGhlIHByZWZpeCBbdGhpc10gdXAgdG8gW3N0YXJ0SW5kZXhdLgogICAgTGlzdCBtYXRjaGVzID0gW107CiAgICBpbnQgbGVuZ3RoID0gMDsgLy8gTGVuZ3RoIG9mIGFsbCBmcmFnbWVudHMuCiAgICBpbnQgcmVwbGFjZW1lbnRMZW5ndGggPSByZXBsYWNlbWVudC5sZW5ndGg7CgogICAgaWYgKHJlcGxhY2VtZW50TGVuZ3RoID09IDApIHsKICAgICAgZm9yIChNYXRjaCBtYXRjaCBpbiBwYXR0ZXJuLmFsbE1hdGNoZXModGhpcykpIHsKICAgICAgICBsZW5ndGggKz0gX2FkZFJlcGxhY2VTbGljZShtYXRjaGVzLCBzdGFydEluZGV4LCBtYXRjaC5zdGFydCk7CiAgICAgICAgc3RhcnRJbmRleCA9IG1hdGNoLmVuZDsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChNYXRjaCBtYXRjaCBpbiBwYXR0ZXJuLmFsbE1hdGNoZXModGhpcykpIHsKICAgICAgICBsZW5ndGggKz0gX2FkZFJlcGxhY2VTbGljZShtYXRjaGVzLCBzdGFydEluZGV4LCBtYXRjaC5zdGFydCk7CiAgICAgICAgbWF0Y2hlcy5hZGQocmVwbGFjZW1lbnQpOwogICAgICAgIGxlbmd0aCArPSByZXBsYWNlbWVudExlbmd0aDsKICAgICAgICBzdGFydEluZGV4ID0gbWF0Y2guZW5kOwogICAgICB9CiAgICB9CiAgICAvLyBObyBtYXRjaCwgb3IgYSB6ZXJvLWxlbmd0aCBtYXRjaCBhdCBzdGFydCB3aXRoIHplcm8tbGVuZ3RoIHJlcGxhY2VtZW50LgogICAgaWYgKHN0YXJ0SW5kZXggPT0gMCAmJiBsZW5ndGggPT0gMCkgcmV0dXJuIHRoaXM7CiAgICBsZW5ndGggKz0gX2FkZFJlcGxhY2VTbGljZShtYXRjaGVzLCBzdGFydEluZGV4LCB0aGlzLmxlbmd0aCk7CiAgICBib29sIHJlcGxhY2VtZW50SXNPbmVCeXRlID0gcmVwbGFjZW1lbnQuX2lzT25lQnl0ZTsKICAgIGlmIChyZXBsYWNlbWVudElzT25lQnl0ZSAmJgogICAgICAgIGxlbmd0aCA8IF9tYXhKb2luUmVwbGFjZU9uZUJ5dGVTdHJpbmdMZW5ndGggJiYKICAgICAgICB0aGlzLl9pc09uZUJ5dGUpIHsKICAgICAgLy8gVE9ETyhscm4pOiBJcyB0aGVyZSBhIGN1dC1vZmYgcG9pbnQsIG9yIGlzIHJ1bnRpbWUgYWx3YXlzIGZhc3Rlcj8KICAgICAgcmV0dXJuIF9qb2luUmVwbGFjZUFsbE9uZUJ5dGVSZXN1bHQodGhpcywgbWF0Y2hlcywgbGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiBfam9pblJlcGxhY2VBbGxSZXN1bHQodGhpcywgbWF0Y2hlcywgbGVuZ3RoLCByZXBsYWNlbWVudElzT25lQnl0ZSk7CiAgfQoKICAvKioKICAgKiBBcyBbX2pvaW5SZXBsYWNlQWxsUmVzdWx0XSwgYnV0IGtub3dpbmcgdGhhdCB0aGUgcmVzdWx0CiAgICogaXMgYWx3YXlzIGEgW19PbmVCeXRlU3RyaW5nXS4KICAgKi8KICBzdGF0aWMgU3RyaW5nIF9qb2luUmVwbGFjZUFsbE9uZUJ5dGVSZXN1bHQoCiAgICAgIFN0cmluZyBiYXNlLCBMaXN0IG1hdGNoZXMsIGludCBsZW5ndGgpIHsKICAgIF9PbmVCeXRlU3RyaW5nIHJlc3VsdCA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZShsZW5ndGgpOwogICAgaW50IHdyaXRlSW5kZXggPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXRjaGVzLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBlbnRyeSA9IG1hdGNoZXNbaV07CiAgICAgIGlmIChlbnRyeSBpcyBfU21pKSB7CiAgICAgICAgaW50IHNsaWNlU3RhcnQgPSBlbnRyeTsKICAgICAgICBpbnQgc2xpY2VFbmQ7CiAgICAgICAgaWYgKHNsaWNlU3RhcnQgPCAwKSB7CiAgICAgICAgICBpbnQgYml0cyA9IC1zbGljZVN0YXJ0OwogICAgICAgICAgaW50IHNsaWNlTGVuZ3RoID0gYml0cyAmIF9sZW5ndGhNYXNrOwogICAgICAgICAgc2xpY2VTdGFydCA9IGJpdHMgPj4gX2xlbmd0aEJpdHM7CiAgICAgICAgICBzbGljZUVuZCA9IHNsaWNlU3RhcnQgKyBzbGljZUxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaSsrOwogICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgd2l0aCB2YWxpZCBtYXRjaGVzIGxpc3RzLgogICAgICAgICAgLy8gSWYgdGhlIGxpc3QgaXMgc2hvcnQsIG9yIHNsaWNlRW5kIGlzIG5vdCBhbiBpbnRlZ2VyLCBvbmUgb2YKICAgICAgICAgIC8vIHRoZSBuZXh0IGZldyBsaW5lcyB3aWxsIHRocm93IGFueXdheS4KICAgICAgICAgIGFzc2VydChpIDwgbWF0Y2hlcy5sZW5ndGgpOwogICAgICAgICAgc2xpY2VFbmQgPSBtYXRjaGVzW2ldOwogICAgICAgIH0KICAgICAgICBmb3IgKGludCBqID0gc2xpY2VTdGFydDsgaiA8IHNsaWNlRW5kOyBqKyspIHsKICAgICAgICAgIHJlc3VsdC5fc2V0QXQod3JpdGVJbmRleCsrLCBiYXNlLmNvZGVVbml0QXQoaikpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBSZXBsYWNlbWVudCBpcyBhIG9uZS1ieXRlIHN0cmluZy4KICAgICAgICBTdHJpbmcgcmVwbGFjZW1lbnQgPSBlbnRyeTsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHJlcGxhY2VtZW50Lmxlbmd0aDsgaisrKSB7CiAgICAgICAgICByZXN1bHQuX3NldEF0KHdyaXRlSW5kZXgrKywgcmVwbGFjZW1lbnQuY29kZVVuaXRBdChqKSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhc3NlcnQod3JpdGVJbmRleCA9PSBsZW5ndGgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8qKgogICAqIENvbWJpbmUgdGhlIHJlc3VsdHMgb2YgYSBbcmVwbGFjZUFsbF0gbWF0Y2ggaW50byBhIG5ldyBzdHJpbmcuCiAgICoKICAgKiBUaGUgW21hdGNoZXNdIGxpc3RzIGNvbnRhaW5zIFNtaSBpbmRleCBwYWlycyByZXByZXNlbnRpbmcgc2xpY2VzIG9mCiAgICogW2Jhc2VdIGFuZCBbU3RyaW5nXXMgdG8gYmUgcHV0IGluIGJldHdlZW4gdGhlIHNsaWNlcy4KICAgKgogICAqIFRoZSB0b3RhbCBbbGVuZ3RoXSBvZiB0aGUgcmVzdWx0aW5nIHN0cmluZyBpcyBrbm93biwgYXMgaXMKICAgKiB3aGV0aGVyIHRoZSByZXBsYWNlbWVudCBzdHJpbmdzIGFyZSBvbmUtYnl0ZSBzdHJpbmdzLgogICAqIElmIHRoZXkgYXJlLCB0aGVuIHdlIGhhdmUgdG8gY2hlY2sgdGhlIGJhc2Ugc3RyaW5nIHNsaWNlcyB0byBrbm93CiAgICogd2hldGhlciB0aGUgcmVzdWx0IG11c3QgYmUgYSBvbmUtYnl0ZSBzdHJpbmcuCiAgICovCiAgc3RhdGljIFN0cmluZwogICAgICBfam9pblJlcGxhY2VBbGxSZXN1bHQoU3RyaW5nIGJhc2UsIExpc3QgbWF0Y2hlcywgaW50IGxlbmd0aCwKICAgICAgICAgIGJvb2wgcmVwbGFjZW1lbnRTdHJpbmdzQXJlT25lQnl0ZSkKICAgICAgbmF0aXZlICJTdHJpbmdCYXNlX2pvaW5SZXBsYWNlQWxsUmVzdWx0IjsKCiAgU3RyaW5nIHJlcGxhY2VBbGxNYXBwZWQoUGF0dGVybiBwYXR0ZXJuLCBTdHJpbmcgcmVwbGFjZShNYXRjaCBtYXRjaCkpIHsKICAgIGlmIChwYXR0ZXJuID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoInBhdHRlcm4iKTsKICAgIGlmIChyZXBsYWNlID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yLm5vdE51bGwoInJlcGxhY2UiKTsKICAgIExpc3QgbWF0Y2hlcyA9IFtdOwogICAgaW50IGxlbmd0aCA9IDA7CiAgICBpbnQgc3RhcnRJbmRleCA9IDA7CiAgICBib29sIHJlcGxhY2VtZW50U3RyaW5nc0FyZU9uZUJ5dGUgPSB0cnVlOwogICAgZm9yIChNYXRjaCBtYXRjaCBpbiBwYXR0ZXJuLmFsbE1hdGNoZXModGhpcykpIHsKICAgICAgbGVuZ3RoICs9IF9hZGRSZXBsYWNlU2xpY2UobWF0Y2hlcywgc3RhcnRJbmRleCwgbWF0Y2guc3RhcnQpOwogICAgICB2YXIgcmVwbGFjZW1lbnQgPSAiJHtyZXBsYWNlKG1hdGNoKX0iOwogICAgICBtYXRjaGVzLmFkZChyZXBsYWNlbWVudCk7CiAgICAgIGxlbmd0aCArPSByZXBsYWNlbWVudC5sZW5ndGg7CiAgICAgIHJlcGxhY2VtZW50U3RyaW5nc0FyZU9uZUJ5dGUgPQogICAgICAgICAgcmVwbGFjZW1lbnRTdHJpbmdzQXJlT25lQnl0ZSAmJiByZXBsYWNlbWVudC5faXNPbmVCeXRlOwogICAgICBzdGFydEluZGV4ID0gbWF0Y2guZW5kOwogICAgfQogICAgaWYgKG1hdGNoZXMuaXNFbXB0eSkgcmV0dXJuIHRoaXM7CiAgICBsZW5ndGggKz0gX2FkZFJlcGxhY2VTbGljZShtYXRjaGVzLCBzdGFydEluZGV4LCB0aGlzLmxlbmd0aCk7CiAgICBpZiAocmVwbGFjZW1lbnRTdHJpbmdzQXJlT25lQnl0ZSAmJgogICAgICAgIGxlbmd0aCA8IF9tYXhKb2luUmVwbGFjZU9uZUJ5dGVTdHJpbmdMZW5ndGggJiYKICAgICAgICB0aGlzLl9pc09uZUJ5dGUpIHsKICAgICAgcmV0dXJuIF9qb2luUmVwbGFjZUFsbE9uZUJ5dGVSZXN1bHQodGhpcywgbWF0Y2hlcywgbGVuZ3RoKTsKICAgIH0KICAgIHJldHVybiBfam9pblJlcGxhY2VBbGxSZXN1bHQoCiAgICAgICAgdGhpcywgbWF0Y2hlcywgbGVuZ3RoLCByZXBsYWNlbWVudFN0cmluZ3NBcmVPbmVCeXRlKTsKICB9CgogIFN0cmluZyByZXBsYWNlRmlyc3RNYXBwZWQoUGF0dGVybiBwYXR0ZXJuLCBTdHJpbmcgcmVwbGFjZShNYXRjaCBtYXRjaCksCiAgICAgIFtpbnQgc3RhcnRJbmRleCA9IDBdKSB7CiAgICBpZiAocGF0dGVybiA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJwYXR0ZXJuIik7CiAgICBpZiAocmVwbGFjZSA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJyZXBsYWNlIik7CiAgICBpZiAoc3RhcnRJbmRleCA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJzdGFydEluZGV4Iik7CiAgICBSYW5nZUVycm9yLmNoZWNrVmFsdWVJbkludGVydmFsKHN0YXJ0SW5kZXgsIDAsIHRoaXMubGVuZ3RoLCAic3RhcnRJbmRleCIpOwoKICAgIHZhciBtYXRjaGVzID0gcGF0dGVybi5hbGxNYXRjaGVzKHRoaXMsIHN0YXJ0SW5kZXgpLml0ZXJhdG9yOwogICAgaWYgKCFtYXRjaGVzLm1vdmVOZXh0KCkpIHJldHVybiB0aGlzOwogICAgdmFyIG1hdGNoID0gbWF0Y2hlcy5jdXJyZW50OwogICAgdmFyIHJlcGxhY2VtZW50ID0gIiR7cmVwbGFjZShtYXRjaCl9IjsKICAgIHJldHVybiByZXBsYWNlUmFuZ2UobWF0Y2guc3RhcnQsIG1hdGNoLmVuZCwgcmVwbGFjZW1lbnQpOwogIH0KCiAgc3RhdGljIFN0cmluZyBfbWF0Y2hTdHJpbmcoTWF0Y2ggbWF0Y2gpID0+IG1hdGNoWzBdOwogIHN0YXRpYyBTdHJpbmcgX3N0cmluZ0lkZW50aXR5KFN0cmluZyBzdHJpbmcpID0+IHN0cmluZzsKCiAgU3RyaW5nIF9zcGxpdE1hcEpvaW5FbXB0eVN0cmluZygKICAgICAgU3RyaW5nIG9uTWF0Y2goTWF0Y2ggbWF0Y2gpLCBTdHJpbmcgb25Ob25NYXRjaChTdHJpbmcgbm9uTWF0Y2gpKSB7CiAgICAvLyBQYXR0ZXJuIGlzIHRoZSBlbXB0eSBzdHJpbmcuCiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgaW50IGxlbmd0aCA9IHRoaXMubGVuZ3RoOwogICAgaW50IGkgPSAwOwogICAgYnVmZmVyLndyaXRlKG9uTm9uTWF0Y2goIiIpKTsKICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7CiAgICAgIGJ1ZmZlci53cml0ZShvbk1hdGNoKG5ldyBfU3RyaW5nTWF0Y2goaSwgdGhpcywgIiIpKSk7CiAgICAgIC8vIFNwZWNpYWwgY2FzZSB0byBhdm9pZCBzcGxpdHRpbmcgYSBzdXJyb2dhdGUgcGFpci4KICAgICAgaW50IGNvZGUgPSB0aGlzLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmICgoY29kZSAmIH4weDNGRikgPT0gMHhEODAwICYmIGxlbmd0aCA+IGkgKyAxKSB7CiAgICAgICAgLy8gTGVhZGluZyBzdXJyb2dhdGU7CiAgICAgICAgY29kZSA9IHRoaXMuY29kZVVuaXRBdChpICsgMSk7CiAgICAgICAgaWYgKChjb2RlICYgfjB4M0ZGKSA9PSAweERDMDApIHsKICAgICAgICAgIC8vIE1hdGNoaW5nIHRyYWlsaW5nIHN1cnJvZ2F0ZS4KICAgICAgICAgIGJ1ZmZlci53cml0ZShvbk5vbk1hdGNoKHRoaXMuc3Vic3RyaW5nKGksIGkgKyAyKSkpOwogICAgICAgICAgaSArPSAyOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGJ1ZmZlci53cml0ZShvbk5vbk1hdGNoKHRoaXNbaV0pKTsKICAgICAgaSsrOwogICAgfQogICAgYnVmZmVyLndyaXRlKG9uTWF0Y2gobmV3IF9TdHJpbmdNYXRjaChpLCB0aGlzLCAiIikpKTsKICAgIGJ1ZmZlci53cml0ZShvbk5vbk1hdGNoKCIiKSk7CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICBTdHJpbmcgc3BsaXRNYXBKb2luKFBhdHRlcm4gcGF0dGVybiwKICAgICAge1N0cmluZyBvbk1hdGNoKE1hdGNoIG1hdGNoKSwgU3RyaW5nIG9uTm9uTWF0Y2goU3RyaW5nIG5vbk1hdGNoKX0pIHsKICAgIGlmIChwYXR0ZXJuIGlzISBQYXR0ZXJuKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCIke3BhdHRlcm59IGlzIG5vdCBhIFBhdHRlcm4iKTsKICAgIH0KICAgIG9uTWF0Y2ggPz89IF9tYXRjaFN0cmluZzsKICAgIG9uTm9uTWF0Y2ggPz89IF9zdHJpbmdJZGVudGl0eTsKICAgIGlmIChwYXR0ZXJuIGlzIFN0cmluZykgewogICAgICBTdHJpbmcgc3RyaW5nUGF0dGVybiA9IHBhdHRlcm47CiAgICAgIGlmIChzdHJpbmdQYXR0ZXJuLmlzRW1wdHkpIHsKICAgICAgICByZXR1cm4gX3NwbGl0TWFwSm9pbkVtcHR5U3RyaW5nKG9uTWF0Y2gsIG9uTm9uTWF0Y2gpOwogICAgICB9CiAgICB9CiAgICBTdHJpbmdCdWZmZXIgYnVmZmVyID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgaW50IHN0YXJ0SW5kZXggPSAwOwogICAgZm9yIChNYXRjaCBtYXRjaCBpbiBwYXR0ZXJuLmFsbE1hdGNoZXModGhpcykpIHsKICAgICAgYnVmZmVyLndyaXRlKG9uTm9uTWF0Y2godGhpcy5zdWJzdHJpbmcoc3RhcnRJbmRleCwgbWF0Y2guc3RhcnQpKSk7CiAgICAgIGJ1ZmZlci53cml0ZShvbk1hdGNoKG1hdGNoKS50b1N0cmluZygpKTsKICAgICAgc3RhcnRJbmRleCA9IG1hdGNoLmVuZDsKICAgIH0KICAgIGJ1ZmZlci53cml0ZShvbk5vbk1hdGNoKHRoaXMuc3Vic3RyaW5nKHN0YXJ0SW5kZXgpKSk7CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICAvLyBDb252ZXJ0IHNpbmdsZSBvYmplY3QgdG8gc3RyaW5nLgogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIHN0YXRpYyBTdHJpbmcgX2ludGVycG9sYXRlU2luZ2xlKE9iamVjdCBvKSB7CiAgICBpZiAobyBpcyBTdHJpbmcpIHJldHVybiBvOwogICAgZmluYWwgcyA9IG8udG9TdHJpbmcoKTsKICAgIGlmIChzIGlzISBTdHJpbmcpIHsKICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iocyk7CiAgICB9CiAgICByZXR1cm4gczsKICB9CgogIC8qKgogICAqIENvbnZlcnQgYWxsIG9iamVjdHMgaW4gW3ZhbHVlc10gdG8gc3RyaW5ncyBhbmQgY29uY2F0IHRoZW0KICAgKiBpbnRvIGEgcmVzdWx0IHN0cmluZy4KICAgKiBNb2RpZmllcyB0aGUgaW5wdXQgbGlzdCBpZiBpdCBjb250YWlucyBub24tYFN0cmluZ2AgdmFsdWVzLgogICAqLwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IiwgImNhbGwiKQogIHN0YXRpYyBTdHJpbmcgX2ludGVycG9sYXRlKGZpbmFsIExpc3QgdmFsdWVzKSB7CiAgICBmaW5hbCBudW1WYWx1ZXMgPSB2YWx1ZXMubGVuZ3RoOwogICAgaW50IHRvdGFsTGVuZ3RoID0gMDsKICAgIGludCBpID0gMDsKICAgIHdoaWxlIChpIDwgbnVtVmFsdWVzKSB7CiAgICAgIGZpbmFsIGUgPSB2YWx1ZXNbaV07CiAgICAgIGZpbmFsIHMgPSBlLnRvU3RyaW5nKCk7CiAgICAgIHZhbHVlc1tpXSA9IHM7CiAgICAgIGlmIChDbGFzc0lELmdldElEKHMpID09IENsYXNzSUQuY2lkT25lQnl0ZVN0cmluZykgewogICAgICAgIHRvdGFsTGVuZ3RoICs9IHMubGVuZ3RoOwogICAgICAgIGkrKzsKICAgICAgfSBlbHNlIGlmIChzIGlzISBTdHJpbmcpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICAvLyBIYW5kbGUgcmVtYWluaW5nIGVsZW1lbnRzIHdpdGhvdXQgY2hlY2tpbmcgZm9yIG9uZS1ieXRlLW5lc3MuCiAgICAgICAgd2hpbGUgKCsraSA8IG51bVZhbHVlcykgewogICAgICAgICAgZmluYWwgZSA9IHZhbHVlc1tpXTsKICAgICAgICAgIGZpbmFsIHMgPSBlLnRvU3RyaW5nKCk7CiAgICAgICAgICB2YWx1ZXNbaV0gPSBzOwogICAgICAgICAgaWYgKHMgaXMhIFN0cmluZykgewogICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcihzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9jb25jYXRSYW5nZU5hdGl2ZSh2YWx1ZXMsIDAsIG51bVZhbHVlcyk7CiAgICAgIH0KICAgIH0KICAgIC8vIEFsbCBzdHJpbmdzIHdlcmUgb25lLWJ5dGUgc3RyaW5ncy4KICAgIHJldHVybiBfT25lQnl0ZVN0cmluZy5fY29uY2F0QWxsKHZhbHVlcywgdG90YWxMZW5ndGgpOwogIH0KCiAgSXRlcmFibGU8TWF0Y2g+IGFsbE1hdGNoZXMoU3RyaW5nIHN0cmluZywgW2ludCBzdGFydCA9IDBdKSB7CiAgICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID4gc3RyaW5nLmxlbmd0aCkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvci5yYW5nZShzdGFydCwgMCwgc3RyaW5nLmxlbmd0aCwgInN0YXJ0Iik7CiAgICB9CiAgICByZXR1cm4gbmV3IF9TdHJpbmdBbGxNYXRjaGVzSXRlcmFibGUoc3RyaW5nLCB0aGlzLCBzdGFydCk7CiAgfQoKICBNYXRjaCBtYXRjaEFzUHJlZml4KFN0cmluZyBzdHJpbmcsIFtpbnQgc3RhcnQgPSAwXSkgewogICAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+IHN0cmluZy5sZW5ndGgpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IucmFuZ2Uoc3RhcnQsIDAsIHN0cmluZy5sZW5ndGgpOwogICAgfQogICAgaWYgKHN0YXJ0ICsgdGhpcy5sZW5ndGggPiBzdHJpbmcubGVuZ3RoKSByZXR1cm4gbnVsbDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAoc3RyaW5nLmNvZGVVbml0QXQoc3RhcnQgKyBpKSAhPSB0aGlzLmNvZGVVbml0QXQoaSkpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG5ldyBfU3RyaW5nTWF0Y2goc3RhcnQsIHN0cmluZywgdGhpcyk7CiAgfQoKICBMaXN0PFN0cmluZz4gc3BsaXQoUGF0dGVybiBwYXR0ZXJuKSB7CiAgICBpZiAoKHBhdHRlcm4gaXMgU3RyaW5nKSAmJiBwYXR0ZXJuLmlzRW1wdHkpIHsKICAgICAgTGlzdDxTdHJpbmc+IHJlc3VsdCA9IG5ldyBMaXN0PFN0cmluZz4odGhpcy5sZW5ndGgpOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHsKICAgICAgICByZXN1bHRbaV0gPSB0aGlzW2ldOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBJdGVyYXRvciBpdGVyYXRvciA9IHBhdHRlcm4uYWxsTWF0Y2hlcyh0aGlzKS5pdGVyYXRvcjsKICAgIGlmIChsZW5ndGggPT0gMCAmJiBpdGVyYXRvci5tb3ZlTmV4dCgpKSB7CiAgICAgIC8vIEEgbWF0Y2hlZCBlbXB0eSBzdHJpbmcgaW5wdXQgcmV0dXJucyB0aGUgZW1wdHkgbGlzdC4KICAgICAgcmV0dXJuIDxTdHJpbmc+W107CiAgICB9CiAgICBMaXN0PFN0cmluZz4gcmVzdWx0ID0gbmV3IExpc3Q8U3RyaW5nPigpOwogICAgaW50IHN0YXJ0SW5kZXggPSAwOwogICAgaW50IHByZXZpb3VzSW5kZXggPSAwOwogICAgLy8gJ3BhdHRlcm4nIG1heSBub3QgYmUgaW1wbGVtZW50ZWQgY29ycmVjdGx5IGFuZCB0aGVyZWZvcmUgd2UgY2Fubm90CiAgICAvLyBjYWxsIF9zdWJzdHJpbmdVbmhjaGVja2VkIHVubGVzcyBpdCBpcyBhIHRydXN0d29ydGh5IHR5cGUgKGUuZy4gU3RyaW5nKS4KICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGlmIChzdGFydEluZGV4ID09IGxlbmd0aCB8fCAhaXRlcmF0b3IubW92ZU5leHQoKSkgewogICAgICAgIHJlc3VsdC5hZGQodGhpcy5zdWJzdHJpbmcocHJldmlvdXNJbmRleCwgbGVuZ3RoKSk7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgTWF0Y2ggbWF0Y2ggPSBpdGVyYXRvci5jdXJyZW50OwogICAgICBpZiAobWF0Y2guc3RhcnQgPT0gbGVuZ3RoKSB7CiAgICAgICAgcmVzdWx0LmFkZCh0aGlzLnN1YnN0cmluZyhwcmV2aW91c0luZGV4LCBsZW5ndGgpKTsKICAgICAgICBicmVhazsKICAgICAgfQogICAgICBpbnQgZW5kSW5kZXggPSBtYXRjaC5lbmQ7CiAgICAgIGlmIChzdGFydEluZGV4ID09IGVuZEluZGV4ICYmIGVuZEluZGV4ID09IHByZXZpb3VzSW5kZXgpIHsKICAgICAgICArK3N0YXJ0SW5kZXg7IC8vIGVtcHR5IG1hdGNoLCBhZHZhbmNlIGFuZCByZXN0YXJ0CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgcmVzdWx0LmFkZCh0aGlzLnN1YnN0cmluZyhwcmV2aW91c0luZGV4LCBtYXRjaC5zdGFydCkpOwogICAgICBzdGFydEluZGV4ID0gcHJldmlvdXNJbmRleCA9IGVuZEluZGV4OwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIExpc3Q8aW50PiBnZXQgY29kZVVuaXRzID0+IG5ldyBDb2RlVW5pdHModGhpcyk7CgogIFJ1bmVzIGdldCBydW5lcyA9PiBuZXcgUnVuZXModGhpcyk7CgogIFN0cmluZyB0b1VwcGVyQ2FzZSgpIG5hdGl2ZSAiU3RyaW5nX3RvVXBwZXJDYXNlIjsKCiAgU3RyaW5nIHRvTG93ZXJDYXNlKCkgbmF0aXZlICJTdHJpbmdfdG9Mb3dlckNhc2UiOwoKICAvLyBDb25jYXRlbmF0ZSBbJ3N0YXJ0JywgJ2VuZCdbIGVsZW1lbnRzIG9mICdzdHJpbmdzJy4KICBzdGF0aWMgU3RyaW5nIF9jb25jYXRSYW5nZShMaXN0PFN0cmluZz4gc3RyaW5ncywgaW50IHN0YXJ0LCBpbnQgZW5kKSB7CiAgICBpZiAoKGVuZCAtIHN0YXJ0KSA9PSAxKSB7CiAgICAgIHJldHVybiBzdHJpbmdzW3N0YXJ0XTsKICAgIH0KICAgIHJldHVybiBfY29uY2F0UmFuZ2VOYXRpdmUoc3RyaW5ncywgc3RhcnQsIGVuZCk7CiAgfQoKICAvLyBDYWxsIHRoaXMgbWV0aG9kIGlmIGFsbCBlbGVtZW50cyBvZiBbc3RyaW5nc10gYXJlIGtub3duIHRvIGJlIHN0cmluZ3MKICAvLyBidXQgbm90IGFsbCBhcmUga25vd24gdG8gYmUgT25lQnl0ZVN0cmluZyhzKS4KICBzdGF0aWMgU3RyaW5nIF9jb25jYXRSYW5nZU5hdGl2ZShMaXN0IHN0cmluZ3MsIGludCBzdGFydCwgaW50IGVuZCkKICAgICAgbmF0aXZlICJTdHJpbmdfY29uY2F0UmFuZ2UiOwp9CgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCmNsYXNzIF9PbmVCeXRlU3RyaW5nIGV4dGVuZHMgX1N0cmluZ0Jhc2UgewogIGZhY3RvcnkgX09uZUJ5dGVTdHJpbmcuX3VuaW5zdGFudGlhYmxlKCkgeyB0aHJvdyAiVW5yZWFjaGFibGUiOyB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgZ2V0IGhhc2hDb2RlIG5hdGl2ZSAiU3RyaW5nX2dldEhhc2hDb2RlIjsKCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBjb2RlVW5pdEF0KGludCBpbmRleCkgbmF0aXZlICJTdHJpbmdfY29kZVVuaXRBdCI7CgogIGJvb2wgX2lzV2hpdGVzcGFjZShpbnQgY29kZVVuaXQpIHsKICAgIHJldHVybiBfU3RyaW5nQmFzZS5faXNPbmVCeXRlV2hpdGVzcGFjZShjb2RlVW5pdCk7CiAgfQoKICBAcHJhZ21hKCJ2bTpleGFjdC1yZXN1bHQtdHlwZSIsIGJvb2wpCiAgYm9vbCBvcGVyYXRvciA9PShPYmplY3Qgb3RoZXIpIHsKICAgIHJldHVybiBzdXBlciA9PSBvdGhlcjsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX09uZUJ5dGVTdHJpbmcpCiAgU3RyaW5nIF9zdWJzdHJpbmdVbmNoZWNrZWROYXRpdmUoaW50IHN0YXJ0SW5kZXgsIGludCBlbmRJbmRleCkKICAgICAgbmF0aXZlICJPbmVCeXRlU3RyaW5nX3N1YnN0cmluZ1VuY2hlY2tlZCI7CgogIExpc3Q8U3RyaW5nPiBfc3BsaXRXaXRoQ2hhckNvZGUoaW50IGNoYXJDb2RlKQogICAgICBuYXRpdmUgIk9uZUJ5dGVTdHJpbmdfc3BsaXRXaXRoQ2hhckNvZGUiOwoKICBMaXN0PFN0cmluZz4gc3BsaXQoUGF0dGVybiBwYXR0ZXJuKSB7CiAgICAvLyBUT0RPKHZlZ29yb3YpIGludmVzdGlnYXRlIGlmIHRoaXMgY2FuIGJlIHJld3JpdHRlbiBhcyBgaXMgX09uZUJ5dGVTdHJpbmdgCiAgICAvLyBjaGVjayB3aXRob3V0IHBlcmZvcm1hbmNlIHBlbmFsdHkuIEZyb250LWVuZCB3b3VsZCB0aGVuIHByb21vdGUKICAgIC8vIHBhdHRlcm4gdmFyaWFibGUgdG8gX09uZUJ5dGVTdHJpbmcuCiAgICBpZiAoQ2xhc3NJRC5nZXRJRChwYXR0ZXJuKSA9PSBDbGFzc0lELmNpZE9uZUJ5dGVTdHJpbmcpIHsKICAgICAgZmluYWwgU3RyaW5nIHBhdHRlcm5Bc1N0cmluZyA9IHBhdHRlcm47CiAgICAgIGlmIChwYXR0ZXJuQXNTdHJpbmcubGVuZ3RoID09IDEpIHsKICAgICAgICByZXR1cm4gX3NwbGl0V2l0aENoYXJDb2RlKHBhdHRlcm5Bc1N0cmluZy5jb2RlVW5pdEF0KDApKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHN1cGVyLnNwbGl0KHBhdHRlcm4pOwogIH0KCiAgLy8gQWxsIGVsZW1lbnQgb2YgJ3N0cmluZ3MnIG11c3QgYmUgT25lQnl0ZVN0cmluZ3MuCiAgc3RhdGljIF9jb25jYXRBbGwoTGlzdCBzdHJpbmdzLCBpbnQgdG90YWxMZW5ndGgpIHsKICAgIGlmICh0b3RhbExlbmd0aCA+IDEyOCkgewogICAgICAvLyBOYXRpdmUgaXMgcXVpY2tlci4KICAgICAgcmV0dXJuIF9TdHJpbmdCYXNlLl9jb25jYXRSYW5nZU5hdGl2ZShzdHJpbmdzLCAwLCBzdHJpbmdzLmxlbmd0aCk7CiAgICB9CiAgICBmaW5hbCByZXMgPSBfT25lQnl0ZVN0cmluZy5fYWxsb2NhdGUodG90YWxMZW5ndGgpOwogICAgZmluYWwgc3RyaW5nc0xlbmd0aCA9IHN0cmluZ3MubGVuZ3RoOwogICAgaW50IHJJeCA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0cmluZ3NMZW5ndGg7IGkrKykgewogICAgICBmaW5hbCBfT25lQnl0ZVN0cmluZyBlID0gc3RyaW5nc1tpXTsKICAgICAgZmluYWwgZUxlbmd0aCA9IGUubGVuZ3RoOwogICAgICBmb3IgKGludCBzID0gMDsgcyA8IGVMZW5ndGg7IHMrKykgewogICAgICAgIHJlcy5fc2V0QXQockl4KyssIGUuY29kZVVuaXRBdChzKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXM7CiAgfQoKICBpbnQgaW5kZXhPZihQYXR0ZXJuIHBhdHRlcm4sIFtpbnQgc3RhcnQgPSAwXSkgewogICAgLy8gU3BlY2lhbGl6ZSBmb3Igc2luZ2xlIGNoYXJhY3RlciBwYXR0ZXJuLgogICAgZmluYWwgcENpZCA9IENsYXNzSUQuZ2V0SUQocGF0dGVybik7CiAgICBpZiAoKHBDaWQgPT0gQ2xhc3NJRC5jaWRPbmVCeXRlU3RyaW5nKSB8fAogICAgICAgIChwQ2lkID09IENsYXNzSUQuY2lkVHdvQnl0ZVN0cmluZykgfHwKICAgICAgICAocENpZCA9PSBDbGFzc0lELmNpZEV4dGVybmFsT25lQnl0ZVN0cmluZykpIHsKICAgICAgZmluYWwgU3RyaW5nIHBhdHRlcm5Bc1N0cmluZyA9IHBhdHRlcm47CiAgICAgIGZpbmFsIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgICBpZiAoKHBhdHRlcm5Bc1N0cmluZy5sZW5ndGggPT0gMSkgJiYgKHN0YXJ0ID49IDApICYmIChzdGFydCA8IGxlbikpIHsKICAgICAgICBmaW5hbCBwYXR0ZXJuQ3UwID0gcGF0dGVybkFzU3RyaW5nLmNvZGVVbml0QXQoMCk7CiAgICAgICAgaWYgKHBhdHRlcm5DdTAgPiAweEZGKSB7CiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICBpZiAodGhpcy5jb2RlVW5pdEF0KGkpID09IHBhdHRlcm5DdTApIHsKICAgICAgICAgICAgcmV0dXJuIGk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHN1cGVyLmluZGV4T2YocGF0dGVybiwgc3RhcnQpOwogIH0KCiAgYm9vbCBjb250YWlucyhQYXR0ZXJuIHBhdHRlcm4sIFtpbnQgc3RhcnQgPSAwXSkgewogICAgZmluYWwgcENpZCA9IENsYXNzSUQuZ2V0SUQocGF0dGVybik7CiAgICBpZiAoKHBDaWQgPT0gQ2xhc3NJRC5jaWRPbmVCeXRlU3RyaW5nKSB8fAogICAgICAgIChwQ2lkID09IENsYXNzSUQuY2lkVHdvQnl0ZVN0cmluZykgfHwKICAgICAgICAocENpZCA9PSBDbGFzc0lELmNpZEV4dGVybmFsT25lQnl0ZVN0cmluZykpIHsKICAgICAgZmluYWwgU3RyaW5nIHBhdHRlcm5Bc1N0cmluZyA9IHBhdHRlcm47CiAgICAgIGZpbmFsIGxlbiA9IHRoaXMubGVuZ3RoOwogICAgICBpZiAoKHBhdHRlcm5Bc1N0cmluZy5sZW5ndGggPT0gMSkgJiYgKHN0YXJ0ID49IDApICYmIChzdGFydCA8IGxlbikpIHsKICAgICAgICBmaW5hbCBwYXR0ZXJuQ3UwID0gcGF0dGVybkFzU3RyaW5nLmNvZGVVbml0QXQoMCk7CiAgICAgICAgaWYgKHBhdHRlcm5DdTAgPiAweEZGKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgICBpZiAodGhpcy5jb2RlVW5pdEF0KGkpID09IHBhdHRlcm5DdTApIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHN1cGVyLmNvbnRhaW5zKHBhdHRlcm4sIHN0YXJ0KTsKICB9CgogIFN0cmluZyBvcGVyYXRvciAqKGludCB0aW1lcykgewogICAgaWYgKHRpbWVzIDw9IDApIHJldHVybiAiIjsKICAgIGlmICh0aW1lcyA9PSAxKSByZXR1cm4gdGhpczsKICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGlmICh0aGlzLmlzRW1wdHkpIHJldHVybiB0aGlzOyAvLyBEb24ndCBjbG9uZSBlbXB0eSBzdHJpbmcuCiAgICBfT25lQnl0ZVN0cmluZyByZXN1bHQgPSBfT25lQnl0ZVN0cmluZy5fYWxsb2NhdGUobGVuZ3RoICogdGltZXMpOwogICAgaW50IGluZGV4ID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdGltZXM7IGkrKykgewogICAgICBmb3IgKGludCBqID0gMDsgaiA8IGxlbmd0aDsgaisrKSB7CiAgICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCsrLCB0aGlzLmNvZGVVbml0QXQoaikpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU3RyaW5nIHBhZExlZnQoaW50IHdpZHRoLCBbU3RyaW5nIHBhZGRpbmcgPSAnICddKSB7CiAgICBpbnQgcGFkQ2lkID0gQ2xhc3NJRC5nZXRJRChwYWRkaW5nKTsKICAgIGlmICgocGFkQ2lkICE9IENsYXNzSUQuY2lkT25lQnl0ZVN0cmluZykgJiYKICAgICAgICAocGFkQ2lkICE9IENsYXNzSUQuY2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nKSkgewogICAgICByZXR1cm4gc3VwZXIucGFkTGVmdCh3aWR0aCwgcGFkZGluZyk7CiAgICB9CiAgICBpbnQgbGVuZ3RoID0gdGhpcy5sZW5ndGg7CiAgICBpbnQgZGVsdGEgPSB3aWR0aCAtIGxlbmd0aDsKICAgIGlmIChkZWx0YSA8PSAwKSByZXR1cm4gdGhpczsKICAgIGludCBwYWRMZW5ndGggPSBwYWRkaW5nLmxlbmd0aDsKICAgIGludCByZXN1bHRMZW5ndGggPSBwYWRMZW5ndGggKiBkZWx0YSArIGxlbmd0aDsKICAgIF9PbmVCeXRlU3RyaW5nIHJlc3VsdCA9IF9PbmVCeXRlU3RyaW5nLl9hbGxvY2F0ZShyZXN1bHRMZW5ndGgpOwogICAgaW50IGluZGV4ID0gMDsKICAgIGlmIChwYWRMZW5ndGggPT0gMSkgewogICAgICBpbnQgcGFkQ2hhciA9IHBhZGRpbmcuY29kZVVuaXRBdCgwKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWx0YTsgaSsrKSB7CiAgICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCsrLCBwYWRDaGFyKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBkZWx0YTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBwYWRMZW5ndGg7IGorKykgewogICAgICAgICAgcmVzdWx0Ll9zZXRBdChpbmRleCsrLCBwYWRkaW5nLmNvZGVVbml0QXQoaikpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHQuX3NldEF0KGluZGV4KyssIHRoaXMuY29kZVVuaXRBdChpKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgU3RyaW5nIHBhZFJpZ2h0KGludCB3aWR0aCwgW1N0cmluZyBwYWRkaW5nID0gJyAnXSkgewogICAgaW50IHBhZENpZCA9IENsYXNzSUQuZ2V0SUQocGFkZGluZyk7CiAgICBpZiAoKHBhZENpZCAhPSBDbGFzc0lELmNpZE9uZUJ5dGVTdHJpbmcpICYmCiAgICAgICAgKHBhZENpZCAhPSBDbGFzc0lELmNpZEV4dGVybmFsT25lQnl0ZVN0cmluZykpIHsKICAgICAgcmV0dXJuIHN1cGVyLnBhZFJpZ2h0KHdpZHRoLCBwYWRkaW5nKTsKICAgIH0KICAgIGludCBsZW5ndGggPSB0aGlzLmxlbmd0aDsKICAgIGludCBkZWx0YSA9IHdpZHRoIC0gbGVuZ3RoOwogICAgaWYgKGRlbHRhIDw9IDApIHJldHVybiB0aGlzOwogICAgaW50IHBhZExlbmd0aCA9IHBhZGRpbmcubGVuZ3RoOwogICAgaW50IHJlc3VsdExlbmd0aCA9IGxlbmd0aCArIHBhZExlbmd0aCAqIGRlbHRhOwogICAgX09uZUJ5dGVTdHJpbmcgcmVzdWx0ID0gX09uZUJ5dGVTdHJpbmcuX2FsbG9jYXRlKHJlc3VsdExlbmd0aCk7CiAgICBpbnQgaW5kZXggPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHQuX3NldEF0KGluZGV4KyssIHRoaXMuY29kZVVuaXRBdChpKSk7CiAgICB9CiAgICBpZiAocGFkTGVuZ3RoID09IDEpIHsKICAgICAgaW50IHBhZENoYXIgPSBwYWRkaW5nLmNvZGVVbml0QXQoMCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVsdGE7IGkrKykgewogICAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXgrKywgcGFkQ2hhcik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGVsdGE7IGkrKykgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgcGFkTGVuZ3RoOyBqKyspIHsKICAgICAgICAgIHJlc3VsdC5fc2V0QXQoaW5kZXgrKywgcGFkZGluZy5jb2RlVW5pdEF0KGopKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICAvLyBMb3dlci1jYXNlIGNvbnZlcnNpb24gdGFibGUgZm9yIExhdGluLTEgYXMgc3RyaW5nLgogIC8vIFVwcGVyLWNhc2UgcmFuZ2VzOiAweDQxLTB4NWEgKCdBJyAtICdaJyksIDB4YzAtMHhkNiwgMHhkOC0weGRlLgogIC8vIENvbnZlcnNpb24gdG8gbG93ZXIgY2FzZSBwZXJmb3JtZWQgYnkgYWRkaW5nIDB4MjAuCiAgc3RhdGljIGNvbnN0IF9MQ19UQUJMRSA9CiAgICAgICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIgogICAgICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiIKICAgICAgIlx4MjBceDIxXHgyMlx4MjNceDI0XHgyNVx4MjZceDI3XHgyOFx4MjlceDJhXHgyYlx4MmNceDJkXHgyZVx4MmYiCiAgICAgICJceDMwXHgzMVx4MzJceDMzXHgzNFx4MzVceDM2XHgzN1x4MzhceDM5XHgzYVx4M2JceDNjXHgzZFx4M2VceDNmIgogICAgICAiXHg0MFx4NjFceDYyXHg2M1x4NjRceDY1XHg2Nlx4NjdceDY4XHg2OVx4NmFceDZiXHg2Y1x4NmRceDZlXHg2ZiIKICAgICAgIlx4NzBceDcxXHg3Mlx4NzNceDc0XHg3NVx4NzZceDc3XHg3OFx4NzlceDdhXHg1Ylx4NWNceDVkXHg1ZVx4NWYiCiAgICAgICJceDYwXHg2MVx4NjJceDYzXHg2NFx4NjVceDY2XHg2N1x4NjhceDY5XHg2YVx4NmJceDZjXHg2ZFx4NmVceDZmIgogICAgICAiXHg3MFx4NzFceDcyXHg3M1x4NzRceDc1XHg3Nlx4NzdceDc4XHg3OVx4N2FceDdiXHg3Y1x4N2RceDdlXHg3ZiIKICAgICAgIlx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGYiCiAgICAgICJceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmIgogICAgICAiXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZiIKICAgICAgIlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmYiCiAgICAgICJceGUwXHhlMVx4ZTJceGUzXHhlNFx4ZTVceGU2XHhlN1x4ZThceGU5XHhlYVx4ZWJceGVjXHhlZFx4ZWVceGVmIgogICAgICAiXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZDdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmRceGZlXHhkZiIKICAgICAgIlx4ZTBceGUxXHhlMlx4ZTNceGU0XHhlNVx4ZTZceGU3XHhlOFx4ZTlceGVhXHhlYlx4ZWNceGVkXHhlZVx4ZWYiCiAgICAgICJceGYwXHhmMVx4ZjJceGYzXHhmNFx4ZjVceGY2XHhmN1x4ZjhceGY5XHhmYVx4ZmJceGZjXHhmZFx4ZmVceGZmIjsKCiAgLy8gVXBwZXItY2FzZSBjb252ZXJzaW9uIHRhYmxlIGZvciBMYXRpbi0xIGFzIHN0cmluZy4KICAvLyBMb3dlci1jYXNlIHJhbmdlczogMHg2MS0weDdhICgnYScgLSAneicpLCAweGUwLTB4ZmYuCiAgLy8gVGhlIGNoYXJhY3RlcnMgMHhiNSAowrUpIGFuZCAweGZmICjDvykgaGF2ZSB1cHBlciBjYXNlIHZhcmlhbnRzCiAgLy8gdGhhdCBhcmUgbm90IExhdGluLTEuIFRoZXNlIGFyZSBib3RoIG1hcmtlZCBhcyAweDAwIGluIHRoZSB0YWJsZS4KICAvLyBUaGUgR2VybWFuICJzaGFycCBzIiBceGRmICjDnykgc2hvdWxkIGJlIGNvbnZlcnRlZCBpbnRvIHR3byBjaGFyYWN0ZXJzIChTUyksCiAgLy8gYW5kIGlzIGFsc28gbWFya2VkIHdpdGggMHgwMC4KICAvLyBDb252ZXJzaW9uIHRvIGxvd2VyIGNhc2UgcGVyZm9ybWVkIGJ5IHN1YnRyYWN0aW5nIDB4MjAuCiAgc3RhdGljIGNvbnN0IF9VQ19UQUJMRSA9CiAgICAgICJceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDhceDA5XHgwYVx4MGJceDBjXHgwZFx4MGVceDBmIgogICAgICAiXHgxMFx4MTFceDEyXHgxM1x4MTRceDE1XHgxNlx4MTdceDE4XHgxOVx4MWFceDFiXHgxY1x4MWRceDFlXHgxZiIKICAgICAgIlx4MjBceDIxXHgyMlx4MjNceDI0XHgyNVx4MjZceDI3XHgyOFx4MjlceDJhXHgyYlx4MmNceDJkXHgyZVx4MmYiCiAgICAgICJceDMwXHgzMVx4MzJceDMzXHgzNFx4MzVceDM2XHgzN1x4MzhceDM5XHgzYVx4M2JceDNjXHgzZFx4M2VceDNmIgogICAgICAiXHg0MFx4NDFceDQyXHg0M1x4NDRceDQ1XHg0Nlx4NDdceDQ4XHg0OVx4NGFceDRiXHg0Y1x4NGRceDRlXHg0ZiIKICAgICAgIlx4NTBceDUxXHg1Mlx4NTNceDU0XHg1NVx4NTZceDU3XHg1OFx4NTlceDVhXHg1Ylx4NWNceDVkXHg1ZVx4NWYiCiAgICAgICJceDYwXHg0MVx4NDJceDQzXHg0NFx4NDVceDQ2XHg0N1x4NDhceDQ5XHg0YVx4NGJceDRjXHg0ZFx4NGVceDRmIgogICAgICAiXHg1MFx4NTFceDUyXHg1M1x4NTRceDU1XHg1Nlx4NTdceDU4XHg1OVx4NWFceDdiXHg3Y1x4N2RceDdlXHg3ZiIKICAgICAgIlx4ODBceDgxXHg4Mlx4ODNceDg0XHg4NVx4ODZceDg3XHg4OFx4ODlceDhhXHg4Ylx4OGNceDhkXHg4ZVx4OGYiCiAgICAgICJceDkwXHg5MVx4OTJceDkzXHg5NFx4OTVceDk2XHg5N1x4OThceDk5XHg5YVx4OWJceDljXHg5ZFx4OWVceDlmIgogICAgICAiXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOVx4YWFceGFiXHhhY1x4YWRceGFlXHhhZiIKICAgICAgIlx4YjBceGIxXHhiMlx4YjNceGI0XHgwMFx4YjZceGI3XHhiOFx4YjlceGJhXHhiYlx4YmNceGJkXHhiZVx4YmYiCiAgICAgICJceGMwXHhjMVx4YzJceGMzXHhjNFx4YzVceGM2XHhjN1x4YzhceGM5XHhjYVx4Y2JceGNjXHhjZFx4Y2VceGNmIgogICAgICAiXHhkMFx4ZDFceGQyXHhkM1x4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHgwMCIKICAgICAgIlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNVx4YzZceGM3XHhjOFx4YzlceGNhXHhjYlx4Y2NceGNkXHhjZVx4Y2YiCiAgICAgICJceGQwXHhkMVx4ZDJceGQzXHhkNFx4ZDVceGQ2XHhmN1x4ZDhceGQ5XHhkYVx4ZGJceGRjXHhkZFx4ZGVceDAwIjsKCiAgU3RyaW5nIHRvTG93ZXJDYXNlKCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGZpbmFsIGMgPSB0aGlzLmNvZGVVbml0QXQoaSk7CiAgICAgIGlmIChjID09IF9MQ19UQUJMRS5jb2RlVW5pdEF0KGMpKSBjb250aW51ZTsKICAgICAgLy8gVXBwZXItY2FzZSBjaGFyYWN0ZXIgZm91bmQuCiAgICAgIGZpbmFsIHJlc3VsdCA9IF9hbGxvY2F0ZSh0aGlzLmxlbmd0aCk7CiAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgaTsgaisrKSB7CiAgICAgICAgcmVzdWx0Ll9zZXRBdChqLCB0aGlzLmNvZGVVbml0QXQoaikpOwogICAgICB9CiAgICAgIGZvciAoaW50IGogPSBpOyBqIDwgdGhpcy5sZW5ndGg7IGorKykgewogICAgICAgIHJlc3VsdC5fc2V0QXQoaiwgX0xDX1RBQkxFLmNvZGVVbml0QXQodGhpcy5jb2RlVW5pdEF0KGopKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0KCiAgU3RyaW5nIHRvVXBwZXJDYXNlKCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7CiAgICAgIGZpbmFsIGMgPSB0aGlzLmNvZGVVbml0QXQoaSk7CiAgICAgIC8vIENvbnRpbnVlIGxvb3AgaWYgY2hhcmFjdGVyIGlzIHVuY2hhbmdlZCBieSB1cHBlci1jYXNlIGNvbnZlcnNpb24uCiAgICAgIGlmIChjID09IF9VQ19UQUJMRS5jb2RlVW5pdEF0KGMpKSBjb250aW51ZTsKCiAgICAgIC8vIENoZWNrIHJlc3Qgb2Ygc3RyaW5nIGZvciBjaGFyYWN0ZXJzIHRoYXQgZG8gbm90IGNvbnZlcnQgdG8KICAgICAgLy8gc2luZ2xlLWNoYXJhY3RlcnMgaW4gdGhlIExhdGluLTEgcmFuZ2UuCiAgICAgIGZvciAoaW50IGogPSBpOyBqIDwgdGhpcy5sZW5ndGg7IGorKykgewogICAgICAgIGZpbmFsIGMgPSB0aGlzLmNvZGVVbml0QXQoaik7CiAgICAgICAgaWYgKChfVUNfVEFCTEUuY29kZVVuaXRBdChjKSA9PSAweDAwKSAmJiAoYyAhPSAweDAwKSkgewogICAgICAgICAgLy8gV2UgdXNlIHRoZSAweDAwIHZhbHVlIGZvciBjaGFyYWN0ZXJzIG90aGVyIHRoYW4gdGhlIG51bGwgY2hhcmFjdGVyLAogICAgICAgICAgLy8gdGhhdCBkb24ndCBjb252ZXJ0IHRvIGEgc2luZ2xlIExhdGluLTEgY2hhcmFjdGVyIHdoZW4gdXBwZXItY2FzZWQuCiAgICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIGNhbGwgdGhlIGdlbmVyaWMgc3VwZXItY2xhc3MgbWV0aG9kLgogICAgICAgICAgcmV0dXJuIHN1cGVyLnRvVXBwZXJDYXNlKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIFNvbWUgbG93ZXItY2FzZSBjaGFyYWN0ZXJzIGZvdW5kLCBidXQgYWxsIHVwcGVyLWNhc2UgdG8gc2luZ2xlIExhdGluLTEKICAgICAgLy8gY2hhcmFjdGVycy4KICAgICAgZmluYWwgcmVzdWx0ID0gX2FsbG9jYXRlKHRoaXMubGVuZ3RoKTsKICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpOyBqKyspIHsKICAgICAgICByZXN1bHQuX3NldEF0KGosIHRoaXMuY29kZVVuaXRBdChqKSk7CiAgICAgIH0KICAgICAgZm9yIChpbnQgaiA9IGk7IGogPCB0aGlzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgcmVzdWx0Ll9zZXRBdChqLCBfVUNfVEFCTEUuY29kZVVuaXRBdCh0aGlzLmNvZGVVbml0QXQoaikpKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgcmV0dXJuIHRoaXM7CiAgfQoKICAvLyBBbGxvY2F0ZXMgYSBzdHJpbmcgb2YgZ2l2ZW4gbGVuZ3RoLCBleHBlY3RpbmcgaXRzIGNvbnRlbnQgdG8gYmUKICAvLyBzZXQgdXNpbmcgX3NldEF0LgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgX09uZUJ5dGVTdHJpbmcpCiAgc3RhdGljIF9PbmVCeXRlU3RyaW5nIF9hbGxvY2F0ZShpbnQgbGVuZ3RoKSBuYXRpdmUgIk9uZUJ5dGVTdHJpbmdfYWxsb2NhdGUiOwoKICBzdGF0aWMgX09uZUJ5dGVTdHJpbmcgX2FsbG9jYXRlRnJvbU9uZUJ5dGVMaXN0KExpc3Q8aW50PiBsaXN0LCBpbnQgc3RhcnQsCiAgICAgIGludCBlbmQpIG5hdGl2ZSAiT25lQnl0ZVN0cmluZ19hbGxvY2F0ZUZyb21PbmVCeXRlTGlzdCI7CgogIC8vIFRoaXMgaXMgaW50ZXJuYWwgaGVscGVyIG1ldGhvZC4gQ29kZSBwb2ludCB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQKICAvLyBMYXRpbjEgdmFsdWUgKDAuLjB4RkYpLCBpbmRleCBtdXN0IGJlIHZhbGlkLgogIHZvaWQgX3NldEF0KGludCBpbmRleCwgaW50IGNvZGVQb2ludCkgbmF0aXZlICJPbmVCeXRlU3RyaW5nX3NldEF0IjsKCiAgLy8gU2hvdWxkIGJlIG9wdGltaXphYmxlIHRvIGEgbWVtb3J5IG1vdmUuCiAgLy8gQWNjZXB0cyBib3RoIF9PbmVCeXRlU3RyaW5nIGFuZCBfRXh0ZXJuYWxPbmVCeXRlU3RyaW5nIGFzIGFyZ3VtZW50LgogIC8vIFJldHVybnMgaW5kZXggYWZ0ZXIgbGFzdCBjaGFyYWN0ZXIgd3JpdHRlbi4KICBpbnQgX3NldFJhbmdlKGludCBpbmRleCwgU3RyaW5nIG9uZUJ5dGVTdHJpbmcsIGludCBzdGFydCwgaW50IGVuZCkgewogICAgYXNzZXJ0KG9uZUJ5dGVTdHJpbmcuX2lzT25lQnl0ZSk7CiAgICBhc3NlcnQoMCA8PSBzdGFydCk7CiAgICBhc3NlcnQoc3RhcnQgPD0gZW5kKTsKICAgIGFzc2VydChlbmQgPD0gb25lQnl0ZVN0cmluZy5sZW5ndGgpOwogICAgYXNzZXJ0KDAgPD0gaW5kZXgpOwogICAgYXNzZXJ0KGluZGV4ICsgKGVuZCAtIHN0YXJ0KSA8PSBsZW5ndGgpOwogICAgZm9yIChpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgX3NldEF0KGluZGV4LCBvbmVCeXRlU3RyaW5nLmNvZGVVbml0QXQoaSkpOwogICAgICBpbmRleCArPSAxOwogICAgfQogICAgcmV0dXJuIGluZGV4OwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVHdvQnl0ZVN0cmluZyBleHRlbmRzIF9TdHJpbmdCYXNlIHsKICBmYWN0b3J5IF9Ud29CeXRlU3RyaW5nLl91bmluc3RhbnRpYWJsZSgpIHsgdGhyb3cgIlVucmVhY2hhYmxlIjsgfQoKICBzdGF0aWMgU3RyaW5nIF9hbGxvY2F0ZUZyb21Ud29CeXRlTGlzdChMaXN0PGludD4gbGlzdCwgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgICBuYXRpdmUgIlR3b0J5dGVTdHJpbmdfYWxsb2NhdGVGcm9tVHdvQnl0ZUxpc3QiOwoKICBib29sIF9pc1doaXRlc3BhY2UoaW50IGNvZGVVbml0KSB7CiAgICByZXR1cm4gX1N0cmluZ0Jhc2UuX2lzVHdvQnl0ZVdoaXRlc3BhY2UoY29kZVVuaXQpOwogIH0KCiAgQHByYWdtYSgidm06ZXhhY3QtcmVzdWx0LXR5cGUiLCAiZGFydDpjb3JlI19TbWkiKQogIGludCBjb2RlVW5pdEF0KGludCBpbmRleCkgbmF0aXZlICJTdHJpbmdfY29kZVVuaXRBdCI7CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgcmV0dXJuIHN1cGVyID09IG90aGVyOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxPbmVCeXRlU3RyaW5nIGV4dGVuZHMgX1N0cmluZ0Jhc2UgewogIGZhY3RvcnkgX0V4dGVybmFsT25lQnl0ZVN0cmluZy5fdW5pbnN0YW50aWFibGUoKSB7IHRocm93ICJVbnJlYWNoYWJsZSI7IH0KCiAgYm9vbCBfaXNXaGl0ZXNwYWNlKGludCBjb2RlVW5pdCkgewogICAgcmV0dXJuIF9TdHJpbmdCYXNlLl9pc09uZUJ5dGVXaGl0ZXNwYWNlKGNvZGVVbml0KTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgY29kZVVuaXRBdChpbnQgaW5kZXgpIG5hdGl2ZSAiU3RyaW5nX2NvZGVVbml0QXQiOwoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgcmV0dXJuIHN1cGVyID09IG90aGVyOwogIH0KfQoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfRXh0ZXJuYWxUd29CeXRlU3RyaW5nIGV4dGVuZHMgX1N0cmluZ0Jhc2UgewogIGZhY3RvcnkgX0V4dGVybmFsVHdvQnl0ZVN0cmluZy5fdW5pbnN0YW50aWFibGUoKSB7IHRocm93ICJVbnJlYWNoYWJsZSI7IH0KCiAgYm9vbCBfaXNXaGl0ZXNwYWNlKGludCBjb2RlVW5pdCkgewogICAgcmV0dXJuIF9TdHJpbmdCYXNlLl9pc1R3b0J5dGVXaGl0ZXNwYWNlKGNvZGVVbml0KTsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgY29kZVVuaXRBdChpbnQgaW5kZXgpIG5hdGl2ZSAiU3RyaW5nX2NvZGVVbml0QXQiOwoKICBib29sIG9wZXJhdG9yID09KE9iamVjdCBvdGhlcikgewogICAgcmV0dXJuIHN1cGVyID09IG90aGVyOwogIH0KfQoKY2xhc3MgX1N0cmluZ01hdGNoIGltcGxlbWVudHMgTWF0Y2ggewogIGNvbnN0IF9TdHJpbmdNYXRjaCh0aGlzLnN0YXJ0LCB0aGlzLmlucHV0LCB0aGlzLnBhdHRlcm4pOwoKICBpbnQgZ2V0IGVuZCA9PiBzdGFydCArIHBhdHRlcm4ubGVuZ3RoOwogIFN0cmluZyBvcGVyYXRvciBbXShpbnQgZykgPT4gZ3JvdXAoZyk7CiAgaW50IGdldCBncm91cENvdW50ID0+IDA7CgogIFN0cmluZyBncm91cChpbnQgZ3JvdXApIHsKICAgIGlmIChncm91cCAhPSAwKSB7CiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yLnZhbHVlKGdyb3VwKTsKICAgIH0KICAgIHJldHVybiBwYXR0ZXJuOwogIH0KCiAgTGlzdDxTdHJpbmc+IGdyb3VwcyhMaXN0PGludD4gZ3JvdXBzKSB7CiAgICBMaXN0PFN0cmluZz4gcmVzdWx0ID0gbmV3IExpc3Q8U3RyaW5nPigpOwogICAgZm9yIChpbnQgZyBpbiBncm91cHMpIHsKICAgICAgcmVzdWx0LmFkZChncm91cChnKSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgZmluYWwgaW50IHN0YXJ0OwogIGZpbmFsIFN0cmluZyBpbnB1dDsKICBmaW5hbCBTdHJpbmcgcGF0dGVybjsKfQoKY2xhc3MgX1N0cmluZ0FsbE1hdGNoZXNJdGVyYWJsZSBleHRlbmRzIEl0ZXJhYmxlPE1hdGNoPiB7CiAgZmluYWwgU3RyaW5nIF9pbnB1dDsKICBmaW5hbCBTdHJpbmcgX3BhdHRlcm47CiAgZmluYWwgaW50IF9pbmRleDsKCiAgX1N0cmluZ0FsbE1hdGNoZXNJdGVyYWJsZSh0aGlzLl9pbnB1dCwgdGhpcy5fcGF0dGVybiwgdGhpcy5faW5kZXgpOwoKICBJdGVyYXRvcjxNYXRjaD4gZ2V0IGl0ZXJhdG9yID0+CiAgICAgIG5ldyBfU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhdG9yKF9pbnB1dCwgX3BhdHRlcm4sIF9pbmRleCk7CgogIE1hdGNoIGdldCBmaXJzdCB7CiAgICBpbnQgaW5kZXggPSBfaW5wdXQuaW5kZXhPZihfcGF0dGVybiwgX2luZGV4KTsKICAgIGlmIChpbmRleCA+PSAwKSB7CiAgICAgIHJldHVybiBuZXcgX1N0cmluZ01hdGNoKGluZGV4LCBfaW5wdXQsIF9wYXR0ZXJuKTsKICAgIH0KICAgIHRocm93IEl0ZXJhYmxlRWxlbWVudEVycm9yLm5vRWxlbWVudCgpOwogIH0KfQoKY2xhc3MgX1N0cmluZ0FsbE1hdGNoZXNJdGVyYXRvciBpbXBsZW1lbnRzIEl0ZXJhdG9yPE1hdGNoPiB7CiAgZmluYWwgU3RyaW5nIF9pbnB1dDsKICBmaW5hbCBTdHJpbmcgX3BhdHRlcm47CiAgaW50IF9pbmRleDsKICBNYXRjaCBfY3VycmVudDsKCiAgX1N0cmluZ0FsbE1hdGNoZXNJdGVyYXRvcih0aGlzLl9pbnB1dCwgdGhpcy5fcGF0dGVybiwgdGhpcy5faW5kZXgpOwoKICBib29sIG1vdmVOZXh0KCkgewogICAgaWYgKF9pbmRleCArIF9wYXR0ZXJuLmxl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FikGFAQBKi4cHAYTBAETFhgCAToXGRQBRgEiPwEUMhY4BiwEAgE9FxkOEgFGARQ0FxQGMhUiFxQGJzo4HhIRBAEhAgEhZGFydDpjb3JlLXBhdGNoL3N0cmluZ19wYXRjaC5kYXJ0L29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvdHlwZV9wYXRjaC5kYXJ0hCcvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCi8vIFRoZXNlIERhcnQgY2xhc3NlcyBjb3JyZXNwb25kIHRvIHRoZSBWTSBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBjbGFzc2VzLgoKLy8gRXF1aXZhbGVudCBvZiBSYXdBYnN0cmFjdFR5cGUuCmFic3RyYWN0IGNsYXNzIF9BYnN0cmFjdFR5cGUgaW1wbGVtZW50cyBUeXBlIHsKICBTdHJpbmcgdG9TdHJpbmcoKSBuYXRpdmUgIkFic3RyYWN0VHlwZV90b1N0cmluZyI7Cn0KCi8vIEVxdWl2YWxlbnQgb2YgUmF3VHlwZS4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVHlwZSBleHRlbmRzIF9BYnN0cmFjdFR5cGUgewogIGZhY3RvcnkgX1R5cGUuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9CgogIEBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgImRhcnQ6Y29yZSNfU21pIikKICBpbnQgZ2V0IGhhc2hDb2RlIG5hdGl2ZSAiVHlwZV9nZXRIYXNoQ29kZSI7Cn0KCi8vIEVxdWl2YWxlbnQgb2YgUmF3VHlwZVJlZi4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVHlwZVJlZiBleHRlbmRzIF9BYnN0cmFjdFR5cGUgewogIGZhY3RvcnkgX1R5cGVSZWYuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9Cn0KCi8vIEVxdWl2YWxlbnQgb2YgUmF3VHlwZVBhcmFtZXRlci4KQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfVHlwZVBhcmFtZXRlciBleHRlbmRzIF9BYnN0cmFjdFR5cGUgewogIGZhY3RvcnkgX1R5cGVQYXJhbWV0ZXIuX3VuaW5zdGFudGlhYmxlKCkgewogICAgdGhyb3cgIlVucmVhY2hhYmxlIjsKICB9Cn0KKQBOTjwBHgFMASIvNAIBGhokJBkEATQuAgEdGicnGQQCASMaLS0ZBAIBH2RhcnQ6Y29yZS1wYXRjaC90eXBlX3BhdGNoLmRhcnQyb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi93ZWFrX3Byb3BlcnR5LmRhcnSCkC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBfV2Vha1Byb3BlcnR5IHsKICBmYWN0b3J5IF9XZWFrUHJvcGVydHkoa2V5LCB2YWx1ZSkgPT4gX25ldyhrZXksIHZhbHVlKTsKCiAgZ2V0IGtleSA9PiBfZ2V0S2V5KCk7CiAgZ2V0IHZhbHVlID0+IF9nZXRWYWx1ZSgpOwogIHNldCB2YWx1ZSh2YWx1ZSkgPT4gX3NldFZhbHVlKHZhbHVlKTsKCiAgc3RhdGljIF9XZWFrUHJvcGVydHkgX25ldyhrZXksIHZhbHVlKSBuYXRpdmUgIldlYWtQcm9wZXJ0eV9uZXciOwoKICBfZ2V0S2V5KCkgbmF0aXZlICJXZWFrUHJvcGVydHlfZ2V0S2V5IjsKICBfZ2V0VmFsdWUoKSBuYXRpdmUgIldlYWtQcm9wZXJ0eV9nZXRWYWx1ZSI7CiAgX3NldFZhbHVlKHZhbHVlKSBuYXRpdmUgIldlYWtQcm9wZXJ0eV9zZXRWYWx1ZSI7Cn0KFgBOTjwBHgEaFjkBGBwoAUMBKi4zAgEiZGFydDpjb3JlLXBhdGNoL3dlYWtfcHJvcGVydHkuZGFydDFvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9hbm5vdGF0aW9ucy5kYXJ0o3MvLyBDb3B5cmlnaHQgKGMpIDIwMTMsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogVGhlIGFubm90YXRpb24gYEBEZXByZWNhdGVkKCdtaWdyYXRpb24nKWAgbWFya3MgYSBmZWF0dXJlIGFzIGRlcHJlY2F0ZWQuCiAqCiAqIFRoZSBhbm5vdGF0aW9uIFtkZXByZWNhdGVkXSBpcyBhIHNob3J0aGFuZCBmb3IgZGVwcmVjYXRpbmcgdW50aWwKICogYW4gdW5zcGVjaWZpZWQgIm5leHQgcmVsZWFzZSIgd2l0aG91dCBtaWdyYXRpb24gaW5zdHJ1Y3Rpb25zLgogKgogKiBUaGUgaW50ZW50IG9mIHRoZSBgQERlcHJlY2F0ZWRgIGFubm90YXRpb24gaXMgdG8gaW5mb3JtIHVzZXJzIG9mIGEgZmVhdHVyZQogKiB0aGF0IHRoZXkgc2hvdWxkIGNoYW5nZSB0aGVpciBjb2RlLCBldmVuIGlmIGl0IGlzIGN1cnJlbnRseSBzdGlsbCB3b3JraW5nCiAqIGNvcnJlY3RseS4KICoKICogQSBkZXByZWNhdGVkIGZlYXR1cmUgaXMgc2NoZWR1bGVkIHRvIGJlIHJlbW92ZWQgYXQgYSBsYXRlciB0aW1lLCBwb3NzaWJseQogKiBzcGVjaWZpZWQgaW4gW21lc3NhZ2VdLiBBIGRlcHJlY2F0ZWQgZmVhdHVyZSBzaG91bGQgbm90IGJlIHVzZWQsIGNvZGUgdXNpbmcKICogaXQgd2lsbCBicmVhayBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUuIElmIGV4aXN0aW5nIGNvZGUgaXMgdXNpbmcgdGhlCiAqIGZlYXR1cmUgaXQgc2hvdWxkIGJlIHJld3JpdHRlbiB0byBub3QgdXNlIHRoZSBkZXByZWNhdGVkIGZlYXR1cmUuCiAqCiAqIEEgZGVwcmVjYXRlZCBmZWF0dXJlIHNob3VsZCBkb2N1bWVudCBob3cgdGhlIHNhbWUgZWZmZWN0IGNhbiBiZSBhY2hpZXZlZCBpbgogKiBbbWVzc2FnZV0sIHNvIHRoZSBwcm9ncmFtbWVyIGtub3dzIGhvdyB0byByZXdyaXRlIHRoZSBjb2RlLgogKgogKiBUaGUgYEBEZXByZWNhdGVkYCBhbm5vdGF0aW9uIGFwcGxpZXMgdG8gbGlicmFyaWVzLCB0b3AtbGV2ZWwgZGVjbGFyYXRpb25zCiAqICh2YXJpYWJsZXMsIGdldHRlcnMsIHNldHRlcnMsIGZ1bmN0aW9ucywgY2xhc3NlcyBhbmQgdHlwZWRlZnMpLAogKiBjbGFzcy1sZXZlbCBkZWNsYXJhdGlvbnMgKHZhcmlhYmxlcywgZ2V0dGVycywgc2V0dGVycywgbWV0aG9kcywgb3BlcmF0b3JzIG9yCiAqIGNvbnN0cnVjdG9ycywgd2hldGhlciBzdGF0aWMgb3Igbm90KSwgbmFtZWQgb3B0aW9uYWwgYXJndW1lbnRzIGFuZAogKiB0cmFpbGluZyBvcHRpb25hbCBwb3NpdGlvbmFsIHBhcmFtZXRlcnMuCiAqCiAqIERlcHJlY2F0aW9uIGlzIHRyYW5zaXRpdmU6CiAqCiAqICAtIElmIGEgbGlicmFyeSBpcyBkZXByZWNhdGVkLCBzbyBpcyBldmVyeSBtZW1iZXIgb2YgaXQuCiAqICAtIElmIGEgY2xhc3MgaXMgZGVwcmVjYXRlZCwgc28gaXMgZXZlcnkgbWVtYmVyIG9mIGl0LgogKiAgLSBJZiBhIHZhcmlhYmxlIGlzIGRlcHJlY2F0ZWQsIHNvIGFyZSBpdHMgaW1wbGljaXQgZ2V0dGVyIGFuZCBzZXR0ZXIuCiAqCiAqCiAqIEEgdG9vbCB0aGF0IHByb2Nlc3NlcyBEYXJ0IHNvdXJjZSBjb2RlIG1heSByZXBvcnQgd2hlbjoKICoKICogLSB0aGUgY29kZSBpbXBvcnRzIGEgZGVwcmVjYXRlZCBsaWJyYXJ5LgogKiAtIHRoZSBjb2RlIGV4cG9ydHMgYSBkZXByZWNhdGVkIGxpYnJhcnksIG9yIGFueSBkZXByZWNhdGVkIG1lbWJlciBvZgogKiAgwqBhIG5vbi1kZXByZWNhdGVkIGxpYnJhcnkuCiAqIC0gdGhlIGNvZGUgcmVmZXJzIHN0YXRpY2FsbHkgdG8gYSBkZXByZWNhdGVkIGRlY2xhcmF0aW9uLgogKiAtIHRoZSBjb2RlIGR5bmFtaWNhbGx5IHVzZXMgYSBtZW1iZXIgb2YgYW4gb2JqZWN0IHdpdGggYSBzdGF0aWNhbGx5IGtub3duCiAqICAgdHlwZSwgd2hlcmUgdGhlIG1lbWJlciBpcyBkZXByZWNhdGVkIG9uIHRoZSBzdGF0aWMgdHlwZSBvZiB0aGUgb2JqZWN0LgogKiAtIHRoZSBjb2RlIGR5bmFtaWNhbGx5IGNhbGxzIGEgbWV0aG9kIHdpdGggYW4gYXJndW1lbnQgd2hlcmUgdGhlCiAqICAgY29ycmVzcG9uZGluZyBvcHRpb25hbCBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBvbiB0aGUgb2JqZWN0J3Mgc3RhdGljIHR5cGUuCiAqCiAqCiAqIElmIHRoZSBkZXByZWNhdGVkIHVzZSBpcyBpbnNpZGUgYSBsaWJyYXJ5LCBjbGFzcyBvciBtZXRob2Qgd2hpY2ggaXMgaXRzZWxmCiAqIGRlcHJlY2F0ZWQsIHRoZSB0b29sIHNob3VsZCBub3QgYm90aGVyIHRoZSB1c2VyIGFib3V0IGl0LgogKiBBIGRlcHJlY2F0ZWQgZmVhdHVyZSBpcyBleHBlY3RlZCB0byB1c2Ugb3RoZXIgZGVwcmVjYXRlZCBmZWF0dXJlcy4KICovCmNsYXNzIERlcHJlY2F0ZWQgewogIC8qKgogICAqIE1lc3NhZ2UgcHJvdmlkZWQgdG8gdGhlIHVzZXIgd2hlbiB0aGV5IHVzZSB0aGUgZGVwcmVjYXRlZCBmZWF0dXJlLgogICAqCiAgICogVGhlIG1lc3NhZ2Ugc2hvdWxkIGV4cGxhaW4gaG93IHRvIG1pZ3JhdGUgYXdheSBmcm9tIHRoZSBmZWF0dXJlIGlmIGFuCiAgICogYWx0ZXJuYXRpdmUgaXMgYXZhaWxhYmxlLCBhbmQgd2hlbiB0aGUgZGVwcmVjYXRlZCBmZWF0dXJlIGlzIGV4cGVjdGVkIHRvIGJlCiAgICogcmVtb3ZlZC4KICAgKi8KICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKCiAgLyoqCiAgICogQ3JlYXRlIGEgZGVwcmVjYXRpb24gYW5ub3RhdGlvbiB3aGljaCBzcGVjaWZpZXMgdGhlIG1pZ3JhdGlvbiBwYXRoIGFuZAogICAqIGV4cGlyYXRpb24gb2YgdGhlIGFubm90YXRlZCBmZWF0dXJlLgogICAqCiAgICogVGhlIFttZXNzYWdlXSBhcmd1bWVudCBzaG91bGQgYmUgcmVhZGFibGUgYnkgcHJvZ3JhbW1lcnMsIGFuZCBzaG91bGQgc3RhdGUKICAgKiBhbiBhbHRlcm5hdGl2ZSBmZWF0dXJlIChpZiBhdmFpbGFibGUpIGFzIHdlbGwgYXMgd2hlbiBhbiBhbm5vdGF0ZWQgZmVhdHVyZQogICAqIGlzIGV4cGVjdGVkIHRvIGJlIHJlbW92ZWQuCiAgICovCiAgY29uc3QgRGVwcmVjYXRlZCh0aGlzLm1lc3NhZ2UpOwoKICBARGVwcmVjYXRlZCgnVXNlIGBtZXNzYWdlYCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gRGFydCAzLjAuMCcpCiAgU3RyaW5nIGdldCBleHBpcmVzID0+IG1lc3NhZ2U7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJEZXByZWNhdGVkIGZlYXR1cmU6ICRtZXNzYWdlIjsKfQoKLyoqCiAqIE1hcmtzIGEgZmVhdHVyZSBhcyBbRGVwcmVjYXRlZF0gdW50aWwgdGhlIG5leHQgcmVsZWFzZS4KICovCmNvbnN0IERlcHJlY2F0ZWQgZGVwcmVjYXRlZCA9IERlcHJlY2F0ZWQoIm5leHQgcmVsZWFzZSIpOwoKY2xhc3MgX092ZXJyaWRlIHsKICBjb25zdCBfT3ZlcnJpZGUoKTsKfQoKLyoqCiAqIFRoZSBhbm5vdGF0aW9uIGBAb3ZlcnJpZGVgIG1hcmtzIGFuIGluc3RhbmNlIG1lbWJlciBhcyBvdmVycmlkaW5nIGEKICogc3VwZXJjbGFzcyBtZW1iZXIgd2l0aCB0aGUgc2FtZSBuYW1lLgogKgogKiBUaGUgYW5ub3RhdGlvbiBhcHBsaWVzIHRvIGluc3RhbmNlIG1ldGhvZHMsIGdldHRlcnMgYW5kIHNldHRlcnMsIGFuZCB0bwogKiBpbnN0YW5jZSBmaWVsZHMsIHdoZXJlIGl0IG1lYW5zIHRoYXQgdGhlIGltcGxpY2l0IGdldHRlciBhbmQgc2V0dGVyIG9mIHRoZQogKiBmaWVsZCBpcyBtYXJrZWQgYXMgb3ZlcnJpZGluZywgYnV0IHRoZSBmaWVsZCBpdHNlbGYgaXMgbm90LgogKgogKiBUaGUgaW50ZW50IG9mIHRoZSBgQG92ZXJyaWRlYCBub3RhdGlvbiBpcyB0byBjYXRjaCBzaXR1YXRpb25zIHdoZXJlIGEKICogc3VwZXJjbGFzcyByZW5hbWVzIGEgbWVtYmVyLCBhbmQgYW4gaW5kZXBlbmRlbnQgc3ViY2xhc3Mgd2hpY2ggdXNlZCB0bwogKiBvdmVycmlkZSB0aGUgbWVtYmVyLCBjb3VsZCBzaWxlbnRseSBjb250aW51ZSB3b3JraW5nIHVzaW5nIHRoZQogKiBzdXBlcmNsYXNzIGltcGxlbWVudGF0aW9uLgogKgogKiBUaGUgZWRpdG9yLCBvciBhIHNpbWlsYXIgdG9vbCBhaW1lZCBhdCB0aGUgcHJvZ3JhbW1lciwgbWF5IHJlcG9ydCBpZiBubwogKiBkZWNsYXJhdGlvbiBvZiBhbiBhbm5vdGF0ZWQgbWVtYmVyIGlzIGluaGVyaXRlZCBieSB0aGUgY2xhc3MgZnJvbSBlaXRoZXIgYQogKiBzdXBlcmNsYXNzIG9yIGFuIGludGVyZmFjZS4KICoKICogVXNlIHRoZSBgQG92ZXJyaWRlYCBhbm5vdGF0aW9uIGp1ZGljaW91c2x5IGFuZCBvbmx5IGZvciBtZXRob2RzIHdoZXJlCiAqIHRoZSBzdXBlcmNsYXNzIGlzIG5vdCB1bmRlciB0aGUgcHJvZ3JhbW1lcidzIGNvbnRyb2wsIHRoZSBzdXBlcmNsYXNzIGlzIGluIGEKICogZGlmZmVyZW50IGxpYnJhcnkgb3IgcGFja2FnZSwgYW5kIGl0IGlzIG5vdCBjb25zaWRlcmVkIHN0YWJsZS4KICogSW4gYW55IGNhc2UsIHRoZSB1c2Ugb2YgYEBvdmVycmlkZWAgaXMgb3B0aW9uYWwuCiAqCiAqIEZvciBleGFtcGxlLCB0aGUgYW5ub3RhdGlvbiBpcyBpbnRlbnRpb25hbGx5IG5vdCB1c2VkIGluIHRoZSBEYXJ0IHBsYXRmb3JtCiAqIGxpYnJhcmllcywgc2luY2UgdGhleSBvbmx5IGRlcGVuZCBvbiB0aGVtc2VsdmVzLgogKi8KY29uc3QgT2JqZWN0IG92ZXJyaWRlID0gX092ZXJyaWRlKCk7CgovKioKICogQW4gYW5ub3RhdGlvbiBjbGFzcyB0aGF0IHdhcyB1c2VkIGR1cmluZyBkZXZlbG9wbWVudCBvZiBEYXJ0IDIuCiAqCiAqIFNob3VsZCBub3QgYmUgdXNlZCBhbnkgbW9yZS4KICovCkBkZXByZWNhdGVkCmNsYXNzIFByb3Zpc2lvbmFsIHsKICBTdHJpbmcgZ2V0IG1lc3NhZ2UgPT4gbnVsbDsKICBjb25zdCBQcm92aXNpb25hbCh7U3RyaW5nIG1lc3NhZ2V9KTsKfQoKLyoqCiAqIEFuIGFubm90YXRpb24gdGhhdCB3YXMgdXNlZCBkdXJpbmcgZGV2ZWxvcG1lbnQgb2YgRGFydCAyLgogKgogKiBTaG91bGQgbm90IGJlIHVzZWQgYW55IG1vcmUuCiAqLwpAZGVwcmVjYXRlZApjb25zdCBOdWxsIHByb3Zpc2lvbmFsID0gbnVsbDsKCmNsYXNzIF9Qcm94eSB7CiAgY29uc3QgX1Byb3h5KCk7Cn0KCi8qKgogKiBUaGlzIGFubm90YXRpb24gaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIERhcnQgMi4KICoKICogRGFydCAyIGhhcyBhIG1vcmUgcmVzdHJpY3RpdmUgdHlwZSBzeXN0ZW0gdGhhbiBEYXJ0IDEsIGFuZCBpdCByZXF1aXJlcwogKiBtZXRob2QgYWNjZXNzIHRvIGJlIGVpdGhlciB0aHJvdWdoIGEga25vd24gaW50ZXJmYWNlIG9yIGJ5IHVzaW5nCiAqIGR5bmFtaWMgaW52b2NhdGlvbnMuIFRoZSBvcmlnaW5hbCBpbnRlbnQgb2YgYEBwcm94eWAgKHRvIGltcGxlbWVudCBhIGNsYXNzCiAqIHRoYXQgaXNuJ3Qga25vd24gc3RhdGljYWxseSwgYXMgZG9jdW1lbnRlZCBhdCB0aGUgZW5kIG9mIHRoaXMgdGV4dCksCiAqIGlzIG5vdCBzdXBwb3J0ZWQgYnkgRGFydCAyLgogKiBUbyBjb250aW51ZSB0byBwZXJmb3JtIGR5bmFtaWMgaW52b2NhdGlvbnMgb24gYW4gb2JqZWN0LAogKiBpdCBzaG91bGQgYmUgYWNjZXNzZWQgdGhyb3VnaCBhIHJlZmVyZW5jZSBvZiB0eXBlIGBkeW5hbWljYC4KICoKICogVGhlIGFubm90YXRpb24gYEBwcm94eWAgbWFya3MgYSBjbGFzcyBhcyBpbXBsZW1lbnRpbmcgbWVtYmVycyBkeW5hbWljYWxseQogKiB0aHJvdWdoIGBub1N1Y2hNZXRob2RgLgogKgogKiBUaGUgYW5ub3RhdGlvbiBhcHBsaWVzIHRvIGFueSBjbGFzcy4gSXQgaXMgaW5oZXJpdGVkIGJ5IHN1YmNsYXNzZXMgZnJvbSBib3RoCiAqIHN1cGVyY2xhc3MgYW5kIGludGVyZmFjZXMuCiAqCiAqIElmIGEgY2xhc3MgaXMgYW5ub3RhdGVkIHdpdGggYEBwcm94eWAsIG9yIGl0IGltcGxlbWVudHMgYW55IGNsYXNzIHRoYXQgaXMKICogYW5ub3RhdGVkLCB0aGVuIGFsbCBtZW1iZXIgYWNjZXNzZXMgYXJlIGFsbG93ZWQgb24gYW4gb2JqZWN0IG9mIHRoYXQgdHlwZS4KICogQXMgc3VjaCwgaXQgaXMgbm90IGEgc3RhdGljIHR5cGUgd2FybmluZyB0byBhY2Nlc3MgYW55IG1lbWJlciBvZiB0aGUgb2JqZWN0CiAqIHdoaWNoIGlzIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgY2xhc3MsIG9yIHRvIGNhbGwgYSBtZXRob2Qgd2l0aCBhIGRpZmZlcmVudAogKiBudW1iZXIgb2YgcGFyYW1ldGVycyB0aGFuIGl0IGlzIGRlY2xhcmVkIHdpdGguCiAqCiAqIFRoZSBhbm5vdGF0aW9uIGRvZXMgbm90IGNoYW5nZSB3aGljaCBjbGFzc2VzIHRoZSBhbm5vdGF0ZWQgY2xhc3MgaW1wbGVtZW50cywKICogYW5kIGRvZXMgbm90IHByZXZlbnQgc3RhdGljIHdhcm5pbmdzIGZvciBhc3NpZ25pbmcgYW4gb2JqZWN0IHRvIGEgdmFyaWFibGUKICogd2l0aCBhIHN0YXRpYyB0eXBlIG5vdCBpbXBsZW1lbnRlZCBieSB0aGUgb2JqZWN0LgogKgogKiBUaGUgc3VwcHJlc3Npb24gb2Ygd2FybmluZ3Mgb25seSBhZmZlY3Qgc3RhdGljIHR5cGUgd2FybmluZ3MgYWJvdXQKICogbWVtYmVyIGFjY2Vzcy4KICogVGhlIHJ1bnRpbWUgdHlwZSBvZiB0aGUgb2JqZWN0IGlzIHVuYWZmZWN0ZWQuCiAqIEl0IGlzIG5vdCBjb25zaWRlcmVkIHRvIGltcGxlbWVudCBhbnkgc3BlY2lhbCBpbnRlcmZhY2VzLAogKiBzbyBhc3NpZ25pbmcgaXQgdG8gYSB0eXBlZCB2YXJpYWJsZSBtYXkgZmFpbCBpbiBjaGVja2VkIG1vZGUsCiAqIGFuZCB0ZXN0aW5nIGl0IHdpdGggdGhlIGBpc2Agb3BlcmF0b3IKICogd2lsbCBvbmx5IHJldHVybiB0cnVlIGZvciB0eXBlcyBpdCBhY3R1YWxseSBpbXBsZW1lbnRzIG9yIGV4dGVuZHMuCiAqIEFjY2Vzc2luZyBhIG1lbWJlciB3aGljaCBpc24ndCBpbXBsZW1lbnRlZCBieSB0aGUgY2xhc3MKICogd2lsbCBjYXVzZSB0aGUgYG5vU3VjaE1ldGhvZGAgbWV0aG9kIHRvIGJlIGNhbGxlZCBub3JtYWxseSwKICogdGhlIGBAcHJveHlgIGFubm90YXRpb24gbWVyZWx5IHN0YXRlcyB0aGUgaW50ZW50IHRvIGhhbmRsZSAoc29tZSBvZikgdGhvc2UKICogYG5vU3VjaE1ldGhvZGAgY2FsbHMgZ3JhY2VmdWxseS4KICoKICogQSBjbGFzcyB0aGF0IG1hcmtlZCBhcyBgQHByb3h5YCBzaG91bGQgb3ZlcnJpZGUgdGhlIGBub1N1Y2hNZXRob2RgCiAqIGRlY2xhcmVkIG9uIFtPYmplY3RdLgogKgogKiBUaGUgaW50ZW50IG9mIHRoZSBgQHByb3h5YCBub3RhdGlvbiBpcyB0byBjcmVhdGUgb2JqZWN0cyB0aGF0IGltcGxlbWVudCBhCiAqIHR5cGUgKG9yIG11bHRpcGxlIHR5cGVzKSB0aGF0IGFyZSBub3Qga25vd24gYXQgY29tcGlsZSB0aW1lLiBJZiB0aGUgdHlwZXMKICogYXJlIGtub3duIGF0IGNvbXBpbGUgdGltZSwgYSBjbGFzcyBjYW4gYmUgd3JpdHRlbiB0aGF0IGltcGxlbWVudHMgdGhlc2UKICogdHlwZXMuCiAqLwpAZGVwcmVjYXRlZApjb25zdCBPYmplY3QgcHJveHkgPSBfUHJveHkoKTsKCi8qKgogKiBBIGhpbnQgdG8gdG9vbHMuCiAqCiAqIFRvb2xzIHRoYXQgd29yayB3aXRoIERhcnQgcHJvZ3JhbXMgbWF5IGFjY2VwdCBoaW50cyB0byBndWlkZSB0aGVpciBiZWhhdmlvcgogKiBhcyBgcHJhZ21hYCBhbm5vdGF0aW9ucyBvbiBkZWNsYXJhdGlvbnMuCiAqIEVhY2ggdG9vbCBkZWNpZGVzIHdoaWNoIGhpbnRzIGl0IGFjY2VwdHMsIHdoYXQgdGhleSBtZWFuLCBhbmQgd2hldGhlciBhbmQKICogaG93IHRoZXkgYXBwbHkgdG8gc3ViLXBhcnRzIG9mIHRoZSBhbm5vdGF0ZWQgZW50aXR5LgogKgogKiBUb29scyB0aGF0IHJlY29nbml6ZSBwcmFnbWEgaGludHMgc2hvdWxkIHBpY2sgYSBwcmFnbWEgcHJlZml4IHRvIGlkZW50aWZ5CiAqIHRoZSB0b29sLiBUaGV5IHNob3VsZCByZWNvZ25pemUgYW55IGhpbnQgd2l0aCBhIFtuYW1lXSBzdGFydGluZyB3aXRoIHRoZWlyCiAqIHByZWZpeCBmb2xsb3dlZCBieSBgOmAgYXMgaWYgaXQgd2FzIGludGVuZGVkIGZvciB0aGF0IHRvb2wuIEEgaGludCB3aXRoIGEKICogcHJlZml4IGZvciBhbm90aGVyIHRvb2wgc2hvdWxkIGJlIGlnbm9yZWQgKHVubGVzcyBjb21wYXRpYmlsaXR5IHdpdGggdGhhdAogKiBvdGhlciB0b29sIGlzIGEgZ29hbCkuCiAqCiAqIEEgdG9vbCBtYXkgcmVjb2duaXplIHVucHJlZml4ZWQgbmFtZXMgYXMgd2VsbCwgaWYgdGhleSB3b3VsZCByZWNvZ25pemUgdGhhdAogKiBuYW1lIHdpdGggdGhlaXIgb3duIHByZWZpeCBpbiBmcm9udC4KICoKICogSWYgdGhlIGhpbnQgY2FuIGJlIHBhcmFtZXRlcml6ZWQsIGFuIGV4dHJhIFtvcHRpb25zXSBvYmplY3QgY2FuIGJlIGFkZGVkIGFzIHdlbGwuCiAqCiAqIEZvciBleGFtcGxlOgogKgogKiBgYGBkYXJ0CiAqIEBwcmFnbWEoJ1Rvb2w6cHJhZ21hLW5hbWUnLCBbcGFyYW0xLCBwYXJhbTIsIC4uLl0pCiAqIGNsYXNzIEZvbyB7IH0KICoKICogQHByYWdtYSgnT3RoZXJUb29sOm90aGVyLXByYWdtYScpCiAqIHZvaWQgZm9vKCkgeyB9CiAqIGBgYAogKgogKiBIZXJlIGNsYXNzIEZvbyBpcyBhbm5vdGF0ZWQgd2l0aCBhIFRvb2wgc3BlY2lmaWMgcHJhZ21hICdwcmFnbWEtbmFtZScgYW5kCiAqIGZ1bmN0aW9uIGZvbyBpcyBhbm5vdGF0ZWQgd2l0aCBhIHByYWdtYSAnb3RoZXItcHJhZ21hJyBzcGVjaWZpYyB0byBPdGhlclRvb2wuCiAqCiAqLwpAcHJhZ21hKCd2bTplbnRyeS1wb2ludCcpCmNsYXNzIHByYWdtYSB7CiAgLyoqCiAgICogVGhlIG5hbWUgb2YgdGhlIGhpbnQuCiAgICoKICAgKiBBIHN0cmluZyB0aGF0IGlzIHJlY29nbml6ZWQgYnkgb25lIG9yIG1vcmUgdG9vbHMsIG9yIHN1Y2ggYSBzdHJpbmcgcHJlZml4ZWQKICAgKiBieSBhIHRvb2wgaWRlbnRpZmllciBhbmQgYSBjb2xvbiwgd2hpY2ggaXMgb25seSByZWNvZ25pemVkIGJ5IHRoYXQKICAgKiBwYXJ0aWN1bGFyIHRvb2wuCiAgICovCiAgZmluYWwgU3RyaW5nIG5hbWU7CgogIC8qKiBPcHRpb25hbCBleHRyYSBkYXRhIHBhcmFtZXRlcml6aW5nIHRoZSBoaW50LiAqLwogIGZpbmFsIE9iamVjdCBvcHRpb25zOwoKICAvKiogQ3JlYXRlcyBhIGhpbnQgbmFtZWQgW25hbWVdIHdpdGggb3B0aW9uYWwgW29wdGlvbnNdLiAqLwogIGNvbnN0IGZhY3RvcnkgcHJhZ21hKFN0cmluZyBuYW1lLCBbT2JqZWN0IG9wdGlvbnNdKSA9IHByYWdtYS5fOwoKICBjb25zdCBwcmFnbWEuXyh0aGlzLm5hbWUsIFt0aGlzLm9wdGlvbnNdKTsKfQqA8gBOTjwBEwEETANEQQNOTQ4DTU9MRQNPPwNNQ1BGLAMeAzw6SgMDOwMsSB89TUxEUQMDTj1GBBMGSAVLUQ4GGAEGTCoFUFAgBiIBRiEBNwIBBDsEOgESFQIBBEcpA0tOPwNJSkIeA0tOHwNJUEI0A040BCUBBEMDIAQMFB4nAgEEPQMgBAwfAQ8SAgEEQANKRE5IHzxAA00bA1AeA01OT08yA1BONQNGEjE9QSlGOz9OJANGGQNNTUsKBAwfAQQUA08sTTgDTU5NTRoDTygDVQMQAws2EQMlEgcDTVEDBBoPBhsFUUgWBhUBNhgBPkIBLQIBGmRhcnQ6Y29yZS9hbm5vdGF0aW9ucy5kYXJ0LG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL2JpZ2ludC5kYXJ0sZQvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQW4gYXJiaXRyYXJpbHkgbGFyZ2UgaW50ZWdlci4KICovCmFic3RyYWN0IGNsYXNzIEJpZ0ludCBpbXBsZW1lbnRzIENvbXBhcmFibGU8QmlnSW50PiB7CiAgZXh0ZXJuYWwgc3RhdGljIEJpZ0ludCBnZXQgemVybzsKICBleHRlcm5hbCBzdGF0aWMgQmlnSW50IGdldCBvbmU7CiAgZXh0ZXJuYWwgc3RhdGljIEJpZ0ludCBnZXQgdHdvOwoKICAvKioKICAgKiBQYXJzZXMgW3NvdXJjZV0gYXMgYSwgcG9zc2libHkgc2lnbmVkLCBpbnRlZ2VyIGxpdGVyYWwgYW5kIHJldHVybnMgaXRzCiAgICogdmFsdWUuCiAgICoKICAgKiBUaGUgW3NvdXJjZV0gbXVzdCBiZSBhIG5vbi1lbXB0eSBzZXF1ZW5jZSBvZiBiYXNlLVtyYWRpeF0gZGlnaXRzLAogICAqIG9wdGlvbmFsbHkgcHJlZml4ZWQgd2l0aCBhIG1pbnVzIG9yIHBsdXMgc2lnbiAoJy0nIG9yICcrJykuCiAgICoKICAgKiBUaGUgW3JhZGl4XSBtdXN0IGJlIGluIHRoZSByYW5nZSAyLi4zNi4gVGhlIGRpZ2l0cyB1c2VkIGFyZQogICAqIGZpcnN0IHRoZSBkZWNpbWFsIGRpZ2l0cyAwLi45LCBhbmQgdGhlbiB0aGUgbGV0dGVycyAnYScuLid6JyB3aXRoCiAgICogdmFsdWVzIDEwIHRocm91Z2ggMzUuIEFsc28gYWNjZXB0cyB1cHBlci1jYXNlIGxldHRlcnMgd2l0aCB0aGUgc2FtZQogICAqIHZhbHVlcyBhcyB0aGUgbG93ZXItY2FzZSBvbmVzLgogICAqCiAgICogSWYgbm8gW3JhZGl4XSBpcyBnaXZlbiB0aGVuIGl0IGRlZmF1bHRzIHRvIDEwLiBJbiB0aGlzIGNhc2UsIHRoZSBbc291cmNlXQogICAqIGRpZ2l0cyBtYXkgYWxzbyBzdGFydCB3aXRoIGAweGAsIGluIHdoaWNoIGNhc2UgdGhlIG51bWJlciBpcyBpbnRlcnByZXRlZAogICAqIGFzIGEgaGV4YWRlY2ltYWwgbGl0ZXJhbCwgd2hpY2ggZWZmZWN0aXZlbHkgbWVhbnMgdGhhdCB0aGUgYDB4YCBpcyBpZ25vcmVkCiAgICogYW5kIHRoZSByYWRpeCBpcyBpbnN0ZWFkIHNldCB0byAxNi4KICAgKgogICAqIEZvciBhbnkgaW50IGBuYCBhbmQgcmFkaXggYHJgLCBpdCBpcyBndWFyYW50ZWVkIHRoYXQKICAgKiBgbiA9PSBpbnQucGFyc2Uobi50b1JhZGl4U3RyaW5nKHIpLCByYWRpeDogcilgLgogICAqCiAgICogVGhyb3dzIGEgW0Zvcm1hdEV4Y2VwdGlvbl0gaWYgdGhlIFtzb3VyY2VdIGlzIG5vdCBhIHZhbGlkIGludGVnZXIgbGl0ZXJhbCwKICAgKiBvcHRpb25hbGx5IHByZWZpeGVkIGJ5IGEgc2lnbi4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgQmlnSW50IHBhcnNlKFN0cmluZyBzb3VyY2UsIHtpbnQgcmFkaXh9KTsKCiAgLyoqCiAgICogUGFyc2VzIFtzb3VyY2VdIGFzIGEsIHBvc3NpYmx5IHNpZ25lZCwgaW50ZWdlciBsaXRlcmFsIGFuZCByZXR1cm5zIGl0cwogICAqIHZhbHVlLgogICAqCiAgICogQXMgW3BhcnNlXSBleGNlcHQgdGhhdCB0aGlzIG1ldGhvZCByZXR1cm5zIGBudWxsYCBpZiB0aGUgaW5wdXQgaXMgbm90CiAgICogdmFsaWQKICAgKi8KICBleHRlcm5hbCBzdGF0aWMgQmlnSW50IHRyeVBhcnNlKFN0cmluZyBzb3VyY2UsIHtpbnQgcmFkaXh9KTsKCiAgLy8vIEFsbG9jYXRlcyBhIGJpZyBpbnRlZ2VyIGZyb20gdGhlIHByb3ZpZGVkIFt2YWx1ZV0gbnVtYmVyLgogIGV4dGVybmFsIGZhY3RvcnkgQmlnSW50LmZyb20obnVtIHZhbHVlKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogRm9yIGFueSBpbnRlZ2VyIGB4YCwgdGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyBgeCA8IDAgPyAteCA6IHhgLgogICAqLwogIEJpZ0ludCBhYnMoKTsKCiAgLyoqCiAgICogUmV0dXJuIHRoZSBuZWdhdGl2ZSB2YWx1ZSBvZiB0aGlzIGludGVnZXIuCiAgICoKICAgKiBUaGUgcmVzdWx0IG9mIG5lZ2F0aW5nIGFuIGludGVnZXIgYWx3YXlzIGhhcyB0aGUgb3Bwb3NpdGUgc2lnbiwgZXhjZXB0CiAgICogZm9yIHplcm8sIHdoaWNoIGlzIGl0cyBvd24gbmVnYXRpb24uCiAgICovCiAgQmlnSW50IG9wZXJhdG9yIC0oKTsKCiAgLy8vIEFkZGl0aW9uIG9wZXJhdG9yLgogIEJpZ0ludCBvcGVyYXRvciArKEJpZ0ludCBvdGhlcik7CgogIC8vLyBTdWJ0cmFjdGlvbiBvcGVyYXRvci4KICBCaWdJbnQgb3BlcmF0b3IgLShCaWdJbnQgb3RoZXIpOwoKICAvLy8gTXVsdGlwbGljYXRpb24gb3BlcmF0b3IuCiAgQmlnSW50IG9wZXJhdG9yICooQmlnSW50IG90aGVyKTsKCiAgLy8vIERpdmlzaW9uIG9wZXJhdG9yLgogIGRvdWJsZSBvcGVyYXRvciAvKEJpZ0ludCBvdGhlcik7CgogIC8qKgogICAqIFRydW5jYXRpbmcgZGl2aXNpb24gb3BlcmF0b3IuCiAgICoKICAgKiBQZXJmb3JtcyBhIHRydW5jYXRpbmcgaW50ZWdlciBkaXZpc2lvbiwgd2hlcmUgdGhlIHJlbWFpbmRlciBpcyBkaXNjYXJkZWQuCiAgICoKICAgKiBUaGUgcmVtYWluZGVyIGNhbiBiZSBjb21wdXRlZCB1c2luZyB0aGUgW3JlbWFpbmRlcl0gbWV0aG9kLgogICAqCiAgICogRXhhbXBsZXM6CiAgICogYGBgCiAgICogdmFyIHNldmVuID0gbmV3IEJpZ0ludC5mcm9tKDcpOwogICAqIHZhciB0aHJlZSA9IG5ldyBCaWdJbnQuZnJvbSgzKTsKICAgKiBzZXZlbiB+LyB0aHJlZTsgICAgLy8gPT4gMgogICAqICgtc2V2ZW4pIH4vIHRocmVlOyAvLyA9PiAtMgogICAqIHNldmVuIH4vIC10aHJlZTsgICAvLyA9PiAtMgogICAqIHNldmVuLnJlbWFpbmRlcih0aHJlZSk7ICAgIC8vID0+IDEKICAgKiAoLXNldmVuKS5yZW1haW5kZXIodGhyZWUpOyAvLyA9PiAtMQogICAqIHNldmVuLnJlbWFpbmRlcigtdGhyZWUpOyAgIC8vID0+IDEKICAgKiBgYGAKICAgKi8KICBCaWdJbnQgb3BlcmF0b3Igfi8oQmlnSW50IG90aGVyKTsKCiAgLyoqCiAgICogRXVjbGlkZWFuIG1vZHVsbyBvcGVyYXRvci4KICAgKgogICAqIFJldHVybnMgdGhlIHJlbWFpbmRlciBvZiB0aGUgRXVjbGlkZWFuIGRpdmlzaW9uLiBUaGUgRXVjbGlkZWFuIGRpdmlzaW9uIG9mCiAgICogdHdvIGludGVnZXJzIGBhYCBhbmQgYGJgIHlpZWxkcyB0d28gaW50ZWdlcnMgYHFgIGFuZCBgcmAgc3VjaCB0aGF0CiAgICogYGEgPT0gYiAqIHEgKyByYCBhbmQgYDAgPD0gciA8IGIuYWJzKClgLgogICAqCiAgICogVGhlIHNpZ24gb2YgdGhlIHJldHVybmVkIHZhbHVlIGByYCBpcyBhbHdheXMgcG9zaXRpdmUuCiAgICoKICAgKiBTZWUgW3JlbWFpbmRlcl0gZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIHRydW5jYXRpbmcgZGl2aXNpb24uCiAgICovCiAgQmlnSW50IG9wZXJhdG9yICUoQmlnSW50IG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIHRoZSB0cnVuY2F0aW5nIGRpdmlzaW9uIG9mIGB0aGlzYCBieSBbb3RoZXJdLgogICAqCiAgICogVGhlIHJlc3VsdCBgcmAgb2YgdGhpcyBvcGVyYXRpb24gc2F0aXNmaWVzOgogICAqIGB0aGlzID09ICh0aGlzIH4vIG90aGVyKSAqIG90aGVyICsgcmAuCiAgICogQXMgYSBjb25zZXF1ZW5jZSB0aGUgcmVtYWluZGVyIGByYCBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aWRlciBgdGhpc2AuCiAgICovCiAgQmlnSW50IHJlbWFpbmRlcihCaWdJbnQgb3RoZXIpOwoKICAvKioKICAgKiBTaGlmdCB0aGUgYml0cyBvZiB0aGlzIGludGVnZXIgdG8gdGhlIGxlZnQgYnkgW3NoaWZ0QW1vdW50XS4KICAgKgogICAqIFNoaWZ0aW5nIHRvIHRoZSBsZWZ0IG1ha2VzIHRoZSBudW1iZXIgbGFyZ2VyLCBlZmZlY3RpdmVseSBtdWx0aXBseWluZwogICAqIHRoZSBudW1iZXIgYnkgYHBvdygyLCBzaGlmdEluZGV4KWAuCiAgICoKICAgKiBUaGVyZSBpcyBubyBsaW1pdCBvbiB0aGUgc2l6ZSBvZiB0aGUgcmVzdWx0LiBJdCBtYXkgYmUgcmVsZXZhbnQgdG8KICAgKiBsaW1pdCBpbnRlcm1lZGlhdGUgdmFsdWVzIGJ5IHVzaW5nIHRoZSAiYW5kIiBvcGVyYXRvciB3aXRoIGEgc3VpdGFibGUKICAgKiBtYXNrLgogICAqCiAgICogSXQgaXMgYW4gZXJyb3IgaWYgW3NoaWZ0QW1vdW50XSBpcyBuZWdhdGl2ZS4KICAgKi8KICBCaWdJbnQgb3BlcmF0b3IgPDwoaW50IHNoaWZ0QW1vdW50KTsKCiAgLyoqCiAgICogU2hpZnQgdGhlIGJpdHMgb2YgdGhpcyBpbnRlZ2VyIHRvIHRoZSByaWdodCBieSBbc2hpZnRBbW91bnRdLgogICAqCiAgICogU2hpZnRpbmcgdG8gdGhlIHJpZ2h0IG1ha2VzIHRoZSBudW1iZXIgc21hbGxlciBhbmQgZHJvcHMgdGhlIGxlYXN0CiAgICogc2lnbmlmaWNhbnQgYml0cywgZWZmZWN0aXZlbHkgZG9pbmcgYW4gaW50ZWdlciBkaXZpc2lvbiBieQogICAqYHBvdygyLCBzaGlmdEluZGV4KWAuCiAgICoKICAgKiBJdCBpcyBhbiBlcnJvciBpZiBbc2hpZnRBbW91bnRdIGlzIG5lZ2F0aXZlLgogICAqLwogIEJpZ0ludCBvcGVyYXRvciA+PihpbnQgc2hpZnRBbW91bnQpOwoKICAvKioKICAgKiBCaXQtd2lzZSBhbmQgb3BlcmF0b3IuCiAgICoKICAgKiBUcmVhdGluZyBib3RoIGB0aGlzYCBhbmQgW290aGVyXSBhcyBzdWZmaWNpZW50bHkgbGFyZ2UgdHdvJ3MgY29tcG9uZW50CiAgICogaW50ZWdlcnMsIHRoZSByZXN1bHQgaXMgYSBudW1iZXIgd2l0aCBvbmx5IHRoZSBiaXRzIHNldCB0aGF0IGFyZSBzZXQgaW4KICAgKiBib3RoIGB0aGlzYCBhbmQgW290aGVyXQogICAqCiAgICogT2YgYm90aCBvcGVyYW5kcyBhcmUgbmVnYXRpdmUsIHRoZSByZXN1bHQgaXMgbmVnYXRpdmUsIG90aGVyd2lzZQogICAqIHRoZSByZXN1bHQgaXMgbm9uLW5lZ2F0aXZlLgogICAqLwogIEJpZ0ludCBvcGVyYXRvciAmKEJpZ0ludCBvdGhlcik7CgogIC8qKgogICAqIEJpdC13aXNlIG9yIG9wZXJhdG9yLgogICAqCiAgICogVHJlYXRpbmcgYm90aCBgdGhpc2AgYW5kIFtvdGhlcl0gYXMgc3VmZmljaWVudGx5IGxhcmdlIHR3bydzIGNvbXBvbmVudAogICAqIGludGVnZXJzLCB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggdGhlIGJpdHMgc2V0IHRoYXQgYXJlIHNldCBpbiBlaXRoZXIKICAgKiBvZiBgdGhpc2AgYW5kIFtvdGhlcl0KICAgKgogICAqIElmIGJvdGggb3BlcmFuZHMgYXJlIG5vbi1uZWdhdGl2ZSwgdGhlIHJlc3VsdCBpcyBub24tbmVnYXRpdmUsCiAgICogb3RoZXJ3aXNlIHRoZSByZXN1bHQgdXMgbmVnYXRpdmUuCiAgICovCiAgQmlnSW50IG9wZXJhdG9yIHwoQmlnSW50IG90aGVyKTsKCiAgLyoqCiAgICogQml0LXdpc2UgZXhjbHVzaXZlLW9yIG9wZXJhdG9yLgogICAqCiAgICogVHJlYXRpbmcgYm90aCBgdGhpc2AgYW5kIFtvdGhlcl0gYXMgc3VmZmljaWVudGx5IGxhcmdlIHR3bydzIGNvbXBvbmVudAogICAqIGludGVnZXJzLCB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggdGhlIGJpdHMgc2V0IHRoYXQgYXJlIHNldCBpbiBvbmUsCiAgICogYnV0IG5vdCBib3RoLCBvZiBgdGhpc2AgYW5kIFtvdGhlcl0KICAgKgogICAqIElmIHRoZSBvcGVyYW5kcyBoYXZlIHRoZSBzYW1lIHNpZ24sIHRoZSByZXN1bHQgaXMgbm9uLW5lZ2F0aXZlLAogICAqIG90aGVyd2lzZSB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLgogICAqLwogIEJpZ0ludCBvcGVyYXRvciBeKEJpZ0ludCBvdGhlcik7CgogIC8qKgogICAqIFRoZSBiaXQtd2lzZSBuZWdhdGUgb3BlcmF0b3IuCiAgICoKICAgKiBUcmVhdGluZyBgdGhpc2AgYXMgYSBzdWZmaWNpZW50bHkgbGFyZ2UgdHdvJ3MgY29tcG9uZW50IGludGVnZXIsCiAgICogdGhlIHJlc3VsdCBpcyBhIG51bWJlciB3aXRoIHRoZSBvcHBvc2l0ZSBiaXRzIHNldC4KICAgKgogICAqIFRoaXMgbWFwcyBhbnkgaW50ZWdlciBgeGAgdG8gYC14IC0gMWAuCiAgICovCiAgQmlnSW50IG9wZXJhdG9yIH4oKTsKCiAgLyoqIFJlbGF0aW9uYWwgbGVzcyB0aGFuIG9wZXJhdG9yLiAqLwogIGJvb2wgb3BlcmF0b3IgPChCaWdJbnQgb3RoZXIpOwoKICAvKiogUmVsYXRpb25hbCBsZXNzIHRoYW4gb3IgZXF1YWwgb3BlcmF0b3IuICovCiAgYm9vbCBvcGVyYXRvciA8PShCaWdJbnQgb3RoZXIpOwoKICAvKiogUmVsYXRpb25hbCBncmVhdGVyIHRoYW4gb3BlcmF0b3IuICovCiAgYm9vbCBvcGVyYXRvciA+KEJpZ0ludCBvdGhlcik7CgogIC8qKiBSZWxhdGlvbmFsIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCBvcGVyYXRvci4gKi8KICBib29sIG9wZXJhdG9yID49KEJpZ0ludCBvdGhlcik7CgogIC8qKgogICAqIENvbXBhcmVzIHRoaXMgdG8gYG90aGVyYC4KICAgKgogICAqIFJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIgaWYgYHRoaXNgIGlzIGxlc3MgdGhhbiBgb3RoZXJgLCB6ZXJvIGlmIHRoZXkgYXJlCiAgICogZXF1YWwsIGFuZCBhIHBvc2l0aXZlIG51bWJlciBpZiBgdGhpc2AgaXMgZ3JlYXRlciB0aGFuIGBvdGhlcmAuCiAgICovCiAgaW50IGNvbXBhcmVUbyhCaWdJbnQgb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBtaW5pbXVtIG51bWJlciBvZiBiaXRzIHJlcXVpcmVkIHRvIHN0b3JlIHRoaXMgYmlnIGludGVnZXIuCiAgICoKICAgKiBUaGUgbnVtYmVyIG9mIGJpdHMgZXhjbHVkZXMgdGhlIHNpZ24gYml0LCB3aGljaCBnaXZlcyB0aGUgbmF0dXJhbCBsZW5ndGgKICAgKiBmb3Igbm9uLW5lZ2F0aXZlICh1bnNpZ25lZCkgdmFsdWVzLiAgTmVnYXRpdmUgdmFsdWVzIGFyZSBjb21wbGVtZW50ZWQgdG8KICAgKiByZXR1cm4gdGhlIGJpdCBwb3NpdGlvbiBvZiB0aGUgZmlyc3QgYml0IHRoYXQgZGlmZmVycyBmcm9tIHRoZSBzaWduIGJpdC4KICAgKgogICAqIFRvIGZpbmQgdGhlIG51bWJlciBvZiBiaXRzIG5lZWRlZCB0byBzdG9yZSB0aGUgdmFsdWUgYXMgYSBzaWduZWQgdmFsdWUsCiAgICogYWRkIG9uZSwgaS5lLiB1c2UgYHguYml0TGVuZ3RoICsgMWAuCiAgICoKICAgKiBgYGAKICAgKiB4LmJpdExlbmd0aCA9PSAoLXgtMSkuYml0TGVuZ3RoCiAgICoKICAgKiBuZXcgQmlnSW50LmZyb20oMykuYml0TGVuZ3RoID09IDI7ICAgLy8gMDAwMDAwMTEKICAgKiBuZXcgQmlnSW50LmZyb20oMikuYml0TGVuZ3RoID09IDI7ICAgLy8gMDAwMDAwMTAKICAgKiBuZXcgQmlnSW50LmZyb20oMSkuYml0TGVuZ3RoID09IDE7ICAgLy8gMDAwMDAwMDEKICAgKiBuZXcgQmlnSW50LmZyb20oMCkuYml0TGVuZ3RoID09IDA7ICAgLy8gMDAwMDAwMDAKICAgKiBuZXcgQmlnSW50LmZyb20oLTEpLmJpdExlbmd0aCA9PSAwOyAgLy8gMTExMTExMTEKICAgKiBuZXcgQmlnSW50LmZyb20oLTIpLmJpdExlbmd0aCA9PSAxOyAgLy8gMTExMTExMTAKICAgKiBuZXcgQmlnSW50LmZyb20oLTMpLmJpdExlbmd0aCA9PSAyOyAgLy8gMTExMTExMDEKICAgKiBuZXcgQmlnSW50LmZyb20oLTQpLmJpdExlbmd0aCA9PSAyOyAgLy8gMTExMTExMDAKICAgKiBgYGAKICAgKi8KICBpbnQgZ2V0IGJpdExlbmd0aDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc2lnbiBvZiB0aGlzIGJpZyBpbnRlZ2VyLgogICAqCiAgICogUmV0dXJucyAwIGZvciB6ZXJvLCAtMSBmb3IgdmFsdWVzIGxlc3MgdGhhbiB6ZXJvIGFuZAogICAqICsxIGZvciB2YWx1ZXMgZ3JlYXRlciB0aGFuIHplcm8uCiAgICovCiAgaW50IGdldCBzaWduOwoKICAvLy8gV2hldGhlciB0aGlzIGJpZyBpbnRlZ2VyIGlzIGV2ZW4uCiAgYm9vbCBnZXQgaXNFdmVuOwoKICAvLy8gV2hldGhlciB0aGlzIGJpZyBpbnRlZ2VyIGlzIG9kZC4KICBib29sIGdldCBpc09kZDsKCiAgLy8vIFdoZXRoZXIgdGhpcyBudW1iZXIgaXMgbmVnYXRpdmUuCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZTsKCiAgLyoqCiAgICogUmV0dXJucyBgdGhpc2AgdG8gdGhlIHBvd2VyIG9mIFtleHBvbmVudF0uCiAgICoKICAgKiBSZXR1cm5zIFtvbmVdIGlmIHRoZSBbZXhwb25lbnRdIGVxdWFscyAwLgogICAqCiAgICogVGhlIFtleHBvbmVudF0gbXVzdCBvdGhlcndpc2UgYmUgcG9zaXRpdmUuCiAgICoKICAgKiBUaGUgcmVzdWx0IGlzIGFsd2F5cyBlcXVhbCB0byB0aGUgbWF0aGVtYXRpY2FsIHJlc3VsdCBvZiB0aGlzIHRvIHRoZSBwb3dlcgogICAqIFtleHBvbmVudF0sIG9ubHkgbGltaXRlZCBieSB0aGUgYXZhaWxhYmxlIG1lbW9yeS4KICAgKi8KICBCaWdJbnQgcG93KGludCBleHBvbmVudCk7CgogIC8qKgogICAqIFJldHVybnMgdGhpcyBpbnRlZ2VyIHRvIHRoZSBwb3dlciBvZiBbZXhwb25lbnRdIG1vZHVsbyBbbW9kdWx1c10uCiAgICoKICAgKiBUaGUgW2V4cG9uZW50XSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgW21vZHVsdXNdIG11c3QgYmUKICAgKiBwb3NpdGl2ZS4KICAgKi8KICBCaWdJbnQgbW9kUG93KEJpZ0ludCBleHBvbmVudCwgQmlnSW50IG1vZHVsdXMpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBtb2R1bGFyIG11bHRpcGxpY2F0aXZlIGludmVyc2Ugb2YgdGhpcyBiaWcgaW50ZWdlcgogICAqIG1vZHVsbyBbbW9kdWx1c10uCiAgICoKICAgKiBUaGUgW21vZHVsdXNdIG11c3QgYmUgcG9zaXRpdmUuCiAgICoKICAgKiBJdCBpcyBhbiBlcnJvciBpZiBubyBtb2R1bGFyIGludmVyc2UgZXhpc3RzLgogICAqLwogIC8vIFJldHVybnMgMS90aGlzICUgbW9kdWx1cywgd2l0aCBtb2R1bHVzID4gMC4KICBCaWdJbnQgbW9kSW52ZXJzZShCaWdJbnQgbW9kdWx1cyk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yIG9mIHRoaXMgYmlnIGludGVnZXIgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBJZiBlaXRoZXIgbnVtYmVyIGlzIG5vbi16ZXJvLCB0aGUgcmVzdWx0IGlzIHRoZSBudW1lcmljYWxseSBncmVhdGVzdAogICAqIGludGVnZXIgZGl2aWRpbmcgYm90aCBgdGhpc2AgYW5kIGBvdGhlcmAuCiAgICoKICAgKiBUaGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIG9yZGVyLAogICAqIHNvIGB4LmdjZCh5KWAgaXMgIGFsd2F5cyB0aGUgc2FtZSBhcyBgeS5nY2QoeClgLgogICAqCiAgICogRm9yIGFueSBpbnRlZ2VyIGB4YCwgYHguZ2NkKHgpYCBpcyBgeC5hYnMoKWAuCiAgICoKICAgKiBJZiBib3RoIGB0aGlzYCBhbmQgYG90aGVyYCBpcyB6ZXJvLCB0aGUgcmVzdWx0IGlzIGFsc28gemVyby4KICAgKi8KICBCaWdJbnQgZ2NkKEJpZ0ludCBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxlYXN0IHNpZ25pZmljYW50IFt3aWR0aF0gYml0cyBvZiB0aGlzIGJpZyBpbnRlZ2VyIGFzIGEKICAgKiBub24tbmVnYXRpdmUgbnVtYmVyIChpLmUuIHVuc2lnbmVkIHJlcHJlc2VudGF0aW9uKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBoYXMKICAgKiB6ZXJvcyBpbiBhbGwgYml0IHBvc2l0aW9ucyBoaWdoZXIgdGhhbiBbd2lkdGhdLgogICAqCiAgICogYGBgCiAgICogbmV3IEJpZ0ludC5mcm9tKC0xKS50b1Vuc2lnbmVkKDUpID09IDMxICAgLy8gMTExMTExMTEgIC0+ICAwMDAxMTExMQogICAqIGBgYAogICAqCiAgICogVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gc2ltdWxhdGUgYXJpdGhtZXRpYyBmcm9tIGxvdyBsZXZlbCBsYW5ndWFnZXMuCiAgICogRm9yIGV4YW1wbGUsIHRvIGluY3JlbWVudCBhbiA4IGJpdCBxdWFudGl0eToKICAgKgogICAqIGBgYAogICAqIHEgPSAocSArIDEpLnRvVW5zaWduZWQoOCk7CiAgICogYGBgCiAgICoKICAgKiBgcWAgd2lsbCBjb3VudCBmcm9tIGAwYCB1cCB0byBgMjU1YCBhbmQgdGhlbiB3cmFwIGFyb3VuZCB0byBgMGAuCiAgICoKICAgKiBJZiB0aGUgaW5wdXQgZml0cyBpbiBbd2lkdGhdIGJpdHMgd2l0aG91dCB0cnVuY2F0aW9uLCB0aGUgcmVzdWx0IGlzIHRoZQogICAqIHNhbWUgYXMgdGhlIGlucHV0LiAgVGhlIG1pbmltdW0gd2lkdGggbmVlZGVkIHRvIGF2b2lkIHRydW5jYXRpb24gb2YgYHhgIGlzCiAgICogZ2l2ZW4gYnkgYHguYml0TGVuZ3RoYCwgaS5lLgogICAqCiAgICogYGBgCiAgICogeCA9PSB4LnRvVW5zaWduZWQoeC5iaXRMZW5ndGgpOwogICAqIGBgYAogICAqLwogIEJpZ0ludCB0b1Vuc2lnbmVkKGludCB3aWR0aCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxlYXN0IHNpZ25pZmljYW50IFt3aWR0aF0gYml0cyBvZiB0aGlzIGludGVnZXIsIGV4dGVuZGluZyB0aGUKICAgKiBoaWdoZXN0IHJldGFpbmVkIGJpdCB0byB0aGUgc2lnbi4gIFRoaXMgaXMgdGhlIHNhbWUgYXMgdHJ1bmNhdGluZyB0aGUgdmFsdWUKICAgKiB0byBmaXQgaW4gW3dpZHRoXSBiaXRzIHVzaW5nIGFuIHNpZ25lZCAyLXMgY29tcGxlbWVudCByZXByZXNlbnRhdGlvbi4gIFRoZQogICAqIHJldHVybmVkIHZhbHVlIGhhcyB0aGUgc2FtZSBiaXQgdmFsdWUgaW4gYWxsIHBvc2l0aW9ucyBoaWdoZXIgdGhhbiBbd2lkdGhdLgogICAqCiAgICogYGBgCiAgICogdmFyIGJpZzE1ID0gbmV3IEJpZ0ludC5mcm9tKDE1KTsKICAgKiB2YXIgYmlnMTYgPSBuZXcgQmlnSW50LmZyb20oMTYpOwogICAqIHZhciBiaWcyMzkgPSBuZXcgQmlnSW50LmZyb20oMjM5KTsKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVi0tc2lnbiBiaXQtVgogICAqIGJpZzE2LnRvU2lnbmVkKDUpID09IC1iaWcxNiAgIC8vICAwMDAxMDAwMCAtPiAxMTExMDAwMAogICAqIGJpZzIzOS50b1NpZ25lZCg1KSA9PSBiaWcxNSAgIC8vICAxMTEwMTExMSAtPiAwMDAwMTExMQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICBeCiAgICogYGBgCiAgICoKICAgKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmUgdXNlZCB0byBzaW11bGF0ZSBhcml0aG1ldGljIGZyb20gbG93IGxldmVsIGxhbmd1YWdlcy4KICAgKiBGb3IgZXhhbXBsZSwgdG8gaW5jcmVtZW50IGFuIDggYml0IHNpZ25lZCBxdWFudGl0eToKICAgKgogICAqIGBgYAogICAqIHEgPSAocSArIDEpLnRvU2lnbmVkKDgpOwogICAqIGBgYAogICAqCiAgICogYHFgIHdpbGwgY291bnQgZnJvbSBgMGAgdXAgdG8gYDEyN2AsIHdyYXAgdG8gYC0xMjhgIGFuZCBjb3VudCBiYWNrIHVwIHRvCiAgICogYDEyN2AuCiAgICoKICAgKiBJZiB0aGUgaW5wdXQgdmFsdWUgZml0cyBpbiBbd2lkdGhdIGJpdHMgd2l0aG91dCB0cnVuY2F0aW9uLCB0aGUgcmVzdWx0IGlzCiAgICogdGhlIHNhbWUgYXMgdGhlIGlucHV0LiAgVGhlIG1pbmltdW0gd2lkdGggbmVlZGVkIHRvIGF2b2lkIHRydW5jYXRpb24gb2YgYHhgCiAgICogaXMgYHguYml0TGVuZ3RoICsgMWAsIGkuZS4KICAgKgogICAqIGBgYAogICAqIHggPT0geC50b1NpZ25lZCh4LmJpdExlbmd0aCArIDEpOwogICAqIGBgYAogICAqLwogIEJpZ0ludCB0b1NpZ25lZChpbnQgd2lkdGgpOwoKICAvKioKICAgKiBXaGV0aGVyIHRoaXMgYmlnIGludGVnZXIgY2FuIGJlIHJlcHJlc2VudGVkIGFzIGFuIGBpbnRgIHdpdGhvdXQgbG9zaW5nCiAgICogcHJlY2lzaW9uLgogICAqCiAgICogV2FybmluZzogdGhpcyBmdW5jdGlvbiBtYXkgZ2l2ZSBhIGRpZmZlcmVudCByZXN1bHQgb24KICAgKiBkYXJ0MmpzLCBkZXYgY29tcGlsZXIsIGFuZCB0aGUgVk0sIGR1ZSB0byB0aGUgZGlmZmVyZW5jZXMgaW4KICAgKiBpbnRlZ2VyIHByZWNpc2lvbi4KICAgKi8KICBib29sIGdldCBpc1ZhbGlkSW50OwoKICAvKioKICAgKiBSZXR1cm5zIHRoaXMgW0JpZ0ludF0gYXMgYW4gW2ludF0uCiAgICoKICAgKiBJZiB0aGUgbnVtYmVyIGRvZXMgbm90IGZpdCwgY2xhbXBzIHRvIHRoZSBtYXggKG9yIG1pbikKICAgKiBpbnRlZ2VyLgogICAqCiAgICogV2FybmluZzogdGhlIGNsYW1waW5nIGJlaGF2ZXMgZGlmZmVyZW50bHkgb24gZGFydDJqcywgZGV2CiAgICogY29tcGlsZXIsIGFuZCB0aGUgVk0sIGR1ZSB0byB0aGUgZGlmZmVyZW5jZXMgaW4gaW50ZWdlcgogICAqIHByZWNpc2lvbi4KICAgKi8KICBpbnQgdG9JbnQoKTsKCiAg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ZW52aXJvbm1lbnQgZGVjbGFyYXRpb24gW25hbWVdLgogICAqCiAgICogVGhlIGJvb2xlYW4gdmFsdWUgb2YgdGhlIGRlY2xhcmF0aW9uIGlzIGB0cnVlYCBpZiB0aGUgZGVjbGFyZWQgdmFsdWUgaXMKICAgKiB0aGUgc3RyaW5nIGAidHJ1ZSJgLCBhbmQgYGZhbHNlYCBpZiB0aGUgdmFsdWUgaXMgYCJmYWxzZSJgLgogICAqCiAgICogSW4gYWxsIG90aGVyIGNhc2VzLCBpbmNsdWRpbmcgd2hlbiB0aGVyZSBpcyBubyBkZWNsYXJhdGlvbiBmb3IgYG5hbWVgLAogICAqIHRoZSByZXN1bHQgaXMgdGhlIFtkZWZhdWx0VmFsdWVdLgogICAqCiAgICogVGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyB3b3VsZCBiZSByZXR1cm5lZCBieToKICAgKiBgYGBkYXJ0CiAgICogKGNvbnN0IFN0cmluZy5mcm9tRW52aXJvbm1lbnQobmFtZSkgPT0gInRydWUiKQogICAqICAgICA/IHRydWUKICAgKiAgICAgOiAoY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudChuYW1lKSA9PSAiZmFsc2UiKQogICAqICAgICAgICAgPyBmYWxzZQogICAqICAgICAgICAgOiBkZWZhdWx0VmFsdWUKICAgKiBgYGAKICAgKiBFeGFtcGxlOgogICAqIGBgYGRhcnQKICAgKiBjb25zdCBsb2dnaW5nRmxhZyA9IGNvbnN0IGJvb2wuZnJvbUVudmlyb25tZW50KCJsb2dnaW5nIik7CiAgICogYGBgCiAgICogSWYgeW91IHdhbnQgdG8gdXNlIGEgZGlmZmVyZW50IHRydXRoLXN0cmluZyB0aGFuIGAidHJ1ZSJgLCB5b3UgY2FuIHVzZSB0aGUKICAgKiBbU3RyaW5nLmZyb21FbnZpcm9ubWVudF0gY29uc3RydWN0b3IgZGlyZWN0bHk6CiAgICogYGBgZGFydAogICAqIGNvbnN0IGlzTG9nZ2luZ09uID0gKGNvbnN0IFN0cmluZy5mcm9tRW52aXJvbm1lbnQoImxvZ2dpbmciKSA9PSAib24iKTsKICAgKiBgYGAKICAgKi8KICAvLyBUaGUgLmZyb21FbnZpcm9ubWVudCgpIGNvbnN0cnVjdG9ycyBhcmUgc3BlY2lhbCBpbiB0aGF0IHdlIGRvIG5vdCB3YW50CiAgLy8gdXNlcnMgdG8gY2FsbCB0aGVtIHVzaW5nICJuZXciLiBXZSBwcm9oaWJpdCB0aGF0IGJ5IGdpdmluZyB0aGVtIGJvZGllcwogIC8vIHRoYXQgdGhyb3csIGV2ZW4gdGhvdWdoIGNvbnN0IGNvbnN0cnVjdG9ycyBhcmUgbm90IGFsbG93ZWQgdG8gaGF2ZSBib2RpZXMuCiAgLy8gRGlzYWJsZSB0aG9zZSBzdGF0aWMgZXJyb3JzLgogIC8vaWdub3JlOiBjb25zdF9jb25zdHJ1Y3Rvcl93aXRoX2JvZHkKICAvL2lnbm9yZTogY29uc3RfZmFjdG9yeQogIGV4dGVybmFsIGNvbnN0IGZhY3RvcnkgYm9vbC5mcm9tRW52aXJvbm1lbnQoU3RyaW5nIG5hbWUsCiAgICAgIHtib29sIGRlZmF1bHRWYWx1ZSA9IGZhbHNlfSk7CgogIGV4dGVybmFsIGludCBnZXQgaGFzaENvZGU7CgogIC8vLyBUaGUgbG9naWNhbCBjb25qdW5jdGlvbiAoImFuZCIpIG9mIHRoaXMgYW5kIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGJvdGggdGhpcyBhbmQgW290aGVyXSBhcmUgYHRydWVgLCBhbmQgYGZhbHNlYCBvdGhlcndpc2UuCiAgLy9UT0RPKGxybik6IFJlbW92ZSAiYXMgYm9vbCIgaW4gRGFydCAyLgogIEBTaW5jZSgiMi4xIikKICBib29sIG9wZXJhdG9yICYoYm9vbCBvdGhlcikgPT4gKG90aGVyIGFzIGJvb2wpICYmIHRoaXM7CgogIC8vLyBUaGUgbG9naWNhbCBkaXNqdW5jdGlvbiAoImluY2x1c2l2ZSBvciIpIG9mIHRoaXMgYW5kIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFJldHVybnMgYHRydWVgIGlmIGVpdGhlciB0aGlzIG9yIFtvdGhlcl0gaXMgYHRydWVgLCBhbmQgYGZhbHNlYCBvdGhlcndpc2UuCiAgQFNpbmNlKCIyLjEiKQogIGJvb2wgb3BlcmF0b3IgfChib29sIG90aGVyKSA9PiAob3RoZXIgYXMgYm9vbCkgfHwgdGhpczsKCiAgLy8vIFRoZSBsb2dpY2FsIGV4Y2x1c2l2ZSBkaXNqdW5jdGlvbiAoImV4Y2x1c2l2ZSBvciIpIG9mIHRoaXMgYW5kIFtvdGhlcl0uCiAgLy8vCiAgLy8vIFJldHVybnMgd2hldGhlciB0aGlzIGFuZCBbb3RoZXJdIGFyZSBuZWl0aGVyIGJvdGggYHRydWVgIG5vciBib3RoIGBmYWxzZWAuCiAgQFNpbmNlKCIyLjEiKQogIGJvb2wgb3BlcmF0b3IgXihib29sIG90aGVyKSA9PiAhKG90aGVyIGFzIGJvb2wpID09IHRoaXM7CgogIC8qKgogICAqIFJldHVybnMgZWl0aGVyIGAidHJ1ZSJgIGZvciBgdHJ1ZWAgYW5kIGAiZmFsc2UiYCBmb3IgYGZhbHNlYC4KICAgKi8KICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICByZXR1cm4gdGhpcyA/ICJ0cnVlIiA6ICJmYWxzZSI7CiAgfQp9ClEATk48ARMBBE4cA0wJBBoNBkYFTUEFTCcFNQ00EDsVHAkODUAJUDQNTAkGTExQIigaOyQBHQE7BlErEDoBRAZREDoBTgZREDsBBkMGFiQEAgETZGFydDpjb3JlL2Jvb2wuZGFydC9vcmctZGFydGxhbmctc2RrOi8vL3J1bnRpbWUvbGliL2Jvb2xfcGF0Y2guZGFydIIMLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcGF0Y2gKQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQpjbGFzcyBib29sIHsKICBAcGF0Y2gKICBjb25zdCBmYWN0b3J5IGJvb2wuZnJvbUVudmlyb25tZW50KFN0cmluZyBuYW1lLCB7Ym9vbCBkZWZhdWx0VmFsdWU6IGZhbHNlfSkKICAgICAgbmF0aXZlICJCb29sX2Zyb21FbnZpcm9ubWVudCI7CgogIEBwYXRjaAogIGludCBnZXQgaGFzaENvZGUgPT4gdGhpcyA/IDEyMzEgOiAxMjM3OwoKICBpbnQgZ2V0IF9pZGVudGl0eUhhc2hDb2RlID0+IHRoaXMgPyAxMjMxIDogMTIzNzsKfQoUAE5OPAEeAQcaDQlOJQEJKgEzAgEfZGFydDpjb3JlLXBhdGNoL2Jvb2xfcGF0Y2guZGFydC9vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9kYXRlX3RpbWUuZGFydMAAa/IvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQW4gaW5zdGFudCBpbiB0aW1lLCBzdWNoIGFzIEp1bHkgMjAsIDE5NjksIDg6MThwbSBHTVQuCiAqCiAqIERhdGVUaW1lcyBjYW4gcmVwcmVzZW50IHRpbWUgdmFsdWVzIHRoYXQgYXJlIGF0IGEgZGlzdGFuY2Ugb2YgYXQgbW9zdAogKiAxMDAsMDAwLDAwMCBkYXlzIGZyb20gZXBvY2ggKDE5NzAtMDEtMDEgVVRDKTogLTI3MTgyMS0wNC0yMCB0byAyNzU3NjAtMDktMTMuCiAqCiAqIENyZWF0ZSBhIERhdGVUaW1lIG9iamVjdCBieSB1c2luZyBvbmUgb2YgdGhlIGNvbnN0cnVjdG9ycwogKiBvciBieSBwYXJzaW5nIGEgY29ycmVjdGx5IGZvcm1hdHRlZCBzdHJpbmcsCiAqIHdoaWNoIGNvbXBsaWVzIHdpdGggYSBzdWJzZXQgb2YgSVNPIDg2MDEuCiAqIE5vdGUgdGhhdCBob3VycyBhcmUgc3BlY2lmaWVkIGJldHdlZW4gMCBhbmQgMjMsCiAqIGFzIGluIGEgMjQtaG91ciBjbG9jay4KICogRm9yIGV4YW1wbGU6CiAqCiAqIGBgYAogKiB2YXIgbm93ID0gbmV3IERhdGVUaW1lLm5vdygpOwogKiB2YXIgYmVybGluV2FsbEZlbGwgPSBuZXcgRGF0ZVRpbWUudXRjKDE5ODksIDExLCA5KTsKICogdmFyIG1vb25MYW5kaW5nID0gRGF0ZVRpbWUucGFyc2UoIjE5NjktMDctMjAgMjA6MTg6MDRaIik7ICAvLyA4OjE4cG0KICogYGBgCiAqCiAqIEEgRGF0ZVRpbWUgb2JqZWN0IGlzIGFuY2hvcmVkIGVpdGhlciBpbiB0aGUgVVRDIHRpbWUgem9uZQogKiBvciBpbiB0aGUgbG9jYWwgdGltZSB6b25lIG9mIHRoZSBjdXJyZW50IGNvbXB1dGVyCiAqIHdoZW4gdGhlIG9iamVjdCBpcyBjcmVhdGVkLgogKgogKiBPbmNlIGNyZWF0ZWQsIG5laXRoZXIgdGhlIHZhbHVlIG5vciB0aGUgdGltZSB6b25lCiAqIG9mIGEgRGF0ZVRpbWUgb2JqZWN0IG1heSBiZSBjaGFuZ2VkLgogKgogKiBZb3UgY2FuIHVzZSBwcm9wZXJ0aWVzIHRvIGdldAogKiB0aGUgaW5kaXZpZHVhbCB1bml0cyBvZiBhIERhdGVUaW1lIG9iamVjdC4KICoKICogYGBgCiAqIGFzc2VydChiZXJsaW5XYWxsRmVsbC5tb250aCA9PSAxMSk7CiAqIGFzc2VydChtb29uTGFuZGluZy5ob3VyID09IDIwKTsKICogYGBgCiAqCiAqIEZvciBjb252ZW5pZW5jZSBhbmQgcmVhZGFiaWxpdHksCiAqIHRoZSBEYXRlVGltZSBjbGFzcyBwcm92aWRlcyBhIGNvbnN0YW50IGZvciBlYWNoIGRheSBhbmQgbW9udGgKICogbmFtZSAtIGZvciBleGFtcGxlLCBbYXVndXN0XSBhbmQgW2ZyaWRheV0uCiAqIFlvdSBjYW4gdXNlIHRoZXNlIGNvbnN0YW50cyB0byBpbXByb3ZlIGNvZGUgcmVhZGFiaWxpdHk6CiAqCiAqIGBgYAogKiB2YXIgYmVybGluV2FsbEZlbGwgPSBuZXcgRGF0ZVRpbWUudXRjKDE5ODksIERhdGVUaW1lLm5vdmVtYmVyLCA5KTsKICogYXNzZXJ0KGJlcmxpbldhbGxGZWxsLndlZWtkYXkgPT0gRGF0ZVRpbWUudGh1cnNkYXkpOwogKiBgYGAKICoKICogRGF5IGFuZCBtb250aCB2YWx1ZXMgYmVnaW4gYXQgMSwgYW5kIHRoZSB3ZWVrIHN0YXJ0cyBvbiBNb25kYXkuCiAqIFRoYXQgaXMsIHRoZSBjb25zdGFudHMgW2phbnVhcnldIGFuZCBbbW9uZGF5XSBhcmUgYm90aCAxLgogKgogKiAjIyBXb3JraW5nIHdpdGggVVRDIGFuZCBsb2NhbCB0aW1lCiAqCiAqIEEgRGF0ZVRpbWUgb2JqZWN0IGlzIGluIHRoZSBsb2NhbCB0aW1lIHpvbmUKICogdW5sZXNzIGV4cGxpY2l0bHkgY3JlYXRlZCBpbiB0aGUgVVRDIHRpbWUgem9uZS4KICoKICogYGBgCiAqIHZhciBkRGF5ID0gbmV3IERhdGVUaW1lLnV0YygxOTQ0LCA2LCA2KTsKICogYGBgCiAqCiAqIFVzZSBbaXNVdGNdIHRvIGRldGVybWluZSB3aGV0aGVyIGEgRGF0ZVRpbWUgb2JqZWN0IGlzIGJhc2VkIGluIFVUQy4KICogVXNlIHRoZSBtZXRob2RzIFt0b0xvY2FsXSBhbmQgW3RvVXRjXQogKiB0byBnZXQgdGhlIGVxdWl2YWxlbnQgZGF0ZS90aW1lIHZhbHVlIHNwZWNpZmllZCBpbiB0aGUgb3RoZXIgdGltZSB6b25lLgogKiBVc2UgW3RpbWVab25lTmFtZV0gdG8gZ2V0IGFuIGFiYnJldmlhdGVkIG5hbWUgb2YgdGhlIHRpbWUgem9uZQogKiBmb3IgdGhlIERhdGVUaW1lIG9iamVjdC4KICogVG8gZmluZCB0aGUgZGlmZmVyZW5jZQogKiBiZXR3ZWVuIFVUQyBhbmQgdGhlIHRpbWUgem9uZSBvZiBhIERhdGVUaW1lIG9iamVjdAogKiBjYWxsIFt0aW1lWm9uZU9mZnNldF0uCiAqCiAqICMjIENvbXBhcmluZyBEYXRlVGltZSBvYmplY3RzCiAqCiAqIFRoZSBEYXRlVGltZSBjbGFzcyBjb250YWlucyBzZXZlcmFsIGhhbmR5IG1ldGhvZHMsCiAqIHN1Y2ggYXMgW2lzQWZ0ZXJdLCBbaXNCZWZvcmVdLCBhbmQgW2lzQXRTYW1lTW9tZW50QXNdLAogKiBmb3IgY29tcGFyaW5nIERhdGVUaW1lIG9iamVjdHMuCiAqCiAqIGBgYAogKiBhc3NlcnQoYmVybGluV2FsbEZlbGwuaXNBZnRlcihtb29uTGFuZGluZykgPT0gdHJ1ZSk7CiAqIGFzc2VydChiZXJsaW5XYWxsRmVsbC5pc0JlZm9yZShtb29uTGFuZGluZykgPT0gZmFsc2UpOwogKiBgYGAKICoKICogIyMgVXNpbmcgRGF0ZVRpbWUgd2l0aCBEdXJhdGlvbgogKgogKiBVc2UgdGhlIFthZGRdIGFuZCBbc3VidHJhY3RdIG1ldGhvZHMgd2l0aCBhIFtEdXJhdGlvbl0gb2JqZWN0CiAqIHRvIGNyZWF0ZSBhIG5ldyBEYXRlVGltZSBvYmplY3QgYmFzZWQgb24gYW5vdGhlci4KICogRm9yIGV4YW1wbGUsIHRvIGZpbmQgdGhlIGRhdGUgdGhhdCBpcyBzaXh0eSBkYXlzICgyNCAqIDYwIGhvdXJzKSBhZnRlciB0b2RheSwKICogd3JpdGU6CiAqCiAqIGBgYAogKiB2YXIgbm93ID0gbmV3IERhdGVUaW1lLm5vdygpOwogKiB2YXIgc2l4dHlEYXlzRnJvbU5vdyA9IG5vdy5hZGQobmV3IER1cmF0aW9uKGRheXM6IDYwKSk7CiAqIGBgYAogKgogKiBUbyBmaW5kIG91dCBob3cgbXVjaCB0aW1lIGlzIGJldHdlZW4gdHdvIERhdGVUaW1lIG9iamVjdHMgdXNlCiAqIFtkaWZmZXJlbmNlXSwgd2hpY2ggcmV0dXJucyBhIFtEdXJhdGlvbl0gb2JqZWN0OgogKgogKiBgYGAKICogdmFyIGRpZmZlcmVuY2UgPSBiZXJsaW5XYWxsRmVsbC5kaWZmZXJlbmNlKG1vb25MYW5kaW5nKTsKICogYXNzZXJ0KGRpZmZlcmVuY2UuaW5EYXlzID09IDc0MTYpOwogKiBgYGAKICoKICogVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gZGF0ZXMgaW4gZGlmZmVyZW50IHRpbWUgem9uZXMKICogaXMganVzdCB0aGUgbnVtYmVyIG9mIG5hbm9zZWNvbmRzIGJldHdlZW4gdGhlIHR3byBwb2ludHMgaW4gdGltZS4KICogSXQgZG9lc24ndCB0YWtlIGNhbGVuZGFyIGRheXMgaW50byBhY2NvdW50LgogKiBUaGF0IG1lYW5zIHRoYXQgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gbWlkbmlnaHRzIGluIGxvY2FsIHRpbWUgbWF5IGJlCiAqIGxlc3MgdGhhbiAyNCBob3VycyB0aW1lcyB0aGUgbnVtYmVyIG9mIGRheXMgYmV0d2VlbiB0aGVtLAogKiBpZiB0aGVyZSBpcyBhIGRheWxpZ2h0IHNhdmluZyBjaGFuZ2UgaW4gYmV0d2Vlbi4KICogSWYgdGhlIGRpZmZlcmVuY2UgYWJvdmUgaXMgY2FsY3VsYXRlZCB1c2luZyBBdXN0cmFsaWFuIGxvY2FsIHRpbWUsIHRoZQogKiBkaWZmZXJlbmNlIGlzIDc0MTUgZGF5cyBhbmQgMjMgaG91cnMsIHdoaWNoIGlzIG9ubHkgNzQxNSB3aG9sZSBkYXlzIGFzCiAqIHJlcG9ydGVkIGJ5IGBpbkRheXNgLgogKgogKiAjIyBPdGhlciByZXNvdXJjZXMKICoKICogU2VlIFtEdXJhdGlvbl0gdG8gcmVwcmVzZW50IGEgc3BhbiBvZiB0aW1lLgogKiBTZWUgW1N0b3B3YXRjaF0gdG8gbWVhc3VyZSB0aW1lc3BhbnMuCiAqCiAqIFRoZSBEYXRlVGltZSBjbGFzcyBkb2VzIG5vdCBwcm92aWRlIGludGVybmF0aW9uYWxpemF0aW9uLgogKiBUbyBpbnRlcm5hdGlvbmFsaXplIHlvdXIgY29kZSwgdXNlCiAqIHRoZSBbaW50bF0oaHR0cHM6Ly9wdWIuZGFydGxhbmcub3JnL3BhY2thZ2VzL2ludGwpIHBhY2thZ2UuCiAqCiAqLwpjbGFzcyBEYXRlVGltZSBpbXBsZW1lbnRzIENvbXBhcmFibGU8RGF0ZVRpbWU+IHsKICAvLyBXZWVrZGF5IGNvbnN0YW50cyB0aGF0IGFyZSByZXR1cm5lZCBieSBbd2Vla2RheV0gbWV0aG9kOgogIHN0YXRpYyBjb25zdCBpbnQgbW9uZGF5ID0gMTsKICBzdGF0aWMgY29uc3QgaW50IHR1ZXNkYXkgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgd2VkbmVzZGF5ID0gMzsKICBzdGF0aWMgY29uc3QgaW50IHRodXJzZGF5ID0gNDsKICBzdGF0aWMgY29uc3QgaW50IGZyaWRheSA9IDU7CiAgc3RhdGljIGNvbnN0IGludCBzYXR1cmRheSA9IDY7CiAgc3RhdGljIGNvbnN0IGludCBzdW5kYXkgPSA3OwogIHN0YXRpYyBjb25zdCBpbnQgZGF5c1BlcldlZWsgPSA3OwoKICAvLyBNb250aCBjb25zdGFudHMgdGhhdCBhcmUgcmV0dXJuZWQgYnkgdGhlIFttb250aF0gZ2V0dGVyLgogIHN0YXRpYyBjb25zdCBpbnQgamFudWFyeSA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBmZWJydWFyeSA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBtYXJjaCA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBhcHJpbCA9IDQ7CiAgc3RhdGljIGNvbnN0IGludCBtYXkgPSA1OwogIHN0YXRpYyBjb25zdCBpbnQganVuZSA9IDY7CiAgc3RhdGljIGNvbnN0IGludCBqdWx5ID0gNzsKICBzdGF0aWMgY29uc3QgaW50IGF1Z3VzdCA9IDg7CiAgc3RhdGljIGNvbnN0IGludCBzZXB0ZW1iZXIgPSA5OwogIHN0YXRpYyBjb25zdCBpbnQgb2N0b2JlciA9IDEwOwogIHN0YXRpYyBjb25zdCBpbnQgbm92ZW1iZXIgPSAxMTsKICBzdGF0aWMgY29uc3QgaW50IGRlY2VtYmVyID0gMTI7CiAgc3RhdGljIGNvbnN0IGludCBtb250aHNQZXJZZWFyID0gMTI7CgogIC8qKgogICAqIFRoZSB2YWx1ZSBvZiB0aGlzIERhdGVUaW1lLgogICAqCiAgICogVGhlIGNvbnRlbnQgb2YgdGhpcyBmaWVsZCBpcyBpbXBsZW1lbnRhdGlvbiBkZXBlbmRlbnQuIE9uIEphdmFTY3JpcHQgaXQgaXMKICAgKiBlcXVhbCB0byBbbWlsbGlzZWNvbmRzU2luY2VFcG9jaF0uIE9uIHRoZSBWTSBpdCBpcyBlcXVhbCB0bwogICAqIFttaWNyb3NlY29uZHNTaW5jZUVwb2NoXS4KICAgKi8KICBmaW5hbCBpbnQgX3ZhbHVlOwoKICAvKioKICAgKiBUcnVlIGlmIHRoaXMgW0RhdGVUaW1lXSBpcyBzZXQgdG8gVVRDIHRpbWUuCiAgICoKICAgKiBgYGAKICAgKiB2YXIgZERheSA9IG5ldyBEYXRlVGltZS51dGMoMTk0NCwgNiwgNik7CiAgICogYXNzZXJ0KGREYXkuaXNVdGMpOwogICAqIGBgYAogICAqCiAgICovCiAgZmluYWwgYm9vbCBpc1V0YzsKCiAgLyoqCiAgICogQ29uc3RydWN0cyBhIFtEYXRlVGltZV0gaW5zdGFuY2Ugc3BlY2lmaWVkIGluIHRoZSBsb2NhbCB0aW1lIHpvbmUuCiAgICoKICAgKiBGb3IgZXhhbXBsZSwKICAgKiB0byBjcmVhdGUgYSBuZXcgRGF0ZVRpbWUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgN3RoIG9mIFNlcHRlbWJlciAyMDE3LAogICAqIDU6MzBwbQogICAqCiAgICogYGBgCiAgICogdmFyIGRlbnRpc3RBcHBvaW50bWVudCA9IG5ldyBEYXRlVGltZSgyMDE3LCA5LCA3LCAxNywgMzApOwogICAqIGBgYAogICAqLwogIERhdGVUaW1lKGludCB5ZWFyLAogICAgICBbaW50IG1vbnRoID0gMSwKICAgICAgaW50IGRheSA9IDEsCiAgICAgIGludCBob3VyID0gMCwKICAgICAgaW50IG1pbnV0ZSA9IDAsCiAgICAgIGludCBzZWNvbmQgPSAwLAogICAgICBpbnQgbWlsbGlzZWNvbmQgPSAwLAogICAgICBpbnQgbWljcm9zZWNvbmQgPSAwXSkKICAgICAgOiB0aGlzLl9pbnRlcm5hbCh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmQsCiAgICAgICAgICAgIG1pY3Jvc2Vjb25kLCBmYWxzZSk7CgogIC8qKgogICAqIENvbnN0cnVjdHMgYSBbRGF0ZVRpbWVdIGluc3RhbmNlIHNwZWNpZmllZCBpbiB0aGUgVVRDIHRpbWUgem9uZS4KICAgKgogICAqIGBgYAogICAqIHZhciBtb29uTGFuZGluZyA9IG5ldyBEYXRlVGltZS51dGMoMTk2OSwgNywgMjAsIDIwLCAxOCwgMDQpOwogICAqIGBgYAogICAqCiAgICogV2hlbiBkZWFsaW5nIHdpdGggZGF0ZXMgb3IgaGlzdG9yaWMgZXZlbnRzIHByZWZlciB0byB1c2UgVVRDIERhdGVUaW1lcywKICAgKiBzaW5jZSB0aGV5IGFyZSB1bmFmZmVjdGVkIGJ5IGRheWxpZ2h0LXNhdmluZyBjaGFuZ2VzIGFuZCBhcmUgdW5hZmZlY3RlZAogICAqIGJ5IHRoZSBsb2NhbCB0aW1lem9uZS4KICAgKi8KICBEYXRlVGltZS51dGMoaW50IHllYXIsCiAgICAgIFtpbnQgbW9udGggPSAxLAogICAgICBpbnQgZGF5ID0gMSwKICAgICAgaW50IGhvdXIgPSAwLAogICAgICBpbnQgbWludXRlID0gMCwKICAgICAgaW50IHNlY29uZCA9IDAsCiAgICAgIGludCBtaWxsaXNlY29uZCA9IDAsCiAgICAgIGludCBtaWNyb3NlY29uZCA9IDBdKQogICAgICA6IHRoaXMuX2ludGVybmFsKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZCwKICAgICAgICAgICAgbWljcm9zZWNvbmQsIHRydWUpOwoKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgW0RhdGVUaW1lXSBpbnN0YW5jZSB3aXRoIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSBpbiB0aGUKICAgKiBsb2NhbCB0aW1lIHpvbmUuCiAgICoKICAgKiBgYGAKICAgKiB2YXIgdGhpc0luc3RhbnQgPSBuZXcgRGF0ZVRpbWUubm93KCk7CiAgICogYGBgCiAgICovCiAgRGF0ZVRpbWUubm93KCkgOiB0aGlzLl9ub3coKTsKCiAgLyoqCiAgICogQ29uc3RydWN0cyBhIG5ldyBbRGF0ZVRpbWVdIGluc3RhbmNlIGJhc2VkIG9uIFtmb3JtYXR0ZWRTdHJpbmddLgogICAqCiAgICogVGhlIFtmb3JtYXR0ZWRTdHJpbmddIG11c3Qgbm90IGJlIGBudWxsYC4KICAgKiBUaHJvd3MgYSBbRm9ybWF0RXhjZXB0aW9uXSBpZiB0aGUgaW5wdXQgc3RyaW5nIGNhbm5vdCBiZSBwYXJzZWQuCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gcGFyc2VzIGEgc3Vic2V0IG9mIElTTyA4NjAxCiAgICogd2hpY2ggaW5jbHVkZXMgdGhlIHN1YnNldCBhY2NlcHRlZCBieSBSRkMgMzMzOS4KICAgKgogICAqIFRoZSBhY2NlcHRlZCBpbnB1dHMgYXJlIGN1cnJlbnRseToKICAgKgogICAqICogQSBkYXRlOiBBIHNpZ25lZCBmb3VyLXRvLXNpeCBkaWdpdCB5ZWFyLCB0d28gZGlnaXQgbW9udGggYW5kCiAgICogICB0d28gZGlnaXQgZGF5LCBvcHRpb25hbGx5IHNlcGFyYXRlZCBieSBgLWAgY2hhcmFjdGVycy4KICAgKiAgIEV4YW1wbGVzOiAiMTk3MDAxMDEiLCAiLTAwMDQtMTItMjQiLCAiODEwMzAtMDQtMDEiLgogICAqICogQW4gb3B0aW9uYWwgdGltZSBwYXJ0LCBzZXBhcmF0ZWQgZnJvbSB0aGUgZGF0ZSBieSBlaXRoZXIgYFRgIG9yIGEgc3BhY2UuCiAgICogICBUaGUgdGltZSBwYXJ0IGlzIGEgdHdvIGRpZ2l0IGhvdXIsCiAgICogICB0aGVuIG9wdGlvbmFsbHkgYSB0d28gZGlnaXQgbWludXRlcyB2YWx1ZSwKICAgKiAgIHRoZW4gb3B0aW9uYWxseSBhIHR3byBkaWdpdCBzZWNvbmRzIHZhbHVlLCBhbmQKICAgKiAgIHRoZW4gb3B0aW9uYWxseSBhICcuJyBvciAnLCcgZm9sbG93ZWQgYnkgYSBvbmUtdG8tc2l4IGRpZ2l0IHNlY29uZCBmcmFjdGlvbi4KICAgKiAgIFRoZSBtaW51dGVzIGFuZCBzZWNvbmRzIG1heSBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUgcHJldmlvdXMgcGFydHMgYnkgYQogICAqICAgJzonLgogICAqICAgRXhhbXBsZXM6ICIxMiIsICIxMjozMDoyNC4xMjQiLCAiMTI6MzA6MjQsMTI0IiwgIjEyMzAxMC41MCIuCiAgICogKiBBbiBvcHRpb25hbCB0aW1lLXpvbmUgb2Zmc2V0IHBhcnQsCiAgICogICBwb3NzaWJseSBzZXBhcmF0ZWQgZnJvbSB0aGUgcHJldmlvdXMgYnkgYSBzcGFjZS4KICAgKiAgIFRoZSB0aW1lIHpvbmUgaXMgZWl0aGVyICd6JyBvciAnWicsIG9yIGl0IGlzIGEgc2lnbmVkIHR3byBkaWdpdCBob3VyCiAgICogICBwYXJ0IGFuZCBhbiBvcHRpb25hbCB0d28gZGlnaXQgbWludXRlIHBhcnQuIFRoZSBzaWduIG11c3QgYmUgZWl0aGVyCiAgICogICAiKyIgb3IgIi0iLCBhbmQgY2FuIG5vdCBiZSBvbWl0dGVkLgogICAqICAgVGhlIG1pbnV0ZXMgbWF5IGJlIHNlcGFyYXRlZCBmcm9tIHRoZSBob3VycyBieSBhICc6Jy4KICAgKiAgIEV4YW1wbGVzOiAiWiIsICItMTAiLCAiKzAxOjMwIiwgIisxMTMwIi4KICAgKgogICAqIFRoaXMgaW5jbHVkZXMgdGhlIG91dHB1dCBvZiBib3RoIFt0b1N0cmluZ10gYW5kIFt0b0lzbzg2MDFTdHJpbmddLCB3aGljaAogICAqIHdpbGwgYmUgcGFyc2VkIGJhY2sgaW50byBhIGBEYXRlVGltZWAgb2JqZWN0IHdpdGggdGhlIHNhbWUgdGltZSBhcyB0aGUKICAgKiBvcmlnaW5hbC4KICAgKgogICAqIFRoZSByZXN1bHQgaXMgYWx3YXlzIGluIGVpdGhlciBsb2NhbCB0aW1lIG9yIFVUQy4KICAgKiBJZiBhIHRpbWUgem9uZSBvZmZzZXQgb3RoZXIgdGhhbiBVVEMgaXMgc3BlY2lmaWVkLAogICAqIHRoZSB0aW1lIGlzIGNvbnZlcnRlZCB0byB0aGUgZXF1aXZhbGVudCBVVEMgdGltZS4KICAgKgogICAqIEV4YW1wbGVzIG9mIGFjY2VwdGVkIHN0cmluZ3M6CiAgICoKICAgKiAqIGAiMjAxMi0wMi0yNyAxMzoyNzowMCJgCiAgICogKiBgIjIwMTItMDItMjcgMTM6Mjc6MDAuMTIzNDU2eiJgCiAgICogKiBgIjIwMTItMDItMjcgMTM6Mjc6MDAsMTIzNDU2eiJgCiAgICogKiBgIjIwMTIwMjI3IDEzOjI3OjAwImAKICAgKiAqIGAiMjAxMjAyMjdUMTMyNzAwImAKICAgKiAqIGAiMjAxMjAyMjciYAogICAqICogYCIrMjAxMjAyMjciYAogICAqICogYCIyMDEyLTAyLTI3VDE0WiJgCiAgICogKiBgIjIwMTItMDItMjdUMTQrMDA6MDAiYAogICAqICogYCItMTIzNDUwMTAxIDAwOjAwOjAwIFoiYDogaW4gdGhlIHllYXIgLTEyMzQ1LgogICAqICogYCIyMDAyLTAyLTI3VDE0OjAwOjAwLTA1MDAiYDogU2FtZSBhcyBgIjIwMDItMDItMjdUMTk6MDA6MDBaImAKICAgKi8KICAvLyBUT0RPKGxybik6IHJlc3RyaWN0IGluY29ycmVjdCB2YWx1ZXMgbGlrZSAgMjAwMy0wMi0yOVQ1MDo3MDo4MC4KICAvLyBPciBub3QsIHRoYXQgbWF5IGJlIGEgYnJlYWtpbmcgY2hhbmdlLgogIHN0YXRpYyBEYXRlVGltZSBwYXJzZShTdHJpbmcgZm9ybWF0dGVkU3RyaW5nKSB7CiAgICB2YXIgcmUgPSBfcGFyc2VGb3JtYXQ7CiAgICBNYXRjaCBtYXRjaCA9IHJlLmZpcnN0TWF0Y2goZm9ybWF0dGVkU3RyaW5nKTsKICAgIGlmIChtYXRjaCAhPSBudWxsKSB7CiAgICAgIGludCBwYXJzZUludE9yWmVybyhTdHJpbmcgbWF0Y2hlZCkgewogICAgICAgIGlmIChtYXRjaGVkID09IG51bGwpIHJldHVybiAwOwogICAgICAgIHJldHVybiBpbnQucGFyc2UobWF0Y2hlZCk7CiAgICAgIH0KCiAgICAgIC8vIFBhcnNlcyBmcmFjdGlvbmFsIHNlY29uZCBkaWdpdHMgb2YgJy4oXGR7MSw2fSknIGludG8gdGhlIGNvbWJpbmVkCiAgICAgIC8vIG1pY3Jvc2Vjb25kcy4KICAgICAgaW50IHBhcnNlTWlsbGlBbmRNaWNyb3NlY29uZHMoU3RyaW5nIG1hdGNoZWQpIHsKICAgICAgICBpZiAobWF0Y2hlZCA9PSBudWxsKSByZXR1cm4gMDsKICAgICAgICBpbnQgbGVuZ3RoID0gbWF0Y2hlZC5sZW5ndGg7CiAgICAgICAgYXNzZXJ0KGxlbmd0aCA+PSAxKTsKICAgICAgICBhc3NlcnQobGVuZ3RoIDw9IDYpOwoKICAgICAgICBpbnQgcmVzdWx0ID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDY7IGkrKykgewogICAgICAgICAgcmVzdWx0ICo9IDEwOwogICAgICAgICAgaWYgKGkgPCBtYXRjaGVkLmxlbmd0aCkgewogICAgICAgICAgICByZXN1bHQgKz0gbWF0Y2hlZC5jb2RlVW5pdEF0KGkpIF4gMHgzMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQoKICAgICAgaW50IHllYXJzID0gaW50LnBhcnNlKG1hdGNoWzFdKTsKICAgICAgaW50IG1vbnRoID0gaW50LnBhcnNlKG1hdGNoWzJdKTsKICAgICAgaW50IGRheSA9IGludC5wYXJzZShtYXRjaFszXSk7CiAgICAgIGludCBob3VyID0gcGFyc2VJbnRPclplcm8obWF0Y2hbNF0pOwogICAgICBpbnQgbWludXRlID0gcGFyc2VJbnRPclplcm8obWF0Y2hbNV0pOwogICAgICBpbnQgc2Vjb25kID0gcGFyc2VJbnRPclplcm8obWF0Y2hbNl0pOwogICAgICBib29sIGFkZE9uZU1pbGxpc2Vjb25kID0gZmFsc2U7CiAgICAgIGludCBtaWxsaUFuZE1pY3Jvc2Vjb25kcyA9IHBhcnNlTWlsbGlBbmRNaWNyb3NlY29uZHMobWF0Y2hbN10pOwogICAgICBpbnQgbWlsbGlzZWNvbmQgPQogICAgICAgICAgbWlsbGlBbmRNaWNyb3NlY29uZHMgfi8gRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyTWlsbGlzZWNvbmQ7CiAgICAgIGludCBtaWNyb3NlY29uZCA9CiAgICAgICAgICBtaWxsaUFuZE1pY3Jvc2Vjb25kcy5yZW1haW5kZXIoRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyTWlsbGlzZWNvbmQpOwogICAgICBib29sIGlzVXRjID0gZmFsc2U7CiAgICAgIGlmIChtYXRjaFs4XSAhPSBudWxsKSB7CiAgICAgICAgLy8gdGltZXpvbmUgcGFydAogICAgICAgIGlzVXRjID0gdHJ1ZTsKICAgICAgICBpZiAobWF0Y2hbOV0gIT0gbnVsbCkgewogICAgICAgICAgLy8gdGltZXpvbmUgb3RoZXIgdGhhbiAnWicgYW5kICd6Jy4KICAgICAgICAgIGludCBzaWduID0gKG1hdGNoWzldID09ICctJykgPyAtMSA6IDE7CiAgICAgICAgICBpbnQgaG91ckRpZmZlcmVuY2UgPSBpbnQucGFyc2UobWF0Y2hbMTBdKTsKICAgICAgICAgIGludCBtaW51dGVEaWZmZXJlbmNlID0gcGFyc2VJbnRPclplcm8obWF0Y2hbMTFdKTsKICAgICAgICAgIG1pbnV0ZURpZmZlcmVuY2UgKz0gNjAgKiBob3VyRGlmZmVyZW5jZTsKICAgICAgICAgIG1pbnV0ZSAtPSBzaWduICogbWludXRlRGlmZmVyZW5jZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaW50IHZhbHVlID0gX2Jyb2tlbkRvd25EYXRlVG9WYWx1ZSh5ZWFycywgbW9udGgsIGRheSwgaG91ciwgbWludXRlLAogICAgICAgICAgc2Vjb25kLCBtaWxsaXNlY29uZCwgbWljcm9zZWNvbmQsIGlzVXRjKTsKICAgICAgaWYgKHZhbHVlID09IG51bGwpIHsKICAgICAgICB0aHJvdyBGb3JtYXRFeGNlcHRpb24oIlRpbWUgb3V0IG9mIHJhbmdlIiwgZm9ybWF0dGVkU3RyaW5nKTsKICAgICAgfQogICAgICByZXR1cm4gRGF0ZVRpbWUuX3dpdGhWYWx1ZSh2YWx1ZSwgaXNVdGM6IGlzVXRjKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IEZvcm1hdEV4Y2VwdGlvbigiSW52YWxpZCBkYXRlIGZvcm1hdCIsIGZvcm1hdHRlZFN0cmluZyk7CiAgICB9CiAgfQoKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFtEYXRlVGltZV0gaW5zdGFuY2UgYmFzZWQgb24gW2Zvcm1hdHRlZFN0cmluZ10uCiAgICoKICAgKiBXb3JrcyBsaWtlIFtwYXJzZV0gZXhjZXB0IHRoYXQgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGBudWxsYAogICAqIHdoZXJlIFtwYXJzZV0gd291bGQgdGhyb3cgYSBbRm9ybWF0RXhjZXB0aW9uXS4KICAgKi8KICBzdGF0aWMgRGF0ZVRpbWUgdHJ5UGFyc2UoU3RyaW5nIGZvcm1hdHRlZFN0cmluZykgewogICAgLy8gVE9ETzogT3B0aW1pemUgdG8gYXZvaWQgdGhyb3dpbmcuCiAgICB0cnkgewogICAgICByZXR1cm4gcGFyc2UoZm9ybWF0dGVkU3RyaW5nKTsKICAgIH0gb24gRm9ybWF0RXhjZXB0aW9uIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICBzdGF0aWMgY29uc3QgaW50IF9tYXhNaWxsaXNlY29uZHNTaW5jZUVwb2NoID0gODY0MDAwMDAwMDAwMDAwMDsKCiAgLyoqCiAgICogQ29uc3RydWN0cyBhIG5ldyBbRGF0ZVRpbWVdIGluc3RhbmNlCiAgICogd2l0aCB0aGUgZ2l2ZW4gW21pbGxpc2Vjb25kc1NpbmNlRXBvY2hdLgogICAqCiAgICogSWYgW2lzVXRjXSBpcyBmYWxzZSB0aGVuIHRoZSBkYXRlIGlzIGluIHRoZSBsb2NhbCB0aW1lIHpvbmUuCiAgICoKICAgKiBUaGUgY29uc3RydWN0ZWQgW0RhdGVUaW1lXSByZXByZXNlbnRzCiAgICogMTk3MC0wMS0wMVQwMDowMDowMFogKyBbbWlsbGlzZWNvbmRzU2luY2VFcG9jaF0gbXMgaW4gdGhlIGdpdmVuCiAgICogdGltZSB6b25lIChsb2NhbCBvciBVVEMpLgogICAqLwogIGV4dGVybmFsIERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKGludCBtaWxsaXNlY29uZHNTaW5jZUVwb2NoLAogICAgICB7Ym9vbCBpc1V0YyA9IGZhbHNlfSk7CgogIC8qKgogICAqIENvbnN0cnVjdHMgYSBuZXcgW0RhdGVUaW1lXSBpbnN0YW5jZQogICAqIHdpdGggdGhlIGdpdmVuIFttaWNyb3NlY29uZHNTaW5jZUVwb2NoXS4KICAgKgogICAqIElmIFtpc1V0Y10gaXMgZmFsc2UgdGhlbiB0aGUgZGF0ZSBpcyBpbiB0aGUgbG9jYWwgdGltZSB6b25lLgogICAqCiAgICogVGhlIGNvbnN0cnVjdGVkIFtEYXRlVGltZV0gcmVwcmVzZW50cwogICAqIDE5NzAtMDEtMDFUMDA6MDA6MDBaICsgW21pY3Jvc2Vjb25kc1NpbmNlRXBvY2hdIHVzIGluIHRoZSBnaXZlbgogICAqIHRpbWUgem9uZSAobG9jYWwgb3IgVVRDKS4KICAgKi8KICBleHRlcm5hbCBEYXRlVGltZS5mcm9tTWljcm9zZWNvbmRzU2luY2VFcG9jaChpbnQgbWljcm9zZWNvbmRzU2luY2VFcG9jaCwKICAgICAge2Jvb2wgaXNVdGMgPSBmYWxzZX0pOwoKICAvKioKICAgKiBDb25zdHJ1Y3RzIGEgbmV3IFtEYXRlVGltZV0gaW5zdGFuY2Ugd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuCiAgICoKICAgKiBJZiBbaXNVdGNdIGlzIGZhbHNlIHRoZW4gdGhlIGRhdGUgaXMgaW4gdGhlIGxvY2FsIHRpbWUgem9uZS4KICAgKi8KICBEYXRlVGltZS5fd2l0aFZhbHVlKHRoaXMuX3ZhbHVlLCB7dGhpcy5pc1V0Y30pIHsKICAgIGlmIChtaWxsaXNlY29uZHNTaW5jZUVwb2NoLmFicygpID4gX21heE1pbGxpc2Vjb25kc1NpbmNlRXBvY2ggfHwKICAgICAgICAobWlsbGlzZWNvbmRzU2luY2VFcG9jaC5hYnMoKSA9PSBfbWF4TWlsbGlzZWNvbmRzU2luY2VFcG9jaCAmJgogICAgICAgICAgICBtaWNyb3NlY29uZCAhPSAwKSkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKAogICAgICAgICAgIkRhdGVUaW1lIGlzIG91dHNpZGUgdmFsaWQgcmFuZ2U6ICRtaWxsaXNlY29uZHNTaW5jZUVwb2NoIik7CiAgICB9CiAgICBpZiAoaXNVdGMgPT0gbnVsbCkgewogICAgICB0aHJvdyBBcmd1bWVudEVycm9yKCInaXNVdGMnIGZsYWcgbWF5IG5vdCBiZSAnbnVsbCciKTsKICAgIH0KICB9CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiBbb3RoZXJdIGlzIGEgW0RhdGVUaW1lXSBhdCB0aGUgc2FtZSBtb21lbnQgYW5kIGluIHRoZQogICAqIHNhbWUgdGltZSB6b25lIChVVEMgb3IgbG9jYWwpLgogICAqCiAgICogYGBgCiAgICogdmFyIGREYXlVdGMgPSBuZXcgRGF0ZVRpbWUudXRjKDE5NDQsIDYsIDYpOwogICAqIHZhciBkRGF5TG9jYWwgPSBkRGF5VXRjLnRvTG9jYWwoKTsKICAgKgogICAqIC8vIFRoZXNlIHR3byBkYXRlcyBhcmUgYXQgdGhlIHNhbWUgbW9tZW50LCBidXQgYXJlIGluIGRpZmZlcmVudCB6b25lcy4KICAgKiBhc3NlcnQoZERheVV0YyAhPSBkRGF5TG9jYWwpOwogICAqIGBgYAogICAqCiAgICogU2VlIFtpc0F0U2FtZU1vbWVudEFzXSBmb3IgYSBjb21wYXJpc29uIHRoYXQgY29tcGFyZXMgbW9tZW50cyBpbiB0aW1lCiAgICogaW5kZXBlbmRlbnRseSBvZiB0aGVpciB6b25lcy4KICAgKi8KICBleHRlcm5hbCBib29sIG9wZXJhdG9yID09KGR5bmFtaWMgb3RoZXIpOwoKICAvKioKICAgKiBSZXR1cm5zIHRydWUgaWYgW3RoaXNdIG9jY3VycyBiZWZvcmUgW290aGVyXS4KICAgKgogICAqIFRoZSBjb21wYXJpc29uIGlzIGluZGVwZW5kZW50CiAgICogb2Ygd2hldGhlciB0aGUgdGltZSBpcyBpbiBVVEMgb3IgaW4gdGhlIGxvY2FsIHRpbWUgem9uZS4KICAgKgogICAqIGBgYAogICAqIHZhciBub3cgPSBuZXcgRGF0ZVRpbWUubm93KCk7CiAgICogdmFyIGVhcmxpZXIgPSBub3cuc3VidHJhY3QoY29uc3QgRHVyYXRpb24oc2Vjb25kczogNSkpOwogICAqIGFzc2VydChlYXJsaWVyLmlzQmVmb3JlKG5vdykpOwogICAqIGFzc2VydCghbm93LmlzQmVmb3JlKG5vdykpOwogICAqCiAgICogLy8gVGhpcyByZWxhdGlvbiBzdGF5cyB0aGUgc2FtZSwgZXZlbiB3aGVuIGNoYW5naW5nIHRpbWV6b25lcy4KICAgKiBhc3NlcnQoZWFybGllci5pc0JlZm9yZShub3cudG9VdGMoKSkpOwogICAqIGFzc2VydChlYXJsaWVyLnRvVXRjKCkuaXNCZWZvcmUobm93KSk7CiAgICoKICAgKiBhc3NlcnQoIW5vdy50b1V0YygpLmlzQmVmb3JlKG5vdykpOwogICAqIGFzc2VydCghbm93LmlzQmVmb3JlKG5vdy50b1V0YygpKSk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgYm9vbCBpc0JlZm9yZShEYXRlVGltZSBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgdHJ1ZSBpZiBbdGhpc10gb2NjdXJzIGFmdGVyIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgY29tcGFyaXNvbiBpcyBpbmRlcGVuZGVudAogICAqIG9mIHdoZXRoZXIgdGhlIHRpbWUgaXMgaW4gVVRDIG9yIGluIHRoZSBsb2NhbCB0aW1lIHpvbmUuCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbm93ID0gbmV3IERhdGVUaW1lLm5vdygpOwogICAqIHZhciBsYXRlciA9IG5vdy5hZGQoY29uc3QgRHVyYXRpb24oc2Vjb25kczogNSkpOwogICAqIGFzc2VydChsYXRlci5pc0FmdGVyKG5vdykpOwogICAqIGFzc2VydCghbm93LmlzQmVmb3JlKG5vdykpOwogICAqCiAgICogLy8gVGhpcyByZWxhdGlvbiBzdGF5cyB0aGUgc2FtZSwgZXZlbiB3aGVuIGNoYW5naW5nIHRpbWV6b25lcy4KICAgKiBhc3NlcnQobGF0ZXIuaXNBZnRlcihub3cudG9VdGMoKSkpOwogICAqIGFzc2VydChsYXRlci50b1V0YygpLmlzQWZ0ZXIobm93KSk7CiAgICoKICAgKiBhc3NlcnQoIW5vdy50b1V0YygpLmlzQmVmb3JlKG5vdykpOwogICAqIGFzc2VydCghbm93LmlzQmVmb3JlKG5vdy50b1V0YygpKSk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgYm9vbCBpc0FmdGVyKERhdGVUaW1lIG90aGVyKTsKCiAgLyoqCiAgICogUmV0dXJucyB0cnVlIGlmIFt0aGlzXSBvY2N1cnMgYXQgdGhlIHNhbWUgbW9tZW50IGFzIFtvdGhlcl0uCiAgICoKICAgKiBUaGUgY29tcGFyaXNvbiBpcyBpbmRlcGVuZGVudCBvZiB3aGV0aGVyIHRoZSB0aW1lIGlzIGluIFVUQyBvciBpbiB0aGUgbG9jYWwKICAgKiB0aW1lIHpvbmUuCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbm93ID0gbmV3IERhdGVUaW1lLm5vdygpOwogICAqIHZhciBsYXRlciA9IG5vdy5hZGQoY29uc3QgRHVyYXRpb24oc2Vjb25kczogNSkpOwogICAqIGFzc2VydCghbGF0ZXIuaXNBdFNhbWVNb21lbnRBcyhub3cpKTsKICAgKiBhc3NlcnQobm93LmlzQXRTYW1lTW9tZW50QXMobm93KSk7CiAgICoKICAgKiAvLyBUaGlzIHJlbGF0aW9uIHN0YXlzIHRoZSBzYW1lLCBldmVuIHdoZW4gY2hhbmdpbmcgdGltZXpvbmVzLgogICAqIGFzc2VydCghbGF0ZXIuaXNBdFNhbWVNb21lbnRBcyhub3cudG9VdGMoKSkpOwogICAqIGFzc2VydCghbGF0ZXIudG9VdGMoKS5pc0F0U2FtZU1vbWVudEFzKG5vdykpOwogICAqCiAgICogYXNzZXJ0KG5vdy50b1V0YygpLmlzQXRTYW1lTW9tZW50QXMobm93KSk7CiAgICogYXNzZXJ0KG5vdy5pc0F0U2FtZU1vbWVudEFzKG5vdy50b1V0YygpKSk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgYm9vbCBpc0F0U2FtZU1vbWVudEFzKERhdGVUaW1lIG90aGVyKTsKCiAgLyoqCiAgICogQ29tcGFyZXMgdGhpcyBEYXRlVGltZSBvYmplY3QgdG8gW290aGVyXSwKICAgKiByZXR1cm5pbmcgemVybyBpZiB0aGUgdmFsdWVzIGFyZSBlcXVhbC4KICAgKgogICAqIFJldHVybnMgYSBuZWdhdGl2ZSB2YWx1ZSBpZiB0aGlzIERhdGVUaW1lIFtpc0JlZm9yZV0gW290aGVyXS4gSXQgcmV0dXJucyAwCiAgICogaWYgaXQgW2lzQXRTYW1lTW9tZW50QXNdIFtvdGhlcl0sIGFuZCByZXR1cm5zIGEgcG9zaXRpdmUgdmFsdWUgb3RoZXJ3aXNlCiAgICogKHdoZW4gdGhpcyBbaXNBZnRlcl0gW290aGVyXSkuCiAgICovCiAgZXh0ZXJuYWwgaW50IGNvbXBhcmVUbyhEYXRlVGltZSBvdGhlcik7CgogIGludCBnZXQgaGFzaENvZGUgPT4gKF92YWx1ZSBeIChfdmFsdWUgPj4gMzApKSAmIDB4M0ZGRkZGRkY7CgogIC8qKgogICAqIFJldHVybnMgdGhpcyBEYXRlVGltZSB2YWx1ZSBpbiB0aGUgbG9jYWwgdGltZSB6b25lLgogICAqCiAgICogUmV0dXJucyBbdGhpc10gaWYgaXQgaXMgYWxyZWFkeSBpbiB0aGUgbG9jYWwgdGltZSB6b25lLgogICAqIE90aGVyd2lzZSB0aGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvOgogICAqCiAgICogYGBgCiAgICogbmV3IERhdGVUaW1lLmZyb21NaWNyb3NlY29uZHNTaW5jZUVwb2NoKG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gsCiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVXRjOiBmYWxzZSkKICAgKiBgYGAKICAgKi8KICBEYXRlVGltZSB0b0xvY2FsKCkgewogICAgaWYgKGlzVXRjKSB7CiAgICAgIHJldHVybiBEYXRlVGltZS5fd2l0aFZhbHVlKF92YWx1ZSwgaXNVdGM6IGZhbHNlKTsKICAgIH0KICAgIHJldHVybiB0aGlzOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGlzIERhdGVUaW1lIHZhbHVlIGluIHRoZSBVVEMgdGltZSB6b25lLgogICAqCiAgICogUmV0dXJucyBbdGhpc10gaWYgaXQgaXMgYWxyZWFkeSBpbiBVVEMuCiAgICogT3RoZXJ3aXNlIHRoaXMgbWV0aG9kIGlzIGVxdWl2YWxlbnQgdG86CiAgICoKICAgKiBgYGAKICAgKiBuZXcgRGF0ZVRpbWUuZnJvbU1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gobWljcm9zZWNvbmRzU2luY2VFcG9jaCwKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNVdGM6IHRydWUpCiAgICogYGBgCiAgICovCiAgRGF0ZVRpbWUgdG9VdGMoKSB7CiAgICBpZiAoaXNVdGMpIHJldHVybiB0aGlzOwogICAgcmV0dXJuIERhdGVUaW1lLl93aXRoVmFsdWUoX3ZhbHVlLCBpc1V0YzogdHJ1ZSk7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF9mb3VyRGlnaXRzKGludCBuKSB7CiAgICBpbnQgYWJzTiA9IG4uYWJzKCk7CiAgICBTdHJpbmcgc2lnbiA9IG4gPCAwID8gIi0iIDogIiI7CiAgICBpZiAoYWJzTiA+PSAxMDAwKSByZXR1cm4gIiRuIjsKICAgIGlmIChhYnNOID49IDEwMCkgcmV0dXJuICIke3NpZ259MCRhYnNOIjsKICAgIGlmIChhYnNOID49IDEwKSByZXR1cm4gIiR7c2lnbn0wMCRhYnNOIjsKICAgIHJldHVybiAiJHtzaWdufTAwMCRhYnNOIjsKICB9CgogIHN0YXRpYyBTdHJpbmcgX3NpeERpZ2l0cyhpbnQgbikgewogICAgYXNzZXJ0KG4gPCAtOTk5OSB8fCBuID4gOTk5OSk7CiAgICBpbnQgYWJzTiA9IG4uYWJzKCk7CiAgICBTdHJpbmcgc2lnbiA9IG4gPCAwID8gIi0iIDogIisiOwogICAgaWYgKGFic04gPj0gMTAwMDAwKSByZXR1cm4gIiRzaWduJGFic04iOwogICAgcmV0dXJuICIke3NpZ259MCRhYnNOIjsKICB9CgogIHN0YXRpYyBTdHJpbmcgX3RocmVlRGlnaXRzKGludCBuKSB7CiAgICBpZiAobiA+PSAxMDApIHJldHVybiAiJHtufSI7CiAgICBpZiAobiA+PSAxMCkgcmV0dXJuICIwJHtufSI7CiAgICByZXR1cm4gIjAwJHtufSI7CiAgfQoKICBzdGF0aWMgU3RyaW5nIF90d29EaWdpdHMoaW50IG4pIHsKICAgIGlmIChuID49IDEwKSByZXR1cm4gIiR7bn0iOwogICAgcmV0dXJuICIwJHtufSI7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgc3RyaW5nIGZvciB0aGlzIGluc3RhbmNlLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmluZyBpcyBjb25zdHJ1Y3RlZCBmb3IgdGhlIHRpbWUgem9uZSBvZiB0aGlzIGluc3RhbmNlLgogICAqIFRoZSBgdG9TdHJpbmcoKWAgbWV0aG9kIHByb3ZpZGVzIGEgc2ltcGx5IGZvcm1hdHRlZCBzdHJpbmcuCiAgICogSXQgZG9lcyBub3Qgc3VwcG9ydCBpbnRlcm5hdGlvbmFsaXplZCBzdHJpbmdzLgogICAqIFVzZSB0aGUgW2ludGxdKGh0dHBzOi8vcHViLmRhcnRsYW5nLm9yZy9wYWNrYWdlcy9pbnRsKSBwYWNrYWdlCiAgICogYXQgdGhlIHB1YiBzaGFyZWQgcGFja2FnZXMgcmVwby4KICAgKgogICAqIFRoZSByZXN1bHRpbmcgc3RyaW5nIGNhbiBiZSBwYXJzZWQgYmFjayB1c2luZyBbcGFyc2VdLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZyB5ID0gX2ZvdXJEaWdpdHMoeWVhcik7CiAgICBTdHJpbmcgbSA9IF90d29EaWdpdHMobW9udGgpOwogICAgU3RyaW5nIGQgPSBfdHdvRGlnaXRzKGRheSk7CiAgICBTdHJpbmcgaCA9IF90d29EaWdpdHMoaG91cik7CiAgICBTdHJpbmcgbWluID0gX3R3b0RpZ2l0cyhtaW51dGUpOwogICAgU3RyaW5nIHNlYyA9IF90d29EaWdpdHMoc2Vjb25kKTsKICAgIFN0cmluZyBtcyA9IF90aHJlZURpZ2l0cyhtaWxsaXNlY29uZCk7CiAgICBTdHJpbmcgdXMgPSBtaWNyb3NlY29uZCA9PSAwID8gIiIgOiBfdGhyZWVEaWdpdHMobWljcm9zZWNvbmQpOwogICAgaWYgKGlzVXRjKSB7CiAgICAgIHJldHVybiAiJHktJG0tJGQgJGg6JG1pbjokc2VjLiRtcyR7dXN9WiI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gIiR5LSRtLSRkICRoOiRtaW46JHNlYy4kbXMkdXMiOwogICAgfQogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhbiBJU08tODYwMSBmdWxsLXByZWNpc2lvbiBleHRlbmRlZCBmb3JtYXQgcmVwcmVzZW50YXRpb24uCiAgICoKICAgKiBUaGUgZm9ybWF0IGlzIGB5eXl5LU1NLWRkVEhIOm1tOnNzLm1tbXV1dVpgIGZvciBVVEMgdGltZSwgYW5kCiAgICogYHl5eXktTU0tZGRUSEg6bW06c3MubW1tdXV1YCAobm8gdHJhaWxpbmcgIloiKSBmb3IgbG9jYWwvbm9uLVVUQyB0aW1lLAogICAqIHdoZXJlOgogICAqCiAgICogKiBgeXl5eWAgaXMgYSwgcG9zc2libHkgbmVnYXRpdmUsIGZvdXIgZGlnaXQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHllYXIsCiAgICogICBpZiB0aGUgeWVhciBpcyBpbiB0aGUgcmFuZ2UgLTk5OTkgdG8gOTk5OSwKICAgKiAgIG90aGVyd2lzZSBpdCBpcyBhIHNpZ25lZCBzaXggZGlnaXQgcmVwcmVzZW50YXRpb24gb2YgdGhlIHllYXIuCiAgICogKiBgTU1gIGlzIHRoZSBtb250aCBpbiB0aGUgcmFuZ2UgMDEgdG8gMTIsCiAgICogKiBgZGRgIGlzIHRoZSBkYXkgb2YgdGhlIG1vbnRoIGluIHRoZSByYW5nZSAwMSB0byAzMSwKICAgKiAqIGBISGAgYXJlIGhvdXJzIGluIHRoZSByYW5nZSAwMCB0byAyMywKICAgKiAqIGBtbWAgYXJlIG1pbnV0ZXMgaW4gdGhlIHJhbmdlIDAwIHRvIDU5LAogICAqICogYHNzYCBhcmUgc2Vjb25kcyBpbiB0aGUgcmFuZ2UgMDAgdG8gNTkgKG5vIGxlYXAgc2Vjb25kcyksCiAgICogKiBgbW1tYCBhcmUgbWlsbGlzZWNvbmRzIGluIHRoZSByYW5nZSAwMDAgdG8gOTk5LCBhbmQKICAgKiAqIGB1dXVgIGFyZSBtaWNyb3NlY29uZHMgaW4gdGhlIHJhbmdlIDAwMSB0byA5OTkuIElmIFttaWNyb3NlY29uZF0gZXF1YWxzCiAgICogICAwLCB0aGVuIHRoaXMgcGFydCBpcyBvbWl0dGVkLgogICAqCiAgICogVGhlIHJlc3VsdGluZyBzdHJpbmcgY2FuIGJlIHBhcnNlZCBiYWNrIHVzaW5nIFtwYXJzZV0uCiAgICovCiAgU3RyaW5nIHRvSXNvODYwMVN0cmluZygpIHsKICAgIFN0cmluZyB5ID0KICAgICAgICAoeWVhciA+PSAtOTk5OSAmJiB5ZWFyIDw9IDk5OTkpID8gX2ZvdXJEaWdpdHMoeWVhcikgOiBfc2l4RGlnaXRzKHllYXIpOwogICAgU3RyaW5nIG0gPSBfdHdvRGlnaXRzKG1vbnRoKTsKICAgIFN0cmluZyBkID0gX3R3b0RpZ2l0cyhkYXkpOwogICAgU3RyaW5nIGggPSBfdHdvRGlnaXRzKGhvdXIpOwogICAgU3RyaW5nIG1pbiA9IF90d29EaWdpdHMobWludXRlKTsKICAgIFN0cmluZyBzZWMgPSBfdHdvRGlnaXRzKHNlY29uZCk7CiAgICBTdHJpbmcgbXMgPSBfdGhyZWVEaWdpdHMobWlsbGlzZWNvbmQpOwogICAgU3RyaW5nIHVzID0gbWljcm9zZWNvbmQgPT0gMCA/ICIiIDogX3RocmVlRGlnaXRzKG1pY3Jvc2Vjb25kKTsKICAgIGlmIChpc1V0YykgewogICAgICByZXR1cm4gIiR5LSRtLSR7ZH1UJGg6JG1pbjokc2VjLiRtcyR7dXN9WiI7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gIiR5LSRtLSR7ZH1UJGg6JG1pbjokc2VjLiRtcyR1cyI7CiAgICB9CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IFtEYXRlVGltZV0gaW5zdGFuY2Ugd2l0aCBbZHVyYXRpb25dIGFkZGVkIHRvIFt0aGlzXS4KICAgKgogICAqIGBgYAogICAqIHZhciB0b2RheSA9IG5ldyBEYXRlVGltZS5ub3coKTsKICAgKiB2YXIgZmlmdHlEYXlzRnJvbU5vdyA9IHRvZGF5LmFkZChuZXcgRHVyYXRpb24oZGF5czogNTApKTsKICAgKiBgYGAKICAgKgogICAqIE5vdGljZSB0aGF0IHRoZSBkdXJhdGlvbiBiZWluZyBhZGRlZCBpcyBhY3R1YWxseSA1MCAqIDI0ICogNjAgKiA2MAogICAqIHNlY29uZHMuIElmIHRoZSByZXN1bHRpbmcgYERhdGVUaW1lYCBoYXMgYSBkaWZmZXJlbnQgZGF5bGlnaHQgc2F2aW5nIG9mZnNldAogICAqIHRoYW4gYHRoaXNgLCB0aGVuIHRoZSByZXN1bHQgd29uJ3QgaGF2ZSB0aGUgc2FtZSB0aW1lLW9mLWRheSBhcyBgdGhpc2AsIGFuZAogICAqIG1heSBub3QgZXZlbiBoaXQgdGhlIGNhbGVuZGFyIGRhdGUgNTAgZGF5cyBsYXRlci4KICAgKgogICAqIEJlIGNhcmVmdWwgd2hlbiB3b3JraW5nIHdpdGggZGF0ZXMgaW4gbG9jYWwgdGltZS4KICAgKi8KICBleHRlcm5hbCBEYXRlVGltZSBhZGQoRHVyYXRpb24gZHVyYXRpb24pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IFtEYXRlVGltZV0gaW5zdGFuY2Ugd2l0aCBbZHVyYXRpb25dIHN1YnRyYWN0ZWQgZnJvbSBbdGhpc10uCiAgICoKICAgKiBgYGAKICAgKiBEYXRlVGltZSB0b2RheSA9IG5ldyBEYXRlVGltZS5ub3coKTsKICAgKiBEYXRlVGltZSBmaWZ0eURheXNBZ28gPSB0b2RheS5zdWJ0cmFjdChuZXcgRHVyYXRpb24oZGF5czogNTApKTsKICAgKiBgYGAKICAgKgogICAqIE5vdGljZSB0aGF0IHRoZSBkdXJhdGlvbiBiZWluZyBzdWJ0cmFjdGVkIGlzIGFjdHVhbGx5IDUwICogMjQgKiA2MCAqIDYwCiAgICogc2Vjb25kcy4gSWYgdGhlIHJlc3VsdGluZyBgRGF0ZVRpbWVgIGhhcyBhIGRpZmZlcmVudCBkYXlsaWdodCBzYXZpbmcgb2Zmc2V0CiAgICogdGhhbiBgdGhpc2AsIHRoZW4gdGhlIHJlc3VsdCB3b24ndCBoYXZlIHRoZSBzYW1lIHRpbWUtb2YtZGF5IGFzIGB0aGlzYCwgYW5kCiAgICogbWF5IG5vdCBldmVuIGhpdCB0aGUgY2FsZW5kYXIgZGF0ZSA1MCBkYXlzIGVhcmxpZXIuCiAgICoKICAgKiBCZSBjYXJlZnVsIHdoZW4gd29ya2luZyB3aXRoIGRhdGVzIGluIGxvY2FsIHRpbWUuCiAgICovCiAgZXh0ZXJuYWwgRGF0ZVRpbWUgc3VidHJhY3QoRHVyYXRpb24gZHVyYXRpb24pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgW0R1cmF0aW9uXSB3aXRoIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gW3RoaXNdIGFuZCBbb3RoZXJdLgogICAqCiAgICogYGBgCiAgICogdmFyIGJlcmxpbldhbGxGZWxsID0gbmV3IERhdGVUaW1lLnV0YygxOTg5LCBEYXRlVGltZS5ub3ZlbWJlciwgOSk7CiAgICogdmFyIGREYXkgPSBuZXcgRGF0ZVRpbWUudXRjKDE5NDQsIERhdGVUaW1lLmp1bmUsIDYpOwogICAqCiAgICogRHVyYXRpb24gZGlmZmVyZW5jZSA9IGJlcmxpbldhbGxGZWxsLmRpZmZlcmVuY2UoZERheSk7CiAgICogYXNzZXJ0KGRpZmZlcmVuY2UuaW5EYXlzID09IDE2NTkyKTsKICAgKiBgYGAKICAgKgogICAqIFRoZSBkaWZmZXJlbmNlIGlzIG1lYXN1cmVkIGluIHNlY29uZHMgYW5kIGZyYWN0aW9ucyBvZiBzZWNvbmRzLgogICAqIFRoZSBkaWZmZXJlbmNlIGFib3ZlIGNvdW50cyB0aGUgbnVtYmVyIG9mIGZyYWN0aW9uYWwgc2Vjb25kcyBiZXR3ZWVuCiAgICogbWlkbmlnaHQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aG9zZSBkYXRlcy4KICAgKiBJZiB0aGUgZGF0ZXMgYWJvdmUgaGFkIGJlZW4gaW4gbG9jYWwgdGltZSwgbm90IFVUQywgdGhlbiB0aGUgZGlmZmVyZW5jZQogICAqIGJldHdlZW4gdHdvIG1pZG5pZ2h0cyBtYXkgbm90IGJlIGEgbXVsdGlwbGUgb2YgMjQgaG91cnMgZHVlIHRvIGRheWxpZ2h0CiAgICogc2F2aW5nIGRpZmZlcmVuY2VzLgogICAqCiAgICogRm9yIGV4YW1wbGUsIGluIEF1c3RyYWxpYSwgc2ltaWxhciBjb2RlIHVzaW5nIGxvY2FsIHRpbWUgaW5zdGVhZCBvZiBVVEM6CiAgICoKICAgKiBgYGAKICAgKiB2YXIgYmVybGluV2FsbEZlbGwgPSBuZXcgRGF0ZVRpbWUoMTk4OSwgRGF0ZVRpbWUubm92ZW1iZXIsIDkpOwogICAqIHZhciBkRGF5ID0gbmV3IERhdGVUaW1lKDE5NDQsIERhdGVUaW1lLmp1bmUsIDYpOwogICAqIER1cmF0aW9uIGRpZmZlcmVuY2UgPSBiZXJsaW5XYWxsRmVsbC5kaWZmZXJlbmNlKGREYXkpOwogICAqIGFzc2VydChkaWZmZXJlbmNlLmluRGF5cyA9PSAxNjU5Mik7CiAgICogYGBgCiAgICogd2lsbCBmYWlsIGJlY2F1c2UgdGhlIGRpZmZlcmVuY2UgaXMgYWN0dWFsbHkgMTY1OTEgZGF5cyBhbmQgMjMgaG91cnMsIGFuZAogICAqIFtEdXJhdGlvbi5pbkRheXNdIG9ubHkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHdob2xlIGRheXMuCiAgICovCiAgZXh0ZXJuYWwgRHVyYXRpb24gZGlmZmVyZW5jZShEYXRlVGltZSBvdGhlcik7CgogIGV4dGVybmFsIERhdGVUaW1lLl9pbnRlcm5hbChpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5LCBpbnQgaG91ciwKICAgICAgaW50IG1pbnV0ZSwgaW50IHNlY29uZCwgaW50IG1pbGxpc2Vjb25kLCBpbnQgbWljcm9zZWNvbmQsIGJvb2wgaXNVdGMpOwoKICBleHRlcm5hbCBEYXRlVGltZS5fbm93KCk7CgogIC8vLyBSZXR1cm5zIHRoZSB0aW1lIGFzIHZhbHVlIChtaWxsaXNlY29uZCBvciBtaWNyb3NlY29uZCBzaW5jZSBlcG9jaCksIG9yCiAgLy8vIG51bGwgaWYgdGhlIHZhbHVlcyBhcmUgb3V0IG9mIHJhbmdlLgogIGV4dGVybmFsIHN0YXRpYyBpbnQgX2Jyb2tlbkRvd25EYXRlVG9WYWx1ZSgKICAgICAgaW50IHllYXIsCiAgICAgIGludCBtb250aCwKICAgICAgaW50IGRheSwKICAgICAgaW50IGhvdXIsCiAgICAgIGludCBtaW51dGUsCiAgICAgIGludCBzZWNvbmQsCiAgICAgIGludCBtaWxsaXNlY29uZCwKICAgICAgaW50IG1pY3Jvc2Vjb25kLAogICAgICBib29sIGlzVXRjKTsKCiAgLyoqCiAgICogVGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UKICAgKiB0aGUgIlVuaXggZXBvY2giIDE5NzAtMDEtMDFUMDA6MDA6MDBaIChVVEMpLgogICAqCiAgICogVGhpcyB2YWx1ZSBpcyBpbmRlcGVuZGVudCBvZiB0aGUgdGltZSB6b25lLgogICAqCiAgICogVGhpcyB2YWx1ZSBpcyBhdCBtb3N0CiAgICogOCw2NDAsMDAwLDAwMCwwMDAsMDAwbXMgKDEwMCwwMDAsMDAwIGRheXMpIGZyb20gdGhlIFVuaXggZXBvY2guCiAgICogSW4gb3RoZXIgd29yZHM6IGBtaWxsaXNlY29uZHNTaW5jZUVwb2NoLmFicygpIDw9IDg2NDAwMDAwMDAwMDAwMDBgLgogICAqLwogIGV4dGVybmFsIGludCBnZXQgbWlsbGlzZWNvbmRzU2luY2VFcG9jaDsKCiAgLyoqCiAgICogVGhlIG51bWJlciBvZiBtaWNyb3NlY29uZHMgc2luY2UKICAgKiB0aGUgIlVuaXggZXBvY2giIDE5NzAtMDEtMDFUMDA6MDA6MDBaIChVVEMpLgogICAqCiAgICogVGhpcyB2YWx1ZSBpcyBpbmRlcGVuZGVudCBvZiB0aGUgdGltZSB6b25lLgogICAqCiAgICogVGhpcyB2YWx1ZSBpcyBhdCBtb3N0CiAgICogOCw2NDAsMDAwLDAwMCwwMDAsMDAwLDAwMHVzICgxMDAsMDAwLDAwMCBkYXlzKSBmcm9tIHRoZSBVbml4IGVwb2NoLgogICAqIEluIG90aGVyIHdvcmRzOiBgbWljcm9zZWNvbmRzU2luY2VFcG9jaC5hYnMoKSA8PSA4NjQwMDAwMDAwMDAwMDAwMDAwYC4KICAgKgogICAqIE5vdGUgdGhhdCB0aGlzIHZhbHVlIGRvZXMgbm90IGZpdCBpbnRvIDUzIGJpdHMgKHRoZSBzaXplIG9mIGEgSUVFRSBkb3VibGUpLgogICAqIEEgSmF2YVNjcmlwdCBudW1iZXIgaXMgbm90IGFibGUgdG8gaG9sZCB0aGlzIHZhbHVlLgogICAqLwogIGV4dGVybmFsIGludCBnZXQgbWljcm9zZWNvbmRzU2luY2VFcG9jaDsKCiAgLyoqCiAgICogVGhlIHRpbWUgem9uZSBuYW1lLgogICAqCiAgICogVGhpcyB2YWx1ZSBpcyBwcm92aWRlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBhbmQgbWF5IGJlIGFuCiAgICogYWJicmV2aWF0aW9uIG9yIGEgZnVsbCBuYW1lLgogICAqCiAgICogSW4gdGhlIGJyb3dzZXIgb3Igb24gVW5peC1saWtlIHN5c3RlbXMgY29tbW9ubHkgcmV0dXJucyBhYmJyZXZpYXRpb25zLAogICAqIHN1Y2ggYXMgIkNFVCIgb3IgIkNFU1QiLiBPbiBXaW5kb3dzIHJldHVybnMgdGhlIGZ1bGwgbmFtZSwgZm9yIGV4YW1wbGUKICAgKiAiUGFjaWZpYyBTdGFuZGFyZCBUaW1lIi4KICAgKi8KICBleHRlcm5hbCBTdHJpbmcgZ2V0IHRpbWVab25lTmFtZTsKCiAgLyoqCiAgICogVGhlIHRpbWUgem9uZSBvZmZzZXQsIHdoaWNoCiAgICogaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBsb2NhbCB0aW1lIGFuZCBVVEMuCiAgICoKICAgKiBUaGUgb2Zmc2V0IGlzIHBvc2l0aXZlIGZvciB0aW1lIHpvbmVzIGVhc3Qgb2YgVVRDLgogICAqCiAgICogTm90ZSwgdGhhdCBKYXZhU2NyaXB0LCBQeXRob24gYW5kIEMgcmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gVVRDIGFuZAogICAqIGxvY2FsIHRpbWUuIEphdmEsIEMjIGFuZCBSdWJ5IHJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGxvY2FsIHRpbWUgYW5kCiAgICogVVRDLgogICAqLwogIGV4dGVybmFsIER1cmF0aW9uIGdldCB0aW1lWm9uZU9mZnNldDsKCiAgLyoqCiAgICogVGhlIHllYXIuCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbW9vbkxhbmRpbmcgPSBEYXRlVGltZS5wYXJzZSgiMTk2OS0wNy0yMCAyMDoxODowNFoiKTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcueWVhciA9PSAxOTY5KTsKICAgKiBgYGAKICAgKi8KICBleHRlcm5hbCBpbnQgZ2V0IHllYXI7CgogIC8qKgogICAqIFRoZSBtb250aCBbMS4uMTJdLgogICAqCiAgICogYGBgCiAgICogdmFyIG1vb25MYW5kaW5nID0gRGF0ZVRpbWUucGFyc2UoIjE5NjktMDctMjAgMjA6MTg6MDRaIik7CiAgICogYXNzZXJ0KG1vb25MYW5kaW5nLm1vbnRoID09IDcpOwogICAqIGFzc2VydChtb29uTGFuZGluZy5tb250aCA9PSBEYXRlVGltZS5qdWx5KTsKICAgKiBgYGAKICAgKi8KICBleHRlcm5hbCBpbnQgZ2V0IG1vbnRoOwoKICAvKioKICAgKiBUaGUgZGF5IG9mIHRoZSBtb250aCBbMS4uMzFdLgogICAqCiAgICogYGBgCiAgICogdmFyIG1vb25MYW5kaW5nID0gRGF0ZVRpbWUucGFyc2UoIjE5NjktMDctMjAgMjA6MTg6MDRaIik7CiAgICogYXNzZXJ0KG1vb25MYW5kaW5nLmRheSA9PSAyMCk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCBkYXk7CgogIC8qKgogICAqIFRoZSBob3VyIG9mIHRoZSBkYXksIGV4cHJlc3NlZCBhcyBpbiBhIDI0LWhvdXIgY2xvY2sgWzAuLjIzXS4KICAgKgogICAqIGBgYAogICAqIHZhciBtb29uTGFuZGluZyA9IERhdGVUaW1lLnBhcnNlKCIxOTY5LTA3LTIwIDIwOjE4OjA0WiIpOwogICAqIGFzc2VydChtb29uTGFuZGluZy5ob3VyID09IDIwKTsKICAgKiBgYGAKICAgKi8KICBleHRlcm5hbCBpbnQgZ2V0IGhvdXI7CgogIC8qKgogICAqIFRoZSBtaW51dGUgWzAuLi41OV0uCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbW9vbkxhbmRpbmcgPSBEYXRlVGltZS5wYXJzZSgiMTk2OS0wNy0yMCAyMDoxODowNFoiKTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcubWludXRlID09IDE4KTsKICAgKiBgYGAKICAgKi8KICBleHRlcm5hbCBpbnQgZ2V0IG1pbnV0ZTsKCiAgLyoqCiAgICogVGhlIHNlY29uZCBbMC4uLjU5XS4KICAgKgogICAqIGBgYAogICAqIHZhciBtb29uTGFuZGluZyA9IERhdGVUaW1lLnBhcnNlKCIxOTY5LTA3LTIwIDIwOjE4OjA0WiIpOwogICAqIGFzc2VydChtb29uTGFuZGluZy5zZWNvbmQgPT0gNCk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCBzZWNvbmQ7CgogIC8qKgogICAqIFRoZSBtaWxsaXNlY29uZCBbMC4uLjk5OV0uCiAgICoKICAgKiBgYGAKICAgKiB2YXIgbW9vbkxhbmRpbmcgPSBEYXRlVGltZS5wYXJzZSgiMTk2OS0wNy0yMCAyMDoxODowNFoiKTsKICAgKiBhc3NlcnQobW9vbkxhbmRpbmcubWlsbGlzZWNvbmQgPT0gMCk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCBtaWxsaXNlY29uZDsKCiAgLyoqCiAgICogVGhlIG1pY3Jvc2Vjb25kIFswLi4uOTk5XS4KICAgKgogICAqIGBgYAogICAqIHZhciBtb29uTGFuZGluZyA9IERhdGVUaW1lLnBhcnNlKCIxOTY5LTA3LTIwIDIwOjE4OjA0WiIpOwogICAqIGFzc2VydChtb29uTGFuZGluZy5taWNyb3NlY29uZCA9PSAwKTsKICAgKiBgYGAKICAgKi8KICBleHRlcm5hbCBpbnQgZ2V0IG1pY3Jvc2Vjb25kOwoKICAvKioKICAgKiBUaGUgZGF5IG9mIHRoZSB3ZWVrIFttb25kYXldLi5bc3VuZGF5XS4KICAgKgogICAqIEluIGFjY29yZGFuY2Ugd2l0aCBJU08gODYwMQogICAqIGEgd2VlayBzdGFydHMgd2l0aCBNb25kYXksIHdoaWNoIGhhcyB0aGUgdmFsdWUgMS4KICAgKgogICAqIGBgYAogICAqIHZhciBtb29uTGFuZGluZyA9IERhdGVUaW1lLnBhcnNlKCIxOTY5LTA3LTIwIDIwOjE4OjA0WiIpOwogICAqIGFzc2VydChtb29uTGFuZGluZy53ZWVrZGF5ID09IDcpOwogICAqIGFzc2VydChtb29uTGFuZGluZy53ZWVrZGF5ID09IERhdGVUaW1lLnN1bmRheSk7CiAgICogYGBgCiAgICovCiAgZXh0ZXJuYWwgaW50IGdldCB3ZWVrZGF5OwoKICAvKgogICAqIGRhdGUgOjo9IHllYXJkYXRlIHRpbWVfb3B0IHRpbWV6b25lX29wdAogICAqIHllYXJkYXRlIDo6PSB5ZWFyIGNvbG9uX29wdCBtb250aCBjb2xvbl9vcHQgZGF5CiAgICogeWVhciA6Oj0gc2lnbl9vcHQgZGlnaXR7NCw2fQogICAqIGNvbG9uX29wdCA6OiA8ZW1wdHk+IHwgJzonCiAgICogc2lnbiA6Oj0gJysnIHwgJy0nCiAgICogc2lnbl9vcHQgOjo9ICA8ZW1wdHk+IHwgc2lnbgogICAqIG1vbnRoIDo6PSBkaWdpdHsyfQogICAqIGRheSA6Oj0gZGlnaXR7Mn0KICAgKiB0aW1lX29wdCA6Oj0gPGVtcHR5PiB8ICgnICcgfCAnVCcpIGhvdXIgbWludXRlc19vcHQKICAgKiBtaW51dGVzX29wdCA6Oj0gPGVtcHR5PiB8IGNvbG9uX29wdCBkaWdpdHsyfSBzZWNvbmRzX29wdAogICAqIHNlY29uZHNfb3B0IDo6PSA8ZW1wdHk+IHwgY29sb25fb3B0IGRpZ2l0ezJ9IG1pbGxpc19vcHQKICAgKiBtaWNyb3Nfb3B0IDo6PSA8ZW1wdHk+IHwgKCcuJyB8ICcsJykgZGlnaXR7MSw2fQogICAqIHRpbWV6b25lX29wdCA6Oj0gPGVtcHR5PiB8IHNwYWNlX29wdCB0aW1lem9uZQogICAqIHNwYWNlX29wdCA6OiAnICcgfCA8ZW1wdHk+CiAgICogdGltZXpvbmUgOjo9ICd6JyB8ICdaJyB8IHNpZ24gZGlnaXR7Mn0gdGltZXpvbmVtaW5zX29wdAogICAqIHRpbWV6b25lbWluc19vcHQgOjo9IDxlbXB0eT4gfCBjb2xvbl9vcHQgZGlnaXR7Mn0KICAgKi8KICBzdGF0aWMgZmluYWwgUmVnRXhwIF9wYXJzZUZvcm1hdCA9IFJlZ0V4cCgKICAgICAgcideKFsrLV0/XGR7NCw2fSktPyhcZFxkKS0/KFxkXGQpJyAvLyBEYXkgcGFydC4KICAgICAgcicoPzpbIFRdKFxkXGQpKD86Oj8oXGRcZCkoPzo6PyhcZFxkKSg/OlsuLF0oXGR7MSw2fSkpPyk/KT8nIC8vIFRpbWUgcGFydC4KICAgICAgcicoID9belpdfCA/KFstK10pKFxkXGQpKD86Oj8oXGRcZCkpPyk/KT8kJyk7IC8vIFRpbWV6b25lIHBhcnQuCn0Kg2sATk48ARMBBDoDSVADPS8tMxoQAwchN0gHAz01HwM1KAMhLgMHJyMHAyRBLjwDB0Y4BwNDPQMmAy8zAwcsBwNHKUtCHBo2GgMhAzY6IwMHODoHAyMDQTVRCgMHITsHA0E0Awc8JgcDPEUvTT00SkoZAxYDLykDPSY/AwQxPh8gIiEfIR8kAT4gIR4eHB0dHyIhIiInAQYhBVBBHwYUAQYxBQkuGQkFBhQBBkgFEk0MBQlACQYVFhMUFhYbHEwhAQZGBQlCCQVNTRwGGRYTFBYWGxxMIAEGSBYFCSsJBiABBkYFL0YFLjUFKAVEPjtQKjI2VE0MRCo4TEsrPTAFTkwPBTc4NwUjBR8nJx0bFBUaHzZGBkUsMhsyGSsnIwgBSxc2JyUdHQEYJhgkNAwKFwgBJyclKy0tJkYYRxhPGh4ZFiAuMTU8My0KCEo0G0UINw1FBgQBBkYFQTQGNSkKJRsTBgQBQgEGKi4FQgUrRR8GSx0BBiouBUIFK0UfBksdAQZABUIGM0VHIRtHBhk9BgQBBkskBQkxKAVMIwkFSyMGLAEGMwUjPgUJIz0kIQVELCwFKSkJBioBBjIFIz4FCSM2ISEFRCkpBSkpCQYpAQZCBVEQBQkjNisoBUQzMwUwMAkGMgEGLy0FUE4kBioBPgEGOQU9LQUJRTsJBhcROAYRBAEGNwUtLQUJRToJBhUcNQQBJRgkIy0tHgQBJCMYJS0cBAEmISEVBAEkIBQEAQY4BUxBNEQmBTwGFiIiICElJStDETANLQYEAQZIBUNMDAVOMkYwOy0vQTtPJQU8Bh0PUCIgISUlK0MRMg0vBgQBBkgFCSU/CQVIUVE3BTcGLAEGTwUJKkUJBU1RUTkFNwYxAQZKBQlIOgU8KQkFRUovTU0ZBU4FCUQ2PCkJTz4GMAFGTQEcAU0rLhARDxASEhcXEwEGJjIFMQUbRUkGKwEGJjIFMQUbSUwFUTkGKwEGGQVCIgVMTB4GJAEGITMFOAVPUAoGKAEGDwUJPycJBhkBBhgFCT8lMQkGGgEGIwUJPyQJBhgBBkMFCT8lCQYZAQYaBQk/JwkGGwEGGgUJPyYJBhsBBiAFCT8rCQYgAQYgBQk/KwkGIAEGLQUhNwUJPyc1CQYcAQUtNSIgGCIYFjk+PTUzID03Bi02UUYCARhkYXJ0OmNvcmUvZGF0ZV90aW1lLmRhcnQvb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9kYXRlX3BhdGNoLmRhcnS99S8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKLy8gVk0gaW1wbGVtZW50YXRpb24gb2YgRGF0ZVRpbWUuCkBwYXRjaApjbGFzcyBEYXRlVGltZSB7CiAgLy8gTmF0aXZlcy4KICAvLyBUaGUgbmF0aXZlcyBoYXZlIGJlZW4gbW92ZWQgdXAgaGVyZSB0byB3b3JrIGFyb3VuZCBJc3N1ZSAxMDQwMS4KICBzdGF0aWMgaW50IF9nZXRDdXJyZW50TWljcm9zKCkgbmF0aXZlICJEYXRlVGltZV9jdXJyZW50VGltZU1pY3JvcyI7CgogIHN0YXRpYyBTdHJpbmcgX3RpbWVab25lTmFtZUZvckNsYW1wZWRTZWNvbmRzKGludCBzZWNvbmRzU2luY2VFcG9jaCkKICAgICAgbmF0aXZlICJEYXRlVGltZV90aW1lWm9uZU5hbWUiOwoKICBzdGF0aWMgaW50IF90aW1lWm9uZU9mZnNldEluU2Vjb25kc0ZvckNsYW1wZWRTZWNvbmRzKGludCBzZWNvbmRzU2luY2VFcG9jaCkKICAgICAgbmF0aXZlICJEYXRlVGltZV90aW1lWm9uZU9mZnNldEluU2Vjb25kcyI7CgogIHN0YXRpYyBpbnQgX2xvY2FsVGltZVpvbmVBZGp1c3RtZW50SW5TZWNvbmRzKCkKICAgICAgbmF0aXZlICJEYXRlVGltZV9sb2NhbFRpbWVab25lQWRqdXN0bWVudEluU2Vjb25kcyI7CgogIHN0YXRpYyBjb25zdCBfTUlDUk9TRUNPTkRfSU5ERVggPSAwOwogIHN0YXRpYyBjb25zdCBfTUlMTElTRUNPTkRfSU5ERVggPSAxOwogIHN0YXRpYyBjb25zdCBfU0VDT05EX0lOREVYID0gMjsKICBzdGF0aWMgY29uc3QgX01JTlVURV9JTkRFWCA9IDM7CiAgc3RhdGljIGNvbnN0IF9IT1VSX0lOREVYID0gNDsKICBzdGF0aWMgY29uc3QgX0RBWV9JTkRFWCA9IDU7CiAgc3RhdGljIGNvbnN0IF9XRUVLREFZX0lOREVYID0gNjsKICBzdGF0aWMgY29uc3QgX01PTlRIX0lOREVYID0gNzsKICBzdGF0aWMgY29uc3QgX1lFQVJfSU5ERVggPSA4OwoKICBMaXN0IF9fcGFydHM7CgogIEBwYXRjaAogIERhdGVUaW1lLmZyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoKGludCBtaWxsaXNlY29uZHNTaW5jZUVwb2NoLAogICAgICB7Ym9vbCBpc1V0YzogZmFsc2V9KQogICAgICA6IHRoaXMuX3dpdGhWYWx1ZSgKICAgICAgICAgICAgbWlsbGlzZWNvbmRzU2luY2VFcG9jaCAqIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kLAogICAgICAgICAgICBpc1V0YzogaXNVdGMpOwoKICBAcGF0Y2gKICBEYXRlVGltZS5mcm9tTWljcm9zZWNvbmRzU2luY2VFcG9jaChpbnQgbWljcm9zZWNvbmRzU2luY2VFcG9jaCwKICAgICAge2Jvb2wgaXNVdGM6IGZhbHNlfSkKICAgICAgOiB0aGlzLl93aXRoVmFsdWUobWljcm9zZWNvbmRzU2luY2VFcG9jaCwgaXNVdGM6IGlzVXRjKTsKCiAgQHBhdGNoCiAgRGF0ZVRpbWUuX2ludGVybmFsKGludCB5ZWFyLCBpbnQgbW9udGgsIGludCBkYXksIGludCBob3VyLCBpbnQgbWludXRlLAogICAgICBpbnQgc2Vjb25kLCBpbnQgbWlsbGlzZWNvbmQsIGludCBtaWNyb3NlY29uZCwgYm9vbCBpc1V0YykKICAgICAgOiB0aGlzLmlzVXRjID0gaXNVdGMsCiAgICAgICAgdGhpcy5fdmFsdWUgPSBfYnJva2VuRG93bkRhdGVUb1ZhbHVlKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwKICAgICAgICAgICAgc2Vjb25kLCBtaWxsaXNlY29uZCwgbWljcm9zZWNvbmQsIGlzVXRjKSB7CiAgICBpZiAoX3ZhbHVlID09IG51bGwpIHRocm93IG5ldyBBcmd1bWVudEVycm9yKCk7CiAgICBpZiAoaXNVdGMgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IoKTsKICB9CgogIEBwYXRjaAogIERhdGVUaW1lLl9ub3coKQogICAgICA6IGlzVXRjID0gZmFsc2UsCiAgICAgICAgX3ZhbHVlID0gX2dldEN1cnJlbnRNaWNyb3MoKTsKCiAgQHBhdGNoCiAgU3RyaW5nIGdldCB0aW1lWm9uZU5hbWUgewogICAgaWYgKGlzVXRjKSByZXR1cm4gIlVUQyI7CiAgICByZXR1cm4gX3RpbWVab25lTmFtZShtaWNyb3NlY29uZHNTaW5jZUVwb2NoKTsKICB9CgogIEBwYXRjaAogIER1cmF0aW9uIGdldCB0aW1lWm9uZU9mZnNldCB7CiAgICBpZiAoaXNVdGMpIHJldHVybiBuZXcgRHVyYXRpb24oKTsKICAgIGludCBvZmZzZXRJblNlY29uZHMgPSBfdGltZVpvbmVPZmZzZXRJblNlY29uZHMobWljcm9zZWNvbmRzU2luY2VFcG9jaCk7CiAgICByZXR1cm4gbmV3IER1cmF0aW9uKHNlY29uZHM6IG9mZnNldEluU2Vjb25kcyk7CiAgfQoKICBAcGF0Y2gKICBib29sIG9wZXJhdG9yID09KGR5bmFtaWMgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIERhdGVUaW1lICYmCiAgICAgIF92YWx1ZSA9PSBvdGhlci5taWNyb3NlY29uZHNTaW5jZUVwb2NoICYmCiAgICAgIGlzVXRjID09IG90aGVyLmlzVXRjOwoKICBAcGF0Y2gKICBib29sIGlzQmVmb3JlKERhdGVUaW1lIG90aGVyKSA9PiBfdmFsdWUgPCBvdGhlci5taWNyb3NlY29uZHNTaW5jZUVwb2NoOwoKICBAcGF0Y2gKICBib29sIGlzQWZ0ZXIoRGF0ZVRpbWUgb3RoZXIpID0+IF92YWx1ZSA+IG90aGVyLm1pY3Jvc2Vjb25kc1NpbmNlRXBvY2g7CgogIEBwYXRjaAogIGJvb2wgaXNBdFNhbWVNb21lbnRBcyhEYXRlVGltZSBvdGhlcikgPT4KICAgICAgX3ZhbHVlID09IG90aGVyLm1pY3Jvc2Vjb25kc1NpbmNlRXBvY2g7CgogIEBwYXRjaAogIGludCBjb21wYXJlVG8oRGF0ZVRpbWUgb3RoZXIpID0+CiAgICAgIF92YWx1ZS5jb21wYXJlVG8ob3RoZXIubWljcm9zZWNvbmRzU2luY2VFcG9jaCk7CgogIC8qKiBUaGUgZmlyc3QgbGlzdCBjb250YWlucyB0aGUgZGF5cyB1bnRpbCBlYWNoIG1vbnRoIGluIG5vbi1sZWFwIHllYXJzLiBUaGUKICAgICogc2Vjb25kIGxpc3QgY29udGFpbnMgdGhlIGRheXMgaW4gbGVhcCB5ZWFycy4gKi8KICBzdGF0aWMgY29uc3QgTGlzdDxMaXN0PGludD4+IF9EQVlTX1VOVElMX01PTlRIID0gY29uc3QgWwogICAgY29uc3QgWzAsIDMxLCA1OSwgOTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0XSwKICAgIGNvbnN0IFswLCAzMSwgNjAsIDkxLCAxMjEsIDE1MiwgMTgyLCAyMTMsIDI0NCwgMjc0LCAzMDUsIDMzNV0KICBdOwoKICBzdGF0aWMgTGlzdCBfY29tcHV0ZVVwcGVyUGFydChpbnQgbG9jYWxNaWNyb3MpIHsKICAgIGNvbnN0IGludCBEQVlTX0lOXzRfWUVBUlMgPSA0ICogMzY1ICsgMTsKICAgIGNvbnN0IGludCBEQVlTX0lOXzEwMF9ZRUFSUyA9IDI1ICogREFZU19JTl80X1lFQVJTIC0gMTsKICAgIGNvbnN0IGludCBEQVlTX0lOXzQwMF9ZRUFSUyA9IDQgKiBEQVlTX0lOXzEwMF9ZRUFSUyArIDE7CiAgICBjb25zdCBpbnQgREFZU18xOTcwX1RPXzIwMDAgPSAzMCAqIDM2NSArIDc7CiAgICBjb25zdCBpbnQgREFZU19PRkZTRVQgPQogICAgICAgIDEwMDAgKiBEQVlTX0lOXzQwMF9ZRUFSUyArIDUgKiBEQVlTX0lOXzQwMF9ZRUFSUyAtIERBWVNfMTk3MF9UT18yMDAwOwogICAgY29uc3QgaW50IFlFQVJTX09GRlNFVCA9IDQwMDAwMDsKCiAgICBpbnQgcmVzdWx0WWVhciA9IDA7CiAgICBpbnQgcmVzdWx0TW9udGggPSAwOwogICAgaW50IHJlc3VsdERheSA9IDA7CgogICAgLy8gQWx3YXlzIHJvdW5kIGRvd24uCiAgICBmaW5hbCBpbnQgZGF5c1NpbmNlMTk3MCA9CiAgICAgICAgX2Zsb29yZWREaXZpc2lvbihsb2NhbE1pY3JvcywgRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyRGF5KTsKICAgIGludCBkYXlzID0gZGF5c1NpbmNlMTk3MDsKICAgIGRheXMgKz0gREFZU19PRkZTRVQ7CiAgICByZXN1bHRZZWFyID0gNDAwICogKGRheXMgfi8gREFZU19JTl80MDBfWUVBUlMpIC0gWUVBUlNfT0ZGU0VUOwogICAgZGF5cyA9IGRheXMucmVtYWluZGVyKERBWVNfSU5fNDAwX1lFQVJTKTsKICAgIGRheXMtLTsKICAgIGludCB5ZDEgPSBkYXlzIH4vIERBWVNfSU5fMTAwX1lFQVJTOwogICAgZGF5cyA9IGRheXMucmVtYWluZGVyKERBWVNfSU5fMTAwX1lFQVJTKTsKICAgIHJlc3VsdFllYXIgKz0gMTAwICogeWQxOwogICAgZGF5cysrOwogICAgaW50IHlkMiA9IGRheXMgfi8gREFZU19JTl80X1lFQVJTOwogICAgZGF5cyA9IGRheXMucmVtYWluZGVyKERBWVNfSU5fNF9ZRUFSUyk7CiAgICByZXN1bHRZZWFyICs9IDQgKiB5ZDI7CiAgICBkYXlzLS07CiAgICBpbnQgeWQzID0gZGF5cyB+LyAzNjU7CiAgICBkYXlzID0gZGF5cy5yZW1haW5kZXIoMzY1KTsKICAgIHJlc3VsdFllYXIgKz0geWQzOwoKICAgIGJvb2wgaXNMZWFwID0gKHlkMSA9PSAwIHx8IHlkMiAhPSAwKSAmJiB5ZDMgPT0gMDsKICAgIGlmIChpc0xlYXApIGRheXMrKzsKCiAgICBMaXN0PGludD4gZGF5c1VudGlsTW9udGggPSBfREFZU19VTlRJTF9NT05USFtpc0xlYXAgPyAxIDogMF07CiAgICBmb3IgKHJlc3VsdE1vbnRoID0gMTI7CiAgICAgICAgZGF5c1VudGlsTW9udGhbcmVzdWx0TW9udGggLSAxXSA+IGRheXM7CiAgICAgICAgcmVzdWx0TW9udGgtLSkgewogICAgICAvLyBEbyBub3RoaW5nLgogICAgfQogICAgcmVzdWx0RGF5ID0gZGF5cyAtIGRheXNVbnRpbE1vbnRoW3Jlc3VsdE1vbnRoIC0gMV0gKyAxOwoKICAgIGludCByZXN1bHRNaWNyb3NlY29uZCA9IGxvY2FsTWljcm9zICUgRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyTWlsbGlzZWNvbmQ7CiAgICBpbnQgcmVzdWx0TWlsbGlzZWNvbmQgPQogICAgICAgIF9mbG9vcmVkRGl2aXNpb24obG9jYWxNaWNyb3MsIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kKSAlCiAgICAgICAgICAgIER1cmF0aW9uLm1pbGxpc2Vjb25kc1BlclNlY29uZDsKICAgIGludCByZXN1bHRTZWNvbmQgPQogICAgICAgIF9mbG9vcmVkRGl2aXNpb24obG9jYWxNaWNyb3MsIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlclNlY29uZCkgJQogICAgICAgICAgICBEdXJhdGlvbi5zZWNvbmRzUGVyTWludXRlOwoKICAgIGludCByZXN1bHRNaW51dGUgPQogICAgICAgIF9mbG9vcmVkRGl2aXNpb24obG9jYWxNaWNyb3MsIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbnV0ZSk7CiAgICByZXN1bHRNaW51dGUgJT0gRHVyYXRpb24ubWludXRlc1BlckhvdXI7CgogICAgaW50IHJlc3VsdEhvdXIgPQogICAgICAgIF9mbG9vcmVkRGl2aXNpb24obG9jYWxNaWNyb3MsIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlckhvdXIpOwogICAgcmVzdWx0SG91ciAlPSBEdXJhdGlvbi5ob3Vyc1BlckRheTsKCiAgICAvLyBJbiBhY2NvcmRhbmNlIHdpdGggSVNPIDg2MDEgYSB3ZWVrCiAgICAvLyBzdGFydHMgd2l0aCBNb25kYXkuIE1vbmRheSBoYXMgdGhlIHZhbHVlIDEgdXAgdG8gU3VuZGF5IHdpdGggNy4KICAgIC8vIDE5NzAtMS0xIHdhcyBhIFRodXJzZGF5LgogICAgaW50IHJlc3VsdFdlZWtkYXkgPSAoKGRheXNTaW5jZTE5NzAgKyBEYXRlVGltZS50aHVyc2RheSAtIERhdGVUaW1lLm1vbmRheSkgJQogICAgICAgICAgICBEYXRlVGltZS5kYXlzUGVyV2VlaykgKwogICAgICAgIERhdGVUaW1lLm1vbmRheTsKCiAgICBMaXN0IGxpc3QgPSBuZXcgTGlzdChfWUVBUl9JTkRFWCArIDEpOwogICAgbGlzdFtfTUlDUk9TRUNPTkRfSU5ERVhdID0gcmVzdWx0TWljcm9zZWNvbmQ7CiAgICBsaXN0W19NSUxMSVNFQ09ORF9JTkRFWF0gPSByZXN1bHRNaWxsaXNlY29uZDsKICAgIGxpc3RbX1NFQ09ORF9JTkRFWF0gPSByZXN1bHRTZWNvbmQ7CiAgICBsaXN0W19NSU5VVEVfSU5ERVhdID0gcmVzdWx0TWludXRlOwogICAgbGlzdFtfSE9VUl9JTkRFWF0gPSByZXN1bHRIb3VyOwogICAgbGlzdFtfREFZX0lOREVYXSA9IHJlc3VsdERheTsKICAgIGxpc3RbX1dFRUtEQVlfSU5ERVhdID0gcmVzdWx0V2Vla2RheTsKICAgIGxpc3RbX01PTlRIX0lOREVYXSA9IHJlc3VsdE1vbnRoOwogICAgbGlzdFtfWUVBUl9JTkRFWF0gPSByZXN1bHRZZWFyOwogICAgcmV0dXJuIGxpc3Q7CiAgfQoKICBnZXQgX3BhcnRzIHsKICAgIF9fcGFydHMgPz89IF9jb21wdXRlVXBwZXJQYXJ0KF9sb2NhbERhdGVJblV0Y01pY3Jvcyk7CiAgICByZXR1cm4gX19wYXJ0czsKICB9CgogIEBwYXRjaAogIERhdGVUaW1lIGFkZChEdXJhdGlvbiBkdXJhdGlvbikgewogICAgcmV0dXJuIG5ldyBEYXRlVGltZS5fd2l0aFZhbHVlKF92YWx1ZSArIGR1cmF0aW9uLmluTWljcm9zZWNvbmRzLAogICAgICAgIGlzVXRjOiBpc1V0Yyk7CiAgfQoKICBAcGF0Y2gKICBEYXRlVGltZSBzdWJ0cmFjdChEdXJhdGlvbiBkdXJhdGlvbikgewogICAgcmV0dXJuIG5ldyBEYXRlVGltZS5fd2l0aFZhbHVlKF92YWx1ZSAtIGR1cmF0aW9uLmluTWljcm9zZWNvbmRzLAogICAgICAgIGlzVXRjOiBpc1V0Yyk7CiAgfQoKICBAcGF0Y2gKICBEdXJhdGlvbiBkaWZmZXJlbmNlKERhdGVUaW1lIG90aGVyKSB7CiAgICByZXR1cm4gbmV3IER1cmF0aW9uKG1pY3Jvc2Vjb25kczogX3ZhbHVlIC0gb3RoZXIuX3ZhbHVlKTsKICB9CgogIEBwYXRjaAogIGludCBnZXQgbWlsbGlzZWNvbmRzU2luY2VFcG9jaCA9PgogICAgICBfdmFsdWUgfi8gRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyTWlsbGlzZWNvbmQ7CgogIEBwYXRjaAogIGludCBnZXQgbWljcm9zZWNvbmRzU2luY2VFcG9jaCA9PiBfdmFsdWU7CgogIEBwYXRjaAogIGludCBnZXQgbWljcm9zZWNvbmQgPT4gX3BhcnRzW19NSUNST1NFQ09ORF9JTkRFWF07CgogIEBwYXRjaAogIGludCBnZXQgbWlsbGlzZWNvbmQgPT4gX3BhcnRzW19NSUxMSVNFQ09ORF9JTkRFWF07CgogIEBwYXRjaAogIGludCBnZXQgc2Vjb25kID0+IF9wYXJ0c1tfU0VDT05EX0lOREVYXTsKCiAgQHBhdGNoCiAgaW50IGdldCBtaW51dGUgPT4gX3BhcnRzW19NSU5VVEVfSU5ERVhdOwoKICBAcGF0Y2gKICBpbnQgZ2V0IGhvdXIgPT4gX3BhcnRzW19IT1VSX0lOREVYXTsKCiAgQHBhdGNoCiAgaW50IGdldCBkYXkgPT4gX3BhcnRzW19EQVlfSU5ERVhdOwoKICBAcGF0Y2gKICBpbnQgZ2V0IHdlZWtkYXkgPT4gX3BhcnRzW19XRUVLREFZX0lOREVYXTsKCiAgQHBhdGNoCiAgaW50IGdldCBtb250aCA9PiBfcGFydHNbX01PTlRIX0lOREVYXTsKCiAgQHBhdGNoCiAgaW50IGdldCB5ZWFyID0+IF9wYXJ0c1tfWUVBUl9JTkRFWF07CgogIC8qKgogICAqIFJldHVybnMgdGhlIGFtb3VudCBvZiBtaWNyb3NlY29uZHMgaW4gVVRDIHRoYXQgcmVwcmVzZW50IHRoZSBzYW1lIHZhbHVlcwogICAqIGFzIFt0aGlzXS4KICAgKgogICAqIFNheSBgdGAgaXMgdGhlIHJlc3VsdCBvZiB0aGlzIGZ1bmN0aW9uLCB0aGVuCiAgICogKiBgdGhpcy55ZWFyID09IG5ldyBEYXRlVGltZS5mcm9tTWljcm9zZWNvbmRzU2luY2VFcG9jaCh0LCB0cnVlKS55ZWFyYCwKICAgKiAqIGB0aGlzLm1vbnRoID09IG5ldyBEYXRlVGltZS5mcm9tTWljcm9zZWNvbmRzU2luY2VFcG9jaCh0LCB0cnVlKS5tb250aGAsCiAgICogKiBgdGhpcy5kYXkgPT0gbmV3IERhdGVUaW1lLmZyb21NaWNyb3NlY29uZHNTaW5jZUVwb2NoKHQsIHRydWUpLmRheWAsCiAgICogKiBgdGhpcy5ob3VyID09IG5ldyBEYXRlVGltZS5mcm9tTWljcm9zZWNvbmRzU2luY2VFcG9jaCh0LCB0cnVlKS5ob3VyYCwKICAgKiAqIC4uLgogICAqCiAgICogRGF5bGlnaHQgc2F2aW5ncyBpcyBjb21wdXRlZCBhcyBpZiB0aGUgZGF0ZSB3YXMgY29tcHV0ZWQgaW4gWzE5NzAuLjIwMzddLgogICAqIElmIFt0aGlzXSBsaWVzIG91dHNpZGUgdGhpcyByYW5nZSB0aGVuIGl0IGlzIGEgeWVhciB3aXRoIHNpbWlsYXIKICAgKiBwcm9wZXJ0aWVzIChsZWFwIHllYXIsIHdlZWtkYXlzKSBpcyB1c2VkIGluc3RlYWQuCiAgICovCiAgaW50IGdldCBfbG9jYWxEYXRlSW5VdGNNaWNyb3MgewogICAgaW50IG1pY3JvcyA9IF92YWx1ZTsKICAgIGlmIChpc1V0YykgcmV0dXJuIG1pY3JvczsKICAgIGludCBvZmZzZXQgPQogICAgICAgIF90aW1lWm9uZU9mZnNldEluU2Vjb25kcyhtaWNyb3MpICogRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyU2Vjb25kOwogICAgcmV0dXJuIG1pY3JvcyArIG9mZnNldDsKICB9CgogIHN0YXRpYyBpbnQgX2Zsb29yZWREaXZpc2lvbihpbnQgYSwgaW50IGIpIHsKICAgIHJldHVybiAoYSAtIChhIDwgMCA/IGIgLSAxIDogMCkpIH4vIGI7CiAgfQoKICAvLyBSZXR1cm5zIHRoZSBkYXlzIHNpbmNlIDE5NzAgZm9yIHRoZSBzdGFydCBvZiB0aGUgZ2l2ZW4gW3llYXJdLgogIC8vIFt5ZWFyXSBtYXkgYmUgYmVmb3JlIGVwb2NoLgogIHN0YXRpYyBpbnQgX2RheUZyb21ZZWFyKGludCB5ZWFyKSB7CiAgICByZXR1cm4gMzY1ICogKHllYXIgLSAxOTcwKSArCiAgICAgICAgX2Zsb29yZWREaXZpc2lvbih5ZWFyIC0gMTk2OSwgNCkgLQogICAgICAgIF9mbG9vcmVkRGl2aXNpb24oeWVhciAtIDE5MDEsIDEwMCkgKwogICAgICAgIF9mbG9vcmVkRGl2aXNpb24oeWVhciAtIDE2MDEsIDQwMCk7CiAgfQoKICBzdGF0aWMgYm9vbCBfaXNMZWFwWWVhcih5KSB7CiAgICAvLyAoeSAlIDE2ID09IDApIG1hdGNoZXMgbXVsdGlwbGVzIG9mIDQwMCwgYW5kIGlzIGZhc3RlciB0aGFuICUgNDAwLgogICAgcmV0dXJuICh5ICUgNCA9PSAwKSAmJiAoKHkgJSAxNiA9PSAwKSB8fCAoeSAlIDEwMCAhPSAwKSk7CiAgfQoKICAvLy8gQ29udmVydHMgdGhlIGdpdmVuIGJyb2tlbiBkb3duIGRhdGUgdG8gbWljcm9zZWNvbmRzLgogIEBwYXRjaAogIHN0YXRpYyBpbnQgX2Jyb2tlbkRvd25EYXRlVG9WYWx1ZShpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5LCBpbnQgaG91ciwKICAgICAgaW50IG1pbnV0ZSwgaW50IHNlY29uZCwgaW50IG1pbGxpc2Vjb25kLCBpbnQgbWljcm9zZWNvbmQsIGJvb2wgaXNVdGMpIHsKICAgIC8vIFNpbXBsaWZ5IGNhbGN1bGF0aW9ucyBieSB3b3JraW5nIHdpdGggemVyby1iYXNlZCBtb250aC4KICAgIC0tbW9udGg7CiAgICAvLyBEZWFsIHdpdGggdW5kZXIgYW5kIG92ZXJmbG93LgogICAgaWYgKG1vbnRoID49IDEyKSB7CiAgICAgIHllYXIgKz0gbW9udGggfi8gMTI7CiAgICAgIG1vbnRoID0gbW9udGggJSAxMjsKICAgIH0gZWxzZSBpZiAobW9udGggPCAwKSB7CiAgICAgIGludCByZWFsTW9udGggPSBtb250aCAlIDEyOwogICAgICB5ZWFyICs9IChtb250aCAtIHJlYWxNb250aCkgfi8gMTI7CiAgICAgIG1vbnRoID0gcmVhbE1vbnRoOwogICAgfQoKICAgIC8vIEZpcnN0IGNvbXB1dGUgdGhlIHNlY29uZHMgaW4gVVRDLCBpbmRlcGVuZGVudCBvZiB0aGUgW2lzVXRjXSBmbGFnLiBJZgogICAgLy8gbmVjZXNzYXJ5IHdlIHdpbGwgYWRkIHRoZSB0aW1lLXpvbmUgb2Zmc2V0IGxhdGVyIG9uLgogICAgaW50IGRheXMgPSBkYXkgLSAxOwogICAgZGF5cyArPSBfREFZU19VTlRJTF9NT05USFtfaXNMZWFwWWVhcih5ZWFyKSA/IDEgOiAwXVttb250aF07CiAgICBkYXlzICs9IF9kYXlGcm9tWWVhcih5ZWFyKTsKICAgIGludCBtaWNyb3NlY29uZHNTaW5jZUVwb2NoID0gZGF5cyAqIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlckRheSArCiAgICAgICAgaG91ciAqIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlckhvdXIgKwogICAgICAgIG1pbnV0ZSAqIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbnV0ZSArCiAgICAgICAgc2Vjb25kICogRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyU2Vjb25kICsKICAgICAgICBtaWxsaXNlY29uZCAqIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kICsKICAgICAgICBtaWNyb3NlY29uZDsKCiAgICAvLyBTaW5jZSBbX3RpbWVab25lT2Zmc2V0SW5TZWNvbmRzXSB3aWxsIGNyYXNoIGlmIHRoZSBpbnB1dCBpcyBmYXIgb3V0IG9mCiAgICAvLyB0aGUgdmFsaWQgcmFuZ2Ugd2UgZG8gYSBwcmVsaW1pbmFyeSB0ZXN0IHRoYXQgd2VlZHMgb3V0IHZhbHVlcyB0aGF0IGNhbgogICAgLy8gbm90IGJlY29tZSB2YWxpZCBldmVuIHdpdGggdGltZXpvbmUgYWRqdXN0bWVudHMuCiAgICAvLyBUaGUgdGltZXpvbmUgYWRqdXN0bWVudCBpcyBhbHdheXMgbGVzcyB0aGFuIGEgZGF5LCBzbyBhZGRpbmcgYSBzZWN1cml0eQogICAgLy8gbWFyZ2luIG9mIG9uZSBkYXkgc2hvdWxkIGJlIGVub3VnaC4KICAgIGlmIChtaWNyb3NlY29uZHNTaW5jZUVwb2NoLmFicygpID4KICAgICAgICBfbWF4TWlsbGlzZWNvbmRzU2luY2VFcG9jaCAqIDEwMDAgKyBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJEYXkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgaWYgKCFpc1V0YykgewogICAgICAvLyBOb3RlIHRoYXQgd2UgY2FuJ3QgbGl0ZXJhbGx5IGZvbGxvdyB0aGUgRUNNQVNjcmlwdCBzcGVjICh3aGljaCB0aGlzCiAgICAgIC8vIGNvZGUgaXMgYmFzZWQgb24pLCBiZWNhdXNlIGl0IGxlYWRzIHRvIGluY29ycmVjdCBjb21wdXRhdGlvbnMgYXQKICAgICAgLy8gdGhlIERTVCB0cmFuc2l0aW9uIHBvaW50cy4KICAgICAgLy8KICAgICAgLy8gU2VlIFY4J3MgY29tbWVudCBoZXJlOgogICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdjgvdjgvYmxvYi8wODlkZDdkMjQ0N2Q2ZWFmNTdjOGJhNmQ4ZjM3OTU3ZjNhMjY5Nzc3L3NyYy9kYXRlLmgjTDExOAoKICAgICAgLy8gV2UgbmVlZCB0byByZW1vdmUgdGhlIGxvY2FsIHRpbWV6b25lIGFkanVzdG1lbnQgYmVmb3JlIGFza2luZyBmb3IgdGhlCiAgICAgIC8vIGNvcnJlY3Qgem9uZSBvZmZzZXQuCiAgICAgIGludCBhZGp1c3RtZW50ID0KICAgICAgICAgIF9sb2NhbFRpbWVab25lQWRqdXN0bWVudEluU2Vjb25kcygpICogRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyU2Vjb25kOwogICAgICAvLyBUaGUgYWRqdXN0bWVudCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgYWN0dWFsIGRhdGUgYW5kIG9mIHRoZSBkYXlsaWdodAogICAgICAvLyBzYXZpbmcgdGltZS4gSXQgaXMgcG9zaXRpdmUgZWFzdCBvZiB0aGUgUHJpbWUgTWVyaWRpYW4gYW5kIG5lZ2F0aXZlCiAgICAgIC8vIHdlc3Qgb2YgaXQsIGUuZy4gLTI4ODAwIHNlYyBmb3IgQW1lcmljYS9Mb3NfQW5nZWxlcyB0aW1lem9uZS4KCiAgICAgIC8vIFdlIHJlbW92ZSBvbmUgaG91ciB0byBlbnN1cmUgdGhhdCB3ZSBoYXZlIHRoZSBjb3JyZWN0IG9mZnNldCBhdAogICAgICAvLyBEU1QgdHJhbnNpdGlvbmluZyBwb2ludHMuIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gYW5kIG9ubHkKICAgICAgLy8gY29ycmVjdCBpbiB0aW1lem9uZXMgdGhhdCBzaGlmdCBmb3IgZXhhY3RseSBvbmUgaG91ci4KICAgICAgYWRqdXN0bWVudCArPSBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJIb3VyOwogICAgICBpbnQgem9uZU9mZnNldCA9CiAgICAgICAgICBfdGltZVpvbmVPZmZzZXRJblNlY29uZHMobWljcm9zZWNvbmRzU2luY2VFcG9jaCAtIGFkanVzdG1lbnQpOwoKICAgICAgLy8gVGhlIHpvbmVPZmZzZXQgZGVwZW5kcyBvbiB0aGUgYWN0dWFsIGRhdGUgYW5kIHJlZmxlY3RzIGFueSBkYXlsaWdodAogICAgICAvLyBzYXZpbmcgdGltZSBhbmQvb3IgaGlzdG9yaWNhbCBkZXZpYXRpb24gcmVsYXRpdmUgdG8gVVRDIHRpbWUuCiAgICAgIC8vIEl0IGlzIHBvc2l0aXZlIGVhc3Qgb2YgdGhlIFByaW1lIE1lcmlkaWFuIGFuZCBuZWdhdGl2ZSB3ZXN0IG9mIGl0LAogICAgICAvLyBlLmcuIC0yNTIwMCBzZWMgZm9yIEFtZXJpY2EvTG9zX0FuZ2VsZXMgdGltZXpvbmUgZHVyaW5nIERTVC4KICAgICAgbWljcm9zZWNvbmRzU2luY2VFcG9jaCAtPSB6b25lT2Zmc2V0ICogRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyU2Vjb25kOwogICAgICAvLyBUaGUgcmVzdWx0aW5nIG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2ggdmFsdWUgaXMgdGhlcmVmb3JlIHRoZSBjYWxjdWxhdGVkCiAgICAgIC8vIFVUQyB2YWx1ZSBkZWNyZWFzZWQgYnkgYSAocG9zaXRpdmUgaWYgZWFzdCBvZiBHTVQpIHRpbWV6b25lIGFkanVzdG1lbnQKICAgICAgLy8gYW5kIGRlY3JlYXNlZCBieSB0eXBpY2FsbHkgb25lIGhvdXIgaWYgRFNUIGlzIGluIGVmZmVjdC4KICAgIH0KICAgIGlmIChtaWNyb3NlY29uZHNTaW5jZUVwb2NoLmFicygpID4KICAgICAgICBfbWF4TWlsbGlzZWNvbmRzU2luY2VFcG9jaCAqIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgcmV0dXJuIG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2g7CiAgfQoKICBzdGF0aWMgaW50IF93ZWVrRGF5KHkpIHsKICAgIC8vIDEvMS8xOTcwIHdhcyBhIFRodXJzZGF5LgogICAgcmV0dXJuIChfZGF5RnJvbVllYXIoeSkgKyA0KSAlIDc7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGEgeWVhciBpbiB0aGUgcmFuZ2UgMjAwOC0yMDM1IG1hdGNoaW5nCiAgICogKiBsZWFwIHllYXIsIGFuZAogICAqICogd2VlayBkYXkgb2YgZmlyc3QgZGF5LgogICAqCiAgICogTGVhcCBzZWNvbmRzIGFyZSBpZ25vcmVkLgogICAqIEFkYXB0ZWQgZnJvbSBWOCdzIGRhdGUgaW1wbGVtZW50YXRpb24uIFNlZSBFQ01BIDI2MiAtIDE1LjkuMS45LgogICAqLwogIHN0YXRpYyBpbnQgX2VxdWl2YWxlbnRZZWFyKGludCB5ZWFyKSB7CiAgICAvLyBSZXR1cm5zIHllYXIgeSBzbyB0aGF0IF93ZWVrRGF5KHkpID09IF93ZWVrRGF5KHllYXIpLgogICAgLy8gX3dlZWtEYXkgcmV0dXJucyB0aGUgd2VlayBkYXkgKGluIHJhbmdlIDAgLSA2KS4KICAgIC8vIDEvMS8xOTU2IHdhcyBhIFN1bmRheSAoaS5lLiB3ZWVrZGF5IDApLiAxOTU2IHdhcyBhIGxlYXAteWVhci4KICAgIC8vIDEvMS8xOTY3IHdhcyBhIFN1bmRheSAoaS5lLiB3ZWVrZGF5IDApLgogICAgLy8gV2l0aG91dCBsZWFwIHllYXJzIGEgc3Vic2VxdWVudCB5ZWFyIGhhcyBhIHdlZWsgZGF5ICsgMSAoZm9yIGV4YW1wbGUKICAgIC8vIDEvMS8xOTY4IHdhcyBhIE1vbmRheSkuIFdpdGggbGVhcC15ZWFycyBpdCBqdW1wcyBvdmVyIG9uZSB3ZWVrIGRheQogICAgLy8gKGUuZy4gMS8xLzE5NTcgd2FzIGEgVHVlc2RheSkuCiAgICAvLyBBZnRlciAxMiB5ZWFycyB0aGUgd2Vla2RheXMgaGF2ZSBhZHZhbmNlZCBieSAxMiBkYXlzICsgMyBsZWFwIGRheXMgPQogICAgLy8gMTUgZGF5cy4gMTUgJSA3ID0gMS4gU28gYWZ0ZXIgMTIgeWVhcnMgdGhlIHdlZWsgZGF5IGhhcyBhbHdheXMKICAgIC8vIChub3cgaW5kZXBlbmRlbnRseSBvZiBsZWFwLXllYXJzKSBhZHZhbmNlZCBieSBvbmUuCiAgICAvLyB3ZWVrRGF5ICogMTIgZ2l2ZXMgdGh1cyBhIHllYXIgc3RhcnRpbmcgd2l0aCB0aGUgd2FudGVkIHdlZWtEYXkuCiAgICBpbnQgcmVjZW50WWVhciA9IChfaXNMZWFwWWVhcih5ZWFyKSA/IDE5NTYgOiAxOTY3KSArIChfd2Vla0RheSh5ZWFyKSAqIDEyKTsKICAgIC8vIENsb3NlIHRvIHRoZSB5ZWFyIDIwMDggdGhlIGNhbGVuZGFyIGN5Y2xlcyBldmVyeSA0ICogNyB5ZWFycyAoNCBmb3IgdGhlCiAgICAvLyBsZWFwIHllYXJzLCA3IGZvciB0aGUgd2Vla2RheXMpLgogICAgLy8gRmluZCB0aGUgeWVhciBpbiB0aGUgcmFuZ2UgMjAwOC4uMjAzNyB0aGF0IGlzIGVxdWl2YWxlbnQgbW9kIDI4LgogICAgcmV0dXJuIDIwMDggKyAocmVjZW50WWVhciAtIDIwMDgpICUgMjg7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBVVEMgeWVhciBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgW3NlY29uZHNTaW5jZUVwb2NoXS4KICAgKiBJdCBpcyByZWxhdGl2ZWx5IGZhc3QgZm9yIHZhbHVlcyBpbiB0aGUgcmFuZ2UgMCB0byB5ZWFyIDIwOTguCiAgICoKICAgKiBDb2RlIGlzIGFkYXB0ZWQgZnJvbSBWOC4KICAgKi8KICBzdGF0aWMgaW50IF95ZWFyc0Zyb21TZWNvbmRzU2luY2VFcG9jaChpbnQgc2Vjb25kc1NpbmNlRXBvY2gpIHsKICAgIGNvbnN0IGludCBEQVlTX0lOXzRfWUVBUlMgPSA0ICogMzY1ICsgMTsKICAgIGNvbnN0IGludCBEQVlTX0lOXzEwMF9ZRUFSUyA9IDI1ICogREFZU19JTl80X1lFQVJTIC0gMTsKICAgIGNvbnN0IGludCBEQVlTX1lFQVJfMjA5OCA9IERBWVNfSU5fMTAwX1lFQVJTICsgNiAqIERBWVNfSU5fNF9ZRUFSUzsKCiAgICBpbnQgZGF5cyA9IHNlY29uZHNTaW5jZUVwb2NoIH4vIER1cmF0aW9uLnNlY29uZHNQZXJEYXk7CiAgICBpZiAoZGF5cyA+IDAgJiYgZGF5cyA8IERBWVNfWUVBUl8yMDk4KSB7CiAgICAgIC8vIEFjY29yZGluZyB0byBWOCB0aGlzIGZhc3QgY2FzZSB3b3JrcyBmb3IgZGF0ZXMgZnJvbSAxOTcwIHRvIDIwOTkuCiAgICAgIHJldHVybiAxOTcwICsgKDQgKiBkYXlzICsgMikgfi8gREFZU19JTl80X1lFQVJTOwogICAgfQogICAgaW50IG1pY3JvcyA9IHNlY29uZHNTaW5jZUVwb2NoICogRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyU2Vjb25kOwogICAgcmV0dXJuIF9jb21wdXRlVXBwZXJQYXJ0KG1pY3JvcylbX1lFQVJfSU5ERVhdOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIGRhdGUgaW4gc2Vjb25kcyB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIGdpdmVuCiAgICogZGF0ZSBpbiBtaWNyb3NlY29uZHMgW21pY3Jvc2Vjb25kc1NpbmNlRXBvY2hdLiBBbiBlcXVpdmFsZW50CiAgICogZGF0ZSBoYXMgdGhlIHNhbWUgZmllbGRzIChgbW9udGhgLCBgZGF5YCwgZXRjLikgYXMgdGhlIGdpdmVuCiAgICogZGF0ZSwgYnV0IHRoZSBgeWVhcmAgaXMgaW4gdGhlIHJhbmdlIFsxOTAxLi4yMDM4XS4KICAgKgogICAqICogVGhlIHRpbWUgc2luY2UgdGhlIGJlZ2lubmluZyBvZiB0aGUgeWVhciBpcyB0aGUgc2FtZS4KICAgKiAqIElmIHRoZSBnaXZlbiBkYXRlIGlzIGluIGEgbGVhcCB5ZWFyIHRoZW4gdGhlIHJldHVybmVkCiAgICogICBzZWNvbmRzIGFyZSBpbiBhIGxlYXAgeWVhciwgdG9vLgogICAqICogVGhlIHdlZWsgZGF5IG9mIGdpdmVuIGRhdGUgaXMgdGhlIHNhbWUgYXMgdGhlIG9uZSBmb3IgdGhlCiAgICogICByZXR1cm5lZCBkYXRlLgogICAqLwogIHN0YXRpYyBpbnQgX2VxdWl2YWxlbnRTZWNvbmRzKGludCBtaWNyb3NlY29uZHNTaW5jZUVwb2NoKSB7CiAgICBjb25zdCBpbnQgQ1VUX09GRl9TRUNPTkRTID0gMHg3RkZGRkZGRjsKCiAgICBpbnQgc2Vjb25kc1NpbmNlRXBvY2ggPSBfZmxvb3JlZERpdmlzaW9uKAogICAgICAgIG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gsIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlclNlY29uZCk7CgogICAgaWYgKHNlY29uZHNTaW5jZUVwb2NoLmFicygpID4gQ1VUX09GRl9TRUNPTkRTKSB7CiAgICAgIGludCB5ZWFyID0gX3llYXJzRnJvbVNlY29uZHNTaW5jZUVwb2NoKHNlY29uZHNTaW5jZUVwb2NoKTsKICAgICAgaW50IGRheXMgPSBfZGF5RnJvbVllYXIoeWVhcik7CiAgICAgIGludCBlcXVpdmFsZW50WWVhciA9IF9lcXVpdmFsZW50WWVhcih5ZWFyKTsKICAgICAgaW50IGVxdWl2YWxlbnREYXlzID0gX2RheUZyb21ZZWFyKGVxdWl2YWxlbnRZZWFyKTsKICAgICAgaW50IGRpZmZEYXlzID0gZXF1aXZhbGVudERheXMgLSBkYXlzOwogICAgICBzZWNvbmRzU2luY2VFcG9jaCArPSBkaWZmRGF5cyAqIER1cmF0aW9uLnNlY29uZHNQZXJEYXk7CiAgICB9CiAgICByZXR1cm4gc2Vjb25kc1NpbmNlRXBvY2g7CiAgfQoKICBzdGF0aWMgaW50IF90aW1lWm9uZU9mZnNldEluU2Vjb25kcyhpbnQgbWljcm9zZWNvbmRzU2luY2VFcG9jaCkgewogICAgaW50IGVxdWl2YWxlbnRTZWNvbmRzID0gX2VxdWl2YWxlbnRTZWNvbmRzKG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gpOwogICAgcmV0dXJuIF90aW1lWm9uZU9mZnNldEluU2Vjb25kc0ZvckNsYW1wZWRTZWNvbmRzKGVxdWl2YWxlbnRTZWNvbmRzKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgX3RpbWVab25lTmFtZShpbnQgbWljcm9zZWNvbmRzU2luY2VFcG9jaCkgewogICAgaW50IGVxdWl2YWxlbnRTZWNvbmRzID0gX2VxdWl2YWxlbnRTZWNvbmRzKG1pY3Jvc2Vjb25kc1NpbmNlRXBvY2gpOwogICAgcmV0dXJuIF90aW1lWm9uZU5hbWVGb3JDbGFtcGVkU2Vjb25kcyhlcXVpdmFsZW50U2Vjb25kcyk7CiAgfQp9CoHAAE5OPAEeASIHEQ5FRgFGJgFOMQExOgEnJyIiIB8jISABEAEJQhsZShsBCUIbPwEJSUAcTTczMgQBCRIXJgEJHB0yBAEJICZMMwQBCSUbMBwBCUoBCUkBCSsuAQkjNgFPNjtDQgUBMy08PTAcTiUBGBkXARoeRB4ZQy4MKS4dDCcsGwwbIBcBNhgBQhswGRUGPAFPHE0sF0gnARdHLQEVRSgBKkcgUSQZASsyMigoJCIqJiQRBAEPOhQEAQkkRRcEAQkpRRcEAQkoPgQBCSQ1AQksAQk1AQk1AQkrAQkrAQknAQklAQktAQkpAQknAQZOEAUyTU9LTQsFT0Y3BiIZHhFLHAQBLisEAUQhJiErLSwEAR9JPgQBOwlMTj8NJRcbGhwiKRkGAU08GEEgRi4yMjwVAU5POE8rJ0sTBgESTUokCSBgAU8eF1BOTUcBSUk/MhdJAU1HTEZNUFBCBidMEwYjBAEbICYEAQY0Fh4FH0UGKT03RS9MSiZMRjpIUE8oSCwEAQZFQwUeBkItPEgBPC1LNwZFMwQBBj9CQjgFPT0oQRYGPiwBLkEBNUElMjksPgYeBAFESEkEATxIPgQCAR9kYXJ0OmNvcmUtcGF0Y2gvZGF0ZV9wYXRjaC5kYXJ0LG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL2RvdWJsZS5kYXJ0nBEvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovLyBUT0RPOiBDb252ZXJ0IHRoaXMgYWJzdHJhY3QgY2xhc3MgaW50byBhIGNvbmNyZXRlIGNsYXNzIGRvdWJsZQovLyB0aGF0IHVzZXMgdGhlIHBhdGNoIGNsYXNzIGZ1bmN0aW9uYWxpdHkgdG8gYWNjb3VudCBmb3IgdGhlCi8vIGRpZmZlcmVudCBwbGF0Zm9ybSBpbXBsZW1lbnRhdGlvbnMuCgovKioKICogQSBkb3VibGUtcHJlY2lzaW9uIGZsb2F0aW5nIHBvaW50IG51bWJlci4KICoKICogUmVwcmVzZW50YXRpb24gb2YgRGFydCBkb3VibGVzIGNvbnRhaW5pbmcgZG91YmxlIHNwZWNpZmljIGNvbnN0YW50cwogKiBhbmQgb3BlcmF0aW9ucyBhbmQgc3BlY2lhbGl6YXRpb25zIG9mIG9wZXJhdGlvbnMgaW5oZXJpdGVkIGZyb20KICogW251bV0uIERhcnQgZG91YmxlcyBhcmUgNjQtYml0IGZsb2F0aW5nLXBvaW50IG51bWJlcnMgYXMgc3BlY2lmaWVkIGluIHRoZQogKiBJRUVFIDc1NCBzdGFuZGFyZC4KICoKICogVGhlIFtkb3VibGVdIHR5cGUgaXMgY29udGFnaW91cy4gT3BlcmF0aW9ucyBvbiBbZG91YmxlXXMgcmV0dXJuCiAqIFtkb3VibGVdIHJlc3VsdHMuCiAqCiAqIEl0IGlzIGEgY29tcGlsZS10aW1lIGVycm9yIGZvciBhIGNsYXNzIHRvIGF0dGVtcHQgdG8gZXh0ZW5kIG9yIGltcGxlbWVudAogKiBkb3VibGUuCiAqLwphYnN0cmFjdCBjbGFzcyBkb3VibGUgZXh0ZW5kcyBudW0gewogIHN0YXRpYyBjb25zdCBkb3VibGUgbmFuID0gMC4wIC8gMC4wOwogIHN0YXRpYyBjb25zdCBkb3VibGUgaW5maW5pdHkgPSAxLjAgLyAwLjA7CiAgc3RhdGljIGNvbnN0IGRvdWJsZSBuZWdhdGl2ZUluZmluaXR5ID0gLWluZmluaXR5OwogIHN0YXRpYyBjb25zdCBkb3VibGUgbWluUG9zaXRpdmUgPSA1ZS0zMjQ7CiAgc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhGaW5pdGUgPSAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwODsKCiAgZG91YmxlIHJlbWFpbmRlcihudW0gb3RoZXIpOwoKICAvKiogQWRkaXRpb24gb3BlcmF0b3IuICovCiAgZG91YmxlIG9wZXJhdG9yICsobnVtIG90aGVyKTsKCiAgLyoqIFN1YnRyYWN0aW9uIG9wZXJhdG9yLiAqLwogIGRvdWJsZSBvcGVyYXRvciAtKG51bSBvdGhlcik7CgogIC8qKiBNdWx0aXBsaWNhdGlvbiBvcGVyYXRvci4gKi8KICBkb3VibGUgb3BlcmF0b3IgKihudW0gb3RoZXIpOwoKICBkb3VibGUgb3BlcmF0b3IgJShudW0gb3RoZXIpOwoKICAvKiogRGl2aXNpb24gb3BlcmF0b3IuICovCiAgZG91YmxlIG9wZXJhdG9yIC8obnVtIG90aGVyKTsKCiAgLyoqCiAgICogVHJ1bmNhdGluZyBkaXZpc2lvbiBvcGVyYXRvci4KICAgKgogICAqIFRoZSByZXN1bHQgb2YgdGhlIHRydW5jYXRpbmcgZGl2aXNpb24gYGEgfi8gYmAgaXMgZXF1aXZhbGVudCB0bwogICAqIGAoYSAvIGIpLnRydW5jYXRlKClgLgogICAqLwogIGludCBvcGVyYXRvciB+LyhudW0gb3RoZXIpOwoKICAvKiogTmVnYXRlIG9wZXJhdG9yLiAqLwogIGRvdWJsZSBvcGVyYXRvciAtKCk7CgogIC8qKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzIFtkb3VibGVdLiAqLwogIGRvdWJsZSBhYnMoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc2lnbiBvZiB0aGUgZG91YmxlJ3MgbnVtZXJpY2FsIHZhbHVlLgogICAqCiAgICogUmV0dXJucyAtMS4wIGlmIHRoZSB2YWx1ZSBpcyBsZXNzIHRoYW4gemVybywKICAgKiArMS4wIGlmIHRoZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gemVybywKICAgKiBhbmQgdGhlIHZhbHVlIGl0c2VsZiBpZiBpdCBpcyAtMC4wLCAwLjAgb3IgTmFOLgogICAqLwogIGRvdWJsZSBnZXQgc2lnbjsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgaW50ZWdlciBjbG9zZXN0IHRvIGB0aGlzYC4KICAgKgogICAqIFJvdW5kcyBhd2F5IGZyb20gemVybyB3aGVuIHRoZXJlIGlzIG5vIGNsb3Nlc3QgaW50ZWdlcjoKICAgKiAgYCgzLjUpLnJvdW5kKCkgPT0gNGAgYW5kIGAoLTMuNSkucm91bmQoKSA9PSAtNGAuCiAgICoKICAgKiBJZiBgdGhpc2AgaXMgbm90IGZpbml0ZSAoYE5hTmAgb3IgaW5maW5pdHkpLCB0aHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIGludCByb3VuZCgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBncmVhdGVzdCBpbnRlZ2VyIG5vIGdyZWF0ZXIgdGhhbiBgdGhpc2AuCiAgICoKICAgKiBJZiBgdGhpc2AgaXMgbm90IGZpbml0ZSAoYE5hTmAgb3IgaW5maW5pdHkpLCB0aHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIGludCBmbG9vcigpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZWFzdCBpbnRlZ2VyIG5vIHNtYWxsZXIgdGhhbiBgdGhpc2AuCiAgICoKICAgKiBJZiBgdGhpc2AgaXMgbm90IGZpbml0ZSAoYE5hTmAgb3IgaW5maW5pdHkpLCB0aHJvd3MgYW4gW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIGludCBjZWlsKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGludGVnZXIgb2J0YWluZWQgYnkgZGlzY2FyZGluZyBhbnkgZnJhY3Rpb25hbAogICAqIGRpZ2l0cyBmcm9tIGB0aGlzYC4KICAgKgogICAqIElmIGB0aGlzYCBpcyBub3QgZmluaXRlIChgTmFOYCBvciBpbmZpbml0eSksIHRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0uCiAgICovCiAgaW50IHRydW5jYXRlKCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGludGVnZXIgZG91YmxlIHZhbHVlIGNsb3Nlc3QgdG8gYHRoaXNgLgogICAqCiAgICogUm91bmRzIGF3YXkgZnJvbSB6ZXJvIHdoZW4gdGhlcmUgaXMgbm8gY2xvc2VzdCBpbnRlZ2VyOgogICAqICBgKDMuNSkucm91bmRUb0RvdWJsZSgpID09IDRgIGFuZCBgKC0zLjUpLnJvdW5kVG9Eb3VibGUoKSA9PSAtNGAuCiAgICoKICAgKiBJZiB0aGlzIGlzIGFscmVhZHkgYW4gaW50ZWdlciB2YWx1ZWQgZG91YmxlLCBpbmNsdWRpbmcgYC0wLjBgLCBvciBpdCBpcyBub3QKICAgKiBhIGZpbml0ZSB2YWx1ZSwgdGhlIHZhbHVlIGlzIHJldHVybmVkIHVubW9kaWZpZWQuCiAgICoKICAgKiBGb3IgdGhlIHB1cnBvc2Ugb2Ygcm91bmRpbmcsIGAtMC4wYCBpcyBjb25zaWRlcmVkIHRvIGJlIGJlbG93IGAwLjBgLAogICAqIGFuZCBgLTAuMGAgaXMgdGhlcmVmb3JlIGNvbnNpZGVyZWQgY2xvc2VyIHRvIG5lZ2F0aXZlIG51bWJlcnMgdGhhbiBgMC4wYC4KICAgKiBUaGlzIG1lYW5zIHRoYXQgZm9yIGEgdmFsdWUsIGBkYCBpbiB0aGUgcmFuZ2UgYC0wLjUgPCBkIDwgMC4wYCwKICAgKiB0aGUgcmVzdWx0IGlzIGAtMC4wYC4KICAgKi8KICBkb3VibGUgcm91bmRUb0RvdWJsZSgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBncmVhdGVzdCBpbnRlZ2VyIGRvdWJsZSB2YWx1ZSBubyBncmVhdGVyIHRoYW4gYHRoaXNgLgogICAqCiAgICogSWYgdGhpcyBpcyBhbHJlYWR5IGFuIGludGVnZXIgdmFsdWVkIGRvdWJsZSwgaW5jbHVkaW5nIGAtMC4wYCwgb3IgaXQgaXMgbm90CiAgICogYSBmaW5pdGUgdmFsdWUsIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCB1bm1vZGlmaWVkLgogICAqCiAgICogRm9yIHRoZSBwdXJwb3NlIG9mIHJvdW5kaW5nLCBgLTAuMGAgaXMgY29uc2lkZXJlZCB0byBiZSBiZWxvdyBgMC4wYC4KICAgKiBBIG51bWJlciBgZGAgaW4gdGhlIHJhbmdlIGAwLjAgPCBkIDwgMS4wYCB3aWxsIHJldHVybiBgMC4wYC4KICAgKi8KICBkb3VibGUgZmxvb3JUb0RvdWJsZSgpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZWFzdCBpbnRlZ2VyIGRvdWJsZSB2YWx1ZSBubyBzbWFsbGVyIHRoYW4gYHRoaXNgLgogICAqCiAgICogSWYgdGhpcyBpcyBhbHJlYWR5IGFuIGludGVnZXIgdmFsdWVkIGRvdWJsZSwgaW5jbHVkaW5nIGAtMC4wYCwgb3IgaXQgaXMgbm90CiAgICogYSBmaW5pdGUgdmFsdWUsIHRoZSB2YWx1ZSBpcyByZXR1cm5lZCB1bm1vZGlmaWVkLgogICAqCiAgICogRm9yIHRoZSBwdXJwb3NlIG9mIHJvdW5kaW5nLCBgLTAuMGAgaXMgY29uc2lkZXJlZCB0byBiZSBiZWxvdyBgMC4wYC4KICAgKiBBIG51bWJlciBgZGAgaW4gdGhlIHJhbmdlIGAtMS4wIDwgZCA8IDAuMGAgd2lsbCByZXR1cm4gYC0wLjBgLgogICAqLwogIGRvdWJsZSBjZWlsVG9Eb3VibGUoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgaW50ZWdlciBkb3VibGUgdmFsdWUgb2J0YWluZWQgYnkgZGlzY2FyZGluZyBhbnkgZnJhY3Rpb25hbAogICAqIGRpZ2l0cyBmcm9tIGB0aGlzYC4KICAgKgogICAqIElmIHRoaXMgaXMgYWxyZWFkeSBhbiBpbnRlZ2VyIHZhbHVlZCBkb3VibGUsIGluY2x1ZGluZyBgLTAuMGAsIG9yIGl0IGlzIG5vdAogICAqIGEgZmluaXRlIHZhbHVlLCB0aGUgdmFsdWUgaXMgcmV0dXJuZWQgdW5tb2RpZmllZC4KICAgKgogICAqIEZvciB0aGUgcHVycG9zZSBvZiByb3VuZGluZywgYC0wLjBgIGlzIGNvbnNpZGVyZWQgdG8gYmUgYmVsb3cgYDAuMGAuCiAgICogQSBudW1iZXIgYGRgIGluIHRoZSByYW5nZSBgLTEuMCA8IGQgPCAwLjBgIHdpbGwgcmV0dXJuIGAtMC4wYCwgYW5kCiAgICogaW4gdGhlIHJhbmdlIGAwLjAgPCBkIDwgMS4wYCBpdCB3aWxsIHJldHVybiAwLjAuCiAgICovCiAgZG91YmxlIHRydW5jYXRlVG9Eb3VibGUoKTsKCiAgLyoqCiAgICogUHJvdmlkZSBhIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgW2RvdWJsZV0gdmFsdWUuCiAgICoKICAgKiBUaGUgcmVwcmVzZW50YXRpb24gaXMgYSBudW1iZXIgbGl0ZXJhbCBzdWNoIHRoYXQgdGhlIGNsb3Nlc3QgZG91YmxlIHZhbHVlCiAgICogdG8gdGhlIHJlcHJlc2VudGF0aW9uJ3MgbWF0aGVtYXRpY2FsIHZhbHVlIGlzIHRoaXMgW2RvdWJsZV0uCiAgICoKICAgKiBSZXR1cm5zICJOYU4iIGZvciB0aGUgTm90LWEtTnVtYmVyIHZhbHVlLgogICAqIFJldHVybnMgIkluZmluaXR5IiBhbmQgIi1JbmZpbml0eSIgZm9yIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBJbmZpbml0eS4KICAgKiBSZXR1cm5zICItMC4wIiBmb3IgbmVnYXRpdmUgemVyby4KICAgKgogICAqIEZvciBhbGwgZG91YmxlcywgYGRgLCBjb252ZXJ0aW5nIHRvIGEgc3RyaW5nIGFuZCBwYXJzaW5nIHRoZSBzdHJpbmcgYmFjawogICAqIGdpdmVzIHRoZSBzYW1lIHZhbHVlIGFnYWluOiBgZCA9PSBkb3VibGUucGFyc2UoZC50b1N0cmluZygpKWAgKGV4Y2VwdCB3aGVuCiAgICogYGRgIGlzIE5hTikuCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCk7CgogIC8qKgogICAqIFBhcnNlIFtzb3VyY2VdIGFzIGFuIGRvdWJsZSBsaXRlcmFsIGFuZCByZXR1cm4gaXRzIHZhbHVlLgogICAqCiAgICogQWNjZXB0cyBhbiBvcHRpb25hbCBzaWduIChgK2Agb3IgYC1gKSBmb2xsb3dlZCBieSBlaXRoZXIgdGhlIGNoYXJhY3RlcnMKICAgKiAiSW5maW5pdHkiLCB0aGUgY2hhcmFjdGVycyAiTmFOIiBvciBhIGZsb2F0aW5nLXBvaW50IHJlcHJlc2VudGF0aW9uLgogICAqIEEgZmxvYXRpbmctcG9pbnQgcmVwcmVzZW50YXRpb24gaXMgY29tcG9zZWQgb2YgYSBtYW50aXNzYSBhbmQgYW4gb3B0aW9uYWwKICAgKiBleHBvbmVudCBwYXJ0LiBUaGUgbWFudGlzc2EgaXMgZWl0aGVyIGEgZGVjaW1hbCBwb2ludCAoYC5gKSBmb2xsb3dlZCBieSBhCiAgICogc2VxdWVuY2Ugb2YgKGRlY2ltYWwpIGRpZ2l0cywgb3IgYSBzZXF1ZW5jZSBvZiBkaWdpdHMKICAgKiBvcHRpb25hbGx5IGZvbGxvd2VkIGJ5IGEgZGVjaW1hbCBwb2ludCBhbmQgb3B0aW9uYWxseSBtb3JlIGRpZ2l0cy4gVGhlCiAgICogKG9wdGlvbmFsKSBleHBvbmVudCBwYXJ0IGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXIgImUiIG9yICJFIiwgYW4gb3B0aW9uYWwKICAgKiBzaWduLCBhbmQgb25lIG9yIG1vcmUgZGlnaXRzLgogICAqIFRoZSBbc291cmNlXSBtdXN0IG5vdCBiZSBgbnVsbGAuCiAgICoKICAgKiBMZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIGlzIGlnbm9yZWQuCiAgICoKICAgKiBJZiB0aGUgW3NvdXJjZV0gc3RyaW5nIGlzIG5vdCBhIHZhbGlkIGRvdWJsZSBsaXRlcmFsLCB0aGUgW29uRXJyb3JdCiAgICogaXMgY2FsbGVkIHdpdGggdGhlIFtzb3VyY2VdIGFzIGFyZ3VtZW50LCBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcwogICAqIHVzZWQgaW5zdGVhZC4gSWYgbm8gYG9uRXJyb3JgIGlzIHByb3ZpZGVkLCBhIFtGb3JtYXRFeGNlcHRpb25dCiAgICogaXMgdGhyb3duIGluc3RlYWQuCiAgICoKICAgKiBUaGUgW29uRXJyb3JdIGZ1bmN0aW9uIGlzIG9ubHkgaW52b2tlZCBpZiBbc291cmNlXSBpcyBhIFtTdHJpbmddIHdpdGggYW4KICAgKiBpbnZhbGlkIGZvcm1hdC4gSXQgaXMgbm90IGludm9rZWQgaWYgW3NvdXJjZV0gaXMgYG51bGxgLgogICAqCiAgICogRXhhbXBsZXMgb2YgYWNjZXB0ZWQgc3RyaW5nczoKICAgKgogICAqICAgICAiMy4xNCIKICAgKiAgICAgIiAgMy4xNCBceEEwIgogICAqICAgICAiMC4iCiAgICogICAgICIuMCIKICAgKiAgICAgIi0xLmUzIgogICAqICAgICAiMTIzNEUrNyIKICAgKiAgICAgIisuMTJlLTkiCiAgICogICAgICItTmFOIgogICAqCiAgICogVGhlIFtvbkVycm9yXSBwYXJhbWV0ZXIgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkLgogICAqIEluc3RlYWQgb2YgYGRvdWJsZS5wYXJzZShzdHJpbmcsIChzdHJpbmcpIHsgLi4uIH0pYCwKICAgKiB5b3Ugc2hvdWxkIHVzZSBgZG91YmxlLnRyeVBhcnNlKHN0cmluZykgPz8gKC4uLilgLgogICAqLwogIGV4dGVybmFsIHN0YXRpYyBkb3VibGUgcGFyc2UoU3RyaW5nIHNvdXJjZSwKICAgICAgW0BkZXByZWNhdGVkIGRvdWJsZSBvbkVycm9yKFN0cmluZyBzb3VyY2UpXSk7CgogIC8qKgogICAqIFBhcnNlIFtzb3VyY2VdIGFzIGFuIGRvdWJsZSBsaXRlcmFsIGFuZCByZXR1cm4gaXRzIHZhbHVlLgogICAqCiAgICogTGlrZSBbcGFyc2VdIGV4Y2VwdCB0aGF0IHRoaXMgZnVuY3Rpb24gcmV0dXJucyBgbnVsbGAgZm9yIGludmFsaWQgaW5wdXRzCiAgICogaW5zdGVhZCBvZiB0aHJvd2luZywgYW5kIHRoZSBbc291cmNlXSBtdXN0IHN0aWxsIG5vdCBiZSBgbnVsbGAuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIGRvdWJsZSB0cnlQYXJzZShTdHJpbmcgc291cmNlKTsKfQqA3ABOTjwBEwFCPicBBC0DR0NNFgNDFQNMCwQkJyw0LDsBHwEcIAEfIAEiIAEgARwgAQYjBUUbBh4BGhcBNhABBjcFMi01BhMBBiwFPTcFUAYPAQY6BVAGDwEGNwVQBg4BBj8ZBVAGEgEGOQU9RwVRNwVKT0UbBhoBBkcFUTcFSkIGGgEGRAVRNwVKRAYZAQZMGQVRNwVKSDYGHQEGNgVPQgUvTCcFTlASBhUBBj8FTUpPTztMUCMmBTEFSUZEGAVOPgUjBRAXDg4RExMQBUA6OAYuNAEGPwVORQYyAgEVZGFydDpjb3JlL2RvdWJsZS5kYXJ0MW9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZG91YmxlX3BhdGNoLmRhcnSOrS8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKLy8gVk0gaW1wbGVtZW50YXRpb24gb2YgZG91YmxlLgoKQHBhdGNoCmNsYXNzIGRvdWJsZSB7CiAgc3RhdGljIGRvdWJsZSBfbmF0aXZlUGFyc2UoU3RyaW5nIHN0ciwgaW50IHN0YXJ0LCBpbnQgZW5kKQogICAgICBuYXRpdmUgIkRvdWJsZV9wYXJzZSI7CgogIHN0YXRpYyBkb3VibGUgX3RyeVBhcnNlRG91YmxlKHZhciBzdHIsIHZhciBzdGFydCwgdmFyIGVuZCkgewogICAgYXNzZXJ0KHN0YXJ0IDwgZW5kKTsKICAgIGNvbnN0IGludCBfRE9UID0gMHgyZTsgLy8gJy4nCiAgICBjb25zdCBpbnQgX1pFUk8gPSAweDMwOyAvLyAnMCcKICAgIGNvbnN0IGludCBfTUlOVVMgPSAweDJkOyAvLyAnLScKICAgIGNvbnN0IGludCBfTiA9IDB4NGU7IC8vICdOJwogICAgY29uc3QgaW50IF9hID0gMHg2MTsgLy8gJ2EnCiAgICBjb25zdCBpbnQgX0kgPSAweDQ5OyAvLyAnSScKICAgIGNvbnN0IGludCBfZSA9IDB4NjU7IC8vICdlJwogICAgaW50IGV4cG9uZW50ID0gMDsKICAgIC8vIFNldCB0byBub24temVybyBpZiBhIGRpZ2l0IGlzIHNlZW4uIEF2b2lkcyBhY2NlcHRpbmcgIi4iLgogICAgYm9vbCBkaWdpdHNTZWVuID0gZmFsc2U7CiAgICAvLyBBZGRlZCB0byBleHBvbmVudCBmb3IgZWFjaCBkaWdpdC4gU2V0IHRvIC0xIHdoZW4gc2VlaW5nICcuJy4KICAgIGludCBleHBvbmVudERlbHRhID0gMDsKICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IDAuMDsKICAgIGRvdWJsZSBzaWduID0gMS4wOwogICAgaW50IGZpcnN0Q2hhciA9IHN0ci5jb2RlVW5pdEF0KHN0YXJ0KTsKICAgIGlmIChmaXJzdENoYXIgPT0gX01JTlVTKSB7CiAgICAgIHNpZ24gPSAtMS4wOwogICAgICBzdGFydCsrOwogICAgICBpZiAoc3RhcnQgPT0gZW5kKSByZXR1cm4gbnVsbDsKICAgICAgZmlyc3RDaGFyID0gc3RyLmNvZGVVbml0QXQoc3RhcnQpOwogICAgfQogICAgaWYgKGZpcnN0Q2hhciA9PSBfSSkgewogICAgICBpZiAoZW5kID09IHN0YXJ0ICsgOCAmJiBzdHIuc3RhcnRzV2l0aCgibmZpbml0eSIsIHN0YXJ0ICsgMSkpIHsKICAgICAgICByZXR1cm4gc2lnbiAqIGRvdWJsZS5pbmZpbml0eTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmIChmaXJzdENoYXIgPT0gX04pIHsKICAgICAgaWYgKGVuZCA9PSBzdGFydCArIDMgJiYKICAgICAgICAgIHN0ci5jb2RlVW5pdEF0KHN0YXJ0ICsgMSkgPT0gX2EgJiYKICAgICAgICAgIHN0ci5jb2RlVW5pdEF0KHN0YXJ0ICsgMikgPT0gX04pIHsKICAgICAgICByZXR1cm4gZG91YmxlLm5hbjsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBpbnQgZmlyc3REaWdpdCA9IGZpcnN0Q2hhciBeIF9aRVJPOwogICAgaWYgKGZpcnN0RGlnaXQgPD0gOSkgewogICAgICBzdGFydCsrOwogICAgICBkb3VibGVWYWx1ZSA9IGZpcnN0RGlnaXQudG9Eb3VibGUoKTsKICAgICAgZGlnaXRzU2VlbiA9IHRydWU7CiAgICB9CiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICBpbnQgYyA9IHN0ci5jb2RlVW5pdEF0KGkpOwogICAgICBpbnQgZGlnaXQgPSBjIF4gX1pFUk87IC8vICcwJy0nOScgY2hhcmFjdGVycyBhcmUgbm93IDAtOSBpbnRlZ2Vycy4KICAgICAgaWYgKGRpZ2l0IDw9IDkpIHsKICAgICAgICBkb3VibGVWYWx1ZSA9IDEwLjAgKiBkb3VibGVWYWx1ZSArIGRpZ2l0OwogICAgICAgIC8vIERvdWJsZXMgYXQgb3IgYWJvdmUgdGhpcyB2YWx1ZSAoMioqNTMpIG1pZ2h0IGhhdmUgbG9zdCBwcmVjaXNzaW9uLgogICAgICAgIGNvbnN0IGRvdWJsZSBNQVhfRVhBQ1RfRE9VQkxFID0gOTAwNzE5OTI1NDc0MDk5Mi4wOwogICAgICAgIGlmIChkb3VibGVWYWx1ZSA+PSBNQVhfRVhBQ1RfRE9VQkxFKSByZXR1cm4gbnVsbDsKICAgICAgICBleHBvbmVudCArPSBleHBvbmVudERlbHRhOwogICAgICAgIGRpZ2l0c1NlZW4gPSB0cnVlOwogICAgICB9IGVsc2UgaWYgKGMgPT0gX0RPVCAmJiBleHBvbmVudERlbHRhID09IDApIHsKICAgICAgICBleHBvbmVudERlbHRhID0gLTE7CiAgICAgIH0gZWxzZSBpZiAoKGMgfCAweDIwKSA9PSBfZSkgewogICAgICAgIGkrKzsKICAgICAgICBpZiAoaSA9PSBlbmQpIHJldHVybiBudWxsOwogICAgICAgIC8vIGludC5fdHJ5UGFyc2VTbWkgdHJlYXRzIGl0cyBlbmQgYXJndW1lbnQgYXMgaW5jbHVzaXZlLgogICAgICAgIGludCBleHBQYXJ0ID0gaW50Ll90cnlQYXJzZVNtaShzdHIsIGksIGVuZCAtIDEpOwogICAgICAgIGlmIChleHBQYXJ0ID09IG51bGwpIHJldHVybiBudWxsOwogICAgICAgIGV4cG9uZW50ICs9IGV4cFBhcnQ7CiAgICAgICAgYnJlYWs7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIGlmICghZGlnaXRzU2VlbikgcmV0dXJuIG51bGw7IC8vIE5vIGRpZ2l0cy4KICAgIGlmIChleHBvbmVudCA9PSAwKSByZXR1cm4gc2lnbiAqIGRvdWJsZVZhbHVlOwogICAgY29uc3QgUDEwID0gUE9XRVJTX09GX1RFTjsgLy8gRnJvbSBzaGFyZWQgbGlicmFyeQogICAgaWYgKGV4cG9uZW50IDwgMCkgewogICAgICBpbnQgbmVnRXhwb25lbnQgPSAtZXhwb25lbnQ7CiAgICAgIGlmIChuZWdFeHBvbmVudCA+PSBQMTAubGVuZ3RoKSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuIHNpZ24gKiAoZG91YmxlVmFsdWUgLyBQMTBbbmVnRXhwb25lbnRdKTsKICAgIH0KICAgIGlmIChleHBvbmVudCA+PSBQMTAubGVuZ3RoKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBzaWduICogKGRvdWJsZVZhbHVlICogUDEwW2V4cG9uZW50XSk7CiAgfQoKICBzdGF0aWMgZG91YmxlIF9wYXJzZSh2YXIgc3RyKSB7CiAgICBpbnQgbGVuID0gc3RyLmxlbmd0aDsKICAgIGludCBzdGFydCA9IHN0ci5fZmlyc3ROb25XaGl0ZXNwYWNlKCk7CiAgICBpZiAoc3RhcnQgPT0gbGVuKSByZXR1cm4gbnVsbDsgLy8gQWxsIHdoaXRlc3BhY2UuCiAgICBpbnQgZW5kID0gc3RyLl9sYXN0Tm9uV2hpdGVzcGFjZSgpICsgMTsKICAgIGFzc2VydChzdGFydCA8IGVuZCk7CiAgICB2YXIgcmVzdWx0ID0gX3RyeVBhcnNlRG91YmxlKHN0ciwgc3RhcnQsIGVuZCk7CiAgICBpZiAocmVzdWx0ICE9IG51bGwpIHJldHVybiByZXN1bHQ7CiAgICByZXR1cm4gX25hdGl2ZVBhcnNlKHN0ciwgc3RhcnQsIGVuZCk7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgZG91YmxlIHBhcnNlKFN0cmluZyBzb3VyY2UsCiAgICAgIFtAZGVwcmVjYXRlZCBkb3VibGUgb25FcnJvcihTdHJpbmcgc291cmNlKV0pIHsKICAgIHZhciByZXN1bHQgPSBfcGFyc2Uoc291cmNlKTsKICAgIGlmIChyZXN1bHQgPT0gbnVsbCkgewogICAgICBpZiAob25FcnJvciA9PSBudWxsKSB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIGRvdWJsZSIsIHNvdXJjZSk7CiAgICAgIHJldHVybiBvbkVycm9yKHNvdXJjZSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIGRvdWJsZSB0cnlQYXJzZShTdHJpbmcgc291cmNlKSA9PiBfcGFyc2Uoc291cmNlKTsKfQp4AE5OPAEeASABBw89HQE/GSIjJCAgICAWQR1EGx4XKx8TDyUpBhtGJwgTBhseLS0bCBMGASgbDysZBighSRgyTjw6Ixs0HCUNI0I5Kh0PDxUIBjAyNhgjMjYGLTEEASIaKzYsGTMnKgQBCSU1IRpQHgYTBAEJOwIBIWRhcnQ6Y29yZS1wYXRjaC9kb3VibGVfcGF0Y2guZGFydC5vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9kdXJhdGlvbi5kYXJ0pqAvLyBDb3B5cmlnaHQgKGMpIDIwMTEsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQSBzcGFuIG9mIHRpbWUsIHN1Y2ggYXMgMjcgZGF5cywgNCBob3VycywgMTIgbWludXRlcywgYW5kIDMgc2Vjb25kcy4KICoKICogQSBgRHVyYXRpb25gIHJlcHJlc2VudHMgYSBkaWZmZXJlbmNlIGZyb20gb25lIHBvaW50IGluIHRpbWUgdG8gYW5vdGhlci4gVGhlCiAqIGR1cmF0aW9uIG1heSBiZSAibmVnYXRpdmUiIGlmIHRoZSBkaWZmZXJlbmNlIGlzIGZyb20gYSBsYXRlciB0aW1lIHRvIGFuCiAqIGVhcmxpZXIuCiAqCiAqIER1cmF0aW9ucyBhcmUgY29udGV4dCBpbmRlcGVuZGVudC4gRm9yIGV4YW1wbGUsIGEgZHVyYXRpb24gb2YgMiBkYXlzIGlzCiAqIGFsd2F5cyA0OCBob3VycywgZXZlbiB3aGVuIGl0IGlzIGFkZGVkIHRvIGEgYERhdGVUaW1lYCBqdXN0IHdoZW4gdGhlCiAqIHRpbWUgem9uZSBpcyBhYm91dCB0byBkbyBhIGRheWxpZ2h0LXNhdmluZ3Mgc3dpdGNoLiAoU2VlIFtEYXRlVGltZS5hZGRdKS4KICoKICogRGVzcGl0ZSB0aGUgc2FtZSBuYW1lLCBhIGBEdXJhdGlvbmAgb2JqZWN0IGRvZXMgbm90IGltcGxlbWVudCAiRHVyYXRpb25zIgogKiBhcyBzcGVjaWZpZWQgYnkgSVNPIDg2MDEuIEluIHBhcnRpY3VsYXIsIGEgZHVyYXRpb24gb2JqZWN0IGRvZXMgbm90IGtlZXAKICogdHJhY2sgb2YgdGhlIGluZGl2aWR1YWxseSBwcm92aWRlZCBtZW1iZXJzIChzdWNoIGFzICJkYXlzIiBvciAiaG91cnMiKSwgYnV0CiAqIG9ubHkgdXNlcyB0aGVzZSBhcmd1bWVudHMgdG8gY29tcHV0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBjb3JyZXNwb25kaW5nIHRpbWUKICogaW50ZXJ2YWwuCiAqCiAqIFRvIGNyZWF0ZSBhIG5ldyBEdXJhdGlvbiBvYmplY3QsIHVzZSB0aGlzIGNsYXNzJ3Mgc2luZ2xlIGNvbnN0cnVjdG9yCiAqIGdpdmluZyB0aGUgYXBwcm9wcmlhdGUgYXJndW1lbnRzOgogKiBgYGBkYXJ0CiAqIER1cmF0aW9uIGZhc3Rlc3RNYXJhdGhvbiA9IG5ldyBEdXJhdGlvbihob3VyczoyLCBtaW51dGVzOjMsIHNlY29uZHM6Mik7CiAqIGBgYAogKiBUaGUgW0R1cmF0aW9uXSBpcyB0aGUgc3VtIG9mIGFsbCBpbmRpdmlkdWFsIHBhcnRzLgogKiBUaGlzIG1lYW5zIHRoYXQgaW5kaXZpZHVhbCBwYXJ0cyBjYW4gYmUgbGFyZ2VyIHRoYW4gdGhlIG5leHQtYmlnZ2VyIHVuaXQuCiAqIEZvciBleGFtcGxlLCBbaW5NaW51dGVzXSBjYW4gYmUgZ3JlYXRlciB0aGFuIDU5LgogKiBgYGBkYXJ0CiAqIGFzc2VydChmYXN0ZXN0TWFyYXRob24uaW5NaW51dGVzID09IDEyMyk7CiAqIGBgYAogKiBBbGwgaW5kaXZpZHVhbCBwYXJ0cyBhcmUgYWxsb3dlZCB0byBiZSBuZWdhdGl2ZS4KICoKICogVXNlIG9uZSBvZiB0aGUgcHJvcGVydGllcywgc3VjaCBhcyBbaW5EYXlzXSwKICogdG8gcmV0cmlldmUgdGhlIGludGVnZXIgdmFsdWUgb2YgdGhlIER1cmF0aW9uIGluIHRoZSBzcGVjaWZpZWQgdGltZSB1bml0LgogKiBOb3RlIHRoYXQgdGhlIHJldHVybmVkIHZhbHVlIGlzIHJvdW5kZWQgZG93bi4KICogRm9yIGV4YW1wbGUsCiAqIGBgYGRhcnQKICogRHVyYXRpb24gYUxvbmdXZWVrZW5kID0gbmV3IER1cmF0aW9uKGhvdXJzOjg4KTsKICogYXNzZXJ0KGFMb25nV2Vla2VuZC5pbkRheXMgPT0gMyk7CiAqIGBgYAogKiBUaGlzIGNsYXNzIHByb3ZpZGVzIGEgY29sbGVjdGlvbiBvZiBhcml0aG1ldGljCiAqIGFuZCBjb21wYXJpc29uIG9wZXJhdG9ycywKICogcGx1cyBhIHNldCBvZiBjb25zdGFudHMgdXNlZnVsIGZvciBjb252ZXJ0aW5nIHRpbWUgdW5pdHMuCiAqCiAqIFNlZSBbRGF0ZVRpbWVdIHRvIHJlcHJlc2VudCBhIHBvaW50IGluIHRpbWUuCiAqIFNlZSBbU3RvcHdhdGNoXSB0byBtZWFzdXJlIHRpbWUtc3BhbnMuCiAqLwpjbGFzcyBEdXJhdGlvbiBpbXBsZW1lbnRzIENvbXBhcmFibGU8RHVyYXRpb24+IHsKICBzdGF0aWMgY29uc3QgaW50IG1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kID0gMTAwMDsKICBzdGF0aWMgY29uc3QgaW50IG1pbGxpc2Vjb25kc1BlclNlY29uZCA9IDEwMDA7CiAgc3RhdGljIGNvbnN0IGludCBzZWNvbmRzUGVyTWludXRlID0gNjA7CiAgc3RhdGljIGNvbnN0IGludCBtaW51dGVzUGVySG91ciA9IDYwOwogIHN0YXRpYyBjb25zdCBpbnQgaG91cnNQZXJEYXkgPSAyNDsKCiAgc3RhdGljIGNvbnN0IGludCBtaWNyb3NlY29uZHNQZXJTZWNvbmQgPQogICAgICBtaWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZCAqIG1pbGxpc2Vjb25kc1BlclNlY29uZDsKICBzdGF0aWMgY29uc3QgaW50IG1pY3Jvc2Vjb25kc1Blck1pbnV0ZSA9CiAgICAgIG1pY3Jvc2Vjb25kc1BlclNlY29uZCAqIHNlY29uZHNQZXJNaW51dGU7CiAgc3RhdGljIGNvbnN0IGludCBtaWNyb3NlY29uZHNQZXJIb3VyID0gbWljcm9zZWNvbmRzUGVyTWludXRlICogbWludXRlc1BlckhvdXI7CiAgc3RhdGljIGNvbnN0IGludCBtaWNyb3NlY29uZHNQZXJEYXkgPSBtaWNyb3NlY29uZHNQZXJIb3VyICogaG91cnNQZXJEYXk7CgogIHN0YXRpYyBjb25zdCBpbnQgbWlsbGlzZWNvbmRzUGVyTWludXRlID0KICAgICAgbWlsbGlzZWNvbmRzUGVyU2Vjb25kICogc2Vjb25kc1Blck1pbnV0ZTsKICBzdGF0aWMgY29uc3QgaW50IG1pbGxpc2Vjb25kc1BlckhvdXIgPSBtaWxsaXNlY29uZHNQZXJNaW51dGUgKiBtaW51dGVzUGVySG91cjsKICBzdGF0aWMgY29uc3QgaW50IG1pbGxpc2Vjb25kc1BlckRheSA9IG1pbGxpc2Vjb25kc1BlckhvdXIgKiBob3Vyc1BlckRheTsKCiAgc3RhdGljIGNvbnN0IGludCBzZWNvbmRzUGVySG91ciA9IHNlY29uZHNQZXJNaW51dGUgKiBtaW51dGVzUGVySG91cjsKICBzdGF0aWMgY29uc3QgaW50IHNlY29uZHNQZXJEYXkgPSBzZWNvbmRzUGVySG91ciAqIGhvdXJzUGVyRGF5OwoKICBzdGF0aWMgY29uc3QgaW50IG1pbnV0ZXNQZXJEYXkgPSBtaW51dGVzUGVySG91ciAqIGhvdXJzUGVyRGF5OwoKICBzdGF0aWMgY29uc3QgRHVyYXRpb24gemVybyA9IER1cmF0aW9uKHNlY29uZHM6IDApOwoKICAvKgogICAqIFRoZSB2YWx1ZSBvZiB0aGlzIER1cmF0aW9uIG9iamVjdCBpbiBtaWNyb3NlY29uZHMuCiAgICovCiAgZmluYWwgaW50IF9kdXJhdGlvbjsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBEdXJhdGlvbiBvYmplY3Qgd2hvc2UgdmFsdWUKICAgKiBpcyB0aGUgc3VtIG9mIGFsbCBpbmRpdmlkdWFsIHBhcnRzLgogICAqCiAgICogSW5kaXZpZHVhbCBwYXJ0cyBjYW4gYmUgbGFyZ2VyIHRoYW4gdGhlIG5leHQtYmlnZ2VyIHVuaXQuCiAgICogRm9yIGV4YW1wbGUsIFtob3Vyc10gY2FuIGJlIGdyZWF0ZXIgdGhhbiAyMy4KICAgKgogICAqIEFsbCBpbmRpdmlkdWFsIHBhcnRzIGFyZSBhbGxvd2VkIHRvIGJlIG5lZ2F0aXZlLgogICAqIEFsbCBhcmd1bWVudHMgYXJlIDAgYnkgZGVmYXVsdC4KICAgKi8KICBjb25zdCBEdXJhdGlvbigKICAgICAge2ludCBkYXlzID0gMCwKICAgICAgaW50IGhvdXJzID0gMCwKICAgICAgaW50IG1pbnV0ZXMgPSAwLAogICAgICBpbnQgc2Vjb25kcyA9IDAsCiAgICAgIGludCBtaWxsaXNlY29uZHMgPSAwLAogICAgICBpbnQgbWljcm9zZWNvbmRzID0gMH0pCiAgICAgIDogdGhpcy5fbWljcm9zZWNvbmRzKG1pY3Jvc2Vjb25kc1BlckRheSAqIGRheXMgKwogICAgICAgICAgICBtaWNyb3NlY29uZHNQZXJIb3VyICogaG91cnMgKwogICAgICAgICAgICBtaWNyb3NlY29uZHNQZXJNaW51dGUgKiBtaW51dGVzICsKICAgICAgICAgICAgbWljcm9zZWNvbmRzUGVyU2Vjb25kICogc2Vjb25kcyArCiAgICAgICAgICAgIG1pY3Jvc2Vjb25kc1Blck1pbGxpc2Vjb25kICogbWlsbGlzZWNvbmRzICsKICAgICAgICAgICAgbWljcm9zZWNvbmRzKTsKCiAgLy8gRmFzdCBwYXRoIGludGVybmFsIGRpcmVjdCBjb25zdHJ1Y3RvciB0byBhdm9pZHMgdGhlIG9wdGlvbmFsIGFyZ3VtZW50cyBhbmQKICAvLyBbX21pY3Jvc2Vjb25kc10gcmVjb21wdXRhdGlvbi4KICBjb25zdCBEdXJhdGlvbi5fbWljcm9zZWNvbmRzKHRoaXMuX2R1cmF0aW9uKTsKCiAgLyoqCiAgICogQWRkcyB0aGlzIER1cmF0aW9uIGFuZCBbb3RoZXJdIGFuZAogICAqIHJldHVybnMgdGhlIHN1bSBhcyBhIG5ldyBEdXJhdGlvbiBvYmplY3QuCiAgICovCiAgRHVyYXRpb24gb3BlcmF0b3IgKyhEdXJhdGlvbiBvdGhlcikgewogICAgcmV0dXJuIER1cmF0aW9uLl9taWNyb3NlY29uZHMoX2R1cmF0aW9uICsgb3RoZXIuX2R1cmF0aW9uKTsKICB9CgogIC8qKgogICAqIFN1YnRyYWN0cyBbb3RoZXJdIGZyb20gdGhpcyBEdXJhdGlvbiBhbmQKICAgKiByZXR1cm5zIHRoZSBkaWZmZXJlbmNlIGFzIGEgbmV3IER1cmF0aW9uIG9iamVjdC4KICAgKi8KICBEdXJhdGlvbiBvcGVyYXRvciAtKER1cmF0aW9uIG90aGVyKSB7CiAgICByZXR1cm4gRHVyYXRpb24uX21pY3Jvc2Vjb25kcyhfZHVyYXRpb24gLSBvdGhlci5fZHVyYXRpb24pOwogIH0KCiAgLyoqCiAgICogTXVsdGlwbGllcyB0aGlzIER1cmF0aW9uIGJ5IHRoZSBnaXZlbiBbZmFjdG9yXSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0CiAgICogYXMgYSBuZXcgRHVyYXRpb24gb2JqZWN0LgogICAqCiAgICogTm90ZSB0aGF0IHdoZW4gW2ZhY3Rvcl0gaXMgYSBkb3VibGUsIGFuZCB0aGUgZHVyYXRpb24gaXMgZ3JlYXRlciB0aGFuCiAgICogNTMgYml0cywgcHJlY2lzaW9uIGlzIGxvc3QgYmVjYXVzZSBvZiBkb3VibGUtcHJlY2lzaW9uIGFyaXRobWV0aWMuCiAgICovCiAgRHVyYXRpb24gb3BlcmF0b3IgKihudW0gZmFjdG9yKSB7CiAgICByZXR1cm4gRHVyYXRpb24uX21pY3Jvc2Vjb25kcygoX2R1cmF0aW9uICogZmFjdG9yKS5yb3VuZCgpKTsKICB9CgogIC8qKgogICAqIERpdmlkZXMgdGhpcyBEdXJhdGlvbiBieSB0aGUgZ2l2ZW4gW3F1b3RpZW50XSBhbmQgcmV0dXJucyB0aGUgdHJ1bmNhdGVkCiAgICogcmVzdWx0IGFzIGEgbmV3IER1cmF0aW9uIG9iamVjdC4KICAgKgogICAqIFRocm93cyBhbiBbSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uXSBpZiBbcXVvdGllbnRdIGlzIGAwYC4KICAgKi8KICBEdXJhdGlvbiBvcGVyYXRvciB+LyhpbnQgcXVvdGllbnQpIHsKICAgIC8vIEJ5IGRvaW5nIHRoZSBjaGVjayBoZXJlIGluc3RlYWQgb2YgcmVseWluZyBvbiAifi8iIGJlbG93IHdlIGdldCB0aGUKICAgIC8vIGV4Y2VwdGlvbiBldmVuIHdpdGggZGFydDJqcy4KICAgIGlmIChxdW90aWVudCA9PSAwKSB0aHJvdyBJbnRlZ2VyRGl2aXNpb25CeVplcm9FeGNlcHRpb24oKTsKICAgIHJldHVybiBEdXJhdGlvbi5fbWljcm9zZWNvbmRzKF9kdXJhdGlvbiB+LyBxdW90aWVudCk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbgogICAqIGlzIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgW290aGVyXS4KICAgKi8KICBib29sIG9wZXJhdG9yIDwoRHVyYXRpb24gb3RoZXIpID0+IHRoaXMuX2R1cmF0aW9uIDwgb3RoZXIuX2R1cmF0aW9uOwoKICAvKioKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbgogICAqIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgW290aGVyXS4KICAgKi8KICBib29sIG9wZXJhdG9yID4oRHVyYXRpb24gb3RoZXIpID0+IHRoaXMuX2R1cmF0aW9uID4gb3RoZXIuX2R1cmF0aW9uOwoKICAvKioKICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbgogICAqIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2YgW290aGVyXS4KICAgKi8KICBib29sIG9wZXJhdG9yIDw9KER1cmF0aW9uIG90aGVyKSA9PiB0aGlzLl9kdXJhdGlvbiA8PSBvdGhlci5fZHVyYXRpb247CgogIC8qKgogICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIER1cmF0aW9uCiAgICogaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBbb3RoZXJdLgogICAqLwogIGJvb2wgb3BlcmF0b3IgPj0oRHVyYXRpb24gb3RoZXIpID0+IHRoaXMuX2R1cmF0aW9uID49IG90aGVyLl9kdXJhdGlvbjsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHdob2xlIGRheXMgc3Bhbm5lZCBieSB0aGlzIER1cmF0aW9uLgogICAqLwogIGludCBnZXQgaW5EYXlzID0+IF9kdXJhdGlvbiB+LyBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJEYXk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3aG9sZSBob3VycyBzcGFubmVkIGJ5IHRoaXMgRHVyYXRpb24uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlIGdyZWF0ZXIgdGhhbiAyMy4KICAgKi8KICBpbnQgZ2V0IGluSG91cnMgPT4gX2R1cmF0aW9uIH4vIER1cmF0aW9uLm1pY3Jvc2Vjb25kc1BlckhvdXI7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3aG9sZSBtaW51dGVzIHNwYW5uZWQgYnkgdGhpcyBEdXJhdGlvbi4KICAgKgogICAqIFRoZSByZXR1cm5lZCB2YWx1ZSBjYW4gYmUgZ3JlYXRlciB0aGFuIDU5LgogICAqLwogIGludCBnZXQgaW5NaW51dGVzID0+IF9kdXJhdGlvbiB+LyBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJNaW51dGU7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3aG9sZSBzZWNvbmRzIHNwYW5uZWQgYnkgdGhpcyBEdXJhdGlvbi4KICAgKgogICAqIFRoZSByZXR1cm5lZCB2YWx1ZSBjYW4gYmUgZ3JlYXRlciB0aGFuIDU5LgogICAqLwogIGludCBnZXQgaW5TZWNvbmRzID0+IF9kdXJhdGlvbiB+LyBEdXJhdGlvbi5taWNyb3NlY29uZHNQZXJTZWNvbmQ7CgogIC8qKgogICAqIFJldHVybnMgbnVtYmVyIG9mIHdob2xlIG1pbGxpc2Vjb25kcyBzcGFubmVkIGJ5IHRoaXMgRHVyYXRpb24uCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgdmFsdWUgY2FuIGJlIGdyZWF0ZXIgdGhhbiA5OTkuCiAgICovCiAgaW50IGdldCBpbk1pbGxpc2Vjb25kcyA9PiBfZHVyYXRpb24gfi8gRHVyYXRpb24ubWljcm9zZWNvbmRzUGVyTWlsbGlzZWNvbmQ7CgogIC8qKgogICAqIFJldHVybnMgbnVtYmVyIG9mIHdob2xlIG1pY3Jvc2Vjb25kcyBzcGFubmVkIGJ5IHRoaXMgRHVyYXRpb24uCiAgICovCiAgaW50IGdldCBpbk1pY3Jvc2Vjb25kcyA9PiBfZHVyYXRpb247CgogIC8qKgogICAqIFJldHVybnMgYHRydWVgIGlmIHRoaXMgW0R1cmF0aW9uXSBoYXMgdGhlIHNhbWUgdmFsdWUgYXMgW290aGVyXS4KICAgKi8KICBib29sIG9wZXJhdG9yID09KGR5bmFtaWMgb3RoZXIpID0+CiAgICAgIG90aGVyIGlzIER1cmF0aW9uICYmIF9kdXJhdGlvbiA9PSBvdGhlci5pbk1pY3Jvc2Vjb25kczsKCiAgaW50IGdldCBoYXNoQ29kZSA9PiBfZHVyYXRpb24uaGFzaENvZGU7CgogIC8qKgogICAqIENvbXBhcmVzIHRoaXMgW0R1cmF0aW9uXSB0byBbb3RoZXJdLCByZXR1cm5pbmcgemVybyBpZiB0aGUgdmFsdWVzIGFyZSBlcXVhbC4KICAgKgogICAqIFJldHVybnMgYSBuZWdhdGl2ZSBpbnRlZ2VyIGlmIHRoaXMgYER1cmF0aW9uYCBpcyBzaG9ydGVyIHRoYW4KICAgKiBbb3RoZXJdLCBvciBhIHBvc2l0aXZlIGludGVnZXIgaWYgaXQgaXMgbG9uZ2VyLgogICAqCiAgICogQSBuZWdhdGl2ZSBgRHVyYXRpb25gIGlzIGFsd2F5cyBjb25zaWRlcmVkIHNob3J0ZXIgdGhhbiBhIHBvc2l0aXZlIG9uZS4KICAgKgogICAqIEl0IGlzIGFsd2F5cyB0aGUgY2FzZSB0aGF0IGBkdXJhdGlvbjEuY29tcGFyZVRvKGR1cmF0aW9uMikgPCAwYCBpZmYKICAgKiBgKHNvbWVEYXRlICsgZHVyYXRpb24xKS5jb21wYXJlVG8oc29tZURhdGUgKyBkdXJhdGlvbjIpIDwgMGAuCiAgICovCiAgaW50IGNvbXBhcmVUbyhEdXJhdGlvbiBvdGhlcikgPT4gX2R1cmF0aW9uLmNvbXBhcmVUbyhvdGhlci5fZHVyYXRpb24pOwoKICAvKioKICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgYER1cmF0aW9uYC4KICAgKgogICAqIFJldHVybnMgYSBzdHJpbmcgd2l0aCBob3VycywgbWludXRlcywgc2Vjb25kcywgYW5kIG1pY3Jvc2Vjb25kcywgaW4gdGhlCiAgICogZm9sbG93aW5nIGZvcm1hdDogYEhIOk1NOlNTLm1tbW1tbWAuIEZvciBleGFtcGxlLAogICAqCiAgICogICAgIHZhciBkID0gbmV3IER1cmF0aW9uKGRheXM6MSwgaG91cnM6MSwgbWludXRlczozMywgbWljcm9zZWNvbmRzOiA1MDApOwogICAqICAgICBkLnRvU3RyaW5nKCk7ICAvLyAiMjU6MzM6MDAuMDAwNTAwIgogICAqLwogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZyBzaXhEaWdpdHMoaW50IG4pIHsKICAgICAgaWYgKG4gPj0gMTAwMDAwKSByZXR1cm4gIiRuIjsKICAgICAgaWYgKG4gPj0gMTAwMDApIHJldHVybiAiMCRuIjsKICAgICAgaWYgKG4gPj0gMTAwMCkgcmV0dXJuICIwMCRuIjsKICAgICAgaWYgKG4gPj0gMTAwKSByZXR1cm4gIjAwMCRuIjsKICAgICAgaWYgKG4gPj0gMTApIHJldHVybiAiMDAwMCRuIjsKICAgICAgcmV0dXJuICIwMDAwMCRuIjsKICAgIH0KCiAgICBTdHJpbmcgdHdvRGlnaXRzKGludCBuKSB7CiAgICAgIGlmIChuID49IDEwKSByZXR1cm4gIiRuIjsKICAgICAgcmV0dXJuICIwJG4iOwogICAgfQoKICAgIGlmIChpbk1pY3Jvc2Vjb25kcyA8IDApIHsKICAgICAgcmV0dXJuICItJHstdGhpc30iOwogICAgfQogICAgU3RyaW5nIHR3b0RpZ2l0TWludXRlcyA9IHR3b0RpZ2l0cyhpbk1pbnV0ZXMucmVtYWluZGVyKG1pbnV0ZXNQZXJIb3VyKSk7CiAgICBTdHJpbmcgdHdvRGlnaXRTZWNvbmRzID0gdHdvRGlnaXRzKGluU2Vjb25kcy5yZW1haW5kZXIoc2Vjb25kc1Blck1pbnV0ZSkpOwogICAgU3RyaW5nIHNpeERpZ2l0VXMgPQogICAgICAgIHNpeERpZ2l0cyhpbk1pY3Jvc2Vjb25kcy5yZW1haW5kZXIobWljcm9zZWNvbmRzUGVyU2Vjb25kKSk7CiAgICByZXR1cm4gIiRpbkhvdXJzOiR0d29EaWdpdE1pbnV0ZXM6JHR3b0RpZ2l0U2Vjb25kcy4kc2l4RGlnaXRVcyI7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhpcyBgRHVyYXRpb25gIGlzIG5lZ2F0aXZlLgogICAqCiAgICogQSBuZWdhdGl2ZSBgRHVyYXRpb25gIHJlcHJlc2VudHMgdGhlIGRpZmZlcmVuY2UgZnJvbSBhIGxhdGVyIHRpbWUgdG8gYW4KICAgKiBlYXJsaWVyIHRpbWUuCiAgICovCiAgYm9vbCBnZXQgaXNOZWdhdGl2ZSA9PiBfZHVyYXRpb24gPCAwOwoKICAvKioKICAgKiBSZXR1cm5zIGEgbmV3IGBEdXJhdGlvbmAgcmVwcmVzZW50aW5nIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGlzCiAgICogYER1cmF0aW9uYC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBgRHVyYXRpb25gIGhhcyB0aGUgc2FtZSBsZW5ndGggYXMgdGhpcyBvbmUsIGJ1dCBpcyBhbHdheXMKICAgKiBwb3NpdGl2ZS4KICAgKi8KICBEdXJhdGlvbiBhYnMoKSA9PiBEdXJhdGlvbi5fbWljcm9zZWNvbmRzKF9kdXJhdGlvbi5hYnMoKSk7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgYER1cmF0aW9uYCByZXByZXNlbnRpbmcgdGhpcyBgRHVyYXRpb25gIG5lZ2F0ZWQuCiAgICoKICAgKiBUaGUgcmV0dXJuZWQgYER1cmF0aW9uYCBoYXMgdGhlIHNhbWUgbGVuZ3RoIGFzIHRoaXMgb25lLCBidXQgd2lsbCBoYXZlIHRoZQogICAqIG9wcG9zaXRlIHNpZ24gb2YgdGhpcyBvbmUuCiAgICovCiAgLy8gVXNpbmcgc3VidHJhY3Rpb24gaGVscHMgZGFydDJqcyBhdm9pZCBuZWdhdGl2ZSB6ZXJvcy4KICBEdXJhdGlvbiBvcGVyYXRvciAtKCkgPT4gRHVyYXRpb24uX21pY3Jvc2Vjb25kcygwIC0gX2R1cmF0aW9uKTsKfQqBJwBOTjwBEwEESANPSwwDS0hNA01MT00NA0glC0sHNk00Cy0HNAMwTTEQCzMlBzIdPQMwKgQxNjEqKCUBKzorMFFLASswUUsBR0EBQQE1AQU4BhcBBi8pBT8yBTYlBhIVFRcXHB03Ki4uOBsBUCQwAQYoLwYoQAQBBi42BihABAEGSx8FS0gGJEEEAQZNJgVGBidLJD86BAEGMigGRwEGMisGRwEGMjQGSQEGMjcGSQEGQAY+AQZBBTAGQAEGQwUwBkQBBkMFMAZEAQZEBTEGTgEGRAYnAQZGBiU+ASoBBlIFQzUFTQVJQwZJAQY5BU03BU8tBhYeJCQkJCQYBgEeIBQGAR4aBk1PGERFBAEGMgVNEwYoAQZGEQVMDwY9AQZEBVAgBjtCAgEXZGFydDpjb3JlL2R1cmF0aW9uLmRhcnQsb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvZXJyb3JzLmRhcnTAAEv9Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEVycm9yIG9iamVjdHMgdGhyb3duIGluIHRoZSBjYXNlIG9mIGEgcHJvZ3JhbSBmYWlsdXJlLgogKgogKiBBbiBgRXJyb3JgIG9iamVjdCByZXByZXNlbnRzIGEgcHJvZ3JhbSBmYWlsdXJlIHRoYXQgdGhlIHByb2dyYW1tZXIKICogc2hvdWxkIGhhdmUgYXZvaWRlZC4KICoKICogRXhhbXBsZXMgaW5jbHVkZSBjYWxsaW5nIGEgZnVuY3Rpb24gd2l0aCBpbnZhbGlkIGFyZ3VtZW50cywKICogb3IgZXZlbiB3aXRoIHRoZSB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLAogKiBvciBjYWxsaW5nIGl0IGF0IGEgdGltZSB3aGVuIGl0IGlzIG5vdCBhbGxvd2VkLgogKgogKiBUaGVzZSBhcmUgbm90IGVycm9ycyB0aGF0IGEgY2FsbGVyIHNob3VsZCBleHBlY3Qgb3IgY2F0Y2ggLQogKiBpZiB0aGV5IG9jY3VyLCB0aGUgcHJvZ3JhbSBpcyBlcnJvbmVvdXMsCiAqIGFuZCB0ZXJtaW5hdGluZyB0aGUgcHJvZ3JhbSBtYXkgYmUgdGhlIHNhZmVzdCByZXNwb25zZS4KICoKICogV2hlbiBkZWNpZGluZyB0aGF0IGEgZnVuY3Rpb24gdGhyb3dzIGFuIGVycm9yLAogKiB0aGUgY29uZGl0aW9ucyB3aGVyZSBpdCBoYXBwZW5zIHNob3VsZCBiZSBjbGVhcmx5IGRlc2NyaWJlZCwKICogYW5kIHRoZXkgc2hvdWxkIGJlIGRldGVjdGFibGUgYW5kIHByZWRpY3RhYmxlLAogKiBzbyB0aGUgcHJvZ3JhbW1lciB1c2luZyB0aGUgZnVuY3Rpb24gY2FuIGF2b2lkIHRyaWdnZXJpbmcgdGhlIGVycm9yLgogKgogKiBTdWNoIGRlc2NyaXB0aW9ucyBvZnRlbiB1c2VzIHdvcmRzIGxpa2UKICogIm11c3QiIG9yICJtdXN0IG5vdCIgdG8gZGVzY3JpYmUgdGhlIGNvbmRpdGlvbiwKICogYW5kIGlmIHlvdSBzZWUgd29yZHMgbGlrZSB0aGF0IGluIGEgZnVuY3Rpb24ncyBkb2N1bWVudGF0aW9uLAogKiB0aGVuIG5vdCBzYXRpc2Z5aW5nIHRoZSByZXF1aXJlbWVudAogKiBpcyB2ZXJ5IGxpa2VseSB0byBjYXVzZSBhbiBlcnJvciB0byBiZSB0aHJvd24uCiAqCiAqIEV4YW1wbGUgKGZyb20gW1N0cmluZy5jb250YWluc10pOgogKgogKiAgICAgICAgYHN0YXJ0SW5kZXhgIG11c3Qgbm90IGJlIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiBgbGVuZ3RoYC4KICoKICogSW4gdGhpcyBjYXNlLCBhbiBlcnJvciB3aWxsIGJlIHRocm93biBpZiBgc3RhcnRJbmRleGAgaXMgbmVnYXRpdmUKICogb3IgdG9vIGxhcmdlLgogKgogKiBJZiB0aGUgY29uZGl0aW9ucyBhcmUgbm90IGRldGVjdGFibGUgYmVmb3JlIGNhbGxpbmcgYSBmdW5jdGlvbiwKICogdGhlIGNhbGxlZCBmdW5jdGlvbiBzaG91bGQgbm90IHRocm93IGFuIGBFcnJvcmAuCiAqIEl0IG1heSBzdGlsbCB0aHJvdyBhIHZhbHVlLAogKiBidXQgdGhlIGNhbGxlciB3aWxsIGhhdmUgdG8gY2F0Y2ggdGhlIHRocm93biB2YWx1ZSwKICogZWZmZWN0aXZlbHkgbWFraW5nIGl0IGFuIGFsdGVybmF0aXZlIHJlc3VsdCByYXRoZXIgdGhhbiBhbiBlcnJvci4KICogVGhlIHRocm93biBvYmplY3QgY2FuIGNob29zZSB0byBpbXBsZW1lbnQgW0V4Y2VwdGlvbl0KICogdG8gZG9jdW1lbnQgdGhhdCBpdCByZXByZXNlbnRzIGFuIGV4Y2VwdGlvbmFsLCBidXQgbm90IGVycm9uZW91cywgb2NjdXJyZW5jZSwKICogYnV0IGl0IGhhcyBubyBvdGhlciBlZmZlY3QgdGhhbiBkb2N1bWVudGF0aW9uLgogKgogKiBBbGwgbm9uLWBudWxsYCB2YWx1ZXMgY2FuIGJlIHRocm93biBpbiBEYXJ0LgogKiBPYmplY3RzIGV4dGVuZGluZyBgRXJyb3JgIGFyZSBoYW5kbGVkIHNwZWNpYWxseToKICogVGhlIGZpcnN0IHRpbWUgdGhleSBhcmUgdGhyb3duLAogKiB0aGUgc3RhY2sgdHJhY2UgYXQgdGhlIHRocm93IHBvaW50IGlzIHJlY29yZGVkCiAqIGFuZCBzdG9yZWQgaW4gdGhlIGVycm9yIG9iamVjdC4KICogSXQgY2FuIGJlIHJldHJpZXZlZCB1c2luZyB0aGUgW3N0YWNrVHJhY2VdIGdldHRlci4KICogQW4gZXJyb3Igb2JqZWN0IHRoYXQgbWVyZWx5IGltcGxlbWVudHMgYEVycm9yYCwgYW5kIGRvZXNuJ3QgZXh0ZW5kIGl0LAogKiB3aWxsIG5vdCBzdG9yZSB0aGUgc3RhY2sgdHJhY2UgYXV0b21hdGljYWxseS4KICoKICogRXJyb3Igb2JqZWN0cyBhcmUgYWxzbyB1c2VkIGZvciBzeXN0ZW0gd2lkZSBmYWlsdXJlcwogKiBsaWtlIHN0YWNrIG92ZXJmbG93IG9yIGFuIG91dC1vZi1tZW1vcnkgc2l0dWF0aW9uLgogKgogKiBTaW5jZSBlcnJvcnMgYXJlIG5vdCBjcmVhdGVkIHRvIGJlIGNhdWdodCwKICogdGhlcmUgaXMgbm8gbmVlZCBmb3Igc3ViY2xhc3NlcyB0byBkaXN0aW5ndWlzaCB0aGUgZXJyb3JzLgogKiBJbnN0ZWFkIHN1YmNsYXNzZXMgaGF2ZSBiZWVuIGNyZWF0ZWQgaW4gb3JkZXIgdG8gbWFrZSBncm91cHMKICogb2YgcmVsYXRlZCBlcnJvcnMgZWFzeSB0byBjcmVhdGUgd2l0aCBjb25zaXN0ZW50IGVycm9yIG1lc3NhZ2VzLgogKiBGb3IgZXhhbXBsZSwgdGhlIFtTdHJpbmcuY29udGFpbnNdIG1ldGhvZCB3aWxsIHVzZSBhIFtSYW5nZUVycm9yXQogKiBpZiBpdHMgYHN0YXJ0SW5kZXhgIGlzbid0IGluIHRoZSByYW5nZSBgMC4ubGVuZ3RoYCwKICogd2hpY2ggaXMgZWFzaWx5IGNyZWF0ZWQgYnkgYG5ldyBSYW5nZUVycm9yLnJhbmdlKHN0YXJ0SW5kZXgsIDAsIGxlbmd0aClgLgogKi8KY2xhc3MgRXJyb3IgewogIEVycm9yKCk7IC8vIFByZXZlbnQgdXNlIGFzIG1peGluLgoKICAvKioKICAgKiBTYWZlbHkgY29udmVydCBhIHZhbHVlIHRvIGEgW1N0cmluZ10gZGVzY3JpcHRpb24uCiAgICoKICAgKiBUaGUgY29udmVyc2lvbiBpcyBndWFyYW50ZWVkIHRvIG5vdCB0aHJvdywgc28gaXQgd29uJ3QgdXNlIHRoZSBvYmplY3QncwogICAqIHRvU3RyaW5nIG1ldGhvZC4KICAgKi8KICBzdGF0aWMgU3RyaW5nIHNhZmVUb1N0cmluZyhPYmplY3Qgb2JqZWN0KSB7CiAgICBpZiAob2JqZWN0IGlzIG51bSB8fCBvYmplY3QgaXMgYm9vbCB8fCBudWxsID09IG9iamVjdCkgewogICAgICByZXR1cm4gb2JqZWN0LnRvU3RyaW5nKCk7CiAgICB9CiAgICBpZiAob2JqZWN0IGlzIFN0cmluZykgewogICAgICByZXR1cm4gX3N0cmluZ1RvU2FmZVN0cmluZyhvYmplY3QpOwogICAgfQogICAgcmV0dXJuIF9vYmplY3RUb1N0cmluZyhvYmplY3QpOwogIH0KCiAgLyoqIENvbnZlcnQgc3RyaW5nIHRvIGEgdmFsaWQgc3RyaW5nIGxpdGVyYWwgd2l0aCBubyBjb250cm9sIGNoYXJhY3RlcnMuICovCiAgZXh0ZXJuYWwgc3RhdGljIFN0cmluZyBfc3RyaW5nVG9TYWZlU3RyaW5nKFN0cmluZyBzdHJpbmcpOwoKICBleHRlcm5hbCBzdGF0aWMgU3RyaW5nIF9vYmplY3RUb1N0cmluZyhPYmplY3Qgb2JqZWN0KTsKCiAgZXh0ZXJuYWwgU3RhY2tUcmFjZSBnZXQgc3RhY2tUcmFjZTsKfQoKLyoqCiAqIEVycm9yIHRocm93biBieSB0aGUgcnVudGltZSBzeXN0ZW0gd2hlbiBhbiBhc3NlcnQgc3RhdGVtZW50IGZhaWxzLgogKi8KY2xhc3MgQXNzZXJ0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgLyoqIE1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgYXNzZXJ0aW9uIGVycm9yLiAqLwogIGZpbmFsIE9iamVjdCBtZXNzYWdlOwogIEFzc2VydGlvbkVycm9yKFt0aGlzLm1lc3NhZ2VdKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiQXNzZXJ0aW9uIGZhaWxlZCI7Cn0KCi8qKgogKiBFcnJvciB0aHJvd24gYnkgdGhlIHJ1bnRpbWUgc3lzdGVtIHdoZW4gYSB0eXBlIGFzc2VydGlvbiBmYWlscy4KICovCmNsYXNzIFR5cGVFcnJvciBleHRlbmRzIEFzc2VydGlvbkVycm9yIHt9CgovKioKICogRXJyb3IgdGhyb3duIGJ5IHRoZSBydW50aW1lIHN5c3RlbSB3aGVuIGEgY2FzdCBvcGVyYXRpb24gZmFpbHMuCiAqLwpjbGFzcyBDYXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7fQoKLyoqCiAqIEVycm9yIHRocm93biB3aGVuIGF0dGVtcHRpbmcgdG8gdGhyb3cgWzpudWxsOl0uCiAqLwpjbGFzcyBOdWxsVGhyb3duRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIE51bGxUaHJvd25FcnJvcigpOwogIFN0cmluZyB0b1N0cmluZygpID0+ICJUaHJvdyBvZiBudWxsLiI7Cn0KCi8qKgogKiBFcnJvciB0aHJvd24gd2hlbiBhIGZ1bmN0aW9uIGlzIHBhc3NlZCBhbiB1bmFjY2VwdGFibGUgYXJndW1lbnQuCiAqLwpjbGFzcyBBcmd1bWVudEVycm9yIGV4dGVuZHMgRXJyb3IgewogIC8qKiBXaGV0aGVyIHZhbHVlIHdhcyBwcm92aWRlZC4gKi8KICBmaW5hbCBib29sIF9oYXNWYWx1ZTsKICAvKiogVGhlIGludmFsaWQgdmFsdWUuICovCiAgZmluYWwgaW52YWxpZFZhbHVlOwogIC8qKiBOYW1lIG9mIHRoZSBpbnZhbGlkIGFyZ3VtZW50LCBpZiBhdmFpbGFibGUuICovCiAgZmluYWwgU3RyaW5nIG5hbWU7CiAgLyoqIE1lc3NhZ2UgZGVzY3JpYmluZyB0aGUgcHJvYmxlbS4gKi8KICBmaW5hbCBtZXNzYWdlOwoKICAvKioKICAgKiBUaGUgW21lc3NhZ2VdIGRlc2NyaWJlcyB0aGUgZXJyb25lb3VzIGFyZ3VtZW50LgogICAqCiAgICogRXhpc3RpbmcgY29kZSBtYXkgYmUgdXNpbmcgYG1lc3NhZ2VgIHRvIGhvbGQgdGhlIGludmFsaWQgdmFsdWUuCiAgICogSWYgdGhlIGBtZXNzYWdlYCBpcyBub3QgYSBbU3RyaW5nXSwgaXQgaXMgYXNzdW1lZCB0byBiZSBhIHZhbHVlIGluc3RlYWQKICAgKiBvZiBhIG1lc3NhZ2UuCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIEFyZ3VtZW50RXJyb3IoW3RoaXMubWVzc2FnZV0pCiAgICAgIDogaW52YWxpZFZhbHVlID0gbnVsbCwKICAgICAgICBfaGFzVmFsdWUgPSBmYWxzZSwKICAgICAgICBuYW1lID0gbnVsbDsKCiAgLyoqCiAgICogQ3JlYXRlcyBlcnJvciBjb250YWluaW5nIHRoZSBpbnZhbGlkIFt2YWx1ZV0uCiAgICoKICAgKiBBIG1lc3NhZ2UgaXMgYnVpbHQgYnkgc3VmZml4aW5nIHRoZSBbbWVzc2FnZV0gYXJndW1lbnQgd2l0aAogICAqIHRoZSBbbmFtZV0gYXJndW1lbnQgKGlmIHByb3ZpZGVkKSBhbmQgdGhlIHZhbHVlLiBFeGFtcGxlCiAgICoKICAgKiAgICAiSW52YWxpZCBhcmd1bWVudCAoZm9vKTogbnVsbCIKICAgKgogICAqIFRoZSBgbmFtZWAgc2hvdWxkIG1hdGNoIHRoZSBhcmd1bWVudCBuYW1lIG9mIHRoZSBmdW5jdGlvbiwgYnV0IGlmCiAgICogdGhlIGZ1bmN0aW9uIGlzIGEgbWV0aG9kIGltcGxlbWVudGluZyBhbiBpbnRlcmZhY2UsIGFuZCBpdHMgYXJndW1lbnQKICAgKiBuYW1lcyBkaWZmZXIgZnJvbSB0aGUgaW50ZXJmYWNlLCBpdCBtaWdodCBiZSBtb3JlIHVzZWZ1bCB0byB1c2UgdGhlCiAgICogaW50ZXJmYWNlIG1ldGhvZCdzIGFyZ3VtZW50IG5hbWUgKG9yIGp1c3QgcmVuYW1lIGFyZ3VtZW50cyB0byBtYXRjaCkuCiAgICovCiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIEFyZ3VtZW50RXJyb3IudmFsdWUodmFsdWUsIFt0aGlzLm5hbWUsIHRoaXMubWVzc2FnZV0pCiAgICAgIDogaW52YWxpZFZhbHVlID0gdmFsdWUsCiAgICAgICAgX2hhc1ZhbHVlID0gdHJ1ZTsKCiAgLyoqCiAgICogQ3JlYXRlIGFuIGFyZ3VtZW50IGVycm9yIGZvciBhIGBudWxsYCBhcmd1bWVudCB0aGF0IG11c3Qgbm90IGJlIGBudWxsYC4KICAgKi8KICBBcmd1bWVudEVycm9yLm5vdE51bGwoW3RoaXMubmFtZV0pCiAgICAgIDogX2hhc1ZhbHVlID0gZmFsc2UsCiAgICAgICAgbWVzc2FnZSA9ICJNdXN0IG5vdCBiZSBudWxsIiwKICAgICAgICBpbnZhbGlkVmFsdWUgPSBudWxsOwoKICAvKioKICAgKiBUaHJvd3MgaWYgW2FyZ3VtZW50XSBpcyBgbnVsbGAuCiAgICovCiAgQFNpbmNlKCIyLjEiKQogIHN0YXRpYyB2b2lkIGNoZWNrTm90TnVsbChPYmplY3QgYXJndW1lbnQsIFtTdHJpbmcgbmFtZV0pIHsKICAgIGlmIChhcmd1bWVudCA9PSBudWxsKSB0aHJvdyBBcmd1bWVudEVycm9yLm5vdE51bGwobmFtZSk7CiAgfQoKICAvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciB0b1N0cmluZyBvdmVycmlkZGVuIGluIHN1YmNsYXNzZXMuCiAgU3RyaW5nIGdldCBfZXJyb3JOYW1lID0+ICJJbnZhbGlkIGFyZ3VtZW50JHshX2hhc1ZhbHVlID8gIihzKSIgOiAiIn0iOwogIFN0cmluZyBnZXQgX2Vycm9yRXhwbGFuYXRpb24gPT4gIiI7CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZyBuYW1lU3RyaW5nID0gIiI7CiAgICBpZiAobmFtZSAhPSBudWxsKSB7CiAgICAgIG5hbWVTdHJpbmcgPSAiICgkbmFtZSkiOwogICAgfQogICAgdmFyIG1lc3NhZ2UgPSAodGhpcy5tZXNzYWdlID09IG51bGwpID8gIiIgOiAiOiAke3RoaXMubWVzc2FnZX0iOwogICAgU3RyaW5nIHByZWZpeCA9ICIkX2Vycm9yTmFtZSRuYW1lU3RyaW5nJG1lc3NhZ2UiOwogICAgaWYgKCFfaGFzVmFsdWUpIHJldHVybiBwcmVmaXg7CiAgICAvLyBJZiB3ZSBrbm93IHRoZSBpbnZhbGlkIHZhbHVlLCB3ZSBjYW4gdHJ5IHRvIGRlc2NyaWJlIHRoZSBwcm9ibGVtLgogICAgU3RyaW5nIGV4cGxhbmF0aW9uID0gX2Vycm9yRXhwbGFuYXRpb247CiAgICBTdHJpbmcgZXJyb3JWYWx1ZSA9IEVycm9yLnNhZmVUb1N0cmluZyhpbnZhbGlkVmFsdWUpOwogICAgcmV0dXJuICIkcHJlZml4JGV4cGxhbmF0aW9uOiAkZXJyb3JWYWx1ZSI7CiAgfQp9CgovKioKICogRXJyb3IgdGhyb3duIGR1ZSB0byBhbiBpbmRleCBiZWluZyBvdXRzaWRlIGEgdmFsaWQgcmFuZ2UuCiAqLwpjbGFzcyBSYW5nZUVycm9yIGV4dGVuZHMgQXJndW1lbnRFcnJvciB7CiAgLyoqIFRoZSBtaW5pbXVtIHZhbHVlIHRoYXQgW3ZhbHVlXSBpcyBhbGxvd2VkIHRvIGFzc3VtZS4gKi8KICBmaW5hbCBudW0gc3RhcnQ7CiAgLyoqIFRoZSBtYXhpbXVtIHZhbHVlIHRoYXQgW3ZhbHVlXSBpcyBhbGxvd2VkIHRvIGFzc3VtZS4gKi8KICBmaW5hbCBudW0gZW5kOwoKICAvLyBUT0RPKGxybik6IFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdpdGggc3RyaW5nIHZhbHVlcy4KICAvLyBJdCBjdXJyZW50bHkgaXNuJ3QgaW4gYWxsIGNhc2VzLgogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBbUmFuZ2VFcnJvcl0gd2l0aCB0aGUgZ2l2ZW4gW21lc3NhZ2VdLgogICAqLwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBSYW5nZUVycm9yKHZhciBtZXNzYWdlKQogICAgICA6IHN0YXJ0ID0gbnVsbCwKICAgICAgICBlbmQgPSBudWxsLAogICAgICAgIHN1cGVyKG1lc3NhZ2UpOwoKICAvKioKICAgKiBDcmVhdGUgYSBuZXcgW1JhbmdlRXJyb3JdIHdpdGggYSBtZXNzYWdlIGZvciB0aGUgZ2l2ZW4gW3ZhbHVlXS4KICAgKgogICAqIEFuIG9wdGlvbmFsIFtuYW1lXSBjYW4gc3BlY2lmeSB0aGUgYXJndW1lbnQgbmFtZSB0aGF0IGhhcyB0aGUKICAgKiBpbnZhbGlkIHZhbHVlLCBhbmQgdGhlIFttZXNzYWdlXSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZXJyb3IKICAgKiBkZXNjcmlwdGlvbi4KICAgKi8KICBSYW5nZUVycm9yLnZhbHVlKG51bSB2YWx1ZSwgW1N0cmluZyBuYW1lLCBTdHJpbmcgbWVzc2FnZV0pCiAgICAgIDogc3RhcnQgPSBudWxsLAogICAgICAgIGVuZCA9IG51bGwsCiAgICAgICAgc3VwZXIudmFsdWUoCiAgICAgICAgICAgIHZhbHVlLCBuYW1lLCAobWVzc2FnZSAhPSBudWxsKSA/IG1lc3NhZ2UgOiAiVmFsdWUgbm90IGluIHJhbmdlIik7CgogIC8qKgogICAqIENyZWF0ZSBhIG5ldyBbUmFuZ2VFcnJvcl0gZm9yIGEgdmFsdWUgYmVpbmcgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2UuCiAgICoKICAgKiBUaGUgYWxsb3dlZCByYW5nZSBpcyBmcm9tIFttaW5WYWx1ZV0gdG8gW21heFZhbHVlXSwgaW5jbHVzaXZlLgogICAqIElmIGBtaW5WYWx1ZWAgb3IgYG1heFZhbHVlYCBhcmUgYG51bGxgLCB0aGUgcmFuZ2UgaXMgaW5maW5pdGUgaW4KICAgKiB0aGF0IGRpcmVjdGlvbi4KICAgKgogICAqIEZvciBhIHJhbmdlIGZyb20gMCB0byB0aGUgbGVuZ3RoIG9mIHNvbWV0aGluZywgZW5kIGV4Y2x1c2l2ZSwgdXNlCiAgICogW1JhbmdlRXJyb3IuaW5kZXhdLgogICAqCiAgICogQW4gb3B0aW9uYWwgW25hbWVdIGNhbiBzcGVjaWZ5IHRoZSBhcmd1bWVudCBuYW1lIHRoYXQgaGFzIHRoZQogICAqIGludmFsaWQgdmFsdWUsIGFuZCB0aGUgW21lc3NhZ2VdIGNhbiBvdmVycmlkZSB0aGUgZGVmYXVsdCBlcnJvcgogICAqIGRlc2NyaXB0aW9uLgogICAqLwogIEBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKICBSYW5nZUVycm9yLnJhbmdlKG51bSBpbnZhbGlkVmFsdWUsIGludCBtaW5WYWx1ZSwgaW50IG1heFZhbHVlLAogICAgICBbU3RyaW5nIG5hbWUsIFN0cmluZyBtZXNzYWdlXSkKICAgICAgOiBzdGFydCA9IG1pblZhbHVlLAogICAgICAgIGVuZCA9IG1heFZhbHVlLAogICAgICAgIHN1cGVyLnZhbHVlKAogICAgICAgICAgICBpbnZhbGlkVmFsdWUsIG5hbWUsIChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJJbnZhbGlkIHZhbHVlIik7CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgW1JhbmdlRXJyb3JdIHN0YXRpbmcgdGhhdCBbaW5kZXhdIGlzIG5vdCBhIHZhbGlkIGluZGV4CiAgICogaW50byBbaW5kZXhhYmxlXS4KICAgKgogICAqIEFuIG9wdGlvbmFsIFtuYW1lXSBjYW4gc3BlY2lmeSB0aGUgYXJndW1lbnQgbmFtZSB0aGF0IGhhcyB0aGUKICAgKiBpbnZhbGlkIHZhbHVlLCBhbmQgdGhlIFttZXNzYWdlXSBjYW4gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgZXJyb3IKICAgKiBkZXNjcmlwdGlvbi4KICAgKgogICAqIFRoZSBbbGVuZ3RoXSBpcyB0aGUgbGVuZ3RoIG9mIFtpbmRleGFibGVdIGF0IHRoZSB0aW1lIG9mIHRoZSBlcnJvci4KICAgKiBJZiBgbGVuZ3RoYCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgaW5kZXhhYmxlLmxlbmd0aGAuCiAgICovCiAgZmFjdG9yeSBSYW5nZUVycm9yLmluZGV4KGludCBpbmRleCwgZHluYW1pYyBpbmRleGFibGUsCiAgICAgIFtTdHJpbmcgbmFtZSwgU3RyaW5nIG1lc3NhZ2UsIGludCBsZW5ndGhdKSA9IEluZGV4RXJyb3I7CgogIC8qKgogICAqIENoZWNrIHRoYXQgYSBbdmFsdWVdIGxpZXMgaW4gYSBzcGVjaWZpYyBpbnRlcnZhbC4KICAgKgogICAqIFRocm93cyBpZiBbdmFsdWVdIGlzIG5vdCBpbiB0aGUgaW50ZXJ2YWwuCiAgICogVGhlIGludGVydmFsIGlzIGZyb20gW21pblZhbHVlXSB0byBbbWF4VmFsdWVdLCBib3RoIGluY2x1c2l2ZS4KICAgKi8KICBzdGF0aWMgdm9pZCBjaGVja1ZhbHVlSW5JbnRlcnZhbChpbnQgdmFsdWUsIGludCBtaW5WYWx1ZSwgaW50IG1heFZhbHVlLAogICAgICBbU3RyaW5nIG5hbWUsIFN0cmluZyBtZXNzYWdlXSkgewogICAgaWYgKHZhbHVlIDwgbWluVmFsdWUgfHwgdmFsdWUgPiBtYXhWYWx1ZSkgewogICAgICB0aHJvdyBSYW5nZUVycm9yLnJhbmdlKHZhbHVlLCBtaW5WYWx1ZSwgbWF4VmFsdWUsIG5hbWUsIG1lc3NhZ2UpOwogICAgfQogIH0KCiAgLyoqCiAgICogQ2hlY2sgdGhhdCBhIHZhbHVlIGlzIGEgdmFsaWQgaW5kZXggaW50byBhbiBpbmRleGFibGUgb2JqZWN0LgogICAqCiAgICogVGhyb3dzIGlmIFtpbmRleF0gaXMgbm90IGEgdmFsaWQgaW5kZXggaW50byBbaW5kZXhhYmxlXS4KICAgKgogICAqIEFuIGluZGV4YWJsZSBvYmplY3QgaXMgb25lIHRoYXQgaGFzIGEgYGxlbmd0aGAgYW5kIGEgYW5kIGluZGV4LW9wZXJhdG9yCiAgICogYFtdYCB0aGF0IGFjY2VwdHMgYW4gaW5kZXggaWYgYDAgPD0gaW5kZXggPCBsZW5ndGhgLgogICAqCiAgICogSWYgW2xlbmd0aF0gaXMgcHJvdmlkZWQsIGl0IGlzIHVzZWQgYXMgdGhlIGxlbmd0aCBvZiB0aGUgaW5kZXhhYmxlIG9iamVjdCwKICAgKiBvdGhlcndpc2UgdGhlIGxlbmd0aCBpcyBmb3VuZCBhcyBgaW5kZXhhYmxlLmxlbmd0aGAuCiAgICovCiAgc3RhdGljIHZvaWQgY2hlY2tWYWxpZEluZGV4KGludCBpbmRleCwgZHluYW1pYyBpbmRleGFibGUsCiAgICAgIFtTdHJpbmcgbmFtZSwgaW50IGxlbmd0aCwgU3RyaW5nIG1lc3NhZ2VdKSB7CiAgICBsZW5ndGggPz89IGluZGV4YWJsZS5sZW5ndGg7CiAgICAvLyBDb21wYXJpbmcgd2l0aCBgMGAgYXMgcmVjZWl2ZXIgcHJvZHVjZXMgYmV0dGVyIGRhcnQyanMgdHlwZSBpbmZlcmVuY2UuCiAgICBpZiAoMCA+IGluZGV4IHx8IGluZGV4ID49IGxlbmd0aCkgewogICAgICBuYW1lID8/PSAiaW5kZXgiOwogICAgICB0aHJvdyBSYW5nZUVycm9yLmluZGV4KGluZGV4LCBpbmRleGFibGUsIG5hbWUsIG1lc3NhZ2UsIGxlbmd0aCk7CiAgICB9CiAgfQoKICAvKioKICAgKiBDaGVjayB0aGF0IGEgcmFuZ2UgcmVwcmVzZW50cyBhIHNsaWNlIG9mIGFuIGluZGV4YWJsZSBvYmplY3QuCiAgICoKICAgKiBUaHJvd3MgaWYgdGhlIHJhbmdlIGlzIG5vdCB2YWxpZCBmb3IgYW4gaW5kZXhhYmxlIG9iamVjdCB3aXRoCiAgICogdGhlIGdpdmVuIFtsZW5ndGhdLgogICAqIEEgcmFuZ2UgaXMgdmFsaWQgZm9yIGFuIGluZGV4YWJsZSBvYmplY3Qgd2l0aCBhIGdpdmVuIFtsZW5ndGhdCiAgICoKICAgKiBpZiBgMCA8PSBbc3RhcnRdIDw9IFtlbmRdIDw9IFtsZW5ndGhdYC4KICAgKiBBbiBgZW5kYCBvZiBgbnVsbGAgaXMgY29uc2lkZXJlZCBlcXVpdmFsZW50IHRvIGBsZW5ndGhgLgogICAqCiAgICogVGhlIFtzdGFydE5hbWVdIGFuZCBbZW5kTmFtZV0gZGVmYXVsdHMgdG8gYCJzdGFydCJgIGFuZCBgImVuZCJgLAogICAqIHJlc3BlY3RpdmVseS4KICAgKgogICAqIFJldHVybnMgdGhlIGFjdHVhbCBgZW5kYCB2YWx1ZSwgd2hpY2ggaXMgYGxlbmd0aGAgaWYgYGVuZGAgaXMgYG51bGxgLAogICAqIGFuZCBgZW5kYCBvdGhlcndpc2UuCiAgICovCiAgc3RhdGljIGludCBjaGVja1ZhbGlkUmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kLCBpbnQgbGVuZ3RoLAogICAgICBbU3RyaW5nIHN0YXJ0TmFtZSwgU3RyaW5nIGVuZE5hbWUsIFN0cmluZyBtZXNzYWdlXSkgewogICAgLy8gQ29tcGFyaW5nIHdpdGggYDBgIGFzIHJlY2VpdmVyIHByb2R1Y2VzIGJldHRlciBkYXJ0MmpzIHR5cGUgaW5mZXJlbmNlLgogICAgLy8gRGl0dG8gYHN0YXJ0ID4gZW5kYCBiZWxvdy4KICAgIGlmICgwID4gc3RhcnQgfHwgc3RhcnQgPiBsZW5ndGgpIHsKICAgICAgc3RhcnROYW1lID8/PSAic3RhcnQiOwogICAgICB0aHJvdyBSYW5nZUVycm9yLnJhbmdlKHN0YXJ0LCAwLCBsZW5ndGgsIHN0YXJ0TmFtZSwgbWVzc2FnZSk7CiAgICB9CiAgICBpZiAoZW5kICE9IG51bGwpIHsKICAgICAgaWYgKHN0YXJ0ID4gZW5kIHx8IGVuZCA+IGxlbmd0aCkgewogICAgICAgIGVuZE5hbWUgPz89ICJlbmQiOwogICAgICAgIHRocm93IFJhbmdlRXJyb3IucmFuZ2UoZW5kLCBzdGFydCwgbGVuZ3RoLCBlbmROYW1lLCBtZXNzYWdlKTsKICAgICAgfQogICAgICByZXR1cm4gZW5kOwogICAgfQogICAgcmV0dXJuIGxlbmd0aDsKICB9CgogIC8qKgogICAqIENoZWNrIHRoYXQgYW4gaW50ZWdlciB2YWx1ZSBpc24ndCBuZWdhdGl2ZS4KICAgKgogICAqIFRocm93cyBpZiB0aGUgdmFsdWUgaXMgbmVnYXRpdmUuCiAgICovCiAgc3RhdGljIHZvaWQgY2hlY2tOb3ROZWdhdGl2ZShpbnQgdmFsdWUsIFtTdHJpbmcgbmFtZSwgU3RyaW5nIG1lc3NhZ2VdKSB7CiAgICBpZiAodmFsdWUgPCAwKSB0aHJvdyBSYW5nZUVycm9yLnJhbmdlKHZhbHVlLCAwLCBudWxsLCBuYW1lLCBtZXNzYWdlKTsKICB9CgogIFN0cmluZyBnZXQgX2Vycm9yTmFtZSA9PiAiUmFuZ2VFcnJvciI7CiAgU3RyaW5nIGdldCBfZXJyb3JFeHBsYW5hdGlvbiB7CiAgICBhc3NlcnQoX2hhc1ZhbHVlKTsKICAgIFN0cmluZyBleHBsYW5hdGlvbiA9ICIiOwogICAgaWYgKHN0YXJ0ID09IG51bGwpIHsKICAgICAgaWYgKGVuZCAhPSBudWxsKSB7CiAgICAgICAgZXhwbGFuYXRpb24gPSAiOiBOb3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICRlbmQiOwogICAgICB9CiAgICAgIC8vIElmIGJvdGggYXJlIG51bGwsIHdlIGRvbid0IGFkZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBsaW1pdHMuCiAgICB9IGVsc2UgaWYgKGVuZCA9PSBudWxsKSB7CiAgICAgIGV4cGxhbmF0aW9uID0gIjogTm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAkc3RhcnQiOwogICAgfSBlbHNlIGlmIChlbmQgPiBzdGFydCkgewogICAgICBleHBsYW5hdGlvbiA9ICI6IE5vdCBpbiByYW5nZSAkc3RhcnQuLiRlbmQsIGluY2x1c2l2ZSI7CiAgICB9IGVsc2UgaWYgKGVuZCA8IHN0YXJ0KSB7CiAgICAgIGV4cGxhbmF0aW9uID0gIjogVmFsaWQgdmFsdWUgcmFuZ2UgaXMgZW1wdHkiOwogICAgfSBlbHNlIHsKICAgICAgLy8gZW5kID09IHN0YXJ0LgogICAgICBleHBsYW5hdGlvbiA9ICI6IE9ubHkgdmFsaWQgdmFsdWUgaXMgJHN0YXJ0IjsKICAgIH0KICAgIHJldHVybiBleHBsYW5hdGlvbjsKICB9Cn0KCi8qKgogKiBBIHNwZWNpYWxpemVkIFtSYW5nZUVycm9yXSB1c2VkIHdoZW4gYW4gaW5kZXggaXMgbm90IGluIHRoZSByYW5nZQogKiBgMC4uaW5kZXhhYmxlLmxlbmd0aC0xYC4KICoKICogQWxzbyBjb250YWlucyB0aGUgaW5kZXhhYmxlIG9iamVjdCwgaXRzIGxlbmd0aCBhdCB0aGUgdGltZSBvZiB0aGUgZXJyb3IsCiAqIGFuZCB0aGUgaW52YWxpZCBpbmRleCBpdHNlbGYuCiAqLwpjbGFzcyBJbmRleEVycm9yIGV4dGVuZHMgQXJndW1lbnRFcnJvciBpbXBsZW1lbnRzIFJhbmdlRXJyb3IgewogIC8qKiBUaGUgaW5kZXhhYmxlIG9iamVjdCB0aGF0IFtpbnZhbGlkVmFsdWVdIHdhcyBub3QgYSB2YWxpZCBpbmRleCBpbnRvLiAqLwogIGZpbmFsIGluZGV4YWJsZTsKICAvKiogVGhlIGxlbmd0aCBvZiBbaW5kZXhhYmxlXSBhdCB0aGUgdGltZSBvZiB0aGUgZXJyb3IuICovCiAgZmluYWwgaW50IGxlbmd0aDsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBbSW5kZXhFcnJvcl0gc3RhdGluZyB0aGF0IFtpbnZhbGlkVmFsdWVdIGlzIG5vdCBhIHZhbGlkIGluZGV4CiAgICogaW50byBbaW5kZXhhYmxlXS4KICAgKgogICAqIFRoZSBbbGVuZ3RoXSBpcyB0aGUgbGVuZ3RoIG9mIFtpbmRleGFibGVdIGF0IHRoZSB0aW1lIG9mIHRoZSBlcnJvci4KICAgKiBJZiBgbGVuZ3RoYCBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgaW5kZXhhYmxlLmxlbmd0aGAuCiAgICoKICAgKiBUaGUgbWVzc2FnZSBpcyB1c2VkIGFzIHBhcnQgb2YgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZXJyb3IuCiAgICovCiAgSW5kZXhFcnJvcihpbnQgaW52YWxpZFZhbHVlLCBkeW5hbWljIGluZGV4YWJsZSwKICAgICAgW1N0cmluZyBuYW1lLCBTdHJpbmcgbWVzc2FnZSwgaW50IGxlbmd0aF0pCiAgICAgIDogdGhpcy5pbmRleGFibGUgPSBpbmRleGFibGUsCiAgICAgICAgdGhpcy5sZW5ndGggPSBsZW5ndGggPz8gaW5kZXhhYmxlLmxlbmd0aCwKICAgICAgICBzdXBlci52YWx1ZShpbnZhbGlkVmFsdWUsIG5hbWUsCiAgICAgICAgICAgIChtZXNzYWdlICE9IG51bGwpID8gbWVzc2FnZSA6ICJJbmRleCBvdXQgb2YgcmFuZ2UiKTsKCiAgLy8gR2V0dGVycyBpbmhlcml0ZWQgZnJvbSBSYW5nZUVycm9yLgogIGludCBnZXQgc3RhcnQgPT4gMDsKICBpbnQgZ2V0IGVuZCA9PiBsZW5ndGggLSAxOwoKICBTdHJpbmcgZ2V0IF9lcnJvck5hbWUgPT4gIlJhbmdlRXJyb3IiOwogIFN0cmluZyBnZXQgX2Vycm9yRXhwbGFuYXRpb24gewogICAgYXNzZXJ0KF9oYXNWYWx1ZSk7CiAgICBpbnQgaW52YWxpZFZhbHVlID0gdGhpcy5pbnZhbGlkVmFsdWU7CiAgICBpZiAoaW52YWxpZFZhbHVlIDwgMCkgewogICAgICByZXR1cm4gIjogaW5kZXggbXVzdCBub3QgYmUgbmVnYXRpdmUiOwogICAgfQogICAgaWYgKGxlbmd0aCA9PSAwKSB7CiAgICAgIHJldHVybiAiOiBubyBpbmRpY2VzIGFyZSB2YWxpZCI7CiAgICB9CiAgICByZXR1cm4gIjogaW5kZXggc2hvdWxkIGJlIGxlc3MgdGhhbiAkbGVuZ3RoIjsKICB9Cn0KCi8qKgogKiBFcnJvciB0aHJvd24gd2hlbiBjb250cm9sIHJlYWNoZXMgdGhlIGVuZCBvZiBhIHN3aXRjaCBjYXNlLgogKgogKiBUaGUgRGFydCBzcGVjaWZpY2F0aW9uIHJlcXVpcmVzIHRoaXMgZXJyb3IgdG8gYmUgdGhyb3duIHdoZW4KICogY29udHJvbCByZWFjaGVzIHRoZSBlbmQgb2YgYSBzd2l0Y2ggY2FzZSAoZXhjZXB0IHRoZSBsYXN0IGNhc2UKICogb2YgYSBzd2l0Y2gpIHdpdGhvdXQgbWVldGluZyBhIGJyZWFrIG9yIHNpbWlsYXIgZW5kIG9mIHRoZSBjb250cm9sCiAqIGZsb3cuCiAqLwpjbGFzcyBGYWxsVGhyb3VnaEVycm9yIGV4dGVuZHMgRXJyb3IgewogIEZhbGxUaHJvdWdoRXJyb3IoKTsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgZXh0ZXJuYWwgRmFsbFRocm91Z2hFcnJvci5fY3JlYXRlKFN0cmluZyB1cmwsIGludCBsaW5lKTsKCiAgZXh0ZXJuYWwgU3RyaW5nIHRvU3RyaW5nKCk7Cn0KCi8qKgogKiBFcnJvciB0aHJvd24gd2hlbiB0cnlpbmcgdG8gaW5zdGFudGlhdGUgYW4gYWJzdHJhY3QgY2xhc3MuCiAqLwpjbGFzcyBBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3IgewogIGZpbmFsIFN0cmluZyBfY2xhc3NOYW1lOwogIEFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3IoU3RyaW5nIGNsYXNzTmFtZSkgOiBfY2xhc3NOYW1lID0gY2xhc3NOYW1lOwoKICBleHRlcm5hbCBTdHJpbmcgdG9TdHJpbmcoKTsKfQoKLyoqCiAqIEVycm9yIHRocm93biBieSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBbOm5vU3VjaE1ldGhvZDpdIG9uIFtPYmplY3RdLgogKi8KY2xhc3MgTm9TdWNoTWV0aG9kRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgLyoqCiAgICogQ3JlYXRlIGEgW05vU3VjaE1ldGhvZEVycm9yXSBjb3JyZXNwb25kaW5nIHRvIGEgZmFpbGVkIG1ldGhvZCBjYWxsLgogICAqCiAgICogVGhlIFtyZWNlaXZlcl0gaXMgdGhlIHJlY2VpdmVyIG9mIHRoZSBtZXRob2QgY2FsbC4KICAgKiBUaGF0IGlzLCB0aGUgb2JqZWN0IG9uIHdoaWNoIHRoZSBtZXRob2Qgd2FzIGF0dGVtcHRlZCBjYWxsZWQuCiAgICoKICAgKiBUaGUgW2ludm9jYXRpb25dIHJlcHJlc2VudHMgdGhlIG1ldGhvZCBjYWxsIHRoYXQgZmFpbGVkLiBJdAogICAqIHNob3VsZCBub3QgYmUgYG51bGxgLgogICAqLwogIGV4dGVybmFsIE5vU3VjaE1ldGhvZEVycm9yLndpdGhJbnZvY2F0aW9uKAogICAgICBPYmplY3QgcmVjZWl2ZXIsIEludm9jYXRpb24gaW52b2NhdGlvbik7CgogIC8vIERlcHJlY2F0ZWQgY29uc3RydWN0b3IgdG8gYmUgcmVtb3ZlZCBhZnRlciBkYXJ0MmpzIHVwZGF0ZXMgdG8gdGhlIGFib3ZlLgogIC8qKgogICAqIENyZWF0ZSBhIFtOb1N1Y2hNZXRob2RFcnJvcl0gY29ycmVzcG9uZGluZyB0byBhIGZhaWxlZCBtZXRob2QgY2FsbC4KICAgKgogICAqIFRoZSBbcmVjZWl2ZXJdIGlzIHRoZSByZWNlaXZlciBvZiB0aGUgbWV0aG9kIGNhbGwuCiAgICogVGhhdCBpcywgdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgbWV0aG9kIHdhcyBhdHRlbXB0ZWQgY2FsbGVkLgogICAqIElmIHRoZSByZWNlaXZlciBpcyBgbnVsbGAsIGl0IGlzIGludGVycHJldGVkIGFzIGEgY2FsbCB0byBhIHRvcC1sZXZlbAogICAqIGZ1bmN0aW9uIG9mIGEgbGlicmFyeS4KICAgKgogICAqIFRoZSBbbWVtYmVyTmFtZV0gaXMgYSBbU3ltYm9sXSByZXByZXNlbnRpbmcgdGhlIG5hbWUgb2YgdGhlIGNhbGxlZCBtZXRob2QKICAgKiBvciBhY2Nlc3Nvci4gSXQgc2hvdWxkIG5vdCBiZSBgbnVsbGAuCiAgICoKICAgKiBUaGUgW3Bvc2l0aW9uYWxBcmd1bWVudHNdIGlzIGEgbGlzdCBvZiB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgdGhhdCB0aGUKICAgKiBtZXRob2Qgd2FzIGNhbGxlZCB3aXRoLiBJZiBgbnVsbGAsIGl0IGlzIGNvbnNpZGVyZWQgZXF1aXZhbGVudCB0byB0aGUKICAgKiBlbXB0eSBsaXN0LgogICAqCiAgICogVGhlIFtuYW1lZEFyZ3VtZW50c10gaXMgYSBtYXAgZnJvbSBbU3ltYm9sXXMgdG8gdGhlIHZhbHVlcyBvZiBuYW1lZAogICAqIGFyZ3VtZW50cyB0aGF0IHRoZSBtZXRob2Qgd2FzIGNhbGxlZCB3aXRoLgogICAqCiAgICogVGhpcyBjb25zdHJ1Y3RvciBkb2VzIG5vdCBoYW5kbGUgdHlwZSBhcmd1bWVudHMuCiAgICogVG8gaW5jbHVkZSB0eXBlIHZhcmlhYmxlcywgY3JlYXRlIGFuIFtJbnZvY2F0aW9uXSBhbmQgdXNlCiAgICogW05vU3VjaE1ldGhvZEVycm9yLndpdGhJbnZvY2F0aW9uXS4KICAgKi8KICBARGVwcmVjYXRlZCgiVXNlIE5vU3VjaE1ldGhvZC53aXRoSW52b2NhdGlvbiBpbnN0ZWFkIikKICBleHRlcm5hbCBOb1N1Y2hNZXRob2RFcnJvcihPYmplY3QgcmVjZWl2ZXIsIFN5bWJvbCBtZW1iZXJOYW1lLAogICAgICBMaXN0IHBvc2l0aW9uYWxBcmd1bWVudHMsIE1hcDxTeW1ib2wsIGR5bmFtaWM+IG5hbWVkQXJndW1lbnRzLAogICAgICBbQGRlcHJlY2F0ZWQgTGlzdCBleGlzdGluZ0FyZ3VtZW50TmFtZXNdKTsKCiAgZXh0ZXJuYWwgU3RyaW5nIHRvU3RyaW5nKCk7Cn0KCi8qKgogKiBUaGUgb3BlcmF0aW9uIHdhcyBub3QgYWxsb3dlZCBieSB0aGUgb2JqZWN0LgogKgogKiBUaGlzIFtFcnJvcl0gaXMgdGhyb3duIHdoZW4gYW4gaW5zdGFuY2UgY2Fubm90IGltcGxlbWVudCBvbmUgb2YgdGhlIG1ldGhvZHMKICogaW4gaXRzIHNpZ25hdHVyZS4KICovCkBwcmFnbWEoInZtOmVudHJ5LXBvaW50IikKY2xhc3MgVW5zdXBwb3J0ZWRFcnJvciBleHRlbmRzIEVycm9yIHsKICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgVW5zdXBwb3J0ZWRFcnJvcih0aGlzLm1lc3NhZ2UpOwogIFN0cmluZyB0b1N0cmluZygpID0+ICJVbnN1cHBvcnRlZCBvcGVyYXRpb246ICRtZXNzYWdlIjsKfQoKLyoqCiAqIFRocm93biBieSBvcGVyYXRpb25zIHRoYXQgaGF2ZSBub3QgYmVlbiBpbXBsZW1lbnRlZCB5ZXQuCiAqCiAqIFRoaXMgW0Vycm9yXSBpcyB0aHJvd24gYnkgdW5maW5pc2hlZCBjb2RlIHRoYXQgaGFzbid0IHlldCBpbXBsZW1lbnRlZAogKiBhbGwgdGhlIGZlYXR1cmVzIGl0IG5lZWRzLgogKgogKiBJZiBhIGNsYXNzIGlzIG5vdCBpbnRlbmRpbmcgdG8gaW1wbGVtZW50IHRoZSBmZWF0dXJlLCBpdCBzaG91bGQgdGhyb3cKICogYW4gW1Vuc3VwcG9ydGVkRXJyb3JdIGluc3RlYWQuIFRoaXMgZXJyb3IgaXMgb25seSBpbnRlbmRlZCBmb3IKICogdXNlIGR1cmluZyBkZXZlbG9wbWVudC4KICovCmNsYXNzIFVuaW1wbGVtZW50ZWRFcnJvciBleHRlbmRzIEVycm9yIGltcGxlbWVudHMgVW5zdXBwb3J0ZWRFcnJvciB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CiAgVW5pbXBsZW1lbnRlZEVycm9yKFt0aGlzLm1lc3NhZ2VdKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAodGhpcy5tZXNzYWdlICE9IG51bGwKICAgICAgPyAiVW5pbXBsZW1lbnRlZEVycm9yOiAkbWVzc2FnZSIKICAgICAgOiAiVW5pbXBsZW1lbnRlZEVycm9yIik7Cn0KCi8qKgogKiBUaGUgb3BlcmF0aW9uIHdhcyBub3QgYWxsb3dlZCBieSB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgb2JqZWN0LgogKgogKiBUaGlzIGlzIGEgZ2VuZXJpYyBlcnJvciB1c2VkIGZvciBhIHZhcmlldHkgb2YgZGlmZmVyZW50IGVycm9uZW91cwogKiBhY3Rpb25zLiBUaGUgbWVzc2FnZSBzaG91bGQgYmUgZGVzY3JpcHRpdmUuCiAqLwpjbGFzcyBTdGF0ZUVycm9yIGV4dGVuZHMgRXJyb3IgewogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwogIFN0YXRlRXJyb3IodGhpcy5tZXNzYWdlKTsKICBTdHJpbmcgdG9TdHJpbmcoKSA9PiAiQmFkIHN0YXRlOiAkbWVzc2FnZSI7Cn0KCi8qKgogKiBFcnJvciBvY2N1cnJpbmcgd2hlbiBhIGNvbGxlY3Rpb24gaXMgbW9kaWZpZWQgZHVyaW5nIGl0ZXJhdGlvbi4KICoKICogU29tZSBtb2RpZmljYXRpb25zIG1heSBiZSBhbGxvd2VkIGZvciBzb21lIGNvbGxlY3Rpb25zLCBzbyBlYWNoIGNvbGxlY3Rpb24KICogKFtJdGVyYWJsZV0gb3Igc2ltaWxhciBjb2xsZWN0aW9uIG9mIHZhbHVlcykgc2hvdWxkIGRlY2xhcmUgd2hpY2ggb3BlcmF0aW9ucwogKiBhcmUgYWxsb3dlZCBkdXJpbmcgYW4gaXRlcmF0aW9uLgogKi8KY2xhc3MgQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3IgewogIC8qKiBUaGUgb2JqZWN0IHRoYXQgd2FzIG1vZGlmaWVkIGluIGFuIGluY29tcGF0aWJsZSB3YXkuICovCiAgZmluYWwgT2JqZWN0IG1vZGlmaWVkT2JqZWN0OwoKICBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3IoW3RoaXMubW9kaWZpZWRPYmplY3RdKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaWYgKG1vZGlmaWVkT2JqZWN0ID09IG51bGwpIHsKICAgICAgcmV0dXJuICJDb25jdXJyZW50IG1vZGlmaWNhdGlvbiBkdXJpbmcgaXRlcmF0aW9uLiI7CiAgICB9CiAgICByZXR1cm4gIkNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGR1cmluZyBpdGVyYXRpb246ICIKICAgICAgICAiJHtFcnJvci5zYWZlVG9TdHJpbmcobW9kaWZpZWRPYmplY3QpfS4iOwogIH0KfQoKY2xhc3MgT3V0T2ZNZW1vcnlFcnJvciBpbXBsZW1lbnRzIEVycm9yIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgY29uc3QgT3V0T2ZNZW1vcnlFcnJvcigpOwogIFN0cmluZyB0b1N0cmluZygpID0+ICJPdXQgb2YgTWVtb3J5IjsKCiAgU3RhY2tUcmFjZSBnZXQgc3RhY2tUcmFjZSA9PiBudWxsOwp9CgpjbGFzcyBTdGFja092ZXJmbG93RXJyb3IgaW1wbGVtZW50cyBFcnJvciB7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIGNvbnN0IFN0YWNrT3ZlcmZsb3dFcnJvcigpOwogIFN0cmluZyB0b1N0cmluZygpID0+ICJTdGFjayBPdmVyZmxvdyI7CgogIFN0YWNrVHJhY2UgZ2V0IHN0YWNrVHJhY2UgPT4gbnVsbDsKfQoKLyoqCiAqIEVycm9yIHRocm93biB3aGVuIGEgbGF6aWx5IGluaXRpYWxpemVkIHZhcmlhYmxlIGNhbm5vdCBiZSBpbml0aWFsaXplZC4KICoKICogQSBzdGF0aWMvbGlicmFyeSB2YXJpYWJsZSB3aXRoIGFuIGluaXRpYWxpemVyIGV4cHJlc3Npb24gaXMgaW5pdGlhbGl6ZWQKICogdGhlIGZpcnN0IHRpbWUgaXQgaXMgcmVhZC4gSWYgZXZhbHVhdGluZyB0aGUgaW5pdGlhbGl6ZXIgZXhwcmVzc2lvbiBjYXVzZXMKICogYW5vdGhlciByZWFkIG9mIHRoZSB2YXJpYWJsZSwgdGhpcyBlcnJvciBpcyB0aHJvd24uCiAqLwpjbGFzcyBDeWNsaWNJbml0aWFsaXphdGlvbkVycm9yIGV4dGVuZHMgRXJyb3IgewogIGZpbmFsIFN0cmluZyB2YXJpYWJsZU5hbWU7CiAgQHByYWdtYSgidm06ZW50cnktcG9pbnQiKQogIEN5Y2xpY0luaXRpYWxpemF0aW9uRXJyb3IoW3RoaXMudmFyaWFibGVOYW1lXSk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gdmFyaWFibGVOYW1lID09IG51bGwKICAgICAgPyAiUmVhZGluZyBzdGF0aWMgdmFyaWFibGUgZHVyaW5nIGl0cyBpbml0aWFsaXphdGlvbiIKICAgICAgOiAiUmVhZGluZyBzdGF0aWMgdmFyaWFibGUgJyR2YXJpYWJsZU5hbWUnIGR1cmluZyBpdHMgaW5pdGlhbGl6YXRpb24iOwp9CoJOAE5OPAETAQQ6A0YYAz8vMwM/LDsDMkAySAMrM0EnMgMlA0YDRREDQzQfN0U5UTIDMDQjMiM2SjEDODYDLj5AREU3TQQOJAEGNwVNFgYuPSAGHCoGJAQBTj0BOQEmAgEERgQlMRgiKwIBBEMEKgEEQwQhAQQzBCYcFSkCAQREBCQlGBwWNRUpEQEGNQVFTRMGHCAdGxUBBjMFQT4FJwVHSklLBhw4HhoBBk0GJRsmHQEGJQYQPT0EAT1JJgEWHBgfBkU2I0ksOi8EAgEEPQQpPhM+EQFLJgY5BhwaFhQYAQZFBUNFEgY9FhQVTgEGSgVERhUFRxkFQ0USBhxBJRoYFVABBkoXBUNFEgVJQAY5PwEGNwUvRAZKJzBIBgQBBkMFPgVNOgVQOgY8MyFOKBhHBgQBBkMFQxlEBS0+BUYTBUsaBj08TiInHUQGFykbRggSBhMEAQYxBSYGS0oEASkhFx0ZGToIRR49Hj4eNA0XNAYYBAIBBEUcA0whBD9OEz0UAQZRFwVJQAVMBjIxJDIoQQEoFh0BKSEXKhwtBhcnBjIEAgEEPwNAQkYJBCcWHDsBHgIBBD4ENhtOAR4CAQRPBCgGSQU4QwVBGwYtLwFOBkkFOENLHAVPKwVOSxEFSTAFNj8pBjlBRTEBHgIBBDADTxUEGicYHCI6AgEEPANJHgNJQhsERRgmLScfAgEERQNFLwQhGBwuAgEEQwNOUCQEMj4fATYBFiI6BjgyBAIBKhwcKAElAgEsHB4pASUCAQRKA0tONwQwHRwyLDxNAgEVZGFydDpjb3JlL2Vycm9ycy5kYXJ0MG9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9jb3JlL2V4Y2VwdGlvbnMuZGFydJeOLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLy8gRXhjZXB0aW9ucyBhcmUgdGhyb3duIGVpdGhlciBieSB0aGUgVk0gb3IgZnJvbSBEYXJ0IGNvZGUuCgovKioKICogQSBtYXJrZXIgaW50ZXJmYWNlIGltcGxlbWVudGVkIGJ5IGFsbCBjb3JlIGxpYnJhcnkgZXhjZXB0aW9ucy4KICoKICogQW4gW0V4Y2VwdGlvbl0gaXMgaW50ZW5kZWQgdG8gY29udmV5IGluZm9ybWF0aW9uIHRvIHRoZSB1c2VyIGFib3V0IGEgZmFpbHVyZSwKICogc28gdGhhdCB0aGUgZXJyb3IgY2FuIGJlIGFkZHJlc3NlZCBwcm9ncmFtbWF0aWNhbGx5LiBJdCBpcyBpbnRlbmRlZCB0byBiZQogKiBjYXVnaHQsIGFuZCBpdCBzaG91bGQgY29udGFpbiB1c2VmdWwgZGF0YSBmaWVsZHMuCiAqCiAqIENyZWF0aW5nIGluc3RhbmNlcyBvZiBbRXhjZXB0aW9uXSBkaXJlY3RseSB3aXRoIFs6bmV3IEV4Y2VwdGlvbigibWVzc2FnZSIpOl0KICogaXMgZGlzY291cmFnZWQsIGFuZCBvbmx5IGluY2x1ZGVkIGFzIGEgdGVtcG9yYXJ5IG1lYXN1cmUgZHVyaW5nIGRldmVsb3BtZW50LAogKiB1bnRpbCB0aGUgYWN0dWFsIGV4Y2VwdGlvbnMgdXNlZCBieSBhIGxpYnJhcnkgYXJlIGRvbmUuCiAqLwphYnN0cmFjdCBjbGFzcyBFeGNlcHRpb24gewogIGZhY3RvcnkgRXhjZXB0aW9uKFt2YXIgbWVzc2FnZV0pID0+IF9FeGNlcHRpb24obWVzc2FnZSk7Cn0KCi8qKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIFtFeGNlcHRpb25dIHdoaWNoIGNhcnJpZXMgYSBtZXNzYWdlLiAqLwpjbGFzcyBfRXhjZXB0aW9uIGltcGxlbWVudHMgRXhjZXB0aW9uIHsKICBmaW5hbCBtZXNzYWdlOwoKICBfRXhjZXB0aW9uKFt0aGlzLm1lc3NhZ2VdKTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgewogICAgaWYgKG1lc3NhZ2UgPT0gbnVsbCkgcmV0dXJuICJFeGNlcHRpb24iOwogICAgcmV0dXJuICJFeGNlcHRpb246ICRtZXNzYWdlIjsKICB9Cn0KCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gYSBzdHJpbmcgb3Igc29tZSBvdGhlciBkYXRhIGRvZXMgbm90IGhhdmUgYW4gZXhwZWN0ZWQKICogZm9ybWF0IGFuZCBjYW5ub3QgYmUgcGFyc2VkIG9yIHByb2Nlc3NlZC4KICovCmNsYXNzIEZvcm1hdEV4Y2VwdGlvbiBpbXBsZW1lbnRzIEV4Y2VwdGlvbiB7CiAgLyoqCiAgICogQSBtZXNzYWdlIGRlc2NyaWJpbmcgdGhlIGZvcm1hdCBlcnJvci4KICAgKi8KICBmaW5hbCBTdHJpbmcgbWVzc2FnZTsKCiAgLyoqCiAgICogVGhlIGFjdHVhbCBzb3VyY2UgaW5wdXQgd2hpY2ggY2F1c2VkIHRoZSBlcnJvci4KICAgKgogICAqIFRoaXMgaXMgdXN1YWxseSBhIFtTdHJpbmddLCBidXQgY2FuIGJlIG90aGVyIHR5cGVzIHRvby4KICAgKiBJZiBpdCBpcyBhIHN0cmluZywgcGFydHMgb2YgaXQgbWF5IGJlIGluY2x1ZGVkIGluIHRoZSBbdG9TdHJpbmddIG1lc3NhZ2UuCiAgICoKICAgKiBUaGUgc291cmNlIGlzIGBudWxsYCBpZiBvbWl0dGVkIG9yIHVua25vd24uCiAgICovCiAgZmluYWwgc291cmNlOwoKICAvKioKICAgKiBUaGUgb2Zmc2V0IGluIFtzb3VyY2VdIHdoZXJlIHRoZSBlcnJvciB3YXMgZGV0ZWN0ZWQuCiAgICoKICAgKiBBIHplcm8tYmFzZWQgb2Zmc2V0IGludG8gdGhlIHNvdXJjZSB0aGF0IG1hcmtzIHRoZSBmb3JtYXQgZXJyb3IgY2F1c2luZwogICAqIHRoaXMgZXhjZXB0aW9uIHRvIGJlIGNyZWF0ZWQuIElmIGBzb3VyY2VgIGlzIGEgc3RyaW5nLCB0aGlzIHNob3VsZCBiZSBhCiAgICogc3RyaW5nIGluZGV4IGluIHRoZSByYW5nZSBgMCA8PSBvZmZzZXQgPD0gc291cmNlLmxlbmd0aGAuCiAgICoKICAgKiBJZiBpbnB1dCBpcyBhIHN0cmluZywgdGhlIFt0b1N0cmluZ10gbWV0aG9kIG1heSByZXByZXNlbnQgdGhpcyBvZmZzZXQgYXMKICAgKiBhIGxpbmUgYW5kIGNoYXJhY3RlciBwb3NpdGlvbi4gVGhlIG9mZnNldCBzaG91bGQgYmUgaW5zaWRlIHRoZSBzdHJpbmcsCiAgICogb3IgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLgogICAqCiAgICogTWF5IGJlIG9taXR0ZWQuIElmIHByZXNlbnQsIFtzb3VyY2VdIHNob3VsZCBhbHNvIGJlIHByZXNlbnQgaWYgcG9zc2libGUuCiAgICovCiAgZmluYWwgaW50IG9mZnNldDsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBGb3JtYXRFeGNlcHRpb24gd2l0aCBhbiBvcHRpb25hbCBlcnJvciBbbWVzc2FnZV0uCiAgICoKICAgKiBPcHRpb25hbGx5IGFsc28gc3VwcGx5IHRoZSBhY3R1YWwgW3NvdXJjZV0gd2l0aCB0aGUgaW5jb3JyZWN0IGZvcm1hdCwKICAgKiBhbmQgdGhlIFtvZmZzZXRdIGluIHRoZSBmb3JtYXQgd2hlcmUgYSBwcm9ibGVtIHdhcyBkZXRlY3RlZC4KICAgKi8KICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgY29uc3QgRm9ybWF0RXhjZXB0aW9uKFt0aGlzLm1lc3NhZ2UgPSAiIiwgdGhpcy5zb3VyY2UsIHRoaXMub2Zmc2V0XSk7CgogIC8qKgogICAqIFJldHVybnMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgZm9ybWF0IGV4Y2VwdGlvbi4KICAgKgogICAqIFRoZSBkZXNjcmlwdGlvbiBhbHdheXMgY29udGFpbnMgdGhlIFttZXNzYWdlXS4KICAgKgogICAqIElmIFtzb3VyY2VdIGlzIHByZXNlbnQgYW5kIGlzIGEgc3RyaW5nLCB0aGUgZGVzY3JpcHRpb24gd2lsbCBjb250YWluCiAgICogKGF0IGxlYXN0IGEgcGFydCBvZikgdGhlIHNvdXJjZS4KICAgKiBJZiBbb2Zmc2V0XSBpcyBhbHNvIHByb3ZpZGVkLCB0aGUgcGFydCBvZiB0aGUgc291cmNlIGluY2x1ZGVkIHdpbGwKICAgKiBjb250YWluIHRoYXQgb2Zmc2V0LCBhbmQgdGhlIG9mZnNldCB3aWxsIGJlIG1hcmtlZC4KICAgKgogICAqIElmIHRoZSBzb3VyY2UgaXMgYSBzdHJpbmcgYW5kIGl0IGNvbnRhaW5zIGEgbGluZSBicmVhayBiZWZvcmUgb2Zmc2V0LAogICAqIG9ubHkgdGhlIGxpbmUgY29udGFpbmluZyBvZmZzZXQgd2lsbCBiZSBpbmNsdWRlZCwgYW5kIGl0cyBsaW5lIG51bWJlcgogICAqIHdpbGwgYWxzbyBiZSBwYXJ0IG9mIHRoZSBkZXNjcmlwdGlvbi4gTGluZSBhbmQgY2hhcmFjdGVyIG9mZnNldHMgYXJlCiAgICogMS1iYXNlZC4KICAgKi8KICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmcgcmVwb3J0ID0gIkZvcm1hdEV4Y2VwdGlvbiI7CiAgICBpZiAobWVzc2FnZSAhPSBudWxsICYmICIiICE9IG1lc3NhZ2UpIHsKICAgICAgcmVwb3J0ID0gIiRyZXBvcnQ6ICRtZXNzYWdlIjsKICAgIH0KICAgIGludCBvZmZzZXQgPSB0aGlzLm9mZnNldDsKICAgIE9iamVjdCBvYmplY3RTb3VyY2UgPSB0aGlzLnNvdXJjZTsKICAgIGlmIChvYmplY3RTb3VyY2UgaXMgU3RyaW5nKSB7CiAgICAgIFN0cmluZyBzb3VyY2UgPSBvYmplY3RTb3VyY2U7CiAgICAgIGlmIChvZmZzZXQgIT0gbnVsbCAmJiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiBzb3VyY2UubGVuZ3RoKSkgewogICAgICAgIG9mZnNldCA9IG51bGw7CiAgICAgIH0KICAgICAgLy8gU291cmNlIGlzIHN0cmluZyBhbmQgb2Zmc2V0IGlzIG51bGwgb3IgdmFsaWQuCiAgICAgIGlmIChvZmZzZXQgPT0gbnVsbCkgewogICAgICAgIGlmIChzb3VyY2UubGVuZ3RoID4gNzgpIHsKICAgICAgICAgIHNvdXJjZSA9IHNvdXJjZS5zdWJzdHJpbmcoMCwgNzUpICsgIi4uLiI7CiAgICAgICAgfQogICAgICAgIHJldHVybiAiJHJlcG9ydFxuJHNvdXJjZSI7CiAgICAgIH0KICAgICAgaW50IGxpbmVOdW0gPSAxOwogICAgICBpbnQgbGluZVN0YXJ0ID0gMDsKICAgICAgYm9vbCBwcmV2aW91c0NoYXJXYXNDUiA9IGZhbHNlOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IG9mZnNldDsgaSsrKSB7CiAgICAgICAgaW50IGNoYXIgPSBzb3VyY2UuY29kZVVuaXRBdChpKTsKICAgICAgICBpZiAoY2hhciA9PSAweDBhKSB7CiAgICAgICAgICBpZiAobGluZVN0YXJ0ICE9IGkgfHwgIXByZXZpb3VzQ2hhcldhc0NSKSB7CiAgICAgICAgICAgIGxpbmVOdW0rKzsKICAgICAgICAgIH0KICAgICAgICAgIGxpbmVTdGFydCA9IGkgKyAxOwogICAgICAgICAgcHJldmlvdXNDaGFyV2FzQ1IgPSBmYWxzZTsKICAgICAgICB9IGVsc2UgaWYgKGNoYXIgPT0gMHgwZCkgewogICAgICAgICAgbGluZU51bSsrOwogICAgICAgICAgbGluZVN0YXJ0ID0gaSArIDE7CiAgICAgICAgICBwcmV2aW91c0NoYXJXYXNDUiA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChsaW5lTnVtID4gMSkgewogICAgICAgIHJlcG9ydCArPSAiIChhdCBsaW5lICRsaW5lTnVtLCBjaGFyYWN0ZXIgJHtvZmZzZXQgLSBsaW5lU3RhcnQgKyAxfSlcbiI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVwb3J0ICs9ICIgKGF0IGNoYXJhY3RlciAke29mZnNldCArIDF9KVxuIjsKICAgICAgfQogICAgICBpbnQgbGluZUVuZCA9IHNvdXJjZS5sZW5ndGg7CiAgICAgIGZvciAoaW50IGkgPSBvZmZzZXQ7IGkgPCBzb3VyY2UubGVuZ3RoOyBpKyspIHsKICAgICAgICBpbnQgY2hhciA9IHNvdXJjZS5jb2RlVW5pdEF0KGkpOwogICAgICAgIGlmIChjaGFyID09IDB4MGEgfHwgY2hhciA9PSAweDBkKSB7CiAgICAgICAgICBsaW5lRW5kID0gaTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpbnQgbGVuZ3RoID0gbGluZUVuZCAtIGxpbmVTdGFydDsKICAgICAgaW50IHN0YXJ0ID0gbGluZVN0YXJ0OwogICAgICBpbnQgZW5kID0gbGluZUVuZDsKICAgICAgU3RyaW5nIHByZWZpeCA9ICIiOwogICAgICBTdHJpbmcgcG9zdGZpeCA9ICIiOwogICAgICBpZiAobGVuZ3RoID4gNzgpIHsKICAgICAgICAvLyBDYW4ndCBzaG93IGVudGlyZSBsaW5lLiBUcnkgdG8gYW5jaG9yIGF0IHRoZSBuZWFyZXN0IGVuZCwgaWYKICAgICAgICAvLyBvbmUgaXMgd2l0aGluIHJlYWNoLgogICAgICAgIGludCBpbmRleCA9IG9mZnNldCAtIGxpbmVTdGFydDsKICAgICAgICBpZiAoaW5kZXggPCA3NSkgewogICAgICAgICAgZW5kID0gc3RhcnQgKyA3NTsKICAgICAgICAgIHBvc3RmaXggPSAiLi4uIjsKICAgICAgICB9IGVsc2UgaWYgKGVuZCAtIG9mZnNldCA8IDc1KSB7CiAgICAgICAgICBzdGFydCA9IGVuZCAtIDc1OwogICAgICAgICAgcHJlZml4ID0gIi4uLiI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIE5laXRoZXIgZW5kIGlzIG5lYXIsIGp1c3QgcGljayBhbiBhcmVhIGFyb3VuZCB0aGUgb2Zmc2V0LgogICAgICAgICAgc3RhcnQgPSBvZmZzZXQgLSAzNjsKICAgICAgICAgIGVuZCA9IG9mZnNldCArIDM2OwogICAgICAgICAgcHJlZml4ID0gcG9zdGZpeCA9ICIuLi4iOwogICAgICAgIH0KICAgICAgfQogICAgICBTdHJpbmcgc2xpY2UgPSBzb3VyY2Uuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpOwogICAgICBpbnQgbWFya09mZnNldCA9IG9mZnNldCAtIHN0YXJ0ICsgcHJlZml4Lmxlbmd0aDsKICAgICAgcmV0dXJuICIkcmVwb3J0JHByZWZpeCRzbGljZSRwb3N0Zml4XG4keyIgIiAqIG1hcmtPZmZzZXR9XlxuIjsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRoZSBzb3VyY2UgaXMgbm90IGEgc3RyaW5nLgogICAgICBpZiAob2Zmc2V0ICE9IG51bGwpIHsKICAgICAgICByZXBvcnQgKz0gIiAoYXQgb2Zmc2V0ICRvZmZzZXQpIjsKICAgICAgfQogICAgICByZXR1cm4gcmVwb3J0OwogICAgfQogIH0KfQoKLy8gRXhjZXB0aW9uIHRocm93biB3aGVuIGRvaW5nIGludGVnZXIgZGl2aXNpb24gd2l0aCBhIHplcm8gZGl2aXNvci4KY2xhc3MgSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uIGltcGxlbWVudHMgRXhjZXB0aW9uIHsKICBAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCiAgY29uc3QgSW50ZWdlckRpdmlzaW9uQnlaZXJvRXhjZXB0aW9uKCk7CiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gIkludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbiI7Cn0KgLoATk48ARMBPQEEQgNRTTUDUFA7BBs7AgFGKBEBHgEWLSIEAgEETy0ELQYsBhgBBjUFPU8FMQYQAQY6BU1NPwVOTCIFTgYUAQZFBUtCBhxIAQY0BTQFSiZIOQVLS0oOBhYnLCQGHiciJEYXCDccIjQKIwgXGSYpKRw2FwwdJSMVHSQKCBlQDzUIIzUpLBcRCggoHRkaGxlIICgaHBsoHBoRRx8dJAoIMzdFDSUcKggVBgQCAUU8HCo5AgEZZGFydDpjb3JlL2V4Y2VwdGlvbnMuZGFydC1vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9leHBhbmRvLmRhcnSIiC8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBbiBbRXhwYW5kb10gYWxsb3dzIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBvYmplY3RzLgogKgogKiBEb2VzIG5vdCB3b3JrIG9uIG51bWJlcnMsIHN0cmluZ3MsIGJvb2xlYW5zIG9yIG51bGwuCiAqCiAqIEFuIGBFeHBhbmRvYCBkb2VzIG5vdCBob2xkIG9uIHRvIHRoZSBhZGRlZCBwcm9wZXJ0eSB2YWx1ZSBhZnRlciBhbiBvYmplY3QKICogYmVjb21lcyBpbmFjY2Vzc2libGUuCiAqCiAqIFNpbmNlIHlvdSBjYW4gYWx3YXlzIGNyZWF0ZSBhIG5ldyBudW1iZXIgdGhhdCBpcyBpZGVudGljYWwgdG8gYW4gZXhpc3RpbmcKICogbnVtYmVyLCBpdCBtZWFucyB0aGF0IGFuIGV4cGFuZG8gcHJvcGVydHkgb24gYSBudW1iZXIgY291bGQgbmV2ZXIgYmUKICogcmVsZWFzZWQuIFRvIGF2b2lkIHRoaXMsIGV4cGFuZG8gcHJvcGVydGllcyBjYW5ub3QgYmUgYWRkZWQgdG8gbnVtYmVycy4KICogVGhlIHNhbWUgYXJndW1lbnQgYXBwbGllcyB0byBzdHJpbmdzLCBib29sZWFucyBhbmQgbnVsbCwgd2hpY2ggYWxzbyBoYXZlCiAqIGxpdGVyYWxzIHRoYXQgZXZhbHVhdGUgdG8gaWRlbnRpY2FsIHZhbHVlcyB3aGVuIHRoZXkgb2NjdXIgbW9yZSB0aGFuIG9uY2UuCiAqCiAqIFRoZXJlIGlzIG5vIHJlc3RyaWN0aW9uIG9uIG90aGVyIGNsYXNzZXMsIGV2ZW4gZm9yIGNvbXBpbGUgdGltZSBjb25zdGFudAogKiBvYmplY3RzLiBCZSBjYXJlZnVsIGlmIGFkZGluZyBleHBhbmRvIHByb3BlcnRpZXMgdG8gY29tcGlsZSB0aW1lIGNvbnN0YW50cywKICogc2luY2UgdGhleSB3aWxsIHN0YXkgYWxpdmUgZm9yZXZlci4KICovCmNsYXNzIEV4cGFuZG88VD4gewogIC8qKgogICAqIFRoZSBuYW1lIG9mIHRoZSB0aGlzIFtFeHBhbmRvXSBhcyBwYXNzZWQgdG8gdGhlIGNvbnN0cnVjdG9yLiBJZgogICAqIG5vIG5hbWUgd2FzIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IsIHRoZSBuYW1lIGlzIFs6bnVsbDpdLgogICAqLwogIGZpbmFsIFN0cmluZyBuYW1lOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IFtFeHBhbmRvXS4gVGhlIG9wdGlvbmFsIG5hbWUgaXMgb25seSB1c2VkIGZvcgogICAqIGRlYnVnZ2luZyBwdXJwb3NlcyBhbmQgY3JlYXRpbmcgdHdvIGRpZmZlcmVudCBbRXhwYW5kb11zIHdpdGggdGhlCiAgICogc2FtZSBuYW1lIHlpZWxkcyB0d28gW0V4cGFuZG9dcyB0aGF0IHdvcmsgb24gZGlmZmVyZW50IHByb3BlcnRpZXMKICAgKiBvZiB0aGUgb2JqZWN0cyB0aGV5IGFyZSB1c2VkIG9uLgogICAqLwogIGV4dGVybmFsIEV4cGFuZG8oW1N0cmluZyBuYW1lXSk7CgogIC8qKgogICAqIEV4cGFuZG8gdG9TdHJpbmcgbWV0aG9kIG92ZXJyaWRlLgogICAqLwogIFN0cmluZyB0b1N0cmluZygpID0+ICJFeHBhbmRvOiRuYW1lIjsKCiAgLyoqCiAgICogR2V0cyB0aGUgdmFsdWUgb2YgdGhpcyBbRXhwYW5kb10ncyBwcm9wZXJ0eSBvbiB0aGUgZ2l2ZW4KICAgKiBvYmplY3QuIElmIHRoZSBvYmplY3QgaGFzbid0IGJlZW4gZXhwYW5kZWQsIHRoZSBtZXRob2QgcmV0dXJucwogICAqIFs6bnVsbDpdLgogICAqCiAgICogVGhlIG9iamVjdCBtdXN0IG5vdCBiZSBhIG51bWJlciwgYSBzdHJpbmcsIGEgYm9vbGVhbiBvciBudWxsLgogICAqLwogIGV4dGVybmFsIFQgb3BlcmF0b3IgW10oT2JqZWN0IG9iamVjdCk7CgogIC8qKgogICAqIFNldHMgdGhlIHZhbHVlIG9mIHRoaXMgW0V4cGFuZG9dJ3MgcHJvcGVydHkgb24gdGhlIGdpdmVuCiAgICogb2JqZWN0LiBQcm9wZXJ0aWVzIGNhbiBlZmZlY3RpdmVseSBiZSByZW1vdmVkIGFnYWluIGJ5IHNldHRpbmcKICAgKiB0aGVpciB2YWx1ZSB0byBudWxsLgogICAqCiAgICogVGhlIG9iamVjdCBtdXN0IG5vdCBiZSBhIG51bWJlciwgYSBzdHJpbmcsIGEgYm9vbGVhbiBvciBudWxsLgogICAqLwogIGV4dGVybmFsIHZvaWQgb3BlcmF0b3IgW109KE9iamVjdCBvYmplY3QsIFQgdmFsdWUpOwp9CkAATk48ARMBBDkDOANNGQNNSEtMTgNMTycEEwZFQgYVAQZBR0cmBiMBBicGKAEGPkQPBUMGKQEGPkQaBUMGNgIBFmRhcnQ6Y29yZS9leHBhbmRvLmRhcnQyb3JnLWRhcnRsYW5nLXNkazovLy9ydW50aW1lL2xpYi9leHBhbmRvX3BhdGNoLmRhcnSPZi8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCmNsYXNzIEV4cGFuZG88VD4gewogIEBwYXRjaAogIEV4cGFuZG8oW1N0cmluZyBuYW1lXSkKICAgICAgOiBuYW1lID0gbmFtZSwKICAgICAgICBfZGF0YSA9IG5ldyBMaXN0KF9taW5TaXplKSwKICAgICAgICBfdXNlZCA9IDA7CgogIHN0YXRpYyBjb25zdCBfbWluU2l6ZSA9IDg7CiAgc3RhdGljIGZpbmFsIF9kZWxldGVkRW50cnkgPSBuZXcgX1dlYWtQcm9wZXJ0eShudWxsLCBudWxsKTsKCiAgQHBhdGNoCiAgVCBvcGVyYXRvciBbXShPYmplY3Qgb2JqZWN0KSB7CiAgICBfY2hlY2tUeXBlKG9iamVjdCk7CgogICAgdmFyIG1hc2sgPSBfc2l6ZSAtIDE7CiAgICB2YXIgaWR4ID0gb2JqZWN0Ll9pZGVudGl0eUhhc2hDb2RlICYgbWFzazsKICAgIHZhciB3cCA9IF9kYXRhW2lkeF07CgogICAgd2hpbGUgKHdwICE9IG51bGwpIHsKICAgICAgaWYgKGlkZW50aWNhbCh3cC5rZXksIG9iamVjdCkpIHsKICAgICAgICByZXR1cm4gd3AudmFsdWU7CiAgICAgIH0gZWxzZSBpZiAod3Aua2V5ID09IG51bGwpIHsKICAgICAgICAvLyBUaGlzIGVudHJ5IGhhcyBiZWVuIGNsZWFyZWQgYnkgdGhlIEdDLgogICAgICAgIF9kYXRhW2lkeF0gPSBfZGVsZXRlZEVudHJ5OwogICAgICB9CiAgICAgIGlkeCA9IChpZHggKyAxKSAmIG1hc2s7CiAgICAgIHdwID0gX2RhdGFbaWR4XTsKICAgIH0KCiAgICByZXR1cm4gbnVsbDsKICB9CgogIEBwYXRjaAogIHZvaWQgb3BlcmF0b3IgW109KE9iamVjdCBvYmplY3QsIFQgdmFsdWUpIHsKICAgIF9jaGVja1R5cGUob2JqZWN0KTsKCiAgICB2YXIgbWFzayA9IF9zaXplIC0gMTsKICAgIHZhciBpZHggPSBvYmplY3QuX2lkZW50aXR5SGFzaENvZGUgJiBtYXNrOwogICAgdmFyIGVtcHR5X2lkeCA9IC0xOwogICAgdmFyIHdwID0gX2RhdGFbaWR4XTsKCiAgICB3aGlsZSAod3AgIT0gbnVsbCkgewogICAgICBpZiAoaWRlbnRpY2FsKHdwLmtleSwgb2JqZWN0KSkgewogICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICAvLyBVcGRhdGUgdGhlIGFzc29jaWF0ZWQgdmFsdWUuCiAgICAgICAgICB3cC52YWx1ZSA9IHZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAvLyBNYXJrIHRoZSBlbnRyeSBhcyBkZWxldGVkLgogICAgICAgICAgX2RhdGFbaWR4XSA9IF9kZWxldGVkRW50cnk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfSBlbHNlIGlmICgoZW1wdHlfaWR4IDwgMCkgJiYgaWRlbnRpY2FsKHdwLCBfZGVsZXRlZEVudHJ5KSkgewogICAgICAgIGVtcHR5X2lkeCA9IGlkeDsgLy8gSW5zZXJ0IGF0IHRoaXMgbG9jYXRpb24gaWYgbm90IGZvdW5kLgogICAgICB9IGVsc2UgaWYgKHdwLmtleSA9PSBudWxsKSB7CiAgICAgICAgLy8gVGhpcyBlbnRyeSBoYXMgYmVlbiBjbGVhcmVkIGJ5IHRoZSBHQy4KICAgICAgICBfZGF0YVtpZHhdID0gX2RlbGV0ZWRFbnRyeTsKICAgICAgICBpZiAoZW1wdHlfaWR4IDwgMCkgewogICAgICAgICAgZW1wdHlfaWR4ID0gaWR4OyAvLyBJbnNlcnQgYXQgdGhpcyBsb2NhdGlvbiBpZiBub3QgZm91bmQuCiAgICAgICAgfQogICAgICB9CiAgICAgIGlkeCA9IChpZHggKyAxKSAmIG1hc2s7CiAgICAgIHdwID0gX2RhdGFbaWR4XTsKICAgIH0KCiAgICBpZiAodmFsdWUgPT0gbnVsbCkgewogICAgICAvLyBOb3QgZW50ZXJpbmcgYSBudWxsIHZhbHVlLiBXZSBqdXN0IG5lZWRlZCB0byBtYWtlIHN1cmUgdG8gY2xlYXIgYW4KICAgICAgLy8gZXhpc3RpbmcgdmFsdWUgaWYgaXQgZXhpc3RlZC4KICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChlbXB0eV9pZHggPj0gMCkgewogICAgICAvLyBXZSB3aWxsIGJlIHJldXNpbmcgdGhlIGVtcHR5IHNsb3QgYmVsb3cuCiAgICAgIF91c2VkLS07CiAgICAgIGlkeCA9IGVtcHR5X2lkeDsKICAgIH0KCiAgICBpZiAoX3VzZWQgPCBfbGltaXQpIHsKICAgICAgX2RhdGFbaWR4XSA9IG5ldyBfV2Vha1Byb3BlcnR5KG9iamVjdCwgdmFsdWUpOwogICAgICBfdXNlZCsrOwogICAgICByZXR1cm47CiAgICB9CgogICAgLy8gR3Jvdy9yZWFsbG9jYXRlIGlmIHRvbyBtYW55IHNsb3RzIGhhdmUgYmVlbiB1c2VkLgogICAgX3JlaGFzaCgpOwogICAgdGhpc1tvYmplY3RdID0gdmFsdWU7IC8vIFJlY3Vyc2l2ZWx5IGFkZCB0aGUgdmFsdWUuCiAgfQoKICBfcmVoYXNoKCkgewogICAgLy8gRGV0ZXJtaW5lIHRoZSBwb3B1bGF0aW9uIGNvdW50IG9mIHRoZSBtYXAgdG8gYWxsb2NhdGUgYW4gYXBwcm9wcmlhdGVseQogICAgLy8gc2l6ZWQgbWFwIGJlbG93LgogICAgdmFyIGNvdW50ID0gMDsKICAgIHZhciBvbGRfZGF0YSA9IF9kYXRhOwogICAgdmFyIGxlbiA9IG9sZF9kYXRhLmxlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKICAgICAgdmFyIGVudHJ5ID0gb2xkX2RhdGFbaV07CiAgICAgIGlmICgoZW50cnkgIT0gbnVsbCkgJiYgKGVudHJ5LmtleSAhPSBudWxsKSkgewogICAgICAgIC8vIE9ubHkgY291bnQgbm9uLWNsZWFyZWQgZW50cmllcy4KICAgICAgICBjb3VudCsrOwogICAgICB9CiAgICB9CgogICAgdmFyIG5ld19zaXplID0gX3NpemU7CiAgICBpZiAoY291bnQgPD0gKG5ld19zaXplID4+IDIpKSB7CiAgICAgIG5ld19zaXplID0gbmV3X3NpemUgPj4gMTsKICAgIH0gZWxzZSBpZiAoY291bnQgPiAobmV3X3NpemUgPj4gMSkpIHsKICAgICAgbmV3X3NpemUgPSBuZXdfc2l6ZSA8PCAxOwogICAgfQogICAgbmV3X3NpemUgPSAobmV3X3NpemUgPCBfbWluU2l6ZSkgPyBfbWluU2l6ZSA6IG5ld19zaXplOwoKICAgIC8vIFJlc2V0IHRoZSBtYXBwaW5ncyB0byBlbXB0eSBzbyB0aGF0IHdlIGNhbiBqdXN0IGFkZCB0aGUgZXhpc3RpbmcKICAgIC8vIHZhbGlkIGVudHJpZXMuCiAgICBfZGF0YSA9IG5ldyBMaXN0KG5ld19zaXplKTsKICAgIF91c2VkID0gMDsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9sZF9kYXRhLmxlbmd0aDsgaSsrKSB7CiAgICAgIHZhciBlbnRyeSA9IG9sZF9kYXRhW2ldOwogICAgICBpZiAoZW50cnkgIT0gbnVsbCkgewogICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBlbnRyeS5rZXkgaXMgbm90IGNsZWFyZWQgYmV0d2VlbiBjaGVja2luZyBmb3IgaXQgYW5kCiAgICAgICAgLy8gaW5zZXJ0aW5nIGl0IGludG8gdGhlIG5ldyB0YWJsZS4KICAgICAgICB2YXIgdmFsID0gZW50cnkudmFsdWU7CiAgICAgICAgdmFyIGtleSA9IGVudHJ5LmtleTsKICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHsKICAgICAgICAgIHRoaXNba2V5XSA9IHZhbDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIHN0YXRpYyBfY2hlY2tUeXBlKG9iamVjdCkgewogICAgaWYgKChvYmplY3QgPT0gbnVsbCkgfHwKICAgICAgICAob2JqZWN0IGlzIGJvb2wpIHx8CiAgICAgICAgKG9iamVjdCBpcyBudW0pIHx8CiAgICAgICAgKG9iamVjdCBpcyBTdHJpbmcpKSB7CiAgICAgIHRocm93IG5ldyBBcmd1bWVudEVycm9yLnZhbHVlKG9iamVjdCwKICAgICAgICAgICJFeHBhbmRvcyBhcmUgbm90IGFsbG93ZWQgb24gc3RyaW5ncywgbnVtYmVycywgYm9vbGVhbnMgb3IgbnVsbCIpOwogICAgfQogIH0KCiAgZ2V0IF9zaXplID0+IF9kYXRhLmxlbmd0aDsKICBnZXQgX2xpbWl0ID0+ICgzICogKF9zaXplIH4vIDQpKTsKCiAgTGlzdCBfZGF0YTsKICBpbnQgX3VzZWQ7IC8vIE51bWJlciBvZiB1c2VkIChhY3RpdmUgYW5kIGRlbGV0ZWQpIHNsb3RzLgp9CoCZAE5OPAEeAQcTCRkVJBMBHT4BCSEYARovGQEZJxkjMiQIHhcGAREEAQkuGAEaLxgZARknHSocESgmChBEQiMyJB1ECggeFwYBGUwnDgYBGjIPFwYBGjUPDgYBOQ84BAEOThgTGh8kHzQrEQgGARokICogBjwBSBYgDwEwHxtQLB8dGxsKCAYEAR4cHBseLE0GBAEdJAEOOwIBImRhcnQ6Y29yZS1wYXRjaC9leHBhbmRvX3BhdGNoLmRhcnQub3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvZnVuY3Rpb24uZGFydImhLy8gQ29weXJpZ2h0IChjKSAyMDExLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIFRoZSBiYXNlIGNsYXNzIGZvciBhbGwgZnVuY3Rpb24gdHlwZXMuCiAqCiAqIEEgZnVuY3Rpb24gdmFsdWUsIG9yIGFuIGluc3RhbmNlIG9mIGEgY2xhc3Mgd2l0aCBhICJjYWxsIiBtZXRob2QsIGlzIGEKICogc3VidHlwZSBvZiBhIGZ1bmN0aW9uIHR5cGUsIGFuZCBhcyBzdWNoLCBhIHN1YnR5cGUgb2YgW0Z1bmN0aW9uXS4KICovCmFic3RyYWN0IGNsYXNzIEZ1bmN0aW9uIHsKICAvKioKICAgKiBEeW5hbWljYWxseSBjYWxsIFtmdW5jdGlvbl0gd2l0aCB0aGUgc3BlY2lmaWVkIGFyZ3VtZW50cy4KICAgKgogICAqIEFjdHMgdGhlIHNhbWUgYXMgY2FsbGluZyBmdW5jdGlvbiB3aXRoIHBvc2l0aW9uYWwgYXJndW1lbnRzCiAgICogY29ycmVzcG9uZGluZyB0byB0aGUgZWxlbWVudHMgb2YgW3Bvc2l0aW9uYWxBcmd1bWVudHNdIGFuZAogICAqIG5hbWVkIGFyZ3VtZW50cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBlbGVtZW50cyBvZiBbbmFtZWRBcmd1bWVudHNdLgogICAqCiAgICogVGhpcyBpbmNsdWRlcyBnaXZpbmcgdGhlIHNhbWUgZXJyb3JzIGlmIFtmdW5jdGlvbl0gaXNuJ3QgY2FsbGFibGUgb3IKICAgKiBpZiBpdCBleHBlY3RzIGRpZmZlcmVudCBwYXJhbWV0ZXJzLgogICAqCiAgICogRXhhbXBsZToKICAgKiBgYGAKICAgKiBGdW5jdGlvbi5hcHBseShmb28sIFsxLDIsM10sIHsjZjogNCwgI2c6IDV9KTsKICAgKiBgYGAKICAgKgogICAqIGdpdmVzIGV4YWN0bHkgdGhlIHNhbWUgcmVzdWx0IGFzCiAgICogYGBgCiAgICogZm9vKDEsIDIsIDMsIGY6IDQsIGc6IDUpLgogICAqIGBgYAogICAqCiAgICogSWYgW3Bvc2l0aW9uYWxBcmd1bWVudHNdIGlzIG51bGwsIGl0J3MgY29uc2lkZXJlZCBhbiBlbXB0eSBsaXN0LgogICAqIElmIFtuYW1lZEFyZ3VtZW50c10gaXMgb21pdHRlZCBvciBudWxsLCBpdCBpcyBjb25zaWRlcmVkIGFuIGVtcHR5IG1hcC4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgYXBwbHkoRnVuY3Rpb24gZnVuY3Rpb24sIExpc3QgcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgW01hcDxTeW1ib2wsIGR5bmFtaWM+IG5hbWVkQXJndW1lbnRzXSk7CgogIC8qKgogICAqIFJldHVybnMgYSBoYXNoIGNvZGUgdmFsdWUgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggYG9wZXJhdG9yPT1gLgogICAqLwogIGludCBnZXQgaGFzaENvZGU7CgogIC8qKgogICAqIFRlc3Qgd2hldGhlciBhbm90aGVyIG9iamVjdCBpcyBlcXVhbCB0byB0aGlzIGZ1bmN0aW9uLgogICAqCiAgICogU3lzdGVtLWNyZWF0ZWQgZnVuY3Rpb24gb2JqZWN0cyBhcmUgb25seSBlcXVhbCB0byBvdGhlciBmdW5jdGlvbnMuCiAgICoKICAgKiBUd28gZnVuY3Rpb24gb2JqZWN0cyBhcmUga25vd24gdG8gcmVwcmVzZW50IHRoZSBzYW1lIGZ1bmN0aW9uIGlmCiAgICoKICAgKiAtIEl0IGlzIHRoZSBzYW1lIG9iamVjdC4gU3RhdGljIGFuZCB0b3AtbGV2ZWwgZnVuY3Rpb25zIGFyZSBjb21waWxlIHRpbWUKICAgKiAgIGNvbnN0YW50cyB3aGVuIHVzZWQgYXMgdmFsdWVzLCBzbyByZWZlcnJpbmcgdG8gdGhlIHNhbWUgZnVuY3Rpb24gdHdpY2UKICAgKiAgIGFsd2F5cyBnaXZlIHRoZSBzYW1lIG9iamVjdCwKICAgKiAtIG9yIGlmIHRoZXkgcmVmZXIgdG8gdGhlIHNhbWUgbWVtYmVyIG1ldGhvZCBleHRyYWN0ZWQgZnJvbSB0aGUgc2FtZSBvYmplY3QuCiAgICogICBFeHRyYWN0aW5nIGEgbWVtYmVyIG1ldGhvZCBhcyBhIGZ1bmN0aW9uIHZhbHVlIHR3aWNlIGdpdmVzIGVxdWFsLCBidXQKICAgKiAgIG5vdCBuZWNlc3NhcmlseSBpZGVudGljYWwsIGZ1bmN0aW9uIHZhbHVlcy4KICAgKgogICAqIEZ1bmN0aW9uIGV4cHJlc3Npb25zIG5ldmVyIGdpdmUgcmlzZSB0byBlcXVhbCBmdW5jdGlvbiBvYmplY3RzLiBFYWNoIHRpbWUKICAgKiBhIGZ1bmN0aW9uIGV4cHJlc3Npb24gaXMgZXZhbHVhdGVkLCBpdCBjcmVhdGVzIGEgbmV3IGNsb3N1cmUgdmFsdWUgdGhhdAogICAqIGlzIG5vdCBrbm93biB0byBiZSBlcXVhbCB0byBvdGhlciBjbG9zdXJlcyBjcmVhdGVkIGJ5IHRoZSBzYW1lIGV4cHJlc3Npb24uCiAgICoKICAgKiBDbGFzc2VzIGltcGxlbWVudGluZyBgRnVuY3Rpb25gIGJ5IGhhdmluZyBhIGBjYWxsYCBtZXRob2Qgc2hvdWxkIGhhdmUgdGhlaXIKICAgKiBvd24gYG9wZXJhdG9yPT1gIGFuZCBgaGFzaENvZGVgIGRlcGVuZGluZyBvbiB0aGUgb2JqZWN0LgogICAqLwogIGJvb2wgb3BlcmF0b3IgPT0oT2JqZWN0IG90aGVyKTsKfQpFAE5OPAETAQQqA0pFBBoGPwVBQEgFSikFDgkzCQUmCR8JBUZMBkUuAQZFBhQBBjwFSAVGBU5OJFJNMwVPTVAFUT4GIgIBF2RhcnQ6Y29yZS9mdW5jdGlvbi5kYXJ0M29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvZnVuY3Rpb25fcGF0Y2guZGFydIU5Ly8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgpAcGF0Y2gKY2xhc3MgRnVuY3Rpb24gewogIC8vIFRPRE8ocmVnaXMpOiBQYXNzIHR5cGUgYXJndW1lbnRzIHRvIGdlbmVyaWMgZnVuY3Rpb25zLiBXYWl0IGZvciBBUEkgc3BlYy4KICBzdGF0aWMgX2FwcGx5KExpc3QgYXJndW1lbnRzLCBMaXN0IG5hbWVzKSBuYXRpdmUgIkZ1bmN0aW9uX2FwcGx5IjsKCiAgQHBhdGNoCiAgc3RhdGljIGFwcGx5KEZ1bmN0aW9uIGZ1bmN0aW9uLCBMaXN0IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgIFtNYXA8U3ltYm9sLCBkeW5hbWljPiBuYW1lZEFyZ3VtZW50c10pIHsKICAgIGludCBudW1Qb3NpdGlvbmFsQXJndW1lbnRzID0gMSArIC8vIEZ1bmN0aW9uIGlzIGZpcnN0IGltcGxpY2l0IGFyZ3VtZW50LgogICAgICAgIChwb3NpdGlvbmFsQXJndW1lbnRzICE9IG51bGwgPyBwb3NpdGlvbmFsQXJndW1lbnRzLmxlbmd0aCA6IDApOwogICAgaW50IG51bU5hbWVkQXJndW1lbnRzID0gbmFtZWRBcmd1bWVudHMgIT0gbnVsbCA/IG5hbWVkQXJndW1lbnRzLmxlbmd0aCA6IDA7CiAgICBpbnQgbnVtQXJndW1lbnRzID0gbnVtUG9zaXRpb25hbEFyZ3VtZW50cyArIG51bU5hbWVkQXJndW1lbnRzOwogICAgTGlzdCBhcmd1bWVudHMgPSBuZXcgTGlzdChudW1Bcmd1bWVudHMpOwogICAgYXJndW1lbnRzWzBdID0gZnVuY3Rpb247CiAgICBhcmd1bWVudHMuc2V0UmFuZ2UoMSwgbnVtUG9zaXRpb25hbEFyZ3VtZW50cywgcG9zaXRpb25hbEFyZ3VtZW50cyk7CiAgICBMaXN0IG5hbWVzID0gbmV3IExpc3QobnVtTmFtZWRBcmd1bWVudHMpOwogICAgaW50IGFyZ3VtZW50SW5kZXggPSBudW1Qb3NpdGlvbmFsQXJndW1lbnRzOwogICAgaW50IG5hbWVJbmRleCA9IDA7CiAgICBpZiAobnVtTmFtZWRBcmd1bWVudHMgPiAwKSB7CiAgICAgIG5hbWVkQXJndW1lbnRzLmZvckVhY2goKG5hbWUsIHZhbHVlKSB7CiAgICAgICAgYXJndW1lbnRzW2FyZ3VtZW50SW5kZXgrK10gPSB2YWx1ZTsKICAgICAgICBuYW1lc1tuYW1lSW5kZXgrK10gPSBpbnRlcm5hbC5TeW1ib2wuZ2V0TmFtZShuYW1lKTsKICAgICAgfSk7CiAgICB9CiAgICByZXR1cm4gX2FwcGx5KGFyZ3VtZW50cywgbmFtZXMpOwogIH0KfQojAE5OPAEeAQcRT0UBCTwvTUhQQy0dSC4wFyEtLDwKBiUEAgEjZGFydDpjb3JlLXBhdGNoL2Z1bmN0aW9uX3BhdGNoLmRhcnQpb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvaW50LmRhcnSuKy8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBbiBpbnRlZ2VyIG51bWJlci4KICoKICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgYGludGAgaXMgNjQtYml0IHR3bydzIGNvbXBsZW1lbnQgaW50ZWdlcnMKICogd2l0aCBvcGVyYXRpb25zIHRoYXQgd3JhcCB0byB0aGF0IHJhbmdlIG9uIG92ZXJmbG93LgogKgogKiAqKk5vdGU6KiogV2hlbiBjb21waWxpbmcgdG8gSmF2YVNjcmlwdCwgaW50ZWdlcnMgYXJlIHJlc3RyaWN0ZWQgdG8gdmFsdWVzCiAqIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGV4YWN0bHkgYnkgZG91YmxlLXByZWNpc2lvbiBmbG9hdGluZyBwb2ludCB2YWx1ZXMuCiAqIFRoZSBhdmFpbGFibGUgaW50ZWdlciB2YWx1ZXMgaW5jbHVkZSBhbGwgaW50ZWdlcnMgYmV0d2VlbiAtMl41MyBhbmQgMl41MywKICogYW5kIHNvbWUgaW50ZWdlcnMgd2l0aCBsYXJnZXIgbWFnbml0dWRlLiBUaGF0IGluY2x1ZGVzIHNvbWUgaW50ZWdlcnMgbGFyZ2VyCiAqIHRoYW4gMl42My4KICogVGhlIGJlaGF2aW9yIG9mIHRoZSBvcGVyYXRvcnMgYW5kIG1ldGhvZHMgaW4gdGhlIFtpbnRdCiAqIGNsYXNzIHRoZXJlZm9yZSBzb21ldGltZXMgZGlmZmVycyBiZXR3ZWVuIHRoZSBEYXJ0IFZNIGFuZCBEYXJ0IGNvZGUKICogY29tcGlsZWQgdG8gSmF2YVNjcmlwdC4gRm9yIGV4YW1wbGUsIHRoZSBiaXR3aXNlIG9wZXJhdG9ycyB0cnVuY2F0ZSB0aGVpcgogKiBvcGVyYW5kcyB0byAzMi1iaXQgaW50ZWdlcnMgd2hlbiBjb21waWxlZCB0byBKYXZhU2NyaXB0LgogKgogKiBDbGFzc2VzIGNhbm5vdCBleHRlbmQsIGltcGxlbWVudCwgb3IgbWl4IGluIGBpbnRgLgogKi8KYWJzdHJhY3QgY2xhc3MgaW50IGV4dGVuZHMgbnVtIHsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBnaXZlbiBlbnZpcm9ubWVudCBkZWNsYXJhdGlvbiBbbmFtZV0uCiAgICoKICAgKiBUaGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIHdvdWxkIGJlIHJldHVybmVkIGJ5OgogICAqIGBgYAogICAqIGludC50cnlQYXJzZShjb25zdCBTdHJpbmcuZnJvbUVudmlyb25tZW50KG5hbWUsIGRlZmF1bHRWYWx1ZTogIiIpKQogICAqICAgICA/PyBkZWZhdWx0VmFsdWUKICAgKiBgYGAKICAgKiBFeGFtcGxlOgogICAqIGBgYAogICAqIGNvbnN0IGludC5mcm9tRW52aXJvbm1lbnQoImRlZmF1bHRQb3J0IiwgZGVmYXVsdFZhbHVlOiA4MCkKICAgKiBgYGAKICAgKi8KICAvLyBUaGUgLmZyb21FbnZpcm9ubWVudCgpIGNvbnN0cnVjdG9ycyBhcmUgc3BlY2lhbCBpbiB0aGF0IHdlIGRvIG5vdCB3YW50CiAgLy8gdXNlcnMgdG8gY2FsbCB0aGVtIHVzaW5nICJuZXciLiBXZSBwcm9oaWJpdCB0aGF0IGJ5IGdpdmluZyB0aGVtIGJvZGllcwogIC8vIHRoYXQgdGhyb3csIGV2ZW4gdGhvdWdoIGNvbnN0IGNvbnN0cnVjdG9ycyBhcmUgbm90IGFsbG93ZWQgdG8gaGF2ZSBib2RpZXMuCiAgLy8gRGlzYWJsZSB0aG9zZSBzdGF0aWMgZXJyb3JzLgogIC8vaWdub3JlOiBjb25zdF9jb25zdHJ1Y3Rvcl93aXRoX2JvZHkKICAvL2lnbm9yZTogY29uc3RfZmFjdG9yeQogIGV4dGVybmFsIGNvbnN0IGZhY3RvcnkgaW50LmZyb21FbnZpcm9ubWVudChTdHJpbmcgbmFtZSwge2ludCBkZWZhdWx0VmFsdWV9KTsKCiAgLyoqCiAgICogQml0LXdpc2UgYW5kIG9wZXJhdG9yLgogICAqCiAgICogVHJlYXRpbmcgYm90aCBgdGhpc2AgYW5kIFtvdGhlcl0gYXMgc3VmZmljaWVudGx5IGxhcmdlIHR3bydzIGNvbXBvbmVudAogICAqIGludGVnZXJzLCB0aGUgcmVzdWx0IGlzIGEgbnVtYmVyIHdpdGggb25seSB0aGUgYml0cyBzZXQgdGhhdCBhcmUgc2V0IGluCiAgICogYm90aCBgdGhpc2AgYW5kIFtvdGhlcl0KICAgKgogICAqIE9mIGJvdGggb3BlcmFuZHMgYXJlIG5lZ2F0aXZlLCB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLCBvdGhlcndpc2UKICAgKiB0aGUgcmVzdWx0IGlzIG5vbi1uZWdhdGl2ZS4KICAgKi8KICBpbnQgb3BlcmF0b3IgJihpbnQgb3RoZXIpOwoKICAvKioKICAgKiBCaXQtd2lzZSBvciBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdIGFzIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQKICAgKiBpbnRlZ2VycywgdGhlIHJlc3VsdCBpcyBhIG51bWJlciB3aXRoIHRoZSBiaXRzIHNldCB0aGF0IGFyZSBzZXQgaW4gZWl0aGVyCiAgICogb2YgYHRoaXNgIGFuZCBbb3RoZXJdCiAgICoKICAgKiBJZiBib3RoIG9wZXJhbmRzIGFyZSBub24tbmVnYXRpdmUsIHRoZSByZXN1bHQgaXMgbm9uLW5lZ2F0aXZlLAogICAqIG90aGVyd2lzZSB0aGUgcmVzdWx0IGlzIG5lZ2F0aXZlLgogICAqLwogIGludCBvcGVyYXRvciB8KGludCBvdGhlcik7CgogIC8qKgogICAqIEJpdC13aXNlIGV4Y2x1c2l2ZS1vciBvcGVyYXRvci4KICAgKgogICAqIFRyZWF0aW5nIGJvdGggYHRoaXNgIGFuZCBbb3RoZXJdIGFzIHN1ZmZpY2llbnRseSBsYXJnZSB0d28ncyBjb21wb25lbnQKICAgKiBpbnRlZ2VycywgdGhlIHJlc3VsdCBpcyBhIG51bWJlciB3aXRoIHRoZSBiaXRzIHNldCB0aGF0IGFyZSBzZXQgaW4gb25lLAogICAqIGJ1dCBub3QgYm90aCwgb2YgYHRoaXNgIGFuZCBbb3RoZXJdCiAgICoKICAgKiBJZiB0aGUgb3BlcmFuZHMgaGF2ZSB0aGUgc2FtZSBzaWduLCB0aGUgcmVzdWx0IGlzIG5vbi1uZWdhdGl2ZSwKICAgKiBvdGhlcndpc2UgdGhlIHJlc3VsdCBpcyBuZWdhdGl2ZS4KICAgKi8KICBpbnQgb3BlcmF0b3IgXihpbnQgb3RoZXIpOwoKICAvKioKICAgKiBUaGUgYml0LXdpc2UgbmVnYXRlIG9wZXJhdG9yLgogICAqCiAgICogVHJlYXRpbmcgYHRoaXNgIGFzIGEgc3VmZmljaWVudGx5IGxhcmdlIHR3bydzIGNvbXBvbmVudCBpbnRlZ2VyLAogICAqIHRoZSByZXN1bHQgaXMgYSBudW1iZXIgd2l0aCB0aGUgb3Bwb3NpdGUgYml0cyBzZXQuCiAgICoKICAgKiBUaGlzIG1hcHMgYW55IGludGVnZXIgYHhgIHRvIGAteCAtIDFgLgogICAqLwogIGludCBvcGVyYXRvciB+KCk7CgogIC8qKgogICAqIFNoaWZ0IHRoZSBiaXRzIG9mIHRoaXMgaW50ZWdlciB0byB0aGUgbGVmdCBieSBbc2hpZnRBbW91bnRdLgogICAqCiAgICogU2hpZnRpbmcgdG8gdGhlIGxlZnQgbWFrZXMgdGhlIG51bWJlciBsYXJnZXIsIGVmZmVjdGl2ZWx5IG11bHRpcGx5aW5nCiAgICogdGhlIG51bWJlciBieSBgcG93KDIsIHNoaWZ0SW5kZXgpYC4KICAgKgogICAqIFRoZXJlIGlzIG5vIGxpbWl0IG9uIHRoZSBzaXplIG9mIHRoZSByZXN1bHQuIEl0IG1heSBiZSByZWxldmFudCB0bwogICAqIGxpbWl0IGludGVybWVkaWF0ZSB2YWx1ZXMgYnkgdXNpbmcgdGhlICJhbmQiIG9wZXJhdG9yIHdpdGggYSBzdWl0YWJsZQogICAqIG1hc2suCiAgICoKICAgKiBJdCBpcyBhbiBlcnJvciBpZiBbc2hpZnRBbW91bnRdIGlzIG5lZ2F0aXZlLgogICAqLwogIGludCBvcGVyYXRvciA8PChpbnQgc2hpZnRBbW91bnQpOwoKICAvKioKICAgKiBTaGlmdCB0aGUgYml0cyBvZiB0aGlzIGludGVnZXIgdG8gdGhlIHJpZ2h0IGJ5IFtzaGlmdEFtb3VudF0uCiAgICoKICAgKiBTaGlmdGluZyB0byB0aGUgcmlnaHQgbWFrZXMgdGhlIG51bWJlciBzbWFsbGVyIGFuZCBkcm9wcyB0aGUgbGVhc3QKICAgKiBzaWduaWZpY2FudCBiaXRzLCBlZmZlY3RpdmVseSBkb2luZyBhbiBpbnRlZ2VyIGRpdmlzaW9uIGJ5CiAgICpgcG93KDIsIHNoaWZ0SW5kZXgpYC4KICAgKgogICAqIEl0IGlzIGFuIGVycm9yIGlmIFtzaGlmdEFtb3VudF0gaXMgbmVnYXRpdmUuCiAgICovCiAgaW50IG9wZXJhdG9yID4+KGludCBzaGlmdEFtb3VudCk7CgogIC8qKgogICAqIFJldHVybnMgdGhpcyBpbnRlZ2VyIHRvIHRoZSBwb3dlciBvZiBbZXhwb25lbnRdIG1vZHVsbyBbbW9kdWx1c10uCiAgICoKICAgKiBUaGUgW2V4cG9uZW50XSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgW21vZHVsdXNdIG11c3QgYmUKICAgKiBwb3NpdGl2ZS4KICAgKi8KICBpbnQgbW9kUG93KGludCBleHBvbmVudCwgaW50IG1vZHVsdXMpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBtb2R1bGFyIG11bHRpcGxpY2F0aXZlIGludmVyc2Ugb2YgdGhpcyBpbnRlZ2VyCiAgICogbW9kdWxvIFttb2R1bHVzXS4KICAgKgogICAqIFRoZSBbbW9kdWx1c10gbXVzdCBiZSBwb3NpdGl2ZS4KICAgKgogICAqIEl0IGlzIGFuIGVycm9yIGlmIG5vIG1vZHVsYXIgaW52ZXJzZSBleGlzdHMuCiAgICovCiAgaW50IG1vZEludmVyc2UoaW50IG1vZHVsdXMpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBvZiB0aGlzIGludGVnZXIgYW5kIFtvdGhlcl0uCiAgICoKICAgKiBJZiBlaXRoZXIgbnVtYmVyIGlzIG5vbi16ZXJvLCB0aGUgcmVzdWx0IGlzIHRoZSBudW1lcmljYWxseSBncmVhdGVzdAogICAqIGludGVnZXIgZGl2aWRpbmcgYm90aCBgdGhpc2AgYW5kIGBvdGhlcmAuCiAgICoKICAgKiBUaGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIG9yZGVyLAogICAqIHNvIGB4LmdjZCh5KWAgaXMgIGFsd2F5cyB0aGUgc2FtZSBhcyBgeS5nY2QoeClgLgogICAqCiAgICogRm9yIGFueSBpbnRlZ2VyIGB4YCwgYHguZ2NkKHgpYCBpcyBgeC5hYnMoKWAuCiAgICoKICAgKiBJZiBib3RoIGB0aGlzYCBhbmQgYG90aGVyYCBpcyB6ZXJvLCB0aGUgcmVzdWx0IGlzIGFsc28gemVyby4KICAgKi8KICBpbnQgZ2NkKGludCBvdGhlcik7CgogIC8qKiBSZXR1cm5zIHRydWUgaWYgYW5kIG9ubHkgaWYgdGhpcyBpbnRlZ2VyIGlzIGV2ZW4uICovCiAgYm9vbCBnZXQgaXNFdmVuOwoKICAvKiogUmV0dXJucyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoaXMgaW50ZWdlciBpcyBvZGQuICovCiAgYm9vbCBnZXQgaXNPZGQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG1pbmltdW0gbnVtYmVyIG9mIGJpdHMgcmVxdWlyZWQgdG8gc3RvcmUgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogVGhlIG51bWJlciBvZiBiaXRzIGV4Y2x1ZGVzIHRoZSBzaWduIGJpdCwgd2hpY2ggZ2l2ZXMgdGhlIG5hdHVyYWwgbGVuZ3RoCiAgICogZm9yIG5vbi1uZWdhdGl2ZSAodW5zaWduZWQpIHZhbHVlcy4gIE5lZ2F0aXZlIHZhbHVlcyBhcmUgY29tcGxlbWVudGVkIHRvCiAgICogcmV0dXJuIHRoZSBiaXQgcG9zaXRpb24gb2YgdGhlIGZpcnN0IGJpdCB0aGF0IGRpZmZlcnMgZnJvbSB0aGUgc2lnbiBiaXQuCiAgICoKICAgKiBUbyBmaW5kIHRoZSBudW1iZXIgb2YgYml0cyBuZWVkZWQgdG8gc3RvcmUgdGhlIHZhbHVlIGFzIGEgc2lnbmVkIHZhbHVlLAogICAqIGFkZCBvbmUsIGkuZS4gdXNlIGB4LmJpdExlbmd0aCArIDFgLgogICAqIGBgYAogICAqIHguYml0TGVuZ3RoID09ICgteC0xKS5iaXRMZW5ndGgKICAgKgogICAqIDMuYml0TGVuZ3RoID09IDI7ICAgICAvLyAwMDAwMDAxMQogICAqIDIuYml0TGVuZ3RoID09IDI7ICAgICAvLyAwMDAwMDAxMAogICAqIDEuYml0TGVuZ3RoID09IDE7ICAgICAvLyAwMDAwMDAwMQogICAqIDAuYml0TGVuZ3RoID09IDA7ICAgICAvLyAwMDAwMDAwMAogICAqICgtMSkuYml0TGVuZ3RoID09IDA7ICAvLyAxMTExMTExMQogICAqICgtMikuYml0TGVuZ3RoID09IDE7ICAvLyAxMTExMTExMAogICAqICgtMykuYml0TGVuZ3RoID09IDI7ICAvLyAxMTExMTEwMQogICAqICgtNCkuYml0TGVuZ3RoID09IDI7ICAvLyAxMTExMTEwMAogICAqIGBgYAogICAqLwogIGludCBnZXQgYml0TGVuZ3RoOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZWFzdCBzaWduaWZpY2FudCBbd2lkdGhdIGJpdHMgb2YgdGhpcyBpbnRlZ2VyIGFzIGEKICAgKiBub24tbmVnYXRpdmUgbnVtYmVyIChpLmUuIHVuc2lnbmVkIHJlcHJlc2VudGF0aW9uKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBoYXMKICAgKiB6ZXJvcyBpbiBhbGwgYml0IHBvc2l0aW9ucyBoaWdoZXIgdGhhbiBbd2lkdGhdLgogICAqIGBgYAogICAqICgtMSkudG9VbnNpZ25lZCg1KSA9PSAzMSAgIC8vIDExMTExMTExICAtPiAgMDAwMTExMTEKICAgKiBgYGAKICAgKiBUaGlzIG9wZXJhdGlvbiBjYW4gYmUgdXNlZCB0byBzaW11bGF0ZSBhcml0aG1ldGljIGZyb20gbG93IGxldmVsIGxhbmd1YWdlcy4KICAgKiBGb3IgZXhhbXBsZSwgdG8gaW5jcmVtZW50IGFuIDggYml0IHF1YW50aXR5OgogICAqIGBgYAogICAqIHEgPSAocSArIDEpLnRvVW5zaWduZWQoOCk7CiAgICogYGBgCiAgICogYHFgIHdpbGwgY291bnQgZnJvbSBgMGAgdXAgdG8gYDI1NWAgYW5kIHRoZW4gd3JhcCBhcm91bmQgdG8gYDBgLgogICAqCiAgICogSWYgdGhlIGlucHV0IGZpdHMgaW4gW3dpZHRoXSBiaXRzIHdpdGhvdXQgdHJ1bmNhdGlvbiwgdGhlIHJlc3VsdCBpcyB0aGUKICAgKiBzYW1lIGFzIHRoZSBpbnB1dC4gIFRoZSBtaW5pbXVtIHdpZHRoIG5lZWRlZCB0byBhdm9pZCB0cnVuY2F0aW9uIG9mIGB4YCBpcwogICAqIGdpdmVuIGJ5IGB4LmJpdExlbmd0aGAsIGkuZS4KICAgKiBgYGAKICAgKiB4ID09IHgudG9VbnNpZ25lZCh4LmJpdExlbmd0aCk7CiAgICogYGBgCiAgICovCiAgaW50IHRvVW5zaWduZWQoaW50IHdpZHRoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgW3dpZHRoXSBiaXRzIG9mIHRoaXMgaW50ZWdlciwgZXh0ZW5kaW5nIHRoZQogICAqIGhpZ2hlc3QgcmV0YWluZWQgYml0IHRvIHRoZSBzaWduLiAgVGhpcyBpcyB0aGUgc2FtZSBhcyB0cnVuY2F0aW5nIHRoZSB2YWx1ZQogICAqIHRvIGZpdCBpbiBbd2lkdGhdIGJpdHMgdXNpbmcgYW4gc2lnbmVkIDItcyBjb21wbGVtZW50IHJlcHJlc2VudGF0aW9uLiAgVGhlCiAgICogcmV0dXJuZWQgdmFsdWUgaGFzIHRoZSBzYW1lIGJpdCB2YWx1ZSBpbiBhbGwgcG9zaXRpb25zIGhpZ2hlciB0aGFuIFt3aWR0aF0uCiAgICoKICAgKiBgYGAKICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVi0tc2lnbiBiaXQtVgogICAqIDE2LnRvU2lnbmVkKDUpID09IC0xNiAgIC8vICAwMDAxMDAwMCAtPiAxMTExMDAwMAogICAqIDIzOS50b1NpZ25lZCg1KSA9PSAxNSAgIC8vICAxMTEwMTExMSAtPiAwMDAwMTExMQogICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICBeCiAgICogYGBgCiAgICogVGhpcyBvcGVyYXRpb24gY2FuIGJlIHVzZWQgdG8gc2ltdWxhdGUgYXJpdGhtZXRpYyBmcm9tIGxvdyBsZXZlbCBsYW5ndWFnZXMuCiAgICogRm9yIGV4YW1wbGUsIHRvIGluY3JlbWVudCBhbiA4IGJpdCBzaWduZWQgcXVhbnRpdHk6CiAgICogYGBgCiAgICogcSA9IChxICsgMSkudG9TaWduZWQoOCk7CiAgICogYGBgCiAgICogYHFgIHdpbGwgY291bnQgZnJvbSBgMGAgdXAgdG8gYDEyN2AsIHdyYXAgdG8gYC0xMjhgIGFuZCBjb3VudCBiYWNrIHVwIHRvCiAgICogYDEyN2AuCiAgICoKICAgKiBJZiB0aGUgaW5wdXQgdmFsdWUgZml0cyBpbiBbd2lkdGhdIGJpdHMgd2l0aG91dCB0cnVuY2F0aW9uLCB0aGUgcmVzdWx0IGlzCiAgICogdGhlIHNhbWUgYXMgdGhlIGlucHV0LiAgVGhlIG1pbmltdW0gd2lkdGggbmVlZGVkIHRvIGF2b2lkIHRydW5jYXRpb24gb2YgYHhgCiAgICogaXMgYHguYml0TGVuZ3RoICsgMWAsIGkuZS4KICAgKiBgYGAKICAgKiB4ID09IHgudG9TaWduZWQoeC5iaXRMZW5ndGggKyAxKTsKICAgKiBgYGAKICAgKi8KICBpbnQgdG9TaWduZWQoaW50IHdpZHRoKTsKCiAgLyoqCiAgICogUmV0dXJuIHRoZSBuZWdhdGl2ZSB2YWx1ZSBvZiB0aGlzIGludGVnZXIuCiAgICoKICAgKiBUaGUgcmVzdWx0IG9mIG5lZ2F0aW5nIGFuIGludGVnZXIgYWx3YXlzIGhhcyB0aGUgb3Bwb3NpdGUgc2lnbiwgZXhjZXB0CiAgICogZm9yIHplcm8sIHdoaWNoIGlzIGl0cyBvd24gbmVnYXRpb24uCiAgICovCiAgaW50IG9wZXJhdG9yIC0oKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogRm9yIGFueSBpbnRlZ2VyIGB4YCwgdGhlIHJlc3VsdCBpcyB0aGUgc2FtZSBhcyBgeCA8IDAgPyAteCA6IHhgLgogICAqLwogIGludCBhYnMoKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgc2lnbiBvZiB0aGlzIGludGVnZXIuCiAgICoKICAgKiBSZXR1cm5zIDAgZm9yIHplcm8sIC0xIGZvciB2YWx1ZXMgbGVzcyB0aGFuIHplcm8gYW5kCiAgICogKzEgZm9yIHZhbHVlcyBncmVhdGVyIHRoYW4gemVyby4KICAgKi8KICBpbnQgZ2V0IHNpZ247CgogIC8qKiBSZXR1cm5zIGB0aGlzYC4gKi8KICBpbnQgcm91bmQoKTsKCiAgLyoqIFJldHVybnMgYHRoaXNgLiAqLwogIGludCBmbG9vcigpOwoKICAvKiogUmV0dXJucyBgdGhpc2AuICovCiAgaW50IGNlaWwoKTsKCiAgLyoqIFJldHVybnMgYHRoaXNgLiAqLwogIGludCB0cnVuY2F0ZSgpOwoKICAvKiogUmV0dXJucyBgdGhpcy50b0RvdWJsZSgpYC4gKi8KICBkb3VibGUgcm91bmRUb0RvdWJsZSgpOwoKICAvKiogUmV0dXJucyBgdGhpcy50b0RvdWJsZSgpYC4gKi8KICBkb3VibGUgZmxvb3JUb0RvdWJsZSgpOwoKICAvKiogUmV0dXJucyBgdGhpcy50b0RvdWJsZSgpYC4gKi8KICBkb3VibGUgY2VpbFRvRG91YmxlKCk7CgogIC8qKiBSZXR1cm5zIGB0aGlzLnRvRG91YmxlKClgLiAqLwogIGRvdWJsZSB0cnVuY2F0ZVRvRG91YmxlKCk7CgogIC8qKgogICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBpbnRlZ2VyLgogICAqCiAgICogVGhlIHJldHVybmVkIHN0cmluZyBpcyBwYXJzYWJsZSBieSBbcGFyc2VdLgogICAqIEZvciBhbnkgYGludGAgYGlgLCBpdCBpcyBndWFyYW50ZWVkIHRoYXQKICAgKiBgaSA9PSBpbnQucGFyc2UoaS50b1N0cmluZygpKWAuCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCk7CgogIC8qKgogICAqIENvbnZlcnRzIFt0aGlzXSB0byBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBpbiB0aGUgZ2l2ZW4gW3JhZGl4XS4KICAgKgogICAqIEluIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24sIGxvd2VyLWNhc2UgbGV0dGVycyBhcmUgdXNlZCBmb3IgZGlnaXRzIGFib3ZlCiAgICogJzknLCB3aXRoICdhJyBiZWluZyAxMCBhbiAneicgYmVpbmcgMzUuCiAgICoKICAgKiBUaGUgW3JhZGl4XSBhcmd1bWVudCBtdXN0IGJlIGFuIGludGVnZXIgaW4gdGhlIHJhbmdlIDIgdG8gMzYuCiAgICovCiAgU3RyaW5nIHRvUmFkaXhTdHJpbmcoaW50IHJhZGl4KTsKCiAgLyoqCiAgICogUGFyc2UgW3NvdXJjZV0gYXMgYSwgcG9zc2libHkgc2lnbmVkLCBpbnRlZ2VyIGxpdGVyYWwgYW5kIHJldHVybiBpdHMgdmFsdWUuCiAgICoKICAgKiBUaGUgW3NvdXJjZV0gbXVzdCBiZSBhIG5vbi1lbXB0eSBzZXF1ZW5jZSBvZiBiYXNlLVtyYWRpeF0gZGlnaXRzLAogICAqIG9wdGlvbmFsbHkgcHJlZml4ZWQgd2l0aCBhIG1pbnVzIG9yIHBsdXMgc2lnbiAoJy0nIG9yICcrJykuCiAgICogSXQgbXVzdCBub3QgYmUgYG51bGxgLgogICAqCiAgICogVGhlIFtyYWRpeF0gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgMi4uMzYuIFRoZSBkaWdpdHMgdXNlZCBhcmUKICAgKiBmaXJzdCB0aGUgZGVjaW1hbCBkaWdpdHMgMC4uOSwgYW5kIHRoZW4gdGhlIGxldHRlcnMgJ2EnLi4neicgd2l0aAogICAqIHZhbHVlcyAxMCB0aHJvdWdoIDM1LiBBbHNvIGFjY2VwdHMgdXBwZXItY2FzZSBsZXR0ZXJzIHdpdGggdGhlIHNhbWUKICAgKiB2YWx1ZXMgYXMgdGhlIGxvd2VyLWNhc2Ugb25lcy4KICAgKgogICAqIElmIG5vIFtyYWRpeF0gaXMgZ2l2ZW4gdGhlbiBpdCBkZWZhdWx0cyB0byAxMC4gSW4gdGhpcyBjYXNlLCB0aGUgW3NvdXJjZV0KICAgKiBkaWdpdHMgbWF5IGFsc28gc3RhcnQgd2l0aCBgMHhgLCBpbiB3aGljaCBjYXNlIHRoZSBudW1iZXIgaXMgaW50ZXJwcmV0ZWQKICAgKiBhcyBhIGhleGFkZWNpbWFsIGludGVnZXIgbGl0ZXJhbCwKICAgKiBXaGVuIGBpbnRgIGlzIGltcGxlbWVudGVkIGJ5IDY0LWJpdCBzaWduZWQgaW50ZWdlcnMsCiAgICogaGV4YWRlY2ltYWwgaW50ZWdlciBsaXRlcmFscyBtYXkgcmVwcmVzZW50IHZhbHVlcyBsYXJnZXIgdGhhbgogICAqIDI8c3VwPjYzPC9zdXA+LCBpbiB3aGljaCBjYXNlIHRoZSB2YWx1ZSBpcyBwYXJzZWQgYXMgaWYgaXQgaXMgYW4KICAgKiAqdW5zaWduZWQqIG51bWJlciwgYW5kIHRoZSByZXN1bHRpbmcgdmFsdWUgaXMgdGhlIGNvcnJlc3BvbmRpbmcKICAgKiBzaWduZWQgaW50ZWdlciB2YWx1ZS4KICAgKgogICAqIEZvciBhbnkgaW50IGBuYCBhbmQgdmFsaWQgcmFkaXggYHJgLCBpdCBpcyBndWFyYW50ZWVkIHRoYXQKICAgKiBgbiA9PSBpbnQucGFyc2Uobi50b1JhZGl4U3RyaW5nKHIpLCByYWRpeDogcilgLgogICAqCiAgICogSWYgdGhlIFtzb3VyY2VdIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgaW50ZWdlciBsaXRlcmFsLAogICAqIG9wdGlvbmFsbHkgcHJlZml4ZWQgYnkgYSBzaWduLCBhIFtGb3JtYXRFeGNlcHRpb25dIGlzIHRocm93bgogICAqICh1bmxlc3MgdGhlIGRlcHJlY2F0ZWQgW29uRXJyb3JdIHBhcmFtZXRlciBpcyB1c2VkLCBzZWUgYmVsb3cpLgogICAqCiAgICogSW5zdGVhZCBvZiB0aHJvd2luZyBhbmQgaW1tZWRpYXRlbHkgY2F0Y2hpbmcgdGhlIFtGb3JtYXRFeGNlcHRpb25dLAogICAqIGluc3RlYWQgdXNlIFt0cnlQYXJzZV0gdG8gaGFuZGxlIGEgcGFyc2luZyBlcnJvci4KICAgKiBFeGFtcGxlOgogICAqIGBgYGRhcnQKICAgKiB2YXIgdmFsdWUgPSBpbnQudHJ5UGFyc2UodGV4dCk7CiAgICogaWYgKHZhbHVlID09IG51bGwpIC4uLiBoYW5kbGUgdGhlIHByb2JsZW0KICAgKiBgYGAKICAgKgogICAqIFRoZSBbb25FcnJvcl0gcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZC4KICAgKiBJbnN0ZWFkIG9mIGBpbnQucGFyc2Uoc3RyaW5nLCBvbkVycm9yOiAoc3RyaW5nKSA9PiAuLi4pYCwKICAgKiB5b3Ugc2hvdWxkIHVzZSBgaW50LnRyeVBhcnNlKHN0cmluZykgPz8gKC4uLilgLgogICAqCiAgICogV2hlbiB0aGUgc291cmNlIHN0cmluZyBpcyBub3QgdmFsaWQgYW5kIFtvbkVycm9yXSBpcyBwcm92aWRlZCwKICAgKiB3aGVuZXZlciBhIFtGb3JtYXRFeGNlcHRpb25dIHdvdWxkIGJlIHRocm93biwKICAgKiBbb25FcnJvcl0gaXMgaW5zdGVhZCBjYWxsZWQgd2l0aCBbc291cmNlXSBhcyBhcmd1bWVudCwKICAgKiBhbmQgdGhlIHJlc3VsdCBvZiB0aGF0IGNhbGwgaXMgcmV0dXJuZWQgYnkgW3BhcnNlXS4KICAgKi8KICBleHRlcm5hbCBzdGF0aWMgaW50IHBhcnNlKFN0cmluZyBzb3VyY2UsCiAgICAgIHtpbnQgcmFkaXgsIEBkZXByZWNhdGVkIGludCBvbkVycm9yKFN0cmluZyBzb3VyY2UpfSk7CgogIC8qKgogICAqIFBhcnNlIFtzb3VyY2VdIGFzIGEsIHBvc3NpYmx5IHNpZ25lZCwgaW50ZWdlciBsaXRlcmFsIGFuZCByZXR1cm4gaXRzIHZhbHVlLgogICAqCiAgICogTGlrZSBbcGFyc2VdIGV4Y2VwdCB0aGF0IHRoaXMgZnVuY3Rpb24gcmV0dXJucyBgbnVsbGAgd2hlcmUgYQogICAqIHNpbWlsYXIgY2FsbCB0byBbcGFyc2VdIHdvdWxkIHRocm93IGEgW0Zvcm1hdEV4Y2VwdGlvbl0sCiAgICogYW5kIHRoZSBbc291cmNlXSBtdXN0IHN0aWxsIG5vdCBiZSBgbnVsbGAuCiAgICovCiAgZXh0ZXJuYWwgc3RhdGljIGludCB0cnlQYXJzZShTdHJpbmcgc291cmNlLCB7aW50IHJhZGl4fSk7Cn0KgWUATk48ARMBBBYDSzgDTU5NTw46R008AzYEIQZMBTUJSBkJDglACQZMTFAiKBpPAQYcBUxNHQVGIQYdAQYbBUxPGwVEJwYdAQYlBUxNKQVFJwYdAQYjBUY4BSwGFAEGQgVLKQVISwsFMgYkAQZDBUhAGgUyBiQBBkcFPw8GKQEGQBcFJQUyBh8BBkYFSi8FPjYFMwVCBhYBOxMBOhIBBkgFTk5OBU0qCSUFJycnJycnJycJBhUBBkVRNQk6CVEyCSAJRgVNUCIJJQkGHQEGT1FQUQUJMjY2MglROQkeCU4MBU9RIAknCQYbAQYwBUwqBhQBBjEFRgYNAQYnBTomBhABGQ8BGQ8BGQ4BGRIBJBoBJBoBJBkBJB0BBjYFMS4lBhUBBkYFUC0FQwYjAQZRBUdBHAVBR0kkBU9OJzpDRkUbBUA1BUZCRQVJNw4NJS8JBUA/NQVEMzw5Bis8AQZRBUM+MAY8AgESZGFydDpjb3JlL2ludC5kYXJ0M29yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvaW50ZWdlcnNfcGF0Y2guZGFydKwjLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCi8vIHBhcnQgb2YgImNvcmVfcGF0Y2guZGFydCI7CgovLy8gVk0gaW1wbGVtZW50YXRpb24gb2YgaW50LgpAcGF0Y2gKY2xhc3MgaW50IHsKICBAcGF0Y2gKICBjb25zdCBmYWN0b3J5IGludC5mcm9tRW52aXJvbm1lbnQoU3RyaW5nIG5hbWUsIHtpbnQgZGVmYXVsdFZhbHVlfSkKICAgICAgbmF0aXZlICJJbnRlZ2VyX2Zyb21FbnZpcm9ubWVudCI7CgogIGludCBfYml0QW5kRnJvbVNtaShfU21pIG90aGVyKTsKICBpbnQgX2JpdEFuZEZyb21JbnRlZ2VyKGludCBvdGhlcik7CiAgaW50IF9iaXRPckZyb21JbnRlZ2VyKGludCBvdGhlcik7CiAgaW50IF9iaXRYb3JGcm9tSW50ZWdlcihpbnQgb3RoZXIpOwogIGludCBfc2hyRnJvbUludGVnZXIoaW50IG90aGVyKTsKICBpbnQgX3NobEZyb21JbnRlZ2VyKGludCBvdGhlcik7CgogIHN0YXRpYyBpbnQgX3RyeVBhcnNlU21pKFN0cmluZyBzdHIsIGludCBmaXJzdCwgaW50IGxhc3QpIHsKICAgIGFzc2VydChmaXJzdCA8PSBsYXN0KTsKICAgIHZhciBpeCA9IGZpcnN0OwogICAgdmFyIHNpZ24gPSAxOwogICAgdmFyIGMgPSBzdHIuY29kZVVuaXRBdChpeCk7CiAgICAvLyBDaGVjayBmb3IgbGVhZGluZyAnKycgb3IgJy0nLgogICAgaWYgKChjID09IDB4MmIpIHx8IChjID09IDB4MmQpKSB7CiAgICAgIGl4Kys7CiAgICAgIHNpZ24gPSAweDJjIC0gYzsgLy8gLTEgZm9yICctJywgKzEgZm9yICcrJy4KICAgICAgaWYgKGl4ID4gbGFzdCkgewogICAgICAgIHJldHVybiBudWxsOyAvLyBFbXB0eS4KICAgICAgfQogICAgfQogICAgdmFyIHNtaUxpbWl0ID0gaXM2NEJpdCA/IDE4IDogOTsKICAgIGlmICgobGFzdCAtIGl4KSA+PSBzbWlMaW1pdCkgewogICAgICByZXR1cm4gbnVsbDsgLy8gTWF5IG5vdCBmaXQgaW50byBhIFNtaS4KICAgIH0KICAgIHZhciByZXN1bHQgPSAwOwogICAgZm9yIChpbnQgaSA9IGl4OyBpIDw9IGxhc3Q7IGkrKykgewogICAgICB2YXIgYyA9IDB4MzAgXiBzdHIuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKDkgPCBjKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgcmVzdWx0ID0gMTAgKiByZXN1bHQgKyBjOwogICAgfQogICAgcmV0dXJuIHNpZ24gKiByZXN1bHQ7CiAgfQoKICBAcGF0Y2gKICBzdGF0aWMgaW50IHBhcnNlKFN0cmluZyBzb3VyY2UsIHtpbnQgcmFkaXgsIGludCBvbkVycm9yKFN0cmluZyBzb3VyY2UpfSkgewogICAgaWYgKHNvdXJjZSA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiVGhlIHNvdXJjZSBtdXN0IG5vdCBiZSBudWxsIik7CiAgICBpZiAoc291cmNlLmlzRW1wdHkpIHsKICAgICAgcmV0dXJuIF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIDAsIHJhZGl4LCBudWxsKTsKICAgIH0KICAgIGlmIChyYWRpeCA9PSBudWxsIHx8IHJhZGl4ID09IDEwKSB7CiAgICAgIC8vIFRyeSBwYXJzaW5nIGltbWVkaWF0ZWx5LCB3aXRob3V0IHRyaW1taW5nIHdoaXRlc3BhY2UuCiAgICAgIGludCByZXN1bHQgPSBfdHJ5UGFyc2VTbWkoc291cmNlLCAwLCBzb3VyY2UubGVuZ3RoIC0gMSk7CiAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkgcmV0dXJuIHJlc3VsdDsKICAgIH0gZWxzZSBpZiAocmFkaXggPCAyIHx8IHJhZGl4ID4gMzYpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlJhZGl4ICRyYWRpeCBub3QgaW4gcmFuZ2UgMi4uMzYiKTsKICAgIH0KICAgIC8vIFNwbGl0IGhlcmUgc28gaW1wcm92ZSBvZGRzIG9mIHBhcnNlIGJlaW5nIGlubGluZWQgYW5kIHRoZSBjaGVja3Mgb21pdHRlZC4KICAgIHJldHVybiBfcGFyc2Uoc291cmNlLCByYWRpeCwgb25FcnJvcik7CiAgfQoKICBzdGF0aWMgaW50IF9wYXJzZShfU3RyaW5nQmFzZSBzb3VyY2UsIGludCByYWRpeCwgb25FcnJvcikgewogICAgaW50IGVuZCA9IHNvdXJjZS5fbGFzdE5vbldoaXRlc3BhY2UoKSArIDE7CiAgICBpZiAoZW5kID09IDApIHsKICAgICAgcmV0dXJuIF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIHNvdXJjZS5sZW5ndGgsIHJhZGl4LCBudWxsKTsKICAgIH0KICAgIGludCBzdGFydCA9IHNvdXJjZS5fZmlyc3ROb25XaGl0ZXNwYWNlKCk7CgogICAgaW50IGZpcnN0ID0gc291cmNlLmNvZGVVbml0QXQoc3RhcnQpOwogICAgaW50IHNpZ24gPSAxOwogICAgaWYgKGZpcnN0ID09IDB4MmIgLyogKyAqLyB8fCBmaXJzdCA9PSAweDJkIC8qIC0gKi8pIHsKICAgICAgc2lnbiA9IDB4MmMgLSBmaXJzdDsgLy8gLTEgaWYgJy0nLCArMSBpZiAnKycuCiAgICAgIHN0YXJ0Kys7CiAgICAgIGlmIChzdGFydCA9PSBlbmQpIHsKICAgICAgICByZXR1cm4gX3Rocm93Rm9ybWF0RXhjZXB0aW9uKG9uRXJyb3IsIHNvdXJjZSwgZW5kLCByYWRpeCwgbnVsbCk7CiAgICAgIH0KICAgICAgZmlyc3QgPSBzb3VyY2UuY29kZVVuaXRBdChzdGFydCk7CiAgICB9CiAgICBpZiAocmFkaXggPT0gbnVsbCkgewogICAgICAvLyBjaGVjayBmb3IgMHggcHJlZml4LgogICAgICBpbnQgaW5kZXggPSBzdGFydDsKICAgICAgaWYgKGZpcnN0ID09IDB4MzAgLyogMCAqLykgewogICAgICAgIGluZGV4Kys7CiAgICAgICAgaWYgKGluZGV4ID09IGVuZCkgcmV0dXJuIDA7CiAgICAgICAgZmlyc3QgPSBzb3VyY2UuY29kZVVuaXRBdChpbmRleCk7CiAgICAgICAgaWYgKChmaXJzdCB8IDB4MjApID09IDB4NzggLyogeCAqLykgewogICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgIGlmIChpbmRleCA9PSBlbmQpIHsKICAgICAgICAgICAgcmV0dXJuIF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIGluZGV4LCBudWxsLCBudWxsKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBfcGFyc2VSYWRpeChzb3VyY2UsIDE2LCBpbmRleCwgZW5kLCBzaWduLCBzaWduID4gMCwgb25FcnJvcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJhZGl4ID0gMTA7CiAgICB9CiAgICByZXR1cm4gX3BhcnNlUmFkaXgoc291cmNlLCByYWRpeCwgc3RhcnQsIGVuZCwgc2lnbiwgZmFsc2UsIG9uRXJyb3IpOwogIH0KCiAgQHBhdGNoCiAgc3RhdGljIGludCB0cnlQYXJzZShTdHJpbmcgc291cmNlLCB7aW50IHJhZGl4fSkgewogICAgaWYgKHNvdXJjZSA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiVGhlIHNvdXJjZSBtdXN0IG5vdCBiZSBudWxsIik7CiAgICBpZiAoc291cmNlLmlzRW1wdHkpIHJldHVybiBudWxsOwogICAgaWYgKHJhZGl4ID09IG51bGwgfHwgcmFkaXggPT0gMTApIHsKICAgICAgLy8gVHJ5IHBhcnNpbmcgaW1tZWRpYXRlbHksIHdpdGhvdXQgdHJpbW1pbmcgd2hpdGVzcGFjZS4KICAgICAgaW50IHJlc3VsdCA9IF90cnlQYXJzZVNtaShzb3VyY2UsIDAsIHNvdXJjZS5sZW5ndGggLSAxKTsKICAgICAgaWYgKHJlc3VsdCAhPSBudWxsKSByZXR1cm4gcmVzdWx0OwogICAgfSBlbHNlIGlmIChyYWRpeCA8IDIgfHwgcmFkaXggPiAzNikgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiUmFkaXggJHJhZGl4IG5vdCBpbiByYW5nZSAyLi4zNiIpOwogICAgfQogICAgdHJ5IHsKICAgICAgcmV0dXJuIF9wYXJzZShzb3VyY2UsIHJhZGl4LCBfa051bGwpOwogICAgfSBjYXRjaCAoZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9CgogIHN0YXRpYyBOdWxsIF9rTnVsbChfKSA9PiBudWxsOwoKICBzdGF0aWMgaW50IF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIGluZGV4LCByYWRpeCwgbWVzc2FnZSkgewogICAgaWYgKG9uRXJyb3IgIT0gbnVsbCkgcmV0dXJuIG9uRXJyb3Ioc291cmNlKTsKICAgIGlmIChtZXNzYWdlICE9IG51bGwpIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbihtZXNzYWdlLCBzb3VyY2UsIGluZGV4KTsKICAgIH0KICAgIGlmIChyYWRpeCA9PSBudWxsKSB7CiAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oIkludmFsaWQgbnVtYmVyIiwgc291cmNlLCBpbmRleCk7CiAgICB9CiAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCJJbnZhbGlkIHJhZGl4LSRyYWRpeCBudW1iZXIiLCBzb3VyY2UsIGluZGV4KTsKICB9CgogIHN0YXRpYyBpbnQgX3BhcnNlUmFkaXgoU3RyaW5nIHNvdXJjZSwgaW50IHJhZGl4LCBpbnQgc3RhcnQsIGludCBlbmQsIGludCBzaWduLAogICAgICBib29sIGFsbG93VTY0LCBvbkVycm9yKSB7CiAgICBpbnQgdGFibGVJbmRleCA9IChyYWRpeCAtIDIpICogNCArIChpczY0Qml0ID8gMiA6IDApOwogICAgaW50IGJsb2NrU2l6ZSA9IF9QQVJTRV9MSU1JVFNbdGFibGVJbmRleF07CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAobGVuZ3RoIDw9IGJsb2NrU2l6ZSkgewogICAgICBfU21pIHNtaSA9IF9wYXJzZUJsb2NrKHNvdXJjZSwgcmFkaXgsIHN0YXJ0LCBlbmQpOwogICAgICBpZiAoc21pID09IG51bGwpIHsKICAgICAgICByZXR1cm4gX3Rocm93Rm9ybWF0RXhjZXB0aW9uKG9uRXJyb3IsIHNvdXJjZSwgc3RhcnQsIHJhZGl4LCBudWxsKTsKICAgICAgfQogICAgICByZXR1cm4gc2lnbiAqIHNtaTsKICAgIH0KCiAgICAvLyBPZnRlbiBjaGVhcGVyIHRoYW46IGludCBzbWFsbEJsb2NrU2l6ZSA9IGxlbmd0aCAlIGJsb2NrU2l6ZTsKICAgIC8vIGJlY2F1c2UgZGlnaXQgY291bnQgZ2VuZXJhbGx5IHRlbmRzIHRvd2FyZHMgc21hbGxlci4gcmF0aGVyCiAgICAvLyB0aGFuIGxhcmdlci4KICAgIGludCBzbWFsbEJsb2NrU2l6ZSA9IGxlbmd0aDsKICAgIHdoaWxlIChzbWFsbEJsb2NrU2l6ZSA+PSBibG9ja1NpemUpIHNtYWxsQmxvY2tTaXplIC09IGJsb2NrU2l6ZTsKICAgIGludCByZXN1bHQgPSAwOwogICAgaWYgKHNtYWxsQmxvY2tTaXplID4gMCkgewogICAgICBpbnQgYmxvY2tFbmQgPSBzdGFydCArIHNtYWxsQmxvY2tTaXplOwogICAgICBfU21pIHNtaSA9IF9wYXJzZUJsb2NrKHNvdXJjZSwgcmFkaXgsIHN0YXJ0LCBibG9ja0VuZCk7CiAgICAgIGlmIChzbWkgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBfdGhyb3dGb3JtYXRFeGNlcHRpb24ob25FcnJvciwgc291cmNlLCBzdGFydCwgcmFkaXgsIG51bGwpOwogICAgICB9CiAgICAgIHJlc3VsdCA9IHNpZ24gKiBzbWk7CiAgICAgIHN0YXJ0ID0gYmxvY2tFbmQ7CiAgICB9CiAgICBpbnQgbXVsdGlwbGllciA9IF9QQVJTRV9MSU1JVFNbdGFibGVJbmRleCArIDFdOwogICAgaW50IHBvc2l0aXZlT3ZlcmZsb3dMaW1pdCA9IDA7CiAgICBpbnQgbmVnYXRpdmVPdmVyZmxvd0xpbWl0ID0gMDsKICAgIHRhYmxlSW5kZXggPSB0YWJsZUluZGV4IDw8IDE7IC8vIHByZS1tdWx0aXBseSBieSAyIGZvciBzaW1wbGVyIGluZGV4aW5nCiAgICBwb3NpdGl2ZU92ZXJmbG93TGltaXQgPSBfaW50NjRPdmVyZmxvd0xpbWl0c1t0YWJsZUluZGV4XTsKICAgIGlmIChwb3NpdGl2ZU92ZXJmbG93TGltaXQgPT0gMCkgewogICAgICBwb3NpdGl2ZU92ZXJmbG93TGltaXQgPSBfaW5pdEludDY0T3ZlcmZsb3dMaW1pdHModGFibGVJbmRleCwgbXVsdGlwbGllcik7CiAgICB9CiAgICBuZWdhdGl2ZU92ZXJmbG93TGltaXQgPSBfaW50NjRPdmVyZmxvd0xpbWl0c1t0YWJsZUluZGV4ICsgMV07CiAgICBpbnQgYmxvY2tFbmQgPSBzdGFydCArIGJsb2NrU2l6ZTsKICAgIGRvIHsKICAgICAgX1NtaSBzbWkgPSBfcGFyc2VCbG9jayhzb3VyY2UsIHJhZGl4LCBzdGFydCwgYmxvY2tFbmQpOwogICAgICBpZiAoc21pID09IG51bGwpIHsKICAgICAgICByZXR1cm4gX3Rocm93Rm9ybWF0RXhjZXB0aW9uKG9uRXJyb3IsIHNvdXJjZSwgc3RhcnQsIHJhZGl4LCBudWxsKTsKICAgICAgfQogICAgICBpZiAocmVzdWx0ID49IHBvc2l0aXZlT3ZlcmZsb3dMaW1pdCkgewogICAgICAgIGlmICgocmVzdWx0ID4gcG9zaXRpdmVPdmVyZmxvd0xpbWl0KSB8fAogICAgICAgICAgICAoc21pID4gX2ludDY0T3ZlcmZsb3dMaW1pdHNbdGFibGVJbmRleCArIDJdKSkgewogICAgICAgICAgLy8gQWx0aG91Z2ggdGhlIHVuc2lnbmVkIG92ZXJmbG93IGxpbWl0cyBkbyBub3QgZGVwZW5kIG9uIHRoZQogICAgICAgICAgLy8gcGxhdGZvcm0sIHRoZSBtdWx0aXBsaWVyIGFuZCBibG9jayBzaXplLCB3aGljaCBhcmUgdXNlZCB0bwogICAgICAgICAgLy8gY29tcHV0ZSBpdCwgZG8uCiAgICAgICAgICBpbnQgWCA9IGlzNjRCaXQgPyAxIDogMDsKICAgICAgICAgIGlmIChhbGxvd1U2NCAmJgogICAgICAgICAgICAgICEocmVzdWx0ID49IF9pbnQ2NFVuc2lnbmVkT3ZlcmZsb3dMaW1pdHNbWF0gJiYKICAgICAgICAgICAgICAgICAgKHJlc3VsdCA+IF9pbnQ2NFVuc2lnbmVkT3ZlcmZsb3dMaW1pdHNbWF0gfHwKICAgICAgICAgICAgICAgICAgICAgIHNtaSA+IF9pbnQ2NFVuc2lnbmVkU21pT3ZlcmZsb3dMaW1pdHNbWF0pKSAmJgogICAgICAgICAgICAgIGJsb2NrRW5kICsgYmxvY2tTaXplID4gZW5kKSB7CiAgICAgICAgICAgIHJldHVybiAocmVzdWx0ICogbXVsdGlwbGllcikgKyBzbWk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gX3Rocm93Rm9ybWF0RXhjZXB0aW9uKG9uRXJyb3IsIHNvdXJjZSwgbnVsbCwgcmFkaXgsCiAgICAgICAgICAgICAgIlBvc2l0aXZlIGlucHV0IGV4Y2VlZHMgdGhlIGxpbWl0IG9mIGludGVnZXIiKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAocmVzdWx0IDw9IG5lZ2F0aXZlT3ZlcmZsb3dMaW1pdCkgewogICAgICAgIGlmICgocmVzdWx0IDwgbmVnYXRpdmVPdmVyZmxvd0xpbWl0KSB8fAogICAgICAgICAgICAoc21pID4gX2ludDY0T3ZlcmZsb3dMaW1pdHNbdGFibGVJbmRleCArIDNdKSkgewogICAgICAgICAgcmV0dXJuIF90aHJvd0Zvcm1hdEV4Y2VwdGlvbihvbkVycm9yLCBzb3VyY2UsIG51bGwsIHJhZGl4LAogICAgICAgICAgICAgICJOZWdhdGl2ZSBpbnB1dCBleGNlZWRzIHRoZSBsaW1pdCBvZiBpbnRlZ2VyIik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlc3VsdCA9IChyZXN1bHQgKiBtdWx0aXBsaWVyKSArIChzaWduICogc21pKTsKICAgICAgc3RhcnQgPSBibG9ja0VuZDsKICAgICAgYmxvY2tFbmQgPSBzdGFydCArIGJsb2NrU2l6ZTsKICAgIH0gd2hpbGUgKGJsb2NrRW5kIDw9IGVuZCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLy8gUGFyc2UgYmxvY2sgb2YgZGlnaXRzIGludG8gYSBTbWkuCiAgc3RhdGljIF9TbWkgX3BhcnNlQmxvY2soU3RyaW5nIHNvdXJjZSwgaW50IHJhZGl4LCBpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIF9TbWkgcmVzdWx0ID0gMDsKICAgIGlmIChyYWRpeCA8PSAxMCkgewogICAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICAgIGludCBkaWdpdCA9IHNvdXJjZS5jb2RlVW5pdEF0KGkpIF4gMHgzMDsKICAgICAgICBpZiAoZGlnaXQgPj0gcmFkaXgpIHJldHVybiBudWxsOwogICAgICAgIHJlc3VsdCA9IHJhZGl4ICogcmVzdWx0ICsgZGlnaXQ7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8IGVuZDsgaSsrKSB7CiAgICAgICAgaW50IGNoYXIgPSBzb3VyY2UuY29kZVVuaXRBdChpKTsKICAgICAgICBpbnQgZGlnaXQgPSBjaGFyIF4gMHgzMDsKICAgICAgICBpZiAoZGlnaXQgPiA5KSB7CiAgICAgICAgICBkaWdpdCA9IChjaGFyIHwgMHgyMCkgLSAoMHg2MSAtIDEwKTsKICAgICAgICAgIGlmIChkaWdpdCA8IDEwIHx8IGRpZ2l0ID49IHJhZGl4KSByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmVzdWx0ID0gcmFkaXggKiByZXN1bHQgKyBkaWdpdDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIEZvciBlYWNoIHJhZGl4LCAyLTM2LCBob3cgbWFueSBkaWdpdHMgYXJlIGd1YXJhbnRlZWQgdG8gZml0IGluIGEgc21pLAogIC8vIGFuZCBtYWduaXR1ZGUgb2Ygc3VjaCBhIGJsb2NrIChyYWRpeCAqKiBkaWdpdC1jb3VudCkuCiAgLy8gMzItYml0IGxpbWl0L211bHRpcGxpZXIgYXQgKHJhZGl4IC0gMikqNCwgNjQtYml0IGxpbWl0IGF0IChyYWRpeC0yKSo0KzIKICBzdGF0aWMgY29uc3QgX1BBUlNFX0xJTUlUUyA9IGNvbnN0IFsKICAgIDMwLCAxMDczNzQxODI0LCA2MiwgNDYxMTY4NjAxODQyNzM4NzkwNCwgLy8gcmFkaXg6IDIKICAgIDE4LCAzODc0MjA0ODksIDM5LCA0MDUyNTU1MTUzMDE4OTc2MjY3LAogICAgMTUsIDEwNzM3NDE4MjQsIDMwLCAxMTUyOTIxNTA0NjA2ODQ2OTc2LAogICAgMTIsIDI0NDE0MDYyNSwgMjYsIDE0OTAxMTYxMTkzODQ3NjU2MjUsIC8vICByYWRpeDogNQogICAgMTEsIDM2Mjc5NzA1NiwgMjMsIDc4OTczMDIyMzA1MzYwMjgxNiwKICAgIDEwLCAyODI0NzUyNDksIDIyLCAzOTA5ODIxMDQ4NTgyOTg4MDQ5LAogICAgMTAsIDEwNzM3NDE4MjQsIDIwLCAxMTUyOTIxNTA0NjA2ODQ2OTc2LAogICAgOSwgMzg3NDIwNDg5LCAxOSwgMTM1MDg1MTcxNzY3Mjk5MjA4OSwKICAgIDksIDEwMDAwMDAwMDAsIDE4LCAxMDAwMDAwMDAwMDAwMDAwMDAwLCAvLyAgcmFkaXg6IDEwCiAgICA4LCAyMTQzNTg4ODEsIDE3LCA1MDU0NDcwMjg0OTkyOTM3NzEsCiAgICA4LCA0Mjk5ODE2OTYsIDE3LCAyMjE4NjExMTA2NzQwNDM2OTkyLAogICAgOCwgODE1NzMwNzIxLCAxNiwgNjY1NDE2NjA5MTgzMTc5ODQxLAogICAgNywgMTA1NDEzNTA0LCAxNiwgMjE3Nzk1MzMzNzgwOTM3MTEzNiwKICAgIDcsIDE3MDg1OTM3NSwgMTUsIDQzNzg5Mzg5MDM4MDg1OTM3NSwgLy8gICAgcmFkaXg6IDE1CiAgICA3LCAyNjg0MzU0NTYsIDE1LCAxMTUyOTIxNTA0NjA2ODQ2OTc2LAogICAgNywgNDEwMzM4NjczLCAxNSwgMjg2MjQyMzA1MTUwOTgxNTc5MywKICAgIDcsIDYxMjIyMDAzMiwgMTQsIDM3NDgxMzM2NzU4MjA4MTAyNCwKICAgIDcsIDg5Mzg3MTczOSwgMTQsIDc5OTAwNjY4NTc4Mjg4NDEyMSwKICAgIDYsIDY0MDAwMDAwLCAxNCwgMTYzODQwMDAwMDAwMDAwMDAwMCwgLy8gICAgcmFkaXg6IDIwCiAgICA2LCA4NTc2NjEyMSwgMTQsIDMyNDM5MTk5MzI1MjE1MDg2ODEsCiAgICA2LCAxMTMzNzk5MDQsIDEzLCAyODI4MTAwNTc4ODMwODI3NTIsCiAgICA2LCAxNDgwMzU4ODksIDEzLCA1MDQwMzYzNjE5MzY0NjczODMsCiAgICA2LCAxOTExMDI5NzYsIDEzLCA4NzY0ODgzMzg0NjUzNTc4MjQsCiAgICA2LCAyNDQxNDA2MjUsIDEzLCAxNDkwMTE2MTE5Mzg0NzY1NjI1LCAvLyAgIHJhZGl4OiAyNQogICAgNiwgMzA4OTE1Nzc2LCAxMywgMjQ4MTE1Mjg3MzIwMzczNjU3NiwKICAgIDYsIDM4NzQyMDQ4OSwgMTMsIDQwNTI1NTUxNTMwMTg5NzYyNjcsCiAgICA2LCA0ODE4OTAzMDQsIDEyLCAyMzIyMTgyNjUwODkyMTI0MTYsCiAgICA2LCA1OTQ4MjMzMjEsIDEyLCAzNTM4MTQ3ODMyMDU0NjkwNDEsCiAgICA2LCA3MjkwMDAwMDAsIDEyLCA1MzE0NDEwMDAwMDAwMDAwMDAsIC8vICAgIHJhZGl4OiAzMAogICAgNiwgODg3NTAzNjgxLCAxMiwgNzg3NjYyNzgzNzg4NTQ5NzYxLAogICAgNiwgMTA3Mzc0MTgyNCwgMTIsIDExNTI5MjE1MDQ2MDY4NDY5NzYsCiAgICA1LCAzOTEzNTM5MywgMTIsIDE2Njc4ODk1MTQ5NTI5ODQ5NjEsCiAgICA1LCA0NTQzNTQyNCwgMTIsIDIzODY0MjA2ODM2OTMxMDEwNTYsCiAgICA1LCA1MjUyMTg3NSwgMTIsIDMzNzkyMjA1MDgwNTY2NDA2MjUsIC8vICAgIHJhZGl4OiAzNQogICAgNSwgNjA0NjYxNzYsIDExLCAxMzE2MjE3MDM4NDIyNjcxMzYsCiAgXTsKCiAgc3RhdGljIGNvbnN0IF9tYXhJbnQ2NCA9IDB4N2ZmZmZmZmZmZmZmZmZmZjsKICBzdGF0aWMgY29uc3QgX21pbkludDY0ID0gLTB4ODAwMDAwMDAwMDAwMDAwMDsKCiAgc3RhdGljIGNvbnN0IF9pbnQ2NFVuc2lnbmVkT3ZlcmZsb3dMaW1pdHMgPSBjb25zdCBbMHhmZmZmZmZmZmYsIDB4Zl07CiAgc3RhdGljIGNvbnN0IF9pbnQ2NFVuc2lnbmVkU21pT3ZlcmZsb3dMaW1pdHMgPSBjb25zdCBbCiAgICAweGZmZmZmZmYsCiAgICAweGZmZmZmZmZmZmZmZmZmZgogIF07CgogIC8vLyBDYWxjdWxhdGlvbiBvZiB0aGUgZXhwcmVzc2lvbgogIC8vLwogIC8vLyAgIHJlc3VsdCA9IChyZXN1bHQgKiBtdWx0aXBsaWVyKSArIChzaWduICogc21pKQogIC8vLwogIC8vLyBpbiBgX3BhcnNlUmFkaXgoKWAgbWF5IG92ZXJmbG93IDY0LWJpdCBpbnRlZ2Vycy4gSW4gc3VjaCBjYXNlLAogIC8vLyBgaW50LnBhcnNlKClgIHNob3VsZCBzdG9wIHdpdGggYW4gZXJyb3IuCiAgLy8vCiAgLy8vIFRoaXMgdGFibGUgaXMgbGF6aWx5IGZpbGxlZCB3aXRoIGludDY0IG92ZXJmbG93IGxpbWl0cyBmb3IgcmVzdWx0IGFuZCBzbWkuCiAgLy8vIEZvciBlYWNoIG11bHRpcGxpZXIgZnJvbSBgX1BBUlNFX0xJTUlUU1t0YWJsZUluZGV4ICsgMV1gIHRoaXMgdGFibGUKICAvLy8gY29udGFpbnMKICAvLy8KICAvLy8gKiBgW3RhYmxlSW5kZXgqMl1gID0gcG9zaXRpdmUgbGltaXQgZm9yIHJlc3VsdAogIC8vLyAqIGBbdGFibGVJbmRleCoyICsgMV1gID0gbmVnYXRpdmUgbGltaXQgZm9yIHJlc3VsdAogIC8vLyAqIGBbdGFibGVJbmRleCoyICsgMl1gID0gbGltaXQgZm9yIHNtaSBpZiByZXN1bHQgaXMgZXhhY3RseSBhdCBwb3NpdGl2ZSBsaW1pdAogIC8vLyAqIGBbdGFibGVJbmRleCoyICsgM11gID0gbGltaXQgZm9yIHNtaSBpZiByZXN1bHQgaXMgZXhhY3RseSBhdCBuZWdhdGl2ZSBsaW1pdAogIHN0YXRpYyBmaW5hbCBJbnQ2NExpc3QgX2ludDY0T3ZlcmZsb3dMaW1pdHMgPQogICAgICBuZXcgSW50NjRMaXN0KF9QQVJTRV9MSU1JVFMubGVuZ3RoICogMik7CgogIHN0YXRpYyBpbnQgX2luaXRJbnQ2NE92ZXJmbG93TGltaXRzKGludCB0YWJsZUluZGV4LCBpbnQgbXVsdGlwbGllcikgewogICAgX2ludDY0T3ZlcmZsb3dMaW1pdHNbdGFibGVJbmRleF0gPSBfbWF4SW50NjQgfi8gbXVsdGlwbGllcjsKICAgIF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXggKyAxXSA9IF9taW5JbnQ2NCB+LyBtdWx0aXBsaWVyOwogICAgX2ludDY0T3ZlcmZsb3dMaW1pdHNbdGFibGVJbmRleCArIDJdID0gX21heEludDY0LnJlbWFpbmRlcihtdWx0aXBsaWVyKTsKICAgIF9pbnQ2NE92ZXJmbG93TGltaXRzW3RhYmxlSW5kZXggKyAzXSA9IC0oX21pbkludDY0LnJlbWFpbmRlcihtdWx0aXBsaWVyKSk7CiAgICByZXR1cm4gX2ludDY0T3ZlcmZsb3dMaW1pdHNbdGFibGVJbmRleF07CiAgfQp9CoE0AE5OPAEeAR4HDAlFKAEiJSQlIiIBPRsUEiAlJgwyFx8IBiUjLgYUJygTFQggBhoEAQlNUBpFBig/PykqPwZRKwQBPi8UUQYuASoSOjQPGkkIKAYZHhkjESQqLhMeTgxPCggSBkkEAQk0UCUoPz8pKj8GCiwSEwYEASEBTTEbOQYZQgZNBAFRIDovHh85GUsIGQYBREMUIUUUHi0+GUsIGxgGNCMjTD4mUAZCJgk+GUsILTA8SEgdIxo9P0QsMAxFPgo0MDxFPgoINRgkHxMEASdKFRcqMSkpCA0qKSEZLzkKKQgGEwQBSztNJzksLTkrLC0rOiorKis6KysqKjoqKioqOisrKio6KiwqKjopBQEvMAFIOQ8WBQEkBjYGRS8GUUoPBjU5VFQwLwFIQERMTy0EAgEjZGFydDpjb3JlLXBhdGNoL2ludGVnZXJzX3BhdGNoLmRhcnQwb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL2NvcmUvaW52b2NhdGlvbi5kYXJ0lRcvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogUmVwcmVzZW50YXRpb24gb2YgdGhlIGludm9jYXRpb24gb2YgYSBtZW1iZXIgb24gYW4gb2JqZWN0LgogKgogKiBUaGlzIGlzIHRoZSB0eXBlIG9mIG9iamVjdHMgcGFzc2VkIHRvIFtPYmplY3Qubm9TdWNoTWV0aG9kXSB3aGVuCiAqIGFuIG9iamVjdCBkb2Vzbid0IHN1cHBvcnQgdGhlIG1lbWJlciBpbnZvY2F0aW9uIHRoYXQgd2FzIGF0dGVtcHRlZAogKiBvbiBpdC4KICovCmFic3RyYWN0IGNsYXNzIEludm9jYXRpb24gewogIEludm9jYXRpb24oKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBpbnZvY2F0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSBtZXRob2QgaW52b2NhdGlvbi4KICAgKgogICAqIFRoZSBtZXRob2QgaW52b2NhdGlvbiBoYXMgbm8gdHlwZSBhcmd1bWVudHMuCiAgICogSWYgdGhlIG5hbWVkIGFyZ3VtZW50cyBhcmUgb21pdHRlZCwgdGhleSBkZWZhdWx0IHRvIG5vIG5hbWVkIGFyZ3VtZW50cy4KICAgKi8KICBmYWN0b3J5IEludm9jYXRpb24ubWV0aG9kKAogICAgICAgICAgU3ltYm9sIG1lbWJlck5hbWUsIEl0ZXJhYmxlPE9iamVjdD4gcG9zaXRpb25hbEFyZ3VtZW50cywKICAgICAgICAgIFtNYXA8U3ltYm9sLCBPYmplY3Q+IG5hbWVkQXJndW1lbnRzXSkgPT4KICAgICAgX0ludm9jYXRpb24ubWV0aG9kKG1lbWJlck5hbWUsIG51bGwsIHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBpbnZvY2F0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSBnZW5lcmljIG1ldGhvZCBpbnZvY2F0aW9uLgogICAqCiAgICogSWYgW3R5cGVBcmd1bWVudHNdIGlzIGBudWxsYCBvciBlbXB0eSwgdGhlIGNvbnN0cnVjdG9yIGlzIGVxdWl2YWxlbnQgdG8KICAgKiBjYWxsaW5nIFtJbnZvY2F0aW9uLm1ldGhvZF0gd2l0aCB0aGUgcmVtYWluaW5nIGFyZ3VtZW50cy4KICAgKiBBbGwgdGhlIGluZGl2aWR1YWwgdHlwZSBhcmd1bWVudHMgbXVzdCBiZSBub24tbnVsbC4KICAgKgogICAqIElmIHRoZSBuYW1lZCBhcmd1bWVudHMgYXJlIG9taXR0ZWQsIHRoZXkgZGVmYXVsdCB0byBubyBuYW1lZCBhcmd1bWVudHMuCiAgICovCiAgZmFjdG9yeSBJbnZvY2F0aW9uLmdlbmVyaWNNZXRob2QoU3ltYm9sIG1lbWJlck5hbWUsCiAgICAgICAgICBJdGVyYWJsZTxUeXBlPiB0eXBlQXJndW1lbnRzLCBJdGVyYWJsZTxPYmplY3Q+IHBvc2l0aW9uYWxBcmd1bWVudHMsCiAgICAgICAgICBbTWFwPFN5bWJvbCwgT2JqZWN0PiBuYW1lZEFyZ3VtZW50c10pID0+CiAgICAgIF9JbnZvY2F0aW9uLm1ldGhvZCgKICAgICAgICAgIG1lbWJlck5hbWUsIHR5cGVBcmd1bWVudHMsIHBvc2l0aW9uYWxBcmd1bWVudHMsIG5hbWVkQXJndW1lbnRzKTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBpbnZvY2F0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSBnZXR0ZXIgaW52b2NhdGlvbi4KICAgKi8KICBmYWN0b3J5IEludm9jYXRpb24uZ2V0dGVyKFN5bWJvbCBuYW1lKSA9IF9JbnZvY2F0aW9uLmdldHRlcjsKCiAgLyoqCiAgICogQ3JlYXRlcyBhbiBpbnZvY2F0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSBzZXR0ZXIgaW52b2NhdGlvbi4KICAgKgogICAqIFRoaXMgY29uc3RydWN0b3IgYWNjZXB0cyBhbnkgW1N5bWJvbF0gYXMgW21lbWJlck5hbWVdLCBidXQgcmVtZW1iZXIgdGhhdAogICAqICphY3R1YWwgc2V0dGVyIG5hbWVzKiBlbmQgaW4gYD1gLCBzbyB0aGUgaW52b2NhdGlvbiBjb3JyZXNwb25kaW5nCiAgICogdG8gYG9iamVjdC5tZW1iZXIgPSB2YWx1ZWAgaXMKICAgKiBgYGBkYXJ0CiAgICogSW52b2NhdGlvbi5zZXR0ZXIoY29uc3QgU3ltYm9sKCJtZW1iZXI9IiksIHZhbHVlKQogICAqIGBgYAogICAqLwogIGZhY3RvcnkgSW52b2NhdGlvbi5zZXR0ZXIoU3ltYm9sIG1lbWJlck5hbWUsIE9iamVjdCBhcmd1bWVudCkgPQogICAgICBfSW52b2NhdGlvbi5zZXR0ZXI7CgogIC8qKiBUaGUgbmFtZSBvZiB0aGUgaW52b2tlZCBtZW1iZXIuICovCiAgU3ltYm9sIGdldCBtZW1iZXJOYW1lOwoKICAvKioKICAgKiBBbiB1bm1vZGlmaWFibGUgdmlldyBvZiB0aGUgdHlwZSBhcmd1bWVudHMgb2YgdGhlIGNhbGwuCiAgICoKICAgKiBJZiB0aGUgbWVtYmVyIGlzIGEgZ2V0dGVyLCBzZXR0ZXIgb3Igb3BlcmF0b3IsCiAgICogdGhlIHR5cGUgYXJndW1lbnQgbGlzdCBpcyBhbHdheXMgZW1wdHkuCiAgICovCiAgTGlzdDxUeXBlPiBnZXQgdHlwZUFyZ3VtZW50cyA9PiBjb25zdCA8VHlwZT5bXTsKCiAgLyoqCiAgICogQW4gdW5tb2RpZmlhYmxlIHZpZXcgb2YgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIG9mIHRoZSBjYWxsLgogICAqCiAgICogSWYgdGhlIG1lbWJlciBpcyBhIGdldHRlciwgdGhlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGxpc3QgaXMKICAgKiBhbHdheXMgZW1wdHkuCiAgICovCiAgTGlzdDxkeW5hbWljPiBnZXQgcG9zaXRpb25hbEFyZ3VtZW50czsKCiAgLyoqCiAgICogQW4gdW5tb2RpZmlhYmxlIHZpZXcgb2YgdGhlIG5hbWVkIGFyZ3VtZW50cyBvZiB0aGUgY2FsbC4KICAgKgogICAqIElmIHRoZSBtZW1iZXIgaXMgYSBnZXR0ZXIsIHNldHRlciBvciBvcGVyYXRvciwKICAgKiB0aGUgbmFtZWQgYXJndW1lbnRzIG1hcCBpcyBhbHdheXMgZW1wdHkuCiAgICovCiAgTWFwPFN5bWJvbCwgZHluYW1pYz4gZ2V0IG5hbWVkQXJndW1lbnRzOwoKICAvKiogV2hldGhlciB0aGUgaW52b2NhdGlvbiB3YXMgYSBtZXRob2QgY2FsbC4gKi8KICBib29sIGdldCBpc01ldGhvZDsKCiAgLyoqCiAgICogV2hldGhlciB0aGUgaW52b2NhdGlvbiB3YXMgYSBnZXR0ZXIgY2FsbC4KICAgKiBJZiBzbywgYWxsIHRocmVlIHR5cGVzIG9mIGFyZ3VtZW50cyBsaXN0cyBhcmUgZW1wdHkuCiAgICovCiAgYm9vbCBnZXQgaXNHZXR0ZXI7CgogIC8qKgogICAqIFdoZXRoZXIgdGhlIGludm9jYXRpb24gd2FzIGEgc2V0dGVyIGNhbGwuCiAgICoKICAgKiBJZiBzbywgW3Bvc2l0aW9uYWxBcmd1bWVudHNdIGhhcyBleGFjdGx5IG9uZSBwb3NpdGlvbmFsCiAgICogYXJndW1lbnQsIFtuYW1lZEFyZ3VtZW50c10gaXMgZW1wdHksIGFuZCB0eXBlQXJndW1lbnRzIGlzCiAgICogZW1wdHkuCiAgICovCiAgYm9vbCBnZXQgaXNTZXR0ZXI7CgogIC8qKiBXaGV0aGVyIHRoZSBpbnZvY2F0aW9uIHdhcyBhIGdldHRlciBvciBhIHNldHRlciBjYWxsLiAqLwogIGJvb2wgZ2V0IGlzQWNjZXNzb3IgPT4gaXNHZXR0ZXIgfHwgaXNTZXR0ZXI7Cn0KCi8qKiBJbXBsZW1lbnRhdGlvbiBvZiBbSW52b2NhdGlvbl0gdXNlZCBieSBpdHMgZmFjdG9yeSBjb25zdHJ1Y3RvcnMuICovCmNsYXNzIF9JbnZvY2F0aW9uIGltcGxlbWVudHMgSW52b2NhdGlvbiB7CiAgZmluYWwgU3ltYm9sIG1lbWJlck5hbWU7CiAgZmluYWwgTGlzdDxUeXBlPiB0eXBlQXJndW1lbnRzOwogIC8vIFBvc2l0aW9uYWwgYXJndW1lbnRzIGlzIGBudWxsYCBmb3IgZ2V0dGVycyBvbmx5LgogIGZpbmFsIExpc3Q8T2JqZWN0PiBfcG9zaXRpb25hbDsKICAvLyBOYW1lZCBhcmd1bWVudHMgaXMgYG51bGxgIGZvciBhY2Nlc3NvcnMgb25seS4KICBmaW5hbCBNYXA8U3ltYm9sLCBPYmplY3Q+IF9uYW1lZDsKCiAgX0ludm9jYXRpb24ubWV0aG9kKHRoaXMubWVtYmVyTmFtZSwgSXRlcmFibGU8VHlwZT4gdHlwZXMsCiAgICAgIEl0ZXJhYmxlPE9iamVjdD4gcG9zaXRpb25hbCwgTWFwPFN5bWJvbCwgT2JqZWN0PiBuYW1lZCkKICAgICAgOiB0eXBlQXJndW1lbnRzID0gX2Vuc3VyZU5vbk51bGxUeXBlcyhfbWFrZVVubW9kaWZpYWJsZTxUeXBlPih0eXBlcykpLAogICAgICAgIF9wb3NpdGlvbmFsID0gX21ha2VVbm1vZGlmaWFibGU8T2JqZWN0Pihwb3NpdGlvbmFsKSA/PyBjb25zdCA8T2JqZWN0PltdLAogICAgICAgIF9uYW1lZCA9IChuYW1lZCA9PSBudWxsIHx8IG5hbWVkLmlzRW1wdHkpCiAgICAgICAgICAgID8gY29uc3QgPFN5bWJvbCwgT2JqZWN0Pnt9CiAgICAgICAgICAgIDogTWFwPFN5bWJvbCwgT2JqZWN0Pi51bm1vZGlmaWFibGUobmFtZWQpOwoKICBfSW52b2NhdGlvbi5nZXR0ZXIodGhpcy5tZW1iZXJOYW1lKQogICAgICA6IHR5cGVBcmd1bWVudHMgPSBjb25zdCA8VHlwZT5bXSwKICAgICAgICBfcG9zaXRpb25hbCA9IG51bGwsCiAgICAgICAgX25hbWVkID0gbnVsbDsKCiAgX0ludm9jYXRpb24uc2V0dGVyKHRoaXMubWVtYmVyTmFtZSwgT2JqZWN0IGFyZ3VtZW50KQogICAgICA6IHR5cGVBcmd1bWVudHMgPSBjb25zdCA8VHlwZT5bXSwKICAgICAgICBfcG9zaXRpb25hbCA9IExpc3Q8T2JqZWN0Pi51bm1vZGlmaWFibGUoW2FyZ3VtZW50XSksCiAgICAgICAgX25hbWVkID0gbnVsbDsKCiAgTGlzdDxkeW5hbWljPiBnZXQgcG9zaXRpb25hbEFyZ3VtZW50cyA9PiBfcG9zaXRpb25hbCA/PyBjb25zdCA8T2JqZWN0PltdOwoKICBNYXA8U3ltYm9sLCBkeW5hbWljPiBnZXQgbmFtZWRBcmd1bWVudHMgPT4gX25hbWVkID8/IGNvbnN0IDxTeW1ib2wsIE9iamVjdD57fTsKCiAgYm9vbCBnZXQgaXNNZXRob2QgPT4gX25hbWVkICE9IG51bGw7CiAgYm9vbCBnZXQgaXNHZXR0ZXIgPT4gX3Bvc2l0aW9uYWwgPT0gbnVsbDsKICBib29sIGdldCBpc1NldHRlciA9PiBfcG9zaXRpb25hbCAhPSBudWxsICYmIF9uYW1lZCA9PSBudWxsOwogIGJvb2wgZ2V0IGlzQWNjZXNzb3IgPT4gX25hbWVkID09IG51bGw7CgogIC8vLyBDaGVja3MgdGhhdCB0aGUgZWxlbWVudHMgb2YgW3R5cGVzXSBhcmUgbm90IG51bGwuCiAgc3RhdGljIExpc3Q8VHlwZT4gX2Vuc3VyZU5vbk51bGxUeXBlcyhMaXN0PFR5cGU+IHR5cGVzKSB7CiAgICBpZiAodHlwZXMgPT0gbnVsbCkgcmV0dXJuIGNvbnN0IDxUeXBlPltdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5sZW5ndGg7IGkrKykgewogICAgICBpZiAodHlwZXNbaV0gPT0gbnVsbCkgewogICAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgICJUeXBlIGFyZ3VtZW50cyBtdXN0IGJlIG5vbi1udWxsLCB3YXMgbnVsbCBhdCBpbmRleCAkaS4iKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHR5cGVzOwogIH0KCiAgc3RhdGljIExpc3Q8VD4gX21ha2VVbm1vZGlmaWFibGU8VD4oSXRlcmFibGU8VD4gZWxlbWVudHMpIHsKICAgIGlmIChlbGVtZW50cyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBMaXN0PFQ+LnVubW9kaWZpYWJsZShlbGVtZW50cyk7CiAgfQp9CoCkAE5OPAETAQQ+A0RGCgQcEAEGQQUyTQYdQzNRAQZJBU0/OQVNBjZOMxpLAQZBBj8BBkEFTkcjDTcJBkIaASkZAQY9BTQtBjIBBkMFQRMGKQEGPgU0LgYrATMVAQYvOgYVAQYvBT0/DAYVAT8vAgFIKhsiNiIzJAE8Pk1RMic3ASYoHBcBNyg9FwFMAVEBJyw+KQE4PC4tHh1HCAYSBAE+JysEAgEZZGFydDpjb3JlL2ludm9jYXRpb24uZGFydC5vcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9pdGVyYXRvci5kYXJ0iNMvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovKioKICogQW4gaW50ZXJmYWNlIGZvciBnZXR0aW5nIGl0ZW1zLCBvbmUgYXQgYSB0aW1lLCBmcm9tIGFuIG9iamVjdC4KICoKICogVGhlIGZvci1pbiBjb25zdHJ1Y3QgdHJhbnNwYXJlbnRseSB1c2VzIGBJdGVyYXRvcmAgdG8gdGVzdCBmb3IgdGhlIGVuZAogKiBvZiB0aGUgaXRlcmF0aW9uLCBhbmQgdG8gZ2V0IGVhY2ggaXRlbSAob3IgX2VsZW1lbnRfKS4KICoKICogSWYgdGhlIG9iamVjdCBpdGVyYXRlZCBvdmVyIGlzIGNoYW5nZWQgZHVyaW5nIHRoZSBpdGVyYXRpb24sIHRoZQogKiBiZWhhdmlvciBpcyB1bnNwZWNpZmllZC4KICoKICogVGhlIGBJdGVyYXRvcmAgaXMgaW5pdGlhbGx5IHBvc2l0aW9uZWQgYmVmb3JlIHRoZSBmaXJzdCBlbGVtZW50LgogKiBCZWZvcmUgYWNjZXNzaW5nIHRoZSBmaXJzdCBlbGVtZW50IHRoZSBpdGVyYXRvciBtdXN0IHRodXMgYmUgYWR2YW5jZWQgdXNpbmcKICogW21vdmVOZXh0XSB0byBwb2ludCB0byB0aGUgZmlyc3QgZWxlbWVudC4KICogSWYgbm8gZWxlbWVudCBpcyBsZWZ0LCB0aGVuIFttb3ZlTmV4dF0gcmV0dXJucyBmYWxzZSwgW2N1cnJlbnRdCiAqIHJldHVybnMgYG51bGxgLCBhbmQgYWxsIGZ1cnRoZXIgY2FsbHMgdG8gW21vdmVOZXh0XSB3aWxsIGFsc28gcmV0dXJuIGZhbHNlLgogKgogKiBBIHR5cGljYWwgdXNhZ2Ugb2YgYW4gSXRlcmF0b3IgbG9va3MgYXMgZm9sbG93czoKICoKICogICAgIHZhciBpdCA9IG9iai5pdGVyYXRvcjsKICogICAgIHdoaWxlIChpdC5tb3ZlTmV4dCgpKSB7CiAqICAgICAgIHVzZShpdC5jdXJyZW50KTsKICogICAgIH0KICoKICogKipTZWUgYWxzbzoqKgogKiBbSXRlcmF0aW9uXShodHRwOi8vd3d3LmRhcnRsYW5nLm9yZy9kb2NzL2RhcnQtdXAtYW5kLXJ1bm5pbmcvY29udGVudHMvY2gwMy5odG1sI2l0ZXJhdGlvbikKICogaW4gdGhlIFtsaWJyYXJ5IHRvdXJdKGh0dHA6Ly93d3cuZGFydGxhbmcub3JnL2RvY3MvZGFydC11cC1hbmQtcnVubmluZy9jb250ZW50cy9jaDAzLmh0bWwpCiAqLwphYnN0cmFjdCBjbGFzcyBJdGVyYXRvcjxFPiB7CiAgLyoqCiAgICogTW92ZXMgdG8gdGhlIG5leHQgZWxlbWVudC4KICAgKgogICAqIFJldHVybnMgdHJ1ZSBpZiBbY3VycmVudF0gY29udGFpbnMgdGhlIG5leHQgZWxlbWVudC4KICAgKiBSZXR1cm5zIGZhbHNlIGlmIG5vIGVsZW1lbnRzIGFyZSBsZWZ0LgogICAqCiAgICogSXQgaXMgc2FmZSB0byBpbnZva2UgW21vdmVOZXh0XSBldmVuIHdoZW4gdGhlIGl0ZXJhdG9yIGlzIGFscmVhZHkKICAgKiBwb3NpdGlvbmVkIGFmdGVyIHRoZSBsYXN0IGVsZW1lbnQuCiAgICogSW4gdGhpcyBjYXNlIFttb3ZlTmV4dF0gcmV0dXJucyBmYWxzZSBhZ2FpbiBhbmQgaGFzIG5vIGVmZmVjdC4KICAgKgogICAqIEEgY2FsbCB0byBgbW92ZU5leHRgIG1heSB0aHJvdyBpZiBpdGVyYXRpb24gaGFzIGJlZW4gYnJva2VuIGJ5CiAgICogY2hhbmdpbmcgdGhlIHVuZGVybHlpbmcgY29sbGVjdGlvbi4KICAgKi8KICBib29sIG1vdmVOZXh0KCk7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGN1cnJlbnQgZWxlbWVudC4KICAgKgogICAqIFJldHVybnMgYG51bGxgIGlmIHRoZSBpdGVyYXRvciBoYXMgbm90IHlldCBiZWVuIG1vdmVkIHRvIHRoZSBmaXJzdAogICAqIGVsZW1lbnQsIG9yIGlmIHRoZSBpdGVyYXRvciBoYXMgYmVlbiBtb3ZlZCBwYXN0IHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlCiAgICogW0l0ZXJhYmxlXS4KICAgKgogICAqIFRoZSBgY3VycmVudGAgZ2V0dGVyIHNob3VsZCBrZWVwIGl0cyB2YWx1ZSB1bnRpbCB0aGUgbmV4dCBjYWxsIHRvCiAgICogW21vdmVOZXh0XSwgZXZlbiBpZiBhbiB1bmRlcmx5aW5nIGNvbGxlY3Rpb24gY2hhbmdlcy4KICAgKiBBZnRlciBhIHN1Y2Nlc3NmdWwgY2FsbCB0byBgbW92ZU5leHRgLCB0aGUgdXNlciBkb2Vzbid0IG5lZWQgdG8gY2FjaGUKICAgKiB0aGUgY3VycmVudCB2YWx1ZSwgYnV0IGNhbiBrZWVwIHJlYWRpbmcgaXQgZnJvbSB0aGUgaXRlcmF0b3IuCiAgICovCiAgRSBnZXQgY3VycmVudDsKfQpAAE5OPAETAQRCA0o6A0QcA0RPLUNPAzQDHh8aCQMRXl4EHQYgBTosBUcoRAVEKQYTAQYiBUhNEQVHO0tDBhECARdkYXJ0OmNvcmUvaXRlcmF0b3IuZGFydCpvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9saXN0LmRhcnTAAGBYLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5jb3JlOwoKLyoqCiAqIEFuIGluZGV4YWJsZSBjb2xsZWN0aW9uIG9mIG9iamVjdHMgd2l0aCBhIGxlbmd0aC4KICoKICogU3ViY2xhc3NlcyBvZiB0aGlzIGNsYXNzIGltcGxlbWVudCBkaWZmZXJlbnQga2luZHMgb2YgbGlzdHMuCiAqIFRoZSBtb3N0IGNvbW1vbiBraW5kcyBvZiBsaXN0cyBhcmU6CiAqCiAqICogRml4ZWQtbGVuZ3RoIGxpc3QuCiAqICAgQW4gZXJyb3Igb2NjdXJzIHdoZW4gYXR0ZW1wdGluZyB0byB1c2Ugb3BlcmF0aW9ucwogKiAgIHRoYXQgY2FuIGNoYW5nZSB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0LgogKgogKiAqIEdyb3dhYmxlIGxpc3QuIEZ1bGwgaW1wbGVtZW50YXRpb24gb2YgdGhlIEFQSSBkZWZpbmVkIGluIHRoaXMgY2xhc3MuCiAqCiAqIFRoZSBkZWZhdWx0IGdyb3dhYmxlIGxpc3QsIGFzIHJldHVybmVkIGJ5IGBuZXcgTGlzdCgpYCBvciBgW11gLCBrZWVwcwogKiBhbiBpbnRlcm5hbCBidWZmZXIsIGFuZCBncm93cyB0aGF0IGJ1ZmZlciB3aGVuIG5lY2Vzc2FyeS4gVGhpcyBndWFyYW50ZWVzCiAqIHRoYXQgYSBzZXF1ZW5jZSBvZiBbYWRkXSBvcGVyYXRpb25zIHdpbGwgZWFjaCBleGVjdXRlIGluIGFtb3J0aXplZCBjb25zdGFudAogKiB0aW1lLiBTZXR0aW5nIHRoZSBsZW5ndGggZGlyZWN0bHkgbWF5IHRha2UgdGltZSBwcm9wb3J0aW9uYWwgdG8gdGhlIG5ldwogKiBsZW5ndGgsIGFuZCBtYXkgY2hhbmdlIHRoZSBpbnRlcm5hbCBjYXBhY2l0eSBzbyB0aGF0IGEgZm9sbG93aW5nIGFkZAogKiBvcGVyYXRpb24gd2lsbCBuZWVkIHRvIGltbWVkaWF0ZWx5IGluY3JlYXNlIHRoZSBidWZmZXIgY2FwYWNpdHkuCiAqIE90aGVyIGxpc3QgaW1wbGVtZW50YXRpb25zIG1heSBoYXZlIGRpZmZlcmVudCBwZXJmb3JtYW5jZSBiZWhhdmlvci4KICoKICogVGhlIGZvbGxvd2luZyBjb2RlIGlsbHVzdHJhdGVzIHRoYXQgc29tZSBMaXN0IGltcGxlbWVudGF0aW9ucyBzdXBwb3J0CiAqIG9ubHkgYSBzdWJzZXQgb2YgdGhlIEFQSS4KICoKICogICAgIExpc3Q8aW50PiBmaXhlZExlbmd0aExpc3QgPSBuZXcgTGlzdCg1KTsKICogICAgIGZpeGVkTGVuZ3RoTGlzdC5sZW5ndGggPSAwOyAgLy8gRXJyb3IKICogICAgIGZpeGVkTGVuZ3RoTGlzdC5hZGQoNDk5KTsgICAgLy8gRXJyb3IKICogICAgIGZpeGVkTGVuZ3RoTGlzdFswXSA9IDg3OwogKiAgICAgTGlzdDxpbnQ+IGdyb3dhYmxlTGlzdCA9IFsxLCAyXTsKICogICAgIGdyb3dhYmxlTGlzdC5sZW5ndGggPSAwOwogKiAgICAgZ3Jvd2FibGVMaXN0LmFkZCg0OTkpOwogKiAgICAgZ3Jvd2FibGVMaXN0WzBdID0gODc7CiAqCiAqIExpc3RzIGFyZSBbSXRlcmFibGVdLiBJdGVyYXRpb24gb2NjdXJzIG92ZXIgdmFsdWVzIGluIGluZGV4IG9yZGVyLiBDaGFuZ2luZwogKiB0aGUgdmFsdWVzIGRvZXMgbm90IGFmZmVjdCBpdGVyYXRpb24sIGJ1dCBjaGFuZ2luZyB0aGUgdmFsaWQKICogaW5kaWNlcyZtZGFzaDt0aGF0IGlzLCBjaGFuZ2luZyB0aGUgbGlzdCdzIGxlbmd0aCZtZGFzaDtiZXR3ZWVuIGl0ZXJhdGlvbgogKiBzdGVwcyBjYXVzZXMgYSBbQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yXS4gVGhpcyBtZWFucyB0aGF0IG9ubHkgZ3Jvd2FibGUKICogbGlzdHMgY2FuIHRocm93IENvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvci4gSWYgdGhlIGxlbmd0aCBjaGFuZ2VzCiAqIHRlbXBvcmFyaWx5IGFuZCBpcyByZXN0b3JlZCBiZWZvcmUgY29udGludWluZyB0aGUgaXRlcmF0aW9uLCB0aGUgaXRlcmF0b3IKICogZG9lcyBub3QgZGV0ZWN0IGl0LgogKgogKiBJdCBpcyBnZW5lcmFsbHkgbm90IGFsbG93ZWQgdG8gbW9kaWZ5IHRoZSBsaXN0J3MgbGVuZ3RoIChhZGRpbmcgb3IgcmVtb3ZpbmcKICogZWxlbWVudHMpIHdoaWxlIGFuIG9wZXJhdGlvbiBvbiB0aGUgbGlzdCBpcyBiZWluZyBwZXJmb3JtZWQsCiAqIGZvciBleGFtcGxlIGR1cmluZyBhIGNhbGwgdG8gW2ZvckVhY2hdIG9yIFtzb3J0XS4KICogQ2hhbmdpbmcgdGhlIGxpc3QncyBsZW5ndGggd2hpbGUgaXQgaXMgYmVpbmcgaXRlcmF0ZWQsIGVpdGhlciBieSBpdGVyYXRpbmcgaXQKICogZGlyZWN0bHkgb3IgdGhyb3VnaCBpdGVyYXRpbmcgYW4gW0l0ZXJhYmxlXSB0aGF0IGlzIGJhY2tlZCBieSB0aGUgbGlzdCwgd2lsbAogKiBicmVhayB0aGUgaXRlcmF0aW9uLgogKi8KYWJzdHJhY3QgY2xhc3MgTGlzdDxFPiBpbXBsZW1lbnRzIEVmZmljaWVudExlbmd0aEl0ZXJhYmxlPEU+IHsKICAvKioKICAgKiBDcmVhdGVzIGEgbGlzdCBvZiB0aGUgZ2l2ZW4gbGVuZ3RoLgogICAqCiAgICogVGhlIGNyZWF0ZWQgbGlzdCBpcyBmaXhlZC1sZW5ndGggaWYgW2xlbmd0aF0gaXMgcHJvdmlkZWQuCiAgICoKICAgKiAgICAgTGlzdCBmaXhlZExlbmd0aExpc3QgPSBuZXcgTGlzdCgzKTsKICAgKiAgICAgZml4ZWRMZW5ndGhMaXN0Lmxlbmd0aDsgICAgIC8vIDMKICAgKiAgICAgZml4ZWRMZW5ndGhMaXN0Lmxlbmd0aCA9IDE7IC8vIEVycm9yCiAgICoKICAgKiBUaGUgbGlzdCBoYXMgbGVuZ3RoIDAgYW5kIGlzIGdyb3dhYmxlIGlmIFtsZW5ndGhdIGlzIG9taXR0ZWQuCiAgICoKICAgKiAgICAgTGlzdCBncm93YWJsZUxpc3QgPSBuZXcgTGlzdCgpOwogICAqICAgICBncm93YWJsZUxpc3QubGVuZ3RoOyAvLyAwOwogICAqICAgICBncm93YWJsZUxpc3QubGVuZ3RoID0gMzsKICAgKgogICAqIFRvIGNyZWF0ZSBhIGdyb3dhYmxlIGxpc3Qgd2l0aCBhIGdpdmVuIGxlbmd0aCwganVzdCBhc3NpZ24gdGhlIGxlbmd0aAogICAqIHJpZ2h0IGFmdGVyIGNyZWF0aW9uOgogICAqCiAgICogICAgIExpc3QgZ3Jvd2FibGVMaXN0ID0gbmV3IExpc3QoKS4ubGVuZ3RoID0gNTAwOwogICAqCiAgICogVGhlIFtsZW5ndGhdIG11c3Qgbm90IGJlIG5lZ2F0aXZlIG9yIG51bGwsIGlmIGl0IGlzIHByb3ZpZGVkLgogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgTGlzdChbaW50IGxlbmd0aF0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbGlzdCBvZiB0aGUgZ2l2ZW4gbGVuZ3RoIHdpdGggW2ZpbGxdIGF0IGVhY2ggcG9zaXRpb24uCiAgICoKICAgKiBUaGUgW2xlbmd0aF0gbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyLgogICAqCiAgICogRXhhbXBsZToKICAgKiBgYGBkYXJ0CiAgICogbmV3IExpc3Q8aW50Pi5maWxsZWQoMywgMCwgZ3Jvd2FibGU6IHRydWUpOyAvLyBbMCwgMCwgMF0KICAgKiBgYGAKICAgKgogICAqIFRoZSBjcmVhdGVkIGxpc3QgaXMgZml4ZWQtbGVuZ3RoIGlmIFtncm93YWJsZV0gaXMgZmFsc2UgKHRoZSBkZWZhdWx0KQogICAqIGFuZCBncm93YWJsZSBpZiBbZ3Jvd2FibGVdIGlzIHRydWUuCiAgICogSWYgdGhlIGxpc3QgaXMgZ3Jvd2FibGUsIGNoYW5naW5nIGl0cyBsZW5ndGggd2lsbCBub3QgaW5pdGlhbGl6ZSBuZXcKICAgKiBlbnRyaWVzIHdpdGggW2ZpbGxdLgogICAqIEFmdGVyIGJlaW5nIGNyZWF0ZWQgYW5kIGZpbGxlZCwgdGhlIGxpc3QgaXMgbm8gZGlmZmVyZW50IGZyb20gYW55IG90aGVyCiAgICogZ3Jvd2FibGUgb3IgZml4ZWQtbGVuZ3RoIGxpc3QgY3JlYXRlZCB1c2luZyBbTGlzdF0uCiAgICoKICAgKiBBbGwgZWxlbWVudHMgb2YgdGhlIHJldHVybmVkIGxpc3Qgc2hhcmUgdGhlIHNhbWUgW2ZpbGxdIHZhbHVlLgogICAqIGBgYAogICAqIHZhciBzaGFyZWQgPSBuZXcgTGlzdC5maWxsZWQoMywgW10pOwogICAqIHNoYXJlZFswXS5hZGQoNDk5KTsKICAgKiBwcmludChzaGFyZWQpOyAgLy8gPT4gW1s0OTldLCBbNDk5XSwgWzQ5OV1dCiAgICogYGBgCiAgICoKICAgKiBZb3UgY2FuIHVzZSBbTGlzdC5nZW5lcmF0ZV0gdG8gY3JlYXRlIGEgbGlzdCB3aXRoIGEgbmV3IG9iamVjdCBhdAogICAqIGVhY2ggcG9zaXRpb24uCiAgICogYGBgCiAgICogdmFyIHVuaXF1ZSA9IG5ldyBMaXN0LmdlbmVyYXRlKDMsIChfKSA9PiBbXSk7CiAgICogdW5pcXVlWzBdLmFkZCg0OTkpOwogICAqIHByaW50KHVuaXF1ZSk7IC8vID0+IFtbNDk5XSwgW10sIFtdXQogICAqIGBgYAogICAqLwogIGV4dGVybmFsIGZhY3RvcnkgTGlzdC5maWxsZWQoaW50IGxlbmd0aCwgRSBmaWxsLCB7Ym9vbCBncm93YWJsZSA9IGZhbHNlfSk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBsaXN0IGNvbnRhaW5pbmcgYWxsIFtlbGVtZW50c10uCiAgICoKICAgKiBUaGUgW0l0ZXJhdG9yXSBvZiBbZWxlbWVudHNdIHByb3ZpZGVzIHRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHMuCiAgICoKICAgKiBBbGwgdGhlIFtlbGVtZW50c10gc2hvdWxkIGJlIGluc3RhbmNlcyBvZiBbRV0uCiAgICogVGhlIGBlbGVtZW50c2AgaXRlcmFibGUgaXRzZWxmIG1heSBoYXZlIGFueSBlbGVtZW50IHR5cGUsIHNvIHRoaXMKICAgKiBjb25zdHJ1Y3RvciBjYW4gYmUgdXNlZCB0byBkb3duLWNhc3QgYSBgTGlzdGAsIGZvciBleGFtcGxlIGFzOgogICAqIGBgYGRhcnQKICAgKiBMaXN0PFN1cGVyVHlwZT4gc3VwZXJMaXN0ID0gLi4uOwogICAqIExpc3Q8U3ViVHlwZT4gc3ViTGlzdCA9CiAgICogICAgIG5ldyBMaXN0PFN1YlR5cGU+LmZyb20oc3VwZXJMaXN0LndoZXJlVHlwZTxTdWJUeXBlPigpKTsKICAgKiBgYGAKICAgKgogICAqIFRoaXMgY29uc3RydWN0b3IgY3JlYXRlcyBhIGdyb3dhYmxlIGxpc3Qgd2hlbiBbZ3Jvd2FibGVdIGlzIHRydWU7CiAgICogb3RoZXJ3aXNlLCBpdCByZXR1cm5zIGEgZml4ZWQtbGVuZ3RoIGxpc3QuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBMaXN0LmZyb20oSXRlcmFibGUgZWxlbWVudHMsIHtib29sIGdyb3dhYmxlID0gdHJ1ZX0pOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbGlzdCBmcm9tIFtlbGVtZW50c10uCiAgICoKICAgKiBUaGUgW0l0ZXJhdG9yXSBvZiBbZWxlbWVudHNdIHByb3ZpZGVzIHRoZSBvcmRlciBvZiB0aGUgZWxlbWVudHMuCiAgICoKICAgKiBUaGlzIGNvbnN0cnVjdG9yIGNyZWF0ZXMgYSBncm93YWJsZSBsaXN0IHdoZW4gW2dyb3dhYmxlXSBpcyB0cnVlOwogICAqIG90aGVyd2lzZSwgaXQgcmV0dXJucyBhIGZpeGVkLWxlbmd0aCBsaXN0LgogICAqLwogIGZhY3RvcnkgTGlzdC5vZihJdGVyYWJsZTxFPiBlbGVtZW50cywge2Jvb2wgZ3Jvd2FibGUgPSB0cnVlfSkgPT4KICAgICAgTGlzdDxFPi5mcm9tKGVsZW1lbnRzLCBncm93YWJsZTogZ3Jvd2FibGUpOwoKICAvKioKICAgKiBHZW5lcmF0ZXMgYSBsaXN0IG9mIHZhbHVlcy4KICAgKgogICAqIENyZWF0ZXMgYSBsaXN0IHdpdGggW2xlbmd0aF0gcG9zaXRpb25zIGFuZCBmaWxscyBpdCB3aXRoIHZhbHVlcyBjcmVhdGVkIGJ5CiAgICogY2FsbGluZyBbZ2VuZXJhdG9yXSBmb3IgZWFjaCBpbmRleCBpbiB0aGUgcmFuZ2UgYDBgIC4uIGBsZW5ndGggLSAxYAogICAqIGluIGluY3JlYXNpbmcgb3JkZXIuCiAgICoKICAgKiAgICAgbmV3IExpc3Q8aW50Pi5nZW5lcmF0ZSgzLCAoaW50IGluZGV4KSA9PiBpbmRleCAqIGluZGV4KTsgLy8gWzAsIDEsIDRdCiAgICoKICAgKiBUaGUgY3JlYXRlZCBsaXN0IGlzIGZpeGVkLWxlbmd0aCB1bmxlc3MgW2dyb3dhYmxlXSBpcyB0cnVlLgogICAqLwogIGZhY3RvcnkgTGlzdC5nZW5lcmF0ZShpbnQgbGVuZ3RoLCBFIGdlbmVyYXRvcihpbnQgaW5kZXgpLAogICAgICB7Ym9vbCBncm93YWJsZSA9IHRydWV9KSB7CiAgICBMaXN0PEU+IHJlc3VsdDsKICAgIGlmIChncm93YWJsZSkgewogICAgICByZXN1bHQgPSA8RT5bXS4ubGVuZ3RoID0gbGVuZ3RoOwogICAgfSBlbHNlIHsKICAgICAgcmVzdWx0ID0gTGlzdDxFPihsZW5ndGgpOwogICAgfQogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICByZXN1bHRbaV0gPSBnZW5lcmF0b3IoaSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH0KCiAgLyoqCiAgICogQ3JlYXRlcyBhbiB1bm1vZGlmaWFibGUgbGlzdCBjb250YWluaW5nIGFsbCBbZWxlbWVudHNdLgogICAqCiAgICogVGhlIFtJdGVyYXRvcl0gb2YgW2VsZW1lbnRzXSBwcm92aWRlcyB0aGUgb3JkZXIgb2YgdGhlIGVsZW1lbnRzLgogICAqCiAgICogQW4gdW5tb2RpZmlhYmxlIGxpc3QgY2Fubm90IGhhdmUgaXRzIGxlbmd0aCBvciBlbGVtZW50cyBjaGFuZ2VkLgogICAqIElmIHRoZSBlbGVtZW50cyBhcmUgdGhlbXNlbHZlcyBpbW11dGFibGUsIHRoZW4gdGhlIHJlc3VsdGluZyBsaXN0CiAgICogaXMgYWxzbyBpbW11dGFibGUuCiAgICovCiAgZXh0ZXJuYWwgZmFjdG9yeSBMaXN0LnVubW9kaWZpYWJsZShJdGVyYWJsZSBlbGVtZW50cyk7CgogIC8qKgogICAqIEFkYXB0cyBbc291cmNlXSB0byBiZSBhIGBMaXN0PFQ+YC4KICAgKgogICAqIEFueSB0aW1lIHRoZSBsaXN0IHdvdWxkIHByb2R1Y2UgYW4gZWxlbWVudCB0aGF0IGlzIG5vdCBhIFtUXSwKICAgKiB0aGUgZWxlbWVudCBhY2Nlc3Mgd2lsbCB0aHJvdy4KICAgKgogICAqIEFueSB0aW1lIGEgW1RdIHZhbHVlIGlzIGF0dGVtcHRlZCBzdG9yZWQgaW50byB0aGUgYWRhcHRlZCBsaXN0LAogICAqIHRoZSBzdG9yZSB3aWxsIHRocm93IHVubGVzcyB0aGUgdmFsdWUgaXMgYWxzbyBhbiBpbnN0YW5jZSBvZiBbU10uCiAgICoKICAgKiBJZiBhbGwgYWNjZXNzZWQgZWxlbWVudHMgb2YgW3NvdXJjZV0gYXJlIGFjdHVhbGx5IGluc3RhbmNlcyBvZiBbVF0sCiAgICogYW5kIGlmIGFsbCBlbGVtZW50cyBzdG9yZWQgaW50byB0aGUgcmV0dXJuZWQgbGlzdCBhcmUgYWN0dWFsbHkgaW5zdGFuY2UKICAgKiBvZiBbU10sCiAgICogdGhlbiB0aGUgcmV0dXJuZWQgbGlzdCBjYW4gYmUgdXNlZCBhcyBhIGBMaXN0PFQ+YC4KICAgKi8KICBzdGF0aWMgTGlzdDxUPiBjYXN0RnJvbTxTLCBUPihMaXN0PFM+IHNvdXJjZSkgPT4gQ2FzdExpc3Q8UywgVD4oc291cmNlKTsKCiAgLyoqCiAgICogQ29weSBhIHJhbmdlIG9mIG9uZSBsaXN0IGludG8gYW5vdGhlciBsaXN0LgogICAqCiAgICogVGhpcyBpcyBhIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBpbXBsZW1lbnQgbWV0aG9kcyBsaWtlCiAgICogW3NldFJhbmdlXS4KICAgKgogICAqIFRoZSByYW5nZSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gbXVzdCBiZSBhIHZhbGlkIHJhbmdlIG9mIFtzb3VyY2VdLAogICAqIGFuZCB0aGVyZSBtdXN0IGJlIHJvb20gZm9yIGBlbmQgLSBzdGFydGAgZWxlbWVudHMgZnJvbSBwb3NpdGlvbiBbYXRdLgogICAqIElmIFtzdGFydF0gaXMgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gemVyby4KICAgKiBJZiBbZW5kXSBpcyBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBbc291cmNlLmxlbmd0aF0uCiAgICoKICAgKiBJZiBbc291cmNlXSBhbmQgW3RhcmdldF0gaXMgdGhlIHNhbWUgbGlzdCwgb3ZlcmxhcHBpbmcgc291cmNlIGFuZCB0YXJnZXQKICAgKiByYW5nZXMgYXJlIHJlc3BlY3RlZCBzbyB0aGF0IHRoZSB0YXJnZXQgcmFuZ2UgZW5kcyB1cCBjb250YWluaW5nIHRoZQogICAqIGluaXRpYWwgY29udGVudCBvZiB0aGUgc291cmNlIHJhbmdlLgogICAqIE90aGVyd2lzZSB0aGUgb3JkZXIgb2YgZWxlbWVudCBjb3B5aW5nIGlzIG5vdCBndWFyYW50ZWVkLgogICAqLwogIHN0YXRpYyB2b2lkIGNvcHlSYW5nZTxUPihMaXN0PFQ+IHRhcmdldCwgaW50IGF0LCBMaXN0PFQ+IHNvdXJjZSwKICAgICAgW2ludCBzdGFydCwgaW50IGVuZF0pIHsKICAgIHN0YXJ0ID8/PSAwOwogICAgZW5kID0gUmFuZ2VFcnJvci5jaGVja1ZhbGlkUmFuZ2Uoc3RhcnQsIGVuZCwgc291cmNlLmxlbmd0aCk7CiAgICBpbnQgbGVuZ3RoID0gZW5kIC0gc3RhcnQ7CiAgICBpZiAodGFyZ2V0Lmxlbmd0aCA8IGF0ICsgbGVuZ3RoKSB7CiAgICAgIHRocm93IEFyZ3VtZW50RXJyb3IudmFsdWUodGFyZ2V0LCAidGFyZ2V0IiwKICAgICAgICAgICJOb3QgYmlnIGVub3VnaCB0byBob2xkICRsZW5ndGggZWxlbWVudHMgYXQgcG9zaXRpb24gJGF0Iik7CiAgICB9CiAgICBpZiAoIWlkZW50aWNhbChzb3VyY2UsIHRhcmdldCkgfHwgc3RhcnQgPj0gYXQpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIHRhcmdldFthdCArIGldID0gc291cmNlW3N0YXJ0ICsgaV07CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGZvciAoaW50IGkgPSBsZW5ndGg7IC0taSA+PSAwOykgewogICAgICAgIHRhcmdldFthdCArIGldID0gc291cmNlW3N0YXJ0ICsgaV07CiAgICAgIH0KICAgIH0KICB9CgogIC8qKgogICAqIFdyaXRlIHRoZSBlbGVtZW50cyBvZiBhbiBpdGVyYWJsZSBpbnRvIGEgbGlzdC4KICAgKgogICAqIFRoaXMgaXMgYSB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHVzZWQgdG8gaW1wbGVtZW50IG1ldGhvZHMgbGlrZQogICAqIFtzZXRBbGxdLgogICAqCiAgICogVGhlIGVsZW1lbnRzIG9mIFtzb3VyY2VdIGFyZSB3cml0dGVuIGludG8gW3RhcmdldF0gZnJvbSBwb3NpdGlvbiBbYXRdLgogICAqIFRoZSBbc291cmNlXSBtdXN0IG5vdCBjb250YWluIG1vcmUgZWxlbWVudHMgYWZ0ZXIgd3JpdGluZyB0aGUgbGFzdAogICAqIHBvc2l0aW9uIG9mIFt0YXJnZXRdLgogICAqCiAgICogSWYgdGhlIHNvdXJjZSBpcyBhIGxpc3QsIHRoZSBbY29weVJhbmdlXSBmdW5jdGlvbiBpcyBsaWtlbHkgdG8gYmUgbW9yZQogICAqIGVmZmljaWVudC4KICAgKi8KICBzdGF0aWMgdm9pZCB3cml0ZUl0ZXJhYmxlPFQ+KExpc3Q8VD4gdGFyZ2V0LCBpbnQgYXQsIEl0ZXJhYmxlPFQ+IHNvdXJjZSkgewogICAgUmFuZ2VFcnJvci5jaGVja1ZhbHVlSW5JbnRlcnZhbChhdCwgMCwgdGFyZ2V0Lmxlbmd0aCwgImF0Iik7CiAgICBpbnQgaW5kZXggPSBhdDsKICAgIGludCB0YXJnZXRMZW5ndGggPSB0YXJnZXQubGVuZ3RoOwogICAgZm9yICh2YXIgZWxlbWVudCBpbiBzb3VyY2UpIHsKICAgICAgaWYgKGluZGV4ID09IHRhcmdldExlbmd0aCkgewogICAgICAgIHRocm93IEluZGV4RXJyb3IodGFyZ2V0TGVuZ3RoLCB0YXJnZXQpOwogICAgICB9CiAgICAgIHRhcmdldFtpbmRleF0gPSBlbGVtZW50OwogICAgICBpbmRleCsrOwogICAgfQogIH0KCiAgLyoqCiAgICogUmV0dXJucyBhIHZpZXcgb2YgdGhpcyBsaXN0IGFzIGEgbGlzdCBvZiBbUl0gaW5zdGFuY2VzLgogICAqCiAgICogSWYgdGhpcyBsaXN0IGNvbnRhaW5zIG9ubHkgaW5zdGFuY2VzIG9mIFtSXSwgYWxsIHJlYWQgb3BlcmF0aW9ucwogICAqIHdpbGwgd29yayBjb3JyZWN0bHkuIElmIGFueSBvcGVyYXRpb24gdHJpZXMgdG8gYWNjZXNzIGFuIGVsZW1lbnQKICAgKiB0aGF0IGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBbUl0sIHRoZSBhY2Nlc3Mgd2lsbCB0aHJvdyBpbnN0ZWFkLgogICAqCiAgICogRWxlbWVudHMgYWRkZWQgdG8gdGhlIGxpc3QgKGUuZy4sIGJ5IHVzaW5nIFthZGRdIG9yIFthZGRBbGxdKQogICAqIG11c3QgYmUgaW5zdGFuY2Ugb2YgW1JdIHRvIGJlIHZhbGlkIGFyZ3VtZW50cyB0byB0aGUgYWRkaW5nIGZ1bmN0aW9uLAogICAqIGFuZCB0aGV5IG11c3QgYmUgaW5zdGFuY2VzIG9mIFtFXSBhcyB3ZWxsIHRvIGJlIGFjY2VwdGVkIGJ5CiAgICogdGhpcyBsaXN0IGFzIHdlbGwuCiAgICoKICAgKiBUeXBpY2FsbHkgaW1wbGVtZW50ZWQgYXMgYExpc3QuY2FzdEZyb208RSwgUj4odGhpcylgLgogICAqLwogIExpc3Q8Uj4gY2FzdDxSPigpOwogIC8qKgogICAqIFJldHVybnMgdGhlIG9iamVjdCBhdCB0aGUgZ2l2ZW4gW2luZGV4XSBpbiB0aGUgbGlzdAogICAqIG9yIHRocm93cyBhIFtSYW5nZUVycm9yXSBpZiBbaW5kZXhdIGlzIG91dCBvZiBib3VuZHMuCiAgICovCiAgRSBvcGVyYXRvciBbXShpbnQgaW5kZXgpOwoKICAvKioKICAgKiBTZXRzIHRoZSB2YWx1ZSBhdCB0aGUgZ2l2ZW4gW2luZGV4XSBpbiB0aGUgbGlzdCB0byBbdmFsdWVdCiAgICogb3IgdGhyb3dzIGEgW1JhbmdlRXJyb3JdIGlmIFtpbmRleF0gaXMgb3V0IG9mIGJvdW5kcy4KICAgKi8KICB2b2lkIG9wZXJhdG9yIFtdPShpbnQgaW5kZXgsIEUgdmFsdWUpOwoKICAvKioKICAgKiBVcGRhdGVzIHRoZSBmaXJzdCBwb3NpdGlvbiBvZiB0aGUgbGlzdCB0byBjb250YWluIFt2YWx1ZV0uCiAgICoKICAgKiBFcXVpdmFsZW50IHRvIGB0aGVMaXN0WzBdID0gdmFsdWU7YC4KICAgKgogICAqIFRoZSBsaXN0IG11c3QgYmUgbm9uLWVtcHR5LgogICAqLwogIHZvaWQgc2V0IGZpcnN0KEUgdmFsdWUpOwoKICAvKioKICAgKiBVcGRhdGVzIHRoZSBsYXN0IHBvc2l0aW9uIG9mIHRoZSBsaXN0IHRvIGNvbnRhaW4gW3ZhbHVlXS4KICAgKgogICAqIEVxdWl2YWxlbnQgdG8gYHRoZUxpc3RbdGhlTGlzdC5sZW5ndGggLSAxXSA9IHZhbHVlO2AuCiAgICoKICAgKiBUaGUgbGlzdCBtdXN0IGJlIG5vbi1lbXB0eS4KICAgKi8KICB2b2lkIHNldCBsYXN0KEUgdmFsdWUpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBUaGUgdmFsaWQgaW5kaWNlcyBmb3IgYSBsaXN0IGFyZSBgMGAgdGhyb3VnaCBgbGVuZ3RoIC0gMWAuCiAgICovCiAgaW50IGdldCBsZW5ndGg7CgogIC8qKgogICAqIENoYW5nZXMgdGhlIGxlbmd0aCBvZiB0aGlzIGxpc3QuCiAgICoKICAgKiBJZiBbbmV3TGVuZ3RoXSBpcyBncmVhdGVyIHRoYW4KICAgKiB0aGUgY3VycmVudCBsZW5ndGgsIGVudHJpZXMgYXJlIGluaXRpYWxpemVkIHRvIFs6bnVsbDpdLgogICAqCiAgICogVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXSBpZiB0aGUgbGlzdCBpcyBmaXhlZC1sZW5ndGguCiAgICovCiAgc2V0IGxlbmd0aChpbnQgbmV3TGVuZ3RoKTsKCiAgLyoqCiAgICogQWRkcyBbdmFsdWVdIHRvIHRoZSBlbmQgb2YgdGhpcyBsaXN0LAogICAqIGV4dGVuZGluZyB0aGUgbGVuZ3RoIGJ5IG9uZS4KICAgKgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaWYgdGhlIGxpc3QgaXMgZml4ZWQtbGVuZ3RoLgogICAqLwogIHZvaWQgYWRkKEUgdmFsdWUpOwoKICAvKioKICAgKiBBcHBlbmRzIGFsbCBvYmplY3RzIG9mIFtpdGVyYWJsZV0gdG8gdGhlIGVuZCBvZiB0aGlzIGxpc3QuCiAgICoKICAgKiBFeHRlbmRzIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYnkgdGhlIG51bWJlciBvZiBvYmplY3RzIGluIFtpdGVyYWJsZV0uCiAgICogVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXSBpZiB0aGlzIGxpc3QgaXMgZml4ZWQtbGVuZ3RoLgogICAqLwogIHZvaWQgYWRkQWxsKEl0ZXJhYmxlPEU+IGl0ZXJhYmxlKTsKCiAgLyoqCiAgICogUmV0dXJucyBhbiBbSXRlcmFibGVdIG9mIHRoZSBvYmplY3RzIGluIHRoaXMgbGlzdCBpbiByZXZlcnNlIG9yZGVyLgogICAqLwogIEl0ZXJhYmxlPEU+IGdldCByZXZlcnNlZDsKCiAgLyoqCiAgICogU29ydHMgdGhpcyBsaXN0IGFjY29yZGluZyB0byB0aGUgb3JkZXIgc3BlY2lmaWVkIGJ5IHRoZSBbY29tcGFyZV0gZnVuY3Rpb24uCiAgICoKICAgKiBUaGUgW2NvbXBhcmVdIGZ1bmN0aW9uIG11c3QgYWN0IGFzIGEgW0NvbXBhcmF0b3JdLgogICAqCiAgICogICAgIExpc3Q8U3RyaW5nPiBudW1iZXJzID0gWyd0d28nLCAndGhyZWUnLCAnZm91ciddOwogICAqICAgICAvLyBTb3J0IGZyb20gc2hvcnRlc3QgdG8gbG9uZ2VzdC4KICAgKiAgICAgbnVtYmVycy5zb3J0KChhLCBiKSA9PiBhLmxlbmd0aC5jb21wYXJlVG8oYi5sZW5ndGgpKTsKICAgKiAgICAgcHJpbnQobnVtYmVycyk7ICAvLyBbdHdvLCBmb3VyLCB0aHJlZV0KICAgKgogICAqIFRoZSBkZWZhdWx0IExpc3QgaW1wbGVtZW50YXRpb25zIHVzZSBbQ29tcGFyYWJsZS5jb21wYXJlXSBpZgogICAqIFtjb21wYXJlXSBpcyBvbWl0dGVkLgogICAqCiAgICogICAgIExpc3Q8aW50PiBudW1zID0gWzEzLCAyLCAtMTFdOwogICAqICAgICBudW1zLnNvcnQoKTsKICAgKiAgICAgcHJpbnQobnVtcyk7ICAvLyBbLTExLCAyLCAxM10KICAgKgogICAqIEEgW0NvbXBhcmF0b3JdIG1heSBjb21wYXJlIG9iamVjdHMgYXMgZXF1YWwgKHJldHVybiB6ZXJvKSwgZXZlbiBpZiB0aGV5CiAgICogYXJlIGRpc3RpbmN0IG9iamVjdHMuCiAgICogVGhlIHNvcnQgZnVuY3Rpb24gaXMgbm90IGd1YXJhbnRlZWQgdG8gYmUgc3RhYmxlLCBzbyBkaXN0aW5jdCBvYmplY3RzCiAgICogdGhhdCBjb21wYXJlIGFzIGVxdWFsIG1heSBvY2N1ciBpbiBhbnkgb3JkZXIgaW4gdGhlIHJlc3VsdDoKICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gbnVtYmVycyA9IFsnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJ107CiAgICogICAgIG51bWJlcnMuc29ydCgoYSwgYikgPT4gYS5sZW5ndGguY29tcGFyZVRvKGIubGVuZ3RoKSk7CiAgICogICAgIHByaW50KG51bWJlcnMpOyAgLy8gW29uZSwgdHdvLCBmb3VyLCB0aHJlZV0gT1IgW3R3bywgb25lLCBmb3VyLCB0aHJlZV0KICAgKi8KICB2b2lkIHNvcnQoW2ludCBjb21wYXJlKEUgYSwgRSBiKV0pOwoKICAvKioKICAgKiBTaHVmZmxlcyB0aGUgZWxlbWVudHMgb2YgdGhpcyBsaXN0IHJhbmRvbWx5LgogICAqLwogIHZvaWQgc2h1ZmZsZShbUmFuZG9tIHJhbmRvbV0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBmaXJzdCBpbmRleCBvZiBbZWxlbWVudF0gaW4gdGhpcyBsaXN0LgogICAqCiAgICogU2VhcmNoZXMgdGhlIGxpc3QgZnJvbSBpbmRleCBbc3RhcnRdIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAgICogVGhlIGZpcnN0IHRpbWUgYW4gb2JqZWN0IFs6bzpdIGlzIGVuY291bnRlcmVkIHNvIHRoYXQgWzpvID09IGVsZW1lbnQ6XSwKICAgKiB0aGUgaW5kZXggb2YgWzpvOl0gaXMgcmV0dXJuZWQuCiAgICoKICAgKiAgICAgTGlzdDxTdHJpbmc+IG5vdGVzID0gWydkbycsICdyZScsICdtaScsICdyZSddOwogICAqICAgICBub3Rlcy5pbmRleE9mKCdyZScpOyAgICAvLyAxCiAgICogICAgIG5vdGVzLmluZGV4T2YoJ3JlJywgMik7IC8vIDMKICAgKgogICAqIFJldHVybnMgLTEgaWYgW2VsZW1lbnRdIGlzIG5vdCBmb3VuZC4KICAgKgogICAqICAgICBub3Rlcy5pbmRleE9mKCdmYScpOyAgICAvLyAtMQogICAqLwogIGludCBpbmRleE9mKEUgZWxlbWVudCwgW2ludCBzdGFydCA9IDBdKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgZmlyc3QgaW5kZXggaW4gdGhlIGxpc3QgdGhhdCBzYXRpc2ZpZXMgdGhlIHByb3ZpZGVkIFt0ZXN0XS4KICAgKgogICAqIFNlYXJjaGVzIHRoZSBsaXN0IGZyb20gaW5kZXggW3N0YXJ0XSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAqIFRoZSBmaXJzdCB0aW1lIGFuIG9iamVjdCBgb2AgaXMgZW5jb3VudGVyZWQgc28gdGhhdCBgdGVzdChvKWAgaXMgdHJ1ZSwKICAgKiB0aGUgaW5kZXggb2YgYG9gIGlzIHJldHVybmVkLgogICAqCiAgICogYGBgCiAgICogTGlzdDxTdHJpbmc+IG5vdGVzID0gWydkbycsICdyZScsICdtaScsICdyZSddOwogICAqIG5vdGVzLmluZGV4V2hlcmUoKG5vdGUpID0+IG5vdGUuc3RhcnRzV2l0aCgncicpKTsgICAgICAgLy8gMQogICAqIG5vdGVzLmluZGV4V2hlcmUoKG5vdGUpID0+IG5vdGUuc3RhcnRzV2l0aCgncicpLCAyKTsgICAgLy8gMwogICAqIGBgYAogICAqCiAgICogUmV0dXJucyAtMSBpZiBbZWxlbWVudF0gaXMgbm90IGZvdW5kLgogICAqIGBgYAogICAqIG5vdGVzLmluZGV4V2hlcmUoKG5vdGUpID0+IG5vdGUuc3RhcnRzV2l0aCgnaycpKTsgICAgLy8gLTEKICAgKiBgYGAKICAgKi8KICBpbnQgaW5kZXhXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwgW2ludCBzdGFydCA9IDBdKTsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGFzdCBpbmRleCBpbiB0aGUgbGlzdCB0aGF0IHNhdGlzZmllcyB0aGUgcHJvdmlkZWQgW3Rlc3RdLgogICAqCiAgICogU2VhcmNoZXMgdGhlIGxpc3QgZnJvbSBpbmRleCBbc3RhcnRdIHRvIDAuCiAgICogVGhlIGZpcnN0IHRpbWUgYW4gb2JqZWN0IGBvYCBpcyBlbmNvdW50ZXJlZCBzbyB0aGF0IGB0ZXN0KG8pYCBpcyB0cnVlLAogICAqIHRoZSBpbmRleCBvZiBgb2AgaXMgcmV0dXJuZWQuCiAgICoKICAgKiBgYGAKICAgKiBMaXN0PFN0cmluZz4gbm90ZXMgPSBbJ2RvJywgJ3JlJywgJ21pJywgJ3JlJ107CiAgICogbm90ZXMubGFzdEluZGV4V2hlcmUoKG5vdGUpID0+IG5vdGUuc3RhcnRzV2l0aCgncicpKTsgICAgICAgLy8gMwogICAqIG5vdGVzLmxhc3RJbmRleFdoZXJlKChub3RlKSA9PiBub3RlLnN0YXJ0c1dpdGgoJ3InKSwgMik7ICAgIC8vIDEKICAgKiBgYGAKICAgKgogICAqIFJldHVybnMgLTEgaWYgW2VsZW1lbnRdIGlzIG5vdCBmb3VuZC4KICAgKiBgYGAKICAgKiBub3Rlcy5sYXN0SW5kZXhXaGVyZSgobm90ZSkgPT4gbm90ZS5zdGFydHNXaXRoKCdrJykpOyAgICAvLyAtMQogICAqIGBgYAogICAqLwogIGludCBsYXN0SW5kZXhXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSwgW2ludCBzdGFydF0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsYXN0IGluZGV4IG9mIFtlbGVtZW50XSBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBTZWFyY2hlcyB0aGUgbGlzdCBiYWNrd2FyZHMgZnJvbSBpbmRleCBbc3RhcnRdIHRvIDAuCiAgICoKICAgKiBUaGUgZmlyc3QgdGltZSBhbiBvYmplY3QgWzpvOl0gaXMgZW5jb3VudGVyZWQgc28gdGhhdCBbOm8gPT0gZWxlbWVudDpdLAogICAqIHRoZSBpbmRleCBvZiBbOm86XSBpcyByZXR1cm5lZC4KICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gbm90ZXMgPSBbJ2RvJywgJ3JlJywgJ21pJywgJ3JlJ107CiAgICogICAgIG5vdGVzLmxhc3RJbmRleE9mKCdyZScsIDIpOyAvLyAxCiAgICoKICAgKiBJZiBbc3RhcnRdIGlzIG5vdCBwcm92aWRlZCwgdGhpcyBtZXRob2Qgc2VhcmNoZXMgZnJvbSB0aGUgZW5kIG9mIHRoZQogICAqIGxpc3QuL1JldHVybnMKICAgKgogICAqICAgICBub3Rlcy5sYXN0SW5kZXhPZigncmUnKTsgIC8vIDMKICAgKgogICAqIFJldHVybnMgLTEgaWYgW2VsZW1lbnRdIGlzIG5vdCBmb3VuZC4KICAgKgogICAqICAgICBub3Rlcy5sYXN0SW5kZXhPZignZmEnKTsgIC8vIC0xCiAgICovCiAgaW50IGxhc3RJbmRleE9mKEUgZWxlbWVudCwgW2ludCBzdGFydF0pOwoKICAvKioKICAgKiBSZW1vdmVzIGFsbCBvYmplY3RzIGZyb20gdGhpcyBsaXN0OwogICAqIHRoZSBsZW5ndGggb2YgdGhlIGxpc3QgYmVjb21lcyB6ZXJvLgogICAqCiAgICogVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXSwgYW5kIHJldGFpbnMgYWxsIG9iamVjdHMsIGlmIHRoaXMKICAgKiBpcyBhIGZpeGVkLWxlbmd0aCBsaXN0LgogICAqLwogIHZvaWQgY2xlYXIoKTsKCiAgLyoqCiAgICogSW5zZXJ0cyB0aGUgb2JqZWN0IGF0IHBvc2l0aW9uIFtpbmRleF0gaW4gdGhpcyBsaXN0LgogICAqCiAgICogVGhpcyBpbmNyZWFzZXMgdGhlIGxlbmd0aCBvZiB0aGUgbGlzdCBieSBvbmUgYW5kIHNoaWZ0cyBhbGwgb2JqZWN0cwogICAqIGF0IG9yIGFmdGVyIHRoZSBpbmRleCB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIGxpc3QuCiAgICoKICAgKiBUaGUgbGlzdCBtdXN0IGJlIGdyb3dhYmxlLgogICAqIFRoZSBbaW5kZXhdIHZhbHVlIG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZCBubyBncmVhdGVyIHRoYW4gW2xlbmd0aF0uCiAgICovCiAgdm9pZCBpbnNlcnQoaW50IGluZGV4LCBFIGVsZW1lbnQpOwoKICAvKioKICAgKiBJbnNlcnRzIGFsbCBvYmplY3RzIG9mIFtpdGVyYWJsZV0gYXQgcG9zaXRpb24gW2luZGV4XSBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBUaGlzIGluY3JlYXNlcyB0aGUgbGVuZ3RoIG9mIHRoZSBsaXN0IGJ5IHRoZSBsZW5ndGggb2YgW2l0ZXJhYmxlXSBhbmQKICAgKiBzaGlmdHMgYWxsIGxhdGVyIG9iamVjdHMgdG93YXJkcyB0aGUgZW5kIG9mIHRoZSBsaXN0LgogICAqCiAgICogVGhlIGxpc3QgbXVzdCBiZSBncm93YWJsZS4KICAgKiBUaGUgW2luZGV4XSB2YWx1ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBhbmQgbm8gZ3JlYXRlciB0aGFuIFtsZW5ndGhdLgogICAqLwogIHZvaWQgaW5zZXJ0QWxsKGludCBpbmRleCwgSXRlcmFibGU8RT4gaXRlcmFibGUpOwoKICAvKioKICAgKiBPdmVyd3JpdGVzIG9iamVjdHMgb2YgYHRoaXNgIHdpdGggdGhlIG9iamVjdHMgb2YgW2l0ZXJhYmxlXSwgc3RhcnRpbmcKICAgKiBhdCBwb3NpdGlvbiBbaW5kZXhdIGluIHRoaXMgbGlzdC4KICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gbGlzdCA9IFsnYScsICdiJywgJ2MnXTsKICAgKiAgICAgbGlzdC5zZXRBbGwoMSwgWydiZWUnLCAnc2VhJ10pOwogICAqICAgICBsaXN0LmpvaW4oJywgJyk7IC8vICdhLCBiZWUsIHNlYScKICAgKgogICAqIFRoaXMgb3BlcmF0aW9uIGRvZXMgbm90IGluY3JlYXNlIHRoZSBsZW5ndGggb2YgYHRoaXNgLgogICAqCiAgICogVGhlIFtpbmRleF0gbXVzdCBiZSBub24tbmVnYXRpdmUgYW5kIG5vIGdyZWF0ZXIgdGhhbiBbbGVuZ3RoXS4KICAgKgogICAqIFRoZSBbaXRlcmFibGVdIG11c3Qgbm90IGhhdmUgbW9yZSBlbGVtZW50cyB0aGFuIHdoYXQgY2FuIGZpdCBmcm9tIFtpbmRleF0KICAgKiB0byBbbGVuZ3RoXS4KICAgKgogICAqIElmIGBpdGVyYWJsZWAgaXMgYmFzZWQgb24gdGhpcyBsaXN0LCBpdHMgdmFsdWVzIG1heSBjaGFuZ2UgL2R1cmluZy8gdGhlCiAgICogYHNldEFsbGAgb3BlcmF0aW9uLgogICAqLwogIHZvaWQgc2V0QWxsKGludCBpbmRleCwgSXRlcmFibGU8RT4gaXRlcmFibGUpOwoKICAvKioKICAgKiBSZW1vdmVzIHRoZSBmaXJzdCBvY2N1cnJlbmNlIG9mIFt2YWx1ZV0gZnJvbSB0aGlzIGxpc3QuCiAgICoKICAgKiBSZXR1cm5zIHRydWUgaWYgW3ZhbHVlXSB3YXMgaW4gdGhlIGxpc3QsIGZhbHNlIG90aGVyd2lzZS4KICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gcGFydHMgPSBbJ2hlYWQnLCAnc2hvdWxkZXJzJywgJ2tuZWVzJywgJ3RvZXMnXTsKICAgKiAgICAgcGFydHMucmVtb3ZlKCdoZWFkJyk7IC8vIHRydWUKICAgKiAgICAgcGFydHMuam9pbignLCAnKTsgICAgIC8vICdzaG91bGRlcnMsIGtuZWVzLCB0b2VzJwogICAqCiAgICogVGhlIG1ldGhvZCBoYXMgbm8gZWZmZWN0IGlmIFt2YWx1ZV0gd2FzIG5vdCBpbiB0aGUgbGlzdC4KICAgKgogICAqICAgICAvLyBOb3RlOiAnaGVhZCcgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkLgogICAqICAgICBwYXJ0cy5yZW1vdmUoJ2hlYWQnKTsgLy8gZmFsc2UKICAgKiAgICAgcGFydHMuam9pbignLCAnKTsgICAgIC8vICdzaG91bGRlcnMsIGtuZWVzLCB0b2VzJwogICAqCiAgICogQW4gW1Vuc3VwcG9ydGVkRXJyb3JdIG9jY3VycyBpZiB0aGUgbGlzdCBpcyBmaXhlZC1sZW5ndGguCiAgICovCiAgYm9vbCByZW1vdmUoT2JqZWN0IHZhbHVlKTsKCiAgLyoqCiAgICogUmVtb3ZlcyB0aGUgb2JqZWN0IGF0IHBvc2l0aW9uIFtpbmRleF0gZnJvbSB0aGlzIGxpc3QuCiAgICoKICAgKiBUaGlzIG1ldGhvZCByZWR1Y2VzIHRoZSBsZW5ndGggb2YgYHRoaXNgIGJ5IG9uZSBhbmQgbW92ZXMgYWxsIGxhdGVyIG9iamVjdHMKICAgKiBkb3duIGJ5IG9uZSBwb3NpdGlvbi4KICAgKgogICAqIFJldHVybnMgdGhlIHJlbW92ZWQgb2JqZWN0LgogICAqCiAgICogVGhlIFtpbmRleF0gbXVzdCBiZSBpbiB0aGUgcmFuZ2UgYDAg4omkIGluZGV4IDwgbGVuZ3RoYC4KICAgKgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaWYgdGhpcyBpcyBhIGZpeGVkLWxlbmd0aCBsaXN0LiBJbiB0aGF0IGNhc2UKICAgKiB0aGUgbGlzdCBpcyBub3QgbW9kaWZpZWQuCiAgICovCiAgRSByZW1vdmVBdChpbnQgaW5kZXgpOwoKICAvKioKICAgKiBQb3BzIGFuZCByZXR1cm5zIHRoZSBsYXN0IG9iamVjdCBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBUaGUgbGlzdCBtdXN0IG5vdCBiZSBlbXB0eS4KICAgKgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaWYgdGhpcyBpcyBhIGZpeGVkLWxlbmd0aCBsaXN0LgogICAqLwogIEUgcmVtb3ZlTGFzdCgpOwoKICAvKioKICAgKiBSZW1vdmVzIGFsbCBvYmplY3RzIGZyb20gdGhpcyBsaXN0IHRoYXQgc2F0aXNmeSBbdGVzdF0uCiAgICoKICAgKiBBbiBvYmplY3QgWzpvOl0gc2F0aXNmaWVzIFt0ZXN0XSBpZiBbOnRlc3Qobyk6XSBpcyB0cnVlLgogICAqCiAgICogICAgIExpc3Q8U3RyaW5nPiBudW1iZXJzID0gWydvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInXTsKICAgKiAgICAgbnVtYmVycy5yZW1vdmVXaGVyZSgoaXRlbSkgPT4gaXRlbS5sZW5ndGggPT0gMyk7CiAgICogICAgIG51bWJlcnMuam9pbignLCAnKTsgLy8gJ3RocmVlLCBmb3VyJwogICAqCiAgICogVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXSBpZiB0aGlzIGlzIGEgZml4ZWQtbGVuZ3RoIGxpc3QuCiAgICovCiAgdm9pZCByZW1vdmVXaGVyZShib29sIHRlc3QoRSBlbGVtZW50KSk7CgogIC8qKgogICAqIFJlbW92ZXMgYWxsIG9iamVjdHMgZnJvbSB0aGlzIGxpc3QgdGhhdCBmYWlsIHRvIHNhdGlzZnkgW3Rlc3RdLgogICAqCiAgICogQW4gb2JqZWN0IFs6bzpdIHNhdGlzZmllcyBbdGVzdF0gaWYgWzp0ZXN0KG8pOl0gaXMgdHJ1ZS4KICAgKgogICAqICAgICBMaXN0PFN0cmluZz4gbnVtYmVycyA9IFsnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJ107CiAgICogICAgIG51bWJlcnMucmV0YWluV2hlcmUoKGl0ZW0pID0+IGl0ZW0ubGVuZ3RoID09IDMpOwogICAqICAgICBudW1iZXJzLmpvaW4oJywgJyk7IC8vICdvbmUsIHR3bycKICAgKgogICAqIFRocm93cyBhbiBbVW5zdXBwb3J0ZWRFcnJvcl0gaWYgdGhpcyBpcyBhIGZpeGVkLWxlbmd0aCBsaXN0LgogICAqLwogIHZvaWQgcmV0YWluV2hlcmUoYm9vbCB0ZXN0KEUgZWxlbWVudCkpOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjb25jYXRlbmF0aW9uIG9mIHRoaXMgbGlzdCBhbmQgW290aGVyXS4KICAgKgogICAqIFJldHVybnMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBvZiB0aGlzIGxpc3QgZm9sbG93ZWQgYnkKICAgKiB0aGUgZWxlbWVudHMgb2YgW290aGVyXS4KICAgKgogICAqIFRoZSBkZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHJldHVybiBhIG5vcm1hbCBncm93YWJsZSBsaXN0LgogICAqIFNvbWUgbGlzdCB0eXBlcyBtYXkgY2hvb3NlIHRvIHJldHVybiBhIGxpc3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGVtc2VsdmVzCiAgICogKHNlZSBbVWludDhMaXN0LitdKTsKICAgKi8KICBMaXN0PEU+IG9wZXJhdG9yICsoTGlzdDxFPiBvdGhlcik7CgogIC8qKgogICAqIFJldHVybnMgYSBuZXcgbGlzdCBjb250YWluaW5nIHRoZSBlbGVtZW50cyBiZXR3ZWVuIFtzdGFydF0gYW5kIFtlbmRdLgogICAqCiAgICogVGhlIG5ldyBsaXN0IGlzIGEgYExpc3Q8RT5gIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnRzIG9mIHRoaXMgbGlzdCBhdAogICAqIHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gW3N0YXJ0XSBhbmQgbGVzcyB0aGFuIFtlbmRdIGluIHRoZSBzYW1lCiAgICogb3JkZXIgYXMgdGhleSBvY2N1ciBpbiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogdmFyIGNvbG9ycyA9IFsicmVkIiwgImdyZWVuIiwgImJsdWUiLCAib3JhbmdlIiwgInBpbmsiXTsKICAgKiBwcmludChjb2xvcnMuc3VibGlzdCgxLCAzKSk7IC8vIFtncmVlbiwgYmx1ZV0KICAgKiBgYGAKICAgKgogICAqIElmIFtlbmRdIGlzIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIHRoZSBbbGVuZ3RoXSBvZiB0aGlzIGxpc3QuCiAgICoKICAgKiBgYGBkYXJ0CiAgICogcHJpbnQoY29sb3JzLnN1Ymxpc3QoMSkpOyAvLyBbZ3JlZW4sIGJsdWUsIG9yYW5nZSwgcGlua10KICAgKiBgYGAKICAgKgogICAqIFRoZSBgc3RhcnRgIGFuZCBgZW5kYCBwb3NpdGlvbnMgbXVzdCBzYXRpc2Z5IHRoZSByZWxhdGlvbnMKICAgKiAwIOKJpCBgc3RhcnRgIOKJpCBgZW5kYCDiiaQgYHRoaXMubGVuZ3RoYAogICAqIElmIGBlbmRgIGlzIGVxdWFsIHRvIGBzdGFydGAsIHRoZW4gdGhlIHJldHVybmVkIGxpc3QgaXMgZW1wdHkuCiAgICovCiAgTGlzdDxFPiBzdWJsaXN0KGludCBzdGFydCwgW2ludCBlbmRdKTsKCiAgLyoqCiAgICogUmV0dXJucyBhbiBbSXRlcmFibGVdIHRoYXQgaXRlcmF0ZXMgb3ZlciB0aGUgb2JqZWN0cyBpbiB0aGUgcmFuZ2UKICAgKiBbc3RhcnRdIGluY2x1c2l2ZSB0byBbZW5kXSBleGNsdXNpdmUuCiAgICoKICAgKiBUaGUgcHJvdmlkZWQgcmFuZ2UsIGdpdmVuIGJ5IFtzdGFydF0gYW5kIFtlbmRdLCBtdXN0IGJlIHZhbGlkIGF0IHRoZSB0aW1lCiAgICogb2YgdGhlIGNhbGwuCiAgICoKICAgKiBBIHJhbmdlIGZyb20gW3N0YXJ0XSB0byBbZW5kXSBpcyB2YWxpZCBpZiBgMCA8PSBzdGFydCA8PSBlbmQgPD0gbGVuYCwgd2hlcmUKICAgKiBgbGVuYCBpcyB0aGlzIGxpc3QncyBgbGVuZ3RoYC4gVGhlIHJhbmdlIHN0YXJ0cyBhdCBgc3RhcnRgIGFuZCBoYXMgbGVuZ3RoCiAgICogYGVuZCAtIHN0YXJ0YC4gQW4gZW1wdHkgcmFuZ2UgKHdpdGggYGVuZCA9PSBzdGFydGApIGlzIHZhbGlkLgogICAqCiAgICogVGhlIHJldHVybmVkIFtJdGVyYWJsZV0gYmVoYXZlcyBsaWtlIGBza2lwKHN0YXJ0KS50YWtlKGVuZCAtIHN0YXJ0KWAuCiAgICogVGhhdCBpcywgaXQgZG9lcyAqbm90KiB0aHJvdyBpZiB0aGlzIGxpc3QgY2hhbmdlcyBzaXplLgogICAqCiAgICogICAgIExpc3Q8U3RyaW5nPiBjb2xvcnMgPSBbJ3JlZCcsICdncmVlbicsICdibHVlJywgJ29yYW5nZScsICdwaW5rJ107CiAgICogICAgIEl0ZXJhYmxlPFN0cmluZz4gcmFuZ2UgPSBjb2xvcnMuZ2V0UmFuZ2UoMSwgNCk7CiAgICogICAgIHJhbmdlLmpvaW4oJywgJyk7ICAvLyAnZ3JlZW4sIGJsdWUsIG9yYW5nZScKICAgKiAgICAgY29sb3JzLmxlbmd0aCA9IDM7CiAgICogICAgIHJhbmdlLmpvaW4oJywgJyk7ICAvLyAnZ3JlZW4sIGJsdWUnCiAgICovCiAgSXRlcmFibGU8RT4gZ2V0UmFuZ2UoaW50IHN0YXJ0LCBpbnQgZW5kKTsKCiAgLyoqCiAgICogQ29waWVzIHRoZSBvYmplY3RzIG9mIFtpdGVyYWJsZV0sIHNraXBwaW5nIFtza2lwQ291bnRdIG9iamVjdHMgZmlyc3QsCiAgICogaW50byB0aGUgcmFuZ2UgW3N0YXJ0XSwgaW5jbHVzaXZlLCB0byBbZW5kXSwgZXhjbHVzaXZlLCBvZiB0aGUgbGlzdC4KICAgKgogICAqICAgICBMaXN0PGludD4gbGlzdDEgPSBbMSwgMiwgMywgNF07CiAgICogICAgIExpc3Q8aW50PiBsaXN0MiA9IFs1LCA2LCA3LCA4LCA5XTsKICAgKiAgICAgLy8gQ29waWVzIHRoZSA0dGggYW5kIDV0aCBpdGVtcyBpbiBsaXN0MiBhcyB0aGUgMm5kIGFuZCAzcmQgaXRlbXMKICAgKiAgICAgLy8gb2YgbGlzdDEuCiAgICogICAgIGxpc3QxLnNldFJhbmdlKDEsIDMsIGxpc3QyLCAzKTsKICAgKiAgICAgbGlzdDEuam9pbignLCAnKTsgLy8gJzEsIDgsIDksIDQnCiAgICoKICAgKiBUaGUgcHJvdmlkZWQgcmFuZ2UsIGdpdmVuIGJ5IFtzdGFydF0gYW5kIFtlbmRdLCBtdXN0IGJlIHZhbGlkLgogICAqIEEgcmFuZ2UgZnJvbSBbc3RhcnRdIHRvIFtlbmRdIGlzIHZhbGlkIGlmIGAwIDw9IHN0YXJ0IDw9IGVuZCA8PSBsZW5gLCB3aGVyZQogICAqIGBsZW5gIGlzIHRoaXMgbGlzdCdzIGBsZW5ndGhgLiBUaGUgcmFuZ2Ugc3RhcnRzIGF0IGBzdGFydGAgYW5kIGhhcyBsZW5ndGgKICAgKiBgZW5kIC0gc3RhcnRgLiBBbiBlbXB0eSByYW5nZSAod2l0aCBgZW5kID09IHN0YXJ0YCkgaXMgdmFsaWQuCiAgICoKICAgKiBUaGUgW2l0ZXJhYmxlXSBtdXN0IGhhdmUgZW5vdWdoIG9iamVjdHMgdG8gZmlsbCB0aGUgcmFuZ2UgZnJvbSBgc3RhcnRgCiAgICogdG8gYGVuZGAgYWZ0ZXIgc2tpcHBpbmcgW3NraXBDb3VudF0gb2JqZWN0cy4KICAgKgogICAqIElmIGBpdGVyYWJsZWAgaXMgdGhpcyBsaXN0LCB0aGUgb3BlcmF0aW9uIGNvcGllcyB0aGUgZWxlbWVudHMKICAgKiBvcmlnaW5hbGx5IGluIHRoZSByYW5nZSBmcm9tIGBza2lwQ291bnRgIHRvIGBza2lwQ291bnQgKyAoZW5kIC0gc3RhcnQpYCB0bwogICAqIHRoZSByYW5nZSBgc3RhcnRgIHRvIGBlbmRgLCBldmVuIGlmIHRoZSB0d28gcmFuZ2VzIG92ZXJsYXAuCiAgICoKICAgKiBJZiBgaXRlcmFibGVgIGRlcGVuZHMgb24gdGhpcyBsaXN0IGluIHNvbWUgb3RoZXIgd2F5LCBubyBndWFyYW50ZWVzIGFyZQogICAqIG1hZGUuCiAgICovCiAgdm9pZCBzZXRSYW5nZShpbnQgc3RhcnQsIGludCBlbmQsIEl0ZXJhYmxlPEU+IGl0ZXJhYmxlLCBbaW50IHNraXBDb3VudCA9IDBdKTsKCiAgLyoqCiAgICogUmVtb3ZlcyB0aGUgb2JqZWN0cyBpbiB0aGUgcmFuZ2UgW3N0YXJ0XSBpbmNsdXNpdmUgdG8gW2VuZF0gZXhjbHVzaXZlLgogICAqCiAgICogVGhlIHByb3ZpZGVkIHJhbmdlLCBnaXZlbiBieSBbc3RhcnRdIGFuZCBbZW5kXSwgbXVzdCBiZSB2YWxpZC4KICAgKiBBIHJhbmdlIGZyb20gW3N0YXJ0XSB0byBbZW5kXSBpcyB2YWxpZCBpZiBgMCA8PSBzdGFydCA8PSBlbmQgPD0gbGVuYCwgd2hlcmUKICAgKiBgbGVuYCBpcyB0aGlzIGxpc3QncyBgbGVuZ3RoYC4gVGhlIHJhbmdlIHN0YXJ0cyBhdCBgc3RhcnRgIGFuZCBoYXMgbGVuZ3RoCiAgICogYGVuZCAtIHN0YXJ0YC4gQW4gZW1wdHkgcmFuZ2UgKHdpdGggYGVuZCA9PSBzdGFydGApIGlzIHZhbGlkLgogICAqCiAgICogVGhyb3dzIGFuIFtVbnN1cHBvcnRlZEVycm9yXSBpZiB0aGlzIGlzIGEgZml4ZWQtbGVuZ3RoIGxpc3QuIEluIHRoYXQgY2FzZQogICAqIHRoZSBsaXN0IGlzIG5vdCBtb2RpZmllZC4KICAgKi8KICB2b2lkIHJlbW92ZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCk7CgogIC8qKgogICAqIFNldHMgdGhlIG9iamVjdHMgaW4gdGhlIHJhbmdlIFtzdGFydF0gaW5jbHVzaXZlIHRvIFtlbmRdIGV4Y2x1c2l2ZQogICAqIHRvIHRoZSBnaXZlbiBbZmlsbFZhbHVlXS4KICAgKgogICAqIFRoZSBwcm92aWRlZCByYW5nZSwgZ2l2ZW4gYnkgW3N0YXJ0XSBhbmQgW2VuZF0sIG11c3QgYmUgdmFsaWQuCiAgICogQSByYW5nZSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gaXMgdmFsaWQgaWYgYDAgPD0gc3RhcnQgPD0gZW5kIDw9IGxlbmAsIHdoZXJlCiAgICogYGxlbmAgaXMgdGhpcyBsaXN0J3MgYGxlbmd0aGAuIFRoZSByYW5nZSBzdGFydHMgYXQgYHN0YXJ0YCBhbmQgaGFzIGxlbmd0aAogICAqIGBlbmQgLSBzdGFydGAuIEFuIGVtcHR5IHJhbmdlICh3aXRoIGBlbmQgPT0gc3RhcnRgKSBpcyB2YWxpZC4KICAgKgogICAqIEV4YW1wbGU6CiAgICogYGBgZGFydAogICAqICBMaXN0PGludD4gbGlzdCA9IG5ldyBMaXN0KDMpOwogICAqICAgICBsaXN0LmZpbGxSYW5nZSgwLCAyLCAxKTsKICAgKiAgICAgcHJpbnQobGlzdCk7IC8vICBbMSwgMSwgbnVsbF0KICAgKiBgYGAKICAgKgogICAqLwogIHZvaWQgZmlsbFJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgW0UgZmlsbFZhbHVlXSk7CgogIC8qKgogICAqIFJlbW92ZXMgdGhlIG9iamVjdHMgaW4gdGhlIHJhbmdlIFtzdGFydF0gaW5jbHVzaXZlIHRvIFtlbmRdIGV4Y2x1c2l2ZQogICAqIGFuZCBpbnNlcnRzIHRoZSBjb250ZW50cyBvZiBbcmVwbGFjZW1lbnRdIGluIGl0cyBwbGFjZS4KICAgKgogICAqICAgICBMaXN0PGludD4gbGlzdCA9IFsxLCAyLCAzLCA0LCA1XTsKICAgKiAgICAgbGlzdC5yZXBsYWNlUmFuZ2UoMSwgNCwgWzYsIDddKTsKICAgKiAgICAgbGlzdC5qb2luKCcsICcpOyAvLyAnMSwgNiwgNywgNScKICAgKgogICAqIFRoZSBwcm92aWRlZCByYW5nZSwgZ2l2ZW4gYnkgW3N0YXJ0XSBhbmQgW2VuZF0sIG11c3QgYmUgdmFsaWQuCiAgICogQSByYW5nZSBmcm9tIFtzdGFydF0gdG8gW2VuZF0gaXMgdmFsaWQgaWYgYDAgPD0gc3RhcnQgPD0gZW5kIDw9IGxlbmAsIHdoZXJlCiAgICogYGxlbmAgaXMgdGhpcyBsaXN0J3MgYGxlbmd0aGAuIFRoZSByYW5nZSBzdGFydHMgYXQgYHN0YXJ0YCBhbmQgaGFzIGxlbmd0aAogICAqIGBlbmQgLSBzdGFydGAuIEFuIGVtcHR5IHJhbmdlICh3aXRoIGBlbmQgPT0gc3RhcnRgKSBpcyB2YWxpZC4KICAgKgogICAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHdvcmsgb24gZml4ZWQtbGVuZ3RoIGxpc3RzLCBldmVuIHdoZW4gW3JlcGxhY2VtZW50XQogICAqIGhhcyB0aGUgc2FtZSBudW1iZXIgb2YgZWxlbWVudHMgYXMgdGhlIHJlcGxhY2VkIHJhbmdlLiBJbiB0aGF0IGNhc2UgdXNlCiAgICogW3NldFJhbmdlXSBpbnN0ZWFkLgogICAqLwogIHZvaWQgcmVwbGFjZVJhbmdlKGludCBzdGFydCwgaW50IGVuZCwgSXRlcmFibGU8RT4gcmVwbGFjZW1lbnQpOwoKICAvKioKICAgKiBSZXR1cm5zIGFuIHVubW9kaWZpYWJsZSBbTWFwXSB2aWV3IG9mIGB0aGlzYC4K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IGlmIChmaWxsICE9IG51bGwpIHsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewogICAgICAgIHJlc3VsdFtpXSA9IGZpbGw7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBAcGF0Y2gKICBmYWN0b3J5IExpc3QuZnJvbShJdGVyYWJsZSBlbGVtZW50cywge2Jvb2wgZ3Jvd2FibGU6IHRydWV9KSB7CiAgICBpZiAoZWxlbWVudHMgaXMgRWZmaWNpZW50TGVuZ3RoSXRlcmFibGU8RT4pIHsKICAgICAgaW50IGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDsKICAgICAgdmFyIGxpc3QgPSBncm93YWJsZSA/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+IF9uZXh0UG9zaXRpb24gLSBfcG9zaXRpb247CgogIC8qKgogICAqIEEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgcnVuZS4KICAgKgogICAqIEZvciBydW5lcyBvdXRzaWRlIHRoZSBiYXNpYyBtdWx0aWxpbmd1YWwgcGxhbmUsIHRoaXMgd2lsbCBiZQogICAqIGEgU3RyaW5nIG9mIGxlbmd0aCAyLCBjb250YWluaW5nIHR3byBjb2RlIHVuaXRzLgogICAqCiAgICogUmV0dXJucyBudWxsIGlmIFtjdXJyZW50XSBpcyBudWxsLgogICAqLwogIFN0cmluZyBnZXQgY3VycmVudEFzU3RyaW5nIHsKICAgIGlmIChfcG9zaXRpb24gPT0gX25leHRQb3NpdGlvbikgcmV0dXJuIG51bGw7CiAgICBpZiAoX3Bvc2l0aW9uICsgMSA9PSBfbmV4dFBvc2l0aW9uKSByZXR1cm4gc3RyaW5nW19wb3NpdGlvbl07CiAgICByZXR1cm4gc3RyaW5nLnN1YnN0cmluZyhfcG9zaXRpb24sIF9uZXh0UG9zaXRpb24pOwogIH0KCiAgYm9vbCBtb3ZlTmV4dCgpIHsKICAgIF9wb3NpdGlvbiA9IF9uZXh0UG9zaXRpb247CiAgICBpZiAoX3Bvc2l0aW9uID09IHN0cmluZy5sZW5ndGgpIHsKICAgICAgX2N1cnJlbnRDb2RlUG9pbnQgPSBudWxsOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBpbnQgY29kZVVuaXQgPSBzdHJpbmcuY29kZVVuaXRBdChfcG9zaXRpb24pOwogICAgaW50IG5leHRQb3NpdGlvbiA9IF9wb3NpdGlvbiArIDE7CiAgICBpZiAoX2lzTGVhZFN1cnJvZ2F0ZShjb2RlVW5pdCkgJiYgbmV4dFBvc2l0aW9uIDwgc3RyaW5nLmxlbmd0aCkgewogICAgICBpbnQgbmV4dENvZGVVbml0ID0gc3RyaW5nLmNvZGVVbml0QXQobmV4dFBvc2l0aW9uKTsKICAgICAgaWYgKF9pc1RyYWlsU3Vycm9nYXRlKG5leHRDb2RlVW5pdCkpIHsKICAgICAgICBfbmV4dFBvc2l0aW9uID0gbmV4dFBvc2l0aW9uICsgMTsKICAgICAgICBfY3VycmVudENvZGVQb2ludCA9IF9jb21iaW5lU3Vycm9nYXRlUGFpcihjb2RlVW5pdCwgbmV4dENvZGVVbml0KTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgX25leHRQb3NpdGlvbiA9IG5leHRQb3NpdGlvbjsKICAgIF9jdXJyZW50Q29kZVBvaW50ID0gY29kZVVuaXQ7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGJvb2wgbW92ZVByZXZpb3VzKCkgewogICAgX25leHRQb3NpdGlvbiA9IF9wb3NpdGlvbjsKICAgIGlmIChfcG9zaXRpb24gPT0gMCkgewogICAgICBfY3VycmVudENvZGVQb2ludCA9IG51bGw7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGludCBwb3NpdGlvbiA9IF9wb3NpdGlvbiAtIDE7CiAgICBpbnQgY29kZVVuaXQgPSBzdHJpbmcuY29kZVVuaXRBdChwb3NpdGlvbik7CiAgICBpZiAoX2lzVHJhaWxTdXJyb2dhdGUoY29kZVVuaXQpICYmIHBvc2l0aW9uID4gMCkgewogICAgICBpbnQgcHJldkNvZGVVbml0ID0gc3RyaW5nLmNvZGVVbml0QXQocG9zaXRpb24gLSAxKTsKICAgICAgaWYgKF9pc0xlYWRTdXJyb2dhdGUocHJldkNvZGVVbml0KSkgewogICAgICAgIF9wb3NpdGlvbiA9IHBvc2l0aW9uIC0gMTsKICAgICAgICBfY3VycmVudENvZGVQb2ludCA9IF9jb21iaW5lU3Vycm9nYXRlUGFpcihwcmV2Q29kZVVuaXQsIGNvZGVVbml0KTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfQogICAgX3Bvc2l0aW9uID0gcG9zaXRpb247CiAgICBfY3VycmVudENvZGVQb2ludCA9IGNvZGVVbml0OwogICAgcmV0dXJuIHRydWU7CiAgfQp9CoM/AE5OPAETAQQkA1BHTUtQUCYDR01KAxgYKysDDBESAwsPERIDT0MDIy8DPwMzA0ADMgNCUAMcSwNGQwMYIzMDSw0DJANMTUtOAzQDSkk9UE4zAx8zLANMIAMWA0cuAw0DRiZ4BD8GOwVQJAUwBUsVBTknJwVGRy8uBkEhAQY6BVBKQRYFQQY2AQZFBU9MDAVJFQUhBU4FQAVRBkxMUCIoGj0eAQZPBU9JHAUhNC0tBSI4BiEBBj8GHQEGHwVISi0FJiYFISYmBhIBBkQFSywGFAEGTwVEMEw5BTIFRkomBiIBBiYFQzozBU4sLUJMHTYnBh8BBkEFJwYfAQZDBR4/PwVKNQU/PwU8BU1MLAVAPwY1AQZKJQUjOTkFJgU6BUEGLQEGUC4FIzo6BUAFOwVFBjEBBisGFAEGLwYXAQZFBSgGIwEGSioFIi4qBjQBBkUFUTUNMAk4DRgdJwlOOgVOCUsyOzs9QDtAQkY+BUYJSkUZBhEBBjgFNQYVAQY5BTYGFgEGTA8FLiwFPQYgAQZBBUJBBUNBBUNBRiJDMAY1AQZCBUJBBUNBBUNBRiJDMAY2AQY+BSY7OwVMDAU8PAVBBjYBBlE4BUFGBkYBBjwFMEhLBU9QBkcdAQY/BUtOJgVBBU1MLAYzAQZMDAVNTk0FTlEFQTwFTSsFO0hLBVEGRgEGRgUpBUYFTjEyBj8BBlEFOEEFJkkFSDkFHj9LBU9GBRo3OQVNDgUdRAUnMUQFNyEFPB9IBUtJEQVNBicBBkkNBU4FTC0FRj0FSgVEMTIGJ0oBBksGGwEGQgVMTSMGEwEGO08FMSwFTx4GSBgBBjtPBTEsBU8eBkgYAgEEOgQkFxYBNQERHigGIC44OCw6CAYRBAIBRT4BRj8BSDA8AgFNDAU7IBcxETAVBhkFSSsGGQFHHh4XGwEGUQUwS04YBUkGLBkbID4hBAFLKRUhOjdCBgQBBkYFMQZHAQZLBUQYRgVQBiQ+FRAEAQY9BS5FPgVLRgYjTSQqHgQBUBIGKAEGOwVDBjQBBisFQjYFKAYfMUI3BAEUHyYgFAYxJkY6LSpLFQgGIiIRBAEYHxogFAYiMDc6LCJLFQgGGiIRBAIBFWRhcnQ6Y29yZS9zdHJpbmcuZGFydDNvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9zdHJpbmdfYnVmZmVyLmRhcnSF6i8vIENvcHlyaWdodCAoYykgMjAxMSwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuY29yZTsKCi8qKgogKiBBIGNsYXNzIGZvciBjb25jYXRlbmF0aW5nIHN0cmluZ3MgZWZmaWNpZW50bHkuCiAqCiAqIEFsbG93cyBmb3IgdGhlIGluY3JlbWVudGFsIGJ1aWxkaW5nIG9mIGEgc3RyaW5nIHVzaW5nIHdyaXRlKigpIG1ldGhvZHMuCiAqIFRoZSBzdHJpbmdzIGFyZSBjb25jYXRlbmF0ZWQgdG8gYSBzaW5nbGUgc3RyaW5nIG9ubHkgd2hlbiBbdG9TdHJpbmddIGlzCiAqIGNhbGxlZC4KICovCmNsYXNzIFN0cmluZ0J1ZmZlciBpbXBsZW1lbnRzIFN0cmluZ1NpbmsgewogIC8qKiBDcmVhdGVzIHRoZSBzdHJpbmcgYnVmZmVyIHdpdGggYW4gaW5pdGlhbCBjb250ZW50LiAqLwogIGV4dGVybmFsIFN0cmluZ0J1ZmZlcihbT2JqZWN0IGNvbnRlbnQgPSAiIl0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIGNvbnRlbnQgdGhhdCBoYXMgYmVlbiBhY2N1bXVsYXRlZCBzbyBmYXIuCiAgICogVGhpcyBpcyBhIGNvbnN0YW50LXRpbWUgb3BlcmF0aW9uLgogICAqLwogIGV4dGVybmFsIGludCBnZXQgbGVuZ3RoOwoKICAvKiogUmV0dXJucyB3aGV0aGVyIHRoZSBidWZmZXIgaXMgZW1wdHkuIFRoaXMgaXMgYSBjb25zdGFudC10aW1lIG9wZXJhdGlvbi4gKi8KICBib29sIGdldCBpc0VtcHR5ID0+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/IHRoaXMucG9ydCA6IG51bGwsCiAgICAgICAgdGhpcy5wYXRoLAogICAgICAgIHRoaXMuaGFzUXVlcnkgPyB0aGlzLnF1ZXJ5IDogbnVsbCwKICAgICAgICB0aGlzLmhhc0ZyYWdtZW50ID8gdGhpcy5mcmFnbWVudCA6IG51bGwpOwogIH0KCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gX3VyaTsKfQoKLy8vIFNwZWNpYWwgW19VcmldIGNyZWF0ZWQgZnJvbSBhbiBleGlzdGluZyBbVXJpRGF0YV0uCmNsYXNzIF9EYXRhVXJpIGV4dGVuZHMgX1VyaSB7CiAgZmluYWwgVXJpRGF0YSBfZGF0YTsKCiAgX0RhdGFVcmkodGhpcy5fZGF0YSwgU3RyaW5nIHBhdGgsIFN0cmluZyBxdWVyeSkKICAgICAgOiBzdXBlci5faW50ZXJuYWwoImRhdGEiLCBudWxsLCBudWxsLCBudWxsLCBwYXRoLCBxdWVyeSwgbnVsbCk7CgogIFVyaURhdGEgZ2V0IGRhdGEgPT4gX2RhdGE7Cn0KCi8vLyBDaGVja3Mgd2hldGhlciBbdGV4dF0gc3RhcnRzIHdpdGggImRhdGE6IiBhdCBwb3NpdGlvbiBbc3RhcnRdLgovLy8KLy8vIFRoZSB0ZXh0IG11c3QgYmUgbG9uZyBlbm91Z2ggdG8gYWxsb3cgcmVhZGluZyBmaXZlIGNoYXJhY3RlcnMKLy8vIGZyb20gdGhlIFtzdGFydF0gcG9zaXRpb24uCi8vLwovLy8gUmV0dXJucyBhbiBpbnRlZ2VyIHZhbHVlIHdoaWNoIGlzIHplcm8gaWYgdGV4dCBzdGFydHMgd2l0aCBhbGwtbG93ZXJjYXNlCi8vLyAiZGF0YToiIGFuZCAweDIwIGlmIHRoZSB0ZXh0IHN0YXJ0cyB3aXRoICJkYXRhOiIgdGhhdCBpc24ndCBhbGwgbG93ZXItY2FzZS4KLy8vIEFsbCBvdGhlciB2YWx1ZXMgbWVhbnMgdGhlIHRleHQgc3RhcnRzIHdpdGggc29tZSBvdGhlciBjaGFyYWN0ZXIuCmludCBfc3RhcnRzV2l0aERhdGEoU3RyaW5nIHRleHQsIGludCBzdGFydCkgewogIC8vIE11bHRpcGx5IGJ5IDMgdG8gYXZvaWQgYSBu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ZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLy8gcGFydCBvZiAiY29yZV9wYXRjaC5kYXJ0IjsKCnR5cGVkZWYgVXJpIF9VcmlCYXNlQ2xvc3VyZSgpOwoKVXJpIF91bnN1cHBvcnRlZFVyaUJhc2UoKSB7CiAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkRXJyb3IoIidVcmkuYmFzZScgaXMgbm90IHN1cHBvcnRlZCIpOwp9CgovLyBfdXJpQmFzZUNsb3N1cmUgY2FuIGJlIG92ZXJ3cml0dGVuIGJ5IHRoZSBlbWJlZGRlciB0byBzdXBwbHkgYSBkaWZmZXJlbnQKLy8gdmFsdWUgZm9yIFVyaS5iYXNlLgpAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIpCl9VcmlCYXNlQ2xvc3VyZSBfdXJpQmFzZUNsb3N1cmUgPSBfdW5zdXBwb3J0ZWRVcmlCYXNlOwoKQHBhdGNoCmNsYXNzIFVyaSB7CiAgQHBhdGNoCiAgc3RhdGljIFVyaSBnZXQgYmFzZSA9PiBfdXJpQmFzZUNsb3N1cmUoKTsKfQoKLy8vIFZNIGltcGxlbWVudGF0aW9uIG9mIFVyaS4KQHBhdGNoCmNsYXNzIF9VcmkgewogIHN0YXRpYyBmaW5hbCBib29sIF9pc1dpbmRvd3NDYWNoZWQgPSBfaXNXaW5kb3dzUGxhdGZvcm07CgogIHN0YXRpYyBib29sIGdldCBfaXNXaW5kb3dzUGxhdGZvcm0gbmF0aXZlICJVcmlfaXNXaW5kb3dzUGxhdGZvcm0iOwoKICBAcGF0Y2gKICBzdGF0aWMgYm9vbCBnZXQgX2lzV2luZG93cyA9PiBfaXNXaW5kb3dzQ2FjaGVkOwoKICBAcGF0Y2gKICBzdGF0aWMgU3RyaW5nIF91cmlFbmNvZGUoTGlzdDxpbnQ+IGNhbm9uaWNhbFRhYmxlLCBTdHJpbmcgdGV4dCwKICAgICAgRW5jb2RpbmcgZW5jb2RpbmcsIGJvb2wgc3BhY2VUb1BsdXMpIHsKICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRoZSB0ZXh0IHdpbGwgYmUgY2hhbmdlZCBieSBlbmNvZGluZy4KICAgIGludCBpID0gMDsKICAgIGlmIChpZGVudGljYWwoZW5jb2RpbmcsIHV0ZjgpIHx8CiAgICAgICAgaWRlbnRpY2FsKGVuY29kaW5nLCBsYXRpbjEpIHx8CiAgICAgICAgaWRlbnRpY2FsKGVuY29kaW5nLCBhc2NpaSkpIHsKICAgICAgLy8gRW5jb2RpbmcgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBvcmlnaW5hbCBzdHJpbmcuCiAgICAgIC8vIEZpbmQgZmlyc3QgY2hhcmFjdGVyIHRoYXQgbmVlZHMgZW5jb2RpbmcuCiAgICAgIGZvciAoOyBpIDwgdGV4dC5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBjaGFyID0gdGV4dC5jb2RlVW5pdEF0KGkpOwogICAgICAgIGlmIChjaGFyID49IDEyOCB8fAogICAgICAgICAgICBjYW5vbmljYWxUYWJsZVtjaGFyID4+IDRdICYgKDEgPDwgKGNoYXIgJiAweDBmKSkgPT0gMCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoaSA9PSB0ZXh0Lmxlbmd0aCkgcmV0dXJuIHRleHQ7CgogICAgLy8gRW5jb2RlIHRoZSBzdHJpbmcgaW50byBieXRlcyB0aGVuIGdlbmVyYXRlIGFuIEFTQ0lJIG9ubHkgc3RyaW5nCiAgICAvLyBieSBwZXJjZW50IGVuY29kaW5nIHNlbGVjdGVkIGJ5dGVzLgogICAgU3RyaW5nQnVmZmVyIHJlc3VsdCA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIGZvciAoaW50IGogPSAwOyBqIDwgaTsgaisrKSB7CiAgICAgIHJlc3VsdC53cml0ZUNoYXJDb2RlKHRleHQuY29kZVVuaXRBdChqKSk7CiAgICB9CgogICAgLy8gVE9ETyhscm4pOiBJcyB0aGVyZSBhIHdheSB0byBvbmx5IGVuY29kZSBmcm9tIGluZGV4IGkgYW5kIGZvcndhcmRzLgogICAgdmFyIGJ5dGVzID0gZW5jb2RpbmcuZW5jb2RlKHRleHQpOwogICAgZm9yICg7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykgewogICAgICBpbnQgYnl0ZSA9IGJ5dGVzW2ldOwogICAgICBpZiAoYnl0ZSA8IDEyOCAmJgogICAgICAgICAgKChjYW5vbmljYWxUYWJsZVtieXRlID4+IDRdICYgKDEgPDwgKGJ5dGUgJiAweDBmKSkpICE9IDApKSB7CiAgICAgICAgcmVzdWx0LndyaXRlQ2hhckNvZGUoYnl0ZSk7CiAgICAgIH0gZWxzZSBpZiAoc3BhY2VUb1BsdXMgJiYgYnl0ZSA9PSBfU1BBQ0UpIHsKICAgICAgICByZXN1bHQud3JpdGVDaGFyQ29kZShfUExVUyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgU3RyaW5nIGhleERpZ2l0cyA9ICcwMTIzNDU2Nzg5QUJDREVGJzsKICAgICAgICByZXN1bHQKICAgICAgICAgIC4ud3JpdGVDaGFyQ29kZShfUEVSQ0VOVCkKICAgICAgICAgIC4ud3JpdGVDaGFyQ29kZShoZXhEaWdpdHMuY29kZVVuaXRBdChieXRlID4+IDQpKQogICAgICAgICAgLi53cml0ZUNoYXJDb2RlKGhleERpZ2l0cy5jb2RlVW5pdEF0KGJ5dGUgJiAweDBmKSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKICB9Cn0KUgBOTjwBHgEfARw9AgFMFxo3AQcMCSwCAR4HDTsBRQEJMgEJQi08DyUnJjozJScbRREKCAYnAUcrLiIwBgFLJyQbGEckMiUPNQ8kOz4IBh4EAgEeZGFydDpjb3JlLXBhdGNoL3VyaV9wYXRjaC5kYXJ0NG9yZy1kYXJ0bGFuZy1zZGs6Ly8vcnVudGltZS9saWIvaWRlbnRpY2FsX3BhdGNoLmRhcnSB0i8vIENvcHlyaWdodCAoYykgMjAxMiwgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgovLyBwYXJ0IG9mICJjb3JlX3BhdGNoLmRhcnQiOwoKQHBhdGNoCkBwcmFnbWEoInZtOmV4YWN0LXJlc3VsdC10eXBlIiwgYm9vbCkKYm9vbCBpZGVudGljYWwoT2JqZWN0IGEsIE9iamVjdCBiKSBuYXRpdmUgIklkZW50aWNhbF9jb21wYXJpc29uIjsKCkBwYXRjaApAcHJhZ21hKCJ2bTplbnRyeS1wb2ludCIsICJjYWxsIikKaW50IGlkZW50aXR5SGFzaENvZGUoT2JqZWN0IG9iamVjdCkgPT4gb2JqZWN0Ll9pZGVudGl0eUhhc2hDb2RlOwoPAE5OPAEeAQcmQgEHIkEBJGRhcnQ6Y29yZS1wYXRjaC9pZGVudGljYWxfcGF0Y2guZGFydCtvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvY29yZS9wcmludC5kYXJ0gcQvLyBDb3B5cmlnaHQgKGMpIDIwMTIsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0LmNvcmU7CgovLy8gUHJpbnRzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3QgdG8gdGhlIGNvbnNvbGUuCnZvaWQgcHJpbnQoT2JqZWN0IG9iamVjdCkgewogIFN0cmluZyBsaW5lID0gIiRvYmplY3QiOwogIGlmIChwcmludFRvWm9uZSA9PSBudWxsKSB7CiAgICBwcmludFRvQ29uc29sZShsaW5lKTsKICB9IGVsc2UgewogICAgcHJpbnRUb1pvbmUobGluZSk7CiAgfQp9ChEATk48ARMBQRwbHRoLFwQCARRkYXJ0OmNvcmUvcHJpbnQuZGFydCtvcmctZGFydGxhbmctc2RrOi8vL3Nkay9saWIvX2h0dHAvaHR0cC5kYXJ0wAEhFi8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpsaWJyYXJ5IGRhcnQuX2h0dHA7CgppbXBvcnQgJ2RhcnQ6YXN5bmMnOwppbXBvcnQgJ2RhcnQ6Y29sbGVjdGlvbicKICAgIHNob3cKICAgICAgICBIYXNoTWFwLAogICAgICAgIEhhc2hTZXQsCiAgICAgICAgUXVldWUsCiAgICAgICAgTGlzdFF1ZXVlLAogICAgICAgIExpbmtlZExpc3QsCiAgICAgICAgTGlua2VkTGlzdEVudHJ5LAogICAgICAgIFVubW9kaWZpYWJsZU1hcFZpZXc7CmltcG9ydCAnZGFydDpjb252ZXJ0JzsKaW1wb3J0ICdkYXJ0OmRldmVsb3BlcicgaGlkZSBsb2c7CmltcG9ydCAnZGFydDpfaW50ZXJuYWwnIHNob3cgU2luY2UsIEh0dHBTdGF0dXM7CmltcG9ydCAnZGFydDptYXRoJzsKaW1wb3J0ICdkYXJ0OmlvJzsKaW1wb3J0ICdkYXJ0OnR5cGVkX2RhdGEnOwoKcGFydCAnY3J5cHRvLmRhcnQnOwpwYXJ0ICdodHRwX2RhdGUuZGFydCc7CnBhcnQgJ2h0dHBfaGVhZGVycy5kYXJ0JzsKcGFydCAnaHR0cF9pbXBsLmRhcnQnOwpwYXJ0ICdodHRwX3BhcnNlci5kYXJ0JzsKcGFydCAnaHR0cF9zZXNzaW9uLmRhcnQnOwpwYXJ0ICdvdmVycmlkZXMuZGFydCc7CnBhcnQgJ3dlYnNvY2tldC5kYXJ0JzsKcGFydCAnd2Vic29ja2V0X2ltcGwuZGFydCc7CgovKioKICogQSBzZXJ2ZXIgdGhhdCBkZWxpdmVycyBjb250ZW50LCBzdWNoIGFzIHdlYiBwYWdlcywgdXNpbmcgdGhlIEhUVFAgcHJvdG9jb2wuCiAqCiAqIFRoZSBIdHRwU2VydmVyIGlzIGEgW1N0cmVhbV0gdGhhdCBwcm92aWRlcyBbSHR0cFJlcXVlc3RdIG9iamVjdHMuIEVhY2gKICogSHR0cFJlcXVlc3QgaGFzIGFuIGFzc29jaWF0ZWQgW0h0dHBSZXNwb25zZV0gb2JqZWN0LgogKiBUaGUgc2VydmVyIHJlc3BvbmRzIHRvIGEgcmVxdWVzdCBieSB3cml0aW5nIHRvIHRoYXQgSHR0cFJlc3BvbnNlIG9iamVjdC4KICogVGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGhvdyB0byBiaW5kIGFuIEh0dHBTZXJ2ZXIgdG8gYW4gSVB2NgogKiBbSW50ZXJuZXRBZGRyZXNzXSBvbiBwb3J0IDgwICh0aGUgc3RhbmRhcmQgcG9ydCBmb3IgSFRUUCBzZXJ2ZXJzKQogKiBhbmQgaG93IHRvIGxpc3RlbiBmb3IgcmVxdWVzdHMuCiAqIFBvcnQgODAgaXMgdGhlIGRlZmF1bHQgSFRUUCBwb3J0LiBIb3dldmVyLCBvbiBtb3N0IHN5c3RlbXMgYWNjZXNzaW5nCiAqIHRoaXMgcmVxdWlyZXMgc3VwZXItdXNlciBwcml2aWxlZ2VzLiBGb3IgbG9jYWwgdGVzdGluZyBjb25zaWRlcgogKiB1c2luZyBhIG5vbi1yZXNlcnZlZCBwb3J0ICgxMDI0IGFuZCBhYm92ZSkuCiAqCiAqICAgICBpbXBvcnQgJ2RhcnQ6aW8nOwogKgogKiAgICAgbWFpbigpIHsKICogICAgICAgSHR0cFNlcnZlcgogKiAgICAgICAgICAgLmJpbmQoSW50ZXJuZXRBZGRyZXNzLmFueUlQdjYsIDgwKQogKiAgICAgICAgICAgLnRoZW4oKHNlcnZlcikgewogKiAgICAgICAgICAgICBzZXJ2ZXIubGlzdGVuKChIdHRwUmVxdWVzdCByZXF1ZXN0KSB7CiAqICAgICAgICAgICAgICAgcmVxdWVzdC5yZXNwb25zZS53cml0ZSgnSGVsbG8sIHdvcmxkIScpOwogKiAgICAgICAgICAgICAgIHJlcXVlc3QucmVzcG9uc2UuY2xvc2UoKTsKICogICAgICAgICAgICAgfSk7CiAqICAgICAgICAgICB9KTsKICogICAgIH0KICoKICogSW5jb21wbGV0ZSByZXF1ZXN0cywgaW4gd2hpY2ggYWxsIG9yIHBhcnQgb2YgdGhlIGhlYWRlciBpcyBtaXNzaW5nLCBhcmUKICogaWdub3JlZCwgYW5kIG5vIGV4Y2VwdGlvbnMgb3IgSHR0cFJlcXVlc3Qgb2JqZWN0cyBhcmUgZ2VuZXJhdGVkIGZvciB0aGVtLgogKiBMaWtld2lzZSwgd2hlbiB3cml0aW5nIHRvIGFuIEh0dHBSZXNwb25zZSwgYW55IFtTb2NrZXRdIGV4Y2VwdGlvbnMgYXJlCiAqIGlnbm9yZWQgYW5kIGFueSBmdXR1cmUgd3JpdGVzIGFyZSBpZ25vcmVkLgogKgogKiBUaGUgSHR0cFJlcXVlc3QgZXhwb3NlcyB0aGUgcmVxdWVzdCBoZWFkZXJzIGFuZCBwcm92aWRlcyB0aGUgcmVxdWVzdCBib2R5LAogKiBpZiBpdCBleGlzdHMsIGFzIGEgU3RyZWFtIG9mIGRhdGEuIElmIHRoZSBib2R5IGlzIHVucmVhZCwgaXQgaXMgZHJhaW5lZAogKiB3aGVuIHRoZSBzZXJ2ZXIgd3JpdGVzIHRvIHRoZSBIdHRwUmVzcG9uc2Ugb3IgY2xvc2VzIGl0LgogKgogKiAjIyBCaW5kIHdpdGggYSBzZWN1cmUgSFRUUFMgY29ubmVjdGlvbgogKgogKiBVc2UgW2JpbmRTZWN1cmVdIHRvIGNyZWF0ZSBhbiBIVFRQUyBzZXJ2ZXIuCiAqCiAqIFRoZSBzZXJ2ZXIgcHJlc2VudHMgYSBjZXJ0aWZpY2F0ZSB0byB0aGUgY2xpZW50LiBUaGUgY2VydGlmaWNhdGUKICogY2hhaW4gYW5kIHRoZSBwcml2YXRlIGtleSBhcmUgc2V0IGluIHRoZSBbU2VjdXJpdHlDb250ZXh0XQogKiBvYmplY3QgdGhhdCBpcyBwYXNzZWQgdG8gW2JpbmRTZWN1cmVdLgogKgogKiAgICAgaW1wb3J0ICdkYXJ0OmlvJzsKICogICAgIGltcG9ydCAiZGFydDppc29sYXRlIjsKICoKICogICAgIG1haW4oKSB7CiAqICAgICAgIFNlY3VyaXR5Q29udGV4dCBjb250ZXh0ID0gbmV3IFNlY3VyaXR5Q29udGV4dCgpOwogKiAgICAgICB2YXIgY2hhaW4gPQogKiAgICAgICAgICAgUGxhdGZvcm0uc2NyaXB0LnJlc29sdmUoJ2NlcnRpZmljYXRlcy9zZXJ2ZXJfY2hhaW4ucGVtJykKICogICAgICAgICAgIC50b0ZpbGVQYXRoKCk7CiAqICAgICAgIHZhciBrZXkgPQogKiAgICAgICAgICAgUGxhdGZvcm0uc2NyaXB0LnJlc29sdmUoJ2NlcnRpZmljYXRlcy9zZXJ2ZXJfa2V5LnBlbScpCiAqICAgICAgICAgICAudG9GaWxlUGF0aCgpOwogKiAgICAgICBjb250ZXh0LnVzZUNlcnRpZmljYXRlQ2hhaW4oY2hhaW4pOwogKiAgICAgICBjb250ZXh0LnVzZVByaXZhdGVLZXkoa2V5LCBwYXNzd29yZDogJ2RhcnRkYXJ0Jyk7CiAqCiAqICAgICAgIEh0dHBTZXJ2ZXIKICogICAgICAgICAgIC5iaW5kU2VjdXJlKEludGVybmV0QWRkcmVzcy5hbnlJUHY2LAogKiAgICAgICAgICAgICAgICAgICAgICAgNDQzLAogKiAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCkKICogICAgICAgICAgIC50aGVuKChzZXJ2ZXIpIHsKICogICAgICAgICAgICAgc2VydmVyLmxpc3RlbigoSHR0cFJlcXVlc3QgcmVxdWVzdCkgewogKiAgICAgICAgICAgICAgIHJlcXVlc3QucmVzcG9uc2Uud3JpdGUoJ0hlbGxvLCB3b3JsZCEnKTsKICogICAgICAgICAgICAgICByZXF1ZXN0LnJlc3BvbnNlLmNsb3NlKCk7CiAqICAgICAgICAgICAgIH0pOwogKiAgICAgICAgICAgfSk7CiAqICAgICB9CiAqCiAqICBUaGUgY2VydGlmaWNhdGVzIGFuZCBrZXlzIGFyZSBQRU0gZmlsZXMsIHdoaWNoIGNhbiBiZSBjcmVhdGVkIGFuZAogKiAgbWFuYWdlZCB3aXRoIHRoZSB0b29scyBpbiBPcGVuU1NMLgogKgogKiAjIyBDb25uZWN0IHRvIGEgc2VydmVyIHNvY2tldAogKgogKiBZb3UgY2FuIHVzZSB0aGUgW2xpc3Rlbk9uXSBjb25zdHJ1Y3RvciB0byBhdHRhY2ggYW4gSFRUUCBzZXJ2ZXIgdG8KICogYSBbU2VydmVyU29ja2V0XS4KICoKICogICAgIGltcG9ydCAnZGFydDppbyc7CiAqCiAqICAgICBtYWluKCkgewogKiAgICAgICBTZXJ2ZXJTb2NrZXQuYmluZChJbnRlcm5ldEFkZHJlc3MuYW55SVB2NiwgODApCiAqICAgICAgICAgLnRoZW4oKHNlcnZlclNvY2tldCkgewogKiAgICAgICAgICAgSHR0cFNlcnZlciBodHRwc2VydmVyID0gbmV3IEh0dHBTZXJ2ZXIubGlzdGVuT24oc2VydmVyU29ja2V0KTsKICogICAgICAgICAgIHNlcnZlclNvY2tldC5saXN0ZW4oKFNvY2tldCBzb2NrZXQpIHsKICogICAgICAgICAgICAgc29ja2V0LndyaXRlKCdIZWxsbywgY2xpZW50LicpOwogKiAgICAgICAgICAgfSk7CiAqICAgICAgICAgfSk7CiAqICAgICB9CiAqCiAqICMjIE90aGVyIHJlc291cmNlcwogKgogKiAqIEh0dHBTZXJ2ZXIgaXMgYSBTdHJlYW0uIFJlZmVyIHRvIHRoZSBbU3RyZWFtXSBjbGFzcyBmb3IgaW5mb3JtYXRpb24KICogYWJvdXQgdGhlIHN0cmVhbWluZyBxdWFsaXRpZXMgb2YgYW4gSHR0cFNlcnZlci4KICogUGF1c2luZyB0aGUgc3Vic2NyaXB0aW9uIG9mIHRoZSBzdHJlYW0sIHBhdXNlcyBhdCB0aGUgT1MgbGV2ZWwuCiAqCiAqICogVGhlIFtzaGVsZl0oaHR0cHM6Ly9wdWIuZGFydGxhbmcub3JnL3BhY2thZ2VzL3NoZWxmKQogKiBwYWNrYWdlIG9uIHB1Yi5kYXJ0bGFuZy5vcmcgY29udGFpbnMgYSBzZXQgb2YgaGlnaC1sZXZlbCBjbGFzc2VzIHRoYXQsCiAqIHRvZ2V0aGVyIHdpdGggdGhpcyBjbGFzcywgbWFrZXMgaXQgZWFzeSB0byBwcm92aWRlIGNvbnRlbnQgdGhyb3VnaCBIVFRQCiAqIHNlcnZlcnMuCiAqLwphYnN0cmFjdCBjbGFzcyBIdHRwU2VydmVyIGltcGxlbWVudHMgU3RyZWFtPEh0dHBSZXF1ZXN0PiB7CiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYFNlcnZlcmAgaGVhZGVyIGZvciBhbGwgcmVzcG9uc2VzCiAgICogZ2VuZXJhdGVkIGJ5IHRoaXMgW0h0dHBTZXJ2ZXJdLgogICAqCiAgICogSWYgW3NlcnZlckhlYWRlcl0gaXMgYG51bGxgLCBubyBgU2VydmVyYCBoZWFkZXIgd2lsbCBiZSBhZGRlZCB0byBlYWNoCiAgICogcmVzcG9uc2UuCiAgICoKICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgbnVsbGAuCiAgICovCiAgU3RyaW5nIHNlcnZlckhlYWRlcjsKCiAgLyoqCiAgICogRGVmYXVsdCBzZXQgb2YgaGVhZGVycyBhZGRlZCB0byBhbGwgcmVzcG9uc2Ugb2JqZWN0cy4KICAgKgogICAqIEJ5IGRlZmF1bHQgdGhlIGZvbGxvd2luZyBoZWFkZXJzIGFyZSBpbiB0aGlzIHNldDoKICAgKgogICAqICAgICBDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgKICAgKiAgICAgWC1GcmFtZS1PcHRpb25zOiBTQU1FT1JJR0lOCiAgICogICAgIFgtQ29udGVudC1UeXBlLU9wdGlvbnM6IG5vc25pZmYKICAgKiAgICAgWC1YU1MtUHJvdGVjdGlvbjogMTsgbW9kZT1ibG9jawogICAqCiAgICogSWYgdGhlIGBTZXJ2ZXJgIGhlYWRlciBpcyBhZGRlZCBoZXJlIGFuZCB0aGUgYHNlcnZlckhlYWRlcmAgaXMgc2V0IGFzCiAgICogd2VsbCB0aGVuIHRoZSB2YWx1ZSBvZiBgc2VydmVySGVhZGVyYCB0YWtlcyBwcmVjZWRlbmNlLgogICAqLwogIEh0dHBIZWFkZXJzIGdldCBkZWZhdWx0UmVzcG9uc2VIZWFkZXJzOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBbSHR0cFNlcnZlcl0gc2hvdWxkIGNvbXByZXNzIHRoZSBjb250ZW50LCBpZiBwb3NzaWJsZS4KICAgKgogICAqIFRoZSBjb250ZW50IGNhbiBvbmx5IGJlIGNvbXByZXNzZWQgd2hlbiB0aGUgcmVzcG9uc2UgaXMgdXNpbmcKICAgKiBjaHVua2VkIFRyYW5zZmVyLUVuY29kaW5nIGFuZCB0aGUgaW5jb21pbmcgcmVxdWVzdCBoYXMgYGd6aXBgCiAgICogYXMgYW4gYWNjZXB0ZWQgZW5jb2RpbmcgaW4gdGhlIEFjY2VwdC1FbmNvZGluZyBoZWFkZXIuCiAgICoKICAgKiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBgZmFsc2VgIChjb21wcmVzc2lvbiBkaXNhYmxlZCkuCiAgICogVG8gZW5hYmxlLCBzZXQgYGF1dG9Db21wcmVzc2AgdG8gYHRydWVgLgogICAqLwogIGJvb2wgYXV0b0NvbXByZXNzOwoKICAvKioKICAgKiBHZXRzIG9yIHNldHMgdGhlIHRpbWVvdXQgdXNlZCBmb3IgaWRsZSBrZWVwLWFsaXZlIGNvbm5lY3Rpb25zLiBJZiBubwogICAqIGZ1cnRoZXIgcmVxdWVzdCBpcyBzZWVuIHdpdGhpbiBbaWRsZVRpbWVvdXRdIGFmdGVyIHRoZSBwcmV2aW91cyByZXF1ZXN0IHdhcwogICAqIGNvbXBsZXRlZCwgdGhlIGNvbm5lY3Rpb24gaXMgZHJvcHBlZC4KICAgKgogICAqIERlZmF1bHQgaXMgMTIwIHNlY29uZHMuCiAgICoKICAgKiBOb3RlIHRoYXQgaXQgbWF5IHRha2UgdXAgdG8gYDIgKiBpZGxlVGltZW91dGAgYmVmb3JlIGEgaWRsZSBjb25uZWN0aW9uIGlzCiAgICogYWJvcnRlZC4KICAgKgogICAqIFRvIGRpc2FibGUsIHNldCBbaWRsZVRpbWVvdXRdIHRvIGBudWxsYC4KICAgKi8KICBEdXJhdGlvbiBpZGxlVGltZW91dDsKCiAgLyoqCiAgICogU3RhcnRzIGxpc3RlbmluZyBmb3IgSFRUUCByZXF1ZXN0cyBvbiB0aGUgc3BlY2lmaWVkIFthZGRyZXNzXSBhbmQKICAgKiBbcG9ydF0uCiAgICoKICAgKiBUaGUgW2FkZHJlc3NdIGNhbiBlaXRoZXIgYmUgYSBbU3RyaW5nXSBvciBhbgogICAqIFtJbnRlcm5ldEFkZHJlc3NdLiBJZiBbYWRkcmVzc10gaXMgYSBbU3RyaW5nXSwgW2JpbmRdIHdpbGwKICAgKiBwZXJmb3JtIGEgW0ludGVybmV0QWRkcmVzcy5sb29rdXBdIGFuZCB1c2UgdGhlIGZpcnN0IHZhbHVlIGluIHRoZQogICAqIGxpc3QuIFRvIGxpc3RlbiBvbiB0aGUgbG9vcGJhY2sgYWRhcHRlciwgd2hpY2ggd2lsbCBhbGxvdyBvbmx5CiAgICogaW5jb21pbmcgY29ubmVjdGlvbnMgZnJvbSB0aGUgbG9jYWwgaG9zdCwgdXNlIHRoZSB2YWx1ZQogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY0XSBvcgogICAqIFtJbnRlcm5ldEFkZHJlc3MubG9vcGJhY2tJUHY2XS4gVG8gYWxsb3cgZm9yIGluY29taW5nCiAgICogY29ubmVjdGlvbiBmcm9tIHRoZSBuZXR3b3JrIHVzZSBlaXRoZXIgb25lIG9mIHRoZSB2YWx1ZXMKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmFueUlQdjRdIG9yIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2Nl0gdG8KICAgKiBiaW5kIHRvIGFsbCBpbnRlcmZhY2VzIG9yIHRoZSBJUCBhZGRyZXNzIG9mIGEgc3BlY2lmaWMgaW50ZXJmYWNlLgogICAqCiAgICogSWYgYW4gSVAgdmVyc2lvbiA2IChJUHY2KSBhZGRyZXNzIGlzIHVzZWQsIGJvdGggSVAgdmVyc2lvbiA2CiAgICogKElQdjYpIGFuZCB2ZXJzaW9uIDQgKElQdjQpIGNvbm5lY3Rpb25zIHdpbGwgYmUgYWNjZXB0ZWQuIFRvCiAgICogcmVzdHJpY3QgdGhpcyB0byB2ZXJzaW9uIDYgKElQdjYpIG9ubHksIHVzZSBbdjZPbmx5XSB0byBzZXQKICAgKiB2ZXJzaW9uIDYgb25seS4gSG93ZXZlciwgaWYgdGhlIGFkZHJlc3MgaXMKICAgKiBbSW50ZXJuZXRBZGRyZXNzLmxvb3BiYWNrSVB2Nl0sIG9ubHkgSVAgdmVyc2lvbiA2IChJUHY2KSBjb25uZWN0aW9ucwogICAqIHdpbGwgYmUgYWNjZXB0ZWQuCiAgICoKICAgKiBJZiBbcG9ydF0gaGFzIHRoZSB2YWx1ZSBbOjA6XSBhbiBlcGhlbWVyYWwgcG9ydCB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uIFRoZSBhY3R1YWwgcG9ydCB1c2VkIGNhbiBiZSByZXRyaWV2ZWQgdXNpbmcgdGhlCiAgICogW3BvcnRdIGdldHRlci4KICAgKgogICAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBbYmFja2xvZ10gY2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgbGlzdGVuCiAgICogYmFja2xvZyBmb3IgdGhlIHVuZGVybHlpbmcgT1MgbGlzdGVuIHNldHVwLiBJZiBbYmFja2xvZ10gaGFzIHRoZQogICAqIHZhbHVlIG9mIFs6MDpdICh0aGUgZGVmYXVsdCkgYSByZWFzb25hYmxlIHZhbHVlIHdpbGwgYmUgY2hvc2VuIGJ5CiAgICogdGhlIHN5c3RlbS4KICAgKgogICAqIFRoZSBvcHRpb25hbCBhcmd1bWVudCBbc2hhcmVkXSBzcGVjaWZpZXMgd2hldGhlciBhZGRpdGlvbmFsIEh0dHBTZXJ2ZXIKICAgKiBvYmplY3RzIGNhbiBiaW5kIHRvIHRoZSBzYW1lIGNvbWJpbmF0aW9uIG9mIGBhZGRyZXNzYCwgYHBvcnRgIGFuZCBgdjZPbmx5YC4KICAgKiBJZiBgc2hhcmVkYCBpcyBgdHJ1ZWAgYW5kIG1vcmUgYEh0dHBTZXJ2ZXJgcyBmcm9tIHRoaXMgaXNvbGF0ZSBvciBvdGhlcgogICAqIGlzb2xhdGVzIGFyZSBib3VuZCB0byB0aGUgcG9ydCwgdGhlbiB0aGUgaW5jb21pbmcgY29ubmVjdGlvbnMgd2lsbCBiZQogICAqIGRpc3RyaWJ1dGVkIGFtb25nIGFsbCB0aGUgYm91bmQgYEh0dHBTZXJ2ZXJgcy4gQ29ubmVjdGlvbnMgY2FuIGJlCiAgICogZGlzdHJpYnV0ZWQgb3ZlciBtdWx0aXBsZSBpc29sYXRlcyB0aGlzIHdheS4KICAgKi8KICBzdGF0aWMgRnV0dXJlPEh0dHBTZXJ2ZXI+IGJpbmQoYWRkcmVzcywgaW50IHBvcnQsCiAgICAgICAgICB7aW50IGJhY2tsb2c6IDAsIGJvb2wgdjZPbmx5OiBmYWxzZSwgYm9vbCBzaGFyZWQ6IGZhbHNlfSkgPT4KICAgICAgX0h0dHBTZXJ2ZXIuYmluZChhZGRyZXNzLCBwb3J0LCBiYWNrbG9nLCB2Nk9ubHksIHNoYXJlZCk7CgogIC8qKgogICAqIFRoZSBbYWRkcmVzc10gY2FuIGVpdGhlciBiZSBhIFtTdHJpbmddIG9yIGFuCiAgICogW0ludGVybmV0QWRkcmVzc10uIElmIFthZGRyZXNzXSBpcyBhIFtTdHJpbmddLCBbYmluZF0gd2lsbAogICAqIHBlcmZvcm0gYSBbSW50ZXJuZXRBZGRyZXNzLmxvb2t1cF0gYW5kIHVzZSB0aGUgZmlyc3QgdmFsdWUgaW4gdGhlCiAgICogbGlzdC4gVG8gbGlzdGVuIG9uIHRoZSBsb29wYmFjayBhZGFwdGVyLCB3aGljaCB3aWxsIGFsbG93IG9ubHkKICAgKiBpbmNvbWluZyBjb25uZWN0aW9ucyBmcm9tIHRoZSBsb2NhbCBob3N0LCB1c2UgdGhlIHZhbHVlCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjRdIG9yCiAgICogW0ludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjZdLiBUbyBhbGxvdyBmb3IgaW5jb21pbmcKICAgKiBjb25uZWN0aW9uIGZyb20gdGhlIG5ldHdvcmsgdXNlIGVpdGhlciBvbmUgb2YgdGhlIHZhbHVlcwogICAqIFtJbnRlcm5ldEFkZHJlc3MuYW55SVB2NF0gb3IgW0ludGVybmV0QWRkcmVzcy5hbnlJUHY2XSB0bwogICAqIGJpbmQgdG8gYWxsIGludGVyZmFjZXMgb3IgdGhlIElQIGFkZHJlc3Mgb2YgYSBzcGVjaWZpYyBpbnRlcmZhY2UuCiAgICoKICAgKiBJZiBhbiBJUCB2ZXJzaW9uIDYgKElQdjYpIGFkZHJlc3MgaXMgdXNlZCwgYm90aCBJUCB2ZXJzaW9uIDYKICAgKiAoSVB2NikgYW5kIHZlcnNpb24gNCAoSVB2NCkgY29ubmVjdGlvbnMgd2lsbCBiZSBhY2NlcHRlZC4gVG8KICAgKiByZXN0cmljdCB0aGlzIHRvIHZlcnNpb24gNiAoSVB2Nikgb25seSwgdXNlIFt2Nk9ubHldIHRvIHNldAogICAqIHZlcnNpb24gNiBvbmx5LgogICAqCiAgICogSWYgW3BvcnRdIGhhcyB0aGUgdmFsdWUgWzowOl0gYW4gZXBoZW1lcmFsIHBvcnQgd2lsbCBiZSBjaG9zZW4gYnkKICAgKiB0aGUgc3lzdGVtLiBUaGUgYWN0dWFsIHBvcnQgdXNlZCBjYW4gYmUgcmV0cmlldmVkIHVzaW5nIHRoZQogICAqIFtwb3J0XSBnZXR0ZXIuCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW2JhY2tsb2ddIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhlIGxpc3RlbgogICAqIGJhY2tsb2cgZm9yIHRoZSB1bmRlcmx5aW5nIE9TIGxpc3RlbiBzZXR1cC4gSWYgW2JhY2tsb2ddIGhhcyB0aGUKICAgKiB2YWx1ZSBvZiBbOjA6XSAodGhlIGRlZmF1bHQpIGEgcmVhc29uYWJsZSB2YWx1ZSB3aWxsIGJlIGNob3NlbiBieQogICAqIHRoZSBzeXN0ZW0uCiAgICoKICAgKiBJZiBbcmVxdWVzdENsaWVudENlcnRpZmljYXRlXSBpcyB0cnVlLCB0aGUgc2VydmVyIHdpbGwKICAgKiByZXF1ZXN0IGNsaWVudHMgdG8gYXV0aGVudGljYXRlIHdpdGggYSBjbGllbnQgY2VydGlmaWNhdGUuCiAgICogVGhlIHNlcnZlciB3aWxsIGFkdmVydGlzZSB0aGUgbmFtZXMgb2YgdHJ1c3RlZCBpc3N1ZXJzIG9mIGNsaWVudAogICAqIGNlcnRpZmljYXRlcywgZ2V0dGluZyB0aGVtIGZyb20gYSBbU2VjdXJpdHlDb250ZXh0XSwgd2hlcmUgdGhleSBoYXZlIGJlZW4KICAgKiBzZXQgdXNpbmcgW1NlY3VyaXR5Q29udGV4dC5zZXRDbGllbnRBdXRob3JpdGllc10uCiAgICoKICAgKiBUaGUgb3B0aW9uYWwgYXJndW1lbnQgW3NoYXJlZF0gc3BlY2lmaWVzIHdoZXRoZXIgYWRkaXRpb25hbCBIdHRwU2VydmVyCiAgICogb2JqZWN0cyBjYW4gYmluZCB0byB0aGUgc2FtZSBjb21iaW5hdGlvbiBvZiBgYWRkcmVzc2AsIGBwb3J0YCBhbmQgYHY2T25seWAuCiAgICogSWYgYHNoYXJlZGAgaXMgYHRydWVgIGFuZCBtb3JlIGBIdHRwU2VydmVyYHMgZnJvbSB0aGlzIGlzb2xhdGUgb3Igb3RoZXIKICAgKiBpc29sYXRlcyBhcmUgYm91bmQgdG8gdGhlIHBvcnQsIHRoZW4gdGhlIGluY29taW5nIGNvbm5lY3Rpb25zIHdpbGwgYmUKICAgKiBkaXN0cmlidXRlZCBhbW9uZyBhbGwgdGhlIGJvdW5kIGBIdHRwU2VydmVyYHMuIENvbm5lY3Rpb25zIGNhbiBiZQogICAqIGRpc3RyaWJ1dGVkIG92ZXIgbXVsdGlwbGUgaXNvbGF0ZXMgdGhpcyB3YXkuCiAgICovCgogIHN0YXRpYyBGdXR1cmU8SHR0cFNlcnZlcj4gYmluZFNlY3VyZSgKICAgICAgICAgIGFkZHJlc3MsIGludCBwb3J0LCBTZWN1cml0eUNvbnRleHQgY29udGV4dCwKICAgICAgICAgIHtpbnQgYmFja2xvZzogMCwKICAgICAgICAgIGJvb2wgdjZPbmx5OiBmYWxzZSwKICAgICAgICAgIGJvb2wgcmVxdWVzdENsaWVudENlcnRpZmljYXRlOiBmYWxzZSwKICAgICAgICAgIGJvb2wgc2hhcmVkOiBmYWxzZX0pID0+CiAgICAgIF9IdHRwU2VydmVyLmJpbmRTZWN1cmUoYWRkcmVzcywgcG9ydCwgY29udGV4dCwgYmFja2xvZywgdjZPbmx5LAogICAgICAgICAgcmVxdWVzdENsaWVudENlcnRpZmljYXRlLCBzaGFyZWQpOwoKICAvKioKICAgKiBBdHRhY2hlcyB0aGUgSFRUUCBzZXJ2ZXIgdG8gYW4gZXhpc3RpbmcgW1NlcnZlclNvY2tldF0uIFdoZW4gdGhlCiAgICogW0h0dHBTZXJ2ZXJdIGlzIGNsb3NlZCwgdGhlIFtIdHRwU2VydmVyXSB3aWxsIGp1c3QgZGV0YWNoIGl0c2VsZiwKICAgKiBjbG9zaW5nIGN1cnJlbnQgY29ubmVjdGlvbnMgYnV0IG5vdCBjbG9zaW5nIFtzZXJ2ZXJTb2NrZXRdLgogICAqLwogIGZhY3RvcnkgSHR0cFNlcnZlci5saXN0ZW5PbihTZXJ2ZXJTb2NrZXQgc2VydmVyU29ja2V0KSA9PgogICAgICBuZXcgX0h0dHBTZXJ2ZXIubGlzdGVuT24oc2VydmVyU29ja2V0KTsKCiAgLyoqCiAgICogUGVybWFuZW50bHkgc3RvcHMgdGhpcyBbSHR0cFNlcnZlcl0gZnJvbSBsaXN0ZW5pbmcgZm9yIG5ldwogICAqIGNvbm5lY3Rpb25zLiAgVGhpcyBjbG9zZXMgdGhlIFtTdHJlYW1dIG9mIFtIdHRwUmVxdWVzdF1zIHdpdGggYQogICAqIGRvbmUgZXZlbnQuIFRoZSByZXR1cm5lZCBmdXR1cmUgY29tcGxldGVzIHdoZW4gdGhlIHNlcnZlciBpcwogICAqIHN0b3BwZWQuIEZvciBhIHNlcnZlciBzdGFydGVkIHVzaW5nIFtiaW5kXSBvciBbYmluZFNlY3VyZV0gdGhpcwogICAqIG1lYW5zIHRoYXQgdGhlIHBvcnQgbGlzdGVuZWQgb24gbm8gbG9uZ2VyIGluIHVzZS4KICAgKgogICAqIElmIFtmb3JjZV0gaXMgYHRydWVgLCBhY3RpdmUgY29ubmVjdGlvbnMgd2lsbCBiZSBjbG9zZWQgaW1tZWRpYXRlbHkuCiAgICovCiAgRnV0dXJlIGNsb3NlKHtib29sIGZvcmNlOiBmYWxzZX0pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBwb3J0IHRoYXQgdGhlIHNlcnZlciBpcyBsaXN0ZW5pbmcgb24uIFRoaXMgY2FuIGJlCiAgICogdXNlZCB0byBnZXQgdGhlIGFjdHVhbCBwb3J0IHVzZWQgd2hlbiBhIHZhbHVlIG9mIDAgZm9yIFs6cG9ydDpdIGlzCiAgICogc3BlY2lmaWVkIGluIHRoZSBbYmluZF0gb3IgW2JpbmRTZWN1cmVdIGNhbGwuCiAgICovCiAgaW50IGdldCBwb3J0OwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBhZGRyZXNzIHRoYXQgdGhlIHNlcnZlciBpcyBsaXN0ZW5pbmcgb24uIFRoaXMgY2FuIGJlCiAgICogdXNlZCB0byBnZXQgdGhlIGFjdHVhbCBhZGRyZXNzIHVzZWQsIHdoZW4gdGhlIGFkZHJlc3MgaXMgZmV0Y2hlZCBieQogICAqIGEgbG9va3VwIGZyb20gYSBob3N0bmFtZS4KICAgKi8KICBJbnRlcm5ldEFkZHJlc3MgZ2V0IGFkZHJlc3M7CgogIC8qKgogICAqIFNldHMgdGhlIHRpbWVvdXQsIGluIHNlY29uZHMsIGZvciBzZXNzaW9ucyBvZiB0aGlzIFtIdHRwU2VydmVyXS4KICAgKiBUaGUgZGVmYXVsdCB0aW1lb3V0IGlzIDIwIG1pbnV0ZXMuCiAgICovCiAgc2V0IHNlc3Npb25UaW1lb3V0KGludCB0aW1lb3V0KTsKCiAgLyoqCiAgICogUmV0dXJucyBhbiBbSHR0cENvbm5lY3Rpb25zSW5mb10gb2JqZWN0IHN1bW1hcml6aW5nIHRoZSBudW1iZXIgb2YKICAgKiBjdXJyZW50IGNvbm5lY3Rpb25zIGhhbmRsZWQgYnkgdGhlIHNlcnZlci4KICAgKi8KICBIdHRwQ29ubmVjdGlvbnNJbmZvIGNvbm5lY3Rpb25zSW5mbygpOwp9CgovKioKICogU3VtbWFyeSBzdGF0aXN0aWNzIGFib3V0IGFuIFtIdHRwU2VydmVyXXMgY3VycmVudCBzb2NrZXQgY29ubmVjdGlvbnMuCiAqLwpjbGFzcyBIdHRwQ29ubmVjdGlvbnNJbmZvIHsKICAvKioKICAgKiBUb3RhbCBudW1iZXIgb2Ygc29ja2V0IGNvbm5lY3Rpb25zLgogICAqLwogIGludCB0b3RhbCA9IDA7CgogIC8qKgogICAqIE51bWJlciBvZiBhY3RpdmUgY29ubmVjdGlvbnMgd2hlcmUgYWN0dWFsIHJlcXVlc3QvcmVzcG9uc2UKICAgKiBwcm9jZXNzaW5nIGlzIGFjdGl2ZS4KICAgKi8KICBpbnQgYWN0aXZlID0gMDsKCiAgLyoqCiAgICogTnVtYmVyIG9mIGlkbGUgY29ubmVjdGlvbnMgaGVsZCBieSBjbGllbnRzIGFzIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMuCiAgICovCiAgaW50IGlkbGUgPSAwOwoKICAvKioKICAgKiBOdW1iZXIgb2YgY29ubmVjdGlvbnMgd2hpY2ggYXJlIHByZXBhcmluZyB0byBjbG9zZS4gTm90ZTogVGhlc2UKICAgKiBjb25uZWN0aW9ucyBhcmUgYWxzbyBwYXJ0IG9mIHRoZSBbOmFjdGl2ZTpdIGNvdW50IGFzIHRoZXkgbWlnaHQKICAgKiBzdGlsbCBiZSBzZW5kaW5nIGRhdGEgdG8gdGhlIGNsaWVudCBiZWZvcmUgZmluYWxseSBjbG9zaW5nLgogICAqLwogIGludCBjbG9zaW5nID0gMDsKfQoKLyoqCiAqIEhlYWRlcnMgZm9yIEhUVFAgcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy4KICoKICogSW4gc29tZSBzaXR1YXRpb25zLCBoZWFkZXJzIGFyZSBpbW11dGFibGU6CiAqCiAqICogSHR0cFJlcXVlc3QgYW5kIEh0dHBDbGllbnRSZXNwb25zZSBhbHdheXMgaGF2ZSBpbW11dGFibGUgaGVhZGVycy4KICoKICogKiBIdHRwUmVzcG9uc2UgYW5kIEh0dHBDbGllbnRSZXF1ZXN0IGhhdmUgaW1tdXRhYmxlIGhlYWRlcnMKICogICBmcm9tIHRoZSBtb21lbnQgdGhlIGJvZHkgaXMgd3JpdHRlbiB0by4KICoKICogSW4gdGhlc2Ugc2l0dWF0aW9ucywgdGhlIG11dGF0aW5nIG1ldGhvZHMgdGhyb3cgZXhjZXB0aW9ucy4KICoKICogRm9yIGFsbCBvcGVyYXRpb25zIG9uIEhUVFAgaGVhZGVycyB0aGUgaGVhZGVyIG5hbWUgaXMKICogY2FzZS1pbnNlbnNpdGl2ZS4KICoKICogVG8gc2V0IHRoZSB2YWx1ZSBvZiBhIGhlYWRlciB1c2UgdGhlIGBzZXQoKWAgbWV0aG9kOgogKgogKiAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIdHRwSGVhZGVycy5jYWNoZUNvbnRyb2xIZWFkZXIsCiAqICAgICAgICAgICAgICAgICAgICAgICAgICdtYXgtYWdlPTM2MDAsIG11c3QtcmV2YWxpZGF0ZScpOwogKgogKiBUbyByZXRyaWV2ZSB0aGUgdmFsdWUgb2YgYSBoZWFkZXIgdXNlIHRoZSBgdmFsdWUoKWAgbWV0aG9kOgogKgogKiAgICAgcHJpbnQocmVxdWVzdC5oZWFkZXJzLnZhbHVlKEh0dHBIZWFkZXJzLnVzZXJBZ2VudEhlYWRlcikpOwogKgogKiBBbiBIdHRwSGVhZGVycyBvYmplY3QgaG9sZHMgYSBsaXN0IG9mIHZhbHVlcyBmb3IgZWFjaCBuYW1lCiAqIGFzIHRoZSBzdGFuZGFyZCBhbGxvd3MuIEluIG1vc3QgY2FzZXMgYSBuYW1lIGhvbGRzIG9ubHkgYSBzaW5nbGUgdmFsdWUsCiAqIFRoZSBtb3N0IGNvbW1vbiBtb2RlIG9mIG9wZXJhdGlvbiBpcyB0byB1c2UgYHNldCgpYCBmb3Igc2V0dGluZyBhIHZhbHVlLAogKiBhbmQgYHZhbHVlKClgIGZvciByZXRyaWV2aW5nIGEgdmFsdWUuCiAqLwphYnN0cmFjdCBjbGFzcyBIdHRwSGVhZGVycyB7CiAgc3RhdGljIGNvbnN0IGFjY2VwdEhlYWRlciA9ICJhY2NlcHQiOwogIHN0YXRpYyBjb25zdCBhY2NlcHRDaGFyc2V0SGVhZGVyID0gImFjY2VwdC1jaGFyc2V0IjsKICBzdGF0aWMgY29uc3QgYWNjZXB0RW5jb2RpbmdIZWFkZXIgPSAiYWNjZXB0LWVuY29kaW5nIjsKICBzdGF0aWMgY29uc3QgYWNjZXB0TGFuZ3VhZ2VIZWFkZXIgPSAiYWNjZXB0LWxhbmd1YWdlIjsKICBzdGF0aWMgY29uc3QgYWNjZXB0UmFuZ2VzSGVhZGVyID0gImFjY2VwdC1yYW5nZXMiOwogIHN0YXRpYyBjb25zdCBhZ2VIZWFkZXIgPSAiYWdlIjsKICBzdGF0aWMgY29uc3QgYWxsb3dIZWFkZXIgPSAiYWxsb3ciOwogIHN0YXRpYyBjb25zdCBhdXRob3JpemF0aW9uSGVhZGVyID0gImF1dGhvcml6YXRpb24iOwogIHN0YXRpYyBjb25zdCBjYWNoZUNvbnRyb2xIZWFkZXIgPSAiY2FjaGUtY29udHJvbCI7CiAgc3RhdGljIGNvbnN0IGNvbm5lY3Rpb25IZWFkZXIgPSAiY29ubmVjdGlvbiI7CiAgc3RhdGljIGNvbnN0IGNvbnRlbnRFbmNvZGluZ0hlYWRlciA9ICJjb250ZW50LWVuY29kaW5nIjsKICBzdGF0aWMgY29uc3QgY29udGVudExhbmd1YWdlSGVhZGVyID0gImNvbnRlbnQtbGFuZ3VhZ2UiOwogIHN0YXRpYyBjb25zdCBjb250ZW50TGVuZ3RoSGVhZGVyID0gImNvbnRlbnQtbGVuZ3RoIjsKICBzdGF0aWMgY29uc3QgY29udGVudExvY2F0aW9uSGVhZGVyID0gImNvbnRlbnQtbG9jYXRpb24iOwogIHN0YXRpYyBjb25zdCBjb250ZW50TUQ1SGVhZGVyID0gImNvbnRlbnQtbWQ1IjsKICBzdGF0aWMgY29uc3QgY29udGVudFJhbmdlSGVhZGVyID0gImNvbnRlbnQtcmFuZ2UiOwogIHN0YXRpYyBjb25zdCBjb250ZW50VHlwZUhlYWRlciA9ICJjb250ZW50LXR5cGUiOwogIHN0YXRpYyBjb25zdCBkYXRlSGVhZGVyID0gImRhdGUiOwogIHN0YXRpYyBjb25zdCBldGFnSGVhZGVyID0gImV0YWciOwogIHN0YXRpYyBjb25zdCBleHBlY3RIZWFkZXIgPSAiZXhwZWN0IjsKICBzdGF0aWMgY29uc3QgZXhwaXJlc0hlYWRlciA9ICJleHBpcmVzIjsKICBzdGF0aWMgY29uc3QgZnJvbUhlYWRlciA9ICJmcm9tIjsKICBzdGF0aWMgY29uc3QgaG9zdEhlYWRlciA9ICJob3N0IjsKICBzdGF0aWMgY29uc3QgaWZNYXRjaEhlYWRlciA9ICJpZi1tYXRjaCI7CiAgc3RhdGljIGNvbnN0IGlmTW9kaWZpZWRTaW5jZUhlYWRlciA9ICJpZi1tb2RpZmllZC1zaW5jZSI7CiAgc3RhdGljIGNvbnN0IGlmTm9uZU1hdGNoSGVhZGVyID0gImlmLW5vbmUtbWF0Y2giOwogIHN0YXRpYyBjb25zdCBpZlJhbmdlSGVhZGVyID0gImlmLXJhbmdlIjsKICBzdGF0aWMgY29uc3QgaWZVbm1vZGlmaWVkU2luY2VIZWFkZXIgPSAiaWYtdW5tb2RpZmllZC1zaW5jZSI7CiAgc3RhdGljIGNvbnN0IGxhc3RNb2RpZmllZEhlYWRlciA9ICJsYXN0LW1vZGlmaWVkIjsKICBzdGF0aWMgY29uc3QgbG9jYXRpb25IZWFkZXIgPSAibG9jYXRpb24iOwogIHN0YXRpYyBjb25zdCBtYXhGb3J3YXJkc0hlYWRlciA9ICJtYXgtZm9yd2FyZHMiOwogIHN0YXRpYyBjb25zdCBwcmFnbWFIZWFkZXIgPSAicHJhZ21hIjsKICBzdGF0aWMgY29uc3QgcHJveHlBdXRoZW50aWNhdGVIZWFkZXIgPSAicHJveHktYXV0aGVudGljYXRlIjsKICBzdGF0aWMgY29uc3QgcHJveHlBdXRob3JpemF0aW9uSGVhZGVyID0gInByb3h5LWF1dGhvcml6YXRpb24iOwogIHN0YXRpYyBjb25zdCByYW5nZUhlYWRlciA9ICJyYW5nZSI7CiAgc3RhdGljIGNvbnN0IHJlZmVyZXJIZWFkZXIgPSAicmVmZXJlciI7CiAgc3RhdGljIGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSAicmV0cnktYWZ0ZXIiOwogIHN0YXRpYyBjb25zdCBzZXJ2ZXJIZWFkZXIgPSAic2VydmVyIjsKICBzdGF0aWMgY29uc3QgdGVIZWFkZXIgPSAidGUiOwogIHN0YXRpYyBjb25zdCB0cmFpbGVySGVhZGVyID0gInRyYWlsZXIiOwogIHN0YXRpYyBjb25zdCB0cmFuc2ZlckVuY29kaW5nSGVhZGVyID0gInRyYW5zZmVyLWVuY29kaW5nIjsKICBzdGF0aWMgY29uc3QgdXBncmFkZUhlYWRlciA9ICJ1cGdyYWRlIjsKICBzdGF0aWMgY29uc3QgdXNlckFnZW50SGVhZGVyID0gInVzZXItYWdlbnQiOwogIHN0YXRpYyBjb25zdCB2YXJ5SGVhZGVyID0gInZhcnkiOwogIHN0YXRpYyBjb25zdCB2aWFIZWFkZXIgPSAidmlhIjsKICBzdGF0aWMgY29uc3Qgd2FybmluZ0hlYWRlciA9ICJ3YXJuaW5nIjsKICBzdGF0aWMgY29uc3Qgd3d3QXV0aGVudGljYXRlSGVhZGVyID0gInd3dy1hdXRoZW50aWNhdGUiOwoKICBARGVwcmVjYXRlZCgiVXNlIGFjY2VwdEhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQUNDRVBUID0gYWNjZXB0SGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgYWNjZXB0Q2hhcnNldEhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQUNDRVBUX0NIQVJTRVQgPSBhY2NlcHRDaGFyc2V0SGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgYWNjZXB0RW5jb2RpbmdIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEFDQ0VQVF9FTkNPRElORyA9IGFjY2VwdEVuY29kaW5nSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgYWNjZXB0TGFuZ3VhZ2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEFDQ0VQVF9MQU5HVUFHRSA9IGFjY2VwdExhbmd1YWdlSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgYWNjZXB0UmFuZ2VzSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBBQ0NFUFRfUkFOR0VTID0gYWNjZXB0UmFuZ2VzSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgYWdlSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBBR0UgPSBhZ2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBhbGxvd0hlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQUxMT1cgPSBhbGxvd0hlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGF1dGhvcml6YXRpb25IZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEFVVEhPUklaQVRJT04gPSBhdXRob3JpemF0aW9uSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgY2FjaGVDb250cm9sSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBDQUNIRV9DT05UUk9MID0gY2FjaGVDb250cm9sSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgY29ubmVjdGlvbkhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQ09OTkVDVElPTiA9IGNvbm5lY3Rpb25IZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50RW5jb2RpbmdIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENPTlRFTlRfRU5DT0RJTkcgPSBjb250ZW50RW5jb2RpbmdIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50TGFuZ3VhZ2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENPTlRFTlRfTEFOR1VBR0UgPSBjb250ZW50TGFuZ3VhZ2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50TGVuZ3RoSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBDT05URU5UX0xFTkdUSCA9IGNvbnRlbnRMZW5ndGhIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50TG9jYXRpb25IZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENPTlRFTlRfTE9DQVRJT04gPSBjb250ZW50TG9jYXRpb25IZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50TUQ1SGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBDT05URU5UX01ENSA9IGNvbnRlbnRNRDVIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50UmFuZ2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IENPTlRFTlRfUkFOR0UgPSBjb250ZW50UmFuZ2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBjb250ZW50VHlwZUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQ09OVEVOVF9UWVBFID0gY29udGVudFR5cGVIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBkYXRlSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBEQVRFID0gZGF0ZUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGV0YWdIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEVUQUcgPSBldGFnSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgZXhwZWN0SGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBFWFBFQ1QgPSBleHBlY3RIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBleHBpcmVzSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBFWFBJUkVTID0gZXhwaXJlc0hlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGZyb21IZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IEZST00gPSBmcm9tSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgaG9zdEhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgSE9TVCA9IGhvc3RIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBpZk1hdGNoSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBJRl9NQVRDSCA9IGlmTWF0Y2hIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBpZk1vZGlmaWVkU2luY2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IElGX01PRElGSUVEX1NJTkNFID0gaWZNb2RpZmllZFNpbmNlSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgaWZOb25lTWF0Y2hIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IElGX05PTkVfTUFUQ0ggPSBpZk5vbmVNYXRjaEhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGlmUmFuZ2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IElGX1JBTkdFID0gaWZSYW5nZUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIGlmVW5tb2RpZmllZFNpbmNlSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBJRl9VTk1PRElGSUVEX1NJTkNFID0gaWZVbm1vZGlmaWVkU2luY2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBsYXN0TW9kaWZpZWRIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IExBU1RfTU9ESUZJRUQgPSBsYXN0TW9kaWZpZWRIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSBsb2NhdGlvbkhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgTE9DQVRJT04gPSBsb2NhdGlvbkhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIG1heEZvcndhcmRzSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBNQVhfRk9SV0FSRFMgPSBtYXhGb3J3YXJkc0hlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHByYWdtYUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgUFJBR01BID0gcHJhZ21hSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgcHJveHlBdXRoZW50aWNhdGVIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFBST1hZX0FVVEhFTlRJQ0FURSA9IHByb3h5QXV0aGVudGljYXRlSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgcHJveHlBdXRob3JpemF0aW9uSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBQUk9YWV9BVVRIT1JJWkFUSU9OID0gcHJveHlBdXRob3JpemF0aW9uSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgcmFuZ2VIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJBTkdFID0gcmFuZ2VIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSByZWZlcmVySGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBSRUZFUkVSID0gcmVmZXJlckhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHJldHJ5QWZ0ZXJIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJFVFJZX0FGVEVSID0gcmV0cnlBZnRlckhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHNlcnZlckhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgU0VSVkVSID0gc2VydmVySGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgdGVIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFRFID0gdGVIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSB0cmFpbGVySGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBUUkFJTEVSID0gdHJhaWxlckhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHRyYW5zZmVyRW5jb2RpbmdIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFRSQU5TRkVSX0VOQ09ESU5HID0gdHJhbnNmZXJFbmNvZGluZ0hlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHVwZ3JhZGVIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFVQR1JBREUgPSB1cGdyYWRlSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgdXNlckFnZW50SGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBVU0VSX0FHRU5UID0gdXNlckFnZW50SGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2UgdmFyeUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgVkFSWSA9IHZhcnlIZWFkZXI7CiAgQERlcHJlY2F0ZWQoIlVzZSB2aWFIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFZJQSA9IHZpYUhlYWRlcjsKICBARGVwcmVjYXRlZCgiVXNlIHdhcm5pbmdIZWFkZXIgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFdBUk5JTkcgPSB3YXJuaW5nSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2Ugd3d3QXV0aGVudGljYXRlSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBXV1dfQVVUSEVOVElDQVRFID0gd3d3QXV0aGVudGljYXRlSGVhZGVyOwoKICAvLyBDb29raWUgaGVhZGVycyBmcm9tIFJGQyA2MjY1LgogIHN0YXRpYyBjb25zdCBjb29raWVIZWFkZXIgPSAiY29va2llIjsKICBzdGF0aWMgY29uc3Qgc2V0Q29va2llSGVhZGVyID0gInNldC1jb29raWUiOwoKICBARGVwcmVjYXRlZCgiVXNlIGNvb2tpZUhlYWRlciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQ09PS0lFID0gY29va2llSGVhZGVyOwogIEBEZXByZWNhdGVkKCJVc2Ugc2V0Q29va2llSGVhZGVyIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBTRVRfQ09PS0lFID0gc2V0Q29va2llSGVhZGVyOwoKICBzdGF0aWMgY29uc3QgZ2VuZXJhbEhlYWRlcnMgPSBjb25zdCBbCiAgICBjYWNoZUNvbnRyb2xIZWFkZXIsCiAgICBjb25uZWN0aW9uSGVhZGVyLAogICAgZGF0ZUhlYWRlciwKICAgIHByYWdtYUhlYWRlciwKICAgIHRyYWlsZXJIZWFkZXIsCiAgICB0cmFuc2ZlckVuY29kaW5nSGVhZGVyLAogICAgdXBncmFkZUhlYWRlciwKICAgIHZpYUhlYWRlciwKICAgIHdhcm5pbmdIZWFkZXIKICBdOwoKICBARGVwcmVjYXRlZCgiVXNlIGdlbmVyYWxIZWFkZXJzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBHRU5FUkFMX0hFQURFUlMgPSBnZW5lcmFsSGVhZGVyczsKCiAgc3RhdGljIGNvbnN0IGVudGl0eUhlYWRlcnMgPSBjb25zdCBbCiAgICBhbGxvd0hlYWRlciwKICAgIGNvbnRlbnRFbmNvZGluZ0hlYWRlciwKICAgIGNvbnRlbnRMYW5ndWFnZUhlYWRlciwKICAgIGNvbnRlbnRMZW5ndGhIZWFkZXIsCiAgICBjb250ZW50TG9jYXRpb25IZWFkZXIsCiAgICBjb250ZW50TUQ1SGVhZGVyLAogICAgY29udGVudFJhbmdlSGVhZGVyLAogICAgY29udGVudFR5cGVIZWFkZXIsCiAgICBleHBpcmVzSGVhZGVyLAogICAgbGFzdE1vZGlmaWVkSGVhZGVyCiAgXTsKCiAgQERlcHJlY2F0ZWQoIlVzZSBlbnRpdHlIZWFkZXJzIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBFTlRJVFlfSEVBREVSUyA9IGVudGl0eUhlYWRlcnM7CgogIHN0YXRpYyBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBjb25zdCBbCiAgICBhY2NlcHRSYW5nZXNIZWFkZXIsCiAgICBhZ2VIZWFkZXIsCiAgICBldGFnSGVhZGVyLAogICAgbG9jYXRpb25IZWFkZXIsCiAgICBwcm94eUF1dGhlbnRpY2F0ZUhlYWRlciwKICAgIHJldHJ5QWZ0ZXJIZWFkZXIsCiAgICBzZXJ2ZXJIZWFkZXIsCiAgICB2YXJ5SGVhZGVyLAogICAgd3d3QXV0aGVudGljYXRlSGVhZGVyCiAgXTsKCiAgQERlcHJlY2F0ZWQoIlVzZSByZXNwb25zZUhlYWRlcnMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJFU1BPTlNFX0hFQURFUlMgPSByZXNwb25zZUhlYWRlcnM7CgogIHN0YXRpYyBjb25zdCByZXF1ZXN0SGVhZGVycyA9IGNvbnN0IFsKICAgIGFjY2VwdEhlYWRlciwKICAgIGFjY2VwdENoYXJzZXRIZWFkZXIsCiAgICBhY2NlcHRFbmNvZGluZ0hlYWRlciwKICAgIGFjY2VwdExhbmd1YWdlSGVhZGVyLAogICAgYXV0aG9yaXphdGlvbkhlYWRlciwKICAgIGV4cGVjdEhlYWRlciwKICAgIGZyb21IZWFkZXIsCiAgICBob3N0SGVhZGVyLAogICAgaWZNYXRjaEhlYWRlciwKICAgIGlmTW9kaWZpZWRTaW5jZUhlYWRlciwKICAgIGlmTm9uZU1hdGNoSGVhZGVyLAogICAgaWZSYW5nZUhlYWRlciwKICAgIGlmVW5tb2RpZmllZFNpbmNlSGVhZGVyLAogICAgbWF4Rm9yd2FyZHNIZWFkZXIsCiAgICBwcm94eUF1dGhvcml6YXRpb25IZWFkZXIsCiAgICByYW5nZUhlYWRlciwKICAgIHJlZmVyZXJIZWFkZXIsCiAgICB0ZUhlYWRlciwKICAgIHVzZXJBZ2VudEhlYWRlcgogIF07CgogIEBEZXByZWNhdGVkKCJVc2UgcmVxdWVzdEhlYWRlcnMgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IFJFUVVFU1RfSEVBREVSUyA9IHJlcXVlc3RIZWFkZXJzOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBkYXRlLiBUaGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSB3aWxsCiAgICogcmVmbGVjdCB0aGUgJ2RhdGUnIGhlYWRlci4KICAgKi8KICBEYXRlVGltZSBkYXRlOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBleHBpcnkgZGF0ZS4gVGhlIHZhbHVlIG9mIHRoaXMgcHJvcGVydHkgd2lsbAogICAqIHJlZmxlY3QgdGhlICdleHBpcmVzJyBoZWFkZXIuCiAgICovCiAgRGF0ZVRpbWUgZXhwaXJlczsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgImlmLW1vZGlmaWVkLXNpbmNlIiBkYXRlLiBUaGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSB3aWxsCiAgICogcmVmbGVjdCB0aGUgImlmLW1vZGlmaWVkLXNpbmNlIiBoZWFkZXIuCiAgICovCiAgRGF0ZVRpbWUgaWZNb2RpZmllZFNpbmNlOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBob3N0IHBhcnQgb2YgdGhlICdob3N0JyBoZWFkZXIgZm9yIHRoZQogICAqIGNvbm5lY3Rpb24uCiAgICovCiAgU3RyaW5nIGhvc3Q7CgogIC8qKgogICAqIEdldHMgYW5kIHNldHMgdGhlIHBvcnQgcGFydCBvZiB0aGUgJ2hvc3QnIGhlYWRlciBmb3IgdGhlCiAgICogY29ubmVjdGlvbi4KICAgKi8KICBpbnQgcG9ydDsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgY29udGVudCB0eXBlLiBOb3RlIHRoYXQgdGhlIGNvbnRlbnQgdHlwZSBpbiB0aGUKICAgKiBoZWFkZXIgd2lsbCBvbmx5IGJlIHVwZGF0ZWQgaWYgdGhpcyBmaWVsZCBpcyBzZXQKICAgKiBkaXJlY3RseS4gTXV0YXRpbmcgdGhlIHJldHVybmVkIGN1cnJlbnQgdmFsdWUgd2lsbCBoYXZlIG5vCiAgICogZWZmZWN0LgogICAqLwogIENvbnRlbnRUeXBlIGNvbnRlbnRUeXBlOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBjb250ZW50IGxlbmd0aCBoZWFkZXIgdmFsdWUuCiAgICovCiAgaW50IGNvbnRlbnRMZW5ndGg7CgogIC8qKgogICAqIEdldHMgYW5kIHNldHMgdGhlIHBlcnNpc3RlbnQgY29ubmVjdGlvbiBoZWFkZXIgdmFsdWUuCiAgICovCiAgYm9vbCBwZXJzaXN0ZW50Q29ubmVjdGlvbjsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgY2h1bmtlZCB0cmFuc2ZlciBlbmNvZGluZyBoZWFkZXIgdmFsdWUuCiAgICovCiAgYm9vbCBjaHVua2VkVHJhbnNmZXJFbmNvZGluZzsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgbGlzdCBvZiB2YWx1ZXMgZm9yIHRoZSBoZWFkZXIgbmFtZWQgW25hbWVdLiBJZiB0aGVyZQogICAqIGlzIG5vIGhlYWRlciB3aXRoIHRoZSBwcm92aWRlZCBuYW1lLCBbOm51bGw6XSB3aWxsIGJlIHJldHVybmVkLgogICAqLwogIExpc3Q8U3RyaW5nPiBvcGVyYXRvciBbXShTdHJpbmcgbmFtZSk7CgogIC8qKgogICAqIENvbnZlbmllbmNlIG1ldGhvZCBmb3IgdGhlIHZhbHVlIGZvciBhIHNpbmdsZSB2YWx1ZWQgaGVhZGVyLiBJZgogICAqIHRoZXJlIGlzIG5vIGhlYWRlciB3aXRoIHRoZSBwcm92aWRlZCBuYW1lLCBbOm51bGw6XSB3aWxsIGJlCiAgICogcmV0dXJuZWQuIElmIHRoZSBoZWFkZXIgaGFzIG1vcmUgdGhhbiBvbmUgdmFsdWUgYW4gZXhjZXB0aW9uIGlzCiAgICogdGhyb3duLgogICAqLwogIFN0cmluZyB2YWx1ZShTdHJpbmcgbmFtZSk7CgogIC8qKgogICAqIEFkZHMgYSBoZWFkZXIgdmFsdWUuIFRoZSBoZWFkZXIgbmFtZWQgW25hbWVdIHdpbGwgaGF2ZSB0aGUgdmFsdWUKICAgKiBbdmFsdWVdIGFkZGVkIHRvIGl0cyBsaXN0IG9mIHZhbHVlcy4gU29tZSBoZWFkZXJzIGFyZSBzaW5nbGUKICAgKiB2YWx1ZWQsIGFuZCBmb3IgdGhlc2UgYWRkaW5nIGEgdmFsdWUgd2lsbCByZXBsYWNlIHRoZSBwcmV2aW91cwogICAqIHZhbHVlLiBJZiB0aGUgdmFsdWUgaXMgb2YgdHlwZSBEYXRlVGltZSBhIEhUVFAgZGF0ZSBmb3JtYXQgd2lsbCBiZQogICAqIGFwcGxpZWQuIElmIHRoZSB2YWx1ZSBpcyBhIFs6TGlzdDpdIGVhY2ggZWxlbWVudCBvZiB0aGUgbGlzdCB3aWxsCiAgICogYmUgYWRkZWQgc2VwYXJhdGVseS4gRm9yIGFsbCBvdGhlciB0eXBlcyB0aGUgZGVmYXVsdCBbOnRvU3RyaW5nOl0KICAgKiBtZXRob2Qgd2lsbCBiZSB1c2VkLgogICAqLwogIHZvaWQgYWRkKFN0cmluZyBuYW1lLCBPYmplY3QgdmFsdWUpOwoKICAvKioKICAgKiBTZXRzIGEgaGVhZGVyLiBUaGUgaGVhZGVyIG5hbWVkIFtuYW1lXSB3aWxsIGhhdmUgYWxsIGl0cyB2YWx1ZXMKICAgKiBjbGVhcmVkIGJlZm9yZSB0aGUgdmFsdWUgW3ZhbHVlXSBpcyBhZGRlZCBhcyBpdHMgdmFsdWUuCiAgICovCiAgdm9pZCBzZXQoU3RyaW5nIG5hbWUsIE9iamVjdCB2YWx1ZSk7CgogIC8qKgogICAqIFJlbW92ZXMgYSBzcGVjaWZpYyB2YWx1ZSBmb3IgYSBoZWFkZXIgbmFtZS4gU29tZSBoZWFkZXJzIGhhdmUKICAgKiBzeXN0ZW0gc3VwcGxpZWQgdmFsdWVzIGFuZCBmb3IgdGhlc2UgdGhlIHN5c3RlbSBzdXBwbGllZCB2YWx1ZXMKICAgKiB3aWxsIHN0aWxsIGJlIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uIG9mIHZhbHVlcyBmb3IgdGhlIGhlYWRlci4KICAgKi8KICB2b2lkIHJlbW92ZShTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlKTsKCiAgLyoqCiAgICogUmVtb3ZlcyBhbGwgdmFsdWVzIGZvciB0aGUgc3BlY2lmaWVkIGhlYWRlciBuYW1lLiBTb21lIGhlYWRlcnMKICAgKiBoYXZlIHN5c3RlbSBzdXBwbGllZCB2YWx1ZXMgYW5kIGZvciB0aGVzZSB0aGUgc3lzdGVtIHN1cHBsaWVkCiAgICogdmFsdWVzIHdpbGwgc3RpbGwgYmUgYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb24gb2YgdmFsdWVzIGZvciB0aGUKICAgKiBoZWFkZXIuCiAgICovCiAgdm9pZCByZW1vdmVBbGwoU3RyaW5nIG5hbWUpOwoKICAvKioKICAgKiBFbnVtZXJhdGVzIHRoZSBoZWFkZXJzLCBhcHBseWluZyB0aGUgZnVuY3Rpb24gW2ZdIHRvIGVhY2gKICAgKiBoZWFkZXIuIFRoZSBoZWFkZXIgbmFtZSBwYXNzZWQgaW4gWzpuYW1lOl0gd2lsbCBiZSBhbGwgbG93ZXIKICAgKiBjYXNlLgogICAqLwogIHZvaWQgZm9yRWFjaCh2b2lkIGYoU3RyaW5nIG5hbWUsIExpc3Q8U3RyaW5nPiB2YWx1ZXMpKTsKCiAgLyoqCiAgICogRGlzYWJsZXMgZm9sZGluZyBmb3IgdGhlIGhlYWRlciBuYW1lZCBbbmFtZV0gd2hlbiBzZW5kaW5nIHRoZSBIVFRQCiAgICogaGVhZGVyLiBCeSBkZWZhdWx0LCBtdWx0aXBsZSBoZWFkZXIgdmFsdWVzIGFyZSBmb2xkZWQgaW50byBhCiAgICogc2luZ2xlIGhlYWRlciBsaW5lIGJ5IHNlcGFyYXRpbmcgdGhlIHZhbHVlcyB3aXRoIGNvbW1hcy4gVGhlCiAgICogJ3NldC1jb29raWUnIGhlYWRlciBoYXMgZm9sZGluZyBkaXNhYmxlZCBieSBkZWZhdWx0LgogICAqLwogIHZvaWQgbm9Gb2xkaW5nKFN0cmluZyBuYW1lKTsKCiAgLyoqCiAgICogUmVtb3ZlIGFsbCBoZWFkZXJzLiBTb21lIGhlYWRlcnMgaGF2ZSBzeXN0ZW0gc3VwcGxpZWQgdmFsdWVzIGFuZAogICAqIGZvciB0aGVzZSB0aGUgc3lzdGVtIHN1cHBsaWVkIHZhbHVlcyB3aWxsIHN0aWxsIGJlIGFkZGVkIHRvIHRoZQogICAqIGNvbGxlY3Rpb24gb2YgdmFsdWVzIGZvciB0aGUgaGVhZGVyLgogICAqLwogIHZvaWQgY2xlYXIoKTsKfQoKLyoqCiAqIFJlcHJlc2VudGF0aW9uIG9mIGEgaGVhZGVyIHZhbHVlIGluIHRoZSBmb3JtOgogKgogKiAgIFs6dmFsdWU7IHBhcmFtZXRlcjE9dmFsdWUxOyBwYXJhbWV0ZXIyPXZhbHVlMjpdCiAqCiAqIFtIZWFkZXJWYWx1ZV0gY2FuIGJlIHVzZWQgdG8gY29udmVuaWVudGx5IGJ1aWxkIGFuZCBwYXJzZSBoZWFkZXIKICogdmFsdWVzIG9uIHRoaXMgZm9ybS4KICoKICogVG8gYnVpbGQgYW4gWzphY2NlcHRzOl0gaGVhZGVyIHdpdGggdGhlIHZhbHVlCiAqCiAqICAgICB0ZXh0L3BsYWluOyBxPTAuMywgdGV4dC9odG1sCiAqCiAqIHVzZSBjb2RlIGxpa2UgdGhpczoKICoKICogICAgIEh0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QgPSAuLi47CiAqICAgICB2YXIgdiA9IG5ldyBIZWFkZXJWYWx1ZSgidGV4dC9wbGFpbiIsIHsicSI6ICIwLjMifSk7CiAqICAgICByZXF1ZXN0LmhlYWRlcnMuYWRkKEh0dHBIZWFkZXJzLmFjY2VwdEhlYWRlciwgdik7CiAqICAgICByZXF1ZXN0LmhlYWRlcnMuYWRkKEh0dHBIZWFkZXJzLmFjY2VwdEhlYWRlciwgInRleHQvaHRtbCIpOwogKgogKiBUbyBwYXJzZSB0aGUgaGVhZGVyIHZhbHVlcyB1c2UgdGhlIFs6cGFyc2U6XSBzdGF0aWMgbWV0aG9kLgogKgogKiAgICAgSHR0cFJlcXVlc3QgcmVxdWVzdCA9IC4uLjsKICogICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSByZXF1ZXN0LmhlYWRlcnNbSHR0cEhlYWRlcnMuYWNjZXB0SGVhZGVyXTsKICogICAgIHZhbHVlcy5mb3JFYWNoKCh2YWx1ZSkgewogKiAgICAgICBIZWFkZXJWYWx1ZSB2ID0gSGVhZGVyVmFsdWUucGFyc2UodmFsdWUpOwogKiAgICAgICAvLyBVc2Ugdi52YWx1ZSBhbmQgdi5wYXJhbWV0ZXJzCiAqICAgICB9KTsKICoKICogQW4gaW5zdGFuY2Ugb2YgW0hlYWRlclZhbHVlXSBpcyBpbW11dGFibGUuCiAqLwphYnN0cmFjdCBjbGFzcyBIZWFkZXJWYWx1ZSB7CiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBoZWFkZXIgdmFsdWUgb2JqZWN0IHNldHRpbmcgdGhlIHZhbHVlIGFuZCBwYXJhbWV0ZXJzLgogICAqLwogIGZhY3RvcnkgSGVhZGVyVmFsdWUoW1N0cmluZyB2YWx1ZSA9ICIiLCBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnNdKSB7CiAgICByZXR1cm4gbmV3IF9IZWFkZXJWYWx1ZSh2YWx1ZSwgcGFyYW1ldGVycyk7CiAgfQoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IGhlYWRlciB2YWx1ZSBvYmplY3QgZnJvbSBwYXJzaW5nIGEgaGVhZGVyIHZhbHVlCiAgICogc3RyaW5nIHdpdGggYm90aCB2YWx1ZSBhbmQgb3B0aW9uYWwgcGFyYW1ldGVycy4KICAgKi8KICBzdGF0aWMgSGVhZGVyVmFsdWUgcGFyc2UoU3RyaW5nIHZhbHVlLAogICAgICB7U3RyaW5nIHBhcmFtZXRlclNlcGFyYXRvcjogIjsiLAogICAgICBTdHJpbmcgdmFsdWVTZXBhcmF0b3I6IG51bGwsCiAgICAgIGJvb2wgcHJlc2VydmVCYWNrc2xhc2g6IGZhbHNlfSkgewogICAgcmV0dXJuIF9IZWFkZXJWYWx1ZS5wYXJzZSh2YWx1ZSwKICAgICAgICBwYXJhbWV0ZXJTZXBhcmF0b3I6IHBhcmFtZXRlclNlcGFyYXRvciwKICAgICAgICB2YWx1ZVNlcGFyYXRvcjogdmFsdWVTZXBhcmF0b3IsCiAgICAgICAgcHJlc2VydmVCYWNrc2xhc2g6IHByZXNlcnZlQmFja3NsYXNoKTsKICB9CgogIC8qKgogICAqIEdldHMgdGhlIGhlYWRlciB2YWx1ZS4KICAgKi8KICBTdHJpbmcgZ2V0IHZhbHVlOwoKICAvKioKICAgKiBHZXRzIHRoZSBtYXAgb2YgcGFyYW1ldGVycy4KICAgKgogICAqIFRoaXMgbWFwIGNhbm5vdCBiZSBtb2RpZmllZC4gSW52b2tpbmcgYW55IG9wZXJhdGlvbiB3aGljaCB3b3VsZAogICAqIG1vZGlmeSB0aGUgbWFwIHdpbGwgdGhyb3cgW1Vuc3VwcG9ydGVkRXJyb3JdLgogICAqLwogIE1hcDxTdHJpbmcsIFN0cmluZz4gZ2V0IHBhcmFtZXRlcnM7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGZvcm1hdHRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24gaW4gdGhlIGZvcm06CiAgICoKICAgKiAgICAgdmFsdWU7IHBhcmFtZXRlcjE9dmFsdWUxOyBwYXJhbWV0ZXIyPXZhbHVlMgogICAqLwogIFN0cmluZyB0b1N0cmluZygpOwp9CgphYnN0cmFjdCBjbGFzcyBIdHRwU2Vzc2lvbiBpbXBsZW1lbnRzIE1hcCB7CiAgLyoqCiAgICogR2V0cyB0aGUgaWQgZm9yIHRoZSBjdXJyZW50IHNlc3Npb24uCiAgICovCiAgU3RyaW5nIGdldCBpZDsKCiAgLyoqCiAgICogRGVzdHJveXMgdGhlIHNlc3Npb24uIFRoaXMgd2lsbCB0ZXJtaW5hdGUgdGhlIHNlc3Npb24gYW5kIGFueSBmdXJ0aGVyCiAgICogY29ubmVjdGlvbnMgd2l0aCB0aGlzIGlkIHdpbGwgYmUgZ2l2ZW4gYSBuZXcgaWQgYW5kIHNlc3Npb24uCiAgICovCiAgdm9pZCBkZXN0cm95KCk7CgogIC8qKgogICAqIFNldHMgYSBjYWxsYmFjayB0aGF0IHdpbGwgYmUgY2FsbGVkIHdoZW4gdGhlIHNlc3Npb24gaXMgdGltZWQgb3V0LgogICAqLwogIHZvaWQgc2V0IG9uVGltZW91dCh2b2lkIGNhbGxiYWNrKCkpOwoKICAvKioKICAgKiBJcyB0cnVlIGlmIHRoZSBzZXNzaW9uIGhhcyBub3QgYmVlbiBzZW50IHRvIHRoZSBjbGllbnQgeWV0LgogICAqLwogIGJvb2wgZ2V0IGlzTmV3Owp9CgovKioKICogUmVwcmVzZW50YXRpb24gb2YgYSBjb250ZW50IHR5cGUuIEFuIGluc3RhbmNlIG9mIFtDb250ZW50VHlwZV0gaXMKICogaW1tdXRhYmxlLgogKi8KYWJzdHJhY3QgY2xhc3MgQ29udGVudFR5cGUgaW1wbGVtZW50cyBIZWFkZXJWYWx1ZSB7CiAgLyoqCiAgICogQ29udGVudCB0eXBlIGZvciBwbGFpbiB0ZXh0IHVzaW5nIFVURi04IGVuY29kaW5nLgogICAqCiAgICogICAgIHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgKICAgKi8KICBzdGF0aWMgZmluYWwgdGV4dCA9IG5ldyBDb250ZW50VHlwZSgidGV4dCIsICJwbGFpbiIsIGNoYXJzZXQ6ICJ1dGYtOCIpOwogIEBEZXByZWNhdGVkKCJVc2UgdGV4dCBpbnN0ZWFkIikKICBzdGF0aWMgZmluYWwgVEVYVCA9IHRleHQ7CgogIC8qKgogICAqICBDb250ZW50IHR5cGUgZm9yIEhUTUwgdXNpbmcgVVRGLTggZW5jb2RpbmcuCiAgICoKICAgKiAgICAgdGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04CiAgICovCiAgc3RhdGljIGZpbmFsIGh0bWwgPSBuZXcgQ29udGVudFR5cGUoInRleHQiLCAiaHRtbCIsIGNoYXJzZXQ6ICJ1dGYtOCIpOwogIEBEZXByZWNhdGVkKCJVc2UgaHRtbCBpbnN0ZWFkIikKICBzdGF0aWMgZmluYWwgSFRNTCA9IGh0bWw7CgogIC8qKgogICAqICBDb250ZW50IHR5cGUgZm9yIEpTT04gdXNpbmcgVVRGLTggZW5jb2RpbmcuCiAgICoKICAgKiAgICAgYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD11dGYtOAogICAqLwogIHN0YXRpYyBmaW5hbCBqc29uID0gbmV3IENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbiIsICJqc29uIiwgY2hhcnNldDogInV0Zi04Iik7CiAgQERlcHJlY2F0ZWQoIlVzZSBqc29uIGluc3RlYWQiKQogIHN0YXRpYyBmaW5hbCBKU09OID0ganNvbjsKCiAgLyoqCiAgICogIENvbnRlbnQgdHlwZSBmb3IgYmluYXJ5IGRhdGEuCiAgICoKICAgKiAgICAgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCiAgICovCiAgc3RhdGljIGZpbmFsIGJpbmFyeSA9IG5ldyBDb250ZW50VHlwZSgiYXBwbGljYXRpb24iLCAib2N0ZXQtc3RyZWFtIik7CiAgQERlcHJlY2F0ZWQoIlVzZSBiaW5hcnkgaW5zdGVhZCIpCiAgc3RhdGljIGZpbmFsIEJJTkFSWSA9IGJpbmFyeTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBjb250ZW50IHR5cGUgb2JqZWN0IHNldHRpbmcgdGhlIHByaW1hcnkgdHlwZSBhbmQKICAgKiBzdWIgdHlwZS4gVGhlIGNoYXJzZXQgYW5kIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBjYW4gYWxzbyBiZSBzZXQKICAgKiB1c2luZyBbY2hhcnNldF0gYW5kIFtwYXJhbWV0ZXJzXS4gSWYgY2hhcnNldCBpcyBwYXNzZWQgYW5kCiAgICogW3BhcmFtZXRlcnNdIGNvbnRhaW5zIGNoYXJzZXQgYXMgd2VsbCB0aGUgcGFzc2VkIFtjaGFyc2V0XSB3aWxsCiAgICogb3ZlcnJpZGUgdGhlIHZhbHVlIGluIHBhcmFtZXRlcnMuIEtleXMgcGFzc2VkIGluIHBhcmFtZXRlcnMgd2lsbCBiZQogICAqIGNvbnZlcnRlZCB0byBsb3dlciBjYXNlLiBUaGUgYGNoYXJzZXRgIGVudHJ5LCB3aGV0aGVyIHBhc3NlZCBhcyBgY2hhcnNldGAKICAgKiBvciBpbiBgcGFyYW1ldGVyc2AsIHdpbGwgaGF2ZSBpdHMgdmFsdWUgY29udmVydGVkIHRvIGxvd2VyLWNhc2UuCiAgICovCiAgZmFjdG9yeSBDb250ZW50VHlwZShTdHJpbmcgcHJpbWFyeVR5cGUsIFN0cmluZyBzdWJUeXBlLAogICAgICB7U3RyaW5nIGNoYXJzZXQsIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVyc30pIHsKICAgIHJldHVybiBuZXcgX0NvbnRlbnRUeXBlKHByaW1hcnlUeXBlLCBzdWJUeXBlLCBjaGFyc2V0LCBwYXJhbWV0ZXJzKTsKICB9CgogIC8qKgogICAqIENyZWF0ZXMgYSBuZXcgY29udGVudCB0eXBlIG9iamVjdCBmcm9tIHBhcnNpbmcgYSBDb250ZW50LVR5cGUKICAgKiBoZWFkZXIgdmFsdWUuIEFzIHByaW1hcnkgdHlwZSwgc3ViIHR5cGUgYW5kIHBhcmFtZXRlciBuYW1lcyBhbmQKICAgKiB2YWx1ZXMgYXJlIG5vdCBjYXNlIHNlbnNpdGl2ZSBhbGwgdGhlc2UgdmFsdWVzIHdpbGwgYmUgY29udmVydGVkCiAgICogdG8gbG93ZXIgY2FzZS4gUGFyc2luZyB0aGlzIHN0cmluZwogICAqCiAgICogICAgIHRleHQvaHRtbDsgY2hhcnNldD11dGYtOAogICAqCiAgICogd2lsbCBjcmVhdGUgYSBjb250ZW50IHR5cGUgb2JqZWN0IHdpdGggcHJpbWFyeSB0eXBlIFs6dGV4dDpdLCBzdWIKICAgKiB0eXBlIFs6aHRtbDpdIGFuZCBwYXJhbWV0ZXIgWzpjaGFyc2V0Ol0gd2l0aCB2YWx1ZSBbOnV0Zi04Ol0uCiAgICovCiAgc3RhdGljIENvbnRlbnRUeXBlIHBhcnNlKFN0cmluZyB2YWx1ZSkgewogICAgcmV0dXJuIF9Db250ZW50VHlwZS5wYXJzZSh2YWx1ZSk7CiAgfQoKICAvKioKICAgKiBHZXRzIHRoZSBtaW1lLXR5cGUsIHdpdGhvdXQgYW55IHBhcmFtZXRlcnMuCiAgICovCiAgU3RyaW5nIGdldCBtaW1lVHlwZTsKCiAgLyoqCiAgICogR2V0cyB0aGUgcHJpbWFyeSB0eXBlLgogICAqLwogIFN0cmluZyBnZXQgcHJpbWFyeVR5cGU7CgogIC8qKgogICAqIEdldHMgdGhlIHN1YiB0eXBlLgogICAqLwogIFN0cmluZyBnZXQgc3ViVHlwZTsKCiAgLyoqCiAgICogR2V0cyB0aGUgY2hhcmFjdGVyIHNldC4KICAgKi8KICBTdHJpbmcgZ2V0IGNoYXJzZXQ7Cn0KCi8qKgogKiBSZXByZXNlbnRhdGlvbiBvZiBhIGNvb2tpZS4gRm9yIGNvb2tpZXMgcmVjZWl2ZWQgYnkgdGhlIHNlcnZlciBhcyBDb29raWUKICogaGVhZGVyIHZhbHVlcyBvbmx5IFtuYW1lXSBhbmQgW3ZhbHVlXSBwcm9wZXJ0aWVzIHdpbGwgYmUgc2V0LiBXaGVuIGJ1aWxkaW5nIGEKICogY29va2llIGZvciB0aGUgJ3NldC1jb29raWUnIGhlYWRlciBpbiB0aGUgc2VydmVyIGFuZCB3aGVuIHJlY2VpdmluZyBjb29raWVzCiAqIGluIHRoZSBjbGllbnQgYXMgJ3NldC1jb29raWUnIGhlYWRlcnMgYWxsIGZpZWxkcyBjYW4gYmUgdXNlZC4KICovCmFic3RyYWN0IGNsYXNzIENvb2tpZSB7CiAgLyoqCiAgICogVGhlIG5hbWUgb2YgdGhlIGNvb2tpZS4KICAgKgogICAqIE11c3QgYmUgYSBgdG9rZW5gIGFzIHNwZWNpZmllZCBpbiBSRkMgNjI2NS4KICAgKgogICAqIFRoZSBhbGxvd2VkIGNoYXJhY3RlcnMgaW4gYSBgdG9rZW5gIGFyZSB0aGUgdmlzaWJsZSBBU0NJSSBjaGFyYWN0ZXJzLAogICAqIFUrMDAyMSAoYCFgKSB0aHJvdWdoIFUrMDA3RSAoYH5gKSwgZXhjZXB0IHRoZSBzZXBhcmF0b3IgY2hhcmFjdGVyczoKICAgKiBgKGAsIGApYCwgYDxgLCBgPmAsIGBAYCwgYCxgLCBgO2AsIGA6YCwgYFxgLCBgImAsIGAvYCwgYFtgLCBgXWAsIGA/YCwgYD1gLAogICAqIGB7YCwgYW5kIGB9YC4KICAgKi8KICBTdHJpbmcgbmFtZTsKCiAgLyoqCiAgICogVGhlIHZhbHVlIG9mIHRoZSBjb29raWUuCiAgICoKICAgKiBNdXN0IGJlIGEgYGNvb2tpZS12YWx1ZWAgYXMgc3BlY2lmaWVkIGluIFJGQyA2MjY1LgogICAqCiAgICogVGhlIGFsbG93ZWQgY2hhcmFjdGVycyBpbiBhIGNvb2tpZSB2YWx1ZSBhcmUgdGhlIHZpc2libGUgQVNDSUkgY2hhcmFjdGVycywKICAgKiBVKzAwMjEgKGAhYCkgdGhyb3VnaCBVKzAwN0UgKGB+YCkgZXhjZXB0IHRoZSBjaGFyYWN0ZXJzOgogICAqIGAiYCwgYCxgLCBgO2AgYW5kIGBcYC4KICAgKiBDb29raWUgdmFsdWVzIG1heSBiZSB3cmFwcGVkIGluIGEgc2luZ2xlIHBhaXIgb2YgZG91YmxlIHF1b3RlcwogICAqIChVKzAwMjIsIGAiYCkuCiAgICovCiAgU3RyaW5nIHZhbHVlOwoKICAvKioKICAgKiBUaGUgdGltZSBhdCB3aGljaCB0aGUgY29va2llIGV4cGlyZXMuCiAgICovCiAgRGF0ZVRpbWUgZXhwaXJlczsKCiAgLyoqCiAgICogVGhlIG51bWJlciBvZiBzZWNvbmRzIHVudGlsIHRoZSBjb29raWUgZXhwaXJlcy4gQSB6ZXJvIG9yIG5lZ2F0aXZlIHZhbHVlCiAgICogbWVhbnMgdGhlIGNvb2tpZSBoYXMgZXhwaXJlZC4KICAgKi8KICBpbnQgbWF4QWdlOwoKICAvKioKICAgKiBUaGUgZG9tYWluIHRoZSBjb29raWUgYXBwbGllcyB0by4KICAgKi8KICBTdHJpbmcgZG9tYWluOwoKICAvKioKICAgKiBUaGUgcGF0aCB3aXRoaW4gdGhlIFtkb21haW5dIHRoZSBjb29raWUgYXBwbGllcyB0by4KICAgKi8KICBTdHJpbmcgcGF0aDsKCiAgLyoqCiAgICogV2hldGhlciB0byBvbmx5IHNlbmQgdGhpcyBjb29raWUgb24gc2VjdXJlIGNvbm5lY3Rpb25zLgogICAqLwogIGJvb2wgc2VjdXJlOwoKICAvKioKICAgKiBXaGV0aGVyIHRoZSBjb29raWUgaXMgb25seSBzZW50IGluIHRoZSBIVFRQIHJlcXVlc3QgYW5kIGlzIG5vdCBtYWRlCiAgICogYXZhaWxhYmxlIHRvIGNsaWVudCBzaWRlIHNjcmlwdHMuCiAgICovCiAgYm9vbCBodHRwT25seTsKCiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBjb29raWUgc2V0dGluZyB0aGUgbmFtZSBhbmQgdmFsdWUuCiAgICoKICAgKiBbbmFtZV0gYW5kIFt2YWx1ZV0gbXVzdCBiZSBjb21wb3NlZCBvZiB2YWxpZCBjaGFyYWN0ZXJzIGFjY29yZGluZyB0byBSRkMKICAgKiA2MjY1LgogICAqCiAgICogQnkgZGVmYXVsdCB0aGUgdmFsdWUgb2YgYGh0dHBPbmx5YCB3aWxsIGJlIHNldCB0byBgdHJ1ZWAuCiAgICovCiAgZmFjdG9yeSBDb29raWUoU3RyaW5nIG5hbWUsIFN0cmluZyB2YWx1ZSkgPT4gbmV3IF9Db29raWUobmFtZSwgdmFsdWUpOwoKICAvKioKICAgKiBDcmVhdGVzIGEgbmV3IGNvb2tpZSBieSBwYXJzaW5nIGEgaGVhZGVyIHZhbHVlIGZyb20gYSAnc2V0LWNvb2tpZScKICAgKiBoZWFkZXIuCiAgICovCiAgZmFjdG9yeSBDb29raWUuZnJvbVNldENvb2tpZVZhbHVlKFN0cmluZyB2YWx1ZSkgewogICAgcmV0dXJuIG5ldyBfQ29va2llLmZyb21TZXRDb29raWVWYWx1ZSh2YWx1ZSk7CiAgfQoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBmb3JtYXR0ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb29raWUuIFRoZQogICAqIHN0cmluZyByZXByZXNlbnRhdGlvbiBjYW4gYmUgdXNlZCBmb3IgZm9yIHNldHRpbmcgdGhlIENvb2tpZSBvcgogICAqICdzZXQtY29va2llJyBoZWFkZXJzCiAgICovCiAgU3RyaW5nIHRvU3RyaW5nKCk7Cn0KCi8qKgogKiBBIHNlcnZlci1zaWRlIG9iamVjdAogKiB0aGF0IGNvbnRhaW5zIHRoZSBjb250ZW50IG9mIGFuZCBpbmZvcm1hdGlvbiBhYm91dCBhbiBIVFRQIHJlcXVlc3QuCiAqCiAqIF9fTm90ZV9fOiBDaGVjayBvdXQgdGhlCiAqIFtodHRwX3NlcnZlcl0oaHR0cHM6Ly9wdWIuZGFydGxhbmcub3JnL3BhY2thZ2VzL2h0dHBfc2VydmVyKQogKiBwYWNrYWdlLCB3aGljaCBtYWtlcyB3b3JraW5nIHdpdGggdGhlIGxvdy1sZXZlbAogKiBkYXJ0OmlvIEhUVFAgc2VydmVyIHN1YnN5c3RlbSBlYXNpZXIuCiAqCiAqIGBIdHRwUmVxdWVzdGAgb2JqZWN0cyBhcmUgZ2VuZXJhdGVkIGJ5IGFuIFtIdHRwU2VydmVyXSwKICogd2hpY2ggbGlzdGVucyBmb3IgSFRUUCByZXF1ZXN0cyBvbiBhIHNwZWNpZmljIGhvc3QgYW5kIHBvcnQuCiAqIEZvciBlYWNoIHJlcXVlc3QgcmVjZWl2ZWQsIHRoZSBIdHRwU2VydmVyLCB3aGljaCBpcyBhIFtTdHJlYW1dLAogKiBnZW5lcmF0ZXMgYW4gYEh0dHBSZXF1ZXN0YCBvYmplY3QgYW5kIGFkZHMgaXQgdG8gdGhlIHN0cmVhbS4KICoKICogQW4gYEh0dHBSZXF1ZXN0YCBvYmplY3QgZGVsaXZlcnMgdGhlIGJvZHkgY29udGVudCBvZiB0aGUgcmVxdWVzdAogKiBhcyBhIHN0cmVhbSBvZiBieXRlIGxpc3RzLgogKiBUaGUgb2JqZWN0IGFsc28gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlcXVlc3QsCiAqIHN1Y2ggYXMgdGhlIG1ldGhvZCwgVVJJLCBhbmQgaGVhZGVycy4KICoKICogSW4gdGhlIGZvbGxvd2luZyBjb2RlLCBhbiBIdHRwU2VydmVyIGxpc3RlbnMKICogZm9yIEhUVFAgcmVxdWVzdHMuIFdoZW4gdGhlIHNlcnZlciByZWNlaXZlcyBhIHJlcXVlc3QsCiAqIGl0IHVzZXMgdGhlIEh0dHBSZXF1ZXN0IG9iamVjdCdzIGBtZXRob2RgIHByb3BlcnR5IHRvIGRpc3BhdGNoIHJlcXVlc3RzLgogKgogKiAgICAgZmluYWwgSE9TVCA9IEludGVybmV0QWRkcmVzcy5sb29wYmFja0lQdjQ7CiAqICAgICBmaW5hbCBQT1JUID0gODA7CiAqCiAqICAgICBIdHRwU2VydmVyLmJpbmQoSE9TVCwgUE9SVCkudGhlbigoX3NlcnZlcikgewogKiAgICAgICBfc2VydmVyLmxpc3RlbigoSHR0cFJlcXVlc3QgcmVxdWVzdCkgewogKiAgICAgICAgIHN3aXRjaCAocmVxdWVzdC5tZXRob2QpIHsKICogICAgICAgICAgIGNhc2UgJ0dFVCc6CiAqICAgICAgICAgICAgIGhhbmRsZUdldFJlcXVlc3QocmVxdWVzdCk7CiAqICAgICAgICAgICAgIGJyZWFrOwogKiAgICAgICAgICAgY2FzZSAnUE9TVCc6CiAqICAgICAgICAgICAgIC4uLgogKiAgICAgICAgIH0KICogICAgICAgfSwKICogICAgICAgb25FcnJvcjogaGFuZGxlRXJyb3IpOyAgICAvLyBsaXN0ZW4oKSBmYWlsZWQuCiAqICAgICB9KS5jYXRjaEVycm9yKGhhbmRsZUVycm9yKTsKICoKICogQW4gSHR0cFJlcXVlc3Qgb2JqZWN0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgYXNzb2NpYXRlZCBbSHR0cFJlc3BvbnNlXQogKiBvYmplY3QgdGhyb3VnaCB0aGUgcmVzcG9uc2UgcHJvcGVydHkuCiAqIFRoZSBzZXJ2ZXIgd3JpdGVzIGl0cyByZXNwb25zZSB0byB0aGUgYm9keSBvZiB0aGUgSHR0cFJlc3BvbnNlIG9iamVjdC4KICogRm9yIGV4YW1wbGUsIGhlcmUncyBhIGZ1bmN0aW9uIHRoYXQgcmVzcG9uZHMgdG8gYSByZXF1ZXN0OgogKgogKiAgICAgdm9pZCBoYW5kbGVHZXRSZXF1ZXN0KEh0dHBSZXF1ZXN0IHJlcSkgewogKiAgICAgICBIdHRwUmVzcG9uc2UgcmVzID0gcmVxLnJlc3BvbnNlOwogKiAgICAgICByZXMud3JpdGUoJ1JlY2VpdmVkIHJlcXVlc3QgJHtyZXEubWV0aG9kfTogJHtyZXEudXJpLnBhdGh9Jyk7CiAqICAgICAgIHJlcy5jbG9zZSgpOwogKiAgICAgfQogKi8KYWJzdHJhY3QgY2xhc3MgSHR0cFJlcXVlc3QgaW1wbGVtZW50cyBTdHJlYW08VWludDhMaXN0PiB7CiAgLyoqCiAgICogVGhlIGNvbnRlbnQgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0IGJvZHkuCiAgICoKICAgKiBJZiB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdCBib2R5IGlzIG5vdCBrbm93biBpbiBhZHZhbmNlLAogICAqIHRoaXMgdmFsdWUgaXMgLTEuCiAgICovCiAgaW50IGdldCBjb250ZW50TGVuZ3RoOwoKICAvKioKICAgKiBUaGUgbWV0aG9kLCBzdWNoIGFzICdHRVQnIG9yICdQT1NUJywgZm9yIHRoZSByZXF1ZXN0LgogICAqLwogIFN0cmluZyBnZXQgbWV0aG9kOwoKICAvKioKICAgKiBUaGUgVVJJIGZvciB0aGUgcmVxdWVzdC4KICAgKgogICAqIFRoaXMgcHJvdmlkZXMgYWNjZXNzIHRvIHRoZQogICAqIHBhdGggYW5kIHF1ZXJ5IHN0cmluZyBmb3IgdGhlIHJlcXVlc3QuCiAgICovCiAgVXJpIGdldCB1cmk7CgogIC8qKgogICAqIFRoZSByZXF1ZXN0ZWQgVVJJIGZvciB0aGUgcmVxdWVzdC4KICAgKgogICAqIFRoZSByZXR1cm5lZCBVUkkgaXMgcmVjb25zdHJ1Y3RlZCBieSB1c2luZyBodHRwLWhlYWRlciBmaWVsZHMsIHRvIGFjY2VzcwogICAqIG90aGVyd2lzZSBsb3N0IGluZm9ybWF0aW9uLCBlLmcuIGhvc3QgYW5kIHNjaGVtZS4KICAgKgogICAqIFRvIHJlY29uc3RydWN0IHRoZSBzY2hlbWUsIGZpcnN0ICdYLUZvcndhcmRlZC1Qcm90bycgaXMgY2hlY2tlZCwgYW5kIHRoZW4KICAgKiBmYWxsaW5nIGJhY2sgdG8gc2VydmVyIHR5cGUuCiAgICoKICAgKiBUbyByZWNvbnN0cnVjdCB0aGUgaG9zdCwgZmlyc3QgJ1gtRm9yd2FyZGVkLUhvc3QnIGlzIGNoZWNrZWQsIHRoZW4gJ0hvc3QnCiAgICogYW5kIGZpbmFsbHkgY2FsbGluZyBiYWNrIHRvIHNlcnZlci4KICAgKi8KICBVcmkgZ2V0IHJlcXVlc3RlZFVyaTsKCiAgLyoqCiAgICogVGhlIHJlcXVlc3QgaGVhZGVycy4KICAgKgogICAqIFRoZSByZXR1cm5lZCBbSHR0cEhlYWRlcnNdIGFyZSBpbW11dGFibGUuCiAgICovCiAgSHR0cEhlYWRlcnMgZ2V0IGhlYWRlcnM7CgogIC8qKgogICAqIFRoZSBjb29raWVzIGluIHRoZSByZXF1ZXN0LCBmcm9tIHRoZSBDb29raWUgaGVhZGVycy4KICAgKi8KICBMaXN0PENvb2tpZT4gZ2V0IGNvb2tpZXM7CgogIC8qKgogICAqIFRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUgc2lnbmFsZWQgYnkgdGhlIGNsaWVudC4KICAgKi8KICBib29sIGdldCBwZXJzaXN0ZW50Q29ubmVjdGlvbjsKCiAgLyoqCiAgICogVGhlIGNsaWVudCBjZXJ0aWZpY2F0ZSBvZiB0aGUgY2xpZW50IG1ha2luZyB0aGUgcmVxdWVzdC4KICAgKgogICAqIFRoaXMgdmFsdWUgaXMgbnVsbCBpZiB0aGUgY29ubmVjdGlvbiBpcyBub3QgYSBzZWN1cmUgVExTIG9yIFNTTCBjb25uZWN0aW9uLAogICAqIG9yIGlmIHRoZSBzZXJ2ZXIgZG9lcyBub3QgcmVxdWVzdCBhIGNsaWVudCBjZXJ0aWZpY2F0ZSwgb3IgaWYgdGhlIGNsaWVudAogICAqIGRvZXMgbm90IHByb3ZpZGUgb25lLgogICAqLwogIFg1MDlDZXJ0aWZpY2F0ZSBnZXQgY2VydGlmaWNhdGU7CgogIC8qKgogICAqIFRoZSBzZXNzaW9uIGZvciB0aGUgZ2l2ZW4gcmVxdWVzdC4KICAgKgogICAqIElmIHRoZSBzZXNzaW9uIGlzCiAgICogYmVpbmcgaW5pdGlhbGl6ZWQgYnkgdGhpcyBjYWxsLCBbOmlzTmV3Ol0gaXMgdHJ1ZSBmb3IgdGhlIHJldHVybmVkCiAgICogc2Vzc2lvbi4KICAgKiBTZWUgW0h0dHBTZXJ2ZXIuc2Vzc2lvblRpbWVvdXRdIG9uIGhvdyB0byBjaGFuZ2UgZGVmYXVsdCB0aW1lb3V0LgogICAqLwogIEh0dHBTZXNzaW9uIGdldCBzZXNzaW9uOwoKICAvKioKICAgKiBUaGUgSFRUUCBwcm90b2NvbCB2ZXJzaW9uIHVzZWQgaW4gdGhlIHJlcXVlc3QsCiAgICogZWl0aGVyICIxLjAiIG9yICIxLjEiLgogICAqLwogIFN0cmluZyBnZXQgcHJvdG9jb2xWZXJzaW9uOwoKICAvKioKICAgKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50IGNvbm5lY3Rpb24uCiAgICoKICAgKiBSZXR1cm5zIFs6bnVsbDpdIGlmIHRoZSBzb2NrZXQgaXMgbm90IGF2YWlsYWJsZS4KICAgKi8KICBIdHRwQ29ubmVjdGlvbkluZm8gZ2V0IGNvbm5lY3Rpb25JbmZvOwoKICAvKioKICAgKiBUaGUgW0h0dHBSZXNwb25zZV0gb2JqZWN0LCB1c2VkIGZvciBzZW5kaW5nIGJhY2sgdGhlIHJlc3BvbnNlIHRvIHRoZQogICAqIGNsaWVudC4KICAgKgogICAqIElmIHRoZSBbY29udGVudExlbmd0aF0gb2YgdGhlIGJvZHkgaXNuJ3QgMCwgYW5kIHRoZSBib2R5IGlzbid0IGJlaW5nIHJlYWQsCiAgICogYW55IHdyaXRlIGNhbGxzIG9uIHRoZSBbSHR0cFJlc3BvbnNlXSBhdXRvbWF0aWNhbGx5IGRyYWluIHRoZSByZXF1ZXN0CiAgICogYm9keS4KICAgKi8KICBIdHRwUmVzcG9uc2UgZ2V0IHJlc3BvbnNlOwp9CgovKioKICogQW4gSFRUUCByZXNwb25zZSwgd2hpY2ggcmV0dXJucyB0aGUgaGVhZGVycyBhbmQgZGF0YQogKiBmcm9tIHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudCBpbiByZXNwb25zZSB0byBhbiBIVFRQIHJlcXVlc3QuCiAqCiAqIEV2ZXJ5IEh0dHBSZXF1ZXN0IG9iamVjdCBwcm92aWRlcyBhY2Nlc3MgdG8gdGhlIGFzc29jaWF0ZWQgW0h0dHBSZXNwb25zZV0KICogb2JqZWN0IHRocm91Z2ggdGhlIGByZXNwb25zZWAgcHJvcGVydHkuCiAqIFRoZSBzZXJ2ZXIgc2VuZHMgaXRzIHJlc3BvbnNlIHRvIHRoZSBjbGllbnQgYnkgd3JpdGluZyB0byB0aGUKICogSHR0cFJlc3BvbnNlIG9iamVjdC4KICoKICogIyMgV3JpdGluZyB0aGUgcmVzcG9uc2UKICoKICogVGhpcyBjbGFzcyBpbXBsZW1lbnRzIFtJT1NpbmtdLgogKiBBZnRlciB0aGUgaGVhZGVyIGhhcyBiZWVuIHNldCB1cCwgdGhlIG1ldGhvZHMKICogZnJvbSBJT1NpbmssIHN1Y2ggYXMgYHdyaXRlbG4oKWAsIGNhbiBiZSB1c2VkIHRvIHdyaXRlCiAqIHRoZSBib2R5IG9mIHRoZSBIVFRQIHJlc3BvbnNlLgogKiBVc2UgdGhlIGBjbG9zZSgpYCBtZXRob2QgdG8gY2xvc2UgdGhlIHJlc3BvbnNlIGFuZCBzZW5kIGl0IHRvIHRoZSBjbGllbnQuCiAqCiAqICAgICBzZXJ2ZXIubGlzdGVuKChIdHRwUmVxdWVzdCByZXF1ZXN0KSB7CiAqICAgICAgIHJlcXVlc3QucmVzcG9uc2Uud3JpdGUoJ0hlbGxvLCB3b3JsZCEnKTsKICogICAgICAgcmVxdWVzdC5yZXNwb25zZS5jbG9zZSgpOwogKiAgICAgfSk7CiAqCiAqIFdoZW4gb25lIG9mIHRoZSBJT1NpbmsgbWV0aG9kcyBpcyB1c2VkIGZvciB0aGUKICogZmlyc3QgdGltZSwgdGhlIHJlcXVlc3QgaGVhZGVyIGlzIHNlbnQuIENhbGxpbmcgYW55IG1ldGhvZHMgdGhhdAogKiBjaGFuZ2UgdGhlIGhlYWRlciBhZnRlciBpdCBpcyBzZW50IHRocm93cyBhbiBleGNlcHRpb24uCiAqCiAqICMjIFNldHRpbmcgdGhlIGhlYWRlcnMKICoKICogVGhlIEh0dHBSZXNwb25zZSBvYmplY3QgaGFzIGEgbnVtYmVyIG9mIHByb3BlcnRpZXMgZm9yIHNldHRpbmcgdXAKICogdGhlIEhUVFAgaGVhZGVycyBvZiB0aGUgcmVzcG9uc2UuCiAqIFdoZW4gd3JpdGluZyBzdHJpbmcgZGF0YSB0aHJvdWdoIHRoZSBJT1NpbmssIHRoZSBlbmNvZGluZyB1c2VkCiAqIGlzIGRldGVybWluZWQgZnJvbSB0aGUgImNoYXJzZXQiIHBhcmFtZXRlciBvZiB0aGUKICogIkNvbnRlbnQtVHlwZSIgaGVhZGVyLgogKgogKiAgICAgSHR0cFJlc3BvbnNlIHJlc3BvbnNlID0gLi4uCiAqICAgICByZXNwb25zZS5oZWFkZXJzLmNvbnRlbnRUeXBlCiAqICAgICAgICAgPSBuZXcgQ29udGVudFR5cGUoImFwcGxpY2F0aW9uIiwgImpzb24iLCBjaGFyc2V0OiAidXRmLTgiKTsKICogICAgIHJlc3BvbnNlLndyaXRlKC4uLik7ICAvLyBTdHJpbmdzIHdyaXR0ZW4gd2lsbCBiZSBVVEYtOCBlbmNvZGVkLgogKgogKiBJZiBubyBjaGFyc2V0IGlzIHByb3ZpZGVkIHRoZSBkZWZhdWx0IG9mIElTTy04ODU5LTEgKExhdGluIDEpIHdpbGwKICogYmUgdXNlZC4KICoKICogICAgIEh0dHBSZXNwb25zZSByZXNwb25zZSA9IC4uLgogKiAgICAgcmVzcG9uc2UuaGVhZGVycy5hZGQoSHR0cEhlYWRlcnMuY29udGVudFR5cGVIZWFkZXIsICJ0ZXh0L3BsYWluIik7CiAqICAgICByZXNwb25zZS53cml0ZSguLi4pOyAgLy8gU3RyaW5ncyB3cml0dGVuIHdpbGwgYmUgSVNPLTg4NTktMSBlbmNvZGVkLgogKgogKiBBbiBleGNlcHRpb24gaXMgdGhyb3duIGlmIHlvdSB1c2UgdGhlIGB3cml0ZSgpYCBtZXRob2QKICogd2hpbGUgYW4gdW5zdXBwb3J0ZWQgY29udGVudC10eXBlIGlzIHNldC4KICovCmFic3RyYWN0IGNsYXNzIEh0dHBSZXNwb25zZSBpbXBsZW1lbnRzIElPU2luayB7CiAgLy8gVE9ETyhham9obnNlbik6IEFkZCBkb2N1bWVudGF0aW9uIG9mIGhvdyB0byBwaXBlIGEgZmlsZSB0byB0aGUgcmVzcG9uc2UuCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgY29udGVudCBsZW5ndGggb2YgdGhlIHJlc3BvbnNlLiBJZiB0aGUgc2l6ZSBvZgogICAqIHRoZSByZXNwb25zZSBpcyBub3Qga25vd24gaW4gYWR2YW5jZSBzZXQgdGhlIGNvbnRlbnQgbGVuZ3RoIHRvCiAgICogLTEsIHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1bHQgaWYgbm90IHNldC4KICAgKi8KICBpbnQgY29udGVudExlbmd0aDsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgc3RhdHVzIGNvZGUuIEFueSBpbnRlZ2VyIHZhbHVlIGlzIGFjY2VwdGVkLiBGb3IKICAgKiB0aGUgb2ZmaWNpYWwgSFRUUCBzdGF0dXMgY29kZXMgdXNlIHRoZSBmaWVsZHMgZnJvbQogICAqIFtIdHRwU3RhdHVzXS4gSWYgbm8gc3RhdHVzIGNvZGUgaXMgZXhwbGljaXRseSBzZXQgdGhlIGRlZmF1bHQKICAgKiB2YWx1ZSBbSHR0cFN0YXR1cy5va10gaXMgdXNlZC4KICAgKgogICAqIFRoZSBzdGF0dXMgY29kZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGJvZHkgaXMgd3JpdHRlbgogICAqIHRvLiBTZXR0aW5nIHRoZSBzdGF0dXMgY29kZSBhZnRlciB3cml0aW5nIHRvIHRoZSByZXNwb25zZSBib2R5IG9yCiAgICogY2xvc2luZyB0aGUgcmVzcG9uc2Ugd2lsbCB0aHJvdyBhIGBTdGF0ZUVycm9yYC4KICAgKi8KICBpbnQgc3RhdHVzQ29kZTsKCiAgLyoqCiAgICogR2V0cyBhbmQgc2V0cyB0aGUgcmVhc29uIHBocmFzZS4gSWYgbm8gcmVhc29uIHBocmFzZSBpcyBleHBsaWNpdGx5CiAgICogc2V0IGEgZGVmYXVsdCByZWFzb24gcGhyYXNlIGlzIHByb3ZpZGVkLgogICAqCiAgICogVGhlIHJlYXNvbiBwaHJhc2UgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSBib2R5IGlzIHdyaXR0ZW4KICAgKiB0by4gU2V0dGluZyB0aGUgcmVhc29uIHBocmFzZSBhZnRlciB3cml0aW5nIHRvIHRoZSByZXNwb25zZSBib2R5CiAgICogb3IgY2xvc2luZyB0aGUgcmVzcG9uc2Ugd2lsbCB0aHJvdyBhIGBTdGF0ZUVycm9yYC4KICAgKi8KICBTdHJpbmcgcmVhc29uUGhyYXNlOwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUuIFRoZSBpbml0aWFsIHZhbHVlCiAgICogb2YgdGhpcyBwcm9wZXJ0eSBpcyB0aGUgcGVyc2lzdGVudCBjb25uZWN0aW9uIHN0YXRlIGZyb20gdGhlCiAgICogcmVxdWVzdC4KICAgKi8KICBib29sIHBlcnNpc3RlbnRDb25uZWN0aW9uOwoKICAvKioKICAgKiBTZXQgYW5kIGdldCB0aGUgW2RlYWRsaW5lXSBmb3IgdGhlIHJlc3BvbnNlLiBUaGUgZGVhZGxpbmUgaXMgdGltZWQgZnJvbSB0aGUKICAgKiB0aW1lIGl0J3Mgc2V0LiBTZXR0aW5nIGEgbmV3IGRlYWRsaW5lIHdpbGwgb3ZlcnJpZGUgYW55IHByZXZpb3VzIGRlYWRsaW5lLgogICAqIFdoZW4gYSBkZWFkbGluZSBpcyBleGNlZWRlZCwgdGhlIHJlc3BvbnNlIHdpbGwgYmUgY2xvc2VkIGFuZCBhbnkgZnVydGhlcgogICAqIGRhdGEgaWdub3JlZC4KICAgKgogICAqIFRvIGRpc2FibGUgYSBkZWFkbGluZSwgc2V0IHRoZSBbZGVhZGxpbmVdIHRvIGBudWxsYC4KICAgKgogICAqIFRoZSBbZGVhZGxpbmVdIGlzIGBudWxsYCBieSBkZWZhdWx0LgogICAqLwogIER1cmF0aW9uIGRlYWRsaW5lOwoKICAvKioKICAgKiBHZXRzIG9yIHNldHMgaWYgdGhlIFtIdHRwUmVzcG9uc2VdIHNob3VsZCBidWZmZXIgb3V0cHV0LgogICAqCiAgICogRGVmYXVsdCB2YWx1ZSBpcyBgdHJ1ZWAuCiAgICoKICAgKiBfX05vdGVfXzogRGlzYWJsaW5nIGJ1ZmZlcmluZyBvZiB0aGUgb3V0cHV0IGNhbiByZXN1bHQgaW4gdmVyeSBwb29yCiAgICogcGVyZm9ybWFuY2UsIHdoZW4gd3JpdGluZyBtYW55IHNtYWxsIGNodW5rcy4KICAgKi8KICBib29sIGJ1ZmZlck91dHB1dDsKCiAgLyoqCiAgICogUmV0dXJucyB0aGUgcmVzcG9uc2UgaGVhZGVycy4KICAgKgogICAqIFRoZSByZXNwb25zZSBoZWFkZXJzIGNhbiBiZSBtb2RpZmllZCB1bnRpbCB0aGUgcmVzcG9uc2UgYm9keSBpcwogICAqIHdyaXR0ZW4gdG8gb3IgY2xvc2VkLiBBZnRlciB0aGF0IHRoZXkgYmVjb21lIGltbXV0YWJsZS4KICAgKi8KICBIdHRwSGVhZGVycyBnZXQgaGVhZGVyczsKCiAgLyoqCiAgICogQ29va2llcyB0byBzZXQgaW4gdGhlIGNsaWVudCAoaW4gdGhlICdzZXQtY29va2llJyBoZWFkZXIpLgogICAqLwogIExpc3Q8Q29va2llPiBnZXQgY29va2llczsKCiAgLyoqCiAgICogUmVzcG9uZCB3aXRoIGEgcmVkaXJlY3QgdG8gW2xvY2F0aW9uXS4KICAgKgogICAqIFRoZSBVUkkgaW4gW2xvY2F0aW9uXSBzaG91bGQgYmUgYWJzb2x1dGUsIGJ1dCB0aGVyZSBhcmUgbm8gY2hlY2tzCiAgICogdG8gZW5mb3JjZSB0aGF0LgogICAqCiAgICogQnkgZGVmYXVsdCB0aGUgSFRUUCBzdGF0dXMgY29kZSBgSHR0cFN0YXR1cy5tb3ZlZFRlbXBvcmFyaWx5YAogICAqIChgMzAyYCkgaXMgdXNlZCBmb3IgdGhlIHJlZGlyZWN0LCBidXQgYW4gYWx0ZXJuYXRpdmUgb25lIGNhbiBiZQogICAqIHNwZWNpZmllZCB1c2luZyB0aGUgW3N0YXR1c10gYXJndW1lbnQuCiAgICoKICAgKiBUaGlzIG1ldGhvZCB3aWxsIGFsc28gY2FsbCBgY2xvc2VgLCBhbmQgdGhlIHJldHVybmVkIGZ1dHVyZSBpcwogICAqIHRoZSBmdXR1cmUgcmV0dXJuZWQgYnkgYGNsb3NlYC4KICAgKi8KICBGdXR1cmUgcmVkaXJlY3QoVXJpIGxvY2F0aW9uLCB7aW50IHN0YXR1czogSHR0cFN0YXR1cy5tb3ZlZFRlbXBvcmFyaWx5fSk7CgogIC8qKgogICAqIERldGFjaGVzIHRoZSB1bmRlcmx5aW5nIHNvY2tldCBmcm9tIHRoZSBIVFRQIHNlcnZlci4gV2hlbiB0aGUKICAgKiBzb2NrZXQgaXMgZGV0YWNoZWQgdGhlIEhUVFAgc2VydmVyIHdpbGwgbm8gbG9uZ2VyIHBlcmZvcm0gYW55CiAgICogb3BlcmF0aW9ucyBvbiBpdC4KICAgKgogICAqIFRoaXMgaXMgbm9ybWFsbHkgdXNlZCB3aGVuIGEgSFRUUCB1cGdyYWRlIHJlcXVlc3QgaXMgcmVjZWl2ZWQKICAgKiBhbmQgdGhlIGNvbW11bmljYXRpb24gc2hvdWxkIGNvbnRpbnVlIHdpdGggYSBkaWZmZXJlbnQgcHJvdG9jb2wuCiAgICoKICAgKiBJZiBbd3JpdGVIZWFkZXJzXSBpcyBgdHJ1ZWAsIHRoZSBzdGF0dXMgbGluZSBhbmQgW2hlYWRlcnNdIHdpbGwgYmUgd3JpdHRlbgogICAqIHRvIHRoZSBzb2NrZXQgYmVmb3JlIGl0J3MgZGV0YWNoZWQuIElmIGBmYWxzZWAsIHRoZSBzb2NrZXQgaXMgZGV0YWNoZWQKICAgKiBpbW1lZGlhdGVseSwgd2l0aG91dCBhbnkgZGF0YSB3cml0dGVuIHRvIHRoZSBzb2NrZXQuIERlZmF1bHQgaXMgYHRydWVgLgogICAqLwogIEZ1dHVyZTxTb2NrZXQ+IGRldGFjaFNvY2tldCh7Ym9vbCB3cml0ZUhlYWRlcnM6IHRydWV9KTsKCiAgLyoqCiAgICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50IGNvbm5lY3Rpb24uIFJldHVybnMgWzpudWxsOl0gaWYgdGhlCiAgICogc29ja2V0IGlzIG5vdCBhdmFpbGFibGUuCiAgICovCiAgSHR0cENvbm5lY3Rpb25JbmZvIGdldCBjb25uZWN0aW9uSW5mbzsKfQoKLyoqCiAqIEEgY2xpZW50IHRoYXQgcmVjZWl2ZXMgY29udGVudCwgc3VjaCBhcyB3ZWIgcGFnZXMsIGZyb20KICogYSBzZXJ2ZXIgdXNpbmcgdGhlIEhUVFAgcHJvdG9jb2wuCiAqCiAqIEh0dHBDbGllbnQgY29udGFpbnMgYSBudW1iZXIgb2YgbWV0aG9kcyB0byBzZW5kIGFuIFtIdHRwQ2xpZW50UmVxdWVzdF0KICogdG8gYW4gSHR0cCBzZXJ2ZXIgYW5kIHJlY2VpdmUgYW4gW0h0dHBDbGllbnRSZXNwb25zZV0gYmFjay4KICogRm9yIGV4YW1wbGUsIHlvdSBjYW4gdXNlIHRoZSBbZ2V0XSwgW2dldFVybF0sIFtwb3N0XSwgYW5kIFtwb3N0VXJsXSBtZXRob2RzCiAqIGZvciBHRVQgYW5kIFBPU1QgcmVxdWVzdHMsIHJlc3BlY3RpdmVseS4KICoKICogIyMgTWFraW5nIGEgc2ltcGxlIEdFVCByZXF1ZXN0OiBhbiBleGFtcGxlCiAqCiAqIEEgYGdldFVybGAgcmVxdWVzdCBpcyBhIHR3by1zdGVwIHByb2Nlc3MsIHRyaWdnZXJlZCBieSB0d28gW0Z1dHVyZV1zLgogKiBXaGVuIHRoZSBmaXJzdCBmdXR1cmUgY29tcGxldGVzIHdpdGggYSBbSHR0cENsaWVudFJlcXVlc3RdLCB0aGUgdW5kZXJseWluZwogKiBuZXR3b3JrIGNvbm5lY3Rpb24gaGFzIGJlZW4gZXN0YWJsaXNoZWQsIGJ1dCBubyBkYXRhIGhhcyBiZWVuIHNlbnQuCiAqIEluIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIGZpcnN0IGZ1dHVyZSwgdGhlIEhUVFAgaGVhZGVycyBhbmQgYm9keQogKiBjYW4gYmUgc2V0IG9uIHRoZSByZXF1ZXN0LiBFaXRoZXIgdGhlIGZpcnN0IHdyaXRlIHRvIHRoZSByZXF1ZXN0IG9iamVjdAogKiBvciBhIGNhbGwgdG8gW2Nsb3NlXSBzZW5kcyB0aGUgcmVxdWVzdCB0byB0aGUgc2VydmVyLgogKgogKiBXaGVuIHRoZSBIVFRQIHJlc3BvbnNlIGlzIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciwKICogdGhlIHNlY29uZCBmdXR1cmUsIHdoaWNoIGlzIHJldHVybmVkIGJ5IGNsb3NlLAogKiBjb21wbGV0ZXMgd2l0aCBhbiBbSHR0cENsaWVudFJlc3BvbnNlXSBvYmplY3QuCiAqIFRoaXMgb2JqZWN0IHByb3ZpZGVzIGFjY2VzcyB0byB0aGUgaGVhZGVycyBhbmQgYm9keSBvZiB0aGUgcmVzcG9uc2UuCiAqIFRoZSBib2R5IGlzIGF2YWlsYWJsZSBhcyBhIHN0cmVhbSBpbXBsZW1lbnRlZCBieSBIdHRwQ2xpZW50UmVzcG9uc2UuCiAqIElmIGEgYm9keSBpcyBwcmVzZW50LCBpdCBtdXN0IGJlIHJlYWQuIE90aGVyd2lzZSwgaXQgbGVhZHMgdG8gcmVzb3VyY2UKICogbGVha3MuIENvbnNpZGVyIHVzaW5nIFtIdHRwQ2xpZW50UmVzcG9uc2UuZHJhaW5dIGlmIHRoZSBib2R5IGlzIHVudXNlZC4KICoKICogICAgIEh0dHBDbGllbnQgY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKICogICAgIGNsaWVudC5nZXRVcmwoVXJpLnBhcnNlKCJodHRwOi8vd3d3LmV4YW1wbGUuY29tLyIpKQogKiAgICAgICAgIC50aGVuKChIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSB7CiAqICAgICAgICAgICAvLyBPcHRpb25hbGx5IHNldCB1cCBoZWFkZXJzLi4uCiAqICAgICAgICAgICAvLyBPcHRpb25hbGx5IHdyaXRlIHRvIHRoZSByZXF1ZXN0IG9iamVjdC4uLgogKiAgICAgICAgICAgLy8gVGhlbiBjYWxsIGNsb3NlLgogKiAgICAgICAgICAgLi4uCiAqICAgICAgICAgICByZXR1cm4gcmVxdWVzdC5jbG9zZSgpOwogKiAgICAgICAgIH0pCiAqICAgICAgICAgLnRoZW4oKEh0dHBDbGllbnRSZXNwb25zZSByZXNwb25zZSkgewogKiAgICAgICAgICAgLy8gUHJvY2VzcyB0aGUgcmVzcG9uc2UuCiAqICAgICAgICAgICAuLi4KICogICAgICAgICB9KTsKICoKICogVGhlIGZ1dHVyZSBmb3IgW0h0dHBDbGllbnRSZXF1ZXN0XSBpcyBjcmVhdGVkIGJ5IG1ldGhvZHMgc3VjaCBhcwogKiBbZ2V0VXJsXSBhbmQgW29wZW5dLgogKgogKiAjIyBIVFRQUyBjb25uZWN0aW9ucwogKgogKiBBbiBIdHRwQ2xpZW50IGNhbiBtYWtlIEhUVFBTIHJlcXVlc3RzLCBjb25uZWN0aW5nIHRvIGEgc2VydmVyIHVzaW5nCiAqIHRoZSBUTFMgKFNTTCkgc2VjdXJlIG5ldHdvcmtpbmcgcHJvdG9jb2wuIENhbGxpbmcgW2dldFVybF0gd2l0aCBhbgogKiBodHRwczogc2NoZW1lIHdpbGwgd29yayBhdXRvbWF0aWNhbGx5LCBpZiB0aGUgc2VydmVyJ3MgY2VydGlmaWNhdGUgaXMKICogc2lnbmVkIGJ5IGEgcm9vdCBDQSAoY2VydGlmaWNhdGUgYXV0aG9yaXR5KSBvbiB0aGUgZGVmYXVsdCBsaXN0IG9mCiAqIHdlbGwta25vd24gdHJ1c3RlZCBDQXMsIGNvbXBpbGVkIGJ5IE1vemlsbGEuCiAqCiAqIFRvIGFkZCBhIGN1c3RvbSB0cnVzdGVkIGNlcnRpZmljYXRlIGF1dGhvcml0eSwgb3IgdG8gc2VuZCBhIGNsaWVudAogKiBjZXJ0aWZpY2F0ZSB0byBzZXJ2ZXJzIHRoYXQgcmVxdWVzdCBvbmUsIHBhc3MgYSBbU2VjdXJpdHlDb250ZXh0XSBvYmplY3QKICogYXMgdGhlIG9wdGlvbmFsIGBjb250ZXh0YCBhcmd1bWVudCB0byB0aGUgYEh0dHBDbGllbnRgIGNvbnN0cnVjdG9yLgogKiBUaGUgZGVzaXJlZCBzZWN1cml0eSBvcHRpb25zIGNhbiBiZSBzZXQgb24gdGhlIFtTZWN1cml0eUNvbnRleHRdIG9iamVjdC4KICoKICogIyMgSGVhZGVycwogKgogKiBBbGwgSHR0cENsaWVudCByZXF1ZXN0cyBzZXQgdGhlIGZvbGxvd2luZyBoZWFkZXIgYnkgZGVmYXVsdDoKICoKICogICAgIEFjY2VwdC1FbmNvZGluZzogZ3ppcAogKgogKiBUaGlzIGFsbG93cyB0aGUgSFRUUCBzZXJ2ZXIgdG8gdXNlIGd6aXAgY29tcHJlc3Npb24gZm9yIHRoZSBib2R5IGlmCiAqIHBvc3NpYmxlLiBJZiB0aGlzIGJlaGF2aW9yIGlzIG5vdCBkZXNpcmVkIHNldCB0aGUKICogYEFjY2VwdC1FbmNvZGluZ2AgaGVhZGVyIHRvIHNvbWV0aGluZyBlbHNlLgogKiBUbyB0dXJuIG9mZiBnemlwIGNvbXByZXNzaW9uIG9mIHRoZSByZXNwb25zZSwgY2xlYXIgdGhpcyBoZWFkZXI6CiAqCiAqICAgICAgcmVxdWVzdC5oZWFkZXJzLnJlbW92ZUFsbChIdHRwSGVhZGVycy5hY2NlcHRFbmNvZGluZ0hlYWRlcikKICoKICogIyMgQ2xvc2luZyB0aGUgSHR0cENsaWVudAogKgogKiBUaGUgSHR0cENsaWVudCBzdXBwb3J0cyBwZXJzaXN0ZW50IGNvbm5lY3Rpb25zIGFuZCBjYWNoZXMgbmV0d29yawogKiBjb25uZWN0aW9ucyB0byByZXVzZSB0aGVtIGZvciBtdWx0aXBsZSByZXF1ZXN0cyB3aGVuZXZlcgogKiBwb3NzaWJsZS4gVGhpcyBtZWFucyB0aGF0IG5ldHdvcmsgY29ubmVjdGlvbnMgY2FuIGJlIGtlcHQgb3BlbiBmb3IKICogc29tZSB0aW1lIGFmdGVyIGEgcmVxdWVzdCBoYXMgY29tcGxldGVkLiBVc2UgSHR0cENsaWVudC5jbG9zZQogKiB0byBmb3JjZSB0aGUgSHR0cENsaWVudCBvYmplY3QgdG8gc2h1dCBkb3duIGFuZCB0byBjbG9zZSB0aGUgaWRsZQogKiBuZXR3b3JrIGNvbm5lY3Rpb25zLgogKgogKiAjIyBUdXJuaW5nIHByb3hpZXMgb24gYW5kIG9mZgogKgogKiBCeSBkZWZhdWx0IHRoZSBIdHRwQ2xpZW50IHVzZXMgdGhlIHByb3h5IGNvbmZpZ3VyYXRpb24gYXZhaWxhYmxlCiAqIGZyb20gdGhlIGVudmlyb25tZW50LCBzZWUgW2ZpbmRQcm94eUZyb21FbnZpcm9ubWVudF0uIFRvIHR1cm4gb2ZmCiAqIHRoZSB1c2Ugb2YgcHJveGllcyBzZXQgdGhlIFtmaW5kUHJveHldIHByb3BlcnR5IHRvCiAqIFs6bnVsbDpdLgogKgogKiAgICAgSHR0cENsaWVudCBjbGllbnQgPSBuZXcgSHR0cENsaWVudCgpOwogKiAgICAgY2xpZW50LmZpbmRQcm94eSA9IG51bGw7CiAqLwphYnN0cmFjdCBjbGFzcyBIdHRwQ2xpZW50IHsKICBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRIdHRwUG9ydCA9IDgwOwogIEBEZXByZWNhdGVkKCJVc2UgZGVmYXVsdEh0dHBQb3J0IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgREVGQVVMVF9IVFRQX1BPUlQgPSBkZWZhdWx0SHR0cFBvcnQ7CgogIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVsdEh0dHBzUG9ydCA9IDQ0MzsKICBARGVwcmVjYXRlZCgiVXNlIGRlZmF1bHRIdHRwc1BvcnQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBERUZBVUxUX0hUVFBTX1BPUlQgPSBkZWZhdWx0SHR0cHNQb3J0OwoKICAvLy8gR2V0cyBhbmQgc2V0cyB0aGUgaWRsZSB0aW1lb3V0IG9mIG5vbi1hY3RpdmUgcGVyc2lzdGVudCAoa2VlcC1hbGl2ZSkKICAvLy8gY29ubmVjdGlvbnMuCiAgLy8vCiAgLy8vIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDE1IHNlY29uZHMuCiAgRHVyYXRpb24gaWRsZVRpbWVvdXQ7CgogIC8vLyBHZXRzIGFuZCBzZXRzIHRoZSBjb25uZWN0aW9uIHRpbWVvdXQuCiAgLy8vCiAgLy8vIFdoZW4gY29ubmVjdGluZyB0byBhIG5ldyBob3N0IGV4Y2VlZHMgdGhpcyB0aW1lb3V0LCBhIFtTb2NrZXRFeGNlcHRpb25dCiAgLy8vIGlzIHRocm93bi4gVGhlIHRpbWVvdXQgYXBwbGllcyBvbmx5IHRvIGNvbm5lY3Rpb25zIGluaXRpYXRlZCBhZnRlciB0aGUKICAvLy8gdGltZW91dCBpcyBzZXQuCiAgLy8vCiAgLy8vIFdoZW4gdGhpcyBpcyBgbnVsbGAsIHRoZSBPUyBkZWZhdWx0IHRpbWVvdXQgaXMgdXNlZC4gVGhlIGRlZmF1bHQgaXMKICAvLy8gYG51bGxgLgogIER1cmF0aW9uIGNvbm5lY3Rpb25UaW1lb3V0OwoKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBsaXZlIGNvbm5lY3Rpb25zLCB0byBhIHNpbmdsZSBob3N0LgogICAqCiAgICogSW5jcmVhc2luZyB0aGlzIG51bWJlciBtYXkgbG93ZXIgcGVyZm9ybWFuY2UgYW5kIHRha2UgdXAgdW53YW50ZWQKICAgKiBzeXN0ZW0gcmVzb3VyY2VzLgogICAqCiAgICogVG8gZGlzYWJsZSwgc2V0IHRvIGBudWxsYC4KICAgKgogICAqIERlZmF1bHQgaXMgYG51bGxgLgogICAqLwogIGludCBtYXhDb25uZWN0aW9uc1Blckhvc3Q7CgogIC8qKgogICAqIEdldHMgYW5kIHNldHMgd2hldGhlciB0aGUgYm9keSBvZiBhIHJlc3BvbnNlIHdpbGwgYmUgYXV0b21hdGljYWxseQogICAqIHVuY29tcHJlc3NlZC4KICAgKgogICAqIFRoZSBib2R5IG9mIGFuIEhUVFAgcmVzcG9uc2UgY2FuIGJlIGNvbXByZXNzZWQuIEluIG1vc3QKICAgKiBzaXR1YXRpb25zIHByb3ZpZGluZyB0aGUgdW4tY29tcHJlc3NlZCBib2R5IGlzIG1vc3QKICAgKiBjb252ZW5pZW50LiBUaGVyZWZvcmUgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gdW4tY29tcHJlc3MgdGhlCiAgICogYm9keS4gSG93ZXZlciBpbiBzb21lIHNpdHVhdGlvbnMgKGUuZy4gaW1wbGVtZW50aW5nIGEgdHJhbnNwYXJlbnQKICAgKiBwcm94eSkga2VlcGluZyB0aGUgdW5jb21wcmVzc2VkIHN0cmVhbSBpcyByZXF1aXJlZC4KICAgKgogICAqIE5PVEU6IEhlYWRlcnMgaW4gdGhlIHJlc3BvbnNlIGFyZSBuZXZlciBtb2RpZmllZC4gVGhpcyBtZWFucwogICAqIHRoYXQgd2hlbiBhdXRvbWF0aWMgdW4tY29tcHJlc3Npb24gaXMgdHVybmVkIG9uIHRoZSB2YWx1ZSBvZiB0aGUKICAgKiBoZWFkZXIgYENvbnRlbnQtTGVuZ3RoYCB3aWxsIHJlZmxlY3QgdGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwKICAgKiBjb21wcmVzc2VkIGJvZHkuIExpa2V3aXNlIHRoZSBoZWFkZXIgYENvbnRlbnQtRW5jb2RpbmdgIHdpbGwgYWxzbwogICAqIGhhdmUgdGhlIG9yaWdpbmFsIHZhbHVlIGluZGljYXRpbmcgY29tcHJlc3Npb24uCiAgICoKICAgKiBOT1RFOiBBdXRvbWF0aWMgdW4tY29tcHJlc3Npb24gaXMgb25seSBwZXJmb3JtZWQgaWYgdGhlCiAgICogYENvbnRlbnQtRW5jb2RpbmdgIGhlYWRlciB2YWx1ZSBpcyBgZ3ppcGAuCiAgICoKICAgKiBUaGlzIHZhbHVlIGFmZmVjdHMgYWxsIHJlc3BvbnNlcyBwcm9kdWNlZCBieSB0aGlzIGNsaWVudCBhZnRlciB0aGUKICAgKiB2YWx1ZSBpcyBjaGFuZ2VkLgogICAqCiAgICogVG8gZGlzYWJsZSwgc2V0IHRvIGBmYWxzZWAuCiAgICoKICAgKiBEZWZhdWx0IGlzIGB0cnVlYC4KICAgKi8KICBib29sIGF1dG9VbmNvbXByZXNzOwoKICAvLy8gR2V0cyBhbmQgc2V0cyB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0aGUgYFVzZXItQWdlbnRgIGhlYWRlciBmb3IgYWxsIHJlcXVlc3RzCiAgLy8vIGdlbmVyYXRlZCBieSB0aGlzIFtIdHRwQ2xpZW50XS4KICAvLy8KICAvLy8gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYERhcnQvPHZlcnNpb24+IChkYXJ0OmlvKWAuCiAgLy8vCiAgLy8vIElmIHRoZSB1c2VyQWdlbnQgaXMgc2V0IHRvIGBudWxsYCwgbm8gZGVmYXVsdCBgVXNlci1BZ2VudGAgaGVhZGVyIHdpbGwgYmUKICAvLy8gYWRkZWQgdG8gZWFjaCByZXF1ZXN0LgogIFN0cmluZyB1c2VyQWdlbnQ7CgogIGZhY3RvcnkgSHR0cENsaWVudCh7U2VjdXJpdHlDb250ZXh0IGNvbnRleHR9KSB7CiAgICBIdHRwT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IEh0dHBPdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gbmV3IF9IdHRwQ2xpZW50KGNvbnRleHQpOwogICAgfQogICAgcmV0dXJuIG92ZXJyaWRlcy5jcmVhdGVIdHRwQ2xpZW50KGNvbnRleHQpOwogIH0KCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24uCiAgICoKICAgKiBUaGUgSFRUUCBtZXRob2QgdG8gdXNlIGlzIHNwZWNpZmllZCBpbiBbbWV0aG9kXSwgdGhlIHNlcnZlciBpcwogICAqIHNwZWNpZmllZCB1c2luZyBbaG9zdF0gYW5kIFtwb3J0XSwgYW5kIHRoZSBwYXRoIChpbmNsdWRpbmcKICAgKiBhIHBvc3NpYmxlIHF1ZXJ5KSBpcyBzcGVjaWZpZWQgdXNpbmcgW3BhdGhdLgogICAqIFRoZSBwYXRoIG1heSBhbHNvIGNvbnRhaW4gYSBVUkkgZnJhZ21lbnQsIHdoaWNoIHdpbGwgYmUgaWdub3JlZC4KICAgKgogICAqIFRoZSBgSG9zdGAgaGVhZGVyIGZvciB0aGUgcmVxdWVzdCB3aWxsIGJlIHNldCB0byB0aGUgdmFsdWUgW2hvc3RdOltwb3J0XQogICAqIChpZiBbaG9zdF0gaXMgYW4gSVAgYWRkcmVzcywgaXQgd2lsbCBzdGlsbCBiZSB1c2VkIGluIHRoZSBgSG9zdGAgaGVhZGVyKS4KICAgKiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHRocm91Z2ggdGhlIFtIdHRwQ2xpZW50UmVxdWVzdF0gaW50ZXJmYWNlIGJlZm9yZQogICAqIHRoZSByZXF1ZXN0IGlzIHNlbnQuCiAgICoKICAgKiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGR1cmluZyBhbgogICAqIEhUVFAgdHJhbnNhY3Rpb24sIGFuZCB0aGUgb2JqZWN0cyByZXR1cm5lZCBieSB0aGUgZnV0dXJlcywgc2VlCiAgICogdGhlIG92ZXJhbGwgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNsYXNzIFtIdHRwQ2xpZW50XS4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IG9wZW4oCiAgICAgIFN0cmluZyBtZXRob2QsIFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgpOwoKICAvKioKICAgKiBPcGVucyBhIEhUVFAgY29ubmVjdGlvbi4KICAgKgogICAqIFRoZSBIVFRQIG1ldGhvZCBpcyBzcGVjaWZpZWQgaW4gW21ldGhvZF0gYW5kIHRoZSBVUkwgdG8gdXNlIGluCiAgICogW3VybF0uCiAgICoKICAgKiBUaGUgYEhvc3RgIGhlYWRlciBmb3IgdGhlIHJlcXVlc3Qgd2lsbCBiZSBzZXQgdG8gdGhlIHZhbHVlCiAgICogW1VyaS5ob3N0XTpbVXJpLnBvcnRdIGZyb20gW3VybF0gKGlmIFt1cmwuaG9zdF0gaXMgYW4gSVAgYWRkcmVzcywgaXQgd2lsbAogICAqIHN0aWxsIGJlIHVzZWQgaW4gdGhlIGBIb3N0YCBoZWFkZXIpLiBUaGlzIGNhbiBiZSBvdmVycmlkZGVuIHRocm91Z2ggdGhlCiAgICogW0h0dHBDbGllbnRSZXF1ZXN0XSBpbnRlcmZhY2UgYmVmb3JlIHRoZSByZXF1ZXN0IGlzIHNlbnQuCiAgICoKICAgKiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvbiB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzIGR1cmluZyBhbgogICAqIEhUVFAgdHJhbnNhY3Rpb24sIGFuZCB0aGUgb2JqZWN0cyByZXR1cm5lZCBieSB0aGUgZnV0dXJlcywgc2VlCiAgICogdGhlIG92ZXJhbGwgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIGNsYXNzIFtIdHRwQ2xpZW50XS4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IG9wZW5VcmwoU3RyaW5nIG1ldGhvZCwgVXJpIHVybCk7CgogIC8qKgogICAqIE9wZW5zIGEgSFRUUCBjb25uZWN0aW9uIHVzaW5nIHRoZSBHRVQgbWV0aG9kLgogICAqCiAgICogVGhlIHNlcnZlciBpcyBzcGVjaWZpZWQgdXNpbmcgW2hvc3RdIGFuZCBbcG9ydF0sIGFuZCB0aGUgcGF0aAogICAqIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBxdWVyeSkgaXMgc3BlY2lmaWVkIHVzaW5nCiAgICogW3BhdGhdLgogICAqCiAgICogU2VlIFtvcGVuXSBmb3IgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IGdldChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIEdFVCBtZXRob2QuCiAgICoKICAgKiBUaGUgVVJMIHRvIHVzZSBpcyBzcGVjaWZpZWQgaW4gW3VybF0uCiAgICoKICAgKiBTZWUgW29wZW5VcmxdIGZvciBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gZ2V0VXJsKFVyaSB1cmwpOwoKICAvKioKICAgKiBPcGVucyBhIEhUVFAgY29ubmVjdGlvbiB1c2luZyB0aGUgUE9TVCBtZXRob2QuCiAgICoKICAgKiBUaGUgc2VydmVyIGlzIHNwZWNpZmllZCB1c2luZyBbaG9zdF0gYW5kIFtwb3J0XSwgYW5kIHRoZSBwYXRoCiAgICogKGluY2x1ZGluZyBhIHBvc3NpYmxlIHF1ZXJ5KSBpcyBzcGVjaWZpZWQgdXNpbmcKICAgKiBbcGF0aF0uCiAgICoKICAgKiBTZWUgW29wZW5dIGZvciBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gcG9zdChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIFBPU1QgbWV0aG9kLgogICAqCiAgICogVGhlIFVSTCB0byB1c2UgaXMgc3BlY2lmaWVkIGluIFt1cmxdLgogICAqCiAgICogU2VlIFtvcGVuVXJsXSBmb3IgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IHBvc3RVcmwoVXJpIHVybCk7CgogIC8qKgogICAqIE9wZW5zIGEgSFRUUCBjb25uZWN0aW9uIHVzaW5nIHRoZSBQVVQgbWV0aG9kLgogICAqCiAgICogVGhlIHNlcnZlciBpcyBzcGVjaWZpZWQgdXNpbmcgW2hvc3RdIGFuZCBbcG9ydF0sIGFuZCB0aGUgcGF0aAogICAqIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBxdWVyeSkgaXMgc3BlY2lmaWVkIHVzaW5nIFtwYXRoXS4KICAgKgogICAqIFNlZSBbb3Blbl0gZm9yIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwdXQoU3RyaW5nIGhvc3QsIGludCBwb3J0LCBTdHJpbmcgcGF0aCk7CgogIC8qKgogICAqIE9wZW5zIGEgSFRUUCBjb25uZWN0aW9uIHVzaW5nIHRoZSBQVVQgbWV0aG9kLgogICAqCiAgICogVGhlIFVSTCB0byB1c2UgaXMgc3BlY2lmaWVkIGluIFt1cmxdLgogICAqCiAgICogU2VlIFtvcGVuVXJsXSBmb3IgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IHB1dFVybChVcmkgdXJsKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIERFTEVURSBtZXRob2QuCiAgICoKICAgKiBUaGUgc2VydmVyIGlzIHNwZWNpZmllZCB1c2luZyBbaG9zdF0gYW5kIFtwb3J0XSwgYW5kIHRoZSBwYXRoCiAgICogKGluY2x1ZGluZyBhIHBvc3NpYmxlIHF1ZXJ5KSBpcyBzcGVjaWZpZWQgdXNpbmcgW3BhdGhdLgogICAqCiAgICogU2VlIFtvcGVuXSBmb3IgZGV0YWlscy4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+IGRlbGV0ZShTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIERFTEVURSBtZXRob2QuCiAgICoKICAgKiBUaGUgVVJMIHRvIHVzZSBpcyBzcGVjaWZpZWQgaW4gW3VybF0uCiAgICoKICAgKiBTZWUgW29wZW5VcmxdIGZvciBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gZGVsZXRlVXJsKFVyaSB1cmwpOwoKICAvKioKICAgKiBPcGVucyBhIEhUVFAgY29ubmVjdGlvbiB1c2luZyB0aGUgUEFUQ0ggbWV0aG9kLgogICAqCiAgICogVGhlIHNlcnZlciBpcyBzcGVjaWZpZWQgdXNpbmcgW2hvc3RdIGFuZCBbcG9ydF0sIGFuZCB0aGUgcGF0aAogICAqIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBxdWVyeSkgaXMgc3BlY2lmaWVkIHVzaW5nIFtwYXRoXS4KICAgKgogICAqIFNlZSBbb3Blbl0gZm9yIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwYXRjaChTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyBwYXRoKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIFBBVENIIG1ldGhvZC4KICAgKgogICAqIFRoZSBVUkwgdG8gdXNlIGlzIHNwZWNpZmllZCBpbiBbdXJsXS4KICAgKgogICAqIFNlZSBbb3BlblVybF0gZm9yIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBwYXRjaFVybChVcmkgdXJsKTsKCiAgLyoqCiAgICogT3BlbnMgYSBIVFRQIGNvbm5lY3Rpb24gdXNpbmcgdGhlIEhFQUQgbWV0aG9kLgogICAqCiAgICogVGhlIHNlcnZlciBpcyBzcGVjaWZpZWQgdXNpbmcgW2hvc3RdIGFuZCBbcG9ydF0sIGFuZCB0aGUgcGF0aAogICAqIChpbmNsdWRpbmcgYSBwb3NzaWJsZSBxdWVyeSkgaXMgc3BlY2lmaWVkIHVzaW5nIFtwYXRoXS4KICAgKgogICAqIFNlZSBbb3Blbl0gZm9yIGRldGFpbHMuCiAgICovCiAgRnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PiBoZWFkKFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHBhdGgpOwoKICAvKioKICAgKiBPcGVucyBhIEhUVFAgY29ubmVjdGlvbiB1c2luZyB0aGUgSEVBRCBtZXRob2QuCiAgICoKICAgKiBUaGUgVVJMIHRvIHVzZSBpcyBzcGVjaWZpZWQgaW4gW3VybF0uCiAgICoKICAgKiBTZWUgW29wZW5VcmxdIGZvciBkZXRhaWxzLgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD4gaGVhZFVybChVcmkgdXJsKTsKCiAgLyoqCiAgICogU2V0cyB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBzaXRlIGlzIHJlcXVlc3RpbmcKICAgKiBhdXRoZW50aWNhdGlvbi4gVGhlIFVSTCByZXF1ZXN0ZWQgYW5kIHRoZSBzZWN1cml0eSByZWFsbSBmcm9tIHRoZQogICAqIHNlcnZlciBhcmUgcGFzc2VkIGluIHRoZSBhcmd1bWVudHMgW3VybF0gYW5kIFtyZWFsbV0uCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIFtGdXR1cmVdIHdoaWNoIHNob3VsZCBjb21wbGV0ZSB3aGVuIHRoZQogICAqIGF1dGhlbnRpY2F0aW9uIGhhcyBiZWVuIHJlc29sdmVkLiBJZiBjcmVkZW50aWFscyBjYW5ub3QgYmUKICAgKiBwcm92aWRlZCB0aGUgW0Z1dHVyZV0gc2hvdWxkIGNvbXBsZXRlIHdpdGggWzpmYWxzZTpdLiBJZgogICAqIGNyZWRlbnRpYWxzIGFyZSBhdmFpbGFibGUgdGhlIGZ1bmN0aW9uIHNob3VsZCBhZGQgdGhlc2UgdXNpbmcKICAgKiBbYWRkQ3JlZGVudGlhbHNdIGJlZm9yZSBjb21wbGV0aW5nIHRoZSBbRnV0dXJlXSB3aXRoIHRoZSB2YWx1ZQogICAqIFs6dHJ1ZTpdLgogICAqCiAgICogSWYgdGhlIFtGdXR1cmVdIGNvbXBsZXRlcyB3aXRoIFs6dHJ1ZTpdIHRoZSByZXF1ZXN0IHdpbGwgYmUgcmV0cmllZAogICAqIHVzaW5nIHRoZSB1cGRhdGVkIGNyZWRlbnRpYWxzLCBob3dldmVyLCB0aGUgcmV0cmllZCByZXF1ZXN0IHdpbGwgbm90CiAgICogY2FycnkgdGhlIG9yaWdpbmFsIHJlcXVlc3QgcGF5bG9hZC4gT3RoZXJ3aXNlIHJlc3BvbnNlIHByb2Nlc3Npbmcgd2lsbAogICAqIGNvbnRpbnVlIG5vcm1hbGx5LgogICAqCiAgICogSWYgaXQgaXMga25vd24gdGhhdCB0aGUgcmVtb3RlIHNlcnZlciByZXF1aXJlcyBhdXRoZW50aWNhdGlvbiBmb3IgYWxsCiAgICogcmVxdWVzdHMsIGl0IGlzIGFkdmlzYWJsZSB0byB1c2UgW2FkZENyZWRlbnRpYWxzXSBkaXJlY3RseSwgb3IgbWFudWFsbHkKICAgKiBzZXQgdGhlIGAnYXV0aG9yaXphdGlvbidgIGhlYWRlciBvbiB0aGUgcmVxdWVzdCB0byBhdm9pZCB0aGUgb3ZlcmhlYWQKICAgKiBvZiBhIGZhaWxlZCByZXF1ZXN0LCBvciBpc3N1ZXMgZHVlIHRvIG1pc3NpbmcgcmVxdWVzdCBwYXlsb2FkIG9uIHJldHJpZWQKICAgKiByZXF1ZXN0LgogICAqLwogIHNldCBhdXRoZW50aWNhdGUoRnV0dXJlPGJvb2w+IGYoVXJpIHVybCwgU3RyaW5nIHNjaGVtZSwgU3RyaW5nIHJlYWxtKSk7CgogIC8qKgogICAqIEFkZCBjcmVkZW50aWFscyB0byBiZSB1c2VkIGZvciBhdXRob3JpemluZyBIVFRQIHJlcXVlc3RzLgogICAqLwogIHZvaWQgYWRkQ3JlZGVudGlhbHMoVXJpIHVybCwgU3RyaW5nIHJlYWxtLCBIdHRwQ2xpZW50Q3JlZGVudGlhbHMgY3JlZGVudGlhbHMpOwoKICAvKioKICAgKiBTZXRzIHRoZSBmdW5jdGlvbiB1c2VkIHRvIHJlc29sdmUgdGhlIHByb3h5IHNlcnZlciB0byBiZSB1c2VkIGZvcgogICAqIG9wZW5pbmcgYSBIVFRQIGNvbm5lY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBbdXJsXS4gSWYgdGhpcwogICAqIGZ1bmN0aW9uIGlzIG5vdCBzZXQsIGRpcmVjdCBjb25uZWN0aW9ucyB3aWxsIGFsd2F5cyBiZSB1c2VkLgogICAqCiAgICogVGhlIHN0cmluZyByZXR1cm5lZCBieSBbZl0gbXVzdCBiZSBpbiB0aGUgZm9ybWF0IHVzZWQgYnkgYnJvd3NlcgogICAqIFBBQyAocHJveHkgYXV0by1jb25maWcpIHNjcmlwdHMuIFRoYXQgaXMgZWl0aGVyCiAgICoKICAgKiAgICAgIkRJUkVDVCIKICAgKgogICAqIGZvciB1c2luZyBhIGRpcmVjdCBjb25uZWN0aW9uIG9yCiAgICoKICAgKiAgICAgIlBST1hZIGhvc3Q6cG9ydCIKICAgKgogICAqIGZvciB1c2luZyB0aGUgcHJveHkgc2VydmVyIFs6aG9zdDpdIG9uIHBvcnQgWzpwb3J0Ol0uCiAgICoKICAgKiBBIGNvbmZpZ3VyYXRpb24gY2FuIGNvbnRhaW4gc2V2ZXJhbCBjb25maWd1cmF0aW9uIGVsZW1lbnRzCiAgICogc2VwYXJhdGVkIGJ5IHNlbWljb2xvbnMsIGUuZy4KICAgKgogICAqICAgICAiUFJPWFkgaG9zdDpwb3J0OyBQUk9YWSBob3N0Mjpwb3J0MjsgRElSRUNUIgogICAqCiAgICogVGhlIHN0YXRpYyBmdW5jdGlvbiBbZmluZFByb3h5RnJvbUVudmlyb25tZW50XSBvbiB0aGlzIGNsYXNzIGNhbgogICAqIGJlIHVzZWQgdG8gaW1wbGVtZW50IHByb3h5IHNlcnZlciByZXNvbHZpbmcgYmFzZWQgb24gZW52aXJvbm1lbnQKICAgKiB2YXJpYWJsZXMuCiAgICovCiAgc2V0IGZpbmRQcm94eShTdHJpbmcgZihVcmkgdXJsKSk7CgogIC8qKgogICAqIEZ1bmN0aW9uIGZvciByZXNvbHZpbmcgdGhlIHByb3h5IHNlcnZlciB0byBiZSB1c2VkIGZvciBhIEhUVFAKICAgKiBjb25uZWN0aW9uIGZyb20gdGhlIHByb3h5IGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVkIHRocm91Z2gKICAgKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCiAgICoKICAgKiBUaGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgdGFrZW4gaW50byBhY2NvdW50OgogICAqCiAgICogICAgIGh0dHBfcHJveHkKICAgKiAgICAgaHR0cHNfcHJveHkKICAgKiAgICAgbm9fcHJveHkKICAgKiAgICAgSFRUUF9QUk9YWQogICAqICAgICBIVFRQU19QUk9YWQogICAqICAgICBOT19QUk9YWQogICAqCiAgICogWzpodHRwX3Byb3h5Ol0gYW5kIFs6SFRUUF9QUk9YWTpdIHNwZWNpZnkgdGhlIHByb3h5IHNlcnZlciB0byB1c2UgZm9yCiAgICogaHR0cDovLyB1cmxzLiBVc2UgdGhlIGZvcm1hdCBbOmhvc3RuYW1lOnBvcnQ6XS4gSWYgbm8gcG9ydCBpcyB1c2VkIGEKICAgKiBkZWZhdWx0IG9mIDEwODAgd2lsbCBiZSB1c2VkLiBJZiBib3RoIGFyZSBzZXQgdGhlIGxvd2VyIGNhc2Ugb25lIHRha2VzCiAgICogcHJlY2VkZW5jZS4KICAgKgogICAqIFs6aHR0cHNfcHJveHk6XSBhbmQgWzpIVFRQU19QUk9YWTpdIHNwZWNpZnkgdGhlIHByb3h5IHNlcnZlciB0byB1c2UgZm9yCiAgICogaHR0cHM6Ly8gdXJscy4gVXNlIHRoZSBmb3JtYXQgWzpob3N0bmFtZTpwb3J0Ol0uIElmIG5vIHBvcnQgaXMgdXNlZCBhCiAgICogZGVmYXVsdCBvZiAxMDgwIHdpbGwgYmUgdXNlZC4gSWYgYm90aCBhcmUgc2V0IHRoZSBsb3dlciBjYXNlIG9uZSB0YWtlcwogICAqIHByZWNlZGVuY2UuCiAgICoKICAgKiBbOm5vX3Byb3h5Ol0gYW5kIFs6Tk9fUFJPWFk6XSBzcGVjaWZ5IGEgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YKICAgKiBwb3N0Zml4ZXMgb2YgaG9zdG5hbWVzIGZvciB3aGljaCBub3QgdG8gdXNlIHRoZSBwcm94eQogICAqIHNlcnZlci4gRS5nLiB0aGUgdmFsdWUgImxvY2FsaG9zdCwxMjcuMC4wLjEiIHdpbGwgbWFrZSByZXF1ZXN0cwogICAqIHRvIGJvdGggImxvY2FsaG9zdCIgYW5kICIxMjcuMC4wLjEiIG5vdCB1c2UgYSBwcm94eS4gSWYgYm90aCBhcmUgc2V0CiAgICogdGhlIGxvd2VyIGNhc2Ugb25lIHRha2VzIHByZWNlZGVuY2UuCiAgICoKICAgKiBUbyBhY3RpdmF0ZSB0aGlzIHdheSBvZiByZXNvbHZpbmcgcHJveGllcyBhc3NpZ24gdGhpcyBmdW5jdGlvbiB0bwogICAqIHRoZSBbZmluZFByb3h5XSBwcm9wZXJ0eSBvbiB0aGUgW0h0dHBDbGllbnRdLgogICAqCiAgICogICAgIEh0dHBDbGllbnQgY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKICAgKiAgICAgY2xpZW50LmZpbmRQcm94eSA9IEh0dHBDbGllbnQuZmluZFByb3h5RnJvbUVudmlyb25tZW50OwogICAqCiAgICogSWYgeW91IGRvbid0IHdhbnQgdG8gdXNlIHRoZSBzeXN0ZW0gZW52aXJvbm1lbnQgeW91IGNhbiB1c2UgYQogICAqIGRpZmZlcmVudCBvbmUgYnkgd3JhcHBpbmcgdGhlIGZ1bmN0aW9uLgogICAqCiAgICogICAgIEh0dHBDbGllbnQgY2xpZW50ID0gbmV3IEh0dHBDbGllbnQoKTsKICAgKiAgICAgY2xpZW50LmZpbmRQcm94eSA9ICh1cmwpIHsKICAgKiAgICAgICByZXR1cm4gSHR0cENsaWVudC5maW5kUHJveHlGcm9tRW52aXJvbm1lbnQoCiAgICogICAgICAgICAgIHVybCwgZW52aXJvbm1lbnQ6IHsiaHR0cF9wcm94eSI6IC4uLiwgIm5vX3Byb3h5IjogLi4ufSk7CiAgICogICAgIH0KICAgKgogICAqIElmIGEgcHJveHkgcmVxdWlyZXMgYXV0aGVudGljYXRpb24gaXQgaXMgcG9zc2libGUgdG8gY29uZmlndXJlCiAgICogdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBhcyB3ZWxsLiBVc2UgdGhlIGZvcm1hdAogICAqIFs6dXNlcm5hbWU6cGFzc3dvcmRAaG9zdG5hbWU6cG9ydDpdIHRvIGluY2x1ZGUgdGhlIHVzZXJuYW1lIGFuZAogICAqIHBhc3N3b3JkLiBBbHRlcm5hdGl2ZWx5IHRoZSBBUEkgW2FkZFByb3h5Q3JlZGVudGlhbHNdIGNhbiBiZSB1c2VkCiAgICogdG8gc2V0IGNyZWRlbnRpYWxzIGZvciBwcm94aWVzIHdoaWNoIHJlcXVpcmUgYXV0aGVudGljYXRpb24uCiAgICovCiAgc3RhdGljIFN0cmluZyBmaW5kUHJveHlGcm9tRW52aXJvbm1lbnQoVXJpIHVybCwKICAgICAge01hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnR9KSB7CiAgICBIdHRwT3ZlcnJpZGVzIG92ZXJyaWRlcyA9IEh0dHBPdmVycmlkZXMuY3VycmVudDsKICAgIGlmIChvdmVycmlkZXMgPT0gbnVsbCkgewogICAgICByZXR1cm4gX0h0dHBDbGllbnQuX2ZpbmRQcm94eUZyb21FbnZpcm9ubWVudCh1cmwsIGVudmlyb25tZW50KTsKICAgIH0KICAgIHJldHVybiBvdmVycmlkZXMuZmluZFByb3h5RnJvbUVudmlyb25tZW50KHVybCwgZW52aXJvbm1lbnQpOwogIH0KCiAgLyoqCiAgICogU2V0cyB0aGUgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdoZW4gYSBwcm94eSBpcyByZXF1ZXN0aW5nCiAgICogYXV0aGVudGljYXRpb24uIEluZm9ybWF0aW9uIG9uIHRoZSBwcm94eSBpbiB1c2UgYW5kIHRoZSBzZWN1cml0eQogICAqIHJlYWxtIGZvciB0aGUgYXV0aGVudGljYXRpb24gYXJlIHBhc3NlZCBpbiB0aGUgYXJndW1lbnRzIFtob3N0XSwKICAgKiBbcG9ydF0gYW5kIFtyZWFsbV0uCiAgICoKICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIFtGdXR1cmVdIHdoaWNoIHNob3VsZCBjb21wbGV0ZSB3aGVuIHRoZQogICAqIGF1dGhlbnRpY2F0aW9uIGhhcyBiZWVuIHJlc29sdmVkLiBJZiBjcmVkZW50aWFscyBjYW5ub3QgYmUKICAgKiBwcm92aWRlZCB0aGUgW0Z1dHVyZV0gc2hvdWxkIGNvbXBsZXRlIHdpdGggWzpmYWxzZTpdLiBJZgogICAqIGNyZWRlbnRpYWxzIGFyZSBhdmFpbGFibGUgdGhlIGZ1bmN0aW9uIHNob3VsZCBhZGQgdGhlc2UgdXNpbmcKICAgKiBbYWRkUHJveHlDcmVkZW50aWFsc10gYmVmb3JlIGNvbXBsZXRpbmcgdGhlIFtGdXR1cmVdIHdpdGggdGhlIHZhbHVlCiAgICogWzp0cnVlOl0uCiAgICoKICAgKiBJZiB0aGUgW0Z1dHVyZV0gY29tcGxldGVzIHdpdGggWzp0cnVlOl0gdGhlIHJlcXVlc3Qgd2lsbCBiZSByZXRyaWVkCiAgICogdXNpbmcgdGhlIHVwZGF0ZWQgY3JlZGVudGlhbHMuIE90aGVyd2lzZSByZXNwb25zZSBwcm9jZXNzaW5nIHdpbGwKICAgKiBjb250aW51ZSBub3JtYWxseS4KICAgKi8KICBzZXQgYXV0aGVudGljYXRlUHJveHkoCiAgICAgIEZ1dHVyZTxib29sPiBmKFN0cmluZyBob3N0LCBpbnQgcG9ydCwgU3RyaW5nIHNjaGVtZSwgU3RyaW5nIHJlYWxtKSk7CgogIC8qKgogICAqIEFkZCBjcmVkZW50aWFscyB0byBiZSB1c2VkIGZvciBhdXRob3JpemluZyBIVFRQIHByb3hpZXMuCiAgICovCiAgdm9pZCBhZGRQcm94eUNyZWRlbnRpYWxzKAogICAgICBTdHJpbmcgaG9zdCwgaW50IHBvcnQsIFN0cmluZyByZWFsbSwgSHR0cENsaWVudENyZWRlbnRpYWxzIGNyZWRlbnRpYWxzKTsKCiAgLyoqCiAgICogU2V0cyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBkZWNpZGUgd2hldGhlciB0byBhY2NlcHQgYSBzZWN1cmUgY29ubmVjdGlvbgogICAqIHdpdGggYSBzZXJ2ZXIgY2VydGlmaWNhdGUgdGhhdCBjYW5ub3QgYmUgYXV0aGVudGljYXRlZCBieSBhbnkgb2Ygb3VyCiAgICogdHJ1c3RlZCByb290IGNlcnRpZmljYXRlcy4KICAgKgogICAqIFdoZW4gYW4gc2VjdXJlIEhUVFAgcmVxdWVzdCBpZiBtYWRlLCB1c2luZyB0aGlzIEh0dHBDbGllbnQsIGFuZCB0aGUKICAgKiBzZXJ2ZXIgcmV0dXJucyBhIHNlcnZlciBjZXJ0aWZpY2F0ZSB0aGF0IGNhbm5vdCBiZSBhdXRoZW50aWNhdGVkLCB0aGUKICAgKiBjYWxsYmFjayBpcyBjYWxsZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgW1g1MDlDZXJ0aWZpY2F0ZV0gb2JqZWN0IGFuZAogICAqIHRoZSBzZXJ2ZXIncyBob3N0bmFtZSBhbmQgcG9ydC4gIElmIHRoZSB2YWx1ZSBvZiBbYmFkQ2VydGlmaWNhdGVDYWxsYmFja10KICAgKiBpcyBbOm51bGw6XSwgdGhlIGJhZCBjZXJ0aWZpY2F0ZSBpcyByZWplY3RlZCwgYXMgaWYgdGhlIGNhbGxiYWNrCiAgICogcmV0dXJuZWQgWzpmYWxzZTpdCiAgICoKICAgKiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCB0aGUgc2VjdXJlIGNvbm5lY3Rpb24gaXMgYWNjZXB0ZWQgYW5kIHRoZQogICAqIFs6RnV0dXJlPEh0dHBDbGllbnRSZXF1ZXN0PjpdIHRoYXQgd2FzIHJldHVybmVkIGZyb20gdGhlIGNhbGwgbWFraW5nIHRoZQogICAqIHJlcXVlc3QgY29tcGxldGVzIHdpdGggYSB2YWxpZCBIdHRwUmVxdWVzdCBvYmplY3QuIElmIHRoZSBjYWxsYmFjayByZXR1cm5zCiAgICogZmFsc2UsIHRoZSBbOkZ1dHVyZTxIdHRwQ2xpZW50UmVxdWVzdD46XSBjb21wbGV0ZXMgd2l0aCBhbiBleGNlcHRpb24uCiAgICoKICAgKiBJZiBhIGJhZCBjZXJ0aWZpY2F0ZSBpcyByZWNlaXZlZCBvbiBhIGNvbm5lY3Rpb24gYXR0ZW1wdCwgdGhlIGxpYnJhcnkgY2FsbHMKICAgKiB0aGUgZnVuY3Rpb24gdGhhdCB3YXMgdGhlIHZhbHVlIG9mIGJhZENlcnRpZmljYXRlQ2FsbGJhY2sgYXQgdGhlIHRpbWUKICAgKiB0aGUgcmVxdWVzdCBpcyBtYWRlLCBldmVuIGlmIHRoZSB2YWx1ZSBvZiBiYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrCiAgICogaGFzIGNoYW5nZWQgc2luY2UgdGhlbi4KICAgKi8KICBzZXQgYmFkQ2VydGlmaWNhdGVDYWxsYmFjaygKICAgICAgYm9vbCBjYWxsYmFjayhYNTA5Q2VydGlmaWNhdGUgY2VydCwgU3RyaW5nIGhvc3QsIGludCBwb3J0KSk7CgogIC8vLyBTaHV0cyBkb3duIHRoZSBIVFRQIGNsaWVudC4KICAvLy8KICAvLy8gSWYgW2ZvcmNlXSBpcyBgZmFsc2VgICh0aGUgZGVmYXVsdCkgdGhlIFtIdHRwQ2xpZW50XSB3aWxsIGJlIGtlcHQgYWxpdmUKICAvLy8gdW50aWwgYWxsIGFjdGl2ZSBjb25uZWN0aW9ucyBhcmUgZG9uZS4gSWYgW2ZvcmNlXSBpcyBgdHJ1ZWAgYW55IGFjdGl2ZQogIC8vLyBjb25uZWN0aW9ucyB3aWxsIGJlIGNsb3NlZCB0byBpbW1lZGlhdGVseSByZWxlYXNlIGFsbCByZXNvdXJjZXMuIFRoZXNlCiAgLy8vIGNsb3NlZCBjb25uZWN0aW9ucyB3aWxsIHJlY2VpdmUgYW4gZXJyb3IgZXZlbnQgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY2xpZW50CiAgLy8vIHdhcyBzaHV0IGRvd24uIEluIGJvdGggY2FzZXMgdHJ5aW5nIHRvIGVzdGFibGlzaCBhIG5ldyBjb25uZWN0aW9uIGFmdGVyCiAgLy8vIGNhbGxpbmcgW2Nsb3NlXSB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4KICB2b2lkIGNsb3NlKHtib29sIGZvcmNlOiBmYWxzZX0pOwp9CgovKioKICogSFRUUCByZXF1ZXN0IGZvciBhIGNsaWVudCBjb25uZWN0aW9uLgogKgogKiBUbyBzZXQgdXAgYSByZXF1ZXN0LCBzZXQgdGhlIGhlYWRlcnMgdXNpbmcgdGhlIGhlYWRlcnMgcHJvcGVydHkKICogcHJvdmlkZWQgaW4gdGhpcyBjbGFzcyBhbmQgd3JpdGUgdGhlIGRhdGEgdG8gdGhlIGJvZHkgb2YgdGhlIHJlcXVlc3QuCiAqIEh0dHBDbGllbnRSZXF1ZXN0IGlzIGFuIFtJT1NpbmtdLiBVc2UgdGhlIG1ldGhvZHMgZnJvbSBJT1NpbmssCiAqIHN1Y2ggYXMgd3JpdGVDaGFyQ29kZSgpLCB0byB3cml0ZSB0aGUgYm9keSBvZiB0aGUgSFRUUAogKiByZXF1ZXN0LiBXaGVuIG9uZSBvZiB0aGUgSU9TaW5rIG1ldGhvZHMgaXMgdXNlZCBmb3IgdGhlIGZpcnN0CiAqIHRpbWUsIHRoZSByZXF1ZXN0IGhlYWRlciBpcyBzZW50LiBDYWxsaW5nIGFueSBtZXRob2RzIHRoYXQKICogY2hhbmdlIHRoZSBoZWFkZXIgYWZ0ZXIgaXQgaXMgc2VudCB0aHJvd3MgYW4gZXhjZXB0aW9uLgogKgogKiBXaGVuIHdyaXRpbmcgc3RyaW5nIGRhdGEgdGhyb3VnaCB0aGUgW0lPU2lua10gdGhlCiAqIGVuY29kaW5nIHVzZWQgaXMgZGV0ZXJtaW5lZCBmcm9tIHRoZSAiY2hhcnNldCIgcGFyYW1ldGVyIG9mCiAqIHRoZSAiQ29udGVudC1UeXBlIiBoZWFkZXIuCiAqCiAqICAgICBIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0ID0gLi4uCiAqICAgICByZXF1ZXN0LmhlYWRlcnMuY29udGVudFR5cGUKICogICAgICAgICA9IG5ldyBDb250ZW50VHlwZSgiYXBwbGljYXRpb24iLCAianNvbiIsIGNoYXJzZXQ6ICJ1dGYtOCIpOwogKiAgICAgcmVxdWVzdC53cml0ZSguLi4pOyAgLy8gU3RyaW5ncyB3cml0dGVuIHdpbGwgYmUgVVRGLTggZW5jb2RlZC4KICoKICogSWYgbm8gY2hhcnNldCBpcyBwcm92aWRlZCB0aGUgZGVmYXVsdCBvZiBJU08tODg1OS0xIChMYXRpbiAxKSBpcwogKiBiZSB1c2VkLgogKgogKiAgICAgSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCA9IC4uLgogKiAgICAgcmVxdWVzdC5oZWFkZXJzLmFkZChIdHRwSGVhZGVycy5jb250ZW50VHlwZUhlYWRlciwgInRleHQvcGxhaW4iKTsKICogICAgIHJlcXVlc3Qud3JpdGUoLi4uKTsgIC8vIFN0cmluZ3Mgd3JpdHRlbiB3aWxsIGJlIElTTy04ODU5LTEgZW5jb2RlZC4KICoKICogQW4gZXhjZXB0aW9uIGlzIHRocm93biBpZiB5b3UgdXNlIGFuIHVuc3VwcG9ydGVkIGVuY29kaW5nIGFuZCB0aGUKICogYHdyaXRlKClgIG1ldGhvZCBiZWluZyB1c2VkIHRha2VzIGEgc3RyaW5nIHBhcmFtZXRlci4KICovCmFic3RyYWN0IGNsYXNzIEh0dHBDbGllbnRSZXF1ZXN0IGltcGxlbWVudHMgSU9TaW5rIHsKICAvKioKICAgKiBHZXRzIGFuZCBzZXRzIHRoZSByZXF1ZXN0ZWQgcGVyc2lzdGVudCBjb25uZWN0aW9uIHN0YXRlLgogICAqCiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgWzp0cnVlOl0uCiAgICovCiAgYm9vbCBwZXJzaXN0ZW50Q29ubmVjdGlvbjsKCiAgLyoqCiAgICogU2V0IHRoaXMgcHJvcGVydHkgdG8gWzp0cnVlOl0gaWYgdGhpcyByZXF1ZXN0IHNob3VsZAogICAqIGF1dG9tYXRpY2FsbHkgZm9sbG93IHJlZGlyZWN0cy4gVGhlIGRlZmF1bHQgaXMgWzp0cnVlOl0uCiAgICoKICAgKiBBdXRvbWF0aWMgcmVkaXJlY3Qgd2lsbCBvbmx5IGhhcHBlbiBmb3IgIkdFVCIgYW5kICJIRUFEIiByZXF1ZXN0cwogICAqIGFuZCBvbmx5IGZvciB0aGUgc3RhdHVzIGNvZGVzIFs6SHR0cFN0YXR1cy5tb3ZlZFBlcm1hbmVudGx5Ol0KICAgKiAoMzAxKSwgWzpIdHRwU3RhdHVzLmZvdW5kOl0gKDMwMiksCiAgICogWzpIdHRwU3RhdHVzLm1vdmVkVGVtcG9yYXJpbHk6XSAoMzAyLCBhbGlhcyBmb3IKICAgKiBbOkh0dHBTdGF0dXMuZm91bmQ6XSksIFs6SHR0cFN0YXR1cy5zZWVPdGhlcjpdICgzMDMpIGFuZAogICAqIFs6SHR0cFN0YXR1cy50ZW1wb3JhcnlSZWRpcmVjdDpdICgzMDcpLiBGb3IKICAgKiBbOkh0dHBTdGF0dXMuc2VlT3RoZXI6XSAoMzAzKSBhdXRvbWF0aWMgcmVkaXJlY3Qgd2lsbCBhbHNvIGhhcHBlbgogICAqIGZvciAiUE9TVCIgcmVxdWVzdHMgd2l0aCB0aGUgbWV0aG9kIGNoYW5nZWQgdG8gIkdFVCIgd2hlbgogICAqIGZvbGxvd2luZyB0aGUgcmVkaXJlY3QuCiAgICoKICAgKiBBbGwgaGVhZGVycyBhZGRlZCB0byB0aGUgcmVxdWVzdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZWRpcmVjdGlvbgogICAqIHJlcXVlc3QocykuIEhvd2V2ZXIsIGFueSBib2R5IHNlbmQgd2l0aCB0aGUgcmVxdWVzdCB3aWxsIG5vdCBiZQogICAqIHBhcnQgb2YgdGhlIHJlZGlyZWN0aW9uIHJlcXVlc3QocykuCiAgICovCiAgYm9vbCBmb2xsb3dSZWRpcmVjdHM7CgogIC8qKgogICAqIFNldCB0aGlzIHByb3BlcnR5IHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZWRpcmVjdHMgdG8gZm9sbG93CiAgICogd2hlbiBbZm9sbG93UmVkaXJlY3RzXSBpcyBgdHJ1ZWAuIElmIHRoaXMgbnVtYmVyIGlzIGV4Y2VlZGVkCiAgICogYW4gZXJyb3IgZXZlbnQgd2lsbCBiZSBhZGRlZCB3aXRoIGEgW1JlZGlyZWN0RXhjZXB0aW9uXS4KICAgKgogICAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDUuCiAgICovCiAgaW50IG1heFJlZGlyZWN0czsKCiAgLyoqCiAgICogVGhlIG1ldGhvZCBvZiB0aGUgcmVxdWVzdC4KICAgKi8KICBTdHJpbmcgZ2V0IG1ldGhvZDsKCiAgLyoqCiAgICogVGhlIHVyaSBvZiB0aGUgcmVxdWVzdC4KICAgKi8KICBVcmkgZ2V0IHVyaTsKCiAgLy8vIEdldHMgYW5kIHNldHMgdGhlIGNvbnRlbnQgbGVuZ3RoIG9mIHRoZSByZXF1ZXN0LgogIC8vLwogIC8vLyBJZiB0aGUgc2l6ZSBvZiB0aGUgcmVxdWVzdCBpcyBub3Qga25vd24gaW4gYWR2YW5jZSBzZXQgY29udGVudCBsZW5ndGggdG8KICAvLy8gLTEsIHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1bHQuCiAgaW50IGNvbnRlbnRMZW5ndGg7CgogIC8qKgogICAqIEdldHMgb3Igc2V0cyBpZiB0aGUgW0h0dHBDbGllbnRSZXF1ZXN0XSBzaG91bGQgYnVmZmVyIG91dHB1dC4KICAgKgogICAqIERlZmF1bHQgdmFsdWUgaXMgYHRydWVgLgogICAqCiAgICogX19Ob3RlX186IERpc2FibGluZyBidWZmZXJpbmcgb2YgdGhlIG91dHB1dCBjYW4gcmVzdWx0IGluIHZlcnkgcG9vcgogICAqIHBlcmZvcm1hbmNlLCB3aGVuIHdyaXRpbmcgbWFueSBzbWFsbCBjaHVua3MuCiAgICovCiAgYm9vbCBidWZmZXJPdXRwdXQ7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGNsaWVudCByZXF1ZXN0IGhlYWRlcnMuCiAgICoKICAgKiBUaGUgY2xpZW50IHJlcXVlc3QgaGVhZGVycyBjYW4gYmUgbW9kaWZpZWQgdW50aWwgdGhlIGNsaWVudAogICAqIHJlcXVlc3QgYm9keSBpcyB3cml0dGVuIHRvIG9yIGNsb3NlZC4gQWZ0ZXIgdGhhdCB0aGV5IGJlY29tZQogICAqIGltbXV0YWJsZS4KICAgKi8KICBIdHRwSGVhZGVycyBnZXQgaGVhZGVyczsKCiAgLyoqCiAgICogQ29va2llcyB0byBwcmVzZW50IHRvIHRoZSBzZXJ2ZXIgKGluIHRoZSAnY29va2llJyBoZWFkZXIpLgogICAqLwogIExpc3Q8Q29va2llPiBnZXQgY29va2llczsKCiAgLy8vIEEgW0h0dHBDbGllbnRSZXNwb25zZV0gZnV0dXJlIHRoYXQgd2lsbCBjb21wbGV0ZSBvbmNlIHRoZSByZXNwb25zZSBpcwogIC8vLyBhdmFpbGFibGUuCiAgLy8vCiAgLy8vIElmIGFuIGVycm9yIG9jY3VycyBiZWZvcmUgdGhlIHJlc3BvbnNlIGlzIGF2YWlsYWJsZSwgdGhpcyBmdXR1cmUgd2lsbAogIC8vLyBjb21wbGV0ZSB3aXRoIGFuIGVycm9yLgogIEZ1dHVyZTxIdHRwQ2xpZW50UmVzcG9uc2U+IGdldCBkb25lOwoKICAvKioKICAgKiBDbG9zZSB0aGUgcmVxdWVzdCBmb3IgaW5wdXQuIFJldHVybnMgdGhlIHZhbHVlIG9mIFtkb25lXS4KICAgKi8KICBGdXR1cmU8SHR0cENsaWVudFJlc3BvbnNlPiBjbG9zZSgpOwoKICAvLy8gR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50IGNvbm5lY3Rpb24uCiAgLy8vCiAgLy8vIFJldHVybnMgWzpudWxsOl0gaWYgdGhlIHNvY2tldCBpcyBub3QgYXZhaWxhYmxlLgogIEh0dHBDb25uZWN0aW9uSW5mbyBnZXQgY29ubmVjdGlvbkluZm87Cn0KCi8qKgogKiBIVFRQIHJlc3BvbnNlIGZvciBhIGNsaWVudCBjb25uZWN0aW9uLgogKgogKiBUaGUgYm9keSBvZiBhIFtIdHRwQ2xpZW50UmVzcG9uc2VdIG9iamVjdCBpcyBhCiAqIFtTdHJlYW1dIG9mIGRhdGEgZnJvbSB0aGUgc2VydmVyLiBMaXN0ZW4gdG8gdGhlIGJvZHkgdG8gaGFuZGxlCiAqIHRoZSBkYXRhIGFuZCBiZSBub3RpZmllZCB3aGVuIHRoZSBlbnRpcmUgYm9keSBpcyByZWNlaXZlZC4KICoKICogICAgIG5ldyBIdHRwQ2xpZW50KCkuZ2V0KCdsb2NhbGhvc3QnLCA4MCwgJy9maWxlLnR4dCcpCiAqICAgICAgICAgIC50aGVuKChIdHRwQ2xpZW50UmVxdWVzdCByZXF1ZXN0KSA9PiByZXF1ZXN0LmNsb3NlKCkpCiAqICAgICAgICAgIC50aGVuKChIdHRwQ2xpZW50UmVzcG9uc2UgcmVzcG9uc2UpIHsKICogICAgICAgICAgICByZXNwb25zZS50cmFuc2Zvcm0odXRmOC5kZWNvZGVyKS5saXN0ZW4oKGNvbnRlbnRzKSB7CiAqICAgICAgICAgICAgICAvLyBoYW5kbGUgZGF0YQogKiAgICAgICAgICAgIH0pOwogKiAgICAgICAgICB9KTsKICovCmFic3RyYWN0IGNsYXNzIEh0dHBDbGllbnRSZXNwb25zZSBpbXBsZW1lbnRzIFN0cmVhbTxMaXN0PGludD4+IHsKICAvKioKICAgKiBSZXR1cm5zIHRoZSBzdGF0dXMgY29kZS4KICAgKgogICAqIFRoZSBzdGF0dXMgY29kZSBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIGJvZHkgaXMgd3JpdHRlbgogICAqIHRvLiBTZXR0aW5nIHRoZSBzdGF0dXMgY29kZSBhZnRlciB3cml0aW5nIHRvIHRoZSBib2R5IHdpbGwgdGhyb3cKICAgKiBhIGBTdGF0ZUVycm9yYC4KICAgKi8KICBpbnQgZ2V0IHN0YXR1c0NvZGU7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHJlYXNvbiBwaHJhc2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0dXMgY29kZS4KICAgKgogICAqIFRoZSByZWFzb24gcGhyYXNlIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgYm9keSBpcyB3cml0dGVuCiAgICogdG8uIFNldHRpbmcgdGhlIHJlYXNvbiBwaHJhc2UgYWZ0ZXIgd3JpdGluZyB0byB0aGUgYm9keSB3aWxsIHRocm93CiAgICogYSBgU3RhdGVFcnJvcmAuCiAgICovCiAgU3RyaW5nIGdldCByZWFzb25QaHJhc2U7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGNvbnRlbnQgbGVuZ3RoIG9mIHRoZSByZXNwb25zZSBib2R5LiBSZXR1cm5zIC0xIGlmIHRoZSBzaXplIG9mCiAgICogdGhlIHJlc3BvbnNlIGJvZHkgaXMgbm90IGtub3duIGluIGFkdmFuY2UuCiAgICoKICAgKiBJZiB0aGUgY29udGVudCBsZW5ndGggbmVlZHMgdG8gYmUgc2V0LCBpdCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlCiAgICogYm9keSBpcyB3cml0dGVuIHRvLiBTZXR0aW5nIHRoZSBjb250ZW50IGxlbmd0aCBhZnRlciB3cml0aW5nIHRvIHRoZSBib2R5CiAgICogd2lsbCB0aHJvdyBhIGBTdGF0ZUVycm9yYC4KICAgKi8KICBpbnQgZ2V0IGNvbnRlbnRMZW5ndGg7CgogIC8vLyBUaGUgY29tcHJlc3Npb24gc3RhdGUgb2YgdGhlIHJlc3BvbnNlLgogIC8vLwogIC8vLyBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIHRoZSByZXNwb25zZSBieXRlcyB3ZXJlIGNvbXByZXNzZWQgd2hlbiB0aGV5IHdlcmUKICAvLy8gcmVjZWl2ZWQgYWNyb3NzIHRoZSB3aXJlIGFuZCB3aGV0aGVyIGNhbGxlcnMgd2lsbCByZWNlaXZlIGNvbXByZXNzZWQKICAvLy8gb3IgdW5jb21wcmVzc2VkIGJ5dGVzIHdoZW4gdGhleSBsaXN0ZWQgdG8gdGhpcyByZXNwb25zZSdzIGJ5dGUgc3RyZWFtLgogIEBTaW5jZSgiMi40IikKICBIdHRwQ2xpZW50UmVzcG9uc2VDb21wcmVzc2lvblN0YXRlIGdldCBjb21wcmVzc2lvblN0YXRlOwoKICAvKioKICAgKiBHZXRzIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUgcmV0dXJuZWQgYnkgdGhlIHNlcnZlci4KICAgKgogICAqIElmIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUgbmVlZHMgdG8gYmUgc2V0LCBpdCBtdXN0IGJlCiAgICogc2V0IGJlZm9yZSB0aGUgYm9keSBpcyB3cml0dGVuIHRvLiBTZXR0aW5nIHRoZSBwZXJzaXN0ZW50IGNvbm5lY3Rpb24gc3RhdGUKICAgKiBhZnRlciB3cml0aW5nIHRvIHRoZSBib2R5IHdpbGwgdGhyb3cgYSBgU3RhdGVFcnJvcmAuCiAgICovCiAgYm9vbCBnZXQgcGVyc2lzdGVudENvbm5lY3Rpb247CgogIC8qKgogICAqIFJldHVybnMgd2hldGhlciB0aGUgc3RhdHVzIGNvZGUgaXMgb25lIG9mIHRoZSBub3JtYWwgcmVkaXJlY3QKICAgKiBjb2RlcyBbSHR0cFN0YXR1cy5tb3ZlZFBlcm1hbmVudGx5XSwgW0h0dHBTdGF0dXMuZm91bmRdLAogICAqIFtIdHRwU3RhdHVzLm1vdmVkVGVtcG9yYXJpbHldLCBbSHR0cFN0YXR1cy5zZWVPdGhlcl0gYW5kCiAgICogW0h0dHBTdGF0dXMudGVtcG9yYXJ5UmVkaXJlY3RdLgogICAqLwogIGJvb2wgZ2V0IGlzUmVkaXJlY3Q7CgogIC8qKgogICAqIFJldHVybnMgdGhlIHNlcmllcyBvZiByZWRpcmVjdHMgdGhpcyBjb25uZWN0aW9uIGhhcyBiZWVuIHRocm91Z2guIFRoZQogICAqIGxpc3Qgd2lsbCBiZSBlbXB0eSBpZiBubyByZWRpcmVjdHMgd2VyZSBmb2xsb3dlZC4gW3JlZGlyZWN0c10gd2lsbCBiZQogICAqIHVwZGF0ZWQgYm90aCBpbiB0aGUgY2FzZSBvZiBhbiBhdXRvbWF0aWMgYW5kIGEgbWFudWFsIHJlZGlyZWN0LgogICAqLwogIExpc3Q8UmVkaXJlY3RJbmZvPiBnZXQgcmVkaXJlY3RzOwoKICAvKioKICAgKiBSZWRpcmVjdHMgdGhpcyBjb25uZWN0aW9uIHRvIGEgbmV3IFVSTC4gVGhlIGRlZmF1bHQgdmFsdWUgZm9yCiAgICogW21ldGhvZF0gaXMgdGhlIG1ldGhvZCBmb3IgdGhlIGN1cnJlbnQgcmVxdWVzdC4gVGhlIGRlZmF1bHQgdmFsdWUKICAgKiBmb3IgW3VybF0gaXMgdGhlIHZhbHVlIG9mIHRoZSBbSHR0cEhlYWRlcnMubG9jYXRpb25IZWFkZXJdIGhlYWRlciBvZgogICAqIHRoZSBjdXJyZW50IHJlc3BvbnNlLiBBbGwgYm9keSBkYXRhIG11c3QgaGF2ZSBiZWVuIHJlYWQgZnJvbSB0aGUKICAgKiBjdXJyZW50IHJlc3BvbnNlIGJlZm9yZSBjYWxsaW5nIFtyZWRpcmVjdF0uCiAgICoKICAgKiBBbGwgaGVhZGVycyBhZGRlZCB0byB0aGUgcmVxdWVzdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSByZWRpcmVjdGlvbgogICAqIHJlcXVlc3QuIEhvd2V2ZXIsIGFueSBib2R5IHNlbnQgd2l0aCB0aGUgcmVxdWVzdCB3aWxsIG5vdCBiZQogICAqIHBhcnQgb2YgdGhlIHJlZGlyZWN0aW9uIHJlcXVlc3QuCiAgICoKICAgKiBJZiBbZm9sbG93TG9vcHNdIGlzIHNldCB0byBbOnRydWU6XSwgcmVkaXJlY3Qgd2lsbCBmb2xsb3cgdGhlIHJlZGlyZWN0LAogICAqIGV2ZW4gaWYgdGhlIFVSTCB3YXMgYWxyZWFkeSB2aXNpdGVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBbOmZhbHNlOl0uCiAgICoKICAgKiBUaGUgbWV0aG9kIHdpbGwgaWdub3JlIFtIdHRwQ2xpZW50UmVxdWVzdC5tYXhSZWRpcmVjdHNdCiAgICogYW5kIHdpbGwgYWx3YXlzIHBlcmZvcm0gdGhlIHJlZGlyZWN0LgogICAqLwogIEZ1dHVyZTxIdHRwQ2xpZW50UmVzcG9uc2U+IHJlZGlyZWN0KAogICAgICBbU3RyaW5nIG1ldGhvZCwgVXJpIHVybCwgYm9vbCBmb2xsb3dMb29wc10pOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjbGllbnQgcmVzcG9uc2UgaGVhZGVycy4KICAgKgogICAqIFRoZSBjbGllbnQgcmVzcG9uc2UgaGVhZGVycyBhcmUgaW1tdXRhYmxlLgogICAqLwogIEh0dHBIZWFkZXJzIGdldCBoZWFkZXJzOwoKICAvKioKICAgKiBEZXRhY2ggdGhlIHVuZGVybHlpbmcgc29ja2V0IGZyb20gdGhlIEhUVFAgY2xpZW50LiBXaGVuIHRoZQogICAqIHNvY2tldCBpcyBkZXRhY2hlZCB0aGUgSFRUUCBjbGllbnQgd2lsbCBubyBsb25nZXIgcGVyZm9ybSBhbnkKICAgKiBvcGVyYXRpb25zIG9uIGl0LgogICAqCiAgICogVGhpcyBpcyBub3JtYWxseSB1c2VkIHdoZW4gYSBIVFRQIHVwZ3JhZGUgaXMgbmVnb3RpYXRlZCBhbmQgdGhlCiAgICogY29tbXVuaWNhdGlvbiBzaG91bGQgY29udGludWUgd2l0aCBhIGRpZmZlcmVudCBwcm90b2NvbC4KICAgKi8KICBGdXR1cmU8U29ja2V0PiBkZXRhY2hTb2NrZXQoKTsKCiAgLyoqCiAgICogQ29va2llcyBzZXQgYnkgdGhlIHNlcnZlciAoZnJvbSB0aGUgJ3NldC1jb29raWUnIGhlYWRlcikuCiAgICovCiAgTGlzdDxDb29raWU+IGdldCBjb29raWVzOwoKICAvKioKICAgKiBSZXR1cm5zIHRoZSBjZXJ0aWZpY2F0ZSBvZiB0aGUgSFRUUFMgc2VydmVyIHByb3ZpZGluZyB0aGUgcmVzcG9uc2UuCiAgICogUmV0dXJucyBudWxsIGlmIHRoZSBjb25uZWN0aW9uIGlzIG5vdCBhIHNlY3VyZSBUTFMgb3IgU1NMIGNvbm5lY3Rpb24uCiAgICovCiAgWDUwOUNlcnRpZmljYXRlIGdldCBjZXJ0aWZpY2F0ZTsKCiAgLyoqCiAgICogR2V0cyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY2xpZW50IGNvbm5lY3Rpb24uIFJldHVybnMgWzpudWxsOl0gaWYgdGhlIHNvY2tldAogICAqIGlzIG5vdCBhdmFpbGFibGUuCiAgICovCiAgSHR0cENvbm5lY3Rpb25JbmZvIGdldCBjb25uZWN0aW9uSW5mbzsKfQoKLy8vIEVudW0gdGhhdCBzcGVjaWZpZXMgdGhlIGNvbXByZXNzaW9uIHN0YXRlIG9mIHRoZSBieXRlIHN0cmVhbSBvZiBhbgovLy8gW0h0dHBDbGllbnRSZXNwb25zZV0uCi8vLwovLy8gVGhlIHZhbHVlcyBoZXJlaW4gYWxsb3cgY2FsbGVycyB0byBhbnN3ZXIgdGhlIGZvbGxvd2luZyBxdWVzdGlvbnMgYXMgdGhleQovLy8gcGVydGFpbiB0byBhbiBbSHR0cENsaWVudFJlc3BvbnNlXToKLy8vCi8vLyAgKiBDYW4gdGhlIHZhbHVlIG9mIHRoZSByZXNwb25zZSdzIGBDb250ZW50LUxlbmd0aGAgSFRUUCBoZWFkZXIgYmUgdHJ1c3RlZD8KLy8vICAqIERvZXMgdGhlIGNhbGxlciBuZWVkIHRvIG1hbnVhbGx5IGRlY29tcHJlc3MgdGhlIHJlc3BvbnNlJ3MgYnl0ZSBzdHJlYW0/Ci8vLwovLy8gVGhpcyBlbnVtIGlzIGFjY2Vzc2VkIHZpYSB0aGUgW0h0dHBDbGllbnRSZXNwb25zZS5jb21wcmVzc2lvblN0YXRlXSB2YWx1ZS4KQFNpbmNlKCIyLjQiKQplbnVtIEh0dHBDbGllbnRSZXNwb25zZUNvbXByZXNzaW9uU3RhdGUgewogIC8vLyBUaGUgYm9keSBvZiB0aGUgSFRUUCByZXNwb25zZSB3YXMgcmVjZWl2ZWQgYW5kIHJlbWFpbnMgaW4gYW4gdW5jb21wcmVzc2VkCiAgLy8vIHN0YXRlLgogIC8vLwogIC8vLyBJbiB0aGlzIHN0YXRlLCB0aGUgdmFsdWUgb2YgdGhlIGBDb250ZW50LUxlbmd0aGAgSFRUUCBoZWFkZXIsIGlmCiAgLy8vIHNwZWNpZmllZCAobm9uLW5lZ2F0aXZlKSwgc2hvdWxkIG1hdGNoIHRoZSBudW1iZXIgb2YgYnl0ZXMgcHJvZHVjZWQgYnkKICAvLy8gdGhlIHJlc3BvbnNlJ3MgYnl0ZSBzdHJlYW0uCiAgbm90Q29tcHJlc3NlZCwKCiAgLy8vIFRoZSBib2R5IG9mIHRoZSBIVFRQIHJlc3BvbnNlIHdhcyBvcmlnaW5hbGx5IGNvbXByZXNzZWQsIGJ1dCBieSB2aXJ0dWUgb2YKICAvLy8gdGhlIFtIdHRwQ2xpZW50LmF1dG9VbmNvbXByZXNzXSBjb25maWd1cmF0aW9uIG9wdGlvbiwgaXQgaGFzIGJlZW4KICAvLy8gYXV0b21hdGljYWxseSB1bmNvbXByZXNzZWQuCiAgLy8vCiAgLy8vIEhUVFAgaGVhZGVycyBhcmUgbm90IG1vZGlmaWVkLCBzbyB3aGVuIGEgcmVzcG9uc2UgaGFzIGJlZW4gdW5jb21wcmVzc2VkCiAgLy8vIGluIHRoaXMgd2F5LCB0aGUgdmFsdWUgb2YgdGhlIGBDb250ZW50LUxlbmd0aGAgSFRUUCBoZWFkZXIgY2Fubm90IGJlCiAgLy8vIHRydXN0ZWQsIGFzIGl0IHdpbGwgY29udGFpbiB0aGUgY29tcHJlc3NlZCBjb250ZW50IGxlbmd0aCwgd2hlcmVhcyB0aGUKICAvLy8gc3RyZWFtIG9mIGJ5dGVzIHByb2R1Y2VkIGJ5IHRoZSByZXNwb25zZSB3aWxsIGNvbnRhaW4gdW5jb21wcmVzc2VkIGJ5dGVzLgogIGRlY29tcHJlc3NlZCwKCiAgLy8vIFRoZSBib2R5IG9mIHRoZSBIVFRQIHJlc3BvbnNlIGNvbnRhaW5zIGNvbXByZXNzZWQgYnl0ZXMuCiAgLy8vCiAgLy8vIEluIHRoaXMgc3RhdGUsIHRoZSB2YWx1ZSBvZiB0aGUgYENvbnRlbnQtTGVuZ3RoYCBIVFRQIGhlYWRlciwgaWYKICAvLy8gc3BlY2lmaWVkIChub24tbmVnYXRpdmUpLCBzaG91bGQgbWF0Y2ggdGhlIG51bWJlciBvZiBieXRlcyBwcm9kdWNlZCBieQogIC8vLyB0aGUgcmVzcG9uc2UncyBieXRlIHN0cmVhbS4KICAvLy8KICAvLy8gSWYgdGhlIGNhbGxlciB3aXNoZXMgdG8gbWFudWFsbHkgdW5jb21wcmVzcyB0aGUgYm9keSBvZiB0aGUgcmVzcG9uc2UsCiAgLy8vIGl0IHNob3VsZCBjb25zdWx0IHRoZSB2YWx1ZSBvZiB0aGUgYENvbnRlbnQtRW5jb2RpbmdgIEhUVFAgaGVhZGVyIHRvIHNlZQogIC8vLyB3aGF0IHR5cGUgb2YgY29tcHJlc3Npb24gaGFzIGJlZW4gYXBwbGllZC4gU2VlCiAgLy8vIDxodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjYxNiNzZWN0aW9uLTE0LjExPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICBjb21wcmVzc2VkLAp9CgphYnN0cmFjdCBjbGFzcyBIdHRwQ2xpZW50Q3JlZGVudGlhbHMge30KCi8qKgogKiBSZXByZXNlbnRzIGNyZWRlbnRpYWxzIGZvciBiYXNpYyBhdXRoZW50aWNhdGlvbi4KICovCmFic3RyYWN0IGNsYXNzIEh0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzIGV4dGVuZHMgSHR0cENsaWVudENyZWRlbnRpYWxzIHsKICBmYWN0b3J5IEh0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzKFN0cmluZyB1c2VybmFtZSwgU3RyaW5nIHBhc3N3b3JkKSA9PgogICAgICBuZXcgX0h0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzKHVzZXJuYW1lLCBwYXNzd29yZCk7Cn0KCi8qKgogKiBSZXByZXNlbnRzIGNyZWRlbnRpYWxzIGZvciBkaWdlc3QgYXV0aGVudGljYXRpb24uIERpZ2VzdAogKiBhdXRoZW50aWNhdGlvbiBpcyBvbmx5IHN1cHBvcnRlZCBmb3Igc2VydmVycyB1c2luZyB0aGUgTUQ1CiAqIGFsZ29yaXRobSBhbmQgcXVhbGl0eSBvZiBwcm90ZWN0aW9uIChxb3ApIG9mIGVpdGhlciAibm9uZSIgb3IKICogImF1dGgiLgogKi8KYWJzdHJhY3QgY2xhc3MgSHR0cENsaWVudERpZ2VzdENyZWRlbnRpYWxzIGV4dGVuZHMgSHR0cENsaWVudENyZWRlbnRpYWxzIHsKICBmYWN0b3J5IEh0dHBDbGllbnREaWdlc3RDcmVkZW50aWFscyhTdHJpbmcgdXNlcm5hbWUsIFN0cmluZyBwYXNzd29yZCkgPT4KICAgICAgbmV3IF9IdHRwQ2xpZW50RGlnZXN0Q3JlZGVudGlhbHModXNlcm5hbWUsIHBhc3N3b3JkKTsKfQoKLyoqCiAqIEluZm9ybWF0aW9uIGFib3V0IGFuIFtIdHRwUmVxdWVzdF0sIFtIdHRwUmVzcG9uc2VdLCBbSHR0cENsaWVudFJlcXVlc3RdLCBvcgogKiBbSHR0cENsaWVudFJlc3BvbnNlXSBjb25uZWN0aW9uLgogKi8KYWJzdHJhY3QgY2xhc3MgSHR0cENvbm5lY3Rpb25JbmZvIHsKICBJbnRlcm5ldEFkZHJlc3MgZ2V0IHJlbW90ZUFkZHJlc3M7CiAgaW50IGdldCByZW1vdGVQb3J0OwogIGludCBnZXQgbG9jYWxQb3J0Owp9CgovKioKICogUmVkaXJlY3QgaW5mb3JtYXRpb24uCiAqLwphYnN0cmFjdCBjbGFzcyBSZWRpcmVjdEluZm8gewogIC8qKgogICAqIFJldHVybnMgdGhlIHN0YXR1cyBjb2RlIHVzZWQgZm9yIHRoZSByZWRpcmVjdC4KICAgKi8KICBpbnQgZ2V0IHN0YXR1c0NvZGU7CgogIC8qKgogICAqIFJldHVybnMgdGhlIG1ldGhvZCB1c2VkIGZvciB0aGUgcmVkaXJlY3QuCiAgICovCiAgU3RyaW5nIGdldCBtZXRob2Q7CgogIC8qKgogICAqIFJldHVybnMgdGhlIGxvY2F0aW9uIGZvciB0aGUgcmVkaXJlY3QuCiAgICovCiAgVXJpIGdldCBsb2NhdGlvbjsKfQoKLyoqCiAqIFdoZW4gZGV0YWNoaW5nIGEgc29ja2V0IGZyb20gZWl0aGVyIHRoZSBbOkh0dHBTZXJ2ZXI6XSBvciB0aGUKICogWzpIdHRwQ2xpZW50Ol0gZHVlIHRvIGEgSFRUUCBjb25uZWN0aW9uIHVwZ3JhZGUgdGhlcmUgbWlnaHQgYmUKICogdW5wYXJzZWQgZGF0YSBhbHJlYWR5IHJlYWQgZnJvbSB0aGUgc29ja2V0LiBUaGlzIHVucGFyc2VkIGRhdGEKICogdG9nZXRoZXIgd2l0aCB0aGUgZGV0YWNoZWQgc29ja2V0IGlzIHJldHVybmVkIGluIGFuIGluc3RhbmNlIG9mCiAqIHRoaXMgY2xhc3MuCiAqLwphYnN0cmFjdCBjbGFzcyBEZXRhY2hlZFNvY2tldCB7CiAgU29ja2V0IGdldCBzb2NrZXQ7CiAgTGlzdDxpbnQ+IGdldCB1bnBhcnNlZERhdGE7Cn0KCmNsYXNzIEh0dHBFeGNlcHRpb24gaW1wbGVtZW50cyBJT0V4Y2VwdGlvbiB7CiAgZmluYWwgU3RyaW5nIG1lc3NhZ2U7CiAgZmluYWwgVXJpIHVyaTsKCiAgY29uc3QgSHR0cEV4Y2VwdGlvbih0aGlzLm1lc3NhZ2UsIHt0aGlzLnVyaX0pOwoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICB2YXIgYiA9IG5ldyBTdHJpbmdCdWZmZXIoKS4ud3JpdGUoJ0h0dHBFeGNlcHRpb246ICcpLi53cml0ZShtZXNzYWdlKTsKICAgIGlmICh1cmkgIT0gbnVsbCkgewogICAgICBiLndyaXRlKCcsIHVyaSA9ICR1cmknKTsKICAgIH0KICAgIHJldHVybiBiLnRvU3RyaW5nKCk7CiAgfQp9CgpjbGFz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bGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll9odHRwOwoKaW50IF9uZXh0U2VydmljZUlkID0gMTsKCi8vIFRPRE8oYWpvaG5zZW4pOiBVc2Ugb3RoZXIgd2F5IG9mIGdldHRpbmcgYSB1bmlxdWUgaWQuCmFic3RyYWN0IGNsYXNzIF9TZXJ2aWNlT2JqZWN0IHsKICBpbnQgX19zZXJ2aWNlSWQgPSAwOwogIGludCBnZXQgX3NlcnZpY2VJZCB7CiAgICBpZiAoX19zZXJ2aWNlSWQgPT0gMCkgX19zZXJ2aWNlSWQgPSBfbmV4dFNlcnZpY2VJZCsrOwogICAgcmV0dXJuIF9fc2VydmljZUlkOwogIH0KCiAgTWFwIF90b0pTT04oYm9vbCByZWYpOwoKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlUGF0aCA9PiAiJF9zZXJ2aWNlVHlwZVBhdGgvJF9zZXJ2aWNlSWQiOwoKICBTdHJpbmcgZ2V0IF9zZXJ2aWNlVHlwZVBhdGg7CgogIFN0cmluZyBnZXQgX3NlcnZpY2VUeXBlTmFtZTsKCiAgU3RyaW5nIF9zZXJ2aWNlVHlwZShib29sIHJlZikgewogICAgaWYgKHJlZikgcmV0dXJuICJAJF9zZXJ2aWNlVHlwZU5hbWUiOwogICAgcmV0dXJuIF9zZXJ2aWNlVHlwZU5hbWU7CiAgfQp9CgpjbGFzcyBfQ29weWluZ0J5dGVzQnVpbGRlciBpbXBsZW1lbnRzIEJ5dGVzQnVpbGRlciB7CiAgLy8gU3RhcnQgd2l0aCAxMDI0IGJ5dGVzLgogIHN0YXRpYyBjb25zdCBpbnQgX0lOSVRfU0laRSA9IDEwMjQ7CgogIHN0YXRpYyBmaW5hbCBfZW1wdHlMaXN0ID0gbmV3IFVpbnQ4TGlzdCgwKTsKCiAgaW50IF9sZW5ndGggPSAwOwogIFVpbnQ4TGlzdCBfYnVmZmVyOwoKICBfQ29weWluZ0J5dGVzQnVpbGRlcihbaW50IGluaXRpYWxDYXBhY2l0eSA9IDBdKQogICAgICA6IF9idWZmZXIgPSAoaW5pdGlhbENhcGFjaXR5IDw9IDApCiAgICAgICAgICAgID8gX2VtcHR5TGlzdAogICAgICAgICAgICA6IG5ldyBVaW50OExpc3QoX3BvdzJyb3VuZHVwKGluaXRpYWxDYXBhY2l0eSkpOwoKICB2b2lkIGFkZChMaXN0PGludD4gYnl0ZXMpIHsKICAgIGludCBieXRlc0xlbmd0aCA9IGJ5dGVzLmxlbmd0aDsKICAgIGlmIChieXRlc0xlbmd0aCA9PSAwKSByZXR1cm47CiAgICBpbnQgcmVxdWlyZWQgPSBfbGVuZ3RoICsgYnl0ZXNMZW5ndGg7CiAgICBpZiAoX2J1ZmZlci5sZW5ndGggPCByZXF1aXJlZCkgewogICAgICBfZ3JvdyhyZXF1aXJlZCk7CiAgICB9CiAgICBhc3NlcnQoX2J1ZmZlci5sZW5ndGggPj0gcmVxdWlyZWQpOwogICAgaWYgKGJ5dGVzIGlzIFVpbnQ4TGlzdCkgewogICAgICBfYnVmZmVyLnNldFJhbmdlKF9sZW5ndGgsIHJlcXVpcmVkLCBieXRlcyk7CiAgICB9IGVsc2UgewogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJ5dGVzTGVuZ3RoOyBpKyspIHsKICAgICAgICBfYnVmZmVyW19sZW5ndGggKyBpXSA9IGJ5dGVzW2ldOwogICAgICB9CiAgICB9CiAgICBfbGVuZ3RoID0gcmVxdWlyZWQ7CiAgfQoKICB2b2lkIGFkZEJ5dGUoaW50IGJ5dGUpIHsKICAgIGlmIChfYnVmZmVyLmxlbmd0aCA9PSBfbGVuZ3RoKSB7CiAgICAgIC8vIFRoZSBncm93IGFsZ29yaXRobSBhbHdheXMgYXQgbGVhc3QgZG91Ymxlcy4KICAgICAgLy8gSWYgd2UgYWRkZWQgb25lIHRvIF9sZW5ndGggaXQgd291bGQgcXVhZHJ1cGxlIHVubmVjZXNzYXJpbHkuCiAgICAgIF9ncm93KF9sZW5ndGgpOwogICAgfQogICAgYXNzZXJ0KF9idWZmZXIubGVuZ3RoID4gX2xlbmd0aCk7CiAgICBfYnVmZmVyW19sZW5ndGhdID0gYnl0ZTsKICAgIF9sZW5ndGgrKzsKICB9CgogIHZvaWQgX2dyb3coaW50IHJlcXVpcmVkKSB7CiAgICAvLyBXZSB3aWxsIGNyZWF0ZSBhIGxpc3QgaW4gdGhlIHJhbmdlIG9mIDItNCB0aW1lcyBsYXJnZXIgdGhhbgogICAgLy8gcmVxdWlyZWQuCiAgICBpbnQgbmV3U2l6ZSA9IHJlcXVpcmVkICogMjsKICAgIGlmIChuZXdTaXplIDwgX0lOSVRfU0laRSkgewogICAgICBuZXdTaXplID0gX0lOSVRfU0laRTsKICAgIH0gZWxzZSB7CiAgICAgIG5ld1NpemUgPSBfcG93MnJvdW5kdXAobmV3U2l6ZSk7CiAgICB9CiAgICB2YXIgbmV3QnVmZmVyID0gbmV3IFVpbnQ4TGlzdChuZXdTaXplKTsKICAgIG5ld0J1ZmZlci5zZXRSYW5nZSgwLCBfYnVmZmVyLmxlbmd0aCwgX2J1ZmZlcik7CiAgICBfYnVmZmVyID0gbmV3QnVmZmVyOwogIH0KCiAgVWludDhMaXN0IHRha2VCeXRlcygpIHsKICAgIGlmIChfbGVuZ3RoID09IDApIHJldHVybiBfZW1wdHlMaXN0OwogICAgdmFyIGJ1ZmZlciA9IG5ldyBVaW50OExpc3QudmlldyhfYnVmZmVyLmJ1ZmZlciwgMCwgX2xlbmd0aCk7CiAgICBjbGVhcigpOwogICAgcmV0dXJuIGJ1ZmZlcjsKICB9CgogIFVpbnQ4TGlzdCB0b0J5dGVzKCkgewogICAgaWYgKF9sZW5ndGggPT0gMCkgcmV0dXJuIF9lbXB0eUxpc3Q7CiAgICByZXR1cm4gbmV3IFVpbnQ4TGlzdC5mcm9tTGlzdCgKICAgICAgICBuZXcgVWludDhMaXN0LnZpZXcoX2J1ZmZlci5idWZmZXIsIDAsIF9sZW5ndGgpKTsKICB9CgogIGludCBnZXQgbGVuZ3RoID0+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+IG5ldyBfRGV0YWNoZWRTb2NrZXQoX3NvY2tldCwgX2h0dHBQYXJzZXIuZGV0YWNoSW5jb21pbmcoKSkpOwogIH0KCiAgdm9pZCBkZXN0cm95KCkgewogICAgY2xvc2VkID0gdHJ1ZTsKICAgIF9odHRwQ2xpZW50Ll9jb25uZWN0aW9uQ2xvc2VkKHRoaXMpOwogICAgX3NvY2tldC5kZXN0cm95KCk7CiAgfQoKICB2b2lkIGNsb3NlKCkgewogICAgY2xvc2VkID0gdHJ1ZTsKICAgIF9odHRwQ2xpZW50Ll9jb25uZWN0aW9uQ2xvc2VkKHRoaXMpOwogICAgX3N0cmVhbUZ1dHVyZQogICAgICAgIC50aW1lb3V0KF9odHRwQ2xpZW50LmlkbGVUaW1lb3V0KQogICAgICAgIC50aGVuKChfKSA9PiBfc29ja2V0LmRlc3Ryb3koKSk7CiAgfQoKICBGdXR1cmU8X0h0dHBDbGllbnRDb25uZWN0aW9uPiBjcmVhdGVQcm94eVR1bm5lbChTdHJpbmcgaG9zdCwgaW50IHBvcnQsCiAgICAgIF9Qcm94eSBwcm94eSwgYm9vbCBjYWxsYmFjayhYNTA5Q2VydGlmaWNhdGUgY2VydGlmaWNhdGUpKSB7CiAgICBfSHR0cENsaWVudFJlcXVlc3QgcmVxdWVzdCA9CiAgICAgICAgc2VuZChuZXcgVXJpKGhvc3Q6IGhvc3QsIHBvcnQ6IHBvcnQpLCBwb3J0LCAiQ09OTkVDVCIsIHByb3h5KTsKICAgIGlmIChwcm94eS5pc0F1dGhlbnRpY2F0ZWQpIHsKICAgICAgLy8gSWYgdGhlIHByb3h5IGNvbmZpZ3VyYXRpb24gY29udGFpbnMgdXNlciBpbmZvcm1hdGlvbiB1c2UgdGhhdAogICAgICAvLyBmb3IgcHJveHkgYmFzaWMgYXV0aG9yaXphdGlvbi4KICAgICAgU3RyaW5nIGF1dGggPSBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0Jhc2U2NCgKICAgICAgICAgIHV0ZjguZW5jb2RlKCIke3Byb3h5LnVzZXJuYW1lfToke3Byb3h5LnBhc3N3b3JkfSIpKTsKICAgICAgcmVxdWVzdC5oZWFkZXJzLnNldChIdHRwSGVhZGVycy5wcm94eUF1dGhvcml6YXRpb25IZWFkZXIsICJCYXNpYyAkYXV0aCIpOwogICAgfQogICAgcmV0dXJuIHJlcXVlc3QuY2xvc2UoKS50aGVuKChyZXNwb25zZSkgewogICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzQ29kZSAhPSBIdHRwU3RhdHVzLm9rKSB7CiAgICAgICAgdGhyb3cgIlByb3h5IGZhaWxlZCB0byBlc3RhYmxpc2ggdHVubmVsICIKICAgICAgICAgICAgIigke3Jlc3BvbnNlLnN0YXR1c0NvZGV9ICR7cmVzcG9uc2UucmVhc29uUGhyYXNlfSkiOwogICAgICB9CiAgICAgIHZhciBzb2NrZXQgPSAocmVzcG9uc2UgYXMgX0h0dHBDbGllbnRSZXNwb25zZSkKICAgICAgICAgIC5faHR0cFJlcXVlc3QKICAgICAgICAgIC5faHR0cENsaWVudENvbm5lY3Rpb24KICAgICAgICAgIC5fc29ja2V0OwogICAgICByZXR1cm4gU2VjdXJlU29ja2V0LnNlY3VyZShzb2NrZXQsCiAgICAgICAgICBob3N0OiBob3N0LCBjb250ZXh0OiBfY29udGV4dCwgb25CYWRDZXJ0aWZpY2F0ZTogY2FsbGJhY2spOwogICAgfSkudGhlbigoc2VjdXJlU29ja2V0KSB7CiAgICAgIFN0cmluZyBrZXkgPSBfSHR0cENsaWVudENvbm5lY3Rpb24ubWFrZUtleSh0cnVlLCBob3N0LCBwb3J0KTsKICAgICAgcmV0dXJuIG5ldyBfSHR0cENsaWVudENvbm5lY3Rpb24oCiAgICAgICAgICBrZXksIHNlY3VyZVNvY2tldCwgcmVxdWVzdC5faHR0cENsaWVudCwgdHJ1ZSk7CiAgICB9KTsKICB9CgogIEh0dHBDb25uZWN0aW9uSW5mbyBnZXQgY29ubmVjdGlvbkluZm8gPT4gX0h0dHBDb25uZWN0aW9uSW5mby5jcmVhdGUoX3NvY2tldCk7CgogIHN0YXRpYyBtYWtlS2V5KGJvb2wgaXNTZWN1cmUsIFN0cmluZyBob3N0LCBpbnQgcG9ydCkgewogICAgcmV0dXJuIGlzU2VjdXJlID8gInNzaDokaG9zdDokcG9ydCIgOiAiJGhvc3Q6JHBvcnQiOwogIH0KCiAgdm9pZCBzdG9wVGltZXIoKSB7CiAgICBpZiAoX2lkbGVUaW1lciAhPSBudWxsKSB7CiAgICAgIF9pZGxlVGltZXIuY2FuY2VsKCk7CiAgICAgIF9pZGxlVGltZXIgPSBudWxsOwogICAgfQogIH0KCiAgdm9pZCBzdGFydFRpbWVyKCkgewogICAgYXNzZXJ0KF9pZGxlVGltZXIgPT0gbnVsbCk7CiAgICBfaWRsZVRpbWVyID0gbmV3IFRpbWVyKF9odHRwQ2xpZW50LmlkbGVUaW1lb3V0LCAoKSB7CiAgICAgIF9pZGxlVGltZXIgPSBudWxsOwogICAgICBjbG9zZSgpOwogICAgfSk7CiAgfQp9CgpjbGFzcyBfQ29ubmVjdGlvbkluZm8gewogIGZpbmFsIF9IdHRwQ2xpZW50Q29ubmVjdGlvbiBjb25uZWN0aW9uOwogIGZpbmFsIF9Qcm94eSBwcm94eTsKCiAgX0Nvbm5lY3Rpb25JbmZvKHRoaXMuY29ubmVjdGlvbiwgdGhpcy5wcm94eSk7Cn0KCmNsYXNzIF9Db25uZWN0aW9uVGFyZ2V0IHsKICAvLyBVbmlxdWUga2V5IGZvciB0aGlzIGNvbm5lY3Rpb24gdGFyZ2V0LgogIGZpbmFsIFN0cmluZyBrZXk7CiAgZmluYWwgU3RyaW5nIGhvc3Q7CiAgZmluYWwgaW50IHBvcnQ7CiAgZmluYWwgYm9vbCBpc1NlY3VyZTsKICBmaW5hbCBTZWN1cml0eUNvbnRleHQgY29udGV4dDsKICBmaW5hbCBTZXQ8X0h0dHBDbGllbnRDb25uZWN0aW9uPiBfaWRsZSA9IG5ldyBIYXNoU2V0KCk7CiAgZmluYWwgU2V0PF9IdHRwQ2xpZW50Q29ubmVjdGlvbj4gX2FjdGl2ZSA9IG5ldyBIYXNoU2V0KCk7CiAgZmluYWwgU2V0PENvbm5lY3Rpb25UYXNrPiBfc29ja2V0VGFza3MgPSBuZXcgSGFzaFNldCgpOwogIGZpbmFsIFF1ZXVlIF9wZW5kaW5nID0gbmV3IExpc3RRdWV1ZSgpOwogIGludCBfY29ubmVjdGluZyA9IDA7CgogIF9Db25uZWN0aW9uVGFyZ2V0KAogICAgICB0aGlzLmtleSwgdGhpcy5ob3N0LCB0aGlzLnBvcnQsIHRoaXMuaXNTZWN1cmUsIHRoaXMuY29udGV4dCk7CgogIGJvb2wgZ2V0IGlzRW1wdHkgPT4gX2lkbGUuaXNFbXB0eSAmJiBfYWN0aXZlLmlzRW1wdHkgJiYgX2Nvbm5lY3RpbmcgPT0gMDsKCiAgYm9vbCBnZXQgaGFzSWRsZSA9PiBfaWRsZS5pc05vdEVtcHR5OwoKICBib29sIGdldCBoYXNBY3RpdmUgPT4gX2FjdGl2ZS5pc05vdEVtcHR5IHx8IF9jb25uZWN0aW5nID4gMDsKCiAgX0h0dHBDbGllbnRDb25uZWN0aW9uIHRha2VJZGxlKCkgewogICAgYXNzZXJ0KGhhc0lkbGUpOwogICAgX0h0dHBDbGllbnRDb25uZWN0aW9uIGNvbm5lY3Rpb24gPSBfaWRsZS5maXJzdDsKICAgIF9pZGxlLnJlbW92ZShjb25uZWN0aW9uKTsKICAgIGNvbm5lY3Rpb24uc3RvcFRpbWVyKCk7CiAgICBfYWN0aXZlLmFkZChjb25uZWN0aW9uKTsKICAgIHJldHVybiBjb25uZWN0aW9uOwogIH0KCiAgX2NoZWNrUGVuZGluZygpIHsKICAgIGlmIChfcGVuZGluZy5pc05vdEVtcHR5KSB7CiAgICAgIF9wZW5kaW5nLnJlbW92ZUZpcnN0KCkoKTsKICAgIH0KICB9CgogIHZvaWQgYWRkTmV3QWN0aXZlKF9IdHRwQ2xpZW50Q29ubmVjdGlvbiBjb25uZWN0aW9uKSB7CiAgICBfYWN0aXZlLmFkZChjb25uZWN0aW9uKTsKICB9CgogIHZvaWQgcmV0dXJuQ29ubmVjdGlvbihfSHR0cENsaWVudENvbm5lY3Rpb24gY29ubmVjdGlvbikgewogICAgYXNzZXJ0KF9hY3RpdmUuY29udGFpbnMoY29ubmVjdGlvbikpOwogICAgX2FjdGl2ZS5yZW1vdmUoY29ubmVjdGlvbik7CiAgICBfaWRsZS5hZGQoY29ubmVjdGlvbik7CiAgICBjb25uZWN0aW9uLnN0YXJ0VGltZXIoKTsKICAgIF9jaGVja1BlbmRpbmcoKTsKICB9CgogIHZvaWQgY29ubmVjdGlvbkNsb3NlZChfSHR0cENsaWVudENvbm5lY3Rpb24gY29ubmVjdGlvbikgewogICAgYXNzZXJ0KCFfYWN0aXZlLmNvbnRhaW5zKGNvbm5lY3Rpb24pIHx8ICFfaWRsZS5jb250YWlucyhjb25uZWN0aW9uKSk7CiAgICBfYWN0aXZlLnJlbW92ZShjb25uZWN0aW9uKTsKICAgIF9pZGxlLnJlbW92ZShjb25uZWN0aW9uKTsKICAgIF9jaGVja1BlbmRpbmcoKTsKICB9CgogIHZvaWQgY2xvc2UoYm9vbCBmb3JjZSkgewogICAgLy8gQWx3YXlzIGNhbmNlbCBwZW5kaW5nIHNvY2tldCBjb25uZWN0aW9ucy4KICAgIGZvciAodmFyIHQgaW4gX3NvY2tldFRhc2tzLnRvTGlzdCgpKSB7CiAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgc29ja2V0IGlzIGRlc3Ryb3llZCBpZiB0aGUgQ29ubmVjdGlvblRhc2sgaXMgY2FuY2VsbGVkLgogICAgICB0LnNvY2tldC50aGVuKChzKSB7CiAgICAgICAgcy5kZXN0cm95KCk7CiAgICAgIH0sIG9uRXJyb3I6IChlKSB7fSk7CiAgICAgIHQuY2FuY2VsKCk7CiAgICB9CiAgICBpZiAoZm9yY2UpIHsKICAgICAgZm9yICh2YXIgYyBpbiBfaWRsZS50b0xpc3QoKSkgewogICAgICAgIGMuZGVzdHJveSgpOwogICAgICB9CiAgICAgIGZvciAodmFyIGMgaW4gX2FjdGl2ZS50b0xpc3QoKSkgewogICAgICAgIGMuZGVzdHJveSgpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBmb3IgKHZhciBjIGluIF9pZGxlLnRvTGlzdCgpKSB7CiAgICAgICAgYy5jbG9zZSgpOwogICAgICB9CiAgICB9CiAgfQoKICBGdXR1cmU8X0Nvbm5lY3Rpb25JbmZvPiBjb25uZWN0KAogICAgICBTdHJpbmcgdXJpSG9zdCwgaW50IHVyaVBvcnQsIF9Qcm94eSBwcm94eSwgX0h0dHBDbGllbnQgY2xpZW50KSB7CiAgICBpZiAoaGFzSWRsZSkgewogICAgICB2YXIgY29ubmVjdGlvbiA9IHRha2VJZGxlKCk7CiAgICAgIGNsaWVudC5fY29ubmVjdGlvbnNDaGFuZ2VkKCk7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlLnZhbHVlKG5ldyBfQ29ubmVjdGlvbkluZm8oY29ubmVjdGlvbiwgcHJveHkpKTsKICAgIH0KICAgIGlmIChjbGllbnQubWF4Q29ubmVjdGlvbnNQZXJIb3N0ICE9IG51bGwgJiYKICAgICAgICBfYWN0aXZlLmxlbmd0aCArIF9jb25uZWN0aW5nID49IGNsaWVudC5tYXhDb25uZWN0aW9uc1Blckhvc3QpIHsKICAgICAgdmFyIGNvbXBsZXRlciA9IG5ldyBDb21wbGV0ZXI8X0Nvbm5lY3Rpb25JbmZvPigpOwogICAgICBfcGVuZGluZy5hZGQoKCkgewogICAgICAgIGNvbXBsZXRlci5jb21wbGV0ZShjb25uZWN0KHVyaUhvc3QsIHVyaVBvcnQsIHByb3h5LCBjbGllbnQpKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBjb21wbGV0ZXIuZnV0dXJlOwogICAgfQogICAgdmFyIGN1cnJlbnRCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrID0gY2xpZW50Ll9iYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrOwoKICAgIGJvb2wgY2FsbGJhY2soWDUwOUNlcnRpZmljYXRlIGNlcnRpZmljYXRlKSB7CiAgICAgIGlmIChjdXJyZW50QmFkQ2VydGlmaWNhdGVDYWxsYmFjayA9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiBjdXJyZW50QmFkQ2VydGlmaWNhdGVDYWxsYmFjayhjZXJ0aWZpY2F0ZSwgdXJpSG9zdCwgdXJpUG9ydCk7CiAgICB9CgogICAgRnV0dXJlPENvbm5lY3Rpb25UYXNrPiBjb25uZWN0aW9uVGFzayA9IChpc1NlY3VyZSAmJiBwcm94eS5pc0RpcmVjdAogICAgICAgID8gU2VjdXJlU29ja2V0LnN0YXJ0Q29ubmVjdChob3N0LCBwb3J0LAogICAgICAgICAgICBjb250ZXh0OiBjb250ZXh0LCBvbkJhZENlcnRpZmljYXRlOiBjYWxsYmFjaykKICAgICAgICA6IFNvY2tldC5zdGFydENvbm5lY3QoaG9zdCwgcG9ydCkpOwogICAgX2Nvbm5lY3RpbmcrKzsKICAgIHJldHVybiBjb25uZWN0aW9uVGFzay50aGVuKChDb25uZWN0aW9uVGFzayB0YXNrKSB7CiAgICAgIF9zb2NrZXRUYXNrcy5hZGQodGFzayk7CiAgICAgIEZ1dHVyZSBzb2NrZXRGdXR1cmUgPSB0YXNrLnNvY2tldDsKICAgICAgaWYgKGNsaWVudC5jb25uZWN0aW9uVGltZW91dCAhPSBudWxsKSB7CiAgICAgICAgc29ja2V0RnV0dXJlID0KICAgICAgICAgICAgc29ja2V0RnV0dXJlLnRpbWVvdXQoY2xpZW50LmNvbm5lY3Rpb25UaW1lb3V0LCBvblRpbWVvdXQ6ICgpIHsKICAgICAgICAgIF9zb2NrZXRUYXNrcy5yZW1vdmUodGFzayk7CiAgICAgICAgICB0YXNrLmNhbmNlbCgpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBzb2NrZXRGdXR1cmUudGhlbigoc29ja2V0KSB7CiAgICAgICAgX2Nvbm5lY3RpbmctLTsKICAgICAgICBzb2NrZXQuc2V0T3B0aW9uKFNvY2tldE9wdGlvbi50Y3BOb0RlbGF5LCB0cnVlKTsKICAgICAgICB2YXIgY29ubmVjdGlvbiA9CiAgICAgICAgICAgIG5ldyBfSHR0cENsaWVudENvbm5lY3Rpb24oa2V5LCBzb2NrZXQsIGNsaWVudCwgZmFsc2UsIGNvbnRleHQpOwogICAgICAgIGlmIChpc1NlY3VyZSAmJiAhcHJveHkuaXNEaXJlY3QpIHsKICAgICAgICAgIGNvbm5lY3Rpb24uX2Rpc3Bvc2UgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24KICAgICAgICAgICAgICAuY3JlYXRlUHJveHlUdW5uZWwodXJpSG9zdCwgdXJpUG9ydCwgcHJveHksIGNhbGxiYWNrKQogICAgICAgICAgICAgIC50aGVuKCh0dW5uZWwpIHsKICAgICAgICAgICAgY2xpZW50CiAgICAgICAgICAgICAgICAuX2dldENvbm5lY3Rpb25UYXJnZXQodXJpSG9zdCwgdXJpUG9ydCwgdHJ1ZSkKICAgICAgICAgICAgICAgIC5hZGROZXdBY3RpdmUodHVubmVsKTsKICAgICAgICAgICAgX3NvY2tldFRhc2tzLnJlbW92ZSh0YXNrKTsKICAgICAgICAgICAgcmV0dXJuIG5ldyBfQ29ubmVjdGlvbkluZm8odHVubmVsLCBwcm94eSk7CiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYWRkTmV3QWN0aXZlKGNvbm5lY3Rpb24pOwogICAgICAgICAgX3NvY2tldFRhc2tzLnJlbW92ZSh0YXNrKTsKICAgICAgICAgIHJldHVybiBuZXcgX0Nvbm5lY3Rpb25JbmZvKGNvbm5lY3Rpb24sIHByb3h5KTsKICAgICAgICB9CiAgICAgIH0sIG9uRXJyb3I6IChlcnJvcikgewogICAgICAgIF9jb25uZWN0aW5nLS07CiAgICAgICAgX3NvY2tldFRhc2tzLnJlbW92ZSh0YXNrKTsKICAgICAgICBfY2hlY2tQZW5kaW5nKCk7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0pOwogICAgfSk7CiAgfQp9Cgp0eXBlZGVmIGJvb2wgQmFkQ2VydGlmaWNhdGVDYWxsYmFjayhYNTA5Q2VydGlmaWNhdGUgY3IsIFN0cmluZyBob3N0LCBpbnQgcG9ydCk7CgpjbGFzcyBfSHR0cENsaWVudCBpbXBsZW1lbnRzIEh0dHBDbGllbnQgewogIGJvb2wgX2Nsb3NpbmcgPSBmYWxzZTsKICBib29sIF9jbG9zaW5nRm9yY2VmdWxseSA9IGZhbHNlOwogIGZpbmFsIE1hcDxTdHJpbmcsIF9Db25uZWN0aW9uVGFyZ2V0PiBfY29ubmVjdGlvblRhcmdldHMgPQogICAgICBuZXcgSGFzaE1hcDxTdHJpbmcsIF9Db25uZWN0aW9uVGFyZ2V0PigpOwogIGZpbmFsIExpc3Q8X0NyZWRlbnRpYWxzPiBfY3JlZGVudGlhbHMgPSBbXTsKICBmaW5hbCBMaXN0PF9Qcm94eUNyZWRlbnRpYWxzPiBfcHJveHlDcmVkZW50aWFscyA9IFtdOwogIGZpbmFsIFNlY3VyaXR5Q29udGV4dCBfY29udGV4dDsKICBGdW5jdGlvbiBfYXV0aGVudGljYXRlOwogIEZ1bmN0aW9uIF9hdXRoZW50aWNhdGVQcm94eTsKICBGdW5jdGlvbiBfZmluZFByb3h5ID0gSHR0cENsaWVudC5maW5kUHJveHlGcm9tRW52aXJvbm1lbnQ7CiAgRHVyYXRpb24gX2lkbGVUaW1lb3V0ID0gY29uc3QgRHVyYXRpb24oc2Vjb25kczogMTUpOwogIEJhZENlcnRpZmljYXRlQ2FsbGJhY2sgX2JhZENlcnRpZmljYXRlQ2FsbGJhY2s7CgogIER1cmF0aW9uIGdldCBpZGxlVGltZW91dCA9PiBfaWRsZVRpbWVvdXQ7CgogIER1cmF0aW9uIGNvbm5lY3Rpb25UaW1lb3V0OwoKICBpbnQgbWF4Q29ubmVjdGlvbnNQZXJIb3N0OwoKICBib29sIGF1dG9VbmNvbXByZXNzID0gdHJ1ZTsKCiAgU3RyaW5nIHVzZXJBZ2VudCA9IF9nZXRIdHRwVmVyc2lvbigpOwoKICBfSHR0cENsaWVudCh0aGlzLl9jb250ZXh0KTsKCiAgdm9pZCBzZXQgaWRsZVRpbWVvdXQoRHVyYXRpb24gdGltZW91dCkgewogICAgX2lkbGVUaW1lb3V0ID0gdGltZW91dDsKICAgIGZvciAodmFyIGMgaW4gX2Nvbm5lY3Rpb25UYXJnZXRzLnZhbHVlcykgewogICAgICBmb3IgKHZhciBpZGxlIGluIGMuX2lkbGUpIHsKICAgICAgICAvLyBSZXNldCB0aW1lci4gVGhpcyBpcyBmaW5lLCBhcyBpdCdzIG5vdCBoYXBwZW5pbmcgb2Z0ZW4uCiAgICAgICAgaWRsZS5zdG9wVGltZXIoKTsKICAgICAgICBpZGxlLnN0YXJ0VGltZXIoKTsKICAgICAgfQogICAgfQogIH0KCiAgc2V0IGJhZENlcnRpZmljYXRlQ2FsbGJhY2soCiAgICAgIGJvb2wgY2FsbGJhY2soWDUwOUNlcnRpZmljYXRlIGNlcnQsIFN0cmluZyBob3N0LCBpbnQgcG9ydCkpIHsKICAgIF9iYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrID0gY2FsbGJhY2s7CiAgfQoKICBGdXR1cmU8SHR0cENsaWVudFJlcXVlc3Q+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+IF9BdXRoZW50aWNhdGlvblNjaGVtZS5ESUdFU1Q7CgogIFN0cmluZyBhdXRob3JpemF0aW9uKF9DcmVkZW50aWFscyBjcmVkZW50aWFscywgX0h0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QpIHsKICAgIFN0cmluZyByZXF1ZXN0VXJpID0gcmVxdWVzdC5fcmVxdWVzdFVyaSgpOwogICAgX01ENSBoYXNoZXIgPSBuZXcgX01ENSgpCiAgICAgIC4uYWRkKHJlcXVlc3QubWV0aG9kLmNvZGVVbml0cykKICAgICAgLi5hZGQoW19DaGFyQ29kZS5DT0xPTl0pCiAgICAgIC4uYWRkKHJlcXVlc3RVcmkuY29kZVVuaXRzKTsKICAgIHZhciBoYTIgPSBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0hleChoYXNoZXIuY2xvc2UoKSk7CgogICAgU3RyaW5nIHFvcDsKICAgIFN0cmluZyBjbm9uY2U7CiAgICBTdHJpbmcgbmM7CiAgICB2YXIgeDsKICAgIGhhc2hlciA9IG5ldyBfTUQ1KCkuLmFkZChjcmVkZW50aWFscy5oYTEuY29kZVVuaXRzKS4uYWRkKFtfQ2hhckNvZGUuQ09MT05dKTsKICAgIGlmIChjcmVkZW50aWFscy5xb3AgPT0gImF1dGgiKSB7CiAgICAgIHFvcCA9IGNyZWRlbnRpYWxzLnFvcDsKICAgICAgY25vbmNlID0gX0NyeXB0b1V0aWxzLmJ5dGVzVG9IZXgoX0NyeXB0b1V0aWxzLmdldFJhbmRvbUJ5dGVzKDQpKTsKICAgICAgKytjcmVkZW50aWFscy5ub25jZUNvdW50OwogICAgICBuYyA9IGNyZWRlbnRpYWxzLm5vbmNlQ291bnQudG9SYWRpeFN0cmluZygxNik7CiAgICAgIG5jID0gIjAwMDAwMDAwIi5zdWJzdHJpbmcoMCwgOCAtIG5jLmxlbmd0aCArIDEpICsgbmM7CiAgICAgIGhhc2hlcgogICAgICAgIC4uYWRkKGNyZWRlbnRpYWxzLm5vbmNlLmNvZGVVbml0cykKICAgICAgICAuLmFkZChbX0NoYXJDb2RlLkNPTE9OXSkKICAgICAgICAuLmFkZChuYy5jb2RlVW5pdHMpCiAgICAgICAgLi5hZGQoW19DaGFyQ29kZS5DT0xPTl0pCiAgICAgICAgLi5hZGQoY25vbmNlLmNvZGVVbml0cykKICAgICAgICAuLmFkZChbX0NoYXJDb2RlLkNPTE9OXSkKICAgICAgICAuLmFkZChjcmVkZW50aWFscy5xb3AuY29kZVVuaXRzKQogICAgICAgIC4uYWRkKFtfQ2hhckNvZGUuQ09MT05dKQogICAgICAgIC4uYWRkKGhhMi5jb2RlVW5pdHMpOwogICAgfSBlbHNlIHsKICAgICAgaGFzaGVyCiAgICAgICAgLi5hZGQoY3JlZGVudGlhbHMubm9uY2UuY29kZVVuaXRzKQogICAgICAgIC4uYWRkKFtfQ2hhckNvZGUuQ09MT05dKQogICAgICAgIC4uYWRkKGhhMi5jb2RlVW5pdHMpOwogICAgfQogICAgdmFyIHJlc3BvbnNlID0gX0NyeXB0b1V0aWxzLmJ5dGVzVG9IZXgoaGFzaGVyLmNsb3NlKCkpOwoKICAgIFN0cmluZ0J1ZmZlciBidWZmZXIgPSBuZXcgU3RyaW5nQnVmZmVyKCkKICAgICAgLi53cml0ZSgnRGlnZXN0ICcpCiAgICAgIC4ud3JpdGUoJ3VzZXJuYW1lPSIkdXNlcm5hbWUiJykKICAgICAgLi53cml0ZSgnLCByZWFsbT0iJHtjcmVkZW50aWFscy5yZWFsbX0iJykKICAgICAgLi53cml0ZSgnLCBub25jZT0iJHtjcmVkZW50aWFscy5ub25jZX0iJykKICAgICAgLi53cml0ZSgnLCB1cmk9IiRyZXF1ZXN0VXJpIicpCiAgICAgIC4ud3JpdGUoJywgYWxnb3JpdGhtPSIke2NyZWRlbnRpYWxzLmFsZ29yaXRobX0iJyk7CiAgICBpZiAocW9wID09ICJhdXRoIikgewogICAgICBidWZmZXIKICAgICAgICAuLndyaXRlKCcsIHFvcD0iJHFvcCInKQogICAgICAgIC4ud3JpdGUoJywgY25vbmNlPSIkY25vbmNlIicpCiAgICAgICAgLi53cml0ZSgnLCBuYz0iJG5jIicpOwogICAgfQogICAgYnVmZmVyLndyaXRlKCcsIHJlc3BvbnNlPSIkcmVzcG9uc2UiJyk7CiAgICByZXR1cm4gYnVmZmVyLnRvU3RyaW5nKCk7CiAgfQoKICB2b2lkIGF1dGhvcml6ZShfQ3JlZGVudGlhbHMgY3JlZGVudGlhbHMsIEh0dHBDbGllbnRSZXF1ZXN0IHJlcXVlc3QpIHsKICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoCiAgICAgICAgSHR0cEhlYWRlcnMuYXV0aG9yaXphdGlvbkhlYWRlciwgYXV0aG9yaXphdGlvbihjcmVkZW50aWFscywgcmVxdWVzdCkpOwogIH0KCiAgdm9pZCBhdXRob3JpemVQcm94eSgKICAgICAgX1Byb3h5Q3JlZGVudGlhbHMgY3JlZGVu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JykWBAIBHiYQFQEdDhAUDhIBLz5DRUlCSCg4HishHyEsNQYEAToBLQIBLgsBQh0BOEYxE0lLLS8EAS5CD08OBioRBAIBLw8MAU8dAT1GNQQBLkIPTw4GLwQCAUkkR1ECAUEsExMBPQFDARtDRTwnRiYSSBoEAT5LBAFIUAQCAUItExMBPgFEAU8vHSYfIzcBEBMPC1ElHUggNTwNKyEcISAhKSEeDQ0rIR4GPAEtGSYwMCU5GQ0gJh8GLB4EAUgZTwQBF0I+LgQCAS4YFxZEAgEbIjM+KSQCARlkYXJ0Ol9odHRwL2h0dHBfaW1wbC5kYXJ0NW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9faHR0cC93ZWJzb2NrZXRfaW1wbC5kYXJ0wACglS8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX2h0dHA7Cgpjb25zdCBTdHJpbmcgX3dlYlNvY2tldEdVSUQgPSAiMjU4RUFGQTUtRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjExIjsKY29uc3QgU3RyaW5nIF9jbGllbnROb0NvbnRleHRUYWtlb3ZlciA9ICJjbGllbnRfbm9fY29udGV4dF90YWtlb3ZlciI7CmNvbnN0IFN0cmluZyBfc2VydmVyTm9Db250ZXh0VGFrZW92ZXIgPSAic2VydmVyX25vX2NvbnRleHRfdGFrZW92ZXIiOwpjb25zdCBTdHJpbmcgX2NsaWVudE1heFdpbmRvd0JpdHMgPSAiY2xpZW50X21heF93aW5kb3dfYml0cyI7CmNvbnN0IFN0cmluZyBfc2VydmVyTWF4V2luZG93Qml0cyA9ICJzZXJ2ZXJfbWF4X3dpbmRvd19iaXRzIjsKCi8vIE1hdGNoZXMgX1dlYlNvY2tldE9wY29kZS4KY2xhc3MgX1dlYlNvY2tldE1lc3NhZ2VUeXBlIHsKICBzdGF0aWMgY29uc3QgaW50IE5PTkUgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgVEVYVCA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBCSU5BUlkgPSAyOwp9CgpjbGFzcyBfV2ViU29ja2V0T3Bjb2RlIHsKICBzdGF0aWMgY29uc3QgaW50IENPTlRJTlVBVElPTiA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBURVhUID0gMTsKICBzdGF0aWMgY29uc3QgaW50IEJJTkFSWSA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBSRVNFUlZFRF8zID0gMzsKICBzdGF0aWMgY29uc3QgaW50IFJFU0VSVkVEXzQgPSA0OwogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfNSA9IDU7CiAgc3RhdGljIGNvbnN0IGludCBSRVNFUlZFRF82ID0gNjsKICBzdGF0aWMgY29uc3QgaW50IFJFU0VSVkVEXzcgPSA3OwogIHN0YXRpYyBjb25zdCBpbnQgQ0xPU0UgPSA4OwogIHN0YXRpYyBjb25zdCBpbnQgUElORyA9IDk7CiAgc3RhdGljIGNvbnN0IGludCBQT05HID0gMTA7CiAgc3RhdGljIGNvbnN0IGludCBSRVNFUlZFRF9CID0gMTE7CiAgc3RhdGljIGNvbnN0IGludCBSRVNFUlZFRF9DID0gMTI7CiAgc3RhdGljIGNvbnN0IGludCBSRVNFUlZFRF9EID0gMTM7CiAgc3RhdGljIGNvbnN0IGludCBSRVNFUlZFRF9FID0gMTQ7CiAgc3RhdGljIGNvbnN0IGludCBSRVNFUlZFRF9GID0gMTU7Cn0KCmNsYXNzIF9FbmNvZGVkU3RyaW5nIHsKICBmaW5hbCBMaXN0PGludD4gYnl0ZXM7CiAgX0VuY29kZWRTdHJpbmcodGhpcy5ieXRlcyk7Cn0KCi8qKgogKiAgU3RvcmVzIHRoZSBoZWFkZXIgYW5kIGludGVnZXIgdmFsdWUgZGVyaXZlZCBmcm9tIG5lZ290aWF0aW9uIG9mCiAqICBjbGllbnRfbWF4X3dpbmRvd19iaXRzIGFuZCBzZXJ2ZXJfbWF4X3dpbmRvd19iaXRzLiBoZWFkZXJWYWx1ZSB3aWxsIGJlCiAqICBzZXQgaW4gdGhlIFdlYnNvY2tldCByZXNwb25zZSBoZWFkZXJzLgogKi8KY2xhc3MgX0NvbXByZXNzaW9uTWF4V2luZG93Qml0cyB7CiAgU3RyaW5nIGhlYWRlclZhbHVlOwogIGludCBtYXhXaW5kb3dCaXRzOwogIF9Db21wcmVzc2lvbk1heFdpbmRvd0JpdHMoW3RoaXMuaGVhZGVyVmFsdWUsIHRoaXMubWF4V2luZG93Qml0c10pOwogIFN0cmluZyB0b1N0cmluZygpID0+IGhlYWRlclZhbHVlOwp9CgovKioKICogVGhlIHdlYiBzb2NrZXQgcHJvdG9jb2wgdHJhbnNmb3JtZXIgaGFuZGxlcyB0aGUgcHJvdG9jb2wgYnl0ZSBzdHJlYW0KICogd2hpY2ggaXMgc3VwcGxpZWQgdGhyb3VnaCB0aGUgYGhhbmRsZURhdGFgLiBBcyB0aGUgcHJvdG9jb2wgaXMgcHJvY2Vzc2VkLAogKiBpdCdsbCBvdXRwdXQgZnJhbWUgZGF0YSBhcyBlaXRoZXIgYSBMaXN0PGludD4gb3IgU3RyaW5nLgogKgogKiBJbXBvcnRhbnQgaW5mb3JtYXRpb24gYWJvdXQgdXNhZ2U6IEJlIHN1cmUgeW91IHVzZSBjYW5jZWxPbkVycm9yLCBzbyB0aGUKICogc29ja2V0IHdpbGwgYmUgY2xvc2VkIHdoZW4gdGhlIHByb2Nlc3NvciBlbmNvdW50ZXIgYW4gZXJyb3IuIE5vdCB1c2luZyBpdAogKiB3aWxsIGxlYWQgdG8gdW5kZWZpbmVkIGJlaGF2aW91ci4KICovCmNsYXNzIF9XZWJTb2NrZXRQcm90b2NvbFRyYW5zZm9ybWVyIGV4dGVuZHMgU3RyZWFtVHJhbnNmb3JtZXJCYXNlPExpc3Q8aW50PiwKICAgICAgICBkeW5hbWljIC8qTGlzdDxpbnQ+fF9XZWJTb2NrZXRQaW5nfF9XZWJTb2NrZXRQb25nKi8gPgogICAgaW1wbGVtZW50cyBFdmVudFNpbms8TGlzdDxpbnQ+PiB7CiAgc3RhdGljIGNvbnN0IGludCBTVEFSVCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBMRU5fRklSU1QgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgTEVOX1JFU1QgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgTUFTSyA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBQQVlMT0FEID0gNDsKICBzdGF0aWMgY29uc3QgaW50IENMT1NFRCA9IDU7CiAgc3RhdGljIGNvbnN0IGludCBGQUlMVVJFID0gNjsKICBzdGF0aWMgY29uc3QgaW50IEZJTiA9IDB4ODA7CiAgc3RhdGljIGNvbnN0IGludCBSU1YxID0gMHg0MDsKICBzdGF0aWMgY29uc3QgaW50IFJTVjIgPSAweDIwOwogIHN0YXRpYyBjb25zdCBpbnQgUlNWMyA9IDB4MTA7CiAgc3RhdGljIGNvbnN0IGludCBPUENPREUgPSAweEY7CgogIGludCBfc3RhdGUgPSBTVEFSVDsKICBib29sIF9maW4gPSBmYWxzZTsKICBib29sIF9jb21wcmVzc2VkID0gZmFsc2U7CiAgaW50IF9vcGNvZGUgPSAtMTsKICBpbnQgX2xlbiA9IC0xOwogIGJvb2wgX21hc2tlZCA9IGZhbHNlOwogIGludCBfcmVtYWluaW5nTGVuQnl0ZXMgPSAtMTsKICBpbnQgX3JlbWFpbmluZ01hc2tpbmdLZXlCeXRlcyA9IDQ7CiAgaW50IF9yZW1haW5pbmdQYXlsb2FkQnl0ZXMgPSAtMTsKICBpbnQgX3VubWFza2luZ0luZGV4ID0gMDsKICBpbnQgX2N1cnJlbnRNZXNzYWdlVHlwZSA9IF9XZWJTb2NrZXRNZXNzYWdlVHlwZS5OT05FOwogIGludCBjbG9zZUNvZGUgPSBXZWJTb2NrZXRTdGF0dXMuTk9fU1RBVFVTX1JFQ0VJVkVEOwogIFN0cmluZyBjbG9zZVJlYXNvbiA9ICIiOwoKICBFdmVudFNpbms8ZHluYW1pYyAvKkxpc3Q8aW50PnxfV2ViU29ja2V0UGluZ3xfV2ViU29ja2V0UG9uZyovID4gX2V2ZW50U2luazsKCiAgZmluYWwgYm9vbCBfc2VydmVyU2lkZTsKICBmaW5hbCBMaXN0IF9tYXNraW5nQnl0ZXMgPSBuZXcgTGlzdCg0KTsKICBmaW5hbCBCeXRlc0J1aWxkZXIgX3BheWxvYWQgPSBuZXcgQnl0ZXNCdWlsZGVyKGNvcHk6IGZhbHNlKTsKCiAgX1dlYlNvY2tldFBlck1lc3NhZ2VEZWZsYXRlIF9kZWZsYXRlOwogIF9XZWJTb2NrZXRQcm90b2NvbFRyYW5zZm9ybWVyKFt0aGlzLl9zZXJ2ZXJTaWRlID0gZmFsc2UsIHRoaXMuX2RlZmxhdGVdKTsKCiAgU3RyZWFtPGR5bmFtaWMgLypMaXN0PGludD58X1dlYlNvY2tldFBpbmd8X1dlYlNvY2tldFBvbmcqLyA+IGJpbmQoCiAgICAgIFN0cmVhbTxMaXN0PGludD4+IHN0cmVhbSkgewogICAgcmV0dXJuIG5ldyBTdHJlYW0uZXZlbnRUcmFuc2Zvcm1lZChzdHJlYW0sIChFdmVudFNpbmsgZXZlbnRTaW5rKSB7CiAgICAgIGlmIChfZXZlbnRTaW5rICE9IG51bGwpIHsKICAgICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigiV2ViU29ja2V0IHRyYW5zZm9ybWVyIGFscmVhZHkgdXNlZC4iKTsKICAgICAgfQogICAgICBfZXZlbnRTaW5rID0gZXZlbnRTaW5rOwogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgdm9pZCBhZGRFcnJvcihPYmplY3QgZXJyb3IsIFtTdGFja1RyYWNlIHN0YWNrVHJhY2VdKSB7CiAgICBfZXZlbnRTaW5rLmFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKTsKICB9CgogIHZvaWQgY2xvc2UoKSB7CiAgICBfZXZlbnRTaW5rLmNsb3NlKCk7CiAgfQoKICAvKioKICAgKiBQcm9jZXNzIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgdW5kZXJseWluZyBjb21tdW5pY2F0aW9uIGNoYW5uZWwuCiAgICovCiAgdm9pZCBhZGQoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICB2YXIgYnVmZmVyID0gYnl0ZXMgaXMgVWludDhMaXN0ID8gYnl0ZXMgOiBuZXcgVWludDhMaXN0LmZyb21MaXN0KGJ5dGVzKTsKICAgIGludCBpbmRleCA9IDA7CiAgICBpbnQgbGFzdEluZGV4ID0gYnVmZmVyLmxlbmd0aDsKICAgIGlmIChfc3RhdGUgPT0gQ0xPU0VEKSB7CiAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIkRhdGEgb24gY2xvc2VkIGNvbm5lY3Rpb24iKTsKICAgIH0KICAgIGlmIChfc3RhdGUgPT0gRkFJTFVSRSkgewogICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJEYXRhIG9uIGZhaWxlZCBjb25uZWN0aW9uIik7CiAgICB9CiAgICB3aGlsZSAoKGluZGV4IDwgbGFzdEluZGV4KSAmJiBfc3RhdGUgIT0gQ0xPU0VEICYmIF9zdGF0ZSAhPSBGQUlMVVJFKSB7CiAgICAgIGludCBieXRlID0gYnVmZmVyW2luZGV4XTsKICAgICAgaWYgKF9zdGF0ZSA8PSBMRU5fUkVTVCkgewogICAgICAgIGlmIChfc3RhdGUgPT0gU1RBUlQpIHsKICAgICAgICAgIF9maW4gPSAoYnl0ZSAmIEZJTikgIT0gMDsKCiAgICAgICAgICBpZiAoKGJ5dGUgJiAoUlNWMiB8IFJTVjMpKSAhPSAwKSB7CiAgICAgICAgICAgIC8vIFRoZSBSU1YyLCBSU1YzIGJpdHMgbXVzdCBib3RoIGJlIHplcm8uCiAgICAgICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlByb3RvY29sIGVycm9yIik7CiAgICAgICAgICB9CgogICAgICAgICAgX29wY29kZSA9IChieXRlICYgT1BDT0RFKTsKCiAgICAgICAgICBpZiAoX29wY29kZSAhPSBfV2ViU29ja2V0T3Bjb2RlLkNPTlRJTlVBVElPTikgewogICAgICAgICAgICBpZiAoKGJ5dGUgJiBSU1YxKSAhPSAwKSB7CiAgICAgICAgICAgICAgX2NvbXByZXNzZWQgPSB0cnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9jb21wcmVzc2VkID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICBpZiAoX29wY29kZSA8PSBfV2ViU29ja2V0T3Bjb2RlLkJJTkFSWSkgewogICAgICAgICAgICBpZiAoX29wY29kZSA9PSBfV2ViU29ja2V0T3Bjb2RlLkNPTlRJTlVBVElPTikgewogICAgICAgICAgICAgIGlmIChfY3VycmVudE1lc3NhZ2VUeXBlID09IF9XZWJTb2NrZXRNZXNzYWdlVHlwZS5OT05FKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJQcm90b2NvbCBlcnJvciIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBhc3NlcnQoX29wY29kZSA9PSBfV2ViU29ja2V0T3Bjb2RlLlRFWFQgfHwKICAgICAgICAgICAgICAgICAgX29wY29kZSA9PSBfV2ViU29ja2V0T3Bjb2RlLkJJTkFSWSk7CiAgICAgICAgICAgICAgaWYgKF9jdXJyZW50TWVzc2FnZVR5cGUgIT0gX1dlYlNvY2tldE1lc3NhZ2VUeXBlLk5PTkUpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlByb3RvY29sIGVycm9yIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9jdXJyZW50TWVzc2FnZVR5cGUgPSBfb3Bjb2RlOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKF9vcGNvZGUgPj0gX1dlYlNvY2tldE9wY29kZS5DTE9TRSAmJgogICAgICAgICAgICAgIF9vcGNvZGUgPD0gX1dlYlNvY2tldE9wY29kZS5QT05HKSB7CiAgICAgICAgICAgIC8vIENvbnRyb2wgZnJhbWVzIGNhbm5vdCBiZSBmcmFnbWVudGVkLgogICAgICAgICAgICBpZiAoIV9maW4pIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlByb3RvY29sIGVycm9yIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJQcm90b2NvbCBlcnJvciIpOwogICAgICAgICAgfQogICAgICAgICAgX3N0YXRlID0gTEVOX0ZJUlNUOwogICAgICAgIH0gZWxzZSBpZiAoX3N0YXRlID09IExFTl9GSVJTVCkgewogICAgICAgICAgX21hc2tlZCA9IChieXRlICYgMHg4MCkgIT0gMDsKICAgICAgICAgIF9sZW4gPSBieXRlICYgMHg3RjsKICAgICAgICAgIGlmIChfaXNDb250cm9sRnJhbWUoKSAmJiBfbGVuID4gMTI1KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oIlByb3RvY29sIGVycm9yIik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX2xlbiA9PSAxMjYpIHsKICAgICAgICAgICAgX2xlbiA9IDA7CiAgICAgICAgICAgIF9yZW1haW5pbmdMZW5CeXRlcyA9IDI7CiAgICAgICAgICAgIF9zdGF0ZSA9IExFTl9SRVNUOwogICAgICAgICAgfSBlbHNlIGlmIChfbGVuID09IDEyNykgewogICAgICAgICAgICBfbGVuID0gMDsKICAgICAgICAgICAgX3JlbWFpbmluZ0xlbkJ5dGVzID0gODsKICAgICAgICAgICAgX3N0YXRlID0gTEVOX1JFU1Q7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBhc3NlcnQoX2xlbiA8IDEyNik7CiAgICAgICAgICAgIF9sZW5ndGhEb25lKCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFzc2VydChfc3RhdGUgPT0gTEVOX1JFU1QpOwogICAgICAgICAgX2xlbiA9IF9sZW4gPDwgOCB8IGJ5dGU7CiAgICAgICAgICBfcmVtYWluaW5nTGVuQnl0ZXMtLTsKICAgICAgICAgIGlmIChfcmVtYWluaW5nTGVuQnl0ZXMgPT0gMCkgewogICAgICAgICAgICBfbGVuZ3RoRG9uZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoX3N0YXRlID09IE1BU0spIHsKICAgICAgICAgIF9tYXNraW5nQnl0ZXNbNCAtIF9yZW1haW5pbmdNYXNraW5nS2V5Qnl0ZXMtLV0gPSBieXRlOwogICAgICAgICAgaWYgKF9yZW1haW5pbmdNYXNraW5nS2V5Qnl0ZXMgPT0gMCkgewogICAgICAgICAgICBfbWFza0RvbmUoKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXNzZXJ0KF9zdGF0ZSA9PSBQQVlMT0FEKTsKICAgICAgICAgIC8vIFRoZSBwYXlsb2FkIGlzIG5vdCBoYW5kbGVkIG9uZSBieXRlIGF0IGEgdGltZSBidXQgaW4gYmxvY2tzLgogICAgICAgICAgaW50IHBheWxvYWRMZW5ndGggPSBtaW4obGFzdEluZGV4IC0gaW5kZXgsIF9yZW1haW5pbmdQYXlsb2FkQnl0ZXMpOwogICAgICAgICAgX3JlbWFpbmluZ1BheWxvYWRCeXRlcyAtPSBwYXlsb2FkTGVuZ3RoOwogICAgICAgICAgLy8gVW5tYXNrIHBheWxvYWQgaWYgbWFza2VkLgogICAgICAgICAgaWYgKF9tYXNrZWQpIHsKICAgICAgICAgICAgX3VubWFzayhpbmRleCwgcGF5bG9hZExlbmd0aCwgYnVmZmVyKTsKICAgICAgICAgIH0KICAgICAgICAgIC8vIENvbnRyb2wgZnJhbWUgYW5kIGRhdGEgZnJhbWUgc2hhcmUgX3BheWxvYWRzLgogICAgICAgICAgX3BheWxvYWQuYWRkKG5ldyBVaW50OExpc3QudmlldyhidWZmZXIuYnVmZmVyLCBpbmRleCwgcGF5bG9hZExlbmd0aCkpOwogICAgICAgICAgaW5kZXggKz0gcGF5bG9hZExlbmd0aDsKICAgICAgICAgIGlmIChfaXNDb250cm9sRnJhbWUoKSkgewogICAgICAgICAgICBpZiAoX3JlbWFpbmluZ1BheWxvYWRCeXRlcyA9PSAwKSBfY29udHJvbEZyYW1lRW5kKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoX2N1cnJlbnRNZXNzYWdlVHlwZSAhPSBfV2ViU29ja2V0TWVzc2FnZVR5cGUuVEVYVCAmJgogICAgICAgICAgICAgICAgX2N1cnJlbnRNZXNzYWdlVHlwZSAhPSBfV2ViU29ja2V0TWVzc2FnZVR5cGUuQklOQVJZKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUHJvdG9jb2wgZXJyb3IiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoX3JlbWFpbmluZ1BheWxvYWRCeXRlcyA9PSAwKSBfbWVzc2FnZUZyYW1lRW5kKCk7CiAgICAgICAgICB9CgogICAgICAgICAgLy8gSGFjayAtIGFzIHdlIGFsd2F5cyBkbyBpbmRleCsrIGJlbG93LgogICAgICAgICAgaW5kZXgtLTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgYnl0ZS4KICAgICAgaW5kZXgrKzsKICAgIH0KICB9CgogIHZvaWQgX3VubWFzayhpbnQgaW5kZXgsIGludCBsZW5ndGgsIFVpbnQ4TGlzdCBidWZmZXIpIHsKICAgIGNvbnN0IGludCBCTE9DS19TSVpFID0gMTY7CiAgICAvLyBTa2lwIEludDMyeDQtdmVyc2lvbiBpZiBtZXNzYWdlIGlzIHNtYWxsLgogICAgaWYgKGxlbmd0aCA+PSBCTE9DS19TSVpFKSB7CiAgICAgIC8vIFN0YXJ0IGJ5IGFsaWduaW5nIHRvIDE2IGJ5dGVzLgogICAgICBmaW5hbCBpbnQgc3RhcnRPZmZzZXQgPSBCTE9DS19TSVpFIC0gKGluZGV4ICYgMTUpOwogICAgICBmaW5hbCBpbnQgZW5kID0gaW5kZXggKyBzdGFydE9mZnNldDsKICAgICAgZm9yIChpbnQgaSA9IGluZGV4OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICBidWZmZXJbaV0gXj0gX21hc2tpbmdCeXRlc1tfdW5tYXNraW5nSW5kZXgrKyAmIDNdOwogICAgICB9CiAgICAgIGluZGV4ICs9IHN0YXJ0T2Zmc2V0OwogICAgICBsZW5ndGggLT0gc3RhcnRPZmZzZXQ7CiAgICAgIGZpbmFsIGludCBibG9ja0NvdW50ID0gbGVuZ3RoIH4vIEJMT0NLX1NJWkU7CiAgICAgIGlmIChibG9ja0NvdW50ID4gMCkgewogICAgICAgIC8vIENyZWF0ZSBtYXNrIGJsb2NrLgogICAgICAgIGludCBtYXNrID0gMDsKICAgICAgICBmb3IgKGludCBpID0gMzsgaSA+PSAwOyBpLS0pIHsKICAgICAgICAgIG1hc2sgPSAobWFzayA8PCA4KSB8IF9tYXNraW5nQnl0ZXNbKF91bm1hc2tpbmdJbmRleCArIGkpICYgM107CiAgICAgICAgfQogICAgICAgIEludDMyeDQgYmxvY2tNYXNrID0gbmV3IEludDMyeDQobWFzaywgbWFzaywgbWFzaywgbWFzayk7CiAgICAgICAgSW50MzJ4NExpc3QgYmxvY2tCdWZmZXIgPQogICAgICAgICAgICBuZXcgSW50MzJ4NExpc3QudmlldyhidWZmZXIuYnVmZmVyLCBpbmRleCwgYmxvY2tDb3VudCk7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBibG9ja0J1ZmZlci5sZW5ndGg7IGkrKykgewogICAgICAgICAgYmxvY2tCdWZmZXJbaV0gXj0gYmxvY2tNYXNrOwogICAgICAgIH0KICAgICAgICBmaW5hbCBpbnQgYnl0ZXMgPSBibG9ja0NvdW50ICogQkxPQ0tfU0laRTsKICAgICAgICBpbmRleCArPSBieXRlczsKICAgICAgICBsZW5ndGggLT0gYnl0ZXM7CiAgICAgIH0KICAgIH0KICAgIC8vIEhhbmRsZSBlbmQuCiAgICBmaW5hbCBpbnQgZW5kID0gaW5kZXggKyBsZW5ndGg7CiAgICBmb3IgKGludCBpID0gaW5kZXg7IGkgPCBlbmQ7IGkrKykgewogICAgICBidWZmZXJbaV0gXj0gX21hc2tpbmdCeXRlc1tfdW5tYXNraW5nSW5kZXgrKyAmIDNdOwogICAgfQogIH0KCiAgdm9pZCBfbGVuZ3RoRG9uZSgpIHsKICAgIGlmIChfbWFza2VkKSB7CiAgICAgIGlmICghX3NlcnZlclNpZGUpIHsKICAgICAgICB0aHJvdyBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJSZWNlaXZlZCBtYXNrZWQgZnJhbWUgZnJvbSBzZXJ2ZXIiKTsKICAgICAgfQogICAgICBfc3RhdGUgPSBNQVNLOwogICAgfSBlbHNlIHsKICAgICAgaWYgKF9zZXJ2ZXJTaWRlKSB7CiAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUmVjZWl2ZWQgdW5tYXNrZWQgZnJhbWUgZnJvbSBjbGllbnQiKTsKICAgICAgfQogICAgICBfcmVtYWluaW5nUGF5bG9hZEJ5dGVzID0gX2xlbjsKICAgICAgX3N0YXJ0UGF5bG9hZCgpOwogICAgfQogIH0KCiAgdm9pZCBfbWFza0RvbmUoKSB7CiAgICBfcmVtYWluaW5nUGF5bG9hZEJ5dGVzID0gX2xlbjsKICAgIF9zdGFydFBheWxvYWQoKTsKICB9CgogIHZvaWQgX3N0YXJ0UGF5bG9hZCgpIHsKICAgIC8vIElmIHRoZXJlIGlzIG5vIGFjdHVhbCBwYXlsb2FkIHBlcmZvcm0gcGVyZm9ybSBjYWxsYmFja3Mgd2l0aG91dAogICAgLy8gZ29pbmcgdGhyb3VnaCB0aGUgUEFZTE9BRCBzdGF0ZS4KICAgIGlmIChfcmVtYWluaW5nUGF5bG9hZEJ5dGVzID09IDApIHsKICAgICAgaWYgKF9pc0NvbnRyb2xGcmFtZSgpKSB7CiAgICAgICAgc3dpdGNoIChfb3Bjb2RlKSB7CiAgICAgICAgICBjYXNlIF9XZWJTb2NrZXRPcGNvZGUuQ0xPU0U6CiAgICAgICAgICAgIF9zdGF0ZSA9IENMT1NFRDsKICAgICAgICAgICAgX2V2ZW50U2luay5jbG9zZSgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgX1dlYlNvY2tldE9wY29kZS5QSU5HOgogICAgICAgICAgICBfZXZlbnRTaW5rLmFkZChuZXcgX1dlYlNvY2tldFBpbmcoKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSBfV2ViU29ja2V0T3Bjb2RlLlBPTkc6CiAgICAgICAgICAgIF9ldmVudFNpbmsuYWRkKG5ldyBfV2ViU29ja2V0UG9uZygpKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIF9wcmVwYXJlRm9yTmV4dEZyYW1lKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgX21lc3NhZ2VGcmFtZUVuZCgpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBfc3RhdGUgPSBQQVlMT0FEOwogICAgfQogIH0KCiAgdm9pZCBfbWVzc2FnZUZyYW1lRW5kKCkgewogICAgaWYgKF9maW4pIHsKICAgICAgdmFyIGJ5dGVzID0gX3BheWxvYWQudGFrZUJ5dGVzKCk7CiAgICAgIGlmIChfZGVmbGF0ZSAhPSBudWxsICYmIF9jb21wcmVzc2VkKSB7CiAgICAgICAgYnl0ZXMgPSBfZGVmbGF0ZS5wcm9jZXNzSW5jb21pbmdNZXNzYWdlKGJ5dGVzKTsKICAgICAgfQoKICAgICAgc3dpdGNoIChfY3VycmVudE1lc3NhZ2VUeXBlKSB7CiAgICAgICAgY2FzZSBfV2ViU29ja2V0TWVzc2FnZVR5cGUuVEVYVDoKICAgICAgICAgIF9ldmVudFNpbmsuYWRkKHV0ZjguZGVjb2RlKGJ5dGVzKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIF9XZWJTb2NrZXRNZXNzYWdlVHlwZS5CSU5BUlk6CiAgICAgICAgICBfZXZlbnRTaW5rLmFkZChieXRlcyk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICBfY3VycmVudE1lc3NhZ2VUeXBlID0gX1dlYlNvY2tldE1lc3NhZ2VUeXBlLk5PTkU7CiAgICB9CiAgICBfcHJlcGFyZUZvck5leHRGcmFtZSgpOwogIH0KCiAgdm9pZCBfY29udHJvbEZyYW1lRW5kKCkgewogICAgc3dpdGNoIChfb3Bjb2RlKSB7CiAgICAgIGNhc2UgX1dlYlNvY2tldE9wY29kZS5DTE9TRToKICAgICAgICBjbG9zZUNvZGUgPSBXZWJTb2NrZXRTdGF0dXMuTk9fU1RBVFVTX1JFQ0VJVkVEOwogICAgICAgIHZhciBwYXlsb2FkID0gX3BheWxvYWQudGFrZUJ5dGVzKCk7CiAgICAgICAgaWYgKHBheWxvYWQubGVuZ3RoID4gMCkgewogICAgICAgICAgaWYgKHBheWxvYWQubGVuZ3RoID09IDEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUHJvdG9jb2wgZXJyb3IiKTsKICAgICAgICAgIH0KICAgICAgICAgIGNsb3NlQ29kZSA9IHBheWxvYWRbMF0gPDwgOCB8IHBheWxvYWRbMV07CiAgICAgICAgICBpZiAoY2xvc2VDb2RlID09IFdlYlNvY2tldFN0YXR1cy5OT19TVEFUVVNfUkVDRUlWRUQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUHJvdG9jb2wgZXJyb3IiKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChwYXlsb2FkLmxlbmd0aCA+IDIpIHsKICAgICAgICAgICAgY2xvc2VSZWFzb24gPSB1dGY4LmRlY29kZShwYXlsb2FkLnN1Ymxpc3QoMikpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBfc3RhdGUgPSBDTE9TRUQ7CiAgICAgICAgX2V2ZW50U2luay5jbG9zZSgpOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBfV2ViU29ja2V0T3Bjb2RlLlBJTkc6CiAgICAgICAgX2V2ZW50U2luay5hZGQobmV3IF9XZWJTb2NrZXRQaW5nKF9wYXlsb2FkLnRha2VCeXRlcygpKSk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlIF9XZWJTb2NrZXRPcGNvZGUuUE9ORzoKICAgICAgICBfZXZlbnRTaW5rLmFkZChuZXcgX1dlYlNvY2tldFBvbmcoX3BheWxvYWQudGFrZUJ5dGVzKCkpKTsKICAgICAgICBicmVhazsKICAgIH0KICAgIF9wcmVwYXJlRm9yTmV4dEZyYW1lKCk7CiAgfQoKICBib29sIF9pc0NvbnRyb2xGcmFtZSgpIHsKICAgIHJldHVybiBfb3Bjb2RlID09IF9XZWJTb2NrZXRPcGNvZGUuQ0xPU0UgfHwKICAgICAgICBfb3Bjb2RlID09IF9XZWJTb2NrZXRPcGNvZGUuUElORyB8fAogICAgICAgIF9vcGNvZGUgPT0gX1dlYlNvY2tldE9wY29kZS5QT05HOwogIH0KCiAgdm9pZCBfcHJlcGFyZUZvck5leHRGcmFtZSgpIHsKICAgIGlmIChfc3RhdGUgIT0gQ0xPU0VEICYmIF9zdGF0ZSAhPSBGQUlMVVJFKSBfc3RhdGUgPSBTVEFSVDsKICAgIF9maW4gPSBmYWxzZTsKICAgIF9vcGNvZGUgPSAtMTsKICAgIF9sZW4gPSAtMTsKICAgIF9yZW1haW5pbmdMZW5CeXRlcyA9IC0xOwogICAgX3JlbWFpbmluZ01hc2tpbmdLZXlCeXRlcyA9IDQ7CiAgICBfcmVtYWluaW5nUGF5bG9hZEJ5dGVzID0gLTE7CiAgICBfdW5tYXNraW5nSW5kZXggPSAwOwogIH0KfQoKY2xhc3MgX1dlYlNvY2tldFBpbmcgewogIGZpbmFsIExpc3Q8aW50PiBwYXlsb2FkOwogIF9XZWJTb2NrZXRQaW5nKFt0aGlzLnBheWxvYWQgPSBudWxsXSk7Cn0KCmNsYXNzIF9XZWJTb2NrZXRQb25nIHsKICBmaW5hbCBMaXN0PGludD4gcGF5bG9hZDsKICBfV2ViU29ja2V0UG9uZyhbdGhpcy5wYXlsb2FkID0gbnVsbF0pOwp9Cgp0eXBlZGVmIC8qU3RyaW5nfEZ1dHVyZTxTdHJpbmc+Ki8gX1Byb3RvY29sU2VsZWN0b3IoTGlzdDxTdHJpbmc+IHByb3RvY29scyk7CgpjbGFzcyBfV2ViU29ja2V0VHJhbnNmb3JtZXJJbXBsCiAgICBleHRlbmRzIFN0cmVhbVRyYW5zZm9ybWVyQmFzZTxIdHRwUmVxdWVzdCwgV2ViU29ja2V0PgogICAgaW1wbGVtZW50cyBXZWJTb2NrZXRUcmFuc2Zvcm1lciB7CiAgZmluYWwgU3RyZWFtQ29udHJvbGxlcjxXZWJTb2NrZXQ+IF9jb250cm9sbGVyID0KICAgICAgbmV3IFN0cmVhbUNvbnRyb2xsZXI8V2ViU29ja2V0PihzeW5jOiB0cnVlKTsKICBmaW5hbCBfUHJvdG9jb2xTZWxlY3RvciBfcHJvdG9jb2xTZWxlY3RvcjsKICBmaW5hbCBDb21wcmVzc2lvbk9wdGlvbnMgX2NvbXByZXNzaW9uOwoKICBfV2ViU29ja2V0VHJhbnNmb3JtZXJJbXBsKHRoaXMuX3Byb3RvY29sU2VsZWN0b3IsIHRoaXMuX2NvbXByZXNzaW9uKTsKCiAgU3RyZWFtPFdlYlNvY2tldD4gYmluZChTdHJlYW08SHR0cFJlcXVlc3Q+IHN0cmVhbSkgewogICAgc3RyZWFtLmxpc3RlbigocmVxdWVzdCkgewogICAgICBfdXBncmFkZShyZXF1ZXN0LCBfcHJvdG9jb2xTZWxlY3RvciwgX2NvbXByZXNzaW9uKQogICAgICAgICAgLnRoZW4oKFdlYlNvY2tldCB3ZWJTb2NrZXQpID0+IF9jb250cm9sbGVyLmFkZCh3ZWJTb2NrZXQpKQogICAgICAgICAgLmNhdGNoRXJyb3IoX2NvbnRyb2xsZXIuYWRkRXJyb3IpOwogICAgfSwgb25Eb25lOiAoKSB7CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICB9KTsKCiAgICByZXR1cm4gX2NvbnRyb2xsZXIuc3RyZWFtOwogIH0KCiAgc3RhdGljIExpc3Q8U3RyaW5nPiBfdG9rZW5pemVGaWVsZFZhbHVlKFN0cmluZyBoZWFkZXJWYWx1ZSkgewogICAgTGlzdDxTdHJpbmc+IHRva2VucyA9IG5ldyBMaXN0PFN0cmluZz4oKTsKICAgIGludCBzdGFydCA9IDA7CiAgICBpbnQgaW5kZXggPSAwOwogICAgd2hpbGUgKGluZGV4IDwgaGVhZGVyVmFsdWUubGVuZ3RoKSB7CiAgICAgIGlmIChoZWFkZXJWYWx1ZVtpbmRleF0gPT0gIiwiKSB7CiAgICAgICAgdG9rZW5zLmFkZChoZWFkZXJWYWx1ZS5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KSk7CiAgICAgICAgc3RhcnQgPSBpbmRleCArIDE7CiAgICAgIH0gZWxzZSBpZiAoaGVhZGVyVmFsdWVbaW5kZXhdID09ICIgIiB8fCBoZWFkZXJWYWx1ZVtpbmRleF0gPT0gIlx0IikgewogICAgICAgIHN0YXJ0Kys7CiAgICAgIH0KICAgICAgaW5kZXgrKzsKICAgIH0KICAgIHRva2Vucy5hZGQoaGVhZGVyVmFsdWUuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkpOwogICAgcmV0dXJuIHRva2VuczsKICB9CgogIHN0YXRpYyBGdXR1cmU8V2ViU29ja2V0PiBfdXBncmFkZShIdHRwUmVxdWVzdCByZXF1ZXN0LAogICAgICBfUHJvdG9jb2xTZWxlY3RvciBfcHJvdG9jb2xTZWxlY3RvciwgQ29tcHJlc3Npb25PcHRpb25zIGNvbXByZXNzaW9uKSB7CiAgICB2YXIgcmVzcG9uc2UgPSByZXF1ZXN0LnJlc3BvbnNlOwogICAgaWYgKCFfaXNVcGdyYWRlUmVxdWVzdChyZXF1ZXN0KSkgewogICAgICAvLyBTZW5kIGVycm9yIHJlc3BvbnNlLgogICAgICByZXNwb25zZQogICAgICAgIC4uc3RhdHVzQ29kZSA9IEh0dHBTdGF0dXMuYmFkUmVxdWVzdAogICAgICAgIC4uY2xvc2UoKTsKICAgICAgcmV0dXJuIG5ldyBGdXR1cmUuZXJyb3IoCiAgICAgICAgICBuZXcgV2ViU29ja2V0RXhjZXB0aW9uKCJJbnZhbGlkIFdlYlNvY2tldCB1cGdyYWRlIHJlcXVlc3QiKSk7CiAgICB9CgogICAgRnV0dXJlPFdlYlNvY2tldD4gdXBncmFkZShTdHJpbmcgcHJvdG9jb2wpIHsKICAgICAgLy8gU2VuZCB0aGUgdXBncmFkZSByZXNwb25zZS4KICAgICAgcmVzcG9uc2UKICAgICAgICAuLnN0YXR1c0NvZGUgPSBIdHRwU3RhdHVzLnN3aXRjaGluZ1Byb3RvY29scwogICAgICAgIC4uaGVhZGVycy5hZGQoSHR0cEhlYWRlcnMuY29ubmVjdGlvbkhlYWRlciwgIlVwZ3JhZGUiKQogICAgICAgIC4uaGVhZGVycy5hZGQoSHR0cEhlYWRlcnMudXBncmFkZUhlYWRlciwgIndlYnNvY2tldCIpOwogICAgICBTdHJpbmcga2V5ID0gcmVxdWVzdC5oZWFkZXJzLnZhbHVlKCJTZWMtV2ViU29ja2V0LUtleSIpOwogICAgICBfU0hBMSBzaGExID0gbmV3IF9TSEExKCk7CiAgICAgIHNoYTEuYWRkKCIka2V5JF93ZWJTb2NrZXRHVUlEIi5jb2RlVW5pdHMpOwogICAgICBTdHJpbmcgYWNjZXB0ID0gX0NyeXB0b1V0aWxzLmJ5dGVzVG9CYXNlNjQoc2hhMS5jbG9zZSgpKTsKICAgICAgcmVzcG9uc2UuaGVhZGVycy5hZGQoIlNlYy1XZWJTb2NrZXQtQWNjZXB0IiwgYWNjZXB0KTsKICAgICAgaWYgKHByb3RvY29sICE9IG51bGwpIHsKICAgICAgICByZXNwb25zZS5oZWFkZXJzLmFkZCgiU2VjLVdlYlNvY2tldC1Qcm90b2NvbCIsIHByb3RvY29sKTsKICAgICAgfQoKICAgICAgdmFyIGRlZmxhdGUgPSBfbmVnb3RpYXRlQ29tcHJlc3Npb24ocmVxdWVzdCwgcmVzcG9uc2UsIGNvbXByZXNzaW9uKTsKCiAgICAgIHJlc3BvbnNlLmhlYWRlcnMuY29udGVudExlbmd0aCA9IDA7CiAgICAgIHJldHVybiByZXNwb25zZS5kZXRhY2hTb2NrZXQoKS50aGVuPFdlYlNvY2tldD4oKHNvY2tldCkgPT4KICAgICAgICAgIG5ldyBfV2ViU29ja2V0SW1wbC5fZnJvbVNvY2tldCgKICAgICAgICAgICAgICBzb2NrZXQsIHByb3RvY29sLCBjb21wcmVzc2lvbiwgdHJ1ZSwgZGVmbGF0ZSkpOwogICAgfQoKICAgIHZhciBwcm90b2NvbHMgPSByZXF1ZXN0LmhlYWRlcnNbJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnXTsKICAgIGlmIChwcm90b2NvbHMgIT0gbnVsbCAmJiBfcHJvdG9jb2xTZWxlY3RvciAhPSBudWxsKSB7CiAgICAgIC8vIFRoZSBzdWdnZXN0ZWQgcHJvdG9jb2xzIGNhbiBiZSBzcHJlYWQgb3ZlciBtdWx0aXBsZSBsaW5lcywgZWFjaAogICAgICAvLyBjb25zaXN0aW5nIG9mIG11bHRpcGxlIHByb3RvY29scy4gVG8gdW5pZnkgYWxsIG9mIHRoZW0sIGZpcnN0IGpvaW4KICAgICAgLy8gdGhlIGxpc3RzIHdpdGggJywgJyBhbmQgdGhlbiB0b2tlbml6ZS4KICAgICAgcHJvdG9jb2xzID0gX3Rva2VuaXplRmllbGRWYWx1ZShwcm90b2NvbHMuam9pbignLCAnKSk7CiAgICAgIHJldHVybiBuZXcgRnV0dXJlPFN0cmluZz4oKCkgPT4gX3Byb3RvY29sU2VsZWN0b3IocHJvdG9jb2xzKSkKICAgICAgICAgIC50aGVuPFN0cmluZz4oKHByb3RvY29sKSB7CiAgICAgICAgaWYgKHByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA8IDApIHsKICAgICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24oCiAgICAgICAgICAgICAgIlNlbGVjdGVkIHByb3RvY29sIGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBhdmFpbGFibGUgcHJvdG9jb2xzIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwcm90b2NvbDsKICAgICAgfSkuY2F0Y2hFcnJvcigoZXJyb3IpIHsKICAgICAgICByZXNwb25zZQogICAgICAgICAgLi5zdGF0dXNDb2RlID0gSHR0cFN0YXR1cy5pbnRlcm5hbFNlcnZlckVycm9yCiAgICAgICAgICAuLmNsb3NlKCk7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0pLnRoZW48V2ViU29ja2V0Pih1cGdyYWRlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiB1cGdyYWRlKG51bGwpOwogICAgfQogIH0KCiAgc3RhdGljIF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSBfbmVnb3RpYXRlQ29tcHJlc3Npb24oSHR0cFJlcXVlc3QgcmVxdWVzdCwKICAgICAgSHR0cFJlc3BvbnNlIHJlc3BvbnNlLCBDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb24pIHsKICAgIHZhciBleHRlbnNpb25IZWFkZXIgPSByZXF1ZXN0LmhlYWRlcnMudmFsdWUoIlNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucyIpOwoKICAgIGV4dGVuc2lvbkhlYWRlciA/Pz0gIiI7CgogICAgdmFyIGh2ID0gSGVhZGVyVmFsdWUucGFyc2UoZXh0ZW5zaW9uSGVhZGVyLCB2YWx1ZVNlcGFyYXRvcjogJywnKTsKICAgIGlmIChjb21wcmVzc2lvbi5lbmFibGVkICYmIGh2LnZhbHVlID09IF9XZWJTb2NrZXRJbXBsLlBFUl9NRVNTQUdFX0RFRkxBVEUpIHsKICAgICAgdmFyIGluZm8gPSBjb21wcmVzc2lvbi5fY3JlYXRlSGVhZGVyKGh2KTsKCiAgICAgIHJlc3BvbnNlLmhlYWRlcnMuYWRkKCJTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMiLCBpbmZvLmhlYWRlclZhbHVlKTsKICAgICAgdmFyIHNlcnZlck5vQ29udGV4dFRha2VvdmVyID0KICAgICAgICAgIChodi5wYXJhbWV0ZXJzLmNvbnRhaW5zS2V5KF9zZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlcikgJiYKICAgICAgICAgICAgICBjb21wcmVzc2lvbi5zZXJ2ZXJOb0NvbnRleHRUYWtlb3Zlcik7CiAgICAgIHZhciBjbGllbnROb0NvbnRleHRUYWtlb3ZlciA9CiAgICAgICAgICAoaHYucGFyYW1ldGVycy5jb250YWluc0tleShfY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIpICYmCiAgICAgICAgICAgICAgY29tcHJlc3Npb24uY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIpOwogICAgICB2YXIgZGVmbGF0ZSA9IG5ldyBfV2ViU29ja2V0UGVyTWVzc2FnZURlZmxhdGUoCiAgICAgICAgICBzZXJ2ZXJOb0NvbnRleHRUYWtlb3Zlcjogc2VydmVyTm9Db250ZXh0VGFrZW92ZXIsCiAgICAgICAgICBjbGllbnROb0NvbnRleHRUYWtlb3ZlcjogY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIsCiAgICAgICAgICBzZXJ2ZXJNYXhXaW5kb3dCaXRzOiBpbmZvLm1heFdpbmRvd0JpdHMsCiAgICAgICAgICBjbGllbnRNYXhXaW5kb3dCaXRzOiBpbmZvLm1heFdpbmRvd0JpdHMsCiAgICAgICAgICBzZXJ2ZXJTaWRlOiB0cnVlKTsKCiAgICAgIHJldHVybiBkZWZsYXRlOwogICAgfQoKICAgIHJldHVybiBudWxsOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzVXBncmFkZVJlcXVlc3QoSHR0cFJlcXVlc3QgcmVxdWVzdCkgewogICAgaWYgKHJlcXVlc3QubWV0aG9kICE9ICJHRVQiKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGlmIChyZXF1ZXN0LmhlYWRlcnNbSHR0cEhlYWRlcnMuY29ubmVjdGlvbkhlYWRlcl0gPT0gbnVsbCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBib29sIGlzVXBncmFkZSA9IGZhbHNlOwogICAgcmVxdWVzdC5oZWFkZXJzW0h0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXJdLmZvckVhY2goKFN0cmluZyB2YWx1ZSkgewogICAgICBpZiAodmFsdWUudG9Mb3dlckNhc2UoKSA9PSAidXBncmFkZSIpIGlzVXBncmFkZSA9IHRydWU7CiAgICB9KTsKICAgIGlmICghaXNVcGdyYWRlKSByZXR1cm4gZmFsc2U7CiAgICBTdHJpbmcgdXBncmFkZSA9IHJlcXVlc3QuaGVhZGVycy52YWx1ZShIdHRwSGVhZGVycy51cGdyYWRlSGVhZGVyKTsKICAgIGlmICh1cGdyYWRlID09IG51bGwgfHwgdXBncmFkZS50b0xvd2VyQ2FzZSgpICE9ICJ3ZWJzb2NrZXQiKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIFN0cmluZyB2ZXJzaW9uID0gcmVxdWVzdC5oZWFkZXJzLnZhbHVlKCJTZWMtV2ViU29ja2V0LVZlcnNpb24iKTsKICAgIGlmICh2ZXJzaW9uID09IG51bGwgfHwgdmVyc2lvbiAhPSAiMTMiKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIFN0cmluZyBrZXkgPSByZXF1ZXN0LmhlYWRlcnMudmFsdWUoIlNlYy1XZWJTb2NrZXQtS2V5Iik7CiAgICBpZiAoa2V5ID09IG51bGwpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQp9CgpjbGFzcyBfV2ViU29ja2V0UGVyTWVzc2FnZURlZmxhdGUgewogIGJvb2wgc2VydmVyTm9Db250ZXh0VGFrZW92ZXI7CiAgYm9vbCBjbGllbnROb0NvbnRleHRUYWtlb3ZlcjsKICBpbnQgY2xpZW50TWF4V2luZG93Qml0czsKICBpbnQgc2VydmVyTWF4V2luZG93Qml0czsKICBib29sIHNlcnZlclNpZGU7CgogIFJhd1pMaWJGaWx0ZXIgZGVjb2RlcjsKICBSYXdaTGliRmlsdGVyIGVuY29kZXI7CgogIF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSgKICAgICAge3RoaXMuY2xpZW50TWF4V2luZG93Qml0czogX1dlYlNvY2tldEltcGwuREVGQVVMVF9XSU5ET1dfQklUUywKICAgICAgdGhpcy5zZXJ2ZXJNYXhXaW5kb3dCaXRzOiBfV2ViU29ja2V0SW1wbC5ERUZBVUxUX1dJTkRPV19CSVRTLAogICAgICB0aGlzLnNlcnZlck5vQ29udGV4dFRha2VvdmVyOiBmYWxzZSwKICAgICAgdGhpcy5jbGllbnROb0NvbnRleHRUYWtlb3ZlcjogZmFsc2UsCiAgICAgIHRoaXMuc2VydmVyU2lkZTogZmFsc2V9KTsKCiAgdm9pZCBfZW5zdXJlRGVjb2RlcigpIHsKICAgIGlmIChkZWNvZGVyID09IG51bGwpIHsKICAgICAgZGVjb2RlciA9IG5ldyBSYXdaTGliRmlsdGVyLmluZmxhdGVGaWx0ZXIoCiAgICAgICAgICB3aW5kb3dCaXRzOiBzZXJ2ZXJTaWRlID8gY2xpZW50TWF4V2luZG93Qml0cyA6IHNlcnZlck1heFdpbmRvd0JpdHMsCiAgICAgICAgICByYXc6IHRydWUpOwogICAgfQogIH0KCiAgdm9pZCBfZW5zdXJlRW5jb2RlcigpIHsKICAgIGlmIChlbmNvZGVyID09IG51bGwpIHsKICAgICAgZW5jb2RlciA9IG5ldyBSYXdaTGliRmlsdGVyLmRlZmxhdGVGaWx0ZXIoCiAgICAgICAgICB3aW5kb3dCaXRzOiBzZXJ2ZXJTaWRlID8gc2VydmVyTWF4V2luZG93Qml0cyA6IGNsaWVudE1heFdpbmRvd0JpdHMsCiAgICAgICAgICByYXc6IHRydWUpOwogICAgfQogIH0KCiAgVWludDhMaXN0IHByb2Nlc3NJbmNvbWluZ01lc3NhZ2UoTGlzdDxpbnQ+IG1zZykgewogICAgX2Vuc3VyZURlY29kZXIoKTsKCiAgICB2YXIgZGF0YSA9IDxpbnQ+W107CiAgICBkYXRhLmFkZEFsbChtc2cpOwogICAgZGF0YS5hZGRBbGwoY29uc3QgWzB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmZdKTsKCiAgICBkZWNvZGVyLnByb2Nlc3MoZGF0YSwgMCwgZGF0YS5sZW5ndGgpOwogICAgdmFyIHJlc3VsdCA9IDxpbnQ+W107CiAgICBMaXN0PGludD4gb3V0OwoKICAgIHdoaWxlICgob3V0ID0gZGVjb2Rlci5wcm9jZXNzZWQoKSkgIT0gbnVsbCkgewogICAgICByZXN1bHQuYWRkQWxsKG91dCk7CiAgICB9CgogICAgaWYgKChzZXJ2ZXJTaWRlICYmIGNsaWVudE5vQ29udGV4dFRha2VvdmVyKSB8fAogICAgICAgICghc2VydmVyU2lkZSAmJiBzZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlcikpIHsKICAgICAgZGVjb2RlciA9IG51bGw7CiAgICB9CgogICAgcmV0dXJuIG5ldyBVaW50OExpc3QuZnJvbUxpc3QocmVzdWx0KTsKICB9CgogIExpc3Q8aW50PiBwcm9jZXNzT3V0Z29pbmdNZXNzYWdlKExpc3Q8aW50PiBtc2cpIHsKICAgIF9lbnN1cmVFbmNvZGVyKCk7CiAgICB2YXIgcmVzdWx0ID0gPGludD5bXTsKICAgIFVpbnQ4TGlzdCBidWZmZXI7CgogICAgaWYgKG1zZyBpcyEgVWludDhMaXN0KSB7CiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKG1zZ1tpXSA8IDAgfHwgMjU1IDwgbXNnW2ldKSB7CiAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiTGlzdCBlbGVtZW50IGlzIG5vdCBhIGJ5dGUgdmFsdWUgIgogICAgICAgICAgICAgICIodmFsdWUgJHttc2dbaV19IGF0IGluZGV4ICRpKSIpOwogICAgICAgIH0KICAgICAgfQogICAgICBidWZmZXIgPSBuZXcgVWludDhMaXN0LmZyb21MaXN0KG1zZyk7CiAgICB9IGVsc2UgewogICAgICBidWZmZXIgPSBtc2c7CiAgICB9CgogICAgZW5jb2Rlci5wcm9jZXNzKGJ1ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCk7CgogICAgTGlzdDxpbnQ+IG91dDsKICAgIHdoaWxlICgob3V0ID0gZW5jb2Rlci5wcm9jZXNzZWQoKSkgIT0gbnVsbCkgewogICAgICByZXN1bHQuYWRkQWxsKG91dCk7CiAgICB9CgogICAgaWYgKCghc2VydmVyU2lkZSAmJiBjbGllbnROb0NvbnRleHRUYWtlb3ZlcikgfHwKICAgICAgICAoc2VydmVyU2lkZSAmJiBzZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlcikpIHsKICAgICAgZW5jb2RlciA9IG51bGw7CiAgICB9CgogICAgaWYgKHJlc3VsdC5sZW5ndGggPiA0KSB7CiAgICAgIHJlc3VsdCA9IHJlc3VsdC5zdWJsaXN0KDAsIHJlc3VsdC5sZW5ndGggLSA0KTsKICAgIH0KCiAgICAvLyBSRkMgNzY5MiA3LjIuMy42LiAiR2VuZXJhdGluZyBhbiBFbXB0eSBGcmFnbWVudCIgc2F5cyB0aGF0IGlmIHRoZQogICAgLy8gY29tcHJlc3Npb24gbGlicmFyeSBkb2Vzbid0IGdlbmVyYXRlIGFueSBkYXRhIHdoZW4gdGhlIGJ1ZmVyIGlzIGVtcHR5LAogICAgLy8gdGhlbiBhbiBlbXB0eSB1bmNvbXByZXNzZWQgZGVmbGF0ZSBibG9jayBpcyB1c2VkIGZvciB0aGlzIHB1cnBvc2UuIFRoZQogICAgLy8gMHgwMCBibG9jayBoYXMgdGhlIEJGSU5BTCBoZWFkZXIgYml0IHNldCB0byAwIGFuZCB0aGUgQlRZUEUgaGVhZGVyIHNldCB0bwogICAgLy8gMDAgYWxvbmcgd2l0aCA1IGJpdHMgb2YgcGFkZGluZy4gVGhpcyBibG9jayBkZWNvZGVzIHRvIHplcm8gYnl0ZXMuCiAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PSAwKSB7CiAgICAgIHJldHVybiBbMHgwMF07CiAgICB9CgogICAgcmV0dXJuIHJlc3VsdDsKICB9Cn0KCi8vIFRPRE8oYWpvaG5zZW4pOiBNYWtlIHRoaXMgdHJhbnNmb3JtZXIgcmV1c2FibGUuCmNsYXNzIF9XZWJTb2NrZXRPdXRnb2luZ1RyYW5zZm9ybWVyCiAgICBleHRlbmRzIFN0cmVhbVRyYW5zZm9ybWVyQmFzZTxkeW5hbWljLCBMaXN0PGludD4+IGltcGxlbWVudHMgRXZlbnRTaW5rIHsKICBmaW5hbCBfV2ViU29ja2V0SW1wbCB3ZWJTb2NrZXQ7CiAgRXZlbnRTaW5rPExpc3Q8aW50Pj4gX2V2ZW50U2luazsKCiAgX1dlYlNvY2tldFBlck1lc3NhZ2VEZWZsYXRlIF9kZWZsYXRlSGVscGVyOwoKICBfV2ViU29ja2V0T3V0Z29pbmdUcmFuc2Zvcm1lcih0aGlzLndlYlNvY2tldCkgewogICAgX2RlZmxhdGVIZWxwZXIgPSB3ZWJTb2NrZXQuX2RlZmxhdGU7CiAgfQoKICBTdHJlYW08TGlzdDxpbnQ+PiBiaW5kKFN0cmVhbSBzdHJlYW0pIHsKICAgIHJldHVybiBuZXcgU3RyZWFtPExpc3Q8aW50Pj4uZXZlbnRUcmFuc2Zvcm1lZChzdHJlYW0sCiAgICAgICAgKEV2ZW50U2luazxMaXN0PGludD4+IGV2ZW50U2luaykgewogICAgICBpZiAoX2V2ZW50U2luayAhPSBudWxsKSB7CiAgICAgICAgdGhyb3cgbmV3IFN0YXRlRXJyb3IoIldlYlNvY2tldCB0cmFuc2Zvcm1lciBhbHJlYWR5IHVzZWQiKTsKICAgICAgfQogICAgICBfZXZlbnRTaW5rID0gZXZlbnRTaW5rOwogICAgICByZXR1cm4gdGhpczsKICAgIH0pOwogIH0KCiAgdm9pZCBhZGQobWVzc2FnZSkgewogICAgaWYgKG1lc3NhZ2UgaXMgX1dlYlNvY2tldFBvbmcpIHsKICAgICAgYWRkRnJhbWUoX1dlYlNvY2tldE9wY29kZS5QT05HLCBtZXNzYWdlLnBheWxvYWQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAobWVzc2FnZSBpcyBfV2ViU29ja2V0UGluZykgewogICAgICBhZGRGcmFtZShfV2ViU29ja2V0T3Bjb2RlLlBJTkcsIG1lc3NhZ2UucGF5bG9hZCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIExpc3Q8aW50PiBkYXRhOwogICAgaW50IG9wY29kZTsKICAgIGlmIChtZXNzYWdlICE9IG51bGwpIHsKICAgICAgaWYgKG1lc3NhZ2UgaXMgU3RyaW5nKSB7CiAgICAgICAgb3Bjb2RlID0gX1dlYlNvY2tldE9wY29kZS5URVhUOwogICAgICAgIGRhdGEgPSB1dGY4LmVuY29kZShtZXNzYWdlKTsKICAgICAgfSBlbHNlIGlmIChtZXNzYWdlIGlzIExpc3Q8aW50PikgewogICAgICAgIG9wY29kZSA9IF9XZWJTb2NrZXRPcGNvZGUuQklOQVJZOwogICAgICAgIGRhdGEgPSBtZXNzYWdlOwogICAgICB9IGVsc2UgaWYgKG1lc3NhZ2UgaXMgX0VuY29kZWRTdHJpbmcpIHsKICAgICAgICBvcGNvZGUgPSBfV2ViU29ja2V0T3Bjb2RlLlRFWFQ7CiAgICAgICAgZGF0YSA9IG1lc3NhZ2UuYnl0ZXM7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3IobWVzc2FnZSk7CiAgICAgIH0KCiAgICAgIGlmIChfZGVmbGF0ZUhlbHBlciAhPSBudWxsKSB7CiAgICAgICAgZGF0YSA9IF9kZWZsYXRlSGVscGVyLnByb2Nlc3NPdXRnb2luZ01lc3NhZ2UoZGF0YSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIG9wY29kZSA9IF9XZWJTb2NrZXRPcGNvZGUuVEVYVDsKICAgIH0KICAgIGFkZEZyYW1lKG9wY29kZSwgZGF0YSk7CiAgfQoKICB2b2lkIGFkZEVycm9yKE9iamVjdCBlcnJvciwgW1N0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIF9ldmVudFNpbmsuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIGludCBjb2RlID0gd2ViU29ja2V0Ll9vdXRDbG9zZUNvZGU7CiAgICBTdHJpbmcgcmVhc29uID0gd2ViU29ja2V0Ll9vdXRDbG9zZVJlYXNvbjsKICAgIExpc3Q8aW50PiBkYXRhOwogICAgaWYgKGNvZGUgIT0gbnVsbCkgewogICAgICBkYXRhID0gbmV3IExpc3Q8aW50PigpOwogICAgICBkYXRhLmFkZCgoY29kZSA+PiA4KSAmIDB4RkYpOwogICAgICBkYXRhLmFkZChjb2RlICYgMHhGRik7CiAgICAgIGlmIChyZWFzb24gIT0gbnVsbCkgewogICAgICAgIGRhdGEuYWRkQWxsKHV0ZjguZW5jb2RlKHJlYXNvbikpOwogICAgICB9CiAgICB9CiAgICBhZGRGcmFtZShfV2ViU29ja2V0T3Bjb2RlLkNMT1NFLCBkYXRhKTsKICAgIF9ldmVudFNpbmsuY2xvc2UoKTsKICB9CgogIHZvaWQgYWRkRnJhbWUoaW50IG9wY29kZSwgTGlzdDxpbnQ+IGRhdGEpIHsKICAgIGNyZWF0ZUZyYW1lKAogICAgICAgICAgICBvcGNvZGUsCiAgICAgICAgICAgIGRhdGEsCiAgICAgICAgICAgIHdlYlNvY2tldC5fc2VydmVyU2lkZSwKICAgICAgICAgICAgX2RlZmxhdGVIZWxwZXIgIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgKG9wY29kZSA9PSBfV2ViU29ja2V0T3Bjb2RlLlRFWFQgfHwKICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPT0gX1dlYlNvY2tldE9wY29kZS5CSU5BUlkpKQogICAgICAgIC5mb3JFYWNoKChlKSB7CiAgICAgIF9ldmVudFNpbmsuYWRkKGUpOwogICAgfSk7CiAgfQoKICBzdGF0aWMgSXRlcmFibGU8TGlzdDxpbnQ+PiBjcmVhdGVGcmFtZSgKICAgICAgaW50IG9wY29kZSwgTGlzdDxpbnQ+IGRhdGEsIGJvb2wgc2VydmVyU2lkZSwgYm9vbCBjb21wcmVzc2VkKSB7CiAgICBib29sIG1hc2sgPSAhc2VydmVyU2lkZTsgLy8gTWFza2luZyBub3QgaW1wbGVtZW50ZWQgZm9yIHNlcnZlci4KICAgIGludCBkYXRhTGVuZ3RoID0gZGF0YSA9PSBudWxsID8gMCA6IGRhdGEubGVuZ3RoOwogICAgLy8gRGV0ZXJtaW5lIHRoZSBoZWFkZXIgc2l6ZS4KICAgIGludCBoZWFkZXJTaXplID0gKG1hc2spID8gNiA6IDI7CiAgICBpZiAoZGF0YUxlbmd0aCA+IDY1NTM1KSB7CiAgICAgIGhlYWRlclNpemUgKz0gODsKICAgIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA+IDEyNSkgewogICAgICBoZWFkZXJTaXplICs9IDI7CiAgICB9CiAgICBVaW50OExpc3QgaGVhZGVyID0gbmV3IFVpbnQ4TGlzdChoZWFkZXJTaXplKTsKICAgIGludCBpbmRleCA9IDA7CgogICAgLy8gU2V0IEZJTiBhbmQgb3Bjb2RlLgogICAgdmFyIGhvYyA9IF9XZWJTb2NrZXRQcm90b2NvbFRyYW5zZm9ybWVyLkZJTiB8CiAgICAgICAgKGNvbXByZXNzZWQgPyBfV2ViU29ja2V0UHJvdG9jb2xUcmFuc2Zvcm1lci5SU1YxIDogMCkgfAogICAgICAgIChvcGNvZGUgJiBfV2ViU29ja2V0UHJvdG9jb2xUcmFuc2Zvcm1lci5PUENPREUpOwoKICAgIGhlYWRlcltpbmRleCsrXSA9IGhvYzsKICAgIC8vIERldGVybWluZSBzaXplIGFuZCBwb3NpdGlvbiBvZiBsZW5ndGggZmllbGQuCiAgICBpbnQgbGVuZ3RoQnl0ZXMgPSAxOwogICAgaWYgKGRhdGFMZW5ndGggPiA2NTUzNSkgewogICAgICBoZWFkZXJbaW5kZXgrK10gPSAxMjc7CiAgICAgIGxlbmd0aEJ5dGVzID0gODsKICAgIH0gZWxzZSBpZiAoZGF0YUxlbmd0aCA+IDEyNSkgewogICAgICBoZWFkZXJbaW5kZXgrK10gPSAxMjY7CiAgICAgIGxlbmd0aEJ5dGVzID0gMjsKICAgIH0KICAgIC8vIFdyaXRlIHRoZSBsZW5ndGggaW4gbmV0d29yayBieXRlIG9yZGVyIGludG8gdGhlIGhlYWRlci4KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoQnl0ZXM7IGkrKykgewogICAgICBoZWFkZXJbaW5kZXgrK10gPSBkYXRhTGVuZ3RoID4+ICgoKGxlbmd0aEJ5dGVzIC0gMSkgLSBpKSAqIDgpICYgMHhGRjsKICAgIH0KICAgIGlmIChtYXNrKSB7CiAgICAgIGhlYWRlclsxXSB8PSAxIDw8IDc7CiAgICAgIHZhciBtYXNrQnl0ZXMgPSBfQ3J5cHRvVXRpbHMuZ2V0UmFuZG9tQnl0ZXMoNCk7CiAgICAgIGhlYWRlci5zZXRSYW5nZShpbmRleCwgaW5kZXggKyA0LCBtYXNrQnl0ZXMpOwogICAgICBpbmRleCArPSA0OwogICAgICBpZiAoZGF0YSAhPSBudWxsKSB7CiAgICAgICAgVWludDhMaXN0IGxpc3Q7CiAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHRleHQgbWVzc2FnZSBqdXN0IGRvIHRoZSBtYXNraW5nIGluc2lkZSB0aGUKICAgICAgICAvLyBlbmNvZGVkIGRhdGEuCiAgICAgICAgaWYgKG9wY29kZSA9PSBfV2ViU29ja2V0T3Bjb2RlLlRFWFQgJiYgZGF0YSBpcyBVaW50OExpc3QpIHsKICAgICAgICAgIGxpc3QgPSBkYXRhOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoZGF0YSBpcyBVaW50OExpc3QpIHsKICAgICAgICAgICAgbGlzdCA9IG5ldyBVaW50OExpc3QuZnJvbUxpc3QoZGF0YSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBsaXN0ID0gbmV3IFVpbnQ4TGlzdChkYXRhLmxlbmd0aCk7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgIGlmIChkYXRhW2ldIDwgMCB8fCAyNTUgPCBkYXRhW2ldKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiTGlzdCBlbGVtZW50IGlzIG5vdCBhIGJ5dGUgdmFsdWUgIgogICAgICAgICAgICAgICAgICAgICIodmFsdWUgJHtkYXRhW2ldfSBhdCBpbmRleCAkaSkiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgbGlzdFtpXSA9IGRhdGFbaV07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgaW50IEJMT0NLX1NJWkUgPSAxNjsKICAgICAgICBpbnQgYmxvY2tDb3VudCA9IGxpc3QubGVuZ3RoIH4vIEJMT0NLX1NJWkU7CiAgICAgICAgaWYgKGJsb2NrQ291bnQgPiAwKSB7CiAgICAgICAgICAvLyBDcmVhdGUgbWFzayBibG9jay4KICAgICAgICAgIGludCBtYXNrID0gMDsKICAgICAgICAgIGZvciAoaW50IGkgPSAzOyBpID49IDA7IGktLSkgewogICAgICAgICAgICBtYXNrID0gKG1hc2sgPDwgOCkgfCBtYXNrQnl0ZXNbaV07CiAgICAgICAgICB9CiAgICAgICAgICBJbnQzMng0IGJsb2NrTWFzayA9IG5ldyBJbnQzMng0KG1hc2ssIG1hc2ssIG1hc2ssIG1hc2spOwogICAgICAgICAgSW50MzJ4NExpc3QgYmxvY2tCdWZmZXIgPQogICAgICAgICAgICAgIG5ldyBJbnQzMng0TGlzdC52aWV3KGxpc3QuYnVmZmVyLCAwLCBibG9ja0NvdW50KTsKICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYmxvY2tCdWZmZXIubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgYmxvY2tCdWZmZXJbaV0gXj0gYmxvY2tNYXNrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyBIYW5kbGUgZW5kLgogICAgICAgIGZvciAoaW50IGkgPSBibG9ja0NvdW50ICogQkxPQ0tfU0laRTsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIGxpc3RbaV0gXj0gbWFza0J5dGVzW2kgJiAzXTsKICAgICAgICB9CiAgICAgICAgZGF0YSA9IGxpc3Q7CiAgICAgIH0KICAgIH0KICAgIGFzc2VydChpbmRleCA9PSBoZWFkZXJTaXplKTsKICAgIGlmIChkYXRhID09IG51bGwpIHsKICAgICAgcmV0dXJuIFtoZWFkZXJdOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIFtoZWFkZXIsIGRhdGFdOwogICAgfQogIH0KfQoKY2xhc3MgX1dlYlNvY2tldENvbnN1bWVyIGltcGxlbWVudHMgU3RyZWFtQ29uc3VtZXIgewogIGZpbmFsIF9XZWJTb2NrZXRJbXBsIHdlYlNvY2tldDsKICBmaW5hbCBTb2NrZXQgc29ja2V0OwogIFN0cmVhbUNvbnRyb2xsZXIgX2NvbnRyb2xsZXI7CiAgU3RyZWFtU3Vic2NyaXB0aW9uIF9zdWJzY3JpcHRpb247CiAgYm9vbCBfaXNzdWVkUGF1c2UgPSBmYWxzZTsKICBib29sIF9jbG9zZWQgPSBmYWxzZTsKICBDb21wbGV0ZXIgX2Nsb3NlQ29tcGxldGVyID0gbmV3IENvbXBsZXRlcjxXZWJTb2NrZXQ+KCk7CiAgQ29tcGxldGVyIF9jb21wbGV0ZXI7CgogIF9XZWJTb2NrZXRDb25zdW1lcih0aGlzLndlYlNvY2tldCwgdGhpcy5zb2NrZXQpOwoKICB2b2lkIF9vbkxpc3RlbigpIHsKICAgIGlmIChfc3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgX3N1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIH0KICB9CgogIHZvaWQgX29uUGF1c2UoKSB7CiAgICBpZiAoX3N1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9pc3N1ZWRQYXVzZSA9IHRydWU7CiAgICB9CiAgfQoKICB2b2lkIF9vblJlc3VtZSgpIHsKICAgIGlmIChfc3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgX3N1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9pc3N1ZWRQYXVzZSA9IGZhbHNlOwogICAgfQogIH0KCiAgdm9pZCBfY2FuY2VsKCkgewogICAgaWYgKF9zdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICB2YXIgc3Vic2NyaXB0aW9uID0gX3N1YnNjcmlwdGlvbjsKICAgICAgX3N1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgIHN1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgIH0KICB9CgogIF9lbnN1cmVDb250cm9sbGVyKCkgewogICAgaWYgKF9jb250cm9sbGVyICE9IG51bGwpIHJldHVybjsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXIoCiAgICAgICAgc3luYzogdHJ1ZSwKICAgICAgICBvblBhdXNlOiBfb25QYXVzZSwKICAgICAgICBvblJlc3VtZTogX29uUmVzdW1lLAogICAgICAgIG9uQ2FuY2VsOiBfb25MaXN0ZW4pOwogICAgdmFyIHN0cmVhbSA9IF9jb250cm9sbGVyLnN0cmVhbQogICAgICAgIC50cmFuc2Zvcm0obmV3IF9XZWJTb2NrZXRPdXRnb2luZ1RyYW5zZm9ybWVyKHdlYlNvY2tldCkpOwogICAgc29ja2V0LmFkZFN0cmVhbShzdHJlYW0pLnRoZW4oKF8pIHsKICAgICAgX2RvbmUoKTsKICAgICAgX2Nsb3NlQ29tcGxldGVyLmNvbXBsZXRlKHdlYlNvY2tldCk7CiAgICB9LCBvbkVycm9yOiAoZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZSkgewogICAgICBfY2xvc2VkID0gdHJ1ZTsKICAgICAgX2NhbmNlbCgpOwogICAgICBpZiAoZXJyb3IgaXMgQXJndW1lbnRFcnJvcikgewogICAgICAgIGlmICghX2RvbmUoZXJyb3IsIHN0YWNrVHJhY2UpKSB7CiAgICAgICAgICBfY2xvc2VDb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIF9kb25lKCk7CiAgICAgICAgX2Nsb3NlQ29tcGxldGVyLmNvbXBsZXRlKHdlYlNvY2tldCk7CiAgICAgIH0KICAgIH0pOwogIH0KCiAgYm9vbCBfZG9uZShbZXJyb3IsIFN0YWNrVHJhY2Ugc3RhY2tUcmFjZV0pIHsKICAgIGlmIChfY29tcGxldGVyID09IG51bGwpIHJldHVybiBmYWxzZTsKICAgIGlmIChlcnJvciAhPSBudWxsKSB7CiAgICAgIF9jb21wbGV0ZXIuY29tcGxldGVFcnJvcihlcnJvciwgc3RhY2tUcmFjZSk7CiAgICB9IGVsc2UgewogICAgICBfY29tcGxldGVyLmNvbXBsZXRlKHdlYlNvY2tldCk7CiAgICB9CiAgICBfY29tcGxldGVyID0gbnVsbDsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgRnV0dXJlIGFkZFN0cmVhbSh2YXIgc3RyZWFtKSB7CiAgICBpZiAoX2Nsb3NlZCkgewogICAgICBzdHJlYW0ubGlzdGVuKG51bGwpLmNhbmNlbCgpOwogICAgICByZXR1cm4gbmV3IEZ1dHVyZS52YWx1ZSh3ZWJTb2NrZXQpOwogICAgfQogICAgX2Vuc3VyZUNvbnRyb2xsZXIoKTsKICAgIF9jb21wbGV0ZXIgPSBuZXcgQ29tcGxldGVyKCk7CiAgICBfc3Vic2NyaXB0aW9uID0gc3RyZWFtLmxpc3RlbigoZGF0YSkgewogICAgICBfY29udHJvbGxlci5hZGQoZGF0YSk7CiAgICB9LCBvbkRvbmU6IF9kb25lLCBvbkVycm9yOiBfZG9uZSwgY2FuY2VsT25FcnJvcjogdHJ1ZSk7CiAgICBpZiAoX2lzc3VlZFBhdXNlKSB7CiAgICAgIF9zdWJzY3JpcHRpb24ucGF1c2UoKTsKICAgICAgX2lzc3VlZFBhdXNlID0gZmFsc2U7CiAgICB9CiAgICByZXR1cm4gX2NvbXBsZXRlci5mdXR1cmU7CiAgfQoKICBGdXR1cmUgY2xvc2UoKSB7CiAgICBfZW5zdXJlQ29udHJvbGxlcigpOwogICAgRnV0dXJlIGNsb3NlU29ja2V0KCkgewogICAgICByZXR1cm4gc29ja2V0LmNsb3NlKCkuY2F0Y2hFcnJvcigoXykge30pLnRoZW4oKF8pID0+IHdlYlNvY2tldCk7CiAgICB9CgogICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgIHJldHVybiBfY2xvc2VDb21wbGV0ZXIuZnV0dXJlLnRoZW4oKF8pID0+IGNsb3NlU29ja2V0KCkpOwogIH0KCiAgdm9pZCBhZGQoZGF0YSkgewogICAgaWYgKF9jbG9zZWQpIHJldHVybjsKICAgIF9lbnN1cmVDb250cm9sbGVyKCk7CiAgICAvLyBTdG9wIHNlbmRpbmcgbWVzc2FnZSBpZiBfY29udHJvbGxlciBoYXMgYmVlbiBjbG9zZWQuCiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nkay9pc3N1ZXMvMzc0NDEKICAgIGlmIChfY29udHJvbGxlci5pc0Nsb3NlZCkgcmV0dXJuOwogICAgX2NvbnRyb2xsZXIuYWRkKGRhdGEpOwogIH0KCiAgdm9pZCBjbG9zZVNvY2tldCgpIHsKICAgIF9jbG9zZWQgPSB0cnVlOwogICAgX2NhbmNlbCgpOwogICAgY2xvc2UoKTsKICB9Cn0KCmNsYXNzIF9XZWJTb2NrZXRJbXBsIGV4dGVuZHMgU3RyZWFtIHdpdGggX1NlcnZpY2VPYmplY3QgaW1wbGVtZW50cyBXZWJTb2NrZXQgewogIC8vIFVzZSBkZWZhdWx0IE1hcCBzbyB3ZSBrZWVwIG9yZGVyLgogIHN0YXRpYyBNYXA8aW50LCBfV2ViU29ja2V0SW1wbD4gX3dlYlNvY2tldHMgPSBuZXcgTWFwPGludCwgX1dlYlNvY2tldEltcGw+KCk7CiAgc3RhdGljIGNvbnN0IGludCBERUZBVUxUX1dJTkRPV19CSVRTID0gMTU7CiAgc3RhdGljIGNvbnN0IFN0cmluZyBQRVJfTUVTU0FHRV9ERUZMQVRFID0gInBlcm1lc3NhZ2UtZGVmbGF0ZSI7CgogIGZpbmFsIFN0cmluZyBwcm90b2NvbDsKCiAgU3RyZWFtQ29udHJvbGxlciBfY29udHJvbGxlcjsKICBTdHJlYW1TdWJzY3JpcHRpb24gX3N1YnNjcmlwdGlvbjsKICBTdHJlYW1TaW5rIF9zaW5rOwoKICBmaW5hbCBfc29ja2V0OwogIGZpbmFsIGJvb2wgX3NlcnZlclNpZGU7CiAgaW50IF9yZWFkeVN0YXRlID0gV2ViU29ja2V0LmNvbm5lY3Rpbmc7CiAgYm9vbCBfd3JpdGVDbG9zZWQgPSBmYWxzZTsKICBpbnQgX2Nsb3NlQ29kZTsKICBTdHJpbmcgX2Nsb3NlUmVhc29uOwogIER1cmF0aW9uIF9waW5nSW50ZXJ2YWw7CiAgVGltZXIgX3BpbmdUaW1lcjsKICBfV2ViU29ja2V0Q29uc3VtZXIgX2NvbnN1bWVyOwoKICBpbnQgX291dENsb3NlQ29kZTsKICBTdHJpbmcgX291dENsb3NlUmVhc29uOwogIFRpbWVyIF9jbG9zZVRpbWVyOwogIF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSBfZGVmbGF0ZTsKCiAgc3RhdGljIGZpbmFsIEh0dHBDbGllbnQgX2h0dHBDbGllbnQgPSBuZXcgSHR0cENsaWVudCgpOwoKICBzdGF0aWMgRnV0dXJlPFdlYlNvY2tldD4gY29ubmVjdCgKICAgICAgU3RyaW5nIHVybCwgSXRlcmFibGU8U3RyaW5nPiBwcm90b2NvbHMsIE1hcDxTdHJpbmcsIGR5bmFtaWM+IGhlYWRlcnMsCiAgICAgIHtDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb246IENvbXByZXNzaW9uT3B0aW9ucy5jb21wcmVzc2lvbkRlZmF1bHR9KSB7CiAgICBVcmkgdXJpID0gVXJpLnBhcnNlKHVybCk7CiAgICBpZiAodXJpLnNjaGVtZSAhPSAid3MiICYmIHVyaS5zY2hlbWUgIT0gIndzcyIpIHsKICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQgVVJMIHNjaGVtZSAnJHt1cmkuc2NoZW1lfSciKTsKICAgIH0KCiAgICBSYW5kb20gcmFuZG9tID0gbmV3IFJhbmRvbSgpOwogICAgLy8gR2VuZXJhdGUgMTYgcmFuZG9tIGJ5dGVzLgogICAgVWludDhMaXN0IG5vbmNlRGF0YSA9IG5ldyBVaW50OExpc3QoMTYpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAgICAgIG5vbmNlRGF0YVtpXSA9IHJhbmRvbS5uZXh0SW50KDI1Nik7CiAgICB9CiAgICBTdHJpbmcgbm9uY2UgPSBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0Jhc2U2NChub25jZURhdGEpOwoKICAgIHVyaSA9IG5ldyBVcmkoCiAgICAgICAgc2NoZW1lOiB1cmkuc2NoZW1lID09ICJ3c3MiID8gImh0dHBzIiA6ICJodHRwIiwKICAgICAgICB1c2VySW5mbzogdXJpLnVzZXJJbmZvLAogICAgICAgIGhvc3Q6IHVyaS5ob3N0LAogICAgICAgIHBvcnQ6IHVyaS5wb3J0LAogICAgICAgIHBhdGg6IHVyaS5wYXRoLAogICAgICAgIHF1ZXJ5OiB1cmkucXVlcnksCiAgICAgICAgZnJhZ21lbnQ6IHVyaS5mcmFnbWVudCk7CiAgICByZXR1cm4gX2h0dHBDbGllbnQub3BlblVybCgiR0VUIiwgdXJpKS50aGVuKChyZXF1ZXN0KSB7CiAgICAgIGlmICh1cmkudXNlckluZm8gIT0gbnVsbCAmJiAhdXJpLnVzZXJJbmZvLmlzRW1wdHkpIHsKICAgICAgICAvLyBJZiB0aGUgVVJMIGNvbnRhaW5zIHVzZXIgaW5mb3JtYXRpb24gdXNlIHRoYXQgZm9yIGJhc2ljCiAgICAgICAgLy8gYXV0aG9yaXphdGlvbi4KICAgICAgICBTdHJpbmcgYXV0aCA9IF9DcnlwdG9VdGlscy5ieXRlc1RvQmFzZTY0KHV0ZjguZW5jb2RlKHVyaS51c2VySW5mbykpOwogICAgICAgIHJlcXVlc3QuaGVhZGVycy5zZXQoSHR0cEhlYWRlcnMuYXV0aG9yaXphdGlvbkhlYWRlciwgIkJhc2ljICRhdXRoIik7CiAgICAgIH0KICAgICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkgewogICAgICAgIGhlYWRlcnMuZm9yRWFjaCgoZmllbGQsIHZhbHVlKSA9PiByZXF1ZXN0LmhlYWRlcnMuYWRkKGZpZWxkLCB2YWx1ZSkpOwogICAgICB9CiAgICAgIC8vIFNldHVwIHRoZSBpbml0aWFsIGhhbmRzaGFrZS4KICAgICAgcmVxdWVzdC5oZWFkZXJzCiAgICAgICAgLi5zZXQoSHR0cEhlYWRlcnMuY29ubmVjdGlvbkhlYWRlciwgIlVwZ3JhZGUiKQogICAgICAgIC4uc2V0KEh0dHBIZWFkZXJzLnVwZ3JhZGVIZWFkZXIsICJ3ZWJzb2NrZXQiKQogICAgICAgIC4uc2V0KCJTZWMtV2ViU29ja2V0LUtleSIsIG5vbmNlKQogICAgICAgIC4uc2V0KCJDYWNoZS1Db250cm9sIiwgIm5vLWNhY2hlIikKICAgICAgICAuLnNldCgiU2VjLVdlYlNvY2tldC1WZXJzaW9uIiwgIjEzIik7CiAgICAgIGlmIChwcm90b2NvbHMgIT0gbnVsbCkgewogICAgICAgIHJlcXVlc3QuaGVhZGVycy5hZGQoIlNlYy1XZWJTb2NrZXQtUHJvdG9jb2wiLCBwcm90b2NvbHMudG9MaXN0KCkpOwogICAgICB9CgogICAgICBpZiAoY29tcHJlc3Npb24uZW5hYmxlZCkgewogICAgICAgIHJlcXVlc3QuaGVhZGVycwogICAgICAgICAgICAuYWRkKCJTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMiLCBjb21wcmVzc2lvbi5fY3JlYXRlSGVhZGVyKCkpOwogICAgICB9CgogICAgICByZXR1cm4gcmVxdWVzdC5jbG9zZSgpOwogICAgfSkudGhlbigocmVzcG9uc2UpIHsKICAgICAgdm9pZCBlcnJvcihTdHJpbmcgbWVzc2FnZSkgewogICAgICAgIC8vIEZsdXNoIGRhdGEuCiAgICAgICAgcmVzcG9uc2UuZGV0YWNoU29ja2V0KCkudGhlbigoc29ja2V0KSB7CiAgICAgICAgICBzb2NrZXQuZGVzdHJveSgpOwogICAgICAgIH0pOwogICAgICAgIHRocm93IG5ldyBXZWJTb2NrZXRFeGNlcHRpb24obWVzc2FnZSk7CiAgICAgIH0KCiAgICAgIGlmIChyZXNwb25zZS5zdGF0dXNDb2RlICE9IEh0dHBTdGF0dXMuc3dpdGNoaW5nUHJvdG9jb2xzIHx8CiAgICAgICAgICByZXNwb25zZS5oZWFkZXJzW0h0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXJdID09IG51bGwgfHwKICAgICAgICAgICFyZXNwb25zZS5oZWFkZXJzW0h0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXJdCiAgICAgICAgICAgICAgLmFueSgodmFsdWUpID0+IHZhbHVlLnRvTG93ZXJDYXNlKCkgPT0gInVwZ3JhZGUiKSB8fAogICAgICAgICAgcmVzcG9uc2UuaGVhZGVycy52YWx1ZShIdHRwSGVhZGVycy51cGdyYWRlSGVhZGVyKS50b0xvd2VyQ2FzZSgpICE9CiAgICAgICAgICAgICAgIndlYnNvY2tldCIpIHsKICAgICAgICBlcnJvcigiQ29ubmVjdGlvbiB0byAnJHVyaScgd2FzIG5vdCB1cGdyYWRlZCB0byB3ZWJzb2NrZXQiKTsKICAgICAgfQogICAgICBTdHJpbmcgYWNjZXB0ID0gcmVzcG9uc2UuaGVhZGVycy52YWx1ZSgiU2VjLVdlYlNvY2tldC1BY2NlcHQiKTsKICAgICAgaWYgKGFjY2VwdCA9PSBudWxsKSB7CiAgICAgICAgZXJyb3IoIlJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBhICdTZWMtV2ViU29ja2V0LUFjY2VwdCcgaGVhZGVyIik7CiAgICAgIH0KICAgICAgX1NIQTEgc2hhMSA9IG5ldyBfU0hBMSgpOwogICAgICBzaGExLmFkZCgiJG5vbmNlJF93ZWJTb2NrZXRHVUlEIi5jb2RlVW5pdHMpOwogICAgICBMaXN0PGludD4gZXhwZWN0ZWRBY2NlcHQgPSBzaGExLmNsb3NlKCk7CiAgICAgIExpc3Q8aW50PiByZWNlaXZlZEFjY2VwdCA9IF9DcnlwdG9VdGlscy5iYXNlNjRTdHJpbmdUb0J5dGVzKGFjY2VwdCk7CiAgICAgIGlmIChleHBlY3RlZEFjY2VwdC5sZW5ndGggIT0gcmVjZWl2ZWRBY2NlcHQubGVuZ3RoKSB7CiAgICAgICAgZXJyb3IoIlJlc3BvbnNlIGhlYWRlciAnU2VjLVdlYlNvY2tldC1BY2NlcHQnIGlzIHRoZSB3cm9uZyBsZW5ndGgiKTsKICAgICAgfQogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGV4cGVjdGVkQWNjZXB0Lmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGV4cGVjdGVkQWNjZXB0W2ldICE9IHJlY2VpdmVkQWNjZXB0W2ldKSB7CiAgICAgICAgICBlcnJvcigiQmFkIHJlc3BvbnNlICdTZWMtV2ViU29ja2V0LUFjY2VwdCcgaGVhZGVyIik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBwcm90b2NvbCA9IHJlc3BvbnNlLmhlYWRlcnMudmFsdWUoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKTsKCiAgICAgIF9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZSBkZWZsYXRlID0KICAgICAgICAgIG5lZ290aWF0ZUNsaWVudENvbXByZXNzaW9uKHJlc3BvbnNlLCBjb21wcmVzc2lvbik7CgogICAgICByZXR1cm4gcmVzcG9uc2UuZGV0YWNoU29ja2V0KCkudGhlbjxXZWJTb2NrZXQ+KChzb2NrZXQpID0+CiAgICAgICAgICBuZXcgX1dlYlNvY2tldEltcGwuX2Zyb21Tb2NrZXQoCiAgICAgICAgICAgICAgc29ja2V0LCBwcm90b2NvbCwgY29tcHJlc3Npb24sIGZhbHNlLCBkZWZsYXRlKSk7CiAgICB9KTsKICB9CgogIHN0YXRpYyBfV2ViU29ja2V0UGVyTWVzc2FnZURlZmxhdGUgbmVnb3RpYXRlQ2xpZW50Q29tcHJlc3Npb24oCiAgICAgIEh0dHBDbGllbnRSZXNwb25zZSByZXNwb25zZSwgQ29tcHJlc3Npb25PcHRpb25zIGNvbXByZXNzaW9uKSB7CiAgICBTdHJpbmcgZXh0ZW5zaW9uSGVhZGVyID0gcmVzcG9uc2UuaGVhZGVycy52YWx1ZSgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJyk7CgogICAgaWYgKGV4dGVuc2lvbkhlYWRlciA9PSBudWxsKSB7CiAgICAgIGV4dGVuc2lvbkhlYWRlciA9ICIiOwogICAgfQoKICAgIHZhciBodiA9IEhlYWRlclZhbHVlLnBhcnNlKGV4dGVuc2lvbkhlYWRlciwgdmFsdWVTZXBhcmF0b3I6ICcsJyk7CgogICAgaWYgKGNvbXByZXNzaW9uLmVuYWJsZWQgJiYgaHYudmFsdWUgPT0gUEVSX01FU1NBR0VfREVGTEFURSkgewogICAgICB2YXIgc2VydmVyTm9Db250ZXh0VGFrZW92ZXIgPQogICAgICAgICAgaHYucGFyYW1ldGVycy5jb250YWluc0tleShfc2VydmVyTm9Db250ZXh0VGFrZW92ZXIpOwogICAgICB2YXIgY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIgPQogICAgICAgICAgaHYucGFyYW1ldGVycy5jb250YWluc0tleShfY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIpOwoKICAgICAgaW50IGdldFdpbmRvd0JpdHMoU3RyaW5nIHR5cGUpIHsKICAgICAgICB2YXIgbyA9IGh2LnBhcmFtZXRlcnNbdHlwZV07CiAgICAgICAgaWYgKG8gPT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIERFRkFVTFRfV0lORE9XX0JJVFM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW50LnBhcnNlKG8sIG9uRXJyb3I6IChzKSA9PiBERUZBVUxUX1dJTkRPV19CSVRTKTsKICAgICAgfQoKICAgICAgcmV0dXJuIG5ldyBfV2ViU29ja2V0UGVyTWVzc2FnZURlZmxhdGUoCiAgICAgICAgICBjbGllbnRNYXhXaW5kb3dCaXRzOiBnZXRXaW5kb3dCaXRzKF9jbGllbnRNYXhXaW5kb3dCaXRzKSwKICAgICAgICAgIHNlcnZlck1heFdpbmRvd0JpdHM6IGdldFdpbmRvd0JpdHMoX3NlcnZlck1heFdpbmRvd0JpdHMpLAogICAgICAgICAgY2xpZW50Tm9Db250ZXh0VGFrZW92ZXI6IGNsaWVudE5vQ29udGV4dFRha2VvdmVyLAogICAgICAgICAgc2VydmVyTm9Db250ZXh0VGFrZW92ZXI6IHNlcnZlck5vQ29udGV4dFRha2VvdmVyKTsKICAgIH0KCiAgICByZXR1cm4gbnVsbDsKICB9CgogIF9XZWJTb2NrZXRJbXBsLl9mcm9tU29ja2V0KAogICAgICB0aGlzLl9zb2NrZXQsIHRoaXMucHJvdG9jb2wsIENvbXByZXNzaW9uT3B0aW9ucyBjb21wcmVzc2lvbiwKICAgICAgW3RoaXMuX3NlcnZlclNpZGUgPSBmYWxzZSwgX1dlYlNvY2tldFBlck1lc3NhZ2VEZWZsYXRlIGRlZmxhdGVdKSB7CiAgICBfY29uc3VtZXIgPSBuZXcgX1dlYlNvY2tldENvbnN1bWVyKHRoaXMsIF9zb2NrZXQpOwogICAgX3NpbmsgPSBuZXcgX1N0cmVhbVNpbmtJbXBsKF9jb25zdW1lcik7CiAgICBfcmVhZHlTdGF0ZSA9IFdlYlNvY2tldC5vcGVuOwogICAgX2RlZmxhdGUgPSBkZWZsYXRlOwoKICAgIHZhciB0cmFuc2Zvcm1lciA9IG5ldyBfV2ViU29ja2V0UHJvdG9jb2xUcmFuc2Zvcm1lcihfc2VydmVyU2lkZSwgX2RlZmxhdGUpOwogICAgX3N1YnNjcmlwdGlvbiA9IHRyYW5zZm9ybWVyLmJpbmQoX3NvY2tldCkubGlzdGVuKChkYXRhKSB7CiAgICAgIGlmIChkYXRhIGlzIF9XZWJTb2NrZXRQaW5nKSB7CiAgICAgICAgaWYgKCFfd3JpdGVDbG9zZWQpIF9jb25zdW1lci5hZGQobmV3IF9XZWJTb2NrZXRQb25nKGRhdGEucGF5bG9hZCkpOwogICAgICB9IGVsc2UgaWYgKGRhdGEgaXMgX1dlYlNvY2tldFBvbmcpIHsKICAgICAgICAvLyBTaW1wbHkgc2V0IHBpbmdJbnRlcnZhbCwgYXMgaXQnbGwgY2FuY2VsIGFueSB0aW1lcnMuCiAgICAgICAgcGluZ0ludGVydmFsID0gX3BpbmdJbnRlcnZhbDsKICAgICAgfSBlbHNlIHsKICAgICAgICBfY29udHJvbGxlci5hZGQoZGF0YSk7CiAgICAgIH0KICAgIH0sIG9uRXJyb3I6IChlcnJvciwgc3RhY2tUcmFjZSkgewogICAgICBpZiAoX2Nsb3NlVGltZXIgIT0gbnVsbCkgX2Nsb3NlVGltZXIuY2FuY2VsKCk7CiAgICAgIGlmIChlcnJvciBpcyBGb3JtYXRFeGNlcHRpb24pIHsKICAgICAgICBfY2xvc2UoV2ViU29ja2V0U3RhdHVzLklOVkFMSURfRlJBTUVfUEFZTE9BRF9EQVRBKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfY2xvc2UoV2ViU29ja2V0U3RhdHVzLlBST1RPQ09MX0VSUk9SKTsKICAgICAgfQogICAgICAvLyBBbiBlcnJvciBoYXBwZW5lZCwgc2V0IHRoZSBjbG9zZSBjb2RlIHNldCBhYm92ZS4KICAgICAgX2Nsb3NlQ29kZSA9IF9vdXRDbG9zZUNvZGU7CiAgICAgIF9jbG9zZVJlYXNvbiA9IF9vdXRDbG9zZVJlYXNvbjsKICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgIH0sIG9uRG9uZTogKCkgewogICAgICBpZiAoX2Nsb3NlVGltZXIgIT0gbnVsbCkgX2Nsb3NlVGltZXIuY2FuY2VsKCk7CiAgICAgIGlmIChfcmVhZHlTdGF0ZSA9PSBXZWJTb2NrZXQub3BlbikgewogICAgICAgIF9yZWFkeVN0YXRlID0gV2ViU29ja2V0LmNsb3Npbmc7CiAgICAgICAgaWYgKCFfaXNSZXNlcnZlZFN0YXR1c0NvZGUodHJhbnNmb3JtZXIuY2xvc2VDb2RlKSkgewogICAgICAgICAgX2Nsb3NlKHRyYW5zZm9ybWVyLmNsb3NlQ29kZSwgdHJhbnNmb3JtZXIuY2xvc2VSZWFzb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfY2xvc2UoKTsKICAgICAgICB9CiAgICAgICAgX3JlYWR5U3RhdGUgPSBXZWJTb2NrZXQuY2xvc2VkOwogICAgICB9CiAgICAgIC8vIFByb3RvY29sIGNsb3NlLCB1c2UgY2xvc2UgY29kZSBmcm9tIHRyYW5zZm9ybWVyLgogICAgICBfY2xvc2VDb2RlID0gdHJhbnNmb3JtZXIuY2xvc2VDb2RlOwogICAgICBfY2xvc2VSZWFzb24gPSB0cmFuc2Zvcm1lci5jbG9zZVJlYXNvbjsKICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgIH0sIGNhbmNlbE9uRXJyb3I6IHRydWUpOwogICAgX3N1YnNjcmlwdGlvbi5wYXVzZSgpOwogICAgX2NvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcigKICAgICAgICBzeW5jOiB0cnVlLAogICAgICAgIG9uTGlzdGVuOiBfc3Vic2NyaXB0aW9uLnJlc3VtZSwKICAgICAgICBvbkNhbmNlbDogKCkgewogICAgICAgICAgX3N1YnNjcmlwdGlvbi5jYW5jZWwoKTsKICAgICAgICAgIF9zdWJzY3JpcHRpb24gPSBudWxsOwogICAgICAgIH0sCiAgICAgICAgb25QYXVzZTogX3N1YnNjcmlwdGlvbi5wYXVzZSwKICAgICAgICBvblJlc3VtZTogX3N1YnNjcmlwdGlvbi5yZXN1bWUpOwoKICAgIF93ZWJTb2NrZXRzW19zZXJ2aWNlSWRdID0gdGhpczsKICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbiBsaXN0ZW4odm9pZCBvbkRhdGEobWVzc2FnZSksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gX2NvbnRyb2xsZXIuc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgRHVyYXRpb24gZ2V0IHBpbmdJbnRlcnZhbCA9PiBfcGluZ0ludGVydmFsOwoKICB2b2lkIHNldCBwaW5nSW50ZXJ2YWwoRHVyYXRpb24gaW50ZXJ2YWwpIHsKICAgIGlmIChfd3JpdGVDbG9zZWQpIHJldHVybjsKICAgIGlmIChfcGluZ1RpbWVyICE9IG51bGwpIF9waW5nVGltZXIuY2FuY2VsKCk7CiAgICBfcGluZ0ludGVydmFsID0gaW50ZXJ2YWw7CgogICAgaWYgKF9waW5nSW50ZXJ2YWwgPT0gbnVsbCkgcmV0dXJuOwoKICAgIF9waW5nVGltZXIgPSBuZXcgVGltZXIoX3BpbmdJbnRlcnZhbCwgKCkgewogICAgICBpZiAoX3dyaXRlQ2xvc2VkKSByZXR1cm47CiAgICAgIF9jb25zdW1lci5hZGQobmV3IF9XZWJTb2NrZXRQaW5nKCkpOwogICAgICBfcGluZ1RpbWVyID0gbmV3IFRpbWVyKF9waW5nSW50ZXJ2YWwsICgpIHsKICAgICAgICAvLyBObyBwb25nIHJlY2VpdmVkLgogICAgICAgIF9jbG9zZShXZWJTb2NrZXRTdGF0dXMuR09JTkdfQVdBWSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQoKICBpbnQgZ2V0IHJlYWR5U3RhdGUgPT4gX3JlYWR5U3RhdGU7CgogIFN0cmluZyBnZXQgZXh0ZW5zaW9ucyA9PiBudWxsOwogIGludCBnZXQgY2xvc2VDb2RlID0+IF9jbG9zZUNvZGU7CiAgU3RyaW5nIGdldCBjbG9zZVJlYXNvbiA9PiBfY2xvc2VSZWFzb247CgogIHZvaWQgYWRkKGRhdGEpIHsKICAgIF9zaW5rLmFkZChkYXRhKTsKICB9CgogIHZvaWQgYWRkVXRmOFRleHQoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICBBcmd1bWVudEVycm9yLmNoZWNrTm90TnVsbChieXRlcywgImJ5dGVzIik7CiAgICBfc2luay5hZGQobmV3IF9FbmNvZGVkU3RyaW5nKGJ5dGVzKSk7CiAgfQoKICB2b2lkIGFkZEVycm9yKGVycm9yLCBbU3RhY2tUcmFjZSBzdGFja1RyYWNlXSkgewogICAgX3NpbmsuYWRkRXJyb3IoZXJyb3IsIHN0YWNrVHJhY2UpOwogIH0KCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW0gc3RyZWFtKSA9PiBfc2luay5hZGRTdHJlYW0oc3RyZWFtKTsKICBGdXR1cmUgZ2V0IGRvbmUgPT4gX3NpbmsuZG9uZTsKCiAgRnV0dXJlIGNsb3NlKFtpbnQgY29kZSwgU3RyaW5nIHJlYXNvbl0pIHsKICAgIGlmIChfaXNSZXNlcnZlZFN0YXR1c0NvZGUoY29kZSkpIHsKICAgICAgdGhyb3cgbmV3IFdlYlNvY2tldEV4Y2VwdGlvbigiUmVzZXJ2ZWQgc3RhdHVzIGNvZGUgJGNvZGUiKTsKICAgIH0KICAgIGlmIChfb3V0Q2xvc2VDb2RlID09IG51bGwpIHsKICAgICAgX291dENsb3NlQ29kZSA9IGNvZGU7CiAgICAgIF9vdXRDbG9zZVJlYXNvbiA9IHJlYXNvbjsKICAgIH0KICAgIGlmICghX2NvbnRyb2xsZXIuaXNDbG9zZWQpIHsKICAgICAgLy8gSWYgYSBjbG9zZSBoYXMgbm90IHlldCBiZWVuIHJlY2VpdmVkIGZyb20gdGhlIG90aGVyIGVuZCB0aGVuCiAgICAgIC8vICAgMSkgbWFrZSBzdXJlIHRvIGxpc3RlbiBvbiB0aGUgc3RyZWFtIHNvIHRoZSBjbG9zZSBmcmFtZSB3aWxsIGJlCiAgICAgIC8vICAgICAgcHJvY2Vzc2VkIGlmIHJlY2VpdmVkLgogICAgICAvLyAgIDIpIHNldCBhIHRpbWVyIHRlcm1pbmF0ZSB0aGUgY29ubmVjdGlvbiBpZiBhIGNsb3NlIGZyYW1lIGlzCiAgICAgIC8vICAgICAgbm90IHJlY2VpdmVkLgogICAgICBpZiAoIV9jb250cm9sbGVyLmhhc0xpc3RlbmVyICYmIF9zdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICAgIF9jb250cm9sbGVyLnN0cmVhbS5kcmFpbigpLmNhdGNoRXJyb3IoKF8pID0+IHt9KTsKICAgICAgfQogICAgICBpZiAoX2Nsb3NlVGltZXIgPT0gbnVsbCkgewogICAgICAgIC8vIFdoZW4gY2xvc2luZyB0aGUgd2ViLXNvY2tldCwgd2Ugbm8gbG9uZ2VyIGFjY2VwdCBkYXRhLgogICAgICAgIF9jbG9zZVRpbWVyID0gbmV3IFRpbWVyKGNvbnN0IER1cmF0aW9uKHNlY29uZHM6IDUpLCAoKSB7CiAgICAgICAgICAvLyBSZXVzZSBjb2RlIGFuZCByZWFzb24gZnJvbSB0aGUgbG9jYWwgY2xvc2UuCiAgICAgICAgICBfY2xvc2VDb2RlID0gX291dENsb3NlQ29kZTsKICAgICAgICAgIF9jbG9zZVJlYXNvbiA9IF9vdXRDbG9zZVJlYXNvbjsKICAgICAgICAgIGlmIChfc3Vic2NyaXB0aW9uICE9IG51bGwpIF9zdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICAgICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICAgICAgX3dlYlNvY2tldHMucmVtb3ZlKF9zZXJ2aWNlSWQpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gX3NpbmsuY2xvc2UoKTsKICB9CgogIHN0YXRpYyBTdHJpbmcgZ2V0IHVzZXJBZ2VudCA9PiBfaHR0cENsaWVudC51c2VyQWdlbnQ7CgogIHN0YXRpYyBzZXQgdXNlckFnZW50KFN0cmluZyB1c2VyQWdlbnQpIHsKICAgIF9odHRwQ2xpZW50LnVzZXJBZ2VudCA9IHVzZXJBZ2VudDsKICB9CgogIHZvaWQgX2Nsb3NlKFtpbnQgY29kZSwgU3RyaW5nIHJlYXNvbl0pIHsKICAgIGlmIChfd3JpdGVDbG9zZWQpIHJldHVybjsKICAgIGlmIChfb3V0Q2xvc2VDb2RlID09IG51bGwpIHsKICAgICAgX291dENsb3NlQ29kZSA9IGNvZGU7CiAgICAgIF9vdXRDbG9zZVJlYXNvbiA9IHJlYXNvbjsKICAgIH0KICAgIF93cml0ZUNsb3NlZCA9IHRydWU7CiAgICBfY29uc3VtZXIuY2xvc2VTb2NrZXQoKTsKICAgIF93ZWJTb2NrZXRzLnJlbW92ZShfc2VydmljZUlkKTsKICB9CgogIFN0cmluZyBnZXQgX3NlcnZpY2VUeXBlUGF0aCA9PiAnaW8vd2Vic29ja2V0cyc7CiAgU3RyaW5nIGdldCBfc2VydmljZVR5cGVOYW1lID0+ICdXZWJTb2NrZXQnOwoKICBNYXA8U3RyaW5nLCBkeW5hbWljPiBfdG9KU09OKGJvb2wgcmVmKSB7CiAgICB2YXIgbmFtZSA9ICcke19zb2NrZXQuYWRkcmVzcy5ob3N0fToke19zb2NrZXQucG9ydH0nOwogICAgdmFyIHIgPSA8U3RyaW5nLCBkeW5hbWljPnsKICAgICAgJ2lkJzogX3NlcnZpY2VQYXRoLAogICAgICAndHlwZSc6IF9zZXJ2aWNlVHlwZShyZWYpLAogICAgICAnbmFtZSc6IG5hbWUsCiAgICAgICd1c2VyX25hbWUnOiBuYW1lLAogICAgfTsKICAgIGlmIChyZWYpIHsKICAgICAgcmV0dXJuIHI7CiAgICB9CiAgICB0cnkgewogICAgICByWydzb2NrZXQnXSA9IF9zb2NrZXQuX3RvSlNPTih0cnVlKTsKICAgIH0gY2F0Y2ggKF8pIHsKICAgICAgclsnc29ja2V0J10gPSB7CiAgICAgICAgJ2lkJzogX3NlcnZpY2VQYXRoLAogICAgICAgICd0eXBlJzogJ0BTb2NrZXQnLAogICAgICAgICduYW1lJzogJ1VzZXJTb2NrZXQnLAogICAgICAgICd1c2VyX25hbWUnOiAnVXNlclNvY2tldCcsCiAgICAgIH07CiAgICB9CiAgICByZXR1cm4gcjsKICB9CgogIHN0YXRpYyBib29sIF9pc1Jlc2VydmVkU3RhdHVzQ29kZShpbnQgY29kZSkgewogICAgcmV0dXJuIGNvZGUgIT0gbnVsbCAmJgogICAgICAgIChjb2RlIDwgV2ViU29ja2V0U3RhdHVzLk5PUk1BTF9DTE9TVVJFIHx8CiAgICAgICAgICAgIGNvZGUgPT0gV2ViU29ja2V0U3RhdHVzLlJFU0VSVkVEXzEwMDQgfHwKICAgICAgICAgICAgY29kZSA9PSBXZWJTb2NrZXRTdGF0dXMuTk9fU1RBVFVTX1JFQ0VJVkVEIHx8CiAgICAgICAgICAgIGNvZGUgPT0gV2ViU29ja2V0U3RhdHVzLkFCTk9STUFMX0NMT1NVUkUgfHwKICAgICAgICAgICAgKGNvZGUgPiBXZWJTb2NrZXRTdGF0dXMuSU5URVJOQUxfU0VSVkVSX0VSUk9SICYmCiAgICAgICAgICAgICAgICBjb2RlIDwgV2ViU29ja2V0U3RhdHVzLlJFU0VSVkVEXzEwMTUpIHx8CiAgICAgICAgICAgIChjb2RlID49IFdlYlNvY2tldFN0YXR1cy5SRVNFUlZFRF8xMDE1ICYmIGNvZGUgPCAzMDAwKSk7CiAgfQp9CoUnAE5OPAEUAUZGRj4+AR0eHR0fAgEZJR0fIyMjIyMeHR4kJCQkJAIBFxkeAgEEREsrBCIWFUUkAgEESE08A0xNJQRNPiYeIiEdIB8gHyAgICEBFhUcFBEYHyUjGzg2GwFOARoqPwEoTAFFIkcgRQgeEwgEATksBAERGAQBBkYGHk0TIxxBBh1BBksgIB8kAS02PAwBJQE6JiIVIw4MATQ8R0AQFTk3R0AQLQ46MjRHEzwMHiooHjE8DB0WJB8kFiQfEyAbDBEmIyApGwwKDx5BMBkMESVKTjMnGTMMO1EiI0ETRUc+DkEMATMTCggBIA8GBAE6HzEgKDkrKjsIHB0zHB4WJ0kKQSJENycKMxgZCAYTJCg5BgQBFxMaSwgVDRlNCCUXBgQBFSMVBAEZRygnHxsnHSATJjITJjITCiAPHAgNGAYEARwQKC04CAElKS4RKyERCDgGHAQBHBcjOCwiJTwMNEE8DCQ7DAoZHA8BIkIPASJCDwYcBAEbMCwqBAEgPxISDx0jIRkEAgEXGykCARcbKQIBTQEgOiYyMy0pAUgBNx45RS0UGwgBHwQBQC4TEyknORtMEQgPBjUTBAE5TSUnHg8tEx9IBgExJA81Pz8/IDFAPB5CCAFLASpBKj4GAT86SUwwPUQlLyhOChkeETgVFSMNHAYEAVA/TQEcAUZRMAFKJEI0JEI0NTw8MzMdARYGAREEATcjFAZBFAYcSz4IIkdDFAZFLhQGPRcUBhEEAgEkICAbGxMBGRkBH0VEKysgARobMU4WBgQBGhsxThYGBAE0FgEYFjEBKxoTATIaBgEzNBYGASsEATQWGhYBHS0qRjAKCCwNFAYBLwETMhoGATQzFgYBHTUGAUlOTlFKHhUGARMEAgEzJE0iIwEuATIpBAEqOisgRAgeEwgEARYlOA4GJTgOBhQQGx8oJSkqGC4oHg8qCAEkPAgNJgYcBAE5LAQBESgvFBgeJB0cKggGLBgEAS4RFBIjJjQ4FxkIBAEqRkQ1IiUeFyMXBjITARsyQDkBGzQZHh0XIx0XBj8sTAYQGzY0EhoYRBlEFxEjMRMvNDJMNxAhDgwKIzQeIBgpLwxDJEA5KQwKF0YnChUIBiEYFw0dBgQCATUiFyAkHRg6GAEzARUhHgYEARQhHQ0bBgQBFSEeDRwGBAETISgcHQYEARglKBQbHR4kQigPKzEWESQpPAoPES0ICAQBLyoZMw0mBhcRBAEhEyQqBhkiKx08GB0cBh4EARMZG0cGARk+BAETGRk8NSYbBAEXFA8NBAIBTydQLUIBGQEgJBQBERoqHRIXGhQgARUaFSgBOgEkTFEeNU4GASIhLSMqBjoBEzggGBgYGiE8O0MaTU0IHU4IJhY3NiorLh9LCAEhGEsIAR4ZIxcwHAwvCAFCRDpDTR1FCEYcSwggMy9LPE0IODY/CghHASw9AUEqPwgEAUFFUQEjHAYBRgFCJD8kPwEnJRkmCgFCCAEuREQ8PQYBEQQBHkNJNywiGAFQPiRMK0AmDx8IJjUmPA8wCDoiJhsUNSspPUIRFAooCDoqLhsdGygUKBciIAsmKQEkBAEyPy1JBAEuAS0eMR4BJwEvICsxHSwKCAQBJQEhIyoBExUEASYwKgQBMicEAT4hASwnQgYhHCAGIUZLJUccPzoIIUJBOSYqPR8qDAgGGgQBOAErJwQBKx4hHCAGGR0kBAEyLgErOh8aIRQZBw8QBgorEhYcGx4jCQYOBAEwGzI1Ojg9OUUEAgEeZGFydDpfaHR0cC93ZWJzb2NrZXRfaW1wbC5kYXJ0LW9yZy1kYXJ0bGFuZy1zZGs6Ly8vc2RrL2xpYi9faHR0cC9jcnlwdG8uZGFydLjlLy8gQ29weXJpZ2h0IChjKSAyMDEyLCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuICBQbGVhc2Ugc2VlIHRoZSBBVVRIT1JTIGZpbGUKLy8gZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGEKLy8gQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZS4KCnBhcnQgb2YgZGFydC5faHR0cDsKCmNsYXNzIF9DcnlwdG9VdGlscyB7CiAgc3RhdGljIGNvbnN0IGludCBQQUQgPSA2MTsgLy8gJz0nCiAgc3RhdGljIGNvbnN0IGludCBDUiA9IDEzOyAvLyAnXHInCiAgc3RhdGljIGNvbnN0IGludCBMRiA9IDEwOyAvLyAnXG4nCiAgc3RhdGljIGNvbnN0IGludCBMSU5FX0xFTkdUSCA9IDc2OwoKICBzdGF0aWMgY29uc3QgU3RyaW5nIF9lbmNvZGVUYWJsZSA9CiAgICAgICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKCiAgc3RhdGljIGNvbnN0IFN0cmluZyBfZW5jb2RlVGFibGVVcmxTYWZlID0KICAgICAgIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV8iOwoKICAvLyBMb29rdXAgdGFibGUgdXNlZCBmb3IgZmluZGluZyBCYXNlIDY0IGFscGhhYmV0IGluZGV4IG9mIGEgZ2l2ZW4gYnl0ZS4KICAvLyAtMiA6IE91dHNpZGUgQmFzZSA2NCBhbHBoYWJldC4KICAvLyAtMSA6ICdccicgb3IgJ1xuJwogIC8vICAwIDogPSAoUGFkZGluZyBjaGFyYWN0ZXIpLgogIC8vID4wIDogQmFzZSA2NCBhbHBoYWJldCBpbmRleCBvZiBnaXZlbiBieXRlLgogIHN0YXRpYyBjb25zdCBMaXN0PGludD4gX2RlY29kZVRhYmxlID0gY29uc3QgWwogICAgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0xLCAtMiwgLTIsIC0xLCAtMiwgLTIsIC8vCiAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLy8KICAgIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgNjIsIC0yLCA2MiwgLTIsIDYzLCAvLwogICAgNTIsIDUzLCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIC0yLCAtMiwgLTIsIDAwLCAtMiwgLTIsIC8vCiAgICAtMiwgMDAsIDAxLCAwMiwgMDMsIDA0LCAwNSwgMDYsIDA3LCAwOCwgMDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgLy8KICAgIDE1LCAxNiwgMTcsIDE4LCAxOSwgMjAsIDIxLCAyMiwgMjMsIDI0LCAyNSwgLTIsIC0yLCAtMiwgLTIsIDYzLCAvLwogICAgLTIsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIC8vCiAgICA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLy8KICAgIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAvLwogICAgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC8vCiAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLy8KICAgIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAvLwogICAgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC8vCiAgICAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLy8KICAgIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAvLwogICAgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIsIC0yLCAtMiwgLTIKICBdOwoKICBzdGF0aWMgUmFuZG9tIF9ybmcgPSBuZXcgUmFuZG9tLnNlY3VyZSgpOwoKICBzdGF0aWMgVWludDhMaXN0IGdldFJhbmRvbUJ5dGVzKGludCBjb3VudCkgewogICAgZmluYWwgVWludDhMaXN0IHJlc3VsdCA9IG5ldyBVaW50OExpc3QoY291bnQpOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAgICAgIHJlc3VsdFtpXSA9IF9ybmcubmV4dEludCgweGZmKTsKICAgIH0KICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBzdGF0aWMgU3RyaW5nIGJ5dGVzVG9IZXgoTGlzdDxpbnQ+IGJ5dGVzKSB7CiAgICB2YXIgcmVzdWx0ID0gbmV3IFN0cmluZ0J1ZmZlcigpOwogICAgZm9yICh2YXIgcGFydCBpbiBieXRlcykgewogICAgICByZXN1bHQud3JpdGUoJyR7cGFydCA8IDE2ID8gJzAnIDogJyd9JHtwYXJ0LnRvUmFkaXhTdHJpbmcoMTYpfScpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOwogIH0KCiAgc3RhdGljIFN0cmluZyBieXRlc1RvQmFzZTY0KExpc3Q8aW50PiBieXRlcywKICAgICAgW2Jvb2wgdXJsU2FmZSA9IGZhbHNlLCBib29sIGFkZExpbmVTZXBhcmF0b3IgPSBmYWxzZV0pIHsKICAgIGludCBsZW4gPSBieXRlcy5sZW5ndGg7CiAgICBpZiAobGVuID09IDApIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogICAgZmluYWwgU3RyaW5nIGxvb2t1cCA9IHVybFNhZmUgPyBfZW5jb2RlVGFibGVVcmxTYWZlIDogX2VuY29kZVRhYmxlOwogICAgLy8gU2l6ZSBvZiAyNCBiaXQgY2h1bmtzLgogICAgZmluYWwgaW50IHJlbWFpbmRlckxlbmd0aCA9IGxlbi5yZW1haW5kZXIoMyk7CiAgICBmaW5hbCBpbnQgY2h1bmtMZW5ndGggPSBsZW4gLSByZW1haW5kZXJMZW5ndGg7CiAgICAvLyBTaXplIG9mIGJhc2Ugb3V0cHV0LgogICAgaW50IG91dHB1dExlbiA9ICgobGVuIH4vIDMpICogNCkgKyAoKHJlbWFpbmRlckxlbmd0aCA+IDApID8gNCA6IDApOwogICAgLy8gQWRkIGV4dHJhIGZvciBsaW5lIHNlcGFyYXRvcnMuCiAgICBpZiAoYWRkTGluZVNlcGFyYXRvcikgewogICAgICBvdXRwdXRMZW4gKz0gKChvdXRwdXRMZW4gLSAxKSB+LyBMSU5FX0xFTkdUSCkgPDwgMTsKICAgIH0KICAgIExpc3Q8aW50PiBvdXQgPSBuZXcgTGlzdDxpbnQ+KG91dHB1dExlbik7CgogICAgLy8gRW5jb2RlIDI0IGJpdCBjaHVua3MuCiAgICBpbnQgaiA9IDAsIGkgPSAwLCBjID0gMDsKICAgIHdoaWxlIChpIDwgY2h1bmtMZW5ndGgpIHsKICAgICAgaW50IHggPSAoKGJ5dGVzW2krK10gPDwgMTYpICYgMHhGRkZGRkYpIHwKICAgICAgICAgICgoYnl0ZXNbaSsrXSA8PCA4KSAmIDB4RkZGRkZGKSB8CiAgICAgICAgICBieXRlc1tpKytdOwogICAgICBvdXRbaisrXSA9IGxvb2t1cC5jb2RlVW5pdEF0KHggPj4gMTgpOwogICAgICBvdXRbaisrXSA9IGxvb2t1cC5jb2RlVW5pdEF0KCh4ID4+IDEyKSAmIDB4M0YpOwogICAgICBvdXRbaisrXSA9IGxvb2t1cC5jb2RlVW5pdEF0KCh4ID4+IDYpICYgMHgzRik7CiAgICAgIG91dFtqKytdID0gbG9va3VwLmNvZGVVbml0QXQoeCAmIDB4M2YpOwogICAgICAvLyBBZGQgb3B0aW9uYWwgbGluZSBzZXBhcmF0b3IgZm9yIGVhY2ggNzYgY2hhciBvdXRwdXQuCiAgICAgIGlmIChhZGRMaW5lU2VwYXJhdG9yICYmICsrYyA9PSAxOSAmJiBqIDwgb3V0cHV0TGVuIC0gMikgewogICAgICAgIG91dFtqKytdID0gQ1I7CiAgICAgICAgb3V0W2orK10gPSBMRjsKICAgICAgICBjID0gMDsKICAgICAgfQogICAgfQoKICAgIC8vIElmIGlucHV0IGxlbmd0aCBpZiBub3QgYSBtdWx0aXBsZSBvZiAzLCBlbmNvZGUgcmVtYWluaW5nIGJ5dGVzIGFuZAogICAgLy8gYWRkIHBhZGRpbmcuCiAgICBpZiAocmVtYWluZGVyTGVuZ3RoID09IDEpIHsKICAgICAgaW50IHggPSBieXRlc1tpXTsKICAgICAgb3V0W2orK10gPSBsb29rdXAuY29kZVVuaXRBdCh4ID4+IDIpOwogICAgICBvdXRbaisrXSA9IGxvb2t1cC5jb2RlVW5pdEF0KCh4IDw8IDQpICYgMHgzRik7CiAgICAgIG91dFtqKytdID0gUEFEOwogICAgICBvdXRbaisrXSA9IFBBRDsKICAgIH0gZWxzZSBpZiAocmVtYWluZGVyTGVuZ3RoID09IDIpIHsKICAgICAgaW50IHggPSBieXRlc1tpXTsKICAgICAgaW50IHkgPSBieXRlc1tpICsgMV07CiAgICAgIG91dFtqKytdID0gbG9va3VwLmNvZGVVbml0QXQoeCA+PiAyKTsKICAgICAgb3V0W2orK10gPSBsb29rdXAuY29kZVVuaXRBdCgoKHggPDwgNCkgfCAoeSA+PiA0KSkgJiAweDNGKTsKICAgICAgb3V0W2orK10gPSBsb29rdXAuY29kZVVuaXRBdCgoeSA8PCAyKSAmIDB4M0YpOwogICAgICBvdXRbaisrXSA9IFBBRDsKICAgIH0KCiAgICByZXR1cm4gbmV3IFN0cmluZy5mcm9tQ2hhckNvZGVzKG91dCk7CiAgfQoKICBzdGF0aWMgTGlzdDxpbnQ+IGJhc2U2NFN0cmluZ1RvQnl0ZXMoU3RyaW5nIGlucHV0LAogICAgICBbYm9vbCBpZ25vcmVJbnZhbGlkQ2hhcmFjdGVycyA9IHRydWVdKSB7CiAgICBpbnQgbGVuID0gaW5wdXQubGVuZ3RoOwogICAgaWYgKGxlbiA9PSAwKSB7CiAgICAgIHJldHVybiBuZXcgTGlzdDxpbnQ+KDApOwogICAgfQoKICAgIC8vIENvdW50ICdccicsICdcbicgYW5kIGlsbGVnYWwgY2hhcmFjdGVycywgRm9yIGlsbGVnYWwgY2hhcmFjdGVycywKICAgIC8vIGlmIFtpZ25vcmVJbnZhbGlkQ2hhcmFjdGVyc10gaXMgZmFsc2UsIHRocm93IGFuIGV4Y2VwdGlvbi4KICAgIGludCBleHRyYXNMZW4gPSAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICBpbnQgYyA9IF9kZWNvZGVUYWJsZVtpbnB1dC5jb2RlVW5pdEF0KGkpXTsKICAgICAgaWYgKGMgPCAwKSB7CiAgICAgICAgZXh0cmFzTGVuKys7CiAgICAgICAgaWYgKGMgPT0gLTIgJiYgIWlnbm9yZUludmFsaWRDaGFyYWN0ZXJzKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRm9ybWF0RXhjZXB0aW9uKCdJbnZhbGlkIGNoYXJhY3RlcjogJHtpbnB1dFtpXX0nKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBpZiAoKGxlbiAtIGV4dHJhc0xlbikgJSA0ICE9IDApIHsKICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbignJydTaXplIG9mIEJhc2UgNjQgY2hhcmFjdGVycyBpbiBJbnB1dAogICAgICAgICAgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuIElucHV0OiAkaW5wdXQnJycpOwogICAgfQoKICAgIC8vIENvdW50IHBhZCBjaGFyYWN0ZXJzLCBpZ25vcmUgaWxsZWdhbCBjaGFyYWN0ZXJzIGF0IHRoZSBlbmQuCiAgICBpbnQgcGFkTGVuZ3RoID0gMDsKICAgIGZvciAoaW50IGkgPSBsZW4gLSAxOyBpID49IDA7IGktLSkgewogICAgICBpbnQgY3VycmVudENvZGVVbml0ID0gaW5wdXQuY29kZVVuaXRBdChpKTsKICAgICAgaWYgKF9kZWNvZGVUYWJsZVtjdXJyZW50Q29kZVVuaXRdID4gMCkgYnJlYWs7CiAgICAgIGlmIChjdXJyZW50Q29kZVVuaXQgPT0gUEFEKSBwYWRMZW5ndGgrKzsKICAgIH0KICAgIGludCBvdXRwdXRMZW4gPSAoKChsZW4gLSBleHRyYXNMZW4pICogNikgPj4gMykgLSBwYWRMZW5ndGg7CiAgICBMaXN0PGludD4gb3V0ID0gbmV3IExpc3Q8aW50PihvdXRwdXRMZW4pOwoKICAgIGZvciAoaW50IGkgPSAwLCBvID0gMDsgbyA8IG91dHB1dExlbjspIHsKICAgICAgLy8gQWNjdW11bGF0ZSA0IHZhbGlkIDYgYml0IEJhc2UgNjQgY2hhcmFjdGVycyBpbnRvIGFuIGludC4KICAgICAgaW50IHggPSAwOwogICAgICBmb3IgKGludCBqID0gNDsgaiA+IDA7KSB7CiAgICAgICAgaW50IGMgPSBfZGVjb2RlVGFibGVbaW5wdXQuY29kZVVuaXRBdChpKyspXTsKICAgICAgICBpZiAoYyA+PSAwKSB7CiAgICAgICAgICB4ID0gKCh4IDw8IDYpICYgMHhGRkZGRkYpIHwgYzsKICAgICAgICAgIGotLTsKICAgICAgICB9CiAgICAgIH0KICAgICAgb3V0W28rK10gPSB4ID4+IDE2OwogICAgICBpZiAobyA8IG91dHB1dExlbikgewogICAgICAgIG91dFtvKytdID0gKHggPj4gOCkgJiAweEZGOwogICAgICAgIGlmIChvIDwgb3V0cHV0TGVuKSBvdXRbbysrXSA9IHggJiAweEZGOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gb3V0OwogIH0KfQoKLy8gQ29uc3RhbnRzLgpjb25zdCBfTUFTS184ID0gMHhmZjsKY29uc3QgX01BU0tfMzIgPSAweGZmZmZmZmZmOwpjb25zdCBfQklUU19QRVJfQllURSA9IDg7CmNvbnN0IF9CWVRFU19QRVJfV09SRCA9IDQ7CgovLyBCYXNlIGNsYXNzIGVuY2Fwc3VsYXRpbmcgY29tbW9uIGJlaGF2aW9yIGZvciBjcnlwdG9ncmFwaGljIGhhc2gKLy8gZnVuY3Rpb25zLgphYnN0cmFjdCBjbGFzcyBfSGFzaEJhc2UgewogIC8vIEhhc2hlciBzdGF0ZS4KICBmaW5hbCBpbnQgX2NodW5rU2l6ZUluV29yZHM7CiAgZmluYWwgaW50IF9kaWdlc3RTaXplSW5Xb3JkczsKICBmaW5hbCBib29sIF9iaWdFbmRpYW5Xb3JkczsKICBpbnQgX2xlbmd0aEluQnl0ZXMgPSAwOwogIExpc3Q8aW50PiBfcGVuZGluZ0RhdGE7CiAgTGlzdDxpbnQ+IF9jdXJyZW50Q2h1bms7CiAgTGlzdDxpbnQ+IF9oOwogIGJvb2wgX2RpZ2VzdENhbGxlZCA9IGZhbHNlOwoKICBfSGFzaEJhc2UoCiAgICAgIHRoaXMuX2NodW5rU2l6ZUluV29yZHMsIHRoaXMuX2RpZ2VzdFNpemVJbldvcmRzLCB0aGlzLl9iaWdFbmRpYW5Xb3JkcykKICAgICAgOiBfcGVuZGluZ0RhdGEgPSBbXSB7CiAgICBfY3VycmVudENodW5rID0gbmV3IExpc3QoX2NodW5rU2l6ZUluV29yZHMpOwogICAgX2ggPSBuZXcgTGlzdChfZGlnZXN0U2l6ZUluV29yZHMpOwogIH0KCiAgLy8gVXBkYXRlIHRoZSBoYXNoZXIgd2l0aCBtb3JlIGRhdGEuCiAgYWRkKExpc3Q8aW50PiBkYXRhKSB7CiAgICBpZiAoX2RpZ2VzdENhbGxlZCkgewogICAgICB0aHJvdyBuZXcgU3RhdGVFcnJvcigKICAgICAgICAgICdIYXNoIHVwZGF0ZSBtZXRob2QgY2FsbGVkIGFmdGVyIGRpZ2VzdCB3YXMgcmV0cmlldmVkJyk7CiAgICB9CiAgICBfbGVuZ3RoSW5CeXRlcyArPSBkYXRhLmxlbmd0aDsKICAgIF9wZW5kaW5nRGF0YS5hZGRBbGwoZGF0YSk7CiAgICBfaXRlcmF0ZSgpOwogIH0KCiAgLy8gRmluaXNoIHRoZSBoYXNoIGNvbXB1dGF0aW9uIGFuZCByZXR1cm4gdGhlIGRpZ2VzdCBzdHJpbmcuCiAgTGlzdDxpbnQ+IGNsb3NlKCkgewogICAgaWYgKF9kaWdlc3RDYWxsZWQpIHsKICAgICAgcmV0dXJuIF9yZXN1bHRBc0J5dGVzKCk7CiAgICB9CiAgICBfZGlnZXN0Q2FsbGVkID0gdHJ1ZTsKICAgIF9maW5hbGl6ZURhdGEoKTsKICAgIF9pdGVyYXRlKCk7CiAgICBhc3NlcnQoX3BlbmRpbmdEYXRhLmxlbmd0aCA9PSAwKTsKICAgIHJldHVybiBfcmVzdWx0QXNCeXRlcygpOwogIH0KCiAgLy8gUmV0dXJucyB0aGUgYmxvY2sgc2l6ZSBvZiB0aGUgaGFzaCBpbiBieXRlcy4KICBpbnQgZ2V0IGJsb2NrU2l6ZSB7CiAgICByZXR1cm4gX2NodW5rU2l6ZUluV29yZHMgKiBfQllURVNfUEVSX1dPUkQ7CiAgfQoKICAvLyBDcmVhdGUgYSBmcmVzaCBpbnN0YW5jZSBvZiB0aGlzIEhhc2guCiAgbmV3SW5zdGFuY2UoKTsKCiAgLy8gT25lIHJvdW5kIG9mIHRoZSBoYXNoIGNvbXB1dGF0aW9uLgogIF91cGRhdGVIYXNoKExpc3Q8aW50PiBtKTsKCiAgLy8gSGVscGVyIG1ldGhvZHMuCiAgX2FkZDMyKHgsIHkpID0+ICh4ICsgeSkgJiBfTUFTS18zMjsKICBfcm91bmRVcCh2YWwsIG4pID0+ICh2YWwgKyBuIC0gMSkgJiAtbjsKCiAgLy8gUm90YXRlIGxlZnQgbGltaXRpbmcgdG8gdW5zaWduZWQgMzItYml0IHZhbHVlcy4KICBpbnQgX3JvdGwzMihpbnQgdmFsLCBpbnQgc2hpZnQpIHsKICAgIHZhciBtb2Rfc2hpZnQgPSBzaGlmdCAmIDMxOwogICAgcmV0dXJuICgodmFsIDw8IG1vZF9zaGlmdCkgJiBfTUFTS18zMikgfAogICAgICAgICgodmFsICYgX01BU0tfMzIpID4+ICgzMiAtIG1vZF9zaGlmdCkpOwogIH0KCiAgLy8gQ29tcHV0ZSB0aGUgZmluYWwgcmVzdWx0IGFzIGEgbGlzdCBvZiBieXRlcyBmcm9tIHRoZSBoYXNoIHdvcmRzLgogIExpc3Q8aW50PiBfcmVzdWx0QXNCeXRlcygpIHsKICAgIHZhciByZXN1bHQgPSA8aW50PltdOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfaC5sZW5ndGg7IGkrKykgewogICAgICByZXN1bHQuYWRkQWxsKF93b3JkVG9CeXRlcyhfaFtpXSkpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIC8vIENvbnZlcnRzIGEgbGlzdCBvZiBieXRlcyB0byBhIGNodW5rIG9mIDMyLWJpdCB3b3Jkcy4KICBfYnl0ZXNUb0NodW5rKExpc3Q8aW50PiBkYXRhLCBpbnQgZGF0YUluZGV4KSB7CiAgICBhc3NlcnQoKGRhdGEubGVuZ3RoIC0gZGF0YUluZGV4KSA+PSAoX2NodW5rU2l6ZUluV29yZHMgKiBfQllURVNfUEVSX1dPUkQpKTsKCiAgICBmb3IgKHZhciB3b3JkSW5kZXggPSAwOyB3b3JkSW5kZXggPCBfY2h1bmtTaXplSW5Xb3Jkczsgd29yZEluZGV4KyspIHsKICAgICAgdmFyIHczID0gX2JpZ0VuZGlhbldvcmRzID8gZGF0YVtkYXRhSW5kZXhdIDogZGF0YVtkYXRhSW5kZXggKyAzXTsKICAgICAgdmFyIHcyID0gX2JpZ0VuZGlhbldvcmRzID8gZGF0YVtkYXRhSW5kZXggKyAxXSA6IGRhdGFbZGF0YUluZGV4ICsgMl07CiAgICAgIHZhciB3MSA9IF9iaWdFbmRpYW5Xb3JkcyA/IGRhdGFbZGF0YUluZGV4ICsgMl0gOiBkYXRhW2RhdGFJbmRleCArIDFdOwogICAgICB2YXIgdzAgPSBfYmlnRW5kaWFuV29yZHMgPyBkYXRhW2RhdGFJbmRleCArIDNdIDogZGF0YVtkYXRhSW5kZXhdOwogICAgICBkYXRhSW5kZXggKz0gNDsKICAgICAgdmFyIHdvcmQgPSAodzMgJiAweGZmKSA8PCAyNDsKICAgICAgd29yZCB8PSAodzIgJiBfTUFTS184KSA8PCAxNjsKICAgICAgd29yZCB8PSAodzEgJiBfTUFTS184KSA8PCA4OwogICAgICB3b3JkIHw9ICh3MCAmIF9NQVNLXzgpOwogICAgICBfY3VycmVudENodW5rW3dvcmRJbmRleF0gPSB3b3JkOwogICAgfQogIH0KCiAgLy8gQ29udmVydCBhIDMyLWJpdCB3b3JkIHRvIGZvdXIgYnl0ZXMuCiAgTGlzdDxpbnQ+IF93b3JkVG9CeXRlcyhpbnQgd29yZCkgewogICAgTGlzdDxpbnQ+IGJ5dGVzID0gbmV3IExpc3QoX0JZVEVTX1BFUl9XT1JEKTsKICAgIGJ5dGVzWzBdID0gKHdvcmQgPj4gKF9iaWdFbmRpYW5Xb3JkcyA/IDI0IDogMCkpICYgX01BU0tfODsKICAgIGJ5dGVzWzFdID0gKHdvcmQgPj4gKF9iaWdFbmRpYW5Xb3JkcyA/IDE2IDogOCkpICYgX01BU0tfODsKICAgIGJ5dGVzWzJdID0gKHdvcmQgPj4gKF9iaWdFbmRpYW5Xb3JkcyA/IDggOiAxNikpICYgX01BU0tfODsKICAgIGJ5dGVzWzNdID0gKHdvcmQgPj4gKF9iaWdFbmRpYW5Xb3JkcyA/IDAgOiAyNCkpICYgX01BU0tfODsKICAgIHJldHVybiBieXRlczsKICB9CgogIC8vIEl0ZXJhdGUgdGhyb3VnaCBkYXRhIHVwZGF0aW5nIHRoZSBoYXNoIGNvbXB1dGF0aW9uIGZvciBlYWNoCiAgLy8gY2h1bmsuCiAgX2l0ZXJhdGUoKSB7CiAgICB2YXIgbGVuID0gX3BlbmRpbmdEYXRhLmxlbmd0aDsKICAgIHZhciBjaHVua1NpemVJbkJ5dGVzID0gX2NodW5rU2l6ZUluV29yZHMgKiBfQllURVNfUEVSX1dPUkQ7CiAgICBpZiAobGVuID49IGNodW5rU2l6ZUluQnl0ZXMpIHsKICAgICAgdmFyIGluZGV4ID0gMDsKICAgICAgZm9yICg7IChsZW4gLSBpbmRleCkgPj0gY2h1bmtTaXplSW5CeXRlczsgaW5kZXggKz0gY2h1bmtTaXplSW5CeXRlcykgewogICAgICAgIF9ieXRlc1RvQ2h1bmsoX3BlbmRpbmdEYXRhLCBpbmRleCk7CiAgICAgICAgX3VwZGF0ZUhhc2goX2N1cnJlbnRDaHVuayk7CiAgICAgIH0KICAgICAgX3BlbmRpbmdEYXRhID0gX3BlbmRpbmdEYXRhLnN1Ymxpc3QoaW5kZXgsIGxlbik7CiAgICB9CiAgfQoKICAvLyBGaW5hbGl6ZSB0aGUgZGF0YS4gQWRkIGEgMSBiaXQgdG8gdGhlIGVuZCBvZiB0aGUgbWVzc2FnZS4gRXhwYW5kIHdpdGgKICAvLyAwIGJpdHMgYW5kIGFkZCB0aGUgbGVuZ3RoIG9mIHRoZSBtZXNzYWdlLgogIF9maW5hbGl6ZURhdGEoKSB7CiAgICBfcGVuZGluZ0RhdGEuYWRkKDB4ODApOwogICAgdmFyIGNvbnRlbnRzTGVuZ3RoID0gX2xlbmd0aEluQnl0ZXMgKyA5OwogICAgdmFyIGNodW5rU2l6ZUluQnl0ZXMgPSBfY2h1bmtTaXplSW5Xb3JkcyAqIF9CWVRFU19QRVJfV09SRDsKICAgIHZhciBmaW5hbGl6ZWRMZW5ndGggPSBfcm91bmRVcChjb250ZW50c0xlbmd0aCwgY2h1bmtTaXplSW5CeXRlcyk7CiAgICB2YXIgemVyb1BhZGRpbmcgPSBmaW5hbGl6ZWRMZW5ndGggLSBjb250ZW50c0xlbmd0aDsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgemVyb1BhZGRpbmc7IGkrKykgewogICAgICBfcGVuZGluZ0RhdGEuYWRkKDApOwogICAgfQogICAgdmFyIGxlbmd0aEluQml0cyA9IF9sZW5ndGhJbkJ5dGVzICogX0JJVFNfUEVSX0JZVEU7CiAgICBhc3NlcnQobGVuZ3RoSW5CaXRzIDwgcG93KDIsIDMyKSk7CiAgICBpZiAoX2JpZ0VuZGlhbldvcmRzKSB7CiAgICAgIF9wZW5kaW5nRGF0YS5hZGRBbGwoX3dvcmRUb0J5dGVzKDApKTsKICAgICAgX3BlbmRpbmdEYXRhLmFkZEFsbChfd29yZFRvQnl0ZXMobGVuZ3RoSW5CaXRzICYgX01BU0tfMzIpKTsKICAgIH0gZWxzZSB7CiAgICAgIF9wZW5kaW5nRGF0YS5hZGRBbGwoX3dvcmRUb0J5dGVzKGxlbmd0aEluQml0cyAmIF9NQVNLXzMyKSk7CiAgICAgIF9wZW5kaW5nRGF0YS5hZGRBbGwoX3dvcmRUb0J5dGVzKDApKTsKICAgIH0KICB9Cn0KCi8vIFRoZSBNRDUgaGFzaGVyIGlzIHVzZWQgdG8gY29tcHV0ZSBhbiBNRDUgbWVzc2FnZSBkaWdlc3QuCmNsYXNzIF9NRDUgZXh0ZW5kcyBfSGFzaEJhc2UgewogIF9NRDUoKSA6IHN1cGVyKDE2LCA0LCBmYWxzZSkgewogICAgX2hbMF0gPSAweDY3NDUyMzAxOwogICAgX2hbMV0gPSAweGVmY2RhYjg5OwogICAgX2hbMl0gPSAweDk4YmFkY2ZlOwogICAgX2hbM10gPSAweDEwMzI1NDc2OwogIH0KCiAgLy8gUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIEhhc2guCiAgX01ENSBuZXdJbnN0YW5jZSgpIHsKICAgIHJldHVybiBuZXcgX01ENSgpOwogIH0KCiAgc3RhdGljIGNvbnN0IF9rID0gY29uc3QgWwogICAgMHhkNzZhYTQ3OCwgMHhlOGM3Yjc1NiwgMHgyNDIwNzBkYiwgMHhjMWJkY2VlZSwgMHhmNTdjMGZhZiwgMHg0Nzg3YzYyYSwgLy8KICAgIDB4YTgzMDQ2MTMsIDB4ZmQ0Njk1MDEsIDB4Njk4MDk4ZDgsIDB4OGI0NGY3YWYsIDB4ZmZmZjViYjEsIDB4ODk1Y2Q3YmUsIC8vCiAgICAweDZiOTAxMTIyLCAweGZkOTg3MTkzLCAweGE2Nzk0MzhlLCAweDQ5YjQwODIxLCAweGY2MWUyNTYyLCAweGMwNDBiMzQwLCAvLwogICAgMHgyNjVlNWE1MSwgMHhlOWI2YzdhYSwgMHhkNjJmMTA1ZCwgMHgwMjQ0MTQ1MywgMHhkOGExZTY4MSwgMHhlN2QzZmJjOCwgLy8KICAgIDB4MjFlMWNkZTYsIDB4YzMzNzA3ZDYsIDB4ZjRkNTBkODcsIDB4NDU1YTE0ZWQsIDB4YTllM2U5MDUsIDB4ZmNlZmEzZjgsIC8vCiAgICAweDY3NmYwMmQ5LCAweDhkMmE0YzhhLCAweGZmZmEzOTQyLCAweDg3NzFmNjgxLCAweDZkOWQ2MTIyLCAweGZkZTUzODBjLCAvLwogICAgMHhhNGJlZWE0NCwgMHg0YmRlY2ZhOSwgMHhmNmJiNGI2MCwgMHhiZWJmYmM3MCwgMHgyODliN2VjNiwgMHhlYWExMjdmYSwgLy8KICAgIDB4ZDRlZjMwODUsIDB4MDQ4ODFkMDUsIDB4ZDlkNGQwMzksIDB4ZTZkYjk5ZTUsIDB4MWZhMjdjZjgsIDB4YzRhYzU2NjUsIC8vCiAgICAweGY0MjkyMjQ0LCAweDQzMmFmZjk3LCAweGFiOTQyM2E3LCAweGZjOTNhMDM5LCAweDY1NWI1OWMzLCAweDhmMGNjYzkyLCAvLwogICAgMHhmZmVmZjQ3ZCwgMHg4NTg0NWRkMSwgMHg2ZmE4N2U0ZiwgMHhmZTJjZTZlMCwgMHhhMzAxNDMxNCwgMHg0ZTA4MTFhMSwgLy8KICAgIDB4Zjc1MzdlODIsIDB4YmQzYWYyMzUsIDB4MmFkN2QyYmIsIDB4ZWI4NmQzOTEKICBdOwoKICBzdGF0aWMgY29uc3QgX3IgPSBjb25zdCBbCiAgICA3LCAxMiwgMTcsIDIyLCA3LCAxMiwgMTcsIDIyLCA3LCAxMiwgMTcsIDIyLCA3LCAxMiwgMTcsIDIyLCA1LCA5LCAxNCwgLy8KICAgIDIwLCA1LCA5LCAxNCwgMjAsIDUsIDksIDE0LCAyMCwgNSwgOSwgMTQsIDIwLCA0LCAxMSwgMTYsIDIzLCA0LCAxMSwgLy8KICAgIDE2LCAyMywgNCwgMTEsIDE2LCAyMywgNCwgMTEsIDE2LCAyMywgNiwgMTAsIDE1LCAyMSwgNiwgMTAsIDE1LCAyMSwgNiwgLy8KICAgIDEwLCAxNSwgMjEsIDYsIDEwLCAxNSwgMjEKICBdOwoKICAvLyBDb21wdXRlIG9uZSBpdGVyYXRpb24gb2YgdGhlIE1ENSBhbGdvcml0aG0gd2l0aCBhIGNodW5rIG9mCiAgLy8gMTYgMzItYml0IHBpZWNlcy4KICB2b2lkIF91cGRhdGVIYXNoKExpc3Q8aW50PiBtKSB7CiAgICBhc3NlcnQobS5sZW5ndGggPT0gMTYpOwoKICAgIHZhciBhID0gX2hbMF07CiAgICB2YXIgYiA9IF9oWzFdOwogICAgdmFyIGMgPSBfaFsyXTsKICAgIHZhciBkID0gX2hbM107CgogICAgdmFyIHQwOwogICAgdmFyIHQxOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjQ7IGkrKykgewogICAgICBpZiAoaSA8IDE2KSB7CiAgICAgICAgdDAgPSAoYiAmIGMpIHwgKCh+YiAmIF9NQVNLXzMyKSAmIGQpOwogICAgICAgIHQxID0gaTsKICAgICAgfSBlbHNlIGlmIChpIDwgMzIpIHsKICAgICAgICB0MCA9IChkICYgYikgfCAoKH5kICYgX01BU0tfMzIpICYgYyk7CiAgICAgICAgdDEgPSAoKDUgKiBpKSArIDEpICUgMTY7CiAgICAgIH0gZWxzZSBpZiAoaSA8IDQ4KSB7CiAgICAgICAgdDAgPSBiIF4gYyBeIGQ7CiAgICAgICAgdDEgPSAoKDMgKiBpKSArIDUpICUgMTY7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdDAgPSBjIF4gKGIgfCAofmQgJiBfTUFTS18zMikpOwogICAgICAgIHQxID0gKDcgKiBpKSAlIDE2OwogICAgICB9CgogICAgICB2YXIgdGVtcCA9IGQ7CiAgICAgIGQgPSBjOwogICAgICBjID0gYjsKICAgICAgYiA9IF9hZGQzMigKICAgICAgICAgIGIsIF9yb3RsMzIoX2FkZDMyKF9hZGQzMihhLCB0MCksIF9hZGQzMihfa1tpXSwgbVt0MV0pKSwgX3JbaV0pKTsKICAgICAgYSA9IHRlbXA7CiAgICB9CgogICAgX2hbMF0gPSBfYWRkMzIoYSwgX2hbMF0pOwogICAgX2hbMV0gPSBfYWRkMzIoYiwgX2hbMV0pOwogICAgX2hbMl0gPSBfYWRkMzIoYywgX2hbMl0pOwogICAgX2hbM10gPSBfYWRkMzIoZCwgX2hbM10pOwogIH0KfQoKLy8gVGhlIFNIQTEgaGFzaGVyIGlzIHVzZWQgdG8gY29tcHV0ZSBhbiBTSEExIG1lc3NhZ2UgZGlnZXN0LgpjbGFzcyBfU0hBMSBleHRlbmRzIF9IYXNoQmFzZSB7CiAgLy8gQ29uc3RydWN0IGEgU0hBMSBoYXNoZXIgb2JqZWN0LgogIF9TSEExKCkKICAgICAgOiBfdyA9IG5ldyBMaXN0KDgwKSwKICAgICAgICBzdXBlcigxNiwgNSwgdHJ1ZSkgewogICAgX2hbMF0gPSAweDY3NDUyMzAxOwogICAgX2hbMV0gPSAweEVGQ0RBQjg5OwogICAgX2hbMl0gPSAweDk4QkFEQ0ZFOwogICAgX2hbM10gPSAweDEwMzI1NDc2OwogICAgX2hbNF0gPSAweEMzRDJFMUYwOwogIH0KCiAgLy8gUmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0aGlzIEhhc2guCiAgX1NIQTEgbmV3SW5zdGFuY2UoKSB7CiAgICByZXR1cm4gbmV3IF9TSEExKCk7CiAgfQoKICAvLyBDb21wdXRlIG9uZSBpdGVyYXRpb24gb2YgdGhlIFNIQTEgYWxnb3JpdGhtIHdpdGggYSBjaHVuayBvZgogIC8vIDE2IDMyLWJpdCBwaWVjZXMuCiAgdm9pZCBfdXBkYXRlSGFzaChMaXN0PGludD4gbSkgewogICAgYXNzZXJ0KG0ubGVuZ3RoID09IDE2KTsKCiAgICB2YXIgYSA9IF9oWzBdOwogICAgdmFyIGIgPSBfaFsxXTsKICAgIHZhciBjID0gX2hbMl07CiAgICB2YXIgZCA9IF9oWzNdOwogICAgdmFyIGUgPSBfaFs0XTsKCiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDgwOyBpKyspIHsKICAgICAgaWYgKGkgPCAxNikgewogICAgICAgIF93W2ldID0gbVtpXTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgbiA9IF93W2kgLSAzXSBeIF93W2kgLSA4XSBeIF93W2kgLSAxNF0gXiBfd1tpIC0gMTZdOwogICAgICAgIF93W2ldID0gX3JvdGwzMihuLCAxKTsK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a2RheSAiLCIgU1AgZGF0ZTIgU1AgdGltZSBTUCAiR01UIgogIC8vIGFzY3RpbWUtZGF0ZSA9IHdrZGF5IFNQIGRhdGUzIFNQIHRpbWUgU1AgNERJR0lUCiAgLy8gZGF0ZTEgICAgICAgID0gMkRJR0lUIFNQIG1vbnRoIFNQIDRESUdJVAogIC8vICAgICAgICAgICAgICAgIDsgZGF5IG1vbnRoIHllYXIgKGUuZy4sIDAyIEp1biAxOTgyKQogIC8vIGRhdGUyICAgICAgICA9IDJESUdJVCAiLSIgbW9udGggIi0iIDJESUdJVAogIC8vICAgICAgICAgICAgICAgIDsgZGF5LW1vbnRoLXllYXIgKGUuZy4sIDAyLUp1bi04MikKICAvLyBkYXRlMyAgICAgICAgPSBtb250aCBTUCAoIDJESUdJVCB8ICggU1AgMURJR0lUICkpCiAgLy8gICAgICAgICAgICAgICAgOyBtb250aCBkYXkgKGUuZy4sIEp1biAgMikKICAvLyB0aW1lICAgICAgICAgPSAyRElHSVQgIjoiIDJESUdJVCAiOiIgMkRJR0lUCiAgLy8gICAgICAgICAgICAgICAgOyAwMDowMDowMCAtIDIzOjU5OjU5CiAgLy8gd2tkYXkgICAgICAgID0gIk1vbiIgfCAiVHVlIiB8ICJXZWQiCiAgLy8gICAgICAgICAgICAgIHwgIlRodSIgfCAiRnJpIiB8ICJTYXQiIHwgIlN1biIKICAvLyB3ZWVrZGF5ICAgICAgPSAiTW9uZGF5IiB8ICJUdWVzZGF5IiB8ICJXZWRuZXNkYXkiCiAgLy8gICAgICAgICAgICAgIHwgIlRodXJzZGF5IiB8ICJGcmlkYXkiIHwgIlNhdHVyZGF5IiB8ICJTdW5kYXkiCiAgLy8gbW9udGggICAgICAgID0gIkphbiIgfCAiRmViIiB8ICJNYXIiIHwgIkFwciIKICAvLyAgICAgICAgICAgICAgfCAiTWF5IiB8ICJKdW4iIHwgIkp1bCIgfCAiQXVnIgogIC8vICAgICAgICAgICAgICB8ICJTZXAiIHwgIk9jdCIgfCAiTm92IiB8ICJEZWMiCgogIC8qKgogICAqIEZvcm1hdCBhIGRhdGUgYWNjb3JkaW5nIHRvCiAgICogW1JGQy0xMTIzXShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxMTIzICJSRkMtMTEyMyIpLAogICAqIGUuZy4gYFRodSwgMSBKYW4gMTk3MCAwMDowMDowMCBHTVRgLgogICAqLwogIHN0YXRpYyBTdHJpbmcgZm9ybWF0KERhdGVUaW1lIGRhdGUpIHsKICAgIGNvbnN0IExpc3Qgd2tkYXkgPSBjb25zdCBbIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biJdOwogICAgY29uc3QgTGlzdCBtb250aCA9IGNvbnN0IFsKICAgICAgIkphbiIsCiAgICAgICJGZWIiLAogICAgICAiTWFyIiwKICAgICAgIkFwciIsCiAgICAgICJNYXkiLAogICAgICAiSnVuIiwKICAgICAgIkp1bCIsCiAgICAgICJBdWciLAogICAgICAiU2VwIiwKICAgICAgIk9jdCIsCiAgICAgICJOb3YiLAogICAgICAiRGVjIgogICAgXTsKCiAgICBEYXRlVGltZSBkID0gZGF0ZS50b1V0YygpOwogICAgU3RyaW5nQnVmZmVyIHNiID0gbmV3IFN0cmluZ0J1ZmZlcigpCiAgICAgIC4ud3JpdGUod2tkYXlbZC53ZWVrZGF5IC0gMV0pCiAgICAgIC4ud3JpdGUoIiwgIikKICAgICAgLi53cml0ZShkLmRheSA8PSA5ID8gIjAiIDogIiIpCiAgICAgIC4ud3JpdGUoZC5kYXkudG9TdHJpbmcoKSkKICAgICAgLi53cml0ZSgiICIpCiAgICAgIC4ud3JpdGUobW9udGhbZC5tb250aCAtIDFdKQogICAgICAuLndyaXRlKCIgIikKICAgICAgLi53cml0ZShkLnllYXIudG9TdHJpbmcoKSkKICAgICAgLi53cml0ZShkLmhvdXIgPD0gOSA/ICIgMCIgOiAiICIpCiAgICAgIC4ud3JpdGUoZC5ob3VyLnRvU3RyaW5nKCkpCiAgICAgIC4ud3JpdGUoZC5taW51dGUgPD0gOSA/ICI6MCIgOiAiOiIpCiAgICAgIC4ud3JpdGUoZC5taW51dGUudG9TdHJpbmcoKSkKICAgICAgLi53cml0ZShkLnNlY29uZCA8PSA5ID8gIjowIiA6ICI6IikKICAgICAgLi53cml0ZShkLnNlY29uZC50b1N0cmluZygpKQogICAgICAuLndyaXRlKCIgR01UIik7CiAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICB9CgogIC8qKgogICAqIFBhcnNlIGEgZGF0ZSBzdHJpbmcgaW4gZWl0aGVyIG9mIHRoZSBmb3JtYXRzCiAgICogW1JGQy0xMTIzXShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxMTIzICJSRkMtMTEyMyIpLAogICAqIFtSRkMtODUwXShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM4NTAgIlJGQy04NTAiKSBvcgogICAqIEFOU0kgQydzIGFzY3RpbWUoKSBmb3JtYXQuIFRoZXNlIGZvcm1hdHMgYXJlIGxpc3RlZCBoZXJlLgogICAqCiAgICogICAgIFRodSwgMSBKYW4gMTk3MCAwMDowMDowMCBHTVQKICAgKiAgICAgVGh1cnNkYXksIDEtSmFuLTE5NzAgMDA6MDA6MDAgR01UCiAgICogICAgIFRodSBKYW4gIDEgMDA6MDA6MDAgMTk3MAogICAqCiAgICogRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIFtSRkMtMjYxNiBzZWN0aW9uCiAgICogMy4xLjFdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI2MTYjc2VjdGlvbi0zLjMuMQogICAqICJSRkMtMjYxNiBzZWN0aW9uIDMuMS4xIikuCiAgICovCiAgc3RhdGljIERhdGVUaW1lIHBhcnNlKFN0cmluZyBkYXRlKSB7CiAgICBmaW5hbCBpbnQgU1AgPSAzMjsKICAgIGNvbnN0IExpc3Qgd2tkYXlzID0gY29uc3QgWyJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCIsICJTdW4iXTsKICAgIGNvbnN0IExpc3Qgd2Vla2RheXMgPSBjb25zdCBbCiAgICAgICJNb25kYXkiLAogICAgICAiVHVlc2RheSIsCiAgICAgICJXZWRuZXNkYXkiLAogICAgICAiVGh1cnNkYXkiLAogICAgICAiRnJpZGF5IiwKICAgICAgIlNhdHVyZGF5IiwKICAgICAgIlN1bmRheSIKICAgIF07CiAgICBjb25zdCBMaXN0IG1vbnRocyA9IGNvbnN0IFsKICAgICAgIkphbiIsCiAgICAgICJGZWIiLAogICAgICAiTWFyIiwKICAgICAgIkFwciIsCiAgICAgICJNYXkiLAogICAgICAiSnVuIiwKICAgICAgIkp1bCIsCiAgICAgICJBdWciLAogICAgICAiU2VwIiwKICAgICAgIk9jdCIsCiAgICAgICJOb3YiLAogICAgICAiRGVjIgogICAgXTsKICAgIGNvbnN0IExpc3Qgd2tkYXlzTG93ZXJDYXNlID0gY29uc3QgWwogICAgICAibW9uIiwKICAgICAgInR1ZSIsCiAgICAgICJ3ZWQiLAogICAgICAidGh1IiwKICAgICAgImZyaSIsCiAgICAgICJzYXQiLAogICAgICAic3VuIgogICAgXTsKICAgIGNvbnN0IExpc3Qgd2Vla2RheXNMb3dlckNhc2UgPSBjb25zdCBbCiAgICAgICJtb25kYXkiLAogICAgICAidHVlc2RheSIsCiAgICAgICJ3ZWRuZXNkYXkiLAogICAgICAidGh1cnNkYXkiLAogICAgICAiZnJpZGF5IiwKICAgICAgInNhdHVyZGF5IiwKICAgICAgInN1bmRheSIKICAgIF07CiAgICBjb25zdCBMaXN0IG1vbnRoc0xvd2VyQ2FzZSA9IGNvbnN0IFsKICAgICAgImphbiIsCiAgICAgICJmZWIiLAogICAgICAibWFyIiwKICAgICAgImFwciIsCiAgICAgICJtYXkiLAogICAgICAianVuIiwKICAgICAgImp1bCIsCiAgICAgICJhdWciLAogICAgICAic2VwIiwKICAgICAgIm9jdCIsCiAgICAgICJub3YiLAogICAgICAiZGVjIgogICAgXTsKCiAgICBmaW5hbCBpbnQgZm9ybWF0UmZjMTEyMyA9IDA7CiAgICBmaW5hbCBpbnQgZm9ybWF0UmZjODUwID0gMTsKICAgIGZpbmFsIGludCBmb3JtYXRBc2N0aW1lID0gMjsKCiAgICBpbnQgaW5kZXggPSAwOwogICAgU3RyaW5nIHRtcDsKICAgIGludCBmb3JtYXQ7CgogICAgdm9pZCBleHBlY3QoU3RyaW5nIHMpIHsKICAgICAgaWYgKGRhdGUubGVuZ3RoIC0gaW5kZXggPCBzLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIEhUVFAgZGF0ZSAkZGF0ZSIpOwogICAgICB9CiAgICAgIFN0cmluZyB0bXAgPSBkYXRlLnN1YnN0cmluZyhpbmRleCwgaW5kZXggKyBzLmxlbmd0aCk7CiAgICAgIGlmICh0bXAgIT0gcykgewogICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIEhUVFAgZGF0ZSAkZGF0ZSIpOwogICAgICB9CiAgICAgIGluZGV4ICs9IHMubGVuZ3RoOwogICAgfQoKICAgIGludCBleHBlY3RXZWVrZGF5KCkgewogICAgICBpbnQgd2Vla2RheTsKICAgICAgLy8gVGhlIGZvcm1hdHRpbmcgb2YgdGhlIHdlZWtkYXkgc2lnbmFscyB0aGUgZm9ybWF0IG9mIHRoZSBkYXRlIHN0cmluZy4KICAgICAgaW50IHBvcyA9IGRhdGUuaW5kZXhPZigiLCIsIGluZGV4KTsKICAgICAgaWYgKHBvcyA9PSAtMSkgewogICAgICAgIGludCBwb3MgPSBkYXRlLmluZGV4T2YoIiAiLCBpbmRleCk7CiAgICAgICAgaWYgKHBvcyA9PSAtMSkgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgSFRUUCBkYXRlICRkYXRlIik7CiAgICAgICAgdG1wID0gZGF0ZS5zdWJzdHJpbmcoaW5kZXgsIHBvcyk7CiAgICAgICAgaW5kZXggPSBwb3MgKyAxOwogICAgICAgIHdlZWtkYXkgPSB3a2RheXMuaW5kZXhPZih0bXApOwogICAgICAgIGlmICh3ZWVrZGF5ICE9IC0xKSB7CiAgICAgICAgICBmb3JtYXQgPSBmb3JtYXRBc2N0aW1lOwogICAgICAgICAgcmV0dXJuIHdlZWtkYXk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHRtcCA9IGRhdGUuc3Vic3RyaW5nKGluZGV4LCBwb3MpOwogICAgICAgIGluZGV4ID0gcG9zICsgMTsKICAgICAgICB3ZWVrZGF5ID0gd2tkYXlzLmluZGV4T2YodG1wKTsKICAgICAgICBpZiAod2Vla2RheSAhPSAtMSkgewogICAgICAgICAgZm9ybWF0ID0gZm9ybWF0UmZjMTEyMzsKICAgICAgICAgIHJldHVybiB3ZWVrZGF5OwogICAgICAgIH0KICAgICAgICB3ZWVrZGF5ID0gd2Vla2RheXMuaW5kZXhPZih0bXApOwogICAgICAgIGlmICh3ZWVrZGF5ICE9IC0xKSB7CiAgICAgICAgICBmb3JtYXQgPSBmb3JtYXRSZmM4NTA7CiAgICAgICAgICByZXR1cm4gd2Vla2RheTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgSFRUUCBkYXRlICRkYXRlIik7CiAgICB9CgogICAgaW50IGV4cGVjdE1vbnRoKFN0cmluZyBzZXBhcmF0b3IpIHsKICAgICAgaW50IHBvcyA9IGRhdGUuaW5kZXhPZihzZXBhcmF0b3IsIGluZGV4KTsKICAgICAgaWYgKHBvcyAtIGluZGV4ICE9IDMpIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIEhUVFAgZGF0ZSAkZGF0ZSIpOwogICAgICB0bXAgPSBkYXRlLnN1YnN0cmluZyhpbmRleCwgcG9zKTsKICAgICAgaW5kZXggPSBwb3MgKyAxOwogICAgICBpbnQgbW9udGggPSBtb250aHMuaW5kZXhPZih0bXApOwogICAgICBpZiAobW9udGggIT0gLTEpIHJldHVybiBtb250aDsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgSFRUUCBkYXRlICRkYXRlIik7CiAgICB9CgogICAgaW50IGV4cGVjdE51bShTdHJpbmcgc2VwYXJhdG9yKSB7CiAgICAgIGludCBwb3M7CiAgICAgIGlmIChzZXBhcmF0b3IubGVuZ3RoID4gMCkgewogICAgICAgIHBvcyA9IGRhdGUuaW5kZXhPZihzZXBhcmF0b3IsIGluZGV4KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBwb3MgPSBkYXRlLmxlbmd0aDsKICAgICAgfQogICAgICBTdHJpbmcgdG1wID0gZGF0ZS5zdWJzdHJpbmcoaW5kZXgsIHBvcyk7CiAgICAgIGluZGV4ID0gcG9zICsgc2VwYXJhdG9yLmxlbmd0aDsKICAgICAgdHJ5IHsKICAgICAgICBpbnQgdmFsdWUgPSBpbnQucGFyc2UodG1wKTsKICAgICAgICByZXR1cm4gdmFsdWU7CiAgICAgIH0gb24gRm9ybWF0RXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgSFRUUCBkYXRlICRkYXRlIik7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGV4cGVjdEVuZCgpIHsKICAgICAgaWYgKGluZGV4ICE9IGRhdGUubGVuZ3RoKSB7CiAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgSFRUUCBkYXRlICRkYXRlIik7CiAgICAgIH0KICAgIH0KCiAgICBpbnQgd2Vla2RheSA9IGV4cGVjdFdlZWtkYXkoKTsKICAgIGludCBkYXk7CiAgICBpbnQgbW9udGg7CiAgICBpbnQgeWVhcjsKICAgIGludCBob3VyczsKICAgIGludCBtaW51dGVzOwogICAgaW50IHNlY29uZHM7CiAgICBpZiAoZm9ybWF0ID09IGZvcm1hdEFzY3RpbWUpIHsKICAgICAgbW9udGggPSBleHBlY3RNb250aCgiICIpOwogICAgICBpZiAoZGF0ZS5jb2RlVW5pdEF0KGluZGV4KSA9PSBTUCkgaW5kZXgrKzsKICAgICAgZGF5ID0gZXhwZWN0TnVtKCIgIik7CiAgICAgIGhvdXJzID0gZXhwZWN0TnVtKCI6Iik7CiAgICAgIG1pbnV0ZXMgPSBleHBlY3ROdW0oIjoiKTsKICAgICAgc2Vjb25kcyA9IGV4cGVjdE51bSgiICIpOwogICAgICB5ZWFyID0gZXhwZWN0TnVtKCIiKTsKICAgIH0gZWxzZSB7CiAgICAgIGV4cGVjdCgiICIpOwogICAgICBkYXkgPSBleHBlY3ROdW0oZm9ybWF0ID09IGZvcm1hdFJmYzExMjMgPyAiICIgOiAiLSIpOwogICAgICBtb250aCA9IGV4cGVjdE1vbnRoKGZvcm1hdCA9PSBmb3JtYXRSZmMxMTIzID8gIiAiIDogIi0iKTsKICAgICAgeWVhciA9IGV4cGVjdE51bSgiICIpOwogICAgICBob3VycyA9IGV4cGVjdE51bSgiOiIpOwogICAgICBtaW51dGVzID0gZXhwZWN0TnVtKCI6Iik7CiAgICAgIHNlY29uZHMgPSBleHBlY3ROdW0oIiAiKTsKICAgICAgZXhwZWN0KCJHTVQiKTsKICAgIH0KICAgIGV4cGVjdEVuZCgpOwogICAgcmV0dXJuIG5ldyBEYXRlVGltZS51dGMoeWVhciwgbW9udGggKyAxLCBkYXksIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzLCAwKTsKICB9CgogIC8vIFBhcnNlIGEgY29va2llIGRhdGUgc3RyaW5nLgogIHN0YXRpYyBEYXRlVGltZSBfcGFyc2VDb29raWVEYXRlKFN0cmluZyBkYXRlKSB7CiAgICBjb25zdCBMaXN0IG1vbnRoc0xvd2VyQ2FzZSA9IGNvbnN0IFsKICAgICAgImphbiIsCiAgICAgICJmZWIiLAogICAgICAibWFyIiwKICAgICAgImFwciIsCiAgICAgICJtYXkiLAogICAgICAianVuIiwKICAgICAgImp1bCIsCiAgICAgICJhdWciLAogICAgICAic2VwIiwKICAgICAgIm9jdCIsCiAgICAgICJub3YiLAogICAgICAiZGVjIgogICAgXTsKCiAgICBpbnQgcG9zaXRpb24gPSAwOwoKICAgIHZvaWQgZXJyb3IoKSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIGNvb2tpZSBkYXRlICRkYXRlIik7CiAgICB9CgogICAgYm9vbCBpc0VuZCgpID0+IHBvc2l0aW9uID09IGRhdGUubGVuZ3RoOwoKICAgIGJvb2wgaXNEZWxpbWl0ZXIoU3RyaW5nIHMpIHsKICAgICAgaW50IGNoYXIgPSBzLmNvZGVVbml0QXQoMCk7CiAgICAgIGlmIChjaGFyID09IDB4MDkpIHJldHVybiB0cnVlOwogICAgICBpZiAoY2hhciA+PSAweDIwICYmIGNoYXIgPD0gMHgyRikgcmV0dXJuIHRydWU7CiAgICAgIGlmIChjaGFyID49IDB4M0IgJiYgY2hhciA8PSAweDQwKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNoYXIgPj0gMHg1QiAmJiBjaGFyIDw9IDB4NjApIHJldHVybiB0cnVlOwogICAgICBpZiAoY2hhciA+PSAweDdCICYmIGNoYXIgPD0gMHg3RSkgcmV0dXJuIHRydWU7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBib29sIGlzTm9uRGVsaW1pdGVyKFN0cmluZyBzKSB7CiAgICAgIGludCBjaGFyID0gcy5jb2RlVW5pdEF0KDApOwogICAgICBpZiAoY2hhciA+PSAweDAwICYmIGNoYXIgPD0gMHgwOCkgcmV0dXJuIHRydWU7CiAgICAgIGlmIChjaGFyID49IDB4MEEgJiYgY2hhciA8PSAweDFGKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKGNoYXIgPj0gMHgzMCAmJiBjaGFyIDw9IDB4MzkpIHJldHVybiB0cnVlOyAvLyBEaWdpdAogICAgICBpZiAoY2hhciA9PSAweDNBKSByZXR1cm4gdHJ1ZTsgLy8gJzonCiAgICAgIGlmIChjaGFyID49IDB4NDEgJiYgY2hhciA8PSAweDVBKSByZXR1cm4gdHJ1ZTsgLy8gQWxwaGEKICAgICAgaWYgKGNoYXIgPj0gMHg2MSAmJiBjaGFyIDw9IDB4N0EpIHJldHVybiB0cnVlOyAvLyBBbHBoYQogICAgICBpZiAoY2hhciA+PSAweDdGICYmIGNoYXIgPD0gMHhGRikgcmV0dXJuIHRydWU7IC8vIEFscGhhCiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBib29sIGlzRGlnaXQoU3RyaW5nIHMpIHsKICAgICAgaW50IGNoYXIgPSBzLmNvZGVVbml0QXQoMCk7CiAgICAgIGlmIChjaGFyID4gMHgyRiAmJiBjaGFyIDwgMHgzQSkgcmV0dXJuIHRydWU7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpbnQgZ2V0TW9udGgoU3RyaW5nIG1vbnRoKSB7CiAgICAgIGlmIChtb250aC5sZW5ndGggPCAzKSByZXR1cm4gLTE7CiAgICAgIHJldHVybiBtb250aHNMb3dlckNhc2UuaW5kZXhPZihtb250aC5zdWJzdHJpbmcoMCwgMykpOwogICAgfQoKICAgIGludCB0b0ludChTdHJpbmcgcykgewogICAgICBpbnQgaW5kZXggPSAwOwogICAgICBmb3IgKDsgaW5kZXggPCBzLmxlbmd0aCAmJiBpc0RpZ2l0KHNbaW5kZXhdKTsgaW5kZXgrKyk7CiAgICAgIHJldHVybiBpbnQucGFyc2Uocy5zdWJzdHJpbmcoMCwgaW5kZXgpKTsKICAgIH0KCiAgICB2YXIgdG9rZW5zID0gW107CiAgICB3aGlsZSAoIWlzRW5kKCkpIHsKICAgICAgd2hpbGUgKCFpc0VuZCgpICYmIGlzRGVsaW1pdGVyKGRhdGVbcG9zaXRpb25dKSkgcG9zaXRpb24rKzsKICAgICAgaW50IHN0YXJ0ID0gcG9zaXRpb247CiAgICAgIHdoaWxlICghaXNFbmQoKSAmJiBpc05vbkRlbGltaXRlcihkYXRlW3Bvc2l0aW9uXSkpIHBvc2l0aW9uKys7CiAgICAgIHRva2Vucy5hZGQoZGF0ZS5zdWJzdHJpbmcoc3RhcnQsIHBvc2l0aW9uKS50b0xvd2VyQ2FzZSgpKTsKICAgICAgd2hpbGUgKCFpc0VuZCgpICYmIGlzRGVsaW1pdGVyKGRhdGVbcG9zaXRpb25dKSkgcG9zaXRpb24rKzsKICAgIH0KCiAgICBTdHJpbmcgdGltZVN0cjsKICAgIFN0cmluZyBkYXlPZk1vbnRoU3RyOwogICAgU3RyaW5nIG1vbnRoU3RyOwogICAgU3RyaW5nIHllYXJTdHI7CgogICAgZm9yICh2YXIgdG9rZW4gaW4gdG9rZW5zKSB7CiAgICAgIGlmICh0b2tlbi5sZW5ndGggPCAxKSBjb250aW51ZTsKICAgICAgaWYgKHRpbWVTdHIgPT0gbnVsbCAmJgogICAgICAgICAgdG9rZW4ubGVuZ3RoID49IDUgJiYKICAgICAgICAgIGlzRGlnaXQodG9rZW5bMF0pICYmCiAgICAgICAgICAodG9rZW5bMV0gPT0gIjoiIHx8IChpc0RpZ2l0KHRva2VuWzFdKSAmJiB0b2tlblsyXSA9PSAiOiIpKSkgewogICAgICAgIHRpbWVTdHIgPSB0b2tlbjsKICAgICAgfSBlbHNlIGlmIChkYXlPZk1vbnRoU3RyID09IG51bGwgJiYgaXNEaWdpdCh0b2tlblswXSkpIHsKICAgICAgICBkYXlPZk1vbnRoU3RyID0gdG9rZW47CiAgICAgIH0gZWxzZSBpZiAobW9udGhTdHIgPT0gbnVsbCAmJiBnZXRNb250aCh0b2tlbikgPj0gMCkgewogICAgICAgIG1vbnRoU3RyID0gdG9rZW47CiAgICAgIH0gZWxzZSBpZiAoeWVhclN0ciA9PSBudWxsICYmCiAgICAgICAgICB0b2tlbi5sZW5ndGggPj0gMiAmJgogICAgICAgICAgaXNEaWdpdCh0b2tlblswXSkgJiYKICAgICAgICAgIGlzRGlnaXQodG9rZW5bMV0pKSB7CiAgICAgICAgeWVhclN0ciA9IHRva2VuOwogICAgICB9CiAgICB9CgogICAgaWYgKHRpbWVTdHIgPT0gbnVsbCB8fAogICAgICAgIGRheU9mTW9udGhTdHIgPT0gbnVsbCB8fAogICAgICAgIG1vbnRoU3RyID09IG51bGwgfHwKICAgICAgICB5ZWFyU3RyID09IG51bGwpIHsKICAgICAgZXJyb3IoKTsKICAgIH0KCiAgICBpbnQgeWVhciA9IHRvSW50KHllYXJTdHIpOwogICAgaWYgKHllYXIgPj0gNzAgJiYgeWVhciA8PSA5OSkKICAgICAgeWVhciArPSAxOTAwOwogICAgZWxzZSBpZiAoeWVhciA+PSAwICYmIHllYXIgPD0gNjkpIHllYXIgKz0gMjAwMDsKICAgIGlmICh5ZWFyIDwgMTYwMSkgZXJyb3IoKTsKCiAgICBpbnQgZGF5T2ZNb250aCA9IHRvSW50KGRheU9mTW9udGhTdHIpOwogICAgaWYgKGRheU9mTW9udGggPCAxIHx8IGRheU9mTW9udGggPiAzMSkgZXJyb3IoKTsKCiAgICBpbnQgbW9udGggPSBnZXRNb250aChtb250aFN0cikgKyAxOwoKICAgIHZhciB0aW1lTGlzdCA9IHRpbWVTdHIuc3BsaXQoIjoiKTsKICAgIGlmICh0aW1lTGlzdC5sZW5ndGggIT0gMykgZXJyb3IoKTsKICAgIGludCBob3VyID0gdG9JbnQodGltZUxpc3RbMF0pOwogICAgaW50IG1pbnV0ZSA9IHRvSW50KHRpbWVMaXN0WzFdKTsKICAgIGludCBzZWNvbmQgPSB0b0ludCh0aW1lTGlzdFsyXSk7CiAgICBpZiAoaG91ciA+IDIzKSBlcnJvcigpOwogICAgaWYgKG1pbnV0ZSA+IDU5KSBlcnJvcigpOwogICAgaWYgKHNlY29uZCA+IDU5KSBlcnJvcigpOwoKICAgIHJldHVybiBuZXcgRGF0ZVRpbWUudXRjKHllYXIsIG1vbnRoLCBkYXlPZk1vbnRoLCBob3VyLCBtaW51dGUsIHNlY29uZCwgMCk7CiAgfQp9CoGGAE5OPAEUAQREDAQRLjYFPjg6NS45MDc3LzEqKjI3QjIyMgEGIEAqBihQHw0NDQ0NDQ0NDQ0NDAcBHykkFCUgEyITISghKiMqIxcaBAEGMkA/PwUmKyIFMD0gBicXUSIQERMSEBIPByANDQ0NDQ0NDQ0NDQwHKQ0NDQ0NDQwHKxARExIQEg8HKQ0NDQ0NDQ0NDQ0NDAcBISAhARMQEAEcLDwIPBY8CBkGARoTTioXLEsqGScdIhoKDyoZJx0iGgopHSEaCgg6BgEoMFAoFyclOgYBJg8iLg8bCC8mDCQWJzwIBgEXIjwIBgEjDQ8ODxERIyAxHB4gIBwNEzxAHR4gIBUGEU8EASEyKQ0NDQ0NDQ0NDQ0NDAcBFgETPAYBLQEhIiU1NTU1FAYBJCI1NT4sPj4+FAYBHSIzFAYBISc9BgEaFT4vBgEVF0IcRUFCBgEUGhUUASAmHR8fSRk/Hz0aJB8fHxkIBgEbIRwbDwYBHyIUNB4BKzQBKAEnJyMlJRweHgFPBAIBGWRhcnQ6X2h0dHAvaHR0cF9kYXRlLmRhcnQzb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL19odHRwL2h0dHBfaGVhZGVycy5kYXJ0wABuVy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX2h0dHA7CgpjbGFzcyBfSHR0cEhlYWRlcnMgaW1wbGVtZW50cyBIdHRwSGVhZGVycyB7CiAgZmluYWwgTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PiBfaGVhZGVyczsKICBmaW5hbCBTdHJpbmcgcHJvdG9jb2xWZXJzaW9uOwoKICBib29sIF9tdXRhYmxlID0gdHJ1ZTsgLy8gQXJlIHRoZSBoZWFkZXJzIGN1cnJlbnRseSBtdXRhYmxlPwogIExpc3Q8U3RyaW5nPiBfbm9Gb2xkaW5nSGVhZGVyczsKCiAgaW50IF9jb250ZW50TGVuZ3RoID0gLTE7CiAgYm9vbCBfcGVyc2lzdGVudENvbm5lY3Rpb24gPSB0cnVlOwogIGJvb2wgX2NodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gZmFsc2U7CiAgU3RyaW5nIF9ob3N0OwogIGludCBfcG9ydDsKCiAgZmluYWwgaW50IF9kZWZhdWx0UG9ydEZvclNjaGVtZTsKCiAgX0h0dHBIZWFkZXJzKHRoaXMucHJvdG9jb2xWZXJzaW9uLAogICAgICB7aW50IGRlZmF1bHRQb3J0Rm9yU2NoZW1lOiBIdHRwQ2xpZW50LmRlZmF1bHRIdHRwUG9ydCwKICAgICAgX0h0dHBIZWFkZXJzIGluaXRpYWxIZWFkZXJzfSkKICAgICAgOiBfaGVhZGVycyA9IG5ldyBIYXNoTWFwPFN0cmluZywgTGlzdDxTdHJpbmc+PigpLAogICAgICAgIF9kZWZhdWx0UG9ydEZvclNjaGVtZSA9IGRlZmF1bHRQb3J0Rm9yU2NoZW1lIHsKICAgIGlmIChpbml0aWFsSGVhZGVycyAhPSBudWxsKSB7CiAgICAgIGluaXRpYWxIZWFkZXJzLl9oZWFkZXJzLmZvckVhY2goKG5hbWUsIHZhbHVlKSA9PiBfaGVhZGVyc1tuYW1lXSA9IHZhbHVlKTsKICAgICAgX2NvbnRlbnRMZW5ndGggPSBpbml0aWFsSGVhZGVycy5fY29udGVudExlbmd0aDsKICAgICAgX3BlcnNpc3RlbnRDb25uZWN0aW9uID0gaW5pdGlhbEhlYWRlcnMuX3BlcnNpc3RlbnRDb25uZWN0aW9uOwogICAgICBfY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSBpbml0aWFsSGVhZGVycy5fY2h1bmtlZFRyYW5zZmVyRW5jb2Rpbmc7CiAgICAgIF9ob3N0ID0gaW5pdGlhbEhlYWRlcnMuX2hvc3Q7CiAgICAgIF9wb3J0ID0gaW5pdGlhbEhlYWRlcnMuX3BvcnQ7CiAgICB9CiAgICBpZiAocHJvdG9jb2xWZXJzaW9uID09ICIxLjAiKSB7CiAgICAgIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IGZhbHNlOwogICAgICBfY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSBmYWxzZTsKICAgIH0KICB9CgogIExpc3Q8U3RyaW5nPiBvcGVyYXRvciBbXShTdHJpbmcgbmFtZSkgPT4gX2hlYWRlcnNbbmFtZS50b0xvd2VyQ2FzZSgpXTsKCiAgU3RyaW5nIHZhbHVlKFN0cmluZyBuYW1lKSB7CiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpOwogICAgTGlzdDxTdHJpbmc+IHZhbHVlcyA9IF9oZWFkZXJzW25hbWVdOwogICAgaWYgKHZhbHVlcyA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMSkgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiTW9yZSB0aGFuIG9uZSB2YWx1ZSBmb3IgaGVhZGVyICRuYW1lIik7CiAgICB9CiAgICByZXR1cm4gdmFsdWVzWzBdOwogIH0KCiAgdm9pZCBhZGQoU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICBfYWRkQWxsKF92YWxpZGF0ZUZpZWxkKG5hbWUpLCB2YWx1ZSk7CiAgfQoKICB2b2lkIF9hZGRBbGwoU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICBhc3NlcnQobmFtZSA9PSBfdmFsaWRhdGVGaWVsZChuYW1lKSk7CiAgICBpZiAodmFsdWUgaXMgSXRlcmFibGUpIHsKICAgICAgZm9yICh2YXIgdiBpbiB2YWx1ZSkgewogICAgICAgIF9hZGQobmFtZSwgX3ZhbGlkYXRlVmFsdWUodikpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBfYWRkKG5hbWUsIF92YWxpZGF0ZVZhbHVlKHZhbHVlKSk7CiAgICB9CiAgfQoKICB2b2lkIHNldChTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICBuYW1lID0gX3ZhbGlkYXRlRmllbGQobmFtZSk7CiAgICBfaGVhZGVycy5yZW1vdmUobmFtZSk7CiAgICBpZiAobmFtZSA9PSBIdHRwSGVhZGVycy50cmFuc2ZlckVuY29kaW5nSGVhZGVyKSB7CiAgICAgIF9jaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9IGZhbHNlOwogICAgfQogICAgX2FkZEFsbChuYW1lLCB2YWx1ZSk7CiAgfQoKICB2b2lkIHJlbW92ZShTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICBuYW1lID0gX3ZhbGlkYXRlRmllbGQobmFtZSk7CiAgICB2YWx1ZSA9IF92YWxpZGF0ZVZhbHVlKHZhbHVlKTsKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBfaGVhZGVyc1tuYW1lXTsKICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkgewogICAgICBpbnQgaW5kZXggPSB2YWx1ZXMuaW5kZXhPZih2YWx1ZSk7CiAgICAgIGlmIChpbmRleCAhPSAtMSkgewogICAgICAgIHZhbHVlcy5yZW1vdmVSYW5nZShpbmRleCwgaW5kZXggKyAxKTsKICAgICAgfQogICAgICBpZiAodmFsdWVzLmxlbmd0aCA9PSAwKSBfaGVhZGVycy5yZW1vdmUobmFtZSk7CiAgICB9CiAgICBpZiAobmFtZSA9PSBIdHRwSGVhZGVycy50cmFuc2ZlckVuY29kaW5nSGVhZGVyICYmIHZhbHVlID09ICJjaHVua2VkIikgewogICAgICBfY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSBmYWxzZTsKICAgIH0KICB9CgogIHZvaWQgcmVtb3ZlQWxsKFN0cmluZyBuYW1lKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICBuYW1lID0gX3ZhbGlkYXRlRmllbGQobmFtZSk7CiAgICBfaGVhZGVycy5yZW1vdmUobmFtZSk7CiAgfQoKICB2b2lkIGZvckVhY2godm9pZCBmKFN0cmluZyBuYW1lLCBMaXN0PFN0cmluZz4gdmFsdWVzKSkgewogICAgX2hlYWRlcnMuZm9yRWFjaChmKTsKICB9CgogIHZvaWQgbm9Gb2xkaW5nKFN0cmluZyBuYW1lKSB7CiAgICBpZiAoX25vRm9sZGluZ0hlYWRlcnMgPT0gbnVsbCkgX25vRm9sZGluZ0hlYWRlcnMgPSBuZXcgTGlzdDxTdHJpbmc+KCk7CiAgICBfbm9Gb2xkaW5nSGVhZGVycy5hZGQobmFtZSk7CiAgfQoKICBib29sIGdldCBwZXJzaXN0ZW50Q29ubmVjdGlvbiA9PiBfcGVyc2lzdGVudENvbm5lY3Rpb247CgogIHZvaWQgc2V0IHBlcnNpc3RlbnRDb25uZWN0aW9uKGJvb2wgcGVyc2lzdGVudENvbm5lY3Rpb24pIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIGlmIChwZXJzaXN0ZW50Q29ubmVjdGlvbiA9PSBfcGVyc2lzdGVudENvbm5lY3Rpb24pIHJldHVybjsKICAgIGlmIChwZXJzaXN0ZW50Q29ubmVjdGlvbikgewogICAgICBpZiAocHJvdG9jb2xWZXJzaW9uID09ICIxLjEiKSB7CiAgICAgICAgcmVtb3ZlKEh0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXIsICJjbG9zZSIpOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChfY29udGVudExlbmd0aCA9PSAtMSkgewogICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAgICAgIlRyeWluZyB0byBzZXQgJ0Nvbm5lY3Rpb246IEtlZXAtQWxpdmUnIG9uIEhUVFAgMS4wIGhlYWRlcnMgd2l0aCAiCiAgICAgICAgICAgICAgIm5vIENvbnRlbnRMZW5ndGgiKTsKICAgICAgICB9CiAgICAgICAgYWRkKEh0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXIsICJrZWVwLWFsaXZlIik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChwcm90b2NvbFZlcnNpb24gPT0gIjEuMSIpIHsKICAgICAgICBhZGQoSHR0cEhlYWRlcnMuY29ubmVjdGlvbkhlYWRlciwgImNsb3NlIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVtb3ZlKEh0dHBIZWFkZXJzLmNvbm5lY3Rpb25IZWFkZXIsICJrZWVwLWFsaXZlIik7CiAgICAgIH0KICAgIH0KICAgIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IHBlcnNpc3RlbnRDb25uZWN0aW9uOwogIH0KCiAgaW50IGdldCBjb250ZW50TGVuZ3RoID0+IF9jb250ZW50TGVuZ3RoOwoKICB2b2lkIHNldCBjb250ZW50TGVuZ3RoKGludCBjb250ZW50TGVuZ3RoKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICBpZiAocHJvdG9jb2xWZXJzaW9uID09ICIxLjAiICYmCiAgICAgICAgcGVyc2lzdGVudENvbm5lY3Rpb24gJiYKICAgICAgICBjb250ZW50TGVuZ3RoID09IC0xKSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKAogICAgICAgICAgIlRyeWluZyB0byBjbGVhciBDb250ZW50TGVuZ3RoIG9uIEhUVFAgMS4wIGhlYWRlcnMgd2l0aCAiCiAgICAgICAgICAiJ0Nvbm5lY3Rpb246IEtlZXAtQWxpdmUnIHNldCIpOwogICAgfQogICAgaWYgKF9jb250ZW50TGVuZ3RoID09IGNvbnRlbnRMZW5ndGgpIHJldHVybjsKICAgIF9jb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aDsKICAgIGlmIChfY29udGVudExlbmd0aCA+PSAwKSB7CiAgICAgIGlmIChjaHVua2VkVHJhbnNmZXJFbmNvZGluZykgY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSBmYWxzZTsKICAgICAgX3NldChIdHRwSGVhZGVycy5jb250ZW50TGVuZ3RoSGVhZGVyLCBjb250ZW50TGVuZ3RoLnRvU3RyaW5nKCkpOwogICAgfSBlbHNlIHsKICAgICAgcmVtb3ZlQWxsKEh0dHBIZWFkZXJzLmNvbnRlbnRMZW5ndGhIZWFkZXIpOwogICAgICBpZiAocHJvdG9jb2xWZXJzaW9uID09ICIxLjEiKSB7CiAgICAgICAgY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSB0cnVlOwogICAgICB9CiAgICB9CiAgfQoKICBib29sIGdldCBjaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9PiBfY2h1bmtlZFRyYW5zZmVyRW5jb2Rpbmc7CgogIHZvaWQgc2V0IGNodW5rZWRUcmFuc2ZlckVuY29kaW5nKGJvb2wgY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcpIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIGlmIChjaHVua2VkVHJhbnNmZXJFbmNvZGluZyAmJiBwcm90b2NvbFZlcnNpb24gPT0gIjEuMCIpIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAiVHJ5aW5nIHRvIHNldCAnVHJhbnNmZXItRW5jb2Rpbmc6IENodW5rZWQnIG9uIEhUVFAgMS4wIGhlYWRlcnMiKTsKICAgIH0KICAgIGlmIChjaHVua2VkVHJhbnNmZXJFbmNvZGluZyA9PSBfY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcpIHJldHVybjsKICAgIGlmIChjaHVua2VkVHJhbnNmZXJFbmNvZGluZykgewogICAgICBMaXN0PFN0cmluZz4gdmFsdWVzID0gX2hlYWRlcnNbSHR0cEhlYWRlcnMudHJhbnNmZXJFbmNvZGluZ0hlYWRlcl07CiAgICAgIGlmICgodmFsdWVzID09IG51bGwgfHwgdmFsdWVzLmxhc3QgIT0gImNodW5rZWQiKSkgewogICAgICAgIC8vIEhlYWRlcnMgZG9lcyBub3Qgc3BlY2lmeSBjaHVua2VkIGVuY29kaW5nIC0gYWRkIGl0IGlmIHNldC4KICAgICAgICBfYWRkVmFsdWUoSHR0cEhlYWRlcnMudHJhbnNmZXJFbmNvZGluZ0hlYWRlciwgImNodW5rZWQiKTsKICAgICAgfQogICAgICBjb250ZW50TGVuZ3RoID0gLTE7CiAgICB9IGVsc2UgewogICAgICAvLyBIZWFkZXJzIGRvZXMgc3BlY2lmeSBjaHVua2VkIGVuY29kaW5nIC0gcmVtb3ZlIGl0IGlmIG5vdCBzZXQuCiAgICAgIHJlbW92ZShIdHRwSGVhZGVycy50cmFuc2ZlckVuY29kaW5nSGVhZGVyLCAiY2h1bmtlZCIpOwogICAgfQogICAgX2NodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gY2h1bmtlZFRyYW5zZmVyRW5jb2Rpbmc7CiAgfQoKICBTdHJpbmcgZ2V0IGhvc3QgPT4gX2hvc3Q7CgogIHZvaWQgc2V0IGhvc3QoU3RyaW5nIGhvc3QpIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIF9ob3N0ID0gaG9zdDsKICAgIF91cGRhdGVIb3N0SGVhZGVyKCk7CiAgfQoKICBpbnQgZ2V0IHBvcnQgPT4gX3BvcnQ7CgogIHZvaWQgc2V0IHBvcnQoaW50IHBvcnQpIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIF9wb3J0ID0gcG9ydDsKICAgIF91cGRhdGVIb3N0SGVhZGVyKCk7CiAgfQoKICBEYXRlVGltZSBnZXQgaWZNb2RpZmllZFNpbmNlIHsKICAgIExpc3Q8U3RyaW5nPiB2YWx1ZXMgPSBfaGVhZGVyc1tIdHRwSGVhZGVycy5pZk1vZGlmaWVkU2luY2VIZWFkZXJdOwogICAgaWYgKHZhbHVlcyAhPSBudWxsKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIEh0dHBEYXRlLnBhcnNlKHZhbHVlc1swXSk7CiAgICAgIH0gb24gRXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBzZXQgaWZNb2RpZmllZFNpbmNlKERhdGVUaW1lIGlmTW9kaWZpZWRTaW5jZSkgewogICAgX2NoZWNrTXV0YWJsZSgpOwogICAgLy8gRm9ybWF0ICJpZk1vZGlmaWVkU2luY2UiIGhlYWRlciB3aXRoIGRhdGUgaW4gR3JlZW53aWNoIE1lYW4gVGltZSAoR01UKS4KICAgIFN0cmluZyBmb3JtYXR0ZWQgPSBIdHRwRGF0ZS5mb3JtYXQoaWZNb2RpZmllZFNpbmNlLnRvVXRjKCkpOwogICAgX3NldChIdHRwSGVhZGVycy5pZk1vZGlmaWVkU2luY2VIZWFkZXIsIGZvcm1hdHRlZCk7CiAgfQoKICBEYXRlVGltZSBnZXQgZGF0ZSB7CiAgICBMaXN0PFN0cmluZz4gdmFsdWVzID0gX2hlYWRlcnNbSHR0cEhlYWRlcnMuZGF0ZUhlYWRlcl07CiAgICBpZiAodmFsdWVzICE9IG51bGwpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gSHR0cERhdGUucGFyc2UodmFsdWVzWzBdKTsKICAgICAgfSBvbiBFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQoKICB2b2lkIHNldCBkYXRlKERhdGVUaW1lIGRhdGUpIHsKICAgIF9jaGVja011dGFibGUoKTsKICAgIC8vIEZvcm1hdCAiRGF0ZVRpbWUiIGhlYWRlciB3aXRoIGRhdGUgaW4gR3JlZW53aWNoIE1lYW4gVGltZSAoR01UKS4KICAgIFN0cmluZyBmb3JtYXR0ZWQgPSBIdHRwRGF0ZS5mb3JtYXQoZGF0ZS50b1V0YygpKTsKICAgIF9zZXQoImRhdGUiLCBmb3JtYXR0ZWQpOwogIH0KCiAgRGF0ZVRpbWUgZ2V0IGV4cGlyZXMgewogICAgTGlzdDxTdHJpbmc+IHZhbHVlcyA9IF9oZWFkZXJzW0h0dHBIZWFkZXJzLmV4cGlyZXNIZWFkZXJdOwogICAgaWYgKHZhbHVlcyAhPSBudWxsKSB7CiAgICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIEh0dHBEYXRlLnBhcnNlKHZhbHVlc1swXSk7CiAgICAgIH0gb24gRXhjZXB0aW9uIGNhdGNoIChlKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgdm9pZCBzZXQgZXhwaXJlcyhEYXRlVGltZSBleHBpcmVzKSB7CiAgICBfY2hlY2tNdXRhYmxlKCk7CiAgICAvLyBGb3JtYXQgIkV4cGlyZXMiIGhlYWRlciB3aXRoIGRhdGUgaW4gR3JlZW53aWNoIE1lYW4gVGltZSAoR01UKS4KICAgIFN0cmluZyBmb3JtYXR0ZWQgPSBIdHRwRGF0ZS5mb3JtYXQoZXhwaXJlcy50b1V0YygpKTsKICAgIF9zZXQoSHR0cEhlYWRlcnMuZXhwaXJlc0hlYWRlciwgZm9ybWF0dGVkKTsKICB9CgogIENvbnRlbnRUeXBlIGdldCBjb250ZW50VHlwZSB7CiAgICB2YXIgdmFsdWVzID0gX2hlYWRlcnNbImNvbnRlbnQtdHlwZSJdOwogICAgaWYgKHZhbHVlcyAhPSBudWxsKSB7CiAgICAgIHJldHVybiBDb250ZW50VHlwZS5wYXJzZSh2YWx1ZXNbMF0pOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfQoKICB2b2lkIHNldCBjb250ZW50VHlwZShDb250ZW50VHlwZSBjb250ZW50VHlwZSkgewogICAgX2NoZWNrTXV0YWJsZSgpOwogICAgX3NldChIdHRwSGVhZGVycy5jb250ZW50VHlwZUhlYWRlciwgY29udGVudFR5cGUudG9TdHJpbmcoKSk7CiAgfQoKICB2b2lkIGNsZWFyKCkgewogICAgX2NoZWNrTXV0YWJsZSgpOwogICAgX2hlYWRlcnMuY2xlYXIoKTsKICAgIF9jb250ZW50TGVuZ3RoID0gLTE7CiAgICBfcGVyc2lzdGVudENvbm5lY3Rpb24gPSB0cnVlOwogICAgX2NodW5rZWRUcmFuc2ZlckVuY29kaW5nID0gZmFsc2U7CiAgICBfaG9zdCA9IG51bGw7CiAgICBfcG9ydCA9IG51bGw7CiAgfQoKICAvLyBbbmFtZV0gbXVzdCBiZSBhIGxvd2VyLWNhc2UgdmVyc2lvbiBvZiB0aGUgbmFtZS4KICB2b2lkIF9hZGQoU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICBhc3NlcnQobmFtZSA9PSBfdmFsaWRhdGVGaWVsZChuYW1lKSk7CiAgICAvLyBVc2UgdGhlIGxlbmd0aCBhcyBpbmRleCBvbiB3aGF0IG1ldGhvZCB0byBjYWxsLiBUaGlzIGlzIG5vdGFibGUKICAgIC8vIGZhc3RlciB0aGFuIGNvbXB1dGluZyBoYXNoIGFuZCBsb29raW5nIHVwIGluIGEgaGFzaC1tYXAuCiAgICBzd2l0Y2ggKG5hbWUubGVuZ3RoKSB7CiAgICAgIGNhc2UgNDoKICAgICAgICBpZiAoSHR0cEhlYWRlcnMuZGF0ZUhlYWRlciA9PSBuYW1lKSB7CiAgICAgICAgICBfYWRkRGF0ZShuYW1lLCB2YWx1ZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChIdHRwSGVhZGVycy5ob3N0SGVhZGVyID09IG5hbWUpIHsKICAgICAgICAgIF9hZGRIb3N0KG5hbWUsIHZhbHVlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgNzoKICAgICAgICBpZiAoSHR0cEhlYWRlcnMuZXhwaXJlc0hlYWRlciA9PSBuYW1lKSB7CiAgICAgICAgICBfYWRkRXhwaXJlcyhuYW1lLCB2YWx1ZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDEwOgogICAgICAgIGlmIChIdHRwSGVhZGVycy5jb25uZWN0aW9uSGVhZGVyID09IG5hbWUpIHsKICAgICAgICAgIF9hZGRDb25uZWN0aW9uKG5hbWUsIHZhbHVlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTI6CiAgICAgICAgaWYgKEh0dHBIZWFkZXJzLmNvbnRlbnRUeXBlSGVhZGVyID09IG5hbWUpIHsKICAgICAgICAgIF9hZGRDb250ZW50VHlwZShuYW1lLCB2YWx1ZSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlIDE0OgogICAgICAgIGlmIChIdHRwSGVhZGVycy5jb250ZW50TGVuZ3RoSGVhZGVyID09IG5hbWUpIHsKICAgICAgICAgIF9hZGRDb250ZW50TGVuZ3RoKG5hbWUsIHZhbHVlKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgMTc6CiAgICAgICAgaWYgKEh0dHBIZWFkZXJzLnRyYW5zZmVyRW5jb2RpbmdIZWFkZXIgPT0gbmFtZSkgewogICAgICAgICAgX2FkZFRyYW5zZmVyRW5jb2RpbmcobmFtZSwgdmFsdWUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoSHR0cEhlYWRlcnMuaWZNb2RpZmllZFNpbmNlSGVhZGVyID09IG5hbWUpIHsKICAgICAgICAgIF9hZGRJZk1vZGlmaWVkU2luY2UobmFtZSwgdmFsdWUpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIF9hZGRWYWx1ZShuYW1lLCB2YWx1ZSk7CiAgfQoKICB2b2lkIF9hZGRDb250ZW50TGVuZ3RoKFN0cmluZyBuYW1lLCB2YWx1ZSkgewogICAgaWYgKHZhbHVlIGlzIGludCkgewogICAgICBjb250ZW50TGVuZ3RoID0gdmFsdWU7CiAgICB9IGVsc2UgaWYgKHZhbHVlIGlzIFN0cmluZykgewogICAgICBjb250ZW50TGVuZ3RoID0gaW50LnBhcnNlKHZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHR5cGUgZm9yIGhlYWRlciBuYW1lZCAkbmFtZSIpOwogICAgfQogIH0KCiAgdm9pZCBfYWRkVHJhbnNmZXJFbmNvZGluZyhTdHJpbmcgbmFtZSwgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSA9PSAiY2h1bmtlZCIpIHsKICAgICAgY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmcgPSB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgX2FkZFZhbHVlKEh0dHBIZWFkZXJzLnRyYW5zZmVyRW5jb2RpbmdIZWFkZXIsIHZhbHVlKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZERhdGUoU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgRGF0ZVRpbWUpIHsKICAgICAgZGF0ZSA9IHZhbHVlOwogICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBTdHJpbmcpIHsKICAgICAgX3NldChIdHRwSGVhZGVycy5kYXRlSGVhZGVyLCB2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiVW5leHBlY3RlZCB0eXBlIGZvciBoZWFkZXIgbmFtZWQgJG5hbWUiKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZEV4cGlyZXMoU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgRGF0ZVRpbWUpIHsKICAgICAgZXhwaXJlcyA9IHZhbHVlOwogICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBTdHJpbmcpIHsKICAgICAgX3NldChIdHRwSGVhZGVycy5leHBpcmVzSGVhZGVyLCB2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiVW5leHBlY3RlZCB0eXBlIGZvciBoZWFkZXIgbmFtZWQgJG5hbWUiKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZElmTW9kaWZpZWRTaW5jZShTdHJpbmcgbmFtZSwgdmFsdWUpIHsKICAgIGlmICh2YWx1ZSBpcyBEYXRlVGltZSkgewogICAgICBpZk1vZGlmaWVkU2luY2UgPSB2YWx1ZTsKICAgIH0gZWxzZSBpZiAodmFsdWUgaXMgU3RyaW5nKSB7CiAgICAgIF9zZXQoSHR0cEhlYWRlcnMuaWZNb2RpZmllZFNpbmNlSGVhZGVyLCB2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiVW5leHBlY3RlZCB0eXBlIGZvciBoZWFkZXIgbmFtZWQgJG5hbWUiKTsKICAgIH0KICB9CgogIHZvaWQgX2FkZEhvc3QoU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMgU3RyaW5nKSB7CiAgICAgIGludCBwb3MgPSB2YWx1ZS5pbmRleE9mKCI6Iik7CiAgICAgIGlmIChwb3MgPT0gLTEpIHsKICAgICAgICBfaG9zdCA9IHZhbHVlOwogICAgICAgIF9wb3J0ID0gSHR0cENsaWVudC5kZWZhdWx0SHR0cFBvcnQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHBvcyA+IDApIHsKICAgICAgICAgIF9ob3N0ID0gdmFsdWUuc3Vic3RyaW5nKDAsIHBvcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9ob3N0ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKHBvcyArIDEgPT0gdmFsdWUubGVuZ3RoKSB7CiAgICAgICAgICBfcG9ydCA9IEh0dHBDbGllbnQuZGVmYXVsdEh0dHBQb3J0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBfcG9ydCA9IGludC5wYXJzZSh2YWx1ZS5zdWJzdHJpbmcocG9zICsgMSkpOwogICAgICAgICAgfSBvbiBGb3JtYXRFeGNlcHRpb24gY2F0Y2ggKGUpIHsKICAgICAgICAgICAgX3BvcnQgPSBudWxsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBfc2V0KEh0dHBIZWFkZXJzLmhvc3RIZWFkZXIsIHZhbHVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJVbmV4cGVjdGVkIHR5cGUgZm9yIGhlYWRlciBuYW1lZCAkbmFtZSIpOwogICAgfQogIH0KCiAgdm9pZCBfYWRkQ29ubmVjdGlvbihTdHJpbmcgbmFtZSwgdmFsdWUpIHsKICAgIHZhciBsb3dlckNhc2VWYWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7CiAgICBpZiAobG93ZXJDYXNlVmFsdWUgPT0gJ2Nsb3NlJykgewogICAgICBfcGVyc2lzdGVudENvbm5lY3Rpb24gPSBmYWxzZTsKICAgIH0gZWxzZSBpZiAobG93ZXJDYXNlVmFsdWUgPT0gJ2tlZXAtYWxpdmUnKSB7CiAgICAgIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IHRydWU7CiAgICB9CiAgICBfYWRkVmFsdWUobmFtZSwgdmFsdWUpOwogIH0KCiAgdm9pZCBfYWRkQ29udGVudFR5cGUoU3RyaW5nIG5hbWUsIHZhbHVlKSB7CiAgICBfc2V0KEh0dHBIZWFkZXJzLmNvbnRlbnRUeXBlSGVhZGVyLCB2YWx1ZSk7CiAgfQoKICB2b2lkIF9hZGRWYWx1ZShTdHJpbmcgbmFtZSwgT2JqZWN0IHZhbHVlKSB7CiAgICBMaXN0PFN0cmluZz4gdmFsdWVzID0gX2hlYWRlcnNbbmFtZV07CiAgICBpZiAodmFsdWVzID09IG51bGwpIHsKICAgICAgdmFsdWVzID0gbmV3IExpc3Q8U3RyaW5nPigpOwogICAgICBfaGVhZGVyc1tuYW1lXSA9IHZhbHVlczsKICAgIH0KICAgIGlmICh2YWx1ZSBpcyBEYXRlVGltZSkgewogICAgICB2YWx1ZXMuYWRkKEh0dHBEYXRlLmZvcm1hdCh2YWx1ZSkpOwogICAgfSBlbHNlIGlmICh2YWx1ZSBpcyBTdHJpbmcpIHsKICAgICAgdmFsdWVzLmFkZCh2YWx1ZSk7CiAgICB9IGVsc2UgewogICAgICB2YWx1ZXMuYWRkKF92YWxpZGF0ZVZhbHVlKHZhbHVlLnRvU3RyaW5nKCkpKTsKICAgIH0KICB9CgogIHZvaWQgX3NldChTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKSB7CiAgICBhc3NlcnQobmFtZSA9PSBfdmFsaWRhdGVGaWVsZChuYW1lKSk7CiAgICBMaXN0PFN0cmluZz4gdmFsdWVzID0gbmV3IExpc3Q8U3RyaW5nPigpOwogICAgX2hlYWRlcnNbbmFtZV0gPSB2YWx1ZXM7CiAgICB2YWx1ZXMuYWRkKHZhbHVlKTsKICB9CgogIF9jaGVja011dGFibGUoKSB7CiAgICBpZiAoIV9tdXRhYmxlKSB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSFRUUCBoZWFkZXJzIGFyZSBub3QgbXV0YWJsZSIpOwogIH0KCiAgX3VwZGF0ZUhvc3RIZWFkZXIoKSB7CiAgICBib29sIGRlZmF1bHRQb3J0ID0gX3BvcnQgPT0gbnVsbCB8fCBfcG9ydCA9PSBfZGVmYXVsdFBvcnRGb3JTY2hlbWU7CiAgICBfc2V0KCJob3N0IiwgZGVmYXVsdFBvcnQgPyBob3N0IDogIiRob3N0OiRfcG9ydCIpOwogIH0KCiAgX2ZvbGRIZWFkZXIoU3RyaW5nIG5hbWUpIHsKICAgIGlmIChuYW1lID09IEh0dHBIZWFkZXJzLnNldENvb2tpZUhlYWRlciB8fAogICAgICAgIChfbm9Gb2xkaW5nSGVhZGVycyAhPSBudWxsICYmIF9ub0ZvbGRpbmdIZWFkZXJzLmluZGV4T2YobmFtZSkgIT0gLTEpKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgdm9pZCBfZmluYWxpemUoKSB7CiAgICBfbXV0YWJsZSA9IGZhbHNlOwogIH0KCiAgdm9pZCBfYnVpbGQoQnl0ZXNCdWlsZGVyIGJ1aWxkZXIpIHsKICAgIGZvciAoU3RyaW5nIG5hbWUgaW4gX2hlYWRlcnMua2V5cykgewogICAgICBMaXN0PFN0cmluZz4gdmFsdWVzID0gX2hlYWRlcnNbbmFtZV07CiAgICAgIGJvb2wgZm9sZCA9IF9mb2xkSGVhZGVyKG5hbWUpOwogICAgICB2YXIgbmFtZURhdGEgPSBuYW1lLmNvZGVVbml0czsKICAgICAgYnVpbGRlci5hZGQobmFtZURhdGEpOwogICAgICBidWlsZGVyLmFkZEJ5dGUoX0NoYXJDb2RlLkNPTE9OKTsKICAgICAgYnVpbGRlci5hZGRCeXRlKF9DaGFyQ29kZS5TUCk7CiAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGkgPiAwKSB7CiAgICAgICAgICBpZiAoZm9sZCkgewogICAgICAgICAgICBidWlsZGVyLmFkZEJ5dGUoX0NoYXJDb2RlLkNPTU1BKTsKICAgICAgICAgICAgYnVpbGRlci5hZGRCeXRlKF9DaGFyQ29kZS5TUCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBidWlsZGVyLmFkZEJ5dGUoX0NoYXJDb2RlLkNSKTsKICAgICAgICAgICAgYnVpbGRlci5hZGRCeXRlKF9DaGFyQ29kZS5MRik7CiAgICAgICAgICAgIGJ1aWxkZXIuYWRkKG5hbWVEYXRhKTsKICAgICAgICAgICAgYnVpbGRlci5hZGRCeXRlKF9DaGFyQ29kZS5DT0xPTik7CiAgICAgICAgICAgIGJ1aWxkZXIuYWRkQnl0ZShfQ2hhckNvZGUuU1ApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBidWlsZGVyLmFkZCh2YWx1ZXNbaV0uY29kZVVuaXRzKTsKICAgICAgfQogICAgICBidWlsZGVyLmFkZEJ5dGUoX0NoYXJDb2RlLkNSKTsKICAgICAgYnVpbGRlci5hZGRCeXRlKF9DaGFyQ29kZS5MRik7CiAgICB9CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBfaGVhZGVycy5mb3JFYWNoKChTdHJpbmcgbmFtZSwgTGlzdDxTdHJpbmc+IHZhbHVlcykgewogICAgICBzYi4ud3JpdGUobmFtZSkuLndyaXRlKCI6ICIpOwogICAgICBib29sIGZvbGQgPSBfZm9sZEhlYWRlcihuYW1lKTsKICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAoaSA+IDApIHsKICAgICAgICAgIGlmIChmb2xkKSB7CiAgICAgICAgICAgIHNiLndyaXRlKCIsICIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2IuLndyaXRlKCJcbiIpLi53cml0ZShuYW1lKS4ud3JpdGUoIjogIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHNiLndyaXRlKHZhbHVlc1tpXSk7CiAgICAgIH0KICAgICAgc2Iud3JpdGUoIlxuIik7CiAgICB9KTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgTGlzdDxDb29raWU+IF9wYXJzZUNvb2tpZXMoKSB7CiAgICAvLyBQYXJzZSBhIENvb2tpZSBoZWFkZXIgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBpbiBSRkMgNjI2NS4KICAgIHZhciBjb29raWVzID0gbmV3IExpc3Q8Q29va2llPigpOwogICAgdm9pZCBwYXJzZUNvb2tpZVN0cmluZyhTdHJpbmcgcykgewogICAgICBpbnQgaW5kZXggPSAwOwoKICAgICAgYm9vbCBkb25lKCkgPT4gaW5kZXggPT0gLTEgfHwgaW5kZXggPT0gcy5sZW5ndGg7CgogICAgICB2b2lkIHNraXBXUygpIHsKICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgICAgaWYgKHNbaW5kZXhdICE9ICIgIiAmJiBzW2luZGV4XSAhPSAiXHQiKSByZXR1cm47CiAgICAgICAgICBpbmRleCsrOwogICAgICAgIH0KICAgICAgfQoKICAgICAgU3RyaW5nIHBhcnNlTmFtZSgpIHsKICAgICAgICBpbnQgc3RhcnQgPSBpbmRleDsKICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgICAgaWYgKHNbaW5kZXhdID09ICIgIiB8fCBzW2luZGV4XSA9PSAiXHQiIHx8IHNbaW5kZXhdID09ICI9IikgYnJlYWs7CiAgICAgICAgICBpbmRleCsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcy5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KTsKICAgICAgfQoKICAgICAgU3RyaW5nIHBhcnNlVmFsdWUoKSB7CiAgICAgICAgaW50IHN0YXJ0ID0gaW5kZXg7CiAgICAgICAgd2hpbGUgKCFkb25lKCkpIHsKICAgICAgICAgIGlmIChzW2luZGV4XSA9PSAiICIgfHwgc1tpbmRleF0gPT0gIlx0IiB8fCBzW2luZGV4XSA9PSAiOyIpIGJyZWFrOwogICAgICAgICAgaW5kZXgrKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCk7CiAgICAgIH0KCiAgICAgIGJvb2wgZXhwZWN0KFN0cmluZyBleHBlY3RlZCkgewogICAgICAgIGlmIChkb25lKCkpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoc1tpbmRleF0gIT0gZXhwZWN0ZWQpIHJldHVybiBmYWxzZTsKICAgICAgICBpbmRleCsrOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CgogICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgIHNraXBXUygpOwogICAgICAgIGlmIChkb25lKCkpIHJldHVybjsKICAgICAgICBTdHJpbmcgbmFtZSA9IHBhcnNlTmFtZSgpOwogICAgICAgIHNraXBXUygpOwogICAgICAgIGlmICghZXhwZWN0KCI9IikpIHsKICAgICAgICAgIGluZGV4ID0gcy5pbmRleE9mKCc7JywgaW5kZXgpOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIHNraXBXUygpOwogICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlVmFsdWUoKTsKICAgICAgICB0cnkgewogICAgICAgICAgY29va2llcy5hZGQobmV3IF9Db29raWUobmFtZSwgdmFsdWUpKTsKICAgICAgICB9IGNhdGNoIChfKSB7CiAgICAgICAgICAvLyBTa2lwIGl0LCBpbnZhbGlkIGNvb2tpZSBkYXRhLgogICAgICAgIH0KICAgICAgICBza2lwV1MoKTsKICAgICAgICBpZiAoZG9uZSgpKSByZXR1cm47CiAgICAgICAgaWYgKCFleHBlY3QoIjsiKSkgewogICAgICAgICAgaW5kZXggPSBzLmluZGV4T2YoJzsnLCBpbmRleCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgICBMaXN0PFN0cmluZz4gdmFsdWVzID0gX2hlYWRlcnNbSHR0cEhlYWRlcnMuY29va2llSGVhZGVyXTsKICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkgewogICAgICB2YWx1ZXMuZm9yRWFjaCgoaGVhZGVyVmFsdWUpID0+IHBhcnNlQ29va2llU3RyaW5nKGhlYWRlclZhbHVlKSk7CiAgICB9CiAgICByZXR1cm4gY29va2llczsKICB9CgogIHN0YXRpYyBTdHJpbmcgX3ZhbGlkYXRlRmllbGQoU3RyaW5nIGZpZWxkKSB7CiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZpZWxkLmxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICghX0h0dHBQYXJzZXIuX2lzVG9rZW5DaGFyKGZpZWxkLmNvZGVVbml0QXQoaSkpKSB7CiAgICAgICAgdGhyb3cgbmV3IEZvcm1hdEV4Y2VwdGlvbigKICAgICAgICAgICAgIkludmFsaWQgSFRUUCBoZWFkZXIgZmllbGQgbmFtZTogJHtqc29uLmVuY29kZShmaWVsZCl9Iik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmaWVsZC50b0xvd2VyQ2FzZSgpOwogIH0KCiAgc3RhdGljIF92YWxpZGF0ZVZhbHVlKHZhbHVlKSB7CiAgICBpZiAodmFsdWUgaXMhIFN0cmluZykgcmV0dXJuIHZhbHVlOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykgewogICAgICBpZiAoIV9IdHRwUGFyc2VyLl9pc1ZhbHVlQ2hhcih2YWx1ZS5jb2RlVW5pdEF0KGkpKSkgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICJJbnZhbGlkIEhUVFAgaGVhZGVyIGZpZWxkIHZhbHVlOiAke2pzb24uZW5jb2RlKHZhbHVlKX0iKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHZhbHVlOwogIH0KfQoKY2xhc3MgX0hlYWRlclZhbHVlIGltcGxlbWVudHMgSGVhZGVyVmFsdWUgewogIFN0cmluZyBfdmFsdWU7CiAgTWFwPFN0cmluZywgU3RyaW5nPiBfcGFyYW1ldGVyczsKICBNYXA8U3RyaW5nLCBTdHJpbmc+IF91bm1vZGlmaWFibGVQYXJhbWV0ZXJzOwoKICBfSGVhZGVyVmFsdWUoW3RoaXMuX3ZhbHVlID0gIiIsIE1hcDxTdHJpbmcsIFN0cmluZz4gcGFyYW1ldGVyc10pIHsKICAgIGlmIChwYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgX3BhcmFtZXRlcnMgPSBuZXcgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4uZnJvbShwYXJhbWV0ZXJzKTsKICAgIH0KICB9CgogIHN0YXRpYyBfSGVhZGVyVmFsdWUgcGFyc2UoU3RyaW5nIHZhbHVlLAogICAgICB7cGFyYW1ldGVyU2VwYXJhdG9yOiAiOyIsCiAgICAgIHZhbHVlU2VwYXJhdG9yOiBudWxsLAogICAgICBwcmVzZXJ2ZUJhY2tzbGFzaDogZmFsc2V9KSB7CiAgICAvLyBQYXJzZSB0aGUgc3RyaW5nLgogICAgdmFyIHJlc3VsdCA9IG5ldyBfSGVhZGVyVmFsdWUoKTsKICAgIHJlc3VsdC5fcGFyc2UodmFsdWUsIHBhcmFtZXRlclNlcGFyYXRvciwgdmFsdWVTZXBhcmF0b3IsIHByZXNlcnZlQmFja3NsYXNoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICBTdHJpbmcgZ2V0IHZhbHVlID0+IF92YWx1ZTsKCiAgdm9pZCBfZW5zdXJlUGFyYW1ldGVycygpIHsKICAgIGlmIChfcGFyYW1ldGVycyA9PSBudWxsKSB7CiAgICAgIF9wYXJhbWV0ZXJzID0gbmV3IEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+KCk7CiAgICB9CiAgfQoKICBNYXA8U3RyaW5nLCBTdHJpbmc+IGdldCBwYXJhbWV0ZXJzIHsKICAgIF9lbnN1cmVQYXJhbWV0ZXJzKCk7CiAgICBpZiAoX3VubW9kaWZpYWJsZVBhcmFtZXRlcnMgPT0gbnVsbCkgewogICAgICBfdW5tb2RpZmlhYmxlUGFyYW1ldGVycyA9IG5ldyBVbm1vZGlmaWFibGVNYXBWaWV3KF9wYXJhbWV0ZXJzKTsKICAgIH0KICAgIHJldHVybiBfdW5tb2RpZmlhYmxlUGFyYW1ldGVyczsKICB9CgogIFN0cmluZyB0b1N0cmluZygpIHsKICAgIFN0cmluZ0J1ZmZlciBzYiA9IG5ldyBTdHJpbmdCdWZmZXIoKTsKICAgIHNiLndyaXRlKF92YWx1ZSk7CiAgICBpZiAocGFyYW1ldGVycyAhPSBudWxsICYmIHBhcmFtZXRlcnMubGVuZ3RoID4gMCkgewogICAgICBfcGFyYW1ldGVycy5mb3JFYWNoKChTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKSB7CiAgICAgICAgc2IuLndyaXRlKCI7ICIpLi53cml0ZShuYW1lKS4ud3JpdGUoIj0iKS4ud3JpdGUodmFsdWUpOwogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgdm9pZCBfcGFyc2UoU3RyaW5nIHMsIFN0cmluZyBwYXJhbWV0ZXJTZXBhcmF0b3IsIFN0cmluZyB2YWx1ZVNlcGFyYXRvciwKICAgICAgYm9vbCBwcmVzZXJ2ZUJhY2tzbGFzaCkgewogICAgaW50IGluZGV4ID0gMDsKCiAgICBib29sIGRvbmUoKSA9PiBpbmRleCA9PSBzLmxlbmd0aDsKCiAgICB2b2lkIHNraXBXUygpIHsKICAgICAgd2hpbGUgKCFkb25lKCkpIHsKICAgICAgICBpZiAoc1tpbmRleF0gIT0gIiAiICYmIHNbaW5kZXhdICE9ICJcdCIpIHJldHVybjsKICAgICAgICBpbmRleCsrOwogICAgICB9CiAgICB9CgogICAgU3RyaW5nIHBhcnNlVmFsdWUoKSB7CiAgICAgIGludCBzdGFydCA9IGluZGV4OwogICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgIGlmIChzW2luZGV4XSA9PSAiICIgfHwKICAgICAgICAgICAgc1tpbmRleF0gPT0gIlx0IiB8fAogICAgICAgICAgICBzW2luZGV4XSA9PSB2YWx1ZVNlcGFyYXRvciB8fAogICAgICAgICAgICBzW2luZGV4XSA9PSBwYXJhbWV0ZXJTZXBhcmF0b3IpIGJyZWFrOwogICAgICAgIGluZGV4Kys7CiAgICAgIH0KICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCk7CiAgICB9CgogICAgdm9pZCBleHBlY3QoU3RyaW5nIGV4cGVjdGVkKSB7CiAgICAgIGlmIChkb25lKCkgfHwgc1tpbmRleF0gIT0gZXhwZWN0ZWQpIHsKICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiRmFpbGVkIHRvIHBhcnNlIGhlYWRlciB2YWx1ZSIpOwogICAgICB9CiAgICAgIGluZGV4Kys7CiAgICB9CgogICAgdm9pZCBtYXliZUV4cGVjdChTdHJpbmcgZXhwZWN0ZWQpIHsKICAgICAgaWYgKHNbaW5kZXhdID09IGV4cGVjdGVkKSBpbmRleCsrOwogICAgfQoKICAgIHZvaWQgcGFyc2VQYXJhbWV0ZXJzKCkgewogICAgICB2YXIgcGFyYW1ldGVycyA9IG5ldyBIYXNoTWFwPFN0cmluZywgU3RyaW5nPigpOwogICAgICBfcGFyYW1ldGVycyA9IG5ldyBVbm1vZGlmaWFibGVNYXBWaWV3KHBhcmFtZXRlcnMpOwoKICAgICAgU3RyaW5nIHBhcnNlUGFyYW1ldGVyTmFtZSgpIHsKICAgICAgICBpbnQgc3RhcnQgPSBpbmRleDsKICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgICAgaWYgKHNbaW5kZXhdID09ICIgIiB8fAogICAgICAgICAgICAgIHNbaW5kZXhdID09ICJcdCIgfHwKICAgICAgICAgICAgICBzW2luZGV4XSA9PSAiPSIgfHwKICAgICAgICAgICAgICBzW2luZGV4XSA9PSBwYXJhbWV0ZXJTZXBhcmF0b3IgfHwKICAgICAgICAgICAgICBzW2luZGV4XSA9PSB2YWx1ZVNlcGFyYXRvcikgYnJlYWs7CiAgICAgICAgICBpbmRleCsrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcy5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KS50b0xvd2VyQ2FzZSgpOwogICAgICB9CgogICAgICBTdHJpbmcgcGFyc2VQYXJhbWV0ZXJWYWx1ZSgpIHsKICAgICAgICBpZiAoIWRvbmUoKSAmJiBzW2luZGV4XSA9PSAiXCIiKSB7CiAgICAgICAgICAvLyBQYXJzZSBxdW90ZWQgdmFsdWUuCiAgICAgICAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICAgICAgICBpbmRleCsrOwogICAgICAgICAgd2hpbGUgKCFkb25lKCkpIHsKICAgICAgICAgICAgaWYgKHNbaW5kZXhdID09ICJcXCIpIHsKICAgICAgICAgICAgICBpZiAoaW5kZXggKyAxID09IHMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiRmFpbGVkIHRvIHBhcnNlIGhlYWRlciB2YWx1ZSIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAocHJlc2VydmVCYWNrc2xhc2ggJiYgc1tpbmRleCArIDFdICE9ICJcIiIpIHsKICAgICAgICAgICAgICAgIHNiLndyaXRlKHNbaW5kZXhdKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgICAgfSBlbHNlIGlmIChzW2luZGV4XSA9PSAiXCIiKSB7CiAgICAgICAgICAgICAgaW5kZXgrKzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICBzYi53cml0ZShzW2luZGV4XSk7CiAgICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8gUGFyc2Ugbm9uLXF1b3RlZCB2YWx1ZS4KICAgICAgICAgIHZhciB2YWwgPSBwYXJzZVZhbHVlKCk7CiAgICAgICAgICByZXR1cm4gdmFsID09ICIiID8gbnVsbCA6IHZhbDsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgc2tpcFdTKCk7CiAgICAgICAgaWYgKGRvbmUoKSkgcmV0dXJuOwogICAgICAgIFN0cmluZyBuYW1lID0gcGFyc2VQYXJhbWV0ZXJOYW1lKCk7CiAgICAgICAgc2tpcFdTKCk7CiAgICAgICAgaWYgKGRvbmUoKSkgewogICAgICAgICAgcGFyYW1ldGVyc1tuYW1lXSA9IG51bGw7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIG1heWJlRXhwZWN0KCI9Iik7CiAgICAgICAgc2tpcFdTKCk7CiAgICAgICAgaWYgKGRvbmUoKSkgewogICAgICAgICAgcGFyYW1ldGVyc1tuYW1lXSA9IG51bGw7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIFN0cmluZyB2YWx1ZSA9IHBhcnNlUGFyYW1ldGVyVmFsdWUoKTsKICAgICAgICBpZiAobmFtZSA9PSAnY2hhcnNldCcgJiYgdGhpcyBpcyBfQ29udGVudFR5cGUgJiYgdmFsdWUgIT0gbnVsbCkgewogICAgICAgICAgLy8gQ2hhcnNldCBwYXJhbWV0ZXIgb2YgQ29udGVudFR5cGVzIGFyZSBhbHdheXMgbG93ZXItY2FzZS4KICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTsKICAgICAgICB9CiAgICAgICAgcGFyYW1ldGVyc1tuYW1lXSA9IHZhbHVlOwogICAgICAgIHNraXBXUygpOwogICAgICAgIGlmIChkb25lKCkpIHJldHVybjsKICAgICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgc3VwcG9ydCBmb3IgbXVsdGktdmFsdWVkIHBhcmFtZXRlcnMuCiAgICAgICAgaWYgKHNbaW5kZXhdID09IHZhbHVlU2VwYXJhdG9yKSByZXR1cm47CiAgICAgICAgZXhwZWN0KHBhcmFtZXRlclNlcGFyYXRvcik7CiAgICAgIH0KICAgIH0KCiAgICBza2lwV1MoKTsKICAgIF92YWx1ZSA9IHBhcnNlVmFsdWUoKTsKICAgIHNraXBXUygpOwogICAgaWYgKGRvbmUoKSkgcmV0dXJuOwogICAgbWF5YmVFeHBlY3QocGFyYW1ldGVyU2VwYXJhdG9yKTsKICAgIHBhcnNlUGFyYW1ldGVycygpOwogIH0KfQoKY2xhc3MgX0NvbnRlbnRUeXBlIGV4dGVuZHMgX0hlYWRlclZhbHVlIGltcGxlbWVudHMgQ29udGVudFR5cGUgewogIFN0cmluZyBfcHJpbWFyeVR5cGUgPSAiIjsKICBTdHJpbmcgX3N1YlR5cGUgPSAiIjsKCiAgX0NvbnRlbnRUeXBlKFN0cmluZyBwcmltYXJ5VHlwZSwgU3RyaW5nIHN1YlR5cGUsIFN0cmluZyBjaGFyc2V0LAogICAgICBNYXA8U3RyaW5nLCBTdHJpbmc+IHBhcmFtZXRlcnMpCiAgICAgIDogX3ByaW1hcnlUeXBlID0gcHJpbWFyeVR5cGUsCiAgICAgICAgX3N1YlR5cGUgPSBzdWJUeXBlLAogICAgICAgIHN1cGVyKCIiKSB7CiAgICBpZiAoX3ByaW1hcnlUeXBlID09IG51bGwpIF9wcmltYXJ5VHlwZSA9ICIiOwogICAgaWYgKF9zdWJUeXBlID09IG51bGwpIF9zdWJUeXBlID0gIiI7CiAgICBfdmFsdWUgPSAiJF9wcmltYXJ5VHlwZS8kX3N1YlR5cGUiOwogICAgaWYgKHBhcmFtZXRlcnMgIT0gbnVsbCkgewogICAgICBfZW5zdXJlUGFyYW1ldGVycygpOwogICAgICBwYXJhbWV0ZXJzLmZvckVhY2goKFN0cmluZyBrZXksIFN0cmluZyB2YWx1ZSkgewogICAgICAgIFN0cmluZyBsb3dlckNhc2VLZXkgPSBrZXkudG9Mb3dlckNhc2UoKTsKICAgICAgICBpZiAobG93ZXJDYXNlS2V5ID09ICJjaGFyc2V0IikgewogICAgICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9wYXJhbWV0ZXJzW2xvd2VyQ2FzZUtleV0gPSB2YWx1ZTsKICAgICAgfSk7CiAgICB9CiAgICBpZiAoY2hhcnNldCAhPSBudWxsKSB7CiAgICAgIF9lbnN1cmVQYXJhbWV0ZXJzKCk7CiAgICAgIHRoaXMuX3BhcmFtZXRlcnNbImNoYXJzZXQiXSA9IGNoYXJzZXQudG9Mb3dlckNhc2UoKTsKICAgIH0KICB9CgogIF9Db250ZW50VHlwZS5fKCk7CgogIHN0YXRpYyBfQ29udGVudFR5cGUgcGFyc2UoU3RyaW5nIHZhbHVlKSB7CiAgICB2YXIgcmVzdWx0ID0gbmV3IF9Db250ZW50VHlwZS5fKCk7CiAgICByZXN1bHQuX3BhcnNlKHZhbHVlLCAiOyIsIG51bGwsIGZhbHNlKTsKICAgIGludCBpbmRleCA9IHJlc3VsdC5fdmFsdWUuaW5kZXhPZigiLyIpOwogICAgaWYgKGluZGV4ID09IC0xIHx8IGluZGV4ID09IChyZXN1bHQuX3ZhbHVlLmxlbmd0aCAtIDEpKSB7CiAgICAgIHJlc3VsdC5fcHJpbWFyeVR5cGUgPSByZXN1bHQuX3ZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpOwogICAgICByZXN1bHQuX3N1YlR5cGUgPSAiIjsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdC5fcHJpbWFyeVR5cGUgPQogICAgICAgICAgcmVzdWx0Ll92YWx1ZS5zdWJzdHJpbmcoMCwgaW5kZXgpLnRyaW0oKS50b0xvd2VyQ2FzZSgpOwogICAgICByZXN1bHQuX3N1YlR5cGUgPSByZXN1bHQuX3ZhbHVlLnN1YnN0cmluZyhpbmRleCArIDEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9CgogIFN0cmluZyBnZXQgbWltZVR5cGUgPT4gJyRwcmltYXJ5VHlwZS8kc3ViVHlwZSc7CgogIFN0cmluZyBnZXQgcHJpbWFyeVR5cGUgPT4gX3ByaW1hcnlUeXBlOwoKICBTdHJpbmcgZ2V0IHN1YlR5cGUgPT4gX3N1YlR5cGU7CgogIFN0cmluZyBnZXQgY2hhcnNldCA9PiBwYXJhbWV0ZXJzWyJjaGFyc2V0Il07Cn0KCmNsYXNzIF9Db29raWUgaW1wbGVtZW50cyBDb29raWUgewogIFN0cmluZyBfbmFtZTsKICBTdHJpbmcgX3ZhbHVlOwogIERhdGVUaW1lIGV4cGlyZXM7CiAgaW50IG1heEFnZTsKICBTdHJpbmcgZG9tYWluOwogIFN0cmluZyBwYXRoOwogIGJvb2wgaHR0cE9ubHkgPSBmYWxzZTsKICBib29sIHNlY3VyZSA9IGZhbHNlOwoKICBfQ29va2llKFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpCiAgICAgIDogX25hbWUgPSBfdmFsaWRhdGVOYW1lKG5hbWUpLAogICAgICAgIF92YWx1ZSA9IF92YWxpZGF0ZVZhbHVlKHZhbHVlKSwKICAgICAgICBodHRwT25seSA9IHRydWU7CgogIFN0cmluZyBnZXQgbmFtZSA9PiBfbmFtZTsKICBTdHJpbmcgZ2V0IHZhbHVlID0+IF92YWx1ZTsKCiAgc2V0IG5hbWUoU3RyaW5nIG5ld05hbWUpIHsKICAgIF92YWxpZGF0ZU5hbWUobmV3TmFtZSk7CiAgICBfbmFtZSA9IG5ld05hbWU7CiAgfQoKICBzZXQgdmFsdWUoU3RyaW5nIG5ld1ZhbHVlKSB7CiAgICBfdmFsaWRhdGVWYWx1ZShuZXdWYWx1ZSk7CiAgICBfdmFsdWUgPSBuZXdWYWx1ZTsKICB9CgogIF9Db29raWUuZnJvbVNldENvb2tpZVZhbHVlKFN0cmluZyB2YWx1ZSkgewogICAgLy8gUGFyc2UgdGhlICdzZXQtY29va2llJyBoZWFkZXIgdmFsdWUuCiAgICBfcGFyc2VTZXRDb29raWVWYWx1ZSh2YWx1ZSk7CiAgfQoKICAvLyBQYXJzZSBhICdzZXQtY29va2llJyBoZWFkZXIgdmFsdWUgYWNjb3JkaW5nIHRvIHRoZSBydWxlcyBpbiBSRkMgNjI2NS4KICB2b2lkIF9wYXJzZVNldENvb2tpZVZhbHVlKFN0cmluZyBzKSB7CiAgICBpbnQgaW5kZXggPSAwOwoKICAgIGJvb2wgZG9uZSgpID0+IGluZGV4ID09IHMubGVuZ3RoOwoKICAgIFN0cmluZyBwYXJzZU5hbWUoKSB7CiAgICAgIGludCBzdGFydCA9IGluZGV4OwogICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgIGlmIChzW2luZGV4XSA9PSAiPSIpIGJyZWFrOwogICAgICAgIGluZGV4Kys7CiAgICAgIH0KICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkudHJpbSgpOwogICAgfQoKICAgIFN0cmluZyBwYXJzZVZhbHVlKCkgewogICAgICBpbnQgc3RhcnQgPSBpbmRleDsKICAgICAgd2hpbGUgKCFkb25lKCkpIHsKICAgICAgICBpZiAoc1tpbmRleF0gPT0gIjsiKSBicmVhazsKICAgICAgICBpbmRleCsrOwogICAgICB9CiAgICAgIHJldHVybiBzLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpLnRyaW0oKTsKICAgIH0KCiAgICB2b2lkIGV4cGVjdChTdHJpbmcgZXhwZWN0ZWQpIHsKICAgICAgaWYgKGRvbmUoKSkgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkZhaWxlZCB0byBwYXJzZSBoZWFkZXIgdmFsdWUgWyRzXSIpOwogICAgICBpZiAoc1tpbmRleF0gIT0gZXhwZWN0ZWQpIHsKICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiRmFpbGVkIHRvIHBhcnNlIGhlYWRlciB2YWx1ZSBbJHNdIik7CiAgICAgIH0KICAgICAgaW5kZXgrKzsKICAgIH0KCiAgICB2b2lkIHBhcnNlQXR0cmlidXRlcygpIHsKICAgICAgU3RyaW5nIHBhcnNlQXR0cmlidXRlTmFtZSgpIHsKICAgICAgICBpbnQgc3RhcnQgPSBpbmRleDsKICAgICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgICAgaWYgKHNbaW5kZXhdID09ICI9IiB8fCBzW2luZGV4XSA9PSAiOyIpIGJyZWFrOwogICAgICAgICAgaW5kZXgrKzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7CiAgICAgIH0KCiAgICAgIFN0cmluZyBwYXJzZUF0dHJpYnV0ZVZhbHVlKCkgewogICAgICAgIGludCBzdGFydCA9IGluZGV4OwogICAgICAgIHdoaWxlICghZG9uZSgpKSB7CiAgICAgICAgICBpZiAoc1tpbmRleF0gPT0gIjsiKSBicmVhazsKICAgICAgICAgIGluZGV4Kys7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzLnN1YnN0cmluZyhzdGFydCwgaW5kZXgpLnRyaW0oKS50b0xvd2VyQ2FzZSgpOwogICAgICB9CgogICAgICB3aGlsZSAoIWRvbmUoKSkgewogICAgICAgIFN0cmluZyBuYW1lID0gcGFyc2VBdHRyaWJ1dGVOYW1lKCk7CiAgICAgICAgU3RyaW5nIHZhbHVlID0gIiI7CiAgICAgICAgaWYgKCFkb25lKCkgJiYgc1tpbmRleF0gPT0gIj0iKSB7CiAgICAgICAgICBpbmRleCsrOyAvLyBTa2lwIHRoZSA9IGNoYXJhY3Rlci4KICAgICAgICAgIHZhbHVlID0gcGFyc2VBdHRyaWJ1dGVWYWx1ZSgpOwogICAgICAgIH0KICAgICAgICBpZiAobmFtZSA9PSAiZXhwaXJlcyIpIHsKICAgICAgICAgIGV4cGlyZXMgPSBIdHRwRGF0ZS5fcGFyc2VDb29raWVEYXRlKHZhbHVlKTsKICAgICAgICB9IGVsc2UgaWYgKG5hbWUgPT0gIm1heC1hZ2UiKSB7CiAgICAgICAgICBtYXhBZ2UgPSBpbnQucGFyc2UodmFsdWUpOwogICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiZG9tYWluIikgewogICAgICAgICAgZG9tYWluID0gdmFsdWU7CiAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJwYXRoIikgewogICAgICAgICAgcGF0aCA9IHZhbHVlOwogICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PSAiaHR0cG9ubHkiKSB7CiAgICAgICAgICBodHRwT25seSA9IHRydWU7CiAgICAgICAgfSBlbHNlIGlmIChuYW1lID09ICJzZWN1cmUiKSB7CiAgICAgICAgICBzZWN1cmUgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoIWRvbmUoKSkgaW5kZXgrKzsgLy8gU2tpcCB0aGUgOyBjaGFyYWN0ZXIKICAgICAgfQogICAgfQoKICAgIF9uYW1lID0gX3ZhbGlkYXRlTmFtZShwYXJzZU5hbWUoKSk7CiAgICBpZiAoZG9uZSgpIHx8IF9uYW1lLmxlbmd0aCA9PSAwKSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJGYWlsZWQgdG8gcGFyc2UgaGVhZGVyIHZhbHVlIFskc10iKTsKICAgIH0KICAgIGluZGV4Kys7IC8vIFNraXAgdGhlID0gY2hhcmFjdGVyLgogICAgX3ZhbHVlID0gX3ZhbGlkYXRlVmFsdWUocGFyc2VWYWx1ZSgpKTsKICAgIGlmIChkb25lKCkpIHJldHVybjsKICAgIGluZGV4Kys7IC8vIFNraXAgdGhlIDsgY2hhcmFjdGVyLgogICAgcGFyc2VBdHRyaWJ1dGVzKCk7CiAgfQoKICBTdHJpbmcgdG9TdHJpbmcoKSB7CiAgICBTdHJpbmdCdWZmZXIgc2IgPSBuZXcgU3RyaW5nQnVmZmVyKCk7CiAgICBzYi4ud3JpdGUoX25hbWUpLi53cml0ZSgiPSIpLi53cml0ZShfdmFsdWUpOwogICAgaWYgKGV4cGlyZXMgIT0gbnVsbCkgewogICAgICBzYi4ud3JpdGUoIjsgRXhwaXJlcz0iKS4ud3JpdGUoSHR0cERhdGUuZm9ybWF0KGV4cGlyZXMpKTsKICAgIH0KICAgIGlmIChtYXhBZ2UgIT0gbnVsbCkgewogICAgICBzYi4ud3JpdGUoIjsgTWF4LUFnZT0iKS4ud3JpdGUobWF4QWdlKTsKICAgIH0KICAgIGlmIChkb21haW4gIT0gbnVsbCkgewogICAgICBzYi4ud3JpdGUoIjsgRG9tYWluPSIpLi53cml0ZShkb21haW4pOwogICAgfQogICAgaWYgKHBhdGggIT0gbnVsbCkgewogICAgICBzYi4ud3JpdGUoIjsgUGF0aD0iKS4ud3JpdGUocGF0aCk7CiAgICB9CiAgICBpZiAoc2VjdXJlKSBzYi53cml0ZSgiOyBTZWN1cmUiKTsKICAgIGlmIChodHRwT25seSkgc2Iud3JpdGUoIjsgSHR0cE9ubHkiKTsKICAgIHJldHVybiBzYi50b1N0cmluZygpOwogIH0KCiAgc3RhdGljIFN0cmluZyBfdmFsaWRhdGVOYW1lKFN0cmluZyBuZXdOYW1lKSB7CiAgICBjb25zdCBzZXBhcmF0b3JzID0gY29uc3QgWwogICAgICAiKCIsCiAgICAgICIpIiwKICAgICAgIjwiLAogICAgICAiPiIsCiAgICAgICJAIiwKICAgICAgIiwiLAogICAgICAiOyIsCiAgICAgICI6IiwKICAgICAgIlxcIiwKICAgICAgJyInLAogICAgICAiLyIsCiAgICAgICJbIiwKICAgICAgIl0iLAogICAgICAiPyIsCiAgICAgICI9IiwKICAgICAgInsiLAogICAgICAifSIKICAgIF07CiAgICBpZiAobmV3TmFtZSA9PSBudWxsKSB0aHJvdyBuZXcgQXJndW1lbnRFcnJvci5ub3ROdWxsKCJuYW1lIik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IG5ld05hbWUubGVuZ3RoOyBpKyspIHsKICAgICAgaW50IGNvZGVVbml0ID0gbmV3TmFtZS5jb2RlVW5pdHNbaV07CiAgICAgIGlmIChjb2RlVW5pdCA8PSAzMiB8fAogICAgICAgICAgY29kZVVuaXQgPj0gMTI3IHx8CiAgICAgICAgICBzZXBhcmF0b3JzLmluZGV4T2YobmV3TmFtZVtpXSkgPj0gMCkgewogICAgICAgIHRocm93IG5ldyBGb3JtYXRFeGNlcHRpb24oCiAgICAgICAgICAgICJJbnZhbGlkIGNoYXJhY3RlciBpbiBjb29raWUgbmFtZSwgY29kZSB1bml0OiAnJGNvZGVVbml0JyIsCiAgICAgICAgICAgIG5ld05hbWUsCiAgICAgICAgICAgIGkpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV3TmFtZTsKICB9CgogIHN0YXRpYyBTdHJpbmcgX3ZhbGlkYXRlVmFsdWUoU3RyaW5nIG5ld1ZhbHVlKSB7CiAgICBpZiAobmV3VmFsdWUgPT0gbnVsbCkgdGhyb3cgbmV3IEFyZ3VtZW50RXJyb3Iubm90TnVsbCgidmFsdWUiKTsKICAgIC8vIFBlciBSRkMgNjI2NSwgY29uc2lkZXIgc3Vycm91bmRpbmcgIiIgYXMgcGFydCBvZiB0aGUgdmFsdWUsIGJ1dCBvdGhlcndpc2UKICAgIC8vIGRvdWJsZSBxdW90ZXMgYXJlIG5vdCBhbGxvd2VkLgogICAgaW50IHN0YXJ0ID0gMDsKICAgIGludCBlbmQgPSBuZXdWYWx1ZS5sZW5ndGg7CiAgICBpZiAoMiA8PSBuZXdWYWx1ZS5sZW5ndGggJiYKICAgICAgICBuZXdWYWx1ZS5jb2RlVW5pdHNbc3RhcnRdID09IDB4MjIgJiYKICAgICAgICBuZXdWYWx1ZS5jb2RlVW5pdHNbZW5kIC0gMV0gPT0gMHgyMikgewogICAgICBzdGFydCsrOwogICAgICBlbmQtLTsKICAgIH0KCiAgICBmb3IgKGludCBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykgewogICAgICBpbnQgY29kZVVuaXQgPSBuZXdWYWx1ZS5jb2RlVW5pdHNbaV07CiAgICAgIGlmICghKGNvZGVVbml0ID09IDB4MjEgfHwKICAgICAgICAgIChjb2RlVW5pdCA+PSAweDIzICYmIGNvZGVVbml0IDw9IDB4MkIpIHx8CiAgICAgICAgICAoY29kZVVuaXQgPj0gMHgyRCAmJiBjb2RlVW5pdCA8PSAweDNBKSB8fAogICAgICAgICAgKGNvZGVVbml0ID49IDB4M0MgJiYgY29kZVVuaXQgPD0gMHg1QikgfHwKICAgICAgICAgIChjb2RlVW5pdCA+PSAweDVEICYmIGNvZGVVbml0IDw9IDB4N0UpKSkgewog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ODQsIDg0LCA4MCwgNDcsIDQ5LCA0NiwgNDhdOwogIC8vIEJ5dGVzIGZvciAiSFRUUC8xLjEiLgogIHN0YXRpYyBjb25zdCBIVFRQMTEgPSBjb25zdCBbNzIsIDg0LCA4NCwgODAsIDQ3LCA0OSwgNDYsIDQ5XTsKCiAgc3RhdGljIGNvbnN0IGJvb2wgVCA9IHRydWU7CiAgc3RhdGljIGNvbnN0IGJvb2wgRiA9IGZhbHNlOwogIC8vIExvb3B1cC1tYXAgZm9yIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVyczogJygpPD5ALDs6XFwiL1tdPz17fSBcdCcuCiAgc3RhdGljIGNvbnN0IFNFUEFSQVRPUl9NQVAgPSBjb25zdCBbCiAgICBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBULCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCAvLwogICAgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgVCwgRiwgVCwgRiwgRiwgRiwgRiwgRiwgVCwgVCwgRiwgRiwgVCwgRiwgRiwgVCwgLy8KICAgIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIFQsIFQsIFQsIFQsIFQsIFQsIFQsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIC8vCiAgICBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBULCBULCBULCBGLCBGLCAvLwogICAgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgLy8KICAgIEYsIEYsIEYsIFQsIEYsIFQsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIC8vCiAgICBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCAvLwogICAgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgLy8KICAgIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIEYsIC8vCiAgICBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCBGLCAvLwogICAgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRiwgRgogIF07Cn0KCi8vIEZyZXF1ZW50bHkgdXNlZCBjaGFyYWN0ZXIgY29kZXMuCmNsYXNzIF9DaGFyQ29kZSB7CiAgc3RhdGljIGNvbnN0IGludCBIVCA9IDk7CiAgc3RhdGljIGNvbnN0IGludCBMRiA9IDEwOwogIHN0YXRpYyBjb25zdCBpbnQgQ1IgPSAxMzsKICBzdGF0aWMgY29uc3QgaW50IFNQID0gMzI7CiAgc3RhdGljIGNvbnN0IGludCBBTVBFUlNBTkQgPSAzODsKICBzdGF0aWMgY29uc3QgaW50IENPTU1BID0gNDQ7CiAgc3RhdGljIGNvbnN0IGludCBEQVNIID0gNDU7CiAgc3RhdGljIGNvbnN0IGludCBTTEFTSCA9IDQ3OwogIHN0YXRpYyBjb25zdCBpbnQgWkVSTyA9IDQ4OwogIHN0YXRpYyBjb25zdCBpbnQgT05FID0gNDk7CiAgc3RhdGljIGNvbnN0IGludCBDT0xPTiA9IDU4OwogIHN0YXRpYyBjb25zdCBpbnQgU0VNSV9DT0xPTiA9IDU5OwogIHN0YXRpYyBjb25zdCBpbnQgRVFVQUwgPSA2MTsKfQoKLy8gU3RhdGVzIG9mIHRoZSBIVFRQIHBhcnNlciBzdGF0ZSBtYWNoaW5lLgpjbGFzcyBfU3RhdGUgewogIHN0YXRpYyBjb25zdCBpbnQgU1RBUlQgPSAwOwogIHN0YXRpYyBjb25zdCBpbnQgTUVUSE9EX09SX1JFU1BPTlNFX0hUVFBfVkVSU0lPTiA9IDE7CiAgc3RhdGljIGNvbnN0IGludCBSRVNQT05TRV9IVFRQX1ZFUlNJT04gPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgUkVRVUVTVF9MSU5FX01FVEhPRCA9IDM7CiAgc3RhdGljIGNvbnN0IGludCBSRVFVRVNUX0xJTkVfVVJJID0gNDsKICBzdGF0aWMgY29uc3QgaW50IFJFUVVFU1RfTElORV9IVFRQX1ZFUlNJT04gPSA1OwogIHN0YXRpYyBjb25zdCBpbnQgUkVRVUVTVF9MSU5FX0VORElORyA9IDY7CiAgc3RhdGljIGNvbnN0IGludCBSRVNQT05TRV9MSU5FX1NUQVRVU19DT0RFID0gNzsKICBzdGF0aWMgY29uc3QgaW50IFJFU1BPTlNFX0xJTkVfUkVBU09OX1BIUkFTRSA9IDg7CiAgc3RhdGljIGNvbnN0IGludCBSRVNQT05TRV9MSU5FX0VORElORyA9IDk7CiAgc3RhdGljIGNvbnN0IGludCBIRUFERVJfU1RBUlQgPSAxMDsKICBzdGF0aWMgY29uc3QgaW50IEhFQURFUl9GSUVMRCA9IDExOwogIHN0YXRpYyBjb25zdCBpbnQgSEVBREVSX1ZBTFVFX1NUQVJUID0gMTI7CiAgc3RhdGljIGNvbnN0IGludCBIRUFERVJfVkFMVUUgPSAxMzsKICBzdGF0aWMgY29uc3QgaW50IEhFQURFUl9WQUxVRV9GT0xESU5HX09SX0VORElORyA9IDE0OwogIHN0YXRpYyBjb25zdCBpbnQgSEVBREVSX1ZBTFVFX0ZPTERfT1JfRU5EID0gMTU7CiAgc3RhdGljIGNvbnN0IGludCBIRUFERVJfRU5ESU5HID0gMTY7CgogIHN0YXRpYyBjb25zdCBpbnQgQ0hVTktfU0laRV9TVEFSVElOR19DUiA9IDE3OwogIHN0YXRpYyBjb25zdCBpbnQgQ0hVTktfU0laRV9TVEFSVElOR19MRiA9IDE4OwogIHN0YXRpYyBjb25zdCBpbnQgQ0hVTktfU0laRSA9IDE5OwogIHN0YXRpYyBjb25zdCBpbnQgQ0hVTktfU0laRV9FWFRFTlNJT04gPSAyMDsKICBzdGF0aWMgY29uc3QgaW50IENIVU5LX1NJWkVfRU5ESU5HID0gMjE7CiAgc3RhdGljIGNvbnN0IGludCBDSFVOS0VEX0JPRFlfRE9ORV9DUiA9IDIyOwogIHN0YXRpYyBjb25zdCBpbnQgQ0hVTktFRF9CT0RZX0RPTkVfTEYgPSAyMzsKICBzdGF0aWMgY29uc3QgaW50IEJPRFkgPSAyNDsKICBzdGF0aWMgY29uc3QgaW50IENMT1NFRCA9IDI1OwogIHN0YXRpYyBjb25zdCBpbnQgVVBHUkFERUQgPSAyNjsKICBzdGF0aWMgY29uc3QgaW50IEZBSUxVUkUgPSAyNzsKCiAgc3RhdGljIGNvbnN0IGludCBGSVJTVF9CT0RZX1NUQVRFID0gQ0hVTktfU0laRV9TVEFSVElOR19DUjsKfQoKLy8gSFRUUCB2ZXJzaW9uIG9mIHRoZSByZXF1ZXN0IG9yIHJlc3BvbnNlIGJlaW5nIHBhcnNlZC4KY2xhc3MgX0h0dHBWZXJzaW9uIHsKICBzdGF0aWMgY29uc3QgaW50IFVOREVURVJNSU5FRCA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBIVFRQMTAgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgSFRUUDExID0gMjsKfQoKLy8gU3RhdGVzIG9mIHRoZSBIVFRQIHBhcnNlciBzdGF0ZSBtYWNoaW5lLgpjbGFzcyBfTWVzc2FnZVR5cGUgewogIHN0YXRpYyBjb25zdCBpbnQgVU5ERVRFUk1JTkVEID0gMDsKICBzdGF0aWMgY29uc3QgaW50IFJFUVVFU1QgPSAxOwogIHN0YXRpYyBjb25zdCBpbnQgUkVTUE9OU0UgPSAwOwp9CgovKioKICogVGhlIF9IdHRwRGV0YWNoZWRTdHJlYW1TdWJzY3JpcHRpb24gdGFrZXMgYSBzdWJzY3JpcHRpb24gYW5kIHNvbWUgZXh0cmEgZGF0YSwKICogYW5kIG1ha2VzIGl0IHBvc3NpYmxlIHRvICJpbmplY3QiIHRoZSBkYXRhIGluIGZyb20gb2Ygb3RoZXIgZGF0YSBldmVudHMKICogZnJvbSB0aGUgc3Vic2NyaXB0aW9uLgogKgogKiBJdCBkb2VzIHNvIGJ5IG92ZXJyaWRpbmcgcGF1c2UvcmVzdW1lLCBzbyB0aGF0IG9uY2UgdGhlCiAqIF9IdHRwRGV0YWNoZWRTdHJlYW1TdWJzY3JpcHRpb24gaXMgcmVzdW1lZCwgaXQnbGwgZGVsaXZlciB0aGUgZGF0YSBiZWZvcmUKICogcmVzdW1pbmcgdGhlIHVuZGVybGF5aW5nIHN1YnNjcmlwdGlvbi4KICovCmNsYXNzIF9IdHRwRGV0YWNoZWRTdHJlYW1TdWJzY3JpcHRpb24gaW1wbGVtZW50cyBTdHJlYW1TdWJzY3JpcHRpb248VWludDhMaXN0PiB7CiAgU3RyZWFtU3Vic2NyaXB0aW9uPFVpbnQ4TGlzdD4gX3N1YnNjcmlwdGlvbjsKICBVaW50OExpc3QgX2luamVjdERhdGE7CiAgYm9vbCBfaXNDYW5jZWxlZCA9IGZhbHNlOwogIGludCBfcGF1c2VDb3VudCA9IDE7CiAgRnVuY3Rpb24gX3VzZXJPbkRhdGE7CiAgYm9vbCBfc2NoZWR1bGVkID0gZmFsc2U7CgogIF9IdHRwRGV0YWNoZWRTdHJlYW1TdWJzY3JpcHRpb24oCiAgICAgIHRoaXMuX3N1YnNjcmlwdGlvbiwgdGhpcy5faW5qZWN0RGF0YSwgdGhpcy5fdXNlck9uRGF0YSk7CgogIGJvb2wgZ2V0IGlzUGF1c2VkID0+IF9zdWJzY3JpcHRpb24uaXNQYXVzZWQ7CgogIEZ1dHVyZTxUPiBhc0Z1dHVyZTxUPihbVCBmdXR1cmVWYWx1ZV0pID0+CiAgICAgIF9zdWJzY3JpcHRpb24uYXNGdXR1cmU8VD4oZnV0dXJlVmFsdWUpOwoKICBGdXR1cmUgY2FuY2VsKCkgewogICAgX2lzQ2FuY2VsZWQgPSB0cnVlOwogICAgX2luamVjdERhdGEgPSBudWxsOwogICAgcmV0dXJuIF9zdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgfQoKICB2b2lkIG9uRGF0YSh2b2lkIGhhbmRsZURhdGEoVWludDhMaXN0IGRhdGEpKSB7CiAgICBfdXNlck9uRGF0YSA9IGhhbmRsZURhdGE7CiAgICBfc3Vic2NyaXB0aW9uLm9uRGF0YShoYW5kbGVEYXRhKTsKICB9CgogIHZvaWQgb25Eb25lKHZvaWQgaGFuZGxlRG9uZSgpKSB7CiAgICBfc3Vic2NyaXB0aW9uLm9uRG9uZShoYW5kbGVEb25lKTsKICB9CgogIHZvaWQgb25FcnJvcihGdW5jdGlvbiBoYW5kbGVFcnJvcikgewogICAgX3N1YnNjcmlwdGlvbi5vbkVycm9yKGhhbmRsZUVycm9yKTsKICB9CgogIHZvaWQgcGF1c2UoW0Z1dHVyZSByZXN1bWVTaWduYWxdKSB7CiAgICBpZiAoX2luamVjdERhdGEgPT0gbnVsbCkgewogICAgICBfc3Vic2NyaXB0aW9uLnBhdXNlKHJlc3VtZVNpZ25hbCk7CiAgICB9IGVsc2UgewogICAgICBfcGF1c2VDb3VudCsrOwogICAgICBpZiAocmVzdW1lU2lnbmFsICE9IG51bGwpIHsKICAgICAgICByZXN1bWVTaWduYWwud2hlbkNvbXBsZXRlKHJlc3VtZSk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgcmVzdW1lKCkgewogICAgaWYgKF9pbmplY3REYXRhID09IG51bGwpIHsKICAgICAgX3N1YnNjcmlwdGlvbi5yZXN1bWUoKTsKICAgIH0gZWxzZSB7CiAgICAgIF9wYXVzZUNvdW50LS07CiAgICAgIF9tYXliZVNjaGVkdWxlRGF0YSgpOwogICAgfQogIH0KCiAgdm9pZCBfbWF5YmVTY2hlZHVsZURhdGEoKSB7CiAgICBpZiAoX3NjaGVkdWxlZCkgcmV0dXJuOwogICAgaWYgKF9wYXVzZUNvdW50ICE9IDApIHJldHVybjsKICAgIF9zY2hlZHVsZWQgPSB0cnVlOwogICAgc2NoZWR1bGVNaWNyb3Rhc2soKCkgewogICAgICBfc2NoZWR1bGVkID0gZmFsc2U7CiAgICAgIGlmIChfcGF1c2VDb3VudCA+IDAgfHwgX2lzQ2FuY2VsZWQpIHJldHVybjsKICAgICAgdmFyIGRhdGEgPSBfaW5qZWN0RGF0YTsKICAgICAgX2luamVjdERhdGEgPSBudWxsOwogICAgICAvLyBUbyBlbnN1cmUgdGhhdCAnc3Vic2NyaXB0aW9uLmlzUGF1c2VkJyBpcyBmYWxzZSwgd2UgcmVzdW1lIHRoZQogICAgICAvLyBzdWJzY3JpcHRpb24gaGVyZS4gVGhpcyBpcyBmaW5lIGFzIHBvdGVudGlhbCBldmVudHMgYXJlIGRlbGF5ZWQuCiAgICAgIF9zdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgIGlmIChfdXNlck9uRGF0YSAhPSBudWxsKSB7CiAgICAgICAgX3VzZXJPbkRhdGEoZGF0YSk7CiAgICAgIH0KICAgIH0pOwogIH0KfQoKY2xhc3MgX0h0dHBEZXRhY2hlZEluY29taW5nIGV4dGVuZHMgU3RyZWFtPFVpbnQ4TGlzdD4gewogIGZpbmFsIFN0cmVhbVN1YnNjcmlwdGlvbjxVaW50OExpc3Q+IHN1YnNjcmlwdGlvbjsKICBmaW5hbCBVaW50OExpc3QgYnVmZmVyZWREYXRhOwoKICBfSHR0cERldGFjaGVkSW5jb21pbmcodGhpcy5zdWJzY3JpcHRpb24sIHRoaXMuYnVmZmVyZWREYXRhKTsKCiAgU3RyZWFtU3Vic2NyaXB0aW9uPFVpbnQ4TGlzdD4gbGlzdGVuKHZvaWQgb25EYXRhKFVpbnQ4TGlzdCBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICBpZiAoc3Vic2NyaXB0aW9uICE9IG51bGwpIHsKICAgICAgc3Vic2NyaXB0aW9uCiAgICAgICAgLi5vbkRhdGEob25EYXRhKQogICAgICAgIC4ub25FcnJvcihvbkVycm9yKQogICAgICAgIC4ub25Eb25lKG9uRG9uZSk7CiAgICAgIGlmIChidWZmZXJlZERhdGEgPT0gbnVsbCkgewogICAgICAgIHJldHVybiBzdWJzY3JpcHRpb24uLnJlc3VtZSgpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgX0h0dHBEZXRhY2hlZFN0cmVhbVN1YnNjcmlwdGlvbigKICAgICAgICAgIHN1YnNjcmlwdGlvbiwgYnVmZmVyZWREYXRhLCBvbkRhdGEpCiAgICAgICAgLi5yZXN1bWUoKTsKICAgIH0gZWxzZSB7CiAgICAgIC8vIFRPRE8oMjYzNzkpOiBhZGQgdGVzdCBmb3IgdGhpcyBicmFuY2guCiAgICAgIHJldHVybiBuZXcgU3RyZWFtPFVpbnQ4TGlzdD4uZnJvbUl0ZXJhYmxlKFtidWZmZXJlZERhdGFdKS5saXN0ZW4ob25EYXRhLAogICAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogICAgfQogIH0KfQoKLyoqCiAqIEhUVFAgcGFyc2VyIHdoaWNoIHBhcnNlcyB0aGUgZGF0YSBzdHJlYW0gZ2l2ZW4gdG8gW2NvbnN1bWVdLgogKgogKiBJZiBhbiBIVFRQIHBhcnNlciBlcnJvciBvY2N1cnMsIHRoZSBwYXJzZXIgd2lsbCBzaWduYWwgYW4gZXJyb3IgdG8gZWl0aGVyCiAqIHRoZSBjdXJyZW50IF9IdHRwSW5jb21pbmcgb3IgdGhlIF9wYXJzZXIgaXRzZWxmLgogKgogKiBUaGUgY29ubmVjdGlvbiB1cGdyYWRlcyAoZS5nLiBzd2l0Y2hpbmcgZnJvbSBIVFRQLzEuMSB0byB0aGUKICogV2ViU29ja2V0IHByb3RvY29sKSBpcyBoYW5kbGVkIGluIGEgc3BlY2lhbCB3YXkuIElmIGNvbm5lY3Rpb24KICogdXBncmFkZSBpcyBzcGVjaWZpZWQgaW4gdGhlIGhlYWRlcnMsIHRoZW4gb24gdGhlIGNhbGxiYWNrIHRvCiAqIFs6cmVzcG9uc2VTdGFydDpdIHRoZSBbOnVwZ3JhZGU6XSBwcm9wZXJ0eSBvbiB0aGUgWzpIdHRwUGFyc2VyOl0KICogb2JqZWN0IHdpbGwgYmUgWzp0cnVlOl0gaW5kaWNhdGluZyB0aGF0IGZyb20gbm93IG9uIHRoZSBwcm90b2NvbCBpcwogKiBub3QgSFRUUCBhbnltb3JlIGFuZCBubyBtb3JlIGNhbGxiYWNrcyB3aWxsIGhhcHBlbiwgdGhhdCBpcwogKiBbOmRhdGFSZWNlaXZlZDpdIGFuZCBbOmRhdGFFbmQ6XSBhcmUgbm90IGNhbGxlZCBpbiB0aGlzIGNhc2UgYXMKICogdGhlcmUgaXMgbm8gbW9yZSBIVFRQIGRhdGEuIEFmdGVyIHRoZSB1cGdyYWRlIHRoZSBtZXRob2QKICogWzpyZWFkVW5wYXJzZWREYXRhOl0gY2FuIGJlIHVzZWQgdG8gcmVhZCBhbnkgcmVtYWluaW5nIGJ5dGVzIGluIHRoZQogKiBIVFRQIHBhcnNlciB3aGljaCBhcmUgcGFydCBvZiB0aGUgcHJvdG9jb2wgdGhlIGNvbm5lY3Rpb24gaXMKICogdXBncmFkaW5nIHRvLiBUaGVzZSBieXRlcyBjYW5ub3QgYmUgcHJvY2Vzc2VkIGJ5IHRoZSBIVFRQIHBhcnNlcgogKiBhbmQgc2hvdWxkIGJlIGhhbmRsZWQgYWNjb3JkaW5nIHRvIHdoYXRldmVyIHByb3RvY29sIGlzIGJlaW5nCiAqIHVwZ3JhZGVkIHRvLgogKi8KY2xhc3MgX0h0dHBQYXJzZXIgZXh0ZW5kcyBTdHJlYW08X0h0dHBJbmNvbWluZz4gewogIC8vIFN0YXRlLgogIGJvb2wgX3BhcnNlckNhbGxlZCA9IGZhbHNlOwoKICAvLyBUaGUgZGF0YSB0aGF0IGlzIGN1cnJlbnRseSBiZWluZyBwYXJzZWQuCiAgVWludDhMaXN0IF9idWZmZXI7CiAgaW50IF9pbmRleDsKCiAgZmluYWwgYm9vbCBfcmVxdWVzdFBhcnNlcjsKICBpbnQgX3N0YXRlOwogIGludCBfaHR0cFZlcnNpb25JbmRleDsKICBpbnQgX21lc3NhZ2VUeXBlOwogIGludCBfc3RhdHVzQ29kZSA9IDA7CiAgaW50IF9zdGF0dXNDb2RlTGVuZ3RoID0gMDsKICBmaW5hbCBMaXN0PGludD4gX21ldGhvZCA9IFtdOwogIGZpbmFsIExpc3Q8aW50PiBfdXJpX29yX3JlYXNvbl9waHJhc2UgPSBbXTsKICBmaW5hbCBMaXN0PGludD4gX2hlYWRlckZpZWxkID0gW107CiAgZmluYWwgTGlzdDxpbnQ+IF9oZWFkZXJWYWx1ZSA9IFtdOwoKICBpbnQgX2h0dHBWZXJzaW9uOwogIGludCBfdHJhbnNmZXJMZW5ndGggPSAtMTsKICBib29sIF9wZXJzaXN0ZW50Q29ubmVjdGlvbjsKICBib29sIF9jb25uZWN0aW9uVXBncmFkZTsKICBib29sIF9jaHVua2VkOwoKICBib29sIF9ub01lc3NhZ2VCb2R5ID0gZmFsc2U7CiAgaW50IF9yZW1haW5pbmdDb250ZW50ID0gLTE7CgogIF9IdHRwSGVhZGVycyBfaGVhZGVyczsKCiAgLy8gVGhlIGN1cnJlbnQgaW5jb21pbmcgY29ubmVjdGlvbi4KICBfSHR0cEluY29taW5nIF9pbmNvbWluZzsKICBTdHJlYW1TdWJzY3JpcHRpb248VWludDhMaXN0PiBfc29ja2V0U3Vic2NyaXB0aW9uOwogIGJvb2wgX3BhdXNlZCA9IHRydWU7CiAgYm9vbCBfYm9keVBhdXNlZCA9IGZhbHNlOwogIFN0cmVhbUNvbnRyb2xsZXI8X0h0dHBJbmNvbWluZz4gX2NvbnRyb2xsZXI7CiAgU3RyZWFtQ29udHJvbGxlcjxVaW50OExpc3Q+IF9ib2R5Q29udHJvbGxlcjsKCiAgZmFjdG9yeSBfSHR0cFBhcnNlci5yZXF1ZXN0UGFyc2VyKCkgewogICAgcmV0dXJuIG5ldyBfSHR0cFBhcnNlci5fKHRydWUpOwogIH0KCiAgZmFjdG9yeSBfSHR0cFBhcnNlci5yZXNwb25zZVBhcnNlcigpIHsKICAgIHJldHVybiBuZXcgX0h0dHBQYXJzZXIuXyhmYWxzZSk7CiAgfQoKICBfSHR0cFBhcnNlci5fKHRoaXMuX3JlcXVlc3RQYXJzZXIpIHsKICAgIF9jb250cm9sbGVyID0gbmV3IFN0cmVhbUNvbnRyb2xsZXI8X0h0dHBJbmNvbWluZz4oCiAgICAgICAgc3luYzogdHJ1ZSwKICAgICAgICBvbkxpc3RlbjogKCkgewogICAgICAgICAgX3BhdXNlZCA9IGZhbHNlOwogICAgICAgIH0sCiAgICAgICAgb25QYXVzZTogKCkgewogICAgICAgICAgX3BhdXNlZCA9IHRydWU7CiAgICAgICAgICBfcGF1c2VTdGF0ZUNoYW5nZWQoKTsKICAgICAgICB9LAogICAgICAgIG9uUmVzdW1lOiAoKSB7CiAgICAgICAgICBfcGF1c2VkID0gZmFsc2U7CiAgICAgICAgICBfcGF1c2VTdGF0ZUNoYW5nZWQoKTsKICAgICAgICB9LAogICAgICAgIG9uQ2FuY2VsOiAoKSB7CiAgICAgICAgICBpZiAoX3NvY2tldFN1YnNjcmlwdGlvbiAhPSBudWxsKSB7CiAgICAgICAgICAgIF9zb2NrZXRTdWJzY3JpcHRpb24uY2FuY2VsKCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICBfcmVzZXQoKTsKICB9CgogIFN0cmVhbVN1YnNjcmlwdGlvbjxfSHR0cEluY29taW5nPiBsaXN0ZW4odm9pZCBvbkRhdGEoX0h0dHBJbmNvbWluZyBldmVudCksCiAgICAgIHtGdW5jdGlvbiBvbkVycm9yLCB2b2lkIG9uRG9uZSgpLCBib29sIGNhbmNlbE9uRXJyb3J9KSB7CiAgICByZXR1cm4gX2NvbnRyb2xsZXIuc3RyZWFtLmxpc3RlbihvbkRhdGEsCiAgICAgICAgb25FcnJvcjogb25FcnJvciwgb25Eb25lOiBvbkRvbmUsIGNhbmNlbE9uRXJyb3I6IGNhbmNlbE9uRXJyb3IpOwogIH0KCiAgdm9pZCBsaXN0ZW5Ub1N0cmVhbShTdHJlYW08VWludDhMaXN0PiBzdHJlYW0pIHsKICAgIC8vIExpc3RlbiB0byB0aGUgc3RyZWFtIGFuZCBoYW5kbGUgZGF0YSBhY2NvcmRpbmdseS4gV2hlbiBhCiAgICAvLyBfSHR0cEluY29taW5nIGlzIGNyZWF0ZWQsIF9kYXRhUGF1c2UsIF9kYXRhUmVzdW1lLCBfZGF0YURvbmUgaXMKICAgIC8vIGdpdmVuIHRvIHByb3ZpZGUgYSB3YXkgb2YgY29udHJvbGxpbmcgdGhlIHBhcnNlci4KICAgIC8vIFRPRE8oYWpvaG5zZW4pOiBSZW1vdmUgX2RhdGFQYXVzZSwgX2RhdGFSZXN1bWUgYW5kIF9kYXRhRG9uZSBhbmQgY2xlYW4gdXAKICAgIC8vIGhvdyB0aGUgX0h0dHBJbmNvbWluZyBzaWduYWxzIHRoZSBwYXJzZXIuCiAgICBfc29ja2V0U3Vic2NyaXB0aW9uID0KICAgICAgICBzdHJlYW0ubGlzdGVuKF9vbkRhdGEsIG9uRXJyb3I6IF9jb250cm9sbGVyLmFkZEVycm9yLCBvbkRvbmU6IF9vbkRvbmUpOwogIH0KCiAgdm9pZCBfcGFyc2UoKSB7CiAgICB0cnkgewogICAgICBfZG9QYXJzZSgpOwogICAgfSBjYXRjaCAoZSwgcykgewogICAgICBfc3RhdGUgPSBfU3RhdGUuRkFJTFVSRTsKICAgICAgX3JlcG9ydEVycm9yKGUsIHMpOwogICAgfQogIH0KCiAgLy8gUHJvY2VzcyBlbmQgb2YgaGVhZGVycy4gUmV0dXJucyB0cnVlIGlmIHRoZSBwYXJzZXIgc2hvdWxkIHN0b3AKICAvLyBwYXJzaW5nIGFuZCByZXR1cm4uIFRoaXMgd2lsbCBiZSBpbiBjYXNlIG9mIGVpdGhlciBhbiB1cGdyYWRlCiAgLy8gcmVxdWVzdCBvciBhIHJlcXVlc3Qgb3IgcmVzcG9uc2Ugd2l0aCBhbiBlbXB0eSBib2R5LgogIGJvb2wgX2hlYWRlcnNFbmQoKSB7CiAgICBfaGVhZGVycy5fbXV0YWJsZSA9IGZhbHNlOwoKICAgIF90cmFuc2Zlckxlbmd0aCA9IF9oZWFkZXJzLmNvbnRlbnRMZW5ndGg7CiAgICAvLyBJZ25vcmUgdGhlIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBpZiBUcmFuc2Zlci1FbmNvZGluZwogICAgLy8gaXMgY2h1bmtlZCAoUkZDIDI2MTYgc2VjdGlvbiA0LjQpCiAgICBpZiAoX2NodW5rZWQpIF90cmFuc2Zlckxlbmd0aCA9IC0xOwoKICAgIC8vIElmIGEgcmVxdWVzdCBtZXNzYWdlIGhhcyBuZWl0aGVyIENvbnRlbnQtTGVuZ3RoIG5vcgogICAgLy8gVHJhbnNmZXItRW5jb2RpbmcgdGhlIG1lc3NhZ2UgbXVzdCBub3QgaGF2ZSBhIGJvZHkgKFJGQwogICAgLy8gMjYxNiBzZWN0aW9uIDQuMykuCiAgICBpZiAoX21lc3NhZ2VUeXBlID09IF9NZXNzYWdlVHlwZS5SRVFVRVNUICYmCiAgICAgICAgX3RyYW5zZmVyTGVuZ3RoIDwgMCAmJgogICAgICAgIF9jaHVua2VkID09IGZhbHNlKSB7CiAgICAgIF90cmFuc2Zlckxlbmd0aCA9IDA7CiAgICB9CiAgICBpZiAoX2Nvbm5lY3Rpb25VcGdyYWRlKSB7CiAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5VUEdSQURFRDsKICAgICAgX3RyYW5zZmVyTGVuZ3RoID0gMDsKICAgIH0KICAgIF9jcmVhdGVJbmNvbWluZyhfdHJhbnNmZXJMZW5ndGgpOwogICAgaWYgKF9yZXF1ZXN0UGFyc2VyKSB7CiAgICAgIF9pbmNvbWluZy5tZXRob2QgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoX21ldGhvZCk7CiAgICAgIF9pbmNvbWluZy51cmkgPQogICAgICAgICAgVXJpLnBhcnNlKG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhfdXJpX29yX3JlYXNvbl9waHJhc2UpKTsKICAgIH0gZWxzZSB7CiAgICAgIF9pbmNvbWluZy5zdGF0dXNDb2RlID0gX3N0YXR1c0NvZGU7CiAgICAgIF9pbmNvbWluZy5yZWFzb25QaHJhc2UgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoX3VyaV9vcl9yZWFzb25fcGhyYXNlKTsKICAgIH0KICAgIF9tZXRob2QuY2xlYXIoKTsKICAgIF91cmlfb3JfcmVhc29uX3BocmFzZS5jbGVhcigpOwogICAgaWYgKF9jb25uZWN0aW9uVXBncmFkZSkgewogICAgICBfaW5jb21pbmcudXBncmFkZWQgPSB0cnVlOwogICAgICBfcGFyc2VyQ2FsbGVkID0gZmFsc2U7CiAgICAgIHZhciB0bXAgPSBfaW5jb21pbmc7CiAgICAgIF9jbG9zZUluY29taW5nKCk7CiAgICAgIF9jb250cm9sbGVyLmFkZCh0bXApOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfdHJhbnNmZXJMZW5ndGggPT0gMCB8fAogICAgICAgIChfbWVzc2FnZVR5cGUgPT0gX01lc3NhZ2VUeXBlLlJFU1BPTlNFICYmIF9ub01lc3NhZ2VCb2R5KSkgewogICAgICBfcmVzZXQoKTsKICAgICAgdmFyIHRtcCA9IF9pbmNvbWluZzsKICAgICAgX2Nsb3NlSW5jb21pbmcoKTsKICAgICAgX2NvbnRyb2xsZXIuYWRkKHRtcCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gZWxzZSBpZiAoX2NodW5rZWQpIHsKICAgICAgX3N0YXRlID0gX1N0YXRlLkNIVU5LX1NJWkU7CiAgICAgIF9yZW1haW5pbmdDb250ZW50ID0gMDsKICAgIH0gZWxzZSBpZiAoX3RyYW5zZmVyTGVuZ3RoID4gMCkgewogICAgICBfcmVtYWluaW5nQ29udGVudCA9IF90cmFuc2Zlckxlbmd0aDsKICAgICAgX3N0YXRlID0gX1N0YXRlLkJPRFk7CiAgICB9IGVsc2UgewogICAgICAvLyBOZWl0aGVyIGNodW5rZWQgbm9yIGNvbnRlbnQgbGVuZ3RoLiBFbmQgb2YgYm9keQogICAgICAvLyBpbmRpY2F0ZWQgYnkgY2xvc2UuCiAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5CT0RZOwogICAgfQogICAgX3BhcnNlckNhbGxlZCA9IGZhbHNlOwogICAgX2NvbnRyb2xsZXIuYWRkKF9pbmNvbWluZyk7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIC8vIEZyb20gUkZDIDI2MTYuCiAgLy8gZ2VuZXJpYy1tZXNzYWdlID0gc3RhcnQtbGluZQogIC8vICAgICAgICAgICAgICAgICAgICoobWVzc2FnZS1oZWFkZXIgQ1JMRikKICAvLyAgICAgICAgICAgICAgICAgICBDUkxGCiAgLy8gICAgICAgICAgICAgICAgICAgWyBtZXNzYWdlLWJvZHkgXQogIC8vIHN0YXJ0LWxpbmUgICAgICA9IFJlcXVlc3QtTGluZSB8IFN0YXR1cy1MaW5lCiAgLy8gUmVxdWVzdC1MaW5lICAgID0gTWV0aG9kIFNQIFJlcXVlc3QtVVJJIFNQIEhUVFAtVmVyc2lvbiBDUkxGCiAgLy8gU3RhdHVzLUxpbmUgICAgID0gSFRUUC1WZXJzaW9uIFNQIFN0YXR1cy1Db2RlIFNQIFJlYXNvbi1QaHJhc2UgQ1JMRgogIC8vIG1lc3NhZ2UtaGVhZGVyICA9IGZpZWxkLW5hbWUgIjoiIFsgZmllbGQtdmFsdWUgXQogIHZvaWQgX2RvUGFyc2UoKSB7CiAgICBhc3NlcnQoIV9wYXJzZXJDYWxsZWQpOwogICAgX3BhcnNlckNhbGxlZCA9IHRydWU7CiAgICBpZiAoX3N0YXRlID09IF9TdGF0ZS5DTE9TRUQpIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkRhdGEgb24gY2xvc2VkIGNvbm5lY3Rpb24iKTsKICAgIH0KICAgIGlmIChfc3RhdGUgPT0gX1N0YXRlLkZBSUxVUkUpIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkRhdGEgb24gZmFpbGVkIGNvbm5lY3Rpb24iKTsKICAgIH0KICAgIHdoaWxlIChfYnVmZmVyICE9IG51bGwgJiYKICAgICAgICBfaW5kZXggPCBfYnVmZmVyLmxlbmd0aCAmJgogICAgICAgIF9zdGF0ZSAhPSBfU3RhdGUuRkFJTFVSRSAmJgogICAgICAgIF9zdGF0ZSAhPSBfU3RhdGUuVVBHUkFERUQpIHsKICAgICAgLy8gRGVwZW5kaW5nIG9uIF9pbmNvbWluZywgd2UgZWl0aGVyIGJyZWFrIG9uIF9ib2R5UGF1c2VkIG9yIF9wYXVzZWQuCiAgICAgIGlmICgoX2luY29taW5nICE9IG51bGwgJiYgX2JvZHlQYXVzZWQpIHx8CiAgICAgICAgICAoX2luY29taW5nID09IG51bGwgJiYgX3BhdXNlZCkpIHsKICAgICAgICBfcGFyc2VyQ2FsbGVkID0gZmFsc2U7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGludCBieXRlID0gX2J1ZmZlcltfaW5kZXgrK107CiAgICAgIHN3aXRjaCAoX3N0YXRlKSB7CiAgICAgICAgY2FzZSBfU3RhdGUuU1RBUlQ6CiAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ29uc3QuSFRUUFswXSkgewogICAgICAgICAgICAvLyBTdGFydCBwYXJzaW5nIG1ldGhvZCBvciBIVFRQIHZlcnNpb24uCiAgICAgICAgICAgIF9odHRwVmVyc2lvbkluZGV4ID0gMTsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLk1FVEhPRF9PUl9SRVNQT05TRV9IVFRQX1ZFUlNJT047CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBTdGFydCBwYXJzaW5nIG1ldGhvZC4KICAgICAgICAgICAgaWYgKCFfaXNUb2tlbkNoYXIoYnl0ZSkpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXF1ZXN0IG1ldGhvZCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9tZXRob2QuYWRkKGJ5dGUpOwogICAgICAgICAgICBpZiAoIV9yZXF1ZXN0UGFyc2VyKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgcmVzcG9uc2UgbGluZSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVFVRVNUX0xJTkVfTUVUSE9EOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLk1FVEhPRF9PUl9SRVNQT05TRV9IVFRQX1ZFUlNJT046CiAgICAgICAgICBpZiAoX2h0dHBWZXJzaW9uSW5kZXggPCBfQ29uc3QuSFRUUC5sZW5ndGggJiYKICAgICAgICAgICAgICBieXRlID09IF9Db25zdC5IVFRQW19odHRwVmVyc2lvbkluZGV4XSkgewogICAgICAgICAgICAvLyBDb250aW51ZSBwYXJzaW5nIEhUVFAgdmVyc2lvbi4KICAgICAgICAgICAgX2h0dHBWZXJzaW9uSW5kZXgrKzsKICAgICAgICAgIH0gZWxzZSBpZiAoX2h0dHBWZXJzaW9uSW5kZXggPT0gX0NvbnN0LkhUVFAubGVuZ3RoICYmCiAgICAgICAgICAgICAgYnl0ZSA9PSBfQ2hhckNvZGUuU0xBU0gpIHsKICAgICAgICAgICAgLy8gSFRUUC8gcGFyc2VkLiBBcyBtZXRob2QgaXMgYSB0b2tlbiB0aGlzIGNhbm5vdCBiZSBhCiAgICAgICAgICAgIC8vIG1ldGhvZCBhbnltb3JlLgogICAgICAgICAgICBfaHR0cFZlcnNpb25JbmRleCsrOwogICAgICAgICAgICBpZiAoX3JlcXVlc3RQYXJzZXIpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXF1ZXN0IGxpbmUiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuUkVTUE9OU0VfSFRUUF9WRVJTSU9OOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gRGlkIG5vdCBwYXJzZSBIVFRQIHZlcnNpb24uIEV4cGVjdCBtZXRob2QgaW5zdGVhZC4KICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBfaHR0cFZlcnNpb25JbmRleDsgaSsrKSB7CiAgICAgICAgICAgICAgX21ldGhvZC5hZGQoX0NvbnN0LkhUVFBbaV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5TUCkgewogICAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVFVRVNUX0xJTkVfVVJJOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9tZXRob2QuYWRkKGJ5dGUpOwogICAgICAgICAgICAgIF9odHRwVmVyc2lvbiA9IF9IdHRwVmVyc2lvbi5VTkRFVEVSTUlORUQ7CiAgICAgICAgICAgICAgaWYgKCFfcmVxdWVzdFBhcnNlcikgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgcmVzcG9uc2UgbGluZSIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuUkVRVUVTVF9MSU5FX01FVEhPRDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLlJFU1BPTlNFX0hUVFBfVkVSU0lPTjoKICAgICAgICAgIGlmIChfaHR0cFZlcnNpb25JbmRleCA8IF9Db25zdC5IVFRQMURPVC5sZW5ndGgpIHsKICAgICAgICAgICAgLy8gQ29udGludWUgcGFyc2luZyBIVFRQIHZlcnNpb24uCiAgICAgICAgICAgIF9leHBlY3QoYnl0ZSwgX0NvbnN0LkhUVFAxRE9UW19odHRwVmVyc2lvbkluZGV4XSk7CiAgICAgICAgICAgIF9odHRwVmVyc2lvbkluZGV4Kys7CiAgICAgICAgICB9IGVsc2UgaWYgKF9odHRwVmVyc2lvbkluZGV4ID09IF9Db25zdC5IVFRQMURPVC5sZW5ndGggJiYKICAgICAgICAgICAgICBieXRlID09IF9DaGFyQ29kZS5PTkUpIHsKICAgICAgICAgICAgLy8gSFRUUC8xLjEgcGFyc2VkLgogICAgICAgICAgICBfaHR0cFZlcnNpb24gPSBfSHR0cFZlcnNpb24uSFRUUDExOwogICAgICAgICAgICBfcGVyc2lzdGVudENvbm5lY3Rpb24gPSB0cnVlOwogICAgICAgICAgICBfaHR0cFZlcnNpb25JbmRleCsrOwogICAgICAgICAgfSBlbHNlIGlmIChfaHR0cFZlcnNpb25JbmRleCA9PSBfQ29uc3QuSFRUUDFET1QubGVuZ3RoICYmCiAgICAgICAgICAgICAgYnl0ZSA9PSBfQ2hhckNvZGUuWkVSTykgewogICAgICAgICAgICAvLyBIVFRQLzEuMCBwYXJzZWQuCiAgICAgICAgICAgIF9odHRwVmVyc2lvbiA9IF9IdHRwVmVyc2lvbi5IVFRQMTA7CiAgICAgICAgICAgIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IGZhbHNlOwogICAgICAgICAgICBfaHR0cFZlcnNpb25JbmRleCsrOwogICAgICAgICAgfSBlbHNlIGlmIChfaHR0cFZlcnNpb25JbmRleCA9PSBfQ29uc3QuSFRUUDFET1QubGVuZ3RoICsgMSkgewogICAgICAgICAgICBfZXhwZWN0KGJ5dGUsIF9DaGFyQ29kZS5TUCk7CiAgICAgICAgICAgIC8vIEhUVFAgdmVyc2lvbiBwYXJzZWQuCiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVNQT05TRV9MSU5FX1NUQVRVU19DT0RFOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgcmVzcG9uc2UgbGluZSIpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLlJFUVVFU1RfTElORV9NRVRIT0Q6CiAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuU1ApIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLlJFUVVFU1RfTElORV9VUkk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoX0NvbnN0LlNFUEFSQVRPUl9NQVBbYnl0ZV0gfHwKICAgICAgICAgICAgICAgIGJ5dGUgPT0gX0NoYXJDb2RlLkNSIHx8CiAgICAgICAgICAgICAgICBieXRlID09IF9DaGFyQ29kZS5MRikgewogICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHJlcXVlc3QgbWV0aG9kIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX21ldGhvZC5hZGQoYnl0ZSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuUkVRVUVTVF9MSU5FX1VSSToKICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5TUCkgewogICAgICAgICAgICBpZiAoX3VyaV9vcl9yZWFzb25fcGhyYXNlLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgcmVxdWVzdCBVUkkiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuUkVRVUVTVF9MSU5FX0hUVFBfVkVSU0lPTjsKICAgICAgICAgICAgX2h0dHBWZXJzaW9uSW5kZXggPSAwOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkNSIHx8IGJ5dGUgPT0gX0NoYXJDb2RlLkxGKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgcmVxdWVzdCBVUkkiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfdXJpX29yX3JlYXNvbl9waHJhc2UuYWRkKGJ5dGUpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLlJFUVVFU1RfTElORV9IVFRQX1ZFUlNJT046CiAgICAgICAgICBpZiAoX2h0dHBWZXJzaW9uSW5kZXggPCBfQ29uc3QuSFRUUDFET1QubGVuZ3RoKSB7CiAgICAgICAgICAgIF9leHBlY3QoYnl0ZSwgX0NvbnN0LkhUVFAxMVtfaHR0cFZlcnNpb25JbmRleF0pOwogICAgICAgICAgICBfaHR0cFZlcnNpb25JbmRleCsrOwogICAgICAgICAgfSBlbHNlIGlmIChfaHR0cFZlcnNpb25JbmRleCA9PSBfQ29uc3QuSFRUUDFET1QubGVuZ3RoKSB7CiAgICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5PTkUpIHsKICAgICAgICAgICAgICAvLyBIVFRQLzEuMSBwYXJzZWQuCiAgICAgICAgICAgICAgX2h0dHBWZXJzaW9uID0gX0h0dHBWZXJzaW9uLkhUVFAxMTsKICAgICAgICAgICAgICBfcGVyc2lzdGVudENvbm5lY3Rpb24gPSB0cnVlOwogICAgICAgICAgICAgIF9odHRwVmVyc2lvbkluZGV4Kys7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuWkVSTykgewogICAgICAgICAgICAgIC8vIEhUVFAvMS4wIHBhcnNlZC4KICAgICAgICAgICAgICBfaHR0cFZlcnNpb24gPSBfSHR0cFZlcnNpb24uSFRUUDEwOwogICAgICAgICAgICAgIF9wZXJzaXN0ZW50Q29ubmVjdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgIF9odHRwVmVyc2lvbkluZGV4Kys7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkludmFsaWQgcmVzcG9uc2UgbGluZSIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuQ1IpIHsKICAgICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuUkVRVUVTVF9MSU5FX0VORElORzsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfZXhwZWN0KGJ5dGUsIF9DaGFyQ29kZS5MRik7CiAgICAgICAgICAgICAgX21lc3NhZ2VUeXBlID0gX01lc3NhZ2VUeXBlLlJFUVVFU1Q7CiAgICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9TVEFSVDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLlJFUVVFU1RfTElORV9FTkRJTkc6CiAgICAgICAgICBfZXhwZWN0KGJ5dGUsIF9DaGFyQ29kZS5MRik7CiAgICAgICAgICBfbWVzc2FnZVR5cGUgPSBfTWVzc2FnZVR5cGUuUkVRVUVTVDsKICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfU1RBUlQ7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuUkVTUE9OU0VfTElORV9TVEFUVVNfQ09ERToKICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5TUCkgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuUkVTUE9OU0VfTElORV9SRUFTT05fUEhSQVNFOwogICAgICAgICAgfSBlbHNlIGlmIChieXRlID09IF9DaGFyQ29kZS5DUikgewogICAgICAgICAgICAvLyBTb21lIEhUVFAgc2VydmVycyBkb2VzIG5vdCBmb2xsb3cgdGhlIHNwZWMuIGFuZCBzZW5kCiAgICAgICAgICAgIC8vIFxyXG4gcmlnaHQgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLgogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuUkVTUE9OU0VfTElORV9FTkRJTkc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfc3RhdHVzQ29kZUxlbmd0aCsrOwogICAgICAgICAgICBpZiAoKGJ5dGUgPCAweDMwICYmIDB4MzkgPCBieXRlKSB8fCBfc3RhdHVzQ29kZUxlbmd0aCA+IDMpIHsKICAgICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgY29kZSIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9zdGF0dXNDb2RlID0gX3N0YXR1c0NvZGUgKiAxMCArIGJ5dGUgLSAweDMwOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuUkVTUE9OU0VfTElORV9SRUFTT05fUEhSQVNFOgogICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkNSKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5SRVNQT05TRV9MSU5FX0VORElORzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5DUiB8fCBieXRlID09IF9DaGFyQ29kZS5MRikgewogICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIHJlc3BvbnNlIHJlYXNvbiBwaHJhc2UiKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfdXJpX29yX3JlYXNvbl9waHJhc2UuYWRkKGJ5dGUpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLlJFU1BPTlNFX0xJTkVfRU5ESU5HOgogICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuTEYpOwogICAgICAgICAgX21lc3NhZ2VUeXBlID09IF9NZXNzYWdlVHlwZS5SRVNQT05TRTsKICAgICAgICAgIGlmIChfc3RhdHVzQ29kZSA8IDEwMCB8fCBfc3RhdHVzQ29kZSA+IDU5OSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSHR0cEV4Y2VwdGlvbigiSW52YWxpZCByZXNwb25zZSBzdGF0dXMgY29kZSIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gQ2hlY2sgd2hldGhlciB0aGlzIHJlc3BvbnNlIHdpbGwgbmV2ZXIgaGF2ZSBhIGJvZHkuCiAgICAgICAgICAgIGlmIChfc3RhdHVzQ29kZSA8PSAxOTkgfHwKICAgICAgICAgICAgICAgIF9zdGF0dXNDb2RlID09IDIwNCB8fAogICAgICAgICAgICAgICAgX3N0YXR1c0NvZGUgPT0gMzA0KSB7CiAgICAgICAgICAgICAgX25vTWVzc2FnZUJvZHkgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX1NUQVJUOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkhFQURFUl9TVEFSVDoKICAgICAgICAgIF9oZWFkZXJzID0gbmV3IF9IdHRwSGVhZGVycyh2ZXJzaW9uKTsKICAgICAgICAgIGlmIChieXRlID09IF9DaGFyQ29kZS5DUikgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX0VORElORzsKICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuTEYpIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9FTkRJTkc7CiAgICAgICAgICAgIF9pbmRleC0tOyAvLyBNYWtlIHRoZSBuZXcgc3RhdGUgc2VlIHRoZSBMRiBhZ2Fpbi4KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFN0YXJ0IG9mIG5ldyBoZWFkZXIgZmllbGQuCiAgICAgICAgICAgIF9oZWFkZXJGaWVsZC5hZGQoX3RvTG93ZXJDYXNlQnl0ZShieXRlKSk7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfRklFTEQ7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuSEVBREVSX0ZJRUxEOgogICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkNPTE9OKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfVkFMVUVfU1RBUlQ7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoIV9pc1Rva2VuQ2hhcihieXRlKSkgewogICAgICAgICAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJJbnZhbGlkIGhlYWRlciBmaWVsZCBuYW1lIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX2hlYWRlckZpZWxkLmFkZChfdG9Mb3dlckNhc2VCeXRlKGJ5dGUpKTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5IRUFERVJfVkFMVUVfU1RBUlQ6CiAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuQ1IpIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9WQUxVRV9GT0xESU5HX09SX0VORElORzsKICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuTEYpIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9WQUxVRV9GT0xEX09SX0VORDsKICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSAhPSBfQ2hhckNvZGUuU1AgJiYgYnl0ZSAhPSBfQ2hhckNvZGUuSFQpIHsKICAgICAgICAgICAgLy8gU3RhcnQgb2YgbmV3IGhlYWRlciB2YWx1ZS4KICAgICAgICAgICAgX2hlYWRlclZhbHVlLmFkZChieXRlKTsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9WQUxVRTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5IRUFERVJfVkFMVUU6CiAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuQ1IpIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9WQUxVRV9GT0xESU5HX09SX0VORElORzsKICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuTEYpIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9WQUxVRV9GT0xEX09SX0VORDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9oZWFkZXJWYWx1ZS5hZGQoYnl0ZSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuSEVBREVSX1ZBTFVFX0ZPTERJTkdfT1JfRU5ESU5HOgogICAgICAgICAgX2V4cGVjdChieXRlLCBfQ2hhckNvZGUuTEYpOwogICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9WQUxVRV9GT0xEX09SX0VORDsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5IRUFERVJfVkFMVUVfRk9MRF9PUl9FTkQ6CiAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuU1AgfHwgYnl0ZSA9PSBfQ2hhckNvZGUuSFQpIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9WQUxVRV9TVEFSVDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIFN0cmluZyBoZWFkZXJGaWVsZCA9IG5ldyBTdHJpbmcuZnJvbUNoYXJDb2RlcyhfaGVhZGVyRmllbGQpOwogICAgICAgICAgICBTdHJpbmcgaGVhZGVyVmFsdWUgPSBuZXcgU3RyaW5nLmZyb21DaGFyQ29kZXMoX2hlYWRlclZhbHVlKTsKICAgICAgICAgICAgaWYgKGhlYWRlckZpZWxkID09ICJ0cmFuc2Zlci1lbmNvZGluZyIgJiYKICAgICAgICAgICAgICAgIF9jYXNlSW5zZW5zaXRpdmVDb21wYXJlKCJjaHVua2VkIi5jb2RlVW5pdHMsIF9oZWFkZXJWYWx1ZSkpIHsKICAgICAgICAgICAgICBfY2h1bmtlZCA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGhlYWRlckZpZWxkID09ICJjb25uZWN0aW9uIikgewogICAgICAgICAgICAgIExpc3Q8U3RyaW5nPiB0b2tlbnMgPSBfdG9rZW5pemVGaWVsZFZhbHVlKGhlYWRlclZhbHVlKTsKICAgICAgICAgICAgICBmaW5hbCBib29sIGlzUmVzcG9uc2UgPSBfbWVzc2FnZVR5cGUgPT0gX01lc3NhZ2VUeXBlLlJFU1BPTlNFOwogICAgICAgICAgICAgIGZpbmFsIGJvb2wgaXNVcGdyYWRlQ29kZSA9CiAgICAgICAgICAgICAgICAgIChfc3RhdHVzQ29kZSA9PSBIdHRwU3RhdHVzLnVwZ3JhZGVSZXF1aXJlZCkgfHwKICAgICAgICAgICAgICAgICAgICAgIChfc3RhdHVzQ29kZSA9PSBIdHRwU3RhdHVzLnN3aXRjaGluZ1Byb3RvY29scyk7CiAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgIGZpbmFsIGJvb2wgaXNVcGdyYWRlID0gX2Nhc2VJbnNlbnNpdGl2ZUNvbXBhcmUoCiAgICAgICAgICAgICAgICAgICAgInVwZ3JhZGUiLmNvZGVVbml0cywgdG9rZW5zW2ldLmNvZGVVbml0cyk7CiAgICAgICAgICAgICAgICBpZiAoKGlzVXBncmFkZSAmJiAhaXNSZXNwb25zZSkgfHwKICAgICAgICAgICAgICAgICAgICAoaXNVcGdyYWRlICYmIGlzUmVzcG9uc2UgJiYgaXNVcGdyYWRlQ29kZSkpIHsKICAgICAgICAgICAgICAgICAgX2Nvbm5lY3Rpb25VcGdyYWRlID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF9oZWFkZXJzLl9hZGQoaGVhZGVyRmllbGQsIHRva2Vuc1tpXSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9oZWFkZXJzLl9hZGQoaGVhZGVyRmllbGQsIGhlYWRlclZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBfaGVhZGVyRmllbGQuY2xlYXIoKTsKICAgICAgICAgICAgX2hlYWRlclZhbHVlLmNsZWFyKCk7CgogICAgICAgICAgICBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuQ1IpIHsKICAgICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuSEVBREVSX0VORElORzsKICAgICAgICAgICAgfSBlbHNlIGlmIChieXRlID09IF9DaGFyQ29kZS5MRikgewogICAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5IRUFERVJfRU5ESU5HOwogICAgICAgICAgICAgIF9pbmRleC0tOyAvLyBNYWtlIHRoZSBuZXcgc3RhdGUgc2VlIHRoZSBMRiBhZ2Fpbi4KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAvLyBTdGFydCBvZiBuZXcgaGVhZGVyIGZpZWxkLgogICAgICAgICAgICAgIF9oZWFkZXJGaWVsZC5hZGQoX3RvTG93ZXJDYXNlQnl0ZShieXRlKSk7CiAgICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkhFQURFUl9GSUVMRDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkhFQURFUl9FTkRJTkc6CiAgICAgICAgICBfZXhwZWN0KGJ5dGUsIF9DaGFyQ29kZS5MRik7CiAgICAgICAgICBpZiAoX2hlYWRlcnNFbmQoKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKCiAgICAgICAgY2FzZSBfU3RhdGUuQ0hVTktfU0laRV9TVEFSVElOR19DUjoKICAgICAgICAgIF9leHBlY3QoYnl0ZSwgX0NoYXJDb2RlLkNSKTsKICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5DSFVOS19TSVpFX1NUQVJUSU5HX0xGOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkNIVU5LX1NJWkVfU1RBUlRJTkdfTEY6CiAgICAgICAgICBfZXhwZWN0KGJ5dGUsIF9DaGFyQ29kZS5MRik7CiAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuQ0hVTktfU0laRTsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5DSFVOS19TSVpFOgogICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkNSKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5DSFVOS19TSVpFX0VORElORzsKICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZSA9PSBfQ2hhckNvZGUuU0VNSV9DT0xPTikgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuQ0hVTktfU0laRV9FWFRFTlNJT047CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpbnQgdmFsdWUgPSBfZXhwZWN0SGV4RGlnaXQoYnl0ZSk7CiAgICAgICAgICAgIF9yZW1haW5pbmdDb250ZW50ID0gX3JlbWFpbmluZ0NvbnRlbnQgKiAxNiArIHZhbHVlOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkNIVU5LX1NJWkVfRVhURU5TSU9OOgogICAgICAgICAgaWYgKGJ5dGUgPT0gX0NoYXJDb2RlLkNSKSB7CiAgICAgICAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5DSFVOS19TSVpFX0VORElORzsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIF9TdGF0ZS5DSFVOS19TSVpFX0VORElORzoKICAgICAgICAgIF9leHBlY3QoYnl0ZSwgX0NoYXJDb2RlLkxGKTsKICAgICAgICAgIGlmIChfcmVtYWluaW5nQ29udGVudCA+IDApIHsKICAgICAgICAgICAgX3N0YXRlID0gX1N0YXRlLkJPRFk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuQ0hVTktFRF9CT0RZX0RPTkVfQ1I7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuQ0hVTktFRF9CT0RZX0RPTkVfQ1I6CiAgICAgICAgICBfZXhwZWN0KGJ5dGUsIF9DaGFyQ29kZS5DUik7CiAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuQ0hVTktFRF9CT0RZX0RPTkVfTEY7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuQ0hVTktFRF9CT0RZX0RPTkVfTEY6CiAgICAgICAgICBfZXhwZWN0KGJ5dGUsIF9DaGFyQ29kZS5MRik7CiAgICAgICAgICBfcmVzZXQoKTsKICAgICAgICAgIF9jbG9zZUluY29taW5nKCk7CiAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSBfU3RhdGUuQk9EWToKICAgICAgICAgIC8vIFRoZSBib2R5IGlzIG5vdCBoYW5kbGVkIG9uZSBieXRlIGF0IGEgdGltZSBidXQgaW4gYmxvY2tzLgogICAgICAgICAgX2luZGV4LS07CiAgICAgICAgICBpbnQgZGF0YUF2YWlsYWJsZSA9IF9idWZmZXIubGVuZ3RoIC0gX2luZGV4OwogICAgICAgICAgaWYgKF9yZW1haW5pbmdDb250ZW50ID49IDAgJiYgZGF0YUF2YWlsYWJsZSA+IF9yZW1haW5pbmdDb250ZW50KSB7CiAgICAgICAgICAgIGRhdGFBdmFpbGFibGUgPSBfcmVtYWluaW5nQ29udGVudDsKICAgICAgICAgIH0KICAgICAgICAgIC8vIEFsd2F5cyBwcmVzZW50IHRoZSBkYXRhIGFzIGEgdmlldy4gVGhpcyB3YXkgd2UgY2FuIGhhbmRsZSBhbGwKICAgICAgICAgIC8vIGNhc2VzIGxpa2UgdGhpcywgYW5kIHRoZSB1c2VyIHdpbGwgbm90IGV4cGVyaWVuY2UgZGlmZmVyZW50IGRhdGEKICAgICAgICAgIC8vIHR5cGVkICh3aGljaCBjb3VsZCBsZWFkIHRvIHBvbHltb3JwaGljIHVzZXIgY29kZSkuCiAgICAgICAgICBVaW50OExpc3QgZGF0YSA9IG5ldyBVaW50OExpc3QudmlldygKICAgICAgICAgICAgICBfYnVmZmVyLmJ1ZmZlciwgX2J1ZmZlci5vZmZzZXRJbkJ5dGVzICsgX2luZGV4LCBkYXRhQXZhaWxhYmxlKTsKICAgICAgICAgIF9ib2R5Q29udHJvbGxlci5hZGQoZGF0YSk7CiAgICAgICAgICBpZiAoX3JlbWFpbmluZ0NvbnRlbnQgIT0gLTEpIHsKICAgICAgICAgICAgX3JlbWFpbmluZ0NvbnRlbnQgLT0gZGF0YS5sZW5ndGg7CiAgICAgICAgICB9CiAgICAgICAgICBfaW5kZXggKz0gZGF0YS5sZW5ndGg7CiAgICAgICAgICBpZiAoX3JlbWFpbmluZ0NvbnRlbnQgPT0gMCkgewogICAgICAgICAgICBpZiAoIV9jaHVua2VkKSB7CiAgICAgICAgICAgICAgX3Jlc2V0KCk7CiAgICAgICAgICAgICAgX2Nsb3NlSW5jb21pbmcoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfc3RhdGUgPSBfU3RhdGUuQ0hVTktfU0laRV9TVEFSVElOR19DUjsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgX1N0YXRlLkZBSUxVUkU6CiAgICAgICAgICAvLyBTaG91bGQgYmUgdW5yZWFjaGFibGUuCiAgICAgICAgICBhc3NlcnQoZmFsc2UpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAvLyBTaG91bGQgYmUgdW5yZWFjaGFibGUuCiAgICAgICAgICBhc3NlcnQoZmFsc2UpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICBfcGFyc2VyQ2FsbGVkID0gZmFsc2U7CiAgICBpZiAoX2J1ZmZlciAhPSBudWxsICYmIF9pbmRleCA9PSBfYnVmZmVyLmxlbmd0aCkgewogICAgICAvLyBJZiBhbGwgZGF0YSBpcyBwYXJzZWQgcmVsZWFzZSB0aGUgYnVmZmVyIGFuZCByZXN1bWUgcmVjZWl2aW5nCiAgICAgIC8vIGRhdGEuCiAgICAgIF9yZWxlYXNlQnVmZmVyKCk7CiAgICAgIGlmIChfc3RhdGUgIT0gX1N0YXRlLlVQR1JBREVEICYmIF9zdGF0ZSAhPSBfU3RhdGUuRkFJTFVSRSkgewogICAgICAgIF9zb2NrZXRTdWJzY3JpcHRpb24ucmVzdW1lKCk7CiAgICAgIH0KICAgIH0KICB9CgogIHZvaWQgX29uRGF0YShVaW50OExpc3QgYnVmZmVyKSB7CiAgICBfc29ja2V0U3Vic2NyaXB0aW9uLnBhdXNlKCk7CiAgICBhc3NlcnQoX2J1ZmZlciA9PSBudWxsKTsKICAgIF9idWZmZXIgPSBidWZmZXI7CiAgICBfaW5kZXggPSAwOwogICAgX3BhcnNlKCk7CiAgfQoKICB2b2lkIF9vbkRvbmUoKSB7CiAgICAvLyBvbkRvbmUgY2FuY2VscyB0aGUgc3Vic2NyaXB0aW9uLgogICAgX3NvY2tldFN1YnNjcmlwdGlvbiA9IG51bGw7CiAgICBpZiAoX3N0YXRlID09IF9TdGF0ZS5DTE9TRUQgfHwgX3N0YXRlID09IF9TdGF0ZS5GQUlMVVJFKSByZXR1cm47CgogICAgaWYgKF9pbmNvbWluZyAhPSBudWxsKSB7CiAgICAgIGlmIChfc3RhdGUgIT0gX1N0YXRlLlVQR1JBREVEICYmCiAgICAgICAgICAhKF9zdGF0ZSA9PSBfU3RhdGUuU1RBUlQgJiYgIV9yZXF1ZXN0UGFyc2VyKSAmJgogICAgICAgICAgIShfc3RhdGUgPT0gX1N0YXRlLkJPRFkgJiYgIV9jaHVua2VkICYmIF90cmFuc2Zlckxlbmd0aCA9PSAtMSkpIHsKICAgICAgICBfYm9keUNvbnRyb2xsZXIuYWRkRXJyb3IoCiAgICAgICAgICAgIG5ldyBIdHRwRXhjZXB0aW9uKCJDb25uZWN0aW9uIGNsb3NlZCB3aGlsZSByZWNlaXZpbmcgZGF0YSIpKTsKICAgICAgfQogICAgICBfY2xvc2VJbmNvbWluZyh0cnVlKTsKICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLy8gSWYgdGhlIGNvbm5lY3Rpb24gaXMgaWRsZSB0aGUgSFRUUCBzdHJlYW0gaXMgY2xvc2VkLgogICAgaWYgKF9zdGF0ZSA9PSBfU3RhdGUuU1RBUlQpIHsKICAgICAgaWYgKCFfcmVxdWVzdFBhcnNlcikgewogICAgICAgIF9yZXBvcnRFcnJvcihuZXcgSHR0cEV4Y2VwdGlvbigKICAgICAgICAgICAgIkNvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSBmdWxsIGhlYWRlciB3YXMgcmVjZWl2ZWQiKSk7CiAgICAgIH0KICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmIChfc3RhdGUgPT0gX1N0YXRlLlVQR1JBREVEKSB7CiAgICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICBpZiAoX3N0YXRlIDwgX1N0YXRlLkZJUlNUX0JPRFlfU1RBVEUpIHsKICAgICAgX3N0YXRlID0gX1N0YXRlLkZBSUxVUkU7CiAgICAgIC8vIFJlcG9ydCB0aGUgZXJyb3IgdGhyb3VnaCB0aGUgZXJyb3IgY2FsbGJhY2sgaWYgYW55LiBPdGhlcndpc2UKICAgICAgLy8gdGhyb3cgdGhlIGVycm9yLgogICAgICBfcmVwb3J0RXJyb3IobmV3IEh0dHBFeGNlcHRpb24oCiAgICAgICAgICAiQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIGZ1bGwgaGVhZGVyIHdhcyByZWNlaXZlZCIpKTsKICAgICAgX2NvbnRyb2xsZXIuY2xvc2UoKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICghX2NodW5rZWQgJiYgX3RyYW5zZmVyTGVuZ3RoID09IC0xKSB7CiAgICAgIF9zdGF0ZSA9IF9TdGF0ZS5DTE9TRUQ7CiAgICB9IGVsc2UgewogICAgICBfc3RhdGUgPSBfU3RhdGUuRkFJTFVSRTsKICAgICAgLy8gUmVwb3J0IHRoZSBlcnJvciB0aHJvdWdoIHRoZSBlcnJvciBjYWxsYmFjayBpZiBhbnkuIE90aGVyd2lzZQogICAgICAvLyB0aHJvdyB0aGUgZXJyb3IuCiAgICAgIF9yZXBvcnRFcnJvcigKICAgICAgICAgIG5ldyBIdHRwRXhjZXB0aW9uKCJDb25uZWN0aW9uIGNsb3NlZCBiZWZvcmUgZnVsbCBib2R5IHdhcyByZWNlaXZlZCIpKTsKICAgIH0KICAgIF9jb250cm9sbGVyLmNsb3NlKCk7CiAgfQoKICBTdHJpbmcgZ2V0IHZlcnNpb24gewogICAgc3dpdGNoIChfaHR0cFZlcnNpb24pIHsKICAgICAgY2FzZSBfSHR0cFZlcnNpb24uSFRUUDEwOgogICAgICAgIHJldHVybiAiMS4wIjsKICAgICAgY2FzZSBfSHR0cFZlcnNpb24uSFRUUDExOgogICAgICAgIHJldHVybiAiMS4xIjsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KCiAgaW50IGdldCBtZXNzYWdlVHlwZSA9PiBfbWVzc2FnZVR5cGU7CiAgaW50IGdldCB0cmFuc2Zlckxlbmd0aCA9PiBfdHJhbnNmZXJMZW5ndGg7CiAgYm9vbCBnZXQgdXBncmFkZSA9PiBfY29ubmVjdGlvblVwZ3JhZGUgJiYgX3N0YXRlID09IF9TdGF0ZS5VUEdSQURFRDsKICBib29sIGdldCBwZXJzaXN0ZW50Q29ubmVjdGlvbiA9PiBfcGVyc2lzdGVudENvbm5lY3Rpb247CgogIHZvaWQgc2V0IGlzSGVhZChib29sIHZhbHVlKSB7CiAgICBpZiAodmFsdWUpIF9ub01lc3NhZ2VCb2R5ID0gdHJ1ZTsKICB9CgogIF9IdHRwRGV0YWNoZWRJbmNvbWluZyBkZXRhY2hJbmNvbWluZygpIHsKICAgIC8vIFNpbXVsYXRlIGRldGFjaGVkIGJ5IG1hcmtpbmcgYXMgdXBncmFkZWQuCiAgICBfc3RhdGUgPSBfU3RhdGUuVVBHUkFERUQ7CiAgICByZXR1cm4gbmV3IF9IdHRwRGV0YWNoZWRJbmNvbWluZyhfc29ja2V0U3Vic2NyaXB0aW9uLCByZWFkVW5wYXJzZWREYXRhKCkpOwogIH0KCiAgVWludDhMaXN0IHJlYWRVbnBhcnNlZERhdGEoKSB7CiAgICBpZiAoX2J1ZmZlciA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIGlmIChfaW5kZXggPT0gX2J1ZmZlci5sZW5ndGgpIHJldHVybiBudWxsOwogICAgdmFyIHJlc3VsdCA9IF9idWZmZXIuc3VibGlzdChfaW5kZXgpOwogICAgX3JlbGVhc2VCdWZmZXIoKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQoKICB2b2lkIF9yZXNldCgpIHsKICAgIGlmIChfc3RhdGUgPT0gX1N0YXRlLlVQR1JBREVEKSByZXR1cm47CiAgICBfc3RhdGUgPSBfU3RhdGUuU1RBUlQ7CiAgICBfbWVzc2FnZVR5cGUgPSBfTWVzc2FnZVR5cGUuVU5ERVRFUk1JTkVEOwogICAgX2hlYWRlckZpZWxkLmNsZWFyKCk7CiAgICBfaGVhZGVyVmFsdWUuY2xlYXIoKTsKICAgIF9tZXRob2QuY2xlYXIoKTsKICAgIF91cmlfb3JfcmVhc29uX3BocmFzZS5jbGVhcigpOwoKICAgIF9zdGF0dXNDb2RlID0gMDsKICAgIF9zdGF0dXNDb2RlTGVuZ3RoID0gMDsKCiAgICBfaHR0cFZlcnNpb24gPSBfSHR0cFZlcnNpb24uVU5ERVRFUk1JTkVEOwogICAgX3RyYW5zZmVyTGVuZ3RoID0gLTE7CiAgICBfcGVyc2lzdGVudENvbm5lY3Rpb24gPSBmYWxzZTsKICAgIF9jb25uZWN0aW9uVXBncmFkZSA9IGZhbHNlOwogICAgX2NodW5rZWQgPSBmYWxzZTsKCiAgICBfbm9NZXNzYWdlQm9keSA9IGZhbHNlOwogICAgX3JlbWFpbmluZ0NvbnRlbnQgPSAtMTsKCiAgICBfaGVhZGVycyA9IG51bGw7CiAgfQoKICB2b2lkIF9yZWxlYXNlQnVmZmVyKCkgewogICAgX2J1ZmZlciA9IG51bGw7CiAgICBfaW5kZXggPSBudWxsOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzVG9rZW5DaGFyKGludCBieXRlKSB7CiAgICByZXR1cm4gYnl0ZSA+IDMxICYmIGJ5dGUgPCAxMjggJiYgIV9Db25zdC5TRVBBUkFUT1JfTUFQW2J5dGVdOwogIH0KCiAgc3RhdGljIGJvb2wgX2lzVmFsdWVDaGFyKGludCBieXRlKSB7CiAgICByZXR1cm4gKGJ5dGUgPiAzMSAmJiBieXRlIDwgMTI4KSB8fAogICAgICAgIChieXRlID09IF9DaGFyQ29kZS5TUCkgfHwKICAgICAgICAoYnl0ZSA9PSBfQ2hhckNvZGUuSFQpOwogIH0KCiAgc3RhdGljIExpc3Q8U3RyaW5nPiBfdG9rZW5pemVGaWVsZFZhbHVlKFN0cmluZyBoZWFkZXJWYWx1ZSkgewogICAgTGlzdDxTdHJpbmc+IHRva2VucyA9IG5ldyBMaXN0PFN0cmluZz4oKTsKICAgIGludCBzdGFydCA9IDA7CiAgICBpbnQgaW5kZXggPSAwOwogICAgd2hpbGUgKGluZGV4IDwgaGVhZGVyVmFsdWUubGVuZ3RoKSB7CiAgICAgIGlmIChoZWFkZXJWYWx1ZVtpbmRleF0gPT0gIiwiKSB7CiAgICAgICAgdG9rZW5zLmFkZChoZWFkZXJWYWx1ZS5zdWJzdHJpbmcoc3RhcnQsIGluZGV4KSk7CiAgICAgICAgc3RhcnQgPSBpbmRleCArIDE7CiAgICAgIH0gZWxzZSBpZiAoaGVhZGVyVmFsdWVbaW5kZXhdID09ICIgIiB8fCBoZWFkZXJWYWx1ZVtpbmRleF0gPT0gIlx0IikgewogICAgICAgIHN0YXJ0Kys7CiAgICAgIH0KICAgICAgaW5kZXgrKzsKICAgIH0KICAgIHRva2Vucy5hZGQoaGVhZGVyVmFsdWUuc3Vic3RyaW5nKHN0YXJ0LCBpbmRleCkpOwogICAgcmV0dXJuIHRva2VuczsKICB9CgogIHN0YXRpYyBpbnQgX3RvTG93ZXJDYXNlQnl0ZShpbnQgeCkgewogICAgLy8gT3B0aW1pemVkIHZlcnNpb246CiAgICAvLyAgLSAgMHg0MSBpcyAnQScKICAgIC8vICAtICAweDdmIGlzIEFTQ0lJIG1hc2sKICAgIC8vICAtICAyNiBpcyB0aGUgbnVtYmVyIG9mIGFscGhhIGNoYXJhY3RlcnMuCiAgICAvLyAgLSAgMHgyMCBpcyB0aGUgZGVsdGEgYmV0d2VlbiBsb3dlciBhbmQgdXBwZXIgY2hhcnMuCiAgICByZXR1cm4gKCgoeCAtIDB4NDEpICYgMHg3ZikgPCAyNikgPyAoeCB8IDB4MjApIDogeDsKICB9CgogIC8vIGV4cGVjdGVkIHNob3VsZCBhbHJlYWR5IGJlIGxvd2VyY2FzZS4KICBib29sIF9jYXNlSW5zZW5zaXRpdmVDb21wYXJlKExpc3Q8aW50PiBleHBlY3RlZCwgTGlzdDxpbnQ+IHZhbHVlKSB7CiAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoICE9IHZhbHVlLmxlbmd0aCkgcmV0dXJuIGZhbHNlOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBleHBlY3RlZC5sZW5ndGg7IGkrKykgewogICAgICBpZiAoZXhwZWN0ZWRbaV0gIT0gX3RvTG93ZXJDYXNlQnl0ZSh2YWx1ZVtpXSkpIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCiAgaW50IF9leHBlY3QoaW50IHZhbDEsIGludCB2YWwyKSB7CiAgICBpZiAodmFsMSAhPSB2YWwyKSB7CiAgICAgIHRocm93IG5ldyBIdHRwRXhjZXB0aW9uKCJGYWlsZWQgdG8gcGFyc2UgSFRUUCIpOwogICAgfQogIH0KCiAgaW50IF9leHBlY3RIZXhEaWdpdChpbnQgYnl0ZSkgewogICAgaWYgKDB4MzAgPD0gYnl0ZSAmJiBieXRlIDw9IDB4MzkpIHsKICAgICAgcmV0dXJuIGJ5dGUgLSAweDMwOyAvLyAwIC0gOQogICAgfSBlbHNlIGlmICgweDQxIDw9IGJ5dGUgJiYgYnl0ZSA8PSAweDQ2KSB7CiAgICAgIHJldHVybiBieXRlIC0gMHg0MSArIDEwOyAvLyBBIC0gRgogICAgfSBlbHNlIGlmICgweDYxIDw9IGJ5dGUgJiYgYnl0ZSA8PSAweDY2KSB7CiAgICAgIHJldHVybiBieXRlIC0gMHg2MSArIDEwOyAvLyBhIC0gZgogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgbmV3IEh0dHBFeGNlcHRpb24oIkZhaWxlZCB0byBwYXJzZSBIVFRQIik7CiAgICB9CiAgfQoKICB2b2lkIF9jcmVhdGVJbmNvbWluZyhpbnQgdHJhbnNmZXJMZW5ndGgpIHsKICAgIGFzc2VydChfaW5jb21pbmcgPT0gbnVsbCk7CiAgICBhc3NlcnQoX2JvZHlDb250cm9sbGVyID09IG51bGwpOwogICAgYXNzZXJ0KCFfYm9keVBhdXNlZCk7CiAgICB2YXIgaW5jb21pbmc7CiAgICBfYm9keUNvbnRyb2xsZXIgPSBuZXcgU3RyZWFtQ29udHJvbGxlcjxVaW50OExpc3Q+KAogICAgICAgIHN5bmM6IHRydWUsCiAgICAgICAgb25MaXN0ZW46ICgpIHsKICAgICAgICAgIGlmIChpbmNvbWluZyAhPSBfaW5jb21pbmcpIHJldHVybjsKICAgICAgICAgIGFzc2VydChfYm9keVBhdXNlZCk7CiAgICAgICAgICBfYm9keVBhdXNlZCA9IGZhbHNlOwogICAgICAgICAgX3BhdXNlU3RhdGVDaGFuZ2VkKCk7CiAgICAgICAgfSwKICAgICAgICBvblBhdXNlOiAoKSB7CiAgICAgICAgICBpZiAoaW5jb21pbmcgIT0gX2luY29taW5nKSByZXR1cm47CiAgICAgICAgICBhc3NlcnQoIV9ib2R5UGF1c2VkKTsKICAgICAgICAgIF9ib2R5UGF1c2VkID0gdHJ1ZTsKICAgICAgICAgIF9wYXVzZVN0YXRlQ2hhbmdlZCgpOwogICAgICAgIH0sCiAgICAgICAgb25SZXN1bWU6ICgpIHsKICAgICAgICAgIGlmIChpbmNvbWluZyAhPSBfaW5jb21pbmcpIHJldHVybjsKICAgICAgICAgIGFzc2VydChfYm9keVBhdXNlZCk7CiAgICAgICAgICBfYm9keVBhdXNlZCA9IGZhbHNlOwogICAgICAgICAgX3BhdXNlU3RhdGVDaGFuZ2VkKCk7CiAgICAgICAgfSwKICAgICAgICBvbkNhbmNlbDogKCkgewogICAgICAgICAgaWYgKGluY29taW5nICE9IF9pbmNvbWluZykgcmV0dXJuOwogICAgICAgICAgaWYgKF9zb2NrZXRTdWJzY3JpcHRpb24gIT0gbnVsbCkgewogICAgICAgICAgICBfc29ja2V0U3Vic2NyaXB0aW9uLmNhbmNlbCgpOwogICAgICAgICAgfQogICAgICAgICAgX2Nsb3NlSW5jb21pbmcodHJ1ZSk7CiAgICAgICAgICBfY29udHJvbGxlci5jbG9zZSgpOwogICAgICAgIH0pOwogICAgaW5jb21pbmcgPSBfaW5jb21pbmcgPQogICAgICAgIG5ldyBfSHR0cEluY29taW5nKF9oZWFkZXJzLCB0cmFuc2Zlckxlbmd0aCwgX2JvZHlDb250cm9sbGVyLnN0cmVhbSk7CiAgICBfYm9keVBhdXNlZCA9IHRydWU7CiAgICBfcGF1c2VTdGF0ZUNoYW5nZWQoKTsKICB9CgogIHZvaWQgX2Nsb3NlSW5jb21pbmcoW2Jvb2wgY2xvc2luZyA9IGZhbHNlXSkgewogICAgLy8gSWdub3JlIG11bHRpcGxlIGNsb3NlIChjYW4gaGFwcGVuIGluIHJlLWVudHJhbmNlKS4KICAgIGlmIChfaW5jb21pbmcgPT0gbnVsbCkgcmV0dXJuOwogICAgdmFyIHRtcCA9IF9pbmNvbWluZzsKICAgIHRtcC5jbG9zZShjbG9zaW5nKTsKICAgIF9pbmNvbWluZyA9IG51bGw7CiAgICBpZiAoX2JvZHlDb250cm9sbGVyICE9IG51bGwpIHsKICAgICAgX2JvZHlDb250cm9sbGVyLmNsb3NlKCk7CiAgICAgIF9ib2R5Q29udHJvbGxlciA9IG51bGw7CiAgICB9CiAgICBfYm9keVBhdXNlZCA9IGZhbHNlOwogICAgX3BhdXNlU3Rh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ZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX2h0dHA7Cgpjb25zdCBTdHJpbmcgX0RBUlRfU0VTU0lPTl9JRCA9ICJEQVJUU0VTU0lEIjsKCi8vIEEgX0h0dHBTZXNzaW9uIGlzIGEgbm9kZSBpbiBhIGRvdWJsZS1saW5rZWQgbGlzdCwgd2l0aCBfbmV4dCBhbmQgX3ByZXYgYmVpbmcKLy8gdGhlIHByZXZpb3VzIGFuZCBuZXh0IHBvaW50ZXJzLgpjbGFzcyBfSHR0cFNlc3Npb24gaW1wbGVtZW50cyBIdHRwU2Vzc2lvbiB7CiAgLy8gRGVzdHJveWVkIG1hcmtlZC4gVXNlZCBieSB0aGUgaHR0cCBjb25uZWN0aW9uIHRvIHNlZSBpZiBhIHNlc3Npb24gaXMgdmFsaWQuCiAgYm9vbCBfZGVzdHJveWVkID0gZmFsc2U7CiAgYm9vbCBfaXNOZXcgPSB0cnVlOwogIERhdGVUaW1lIF9sYXN0U2VlbjsKICBGdW5jdGlvbiBfdGltZW91dENhbGxiYWNrOwogIF9IdHRwU2Vzc2lvbk1hbmFnZXIgX3Nlc3Npb25NYW5hZ2VyOwogIC8vIFBvaW50ZXJzIGluIHRpbWVvdXQgcXVldWUuCiAgX0h0dHBTZXNzaW9uIF9wcmV2OwogIF9IdHRwU2Vzc2lvbiBfbmV4dDsKICBmaW5hbCBTdHJpbmcgaWQ7CgogIGZpbmFsIE1hcCBfZGF0YSA9IG5ldyBIYXNoTWFwKCk7CgogIF9IdHRwU2Vzc2lvbih0aGlzLl9zZXNzaW9uTWFuYWdlciwgdGhpcy5pZCkgOiBfbGFzdFNlZW4gPSBuZXcgRGF0ZVRpbWUubm93KCk7CgogIHZvaWQgZGVzdHJveSgpIHsKICAgIF9kZXN0cm95ZWQgPSB0cnVlOwogICAgX3Nlc3Npb25NYW5hZ2VyLl9yZW1vdmVGcm9tVGltZW91dFF1ZXVlKHRoaXMpOwogICAgX3Nlc3Npb25NYW5hZ2VyLl9zZXNzaW9ucy5yZW1vdmUoaWQpOwogIH0KCiAgLy8gTWFyayB0aGUgc2Vzc2lvbiBhcyBzZWVuLiBUaGlzIHdpbGwgcmVzZXQgdGhlIHRpbWVvdXQgYW5kIG1vdmUgdGhlIG5vZGUgdG8KICAvLyB0aGUgZW5kIG9mIHRoZSB0aW1lb3V0IHF1ZXVlLgogIHZvaWQgX21hcmtTZWVuKCkgewogICAgX2xhc3RTZWVuID0gbmV3IERhdGVUaW1lLm5vdygpOwogICAgX3Nlc3Npb25NYW5hZ2VyLl9idW1wVG9FbmQodGhpcyk7CiAgfQoKICBEYXRlVGltZSBnZXQgbGFzdFNlZW4gPT4gX2xhc3RTZWVuOwoKICBib29sIGdldCBpc05ldyA9PiBfaXNOZXc7CgogIHZvaWQgc2V0IG9uVGltZW91dCh2b2lkIGNhbGxiYWNrKCkpIHsKICAgIF90aW1lb3V0Q2FsbGJhY2sgPSBjYWxsYmFjazsKICB9CgogIC8vIE1hcCBpbXBsZW1lbnRhdGlvbjoKICBib29sIGNvbnRhaW5zVmFsdWUodmFsdWUpID0+IF9kYXRhLmNvbnRhaW5zVmFsdWUodmFsdWUpOwogIGJvb2wgY29udGFpbnNLZXkoa2V5KSA9PiBfZGF0YS5jb250YWluc0tleShrZXkpOwogIG9wZXJhdG9yIFtdKGtleSkgPT4gX2RhdGFba2V5XTsKICB2b2lkIG9wZXJhdG9yIFtdPShrZXksIHZhbHVlKSB7CiAgICBfZGF0YVtrZXldID0gdmFsdWU7CiAgfQoKICBwdXRJZkFic2VudChrZXksIGlmQWJzZW50KSA9PiBfZGF0YS5wdXRJZkFic2VudChrZXksIGlmQWJzZW50KTsKICBhZGRBbGwoTWFwIG90aGVyKSA9PiBfZGF0YS5hZGRBbGwob3RoZXIpOwogIHJlbW92ZShrZXkpID0+IF9kYXRhLnJlbW92ZShrZXkpOwogIHZvaWQgY2xlYXIoKSB7CiAgICBfZGF0YS5jbGVhcigpOwogIH0KCiAgdm9pZCBmb3JFYWNoKHZvaWQgZihrZXksIHZhbHVlKSkgewogICAgX2RhdGEuZm9yRWFjaChmKTsKICB9CgogIEl0ZXJhYmxlPE1hcEVudHJ5PiBnZXQgZW50cmllcyA9PiBfZGF0YS5lbnRyaWVzOwoKICB2b2lkIGFkZEVudHJpZXMoSXRlcmFibGU8TWFwRW50cnk+IGVudHJpZXMpIHsKICAgIF9kYXRhLmFkZEVudHJpZXMoZW50cmllcyk7CiAgfQoKICBNYXA8SywgVj4gbWFwPEssIFY+KE1hcEVudHJ5PEssIFY+IHRyYW5zZm9ybShrZXksIHZhbHVlKSkgPT4KICAgICAgX2RhdGEubWFwKHRyYW5zZm9ybSk7CgogIHZvaWQgcmVtb3ZlV2hlcmUoYm9vbCB0ZXN0KGtleSwgdmFsdWUpKSB7CiAgICBfZGF0YS5yZW1vdmVXaGVyZSh0ZXN0KTsKICB9CgogIE1hcDxLLCBWPiBjYXN0PEssIFY+KCkgPT4gX2RhdGEuY2FzdDxLLCBWPigpOwogIHVwZGF0ZShrZXksIHVwZGF0ZSh2YWx1ZSksIHtpZkFic2VudCgpfSkgPT4KICAgICAgX2RhdGEudXBkYXRlKGtleSwgdXBkYXRlLCBpZkFic2VudDogaWZBYnNlbnQpOwoKICB2b2lkIHVwZGF0ZUFsbCh1cGRhdGUoa2V5LCB2YWx1ZSkpIHsKICAgIF9kYXRhLnVwZGF0ZUFsbCh1cGRhdGUpOwogIH0KCiAgSXRlcmFibGUgZ2V0IGtleXMgPT4gX2RhdGEua2V5czsKICBJdGVyYWJsZSBnZXQgdmFsdWVzID0+IF9kYXRhLnZhbHVlczsKICBpbnQgZ2V0IGxlbmd0aCA9PiBfZGF0YS5sZW5ndGg7CiAgYm9vbCBnZXQgaXNFbXB0eSA9PiBfZGF0YS5pc0VtcHR5OwogIGJvb2wgZ2V0IGlzTm90RW1wdHkgPT4gX2RhdGEuaXNOb3RFbXB0eTsKCiAgU3RyaW5nIHRvU3RyaW5nKCkgPT4gJ0h0dHBTZXNzaW9uIGlkOiRpZCAkX2RhdGEnOwp9CgovLyBQcml2YXRlIGNsYXNzIHVzZWQgdG8gbWFuYWdlIGFsbCB0aGUgYWN0aXZlIHNlc3Npb25zLiBUaGUgc2Vzc2lvbnMgYXJlIHN0b3JlZAovLyBpbiB0d28gd2F5czoKLy8KLy8gICogSW4gYSBtYXAsIG1hcHBpbmcgZnJvbSBJRCB0byBIdHRwU2Vzc2lvbi4KLy8gICogSW4gYSBsaW5rZWQgbGlzdCwgdXNlZCBhcyBhIHRpbWVvdXQgcXVldWUuCmNsYXNzIF9IdHRwU2Vzc2lvbk1hbmFnZXIgewogIE1hcDxTdHJpbmcsIF9IdHRwU2Vzc2lvbj4gX3Nlc3Npb25zOwogIGludCBfc2Vzc2lvblRpbWVvdXQgPSAyMCAqIDYwOyAvLyAyMCBtaW5zLgogIF9IdHRwU2Vzc2lvbiBfaGVhZDsKICBfSHR0cFNlc3Npb24gX3RhaWw7CiAgVGltZXIgX3RpbWVyOwoKICBfSHR0cFNlc3Npb25NYW5hZ2VyKCkgOiBfc2Vzc2lvbnMgPSB7fTsKCiAgU3RyaW5nIGNyZWF0ZVNlc3Npb25JZCgpIHsKICAgIGNvbnN0IGludCBfS0VZX0xFTkdUSCA9IDE2OyAvLyAxMjggYml0cy4KICAgIHZhciBkYXRhID0gX0NyeXB0b1V0aWxzLmdldFJhbmRvbUJ5dGVzKF9LRVlfTEVOR1RIKTsKICAgIHJldHVybiBfQ3J5cHRvVXRpbHMuYnl0ZXNUb0hleChkYXRhKTsKICB9CgogIF9IdHRwU2Vzc2lvbiBnZXRTZXNzaW9uKFN0cmluZyBpZCkgPT4gX3Nlc3Npb25zW2lkXTsKCiAgX0h0dHBTZXNzaW9uIGNyZWF0ZVNlc3Npb24oKSB7CiAgICB2YXIgaWQgPSBjcmVhdGVTZXNzaW9uSWQoKTsKICAgIC8vIFRPRE8oYWpvaG5zZW4pOiBDb25zaWRlciBhZGRpbmcgYSBsaW1pdCBhbmQgdGhyb3dpbmcgYW4gZXhjZXB0aW9uLgogICAgLy8gU2hvdWxkIGJlIHZlcnkgdW5saWtlbHkgaG93ZXZlci4KICAgIHdoaWxlIChfc2Vzc2lvbnMuY29udGFpbnNLZXkoaWQpKSB7CiAgICAgIGlkID0gY3JlYXRlU2Vzc2lvbklkKCk7CiAgICB9CiAgICB2YXIgc2Vzc2lvbiA9IF9zZXNzaW9uc1tpZF0gPSBuZXcgX0h0dHBTZXNzaW9uKHRoaXMsIGlkKTsKICAgIF9hZGRUb1RpbWVvdXRRdWV1ZShzZXNzaW9uKTsKICAgIHJldHVybiBzZXNzaW9uOwogIH0KCiAgdm9pZCBzZXQgc2Vzc2lvblRpbWVvdXQoaW50IHRpbWVvdXQpIHsKICAgIF9zZXNzaW9uVGltZW91dCA9IHRpbWVvdXQ7CiAgICBfc3RvcFRpbWVyKCk7CiAgICBfc3RhcnRUaW1lcigpOwogIH0KCiAgdm9pZCBjbG9zZSgpIHsKICAgIF9zdG9wVGltZXIoKTsKICB9CgogIHZvaWQgX2J1bXBUb0VuZChfSHR0cFNlc3Npb24gc2Vzc2lvbikgewogICAgX3JlbW92ZUZyb21UaW1lb3V0UXVldWUoc2Vzc2lvbik7CiAgICBfYWRkVG9UaW1lb3V0UXVldWUoc2Vzc2lvbik7CiAgfQoKICB2b2lkIF9hZGRUb1RpbWVvdXRRdWV1ZShfSHR0cFNlc3Npb24gc2Vzc2lvbikgewogICAgaWYgKF9oZWFkID09IG51bGwpIHsKICAgICAgYXNzZXJ0KF90YWlsID09IG51bGwpOwogICAgICBfdGFpbCA9IF9oZWFkID0gc2Vzc2lvbjsKICAgICAgX3N0YXJ0VGltZXIoKTsKICAgIH0gZWxzZSB7CiAgICAgIGFzc2VydChfdGltZXIgIT0gbnVsbCk7CiAgICAgIGFzc2VydChfdGFpbCAhPSBudWxsKTsKICAgICAgLy8gQWRkIHRvIGVuZC4KICAgICAgX3RhaWwuX25leHQgPSBzZXNzaW9uOwogICAgICBzZXNzaW9uLl9wcmV2ID0gX3RhaWw7CiAgICAgIF90YWlsID0gc2Vzc2lvbjsKICAgIH0KICB9CgogIHZvaWQgX3JlbW92ZUZyb21UaW1lb3V0UXVldWUoX0h0dHBTZXNzaW9uIHNlc3Npb24pIHsKICAgIGlmIChzZXNzaW9uLl9uZXh0ICE9IG51bGwpIHsKICAgICAgc2Vzc2lvbi5fbmV4dC5fcHJldiA9IHNlc3Npb24uX3ByZXY7CiAgICB9CiAgICBpZiAoc2Vzc2lvbi5fcHJldiAhPSBudWxsKSB7CiAgICAgIHNlc3Npb24uX3ByZXYuX25leHQgPSBzZXNzaW9uLl9uZXh0OwogICAgfQogICAgaWYgKF9oZWFkID09IHNlc3Npb24pIHsKICAgICAgLy8gV2UgcmVtb3ZlZCB0aGUgaGVhZCBlbGVtZW50LCBzdGFydCBuZXcgdGltZXIuCiAgICAgIF9oZWFkID0gc2Vzc2lvbi5fbmV4dDsKICAgICAgX3N0b3BUaW1lcigpOwogICAgICBfc3RhcnRUaW1lcigpOwogICAgfQogICAgaWYgKF90YWlsID09IHNlc3Npb24pIHsKICAgICAgX3RhaWwgPSBzZXNzaW9uLl9wcmV2OwogICAgfQogICAgc2Vzc2lvbi5fbmV4dCA9IHNlc3Npb24uX3ByZXYgPSBudWxsOwogIH0KCiAgdm9pZCBfdGltZXJUaW1lb3V0KCkgewogICAgX3N0b3BUaW1lcigpOyAvLyBDbGVhciB0aW1lci4KICAgIGFzc2VydChfaGVhZCAhPSBudWxsKTsKICAgIHZhciBzZXNzaW9uID0gX2hlYWQ7CiAgICBzZXNzaW9uLmRlc3Ryb3koKTsgLy8gV2lsbCByZW1vdmUgdGhlIHNlc3Npb24gZnJvbSB0aW1lb3V0IHF1ZXVlIGFuZCBtYXAuCiAgICBpZiAoc2Vzc2lvbi5fdGltZW91dENhbGxiYWNrICE9IG51bGwpIHsKICAgICAgc2Vzc2lvbi5fdGltZW91dENhbGxiYWNrKCk7CiAgICB9CiAgfQoKICB2b2lkIF9zdGFydFRpbWVyKCkgewogICAgYXNzZXJ0KF90aW1lciA9PSBudWxsKTsKICAgIGlmIChfaGVhZCAhPSBudWxsKSB7CiAgICAgIGludCBzZWNvbmRzID0gbmV3IERhdGVUaW1lLm5vdygpLmRpZmZlcmVuY2UoX2hlYWQubGFzdFNlZW4pLmluU2Vjb25kczsKICAgICAgX3RpbWVyID0gbmV3IFRpbWVyKAogICAgICAgICAgbmV3IER1cmF0aW9uKHNlY29uZHM6IF9zZXNzaW9uVGltZW91dCAtIHNlY29uZHMpLCBfdGltZXJUaW1lb3V0KTsKICAgIH0KICB9CgogIHZvaWQgX3N0b3BUaW1lcigpIHsKICAgIGlmIChfdGltZXIgIT0gbnVsbCkgewogICAgICBfdGltZXIuY2FuY2VsKCk7CiAgICAgIF90aW1lciA9IG51bGw7CiAgICB9CiAgfQp9CoDPAE5OPAEUAS4BUCMsURsWFh0nIBYWEwEjAVABExczKgQBUCMVJCYEASYBHAEoIQQBGTszIiIYBAFCLCQREwQBJRYEATMBMB8EAT8cASwdBAEwLjUBJx0EASMnIiUrATQCAVEQAzAxHCctFhYQASoBHS05KgQBNwEhIEooKB4GPiEUBAEpHxITBAEREgQBKiYhBAEyGR0fFQ0eHRUdHRcGBAE3ISsGISsGHDcdFBUGHB0GKgQBGSIbGU4sIgYEARccGU0aTAYEARYaFxUGBAIBHGRhcnQ6X2h0dHAvaHR0cF9zZXNzaW9uLmRhcnQwb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL19odHRwL292ZXJyaWRlcy5kYXJ0kIMvLyBDb3B5cmlnaHQgKGMpIDIwMTcsIHRoZSBEYXJ0IHByb2plY3QgYXV0aG9ycy4gIFBsZWFzZSBzZWUgdGhlIEFVVEhPUlMgZmlsZQovLyBmb3IgZGV0YWlscy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYQovLyBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKcGFydCBvZiBkYXJ0Ll9odHRwOwoKZmluYWwgX2h0dHBPdmVycmlkZXNUb2tlbiA9IG5ldyBPYmplY3QoKTsKCmNvbnN0IF9hc3luY1J1blpvbmVkID0gcnVuWm9uZWQ7CgovLy8gVGhpcyBjbGFzcyBmYWNpbGl0YXRlcyBvdmVycmlkaW5nIFtIdHRwQ2xpZW50XSB3aXRoIGEgbW9jayBpbXBsZW1lbnRhdGlvbi4KLy8vIEl0IHNob3VsZCBiZSBleHRlbmRlZCBieSBhbm90aGVyIGNsYXNzIGluIGNsaWVudCBjb2RlIHdpdGggb3ZlcnJpZGVzCi8vLyB0aGF0IGNvbnN0cnVjdCBhIG1vY2sgaW1wbGVtZW50YXRpb24uIFRoZSBpbXBsZW1lbnRhdGlvbiBpbiB0aGlzIGJhc2UgY2xhc3MKLy8vIGRlZmF1bHRzIHRvIHRoZSBhY3R1YWwgW0h0dHBDbGllbnRdIGltcGxlbWVudGF0aW9uLiBGb3IgZXhhbXBsZToKLy8vCi8vLyBgYGAKLy8vIGNsYXNzIE15SHR0cENsaWVudCBpbXBsZW1lbnRzIEh0dHBDbGllbnQgewovLy8gICAuLi4KLy8vICAgLy8gQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIEh0dHBDbGllbnQgaW50ZXJmYWNlCi8vLyAgIC4uLgovLy8gfQovLy8KLy8vIG1haW4oKSB7Ci8vLyAgIEh0dHBPdmVycmlkZXMucnVuWm9uZWQoKCkgewovLy8gICAgIC4uLgovLy8gICAgIC8vIE9wZXJhdGlvbnMgd2lsbCB1c2UgTXlIdHRwQ2xpZW50IGluc3RlYWQgb2YgdGhlIHJlYWwgSHR0cENsaWVudAovLy8gICAgIC8vIGltcGxlbWVudGF0aW9uIHdoZW5ldmVyIEh0dHBDbGllbnQgaXMgdXNlZC4KLy8vICAgICAuLi4KLy8vICAgfSwgY3JlYXRlSHR0cENsaWVudDogKFNlY3VyaXR5Q29udGV4dCBjKSA9PiBuZXcgTXlIdHRwQ2xpZW50KGMpKTsKLy8vIH0KLy8vIGBgYAphYnN0cmFjdCBjbGFzcyBIdHRwT3ZlcnJpZGVzIHsKICBzdGF0aWMgSHR0cE92ZXJyaWRlcyBfZ2xvYmFsOwoKICBzdGF0aWMgSHR0cE92ZXJyaWRlcyBnZXQgY3VycmVudCB7CiAgICByZXR1cm4gWm9uZS5jdXJyZW50W19odHRwT3ZlcnJpZGVzVG9rZW5dID8/IF9nbG9iYWw7CiAgfQoKICAvLy8gVGhlIFtIdHRwT3ZlcnJpZGVzXSB0byB1c2UgaW4gdGhlIHJvb3QgW1pvbmVdLgogIC8vLwogIC8vLyBUaGVzZSBhcmUgdGhlIFtIdHRwT3ZlcnJpZGVzXSB0aGF0IHdpbGwgYmUgdXNlZCBpbiB0aGUgcm9vdCBab25lLCBhbmQgaW4KICAvLy8gWm9uZSdzIHRoYXQgZG8gbm90IHNldCBbSHR0cE92ZXJyaWRlc10gYW5kIHdob3NlIGFuY2VzdG9ycyB1cCB0byB0aGUgcm9vdAogIC8vLyBab25lIGRvIG5vdCBzZXQgW0h0dHBPdmVycmlkZXNdLgogIHN0YXRpYyBzZXQgZ2xvYmFsKEh0dHBPdmVycmlkZXMgb3ZlcnJpZGVzKSB7CiAgICBfZ2xvYmFsID0gb3ZlcnJpZGVzOwogIH0KCiAgLy8vIFJ1bnMgW2JvZHldIGluIGEgZnJlc2ggW1pvbmVdIHVzaW5nIHRoZSBwcm92aWRlZCBvdmVycmlkZXMuCiAgc3RhdGljIFIgcnVuWm9uZWQ8Uj4oUiBib2R5KCksCiAgICAgIHtIdHRwQ2xpZW50IEZ1bmN0aW9uKFNlY3VyaXR5Q29udGV4dCkgY3JlYXRlSHR0cENsaWVudCwKICAgICAgU3RyaW5nIEZ1bmN0aW9uKFVyaSB1cmksIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQpCiAgICAgICAgICBmaW5kUHJveHlGcm9tRW52aXJvbm1lbnQsCiAgICAgIFpvbmVTcGVjaWZpY2F0aW9uIHpvbmVTcGVjaWZpY2F0aW9uLAogICAgICBGdW5jdGlvbiBvbkVycm9yfSkgewogICAgSHR0cE92ZXJyaWRlcyBvdmVycmlkZXMgPQogICAgICAgIG5ldyBfSHR0cE92ZXJyaWRlc1Njb3BlKGNyZWF0ZUh0dHBDbGllbnQsIGZpbmRQcm94eUZyb21FbnZpcm9ubWVudCk7CiAgICByZXR1cm4gX2FzeW5jUnVuWm9uZWQ8Uj4oYm9keSwKICAgICAgICB6b25lVmFsdWVzOiB7X2h0dHBPdmVycmlkZXNUb2tlbjogb3ZlcnJpZGVzfSwKICAgICAgICB6b25lU3BlY2lmaWNhdGlvbjogem9uZVNwZWNpZmljYXRpb24sCiAgICAgICAgb25FcnJvcjogb25FcnJvcik7CiAgfQoKICAvLy8gUnVucyBbYm9keV0gaW4gYSBmcmVzaCBbWm9uZV0gdXNpbmcgdGhlIG92ZXJyaWRlcyBmb3VuZCBpbiBbb3ZlcnJpZGVzXS4KICAvLy8KICAvLy8gTm90ZSB0aGF0IFtvdmVycmlkZXNdIHNob3VsZCBiZSBhbiBpbnN0YW5jZSBvZiBhIGNsYXNzIHRoYXQgZXh0ZW5kcwogIC8vLyBbSHR0cE92ZXJyaWRlc10uCiAgc3RhdGljIFIgcnVuV2l0aEh0dHBPdmVycmlkZXM8Uj4oUiBib2R5KCksIEh0dHBPdmVycmlkZXMgb3ZlcnJpZGVzLAogICAgICB7Wm9uZVNwZWNpZmljYXRpb24gem9uZVNwZWNpZmljYXRpb24sIEZ1bmN0aW9uIG9uRXJyb3J9KSB7CiAgICByZXR1cm4gX2FzeW5jUnVuWm9uZWQ8Uj4oYm9keSwKICAgICAgICB6b25lVmFsdWVzOiB7X2h0dHBPdmVycmlkZXNUb2tlbjogb3ZlcnJpZGVzfSwKICAgICAgICB6b25lU3BlY2lmaWNhdGlvbjogem9uZVNwZWNpZmljYXRpb24sCiAgICAgICAgb25FcnJvcjogb25FcnJvcik7CiAgfQoKICAvLy8gUmV0dXJucyBhIG5ldyBbSHR0cENsaWVudF0gdXNpbmcgdGhlIGdpdmVuIFtjb250ZXh0XS4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBuZXcgSHR0cENsaWVudGAuCiAgSHR0cENsaWVudCBjcmVhdGVIdHRwQ2xpZW50KFNlY3VyaXR5Q29udGV4dCBjb250ZXh0KSB7CiAgICByZXR1cm4gbmV3IF9IdHRwQ2xpZW50KGNvbnRleHQpOwogIH0KCiAgLy8vIFJlc29sdmVzIHRoZSBwcm94eSBzZXJ2ZXIgdG8gYmUgdXNlZCBmb3IgSFRUUCBjb25uZWN0aW9ucy4KICAvLy8KICAvLy8gV2hlbiB0aGlzIG92ZXJyaWRlIGlzIGluc3RhbGxlZCwgdGhpcyBmdW5jdGlvbiBvdmVycmlkZXMgdGhlIGJlaGF2aW9yIG9mCiAgLy8vIGBIdHRwQ2xpZW50LmZpbmRQcm94eUZyb21FbnZpcm9ubWVudGAuCiAgU3RyaW5nIGZpbmRQcm94eUZyb21FbnZpcm9ubWVudChVcmkgdXJsLCBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50KSB7CiAgICByZXR1cm4gX0h0dHBDbGllbnQuX2ZpbmRQcm94eUZyb21FbnZpcm9ubWVudCh1cmwsIGVudmlyb25tZW50KTsKICB9Cn0KCmNsYXNzIF9IdHRwT3ZlcnJpZGVzU2NvcGUgZXh0ZW5kcyBIdHRwT3ZlcnJpZGVzIHsKICBmaW5hbCBIdHRwT3ZlcnJpZGVzIF9wcmV2aW91cyA9IEh0dHBPdmVycmlkZXMuY3VycmVudDsKCiAgZmluYWwgSHR0cENsaWVudCBGdW5jdGlvbihTZWN1cml0eUNvbnRleHQpIF9jcmVhdGVIdHRwQ2xpZW50OwogIGZpbmFsIFN0cmluZyBGdW5jdGlvbihVcmkgdXJpLCBNYXA8U3RyaW5nLCBTdHJpbmc+IGVudmlyb25tZW50KQogICAgICBfZmluZFByb3h5RnJvbUVudmlyb25tZW50OwoKICBfSHR0cE92ZXJyaWRlc1Njb3BlKHRoaXMuX2NyZWF0ZUh0dHBDbGllbnQsIHRoaXMuX2ZpbmRQcm94eUZyb21FbnZpcm9ubWVudCk7CgogIEBvdmVycmlkZQogIEh0dHBDbGllbnQgY3JlYXRlSHR0cENsaWVudChTZWN1cml0eUNvbnRleHQgY29udGV4dCkgewogICAgaWYgKF9jcmVhdGVIdHRwQ2xpZW50ICE9IG51bGwpIHJldHVybiBfY3JlYXRlSHR0cENsaWVudChjb250ZXh0KTsKICAgIGlmIChfcHJldmlvdXMgIT0gbnVsbCkgcmV0dXJuIF9wcmV2aW91cy5jcmVhdGVIdHRwQ2xpZW50KGNvbnRleHQpOwogICAgcmV0dXJuIHN1cGVyLmNyZWF0ZUh0dHBDbGllbnQoY29udGV4dCk7CiAgfQoKICBAb3ZlcnJpZGUKICBTdHJpbmcgZmluZFByb3h5RnJvbUVudmlyb25tZW50KFVyaSB1cmwsIE1hcDxTdHJpbmcsIFN0cmluZz4gZW52aXJvbm1lbnQpIHsKICAgIGlmIChfZmluZFByb3h5RnJvbUVudmlyb25tZW50ICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9maW5kUHJveHlGcm9tRW52aXJvbm1lbnQodXJsLCBlbnZpcm9ubWVudCk7CiAgICB9CiAgICBpZiAoX3ByZXZpb3VzICE9IG51bGwpIHsKICAgICAgcmV0dXJuIF9wcmV2aW91cy5maW5kUHJveHlGcm9tRW52aXJvbm1lbnQodXJsLCBlbnZpcm9ubWVudCk7CiAgICB9CiAgICByZXR1cm4gc3VwZXIuZmluZFByb3h5RnJvbUVudmlyb25tZW50KHVybCwgZW52aXJvbm1lbnQpOwogIH0KfQp4AE5OPAEUASoBIQFPSVBFBAgvCjcKBgQNIgxLNwxIBggfIAElOQQBNQZPUCcvGQQBQiE+QCQrGx5NIzYuGwQBTgZKF0ZBIzYuGwQBPAZPGDklBAFBBk8tTkQEAgEyOQFAQiEBTwEMOUZHLAQBDE4tOgYdQwY9BAIBGWRhcnQ6X2h0dHAvb3ZlcnJpZGVzLmRhcnQwb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvbGliL19odHRwL3dlYnNvY2tldC5kYXJ0wABJJy8vIENvcHlyaWdodCAoYykgMjAxMywgdGhlIERhcnQgcHJvamVjdCBhdXRob3JzLiAgUGxlYXNlIHNlZSB0aGUgQVVUSE9SUyBmaWxlCi8vIGZvciBkZXRhaWxzLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhCi8vIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCgpwYXJ0IG9mIGRhcnQuX2h0dHA7CgovKioKICogV2ViU29ja2V0IHN0YXR1cyBjb2RlcyB1c2VkIHdoZW4gY2xvc2luZyBhIFdlYlNvY2tldCBjb25uZWN0aW9uLgogKi8KYWJzdHJhY3QgY2xhc3MgV2ViU29ja2V0U3RhdHVzIHsKICBzdGF0aWMgY29uc3QgaW50IG5vcm1hbENsb3N1cmUgPSAxMDAwOwogIHN0YXRpYyBjb25zdCBpbnQgZ29pbmdBd2F5ID0gMTAwMTsKICBzdGF0aWMgY29uc3QgaW50IHByb3RvY29sRXJyb3IgPSAxMDAyOwogIHN0YXRpYyBjb25zdCBpbnQgdW5zdXBwb3J0ZWREYXRhID0gMTAwMzsKICBzdGF0aWMgY29uc3QgaW50IHJlc2VydmVkMTAwNCA9IDEwMDQ7CiAgc3RhdGljIGNvbnN0IGludCBub1N0YXR1c1JlY2VpdmVkID0gMTAwNTsKICBzdGF0aWMgY29uc3QgaW50IGFibm9ybWFsQ2xvc3VyZSA9IDEwMDY7CiAgc3RhdGljIGNvbnN0IGludCBpbnZhbGlkRnJhbWVQYXlsb2FkRGF0YSA9IDEwMDc7CiAgc3RhdGljIGNvbnN0IGludCBwb2xpY3lWaW9sYXRpb24gPSAxMDA4OwogIHN0YXRpYyBjb25zdCBpbnQgbWVzc2FnZVRvb0JpZyA9IDEwMDk7CiAgc3RhdGljIGNvbnN0IGludCBtaXNzaW5nTWFuZGF0b3J5RXh0ZW5zaW9uID0gMTAxMDsKICBzdGF0aWMgY29uc3QgaW50IGludGVybmFsU2VydmVyRXJyb3IgPSAxMDExOwogIHN0YXRpYyBjb25zdCBpbnQgcmVzZXJ2ZWQxMDE1ID0gMTAxNTsKCiAgQERlcHJlY2F0ZWQoIlVzZSBub3JtYWxDbG9zdXJlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTk9STUFMX0NMT1NVUkUgPSBub3JtYWxDbG9zdXJlOwogIEBEZXByZWNhdGVkKCJVc2UgZ29pbmdBd2F5IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgR09JTkdfQVdBWSA9IGdvaW5nQXdheTsKICBARGVwcmVjYXRlZCgiVXNlIHByb3RvY29sRXJyb3IgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBQUk9UT0NPTF9FUlJPUiA9IHByb3RvY29sRXJyb3I7CiAgQERlcHJlY2F0ZWQoIlVzZSB1bnN1cHBvcnRlZERhdGEgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBVTlNVUFBPUlRFRF9EQVRBID0gdW5zdXBwb3J0ZWREYXRhOwogIEBEZXByZWNhdGVkKCJVc2UgcmVzZXJ2ZWQxMDA0IGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgUkVTRVJWRURfMTAwNCA9IHJlc2VydmVkMTAwNDsKICBARGVwcmVjYXRlZCgiVXNlIG5vU3RhdHVzUmVjZWl2ZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBOT19TVEFUVVNfUkVDRUlWRUQgPSBub1N0YXR1c1JlY2VpdmVkOwogIEBEZXByZWNhdGVkKCJVc2UgYWJub3JtYWxDbG9zdXJlIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgQUJOT1JNQUxfQ0xPU1VSRSA9IGFibm9ybWFsQ2xvc3VyZTsKICBARGVwcmVjYXRlZCgiVXNlIGludmFsaWRGcmFtZVBheWxvYWREYXRhIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgSU5WQUxJRF9GUkFNRV9QQVlMT0FEX0RBVEEgPSBpbnZhbGlkRnJhbWVQYXlsb2FkRGF0YTsKICBARGVwcmVjYXRlZCgiVXNlIHBvbGljeVZpb2xhdGlvbiBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IFBPTElDWV9WSU9MQVRJT04gPSBwb2xpY3lWaW9sYXRpb247CiAgQERlcHJlY2F0ZWQoIlVzZSBtZXNzYWdlVG9vQmlnIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgTUVTU0FHRV9UT09fQklHID0gbWVzc2FnZVRvb0JpZzsKICBARGVwcmVjYXRlZCgiVXNlIG1pc3NpbmdNYW5kYXRvcnlFeHRlbnNpb24gaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBNSVNTSU5HX01BTkRBVE9SWV9FWFRFTlNJT04gPSBtaXNzaW5nTWFuZGF0b3J5RXh0ZW5zaW9uOwogIEBEZXByZWNhdGVkKCJVc2UgaW50ZXJuYWxTZXJ2ZXJFcnJvciBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgaW50IElOVEVSTkFMX1NFUlZFUl9FUlJPUiA9IGludGVybmFsU2VydmVyRXJyb3I7CiAgQERlcHJlY2F0ZWQoIlVzZSByZXNlcnZlZDEwMTUgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBSRVNFUlZFRF8xMDE1ID0gcmVzZXJ2ZWQxMDE1Owp9CgovLy8gT3B0aW9ucyBjb250cm9sbGluZyBjb21wcmVzc2lvbiBpbiBhIFtXZWJTb2NrZXRdLgovLy8KLy8vIEEgW0NvbXByZXNzaW9uT3B0aW9uc10gaW5zdGFuY2UgY2FuIGJlIHBhc3NlZCB0byBbV2ViU29ja2V0LmNvbm5lY3RdLCBvcgovLy8gdXNlZCBpbiBvdGhlciBzaW1pbGFyIHBsYWNlcyB3aGVyZSBbV2ViU29ja2V0XSBjb21wcmVzc2lvbiBpcyBjb25maWd1cmVkLgovLy8KLy8vIEluIG1vc3QgY2FzZXMgdGhlIGRlZmF1bHQgW2NvbXByZXNzaW9uRGVmYXVsdF0gaXMgc3VmZmljaWVudCwgYnV0IGluIHNvbWUKLy8vIHNpdHVhdGlvbnMsIGl0IG1pZ2h0IGJlIGRlc2lyYWJsZSB0byB1c2UgZGlmZmVyZW50IGNvbXByZXNzaW9uIHBhcmFtZXRlcnMsCi8vLyBmb3IgZXhhbXBsZSB0byBwcmVzZXJ2ZSBtZW1vcnkgb24gc21hbGwgZGV2aWNlcy4KY2xhc3MgQ29tcHJlc3Npb25PcHRpb25zIHsKICAvLy8gRGVmYXVsdCBbV2ViU29ja2V0XSBjb21wcmVzc2lvbiBjb25maWd1cmF0aW9uLgogIC8vLwogIC8vLyBFbmFibGVzIGNvbXByZXNzaW9uIHdpdGggZGVmYXVsdCB3aW5kb3cgc2l6ZXMgYW5kIG5vIHJldXNlLiBUaGlzIGlzIHRoZQogIC8vLyBkZWZhdWx0IG9wdGlvbnMgdXNlZCBieSBbV2ViU29ja2V0LmNvbm5lY3RdIGlmIG5vIFtDb21wcmVzc2lvbk9wdGlvbnNdIGlzCiAgLy8vIHN1cHBsaWVkLgogIC8vLwogIC8vLyAqIGBjbGllbnROb0NvbnRleHRUYWtlb3ZlcmA6IGZhbHNlCiAgLy8vICogYHNlcnZlck5vQ29udGV4dFRha2VvdmVyYDogZmFsc2UKICAvLy8gKiBgY2xpZW50TWF4V2luZG93Qml0c2A6IG51bGwgKGRlZmF1bHQgbWF4aW1hbCB3aW5kb3cgc2l6ZSBvZiAxNSBiaXRzKQogIC8vLyAqIGBzZXJ2ZXJNYXhXaW5kb3dCaXRzYDogbnVsbCAoZGVmYXVsdCBtYXhpbWFsIHdpbmRvdyBzaXplIG9mIDE1IGJpdHMpCiAgc3RhdGljIGNvbnN0IENvbXByZXNzaW9uT3B0aW9ucyBjb21wcmVzc2lvbkRlZmF1bHQgPQogICAgICBjb25zdCBDb21wcmVzc2lvbk9wdGlvbnMoKTsKICBARGVwcmVjYXRlZCgiVXNlIGNvbXByZXNzaW9uRGVmYXVsdCBpbnN0ZWFkIikKICBzdGF0aWMgY29uc3QgQ29tcHJlc3Npb25PcHRpb25zIERFRkFVTFQgPSBjb21wcmVzc2lvbkRlZmF1bHQ7CgogIC8vLyBOby1jb21wcmVzc2lvbiBjb25maWd1cmF0aW9uLgogIC8vLwogIC8vLyBEaXNhYmxlcyBjb21wcmVzc2lvbiB3aGVuIHVzZWQgYXMgY29tcHJlc3Npb24gY29uZmlndXJhdGlvbiBmb3IgYQogIC8vLyBbV2ViU29ja2V0XS4KICBzdGF0aWMgY29uc3QgQ29tcHJlc3Npb25PcHRpb25zIGNvbXByZXNzaW9uT2ZmID0KICAgICAgY29uc3QgQ29tcHJlc3Npb25PcHRpb25zKGVuYWJsZWQ6IGZhbHNlKTsKICBARGVwcmVjYXRlZCgiVXNlIGNvbXByZXNzaW9uT2ZmIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBDb21wcmVzc2lvbk9wdGlvbnMgT0ZGID0gY29tcHJlc3Npb25PZmY7CgogIC8vLyBXaGV0aGVyIHRoZSBjbGllbnQgd2lsbCByZXVzZSBpdHMgY29tcHJlc3Npb24gaW5zdGFuY2VzLgogIGZpbmFsIGJvb2wgY2xpZW50Tm9Db250ZXh0VGFrZW92ZXI7CgogIC8vLyBXaGV0aGVyIHRoZSBzZXJ2ZXIgd2lsbCByZXVzZSBpdHMgY29tcHJlc3Npb24gaW5zdGFuY2VzLgogIGZpbmFsIGJvb2wgc2VydmVyTm9Db250ZXh0VGFrZW92ZXI7CgogIC8vLyBUaGUgbWF4aW1hbCB3aW5kb3cgc2l6ZSBiaXQgY291bnQgcmVxdWVzdGVkIGJ5IHRoZSBjbGllbnQuCiAgLy8vCiAgLy8vIFRoZSB3aW5kb3dzIHNpemUgZm9yIHRoZSBjb21wcmVzc2lvbiBpcyBhbHdheXMgYSBwb3dlciBvZiB0d28sIHNvIHRoZQogIC8vLyBudW1iZXIgb2YgYml0cyBwcmVjaXNlbHkgZGV0ZXJtaW5lcyB0aGUgd2luZG93IHNpemUuCiAgLy8vCiAgLy8vIElmIHNldCB0byBgbnVsbGAsIHRoZSBjbGllbnQgaGFzIG5vIHByZWZlcmVuY2UsIGFuZCB0aGUgY29tcHJlc3Npb24gY2FuCiAgLy8vIHVzZSB1cCB0byBpdHMgZGVmYXVsdCBtYXhpbXVtIHdpbmRvdyBzaXplIG9mIDE1IGJpdHMgZGVwZW5kaW5nIG9uIHRoZQogIC8vLyBzZXJ2ZXIncyBwcmVmZXJlbmNlLgogIGZpbmFsIGludCBjbGllbnRNYXhXaW5kb3dCaXRzOwoKICAvLy8gVGhlIG1heGltYWwgd2luZG93IHNpemUgYml0IGNvdW50IHJlcXVlc3RlZCBieSB0aGUgc2VydmVyLgogIC8vLwogIC8vLyBUaGUgd2luZG93cyBzaXplIGZvciB0aGUgY29tcHJlc3Npb24gaXMgYWx3YXlzIGEgcG93ZXIgb2YgdHdvLCBzbyB0aGUKICAvLy8gbnVtYmVyIG9mIGJpdHMgcHJlY2lzZWx5IGRldGVybWluZXMgdGhlIHdpbmRvdyBzaXplLgogIC8vLwogIC8vLyBJZiBzZXQgdG8gYG51bGxgLCB0aGUgc2VydmVyIGhhcyBubyBwcmVmZXJlbmNlLCBhbmQgdGhlIGNvbXByZXNzaW9uIGNhbgogIC8vLyB1c2UgdXAgdG8gaXRzIGRlZmF1bHQgbWF4aW11bSB3aW5kb3cgc2l6ZSBvZiAxNSBiaXRzIGRlcGVuZGluZyBvbiB0aGUKICAvLy8gY2xpZW50J3MgcHJlZmVyZW5jZS4KICBmaW5hbCBpbnQgc2VydmVyTWF4V2luZG93Qml0czsKCiAgLy8vIFdoZXRoZXIgV2ViU29ja2V0IGNvbXByZXNzaW9uIGlzIGVuYWJsZWQuCiAgLy8vCiAgLy8vIElmIG5vdCBlbmFibGVkLCB0aGUgcmVtYWluaW5nIGZpZWxkcyBoYXZlIG5vIGVmZmVjdCwgYW5kIHRoZQogIC8vLyBbY29tcHJlc3Npb25PZmZdIGluc3RhbmNlIGNhbiwgYW5kIHNob3VsZCwgYmUgcmV1c2VkIGluc3RlYWQgb2YgY3JlYXRpbmcgYQogIC8vLyBuZXcgaW5zdGFuY2Ugd2l0aCBjb21wcmVzc2lvbiBkaXNhYmxlZC4KICBmaW5hbCBib29sIGVuYWJsZWQ7CgogIGNvbnN0IENvbXByZXNzaW9uT3B0aW9ucygKICAgICAge3RoaXMuY2xpZW50Tm9Db250ZXh0VGFrZW92ZXIgPSBmYWxzZSwKICAgICAgdGhpcy5zZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlciA9IGZhbHNlLAogICAgICB0aGlzLmNsaWVudE1heFdpbmRvd0JpdHMsCiAgICAgIHRoaXMuc2VydmVyTWF4V2luZG93Qml0cywKICAgICAgdGhpcy5lbmFibGVkID0gdHJ1ZX0pOwoKICAvLy8gUGFyc2VzIGxpc3Qgb2YgcmVxdWVzdGVkIHNlcnZlciBoZWFkZXJzIHRvIHJldHVybiBzZXJ2ZXIgY29tcHJlc3Npb24KICAvLy8gcmVzcG9uc2UgaGVhZGVycy4KICAvLy8KICAvLy8gVXNlcyBbc2VydmVyTWF4V2luZG93Qml0c10gdmFsdWUgaWYgc2V0LCBvdGhlcndpc2Ugd2lsbCBhdHRlbXB0IHRvIHVzZQogIC8vLyB2YWx1ZSBmcm9tIGhlYWRlcnMuIERlZmF1bHRzIHRvIFtXZWJTb2NrZXQuREVGQVVMVF9XSU5ET1dfQklUU10uIFJldHVybnMgYQogIC8vLyBbX0NvbXByZXNzaW9uTWF4V2luZG93Qml0c10gb2JqZWN0IHdoaWNoIGNvbnRhaW5zIHRoZSByZXNwb25zZSBoZWFkZXJzIGFuZAogIC8vLyBuZWdvdGlhdGVkIG1heCB3aW5kb3cgYml0cy4KICBfQ29tcHJlc3Npb25NYXhXaW5kb3dCaXRzIF9jcmVhdGVTZXJ2ZXJSZXNwb25zZUhlYWRlcihIZWFkZXJWYWx1ZSByZXF1ZXN0ZWQpIHsKICAgIHZhciBpbmZvID0gbmV3IF9Db21wcmVzc2lvbk1heFdpbmRvd0JpdHMoKTsKCiAgICBpbnQgbXdiOwogICAgU3RyaW5nIHBhcnQ7CiAgICBpZiAocmVxdWVzdGVkPy5wYXJhbWV0ZXJzICE9IG51bGwpIHsKICAgICAgcGFydCA9IHJlcXVlc3RlZC5wYXJhbWV0ZXJzW19zZXJ2ZXJNYXhXaW5kb3dCaXRzXTsKICAgIH0KICAgIGlmIChwYXJ0ICE9IG51bGwpIHsKICAgICAgaWYgKHBhcnQubGVuZ3RoID49IDIgJiYgcGFydC5zdGFydHNXaXRoKCcwJykpIHsKICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiSWxsZWdhbCAwIHBhZGRpbmcgb24gdmFsdWUuIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbXdiID0gc2VydmVyTWF4V2luZG93Qml0cyA9PSBudWxsCiAgICAgICAgICAgID8gaW50LnBhcnNlKHBhcnQsCiAgICAgICAgICAgICAgICBvbkVycm9yOiAoc291cmNlKSA9PiBfV2ViU29ja2V0SW1wbC5ERUZBVUxUX1dJTkRPV19CSVRTKQogICAgICAgICAgICA6IHNlcnZlck1heFdpbmRvd0JpdHM7CiAgICAgICAgaW5mby5oZWFkZXJWYWx1ZSA9ICI7IHNlcnZlcl9tYXhfd2luZG93X2JpdHM9JHttd2J9IjsKICAgICAgICBpbmZvLm1heFdpbmRvd0JpdHMgPSBtd2I7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGluZm8uaGVhZGVyVmFsdWUgPSAiIjsKICAgICAgaW5mby5tYXhXaW5kb3dCaXRzID0gX1dlYlNvY2tldEltcGwuREVGQVVMVF9XSU5ET1dfQklUUzsKICAgIH0KICAgIHJldHVybiBpbmZvOwogIH0KCiAgLy8vIFJldHVybnMgZGVmYXVsdCB2YWx1ZXMgZm9yIGNsaWVudCBjb21wcmVzc2lvbiByZXF1ZXN0IGhlYWRlcnMuCiAgU3RyaW5nIF9jcmVhdGVDbGllbnRSZXF1ZXN0SGVhZGVyKEhlYWRlclZhbHVlIHJlcXVlc3RlZCwgaW50IHNpemUpIHsKICAgIHZhciBpbmZvID0gIiI7CgogICAgLy8gSWYgcmVzcG9uZGluZyB0byBhIHZhbGlkIHJlcXVlc3QsIHNwZWNpZnkgc2l6ZQogICAgaWYgKHJlcXVlc3RlZCAhPSBudWxsKSB7CiAgICAgIGluZm8gPSAiOyBjbGllbnRfbWF4X3dpbmRvd19iaXRzPSRzaXplIjsKICAgIH0gZWxzZSB7CiAgICAgIC8vIENsaWVudCByZXF1ZXN0LiBTcGVjaWZ5IGRlZmF1bHQKICAgICAgaWYgKGNsaWVudE1heFdpbmRvd0JpdHMgPT0gbnVsbCkgewogICAgICAgIGluZm8gPSAiOyBjbGllbnRfbWF4X3dpbmRvd19iaXRzIjsKICAgICAgfSBlbHNlIHsKICAgICAgICBpbmZvID0gIjsgY2xpZW50X21heF93aW5kb3dfYml0cz0kY2xpZW50TWF4V2luZG93Qml0cyI7CiAgICAgIH0KICAgICAgaWYgKHNlcnZlck1heFdpbmRvd0JpdHMgIT0gbnVsbCkgewogICAgICAgIGluZm8gKz0gIjsgc2VydmVyX21heF93aW5kb3dfYml0cz0kc2VydmVyTWF4V2luZG93Qml0cyI7CiAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gaW5mbzsKICB9CgogIC8vLyBDcmVhdGUgYSBDb21wcmVzc2lvbiBIZWFkZXIuCiAgLy8vCiAgLy8vIElmIFtyZXF1ZXN0ZWRdIGlzIG51bGwgb3IgY29udGFpbnMgY2xpZW50IHJlcXVlc3QgaGVhZGVycywgcmV0dXJucyBDbGllbnQKICAvLy8gY29tcHJlc3Npb24gcmVxdWVzdCBoZWFkZXJzIHdpdGggZGVmYXVsdCBzZXR0aW5ncyBmb3IKICAvLy8gYGNsaWVudF9tYXhfd2luZG93X2JpdHNgIGhlYWRlciB2YWx1ZS4gIElmIFtyZXF1ZXN0ZWRdIGNvbnRhaW5zIHNlcnZlcgogIC8vLyByZXNwb25zZSBoZWFkZXJzIHRoaXMgbWV0aG9kIHJldHVybnMgYSBTZXJ2ZXIgY29tcHJlc3Npb24gcmVzcG9uc2UgaGVhZGVyCiAgLy8vIG5lZ290aWF0aW5nIHRoZSBtYXggd2luZG93IGJpdHMgZm9yIGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIgYXMgcmVxdWVzdGVkCiAgLy8vIGBzZXJ2ZXJfbWF4X3dpbmRvd19iaXRzYCB2YWx1ZS4gIFRoaXMgbWV0aG9kIHJldHVybnMgYQogIC8vLyBbX0NvbXByZXNzaW9uTWF4V2luZG93Qml0c10gb2JqZWN0IHdpdGggdGhlIHJlc3BvbnNlIGhlYWRlcnMgYW5kCiAgLy8vIG5lZ290aWF0ZWQgYG1heFdpbmRvd0JpdHNgIHZhbHVlLgogIF9Db21wcmVzc2lvbk1heFdpbmRvd0JpdHMgX2NyZWF0ZUhlYWRlcihbSGVhZGVyVmFsdWUgcmVxdWVzdGVkXSkgewogICAgdmFyIGluZm8gPSBuZXcgX0NvbXByZXNzaW9uTWF4V2luZG93Qml0cygiIiwgMCk7CiAgICBpZiAoIWVuYWJsZWQpIHsKICAgICAgcmV0dXJuIGluZm87CiAgICB9CgogICAgaW5mby5oZWFkZXJWYWx1ZSA9IF9XZWJTb2NrZXRJbXBsLlBFUl9NRVNTQUdFX0RFRkxBVEU7CgogICAgaWYgKGNsaWVudE5vQ29udGV4dFRha2VvdmVyICYmCiAgICAgICAgKHJlcXVlc3RlZCA9PSBudWxsIHx8CiAgICAgICAgICAgIChyZXF1ZXN0ZWQgIT0gbnVsbCAmJgogICAgICAgICAgICAgICAgcmVxdWVzdGVkLnBhcmFtZXRlcnMuY29udGFpbnNLZXkoX2NsaWVudE5vQ29udGV4dFRha2VvdmVyKSkpKSB7CiAgICAgIGluZm8uaGVhZGVyVmFsdWUgKz0gIjsgY2xpZW50X25vX2NvbnRleHRfdGFrZW92ZXIiOwogICAgfQoKICAgIGlmIChzZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlciAmJgogICAgICAgIChyZXF1ZXN0ZWQgPT0gbnVsbCB8fAogICAgICAgICAgICAocmVxdWVzdGVkICE9IG51bGwgJiYKICAgICAgICAgICAgICAgIHJlcXVlc3RlZC5wYXJhbWV0ZXJzLmNvbnRhaW5zS2V5KF9zZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlcikpKSkgewogICAgICBpbmZvLmhlYWRlclZhbHVlICs9ICI7IHNlcnZlcl9ub19jb250ZXh0X3Rha2VvdmVyIjsKICAgIH0KCiAgICB2YXIgaGVhZGVyTGlzdCA9IF9jcmVhdGVTZXJ2ZXJSZXNwb25zZUhlYWRlcihyZXF1ZXN0ZWQpOwogICAgaW5mby5oZWFkZXJWYWx1ZSArPSBoZWFkZXJMaXN0LmhlYWRlclZhbHVlOwogICAgaW5mby5tYXhXaW5kb3dCaXRzID0gaGVhZGVyTGlzdC5tYXhXaW5kb3dCaXRzOwoKICAgIGluZm8uaGVhZGVyVmFsdWUgKz0KICAgICAgICBfY3JlYXRlQ2xpZW50UmVxdWVzdEhlYWRlcihyZXF1ZXN0ZWQsIGluZm8ubWF4V2luZG93Qml0cyk7CgogICAgcmV0dXJuIGluZm87CiAgfQp9CgovKioKICogVGhlIFtXZWJTb2NrZXRUcmFuc2Zvcm1lcl0gcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gdXBncmFkZSBhCiAqIFtIdHRwUmVxdWVzdF0gdG8gYSBbV2ViU29ja2V0XSBjb25uZWN0aW9uLiBJdCBzdXBwb3J0cyBib3RoCiAqIHVwZ3JhZGluZyBhIHNpbmdsZSBbSHR0cFJlcXVlc3RdIGFuZCB1cGdyYWRpbmcgYSBzdHJlYW0gb2YKICogW0h0dHBSZXF1ZXN0XXMuCiAqCiAqIFRvIHVwZ3JhZGUgYSBzaW5nbGUgW0h0dHBSZXF1ZXN0XSB1c2UgdGhlIHN0YXRpYyBbdXBncmFkZV0gbWV0aG9kLgogKgogKiAgICAgSHR0cFNlcnZlciBzZXJ2ZXI7CiAqICAgICBzZXJ2ZXIubGlzdGVuKChyZXF1ZXN0KSB7CiAqICAgICAgIGlmICguLi4pIHsKICogICAgICAgICBXZWJTb2NrZXRUcmFuc2Zvcm1lci51cGdyYWRlKHJlcXVlc3QpLnRoZW4oKHdlYnNvY2tldCkgewogKiAgICAgICAgICAgLi4uCiAqICAgICAgICAgfSk7CiAqICAgICAgIH0gZWxzZSB7CiAqICAgICAgICAgLy8gRG8gbm9ybWFsIEhUVFAgcmVxdWVzdCBwcm9jZXNzaW5nLgogKiAgICAgICB9CiAqICAgICB9KTsKICoKICogVG8gdHJhbnNmb3JtIGEgc3RyZWFtIG9mIFtIdHRwUmVxdWVzdF0gZXZlbnRzIGFzIGl0IGltcGxlbWVudHMgYQogKiBzdHJlYW0gdHJhbnNmb3JtZXIgdGhhdCB0cmFuc2Zvcm1zIGEgc3RyZWFtIG9mIEh0dHBSZXF1ZXN0IGludG8gYQogKiBzdHJlYW0gb2YgV2ViU29ja2V0cyBieSB1cGdyYWRpbmcgZWFjaCBIdHRwUmVxdWVzdCBmcm9tIHRoZSBIVFRQIG9yCiAqIEhUVFBTIHNlcnZlciwgdG8gdGhlIFdlYlNvY2tldCBwcm90b2NvbC4KICoKICogICAgIHNlcnZlci50cmFuc2Zvcm0obmV3IFdlYlNvY2tldFRyYW5zZm9ybWVyKCkpLmxpc3Rlbigod2ViU29ja2V0KSA9PiAuLi4pOwogKgogKiBUaGlzIHRyYW5zZm9ybWVyIHN0cml2ZXMgdG8gaW1wbGVtZW50IFdlYlNvY2tldHMgYXMgc3BlY2lmaWVkIGJ5IFJGQzY0NTUuCiAqLwphYnN0cmFjdCBjbGFzcyBXZWJTb2NrZXRUcmFuc2Zvcm1lcgogICAgaW1wbGVtZW50cyBTdHJlYW1UcmFuc2Zvcm1lcjxIdHRwUmVxdWVzdCwgV2ViU29ja2V0PiB7CiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IFtXZWJTb2NrZXRUcmFuc2Zvcm1lcl0uCiAgICoKICAgKiBJZiBbcHJvdG9jb2xTZWxlY3Rvcl0gaXMgcHJvdmlkZWQsIFtwcm90b2NvbFNlbGVjdG9yXSB3aWxsIGJlIGNhbGxlZCB0bwogICAqIHNlbGVjdCB3aGF0IHByb3RvY29sIHRvIHVzZSwgaWYgYW55IHdlcmUgcHJvdmlkZWQgYnkgdGhlIGNsaWVudC4KICAgKiBbcHJvdG9jb2xTZWxlY3Rvcl0gaXMgc2hvdWxkIHJldHVybiBlaXRoZXIgYSBbU3RyaW5nXSBvciBhIFtGdXR1cmVdCiAgICogY29tcGxldGluZyB3aXRoIGEgW1N0cmluZ10uIFRoZSBbU3RyaW5nXSBtdXN0IGV4aXN0IGluIHRoZSBsaXN0IG9mCiAgICogcHJvdG9jb2xzLgogICAqCiAgICogSWYgW2NvbXByZXNzaW9uXSBpcyBwcm92aWRlZCwgdGhlIFtXZWJTb2NrZXRdIGNyZWF0ZWQgd2lsbCBiZSBjb25maWd1cmVkCiAgICogdG8gbmVnb3RpYXRlIHdpdGggdGhlIHNwZWNpZmllZCBbQ29tcHJlc3Npb25PcHRpb25zXS4gSWYgbm9uZSBpcyBzcGVjaWZpZWQKICAgKiB0aGVuIHRoZSBbV2ViU29ja2V0XSB3aWxsIGJlIGNyZWF0ZWQgd2l0aCB0aGUgZGVmYXVsdCBbQ29tcHJlc3Npb25PcHRpb25zXS4KICAgKi8KICBmYWN0b3J5IFdlYlNvY2tldFRyYW5zZm9ybWVyKAogICAgICB7LypTdHJpbmd8RnV0dXJlPFN0cmluZz4qLyBwcm90b2NvbFNlbGVjdG9yKExpc3Q8U3RyaW5nPiBwcm90b2NvbHMpLAogICAgICBDb21wcmVzc2lvbk9wdGlvbnMgY29tcHJlc3Npb246IENvbXByZXNzaW9uT3B0aW9ucy5jb21wcmVzc2lvbkRlZmF1bHR9KSB7CiAgICByZXR1cm4gbmV3IF9XZWJTb2NrZXRUcmFuc2Zvcm1lckltcGwocHJvdG9jb2xTZWxlY3RvciwgY29tcHJlc3Npb24pOwogIH0KCiAgLyoqCiAgICogVXBncmFkZXMgYSBbSHR0cFJlcXVlc3RdIHRvIGEgW1dlYlNvY2tldF0gY29ubmVjdGlvbi4gSWYgdGhlCiAgICogcmVxdWVzdCBpcyBub3QgYSB2YWxpZCBXZWJTb2NrZXQgdXBncmFkZSByZXF1ZXN0IGFuIEhUVFAgcmVzcG9uc2UKICAgKiB3aXRoIHN0YXR1cyBjb2RlIDUwMCB3aWxsIGJlIHJldHVybmVkLiBPdGhlcndpc2UgdGhlIHJldHVybmVkCiAgICogZnV0dXJlIHdpbGwgY29tcGxldGUgd2l0aCB0aGUgW1dlYlNvY2tldF0gd2hlbiB0aGUgdXBncmFkZSBwcm9jZXNzCiAgICogaXMgY29tcGxldGUuCiAgICoKICAgKiBJZiBbcHJvdG9jb2xTZWxlY3Rvcl0gaXMgcHJvdmlkZWQsIFtwcm90b2NvbFNlbGVjdG9yXSB3aWxsIGJlIGNhbGxlZCB0bwogICAqIHNlbGVjdCB3aGF0IHByb3RvY29sIHRvIHVzZSwgaWYgYW55IHdlcmUgcHJvdmlkZWQgYnkgdGhlIGNsaWVudC4KICAgKiBbcHJvdG9jb2xTZWxlY3Rvcl0gaXMgc2hvdWxkIHJldHVybiBlaXRoZXIgYSBbU3RyaW5nXSBvciBhIFtGdXR1cmVdCiAgICogY29tcGxldGluZyB3aXRoIGEgW1N0cmluZ10uIFRoZSBbU3RyaW5nXSBtdXN0IGV4aXN0IGluIHRoZSBsaXN0IG9mCiAgICogcHJvdG9jb2xzLgogICAqCiAgICogSWYgW2NvbXByZXNzaW9uXSBpcyBwcm92aWRlZCwgdGhlIFtXZWJTb2NrZXRdIGNyZWF0ZWQgd2lsbCBiZSBjb25maWd1cmVkCiAgICogdG8gbmVnb3RpYXRlIHdpdGggdGhlIHNwZWNpZmllZCBbQ29tcHJlc3Npb25PcHRpb25zXS4gSWYgbm9uZSBpcyBzcGVjaWZpZWQKICAgKiB0aGVuIHRoZSBbV2ViU29ja2V0XSB3aWxsIGJlIGNyZWF0ZWQgd2l0aCB0aGUgZGVmYXVsdCBbQ29tcHJlc3Npb25PcHRpb25zXS4KICAgKi8KICBzdGF0aWMgRnV0dXJlPFdlYlNvY2tldD4gdXBncmFkZShIdHRwUmVxdWVzdCByZXF1ZXN0LAogICAgICB7cHJvdG9jb2xTZWxlY3RvcihMaXN0PFN0cmluZz4gcHJvdG9jb2xzKSwKICAgICAgQ29tcHJlc3Npb25PcHRpb25zIGNvbXByZXNzaW9uOiBDb21wcmVzc2lvbk9wdGlvbnMuY29tcHJlc3Npb25EZWZhdWx0fSkgewogICAgcmV0dXJuIF9XZWJTb2NrZXRUcmFuc2Zvcm1lckltcGwuX3VwZ3JhZGUoCiAgICAgICAgcmVxdWVzdCwgcHJvdG9jb2xTZWxlY3RvciwgY29tcHJlc3Npb24pOwogIH0KCiAgLyoqCiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIHJlcXVlc3QgaXMgYSB2YWxpZCBXZWJTb2NrZXQgdXBncmFkZSByZXF1ZXN0LgogICAqLwogIHN0YXRpYyBib29sIGlzVXBncmFkZVJlcXVlc3QoSHR0cFJlcXVlc3QgcmVxdWVzdCkgewogICAgcmV0dXJuIF9XZWJTb2NrZXRUcmFuc2Zvcm1lckltcGwuX2lzVXBncmFkZVJlcXVlc3QocmVxdWVzdCk7CiAgfQp9CgovKioKICogQSB0d28td2F5IEhUVFAgY29tbXVuaWNhdGlvbiBvYmplY3QgZm9yIGNsaWVudCBvciBzZXJ2ZXIgYXBwbGljYXRpb25zLgogKgogKiBUaGUgc3RyZWFtIGV4cG9zZXMgdGhlIG1lc3NhZ2VzIHJlY2VpdmVkLiBBIHRleHQgbWVzc2FnZSB3aWxsIGJlIG9mIHR5cGUKICogYFN0cmluZ2AgYW5kIGEgYmluYXJ5IG1lc3NhZ2Ugd2lsbCBiZSBvZiB0eXBlIGBMaXN0PGludD5gLgogKi8KYWJzdHJhY3QgY2xhc3MgV2ViU29ja2V0CiAgICBpbXBsZW1lbnRzCiAgICAgICAgU3RyZWFtPGR5bmFtaWMgLypTdHJpbmd8TGlzdDxpbnQ+Ki8gPiwKICAgICAgICBTdHJlYW1TaW5rPGR5bmFtaWMgLypTdHJpbmd8TGlzdDxpbnQ+Ki8gPiB7CiAgLyoqCiAgICogUG9zc2libGUgc3RhdGVzIG9mIHRoZSBjb25uZWN0aW9uLgogICAqLwogIHN0YXRpYyBjb25zdCBpbnQgY29ubmVjdGluZyA9IDA7CiAgc3RhdGljIGNvbnN0IGludCBvcGVuID0gMTsKICBzdGF0aWMgY29uc3QgaW50IGNsb3NpbmcgPSAyOwogIHN0YXRpYyBjb25zdCBpbnQgY2xvc2VkID0gMzsKCiAgQERlcHJlY2F0ZWQoIlVzZSBjb25uZWN0aW5nIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgQ09OTkVDVElORyA9IGNvbm5lY3Rpbmc7CiAgQERlcHJlY2F0ZWQoIlVzZSBvcGVuIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgT1BFTiA9IG9wZW47CiAgQERlcHJlY2F0ZWQoIlVzZSBjbG9zaW5nIGluc3RlYWQiKQogIHN0YXRpYyBjb25zdCBpbnQgQ0xPU0lORyA9IGNsb3Npbmc7CiAgQERlcHJlY2F0ZWQoIlVzZSBjbG9zZWQgaW5zdGVhZCIpCiAgc3RhdGljIGNvbnN0IGludCBDTE9TRUQgPSBjbG9zZWQ7CgogIC8qKgogICAqIFNldCBhbmQgZ2V0IHRoZSBpbnRlcnZhbCBmb3Igc2VuZGluZyBwaW5nIHNpZ25hbHMuIElmIGEgcGluZyBtZXNzYWdlIGlzIG5vdAogICAqIGFuc3dlcmVkIGJ5IGEgcG9uZyBtZXNzYWdlIGZyb20gdGhlIHBlZXIsIHRoZSBgV2ViU29ja2V0YCBpcyBhc3N1bWVkCiAgICogZGlzY29ubmVjdGVkIGFuZCB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQgd2l0aCBhCiAgICogW1dlYlNvY2tldFN0YXR1cy5HT0lOR19BV0FZXSBjbG9zZSBjb2RlLiBXaGVuIGEgcGluZyBzaWduYWwgaXMgc2VudCwgdGhlCiAgICogcG9uZyBtZXNzYWdlIG11c3QgYmUgcmVjZWl2ZWQgd2l0aGluIFtwaW5nSW50ZXJ2YWxdLgogICAqCiAgICogVGhlcmUgYXJlIG5ldmVyIHR3byBvdXRzdGFuZGluZyBwaW5ncyBhdCBhbnkgZ2l2ZW4gdGltZSwgYW5kIHRoZSBuZXh0IHBpbmcKICAgKiB0aW1lciBzdGFydHMgd2hlbiB0aGUgcG9uZyBpcyByZWNlaXZlZC4KICAgKgogICAqIFNldCB0aGUgW3BpbmdJbnRlcnZhbF0gdG8gYG51bGxgIHRvIGRpc2FibGUgc2VuZGluZyBwaW5nIG1lc3NhZ2VzLgogICAqCiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgYG51bGxgLgogICAqLwogIER1cmF0aW9uIHBpbmdJbnRlcnZhbDsKCiAgLyoqCiAgICogQ3JlYXRlIGEgbmV3IFdlYlNvY2tldCBjb25uZWN0aW9uLiBUaGUgVVJMIHN1cHBsaWVkIGluIFt1cmxdCiAgICogbXVzdCB1c2UgdGhlIHNjaGVtZSBgd3NgIG9yIGB3c3NgLgogICAqCiAgICogVGhlIFtwcm90b2NvbHNdIGFyZ3VtZW50IGlzIHNwZWNpZnlpbmcgdGhlIHN1YnByb3RvY29scyB0aGUKICAgKiBjbGllbnQgaXMgd2lsbGluZyB0byBzcGVhay4KICAgKgogICAqIFRoZSBbaGVhZGVyc10gYXJndW1lbnQgaXMgc3BlY2lmeWluZyBhZGRpdGlvbmFsIEhUVFAgaGVhZGVycyBmb3IKICAgKiBzZXR0aW5nIHVwIHRoZSBjb25uZWN0aW9uLiBUaGlzIHdvdWxkIHR5cGljYWxseSBiZSB0aGUgYE9yaWdpbmAKICAgKiBoZWFkZXIgYW5kIHBvdGVudGlhbGx5IGNvb2tpZXMuIFRoZSBrZXlzIG9mIHRoZSBtYXAgYXJlIHRoZSBoZWFkZXIKICAgKiBmaWVsZHMgYW5kIHRoZSB2YWx1ZXMgYXJlIGVpdGhlciBTdHJpbmcgb3IgTGlzdDxTdHJpbmc+LgogICAqCiAgICogSWYgW2hlYWRlcnNdIGlzIHByb3ZpZGVkLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgaGVhZGVycwogICAqIHdoaWNoIGFyZSBjb250cm9sbGVkIGJ5IHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBwcm9jZXNzLiBUaGVzZQogICAqIGhlYWRlcnMgYXJlOgogICAqCiAgICogICAtIGBjb25uZWN0aW9uYAogICAqICAgLSBgc2VjLXdlYnNvY2tldC1rZXlgCiAgICogICAtIGBzZWMtd2Vic29ja2V0LXByb3RvY29sYAogICAqICAgLSBgc2VjLXdlYnNvY2tldC12ZXJzaW9uYAogICAqICAgLSBgdXBncmFkZWAKICAgKgogICAqIElmIGFueSBvZiB0aGVzZSBhcmUgcGFzc2VkIGluIHRoZSBgaGVhZGVyc2AgbWFwIHRoZXkgd2lsbCBiZSBpZ25vcmVkLgogICAqCiAgICogSWYgdGhlIGB1cmxgIGNvbnRhaW5zIHVzZXIgaW5mb3JtYXRpb24gdGhpcyB3aWxsIGJlIHBhc3NlZCBhcyBiYXNpYwogICAqIGF1dGhlbnRpY2F0aW9uIHdoZW4gc2V0dGluZyB1cCB0aGUgY29ubmVjdGlvbi4KICAgKi8KICBzdGF0aWMgRnV0dXJlPFdlYlNvY2tldD4gY29ubmVjdChTdHJpbmcgdXJsLAogICAgICAgICAge0l0ZXJhYmxlPFN0cmluZz4gcHJvdG9jb2xzLAogICAgICAgICAgTWFwPFN0cmluZywgZHluYW1pYz4gaGVhZGVycywKICAgICAgICAgIENvbXByZXNzaW9uT3B0aW9ucyBjb21wcmVzc2lvbjoKICAgICAgICAgICAgICBDb21wcmVzc2lvbk9wdGlvbnMuY29tcHJlc3Npb25EZWZhdWx0fSkgPT4KICAgICAgX1dlYlNvY2tldEltcGwuY29ubmVjdCh1cmwsIHByb3RvY29scywgaGVhZGVycywgY29tcHJlc3Npb246IGNvbXByZXNzaW9uKTsKCiAgQERlcHJlY2F0ZWQoJ1RoaXMgY29uc3RydWN0b3Igd2lsbCBiZSByZW1vdmVkIGluIERhcnQgMi4wLiBVc2UgYGltcGxlbWVudHNgJwogICAgICAnIGluc3RlYWQgb2YgYGV4dGVuZHNgIGlmIGltcGxlbWVudGluZyB0aGlzIGFic3RyYWN0IGNsYXNzLicpCiAgV2ViU29ja2V0KCk7CgogIC8qKgogICAqIENyZWF0ZXMgYSBXZWJTb2NrZXQgZnJvbSBhbiBhbHJlYWR5LXVwZ3JhZGVkIHNvY2tldC4KICAgKgogICAqIFRoZSBpbml0aWFsIFdlYlNvY2tldCBoYW5kc2hha2UgbXVzdCBoYXZlIG9jY3VycmVkIHByaW9yIHRvIHRoaXMgY2FsbC4gQQogICAqIFdlYlNvY2tldCBjbGllbnQgY2FuIGF1dG9tYXRpY2FsbHkgcGVyZm9ybSB0aGUgaGFuZHNoYWtlIHVzaW5nCiAgICogW1dlYlNvY2tldC5jb25uZWN0XSwgd2hpbGUgYSBzZXJ2ZXIgY2FuIGRvIHNvIHVzaW5nCiAgICogW1dlYlNvY2tldFRyYW5zZm9ybWVyLnVwZ3JhZGVdLiBUbyBtYW51YWxseSB1cGdyYWRlIGFuIFtIdHRwUmVxdWVzdF0sCiAgICogW0h0dHBSZXNwb25zZS5kZXRhY2hTb2NrZXRdIG1heSBiZSBjYWxsZWQuCiAgICoKICAgKiBbcHJvdG9jb2xdIHNob3VsZCBiZSB0aGUgcHJvdG9jb2wgbmVnb3RpYXRlZCBieSB0aGlzIGhhbmRzaGFrZSwgaWYgYW55LgogICAqCiAgICogW3NlcnZlclNpZGVdIG11c3QgYmUgcGFzc2VkIGV4cGxpY2l0bHkuIElmIGl0J3MgYGZhbHNlYCwgdGhlIFdlYlNvY2tldCB3aWxsCiAgICogYWN0IGFzIHRoZSBjbGllbnQgYW5kIG1hc2sgdGhlIG1lc3NhZ2VzIGl0IHNlbmRzLiBJZiBpdCdzIGB0cnVlYCwgaXQgd2lsbAogICAqIGFjdCBhcyB0aGUgc2VydmVyIGFuZCB3aWxsIG5vdCBtYXNrIGl0cyBtZXNzYWdlcy4KICAgKgogICAqIElmIFtjb21wcmVzc2lvbl0gaXMgcHJvdmlkZWQsIHRoZSBbV2ViU29ja2V0XSBjcmVhdGVkIHdpbGwgYmUgY29uZmlndXJlZAogICAqIHRvIG5lZ290aWF0ZSB3aXRoIHRoZSBzcGVjaWZpZWQgW0NvbXByZXNzaW9uT3B0aW9uc10uIElmIG5vbmUgaXMgc3BlY2lmaWVkCiAgICogdGhlbiB0aGUgW1dlYlNvY2tldF0gd2lsbCBiZSBjcmVhdGVkIHdpdGggdGhlIGRlZmF1bHQgW0NvbXByZXNzaW9uT3B0aW9uc10uCiAgICovCiAgZmFjdG9yeSBXZWJTb2NrZXQuZnJvbVVwZ3JhZGVkU29ja2V0KFNvY2tldCBzb2NrZXQsCiAgICAgIHtTdHJpbmcgcHJvdG9jb2wsCiAgICAgIGJvb2wgc2VydmVyU2lkZSwKICAgICAgQ29tcHJlc3Npb25PcHRpb25zIGNvbXByZXNzaW9uOiBDb21wcmVzc2lvbk9wdGlvbnMuY29tcHJlc3Npb25EZWZhdWx0fSkgewogICAgaWYgKHNlcnZlclNpZGUgPT0gbnVsbCkgewogICAgICB0aHJvdyBuZXcgQXJndW1lbnRFcnJvcigiVGhlIHNlcnZlclNpZGUgYXJndW1lbnQgbXVzdCBiZSBwYXNzZWQgIgogICAgICAgICAgImV4cGxpY2l0bHkgdG8gV2ViU29ja2V0LmZyb21VcGdyYWRlZFNvY2tldC4iKTsKICAgIH0KICAgIHJldHVybiBuZXcgX1dlYlNvY2tldEltcGwuX2Zyb21Tb2NrZXQoCiAgICAgICAgc29ja2V0LCBwcm90b2NvbCwgY29tcHJlc3Npb24sIHNlcnZlclNpZGUpOwogIH0KCiAgLyoqCiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbi4KICAgKi8KICBpbnQgZ2V0IHJlYWR5U3RhdGU7CgogIC8qKgogICAqIFRoZSBleHRlbnNpb25zIHByb3BlcnR5IGlzIGluaXRpYWxseSB0aGUgZW1wdHkgc3RyaW5nLiBBZnRlciB0aGUKICAgKiBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCB0aGlzIHN0cmluZyByZWZsZWN0cyB0aGUKICAgKiBleHRlbnNpb25zIHVzZWQgYnkgdGhlIHNlcnZlci4KICAgKi8KICBTdHJpbmcgZ2V0IGV4dGVuc2lvbnM7CgogIC8qKgogICAqIFRoZSBwcm90b2NvbCBwcm9wZXJ0eSBpcyBpbml0aWFsbHkgdGhlIGVtcHR5IHN0cmluZy4gQWZ0ZXIgdGhlCiAgICogV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgdGhlIHZhbHVlIGlzIHRoZSBzdWJwcm90b2NvbAogICAqIHNlbGVjdGVkIGJ5IHRoZSBzZXJ2ZXIuIElmIG5vIHN1YnByb3RvY29sIGlzIG5lZ290aWF0ZWQgdGhlCiAgICogdmFsdWUgd2lsbCByZW1haW4gWzpudWxsOl0uCiAgICovCiAgU3RyaW5nIGdldCBwcm90b2NvbDsKCiAgLyoqCiAgICogVGhlIGNsb3NlIGNvZGUgc2V0IHdoZW4gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGNsb3NlZC4gSWYKICAgKiB0aGVyZSBpcyBubyBjbG9zZSBjb2RlIGF2YWlsYWJsZSB0aGlzIHByb3BlcnR5IHdpbGwgYmUgWzpudWxsOl0KICAgKi8KICBpbnQgZ2V0IGNsb3NlQ29kZTsKCiAgLyoqCiAgICogVGhlIGNsb3NlIHJlYXNvbiBzZXQgd2hlbiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgY2xvc2VkLiBJZgogICAqIHRoZXJlIGlzIG5vIGNsb3NlIHJlYXNvbiBhdmFpbGFibGUgdGhpcyBwcm9wZXJ0eSB3aWxsIGJlIFs6bnVsbDpdCiAgICovCiAgU3RyaW5nIGdldCBjbG9zZVJlYXNvbjsKCiAgLyoqCiAgICogQ2xvc2VzIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4gU2V0IHRoZSBvcHRpb25hbCBbY29kZV0gYW5kIFtyZWFzb25dCiAgICogYXJndW1lbnRzIHRvIHNlbmQgY2xvc2UgaW5mb3JtYXRpb24gdG8gdGhlIHJlbW90ZSBwZWVyLiBJZiB0aGV5IGFyZQogICAqIG9taXR0ZWQsIHRoZSBwZWVyIHdpbGwgc2VlIFtXZWJTb2NrZXRTdGF0dXMuTk9fU1RBVFVTX1JFQ0VJVkVEXSBjb2RlCiAgICogd2l0aCBubyByZWFzb24uCiAgICovCiAgRnV0dXJlIGNsb3NlKFtpbnQgY29kZSwgU3RyaW5nIHJlYXNvbl0pOwoKICAvKioKICAgKiBTZW5kcyBkYXRhIG9uIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4gVGhlIGRhdGEgaW4gW2RhdGFdIG11c3QKICAgKiBiZSBlaXRoZXIgYSBgU3RyaW5nYCwgb3IgYSBgTGlzdDxpbnQ+YCBob2xkaW5nIGJ5dGVzLgogICAqLwogIHZvaWQgYWRkKC8qU3RyaW5nfExpc3Q8aW50PiovIGRhdGEpOwoKICAvKioKICAgKiBTZW5kcyBkYXRhIGZyb20gYSBzdHJlYW0gb24gV2ViU29ja2V0IGNvbm5lY3Rpb24uIEVhY2ggZGF0YSBldmVudCBmcm9tCiAgICogW3N0cmVhbV0gd2lsbCBiZSBzZW5kIGFzIGEgc2luZ2xlIFdlYlNvY2tldCBmcmFtZS4gVGhlIGRhdGEgZnJvbSBbc3RyZWFtXQogICAqIG11c3QgYmUgZWl0aGVyIGBTdHJpbmdgcywgb3IgYExpc3Q8aW50PmBzIGhvbGRpbmcgYnl0ZXMuCiAgICovCiAgRnV0dXJlIGFkZFN0cmVhbShTdHJlYW0gc3RyZWFtKTsKCiAgLyoqCiAgICogU2VuZHMgYSB0ZXh0IG1lc3NhZ2Ugd2l0aCB0aGUgdGV4dCByZXByZXNlbnRlZCBieSBbYnl0ZXNdLgogICAqCiAgICogVGhlIFtieXRlc10gc2hvdWxkIGJlIHZhbGlkIFVURi04IGVuY29kZWQgVW5pY29kZSBjaGFyYWN0ZXJzLiBJZiB0aGV5IGFyZQogICAqIG5vdCwgdGhlIHJlY2VpdmluZyBlbmQgd2lsbCBjbG9zZSB0aGUgY29ubmVjdGlvbi4KICAgKi8KICB2b2lkIGFkZFV0ZjhUZXh0KExpc3Q8aW50PiBieXRlcyk7CgogIC8qKgogICAqIEdldHMgdGhlIHVzZXIgYWdlbnQgdXNlZCBmb3IgV2ViU29ja2V0IGNvbm5lY3Rpb25zLgogICAqLwogIHN0YXRpYyBTdHJpbmcgZ2V0IHVzZXJBZ2VudCA9PiBfV2ViU29ja2V0SW1wbC51c2VyQWdlbnQ7CgogIC8qKgogICAqIFNldHMgdGhlIHVzZXIgYWdlbnQgdG8gdXNlIGZvciBXZWJTb2NrZXQgY29ubmVjdGlvbnMuCiAgICovCiAgc3RhdGljIHNldCB1c2VyQWdlbnQoU3RyaW5nIHVzZXJBZ2VudCkgewogICAgX1dlYlNvY2tldEltcGwudXNlckFnZW50ID0gdXNlckFnZW50OwogIH0KfQoKY2xhc3MgV2ViU29ja2V0RXhjZXB0aW9uIGltcGxlbWVudHMgSU9FeGNlcHRpb24gewogIGZpbmFsIFN0cmluZyBtZXNzYWdlOwoKICBjb25zdCBXZWJTb2NrZXRFeGNlcHRpb24oW3RoaXMubWVzc2FnZSA9ICIiXSk7CgogIFN0cmluZyB0b1N0cmluZygpID0+ICJXZWJTb2NrZXRFeGNlcHRpb246ICRtZXNzYWdlIjsKfQqB8wBOTjwBFAEERAQhKSUpKygsKzMrKTUvKAErMycrKzMtNyoxLjotNzVJLTcrNDdMMUAqMQIBNgRNTgROTzUbNQZOUBAGKSlNTTciMEABJAZIEzMwLDgBPyYBPyYBQQZMOwZOTBshAUEGTDsGTkwbIQEwBkNRLhYBHC0sICAdAUsYBk1RUSJRMAENESk5Bhg2QA8qHkkjPiII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gwHAAJBigwaEXIL0mJ2DCACCLoTFgwqYmYMLJ4MLwACQYoMNKIMLKYMLhMuDC4TMgwuEzYMLhM6DC4TPgwqYl4MVI4MKmJ2DFwCCLoTQgxmYmYMahNGDGoTSgxqE04MahGODGoC9gxqE1IMahNWDGoTWgxqE14MahNiDGoTZgxqEfoMahGGDGoS+gxqE2oMahNuDGoTcgxqEhYMahN2DGoSEgxqE3oMawACQYoMwhN+DMITggzCE4YMZmJqDNIQagzSE44M0hOKDNITkgzSE5YM0hOyDNITtgzSE7oM0hO+DNITwgzSE8YM0hPKDNISOgzSE84M0hKuDNIT3gzSE+IM0hPmDNIT6gzSEwoM0hPuDGZibg0qEGoNKhOODSoTig0qE5INKhOWDGZiXg1CE5oNQhJmDUISQg1CEZINQhE2DUIT1g1Ajg1CEToNQhFSDUMAAkGKDWoRcgxmYnYNcAIIuhP2DXpiZg1+E0oNfhGODX4C9g1+EYYNfhP6DXpiag2WE/4NlhKuDZYT3g2WEGoNlhB2DZYUAg2WFAYNlhQKDZYQfg2WCaoNlhQODZYUEg2WFBYNemJeDc4RNg3OE9YNzI4NzhGSDXpibg3iEH4NemJ2DegCCLoUGg3yYmYN9gpCDfYR+g32FB4N9hQiDfYUJg32FCoN9hQuDfYUMg32FDYN9hQ6DfJiag4iEIIOIhBuDiIQdg4iEGYOIhQ+DiIUQg4iFEYOIhRKDiIUCg4iFAIOIhQGDiIQfg4iFA4OIhQSDfJibg5eEIIOXhBuDl4Qdg5eEGYOXhQ+Dl4UQg5eFEYOXhB+DfJiXg6CETYOghPWDoIROg6CEVIOgwACQYoOlhFyDfJidg6cAgi6FFoOpmJmDqoTRg6qEfoOqgmqDqoUXg6qFCYOqhRiDqoUZg6mYmoOyhB2DsoQfg7KEjYOyhQKDsoUAg7KFAYOyhQODsoUEg6mYm4O7hB2Du4Qfg7uEjYOpmJeDv4RNg7+E9YO/hE6Dv4RUg7/AAJBig8SEXIOpmJ2DxgCCLoUcg8iYmYPJhH6DyYUdg8mFHoPJhL6DyYTAg8mFH4PJhMGDyYUJg8mFGIPImJqD04Qdg9OEH4PThQKD04UAg9OFAYPThSCD04JFg9OFA4PThQSDyJibg92EHYPdhB+D3YJFg8iYl4PhhE2D4YT1g+GEToPhhFSD4cAA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9YJki/SYnYv6AIvbh+KL/JiZi/2BxYv8mJeL/yOL/JidjAEAAMAAkGqMA5iZjASIq4wDgg2MBpiZjAd6jAeG2owHiJiMB4DPjAeImYwHiJqMBpiajA6CT4wOXowOiKWMDoCGjAaYl4wTiJuME4HDjBOIAYwTh/mME4icjBOH/owTiJ2ME4imjBOIqYwTiKqME4JCjAaYnYwfAADAAJBrjCGYmIwiiLCMIZiZjCSH1owkiMWMJIjHjCSIyowkiM6MJIjPjCSI04wkiNSMJIjWjCSI2YwkiNuMJIjdjCSI34wkiOKMJIjmjCSI54wkiOqMJIjrjCSI7owkiPGMJIjzjCSI9owkiPmMJIj6jCSI/YwkiP6MJIkCjCSJA4wkiQiMJIkJjCSJDYwkiQ6MJIkQjCSJEowkiRWMJIkYjCSJG4wkiR2MJIkfjCSJIYwkiSWMJIkmjCSJKIwkiSqMJIktjCSJMIwkiTKMJIk1jCSJOIwkiTmMJIk8jCSJPYwkiT+MJIlBjCSJRYwkiUaMJIlKjCSH14wkiUuMJIlNjCSJUIwkiVGMJIlVjCSJVowkh9KMJIlXjCSH04wkiViMJIlbjCSJXowkiWGMJIlkjCSJZowkh9iMJIlojCSJa4wkiW2MJIlwjCSJc4wkiXaMJIl6jCSJe4wkiX+MJImAjCSJhIwkiYWMJImHjCSJiIwkiYyMJImNjCSJkYwkiZKMJImVjCSJmIwkiZuMJImdjCSJn4wkiaKMJImkjCSJpowkiaiMJImrjCSJrIwkia6MJImwjCSJsowkibOMJIm1jCSJt4wkibqMJIm9jCSJvowkicKMJInDjCSJx4wkiciMJInMjCSJzYwkidCMJInRjCSJ1IwkidWMJInajCSJ24wkid+MJIngjCSJ44wkieSMJInnjCSJ6IwkieqMJIntjCSJ74wkifKMJIn0jCSJ94wkifmMJIn8jCSKAIwkigGMJIoDjCSKBYwkigeMJIoJjCSKC4wkig2MJIoPjCSKEYwkihOMJIoWjCSKGIwkihqMJIocjCSKH4wkiiGMJIokjCSKJowkiiiMJIoqjCSKLIwkii6MJIoxjCSKM4wkijWMJIo3jCSKOowkijyMJIo/jCSKQ4wkikSMJIpIjCSKSYwkikyMJIpNjCSKUIwkilGMJIpTjCSKVowkilqMJIpbjCSKYIwkimGMJIpkjCSKZ4wkimyMJIptjCSKcYwkinKMJIp3jCSKeIwkinqMJIp9jCSKgYwkioKMJIqGjCSKh4wkioyMJIqNjCSKkYwkipKMJIqWjCSKl4wkipmMJIqbjCSKn4wkiqCMJIqkjCSKpYwkiqeMJIqpjCSKrYwkiq6MJIqwjCSKsowkiraMJIq3jCSKu4wkiryMJIq/jCSKwowkisSMJIrHjCSKyYwkisyMJIrOjCSK0YwkitWMJIrWjCSK2YwkitqMJIrdjCSK4IwkiuSMJIrljCSK54wkiuqMJIrsjCSK7owkivGMJIr0jCSK9owkiviMJIr6jCSK/IwkiwCMJIsBjCSLBYwkiwaMJIsJjCSLC4wkiw+MJIsQjCSLEowkixWMJIsXjCSLGYwkixuMJIsdjCSLH4wkiyGMJIsjjCSLJowkiyeMJIspjCSLK4wkiy2MJIsujCSLMYwkizOMJIs2jCSLOIwkizqMJIs8jCSLP4wki0GMJItDjCSLRowki0iMJItKjCSLTYwki0+MJItRjCSLU4wki1aMJItYjCSLWowki1yMJItejCSLY4wki2SMJItojCSLaYwki2yMJIttjCSLb4wki3KMJIt2jCSLd4wki3uMJIt8jCSLgIwki4GMJIuFjCSLhowki4iMJIuLjCSLjowki4+MJIuTjCSLlIwki5iMJIuZjCSLm4wki5yMJIuejCSLoIwki6KMJIuljCSLqIwki6qMJIusjCSLr4wki7KMJIuzjCSLtowki7mMJIu7jCSLvYwki8GMJIvCjCSLxIwki8aMJIvIjCSLyowki86MJIvPjCSL0owki9OMJIvWjCSL14wki9qMJIvbjCSL3Ywki+CMJIvijCSL5Iwki+aMJIvpjCSL7Iwki+2MJIvwjCSL8owki/aMJIv3jCSL+Ywki/uMJIv+jCSL/4wkjAGMJIwEjCSMBowkjAmMJIwNjCSMDowkjBKMJIwTjCSMGIwkjBmMJIwcjCSMHYwkjCGMJIwijCSMJowkjCeMJIwqjCSMK4wkjC6MJIwvjCSMMowkjDOMJIw2jCSMOIwkjDyMJIw9jCSMQYwkjEKMJIxEjCSMRowkjEmMJIxKjCSMTYwkjE6MJIxQjCSMUowkjFSMJIxWjCSMWIwkjFqMJIxcjCSMXowkjGCMJIxijCSMZIwkjGaMJIxojCSMaowkjGyMJIxujCSMcIwkjHKMJIx0jCSMdowkjHiMJIx6jCSMfowkjH+MJIyDjCSMhIwkjIiMJIyJjCSMjYwkjI6MJIyRjCSMlIwkjJeMJIyajCSMnIwkjJ6MJIygjCSMo4wkjKWMJIynjCSMqowkjK2MJIywjCSMsYwkjLSMJIy1jCSMt4wkjLqMJIy/jCSMwIwkjMSMJIzFjCSMyowkjMuMJIzPjCSM0IwkjNSMJIzVjCSM2IwkjNuMJIzfjCSM4IwkjOKMJIzljCSM6owkjOuMJIzujCSM74wkjPOMJIz0jCSM94wkjPiMJIz8jCSM/YwkjP+MJI0CjCSNBIwkjQeMJI0JjCSNC4wkjQ2MJI0PjCSNE4wkjRSMJI0XjCSNGIwkjRyMJI0djCSNIYwkjSKMJI0mjCSNJ4wkjSqMJI0rjCSNLowkjTGMJI00jCSNN4wkjTqMJI09jCSNP4wkjUGMJI1FjCSNRowkjUiMJI1KjCSNTIwkjU+MJI1SjCSNVYwkjVeMJI1ZjCSNW4wkjV2MJI1gjCSNYowkjWSMJI1mjCSNaIwkjWqMJI1sjCSNbowkjXGMJI1yjCSNdIwkjXaMJI16jCSNe4wkjX6MJI1/jCSNgowkjYOMJI2FjCSNh4wkjYmMJI2LjCSNjYwkjY+MJI2RjCSNk4wkjZeMJI2YjCSNmowkjZ2MJI2fjCSNoowkjaWMJI2ojCSNq4wkh9mMJI2sjCSNrowkjbGMJI20jCSNtowkjbiMJI27jCSNvIwkjb+MJI3AjCSNwowkjcSMJI3GjCSNyIwkjcqMJI3MjCSNz4wkjdCMJI3TjCSN1IwkiJeMJI3VjCSN14wkjdmMJI3bjCSN3Ywkjd+MJI3hjCSN5IwkjeWMJI3njCSN6Ywkh9SMJI3qjCSN7Iwkje6MJI3wjCSN8owkjfSMJI32jCSN+IwkjfqMJI38jCSH2owkjf6MJI4AjCSOAowkjgSMJI4GjCSOCIwkjgyMJI4NjCSOEIwkjhKMJI4UjCSOF4wkjhuMJI4cjCSOHowkjiCMJI4jjCSOJowkjimMJI4sjCSOL4wkjjKMJI41jCSOOIwkjjuMJI4+jCSOQYwkjkSMJI5HjCSOSowkjkyMJI5OjCSOUowkjlOMJI5XjCSOWIwkjlqMJI5cjCSOX4wkjmCMJI5jjCSOZIwkjmmMJI5qjCSObIwkjm6MJI5wjCSOcowkjnWMJI52jCSOe4wkjnyMJI5/jCSOgIwkjoOMJI6EjCSOiYwkjoqMJI6OjCSOj4wkjpGMJI6UjCSOl4wkjpmMJI6djCSOnowkjqKMJI6jjCSOpowkjqiMJI6sjCSOrYwkjq+MJI6xjCSOs4wkjrWMJI65jCSOuowkjr2MJI6+jCSOwowkjsOMJI7FjCSOyIwkjsuMJI7MjCSO0IwkjtGMJI7UjCSO1YwkjtmMJI7ajCSO3Iwkjt6MJI7jjCSO5IwkjuiMJI7pjCSO7owkju+MJI7xjCSO84wkjvaMJI75jCSH1YwkjvqMJIIOjCSO+4wkjwCMJI8BjCSPBYwkjwaMJI8IjCSPC4wkjw+MJI8QjCSPFYwkjxaMJI8YjCSPG4wkjx2MJI8gjCSPI4wkjyWMJI8pjCSPKowkjy6MJI8vjCSPNIwkjzWMJI85jCSPOowkjz6MJI8/jCSPQ4wkj0SMJI9IjCSPSYwkj0uMJI9NjCSPUYwkj1KMJI9VjCSPV4wkj1mMJI9cjCSPX4wkj2CMJI9jjCSPZYwkj2eMJI9pjCSPbYwkj26MJI9xjCSPcowkj3aMJI93jCSPeowkj3uMJI+AjCSPgYwkj4OMJI+FjCSPh4wkj4mMJI+MjCSPjYwkj4+MJI+SjCSPlIwkj5aMJI+ZjCSPmowkj52MJI+ejCSPoIwkj6KMJI+kjCSPpowkj6mMJI+qjCSPrYwkj66MJI+xjCSPsowkj7aMJI+3jCSPuowkj72MJI+/jCSPwYwkj8OMJI/GjCSPyIwkj8qMJI/NjCSPzowkj9CMJI/SjCSP1Iwkj9eMJI/ZjCSP3Iwkj96MJI/gjCSP4owkj+WMJI/ojCSP6owkj+2MJI/vjCSP8Ywkj/SMJI/2jCSH24wkj/iMJI/6jCSP/owkj/+MJJACjCSQA4wkkAeMJJAIjCSQC4wkkAyMJJAPjCSQEowkkBSMJJAXjCSQGowkkBuMJJAfjCSQIIwkkCSMJJAljCSQKIwkkCmMJJArjCSQLYwkkDCMJJAzjCSQN4wkkDiMJJA6jCSQPYwkkECMJJBBjCSQRIwkkEWMJJBIjCSQSYwkkEyMJJBNjCSQUIwkkFKMJJBWjCSQV4wkkFuMJJBcjCSQYYwkkGKMJJBnjCSQaIwkkGyMJJBtjCSQcYwkkHKMJJB2jCSQd4wkkHqMJJB8jCSQgIwkkIGMJJCDjCSQhowkkIuMJJCMjCSQkIwkkJGMJJCVjCSQlowkkJmMJJCajCSQnowkh9yMJJCfjCSH3YwkkKGMJIfejCSQo4wkkKWMJJCojCSQqYwkkKyMJJCtjCSQr4wkkLKMJJC2jCSQt4wkkLuMJJC8jCSQvowkkMCMJJDCjCSQxIwkkMeMJJDIjCSQyowkkM2MJJDQjCSQ0YwkkNOMJJDWjCSQ2IwkkNuMJJDdjCSQ34wkkOGMJJDjjCSQ54wkkOiMJJDsjCSQ7YwkkPCMJJDxjCSQ9YwkkPaMJJD5jCSQ+owkkP+MJJEAjCSRA4wkkQSMJJEIjCSRCYwkkQ2MJJEOjCSREIwkkRSMJJEWjCSRGYwkkRuMJJEejCSRIIwkkSOMJJEljCSRKIwkkSqMJJEsjCSRL4wkkTCMJJEyjCSRNYwkkTeMJJE5jCSRPYwkkT6MJJFAjCSRQ4wkkUaMJJFHjCSRS4wkkUyMJJFQjCSRUYwkkVSMJJFVjCSRV4wkkVqMJJFejCSRX4wkkWOMJJFkjCSRZowkkWmMJJFrjCSRbowkkXGMJJFzjCSRd4wkkXiMJJF8jCSRfYwkkX+MJJGCjCSRhYwkkYeMJJGLjCSRjIwkkY6MJJGRjCSRk4wkkZWMJJGXjCSRmYwkkZyMJJGdjCSRn4wkkaGMJJGljCSRpowkkamMJJGqjCSRrowkka+MJJGzjCSRtIwkkbiMJJG5jCSRvIwkkb6MJJHBjCSRw4wkkcaMJJHIjCSRzYwkkc6MJJHQjCSR04wkkdWMJJHXjCSR2YwkkduMJJHdjCSR34wkkeGMJJHkjCSR6IwkkemMJJHtjCSR7owkkfCMJJHzjCSR9owkkfeMJJH5jCSR+4wkkf2MJJH/jCSSAowkkgOMJJIHjCSSCIwkkgyMJJINjCSSEIwkkhKMJJIWjCSSF4wkkhqMJJIbjCSSH4whmJeQNIJAkDSSIJA0wACQa5A3kiKQN5ImkDeSKZA3kiuQN5I2kDeSOpA3kkKQN5JGkDeSS5A3kk6QN5JQkDeSU5A3kleQN5JakDeSXJA3kl+QN5JikDeSZZA3kmeQN5JrkDeSbZA3km+QN5J1kDeSeJA3knqQN5J8kDeSfpA3kn+QN5KBkDeSgpA3koSQN5KFkDeSi5A3ko6QN5KQkDeSkpA3kpWQN5KakDeSnZA3kqGQN5KkkDeSp5A3kqqQN5KskDeSr5A3krCQN5KzkDeStpA3krmQN5K7kDeSvpA3ksCQN5LCkDeSxJA3kseQN5LKkDeSzJA3ks6QN5LRkDeS1JA3kteQN5LZkDeS35A3ku+QN5LxkDeS9JA3kvaQN5L4kDeS+pA3kvyQN5MAkDeTAZA3kwOQN5MEkDeTB5A3kwmQN5MLkDeTDZA3kxCQN5MTkDeTFZA3kxeQN5MZkDeTG5A3kx6QN5MhkDeTI5A3kyWQN5MokDeTKpA3kyyQN5MukDeTMJA3kzKQN5M0kDeTNpA3kziQN5M7kDeTP5A3k0GQN5NDkDeTRpA3k0iQN5NKkDeTTJA3k0+QN5NRkDeTU5A3k1WQN5NYkDeTW5A3k2GQN5NlkDeTaJA3k2uQN5NtkDeTb5A3k3GQN5NzkDeTdpA3k3iQN5N7kDeTfZA3k3+QN5OBkDeThJA3k4aQN5OKkDeTjJA3k4+QN5OSkDeTlZA3k5iQN5OckDeTnpA3k6OQN5OlkDeTppA3k6eQN5OokDeTqpA3k66QN5OwkDeTtJA3k7aQN5O4kDeTu5A3k8GQN5PDkDeTxpA3k8iQN5PLkDeTzZA3k9CQN5PSkDeT1JA3k9WQN5PXkDeT2ZA3k9yQN5PekDeT4JA3k+KQN5PkkDeT55A3k+mQN5PskDeT7pA3k++QN5PykDeT9JA3k/aQN5P4kDeT+5A3k/2QN5P/kDeUAZA3lAKQN5QFkDeUB5A3lAmQN5QLkDeUDpA3lBGQN5QTkDeUFZA3lBiQN5QakDeUH5A3lCGQN5QkkDeUKJA3lCqQN5QskDeUMJA3lDKQN5Q5kDeUO5A3lD2QN5RAkDeUQ5A3lEWQN5RHkDeUSZA3lEyQN5ROkDeUUJA3lFKQN5RVkDeUV5A3lFmQN5RckDeUXpA3lGaQN5RskDeUb5A3lHGQN5RzkDeUeJA3lHyQN5R/kDeUgJA3lIKQN5SFkDeUh5A3lImQN5SLkDeUjZA3lI+QN5SRkDeUlZA3lJeQN5SakDeUnZA3lKCQN5SjkDeUpZA3lKeQN5SqkDeUrJA3lK6QN5SwkDeUs5A3lLWQN5S3kDeUupA3lLyQN5S/kDeUw5A3lMeQN5TKkDeUzJA3lM6QN5TQkDeU0ZA3lNOQN5TXkDeU2ZA3lNyQN5TekDeU4ZA3lOOQN5TkkDeU5pA3lOmQN5TrkDeU7Ywhh62RQ5iZkUSAvZFEJ5FEiLGRRIiykUSHspFDmJeRSiORQ5idkUwAjCGH0ZFOmJmRT4KTkU8ikU+IopFPW5FOmJeRVIJbkVSIApFOmJ2RVwCMIYizkVmYmZFaIpFaiKKRWZiakV1bkV2Ck5FZmJeRYIJbkWCIApFZmJ2RYwCMIYi0kWWYmZFmiLWRZoi2kWaIC5FlmJ2RagCMIYIlkWyYmZFtgKyRbYdUkW1hkW2It5FsmJqRcoKTkXIikXKIopFyW5FsmJeRd4JLkXeH/ZFsmJ2RegCMIYevkXyYmZF9iLiRfYf6kX2B+pF9humRfYeykX2HtpF8mJqRhIKTkYQikYSIopGEW5GEgKyRhIdUkYRhkYSHsJGEh7GRfJiXkY6IvJGOiIyRfJidkZEAjCGHrpGTmJmRlIewkZSHsZGUh7KRlICskZOYnJGZiL+Rk5iXkZuIvJGbiIyRk5idkZ4AAMAAkGyRoJiZkaGU9JGhlPuRoZT8kaGVAZGggg+RppiZkacnkafAAJBskakokacpkaeCU5GngcWRp5TykaeB75GnlPORp4NxkaaYl5GyI5GmmJ2RtAAAwACQbZG2mJeRt5UOkbeCEJG2lQuRupiZkbuBgpG7glWRu5UMkbuVDZG6mJ2RwAAAwACQbpHCmJiRw5U5kcKYmZHFlUGRwpiXkceVQpHHlUeRx8AAkG6RypVJkcKVO5HMmJqRzZU8kc2HDZHMmJuR0JU9kcyYl5HSlT+RzJidkdQAkcKVQJHWmJmR15U6kdeHDZHXlTyR1pidkdsAAMAAkG+R3ZiZkd6VW5HdmJeR4IJlkeCVXpHglV+R3ZVOkeSYmpHlgkWR5ZVRkeWFIJHlhR2R5JiXkeqVU5HqlVSR6pVVkeqVWJHkmJ2R75VPke8Ake+VUJHdlVqR85iZkfSCRZH0hR2R85idkfcAAMAAkHCR+ZiXkfqVb5H5ghWR/JiZkf16kf2CTZH9lWuR/ZVskfyYnZICAJH5lW2SBJiZkgWVbpIFglWSBZUYkgSYnZIJAADAAJBxkguYl5IMghaSDIIXAMAAkHKSD5iXkhCCIpIQlXGSEJVzAMAAkHOSFIeTkhWYmZIWlXeSFZiXkhiHxZIVmJ2SGsAAkHOSG4C1khSVeZIdmJmSHoCskh2YmpIgg8GSHZiXkiJIkiKDm5Iih8aSIofHkiLAAJBzkieVepIdmJ2SKQCSFIIjkiuYmZIsgKySK5iaki6DwZIrmJeSMEiSMIObkjCHxpIwh8eSK5idkjUAAMAAkHSSN5iXkjiCJJI4lYOSOJWKAMAAkHWSPJiXkj2CJpI9lbaSPZW3kjyFQpJBmJmSQieSQsAAkHWSRCiSQimSQlaSQpWhkkKVopJClaOSQpWkkkKVpZJClaaSQpWnkkKVqJJClamSQpWqkkKVq5JClaySQpWtkkKVrpJCla+SQpWwkkKHu5JClbGSQpWykkKVs5JBmJeSXCOSQZidkl4AAMAAkHaSYIInkmGYmZJiJ5JiwACQdpJkKJJiKZJihWaSYoVnkmKFaJJihWmSYZiXkmsjkmGYnZJtAADAAJB3km+YmZJwlb6ScJW/knCVwJJwgjaScIIzknCVwZJwlcKScIIvknCVw5JwlcSScIIxknCCMpJwgiqScJXFknCVxpJwlceScJXIknCVyZJwlcqScJXLknCVzJJwlc2ScJXOknCVz5JwgiuScJXQknCV0ZJwldKScJXTknCV1JJwldWScJXWknCV15JwgiyScJXYknCV2ZJwldqScJXbknCV3JJwld2ScJXeknCCLZJwld+ScJXgknCV4ZJwleKScJXjknCV5JJwleWScJXmknCV55JwleiScJXpknCV6pJwleuScJXsknCV7ZJwle6ScJXvknCV8JJwlfGScJXyknCV85JwlfSScJX1knCV9pJwgjeScJX3knCCLpJwlfiScJX5knCCOJJwlfqScII5knCV+5JwlfyScJX9knCV/pJwlf+ScII6knCWAJJwlgGScJYCknCWA5JwlgSScJYFknCWBpJwlgeScJYIknCWCZJwlgqScII7knCWC5JwlgyScJYNknCWDpJwlg+ScJYQknCCPJJwlhGScJYSknCWE5JwlhSScIIwknCWFZJwgjSScII1knCWFpJwlheScJYYkm+Yl5LflhmS35Ybkt+WHJLflh6S35Yfkt+WIADAAJB4kuaCPZLnmJqS6IPqkuiD65LoXJLogVWS6IOykuiDwZLoYZLogMOS6IMZkuiB6JLnmJeS84PokvOELJLzgK2S84CrkvOWK5LzliyS85YtkvOWL5Lzg/iS80iS8yOS85YokvODF5LzljaS84HUkvOWOJLzljmS84SPkvOWOpLzg1mS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updFlLqXRpS6l0eUupdIlLqXSpS5lzCUuZUnlLmVEpS5lz2UuZc+lLmXP5S5l0mUuJiXlNzAAJCClN2XS5Tdl4eU3ZeOlN2XfZTdl4+U3ZeTlN2XwpTdl9GU3IbvlNyG8ZTchvOU3IbylNyG9JTchu6U3JdSlNyG9pTcl1qU3JdclNyXXZTcl1+U3Ib4lNyXaJTciESU3JdrlNyXbZTcl2+U3JdxlNyXc5Tcl3WU3Jd3lNyXeZTcl3uU3Ib5lNyXfpTcl3+U3JeAlNyXbpTcl3CU3JdylNyXdJTcl3aU3Jd4lNyXepTcl3yU3JeBlNyXgpTcl4OU3JeFlNyEmZTcl4aU3JeElNyEQJTcl42U3Ib6lNyG/ZTcl5GU3JeUlNyXkpTcl6SU3JeolNyXZJTcl6yU3JeQlNyG9ZTcl2aU3JewlNyXs5Tcl2WU3Ib3lNyEoJTcl7aU3Je3lNyXvJTchLyU3Je4lNyXv5TchMOU3JfBlNyXtZTchPSU3IUalNyFOJTchRSU3IUhlNyFRpTchUmU3IVLlNyFTZTchU+U3IVSlNyFYJTchXiU3IV7lNyFfZTchYiU3IWKlNyFlpTchZiU3IWMlNyFjpTchZqU3IWclNyFppTchaiU3IWQlNyFqpTchayU3IWglNyFopTchbOU3JfJlNyFuJTchb2U3IXBlNyFxpTchcqU3IXQlNyF1pTchdqU3IXelNyF4ZTcheOU3JdilNyF5pTcl2OU3IXolNyF6pTche2U3IXvlNyF8ZTchfOU3IX1lNyF95TchfmU3IX7lNyF/ZTchgCU3IYDlNyGCZTchguU3IWwlNyGDpTchhGU3JfQlNyGFJTchhiU3IYblNyGHZTchiGU3IYjlNyGBpTchiWU3IYnlNyGKZTchi2U3IYxlNyGNJTchjmU3IY7lNyGPZTchj+U3IZClNyGRpTchkmU3IZPlNyGV5Tcl8aU3JfAlNyX05TchlmU3IZ4lNyGcZTchnSU3IZ2lNyGfJTchPyU3IaClNyGj5TchpOU3IaMlNyGmZTcl9WU3JfXlNyX2ZTcl9uU3JfdlNyX35Tcl+GU3JfjlNyX5ZTcl+eU3IcLlNyGpZTchqaU3IT2lNyFG5TchquU3IaslNyFFZTchsOU3IbElNyGqJTchqmU3ISxlNyEtJTchr2U3Ia+lNyGwJTchsGU3Ia4lNyG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hkaY4IX9mOCG5JjfmJ2ZQgCYfJpRmUSYl5lFl92ZRYZxmUWGdJlFhnaZRYZ4mUWGfJlFhoKZRYaTmUWGjJlEmJ2ZTwCYfJpSmVGYl5lSl92ZUoZxmVKGdJlShnaZUoZ4mVKGfJlShoKZUoaTmVKGjJlRmJ2ZXACYfJpTmV6Yl5lfl9eZX4aimV+GpZlfhqiZX4armV+Gr5lfhrOZX4a4mV+GvZlfhsCZX4bDmV+GyZlfhtCZX4bTmV+G1plemJ2ZbwCYfJpUmXGYl5lyl9eZcoaimXKGpZlyhqiZcoarmXKGr5lyhrOZcoa4mXKGvZlyhsCZcobDmXKGyZlyhtCZcobTmXKG1plxmJ2ZggCYfJpVmYSYmZmFwACQhZmGmlaZhJiXmYiG1pmIhtOZiIbQmYiGyZmIhsOZiIbAmYiGvZmIhriZiIazmYiGr5mIhquZiIaomYiGpZmIhqKZiJfXmYSYnZmYAJh8mleZmpiZmZvAAJCFmZyaWJmbmlmZmpiXmZ+GB5mfl9eZn4aimZ+GpZmfhqiZn4armZ+Gr5mfhrOZn4a4mZ+GvZmfhsCZn4bDmZ+GyZmfhtCZn4bTmZ+G1pmamJ2ZsACYfJpambKYmZmzwACQhZm0mliZs5pZmbKYl5m3hgeZt5fXmbeGopm3hqWZt4aombeGq5m3hq+Zt4azmbeGuJm3hr2Zt4bAmbeGw5m3hsmZt4bQmbeG05m3htaZspidmcgAmHyaW5nKmJeZy5flmcuFFZnLhRuZy4U5mcuFIpnKmJ2Z0QCYfJpcmdOYl5nUl9WZ1IcLmdSX3ZnUhnGZ1IZ0mdSGdpnUhniZ1IZ8mdSGgpnUhpOZ1IaMmdSX15nUhqKZ1IalmdSGqJnUhquZ1IavmdSGs5nUhriZ1Ia9mdSGwJnUhsOZ1IbJmdSG0JnUhtOZ1IbWmdSE9pnUho2Z1JfbmdSGo5nUhqaZ1IapmdSGrJnUhrCZ1Ia0mdSGuZnUhr6Z1IbBmdSGxJnUhsqZ1IbRmdSG1JnUhteZ1JflmdSFFZnUhRuZ1IU5mdSFIpnUhl6Z1IT8mdSGj5nTmJ2aCACYfJpdmgqYl5oLl9WaCpidmg0AmHyaXpoPmJeaEITEmhCGB5oQhPyaEIcLmg+YnZoVAJh8ml+aF5iXmhiX35oYl9maGIV4mhiFe5oYhX2aGIWImhiFipoYhYyaGIWO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8p2cmJ2dpACdS50GnaaYmZ2nEp2nap2nYZ2nnPKdppidnawAAMAAkJmdrpiZna+dB52vlsCdr5bCna+WxJ2vlsadr5bIna+Wyp2vlsydr5bOna+cl52vnJidrpiXnbuW0J27ltGdu5bSnbuW0527ltSdu5bVnbuW1p27ltedu5bYnbvAAJCZncWdCZ27iJYAwACQmJ3ImJmdyZ4CncmeA53JngSdyZ4FncmeBp3JngedyZ4IncmeCZ3JngqdyZ4LncmeDJ3Jng2dyZ4OncmeD53JnhCdyZ4RncmeEp3JnhOdyJ0OndyYmZ3dnQ+d3JiXnd+c9p3cmJqd4Z0YndyYm53jnRid3JidneUAncic/J3nmJmd6IRSneeYl53qnPad6oRZneeYnZ3tAJ3InRmd75iXnfCc9p3vmJ2d8gCdyJU4nfSYmZ31nRqd9Z0bnfWdHJ31nR2d9Z0enfWdH531nSCd9Z0hnfWdIp31nSOd9Z0knfWdJZ31nSad9Z0nnfWdKJ31nSmd9Z0qnfWdK531nS2d9Z0unfWdL531nTCd9Z0xnfWdMp31nTSd9Z01nfWdNp31nTed9Z04nfWdOZ31nTqd9Z07nfWdPJ31nT2d9Z0+nfWdQJ31nUGd9Z1DnfWdRJ31nUWd9Z1HnfWdSJ31nUmd9Z1KnfWdS531nUyd9Z1NnfWdT531nVGd9Z1SnfWdU531nVSd9Z1VnfWdVp31nVed9Z1YnfWdWZ31nVqd9Z1bnfWdXJ31nV2d9Z1enfWdX531nWCd9Z1hnfWdYp31nWOd9Smd9Z1knfWdZZ31nWad9Jianj2daZ49nWqePYC9nj2da530mJeeQiOeQsAAkJieRJ1snfSYnZ5GAJ3InW6eSJiZnkmdbZ5ImJeeS5z2nkuAlp5ImJqeTpzznk6db55OnXCeSJidnlIAncidcZ5UmJmeVYKQnlWDXJ5VnP2eVYOwnlXAAJCYnlqdcp5UmJqeXJ10nlyHVJ5cnXWeXJ12nlyCjJ5cnRieXJ13nlyc855cnW+eXJ1wnlydZ55cnXmeXISNnlydaJ5cgiieXJ1tnlyCZ55cYZ5cgl6eXJzunlydep5UmJuecp12nnKc7p5UmJeedZz2nnWc9551nXyedZ17nnWc/p51I551gJaedcAAkJiefZ1znlSYnZ5/AJ3IghKegZiZnoLAAJCYnoOXDJ6BmJqehZzznoWCXp6BmJeeiJz2noiAlp6BmJ2eiwCdyJ19no2Yl56OnPaejZianpCEjZ6QYZ6NmJ2ekwCdyJ1+npWYmp6WYZ6VmJeemJz2npWYnZ6aAJ3InPqenJiZnp3AAJCYnp6c+56cmJqeoISNnqBhnpyYl56jnPaenJidnqUAnciRU56nmJmeqJ12nqeYmp6qhI2eqmGep5iXnq2c9p6nmJ2erwCdyIITnrGYmZ6ywACQmJ6zlkiesZicnrUAnrWdgJ6xmJqeuJ10nriHVJ64nXWeuJ12nriCjJ64nRieuJ13nric8564nW+euJ1wnridZ564nXmeuISNnridaJ64giieuJ1tnriCZ564YZ64gl6euIOwnriDXJ64nO6euJz9nridep64gpCesZibntKddp7Sg7Ce0oNcntKc/Z6xmJee15z2ntec957XnXye1517ntec/p7XI57XgJae152Bncidgp7gmJme4Z2DnuGdhJ7hnYWe4Z2GnuGdh57hnYie4Z2JnuGdip7hnYue4Z2MnuGdjZ7hnY6e4Z2PnuGdkJ7hnZGe4Z2SnuGdk57hgL2e4ZnqnuCYl571I57gmJ2e9wCdyJznnvmYmZ76nXie+p2UnvqdlZ76nZee+p2Znvqdmp76nZue+p0BnvqdnJ76nZ2e+p2envqdn576naGe+p2jnvqdpJ76naWe+p2mnvqdqJ76name+p2qnvqdrJ76na6e+p2vnvqdsJ76nbGe+p2znvqdtJ76nbWe+p22nvqdt576nbie+p03nvqdup76nbue+p28nvqdvZ76nb+e+p3Anvqdwp76ncOe+p3EnvqdEZ76ncWe+p3Gnvqdx576ncme+p3KnvqdzJ76nRKe+p0TnvqdFJ76nc6e+p3Pnvqd0Z76ndKe+p3Tnvqd1J76ndae+p3Ynvqd2Z76ndue+p3cnvqd3p76nd+e+p3gnvqd4p76neOe+p0Xnvqd5Z76neee+p3onvqd6Z76neue+p3tnvqd7p76ne+e+p0WnvqdG576nUCe+p3xnvqd8576nfWe+oJnnvqdZ576nXme+p1onvqCKJ76gl6e+oC9nvqZ6p76nXqe+Zian1ad959WnfifVp35n1adZZ9WnfqfVp37n1adb59WnWafVp38n1ad/Z9Wnf6fVp3/n1aeAJ9WngGfVoCWnvmYl59mI575mJ2f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hQKiDKCxogyHdaIMoLKiDKCzogyArKIMoLSiDKC1ogyCTKIMoLaiDKC3ogyguKIMoLmiDKC6ogygu6IMoLyiDKC9ogygvqIMoL+iDKDAogyeuaIMoMGiDKDDogygxKIMns+iDKDFogygxqIMoMeiDKDIoguYmqIwoNCiMKDRojCGzKIwoNOiC5iXojWg1KI1oNWiNaDYojWg2qI1oNaiNaDZojWg3qI1oN+iNaDgojWg46I1oOSiNaDmojWg6KI1oO6iNaDwojWg8aI1oPKiNaD1ojWg+KI1oQSiNaEHojWhDqI1oRCiNaEXojWhGKI1oRyiNaElojWhJ6I1oSiiNaEqojWhK6I1wACQp6JVoS+iVaGyolWhtqI1oTCiNZVjojWVXaI1oRWiNaEWojWhUqI1oVSiNaFdojWhX6I1oWCiNaFAojWhZqI1oWeiNaFpojWhbKI1oW+iNaF4ojWhfKI1oX6iNaGBojWhg6I1oYWiNaGIojWhkKI1oYuiNaGMojWhjaI1oYqiNaGaojWhTqI1oZ2iNaGfojWhoKI1oaWiNaGmojWhYqI1oaeiNaGrojWhwaI1ocWiNaHGojWhyKI1oc2iNaHSojWh1KI1odeiNaHcojWh36I1oeGiNaHlojWh56I1oemiNaHwojWh9aI1ofOiNaH5ojWh+qI1ofuiNaH+ojWiAaI1ogSiNaIHojWiCKI1ogmiNaILojWiEKI1ohGiNaIVojWiGKI1ohqiNaIcojWiIaI1oiyiNaI1ojWiN6I1ojiiNaI7ojWiQ6I1okiiNaJQojWiU6I1olaiNaJPojWiWqI1ol2iNaJeojWiZKI1omeiNaJuojWhV6I1onWiNaJ4ojWieqI1on6iNaKFojWiiKI1oomiNaKMojWij6I1opGiNaKdojWioaI1oqKiNaKkojWipaI1oqiiNaKqojWirKI1oq2iNaKyojWis6I1orWiNaLAojWiyaI1os2iNaLQojWi0aI1otSiNaLWojWg+6I1oU+iNaFkojWi46I1ouSiNaLmojWi56I1ouiiNaLpojWi66I1oPyiNaLwojWi8qI1ovWiNaL2ojWi96I1oviiNaL5ojWi/KI1ov+iNaMEojWjBqI1owiiNaMJojWjC6I1ow2iNaMQojWjEaI1oxOiNaMUojWjFqI1oxeiNaMdojWjHqI1oyCiNaMh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pqVVpKaWeKSmpVukpoHrpKalOaSmpQikmpidpLwApDmlaqS+mJmkv8AAkKykwKSxpL6Yl6TCpWukwqVspL6YnaTFAKQ5pW2kx5iXpMiWt6TIlrqkx5idpMsApDmlbqTNmJekzqUspM6lM6TNmJ2k0QCkOaVvpNOYmaTUwACQrKTVpLCk1aVwpNOYl6TYpTOk2KUspNOYnaTbAKQ5pXGk3ZiZpN7AAJCspN+lcqTfpXOk3ZiXpOKlLKTipTOk3ZidpOUAAMAAkK2k55iZpOim1aTnpIik6piZpOsnpOvAAJCtpO0opOsppOulz6TrpdCk66XRpOul0qTrpdOk64nZpOul1KTrpdWk66XWpOul16Trpdik66XZpOul2qTrpduk66XcpOul3aTrpd6k66XfpOul4KTrpeGk66XipOul46TrpeSk66XlpOul5qTrpeek66XopOul6aTrpeqk66XrpOul7KTrpe2k66XupOul76TrpfCk66XxpOul8qTrpfOk66X0pOul9aTrpfak66X3pOul+KTrpfmk66X6pOul+6Trpfyk66X9pOul/qTrpf+k66YApOumAaTrpgKk66YDpOumBKTrpgWk66YGpOumB6Trpgik66YJpOumCqTrpguk66YMpOumDaTrpg6k66YPpOumEKTrphGk66YSpOuQj6TrphOk64zOpOumFKTrphWk66YWpOuM5KTrphek647HpOuKFaTrkLGk66YYpOumGaTrkSek66YapOumG6Trphyk66YdpOumHqTrph+k66YgpOumIaTqmJelSyOk6pidpU0ApOeklaVPmJmlUIJnpVCIsaVQpiKlUKYjpVB6pVCmJKVPmJelVyOlVyKlT5iapVqmzaVPmJ2lXACk54fRpV6YmaVfiLGlX1ulX4LHpV8ipV6YmqVkgmelZIPBpV6Yl6Vnps6lZyOlZ0ilZ6bTpV6YnaVsAADAAJCupW6m1qVvmJelcJa3pXCWuqVvmJ2lcwAAwACQr6V1ltqldpiXpXeG5aV2mJ2leQCldabZpXuYmaV8YaV8hw2le5iXpX/AAJCvpYCm2qV/ptulf4blpX+DiaV/I6V7mJ2lhgAAwACQsKWIpt+liZiZpYqm4KWKpuGlioTQpYqFU6WKhQalioUWpYqFI6WKhRylioVFpYqFR6WKhUqlioVMpYqFTqWKhVClioYPpYqGDKWKhYulioWNpYqFj6WKpuKlioV3pYqFeaWKhXylioV+pYqFiaWKhZSlioWXpYqFmaWKhZulioWkpYqFp6WKhamlioWrpYqm46WKhbGlioW0pYqFuaWKhb6lioXCpYqFx6WKhculioXRpYqF2aWKhdulioXgpYqF5KWKpuSliqblpYqF6aWKheulioXupYqF8KWKhfKlioX0pYqF9qWKhfqlioX+pYqGAqWKhgilioYKpYqFrqWKpualiqbnpYqm6KWKpumliqbqpYqF+KWKpuulioYTpYqGFaWKhhylioYepYqGIqWKhiSlioYmpYqGKKWKhiqlioYupYqGMqWKhjqlioY8pYqGPqWKhkClioZHpYqGSqWKhlClioZYpYqm7KWKhhqlioaKpYqGd6WKhnClioZzpYqGdaWKhnmlioZ9pYqGkKWKpu2liqbupYqm76WKpvCliqbxpYqGBKWKpvKliqbzpYqm9KWKpvWliqb2pYqm96WKpviliqb5pYqm+qWKpvuliZidpfwApYim/KX+mJml/4ahpf+GpKX/hqel/4aqpf+GrqX/hrGl/4a2pf+GvKX/hr+l/4bCpf+Gx6X/hs6l/4bSpf+G1aX+mJ2mDgAAwACQsaYQmJemEacRphCm/qYTmJemFJlgphOYnaYWAKYQpv+mGJiZphnAAJCxphqnAKYYmJemHJlgphiYnaYeAKYQpwGmIJiZpiHAAJCxpiKnAqYipwOmIqcApiCYnKYmAKYgmJqmKKcEpiiZfaYgmJemK6QxpiuZYKYrmX+mIJidpi+FnqYQpwWmMZiZpjKYZqYypwamMZiXpjWim6Y1pwemNYT2pjWEoKY1l+WmNYZepjGYnaY8AADAAJCypj6axaY/mJmmQIdrpj+Yl6ZChXKmP5idpkQAAMAAkLOmRqcXpkeYmaZIwACQs6ZJpximR5iapkuBVaZLg7KmR5iXpk5Wpk6EWaZOm7+mTsAAkLOmUqccplKnGaZSpxumR5idplYAAMAAkLSmWKcgplmYmaZapyGmWqcjplqnJaZawACQtKZeiI+mWZiXpmDAAJC0pmGnKqZgnBGmYJxEpmCnLaZgnBqmYJwzpmCcE6Zgpy+mYJwOpmCnMKZZmJ2mbACmbKcopmynKaZsnfWmWKcxpnGYmaZyhEOmcsAAkLSmdJu9pnGYmqZ2hIOmdqcypnGYl6Z5wACQtKZ6pzWmeZwapnmcM6Z5nBOmeacvpnGYnaaAAKZYpzemgpiZpoOEUqaDhJKmg8AAkLSmhqc4poKYmqaIhEOmiISOpoinMqaCmJemjKc5poyEkKaMnBOmjKcvpoKYnaaRAKaRpyUAwACQtaaUmJmmladCppWnQ6aVp0SmladFppWnRqaVp0emladIppWnSaaVp0qmladLppWnTKaVp02mladOppWnT6aVp1CmladRppWnUqaVp1OmladUppWnVaaVp1amladXppWnWKaVp1mmladappWnW6aVp1ymladdppWnXqaVp1+mladgppWnYaaVp2KmladjppWnZKaVp2WmladmppWnZ6aVp2imladpppWnaqaVgiqmladrppWnbKaVp22mladuppWnb6aVp3CmladxppWncqaVp3Omlad0ppWndaaVp3amlad3ppWneKaVp3mmlad6ppWne6aVp3ymlad9ppWnfqaVp3+mlaeAppWngaaVgiumlZXQppWV0aaVldKmlZXTppWV1KaVldWmlZXWppWV16aVgiymlaeCppWng6aVp4SmlaeFppWnhqaVp4emlaeIppWniaaVp4qmlaeLppWnjKaVp42mlaeOppWCLaaVld+mlZXgppWV4aaVleKmlZXjppWV5KaVleWmlZXmppWV56aVleimlZXpppWV6qaVleumlZXsppWV7aaVle6mlZXvppWV8KaVlfGmlZXyppWV86aVlfSmlZX1ppWV9qaVgjemlaePppWnkKaVp5GmlaeSppWnk6aVp5SmlaeVppWnlqaVgjimlaeXppWnmKaVp5mmlaeappWCOaaVlfumlZX8ppWV/aaVlf6mlZX/ppWCOqaVlgCmlZYBppWWAqaVlgOmlZYEppWWBaaVlgamlZYHppWWCKaVlgmmlZYKppWCO6aVlgumlZYMppWWDaaVlg6mlZYPppWWEKaVgjymlaebppWnnKaVp52mlaeeppWnn6aVp6CmlaehAMAAkLanNpiZpzfAAJC2pzino6c2mJenOpxspzrAAJC2pzynpac6nIcAwACQt6c/hEynQJiZp0ESp0Fqp0GCjKdBp7SnQYOwp0CYnadHAKc/p7WnSZiZp0qntqdKp7enSsAAkLenTae4p02nuadNp7qnSZiXp1GHEKdRp7unUae8p1GnvadRnO2nUYJCp0mYnadYAADAAJC4p1qnwKdbmJqnXIKMp1xhp1yDXKdbmJ2nYAAAwACQuadip8GnY5iZp2SnwqdjmJenZqfDp2OYnadoAADAAJC6p2qYmadrnhQAwACQu6dtmJenbqfLp26nzKdup80AwACQvKdynk+nc5iZp3SVFqd0nlOndIJTp3SG2qd0p9OndKfUp3Sn1ad0p9andKfXp3Sn2Kd0ntandKIlp3SfSqd0n0undKMCp3SfTKdzmJenhZ5Wp4WeWKeFnxOnhZ8yp4WfM6eFnzSnhZ81p4WfHqeFnlSnhZ7bp4WfMaeFnyunc5idp5IAAMAAkL2nlKfmp5WYmaeWp+enlZiap5iezqeYmxCnlZidp5sAp5un6KeUnlCnnpiZp5+EQ6eflRunn6fqp5+n66efp+ynn6ftp5+n7qefoUKnnpiXp6iVY6eohIqnqKfzp6iEkaeohJCnqKf0p6iEl6eop/mnqKf6p6in/aeop/6nqJ5Vp56Ymqe1hI2ntYCsp7WEYae1gL2ntYJFp7WhZaeemJ2nvAAAwACQvqe+nlGnv5iap8CfD6e/mJenwpUcp8KfJqfCnyOnwp5Vp8KfNqfCnzenv5idp8kAAMAAkL+ny55bp8yYmafNhiunzZkyp82oCqfNnrqnzZ7sp82oC6fNwACQv6fUqAynzJiXp9aoDafWhKCn1oT0p9bAAJC/p9qoEKfWnran1qgSp9ae76fWhgen1qgTp9aFeKfWhXun1oV9p9aFiKfWhYqn1oWMp9aFjqfWhZan1oWYp9aFmqfWhZyn1oWmp9aFkKfWhain1oWqp9aFrKfWhbOn1oW4p9aFvafWhcGn1oXGp9aFyqfWhdCn1oXWp9aF2qfWhd6n1oXtp9aF76fWhfGn1oXzp9aF9afWhfen1oX5p9aF+6fWhf2n1oYAp9aGA6fWhgan1oXhp9aF46fWhean1oXop9aF6qfWhgmn1oYLp9aGFKfWhhin1oYbp9aGHafWhiGn1oYjp9aGJafWhien1oYpp9aGLafWhjGn1oY0p9aGOafWhjun1oY9p9aGP6fWhkKn1oZGp9aGSafWhk+n1oZXp9aGWafWhRqn1oU4p9aFFKfWhSGn1oaZp9aoGKfWhWCn1oWgp9aFoqfWl9mn1pffp9aX4afWl+On1pfnp9aHC6fWhVKn1oYRp9aEvKfWhUmn1oWwp9aFRqfWhLGn1oS0p9aGDqfWhU+n1obkp9aFTafWhUun1oTDp8yYnahBAKfLqCCoQ5iXqESoGKhDmJ2oRgAAwACQwKhImJeoSagnqEieXKhLmJmoTKICqEyCZqhLmJqoT6PIqE+CRahPgL2oT4eAqE+CZ6hPob2oT4UzqE+FNahPnXmoT4QeqE+oJqhPhI2oT4d9qEuYnahdAADAAJDBqF+oLKhgmJmoYZ7OqGGbEKhhhFKoYagtqGCYl6hmI6hgmJ2oaACoX6fjqGqYmahronKoa5kyqGuoL6hrhDCoapiaqHBcqHCoMqhwoOqocIgHqGqYl6h1qDOodag3qHWicKh1qDiodaNBqHWoO6h1qDyodZb8qHWhv6h1o2SodaNCqHWg7ah1o2WodaNyqHWX1Kh1qD6odYP4qHWoQah1qEOoapibqImezqiJmxCoiYRSqGqYnaiNAKiNp+iojagwqI2oMahfqEWokpiZqJOezaiSmJeolYSQqJWn96iVS6iSmJ2omQCoX6CBqJuYmaicgL2onIQhqJyHVKichGGom5iaqKGCRaihob6ooSKooaFlqJuYnaimAKhfqEaoqJiaqKmEUqiphBuoqYd9qKmhvaiphTOoqYU1qKmFAqiphBmoqYeBqKmhuqipobuoqSKoqJidqLYAqF+eXai4mJqouYRSqLkiqLiYl6i8nqiouJidqL4AqF+oR6jAmJmowZ7OqMGbEKjBXqjAmJeoxV2owJidqMcAqF+oSKjJmJmoyqhJqMqoSqjKgL2oyZiXqM5dqMmYnajQAADAAJDCqNKYl6jTqF6o0p5eqNWYmajWqFGo1qhSqNaE26jWhOWo1ZiaqNuZyqjbhEOo1ZiXqN6im6jeqFeo3p6xqN6oXKjeqF2o3oJLqNWYnajlAADAAJDDqOeYl6joqXWo6Kl3qOeeX6jrmJmo7Kh/qOyVG6jsqIGo7KhSqOyEgajsntyo7Jl3qOyogqjsqIOo7IRhqOyohKjsqIWo7IJMqOyohqjsgL2o7KiHqOye3ajshtuo7KiIqOyoiajsqIqo7IRDqOyoi6jsqIyo7KiNqOyojqjsqI+o7MAAkMOpCKiQqOyn6qjsqJGo7KiSqOyok6jrmJqpDqD+qQ6fIakOhW2pDoSNqQ6hZakOnlepDoJFqQ6ArKjrmJepF6iWqReEiqkXqJepF6iYqReom6kXqKCpF2ypF6ijqReopKkXqKapF6QxqReEn6kXqLCpF6ixqRen9KkXqLepF6KbqReovKkXqL2pF6jBqReoxakXqMqpF6QyqRen+akXnoOpF56LqRefIKkXqNKpF6fzqReo06kXqNSpF6jWqReedakXhJGpF6jbqRfAAJDDqTuo2akXqOKpF6jnqReo4KkXqP+pF4STqRepAqkXhJWpF6kIqRepDqkXqRCpF6kTqRepFqkXqRipF56XqReouakXqRmpF6i6qRen+qkXnp2pF6klqRepB6kXnp+pF6j4qReeh6kXnoSpF6k2qReeoKkXqTqpF6k7qRepPKkXqUOpF6lEqRepRqkXqUepF6JCqReiR6kXolmpF6J8qReh+KkXot6pF6LfqRei4KkXqUmpF6lNqReeiKkXqMmo65idqWuVT6lrqJSpawCo56lPqW+YmalwJ6lwwACQw6lyKKlwKalwhEOpcKlUqXCpValwqPupcKlWqXCpV6lwqVipcIaBqXCpWalwqVqpcKlbqXCFO6lvmJepgSOpb5idqYMAqOepXKmFmJmphsAAkMOph6ldqYcoqYepXqmHqV+ph6lgqYaEUqmGhI6phoTdqYabEKmGhW2phqGvqYWYl6mTqJqpk6liqZOpZKmTqWWpk6lmqZOpZ6mTqJapk56DqZOolamTI6mFmJqpnoJnqZ6Avameh1SpnqJvqZ6paqmFmJ2ppACppIRDqOepc6mnmJmpqIC9qaiHVKmoqLSpqKi1qaioVamnmJ2prgCo56l0qbCYmamxgL2psZ6lqbGHVKmwmJ2ptQAAwACQxKm3mJmpuKnnqbip6Km4qempuKnqqbeeYKm9mJmpvoJPqb6VQ6m+pDipvqQHqb6Ha6m+h2epvqE5qb6hPam+oTupvqDOqb6pgam+qYKpvqmDqb2YmqnMnw+pzJ8QqcyCRam9mJep0JU/qdCphanQqYmp0J8mqdCfI6nQpDap0KmUqdCeganQnoKp0KmhqdCeg6nQnoip0J6dqdCenqnQnoup0J6HqdCehKnQnp+p0J6gqdCpsanQqbKp0Km4qdCehqnQlRCp0KnDqdCejqnQqcap0KnIqdCejKnQnpCp0J6RqdCekqnQnpOp0J6UqdCelanQnpap0J6XqdCejanQnn6p0J6PqdChE6nQoPSp0Id5qdCHe6nQpAip0J82qdCfN6m9mJ2qAACpt6nmqgKYmaoDmcqqA4HVqgOCSqoCmJ2qBwAAwACQxaoJmJeqCqqXqgqeYaoKwACQxaoNqpmqCantqg+YmaoQqe6qD5iXqhKGnqoSI6oPmJ2qFQCqFanvqhWp8KoVqfKqCan0qhqYmaobp9GqG6n1qhuGzKobqfaqG6n3qhup+KobnteqG4ecqhqYl6okqfqqJIS0qiSEsaokhPSqJIU4qiSFGqokhMOqJIUhqiSGmaokqfuqJKn9qiSFYKokhleqJIUUqiSF7aokhZqqJIY5qiSFe6okhfeqJIXGqiSF+aokhcqqJIX7qiSF0KokhayqJIWqqiSGBqokqf6qJKoAqiSqAqokqgOqGpidqkQAqgmqBqpGmJmqR6fRqkeHXapHh2yqR4ecqkeHZ6pHhsyqR6n5qkee16pHqgeqR6oIqkeqCapHqgqqR565qkeqC6pHqgyqR6oNqkeqDqpHqg+qR6oQqkeWe6pHqhGqR6oSqkeqE6pHqhSqR6oVqkeqF6pGmJqqYqocqmKqHapGmJeqZZzKqmWqHqplnumqZYHDqmWqI6plqiSqZaolqmWqJqplqieqZYaEqmWqKKplh1qqZYdbqmWHXKplwACQxap0qh+qdKoqqmWqBaplqi6qZaosqmWqLaplhwuqZYXqqmWF6KplheOqZYXmqmWF4aplhe+qZYYGqmWF96plhcaqZYX5qmWFyqplhfuqZYXQqmWGA6plhayqZYXWqmWqQqplqkqqZapFqmWqSKplhXiqZYWmqmWFuKplhb2qZYWIqmWGCaplhXuqZYWaqmWFwaplhaqqZYXeqmWF2qplhbOqZYXtqmWFsKplhhGqZapTqmWGraplqm6qZapvqmWqMaplqjKqZapoqmWqZ6plqkOqZapQqmWqaqplqjOqZao+qmWqP6plqkCqZZztqmWqRKplqfyqZapXqmWqWqplqlyqZappqkaYnaq2AKoJqnmquJiZqrmqeqq5qUiquYUdqrmEhaq5hdSquYXVqriYl6rAqkmqwKpHqsCqRqq4mJ2qxACqCap7qsaYmarHwACQxarIqV+qyKp8qsiqfarGmJqqzIFVqsyqUqrGmJeqz6pOqs+qAarPqn6qz6pgqs+Fg6rGmJ2q1QCqCap/qteYmarYg+6q2CKq2IJTqteYnarcAKoJqoCq3piZqt+D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mJutiqOyrYWYl62MqyutjMAAkMutjqvUrY6rX62MhE2tjIV1rYyETq2FmJ2tlMAAkMutlYC1q9mr162XmJqtmKvYrZir2a2XmJ2tmwCr2avarZ2Ymq2eq9utnZiXraCrK62dmJ2togCr2avdraSYl62lqyutpJidracAq9mpeq2pmJetqqDPraqr362pmJ2trQCr2avgra+Yma2woLWtr5iXrbKr462yq1etsqEurbKr5q2vmJ2tt6vhq9mr5625mJmtuqFErbmYl628qyutuZidrb4Aq9mr6a3AmJetwavqrcGr7K3Bq++twavwrcGr8q3Bq/StwJidrcir4avZq/WtypiXrcurK63KmJ2tzcAAkMutzoC1q9mj063QmJmt0aH3rdHAAJDLrdOr963Tq+ut06vzrdOr8a3Tq+6t0Jiardmr+a3QmJet26srrdur+63bow+t0Jidrd8Ard+r+K3fhlar2av8reOYma3kq4at45iXrearK63jmJ2t6MAAkMut6YC1q9mr/q3rmJmt7KO2reyjt63rmJet76srreuYna3xwACQy63ygLWr2awArfSYma31oUSt9cAAkMut96wBrfesAq30mJet+qsrrfSYna38AKvZrASt/piarf+rLq3+mJeuAasrrf6Yna4DAKvZrAauBZiargarKq4FmJeuCKsrrgWYna4KAKvZrAiuDJiZrg1brg2hRK4MmJquEKt3rgyYl64SqyuuDJidrhQAq9msCq4WmJmuF4SorhehRK4WmJeuGqsrrhaYna4cAKvZrAyuHpiZrh+rPa4emJ2uIQCr2awNriOYl64khE2uJIV1riSFbK4khFSuJIROriOYna4qAKvZoKyuLJiXri2sDq4trA+uLaLdri2jtK4trBCuLawRri2i3K4tovSuLaO1ri2sEq4smJ2uOACr2awTrjqYma47q0uuO6wUrjusFa47rBauO6wXrjusGK46mJeuQpffrkKX565ChXiuQoXjrkKF5q5Chd6uQqssrkKrMK5ChgCuQqszrkKF6K5ChiWuQqs7rkKFva5ChayuQqtqrkKrbK5Cq26uQqtwrkKrc65Cq3WuQqt4rkKreq5CrCSuQqwmrkKsLa5ChjGuQqt9rkKsM65Cq4OuQoYDrkKrh65Cq4uuQquNrkKrj65Cq5OuQquZrkKrnK5Cq56uQqugrkKF2q5ChiOuQqxDrkKsRa5CrE6uQquirkKFuK5CrFSuQqxWrkKsZa5Cq6auQquprkKrq65ChbOuQquurkKrsq5ChequQoYJrkKruK5ChYiuQqu6rkKF865Cq72uQqukrkKrwK5ChZquQoWqrkKFwa5CheGuQqvCrkKrxK5Cq8auQqvMrkKrzq5Cq9CuQqvSrkKr065ChfGuQoX1rkKsi65Cq9yuQqverkKr6K5Cq/auQqv6rkKr/a5Cq/+uQqwDrkKsBa5CrAeuQqwJrkKsC65ChhGuOpidrqAAq9mslK6imJeuo5ffrqOF466jheauo4V4rqOF3q6jhgCuo4XxrqOF6K6jhb2uo4WsrqOF2q6jhgOuo4W4rqOFs66jhequo4WIrqOF866jhcGuo4XhrqOGCa6jhZquo4WqrqOF9a6jhhGuopidrrwAAMAAkMwAwACQza6/nz6uwJiZrsHAAJDNrsKspa7AmJeuxIOwrsSfpq7ErKeuwJiarsidba7IrKauwJidrssArr+srK7NmJmuzphmrs6dba7NmJeu0YOwrtGfpq7RI67NmJ2u1QCuv6yvrteYl67Yg7Cu2J+mrteYna7bAK6/rLCu3ZiXrt6DsK7en6au3ZidruEArr+ssa7jmJmu5J1truOYl67mg7Cu5p+mruYjruOYna7qAADAAJDOruygZ67tmJmu7ieu7sAAkM6u8Ciu7imu7oeNru6pPa7unVCu7ZiXrvYjru2Yna74AADAAJDPrvqYma77qCOu+6Bqrvuga677qCSu+6BsrvuoJa77qH2u+6h8rvusya77qHqu+6h7rvuoea77rMqu+6y8rvusva77rL6u+6y/rvuswK77rMGu+6zCrvqstK8QmJmvESevEcAAkM+vEyivESmvEay8rxGsva8RrL6vEay/rxGswK8RrMGvEazCrxCYl68dI68QmJ2vHwCu+qBpryGYma8igmevIqzDryGYnK8lnOyvIZiXrycjryeDD68nrMevIZidrysAAMAAkNCvLZiZry6szK8urM2vLqBtry6szq8urM+vLqzQry6s0a8urNKvLplYry6s068urNSvLqzVry6s1q8uoG6vLqBvry6s168urNivLqzZry6s2q8uoHCvLqzbry6s3K8urN2vLqzery6s368uoHGvLqzgry6s4a8urOKvLqzjAMAAkNGvTZiXr06DB69NrOmvUJiZr1Gs6q9QmJevU6Imr1CYna9VAADAAJDSr1eYl69YoHyvWKz+r1is/69YrQCvWKB+r1igf69YoICvWKB9r1itAq9XoHuvYpiZr2Mnr2PAAJDSr2Uor2Mpr2Os9K9jrPWvY6z2r2Os969jrPivY6z5r2Os+q9jrPuvYpiXr3Ajr2KYna9yAK9XrPyvdJiXr3Ws/a90mJ2vdwAAwACQ0695oISvepiZr3snr3vAAJDTr30or3spr3utB697rQive60Jr3qYl6+DI696mJ2vhQCveaCHr4eYma+Ins2viKINr4iiD6+HmJevjKDxr4ytC6+MrQyvjKNmr4yhWK+MoRuvjKIMr4yiDq+Moi6vjKItr4yiC6+MrQ+vjK0Rr4ytE6+MrRWvjKNbr4ytFq+MrRevjK0Yr4ytGq+MrRuvjK0dr4ytHq+MrSCvjK0hr4ytI6+MoeWvjKHnr4ytJK+MrSWvh5idr6sAAMAAkNSvrZiXr66tQa+urUKvra0mr7GYma+yrSevsoVrr7Ksoa+yrSivsq0pr7KtKq+yoJKvsq0sr7KtLa+yrS6vsoZar7KtMK+yrTKvsq0zr7KtNK+yrTWvsoVCr7Kghq+yoIGvsqhpr7KCE6+yrTavsq04r7KeaK+yrTmvsq06r7GYl6/No66vsZidr88Ar62tO6/RmJmv0q08r9GYl6/Uo66v1COv0Zidr9cAr62tPq/ZmJmv2q0/r9mYl6/co66v3COv2Zidr98AAMAAkNWv4ZiXr+Ktr6/irbCv4q2xr+GtR6/mmJmv54Ywr+esga/nrIKv561Ir+fAAJDVr+ytSa/srUqv561Lr+etTK/nrU2v5picr/IAr+aYl6/0rVCv9KyDr/Ssk6/0rVev9MAAkNWv+a1Vr+aYna/7wACQ1a/8gLWv4a1Zr/6Yma//J6//wACQ1bABKK//Ka//h42v/61dr/+tXq/+mJewByOv/pidsAkAr+GgiLALmJmwDIdnsAzAAJDVsA6WSLALmJywEACwC5iasBKEQ7ASoLWwEqDSsBKArLALmJewF6ERsBehN7AXoS6wF6DzsBesN7AXoTawC5idsB6r4a/hqH6wIJiZsCGtX7Ahq+KwIYCssCGHgbAhq2iwIamBsCGg0rAhhMKwIYRDsCGtYLAhlVywIayAsCGtYbAhrWKwIJiXsDCsG7AwrJawMKxCsDCsSrAwq1mwMK1vsDCtcLAwq1CwMKx9sDCrt7Awq1WwMKtWsDCtVrAwq+OwMK17sDCsMLAwrU+wMKtdsDCsfrAwrI6wMKtXsDChEbAwoTewMKwhsDCsNrAwoPOwMKw3sDCseLAwoTawMKx6sDCtV7Awq+awMKyEsDCtkrAwq1uwMKwssDCsGrAwrViwMKwqsDDAAJDVsFitgrBYrXKwWK1tsFitaLAgmJqwXaC1sCCYnbBfq+Gv4ZsAsGGYmbBih2ewYq2dsGGYl7BlmwywZa2esGWtn7BlmwGwYZidsGoAr+GrEbBsmJmwbYJrsG2CkLBsmJ2wcAAAwACQ1rByoImwc5iZsHTAAJDWsHWWSLBzmJywdwCwd62ysHOYmrB6obWwc5iXsHyskrB8oeiwfKGHsHyih7B8oe6wfKGVsHyhMrB8obSwfKKDsHyts7BzmJ2wh6vhsHKttLCJmJqwiqG1sImYl7CMrJKwjKHosIyhh7CMooewjKHusIyhlbCMoTKwjKG0sIyig7CMrbOwiZidsJer4bByqxKwmZiZsJqg0rCawACQ1rCcrbWwnK22sJytt7CcrbiwnK25sJyturCcrbuwnK28sJmYmrClobWwmZiXsKeskrCnoPawp6HosKehh7Cnooewp6HusKehlbCnoTKwp6G0sKer6rCnooOwp6vssKets7Cnq++wp6vwsKer8rCnq/Swp8AAkNawua3JsLmtw7C5rcGwua3GsLmt0LC5rcewmZidsMCr4bDAwACQ1rDCgLWwcqCKsMSYmbDFgmywxZz9sMWtzLDFrc2wxaC8sMXAAJDWsMut2LDLrdmwxJiXsM7AAJDWsM+tvbDPrduwz63csMSYnbDTALByoIuw1ZiZsNbAAJDWsNet3bDXrcWw1ZiXsNqt37DVmJ2w3ACw3MAAkNaw3q3esHKt4LDgmJmw4a2/sOGtvrDgmJ2w5ACwcq3isOaYmbDnreOw5piXsOkjsOnAAJDWsOutvbDmmJ2w7QCwcq3psO+YmbDwrcSw8K3IsO+YnbDzALByreqw9ZiXsPYjsPbAAJDWsPitvbD1mJ2w+gCwcq3ssPyYnbD9AADAAJDXsP+Yl7EAqx2xAKCOsQCgjbD/re6xBJiXsQWFbLEFhE2xBYV1sP+t77EJmJexCoVssQqETbEKhXWxCZidsQ4A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mJ24EQC37KSPuBOYmbgUnFW4FF64FFy4FF24FLDNuBSw3rgUsNi4FLDfuBSw4LgUgku4FJWmuBRhuBSEC7gUJ7gUsM64FLDhuBOYnbglALfspJC4J5iZuCiw4rgosOO4KLDluCiw5rgosOi4KLDquCiw7LgosO64KLDvuCiw8LgosPG4KLDzuCiw9bgosPe4KLD5uCiw+7gosP24KLD/uCixAbgosQO4KLEFuCixB7gosQm4KLELuCeYnbhBAADAAJDyuEOkkbhEmJq4RZYmuESYl7hHgpu4RJiduEkAAMAAkPO4S7ESuEyYmrhNmsy4TZrOuE2a0bhNms+4TZrSuE2a07hNmte4TbETuE2a1LhNms24TZrVuE2cT7hNmtq4TZrbuE2a3LhNsRS4TZreuE2a4bhNmuC4TZwyuE2cELhNnEO4TbEVuE2xFrhNsRe4TbEYuE2xGbhNsRq4TbEbuE2xHLhNsR64TZ5tuE2GELhNhaW4TZrQuE2FhbhNheW4TYXAuE2F7LhNhTu4TYVwuE2Fh7hNsSC4Ta5yuE2xKbhNsSq4TbEruE2xLLhNsS24TbEuuE2xL7hNsTC4TbExuE2xMrhNsTO4TbE0uE2xNbhNsTe4TbE4uE2xObhNsTq4TbE7uE2xPLhNsT24TbE+uE2xP7hNsUC4TbFBuE2xQrhNsUO4TbFEuE2xRbhNsUa4TbFHuE2xSLhNsUm4TbFKuE2xS7hNsUy4TbFNuE2xTrhNsU+4TbFQuE2xUbhNsVK4TbFTuE2xVLhNsVW4TbFWuE2xV7hNsVi4TbFZuE2xWrhNsVu4TbFcuE2xXbhNsV64TbFguE2xYbhNsWO4TbFkuE2xZbhNsWa4TbFnuE2xaLhNsWm4TbFquE2xa7hNsWy4TbFtuE2xbrhNsW+4TbFwuE2xcbhNsXK4TbFzuE2xdLhNsXW4TbF2uE2xd7hNsXi4TbF5uE2xerhNsXu4TbF8uE2xfbhNsX64TbF/uE2xgLhNsYG4TbGCuE2xg7hNsYS4TbGFuE2xhrhNsYe4TbGIuE2xibhNsYq4TbGLuE2xjLhNsY24TbGOuE2xj7hNsZC4TbGRuE2xkrhNsZO4TbGUuE2xlbhNsZa4TbGXuE2xmLhNsZm4TbGauE2xm7hNsZy4TbGduE2xnrhNsZ+4TbGguE2xobhNsaK4TbGjuE2xpLhNsaW4TbGmuE2xp7hNsau4TbGsuE2xrbhNsa64TbGvuE2xsLhNsbG4TbGyuE2xs7hNsbS4TbG1uE2xtrhNsbe4TbG4uE2xubhNsbq4TbG7uE2xvLhNsb24TbG+uE2xv7hNscC4TbHBuE2xwrhNscO4TbHEuE2xxbhNsca4TbHHuE2xyLhNscm4TbHKuE2xy7hNscy4TJiXuRixHbkYsR+5GKxPuRisdrkYrGi5GJrduRiGDbkYmt+5GLEhuRixIrkYsSO5GLEkuRixKLkYsTa5GLFfuRixYrkYsai5GLGpuRixqrkYsc25GLHOuEyYnbkuALhLsdC5MJiauTGx0bkxsdK5MZxKuTGx07kxsdS5MbHXuTGx2LkwmJe5ObHVuTmx1rk5sdm5MJiduT0AuEux2rk/mJe5QLHbuUCx3LlAsd25QLHeuUCx4blAseK5QLHnuUCx6LlAsem5QLHquUCx7rlAse+5P5iauU2x37lNseC5TbHjuU2x5LlNseW5TbHmuU2x67lNsey5TbHtuT+YnblXALhLsfC5WZiZuVrAAJDzuVux8blbsfK5W5vbuVub3blbm9+5W5veuVub4Llbm+G5W5vpuVux87lbm+e5W5vcuVub6Llbm/e5W5viuVub47lbm+S5W7H0uVub5blbm/a5W5v4uVub2rlbm/W5W5wIuVux9blbsfa5W7H3uVux+Llbsfm5W7H6uVux+7lbsfy5W7H9uVux/rlbsf+5W7IAuVuyAblbsgK5W7IDuVuyBLlbsgW5W7IGuVuyB7lbsgi5W7IJuVuyCrlbsgu5W7IMuVuyDblbsg65W7IPuVuyELlbshG5W7ISuVuyE7lbshS5W7IVuVuyFrlbshe5W7IYuVuyGblbshq5W7IbuVuyHLlbsh25W7IeuVuyH7lbsiC5W7IhuVuyIrlbsiO5W7IkuVuyJblbsia5W7InuVuyKLlbsim5W7IquVuyK7lbsiy5W7ItuVuyLrlbsi+5W7IwuVuyMblbsjK5W5wJuVuyM7lbsjS5W7I1uVuyNrlbsje5W7I4uVuyOblbsjq5W7I7uVuyPLlbsj25W7I+uVuyP7lbskC5W7JBuVuyQrlbskO5W7JEuVuyRblbska5W7JHuVuySLlbskm5W7JKuVuyS7lbsky5W7JNuVuyTrlbsk+5W7JQuVuyUblbslK5W7JTuVuyVLlbslW5W7JWuVuyV7lbsli5WZiaudmazLnZms652ZrRudmaz7nZmtK52ZrTudma17nZsRO52ZrUudmazbnZmtW52ZxPudma2rnZmtu52ZrcudmxFLnZmt652Zrhudma4LnZnDK52ZwQudmcQ7nZsRW52bEWudmxF7nZsRi52bEZudmxGrnZsRu52bEcudmxHrnZnm252YYQudmFpbnZmtC52YWFudmF5bnZhcC52YXsudmFO7nZhXC52YWHudmxILnZrnK52bEpudmxKrnZsSu52bEsudmxLbnZsS652bEvudmxMLnZsTG52bEyudmxM7nZsTS52bE1udmxN7nZsTi52bE5udmxOrnZsTu52bE8udmxPbnZsT652bE/udmxQLnZsUG52bFCudmxQ7nZsUS52bFFudmxRrnZsUe52bFIudmxSbnZsUq52bFLudmxTLnZsU252bFOudmxT7nZsVC52bFRudmxUrnZsVO52bFUudmxVbnZsVa52bFXudmxWLnZsVm52bFaudmxW7nZsVy52bFdudmxXrnZsWC52bFhudmx37nZseC52bHjudmx5LnZseW52bHmudmx0bnZsdK52bFjudmxZLnZsWW52bFmudmxZ7nZsWi52ZxKudmx07nZsdS52bFpudmxarnZsWu52bFsudmxbbnZsW652bFvudmxcLnZsXG52bFyudmxc7nZsXS52bF1udmxdrnZsXe52bF4udmxebnZsXq52bF7udmxfLnZsX252bF+udmxf7nZsYC52bGBudmxgrnZsYO52bGEudmxhbnZsYa52bGHudmxiLnZsYm52bGKudmxi7nZsYy52bGNudmxjrnZsY+52bGQudmxkbnZsZK52bGTudmxlLnZsZW52bGWudmxl7nZsZi52bGZudmxmrnZsZu52bGcudmxnbnZsZ652bGfudmxoLnZsaG52bGiudmxo7nZsaS52bGludmxprnZsae52bGrudmxrLnZsa252bGuudmxr7nZsbC52cAAkPO6k7LRupOy07nZsbG52bGzudmxsrnZsbS52bG1udmxtrnZsbe52bG4udmxubnZsbq52bG7udmxvLnZsb252bG+udmxv7nZscC52bHBudmxwrnZscO52bHEudmxxbnZsca52bHHudmxyLnZscm52bHKudmxy7nZsmy52bHrudmx7LnZscy52bHtudmx17nZsdi5WZiXurjAAJDzurmyXrq5slm6ubJfurmyZ7q5sl26ubJhurmyYrq5sm66ubJ0urmydbq5sna6ubKHurmyiLq5sqK6ubKourmyqbq5ss66ubKsurmyyLq5stW6ubLvurixHbq4sR+6uLHburix3Lq4rE+6uKx2urisaLq4mt26uIYNuria37q4sSG6uLEiurixI7q4sSS6uLEourix3bq4sTa6uLFfurix3rq4seG6uLHiurixYrq4see6uLHourix6bq4sdW6uLGourixqbq4saq6uLHqurix1rq4se66uLHNurix2bq4se+6uLHOuVmYnbrzALhLpJK69Ziauvay9rr2pPy69obZuvaebbr1mJe6+5lduvuyW7r7pPm6+7Jluvuy97r7sma6+7Jouvuy+Lr7oWK6+7L6uvuy+7r7svy6+7L5uvuy/rr7smm6+69auvuy/7r7swC6+4TvuvuzAbr7swK6+7MDuvuzBLr7swW6+7MGuvuzB7r7swi69ZiduxcAuEuzCbsZmJe7GrMKuxqzC7saswy7GrMNuxqzDrsasw+7GrMQuxmYnbsiALhLsxK7JJiXuyWzE7slsxS7JbMVuyWzFrslsxe7JbMYuyWzGbslsxq7JbMbuyWzHLslsx27JbMeuySYnbsyAADAAJD0uzSYl7s1tAy7NLMpuzeYmbs4syq7OIC9uzjAAJD0uzuzK7s3mJe7PYJLuz0juzeYmrtAsy+7N5idu0IAuzSkk7tEmJm7RcAAkPS7RrMxu0azMrtGszW7RrM2u0azN7tGszi7RrM5u0azOrtFpQC7RbMzu0WzO7tFgpa7RJiau1OAvbtTwACQ9LtVsz+7U4Kku1OC17tTgti7U6T4u1OzQLtTpM27RJiXu13AAJD0u16zQbtes0W7XrNJu16zTLtes0u7XrNPu16zR7tes2u7XrNvu16zdbtes3a7XrN3u16zeLtes3u7XrN8u16zfbtes3S7XrOCu16zhbtes4u7XbNCu12zQ7tds0S7XbNOu12zSLtds4i7XYKbu12zlLtdpP67XbOWu12zl7tds5i7RJidu38AuzSzqruBmJm7grOru4KDJLuCwACQ9LuFs6y7gZidu4eVT7uHALs0s6+7ipiZu4uepbuLJ7uKmJ27jgC7NLOwu5CYmbuRwACQ9LuSs7G7krOyu5CY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tWO+DZcDvg21ZL4NhAK+DbVlvg21Zr4NtWe+DbVrvg21bL4Nok2+DbVtvg21br4NrGG+DbVvvg21cL4NtXG+DbVyvg21c74NtXW+DbV2vg21d74NtXq+DbV7vg21fL4NtX2+DbV+vg21f74NtYC+DbKkvg21gb4NtYK+DYMXvg21hb4NtYa+DbGBvg21h74NtYi+DbWJvg2wvr4NsMW98pidvmUAAMAAkPu+Z7WKvmiYl75pI75omJ2+awC+Z7WLvm2Ymr5unm2+brU1vm61NL5utTO+brUyvm61Mb5utTC+brUvvm61Lr5utS2+brUsvm61K75utSq+boVwvm61Kb5urGi+bqx2vm6sT75uhcC+bprQvm6F5b5uhYW+boWlvm6FO75uhYe+bZiXvoiwxb6IsL6+iLWJvoi1iL6ItYe+iLGBvoi1hr6ItYW+iIMXvoi1gb6IsqS+iLWAvoi1f76ItX6+iLV9voi1fL6ItXu+iLV6voi1d76ItXa+iLV1voi1c76ItXK+iLVxvoi1cL6ItW++iKxhvoi1br6ItW2+iKJNvoi1bL6ItWu+iLVnvoi1Zr6ItWW+iLWCvoiEAr6ItWS+iJcDvoi1Y76IlwK+iLVivoi1Yb6ItWC+iLVfvoi1Xr6ItV2+iLVcvoi1W76ItVq+iLVZvoi1WL6ItVe+iLVWvoi1Vb6ItVS+iLVTvoi1Ur6ItVG+iLVQvoi1T76ItU6+iLVNvoi1TL6ItUu+iLVKvoi1Sb6Is6C+iK1vvoi1SL6ItUe+iLVGvoiBVb6ItUW+iLVEvoi1Q76ItUK+iLVBvoi1QL6ItT++iLU+voi1Pb6ItTy+iLU7voi1Or6ItTm+iLU2vm2Ynb7gAL5npJu+4piXvuO1IL7jtSG+4pidvuYAvme1kr7omJe+6bWTvum1lb7omJ2+7AC+Z7WYvu6Yl77vtZm+77WBvu+1mr7vI77umJ2+9AAAwACQ/L72mJe+97aivva1qb75mJm++sAAkPy++7Wqvvu1q777tay++7Wtvvu1rr77ta+++7Wwvvu1sb77tbK++7Wzvvu1tL77tbW++7W2vvu1t777tbi++7W5vvu1ur77tbu++7W8vvu1vb77tb6++7W/vvu1wL77tcG++7XCvvu1w777tcS++7XFvvu1xr77tce++7XIvvmYmr8bs0C/G55tvxu1Kb8bhYW/G7Utvxu1LL8btS6/G4Xlvxua0L8bhaW/G4U7vxusT78btS+/G7Urvxu1Kr8brHa/G7UwvxusaL8btTG/G4XAvxuFh78btTO/G7U0vxu1Nb8bhXC/G7Uyvxu1zL8btc2/G7XOvxu1z78btdC++ZiXvzu1yb87tT6/O7U/vzu1Ob87tTq/O7U7vzu1PL87tT2/O7U2vzu1QL87tUG/O7VCvzvAAJD8v0i11r9Itde/SLXZv0i13r9IteK/SLXkv0i1479Itea/SLXlv0i16r9Ite2/SLXuvzu1Q787tUS/O7VFvzuBVb87tUa/O7VHvzu1SL87tX2/O7V/vzu1fr87rW+/O7Ogvzu1Sb87tUq/O7VLvzu1TL87tU2/O7VOvzu1T787tVC/O7VRvzu1Ur87tVS/O7VVvzu1Vr87tVe/O7VYvzu1Wb87tVq/O7Vbvzu1XL87tV2/O7Vevzu1X787tWC/O7Vhvzu1Yr87lwK/O5cDvzu1ZL87hAK/O7Vlvzu1cL87tXG/O7Vrvzu1bL87tWe/O7Vjvzu1gL87sqS/O7WBvzuDF787tYW/O7WGvzuxgb87tYe/O7WIvzu1U787rGG/O6JNvzu1Zr87tXK/O7V1vzu1dr87tW+/O7Vzvzu1bb87tW6/O7V3vzu1e787tXy/O7V6vzu1gr87tYm/O7C+vzuwxb75mJ2/oQC+9rX1v6OYmb+kg+e/pLXvv6S1ab+ktWq/pJrZv6Rhv6OYnL+rrxW/o5iXv62vFr+thmi/rYZpv621/L+tlwO/rZcCv61Iv60jv6OYmr+2tWa/trVGv7aDwb+jmJ2/ugC+9rYEv7yYmb+9g+e/vcAAkPy/v7YGv7yYnL/BrxW/vJiXv8OvFr/Dhmi/w4Zpv8OHR7/DtfS/w7X8v8OXA7/DlwK/w0i/wyO/vJiav861cr/OtUa/zoPBv7yYnb/SAL72tg+/1JiZv9WD57/VthG/1bYSv9W2E7/VthS/1ZZXv9WEfr/UmJy/3bYZv92vFb/UmJe/4K8Wv+CGaL/ghmm/4IMXv+C2J7/gtfO/4LXyv+C16L/gteu/4LXpv+C17L/gtee/4LXYv+C10b/gtd+/4IQCv+CXAr/gtiq/4LYrv+C2LL/glwO/4LXcv+DAAJD8v/e2N7/gtjq/4LY7v+C2PL/gtZq/4LWBv+C1hr/gSL/gI7/UmJrAAEABwACQ/MAAQAK2IMAAQAGBVcAAQAGtb8AAQAG1/sAAQAG1RsAAQAG13cAAQAG2JcAAQAG1ZsAAQAGiTcAAQAGsYcAAQAG1csAAQAG2JsAAQAG14MAAQAG2IsAAQAGqaMAAQAGDwb/UmJ3AAEATAMAAQBOtrcAAQBObFcAAQBOa5sAAQBO2FcAAQBOFnsAAQBO2FsAAQBO2F8AAQBO2GMAAQBOVT772tkzAAEAemJrAAEAfte/AAEAftf7AAEAfgVXAAEAftd3AAEAfrW/AAEAftUbAAEAftiXAAEAftWbAAEAfok3AAEAfrGHAAEAftXLAAEAfteDAAEAftibAAEAfg8HAAEAemJfAAEAutfPAAEAutfLAAEAutejAAEAutevAAEAutenAAEAutezAAEAutefAAEAutdjAAEAutdHAAEAugxfAAEAuhALAAEAutd/AAEAulwLAAEAutdzAAEAulwPAAEAutYHAAEAutZrAAEAutYbAAEAutfzAAEAuSMAAQB6YncAAQEMAvva2TsAAQEWYmsAAQEa1acAAQEa1asAAQEWYncAAQEkAvva2T8AAQEuYmcAAQEyD58AAQEy178AAQEy1acAAQEy1asAAQEyFzcAAQEyFzMAAQEuYnMAAQFOvFcAAQEuYl8AAQFWvFsAAQFWGaMAAQFWGacAAQFW1/MAAQFWXA8AAQFWXAsAAQFVIwABAVSPAAEBLmJrAAEBetWbAAEBerGHAAEBetUbAAEBeg8HAAEBLmJ3AAEBjAL72tlTAAEBlmJnAAEBmg+fAAEBmte/AAEBmtWnAAEBmtWrAAEBmmtnAAEBlmJzAAEBsrxXAAEBlmJfAAEBurxbAAEBuhmjAAEBuhmnAAEButfzAAEBulwPAAEBulwLAAEBuSMAAQG4jwABAZZiawABAd6JNwABAd7VGwABAd4PBwABAZZidwABAewC+9rZYwABAfZiZwABAfrZZwABAfsAAkPzAAECAtlrAAEB9mJfAAECCtZrAAECCtYHAAECCtZnAAECCI8AAQH2YncAAQIcAvvaknMAAQImYl8AAQIq1IMAAQIq1IcAAQImYncAAQI0Avva2XcAAQI+Yl8AAQJC1k8AAQJC1lcAAQI+YncAAQJMAvva2XsAAQJWYmcAAQJYnwABAlsAAkPzAAECYKMAAQJYpwABAlrZhwABAlpcCwABAlrZiwABAlpckwABAloCrwABAlrZjwABAloCWwABAlZiXwABAoiPAAECVmJ3AAECkAL72tmTAAECmmJnAAECnwACQ/MAAQKiWSMAAQKaYnMAAQKoAwABAqoWewABAqq2twABAqrZnwABAqpsVwABAqprmwABAqrYVwABAqrYWwABAqrZswABAqrYXwABAqrYYwABAqrZtwABAqq8VwABAppiXwABAuK8WwABAuLZvwABAuLZwwABAuLZywABAuIZowABAuIZpwABAuLXowABAuLXrwABAuLXpwABAuLXswABAuLXnwABAuLXYwABAuEjAAEC4tfPAAEC4tfLAAEC4tdHAAEC4gxfAAEC4hALAAEC4td/AAEC4lwLAAEC4tdzAAEC4lwPAAEC4tZrAAEC4tYHAAEC4tYbAAECmmJrAAEDSgVXAAEDStd3AAEDSrW/AAEDStf7AAEDStUbAAEDStiXAAEDStWbAAEDSok3AAEDSrGHAAEDStXLAAEDStibAAEDSteC+9rZ+wABA35iZwABA4IPnwABA4LaAwABA4LaBwABA4LZ6wABA35icwABA5a8VwABA35iXwABA568WwABA57ZtwABA57aDwABA57aIwABA55cCwABA55cDwABA57XcwABA54ZowABA54ZpwABA57aXwABA57XzwABA57XywABA57XowABA57XrwABA57XpwABA57XswABA57XnwABA57XYwABA57XRwABA54MXwABA54QCwABA57XfwABA57WBwABA57WawABA57WGwABA5yPAAEDnSMAAQN+YmsAAQQO1/sAAQQOBVcAAQQOtb8AAQQO13cAAQQO1RsAAQQO2JcAAQQO1ZsAAQQOiTcAAQQOsYcAAQQO1csAAQQO2JsAAQQO14MAAQQODwcAAQN+YncAAQRHAAJD8wABBEoZbvva2n8AAQRSYmcAAQRWD58AAQRW178AAQRWAlsAAQRSYnMAAQRmvFcAAQRSYl8AAQRuvFsAAQRuGaMAAQRuGacAAQRu1/MAAQRuXA8AAQRtIwABBGyPAAEEUmJrAAEEjteDAAEEjg8HAAEEUmJ3AAEEmAADAAJD9wABBKLQcwABBKZiZwABBKsAAkP3AAEErlkjAAEEpmJzAAEEtrxXAAEEpmJfAAEEvrxbAAEEvtqnAAEEvtqrAAEEvtqvAAEEvtqzAAEEvtq3AAEEpmJrAAEE2gpDAAEE2tqfAAEE2tqjAAEE2hTrAAEEotq7AAEE7mJnAAEE8wACQ/cAAQT2WSMAAQTuYnMAAQT+vFcAAQTuYl8AAQUGvFsAAQUG2r8AAQUG2qcAAQUG2qsAAQUG2q8AAQUG2rMAAQUG2rcAAQSi2sMAAQUmYl8AAQUq2scAAQUmYncAAQUwAwABBKKSdwABBTpicwABBT68VwABBTpiXwABBUa8WwABBUbQywABBUbQ0wABBUbazwABBUba0wABBUba1wABBUba2wABBTpiawABBWaTfwABBWaUXwABBKKSewABBXJiZwABBXYC9wABBXYKWwABBXba4wABBXba5wABBXJiXwABBYqUOwABBXJidwABBZADAAEEotr7AAEFmmJnAAEFng+fAAEFnpN/AAEFnpRfAAEFnwACQ/cAAQWu2wMAAQWu2wcAAQWu2wsAAQWu2x8AAQWe2w8AAQWe2xMAAQWe2xcAAQWe2xsAAQWaYnMAAQXSvFcAAQWaYl8AAQXavFsAAQXa0MsAAQXa0NMAAQXa2s8AAQXa21MAAQXa21cAAQXa21sAAQXa2tMAAQXa2tcAAQXa2tsAAQWaYncAAQYEAwABBKLbawABBg5iZwABBhIPnwABBhMAAkP3AAEGGttzAAEGEhTrAAEGEgpDAAEGEtqjAAEGEtqfAAEGDmJzAAEGMrxXAAEGDmJfAAEGOrxbAAEGOtqnAAEGOtqrAAEGOtqvAAEGOtqzAAEGOtq3AAEGDmJ3AAEGVAMAAQSi23sAAQZeYmcAAQZik38AAQZjAAJD9wABBmrbfwABBmrbCwABBmKUXwABBl5iXwABBnq8WwABBnra0wABBnrazwABBnrQ0wABBnrQywABBnra2wABBnra1wABBl5idwABBpgDAAEEotuDAAEGomJnAAEGpnm3AAEGomJrAAEGrgpDAAEGrhTrAAEGrtqjAAEGrtqfAAEGomJfAAEGwtq3AAEGwtqzAAEGwtqvAAEGwtqrAAEGwtqnAAEGwrxbAAEGomJ3AAEG3AMAAQSi24sAAQbmYmcAAQbqebcAAQbq1MsAAQbmYmsAAQb2CkMAAQb2FOsAAQb22qMAAQb22p8AAQbmYl8AAQcK2rcAAQcK2rMAAQcK2q8AAQcK2qsAAQcK2qcAAQcKvFsAAQbmYncAAQckAwABBKLblwABBy5iZwABBzLUywABBzIU7wABBy5iawABBz4KQwABBz4U6wABBz7aowABBz7anwABBy5iXwABB1LatwABB1LaswABB1LarwABB1LaqwABB1LapwABB1K8WwABBy5idwABB2wAAwACQ/sAAQd2Yl8AAQd63O8AAQd63PMAAQd2kn8AAQeGYl8AAQeKvFcAAQeKvFsAAQeGYmsAAQeWWrcAAQeW268AAQeW27MAAQeW27cAAQeW27sAAQeW278AAQeW0r8AAQeGYncAAQe0AwABB3bbwwABB75iZwABB8IPnwABB8LbywABB8LbzwABB75icwABB9K8VwABB75iXwABB9q8WwABB9iPAAEHvmJ3AAEH5AMAAQd229cAAQfuYl8AAQfy29sAAQfy298AAQfy2+MAAQfuYncAAQgAAwABB3bb5wABCApiXwABCA7b6wABCA7b7wABCA7b8wABCA7b9wABCA7b+wABCA7b/wABCA7cAwABCA7cBwABCA7cCwABCA7cDwABCA7cEwABCA7cFwABCA7cGwABCA7cHwABCA7cIwABCA6M5wABCA7cJwABCA7cKwABCA7cLwABCA7cMwABCA7cNwABCA7cOwABCA7cPwABCA7cQwABCA7cRwABCA7cSwABCA7cTwABCA7cUwABCA7cVwABCA7cWwABCA7cXwABCA7cYwABCA7cZwABCA7cawABCA7cbwABCA7ccwABCA7cdwABCA7cewABCA7cfwABCApidwABCKwDAAEHdtyDAAEItmJnAAEIug+fAAEItmJrAAEIwtyLAAEIwg1zAAEIwgfrAAEIwhunAAEIwtyPAAEIwg8HAAEIwtK/AAEItmJfAAEI4rxXAAEI4rxbAAEI4SMAAQjgjwABCLZidwABCPQDAAEHdtynAAEI/mJnAAEJAtyLAAEJAg1zAAEJAgfrAAEJAhunAAEJAtyPAAEI/mJ3AAEJGAMAAQd23KsAAQkiYmcAAQknAAJD+wABCSrcrwABCSrcswABCSJiawABCTbciwABCTYNcwABCTYH6wABCTYbpwABCTbcjwABCTbSvwABCSJiXwABCVCPAAEJImJ3AAEJWAMAAQla3MMAAQla3McAAQd23MsAAQlqYmcAAQluDXMAAQlu3I8AAQlqYmsAAQl60r8AAQlqYl8AAQmAj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HZidwABEIwAAwACRBsAARCW4dcAARCaYl8AARCe4dsAARCe4d8AARCewfMAARCe4eMAARCe4ecAARCe4esAARCe4e8AARCe4fMAARCewrMAARCeGB8AARCewrsAARCe4fcAARCe4fsAARCe4f8AARCe4gMAARCe4gcAARCe4gsAARCe4g8AARCe4hMAARCe4hcAARCe4hsAARCe4h8AARCe4iMAARCe4icAARCews8AARCe4isAARCe4i8AARCe4jMAARCe4jcAARCe4jsAARCe4j8AARCe4kMAARCe4kcAARCe4ksAARCe4k8AARCe4lMAARCe4lcAARCe4lsAARCe4l8AARCe4mMAARCe4mcAARCe4msAARCe4m8AARCe4nMAARCe4ncAARCe4nsAARCe4n8AARCe4oMAARCe4ocAARCeFs8AARCe4osAARCe4o8AARCe4pMAARCe4pcAARCe4psAARCe4p8AARCe4qMAARCewq8AARCe4qcAARCe4qsAARCe4q8AARCe4rMAARCe4rcAARCe4rsAARCe4r8AARCewp8AARCewk8AARCeF9cAARCe4sMAARCe4scAARCewqMAARCe4ssAARCe4s8AARCe4tMAARCe4tcAARCe4tsAARCe4t8AARCe4uMAARCe4ucAARCe4usAARCe4u8AARCe4vMAARCe4vcAARCe4vsAARCe4v8AARCe4wMAARCe4wcAARCaYncAARH8AwABEJbjCwABEgZiXwABEgrjDwABEgrjHwABEgrjFwABEgZidwABEhgDAAEQluMjAAESImJnAAESJnP3AAESJg7DAAESJmf/AAESJJ8AARIiYncAARI4AwABEJbjJwABEkJiZwABEkbjKwABEkJiXwABEk7jLwABEk7jFwABEkJidwABElgDAAEQluM7AAESYmJnAAESZlibAAESZg8/AAESZBsAARJm4z8AARJm40MAARJm40cAARJm40sAARJm408AARJm41MAARJm41cAARJm41sAARJmlYcAARJmZNMAARJiYl8AARKe42MAARKe418AARKe42cAARKeqisAARKe43cAARKe43sAARKe438AARKe44MAARKe44cAARKe44sAARKe448AARKe45MAARKe45cAARKehgMAARKe45sAARKe46sAARKe47sAARKcjwABEmJidwABEugDAAEQluPLAAES8mJnAAES9uMrAAES8mJfAAES/uMXAAES/uMvAAES/uPPAAES/uPXAAES/uPbAAES/uPTAAES/uPfAAES/uPjAAES/uPnAAES/uPrAAES/uPvAAES/uPzAAES/uP3AAES/uHbAAES/uHfAAES/uHjAAES/uHnAAES/uHrAAES/uHvAAES/uHzAAES/sKzAAES/sK7AAES/uP7AAES/hgfAAES/uH3AAES/uH7AAES/uH/AAES/uIDAAES/uIHAAES/uILAAES/uIPAAES/uITAAES/uIXAAES/uIbAAES/uIfAAES/uIjAAES/uInAAES/sLPAAES/uIrAAES/uIvAAES/uIzAAES/uI3AAES/uJPAAES/uJTAAES/uI/AAES/uI7AAES/uJDAAES/uJHAAES/uJLAAES/uP/AAES/uJjAAES/uJnAAES/uJrAAES/uJvAAES/uQDAAES/uJzAAES/uJ3AAES/uJ7AAES/uJ/AAES/uKHAAES/hbPAAES/uKLAAES/uKTAAES/uKDAAES/uKPAAES/uKXAAES/uKbAAES/uKfAAES/uKjAAES/sKvAAES/uKnAAES/uKrAAES/uK/AAES/sKfAAES/uKvAAES/uKzAAES/uK3AAES/uK7AAES/sJPAAES/hfXAAES/uLDAAES/uLHAAES/sKjAAES/uJXAAES/uJfAAES/uJbAAES/uLLAAES/uLTAAES/uLPAAES/uLXAAES/sHzAAES/uLbAAES/uLfAAES/uLjAAES/uLnAAES/uLrAAES/uLvAAES/uLzAAES/uL3AAES/uL7AAES/uL/AAES/uMDAAES/uMHAAES8mJ3AAEUnAMAARCW5AcAARSmYmcAARSpqwABFKoKMwABFKZiXwABFLYMXwABFKZidwABFLwDAAEQluQLAAEUxmJrAAEUyuQPAAEUxmJ3AAEU0AMAARCW5BMAARTaYmcAARTeDGcAARTeB6MAARTaYmsAARTqBVcAARTaYl8AARTy5BcAARTy5B8AARTy5CMAARTyEWcAARTyDF8AARTzAAJEGwABFQrkJwABFNpidwABFRADAAEQluQzAAEVGmJnAAEVHs5rAAEVHuQ3AAEVHuQ7AAEVHuQ/AAEVHuRDAAEVHuRHAAEVHuNrAAEVHuRLAAEVHuRPAAEVHuRTAAEVHuOfAAEVHuRXAAEVHuRbAAEVHuMbAAEVHuOzAAEVHuO3AAEVGmJrAAEVYg8HAAEVYuR/AAEVGmJfAAEVbuRjAAEVbuRnAAEVbuRrAAEVbuOjAAEVbuRvAAEVbuR7AAEVbpSrAAEVbgojAAEVbuSHAAEVbuNzAAEVbuSPAAEVbVsAARVu5JMAARVu5JsAARVu5IMAARVu5KMAARVuEWcAARVu5KcAARVu5KsAARVu5LMAARVu5LsAARVu5MsAARVu5M8AARVu5NMAARVu46cAARVu5OMAARVu5OsAARVu47sAARVu5McAARVsjwABFRpidwABFegDAAEV6uRfAAEQlpKXAAEV9mJnAAEV+pWDAAEV+pWHAAEV+s5rAAEV+uTzAAEV+glHAAEV+uQvAAEV+mf/AAEV+nP3AAEV+g7DAAEV+tErAAEV+wACRBsAARYm5PcAARX65PsAARX65P8AARX65QMAARX65QcAARX65QsAARX65Q8AARX65RMAARX65RcAARX65RsAARX65R8AARX65SMAARX65ScAARX65SsAARX65S8AARX65TMAARX65TcAARX65TsAARX65T8AARX65UMAARX65UcAARX65UsAARX65U8AARX65VMAARX65VcAARX65VsAARX65V8AARX65WMAARX65WcAARX65WsAARX65W8AARX65XMAARX65XcAARX65XsAARX65X8AARX65YMAARX65YcAARX65YsAARX65Y8AARX65ZMAARX65ZcAARX65ZsAARX65Z8AARX65aMAARX65acAARX65asAARX65a8AARX65bMAARX65bcAARX65bsAARX65b8AARX65cMAARX2YmsAARb6DwcAARb65dMAARb6k8cAARX2Yl8AARcK5csAARcK5c8AARcK5dcAARcK5ecAARcK5esAARcK5eMAARcK5e8AARcK14MAARcKtb8AARcK5fMAARcKzoMAARcK1ScAARcK1SsAARcK1S8AARcK1TMAARcK1TcAARcK1TsAARcK1T8AARcK1UMAARcK1UcAARcK1UsAARcK1VMAARcK1VcAARcK1VsAARcK1V8AARcK1WMAARcK1WcAARcK1WsAARcK1W8AARcK1XMAARcK1XcAARcK1XsAARcK1X8AARcK1YMAARcK1YcAARcK1YsAARcK5fcAARcK5fsAARcK5CsAARcK5f8AARcK5hsAARcK5gsAARcK5gcAARcK5hcAARcKETcAARcK5IsAARcK5J8AARcK5LcAARcK5icAARcK5iMAARcK5isAARcK5jcAARcK5j8AARcK428AARcK5kMAARcK5kcAARcK5ksAARcK5k8AARcK5lMAARcK5lcAARcK5lsAARcK5l8AARcK5mMAARcK1U8AARcK47sAARcK5mcAARcK5msAARcK5McAARcK5m8AARcK5osAARcIjwABFfZidwABGCgDAAEQluaTAAEYMmJnAAEYNwACRBsAARg65pcAARg65psAARg65p8AARgyYl8AARhKaOcAARhKEWMAARhLAAJEGwABGFbmywABGFbmqwABGDJiawABGGIFVwABGGIOywABGGGHAAEYYubDAAEYYgMPAAEYYubHAAEYMmJ3AAEYfwACRBsAARiCAtcAARCW5tsAARiKYmsAARiOAlsAARiKYl8AARiW5m8AARiWETcAARiUjwABGIpidwABGKQDAAEQlubnAAEYrmJ3AAEYsAMAARCW5usAARi6YmsAARi+5MMAARi6Yl8AARjG5msAARjG5eMAARjG5esAARi6YncAARjUAwABEJbm7wABGN5iZwABGOLm8wABGOLm9wABGOLm+wABGOLm/wABGOLnAwABGOLnBwABGN5iawABGP2HAAEY/J8AARj+f3cAARj+5wsAARjeYl8AARkS5e8AARkSETcAARkS5gsAARkS5gcAARkS5hcAARjeYncAARkoAwABEJbnDwABGTJiawABGTYW6wABGTbnEwABGTbnFwABGTJidwABGUQDAAEQlucbAAEZTmJfAAEZUuXvAAEZUuZrAAEZTmJ3AAEZXAMAARCW5x8AARlmYmcAARlqWJsAARlq5yMAARlq5ycAARlq0RsAARlmYl8AARl+5ecAARl+ETcAARl8jwABGWZiawABGY7nKwABGWZidwABGZQDAAEQluczAAEZnmJfAAEZouXnAAEZohE3AAEZoI8AARmeYncAARmwAwABEJbnOwABGbpiZwABGb8AAkQbAAEZwuc/AAEZvudDAAEZvudHAAEZumJfAAEZ0uXjAAEZ0uXnAAEZ0udPAAEZumJ3AAEZ4AMAARCW51MAARnqYmcAARnu51cAARnuk8cAARnvAAJEGwABGfrnWwABGfrnXwABGe5YmwABGepiawABGgoWCwABGgoV/wABGgoUdwABGepiXwABGhrnZwABGhiPAAEaGuX3AAEaGudzAAEaGuYLAAEaGuYHAAEaGuYXAAEZ6mJ3AAEaOAMAARCW53cAARpCYmcAARpGFHcAARpCYl8AARpOETcAARpCYncAARpUAwABEJbnewABGl5iZwABGmIUdwABGl5iXwABGmiPAAEaahE3AAEaXmJ3AAEadAMAARCW54MAARp+Yl8AARqAjwABGn5idwABGogDAAEQlueLAAEakmJfAAEalhE3AAEaluXjAAEalI8AARqSYmsAARqm548AARqmFHcAARqSYncAARqwAwABEJbnlwABGrpiZwABGr7nmwABGrpiXwABGsYRNwABGsSPAAEaumJrAAEa0hR3AAEaumJ3AAEa2AMAARCW56cAARriYmcAARrmWJsAARrmFHcAARrm56sAARrm5ycAARriYl8AARr65eMAARr6ETcAARr65gsAARr4jwABGuJidwABGwwDAAEQluezAAEbFmJnAAEbGue3AAEbGhTXAAEbGpPHAAEbFmJrAAEbKhX/AAEbKgJbAAEbFmJfAAEbNuX3AAEbNudzAAEbNI8AARs2ETcAARsWYncAARtIAwABEJbnvwABG1JiXwABG1SPAAEbVhE3AAEbUmJ3AAEbYAMAARCW58cAARtqYl8AARtsjwABG24RNwABG2pidwABG3gDAAEQlufPAAEbgmJnAAEbhlibAAEbgmJrAAEbjhX/AAEbgmJ3AAEblAMAARCW59MAARueYmcAARuisSsAARueYl8AARuq1U8AARuq5eMAARuq5fcAARuq5fsAARuqETcAARuq5gsAARuq5gcAARuq5hcAARuojwABG55iawABG9Ln5wABG55idwABG9gDAAEQlufzAAEb4mJfAAEb5uXjAAEb5uX3AAEb5uX7AAEb5hE3AAEb5uZrAAEb5I8AARviYmsAARwCAlsAARviYncAARwIAwABEJbn+wABHBJiZwABHBaxKwABHBJiawABHB4V/wABHBJiXwABHCbl4wABHCbl9wABHCbl+wABHCYRNwABHCbmCwABHCbmBwABHCbmFwABHCSPAAEcEmJ3AAEcSAMAARCW6AMAARxSYmcAARxW6AcAARxW6AsAARxW6A8AARxWWJsAARxW6BMAARxW6BcAARxSYmsAARxyFf8AARxy6CcAARxy6CsAARxy6C8AARxyAlsAARxSYl8AARyK5eMAARyK5fcAARyK5fsAARyKETcAARyK5msAARyIjwABHFJidwABHKcAAkQbAAEcqgLXAAEcpugbAAEcpugfAAEcpugjAAEQlug3AAEcvmJnAAEcwgmzAAEcvmJrAAEcyhX/AAEcvmJ3AAEc0AMAARCW6DsAARzaYl8AARzeETcAARzaYmsAARzmezsAARzaYncAARzsAwABEJboPwABHPZiXwABHPoRNwABHPrmawABHPZiawABHQZ7OwABHQYCWwABHPZidwABHRADAAEQluhDAAEdGmJrAAEdHuhHAAEdHr0vAAEdGmJfAAEdKuXjAAEdGmJ3AAEdMAMAARCW6EsAAR06YmcAAR0+6E8AAR0+6EcAAR0+vS8AAR0+6FMAAR0+6FcAAR06Yl8AAR1WETcAAR1W5msAAR1W5eMAAR1W5fsAAR1W5ecAAR1W5gsAAR1W5gcAAR1W5hcAAR1UjwABHTpidwABHXwDAAEdfhVHAAEQluhvAAEdimJnAAEdjpPHAAEdimJrAAEdlhbXAAEdlhbfAAEdimJfAAEdonMnAAEdimJ3AAEdqAMAARCW6HMAAR2yYl8AAR22cycAAR2yYncAAR28AwABEJbodwABHcZiXwABHcoRNwABHcpzJwABHcrmCwABHcrmBwABHcrmFwABHcZidwABHeADAAEQluh7AAEd6mJfAAEd7hE3AAEd7nMnAAEd7uYLAAEd7uYHAAEd7uYXAAEd6mJ3AAEeBAMAARCW6H8AAR4OYl8AAR4SETcAAR4ScycAAR4S5gsAAR4S5gcAAR4S5hcAAR4OYncAAR4oAwABEJbogwABHjJiXwABHjYRNwABHjZzJwABHjbmCwABHjbmBwABHjbmFwABHjJidwABHkwDAAEQluiHAAEeVmJfAAEeWhE3AAEeWnMnAAEeWuYLAAEeWuYHAAEeWuYXAAEeVmJ3AAEecAMAARCW6IsAAR56Yl8AAR5+ETcAAR5+cycAAR5+5gsAAR5+5gcAAR5+5hcAAR56YncAAR6UAwABEJbojwABHp5iXwABHqIYFwABHqIRNwABHqCPAAEenmJrAAEesgmvAAEesuiTAAEenmJ3AAEevAMAARCW6JsAAR7GYncAAR7IAwABEJbonwABHtJiXwABHtYRNwABHtZzJwABHtbmCwABHtbmBwABHtbmFwABHtJidwABHuwDAAEQluijAAEe9mJfAAEe+hE3AAEe+nMnAAEe+uYLAAEe+uYHAAEe+uYXAAEe9mJ3AAEfEAMAARCW6KcAAR8aYl8AAR8eETcAAR8ecycAAR8e5gsAAR8e5gcAAR8e5hcAAR8aYncAAR80AwABEJboqwABHz5iXwABH0IRNwABH0JzJwABH0LmCwABH0LmBwABH0LmFwABHz5idwABH1gDAAEQluivAAEfYmJfAAEfZhE3AAEfZnMnAAEfZuYLAAEfZuYHAAEfZuYXAAEfYmJ3AAEffAMAARCW6LMAAR+GYmcAAR+Kk8cAAR+GYmsAAR+SFssAAR+GYl8AAR+acycAAR+GYncAAR+gAwABEJbotwABH6piXwABH64RNwABH65zJwABH67mCwABH67mBwABH67mFwABH6pidwABH8QDAAEQlui7AAEfzmJfAAEf0hE3AAEf0nMnAAEf0uYLAAEf0uYHAAEf0uYXAAEfzmJ3AAEf6AMAARCW6L8AAR/yYl8AAR/2ETcAAR/2cycAAR/25gsAAR/25gcAAR/25hcAAR/yYncAASAMAwABEJbowwABIBZiXwABIBiPAAEgGhE3AAEgFmJ3AAEgJAMAARCW6McAASAuYl8AASAwjwABIDIRNwABIC5idwABIDwDAAEQlujPAAEgRmJnAAEgSgkXAAEgSmQHAAEgRmJ3AAEgVAMAASBW6NMAARCW6NcAASBiYmcAASBm6NsAASBiYl8AASBsjwABIG4RNwABIGJidwABIHgDAAEgeujTAAEQlujjAAEghmJfAAEgiI8AASCKETcAASCGYncAASCUAwABIJbo0wABEJbo6wABIKJiZwABIKYHswABIKbo7wABIKaLEwABIKJiXwABILSPAAEgthE3AAEgomJrAAEgwujzAAEgomJ3AAEgyAMAARCW6PcAASDSYl8AASDUjwABINYRNwABINJiawABIOLo/wABINJidwABIOgDAAEQlukDAAEg8mJnAAEg9ukHAAEg8mJfAAEg/I8AASD+ETcAASDyYmsAASEK6QsAASEK6Q8AASEK6PMAASDyYncAASEYAwABEJbpEwABISJiZwABISbpFwABISbpGwABISYJnwABISJiXwABITSPAAEhNhE3AAEhImJ3AAEhQAMAARCW6SMAASFKYmcAASFOGBcAASFKYl8AASFUjwABIVYRNwABIVbjbwABIVbmQwABIVbmRwABIVbmSwABIVbmTwABIVbmUwABIVbmVwABIVbmWwABIVbmXwABIVbmYwABIVbVTwABIVbmZwABIUpibwABIZLlwwABIUpidwABIZpVPwABEJbpQwABIaJiXwABIaYRNwABIabmCwABIabmBwABIabmFwABIaJidwABIbgDAAEQlulHAAEhwmJfAAEhxI8AASHGETcAASHCYncAASHQAwABEJbpTwABIdpiXwABId7pUwABIdyPAAEh3hE3AAEh2mJ3AAEh7AMAARCW6VsAASH2YmsAASH6lYMAASH2Ym8AASIClYMAASH2Yl8AASIKETcAASIK5mcAASIK1U8AASIIjwABIfZidwABIhwDAAEQlulfAAEiJmJnAAEiKuljAAEiKulnAAEiKulrAAEiKulvAAEiJmJfAAEiPul/AAEiPI8AASI+ETcAASImYncAASJMAwABIk7pcwABIk7pdwABIk7pewABEJbphwABImJiZwABImbpiwABImJidwABImwDAAEQlumPAAEidmJnAAEieumTAAEidmJfAAEighE3AAEignMnAAEiguYLAAEiguYHAAEiguYXAAEidmJ3AAEimAMAARCW6ZcAASKiYl8AASKmETcAASKmcycAASKm5gsAASKm5gcAASKm5hcAASKiYncAASK8AwABEJbpmwABIsZiXwABIsoRNwABIspzJwABIsrmCwABIsrmBwABIsrmFwABIsZidwABIuADAAEQlumfAAEi6mJfAAEi7hE3AAEi7nMnAAEi7uYLAAEi7uYHAAEi7uYXAAEi6mJ3AAEjBAMAARCW6aMAASMOYl8AASMSETcAASMScycAASMS5gsAASMS5gcAASMS5hcAASMOYncAASMoAwABEJbppwABIzJiXwABIzSPAAEjNhE3AAEjMmJ3AAEjQAMAARCW6asAASNKYl8AASNMjwABI04RNwABI07l4wABI0pidwABI1wDAAEQlumzAAEjZmJnAAEjatErAAEjZmJfAAEjcI8AASNyETcAASNy5eMAASNmYncAASOAAwABEJbptwABI4piZwABI47CjwABI47RKwABI4piXwABI5iPAAEjmhE3AAEjmuXjAAEjimJ3AAEjqAMAARCW6bsAASOyYmcAASO26b8AASOyYl8AASO8jwABI74RNwABI7JidwABI8gDAAEQlunDAAEj0mJnAAEj1libAAEj0mJfAAEj3I8AASPeETcAASPe5hsAASPe5gsAASPe5gcAASPe5hcAASPe5mcAASPSYncAASP8AwABEJbpzwABJAZiZwABJArp0wABJAZiXwABJBCPAAEkEhE3AAEkEtVPAAEkEuYLAAEkEuYHAAEkEuYXAAEkBmJrAAEkLhX/AAEkLunbAAEkLunfAAEkBmJvAAEkPunfAAEkBmJ3AAEkRAMAARCW6eMAASROYmcAASRSFHcAASRS6dMAASROYl8AASRe53MAASRcjwABJF4RNwABJE5idwABJGwDAAEQlunrAAEkdmJnAAEkelibAAEkdmJfAAEkgI8AASSCETcAASSC5gsAASSC5mcAASSC5eMAASR2YncAASSYAwABEJbp8wABJKJiZwABJKZYmwABJKJiXwABJKyPAAEkrhE3AAEkruYLAAEkruYHAAEkruYXAAEkruZrAAEkomJrAAEkygJbAAEkomJ3AAEk0AMAARCW6f8AASTaYl8AASTcjwABJN4RNwABJN7l5wABJNpidwABJOwDAAEQluoHAAEk9mJnAAEk+pPHAAEk9mJfAAElAI8AASUCETcAASUC5fcAASUC5fsAASUC5eMAASUC5gsAASUC5gcAASUC5hcAAST2YmsAASUmFf8AASUknwABJSbl0wABJPZidwABJTQDAAEQluoTAAElPmJnAAElQpPHAAElPmJfAAElSI8AASVKETcAASVK5fcAASVK5fsAASVK5eMAASU+YmsAASViFf8AASVgnwABJWICWwABJWLl0wABJT5idwABJXQDAAEQluofAAElfmJnAAElguojAAElguonAAElguorAAElguovAAElggmfAAElguozAAElfmJzAAElnn6jAAElfmJrAAElpgmvAAElpupDAAElpupLAAElpupPAAElpupTAAElpupXAAElfmJfAAElwhE3AAElwI8AASXC5gsAASXC5gcAASXC5hcAASV+YncAASXa6jcAASXa6jsAASXa6j8AASXaCbMAASXaVT8AARCW6l8AASXyYmcAASX26i8AASXyYmsAASX+6kMAASXyYl8AASYGETcAASYEjwABJgbmCwABJgbmBwABJgbmFwABJfJidwABJhwDAAEQlupjAAEmJmJrAAEmKgkXAAEmJmJfAAEmMhE3AAEmMI8AASYmYncAASY8AwABEJbqawABJkZiZwABJkrqbwABJkrqcwABJkrqLwABJkoJnwABJkq3jwABJkrqdwABJkZiawABJmbqhwABJmbqgwABJmbkwwABJmbqiwABJmbqjwABJkZiXwABJn7mbwABJn4RNwABJn7mawABJn7l7wABJn7mCwABJn7mBwABJn7mZwABJn7mFwABJn7qkwABJnyPAAEmRmJ3AAEmqAMAASaq6n8AARCW6qcAASa2YmcAASa66qsAASa66q8AASa66i8AASa6CZ8AASa66rMAASa6t48AASa66ncAASa2Yl8AASba5m8AASbaETcAASba5msAASba5e8AASba5gsAASba5gcAASba5mcAASba5hcAASba6pMAASbYjwABJrZiawABJwbquwABJwbqtwABJrZidwABJxADAAEQlurDAAEnGmJfAAEnHuZrAAEnHuZnAAEnHhE3AAEnHuYLAAEnHuYHAAEnHuYXAAEnHuqTAAEnHI8AAScaYncAASdAAwABEJbqywABJ0piZwABJ07qzwABJ08AAkQbAAEnVurTAAEnSmJfAAEnXI8AASdeETcAASde5msAASde5e8AASde5eMAASde5gsAASde5gcAASde5mcAASde5hcAASde6pMAASdKYmsAASeK6ucAASeK6t8AASeK5dMAASdKYncAASea6tcAASea6tsAARCW6usAASemYmsAASeq5dMAASemYl8AASeyETcAASemYncAASe4AwABEJbq7wABJ8JiawABJ8YW1wABJ8YW3wABJ8JiXwABJ9IRNwABJ9CPAAEnwmJ3AAEn3AMAARCW6vcAASfmYl8AASfqETcAASfojwABJ+ZidwABJ/QDAAEQlur/AAEn/mJnAAEoAmXDAAEoAuNXAAEoAusDAAEoAmTLAAEoAgkXAAEoAusHAAEn/mJfAAEoHuSvAAEoHuNjAAEn/mJ3AAEoKAMAARCW6xMAASgyYmcAASg2CacAASg25HcAASgyYncAAShAAwABEJbrFwABKEpiawABKE2rAAEoTgozAAEoSmJfAAEoWhE3AAEoSmJ3AAEoYAMAARCW6xsAAShqYl8AAShuETcAAShqYncAASh0AwABEJbrHwABKH5iXwABKIIRNwABKH5iawABKIrkDwABKH5idwABKJADAAEQlusjAAEommJfAAEonusnAAEonusrAAEonusvAAEonuszAAEonus3AAEonus7AAEonus/AAEommJ3AAEovAMAARCW60MAASjGYl8AASjK60cAASjK60sAASjGYncAASjUAwABEJbrTwABKN5idwABKOADAAEQlutTAAEo6mJnAAEo7utXAAEo6mJrAAEo9asAASj2CjMAASjqYl8AASkCETcAASjqYncAASkIAwABEJbrWwABKRJiZwABKRbrXwABKRJiawABKR2rAAEpHgozAAEpHuQPAAEpEmJfAAEpLhE3AAEpEmJ3AAEpNAMAARCW62MAASk+YmcAASlCGFsAASk+YmsAASlJqwABKUoKMwABKT5iXwABKVYRNwABKT5idwABKVwDAAEQlutnAAEpZmJnAAEpagmnAAEpamTLAAEpagkXAAEpautrAAEpZmJrAAEpfasAASl+CjMAASlmYl8AASmKETcAASlmYncAASmQAwABKZK3/wABEJbrbwABKZ5iZwABKaLrcwABKaLrdwABKaLpGwABKaLrewABKaLrfwABKaLrgwABKaIJnwABKaIUHwABKaIW6wABKaIJpwABKaIYswABKaIJFwABKaJkywABKaKVhwABKZ5iawABKd2rAAEp3uuHAAEp3gozAAEpnmJfAAEp7hE3AAEpnmJ3AAEp9AMAARCW64sAASn+YmcAASoCFusAASoC648AASoC65MAASn+YmsAASoRqwABKhIKMwABKf5iXwABKh4RNwABKf5idwABKiQDAAEQluuXAAEqLmJnAAEqMrcTAAEqMhbXAAEqMhbfAAEqLmJrAAEqQasAASpCCjMAASpC5A8AASouYl8AASpSETcAASouYncAASpYAwABEJbrmwABKmJiZwABKmYJpwABKmbrnwABKmbo7wABKmaLEwABKmJiawABKnmrAAEqegozAAEqYmJfAAEqhhE3AAEqYmJ3AAEqjAMAARCW66MAASqWYmcAASqaCa8AASqaGFsAASqaCRcAASqaZMsAASqalYcAASqWYmsAASqxqwABKrIKMwABKpZiXwABKr4RNwABKpZidwABKsQDAAEQluunAAEqzmJfAAEq0hE3AAEq0uXjAAEq0uYLAAEq0uYHAAEq0uYXAAEqzmJ3AAEq6AMAARCW66sAASryYmcAASr2CbMAASr252MAASryYmsAASsC6kMAASsCDwMAASryYl8AASsOETcAASsO5eMAASsO5gsAASsO5gcAASsO5hcAASsMjwABKvJidwABKyrrrwABKyrrswABEJbruwABKzZiZwABKzifAAErOwACRBsAAStAowABKzinAAErOuvHAAErOuvLAAErNmJfAAErVI8AASs2YncAAStcAwABEJbrzwABK2ZiZwABK2oJnwABK2rr0wABK2rr1wABK2ZiXwABK3oRNwABK3rl4wABK3rmCwABK3rmBwABK3rmFwABK3iPAAErZmJrAAErluvfAAErZmJ3AAErnAMAARCW6+MAASumYmcAASuq69MAASumYmsAASuy6+sAASuy5MMAASumYl8AASu+ETcAASu+5gsAASu+5gcAASu+5hcAASu8jwABK6ZidwABK9QDAAEQluvzAAEr3mJnAAEr4rePAAEr4uv3AAEr4hd3AAEr3mJrAAEr8uvrAAEr8uTDAAEr3mJfAAEr/uZrAAEr/hE3AAEr/uYLAAEr/uYHAAEr/uYXAAEr/uqTAAEr/I8AASveYncAASwcAwABEJbsBwABLCZiZwABLCrr0wABLCq3jwABLCoXdwABLCpZHwABLCZiawABLD7kwwABLCZiXwABLEbmawABLEYRNwABLEbqkwABLEbmCwABLEbmBwABLEbmFwABLESPAAEsJmJ3AAEsZAMAARCW7AsAASxuYmsAASxy6+sAASxuYl8AASx6ETcAASx65gsAASx65gcAASx65hcAASx4jwABLG5idwABLJADAAEQluwTAAEsmmJ3AAEsnAMAARCW7BcAASymYmcAASyq6i8AASymYl8AASyyETcAASyy5gsAASyy5gcAASyy5hcAASywjwABLKZidwABLMgDAAEQluwfAAEs0mJfAAEs1hE3AAEs1uYLAAEs1uYHAAEs1uYXAAEs1I8AASzSYncAASzsAwABEJbsJwABLPZiZwABLPrsKwABLPrqLwABLPZiXwABLQYRNwABLQbmCwABLQbmBwABLQbmFwABLQSPAAEs9mJ3AAEtHAMAARCW7DMAAS0mYl8AAS0qETcAAS0q5gsAAS0q5gcAAS0q5hcAAS0ojwABLSZidwABLUAAAwACRB8AAS1K7EMAAS1OYmcAAS1SAvcAAS1SDwcAAS1S7EcAAS1S7EsAAS1S7E8AAS1SdS8AAS1Sdw8AAS1S7FMAAS1QpwABLU5iawABLXifAAEtTmJfAAEtgI8AAS1OYncAAS2IAwABLUqSmwABLZJiZwABLZYPnwABLZYJnwABLZacuwABLZbSuwABLZYPBwABLZbsWwABLZJiawABLbLsawABLbLsbwABLbLc+wABLbJVowABLbKpNwABLbIC9wABLbIRDwABLbIUzwABLbIU1wABLbLKgwABLbLbSwABLbLbXwABLbLbTwABLbJ15wABLbJU1wABLbLsqwABLbLsrwABLZJiXwABLfrscwABLfq8WwABLfrWXwABLfrstwABLfrsswABLfrKjwABLfl/AAEt+hBLAAEt+I8AAS367MMAAS367MsAAS367M8AAS2SYnMAAS4sAwABLi7sgwABLi6G8wABLi5sOwABLi7siwABLi64RwABLiyfAAEuLlarAAEuLIMAAS4u7I8AAS4u7JcAAS4u7JsAAS4u7J8AAS4uw3MAAS4uvFcAAS2SYncAAS5uVTwDAAJEIwABLnbs3wABLnpiXwABLn7s4wABLn4KIwABLnpidwABLogDAAEuduznAAEukmJfAAEuluzrAAEuluzvAAEuluzzAAEuluz3AAEuluz7AAEuluz/AAEulu0DAAEulu0HAAEulu0LAAEulu0TAAEulu0XAAEulu0jAAEulu0rAAEukmJrAAEuztNfAAEuzu0PAAEuzu0bAAEuzu0fAAEuzt7fAAEukmJ3AAEu5AMAAS527S8AAS7uYmcAAS7zAAJEIwABLvbWqwABLvbtMwABLvbtNwABLvbtOwABLvbtPwABLvbtQwABLvbtRwABLvbtSwABLvbtTwABLvbtUwABLvbtVwABLvbtWwABLvbtXwABLvbtYwABLvbtZwABLvbtawABLvbtbwABLvbtcwABLvbtdwABLu5iawABL0btewABL0cAAkQjAAEvTr1TAAEvTt/XAAEvRu0PAAEvRtNfAAEvRu5TAAEu7mJfAAEvZtOTAAEvZwACRCMAAS9u7Y8AAS9u7ZcAAS9u7Z8AAS9u7aMAAS9u7acAAS9u7ccAAS9u7jsAAS9u7esAAS9u7bcAAS9u7YcAAS9u7YMAAS9mvXcAAS9m0+sAAS9mvW8AAS9m05sAAS9m7OMAAS9mvYcAAS9m7lcAAS9m7lsAAS9mCiMAAS7uYncAAS/AAwABLnbugwABL8piZwABL88AAkQjAAEv0tarAAEv0u6HAAEv0u13AAEv0u1DAAEv0u1HAAEv0u1LAAEv0u6LAAEv0u6PAAEv0u6TAAEv0u6XAAEv0u6bAAEvzu0bAAEvztNfAAEvzu5jAAEvzu0PAAEvzu5nAAEvzucnAAEvzu0fAAEvzt7fAAEvymJfAAEwIu0XAAEwIu6jAAEwIu6nAAEwIuzrAAEwIu7DAAEwIu7HAAEwIu0DAAEwIu0HAAEwIu0LAAEwIwACRCMAATBK7Y8AATBK7tsAATAi7O8AATAi7RMAATAi7PMAATAi7PcAATAi7PsAATAi7P8AATAi7SMAATAi7SsAAS/KYmsAATB27qsAATB27rMAATB27rcAATB27r8AAS/KYncAATCIAAMAAkQnAAEwku8DAAEwlmJfAAEwms0bAAEwmpPrAAEwlmJrAAEwpu8HAAEwlmJ3AAEwrAMAATCS7wsAATC2YmsAATC6bhcAATC61AsAATC2Yl8AATDG0x8AATDG05MAATDG05sAATDGvXcAATDGvW8AATDGvYcAATDG0/cAATDG0/sAATDG0+sAATDG0+cAATC2YncAATDwAwABMJLvDwABMPpiZwABMP4KQwABMP4JnwABMPpiawABMQoPBwABMPpiXwABMREjAAExEI8AATD6YncAATEcAwABMJLvKwABMSZiZwABMSrvLwABMSrvMwABMSrvNwABMSZiXwABMTrvOwABMTiPAAExJmJrAAExRu9HAAExJmJ3AAExTAMAATCS71cAATFWYmcAATFbAAJEJwABMV7vWwABMV7tPwABMV7vXwABMV7vYwABMV7tQwABMV7tRwABMV7tSwABMV7tTwABMV7tUwABMV7tVwABMV7tWwABMV7tXwABMV7vZwABMV7tYwABMV7vawABMV7vbwABMV7HywABMV69UwABMV7vcwABMV7QEwABMV7f1wABMV7f7wABMV7vdwABMV7f8wABMV7vewABMV7vfwABMV7f9wABMV7vgwABMV7gcwABMV7tZwABMV7vhwABMV7viwABMV7vjwABMV7vkwABMV7vlwABMV7tawABMV7vmwABMV7vnwABMV7eZwABMVZiawABMf7tewABMf7vowABMf7kawABMf5uFwABMf7UCwABMf7vBwABMf7TXwABMVZiXwABMh7T9wABMh7T+wABMh7THwABMh7TkwABMh8AAkQnAAEyMu2XAAEyMu2PAAEyMu2fAAEyMu2jAAEyMu2nAAEyMu3HAAEyMu/HAAEyMu2HAAEyMu2DAAEyMu23AAEyMu3rAAEyMu47AAEyHu+rAAEyHr13AAEyHtPrAAEyHr2HAAEyHr1vAAEyHtObAAEyHu/fAAEyHtMjAAEyHs0bAAEyHu/jAAEyHu/3AAEyHpPrAAEyHvADAAEyHvALAAEyHpSLAAExVmJ3AAEyoAADAAJEKwABMqpiYwABMq7wQwABMqqSowABMrZiawABMroJmwABMrq8rwABMrq8swABMrq8twABMrq8uwABMroFVwABMrZiXwABMta8/wABMtSPAAEy1s5jAAEy1hCzAAEytmJ3AAEy6AMAATKq8FsAATLyYl8AATL2vXcAATL2vX8AATL2vW8AATL2vYcAATLyYncAATMIAwABMqqSpwABMxJiZwABMxcAAkQrAAEzGvBfAAEzGvBjAAEzGvBnAAEzGvBrAAEzEmJrAAEzLgVXAAEzLryvAAEzLry3AAEzLryzAAEzLry7AAEzEmJfAAEzRvBvAAEzRr13AAEzRr1/AAEzRr1vAAEzRr2HAAEzEmJ3AAEzXAMAATNeVT8AATKq8HMAATNqYmcAATNu8HcAATNvAAJEKwABM3bwewABM3bwfwABM2piXwABM4MAAkQrAAEzhvCDAAEzgr1/AAEzgr13AAEzgr1vAAEzgr2HAAEzghEHAAEzamJrAAEzovCHAAEzamJ3AAEzqAMAATKq8IsAATOyYmcAATO2zUMAATO3AAJEKwABM77wYwABM77wZwABM77wXwABM77wawABM7JiawABM9IJmwABM9IFVwABM9K8rwABM9K8twABM9K8swABM9K8uwABM7JiXwABM+69dwABM+69fwABM+69bwABM+69hwABM+68/wABM+yPAAEzsmJ3AAE0CAMAATKqzJ8AATQSYmcAATQWAvcAATQSYl8AATQcjwABNBJidwABNCQDAAEyqpKfAAE0LmJfAAE0Ms1HAAE0MpS7AAE0LmJ3AAE0PAMAATKqvE8AATRGYl8AATRKvQMAATRKvQcAATRKvQsAATRKvQ8AATRGYncAATRcAwABMqrMowABNGZiZwABNGsAAkQrAAE0bvCbAAE0bvCfAAE0bvCjAAE0bvCnAAE0ZmJfAAE0gr0DAAE0gr0HAAE0gr0LAAE0gr0PAAE0ZmJ3AAE0lAADAAJELwABNJ7wwwABNKJidwABNKQDAAE0npKrAAE0rmJrAAE0stDrAAE0ss4zAAE0st7TAAE0st7jAAE0spPjAAE0st7zAAE0ss0DAAE0ssL3AAE0st7XAAE0strzAAE0st73AAE0stQLAAE0sq2jAAE0spQ3AAE0ssx/AAE0svDHAAE0srwbAAE0svDLAAE0rmJfAAE0/tdrAAE0/tmrAAE0/tmvAAE0/tozAAE0/tfHAAE0/mxbAAE0/tkDAAE0/tj7AAE0/tkXAAE0/tkTAAE0/tj/AAE0/tkLAAE0/tj3AAE0/t37AAE0/tkPAAE0/vDTAAE0/tGTAAE0/tYbAAE0/u5LAAE0rmJ3AAE1TAMAATSe7vsAATVWYl8AATVa0yMAATValIsAATVa798AATVa8AMAATVWYncAATVsAwABNJ7w1wABNXZiXwABNXruowABNXrupwABNXruwwABNXruxwABNXZiawABNY7uZwABNY7nJwABNY7utwABNY7uvwABNY7uYwABNY7uqwABNY7uswABNXZidwABNawDAAE0npKvAAE1tmJrAAE1ut7zAAE1utDrAAE1us4zAAE1ut7TAAE1ut7jAAE1upPjAAE1us0DAAE1uq2jAAE1uvA3AAE1utkHAAE1uu/nAAE1uu/7AAE1ut73AAE1ut63AAE1ut7XAAE1utrzAAE1upQ3AAE1uvA7AAE1us1XAAE1tmJfAAE2CtdrAAE2Cs0bAAE1tmJ3AAE2FAADAAJEMwABNh5iZwABNiKYkAMAAkQ3AAE2KvDfAAE2LmJnAAE2MJ8AATYzAAJENwABNjijAAE2MKcAATYydG8AATYy8VcAATYy8VsAATYy8V8AATYy8WMAATYyaJ8AATYy8WcAATYydlMAATYy8WsAATYydN8AATYy8W8AATYy8XMAATYydmcAATYy8XcAATYy8XsAATYydU8AATYy8X8AATYydSMAATYydnMAATYy8YMAATYy8YcAATYyZVcAATYy8YsAATYy8Y8AATYy8ZMAATYy8ZcAATYy8ZsAATYydHMAATYy8Z8AATYuYl8AATa4jwABNi5idwABNsADAAE2KhgTAAE2ymJnAAE2zwACRDcAATbSGf8AATbKYmsAATbaCZ8AATbaZ6sAATbaDwcAATba8bsAATba8b8AATbKYl8AATbyETcAATbyvP8AATbye6cAATby8aMAATbym1MAATbyv1sAATbzAAJENwABNw7xpwABNw4ZhwABNw7xqwABNvEjAAE28I8AATbKYncAATckAwABNirxwwABNy5iawABNzIJnwABNy5iXwABNzoRNwABNzp7pwABNzsAAkQ3AAE3RvGnAAE3RhmHAAE3RvGrAAE3LmJ3AAE3VAMAATYq8csAATdeYmcAATdic8sAATdeYmsAATdqCZ8AATdeYl8AATdyETcAATdzAAJENwABN3rxpwABN3oZhwABN3rxqwABN3J7pwABN3LxowABN15idwABN5ADAAE2KvHXAAE3mmJnAAE3nqmbAAE3mmJrAAE3pgmfAAE3mmJfAAE3rhE3AAE3rwACRDcAATe28acAATe2GYcAATe28asAATeue6cAATeu8aMAATeaYncAATfMAwABNirx4wABN9ZiZwABN9quYwABN9ZiawABN+IJnwABN9ZiXwABN+oRNwABN+sAAkQ3AAE38vGnAAE38hmHAAE38vGrAAE36nunAAE36vGjAAE31mJ3AAE4CAMAATYq8e8AATgSYmcAATgWdesAATgSYmsAATgeCZ8AATgSYl8AATgmETcAATgnAAJENwABOC7xpwABOC4ZhwABOC7xqwABOCZ7pwABOCbxowABOBJidwABOEQDAAE2KvH7AAE4TmJrAAE4UgmfAAE4TmJfAAE4WhE3AAE4WwACRDcAAThi8acAAThiGYcAAThi8asAAThae6cAATha8aMAAThOYncAATh4AwABNiryBwABOIJiZwABOIYKQwABOISnAAE4gmJrAAE4kgmfAAE4kvG7AAE4kvG/AAE4gmJfAAE4ohE3AAE4owACRDcAATiq8acAATiqGYcAATiq8asAATiie6cAATiivP8AATii8aMAATiCYncAATjEAwABNiryGwABOM5iZwABONIKQwABONCnAAE4zmJrAAE43gmfAAE43vG7AAE43vG/AAE4zmJfAAE47hE3AAE47rz/AAE47nunAAE47vGjAAE47wACRDcAATkC8acAATkCGYcAATkC8asAATjOYncAATkQAwABNiryJwABORpiZwABOR4KQwABOR4NiwABORynAAE5GmJrAAE5LgmfAAE5LvG7AAE5LvG/AAE5GmJfAAE5PhE3AAE5PwACRDcAATlG8acAATlGGYcAATlG8asAATk+e6cAATk+vP8AATk+8aMAATkaYncAATlgAwABNiryPwABOWpiZwABOW4KQwABOW4JFwABOW7SuwABOW1vAAE5amJrAAE5ggmfAAE5gvG7AAE5gvG/AAE5amJfAAE5khE3AAE5kwACRDcAATma8acAATmaGYcAATma8asAATmS8lcAATmS8mcAATmSvP8AATmSe6cAATlqYncAATm4AwABNiryhwABOcJiZwABOcYW/wABOcJiawABOc4JnwABOc7xvwABOcJiXwABOdoRNwABOdsAAkQ3AAE54vGnAAE54hmHAAE54vGrAAE52rz/AAE52nunAAE52vGjAAE5wmJ3AAE5/AMAATYq8pMAAToGYmcAAToKAvcAAToGYmsAAToSCZ8AAToGYl8AAToaETcAATobAAJENwABOiLxpwABOiIZhwABOiLxqwABOhp7pwABOhrxowABOgZidwABOjgDAAE2KvKfAAE6QmJnAAE6RgpDAAE6RgL3AAE6QmJrAAE6UgmfAAE6QmJfAAE6WhE3AAE6WwACRDcAATpi8acAATpiGYcAATpi8asAATpae6cAATpa8aMAATpCYncAATp4AwABNiryqwABOoJiZwABOoYJrwABOoYKQwABOoJiawABOpIJnwABOoJiXwABOpoRNwABOpsAAkQ3AAE6ovGnAAE6ohmHAAE6ovGrAAE6mnunAAE6mrz/AAE6mvGjAAE6gmJ3AAE6vAMAATYq8ssAATrGYmcAATrKWJsAATrGYmsAATrSCZ8AATrGYl8AATraETcAATrbAAJENwABOuLxpwABOuIZhwABOuLxqwABOtp7pwABOsZidwABOvQDAAE2KvLbAAE6/mJnAAE7AlibAAE6/mJrAAE7CgmfAAE6/mJfAAE7EhE3AAE7EwACRDcAATsa8acAATsaGYcAATsa8asAATsSe6cAATr+YncAATssAwABNiry6wABOzZiZwABOzpYmwABOzoKQwABOzZiawABO0YJnwABOzZiXwABO04RNwABO08AAkQ3AAE7VvGnAAE7VhmHAAE7VvGrAAE7TnunAAE7TvGjAAE7NmJ3AAE7bAMAATYq8vMAATt2YmcAATt6FtcAATt6FtsAATt6Ft8AATt68vcAATt2Yl8AATuO81cAATuOETcAATuPAAJENwABO5rxpwABO5oZhwABO5rxqwABO457pwABO468/wABO47xowABO3ZiawABO7YJnwABO7ZnqwABO7bxvwABO3ZidwABO8QDAAE2KvOPAAE7zmJnAAE70hbXAAE70hbfAAE7zmJrAAE73gmfAAE73merAAE73vG/AAE7zmJfAAE77hE3AAE77wACRDcAATv28acAATv2GYcAATv28asAATvue6cAATvuvP8AATvu8aMAATvOYncAATwQAwABNirzmwABPBpiZwABPB4W2wABPB4JrwABPB7y9wABPBpiawABPC4JnwABPC5nqwABPC7xvwABPBpiXwABPD4RNwABPD8AAkQ3AAE8RvGnAAE8RhmHAAE8RvGrAAE8PnunAAE8Prz/AAE8PvGjAAE8GmJ3AAE8YAMAATYq868AATxqYmcAATxuCa8AATxqYmsAATx2CZ8AATx2Z6sAATx28b8AATxqYl8AATyGETcAATyHAAJENwABPI7xpwABPI4ZhwABPI7xqwABPIZ7pwABPIa8/wABPIbxowABPGpidwABPKgDAAE2KvO7AAE8smJnAAE8thbrAAE8tvO/AAE8tvPDAAE8smJrAAE8xgmfAAE8xmerAAE8xvG/AAE8smJfAAE81hE3AAE81wACRDcAATze8acAATzeGYcAATze8asAATzWvP8AATzWe6cAATzW8aMAATyyYncAATz4AwABNirz5wABPQJiZwABPQSfAAE9AmJrAAE9DgmfAAE9DvG/AAE9AmJfAAE9GhE3AAE9GwACRDcAAT0i8acAAT0iGYcAAT0i8asAAT0avP8AAT0ae6cAAT0CYncAAT04AwABNirz9wABPUJiZwABPUYC9wABPUJiawABPU4JnwABPU7xvwABPUJiXwABPVoRNwABPVsAAkQ3AAE9YvGnAAE9YhmHAAE9YvGrAAE9Wrz/AAE9WnunAAE9QmJ3AAE9eAMAATYq9AcAAT2CYmcAAT2GAvcAAT2GDJcAAT2CYl8AAT2TAAJENwABPZb0CwABPZYZhwABPZbxqwABPYJiawABPabxuwABPabxvwABPYJidwABPbADAAE2KvQPAAE9umJrAAE9vgmfAAE9umJfAAE9xhE3AAE9xwACRDcAAT3O8acAAT3Ge6cAAT3GvP8AAT3G8aMAAT26YncAAT3gAwABNir0LwABPepiawABPe4JnwABPepiXwABPfYRNwABPfcAAkQ3AAE9/vGnAAE99nunAAE99rz/AAE99vGjAAE96mJ3AAE+EAMAATYq9DsAAT4aYmsAAT4eCZ8AAT4aYl8AAT4mETcAAT4nAAJENwABPi7xpwABPiZ7pwABPia8/wABPibxowABPhpidwABPkADAAE2KvRHAAE+SmJnAAE+ThbrAAE+TIsAAT5KYmsAAT5aCZ8AAT5KYl8AAT5jAAJENwABPmbxqwABPmYZhwABPmbxpwABPmJ7pwABPmIRNwABPmK8/wABPkpidwABPoADAAE2KvRbAAE+imJnAAE+jhR3AAE+jgmvAAE+imJrAAE+mgmfAAE+mvG/AAE+imJfAAE+pwACRDcAAT6q8acAAT6qGYcAAT6q8asAAT6me6cAAT6mvP8AAT6mETcAAT6KYncAAT7EAwABNir0ZwABPs5iXwABPtJqPwABPtLyrwABPtLxzwABPtLx2wABPtLx5wABPtLx8wABPtLx/wABPtIczwABPtLyHwABPtLyKwABPtLyQwABPtLyiwABPtLylwABPtJ7vwABPtLy3wABPtIUUwABPtLQswABPtLCXwABPtLzkwABPtLzowABPtLzswABPtLCawABPtL0EwABPtL0MwABPtL0PwABPtL0VwABPtIWwwABPtLz6wABPtLz+wABPs5idwABP0gDAAE2KvRvAAE/UmJnAAE/Vg+TAAE/UmJfAAE/XgorAAE/XvR3AAE/Xmo/AAE/XvKvAAE/XvHPAAE/XvHnAAE/XvHbAAE/XvH/AAE/XvHzAAE/XhzPAAE/XvIfAAE/XvIrAAE/XvJDAAE/XvKLAAE/XvKXAAE/Xnu/AAE/XhRTAAE/XvLfAAE/XtCzAAE/XsJfAAE/XvOTAAE/XvOjAAE/XvOzAAE/XsJrAAE/XvPrAAE/XvP7AAE/XvQTAAE/XvQzAAE/XvQ/AAE/XvRXAAE/XhbDAAE/XI8AAT9SYncAAT/gAAMAAkQ7AAE/6ptjAAE/7mJfAAE/8ptvAAE/8g4nAAE/7mJ3AAE//AMAAT/q9K8AAUAGYmsAAUAKAvcAAUAK9M8AAUAGYl8AAUAW9LMAAUAW9L8AAUAW9McAAUAW9MsAAUAGYncAAUAoAwABP+r00wABQDJiZwABQDYC9wABQDYGbwABQDb01wABQDb0zwABQDJiXwABQEr0swABQEr0vwABQEr0xwABQEr0ywABQEsAAkQ7AAFAXvTfAAFAMmJ3AAFAZAMAAT/q9OMAAUBuYl8AAUBy9OcAAUBuYmsAAUB627sAAUBuYncAAUCAAwABP+r06wABQIpiXwABQI1bAAFAjvTvAAFAjgojAAFAimJrAAFAnYcAAUCe5GsAAUCKYncAAUCoAwABP+r08wABQLJiZwABQLb09wABQLbkawABQLJiXwABQMMAAkQ7AAFAxvT7AAFAwVsAAUDC9O8AAUDCCiMAAUDC9OcAAUCyYmsAAUDe27sAAUCyYncAAUDkAwABP+r1CwABQO5iXwABQPL1AwABQO5idwABQPgDAAE/6vUPAAFBAmJnAAFBBgovAAFBAmJfAAFBDwACRDsAAUES9PsAAUEO9QMAAUEMjwABQQJiawABQSGHAAFBAmJ3AAFBKAMAAT/q9RcAAUEyYmcAAUE1hwABQTYGTwABQTcAAkQ7AAFBQvUbAAFBMmJfAAFBSwACRDsAAUFO9PsAAUFKCiMAAUEyYncAAUFYAAMAAkQ/AAFBYvUfAAFBZmJfAAFBap8PAAFBZmJ3AAFBcAMAAUFi9SMAAUF6Yl8AAUF+nw8AAUF6YncAAUGEAAMAAkRDAAFBjmJnAAFBkgobAAFBjmJfAAFBmvkPAAFBmopbAAFBmvkTAAFBmvkXAAFBmvkbAAFBmvYTAAFBmvkvAAFBmvkzAAFBmvk3AAFBmqLjAAFBmvk7AAFBmhBrAAFBmvk/AAFBmvlDAAFBmrVfAAFBmvlHAAFBmvlLAAFBmnBrAAFBmvlPAAFBmvlTAAFBjvU7AAFB7mJfAAFB8lnjAAFB7mJ3AAFB+AMAAUGOj0sAAUICYmcAAUIGHMsAAUIGazMAAUIGVG8AAUIG9T8AAUIG9UMAAUIG9UcAAUIG9UsAAUIG9U8AAUIGpzcAAUIGp0sAAUIGHZ8AAUIGFbcAAUICYl8AAUI69VMAAUI69VcAAUI69VsAAUI69V8AAUI69XMAAUI69XcAAUI69ZsAAUI69Z8AAUI6tnMAAUI6im8AAUICYncAAUJkAwABQY71owABQm5iZwABQnIdrwABQnJnKwABQnL1pwABQnL1qwABQnL1rwABQm5iawABQoprMwABQm5iXwABQpL1swABQpL1vwABQpL15wABQpL2FwABQpL2GwABQpL1zwABQpL14wABQpL2iwABQpL24wABQpL2+wABQpL29wABQpL2VwABQpL2BwABQpL3EwABQpL3FwABQpL10wABQpKKbwABQpL3QwABQpL3PwABQpL3ewABQpL3XwABQpL3UwABQpL3pwABQpL3LwABQpL3awABQpL3bwABQpKg+wABQpL3IwABQpL3SwABQm5idwABQwgDAAFBjvfHAAFDEmJnAAFDFmcrAAFDFvczAAFDFvc3AAFDFvc7AAFDFm4rAAFDFvVrAAFDFnn3AAFDFvWXAAFDFvWnAAFDEmJrAAFDPmqbAAFDEmJfAAFDRvWHAAFDRI8AAUNG99sAAUNGbEcAAUNG9+cAAUNGbDcAAUNG9+sAAUMSYncAAUNkAwABQY737wABQ25iZwABQ3L3VwABQ3L3WwABQ25idwABQ3wDAAFBjvfzAAFDhmJnAAFDiJ8AAUOLAAJEQwABQ5CjAAFDiKcAAUOK9/cAAUOK9/sAAUOK9/8AAUOK+AMAAUOK+AcAAUOK+AsAAUOK+A8AAUOK+BMAAUOGYl8AAUO8jwABQ4ZidwABQ8QDAAFBjvgXAAFDzmJnAAFD0mcrAAFDzmJfAAFD2mwzAAFD2rZ7AAFDzmJ3AAFD5AMAAUGO+BsAAUPuYmsAAUPya18AAUPyFcMAAUPyGEMAAUPya1sAAUPuYl8AAUQGa58AAUQGbCsAAUQG+CMAAUQGrY8AAUQHAAJERwABRBr4JwABRBr4MwABRBr4LwABRBr4KwABQ+5idwABRC74HwABQY74bwABRDZiZwABRDodrwABRDZiawABREJrMwABREJrXwABREJrYwABREJrNwABREIVwwABREIYQwABREJrWwABRDZiXwABRGL4cwABRGL4dwABRGJsRwABRGIVywABRGIYNwABRGJrnwABRGJsKwABRDZidwABRIADAAFBjp8bAAFEimJnAAFEjmcrAAFEjgdXAAFEjgkrAAFEimJfAAFEno67AAFEimJ3AAFEpAMAAUGOnxcAA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Ul4jwABSW5idwABSYADAAFI/vobAAFJimJnAAFJjgJbAAFJimJfAAFJlI8AAUmKYncAAUmcAAMAAkSHAAFJpqXvAAFJqmJnAAFJrh2fAAFJrhszAAFJrvozAAFJrvo3AAFJrvo7AAFJrnEnAAFJrok7AAFJrvo/AAFJrrBTAAFJrvpDAAFJrvpHAAFJqmJfAAFJ3wACRIcAAUni+k8AAUni+lMAAUni+lsAAUni+lcAAUni+mMAAUni+mcAAUni+msAAUni+l8AAUni+p8AAUni+psAAUni+qcAAUni+qsAAUni+q8AAUni+qMAAUni+pMAAUni+pcAAUneF98AAUneF+cAAUneF+8AAUmqYncAAUowAAMAAkSLAAFKOqXzAAFKPmJnAAFKQh2fAAFKQhXDAAFKQvo3AAFKQvrDAAFKQvrHAAFKQqeTAAFKPmJfAAFKXwACRIsAAUpi+k8AAUpi+ssAAUpi+s8AAUpeF+cAAUo+YncAAUp0AAMAAkSPAAFKfqX3AAFKgmJnAAFKhvrvAAFKgmJfAAFKjoVrAAFKjvr3AAFKjvrzAAFKjvsHAAFKjvsPAAFKjvsbAAFKgmJ3AAFKqAADAAJEkwABSrKl+wABSrZiZwABSroRDwABSrodrwABSrodnwABSrod1wABSrqCywABSrqDOwABSrr7KwABSrr7LwABSroTpwABSrr7MwABSrr7NwABSrob7wABSroCswABSrZiXwABSvKEEwABSvKD4wABSvL7PwABSvL7TwABSvL7VwABSvL7XwABSvL7ZwABSvL7bwABSvKJnwABSvL7ewABSvL7gwABSvL7jwABSvL7lwABSvKMEwABSvKMGwABSvKH6wABSvKH7wABSvKOUwABSvKKtwABSvL7nwABSvKJ1wABSvL7pwABSvKEOwABSvKI4wABSvL7ywABSvL75wABSvKEHwABSvKJ4wABSvKElwABSvKEowABSvKHBwABSvL77wABSvKHFwABSvKHGwABSvKHIwABSvKHNwABSvKHSwABSvKHUwABSvL79wABSvL8AwABSvL8DwABSvL8FwABSvL8IwABSvL8KwABSvL8MwABSvL8PwABSvL8SwABSvL8UwABSvL8awABSvL8ewABSvL8fwABSvL8hwABSvKOLwABSvKONwABSvKOQwABSvKLWwABSvL8jwABS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AFQfv8HAAFQfv7/AAFQfmufAAFQfrBnAAFQfq1LAAFQfmuTAAFQfv8nAAFQfv8jAAFQfwACRKsAAVC2/xsAAVC2/xcAAVByYncAAVDAAwABT+q1GwABUMpiZwABUM8AAkSrAAFQ0v8zAAFQymJfAAFQ2mozAAFQymJ3AAFQ4AADAAJErwABUOpiXwABUO7/YwABUO6hrwABUO6yiwABUOqyhwABUP5iZwABUQIC9wABUQIdUwABUP5icwABUQ7/QwABUP5iawABURYUHwABURaluwABUP5iXwABUSKHEwABUSCPAAFQ/mJ3AAFRLAMAAVEvAAJErwABUTYC1wABUOr/SwABUT5iZwABUUJJUwABUT5iawABUUoC9wABUUodUwABUUoUHwABUUqluwABUT5iXwABUV6HEwABUVyPAAFRPmJ3AAFRaAMAAVDqiAMAAVFyYmcAAVF2FB8AAVFyYl8AAVF+hxMAAVF8jwABUXJidwABUYgDAAFQ6qGnAAFRkmJnAAFRlocPAAFRkmJfAAFRnocTAAFRnI8AAVGSYncAAVGoAwABUasAAkSvAAFRsgLXAAFQ6v9bAAFRumJnAAFRvocPAAFRumJfAAFRxocTAAFRxI8AAVG6YncAAVHQAAMAAkSzAAFR2qG/AAFR3mJnAAFR4gpDAAFR3mJfAAFR6v9zAAFR6v93AAFR3mJrAAFR9o8jAAFR3mJ3AAFR/AADAAJEtwABUgZ5OwABUgpiZwABUg6JvwABUg4TawABUg559wABUg6hTwABUg57NwABUg4TdwABUg6JzwABUg6hZwABUg7/gwABUg6iLwABUgpiawABUjqPIwABUjoTvwABUjqjuwABUjoTbwABUjqhSwABUjoRDwABUjpnKwABUjoJFwABUjqhRwABUjp5XwABUjq5EwABUjqFlwABUgpibwABUm4TbwABUgpiXwABUnZ6XwABUnaOgwABUnZ6LwABUnaG4wABUnaLzwABUnYP4wABUnZ6AwABUnZ51wABUnb/owABUnb/dwABUnb5iwABUnb/cwABUnahYwABUnZ6qwABUnZ6QwABUnb/wwABUnalNwABUnb/lwABUnb/ywABUnb4fwABUnZ6SwABUnZ6TwABUnb/8wABUnb/9wABUnb//wABUncAAQADAAFSdwABAAcAAVJ2elcAAVJ3AAJEtwABU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epiawABWe4C9wABWepidwABWfQAAwACRPcAAVn+eZcAAVoCYmcAAVoGAvcAAVoFbwABWgZ6lwABWgJiXwABWhZ57wABWhaOTwABWhaOuwABWhZZawABWhYQswABWhalvwABWhcAAQH3AAFaFopvAAFaFqFjAAFaFnqrAAFaFvePAAFaFnrbAAFaAmJrAAFaSo8jAAFaAmJ3AAFaUAMAAVpTAAEB5AMAAkT7AAFaXqGjAAFaYmJnAAFaZgL3AAFaZnqbAAFaZhFLAAFaZmgLAAFaZh1TAAFaZqKvAAFaZhLrAAFaZqSTAAFaYmJrAAFaihGHAAFaioWXAAFaYmJfAAFallvzAAFalqMvAAFaYmJ3AAFaoAADAAJE/wABWqpiZwABWq8AAQILAAFaqqHLAAFatmJnAAFaugpDAAFauom/AAFaugkXAAFauhMLAAFatmJrAAFazo8jAAFazhFLAAFazrkTAAFatmJfAAFa3opvAAFa3vmbAAFa3v93AAFa3vmLAAFa3v9zAAFatmJ3AAFa9AADAAJFAwABWv55owABWwJiawABWwZ6lwABWwYC9wABWwaPIwABWwaFlwABWwJiXwABWxqOTwABWxqOuwABWxpZawABWxp57wABWxoQswABWxiPAAFbGvePAAFbGnrbAAFbGqW/AAFbGopvAAFbGqFjAAFbGnqrAAFbAmJ3AAFbTAADAAJFBwABW1Z5pwABW1piZwABW14bbwABW16ICwABW14C9wABW14RSwABW1piawABW3KG6wABW3KFlwABW3K5EwABW1piXwABW4L/cwABW4L/dwABW1pidwABW4wAAwACRQsAAVuWoK8AAVuaYmcAAVueFb8AAVueGmMAAVufAAECGwABW56iLwABW5piawABW7KOowABW7KPIwABW7J5XwABW7IDtwABW7IJFwABW7IPBwABW5piXwABW84QswABW8yPAAFbzv9zAAFbzv93AAFbzwABAiMAAVvOHHsAAVvOpOMAAVvOetsAAVvNIwABW88AAQInAAFbmmJ3AAFb+AMAAVv7AAECHAMAAkUPAAFcBqGrAAFcCmJnAAFcDhCHAAFcDh1TAAFcDhGHAAFcCmJfAAFcHo5PAAFcHqNDAAFcHqNHAAFcHI8AAVwKYncAAVwwAAMAAkUTAAFcOqHXAAFcPmJrAAFcQo8jAAFcPmJ3AAFcSAADAAJFFwABXFKzlwABXFZiawABXFoCswABXFZiXwABXGMAAQI7AAFcYwABAkMAAVxihZ8AAVxiiOMAAVxjAAECRwABXGKI1wABXGKI3wABXGK0VwABXGKIHwABXGKIIwABXGKF8wABXGKF+wABXGKGBwABXGKGDwABXGL86wABXGL87wABXGL96wABXGL8+wABXGL+EwABXGL9+wABXGL+lwABXGL+CwABXGL9AwABXGL9BwABXGL+GwABXGL+nwABXGL+DwABXGL9DwABXGL9EwABXGL9HwABXGMAAQJ7AAFcYvxLAAFcYwABAn8AAVxjAAECgwABXGMAAQKHAAFcYoufAAFcYounAAFcYwABApMAAVxii1sAAVxitFsAAVxijIcAAVxitGMAAVxitGsAAVxitG8AAVxitHcAAVxjAAECnwABXGL9IwABXGMAAQKjAAFcYvx/AAFcYwABAqcAAVxihZsAAVxi/osAAVxi/I8AAVxiij8AAVxiikcAAVxi+58AAVxiirMAAVxiircAAVxihDsAAVxiiFcAAVxiiGMAAVxiiGsAAVxitEcAAVxiiHMAAVxiiLMAAVxitHsAAVxitIMAAVxijKcAAVxijO8AAVxijJsAAVxijJ8AAVxitIcAAVxitI8AAVxijFMAAVxijHcAAVxijE8AAVxijHsAAVxitD8AAVxihGMAAVxi++cAAVxi/j8AAVxjAAECtwABXGKMNwABXGL+bwABXGL7pwABXGL7jwABXGL7lwABXGL99wABXGL7gwABXGL9LwABXGMAAQK7AAFcYvw/AAFcYvwrAAFcYwABAr8AAVxi+3sAAVxjAAECwwABXGKHpwABXGKHlwABXGKHnwABXGK0kwABXGK0lwABXGMAAQLPAAFcYvxTAAFcYvxrAAFcYvx7AAFcYwABAtcAAVxi/A8AAVxjAAEC2wABXGL8AwABXGL79wABXGKLowABXGKLwwABXGMAAQLfAAFcYof7AAFcYofnAAFcYofrAAFcYofvAAFcYwABAuMAAVxih8MAAVxih9cAAVxihKsAAVxihK8AAVxihJ8AAVxihKMAAVxihJcAAVxjAAEC6wABXGKOkwABXGMAAQLzAAFcYoz3AAFcYoz/AAFcYo0PAAFcYwABAvsAAVxi++8AAVxiiWsAAVxihxcAAVxjAAEDAwABXGKHIwABXGKHUwABXGMAAQMLAAFcYvzjAAFcYoRfAAFcYv5HAAFcYvy/AAFcYwABAw8AAVxihBMAAVxig9cAAVxig+MAAVxjAAEDEwABXGKKdwABXGMAAQMXAAFcYvyHAAFcYwABAxsAAVxi+z8AAVxjAAEDHwABXGL8owABXGMAAQMjAAFcYvynAAFcYvyvAAFcYvy3AAFcYodzAAFcYod/AAFcYoeHAAFcYoW/AAFcYwABAysAAVxi/DMAAVxjAAEDLwABXGKNtwABXGKNbwABXGKNvwABXGMAAQMzAAFcYol7AAFcYoozAAFcYwABAzcAAVxijRMAAVxjAAEDOwABXGL7TwABXGMAAQNDAAFcYoQfAAFcYv4vAAFcYvvLAAFcYwABA0cAAVxijd8AAVxiissAAVxiis8AAVxiitcAAVxijSMAAVxiiwMAAVxiiZ8AAVxiiZMAAVxiiacAAVxihDcAAVxiiZsAAVxi/dMAAVxiibsAAVxiidcAAVxjAAEDWwABXGKMEwABXGKMGwABXGL7XwABXGKOLwABXGKOMwABXGKONwABXGMAAQNfAAFcYo5DAAFcYoxbAAFcYoyDAAFcYogHAAFcYogTAAFcYrRfAAFcYo0rAAFcYonrAAFcYognAAFcYoYXAAFcYoYjAAFcYooXAAFcYoojAAFcYoonAAFcYoubAAFcYovXAAFcYrRPAAFcYoiHAAFcYoy7AAFcYovbAAFcYovfAAFcYovjAAFcYovnAAFcYovzAAFcYov/AAFcYoqHAAFcYoqLAAFcYoafAAFcYosnAAFcYon7AAFcYolDAAFcYo3nAAFcYo4LAAFcYo0zAAFcYo07AAFcYo1DAAFcYolPAAFcYodfAAFcYojvAAFcYokjAAFcYolbAAFcYoc3AAFcYowvAAFcYouTAAFcYouvAAFcYvtXAAFcYvtnAAFcYvtvAAFcYo5TAAFcYo6HAAFcYo6LAAFcYvwXAAFcYvwjAAFcYoWnAAFcYoWzAAFcYocHAAFcYocbAAFcYownAAFcYo13AAFcYo2nAAFcYowjAAFcYotTAAFcYos3AAFcYotHAAFcYoqTAAFcYoqXAAFcYoqjAAFcYoqrAAFcYonjAAFcYwABA2sAAVxijWMAAVxiiJsAAVxjAAEDbwABXGKz9wABXGKOYwABXGKHSwABXGMAAQNzAAFcYwABA3cAAVxjAAEDhwABXGMAAQOPAAFcVmJvAAFg0wABAj8AAVxWYncAAWDYAAMAAkUbAAFg4mJjAAFg5wABBAMAAWDigc8AAWDuYmcAAWDypksAAWDy+vsAAWDy+v8AAWDy+wMAAWDzAAEECwABYPMAAQQPAAFg8wABBBMAAWDuYmsAAWESArMAAWETAAEEFwABYRMAAQQbAAFhEwABBB8AAWETAAEEIwABYRMAAQQnAAFhEwABBCsAAWETAAEEMwABYO5iXwABYTamTwABYTcAAQRTAAFhNwABBHcAAWE3AAEERwABYTcAAQSXAAFhNwABBJsAAWE3AAEEnwABYTcAAQR7AAFhNwABBG8AAWE3AAEEywABYTcAAQRfAAFhNwABBOcAAWE3AAEE3wABYTcAAQUDAAFhNwABBQsAAWE3AAEEZwABYTcAAQTjAAFhNwABBRsAAWE3AAEFHwABYTcAAQUjAAFhNwABBScAAWE3AAEEcwABYTcAAQU7AAFhNwABBTMAAWE2/NcAAWE2hYcAAWE3AAEEQwABYTcAAQSzAAFhNwABBXsAAWE3AAEFgwABYTcAAQWHAAFhNvzbAAFhNwABBZcAAWE2/X8AAWE3AAEFcwABYTcAAQWLAAFhNv17AAFhNwABBZMAAWE3AAEFqwABYTcAAQWbAAFhNwABBaMAAWE3AAEEvwABYTcAAQVPAAFhNwABBesAAWE2+x8AAWE3AAEEqwABYTcAAQSnAAFhNwABBfsAAWE3AAEF/wABYTcAAQYHAAFhNwABBgsAAWE3AAEGGwABYTcAAQYfAAFhNwABBLcAAWE3AAEGOwABYTcAAQY/AAFhNwABBksAAWE3AAEGUwABYTcAAQSvAAFhNwABBlsAAWE3AAEEiwABYTcAAQTTAAFhNwABBmsAAWE3AAEGbwABYTb9UwABYTcAAQSDAAFhNvzfAAFhNwABBn8AAWE3AAEGkwABYTcAAQaHAAFhNwABBp8AAWE2/UsAAWE2hXcAAWE3AAEGowABYTcAAQavAAFhNwABBrMAAWE3AAEF7wABYTcAAQa/AAFhNwABBZ8AAWE3AAEGywABYTcAAQTbAAFhNwABBMcAAWE3AAEFrwABYTcAAQWnAAFhNwABBP8AAWE3AAEGIwABYTcAAQbnAAFhNwABBhMAAWE3AAEFjwABYTb9VwABYTcAAQbrAAFhNwABBvsAAWE3AAEG9wABYTcAAQcHAAFhNwABBycAAWE3AAEHMwABYTcAAQc7AAFhNwABBy8AAWE3AAEHRwABYTcAAQcXAAFhNvsXAAFhNvsPAAFhNwABB1sAAWE3AAEHVwABYTb9TwABYTcAAQdjAAFhNwABB2sAAWE3AAEHswABYTcAAQd7AAFhNwABB8cAAWE3AAEHbwABYTcAAQfDAAFhNoVrAAFhNwABB9cAAWE3AAEH2wABYTcAAQfTAAFhNwACRRsAAWMLAAEH6wABYTcAAQfzAAFhNwABB+MAAWE3AAEH+wABYTcAAQf3AAFhNwABCEMAAWE3AAEIVwABYTcAAQhTAAFhNwABCF8AAWE3AAEIWwABYTcAAQgzAAFhNwABCDcAAWE3AAEIRwABYTcAAQhLAAFhNwABCH8AAWE3AAEITwABYTcAAQiHAAFhNwABCBsAAWE3AAEIjwABYTcAAQiXAAFhNwABCDsAAWE3AAEIFwABYTcAAQg/AAFhNwABCB8AAWE3AAEIIwABYTcAAQbXAAFhNwABCCcAAWE3AAEImwABYTb69wABYTcAAQgrAAFhNwABCC8AAWE3AAEICwABYTb7CwABYTb7BwABYTcAAQVXAAFhNwABCJMAAWE3AAEH/wABYTcAAQivAAFhNwABCAMAAWE3AAEIswABYTcAAQi7AAFhNwABCIsAAWE3AAEHuwABYTcAAQeDAAFhNwABB3MAAWE3AAEI2wABYTcAAQjjAAFhNwABB4cAAWE3AAEHiwABYTcAAQjrAAFhNwABCO8AAWE3AAEI9wABYTcAAQj7AAFhNwABCPMAAWE3AAEI/wABYTcAAQeTAAFhNwABB5cAAWE3AAEHdwABYTb7GwABYTcAAQe/AAFhNwABCBMAAWE3AAEHzwABYTcAAQePAAFhNwABB5sAAWE3AAEHnwABYTcAAQkzAAFhNwABCUMAAWE3AAEJRwABYTcAAQejAAFhNwABBqsAAWE3AAEHqwABYTcAAQenAAFhNwABB68AAWE3AAEJTwABYTcAAQb/AAFhNwABBwMAAWE3AAEHZwABYTcAAQSHAAFhNwABBEsAAWE3AAEETwABYTcAAQQ3AAFhNwABBJMAAWE3AAEJUwABYTcAAQlXAAFhNwABCVsAAWE2WKcAAWE2hW8AAWE3AAEJXwABYTcAAQlnAAFhNwABCW8AAWE3AAEJawABYTcAAQmHAAFhNwABCZ8AAWE3AAEJqwABYTcAAQmvAAFhNwABCaMAAWDuYncAAWSMAAMAAkUfAAFklrObAAFkmmJnAAFknwABCb8AAWSeYvcAAWSciwABZJpiXwABZKyPAAFkmmJ3AAFktAMAAWS3AAEJwAMAAkUjAAFkwoHLAAFkxmJnAAFkyJ8AAWTLAAJFIwABZNCjAAFkyKcAAWTKFa8AAWTKFRMAAWTKGEsAAWTGYl8AAWTojwABZMZidwABZPAAAwACRScAAWT6Yl8AAWT/AAEBNwABZP8AAQE7AAFk/wABAT8AAWT6gdMAAWUOYmcAAWUQnwABZRMAAkUnAAFlGKMAAWUQpwABZRMAAQnPAAFlEwABCdMAAWUTAAEJ1wABZQ5iXwABZTCPAAFlDmJ3AAFlOAADAAJFKwABZUJiYwABZUcAAQQDAAFlQmJfAAFlTwABA5sAAWVPAAEKBwABZUKB1wABZVpiZwABZV8AAQTXAAFlXqKfAAFlXwABBRcAAWVekMMAAWVfAAEFSwABZV8AAQVTAAFlXwABBVsAAWVfAAEFZwABZV8AAQXPAAFlXwABBcsAAWVfAAEJGwABZV4ZcwABZV8AAQTDAAFlXwABBT8AAWVfAAEFQwABZV8AAQXzAAFlXv3LAAFlXwABCdsAAWVfAAEJ3wABZV8AAQnjAAFlXwABCecAAWVfAAEJ6wABZV6GtwABZV6GuwABZV8AAQaPAAFlXv3PAAFlXwABBwsAAWVfAAEJ7wABZV8AAQc/AAFlXwABCfMAAWVfAAEHSwABZV8AAQdPAAFlXwABB1MAAWVfAAEHywABZV8AAQifAAFlXwABCKMAAWVeCa8AAWVfAAEGtwABZV8AAQirAAFlXwABCOcAAWVfAAEJSwABZV8AAkUrAAFmBKMAAWVehrMAAWVfAAEJ9wABZV8AAQn7AAFlXwABCf8AAWVehqsAAWVfAAEKAwABZV6GxwABZV8AAQZnAAFlWmJfAAFmLI8AAWYvAAEE0wABZVpidwABZjgAAwACRS8AAWZCs58AAWZGYmcAAWZInwABZksAAkUvAAFmUKMAAWZIpwABZkoTQwABZkoTOwABZksAAQoPAAFmRmJfAAFmaI8AAWZGYncAAWZwAAMAAkUzAAFmeoHbAAFmfmJnAAFmgJ8AAWaDAAJFMwABZoijAAFmgKcAAWaCGQ8AAWaCFQ8AAWaC+68AAWaDAAEKIwABZoMAAQonAAFmgtKfAAFmgwABCisAAWaDAAEKLwABZoL70wABZoMAAQozAAFmgwABCjcAAWaDAAEKOwABZn5iXwABZsSPAAFmfmJ3AAFmzAADAAJFNwABZtazowABZtpiXwABZt8AAQYTAAFm2mJ3AAFm5AADAAJFOwABZu5iXwABZvKB6wABZvMAAQpHAAFm8wABA+sAAWbzAAED5wABZvKB5wABZvJYZwABZvMAAQPvAAFm8wABA/MAAWbzAAED/wABZvMAAQP3AAFm8wABA/sAAWbygd8AAWbygeMAAWbzAAEKTwABZvMAAQpTAAFm8wABClcAAWbzAAEKWwABZvMAAQpfAAFm8wABCmMAAWbzAAEKZwABZvMAAQpoAwACRT8AAWdKghcAAWdOYmcAAWdQnwABZ1MAAkU/AAFnWKMAAWdQpwABZ1IWdwABZ1MAAQq7AAFnUwABCr8AAWdSGFcAAWdTAAEKwwABZ1MAAQrHAAFnUvxPAAFnUwABCssAAWdS/BMAAWdTAAEKzwABZ1MAAQrTAAFnUwABCtcAAWdTAAEK2wABZ1MAAQrfAAFnUwABCuMAAWdTAAEK5wABZ1IVrwABZ1MAAQrrAAFnUhUfAAFnUoq7AAFnUwABCu8AAWdTAAEK8wABZ1MAAQr3AAFnUrKHAAFnUvwvAAFnUoSnAAFnUwABCvsAAWdSg+sAAWdStLcAAWdSGWsAAWdTAAEK/wABZ1MAAQsDAAFnUheDAAFnUwABCwcAAWdSCE8AAWdSEzMAAWdSjBcAAWdTAAELCwABZ1L7fwABZ1KOPwABZ1KORwABZ1MAAQsPAAFnUwABCxMAAWdOYl8AAWgQjwABZ05idwABaBgDAAFnSrQbAAFoImJnAAFoJoOLAAFoImJfAAFoLoXDAAFoLvs7AAFoLoTDAAFoLoRDAAFoLoVLAAFoLoRvAAFoLoVTAAFoLoNTAAFoLvxjAAFoLn0/AAFoLoNfAAFoLorvAAFoLoPbAAFoLwABCzMAAWgvAAECOwABaC6GnwABaC790wABaC6ErwABaC6FewABaC8AAQM7AAFoLwABAocAAWgu/hMAAWgu/hsAAWgu/pcAAWgu/p8AAWgu/gsAAWgu/g8AAWgu/fsAAWgu+18AAWgujlMAAWgu+2cAAWgu+28AAWgu+58AAWgu+1cAAWgu/KcAAWgu/K8AAWgu/LcAAWgu++cAAWguhJcAAWguhacAAWguhbMAAWguhxcAAWguhyMAAWguhzcAAWgvAAECgwABaC8AAQKnAAFoLoYPAAFoLorPAAFoLoibAAFoLv1zAAFoLrP3AAFoLnnXAAFoImJrAAFpAgKzAAFoImJ3AAFpCAMAAWdLAAELQwABaRJiZwABaRZ/dwABaRZ/ewABaRJiawABaSIOywABaSGHAAFpIgejAAFpIKcAAWkSYl8AAWk2g1MAAWk2g18AAWk3AAELSwABaTcAAkU/AAFpRwABC0cAAWkSYncAAWlMAwABZ0qCCwABaVZiXwABaVqDXwABaVqKxwABaVZidwABaWQDAAFnSoIPAAFpbmJfAAFpcoNfAAFpbmJ3AAFpeAMAAWdKghsAAWmCYmcAAWmGHVMAAWmCYl8AAWmMjwABaYJidwABaZQAAwACRUMAAWmetRMAAWmiYmcAAWmnAAJFQwABaasAAQtbAAFpqwABC18AAWmiYnMAAWm0AwABaaJiawABab5rMwABab5rXwABab5rYwABab5rNwABaaJiXwABadL4dwABadL4cwABadJsRwABadIVywABadIYNwABadK2rwABadK2qwABadMAAkVDAAFp8wABC3cAAWnzAAELewABafMAAQt/AAFp8wABC5MAAWny13sAAWnzAAELcwABafMAAQubAAFp8wABC48AAWmiYncAAWoW+B8AAWmfAAELvwABah5iZwABaiICJwABah5iawABaiprMwABaiprXwABaiprYwABaiprNwABah5iXwABaj74dwABaj74cwABaj5sRwABaj4VywABaj4YNwABah5idwABalQDAAFpnwABC8MAAWpeYmcAAWpiA7cAAWpiFb8AAWpjAAELZwABal5iXwABanCPAAFqXmJ3AAFqehoTAAFqehoUAwACRUcAAWqGYl8AAWqKuicAAWqGuiMAAWqSYmsAAWqWkQMAAWqSYl8AAWqekIMAAWqSYncAAWqkAAMAAkVLAAFqrmJjAAFqswABC98AAWqzAAEL4wABaq5iawABar4HtwABar8AAQyLAAFqvwABDI8AAWquYl8AAWrPAAJFSwABatMAAQx/AAFq0wABDJMAAWrPAAEMgwABas4ZFwABas8AAQyXAAFqzwABDJsAAWqvAAEL5wABau5iZwABavJbswABavMAAQvrAAFq8wABC+8AAWrzAAEL8wABau5icwABawcAAQv7AAFq7mJfAAFrDwABDEMAAWsPAAEMRwABawyPAAFq7mJ3AAFrHwABC/cAAWqvAAEMZwABayZiZwABayifAAFrKgbvAAFrKwABDC8AAWsrAAEMMwABaypZHwABayZiXwABa0IQswABa0EjAAFrQI8AAWsmYmsAAWtSDwcAAWsmYncAAWtYAAMAAkVPAAFrYmJjAAFrZwABDKsAAWtiYl8AAWtvAAENFwABa2MAAQy3AAFrdmJnAAFregoPAAFrewABDLsAAWt7AAEMvwABa3sAAQzDAAFrdmJvAAFrjwABDMcAAWt2Yl8AAWuWWOMAAWuXAAEM0wABa5YdHwABa5UvAAFrlgL/AAFrlmR3AAFrlgKXAAFrlhFnAAFrlgkLAAFrlg/jAAFrlwABDNsAAWuWAq8AAWuWsMsAAWuXAAEM5wABa5Zb+wABa3ZiawABa9YNiwABa9SnAAFr1g9DAAFr1YcAAWvWBVcAAWvWDssAAWt2YncAAWvwAwABa2MAAQzrAAFr+mJnAAFr/g8zAAFr+mJrAAFsBXMAAWwFhwABbAYFVwABbAYOywABbAYMZwABbAYHowABbAYDDwABa/piXwABbCZY4wABbCYCrwABbCYGlwABbCYSPwABbCYMXwABbCYP4wABbCZZAwABbCYNZwABbCZY2wABbCVjAAFsJgdTAAFsJgK3AAFsJlRnAAFsJlkTAAFsJlkXAAFsJli/AAFsJlkPAAFsJljrAAFsJlj/AAFsJlkLAAFsJljnAAFsJlj3AAFsJlkbAAFsJI8AAWv6YncAAWyIAwABa2MAAQzvAAFskmJnAAFslwABDMcAAWyXAAEM8wABbJJiawABbKINbwABbKGHAAFsomIjAAFskmJfAAFssljjAAFssZMAAWyxLwABbLIC/wABbLFbAAFssgKXAAFssgK7AAFssn8XAAFssgLvAAFssn9bAAFsslmDAAFssn9fAAFssgkLAAFssntXAAFssn9nAAFssn9vAAFsshFnAAFssn9jAAFsshhfAAFsslv7AAFsslwHAAFssgVjAAFssn8vAAFssg17AAFssn8zAAFssm7HAAFssn9HAAFssnGrAAFskmJvAAFtJgxnAAFtJgejAAFtJYcAAWySYncAAW00AwABa2MAAQz7AAFtPmJnAAFtQwABDMcAAW0+YmsAAW1KXJMAAW0+Yl8AAW1SWOMAAW1SDF8AAW1RWwABbVIClwABbVIRZwABbVJb8wABbVJb9wABbVJcAwABbVJb+wABbVJcBwABbVIQCwABbVJcDwABbVJcCwABbVJcEwABbVIJCwABbVJUZwABbT5idwABbZQDAAFrYwABDP8AAW2eYmcAAW2iAvcAAW2jAAENAwABbaMAAQ0HAAFtnmJfAAFtsIMAAW2yjrsAAW2eYncAAW28AwABa2MAAQ0TAAFtxmJnAAFtygL3AAFtywABDQMAAW3LAAENBwABbcZiXwABbdiDAAFt2o67AAFtxmJ3AAFt5AADAAJFUwABbe8AAQ0bAAFt8mJnAAFt9wACRVMAAW37AAENHwABbfJiawABbgGHAAFuAgVXAAFuAg7LAAFuAg2LAAFuAKcAAW4CD0MAAW3yYl8AAW4eHR8AAW4fAAEM0wABbh0vAAFuHg/jAAFuHgL/AAFuHmR3AAFuHgKXAAFuHhFnAAFuHgkLAAFuHljjAAFuHwABDNsAAW4eAq8AAW4esMsAAW4fAAEM5wABbh5b+wABbhyPAAFt8mJ3AAFuYAADAAJFVwABbmsAAQ0zAAFubmJnAAFucwACRVcAAW53AAENNwABbm5iawABbn2HAAFufgVXAAFufg7LAAFufXMAAW5uYl8AAW6SDF8AAW6SW/MAAW6SD+MAAW6RWwABbpIClwABbpIRZwABbpIJCwABbpJb9wABbpJb+wABbpJcBwABbpIQCwABbpMAAkVXAAFuwlyHAAFuklwPAAFuklwLAAFuklwTAAFuklwDAAFuklRnAAFukI8AAW5uYncAAW7gAAMAAkVbAAFu6mJnAAFu7wACRVsAAW7zAAEOuwABbupiawABbvsAAQ47AAFu6mJfAAFvAwABDr8AAW8DAAEOywABbwMAAQ7TAAFvAwABDtcAAW7rAAENSwABbxZiXwABbxsAAQ1PAAFvGwABDVcAAW8bAAENWwABbxsAAQ1fAAFvGwABDWMAAW8bAAENawABbxsAAQ1vAAFvGwABDXMAAW8bAAENdwABbxsAAQ2DAAFvGwABDYsAAW8WYmsAAW9LA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QsAARCjAAF1ChwjAAF1CwABEKcAAXULAAEQqwABdQsAARCvAAF1CwABELMAAXUKYssAAXUK7KMAAXULAAEQtwABdQpjFwABdQrYdwABdQq8ywABdQrPbwABdQpjEwABdQqw+wABdQrX4wABdQq82wABdQrPcwABdQq+7wABdQsAARC7AAF1CwABEL8AAXULAAEQwwABdQrbJwABdQq/QwABdQsAARDHAAF1CwABEMsAAXULAAEQzwABdQsAARDTAAF1Cs93AAF1CwABENcAAXULAAEQ2wABdQrPawABdQrPfwABdQrC8wABdQrDAwABdQrC/wABdQq9xwABdQZidwABdjwDAAFzswABEN8AAXZGYl8AAXZLAAEQ4wABdksAARDnAAF2SwABEOsAAXZLAAEQ7wABdksAARDzAAF2RmJ3AAF2YAMAAXOzAAEQ9wABdmpiXwABdm8AARD7AAF2bwABEP8AAXZvAAERAwABdm8AAREHAAF2bwABEQsAAXZqYncAAXaEAwABc7MAAREPAAF2jmJfAAF2kwABERMAAXaTAAERFwABdpMAAREfAAF2kwABEScAAXaTAAERKwABdo5idwABdqgDAAFzswABETMAAXayYl8AAXa3AAERNwABdrJidwABdrwDAAFzswABETsAAXbGYl8AAXbKwvMAAXbKwwMAAXbKwv8AAXbGYncAAXbYAwABc7MAARE/AAF24mJfAAF25sMTAAF25sMfAAF25sMbAAF24mJ3AAF29AMAAXOzAAERQwABdv5iZwABdwLfDwABdwMAAkVrAAF3CwABEUcAAXcLAAERSwABdwsAARFPAAF3CwABEVMAAXcLAAERVwABdwsAARFbAAF3CwABEV8AAXcKzscAAXcLAAERYwABdwsAARFnAAF3CwABEWsAAXcLAAERbwABdwsAARF3AAF3CwABEXsAAXcDAAERcwABdv5iXwABd0oKUwABd0oKMwABd0sAARBbAAF3SsG/AAF3SwABECsAAXdKG+MAAXdLAAJFawABd2cAARG3AAF3ZwABEcsAAXdnAAER2wABd2cAARHfAAF3ZwABEesAAXdnAAESAwABd2cAARH3AAF3ZwABEhMAAXdnAAESMwABd2cAARInAAF3ZwABEksAAXdnAAESUwABd2cAARGjAAF3ZwABErsAAXdnAAESywABd2cAARKzAAF3ZwABEs8AAXdnAAER7wABd2cAARGrAAF3ZwABEzMAAXdnAAETNwABd2cAARF/AAF3ZwABEYMAAXdnAAETKwABd2cAARMnAAF3ZwABEa8AAXdnAAER4wABd0sAARAjAAF3SwABD+8AAXdKXcsAAXdKXfMAAXdKXgMAAXdKvvcAAXdKvOsAAXdK3J8AAXdKBucAAXdKwyMAAXdLAAEQAwABd0sAARAHAAF3SwABEisAAXdLAAEQCwABd0sAARAPAAF3SwABEBMAAXdLAAEQFwABd0q/RwABd0q++wABd0q+/wABd0qwvwABd0q/AwABd0sAARAzAAF3Sr9LAAF3SwABEEcAAXdLAAEQSwABd0sAARBPAAF3SuGTAAF3St8TAAF3SsMfAAF3SsMTAAF3SsMbAAF2/mJrAAF4VwABEZsAAXb+YncAAXhcAwABc7MAARNLAAF4ZmJnAAF4at8PAAF4awACRWsAAXhzAAETTwABeHLfVwABeHLfUwABeHMAARNTAAF4cwABE1cAAXhzAAERVwABeHMAARFbAAF4cwABEV8AAXhyzscAAXhzAAERYwABeHMAARFnAAF4cwABEXcAAXhzAAERewABeGZiXwABeKoKUwABeKoKMwABeKrfHwABeKrfGwABeKsAARBjAAF4qt8vAAF4qt8XAAF4quGfAAF4qwABEFsAAXiqwusAAXiqYssAAXiqYxcAAXiqYxMAAXiqsPsAAXiqvu8AAXirAAJFawABeOsAARNbAAF46wABE2MAAXjrAAETXwABeOsAARNnAAF46wABE9cAAXjrAAET2wABeOsAARPjAAF46wABE/sAAXjrAAET7wABeOsAARNvAAF46wABFAsAAXjrAAET5wABeOsAARIzAAF46wABFC8AAXjrAAEUOwABeOsAARQrAAF46wABFD8AAXjrAAEUEwABeOsAARRHAAF46wABFEsAAXjrAAETawABeOsAARSDAAF46wABFIcAAXjrAAERfwABeOsAARGDAAF46wABFA8AAXjrAAETcwABeOsAARQHAAF46wABE98AAXirAAEQswABeKocIwABeKsAARCrAAF4qwABEHcAAXirAAEQbwABeKsAARBzAAF4qwABEGsAAXiqvucAAXiq3JcAAXiqvM8AAXiqvvMAAXiqwwsAAXirAAEQiwABeKsAARCPAAF4qwABFCcAAXirAAEQkwABeKsAARCXAAF4qwABEJsAAXiqv0MAAXirAAEQywABeKsAARDPAAF4qwABEJ8AAXirAAEQuwABeKsAARDXAAF4qsMDAAF4qsLzAAF4qsL/AAF4ZmJrAAF5zt8LAAF5zt8HAAF5zwABEGcAAXnPAAERmwABec8AAkVrAAF54wABFF8AAXhmYncAAXnoAwABc7IbtwABefJiZwABefYQ7wABefcAAkVrAAF5/wABFJsAAXn+c+8AAXnyYl8AAXoLAAJFawABeg8AARF/AAF6DwABEYMAAXoPAAETKwABeg8AARMnAAF6DwABEa8AAXoPAAER4wABegoKIwABefJiawABei2HAAF58mJ3AAF6NAMAAXOzAAEUnwABej5iZwABekMAAkVrAAF6RmFLAAF6RmFHAAF6PmJfAAF6UwACRWsAAXpXAAERfwABelcAARGDAAF6VwABFKMAAXpXAAEUDwABelcAARNzAAF6VwABFAcAAXpXAAET3wABej5iawABencAAkVrAAF6ewABFF8AAXo+YncAAXqAAwABc7MAARS3AAF6imJnAAF6jJ8AAXqPAAJFawABepSjAAF6jKcAAXqObysAAXqPAAEUuwABeo4PswABeo8AARS/AAF6jgKzAAF6jvx3AAF6jhOjAAF6jhovAAF6jwABFMMAAXqPAAEUUwABeo8AARTHAAF6juvTAAF6jwABFMsAAXqOWrcAAXqOGBcAAXqOEqMAAXqObzcAAXqOby8AAXqKYl8AAXrojwABeopidwABevADAAFzswABFM8AAXr6YmcAAXr8nwABev8AAkVrAAF7BKMAAXr8pwABev4RDwABev5nKwABevpiXwABexiPAAF6+mJ3AAF7IAMAAXOzAAEU0wABeypiZwABeyyfAAF7LwACRWsAAXs0owABeyynAAF7LwABFNcAAXsu598AAXsvAAEU2wABey8AARTfAAF7LwABFOMAAXsqYl8AAXtUjwABeypidwABe1wDAAFzswABFOcAAXtmYmcAAXtonwABe2sAAkVrAAF7cKMAAXtopwABe2pnKwABe2oJmwABe2oPuwABe2sAAQGPAAF7anr3AAF7awABFOsAAXtqGBcAAXtmYl8AAXuYjwABe2ZidwABe6ADAAFzswABFO8AAXuqYmcAAXusnwABe68AAkVrAAF7tKMAAXuspwABe64SWwABe65jbwABe68AARRnAAF7rsCvAAF7qmJfAAF70I8AAXuqYncAAXvYAwABc7MAARTzAAF74mJnAAF75J8AAXvnAAJFawABe+yjAAF75KcAAXvmZysAAXvnAAEBjwABe+JiXwABfACPAAF74mJ3AAF8CAMAAXOym38AAXwSYmcAAXwWAlsAAXwSYmsAAXweDwcAAXwSYl8AAXwlIwABfCSPAAF8EmJ3AAF8MAMAAXOzAAEU+wABfDpiZwABfDyfAAF8PwACRWsAAXxEowABfDynAAF8Ph43AAF8PwABFP8AAXw+o8MAAXw/AAEVAwABfD4U7wABfD7mhwABfD4aBwABfD55twABfD8AARUHAAF8OmJfAAF8dI8AAXw6YncAAXx8AwABc7MAARULAAF8hmJnAAF8iwACRWsAAXyOXPMAAXyGYl8AAXyWaj8AAXyXAAEVDwABfJYZ2wABfJbQLwABfJbQKwABfJYaCwABfJYZ8wABfJYaMwABfJYZ0wABfJbQFwABfIZidwABfMADAAFzswABFRMAAXzKYmcAAXzMnwABfM8AAkVrAAF81KMAAXzMpwABfM4eNwABfM8AART/AAF8zwABFRcAAXzOFO8AAXzPAAEVAwABfM7mhwABfM4aBwABfM55twABfM4T7wABfM8AARUbAAF8zwABFR8AAXzPAAEVIwABfM8AARUnAAF8ymJfAAF9FI8AAXzKYncAAX0cAwABc7MAARUrAAF9JmJnAAF9KwACRWsAAX0uXPMAAX0mYl8AAX03AAEVDwABfTZfdwABfTYZxwABfTYZ0wABfTYZ2wABfTYZ4wABfTYZ8wABfTYaCwABfTYaTwABfTYaMwABfSZidwABfWADAAFzswABFTMAAX1qYmcAAX1vAAJFawABfXJc8wABfXMAARU3AAF9amJfAAF9fgorAAF9amJ3AAF9hAMAAXOzAAEVQwABfY5iZwABfZMAAkVrAAF9luaXAAF9lwABFTcAAX2OYl8AAX2iedsAAX2OYncAAX2oAwABc7MAARVPAAF9smJnAAF9twACRWsAAX27AAEVUwABfbsAARVXAAF9smJfAAF9xwABFAMAAX2yYncAAX3MAwABc7MAARVfAAF91mJnAAF92g+7AAF92wACRWsAAX3jAAEVYwABfeMAARVnA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RbfAAGCCwABFj8AAYICYmsAAYIaAvcAAYICYl8AAYIik6sAAYIiim8AAYICYncAAYIsAAMAAkVzAAGCNmJnAAGCOmibAAGCOwABFucAAYI6aKcAAYI6aKsAAYI7AAEW6wABgjsAARbvAAGCOwABFvMAAYI6aK8AAYI6aLMAAYI6aMMAAYI6aMcAAYI6aMsAAYI68Y8AAYI67E8AAYI7AAEW9wABgjpo2AMAAkV3AAGCfwABFv8AAYKCYmcAAYKEnwABgocAAkV3AAGCjKMAAYKEpwABgoZ03wABgoZ1IwABgoZ2ZwABgoZ2UwABgobxWwABgoZ2cwABgobxewABgoZ1TwABgobxfwABgobxZwABgobxiwABgocAARcDAAGChwABFwcAAYKHAAEXCwABgocAARcPAAGChvGfAAGChwABFxMAAYKHAAEXFwABgoJiXwABguCPAAGCgmJ3AAGC6AMAAYJ/AAEXGwABgvJiXwABgvbQswABgvbx/wABgvbx2wABgvbx5wABgvbxzwABgvbx8wABgvYczwABgvbyHwABgvbyKwABgvbyQwABgvZ7vwABgvbiMwABgvcAARcfAAGC9wABFyMAAYL3AAEXJwABgvcAARcrAAGC9wABFy8AAYL2FsMAAYLyYncAAYNAAwABgn7MhwABg0piawABg07jbwABg061vwABg07pKwABg07pPwABg07pOwABg07pMwABg07VcwABg07pLwABg07VgwABg07pNwABg06JNwABg06xhwABg08AARczAAGDTssHAAGDTs6DAAGDTnhvAAGDTwABFzcAAYNO1U8AAYNPAAEXOwABg04atwABg08AARc/AAGDTqlPAAGDTwABF0MAAYNPAAEXRwABg08AARdLAAGDTgmfAAGDSmJfAAGDuhp7AAGDus3DAAGDuhE3AAGDuptTAAGDur9bAAGDuI8AAYNKYncAAYPUAwABgn8AARdbAAGD3mJnAAGD4libAAGD4gpDAAGD3mJrAAGD7ssHAAGD7g8HAAGD7gmfAAGD3mJfAAGD/SMAAYP+zcMAAYP+GnsAAYP+ETcAAYP+m1MAAYP+v1sAAYPeYncAAYQYAwABgn7UVwABhCJiawABhCbOgwABhCYPBwABhCJiXwABhDEjAAGEMs3DAAGEImJ3AAGEPAMAAYJ/AAEXbwABhEZiZwABhEsAARdzAAGESwACRXcAAYRSWSMAAYRGYnMAAYRYAwABhEZiawABhGK1vwABhGIPBwABhGIJnwABhEZiXwABhHIaewABhHEjAAGEchE3AAGEcr9bAAGEcptTAAGERmJ3AAGEiwACRXcAAYSOGW8AAYJ/AAEXdwABhJZiawABhJquYwABhJrpLwABhJZidwABhKQDAAGCfwABF3sAAYSuYmcAAYSyqZsAAYSzAAJFdwABhLsAARd/AAGErmJrAAGEwq5jAAGEwukzAAGEwqlPAAGEwwABF0MAAYTCDwcAAYTCCZ8AAYSuYnMAAYTcAwABhK5iXwABhObVWwABhObVVwABhOcAAReHAAGE5hp7AAGE5SMAAYTmETcAAYTmv1sAAYTmm1MAAYSuYncAAYULAAJFdwABhQ4ZbwABgn8AAReTAAGFFmJnAAGFGq5jAAGFFmJzAAGFIAMAAYUWYmsAAYUq1XMAAYUqGrcAAYUrAAEXPwABhSqpTwABhSsAARdDAAGFKwABF0cAAYUrAAEXSwABhSoPBwABhSoJnwABhRZiXwABhVIaewABhVEjAAGFUhE3AAGFUr9bAAGFUptTAAGFFmJ3AAGFawACRXcAAYVuGW8AAYJ/AAEXswABhXZicwABhXgDAAGFdmJrAAGFgukrAAGFgnPLAAGFggmfAAGFdmJfAAGFkhp7AAGFkoZHAAGFkhE3AAGFkr9bAAGFdmJ3AAGFpwACRXcAAYWqGW8AAYJ/AAEXuwABhbJicwABhbQDAAGFsmJrAAGFvuk/AAGFvnPLAAGFvg8HAAGFsmJfAAGFzoZHAAGFzSMAAYXOm1MAAYWyYncAAYXfAAJFdwABheIZbwABgn8AARe/AAGF6mJzAAGF7AMAAYXqYmsAAYX26TsAAYX2c8sAAYX2DwcAAYXqYl8AAYYGhkcAAYYFIwABhgabUwABhepidwABhhcAAkV3AAGGGhlvAAGCfwABF8MAAYYiYmcAAYYmdesAAYYmDwcAAYYiYmsAAYYy1YMAAYYxhwABhjIJnwABhiJiXwABhkIaewABhkEjAAGGQwABF8sAAYZCETcAAYZCm1MAAYZCv1sAAYYiYncAAYZcAwABgn8AARfTAAGGZmJnAAGGagpDAAGGZmJrAAGGcnhvAAGGZmJfAAGGehp7AAGGewACRXcAAYaDAAEX1wABhmZidwABhogDAAGCfsyPAAGGkmJnAAGGls37AAGGkmJrAAGGnwABFzcAAYaeDwcAAYaeCZ8AAYaSYl8AAYatIwABhq7NwwABhq4RNwABhq6bUwABhq6/WwABhpJidwABhsQDAAGCfwABF98AAYbOYmcAAYbSD0MAAYbSDwcAAYbOYmsAAYbe6TcAAYbdhwABht4JnwABhs5iXwABhu0jAAGG7s3DAAGG7hE3AAGG7ptTAAGG7r9bAAGGzmJ3AAGHBAMAAYJ/AAEX5wABhw5iZwABhxCnAAGHEg8HAAGHDmJrAAGHHok3AAGHHYcAAYceCZ8AAYcOYl8AAYctIwABhy7NwwABhy4RNwABhy6bUwABhy6/WwABhw5idwABh0QDAAGCfwABF/cAAYdOYmcAAYdSDYsAAYdQpwABh1IPBwABh1MAAkV3AAGHYwABF/sAAYdOYmsAAYdqsYcAAYdphwABh2oJnwABh05iXwABh3kjAAGHes3DAAGHelvzAAGHehE3AAGHeptTAAGHer9bAAGHTmJ3AAGHlAMAAYJ+0G8AAYeeYmcAAYeiZysAAYeeYmsAAYeq1U8AAYeqDwcAAYeqCZ8AAYeeYl8AAYe5IwABh7rNwwABh7oRNwABh7oaewABh7qbUwABh7q/WwABh55idwABh9QDAAGCfwABGBMAAYfeYmcAAYfiAvcAAYfeYmsAAYfrAAEXOwABh+oPBwABh+oJnwABh95iXwABh/kjAAGH+s3DAAGH+hE3AAGH+hp7AAGH+ptTAAGH+r9bAAGH3mJ3AAGIFAMAAYJ/AAEYHwABiB5iZwABiCLUkwABiB5iawABiCsAARc7AAGIKg8HAAGIKgmfAAGIHmJfAAGIOSMAAYg6zcMAAYg6ETcAAYg6GnsAAYg6m1MAAYg6v1sAAYgeYncAAYhUAwABgn8AARgrAAGIXmJrAAGIYwABFzsAAYhiCZ8AAYheYl8AAYhuzcMAAYhuETcAAYhuGnsAAYhum1MAAYhuv1sAAYheYncAAYiEAwABgn7MiwABiI5iZwABiJISFwABiJIPBwABiI5iawABiJ8AARczAAGIngmfAAGInwACRXcAAYirAAEYOwABiI5iXwABiLEjAAGIss3DAAGIshE3AAGIsptTAAGIsr9bAAGIjmJ3AAGIyAMAAYJ+zJcAAYjSYmcAAYjWFHcAAYjWCasAAYjSYl8AAYjhIwABiOLNwwABiOIRNwABiOIaewABiOKbUwABiOK/WwABiNJiawABiP4PBwABiP4JnwABiNJidwABiQgDAAGCfsyTAAGJEmJnAAGJFwABExcAAYkWzPcAAYkSYmsAAYkjAAEYRwABiSIPBwABiSIJnwABiRJiXwABiTEjAAGJMs3DAAGJMhE3AAGJMhp7AAGJMptTAAGJMr9bAAGJEmJ3AAGJTAMAAYJ/AAEYUwABiVZiawABiVrjbwABiVoJnwABiVZiXwABiWYRNwABiWbNwwABiWYaewABiWa/WwABiWabUwABiVZidwABiXwAAwACRXsAAYmGYl8AAYmLAAJFewABiY8AARnXAAGJjwABGdsAAYmGGbMAAYmaYmsAAYme0BsAAYmeya8AAYmfAAEYXwABiZ4d/wABiZ7mdwABiZ7NcwABiZ7qewABiZ7mcwABiZ6OowABiZ8AARhjAAGJnuZ7AAGJnu+vAAGJnwABGGcAAYmeeG8AAYmaYl8AAYnbAAEYbwABidr3jwABidoRNwABidsAAkV7AAGJ6vGrAAGJ6wABGGsAAYmaYncAAYn0AwABiYcAARh7AAGJ/mJnAAGKAwACRXsAAYoHAAEYfwABif5iXwABig8AAkV7AAGKEwABGIMAAYoTAAEYiwABig8AARiHAAGKDwABGI8AAYoPAAEYkwABigyPAAGJ/mJ3AAGKLAMAAYmGGecAAYo2YmcAAYo6WJsAAYo6FHcAAYo2YmsAAYpGzXMAAYpGeG8AAYpG768AAYpGya8AAYpGDwcAAYo2Yl8AAYpfAAEYbwABil8AAkV7AAGKZwABGGsAAYpm8asAAYpnAAEYowABil73jwABil4RNwABil0jAAGKXI8AAYo2YncAAYqEAwABiYYaKwABio5iZwABipJYmwABipIUdwABipLQGwABio5iawABiqLqewABiqLvrwABiqLJrwABiqIPBwABio5iXwABircAARhvAAGKtwACRXsAAYq/AAEYawABir7xqwABir8AARijAAGKtvePAAGKthE3AAGKtSMAAYq0jwABio5idwABitwDAAGJhwABGKsAAYrmYmcAAYrqWJsAAYrmYmsAAYryjqMAAYry768AAYryDwcAAYrmYl8AAYsDAAEYbwABiwMAAkV7AAGLCwABGGsAAYsK8asAAYsC948AAYsCETcAAYsBIwABiwCPAAGK5mJ3AAGLJAMAAYmHAAEYrwABiy5iZwABizCfAAGLMwACRXsAAYs7AAEYswABiy5iawABi0IVvwABi0MAARhjAAGLQg8HAAGLLmJvAAGLUhW/AAGLLmJfAAGLWwACRXsAAYtfAAEYawABi17xqwABi1r3jwABi1kjAAGLWhE3AAGLWI8AAYsuYncAAYt4AwABiYYZ1wABi4JiawABi4bmdwABi4YPBwABi4JiXwABi5L3jwABi5IRNwABi5MAAkV7AAGLnvGrAAGLkI8AAYuCYncAAYuoAwABiYYZzwABi7JiawABi7Yd/wABi7cAARhfAAGLtg8HAAGLsmJfAAGLxvePAAGLxhE3AAGLxwACRXsAAYvS8asAAYvEjwABi7JidwABi9wDAAGJhhn3AAGL5mJnAAGL6hTrAAGL6tAfAAGL6tAjAAGL6hMHAAGL6tAnAAGL6om/AAGL5mJrAAGMBu+vAAGMBuZzAAGMBg8HAAGL5mJfAAGMFwABGG8AAYwXAAJFewABjB8AARhrAAGMHvGrAAGMHwABGKMAAYwW948AAYwWw3cAAYwWETcAAYwVIwABjBSPAAGL5mJ3AAGMQAMAAYmHAAEY+wABjEpiZwABjE4XDwABjEpiawABjFbmewABjFbvrwABjFYPBwABjEpiXwABjGb3jwABjGcAARhvAAGMZwACRXsAAYxzAAEYawABjHLxqwABjHMAARijAAGMZhE3AAGMZSMAAYxkjwABjEpidwABjIwDAAGJhmlHAAGMlmJfAAGMmmo/AAGMmhnbAAGMmtAvAAGMmtArAAGMmhoLAAGMmhnzAAGMmhozAAGMmhnTAAGMmtAXAAGMlmJ3AAGMwAMAAYmHAAEZAwABjMpiXwABjM57vwABjM4Z2wABjM7QLwABjM7QKwABjM4aCwABjM4Z8wABjM4Z0wABjM7QFwABjMpidwABjPADAAGJhwABGQcAAYz6YmcAAYz/AAEYcwABjPpiawABjQbNAwABjPpiXwABjQ8AARkLAAGNDwABGQ8AAY0PAAEZEwABjQ8AARkXAAGNDswLAAGNDnu/AAGNDhnbAAGNDwABGR8AAY0PAAEZIwABjQ8AARknAAGNDwABGSsAAY0PAAEZLwABjQ4Z8wABjQ4aCwABjQ8AARlHAAGNDwABGUsAAY0O0C8AAY0O0CsAAYz6YncAAY1YAwABiYcAARmHAAGNYmJfAAGNZvi7AAGNZwABGR8AAY1nAAEZIwABjWcAARknAAGNZwABGSsAAY1nAAEZLwABjWbQFwABjWJidwABjYQDAAGJhwABGYsAAY2OYl8AAY2SqaMAAY2SsSsAAY2TAAEZHwABjZMAARkjAAGNkwABGScAAY2TAAEZKwABjZMAARkvAAGNktAXAAGNjmJ3AAGNtAMAAYmHAAEZlwABjb5iZwABjcMAAkV7AAGNxwABGZsAAY2+Yl8AAY3OqaMAAY3PAAEZRwABjc8AARmfAAGNvmJ3AAGN3AMAAYmHAAEZpwABjeZiZwABjesAARmrAAGN6wABGa8AAY3rAAEZswABjeZiawABjfrNAwABjeZiXwABjgKpowABjgKxKwABjgMAARmfAAGOAwABGbcAAY4DAAEZEwABjgMAARm7AAGOAsv/AAGOAwABGb8AAY4C7/MAAY4DAAEZwwABjgMAARkXAAGOAwABGccAAY4DAAEZzwABjeZidwABjjgAAwACRX8AAY5CYl8AAY5HAAEaMwABjkcAARpHAAGORwABGlcAAY5HAAEaWwABjkMAARnfAAGOWmJnAAGOXwABGeMAAY5fAAEZ5wABjl8AARnrAAGOWmJfAAGObgcXAAGObtGnAAGObtGjAAGObtGvAAGOWmJ3AAGOgAMAAY5DAAEZ+wABjopiawABjo6/DwABjopidwABjpQDAAGOQwABGf8AAY6eYl8AAY6jAAEaAwABjp5idwABjqgDAAGOQwABGgcAAY6yYl8AAY63AAEaCwABjrcAARoTAAGOsmJ3AAGOwAMAAY5DAAEaFwABjspiXwABjs8AARoPAAGOymJ3AAGO1AMAAY5DAAEaGwABjt5iZwABjuMAAQ6HAAGO4wACRX8AAY7rAAEaHwABjusAARojAAGO6wABGicAAY7eYmsAAY76vw8AAY77AAJFfwABjwLJvwABjvoCWwABjt5idwABjwwAAwACRYMAAY8WYl8AAY8bAAEnFwABjxZkbwABjyJiZwABjycAARqHAAGPJwABGqMAAY8nAAEarwABjycAAR47AAGPJwABHmcAAY8nAAEeawABjycAAkWDAAGPQwABHm8AAY9DAAEerwABj0MAAR63AAGPQwABHrsAAY9DAAEewwABj0MAAR7HAAGPQwABHssAAY9DAAEezwABj0MAAR7TAAGPQtarAAGPQwABHxMAAY9DAAEfFwABj0MAAR8bAAGPQwABHycAAY9DAAEfKwABj0MAAR8vAAGPQwABHzcAAY9DAAEfOwABj0MAAR9HAAGPJwABHnMAAY8nAAEeewABjycAAR6DAAGPJwABHocAAY8nAAEejwABjycAAR6XAAGPJwABHp8AAY8nAAEepwABjybdkwABjybdlwABjycAAR6/AAGPJwABHtcAAY8mdl8AAY8nAAEe3wABjycAAR7nAAGPJwABHusAAY8nAAEe7wABjycAAR7zAAGPJwABHvcAAY8nAAEe+wABjycAAR7/AAGPJwABHwMAAY8nAAEfBwABjycAAR8LAAGPJwABHw8AAY8nAAEfHwABjycAAR8jAAGPJwABHzMAAY8nAAEfQwABjyJiawABkAcAAR9LAAGQBwABH08AAZAGvd8AAZAHAAJFgwABkBa9UwABkBbQEwABkBcAAR93AAGQBwABH3sAAZAHAAEfgwABkAcAAR+LAAGQBwABH48AAZAGs3sAAZAHAAEflwABkAcAAR+fAAGQBwABH6MAAZAHAAEgGwABkAcAASEHAAGPImJfAAGQTwACRYMAAZBTAAEfVwABkFMAAR+nAAGQUwABH68AAZBTAAEfywABkFMAASA3AAGQUwABIEcAAZBTAAEgSwABkFMAASBrAAGQUwABIHcAAZBTAAEgKwABkFMAASAzAAGQUwABIH8AAZBTAAEf/wABkFMAASCXAAGQUwABH9sAAZBTAAEgDwABkFMAASCzAAGQUwABILcAAZBTAAEguwABkFMAASCHAAGQUwABIIMAAZBTAAEgzwABkFMAASDHAAGQUwABH8cAAZBTAAEg4wABkFMAASDvAAGQUwABIL8AAZBPAAEfbwABkE8AAR9zAAGQTwABH7MAAZBPAAEfuwABkE8AAR/DAAGQTwABH9MAAZBPAAEf3wABkE6+IwABkE8AAR/rAAGQTwABH/MAAZBPAAEfzwABkE6+MwABkE8AASATAAGQTwABICMAAZBPAAEgJwABkE8AASAvAAGQTr5TAAGQTr5DAAGQTr5LAAGQTr5bAAGQTr4rAAGQTwABIF8AAZBPAAEgBwABkE8AASADAAGQTwABIGMAAZBPAAEgZwABkE8AASBzAAGQTwABIJsAAZBPAAEfvwABkE6+YwABkE6+awABkE695wABkE4Z6wABkE698wABkE6+AwABkE6/MwABkE6+lwABkE6/KwABkE6+hwABkE6/LwABkE6+jwABkE6/JwABkE6+ewABkE6+OwABkE69+wABkE8AASD7AAGQTwABIP8AAZBPAAEhDwABkE6+EwABkE6+CwABkE6+GwABkE6+cwABkE8AAR/jAAGQTwABIWcAAY8iYncAAZGYAwABjxcAASFvAAGRomJnAAGRpnZfAAGRpwABIXMAAZGnAAEhdwABkacAASF7AAGRpwACRYMAAZG63nMAAZG61qsAAZG7AAEhfwABkaYbYwABkacAASGDAAGRpwABIYcAAZGlhwABkaJiawABkdsAAkWDAAGR3r1TAAGR3t//AAGRomJfAAGR6mRzAAGR6wABIZMAAZHrAAEhmwABkesAASGnAAGR6VsAAZHrAAEhqwABkesAAkWDAAGSBwABIYsAAZHq0LMAAZHqFsMAAZHq8f8AAZHrAAEXLwABkerx2wABkerx5wABkerxzwABkerx8wABkeoczwABkeryHwABkeryKwABkeryQwABkep7vwABkeriMwABkesAARcfAAGR6wABFyMAAZHrAAEXJwABkesAARcrAAGRomJ3AAGSVAMAAY8XAAEhvwABkl5iZwABkmMAAkWDAAGSZwABIcMAAZJnAAEhxwABkmbecwABkmbWqwABkmcAASHPAAGSXmJrAAGSfwACRYMAAZKCvVMAAZKC3/8AAZJeYl8AAZKPAAEhnwABko8AAkWDAAGSlwABIYsAAZKXAAEh0wABkpcAASHXAAGSlwABIesAAZKXAAEh7wABkpcAASH/AAGSlrgjAAGSjvH/AAGSjwABFy8AAZKO8c8AAZKO0LMAAZKOFsMAAZKO8dsAAZKO8ecAAZKO8fMAAZKOHM8AAZKO8h8AAZKO8isAAZKO8kMAAZKOe78AAZKO4jMAAZKPAAEXHwABko8AARcjAAGSjwABFycAAZKPAAEXKwABkl5idwABkvwDAAGPFwABIgMAAZMGYmcAAZMKD5MAAZMGYl8AAZMTAAEhEwABkxJqPwABkxJ7vwABkxIZ8wABkxIaMwABkxLQLwABkxMAAkWDAAGTLwABIgcAAZMSGgsAAZMGYncAAZM4AwABjxcAASILAAGTQmJnAAGTRwACRYMAAZNLAAEiDwABk0sAASITAAGTQmJfAAGTVwABIKMAAZNXAAEgwwABk1cAASCnAAGTVwABIhcAAZNXAAEiGwABk1cAASIjAAGTVwABIicAAZNCYncAAZN0AwABjxcAASIrAAGTfmJrAAGTgpyHAAGTgpyPAAGTgwABH+8AAZODAAEiNwABk4MAASI/AAGTgwABIkcAAZODAAEiTwABk4MAASJTAAGTgwABIlsAAZODAAEhFwABk4MAASEbAAGTgwABImsAAZODAAEicwABk4MAAR9TAAGTfmJ3AAGTvAMAAY8XAAEifwABk8ZiawABk8qchwABk8qcjwABk8sAAR/vAAGTywABIRcAAZPLAAEhGwABk8sAASI3AAGTywABInMAAZPLAAEiUwABk8sAASJrAAGTxmJ3AAGT8AMAAY8XAAEWKwABk/piZwABk/8AASKDAAGT/wABIPMAAZP/AAJFgwABlAsAASKLAAGUCwABIo8AAZP6YmsAAZQW3ZcAAZQW3ZMAAZQWvd8AAZQXAAJFgwABlCcAASKnAAGUJtATAAGT+mJfAAGUMr57AAGUMr6HAAGUMr6PAAGUMr6XAAGUMr5DAAGUMr5TAAGUMr5LAAGUMr5bAAGUMr3zAAGUMr4rAAGUMr4jAAGUMr5zAAGUMr4zAAGUMr5jAAGUMr5rAAGUMr3nAAGUMr4DAAGUMr4LAAGUMr4TAAGUMr4bAAGUMr47AAGUMr37AAGUMhnrAAGUMwABFq8AAZQzAAEWtwABlDMAASKTAAGUMwABIpcAAZQzAAEimwABlDMAASKjAAGUMwABFqsAAZQzAAEiqwABk/pidwABlLADAAGPFwABFi8AAZS6YmcAAZS/AAJFgwABlMMAASN7AAGUwtATAAGUvt2TAAGUvt2XAAGUumJrAAGU1r3fAAGUumJfAAGU3r3nAAGU3hnrAAGU3r57AAGU3r6HAAGU3r6PAAGU3r6XAAGU3r3zAAGU3r37AAGU3r4DAAGU3r4rAAGU3r4TAAGU3r4jAAGU3r4zAAGU3r47AAGU3r4LAAGU3r5LAAGU3r5DAAGU3r5TAAGU3r5bAAGU3r5jAAGU3r5rAAGU3r5zAAGU3r4bAAGUumJ3AAGVPAMAAY8XAAEjfwABlUZiawABlUsAASODAAGVRmJfAAGVUwACRYMAAZVXAAEjhwABlUZidwABlVwDAAGPFwABI5MAAZVmYmcAAZVqvdMAAZVqYEcAAZVrAAEjlwABlWsAASObAAGVawABI58AAZVmYl8AAZWCZHMAAZVmYncAAZWIAwABjxcAASVDAAGVkmJnAAGVlwABJUcAAZWW2YsAAZWWEt8AAZWW33cAAZWXAAJFgwABlasAASVLAAGVkmJrAAGVswABJVcAAZWzAAJFgwABlbsAASVbAAGVkmJvAAGVwwACRYMAAZXHAAElWwABlZJicwABlc8AASVjAAGVzwABJWsAAZWSYl8AAZXbAAJFgwABld8AASVvAAGV3wABJXMAAZXZLwABldlbAAGV2wABI48AAZWSYncAAZX3AAElTwABlfcAASVTAAGPFwABJXcAAZYCYmsAAZYHAAJFgwABlgsAASVbAAGWBhLfAAGWAmJvAAGWFwACRYMAAZYbAAElWwABlgJiXwABliMAAkWDAAGWJwABJXMAAZYCYncAAZYuE7sAAZYvAAElewABjxcAASWDAAGWOmJfAAGWPwABI48AAZY9LwABljpidwABlkgDAAGPFwABJYcAAZZSYmsAAZZXAAEjgwABllJiXwABll8AAkWDAAGWYwABI4cAAZZSYncAAZZoAwABjxcAASWLAAGWcmJfAAGWdr5rAAGWcmJ3AAGWfAMAAY8XAAElnwABloZiZwABlosAASODAAGWilTrAAGWiwACRYMAAZaXAAElowABloZiawABlp8AAR+LAAGWnwABH48AAZafAAEfowABlp8AASAbAAGWnwABH08AAZaGYl8AAZa3AAElqwABlrcAAR+/AAGWtr4rAAGWtwABGgMAAZaGYncAAZbIAwABjxcAASXDAAGW0mJnAAGW1wACRYMAAZbbAAElcwABltcAASWvAAGW0mJfAAGW5wACRYMAAZbrAAElxwABlusAASXPAAGW5wABJdMAAZbSYncAAZb4AwABjxcAASXbAAGXAmJrAAGXBwABI4MAAZcCYl8AAZcPAAJFgwABlxMAASOHAAGXAmJ3AAGXGAMAAY8XAAEl3wABlyJiZwABlycAAkWDAAGXKwABJeMAAZciYl8AAZczAAEf0wABlyJidwABlzgDAAGPFwABJesAAZdCYl8AAZdGvmsAAZdCYncAAZdMAwABjxcAASXvAAGXVmJnAAGXW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AGiAmw7AAGiAhl3AAGiAwABLK8AAaICEQ8AAaH2Yl8AAaIjAAEspwABoiMAASyrAAGiIwABLLMAAaIjAAEstwABofLDKwABojZiZwABojoGwwABojoU1wABojZiawABokaG8wABokZsOwABokYZdwABokYPBwABokcAASyvAAGiRhEPAAGiNmJfAAGiYwABLKcAAaJhIwABomMAASyrAAGiYI8AAaI2YncAAaJ0AwABofMAASy7AAGifmJnAAGighEPAAGifmJrAAGiiobzAAGiimw7AAGiihl3AAGiig8HAAGifmJfAAGinwABLKcAAaKdIwABopyPAAGifmJ3AAGirAADAAJFmwABorbDLwABorpiZwABor4PnwABor8AASzHAAGivwABLMsAAaK/AAEszwABor8AASzTAAGivwABLNcAAaK+VaMAAaK+7GsAAaK6YmsAAaLi7G8AAaLi3PsAAaLi7McAAaLijwsAAaLjAAEs4wABouKpNwABouLs0wABouLSvwABouMAASzzAAGi4g8HAAGiumJzAAGjDAMAAaMOvFcAAaK6Yl8AAaMavFsAAaMa7MMAAaMbAAEs3wABoxrc/wABoxrsvwABoxiPAAGjGX8AAaMZIwABoxrsswABoxsAASz/AAGiumJ3AAGjRwABLNsAAaK3AAEtAwABo05iZwABo1KpNwABo1MAAkWbAAGjWwABLQcAAaNOYmsAAaNijwsAAaNjAAEs4wABo2LsbwABo2Lc+wABo2LsxwABo05iXwABo3rswwABo3rc/wABo3rsvwABo05idwABo4gDAAGjilU8AwACRZ8AAaOWYmcAAaObAAJFnwABo58AAS5nAAGjmVsAAaObAAEuawABo5sAAS5vAAGjmwABLnMAAaObAAEudwABo5sAAS57AAGjmwABLn8AAaOaVpcAAaObAAEF4wABo5sAAS6DAAGjmwABLocAAaObAAEuiwABo5sAAS6PAAGjmwABLpMAAaObAAEulwABo5pWuwABo5pWvwABo5qGRwABo5qJ/wABo5pgwwABo5sAAS6bAAGjmwABLp8AAaOaVscAAaOaVssAAaOaEC8AAaObAAEuAwABo5pfOwABo5ZiXwABpBMAAkWfAAGkFwABLqMAAaQXAAEupwABpBcAAS6/AAGkEwABLrcAAaQTAAEuuwABpBMAAS7DAAGkEwABLscAAaQTAAEuywABpBMAAS7PAAGkEwABLtMAAaQTAAEu1wABpBLpMwABpBLVcwABpBLVgwABpBLpKwABpBK1vwABpBKpowABpBMAAS7bAAGkEwABLuMAAaQTAAEu7wABpBMAAS7zAAGkEwABLvcAAaOXAAEtEwABpHJiawABpHYC9wABpHJidwABpHwDAAGjlwABLRcAAaSGYl8AAaSKDWcAAaSGYncAAaSQAwABo5cAAS0bAAGkmmJfAAGkng1nAAGknrz/AAGkmmJ3AAGkqAMAAaOXAAEtHwABpLJiZwABpLYC9wABpLJiXwABpL4NZwABpLJidwABpMQDAAGjlwABLScAAaTOYmcAAaTSAvcAAaTOYl8AAaTaDWcAAaTOYncAAaTgAwABo5cAAS0zAAGk6mJnAAGk7gL3AAGk6mJfAAGk9g1nAAGk6mJ3AAGk/AMAAaOXAAEtNwABpQZiXwABpQoNZwABpQsAAS1HAAGlBmJ3AAGlFAMAAaOXAAEtSwABpR5iZwABpSIC9wABpR5iXwABpSsAAS1HAAGlKrz/AAGlHmJ3AAGlNAMAAaOXAAEtTwABpT5iZwABpUIC9wABpT5iXwABpUsAAS1HAAGlSrz/AAGlPmJ3AAGlVAMAAaOXAAEtUwABpV5iZwABpWIC9wABpV5iXwABpWsAAS1HAAGlarz/AAGlXmJ3AAGldAMAAaOXAAEtVwABpX5iZwABpYIC9wABpX5iXwABpYsAAS1HAAGlirz/AAGlfmJ3AAGllAMAAaOXAAEtWwABpZ5iZwABpaIC9wABpZ5iXwABpaoNZwABpasAAS1HAAGlqrz/AAGlnmJ3AAGluAMAAaOXAAEtZwABpcJiXwABpcYNZwABpccAAS1zAAGlwmJ3AAGl0AMAAaOXAAEtdwABpdpiZwABpd4C9wABpdpiXwABpecAAS1zAAGl5rz/AAGl2mJ3AAGl8AMAAaOXAAEtewABpfpiZwABpf4C9wABpfpiXwABpgcAAS1zAAGmBrz/AAGl+mJ3AAGmEAMAAaOXAAEtfwABphpiXwABph4NZwABph8AAS2TAAGmHwABLZcAAaYfAAEtRwABph8AAS2PAAGmGmJ3AAGmNAMAAaOXAAEtmwABpj5iZwABpkIC9wABpj5iXwABpksAAS1HAAGmSwABLY8AAaZKvP8AAaY+YncAAaZYAwABo5cAAS2fAAGmYmJnAAGmZgL3AAGmYmJfAAGmbwABLUcAAaZvAAEtjwABpm68/wABpmJidwABpnwDAAGjlwABLaMAAaaGYmcAAaaKAvcAAaaGYl8AAaaTAAEtRwABppMAAS2PAAGmkrz/AAGmhmJ3AAGmoAMAAaOXAAEtpwABpqpiZwABpq4C9wABpqpiXwABprcAAS1HAAGmtwABLY8AAaa2vP8AAaaqYncAAabEAwABo5cAAS2rAAGmzmJnAAGm0gL3AAGmzmJfAAGm2wABLUcAAabbAAEtjwABptq8/wABptsAAS2XAAGmzmJ3AAGm7AMAAaOXAAEttwABpvZiZwABpvoC9wABpvZiXwABpwMAAS1HAAGnAwABLY8AAacDAAEtkwABpwK8/wABpvZidwABpxQDAAGjlwABLbsAAaceYmcAAaciAvcAAaceYl8AAacqDWcAAacqvP8AAaceYncAAac0AwABo5cAAS3HAAGnPmJfAAGnQg1nAAGnQwABLUcAAadDAAEtjwABpz5idwABp1ADAAGjlwABLcsAAadaYmcAAadeAvcAAadaYl8AAadnAAEtRwABp2cAAS2PAAGnZrz/AAGnWmJ3AAGndAMAAaOXAAEtzwABp35iZwABp4IC9wABp35iXwABp4sAAS1HAAGniwABLY8AAaeKvP8AAad+YncAAaeYAwABo5cAAS3TAAGnomJnAAGnpgL3AAGnomJfAAGnrwABLUcAAaevAAEtjwABp668/wABp6JidwABp7wDAAGjlwABLdcAAafGYmcAAafKAvcAAafGYl8AAafTAAEtRwABp9MAAS2PAAGn0rz/AAGnxmJ3AAGn4AMAAaOXAAEt2wABp+piZwABp+4C9wABp+piXwABp/YNZwABp/a8/wABp+pidwABqAADAAGjlwABLd8AAagKYmcAAagOAvcAAagKYl8AAagWDWcAAagWvP8AAagKYncAAaggAwABo5cAAS3rAAGoKmJnAAGoLgL3AAGoKmJfAAGoNg1nAAGoNrz/AAGoKmJ3AAGoQAMAAaOXAAEt7wABqEpiZwABqE4C9wABqEpiXwABqFYNZwABqFa8/wABqEpidwABqGADAAGjlwABLf8AAahqYmcAAahuAvcAAahqYl8AAah2DWcAAahqYncAAah8AwABo5cAAS4jAAGohmJnAAGoigL3AAGohmJfAAGokg1nAAGohmJ3AAGomAMAAaOXAAEuJwABqKJiZwABqKYPQwABqKJiXwABqK7NwwABqKJidwABqLQDAAGjlwABLisAAai+YmcAAajDAAEuLwABqMMAAS4zAAGowwABLjcAAajDAAEuOwABqMMAAS4/AAGowwABLkMAAajDAAEuRwABqMMAAS5PAAGowwABLlcAAajDAAEuXwABqMMAARL3AAGowwABEvsAAajCxJ8AAai+YmsAAaj6sYcAAai+Yl8AAakCzcMAAai+YncAAakIAAMAAkWjAAGpEsRHAAGpFmJnAAGpGwACRaMAAakeWSMAAakWYnMAAakmvFcAAakWYl8AAakuvFsAAakuy9cAAakvAAEu/wABqS8AAS8DAAGpLwABIFsAAakvAAEvCwABqS7L0wABqS8AAS8PAAGpFmJrAAGpUwABLwcAAakS8LcAAalaYmcAAalfAAJFowABqWJZIwABqVpicwABqWq8VwABqVpiXwABqXK8WwABqXMAAS8TAAGpcwABLxcAAalzAAEvGwABqXMAAS8fAAGpcwABIDsAAalzAAEgPwABqXMAAS8jAAGpcwABLw8AAalzAAEvJwABqXMAAS8rAAGpcwABLy8AAalzAAEvMwABqXMAAS83AAGpEwABLzsAAamuYl8AAamzAAEvPwABqbMAAS9HAAGpswABL0sAAamzAAEvUwABqbIKIwABqa5idwABqcgDAAGpEu73AAGp0mJfAAGp1wABL1cAAanXAAEvWwABqdcAAS9fAAGp1wABL2MAAanWCiMAAanSYncAAansAwABqRMAAS9nAAGp9mJnAAGp+wACRaMAAan+748AAan7AAEvawABqfsAAS9vAAGp+wABL3MAAan7AAEvdwABqfsAAS97AAGp9mJfAAGqGwABLz8AAaobAAEvRwABqhsAAS9LAAGqGwABL1MAAaoaCiMAAaobAAEvpwABqfZidwABqjQDAAGpEwABL6sAAao+YmcAAapCD58AAapDAAJFowABqkrHxwABqkMAAS9rAAGqQwABL28AAapDAAEvcwABqkMAAS93AAGqQwABL3sAAao+YnMAAapnAAEvswABqma8VwABqj5iXwABqnK8WwABqnLL1wABqnMAAS7/AAGqcwABLwMAAapzAAEvCwABqnLL0wABqnMAAkWjAAGqjwABL8sAAapzAAEvDwABqnMAASBbAAGqPmJrAAGqnwABLwcAAao+YncAAaqkAwABqRMAAS/PAAGqrmJnAAGqswACRaMAAaq239cAAaqzAAEv0wABqrMAAS/XAAGqswABL9sAAaqzAAEv3wABqq5iXwABqs8AAS9jAAGqzwABL1cAAarPAAEvWwABqs8AAS9fAAGqzgojAAGqrmJ3AAGq5AMAAakTAAEv7wABqu5iZwABqvIPnwABqvMAAkWjAAGq+wABL/cAAar639cAAarzAAEv0wABqvMAAS/XAAGq8wABL9sAAarzAAEv3wABqu5icwABqxcAAS+zAAGrFrxXAAGq7mJfAAGrIrxbAAGrIwABLysAAasiy9cAAasjAAEu/wABqyMAAS8DAAGrIwABLwsAAasiy9MAAasjAAEgWwABqyMAAS8nAAGrIwABLy8AAasjAAEvMwABqyMAAkWjAAGrUwABL8sAAatTAAEwGwABq1MAATATAAGrUwABMBcAAatTAAEwKwABqyMAAS8PAAGrIwABIDsAAasjAAEgPwABqyMAAS8jAAGrIwABLxMAAasjAAEvFwABqyMAAS8bAAGrIwABLx8AAasjAAEvNwABqu5iawABq48AAS9vAAGrjwABL3cAAauPAAEvcwABq48AAS97AAGrjwABLwcAAauPAAEvawABq48AAkWjAAGrqsfHAAGq7mJ3AAGrsAMAAakTAAEwPwABq7piZwABq74S3wABq78AAS/HAAGrumJzAAGryAMAAau6YmsAAavSBsMAAavSDwcAAau6Yl8AAavdIwABq9yPAAGrumJ3AAGr6lU8AwACRacAAavyYl8AAav3AAExYwABq/MAATBLAAGr/mJnAAGsAg+fAAGsAwACRacAAawLAAEwUwABq/5icwABrBK8VwABq/5iXwABrBq8WwABrBsAATBjAAGsGwABMGcAAav+YncAAawoAwABrCpVPwABq/MAATBzAAGsNmJnAAGsOg+fAAGsOwACRacAAaxDAAEwewABrEMAATB/AAGsQwABMIMAAaxDAAEwhwABrEMAATCLAAGsNmJfAAGsWrxbAAGsWwACRacAAaxjAAEwowABrFsAARE3AAGsWwABMK8AAaxbAAEwtwABrFsAATC7AAGsWwABML8AAaxbAAEwwwABrFsAATDHAAGsWwABMMsAAaxbAAEwzwABrFsAATDTAAGsWwABMNcAAaxbAAEw2wABrFsAATDjAAGsWwABMOsAAaxbAAEw8wABrDZiawABrKaqtwABrDZidwABrKwDAAGsrrxXAAGr8wABMPsAAay6YmcAAay/AAEw/wABrL6NgwABrL4JmwABrL8AATCnAAGsvwABMKsAAay6Yl8AAazXAAJFpwABrNsAATEDAAGs2wABMQ8AAazWX1cAAazXAAExFwABrNcAATEbAAGs1hiXAAGs1hjvAAGs1hjTAAGsumJ3AAGs/AMAAavzAAExIwABrQZiZwABrQoPnwABrQrOdwABrQqhAwABrQsAAkWnAAGtGwABMSsAAa0LAAExBwABrQsAATELAAGtCo3zAAGtCo4jAAGtBmJzAAGtMrxXAAGtBmJfAAGtOrxbAAGtOwABMRMAAa04jwABrQZiawABrUpkywABrQZidwABrVADAAGr8wABMU8AAa1aYmcAAa1eCRcAAa1ejY8AAa1ejfMAAa1ejiMAAa1aYmsAAa1yAvcAAa1aYl8AAa14jwABrVpidwABrYADAAGr8wABMVsAAa2KYmcAAa2OAvcAAa2OzncAAa2PAAEwkwABrYpiawABrZ8AAkWnAAGtoqV3AAGtimJfAAGtqI8AAa2KYncAAa2wAwABq/MAATFfAAGtumJnAAGtvg+7AAGtvwACRacAAa3GSLMAAa26Yl8AAa3PAAEw9wABrbpiawABrdcAAQGPAAGtumJ3AAGt3AADAAJFqwABreZiZwABresAAkWrAAGt7wABMZ8AAa3vAAExpwABreZiXwABrfsAATGrAAGt5uETAAGuAmJnAAGuBhH7AAGuBgL3AAGuAmJrAAGuEgkzAAGuEh2PAAGuEh2DAAGuEh3bAAGuEh3fAAGuAmJfAAGuKh27AAGuKh3HAAGuKh3XAAGuKh2rAAGuKh3nAAGuKh3vAAGuKh4rAAGuAmJ3AAGuSAMAAa3nAAExmwABrlJiZwABrlYdfwABrlJiawABrl4ddwABrlJidwABrmQAAwACRa8AAa5uYmcAAa5zAAEyHwABrm8AATHDAAGuemJnAAGufgL3AAGufpSvAAGuemJfAAGuiI8AAa56YncAAa6QAwABrm8AATHPAAGummJnAAGunhEPAAGungL3AAGunhBrAAGummJrAAGurtJrAAGummJfAAGutI8AAa6aYncAAa68AwABrm8AATHXAAGuxmJnAAGuyhEPAAGuygL3AAGuxmJfAAGu1I8AAa7GYncAAa7cAwABrm8AATHfAAGu5mJnAAGu6hEPAAGu6hP/AAGu6wACRa8AAa70owABrvcAATHjAAGu5mJrAAGvAgL3AAGvApy7AAGvArErAAGvAhB3AAGvAhBrAAGvAhTXAAGvAhTPAAGvAssHAAGvAh33AAGvAh4DAAGvAhQLAAGvAhBnAAGvAh4HAAGvAwACRa8AAa86pXcAAa7mYl8AAa9AjwABruZidwABr0gDAAGubwABMecAAa9SYmcAAa9W0oMAAa9WEH8AAa9WFVMAAa9SYncAAa9kAwABrm8AATHrAAGvbmJnAAGvchB3AAGvbmJrAAGveh4DAAGvehQLAAGvehBnAAGveh4HAAGvesvLAAGvewACRa8AAa+SpXcAAa9uYncAAa+YAwABrm8AATHvAAGvomJrAAGvptEfAAGvps03AAGvomJ3AAGvsAMAAa5vAAEx8wABr7piZwABr77LywABr7piawABr8bRHwABr8bNNwABr7pidwABr9ADAAGubwABMfcAAa/aYmcAAa/eEGsAAa/aYmsAAa/mywcAAa/nAAJFrwABr+6ldwABr9pidwABr/QDAAGubwABMfsAAa/+YmcAAbACEGsAAa/+YmsAAbAKFM8AAbALAAJFrwABsBKldwABr/5idwABsBgDAAGubwABMf8AAbAiYmcAAbAmEGsAAbAiYmsAAbAusSsAAbAuFNcAAbAvAAJFrwABsDqldwABsCJidwABsEADAAGubwABMgMAAbBKYmcAAbBOsSsAAbBOEHcAAbBKYmsAAbBaHfcAAbBbAAJFrwABsGKldwABsEpidwABsGgDAAGubwABMgcAAbByYmcAAbB20ncAAbB2AvcAAbB0nwABsHJiXwABsISPAAGwcmJ3AAGwjAMAAa5uzJsAAbCWYmcAAbCaAvcAAbCazncAAbCbAAEyDwABsJoPuwABsJoU7wABsJZiXwABsLCPAAGwlmJ3AAGwuAMAAa5vAAEyFwABsMJiZwABsMbSdwABsMYC9wABsMSfAAGwxhW/AAGwxhpjAAGwwmJfAAGw3I8AAbDCYncAAbDkAAMAAkWzAAGw7mJfAAGw8wABMrMAAbDzAAEytwABsO8AATInAAGw/mJnAAGxAgL3AAGxAtDzAAGxAmIbAAGxAhFLAAGw/mJrAAGxFgmfAAGw/mJfAAGxHhE3AAGw/mJ3AAGxJAMAAbDvAAEyKwABsS5iZwABsTIJnwABsTLQ8wABsTJiGwABsTIRSwABsTIC9wABsTLOKwABsS5iXwABsUyPAAGxLmJ3AAGxVAMAAbFWVT8AAbDvAAEyLwABsWJiZwABsWa6awABsWJidwABsWwDAAGw7wABMjMAAbF2YmcAAbF6wMMAAbF6G2cAAbF60QMAAbF6EgsAAbF6Eg8AAbF6EhcAAbF6ZNMAAbF60QsAAbF6wwcAAbF60hMAAbF6Az8AAbF6B48AAbF7AAEyNwABsXZiXwABsbIRNwABsXZidwABsbgDAAGw7wABMj8AAbHCYmcAAbHG0hcAAbHGYhsAAbHG0hsAAbHG0h8AAbHG0iMAAbHG0icAAbHG0isAAbHG0i8AAbHG0jcAAbHG0jsAAbHG0j8AAbHG0kMAAbHG0kcAAbHCYl8AAbH+ETcAAbHCYncAAbIEAwABsO4iSwABsg5iZwABshICswABshLQtwABshLQvwABshISDwABshISCwABsg5iawABsioFVwABsg5iXwABsjIRNwABsg5idwABsjgDAAGyOlU/AAGw7wABMkcAAbJGYmcAAbJKC48AAbJKZd8AAbJGYl8AAbJWETcAAbJGYncAAbJcAwABsl5VPwABsO8AATJTAAGyamJnAAGybhBrAAGybtEDAAGybhIXAAGyamJfAAGyfhE3AAGyamJ3AAGyhAMAAbKGVT8AAbDvAAEyWwABspJiZwABspWrAAGylgozAAGylgbDAAGykmJ3AAGypAMAAbDvAAEyXwABsq5iZwABsrIKTwABsq5iXwABsroRNwABsq5idwABssADAAGywlU/AAGw7wABMmcAAbLOYmcAAbLSumsAAbLOYncAAbLYAwABstpVPwABsO6lzwABsuZiZwABsuoKQwABsuqFEwABsurRCwABsuoKTwABsuoQdwABsuoUHwABsuZiXwABswYRNwABsuZidwABswwDAAGzDlU/AAGw7wABMm8AAbMaYmcAAbMeCkMAAbMaYl8AAbMmETcAAbMaYncAAbMsAwABsy5VPwABsO8AATJ3AAGzOmJnAAGzPrprAAGzOmJ3AAGzRAMAAbNGVT8AAbDvAAEyewABs1JiZwABs1cAATJ/AAGzVwABMoMAAbNXAAEyhwABs1cAATKLAAGzVtE3AAGzVogLAAGzVtELAAGzVgpDAAGzVhTrAAGzVrYzAAGzVmojAAGzVtErAAGzVtEzAAGzVgpPAAGzUmJfAAGzkhE3AAGzUmJ3AAGzmAMAAbOaVT8AAbDvAAEykwABs6ZiZwABs6oJqwABs6ZiXwABs7IRNwABs6ZidwABs7gDAAGzulU/AAGw7tADAAGzxmJnAAGzygkXAAGzyrMPAAGzxmJ3AAGz1AMAAbDvAAEynwABs95iZwABs+IC9wABs+IKQwABs+KyNwABs95idwABs/ADAAGw7wABMqMAAbP6YmcAAbP+EGcAAbP+EHcAAbP+EHsAAbP+EH8AAbP6YncAAbQQAwABsO8AATKnAAG0GmJnAAG0HJ8AAbQfAAJFswABtCSjAAG0HKcAAbQeEQ8AAbQe0MMAAbQeCasAAbQeElMAAbQeGBcAAbQezisAAbQeGgcAAbQe0T8AAbQaYl8AAbRQjwABtBpidwABtFgDAAGw7wABMqsAAbRiYl8AAbRnAAEyOwABtGbC0wABtGYSgwABtGYT0wABtGYUUwABtGYYHwABtGbQswABtGYTDwABtGcAATKbAAG0ZwABMk8AAbRiYncAAbSQAwABsO8AATKvAAG0mmJfAAG0nwABMjsAAbSewtMAAbSeEoMAAbSeE9MAAbSeFFMAAbSeGB8AAbSe0LMAAbSeEw8AAbSfAAEyTwABtJ8AATKbAAG0mmJ3AAG0yAADAAJFtwABtNJiXwABtNcAAkW3AAG02wABM6sAAbTTAAEyuwABtOJiZwABtObfdwABtOJiXwABtO4i+wABtO8AATLXAAG07wABMr8AAbTvAAEF/wABtO8AATLLAAG07wABMs8AAbTvAAEEswABtO8AATLbAAG07wACRbcAAbUTAAEy8wABtO8AATLDAAG07wABMwcAAbTvAAEzCwABtO8AATLHAAG07wABMucAAbTvAAEy6wABtOJidwABtTADAAG00wABMzcAAbU6YmcAAbU+0dcAAbU/AAEzOwABtT8AATM/AAG1OmJfAAG1TwABM0MAAbVOIvsAAbVPAAJFtwABtVsAATNPAAG1WwABM1MAAbVbAAEzcwABtVsAATN3AAG1WwABM3sAAbVbAAEzjwABtVsAATOXAAG1WwABM58AAbVbAAEzkwABtU8AATI7AAG1TsLTAAG1ThKDAAG1ThPTAAG1ThRTAAG1ThgfAAG1TtCzAAG1TwABMpsAAbVOEw8AAbVPAAEyTwABtTpidwABtagDAAG00wABM6MAAbWyYmcAAbW2IvcAAbW2B98AAbWyYncAAbXAAwABtNMAATOnAAG1ymJnAAG1zgmfAAG1zs5rAAG1ymJrAAG12wABMw8AAbXKYncAAbXgAAMAAkW7AAG16mJnAAG17wACRbsAAbXzAAE0KwABtfMAATQvAAG18wABNDMAAbXzAAE0NwABtepiXwABtgZVKwABtgYcQwABtepcrwABthJiZwABthYQ7wABthJiXwABth8AATOzAAG2HwABM78AAbYfAAEzwwABth8AATI7AAG2HsLTAAG2HwACRbsAAbY3AAEzjwABtjcAATPTAAG2NwABM9cAAbY3AAEzlwABtjcAATOfAAG2NwABM8sAAbY3AAEzzwABth4SgwABth4T0wABth4UUwABth4YHwABth7QswABth8AATKbAAG2HhMPAAG2HwABMk8AAbYSYncAAbZ0AwABtesAATPbAAG2fmJnAAG2gg0TAAG2fmJfAAG2iwABM98AAbaLAAEz4wABtosAATPnAAG2ig53AAG2iwABNAsAAbaLAAJFuwABtqMAATQPAAG2owABNBcAAbajAAE0GwABtqMAATQjAAG2owABNCcAAbajAAE0AwABtqMAATQTAAG2imLLAAG2imMXAAG2imMbAAG2ir9DAAG2iwABM+sAAbaLAAEz8wABtopjEwABtosAATPvAAG2fmJ3AAG24AADAAJFvwABturfxwABtu5iZwABtvMAAkW/AAG29t5nAAG29wABND8AAbb3AAE0QwABtu5iXwABtwa9YwABtwbgowABtwcAATR3AAG3BwABNHsAAbbuYncAAbcYAwABtusAATR/AAG3ImJnAAG3JhN3AAG3JtDnAAG3ImJ3AAG3MAMAAbbrAAE0gwABtzpiZwABtz5Y8wABtz8AATRzAAG3OmJrAAG3SwABNIcAAbc6YncAAbdQAwABtusAATSLAAG3WmJnAAG3XljzAAG3XhRfAAG3WmJfAAG3aI8AAbdaYncAAbdwAwABtusAATSXAAG3emJnAAG3fJ8AAbd/AAJFvwABt4SjAAG3fKcAAbd+6jcAAbd+Fk8AAbd+FXcAAbd/AAE0pwABt3piXwABt6CPAAG3emJ3AAG3qAMAAbbqFRMAAbeyYmcAAbe2CZ8AAbe0nwABt7YC9wABt7YCWwABt7JiawABt8rSvwABt7JiXwABt9CPAAG3smJ3AAG32uo3AAG32hZPAAG32hV3AAG32wABNKcAAbbq8K8AAbfuYmcAAbfyD58AAbfzAAJFvwABt/sAATSzAAG37mJzAAG4ArxXAAG4Ali7AAG37mJfAAG4DrxbAAG4DtDvAAG37mJ3AAG4GwACRb8AAbgeAtcAAbbrAAE1NwABuCZiZwABuCoPnwABuCpY8wABuCsAATTrAAG4KwABNPMAAbgrAAEhrwABuCsAATUTAAG4KwABNQsAAbgrAAE1KwABuCZicwABuE8AATU/AAG4JmJfAAG4VrxbAAG4VI8AAbgmYmsAAbhjAAE1JwABuGMAATTnAAG4YwABNG8AAbgmYncAAbhwAAMAAkXDAAG4ewABNV8AAbh+YmcAAbiCBk8AAbh+Yl8AAbiJWwABuIoKIwABuH5idwABuJQAAwACRccAAbieYl8AAbijAAE13wABuKMAATXvAAG4nwABNWcAAbiuYmcAAbizAAJFxwABuLZccwABuLIC9wABuLMAATVrAAG4swABNW8AAbizAAE1cwABuLLgtwABuLLguwABuLLgvwABuLLgwwABuLLgxwABuLLgywABuLLgzwABuLMAATV3AAG4swABNXsAAbizAAE1fwABuLMAATWDAAG4swABNYcAAbizAAEsIwABuLMAATWLAAG4swABNY8AAbiwpwABuLMAATWTAAG4swABNZcAAbizAAE1mwABuK5iawABuRifAAG4rmJ3AAG5IAMAAbifAAE1nwABuSpiZwABuS8AAkXHAAG5MlkjAAG5KmJzAAG5OrxXAAG5KmJfAAG5QrxbAAG5QwABNaMAAblDAAE1pwABuUMAATWrAAG5QwABNa8AAblDAAE0uwABuUMAATWzAAG5QwABNbcAAblC3TcAAblC3T8AAblC3iMAAblC3icAAblCzZ8AAblCzZcAAblDAAE1uwABuULNjwABuJ8AATW/AAG5hmJnAAG5ig+fAAG5iwACRccAAbmTAAE1xwABuZMAATXLAAG5kwABNc8AAbmTAAE10wABuYrgPwABuYZicwABuaq8VwABuYZiXwABubK8WwABubMAAkXHAAG5uwABNdcAAbmzAAE1owABubMAATWnAAG5swABNasAAbmzAAE1rwABubMAATS7AAG5swABNbMAAbmzAAE1twABubLdNwABubLdPwABubLeIwABubLeJwABubLNnwABubLNlwABubMAATW7AAG5ss2PAAG5hmJ3AAG5/AMAAbifAAE12wABugZiZwABugrgPwABugZiXwABuhLgjwABuhIKIwABugZidwABuhwAAwACRcsAAbomYmMAAborAAE2LwABuisAATYzAAG6JwABNjcAAbo2YmcAAbo7AAJFywABuj8AATY7AAG6NmJrAAG6RwACRcsAAbpLAAE2QwABuksAATY/AAG6Ru5fAAG6NmJfAAG6WwABNkcAAbo2YncAAbpi+dsAAbpgAwABuicAATZLAAG6bmJnAAG6cwABNk8AAbpykJMAAbpuYnMAAbp8AwABum5iawABuocAATZ3AAG6hwABNNMAAbqG7rsAAbqHAAE2awABuobuywABuocAATTvAAG6hwABNm8AAbqG7tcAAbqHAAE2ewABuocAATZzAAG6hu7nAAG6hwABNN8AAbqG788AAbqG7dMAAbqG7dsAAbqG7eMAAbqHAAJFywABussAATY/AAG6hg8HAAG6bmJfAAG61qk/AAG61u4nAAG61nnbAAG61gorAAG61u3LAAG61SMAAbrWetsAAbrW5hcAAbpuYncAAbr6VT8AAbr6+dsAAbonAAE2gwABuwZiZwABuwsAATZrAAG7CwABNm8AAbsLAAE2cwABuwruywABuwru1wABuwru5wABuwZiXwABuyZ52wABuyYKKwABuybtywABuyZ62wABuySPAAG7BmJ3AAG7PvnbAAG7PAMAAbonAAE2swABu0piZwABu08AATZ3AAG7TwABNmsAAbtPAAE2bwABu08AATZzAAG7Tu7LAAG7Tu7nAAG7Tu7XAAG7TwACRcsAAbtvAAE2twABu0piawABu3cAATTTAAG7du67AAG7dwABNO8AAbtKYl8AAbuGqT8AAbuG7icAAbuGedsAAbuGCisAAbuG7csAAbuGetsAAbuEjwABu0pidwABu6b52wABu6QDAAG6JwABNsMAAbuyYmcAAbu3AAE2awABu7cAATZzAAG7tu7LAAG7tu7nAAG7twABNscAAbuyYmsAAbvPAAE2ewABu88AAkXLAAG71wABNj8AAbvPAAE03wABu87t0wABu7JiXwABu+Z52wABu+btywABu+Z62wABu+SPAAG7smJ3AAG7+vnbAAG7+AMAAbonAAE23wABvAZiZwABvAifAAG8CwACRcsAAbwQowABvAinAAG8CwABNuMAAbwLAAE25wABvAsAATbrAAG8BmJfAAG8KI8AAbwGYncAAbwwAwABuicAATbvAAG8OmJnAAG8PwABJPMAAbw/AAE28wABvD8AATb3AAG8PwABNvsAAbw/AAE2/wABvD8AATcDAAG8OmJ3AAG8WAMAAbonAAE3BwABvGJiZwABvGaoIwABvGbXawABvGZnKwABvGJiXwABvHbDdwABvHbtiwABvHSPAAG8YmJrAAG8hwACRcsAAbyLAAE2PwABvGJidwABvJADAAG6JwABNwsAAbyaYmcAAbycnwABvJ8AAkXLAAG8pKMAAbycpwABvJ8AATcPAAG8nwABNxMAAbyaYl8AAby4jwABvJpidwABvMADAAG6JwABNxcAAbzKYmcAAbzPAAEk8wABvM8AATcbAAG8zwABNx8AAbzOw4cAAbzKYncAAbzgAwABuicAATcjAAG86mJnAAG87wACRcsAAbzzAAE3JwABvPMAATcrAAG88wABNy8AAbzzAAE3MwABvPMAATc3AAG86mJfAAG9Cu3LAAG9CwABNs8AAb0KetsAAb0IjwABvOpiawABvR8AATZ7AAG9HwABNtMAAb0fAAE03wABvOpidwABvSwDAAG9LvnbAAG6JwABN2MAAb06YmcAAb08nwABvT8AAkXLAAG9RKMAAb08pwABvT8AATdnAAG9PwABN2sAAb0/AAE3bwABvTpiXwABvVyPAAG9OmJ3AAG9ZAMAAbonAAE3cwABvW5iZwABvXMAATdnAAG9cwABN2sAAb1zAAE3bwABvW5idwABvYADAAG6JwABN3cAAb2KYmcAAb2OD58AAb2O7ssAAb2O7tcAAb2O7ucAAb2KYnMAAb2ivFcAAb2KYl8AAb2qvFsAAb2KYncAAb2wAAMAAkXPAAG9uwABN38AAb2+Yl8AAb3C1msAAb3C1gcAAb2+YncAAb3MAwABvbrWdwABvdZiXwABvdrWZwABvdZidwABveADAAG9utZ7AAG96mJfAAG97tZPAAG97tZXAAG96mJ3AAG9+AMAAb27AAE3gwABvgJiXwABvgbWTwABvgbWVwABvgJidwABvhADAAG9uwABN4cAAb4aYmcAAb4e2WcAAb4fAAJFzwABvicAATeLAAG+GmJfAAG+LtZrAAG+LtYHAAG+LtZnAAG+LI8AAb4aYncAAb5AAwABvbsAASofAAG+SmJnAAG+TmcrAAG+TvAHAAG+SmJzAAG+WAMAAb5KYl8AAb5i1gcAAb5i1msAAb5hIwABvmCPAAG+SmJrAAG+dtUbAAG+dwABKkMAAb52DwcAAb5KYncAAb6GVT8AAb27AAE3kwABvo5iawABvpLTXwABvo5idwABvpgDAAG9uwABN5cAAb6iYmcAAb6m7nsAAb6m7n8AAb6m7mMAAb6iYl8AAb63AAJFzwABvrsAATebAAG+uwABN58AAb627gMAAb627cMAAb620+cAAb6iYncAAb7QAAMAAkXTAAG+2wABN6MAAb7eYl8AAb7jAAE3pwABvuLTLwABvuIKIwABvt5iawABvvMAATevAAG+8wABN7MAAb7eYncAAb78AwABvtsAATe3AAG/BmJnAAG/CwABN7sAAb8LAAE3vwABvwsAATfDAAG/CwABN8cAAb8LAAJF0wABvx8AATfLAAG/HtATAAG/HwABN9MAAb8LAAE3zwABvwZiawABvzMAATfXAAG/MwABN68AAb8zAAE3swABvwZiXwABv0MAATenAAG/QtMvAAG/QwACRdMAAb9PAAE32wABv0IKIwABvwZidwABv1gDAAG+2vC7AAG/YmJnAAG/ZwACRdMAAb9qWSMAAb9iYnMAAb9yvFcAAb9iYl8AAb96vFsAAb97AAE3/wABv3ra9wABv3rfJwABvtsAATgDAAG/jmJnAAG/kg+fAAG/kwABN78AAb+TAAE3xwABv5MAATgLAAG/kwABOA8AAb+TAAE3zwABv45icwABv668VwABv45iXwABv7a8WwABv7ba9wABv7bfJwABv7cAATf/AAG/jmJ3AAG/yAMAAb7bAAE4EwABv9JiZwABv9SfAAG/1wACRdMAAb/cowABv9SnAAG/1nSbAAG/1wABOBcAAb/XAAE4GwABv9cAATgfAAG/0mJfAAG/+I8AAb/SYncAAcAAAwABvtsAATgjAAHACmJfAAHADwABN+8AAcAPAAE3+wABwA8AATf3AAHACmJ3AAHAHAADAAJF1wABwCZiXwABwCsAATqrAAHAJwABOCcAAcAyYmcAAcA0nwABwDcAAkXXAAHAPKMAAcA0pwABwDZrmwABwDaGPwABwDa2twABwDJiXwABwFSPAAHAMmJ3AAHAXAMAAcAnAAE4KwABwGZiZwABwGsAAkXXAAHAbwABOC8AAcBvAAE4MwABwG8AATg7AAHAbhODAAHAbwABOD8AAcBvAAE4QwABwG8AAThHAAHAbwABOEsAAcBvAAE4TwABwG5vywABwGsAATg3AAHAah2vAAHAZmJfAAHAowABOFMAAcCjAAE4VwABwKJfVwABwKIbkwABwKISgwABwKIT0wABwKMAAThrAAHAohXLAAHAowACRdcAAcDHAAE4bwABwMcAATizAAHAxwABOHsAAcDHAAE4twABwMcAATjHAAHAxwABOPMAAcDHAAE4pwABwMcAATk/AAHAxwABOV8AAcDHAAE5WwABwKMAAThzAAHAowABOHcAAcCiFiMAAcCjAAE4jwABwKIWKwABwKMAATibAAHAohYzAAHAowABOJ8AAcCiFkMAAcCjAAE4qwABwKIWOwABwKMAATivAAHAowABOPcAAcCiFpsAAcCjAAE47wABwKIV7wABwKMAATkLAAHAohX3AAHAowABOQ8AAcCiFmsAAcCjAAE5EwABwKIWcwABwKMAATkXAAHAoharAAHAoqkXAAHAohazAAHAowABORsAAcCiFlsAAcCjAAE5HwABwKIWYwABwKMAATkjAAHAohajAAHAohbjAAHAohbPAAHAohb3AAHAowABOVMAAcCiF2sAAcCiGCcAAcCiGC8AAcCjAAE5YwABwKIWwwABwKIYYwABwKIYUwABwKMAATiXAAHAohd7AAHAowABOW8AAcCiFwcAAcCjAAE5cwABwKIXjwABwKMAATl3AAHAohebAAHAowABOXsAAcCiF6MAAcCjAAE5fwABwKIXhwABwKMAATmDAAHAohe3AAHAowABOYcAAcCiF6sAAcCjAAE5iwABwKIX3wABwKMAATmPAAHAohfnAAHAowABOZMAAcCiF+8AAcCiF/cAAcCjAAE5lwABwKIYDwABwKMAATmvAAHAohfXAAHAohjnAAHAohjvAAHAohiPAAHAohiXAAHAohk/AAHAohVLAAHAowABObMAAcCiFScAAcCjAAE5twABwKIVNwABwKMAATm7AAHAohUvAAHAohU/AAHAohaLAAHAohh3AAHAohi3AAHAowABOcMAAcCiGMcAAcCiGKcAAcCiGJ8AAcCjAAE50wABwKIY0wABwKIY/wABwKIY9wABwKIZCwABwKMAATnjAAHAohkbAAHAohknAAHAowABOecAAcCiF78AAcCjAAE56wABwKIYOwABwKMAATnvAAHAohiHAAHAowABOfcAAcCiGWcAAcCjAAE5+wABwKLCSwABwKMAATn/AAHAowABOasAAcCjAAE6AwABwKIU4wABwKMAAToHAAHAohRrAAHAowABOgsAAcCiFFMAAcCjAAE46wABwKIZXwABwKMAAToPAAHAohgbAAHAZmJrAAHC0uD/AAHC0uEDAAHC0uCzAAHC0hMLAAHC0tgfAAHC0wABOFsAAcLTAAE4XwABwtJxJwABwGZibwABwvYTCwABwvbYHwABwvcAAThbAAHC9wABOF8AAcBmYncAAcMIAwABwCcAAToTAAHDEmJnAAHDFhZPAAHDFhV3AAHDEmJ3AAHDIAMAAcAnAAE6FwABwypiZwABwy6yNwABwy8AATobAAHDLwABOh8AAcMvAAJF1wABwz4Z/wABwypiXwABw0cAATkDAAHDRSMAAcNHAAJF1wABw1MAATojAAHDRI8AAcMqYmsAAcNeDwcAAcMqYncAAcNkAwABwCcAATo7AAHDbmJnAAHDcrI3AAHDcwABOj8AAcNzAAE6QwABw25iXwABw4MAATj/AAHDgWMAAcODAAE5AwABw4MAAkXXAAHDkwABOiMAAcOAjwABw25idwABw5wDAAHAJwABOosAAcOmYmcAAcOrAAJF1wABw68AATqPAAHDpmJfAAHDtwABOP8AAcO1YwABw7YRZwABw7ZZAwABw7cAATkDAAHDtvUDAAHDtI8AAcOmYncAAcPUAAMAAkXbAAHD3mwLAAHD4mJnAAHD5wACRdsAAcPqWSMAAcPiYnMAAcPyvFcAAcPiYl8AAcP6vFsAAcP6qCMAAcP67zMAAcP67zcAAcP62kcAAcP7AAE6rwABw/psUwABw/prnwABw/sAATqzAAHD+tjjAAHD+tpLAAHD+wABOrcAAcP7AAE6uwABw/sAATq/AAHD+tjnAAHD+tpPAAHD+wABOsMAAcP7AAE6xwABw/sAATrLAAHD+tfDAAHD+thrAAHD+thvAAHD+ti7AAHD+wABOt8AAcP7AAE64wABw/rOYwABw98AATrnAAHEZmJnAAHEag+fAAHEawACRdsAAcRy0BMAAcRzAAE67wABxHMAATrzAAHEZmJzAAHEgrxXAAHEZmJfAAHEirxbAAHEiqgjAAHEiu8zAAHEiu83AAHEitpHAAHEiwABOq8AAcSKa58AAcSKbFMAAcSLAAE6swABxIrY4wABxIraSwABxIsAATq3AAHEiwABOrsAAcSLAAE6vwABxIrY5wABxIraTwABxIsAATrDAAHEiwABOscAAcSLAAE6ywABxIrXwwABxIrYawABxIrYbwABxIrYuwABxIsAATrfAAHEiwABOuMAAcSKzmMAAcRmYncAAcT0AwABw96PSwABxP5iZwABxQMAAkXbAAHFBwABOu8AAcUHAAE68wABxQbQEwABxQbviwABxQcAATtvAAHFBwABO3MAAcUC2QcAAcT+Yl8AAcUmCiMAAcUmk+sAAcUnAAJF2wABxTMAATuDAAHFMwABO3sAAcUzAAE7pwABxTMAATuvAAHFJu+zAAHFJwABO58AAcUm8BMAAcUm8BcAAcUm8BsAAcT+YncAAcVYAwABw98AATvTAAHFYmJnAAHFZwACRdsAAcVrAAE71wABxWqobwABxWJiXwABxXcAATvPAAHFdwACRdsAAcV/AAE72wABxWJidwABxYQDAAHD3wABO/8AAcWOYmcAAcWTAAJF2wABxZaobwABxY5iXwABxZ7wGwABxZ8AAkXbAAHFpwABPAMAAcWOYncAAcWsAwABw98AATwLAAHFtmJnAAHFuwACRdsAAcW/AAE8DwABxb5u9wABxbZiXwABxcsAATvfAAHFtmJ3AAHF0AMAAcPe7v8AAcXaYl8AAcXfAAE7fwABxd8AATubAAHF3wABO4sAAcXfAAE7qwABxd7L5wABxd7v8wABxdpidwABxfgDAAHD3wABPBMAAcYCYmcAAcYEnwABxgcAAkXbAAHGDKMAAcYEpwABxgbYSwABxgbYTwABxgbYUwABxgJiXwABxiSPAAHGAmJ3AAHGLAMAAcPfAAE8FwABxjZiZwABxjifAAHGOwACRdsAAcZAowABxjinAAHGOthHAAHGOwABPBsAAcY7AAE8HwABxjsAATwjAAHGOwABPCcAAcY7AAE8KwABxjsAATwvAAHGOnVPAAHGNmJfAAHGbI8AAcY2YncAAcZ0AwABw98AATwzAAHGfmJnAAHGggmfAAHGghIPAAHGgthHAAHGgwABPBsAAcaDAAE8HwABxoMAATwjAAHGgwABPCcAAcaDAAE8KwABxoMAATwvAAHGfmJfAAHGqI8AAcZ+YncAAcawAwABxrJVPAMAAkXfAAHGvs77AAHGwmJnAAHGxs23AAHGwmJfAAHGzVsAAcbOApcAAcbOEWcAAcbCYmsAAcbeBVcAAcbdhwABxsJidwABxugDAAHGvtZ/AAHG8mJnAAHG9q0vAAHG9pN/AAHG9wACRd8AAccClRcAAccDAAE8SwABxvJiawABxw4C9wABxw7C9wABxvJiXwABxxraxwABxxsAATxTAAHHGwABPF8AAccbAAE8WwABxvJidwABxywAAwACReMAAcc2Yl8AAcc7AAE8lwABxzcAATyTAAHHQmJfAAHHRvJDAAHHRwABFysAAcdG8ecAAcdHAAEXHwABx0cAARcjAAHHRwABFycAAcdG8c8AAcdG0LMAAcdGFsMAAcdG8dsAAcdG4jMAAcdGHM8AAcdG8h8AAcdG8isAAcdG8f8AAcdHAAEXLwABx0bx8wABx0Z7vwABx0JidwABx5AAAwACRecAAceaYl8AAcefAAE9awABx56vjwABx58AAT1vAAHHnwABPXcAAcebAAE8nwABx7JiawABx7bNAwABx7YVtwABx7aT4wABx7JiXwABx8cAATD3AAHHxwABPKMAAcfHAAEw5wABx8bMDwABx8bJpwABx8cAATynAAHHxwABPKsAAcfGcE8AAcfHAAE8rwABx8afZwABx8cAATRTAAHHxnBrAAHHxwABPLMAAcfHAAE8twABx8cAATf3AAHHxmRzAAHHxwABPLsAAcfHAAE8vwABx8cAATzDAAHHxwABNFcAAcfHAAE8xwABx8cAATzLAAHHxwABPM8AAcfHAAE80wABx8bbIwABx8bffwABx8cAATzXAAHHxnBHAAHHxwABPNsAAcfHAAE83wABx8cAATzjAAHHxwABPOcAAcfHAAE86wABx7JidwAByEwDAAHHmwABPO8AAchWYl8AAcha348AAcha35MAAcha35cAAcha35sAAcha358AAcha2tsAAcha2q8AAcha2rcAAcha2rMAAcha36cAAcha36sAAcha368AAcha37MAAcha2s8AAcha37cAAchWYncAAciYAwABx5sAATzzAAHIomJrAAHIpqq3AAHIomJfAAHIrwABMNsAAcivAAEw4wAByK8AATDrAAHIrwABMPMAAcivAAEwrwAByK8AATC3AAHIrwABMMcAAcivAAEwywAByK8AATC7AAHIrwABML8AAcivAAEwwwAByK8AATDPAAHIrwABMNMAAcivAAEw1wAByK68WwAByKJidwAByOwDAAHHmoHbAAHI9mJnAAHI+J8AAcj7AAJF5wAByQCjAAHI+KcAAcj7AAE9EwAByPpjbwAByPsAAT0XAAHI+wABK7cAAcj7AAE9GwAByPq10wAByPsAAT0fAAHI9mJfAAHJKI8AAcj2YncAAckwAwABx5sAAT0jAAHJOmJrAAHJPgmfAAHJPg+7AAHJPhFvAAHJOmJzAAHJTrxXAAHJOmJfAAHJVrxbAAHHmrOfAAHJXmJnAAHJYJ8AAcljAAJF5wAByWijAAHJYKcAAcljAAE9EwAByWLRPwAByWKnFwAByV5iXwAByYCPAAHJXmJ3AAHJiAMAAcebAAE9NwAByZJiZwAByZYPnwAByZYPuwAByZJicwAByaK8VwAByZJiXwAByaq8WwAByaiPAAHJkmJrAAHJthFvAAHJtgmfAAHJkmJ3AAHJwAMAAcebAAE9SwABycpiZwAByc4PnwAByc4PuwAByc4JnwABycpicwAByd68VwABycpiXwAByea8WwAByeSPAAHJymJrAAHJ8hFvAAHJymJ3AAHJ+AMAAcebAAE9VwABygJiawABygYJnwABygYPuwABygYRbwABygJicwAByha8VwABygJiXwAByh68WwABx5sAAT1fAAHKJmJnAAHKKg+fAAHKKg+7AAHKJmJzAAHKNrxXAAHKJmJfAAHKPrxbAAHKPI8AAcomYmsAAcpKEW8AAcpKCZ8AAcomYncAAcpUAAMAAkXrAAHKXmJfAAHKYwACResAAcpnAAE/3wAByl8AAT1/AAHKbmJnAAHKctsbAAHKbmJrAAHKeesAAcp6k38AAcp6kzcAAcp6wvcAAcp6zQMAAcp62vMAAcp6FbcAAcp7AAE9gwABynqUMwABynra6wABym5iXwAByqcAATxXAAHKpwABKKsAAcqnAAE9hwAByqcAAT2LAAHKpwABPY8AAcqnAAE9kwAByqcAAT2bAAHKpwABPZ8AAcqnAAE9owAByqcAAT2nAAHKpwABPF8AAcqnAAE8awAByqcAAT2rAAHKpwABPa8AAcqnAAE9twAByqcAAT27AAHKpwABPb8AAcqnAAE9wwAByqcAAT3HAAHKpwABPc8AAcqnAAE91wAByqcAAT3fAAHKpwABPecAAcqnAAE96wAByqbbWwAByqcAAT3vAAHKpwABPfMAAcqnAAE99wAByqbbUwAByqbbVwAByqYKIwAByqYJCwAByqcAAT37AAHKpwABPf8AAcqm4M8AAcpuYncAAcs0AwAByl8AAT4DAAHLPmJnAAHLQwABPgcAActC6wsAActC2usAActDAAE+CwABy0MAAT4PAAHLQwABPhMAActDAAE+FwABy0HrAAHLQgs7AAHLQpM3AAHLQwACResAActu4RsAActvAAERUwABy0KTfwABy0KUMwABy0IVtwABy0MAAT2DAAHLQwABPhsAActC1DMAAcs+YmsAAcuTAAJF6wABy5a9UwAByz5iXwABy58AAT2bAAHLnwABPGsAAcufAAE+HwABy58AAT33AAHLnwABPecAAcufAAE9qwABy58AAT2vAAHLnttTAAHLnttXAAHLnwABPYcAAcufAAE9iwABy58AAT2PAAHLnwABPFcAAcufAAE+fwABy58AAT8fAAHLnwABPsMAAcufAAEoqwABy58AAT8nAAHLnwABPzsAAcue8tcAAcufAAE/PwABy58AAT8PAAHLnwABPosAAcufAAE+hwABy58AAT3fAAHLnwABPacAAcufAAE9nwABy58AAT2jAAHLnwABPfMAAcufAAE97wABy58AAT3rAAHLnwABPbsAAcufAAE9twABy58AAT2TAAHLnwABPc8AAcufAAE91wABy58AAT2/AAHLnwABPcMAAcufAAE9xwABy54KIwABy54JCwABy58AATxfAAHLnttbAAHLnwABPfsAAcufAAE9/wABy57gzwAByz5idwABzFgDAAHKXwABP4sAAcxiYmcAAcxnAAJF6wABzGrWqwABzGJiawABzHMAAkXrAAHMdr1TAAHMYmJfAAHMfwABP48AAcx/AAE/kwABzH8AAT+XAAHMfwABP5sAAcx/AAE/nwABzH8AAT+jAAHMfsx3AAHMfwABP6cAAcx/AAE/swABzGJidwABzKQDAAHKXwABP7cAAcyuYmcAAcyyD58AAcyzAAJF6wABzLsAAT+/AAHMuwABP8MAAcy7AAE/xwABzLsAAT/LAAHMrmJzAAHMzrxXAAHMrmJfAAHM1rxbAAHM1tq/AAHM1tqnAAHM1wABPj8AAczXAAE+QwABzNcAAT47AAHM1tq3AAHM1tqzAAHM1tqvAAHM1wABPjMAAczW2qsAAcyuYncAAc0EAwABzQZVPAMAAkXvAAHNEmJfAAHNFwABQmcAAc0TAAE/5wABzR5iZwABzSIPnwABzSLbrwABzSLbswABzSLbvwABzR5icwABzTa8VwABzR5iXwABzT7bqwABzT0jAAHNPwACRe8AAc1LAAE/7wABzTyPAAHNHmJrAAHNVtu7AAHNVlq3AAHNVg8HAAHNVtK/AAHNHmJ3AAHNaAMAAc0TAAE/+wABzXJiXwABzXcAARpPAAHNdtvjAAHNdtvfAAHNcmJ3AAHNhAMAAc0TAAE//wABzY5iawABzZLSvwABzZLbuwABzZJatwABzY5idwABzaADAAHNEwABQAMAAc2qYmcAAc2u268AAc2u27cAAc2vAAEZ8wABzapiXwABzb8AAUAHAAHNvI8AAc2qYncAAc3IAwABzRMAAUAjAAHN0mJfAAHN1S8AAc3SYncAAc3cAwABzRMAAUAnAAHN5mJnAAHN6wACRe8AAc3vAAFAKwABzeZiXwABzfcAAUAvAAHN9wABQDMAAc31LwABzeZidwABzgQDAAHNEwABQDsAAc4OYmcAAc4QnwABzhMAAkXvAAHOGKMAAc4QpwABzhMAAUBHAAHOEwABQEsAAc4OYl8AAc4sjwABzg5idwABzjQDAAHNEwABQE8AAc4+YmcAAc5AnwABzkMAAkXvAAHOSKMAAc5ApwABzkMAAUBHAAHOQwABQFMAAc5DAAFAVwABzj5iXwABzmCPAAHOPmJ3AAHOaAMAAc0TAAFAWwABznJiZwABznbOawABzncAAUBjAAHOduGbAAHOdwABQGcAAc53AAFAawABzncAAUBvAAHOcmJfAAHOkwABGlMAAc6TAAEZ9wABznJidwABzpwDAAHNEwABQH8AAc6mYmcAAc6q4ZsAAc6mYl8AAc6yaj8AAc6zAAEaCwABzrIYUwABzrLCfwABzrLCbwABzrLCcwABzqZidwABzswDAAHNEwABQIcAAc7WYmsAAc7a4ZsAAc7WYl8AAc7jAAFAiwABztZidwABzugDAAHNEwABQI8AAc7yYmsAAc724ZsAAc7yYl8AAc7/AAFAiwABzvJidwABzwQDAAHNEwABQJMAAc8OYmcAAc8TAAFAdwABzxLhmwABzxMAAkXvAAHPHwABQJcAAc8OYl8AAc8nAAFAmwABzyYcewABzw5idwABzzADAAHNEwABQLsAAc86YmsAAc8+4ZsAAc86Yl8AAc9HAAFAiwABzzpidwABz0wDAAHNEwABQL8AAc9WYmcAAc9bAAFAdwABz1rhmwABz1ZiXwABz2cAAUCbAAHPVmJ3AAHPbAMAAc0TAAFBEwABz3ZiZwABz3oPuwABz3sAAUEXAAHPewABQMsAAc92Yl8AAc+LAAFBGwABz3ZidwABz5ADAAHNEwABQSsAAc+aYmcAAc+fAAFBLwABz58AAUEzAAHPnwABQTcAAc+aYmsAAc+uAlsAAc+aYl8AAc+0jwABz5pidwABz7wDAAHNEwABQUcAAc/GYmcAAc/InwABz8sAAkXvAAHP0KMAAc/IpwABz8sAAUFfAAHPywABQWMAAc/KdIcAAc/KdNcAAc/KdIMAAc/GYl8AAc/wjwABz8ZidwABz/gDAAHNEwABQWcAAdACYmcAAdAEnwAB0AcAAkXvAAHQDKMAAdAEpwAB0AcAAUFrAAHQBwABQW8AAdAG7E8AAdAGdR8AAdAHAAFBcwAB0AZ1SwAB0AZ0fwAB0AZ0kwAB0AZ1bwAB0AcAAUF3AAHQBwABQXsAAdAHAAFBfwAB0AcAAUGDAAHQBwABQYcAAdAHAAFBiwAB0AcAAUGPAAHQBwABQZMAAdAHAAFBlwAB0AJiXwAB0GCPAAHQAmJ3AAHQaAMAAc0TAAFBmwAB0HJiXwAB0HcAAUGfAAHQdwABQaMAAdB3AAFBpwAB0HcAAUGrAAHQdwABQJsAAdByYncAAdCMAwABzRMAAUGvAAHQlmJnAAHQmwABQbMAAdCa4ZsAAdCbAAFBtwAB0Jr+fwAB0JsAAUEvAAHQmwABQTcAAdCbAAFBuwAB0JsAAUG/AAHQlmJfAAHQvwABQcMAAdC/AAFBxwAB0L8AAUHLAAHQvwABQc8AAdC/AAFB0wAB0L68/wAB0L8AARoLAAHQvmo/AAHQvhzPAAHQvwACRe8AAdDnAAFB5wAB0L7CPwAB0L7CQwAB0L4YYwAB0L8AAUHXAAHQvwABQfcAAdC+GFMAAdC+GHcAAdC+wmMAAdC+wmcAAdC+wkcAAdC+wlMAAdC+wicAAdC+wiMAAdC+wh8AAdC+whsAAdC+GXsAAdC+wn8AAdC+GV8AAdC+wm8AAdC+wnMAAdC+ws8AAdC+wssAAdC+wsMAAdC+wr8AAdC+wl8AAdC+wk8AAdC+wq8AAdC+F9cAAdC+wrsAAdC+wrMAAdC+wqMAAdC+GRsAAdC+wmsAAdC+wlsAAdC+wlcAAdC+wf8AAdC+wfsAAdC+wfcAAdC+wp8AAdC+wpsAAdC+wpcAAdC+wgsAAdC+wgcAAdC+GI8AAdC+wjsAAdC/AAFB2wAB0JZidwAB0aQDAAHNEwABQg8AAdGuYmcAAdGzAAJF7wAB0bcAAUITAAHRtwABQhcAAdG3AAFCGwAB0bcAAUIfAAHRtwABQiMAAdG3AAFCJwAB0bcAAUIrAAHRrmJfAAHR1wABQi8AAdHXAAFCMwAB0dcAAUI3AAHR1wABQjsAAdHXAAFCPwAB0dSPAAHRrmJ3AAHR8AMAAc0TAAFCWwAB0fpiawAB0f7hmwAB0fpiXwAB0gcAAUCLAAHR+mJ3AAHSDAMAAc0TAAFCXwAB0hZiZwAB0hsAAUBzAAHSGuGbAAHSFmJfAAHSJwABQJsAAdInAAFBowAB0hZidwAB0jADAAHNEwABQmMAAdI6YmcAAdI/AAFBswAB0j8AAUBzAAHSOmJfAAHSSS8AAdI6YncAAdJQAAMAAkXzAAHSWmJnAAHSXwABQ08AAdJbAAFCcwAB0mZiZwAB0moPnwAB0moC9wAB0mqUrwAB0mZicwAB0nq8VwAB0mZiXwAB0oK8WwAB0oCPAAHSZmJ3AAHSjAMAAdJbAAFCdwAB0pZiZwAB0pifAAHSmwACRfMAAdKgowAB0pinAAHSmg+7AAHSmtE/AAHSmqcXAAHSlmJfAAHSuI8AAdKWYncAAdLAAwAB0lsAAUKHAAHSymJnAAHSzwACRfcAAdLTAAFCiwAB0spidwAB0tgDAAHSWwABQo8AAdLiYmcAAdLmD58AAdLmEQ8AAdLmAvcAAdLmEGsAAdLiYnMAAdL6vFcAAdLiYl8AAdMCvFsAAdMAjwAB0uJiawAB0w7SawAB0uJidwAB0xQDAAHSWwABQpMAAdMeYmcAAdMiD58AAdMiEQ8AAdMiAvcAAdMeYnMAAdMyvFcAAdMeYl8AAdM6vFsAAdM4jwAB0x5idwAB00QDAAHSWwABQpcAAdNOYmcAAdNQnwAB01MAAkXzAAHTWKMAAdNQpwAB01MAAULLAAHTUwABQs8AAdNTAAE9FwAB01ISUwAB01KG8wAB01JsOwAB01JZHwAB01MAAT0bAAHTUwABQtMAAdNTAAE9HwAB01MAAULXAAHTUwABQtsAAdNOYl8AAdOUjwAB005idwAB05wDAAHSWwABQt8AAdOmYmcAAdOqEQ8AAdOqE/8AAdOrAAJF8wAB07SjAAHTtwABMeMAAdOmYnMAAdPCvFcAAdOmYl8AAdPKvFsAAdPIjwAB06ZiawAB09YC9wAB09acuwAB09axKwAB09YQdwAB09YQawAB09YU1wAB09YUzwAB09bLBwAB09Yd9wAB09YeAwAB09YUCwAB09YQZwAB09YeBwAB09cAAkXzAAHUDqV3AAHTpmJ3AAHUFAMAAdJbAAFC5wAB1B5iZwAB1CLSgwAB1CIQfwAB1CIVUwAB1B5idwAB1DADAAHSWwABQusAAdQ6YmcAAdQ+EHcAAdQ6YmsAAdRGHgMAAdRGFAsAAdRGEGcAAdRGHgcAAdRGy8sAAdRHAAJF8wAB1F6ldwAB1DpidwAB1GQDAAHSWwABQu8AAdRuYmcAAdRyD58AAdRuYnMAAdR6vFcAAdRuYl8AAdSCvFsAAdRuYmsAAdSK0R8AAdSKzTcAAdRuYncAAdSUAwAB0lsAAUL3AAHUnmJnAAHUog+fAAHUosvLAAHUnmJzAAHUrrxXAAHUnmJfAAHUtrxbAAHUnmJrAAHUvtEfAAHUvs03AAHUnmJ3AAHUyAMAAdJbAAFC/wAB1NJiZwAB1NYPnwAB1NZjbwAB1NJicwAB1OK8VwAB1NJiXwAB1Oq8WwAB1NJiawAB1PMAAkXzAAHU9qV3AAHU0mJ3AAHU/AMAAdJbAAFDCwAB1QZiZwAB1QoPnwAB1QoQawAB1QZicwAB1Ra8VwAB1QZiXwAB1R68WwAB1QZiawAB1SbLBwAB1ScAAkXzAAHVLqV3AAHVBmJ3AAHVNAMAAdJbAAEacwAB1T5iZwAB1UIPnwAB1UIJqwAB1UJrZwAB1UIPBwAB1T5icwAB1Va8VwAB1T5iXwAB1V68WwAB1T5iawAB1WcAAkXzAAHVaqV3AAHVPmJ3AAHVcAMAAdJbAAFDFwAB1XpiZwAB1X4PnwAB1X4QawAB1XpicwAB1Yq8VwAB1XpiXwAB1ZK8WwAB1XpiawAB1ZoUzwAB1ZsAAkXzAAHVoqV3AAHVemJ3AAHVqAMAAdJbAAFDGwAB1bJiZwAB1bYPnwAB1bYQawAB1bJicwAB1cK8VwAB1bJiXwAB1cq8WwAB1bJiawAB1dKxKwAB1dIU1wAB1dMAAkXzAAHV3qV3AAHVsmJ3AAHV5AMAAdJbAAE0OwAB1e5iZwAB1fIPnwAB1fKxKwAB1fIQdwAB1e5icwAB1gK8VwAB1e5iXwAB1gq8WwAB1e5iawAB1hId9wAB1hMAAkXzAAHWGqV3AAHV7mJ3AAHWIAMAAdJbAAE8QwAB1ipiZwAB1i4PnwAB1ipicwAB1ja8VwAB1ipiXwAB1j68WwAB1ipiawAB1kcAAkXzAAHWSqV3AAHWKmJ3AAHWUAMAAdJbAAFDJwAB1lpiZwAB1l4PnwAB1lpicwAB1ma8VwAB1lpiXwAB1m68WwAB1lpiawAB1ncAAkXzAAHWeqV3AAHWWmJ3AAHWgAMAAdJbAAFDLwAB1opiZwAB1oyfAAHWjwACRfMAAdaUowAB1oynAAHWjmcrAAHWjgmbAAHWjhoHAAHWjns7AAHWimJfAAHWsI8AAdaKYncAAda4AwAB0lsAAUNDAAHWwmJnAAHWxg+fAAHWxtJ3AAHWxgL3AAHWxJ8AAdbCYnMAAdbavFcAAdbCYl8AAdbivFsAAdbgjwAB1sJidwAB1uwAAwACRfsAAdb2YmcAAdb7AAFDpwAB1vsAAUOrAAHW9mJrAAHXBwABQ68AAdb3AAFDVwAB1w5iZwAB1xKTfwAB1xMAAUNbAAHXEgZPAAHXEwABQ18AAdcOYmsAAdcnAAFDZwAB1w5iXwAB1y8AAUNrAAHXLwABQ3sAAdcuCiMAAdcOYncAAdc8AwAB1vcAAUODAAHXRmJnAAHXSwACRfsAAddPAAFDhwAB10ZiawAB11YGTwAB10ZiXwAB114PnwAB115yawAB118AAUObAAHXXwABQ58AAddfAAFDcwAB111bAAHXXwABQ5cAAddGYncAAdd8AAMAAkX/AAHXhwABQ7cAAdeKYmcAAdeOAvcAAdeKYl8AAdeXAAFDuwAB15cAAUO/AAHXimJrAAHXotK7AAHXimJ3AAHXqAMAAdeHAAFDwwAB17JiawAB17bSuwAB17JiXwAB178AAUO/AAHXsmJ3AAHXxAMAAdeHAAFDzwAB185iawAB19LSuwAB185iXwAB19sAAUO/AAHXzmJ3AAHX4AMAAdeHAAFD0wAB1+piawAB1+7SuwAB1+piXwAB1/cAAUO/AAHX6mJ3AAHX/AMAAdeHAAFD1wAB2AZiawAB2ArSuwAB2AZiXwAB2BMAAUO/AAHYBmJ3AAHYGAMAAdeHAAFD2wAB2CJiawAB2CbSuwAB2CJiXwAB2C8AAUO/AAHYImJ3AAHYNAMAAdeHAAFD3wAB2D5iZwAB2EMAAUPjAAHYQwABRGcAAdg+Yl8AAdhPAAFEawAB2E8AAUR7AAHYTwABRHMAAdhPAAFEfwAB2D5idwAB2GAAAwACRgMAAdhqYmMAAdhvAAFErwAB2G8AAUSzAAHYamJfAAHYewACRgMAAdh/AAFG2wAB2GsAAUS3AAHYhmJrAAHYiwABRLsAAdiKbxsAAdiGYncAAdiUAwAB2GsAAUS/AAHYnmJnAAHYowACRgMAAdinAAFEwwAB2KcAAUTHAAHYnmJrAAHYswABRLsAAdiybxsAAdieYncAAdi8AwAB2GsAAUTLAAHYxmJfAAHYyr0TAAHYyr0nAAHYywABRM8AAdjGYmsAAdja3q8AAdjGYncAAdjgAwAB2GsAAUTTAAHY6mJnAAHY7wACRgMAAdjy1qsAAdjzAAFE1wAB2O7erwAB2OpiawAB2QMAAkYDAAHZBr1TAAHY6mJfAAHZDr0TAAHZDr0nAAHZDwABRM8AAdkPAAFE9wAB2Q8AAUT/AAHY6mJ3AAHZJAMAAdhrAAFFAwAB2S5iawAB2TMAAkYDAAHZNtarAAHZNwABRO8AAdk2vVMAAdk3AAFFBwAB2TcAAUULAAHZLmJfAAHZTwACRgMAAdlTAAFE8wAB2U8AAUVfAAHZTwABRScAAdlPAAFFbwAB2U8AAUUrAAHZLmJ3AAHZaAMAAdhrAAFFdwAB2XJiZwAB2XcAAkYDAAHZetarAAHZewABRO8AAdlyYncAAdmEAwAB2GsAAUV7AAHZjmJfAAHZkwABRX8AAdmTAAEWcwAB2ZMAAUWjAAHZjmJrAAHZowABRYcAAdmjAAFFiwAB2aMAAUWPAAHZowABRZMAAdmjAAFFlwAB2aLdkwAB2Y5idwAB2bwDAAHYawABRacAAdnGYmcAAdnLAAJGAwAB2c8AAUTXAAHZzwABRasAAdnPAAEqKwAB2csAAUS7AAHZxmJrAAHZ4m8bAAHZxmJ3AAHZ6AMAAdhrAAFFrwAB2fJiawAB2fcAAkYDAAHZ+tarAAHZ+wABRO8AAdn6vVMAAdn7AAFFBwAB2fsAAUULAAHZ8mJfAAHaEwACRgMAAdoXAAFE8wAB2hMAAUVfAAHaEwABRScAAdoTAAFFbwAB2hMAAUUrAAHZ8mJ3AAHaLAMAAdhrAAFFswAB2jZiZwAB2jsAAkYDAAHaPtarAAHaPryfAAHaOwABRbcAAdo7AAFFuwAB2jsAAUW/AAHaOt6vAAHaOwABRcMAAdo2YmsAAdpfAAJGAwAB2mLQEwAB2mK9UwAB2mMAAUULAAHaYwABRO8AAdo2Yl8AAdp2vRMAAdp2vScAAdp3AAFEzwAB2jZidwAB2oQDAAHYawABRg8AAdqOYmcAAdqTAAJGAwAB2pa9UwAB2pcAAUYTAAHalwABRQsAAdqSzQMAAdqS3ZMAAdqOYmsAAdqvAAFFhwAB2q8AAUWLAAHarwABRY8AAdqvAAFFkwAB2q8AAUWXAAHajmJfAAHaxwABFnMAAdrHAAFGFwAB2scAAUYbAAHaxwABRX8AAdrHAAFFowAB2o5idwAB2twDAAHYawABGm8AAdrmYmsAAdrrAAEi/wAB2usAASMHAAHa6wABIxcAAdrrAAEjHwAB2usAASMnAAHa6wABIy8AAdrrAAEjNwAB2usAASMPAAHa6wABIz8AAdrrAAEjRwAB2uZidwAB2xQDAAHYawABRjsAAdseYmcAAdsjAAJGAwAB2ycAAUY/AAHbJwABH3cAAdsjAAFFmwAB2yMAAUWfAAHbIwABRkMAAdsjAAERuwAB2x5iXwAB20MAARZzAAHbQwABRk8AAdtDAAFGUwAB20MAAUZXAAHbQwABRl8AAdtCaj8AAdtC0C8AAdtC0CsAAdtCGdMAAdtDAAFFowAB20IZ8wAB20IczwAB20IaCwAB20IZ2wAB20IaMwAB20LQFwAB2x5iawAB24cAAUWHAAHbhwABRYsAAduHAAFFjwAB24cAAUWTAAHbhwABRZcAAdseYncAAducAwAB2GsAAUaTAAHbpmJnAAHbqgKvAAHbpmJfAAHbsS8AAduyAv8AAduwjwAB26ZiawAB28ISDwAB26ZidwAB28gDAAHYawABRpsAAdvSYmcAAdvWEg8AAdvSYl8AAdveEkcAAdvfAAFGnwAB298AAUVrAAHb3hozAAHb3hnzAAHb3hoLAAHb0mJ3AAHb+AMAAdhrAAFGpwAB3AJiZwAB3AYSDwAB3AJiXwAB3A8AAUafAAHcDwABRWsAAdwOGjMAAdwOGfMAAdwOGgsAAdwCYncAAdwkAwAB2GsAAUarAAHcLmJnAAHcMJ8AAdwzAAJGAwAB3DijAAHcMKcAAdwy6jcAAdwzAAFGrwAB3DMAAUazAAHcMstDAAHcLmJfAAHcVI8AAdwuYncAAdxcAwAB2GsAAUa3AAHcZmJnAAHcawACRgMAAdxvAAFGuwAB3GsAAUXfAAHcawABRr8AAdxrAAFGwwAB3GZiXwAB3IJ7vwAB3IMAAUbHAAHcgwABRs8AAdyDAAEVDwAB3ILQLwAB3IIZ8wAB3IIaCwAB3IIaMwAB3ILQKwAB3GZidwAB3KgDAAHYawABNwsAAdyyYmcAAdy2Vd8AAdy3AAFE4wAB3LcAAUTnAAHcthcPAAHctwABROsAAdy2y0MAAdy2FO8AAdyyYmsAAdzW5FMAAdyyYl8AAdzcjwAB3LJidwAB3OQAAwACRgcAAdzvAAFG6wAB3PJiZwAB3PcAAUbjAAHc9rXjAAHc9wABRt8AAdzyYncAAd0EAwAB3O8AAUSPAAHdDmJnAAHdEmcrAAHdEwABRS8AAd0SE6sAAd0SDwcAAd0TAAJGBwAB3ScAAUbvAAHdDmJfAAHdLI8AAd0OYncAAd00AwAB3O8AAUb/AAHdPmJnAAHdQwACRgcAAd1GqG8AAd1CFO8AAd0+Yl8AAd1RWwAB3VEvAAHdUI8AAd0+YmsAAd1jAAFFGwAB3T5idwAB3WgDAAHdahZ7AAHc7wABRwcAAd12Yl8AAd15LwAB3XZiawAB3YISDwAB3XZidwAB3YgDAAHc7lUzAAHdkmJnAAHdltrLAAHdlssHAAHdlW8AAd2WaiMAAd2VhwAB3ZJiawAB3a8AASjXAAHdkmJfAAHdtI8AAd2SYncAAd2/AAFHCwAB3b4NbwAB3b4JqwAB3b8AAUcPAAHc7wABRycAAd3SYl8AAd3XAAFFJwAB3dcAAUVvAAHd1wABRV8AAd3XAAFHKwAB3dJidwAB3egAAwACRgsAAd3y3lMAAd32Yl8AAd37AAFHMwAB3fsAARaDAAHd+wABRzsAAd37AAFHPwAB3fsAAUdLAAHd+wABR08AAd32YncAAd4UAwAB3fLeVwAB3h5iZwAB3iMAAkYLAAHeJtarAAHeJwABR1MAAd4nAAEfdwAB3ia9UwAB3icAAUULAAHeIs0DAAHeHmJfAAHeQwABRzMAAd5DAAEWgwAB3kMAAUc7AAHeQwABRz8AAd5DAAFHSwAB3kMAAUdPAAHeHmJ3AAHeXAMAAd3zAAFHZwAB3mZiZwAB3msAAkYLAAHebwABR2sAAd5vAAEPRwAB3m8AAUdvAAHebwABR3MAAd5vAAFHdwAB3m8AAUd7AAHeawABR18AAd5rAAFHVwAB3msAARG7AAHeZmJrAAHelwACRgsAAd6a1qsAAd6bAAEfdwAB3psAAUdTAAHeZmJfAAHeqgpvAAHeqwACRgsAAd6ykacAAd6zAAFHgwAB3rMAAUeHAAHeswABR38AAd6zAAFHiwAB3rMAAUePAAHeswABR5MAAd6zAAFHlwAB3rMAAUebAAHeqmo/AAHeqtAvAAHeqtArAAHeqhnTAAHeqhnzAAHeqhoLAAHeqhnbAAHeqhozAAHeqtAXAAHeZmJ3AAHe/AMAAd3zAAFHowAB3wZiZwAB3wsAAkYLAAHfDwABR6cAAd8PAAFHqwAB3w6lfwAB3wZiawAB3x4FVwAB3wZidwAB3yQDAAHd8wABR68AAd8uYmcAAd8zAAJGCwAB3zcAAUezAAHfLmJfAAHfPVsAAd8uYncAAd9EAwAB30YWewAB3fMAAUe7AAHfUmJnAAHfVwACRgsAAd9a73MAAd9bAAEPRwAB31sAAUe/AAHfWwABR8MAAd9bAAFHywAB31sAAUfPAAHfWwABR9MAAd9bAAFH1wAB31sAAUfbAAHfWwABR98AAd9SYmsAAd+HAAJGCwAB34rQEwAB34pvbwAB31JiXwAB35cAAkYLAAHfmwABR+MAAd+bAAFH5wAB35sAAUfzAAHfmwABR/cAAd+bAAFIAwAB35sAAUgPAAHfmwABSBMAAd+bAAFIFwAB35sAAUgbAAHflwABR/8AAd9SYncAAd/EAAMAAkYPAAHfzuHTAAHf0mJnAAHf1g+fAAHf1wABSCcAAd/XAAFIKwAB39cAAUgvAAHf1wABSDMAAd/XAAFINwAB39cAAUg7AAHf1wABSD8AAd/XAAFIQwAB39cAAkYPAAHf/wABSEcAAd/SYnMAAeAGvFcAAd/SYl8AAeAOvFsAAeANIwAB4A8AAkYPAAHgGwABSFMAAeAbAAFIVwAB4BsAAUhbAAHgDwABSF8AAeAPAAFIYwAB4A7l2wAB4A7l3wAB4A7eBwAB4A7n1wAB4A7eCwAB4A7n2wAB4A8AAUhnAAHgDunHAAHgDwABKI8AAeAO6fcAAeAPAAEodwAB4A8AAUhrAAHgDwABSG8AAeAO6gsAAeAPAAEohwAB4A7qFwAB4A8AAShnAAHgDwABSHMAAeAPAAFIdwAB4A7d/wAB4A8AASiLAAHgDt4DAAHgDwABKG8AAeAPAAFIewAB4A8AAUh/AAHgDwABSIMAAeANWwAB4A8AASijAAHgDgxfAAHgDI8AAd/SYmsAAeCqDwcAAeCqEfsAAd/SYncAAeC0AwAB4LYWewAB4LcAAUhLAAHfzwABSKcAAeDGYmcAAeDLAAJGDwAB4M8AAUirAAHgzt3bAAHgzwABSK8AAeDPAAFIswAB4MZiXwAB4OLeAwAB4OLd/wAB4OLp9wAB4OLpxwAB4OMAAT4jAAHg4t4HAAHg4ul/AAHg4VsAAeDgjwAB4MZiawAB4QrRKwAB4QrePwAB4QoJmwAB4MZidwAB4RgDAAHhGwABSLQDAAJGEwAB4SZiXwAB4SsAAUkDAAHhJt5PAAHhMmJnAAHhNwACRhMAAeE630sAAeEyYl8AAeFC29sAAeEyYncAAeFIAwAB4ScAAUjPAAHhUmJnAAHhVwACRhMAAeFa3mcAAeFbAAFIqwAB4VijAAHhVtu/AAHhUmJfAAHhbwACRhMAAeFzAAFI1wAB4XMAAUjfAAHhcwABSOcAAeFzAAFI6wAB4XMAAUjvAAHhcwABSPMAAeFzAAFI9wAB4XMAAUjjAAHhbtvrAAHhbtx3AAHhbtxzAAHhbtxvAAHhbtxrAAHhbtxjAAHhbtxnAAHhbtxbAAHhbtxfAAHhbtxXAAHhbtxTAAHhbtxPAAHhbtxLAAHhbtxHAAHhbtxDAAHhbtw/AAHhbtw7AAHhbtwnAAHhbtwrAAHhbtwvAAHhbtwzAAHhbtw3AAHhboznAAHhbtwfAAHhbtwjAAHhbtwbAAHhbtwXAAHhbtwTAAHhbtwLAAHhbtwPAAHhbtwHAAHhbtwDAAHhbtv/AAHhbtv7AAHhbtx7AAHhbtv3AAHhbtvvAAHhbtvzAAHhbtx/AAHhUmJ3AAHiMAMAAeIzAAFI0wAB4ScAAUj/AAHiPmJnAAHiQg1zAAHiQtyPAAHiQtyLAAHiPmJ3AAHiUAMAAeJS3MQDAAJGFwAB4l8AAUkbAAHiYmJfAAHiZwABGk8AAeJiYncAAeJsAwAB4l8AAUkjAAHidmJfAAHiewABQIMAAeJ2YncAAeKAAwAB4l8AAUknAAHiimJfAAHijwABGe8AAeKPAAEZ9wAB4opidwAB4pgDAAHiXwABSSsAAeKiYl8AAeKnAAFAewAB4qJidwAB4qwDAAHiXwABSS8AAeK2YmcAAeK6DZcAAeK2Yl8AAeLDAAFAewAB4rZidwAB4sgDAAHiXwABSTMAAeLSYl8AAeLXAAEw3wAB4tcAAUC3AAHi1wABQLMAAeLSYncAAeLkAwAB4l8AAUk3AAHi7mJnAAHi8tu7AAHi7mJfAAHi+wABMN8AAeL7AAFAtwAB4vsAAUCzAAHi7mJ3AAHjCAMAAeJfAAFJOwAB4xJiXwAB4xcAARpTAAHjEmJ3AAHjHAADAAJGGwAB4ycAAUlDAAHjKmJnAAHjLJ8AAeMvAAJGGwAB4zSjAAHjLKcAAeMvAAFJTwAB4y8AAUlTAAHjKmJfAAHjSI8AAeMqYncAAeNQAwAB4ycAAUlXAAHjWmJnAAHjXryzAAHjXwABSVsAAeNevK8AAeNe5ycAAeNe7Q8AAeNfAAFJXwAB418AAUljAAHjXwACRhsAAeN/AAFJZwAB41piawAB44cAAUlrAAHjWmJfAAHjjwABSW8AAeOO0YMAAeNaYncAAeOYAwAB4ycAAUl7AAHjomJnAAHjpwACRhsAAeOq0BMAAeOrAAFJfwAB46sAAUmDAAHjqwABSYcAAeOrAAFJiwAB46sAAUmPAAHjqwABSZMAAeOrAAFJlwAB46sAAUmbAAHjqwABSZ8AAeOrAAFJowAB46sAAUmnAAHjqwABSasAAeOrAAFJrwAB46sAAUmzAAHjqwABSbcAAeOrAAFJuwAB46sAAUm/AAHjqwABScMAAeOrAAFJxwAB46sAAUnLAAHjqwABSc8AAeOrAAFJ0wAB46sAAUnXAAHjqwABSdsAAeOrAAFJ3wAB46sAAUnjAAHjqwABSecAAeOrAAFJ6wAB46sAAUnvAAHjqwABSfMAAeOrAAFJ9wAB46sAAUn7AAHjqwABSf8AAeOrAAFKAwAB46sAAUoHAAHjqwABSgsAAeOrAAFKDwAB46sAAUoTAAHjqwABShcAAeOrAAFKGwAB46sAAUofAAHjqwABSiMAAeOrAAFKJwAB46sAAUorAAHjqwABSi8AAeOrAAFKMwAB46sAAUo3AAHjqm+nAAHjqm+TAAHjqm+PAAHjqsi7AAHjqwABSjsAAeOqyAMAAeOqyBcAAeOqyLcAAeOrAAFKPwAB46sAAUpDAAHjqwABSkcAAeOrAAFKSwAB46sAAUpPAAHjqwABSlMAAeOrAAFKVwAB46sAAUpbAAHjqwABSl8AAeOrAAFKYwAB46sAAUpnAAHjqwABSmsAAeOrAAFKbwAB46JiawAB5MLGVwAB5MLGTwAB5MMAAUp7AAHkwwABSn8AAeTDAAFKgwAB5MMAAUqHAAHkwwABSosAAeTDAAFKjwAB5MLGjwAB5MMAATV7AAHkwsaHAAHkwwABSqcAAeTDAAFKqwAB5MMAAUqvAAHkwwABSrMAAeTDAAFKtwAB5MK08wAB5MMAAUp3AAHkwsYXAAHkwsYbAAHkwwABSrsAAeTDAAFKzwAB5MMAAUrTAAHkwwABStcAAeTDAAFK2wAB5MMAAUrfAAHkwwABSuMAAeTDAAFK5wAB5MMAAUrrAAHkwwABSvMAAeTDAAFK+wAB5MMAAUr/AAHkwwABSwMAAeTDAAFLBwAB5MMAAUsLAAHkwwABSw8AAeTChocAAeTDAAFLEwAB5MLLQwAB5MMAAUsXAAHkwwABSxsAAeTDAAFLHwAB5MK1uwAB5MMAAUsnAAHkwwABSysAAeTDAAFLLwAB5MMAAURbAAHkwwABSzMAAeTDAAFLNwAB5MLRPwAB5MMAAUs7AAHkwwABSz8AAeTDAAFLQwAB5MJrXwAB5MJrcwAB5MJrbwAB5MLFkwAB5MMAAUtHAAHkwsSvAAHkwsTDAAHkwsWPAAHkwwABS0sAAeTDAAFLTwAB5MLF/wAB5MLK6wAB5MMAAUtTAAHkwwABS1cAAeTDAAFLWwAB5MK43wAB5MMAAUtfAAHkwr7LAAHkwwABS2MAAeTDAAFLawAB46JiXwAB5esAAkYbAAHl7wABSr8AAeXvAAFKmwAB5e8AAUqTAAHl6wABS2cAAeXrAAFKcwAB46JidwAB5gQAAwACRh8AAeYPAAFLdwAB5hJiZwAB5hcAAkYfAAHmGsfLAAHmGr1TAAHmGtATAAHmGwABS3sAAeYbAAFLfwAB5hsAAUULAAHmGwABS4MAAeYbAAFLhwAB5hsAAUuLAAHmGwABS48AAeYSYl8AAeZG0x8AAeZG0xsAAeZHAAJGHwAB5lMAAUuXAAHmUwABS58AAeZTAAFLqwAB5lMAAUuvAAHmUwABS7MAAeZTAAFLuwAB5kbTCwAB5kbTKwAB5kbTLwAB5kbTNwAB5kbTJwAB5kbTIwAB5kbTFwAB5ka9YwAB5kZ8kwAB5hJidwAB5pAAAwACRiMAAeabAAFLvwAB5p5iZwAB5qMAAkYjAAHmpwABH3cAAeamvVMAAeam0BMAAeaeYmsAAea1YwAB5p5iXwAB5r69YwAB5r69bwAB5r4RBwAB5p5idwAB5swDAAHmmwABS8cAAebWYmcAAebZYwAB5tZiXwAB5uMAAUvTAAHm1mJ3AAHm6AMAAeabAAFL2wAB5vJiZwAB5vVjAAHm8mJfAAHm/wABS7cAAeb/AAFL4wAB5v4TdwAB5vJiawAB5w8AAUvfAAHm8mJ3AAHnFAMAAeabAAFL7wAB5x5iZwAB5yMAAkYjAAHnJr1TAAHnJtATAAHnJwABH3cAAecm3/MAAecjAAFL8wAB5yLUNwAB5yLtDwAB5yMAAUvXAAHnIwABS88AAecjAAFLwwAB5yMAAUvnAAHnHmJfAAHnVhEHAAHnVwACRiMAAedfAAFMAwAB51cAAUvrAAHnHmJ3AAHnaAADAAJGJwAB53MAAUwTAAHndmJnAAHnewACRicAAed+vVMAAed+0BMAAed/AAFLewAB537f1wAB537f9wAB537f8wAB537f+wAB537vewAB537vhwAB537TcwAB53ZiXwAB56rg8wAB56sAAUwnAAHndmJ3AAHntAMAAedzAAFMbwAB575iZwAB58MAAkYnAAHnxtarAAHnxr1TAAHnxtATAAHnxwABS3sAAefHAAEfdwAB58cAAUt/AAHnxwABRQsAAefG3m8AAefG3nMAAefG7TMAAefG3n8AAefHAAEPQwAB575iXwAB5/sAAUxzAAHn+t8jAAHnvmJ3AAHoBAADAAJGKwAB6A7wswAB6BJiZwAB6BcAAkYrAAHoGlkjAAHoEmJzAAHoIrxXAAHoEmJfAAHoKrxbAAHoKufjAAHoKwABTH8AAegrAAFMgwAB6CsAAUyHAAHoKwABTIsAAegrAAFMjwAB6CsAAUyTAAHoKwABTJcAAegrAAFMmwAB6CsAAUyfAAHoEmJrAAHoWunTAAHoDu7zAAHoYmJfAAHoZwABTKMAAehnAAFMpwAB6GYKIwAB6GJidwAB6HQDAAHoDwABTKsAAeh+YmcAAeiCD58AAeiDAAJGKwAB6IsAAR93AAHoitATAAHoiwABTLsAAeiLAAFMvwAB6IsAAUzDAAHogwABTLMAAeiC6dMAAeiDAAFMtwAB6H5icwAB6K68VwAB6H5iXwAB6La8WwAB6LcAAUx/AAHotwABTIMAAei3AAFMhwAB6LcAAUyLAAHotwABTI8AAei3AAFMkwAB6LcAAkYrAAHo1wABTMsAAei3AAFMmwAB6LcAAUzTAAHotufjAAHotwABTJcAAei3AAFMnwAB6H5idwAB6PADAAHoDwABTNcAAej6YmcAAej/AAJGKwAB6QMAAR93AAHpAr1TAAHpAtATAAHpAwABTNsAAekDAAFM3wAB6QMAAUzjAAHo+mJfAAHpHgojAAHpHwABTKcAAekfAAFMowAB6PpidwAB6SwDAAHoDuzXAAHpNmJnAAHpOwACRisAAek/AAFM5wAB6T7QEwAB6T8AAR93AAHpPryrAAHpPryTAAHpNmJrAAHpVrx/AAHpVrxrAAHpNmJfAAHpYr03AAHpYr0bAAHpNmJ3AAHpbAMAAegPAAFM7wAB6XZiZwAB6XqTxwAB6XoPRwAB6XoSDwAB6XZiXwAB6YiPAAHpdmJ3AAHpkAMAAegPAAFM+wAB6ZpiZwAB6Z4PRwAB6Z4SDwAB6ZpiXwAB6aiPAAHpmmJ3AAHpsAADAAJGLAMAAkYzAAHpvwABTQsAAenCYl8AAenHAAFLmwAB6ccAAUujAAHpxr0rAAHpxnyTAAHpwmJrAAHp2wABTHcAAenCYncAAengAwAB6b8AAU0TAAHp6mJnAAHp7wACRjMAAenzAAFNFwAB6fMAAU0bAAHp8wABTR8AAenyx8sAAenyvVMAAeny73MAAeny0BMAAenqYmsAAeoTAAFMdwAB6hMAAU0jAAHp6mJfAAHqHwABS5sAAeofAAJGMwAB6icAAU0nAAHqJwABTSsAAeonAAFNNwAB6icAAU1LAAHqJwABTVMAAeoevSsAAeoefJMAAenqYncAAepEAwAB6b7fywAB6k5iZwAB6lMAAkYzAAHqVwABTVsAAepXAAFNXwAB6k5iawAB6mMAAU1jAAHqYwABTWcAAepi3vcAAepOYl8AAepzAAFLowAB6nJ8kwAB6k5idwAB6nwDAAHpvwABTX8AAeqGYmcAAeqLAAJGMwAB6o8AAQ9HAAHqjwABTV8AAeqPAAEfdwAB6o8AAU2DAAHqhmJfAAHqowABS6MAAeqjAAJGMwAB6qsAAU0nAAHqqwABTYsAAeqifJMAAeqGYncAAeq4AAMAAkY3AAHqwwABTZ8AAerGYmcAAerKEUsAAerKCZsAAerKFVMAAerLAAEwWwAB6ssAAU2jAAHqywABTacAAerLAAEWTwAB6ssAAU2rAAHqxmJ3AAHq7AMAAerDAAFNrwAB6vZiZwAB6vqQewAB6vsAAkY3AAHrAwABTbMAAesDAAEPRwAB6wLecwAB6wMAAU3HAAHrAwABTcsAAesDAAFNzwAB6wMAAU3TAAHrAwABTdcAAesDAAFN2wAB6wMAAU3fAAHrAt9rAAHrAt5nAAHrAwABTeMAAesDAAFN5wAB6wMAAU3rAAHrAwABTe8AAesDAAFN8wAB6wMAAU33AAHrAwABTfsAAesDAAFN/wAB6wLfbwAB6wLfcwAB6wIi7wAB6wMAAU4HAAHrAwABThMAAer7AAFNtwAB6vqDiwAB6vsAAU27AAHq+wABTb8AAer56wAB6vqTNwAB6vsAAU3DAAHq+pN/AAHq+t93AAHq+pQ/AAHq+wABTgMAAer7AAFOCwAB6vpqIwAB6vsAAU4PAAHq9mJrAAHrowACRjcAAeunAAFOHwAB66cAAU4jAAHrptATAAHrpr1TAAHrpt//AAHrpwABTicAAeunAAFOGwAB66cAAU4rAAHrpwABH3cAAeunAAFM5wAB66cAAUULAAHrpwABTi8AAeunAAFWhwAB66IVtwAB66F7AAHropWDAAHq9mJfAAHr6oNTAAHr6oNfAAHr6wABTjMAAevq418AAevqlKsAAevqCiMAAevrAAJGNwAB7AcAAU43AAHsBwABTlMAAewHAAFOVwAB7AcAAU5nAAHsBwABTmsAAewHAAFOgwAB7AcAAU6HAAHsBwABTo8AAewHAAFOFwAB7AcAAU6XAAHsBwABTs8AAewHAAFOnwAB7AcAAU6nAAHsBwABTu8AAewHAAFPCwAB7AcAAU8jAAHsBwABTq8AAewHAAFPhwAB7AcAAU9/AAHsBwABT18AAewHAAFPjwAB7AcAAU+XAAHsBwABT6MAAewHAAFPMwAB7AcAAU/HAAHsBwABT7MAAewHAAFPrwAB7AcAAU/bAAHsBwABTscAAewHAAFOwwAB7AcAAU6zAAHsBwABTqMAAewHAAFQCwAB7AcAAU/vAAHsBwABTssAAewHAAFQFwAB7AcAAVAbAAHsBwABUCcAAewHAAFOmwAB7AcAAU9HAAHsBwABT08AAewHAAFP8wAB7AcAAU7jAAHsBwABTv8AAewHAAFQywAB7AcAAVDPAAHsBwABUMcAAewHAAFOYwAB7AcAAU/3AAHsBwABUb8AAewHAAFRrwAB7AcAAVHHAAHsBwABUeMAAewHAAFR/wAB7AcAAVIDAAHsBwABUgcAAewHAAFR9wAB7AcAAVH7AAHsBwABUhcAAewHAAFSUwAB7AcAAVJjAAHsBwABUqMAAewHAAFSqwAB7AcAAVKvAAHsBwABUrcAAewHAAFSuwAB7AcAAVLDAAHsBwABUscAAewHAAFSywAB7AcAAVLPAAHsBwABUP8AAewHAAFQgwAB7AcAAVLbAAHsBwABUtcAAewHAAFS0wAB7AcAAVNzAAHsBwABU68AAewHAAFT+wAB7AcAAVMjAAHsBwABUysAAewHAAFTMwAB7AcAAVM7AAHsBwABU0MAAewHAAFUJwAB7AcAAVQfAAHsBwABU0cAAewHAAFTSwAB7AcAAVQ/AAHsBwABVEcAAewHAAFTUwAB7AcAAVNbAAHsBwABU2MAAewHAAFTawAB7AcAAVMfAAHsBwABU28AAewHAAFQawAB7AcAAVD3AAHsBwABVOMAAewHAAFTFwAB7AcAAVU3AAHsBwABUpsAAewHAAFSnwAB7AcAAVBLAAHsBskTAAHsBwABVW8AAewHAAFViwAB7AcAAVV3AAHsBwABUKMAAewHAAFPewAB7AcAAVYDAAHsBwABVhcAAewHAAFPKwAB7AcAAVYHAAHsBwABVj8AAewHAAFWDwAB7AcAAVZfAAHsBwABVhMAAewHAAFQqwAB7AcAAVYLAAHsBwABVncAAewHAAFWewAB7AcAAVXzAAHsBwABVcsAAewHAAFQhwAB6+roywAB6+sAAU47AAHr6wABTj8AAevpWwAB6+sAAU5HAAHr6wABTksAAevrAAFOTwAB6+qKbwAB6+sAAU8DAAHr6l9XAAHr6hhHAAHr6hg7AAHr6hhjAAHr6hh3AAHr6hhTAAHr6hgbAAHr6hj/AAHr6hi3AAHr6hjHAAHr6hifAAHr6hinAAHr6hj3AAHr6hd7AAHr6hiHAAHr6wABUcsAAevqGJcAAevqGI8AAevqGO8AAevqGNMAAevqFvcAAevqFuMAAevqF48AAevqF5sAAevqF6MAAevqF4cAAevqF7cAAevqF6sAAevqF98AAevqF+cAAevqF+8AAevqF/cAAevqF78AAevqFmsAAevqFnMAAevqFiMAAevqFe8AAevqFisAAevqFjMAAevqFjsAAevqFkMAAevqFmMAAevqFfcAAevqGV8AAevqGCcAAevqGC8AAevqFqsAAevqFYMAAevqGWcAAevqGA8AAevqFsMAAevqFpsAAevqFlsAAevqFqMAAevqFrMAAevqF2sAAevqF9cAAevqGT8AAevqGAMAAevqF88AAevqF8cAAevqFs8AAevqFwcAAevqGQsAAevqGScAAer2Ym8AAe8hewAB6vZidwAB7ygDAAHqwwABVpMAAe8yYmcAAe83AAFPUwAB7zYXTwAB7zcAAU+TAAHvMmJ3AAHvRAMAAerDAAFWlwAB705iZwAB71IJqwAB71MAAVZnAAHvUwABVm8AAe9TAAFWcwAB71MAAVZjAAHvUwABVmsAAe9TAAFWiwAB705iXwAB73CPAAHvTmJ3AAHveAMAAerDAAFWowAB74JiZwAB74cAAVanAAHvhwABVqsAAe+HAAFWrwAB74cAAVazAAHvhwABVrcAAe+HAAFWuwAB74cAAVa/AAHvhwABVsMAAe+HAAFWxwAB74cAAVbLAAHvhwABVs8AAe+GB7MAAe+HAAFW0wAB74cAAVF3AAHvhwABVtcAAe+HAAFW2wAB74cAAVbfAAHvgmJfAAHvzwACRjcAAe/TAAFW4wAB79MAAVbrAAHv0wABVvMAAe/PAAFRDwAB788AAVELAAHvztxnAAHvzwABURMAAe+CYncAAe/wAwAB6sMAAVcfAAHv+mJnAAHv/wACRjcAAfAC3mcAAe/6YmsAAfAKEIcAAe/6Yl8AAfATAAFXIwAB7/pidwAB8BgDAAHqwwABVycAAfAiYl8AAfAmjrsAAfAmX4cAAfAmFRsAAfAmFT8AAfAmX38AAfAmF9cAAfAiYncAAfBAAwAB6sMAAVcrAAHwSmJ3AAHwTAMAAerDAAFXMwAB8FZiZwAB8FoKQwAB8FrwBwAB8FZiawAB8GYPBwAB8FZiXwAB8G0jAAHwbI8AAfBWYncAAfB4AwAB6sMAAVc7AAHwgmJnAAHwhh4DAAHwhwABVz8AAfCHAAFXQwAB8IcAAVdHAAHwhwABV0sAAfCHAAFXTwAB8IcAAVdTAAHwhwABV1cAAfCHAAFXWwAB8IcAAUcrAAHwhwABV18AAfCHAAFXYwAB8IcAAVdnAAHwhwABV2sAAfCHAAFXbwAB8IcAAVdzAAHwhwABV3cAAfCCYl8AAfDPAAFVvwAB8M8AAVXbAAHwzwABVc8AAfDPAAFXhwAB8MyPAAHwgmJ3AAHw5AMAAfDmVT8AAerDAAFXtwAB8PJiZwAB8PYL6wAB8PbfewAB8PcAAkY3AAHxAwABFTcAAfDyYl8AAfELAAFV1wAB8PJidwAB8RADAAHqwwABV7sAAfEaYmcAAfEfAAFXvwAB8R8AAVfDAAHxHwABV8cAAfEfAAFXywAB8R4L6wAB8R7fewAB8RxLAAHxHwABV88AAfEfAAFX0wAB8R8AAVfXAAHxGmJfAAHxSwABV9sAAfFLAAFX4wAB8UsAAVffAAHxSwABV+8AAfFLAAFX8wAB8UsAAVf3AAHxSmo/AAHxShzPAAHxSl9XAAHxShgbAAHxShj/AAHxShfXAAHxSwACRjcAAfF/AAFX+wAB8X8AAVgPAAHxShi3AAHxShjHAAHxShifAAHxShinAAHxShkLAAHxShknAAHxShgPAAHxShlnAAHxShWDAAHxShb3AAHxShVLAAHxShiHAAHxSwABWAsAAfFKGHcAAfFKGFMAAfFKGGMAAfFKF4cAAfFKFiMAAfFKFjMAAfFKFisAAfFKFjsAAfFKFe8AAfFKF8cAAfFKFmsAAfFKFrMAAfFKFqsAAfFKFpsAAfFKF3sAAfFKGV8AAfFKGPcAAfEaYncAAfIAAAMAAkY7AAHyCwABWBMAAfIOYl8AAfITAAFYFwAB8hMAAVgbAAHyEwABWB8AAfITAAFYIwAB8hMAAVgnAAHyDmJ3AAHyKAADAAJGPwAB8jJiXwAB8jcAAkY/AAHyOwABWkMAAfIzAAFYNwAB8kJiZwAB8kYPnwAB8kcAAkY/AAHyTt5nAAHyTwABWD8AAfJPAAFYQwAB8k8AAVhHAAHyTwABWEsAAfJCYnMAAfJmvFcAAfJCYl8AAfJuvFsAAfJvAAE8dwAB8m8AAU9rAAHybwABUMMAAfJvAAE/qwAB8kJidwAB8oQDAAHyMwABWG8AAfKOYmcAAfKTAAJGPwAB8pbeZwAB8pbeuwAB8pbTcwAB8pcAAVg/AAHylwABWEMAAfKXAAFYRwAB8pcAAVhLAAHyjmJfAAHytwACRj8AAfK7AAFYcwAB8rsAAVjvAAHytwABWNMAAfKOYncAAfLIAwAB8jMAAVkDAAHy0mJnAAHy1g+fAAHy1wABWQsAAfLW598AAfLXAAFY4wAB8tcAATxvAAHy0mJfAAHy7wABWRMAAfLvAAFZFwAB8uyPAAHy7wABUDMAAfLuvFsAAfLSYnMAAfMGvFcAAfLSYncAAfMOVT8AAfMOWLsAAfIzAAFZJwAB8xpiZwAB8x4PnwAB8x4JTwAB8xpiawAB8ysAAU9vAAHzGmJzAAHzMrxXAAHzGmJfAAHzOrxbAAHzGmJ3AAHzQlU/AAHzQli7AAHyMwABWTMAAfNOYmcAAfNSD58AAfNTAAFZOwAB805iawAB818AAVk/AAHzTmJzAAHzZrxXAAHzTmJfAAHzbrxbAAHzTmJ3AAHzdlU/AAHzdli7AAHyMwABWUcAAfOCYmcAAfOGD58AAfOG0RsAAfOHAAFC1wAB84cAAVlPAAHzhuffAAHzhwABVRcAAfOHAAFZUwAB84JicwAB86a8VwAB84JiXwAB8668WwAB868AAVUfAAHzrwABPHsAAfOCYmsAAfO/AAFZYwAB878AAVlvAAHzvtJrAAHzgmJ3AAHzzlU/AAHzzwABWVcAAfIzAAFZcwAB89piZwAB894PnwAB89picwAB8+a8VwAB89piXwAB8+68WwAB8+yPAAHz2mJrAAHz+tJrAAHz2mJ3AAH0AAMAAfIzAAFZfwAB9ApiZwAB9A7FjwAB9ApiawAB9BYC9wAB9BYPBwAB9ApiXwAB9CEjAAH0II8AAfQKYncAAfQsAwAB8jMAAVmHAAH0NmJnAAH0Og+fAAH0OwABIEMAAfQ2YnMAAfRGvFcAAfQ2Yl8AAfROvFsAAfQ2YmsAAfRXAAEfqwAB9DZidwAB9FwDAAH0XlU/AAHyMwABWY8AAfRqYmcAAfRuD58AAfRvAAExLwAB9G4TCwAB9G8AAVmXAAH0bhNrAAH0amJzAAH0hrxXAAH0amJfAAH0jrxbAAH0amJrAAH0lhO/AAH0lswjAAH0lrXjAAH0lnn3AAH0lhNvAAH0lhPrAAH0amJ3AAH0sAMAAfIzAAFZnwAB9LpiZwAB9L4PnwAB9LpicwAB9Ma8VwAB9LpiXwAB9M68WwAB9MyPAAH0umJrAAH02tJrAAH0umJ3AAH04AMAAfIzAAE8mwAB9OpiZwAB9O4PnwAB9O8AASOLAAH06mJzAAH0+rxXAAH06mJfAAH1ArxbAAH06mJrAAH1ChQLAAH1Ch4HAAH1ChBnAAH06mJ3AAH1GAMAAfIzAAFZqwAB9SJiZwAB9SYPnwAB9Sa14wAB9SJicwAB9TK8VwAB9SJiXwAB9Tq8WwAB9SJidwAB9UADAAHyMwABWbcAAfVKYmcAAfVOD58AAfVOEW8AAfVKYnMAAfVavFcAAfVKYl8AAfVivFsAAfVgjwAB9UpiawAB9W4JnwAB9W4PuwAB9UpidwAB9XgDAAHyMwABWccAAfWCYmcAAfWHAAExLwAB9YcAAVnLAAH1gmJrAAH1kwABWc8AAfWCYl8AAfWa338AAfWCYncAAfWgAwAB8jMAAVnXAAH1qmJnAAH1rwACRkMAAfWypX8AAfWqYmsAAfW7AAEBjwAB9apiXwAB9cLMEwAB9apidwAB9cgDAAHyMwABWdsAAfXSYl8AAfXWzBMAAfXWzHcAAfXSYmsAAfXjAAEBjwAB9dJidwAB9egDAAHyMwABWd8AAfXyYmcAAfX2D58AAfX2FO8AAfX3AAEBjwAB9fcAAVnnAAH18mJzAAH2CrxXAAH18mJfAAH2ErxbAAH2EswPAAH2EswTAAH18mJ3AAH2IAMAAfIzAAFZ/wAB9ipiZwAB9i4PnwAB9i8AAkY/AAH2NkizAAH2KmJzAAH2PrxXAAH2KmJfAAH2RrxbAAH2RswbAAH2RwABWhcAAfYqYmsAAfZXAAFZ5wAB9ipidwAB9lwDAAHyMwABWiMAAfZmYmcAAfZqD58AAfZqEW8AAfZqCZ8AAfZqD7sAAfZmYnMAAfZ+vFcAAfZmYl8AAfaGvFsAAfaEjwAB9mZidwAB9pADAAHyMwABWi8AAfaaYmcAAfaeD58AAfaeEW8AAfaaYnMAAfaqvFcAAfaaYl8AAfayvFsAAfawjwAB9ppiawAB9r4JnwAB9r4PuwAB9ppidwAB9sgDAAHyMwABWj8AAfbSYl8AAfbXAAFFSwAB9tcAAUYLAAH21wABS5MAAfbXAAFYmwAB9tcAAVinAAH21wABUr8AAfbXAAFVKwAB9tJidwAB9vQAAwACRkcAAfb/AAFaVwAB9wJiZwAB9wYPnwAB9wcAAVpfAAH3BwABWmMAAfcHAAEi/wAB9wcAAVpnAAH3BwABWmsAAfcHAAFacwAB9wcAAVp7AAH3BwABWoMAAfcHAAFaiwAB9wcAAVqTAAH3BwABWpsAAfcF6wAB9waTNwAB9wcAAkZHAAH3QtATAAH3Qr1TAAH3QwABWqMAAfdDAAFapwAB90MAAUUHAAH3QwABWqsAAfdDAAFarwAB90MAAVqzAAH3QwABWscAAfdDAAFaywAB90MAAVrPAAH3QwABWtMAAfdDAAFa1wAB9wbe6wAB9wYbZwAB9wYSDwAB9wYSOwAB9waJvwAB9wYSCwAB9waQbwAB9wbOQwAB9wcAAVq3AAH3BwABWrsAAfcHAAFavwAB9wcAAVrDAAH3BvJ3AAH3Bs5LAAH3Bt7TAAH3Bt7PAAH3AmJfAAH3ut83AAH3urxbAAH3ut8rAAH3uslvAAH3uwACRkcAAffPAAFbbwAB988AAVt7AAH3zwABW4cAAffPAAFbkwAB988AAVuPAAH3zsmHAAH3zwABW/MAAffPAAFb9wAB988AAVv7AAH3zwABXAMAAffPAAFcCwAB988AAVwPAAH3zwABXBMAAffPAAFcFwAB988AAVwbAAH3zwABXB8AAffPAAFcIwAB988AAVwnAAH3zwABXCsAAffPAAFcZwAB988AAVx/AAH3zwABXN8AAffPAAFc8wAB988AAV0LAAH3zwABXOMAAffPAAFdIwAB988AAV03AAH3zwABXScAAffPAAFdOwAB988AAV0bAAH3zwABXUcAAfe6yZsAAfe6yZcAAfe6y+MAAfe6hYsAAfe6yacAAfe6cEcAAfe6cGsAAfe7AAFbiwAB97sAAVubAAH3uwABPLMAAfe6cE8AAfe7AAE8twAB97qfZwAB97sAAVvHAAH3uwABPK8AAfe7AAE0UwAB97sAATD3AAH3uwABMOcAAfe7AAE8zwAB97sAATyjAAH3uswPAAH3uwABW+cAAfe7AAEZuwAB97sAARkXAAH3usv/AAH3uswLAAH3uwABO5sAAfe7AAEZEwAB97sAAVwvAAH3uwABO4sAAfe7AAEZwwAB97sAAVw3AAH3uwABXDsAAfe7AAE8xwAB97sAATzrAAH3umRzAAH3uwABPKcAAfe7AAE8qwAB97sAAVxTAAH3uwABXEsAAfe7AAFcTwAB97sAAVxfAAH3uwABPLsAAfe7AAE8vwAB97sAATzDAAH3uwABNFcAAfe7AAFcowAB97sAATf3AAH3uwABWysAAfe7AAFcqwAB97sAAVyvAAH3usxXAAH3ut9/AAH3uwABPNcAAfe7AAFbcwAB97sAATzbAAH3uwABW18AAfe7AAFbgwAB97sAAVu3AAH3uwABW1cAAfe7AAFbuwAB97sAAVuXAAH3uwABW7MAAfe7AAE83wAB97sAATzTAAH3utsjAAH3uwABPMsAAfe6zHcAAfe6zFMAAfe6zE8AAfe7AAE85wAB97sAAV0TAAH3uwABPOMAAfcCYmsAAflyFbcAAflyk+MAAflyzQMAAflzAAJGRwAB+YMAAVtTAAH5gwABW1sAAflyGzMAAflyraMAAflzAAFcuwAB9wJidwAB+ZgDAAH5mrxXAAH2/wABXVcAAfmmYmcAAfmqzmcAAfmmYmsAAfmyebcAAfmyy9sAAfmyk/MAAfmyG2cAAfmmYl8AAfnGZXcAAfnGy/8AAfnGvWsAAfnGzAMAAfnGE78AAfnGzAcAAfnGzFsAAfnGzF8AAfnGzAsAAfnGzGMAAfnGyacAAfnGzA8AAfnGzBMAAfnGzGsAAfnGzGcAAfnGzBsAAfnGzBcAAfnGzB8AAfnGhYsAAfnGyaMAAfnGy+cAAfnGy/sAAfnGy+sAAfnGzE8AAfnGy+8AAfnGy/MAAfnGzFMAAfnGzFcAAfnGy98AAfnGyZsAAfnGyZcAAfnGk+cAAfnGyW8AAfnGzCMAAfnGzHcAAfnGzHsAAfnGzG8AAfnGzHMAAfmmYncAAfpgAwAB9v8AAV1/AAH6amJnAAH6bpPjAAH6bs0DAAH6bpM3AAH6bsc/AAH6bwACRkcAAfqCx8sAAfpqYmsAAfqKCysAAfpqYncAAfqQAwAB9v8AAV2DAAH6mmJnAAH6nwACRkcAAfqi3mcAAfqjAAFHbwAB+qMAAV2HAAH6mmJfAAH6swACRkcAAfq3AAFb6wAB+ppidwAB+rwDAAH2/wABXYsAAfrGYmcAAfrLAAJGRwAB+s7eZwAB+s8AAUdvAAH6xmJrAAH62s0DAAH62hW3AAH62pM3AAH62vRTAAH6xmJfAAH67wABGbsAAfru8l8AAfru8tcAAfru8ucAAfru9CsAAfrGYncAAfsEAwAB9v8AAV2TAAH7DmJnAAH7EwACRkcAAfsWIj8AAfsWbvcAAfsXAAEVawAB+xac4wAB+xalfwAB+w5iXwAB+y8AAVrrAAH7LpPrAAH7LwABWzcAAfsvAAFbOwAB+y8AAVs/AAH7LwABW0MAAfsuk+cAAfsvAAFbRwAB+y8AAVtLAAH7LwABGG8AAfsvAAEQ4wAB+y8AARDnAAH7LwABEOsAAfsvAAEQ7wAB+y8AARDzAAH7DmJ3AAH7bAMAAfb/AAFdwwAB+3ZiZwAB+3sAAkZHAAH7ft5nAAH7dmJfAAH7hwABEPMAAfuHAAEQ7wAB+4cAARDrAAH7hwABEOcAAfuHAAEQ4wAB+3ZidwAB+5wDAAH2/wABXccAAfumYmcAAfuonwAB+6sAAkZHAAH7sKMAAfuopwAB+6sAAT0XAAH7qwABPR8AAfumYl8AAfvEjwAB+6ZidwAB+8wDAAH2/wABXdMAAfvWYmcAAfvbAAJGRwAB+97eZwAB+9ZiXwAB++cAAREHAAH75wACRkcAAfvvAAFd1wAB+9ZidwAB+/QDAAH2/wABXd8AAfv+YmcAAfwDAAJGRwAB/AcAAV3jAAH8Bt5nAAH7/mJfAAH8EwABEScAAfwTAAJGRwAB/BsAAV3nAAH7/mJ3AAH8IAADAAJGSwAB/CsAAV3zAAH8LmJnAAH8Mg+fAAH8Mt7TAAH8Mt7jAAH8Ms4zAAH8MtrzAAH8MwACRksAAfxLAAFd+wAB/EsAAV3/AAH8SwABXgMAAfxLAAFOKwAB/EsAAV4HAAH8MtkHAAH8Mu/nAAH8MvAzAAH8MvA3AAH8Mu/7AAH8Mt73AAH8MtQLAAH8Mq2jAAH8Ms5nAAH8Mt7XAAH8MtDrAAH8MpQ3AAH8Msx/AAH8MvDHAAH8MrwbAAH8MwABXgsAAfwuYnMAAfyivFcAAfwuYl8AAfyqvFsAAfyq12sAAfyq2asAAfyq2a8AAfyqbFsAAfyq2QMAAfyq2RMAAfyq2P8AAfyq2QsAAfyq2jMAAfyq18cAAfyq2PsAAfyq2RcAAfyrAAJGSwAB/OMAAV5bAAH84wABXiMAAfzjAAFeUwAB/KrZDwAB/Krw0wAB/KrRkwAB/KsAAV5fAAH8qtYbAAH8qt37AAH8qtj3AAH8qu5LAAH8LmJrAAH9EpPjAAH9Es0DAAH9Et7zAAH9EvDLAAH9EsL3AAH8LmJ3AAH9KAMAAfwrAAFeZwAB/TJiZwAB/TbOZwAB/TJiXwAB/T8AAkZLAAH9QwABXmsAAf1DAAFebwAB/T8AAV6DAAH9PwABXocAAf0/AAFejwAB/T8AAV6jAAH9PwABXqcAAf0/AAFemwAB/T8AAV6zAAH9PwABXosAAf0yYncAAf1sAwAB/CsAAV67AAH9dmJnAAH9ewACRksAAf1+3rsAAf12Yl8AAf2HAAERNwAB/XZidwAB/YwAAwACRk8AAf2WYmMAAf2bAAFevwAB/ZZiXwAB/aMAAS6LAAH9owABX/cAAf2XAAFYMwAB/a5iZwAB/bMAAkZPAAH9tt5nAAH9twABOu8AAf23AAE68wAB/bbeuwAB/bcAAV7DAAH9tsfLAAH9twABXscAAf2uYmsAAf3XAAJGTwAB/dq9UwAB/drQEwAB/a5iXwAB/ebexwAB/ecAAkZPAAH97wABXs8AAf3vAAFfTwAB/e8AAV7TAAH97wABXtcAAf3vAAFfGwAB/e8AAV87AAH95wABWP8AAf2uYncAAf4MAwAB/ZcAAV+DAAH+FmJfAAH+GwABWKcAAf4bAAFFSwAB/hsAAUYLAAH+GwABWJsAAf4bAAFSvwAB/hsAAUuTAAH+GwABVSsAAf4WYncAAf44AwAB/ZcAAV+HAAH+QmJnAAH+Rt7XAAH+RwABXw8AAf5HAAFfBwAB/kJiXwAB/lcAAVinAAH+VwABRUsAAf5XAAFGCwAB/lcAAVibAAH+VwABUr8AAf5XAAFLkwAB/lcAAVUrAAH+QmJ3AAH+dAMAAf2XAAFfiwAB/n5iXwAB/oMAAV9zAAH+gwABXt8AAf6DAAE0xwAB/oMAAV9HAAH+gwABNOMAAf6DAAFfjwAB/oMAAV77AAH+gwABXvMAAf6DAAFfkwAB/oMAAV8zAAH+gwABX1MAAf6DAAFe9wAB/oMAAV7/AAH+fmJ3AAH+uAMAAf2XAAFfowAB/sJiZwAB/scAAkZPAAH+ywABX6cAAf7CYl8AAf7TAAFfRwAB/tMAAV+rAAH+0wABX3MAAf7TAAFe3wAB/tMAATTHAAH+0wABX68AAf7TAAFfswAB/tMAATTjAAH+wmJ3AAH+9AMAAf2XAAFfxwAB/v5iZwAB/wMAAV9bAAH/AwACRk8AAf8LAAFfywAB/v5iXwAB/xMAAV/PAAH/Emo/AAH/EhzPAAH/EhnTAAH/EhnzAAH/EhozAAH/EtAvAAH/EhoLAAH/EtArAAH/EhnbAAH/EtAXAAH+/mJ3AAH/QAMAAf2XAAFf3wAB/0piZwAB/08AAV+rAAH/TwABX+MAAf9KYl8AAf9a8f8AAf9a8dsAAf9a8ecAAf9a8c8AAf9a8fMAAf9bAAEXHwAB/1sAARcjAAH/WwABFycAAf9bAAEXLwAB/1rQswAB/1oczwAB/1ryHwAB/1ryKwAB/1ryQwAB/1p7vwAB/1riMwAB/1sAARcrAAH/WhbDAAH/WwACRk8AAf+nAAFf5wAB/0pidwAB/6wAAwACRlMAAf+3AAFMCwAB/7piXwAB/77g8wAB/7pidwAB/8QAAwACRlcAAf/PAAFMDwAB/9JiawAB/9cAAUlrAAH/1wABTDsAAf/XAAFMQwAB/9cAAUxLAAH/1wABTFsAAf/XAAFMXwAB/9cAAUxrAAH/1wABTFMAAf/W3tMAAf/WvHcAAf/SYncAAgAAAAMAAkZbAAIACmJfAAIADwABYFcAAgAPAAJGWwACABcAAWBrAAIAFwABYG8AAgAXAAFgcwACABcAAWB3AAIAFwABYHsAAgAXAAFgfwACABcAAWCDAAIAFwABYIcAAgAPAAFgiwACAAsAAWATAAIAPmJnAAIAQwACRlsAAgBHAAFgFwACAEcAAWAbAAIARwABYB8AAgBHAAFgIwACAEcAAWAnAAIARwABYCsAAgBHAAFgLwACAEcAAWAzAAIARwABYDcAAgBHAAFgOwACAD5iXwACAHMAAWA/AAIAcwABYEMAAgBzAAFgRwACAHMAASj/AAIAcwABKQMAAgBzAAEvJwACAHMAAS8vAAIAcwABLysAAgBzAAEvMwACAHMAAWBLAAIAcwABL7cAAgBzAAEvuwACAHMAAS+/AAIAcwABL8MAAgBzAAEv/wACAHMAATAHAAIAPmJ3AAIAtAMAAgALAAFgTwACAL5iZwACAMJ+5wACAMMAATXrAAIAvmJrAAIAzgL3AAIAvmJfAAIA1I8AAgC+YncAAgDcAAMAAkZfAAIA5t+/AAIA6mJnAAIA7wABT+cAAgDvAAFYUwACAO8AAVjnAAIA6mJfAAIA/I8AAgDqYncAAgEEAwACAOcAAWCXAAIBDmJnAAIBEwABWQsAAgETAAFZDwACARMAAVjjAAIBEwABXP8AAgETAAE8bwACARMAAVjPAAIBEwABWMsAAgETAAFYxwACAQ5iXwACATSPAAIBDmJ3AAIBPAMAAgE+WLsAAgE/AAFgmwACAOcAAWCrAAIBTmJnAAIBUwACRl8AAgFWycMAAgFOYmsAAgFfAAFPbwACAU5idwACAWQDAAIBZwABYK8AAgDnAAFgswACAXJiZwACAXcAAVk7AAIBcmJrAAIBfwABWT8AAgFyYncAAgGEAwACAOcAAWC3AAIBjmJnAAIBkgL3AAIBkwABMg8AAgGOYncAAgGcAwACAOcAAWC7AAIBpmJnAAIBqJ8AAgGrAAJGXwACAbCjAAIBqKcAAgGqfHcAAgGrAAFgvwACAasAASwnAAIBqt+jAAIBqrGvAAIBqwABYMMAAgGrAAFgxwACAasAAWDLAAIBqwABYM8AAgGrAAFg0wACAasAAWDXAAIBqwABYNsAAgGrAAFg3wACAasAAWDjAAIBqwABYOcAAgGrAAFg6wACAaZiXwACAfyPAAIBpmJ3AAICBAMAAgDnAAFg7wACAg5iZwACAhIJnwACAhIJmwACAhLNUwACAhKFDwACAhK88wACAhJ8dwACAhMAAWC/AAICEwABLCcAAgIS36MAAgISsa8AAgITAAFgwwACAhMAAWDnAAICDmJrAAICRg8HAAICDmJfAAICTSMAAgJMjwACAg5idwACAlsAAkZfAAICXwABYPMAAgJbAAFg1wACAlsAAWDbAAICWwABYN8AAgJbAAFg4wACAlsAAWDHAAICWwABYMsAAgJbAAFgzwACAlsAAWDTAAICWwABYOsAAgDnAAFhCwACAopiZwACAoyfAAICjwACRl8AAgKUowACAoynAAICjmcrAAICjlkfAAICjns7AAICjgmrAAICimJfAAICsI8AAgKKYncAAgK4AwACAOcAAWEfAAICwmJnAAICxglPAAICxgpDAAICxgmfAAICxtJ3AAICwmJzAAIC2AMAAgLCYl8AAgLiETcAAgLiETsAAgLhIwACAuCPAAICwmJrAAIC9g8HAAICwmJ3AAIC/lU8AwACRmMAAgMGYl8AAgMLAAJGYwACAw8AAWMjAAIDBwABYTsAAgMWYl8AAgMbAAFhPwACAxsAAWFDAAIDGwABYUcAAgMbAAFhSwACAxsAAWFPAAIDGwABYVMAAgMbAAFhVwACAxsAAWFbAAIDGwABYV8AAgMbAAFhYwACAxsAAWFnAAIDGwABYWsAAgMbAAFhbwACAxq9JwACAxsAAWF3AAIDGwABYXsAAgMbAAFhfwACAxsAAWGDAAIDGwABYYcAAgMbAAFhiwACAxrT6wACAxsAAWGPAAIDGwABYZMAAgMbAAFhlwACAxsAAWGbAAIDGwABYaMAAgMbAAFhpwACAxsAAWGrAAIDGwABYa8AAgMbAAFL0wACAxsAAWGzAAIDGwABYbcAAgMbAAFhuwACAxsAAWG/AAIDGwABYcMAAgMbAAFhxwACAxsAAWHLAAIDGwABYc8AAgMa7gMAAgMbAAFh0wACAxrtwwACAxsAAWHXAAIDGwABYdsAAgMbAAFh3wACAxsAAWHjAAIDGwABYecAAgMbAAFh6wACAxsAAWHvAAIDGwABYfMAAgMbAAFh9wACAxsAAWH7AAIDGwABTFcAAgMbAAFh/wACAxsAAWIDAAIDGwABYgcAAgMbAAFiCwACAxsAAWIPAAIDGwABYhMAAgMWYncAAgQEAwACAwcAAWIXAAIEDmJnAAIEEuCzAAIEDmJfAAIEGwABOXMAAgQbAAE5dwACBBsAATl7AAIEGwABOX8AAgQbAAE5gwACBBsAATmHAAIEGwABOYsAAgQbAAE5jwACBBsAATmTAAIEGwABOQ8AAgQbAAE5EwACBBsAATnvAAIEGwABOWMAAgQbAAFiGwACBBsAATlvAAIEGwABOfcAAgQbAAE5lwACBBsAATjrAAIEGwABOVMAAgQbAAE4lwACBBsAATmvAAIEGwABOcMAAgQbAAE54wACBBsAATnnAAIEGwABObMAAgQbAAE56wACBBsAATm3AAIEGwABOfsAAgQbAAE5/wACBBsAAToHAAIEGwABOgsAAgQbAAE6AwACBBqpFwACBBsAATkXAAIEGwABOPcAAgQbAAE4nwACBBsAAThzAAIEGwABOJsAAgQbAAE4jwACBBsAATirAAIEGwABOSMAAgQbAAE5GwACBBsAATkfAAIEGwABObsAAgQaGNMAAgQbAAE4dwACBBsAAToPAAIEDmJ3AAIE2AMAAgMHAAFiJwACBOJiZwACBOcAAkZnAAIE6ttzAAIE4mJrAAIE8wABYisAAgTiYl8AAgT7AAJGZwACBP8AAWIvAAIE/wABYjMAAgT7AAFh+wACBPsAAWH3AAIE+wABYfMAAgT7AAFh7wACBPsAAWHrAAIE+wABYecAAgT7AAFh4wACBPsAAWHfAAIE+wABYdsAAgT7AAFh1wACBPrtwwACBPsAAWHTAAIE+u4DAAIE+wABYcsAAgT7AAFhzwACBPsAAWHHAAIE+wABYcMAAgT7AAFhvwACBPsAAWG7AAIE+wABYbMAAgT7AAFhtwACBPsAAUvTAAIE+wABYa8AAgT7AAFhqwACBPsAAWGnAAIE+wABYaMAAgT7AAFhmwACBPsAAWGXAAIE+wABYZMAAgT7AAFhjwACBPrT6wACBPsAAWGLAAIE+wABYYcAAgT7AAFhgwACBPsAAWF/AAIE+wABYXsAAgT7AAFhdwACBPq9JwACBPsAAWFvAAIE+wABYWsAAgT7AAFhZwACBPsAAWFjAAIE+wABYV8AAgT7AAFhVwACBPsAAWFbAAIE+wABYVMAAgT7AAFhTwACBPsAAWFLAAIE+wABYUcAAgT7AAFhQwACBPsAAWE/AAIE+wABTFcAAgT7AAFh/wACBPsAAWIDAAIE+wABYgcAAgT7AAFiCwACBPsAAWIPAAIE+wABYhMAAgTiYncAAgXwAwACAwcAAWMTAAIF+mJnAAIF/uD/AAIF/uEDAAIF+mJfAAIGCuEHAAIF+mJ3AAIGEAMAAgMHAAFjFwACBhpiZwACBh8AAWIrAAIGHwABODcAAgYfAAFcQwACBhpidwACBiwDAAIDBwABYxsAAgY2YmcAAgY633cAAgY6EqMAAgY6Ca8AAgY2Yl8AAgZKX18AAgZKG1sAAgZKG08AAgZKG0MAAgZKGycAAgZKGw8AAgZKGwMAAgZKGvcAAgZKGuMAAgZKGs8AAgZKGr8AAgZKGq8AAgZKGqMAAgZKGpcAAgZKGosAAgY2YncAAgaIAAMAAkZrAAIGkwABYycAAgaWYmcAAgaaCVcAAgaap9cAAgaWYncAAgakAwACBpMAAWMrAAIGrmJnAAIGsuCbAAIGsuCrAAIGrmJ3AAIGvAMAAgaTAAFjLwACBsZiXwACBsrgiwACBsrglwACBsZidwACBtQAAwACRm8AAgbe38MAAgbiYmcAAgbm4J8AAgbm4LMAAgbm4KcAAgbiYnMAAgb2WLsAAgbiYncAAgb8AwACBt8AAWM3AAIHBmJfAAIHCwABOZ8AAgcLAAE08wACBwZiawACBxcAATmjAAIHBmJ3AAIHHAMAAgbfAAFjOwACByZiZwACBysAAkZvAAIHLwABWD8AAgcvAAFjPwACByZiXwACBzsAAWNDAAIHOwABY0cAAgc7AAE5nwACBzsAATTzAAIHJmJrAAIHTwABOaMAAgcmYncAAgdUAwACBt8AAWNLAAIHXmJrAAIHYwABOaMAAgdjAAE53wACB15idwACB2wDAAIG3wABY08AAgd2YmcAAgd7AAJGbwACB38AAWNTAAIHfwABYz8AAgd7AAE53wACB3ZiXwACB48AAWNXAAIHjwABY0cAAgd2YmsAAgebAAE5owACB3ZidwACB6ADAAIG3wABY18AAgeqYmcAAgevAAFjYwACB67gswACB6piXwACB7sAAWNnAAIHuwABY0cAAge7AAFjbwACB6pidwACB8gAAwACRnMAAgfS7usAAgfWYmcAAgfbAAFJTwACB9sAAUlTAAIH2wACRnMAAgfmWSMAAgfWYnMAAgfuvFcAAgfWYl8AAgf2vFsAAgf3AAE/hwACB/cAAT+DAAIH1mJrAAIIBs43AAIIBs47AAIIBwABX0MAAggHAAFMUwACCAbK8wACCAbSNwACCAbSPwACCAbSQwACCAbSMwACCAcAAV9LAAIH0u7vAAIIMmJnAAIINtI/AAIINtIzAAIIMmJfAAIIQwABY3MAAghDAAFjdwACCEMAAUv/AAIIQwABY3sAAghDAAFMFwACCEMAAWODAAIIQwABTFcAAghC4FcAAghCCiMAAggyYncAAghoAwACB9MAAWOHAAIIcmJnAAIIdwACRnMAAgh7AAFjiwACCHsAAWOPAAIIewABY5MAAgh7AAFjlwACCHsAAWObAAIIewABYvcAAgh7AAFjnwACCHsAAWOjAAIIdsrzAAIIdtI/AAIIdtJDAAIIdtIzAAIIdwABX0sAAghyYmsAAgizAAJGcwACCLbQEwACCHJiXwACCL8AAWNzAAIIvwABY3cAAgi/AAJGcwACCMsAAWOnAAIIywABY68AAgjLAAFjtwACCMsAAWO7AAIIvwABTBcAAgi/AAFjgwACCL8AAUv/AAIIvwABY3sAAgi/AAFMVwACCL7gVwACCL4KIwACCHJidwACCPgDAAIH0wABY78AAgkCYmcAAgkGD58AAgkHAAJGcwACCQ8AAWOPAAIJDwABY5MAAgkPAAFjlwACCQ8AAWObAAIJDwABYvcAAgkHAAFJTwACCQcAAUlTAAIJBsrzAAIJBtI/AAIJBtJDAAIJBtIzAAIJBwABX0sAAgkCYnMAAglCvFcAAgkCYl8AAglKvFsAAglLAAE/hwACCUsAAT+DAAIJAmJrAAIJWs43AAIJWs47AAIJWwABXz8AAglbAAFfQwACCVrSNwACCVsAAUxTAAIJAmJ3AAIJdAADAAJGdwACCX8AAWPLAAIJgmJnAAIJhwACRncAAgmLAAFjzwACCYrHywACCYq9UwACCYrQEwACCYsAAUt7AAIJiwABH3cAAgmLAAFM5wACCYsAAUt/AAIJiu+DAAIJiwABS4MAAgmLAAFLhwACCYrf/wACCYsAAWPTAAIJgmJfAAIJwwACRncAAgnHAAFj1wACCccAAWPbAAIJxwABS5cAAgnHAAFLnwACCccAAWPfAAIJxwABS6sAAgnHAAFLrwACCccAAUuzAAIJxwABY/cAAgnHAAFLuwACCccAAWP7AAIJwtMfAAIJwtMbAAIJwtMLAAIJwtMrAAIJwtMvAAIJwtM3AAIJwtMnAAIJwtMjAAIJwtMXAAIJwr1jAAIJwwABY+8AAgnCfJMAAgmCYncAAgokAAMAAkZ7AAIKLwABZAMAAgoyYmcAAgo3AAJGewACCjrQCwACCjsAAWQHAAIKOwABZAsAAgoyYmsAAgpKkJMAAgpKAz8AAgpLAAFkDwACCksAAWQTAAIKSwABZBcAAgpLAAFkGwACCksAAWQfAAIKSwABZCMAAgpK7l8AAgpKCZ8AAgoyYl8AAgp2EnsAAgp3AAFkJwACCncAAWQvAAIKdwABZDMAAgp3AAFkKwACCncAAWQ3AAIKdwABZD8AAgp3AAFkOwACCnSPAAIKMmJ3AAIKnAMAAgovAAFkQwACCqZiZwACCqpnKwACCqZiawACCrKQkwACCrIJnwACCqZidwACCrwDAAIKLwABZEcAAgrGYmcAAgrKCasAAgrK0oMAAgrLAAFkSwACCssAAWRPAAIKywABZFMAAgrGYmsAAgrikJMAAgriCZ8AAgrGYl8AAgrvAAFkVwACCuyPAAIKxmJ3AAIK+AMAAgovAAFkbwACCwJiZwACCwcAAkZ7AAILCp7rAAILCm73AAILCwABZHMAAgsLAAFkdwACCwsAAWR7AAILBwABRc8AAgsHAAFE+wACCwJiawACCysAAWSPAAILKwABZJMAAgsrAAFklwACCysAAWSbAAILAmJfAAILPwABZJ8AAgs/AAFkowACCz8AAWSnAAILPwACRnsAAgtPAAFkqwACC08AAWSvAAILTwABZH8AAgtPAAFkgwACC08AAWSHAAILTwABZIsAAgs+zmMAAgsCYncAAgtsAwACCi7wvwACC3ZicwACC3q8VwACC3ZiXwACC4K8WwACC4MAAUVLAAILgwABRgsAAguDAAFLkwACC4MAAVK/AAILgwABVSsAAgovAAFk7wACC55iXwACC6K8WwACC6MAAUVLAAILowABS5MAAgujAAFGCwACC6MAAVK/AAILowABVSsAAgueYncAAgu8AwACCi8AAWTzAAILxmJnAAILyg+fAAILywACRnsAAgvSvVMAAgvLAAFfawACC8sAAV8nAAILywABXysAAgvLAAFfCwACC8sAAV8TAAILywABX28AAgvLAAFfdwACC8ZicwACC/a8VwACC8ZiXwACC/68WwACC/7TQwACC/8AAUVLAAIL/wABS5MAAgv/AAFGCwACC/8AAVK/AAIL/wABVSsAAgvGYncAAgwcAwACCi8AAWT7AAIMJmJfAAIMKwABTCsAAgwrAAFMLwACDCsAAUwzAAIMKr0nAAIMKwABZP8AAgwmYncAAgxAAwACCi8AAWUDAAIMSmJfAAIMTwABTCsAAgxPAAFMLwACDE8AAUwzAAIMTr0nAAIMTwABZP8AAgxKYncAAgxkAwACCi8AAWUHAAIMbmJnAAIMcwACRnsAAgx2vVMAAgx2vJ8AAgxzAAFlCwACDHMAAWUPAAIMcwABZRMAAgxzAAFlFwACDHMAAWUbAAIMcwABZR8AAgxuYl8AAgybAAFMKwACDJsAAUwvAAIMmwABTDMAAgyavScAAgybAAFk/wACDG5idwACDLAAAwACRn8AAgy6Yl8AAgy/AAFlqwACDL8AAWWzAAIMuwABZWsAAgzKYl8AAgzO4IMAAgzKYncAAgzUAwACDLsAAU0HAAIM3mJfAAIM4wABTW8AAgzeYncAAgzoAwACDLsAAWVzAAIM8mJnAAIM9wACRn8AAgz6vVMAAgz639cAAgz7AAFldwACDPJiXwACDQsAAU1vAAINCwACRn8AAg0TAAFlewACDRMAAWWDAAINEwABZYsAAg0TAAFlfwACDPJidwACDSQAAwACRoMAAg0uYl8AAg0zAAJGgwACDTcAAWXXAAINLwABZbsAAg0+YmcAAg1DAAJGgwACDUbeZwACDUcAAWW/AAINPmJfAAINUwACRoMAAg1XAAFlwwACDVLNCwACDVLNEwACDVLNDwACDVLOWwACDVLNOwACDVLNIwACDVISAwACDVLOUwACDT5idwACDXwDAAINLwABZdMAAg2GYmcAAg2KzmcAAg2KAz8AAg2GYmsAAg2WzQMAAg2GYl8AAg2dWwACDZ4XjwACDZ4XmwACDZ4XowACDZ4XhwACDZ4XtwACDZ4XqwACDZ4X3wACDZ4X5wACDZ4X7wACDZ4WswACDZ4aZwACDZ4ZXwACDZ4XvwACDZ4WwwACDZ4YGwACDYZidwACDeAAAwACRocAAg3rAAFl2wACDe5iawACDfKT4wACDfLHPwACDfLNAwACDfIVtwACDfIbMwACDfKtowACDe5iXwACDg8AATD3AAIODwABPKMAAg4PAAEw5wACDg7MDwACDg7JpwACDg8AATynAAIODwABXFMAAg4OcE8AAg4PAAE8rwACDg6fZwACDg8AATRTAAIODnBrAAIODwABPLMAAg4PAAE8twACDg8AATf3AAIODmRzAAIODwABPLsAAg4PAAE8vwACDg8AATzDAAIODwABIqsAAg4PAAE0VwACDg8AATzHAAIODwABNEsAAg4O4FMAAg4PAAFbxwACDg8AATALAAIODwABMA8AAg4PAAEwAwACDg8AAWXfAAIODwABZeMAAg4PAAFl5wACDg8AAWXLAAIODwABZc8AAg4O4H8AAg3uYncAAg6YAwACDesAAWXrAAIOomJnAAIOpJ8AAg6nAAJGhwACDqyjAAIOpKcAAg6mw0MAAg6mw0cAAg6mw0sAAg6mw08AAg6nAAEk8wACDqJiXwACDsyPAAIOomJ3AAIO1AADAAJGiwACDt5iXwACDuMAAkaLAAIO5wABZ18AAg7jAAFnYwACDt8AAWYPAAIO8mJnAAIO9esAAg72kzcAAg73AAJGiwACDwMAAUdvAAIPAtATAAIPAr1TAAIPAwABWqMAAg8DAAFapwACDwMAAUUHAAIPAwABWqsAAg8DAAFarwACDwMAAWYTAAIPAwABWrMAAg8DAAFmFwACDwMAAWOLAAIPAwABWtMAAg8DAAFa1wACDvZZ7wACDvYbZwACDvYSDwACDvYSOwACDvaJvwACDvYSCwACDvcAAVsvAAIO9pBvAAIO9s5DAAIO9wABWrcAAg73AAFauwACDvcAAVq/AAIO9wABWsMAAg728ncAAg72zksAAg73AAE4NwACDvJiawACD34VtwACD36T4wACD37NAwACD38AAkaLAAIPjwABW1MAAg+PAAFbWwACD34bMwACD36towACD36n1wACD38AAVy7AAIPfsc/AAIPfwABZrcAAg7yYl8AAg+y3ysAAg+yyW8AAg+zAAJGiwACD78AAVtvAAIPvwABW3sAAg+/AAFbhwACD78AAVuTAAIPvwABW48AAg++yYcAAg+/AAFb+wACD78AAVvzAAIPvwABW/cAAg+/AAFcCwACD78AAVwPAAIPvwABXBcAAg+/AAFmIwACD78AAVwbAAIPvwABXB8AAg+/AAFcIwACD78AAVwnAAIPvwABXCsAAg+/AAFmKwACD78AAVxnAAIPvwABXH8AAg+/AAFmOwACD78AAWZPAAIPvwABZlsAAg+/AAFmZwACD78AAWZ7AAIPvwABZpMAAg+/AAFmqwACD78AAWbDAAIPvwABZscAAg+yyZsAAg+yyZcAAg+zAAFmGwACD7LL4wACD7KFiwACD7LJpwACD7JwRwACD7JwawACD7MAAVuLAAIPswABW5sAAg+zAAE8swACD7JwTwACD7MAATy3AAIPsp9nAAIPswABW8cAAg+zAAE8rwACD7MAATRTAAIPswABMPcAAg+zAAEw5wACD7MAATzPAAIPswABPKMAAg+yzA8AAg+zAAFb5wACD7MAARm7AAIPswABGRcAAg+yy/8AAg+yzAsAAg+zAAE7mwACD7LMTwACD7MAARkTAAIPswABXC8AAg+zAAE7iwACD7MAARnDAAIPsuB/AAIPswABNEsAAg+zAAE8xwACD7JkcwACD7MAATynAAIPswABZi8AAg+zAAFcUwACD7MAAVxLAAIPswABXE8AAg+zAAFcXwACD7MAATy7AAIPswABPL8AAg+zAAE8wwACD7MAASKrAAIPswABZjcAAg+zAAE0VwACD7MAAVyjAAIPswABN/cAAg+zAAFbXwACD7MAAVuDAAIPswABW7MAAg+zAAFblwACD7MAAVu7AAIPswABW1cAAg+zAAFbtwACD7MAAVtzAAIPsuBTAAIPsuCvAAIPswABZrsAAg+zAAFmvwACD7MAAWXLAAIPswABZecAAg+zAAFlzwACD7MAAWXfAAIPswABZeMAAg+zAAEwCwACD7MAATAPAAIPswABMAMAAg+zAAFmSwACD7MAAWZXAAIPswABZmMAAg+zAAFbKwACD7MAAWaDAAIPswABZosAAg+zAAFmnwACD7MAAWajAAIPswABZqcAAg+zAAFmswACDvJidwACEXwDAAIO3wABZs8AAhGGYmcAAhGKzmcAAhGGYmsAAhGSebcAAhGSy9sAAhGSk/MAAhGSG2cAAhGGYl8AAhGmZXcAAhGmy/8AAhGmvWsAAhGmzAMAAhGmE78AAhGmzAcAAhGmzAsAAhGmyacAAhGmzA8AAhGmzBMAAhGmzBsAAhGmzBcAAhGmzC8AAhGmzB8AAhGmhYsAAhGmyaMAAhGmy+cAAhGmy/sAAhGmzCsAAhGmy+sAAhGmy+8AAhGmy/MAAhGmy98AAhGmyZsAAhGmyZcAAhGmk+cAAhGmyW8AAhGmzDMAAhGmzDsAAhGmzDcAAhGmzD8AAhGmzEMAAhGmzCMAAhGGYncAAhIsAwACDt8AAWbTAAISNmJnAAISOpPjAAISOs0DAAISOpM3AAISOsc/AAISOwACRosAAhJOx8sAAhI2YmsAAhJWCysAAhI2YncAAhJcAwACDt8AAWbXAAISZmJnAAISawACRosAAhJu3mcAAhJvAAFHbwACEm8AAV2HAAISZmJfAAISfwACRosAAhKDAAFb6wACEmZidwACEogDAAIO3wABZtsAAhKSYmcAAhKXAAJGiwACEpreZwACEpsAAUdvAAISlvK7AAISkmJrAAISqs0DAAISqhW3AAISqpM3AAISqvRTAAISkmJfAAISvwABGbsAAhK+8l8AAhK+8tcAAhK+8ucAAhK+9CsAAhKSYncAAhLUAwACDt8AAWbfAAIS3mJnAAIS4wACRosAAhLnAAFm4wACEubeZwACEubf1wACEubf7wACEt5iawACEvsAAkaLAAIS/r1TAAIS/tATAAIS3mJfAAITCuCDAAITCwACRosAAhMTAAFm8wACExMAAWbrAAITEwABZwcAAhMTAAFnFwACExMAAWcbAAITEwABZwsAAhMTAAFnAwACExMAAWb7AAITEwABZu8AAhMTAAFnEwACExMAAS/LAAIS3mJ3AAITQAMAAg7fAAFnLwACE0piZwACE07OZwACE0piXwACE1cAATt/AAITVu/zAAITVsvnAAITVwABO6sAAhNXAAE7iwACE1cAATubAAITSmJ3AAITcAMAAg7fAAFnMwACE3piZwACE37OZwACE38AAkaLAAIThwABZzcAAhN/AAFlbwACE3piXwACE5LUPwACE5MAAWdDAAITkwABZ0cAAhOS1EMAAhOS1EcAAhN6YncAAhOoAwACDt8AAWdXAAITsmJnAAITts5nAAITsmJrAAITvwACRosAAhPCvVMAAhPC0BMAAhOyYl8AAhPPAAE37wACE88AATf7AAITzwABN/cAAhOyYncAAhPcAAMAAkaPAAIT5mJfAAIT6wABZ3cAAhPnAAFnawACE/JiZwACE/YFNwACE/JiXwACE/4fFwACE/JidwACFAQDAAIT5wABZ28AAhQOYmcAAhQSArMAAhQSVFMAAhQOYl8AAhQeHx8AAhQeHxsAAhQeDm8AAhQOYncAAhQsAAMAAkaTAAIUNwABZ4sAAhQ6YmcAAhQ/AAJGkwACFEJZIwACFDpicwACFEq8VwACFDpiXwACFFK8WwACFFMAATx3AAIUUwABP6sAAhRTAAFQwwACFFMAAU9rAAIUNwABZ48AAhRqYmcAAhRsnwACFG8AAkaTAAIUdKMAAhRspwACFG8AAU/nAAIUbwABWPcAAhRvAAFnkwACFG8AAWeXAAIUamJfAAIUkI8AAhRqYncAAhSYAwACFDcAA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mJfAAIY7nMnAAIY7wABaEMAAhjvAAFo3wACGO8AAWjjAAIY7wABaNsAAhjvAAFoRwACGO8AAWiLAAIY7wABaH8AAhjqYncAAhkQAwACF0sAAWjvAAIZGmJfAAIZHwABaEMAAhkfAAFo8wACGR8AAWj3AAIZHwABF4cAAhkaYncAAhkwAwACF0sAAWj7AAIZOmJfAAIZPnMnAAIZPwABaEcAAhk/AAFoiwACGT8AAWh/AAIZOmJ3AAIZUAMAAhdLAAFpBwACGVpiXwACGV8AAWhDAAIZXwABaEcAAhlfAAFoiwACGV5zJwACGV8AAWh/AAIZWmJ3AAIZdAMAAhdLAAFpGwACGX5iXwACGYJzJwACGYMAAWhDAAIZgwABaIsAAhmDAAFofwACGX5idwACGZQDAAIXSwABaSMAAhmeYl8AAhmicycAAhmjAAFoQwACGaMAAWiLAAIZowABaH8AAhmeYncAAhm0AwACF0sAAWkrAAIZvmJfAAIZwnMnAAIZwwABaEMAAhnDAAFoiwACGcMAAWh/AAIZvmJ3AAIZ1AMAAhdLAAFpMwACGd5iXwACGeMAAWhDAAIZ4wABaEcAAhnjAAFoiwACGeMAAWh/AAIZ3mJ3AAIZ9AMAAhdLAAFpNwACGf5iXwACGgMAAWhHAAIaAnMnAAIaAwABaIsAAhoDAAFofwACGf5idwACGhQDAAIXSwABaT8AAhoeYl8AAhoicycAAhojAAFoiwACGiMAAWh/AAIaHmJ3AAIaMAMAAhdLAAFpRwACGjpiXwACGj5zJwACGj8AAWiLAAIaPwABaH8AAho6YncAAhpMAwACF0sAAWlPAAIaVmJfAAIaWnMnAAIaWwABaIsAAhpbAAFofwACGlZidwACGmgDAAIXSwABaVcAAhpyYl8AAhp2cycAAhp3AAFoiwACGncAAWh/AAIacmJ3AAIahAMAAhdLAAFpXwACGo5iXwACGpJzJwACGpMAAWhHAAIajmJ3AAIanAMAAhdLAAFpawACGqZiXwACGqsAAWhHAAIapmJ3AAIasAMAAhdLAAFpcwACGrpiXwACGr8AAWhHAAIavwABaH8AAhq6YncAAhrIAwACF0sAAWl3AAIa0mJfAAIa1wABaH8AAhrSYncAAhrcAwACF0sAAWl/AAIa5mJfAAIa6wABaH8AAhrmYncAAhrwAwACF0sAAWmHAAIa+mJfAAIa/wABaEcAAhr6YncAAhsEAwACF0sAAWmPAAIbDmJfAAIbEnMnAAIbEwABaEcAAhsOYncAAhscAAMAAkajAAIbJwABaZcAAhsqYmcAAhsu47sAAhsukHsAAhsqYl8AAhs648MAAhs7AAFpnwACGzrjFwACGzsAAWn3AAIbOwABafsAAhs64y8AAhsqYncAAhtUAAMAAkanAAIbXmJfAAIbYwABahsAAhtjAAJGpwACG2sAAWojAAIbYwABaj8AAhtjAAFqQwACG2MAAWpfAAIbYwABamMAAhtjAAEf4wACG2MAAWq7AAIbYwABasADAAJGqwACG48AAWrPAAIbkmJnAAIblJ8AAhuXAAJGqwACG5yjAAIblKcAAhuXAAFq0wACG5cAAWrXAAIblwABatsAAhuSYl8AAhu0jwACG5JidwACG7wDAAIbjwABat8AAhvGYmcAAhvKCZ8AAhvKAvcAAhvK7HsAAhvLAAFq0wACG8sAAWrXAAIbywABatsAAhvGYmsAAhvnAAFq4wACG+aTxwACG8ZiXwACG/CPAAIb8gwfAAIb8wABaucAAhvGYncAAhwAAwACG48AAWrrAAIcCmJnAAIcDJ8AAhwPAAJGqwACHBSjAAIcDKcAAhwOdtsAAhwPAAFq7wACHA53DwACHA8AAWrzAAIcDwABavcAAhwPAAFq+wACHA8AAWr/AAIcDwABawMAAhwPAAFrBwACHA8AAWsLAAIcDwABaw8AAhwPAAFrEwACHA8AAWsXAAIcDnbrAAIcDwABaxsAAhwOdEcAAhwPAAFrHwACHA8AAWsjAAIcDwABaycAAhwOaKsAAhwOaKcAAhwPAAFrKwACHApiXwACHHiPAAIcCmJ3AAIcgAMAAhuPAAFrLwACHIpiZwACHI4JnwACHI4C9wACHI522wACHI8AAWrvAAIcjncPAAIcjwABavMAAhyPAAFq9wACHI8AAWr7AAIcjwABav8AAhyPAAFrAwACHI8AAWsHAAIcjwABawsAAhyPAAFrDwACHI8AAWsTAAIcjwABaxcAAhyOdusAAhyPAAFrGwACHI50RwACHI8AAWsfAAIcjwABayMAAhyPAAFrJwACHI5oqwACHI5opwACHI8AAWsrAAIcimJrAAIc8wABauMAAhzy7HsAAhyKYl8AAhz8jwACHP4MHwACHP8AAWszAAIc/wABaucAAhyKYncAAh0TAAJGqwACHRYC1wACG48AAWs3AAIdHmJrAAIdIwABauMAAh0i7HsAAh0eYncAAh0sAwACG48AAWs7AAIdNmJrAAIdOwABauMAAh067HsAAh02YncAAh1EAwACG48AAWs/AAIdTmJrAAIdUwABauMAAh1S7HsAAh1OYncAAh1cAAMAAkavAAIdZmJnAAIdawABa0MAAh1rAAFrRwACHWsAAWtIAwACRrMAAh17AAFrTwACHX5iZwACHYLOZwACHYKT4wACHYLe8wACHYLNAwACHYLe0wACHYLe4wACHYLOMwACHYLa8wACHYLZBwACHYLv5wACHYMAAkazAAIdru0/AAIdrwABRQsAAh2u7pMAAh2u7pcAAh2u7psAAh2C8DcAAh2C7/sAAh2C0OsAAh2C3vcAAh2C3rcAAh2CraMAAh2ClDcAAh2C7mcAAh2C7nsAAh2C7n8AAh2C7mMAAh2C7rMAAh2C8DsAAh2CzVcAAh2C5ycAAh1+YmsAAh4C3tcAAh4C1AsAAh4C7qsAAh4C7rcAAh4C7r8AAh1+Yl8AAh4a12sAAh4a7sMAAh4a7scAAh4azRsAAh4a7qMAAh4a7qcAAh1+YncAAh40AAMAAkX3AAIePmJjAAIeQwABa1sAAh4+FrsAAh5KYmcAAh5MnwACHk8AAkX3AAIeVKMAAh5MpwACHk8AAWtjAAIeTwABa2cAAh5PAAFrawACHk8AAWtvAAIeSmJfAAIecI8AAh5KYncAAh54AwACHj73xwACHoJiZwACHoYPnwACHocAATcPAAIehwABa3cAAh6Gw4cAAh6HAAE7hwACHocAAkX3AAIenwABLJ8AAh6fAAFrewACHp8AAWt/AAIenwABa4MAAh6GZysAAh6HAAFe4wACHoJiXwACHrrXKwACHrsAAkX3AAIewwABa5sAAh7DAAFrnwACHsMAAWvLAAIeurxbAAIeuwABa4cAAh66DF8AAh67AAE7GwACHrsAATsfAAIeuwABOy8AAh67AAE7AwACHrrZqwACHroQswACHrrOYwACHriPAAIegmJrAAIe/u8zAAIe/u83AAIe/tpHAAIe/wABOq8AAh7/AAE7KwACHv8AAWu3AAIe/qgjAAIegmJvAAIfHu8zAAIfHu83AAIegmJzAAIfKrxXAAIegmJ3AAIfMAMAAh4+bvMAAh86YmcAAh8+D58AAh8+D7sAAh8/AAJF9wACH0sAAWvnAAIfSwABa+sAAh9LAAFr7wACHzpicwACH1q8VwACHzpiXwACH2K8WwACH2MAATsbAAIfYwABOxcAAh9jAAE7HwACH2JtKwACH2MAATszAAIfYwABOy8AAh9jAAE7AwACH2MAATs/AAIfYwABOzsAAh9jAAE7kwACH2KjUwACH2LZrwACH2MAAkX3AAIfmwABbAcAAh9gjwACHzpiawACH6ZnKwACH6cAATs3AAIfpwABO1MAAh+nAAFeNwACH6cAATvHAAIfOmJ3AAIfvAMAAh4/AAFsGwACH8ZiZwACH8obYwACH8qzDwACH8sAAWu7AAIfxmJrAAIf2XMAAh/GYncAAh/gAwACHj8AAWwjAAIf6mJnAAIf7g8zAAIf7wABVacAAh/ug4sAAh/qYmsAAh/+G2MAAh//AAFruwACH/6zDwACH/8AAWuTAAIf/XsAAh/qYl8AAiAVdwACIBcAAkX3AAIgHwABbCcAAiAfAAFsKwACH+pidwACICgDAAIePwABbC8AAiAyYmcAAiA3AAE7jwACIDazDwACIDcAAWu7AAIgMmJrAAIgRXMAAiAyYncAAiBPAAFsMwACHj8AAWwzAAIgVmJnAAIgWg8zAAIgWiEXAAIgWwABbDcAAiBWYmsAAiBrAAFruwACIGqzDwACIGl7AAIgVmJfAAIgeXcAAiBWYncAAiCAAwACHj8AAWw7AAIgimJnAAIgjJ8AAiCPAAJF9wACIJSjAAIgjKcAAiCOdJMAAiCPAAFsPwACII8AAWxDAAIgimJfAAIgrI8AAiCKYncAAiC0AwACHj8AAWxHAAIgvmJfAAIgwS8AAiDCAv8AAiDCZHcAAiDCEWcAAiDCCQsAAiC+YmsAAiDaDYsAAiC+YncAAiDgAwACHj8AAUJvAAIg6mJnAAIg7wACRfcAAiDzAAFCiwACIOpidwACIPgAAwACRrcAAiEDAAFsXwACIQZiXwACIQsAAV6DAAIhCwABXo8AAiELAAFeowACIQsAAV6HAAIhCwABXqcAAiELAAFemwACIQsAAV6zAAIhCwABXosAAiEGYncAAiEsAAMAAka7AAIhNwABbGcAAiE6YmcAAiE8nwACIT8AAka7AAIhRKMAAiE8pwACIT8AAWx7AAIhPwABbH8AAiE/AAFsgwACIT7xawACITpiXwACIWCPAAIhOmJ3AAIhaAMAAiE3AAFshwACIXJiZwACIXbydwACIXbygwACIXJidwACIYADAAIhNwABbIsAAiGKYmsAAiGOCZ8AAiGKYl8AAiGW8mcAAiGW8lcAAiGWETcAAiGKYncAAiGkAwACITcAAWyPAAIhrmJfAAIhsmo/AAIhswABbJMAAiGzAAFslwACIbMAAWybAAIhswABbJ8AAiGuYncAAiHIAwACITcAAWyjAAIh0mJnAAIh1gpDAAIh1wABbKcAAiHW8ncAAiHW8oMAAiHXAAFsqwACIdJiawACIe4JnwACIe4PBwACIdJiXwACIfryZwACIfryVwACIfoRNwACIfkjAAIh+I8AAiH6HRsAAiH7AAFsywACIdJidwACIhgDAAIhNwABbNsAAiIiYmcAAiInAAFspwACIicAAWzfAAIiImJrAAIiMgmfAAIiMg8HAAIiImJfAAIiPvJnAAIiPvJXAAIiPhE3AAIiPSMAAiI8jwACIiJidwACIlQDAAIhNwABbOcAAiJeYmcAAiJjAAFs6wACIl5iawACImoJnwACImoPBwACIl5iXwACInbyZwACInbyVwACInYRNwACInUjAAIidI8AAiJeYncAAiKMAwACITcAAWzzAAIilmJrAAIimgmfAAIilmJfAAIiohE3AAIiovJXAAIiovJnAAIilmJ3AAIisAADAAJGvwACIrqp7wACIr5iawACIsLNAwACIsIVtwACIsMAAWz/AAIiwvRTAAIiwvK7AAIivmJfAAIi2vQrAAIi2vLnAAIi2vLXAAIi2vJfAAIi2wABGbsAAiLa8sMAAiLahnsAAiLalUcAAiLa8msAAiLa8jsAAiLa8tMAAiK+YncAAiMIAwACIrsAAW0DAAIjEmJnAAIjFwACRr8AAiMbAAFtBwACIxsAAW0LAAIjFwABbP8AAiMXAAFb7wACIxJiawACIy7yuwACIy6TNwACIy8AAka/AAIjOwABbQ8AAiMSYl8AAiNC8tMAAiNC8msAAiNC8jsAAiNClUcAAiNChnsAAiNC8sMAAiMSYncAAiNcAwACIrsAAW0TAAIjZmJnAAIjawABbKcAAiNq0rsAAiNpbwACI2ZiXwACI3r0AwACI3rz8wACI3iPAAIjZmJ3AAIjiAADAAJERwACI5L1KwACI5ZiawACI5prXwACI5oVwwACI5oYQwACI5prWwACI5ZiXwACI65rnwACI65sKwACI674IwACI66tjwACI68AAkRHAAIjwvgnAAIjwvgzAAIjwvgvAAIjwvgrAAIjlmJ3AAIj1AADAAJGwwACI971MwACI+JiZwACI+YdrwACI+YRSwACI+b4nwACI+YJnwACI+cAAkbDAAIj+wABbTcAAiPiYmsAAiQCAvcAAiQCE/8AAiPiYl8AAiQOhgMAAiQPAAJGwwACJBcAAW07AAIkFwABbWMAAiQXAAFtRwACJBcAAW2bAAIkFwABbT8AAiQPAAFtQwACJA8AAW1PAAIkDwABbY8AAiQPAAFtkwACI+JidwACJDwAAwACRscAAiRG9TcAAiRKYmcAAiROHa8AAiRKYl8AAiRW+HsAAiRXAAFtpwACJFcAAW3bAAIkVwABbeMAAiRKYncAAiRoAwACJEcAAW3nAAIkcmJfAAIkdwABbbMAAiR3AAFttwACJHcAAW2/AAIkdwABbcsAAiR3AAFtwwACJHcAAW27AAIkdwABbccAAiR3AAFtzwACJHJidwACJJgDAAIkRwABbfMAAiSiYl8AAiSnAAFtvwACJKcAAW3HAAIkpwABbbsAAiSnAAFtywACJKcAAW2zAAIkpwABbcMAAiSnAAFtzwACJKcAAW23AAIkomJ3AAIkyAMAAiRHAAFt+wACJNJiXwACJNcAAW3DAAIk1wABbb8AAiTXAAFtswACJNcAAW27AAIk1wABbcsAAiTXAAFtxwACJNcAAW3PAAIk1wABbbcAAiTSYncAAiT4AwACJEcAAW4vAAIlAmJfAAIlBwABbccAAiUHAAFtywACJQcAAW2/AAIlBwABbbMAAiUHAAFtwwACJQcAAW27AAIlBwABbc8AAiUHAAFttwACJQJidwACJSgDAAIkRwABbjMAAiUyYl8AAiU3AAFtvwACJTcAAW2zAAIlNwABbcMAAiU3AAFtuwACJTcAAW3LAAIlNwABbccAAiU3AAFtzwACJTcAAW23AAIlMmJ3AAIlWAMAAiRHAAFuNwACJWJiXwACJWcAAW2/AAIlZwABbbsAAiVnAAFtswACJWcAAW23AAIlZwABbccAAiVnAAFtwwACJWcAAW3LAAIlZwABbc8AAiViYncAAiWIAwACJEcAAW5HAAIlkmJfAAIllwABbcsAAiWXAAFtxwACJZcAAW2/AAIllwABbbMAAiWXAAFtwwACJZcAAW27AAIllwABbc8AAiWXAAFttwACJZJidwACJbgAAwACRssAAiXC+usAAiXGYmcAAiXKu1MAAiXGYl8AAiXSiJsAAiXGYncAAiXYAAMAAkbPAAIl4mJfAAIl5vskAwACRtMAAiXvAAFuXwACJfJiZwACJfYJOwACJfJiXwACJf8AAQQ/AAIl/wABBH8AAiX/AAEEYwACJf8AAQRbAAIl/wABBGsAAiX/AAEFNwACJf8AAQUvAAIl8mJ3AAImHAMAAiXvAAFugwACJiZiZwACJiifAAImKwACRtMAAiYwowACJiinAAImKwABbocAAiYqh08AAiYqEdsAAiYrAAFuiwACJir8iwACJir7SwACJisAAW6PAAImJmJfAAImWI8AAiYmYncAAiZgAAMAAkbXAAImawABA5cAAiZuYmcAAiZypksAAiZzAAEJCwACJm5ibwACJn8AAQI/AAImbmJrAAImhgKzAAImbmJfAAImjwABAkMAAiaOjTsAAiaPAAECRwACJo6GFwACJo60VwACJo60PwACJo6F8wACJo6GBwACJo6KywACJo78+wACJo786wACJo796wACJo8AAQJ7AAImjwABAn8AAiaOihcAAiaPAAEC2wACJo8AAQLXAAImjoubAAImjoufAAImjwABApMAAiaOtFsAAiaOtGMAAiaOtJMAAiaPAAECnwACJo8AAQKjAAImjv0TAAImjv6LAAImjofnAAImjrRPAAImjrSHAAImjoybAAImjoo/AAImjoqTAAImjoqzAAImjrRHAAImjrR7AAImjoxbAAImjwABArcAAiaOibsAAiaO/m8AAiaOiocAAiaPAAECuwACJo6L2wACJo8AAQLDAAImjoujAAImjwABAs8AAiaPAAEC3wACJo6EqwACJo6EnwACJo6M/wACJo8AAQL7AAImjocXAAImjwABAzMAAiaOjE8AAiaPAAEDCwACJo6D1wACJo8AAQMPAAImjv5HAAImjv0HAAImjoxTAAImjv33AAImjouTAAImjwABAxMAAiaPAAEDFwACJo8AAQMbAAImjwABAx8AAiaPAAEDNwACJo8AAQMjAAImjwABAysAAiaOjW8AAiaOjXcAAiaPAAEDLwACJo6L3wACJo6HlwACJo8AAQNDAAImjv4vAAImjwABA0cAAiaPAAEDWwACJo8AAQK/AAImjo4vAAImjwABA18AAiaPAAEC4wACJo6IBwACJo60XwACJo60bwACJo8AAQNrAAImjwABA3MAAiaOhZ8AAiaOjUMAAiaOiNcAAiaOiN8AAiaOhiMAAiaOiB8AAiaOhGMAAiaOhfsAAiaOhg8AAiaOis8AAiaO/QMAAiaO/O8AAiaO/EsAAiaPAAEChwACJo6KJwACJo78AwACJo78DwACJo6L1wACJo6LpwACJo6LWwACJo6MhwACJo60awACJo60lwACJo79IwACJo78fwACJo79HwACJo78jwACJo6H6wACJo6EOwACJo6IhwACJo6M7wACJo60jwACJo6MuwACJo6MnwACJo6KRwACJo6KlwACJo6KtwACJo6IswACJo60gwACJo6MgwACJo6MNwACJo6J1wACJo77pwACJo6KiwACJo78PwACJo6L5wACJo6L8wACJo6HpwACJo6LwwACJo78awACJo6H+wACJo6ErwACJo6EowACJo6NDwACJo777wACJo6HIwACJo6JewACJo6MewACJo6EXwACJo6D4wACJo6EEwACJo78vwACJo79DwACJo6MdwACJo79LwACJo6LrwACJo6KdwACJo78hwACJo77PwACJo78owACJo6NEwACJo6HhwACJo78MwACJo6NvwACJo6NpwACJo6NtwACJo6HnwACJo8AAQM7AAImjoQfAAImjvvLAAImjosDAAImjowTAAImjvt7AAImjo43AAImjo5DAAImjofDAAImjogTAAImjo0rAAImjrR3AAImjo1jAAImjonrAAImjognAAImjojjAAImjo3nAAImjo3fAAImjorXAAImjv4TAAImjv6XAAImjvuXAAImjv37AAImjvuPAAImjwABA4cAAiaPAAEDdwACJo6KIwACJo6OCwACJo8AAQKDAAImjvv3AAImjovjAAImjodzAAImjo0zAAImjwABA28AAiaOh38AAiaOhZsAAiaPAAECpwACJo6NIwACJo6IVwACJo6IYwACJo6IawACJo6MpwACJo6IcwACJo6KqwACJo7+PwACJo6GnwACJo78KwACJo78UwACJo6LJwACJo8AAQMDAAImjwABAusAAiaOjpMAAiaO/OMAAiaO/CMAAiaOjmMAAiaOiCMAAiaO+08AAiaOjBsAAiaPAAEC8wACJo6J+wACJo6M9wACJo6JQwACJo6JTwACJo6HXwACJo6I7wACJo6JawACJo6JWwACJo6JIwACJo7+nwACJo7+GwACJo6MLwACJo77gwACJo6HNwACJo78pwACJo78rwACJo78twACJo77VwACJo8AAQOPAAImjvtnAAImjofvAAImjvufAAImjvvnAAImjoSXAAImjv3TAAImjomTAAImjvtvAAImjvtfAAImjo5TAAImjofXAAImjo6HAAImjvwXAAImjoWnAAImjoWzAAImjocHAAImjoibAAImjv4LAAImjvx7AAImjv4PAAImjodLAAImjoW/AAImjov/AAImjodTAAImjocbAAImjownAAImjo6LAAImjowjAAImjoozAAImjomfAAImjo4zAAImjotTAAImjotHAAImjos3AAImjrP3AAImjoqjAAImjonjAAImjwABAjsAAiaOiacAAiaOhDcAAiaOiZsAAiZuYncAAir8AAMAAkbbAAIrBmJnAAIrCwABA6sAAisGYl8AAisTAAEDowACKxMAAQOnAAIrBwABA58AAiseYmcAAisjAAEIbwACKyMAAQhzAAIrHmJfAAIrLgwfAAIrLwABCHcAAiseYncAAis4AAMAAkbfAAIrQwABA68AAitGYmcAAitInwACK0sAAkbfAAIrUKMAAitIpwACK0sAAW6fAAIrSwABbqMAAitLAAFupwACK0ZiXwACK2iPAAIrRmJ3AAIrcAADAAJG4wACK3piXwACK351nwACK3sAAQOzAAIrhmJnAAIrioVXAAIrivz/AAIriv6PAAIrioQnAAIriv4zAAIriwABbqsAAiuKhCsAAiuKikMAAiuKhCMAAiuLAAFurwACK4sAAW6zAAIrhmJvAAIruwABBxsAAiu6hC8AAiuGYmsAAivGhC8AAiuGYl8AAivPAAEG8wACK88AAQW7AAIrzwABBx8AAivPAAEGdwACK88AAQjDAAIrzwABMwsAAivPAAFuxwACK88AAW7LAAIrzwABbs8AAivPAAFu0wACK88AAW7XAAIrzwABbtsAAivPAAFu3wACK88AAW7jAAIrzwABbucAAivPAAFu8wACK88AAW7DAAIrzwABbu8AAiuGYncAAiwYAAMAAkbnAAIsIwABA7cAAiwmYmcAAiwq/hcAAiwq/TcAAiwq+4cAAiwmYl8AAiw6CQsAAiw6/hMAAiw6/fsAAiw6+48AAiwmYncAAixMAwACLCMAAQO7AAIsVmJnAAIsWvxbAAIsWvxXAAIsWrnXAAIsWwABBPsAAixWYl8AAixuCQsAAixu/AMAAixu/D8AAixu/DMAAixu/FMAAixWYncAAiyEAwACLCMAAQO/AAIsjmJnAAIskorbAAIskv03AAIsjmJfAAIsngkLAAIsnv37AAIsnv4bAAIsjmJ3AAIsrAADAAJG6wACLLcAAW8HAAIsumJfAAIsvwABBIsAAiy/AAEFfwACLL8AAQaLAAIsvwABBl8AAiy6YncAAizQAwACLLcAAQPDAAIs2mJfAAIs3wABBQcAAizfAAEGXwACLN8AAQUTAAIs3wABBtsAAizfAAJG6wACLPMAAW8fAAIs2mJ3AAIs+AMAAiy3AAFvIwACLQJiXwACLQcAAQSLAAItBwABBX8AAi0HAAEGiwACLQcAAQZfAAItAmJ3AAItGAMAAiy3AAFvJwACLSJiXwACLScAAQUHAAItJwABBl8AAi0nAAEFEwACLScAAQbbAAItJwACRusAAi07AAFvHwACLSJidwACLUADAAIstwABbzMAAi1KYl8AAi1PAAEEiwACLU8AAQV/AAItTwABBosAAi1PAAEGXAMAAkbvAAItYmJnAAItZwABA98AAi1nAAED4wACLWcAART/AAItYmJfAAItdwABb0cAAi13AAED2wACLXcAAQPTAAItdwABA9cAAi13AAEDzwACLWMAAQPHAAItjmJrAAItkwABCLcAAi2TAAEIywACLZLXdwACLY5iXwACLaMAAQYDAAItowABBSsAAi2jAAFvOwACLaMAAQVvAAItowABBWMAAi2OYncAAi24AwACLWMAAQPLAAItwmJrAAItxwABbz8AAi3GVaMAAi3HAAEFXwACLcJiXwACLdcAAQVXAAIt1wABBWsAAi3WWL8AAi3CYncAAi3kAAMAAkbzAAIt7mJfAAIt8wABb9sAAi3zAAFv3wACLfMAAW/jAAIt7wABb2sAAi4CYl8AAi4HAAEE0wACLgJidwACLgwDAAIt7wABb28AAi4WYl8AAi4bAAEE0wACLhZidwACLiADAAIt7wABb3MAAi4qYl8AAi4vAAEE0wACLipidwACLjQDAAIt7wABb3cAAi4+Yl8AAi5DAAEE0wACLj5idwACLkgDAAIuSuR3AAIuSwABb3sAAi3vAAFvfwACLlpiXwACLl8AAQTTAAIuWmJ3AAIuZAMAAi5m5HcAAi3vAAFvgwACLnJiXwACLncAAQTTAAIucmJ3AAIufAMAAi3vAAFvhwACLoZiXwACLosAAQTTAAIuhmJ3AAIukAMAAi3vAAFviwACLppiXwACLp8AAQTTAAIummJ3AAIupAMAAi6m5HcAAi3vAAFvjwACLrJiXwACLrcAAQTTAAIusmJ3AAIuvAMAAi3vAAFvkwACLsZiXwACLssAAQTTAAIuxmJ3AAIu0AMAAi3vAAFvlwACLtpiXwACLt8AAQTTAAIu2mJ3AAIu5AMAAi3vAAFvmwACLu5iXwACLvMAAQTTAAIu7mJ3AAIu+AMAAi3vAAFvnwACLwJiXwACLwcAAQTTAAIvAmJ3AAIvDAMAAi8O5HcAAi3vAAFvowACLxpiXwACLx8AAQTTAAIvGmJ3AAIvJAMAAi8m5HcAAi3vAAFvpwACLzJiXwACLzcAAQTTAAIvMmJ3AAIvPAMAAi3vAAFvqwACL0ZiXwACL0sAAQTTAAIvRmJ3AAIvUAMAAi3vAAFvrwACL1piXwACL18AAQTTAAIvWmJ3AAIvZAMAAi9m5HcAAi9nAAEFPwACL2cAAQVDAAIt7wABb7MAAi96Yl8AAi9/AAEE0wACL3pidwACL4QDAAIt7wABb7cAAi+OYl8AAi+TAAEE0wACL45idwACL5gDAAIvmuR3AAIvmwABb3sAAi3vAAFvuwACL6piXwACL68AAQTTAAIvqmJ3AAIvtAMAAi+25HcAAi+3AAEJ7wACLe8AAW+/AAIvxmJfAAIvywABBNMAAi/GYncAAi/QAwACLe8AAW/DAAIv2mJnAAIv3wABb8cAAi/aYl8AAi/nAAEE0wACL9pidwACL+wDAAIt7wABb8sAAi/2Yl8AAi/7AAEE0wACL/ZidwACMAADAAIt7wABb88AAjAKYl8AAjAPAAEE0wACMApidwACMBQDAAIwFuR3AAIwFwABb9MAAi3vAAFv1wACMCZiXwACMCsAAQTTAAIwJmJ3AAIwMAADAAJG9wACMDpiYwACMD8AAXATAAIwOwABcCcAAjBGYmcAAjBLAAJG9wACME7HywACME6SwwACME69UwACME7QEwACME7PIwACME8AAXArAAIwTt5vAAIwTwABS38AAjBPAAEfdwACME8AAUULAAIwTwABTOcAAjBPAAFwLwACME8AAU3TAAIwTwABcDMAAjBO7TMAAjBO3msAAjBPAAFwNwACME7ecwACME7fYwACME7WqwACME7f/wACME8AAU4vAAIwTt9rAAIwTwABXgcAAjBPAAEjewACME8AAVtTAAIwTwABcDsAAjBPAAFwPwACME5u9wACME8AAXBDAAIwTwABcEcAAjBPAAFwSwACME8AAXBPAAIwSvmzAAIwRmJfAAIw2wABcFMAAjDbAAJG9wACMOMAAXDLAAIw4wABcFsAAjDjAAFw3wACMOMAAXDjAAIw4wABcLcAAjDjAAFxIwACMOMAAXDDAAIw4wABcTMAAjDjAAFxKwACMOMAAXE/AAIw4wABcS8AAjDjAAFxUwACMOMAAXEnAAIw4wABcKsAAjDjAAFxVwACMOMAAXGvAAIw4wABcIMAAjDjAAFyJwACMOMAAXIrAAIw4wABci8AAjDjAAFxzwACMOMAAXJTAAIw4wABclsAAjDjAAFx7wACMOMAAXFjAAIw4wABcO8AAjDjAAFxmwACMOMAAXGrAAIw4wABcZ8AAjDjAAFxlwACMOMAAXB3AAIw4wABcH8AAjBGYncAAjFkAwACMDsAAXKzAAIxbmJnAAIxcwACRvcAAjF2x8sAAjF20BMAAjF2vVMAAjF2zyMAAjF3AAFwKwACMXbecwACMXcAAQ9HAAIxdwABH3cAAjF3AAFM5wACMXbtMwACMXbWqwACMXcAAXA7AAIxdwABcDcAAjF3AAFeBwACMXLREwACMXMAAXG3AAIxcwABcGMAAjFzAAFwcwACMXMAAXBrAAIxcwABcHsAAjFzAAFytwACMXMAAXDnAAIxcwABZY8AAjFuYl8AAjHXAAFwowACMdcAAXK/AAIx1wABcs8AAjHXAAFy0wACMdcAAXLbAAIx1wABcu8AAjHXAAFy9wACMdcAAXMTAAIx1wABRp8AAjFuYncAAjH8AwACMDsAAXMXAAIyBmJnAAIyCwACRvcAAjIOx8sAAjIOvVMAAjIO0BMAAjIPAAFwKwACMg8AAR93AAIyDt5zAAIyDtarAAIyBmJfAAIyLwABcpsAAjIvAAFzJwACMi8AAXMrAAIyLwABczMAAjIvAAFzLwACMgZidwACMkQDAAIwOwABczcAAjJOYmcAAjJSEg8AAjJSEjsAAjJOYncAAjJcAwACMDsAAXM7AAIyZmJnAAIyawACRvcAAjJucjsAAjJvAAFzPwACMm8AAXNDAAIyagL3AAIyas4rAAIyZmJfAAIyhwACRvcAAjKLAAFzRwACMoYSRwACMoYSQwACMoYP4wACMmZiawACMp2HAAIyZmJ3AAIypgefAAIypmgLAAIwOwABc0sAAjKyYmcAAjK3AAJG9wACMrrMxwACMrsAAV4HAAIyuwABc08AAjK7AAFzUwACMrsAAXNXAAIyuwABc1sAAjK3AAFwrwACMrJiawACMtsAAXDPAAIy2wABcL8AAjLbAAFwxwACMrJiXwACMusAAkb3AAIy7wABc18AAjLrAAFwXwACMusAAXBnAAIy6wABcG8AAjLrAAFypwACMusAAXFDAAIysmJ3AAIzCAADAAJG+wACMxMAAXNvAAIzFmJnAAIzGwACRvsAAjMe3nMAAjMWYl8AAjMnAAFzcwACMycAAXN7AAIzJwABc38AAjMnAAEPkwACMycAAQ+LAAIzJwABD4MAAjMnAAEPhwACMycAAQ97AAIzJwABD5cAAjMnAAEPmwACMycAAQ+fAAIzJwABD48AAjMnAAEPpwACMxZidwACM1wDAAIzEwABFjMAAjNmYmcAAjNrAAJG+wACM28AASN7AAIzbwABc4sAAjNmYl8AAjN6vp8AAjN6vqcAAjNmYncAAjOEAwACMxMAAXOTAAIzjmJnAAIzkwACRvsAAjOWksMAAjOW1qsAAjOXAAFN0wACM5cAAXAzAAIzlt9jAAIzlwABD0cAAjOTAAEPqwACM45iawACM7cAAkb7AAIzut5zAAIzjmJfAAIzwwABD3cAAjPDAAEPswACM8MAAQ+/AAIzwwABD7sAAjPCvp8AAjPCvqcAAjPDAAEPtwACM8MAAQ+vAAIzwtFHAAIzjmJ3AAIz6AADAAJG/wACM/MAAXO3AAIz9mJrAAIz+g8/AAIz+gJbAAIz+wACRv8AAjQHAAElvwACM/ZiXwACNA8AARoPAAIz9mJ3AAI0FAMAAjPzAAFzuwACNB5iZwACNCMAAkb/AAI0JlwzAAI0JwABJb8AAjQiDz8AAjQeYmsAAjQ3AAEfYwACNDYCWwACNDcAASCjAAI0HmJfAAI0RoYDAAI0RwABGg8AAjRGCS8AAjREjwACNB5idwACNFgDAAIz8wABc8sAAjRiYmcAAjRnAAJG/wACNGpcMwACNGJiXwACNHMAAXPPAAI0YmJrAAI0egJbAAI0er9PAAI0YmJ3AAI0hAMAAjPyea8AAjSOYmcAAjSTAAJG/wACNJbHywACNJcAAQ9HAAI0lwABTdMAAjSXAAFwMwACNJa9UwACNJcAAXPTAAI0lwABc9cAAjSXAAFz2wACNJcAAXPfAAI0kpM3AAI0jmJfAAI0wwABc+MAAjTDAAFz5wACNMMAAXPrAAI0wwABcmsAAjTDAAFz9wACNMMAAXP7AAI0wwACRv8AAjTfAAFz7wACNN8AAXQHAAI03wABdBcAAjTDAAFz8wACNMMAARoDAAI0jmJ3AAI09AADAAJHAwACNP8AAXQzAAI1AmJnAAI1BwABIYcAAjUHAAFwzwACNQcAAXDnAAI1BwABcNMAAjUHAAFw6wACNQcAAXETAAI1BwABdDcAAjUHAAJHAwACNScAAXQ7AAI1BwABcNcAAjUCYl8AAjUzAAF0PwACNTMAAXRDAAI1AmJrAAI1PwABdEcAAjU/AAFwuwACNT8AAXCzAAI1AmJ3AAI1TAMAAjT/AAF0SwACNVZiZwACNVoC9wACNVifAAI1WwABcq8AAjVbAAFxRwACNVZiXwACNWyPAAI1VmJ3AAI1dAMAAjT/AAF0UwACNX5iZwACNYLOKwACNYIbZwACNYJk0wACNYMAAXE7AAI1gwABdFcAAjWDAAF0WwACNX5iawACNZ8AAXRfAAI1fmJ3AAI1pAMAAjT/AAF0YwACNa5iZwACNbMAAXRnAAI1rmJrAAI1uwABdF8AAjWuYl8AAjXAjwACNa5idwACNcgDAAI0/wABdG8AAjXSYmcAAjXWAvcAAjXSYmsAAjXfAAF0XwACNdJiXwACNeSPAAI10mJ3AAI17AMAAjT+GncAAjX2YmcAAjX6AvcAAjX7AAFGlwACNfoCWwACNfZiXwACNgiPAAI19mJ3AAI2EAMAAjT/AAF0ewACNhpiawACNh8AAXGnAAI2GmJ3AAI2JAMAAjT+EdsAAjYuYmcAAjYyWJsAAjYyArMAAjYzAAFxkwACNjISDwACNjMAAXGnAAI2LmJfAAI2SI8AAjYuYncAAjZQAwACNP8AAQo3AAI2WmJnAAI2XlibAAI2XgL3AAI2XwABH2cAAjZfAAFGlwACNl4KTwACNl4QbwACNl8AATUnAAI2XwABcUsAAjZaYl8AAjaAjwACNlpidwACNogDAAI0/hNDAAI2kmJnAAI2llibAAI2lgL3AAI2lwABRpcAAjaXAAJHAwACNqcAAXSLAAI2pwABdI8AAjaXAAEhswACNpYSFwACNpbuZwACNpcAAXSTAAI2lwABcgcAAjaXAAFxXwACNpcAAXHfAAI2lwABcacAAjaXAAFxuwACNpcAAXGzAAI2lu8zAAI2lhk7AAI2lwABcb8AAjaXAAFyIwACNpbMWwACNpcAAXIfAAI2lwABNRMAAjaXAAF0lwACNpcAAXSbAAI2lwABdJ8AAjaSYmsAAjcDAAFwjwACNwITswACNwK2gwACNwMAAXSjAAI3AwABdKcAAjaSYl8AAjcbAAFwhwACNxsAAXCXAAI3GI8AAjaSYncAAjcoAwACNP8AAXSvAAI3MmJrAAI3NwABcI8AAjcyYl8AAjc8jwACNzJidwACN0QDAAI0/hQbAAI3TmJnAAI3UlibAAI3UgL3AAI3UwABcBcAAjdTAAFyjwACN1MAAXKTAAI3UwABcCMAAjdTAAFylwACN1MAATRvAAI3UwABIa8AAjdOYmsAAjd7AAFwGwACN3sAAXIPAAI3ewABdLcAAjd7AAF0uwACN3sAAXS/AAI3ewABdMMAAjd7AAF0xwACN3sAAXTLAAI3TmJfAAI3nI8AAjdOYncAAjekAwACNP4U/wACN65iZwACN7JYmwACN7IC9wACN7IKTwACN65idwACN8ADAAI0/wABdNMAAjfKYmcAAjfPAAFyXwACN88AAXI7AAI3zwABdNcAAjfPAAFyRwACN88AAXJXAAI3zhTvAAI3zhR/AAI3zwABcjMAAjfOgbcAAjfKYmsAAjf2EGcAAjfKYncAAjf8AwACNP8AAXTbAAI4BmJnAAI4CwABcksAAjgLAAFyPwACOArnYwACOAZiawACOBoQZwACOAZiXwACOCCPAAI4BmJ3AAI4KAMAAjT/AAF05wACODJiXwACODSPAAI4MmJ3AAI4PAMAAjT/AAF07wACOEZiZwACOEqBtwACOEZiXwACOFCPAAI4RmJ3AAI4WAMAAjT/AAEKLwACOGJiawACOGcAAUaXAAI4YmJ3AAI4bAMAAjT/AAF0/wACOHZiZwACOHsAAUaXAAI4dmJrAAI4ghBnAAI4dmJfAAI4iI8AAjh2YncAAjiQAwACNP8AAXUHAAI4mmJnAAI4nwABRpcAAjiaYl8AAjikjwACOJpidwACOKwAAwACRwcAAji3AAEPNwACOLpiZwACOL8AAkcHAAI4wt57AAI4wtarAAI4wt5vAAI4vwABdRMAAji+bSsAAji/AAFNjwACOL6iMwACOLpiawACOOMAAkcHAAI45tATAAI45r1TAAI45wABH3cAAjjnAAFM5wACOLpiXwACOPsAAXCnAAI4+wABdSsAAjj7AAF1LwACOPsAAXVTAAI4+wABdWMAAjj7AAF1cwACOPsAAXV3AAI4umJ3AAI5GAADAAJHCwACOSMAAQ87AAI5JmJnAAI5KwACRwsAAjkuvVMAAjkvAAFwOwACOS7HywACOS8AAXAvAAI5JmJrAAI5QwABD28AAjlDAAEPcwACOSZiXwACOU8AAQ9jAAI5TwABD18AAjkmYncAAjlYAAMAAkcPAAI5YwABdYsAAjlmYmcAAjlrAAJHDwACOW5ccwACOWZidwACOXQDAAI5YwABdY8AAjl+YmsAAjmCnK8AAjmCDwcAAjl+YncAAjmMAwACOWMAAWtXAAI5lmJrAAI5mwABERsAAjmaDwcAAjmWYncAAjmkAwACOWMAAXWTAAI5rmJrAAI5st8/AAI5sg8HAAI5rmJ3AAI5vAMAAjljAAF1lwACOcZidwACOcgDAAI5YwABdZsAAjnSYncAAjnUAwACOWMAAXWfAAI53mJ3AAI54AMAAjljAAF1owACOepiawACOe8AAREvAAI56mJ3AAI59AMAAjljAAF1pwACOf5iawACOgMAAREjAAI5/mJ3AAI6CAMAAjljAAF1qwACOhJiawACOhcAARKXAAI6EmJ3AAI6HAMAAjljAAF1rwACOiZiZwACOisAAkcPAAI6Lu+PAAI6Lp7jAAI6LlxrAAI6JmJfAAI6Pt9DAAI6PgojAAI6JmJrAAI6SmIbAAI6SYcAAjomYncAAjpUAwACOWMAAXWzAAI6XmJfAAI6YwABMN8AAjpjAAEwlwACOmIP4wACOl5idwACOnADAAI5YwABdcMAAjp6YmcAAjp/AAJHDwACOoLbcwACOnpiXwACOosAATDvAAI6emJ3AAI6kAMAAjljAAF1ywACOppiXwACOp8AAVsDAAI6nwABMN8AAjqfAAEwlwACOp4P4wACOppidwACOrADAAI5YwABdeMAAjq6YmcAAjq/AAJHDwACOsLHxwACOrpiXwACOssAAVrfAAI6umJ3AAI60AMAAjljAAF16wACOtpiXwACOt8AATDfAAI63wABMJcAAjreD+MAAjraYncAAjrsAAMAAkcTAAI69mJjAAI6+wABdfsAAjr3AAF1/wACOwJiZwACOwcAAkcTAAI7CwABdgMAAjsHAAF2BwACOwJiawACOxan5wACOwJiXwACOx57pwACOwJidwACOyQDAAI69qoHAAI7LmJnAAI7MwACRxMAAjs2Ii8AAjszAAF2BwACOy5iXwACO0KoiwACO0IHDwACOy5idwACO0wDAAI69wABdhMAAjtWYl8AAjtaX18AAjtaG1sAAjtaGycAAjtaGw8AAjtaGwMAAjtaGvcAAjtaGuMAAjtWYncAAjt4AwACOvcAAXYXAAI7gmJnAAI7hgmvAAI7hhgXAAI7gmJfAAI7khE7AAI7khE3AAI7khFTAAI7kSMAAjuQjwACO4JiawACO6oPBwACO4JidwACO7AAAwACRxcAAju7AAF2KwACO75iXwACO8CPAAI7vmJ3AAI7yAMAAju7AAF2MwACO9JicwACO9ZYuwACO9JiXwACO9yPAAI70mJ3AAI75AMAAju7AAF2NwACO+5icwACO/JYuwACO+5iXwACO/iPAAI77mJ3AAI8AAMAAju7AAF2OwACPApiZwACPA8AAkcXAAI8EwABWqsAAjwKYl8AAjwaBwsAAjwaX1cAAjwbAAEaCwACPBsAAThnAAI8Gl9/AAI8Ghd7AAI8GhgDAAI8GhejAAI8GhhHAAI8GheHAAI8GhcHAAI8GherAAI8GhePAAI8GhebAAI8Ghe3AAI8GhffAAI8GhfnAAI8GhfvAAI8GhX3AAI8GhYrAAI8GhY7AAI8GhfHAAI8GhZrAAI8GhZzAAI8GhZjAAI8GhfXAAI8GhfPAAI8GhbjAAI8GhbPAAI8Ghb3AAI8GhdrAAI8Ghe/AAI8GhgPAAI8GhgnAAI8GhgvAAI8GhXjAAI8Ghg7AAI8GhgbAAI8CmJrAAI8thszAAI8thMLAAI8CmJ3AAI8wAADAAJHGwACPMpiXwACPM8AAkcbAAI80wABej8AAjzLAAF2RwACPNpiZwACPN8AAXZLAAI83wABdk8AAjzfAAF2UwACPN8AAXZXAAI83wABdlsAAjzfAAF2XwACPN8AAXZjAAI83wABTb8AAjzfAAF2ZwACPN8AAXZrAAI83wABdm8AAjzfAAF2cwACPN8AAXZ3AAI83wABFqsAAjzfAAF2ewACPN8AAXZ/AAI83wABFrMAAjzfAAF2gwACPN8AAXaHAAI83wABdosAAjzfAAF2jwACPN8AAXaTAAI83wABdpcAAjzfAAF2mwACPN8AAXafAAI83wABdqMAAjzekzcAAjzfAAJHGwACPU8AAW0PAAI9TwABdqcAAjzfAAF2qwACPN8AAXavAAI83wABdrMAAjzfAAF2twACPN8AAXa7AAI83wABdr8AAjzfAAF2wwACPN8AAXbHAAI83wABdssAAjzfAAF2zwACPNpiawACPYIF2wACPYLoywACPYFXAAI9gg7DAAI9gwABG28AAj2DAAF20wACPYJmAwACPYKVOwACPYIYwwACPYMAAXbXAAI9gwABdtsAAj2DAAF25wACPNpiXwACPbcAAXbfAAI9tuSzAAI9twABdusAAj23AAF27wACPbcAASYHAAI9twABdvcAAj23AAF2+wACPbcAAXb/AAI9twABdwMAAj23AAF3BwACPbaOHwACPbYYZwACPbcAAXcPAAI9twABdxMAAj22cyMAAj23AAEhuwACPbcAAXcnAAI9twABdysAAj23AAF3LwACPbcAAkcbAAI+BwABdzMAAj4HAAF4YwACPbcAAXc7AAI9twABd0cAAj23AAF3TwACPbcAAXdTAAI9twABd1sAAj23AAF3XwACPbcAAXdjAAI9toTDAAI9twABd3MAAj23AAF24wACPbbCPwACPbbCRwACPbbCBwACPbbCCwACPbbCcwACPbcAAXefAAI9tsHzAAI9twABd6sAAj22wl8AAj22GGMAAj22wrMAAj22wmMAAj22wpsAAj22GRsAAj22we8AAj22wmsAAj22wrsAAj22jgMAAj23AAF3vwACPbbClwACPbbCvwACPbYYdwACPbYYUwACPbbCywACPbbCxwACPbYZZwACPbcAAXgfAAI9twABd+cAAj23AAF4KwACPbbCzwACPbbB5wACPbbBwwACPbbB3wACPbbB1wACPbbB0wACPbbBywACPbYYjwACPbbCJwACPbbChwACPbbCGwACPbbCHwACPbbCkwACPbbCIwACPbYXBwACPbYZewACPbbCDwACPbbCQwACPbbCOwACPbbCMwACPbbCKwACPbbCZwACPbbB/wACPbbCSwACPbbCVwACPbbCWwACPbbC0wACPbbB+wACPbbB9wACPbbCrwACPbbCnwACPbbCTwACPbYX1wACPbcAAXhfAAI9tsKjAAI9thlfAAI9tsJ/AAI9tsJvAAI9tsJTAAI9tsLDAAI9twABeKcAAj22wosAAjzaYncAAj9UAwACPMsAAXivAAI/XmJnAAI/YwABeLMAAj9jAAEWlwACP2MAARabAAI/YwABFp8AAj9jAAEWowACP2MAARaPAAI/YwABFqcAAj9ixO8AAj9eYmsAAj+GGMMAAj+HAAF4twACP15iXwACP5MAAXinAAI/kwABd18AAj+TAAF3WwACP5MAAXdzAAI/kwABdt8AAj+TAAF3nwACP5KEwwACP15idwACP7ADAAI8ywABeRsAAj+6YmcAAj+/AAEWuwACP78AARa/AAI/vsUHAAI/vwABFsMAAj+/AAEWxwACP7piawACP9cAAXbXAAI/umJfAAI/3wABeKcAAj/ehMMAAj/fAAF3XwACP98AAXdbAAI/3wABd3MAAj/fAAF3nwACP98AAXbfAAI/umJ3AAI//AMAAjzLAAF5hwACQAZiZwACQAsAAXmLAAJACwABeY8AAkAKxP8AAkALAAEWywACQAsAARbPAAJACsUDAAJACwABFtMAAkALAAEWwwACQArE7wACQAZiawACQDMAAXbbAAJAMwABeZMAAkAzAAF5lwACQAZiXwACQEMAAXinAAJAQoTDAAJAQwABd18AAkBDAAF3WwACQEMAAXdzAAJAQwABdt8AAkBDAAF3nwACQAZidwACQGADAAI8ywABeh8AAkBqYmcAAkBvAAF3FwACQG4ePwACQG8AAXojAAJAbwABeicAAkBuEMMAAkBvAAF3ewACQG6kXwACQG8AAXeLAAJAbwABd4cAAkBvAAF6KwACQG5zIwACQGpiXwACQJ5qPwACQJ8AASirAAJAnsJHAAJAnsIHAAJAnsILAAJAnsJzAAJAnsHzAAJAnsJfAAJAnhhjAAJAnsKzAAJAnsJjAAJAnsKbAAJAnhkbAAJAnsHvAAJAnsJrAAJAnsK7AAJAnsKXAAJAnsK/AAJAnhh3AAJAnhhTAAJAnsLLAAJAnsLHAAJAnsI/AAJAnhlnAAJAnsLPAAJAnsHnAAJAnsHDAAJAnsHfAAJAnsHXAAJAnsHTAAJAnsHLAAJAnhiPAAJAnsI7AAJAnsIzAAJAnsIrAAJAnsInAAJAnsKHAAJAnsIbAAJAnsIfAAJAnsKTAAJAnsIjAAJAnhcHAAJAnhl7AAJAnsIPAAJAnsJDAAJAnsJnAAJAnsH/AAJAnsJLAAJAnsJXAAJAnsJbAAJAnsLTAAJAnsH7AAJAnsH3AAJAnsKvAAJAnsKfAAJAnsJPAAJAnhfXAAJAnsKjAAJAnhlfAAJAnsJ/AAJAnsJvAAJAnsJTAAJAnsLDAAJAnsKLAAJAamJ3AAJBoAADAAJHHwACQasAAXpHAAJBrmJrAAJBsgL3AAJBrmJfAAJBuuPDAAJBrmJ3AAJBwAMAAkGrAAF6SwACQcpiZwACQc8AAkcfAAJB0sfLAAJBzrwnAAJBymJrAAJB3gL3AAJBymJfAAJB5wABelMAAkHm3wMAAkHnAAF6VwACQecAAXpbAAJBymJ3AAJB+AMAAkGrAAFDswACQgJiZwACQgcAAXpjAAJCBwABemcAAkIHAAF6awACQgcAAXpvAAJCBwACRx8AAkIbAAF6cwACQhrHywACQhsAAQ9HAAJCGwABencAAkIbAAFHUwACQhsAAU3TAAJCGwABcDMAAkIa3nMAAkIbAAFNzwACQhrWqwACQhsAASN7AAJCBwABensAAkIHAAF6fwACQgcAAXqDAAJCBwABeocAAkIHAAF6iwACQgZqIwACQgcAAXqPAAJCBwABepMAAkIHAAF6lwACQgcAAXqbAAJCBwABep8AAkIHAAF6owACQgcAAXqnAAJCBwABeqsAAkIHAAF6rwACQgbrVwACQgcAAXqzAAJCAmJrAAJCjgmnAAJCjwACRx8AAkKW0BMAAkKXAAEfdwACQpcAAUznAAJClwABTisAAkICYl8AAkKrAAF6twACQqsAAXq7AAJCqwABesMAAkKrAAF60wACQqsAAXrXAAJCqwABetsAAkKrAAF63wACQqqDUwACQqqDXwACQqsAAXrjAAJCqwABev8AAkKrAAJHHwACQtsAAXsHAAJC2wABfH8AAkLbAAF9rwACQqrjwwACQqsAAXsTAAJCqrIjAAJCqwABey8AAkKrAAF7MwACQqsAAXs3AAJCqwABezsAAkKrAAF7QwACQqsAAXtHAAJCqhaDAAJCqwABe1sAAkKrAAF7XwACQqsAAXtjAAJCqwABe2cAAkKqvN8AAkKqaj8AAkKrAAF3LwACQqsAAXcnAAJCqwABe28AAkKrAAF7cwACQqsAAXt3AAJCqwABe3sAAkKq6y8AAkKq6zcAAkKq6zsAAkKq6z8AAkKq60sAAkKq60cAAkKq6zMAAkKrAAF7iwACQqrrKwACQqrrJwACQqsAAXvTAAJCqwABe/cAAkKrAAF7IwACQqsAAXv/AAJCqwABfAcAAkKrAAF8DwACQqsAAXufAAJCqwABfAMAAkKrAAF8OwACQqriXwACQqrj0wACQqrj9wACQqsAAXxDAAJCquPnAAJCqwABfEcAAkKrAAF8SwACQqriJwACQqrh3wACQqrh/wACQqrigwACQqrivwACQqrh4wACQqrh5wACQqrh6wACQqrh7wACQqripwACQqriqwACQqrixwACQqriowACQqrihwACQqrh2wACQqriZwACQqriawACQqriHwACQqriIwACQqriAwACQqriGwACQqrifwACQqrCswACQqrCuwACQqriBwACQqrCowACQqsAAXxvAAJCqwABfHcAAkKqws8AAkKq4jMAAkKq4j8AAkKq4k8AAkKq4lMAAkKq4osAAkKrAAF8lwACQqsAAXyLAAJCqwABfJMAAkKrAAF8jwACQqriQwACQqriOwACQqriNwACQqriRwACQqriSwACQqriCwACQqriDwACQqriFwACQqrimwACQqricwACQqridwACQqsAAXzHAAJCquITAAJCquH3AAJCquH7AAJCqwABe8MAAkKrAAF80wACQqoYHwACQqoWzwACQqsAAXzbAAJCqwABfHsAAkKq4o8AAkKq4nsAAkKq4pMAAkKqwq8AAkKqwk8AAkKqF9cAAkKqwfMAAkKq4tsAAkKq4pcAAkKq4fMAAkKrAAF8+wACQqriwwACQqrCnwACQqrirwACQqriYwACQqriswACQqritwACQqriuwACQqribwACQqsAAX0fAAJCquIrAAJCquIvAAJCqssLAAJCqwABfScAAkKrAAF9NwACQqrLDwACQqsAAX07AAJCqssTAAJCqwABfT8AAkKrAAF9RwACQqsAAX1TAAJCqwABfVcAAkKrAAF9WwACQqsAAX1fAAJCqwABfWcAAkKrAAF9awACQqsAAX1zAAJCqwABfXcAAkKrAAF9ewACQqqjQwACQqsAAX1/AAJCqwABfYMAAkKrAAF9iwACQqsAAX2fAAJCqwABfaMAAkKq4lcAAkKq4lsAAkKrAAF87wACQqsAAXzzAAJCquLLAAJCquLPAAJCquLTAAJCquLXAAJCquLfAAJCquLjAAJCquLnAAJCqwABfbsAAkKq4p8AAkKq4usAAkKq4u8AAkKq4vMAAkKq4vcAAkKq4vsAAkKq4v8AAkKq4wMAAkKq4wcAAkICYncAAkWcAAMAAkcjAAJFpmJfAAJFqwABgQcAAkWnAAF92wACRbJiawACRbYC9wACRbJiXwACRb7jwwACRbJidwACRcQDAAJFpwABfd8AAkXOYmcAAkXTAAJHIwACRdbHywACRdMAAX3jAAJF0wABfecAAkXOYmsAAkXmAvcAAkXOYl8AAkXvAAEWSwACRc5idwACRfQDAAJFpwABfg8AAkX+YmcAAkYDAAF+EwACRgIC9wACRgMAAkcjAAJGDtB/AAJGDsfLAAJGDwABR1MAAkYO1qsAAkYPAAEjewACRg8AAX4XAAJGDwABfhsAAkX+YmsAAkYuzQMAAkYvAAJHIwACRjcAAU4rAAJGNwABH3cAAkX+Yl8AAkZC48MAAkZC4xcAAkZDAAF+HwACRkMAAkcjAAJGUwABfkcAAkZTAAF+QwACRlMAAX5LAAJGUwABfvcAAkZC4y8AAkZDAAF+UwACRkMAAX5XAAJGQuKPAAJGQhbPAAJGQuPnAAJGQwABfl8AAkZDAAF+YwACRkMAAX5vAAJGQwABfncAAkZC4j8AAkZDAAF+jwACRkLh8wACRkMAAX5zAAJGQuHfAAJGQuKDAAJGQuPTAAJGQuP3AAJGQwABfrsAAkZC4icAAkZDAAF+ywACRkLCzwACRkLiVwACRkLiywACRkLizwACRkLi0wACRkLi1wACRkMAAX7fAAJGQuILAAJGQuIXAAJGQuIrAAJGQuI7AAJGQuJDAAJGQuI3AAJGQuJHAAJGQwABfv8AAkZC4rcAAkZC4rsAAkZC4osAAkZDAAF/FwACRkLi5wACRkLi4wACRkLjAwACRkLi7wACRkLi8wACRf5idwACRxgDAAJFpwABf0sAAkciYmcAAkcnAAF97wACRyYLJwACRyaTfwACRyYC9wACRyaQewACRyJiawACRz8AAkcjAAJHQwABTisAAkciYl8AAkdK48MAAkdK4xcAAkdLAAF/TwACR0riKwACR0riLwACR0riPwACRyJidwACR2QDAAJFpwABf18AAkduYmcAAkdyAvcAAkdyk38AAkdzAAEWQwACR3MAAkcjAAJHgwABfhsAAkdyc5sAAkdzAAF/YwACR3MAAX4HAAJHcwABf2cAAkduYmsAAkebAAJHIwACR58AAU4rAAJHmwABf2sAAkduYl8AAkerAAF/bwACR6sAAX9zAAJHqwABf3sAAkerAAF/hwACR6sAAX+DAAJHquPDAAJHquMXAAJHqwABf5cAAkerAAF/jwACR6sAAX+rAAJHqwABf5sAAkerAAF/iwACR6sAAX+3AAJHqwABf5MAAkerAAF/wwACR25idwACR+gDAAJFpwABf8cAAkfyYmcAAkf2kHsAAkf3AAF/ywACR/ZuGwACR/cAARZDAAJH9pN/AAJH8mJrAAJIDwACRyMAAkgTAAFOKwACSA8AAX3jAAJH8mJfAAJIHwABf3cAAkgfAAEoqwACSB8AAX/PAAJIHuPvAAJIHsLPAAJIHsKfAAJH8mJ3AAJIOAMAAkWnAAF/4wACSEJiZwACSEYC9wACSEJiXwACSE7jwwACSEJidwACSFQDAAJFpwABf+sAAkheYmcAAkhiAvcAAkheYl8AAkhq48MAAkheYncAAkhwAwACRacAAX/vAAJIemJnAAJIfmf/AAJIfwABf/MAAkh6YncAAkiIAwACRacAAX/3AAJIkmJnAAJIlwACRyMAAkibAAFOKwACSJYC9wACSJa6mwACSJcAAX/7AAJIlwABf/8AAkiSYl8AAkiy48MAAkizAAGABwACSLMAAYAPAAJIswABgCMAAkiy4xcAAkizAAGAAwACSLMAAYAzAAJIkmJ3AAJI0AMAAkWnAAGANwACSNpiZwACSN8AAkcjAAJI4wABTisAAkjeAvcAAkjfAAF+AwACSNynAAJI2mJfAAJI9uPDAAJI9uMXAAJI2mJ3AAJJAAMAAkWnAAGASwACSQpiZwACSQ4C9wACSQ6TfwACSQpiawACSRsAAkcjAAJJHwABTisAAkkKYl8AAkkm48MAAkknAAGAUwACSSbiVwACSSbiJwACSScAAYBnAAJJCmJ3AAJJPAMAAkWnAAGAawACSUZiZwACSUsAAkcjAAJJTtarAAJJTt//AAJJTwABfhsAAklKAvcAAklLAAGAbwACSUsAAYBzAAJJSwABfgsAAklGYmsAAklvAAJHIwACSXMAAU4rAAJJRmJfAAJJeuPDAAJJeuMXAAJJewABgHsAAkl64gsAAkl64hcAAkl7AAJHIwACSZMAAYCDAAJJeuIPAAJJeuH3AAJJewABgJsAAkl64y8AAkl64mMAAkl7AAGAqwACSXrirwACSXriswACSXribwACSXriKwACSXriLwACSXrjzwACSXrh8wACSXoYHwACSXrCzwACSXriMwACSXriVwACSXriWwACSXoWzwACSXrijwACSXrj9wACSXritwACSXri1wACSXri3wACSXri4wACSXri5wACSUZidwACSgADAAJFpwABgLsAAkoKYmcAAkoMnwACSg8AAkcjAAJKFKMAAkoMpwACSg2HAAJKCmJfAAJKJI8AAkoKYncAAkosAwACRacAAYC/AAJKNmJnAAJKOpN/AAJKOhdPAAJKOwABgMMAAko7AAGAxwACSjZiawACSk8AAkcjAAJKUwABTisAAko2Yl8AAkpbAAGAywACSlsAAYDPAAJKWhBvAAJKWwABgNMAAkpa1P8AAkpbAAGA1wACSlsAAYCXAAJKWwABgJMAAkpbAAGAjwACSlsAAYCHAAJKWwABgJ8AAkpbAAGArwACSlsAAYCzAAJKWwABgLcAAkpbAAGA7wACSlsAAYB3AAJKWnrbAAJKNmJ3AAJKoAADAAJDwwACSqpiYwACSq8AAYEnAAJKrwABgSsAAkqqYmcAAkq7AAGH1wACSroKBwACSqpiXwACSsYPswACSscAAUPLAAJKxwABR8cAAkrHAAFICwACSscAAUgHAAJKxwABRmcAAkrHAAGC7wACSscAAYLzAAJKxwABgvcAAkrHAAGC+wACSscAAYfbAAJKxrufAAJKqwABgS8AAkr6Yl8AAkr+wtMAAkr+GGMAAkr+GFMAAkr+GHcAAkr+ws8AAkr+wssAAkr+wscAAkr+wsMAAkr+wr8AAkr+wrsAAkr+wrMAAkr+wq8AAkr+F9cAAkr+wqMAAkr+GRsAAkr+wp8AAkr+wpsAAkr+wpcAAkr+GWcAAkr+GI8AAkr+wpMAAkr+wosAAkr+wocAAkr+wn8AAkr+wnMAAkr+wm8AAkr+wmsAAkr+wmcAAkr+wmMAAkr+wl8AAkr+wlsAAkr+wlcAAkr+wlMAAkr+wk8AAkr+GV8AAkr+wksAAkr+wkcAAkr+wkMAAkr+wj8AAkr+wjsAAkr+wjMAAkr+wisAAkr+wicAAkr+wiMAAkr+wh8AAkr+whsAAkr+FwcAAkr+GXsAAkr+wg8AAkr+wgsAAkr+wgcAAkr+wf8AAkr+wfsAAkr+wfcAAkr+wfMAAkr+we8AAkr+wecAAkr+wd8AAkr+wdcAAkr+wdMAAkr+wcsAAkr+wcMAAkr6YncAAkv4AwACSqsAAYE3AAJMAmJfAAJMBwABGgsAAkwGwtMAAkwHAAF3JwACTAcAAYE7AAJMBuP/AAJMBhhjAAJMBhhTAAJMBhh3AAJMBsLPAAJMBsLLAAJMBsLHAAJMBsLDAAJMBsK/AAJMBsK7AAJMBsKzAAJMBsKvAAJMBhfXAAJMBsKjAAJMBsKfAAJMBhlnAAJMBhiPAAJMBsKTAAJMBhkbAAJMBsKbAAJMBsKXAAJMBwABdy8AAkwHAAGBPwACTAbChwACTAbCfwACTAbCcwACTAbCbwACTAbCawACTAbCZwACTAbCYwACTAbCXwACTAbCWwACTAbCVwACTAbCRwACTAbCUwACTAYZXwACTAbCSwACTAbCTwACTAbCQwACTAbCPwACTAcAAYFDAAJMBsI7AAJMBsIzAAJMBsIrAAJMBwABgUcAAkwGwicAAkwGwiMAAkwGwh8AAkwGwhsAAkwGFwcAAkwGGXsAAkwGwg8AAkwGwgsAAkwGwgcAAkwGwf8AAkwGwfsAAkwGwfcAAkwHAAGBSwACTAbB5wACTAbB3wACTAbB1wACTAbB0wACTAbBywACTAbBwwACTAbB7wACTAbB8wACTAbCiwACTAJidwACTSQDAAJKqwABgU8AAk0uYl8AAk0ywtMAAk0yGGMAAk0yGFMAAk0yGHcAAk0yws8AAk0ywssAAk0ywscAAk0ywsMAAk0ywr8AAk0ywrsAAk0ywrMAAk0ywq8AAk0yF9cAAk0ywqMAAk0yGRsAAk0ywp8AAk0ywpsAAk0ywpcAAk0yGWcAAk0yGI8AAk0ywpMAAk0ywosAAk0ywocAAk0ywn8AAk0ywnMAAk0ywm8AAk0ywmsAAk0ywmcAAk0ywmMAAk0ywl8AAk0ywlsAAk0ywlcAAk0ywlMAAk0ywk8AAk0yGV8AAk0ywksAAk0ywkcAAk0ywkMAAk0ywj8AAk0ywjsAAk0ywjMAAk0ywisAAk0ywicAAk0ywiMAAk0ywh8AAk0ywhsAAk0yFwcAAk0yGXsAAk0ywg8AAk0ywgsAAk0ywgcAAk0ywf8AAk0ywfsAAk0ywfcAAk0ywfMAAk0ywe8AAk0ywecAAk0ywd8AAk0ywdcAAk0ywdMAAk0ywcsAAk0ywcMAAk0uYncAAk4sAwACSqsAAYFTAAJONmJfAAJOOwABGgsAAk46wtMAAk47AAF3JwACTjsAAYE7AAJOOuP/AAJOOhhjAAJOOhhTAAJOOhh3AAJOOsLPAAJOOsLLAAJOOsLHAAJOOsLDAAJOOsK/AAJOOsK7AAJOOsKzAAJOOsKvAAJOOhfXAAJOOsKjAAJOOsKfAAJOOhlnAAJOOhiPAAJOOsKTAAJOOhkbAAJOOsKbAAJOOsKXAAJOOwABdy8AAk47AAGBPwACTjrChwACTjrCfwACTjrCcwACTjrCbwACTjrCawACTjrCZwACTjrCYwACTjrCXwACTjrCWwACTjrCVwACTjrCRwACTjrCUwACTjoZXwACTjrCSwACTjrCTwACTjrCQwACTjrCPwACTjsAAYFDAAJOOsI7AAJOOsIzAAJOOsIrAAJOOwABgUcAAk46wicAAk46wiMAAk46wh8AAk46whsAAk46FwcAAk46GXsAAk46wg8AAk46wgsAAk46wgcAAk46wf8AAk46wfsAAk46wfcAAk47AAGBSwACTjrB5wACTjrB3wACTjrB1wACTjrB0wACTjrBywACTjrBwwACTjrB7wACTjrB8wACTjrCiwACTjZidwACT1gDAAJKqtufAAJPYmJ3AAJPZAMAAkqqETMAAk9uYmcAAk9zAAJDwwACT3cAAYFbAAJPbmJrAAJPfpWHAAJPfwABe7MAAk9uYl8AAk+KETcAAk+KETsAAk+KFdcAAk+LAAGBVwACT4sAAkPDAAJPnr8fAAJPir5/AAJPiwABgV8AAk+LAAGBYwACT4q7xwACT25idwACT7QDAAJKqwABdDMAAk++YmcAAk/CCacAAk++Yl8AAk/KETcAAk/KFdcAAk/KETsAAk/LAAGBVwACT8sAAkPDAAJP3r8fAAJPvmJ3AAJP5AMAAkqqGEsAAk/uYl8AAk/zAAGBYwACT+5idwACT/gDAAJKqhhXAAJQAmJnAAJQBhhbAAJQAmJfAAJQDhE3AAJQDhXXAAJQDhE7AAJQDwABgVcAAlAPAAJDwwACUCK/HwACUAJidwACUCgDAAJQKhZ7AAJKqhhPAAJQNmJnAAJQOgmvAAJQNmJfAAJQQhE3AAJQQhXXAAJQQhE7AAJQQwABgVcAAlBDAAJDwwACUFa/HwACUDZidwACUFwDAAJKqhhzAAJQZmJfAAJQahE3AAJQahXXAAJQahE7AAJQawABgVcAAlBrAAJDwwACUH6/HwACUGZidwACUIQDAAJKqwABgWcAAlCOYmcAAlCSFusAAlCSBrcAAlCSFu8AAlCOYmsAAlCjAAGBbwACUI5iXwACUKoRNwACUKoV1wACUKoROwACUKsAAYFXAAJQqwACQ8MAAlC+vx8AAlCOYncAAlDEAwACUMcAAYFrAAJKqwABgXMAAlDSYmcAAlDWCacAAlDSYncAAlDcAwACSqsAAYF3AAJQ5mJnAAJQ6qk/AAJQ6hbrAAJQ6rDLAAJQ5mJfAAJQ+hE3AAJQ+hXXAAJQ+hE7AAJQ+wABgVcAAlD7AAJDwwACUQ6/HwACUOZidwACURQDAAJKqozzAAJRHmJnAAJRIsJ3AAJRIg8DAAJRHmJfAAJRLhE3AAJRLhXXAAJRLhE7AAJRLwABgVcAAlEvAAJDwwACUUK/HwACUR5idwACUUgDAAJKqwABgXsAAlFSYmcAAlFWFusAAlFSYl8AAlFeETcAAlFeFdcAAlFeETsAAlFfAAGBVwACUV8AAkPDAAJRcr8fAAJRUmJ3AAJReAMAAkqrAAGBfwACUYJiZwACUYYW6wACUYJiXwACUY4RNwACUY4V1wACUY4ROwACUY8AAYFXAAJRjwACQ8MAAlGivx8AAlGCYncAAlGoAwACSqq0IwACUbJiZwACUbbCtwACUbJiXwACUb4RNwACUb4V1wACUb4ROwACUb8AAYFXAAJRvwACQ8MAAlHSvx8AAlGyYncAAlHYAwACSqq0HwACUeJiZwACUebCtwACUeJiXwACUe4RNwACUe4V1wACUe4ROwACUe8AAYFXAAJR7wACQ8MAAlICvx8AAlHiYncAAlIIAwACSqsAAYGDAAJSEmJnAAJSFgJbAAJSEmJfAAJSHhE3AAJSHhXXAAJSHhE7AAJSHwABgVcAAlIfAAJDwwACUjK/HwACUhJidwACUjgDAAJKqhfTAAJSQmJnAAJSRgmvAAJSQmJfAAJSThE3AAJSThXXAAJSThE7AAJSTwABgVcAAlJPAAJDwwACUmK/HwACUkJidwACUmgDAAJKqwABgYcAAlJyYmcAAlJ2CacAAlJ2wqcAAlJ2wqsAAlJyYl8AAlKGETcAAlKGFdcAAlKGETsAAlKHAAGBVwACUocAAkPDAAJSmr8fAAJScmJ3AAJSoAMAAkqqGQ8AAlKqYmcAAlKuepcAAlKuCacAAlKqYl8AAlK6ETcAAlK6FdcAAlK6ETsAAlK7AAGBVwACUrsAAkPDAAJSzr8fAAJSqmJ3AAJS1AMAAkqrAAGBiwACUt5iZwACUuIPRwACUuIYzwACUt5iXwACUu4RNwACUu4V1wACUu4ROwACUu8AAYFXAAJS7wACQ8MAAlMCvx8AAlLeYncAAlMIAwACSqsAAYGPAAJTEmJnAAJTFgmnAAJTEmJ3AAJTHAMAAkqrAAGBkwACUyZiZwACUyoJrwACUyZiXwACUzIRNwACUzIV1wACUzIROwACUzMAAYFXAAJTMwACQ8MAAlNGvx8AAlMmYncAAlNMAwACSqsAAYGXAAJTVmJfAAJTWhE3AAJTWhXXAAJTWhE7AAJTWwABgVcAAlNbAAJDwwACU26/HwACU1ZidwACU3QDAAJKqhljAAJTfmJnAAJTggL3AAJTggmrAAJTfmJfAAJTjhE3AAJTjhXXAAJTjhE7AAJTjwABgVcAAlOPAAJDwwACU6K/HwACU35idwACU6gDAAJKqhiLAAJTsmJnAAJTtmQHAAJTtgmnAAJTsmJfAAJTwhE3AAJTwhXXAAJTwhE7AAJTwwABgVcAAlPDAAJDwwACU9a/HwACU7JidwACU9wDAAJKqwABgZsAAlPmYmcAAlPqCk8AAlPmYl8AAlPyETcAAlPyFdcAAlPyETsAAlPzAAGBVwACU/MAAkPDAAJUBr8fAAJT5mJ3AAJUDAMAAkqrAAGBnwACVBZiZwACVBoJrwACVBrCjwACVBZiXwACVCYRNwACVCYV1wACVCYROwACVCcAAYFXAAJUJwACQ8MAAlQ6vx8AAlQWYncAAlRAAwACSqoVrwACVEpiawACVE6/TwACVEpiXwACVFcAAYFjAAJUSmJ3AAJUXAMAAkqqeYsAAlRmYncAAlRoAwACSqoZawACVHJiXwACVHYRNwACVHYV1wACVHcAAkPDAAJUgr8fAAJUcmJrAAJUig9HAAJUir8LAAJUcmJ3AAJUlAMAAkqrAAGBowACVJ5iZwACVKIC9wACVJ5iawACVKoCWwACVJ5iXwACVLIROwACVLMAAYFXAAJUnmJ3AAJUvAMAAkqrAAGBpwACVMZiZwACVMoixwACVMoJRwACVMZiXwACVNYRNwACVNYV1wACVNYROwACVNcAAYFXAAJU1wACQ8MAAlTqvx8AAlTGYmsAAlTyv08AAlTGYncAAlT4AwACVPsAAYGrAAJKqwABga8AAlUGYmcAAlUKub8AAlUKwoMAAlUGYl8AAlUWETcAAlUWFdcAAlUWETsAAlUXAAGBVwACVRcAAkPDAAJVKr8fAAJVBmJrAAJVMr9PAAJVBmJ3AAJVOAMAAkqrAAGBswACVUJiZwACVUbCEwACVUJiXwACVU4RNwACVU4V1wACVU4ROwACVU8AAYFXAAJVTwACQ8MAAlVivx8AAlVCYmsAAlVqv08AAlVCYncAAlVwAwACSqsAAYG3AAJVemJnAAJVfsJ3AAJVfqlTAAJVfgJbAAJVemJrAAJVjr9PAAJVjo7bAAJVemJfAAJVmhE3AAJVmhXXAAJVmhE7AAJVmwABgVcAAlWbAAJDwwACVa6/HwACVXpidwACVbQDAAJVtuo/AAJKqwABgbsAAlXCYmsAAlXGepcAAlXCYl8AAlXOETcAAlXOFdcAAlXPAAJDwwACVdq/HwACVcJidwACVeADAAJKqwABgb8AAlXqYmcAAlXuFusAAlXuBrcAAlXuFu8AAlXqYl8AAlX+ETcAAlX+FdcAAlX+ETsAAlX/AAGBVwACVf8AAkPDAAJWEr8fAAJV6mJrAAJWGr9PAAJV6mJ3AAJWIAMAAkqrAAGBwwACVipiZwACVi4JFwACVi1vAAJWKmJfAAJWOhE3AAJWOhXXAAJWOhE7AAJWOwABgVcAAlY7AAJDwwACVk6/HwACVipiawACVla/TwACVipidwACVlwDAAJKqwABgccAAlZmYl8AAlZqETcAAlZqFdcAAlZrAAJDwwACVna/HwACVmZidwACVnwDAAJKqlvXAAJWhmJnAAJWiqlTAAJWihbXAAJWihbfAAJWhmJfAAJWmhE3AAJWmhXXAAJWmwACQ8MAAlamvx8AAlaaETsAAlabAAGBVwACVoZiawACVrcAAXuzAAJWtr9PAAJWhmJ3AAJWwAMAAkqrAAELAwACVspiZwACVs6pUwACVsx/AAJWymJfAAJW2hE3AAJW2hXXAAJW2wACQ8MAAlbmvx8AAlbaETsAAlbbAAGBVwACVspiawACVva/TwACVspidwACVvwDAAJKqwABgc8AAlcGYmcAAlcKqVMAAlcIfwACVwZiXwACVxYRNwACVxYV1wACVxcAAkPDAAJXIr8fAAJXFhE7AAJXFwABgVcAAlcGYmsAAlcyv08AAlcGYncAAlc4AwACSqsAAYHTAAJXQmJnAAJXRgL3AAJXRwACQ8MAAldPAAGB1wACV0JiXwACV1YRNwACV1YROwACV1cAAYFXAAJXQmJrAAJXZr9PAAJXQmJ3AAJXbAMAAkqrAAFg7wACV3ZiXwACV3oRNwACV3oV1wACV3sAAkPDAAJXhr8fAAJXewABgV8AAld4jwACV3ZidwACV5QDAAJKqhlDAAJXnmJnAAJXor8LAAJXnmJfAAJXqhE3AAJXqhXXAAJXqwACQ8MAAle2vx8AAleeYncAAle8AwACSqsAAYHnAAJXxmJfAAJXyhE3AAJXyhXXAAJXywACQ8MAAlfWvx8AAlfGYncAAlfcAwACSqsAAYHrAAJX5mJfAAJX6hE3AAJX6hXXAAJX6wACQ8MAAlf2vx8AAlfmYncAAlf8AwACSqsAAYHvAAJYBmJnAAJYCgL3AAJYCgmrAAJYBmJfAAJYFhE3AAJYFhXXAAJYFhE7AAJYFwABgVcAAlgXAAJDwwACWCq/HwACWAZiawACWDK/TwACWAZidwACWDgDAAJKqwABgfMAAlhCYmcAAlhGD78AAlhGCacAAlhGhMcAAlhCYl8AAlhWETcAAlhWFdcAAlhWETsAAlhXAAGBVwACWFcAAkPDAAJYar8fAAJYQmJrAAJYcr9PAAJYQmJ3AAJYeAMAAkqqCJ8AAliCYmcAAliEnwACWIYYwwACWIbSjwACWIZadwACWIZmvwACWIZmxwACWIcAAYH3AAJYhwABgfsAAliEpwACWIJiXwACWKyPAAJYgmJ3AAJYtAMAAkqrAAGB/wACWL5iZwACWMIV/wACWMKTxwACWL5iXwACWM4RNwACWM4V1wACWM4ROwACWM8AAYFXAAJYzwACQ8MAAljivx8AAli+YmsAAljqv08AAli+YncAAljwAwACWPISUwACWPMAAYIDAAJKqwABggcAAlkCYl8AAlkGETsAAlkHAAGBVwACWQcAAkPDAAJZEr8fAAJZAmJ3AAJZGAMAAkqrAAGCCwACWSJiXwACWSYRNwACWSYV1wACWSJiawACWTICWwACWTK/TwACWSJidwACWTwDAAJKqwABgg8AAllGYl8AAllKETcAAllKFdcAAllGYmsAAllWAlsAAllWv08AAllGYncAAllgAwACSqsAAYITAAJZamJfAAJZbhE3AAJZbhXXAAJZamJrAAJZegJbAAJZamJ3AAJZgAMAAkqrAAGCFwACWYpiXwACWY4ROwACWY8AAYFXAAJZimJrAAJZmr9PAAJZimJ3AAJZoAMAAkqqiUcAAlmqYmcAAlmuAlsAAlmqYl8AAlm2ETcAAlm2FdcAAlm3AAJDwwACWcK/HwACWapidwACWcgDAAJKqolfAAJZ0mJfAAJZ1hE3AAJZ1hXXAAJZ1wACQ8MAAlnivx8AAlnSYncAAlnoAwACSqsAAQMHAAJZ8mJnAAJZ9gJbAAJZ8mJfAAJZ/hE3AAJZ/hXXAAJZ/wACQ8MAAloKvx8AAlnyYncAAloQAwACSqoW+wACWhpiZwACWh4SBwACWhpiXwACWiYRNwACWiYV1wACWiYROwACWicAAYFXAAJaJwACQ8MAAlo6vx8AAloaYncAAlpAAwACSqsAAYIbAAJaSmJnAAJaTgJbAAJaSmJrAAJaVr9PAAJaSmJfAAJaXhE3AAJaXhXXAAJaXwACQ8MAAlpqvx8AAlpKYncAAlpwAwACSqsAAYIfAAJaemJnAAJafiEXAAJaemJfAAJahhE3AAJahhXXAAJahhE7AAJahwABgVcAAlqHAAJDwwACWpq/HwACWnpiawACWqK/TwACWnpidwACWqgDAAJKqwABgiMAAlqyYl8AAlq2ETcAAlq2FdcAAlq2ETsAAlq3AAGBVwACWrcAAkPDAAJayr8fAAJasmJrAAJa0r9PAAJasmJ3AAJa2AMAAkqrAAGCJwACWuJiZwACWuZ8YwACWubCAwACWuJiXwACWvIRNwACWvIV1wACWvIROwACWvMAAYFXAAJa8wACQ8MAAlsGvx8AAlriYmsAAlsOv08AAlriYncAAlsUAwACSqsAAYIrAAJbHmJnAAJbIgL3AAJbIgJbAAJbHmJfAAJbLhE3AAJbLhXXAAJbLhE7AAJbLwABgVcAAlsvAAJDwwACW0K/HwACWx5idwACW0gDAAJKqwABgi8AAltSYmsAAltXAAEaYwACW1aPCwACW1b7wwACW1JidwACW2QDAAJKqwABgjMAAltuYmsAAltzAAEaYwACW3KPCwACW3L7wwACW25idwACW4ADAAJKqwABgjcAAluKYmcAAluPAAEaYwACW4piXwACW5YRNwACW5YV1wACW5YROwACW5cAAYFXAAJblwACQ8MAAluqvx8AAluKYmsAAluyv08AAluKYncAAlu4AwACSqsAAYI7AAJbwmJrAAJbxwABGmMAAlvGjwsAAlvG+8MAAlvCYncAAlvUAwACSqsAAYI/AAJb3mJnAAJb4wABGmMAAlveYl8AAlvqETcAAlvqFdcAAlvqETsAAlvrAAGBVwACW+sAAkPDAAJb/r8fAAJb3mJ3AAJcBAMAAkqrAAGCQwACXA5iawACXBMAARpjAAJcEo8LAAJcEvvDAAJcDmJ3AAJcIAMAAkqrAAGCRwACXCpiZwACXC8AARpjAAJcKmJrAAJcNgL3AAJcNr8LAAJcNr9PAAJcKmJfAAJcRhE3AAJcRhXXAAJcRhE7AAJcRwABgVcAAlxHAAJDwwACXFq/HwACXCpidwACXGADAAJKqwABgk8AAlxqYmsAAlxvAAEaYwACXG6PCwACXG77wwACXGpidwACXHwDAAJKqwABglMAAlyGYmcAAlyLAAEaYwACXIZiXwACXJIRNwACXJIV1wACXJIROwACXJMAAYFXAAJckwACQ8MAAlymvx8AAlyGYmsAAlyuv08AAlyGYncAAly0AwACSqsAAYJXAAJcvmJrAAJcwwABGmMAAlzCjwsAAlzC+8MAAly+YncAAlzQAwACSqsAAYJbAAJc2mJnAAJc3wABGmMAAlzaYl8AAlzmETcAAlzmFdcAAlzmETsAAlznAAGBVwACXOcAAkPDAAJc+r8fAAJc2mJ3AAJdAAMAAkqrAAGCXwACXQpiawACXQ8AARpjAAJdDo8LAAJdDvvDAAJdCmJ3AAJdHAMAAkqrAAGCYwACXSZiZwACXSsAARpjAAJdJmJfAAJdMhE3AAJdMhXXAAJdMhE7AAJdMwABgVcAAl0zAAJDwwACXUa/HwACXSZiawACXU4C9wACXU6/TwACXSZidwACXVgDAAJKqwABgmsAAl1iYmcAAl1kbwACXWJiXwACXW4RNwACXW4V1wACXW4ROwACXW8AAYFXAAJdbwACQ8MAAl2Cvx8AAl1iYmsAAl2Kv08AAl1iYncAAl2QAwACSqsAAYJvAAJdmmJnAAJdngmvAAJdmmJrAAJdpr9PAAJdmmJfAAJdrhE3AAJdrhXXAAJdrhE7AAJdrwABgVcAAl2vAAJDwwACXcK/HwACXZpidwACXcgDAAJKqwABHWcAAl3SYmcAAl3WceMAAl3SYl8AAl3eETcAAl3eFdcAAl3fAAJDwwACXeq/HwACXd4ROwACXd8AAYFXAAJd0mJ3AAJd+AMAAkqrAAGCcwACXgJiXwACXgSDAAJeBhVHAAJeBwABJ5sAAl4HAAJDwwACXhcAAYJ3AAJeFwABgnsAAl4XAAGCmwACXhcAAYLbAAJeFwABguMAAl4HAAFGawACXgcAAVBzAAJeBwABgpcAAl4HAAFUEwACXgcAAVATAAJeBwABGi8AAl4GD7MAAl4HAAFHxwACXgcAAUgHAAJeBwABSAsAAl4HAAFDywACXgcAAUZnAAJeBwABfUMAAl4HAAGC7wACXgcAAYLzAAJeBnHjAAJeBwABgvcAAl4HAAGC+wACXgJidwACXnQDAAJKqwABgv8AAl5+YmcAAl6ChVcAAl6AiwACXn5iXwACXoyPAAJefmJ3AAJelAMAAkqrAAGDHwACXp5iZwACXqMAAYMjAAJeowABgycAAl6jAAGDAwACXqIGxwACXqMAAYMrAAJeowABJGcAAl6jAAGDLwACXqMAASTzAAJeowABgzMAAl6jAAGDNwACXqJ2cwACXqJlVwACXqMAARbnAAJeowABgzsAAl6jAAGDPwACXqMAAYNDAAJeowABg0cAAl6jAAGDSwACXqMAAYNPAAJeowABg1MAAl6idr8AAl6jAAGDVwACXqJ2uwACXqJ3ewACXqJ3CwACXqMAAYNbAAJeowABOB8AAl6jAAGDXwACXqMAAYNjAAJeowABg2cAAl6jAAGDawACXqMAAYNvAAJenmJrAAJfJwABg3cAAl8nAAGDewACXp5iXwACXzMAAYN/AAJfMwABg4MAAl8zAAGDjwACXzMAAQ5vAAJfMwABg5cAAl8zAAGDcwACXzMAAYO/AAJfMwABg8MAAl8zAAGDxwACXzMAAYPLAAJfMwABg9cAAl8yBxcAAl8zAAGD2wACXzMAAQf3AAJfMwABBycAAl8zAAGD+wACXzMAAYPnAAJfMwABhAsAAl8zAAGEFwACXzMAAYQPAAJfMwABhCMAAl8zAAGEJwACXzMAAYQrAAJfMwABhC8AAl8zAAGEQwACXzMAAYPrAAJfMoVrAAJfMwABhEcAAl8zAAGETwACXzMAAYRTAAJfMgmvAAJfMhVHAAJfMwABB3cAAl8zAAEHYwACXzMAAYRbAAJfMwABhIsAAl8zAAGEXwACXzMAAYRjAAJfMwABhGcAAl8zAAGEawACXzMAAYP3AAJfMwABhG8AAl8zAAGEcwACXzMAAYSrAAJfMwABhHcAAl8zAAGEewACXzMAAYR/AAJfMwABhKMAAl6eYncAAl/0AwACSqsAAYS3AAJf/mJnAAJgAg0TAAJgAga/AAJgAwABhLsAAmADAAGEvwACX/5iXwACYBV3AAJf/mJrAAJgHXsAAl/+YncAAmAkAwACSqsAAYTDAAJgLmJnAAJgMg0TAAJgMga/AAJgLmJrAAJgPXMAAmAuYncAAmBEAwACSqsAAYTHAAJgTmJnAAJgUwABGj8AAmBTAAEaQwACYFMAAYTLAAJgUwABGjsAAmBOYl8AAmBnAAGEzwACYE5idwACYGwDAAJKqwABhNMAAmB2Yl8AAmB6BxcAAmB60acAAmB60aMAAmB60a8AAmB2YncAAmCMAwACSqsAAYTXAAJglmJnAAJgmgovAAJglmJfAAJgotGnAAJgovUDAAJglmJ3AAJgrAMAAkqqZT8AAmC2YmcAAmC56wACYLoJTwACYLsAARo/AAJguwABhNsAAmC7AAGE3wACYLsAAkPDAAJg0wABhOMAAmDSD2cAAmDSD2sAAmC7AAGE5wACYLsAAYTrAAJguwABhO8AAmC7AAGE8wACYLsAAYT3AAJguwABhP8AAmC7AAGFBwACYLsAAVWnAAJgtmJfAAJhAwABhQsAAmECD38AAmECD4MAAmEDAAGFDwACYQMAAYUTAAJhAwABhRcAAmEBvwACYQMAAYUjAAJhAwABhScAAmEDAAGFKwACYQMAAYUvAAJhAqELAAJhAwACQ8MAAmE3AAGFHwACYTcAAYWjAAJhNwABhacAAmEDAAGFMwACYQLRowACYQMAAYU7AAJhAmo/AAJhAwABhT8AAmEDAAEyOwACYQLC0wACYQMAAYVTAAJhAwABhVcAAmEDAAGFawACYQMAAYVjAAJhAhhjAAJhAhhTAAJhAhh3AAJhAwABhW8AAmECws8AAmECwssAAmECwscAAmECwsMAAmECwr8AAmECwrsAAmECwrMAAmECwq8AAmECwosAAmECF9cAAmECwqMAAmECGRsAAmECwp8AAmECwpsAAmECwpcAAmECGI8AAmEDAAGFgwACYQIZZwACYQMAAYVPAAJhAsJ/AAJhAsJzAAJhAsJvAAJhAsJrAAJhAsJnAAJhAsJjAAJhAsJfAAJhAsJbAAJhAsJXAAJhAsJTAAJhAsJPAAJhAhlfAAJhAsJLAAJhAlhnAAJhAwABhdMAAmECwkcAAmECwkMAAmECwj8AAmECwjsAAmEDAAGF4wACYQLCMwACYQLCKwACYQLCJwACYQLCIwACYQIXBwACYQIZewACYQLCDwACYQLCHwACYQLCGwACYQLCCwACYQLCBwACYQLB/wACYQLB+wACYQLB9wACYQLChwACYQLCkwACYQMAAYFLAAJhAsHnAAJhAsHfAAJhAsHXAAJhAsHTAAJhAsHLAAJhAsHDAAJhAsHvAAJhAsHzAAJgtmJrAAJigg93AAJigwABhRsAAmC2YncAAmKMAwACSqsAAYX7AAJilmJnAAJimlyTAAJimg1vAAJilmJfAAJipVsAAmKmD+MAAmKWYncAAmKwAwACSqsAAYX/AAJiumJnAAJivqDHAAJivwABhgMAAmK/AAGFhwACYr4PvwACYr8AAYYHAAJivwABhg8AAmK6Yl8AAmLbAAGGFwACYtsAAYYbAAJi2wABhh8AAmLaGWcAAmLawkMAAmLawj8AAmLawk8AAmLawe8AAmLaGV8AAmK6YncAAmMAAwACSqsAAYYjAAJjCmJnAAJjDglPAAJjCmJfAAJjFsLTAAJjFwABGgsAAmMWGGMAAmMWGFMAAmMWGHcAAmMWws8AAmMWwssAAmMWwscAAmMWwsMAAmMWwr8AAmMWwrsAAmMWwrMAAmMWwq8AAmMWF9cAAmMWwqMAAmMWGRsAAmMWwp8AAmMWwpsAAmMWwpcAAmMWGWcAAmMWGI8AAmMWwpMAAmMXAAF3LwACYwpidwACY3QDAAJKqwABhisAAmN+Yl8AAmOCZHMAAmOCg8MAAmODAAGGMwACY4Ib6wACY4Ib9wACY35idwACY5gDAAJKqwABhjcAAmOiYl8AAmOmZHMAAmOmg8MAAmOnAAGGMwACY6Yb6wACY6Yb9wACY6JidwACY7wDAAJKqwABhjsAAmPGYmcAAmPKFzsAAmPLAAGGPwACY8sAAYZDAAJjywABhkcAAmPLAAGGSwACY8sAAYZPAAJjywABhlMAAmPLAAGGVwACY8ZiXwACY+4b6wACY+4b9wACY+5kcwACY+8AAYZbAAJj7oPDAAJj7wABhjMAAmPvAAGGXwACY+8AAYZjAAJjxmJ3AAJkEAMAAkqrAAGGcwACZBpiZwACZB4RSwACZB4PuwACZB7brwACZB8AARnzAAJkGmJfAAJkMwABhTcAAmQy0a8AAmQaYncAAmQ8AwACSqsAAYZ3AAJkRmJnAAJkSwABhnsAAmRLAAGGfwACZEZiXwACZFcAAYKDAAJkVwABgocAAmRXAAGCiwACZFcAAYKPAAJkRmJ3AAJkaAMAAkqqItMAAmRyYmcAAmR2DRMAAmR2igsAAmR3AAGCkwACZHbRuwACZHZqzwACZHbc+wACZHcAAYaDAAJkcmJrAAJklvvDAAJkcmJfAAJknwACQ8MAAmSjAAGGjwACZKMAAYaHAAJknsN3AAJkcmJ3AAJksAMAAmSzAAGGiwACZLMAAYaTAAJKqwABhqsAAmTCYmcAAmTHAAGCkwACZMcAAXZ3AAJkxwABhq8AAmTCYl8AAmTVnwACZNYHFwACZNacUwACZNcAAYazAAJk1mo/AAJk1wABhrsAAmTXAAGGvwACZNcAARoLAAJk1wABhscAAmTXAAGGywACZNbB5wACZNbBwwACZNcAAYbbAAJk1sHfAAJk1sHXAAJk1sHTAAJk1sHLAAJk1wABhwMAAmTWwtMAAmTWGGMAAmTWGFMAAmTWGHcAAmTWws8AAmTXAAGHDwACZNcAAYcTAAJk1sLLAAJk1sLHAAJk1wABhz8AAmTWwsMAAmTWwr8AAmTWwrsAAmTWwrMAAmTWwq8AAmTWwosAAmTWF9cAAmTWwqMAAmTWGRsAAmTWwp8AAmTWwpsAAmTWwpcAAmTWGWcAAmTWGI8AAmTWwpMAAmTWwocAAmTWwn8AAmTWwnMAAmTWwm8AAmTWwmsAAmTWwmcAAmTWwmMAAmTXAAGHbwACZNbCXwACZNbCWwACZNbCVwACZNbCUwACZNbCTwACZNYZXwACZNbCSwACZNbCRwACZNbCQwACZNbCPwACZNbCOwACZNbCMwACZNbCKwACZNbCJwACZNbCIwACZNbCHwACZNbCGwACZNYXBwACZNYZewACZNbCDwACZNbCCwACZNbCBwACZNbB/wACZNbB+wACZNbB9wACZNbB7wACZNbB8wACZMJidwACZhADAAJKqwABh6cAAmYaYmcAAmYfAAGHqwACZh8AAYaDAAJmHgO7AAJmGmJfAAJmLwABhrcAAmYuaj8AAmYvAAEaCwACZi8AAYFLAAJmGmJ3AAJmQAMAAkqrAAGHrwACZkpiXwACZk8AAYezAAJmTwABh7cAAmZPAAGHuwACZk8AAYfHAAJmTwABh8sAAmZOwtMAAmZOwcMAAmZOwcsAAmZOwdMAAmZOwdcAAmZOwd8AAmZOwecAAmZOwe8AAmZOwfMAAmZOwfcAAmZOwfsAAmZOwf8AAmZOwgcAAmZOwgsAAmZOGXsAAmZOwg8AAmZOFwcAAmZOwhsAAmZOwh8AAmZOwiMAAmZOwicAAmZOwisAAmZOwjMAAmZOwjsAAmZOwj8AAmZOwkMAAmZOwkcAAmZOwksAAmZOGV8AAmZOwk8AAmZOwlMAAmZOwlcAAmZOwlsAAmZOwl8AAmZOwmMAAmZOwmcAAmZOwmsAAmZOwm8AAmZOwnMAAmZOwn8AAmZOwocAAmZOwosAAmZOwpMAAmZOGI8AAmZOGWcAAmZOwpcAAmZOwpsAAmZOwp8AAmZOGRsAAmZOwqMAAmZOF9cAAmZOwq8AAmZOwrMAAmZOwrsAAmZOwr8AAmZOwsMAAmZOwscAAmZOwssAAmZOws8AAmZOGHcAAmZOGFMAAmZOGGMAAmZKYncAAmdcAAMAAkcnAAJnZmJfAAJnawABdC8AAmdnAAGH4wACZ3JiZwACZ3cAAkGDAAJneg9nAAJneg9rAAJneg9vAAJncmJrAAJnig93AAJnig97AAJncmJvAAJnlg97AAJncmJfAAJnng9/AAJnng+DAAJnng+HAAJncmJ3AAJnrAMAAmdnAAGH5wACZ7ZiZwACZ7oPkwACZ7oPlwACZ7ZiXwACZ8YPmwACZ8YPpwACZ8VbAAJnxg+3AAJnxg/DAAJnxg/TAAJnxg/bAAJnxg/LAAJnxg/HAAJnxg/vAAJntmJ3AAJn8AMAAmdnAAGH6wACZ/piZwACZ/4PkwACZ/piXwACaAcAAYfvAAJoBwABGgsAAmgGGXsAAmgGwl8AAmgGwiMAAmgHAAEaMwACZ/pidwACaCADAAJnZwABh/MAAmgqYl8AAmguBxcAAmgqYncAAmg0AAMAAkcrAAJoPmJnAAJoQwABiOcAAmhDAAGI7wACaEMAAYj3AAJoQwABiP8AAmhDAAGJBwACaEMAAYkLAAJoQwABiQ8AAmhDAAGJFwACaEMAAYkfAAJoQwABiScAAmhDAAGJLwACaEMAAYkzAAJoQwABiTsAAmhDAAGJQwACaEMAAYlLAAJoQwABiU8AAmhDAAGJVwACaEMAAYlfAAJoQwABiWcAAmhDAAGJbwACaEMAAYl3AAJoQwABiX8AAmhDAAGJhwACaEMAAYmPAAJoQwABiZcAAmhDAAGJnwACaEMAAYmnAAJoQwABia8AAmhDAAGJswACaEMAAYm3AAJoQwABibsAAmg+y7cAAmjCYmcAAmjEnwACaMcAAkcrAAJozKMAAmjEpwACaMcAAYgDAAJoxwABiAcAAmjHAAGICwACaMcAAYgPAAJoxwABiBMAAmjHAAGIFwACaMcAAYgbAAJoxwABiB8AAmjHAAGIIwACaMcAAYgnAAJoxwABiCsAAmjHAAGILwACaMcAAYgzAAJoxwABiDcAAmjHAAGIOwACaMcAAYg/AAJoxwABiEMAAmjHAAGIRwACaMcAAYhLAAJoxwABiE8AAmjHAAGIUwACaMcAAYhXAAJoxwABiFsAAmjHAAGIXwACaMcAAYhjAAJoxwABiGcAAmjHAAGIawACaMcAAYhvAAJoxwABiHMAAmjHAAGIdwACaMcAAYh7AAJoxwABiH8AAmjHAAGIgwACaMcAAYiHAAJoxwABiIsAAmjHAAGIjwACaMcAAYiTAAJoxwABiJcAAmjHAAGImwACaMcAAYifAAJowmJfAAJpeI8AAmjCYncAAmmAAwACaD7LuwACaYpiZwACaYyfAAJpjwACRysAAmmUowACaYynAAJpjwABiKMAAmmPAAGIpwACaY8AAYirAAJpjuZzAAJpjwABiK8AAmmPAAGIswACaY8AAYi3AAJpjwABiLsAAmmPAAGIvwACaY8AAYjDAAJpjqmjAAJpjwABiMcAAmmPAAFcowACaY4aewACaYpiXwACadiPAAJpimJ3AAJp4AMAAmg/AAGIywACaepiZwACae8AAYjPAAJp7wABiNcAAmnvAAGI3wACaepidwACafwAAwACRy8AAmoHAAGJwwACagpiZwACag8AAYnHAAJqDnsDAAJqCmJfAAJqGo67AAJqGsI/AAJqGwABgUsAAmoKYncAAmorAAJHLwACai4C1wACagcAAYnLAAJqNmJnAAJqOtErAAJqNmJfAAJqQmo/AAJqQsKHAAJqQsKTAAJqQsJzAAJqQsJvAAJqQsJjAAJqQsJfAAJqQhfXAAJqQsJnAAJqQsJbAAJqQsJTAAJqQsJXAAJqQsJHAAJqNmJ3AAJqeAMAAmoHAAGJzwACaoJiXwACaocAASirAAJqhwABidMAAmqGfX8AAmqGaj8AAmqHAAEaCwACaocAAYFHAAJqhsHnAAJqhsHTAAJqhsILAAJqhsIHAAJqhsH/AAJqhsH7AAJqhsJzAAJqhsJjAAJqhsJnAAJqhsJfAAJqhhfXAAJqhsJbAAJqhsJTAAJqhsJHAAJqhwACRy8AAmrbAAGJ1wACaoJidwACauAAAwACRzMAAmrqYl8AAmrvAAGJ/wACausAAYnbAAJq9mJnAAJq+J8AAmr7AAJHMwACawCjAAJq+KcAAmr6eKsAAmr6VpsAAmr6D7MAAmr2Yl8AAmsYjwACavZidwACayADAAJq6wABid8AAmsqYmcAAmsuCZ8AAmsvAAE4fwACay4V/wACay4WCwACay8AATiDAAJrLH8AAmsvAAEp4wACaypiawACa08AATiLAAJrKmJfAAJrVI8AAmsqYncAAmtcAAMAAkc0AwACRzsAAmtqYl8AAmtvAAGKNwACa28AAR+3AAJrbwABDJgDAAJHPwACa38AAQ/rAAJrgmJrAAJrhYcAAmuCYl8AAmuOCiMAAmuOwb8AAmuO23cAAmuOIRMAAmuOvOsAAmuOwyMAAmuOvO8AAmuOBucAAmuOwnsAAmuOvOMAAmuOz58AAmuOvvcAAmuO3J8AAmuCYncAAmvEAwACa38AARXPAAJrzmJfAAJr0rzvAAJr0sJ7AAJr0rzjAAJr0s+fAAJr0iETAAJr0tt3AAJrzmJ3AAJr7AMAAmt/AAEVMwACa/ZiZwACa/sAAkc/AAJr/wABilcAAmv/AAEVNwACa/ZiXwACbAoKKwACa/ZidwACbBADAAJrfwABEUMAAmwaYmcAAmwfAAJHPwACbCMAARFXAAJsIwABEVsAAmwjAAERZwACbBpiXwACbDLBvwACbDK+9wACbDK86wACbDLcnwACbDIG5wACbDLDIwACbDMAAkc/AAJsTwABEe8AAmxPAAERqwACbE8AARMrAAJsTwABEycAAmxPAAERrwACbE8AARHjAAJsGmJ3AAJsaAMAAmt+G7cAAmxyYmcAAmx2EO8AAmx3AAJHPwACbH8AARSbAAJsfnPvAAJscmJfAAJsiwACRz8AAmyPAAETKwACbI8AARMnAAJsjwABEa8AAmyPAAER4wACbIoKIwACbHJiawACbKWHAAJscmJ3AAJsrAMAAmt+YIsAAmy2YmcAAmy6YI8AAmy6YJMAAmy6YJcAAmy7AAJHPwACbMpc8wACbMpgmwACbMpgowACbMpgpwACbLmHAAJsumCfAAJstmJrAAJs5g1zAAJstmJfAAJs7l8/AAJs7l03AAJs7l0/AAJs7l1DAAJs7l07AAJs7hEHAAJs7l0zAAJstmJ3AAJtDAADAAJHQwACbRcAARBfAAJtGmJfAAJtHsLrAAJtHsLjAAJtHry/AAJtHrzPAAJtHsMLAAJtHrzXAAJtHr7zAAJtHsLnAAJtHrzHAAJtHs+DAAJtHr7nAAJtHtyXAAJtGmJ3AAJtUAMAAm0XAAEVxwACbVpiXwACbV7C4wACbV68vwACbV681wACbV7C5wACbV68xwACbV7PgwACbVpidwACbXgDAAJtFwABFUMAAm2CYmcAAm2HAAJHQwACbYsAAYpbAAJtiwABFTcAAm2LAAGKXwACbYJiXwACbZp52wACbYJidwACbaADAAJtFwABE0sAAm2qYmcAAm2vAAJHQwACbbMAARFXAAJtswABEVsAAm2zAAERZwACbapiXwACbcLC6wACbcK+5wACbcLclwACbcMAAkdDAAJt0wABE28AAm3TAAET5wACbdMAARQPAAJt0wABE3MAAm3TAAEUBwACbdMAARPfAAJtwrzPAAJtwr7zAAJtwsMLAAJtqmJ3AAJt+AMAAm0WG/sAAm4CYmcAAm4HAAJHQwACbgphSwACbgphRwACbgJiXwACbhcAAkdDAAJuGwABFKMAAm4bAAEUDwACbhsAARNzAAJuGwABFAcAAm4bAAET3wACbgJidwACbjAAAwACR0cAAm47AAGKZwACbj5iZwACbkMAAWNjAAJuQuCzAAJuPmJfAAJuTwABY2cAAm5PAAFjRwACbk8AAWNvAAJuPmJ3AAJuXAMAAm47AAGKawACbmZiZwACbmsAAkdHAAJubwABZhMAAm5vAAGKbwACbm8AAYpzAAJubwABincAAm5vAAGKewACbm8AAYp/AAJubwABioMAAm5vAAGKhwACbm8AAYqLAAJubwABio8AAm5vAAGKkwACbm8AAYqXAAJubwABipsAAm5mYmsAAm6nAAJHRwACbqsAAYqfAAJuqwABiqMAAm5mYl8AAm63AAFjMwACbrZfVwACbrcAARoLAAJutwABOGcAAm63AAGKrwACbrcAAYq7AAJutwABir8AAm62FosAAm62GQsAAm62GScAAm62Fe8AAm62FfcAAm63AAJHRwACbusAAYrXAAJu6wABis8AAm7rAAGK3wACbusAAYrbAAJu6wABixMAAm7rAAGLBwACbusAAYrjAAJuthlfAAJuthfHAAJuthpnAAJuthjHAAJuthifAAJuthinAAJuthi3AAJuthajAAJuthZjAAJuthZbAAJutwABiusAAm62FFMAAm62FGsAAm62FOMAAm62GA8AAm62GWcAAm62GdMAAm62GeMAAm62GccAAm62GdsAAm62GfMAAm62GgsAAm62Gj8AAm62Gk8AAm63AAGK0wACbrcAAYrnAAJuthe/AAJuthdrAAJuthd7AAJuthgDAAJuthk/AAJuthg7AAJuthhHAAJuthWDAAJuthffAAJuthfnAAJuthfvAAJuthf3AAJutherAAJutheHAAJuthePAAJuthebAAJuthe3AAJuthejAAJuthcHAAJuthZrAAJuthZzAAJutharAAJuthazAAJuthb3AAJuthabAAJuthYjAAJuthYrAAJuthYzAAJuthY7AAJuthbPAAJuthbjAAJuthgnAAJuthgvAAJuthkbAAJuthbDAAJuthfXAAJuthfPAAJuthhjAAJuthiHAAJuthj/AAJuthh3AAJuthhTAAJuthjTAAJuthjnAAJuthjvAAJuthiXAAJuthiPAAJuthUnAAJuthU/AAJuthUvAAJuthU3AAJuthVLAAJuthj3AAJuthgbAAJuZmJ3AAJwSAMAAm47AAGLFwACcFJiZwACcFSfAAJwVwACR0cAAnBcowACcFSnAAJwVhgXAAJwVwABix8AAnBXAAGLIwACcFJiXwACcHSPAAJwUmJ3AAJwfAMAAm47AAGLJwACcIZiZwACcIoTTwACcIoSFwACcIZiXwACcJYcdwACcJcAAYsPAAJwlI8AAnCGYmsAAnCm428AAnCnAAE1EwACcKcAATUnAAJwptK/AAJwhmJ3AAJwuhgXAAJwuwABiysAAnC7AAGLLAMAAkdLAAJwymJfAAJwzwABi08AAnDPAAGLWwACcM8AAYtfAAJwzwABi2MAAnDO/T8AAnDPAAGLawACcM8AAYtvAAJwzwABi3MAAnDLAAGLPwACcPJiZwACcPcAAYtDAAJw9gmvAAJw8mJrAAJxAhX/AAJxAhFLAAJxAmf3AAJw8mJfAAJxEI8AAnDyYncAAnEYAwACcMsAAYtHAAJxImJfAAJxJmo/AAJxJhzPAAJxJhozAAJxJhpPAAJxJhoLAAJxJhnzAAJxJhnjAAJxJhnbAAJxJhnTAAJxJhnHAAJxJl93AAJxImJ3AAJxVAADAAJHTwACcV8AAYt3AAJxYmJnAAJxZg+fAAJxZwACR08AAnFvAAGLfwACcW8AAYuDAAJxYmJzAAJxerxXAAJxYmJfAAJxgrxbAAJxgS8AAnGDAAFOiwACcWJidwACcZAAAwACR1MAAnGaYl8AAnGfAAGOLwACcZ8AAkdTAAJxpwABjjcAAnGbAAGLlwACca5iZwACcbKDrwACcbMAAkdTAAJxuwABi5sAAnG7AAGLowACcbIKQwACcbIJTwACcbMAAT9LAAJxswABPuMAAnGy3jsAAnGzAAE8RwACcbMAAYufAAJxsg8HAAJxswABi6cAAnGuYmsAAnHrAAGLtwACcesAAT5bAAJx6wABi7sAAnHrAAGA0wACceqjmwACca5iXwACcgMAAYu/AAJyAwABP28AAnIC5iMAAnIDAAGLwwACcgMAAT5fAAJyAwABP18AAnIDAAE+iwACcgMAAQPTAAJyAwABi8cAAnIDAAE+qwACcgIJCwACcgJzQwACcgIRNwACcgMAAT9TAAJyAwABi8sAAnIDAAE/VwACcgMAAT6zAAJyAs5TAAJyAr9bAAJyAwACR1MAAnJTAAGLzwACca5idwACclgDAAJyWwABi6sAAnJbAAGLrwACclsAAYuzAAJxmwABi9MAAnJuYmcAAnJzAAE+uwACcm5idwACcngDAAJxmwABi9cAAnKCYl8AAnKGETcAAnKHAAED0wACcoSPAAJygmJ3AAJylAMAAnGbAAGL5wACcp5iZwACcqMAAT5bAAJynmJfAAJyqhFnAAJyqVsAAnKqIQcAAnKqBpcAAnKqDF8AAnKojwACcp5iawACcsVzAAJynmJ3AAJyzAMAAnGbAAGL6wACctZiZwACctsAAYvvAAJy1mJfAAJy4wABPucAAnLWYmsAAnLqjyMAAnLWYncAAnLzAAJHUwACcvYZbwACcvcAAYvzAAJxmwABi/cAAnMCYmcAAnMHAAE+uwACcwJidwACcw8AAkdTAAJzEhlvAAJzEwABi/MAAnGbAAGL+wACcx5iZwACcyMAAkdTAAJzJwABSKsAAnMnAAFVywACcycAAYv/AAJzIwABP2MAAnMeYmsAAnM6CZsAAnM6jyMAAnM7AAE/fwACczsAAYwXAAJzOwABi58AAnMeYl8AAnNTAAGMAwACc1MAAYwHAAJzUtqfAAJzUwACR1MAAnNjAAGMDwACc2MAAYwfAAJzYwABjCcAAnNTAAE8gwACc1MAAYwbAAJzUwABjCMAAnNTAAED0wACc1MAAYvHAAJzUI8AAnNSETcAAnNSzlMAAnNTAAE+5wACcx5idwACc5cAAkdTAAJzmhlvAAJxmwABjC8AAnOiYmcAAnOnAAJHUwACc6pIswACc6JiawACc7MAAkdTAAJztwABjDMAAnOiYl8AAnO/AAGMGwACc78AAkdTAAJzxwABjCcAAnO/AAE/UwACc6JidwACc9ADAAJxmwABjDcAAnPaYmcAAnPfAAJHUwACc+JIswACc9piawACc+sAAkdTAAJz7wABjDsAAnPaYl8AAnP3AAGMGwACc/cAAkdTAAJz/wABjCcAAnPaYncAAnQEAwACcZsAAYw/AAJ0DmJrAAJ0EwACR1MAAnQXAAGMQwACdA5iXwACdB8AAYwbAAJ0HwACR1MAAnQnAAGMJwACdA5idwACdCwDAAJxmwABjEcAAnQ2Y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wABjXsAAnhSYmcAAnhWa2cAAnhXAAE+UwACeFJiXwACeGCPAAJ4YhE3AAJ4YwABA9MAAnhjAAGLxwACeGMAAT9TAAJ4Ys5TAAJ4UmJ3AAJ4fAMAAnGbAAGNhwACeIZiXwACeIiPAAJ4ihE3AAJ4hmJ3AAJ4lAMAAnGbAAGNkwACeJ5iZwACeKMAAT5PAAJ4owABPkcAAnijAAJHUwACeK8AAY1PAAJ4nmJrAAJ4twABjVMAAnieYl8AAni/AAGNVwACeJ5idwACeMQDAAJ4xwABi6sAAnjHAAGLrwACeMcAAYuzAAJxmwABjZcAAnjaYmcAAnjfAAE+ewACeN4XMwACeN4XNwACeN8AAT5TAAJ43wACR1MAAnjzAAGNmwACeNpiawACePsAAY2fAAJ42mJfAAJ5AwABPmcAAnkDAAE+cwACeQMAAT53AAJ5AwABPl8AAnkCETcAAnkDAAGNuwACeQMAAQPTAAJ5AwABi8cAAnkDAAE/UwACeQLOUwACeQCPAAJ42mJ3AAJ5MAMAAnGbAAGNzwACeTpiXwACeT4RNwACeTyPAAJ5OmJ3AAJ5SAMAAnGbAAGN2wACeVJiZwACeVcAAY2jAAJ5UmJfAAJ5XhE3AAJ5XwABA9MAAnlcjwACeVJidwACeWwDAAJxmwABjecAAnl2YmcAAnl7AAGN6wACeXoJswACeXsAAY3vAAJ5dmJfAAJ5iwABA9MAAnmIjwACeYsAAkdTAAJ5lwABi88AAnmKETcAAnl2YncAAnmgAwACcZsAAY3/AAJ5qmJnAAJ5rwABPrsAAnmqYncAAnm0AwACebcAAYurAAJ5twABi68AAnm3AAGLswACcZsAAY4DAAJ5ymJnAAJ5zwACR1MAAnnSXGMAAnnKYmsAAnna0T8AAnnajyMAAnnKYl8AAnnnAAED0wACeecAAYvHAAJ55I8AAnnmETcAAnnnAAE/UwACeecAAT7nAAJ5ymJ3AAJ6AAMAAnGbAAGODwACegpiZwACeg8AAT5PAAJ6DwABPkcAAnoPAAJHUwACehsAAY1PAAJ6CmJrAAJ6IwABjVMAAnoKYl8AAnorAAGNVwACegpidwACejADAAJxmwABjhMAAno6YmcAAno/AAJHUwACekMAAY4XAAJ6OmJfAAJ6SwABA9MAAnpIjwACekoRNwACejpiawACelqPIwACejpidwACemADAAJxmwABjh8AAnpqYmcAAnpvAAJHUwACenMAAY4XAAJ6amJfAAJ6ewABA9MAAnp4jwACenoRNwACempiawACeoqPIwACempidwACepADAAJxmwABjisAAnqaYl8AAnqfAAGNPwACep8AAY37AAJ6nwABjXMAAnqfAAGNjwACep8AAY3TAAJ6nwABjd8AAnqfAAGNZwACep8AAY2DAAJ6nwABjbcAAnqfAAGNDwACep8AAY0bAAJ6nwABjSMAAnqfAAGNAwACep8AAYynAAJ6nwABjPMAAnqfAAGMKwACep8AAYxzAAJ6nwABjgsAAnqfAAGOGwACep8AAY4nAAJ6mmJ3AAJ68AADAAJHVwACevsAAY4/AAJ6/mJfAAJ7AhWzAAJ7AwABTosAAnr+YncAAnsMAAMAAkdbAAJ7FwABjkMAAnsaYmcAAnscnwACex8AAkdbAAJ7JKMAAnscpwACex4eNwACex58ZwACex4DtwACex6+1wACexpiXwACe0CPAAJ7GmJ3AAJ7SAMAAnsWeaMAAntSYmcAAntWEIcAAntSYmsAAntfAAJHWwACe2LWqwACe2MAAU4rAAJ7UmJfAAJ7bwABVNMAAntvAAJHWwACe3cAAY5HAAJ7dwABjksAAnt3AAGOTwACe3cAAY5vAAJ7bwABUEcAAntvAAFO6wACe28AAU77AAJ7bwABTwcAAntvAAFXIwACe28AAVVzAAJ7br7vAAJ7bwABVX8AAntvAAFPdwACe28AAU9LAAJ7bwABUbsAAntvAAGOhwACe1JidwACe7gDAAJ7FwABjpMAAnvCYmcAAnvGCa8AAnvHAAFoFwACe8JidwACe9AAAwACR18AAnvbAAGOlwACe95iZwACe+MAAkdfAAJ75sfLAAJ75tarAAJ75wABjpsAAnvnAAFFBwACe+cAAY6fAAJ75wABjqMAAnvnAAFOHwACe+cAARFTAAJ75wABjqcAAnvnAAGOqwACe+cAAY6vAAJ75wABjrMAAnvnAAGOtwACe+cAAY67AAJ75wABjr8AAnvnAAFN9wACe+cAAYqHAAJ75wABjsMAAnvnAAGOxwACe+cAAY7LAAJ75wABjs8AAnvmE4MAAnveYmsAAnxDAAJHXwACfEcAAY7XAAJ8RwABjt8AAnxHAAGO4wACfEbeZwACfEcAAU3LAAJ8QwABPcsAAnxCEwsAAnveYm8AAnxnAAJHXwACfGsAAY7XAAJ73mJfAAJ8cwACR18AAnx3AAGO5wACfHcAAU6DAAJ8dwABjvMAAnx3AAGO9wACfHcAAY/zAAJ8dwABj08AAnx3AAGPWwACfHcAAY9XAAJ8dwABkBcAAnx3AAGQHwACfHcAAZAnAAJ8dwABkEMAAnx3AAGP5wACfHIKbwACfHMAAY8DAAJ8cwABPbcAAnxyaj8AAnxyHM8AAnxzAAE5+wACfHIUawACfHIVJwACfHIVLwACfHIVNwACfHIVPwACfHMAAY8TAAJ8chWDAAJ8chbDAAJ8cwABjycAAnxyX38AAnxyX58AAnxyF6sAAnxzAAGPMwACfHIYYwACfHIYUwACfHIYdwACfHIYhwACfHIYlwACfHIYjwACfHIY0wACfHIY5wACfHIY7wACfHIX3wACfHMAAY97AAJ8chfnAAJ8cwABj5MAAnxyF+8AAnxzAAGPmwACfHIY/wACfHIXowACfHMAAY+zAAJ8chePAAJ8cwABj7sAAnxyF5sAAnxzAAGPwwACfHIXhwACfHMAAY/HAAJ8chcHAAJ8che3AAJ8cwABj88AAnxyF78AAnxzAAGP0wACfHIZXwACfHIV7wACfHIV9wACfHMAAY8bAAJ8chabAAJ8cwABj/sAAnxzAAGP/wACfHMAAY/vAAJ8chgnAAJ8chgvAAJ8chjHAAJ8cwABUL8AAnxyFrMAAnxzAAGPHwACfHMAAY/fAAJ8cwABkC8AAnxzAAGQMwACfHIWqwACfHIYOwACfHIWawACfHMAAZA7AAJ8chZzAAJ8cwABOHMAAnxyFiMAAnxyFjMAAnxyFisAAnxyF8cAAnxzAAGPPwACfHIY9wACfHIXawACfHIWzwACfHIW4wACfHIW9wACfHMAAZCXAAJ8chlnAAJ8chgPAAJ8chifAAJ8chinAAJ8chi3AAJ8chkLAAJ8chknAAJ8chkbAAJ8chfXAAJ8chfPAAJ8cwABkLMAAnxyFlsAAnxyFmMAAnxyFqMAAnxyF3sAAnxyGAMAAnxyGT8AAnxyGEcAAnxyFeMAAnxyGBsAAnveYncAAn5EAwACe9sAAZDDAAJ+TmJnAAJ+UhCHAAJ+UgmvAAJ+TmJfAAJ+Xl9fAAJ+XhqLAAJ+XhqXAAJ+XhqjAAJ+XhqvAAJ+Xhq/AAJ+X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ksAAZMfAAKCRmJfAAKClhx7AAKClwABkssAAoKWaj8AAoKXAAGTKwACgpcAAZMzAAKClwABkzcAAoKXAAGTJwACgpcAAZM7AAKClwABikMAAoKWEH8AAoKXAAGTXwACgpcAAZNrAAKClwABZMMAAoKXAAGNPwACgpcAAY37AAKClwABjXMAAoKXAAGNjwACgpcAAY3TAAKClwABjd8AAoKXAAGNZwACgpcAAY2DAAKClwABjbcAAoKXAAGNDwACgpcAAY0bAAKClwABjSMAAoKXAAGTtwACgpcAAY0DAAKClwABjKcAAoKXAAGM8wACgpcAAYwrAAKClwABjHMAAoKXAAGOCwACgpcAAY4bAAKClwABjicAAoJGYncAAoMgAAMAAkd/AAKDKwABk98AAoMuYl8AAoMzAAE/swACgzMAAT+nAAKDMsx3AAKDMwABP6MAAoMzAAE/nwACgzMAAT+bAAKDMwABP5cAAoMzAAE/kwACgzMAAT+PAAKDLmJ3AAKDWAMAAoMrAAGT4wACg2JiZwACg2cAAkd/AAKDatarAAKDawABk+cAAoNrAAEwewACg2aUbwACg2cAAT97AAKDZwABP3cAAoNm2y8AAoNnAAE+jwACg2cAAT6TAAKDZwABPpsAAoNnAAE9gwACg2cAAT9DAAKDZwABPzcAAoNnAAGT6wACg2cAAZPvAAKDZwABk/MAAoNnAAGT9wACg2cAAZP7AAKDZwABk/8AAoNnAAGUAwACg2cAAZQHAAKDZwABlAsAAoNnAAGUDwACg2cAAZQTAAKDZwABlBcAAoNnAAGUGwACg2cAAZQfAAKDZwABlCMAAoNnAAGUJwACg2cAAZQrAAKDZwABlC8AAoNnAAGUMwACg2cAAZQ3AAKDZwABlDsAAoNnAAGUPwACg2cAAZRDAAKDZwABjNMAAoNiYmsAAoQDAAE/WwAChAMAAZLDAAKEAwACR38AAoQPAAFOKwAChAKqtwAChAIVwwAChAIWFwAChALUtwAChALUswAChALUuwAChAIXlwAChAJrQwAChAIWlwAChAIU7wAChAKxPwAChALUvwAChALUrwAChALUqwAChAKx2wAChALUwwAChAKxowAChALUxwAChAIXAwAChAIWHwAChAJ5twAChALU0wAChALUzwAChALU1wACg2JiXwAChHcAAT8bAAKEdwABj8sAAoR3AAGPtwAChHcAAT4rAAKEdwABj/cAAoR3AAJHfwAChI8AAZRLAAKEjwABlFMAAoSPAAGUdwAChHcAAY/jAAKEdt+zAAKEdwABPIcAAoR3AAE8fwAChHcAATxzAAKEdwABj78AAoR3AAE+9wAChHbYYwAChHbYXwAChHbYWwAChHbYVwAChHa1vwAChHcAAY+PAAKEdwABPy8AAoR3AAGPlwAChHcAAY+rAAKEdwABj+sAAoR3AAGQkwAChHcAAY+DAAKEdwABklcAAoR3AAF/lwAChHcAAY+HAAKEdwABPJcAAoR3AAGM3wACg2JidwAChPwAAwACR4MAAoUHAAGUhwAChQpiZwAChQ8AAkX7AAKFEwABQ4cAAoUKYmsAAoUaBk8AAoUKYl8AAoUiD58AAoUicmsAAoUjAAFDmwAChSMAAUOfAAKFIwABQ3MAAoUhWwAChSMAAUOXAAKFCmJ3AAKFQAMAAoUHAAFDUwAChUpiZwAChU6TfwAChU4GTwAChUpiXwAChVsAAUN7AAKFWwABlIsAAoVbAAGUkwAChVsAAZSXAAKFWuMXAAKFSmJ3AAKFcAMAAoUHAAGUzwAChXpiZwAChX6TfwAChX7jKwAChXpiawAChYsAAkeDAAKFjwABTisAAoV6Yl8AAoWWaj8AAoWXAAGUpwAChZbiXwAChZcAAXw7AAKFluHbAAKFluHfAAKFluHjAAKFluHnAAKFluHrAAKFluHvAAKFluHzAAKFlsKzAAKFlhgfAAKFlsK7AAKFluH3AAKFluH7AAKFluH/AAKFluIDAAKFluILAAKFluIPAAKFluKbAAKFluIXAAKFluJzAAKFluJ3AAKFluIbAAKFluIfAAKFluIjAAKFluInAAKFlsLPAAKFlwABlRsAAoWW4isAAoWW4i8AAoWW4jMAAoWW4jcAAoWXAAGVmwAChZbiPwAChZbiOwAChZbiQwAChZbiRwAChZbiSwAChZbiTwAChZbiUwAChZbiEwAChZbiZwAChZbiawAChZbibwAChZbifwAChZbigwAChZbihwAChZYWzwAChZbijwAChZbiewAChZbikwAChZbinwAChZbCrwAChZbipwAChZbiqwAChZbirwAChZbiYwAChZbiiwAChZbiswAChZbitwAChZbiuwAChZbivwAChZbCnwAChZbCTwAChZYX1wAChZbiwwAChZbixwAChZbiowAChZbiBwAChZbCowAChZbiVwAChZbiWwAChZbiywAChZcAAkeDAAKGxwABlmMAAobHAAGWawAChZbizwAChZbi0wAChZbi1wAChZbilwAChZbi3wAChZbi4wAChZbi5wAChZbB8wAChZbi2wAChZbi6wAChZbi7wAChZbi8wAChZbi9wAChZbi+wAChZbi/wAChZbjAwAChZbjBwAChXpidwAChxQAAwACR4cAAocfAAGWvwAChyJiZwAChyYGvwAChycAAZbDAAKHJwABlscAAocnAAGWywAChycAAZbPAAKHJwABltMAAocnAAGW1wAChycAAZbbAAKHJwABlt8AAocnAAGW4wAChycAAZbnAAKHJwABlusAAocnAAGW7wAChycAAZbzAAKHJwABlvcAAocnAAGW+wAChyaMEwAChycAAZb/AAKHJwABlwMAAocnAAGXBwAChycAAZcLAAKHJwABlw8AAocnAAGXEwAChycAAZcXAAKHJwABlxsAAocnAAGXHwAChycAAZcjAAKHJwABlycAAocnAAGXKwAChycAAZcvAAKHJwABlzMAAocnAAGXNwAChycAAZc7AAKHJwABlz8AAocnAAGXQwAChycAAZdHAAKHJwABl0sAAocnAAGXTwAChycAAZdTAAKHJwABl1cAAocmg/8AAocnAAJHhwACh88AAZdbAAKHzwABl18AAofPAAGXYwACh88AAZdnAAKHzwABl2sAAofPAAGXbwACh88AAZdzAAKHzwABIdMAAofPAAGXdwACh88AAZd7AAKHzwABl38AAofPAAGXgwACh88AAZeHAAKHzwABl4sAAofPAAGXjwACh88AAZeTAAKHzwABl5cAAofPAAGXmwACh88AAZefAAKHzwABl6MAAofPAAGXpwACh88AAZerAAKHzwABl68AAofPAAGXswACh88AAUfbAAKHzwABl7cAAofPAAGXuwACh88AAZe/AAKHzwABl8MAAofPAAGXxwACh88AAZfLAAKHzwABl88AAofPAAGX0wACh88AAZfXAAKHzwABR9cAAofPAAGX2wACh88AAZffAAKHzwABl+MAAofPAAGX5wACh88AAZfrAAKHzvGrAAKHzwABl+8AAofPAAGX8wACh88AAZf3AAKHzwABl/sAAofPAAGX/wACh88AAZgDAAKHzwABmAcAAofPAAGYCwACh88AAZgPAAKHzwABR88AAofPAAGYEwACh88AAZgXAAKHzwABmBsAAofPAAFH0wACh88AAZgfAAKHzwABmCMAAofPAAGYJwACh88AAZgrAAKHzwABmC8AAofPAAGYMwACh88AAZg3AAKHzwABmDsAAofPAAGYPwACh88AAUfDAAKHzwABmEMAAofPAAGYRwACh88AAZhLAAKHzwABR8sAAofPAAGYTwACh88AAZhTAAKHzwABmFcAAociYl8AAojyWGcAAojzAAGYWwACiPMAAZhfAAKI8wABmGMAAociYncAAokHAAJHhwACiQoC1AMAAkeLAAKJEmJfAAKJFwABmNsAAokTAAFv6wACiR5iZwACiSMAAkeLAAKJJt5zAAKJJwABcCsAAokm1qsAAoknAAEPRwACiSbQEwACiSIL3wACiR5iawACiUMAAkeLAAKJRwABTOcAAokeYl8AAolPAAGYewACiU8AAZiPAAKJTwABmJcAAolPAAFx1wACiU8AAXHjAAKJTwABcecAAokeYncAAoloAAMAAkePAAKJcwABb+8AAol2YmcAAol7AAJHjwACiX7eewACiX7ecwACiX8AAXArAAKJftarAAKJft9rAAKJdmJrAAKJlwACR48AAombAAEPRwACiZrQEwACiZq9UwACiXZiXwACiasAAkePAAKJrwABmQ8AAomvAAGZIwACiasAAXJ3AAKJdmJ3AAKJvAADAAJHkwACiccAAW/zAAKJymJnAAKJzwACR5MAAonS0BMAAonTAAEPRwACidLebwACidLecwACidLeawACidMAAXArAAKJ0tarAAKJymJrAAKJ8wACR5MAAon3AAEfdwACifcAAUznAAKJymJfAAKKAwABcosAAooDAAJHkwACigsAAZnDAAKKCwABmdcAAooDAAFynwACigMAAXEbAAKJymJ3AAKKHAADAAJHlwACiicAAW/3AAKKKmJfAAKKLwABmjsAAooqYncAAoo0AAMAAkebAAKKPwABmk8AAopCYl8AAopHAAGaUwACikcAAZpXAAKKRwABmncAAopHAAGafwACikcAAZqTAAKKQmJ3AAKKXAADAAJHnwACimcAAW/7AAKKamJnAAKKbwABmr8AAopvAAJHnwACincAAQ9HAAKKdwABD0MAAop23nMAAop3AAFN0wACincAAXAzAAKKdwABH3cAAop3AAFM5wACincAAXArAAKKdtarAAKKdt9rAAKKamJrAAKKowACR58AAoqmvVMAAopqYl8AAoqvAAGawwACiq8AAZrHAAKKrwABcm8AAopqYncAAoq8AAMAAkejAAKKxmJjAAKKywABmxcAAorHAAGbHwACitJiZwACitYC9wACitYJrwACitJidwACiuADAAKKxwABmyMAAorqYmcAAorvAAGbJwACiu4TqwACiu610wACiupidwACivwDAAKKxwABcAMAAosGYmcAAosLAAFyHwACiwsAAkejAAKLEwABmysAAosGYl8AAosbAAGbLwACixsAAZszAAKLGwABmzcAAosbAAFyCwACiwZidwACiywDAAKKxwABb/8AAos2YmcAAos7AAJHowACiz7QEwACiz7PIwACiz7ecwACiz8AAXAvAAKLPwABTdMAAos/AAGbQwACizq8FwACizZiXwACi18AAXH/AAKLXwACR6MAAotnAAGbUwACi2cAAZtjAAKLZwABm18AAotnAAGbVwACizZidwACi3gDAAKKxwABm28AAouCYmcAAouHAAJHowACi4rQEwACi4rPIwACi4JiXwACi5cAAZtLAAKLlmo/AAKLlhzPAAKLltAXAAKLlhnTAAKLlhozAAKLlhnzAAKLlhoLAAKLltArAAKLltAvAAKLlhnbAAKLgmJ3AAKLxAADAAJHpwACi88AAU2bAAKL0mJnAAKL1h43AAKL1wABm3cAAovXAAGbewACi9cAAkenAAKL5wABm38AAovnAAGbgwACi+cAAZuHAAKL0mJrAAKL9wABUCMAAov3AAFQQwACi/cAAVA/AAKL0mJ3AAKMBwACR6cAAowKAtQDAAJHqwACjBMAAZuLAAKMFmJnAAKMGwABm48AAowbAAFRbwACjBZiXwACjCaOBwACjCbrawACjBZidwACjDADAAKMEwABm5MAAow6YmcAAow+CRcAAow6YnMAAoxEAwACjDpiXwACjE8AAVHXAAKMTwABUdMAAoxPAAFRmwACjE8AAVFrAAKMTwABm5cAAoxPAAFRlwACjE4KIwACjDpiawACjG5kywACjBMAAZubAAKMdmJnAAKMepM3AAKMdmJfAAKMgwABUdcAAoyDAAFR0wACjIMAAVGbAAKMgwABUWsAAoyCCiMAAoyDAAGblwACjIMAAVGXAAKMdmJrAAKMomTLAAKMogkXAAKMdmJ3AAKMrAMAAowTAAGbpwACjLZiZwACjLoQhwACjLoJFwACjLsAAZurAAKMtmJrAAKMywACR6sAAozPAAFOKwACjMpkywACjLZiXwACjNsAAVHXAAKM2wABUdMAAozbAAFRmwACjNsAAVFrAAKM2wABm5cAAozbAAFRlwACjNoKIwACjLZidwACjPgDAAKMEwABm7MAAo0CYmcAAo0HAAFXLwACjQJiXwACjQ8AAVHXAAKNDwABm7cAAo0PAAFR0wACjQ4KIwACjQJidwACjSAAAwACR68AAo0rAAGbuwACjS5iZwACjTIQhwACjTIF2wACjS5iawACjT8AAkevAAKNQwABTisAAo0uYl8AAo1KX1cAAo1KX38AAo1KFwcAAo1LAAGTKwACjUsAAZvDAAKNSur7AAKNLmJ3AAKNZAADAAJHswACjW8AAZInAAKNcmJnAAKNdwABTx8AAo13AAGbxwACjXYQhwACjXcAAU/nAAKNdwABm8sAAo13AAEyDwACjXbOdwACjXbGuwACjXcAAkezAAKNmwABH3cAAo2bAAFM5wACjXcAAZvPAAKNdwABm9MAAo13AAGb1wACjXJiawACjbMAAkezAAKNttarAAKNtwABTisAAo220H8AAo1yYl8AAo3HAAFPQwACjccAAZvbAAKNxwABm+MAAo3GG+sAAo3HAAGb7wACjccAARaLAAKNxwABnBMAAo3HAAGb3wACjccAAU9jAAKNxwACR7MAAo3vAAGcGwACjccAARC7AAKNxwABTucAAo3HAAGcMwACjccAAU8bAAKNxwABT4MAAo3HAAFRNwACjccAAVE/AAKNxwABUVMAAo3HAAGcRwACjccAAVGPAAKNxwABnE8AAo3HAAFRcwACjccAAZwLAAKNxwABnCcAAo3HAAFQ0wACjXJidwACjjADAAKOMli7AAKNbwABnGcAAo4+YmcAAo5CAvcAAo5DAAEyDwACjkLOdwACjkIPBwACjkMAAkezAAKOVwABnGsAAo4+Yl8AAo5cjwACjj5idwACjmQAAwACR7cAAo5vAAGccwACjnJiZwACjnYQhwACjnJiawACjn8AAke3AAKOgwABTisAAo5yYl8AAo6LAAFQvwACjosAAVE/AAKOiwABUY8AAo6LAAGckwACjosAAVHLAAKOcmJ3AAKOoAMAAo5vAAGcqwACjqpiZwACjq4QhwACjqpiXwACjrcAAVHLAAKOtwABnJMAAo6qYncAAo7AAwACjm8AAZyvAAKOymJfAAKOzl9XAAKOzhifAAKOzhi3AAKOzhinAAKOzhjHAAKOzhjTAAKOymJ3AAKO6AADAAJHuwACjvMAAZyzAAKO9mJnAAKO+wABUaMAAo76Z/8AAo77AAGctwACjvsAAZy7AAKO+pB7AAKO9mJ3AAKPEAMAAo7zAAGcvwACjxpiZwACjx4QhwACjx8AAZzDAAKPGmJrAAKPKwACR7sAAo8vAAFOKwACjxpiXwACjzcAAZzHAAKPNwABULMAAo83AAGc2wACjzcAAZzTAAKPNwABnO8AAo83AAFRpwACjzcAAVJPAAKPNwABnP8AAo83AAFSXwACjzcAAke7AAKPXwABnPsAAo8aYncAAo9kAAMAAke/AAKPbwABnSMAAo9yYl8AAo93AAGdJwACj3YY7wACj3YYYwACj3YYjwACj3YYpwACj3YYtwACj3YYxwACj3YY0wACj3YY5wACj3YY9wACj3YZCwACj3YYnwACj3YZGwACj3YZJwACj3YZZwACj3YVgwACj3ZfnwACj3ZfVwACj3JidwACj8MAAke/AAKPxgLUAwACR8MAAo/PAAGdPwACj9JiXwACj9cAATD3AAKP1nBPAAKP1wABPK8AAo/Wn2cAAo/XAAE0UwACj9ZwawACj9bMDwACj9cAATyzAAKP1smnAAKP1wABPKcAAo/XAAFbmwACj9bL/wACj9cAAVuLAAKP1wABXC8AAo/XAAEZwwACj9cAARkTAAKP1wABGbsAAo/XAAEZFwACj9cAATuLAAKP1swLAAKP0mJrAAKQKs0DAAKQKpM3AAKP0mJ3AAKQNAADAAJGQwACkD8AAZ1HAAKQQmJnAAKQRwACRkMAApBLAAGdSwACkEsAARVXAAKQQmJrAAKQVglbAAKQVt7vAAKQVYcAApBCYl8AApBnAAFa6wACkGbJbwACkGcAAVtDAAKQQmJ3AAKQdAMAApA/AAGdTwACkH5iZwACkIIPnwACkIIRDwACkIMAAkZDAAKQjwABnVcAApCPAAGdWwACkI8AAZ1fAAKQfmJzAAKQnrxXAAKQfmJfAAKQprxbAAKQppPrAAKQpsmXAAKQppPnAAKQpwABW3cAApCnAAFbSwACkH5idwACkMADAAKQPwABnWcAApDKYmcAApDOD58AApDOEQ8AApDOZd8AApDKYnMAApDevFcAApDKYl8AApDmvFsAApDKYncAApDsAwACkD8AAZ1vAAKQ9mJnAAKQ+J8AApD7AAJGQwACkQCjAAKQ+KcAApD6D7sAApD60T8AApD6pxcAApD2Yl8AApEYjwACkPZidwACkSADAAKQPwABnX8AApEqYnMAApEuvFcAApEqYl8AApE2vFsAApE3AAFbdwACkTcAAVtLAAKRNoWLAAKRNsvzAAKRNsxTAAKRKmJrAAKRUmcrAAKRUswHAAKRUsxbAAKQPwABnYcAApFiYmcAApFmD58AApFmZysAApFnAAJGQwACkXMAAZ2PAAKRcwABnVsAApFzAAGdXwACkXKc4wACkXMAAZ2TAAKRZsxbAAKRYmJzAAKRjrxXAAKRYmJfAAKRlrxbAAKRlwABW3cAApGXAAFbSwACkZaFiwACkZbL8wACkZcAAVznAAKRlsxTAAKRYmJrAAKRtswHAAKRYmJ3AAKRvAMAApA/AAGdlwACkcZiZwACkcoPnwACkcsAAkZDAAKR0wABnVsAApHGYnMAApHavFcAApHGYl8AApHivFsAApHizFMAApHiy/MAApHihYsAApHjAAFbSwACkeMAAVt3AAKRxmJrAAKR/swHAAKR/sxbAAKR/mcrAAKRxmJ3AAKSDAMAApA/AAGdnwACkhZiZwACkhoPnwACkhZicwACkiK8VwACkhZiXwACkiq8WwACkisAAVt3AAKSFmJ3AAKSNAMAApA/AAGdpwACkj5iZwACkkCfAAKSQwACRkMAApJIowACkkCnAAKSQg+7AAKSQtE/AAKSQqcXAAKSPmJfAAKSYI8AApI+YncAApJoAwACkD8AAZ2vAAKScmJzAAKSdrxXAAKScmJfAAKSfrxbAAKScmJrAAKShwABMS8AApKGEwsAApKGE+sAApKGE2sAApKGE28AApKGefcAApKHAAFZlwACkoa14wACkobMIwACkoYTvwACkD8AAZ23AAKSsmJnAAKStg+fAAKStmcrAAKStwABMS8AApK2E78AApK3AAGduwACkrYTCwACkrYT6wACkrYTawACkrYTbwACkrZ59wACkrcAAVmXAAKSsmJzAAKS5rxXAAKSsmJfAAKS7rxbAAKSsmJrAAKS9swjAAKS9rXjAAKSsmJ3AAKTAAMAApA/AAGdvwACkwpiZwACkwyfAAKTDwACRkMAApMUowACkwynAAKTDgmrAAKTDhJTAAKTDmNvAAKTDwABPRcAApMOtdMAApMPAAE9HwACkw8AAZ3bAAKTDwABPRsAApMKYl8AApNAjwACkwpidwACk0gDAAKQPwABnd8AApNSYmsAApNXAAExLwACk1cAAVnnAAKTVwABWc8AApNSYl8AApNm338AApNmvFsAApNSYnMAApNyvFcAApNSYncAApN4AwACkD8AAZ3nAAKTgmJnAAKThg+7AAKThwABMS8AApOHAAFZzwACk4JiXwACk5bffwACk4JidwACk5wDAAKQPwABnesAApOmYl8AApOqzA8AApOqzBMAApOqzHcAApOmYncAApO4AwACkD8AAZ3vAAKTwmJnAAKTxwACRkMAApPKpX8AApPCYmsAApPTAAEBjwACk8JiXwACk9rMEwACk8JidwACk+ADAAKQPwABnfMAApPqYmsAApPvAAEBjwACk+piXwACk/bMdwACk+pidwACk/wDAAKQPwABnfcAApQGYmcAApQLAAJGQwAClA6lfwAClAZiawAClBcAAQGPAAKUBmJfAAKUHswTAAKUBmJ3AAKUJAMAApA/AAGd+wAClC5iXwAClDLMEwAClDLMdwAClC5iawAClD8AAQGPAAKULmJ3AAKURAMAApA/AAGd/wAClE5iZwAClFIPnwAClFMAAQGPAAKUUwACRkMAApReSLMAApROYnMAApRmvFcAApROYl8AApRuvFsAApRuzA8AApRuzBMAApROYmsAApR/AAFZ5wAClE5idwAClIQDAAKQPwABngsAApSOYmcAApSSD58AApSTAAExLwAClJMAAVnLAAKUkwABWecAApSSEvsAApSOYnMAApSqvFcAApSOYl8AApSyvFsAApSyzA8AApSyzBMAApSyzHcAApSy338AApSOYmsAApTLAAFZzwAClI5idwAClNADAAKQPwABnhsAApTaYmcAApTfAAGeHwAClNpiXwAClObMDwAClObMEwAClObMdwAClObffwAClNpiawAClPsAAVnnAAKU2mJ3AAKVAAMAApA/AAGeIwAClQpiZwAClQ4PnwAClQ8AATEvAAKVCmJzAAKVGrxXAAKVCmJfAAKVIrxbAAKVCmJrAAKVKwABWc8AApUKYncAApUwAwACkD8AAZ4rAAKVOmJfAAKVPvJfAAKVOmJ3AAKVRAMAApA/AAGeLwAClU5iZwAClVIPnwAClVMAAkZDAAKVWwABnjcAApVTAAE9FwAClU5icwAClWa8VwAClU5iXwAClW68WwAClW7yXwAClW7MDwAClW7MEwAClU5iawAClYMAAVnnAAKVTmJ3AAKViAMAApA/AAGeRwAClZJiZwAClZYPnwAClZJicwAClZ68VwAClZJiXwAClaa8WwAClabMEwAClZJiawAClbMAAVnnAAKVkmJ3AAKVuAMAApA/AAGeTwAClcJiXwAClcbMGwAClccAAVoXAAKVwmJ3AAKV0AMAApA/AAGeUwACldpiZwACld4PnwACld8AAkZDAAKV5kizAAKV5wABnlsAApXaYnMAApXyvFcAApXaYl8AApX6vFsAApX6zBsAApX7AAFaFwACldpiawAClgoPuwAClgsAAVnnAAKV2mJ3AAKWFAMAApA/AAGeYwAClh5iZwACliIPnwACliIPuwACliIT6wAClh5icwACljK8VwAClh5iXwACljq8WwAClh5idwAClkADAAKQPwABnmcAApZKYmcAApZOD58AApZOD7sAApZPAAJGQwACllsAARizAAKWWwABnmsAApZKYnMAApZmvFcAApZKYl8AApZuvFsAApZvAAFb/wAClm8AAVwHAAKWSmJ3AAKWfAADAAJHxwAClocAAZ5zAAKWimJnAAKWjg+fAAKWjwACR8cAApaXAAGeewAClo4VtwAClopicwAClqK8VwAClqLOBwAClopiXwAClq68WwAClq8AAV0HAAKWrS8AApauD+MAApavAAEZEwAClqyPAAKWimJrAAKWym37AAKWywABno8AApbLAAFcMwAClssAAZ6rAAKWimJ3AAKW3lU/AAKWhwABnq8AApbmYl8AApbrAAFbrwACluZidwAClvADAAKWhwABnrMAApb6YmcAApb+Aq8AApb/AAFcMwAClv5nKwAClvpiXwAClw7L/wAClw8AARm7AAKXDwABO4sAApcPAAFcLwAClw8AAVuvAAKXDwACR8cAApcnAAGetwAClycAAZ7HAAKXDVsAApcPAAGeuwAClwyPAAKW+mJ3AAKXPAADAAJHywACl0cAAZ7bAAKXSmJ3AAKXTAMAApdHAAGe3wACl1ZiXwACl1sAAZ7jAAKXVmJ3AAKXYAMAApdHAAGe5wACl2pidwACl2wAAwACR88AApd3AAGe6wACl3piZwACl38AAkfPAAKXgwABFTcAApd+EwsAApd6Yl8AApeOFbMAApePAAFOiwACl48AAkfPAAKXmwABToMAApeOFe8AApeOFiMAApeOFjMAApeOFlsAApeOFpsAApeOFkMAApeOFqsAApeOFqMAApeOFrMAApeOFsMAApd6YncAApfIAAMAAkfTAAKX0wABnv8AApfWYmcAApfbAAJBgwACl94PZwACl94PawACl94PbwACl9ZiawACl+4PdwACl+4PewACl9ZibwACl/oPewACl9ZiXwACmAIPfwACmAIPgwACmAIPhwACl9ZidwACmBADAAKX0wABnwMAApgaYmcAApgeD5MAApgeD5cAApgaYl8AApgqD5sAApgqD6cAApgpWwACmCoPtwACmCoPwwACmCoP0wACmCoP2wACmCoPywACmCoPxwACmCoP7wACmBpidwACmFQDAAKX0wABh+sAApheYmcAAphiD5MAApheYl8AAphrAAGH7wACmGpfVwACmGoZewACmGoXjwACmGoV7wACmGoWawACmGoZXwACmGoZ8wACmGsAARozAAKYXmJ3AAKYkAADAAJH1wACmJsAAZ8LAAKYnmJnAAKYos5nAAKYowABnw8AApijAAGfEwACmJ5iXwACmLMAARmfAAKYsrErAAKYsqmjAAKYssv/AAKYswABGb8AApiy7/MAApizAAEZwwACmLMAARkTAAKYswABGbsAApizAAEZFwACmLMAARnHAAKYnmJrAAKY4s0DAAKYnmJ3AAKY6AMAApibAAGfFwACmPJiZwACmPbOZwACmPJiXwACmP7L/wACmP8AARm7AAKY/wABO4sAApj/AAFcLwACmPJidwACmRADAAKYmwABnxsAApkaYmsAApkezmcAApkezQMAApkaYl8AApkqzAsAApkrAAEZFwACmSsAARkTAAKZGmJ3AAKZOAMAApibAAGfHwACmUJiawACmUbOZwACmUbNAwACmUJiXwACmVLMCwACmVMAARkXAAKZUwABGRMAAplCYncAAplgAwACmJsAAZ8jAAKZamJnAAKZbs5nAAKZamJ3AAKZdAMAApibAAGfJwACmX5iawACmYLOZwACmYLNAwACmX5iXwACmY7MCwACmY8AARkXAAKZjwABGRMAApl+YncAApmcAwACmJsAAZ8rAAKZpmJnAAKZqs5nAAKZpmJ3AAKZsAADAAJH2wACmbsAAZ8vAAKZvmJfAAKZwheHAAKZwhcHAAKZvmJ3AAKZzAMAApm7AAGfMwACmdZiZwACmdsAATRbAAKZ2s5nAAKZ2wABnzcAApnbAAJH2wACmesAAZ87AAKZ1mJrAAKZ8wACR9sAApn20BMAApnWYl8AApn+aj8AApn+X38AApn/AAJH2wACmgsAAZ8/AAKaCwABn0MAApoLAAGfRwACmf4WswACmf4V7wACmf4WawACmf4XqwACmf4XowACmf4XjwACmf4XmwACmf4XhwACmf4XtwACmf4XBwACmf4X7wACmf4X5wACmf4X3wACmf4XvwACmf4XewACmf4WwwACmf4WzwACmf4W9wACmf4WIwACmf4WmwACmf4WqwACmf4W4wACmf4YJwACmf4YLwACmf8AAZ47AAKZ1mJ3AAKafAMAApm7AAGfUwACmoZiZwACmorOZwACmosAAZ9XAAKaipyXAAKahmJfAAKamiL7AAKamnu/AAKamhPzAAKamwABFQ8AApqaGk8AApqaGgsAApqaGfMAApqaGdsAApqaGdMAApqaGccAApqaGeMAApqGYncAAprIAwACmbsAAZ9bAAKa0mJnAAKa1s5nAAKa0mJfAAKa3l9fAAKa3htbAAKa3htPAAKa3htDAAKa3hsnAAKa3hsPAAKa3hr3AAKa3hsDAAKa3hrjAAKa3hrPAAKa3hq/AAKa3hqvAAKa3hqjAAKa3hqXAAKa3hqLAAKa0mJ3AAKbHAADAAJH3wACmyZiXwACmysAAZ//AAKbJwABn2sAApsyYmcAAps3AAJH3wACmzsAAZ1LAAKbOwABFVcAApsyYmsAAptGCVsAAptG3u8AAptFhwACmzJiXwACm1bgUwACm1cAAkffAAKbXwABn28AAptfAAGfcwACm1bJbwACm1cAAVtDAAKbViL7AAKbMmJ3AAKbdAMAApsnAAGfdwACm35iZwACm4IRDwACm4MAAkffAAKbiwABnVcAApuLAAGdWwACm4sAAZ1fAAKbfmJfAAKbmwACR98AApufAAGfewACm58AAZ9/AAKbmsmXAAKbmpPnAAKbmwABW3cAApubAAFbSwACm5oi+wACm35idwACm7wDAAKbJwABn4cAApvGYmcAApvKEQ8AApvLAAJH3wACm9MAAZ+LAAKbymXfAAKbxmJfAAKb3wABXKMAApvezDcAApveIvsAApvGYncAApvsAwACmycAAZ+PAAKb9mJrAAKb+mcrAAKb+swHAAKb+sxbAAKb9mJfAAKcCwABZh8AApwLAAFbdwACnAsAAVtLAAKcCoWLAAKcCsvzAAKcCsxTAAKcCiL7AAKb9mJ3AAKcKAMAApsnAAGfkwACnDJiZwACnDZnKwACnDcAAkffAAKcPwABnY8AApw/AAGdWwACnD8AAZ1fAAKcPpzjAAKcPwABXBMAApw/AAGdkwACnDJiawACnFrMBwACnFrMWwACnDJiXwACnGcAAkffAAKcawABn5cAApxrAAEVrwACnGcAAWYfAAKcZwABW3cAApxnAAFbSwACnGaFiwACnGbL8wACnGcAAVznAAKcZsxTAAKcZiL7AAKcMmJ3AAKclAMAApyWVT8AApsnAAGfxwACnKJiawACnKYPuwACnKYTCwACnKYT6wACnKYTawACnKYTbwACnKZ59wACnKcAAVmXAAKcprXjAAKcpswjAAKcphO/AAKcomJfAAKc0wABXKMAApzSIvsAApyiYncAApzcAwACmycAAZ/LAAKc5mJnAAKc6g+7AAKc6hO/AAKc6wABnbsAApzqEwsAApzqE+sAApzqE2sAApzqE28AApzqefcAApzrAAFZlwACnOsAAkffAAKdEwABn4sAApzmYmsAAp0azCMAAp0ateMAApzmYl8AAp0nAAFcowACnSYi+wACnOZidwACnTADAAKbJwABn88AAp06YmcAAp0/AAFZzwACnTpiawACnUYPuwACnUcAAVnnAAKdOmJfAAKdUwABXKMAAp1S338AAp1SIvsAAp06YncAAp1gAwACmycAAZ/TAAKdamJnAAKdbg+7AAKdbwACR98AAp13AAGfiwACnW8AAVnPAAKdamJfAAKdgwABXKMAAp2C338AAp1qYncAAp2MAwACmycAAZ/XAAKdlmJfAAKdmswPAAKdmswTAAKdmsx3AAKdlmJ3AAKdqAMAApsnA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aEvAAKp7mJfAAKqAwACR+8AAqoHAAEV5wACqgcAAaFLAAKqAwABfu8AAqoDAAF++wACqgMAAX6bAAKqAwABfvMAAqoDAAF+nwACqgMAAWhbAAKqAwABaGMAAqoDAAFoawACqgMAAWhzAAKqAwABaHsAAqoDAAFonwACqgMAAWinAAKqAwABaLsAAqoDAAFowwACqgMAAWjLAAKqAwABaNMAAqoDAAFo6wACqgMAAWkDAAKqAwABaRcAAqoDAAFpHwACqgMAAWknAAKqAwABaS8AAqoDAAFpOwACqgMAAWlDAAKqAwABaUsAAqoDAAFpWwACqgMAAWlTAAKqAwABaWcAAqoDAAFpbwACqgMAAWl7AAKqAwABaYMAAqoDAAFpiwACqgMAAWmTAAKqAwABoaMAAqoC9QMAAqoAjwACqe5idwACqqADAAKp6wABoa8AAqqqYmcAAqquD58AAqqvAAFJawACqqpiXwACqriPAAKqqmJ3AAKqwAADAAJH8wACqspiZwACqs8AAaIDAAKqzwABogcAAqrLAAGhswACqtpiZwACqt8AAaG3AAKq2mJfAAKq5gwfAAKq5wABCHcAAqraYncAAqrwAwACqssAAaG7AAKq+mJfAAKq/wABCHcAAqr6YncAAqsEAwACqssAAaG/AAKrDmJfAAKrEwABCHcAAqsOYncAAqsYAwACqssAAaHDAAKrImJfAAKrJwABCHcAAqsiYncAAqssAwACqssAAaHHAAKrNmJfAAKrOwABCHcAAqs2YncAAqtAAwACqssAAaHLAAKrSmJfAAKrTgwfAAKrSmJ3AAKrVAMAAqrLAAGhzwACq15iXwACq2IMHwACq15idwACq2gDAAKqywABodMAAqtyYl8AAqt2DB8AAqt3AAEIdwACq3JidwACq4ADAAKqywABodcAAquKYl8AAquPAAEIdwACq4pidwACq5QDAAKqywABodsAAqueYl8AAqujAAEIdwACq55idwACq6gDAAKqywABod8AAquyYl8AAqu2DB8AAqu3AAEIdwACq7JidwACq8ADAAKqywABoeMAAqvKYl8AAqvODB8AAqvPAAEIdwACq8pidwACq9gDAAKqywABoecAAqviYl8AAqvnAAEIdwACq+JidwACq+wDAAKqywABoesAAqv2Yl8AAqv7AAEIdwACq/ZidwACrAADA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rAKHM8AArAK8h8AArAK8isAArALAAGjgwACsAp7vwACsAriMwACsAryQwACsAoWwwACsAsAAaOTAAKwCwABo1MAArALAAGjTwACsAsAAkf7AAKwOwABo18AArA7AAGjWwACsAsAARcrAAKv1mJ3AAKwSAADAAJH/wACsFJiZwACsFcAAaf3AAKwVwABp/8AArBXAAGoBwACsFcAAaTvAAKwVwABqAsAArBXAAGoDwACsFMAAaOzAAKwcmJnAAKwdwACR/8AArB6x8sAArB6ksMAArB6kVcAArB632cAArB63nMAArB632MAArB7AAEPRwACsHsAAXOLAAKwewABo7cAArB61qsAArB7AAGjuwACsHrfawACsHcAAXOrAAKwdwABc6cAArB3AAGjvwACsHcAAaPHAAKwdwABo8sAArB3AAGj0wACsHJiXwACsMcAAaPbAAKwxwABD78AArDHAAEPuwACsMcAAXOjAAKwxwABD3cAArDHAAGkHwACsMcAAaQPAAKwxwABpEcAArDHAAGkFwACsMcAAaRDAAKwxwABpBsAArByYncAArD0AwACsFMAAaSrAAKw/mJnAAKxAwACR/8AArEGx8sAArEG32cAArEG3nMAArEHAAEPRwACsQcAAXOLAAKxBwABpK8AArEG1qsAArEHAAFwKwACsQcAAUe/AAKxBwABpLMAArEHAAGktwACsQcAAaS7AAKxBwABpL8AArD+YmsAArE/AAJH/wACsULvcwACsUK9UwACsT8AAaTDAAKxPwABpMcAArE/AAGkywACsP5iXwACsVq+pwACsVsAAXOjAAKxWhdLAAKxWtGXAAKxWwABo/cAArFbAAGlkwACsVsAAaQDAAKxWwABpN8AArFbAAGlGwACsVsAAaXTAAKxWwABpdcAArFbAAGlMwACsVsAAaYvAAKxWwABmI8AArFbAAGYlwACsVsAAaY3AAKxWwABpj8AArFbAAGlOwACsVsAAaVDAAKxWwACR/8AArGrAAGmewACsVsAAaavAAKxWoinAAKxWwABpUsAArFbAAGlTwACsVsAAaVTAAKxWwABpVsAArFbAAGnRwACsVsAAaQTAAKxWwABp5MAArFbAAGnmwACsVsAAaejAAKxWwABpWMAArFbAAGlawACsVsAAaVvAAKxWwABp7MAArFbAAGldwACsP5idwACsfADAAKwUwABp+MAArH6YmcAArH/AAJH/wACsgMAATB/AAKx+mJrAAKyCgVXAAKyCg7LAAKx+mJfAAKyFwABG8sAArIXAAGBYwACsfpidwACsiADAAKwUwABp+sAArIqYmcAArIvAAGlowACsi4YWwACsipidwACsjgDAAKwUwABp+8AArJCYmcAArJHAAGJWwACskcAAYljAAKyRwABiWsAArJCYncAArJUAwACsFMAAafzAAKyXmJnAAKyYwACR/8AArJmXDMAArJeYl8AArJvAAGnjwACsl5iawACsnYCWwACsna/TwACsl5idwACsoAAAwACSAMAArKKYmcAArKPAAGoEwACso5T2wACso8AAXnQAwACSAcAArKeYl8AArKjAAGpJwACsp8AAagXAAKyqmJrAAKyrgL3AAKyqmJfAAKytuPDAAKyqmJ3AAKyvAMAArKfAAGoGwACssZiZwACsssAAkgHAAKyztarAAKyzwABTOcAArLOx8sAArLKkHsAArLGYmsAArLjAAJIBwACsucAAU4rAAKyxmJfAAKy7uPDAAKy7uMXAAKy7uMvAAKy7uJXAAKy7uInAAKy7wABqB8AArLvAAJIBwACswsAAagjAAKy7uPfAAKy7uJLAAKy7uKLAAKy7wABqCcAArLu4g8AArLuws8AArLGYncAArMoAwACsp8AAahbAAKzMmJrAAKzNgL3AAKzMmJfAAKzPuPDAAKzMmJ3AAKzRAMAArKfAAGoXwACs05iXwACs1LjwwACs1LjFwACs1Li1wACs05idwACs2ADAAKynwABqGMAArNqYmsAArNuAvcAArNqYl8AArN248MAArNqYncAArN8AwACsp8AAahnAAKzhmJnAAKziwACSAcAArOOx8sAArOGYl8AArOW48MAArOW4xcAArOW4s8AArOW4tMAArOGYncAArOoAwACsp8AAahrAAKzsmJrAAKztgL3AAKzsmJfAAKzvuPDAAKzsmJ3AAKzxAMAArKfAAGobwACs85iZwACs9MAAkgHAAKz1tarAAKz1sfLAAKzzmJrAAKz4wACSAcAArPnAAFOKwACs85iXwACs+7jwwACs+7jFwACs+7jLwACs+7iDwACs+7iswACs+8AAahzAAKzzmJ3AAK0CAMAArKfAAGogwACtBJiawACtBYC9wACtBJiXwACtB7jwwACtBJidwACtCQDAAKynwABqIcAArQuYmcAArQzAAJIBwACtDcAAU4rAAK0MwABqIsAArQzAAGojwACtDMAAXp7AAK0LmJfAAK0SwABqJMAArRK48MAArRLAAGolwACtEsAAaibAAK0SwABqJ8AArRK4y8AArRK4ksAArRK4lcAArRK4fMAArRK4icAArRK4ssAArRK4u8AArRK4vMAArRK4wMAArRK4s8AArRK4tcAArRLAAGoqwACtEsAAaivAAK0SuMXAAK0SwABqLMAArQuYncAArScAwACsp8AAajHAAK0pmJrAAK0qgL3AAK0pmJfAAK0suPDAAK0pmJ3AAK0uAMAArKfAAGoywACtMJiZwACtMcAAXp7AAK0xwABen8AArTCYl8AArTTAAGokwACtNLjwwACtNMAAajPAAK00wABqNMAArTS4xcAArTCYncAArToAwACsp8AAajzAAK08mJrAAK09gL3AAK08mJfAAK0/uPDAAK08mJ3AAK1BAMAArKfAAGo9wACtQ5iZwACtRMAAkgHAAK1FsfLAAK1DmJfAAK1HuPDAAK1HuMXAAK1HwACSAcAArUrAAGo+wACtSsAARU3AAK1KwABqQsAArUrAAGpDwACtSsAAakTAAK1HsJPAAK1HhgfAAK1DmJ3AAK1SAMAArKfAAGpIwACtVJiZwACtVYC9wACtVJidwACtVwAAwACSAsAArVnAAGpKwACtWpiZwACtW2rAAK1bgozAAK1amJfAAK1eI8AArVqYncAArWAAwACtWcAAakvAAK1imJnAAK1jasAArWPAAF94wACtYpiXwACtZsAAak7AAK1mVsAArWbAAGpRwACtZiPAAK1imJ3AAK1rAMAArWvAAGpMwACtWcAAalPAAK1umJnAAK1vwABqVMAArW/AAGpVwACtb8AAalbAAK1vwABevcAArW/AAF6+wACtbpiXwACtdYRZwACtdVbAAK11wABnE8AArXXAAGpZwACtdcAAalrAAK11gxfAAK11I8AArW6YmsAArX2BVcAArW6YncAArX8AwACtWcAAalvAAK2BmJrAAK2CgL3AAK2BmJfAAK2EuPDAAK2BmJ3AAK2GAMAArVnAAGpcwACtiJiZwACticAAXp7AAK2JwABen8AArYnAAGpdwACticAAXr3AAK2JwABevsAArYiYl8AArY+48MAArY/AAGpfwACtj8AAamHAAK2PwABqYMAArY/AAGpiwACtj7jFwACtj8AAamXAAK2ImJ3AAK2XAMAArVnAAGpmwACtmZiZwACtmoNEwACtmsAAXwLAAK2ZmJfAAK2dI8AArZmYncAArZ8AwACtWcAAamjAAK2hmJnAAK2iwABDSMAAraLAAE+WwACtoZiXwACtpcAAamnAAK2lwABPl8AAraUjwACtoZiawACtqYFVwACtoZidwACtqwDAAK1ZwABqbMAAra2YmcAAra7AAGptwACtrsAAam7AAK2uwABqb8AAra7AAGpwwACtrZiXwACts8AAXw3AAK2zmRzAAK2zwABfDMAArbPAAGpywACts6HPwACts8AAamnAAK2zwABPl8AAra2YmsAArbuYE8AAra2YncAArb0AwACtWcAAanPAAK2/mJnAAK3AhLfAAK3AwACSAsAArcK3nMAArcCEMMAArcDAAGp0wACtwMAAanXAAK3AwABg+8AArb+Yl8AArcjAAGp3wACtyMAAanjAAK3IwABqecAArcjAAGp6wACtyMAAanvAAK3IwABqfMAArb+YncAArc8AwACtWcAAan3AAK3RmJrAAK3SgL3AAK3RmJfAAK3UuPDAAK3RmJ3AAK3WAMAArVnAAGp+wACt2JiZwACt2cAAkgLAAK3at5zAAK3ZwABevcAArdnAAF6+wACt2cAAXp7AAK3ZhLfAAK3YmJfAAK3guPDAAK3guMXAAK3gwABqgsAAreDAAGpRwACt4MAAaoXAAK3gwABqgcAAreDAAGqAwACt2JidwACt6AAAwACSA8AArerAAGqGwACt65iXwACt7MAAaofAAK3swACSA8AAre7AAGqIwACt65idwACt8AAAwACSBMAArfLAAGqJwACt85iZwACt9IC9wACt9MAAkgTAAK32tarAAK32wABqisAArfbAAF+GwACt85iawACt+sAAkgTAAK37tATAAK37wABTOcAArfvAAFOKwACt85iXwACt/7jwwACt/7jFwACt/7jLwACt/7j2wACt/8AAao3AAK3/wABqjMAArf/AAGqPwACt/8AAapDAAK3/wABqQMAArf+4jMAArf/AAGqRwACt/7iiwACt85idwACuDAAAwACSBcAArg7AAGqXwACuD5iZwACuEMAAapjAAK4Qm4bAAK4QwABqmcAArhC2u8AArhCzQMAArhCk38AArhDAAJIFwACuF8AAX4XAAK4PmJrAAK4ZgL3AAK4ZsL3AAK4PmJfAAK4cwABA9MAArhzAAGqawACuHLjwwACuHLjFwACuHMAAapvAAK4cwABqnMAArhy488AArhzAAGqfwACuHLigwACuHLh3wACuHLh/wACuHLixwACuHLiowACuHLihwACuHLh2wACuHLjLwACuHLikwACuHLiywACuHMAAkgXAAK4vwABqocAArhy4s8AArhy4tcAArhzAAGqiwACuHMAAaqPAAK4cwABqpMAArhzAAGqlwACuHMAAap7AAK4cwABqncAArhzAAGqmwACuHLj3wACuHLi7wACuD5idwACuPAAAwACSBsAArj7AAGqowACuP5iZwACuQMAAaqnAAK5AwABqqsAArj+Yl8AArkPAAGqrwACuQ8AAaqzAAK5DwABqrcAArkPAAGquwACuQ8AAaq/AAK5DwABqsMAArkPAAGqxwACuQ8AAarLAAK5DwABqtMAArj+YncAArk0AwACuPsAAarXAAK5PmJnAAK5QgVTAAK5PmJfAAK5SZMAArlKBjcAArlKBxMAArlKDd8AArlKcr8AArlLAAEkSwACuT5iawACuWapZwACuWcAAReHAAK5ZqlPAAK5PmJ3AAK5dAMAArj7AAGq2wACuX5iZwACuYMAAarfAAK5fmJfAAK5iZMAArmKBjcAArl+YncAArmUAwACuPsAAarjAAK5nmJnAAK5ogJbAAK5nmJfAAK5qZMAArmqBjcAArmqBxMAArmqDd8AArmqcr8AArmrAAEkSwACuakjAAK5qI8AArmeYmsAArnODwcAArnOqWcAArnPAAEXhwACuc6pTwACuZ5idwACueADAAK4+wABqu8AArnqYl8AArntkwACue4GNwACue4HEwACue5yvwACue8AASRLAAK57I8AArnqYmsAAroKqWcAAroLAAEXhwACuepidwACuhQDAAK4+wABqvcAAroeYl8AArohkwACuiIGNwACuiIHEwACuiJyvwACuiMAASRLAAK6II8AAroeYmsAAro+qWcAAro/AAEXhwACuh5idwACukgDAAK4+wABqv8AArpSYl8AArpVkwACulYGNwACulYHEwACulZyvwACulcAASRLAAK6VI8AArpSYmsAArpyqWcAArpzAAEXhwACulJidwACunwDAAK4+wABqwMAArqGYmcAArqK4zcAArqGYl8AArqRIwACupGTAAK6kgY3AAK6kgcTAAK6kI8AArqGYmsAArqqDwcAArqqqWcAArqrAAEXhwACuoZidwACurgDAAK4+wABqw8AArrCYmsAArrHAAEXhwACusJidwACuswDAAK4+wABqxMAArrWYmcAArraFtcAArraFt8AArrWYncAArrkAwACuPsAAasXAAK67mJfAAK68SMAArryBxMAArrxkwACuvIGNwACuvCPAAK67mJrAAK7Cg8HAAK7CqlnAAK7CwABF4cAArruYncAArsYAwACuPsAAasfAAK7ImJfAAK7JSMAArsmBxMAArslkwACuyYGNwACuySPAAK7ImJrAAK7Pg8HAAK7PqlnAAK7PwABF4cAArsiYncAArtMAwACuPsAAasnAAK7VmJnAAK7WgJbAAK7VmJfAAK7YSMAArthkwACu2IN3wACu2IGNwACu2IHEwACu2CPAAK7VmJrAAK7fg8HAAK7fqlnAAK7fwABF4cAArtWYncAAruMAwACuPsAAR3bAAK7lmJnAAK7mhoTAAK7mhoXAAK7mgVTAAK7lmJfAAK7qlwLAAK7qlwPAAK7qZMAAruqBjcAAruqBxMAAruqDd8AArupIwACu6mPAAK7qgJfAAK7qgWvAAK7qgW3AAK7qI8AAruWYmsAArveDwcAArveqWcAArvfAAEXhwACu98AAaszAAK7lmJ3AAK78AMAArvzAAGrLwACu/JZawACuPsAAas7AAK8AmJnAAK8BwABqz8AArwHAAF94wACvAaTfwACvAYFUwACvAcAARZDAAK8BpB7AAK8AmJrAAK8IgL3AAK8AmJfAAK8KuPDAAK8KwABq0cAArwq4xcAArwq4y8AArwq4pMAArwqGB8AArwq4gsAArwq4hcAArwq4fMAArwq4/cAArwrAAGrbwACvCsAAatzAAK8KuKjAAK8KuI/AAK8KwABq38AArwq4d8AArwq4r8AArwq4eMAArwq4/sAArwrAAGrXwACvCsAAauHAAK8KwABq4sAArwrAAGrjwACvCrj6wACvCrilwACvAJidwACvJADAAK4+wABq5sAAryaYmcAAryek38AAryfAAF94wACvJ4FUwACvJpiXwACvK4KbwACvK5qPwACvK7ikwACvK7j+wACvK7h3wACvK7ivwACvK8AAat/AAK8mmJ3AAK8zAADAAJIHwACvNcAAauzAAK82mJnAAK83mIbAAK83mGbAAK83wABq7cAArzaYmsAArzuBVcAArzthwACvNpiXwACvPlbAAK8+lvzAAK8+wABgCsAArz6c9sAArz6ArcAArz6XD8AArz6XA8AArz7AAGrvwACvNpidwACvRwDAAK81wABq9MAAr0mYmcAAr0qAlsAAr0qDyMAAr0qDsMAAr0mYmsAAr06DwcAAr0mYncAAr1AAAMAAkgjAAK9SmJnAAK9Tlb7AAK9Tlb/AAK9TlcDAAK9TgjbAAK9TgjPAAK9TlcHAAK9TlcLAAK9Tgi/AAK9TlcPAAK9TlcTAAK9TgjHAAK9TgjLAAK9TgirAAK9TlcXAAK9TlcbAAK9TlcfAAK9TlcjAAK9TlcnAAK9TlcrAAK9TlcvAAK9TlczAAK9Tlc3AAK9Tlc7AAK9Tlc/AAK9TgivAAK9TldDAAK9TldHAAK9TldLAAK9TldPAAK9TldTAAK9TldXAAK9TldbAAK9TldfAAK9TgizAAK9TldjAAK9TldnAAK9TldrAAK9TldvAAK9TldzAAK9Tld3AAK9Tld7AAK9Tgi3AAK9Tld/AAK9TleDAAK9TleHAAK9TleLAAK9TlePAAK9TleTAAK9TleXAAK9TlebAAK9TlefAAK9TlejAAK9TlenAAK9TlerAAK9TlevAAK9TlezAAK9Tle3AAK9Tle7AAK9Tle/AAK9TlfDAAK9TlfHAAK9TlfLAAK9TlfPAAK9TlfTAAK9TlfXAAK9TlfbAAK9TgjfAAK9TlffAAK9Tgi7AAK9TlfjAAK9TlfnAAK9TgjjAAK9TlfrAAK9TgjnAAK9TlfvAAK9TlfzAAK9Tlf3AAK9Tlf7AAK9Tlf/AAK9TgjrAAK9TlgDAAK9TlgHAAK9TlgLAAK9TlgPAAK9TlgTAAK9TlgXAAK9TlgbAAK9TlgfAAK9TlgjAAK9TlgnAAK9TlgrAAK9TgjvAAK9TlgvAAK9TlgzAAK9Tlg3AAK9Tlg7AAK9Tlg/AAK9TlhDAAK9TgjzAAK9TlhHAAK9TlhLAAK9TlhPAAK9TlhTAAK9TgjDAAK9TlhXAAK9TgjTAAK9TgjXAAK9TlhbAAK9TlhfAAK9TlhgAwACSCcAAr8KYmcAAr8PAAJIJwACvxMAAavbAAK/CmJfAAK/GwABq98AAr8bAAGr6wACvxp/FwACvxpYswACvxsAAkgnAAK/LwABq/MAAr8vAAGr/wACvy8AAawDAAK/LvTfAAK/GwABq/cAAr8bAAGfZAMAAkgrAAK/SmJjAAK/TwABrDMAAr9PAAGsNwACv0piZwACv1sAAkgrAAK/XwABrFMAAr9KYl8AAr9nAAJIKwACv2sAAaxXAAK/SwABrDsAAr9yYmcAAr93AAJIKwACv3sAAaw/AAK/ewABrEMAAr97AAGsRwACv3JiXwACv4kvAAK/igL/AAK/igKXAAK/iwABDNsAAr+KWOMAAr+KCQsAAr+KHR8AAr+LAAEM0wACv4oP4wACv4oCrwACv4pkdwACv4oRZwACv4pb+wACv4pZBwACv4qwywACv4sAAQznAAK/iI8AAr+LAAJIKwACv9MAAaxLAAK/cmJrAAK/2g9DAAK/2gVXAAK/2g7LAAK/2g2LAAK/2YcAAr/YpwACv3JidwACv/QDAAK/9li4AwACSC8AAsADAAGsWwACwAZiZwACwAsAAkgvAALADwABrF8AAsAGYmsAAsAVcwACwBYFVwACwBWHAALABmJfAALAJgxfAALABmJ3AALALAMAAsADAAGsYwACwDZiZwACwDsAAkgvAALAPwABrGcAAsA2YmsAAsBFewACwDZiXwACwE13AALANmJ3AALAVAADAAJIMwACwF8AAaxrAALAYmJnAALAZwACSDMAAsBrAAGsbwACwGJiXwACwHMAAkgzAALAdwABrHMAAsBxLwACwHIC/wACwHIJCwACwHIRZwACwHJb+wACwHJcBwACwGJibwACwJWHAALAYmJrAALAnYcAAsCeev8AAsCm5pcAAsBiYncAAsCsAAMAAkg3AALAtwABrH8AAsC6YmcAAsC/AAJINwACwMMAAQ0fAALAumJfAALAyS8AAsC6YmsAAsDSDYsAAsC6YncAAsDYAAMAAkg7AALA4mJnAALA5wACSDsAAsDrAAGsgwACwOsAAayHAALA6wABrIsAAsDrAAGsjwACwOsAAayTAALA6wABrJcAAsDiYl8AAsEHAAGsmwACwQcAAayrAALBBwABrK8AAsEHAAGsvwACwQcAAazLAALBBwABrM8AAsEHAAGs0wACwQcAAkg7AALBJwABrNcAAsEnAAGs4wACwScAAaznAALBJwABrOsAAsEnAAGs7AMAAkg/AALBPmJjAALBQwABrPMAAsE+YmcAAsFLAAJIPwACwU8AAa2LAALBPwABrPcAAsFWYmcAAsFbAAJIPwACwV5ZIwACwVZicwACwWQDAALBVmJfAALBblabAALBbg8jAALBbwABDs8AAsE/AAGtAwACwX5iZwACwYMAAkg/AALBhwABrQcAAsGHAAGtCwACwX5iXwACwZJWmwACwZIPIwACwZMAAQ7PAALBfmJ3AALBoAMAAsE/AAGtEwACwapiXwACwa5WmwACwa4PIwACwa8AAQ7PAALBqmJ3AALBvAMAAsE/AAGtFwACwcZiXwACwcpWmwACwcoPIwACwcsAAQ7PAALBxmJ3AALB2AMAAsE/AAGtGwACweJiZwACwecAAkg/AALB6wABrR8AAsHiYl8AAsHyVpsAAsHyDyMAAsHzAAEOzwACweJidwACwgADAALBPwABrTsAAsIKYmcAAsIPAAJIPwACwhMAAa0fAALCCmJfAALCGlabAALCGg8jAALCGwABDs8AAsIKYncAAsIoAwACwT8AAa0/AALCMmJnAALCNwACSD8AAsI7AAGtHwACwjJiXwACwkJWmwACwkIPIwACwjJidwACwkwDAALBPwABrUMAAsJWYl8AAsJbAAEOzwACwlZidwACwmADAALBPwABrUcAAsJqYl8AAsJvAAEOzwACwmpidwACwnQDAALBPwABrUsAAsJ+YmcAAsKDAAGtTwACwoIPRwACwoICWwACwn5iawACwpIPBwACwn5iXwACwpkjAALCfmJ3AALCoAMAAsE/AAGtWwACwqpiZwACwq8AAkg/AALCswABrVMAAsKzAAGtVwACwqpiXwACwr5WmwACwr4PIwACwr8AAQ7PAALCqmJ3AALCzAMAAsE/AAGtawACwtZiZwACwtsAAkg/AALC3wABrW8AAsLWYl8AAsLmVpsAAsLmDyMAAsLnAAEOzwACwtZidwACwvQDAALBPwABrXsAAsL+YmcAAsMDAAJIPwACwwcAAaxHAALDBwABrX8AAsL+Yl8AAsMSVpsAAsMSDyMAAsMTAAEOzwACwv5idwACwyADAALDImwjAALBPwABrYMAAsMuYl8AAsMyVpsAAsMyDyMAAsMzAAEOzwACwy5idwACw0AAAwACSEMAAsNLAAGtjwACw05idwACw1ADAALDUli4AwACSEcAAsNfAAGtkwACw2JidwACw2QDAALDZli4AwACSEsAAsNyYl8AAsN3AAGtlwACw3cAAa2nAALDdwABrasAAsN3AAGtrwACw3cAAa3DAALDdwABrc8AAsN3AAGt3AMAAkhPAALDlwABrfMAAsOaYmcAAsOfAAJITwACw6MAAaxfAALDmmJrAALDqXMAAsOaYncAAsOwAwACw5cAAa3/AALDumJnAALDvwACSE8AAsPDAAGsZwACw8Ii7wACw7piXwACw813AALDumJrAALD1XsAAsO6YncAAsPcAAMAAkhTAALD5wABrgMAAsPqYmcAAsPvAAJIUwACw/JZIwACw+picwACw/gDAALD6mJrAALEAYcAAsQCBVcAAsQCDssAAsQCDGcAAsPqYl8AAsQWDF8AAsQVWwACxBYClwACxBZ8lwACxBYRZwACxBZb9wACxBYJCwACxBYCtwACxBZUZwACw+cAAa4HAALEPmJnAALEQwACSFMAAsRHAAGuCwACxEbTewACxEZz7wACxEIaJwACxD5iXwACxFlbAALEWgKXAALEWgkLAALEWgxfAALEWhFnAALEWlv3AALEWnyXAALEWgK3AALEWlRnAALEWI8AAsRbAAJIUwACxIbOzwACxIcAAa4PAALEhwABrhcAAsSHAAGuGwACxIcAAa4fAALEhwABC0cAAsQ+YmsAAsSiDGcAAsSiBVcAAsSiDssAAsShhwACxD5idwACxLQAAwACSFcAAsS/AAGuSwACxMJiawACxMVzAALExgVXAALExg7LAALExgxnAALExgejAALExgMPAALExmIjAALEwmJfAALE5ljnAALE5lj3AALE5g/jAALE5gxfAALE5ljbAALE5gdTAALE5ljrAALE5lj/AALE5lkLAALE5WMAAsTmBpcAAsTmWRsAAsTmAq8AAsTmEj8AAsTmWQMAAsTmDWcAAsTmWL8AAsTmWQ8AAsTmWRMAAsTmWRcAAsTmArcAAsTmVGcAAsTlWwACxOYClwACxOYRZwACxOZ6/wACxU5/AwACxU5/BwACxU5/EwACxOZb+wACxOZcBwACxOYJCwACxOZY4wACxOYYXwACxOYCuwACxOZ/FwACxOZxqwACxOWTAALE5gVjAALE5n8vAALE5n8zAALE5m7HAALE5g17AALE5n9HAALE5gLvAALE5n9bAALE5lmDAALE5n9fAALE5ntXAALE5n9jAALE5n9nAALE5n9vAALE5I8AAsTCYm8AAsW+DGcAAsW+B6MAAsTCYncAAsXIAwACxL8AAa5PAALF0mJnAALF1wACSFcAAsXbAAGuCwACxdsAAa5TAALF2wABrlcAAsXbAAGuWwACxdJiXwACxe8AAkhXAALF8wABrmMAAsXzAAGukwACxfMAAa6XAALF8s7PAALF8wABC0cAAsXzAAGuowACxfMAAa5vAALF7VsAAsXuApcAAsXuWOMAAsXuWQcAAsXsjwACxe4QiwACxe8AAa57AALF7nyXAALF7hhfAALF7S8AAsXuAv8AAsXSYnMAAsY+WLsAAsXSYmsAAsZFhwACxdJibwACxk2HAALF0mJ3AALGVAMAAsZXAAJIVwACxl4C1wACxL8AAa6vAALGZmJnAALGawACSFcAAsZuu0sAAsZmYmsAAsZ3AAJIVwACxnsAAa5XAALGewABrlsAAsZmYm8AAsaHAAJIVwACxosAAa5XAALGiwABrlsAAsZmYncAAsaUAAMAAkhbAALGnwABrrMAAsaiYl8AAsanAAJIXwACxqsAAaxzAALGpVsAAsamApcAAsamEWcAAsamW/cAAsamXAMAAsamW/sAAsamXAcAAsamCQsAAsaiYncAAsbQAwACxp8AAa67AALG2mJnAALG3wACSFsAAsbjAAENNwACxuMAAa6/AALG2mJrAALG7YcAAsbtcwACxu8AAkhbAALG+wABrsMAAsb7AAGuxwACxtpiXwACxwYMXwACxwZb8wACxwZUZwACxtpidwACxxQDAALHFli4AwACSGMAAscjAAGuywACxyZiZwACxysAAkhjAALHLwABrs8AAscvAAENNwACxyZiawACxzpckwACxyZiXwACx0FbAALHQhFnAALHJmJ3AALHTAADAAJIXwACx1cAAa7XAALHWmJfAALHXwACSF8AAsdjAAGscwACx11bAALHXgKXAALHXntXAALHXn9nAALHXhFnAALHXn9jAALHXhhfAALHXlv7AALHXlwHAALHXn8zAALHXn9HAALHXgkLAALHWmJvAALHmYcAAsdaYncAAsegAwACx1cAAa7fAALHqmJ3AALHrAMAAsdXAAGu5wACx7ZiXwACx7sAAkhfAALHvwABrHMAAse5WwACx7oClwACx7p7VwACx7p/ZwACx7oRZwACx7p/YwACx7oYXwACx7pb+wACx7pcBwACx7p/MwACx7p/RwACx7oJCwACx7ZibwACx/WHAALHtmJ3AALH/AMAAsdXAAGu6wACyAZiXwACyAsAAkhfAALIDwABrHMAAsgJWwACyAoClwACyAoRZwACyApb9wACyApcAwACyApb+wACyApcBwACyAoJCwACyAZidwACyDQDAALHVwABru8AAsg+YmcAAshDAAJIXwACyEZZIwACyD5icwACyE4WewACyD5idwACyFQDAALHVwABrvcAAsheYl8AAshjAAJIXwACyGcAAaxzAALIYVsAAshiApcAAshiEWcAAshiW/cAAshiXAMAAshiW/sAAshiXAcAAshiCQsAAsheYncAAsiMAwACx1cAAa77AALIlmJfAALImwACSF8AAsifAAGscwACyJoC/wACyJpkdwACyJoClwACyJoRZwACyJoJCwACyJZibwACyLoMZwACyLoHowACyJZidwACyMQAAwACSGcAAsjOYmMAAsjTAAGvAwACyM8AAa8HAALI2mJrAALI3wACSGcAAsjjAAGsRwACyN4MZwACyN4FVwACyN4OywACyN1zAALI3gejAALI3YcAAsjeAw8AAsjaYl8AAskGB1MAAskGWOMAAskGDF8AAskGWOcAAskGWNsAAskGEj8AAskGWOsAAskGDWcAAskGWPcAAskGD+MAAskFYwACyQZY/wACyQYCrwACyQZZAwACyQZZBwACyQZZCwACyQZYvwACyQZZDwACyQZZEwACyQZZFwACyQYCtwACyQZUZwACyQYGlwACyQZZGwACyQSPAALI2mJ3AALJbAMAAsjPAAGvCwACyXZiZwACyXsAAkhnAALJfwABrEcAAsl2Yl8AAsmGyocAAsl2YncAAsmMAwACyM8AAa8TAALJlmJfAALJmsqHAALJmS8AAsmaAv8AAsmZkwACyZlbAALJmgKXAALJmnGrAALJmljjAALJmgkLAALJmm7HAALJmn8vAALJmgLvAALJmn9bAALJmntXAALJmn9nAALJmlmDAALJmn9fAALJmhFnAALJmn9jAALJmhhfAALJmn8zAALJmlv7AALJmn9HAALJmlwHAALJmlkHAALJmn9vAALJmg17AALJmn8XAALJmgK7AALJmgVjAALJlmJrAALKFwACSGcAAsobAAGvGwACyhZiIwACyZZibwACyiYMZwACyiYHowACyiWHAALJlmJ3AALKNAMAAsjPAAGvHwACyj5iXwACykLKhwACykFbAALKQgKXAALKQljjAALKQgkLAALKQhALAALKQlwTAALKQlwPAALKQlvzAALKQhFnAALKQlv3AALKQlv7AALKQlwDAALKQlkHAALKQlwHAALKQlwLAALKQlRnAALKPmJrAALKiwACSGcAAsqPAAGvJwACyj5idwACypQDAALIzwABrysAAsqeYl8AAsqiyocAAsqhWwACyqIClwACyqMAAa57AALKohCLAALKoljjAALKogkLAALKohFnAALKolv7AALKolwHAALKolkHAALKonyXAALKohhfAALKnmJrAALK2wACSGcAAsrfAAGvMwACyp5idwACyuQDAALIzwABrzcAAsruYmcAAsrzAAJIZwACyvcAAaxHAALK7mJfAALK/sqHAALK/S8AAsr+Av8AAsr+ApcAAsr/AAEM2wACyv4JCwACyv5Y4wACyv4dHwACyv8AAQzTAALK/g/jAALK/gKvAALK/mR3AALK/hFnAALK/lv7AALK/lkHAALK/I8AAsr+sMsAAsr/AAEM5wACyu5iawACy0oPQwACy0oFVwACy0oOywACy0oNiwACy0mHAALLSKcAAsruYncAAstkAwACyM8AAa8/AALLbmJfAALLcljjAALLcwACSF8AAst7AAGscwACy3FbAALLcgKXAALLchFnAALLclv3AALLclwDAALLclv7AALLclwHAALLcgkLAALLbmJ3AALLoAMAAsjPAAGvQwACy6piZwACy68AAkhnAALLswABr0cAAsuqYmsAAsu7AAJIZwACy78AAaxHAALLugVXAALLug7LAALLuYcAAsuqYl8AAsvSWOMAAsvSDF8AAsvQjwACy9IQCwACy9JcEwACy9JcDwACy9Jb8wACy9JZBwACy9JcCwACy6pidwACy/gDAALIzwABr08AAswCYmcAAswHAAJIZwACzAsAAa9HAALMCwABr1MAAswCYmsAAswXAAJIZwACzBsAAaxHAALMFgVXAALMFg7LAALMFYcAAswCYl8AAswuWOMAAswuDF8AAswsjwACzC1bAALMLgKXAALMLgkLAALMLhALAALMLlwTAALMLlwPAALMLlvzAALMLhFnAALMLlv3AALMLlv7AALMLlwDAALMLlwHAALMLlkHAALMLlwLAALMAmJ3AALMdAADAAJIawACzH66IwACzIJiawACzIYcywACzIYFVwACzIcAAa9rAALMgmJfAALMlwABr28AAsyXAAGvcwACzJcAAa93AALMlwABr38AAsyXAAGvgwACzJcAAXUbAALMlwABr4cAAsyXAAGvjwACzIJidwACzLgDAALMfwABr5sAAszCYmcAAszHAAJIawACzMsAAa+fAALMywABr6MAAszKycMAAszCYmsAAszaHMsAAszaBVcAAszbAAGvawACzMJiXwACzOsAAa9vAALM6wABr3MAAszrAAGKQwACzOsAAWTDAALM6wABr6cAAszrAAGvqwACzOsAAa+vAALMwmJ3AALNCAMAAsx/AAGvswACzRJiZwACzRSfAALNFwABr7cAAs0XAAGt6wACzRYJVwACzRJidwACzSgDAALMfwABr7sAAs0yYmcAAs03AAJIawACzTsAAX4bAALNOlxzAALNOtF7AALNOwABPtcAAs07AAGvvwACzTJiXwACzVMAAkhrAALNVwABr4sAAs1XAAGvywACzVcAAa/PAALNVwABr8MAAs1TAAGvdwACzTJidwACzWwDAALMfwABr98AAs12YmcAAs17AAJIawACzX8AAX4bAALNewABr5cAAs17AAGv4wACzXZiXwACzY4KbwACzY8AAkhrAALNlwABr/MAAs12YncAAs2cAAMAAkhvAALNpmJnAALNqwABsLMAAs2rAAGwtwACzasAAbC7AALNpwABsAMAAs26YmcAAs2/AAE+twACzb6tLwACzb8AAbAHAALNvwABPgsAAs2+kQcAAs2/AAGwCwACzb8AAbAPAALNvwABsBMAAs2/AAGNUwACzb8AAZFLAALNvwABPp8AAs26Yl8AAs3vAAGRbwACze8AAkhvAALN9wABsBcAAs3vAAEoqwACze8AAZFPAALN7wABjhsAAs3vAAGOJwACze8AAY0/AALN7wABjfsAAs3vAAGNcwACze8AAY2PAALN7wABjdMAAs3vAAGN3wACze8AAY1nAALN7wABjYMAAs3vAAGNtwACze8AAY0PAALN7wABjRsAAs3vAAGNIwACze8AAY4LAALN7wABjQMAAs3vAAGMpwACze8AAbAnAALN7wABsCsAAs3vAAGwLwACze8AAbBjAALN7wABsGcAAs3vAAGwawACze8AAbBvAALN7wABsHMAAs3vAAGM8wACze8AAbCPAALN7wABsJMAAs3u0msAAs3vAAGMKwACze8AAYxzAALNumJ3AALOgAADAAJIcwACzopiXwACzo8AAbDDAALOjwABsNADAAJIdwACzpsAAaDbAALOnmJnAALOogmbAALOowACSHcAAs6rAAFJZwACzqsAAWLTAALOqwABYtsAAs6rAAFi1wACzqsAAbDbAALOqwABsN8AAs6rAAEfdwACzqsAAbDjAALOqwABYvcAAs6qvJ8AAs6eYmsAAs7WBVcAAs7XAAFMOwACztcAAUxDAALO1wABTEsAAs7XAAFMUwACztcAAUxbAALO1wABSWsAAs7XAAFMXwACztbe0wACztcAAUxrAALO1rx3AALOnmJfAALPBwABYV8AAs8HAAFhWwACzwcAAWFXAALPBwABTFcAAs8HAAGg+wACzwcAAaDvAALPBwABoPcAAs8HAAGg8wACzwcAAbDnAALPBr1nAALPBI8AAs6eYncAAs80AAMAAkh7AALPPwABsRMAAs9CYmcAAs9HAAJIewACz0sAAUlnAALPSwABsRcAAs9CYl8AAs9VWwACz1cAAbEbAALPVwABsR8AAs9WHR8AAs9WAv8AAs9VLwACz1YRZwACz1YP4wACz1b1AwACz1SPAALPVwABsScAAs9CYmsAAs+GBVcAAs+GDssAAs9CYncAAs+QAwACzz8AAbE/AALPmmJfAALPnwABsUMAAs+e9QMAAs+eBVcAAs+aYncAAs+sAAMAAkh/AALPtwABo6MAAs+6YmcAAs+/AAJIfwACz8MAAbGrAALPwwABsa8AAs+6YnMAAs/MAwACz7piXwACz9YOJwACz9abbwACz9cAASGfAALPumJ3AALP5wACSH8AAs/qAtcAAs+3AAGxswACz/JiZwACz/cAAkh/AALP+lwzAALP8mJrAALQAgJbAALP8mJfAALQCVsAAtAKCiMAAs/yYncAAtAUAAMAAkiDAALQHwABo6cAAtAiYmcAAtAmB48AAtAmC/cAAtAnAAGxuwAC0CcAAbG/AALQJg9DAALQJwABscMAAtAnAAGxxwAC0Cb02wAC0CJiXwAC0EsAAbHLAALQSwABsc8AAtBKim8AAtBLAAJIgwAC0FsAAbHnAALQSwABsfsAAtBLAAGyMwAC0EsAAbJDAALQSwABso8AAtBLAAGymwAC0CJidwAC0HQDAALQHwABsrMAAtB+YmcAAtCDAAJIgwAC0IZcMwAC0IMAAbK3AALQgwABsrsAAtCDAAGyvwAC0IMAAbLDAALQgwABsscAAtB+Yl8AAtCic0MAAtCiVSsAAtCjAAGyzwAC0H5idwAC0LADAALQHwABstcAAtC6YmcAAtC+3JsAAtC+9LcAAtC6YncAAtDIAwAC0B8AAbLbAALQ0mJnAALQ1wACSIMAAtDaqG8AAtDSYl8AAtDjAAJIgwAC0OcAAbLfAALQ4VsAAtDjAAGuewAC0OMAAbLnAALQ4wABsusAAtDjAAGy8wAC0OIP4wAC0OMAAbHzAALQ0mJ3AALRCAMAAtAfAAGy9wAC0RJiZwAC0RYCrwAC0RJiXwAC0R8AATDfAALRHS8AAtESYmsAAtEqIRcAAtESYncAAtEwAAMAAkiEAwACSIsAAtE/AAGjqwAC0UJiZwAC0UcAAkiLAALRSlkjAALRQmJzAALRUAMAAtFCYl8AAtFabIcAAtE/AAGzAwAC0WJiZwAC0WcAAkiLAALRawABXgcAAtFrAAGzBwAC0WJiXwAC0XZshwAC0XcAAbMLAALRdwABsw8AAtF3AAGzEwAC0XcAAbMXAALRdmyLAALRdwABsxsAAtF3AAGzHwAC0XbQswAC0Xbx/wAC0XcAARcvAALRdvHbAALRdvHnAALRdvHPAALRdvHzAALRdhzPAALRdvIfAALRdvIrAALRdvJDAALRdnu/AALRduIzAALRdwABFx8AAtF3AAEXIwAC0XcAARcnAALRdwABFysAAtF2FsMAAtFiYncAAtHgAwAC0T8AAbM7AALR6mJfAALR7gmfAALR7hnbAALR7tAvAALR7hoLAALR7hnzAALR7hozAALR7hnTAALR6mJ3AALSDAMAAtE/AAGzPwAC0hZiZwAC0hsAAkiLAALSHwABo7sAAtIfAAGzQwAC0hZiXwAC0ipshwAC0ioZ2wAC0irQLwAC0ioaCwAC0ioZ8wAC0ioaMwAC0ioZ0wAC0isAAkiLAALSSwABs0sAAtIWYncAAtJQAAMAAkiPAALSWmJnA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gmfAALWmmJrAALWqtMPAALWqg8HAALWqwABtO8AAtaaYl8AAta5IwAC1riPAALWmmJ3AALWxAMAAtUTAAG20wAC1s5iZwAC1tLOawAC1tICWwAC1tICswAC1tMAAkinAALW4wABttcAAtbSDwMAAtbOYmsAAtbuDXMAAtbvAAG0+wAC1s5iXwAC1viPAALWzmJ3AALXAAMAAtUTAAG27wAC1wpiawAC1w8AAbPLAALXCmJfAALXFwABtvMAAtcWBw8AAtcWBwsAAtcKYncAAtckAAMAAkirAALXLwABtwcAAtcyYmcAAtc2ENMAAtcyYl8AAtc9IwAC1zyPAALXMmJrAALXSg8HAALXMmJ3AALXUAADAAJIrwAC11sAAbcLAALXXmJrAALXYwABtw8AAtdeYl8AAtdqIvsAAtdq0dMAAtdeYncAAtd0AAMAAkizAALXfwABtxsAAteCYmcAAteHAAJIswAC14sAAZdzAALXilwvAALXgmJfAALXliL7AALXltHTAALXgmJ3AALXoAMAAtd/AAG3HwAC16piZwAC168AAkizAALXswABtyMAAtezAAG3JwAC17MAAbcrAALXswABty8AAteqYl8AAtfFWwAC18cAAbc3AALXxgojAALXqmJ3AALX1AADAAJItwAC195iZwAC1+MAAbg7AALX4wACSLcAAtfrAAG4PwAC1+sAAbhDAALX3wABtz8AAtf2YmcAAtf7AAG3DwAC1/ZiXwAC2ALR0wAC1/ZidwAC2AsAAki3AALYDgLXAALX3wABt0MAAtgWYmcAAtgaVbsAAtgWYl8AAtgjAAG3VwAC2BZidwAC2CgAAwACSLsAAtgyYmcAAtg3AAG4awAC2DMAAbhHAALYPmJnAALYQwABtw8AAtg+Yl8AAthK0dMAAtg+YncAAthTAAJIuwAC2FYC1wAC2DMAAbhLAALYXmJnAALYYlW7AALYYwACSLsAAthrAAG4TwAC2F5iXwAC2HMAAbdXAALYXmJ3AALYeAADAAJIvwAC2IJiZwAC2IcAAblzAALYhwACSL8AAtiPAAG4PwAC2IMAAbhvAALYlmJnAALYmwABtw8AAtiWYl8AAtijAAFTDwAC2KLR0wAC2JZidwAC2K8AAki/AALYsgLXAALYgwABuHMAAti6YmcAAti+VbsAAti/AAJIvwAC2McAAbhPAALYumJfAALYzwACSL8AAtjTAAG4jwAC2NMAAbiTAALY0wABuJcAAtjTAAG4mwAC2NMAAbifAALY0wABuKMAAtjTAAG4pwAC2M8AAbdXAALYumJ3AALY9AADAAJIwAMAAkjHAALZAwABuXcAAtkGYmcAAtkLAAJIxwAC2Q5cMwAC2QZiawAC2RYCWwAC2QZiXwAC2R1bAALZHgojAALZBmJ3AALZKAADAAJIywAC2TMAAbl7AALZNmJnAALZOwACSMsAAtk+XPMAAtk/AAG5fwAC2T8AAbmDAALZPwABuYcAAtk/AAG5jwAC2T8AAbmTAALZPwABty8AAtk2YmsAAtleVbsAAtk2Yl8AAtlnAAG3VwAC2WVbAALZZgojAALZZwACSMsAAtl3AAG5pwAC2XcAAbmfAALZdwABuaMAAtl3AAG50wAC2TZidwAC2YgAAwACSM8AAtmSYmcAAtmXAAG55wAC2ZcAAbnrAALZlwABue8AAtmSYl8AAtmnAAG58wAC2acAAbn0AwACSNMAAtmzAAG5/wAC2bZiZwAC2bsAAkjTAALZvwABugMAAtm/AAG3LwAC2bZiawAC2cpu3wAC2crkawAC2bZiXwAC2dYJCwAC2dVbAALZ1gojAALZtmJ3AALZ5AADAAJI1wAC2e8AAboLAALZ8mJnAALZ9wACSNcAAtn6YJsAAtn7AAG3LwAC2fJiawAC2gYQ0wAC2gbkawAC2fJiXwAC2hIJCwAC2hFbAALaEwABtzcAAtoSCiMAAtnyYncAAtokAAMAAkjbAALaLmJnAALaMwABuh8AAtovAAG6GwAC2jpiawAC2j4i9wAC2j4H3wAC2jpidwAC2ksAAkjbAALaTgLUAwACSN8AAtpWYmcAAtpaWoMAAtpXAAG6LwAC2mJiawAC2mYi9wAC2mYH3wAC2mJidwAC2nMAAkjfAALadgLUAwACSOMAAtp/AAG6MwAC2oJiZwAC2ocAAkjjAALaimCbAALaiwABty8AAtqCYmsAAtqWD7MAAtqW5GsAAtqCYl8AAtqiCQsAAtqhWwAC2qMAAbc3AALaogojAALagmJ3AALatAADAAJI5AMAAkjrAALawmJnAALaxwABuhMAAtrCYl8AAtrPAAJI6wAC2tMAAbpDAALa0wABulMAAtrDAAG6OwAC2t5iXwAC2uIi+wAC2uLR0wAC2t5idwAC2u8AAkjrAALa8gLXAALawwABuj8AAtr6YmcAAtr/AAJI6wAC2wJc8wAC2vpiXwAC2wlbAALbCwABtzcAAtsKCiMAAtr6YncAAtsYAAMAAkjvAALbImJnAALbJwABuhcAAtsiYl8AAtsvAAJI7wAC2zMAAbqHAALbIwABulsAAts6Yl8AAts+IvsAAts+0dMAAts6YncAAttLAAJI7wAC204C1wAC2yMAAbpnAALbVmJnAALbWwACSO8AAtteXPMAAttfAAG6awAC21ZiXwAC22sAAbc3AALbawABunsAAttqCiMAAttrAAJI7wAC23sAAbpvAALbVmJ3AALbgAMAAtsjAAG6gwAC24piZwAC248AAkjvAALbklzzAALbkwABumsAAtuKYl8AAtudWwAC258AAbc3AALbngojAALbnwACSO8AAtuvAAG6bwAC24pidwAC27QAAwACSPMAAtu+YmcAAtvDAAG6JwAC275iXwAC28sAAkjzAALbzwABukMAAtvPAAG6UwAC278AAbqnAALb2mJfAALb3iL7AALb3tHTAALb2mJ3AALb6wACSPMAAtvuAtcAAtu/AAG6qwAC2/ZiZwAC2/sAAkjzAALb/lzzAALb9mJfAALcBVsAAtwHAAG3NwAC3AYKIwAC2/ZidwAC3BQAAwACSPcAAtweYmcAAtwjAAG6KwAC3CMAAkj3AALcKwABusMAAtweYl8AAtwzAAJI9wAC3DcAAbqHAALcNwABus8AAtwfAAG6swAC3EJiXwAC3EYi+wAC3EbR0wAC3EJidwAC3FMAAkj3AALcVgLXAALcHwABursAAtxeYmcAAtxjAAJI9wAC3GZc8wAC3GcAAbprAALcXmJfAALccwABtzcAAtxzAAG6ewAC3HIKIwAC3HMAAkj3AALcgwABum8AAtxeYncAAtyIAwAC3B8AAbq/AALckmJnAALclwACSPcAAtyaXPMAAtybAAG6awAC3JJiXwAC3KVbAALcpwABtzcAAtymCiMAAtynAAJI9wAC3LcAAbpvAALckmJ3AALcvAADAAJI+wAC3McAAbrfAALcymJnAALczwABuuMAAtzPAAJI+wAC3NZgmwAC3NZz7wAC3MpiawAC3OMAAkj7AALc5wABuucAAtznAAG66wAC3OGHAALc4wABuxsAAtzjAAG5rwAC3OKmRwAC3OIKLwAC3MpiXwAC3QUvAALdBgL/AALdBwACSPsAAt0Szs8AAt0TAAGr8wAC3RMAAbr7AALdEwABuv8AAt0TAAG7DwAC3RMAAbr3AALdEwABC0cAAt0TAAG7FwAC3RMAAbrzAALdBVsAAt0GApcAAt0Gf2cAAt0Ge1cAAt0GDXsAAtzKYm8AAt1NhwAC3MpidwAC3VQDAALcxwABux8AAt1eYmsAAt1jAAJI+wAC3WcAAbrrAALdXmJ3AALdbAMAAtzHAAG7IwAC3XZiawAC3XsAAkj7AALdfwABuusAAt12YncAAt2EAwAC3McAAbsnAALdjmJfAALdkwACSPsAAt2XAAG68wAC3Y5idwAC3ZwDAALcxwABuy8AAt2mYl8AAt2rAAJI+wAC3a8AAbrzAALdpmJ3AALdtAMAAtzHAAG7MwAC3b5iXwAC3cMAAkj7AALdxwABuvMAAt2+YncAAt3MAwAC3McAAbs3AALd1mJfAALd2wACSPsAAt3fAAG68wAC3dZidwAC3eQDAALcxwABuzsAAt3uYl8AAt3zAAJI+wAC3fcAAbrzAALd7mJ3AALd/AMAAtzHAAG7PwAC3gZiXwAC3gsAAkj7AALeDwABuvMAAt4GYncAAt4UAwAC3McAAbtDAALeHmJfAALeIwACSPsAAt4nAAG68wAC3h5idwAC3iwDAALcxwABu0cAAt42Yl8AAt47AAJI+wAC3j8AAbrzAALeNmJ3AALeRAMAAtzHAAG7SwAC3k5iXwAC3lMAAkj7AALeVwABuvMAAt5OYncAAt5cAwAC3McAAbtPAALeZmJfAALeawACSPsAAt5vAAG68wAC3mZidwAC3nQDAALcxwABu1MAAt5+Yl8AAt6DAAJI+wAC3ocAAbrzAALefmJ3AALejAMAAtzHAAG7VwAC3pZiZwAC3psAAkj7AALenwABrIMAAt6WYmsAAt6nAAJI+wAC3qsAAbrrAALelmJfAALeswACSPsAAt63AAG68wAC3pZidwAC3rwDAALcxwABu1sAAt7GYmsAAt7LAAJI+wAC3s8AAbrrAALexmJfAALe1wACSPsAAt7bAAG68wAC3sZidwAC3uAAAwACSP8AAt7qYl8AAt7vAAG7YAJvYwAC3vZiYwAC3vsAAbvDAALe+wABu8cAAt77AAG7zwAC3vsAAbvTAALe+wABu9cAAt77AAG72wAC3vsAAbvfAALe+wABu+MAAt77AAG75wAC3vsAAbvrAALe+wABu+8AAt77AAG78wAC3vsAAbv3AALe+wABu/sAAt77AAG7/wAC3vsAAbwDAALe+wABvAcAAt77AAG8CwAC3vsAAbwPAALe+wABvBMAAt77AAG8FwAC3vsAAbwbAALe+wABvB8AAt77AAG8IwAC3vsAAbwrAALe+wABvC8AAt77AAG8MwAC3vsAAbw3AALe+wABvDsAAt77AAG8PwAC3vsAAbxDAALe+wABvEcAAt77AAG8SwAC3vsAAbxPAALe+wABvFMAAt77AAG8VwAC3vsAAbxbAALe+wABvF8AAt77AAG8YwAC3vsAAbxnAALe9mJnAALfnm9jAALfowABw7MAAt+jAAHDtwAC36MAAcO7AALfowABw78AAt+jAAHDwwAC36MAAcPHAALe9mJfAALfvm9jAALfwwABw8sAAt/CcJsAAt/CcD8AAt/CcKMAAt/CcIMAAt/CcIsAAt/CcLcAAt/CcJMAAt/DAAHD4wAC38MAAcPrAALfwwABw/MAAt/DAAHD+wAC38MAAcP/AALfwwABxAMAAt/DAAHECwAC38MAAcQPAALfwwABxBMAAt/DAAHEFwAC38MAAcQjAALfwwABxCcAAt/DAAHEKwAC38MAAcQzAALfwwABxDcAAt/DAAHEPwAC38MAAcRDAALfwwABxEcAAt/DAAHESwAC38MAAcRTAALfwwABxFcAAt/DAAHEWwAC38MAAcRfAALfwwABxGMAAt/DAAHEZwAC38MAAcRrAALfwwABxG8AAt/DAAHEdwAC38MAAcR7AALfwwABxH8AAt/DAAHEgwAC38MAAcSHAALfwwABxIsAAt/DAAHEjwAC38MAAcSTAALfwwABxJsAAt/DAAHEnwAC38MAAcSjAALfwwABxKcAAt/DAAHEqwAC38MAAcTHAALfvwABv0MAAt++IlcAAt72cKsAAuCSYmcAAuCWb2MAAuCbAAG8bwAC4JcAAbxzAALgkmJfAALgpwABvHcAAuCmB28AAuClqwAC4JJiawAC4LYHcwAC4LcAAbx7AALgkmJ3AALgwAMAAt72cFMAAuDKYmcAAuDPAAF5lwAC4M8AAUqHAALgzwABvIMAAuDPAAG8hwAC4M8AAbyLAALgzwABvI8AAuDPAAG8kwAC4MpiawAC4O4H1wAC4MpiXwAC4PcAAbynAALg9wABvKsAAuD1WwAC4PZwYwAC4PZwWwAC4PYKIwAC4PcAAbyXAALg9wABvJsAAuD3AAG8nwAC4MpidwAC4RwDAALe9wABvMMAAuEmYmcAAuEqb2MAAuEvAAFKKwAC4SZidwAC4TQDAALe9wABvMcAAuE+YmcAAuFCb2MAAuFHAAG8ywAC4T5idwAC4UwDAALe9wABvM8AAuFWYmsAAuFbAAG80wAC4VZidwAC4WADAALe9wABvNcAAuFqYmcAAuFub2MAAuFzAAG82wAC4XMAAbzfAALhcwABvOMAAuFzAAG85wAC4XMAAbzrAALhcwABvO8AAuFqYl8AAuGOb2MAAuGTAAG89wAC4ZMAAbz/AALhkwABvQcAAuGTAAG9DwAC4ZMAAb0TAALhamJrAALhqm9jAALhrwABvQMAAuGvAAG9CwAC4WpidwAC4bgDAALe9wABvRcAAuHCYmcAAuHGb2MAAuHLAAG9GwAC4csAAbzbAALhywABvN8AAuHLAAG9HwAC4csAAb0jAALhywABjtcAAuHLAAG9JwAC4csAAb0rAALhywABvS8AAuHLAAG9MwAC4ccAAbyXAALhxwABvJ8AAuHCYmsAAuH/AAG9NwAC4f8AAbybAALh/gfXAALh/hDvAALh/uRrAALh/wABvK8AAuH/AAG8uwAC4f5vYwAC4h8AAb1LAALiHwABvQMAAuIfAAG9TwAC4h8AAb1TAALiHwABvUcAAuH+fk8AAuHCYm8AAuI7AAG9NwAC4jsAAbybAALhwmJfAALiRm9jAALiSwABvVcAAuJLAAG9WwAC4ksAAb1jAALiSwABvWsAAuJLAAG9bwAC4ksAAb13AALiSwABvXsAAuJLAAG9fwAC4krOzwAC4ksAAb2jAALiSwABum8AAuJLAAG9qwAC4ksAAb1zAALiRVsAAuJGcFsAAuJGCiMAAuJGcGMAAuHCYncAAuKQAwAC3vcAAb27AALimmJrAALinm9jAALiowABvVMAAuKaYl8AAuKqb2MAAuKvAAG9fwAC4q8AAb2LAALirwABvZMAAuKvAAG9mwAC4ppidwAC4sADAALe9wABvb8AAuLKYl8AAuLOb2MAAuLTAAG9iwAC4tMAAb2TAALi0wABvZsAAuLKYncAAuLgAwAC3vcAAb3HAALi6mJnAALi7m9jAALi8wABil8AAuLqYmsAAuL6b2MAAuL/AAG9ywAC4upiXwAC4wZvYwAC4wsAAb3PAALjCwABvXMAAuMFWwAC4wZwWwAC4wYKIwAC4upidwAC4yADAALe9wABvdcAAuMqYmcAAuMuGXMAAuMuArMAAuMqYl8AAuM6k4cAAuMqYncAAuNAAwAC3vcAAb3fAALjSmJnAALjTm9jAALjUwABqR8AAuNKYl8AAuNYjwAC40pidwAC42ADAALe9nDTAALjamJ3AALjbm9jAALjcgLXAALe9A8AAuN6YmcAAuN+b2MAAuODAAG96wAC44MAAb3vAALjemJzAALjjAMAAuOPAAG9+wAC445mvwAC444CWwAC444HFwAC448AAb4DAALjemJfAALjqwABvgcAAuOqB1MAAuOqD+MAAuOqb2MAAuO7AAG+KwAC46sAAb4vAALjqga3AALjqgfHAALjqgf7AALjqwABvkMAAuOrAAG+RwAC3vcAAb5TAALj2mJnAALj3IsAAuPeBs8AAuPaYl8AAuPojwAC49pidwAC4/ADAALe9nC/AALj+mJzAALj/AMAAuP+Zr8AAuP6YmsAAuQKB3MAAuQLAAG8ewAC4/piXwAC5BcAAbx3AALkFgdvAALe9wABvlsAAuQiYmcAAuQmB3MAAuQiYl8AAuQvAAG8dwAC5C4HbwAC5C5vYwAC5DsAAb4fAALkImJrAALkQwABvHsAAuQiYncAAuRIAwAC3vcAAb5jAALkUmJfAALkVwABvHcAAuRWb2MAAuRfAAG+HwAC5FJidwAC5GQDAALe9wABvmcAAuRuYl8AAuRzAAG8dwAC5HJvYwAC5HsAAb4fAALkbmJ3AALkgAMAAt73AAG+awAC5IpiZwAC5I8AAWuzAALkjwABvm8AAuSPAAG+cwAC5I8AAb53AALkjwABvnsAAuSPAAG+fwAC5I8AAb6DAALkjwABvocAAuSPAAG+iwAC5I8AAb6PAALkjm9jAALkuwABvpMAAuSOBdsAAuSOCTsAAuSOZwcAAuSPAAG9jwAC5IpiawAC5NJvYwAC5NcAAb6XAALk1wABvqsAAuTXAAG+rwAC5NcAAb6zAALk1wABvrcAAuTTAAG+mwAC5NMAAb6fAALk0wABvqMAAuTTAAG+pwAC5NMAAb67AALkimJfAALlAwABvr8AAuUDAAG+xwAC5QMAAb4TAALlAwABvs8AAuSKYncAAuUWBrcAAuUWB8cAAuUWB/sAAt72ygcAAuUmYmcAAuUqb2MAAuUvAAG+0wAC5S8AAb7XAALlLwABvtsAAuUvAAG+3wAC5S8AAb7jAALlLwABvucAAuUvAAGO1wAC5S8AAb6XAALlLwABvusAAuUmYmsAAuVWb2MAAuVbAAG9swAC5VsAAb7/AALlWwABvwMAAuVbAAG/BwAC5VsAAb8LAALlWwABvw8AAuVbAAG/LwAC5VsAAb8zAALlJmJfAALlfm9jAALlgwABvxMAAuWDAAG/HwAC5YMAAb8nAALlgwABvysAAuWDAAG+9wAC5YMAAb83AALlgwABvzsAAuWDAAG/PwAC5YMAAb1bAALlgwABv0cAAuWDAAG/UwAC5YMAAb9PAALlgwABv1cAAuWDAAG/WwAC5YMAAb33AALlgwABviMAAuWDAAG+HwAC5YMAAb23AALlgwABv18AAuWDAAG9/wAC5YMAAb9jAALlfga3AALlfgfHAALlfgf7AALlfwABvkMAAuV/AAG+RwAC5SZidwAC5ewDAALl7wABvu8AAuXvAAG+8wAC5e8AAb77AALl7gJbAALe9wABv5sAAuYGYmcAAuYKZwcAAuYKDsMAAuYGYncAAuYUAwAC3vcAAb+fAALmHmJfAALmIm9jAALmJwABv6MAAuYeYncAAuYsAwAC3vZvZwAC5jZiZwAC5jpvYwAC5j5ZIwAC5jZicwAC5kYWewAC5kYCWwAC5kYHFwAC5kcAAb+zAALmRwABv7cAAuZHAAG/uwAC5kcAAb+/AALmRwABv9MAAuY2Yl8AAuZrAAG/2wAC5msAAb/fAALmagfnAALmagaXAALmagKvAALmawABv+MAAuZrAAG/5wAC5msAAb4TAALmahI/AALmawABv+8AAuZqB9sAAuZqWQMAAuZqDWcAAuZpYwAC5moMXwAC5moP4wAC5mpY2wAC5moHUwAC5mpY4wAC5moCtwAC5mpUZwAC5msAAcADAALmalkTAALmalkXAALmali/AALmalkPAALmawABwA8AAuZqWOsAAuZqWP8AAuZqWQsAAuZqWOcAAuZrAAG+RwAC5jZiawAC5u8AAbzTAALm7YcAAubuBVcAAubuDGcAAubuB6MAAubuAw8AAuY2YncAAucIAwAC5wpvYwAC5xIZbwAC3vcAAcArAALnGmJfAALnHnFXAALnHwABvPMAAuceB68AAuceDicAAuceB+8AAuceCBMAAucfAAHACwAC5xpiawAC5z8AAbyvAALnGmJ3AALnRAMAAt72kS8AAudOYl8AAudRWwAC51JwWwAC51IKIwAC505idwAC52ADAALe9wABwDsAAudqYmcAAudub2MAAudzAAHAPwAC52piawAC53sAAbzTAALnamJfAALngwABv98AAueCB+cAAudqYncAAueMAwAC3vcAAcBDAALnlmJfAALnmnBjAALnmgojAALnlmJ3AALnpAMAAt73AAHARwAC565iXwAC57IKIwAC565iawAC57p+TwAC565idwAC58ADAALe9wABwEsAAufKYmcAAufOb2MAAufSWSMAAufKYnMAAufYAwAC59sAAcBTAALn2wABwFcAAufKYl8AAufrAAG/2wAC5+p57wAC5+pY4wAC3vcAAcB3AALn+mJfAALn/ljjAALn+mJ3AALoBAMAAt72yg8AAugOYnMAAugQAwAC6A5iXwAC6Bl3AALoGnFXAALoDmJrAALoJXsAAt73AAHAewAC6C5iZwAC6DJvYwAC6DZc8wAC6C5iXwAC6D1bAALoPnBbAALoPgojAALoLmJ3AALoTAMAAt73AAHAfwAC6FZiawAC6FoH1wAC6FsAAbyXAALoWwABvTcAAuhbAAG8mwAC6FsAAbyfAALoWhDvAALoWuRrAALoWwABvK8AAuhbAAG8uwAC6FZicwAC6IADAALogwABwIMAAuhWYm8AAuiPAAG8lwAC6I8AAb03AALojwABvJsAAuiPAAG8nwAC6FZiXwAC6KFbAALoonBbAALoogojAALoonBjAALe9wABwI8AAui2Yl8AAui5WwAC6LpwWwAC6LoKIwAC6LZidwAC6MgDAALe9wABwJMAAujSYl8AAujWb2MAAujbAAG9awAC6NsAAb13AALo2wABvXsAAujbAAG9bwAC6NJidwAC6OwDAALe9wABwJcAAuj2YncAAuj4AwAC3vcAAcCbAALpAmJnAALpBm9jAALpCwABvRsAAukLAAHAnwAC6QsAAcCjAALpCwABwKcAAukLAAG9HwAC6QsAAb0jAALpCwABwKsAAukLAAGO1wAC6QsAAb0zAALpBwABvJcAAukHAAG9NwAC6QcAAbybAALpBwABvJ8AAukCYmsAAulCB9cAAulCEO8AAulCb2MAAulPAAHArwAC6U8AAcCzAALpTwABvU8AAulPAAG9UwAC6U8AAcC7AALpTnFPAALpQwABvLsAAulC5GsAAulDAAG8rwAC6UJ+TwAC6QJiXwAC6XpvYwAC6X8AAcDDAALpfwABwMcAAul/AAG9VwAC6X8AAb+vAALpfs7PAALpfwABvaMAAul/AAG6bwAC6X8AAb1rAALpfwABvW8AAul/AAG9dwAC6X8AAb17AALpenBjAALpeVsAAul6cFsAAul6CiMAAukCYncAAum8AwAC3vcAAcDjAALpxmJrAALpym9jAALpzwABjtcAAunGYm8AAunWb2MAAunbAAGO1wAC6cZiXwAC6eJvYwAC6ecAAb2LAALp5wABvZMAAunnAAG9mwAC6cZidwAC6fQDAALe9wABwOcAAun+Yl8AAuoCb2MAAuoHAAG9iwAC6gcAAb2TAALqBwABvZsAAun+YncAAuoUAwAC3vcAAcDrAALqHmJ3AALqIAMAAuoeYl8AAuoqb2MAAuovAAG9iwAC6i8AAb2TAALqLwABvZsAAt73AAHA7wAC6j5idwAC6kADAALqPmJrAALqSm9jAALqTwABjtcAAuo+Ym8AAupWb2MAAupbAAGO1wAC6j5iXwAC6mJvYwAC6mcAAb2LAALqZwABvZMAAupnAAG9mwAC3vbKCwAC6nZiZwAC6npvYwAC6n8AAb1nAALqdmJfAALqhm9jAALqiwABwPMAAuqFIwAC6nZiawAC6pYPBwAC6nZidwAC6pwDAALe9wABwPcAAuqmYmcAAuqqb2MAAuqvAAG9ZwAC6qZiXwAC6rZvYwAC6rsAAcD7AALquwABvQ8AAuq7AAG9EwAC6qZidwAC6sgDAALe9wABwP8AAurSYmcAAurWb2MAAuraH8cAAurSYl8AAurhWwAC6uJwWwAC6uIKIwAC6uJwYwAC6tJiawAC6vZ+TwAC6tJidwAC6vwDAALe9wABwQMAAusGYmcAAusLAAG9nwAC6wsAAcEHAALrBmJfAALrFwABwQsAAusWB+8AAusWCBMAAusWcVcAAusXAAG8dwAC6wZidwAC6ywDAALe9wABwQ8AAus2YmcAAus7AAHAvwAC6zZidwAC60ADAALe9wABwRMAAutKYl8AAutOb2MAAutSzs8AAutTAAG9owAC61MAAbpvAALrSmJ3AALrYAMAAt73AAHBFwAC62piXwAC625vYwAC63MAAb2LAALrcwABvZMAAutzAAG9mwAC62pidwAC64ADAALe9wABwRsAAuuKYmcAAuuOb2MAAuuTAAHBHwAC65MAAb0fAALrkwABwSMAAuuTAAHAowAC65MAAcEnAALrkwABwSsAAuuTAAHBLwAC65MAAcEzAALrkwABwTcAAuuTAAG+rwAC65MAAcE7AALrkwABvpcAAuuTAAGO1wAC65MAAcE/AALrkwABil8AAuuKYl8AAuvSb2MAAuvXAAHA2wAC69cAAcFvAALr1wABwWcAAuvWzs8AAuvXAAG9owAC69cAAbpvAALr1wABvQ8AAuvXAAG9EwAC69cAAcD7AALr1wABvcMAAuvXAAG9iwAC69cAAb2TAALr1wABvZsAAuvXAAHA3wAC69cAAcGHAALr0wABvPMAAuvSB68AAuvSDicAAuvSB+8AAuvSCBMAAuvScVcAAuvTAAHACwAC64piawAC7DJvYwAC7DcAAcC3AALsNwABty8AAuw3AAHArwAC7DcAAcF3AALsNwABwWMAAuw3AAG9ywAC7DcAAcFXAALsNwABwXsAAuw3AAHBawAC7DcAAcF/AALsMwABvK8AAuuKYncAAuxkAwAC3vcAAcGfAALsbmJnAALscm9jAALsdwABvtMAAux3AAG8owAC7G5iXwAC7IIH5wAC7IJvYwAC7IsAAcDzAALsiwABwaMAAuxuYncAAuyUAwAC3vcAAcGnAALsnmJnAALsom9jAALspwABil8AAuynAAHBqwAC7J5iXwAC7LJvYwAC7LcAAcDzAALsnmJ3AALsvAMAAt73AAHBrwAC7MZiZwAC7MpvYwAC7M8AAcGzAALsxmJrAALs1gVXAALsxmJfAALs3wABvdMAAuzeCQsAAuzGYncAAuzoAwAC3vcAAcG/AALs8mJnAALs9g7DAALs8mJfAALs/wABwcMAAuzyYncAAu0EAwAC3vcAAcHHAALtDmJnAALtEgJbAALtDmJfAALtGwABwcMAAu0OYncAAu0gAwAC3vcAAcHLAALtKmJnAALtLgcXAALtLhkXAALtKmJfAALtOwABwcMAAu0qYncAAu1AAwAC3vcAAcHPAALtSmJfAALtTwABwcMAAu1KYmsAAu1WDsMAAu1KYm8AAu1eDsMAAu1KYncAAu1kAwAC3vcAAcHXAALtbmJnAALtcm9jAALtdwABwdsAAu13AAHB3wAC7XcAAcCjAALtdwABjtcAAu1uYmsAAu2KBVcAAu2LAAG8iwAC7YpvYwAC7ZcAAcHjAALtbmJfAALtnwABwUMAAu2fAAHBXwAC7Z8AAb3TAALtngkLAALtbmJ3AALtsAMAAt73AAHB5wAC7bpiZwAC7b8AAcHrAALtvwABwe8AAu26YmsAAu3KBVcAAu26Yl8AAu3RWwAC7dMAAb3TAALt0gkLAALtumJ3AALt4AMAAt73AAHB8wAC7epiZwAC7e5vYwAC7fMAAcH3AALt8wABwfsAAu3zAAHB/wAC7fMAAb6XAALt8wABjtcAAu3zAAHBOwAC7epiawAC7g5vYwAC7hMAAcIHAALuEwABwgsAAu4PAAG8rwAC7epiXwAC7iJvYwAC7icAAcIDAALuJwABvZsAAu4jAAG88wAC7iIHrwAC7iIOJwAC7iIH7wAC7iIIEwAC7iJxVwAC7iMAAcALAALt6mJ3AALuTAMAAt73AAHCDwAC7lZiZwAC7lpvYwAC7l7mlwAC7l8AAcITAALuXwABwhcAAu5fAAG+lwAC7l8AAb1nAALuXnFPAALuVmJrAALuewABvNMAAu56b2MAAu6DAAHCKwAC7lZiXwAC7ooH5wAC7opvYwAC7pMAAcD7AALukwABwaMAAu6TAAHCHwAC7pMAAcIjAALukwABwicAAu5WYncAAu6oAwAC3vcAAcIvAALusmJnAALutm9jAALuuwABwD8AAu6yYl8AAu7DAAG88wAC7sIHrwAC7sIOJwAC7sIH7wAC7sIIEwAC7sJxVwAC7sMAAcALAALusmJrAALu4wABvK8AAu6yYncAAu7oAwAC3vZxSwAC7vJiZwAC7vZvYwAC7vpxTwAC7vsAAcI3AALu+wABwVcAAu7yYmsAAu8JewAC7vJiXwAC7xF3AALvEm9jAALvGwABwj8AAu8bAAHBNwAC7xsAAb6vAALvGwABwTsAAu8ScVcAAu7yYncAAu8wAwAC3vcAAcJLAALvOmJrAALvPwABvNMAAu86Yl8AAu9GB+cAAu86YncAAu9MAwAC3vcAAcJPAALvVmJnAALvWm9jAALvXuaXAALvVmJrAALvZwABvNMAAu9WYl8AAu9uB+cAAu9ub2MAAu93AAHA8wAC73cAAcJTAALvdwABwlcAAu93AAHCWwAC71ZidwAC74gDAALe9wABwl8AAu+SYmcAAu+Wb2MAAu+bAAHAPwAC75pxTwAC75JiXwAC76ZvYwAC76rOzwAC76sAAb2jAALvqwABvQ8AAu+rAAG9EwAC76sAAcD7AALvqwABwlMAAu+rAAHCVwAC76sAAcJbAALvkmJ3AALvzAMAAt73AAHCYwAC79ZiZwAC79pvYwAC798AAcJnAALv1mJfAALv5m9jAALv6wABwlMAAu/WYncAAu/wAwAC3vcAAcJvAALv+mJnAALv/m9jAALwAwABwnMAAu/6Yl8AAvAKb2MAAvAPAAHCUwAC7/pidwAC8BQDAALe9wABwnsAAvAeYmcAAvAib2MAAvAnAAHCfwAC8B5iXwAC8C5vYwAC8DMAAcJTAALwHmJ3AALwOAMAAt73AAHCgwAC8EJiZwAC8EZvYwAC8EsAAcJzAALwSwABwmcAAvBCYl8AAvBWb2MAAvBbAAHCVwAC8EJidwAC8GADAALe9wABwocAAvBqYmcAAvBub2MAAvBynucAAvBqYl8AAvB6b2MAAvB/AAHA8wAC8H8AAcJTAALwamJ3AALwiAMAAt73AAHCiwAC8JJiZwAC8JZvYwAC8JsAAcKPAALwkmJrAALwom9jAALwpwABwpMAAvCmnucAAvCmXDMAAvCSYm8AAvC2b2MAAvC7AAHCkwAC8Lqe5wAC8LpcMwAC8JJidwAC8MgDAALe9wABwpcAAvDSYmcAAvDWb2MAAvDbAAHCZwAC8NJiXwAC8OJvYwAC8OcAAcJTAALw0mJ3AALw7AMAAt73AAHCmwAC8PZiZwAC8PpvYwAC8P6e5wAC8PZiXwAC8QZvYwAC8QsAAcDzAALxCwABwlMAAvD2YncAAvEUAwAC3vcAAcKfAALxHmJnAALxIm9jAALxJwABwmcAAvEeYl8AAvEub2MAAvEzAAHA8wAC8TMAAcJTAALxHmJ3AALxPAMAAt73AAHCpwAC8UZiZwAC8UpvYwAC8U8AAcKrAALxTvGrAALxRmJfAALxWm9jAALxXwABwPMAAvFfAAHCUwAC8UZidwAC8WgDAALe9wABwrcAAvFyYmcAAvF2b2MAAvF6XPMAAvFyYl8AAvGBWwAC8YJwWwAC8YIKIwAC8XJidwAC8ZADAALe9wABwrsAAvGaYmcAAvGeb2MAAvGjAAHCvwAC8aJxTwAC8ZpiawAC8a5vYwAC8bMAAcLLAALxmmJfAALxum9jAALxvs7PAALxvwABvaMAAvG/AAG6bwAC8b8AAb0PAALxvwABvRMAAvG/AAHA+wAC8b8AAcJTAALxvwABwlcAAvG/AAHCWwAC8ZpidwAC8eQDAALe9wABwtMAAvHuYmcAAvHyb2MAAvH3AAHC1wAC8e5iXwAC8f557wAC8e5idwAC8gQDAALe9wABwtsAAvIOYmcAAvISb2MAAvIXAAHC1wAC8hcAAcA/AALyDmJrAALyIwABvNMAAvIOYl8AAvIqB+cAAvIOYncAAvIwAwAC3vcAAcLfAALyOmJnAALyPm9jAALyQwABwlMAAvJDAAHCVwAC8kMAAcJbAALyQlzzAALyOmJrAALyVm9jAALyWwABty8AAvI6Yl8AAvJhWwAC8mJwWwAC8mIKIwAC8jpidwAC8nADAALe9wABwusAAvJ6Yl8AAvJ+ee8AAvJ6YncAAvKEAwAC3vcAAcLzAALyjmJnAALykm9jAALylstrAALyjmJfAALynnnvAALyjmJ3AALypAMAAt73AAHC9wAC8q5iZwAC8rJvYwAC8rcAAcGjAALyrmJfAALyvnnvAALyrmJ3AALyxAMAAt73AAHC+wAC8s5iZwAC8tJvYwAC8tcAAcGjAALy1wABwD8AAvLOYmsAAvLjAAG80wAC8s5iXwAC8uoH5wAC8s5idwAC8vADAALe9wABwv8AAvL6YnMAAvL8AwAC8v8AAb+/AALy+mJfAALzCgpvAALzCnFXAALzCm9jAALzFwABwxMAAvMXAAHDGwAC8vpiawAC8yMAAcMPAALzIiKXAALe9wABwx8AAvMuYmcAAvMyBxcAAvMyGRcAAvMuYl8AAvM8jwAC8y5iawAC80ZvHwAC80sAAcMjAALzLmJvAALzUm8fAALzVwABwyMAAvMuYncAAvNcAwAC3vcAAcMrAALzZmJnAALzapHXAALzagmrAALzZmJ3AALzdAMAAt72kW8AAvN+YmcAAvOCb2MAAvOGWSMAAvN+YnMAAvOMAwAC845YuwAC835iawAC85sAAb9rAALzmgpvAALzmpHHAALzmpHPAALzmwABvyMAAvObAAG/GwAC85sAAcFHAALzmwABvY8AAvObAAG/QwAC85sAAcAbAALzmwABwwcAAvObAAEcBwAC85sAAcMvAALe9wABwzMAAvPSYmcAAvPXAAG/awAC89YKbwAC89aRxwAC89aRzwAC89cAAb8jAALz1wABvxsAAvPXAAHBRwAC89cAAb2PAALz1wABv0MAAvPXAAHAGwAC89cAAcMHAALz1wABHAcAAvPXAAHDLwAC89JidwAC9AwDAALe9pFrAAL0FmJfAAL0GwABv2sAAvQaCm8AAvQakccAAvQakc8AAvQbAAG/IwAC9BsAAb8bAAL0GwABwUcAAvQbAAG9jwAC9BsAAb9DAAL0GwABwBsAAvQbAAHDBwAC9BsAARwHAAL0GwABwy8AAvQWYncAAvRQAwAC3vYiUwAC9FpiZwAC9F4bYwAC9F5vYwAC9GYi7wAC9FpiawAC9G17AAL0bhFLAAL0bwABwzcAAvRaYl8AAvR/AAG/awAC9H8AAb93AAL0fwABwy8AAvR+Cm8AAvR+kccAAvR+kc8AAvR/AAHBlwAC9H8AAcAnAAL0fwABwY8AAvR/AAG/IwAC9H8AAb8bAAL0fwABwUcAAvR/AAHDRwAC9H8AAcNLAAL0fwABw08AAvR/AAHDAwAC9H8AAb47AAL0fwABw1MAAvR/AAG9jwAC9H8AAb9DAAL0fwABwBsAAvR/AAHDBwAC9H8AARwHAAL0fm9jAAL03wABw1cAAvTfAAHDWwAC9H0vAAL0WmJ3AAL07m9jAAL08gLXAALe9wABw18AAvT6YmcAAvT+b2MAAvUDAAHDYwAC9PpiXwAC9QsAAb9rAAL1CgpvAAL1CpHHAAL1CpHPAAL1CwABvyMAAvULAAG/GwAC9QsAAcFHAAL1CwABvY8AAvULAAG/QwAC9QsAAcAbAAL1CwABwwcAAvULAAEcBwAC9QsAAcMvAAL0+mJ3AAL1QAMAAt73AAHDjwAC9UpiawAC9U5vYwAC9VKRwwAC9VKRywAC9VKR0wAC9VMAAcNzAAL1UwABw3cAAvVTAAHDewAC9VMAAcN/AAL1UwABw4MAAvVTAAHDEwAC9VMAAcMbAAL1UwABw4cAAvVTAAHDiwAC9VMAAcNrAAL1UrtLAAL1UqhvAAL1ThFLAAL1SmJfAAL1lwABv3cAAvVKYncAAvWcAwAC3vcAAcOTAAL1pmJnAAL1qm9jAAL1rpHDAAL1rpHLAAL1rpHTAAL1rwABw3MAAvWvAAHDdwAC9a8AAcN7AAL1rwABw38AAvWvAAHDgwAC9a8AAcMTAAL1rwABwxsAAvWvAAHDhwAC9a8AAcOLAAL1rwABw2sAAvWvAAHDlwAC9a6obwAC9aoRSwAC9aZiawAC9fJvYwAC9fa7SwAC9fMAAcM3AAL1pmJfAAL2AwABwZcAAvYDAAHAJwAC9gMAAcGPAAL2AwABw0cAAvYDAAHDSwAC9gMAAcNPAAL2AwABwwMAAvYDAAG+OwAC9gMAAcNTAAL2AS8AAvYDAAG/awAC9gMAAcMvAAL2AgpvAAL2ApHHAAL2ApHPAAL2AwABvyMAAvYDAAG/GwAC9gMAAcFHAAL2AwABvY8AAvYDAAG/QwAC9gMAAcAbAAL2AwABwwcAAvYDAAEcBwAC9aZidwAC9mADAALe9wABw6cAAvZqYmcAAvZub2MAAvZzAAHDqwAC9nMAAcOvAAL2amJrAAL2fm9jAAL2gpHDAAL2gpHLAAL2gpHTAAL2gwABw3MAAvaDAAHDdwAC9oMAAcN7AAL2gwABw38AAvaDAAHDgwAC9oMAAcMTAAL2gwABwxsAAvaDAAHDhwAC9oMAAcOLAAL2gwABw2sAAvaCqG8AAvaCu0sAAvZ+EUsAAvZ/AAHDNwAC9mpiXwAC9ssAAcGXAAL2ywABwCcAAvbLAAHBjwAC9ssAAcNHAAL2ywABw0sAAvbLAAHDTwAC9ssAAcMDAAL2ywABvjsAAvbLAAHDUwAC9skvAAL2ywABv2sAAvbLAAHDLwAC9soKbwAC9sqRxwAC9sqRzwAC9ssAAb8jAAL2ywABvxsAAvbLAAHBRwAC9ssAAb2PAAL2ywABv0MAAvbLAAHAGwAC9ssAAcMHAAL2ywABHAcAAvZqYncAAvcoAAJ6/wAC9zJiYwAC9zcAAbwPAAL3NwABxQMAAvc3AAG8AwAC9zJiZwAC90Z6/wAC90sAAcjvAAL3SwABrFMAAvcyYl8AAvdWev8AAvdbAAHI8wAC91sAAcj3AAL3WwAByPsAAvdbAAGsVwAC91sAAcj/AAL3WwAByRcAAvdbAAHJGwAC9zMAAcUHAAL3emJnAAL3fnr/AAL3gwABrgsAAveDAAHFCwAC94MAAcUPAAL3gwABxRMAAvd6YmsAAveVhwAC95YFVwAC95YOywAC95YNiwAC95SnAAL3emJfAAL3rh0fAAL3rwABDNMAAvetLwAC964C/wAC965kdwAC964ClwAC964P4wAC964RZwAC964JCwAC9656/wAC99cAAcUjAAL31wABxRsAAvfXAAHFMwAC99cAAcU/AAL3emJ3AAL36AMAAvczAAHFQwAC9/JiZwAC9/Z6/wAC9/rxqwAC9/oZ/wAC9/sAAcVHAAL38mJfAAL4Ch0fAAL4CS8AAvgKAv8AAvgKZHcAAvgKEWcAAvgKev8AAvgjAAHFPwAC9/JidwAC+CgDAAL3MwABxU8AAvgyYl8AAvg2HR8AAvg1LwAC+DYC/wAC+DZkdwAC+DYRZwAC+DZ6/wAC+E8AAcU/AAL4MmJ3AAL4VAMAAvczAAHFUwAC+F5iZwAC+GIPRwAC+GICWwAC+GIPBwAC+GIOwwAC+F5idwAC+HQDAAL3MwABxVcAAvh+YmcAAviCev8AAviGqG8AAvh+YmsAAviNhwAC+I4FVwAC+I4OywAC+H5idwAC+JwDAAL3MwABxVsAAvimYmsAAvipcwAC+KZiXwAC+LIMXwAC+LIP4wAC+LJUZwAC+KZidwAC+MADAAL3MwABxV8AAvjKYmsAAvjNcwAC+MpiXwAC+NYMXwAC+NYP4wAC+MpidwAC+OADAAL3MwABxWMAAvjqYmcAAvjuev8AAvjyqG8AAvjzAAHFZwAC+PJccwAC+PMAAcVrAAL46mJfAAL5BXcAAvjqYncAAvkMAwAC9zMAAcVvAAL5FmJrAAL5GXsAAvkWYncAAvkgAwAC9zMAAcVzAAL5KmJrAAL5LXsAAvkqYncAAvk0AwAC9zMAAcV3AAL5PmJnAAL5Qnr/AAL5RwABrgsAAvlHAAHFDwAC+UcAAcULAAL5RwABxRMAAvk+Yl8AAvlaev8AAvle8asAAvleGf8AAvlfAAHFewAC+V8AAcV/AAL5XwABxYMAAvlfAAHFGwAC+V8AAcUzAAL5XlyHAAL5XwABxZMAAvlaDF8AAvlaW/MAAvlZWwAC+VoClwAC+VoRZwAC+Vpb9wAC+Vpb+wAC+VpcBwAC+VoJCwAC+T5iawAC+alzAAL5qYcAAvmqBVcAAvmqDssAAvmqDGcAAvmqB6MAAvk+YncAAvnEAwAC9zMAAcWXAAL5zmJfAAL50nr/AAL51hn/AAL51vGrAAL51lyHAAL51wABxZMAAvnOYncAAvnoAwAC9zMAAcWbAAL58mJnAAL59nr/AAL5+wABxZ8AAvn7AAEhfwAC+fsAAcVHAAL58mJfAAL6ChFnAAL6CgxfAAL6ClvzAAL6ChALAAL6Clv3AAL6Cnr/AAL6IvGrAAL6Ihn/AAL6IlyHAAL6IwABxZMAAvnyYncAAvo0AwAC9zMAAcWjAAL6PmJnAAL6Qg9HAAL6Qg8HAAL6Qg7DAAL6PmJfAAL6UhFnAAL6PmJ3AAL6WAMAAvczAAHFpwAC+mJiZwAC+mZ6/wAC+msAAa7PAAL6awABxRMAAvpqXHMAAvprAAG86wAC+moi7wAC+mJiXwAC+oF3AAL6YmJrAAL6iXsAAvpiYncAAvqQAwAC9zMAAcWrAAL6mmJnAAL6nnr/AAL6olxzAAL6owABxa8AAvqi23MAAvqjAAHFswAC+qMAAcW3AAL6mmJ3AAL6uAMAAvczAAHFvwAC+sJiawAC+sZ6/wAC+spccwAC+ssAAcWvAAL6yttzAAL6ywABxbMAAvrLAAHFtwAC+sJibwAC+uJ6/wAC+uZccwAC+ucAAcWvAAL65ttzAAL65wABxbMAAvrnAAHFtwAC+sJidwAC+vwDAAL3MwABxfsAAvsGYmcAAvsKev8AAvsPAAHF/wAC+w8AAcYDAAL7DwABxgcAAvsPAAHGCwAC+wZiXwAC+yJ6/wAC+ycAAcYPAAL7JwABxhsAAvsnAAHGKwAC+ycAAcYzAAL7JwABxjcAAvsnAAHGPwAC+ycAAcZHAAL7BmJrAAL7Rnr/AAL7SwABxkMAAvtFhwAC+wZidwAC+1QDAAL3MwABxlMAAvteYl8AAvtiev8AAvtmGf8AAvtm8asAAvteYncAAvtwAwAC9zMAAcZXAAL7emJfAAL7fnr/AAL7ghn/AAL7gvGrAAL7emJ3AAL7jAMAAvczAAHGWwAC+5ZidwAC+5gDAAL7lmJrAAL7og2LAAL7og9DAAL7oYcAAvuiBVcAAvuiDssAAvugpwAC+5ZiXwAC+70vAAL7vgL/AAL7vhFnAAL7vgkLAAL7vljjAAL7vg/jAAL7vgKXAAL7vwABDNMAAvu+ZHcAAvu+sMsAAvu/AAEM5wAC+74CrwAC+78AAQzbAAL7vlv7AAL7vh0fAAL7vI8AAvczAAHGZwAC/AJidwAC/AQDAAL8AmJfAAL8Dnr/AAL8Ehn/AAL8EvGrAAL8EwABxkcAAvwTAAHGawAC/BMAAcZvAAL8EwABxncAAvwTAAHGfwAC/BMAAcaHAAL8EwABxpMAAvwOCQsAAvwOAv8AAvwOZHcAAvwOEWcAAvwOHR8AAvwNLwAC/A8AAQzTAAL8Dg/jAAL8AmJrAAL8Wnr/AAL8XwABxkMAAvxZhwAC/FoFVwAC/FoOywAC/FoNiwAC/FinAAL3MwABxp8AAvx6YncAAvx8AwAC/HpiZwAC/IZ6/wAC/IsAAcX/AAL8iwABxgMAAvyLAAHGBwAC/IsAAcYLAAL8emJfAAL8nnr/AAL8owABxg8AAvyjAAHGGwAC/KMAAcYrAAL8owABxjMAAvyjAAHGNwAC/KMAAcY/AAL8owABxkcAAvx6YmsAAvzCev8AAvzHAAHGQwAC/MGHAAL3MwABxqMAAvzSYncAAvzUAwAC/NJiXwAC/N56/wAC/OIZ/wAC/OLxqwAC9zMAAcanAAL87mJ3AAL88AMAAvczAAHGqwAC/PpiXwAC/P56/wAC/QIZ/wAC/QLxqwAC/QMAAcZHAAL9AwABxmsAAv0DAAHGbwAC/QMAAcZ3AAL9AwABxn8AAv0DAAHGhwAC/QMAAcaTAAL8/gkLAAL8/gL/AAL8/mR3AAL8/hFnAAL8/h0fAAL8/S8AAvz/AAEM0wAC/P4P4wAC/PpiawAC/Up6/wAC/U8AAcZDAAL9SYcAAv1KBVcAAv1KDssAAv1KDYsAAv1IpwAC/PpidwAC/WgDAAL3MwABxq8AAv1yYncAAv10AwAC/XJiawAC/X4NiwAC/X4PQwAC/X2HAAL9fgVXAAL9fg7LAAL9fKcAAv1yYl8AAv2ZLwAC/ZoC/wAC/ZoRZwAC/ZoJCwAC/ZpY4wAC/ZoP4wAC/ZoClwAC/ZsAAQzTAAL9mmR3AAL9mrDLAAL9mwABDOcAAv2aAq8AAv2bAAEM2wAC/Zpb+wAC/ZodHwAC/ZiPAAL3MwABxrMAAv3eYncAAv3gAwAC/d5iXwAC/ep6/wAC/e4Z/wAC/e7xqwAC/e8AAcZHAAL97wABxmsAAv3vAAHGbwAC/e8AAcZ3AAL97wABxn8AAv3vAAHGhwAC/e8AAcaTAAL96gkLAAL96gL/AAL96mR3AAL96hFnAAL96h0fAAL96S8AAv3rAAEM0wAC/eoP4wAC/d5iawAC/jZ6/wAC/jsAAcZDAAL+NYcAAv42BVcAAv42DssAAv42DYsAAv40pwAC9zMAAca3AAL+VmJ3AAL+WAMAAv5WYmcAAv5iev8AAv5nAAHF/wAC/mcAAcYDAAL+ZwABxgcAAv5nAAHGCwAC/lZiXwAC/np6/wAC/n8AAcYPAAL+fwABxhsAAv5/AAHGKwAC/n8AAcYzAAL+fwABxjcAAv5/AAHGPwAC/n8AAcZHAAL+VmJrAAL+nnr/AAL+owABxkMAAv6dhwAC9zMAAca7AAL+rmJ3AAL+sAMAAv6uYl8AAv66ev8AAv6+Gf8AAv6+8asAAvczAAHGvwAC/spidwAC/swDAAL3MwABxsMAAv7WYncAAv7YAwAC/tZiawAC/uINiwAC/uIPQwAC/uGHAAL+4gVXAAL+4g7LAAL+4KcAAv7WYl8AAv79LwAC/v4C/wAC/v4RZwAC/v4JCwAC/v5Y4wAC/v4P4wAC/v4ClwAC/v8AAQzTAAL+/mR3AAL+/rDLAAL+/wABDOcAAv7+Aq8AAv7/AAEM2wAC/v5b+wAC/v4dHwAC/vyPAAL3MwABxscAAv9CYncAAv9EAwAC/0JiXwAC/056/wAC/1IZ/wAC/1LxqwAC/1MAAcZHAAL/UwABxmsAAv9TAAHGbwAC/1MAAcZ3AAL/UwABxn8AAv9TAAHGhwAC/1MAAcaTAAL/TgkLAAL/TgL/AAL/TmR3AAL/ThFnAAL/Th0fAAL/TS8AAv9PAAEM0wAC/04P4wAC/0JiawAC/5p6/wAC/58AAcZDAAL/mYcAAv+aBVcAAv+aDssAAv+aDYsAAv+YpwAC9zMAAcbLAAL/umJ3AAL/vAMAAv+6YmcAAv/Gev8AAv/LAAHF/wAC/8sAAcYDAAL/ywABxgcAAv/LAAHGCwAC/7piXwAC/956/wAC/+MAAcYPAAL/4wABxhsAAv/jAAHGKwAC/+MAAcYzAAL/4wABxjcAAv/jAAHGPwAC/+MAAcZHAAL/umJrAAMAAnr/AAMABwABxkMAAwABhwAC9zMAAcbPAAMAEmJnAAMAFnr/AAMAGwABxZ8AAwAbAAEhfwADABsAAcVHAAMAEmJfAAMAKnr/AAMALhn/AAMALvGrAAMAKh0fAAMAKS8AAwAqEWcAAwASYncAAwBEAwAC9zMAAcbTAAMATmJnAAMAUnr/AAMAVwABrlMAAwBW23MAAwBXAAHG1wADAFcAAbbXAAMAVwABxtsAAwBOYmsAAwBtcwADAG2HAAMAbgVXAAMAbg7LAAMATmJ3AAMAgAMAAvczAAHG3wADAIpiZwADAI56/wADAJMAAa5TAAMAkttzAAMAkwABxtcAAwCTAAG21wADAJMAAcbbAAMAkwABxkMAAwCNewADAIpiXwADALF3AAMAimJ3AAMAuAMAAvczAAHG4wADAMJidwADAMQDAAMAwmJnAAMAznr/AAMA0wABxf8AAwDTAAHGAwADANMAAcYHAAMA0wABxgsAAwDCYl8AAwDmev8AAwDrAAHGDwADAOsAAcYbAAMA6wABxisAAwDrAAHGMwADAOsAAcY3AAMA6wABxj8AAwDrAAHGRwADAMJiawADAQp6/wADAQ8AAcZDAAMBCYcAAvczAAHG5wADARpidwADARwDAAMBGmJfAAMBJnr/AAMBKhn/AAMBKvGrAAL3MwABxusAAwE2YncAAwE4AwADATZiXwADAUFbAAMBQgxfAAMBQlvzAAMBQhFnAAMBQlRnAAMBQljjAAMBQlj3AAMBQlkbAAMBQgkLAAMBQgKXAAMBQlv3AAMBQlwDAAMBQlv7AAMBQlwHAAMBQhALAAMBQlwLAAMBQlwPAAMBQlwTAAMBQgK3AAMBQgKvAAMBQI8AAwFCBpcAAwFCEj8AAwFCD+MAAwFCWQMAAwFCDWcAAwFCWNsAAwFBYwADAUIHUwADAUJZEwADAUJZFwADAUJYvwADAUJZDwADAUJY6wADAUJY/wADAUJZCwADAUJY5wADATZiawADAdlzAAMB2YcAAwHaBVcAAwHaDssAAwHaAw8AAwHaDGcAAwHaB6MAAvczAAHG9wADAfpiXwADAf56/wADAgMAAcV7AAMCAwABxmsAAwIDAAHGbwADAgMAAcb7AAMCAwABxncAAwH+WOMAAwH+CQsAAwH9WwADAf5b8wADAf4MXwADAf4RZwADAf5UZwADAfpiawADAjWHAAMCNgxnAAMCNgejAAMCNXMAAwH6YncAAwJIAwAC9zMAAcb/AAMCUmJ3AAMCVAMAAwJSYl8AAwJeev8AAwJiGf8AAwJi8asAAvczAAHHAwADAm5iXwADAnJUZwADAnJ6/wADAnsAA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YcAAwlCDYsAAwlApwADCUIPQwADCO5idwADCVwDAAL3MwABx78AAwlmYncAAwloAwADCWZiXwADCXIC/wADCXIClwADCXMAAQzbAAMJcgkLAAMJchFnAAMJclv7AAMJcmR3AAMJcrDLAAMJcwABDOcAAvcychsAAwmaYl8AAwmeWOMAAwmaYncAAwmkAwAC9zJ8JwADCa5iZwADCbJ6/wADCbZZIwADCa5icwADCbwDAAMJvli7AAMJvmjnAAMJrmJfAAMJzwABv9sAAwnOWOMAAwnOfJcAAwnOGF8AAwnPAAGuewADCc4QiwADCc1bAAMJzhFnAAMJzgKXAAMJzlv7AAMJzlwHAAMJzgkLAAL3MwABx8MAAwoCYmcAAwoGev8AAwoLAAHHxwADCgsAAcfLAAMKAmJfAAMKFnr/AAMKGlk7AAMKGwABx1MAAwoCYncAAwokAwAC9zMAAcfPAAMKLmJnAAMKMlibAAMKLmJfAAMKOwABkysAAwo6D6MAAwo6EWcAAwo7AAHH0wADCjsAAcfXAAMKLmJ3AAMKUAMAAvczAAHH2wADClpiZwADCl56/wADCmLTewADClpiXwADCmp6/wADCm8AAcffAAMKbwABx+MAAwpvAAHH5wADCm8AAcV/AAMKawABx9cAAwprAAHH0wADClpiawADCop6/wADCo5cYwADClpidwADCpQDAAL3MwABx+sAAwqeYl8AAwqjAAGTKwADCqIPowADCqJ6/wADCq8AAcV/AAMKrwABx98AAwqiEWcAAwqeYncAAwq8AwAC9zMAAcfvAAMKxmJfAAMKynr/AAMKzwABx98AAwrPAAHFfwADCsZiawADCtp6/wADCt5cYwADCsZidwADCuQDAAL3MwABx/MAAwruYmcAAwryev8AAwr3AAHH9wADCvcAAcULAAMK7mJzAAMLAli7AAMLAmjnAAMK7mJfAAMLDljjAAMLDhCLAAMLDwABrnsAAwsNWwADCw4ClwADCw4YXwADCw58lwADCw4RZwADCw56/wADCzJ/BwADCw5b+wADCw5cBwADCw8AAcf/AAMLDwABx/sAAwsOCQsAAwsPAAHIAwADCwyPAAMK7mJrAAMLVYcAAwtWDGcAAwtWB6MAAwtWAw8AAwtWBVcAAwtVcwADCu5idwADC3ADAAL3MwAByAcAAwt6YmcAAwt+ev8AAwuDAAHH9wADC4MAAcgLAAMLgiLvAAMLemJfAAMLkXcAAwt6YmsAAwuZewADC3pidwADC6ADAAL3MwAByBMAAwuqYmcAAwuuev8AAwuzAAGuCwADC7MAAa5TAAMLswABrlcAAwuzAAGuWwADC7MAAcUTAAMLqmJzAAMLyli7AAMLymjnAAMLqmJfAAML1ljjAAML1g/jAAML1ljnAAML1gK3AAML1VsAAwvWApcAAwvWEWcAAwvWev8AAwv3AAHFgwADC/cAAa6TAAML9wABrpcAAwv3AAHIFwADC/bOzwADC/cAAcV/AAML9wABC0cAAwv3AAGuowADC/cAAa5vAAML1lv7AAML1lwHAAML1gkLAAML1I8AAwvWEIsAAwvXAAGuewADC9Z8lwADC9YYXwADC6piawADDD1zAAMMPgVXAAMMPYcAAww+DGcAAww+B6MAAww+Aw8AAwuqYncAAwxYAwAC9zMAAcgrAAMMYmJnAAMMZnr/AAMMatN7AAMMawABEYMAAwxrAAHFEwADDGsAAcgvAAMMaiLvAAMMYmJrAAMMgXsAAwxiYl8AAwyJdwADDGJidwADDJADAAL3MwAByDMAAwyaYl8AAwydWwADDJ4MXwADDJ5b8wADDJ4RZwADDJ5UZwADDJ5Y4wADDJ5Y9wADDJ5ZGwADDJ4JCwADDJ4ClwADDJ5b9wADDJ5cAwADDJ5b+wADDJ5cBwADDJ4QCwADDJ5cCwADDJ5cDwADDJ5cEwADDJ4CtwADDJ4CrwADDJyPAAMMngaXAAMMnhI/AAMMng/jAAMMnlkDAAMMng1nAAMMnljbAAMMnWMAAwyeB1MAAwyeWRMAAwyeWRcAAwyeWL8AAwyeWQ8AAwyeWOsAAwyeWP8AAwyeWQsAAwyeWOcAAwyaYmsAAw01cwADDTWHAAMNNgVXAAMNNg7LAAMNNgMPAAMNNgxnAAMNNgejAAMMmmJ3AAMNVAMAAvczAAHINwADDV5idwADDWADAAMNXmJfAAMNaVsAAw1qDF8AAw1qW/MAAw1qEWcAAw1qVGcAAw1qWOMAAw1qWPcAAw1qWRsAAw1qCQsAAw1qApcAAw1qW/cAAw1qXAMAAw1qW/sAAw1qXAcAAw1qEAsAAw1qXAsAAw1qXA8AAw1qXBMAAw1qArcAAw1qAq8AAw1ojwADDWoGlwADDWoSPwADDWoP4wADDWpZAwADDWoNZwADDWpY2wADDWljAAMNagdTAAMNalkTAAMNalkXAAMNali/AAMNalkPAAMNaljrAAMNalj/AAMNalkLAAMNaljnAAMNXmJrAAMOAXMAAw4BhwADDgIFVwADDgIOywADDgIDDwADDgIMZwADDgIHowAC9zJcewADDiJiXwADDicAAcg7AAMOImJ3AAMOLAMAAvczAAHIPwADDjZiXwADDjp6/wADDj5chwADDj8AAcWTAAMOOljjAAMOOlwTAAMOOlwPAAMOOlRnAAMOOlj3AAMOOlkbAAMOOgkLAAMOOgKXAAMOOlv3AAMOOlwDAAMOOlv7AAMOOlwHAAMOOhALAAMOOlwLAAMOOgK3AAMOOgKvAAMOOI8AAw46BpcAAw46Ej8AAw46D+MAAw46WQMAAw46DWcAAw46WNsAAw45YwADDjoHUwADDjpZEwADDjpZFwADDjpYvwADDjpZDwADDjpY6wADDjpY/wADDjpZCwADDjpY5wADDjZiawADDs4FVwADDs4OywADDs4DDwADDs4MZwADDs4HowADDjZidwADDuQDAAL3MqhrAAMO7mJnAAMO8nr/AAMO9qhvAAMO7mJfAAMO/nr/AAMPAlyHAAMPAwABxZMAAw7+DF8AAw7+W/MAAw79WwADDv4JCwADDv4ClwADDv5b9wADDv5cAwADDv5b+wADDv5cBwADDv4RZwADDu5iawADDzVzAAMPNYcAAw7uYncAAw9AAwAC9zMAAchHAAMPSmJnAAMPTg9HAAMPThbXAAMPThbfAAMPSmJ3AAMPXAMAAvczAAHISwADD2ZiZwADD2oCWwADD2ZidwADD3ADAAL3MwAByE8AAw96YmcAAw9+ev8AAw+CnucAAw+DAAHFEwADD4MAAchTAAMPemJrAAMPknr/AAMPlwABs0MAAw+XAAHIVwADD5cAAchbAAMPlwABxUcAAw+XAAHHRwADD5cAAchzAAMPemJvAAMPsnr/AAMPtwABs0MAAw96Yl8AAw++ev8AAw/DAAHIXwADD8MAAchjAAMPwwAByGcAAw/DAAHIawADD8MAAcV/AAMPwwAByG8AAw/DAAHIdwADD3pidwADD+ADAAL3MwAByHsAAw/qYl8AAw/uW/8AAw/qYncAAw/0AwAC9zMAAch/AAMP/mJ3AAMQAAMAAw/+YmsAAxAKDYsAAxAKD0MAAxAJhwADEAoFVwADEAoOywADEAinAAMP/mJfAAMQJS8AAxAmAv8AAxAmEWcAAxAmCQsAAxAmWOMAAxAmD+MAAxAmApcAAxAnAAEM0wADECZkdwADECawywADECcAAQznAAMQJgKvAAMQJwABDNsAAxAmW/sAAxAmHR8AAxAkjwAC9zMAAciDAAMQamJnAAMQbnr/AAMQcwABs0MAAxBzAAHIVwADEHMAAchbAAMQcwABxUcAAxBqYnMAAxCGWLsAAxCGaOcAAxCHAAG/uwADEIcAAccLAAMQamJfAAMQmnr/AAMQnwAByF8AAxCZLwADEJoRZwADEJoC/wADEJpkdwADEJoClwADEJoP4wADEJoJCwADEJodHwADEJsAAQzTAAMQmwAByJMAAxCbAAHIlwADEJsAAcibAAMQmwAByJ8AAxBqYmsAAxDaBVcAAxDaDssAAxDZhwADENoNiwADENinAAMQamJ3AAMQ8AMAAxDyev8AAxD6GW8AAvczAAHIowADEQJiZwADEQZ6/wADEQsAAcinAAMRCwAByKsAAxELAAHFEwADEQsAAchTAAMRCwAByK8AAxECYmsAAxEhewADEQJiXwADESp6/wADES8AAcizAAMRLwAByMMAAxEvAAHIvwADESl3AAMRAmJ3AAMRQAMAAxFDAAHItwAC9zMAAcjHAAMRTmJnAAMRUnr/AAMRVwAByKcAAxFOYmsAAxFdhwADEV4FVwADEV1zAAMRTmJfAAMRblRnAAMRTmJ3AAMRdAMAAvczAAHIzwADEX5iZwADEYJ6/wADEYaobwADEX5iawADEY2HAAMRjgVXAAMRjXMAAxF+YncAAxGcAwAC9zMAAcjTAAMRpmJfAAMRqnr/AAMRrwAByL8AAxGmYncAAxG0AwAC9zMAAcjXAAMRvmJfAAMRwnr/AAMRxwAByL8AAxG+YncAAxHMAwAC9zMAAcjfAAMR1mJfAAMR2nr/AAMR3wAByL8AAxHWYncAAxHkAwADEecAAci3AAL3MwAByOMAAxHyYncAAxH0AwADEfJiXwADEf5Y4wADEf4CrwADEf4GlwADEf5ZGwADEf4SPwADEf5Y9wADEf4MXwADEf4P4wADEf5ZAwADEf4NZwADEf5Y2wADEf1jAAMR/gdTAAMR/gK3AAMR/lRnAAMR/lkTAAMR/lkXAAMR/li/AAMR/lkPAAMR/ljrAAMR/lj/AAMR/lkLAAMR/ljnAAMR/I8AAxHyYmsAAxJhhwADEmIFVwADEmIOywADEmIMZwADEmIHowADEmIDDwAC9zMAAcjnAAMSfmJ3AAMSgAMAAxJ+Yl8AAxKJWwADEooMXwADEopb8wADEooRZwADEopUZwADEopY4wADEopY9wADEopZGwADEooJCwADEooClwADEopb9wADEopcAwADEopb+wADEopcBwADEooQCwADEopcCwADEopcDwADEopcEwADEooCtwADEooCrwADEoiPAAMSigaXAAMSihI/AAMSig/jAAMSilkDAAMSig1nAAMSiljbAAMSiWMAAxKKB1MAAxKKWRMAAxKKWRcAAxKKWL8AAxKKWQ8AAxKKWOsAAxKKWP8AAxKKWQsAAxKKWOcAAxJ+YmsAAxMhcwADEyGHAAMTIgVXAAMTIg7LAAMTIgMPAAMTIgxnAAMTIgejAAL3MwAByOsAAxNCYmcAAxNGev8AAxNLAAGzQwADE0sAAchXAAMTSwAByFsAAxNLAAHFRwADE0JicwADE15YuwADE15o5wADE0JiXwADE2p6/wADE25chwADE28AAchfAAMTbr8fAAMTbwAByMsAAxNqWOMAAxNqDF8AAxNpWwADE2oRZwADE2oClwADE2pb9wADE2pcAwADE2pb8wADE2pcDwADE2pcEwADE2pcCwADE2oJCwADE2pUZwADE2iPAAMTQmJrAAMTuXMAAxO5hwADE7oFVwADE7oOywADE7oMZwADE7oHowADE7oDDwADE0JidwADE9gAAwACSQMAAxPiYmcAAxPnAAGCrwADE+cAAkkDAAMT7wAB0WsAAxPvAAHRdwADE+8AAdF/AAMT7wABtc8AAxPvAAG10wADE+8AAdGDAAMT7wAB0YcAAxPvAAHRiwADE+8AAdGPAAMT7wAB0ZMAAxPvAAHRlwADE+8AAdGbAAMT7wAB0Z8AAxPnAAHRbwADE+cAAdFzAAMT5wAB0XsAAxPmCYMAAxPnAAHOzwADE+ZUswADE+Z/twADE+QTAAMT4mJfAAMURwACSQMAAxRLAAHRowADFEsAAdG3AAMUSwAB0bsAAxRLAAHRvwADFEsAAdHDAAMUSwAB0ccAAxRLAAHRzwADFEcAAdGrAAMURwAB0a8AAxRHAAHRswADFEYhqwADFEYhpwADE+MAAclnAAMUfmJnAAMUgwACSQMAAxSHAAHJawADFIcAAclvAAMUfmJfAAMUkiL7AAMUktHTAAMUfmJ3AAMUnAMAAxPjAAHJdwADFKZiXwADFKsAAcl7AAMUqwAByX8AAxSrAAHJgwADFKsAAcmHAAMUqwAByYsAAxSqsh8AAxSrAAHJjwADFKsAAcmTAAMUqwAByZcAAxSrAAHJmwADFKsAAcmfAAMUpmJrAAMU2gXbAAMUpmJ3AAMU4AMAAxPjAAHJowADFOpiZwADFO6DiwADFO8AAXqPAAMU7g9HAAMU7gJbAAMU6mJfAAMVAwAByacAAxUDAAHJqwADFQMAAcl7AAMVAwAByX8AAxUDAAHJgwADFQMAAcmHAAMVAwAByYsAAxUCsh8AAxUDAAHJjwADFQMAAcmTAAMVAwAByZcAAxUDAAHJmwADFQMAAcmfAAMU6mJrAAMVOgXbAAMU6mJ3AAMVQAMAAxPjAAHJrwADFUpiZwADFU8AAcmzAAMVSmJfAAMVVwAByZsAAxVXAAHJjwADFUpiawADFWIF2wADFUpidwADFWgDAAMT4wABybcAAxVyYmcAAxV3AAHJuwADFXcAAcm/AAMVdg1vAAMVdYcAAxVyYmsAAxWLAAGruwADFXJiXwADFZMAAkkDAAMVlwABycMAAxWTAAHJxwADFZMAAX8HAAMVkwABycsAAxWTAAHJzwADFXJidwADFawDAAMT4wABydMAAxW2YmcAAxW7AAHJ1wADFbsAAcnbAAMVuwAByd8AAxW7AAHJ4wADFbsAAcnnAAMVuwAByesAAxW7AAHJ7wADFbsAAcnzAAMVuwAByfcAAxW62EcAAxW7AAHJ+wADFbsAAcn/AAMVuwABygMAAxW7AAHKBwADFbsAAcoLAAMVuwAByg8AAxW7AAHKEwADFbsAAcoXAAMVuwAByhsAAxW7AAHKHwADFbsAAcojAAMVuwAByicAAxW7AAHKKwADFbsAAcovAAMVuwAByjMAAxW7AAHKNwADFbsAAco7AAMVuwAByj8AAxW6ZU8AAxW7AAHKQwADFbp3TwADFbp2vwADFbp3JwADFbsAAcpHAAMVund/AAMVuwAByksAAxW7AAHKTwADFbp2uwADFbsAAcpTAAMVuwABylcAAxW6d7cAAxW7AAHKWwADFbsAAcpfAAMVuwABymMAAxW7AAHKZwADFbsAAcprAAMVuwABym8AAxW7AAHKcwADFbsAAcp3AAMVuwABynsAAxW7AAHKfwADFbsAAcqDAAMVuwABg0cAAxW7AAGDSwADFbsAAcqHAAMVuwAByosAAxW7AAHKjwADFbsAAcqTAAMVuwABypcAAxW7AAHKmwADFbsAAcqfAAMVuwAByqMAAxW7AAHKpwADFbsAAcqrAAMVuwAByq8AAxW7AAHKswADFbsAAcq3AAMVuwAByrsAAxW7AAHKvwADFbsAAcrDAAMVuwAByscAAxW7AAHKywADFbsAAcrPAAMVuwABytMAAxW7AAHK1wADFbsAAcrbAAMVuwAByt8AAxW7AAHK4wADFbsAAcrnAAMVuwAByusAAxW7AAHK7wADFbqmSwADFboJOwADFbsAAZD7AAMVuwAByvMAAxW6Ci8AAxW2Yl8AAxcXAAHK9wADFxcAAcr7AAMXFgojAAMXFwAByw8AAxcXAAHLEwADFxcAAcsXAAMXFwAByxsAAxcXAAHLHwADFxcAAcsjAAMXFwABfwcAAxcXAAHJywADFxcAAcnPAAMXFwAByycAAxcXAAHLLwADFxcAAcsrAAMXFwAByzMAAxcXAAHLRwADFxYMHwADFxcAActrAAMXFwABy2cAAxcXAAHLYwADFxcAActzAAMXFwABy18AAxcXAAHLgwADFxcAActDAAMXFwAByzsAAxcXAAHLPwADFxcAAcubAAMXFwABy58AAxcXAAHLNwADFxcAAcsHAAMXFwABy28AAxcWBwsAAxW2YmsAAxeeBdsAAxefAAHJcwADF56ypwADFbZibwADF66ypwADFbZidwADF7QDAAMT4wABzC8AAxe+YmcAAxfCsqcAAxfDAAHJcwADF75iXwADF88AAcsPAAMXzwABfwcAAxfPAAHLFwADF88AAcsfAAMXzwAByxsAAxfPAAHLIwADF88AAcsTAAMXzwAByc8AAxe+YncAAxfwAwADE+MAAcwzAAMX+mJnAAMX/wACSQMAAxgDAAHMNwADGAMAAclrAAMYAlzzAAMX+mJfAAMYEwACSQMAAxgXAAHMOwADGBMAAbc3AAMYEVsAAxgSCiMAAxgTAAG6ewADF/pidwADGCwDAAMT4wABzD8AAxg2YmcAAxg7AAHMQwADGDsAAcxHAAMYOwABzEsAAxg7AAHMTwADGDsAAcxTAAMYOwAByocAAxg7AAHMVwADGDsAAcxbAAMYOwABzF8AAxg7AAHMYwADGDsAAcxnAAMYOwABzGsAAxg7AAHMbwADGDsAAcxzAAMYOwABzHcAAxg7AAHMewADGDsAAcx/AAMYOwABzIMAAxg7AAHMhwADGDsAAcyLAAMYOgovAAMYOYcAAxg7AAHK8wADGDsAAcyPAAMYOhxHAAMYNmJfAAMYowABzJMAAxijAAHMnwADGKMAAkkDAAMYrwABzLsAAxivAAELRwADGKMAAbc3AAMYoI8AAxg2YncAAxjAAwADE+MAAczPAAMYymJnAAMYzhxHAAMYzrKnAAMYzwAByXMAAxjKYl8AAxjfAAHLDwADGN8AAX8HAAMY3wAByxcAAxjfAAHLHwADGN8AAcsbAAMY3wAByyMAAxjfAAHLEwADGN8AAcnPAAMYymJ3AAMZAAMAAxPjAAHM0wADGQpiZwADGQ8AAkkDAAMZEwABzDcAAxkSXPMAAxkKYl8AAxkfAAJJAwADGSMAAcw7AAMZIwABzNcAAxkfAAG3NwADGR1bAAMZHgojAAMZCmJ3AAMZOAMAAxPjAAHM2wADGUJiZwADGUcAAkkDAAMZSwABzN8AAxlCYmsAAxlSAvcAAxlSIvcAAxlSB98AAxlCYl8AAxliVSsAAxliHEMAAxlCYncAAxlsAwADE+MAAczrAAMZdmJnAAMZewACSQMAAxl/AAHM7wADGXZiXwADGYYi+wADGYbR0wADGYZ57wADGXZidwADGZQDAAMT4wABzPsAAxmeYncAAxmgAwADE+MAAcz/AAMZqmJnAAMZrwACSQMAAxmyXPMAAxmzAAHM7wADGapiXwADGb4KIwADGb8AAbc3AAMZqmJ3AAMZyAMAAxPjAAHNBwADGdJiZwADGdcAAkkDAAMZ2wABzN8AAxnbAAHM7wADGdJiXwADGeYi+wADGecAAkkDAAMZ7wABzQ8AAxnm0dMAAxnmee8AAxnSYncAAxn8AwADE+MAAc0TAAMaBmJfAAMaCtHTAAMaBmJ3AAMaEAMAAxPjAAHNGwADGhpiZwADGh8AAkkDAAMaIwABzR8AAxoaYl8AAxoqCiMAAxopWwADGisAAbc3AAMaGmJ3AAMaOAMAAxPjAAHNIwADGkJiZwADGkcAAkkDAAMaSlzzAAMaQmJfAAMaUgojAAMaUVsAAxpTAAG3NwADGkJidwADGmADAAMT4wABzSsAAxpqYmcAAxpvAAJJAwADGnMAAUdrAAMaamJrAAMaeiL3AAMaegffAAMaamJfAAMahhxDAAMahllrAAMahwACSQMAAxqTAAHNVwADGmpidwADGpgDAAMamwABzS8AAxPjAAHNbwADGqZiZwADGqsAAkkDAAMarwABzXMAAxqmYl8AAxq2IvsAAxq20dMAAxqmYncAAxrAAwADGsMAAc0vAAMT4wABzXcAAxrOYmcAAxrTAAJJAwADGtcAAc17AAMa1wABzX8AAxrXAAHNhwADGtcAAc2LAAMa1wABzY8AAxrXAAGO1wADGtcAAc2TAAMazmJfAAMa9wACSQMAAxr7AAHNlwADGvsAAc2bAAMa+wABzZ8AAxr3AAHNowADGvZVKwADGvcAAc2vAAMa9wABzcMAAxrOYncAAxsYAwADE+MAAc3HAAMbImJnAAMbJwABzcsAAxsiYl8AAxsvAAHNowADGyJidwADGzQDAAMT4wABzc8AAxs+Yl8AAxtBWwADG0IKIwADG0MAAbc3AAMbQwACSQMAAxtSzs8AAxs+YncAAxtYAwADE+MAAc3TAAMbYmJnAAMbZwACSQMAAxtqXPMAAxtrAAFHawADG2JiXwADG3cAAkkDAAMbes7PAAMbYmJ3AAMbgAMAAxPjAAHN1wADG4piZwADG48AAkkDAAMbklzzAAMbkwABR2sAAxuKYl8AAxufAAJJAwADG6LOzwADG4pidwADG6gDAAMT4wABzdsAAxuyYl8AAxu2IvsAAxu20dMAAxuyYncAAxvAAwADE+MAAc3fAAMbymJnAAMbzwACSQMAAxvTAAHNhwADG9MAAc2LAAMb0wABzeMAAxvTAAHN5wADG9MAAVtPAAMb0wABzesAAxvTAAHN7wADG9MAAc3zAAMb0wABzfcAAxvTAAHN+wADG9MAAY7XAAMbymJfAAMcAwACSQMAAxwHAAHN/wADHAcAAc2fAAMcBwABzZsAAxwHAAHOAwADHAcAAc4LAAMcBwABzg8AAxwHAAHOLwADHAcAAc47AAMcBwABzVcAAxwCHEMAAxwCCiMAAxwDAAHOGwADG8pidwADHDgDAAMT4wABzksAAxxCYmcAAxxHAAJJAwADHEpc8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AMgitHTAAMginnvAAMgemJ3AAMgmAMAAxPjAAHPwwADIKJiZwADIKcAAc/HAAMgpwABz8sAAyCnAAHPzwADIKcAAc/TAAMgpwABz9cAAyCmhy8AAyCnAAHP2wADIKcAAc/fAAMgpwABz+MAAyCnAAHP5wADIKcAAc/rAAMgpwABz+8AAyCnAAHP8wADIKcAAc/3AAMgpwACSQMAAyDjAAHP+wADIOMAAc93AAMgomJrAAMg7wACSQMAAyDzAAHP/wADIKJiXwADIPoG5wADIPsAAdAHAAMg+hBHAAMg+wAB0AsAAyD6WHcAAyD7AAHQDwADIPsAAkkDAAMhFwAB0BMAAyEXAAHQFwADIPsAAdAbAAMg+wAB0B8AAyD6IRMAAyD7AAHQJwADIKJidwADITADAAMT4wAB0DsAAyE6YmcAAyE/AAJJAwADIUIPZwADITpiXwADIUpmTwADIUohEwADIUsAAdAnAAMhOmJ3AAMhWAMAAxPjAAHQQwADIWJiZwADIWcAAkkDAAMhalzzAAMhYmJfAAMhcur7AAMhchCzAAMhcwAB0AsAAyFyBucAAyFzAAHQBwADIXIQRwADIWJiawADIY8AAkkDAAMhkwABz/8AAyFiYncAAyGYAwADE+MAAdBHAAMhomJ3AAMhpAMAAyGiYmcAAyGvAAJJAwADIbIPZwADIaJiXwADIbpmTwADIbohEwADIbsAAdAnAAMT4wAB0EsAAyHKYmcAAyHPAAJJAwADIdMAAc+TAAMhymJfAAMh2mZPAAMhymJ3AAMh4AMAAxPjAAHQTwADIepiZwADIe8AAc+bAAMh7wABz6MAAyHuCi8AAyHsnwADIepiXwADIgLq+wADIgIRBwADIgMAAdALAAMiAwAB0FMAAyICBucAAyIDAAHQBwADIgIQRwADIgMAAdBbAAMiAwAB0FcAAyICG78AAyHqYmsAAyIvAAJJAwADIjMAAc//AAMh6mJ3AAMiOAMAAxPjAAHQXwADIkJidwADIkQDAAMiQmJnAAMiTwACSQMAAyJSD2cAAyJCYl8AAyJaZk8AAyJaIRMAAyJbAAHQJwADE+MAAdBjAAMiamJnAAMibqELAAMiamJfAAMidmZPAAMiamJ3AAMifAMAAxPjAAHQZwADIoZiZwADIosAAkkDAAMijwABzN8AAyKGYmsAAyKWAvcAAyKWI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PcAAyjCYl8AAyjUjwADKMJidwADKNwDAAMmxwAB0rMAAyjmYl8AAyjrAAHStwADKOsAAdLHAAMo6wAB0s8AAyjmYncAAyj4AwADJscAAdLXAAMpAmJnAAMpBwACSQcAAykLAAERfwADKQsAAcbbAAMpCwABEYMAAykKSLMAAykGzmsAAykCYl8AAykiClMAAykjAAEOCwADKSIKMwADKQJidwADKTMAAkkHAAMpNgLXAAMmxwAB0tsAAyk+YmcAAylDAAJJBwADKUbRewADKT5iXwADKU8AAdLfAAMpTwAB0ucAAylPAAHS7wADKU8AAdL3AAMpPmJrAAMpYwABJE8AAyk+YncAAyloAwADJscAAdL7AAMpcmJnAAMpdwACSQcAAyl7AAHS/wADKXrRewADKXJiXwADKYWrAAMphwAB0wsAAymGHHsAAymHAAHTEwADKXJidwADKZgDAAMpmwAB0wMAAybHAAHTHwADKaZiZwADKasAAQ5vAAMpqgL3AAMpqwACSQcAAym3AAHS/wADKbcAAdLjAAMppmJfAAMpwwACSQcAAynGkacAAynGuCMAAymmYncAAynTAAJJBwADKdYC1wADJscAAdMjAAMp3mJnAAMp4wABDm8AAyniAvcAAynjAAJJBwADKe8AAdLjAAMp7pGnAAMp7wAB0ycAAynvAAHTKwADKd5iXwADKgIcewADKd5ibwADKgsAAbBLAAMp3mJ3AAMqEwACSQcAAyoWAtQDAAJJCwADKh5iZwADKiMAAdUnAAMqIwAB1SsAAyoeYl8AAyovAAJJCwADKjMAAdUvAAMqMwAB1TcAAyozAAHVPwADKjMAAdVHAAMqLtCrAAMqHwAB1HMAAypKYnMAAypPAAHUdwADKk8AAdR7AAMqSmJfAAMqWwAB1IMAAypbAAF3PwADKlqThwADKlpY5wADKlsAAdSjAAMqWljjAAMqWwAB1K8AAypbAAFItwADKlkjAAMqSmJrAAMqgwAB1JcAAyqCDwcAAyofAAHUuwADKo5idwADKpADAAMqHwAB1L8AAyqaYncAAyqcAwADKh8AAdTDAAMqpmJ3AAMqqAMAAyofAAHUxwADKrJidwADKrQDAAMqHwAB1MsAAyq+YncAAyrAAwADKh8AAdTPAAMqymJ3AAMqzAMAAyofAAHU0wADKtZidwADKtgDAAMqHwAB1NcAAyriYncAAyrkAwADKh8AAdTbAAMq7mJ3AAMq8AMAAyofAAHU3wADKvpidwADKvwDAAMqHwAB1OMAAysGYncAAysIAwADKh8AAdTnAAMrEmJ3AAMrFAMAAyofAAHU6wADKx5idwADKyADAAMqHrPXAAMrKmJ3AAMrLAMAAyofAAHU7wADKzZidwADKzgDAAMqHwAB1PMAAytCYncAAytEAwADKh8AAdT3AAMrTmJ3AAMrUAMAAyofAAHU+wADK1pidwADK1wDAAMqHwAB1P8AAytmYl8AAytrAAHVAwADK2pb8wADK2sAAdUTAAMraSMAAytmYnMAAyt+lKsAAytmYmsAAyuGDwcAAyuEewADKh8AAdUbAAMrkmJnAAMrlwAB1R8AAyuSYncAAyucAwADK58AAdUgAm9fAAMrqmJjAAMrrwAB1XcAAyuvAAG8BwADK68AAdV7AAMrrwAB1X8AAyuqYmcAAyvDAAHaYwADK8JvXwADK8sAAdpnAAMrwnU7AAMrwwABySMAAyvDAAG7gwADK6piXwADK95vXwADK+MAAdprAAMr4wAB2nMAAyvjAAHagwADK+MAAdqbAAMr4wAB2qMAAyvjAAHaswADK+MAAdrHAAMr3wAB2qsAAyveWHMAAyvfAAHJLwADK97LNwADK98AAdrLAAMr3wAB2tcAAyvfAAG7hwADK6sAAbtvAAMsHmJnAAMsIwAB1YMAAywjAAHVhwADLCMAAdWLAAMsIwAB1Y8AAywjAAHVkwADLCMAAdWXAAMsIwAB1ZsAAywjAAHVnwADLCMAAdWjAAMsIm9fAAMsSwAB1acAAyxLAAHVqwADLB5ibwADLFcAAdWvAAMsHmJrAAMsXwAB1a8AAyweYncAAyxkAwADK6sAAdWzAAMsbmJfAAMscnPbAAMsbmJ3AAMseAMAAyurAAHJJwADLIJiZwADLIcAAdW/AAMshwAB1cMAAyyHAAHVxwADLIcAAdXLAAMshwAB1c8AAyyHAAHV0wADLIcAAdXXAAMsgmJfAAMspwAB1dsAAyyCYncAAyysAwADK6sAAdXjAAMstmJ3AAMsuAMAAyurAAHV5wADLMJiZwADLMZvXwADLMsAAdXrAAMswmJrAAMs0YcAAyzCYl8AAyzZLwADLNsAAdXvAAMswmJ3AAMs5AMAAyuqn3sAAyzuYmcAAyzyAvcAAyzuYncAAyz4AwADK6sAAbuLAAMtAmJnAAMtBgePAAMtAmJ3AAMtDAMAAyurAAHV9wADLRZiZwADLRsAAdX7AAMtGwAB1f8AAy0bAAHWAwADLRsAAdYHAAMtGwAB1gsAAy0bAAHWDwADLRsAAdYTAAMtGwAB1hcAAy0bAAHWGwADLRsAAdYfAAMtGwAB1iMAAy0bAAHWJwADLRsAAdYrAAMtGwAB1i8AAy0bAAHWMwADLRp7AwADLRsAAdY3AAMtGwAB1jsAAy0bAAHWPwADLRsAAdZDAAMtGwAB1kcAAy0bAAHWSwADLRsAAdZPAAMtGwAB1lMAAy0bAAHWVwADLRsAAdZbAAMtGnGnAAMtGwAB1l8AAy0bAAHWYwADLRsAAdZnAAMtGwAB1msAAy0bAAHWbwADLRsAAdZzAAMtGwAB1ncAAy0bAAHWewADLRsAAdZ/AAMtGwAB1oMAAy0bAAHWhwADLRsAAdaLAAMtGwAB1o8AAy0bAAHWkwADLRsAAdaXAAMtGwAB1psAAy0bAAHWnwADLRsAAdajAAMtGwAB1qcAAy0bAAHWqwADLRsAAdavAAMtGwAB1rMAAy0bAAHWtwADLRsAAda7AAMtGwAB1r8AAy0bAAHWwwADLRsAAdbHAAMtGwAB1ssAAy0bAAHWzwADLRsAAdbTAAMtGwAB1tcAAy0bAAHW2wADLRsAAdbfAAMtGwAB1uMAAy0bAAHW5wADLRsAAdbrAAMtGnSTAAMtGwAB1vMAAy0bAAHW+wADLRsAAdcDAAMtGwAB1wsAAy0bAAHXEwADLRsAAdcbAAMtGwAB1yMAAy0bAAHXKwADLRsAAdczAAMtGwAB1zsAAy0bAAHXQwADLRsAAddLAAMtGwAB11MAAy0bAAHXWwADLRsAAddjAAMtGwAB12sAAy0bAAHXcwADLRsAAdd7AAMtGwAB14MAAy0bAAHXiwADLRsAAdeTAAMtGwAB15sAAy0bAAHXowADLRsAAderAAMtGwAB17MAAy0bAAHXuwADLRsAAdfDAAMtGwAB18sAAy0bAAHX0wADLRsAAdfbAAMtGwAB1+MAAy0bAAHX6wADLRsAAdfzAAMtGwAB1/sAAy0bAAHYAwADLRsAAdgLAAMtGwAB2BMAAy0bAAHYGwADLRsAAdgjAAMtGwAB2CsAAy0bAAHYMwADLRsAAdg7AAMtFmJ3AAMuxAMAAyurAAG7cwADLs5iZwADLtJvXwADLtbmlwADLs5iawADLt8AAbzTAAMuzmJfAAMu5gfnAAMu5ljjAAMuzmJ3AAMu8AMAAyurAAHYQwADLvpiZwADLv5vXwADLwLmlwADLwMAAb6XAAMvAwABwlMAAy8DAAHCVwADLvpiXwADLxZxVwADLxcAAbzzAAMvFgevAAMvFg4nAAMvFm9fAAMvKwABwTcAAy8WB+8AAy8WCBMAAy8XAAHACwADLvpiawADLz8AAbyvAAMu+mJ3AAMvRAMAAyurAAG7dwADL05iZwADL1JvXwADL1bmlwADL05iXwADL15Y4wADL1557wADL05idwADL2gDAAMrqwABySsAAy9yYmcAAy92b18AAy965pcAAy9yYl8AAy+CIvsAAy+Cee8AAy+CWOMAAy9yYncAAy+QAwADK6sAAdhHAAMvmmJrAAMvnm9fAAMvouaXAAMvnXMAAy+dhwADL54FVwADL54OywADL54MZwADL54HowADL54DDwADL5piXwADL8ZYvwADL8ZZEwADL8ZY5wADL8YMXwADL8ZY/wADL8SPAAMvmmJ3AAMv4AMAAyurAAHYSwADL+piZwADL+5vXwADL/LmlwADL+piXwADL/l3AAMv6mJrAAMwAXsAAy/qYncAAzAIAwADK6sAAdhPAAMwEmJnAAMwFm9fAAMwGuaXAAMwEmJzAAMwIAMAAzASYl8AAzAqWOMAAzASYncAAzAyb18AAzA2AtcAAyurAAHYUwADMD5idwADMEADAAMrqwAB2FcAAzBKYncAAzBMAwADMEpiawADMFVzAAMwVgVXAAMwVg7LAAMwVgxnAAMwVgejAAMwVgMPAAMwVmIjAAMwSmJfAAMwdljnAAMwdlj3AAMwdg/jAAMwdgxfAAMwdljbAAMwdgdTAAMwdljrAAMwdlj/AAMwdlkLAAMwdWMAAzB2BpcAAzB2WRsAAzB2Aq8AAzB2Ej8AAzB2WQMAAzB2DWcAAzB2WL8AAzB2WQ8AAzB2WRMAAzB2WRcAAzB2ArcAAzB2VGcAAzB1WwADMHYClwADMHYRZwADMHZ6/wADMN5/AwADMN5/BwADMN5/EwADMHZb+wADMHZcBwADMHYJCwADMHZY4wADMHYYXwADMHYCuwADMHZ/FwADMHZxqwADMHWTAAMwdgVjAAMwdn8vAAMwdn8zAAMwdm7HAAMwdg17AAMwdn9HAAMwdgLvAAMwdn9bAAMwdlmDAAMwdn9fAAMwdntXAAMwdn9jAAMwdn9nAAMwdn9vAAMwdI8AAzBKYm8AAzFODGcAAzFOB6MAAyurAAHYWwADMVpiawADMV5vXwADMWLmlwADMVpiXwADMWkvAAMxagL/AAMxaVsAAzFqApcAAzFqArsAAzFqfxcAAzFqe1cAAzFqf2cAAzFqf28AAzFqEWcAAzFqf2MAAzFqGF8AAzFqW/sAAzFqXAcAAzFqfy8AAzFqDXsAAzFqfzMAAzFqbscAAzFqf0cAAzFaYm8AAzG5hwADMVpidwADMcADAAMrqwAB2GMAAzHKYmcAAzHOb18AAzHS5pcAAzHKYl8AAzHaWOMAAzHKYncAAzHgAwADK6sAAdhnAAMx6mJnAAMx7m9fAAMx8uaXAAMx8s7LAAMx6mJfAAMx/m9fAAMyAwAB2GsAAzIDAAHYbwADMgK/HwADMf5Y4wADMf1bAAMx/gKXAAMx/hFnAAMx/lv3AAMx/lwDAAMx/lv7AAMx/lwHAAMx/hALAAMx/lwPAAMx/lwTAAMx/lwLAAMx/gkLAAMx/lRnAAMx/lvzAAMx6mJ3AAMyTAMAAyurAAHYewADMlZiZwADMlpvXwADMl7mlwADMlZiXwADMmZY4wADMmcAAQzTAAMyZh0fAAMyZS8AAzJmAv8AAzJmZHcAAzJmApcAAzJmEWcAAzJmCQsAAzJmD+MAAzJmsMsAAzJnAAEM5wADMmcAAQzbAAMyZlv7AAMyVmJrAAMyog2LAAMyoKcAAzKhhwADMqIFVwADMqIOywADMqIPQwADMlZidwADMrwDAAMrqwAB2IcAAzLGYmcAAzLKb18AAzLO5pcAAzLGYl8AAzLWWOMAAzLWfJcAAzLWGF8AAzLVWwADMtcAAa57AAMy1hCLAAMy1hFnAAMy1gKXAAMy1lv7AAMy1lwHAAMy1gkLAAMyxmJ3AAMzBAMAAyurAAHYiwADMw5iawADMxGHAAMzDmJ3AAMzGAMAAyurAAHYjwADMyJiawADMyWHAAMzJXMAAzMmBVcAAzMmDGcAAzMmB6MAAzMmAw8AAzMiYl8AAzNCWOcAAzNCD+MAAzNCDF8AAzNCWNsAAzNCB1MAAzNCWOsAAzNCWP8AAzNCW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wADN7JiXwADN+oMXwADN7JidwADN/ADAAMrqwAB2R8AAzf6Yl8AAzf+WL8AAzf+WRMAAzf+WOcAAzf6YmsAAzgODGcAAzgOB6MAAzf6YncAAzgYAwADK6sAAdkjAAM4ImJnAAM4Jm9fAAM4KwABkiMAAzgrAAHZJwADOCJiXwADODV3AAM4ImJrAAM4PXsAAzgiYncAAzhEAwADK6sAAdkrAAM4TmJnAAM4Um9fAAM4VuaXAAM4TmJrAAM4XXMAAzhOYncAAzhkAwADK6sAAdkvAAM4bmJnAAM4cm9fAAM4duaXAAM4bmJfAAM4fXcAAzhuYmsAAziFewADOG5idwADOIwDAAMrqwABu38AAziWYl8AAzibAAHZMwADOJsAAdk3AAM4mwAB2TsAAziWYncAAzioAwADK6sAAdk/AAM4smJvAAM4tYcAAziyYl8AAzi9WwADOL57VwADOL5/ZwADOL4ClwADOL4RZwADOL5b+wADOL5cBwADOL4JCwADOL5/YwADOL4YXwADOL5/MwADOL5/RwADOLJidwADOPADAAMrqwAB2U8AAzj6Yl8AAzj+Av8AAzj+f28AAzj9WwADOP57VwADOP5/ZwADOP4ClwADOP4RZwADOP5b+wADOP5cBwADOP4CuwADOP5/FwADOP4JCwADOP5/YwADOP4YXwADOP4NewADOP5/MwADOP5/RwADOP5uxwADOPpibwADOUmHAAM5SgxnAAM5SgejAAM4+mJ3AAM5WAMAAyurAAHZZwADOWJidwADOWQDAAM5YmJvAAM5bYcAAzliYl8AAzl1WwADOXZ7VwADOXZ/ZwADOXYClwADOXYRZwADOXZb+wADOXZcBwADOXYJCwADOXZ/YwADOXYYXwADOXZ/MwADOXZ/RwADK6sAAdlrAAM5qmJ3AAM5rAMAAzmqYl8AAzm2Av8AAzm2f28AAzm1WwADObZ7VwADObZ/ZwADObYClwADObYRZwADObZb+wADObZcBwADObYCuwADObZ/FwADObYJCwADObZ/YwADObYYXwADObYNewADObZ/MwADObZ/RwADObZuxwADOapibwADOgGHAAM6AgxnAAM6AgejAAMrqwAB2W8AAzoSYmcAAzoWb18AAzobAAHZcwADOhJiawADOiGHAAM6EmJfAAM6KljnAAM6EmJ3AAM6MAMAAyurAAHZdwADOjpiZwADOj5vXwADOkMAASyXAAM6OmJfAAM6SS8AAzpLAAEM0wADOkodHwADOkoP4wADOjpiawADOl2HAAM6XKcAAzpeDYsAAzpeBVcAAzpeDssAAzo6YncAAzp0AwADK6sAAdl7AAM6fmJnAAM6gm9fAAM6huaXAAM6fmJrAAM6jYcAAzp+Yl8AAzqWWOcAAzp+YncAAzqcAwADK6sAAdl/AAM6pmJfAAM6qVsAAzqrAAFrowADOqmHAAM6qhFnAAM6pmJ3AAM6vAMAAyurAAHZkwADOsZiXwADOslbAAM6yYcAAzrKEWcAAzrGYncAAzrYAwADK6sAAdmjAAM64mJnAAM65m9fAAM66wAB2acAAzriYl8AAzryArsAAzrzAAHZqwADOvJvXwADOv8AAdmzAAM6/wAB2bcAAzr/AAHZvwADOuJidwADOwwDAAMrqm9PAAM7FmJnAAM7Gm9fAAM7HKMAAzsbAAHaCwADOxsAAdoTAAM7GwABhq8AAzsbAAHaHwADOxsAAdonAAM7GwAB2jcAAzsWYl8AAzs9IwADOzyPAAM7PmRzAAM7PwAB2kMAAzs/AAHaTwADOz8AAdpTAAM7FmJrAAM7Wg8HAAM7FmJ3AAM7YAMAAztjAAHaOwADO2LLqwADK6sAAcdDAAM7cmJnAAM7dgxnAAM7dgejAAM7dYcAAztyYmsAAzuGBVcAAzuFcwADO3JiXwADO5FbAAM7kwABrnsAAzuSEWcAAztyYncAAzugAwADK6sAAcdnAAM7qmJnAAM7rm9fAAM7swABvOsAAzuzAAG87wADO7JcawADO6piXwADO8MAAcdrAAM7qmJ3AAM7yAMAAyurAAHHXwADO9JiZwADO9V7AAM71m9fAAM73lxrAAM70mJfAAM75XcAAzvSYncAAzvsAAMAAkkPAAM79mJjAAM7+wAB2vMAAzv7AAHa9wADO/sAAdr7AAM7+wAB2v8AAzv2YmcAAzwPAAJJDwADPBMAAd2PAAM79mJfAAM8GwACSQ8AAzwfAAHdkwADPB8AAd2XAAM8HwAB3ZsAAzwfAAHdnwADPB8AAd2jAAM8HwAB3acAAzwfAAHdqwADPB8AAd23AAM79wAB2wMAAzxCYnMAAzxEAwADPEJiXwADPE0jAAM8TwACSQ8AAzxW8asAAzxXAAHbCwADPEJiawADPGIPBwADO/cAAdsXAAM8amJnAAM8bwACSQ8AAzxzAAHbGwADPHMAAb1nAAM8amJrAAM8fwAB0sMAAzxqYl8AAzyGB+cAAzyGCiMAAzxqYncAAzyQAwADPJMAAdsfAAM79wAB2yMAAzyeYmcAAzyjAAJJDwADPKcAAdsnAAM8nmJzAAM8rAMAAzyeYl8AAzy2CiMAAzy1IwADPLcAAkkPAAM8wwAB2zcAAzzDAAHbMwADPMMAAdtDAAM8wwAB20cAAzzDAAHbLwADPMMAAdtPAAM8nmJrAAM83wAB0sMAAzzeDwcAAzyeYm8AAzzpVwADO/cAAdtXAAM88mJzAAM89wACSQ8AAzz7AAHbWwADPPJiXwADPQKGXwADPQEjAAM9AwACSQ8AAz0PAAHbNwADPQ8AAdsLAAM9DwAB218AAzzyYmsAAz0eDwcAAzv3AAHbbwADPSZicwADPSgDAAM9JmJfAAM9MwAB23cAAz0zAAJJDwADPTsAAdt7AAM79wAB24MAAz1CYmcAAz1HAAJJDwADPUpcawADPUsAAduHAAM9QmJrAAM9VgVXAAM9VgxnAAM9QmJfAAM9YmYbAAM9YVsAAz1ifJcAAz1iEWcAAz1jAAJJDwADPXcAAcUzAAM9dwABrhsAAz13AAGuHwADPXcAAduXAAM9dmmPAAM9dwAB26MAAz13AAHbpwADPXacZwADPXcAAdurAAM9dwAB268AAz1CYncAAz2gAwADO/cAAduzAAM9qmJnAAM9rwACSQ8AAz2zAAHbtwADPbMAAdu7AAM9swAB278AAz2zAAHbwwADPbMAAdvHAAM9swAB28sAAz2zAAHbzwADPbMAAdvTAAM9swAB29cAAz2zAAHb2wADPbMAAdvfAAM9swAB2+MAAz2yaVsAAz2zAAHb5wADPbMAAdvrAAM9swAB2+8AAz2zAAHbjwADPbMAAceDAAM9swAB2/MAAz2qYl8AAz4DAAJJDwADPgcAAdv3AAM+BwABwxMAAz4HAAHbkwADPgcAAdwLAAM+BwAB3AMAAz4HAAHcDwADPgcAAdwTAAM+BwAB3BsAAz4HAAHcHwADPgcAAdwnAAM+BwAB20cAAz4HAAHcNwADPgcAAdw7AAM+BwAB3D8AAz4HAAHcQwADPgcAAbzLAAM+AnFXAAM9qmJzAAM+TAMAAz5PAAG/vwADPapiawADPlsAAkkPAAM+XwAB3AcAAz5aIpcAAz5bAAHDDwADPapidwADPm8AAkkPAAM+chlvAAM79wAB3EcAAz56YmcAAz58iwADPnpiXwADPoSPAAM+emJ3AAM+jAMAAzv0MwADPpZiZwADPpsAAkkPAAM+nwAB3E8AAz6fAAHcUwADPp8AAdxXAAM+nwAB3FsAAz6fAAHcXwADPp8AAdxjAAM+nwAB3GcAAz6fAAHcawADPp8AAdxvAAM+nwAB3HMAAz6fAAHcdwADPpsAAb7vAAM+mwAB3HsAAz6bAAHS0wADPpsAAdx/AAM+mwAB3IMAAz6WYl8AAz7jAAJJDwADPucAAdyHAAM+5wAB3IsAAz7nAAHcowADPucAAdy7AAM+5wAB3MMAAz7nAAHcywADPucAAdzTAAM+5wAB3NsAAz7nAAHc4wADPucAAdznAAM+5wAB3TsAAz7jAAHdAwADPuMAAd0LAAM+4wAB3RMAAz7iB+8AAz7iCBMAAz7jAAHdPwADPuMAAd1HAAM+4wAB3UsAAz7jAAGAKwADPuMAAST/AAM+4wAB3VMAAz7jAAHdVwADPpZiawADP0aPIwADP0V7AAM/RecAAz9F4wADP0YiYwADPpZidwADP1wDAAM79wAB0dsAAz9mYl8AAz9qhl8AAz9pIwADP2ZiawADP3YPBwADP2ZidwADP3wDAAM79wAB3WcAAz+GYnMAAz+IAwADP4sAAdsfAAM/hmJfAAM/lgfnAAM/lgojAAM/hmJrAAM/owAB0sMAAzv3AAHR3wADP6picwADP6wDAAM/qmJvAAM/tVcAAz+qYl8AAz++CiMAAz+qYmsAAz/HAAHSwwADO/cAAd1zAAM/zmJnAAM/0wACSQ8AAz/XAAHddwADP9IZFwADP85iXwADP+CPAAM/zmJrAAM/6m8fAAM/7wABwyMAAz/OYm8AAz/2bx8AAz/7AAHDIwADP85idwADQAADAAM79wAB3XsAA0AKYnMAA0APAAHdgwADQApiXwADQBcAAdt3AAM79wAB3YsAA0AeYnMAA0AgAAMAAkkTAANAKmJnAANALg03AANALwAB3qMAA0AvAAHeqwADQC8AAd6zAANALwAB3rsAA0AvAAHewwADQC8AAd7LAANALwAB3tMAA0AqYl8AA0BTAAJJEwADQFcAAd7bAANAVwAB3uMAA0BXAAHe6wADQFcAAd7vAANAVwAB3vcAA0BXAAHe/wADQFcAAd8HAANAVwAB3w8AA0BXAAHfFwADQFcAAd8fAANAVwAB3ycAA0BXAAHfLwADQFcAAX4XAANAVwAB32cAA0BScr8AA0BTAAEkSwADQFMAAd87AANAUwAB30MAA0BTAAHfRwADQFMAAd9PAANAUwAB31MAA0BTAAHfVwADQFMAAd9bAANAUwAB318AA0BTAAHfYwADQFL0awADQFJZ4wADQCsAAd3PAANAxmJnAANAywACSRMAA0DPAAGO1wADQM8AAd3TAANAzwAB3dcAA0DPAAHd2wADQM8AAd3fAANAzwAB3eMAA0DPAAHd6wADQMZiXwADQO8AAkkTAANA8wAB3fMAA0DzAAHeCwADQPMAAd4TAANA8wAB3hsAA0DufyMAA0DvAAHeAwADQO8AAd4HAANAxmJ3AANBEwACSRMAA0EXAAHd7wADQCsAAd4fAANBHmJnAANBIwACSRMAA0EnAAHd2wADQScAAd3fAANBHmJfAANBMwACSRMAA0E3AAHeIwADQTJ/IwADQTMAAd4DAANBMwAB3gcAA0EeYncAA0FIAwADQCsAAd4vAANBUmJfAANBVhx3AANBVhx7AANBVhyTAANBVwAB3jMAA0FSYncAA0FoAwADQCsAAd43AANBcmJnAANBdg3vAANBdvDPAANBcmJfAANBgI8AA0GBIwADQYGTAANBggY3AANBgg4jAANBgwAB3kMAA0GDAAHeRwADQXJiawADQaIPBwADQaMAASHzAANBcmJ3AANBrAMAA0ArAAGjnwADQbZicwADQbgDAANBuwAB3ksAA0G2Yl8AA0HGfyMAA0HHAAHeAwADQccAAd4HAANAKwAB3k8AA0HWYmsAA0HaFtcAA0Han6MAA0HaBtMAA0HbAAHeUwADQdoW3wADQdsAAd5XAANB2g8HAANB2wAB3nsAA0HbAAHefwADQdsAAd6DAANB2wAB3ocAA0HWYl8AA0IIjwADQgkjAANCClwPAANCCtdLAANCCwAB3msAA0ILAAHebwADQgsAAd53AANB1mJ3AANCKAMAA0ArAAHeiwADQjJiZwADQjYW1wADQjafowADQjYG0wADQjcAAd5TAANCMmJzAANCSwAB3o8AA0IyYncAA0JQAwADQCsAAd6TAANCWmJnAANCXhbXAANCXp+jAANCXwACSRMAA0JrAAHelwADQmsAAd6bAANCWmJzAANCdwAB3o8AA0JaYmsAA0J+BtMAA0J/AAHeUwADQlpibwADQooG0wADQosAAd5TAANCWmJ3AANClAACcRcAA0KeYmcAA0KicRcAA0KnAAHjdwADQp5iXwADQq5xFwADQrMAAeN7AANCswABqR8AA0KzAAHjfwADQrMAAeODAANCstyzAANCswABn4sAA0KzAAHjlwADQrMAAeOfAANCrwAB4sMAA0KvAAHixwADQq8AAeLjAANCrwAB4usAA0KfAAHfbwADQuZiZwADQupxFwADQu8AAd9zAANC5mJfAANC9I8AA0LmYncAA0L8AwADQp8AAd93AANDBmJnAANDCnm3AANDCwABFP8AA0MKcRcAA0MWIj8AA0MXAAHfewADQwZiawADQyIbZwADQyLDtwADQwZiXwADQy5xFwADQzMAAd9/AANDMwAB34cAA0MsjwADQwZidwADQ0ADAANCnwAB35MAA0NKYmcAA0NOB+sAA0NOG6cAA0NO3IsAA0NKYl8AA0NcjwADQ0pidwADQ2ZxFwADQ2oC1wADQp8AAd+XAANDcmJ3AANDdAMAA0KfAAHfmwADQ35iZwADQ4KPIwADQ4MAAd+fAANDfmJrAANDjwAB36MAA0N+Yl8AA0OUjwADQ5cAAd+rAANDlnEXAANDowAB37MAA0N+YncAA0OqcRcAA0OuAtcAA0KfAAHfuwADQ7ZiZwADQ7qjmwADQ7sAAd+/AANDuhTPAANDuhBnAANDuh4HAANDunEXAAND0h/HAANDtmJrAAND2hI3AAND2ob3AAND2nXnAAND2h4DAAND2wAB38MAA0PazTcAA0Pa0R8AA0PaEH8AA0PbAAHfxwADQ9oQawADQ9oU1wADQ9oZdwADQ9sAAaX3AAND2qQPAAND2hTrAAND2mojAAND2hFvAAND2htvAAND2g0TAANDtmJ3AANEKAMAA0KfAAHfywADRDJiZwADRDajmwADRDZxFwADRD4fxwADRDJiawADREcAAd+/AANERwABpfcAA0RGCkMAA0RGhM8AA0RGjwsAA0RGEGcAA0RGHgcAA0RGEHcAA0RGEG8AA0RGGXcAA0RHAAHfzwADREYMlwADREYRbwADREYbbwADRDJidwADRIADAANCnwAB39MAA0SKYmcAA0SOcRcAA0STAAHf1wADRIpiXwADRJpxFwADRJ8AAd/bAANEnwAB3+MAA0SfAAHf5wADRJrtywADRJsAATRTAANEmwAB3/MAA0Sau1MAA0SKYncAA0S+cRcAA0TCAtcAA0KfAAHf/wADRMpiZwADRM5xFwADRNJIswADRMpiawADRNoKQwADRNsAAeADAANE2wAB398AA0TaDwcAA0TKYl8AA0TsjwADRO0jAANE7wABNFMAA0TvAAHf8wADRO7tywADRO5xFwADRQcAAd/bAANFBwAB3+MAA0UHAAHf5wADRQcAAeAXAANEymJ3AANFGnEXAANFHgLXAANCnwAB4B8AA0UmYmcAA0UqcRcAA0UvAAHgIwADRSZiawADRTYJqwADRSZiXwADRT68/wADRTyPAANFPnEXAANFSwAB4CsAA0UmYncAA0VScRcAA0VWAtcAA0KfAAHgMwADRV5iawADRWJxFwADRWcAAeA3AANFXmJ3AANFbAMAA0KfAAHgOwADRXZiZwADRXpxFwADRX8AAeA3AANFfwAB4D8AA0V/AAHgQwADRX8AAeBHAANFfwAB4EsAA0V/AAHgTwADRX8AAeBTAANFfwAB4FcAA0V/AAHgWwADRX8AAeBfAANFfwABposAA0V/AAHgYwADRX8AAeBnAANFfwAB4GsAA0V+pX8AA0V/AAEqKwADRXoQawADRXoTjwADRXZiawADRcsAAeBzAANFywAB4G8AA0XLAAHfvwADRcsAAaX3AANFyqObAANFyhl3AANFyh4HAANFyhFvAANFynEXAANF7wAB4H8AA0XvAAHgewADRe8AAeCzAANFyhOzAANFywAB4IcAA0XKE7sAA0XLAAHglwADRcsAAeCbAANFyrm/AANFyom/AANFyhR3AANFywAB4IMAA0XLAAHgtwADRcobbwADRcoPBwADRXZiXwADRiyPAANGLwABUw8AA0YtIwADRi5rnwADRi8AAeDDAANGLmxTAANGLnEXAANGSwAB4M8AA0ZLAAHg1wADRksAAeDfAANGSwAB4OcAA0ZLAAHg7wADRksAAeD3AANGSwAB4P8AA0ZLAAHgowADRksAAeCnAANGSwAB39sAA0ZLAAHf4wADRksAAd/nAANGSwAB4RsAA0ZLAAHhIwADRksAAeErAANFdmJ3AANGinEXAANGjgLXAANCnwAB4TMAA0aWYmcAA0aacRcAA0afAAHhNwADRp8AAeA/AANGnwAB4TsAA0afAAFN9wADRp8AAeE/AANGlmJrAANGtnEXAANGuwAB4LMAA0a3AAHfvwADRrbRGwADRrYU6wADRrZqIwADRrcAAeCDAANGtwAB4LcAA0a2ib8AA0a2FHcAA0a2G28AA0a2EW8AA0aWYl8AA0bojwADRupxFwADRvMAAeFDAANG8wAB4VcAA0bzAAHhRwADRpZidwADRwJxFwADRwYC1wADQp8AAeFjAANHDmJnAANHEnEXAANHFwAB39cAA0cXAAHgPwADRxcAAeBXAANHDmJrAANHJwAB378AA0cnAAGl9wADRyYZdwADRyYRbwADRyYbbwADRyYPBwADRw5iXwADR0EjAANHDmJ3AANHSnEXAANHTgLXAANCnwAB4WcAA0dWYmcAA0dacRcAA0dfAAHgQwADR18AAeFrAANHVmJrAANHaqObAANHahBnAANHah4HAANHamo3AANHawAB4HMAA0drAAHgbwADR2pxFwADR4cAAeA3AANHaom/AANHahR3AANHawAB4IMAA0drAAHgtwADR2oPBwADR1ZiXwADR6CPAANHoSMAA0eia58AA0ejAAHgwwADR6JxFwADR7cAAeF3AANHtwAB4X8AA0dWYncAA0fCcRcAA0fGAtcAA0KfAAHhhwADR85iZwADR9JxFwADR9cAAeA3AANH1wAB4EcAA0fXAAHgTwADR9cAAeBDAANH1wAB4YsAA0fWpX8AA0fXAAEqKwADR85iawADR/YeBwADR/ajmwADR/cAAeGPAANH9wAB4HMAA0f3AAHgbwADR/cAAeCDAANH9wAB4LcAA0f2ib8AA0f2FHcAA0fOYl8AA0gcjwADSB5rnwADSB8AAeDDAANIHnEXAANILwAB4ZcAA0gvAAHhnwADR85idwADSDgDAANCnwAB4acAA0hCYmcAA0hHAAHfvwADSEYCswADSEZxFwADSFMAAeBrAANIUwAB4asAA0hCYmsAA0hfAAGl9wADSF6jmwADSF4ZdwADSF4eBwADSF5xFwADSHMAAeBTAANIXrm/AANIXhFvAANIXhtvAANIXg8HAANIXwAB4bMAA0hCYl8AA0iNIwADSIyPAANIjnEXAANImwAB4bcAA0ibAAHf2wADSJsAAd/jAANImwAB3+cAA0ibAAHgowADSEJidwADSLJxFwADSLYC1wADQp8AAeHPAANIvmJnAANIwqZzAANIwnEXAANIywAB4dMAA0jCEo8AA0jCDJMAA0jCErsAA0jCEr8AA0jCG28AA0i+YmsAA0jmErcAA0jmErMAA0jmEW8AA0i+Yl8AA0j2uN8AA0j2cRcAA0j/AAHh6wADSL5idwADSQZxFwADSQoC1wADQp8AAeHzAANJEmJnAANJFwAB4fcAA0kWEtsAA0kSYmsAA0kiEu8AA0kSYncAA0kqcRcAA0kuAtcAA0KfAAHh/wADSTZiZwADSTpxFwADST8AAeBTAANJPwAB4gMAA0k/AAHiLwADST8AAeBDAANJPwABTfcAA0k/AAHhPwADST8AAeIzAANJOhBnAANJOwAB4gcAA0k7AAHiCwADSTsAAeIPAANJOwAB4hMAA0k7AAHiFwADSTsAAeIbAANJOwAB4h8AA0k7AAHiIwADSTsAAeInAANJOwAB4isAA0k2YmsAA0mKEGsAA0mKFM8AA0mKFNcAA0mKHgMAA0mLAAHfwwADSYrNNwADSYsAAd/HAANJitEfAANJihB/AANJihI3AANJinXnAANJiqObAANJihl3AANJih4HAANJihTrAANJimojAANJiob3AANJiqQPAANJig0TAANJNmJfAANJ2nEXAANJ3wAB4K8AA0nfAAHiUwADSd8AAeJbAANJ3wAB4jcAA0nfAAHiZwADSdiPAANJNmJ3AANJ+nEXAANJ/gLXAANCnwAB4m8AA0oGYmcAA0oKo5sAA0oKEGcAA0oKEG8AA0oKEHcAA0oKcRcAA0oeSLMAA0oGYmsAA0omHgcAA0omcRcAA0ovAAHgUwADSiYKQwADSgZiXwADSjiPAANKOnEXAANKQwAB4nsAA0oGYncAA0pKcRcAA0pOAtcAA0KfAAHigwADSlZiZwADSlpxFwADSl8AAcgvAANKXwAB4ocAA0pfAAHiiwADSl8AAbrrAANKXkizAANKWoTPAANKWo8LAANKVmJrAANKfgyXAANKfwAB388AA0p+EW8AA0p+G28AA0p+CkMAA0pWYl8AA0qUjwADSpZxFwADSp8AAeKXAANKVmJ3AANKpnEXAANKqgLXAANCnwAB4p8AA0qyYmcAA0q3AAHfvwADSrJiawADSr4ZdwADSr4eBwADSr6jmwADSr4RbwADSr4bbwADSr8AAeBzAANKvwAB4G8AA0q+ib8AA0q+FHcAA0q/AAHggwADSr8AAeC3AANKvwABpfcAA0q+DwcAA0qyYl8AA0r1IwADSvSPAANK9mufAANK9wAB4MMAA0qyYncAA0sKcRcAA0sOAtcAA0KfAAHiqwADSxZiZwADSxpxFwADSx8AAeKvAANLHwAB4rMAA0sfAAHiuwADSxZiXwADSy8AAeLDAANLLwAB4scAA0sucRcAA0s7AAHiywADSzsAAeLTAANLOwAB4tsAA0s7AAHi8wADSy8AAeLjAANLLwAB4usAA0sWYncAA0tUAwADQp8AAeL7AANLXmJzAANLYnEXAANLZwAB21sAA0teYl8AA0ttIwADQp8AAeMDAANLdmJfAANLenEXAANLfwAB4wcAA0t7AAHjDwADS3pkcwADS3sAAeMbAANLdmJrAANLkhtnAANLksO3AANLknm3AANLkwABFP8AA0t2YncAA0ukAwADQp8AAeMfAANLrmJ3AANLsAMAA0KfAAHjIwADS7piawADS76PIwADS78AAd+jAANLvwAB358AA0u6Yl8AA0vNIwADS88AAd+rAANLumJ3AANL2AMAA0KfAAHjJwADS+JiawADS+cAAd+/AANL5wABpfcAA0vmo5sAA0vmGXcAA0vmHgcAA0vmEW8AA0vmG28AA0viYncAA0wEAwADQp8AAeMrAANMDmJfAANMEu3LAANMEwABNFMAA0wTAAHf8wADTBK7UwADTA5idwADTCQDAANCnwAB4y8AA0wuYmsAA0wyCkMAA0wzAAHgAwADTDMAAd/fAANMLmJfAANMQSMAA0wuYncAA0xIAwADQp8AAeMzAANMUmJrAANMVgmrAANMUmJfAANMXrz/AANMUmJ3AANMZAMAA0KfAAHjNwADTG5iawADTHICswADTHK5vwADTHMAAeGzAANMbmJfAANMgSMAA0xuYncAA0yIAwADQp8AAeM7AANMkmJrAANMlhK7AANMlhK3AANMlhK/AANMlqZzAANMlhKzAANMlgyTAANMlhKPAANMlhFvAANMlhtvAANMkmJfAANMvrjfAANMkmJ3AANMxAMAA0KfAAHjPwADTM5iawADTNMAAeH3AANM0hLbAANM0hLvAANMzmJ3AANM4AMAA0KfAAHivwADTOpiawADTO8AAeBzAANM7wAB4G8AA0zuib8AA0zuFHcAA0zvAAHggwADTO8AAeC3AANM6mJfAANNCmufAANNCwAB4MMAA0zqYncAA00UAwADQp8AAeK3AANNHmJrAANNIhOzAANNIwAB4IcAA00iEGsAA00iE48AA00iub8AA00jAAHgmwADTSMAAeCXAANNIhO7AANNHmJfAANNRwABUw8AA01FIwADTUZsUwADTR5idwADTVQDAANCnwAB40MAA01eYmsAA01iFOsAA01iaiMAA01i0RsAA01eYncAA01wAwADQp8AAeNHAANNemJrAANNfmo3AANNfhBnAANNemJfAANNiSMAA016YncAA02QAwADQp8AAeNLAANNmmJrAANNnwAB4Y8AA02aYncAA02kAwADQp8AAeNPAANNrmJrAANNshTrAANNsg0TAANNsmojAANNshBnAANNshBrAANNshI3AANNsob3AANNsnXnAANNshTPAANNshTXAANNsh4DAANNsqQPAANNswAB38MAA02yzTcAA02zAAHfxwADTbLRHwADTa5iXwADTfUjAANNrmJ3AANN/AMAA0KfAAHjUwADTgZiawADTgoKQwADTgoQZwADTgoQbwADTgoQdwADTgZiXwADTh0jAANOBmJ3AANOJAMAA0KfAAHjVwADTi5iawADTjIKQwADTjKEzwADTjKPCwADTjMAAd/PAANOMgyXAANOLmJ3AANOSAMAA0Ke3IMAA05SYmsAA05WB+sAA05WG6cAA05W3IsAA05SYncAA05kAwADQp8AAR1nAANObmJnAANOcgbDAANOcwAB41sAA05zAAHjXwADTm5idwADToADAANCnwAB42MAA06KYmcAA06PAAHjawADTo4ePwADTo8AAeNvAANOjwAB43MAA06KYncAA06gAAMAAkkUAwACSRsAA06uYmcAA06zAAJJGwADTrcAAe7XAANOtwAB7tsAA063AAHu3wADTrcAAe7jAANOrmJfAANOywACSRsAA07PAAHu5wADTs8AAe7rAANOzwAB7vcAA07PAAHu+wADTs8AAe7/AANOzwAB7wMAA07PAAHvBwADTs8AAe8LAANOzwAB7w8AA07PAAHvEwADTs8AAe8XAANOzwAB7xsAA07PAAHvHwADTq8AAeOzAANPBmJrAANPCYcAA08LAAG7GwADTwqmRwADTwoKLwADTwoFVwADTwoOywADTwZiXwADTyVjAANPJgkLAANPJhFnAANPJn8zAANPJn9HAANPJI8AA08nAAJJGwADT0MAAbsXAANPBmJvAANPSYcAA08GYncAA09QAwADTq8AAePPAANPWmJrAANPXwABuxsAA09epkcAA09eCi8AA09eYiMAA09dcwADT14MZwADT14HowADT14DDwADT1piXwADT4JZGwADT4JY9wADT4JY4wADT4J/WwADT4J/XwADT4GTAANPggxfAANPgn8XAANPggaXAANPglkTAANPglkXAANPgli/AANPglkPAANPgnGrAANPgn8vAANPggK3AANPglRnAANPgg/jAANPglkDAANPgg1nAANPggKvAANPghI/AANPgljbAANPggdTAANPgljrAANPglj/AANPglkLAANPgljnAANPgVsAA0+CApcAA0+Ce1cAA0+Cf2cAA0+CArsAA0+CAu8AA0+CWYMAA0+CGF8AA0+Cf2MAA0+CW/sAA0+CXAcAA0+Cf28AA0+CbscAA09aYm8AA1AqDGcAA1AqB6MAA06vAAHj1wADUDZiXwADUDsAAkkbAANQPwAB498AA1A6DXsAA1A6BWMAA06vAAHj7wADUE5iawADUFMAAbsbAANQUqZHAANQUgovAANQUmIjAANQUXMAA1BSDGcAA1BSB6MAA1BSAw8AA1BOYl8AA1B2WRsAA1B2WPcAA1B2WOMAA1B2f1sAA1B2f18AA1B1kwADUHYMXwADUHZ/FwADUHYGlwADUHZZEwADUHZZFwADUHZYvwADUHZZDwADUHZxqwADUHZ/LwADUHYCtwADUHZUZwADUHYP4wADUHZZAwADUHYNZwADUHYCrwADUHYSPwADUHZY2wADUHYHUwADUHZY6wADUHZY/wADUHZZCwADUHZY5wADUHVbAANQdgKXAANQdntXAANQdn9nAANQdgK7AANQdgLvAANQdlmDAANQdhhfAANQdn9jAANQdlv7AANQdlwHAANQdn9vAANQdm7HAANQTmJvAANRHgxnAANRHgejAANOrwAB4/MAA1EqYl8AA1EvAAJJGwADUTMAAePfAANRLg17AANRLgVjAANOrwAB4/cAA1FCYmsAA1FHAAG7GwADUUamRwADUUYKLwADUUZiIwADUUVzAANRRgxnAANRRgejAANRRgMPAANRQmJfAANRawACSRsAA1FvAAHj3wADUWpZGwADUWpY9wADUWpY4wADUWp/WwADUWp/XwADUWmTAANRagxfAANRan8XAANRag17AANRagaXAANRalkTAANRalkXAANRali/AANRalkPAANRanGrAANRan8vAANRagK3AANRalRnAANRag/jAANRalkDAANRag1nAANRagKvAANRahI/AANRaljbAANRagdTAANRaljrAANRalj/AANRalkLAANRaljnAANRaVsAA1FqApcAA1Fqe1cAA1Fqf2cAA1FqArsAA1FqAu8AA1FqWYMAA1FqGF8AA1Fqf2MAA1FqW/sAA1FqXAcAA1FqBWMAA1Fqf28AA1FqbscAA1FCYm8AA1IiDGcAA1IiB6MAA1FCYncAA1IsAwADTq8AAeP/AANSNmJrAANSOwABuxsAA1I6pkcAA1I6Ci8AA1I6YiMAA1I5cwADUjoMZwADUjoHowADUjoDDwADUjZiXwADUl8AAkkbAANSYwAB498AA1JeWRsAA1JeWPcAA1JeWOMAA1Jef1sAA1Jef18AA1JdkwADUl4MXwADUl5/FwADUl4NewADUl4GlwADUl5ZEwADUl5ZFwADUl5YvwADUl5ZDwADUl5xqwADUl5/LwADUl4CtwADUl5UZwADUl4P4wADUl5ZAwADUl4NZwADUl4CrwADUl4SPwADUl5Y2wADUl4HUwADUl5Y6wADUl5Y/wADUl5ZCwADUl5Y5wADUl1bAANSXgKXAANSXntXAANSXn9nAANSXgK7AANSXgLvAANSXlmDAANSXhhfAANSXn9jAANSXlv7AANSXlwHAANSXgVjAANSXn9vAANSXm7HAANSNmJvAANTFgxnAANTFgejAANSNmJ3AANTIAMAA06vAAHkAwADUypiawADUy8AAbsbAANTLqZHAANTLgovAANTLmIjAANTLXMAA1MuDGcAA1MuB6MAA1MuAw8AA1MqYl8AA1NTAAJJGwADU1cAAePfAANTUlkbAANTUlj3AANTUljjAANTUn9bAANTUn9fAANTUZMAA1NSDF8AA1NSfxcAA1NSDXsAA1NSBpcAA1NSWRMAA1NSWRcAA1NSWL8AA1NSWQ8AA1NScasAA1NSfy8AA1NSArcAA1NSVGcAA1NSD+MAA1NSWQMAA1NSDWcAA1NSAq8AA1NSEj8AA1NSWNsAA1NSB1MAA1NSWOsAA1NSWP8AA1NSWQsAA1NSWOcAA1NRWwADU1IClwADU1J7VwADU1J/ZwADU1ICuwADU1IC7wADU1JZgwADU1IYXwADU1J/YwADU1Jb+wADU1JcBwADU1IFYwADU1J/bwADU1JuxwADUypibwADVAoMZwADVAoHowADUypidwADVBQDAANOrwAB5AcAA1QeYmcAA1QjAAJJGwADVCbbcwADVB5icwADVC8AAkkbAANUMwAB5AsAA1QeYmsAA1Q7AAG5rwADVDoPBwADVB5iXwADVEUjAANURwABubcAA1RHAAHkDwADVEZgqwADVEcAAeQTAANURwAB5BcAA1RHAAHkGwADVEcAAeQfAANURwAB5CMAA1RHAAHkJwADVEcAAeQrAANURwAB5C8AA1RHAAHkMwADVEcAAeQ3AANURwAB5DsAA1RHAAHkPwADVB5idwADVIgDAANOrwAB5EMAA1SSYmsAA1SXAAG7GwADVJamRwADVJcAAbmvAANUlgovAANUlYcAA1SSYl8AA1SvAAJJGwADVLMAAeRLAANUswAB5FMAA1SzAAHkWwADVLMAAeRjAANUswAB5GsAA1SzAAHkcwADVLMAAeR7AANUswAB5IMAA1SzAAHkiwADVLMAAeSTAANUswAB5JsAA1SzAAHkowADVLMAAeSrAANUswAB5LMAA1SzAAHkuwADVLMAAeTDAANUswAB5MsAA1SzAAHk0wADVLMAAeTbAANUswAB5OMAA1SzAAHk6wADVLMAAeTzAANUswAB5PsAA1SzAAHlAwADVLMAAeULAANUswAB5RMAA1SzAAHlGwADVJJidwADVSADAANOrwAB5ScAA1UqYl8AA1Uuf0cAA1UuWRsAA1UuWPcAA1UuWOMAA1Uuf1sAA1Uuf18AA1UtkwADVS4MXwADVS5/FwADVS4GlwADVS5ZEwADVS5ZFwADVS5YvwADVS5ZDwADVS5xqwADVS5/LwADVS4CtwADVS5UZwADVS4P4wADVS5ZAwADVS4NZwADVS4CrwADVS4SPwADVS5Y2wADVS4HUwADVS5Y6wADVS5Y/wADVS5ZCwADVS5Y5wADVS1bAANVLgKXAANVLntXAANVLn9nAANVLgK7AANVLgLvAANVLlmDAANVLhhfAANVLn9jAANVLlv7AANVLlwHAANVLn9vAANVLm7HAANVKmJ3AANV2AMAA1UqYmsAA1XjAAG7GwADVeKmRwADVeIKLwADVeJiIwADVeFzAANV4gxnAANV4gejAANV4gMPAANVKmJvAANWBgxnAANWBgejAANOrwAB5SsAA1YSYl8AA1YWf0cAA1YXAAJJGwADVh8AAePfAANWFg17AANWFgVjAANWEmJ3AANWLAMAA06vAAHlLwADVjZicwADVjsAAkkbAANWPwAB21sAA1Y2Yl8AA1ZFLwADVkYC/wADVkcAAkkbAANWUwAB498AA1ZGf0cAA1Y2YmsAA1ZfAAG7GwADTq8AAeUzAANWZmJfAANWan9HAANWalkbAANWalj3AANWaljjAANWan9bAANWan9fAANWaZMAA1ZqDF8AA1ZqfxcAA1ZqBpcAA1ZqWRMAA1ZqWRcAA1ZqWL8AA1ZqWQ8AA1ZqcasAA1Zqfy8AA1ZqArcAA1ZqVGcAA1ZqD+MAA1ZqWQMAA1ZqDWcAA1ZqAq8AA1ZqEj8AA1ZqWNsAA1ZqB1MAA1ZqWOsAA1ZqWP8AA1ZqWQsAA1ZqWOcAA1ZpWwADVmoClwADVmp7VwADVmp/ZwADVmoCuwADVmoC7wADVmpZgwADVmoYXwADVmp/YwADVmpb+wADVmpcBwADVmp/bwADVmpuxwADVmZidwADVxQDAANWZmJrAANXHwABuxsAA1cepkcAA1ceCi8AA1ceYiMAA1cdcwADVx4MZwADVx4HowADVx4DDwADVmZibwADV0IMZwADV0IHowADTq8AAeU3AANXTmJfAANXUn9HAANXUwACSRsAA1dbAAHj3wADV1INewADV1IFYwADV05idwADV2gDAANOrwAB5TsAA1dyYnMAA1d3AAJJGwADV3sAAdtbAANXcmJfAANXgS8AA1eCAv8AA1eDAAJJGwADV48AAePfAANXgn9HAANXcmJrAANXmwABuxsAA06vAAHlPwADV6JiXwADV6Z/RwADV6ZZGwADV6ZY9wADV6ZY4wADV6Z/WwADV6Z/XwADV6WTAANXpgxfAANXpn8XAANXpgaXAANXplkTAANXplkXAANXpli/AANXplkPAANXpnGrAANXpn8vAANXpgK3AANXplRnAANXpg/jAANXplkDAANXpg1nAANXpgKvAANXphI/AANXpljbAANXpgdTAANXpljrAANXplj/AANXplkLAANXpljnAANXpVsAA1emApcAA1eme1cAA1emf2cAA1emArsAA1emAu8AA1emWYMAA1emGF8AA1emf2MAA1emW/sAA1emXAcAA1emf28AA1embscAA1eiYncAA1hQAwADV6JiawADWFsAAbsbAANYWqZHAANYWgovAANYWmIjAANYWXMAA1haDGcAA1haB6MAA1haAw8AA1eiYm8AA1h+DGcAA1h+B6MAA06vAAHlQwADWIpiXwADWI5/RwADWI8AAkkbAANYlwAB498AA1iODXsAA1iOBWMAA1iKYncAA1ikAwADTq8AAeVHAANYrmJzAANYswACSRsAA1i3AAHbWwADWK5iXwADWL0vAANYvgL/AANYvwACSRsAA1jLAAHj3wADWL5/RwADWK5iawADWNcAAbsbAANOrwAB5UsAA1jeYl8AA1jif0cAA1jiWRsAA1jiWPcAA1jiWOMAA1jif1sAA1jif18AA1jhkwADWOIMXwADWOJ/FwADWOIGlwADWOJZEwADWOJZFwADWOJYvwADWOJZDwADWOJxqwADWOJ/LwADWOICtwADWOJUZwADWOIP4wADWOJZAwADWOINZwADWOICrwADWOISPwADWOJY2wADWOIHUwADWOJY6wADWOJY/wADWOJZCwADWOJY5wADWOFbAANY4gKXAANY4ntXAANY4n9nAANY4gK7AANY4gLvAANY4lmDAANY4hhfAANY4n9jAANY4lv7AANY4lwHAANY4n9vAANY4m7HAANY3mJ3AANZjAMAA1jeYmsAA1mXAAG7GwADWZamRwADWZYKLwADWZZiIwADWZVzAANZlgxnAANZlgejAANZlgMPAANY3mJvAANZugxnAANZugejAANOrwAB5U8AA1nGYl8AA1nKf0cAA1nLAAJJGwADWdMAAePfAANZyg17AANZygVjAANZxmJ3AANZ4AMAA06vAAHlUwADWepicwADWe8AAkkbAANZ8wAB21sAA1nqYl8AA1n5LwADWfoC/wADWfoNewADWfsAAkkbAANaCwAB498AA1oLAAHlVwADWgsAAeVbAANZ+n9HAANZ6mJrAANaHwABuxsAA06vAAHlXwADWiZiXwADWip/RwADWipZGwADWipY9wADWipY4wADWip/WwADWip/XwADWimTAANaKgxfAANaKn8XAANaKgaXAANaKlkTAANaKlkXAANaKli/AANaKlkPAANaKnGrAANaKn8vAANaKgK3AANaKlRnAANaKg/jAANaKlkDAANaKg1nAANaKgKvAANaKhI/AANaKljbAANaKgdTAANaKljrAANaKlj/AANaKlkLAANaKljnAANaKVsAA1oqApcAA1oqe1cAA1oqf2cAA1oqArsAA1oqAu8AA1oqWYMAA1oqGF8AA1oqf2MAA1oqW/sAA1oqXAcAA1oqf28AA1oqbscAA1omYncAA1rUAwADWiZiawADWt8AAbsbAANa3qZHAANa3govAANa3mIjAANa3XMAA1reDGcAA1reB6MAA1reAw8AA1omYm8AA1sCDGcAA1sCB6MAA06vAAHlYwADWw5iXwADWxJ/RwADWxMAAkkbAANbGwAB498AA1sSDXsAA1sSBWMAA1sOYncAA1soAwADTq8AAeVnAANbMmJzAANbNwACSRsAA1s7AAHbWwADWzJiXwADW0EvAANbQgL/AANbQg17AANbQwACSRsAA1tTAAHj3wADW1MAAeVrAANbUwAB5W8AA1tCf0cAA1syYmsAA1tnAAG7GwADTq8AAeVzAANbbmJfAANbcn9HAANbclkbAANbclj3AANbcljjAANbcn9bAANbcn9fAANbcZMAA1tyDF8AA1tyfxcAA1tyBpcAA1tyWRMAA1tyWRcAA1tyWL8AA1tyWQ8AA1tycasAA1tyfy8AA1tyArcAA1tyVGcAA1tyD+MAA1tyWQMAA1tyDWcAA1tyAq8AA1tyEj8AA1tyWNsAA1tyB1MAA1tyWOsAA1tyWP8AA1tyWQsAA1tyWOcAA1txWwADW3IClwADW3J7VwADW3J/ZwADW3ICuwADW3IC7wADW3JZgwADW3IYXwADW3J/YwADW3Jb+wADW3JcBwADW3J/bwADW3JuxwADW25idwADXBwDAANbbmJrAANcJwABuxsAA1wmpkcAA1wmCi8AA1wmYiMAA1wlcwADXCYMZwADXCYHowADXCYDDwADW25ibwADXEoMZwADXEoHowADTq8AAeV3AANcVmJfAANcWn9HAANcWwACSRsAA1xjAAHj3wADXFoNewADXFoFYwADXFZidwADXHADAANOrwAB5XsAA1x6YnMAA1x/AAJJGwADXIMAAdtbAANcemJfAANciS8AA1yKAv8AA1yLAAJJGwADXJcAAePfAANclwAB5X8AA1yXAAHlgwADXIp/RwADXHpiawADXKsAAbsbAANOrwAB5YcAA1yyYl8AA1y2f0cAA1y2WRsAA1y2WPcAA1y2WOMAA1y2f1sAA1y2f18AA1y1kwADXLYMXwADXLZ/FwADXLYGlwADXLZZEwADXLZZFwADXLZYvwADXLZZDwADXLZxqwADXLZ/LwADXLYCtwADXLZUZwADXLYP4wADXLZZAwADXLYNZwADXLYCrwADXLYSPwADXLZY2wADXLYHUwADXLZY6wADXLZY/wADXLZZCwADXLZY5wADXLVbAANctgKXAANctntXAANctn9nAANctgK7AANctgLvAANctlmDAANcthhfAANctn9jAANctlv7AANctlwHAANctn9vAANctm7HAANcsmJ3AANdYAMAA1yyYmsAA11rAAG7GwADXWqmRwADXWoKLwADXWpiIwADXWlzAANdagxnAANdagejAANdagMPAANcsmJvAANdjgxnAANdjgejAANOrwAB5YsAA12aYl8AA12ef0cAA12fAAJJGwADXacAAePfAANdng17AANdngVjAANdmmJ3AANdtAMAA06vAAHljwADXb5icwADXcMAAkkbAANdxwAB21sAA12+Yl8AA13NLwADXc4C/wADXc8AAkkbAANd2wAB498AA13bAAHlkwADXdsAAeWXAANdzn9HAANdvmJrAANd7wABuxsAA06vAAHlmwADXfZiXwADXfp/RwADXfpZGwADXfpY9wADXfpY4wADXfp/WwADXfp/XwADXfmTAANd+gxfAANd+n8XAANd+gaXAANd+lkTAANd+lkXAANd+li/AANd+lkPAANd+nGrAANd+n8vAANd+gK3AANd+lRnAANd+g/jAANd+lkDAANd+g1nAANd+gKvAANd+hI/AANd+ljbAANd+gdTAANd+ljrAANd+lj/AANd+lkLAANd+ljnAANd+VsAA136ApcAA136e1cAA136f2cAA136ArsAA136Au8AA136WYMAA136GF8AA136f2MAA136W/sAA136XAcAA136f28AA136bscAA132YncAA16kAwADXfZiawADXq8AAbsbAANerqZHAANergovAANermIjAANerXMAA16uDGcAA16uB6MAA16uAw8AA132Ym8AA17SDGcAA17SB6MAA06vAAHlnwADXt5iXwADXuJ/RwADXuMAAkkbAANe6wAB498AA17iDXsAA17iBWMAA17eYncAA174AwADTq8AAeWjAANfAmJzAANfBwACSRsAA18LAAHbWwADXwJiXwADXxEvAANfEgL/AANfEwACSRsAA18fAAHj3wADXx8AAeWnAANfHwAB5asAA18Sf0cAA18CYmsAA18zAAG7GwADTq8AAeWvAANfOmJfAANfPn9HAANfPlkbAANfPlj3AANfPljjAANfPn9bAANfPn9fAANfPZMAA18+DF8AA18+fxcAA18+BpcAA18+WRMAA18+WRcAA18+WL8AA18+WQ8AA18+casAA18+fy8AA18+ArcAA18+VGcAA18+D+MAA18+WQMAA18+DWcAA18+Aq8AA18+Ej8AA18+WNsAA18+B1MAA18+WOsAA18+WP8AA18+WQsAA18+WOcAA189WwADXz4ClwADXz57VwADXz5/ZwADXz4CuwADXz4C7wADXz5ZgwADXz4YXwADXz5/YwADXz5b+wADXz5cBwADXz5/bwADXz5uxwADXzpidwADX+gDAANfOmJrAANf8wABuxsAA1/ypkcAA1/yCi8AA1/yYiMAA1/xcwADX/IMZwADX/IHowADX/IDDwADXzpibwADYBYMZwADYBYHowADTq8AAeWzAANgImJfAANgJn9HAANgJwACSRsAA2AvAAHj3wADYCYNewADYCYFYwADYCJidwADYDwDAANOrwAB5bcAA2BGYnMAA2BLAAJJGwADYE8AAdtbAANgRmJfAANgVS8AA2BWAv8AA2BXAAJJGwADYGMAAePfAANgYwAB5bsAA2BjAAHlvwADYFZ/RwADYEZiawADYHcAAbsbAANOrwAB5cMAA2B+Yl8AA2CCf0cAA2CCWRsAA2CCWPcAA2CCWOMAA2CCf1sAA2CCf18AA2CBkwADYIIMXwADYIJ/FwADYIIGlwADYIJZEwADYIJZFwADYIJYvwADYIJZDwADYIJxqwADYIJ/LwADYIICtwADYIJUZwADYIIP4wADYIJZAwADYIINZwADYIICrwADYIISPwADYIJY2wADYIIHUwADYIJY6wADYIJY/wADYIJZCwADYIJY5wADYIFbAANgggKXAANggntXAANggn9nAANgggK7AANgggLvAANgglmDAANgghhfAANggn9jAANgglv7AANgglwHAANggn9vAANggm7HAANgfmJ3AANhLAMAA2B+YmsAA2E3AAG7GwADYTamRwADYTYKLwADYTZiIwADYTVzAANhNgxnAANhNgejAANhNgMPAANgfmJvAANhWgxnAANhWgejAANOrwAB5ccAA2FmYl8AA2Fqf0cAA2FrAAJJGwADYXMAAePfAANhag17AANhagVjAANhZmJ3AANhgAMAA06vAAHlywADYYpicwADYY8AAkkbAANhkwAB21sAA2GKYl8AA2GZLwADYZoC/wADYZsAAkkbAANhpwAB498AA2GnAAHlzwADYacAAeXTAANhmn9HAANhimJrAANhuwABuxsAA06vAAHl1wADYcJiXwADYcZ/RwADYcZZGwADYcZY9wADYcZY4wADYcZ/WwADYcZ/XwADYcWTAANhxgxfAANhxn8XAANhxgaXAANhxlkTAANhxlkXAANhxli/AANhxlkPAANhxnGrAANhxn8vAANhxgK3AANhxlRnAANhxg/jAANhxlkDAANhxg1nAANhxgKvAANhxhI/AANhxljbAANhxgdTAANhxljrAANhxlj/AANhxlkLAANhxljnAANhxVsAA2HGApcAA2HGe1cAA2HGf2cAA2HGArsAA2HGAu8AA2HGWYMAA2HGGF8AA2HGf2MAA2HGW/sAA2HGXAcAA2HGf28AA2HGbscAA2HCYncAA2JwAwADYcJiawADYnsAAbsbAANieqZHAANiegovAANiemIjAANieXMAA2J6DGcAA2J6B6MAA2J6Aw8AA2HCYm8AA2KeDGcAA2KeB6MAA06vAAHl2wADYqpiXwADYq5/RwADYq8AAkkbAANitwAB498AA2KuDXsAA2KuBWMAA2KqYncAA2LEAwADTq8AAeXfAANizmJzAANi0wACSRsAA2LXAAHbWwADYs5iXwADYt0vAANi3gL/AANi3wACSRsAA2LrAAHj3wADYusAAeXjAANi6wAB5ecAA2Lef0cAA2LOYmsAA2L/AAG7GwADTq8AAeXrAANjBmJfAANjCn9HAANjCwACSRsAA2MTAAHj3wADYwpZGwADYwpY9wADYwpY4wADYwp/WwADYwp/XwADYwmTAANjCgxfAANjCn8XAANjCg17AANjCgaXAANjClkTAANjClkXAANjCli/AANjClkPAANjCnGrAANjCn8vAANjCgK3AANjClRnAANjCg/jAANjClkDAANjCg1nAANjCgKvAANjChI/AANjCljbAANjCgdTAANjCljrAANjClj/AANjClkLAANjCljnAANjCVsAA2MKApcAA2MKe1cAA2MKf2cAA2MKArsAA2MKAu8AA2MKWYMAA2MKGF8AA2MKf2MAA2MKW/sAA2MKXAcAA2MKBWMAA2MKf28AA2MKbscAA2MGYncAA2PEAwADYwZiawADY88AAbsbAANjzqZHAANjzgovAANjzmIjAANjzXMAA2PODGcAA2POB6MAA2POAw8AA2MGYm8AA2PyDGcAA2PyB6MAA06vAAHl7wADY/5icwADZAMAAkkbAANkBwAB21sAA2P+Yl8AA2QNLwADZA4C/wADZA8AAkkbAANkGwAB498AA2QbAAHl8wADZBsAAeX3AANkDn9HAANj/mJrAANkLwABuxsAA06vAAHl+wADZDZiXwADZDp/RwADZDsAAkkbAANkQwAB498AA2Q6WRsAA2Q6WPcAA2Q6WOMAA2Q6f1sAA2Q6f18AA2Q5kwADZDoMXwADZDp/FwADZDoNewADZDoGlwADZDpZEwADZDpZFwADZDpYvwADZDpZDwADZDpxqwADZDp/LwADZDoCtwADZDpUZwADZDoP4wADZDpZAwADZDoNZwADZDoCrwADZDoSPwADZDpY2wADZDoHUwADZDpY6wADZDpY/wADZDpZCwADZDpY5wADZDlbAANkOgKXAANkOntXAANkOn9nAANkOgK7AANkOgLvAANkOlmDAANkOhhfAANkOn9jAANkOlv7AANkOlwHAANkOgVjAANkOn9vAANkOm7HAANkNmJ3AANk9AMAA2Q2YmsAA2T/AAG7GwADZP6mRwADZP4KLwADZP5iIwADZP1zAANk/gxnAANk/gejAANk/gMPAANkNmJvAANlIgxnAANlIgejAANOrwAB5f8AA2UuYnMAA2UzAAJJGwADZTcAAdtbAANlLmJfAANlPS8AA2U+Av8AA2U/AAJJGwADZUsAAePfAANlSwAB5gMAA2VLAAHmBwADZT5/RwADZS5iawADZV8AAbsbAANOrwAB5gsAA2VmYl8AA2Vqf0cAA2VrAAJJGwADZXMAAePfAANlalkbAANlalj3AANlaljjAANlan9bAANlan9fAANlaZMAA2VqDF8AA2VqfxcAA2VqDXsAA2VqBpcAA2VqWRMAA2VqWRcAA2VqWL8AA2VqWQ8AA2VqcasAA2Vqfy8AA2VqArcAA2VqVGcAA2VqD+MAA2VqWQMAA2VqDWcAA2VqAq8AA2VqEj8AA2VqWNsAA2VqB1MAA2VqWOsAA2VqWP8AA2VqWQsAA2VqWOcAA2VpWwADZWoClwADZWp7VwADZWp/ZwADZWoCuwADZWoC7wADZWpZgwADZWoYXwADZWp/YwADZWpb+wADZWpcBwADZWoFYwADZWp/bwADZWpuxwADZWZidwADZiQDAANlZmJrAANmLwABuxsAA2YupkcAA2YuCi8AA2YuYiMAA2YtcwADZi4MZwADZi4HowADZi4DDwADZWZibwADZlIMZwADZlIHowADTq8AAeYPAANmXmJzAANmYwACSRsAA2ZnAAHbWwADZl5iXwADZm0vAANmbgL/AANmbwACSRsAA2Z7AAHj3wADZnsAAeYTAANmewAB5hcAA2Zuf0cAA2ZeYmsAA2aPAAG7GwADTq8AAeYbAANmlmJfAANmmn9HAANmmlkbAANmmlj3AANmmljjAANmmn9bAANmmn9fAANmmZMAA2aaDF8AA2aafxcAA2aaBpcAA2aaWRMAA2aaWRcAA2aaWL8AA2aaWQ8AA2aacasAA2aafy8AA2aaArcAA2aaVGcAA2aaD+MAA2aaWQMAA2aaDWcAA2aaAq8AA2aaEj8AA2aaWNsAA2aaB1MAA2aaWOsAA2aaWP8AA2aaWQsAA2aaWOcAA2aZWwADZpoClwADZpp7VwADZpp/ZwADZpoCuwADZpoC7wADZppZgwADZpoYXwADZpp/YwADZppb+wADZppcBwADZpp/bwADZppuxwADZpZidwADZ0QDAANmlmJrAANnTwABuxsAA2dOpkcAA2dOCi8AA2dOYiMAA2dNcwADZ04MZwADZ04HowADZ04DDwADZpZibwADZ3IMZwADZ3IHowADTq8AAeYfAANnfmJfAANngn9HAANngwACSRsAA2eLAAHj3wADZ4INewADZ4IFYwADZ35idwADZ5gDAANOrwAB5iMAA2eiYnMAA2enAAJJGwADZ6sAAdtbAANnomJfAANnsS8AA2eyAv8AA2ezAAJJGwADZ78AAePfAANnsn9HAANnomJrAANnywABuxsAA06vAAHmJwADZ9JiXwADZ9Z/RwADZ9ZZGwADZ9ZY9wADZ9ZY4wADZ9Z/WwADZ9Z/XwADZ9WTAANn1gxfAANn1n8XAANn1gaXAANn1lkTAANn1lkXAANn1li/AANn1lkPAANn1nGrAANn1n8vAANn1gK3AANn1lRnAANn1g/jAANn1lkDAANn1g1nAANn1gKvAANn1hI/AANn1ljbAANn1gdTAANn1ljrAANn1lj/AANn1lkLAANn1ljnAANn1VsAA2fWApcAA2fWe1cAA2fWf2cAA2fWArsAA2fWAu8AA2fWWYMAA2fWGF8AA2fWf2MAA2fWW/sAA2fWXAcAA2fWf28AA2fWbscAA2fSYncAA2iAAwADZ9JiawADaIsAAbsbAANoiqZHAANoigovAANoimIjAANoiXMAA2iKDGcAA2iKB6MAA2iKAw8AA2fSYm8AA2iuDGcAA2iuB6MAA06vAAHmKwADaLpiXwADaL5/RwADaL8AAkkbAANoxwAB498AA2i+DXsAA2i+BWMAA2i6YncAA2jUAwADTq8AAeYvAANo3mJzAANo4wACSRsAA2jnAAHbWwADaN5iXwADaO0vAANo7gL/AANo7wACSRsAA2j7AAHj3wADaO5/RwADaN5iawADaQcAAbsbAANOrwAB5jMAA2kOYl8AA2kSf0cAA2kSWRsAA2kSWPcAA2kSWOMAA2kSf1sAA2kSf18AA2kRkwADaRIMXwADaRJ/FwADaRIGlwADaRJZEwADaRJZFwADaRJYvwADaRJZDwADaRJxqwADaRJ/LwADaRICtwADaRJUZwADaRIP4wADaRJZAwADaRINZwADaRICrwADaRISPwADaRJY2wADaRIHUwADaRJY6wADaRJY/wADaRJZCwADaRJY5wADaRFbAANpEgKXAANpEntXAANpEn9nAANpEgK7AANpEgLvAANpElmDAANpEhhfAANpEn9jAANpElv7AANpElwHAANpEn9vAANpEm7HAANpDmJ3AANpvAMAA2kOYmsAA2nHAAG7GwADacamRwADacYKLwADacZiIwADacVzAANpxgxnAANpxgejAANpxgMPAANpDmJvAANp6gxnAANp6gejAANOrwAB5jcAA2n2Yl8AA2n6f0cAA2n7AAJJGwADagMAAePfAANp+g17AANp+gVjAANp9mJ3AANqEAMAA06vAAHmOwADahpicwADah8AAkkbAANqIwAB21sAA2oaYl8AA2opLwADaioC/wADaisAAkkbAANqNwAB498AA2oqf0cAA2oaYmsAA2pDAAG7GwADTq8AAeY/AANqSmJfAANqTn9HAANqTlkbAANqTlj3AANqTljjAANqTn9bAANqTn9fAANqTZMAA2pODF8AA2pOfxcAA2pOBpcAA2pOWRMAA2pOWRcAA2pOWL8AA2pOWQ8AA2pOcasAA2pOfy8AA2pOArcAA2pOVGcAA2pOD+MAA2pOWQMAA2pODWcAA2pOAq8AA2pOEj8AA2pOWNsAA2pOB1MAA2pOWOsAA2pOWP8AA2pOWQsAA2pOWOcAA2pNWwADak4ClwADak57VwADak5/ZwADak4CuwADak4C7wADak5ZgwADak4YXwADak5/YwADak5b+wADak5cBwADak5/bwADak5uxwADakpidwADavgDAANqSmJrAANrAwABuxsAA2sCpkcAA2sCCi8AA2sCYiMAA2sBcwADawIMZwADawIHowADawIDDwADakpibwADayYMZwADayYHowADTq8AAeZDAANrMmJfAANrNn9HAANrNwACSRsAA2s/AAHj3wADazYNewADazYFYwADazJidwADa0wDAANOrwAB5kcAA2tWYnMAA2tbAAJJGwADa18AAdtbAANrVmJfAANrZS8AA2tmAv8AA2tnAAJJGwADa3MAAePfAANrcwAB5VcAA2tzAAHlWwADa2Z/RwADa1ZiawADa4cAAbsbAANOrwAB5ksAA2uOYl8AA2uSf0cAA2uSWRsAA2uSWPcAA2uSWOMAA2uSf1sAA2uSf18AA2uRkwADa5IMXwADa5J/FwADa5IGlwADa5JZEwADa5JZFwADa5JYvwADa5JZDwADa5JxqwADa5J/LwADa5ICtwADa5JUZwADa5IP4wADa5JZAwADa5INZwADa5ICrwADa5ISPwADa5JY2wADa5IHUwADa5JY6wADa5JY/wADa5JZCwADa5JY5wADa5FbAANrkgKXAANrkntXAANrkn9nAANrkgK7AANrkgLvAANrklmDAANrkhhfAANrkn9jAANrklv7AANrklwHAANrkn9vAANrkm7HAANrjmJ3AANsPAMAA2uOYmsAA2xHAAG7GwADbEamRwADbEYKLwADbEZiIwADbEVzAANsRgxnAANsRgejAANsRgMPAANrjmJvAANsagxnAANsagejAANOrwAB5k8AA2x2Yl8AA2x6f0cAA2x7AAJJGwADbIMAAePfAANseg17AANsegVjAANsdmJ3AANskAMAA06vAAHmUwADbJpicwADbJ8AAkkbAANsowAB21sAA2yaYl8AA2ypLwADbKoC/wADbKsAAkkbAANstwAB498AA2y3AAHlawADbLcAAeVvAANsqn9HAANsmmJrAANsywABuxsAA06vAAHmVwADbNJiXwADbNZ/RwADbNZZGwADbNZY9wADbNZY4wADbNZ/WwADbNZ/XwADbNWTAANs1gxfAANs1n8XAANs1gaXAANs1lkTAANs1lkXAANs1li/AANs1lkPAANs1nGrAANs1n8vAANs1gK3AANs1lRnAANs1g/jAANs1lkDAANs1g1nAANs1gKvAANs1hI/AANs1ljbAANs1gdTAANs1ljrAANs1lj/AANs1lkLAANs1ljnAANs1VsAA2zWApcAA2zWe1cAA2zWf2cAA2zWArsAA2zWAu8AA2zWWYMAA2zWGF8AA2zWf2MAA2zWW/sAA2zWXAcAA2zWf28AA2zWbscAA2zSYncAA22AAwADbNJiawADbYsAAbsbAANtiqZHAANtigovAANtimIjAANtiXMAA22KDGcAA22KB6MAA22KAw8AA2zSYm8AA22uDGcAA22uB6MAA06vAAHmWwADbbpiXwADbb5/RwADbb8AAkkbAANtxwAB498AA22+DXsAA22+BWMAA226YncAA23UAwADTq8AAeZfAANt3mJzAANt4wACSRsAA23nAAHbWwADbd5iXwADbe0vAANt7gL/AANt7wACSRsAA237AAHj3wADbfsAAeV/AANt+wAB5YMAA23uf0cAA23eYmsAA24PAAG7GwADTq8AAeZjAANuFmJfAANuGn9HAANuGlkbAANuGlj3AANuGljjAANuGn9bAANuGn9fAANuGZMAA24aDF8AA24afxcAA24aBpcAA24aWRMAA24aWRcAA24aWL8AA24aWQ8AA24acasAA24afy8AA24aArcAA24aVGcAA24aD+MAA24aWQMAA24aDWcAA24aAq8AA24aEj8AA24aWNsAA24aB1MAA24aWOsAA24aWP8AA24aWQsAA24aWOcAA24ZWwADbhoClwADbhp7VwADbhp/ZwADbhoCuwADbhoC7wADbhpZgwADbhoYXwADbhp/YwADbhpb+wADbhpcBwADbhp/bwADbhpuxwADbhZidwADbsQDAANuFmJrAANuzwABuxsAA27OpkcAA27OCi8AA27OYiMAA27NcwADbs4MZwADbs4HowADbs4DDwADbhZibwADbvIMZwADbvIHowADTq8AAeZnAANu/mJfAANvAn9HAANvAwACSRsAA28LAAHj3wADbwINewADbwIFYwADbv5idwADbxgDAANOrwAB5msAA28iYnMAA28nAAJJGwADbysAAdtbAANvImJfAANvMS8AA28yAv8AA28zAAJJGwADbz8AAePfAANvPwAB5ZMAA28/AAHllwADbzJ/RwADbyJiawADb1MAAbsbAANOrwAB5m8AA29aYl8AA29ef0cAA29eWRsAA29eWPcAA29eWOMAA29ef1sAA29ef18AA29dkwADb14MXwADb15/FwADb14GlwADb15ZEwADb15ZFwADb15YvwADb15ZDwADb15xqwADb15/LwADb14CtwADb15UZwADb14P4wADb15ZAwADb14NZwADb14CrwADb14SPwADb15Y2wADb14HUwADb15Y6wADb15Y/wADb15ZCwADb15Y5wADb11bAANvXgKXAANvXntXAANvXn9nAANvXgK7AANvXgLvAANvXlmDAANvXhhfAANvXn9jAANvXlv7AANvXlwHAANvXn9vAANvXm7HAANvWmJ3AANwCAMAA29aYmsAA3ATAAG7GwADcBKmRwADcBIKLwADcBJiIwADcBFzAANwEgxnAANwEgejAANwEgMPAANvWmJvAANwNgxnAANwNgejAANOrwAB5nMAA3BCYl8AA3BGf0cAA3BHAAJJGwADcE8AAePfAANwRg17AANwRgVjAANwQmJ3AANwXAMAA06vAAHmdwADcGZicwADcGsAAkkbAANwbwAB21sAA3BmYl8AA3B1LwADcHYC/wADcHcAAkkbAANwgwAB498AA3CDAAHlpwADcIMAAeWrAANwdn9HAANwZmJrAANwlwABuxsAA06vAAHmewADcJ5iXwADcKJ/RwADcKJZGwADcKJY9wADcKJY4wADcKJ/WwADcKJ/XwADcKGTAANwogxfAANwon8XAANwogaXAANwolkTAANwolkXAANwoli/AANwolkPAANwonGrAANwon8vAANwogK3AANwolRnAANwog/jAANwolkDAANwog1nAANwogKvAANwohI/AANwoljbAANwogdTAANwoljrAANwolj/AANwolkLAANwoljnAANwoVsAA3CiApcAA3Cie1cAA3Cif2cAA3CiArsAA3CiAu8AA3CiWYMAA3CiGF8AA3Cif2MAA3CiW/sAA3CiXAcAA3Cif28AA3CibscAA3CeYncAA3FMAwADcJ5iawADcVcAAbsbAANxVqZHAANxVgovAANxVmIjAANxVXMAA3FWDGcAA3FWB6MAA3FWAw8AA3CeYm8AA3F6DGcAA3F6B6MAA06vAAHmfwADcYZiXwADcYp/RwADcYsAAkkbAANxkwAB498AA3GKDXsAA3GKBWMAA3GGYncAA3GgAwADTq8AAeaDAANxqmJzAANxrwACSRsAA3GzAAHbWwADcapiXwADcbkvAANxugL/AANxuwACSRsAA3HHAAHj3wADcccAAeW7AANxxwAB5b8AA3G6f0cAA3GqYmsAA3HbAAG7GwADTq8AAeaHAANx4mJfAANx5n9HAANx5lkbAANx5lj3AANx5ljjAANx5n9bAANx5n9fAANx5ZMAA3HmDF8AA3HmfxcAA3HmBpcAA3HmWRMAA3HmWRcAA3HmWL8AA3HmWQ8AA3HmcasAA3Hmfy8AA3HmArcAA3HmVGcAA3HmD+MAA3HmWQMAA3HmDWcAA3HmAq8AA3HmEj8AA3HmWNsAA3HmB1MAA3HmWOsAA3HmWP8AA3HmWQsAA3HmWOcAA3HlWwADceYClwADceZ7VwADceZ/ZwADceYCuwADceYC7wADceZZgwADceYYXwADceZ/YwADceZb+wADceZcBwADceZ/bwADceZuxwADceJidwADcpADAANx4mJrAANymwABuxsAA3KapkcAA3KaCi8AA3KaYiMAA3KZcwADcpoMZwADcpoHowADcpoDDwADceJibwADcr4MZwADcr4HowADTq8AAeaLAANyymJfAANyzn9HAANyzwACSRsAA3LXAAHj3wADcs4NewADcs4FYwADcspidwADcuQDAANOrwAB5o8AA3LuYnMAA3LzAAJJGwADcvcAAdtbAANy7mJfAANy/S8AA3L+Av8AA3L/AAJJGwADcwsAAePfAANzC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YZidwADeaQDAANOrwAB6FcAA3muYl8AA3myf0cAA3myWRsAA3myWPcAA3myWOMAA3myf1sAA3myf18AA3mxkwADebIMXwADebJ/FwADebIGlwADebJZEwADebJZFwADebJYvwADebJZDwADebJxqwADebJ/LwADebICtwADebJUZwADebIP4wADebJZAwADebINZwADebICrwADebISPwADebJY2wADebIHUwADebJY6wADebJY/wADebJZCwADebJY5wADebFbAAN5sgKXAAN5sntXAAN5sn9nAAN5sgK7AAN5sgLvAAN5slmDAAN5shhfAAN5sn9jAAN5slv7AAN5slwHAAN5sn9vAAN5sm7HAAN5rmJ3AAN6XAMAA3muYmsAA3pnAAG7GwADemamRwADemYKLwADemZiIwADemVzAAN6ZgxnAAN6ZgejAAN6ZgMPAAN5rmJvAAN6igxnAAN6igejAANOrwAB6FsAA3qWYl8AA3qaf0cAA3qbAAJJGwADeqMAAePfAAN6mg17AAN6mgVjAAN6lmJ3AAN6sAMAA06vAAHoXwADerpicwADer8AAkkbAAN6wgLXAAN6umJfAAN6yS8AA3rKAv8AA3rLAAJJGwADetcAAePfAAN6yn9HAAN6umJrAAN64wABuxsAA06vAAHoZwADeupiXwADeu5/RwADeu5ZGwADeu5Y9wADeu5Y4wADeu5/WwADeu5/XwADeu2TAAN67gxfAAN67n8XAAN67gaXAAN67lkTAAN67lkXAAN67li/AAN67lkPAAN67nGrAAN67n8vAAN67gK3AAN67lRnAAN67g/jAAN67lkDAAN67g1nAAN67gKvAAN67hI/AAN67ljbAAN67gdTAAN67ljrAAN67lj/AAN67lkLAAN67ljnAAN67VsAA3ruApcAA3rue1cAA3ruf2cAA3ruArsAA3ruAu8AA3ruWYMAA3ruGF8AA3ruf2MAA3ruW/sAA3ruXAcAA3ruf28AA3rubscAA3rqYncAA3uYAwADeupiawADe6MAAbsbAAN7oqZHAAN7ogovAAN7omIjAAN7oXMAA3uiDGcAA3uiB6MAA3uiAw8AA3rqYm8AA3vGDGcAA3vGB6MAA06vAAHoawADe9JiXwADe9Z/RwADe9cAAkkbAAN73wAB498AA3vWDXsAA3vWBWMAA3vSYncAA3vsAwADTq8AAehvAAN79mJzAAN7+wACSRsAA3v+AtcAA3v2Yl8AA3wFLwADfAYC/wADfAcAAkkbAAN8EwAB498AA3wGf0cAA3v2YmsAA3wfAAG7GwADTq8AAeh3AAN8JmJfAAN8Kn9HAAN8KlkbAAN8Klj3AAN8KljjAAN8Kn9bAAN8Kn9fAAN8KZMAA3wqDF8AA3wqfxcAA3wqBpcAA3wqWRMAA3wqWRcAA3wqWL8AA3wqWQ8AA3wqcasAA3wqfy8AA3wqArcAA3wqVGcAA3wqD+MAA3wqWQMAA3wqDWcAA3wqAq8AA3wqEj8AA3wqWNsAA3wqB1MAA3wqWOsAA3wqWP8AA3wqWQsAA3wqWOcAA3wpWwADfCoClwADfCp7VwADfCp/ZwADfCoCuwADfCoC7wADfCpZgwADfCoYXwADfCp/YwADfCpb+wADfCpcBwADfCp/bwADfCpuxwADfCZidwADfNQDAAN8JmJrAAN83wABuxsAA3zepkcAA3zeCi8AA3zeYiMAA3zdcwADfN4MZwADfN4HowADfN4DDwADfCZibwADfQIMZwADfQIHowADTq8AAeh7AAN9DmJfAAN9En9HAAN9EwACSRsAA30bAAHj3wADfRINewADfRIFYwADfQ5idwADfSgDAANOrwAB6H8AA30yYnMAA303AAJJGwADfToC1wADfTJiXwADfUEvAAN9QgL/AAN9QwACSRsAA31PAAHj3wADfUJ/RwADfTJiawADfVsAAbsbAANOrwAB6IcAA31iYl8AA31mf0cAA31mWRsAA31mWPcAA31mWOMAA31mf1sAA31mf18AA31lkwADfWYMXwADfWZ/FwADfWYGlwADfWZZEwADfWZZFwADfWZYvwADfWZZDwADfWZxqwADfWZ/LwADfWYCtwADfWZUZwADfWYP4wADfWZZAwADfWYNZwADfWYCrwADfWYSPwADfWZY2wADfWYHUwADfWZY6wADfWZY/wADfWZZCwADfWZY5wADfWVbAAN9ZgKXAAN9ZntXAAN9Zn9nAAN9ZgK7AAN9ZgLvAAN9ZlmDAAN9ZhhfAAN9Zn9jAAN9Zlv7AAN9ZlwHAAN9Zn9vAAN9Zm7HAAN9YmJ3AAN+EAMAA31iYmsAA34bAAG7GwADfhqmRwADfhoKLwADfhpiIwADfhlzAAN+GgxnAAN+GgejAAN+GgMPAAN9YmJvAAN+PgxnAAN+PgejAANOrwAB6IsAA35KYl8AA35Of0cAA35PAAJJGwADflcAAePfAAN+Tg17AAN+TgVjAAN+SmJ3AAN+ZAMAA06vAAHojwADfm5icwADfnMAAkkbAAN+dgLXAAN+bmJfAAN+fS8AA35+Av8AA35+DXsAA35/AAJJGwADfo8AAePfAAN+fn9HAAN+bmJrAAN+mwABuxsAA06vAAHolwADfqJiXwADfqZ/RwADfqZZGwADfqZY9wADfqZY4wADfqZ/WwADfqZ/XwADfqWTAAN+pgxfAAN+pn8XAAN+pgaXAAN+plkTAAN+plkXAAN+pli/AAN+plkPAAN+pnGrAAN+pn8vAAN+pgK3AAN+plRnAAN+pg/jAAN+plkDAAN+pg1nAAN+pgKvAAN+phI/AAN+pljbAAN+pgdTAAN+pljrAAN+plj/AAN+plkLAAN+pljnAAN+pVsAA36mApcAA36me1cAA36mf2cAA36mArsAA36mAu8AA36mWYMAA36mGF8AA36mf2MAA36mW/sAA36mXAcAA36mf28AA36mbscAA36iYncAA39QAwADfqJiawADf1sAAbsbAAN/WqZHAAN/WgovAAN/WmIjAAN/WXMAA39aDGcAA39aB6MAA39aAw8AA36iYm8AA39+DGcAA39+B6MAA06vAAHomwADf4piXwADf45/RwADf48AAkkbAAN/lwAB498AA3+ODXsAA3+OBWMAA3+KYncAA3+kAwADTq8AAeifAAN/rmJzAAN/swACSRsAA3+2AtcAA3+uYl8AA3+9LwADf74C/wADf74NewADf78AAkkbAAN/zwAB498AA3++f0cAA3+uYmsAA3/bAAG7GwADTq8AAeinAAN/4mJfAAN/5n9HAAN/5lkbAAN/5lj3AAN/5ljjAAN/5n9bAAN/5n9fAAN/5ZMAA3/mDF8AA3/mfxcAA3/mBpcAA3/mWRMAA3/mWRcAA3/mWL8AA3/mWQ8AA3/mcasAA3/mfy8AA3/mArcAA3/mVGcAA3/mD+MAA3/mWQMAA3/mDWcAA3/mAq8AA3/mEj8AA3/mWNsAA3/mB1MAA3/mWOsAA3/mWP8AA3/mWQsAA3/mWOcAA3/lWwADf+YClwADf+Z7VwADf+Z/ZwADf+YCuwADf+YC7wADf+ZZgwADf+YYXwADf+Z/YwADf+Zb+wADf+ZcBwADf+Z/bwADf+ZuxwADf+JidwADgJADAAN/4mJrAAOAmwABuxsAA4CapkcAA4CaCi8AA4CaYiMAA4CZcwADgJoMZwADgJoHowADgJoDDwADf+JibwADgL4MZwADgL4HowADTq8AAeirAAOAymJfAAOAzn9HAAOAzwACSRsAA4DXAAHj3wADgM4NewADgM4FYwADgMpidwADgOQDAANOrwAB6K8AA4DuYnMAA4DzAAJJGwADgPYC1wADgO5iXwADgP0vAAOA/gL/AAOA/wACSRsAA4ELAAHj3wADgP5/RwADgO5iawADgRcAAbsbAANOrwAB6LcAA4EeYl8AA4Eif0cAA4EiWRsAA4EiWPcAA4EiWOMAA4Eif1sAA4Eif18AA4EhkwADgSIMXwADgSJ/FwADgSIGlwADgSJZEwADgSJZFwADgSJYvwADgSJZDwADgSJxqwADgSJ/LwADgSICtwADgSJUZwADgSIP4wADgSJZAwADgSINZwADgSICrwADgSISPwADgSJY2wADgSIHUwADgSJY6wADgSJY/wADgSJZCwADgSJY5wADgSFbAAOBIgKXAAOBIntXAAOBIn9nAAOBIgK7AAOBIgLvAAOBIlmDAAOBIhhfAAOBIn9jAAOBIlv7AAOBIlwHAAOBIn9vAAOBIm7HAAOBHmJ3AAOBzAMAA4EeYmsAA4HXAAG7GwADgdamRwADgdYKLwADgdZiIwADgdVzAAOB1gxnAAOB1gejAAOB1gMPAAOBHmJvAAOB+gxnAAOB+gejAANOrwAB6LsAA4IGYl8AA4IKf0cAA4ILAAJJGwADghMAAePfAAOCCg17AAOCCgVjAAOCBmJ3AAOCIAMAA06vAAHovwADgipicwADgi8AAkkbAAOCMgLXAAOCKmJfAAOCOS8AA4I6Av8AA4I7AAJJGwADgkcAAePfAAOCOn9HAAOCKmJrAAOCUwABuxsAA06vAAHoxwADglpiXwADgl5/RwADgl5ZGwADgl5Y9wADgl5Y4wADgl5/WwADgl5/XwADgl2TAAOCXgxfAAOCXn8XAAOCXgaXAAOCXlkTAAOCXlkXAAOCXli/AAOCXlkPAAOCXnGrAAOCXn8vAAOCXgK3AAOCXlRnAAOCXg/jAAOCXlkDAAOCXg1nAAOCXgKvAAOCXhI/AAOCXljbAAOCXgdTAAOCXljrAAOCXlj/AAOCXlkLAAOCXljnAAOCXVsAA4JeApcAA4Jee1cAA4Jef2cAA4JeArsAA4JeAu8AA4JeWYMAA4JeGF8AA4Jef2MAA4JeW/sAA4JeXAcAA4Jef28AA4JebscAA4JaYncAA4MIAwADglpiawADgxMAAbsbAAODEqZHAAODEgovAAODEmIjAAODEXMAA4MSDGcAA4MSB6MAA4MSAw8AA4JaYm8AA4M2DGcAA4M2B6MAA06vAAHoywADg0JiXwADg0Z/RwADg0cAAkkbAAODTwAB498AA4NGDXsAA4NGBWMAA4NCYncAA4NcAwADTq8AAejPAAODZmJzAAODawACSRsAA4NuAtcAA4NmYl8AA4N1LwADg3YC/wADg3cAAkkbAAODgwAB498AA4N2f0cAA4NmYmsAA4OPAAG7GwADTq8AAejXAAODlmJfAAODmn9HAAODmlkbAAODmlj3AAODmljjAAODmn9bAAODmn9fAAODmZMAA4OaDF8AA4OafxcAA4OaBpcAA4OaWRMAA4OaWRcAA4OaWL8AA4OaWQ8AA4OacasAA4Oafy8AA4OaArcAA4OaVGcAA4OaD+MAA4OaWQMAA4OaDWcAA4OaAq8AA4OaEj8AA4OaWNsAA4OaB1MAA4OaWOsAA4OaWP8AA4OaWQsAA4OaWOcAA4OZWwADg5oClwADg5p7VwADg5p/ZwADg5oCuwADg5oC7wADg5pZgwADg5oYXwADg5p/YwADg5pb+wADg5pcBwADg5p/bwADg5puxwADg5ZidwADhEQDAAODlmJrAAOETwABuxsAA4ROpkcAA4ROCi8AA4ROYiMAA4RNcwADhE4MZwADhE4HowADhE4DDwADg5ZibwADhHIMZwADhHIHowADTq8AAejbAAOEfmJfAAOEgn9HAAOEgwACSRsAA4SLAAHj3wADhIINewADhIIFYwADhH5idwADhJgDAANOrwAB6N8AA4SiYnMAA4SnAAJJGwADhKoC1wADhKJiXwADhLEvAAOEsgL/AAOEswACSRsAA4S/AAHj3wADhLJ/RwADhKJiawADhMsAAbsbAANOrwAB6OcAA4TSYl8AA4TWf0cAA4TWWRsAA4TWWPcAA4TWWOMAA4TWf1sAA4TWf18AA4TVkwADhNYMXwADhNZ/FwADhNYGlwADhNZZEwADhNZZFwADhNZYvwADhNZZDwADhNZxqwADhNZ/LwADhNYCtwADhNZUZwADhNYP4wADhNZZAwADhNYNZwADhNYCrwADhNYSPwADhNZY2wADhNYHUwADhNZY6wADhNZY/wADhNZZCwADhNZY5wADhNVbAAOE1gKXAAOE1ntXAAOE1n9nAAOE1gK7AAOE1gLvAAOE1lmDAAOE1hhfAAOE1n9jAAOE1lv7AAOE1lwHAAOE1n9vAAOE1m7HAAOE0mJ3AAOFgAMAA4TSYmsAA4WLAAG7GwADhYqmRwADhYoKLwADhYpiIwADhYlzAAOFigxnAAOFigejAAOFigMPAAOE0mJvAAOFrgxnAAOFrgejAANOrwAB6OsAA4W6Yl8AA4W+f0cAA4W/AAJJGwADhccAAePfAAOFvg17AAOFvgVjAAOFumJ3AAOF1AMAA06vAAHo7wADhd5icwADheMAAkkbAAOF5gLXAAOF3mJfAAOF7S8AA4XuAv8AA4XvAAJJGwADhfsAAePfAAOF7n9HAAOF3mJrAAOGBwABuxsAA06vAAHo9wADhg5iXwADhhJ/RwADhhJZGwADhhJY9wADhhJY4wADhhJ/WwADhhJ/XwADhhGTAAOGEgxfAAOGEn8XAAOGEgaXAAOGElkTAAOGElkXAAOGEli/AAOGElkPAAOGEnGrAAOGEn8vAAOGEgK3AAOGElRnAAOGEg/jAAOGElkDAAOGEg1nAAOGEgKvAAOGEhI/AAOGEljbAAOGEgdTAAOGEljrAAOGElj/AAOGElkLAAOGEljnAAOGEVsAA4YSApcAA4YSe1cAA4YSf2cAA4YSArsAA4YSAu8AA4YSWYMAA4YSGF8AA4YSf2MAA4YSW/sAA4YSXAcAA4YSf28AA4YSbscAA4YOYncAA4a8AwADhg5iawADhscAAbsbAAOGxqZHAAOGxgovAAOGxmIjAAOGxXMAA4bGDGcAA4bGB6MAA4bGAw8AA4YOYm8AA4bqDGcAA4bqB6MAA06vAAHo+wADhvZiXwADhvp/RwADhvsAAkkbAAOHAwAB498AA4b6DXsAA4b6BWMAA4b2YncAA4cQAwADTq8AAej/AAOHGmJzAAOHHwACSRsAA4ciAtcAA4caYl8AA4cpLwADhyoC/wADhysAAkkbAAOHNwAB498AA4cqf0cAA4caYmsAA4dDAAG7GwADTq8AAekHAAOHSmJfAAOHTn9HAAOHTwACSRsAA4dXAAHj3wADh05ZGwADh05Y9wADh05Y4wADh05/WwADh05/XwADh02TAAOHTgxfAAOHTn8XAAOHTg17AAOHTgaXAAOHTlkTAAOHTlkXAAOHTli/AAOHTlkPAAOHTnGrAAOHTn8vAAOHTgK3AAOHTlRnAAOHTg/jAAOHTlkDAAOHTg1nAAOHTgKvAAOHThI/AAOHTljbAAOHTgdTAAOHTljrAAOHTlj/AAOHTlkLAAOHTljnAAOHTVsAA4dOApcAA4dOe1cAA4dOf2cAA4dOArsAA4dOAu8AA4dOWYMAA4dOGF8AA4dOf2MAA4dOW/sAA4dOXAcAA4dOBWMAA4dOf28AA4dObscAA4dKYncAA4gIAwADh0piawADiBMAAbsbAAOIEqZHAAOIEgovAAOIEmIjAAOIEXMAA4gSDGcAA4gSB6MAA4gSAw8AA4dKYm8AA4g2DGcAA4g2B6MAA06vAAHpCwADiEJicwADiEcAAkkbAAOISgLXAAOIQmJfAAOIUS8AA4hSAv8AA4hTAAJJGwADiF8AAePfAAOIUn9HAAOIQmJrAAOIawABuxsAA06vAAHpEwADiHJiXwADiHZ/RwADiHcAAkkbAAOIfwAB498AA4h2WRsAA4h2WPcAA4h2WOMAA4h2f1sAA4h2f18AA4h1kwADiHYMXwADiHZ/FwADiHYNewADiHYGlwADiHZZEwADiHZZFwADiHZYvwADiHZZDwADiHZxqwADiHZ/LwADiHYCtwADiHZUZwADiHYP4wADiHZZAwADiHYNZwADiHYCrwADiHYSPwADiHZY2wADiHYHUwADiHZY6wADiHZY/wADiHZZCwADiHZY5wADiHVbAAOIdgKXAAOIdntXAAOIdn9nAAOIdgK7AAOIdgLvAAOIdlmDAAOIdhhfAAOIdn9jAAOIdlv7AAOIdlwHAAOIdgVjAAOIdn9vAAOIdm7HAAOIcmJ3AAOJMAMAA4hyYmsAA4k7AAG7GwADiTqmRwADiToKLwADiTpiIwADiTlzAAOJOgxnAAOJOgejAAOJOgMPAAOIcmJvAAOJXgxnAAOJXgejAANOrwAB6RcAA4lqYnMAA4lvAAJJGwADiXIC1wADiWpiXwADiXkvAAOJegL/AAOJewACSRsAA4mHAAHj3wADiXp/RwADiWpiawADiZMAAbsbAANOrwAB6R8AA4maYl8AA4mef0cAA4mfAAJJGwADiacAAePfAAOJnlkbAAOJnlj3AAOJnljjAAOJnn9bAAOJnn9fAAOJnZMAA4meDF8AA4mefxcAA4meDXsAA4meBpcAA4meWRMAA4meWRcAA4meWL8AA4meWQ8AA4mecasAA4mefy8AA4meArcAA4meVGcAA4meD+MAA4meWQMAA4meDWcAA4meAq8AA4meEj8AA4meWNsAA4meB1MAA4meWOsAA4meWP8AA4meWQsAA4meWOcAA4mdWwADiZ4ClwADiZ57VwADiZ5/ZwADiZ4CuwADiZ4C7wADiZ5ZgwADiZ4YXwADiZ5/YwADiZ5b+wADiZ5cBwADiZ4FYwADiZ5/bwADiZ5uxwADiZpidwADilgDAAOJmmJrAAOKYwABuxsAA4pipkcAA4piCi8AA4piYiMAA4phcwADimIMZwADimIHowADimIDDwADiZpibwADioYMZwADioYHowADTq8AAekjAAOKkmJzAAOKlwACSRsAA4qaAtcAA4qSYl8AA4qhLwADiqIC/wADiqMAAkkbAAOKrwAB498AA4qif0cAA4qSYmsAA4q7AAG7GwADTq8AAekrAAOKwmJzAAOKxwACSRsAA4rKAtcAA4rCYmsAA4rSCi8AA4rTAAG5rwADitMAAbsbAAOK0wACSRsAA4rjAAHoQwADitKmRwADitGHAAOKwmJfAAOK8wAB6TMAA4rzAAHpNwADivMAAek7AAOK8wAB6T8AA4rzAAHpQwADivMAAelHAAOK8wABEsMAA4rzAAEUMwADivMAAelLAAOK8wAB6U8AA4rzAAG5xwADivMAAbm7AAOK8wAB6VMAA4rzAAHpVwADivMAAelbAAOK8wAB6V8AA4rzAAHpYwADivMAAelnAAOK8wABFDcAA4rzAAESvwADivMAAelrAAOK8wAB6W8AA06vAAHa5wADi05iawADi1MAAbmvAAOLTmJfAAOLWmCrAAOLWwAB5A8AA4tbAAHkEwADi1sAAeQbAAOLWwAB5BcAA4tbAAHkIwADi1sAAeQfAAOLWwAB5CsAA4tbAAHkJwADi1sAAeQ7AAOLWwAB5C8AA4tbAAHkMwADi1sAAeQ3AAOLWwAB5D8AA4tbAAG5twADi05idwADi5gDAANOrwAB2usAA4uiYmsAA4unAAG7GwADi6amRwADi6cAAbmvAAOLpgovAAOLomJ3AAOLuAMAA06vAAHpcwADi8JiXwADi8WTAAOLwmJ3AAOLzAMAA06vAAHpdwADi9ZiXwADi9mTAAOL1mJ3AAOL4AMAA06vAAHpewADi+piZwADi+8AAkkbAAOL8wAB6X8AA4vvAAHpgwADi+8AAemHAAOL7llzAAOL6mJ3AAOMBwACSRsAA4wKAtcAA06vAAHpiwADjBJicwADjBcAAkkbAAOMGwAB6Y8AA4wUAwADjBcAASU3AAOMEmJfAAOMKwAB6TMAA4wrAAHpNwADjCsAAek7AAOMKwAB6T8AA4wrAAHpQwADjCsAAelHAAOMKwABEsMAA4wrAAEUMwADjCsAAelLAAOMKwAB6U8AA4wrAAG5xwADjCsAAbm7AAOMKwAB6VMAA4wrAAHpVwADjCsAAelbAAOMKwAB6V8AA4wrAAHpYwADjCsAAelnAAOMKwABFDcAA4wrAAESvwADTq8AAemXAAOMfmJnAAOMgwAB6ZsAA4x+YnMAA4yIAwADjIsAAd2DAAOMiwABJTcAA4x+Yl8AA4yaBWMAA06uHysAA4yiYmcAA4ynAAHpmwADjKJicwADjKwDAAOMrwAB3YMAA4yvAAElNwADjKJiXwADjL2TAAOMvgVjAANOrwAB6acAA4zKYmcAA4zPAAHpmwADjMpicwADjNQDAAOM1wAB3YMAA4zXAAElNwADjMpiXwADjOYFYwADTq8AAemvAAOM7mJnAAOM8wAB6ZsAA4zuYnMAA4z4AwADjPsAAd2DAAOM+wABJTcAA4zuYl8AA40KBWMAA06ufO8AA40SYmcAA40XAAHpmwADjRJicwADjRwDAAONHwAB3YMAA40fAAElNwADjRJiXwADjS4FYwADTq8AAdVfAAONNmJnAAONOwAB6ZsAA402YnMAA41AAwADjUMAAd2DAAONQwABJTcAA402Yl8AA41SBWMAA06ufPMAA41aYmcAA41fAAHpmwADjVpicwADjWQDAAONZwAB3YMAA41nAAElNwADjVpiXwADjXYFYwADTq8AAenDAAONfmJnAAONgwAB6ZsAA41+YnMAA42IAwADjYsAAd2DAAONiwABJTcAA41+Yl8AA42aBWMAA06vAAHpywADjaJiZwADjacAAembAAONomJzAAONrAMAA42vAAHdgwADja8AASU3AAONomJfAAONvgVjAANOrwAB6dMAA43GYmcAA43LAAHpmwADjcZicwADjdADAAON0wAB3YMAA43TAAElNwADjcZiXwADjeIFYwADTq8AAenbAAON6mJnAAON7wAB6ZsAA43qYnMAA430AwADjfcAAd2DAAON9wABJTcAA43qYl8AA44GBWMAA06vAAHp4wADjg5iZwADjhMAAembAAOODmJzAAOOGAMAA44bAAHdgwADjhsAASU3AAOODmJfAAOOKZMAA44qBWMAA06vAAHp6wADjjZiZwADjjsAAembAAOONmJzAAOOQAMAA45DAAHdgwADjkMAASU3AAOONmJfAAOOUZMAA45SBWMAA06vAAHp8wADjl5iZwADjmMAAembAAOOXmJzAAOOaAMAA45rAAHdgwADjmsAASU3AAOOXmJfAAOOeZMAA456BWMAA06vAAHp+wADjoZiZwADjosAAen/AAOOiwAB6gMAA46LAAHqBwADjosAAeoLAAOOiwAB6g8AA46LAAHqEwADjosAAeoXAAOOiwAB6hsAA46LAAHqHwADjosAAeojAAOOiwAB6icAA46LAAHqKwADjosAAeovAAOOiwAB6jMAA46LAAHqNwADjosAAeo7AAOOiwAB6j8AA46LAAHqQwADjosAAepHAAOOiwAB6ksAA46LAAHqTwADjosAAepTAAOOiwAB6lcAA46LAAHqWwADjosAAepfAAOOiwAB6mMAA46LAAHqZwADjosAAeprAAOOiwAB6m8AA46LAAHqcwADjosAAep3AAOOiwAB6nsAA46LAAHqfwADjosAAeqDAAOOiwAB6ocAA46LAAHqiwADjosAAeqPAAOOiwAB6pMAA46LAAHqlwADjosAAeqbAAOOiwAB6p8AA46LAAHqowADjosAAeqnAAOOiwAB6qsAA46LAAHqrwADjosAAeqzAAOOiwAB6rcAA46LAAHquwADjosAAeq/AAOOiwAB6sMAA46LAAHqxwADjosAAerLAAOOiwAB6s8AA46LAAHq0wADjosAAerXAAOOiwAB6tsAA46LAAHq3wADjosAAerjAAOOiwAB6ucAA46LAAHq6wADjosAAervAAOOiwAB6vMAA46LAAHq9wADjosAAer7AAOOiwAB6v8AA46LAAHrAwADjosAAesHAAOOiwAB6wsAA46LAAHrDwADjosAAesTAAOOiwAB6xcAA46LAAHrGwADjosAAesfAAOOiwAB6yMAA46LAAHrJwADjosAAesrAAOOiwAB6y8AA46LAAHrMwADjosAAes3AAOOiwAB6zsAA46LAAHrPwADjosAAetDAAOOiwAB60cAA46LAAHrSwADjosAAetPAAOOiwAB61MAA46LAAHrVwADjosAAetbAAOOiwAB618AA46LAAHrYwADjosAAetnAAOOiwAB62sAA46LAAHrbwADjosAAetzAAOOiwAB63cAA46LAAHrewADjosAAet/AAOOiwAB64MAA46LAAHrhwADjosAAeuLAAOOiwAB648AA46LAAHrkwADjosAAeuXAAOOiwAB65sAA46LAAHrnwADjosAAeujAAOOiwAB66cAA46LAAHrqwADjosAAeuvAAOOiwAB67MAA46LAAHrtwADjosAAeu7AAOOiwAB678AA46LAAHrwwADjosAAevHAAOOiwAB68sAA46LAAHrzwADjosAAevTAAOOiwAB69cAA46LAAHr2wADjosAAevfAAOOiwAB6+MAA46LAAHr5wADjosAAevrAAOOiwAB6+8AA46LAAHr8wADjosAAev3AAOOiwAB6/sAA46LAAHr/wADjosAAewDAAOOiwAB7AcAA46LAAHsCwADjosAAewPAAOOiwAB7BMAA46LAAHsFwADjosAAewbAAOOiwAB7B8AA46LAAHsIwADjosAAewnAAOOiwAB7CsAA46LAAHsLwADjosAAewzAAOOiwAB7DcAA46LAAHsOwADjosAAew/AAOOiwAB7EMAA46LAAHsRwADjosAAexLAAOOiwAB7E8AA46LAAHsUwADjosAAexXAAOOiwAB7FsAA46LAAHsXwADjosAAexjAAOOiwAB7GcAA46LAAHsawADjosAAexvAAOOiwAB7HMAA46LAAHsdwADjosAAex7AAOOiwAB7H8AA46LAAHsgwADjosAAeyHAAOOiwAB7IsAA46LAAHsjwADjosAAeyTAAOOiwAB7JcAA46LAAHsmwADjosAAeyfAAOOiwAB7KMAA46LAAHspwADjosAAeyrAAOOiwAB7K8AA46LAAHsswADjosAAey3AAOOiwAB7LsAA46LAAHsvwADjosAAezDAAOOiwAB7McAA46LAAHsywADjosAAezPAAOOiwAB7NMAA46LAAHs1wADjosAAezbAAOOiwAB7N8AA46LAAHs4wADjosAAeznAAOOiwAB7OsAA46LAAHs7wADjosAAezzAAOOiwAB7PcAA46LAAHs+wADjosAAez/AAOOiwAB7QMAA46LAAHtBwADjosAAe0LAAOOiwAB7Q8AA46LAAHtEwADjosAAe0XAAOOiwAB7RsAA46LAAHtHwADjosAAe0jAAOOiwAB7ScAA46LAAHtKwADjosAAe0vAAOOiwAB7TMAA46LAAHtNwADjosAAe07AAOOiwAB7T8AA46LAAHtQwADjosAAe1HAAOOiwAB7UsAA46LAAHtTwADjosAAe1TAAOOiwAB7VcAA46LAAHtWwADjosAAe1fAAOOiwAB7WMAA46LAAHtZwADjosAAe1rAAOOiwAB7W8AA46LAAHtcwADjosAAe13AAOOiwAB7XsAA46LAAHtfwADjosAAe2DAAOOiwAB7YcAA46LAAHtiwADjosAAe2PAAOOiwAB7ZMAA46LAAHtlwADjosAAe2bAAOOiwAB7Z8AA46LAAHtowADjosAAe2nAAOOiwAB7asAA46LAAHtrwADjosAAe2zAAOOiwAB7bcAA46LAAHtuwADjosAAe2/AAOOiwAB7cMAA46LAAHtxwADjosAAe3LAAOOiwAB7c8AA46LAAHt0wADjosAAe3XAAOOiwAB7dsAA46LAAHt3wADjosAAe3jAAOOiwAB7ecAA46LAAHt6wADjosAAe3vAAOOiwAB7fMAA46LAAHt9wADjosAAe37AAOOhmJzAAOSjAMAA5KPAAHuAwADko8AAe4LAAOSjwAB7hMAA5KPAAHuGwADjoZiXwADkqWTAAOSpgcTAAOSpgY3AAOSpg4jAAOSpUMAA5KmVrMAA5KnAAHm0wADkqZWnwADkqcAAebfAAOSpwABBeMAA5KnAAHm6wADkqcAAebzAAOSpl87AAOSpwAB5v8AA5KmfxcAA5KnAAHnIwADkqcAAecvAAOSpwAB5zcAA5KnAAHnPwADkqcAAedHAAOSpnK/AAOSpwABJEsAA5KnAAHfYwADkqcAAedbAAOSpwAB52MAA46GYmsAA5MODe8AA5MO8M8AA5MPAAEg5wADkw8AAa/XAAOTDwAB5xcAA06vAAHuIwADkyZiZwADkysAAen/AAOTKwAB6gMAA5MrAAHqBwADkysAAeoLAAOTKwAB6g8AA5MrAAHqEwADkysAAeoXAAOTKwAB6hsAA5MrAAHqHwADkysAAeojAAOTKwAB6icAA5MrAAHqKwADkysAAeovAAOTKwAB6jMAA5MrAAHqNwADkysAAeo7AAOTKwAB6j8AA5MrAAHqQwADkysAAepHAAOTKwAB6ksAA5MrAAHqTwADkysAAepTAAOTKwAB6lcAA5MrAAHqWwADkysAAepfAAOTKwAB6mMAA5MrAAHqZwADkysAAeprAAOTKwAB6m8AA5MrAAHqcwADkysAAep3AAOTKwAB6nsAA5MrAAHqfwADkysAAeqDAAOTKwAB6ocAA5MrAAHqiwADkysAAeqPAAOTKwAB6pMAA5MrAAHqlwADkysAAeqbAAOTKwAB6p8AA5MrAAHqowADkysAAeqnAAOTKwAB6qsAA5MrAAHqrwADkysAAeqzAAOTKwAB6rcAA5MrAAHquwADkysAAeq/AAOTKwAB6sMAA5MrAAHqxwADkysAAerLAAOTKwAB6s8AA5MrAAHq0wADkysAAerXAAOTKwAB6tsAA5MrAAHq3wADkysAAerjAAOTKwAB6ucAA5MrAAHq6wADkysAAervAAOTKwAB6vMAA5MrAAHq9wADkysAAer7AAOTKwAB6v8AA5MrAAHrAwADkysAAesHAAOTKwAB6wsAA5MrAAHrDwADkysAAesTAAOTKwAB6xcAA5MrAAHrGwADkysAAesfAAOTKwAB6yMAA5MrAAHrJwADkysAAesrAAOTKwAB6y8AA5MrAAHrMwADkysAAes3AAOTKwAB6zsAA5MrAAHrPwADkysAAetDAAOTKwAB60cAA5MrAAHrSwADkysAAetPAAOTKwAB61MAA5MrAAHrVwADkysAAetbAAOTKwAB618AA5MrAAHrYwADkysAAetnAAOTKwAB62sAA5MrAAHrbwADkysAAetzAAOTKwAB63cAA5MrAAHrewADkysAAet/AAOTKwAB64MAA5MrAAHrhwADkysAAeuLAAOTKwAB648AA5MrAAHrkwADkysAAeuXAAOTKwAB65sAA5MrAAHrnwADkysAAeujAAOTKwAB66cAA5MrAAHrqwADkysAAeuvAAOTKwAB67MAA5MrAAHrtwADkysAAeu7AAOTKwAB678AA5MrAAHrw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AOatwACSRsAA5q6XGsAA5qyYl8AA5rDAAJJGwADmscAAePfAAOasmJ3AAOazAMAA06vAAHuhwADmtZidwADmtgDAAOa1mJrAAOa4wACSRsAA5rmXGsAA5rm23MAA5rhhwADmuMAAbsbAAOa4qZHAAOa4wABua8AA5riCi8AA5rWYl8AA5sFLwADmwcAAkkbAAObDwAB498AA5sGBWMAA06vAAHuiwADmxpiZwADmx8AAkkbAAObIlxrAAObGmJfAAObKwACSRsAA5svAAHj3wADmxpidwADmzQDAANOrwAB7o8AA5s+YncAA5tAAwADmz5iawADm0sAAkkbAAObTlxrAAObTttzAAObSYcAA5tLAAG7GwADm0qmRwADm0sAAbmvAAObSgovAAObPmJfAAObbS8AA5tvAAJJGwADm3cAAePfAAObbgVjAANOrwAB7pMAA5uCYmcAA5uHAAJJGwADm4pcawADm4JiXwADm5MAAkkbAAOblwAB498AA5uCYncAA5ucAwADTq8AAe6XAAObpmJ3AAObqAMAA5umYmsAA5uzAAJJGwADm7ZcawADm7bbcwADm7GHAAObswABuxsAA5uypkcAA5uzAAG5rwADm7IKLwADm6ZiXwADm9UvAAOb1wACSRsAA5vfAAHj3wADm9YFYwADTq8AAe6bAAOb6mJnAAOb7wACSRsAA5vyXGsAA5vqYl8AA5v7AAJJGwADm/8AAePfAAOb6mJ3AAOcBAMAA06vAAHunwADnA5idwADnBADAAOcDmJrAAOcGwACSRsAA5weXGsAA5we23MAA5wZhwADnBsAAbsbAAOcGqZHAAOcGwABua8AA5waCi8AA5wOYl8AA5w9LwADnD8AAkkbAAOcRwAB498AA5w+BWMAA06vAAHuowADnFJiZwADnFcAAkkbAAOcWlxrAAOcUmJfAAOcYwACSRsAA5xnAAHj3wADnFJidwADnGwDAANOrwAB7qcAA5x2YncAA5x4AwADnHZiawADnIMAAkkbAAOchlxrAAOchttzAAOcgYcAA5yDAAG7GwADnIKmRwADnIMAAbmvAAOcggovAAOcdmJfAAOcpS8AA5ynAAJJGwADnK8AAePfAAOcpgVjAANOrwAB7qsAA5y6YmcAA5y/AAJJGwADnMJcawADnLpiXwADnMsAAkkbAAOczwAB498AA5y6YncAA5zUAwADTq8AAe6vAAOc3mJ3AAOc4AMAA5zeYmsAA5zrAAJJGwADnO5cawADnO7bcwADnOmHAAOc6wABuxsAA5zqpkcAA5zrAAG5rwADnOoKLwADnN5iXwADnQ0vAAOdDwACSRsAA50XAAHj3wADnQ4FYwADTq8AAe6zAAOdImJnAAOdJwACSRsAA50qXGsAA50iYl8AA50zAAJJGwADnTcAAePfAAOdImJ3AAOdPAMAA06vAAHutwADnUZidwADnUgDAAOdRmJrAAOdUwACSRsAA51WXGsAA51W23MAA51RhwADnVMAAbsbAAOdUqZHAAOdUwABua8AA51SCi8AA51GYl8AA511LwADnXcAAkkbAAOdfwAB498AA512BWMAA06vAAHuuwADnYpiZwADnY8AAkkbAAOdklxrAAOdimJfAAOdmwACSRsAA52fAAHj3wADnYpidwADnaQDAANOrwAB7r8AA52uYncAA52wAwADna5iawADnbsAAkkbAAOdvlxrAAOdvttzAAOduYcAA527AAG7GwADnbqmRwADnbsAAbmvAAOdugovAAOdrmJfAAOd3S8AA53fAAJJGwADnecAAePfAAOd3gVjAANOrwAB7sMAA53yYmcAA533AAJJGwADnfpcawADnfJiXwADngMAAkkbAAOeBwAB498AA53yYncAA54MAwADTq8AAe7HAAOeFmJ3AAOeGAMAA54WYmsAA54jAAJJGwADniZcawADnibbcwADniGHAAOeIwABuxsAA54ipkcAA54jAAG5rwADniIKLwADnhZiXwADnkUvAAOeRwACSRsAA55PAAHj3wADnkYFYwADTq8AAe7LAAOeWmJnAAOeXwACSRsAA55iXGsAA55aYl8AA55rAAJJGwADnm8AAePfAAOeWmJ3AAOedAMAA06vAAHuzwADnn5idwADnoADAAOefmJrAAOeiwACSRsAA56OXGsAA56O23MAA56JhwADnosAAbsbAAOeiqZHAAOeiwABua8AA56KCi8AA55+Yl8AA56tLwADnq8AAkkbAAOetwAB498AA56uBWMAA06vAAHu0wADnsJiZwADnscAAkkbAAOeylxrAAOewmJfAAOe0wACSRsAA57XAAHj3wADnsJidwADntwAAwACSR8AA57mYmcAA57rAAJJHwADnu8AAfDzAAOe7wAB8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tcAA6i7AAIDwwADuF5idwADuGMAATGHAAO4ZgLXAAOouwACA8cAA7huYmcAA7hzAAExhwADuHZ/BwADuHZc8wADuHbvjwADuHbJwwADuG5iXwADuIlbAAO4iwABtzcAA7iKCiMAA7huYncAA7iYAwADqLq7HwADuKJiawADuKU7AAO4pXsAA7imArMAA7inAAID2wADuKcAAgP3AAO4omJzAAO4vAMAA7i/AAIDzwADuL5bzwADuKJibwADuM17AAO4omJfAAO41wAB70cAA7jXAAHx3wADuNcAAfQDAAO41rszAAO41wACA+MAA7jXAAID5wADuNcAAgPrAAO41wACA/MAA7jWDW8AA7jXAAG0gwADuNSPAAOouwACA/8AA7kGYmcAA7kLAAExhwADuQ8AAfujAAO5DwACBAMAA7kGYmsAA7kZOwADuRl7AAO5GgKzAAO5GwACA/cAA7kbAAID2wADuQZiXwADuTMAATGHAAO5NiLvAAO5NwACBBMAA7k3AAIEGwADuTcAAgQjAAO5NwACBCsAA7k2cY8AA7k3AAIENwADuTcAAgQ/AAO5NwACBEcAA7k3AAIEhwADuTcAAgSPAAO5NwACBGMAA7k3AAIEZwADuTIObwADuTIOcwADuTMAAe9HAAO5MwAB8d8AA7kzAAH0AwADuTK7MwADuTMAAgPrAAO5MwACA/MAA7kyDW8AA7kzAAG0gwADuTCPAAO5BmJvAAO5mXsAA7kGYncAA7mgAwADuaMAAgPPAAOouwACBJ8AA7muYnMAA7mwAwADua5iXwADubsAAfpnAAOouwACBKMAA7nCYmcAA7nHAAIEpwADuccAAgSrAAO5xwACBK8AA7nHAAIEswADuccAAgS3AAO5xwACBLsAA7nHAAIEvwADuccAAgTDAAO5xwACBMcAA7nHAAIEBwADuccAAbSHAAO5xwACA/sAA7nHAAF5lwADuccAAgTLAAO5xwACBM8AA7nHAAEa/wADuccAATGHAAO6CwACBNMAA7nHAAH9wwADucJiXwADuhcAATGHAAO6GwACATcAA7obAAIE1wADuhcAAbyXAAO6FwABvJsAA7oXAAG8nwADuhYOwwADuhYKIwADuhYHFwADucJiawADuj4H1wADucJidwADukQDAAOouwACBOsAA7pOYmcAA7pTAAExhwADulcAAgTvAAO6VwACBPMAA7pXAAIE9wADulcAAgT7AAO6VwACBP8AA7pOYncAA7psAwADqLsAAgUDAAO6dmJfAAO6ewABMYcAA7p/AAIFBwADun8AAb2LAAO6dmJ3AAO6iAMAA6i4IwADupJiZwADupZ52wADupcAAgUXAAO6lgorAAO6lwACBR8AA7qXAAGTKwADupcAAgUnAAO6lwACBS8AA7qXAAIFMwADupcAAgU7AAO6lwACBT8AA7qXAAExhwADusMAAfunAAO6kmJ3AAO6ywABMYcAA7rOGW8AA6i7AAIFRwADutZiZwADutsAAf57AAO62wACBUsAA7rbAAIFUwADutsAAgVXAAO62wACBV8AA7rbAAIFYwADutsAAgVrAAO62wACBW8AA7rbAAExhwADuv5IswADutZidwADuwcAATGHAAO7ChlvAAOouB8AA7sSYnMAA7sUAwADuxZbzwADuxcAAgPPAAO7EmJfAAO7JwAB70cAA7snAAHx3wADuycAAgPrAAO7JwACA/MAA7smc9sAA7snAAIFewADuyWHAAO7Jg57AAO7JwACBX8AA7snAAIFgwADuycAAgWHAAO7JwACBYsAA7snAAIFjwADuycAAgWTAAO7JwACBZcAA7snAAIFmwADuyaUqwADuyYG+wADuycAAgWfAAO7JhD/AAO7Jh8bAAO7JhDXAAO7Jh8fAAO7JwABcQcAA7snAAIFowADuycAAgWnAAO7JwAB70sAA7smuwcAA7snAAIFqwADuyYRFwADuxJiawADu6MAAgP3AAO7oTsAA6i7AAIFrwADu65iXwADu7IKIwADu7IHBwADu7IcAwADu7MAAgWzAAO7snnbAAO7swACAhcAA7uzAAH6hwADu7IOgwADu7IbvwADu7MAAgW3AAO7swAB+pMAA7uyDjMAA7uyBucAA7uyBwMAA7uyBscAA7uzAAIFuwADu7MAAfqfAAO7swACBb8AA7uzAAEtswADu7MAAgXDAAO7sYcAA7uyDnsAA7uyEQcAA7uzAAIFxwADu7MAAfqzAAO7swACBcsAA7uzAAIFzwADu7MAAgXTAAO7sI8AA7uuYmsAA7wpOwADu65idwADvDADAAOougiHAAO8OmJnAAO8PIsAA7w9OwADvD4NHwADvDpiXwADvEyPAAO8OmJ3AAO8VAMAA6i7AAIF2wADvF5iZwADvGMAATGHAAO8ZwABvWcAA7xnAAH7owADvGcAAgXfAAO8ZwAByC8AA7xnAAERgwADvGcAAgXjAAO8ZwACBecAA7xnAAIF6wADvGbvjwADvGcAAgXvAAO8XmJfAAO8kgfnAAO8kwABMYcAA7ybAAIF9wADvJsAAgX/AAO8mwACBfsAA7yakacAA7xeYncAA7ysAwADvK8AAgXzAAOouwACBhcAA7y6YmcAA7y/AAExhwADvMMAAgYbAAO8wwACBh8AA7y6Yl8AA7zOcGMAA7zOCiMAA7y6YncAA7zYAwADvNsAAgYjAAOouwACBisAA7zmYmcAA7zrAAExhwADvO8AAfujAAO87wACBAMAA7zmYmsAA7z5OwADvPsAAgP3AAO85mJfAAO9BwABMYcAA70LAAH7YwADvQsAAgYvAAO9CwACBCsAA70KcY8AA70LAAIGRwADvQsAAgZPAAO9CwACBIcAA70LAAIENwADvQsAAgZfAAO9CwACBI8AA70LAAIEPwADvQsAAgZzAAO9CwACBn8AA70LAAIGkwADvQsAAgafAAO9CwACBq8AA70LAAIGvwADvQsAAgbLAAO9CwAB1S8AA70LAAIG2wADvQsAAgbjAAO9CwACBvMAA70GDm8AA70GDnMAA70HAAHvRwADvQcAAfHfAAO9BwACA+sAA70HAAID8wADvQZz2wADvQcAAgV7AAO9BpSrAAO9BYcAA70GDnsAA70HAAIFfwADvQcAAgWDAAO9BwACBYcAA70HAAIFiwADvQcAAgWPAAO9BwACBZMAA70HAAIFlwADvQcAAgWbAAO9Bgb7AAO9BwACBZ8AA70GEP8AA70GHxsAA70GENcAA70GHx8AA70HAAFxBwADvQcAAgWjAAO9BwACBacAA70HAAHvSwADvQa7BwADvQcAAgWrAAO9BhEXAAO9BI8AA70HAAIG/wADvOZidwADvewDAAO97wACA88AA6i7AAIHAwADvfpicwADvfwDAAO9+mJfAAO+BwAB+mcAA74GCiMAA74GHAMAA74GedsAA74HAAH6hwADvgYbvwADvgcAAfqTAAO+BgbHAAO+BwAB+p8AA74HAAEtswADvgWHAAO+BhEHAAO+BwAB+rMAA6i7AAIHBwADvj5iZwADvkMAATGHAAO+RwACBwsAA75HAAIHDwADvkcAAgcTAAO+RwAB+5sAA75HAAIE0wADvkE7AAO+QwACBxcAA75DAAEa/wADvj5iXwADvmsAATGHAAO+bwACBx8AA75vAAIHGwADvm8AAgdnAAO+bwACATcAA75vAAIHKwADvm8AAgI7AAO+agojAAO+agcHAAO+ahwDAAO+awACBbMAA75qedsAA75rAAICFwADvmsAAfqHAAO+ag6DAAO+ahu/AAO+awACBbcAA75rAAH6kwADvmoOMwADvmoG5wADvmoHAwADvmoGxwADvmsAAgW7AAO+awAB+p8AA75rAAIFvwADvmsAAS2zAAO+awACBcMAA75phwADvmoOewADvmoRBwADvmsAAgXHAAO+awAB+rMAA75rAAIFzwADvmsAAgXLAAO+awACBdMAA74+YncAA774AwADqLsAAgd/AAO/AmJnAAO/BgbvAAO/BwACB4MAA78HAAIHiwADvwcAAgePAAO/BlinAAO/BwACB5cAA78GcacAA78HAAHXkwADvwcAATGHAAO/KwACB58AA78qSLMAA78CYl8AA783AAExhwADvzsAAgejAAO/NI8AA78CYncAA79HAAExhwADv0oZbwADqLsAAgenAAO/UmJnAAO/VwABMYcAA79aSLMAA79bAAIHqwADv1sAAgevAAO/WwACB7MAA79bAAH7pwADv1qe4wADv1sAAge3AAO/VrpTAAO/VwAB9CsAA79XAAIHuwADv1YKQwADv1YG/wADv1ZiGwADv1JiXwADv5MAATGHAAO/lwACB8MAA7+XAAIHzwADv5cAAgfTAAO/kwACB8sAA7+TAAElLwADv5CPAAO/kwACB+sAA79SYncAA7+3AAExhwADv7oZbwADv7sAAge/AAOougiDAAO/xmJnAAO/ywABMYcAA7/PAAH7owADv88AAgQDAAO/zwACCB8AA7/PAAIIJwADv8ZiawADv+E7AAO/4gKzAAO/4gzvAAO/4wACA/cAA7/jAAExhwADv/cAAgRvAAO/9wACCFMAA7/jAAIIZwADv+IRSwADv8ZiXwADwAoObwADwAoOcwADwAsAAgPrAAPACwACA/MAA8ALAAID4wADwAsAAgPnAAPACwABJS8AA8ALAAIHywADwAsAARqXAAPACwAB8ecAA8ALAAG/xwADwAsAATGHAAPAOwACBIcAA8A7AAIEjwADwDsAAgg/AAPAOwACCFcAA8A7AAIIbwADwDsAAghzAAPAOwACCHcAA8A7AAIIhwADwDsAAgiTAAPAOwACCJ8AA8A7AAIIpwADwDsAAgivAAPAOwACCMMAA8A7AAIIywADwDsAAgjTAAPAOwACCNsAA8A7AAII4wADwDsAAgjnAAPAOwACCOsAA8AKcNsAA8ALAAIIXwADwAoKQwADwAsAAgh/AAPACwACCIMAA8ALAAIIiwADwAk3AAPACwACCI8AA8ALAAIIlwADwAsAAgibAAPACwACCLcAA7/GYncAA8C0AwADqLsAAgjvAAPAvmJnAAPAwwAB70cAA8DDAAII8wADwMMAAgj7AAPAwwACCP8AA8DDAAEalwADwMMAAgkHAAPAwwACCQ8AA8DDAAIJEwADwMJ31wADwMLDhwADwMMAATGHAAPA7wACCR8AA8DvAAIJIwADwO8AAgknAAPAwgpDAAPAwTsAA8DBNwADwL5idwADwQsAATGHAAPBDgLXAAOouwACCSsAA8EWYl8AA8EYjwADwRZidwADwSMAATGHAAPBJgLXAAOouwACCTMAA8EuYmcAA8EzAAIJNwADwS5iXwADwTiPAAPBLmJ3AAPBQwABMYcAA8FGAtcAA6i7AAIJQwADwU5iXwADwVCPAAPBTmJ3AAPBWwABMYcAA8FeAtcAA6i7AAIJSwADwWZiZwADwWsAAXwLAAPBZmJfAAPBcI8AA8FmYncAA8F7AAExhwADwX4C1wADqLsAAglXAAPBhmJnAAPBiwABMYcAA8GPAAHHgwADwY8AAfrHAAPBjwAB+6MAA8GPAAG6AwADwY8AAglbAAPBjwAB+tcAA8GPAAIJXwADwYZiXwADwa8AATGHAAPBswAB+tsAA8GzAAH7awADwbMAAcFvAAPBswAB+ssAA8GzAAH6zwADwbMAAfrTAAPBswACCW8AA8GzAAIJcwADwbMAAgl3AAPBswACCY8AA8GzAAIJlwADwbMAAgmfAAPBswACCacAA8GzAAIJswADwbMAAgm7AAPBspF7AAPBhmJrAAPB9wABMYcAA8H7AAHAPwADwfYJkwADwYZidwADwgcAATGHAAPCCgLXAAOouwACCccAA8ISYmcAA8IWCkMAA8IWzmsAA8IXAAExhwADwiKe5wADwiMAAgnLAAPCIwACCc8AA8ISYmsAA8IyAvcAA8IzAAHTOwADwjMAAgnXAAPCMwACCdsAA8ISYl8AA8JHAAIJ3wADwhJidwADwkwDAAOouwACCeMAA8JWYmcAA8JbAAH+ywADwlsAAgnnAAPCWwACCesAA8JbAAIJ7wADwlsAAgnzAAPCWwACCfcAA8JWYl8AA8J3AAH/BwADwncAAf7PAAPCdwAB/vMAA8JWYmsAA8KHAAIJ1wADwlZidwADwowDAAOouwACCfsAA8KWYmcAA8KbAAExhwADwp5IswADwpoG7wADwpsAAgn/AAPClmJfAAPCrwACCgMAA8KvAAIKBwADwq8AAgoLAAPCrwACCg8AA8KvAAIKGwADwq8AAgofAAPClmJrAAPCygL3AAPClmJ3AAPC0AMAA6i7AAIKIwADwtpiZwADwt8AATGHAAPC4kizAAPC3wABGlMAA8LfAAIKJwADwt8AAgorAAPC2mJrAAPC9gL3AAPC9wACCdcAA8LaYl8AA8MDAAH8WwADwwMAAgovAAPDAwACCjMAA8MDAAIKNwADwwMAAgo7AAPDAwACCkMAA8LaYncAA8McAwADqLsAAgpHAAPDJmJnAAPDKwABMYcAA8MvAAIKSwADwy8AAgpTAAPDLkizAAPDKwAB8HcAA8MrAAIKWwADwyZiawADw0YC9wADwyZiXwADw08AAgprAAPDTwACCm8AA8NPAAIKfwADw08AAgqDAAPDTwACCosAA8NPAAIKjwADwyZidwADw2gDAAOounuDAAPDcmJnAAPDdwABRh8AA8NyYnMAA8N8AwADw3JiXwADw4VbAAPDhgorAAPDhn7/AAPDhggLAAPDhhBHAAPDhnBbAAPDhnBjAAPDhhEHAAPDhgojAAPDcmJrAAPDrn5PAAOouwACCpMAA8O2YmcAA8O7AAExhwADw74fxwADw78AAgqXAAPDvwACCpsAA8O/AAIKnwADw78AAbcvAAPDvwACCqMAA8O/AAG/DwADw7ZiXwADw91bAAPD3nBbAAPD3nBjAAPD3hEHAAPD3gojAAPD3wABMYcAA8P3AAIKswADw/cAAgq3AAPD9wACCrsAA8O2YmsAA8QGfk8AA8QHAAExhwADxA8AAb1nAAPDtmJ3AAPEFAMAA6i7AAIKvwADxB5iZwADxCMAATGHAAPEJwACCsMAA8QnAAIKxwADxB5iawADxDMAAUYfAAPEHmJvAAPEOwABRh8AA8QeYl8AA8RCCisAA8RCfv8AA8RCCAsAA8RCEEcAA8QeYncAA8RUAwADqLsAAgrPAAPEXmJnAAPEYwABMYcAA8RnAAIK0wADxGcAAdvXAAPEZwACCtcAA8RnAAIK2wADxGcAAceDAAPEYwACCt8AA8RjAAIK4wADxGMAAgrnAAPEYwACCusAA8RjAAIK7wADxGMAAgrzAAPEYwACCvcAA8RjAAIK+wADxGMAAgr/AAPEYwACCwMAA8RjAAILBwADxGMAAQxXAAPEYwACCwsAA8RjAAILDwADxGMAAgsTAAPEYwACCxcAA8RjAAILGwADxGMAAgsfAAPEYwACCyMAA8RjAAILJwADxGMAAgsrAAPEYwACCy8AA8RjAAILMwADxGMAAgs3AAPEYwACCzsAA8RjAAILPwADxGMAAgtDAAPEYwACC0cAA8RjAAILSwADxGMAAgtPAAPEYwACC1MAA8RjAAILVwADxGMAAgtbAAPEYwACC18AA8RjAAILYwADxGMAAgtnAAPEYwACC2sAA8RjAAILbwADxGMAAgtzAAPEYwACC3cAA8RjAAILewADxGMAAgt/AAPEYwACC4MAA8ReYl8AA8UrAAExhwADxS8AAguHAAPFLwACC4sAA8UvAAILjwADxS8AAgcrAAPEXmJ3AAPFQAMAA6i6CPcAA8VKYnMAA8VMAwADxU8AAgPPAAPFTlvPAAPFSmJfAAPFXwAB70cAA8VfAAHx3wADxV8AAgubAAPFXrDLAAPFXwACA+MAA8VfAAID5wADxV8AAgPrAAPFXwACA/MAA8VeCRcAA8VfAAILnwADxUpiawADxYsAAgP3AAOouwACC6MAA8WSYmcAA8WXAAExhwADxZsAAfujAAPFmwACBAMAA8WSYmsAA8WlOwADxacAAgP3AAPFkmJfAAPFsI8AA8WyDm8AA8WyDnMAA8WzAAHvRwADxbMAAfHfAAPFswACC5sAA8WysMsAA8WzAAExhwADxdMAAgSHAAPF0wACBI8AA8XTAAIEYwADxdMAAgurAAPFswACA+sAA8WzAAID8wADxbIJFwADxbMAAgufAAPFswACBv8AA8WSYncAA8X4AwADxfsAAgPPAAOouwACC8sAA8YGYmsAA8YLAAExhwADxg8AAftfAAPGDwAB+2MAA8YGYl8AA8YbAAExhwADxh8AAftbAAPGBmJ3AAPGJAMAA6i7AAILzwADxi5iZwADxjMAATGHAAPGNwACC9MAA8YuYmsAA8Y9ewADxi5ibwADxkcAAQ+jAAPGLmJfAAPGTiJXAAPGTwACC98AA8ZOuvMAA8ZPAAID0wADxk8AAgPXAAPGTwACA98AA8ZPAAIFdwADxk8AASUvAAPGTwACB8sAA8ZPAAIITwADxk8AAghjAAPGTwACCN8AA8ZPAAIIzwADxk8AAgg7AAPGTwACCGsAA8ZPAAILlwADxk8AAgvXAAPGTwACC9sAA8YuYncAA8aYAwADqLsAAgvjAAPGomJnAAPGpwABMYcAA8arAAG87wADxqsAAgvnAAPGqwACC+sAA8arAAIL7wADxqsAAgvzAAPGqwACC/cAA8arAAIH0wADxqsAAgfDAAPGqwACC/sAA8arAAIL/wADxqsAAgwDAAPGqwACDAcAA8arAAIMCwADxqsAAgwPAAPGqwACBkcAA8arAAIMEwADxqsAAgwXAAPGomJfAAPG8rrzAAPG8wACA9MAA8bzAAID1wADxvMAAgPfAAPG8wACBXcAA8bzAAElLwADxvMAAgfLAAPG8wACCE8AA8bzAAIIYwADxvMAAgjfAAPG8wACCM8AA8bzAAIIOwADxvMAAghrAAPG8wACC5cAA8bzAAIL1wADxvMAAgvbAAPGomJ3AAPHNAMAA6i4JwADxz5iZwADx0MAATGHAAPHRwACDBsAA8dHAAIMHwADx0cAAgwjAAPHRwACDCcAA8dHAAIMKwADx0cAAgwvAAPHQwACDDMAA8dDAAIMOwADx0IM1wADx0MAAgxDAAPHQwACDEsAA8dDAAIMUwADxz5iawADx3sAAgxbAAPHemTfAAPHewACDF8AA8d7AAIMYwADx3sAAgxnAAPHewACDGsAA8d6AicAA8d7AAH8GwADx3sAAgxvAAPHegarAAPHewACDHMAA8d55wADx3njAAPHegePAAPHPmJ3AAPHtAMAA6i7AAIMewADx75iZwADx8MAAfwbAAPHwwACDG8AA8fB5wADx8HjAAPHwwABMYcAA8fXAAIMfwADx9cAAgyDAAPH1wACDIcAA8e+Ym8AA8fnAAExhwADx+sAAgyLAAPHvmJfAAPH8wABMYcAA8f3AAIMGwADx/cAAgwfAAPH9wACDCMAA8f3AAIMJwADx/cAAgwrAAPH9wACDKcAA8f3AAIMrwADx/cAAUdvAAPH9wACDLsAA8f3AAHvkwADx/cAAe+XAAPH9wACDC8AA8f3AAIMxwADx/cAAgzPAAPH8wACDF8AA8e+YmsAA8g3AAIMWwADyDZk3wADyDcAAgxjAAPINgarAAPINwACDGcAA8g3AAIMawADyDcAAgxzAAPINgInAAPINgePAAPHvmJ3AAPIXAMAA6i7AAIM1wADyGZiZwADyGsAATGHAAPIbqhvAAPIZmJfAAPIdh0fAAPIdwABDNMAA8h1LwADyHYC/wADyHZkdwADyHYClwADyHYRZwADyHYJCwADyHYP4wADyHYCrwADyHawywADyHcAAQznAAPIdlv7AAPIdI8AA8hmYmsAA8iyDYsAA8iwpwADyLGHAAPIsgVXAAPIsg7LAAPIsg9DAAPIZmJ3AAPIzAMAA6i7AAIM2wADyNZiXwADyNsAATGHAAPI3wACDN8AA8jfAAIM5wADyN8AAfVjAAPI3wACDO8AA8jfAAIM9wADyN8AAgz/AAPI3wACDQcAA8jfAAINDwADyNZidwADyQADAAOouwACDS8AA8kKYl8AA8kPAAExhwADyRMAAg0zAAPJEwACDTsAA8kKYmsAA8kfAAINQwADyR8AAg1HAAPJCmJ3AAPJKAMAA6i7AAINSwADyTJiZwADyTcAAf37AAPJNwABNuMAA8k3AAINUwADyTcAAg1XAAPJNwACDV8AA8k3AAINYwADyTcAAg1rAAPJNwACDW8AA8k3AAExhwADyVsAAfunAAPJMmJrAAPJYKcAA8kyYl8AA8lojwADyTJidwADyXMAATGHAAPJdhlvAAOounJXAAPJfmJrAAPJgFMAA8mCEPcAA8mALwADyYArAAPJgwAB/IcAA8l+Yl8AA8mZqwADyZoKbwADyZsAAg13AAPJmwACDXsAA8mbAAGAKwADyX5idwADybADAAOounJbAAPJumJnAAPJvFMAA8m+EPcAA8m8LwADyb8AAfyHAAPJumJ3AAPJ0AMAA6i7AAINfwADydpiZwADyd8AAg2DAAPJ3wACDYcAA8nfAAINiwADyd8AAg2PAAPJ3wACDZcAA8nfAAINnwADyd8AAg2nAAPJ3wACDa8AA8nfAAINtwADyd8AAg2/AAPJ3wACDcMAA8nfAAINywADyd8AAg3PAAPJ3wACD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wADzd55EwADzd55FwADzd8AAgA/AAPN3wACAFsAA83fAAIAzwADzd8AAgDXAAPMqmJvAAPN/wABMYcAA84DAAHgQwADzf8AAgA/AAPN/wACAFsAA8yqYncAA84QAwADqLsAAhBDAAPOGmJnAAPOHEsAA84dqwADzh4KMwADzh5iGwADzhpiXwADzjMAAhBHAAPOMwACEEsAA84yedsAA84yCisAA84zAAIQIwADzjMAAhAnAAPOGmJrAAPOTgVXAAPOTYcAA85PAAIQTwADzk8AAUi3AAPOTwACEFMAA84aYncAA85kAwADqLsAAhBnAAPObmJzAAPOcwABMYcAA852AtcAA85uYl8AA85/AAH+YwADzn8AAfxXAAPOfwACAQMAA85/AAIA1wADzn8AAgELAAPOfwACAL8AA85+qT8AA85/AAIBDwADzn8AAgEjAAPOfwACASsAA85/AAExhwADzqsAAgE3AAPObmJrAAPOswACAM8AA86zAAIA5wADqLsAAhBrAAPOvmJnAAPOwgpDAAPOwIsAA87CDR8AA86+Yl8AA87QjwADzr5idwADztgDAAPO2wABMYcAA87iAtcAA6i7AAIQbwADzupidwADzuwDAAOouwACEHMAA872YncAA874AwADqLsAAhB3AAPPAmJzAAPPBAMAA88CYmsAA88PAAIBQwADzw8AAhB7AAPPAmJfAAPPGwACAVcAA88bAAIBXwADzxsAAgFrAAPPGwACAW8AA88bAAIBewADzxsAAgF/AAPPGwACAYsAA88bAAIBjwADzxsAAgGbAAPPGwABMYcAA89DAAIQfwADz0MAAhCXAAOouwACEKcAA89OYmcAA89TAAExhwADz1cAAfz7AAPPTmJrAAPPXwABMYcAA89jAAH8/wADz2MAAf0DAAPPYwAB/QcAA89jAAH9CwADz05iXwADz3cAATGHAAPPewAB0msAA897AAH9DwADz05idwADz4QDAAOouwACEKsAA8+OYmcAA8+TAAIQrwADz5MAAhCzAAPPkgdTAAPPkwACELcAA8+TAAIQvwADz5MAAhDHAAPPkwABMYcAA8+uXDMAA8+OYnMAA8+3AAExhwADz7sAAhDPAAPPjmJrAAPPwgL3AAPPjmJfAAPPyI8AA8+OYncAA8/TAAExhwADz9YC1wADqLsAAhDfAAPP3mJrA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mcAA/36bx8AA/3+23MAA/32YmsAA/4ESwAD/fZidwAD/gwAAwACSTMAA/4WYmMAA/4bAAIu6wAD/hsAAi7vAAP+GwACLvcAA/4WYmcAA/4rAAJJMwAD/i8AAkEjAAP+LwACQScAA/4vAAJBKwAD/i8AAkEvAAP+LwACE58AA/4vAAJBMwAD/i8AAkE3AAP+LwACQTsAA/4vAAITmwAD/i8AAkE/AAP+LwACQUMAA/4vAAJBRwAD/i8AAkFLAAP+LwACQU8AA/4WYl8AA/5rAAJJMwAD/m8AAkFTAAP+FwACLvsAA/52YmcAA/57AAIu/wAD/nsAAi8DAAP+ewACLwcAA/52YmsAA/6LAAIvCwAD/opZdwAD/osAAdSXAAP+dmJfAAP+mnnvAAP+mwACLw8AA/6aCiMAA/6bAAIvGwAD/nZicwAD/q8AAi8TAAP+dmJvAAP+twACLxcAA/4XAAIvHwAD/r5iZwAD/sKRmwAD/sMAAUG/AAP+wwACLyMAA/7C0bMAA/6+YncAA/7UAwAD/hcAAi8nAAP+3mJnAAP+4wACLysAA/7jAAIvLwAD/uMAAi83AAP+4wACLz8AA/7jAAIvRwAD/uMAAi9PAAP+4wACL1cAA/7jAAIvXwAD/uMAAi9nAAP+4wACL28AA/7jAAIvcwAD/uMAAi97AAP+4wACL4MAA/7jAAIviwAD/uMAAi+TAAP+4wACL5sAA/7jAAIvowAD/uMAAi+rAAP+4wACL68AA/7jAAIvtwAD/uMAAi+/AAP+4wACL8MAA/7jAAIvxwAD/uMAAi/LAAP+4wACL9MAA/7jAAIv2wAD/uMAAi/jAAP+4wACL+sAA/7jAAIv8wAD/uMAAi/7AAP+4wACL/8AA/7jAAIwBwAD/uMAAjALAAP+4wACMBMAA/7jAAIwGwAD/uMAAjAfAAP+4wACMCcAA/7jAAIu/wAD/uMAAjAvAAP+4wACMDcAA/7jAAIwPwAD/uMAAjBHAAP+4wACME8AA/7jAAIwVwAD/uMAAjBfAAP+4wACMGMAA/7jAAIwZwAD/uMAAjBvAAP+4wACMHcAA/7jAAIwfwAD/uMAAjCHAAP+4wACMI8AA/7jAAIwlwAD/uMAAjCfAAP+4wACMKcAA/7jAAIwrwAD/uMAAjC3AAP+4wACML8AA/7jAAIwxwAD/uMAAjDPAAP+4wACMNcAA/7jAAIw3wAD/uMAAjDnAAP+4wACMO8AA/7jAAIw9wAD/uMAAjD/AAP+4wACMQcAA/7jAAIxDwAD/uMAAjEXAAP+4wACMR8AA/7jAAIxJwAD/uMAAjEvAAP+4wACMTcAA/7jAAIxPwAD/uMAAjFHAAP+4wACMU8AA/7jAAIxVwAD/uMAAjFfAAP+4wACMWcAA/7jAAIxbwAD/uMAAjF3AAP+4wACMX8AA/7jAAIxhwAD/uMAAjGPAAP+4wACMZcAA/7jAAIxnwAD/uMAAjGnAAP+4wACMa8AA/7jAAIxtwAD/uMAAjG/AAP+4wACMccAA/7jAAIxzwAD/uJT6wAD/uMAAjHbAAP+4wACMeMAA/7jAAIx6wAD/uMAAjHzAAP+4wACMfsAA/7jAAIyAwAD/uMAAjIHAAP+4wACMg8AA/7jAAIyEwAD/uMAAjIbAAP+4wACMh8AA/7jAAIyJwAD/uMAAjIrAAP+4wABM7cAA/7jAAIiGwAD/uMAAjIzAAP+4llzAAP+4ll3AAP+4nkfAAP+4wACMjcAA/7ieQcAA/7jAAIyOwAD/t5iXwAEALEvAAQAsgJbAAQAsVsABACyXJMABACyEWcABACyW/cABACyD+MABACzAAIyPwAEALIJCwAD/t5idwAEANgDAAP+FwACMkMABADiYnMABADkAwAEAOJiXwAEAO4MHwAEAOyPAAQA4mJrAAQA+gJbAAQA+mojAAP+FwACMlMABAEGYmsABAEKzmsABAEK5GMABAEGYl8ABAEXAAH8VwAEAQZibwAEAR8AAb5PAAQBBmJ3AAQBJAMAA/4WeLMABAEuYmcABAEyBsMABAEzAAIyWwAEATLDnwAEATMAAjJjAAQBMgmDAAQBMwACMmsABAEyCdMABAEy8VcABAEuYnMABAFUAwAEAS5iXwAEAV4MHwAEAS5iawAEAWcAAfGXAAQBZwACMnsABAFnAAIyfwAEAWcAAfDLAAP+FwACMoMABAF6YmcABAF+AvcABAF+AlsABAF/AAIiGwAEAX8AAjKHAAQBftuPAAQBfTsABAF/AAHeSwAEAX8AAjKLAAQBemJzAAQBoAMABAGjAAIyjwAEAXpiXwAEAayPAAP+FwACMpMABAG2YmsABAG7AAIyNwAEAbpZHwAEAboCswAEAbsAAjKXAAQBunkbAAQBuwACMpsABAG6eQcABAG7AAIP8wAEAbsAAjKfAAQBuwACMqMABAG6eQ8ABAG6DUcABAG2YncABAHsAwAD/hcAAjKnAAQB9mJnAAQB+wACMjcABAH6DUsABAH6DVsABAH6eQcABAH7AAIyqwAEAfp5CwAEAfZiawAEAhZ5GwAEAhcAAjKbAAQCFnkPAAQB9mJfAAQCJv+LAAQCJwACMq8ABAH2YncABAIwAwAD/hZ4twAEAjpiZwAEAj8AAjK3AAQCPwACMrsABAI/AAIywwAEAj8AAjLHAAQCPwACLwcABAI/AAIyzwAEAj8AAfKfAAQCPwACMtMABAI/AAIy1wAEAjpicwAEAmQDAAQCOmJfAAQCbpSrAAQCbwACMt8ABAJuaScABAJuDT8ABAJvAAHwrwAEAm54+wAEAm5dZwAEAm8AAjLjAAQCbwABGpcABAJvAAIy5wAEAm51OwAEAm8AAjLrAAQCbg+rAAQCbwACMu8ABAJvAAIy9wAEAm8AAjMHAAQCbwACMw8ABAJuCiMABAI6Ym8ABAK7AAIy8wAEArsAAjMDAAQCuwACMwsABAK7AAIzEwAD/hZ4uwAEAs5iZwAEAtJ5BwAEAtMAAjMXAAQC0wACMxsABALTAAIyNwAEAtJ5CwAEAs5iawAEAupZHwAEAuoCswAEAup5GwAEAusAAjKbAAQC6n5PAAQC6nkPAAQCzmJfAAQDBgojAAQCzmJ3AAQDDAMAA/4XAAIzHwAEAxZiawAEAxoNSwAEAxoNWwAEAxsAAjI3AAQDGwACMyMABAMaeQcABAMbAAIzJwAEAxsAAjMrAAQDGnkbAAQDGwACMpsABAMbAAIP8wAEAxp5DwAEAxZiXwAEA0r/iwAEA0sAAjKvAAQDFmJ3AAQDVAMAA/4XAAIzMwAEA15iZwAEA2CfAAQDYwACSTMABANoowAEA2CnAAQDYwACM0MABANjAAIzRwAEA2MAAjNLAAQDXmJfAAQDgI8ABANeYncABAOIAwAD/hcAAjNPAAQDkmJ3AAQDlAMAA/4XAAIzUwAEA55icwAEA6ADAAP+FwACM1sABAOqYnMABAOsAwAD/hcAAjNfAAQDtmJrAAQDunkTAAQDunkXAAQDuwAB/dMABAO2YncABAPIAwAD/hcAAjNjAAQD0mJrAAQD1g1LAAQD1lkfAAQD1hFvAAQD0mJ3AAQD5AMAA/4XAAIzZwAEA+5iawAEA/MAAfB3AAQD8wACM2sABAPuYncABAP8AwAD/hcAAjNvAAQEBmJnAAQECIsABAQKArMABAQGYl8ABAQUjwAEBAZidwAEBBwDAAP+FwACM3sABAQmYmcABAQoiwAEBCsAAjMrAAQEJmJfAAQENI8ABAQmYmsABAQ+ArMABAQmYncABAREAwAD/hcAAjODAAQETmJnAAQEUwACM4cABARTAAIziwAEBFMAAjOPAAQEUwACM5MABARTAAJJMwAEBGcAAjOXAAQEZwACM5sABARnAAIznwAEBGcAAjOjAAQETmJfAAQEewACAuMABAR7AAIzpwAEBHsAAjOrAAQEewACM7sABAROYncABASMAwAD/hcAAcX7AAQElmJnAAQEmwACSTMABASfAAIz0wAEBJ8AAjPXAAQEnwACM9sABASfAAG5jwAEBJ8AAbmTAAQEnwABuYMABASfAAIz3wAEBJ8AAjPjAAQElmJfAAQEwVsABATCCiMABATDAAFTDwAEBMMAAkkzAAQE0wACM+8ABATTAAIz8wAEBNMAAbnTAAQE0wACM/cABATTAAIz6wAEBNMAAjQDAAQE0wACM/8ABATTAAG5nwAEBNMAAbmjAAQElmJrAAQE+wABtw8ABASWYncABAUAAwAD/hcAAjQrAAQFCmJnAAQFDwACSTMABAUTAAI0LwAEBRMAAjQzAAQFCmJfAAQFHwABUw8ABAUfAAJJMwAEBScAAjPvAAQFCmJ3AAQFLAMAA/4XAAI0OwAEBTZiZwAEBTsAAkkzAAQFPwACND8ABAU2Yl8ABAVHAAFTDwAEBUcAAkkzAAQFTwACM+8ABAU2YncABAVUAwAD/hcAAjRDAAQFXmJfAAQFYh/nAAQFYgwfAAQFYwACSTMABAVvAAI04wAEBV5idwAEBXQDAAP+FwACNTsABAV+YmcABAWDAAJJMwAEBYcAAjU/AAQFhwACNUMABAWHAAI1RwAEBYcAAjVLAAQFhwACNU8ABAWHAAI1UwAEBYcAAfy3AAQFhwAB8PMABAWHAAI1VwAEBYMAAjKjAAQFfmJfAAQFsS8ABAWyAlsABAWxWwAEBbMAAkkzAAQFwwABuvsABAXCzs8ABAXDAAI1pwAEBcMAAjWrAAQFwwACNZMABAXDAAI1mwAEBcMAAjWvAAQFwwACNZcABAXDAAI1nwAEBcMAAjWjAAQFwwACNYsABAXDAAGuzwAEBcMAAjVnAAQFwwACNY8ABAXDAAI1wwAEBcMAAguLAAQFwwABsecABAXDAAI1ywAEBcMAAjXjAAQFwwACNesABAWyXJMABAWyEWcABAWyW/cABAWyD+MABAWzAAIyPwAEBbIJCwAEBbCPAAQFfmJrAAQGMnkHAAQGMwACMjcABAYzAAIyOwAEBjJZcwAEBjJZdwAEBjMAAjIzAAQGMwABM7cABAYzAAIiGwAEBjJ5HwAEBX5ibwAEBlp5BwAEBlsAAjI3AAQGWwACMjsABAZaWXMABAZaWXcABAZbAAIyMwAEBlsAATO3AAQGWwACIhsABAZaeR8ABAV+YncABAaAAwAD/hcAAjXzAAQGimJnAAQGjwACSTMABAaSXDMABAaTAAHhPwAEBpMAAjX3AAQGimJfAAQGogwfAAQGowACSTMABAarAAI1+wAEBqsAAfzjAAQGoI8ABAaKYmsABAa6AlsABAa6aiMABAaKYncABAbEAwAD/hcAAjYTAAQGzmJnAAQG0wACSTMABAbXAAI2FwAEBtcAAjYbAAQGzmJfAAQG4gwfAAQGzmJrAAQG6wAB8ZcABAbrAAIyewAEBusAAjJ/AAQG6wAB8MsABAbOYncABAb8AwAEBv8AAkkzAAQHBgLXAAP+FwACNiMABAcOYmcABAcTAAJJMwAEBxSjAAQHFlwzAAQHEwACIhsABAcTAAIyhwAEBxLbjwAEBxE7AAQHEwACMosABAcTAAHeSwAEBw5iawAEBzoC9wAEBzoCWwAEBw5ibwAEB0YC9wAEB0YCWwAEBw5iXwAEB1MAAkkzAAQHVwACNicABAdXAAI2WwAEB1cAAjXrAAQHUI8ABAcOYncABAdoAwAEB2sAAjKPAAP+FwACEKcABAd2YmcABAd7AAJJMwAEB38AAfz7AAQHdmJrAAQHhwACSTMABAeLAAH8/wAEB4sAAf0DAAQHiwAB/QcABAeLAAH9CwAEB3ZiXwAEB58AAkkzAAQHowAB0msABAejAAH9DwAEB3ZidwAEB6wDAAP+FwACAqcABAe2YmcABAe7AAJJMwAEB78AAjZnAAQHvwACAq8ABAe+c+8ABAe+YJsABAe2Yl8ABAfRWwAEB9JdNwAEB9MAAkkzAAQH3wABC0cABAffAAICswAEB9JdewAEB9MAAgKjAAQH0gkLAAQHtmJrAAQH9YcABAf2BVcABAf2DssABAe2YncABAgEAwAD/hcAAjZrAAQIDmJnAAQIEwACSTMABAgXAAI2bwAECBcAAjZzAAQIFwABwD8ABAgTAAI2dwAECBJ5GwAECBMAAjZ7AAQIEg1LAAQIEg1bAAQIElkfAAQIEgKzAAQIEwACNn8ABAgOYmsABAhHAAI2gwAECEcAAjaHAAQIDmJfAAQIUgfnAAQIUgojAAQIDmJ3AAQIXAMAA/4XAAI2iwAECGZiZwAECGsAAkkzAAQIbwACNo8ABAhvAAI2kwAECGZiawAECHsAAjKbAAQIenkbAAQIewACMqMABAh7AAIyNwAECHp5BwAECGZidwAECJADAAP+FwACNpcABAiaYmcABAifAAJJMwAECKMAAjaPAAQIowACNpMABAiaYmsABAivAAIymwAECK55GwAECK8AAjKjAAQIrwACMjcABAiueQcABAiaYncABAjEAwAD/hcAAjabAAQIzmJnAAQI0g1HAAQI0wACSTMABAjbAAI2nwAECNsAAjajAAQI2wACNqcABAjbAAI2qwAECM5iXwAECO4H5wAECM5iawAECPYCswAECPcAAjKXAAQI9lkfAAQI9wACMp8ABAj2eQ8ABAj3AAIP8wAECM5idwAECRADAAP+FwACNt8ABAkaYmcABAkfAAJJMwAECSMAAfIfAAQJIwACNuMABAkfAAIzIwAECRpiawAECTMAAjMrAAQJMg1LAAQJMg1bAAQJMwACD/MABAkzAAIymwAECTMAAjMnAAQJMnkPAAQJMwACSTMABAlTAAI3DwAECVMAAjcXAAQJGmJfAAQJXwACSTMABAljAAI26wAECWMAAjcbAAQJXv+LAAQJXgfnAAQJXwACMq8ABAkaYncABAl4AwAD/hcAAjdnAAQJgmJfAAQJhiL7AAQJhtHTAAQJgmJ3AAQJkAMAA/4XAAI3awAECZpiZwAECZ8AAkkzAAQJoh/HAAQJmmJfAAQJqVsABAmqCiMABAmaYncABAm0AwAD/hcAAgqTAAQJvmJnAAQJwwACSTMABAnGH8cABAnHAAIKlwAECccAAgqbAAQJxwACCp8ABAnHAAG3LwAECccAAgqjAAQJxwABvw8ABAm+Yl8ABAnlWwAECeZwWwAECeZwYwAECeYRBwAECeYKIwAECecAAkkzAAQJ/wACCrMABAn/AAIKtwAECf8AAgq7AAQJvmJrAAQKDn5PAAQKDwACSTMABAoXAAG9ZwAECb5idwAEChwDAAP+FwACCr8ABAomYmcABAorAAJJMwAECi8AAgrDAAQKLwACCscABAomYmsABAo7AAFGHwAECiZibwAECkMAAUYfAAQKJmJfAAQKSgorAAQKSn7/AAQKSggLAAQKShBHAAQKJmJ3AAQKXAMAA/4XAAI3cwAECmZiZwAECmsAAkkzAAQKbwACN3cABApvAAI3ewAECm64HwAECm8AAjd/AAQKankbAAQKZmJrAAQKhwACMjcABAqGeQcABAqGeQsABAqHAAFGHwAECocAAkkzAAQKmwACN5cABApmYm8ABAqjAAIyNwAECqJ5BwAECqJ5CwAECmZiXwAECrFbAAQKsgorAAQKswACSTMABAq/AAI3kwAECmZidwAECsQDAAP+FwACN5sABArOYmcABArTAAJJMwAECtcAAjefAAQK1wACN6MABArXAAI2kwAECtcAAjbjAAQK1wACN6cABArXAAI3qwAECs5iawAECvMAAkkzAAQK9wACN5cABArzAAIymwAECvINSwAECvINWwAECvJ5DwAECvMAAjKrAAQKzmJvAAQLEg1LAAQLEg1bAAQLEwACMqsABArOYl8ABAsi/4sABAsjAAIyrwAECyMAAkkzAAQLLwACN5MABAsvAAI3twAECs5idwAECzgDAAP+FwACOHMABAtCYmcABAtGWR8ABAtGArMABAtHAAIymwAEC0cAAkkzAAQLVwAB8h8ABAtXAAI28wAEC1cAAjh3AAQLVwACNzMABAtXAAI4ewAEC1cAAjh/AAQLVwACOIMABAtXAAI25wAEC0JiawAEC3p+TwAEC3sAAjMbAAQLewACMxcABAt6eQ8ABAtCYl8ABAuOCiMABAuPAAJJMwAEC5cAAjiLAAQLlwABvq8ABAuXAAI4lwAEC5cAAjeTAAQLQmJvAAQLqwACMxsABAurAAIzFwAEC0JidwAEC7QDAAP+FwACOKsABAu+YmcABAvDAAJJMwAEC8cAAjivAAQLvmJfAAQLzVsABAvPAAG3NwAEC84KIwAEC75idwAEC9wDAAP+FwACOLMABAvmYmcABAvrAAJJMwAEC+8AAji3AAQL7wACOLsABAvvAAIKlwAEC+5gmwAEC+5z7wAEC+8AAjjDAAQL7wACOMcABAvvAAI4ywAEC+8AAjjPAAQL7wACONMABAvvAAI41wAEC+8AAjjbAAQL7wACON8ABAvvAAI44wAEC+sAAfB3AAQL6wACOL8ABAvrAAI3iwAEC+sAAjVrAAQL6wACMjcABAvrAAI3hwAEC+ZiXwAEDEMAAjKzAAQMQnBjAAQMQgojAAQMQwACN9MABAxDAAJJMwAEDFcAAjkDAAQMVwACOPMABAxXAAHM1wAEDFcAAjj3AAQL5mJrAAQMan5PAAQL5mJvAAQMcwAB+wsABAvmYncABAx4AwAD/hcAAjkbAAQMgmJnAAQMhg9HAAQMhwACSTMABAyPAAIADwAEDI8AAjinAAQMjwACDu8ABAyPAAI5HwAEDI5xTwAEDI8AAfIfAAQMjwACOSMABAyPAAI5JwAEDI8AAjkrAAQMjwACOS8ABAyPAAI5MwAEDIcAARr/AAQMgmJfAAQMwoZfAAQMwwACMq8ABAzDAAH8VwAEDMIKIwAEDMMAAjmHAAQMwwABh1MABAzDAAI5mwAEDMMAAjlnAAQMgmJrAAQM5nkPAAQMgmJ3AAQM7AMAA/4XAAI5nwAEDPZiZwAEDPsAAg7zAAQM+wACLfMABAz2YncABA0EAwAD/hcAAjmjAAQNDmJnAAQNEg9HAAQNEllzAAQNEll3AAQNEwACOZMABA0SCU8ABA0TAAJJMwAEDSsAAjmnAAQNKwACOasABA0rAAI5rwAEDSsAAYpfAAQNKwACObMABA0OYmsABA1CBVcABA1DAAI5twAEDUMAAjm7AAQNDmJfAAQNUwACOb8ABA1TAAJJMwAEDVsAAjnDAAQNUwACOccABA1TAAI5ywAEDVMAAjnPAAQNUgojAAQNUwAB/mMABA0OYncABA10AwAD/hcAAjnzAAQNfmJnAAQNgwACSTMABA2HAAI59wAEDYcAAjn7AAQNhwACOf8ABA2HAAI6AwAEDYcAAjlbAAQNhwACDu8ABA2HAAI3GwAEDYcAAjdLAAQNhwACOgcABA2HAAI6CwAEDYcAAjnjAAQNhwACOg8ABA2DAAIyzwAEDYMAAfKfAAQNgwACMtMABA2DAAIy1wAEDX5iawAEDcsAAi8HAAQNfmJvAAQN0wACLwcABA3TAAIzEwAEDdMAAjLzAAQN0wACMwsABA3TAAIzAwAEDX5iXwAEDeqUqwAEDesAAjLfAAQN6mknAAQN6g0/AAQN6wAB8K8ABA3qePsABA3qXWcABA3rAAIy4wAEDesAARqXAAQN6wACMucABA3qD6sABA3rAAIy7wAEDep1OwAEDesAAjLrAAQN6gojAAQN6wACMvcABA3rAAIzDwAEDesAAkkzAAQOMwACOhMABA4zAAI3BwAEDjMAAjlrAAQOMwACNwsABA4zAAI52wAEDjMAAjoXAAQOMwACOe8ABA4zAAI6LwAEDjMAAjc3AAQOMwACNy8ABA4zAAI3QwAEDjMAAjc/AAQOMwACOkMABA1+YncABA5oAwAD/hcAAjp7AAQOcmJ3AAQOdAMABA5yYmcABA5/AAJJMwAEDoMAAfz7AAQOcmJrAAQOiwACSTMABA6PAAH8/wAEDo8AAf0DAAQOjwAB/QcABA6PAAH9CwAEDnJiXwAEDqMAAkkzAAQOpwAB0msABA6nAAH9DwAD/hcAAjp/AAQOsmJnAAQOtwACSTMABA67AAI6gwAEDrsAAjqHAAQOuwACOosABA67AAI6jwAEDrsAAjqTAAQOuwACAA8ABA67AAI2nwAEDrsAAjkfAAQOuwABjtcABA66cU8ABA67AAI6lwAEDrsAAjkzAAQOsmJfAAQO7wACOqcABA7vAAH8VwAEDu8AAjKvAAQO7wACSTMABA7/AAHSawAEDrJiawAEDwcAAjqrAAQPBnkPAAQPBwACSTMABA8TAAI6swAEDxMAAjq3AAQPEwACN7MABA8TAAI6uwAEDxMAAf0HAAQPEwAB/QsABA6yYncABA8sAwAD/hcAAjrnAAQPNmJ3AAQPOAMABA86b2MABA9CGW8ABA82YmcABA9LAAJJMwAED08AAfz7AAQPNmJrAAQPVwACSTMABA9bAAH8/wAED1sAAf0DAAQPWwAB/QcABA9bAAH9CwAEDzZiXwAED28AAkkzAAQPcwAB0msABA9zAAH9DwAD/hcAAjrrAAQPfmJnAAQPgwACSTMABA+HAAI67wAED4cAAjoLAAQPhwACOScABA+HAAI2rwAED4cAAjrzAAQPhwACOvcABA+HAAI6+wAED4cAAjr/AAQPhwABvWcABA+DAAIu/wAED4MAAi8LAAQPgwACLwMABA+DAAEa/wAED35iXwAED7557wAED78AAi8PAAQPvwACSTMABA/LAAI7AwAED8sAAgcfAAQPywACOqMABA/LAAI3CwAED8sAAjqfAAQPywACOpsABA/LAAHSawAED74H5wAED74KIwAED78AAi8bAAQPfmJrAAQP9wACLwcABA/2WXcABA/3AAHUlwAED/cAAkkzAAQQBwACNr8ABBAHAAH9BwAEEAcAAf0LAAQPfmJvAAQQFwACLwcABBAXAAIvFwAED35idwAEECMAAkkzAAQQJgLXAAQQIwACLxMAA/4XAAI7KwAEEDJiZwAEEDcAAjsvAAQQNwACOzMABBA3AAI6NwAEEDJidwAEEEQDAAQQRuo3AAP+FwACIi8ABBBSYmcABBBWWXMABBBWWXcABBBXAAIzVwAEEFcAAgFbAAQQVwACOJ8ABBBSYmsABBBvAAI5TwAEEFJidwAEEHQDAAQQduo3AAP+FwACO0MABBCCYmcABBCGeRMABBCGeRcABBCHAAH90wAEEIJiXwAEEJcAAe9HAAQQgmJ3AAQQnAMAA/4XAAI7RwAEEKZiZwAEEKsAAkkzAAQQrwACNo8ABBCvAAIADwAEEKZiXwAEELoH5wAEELoKKwAEELoICwAEELoQRwAEELp+/wAEELlbAAQQunBbAAQQunBjAAQQuwAB/FcABBC6EQcABBC6CiMABBC7AAH/YwAEELsAAf9rAAQQuwAB/3cABBC7AAJJMwAEEPcAAdJrAAQQpmJrAAQQ/wABRh8ABBD+fk8ABBD+WXcABBD/AAHUlwAEEP55EwAEEP55FwAEEKZibwAEERsAAUYfAAQQpmJ3AAQRIAMAA/4XAAI7SwAEESpiZwAEES8AAkkzAAQRMwACO08ABBEvAAI7UwAEES8AAjtXAAQRLwACO1sABBEqYnMABBFGc7MABBEqYl8ABBFMjwAEESpidwAEEVQDAAP+FwACO2cABBFeYmcABBFjAAIy/wAEEWMAAjL7AAQRYm1XAAQRYwACO2sABBFjAAI3UwAEEWMAAjdPAAQRYwACN1cABBFjAAI3WwAEEV5iawAEEYYG6wAEEV5iXwAEEY8AAjlfAAQRXmJ3AAQRlAMAA/4XAAI7bwAEEZ5iZwAEEaICswAEEZ5iXwAEEarKjwAEEasAAjlfAAQRnmJ3AAQRtAMAA/4XAAI7ewAEEb5iZwAEEcJZcwAEEcJZdwAEEb5iXwAEEc7KjwAEEc8AAjlfAAQRvmJ3AAQR2AMAA/4XAAI7gwAEEeJiawAEEeYG6wAEEeJiXwAEEe8AAjlfAAQR7wACO38ABBHiYncABBH4AwAD/hcAAjuHAAQSAmJnAAQSBwACM1cABBIHAAIBWwAEEgJiawAEEhIG6wAEEgJiXwAEEhsAAi9jAAQSGwACOV8ABBIbAAI7fwAEEgJidwAEEigDAAP+FwACO4sABBIyYmcABBI3AAIzVwAEEjcAAgFbAAQSMmJrAAQSQgbrAAQSMmJfAAQSSwACL2MABBJLAAI5XwAEEksAAjt/AAQSMmJ3AAQSWAMAA/4XAAI7wwAEEmJiZwAEEmYNSwAEEmZZHwAEEmYRbwAEEmJidwAEEnQDAAP+FwACO8cABBJ+YmcABBKDAAI7ywAEEoMAAjvPAAQSgwACO9MABBKDAAI71wAEEoIJ2wAEEoMAAR5DAAQSgwACO9sABBJ+YncABBKgAwAD/hcAAjvfAAQSqmJnAAQSrwACO+MABBKvAAIzjwAEEq8AAjOLAAQSrwACNJ8ABBKudncABBKudr8ABBKvAAI75wAEEq53fwAEEq8AASU/AAQSrwABJFMABBKudrsABBKvAAI76wAEEq8AAjvvAAQSqmJ3AAQS5AMAA/4XAAI78wAEEu5iZwAEEvMAAUBHAAQS8wACO/cABBLzAAI7+wAEEvMAAjv/AAQS8wACPAMABBLzAAI8BwAEEvMAAjwLAAQS8wACPA8ABBLzAAI8EwAEEvMAAjwXAAQS8wACPBsABBLzAAI8HwAEEvMAAjwjAAQS8wACPCcABBLzAAI8KwAEEvMAAjwvAAQS8wACPDMABBLzAAI8NwAEEvMAAjw7AAQS8wACPD8ABBLzAAI8QwAEEvMAAjxHAAQS8wACPEsABBLzAAI8TwAEEvMAAjxTAAQS8wACEdcABBLzAAI8VwAEEvMAAjxbAAQS8wACPF8ABBLuYncABBNoAwAD/hcAAjxjAAQTcmJnAAQTdwACPGcABBN3AAI70wAEE3cAAjvXAAQTcmJ3AAQThAMAA/4XAAI8awAEE45iZwAEE5MAAjxnAAQTkwACPG8ABBOTAAI8cwAEE45idwAEE6ADAAP+FwACPHcABBOqYmcABBOvAAJJMwAEE7JxTwAEE7MAAjx7AAQTswABwK8ABBOzAAIPbwAEE7MAAjx/AAQTswACPIMABBOqYmsABBPPAAG8rwAEE6piXwAEE9cAAcALAAQT1nFXAAQT1wABvPMABBPWDicABBPWB68ABBPWB+8ABBPWCBMABBPXAAJJMwAEE/cAAjyHAAQTqmJ3AAQT/AMAA/4XAAI8iwAEFAZiZwAEFAoH4wAEFAsAAg8PAAQUBmJfAAQUFgfnAAQUBmJ3AAQUHAMAA/4XAAI8jwAEFCZiZwAEFCsAAkkzAAQULwACPJMABBQuYJsABBQuXHMABBQvAAI8lwAEFC8AAY7XAAQULwACPJsABBQvAAI8nwAEFC8AAjefAAQULwACPKMABBQvAAGMSwAEFC8AAjynAAQULwACPKsABBQvAAI8rwAEFC8AAjyzAAQULwACNm8ABBQvAAI1TwAEFC8AAjy3AAQULwACPLsABBQvAAI8vwAEFC8AAjzDAAQULwACNT8ABBQvAAI2jwAEFC8AAg9fAAQULwACPMcABBQvAAI8ywAEFC8AAb1nAAQULwACPM8ABBQmYnMABBSfAAI82wAEFJ8AAjzfAAQUJmJfAAQUqgfnAAQUqwACOTcABBSrAAJJMwAEFLcAAfzjAAQUtwACPOcABBS3AAI84wAEFLcAAcE3AAQUtwABwTsABBS3AAI81wAEFLcAAj03AAQUtwACPU8ABBS3AAI9UwAEFLcAAj1XAAQUtwACPVsABBS3AAI9HwAEFLcAAj0HAAQUtwACPS8ABBS3AAI86wAEFLcAAjzvAAQUtwACPNMABBS2Ii8ABBSrAAI5gwAEFKsAAj1LAAQUJmJrAAQVCgePAAQVCwACPUcABBULAAI2gwAEFQsAAjBLAAQVCnkHAAQUJmJvAAQVIwACOWMABBQmYncABBUrAAJJMwAEFS4C1wAD/hcAAj1rAAQVNmJnAAQVOwACSTMABBU/AAI21wAEFT8AAjfLAAQVPwACPW8ABBU/AAI9cwAEFT8AAja/AAQVPwACPXcABBU/AAG86wAEFT7bcwAEFTrOawAEFTZiXwAEFWcAAfxXAAQVZwACSTMABBVvAAI2xwAEFWcAAQzTAAQVZh0fAAQVZS8ABBVmAv8ABBVmZHcABBVmApcABBVmEWcABBVmCQsABBVmD+MABBVnAAEM2wAEFWYCrwAEFWZb+wAEFWZY4wAEFWawywAEFWcAAQznAAQVZI8ABBU2YmsABBW3AAI9hwAEFbbkYwAEFbYPQwAEFbYNiwAEFbSnAAQVtYcABBW2BVcABBW2DssABBU2Ym8ABBXbAAG+TwAEFTZidwAEFeADAAP+FwACPY8ABBXqYmcABBXvAAJJMwAEFfMAAj1/AAQV8wACPZMABBXzAAGuVwAEFfMAAa5bAAQV8wACPZcABBXqYl8ABBYLAAI9mwAEFgsAAjbDAAQWCwACNtsABBYKCiMABBYLAAJJMwAEFh8AAj2DAAQWHwACPZ8ABBYfAAI9ewAEFh8AAj2rAAQWHwACPacABBYfAAI9owAEFepibwAEFjsAAi8XAAQV6mJ3AAQWQAMAA/4XAAI9rwAEFkpiZwAEFk8AAkkzAAQWUwACC9MABBZKYmsABBZZewAEFkpibwAEFmMAAQ+jAAQWSmJfAAQWaiJXAAQWawACPbMABBZrAAIy2wAEFmsAAjMHAAQWSmJ3AAQWfAMAA/4XAAI9twAEFoZiZwAEFosAAkkzAAQWjwABvO8ABBaPAAI9uwAEFo8AAjpDAAQWhmJfAAQWnwACMtsABBafAAIzBwAEFoZidwAEFqgDAAP+FwACPb8ABBayYmcABBa3AAI9wwAEFrcAAj3HAAQWtwACPcsABBa3AAI9zwAEFrcAAj3TAAQWtwACPdcABBa3AAI92wAEFrcAAj3fAAQWtwACPeMABBa3AAI95wAEFrcAAj3rAAQWtwAB1r8ABBa3AAI97wAEFrcAAj3zAAQWtwACPfsABBa3AAI+AwAEFrcAAj4LAAQWtwACPhMABBa3AAI+GwAEFrcAAj4jAAQWtwACPisABBa3AAI+MwAEFrcAAj47AAQWtwACPkMABBa3AAHYCwAEFrcAAj5LAAQWsmJ3AAQXIAMAA/4XAAI+UwAEFypiZwAEFy8AAj5XAAQXLnSbAAQXLwACPl8ABBcvAAI+YwAEFy8AAj5rAAQXLwACPm8ABBcvAAI+cwAEFy8AAj53AAQXLwACAF8ABBcqYl8ABBdXAAJJMwAEF1sAAj57AAQXWwACPpMABBdbAAI+nwAEFypidwAEF2gDAAP+FwACPrsABBdyYnMABBd0AwAEF3JiXwAEF38AAjBLAAQXfwACPscAA/4XAAI+ywAEF4piZwAEF48AAf4zAAQXjpSrAAQXjtGzAAQXjwABGv8ABBePAAI+zwAEF48AAST7AAQXjwABQFMABBePAAIR1wAEF48AAj7fAAQXimJfAAQXtwAB/mMABBe2CiMABBe1WwAEF7ZwYwAEF7cAAfC/AAQXimJzAAQXzwACPucABBeKYmsABBfXAAI+9wAEF9cAAX3XAAQX1wAB//MABBfXAAI++wAEF9cAAj7/AAQX1wACMtcABBeKYm8ABBfzAAIy1wAEF4pidwAEF/gDAAP+FwACPwMABBgCYmcABBgEiwAEGAJiXwAEGAyPAAQYAmJ3AAQYFAMAA/4XAAI/CwAEGB5iZwAEGCMAASTzAAQYIwACMlsABBgi8VcABBgeYncABBgwAwAD/hcAAj8PAAQYOmJnAAQYPwACPxMABBg/AAIyWwAEGD7xVwAEGD8AAj8XAAQYPwACPxsABBg/AAI/HwAEGD8AAj8jAAQYPwACPycABBg/AAI/KwAEGD8AAj8vAAQYPwACPzMABBg/AAI/NwAEGD8AAj87AAQYPwACPz8ABBg/AAI/QwAEGD8AAj9HAAQYOmJ3AAQYgAMAA/4XAAI/SwAEGIpiZwAEGI4Q0wAEGIpidwAEGJQDAAP+FwACP08ABBieYmcABBijAAI13wAEGKMAAgL7AAQYnmJfAAQYrI8ABBieYncABBi0AwAD/hcAAj9TAAQYvmJnAAQYwwABQEcABBjDAAI/VwAEGMMAAj9bAAQYwp7bAAQYwwACP18ABBjDAAIR1wAEGMMAAjxbAAQYwwACP2MABBjDAAI/ZwAEGMMAAj9rAAQYwwACP28ABBjDAAI/cwAEGMMAAkkzAAQY9wABjtcABBj3AAI/dwAEGPcAAj97AAQY9wACP38ABBj3AAHG1wAEGPcAAj+DAAQY9wACP4cABBj3AAI/iwAEGPcAAj+PAAQY9wACP5MABBj3AAI/lwAEGPcAAc6HAAQY9wACP5sABBj3AAI/nwAEGPcAAj+jAAQY9wACP6cABBjDAAI++wAEGMMAAj7/AAQYvmJfAAQZQnnvAAQZQnBbAAQZQgojAAQZQVsABBlDAAJJMwAEGVcAAj/HAAQZVwACP7sABBlXAAI/vwAEGVcAAj/nAAQZVwACP88ABBlXAAI/ywAEGVcAAj+3AAQZVwACP+sABBi+YncABBl4AwAD/hcAAj/zAAQZgmJnAAQZhp7TAAQZgmJ3AAQZjAMAA/4XAAI/9wAEGZZiZwAEGZqe0wAEGZZidwAEGaADAAP+FwACP/sABBmqYmcABBmvAAJJMwAEGbMAAb1nAAQZswACP/8ABBmzAAJAAwAEGapiXwAEGcJ57wAEGcMAAkkzAAQZywACPVcABBnLAAJABwAEGcsAAkAvAAQZywACQD8ABBmqYncABBncAwAD/hcAAkBHAAQZ5mJnAAQZ6wACPm8ABBnrAAI+awAEGesAAj5zAAQZ6wACPncABBnrAAI+6wAEGeoH3wAEGeoi9wAEGeZiXwAEGgsAAkkzAAQaDwACQEsABBoPAAJATwAEGgsAAj/vAAQaCwACQFMABBnmYncABBogAwAD/hcAAkBjAAQaKmJnAAQaLwAB8YsABBovAAJJMwAEGjcAAc6HAAQaNwACQGcABBoqYl8ABBpCee8ABBpBWwAEGkJwWwAEGkIKIwAEGkMAAkBvAAQaQwACQHsABBoqYncABBpcAwAD/hcAAkCTAAQaZmJnAAQaawAB8YsABBprAAHwdwAEGmsAAkkzAAQadwABvWcABBp2cU8ABBp3AAJAlwAEGnbvjwAEGncAAgXjAAQadwABvG8ABBpmYl8ABBqTAAJJMwAEGpcAAcGjAAQalwABvQ8ABBqXAAG9EwAEGpcAAcFvAAQalwACQJsABBqXAAJAnwAEGpJwYwAEGpIKIwAEGpFbAAQakwACQKMABBpmYncABBrAAwAD/hcAAkCnAAQaymJ3AAQazAMABBrOb2MABBrWGW8ABBrKYmcABBrfAAJJMwAEGuMAAfz7AAQaymJrAAQa6wACSTMABBrvAAH8/wAEGu8AAf0DAAQa7wAB/QcABBrvAAH9CwAEGspiXwAEGwMAAkkzAAQbBwAB0msABBsHAAH9DwAD/hcAAkCrAAQbEmJnAAQbFwACSTMABBsbAAJArwAEGxsAAb1nAAQbGnFPAAQbGlzzAAQbGwACAA8ABBsbAAI/mwAEGxsAAkC3AAQbGwACQLsABBsbAAJAvwAEGxsAAkDDAAQbGwACQMcABBsbAAJAywAEGxsAAgCPAAQbGwACQHMABBsbAAJAdwAEGxsAAkDPAAQbGwACP6cABBsbAAHyHwAEGxcAAgMLAAQbFwACQLMABBsXAAH/8wAEGxJiXwAEG3MAAf5jAAQbcwACQQsABBtyB+cABBtxWwAEG3MAAfC/AAQbcnBbAAQbcnBjAAQbcgojAAQbcwACSTMABBuXAAG6b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A8AA/NoCYAPAAP3rXQPAAP2cAWADwABum10DwAD9nAFgA8AAbptdA8AA/NoCYAPAAP3rXQPAAP2cAWADwABum10DwABoIgFgA8AAbwFdA8AA/NoCYAO802ADwABum14DAAICAmADvNNdA8AAaCIBYAPAAG8BAAFXA8AAbosAXF0DwABoIgFgA8AAbwFdA8AAaCIBYAPAAG8BXQPAAGgiAWADwABvAV4DAAICAmADvNNdA8AAaCIBYAPAAG8BAAFXA8AAbosAXF0DwAD9nAFgA7zTXQPAAPzaAmADvMFdA8AA/ZwBYAO8wV0DwAD9nAFgA7zBXQPAAP2cAWADvNNdA8AA/ZwBYAO8010DwAD82gJgA7zTYAPAAG6bXQPAAP2cAWADwABijWEDAmADwAD9610DwAD8ZwFbXGEDAmADwAD9610DwAD8ZwFbXGEDAmADwAD9610DwAD8ZwFbXGEDAmADwAD9610DwAD8ZwFbXF0DwAD9nAFgA8AAZ3VdA8AA/ZwBYAPAAGfwXQPAAP2cAWADwABnp10DwAD9nAFgA8AAaA1dA8AA/KkBYAPAAEzEXQOUdgFgA8AAZ3VdA5R2AWADwABndV0DlHYBYAPAAGfwXQOUdgFgA8AAZ/BdA5R2AWADwABnp10DlHYBYAPAAGenXQOUdgFgA8AAaA1dA5R2AWADwABoDV0DwABPswJbW10DwABPswJbW10DwABPswJbW10DwABPswJbW10DwABPswJbW10DwABPswJbW10DwABPswJbW10DwAD9nAFgA8AAYNJdA8AAT7MCW1tdA8AA/NoCYAPAAGDSYAPAAGDSXQPAAE+zAltbXQPAAPzaAmADvOVgA8AAYNJdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tdA8AAT7MCW1tgA8AAT9RgA8AAT9RgA8AAT9RgA8AAT9RgA8AAT9RgA8AAT9RgA8AAT9RgA8AAT9RgA8AAT9RgA8AAT9RgA8AAT9RgA8AAT9RgA8AAT9Rg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wABoIgFgA8AAb05dA8AAaCIBYAPAAG8BXQPAAGgiAWADwABvTl0DwABoIgFgA8AAb05dA8AAaCIBYAPAAG9OXQPAAGgiAWADwABvTl0DwABoIgFgA8AAbwFdA8AAaCIBYAPAAG9OXQPAAGgiAWADwABvTl0DwABoIgFgA8AAb05dA8AAaCIBYAPAAG9OXQPAAGgiAWADwABvTl0DwABoIgFgA8AAb05dA8AAaCIBYAPAAG8BXQPAAGgiAWADwABvAV0DwAD8qQFgA8AAYNJdA8AAaCIBYAPAAG9OXQPAAGgiAWADwABvTl0DwABoIgFgA8AAbwFdA8AAaCIBYAPAAG9OXQPAAGgiAWADwABvTl0DwABoIgFgA8AAbwFdA8AAaCIBYAPAAG9OXQPAAGgiAWADwABvTl0DwABoIgFgA8AAb05dA8AAaCIBYAPAAG9OXQPAAGgiAWADwABvAV0DwABoIgFgA8AAb05dA8AAaCIBYAPAAG9OXQPAAGgiAWADwABvTl0DwABoIgFgA8AAb05dA8AAaCIBYAPAAG9OXQPAAGgiAWADwABvTl0DwABoIgFgA8AAbwFdA8AAaCIBYAPAAG9OXQPAAGgiAWADwABvTl0DwABoIgFgA8AAb05dA8AAaCIBYAPAAG9OXQPAAGgiAWADwABvAV0DwABoIgFgA8AAbwFdA8AAaCIBYAPAAG8BXQPAAGgiAWADwABvTl0DwABoIgFgA8AAb05dA8AAaCIBYAPAAG8BXQPAAGgiAWADwABvTl0DwABoIgFgA8AAb05dA8AAaCIBYAPAAG9OXQPAAGgiAWADwABvTl0DwABoIgFgA8AAb05dA8AAaCIBYAPAAG9OXQPAAGgiAWADwABvAV0DwABoIgFgA8AAbyZdA8AAaCIBYAPAAG8mXQPAAGgiAWADwABvJl0DwAD9nAFgA8AAb5JdA8AA/NoCYAO8rV0DwAD9nAFgA8AAYmZdA8AA/ZwBYAPAAGJmXQPAAPzaAmADwABLZF0DwAD9nAFgA8AAYmZdA8AA/ZwBYAPAAGJmXQPAAP2cAWADwABiuV0DwAD9nAFgA7zoXQPAAP2cAWADvOhdA8AA/ZwBYAO86F0DwAD9nAFgA7zoXQPAAP2cAWADvOhdA8AA/ZwBYAO86F0DwAD9nAFgA7zoXQPAAP2cAWADvOhdA8AA/ZwBYAO8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YAPAAHeZYAPAAHeZYAPAAHeZXQPAAPypAWADwAB3wV0DwAD82gJgA8AAYrlgA8AAYmZdA8AA/KkBYAPAAJZiXQPAAPypAWADwACWYl0DwAD8qQFgA8AAlmJdA8AA/KkBYAPAAJZiXQPAAPypAWADwACWYl0DwAD8qQFgA8AAlmJdA8AA/KkBYAPAAJZiXQPAAPypAWADwACWYl0DwAD8qQFgA8AAlmJdA8AA/KkBYAPAAJZiXQPAAPypAWADwACWYl0DwAD8qQFgA8AAlmJdA8AA/KkBYAPAAJZiXQPAAPypAWADwACWYl0DwAD8qQFgA8AAlmJdA8AA/KkBYAPAAJZiXQPAAPypAWADwACWYl0DwAD9nAFgA8AAeDFdA8AA/KkBYAPAAEHvXQPAAGgiAWADwAB4yl0DwAD8qQFgA7zoXQPAAPypAWADvOhdA8AA/KkBYAO86F0DwAD8qQFgA7zoXQPAAPypAWADvOhdA8AA/NoCYAPAAPwFYAPAAHjWXQPAAP2cAWADwABg0mEDAWADvMFcYQMBYAO8wVxhAwFgA7zBXGEDAWADvMFcYQMBYAO8wVxhAwFgA7zBXGEDAWADvMFcYQMBYAO8wVxhAwFgA7zBXGEDAWADvMFcYQMBYAO8wVxhAwFgA7zBXGEDAWADvMFcYQMBYAO8wVxhAwFgA7zBXGEDAWADvMFcYQMBYAO8wVxhAwFgA7zBXGEDAWADvMFcYQMBYAO8wVxhAwFgA7zBXGEDAWADvMFcYQMBYAO8wVxhAwFgA7zBXGEDAWADvMFcXQPAAP2cAWADvMFdA8AA/ZwBYAO8wV0DwAD9nAFgA7zBXQPAAP2cAWADvMFdA8AA/ZwBYAO8wV0DwAD8qQFgA70AYQMBYAPAAHjWXGEDAWADwAB41lxhAwFgA8AAeNZcYQMBYAPAAHjWXGEDAWADwAB41lxhAwFgA8AAeNZcYQMBYAPAAHjWXGEDAWADwAB41lxhAwFgA8AAeNZcYQMBYAPAAHjWXGEDAWADwAB41lxhAwFgA8AAeNZcYQMBYAPAAHjWXGEDAWADwAB41lxhAwFgA8AAeNZcYQMBYAPAAHjWXGEDAWADwAB41lxhAwFgA8AAeNZcYQMBYAPAAHjWXGEDAWADwAB41lxhAwFgA8AAeNZcYQMBYAPAAHjWXGEDAWADwAB41lxhAwFgA8AA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pEphAwFgA7zTXF0DwACOtgNgA8AAjmVgA8AApJxgA8AApEphAwJgA7zBYAO801xdA8AAjrYDYAPAAI5lYAPAAKScYAPAAKRKXQPAAI6mAmADwACOa2ADwACk1F0DwACOpgJgA8AAjmtgA8AApNRdA8AAjrYDYAPAAI5lYAPAAKScYAPAAKRKXQPAAI62A2ADwACOZWADwACknGADwACkSl0DwACOtgNgA8AAjmVgA8AApJxgA8AApEpdA8AAjqYCYAPAAI5rYAPAAKTUXQPAAI62A2ADwACOZWADwACknGADwACkSl0DwACOtgNgA8AAjl9gA8AApDJgA8AApB9dA8AAjqYCYAPAAI5rYAPAAKTUXQPAAI6mAmADwACOa2ADwACk1F0DwACOpgJgA8AAjmtgA8AApNRhAwFgA7yyYAPAAGJmYQMAYAPAAPo/YQMBYAO8smADwABiZmEDAWADwAD+bGADwABiZmEDAWADwAD+bGADwABiZmEDAWADwAD+bGADwABiZmEDAWADwAD+bGADwABiZmEDAWADwAD+bGADwABiZmEDAWADwAD+bGADwABiZmEDAWADwAD+bGADwABiZmEDAWADwAD+bGADwABiZmEDAWADwAD+bGADwABiZmEDAWADwAD+bGADwABiZmEDAWADwAD+bGADwABiZmEDAWADwAD+bGADwABiZmEDAWADwAD+bGADwABiZmEDAWADwAD+bGADwABiZmEDAWADwAD+bGADwABiZmEDAWADwAD+bGADwABiZl0DwAD8qQFgA8AAYNJdA8AAjqYCYAPAAI5rYAPAAKTUXQPAAI6mAmADwACOa2ADwACk1F0DwAD8qQFgA4lPXQPAAPzaAmADiU9gA7zNXQPAAPzaAmADiU9gA7zNXQPAAI6mAmADwACOa2ADwACk1F0DwACOtgNgA8AAjmVgA8AApJxgA8AApEphAwFgA4JSYAODXl0DwACOpgJgA8AAjmtgA8AApNRdA8AAjrYDYAPAAI5lYAPAAKScYAPAAKRKXQPAAPzaAmADwAD962ADvNNdA8AA/NoCYAO9DGADwAB9Ol0DwACOpgJgA8AAjmtgA8AApNRdA8AA/KkBYAPAAI5xXQPAAPzaAmADwACOa10DwAD8qQFgA8AAjnFdA8AA/NoCYAOJT2ADvM1dA8AA/NoCYAPAAP3rYAPA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AbqNYAPAAPo/AFxdA8AA/ZwBYAPAAGJmYQMBYAPAAGJmXGEDAWADwABiZlxhAwFgA8AAYmZcYQMBYAPAAGJmXGEDAWADwABiZlxhAwFdA8AA/GcBYAPAAGJmXF0DwAD9nAFgA7ytXQPAAPzaAmADwABLZF0DwAD9nAFgA7ytYQMBXQPAAPxnAWADwABiZlxdA8AA/ZwBYAO8wV0DwAD9nAFgA7zoXQPAAP2cAWADvQxdA8AA/ZwBYAPAAGdXXQPAAP2cAWADvK1dA8AA/ZwBYAO8wWEDAWADvK1cXQPAAP2cAWADvOhdA8AA/ZwBYAO9DGEDAWADvK1cYQMBYAO8rVxhAwFgA7ytXF0DwAD9nAFgA70MXQPAAP2cAWADvQxhAwFgA8AAYvlgA8AA+j9dA8AA/ZwBYAO86F0DwAD9nAFgA7zoYQMBYAO8rVxhAwFgA7ytXF4DAAABAAHAAFlKYAPAAGJmAFxhAwFgA7ytXGEDAV0DwAD9nAFgA8AAYmZcYQMBXQPAAP2cAWADwABiZlxhAwFgA7ytXGEDAWADvK1cYQMCYAO8rWADwABi+VxhAwJgA7ytYAPAAGL5XGEDAWADwABiZl0DwAD8ZwFgA7zBXQPAAPypAWADvMFhAwFgA8AAYmZdA8AA/GcBYAO8wWEDAWADwABiZl0DwAD8ZwFgA7zBXQPAAP2cAWADvMFhAwFgA8AAYmZdA8AA/GcBYAO8wWEDAWADwABiZl0DwAD8ZwFgA7zBYQMBYAPAAGJmXQPAAPxnAWADvMFhAwFgA7zBXGEDAWADvMFcYQMBYAO8wVxhAwFgA8AAYmZdA8AA/GcBYAO8wV0DwAD9nAFgA7zBYQMBYAO8rVxhAwFgA7ytXF0DwAD9nAFgA70MXQPAAP2cAWADvOhhAwFgA7ytXF0DwAD9nAFgA8AAS2RdA8AA/ZwBYAO8rV0DwAD82gJgA8AAS2RdA8AA/ZwBYAO8rV0DwAD9nAFgA8AA/AVdA8AA/ZwBYAO8rV0DwAD82gJgA8AAZ1ddA8AA/ZwBYAO8rV0DwAD9nAFgA7zBXQPAAPzaAmADwAD962ADvMFdA8AA/NoCYAPAAP3rXQPAAP2cAWADvMFdA8AA/ZwBYAO8wWEDAWADvMFgA7zBYQMBYAO8wWADvMFdA8AA/ZwBYAO8wV0DwAD9nAFgA7zBXQPAAPypAWAD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A8AA/AVdA8AA/KkBYAPAAPwFXQPAAP2cAWADwAD8BV0DwAD8qQFgA8AARUZdA8AA/KkBYAPAAK82YAPAAPwFXQPAAPypAWADwABFRl0DwAD8qQFgA8AARUZdA8AA/KkBYAPAAEVGXQPAAPypAWADwACSjWEDAmADwABFfWADwAD8BWADwAD6P2EDAmADwABFfWADwAD8BWADwAD6P2EDAmADwABFfWADwAD8BWADwAD6P10DlHYBYAPAAEV9XQPAAPzaAmADwAD9UV0DwAD82gJgA8AARX1gA8AARX1dA8AA/NoCYAPAAEV9YAPAAEV9XQPAAPzaAmADwABFfWADwABFfV0DwAD82gJgA8AA/VFdA8AA/NoCYAPAAEV9YAPAAEV9XQPAAPzaAmADwABFfWADwABFfV0DwAD8qQFgA8AARX1dA8AA/KkBYAPAAP1RXQPAAPzaAmADwABFfWADwABFfV0DwAD82gJgA8AARX1dA8AA/NoCYAPAAEV9YAPAAEV9XQPAAPzaAmADwABFfWADwABFfV0DwAD82gJgA8AARX1gA8AARX1dA8AA/NoCYAPAAEV9XQPAAPzaAmADwABFfWADwABFfV0DwAD82gJgA8AARX1gA8AARX1dA5R2AWADwABFfV0DlHYBYAPAAEV9XQPAAPzaAmADwAD9UV0DwAD82gJgA8AARX1gA8AARX1dA8AA/NoCYAPAAEV9XQPAAPzaAmADwABFfWADwABFfV0DlHYBYAPAAEV9XQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJONAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAXQPAAJNLAl8DAABfAwEAYQMCYAPAAP3rYAPAAP3rYAPAAJZ8YQMCYAPAAP3rYAPAAP3rYAPAAJZ8YQMCYAPAAP3rYAPAAP3rYAPAAJZ8XQPAAPypAWADwACWYl0DwAD8qQFgA8AAlmJdA8AA/KkBYAPAAJbHXQPAAPypAWADwACVEl0DwAD8qQFgA8AAlRJdA8AA/KkBYAPAAJbUXQPAAPypAWADwACW1F0DwAD8qQFgA8AAlfFdA8AA/KkBYAPAAJXxXQPAAPypAWADwACW1F0DwAD8qQFgA8AAlsddA8AA/KkBYAPAAJUSXQPAAPypAWADwACW1F0DwAD8qQFgA8AAlXBhAwFgA8AAlRlcYQMBYAPAAJUZXF0DwAD8qQFgA8AAk/tdA8AA/KkBYAPAAJbUW1thAwFgA8AAlRJgA8AAk/thAwFgA8AAlRJgA8AAk/thAwFgA8AAlRJgA8AAk/tdA8AA/KkBYAPAAJbUXQPAAPypAVtdA8AA/KkBYAPAAJTEXQPAAPypAWADwAD962EDAWADwACVEmADwAD6P10DwAD9nAFfAwAAXQPAAPypAV8DAABdA8AAmKUBYAPAAP3rXQPAAJilAWADwAD9610DwAD8qQFdA8AA/NoCYAPAAP3rYAPAAP3rXQPAAPypAWADwAD8BV0DwAD8qQFgA8AA/AVdA8AA/KkBYAPAAPwFXQPAAPypAWADwAD8BV0DwAD82gJgA8AA/etgA8AA/etdA8AA/NoCYAPAAP3rYAPAAJkcXQPAAPzaAmADwAD962ADwACZHGEDAVtgA8AAlRJhAwFbYAPAAJXxYQMBW2ADwACT+10DwAD8qQFgA8AAk/tdA8AA/KkBYAPAAJP7YQMBW1xeAwABAQFbAAFXA8AAkq0AW10DwAD8qQFgA8AAk/tdA8AA/KkBYAPAAJP7XQPAAPypAWADwACT+2EDAVtcXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW2EDAWADwACW4mEDAVtgA8AA/VFhAwFbYAPAAP1RXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW10DwAD8qQFgA8AAlXBeAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFtdA8AA/KkBYAPAAJUSXQPAAPypAWADwACVEmEDAltbW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW10DwAD8qQFgA8AAlfFdA8AA/KkBYAPAAJXxXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW10DwAD8qQFgA8AAlsddA8AA/KkBYAPAAJbHXgMAAQEBWwABVwPAAJKtAFteAwABAQFbAAFXA8AAkq0AW14DAAEBAVsAAVcDwACSrQBbXQPAAP2cAWADwACT210DwAD9nAFgA8AAk9tdA8AA/ZwBYAPAAP3rXQPAAPypAWADwAD962ADwAD7+10DkucBYAPAAP3rYAPAAJntYAPAAJntYAPAAJn+YAPAAJn+YAPAAJn+YQMBYAOCUmADwAD6P2EDAWADglJgA8AA+j9hAwFgA4JSYAPAAPo/YQMBYAOCUmADhNlhAwFgA4JSYAPAAPo/YQMBYAOCUmADwAD6P2EDAWADglJgA4TZYQMBYAOCUmADwAD6P2EDAWADglJgA8AA+j9hAwFgA4JSYAOE2WEDAWADglJgA8AA+j9hAwFgA4JSYAPAAPo/YQMBYAOCUmADhNlhAwFgA4JSYAPAAPo/XQPAAPzaAmADhNlgA8AAmspdA8AA/NoCYAOE2WADwACayl0DwACzMAFgA8AAbD9dA8AAszABYAPAAGw/XQPAALMwAWADwABsP10DwACzMAFgA8AAbD9dA8AAszABYAPAAGw/XQPAALMwAWADwABsP10DwAD8qQFbYQMBXwMAAFxhAwFfAwAAXF0DwAD82gJfAwAAYAPAAPwFYQMBXwMAAFxdA8AA/NoCYAPAAP5pXQPAAJr9AVtdA8AAmv0BW2EDAV8DAABcXQPAAJr9AWADwAD9610DwACa/QFgA8AA/mxgA8AAyV1gA8AA43pgA8AA4yhdA8AA/bkBXQPAAPypAWADwAD8BWADwADjKGADwADjKGADwADjKGADwADjKGADwADjKGADwADjKGADwADjKGADwADjKF0DwAD9uQFdA8AA/KkBYAPAAPwFYAPAAOMoXQPAAP25AV0DwAD8qQFgA8AA/AVdA8AA/bkBXQPAAPypAWADwAD8BV0DwAD9uQFdA8AA/KkBYAPAAPwFYQMAXwMAAF0DwAD8qQFfAwAAYQMAXwMAAF0DwAD8qQFgA8AA/ethAwBfAwAAXQPAAPzaAmADwAD9618DAABdA8AA/ZwBYAPAAPwFXQPAAPypAV8DAABhAwBfAwAAXQPAAPypAV8DAABdA8AA/NoCYAPAAP5pXQPAAJtgAVtdA8AAm2ABW10DwACbYAFgA8AA/mxdA8AAm2ABYAPAAP3rXQPAAPypAWADwAD8BWADwADJXWEDAFxdA8AA/ZwBYAOIU10DwAD82gJgA4JLYAPAAIBTYQMAXF0DwAD9nAFgA4hTXQPAAPypAWADgktdA8AA/ZwBYAOCS10DwAD9nAFgA8AAgINdA8AA/NoCYAPAAICwXQPAAP2cAWADwACAg10DwAD9nAFgA4hTXQPAAP2cAWADwACAg10DwAD8qQFgA4hTXQPAAPzaAmADgktgA8AAgFNdA8AA/NoCYAOCUmADwACAQ10DwAD9nAFgA4JLXQPAAP2cAWADwACAg10DwAD9nAFgA4N8XQPAAP2cAWADg3xgA8AA/etgA8AA/AVdA8AA/ZwBYAPAAJxrXQPAAP2cAWADwACca10DwAD82gJgA8AAnGtgA8AA/AVdA8AA/NoCYAPAAJxrYAPAAPwFXQPAAPzaAmADwACca2ADwAD8BV0DwAD82gJgA8AAnGtgA8AA/AVdA5R2AWADwAD9UV0DwAD82gJgA7zTXQOUdgFgA8AA/VFhAwFbYAPAAPo/YQMAYAPAAJxrYQMBW2ADwAD6P2EDAVtgA8AA+j9hAwFbYAPAAPo/YQMBW2ADwAD6P2EDAVtgA8AA+j9hAwFbYAPAAPo/YQMAYAPAAJxrYQMBW2ADwAD6P2EDAVtgA8AA+j9hAwFbYAPAAPo/YQMAYAPAAJxrYQMBW2ADwAD6P2EDAVtgA8AA+j9hAwBgA8AAnGthAwFbYAPAAPo/YQMBW2ADwAD6P2EDAVtgA8AA+j9hAwBgA8AAnGthAwFbYAPAAPo/XQPAAP2cAWADwACca10DwAD9nAFgA8AAnGtdA8AA/ZwBYAPAAJxrXQPAAPzaAmADwAD962ADwACeVF0DwAD82gJgA8AA/etgA8AAnlRdA8AA/KkBYAPAAJxrXQPAAPzaAmADwAD962ADveddA8AA/ZwBYAPAAJxrXQPAAP2cAWADwACca2EDAGADwABFfWEDAGADwABFfWEDAGADwABFfWEDAGADwABFfV0DwAD8qQFgA8AARX1dA8AA/KkBYAPAAEV9XQPAAP2cAWADwABiuV0DwAD9nAFgA8AAYrldA8AA/KkBYAPAAGK5XQPAAPypAWADwABiuV0DwAD82gJgA70MYAO85V0DwAD8qQFgA8AAn69dA8AA/KkBYAPAAJ+vXQPAAPypAWADwACFiV0DwAD8qQFgA8AAn69dA8AA/KkBYAPAAJ+vXQPAAPzaAmADglJgA8AAnGtdA8AA/NoCYAOCUmADwACca10DwAD82gJgA4JSYAPAAJxrXQPAAPypAVtdA8AA/KkBW10DwAD8qQFgA8AAnGtdA8AA/NoCYAPAAP3rYAPAAJxrXQPAAPzaAmADwACFiV0DwAD8qQFgA8AAn69dA8AA/NoCYAPAAIWJXQPAAPypAWADwACfr10DwAD8qQFgA8AAn69dA8AA/KkBYAPAAJ+vYQMAXGEDAWADwAD8BWADwAD8BWEDAWADwAD8BWADwAD8BWEDAWADwAD8BWADwAD8BV0DwAD82gJgA4JSYAPAAJxrXQPAAPzaAmADglJgA8AAnGtdA8AA/NoCYAOCUmADwACca10DwAD82gJgA4JSYAPAAJxrXQPAAP2cAWADvQxdA8AA/NoCYAOCUmADwACca10DwAD8qQFgA8AAnWVdA8AA/NoCYAO9DGADwACca10DlHYBYAO9DGEDAmADvQxgA8AAnGtcXQPAAPzaAmADvOVgA8AAnGthAwFgA70MXGEDAWADvQxcXQPAAP2cAWADvQxdA8AA/ZwBYAPAAJxrXQPAAP2cAWADwACca10DwAD9nAFgA8AAnGtdA8AA/ZwBYAPAAJxrXQPAAPypAWADwACeNl0DwAD8qQFgA8AAnGtdA8AA/KkBYAPAAJxrXQPAAPypAWADwACca10DwAD8qQFgA8AAnGtdA8AA/KkBYAPAAJxrXQPAAPzaAmADwACca10DwAD9nAFgA8AAnGtdA8AA/NoCYAPAAJxrXQPAAP2cAWADwACca10DwAD8qQFgA8AAnGtdA8AA/NoCYAO8010DwAD8qQFgA8AAnGtdA8AA/KkBYAPAAP3rXQPAAPypAWADwAD9610DwAD8qQFgA8AA/etdA8AA/KkBYAPAAP3rXQPAAPypAWADwAD9610DwAD8qQFgA8AA/etdA8AA/KkBYAPAAP3rXQPAAP2cAWADwAD9610DwAD9nAFgA8AA/etdA8AA/NoCYAPAAJxrYAPAAPwFXQPAAPypAWADwACca10DwAD9nAFgA8AAnGtdA8AA/NoCYAPAAP3rYAPAAJxrXQPAAPzaAmADwAD962ADwACca2EDAFxdA8AA/KkBYAPAAJxrXQPAAPzaAmADvQxgA8AAnTRdA8AA/KkBYAPAAJxrXQPAAPzaAmADvNNgA8AAnMddA8AA/KkBYAPAAJxrXQPAAPzaAmADvedgA8AAnGtdA8AA/KkBYAPAAJxrXQPAAPzaAmADglJgA8AAne9dA8AA/ZwBYAPAAJxrXQPAAPypAWADwACca10DwAD82gJgA4JSYAPAAJ4UXQPAAPypAWADwACca10DwAD8qQFgA8AAnGtdA8AA/KkBYAPAAJxrXQPAAPzaAmADglJgA8AAnGtdA8AA/KkBYAPAAJxrXQPAAPypAWADwACca10DwAD8qQFbYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xhAwNgA8AA/etgA8AA/AVgA8AA/etcYQMDYAPAAP3rYAPAAPwFYAPAAP3rXGEDA2ADwAD962ADwAD8BWADwAD961xgA8AAl4BgA8AAl4BgA8AAl4BgA8AAl4BgA8AAl4BgA8AAl4BgA8AAl4BgA8AAl4BgA8AAl4BdA8AA/ZwBYAPAAEtkXQPAAPypAWADwACV8V0DwAD8qQFgA8AAlfFdA8AA/KkBYAPAAJUSYAPAAJeAYAPAAJeAYQMAYAPAAJUSXQPAAPzaAmADwACVHGADwACVEl0DwAD82gJgA8AAlRxgA8AAS2RdA8AA/KkBYAPAAP3rYAPAAJeAYAPAAJeAYAPAAJeAYAPAAJeAYAPAAJeAXQPAAPypAWADwACVEmADwACXgF0DwAD8qQFgA8AAlfFdA8AA/KkBYAPAAJUSYAPAAJeAYAPAAJeAYAPAAJeAXQPAAP2cAWADvQ9hAwBdA8AA/ZwBYAO9D10DwAD8qQFgA8AAjgxdA8AA/KkBYAPAAI4MYAPAAJeAYAPAAJeAYAPAAJeAYAPAAJeAYQMBYAO8wWADwACVEmEDAWADvMFgA8AAlRJhAwFgA7zBYAPAAJUSXQPAAPypAWADwACT+10DwAD8qQFgA8AAk/thAwFgA7zBYAPAAJP7XQPAAPypAWADwACT+2EDAWADvMFgA8AAk/tdA8AA/KkBYAPAAJP7XQPAAPypAWADwACT+2EDAWADvMFgA8AAk/tdA8AA/KkBYAPAAJP7YQMBYAO8wWADwACT+10DwAD8qQFgA8AAk/thAwFgA7zBYAPAAJUSXQPAAPypAWADwACT+2EDAWADvMFgA8AAlRJdA8AA/KkBYAPAAJP7YAPAAJeAYAPAAJeAYAPAAJeAYAPAAJeAYAPAAJeAYAPAAJeAYAPAAJeAYQMCW1tgA8AAlRJgA8AAl4BhAwJbW2ADwACVEmEDAGADwACVEmEDAltbYAPAAJUSYQMAYAPAAJUSXQPAAPypAWADwAD9610DwAD8qQFgA8AA/etdA8AA/KkBYAPAAP3rXQPAAPypAWADwAD962ADwACXgF0DwAD8qQFgA8AAlRJdA8AA/KkBYAPAAJUSXQPAAPypAWADwACWx10DwAD8qQFgA8AAlRJhAwFgA8AA/etgA8AAlRJhAwFgA8AA/etgA8AAlRJhAwFgA8AA/etgA8AAlRJhAwFdA8AA/GcBYAPAAP3rYAPAAP3rYQMBXQPAAPxnAWADwAD962ADwAD9610DwAD8qQFgA8AAlmJdA8AA/KkBYAPAAJZiYQMBYAPAAJUSYAPAAJUSYAPAAJeAXQPAAPypAWADwACV8V0DwAD8qQFgA8AAlRJgA8AAl4BdA8AA/KkBYAPAAJXxXQPAAPypAWADwACVEmADwACXgF0DwAD8qQFgA8AA/etdA8AA/KkBYAPAAJUSYAPAAJeAXQPAAPypAWADwACV8V0DwAD8qQFgA8AAlRJdA8AA/KkBYAPAAJUSXQPAAPypAWADwACVEl0DwAD8qQFgA8AAlRJdA8AA/KkBYAPAAJXxXQPAAPypAWADwACVEmADwACXgGADwACXgF0DwAD9nAFgA8AAS2RdA8AA/ZwBYAPAAEtkXQPAAPypAWADwACOEV0DwAD9nAFgA8AAS2RdA8AA/ZwBYAPAAEtkXQPAAPypAWADwACOEV0DwAD9nAFgA8AAS2RdA8AA/ZwBYAPAAEtkXQPAAPypAWADwACOEV0DwAD9nAFgA8AAS2RdA8AA/KkBYAPAAI4RXQPAAPzaAmADvMFgA8AAorpdA8AA/NoCYAO8wWADwACiul0DwAD82gJgA7zBYAPAAKK6YQMCYAPAAJUcYAPAAJPbXGEDAWADwACitFxhAwFgA8AAorRcYQMBYAPAAKK0XGADwACXgGADwACXgGEDAWADwABiuWADwACVEmADwACXgGADwACXgGEDAWADwAB3Q1xdA5R2AWADvMFeAwABAQFgA8AAdzwAAVcDwACiswBcYAPAAKLgYAPAAKLgYAPAAKLgYAPAAKLgYAPAAKLgYAPAAKLgXQPAAPzaAmADwACFiWADwACjDl0DwAD8qQFgA8AAowVdA8AA/KkBYAPAAKMFYAPAAPv7YAPAAPv7XQPAAPypAWADwACFgF0DwAD8qQFgA8AAowVdA8AA/KkBYAPAAKMFXQPAAPzaAmADvQxgA7zlXQPAAPzaAmADvQxgA8AARX1dA8AA/NoCYAO9DGADwABFfV0DwAD82gJgA70MYAPAAEV9XQPAAPzaAmADvQxgA8AARX1dA8AA/NoCYAO9DGADwABFfV0DwAD82gJgA70MYAPAAEhwXQPAAPzaAmADwABiuWADwACFal0DwAD82gJgA70MYAPAAEV9XQPAAPzaAmADvQxgA8AARX1dA8AA/NoCYAO9DGADwABFfV0DwAD82gJgA70MYAPAAEV9XQPAAPzaAmADvQxgA8AARX1dA8AA/NoCYAO9DGADwABFfV0DwAD82gJgA70MYAPAAEV9XQPAAPzaAmADvQxgA8AARX1dA8AA/NoCYAO9DGADwABFfV0DwAD82gJgA7zlYAO952EDAFxhAwBgA8AARX1hAwBcXQPAAPypAWADwACjXF0DwAD8qQFgA8AAo1xhAwBcXQPAAPypAWADwACjXF0DwAD8qQFgA8AAo1xhAwBcYQMAXGEDAFxdA8AA/KkBYAPAAEV9YQMAXF0DwAD8qQFgA8AARX1hAwBcXQPAAPypAWADwABFfV0DwAD8qQFgA8AARX1dA8AA/NoCYAPAAP5sYAPAAKQfXQPAAPzaAmADwAD962ADwACkSmEDAWADg15cXQPAAPzaAmADgsBgA7y3YQMBYAO801xhAwFgA70AXF0DwAD8qQFgA70HYQMDYAPAAGJmYAPAAP3rYAPAAGDSXF4DAAECAWADiFMBoTNgA8AA+j8AXGEDA2ADwABiZmADwAD962ADwABg0lxeAwABAgFgA4hTAaEzYAPAAPo/AFxdA8AA/KkBXQOS5wFgA8AAYo1dA5MYAWADwABijV0DkxgBYAPAAGKNXQPAAPypAV0DkucBYAPAAGKNXQPAAPypAV0DkucBYAPAAGKNXQPAAPypAV0DkucBYAPAAGKNXQPAAPypAWADwAD8BV0DwAD8qQFdA5LnAWADwABijV0DwAD8qQFdA5LnAWADwABijV0DwAD8qQFdA5LnAWADwABijV0DwAD8qQFgA8AA/AVhAwFgA8AAYo1cXQOTSgFgA8AAYo1dA8AA/NoCYAPAAPwFXQOTSgFgA8AAYo1dA5NKAWADwABijV0DwAD8qQFdA5LnAWADwABijV0DwAD8qQFdA5LnAWADwABijV0Dk0oBYAPAAGKNXQPAAPypAWADwAD962ADwAD7+10DkucBYAPAAP3rYAPAAKYGYAPAAKYGYAPAAKYXYAPAAKYXYAPAAKYXYAPAAKYXYAPAAKYXYAPAAKYXYAPAAKYXYQMEXwMAAGADwABiZmADwABiuWADwABiZlxdA8AA/KkBYAPAAE2yXQPAAPypAWADwABNsl0DwAD8qQFgA8AATbJdA8AA/KkBYAOIU10DwAD8qQFgA8AATbJdA8AA/KkBYAPAAE2yXQPAAPypAWADwABNsl0DwAD8qQFgA8AATbJdA8AA/NoCW2ADwABNsl0DwAD82gJbYAPAAE2yXQPAAPzaAmADvOVgA8AATbJhAwJgA4N8YAPAAE2yXGEDAmADg3xgA8AATbJcXQPAAPypAWADwABPkl0DwAD82gJgA4hTYAPAAE2yXQPAAPzaAmADiU9gA8AAYmZdA8AA/KkBYAPAAGLLXQPAAPypAWADwABiZl0DwAD82gJgA7zlYAPAAGDSXQPAAPypAWADwABg0l0DwAD8qQFgA8AAYNJdA8AA/KkBYAPAAGDSXQPAAPypAWADwABg0l0DwAD9nAFgA4pNXQPAAPzaAmADwAD+bGADwACm310DwAD82gJgA8AA/etgA8AApv1dA8AA/NoCYAPAAP3rYAODXl0DwAD82gJgA8AA/etgA4NeXQPAAPzaAmADwAD962ADg15dA8AA/NoCYAPAAP3rYAODXmEDAWADg15cXQPAAPzaAmADwAD962ADg15dA8AA/NoCYAPAAP3rYAODXl0DwAD82gJgA4LAYAO8t10DwAD8qQFgA4SuXQPAAPypAWADhYZdA8AA/NoCYAPAAP3rYAODXl0DwAD82gJgA8AA/etgA4NeXQPAAPypAWADg15dA8AA/NoCYAPAAP3rYAODXl0DwAD82gJgA8AA/etgA4NeXQPAAPypAWADg15dA8AA/NoCYAPAAP3rYAODXl0DwAD8qQFgA4NeXQPAAPzaAmADwAD962ADg15eAwABAgFgA4N8AcAAZ+lgA8AA+j8AXF4DAAEDAWADg+oCwABn6mADwAD6P8AAZ+lgA8AA+j8AXF4DAAECAWADg3wBwABn6WADwAD6PwBcYQMBYAODGVxeAwABAwFgA4PqAsAAZ+pgA8AA+j/AAGfpYAPAAPo/AFxdA8AA/NoCYAPAAP3rYAODXmEDAWADvNNcYQMBYAO9AFxdA8AA/KkBYAO9B10DwAD82gJgA8AA/etgA4NeXQPAAPzaAmADwAD962ADg15dA8AA/NoCYAPAAP3rYAODXl0DwAD8qQFgA4NeYQMDYAPAAGJmYAPAAP3rYAPAAGDSXF4DAAECAWADiFMBoTNgA8AA+j8AXGADwAD962ADwAD8BV0DwAD82gJgA8AA/etgA8AAp+tdA8AA/KkBYAO8010DwAD9nAFgA7zTXQPAAPypAWADvNNdA8AA/KkBYAO8010DlHYBYAO8010DlHYBYAO8010DwAD82gJgA8AAp91gA8AAp/tdA8AAaCIBYAPAAKkqXQPAAPypAWADwACpPl0DwAD8qQFgA8AAqKVdA8AA/KkBYAOIg10DwAD8qQFgA4iDXQPAAPypAWADwACosV0DwAD8qQFgA8AAqLxdA8AA/KkBYAPAAKjIXQPAAPypAWADwACovF0DwAD8qQFgA8AAqMhdA8AA/KkBYAPAAKjUXQPAAPypAWADwACo310DwAD8qQFgA8AAqOxdA8AA/KkBYAPAAKj5XQPAAPypAWADwACpBF0DwAD8qQFgA8AAqRBdA8AA/KkBYAPAAKkeXQPAAPypAWADwACpW10DwAD8qQFgA4N8XQPAAPypAWADwACO4F0DwAD82gJgA4N8XQPAAPypAWADwACO4F0DwAD8qQFgA8AAqWZdA8AA/KkBYAPAAKmtXQPAAPypAWADwACprV0DwAD8qQFgA4JSXQPAAPypAWADwACpcV0DwAD8qQFgA8AAqXxdA8AA/KkBYAPAAKl8XQPAAPypAWADwACpfF0DwAD8qQFgA8AAqYddA8AA/KkBYAPAAKmUXQPAAPypAWADwACplF0DwAD8qQFgA8AA/etdA8AA/KkBYAPAAP3rXQPAAPypAWADwAD6P10DwAD8qQFgA8AA+rddA8AA/KkBYAPAAPwFXQPAAPypAWADwACpoF0DwAD8qQFgA4OpXQPAAPypAWADg3xdA8AA/KkBYAOD6l0DwAD8qQFgA4W9XQPAAPypAWADh+RdA8AA/KkBYAOF0F0DwABoIgFgA8AAqSphAwFgA8AAYo1gA8AA+j9dA8AA/KkBYAO1t10DwAD8qQFgA7W3YQMBYAPAAGKNYAPAAPo/XQPAAPypAWADtbddA8AA/KkBYAO1t10DwAD82gJgA8AA/etdA8AA/ZwBYAPAAEV9XQPAAP2cAWADwABFfWEDAWADwACz0FxdA8AA/KkBYAPAAKqqXQPAAPypAWADwACqql0DwAD8qQFgA8AAqqpdA8AA/KkBYAPAAKqqXQPAAPypAWADwACqql0DwAD8qQFgA8AAqqpdA8AA/KkBYAPAAKqqXQPAAPypAWADwACqql0DwAD8qQFgA8AAqqpdA8AA/KkBYAPAAKqqXQPAAPypAWADwACqql0DwAD8qQFgA8AAqqpdA8AA/KkBYAOesV0DkucBYAOesV0DkucBYAOesV0DkucBYAPAAItjXQOS5wFgA8AAi2NgA8AAl4BgA8AAl4BgA8AAl4BgA8AAl4BgA8AAl4BgA8AAl4BgA8AAl4BdA8AA/KkBYAPAAJUSXQPAAPypAWADwACVEl0DwAD8qQFgA8AAlsddA8AA/KkBYAPAAJUSXQPAAPypAWADwACVEl0DwAD8qQFgA8AAlRJdA8AA/KkBYAPAAJUSYQMAYAPAAJUSXQPAAPypAWADwACVEl0DwAD8qQFgA8AAlRJdA8AA/KkBYAPAAJUSYQMAYAPAAJUSXQPAAPypAWADwACVEl0DwAD8qQFgA8AAlRJgA8AAl4BdA8AA/KkBYAPAAJUSXQPAAPypAWADwACVEl0DwAD8qQFgA8AAlRJdA8AA/KkBYAPAAJUSXQPAAPypAWADwACVEl0DwAD8qQFgA8AAlRJgA8AAl4BgA8AAl4BgA8AA/etgA8AAl4BdA8AA/NoCYAPAAI10YAPAAJUSXQPAAP2cAWADwACNX10DwAD82gJgA8AAjXRgA8AA/etdA8AA/NoCYAPAAI1fYAPAAFAiXQPAAPypAWADwABP+10DwAD8qQFgA8AAT/tdA8AA/NoCYAPAAI1fYAPAAFAiXQPAAPypAWADwAD9610DwAD8qQFgA8AA/etdA8AA/NoCYAPAAP3rW10DwAD82gJgA8AA/etbYAPAAMfmYAPAAJeAYAPAAJeAYAPAAJeAYAPAAJeAXQPAAPypAWADwACT+2ADwACXgF0DwAD8qQFgA8AAk/tdA8AA/KkBYAPAAJP7YAPAAJeAYAPAAJeAXQPAAPzaAmADwACNVV0DwAD8qQFgA8AAlsddA8AA/KkBYAPAAJbHXQPAAPypAWADwACWx10DwAD8qQFgA8AAlXBdA8AA/KkBYAPAAI1VXQPAAPypAWADwACVcF0DwAD8qQFgA8AAk/tdA8AA/KkBYAPAAJP7XQPAAPypAWADwACNVWEDAGADwAD6P10DwAD82gJgA8AAlRxgA8AAlRJgA8AAl4BdA8AA/KkBYAPAAJP7XQPAAPypAWADwACT+10DwAD8qQFgA8AAk/tgA8AAl4BdA8AA/KkBYAPAAJP7YAPAAJeAYQMAXGADwACXgGEDAFxdA8AA/KkBYAPAAJXxXQPAAPypAWADwACT+2EDAFxdA8AA/KkBYAPAAJXxXQPAAPypAWADwACT+2ADwACXgF0DwAD8qQFgA8AAlsddA8AA/KkBYAPAAJbHXQPAAPypAWADwACWx10DwAD8qQFgA8AAlsddA8AA/KkBYAPAAJbHXQPAAPypAWADwACWx2ADwACXgGADwACXgGADwACXgGADwACXgF0DwAD82gJgA8AAlRJgA8AAlRJdA8AA/NoCYAPAAJUSYAPAAJUSXQPAAPzaAmADwACVEmADwACVEl0DwAD82gJgA8AAlRJgA8AAlRJdA8AA/NoCYAPAAJUSYAPAAJUSXQPAAP2cAWADwACNpGEDAVtcXQPAAPypAWADwACNpF0DwAD82gJgA8AAjaRdA8AA/KkBYAPAAI2kXQPAAP2cAWADwACNpGEDAVtcXQPAAPypAWADwACT+10DwAD8qQFgA8AAk/tdA8AA/KkBYAPAAJUSXQPAAPypAWADwACT+10DwAD8qQFgA8AAk/tdA8AA/KkBYAPAAJP7XQPAAPypAWADwACT+10DwAD8qQFgA8AAk/tdA8AA/KkBYAPAAJP7YAPAAJeAXQPAAPypAWADwACWx2ADwACXgF0DwAD8qQFgA8AAlRJdA8AA/KkBYAPAAJUSXQPAAPypAWADwACVHF0DwAD8qQFgA8AAlRJdA8AA/KkBYAPAAJUcYQMBYAPAAI4MXGEDAWADwAD8BWADwACT+2EDAWADwAD8BWADwACT+2EDAWADwAD8BWADwACT+2EDAWADwAD8BWADwACT+2EDAWADwAD8BWADwACT+2EDAWADwAD8BWADwACT+2EDAmADwACVEmADwACN8mADwACT+10DwAD8qQFgA8AAk/tgA8AAl4BdA8AA/KkBYAPAAJP7YAPAAJeAYAPAAJeAYQMCYAPAAJUSYAPAAI3yYAPAAJP7XQPAAPypAWADwACT+10DwAD8qQFgA8AAk/tdA8AA/KkBYAPAAJP7XQPAAPypAWADwACT+10DwAD8qQFgA8AAk/tdA8AA/KkBYAPAAJP7XQPAAPypAWADwACWx2ADwACXgGADwACXgF0DwAD8qQFgA8AAlsdgA8AAl4BdA8AA/KkBYAPAAJbHYAPAAJeAXQPAAPypAWADwACWx10DwAD8qQFgA8AAlsddA8AA/KkBYAPAAJbHXQPAAPypAWADwACWx10DwAD82gJgA8AAjV9gA8AA/AVdA8AA/KkBYAPAAP3rXQPAAPypAWADwAD9610DwAD8qQFgA8AAlRJdA8AA/KkBYAPAAJbHXQPAAPypAWADwACWx2ADwACXgF0DwAD8qQFgA8AAlsdhAwJgA8AAlRJgA8AA/etgA8AAlsddA8AA/KkBYAPAAJbHYQMCYAPAAJUSYAPAAP3rYAPAAJbHXQPAAPypAWADwACWx10DwAD8qQFgA8AAlsddA8AA/KkBYAPAAJbHXQPAAPypAWADwACWx10DwAD8qQFgA8AAlsddA8AA/KkBYAPAAJbHXQPAAPypAWADwACWx10DwAD8qQFgA8AAlsddA8AA/KkBYAPAAJbHXQPAAPypAWADwACT+10DwAD8qQFgA8AAlsdgA8AAl4BhAwJgA8AA/etgA8AA/etcYQMCYAPAAP3rYAPAAP3rXGEDAmADwAD962ADwAD961xdA8AA/KkBYAPAAJP7YAPAAJeAXQPAAPzaAmADwAD962ADwACVEl0DwAD82gJgA8AA/etgA8AAlRJdA8AA/NoCYAPAAP3rYAPAAJUSXQPAAPzaAmADwAD962ADwACVEl0DwAD8qQFgA8AAk/tdA8AA/KkBYAPAAJP7XQPAAPypAWADwACT+10DwAD8qQFgA8AAk/tgA8AAl4BdA8AA/NoCYAPAAP3rYAPAAJUSXQPAAPypAWADwACVcF0DwAD8qQFgA8AARX1dA8AA/KkBYAPAAEV9YQMBYAPAAEV9YAPAAPo/YQMCYAPAAEV9YAPAAEV9YAPAAEV9YQMCYAPAAEV9YAPAAEV9YAPAAEV9YQMAYAPAAEV9YQMBYAPAAEV9YAPAAPo/YQMCYAPAAEV9YAPAAEV9YAPAAEV9YQMAYAPAAEV9YQMDYAPAAP3rYAPAAEV9YAPAAEV9YAPAAEV9YQMBYAPAAP3rYAPAAEV9YQMAYAPAAEV9YQMCYAPAAP3rYAPAAP3rYAPAAEV9YQMCYAPAAP3rYAPAAP3rYAPAAEV9YQMDYAPAAP3rYAPAAEV9YAPAAEV9YAPAAEV9YQMBYAPAAP3rYAPAAEV9YQMBYAPAAP3rYAPAAEV9YQMBYAPAAP3rYAPAAEV9YQMBYAPAAP3rYAPAAEV9YQMBYAPAAP3rYAPAAEV9YQMAYAPAAEV9XQPAAP2cAWADwABFfV0DwAD9nAFgA8AARX1dA8AA/KkBYAPAAEV9XQPAAPypAWADwABFfV0DwAD8qQFgA8AARX1hAwFgA8AARX1gA8AA+j9dA8AA/ZwBYAPAAEV9XQPAAP2cAWADwABFfWEDAWADwABFfWADwAD6P10DwAD8qQFgA8AArVpdA8AA/KkBYAPAAP3rXQPAAPzaAmADwABFfWADwACtYl0DwAD82gJgA8AARX1gA8AA/AVdA8AA/NoCYAPAAEV9YAPAAK1iXQPAAPzaAmADwABFfWADwAD8BV0DwAD82gJgA8AARUZgA8AA/AVdA8AA/NoCYAPAAEVGYAPAAPwFXQPAAPzaAmADwABFfWADwACtYl0DwAD82gJgA8AARX1gA8AArWJdA8AA/KkBYAPAAEVGXQPAAPzaAmADwABFRmADwACtbl0DwAD82gJgA8AARX1gA8AArWJdA8AA/NoCYAPAAEV9YAPAAPwFXQPAAPzaAmADwABFfWADwAD8BV0DwAD82gJgA8AARUZgA8AA/AVdA8AA/KkBXQPAAK2ZAWADwABFfV0DwAD8qQFdA8AArZkBYAPAAEV9XQPAAP2cAWADwAD9610DwAD9nAFgA8AA/etdA8AA/NoCYAPAAEVGYAPAAK2hXQPAAPzaAmADwABFRmADwACtoV0DwAD9nAFgA8AA/etdA8AA/ZwBYAPAAP3rXQPAAP2cAWADwAD9610DwAD82gJgA8AARX1gA8AA/etdA8AA/KkBYAPAAP3rXQPAAP2cAWADvMFdA8AA/ZwBYAO8wV0DwAD9nAFgA7zBXQPAAP2cAWADvMFdA8AA/ZwBYAO8wV0DwAD9nAFgA7zBXQPAAPypAWADwABFfWEDAWADwABFfWADwAD6P10DwAD8qQFgA8AARX1hAwFgA8AARX1gA8AA+j9hAwJgA8AARm5gA8AAS2RgA8AA/Q5hAwJgA8AARm5gA8AAS2RgA8AA/Q5dA8AA/KkBYAPAAEV9XQPAAPypAWADwAD8BV0DwAD82gJgA8AA/AVgA8AARX1gA8AA+/tdA8AA/NoCYAPAAEV9YAPAAPv7XQPAAPzaAmADwABFfWADwACu5V0DwAD82gJgA8AARX1gA8AAruVdA8AA/NoCYAPAAEV9YAPAAK7lYQMBYAPAAEV9YAPAAK7lYQMBYAPAAEV9YAPAAK7lXQPAAPypAWADwABJ6V0DwAD82gJgA8AARX1gA8AAruVdA8AA/NoCYAPAAEV9YAPAAK7lXQPAAPzaAmADwABFfWADwACu5V0DwAD82gJgA8AARX1gA8AAruVdA8AA/NoCYAPAAEV9YAPAAK7lXQPAAPzaAmADwABFfWADwACu5V0DwAD8qQFgA8AARX1dA8AA/KkBYAPAAEV9YQMCXwMAAF8DAABgA8AA/AVhAwJfAwAAXwMAAGADwAD8BV0DwAD8qQFbXQPAAPypAVtdA8AA/KkBW10DwAD8qQFbYQMCXwMAAF8DAABgA8AA/AVdA8AA/KkBXwMAAF0DwAD8qQFfAwAAXQPAAPypAV8DAABhAwJfAwAAXwMAAGADwAD8BV0DwAD8qQFfAwAAXQPAAPypAV8DAABhAwJfAwAAXwMAAGADwAD8BV0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AA/KkBXwMAAF0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AA/KkBXwMAAF0DwACv3ANfAwAAXwMBAF8DAgBdA8AA/NoCXwMAAF0DwAC0ngJfAwEAXwMCAF0DwACv3ANfAwAAXwMBAF8DAgBdA8AA/NoCXwMAAF0DwAC0ngJfAwEAXwMCAGEDAl8DAQBfAwIAXGEDAl8DAQBfAwIAXQPAAP0BAl8DAwBfAwQAXQPAAPzaAl8DAABdA8AAtJ4CXwMBAF8DAgBhAwBfAwIAYQMCXwMBAF8DAgBgA8AA+j9dA8AA/NoCXwMAAF0DwAC0ngJfAwEAXwMCAGEDAV8DAgBfAwIAYQMAXwMCAF0DwAD82gJfAwAAXQPAALSeAl8DAQBfAwIAYQMCXwMBAF8DAgBfAwIAXQPAAPypAVtdA8AAsFUBXwMBAF0DwACwVQFfAwEAXQPAALBVAV8DAABdA8AAsFUBXwMAAF0DwACwVQFfAwAAXQPAALBVAV8DAABdA8AAwL8CXwMAAGADwAD8BV0DwADAvwJfAwAAYAPAAPwFXQPAALBVAV8DAABdA8AAsFUBW10DwACwVQFbXQPAALBVAVtdA8AAsFUBW10DwAD82gJgA8AAsJ9gA8AA/AVdA8AA/NoCYAPAALCfYAPAAPwFXQPAALBVAV8DAABdA8AAsFUBXwMBAF0DwACwVQFfAwAAXQPAALBVAV8DAABdA8AAsJoBW10DwACwqgJbW10DwACwggFbXQPAALB4AVtdA8AAsJUBW10DwACwVQFbXQPAALCaAVtdA8AAsKoCW1tdA8AAsIIBW10DwACweAFbXQPAALCVAVtdA8AAsFUBW10DwACw0wJfAwAAXwMBAF0DwACw2AFfAwAAXQPAAPzaAl8DAgBfAwMAYQMCXwMAAF8DAQBfAwIAYQMCXwMAAF8DAQBfAwMAXQPAAPzaAl8DAABfAwEAXQPAAPzaAl8DAABfAwEAYQMCXwMBAF8DAQBfAwEAXQPAAPzaAl8DAQBdA8AA/KkBXwMAAGEDAV8DAABfAwEAXQPAAPypAV8DAABhAwFfAwAAXwMBAGEDAl8DAQBfAwEAYAPAAPwFYQMBXwMAAF8DAQBhAwJfAwEAXwMBAGADwAD8BV0DwAD82gJfAwAAXQPAAP2cAV8DAABdA8AA/ZwBXwMAAF0DwADAvwJfAwAAYAPAAPwFXQPAAMC/Al8DAABgA8AA/AVdA8AA/KkBXwMAAF0DwADAywFfAwAAYQMBXwMAAGADwAD9Dl0DwADAvwJfAwAAYAPAAPwFXQPAAMC/Al8DAABgA8AA/AVdA8AA/ZwBXwMAAF0DwAD8qQFdA8AA/ZwBXwMAAGEDAV8DAABgA8AA/Q5dA8AAsO4BXwMAAF0DwACw7gFfAwAAXQPAAPypAV8DAABdA8AAsQ8BXwMAAF0DwACxDwFfAwAAXQPAALEPAV8DAABdA8AAsQ8BXwMAAF0DwACxDwFfAwAAXQPAALEPAV8DAABdA8AAsQ8BXwMAAF0DwACxDwFfAwAAXQPAALEPAV8DAABdA8AA/KkBXwMAAF0DwAD9nAFfAwAAXQPAALEPAV8DAABdA8AA/KkBXwMAAF0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AA/KkBXwMAAF0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AA/KkBXwMAAF0DwAD8qQFfAwAAXQPAALEPAV8DAABhAwFfAwAAXF0DwACxMAFfAwAAXQPAALEwAV8DAABhAwFfAwAAYAPAAPo/YQMBXwMAAGADwAD6P2EDAV8DAABgA8AA+j9hAwBfAwAAYQMBXwMAAGADwAD6P2EDAF8DAABhAwFfAwAAYAPAAPo/YQMAXwMAAGEDAl8DAABfAwAAXwMAAGEDAl8DAQBfAwAAXwMBAF0DwAD8qQFfAwAAXQPAAP2cAV8DAABdA8AAsTABXwMAAF0DwACxMAFfAwAAXQPAALEwAV8DAABhAwFfAwAAYAPAAPo/XQPAAPypAV8DAABdA8AAsTABXwMAAF0DwACxMAFfAwAAXQPAALEwAV8DAABdA8AA/KkBXwMAAF0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AAsTABXwMAAF0DwACxMAFfAwAAXQPAALEwAV8DAABdA8AAsTABXwMAAF0DwACxMAFfAwAAXQPAALEwAV8DAABhAwFfAwAAYAPAAPo/YQMBXwMAAGADwAD6P10DwACxMAFfAwAAXQPAALEwAV8DAABdA8AAsTABXwMAAF0DwACxMAFfAwAAXQPAALEwAV8DAABdA8AAsTABXwMAAF0DwACxMAFfAwAAXQPAALF0AV8DAABdA8AA/KkBXwMBAF0DwACxdAFfAwEAXQPAALF0AV8DAABdA8AA/KkBXwMAAF0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AA/KkBXwMAAF0DwACxdAFfAwAAXQPAALF0AV8DAABdA8AA/KkBXwMAAF0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AA/KkBXwMAAF0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AA/KkBXwMAAF0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AA/KkBXwMAAF0DwACxdAFfAwAAXQPAAPypAV8DAABdA8AA/KkBXwMAAF0DwAD8qQFfAwAAXQPAALF0AV8DAABdA8AAsXQBXwMAAF0DwACxmQJfAwAAXwMBAF0DwAD9nAFfAwAAXQPAAPxnAV8DAABdA8AA/ZwBXwMAAF0DwACxyQFfAwAAXQPAAP2cAV0DwAD9nAFfAwAAXQPAAPxnAV8DAABdA8AA/GcBXwMAAF0DwAD8ZwFfAwAAXQPAAPxnAV8DAABdA8AA/GcBXwMAAF0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AA/KkBXwMAAF0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AAsmUBXwMAAF0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AA/KkBXwMAAF0DwACyZQFfAwAAXQPAAPypAV8DAABdA8AA/KkBXwMAAF0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AA/ZwBXwMAAF0DwAD9nAFfAwAAXQPAAP2cAV8DAABdA8AAwmsBXwMAAF0DwADCawFfAwAAXQPAAMJrAV8DAABdA8AAwmsBXwMAAF0DwAD82gJfAwAAXwMBAF0DwAD82gJfAwAAXwMBAF0DwAD82gJfAwAAXwMBAF0DwAD82gJfAwAAXwMBAF0DwAD82gJfAwAAXwMBAF0DwAD82gJfAwAAXwMBAF0DwAD9nAFfAwAAXQPAAPzaAl8DAABfAwEAYQMBXwMBAGADwAD6P10DwAD8qQFbXQPAAP2cAV8DAQBdA8AA/KkBW2EDAV8DAQBgA8AA+j9dA8AA/ZwBXwMBAF0DwAD9nAFfAwAAXQPAALMgAV8DAABhAwFfAwAAYAPAAPo/XQPAAP2cAV8DAABdA8AAsyABXwMAAF0DwAD18QFfAwAAYQMBXwMAAF0DwAD8ZwFfAwAAXQPAAPXxAV8DAABdA8AA9fEBXwMAAGEDAV8DAABdA8AA/GcBXwMAAF0DwAD9nAFfAwAAXQPAAPXxAV8DAABdA8AA/KkBXwMAAF0DwACzIAFfAwAAXQPAALNMAV8DAABdA8AAs10BXwMAAF0DwACzMAFfAwAAXQPAALMwAV8DAABdA8AAszABXwMAAF0DwAD9nAFfAwAAXQPAAP2cAV8DAABdA8AA/NoCXwMAAF0DwAD9nAFfAwAAXQPAAPzaAl8DAABdA8AA/ZwBXwMAAF0DwACzTAFfAwAAXQPAALNMAV8DAABdA8AA/KkBXwMAAF0DwAD82gJfAwAAXQPAALNEAV8DAABdA8AAs0wBXwMAAF0DwACzIAFfAwAAXQPAALNMAV8DAABdA8AA/KkBXwMAAF0DwACzRAFfAwAAXQPAAPypAV0DwAD8qQFfAwAAXQPAAPzaAl8DAABfAwAAXQPAALMgAV8DAABdA8AA/NoCXwMAAGADwAD8BV0DwACzIAFfAwAAXQPAALNdAV8DAABdA8AA/NoCXwMAAF8DAABdA5R2AWADwACca10DwAD8qQFgA8AAnGtdA5R2AWADvNNdA8AA/KkBYAPAAJ3vXQPAAPypAWADwACeFF0DwAD8qQFgA8AAnjZhAwFgA8AAnTRgA8AA+j9dA8AA/KkBYAPAAJ3vXQPAAPypAWADwACeNmEDAWADvedcYQMBYAO951xhAwFgA73nXGEDAWADvedcXQPAAPypAWADwACT+10DlHYBYAPAAGcmXQOUdgFgA8AAZzJdA5R2AWADwABnPl0DwAD9nAFgA8AAZ0pdA5R2AWADwAD9610DwABoIgFgA8AAZwRdA8AAaCIBYAPAAGcEXQOUdgFgA8AATbJdA5R2AVtdA5R2AWADvMFdA8AA/ZwBYAPAAGdXXQPAAGgiAWADwABnBF0DwAD82gJgA8AA/etgA8AA/VFdA8AA/NoCYAPAAP3rYAPAAP1RXQPAAPypAWADwAD9610DwAD9nAFgA8AA/etdA8AA/NoCYAPAAP3rYAPAAP1RXQPAAPypAWADwAD9610DwAD8qQFgA8AA/etdA8AA/ZwBYAPAAP3rXQPAAPypAWADwAD9610DwAD8qQFgA8AA/etdA8AA/KkBYAPAAP3rXQPAAPypAVtdA8AA/KkBYAPAAP3rXQPAAPypAWADwAD9610DwAD8qQFgA8AA/etdA8AA/KkBYAPAAP3rXQPAAPypAWADwAD9610DwAD8qQFgA8AA/etgA8AAtg9gA8AAxxtgA8AAyV1gA8AAxppdA8AA/KkBYAPAALQuXQPAALQ0AWADwAC0Ll0DwAD82gJgA8AA/mxdA8AAtDQBYAPAALQuXQPAALQ0AWADwAC0Ll0DwAC0RAFgA8AA/mxdA8AAtEQBYAPAAP3rYQMBYAPAAEItXGEDAWADwABCLVxdA8AAtEQBYAPAAP3rXQPAALREAWADwAD+bF0DwAC0RAFgA8AA/etdA8AAtEQBYAPAAP3rXQPAALREAWADwAD+bF0DwAC0RAFgA8AA/etdA8AA/NoCYAPAAPwFXQPAAPzaAmADwAD8BV0DwAD8qQFfAwAAXQPAAPzaAmADwAD8BV0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AA/KkBXwMAAGEDAmADwAD8BV0DwAD8qQFfAwAAW2EDA2ADwAD8BWADwAD8BV8DAABbYQMBXwMAAFtdA8AA/NoCXwMAAGADwAD8BWADwAD8BWEDAl8DAABfAwAAYAPAAPwFYAPAAPwFYQMCXwMAAF8DAQBgA8AA/AVgA8AA/etgA8AA/etgA8AA/etgA8AA+hFgA8AA+rdgA8AA/AVgA8AA/etgA7s3YAPAAPwFYAPAAP3rXQPAAPpLAVtdA8AA/NoCYAPAAP5sXQPAAPzaAmADwAC1Wl8DAABdA8AA/NoCYAPAAP5sXQPAAPzaAmADwAC1Wl8DAABdA8AA/KkBYAPAAP3rXQPAAPzaAmADwAD8BV0DwAD8qQFgA8AA/etdA8AA/KkBYAPAAP3rXQPAAPzaAmADwAD8BV0DwAD8qQFgA8AA/etdA8AA/KkBYAPAAP3rXQPAAPzaAmADwAD8BV0DwAD8qQFgA8AA/etdA8AA/KkBYAPAAP3rXQPAAPzaAmADwAD8BV0DwAD8qQFgA8AA/etdA8AAtNwBXQPAALWzAV8DAABdA8AA/NoCYAPAALVaXQPAALWzAV8DAABdA8AA/KkBYAPAAP3rXQPAAPzaAmADwAD8BV0DwAD8qQFgA8AA/etdA8AAtQABXwMAAF0DwAC1AAFfAwAAXQPAAPypAWADwAD9610DwAD82gJgA8AA/AVdA8AA/KkBYAPAAP3rXQPAAPypAWADwAD9610DwAD82gJgA8AA/AVdA8AA/KkBYAPAAP3rYQMBYAPAAP3rXF0DwAD82gJgA8AAtVpgA8AAtWFhAwFgA8AA/etcXQPAAPzaAmADwAC1WmADwAC1YV4DAAECAWADwAD96wHAAG0cYAPAAPo/AGADwAD+bF0DwAD82gJgA8AA/etgA8AA7sRdA8AA/NoCYAPAAP3rXQPAALTcAWADwAC1YV0DwAD8qQFgA8AA/eteAwABAgFgA8AA/esBwABtHGADwAD6PwBgA8AA/mxdA8AA/NoCYAPAAP3rYAPAAP3rXQPAAPzaAmADwAD+bGADwAC1NGEDA2ADwAD962ADwADuxGADwAD6P2ADwAD9DmEDA2ADwAD962ADwADuxGADwAD6P2ADwAD9Dl0DwAC1AAFfAwAAXQPAALUAAV8DAABhAwJgA8AAtWFdA8AAtbMBXwMAAGADwAD6P10DwAC1AAFfAwAAYQMCYAPAALVhXQPAALWzAV8DAABgA8AA+j9dA8AA/ZwBYAPAAP5sXgMAAgMDXQPAAPzaAmADwAC1Wl0DwAC1swFfAwAAXQPAAPzaAmADwAC1WmADwAC1YWADwAD+bAAAXF4DAAIDA10DwAD82gJgA8AAtVpdA8AAtbMBXwMAAF0DwAD82gJgA8AAtVpgA8AAtWFgA8AA/mwAAFxdA8AA/ZwBYAPAALVaXQPAAP2cAWADwAD+bF4DAAIDA10DwAD82gJgA8AAtVpgA8AAtWFdA8AA/NoCYAPAALVaXQPAALWzAV8DAABgA8AA/mwAAFxeAwACAwNdA8AA/NoCYAPAALVaYAPAALVhXQPAAPzaAmADwAC1Wl0DwAC1swFfAwAAYAPAAP5sAABcXQPAALUOAV8DAABhAwFgA8AA/etcYQMBYAPAAP5sXF4DAAEFAWADwAC06ATAAGzeYAPAAPo/wABs32ADwAD6P8AAbOBgA8AA+j+AgWADwAD6PwFXA8AAtMcAXQPAALjeAWADwAD6P2EDAWADwAD961xhAwFgA8AA/etcXQPAAPypAWADwAD8BV0DwAD8qQFgA8AAtSpdA8AA/KkBYAPAAPwFXQPAAPypAWADwAD8BV0DwAD8qQFgA8AA/AVdA8AA/KkBYAPAAPwFXQPAAPypAWADwAD8BV0DwAD8qQFgA8AA/AVdA8AA/KkBYAPAAPwFXQPAAPypAWADwAC1KmADwAD8BV0DwAD82gJgA8AA/etdA8AA/KkBYAPAALUqXQPAAPypAWADwAC1Kl0DwAD8qQFgA8AAtSpdA8AA/NoCYAPAAP3rYAPAALU0XQPAAPzaAmADwAC1Wl0DwAC1swFfAwAAXQPAALCCAVtdA8AAsIIBW2ADwAC2jmADwAC112ADwADHG2ADwAC112ADwADjKGADwAC14GADwADHG2ADwAC112ADwADjKGADwADHG2ADwADjKGADwADHG2ADwAC112ADwADHG2ADwADHG2ADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwADjVmADwAC3Y10DwAD9uQFgA8AAtcxgA8AA41ZgA8AAt2NgA8AAt2NgA8AAt2NdA8AA/KkBXwMAAGADwAC3Y2ADwAC3Y10DwAD9uQFgA8AA/etdA8AA/bkBYAPAAP3rYAPAAOMoYAPAAOMoYAPAAOMoXQPAAP25AV0DwAD8qQFgA8AA/AVgA8AA4yhdA8AA/bkBXQPAAPypAWADwAD8BV0DwAD8qQFgA8AA/AVdA8AA/bkBYAPAAP3rXQPAAP25AWADwAD962ADwAC3Y10DwAD9uQFdA8AA/KkBYAPAAPwFYAPAALdjXQPAAP25AV0DwAD8qQFgA8AA/AVgA8AAt2NgA8AAt2NgA8AAt2NgA8AAt2NdA8AA/KkBXwMAAF0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AAtzIBXwMAAF0DwAD8qQFfAwAAXQPAALcyAV8DAABdA8AAtzIBXwMAAF0DwAC3MgFfAwAAXQPAALcyAV8DAABdA8AA/KkBXwMAAF0DwAD8qQFbXQPAAPypAVtdA8AAtzIBXwMAAF0DwAC3MgFfAwAAXQPAAPypAV8DAABdA8AA/KkBXwMAAF0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AA/KkBXwMAAF0DwAD8qQFfAwAAXQPAAPypAV8DAABdA8AAtzIBXwMAAF0DwAD8qQFfAwAAXQPAALcyAV8DAABdA8AAtzIBXwMAAF0DwAD8qQFfAwAAXQPAALcyAV8DAABdA8AA/KkBXwMAAF0DwAD8qQFfAwAAAACSTQAAApgAAAAAAAAJtgAAAAEAAA7KAAAADgAADy4AAAAbAAATaQAAACUAABUGAAAAMgAAFY4AAAA8AAAWYwAAAEYAABdHAAAAWQAAF3QAAABmAAAXkQAAAHAAABmMAAAAfQAAHbsAAACKAAAeUAAAAJQAAB/VAAAAngAAICYAAACjAAAgVwAAAK0AACErAAAAtwAAIZ0AAADBAAAllwAAAMsAACwfAAAA1QAALmUAAADiAAAuwgAAAO8AADG7AAAA/AAAMxwAAAEJAAA0aAAAARYAADY/AAABIwAANnYAAAEwAAA3OQAAAT0AADfTAAABSgAAOFkAAAFXAAA5EgAAAWQAADlJAAABcQAAOb0AAAF+AAA6wwAAAYsAAETHAAABoQAASh0AAAHHAABM2AAAAdoAAE+BAAAB5wAAUmEAAAH6AABTFAAAAg0AAFQeAAACHQAAVCMAAAIqAABVlAAAAjAAAFW2AAACPQAAW7kAAAJKAABf/AAAAlAAAJ3WAAACXQAAqAgAAAJqAACoqAAAAnwAAK2GAAACjgAArsYAAAKUAACvbgAAAqYAALENAAACuAAAsTMAAALFAAC7IgAAAtIAALyDAAAC0wAAvXYAAALUAADEoQAAAtUAAMegAAAC4gAA01sAAALvAADTuQAAAwEAANwbAAADEwAA3LQAAAMgAADllAAAAy0AAOsYAAADOgAA7RIAAANHAADuLgAAA00AAPAXAAADWAAA8RsAAANhAAD7kwAAA2oAAPvZAAADdQAA/B8AAAOAAAD8lgAAA4sAAPzqAAADlgAA/lsAAAOhAAEAvwAAA6wAAQDiAAADtwABAQUAAAPCAAEBKAAAA80AAQFLAAAD2AABAW4AAAPjAAEBkQAAA+4AAQG0AAAD+QABAesAAAQEAAEEXQAABA8AASJtAAAEHAABIqIAAAQnAAEjGgAABDIAASN0AAAEPQABI84AAARIAAEkKAAABFMAASSCAAAEXgABJ+wAAARpAAEoXwAABHQAATQPAAAEfwABNusAAASKAAFB5QAABJUAAVLfAAAEoAABU5oAAASrAAFdSgAABLYAAV2LAAAEwQABXcwAAATMAAFeDQAABNcAAV6/AAAE4gABbDkAAATtAAHL7wAABPgAAdjEAAAE/AAB23MAAAUDAAHerAAABQoAAeU2AAAFEQAB6xMAAAUYAAHyOQAABR8AAfkdAAAFJgAB//IAAAUtAAIFyAAABTQAAgo7AAAFOwACDrcAAAVCAAIS5gAABUkAAiXIAAAFUAACLQ8AAAVXAAIzKwAABV4AAjlwAAAFZQACPl0AAAVsAAJB5AAABXMAAkXKAAAFegACSu4AAAWBAAJQbAAABYgAAlNEAAAFjwACVo8AAAWWAAJaHAAABZ0AAl7jAAAFpAACYXEAAAWrAAJj/AAABboAAmkzAAAFwQACbbgAAAXIAAJvaQAABc8AAnEaAAAF1gACcssAAAXdAAJ0bwAABeQAAnYkAAAF6wACeE8AAAXyAAJ6rgAABfkAAnyTAAAGAAACfvcAAAYHAAKCzQAABg4AAoZ3AAAGFQACioUAAAYcAAKSBwAABiMAApXaAAAGKgACnQEAAAYxAAKhogAABjgAAqWaAAAGPwACp8cAAAZGAAKqywAABk0AAq0LAAAGVAACri4AAAZfAAKvPgAABmYAArA3AAAGcQACsVoAAAZ8AAKyagAABoMAArOiAAAGjgACtpwAAAaVAAK6ZwAABpwAAr0ZAAAGowACv5kAAAaqAALD1QAABrEAAsi1AAAGuAACzjwAAAa/AALTPAAABsYAAtrNAAAGzQAC3bkAAAbUAALifAAABtsAAuX9AAAG4gAC74YAAAbpAAL2SgAABvAAAwNXAAAG9wADBEoAAAcCAAMIzgAABwkAAxfOAAAHEAADGewAAAcXAAMcDQAABx4AAx4uAAAHJQADIu4AAAcsAAMrFgAABzMAAzHqAAAHOgADNHwAAAdAAAM6xgAAB1EAA0HUAAAHWAADRKIAAAdeAANMMgAAB2UAA4PAAAAHcAADl0MAAAd/AAOl8gAAB5IAA7UxAAAHmAADuzAAAAelAAO8/wAAB7AAA77bAAAHuwAD5F0AAAfGAAPpWAAAB9sAA+oVAAAH5QAD6j8AAAfvAAPrggAACAAABALiAAAIEQAEBbsAAAgcAAQxDAAACCQABDIzAAAIOgAEOY8AAAhQAAQ5vAAACGcABEmUAAAIfgAESr4AAAiIAARL4AAACJIABEw5AAAIowAETpkAAAi0AAROwgAACL0ABE9nAAAIzAAEVuUAAAjVAARXAQAACOIABFfbAAAI7wAEWdcAAAj8AARbxQAACQ4ABGjYAAAJIAAEaS8AAAkmAARpegAACSwABG28AAAJMgAEbhMAAAk/AARvhAAACUwABHFPAAAJUgAEc6wAAAlYAAaTLwAACV4ABpQ5AAAJcgAGlZ0AAAmGAAaYSAAACZoABpipAAAJpQAGmNcAAAm4AAajaQAACckABqtlAAAJzwAGrtIAAAnaAAayFAAACeUABrMoAAAJ8AAG3S4AAAn7AAb+0wAACgwABwDWAAAKFwAHASYAAAoiAAcCPAAACi0ABwI/AAAKNgAHBikAAAo/AAcRtgAACkwABxHIAAAKVQAHEeQAAApeAAcTkQAACmcABxOjAAAKdAAHE6sAAAqBAAcTzQAACo4ABxjwAAAKmwAHGbIAAAqkAAcbjwAACq0ABx7aAAAKtQAHHwwAAAq+AAcfFgAACscABx/1AAAK0AAHIFEAAArbAAcgWwAACuQAByELAAAK7QAHIR0AAAr2AAchNAAACv8AByISAAALCAAHIhwAAAsRAAcjdgAACxoAByOnAAALLwAHI8sAAAtEAAckDAAAC1kAByTcAAALbgAHJX8AAAuDAAclowAAC5IABydPAAALoQAHJ30AAAuwAAcyHQAAC78ABzTDAAALygAHORUAAAvQAAc6FQAAC9sAB0WxAAAL5gAHUAoAAAv5AAdQJQAADAYAB1TQAAAMEwAHVgcAAAwiAAdXZgAADDEAB1gWAAAMQAAHWJUAAAxPAAdauQAADF4AB1/LAAAMZAAHYOUAAAxqAAdjfAAADHAAB2OoAAAMfQAHbQIAAAyKAAd0CAAADJcAB3QoAAAMnwAHdEUAAAynAAd0bwAADK8AB3rNAAAMtwAHewAAAAzGAAd+ygAADNUAB4AaAAAM4QAHhJMAAAztAAeEpQAADPYAB4bsAAAM/wAHhy8AAA0IAAeIlwAADREAB47tAAANGgAHjw0AAA0iAAeT8AAADSoAB5QzAAANNQAHlOUAAA1AAAeaFgAADUkAB5tuAAANVgAHnGYAAA1jAAed5gAADXAAB58kAAANeAAHoMIAAA2AAAelggAADYsAB6WUAAANlAAHp9sAAA2dAAeoHgAADaYAB7RPAAANrwAHtVsAAA28AAe1uwAADckAB7XkAAANzwAHtsgAAA3cAAfCgQAADekAB8L0AAAN9gAHw9YAAA4DAAfUfAAADgsAB9TxAAAOFgAH2oUAAA4hAAfbvAAADicAB95GAAAOMgAH3nAAAA4/AAfenwAADkwAB+yEAAAOVwAH8i4AAA5kAAfzFwAADmoAB/d7AAAOcAAH958AAA57AAf8QAAADoYAB/52AAAOkwAH/v4AAA6gAAgA9wAADq0ACATcAAAOugAIDsMAAA7LAAgSNgAADtgACBc4AAAO5QAIjaUAAA7yAAiOhAAADwMACJDLAAAPEAAIkvIAAA8hAAiX1wAADzIACJiXAAAPPQAImvoAAA9OAAiehQAAD18ACKCMAAAPcgAIo3wAAA+FAAik1wAAD4sACKVwAAAPkQAIpncAAA+lAAim4wAAD6sACKgaAAAPsQAIqIYAAA+3AAio8gAAD70ACKleAAAPwwAIqxcAAA/JAAir2gAAD88ACKwXAAAP1QAIrOEAAA/pAAitbwAAD+8ACK31AAAQAwAIrsEAABAXAAizyQAAECsACLVZAAAQOAAItbcAABBFAAi2rAAAEFIACLcKAAAQXwAIt3kAABBsAAi5qQAAEHkACLoHAAAQhgAIunUAABCTAAi7HwAAEKAACMeVAAAQrQAIx7oAABCzAAjH3wAAELkACMgEAAAQvwAIyCkAABDFAAjITgAAEMsACMh0AAAQ0QAIyJoAABDXAAjJPwAAEN0ACMuUAAAQ6gAIzbMAABDwAAjOTwAAEP0ACM9oAAARCgAI0i8AABEbAAjTRQAAESYACNRJAAARMQAI1U4AABE8AAjWQgAAEUcACNdOAAARVgAI2m0AABFhAAjcsgAAEW4ACN33AAAReQAI3g8AABGGAAjfMgAAEZEACN9DAAARmAAI4AAAABGjAAjhEwAAEaoACOFLAAARtwAI4t4AABHCAAjkPgAAEc0ACPNWAAAR2gAI9XsAABHnAAj3ugAAEfgACPlHAAASBQAI/KAAABIWAAj8zQAAEhwACP5vAAASKQAI/p8AABIvAAkAAwAAEjwACQCoAAASSQAJANoAABJPAAkKQAAAEmAACQuhAAASbQAJDgEAABJ6AAkPrgAAEoUACQ/SAAASjgAJFHgAABKbAAkV1AAAEqUACRjmAAASsAAJGqkAABK7AAkbyQAAEsYACR8tAAAS0QAJH10AABLcAAkiTwAAEucACSYiAAAS9AAJJkYAABL9AAkt/wAAEwoACS4jAAATEwAJLzMAABMgAAkzkQAAEyoACTO1AAATMwAJNZcAABNAAAk6TgAAE0oACTpyAAATUwAJPFkAABNgAAlBdAAAE2oACUGYAAATcwAJRLkAABOAAAlQPgAAE4sACVB7AAATlgAJUmEAABOhAAlSxAAAE6wACVVXAAATtwAJalsAABPCAAlrQgAAE9EACXr1AAAT3AAJfHwAABPnAAl/OQAAE/IACYZPAAAT/QAJhnwAABQIAAmMHQAAFBMACYylAAAUHgAJjnAAABQpAAmOqQAAFDYACZCNAAAUQQAJlZEAABRMAAmWvAAAFFcACZfnAAAUYgAJoVUAABRtAAmiaAAAFHgACaLPAAAUgwAJprcAABSOAAmoPgAAFJkACakkAAAUpAAJsiYAABSvAAmylwAAFMIACbRYAAAUzQAJtmcAABTYAAnJogAAFOQACcuDAAAU9QAJzTgAABUGAAnOygAAFQoACc7dAAAVEwAJzxgAABUgAAnQHgAAFS0ACdA2AAAVNgAJ0QoAABVHAAnRIgAAFVAACdNCAAAVYQAJ04wAABVqAAnT1gAAFXMACdQgAAAVfAAJ1GoAABWFAAnUtAAAFY4ACdT+AAAVlwAJ1UgAABWgAAnVqwAAFakACdewAAAVtgAJ6fEAABXDAAoZlQAAFckACh5dAAAV0QAKHtAAABXZAAofKQAAFeEACiAIAAAV6QAKIEYAABXxAAroQgAAFfkACuibAAAWBgAK6PQAABYTAArpTQAAFiAACummAAAWLQAK6f8AABY6AArqWAAAFkcACuqxAAAWVAAK/c8AABZhAAsEYwAAFnAACyIcAAAWewALIosAABaIAAsi+gAAFpUACyNpAAAWogALI9gAABavAAskRwAAFrwACyS2AAAWyQALJSUAABbWAAsllAAAFuMACyYDAAAW8AALJnIAABb9AAsm4QAAFwoACydQAAAXFwALJ78AABckAAsoLgAAFzEACyidAAAXPgALKQwAABdLAAspewAAF1gACynqAAAXZQALKlkAABdyAAsqyAAAF38ACys3AAAXjAALK6YAABeZAAssFQAAF6YACyyEAAAXswALLPMAABfAAAstYgAAF80ACy3RAAAX2gALLkAAABfnAAsurwAAF/QACy8bAAAYAQALL5QAABgOAAswAwAAGBsACzByAAAYKAALMOEAABg1AAsxUAAAGEIACzG/AAAYTwALMi4AABhcAAsynQAAGGkACzMMAAAYdgALM3sAABiDAAsz6gAAGJAACzRZAAAYnQALNMgAABiqAAs1NwAAGLcACzWmAAAYxAALNhUAABjRAAs2hAAAGN4ACziKAAAY6wALOPkAABj4AAs5aAAAGQUACznXAAAZEgALOkYAABkfAAs6tQAAGSwACzskAAAZOQALO5MAABlGAAs8AgAAGVMACzxxAAAZYAALPOAAABltAAs9TwAAGXoACz2+AAAZhwALPi0AABmUAAs+nAAAGaEACz8LAAAZrgALP3oAABm7AAs/6QAAGcgAC0BYAAAZ1QALQMcAABniAAtCbwAAGe8AC0LeAAAZ/AALQ00AABoJAAtDvAAAGhYAC0QrAAAaIwALRJoAABowAAtFCQAAGj0AC0V4AAAaSgALRecAABpXAAtGVgAAGmQAC0bFAAAacQALRzQAABp+AAtHowAAGosAC0gSAAAamAALSIEAABqlAAtI8AAAGrIAC0lfAAAavwALSc4AABrMAAtKPQAAGtkAC0qsAAAa5gALUPMAABrzAAtUVQAAGwQAC2LuAAAbFQALYzQAABskAAtu5wAAGzMAC35TAAAbQgALgGgAABtRAAuCdgAAG2AAC4tNAAAbbwALi54AABt+AAuL7wAAG40AC5OMAAAbmAALlBoAABunAAucXQAAG7YAC5yjAAAbxQALoCgAABvUAAuvlQAAG+MAC7fOAAAb8AALx0AAABv/AAvH+gAAHAoAC8ieAAAcFQALyW8AABwgAAvMwAAAHCsAC9LcAAAcLwAL1IEAABw+AAvaegAAHEkAC92yAAAcVAAL3lkAABxuAAveiAAAHIQAC96pAAAcjwAL4DYAAByaAAvmHgAAHKUAC+cCAAAcqQAL55MAABy0AAvn7gAAHLgAC+g7AAAcwAAL+zoAABzIAAwEMwAAHNoADAXfAAAc5QAMBkkAABzwAAwGbAAAHPsADAaXAAAdBgAMBsIAAB0RAAwG7gAAHRwADAddAAAdJwAMDTkAAB0yAAwOcQAAHT0ADA7vAAAdSAAMD3EAAB1TAAwTUQAAHV4ADBYfAAAdaQAMFnwAAB14AAwYPQAAHYMADBj2AAAdjgAMGjUAAB2ZAAwaWAAAHaQADBrZAAAdrwAMGxQAAB26AAwgLwAAHcUADCBWAAAdzQAMJCMAAB3VAAwk1AAAHeAADCVnAAAd6wAMJuMAAB32AAwoGwAAHgEADCsXAAAeDAAMK/sAAB4XAAw2PQAAHiIADDanAAAeLwAMO6MAAB48AAw71QAAHkkADD8HAAAeVgAMP8YAAB5jAAxAyQAAHnAADEVJAAAedgAMRbAAAB6MAAxF0QAAHpcADEecAAAesQAMetgAAB68AAyFpAAAHs8ADIe5AAAe3gAMlmYAAB7tAAyWmQAAHvMADJe7AAAe+QAMqHEAAB7/AAyw4wAAHwoADPO2AAAfGgANNKIAAB8rAA00vgAAHzYADTV3AAAfTgANNZMAAB9ZAA02QwAAH2QADTaJAAAfcQANNs8AAB9+AA03FQAAH4sADTfVAAAfmAANOMAAAB+lAA049AAAH7IADTlIAAAfvwANOWEAAB/MAA05uQAAH9kADTnsAAAf5gANOgUAAB/zAA06jAAAIAAADTsxAAAgDQANO0oAACAaAA073gAAICcADTwuAAAgNAANPH0AACBBAA08lgAAIE4ADT0dAAAgWwANPWsAACBoAA09uAAAIHUADT3RAAAgggANPjMAACCPAA0+rwAAIJwADT8DAAAgqQANPzkAACC2AA0/rgAAIMMADT/4AAAg0AANQEIAACDdAA1AjAAAIOoADUDWAAAg9wANQSAAACEEAA1BLwAAIREADUG7AAAhFwANQi0AACEkAA1CRgAAITEADUKuAAAhPgANQvQAACFLAA1DJgAAIVgADUN7AAAhZQANQ7EAACFyAA1D9wAAIX8ADUQpAAAhjAANRH4AACGZAA1EtAAAIaYADUT6AAAhswANRSwAACHAAA1FXwAAIc0ADUW0AAAh2gANRegAACHnAA1GJAAAIfQADUa8AAAiAQANRxwAACIOAA1HNQAAIhsADUfEAAAiKAANSBgAACI1AA1ITgAAIkIADUsuAAAiTwANVYkAACJaAA1VpgAAImgADVXbAAAidgANVhkAACKEAA1WOwAAIpIADVZlAAAioAANWAMAACKuAA1ZxgAAIsQADVsfAAAi2gANW4wAACLwAA1b/QAAIwYADVxzAAAjHAANX0EAACMyAA1f3AAAI0AADWahAAAjSQANa/wAACNaAA1vNAAAI2sADXHaAAAjeAANgV8AACODAA2B2gAAI5AADYJ4AAAjmwANkGsAACOsAA2QfQAAI7cADZCiAAAjwgANkR4AACPNAA2RZwAAI9gADZGTAAAj5QANkb8AACPyAA2R6gAAI/8ADZINAAAkCgANl5kAACQVAA2ZagAAJCAADZnwAAAkKwANmlAAACQ2AA2cvgAAJEEADZ0IAAAkTAANoMkAACRXAA2iFAAAJGIADaOBAAAkbQANo7kAACR4AA2lywAAJI4ADan3AAAkmQANsh8AACSkAA2ySQAAJK8ADbheAAAkvAANvqwAACTJAA2+zwAAJNgADb9FAAAk5wANwGQAACTyAA3AhgAAJP0ADcCqAAAlCAANyCoAACUTAA3TjgAAJR4ADdpWAAAlMQAN5xUAACU+AA3oLQAAJUsADejeAAAlVgAN9QAAACVhAA31TQAAJW4ADfZOAAAlewAOBFAAACWEAA5nNAAAJZEADmetAAAlngAOaDoAACWrAA5uzwAAJbgADnBiAAAlwgAOcUoAACXGAA5zqQAAJcoADnSwAAAl2QAOdfUAACXoAA52ZwAAJfcADnd6AAAmAAAOd+wAACYPAA55DgAAJhgADnnBAAAmJwAOfSgAACYwAA5+aAAAJkUADoFtAAAmVgAOgkwAACZjAA6CrgAAJnAADoPEAAAmdAAOhhcAACZ4AA6IGwAAJnwADohFAAAmiwAOiL4AACaYAA6MYwAAJpwADoyNAAAmoAAOja0AACakAA6NzQAAJrEADo+UAAAmvgAOkd0AACbLAA6UVQAAJs8ADpT5AAAm0wAOlo0AACbXAA6XhwAAJtsADpesAAAm3wAOmaUAACbjAA6cGQAAJvIADpzuAAAnAQAOnSgAACcFAA6dXAAAJwkADp9iAAAnDQAOn5wAACcRAA6gFAAAJxUADqBwAAAnGQAOo58AACcdAA6l0QAAJyEADqbdAAAnLgAOqDwAACc7AA6o/gAAJ0EADr0VAAAnRwAOwLcAACdNAA72jgAAJ1MADveGAAAnXgAPC7IAACdpAA8jaAAAJ3YADyOUAAAngQAPMhoAACeMAA886QAAJ5cADz5qAAAnpAAPRU0AACexAA9IYQAAJ7wAD0y6AAAnxwAPTQ0AACfUAA+QhgAAJ+EAD5IiAAAn7AAPkm4AACf3AA+TRQAAKAIAD5aVAAAoDQAPltgAACgYAA+scQAAKCMAD683AAAoLgAPsw0AAChAAA+zNwAAKEQAD7NjAAAoSAAPs3sAAChMAA+2hwAAKFAAD8WTAAAoWwAPyokAAChmAA/NdQAAKHEAD82oAAAoeQAP0RMAACiBAA/RZwAAKIwAEAUqAAAolwAQDU0AACikABAQ4AAAKK8AEBHzAAAougAQEq4AACjFABAtNAAAKNAAEEOvAAAo2wAQkQkAACjmABCTRAAAKOoAEJO5AAAo9QAQmAkAACkAABCc/AAAKQ0AELdcAAApGAAQzBAAACkjABDc3AAAKTYAEO75AAApQQAQ/6QAAClMABEAFAAAKVcAEQCEAAApYgARDaMAACltABEN1QAAKXgAEQ5YAAApgwAREgMAACmJABEUkgAAKZwAESj7AAAppwARKRsAACm0ABEshwAAKccAES2JAAAp0gARLmsAACnlABEvJgAAKfAAETGCAAAp+wARNL4AACoOABE44AAAKhkAET6wAAAqJAARPtIAACovABE/UAAAKjoAET9xAAAqRQARQAgAACpQABFANAAAKlsAEUCKAAAqZgARQL8AACpxABFBHwAAKnwAEUFUAAAqhwARQhMAACqSABFCrgAAKp0AEUO5AAAqqAARRFUAACqzABFGTgAAKsAAEUanAAAqywARRyIAACrYABFImgAAKukAEUjAAAAq9gARTHsAACsJABFNeAAAKxYAEU9UAAArIwART5QAACs7ABFSgAAAK0YAEVLxAAArVwARU0UAACtiABFTawAAK20AEVOlAAArfgARVA4AACuPABFU1QAAK5wAEVURAAArrQARVhwAACu+ABFWQgAAK8IAEVbmAAArzwARV3YAACvaABFYvgAAK+UAEWRSAAAr8AARZJIAACwIABFu7wAALBMAEXdQAAAsHgARe+oAACwrABF8FAAALDgAEXxHAAAsSwARfIgAACxgABF8/gAALG0AEX1BAAAsggARfW8AACyPABF+qAAALKIAEX7VAAAstwARfvgAACzEABGAbgAALNcAEYCUAAAs2wARgVwAACzoABGDVgAALQIAEYPeAAAtDwARhDcAAC0cABGFBAAALSkAEYU7AAAtNgARhbUAAC1DABGGxQAALVAAEY0MAAAtXQARkdwAAC1jABGWbgAALXAAEZjQAAAtdwARnjAAAC1+ABGf8gAALYwAEaCtAAAtkwARoW0AAC2kABGiKAAALbIAEa/OAAAtwwARsbkAAC3cABG/RwAALecAEb9KAAAt9AARxtwAAC4OABHIvgAALhkAEctUAAAuIQAR4WsAAC4pABHlIAAALjoAEgpAAAAuPgASCnIAAC5KABINswAALlYAEhZZAAAuXwASF8EAAC5sABIqAgAALnkAEi0WAAAuigASLTQAAC6XABItUgAALqIAEjDUAAAuswASMPsAAC69ABI2aAAALscAEjabAAAu1AASNusAAC7hABI6fwAALu4AEjqfAAAu9wASOuIAAC8CABI7jQAALw0AEj3bAAAvFgASPicAAC8fABI+RwAALygAEj6SAAAvMwASQIsAAC8+ABJB4QAAL08AEkJ3AAAvYAASSMcAAC9xABJJGAAAL4IAEkmgAAAvkwASUP8AAC+kABJwcQAAL7UAEnVxAAAvuwASeX0AAC/GABJ+TQAAL9EAEn6mAAAv1wASgKIAAC/dABKlVQAAL+gAEqV2AAAv9wASpawAADACABKmOwAAMA8AEqaLAAAwGgASvf0AADArABLJ5AAAMDoAEs3OAAAwSQAS1SQAADBYABLfNQAAMGcAEwChAAAwdgATAcwAADCJABMIoQAAMJwAEwmIAAAwrwATDMkAADDCABMOQAAAMNUAEw5oAAAw8AATE7oAADEDABMU+QAAMRYAExZ8AAAxKQATFuUAADE8ABMt4AAAMU8AEy6TAAAxXAATN8MAADFnABM6ugAAMXIAEzr4AAAxfwATO80AADGMABM8JAAAMZkAEzygAAAxpgATPPcAADGsABNLoAAAMbIAE1S/AAAxvwATWmcAADHMABNb1QAAMdkAE1wvAAAx5AATbHUAADHxABN0igAAMgQAE3Y/AAAyDwATeScAADIcABN6fgAAMikAE3qqAAAyNgATgIAAADJDABOA1gAAMlAAE4IVAAAyXQATgkEAADJqABOCsQAAMncAE4LdAAAyhAATg80AADKRABOEkwAAMp4AE4j/AAAyqwATiZQAADK+ABOKQAAAMtEAE4vwAAAy3AATjFIAADLvABOPkgAAMwIAE4+0AAAzDwATj9YAADMcABOYAgAAMykAE6O9AAAzNgATpxQAADNGABOwEQAAM1kAE7RoAAAzaQATthEAADN2ABO2yQAAM4UAE7cGAAAzlAATuM4AADOjABO5fwAAM7IAE7ukAAAzwQATvPIAADPOABO+cAAAM9sAE8bjAAAz6AAT1eUAADP1ABPdWgAANAIAE96EAAA0DwAT5mMAADQcABP9WQAANCcAE/+XAAA0OAAUAegAADRFABQCCQAANFIAFAs/AAA0XwAUC3oAADRwABQMuAAANIwAFAzzAAA0nQAUDdMAADS5ABQODgAANMoAFA7wAAA05gAUDysAADT3ABQ1VwAANRMAFDb0AAA1IgAUN1IAADUtABRMHAAANTwAFE0NAAA1SQAUXtgAADVcABRfHAAANWIAFGDEAAA1fAAUYQgAADWCABRi8wAANZwAFGMpAAA1qQAUZccAADW2ABRmAwAANbwAFGY/AAA1wgAUZnsAADXIABRmqAAANc4AFHSZAAA11AAUdLYAADXhABR34gAANewAFHgiAAA1+QAUeKwAADYGABR72QAANhEAFHylAAA2HgAUix0AADYrABSL6QAANjYAFI9KAAA2QwAUj5cAADZOABSRFgAANlkAFJqvAAA2ZAAUmvsAADZ+ABScdQAANosAFJ/+AAA2lgAUoEoAADawABSh1AAANr0AFKQ0AAA2yAAUpeEAADbTABSmDwAANt4AFKa2AAA26QAUpuIAADb0ABSnMwAANv8AFKhDAAA3CgAUsdEAADcVABS09wAANyAAFLthAAA3KwAUvxAAADc4ABTAZwAAN0MAFNZQAAA3TgAU8tQAADdZABTzggAAN2QAFPcLAAA3bwAU910AADd6ABT5NgAAN4UAFP0xAAA3lAAU/b4AADelABT/iQAAN7YAFQBPAAA3vQAVAJ4AADfEABUSjAAAN88AFRZyAAA32gAVIhoAADflABUjbgAAN/AAFSS0AAA3+wAVUrYAADgGABVS9QAAOBMAFVSAAAA4IAAVVOcAADgrABVsrgAAODYAFW2CAAA4RwAVduwAADhYABV4owAAOGkAFXlXAAA4dAAVel0AADh/ABV7UwAAOI4AFXvyAAA4kgAViRoAADiWABWKKwAAOKUAFYtjAAA4tAAVjcUAADjDABWOOwAAONIAFY6CAAA44QAVmrQAADjsABWefwAAOPcAFZ94AAA5BAAVoqUAADkRABWiyQAAOR4AFaP0AAA5KQAVpEkAADk0ABWmfQAAOT8AFadAAAA5SgAVp2QAADlXABWo6AAAOWIAFap3AAA5bQAVqswAADl4ABWtMAAAOYMAFa5vAAA5kAAVsCQAADmdABWwrgAAOaoAFbEPAAA5tQAVsmoAADnAABWyxwAAOcsAFcvLAAA51gAVzWIAADnhABXPBgAAOewAFc9uAAA59wAV0h0AADoCABXS4AAAOhEAFdnxAAA6IAAV/F8AADokABYEjAAAOisAFgojAAA6NgAWDjkAADpBABYOdgAAOk4AFg6zAAA6WwAWDvAAADpoABYPLQAAOnUAFg9sAAA6ggAWD5sAADqPABYPvgAAOpwAFhlxAAA6qQAWGawAADq2ABYzVAAAOsMAFkqfAAA60AAWmGUAADrdABbLMAAAOu4AFt7gAAA6/QAW3xUAADsIABbloAAAOxMAFuXjAAA7HgAW5okAADspABbnBwAAOzQAFudVAAA7PwAW588AADtKABbpVgAAO1UAFum4AAA7ZAAW6dEAADtvABbxnQAAO3oAFvI9AAA7hQAW8nQAADuQABb3wQAAO5sAFvhUAAA7pgAW+Q4AADuxABcAKQAAO7wAFwBMAAA7xwAXAG8AADvSABcN0AAAO90AFw4qAAA76AAXEVcAADvzABcRkAAAO/4AFxPJAAA8CQAXFCwAADwUABcsDQAAPB8AFzJaAAA8IwAXOWwAADwuABc5oQAAPDkAF3rTAAA8RAAXe2AAADxRABd+7QAAPFcAF3/+AAA8YgAXmXcAADxtABe1rAAAPHoAF7vhAAA8hwAXvL4AADyQABe9QwAAPJkAF72oAAA8ogAXvgMAADyrABe+FwAAPLQAF8AZAAA8vQAX2qUAADzGABfawQAAPNEAF+uoAAA83AAYK/oAADzrABgsHwAAPPYAGDFbAAA9AQAYMYwAAD0SABgzNQAAPR0AGDrBAAA9KAAYPAEAAD0zABg8UAAAPT4AGD2GAAA9SQAYXZYAAD1YABheAwAAPWMAGF6dAAA9bgAYXvcAAD15ABhfXAAAPYQAGGJ8AAA9jwAYYsYAAD2dABh3SAAAPasAGIL8AAA9tgAYjnEAAD3FABiPrQAAPdQAGJL8AAA94wAYlCYAAD3uABiY+gAAPgAAGJolAAA+CwAYph8AAD4WABinnAAAPicAGKtJAAA+OAAYsPkAAD5JABi2gAAAPloAGO6BAAA+awAY77oAAD5yABmAIAAAPnkAGjuUAAA+hgAaO9cAAD6RABpy3gAAPpwAGnMCAAA+qQAaczkAAD68ABp0EAAAPtAAGnS5AAA+3QAadUYAAD7tABp1xwAAPv0AGnXwAAA/DQAadnYAAD8dABqE6wAAPy0AGogPAAA/OgAaiIwAAD9HABqJ5QAAP1QAGoqGAAA/YQAajOIAAD9uABqORwAAP3sAGo6BAAA/jgAajtcAAD+hABqP3QAAP64AGpAoAAA/wQAakLoAAD/UABqRzgAAP+EAGpJIAAA/7gAakooAAD/7ABqTQgAAQAgAGpObAABAFQAalCoAAEAiABqVgwAAQC8AGpXCAABAPAAald0AAEBJABqX3QAAQFYAGpgAAABAYwAamToAAEBwABqZXQAAQH0AGpodAABAigAamkAAAECXABqa9gAAQKQAGpsZAABAsQAanAMAAEC+ABqcIgAAQMsAGpx+AABA2AAanMYAAEDlABqdmwAAQPIAGp3/AABA/wAanqMAAEEMABqiHQAAQRkAGqI+AABBJgAaopsAAEEzABqjiAAAQUAAGqOpAABBTQAapAYAAEFaABql8gAAQWcAGqYrAABBewAap14AAEGIABqntQAAQZwAGqjmAABBqQAaqT0AAEG9ABqqrgAAQcoAGqsFAABB3gAaq6cAAEHrABqsAQAAQf8AGqzoAABCEwAarV4AAEInABquFAAAQjsAGq/wAABCTwAasDYAAEJjABqxZgAAQnAAGrGsAABChAAasxwAAEKRABqzYgAAQqUAGrT0AABCsgAatRUAAEK/ABq1cgAAQswAGranAABC2QAat5EAAELkABq3sgAAQvEAGrgpAABC/gAaucgAAEMLABq6UQAAQxgAGrsmAABDJQAavM0AAEM5ABq9OwAAQz8AGr2VAABDUwAav9EAAENgABrSewAAQ20AGtgwAABDegAa2kcAAEOAABrbAgAAQ4YAGt5RAABDmQAa3ucAAEOmABrfbwAAQ7MAGuAYAABDwAAa4McAAEPNABrkEQAAQ9oAGvMJAABD4AAa82kAAEPtABr0QAAAQ/oAGvSjAABEBwAbCqoAAEQUABsK6QAARCMAGwykAABEMgAbDSkAAEQ/ABsNQwAARHYAGw5rAABEhQAbDoUAAES8ABsrrAAARMsAGy0WAABE4wAbLjAAAETwABsvugAARQIAGzArAABFDQAbMQAAAEUYABsyHwAARSUAGzNWAABFMgAbNI0AAEU9ABs2kgAARUoAGzauAABFXAAbNsoAAEVuABs3DAAARYAAGzcoAABFkgAbN0QAAEWkABs3YAAARbYAGzd8AABFyAAbPsMAAEXaABs/SAAAReUAG2cTAABF8AAb2mAAAEX2ABvgeAAARgEAHAmoAABGDAAdAWYAAEYXAB0C9wAARh0AHQM+AABGIwAdBlsAAEYpAB0OpgAARjQAHRFVAABGOAAdFs0AAEZDAB0atgAARlQAHR0lAABGYwAdH1IAAEZyAB0fggAARoEAHS2VAABGkAAdL78AAEabAB0waAAARqwAHTE4AABGxAAdNPsAAEbPAB03lAAARtMAHTh3AABG4gAdOVoAAEbxAB06QwAARwAAHTz4AABHEQAdPw4AAEcgAB0/7AAARzgAHUCgAABHRQAdQlEAAEddAB1DBQAAR2oAHUSaAABHggAdRTMAAEePAB1FOAAAR5wAHUnbAABHtAAdSswAAEfFAB1VhgAAR8sAHVgvAABH2gAdWFcAAEflAB1YjQAAR/QAHVy5AABIAwAdXOUAAEgSAB1eEgAASB0AHV4+AABILAAdX20AAEg3AB1fmQAASEgAHWg2AABIUwAdbMsAAEhiAB1tJAAASJIAHW1/AABIwgAdbiwAAEjnAB1ufgAASPYAHXbpAABJAQAdg/UAAEkSAB2IcwAASSMAHYjSAABJPgAdjMgAAElLAB2N+wAASVoAHY81AABJaQAdkIUAAEl6AB2ThwAASYUAHZR9AABJiQAdldwAAEmNAB2WaAAASZEAHaTeAABJlQAdpQQAAEmoAB2mtAAASbUAHaeOAABJxgAdqCMAAEnTAB2o3QAASeAAHalMAABJ7QAdrAwAAEn6AB2tbQAASgsAHa4jAABKGAAdrycAAEopAB2wFQAASjYAHbEyAABKQwAdsk8AAEpQAB2zEQAASl0AHbPtAABKbgAdtzkAAEp7AB233wAASogAHbonAABKlQAduv0AAEqmAB28ZwAASrMAHb1dAABKwAAdvqsAAErRAB2+7AAASt4AHcU8AABK6wAdxaYAAEr8AB3F6QAASw0AHcY1AABLIwAdxrsAAEsuAB3IrQAASz8AHcmXAABLSgAdynYAAEtVAB3KewAAS2IAHcuaAABLegAdzLgAAEuNAB3NkQAAS6AAHc8CAABLswAd1tsAAEu+AB3XEAAAS8QAHdciAABL0QAd3GgAAEvXAB3e2QAAS+QAHeDUAABL8QAd7yYAAEv+AB4RKAAATAkAHhGlAABMFgAeEeoAAEwjAB4SLwAATDAAHhLBAABMPQAeEuUAAExKAB4TWwAATFUAHhqwAABMYgAeG10AAExqAB4cggAATHUAHh+JAABMfwAedV8AAEyKAB51ogAATKIAHomHAABMswAeibsAAEzIAB6ycQAATN0AHuAqAABM6AAe4MwAAEz7AB7hMwAATQ4AHw53AABNIQAfDtsAAE0sAB9PngAATTcAH3XbAABNRAAfdpwAAE1PAB98HgAATVoAH3xZAABNZQAffhsAAE1wAB9+ewAATX0AH36zAABNigAfgCAAAE2XAB+JAwAATaIAH5b3AABNugAfu7oAAE3DACAMNAAATc4AIAx1AABN3wAgDU0AAE3wACAO6wAATgEAIA+HAABOEgAgD8gAAE4jACAQgQAATjQAIBGGAABOPwAgJZoAAE5KACAqFwAATlsAICqHAABObAAgKtIAAE53ACAr8wAATogAIC07AABOmQAgLVcAAE6mACAuFgAATrMAIC4zAABOwAAgLowAAE7NACAu6QAATtgAIC9GAABO4wAgN9sAAE7uACBJtgAATvkAIEoyAABPCgAgUF0AAE8bACCBWwAATyMAIIKxAABPNAAggzwAAE9BACCHRgAAT1IAII6UAABPXwAgjzIAAE9wACCPzgAAT4EAIJDZAABPkgAgkUIAAE+fACCWiwAAT6wAIJbMAABPtwAglusAAE/EACCXEAAAT9EAIJehAABP3AAgqEMAAE/pACCvrgAAT/gAINoyAABQBwAg3LgAAFARACDfigAAUB4AIS3tAABQMQAhLhEAAFA+ACEv7AAAUEsAITGYAABQWAAhMqkAAFBjACEzBwAAUHAAITR5AABQfQAhNbQAAFCKACE12gAAUJcAITcCAABQpAAhOy0AAFCxACE8FAAAULsAIV8gAABQxQAhYbcAAFDSACFi2wAAUN8AIWU1AABQ7AAhZWMAAFD5ACF2cQAAUQYAIXbUAABREwAheFYAAFEgACF4fgAAUS0AIXnfAABROgAhel0AAFFHACGCdgAAUVQAIi/3AABRYQAiMGsAAFFuACJQuAAAUXsAIqFxAABRiAAioyQAAFGVACKjaAAAUaIAIqOMAABRrwAi/VAAAFG8ACL+rgAAUdYAIyHvAABR4wAjIi4AAFHwACMidAAAUfsAIyKYAABSBgAjIxwAAFInACMjSQAAUjIAIyZcAABSUwAjKnwAAFJgACMqnAAAUoEAIyq7AABSlwAjK2MAAFKmACMsZQAAUukAIy1XAABTLAAjL6kAAFNvACMwPAAAU48AIzDZAABTogAjMgYAAFOvACMypQAAU7wAIzMfAABTyQAjM4MAAFPWACMz1wAAU+MAIzQrAABT8AAjNH8AAFP9ACM00wAAVAoAIzUnAABUFwAjNXsAAFQkACM1uwAA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bFwAKYN6AABsbwAphPUAAGx6ACmFGQAAbIUAKYZjAABskAApiC0AAGybACmJJQAAbKoAKYmXAABstQApiegAAGzAACmjjgAAbMsAKaeZAABs3AApqecAAGznACmqQgAAbPIAKat9AABs/QAprYkAAG0IACmt5gAAbRMAKa8sAABtHgApuboAAG0pACm65gAAbTgAKbzhAABtQwApxKYAAG1OACnFOAAAbVkAKcX+AABtZAApyWkAAG1vACnKlgAAbXwAKctBAABtiQAp1BcAAG2WACnXLgAAbaMAKddyAABttgAqEDgAAG3JACoR5AAAbdYAKhJdAABt4wAqFvsAAG3wACoXTwAAbgMAKhzvAABuFgAqHTkAAG4hACoeLAAAbiwAKh5TAABuNwAqIy8AAG5CACok7gAAblEAKiVXAABuXAAqJywAAG5nACo96gAAbnIALRPwAABufQAtFS4AAG6QAC0WMAAAbp8ALRfaAABurgAtGHwAAG7DAC0YrgAAbtgALRk5AABu7QAtGZ8AAG8AAC00cwAAbw8ALTW6AABvHAAtN+kAAG8pAC04UgAAbzYALTjEAABvQwAtOawAAG9QAC06ZwAAb10ALUMvAABvagAtRUEAAG97AC1FugAAb4gALVWJAABvlQAtVdIAAG+gAC1WFAAAb68ALWFKAABvvgAtYa0AAG/PAC1hygAAb9oALWH3AABv5QAtYmAAAG/wAC1jYQAAb/gALWOAAABwAwAtY8MAAHAOAC1kRwAAcCAALWmDAABwKAAtbrMAAHA1AC156AAAcEIALXyLAABwUQAtfQEAAHCIAC19LQAAcJcALYddAABwswAth9UAAHDCAC2IEgAAcNEALYi8AABw2AAti8AAAHDnAC2NyQAAcPYALY5CAABxBQAtkvEAAHEUAC2ZXAAAcR8ALZnmAABxKgAtmm4AAHE1AC2bQgAAcUAALZ7SAABxSwAtn5UAAHFWAC2f9gAAcWEALaBMAABxbAAtoXkAAHF3AC2iFQAAcYIALaOxAABxjQAtpLUAAHGYAC2l8gAAcaMALaZnAABxrgAtpt0AAHG5AC2qSwAAccQALatQAABxzwAtq9oAAHHaAC2vYQAAceUALbNVAABx8AAtvJsAAHH7AC3CSgAAcgMALcJbAAByCgAtzNoAAHIZAC3RqQAAciEALdSgAAByLAAt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gpMAMqgXAACCnwAyqIIAAIKjADKoywAAgqcAMqk/AACCrAAyqYEAAILUADKpoAAAgtwAMqnkAACC5AAyqgMAAILsADKsQAAAgvQAMq0lAACC/gAyrVAAAIMRADKtqQAAgxsAMq3VAACDJQAyrxcAAIMvADKvvwAAgzkAMrACAACDYQAysCcAAINpADKweQAAg3EAMrD2AACDeQAysTkAAIOhADKxlgAAg6sAMrHeAACDswAysiwAAIPbADKy1AAAg+MAMrMrAACD+wAys4AAAIQTADKz+wAAhCsAMrRPAACENQAytJAAAIQ/ADK00QAAhEkAMrUSAACEUwAythcAAIRdADK3CgAAhGcAMrgHAACEcQAyuOMAAIR7ADK53gAAhIUAMsSRAACEjwAyxT4AAIStADLJLAAAhMsAMsnOAACE0wAyzioAAITbADLOtwAAhOMAMs92AACE6wAy0KUAAITzADLREQAAhPsAMtNrAACFAwAy0/4AAIULADLYGwAAhRMAM1uMAACFIAAzW/wAAIUrADN80AAAhTYAM31IAACFQwAzhJ0AAIVJADOIQAAAhVgAM5mvAACFbQAzrf4AAIWCADPAxwAAhZcAM8wmAACFrAAzzPsAAIW7ADPTQwAAhcoAM9NrAACF1wAz05AAAIXkADP3QwAAhfEAM/gIAACGAgAz+NwAAIYTADP5EAAAhiQAM/m6AACGLwAz/n4AAIZAADP/DQAAhlEAM//dAACGYgA0ABIAAIZzADQAeQAAhn4ANA3vAACGjwA0DnoAAIagADQPBQAAhrEANA+QAACGwgA0FLoAAIbTADQVJAAAhuQANBZgAACG9QA0FsoAAIcGADQXQAAAhxcANCkjAACHKAA0POEAAIc5ADQ+FwAAh0oAND4aAACHVQA0P74AAIdtADRAsAAAh34ANESCAACHjwA0RcIAAIegADRIzwAAh7EANEjSAACHvAA0UfoAAIfUADRTlQAAh+UANFQcAACH+AA0Ve4AAIgLADRbdAAAiBwANFz+AACIJwA0XbgAAIg4ADRnpgAAiEkANHSYAACIVgA0gq8AAIhtADSCwAAAiHYANNByAACIfwA00RIAAIiMADTRsgAAiJkANNJ4AACIpgA00xkAAIizADTTuQAAiMAANNRZAACIzQA01g8AAIjaADTW+gAAiOcANNelAACJAQA02e0AAIkOADTaNAAAiRwANNvZAACJKgA03qcAAIk3ADTe6AAAiUQANN8pAACJUQA0320AAIleADTh7wAAiWsANOIzAACJeAA0+GMAAImFADT/EgAAiZgANP/XAACJpQA1ARQAAIm4ADUFCQAAic4ANQd3AACJ4wA1DFAAAIn4ADUMtQAAigsANQz/AACKHgA1DcQAAIoxADUPcgAAijoANREcAACKQwA1EfUAAIpMADUSPQAAilUANRMhAACKXgA1FVoAAIpnADUXpAAAinAANRiPAACKeQA1GUsAAIqCADUZggAAiosANR7VAACKlAA1PlcAAIqjADVANAAAir0ANUB/AACKywA1Wi4AAIrZADVaxgAAiuwANVycAACK+QA1XcMAAIsEADVeuAAAiw8ANV7nAACLIgA1YD4AAIs1ADVvUwAAi0gANW9tAACLVQA1ckgAAItmADVytwAAi3AANXM0AACLegA1c5kAAIuEADV0cgAAi44ANXT0AACLmwA1dm0AAIusADV2lAAAi7kANXi4AACLxgA1eSMAAIvTADV5ngAAi+AANXqtAACL8QA1fOYAAIv+ADV+DAAAjA0ANX/IAACMGAA1gCQAAIwpADWCdQAAjDYANYLkAACMPAA1lCQAAIxCADWdAwAAjE8ANaCgAACMXAA1oMQAAIxpADWhgQAAjHEANaGrAACMfgA1ooQAAIyGADWirgAAjJMANaOHAACMmwA1o7EAAIyoADWkrQAAjLAANaTsAACMvQA1pSsAAIzKADWlagAAjNcANaaOAACM5AA1ps0AAIzxADWnDAAAjP4ANadLAACNCwA1qHEAAI0YADWosAAAjSUANajvAACNMgA1qS4AAI0/ADWqUgAAjUwANaqRAACNWQA1rDoAAI1mADWuMQAAjX4ANa54AACNiwA1sAIAAI2YADWyJgAAjaUANbTmAACNsgA1tZwAAI2/ADW2vAAAjcwANbcsAACN2QA1t+kAAI3mADW4nwAAjfMANbmFAACODQA1vDMAAI4aADW8ugAAjiUANcGcAACOMAA1wiwAAI5NADXCvAAAjmoANcNXAACOhwA1w2sAAI6XADXDfwAAjqcANcOzAACOtwA1w98AAI7HADXEHAAAjtcANcRIAACO5wA1xJ0AAI73ADXFEgAAjwcANcV4AACPFwA1xYwAAI8nADXJGQAAjzcANclrAACPRAA1yb0AAI9RADXVswAAj14ANdXFAACPawA11hMAAI94ADXWtQAAj4UANdbHAACPkgA11xUAAI+fADXXwwAAj6wANdfVAACPuQA12AgAAI/GADXYGgAAj9MANdhoAACP4AA12fQAAI/tADXaJwAAj/oANdpaAACQBwA12o0AAJAUADXawgAAkCEANdr3AACQLgA12ywAAJA7ADXiLAAAkEgANeLvAACQVQA149wAAJBiADXj7gAAkG8ANeQ8AACQfAA15SkAAJCJADXlOwAAkJYANeWJAACQowA15jcAAJCwADXmSQAAkL0ANeZ8AACQygA15o4AAJDXADXm3AAAkOQANei1AACQ8QA16O4AAJD+ADXpJwAAkQsANelgAACRGAA16ZsAAJElADXp1gAAkTIANeoRAACRPwA18NsAAJFMADXw8QAAkVkANfEdAACRZgA18TMAAJFzADXxzgAAkYAANfJVAACRjQA18pQAAJGaADXzwQAAkacANfPXAACRtAA19DYAAJHBADX1QgAAkc4ANfVwAACR2wA19zkAAJHoADX3cgAAkfUANffBAACSAgA19/wAAJIPADX4NwAAkhwANf1ZAACSKQA1/g8AAJI2ADX/BQAAkkMANh4TAACSUAA2JawAAJJdADYmBAAAknUANiaJAACSggA2JuEAAJKcADYoYwAAkqkANi1BAACStgA2L1kAAJLBADYvsAAAkswANjAMAACS1wA2MK4AAJLiADYw5QAAku0ANjEcAACS+AA2MVMAAJMDADYxwgAAkw4ANjH1AACTGQA2N24AAJMkADY3nAAAky8ANjmOAACTOgA2ObAAAJNFADZP9QAAk1AANlcDAACTXwA2Wc4AAJNuADZfcAAAk30ANmD4AACTjQA2YuAAAJO4ADZjfQAAk8UANmTYAACT8AA2Z2UAAJP9ADZo2gAAlA4ANmmfAACUGQA2avgAAJQqADZrqQAAlDUANm2aAACURAA2bckAAJRPADZvcQAAlGYANnlLAACUfQA2en0AAJSIADZ/4wAAlJMANoEbAACUogA2gnMAAJSzADaD/gAAlMIANoguAACUzQA2ijcAAJTcADaMlQAAlOsANpBPAACU+gA2nWEAAJUJADa4uQAAlRgANsejAACVJwA2zxEAAJUyADba1QAAlT0ANtuDAACVUQA24N4AAJVlADbh8AAAlXAANuIjAACVjQA24kwAAJWqADbi8QAAlbcANuNVAACVxgA25BwAAJXVADbnQgAAleAANuhVAACV6wA26LkAAJX2ADbpsQAAlgMANuoOAACWDgA26vgAAJYZADbrWQAAliQANuuLAACWLwA269YAAJZhADbv6AAAlpMANvRpAACWpwA29PAAAJayADb1vQAAlr0ANvfaAACWzgA2+UoAAJbfADb64wAAlvAANvvFAACXAQA2/KkAAJcMADb84AAAlxcANw0DAACXKAA3DdEAAJc5ADclnAAAl0oANydRAACXVQA3KO4AAJdgADcwDQAAl2sANzGVAACXfAA3NzIAAJeNADc3jwAAl6MANzxtAACXrgA3PeEAAJe/ADdAuwAAl9AAN0IOAACX4QA3QrEAAJfsADdEOAAAl/cAN0SRAACYAgA3RPoAAJgNADdFVAAAmBcAN0euAACYIQA3SZUAAJgyADdKnQAAmD0AN0rjAACYSAA3S0IAAJhhADdYjQAAmHoAN1/fAACYhwA3YKsAAJiYADdhbAAAmKYAN2IhAACYsQA3YrEAAJi/ADdj0wAAmM4AN2PvAACY2QA3mKEAAJjoADeaGAAAmQcAN5uLAACZJgA3soAAAJk9ADezdQAAmUoAN7xKAACZWwA3yjYAAJlmADfM4AAAmXEAN87hAACZhgA3z8IAAJmbADfQIwAAmbAAN9IZAACZxQA34ecAAJnSADfk5wAAmd0AN/UnAACZ6gA39VoAAJn3ADf62AAAmgQAN/znAACaFQA3/bgAAJoiADgF4QAAmjMAOAY0AACaQAA4Cb8AAJpNADgK0wAAmloAOAvjAACaZwA4DaUAAJp0ADgcawAAmoEAODGKAACaiQA4Ml8AAJqYADgzNAAAmqcAODYEAACatgA4PRIAAJrFADg9TgAAmtIAOElJAACa3wA4TwMAAJryADhZsAAAmv8AOFnhAACbGQA4YxEAAJszADhjUgAAmz0AOGPLAACbRwA4ZQoAAJtRADiInAAAm1sAOIpTAACbYwA4i3QAAJtrADipSQAAm3MAOKm0AACbgAA4qh8AAJuNADir8wAAm5oAOKy/AACbrQA4rRIAAJvAADituAAAm9MAOLJNAACb5gA5IaIAAJvsADkjRgAAm/kAOSTbAACcBgA5JnAAAJwTADkoNAAAnCAAOSiQAACcLQA5KOMAAJw6ADk7TwAAnEcAOT+RAACcWAA5QPIAAJxjADlCeQAAnHAAOULRAACcewA5R3IAAJyGADlH/QAAnJAAOUj2AACcmgA5SqIAAJynADlWsAAAnLIAOVbbAACcvQA5VwYAAJzIADlZ2gAAnNMAOVs7AACc3gA5XMIAAJzrADldGgAAnPYAOWG6AACdAQA5YkUAAJ0LADljPQAAnRUAOWTnAACdIgA5bp4AAJ0tADluxAAAnToAOW81AACdRwA5cfQAAJ1UADlyiAAAnWUAOXL8AACdcAA5c1YAAJ17ADl0HQAAnYYAOXTLAACdlwA5dSUAAJ2iADl2BAAAna0AOXdOAACdvgA5eR0AAJ3PADl7QgAAndoAOX1AAACd4AA5fwsAAJ3tADmAFQAAnf4AOYGqAACeCQA5gcwAAJ4TADmKqwAAnhkAOYxjAACeHwA5k9wAAJ4lADmVBwAAnisAOZVhAACeMQA5lb0AAJ43ADmX9gAAnj0AOZnEAACeSgA5mkQAAJ5XADmdBwAAnmQAOZ1gAACecQA5nZ4AAJ53ADmdxQAAnoQAOaETAACekQA5oWgAAJ6eADmiHQAAnq4AOaJDAACeuwA5ozgAAJ7LADmjaQAAntsAOaPBAACe4QA5pEoAAJ7xADmmUAAAnwEAOaZ5AACfDgA5prkAAJ8UADmpqgAAnyQAOaqJAACfNwA5q7kAAJ89ADmsBAAAn0oAOawpAACfWQA5rDsAAJ9oADmtPAAAn24AOa2RAACfewA5rg8AAJ+LADmuQAAAn5sAObCOAACfoQA5szAAAJ+yADmzswAAn70AObRgAACfwwA5t+8AAJ/JADm4nAAAn88AObm9AACf1QA5x2YAAJ/gADnJzgAAn+0AOcn/AACf+gA5yjIAAKAHADnKYwAAoBQAOcqUAACgIQA5ysUAAKAuADnLBgAAoDsAOdHgAACgSAA54JwAAKBZADnmCwAAoF8AOeZDAACgbAA55lsAAKB5ADnmyQAAoIYAOecGAACgjAA56BIAAKCSADno+AAAoJgAOenEAACgngA56jQAAKCrADnsmAAAoLgAOe64AACgxQA58rEAAKDSADn1eAAAoN8AOfZQAACg5QA59nEAAKDyADn3HwAAoPgAOffjAACg/gA5+b8AAKEEADn6OAAAoQoAOfsuAAChKAA5/KYAAKEuADn9EgAAoTQAOgBVAAChOgA6BYcAAKFHADoKDQAAoVoAOgoxAAChZwA6CtcAAKF0ADoK7wAAoYEAOgsTAAChjgA6C8oAAKGbADoMRAAAoagAOgxoAAChtQA6DX4AAKHCADoOdAAAoc8AOg6pAACh3AA6DsEAAKHpADoPigAAofYAOg/zAACiAwA6EBcAAKIQADoRAQAAoh0AOhEZAACiKgA6L2wAAKI3ADpGmwAAokQAOmjUAACiUQA6ezsAAKJeADp7YgAAomkAOnucAACidAA6kaUAAKJ/ADqR3wAAoooAOq+DAACilQA6v44AAKKoADrI3wAAorUAOsnaAACivQA6ygAAAKLFADrKJgAAos0AOspMAACi1QA6ynIAAKLdADrK7wAAouUAOssVAACi7QA6yzsAAKL1ADrLYQAAov0AOsuHAACjBQA6zAQAAKMNADrMKgAAoxUAOsynAACjHQA6zSQAAKMlADrNoQAAoy0AOs3HAACjNQA6ze0AAKM9ADrOEwAAo0UAOs45AACjTQA6zl8AAKNVADrOsgAAo10AOs8FAACjZQA6z1gAAKNtADrPqwAAo3UAOtRXAACjfQA61s4AAKOIADrYUwAAo5MAOt0vAACjngA63mkAAKOpADrgiAAAo7QAOuXAAACjvwA65gMAAKPJADrmRgAAo9MAOuaJAACj3QA65swAAKPnADrnDwAAo/EAOudSAACj+wA655UAAKQFADroGgAApA8AOuhdAACkGQA66KAAAKQjADro4wAApC0AOukmAACkNwA66WkAAKRBADrprAAApEsAOunvAACkVQA66jIAAKRfADrqdQAApGkAOuq2AACkcwA66vcAAKR9ADrrOAAApIcAOut5AACkkQA667wAAKSbADrvsgAApKUAOvBEAACkrwA68LIAAKS5ADrxGwAApMMAOvG3AACkzQA68twAAKTXADrzVgAApOEAOvPuAACk6wA69HAAAKT1ADr0swAApP8AOvT2AAClCQA69TkAAKUTADr1fAAApR0AOvbjAAClJwA6+EcAAKUxADr4qwAApTsAOvjsAAClRQA6+S8AAKVPADr5pgAApVkAOvnoAAClYwA7BhMAAKVtADsQGwAApXgAOxWzAAClkAA7GdEAAKWoADsa1gAApcAAOxtkAAClywA7HN0AAKXWADsjfgAApeEAOyO4AACl+QA7JBgAAKYEADskfgAApg8AOyXpAACmGgA7JiMAAKYyADsmQgAApj0AOyiMAACmSAA7KuAAAKZVADsr1QAApnUAOywQAACmiAA7LgoAAKaTADsuPwAApqYAOzb1AACmsQA7OeMAAKa8ADs6WQAApsYAOzp/AACm0AA7O/wAAKbaADs8HQAApuQAOz0uAACm7wA7PbsAAKb6ADtApgAApwUAO0NnAACnDwA7Q4wAAKcaADtEVgAApyUAO0aqAACnLwA7R50AAKc6ADtH6QAAp0UAO0nEAACnUAA7SyYAAKdbADtLYAAAp3EAO0z0AACnfAA7TS4AAKeSADtNnwAAp50AO15QAACnpwA7fooAAKe0ADt+sAAAp8EAO4NvAACnzgA7hnkAAKffADuGtgAAp/AAO4rWAACn+wA7i2wAAKgGADuOrgAAqBMAO4/NAACoIAA7kHAAAKgtADuSmAAAqDoAO5K+AACoRwA7lMsAAKhUADuVpwAAqGEAO5dRAACobgA7m8kAAKh7ADucYQAAqH8AO6IrAACoigA7ow4AAKibADulMwAAqKwAO6bIAACotwA7qIoAAKjIADurmwAAqNkAO6ySAACo5gA7raoAAKjzADuulAAAqP4AO6+NAACpCwA7tZEAAKkYADu56QAAqSkAO8UZAACpNgA7xXcAAKlDADvGBQAAqVAAO8ZxAACpXQA7xz4AAKlqADvHjQAAqXcAO8+0AACphAA71jEAAKmVADvW0AAAqaIAO9ikAACprwA72TgAAKm8ADvdvAAAqcQAO+G+AACp0QA74eEAAKncADviBQAAqecAO/CdAACp9gA78P8AAKoDADv6uwAAqhAAO/12AACqHwA7/mEAAKouADwCIgAAqj0APB3rAACqQQA8Hn4AAKpOADwtyQAAqlsAPC3vAACqaAA8O38AAKp1ADw76AAAqoIAPD33AACqjwA8QWYAAKqgADxEowAAqrEAPEfQAACqvgA8TsEAAKrJADxRVAAAqs0APFLcAACq2gA8U08AAKryADxTfwAAqv8APFPZAACrDAA8VHEAAKsZADxUqwAAqyEAPFTyAACrLgA8VhAAAKs7ADxXZQAAq0gAPFhdAACrVQA8WIIAAKtiADxgVwAAq28APGD0AACrfAA8YZEAAKuJADxiLgAAq5YAPGLLAACrowA8Y9MAAKuwADxmcQAAq70APGiHAACrygA8ap4AAKvXADxrJAAAq+QAPGwBAACr8QA8bRAAAKv+ADxuwgAArAsAPHAAAACsGAA8clAAAKwlADxzOAAArDIAPHOBAACsPwA8dJAAAKxMADx2dQAArFkAPHezAACsZgA8e0YAAKxzADyBTgAArIAAPIGwAACsjQA8hjEAAKyaADyItAAArKcAPIkmAACstAA8i5kAAKzBADyQywAArM4APJWbAACs2wA8lxgAAKzoADyYrwAArPkAPJpRAACtBgA8msoAAK0ZADydBwAArSYAPJ4OAACtOQA8n/oAAK1GADykUgAArVMAPKUtAACtYAA8pusAAK1zADynJgAArYAAPKi0AACtjQA8rV0AAK2aADyvOwAAracAPLUBAACttAA8tTMAAK28ADy11AAArcQAPLhPAACtzwA8vBYAAK3aADy9FgAArecAPMGaAACt9AA8wjcAAK4BADzGyAAArg4APM25AACuGwA8zswAAK4sADzRMwAArj0APNIXAACuSgA80pIAAK5dADzUOQAArmoAPNlmAACudwA82ZwAAK6RADzaQwAArqsAPNrZAACutAA827AAAK7OADzcUgAArtcAPN0pAACu8QA83fUAAK76ADzhZQAArwMAPOSFAACvEAA85SgAAK8dADzl5AAAryoAPOafAACvNwA86JYAAK9EADzp3wAAr1EAPOsLAACvXgA868wAAK9rADzvcAAAr3gAPPIWAACvhQA89AIAAK+SADz0uwAAr58APP39AACvrAA8/1QAAK+5AD0AEgAAr8YAPQIVAACv0wA9AqAAAK/gAD0DVQAAr+0APQSVAACv+gA9BUMAALAHAD0HOAAAsBQAPQi6AACwIQA9CaEAALAuAD0OLAAAsDsAPRXTAACwSAA9GFEAALBbAD0aMQAAsG4APRpXAACwewA9IC8AALCIAD0glgAAsJUAPSItAACwqAA9JFkAALCwAD0ldwAAsL0APSYqAACwxQA9JsUAALDNAD0qoAAAsNUAPS2RAACw4gA9L+cAALDvAD0xDAAAsPwAPTQ6AACxCQA9OS8AALEWAD09EgAAsSMAPT1TAACxMAA9PXQAALE9AD1BagAAsUoAPUyfAACxVwA9TtYAALFkAD1PYQAAsXEAPVMrAACxfgA9U/EAALGLAD1pCgAA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zLoAANPaAEPM6wAA0+kAQ83uAADT+ABENtkAANQHAEQ3GgAA1BQARDoPAADUGgBEOjwAANQjAEQ7aAAA1CwARDvdAADUMgBEPHMAANQ7AEQ9OAAA1EQARD7YAADUSgBEPx0AANRQAEQ/pwAA1FYAREDIAADUXABEQXUAANRiAERBvAAA1GgAREINAADUbgBEbiEAANR0AERvHQAA1HoARHCIAADUgABEcdIAANSLAERzLQAA1JYARHmcAADUoQBEecoAANSuAER5+AAA1LsARHomAADUyABEen4AANTVAER7VQAA1OIARHy6AADU7wBEfOUAANT8AER9WwAA1QkARH2eAADVFgBEf4UAANUjAER/sAAA1TAARH/cAADVPQBEgCUAANVKAESEbwAA1VcARId1AADVZABEiI0AANVxAESIuwAA1X4ARIkxAADVlwBEjrUAANWkAESiKAAA1aoARKb7AADVtwBEp4EAANXEAESntQAA1dEARKgMAADV3gBEqD4AANXrAESpDQAA1fgARLJEAADWBQBEtUgAANYSAES2XAAA1h8ARMESAADWLABEwS4AANY1AETPwQAA1jsARNAlAADWTABE0L4AANZZAETXEwAA1mIARNd0AADWcwBE2s4AANaAAETgSgAA1okAROMjAADWkgBE6fkAANabAETrcwAA1qQAROulAADWrwBE69sAANa4AETs+QAA1sEARO1fAADWygBE7f8AANbTAETynAAA1twARQKuAADW6QBFAugAANb0AEUDDQAA1v8ARQTXAADXCgBFBRIAANcQAEUFoQAA1xsARQYZAADXJgBFBx4AANcxAEUHWwAA1zwARQmqAADXRwBFCzgAANdSAEULyQAA11gARQ85AADXYwBFGDIAANduAEUaAAAA13IARRxBAADXfwBFHGsAANeDAEUc1QAA14cARRz/AADXiwBFHekAANePAEUf9AAA15wARSAeAADXoABFIIgAANekAEUgsgAA16gARSGcAADXrABFI50AANe5AEUjxwAA170ARSxCAADXwQBFLGcAANfMAEU4ggAA19sARTjmAADX4QBFOX4AANfnAEU5ywAA1+0ARTo2AADX8wBFOroAANf5AEU7BwAA1/8ARTtyAADYBQBFO9kAANgLAEU8PQAA2BEARTzVAADYFwBFPSIAANgdAEU9jQAA2CMART4RAADYKQBFPl4AANgvAEU+yQAA2DUART9BAADYOwBFP6UAANhBAEVAPQAA2EcARUCKAADYTQBFQPUAANhTAEVBeQAA2FkARUHGAADYXwBFQjEAANhlAEVCzQAA2GsARUMxAADYcQBFQ8kAANh3AEVEFgAA2H0ARUSBAADYgwBFRQUAANiJAEVFUgAA2I8ARUW9AADYlQBFRiQAANibAEVGiAAA2KEARUcgAADYpwBFR20AANitAEVH2AAA2LMARUhcAADYuQBFSKkAANi/AEVJFAAA2MUARUmMAADYywBFSfAAANjRAEVKiAAA2NcARUrVAADY3QBFS0AAANjjAEVLxAAA2OkARUwRAADY7wBFTHwAANj1AEVcDwAA2PsARXvMAADZBgBFfkEAANkMAEV/VwAA2RIARvWeAADZGABG9bsAANklAEb28gAA2TIARvo5AADZPwBG+nkAANlKAEb69QAA2VIARvxCAADZWgBG/V4AANliAEb/vgAA2XwARwF1AADZjQBHB2AAANmeAEcK7gAA2akARwxVAADZtgBHDMgAANnDAEcQRAAA2ckARxB0AADZ1gBHELUAANnjAEcSHAAA2ekARxJMAADZ9gBHEo0AANoDAEcWbAAA2gkARxcfAADaFgBHF2AAANojAEcZeAAA2ikARxmnAADaNgBHH+4AANpDAEchfQAA2lAARyI3AADaXQBHI80AANplAEckigAA2nIARySzAADaeABHJT0AANqFAEcmVgAA2pIARyszAADanQBHLQQAANqqAEctdQAA2rAARy49AADavQBHMtQAANrKAEc/FwAA2tsAR0bqAADa4QBHR34AANruAEdMxgAA2wEAR1CgAADbDgBHUTQAANsbAEdaBwAA2y4AR2FdAADbQQBHYfQAANtMAEdibwAA21cAR2KUAADbYgBHYzEAANttAEdjTQAA23gAR2WVAADbgwBHZZgAANuQAEdnAQAA26gAR2eQAADbswBHaAcAANu+AEdoHwAA28YAR2itAADb1QBHaW0AANvgAEdpugAA2+sAR2oPAADb9gBHam0AANwBAEdqywAA3AwAR2spAADcFwBHa4cAANwiAEdr5QAA3C0AR2zJAADcOABHbSAAANxDAEdtIwAA3E4AR22TAADcZABHbZYAANxvAEdvJgAA3IUAR2+PAADcmwBHcCAAANymAEdwiQAA3LwAR3FFAADcxwBHcrAAANzSAEd0IgAA3NgAR3QlAADc4wBHdQoAANz5AEd1DQAA3QQAR3v1AADdGgBHfJ4AAN1MAEd9OQAA3WEAR34TAADddgBHg2MAAN2LAEeEAQAA3ZwAR4R2AADdpwBHhYMAAN2yAEeKYgAA3dAAR43AAADd4QBHlK4AAN30AEegWAAA3foAR6DCAADeAABHoSYAAN4GAEeiKQAA3gwAR625AADeGQBHrj4AAN4qAEevpgAA3jsAR7LRAADeSABHsxEAAN5mAEe2UgAA3nkAR7aSAADelwBHu3cAAN6qAEe8dgAA3sEAR7y4AADe0gBH9owAAN7pAEf2qQAA3vYAR/bMAADfAABH95QAAN8NAEf5WwAA3xoAR/mqAADfJwBH+ckAAN80AEf58QAA30EAR/u2AADfTgBH+7kAAN9bAEf8rQAA33UAR/ywAADfggBH/vIAAN+cAEf/YQAA36YASADTAADfsABIATYAAN+/AEgB3gAA384ASAIQAADf3QBIAhMAAN/qAEgFtgAA4AQASAjnAADgEQBICQQAAOAXAEgN0gAA4CQASA5nAADgLwBIDuQAAOA6AEgO/AAA4EIASBlUAADgUQBIG1IAAOBcAEgeJgAA4GQASB5CAADgbwBIH+4AAOB6AEggVQAA4IUASCLKAADgkABIJ7oAAOCcAEgoIQAA4KcASCheAADgsgBIK3UAAOC9AEhXcwAA4M0ASFjrAADg2gBIWlAAAODtAEhbCAAA4PoASFv/AADhBwBIXKYAAOEaAEhdaAAA4TQASF5TAADhOgBIXpsAAOFHAEhe7AAA4VQASF83AADhYQBIYKoAAOFuAEhltwAA4XsASGfLAADhhQBIaAAAAOGPAEhprAAA4ZkASGyUAADhqQBIbW0AAOG2AEhwvwAA4ccASHEcAADh2gBIc5wAAOHnAEhz5AAA4fQASHQtAADiAQBIdIEAAOIOAEh1DgAA4hsASHWTAADiKABIdb0AAOI1AEh17gAA4jsASHZ1AADiSABIegMAAOJVAEiMgwAA4lsASJRDAADiYQBIlKcAAOJuAEiV/wAA4nsASJiXAADigQBImPQAAOKUAEiZQAAA4qcASJ5WAADitABInrMAAOLHAEigbwAA4toASKy8AADi5wBIrOwAAOL6AEjDUQAA4wcASMWCAADjGgBIxdwAAOMnAEjIjgAA4zQASMjFAADjQQBIyY8AAONOAEjJxgAA41sASMrBAADjaABIy98AAON1AEjRAgAA44IASNGFAADjjwBI1NoAAOOcAEjVFQAA468ASNVHAADjvABI1XcAAOPPAEjXjgAA49wASNfJAADj7wBI2F8AAOP8AEjYkgAA5AkASN90AADkIQBI4VUAAOQuAEjj8gAA5EYASORrAADkWQBI5fEAAORsAEjvRgAA5HkASPDtAADkfwBI8m8AAOSFAEjypgAA5JIASPM7AADkmABI9JwAAOSlAEj2MgAA5KsASPgkAADksQBI+NIAAOS3AEj5ywAA5L0ASPpIAADkwwBJAJsAAOTJAEkAywAA5NYASQFsAADk4wBJAf4AAOTpAEkDRAAA5O8ASQRVAADk9QBJBQoAAOT7AEkF7gAA5QEASQczAADlBwBJCLcAAOUNAEkPnAAA5RMASRGJAADlIABJEkAAAOUmAEkT8gAA5SwASRSCAADlMgBJFP8AAOU4AEkVigAA5T4ASRYcAADlRABJGVkAAOVKAEkaBwAA5VAASRsmAADlVgBJG/gAAOVcAEkdKgAA5WIASR6kAADlaABJH/8AAOVuAEkgNgAA5XsASSDZAADlgQBJImAAAOWOAEkmJgAA5ZQASSywAADloQBJLM8AAOW0AEktXgAA5cEASTJJAADl1ABJMwcAAOXhAEkzNwAA5fQASTNWAADmBwBJM8AAAOYUAEk1VAAA5h0ASThvAADmKgBJOaMAAOY3AEk/NgAA5kQAST9lAADmUQBJRlYAAOZeAElJCgAA5msASUnnAADmfgBJTaIAAOaLAElPZAAA5pgASU/qAADmpQBJWLEAAOayAElZUgAA5sEASWecAADm0ABJaU4AAObdAElrdAAA5uwASWykAADm+wBJb5gAAOcKAElv9gAA5xcASXDYAADnJABJcqYAAOcxAEly7gAA50oASXMKAADnYwBJczQAAOd8AElzbAAA55UASXOkAADnrgBJc9gAAOfHAEl0NwAA5+AASXSvAADn+QBJd94AAOgSAEl4cQAA6B8ASXjHAADoLABJePwAAOg5AEmHqgAA6EYASY06AADoUwBJjgUAAOhgAEmO+AAA6G0ASZ0IAADoegBJnlMAAOiHAEmgOQAA6JQASaQcAADooQBJ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E4gAVAiyAAETjgBUCRgAARObAFQJjQABE6gAVAuSAAETtQBUC/wAARPCAFQNMAABE88AVA2jAAET3ABUDfwAARPpAFQQ/gABE+8AVBXfAAET9QBUFfwAARQCAFQWcQABFA8AVBbxAAEUHABUFzgAARQpAFQXrgABFDYAVBhnAAEUQwBUGIYAARRQAFQZKgABFF0AVBpQAAEUagBUGtQAARR3AFQejQABFIQAVB9jAAEUlQBUIDcAARSmAFQhSwABFLcAVCHzAAEUxwBUIhYAARTRAFQiNwABFNsAVCjKAAEU5QBUK9UAARTrAFQuOAABFPEAVC5iAAEVAABULp4AARUGAFQxywABFQwAVDHjAAEVFgBUMioAARUfAFQzcgABFTUAVDRtAAEVOwBUNTQAARVBAFQ1+gABFUcAVDc9AAEVTQBUOA4AARVTAFREYgABFVkAVEZSAAEVbABUR/IAARV5AFRIpQABFYYAVElSAAEVjABUS4cAARWSAFRN6QABFZ8AVFC9AAEVrABUXvgAARW5AFRhZwABFcgAVGXUAAEV2QBUZgUAARXqAFRosQABFfsAVGsWAAEWDABUddkAARYdAFR3MwABFi4AVHjAAAEWQQBUfcoAARZSAFR9/AABFmMAVIIzAAEWdABUguUAARaFAFSDowABFpYAVIXaAAEWpwBUh2kAARa4AFSIxQABFskAVIrXAAEW2gBUkMcAARbpAFSSOwABFu0AVJOVAAEW9gBUlX4AARb6AFSVvgABFwcAVJe1AAEXFABUojIAARcYAFSjBAABFyUAVKtzAAEXMgBUsCIAARc2AFSzPQABFzoAVLOpAAEXPgBUtHwAARdLAFS0rgABF08AVLWIAAEXXABUtt0AARdgAFS50QABF20AVM3zAAEXegBU024AAReNAFTVpgABF6AAVNhKAAEXqABU50MAARe3AFTowAABF78AVOlqAAEXxwBVC28AARfSAFUMOAABF+gAVRKvAAEX/QBVE3gAARgTAFVHVwABGCgAVUdlAAEYOgBVR68AARhFAFVH1AABGFAAVUinAAEYYgBVSnAAARh0AFVKvAABGIYAVUwUAAEYkwBVTbcAARilAFVN9gABGLcAVVEOAAEYyQBVUoYAARjWAFVc4gABGOAAVV0JAAEY6wBVXTEAARkDAFVfBAABGQ4AVV8pAAEZIABV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GeIAATBxAFsaSAABMHwAWx2sAAEwhwBbHywAATCaAFsgLQABMLQAWyCZAAEwxwBbJTQAATDhAFsnqAABMO0AWygpAAExBwBbKJgAATEhAFsqLAABMSgAWys5AAExOQBbK78AATFTAFssNwABMV4AWyylAAExZQBbLScAATF/AFsuWAABMY4AW2MbAAExlgBbY6YAATGhAFtpvgABMawAW2qdAAExtwBbbsAAATHCAFtv9AABMc0AW3R/AAEx2ABbdUIAATHpAFt2PgABMfoAW3qTAAEyBQBbetgAATINAFt7dwABMhUAW3vCAAEyHQBbfysAATIlAFuAGAABMjgAW4D6AAEySwBbgTAAATJWAFuEggABMmEAW4UwAAEybABbh5EAATJ3AFuH/wABMn8AW4iIAAEyiABbiPQAATKQAFuJpAABMpgAW4nlAAEyoABbimEAATKoAFuKpwABMrAAW4sIAAEyuQBbi00AATLBAFuLlAABMskAW4vEAAEy0QBbj9cAATLZAFuRtAABMugAW5SEAAEy8wBblJMAATMCAFuUsQABMxEAW5X3AAEzIABbllwAATMvAFuWjgABMz4AW5e7AAEzTQBbl8oAATNjAFuYDgABM24AW5lFAAEzeQBbmXgAATOEAFua3gABM5UAW5sRAAEzoABbnEcAATOxAFudZwABM8cAW58gAAEz0gBbn0UAATPjAFufhgABM/QAW5+jAAEz/wBboBQAATQKAFugLgABNBcAW6C3AAE0KABbodkAATQ5AFuiFwABNEQAW6J5AAE0VgBbpncAATRjAFumjQABNG4AW6cgAAE0eQBbrQ4AATSEAFutegABNI8AW625AAE0mgBbrigAATSlAFuv1QABNLAAW7CeAAE0uwBbsMMAATTGAFuxWwABNNEAW7J0AAE03ABbsy8AATTnAFu0OwABNPIAW7VbAAE0/QBbuI8AATUIAFu5yQABNRMAW7oCAAE1HgBbvDoAATUpAFu8aQABNTQAW72SAAE1PwBbvc0AATVKAFu+xwABNVUAW775AAE1YABbwYUAATVrAFvDHAABNXMAW8QEAAE1fgBbxmUAATWJAFvHbAABNZYAW8irAAE1owBbyR0AATWwAFvKKgABNbcAW8qcAAE1xABby7YAATXLAFvMaQABNdgAW8/EAAE13wBb0QQAATXuAFvT9QABNf0AW9TQAAE2CABb1TIAATYTAFvWRgABNh4AW9idAAE2KQBb2psAATY0AFvaxQABNkEAW9s+AAE2TABb3tkAATZXAFvfAwABNmIAW+AZAAE2bQBb4DkAATZ4AFvh+gABNoMAW+RDAAE2jgBb5rUAATaZAFvnWQABNqQAW+jtAAE2rwBb6ecAATa6AFvqDAABNsUAW+wHAAE20ABb7n0AATbdAFvvUgABNuoAW++MAAE29QBb78AAATcAAFvxxAABNwsAW/H+AAE3FgBb8nYAATchAFvy0AABNywAW/Y2AAE3NwBb+FEAATdCAFv43QABN00AW/kvAAE3WABb+mAAATdjAFv7QwABN24AW/v/AAE3eQBb/FgAATeEAFv8vQABN48AW/3wAAE3mgBb/p8AATelAFv/vwABN7AAXAFiAAE3uwBcA+UAATfGAFwEUAABN9EAXASAAAE33ABcBowAATfnAFwIrwABN/IAXApGAAE3/QBcCoMAATgIAFwLDgABOBMAXAwCAAE4HgBcDJMAATgpAFwM0AABODQAXA4yAAE4PwBcDlIAAThKAFwPdQABOFUAXBj7AAE4ZABcGhUAAThvAFwbXwABOHoAXBy0AAE4hQBcHXMAATiQAFw2mgABOKIAXDeTAAE4rQBcOeUAATi4AFw7DgABOMMAXDwoAAE4zgBcQ1sAATjZAFxDyQABOOQAXEQdAAE47wBcRHkAATj6AFxF6gABOQUAXEZtAAE5EABcR0kAATkbAFxINgABOSYAXEinAAE5MQBcSSMAATk8AFxJnQABOUcAXEy7AAE5UgBcTjYAATldAFxOzQABOWgAXFJzAAE5cwBcUs8AATl+AFxXoQABOYkAXFn4AAE5lABcWlQAATmfAFxarAABOaoAXFsEAAE5tQBcX/cAATnAAFxgXwABOc8AXGDJAAE53gBcZRgAATntAFxnZwABOfwAXGfdAAE6CwBccSwAAToaAFx2gwABOiUAXHyqAAE6NABcfMgAATpBAFx+ZQABOkkAXH9DAAE6VABcgCUAATpcAFyBMgABOmkAXISgAAE6dABchMcAATp/AFyE8wABOooAXIZAAAE6lwBchnEAATqiAFyGjQABOq0AXIadAAE6uABchsIAATrKAFyHAwABOtUAXIcRAAE64ABciHIAATryAFyIjwABOv0AXIiuAAE7CABciL0AATsTAFyJeQABOx4AXIogAAE7KQBciq8AATs0AFyO1gABOz8AXI7uAAE7SgBcjwYAATtVAFyPPQABO2AAXI/CAAE7awBckBUAATuBAFyVSgABO5cAXJYhAAE7ogBcl28AATutAFyYRwABO7gAXJhzAAE7zgBcmKEAATvZAFyZJAABO+QAXJpsAAE77wBcmocAATv6AFya1QABPAUAXJxVAAE8FwBcnLcAATwmAFydAgABPDEAXJ4MAAE8QgBcnpgAATxNAFye9gABPFgAXKO1AAE8ZwBco9MAATxyAFymYAABPH8AXKrxAAE8iABcq1AAATyVAFyrrwABPKIAXLh2AAE8rwBcubQAATy+AFy6twABPMsAXLujAAE82ABcu+UAATzgAFy8pwABPOgAXL1pAAE88ABcySIAATz4AFzNlAABPQUAXM7lAAE9EABc0D4AAT0bAFzRkQABPSYAXNLHAAE9MwBc0/8AAT0+AFzUggABPUsAXNVWAAE9WABc1pYAAT1jAFzXswABPWkAXNjnAAE9cgBc2oEAAT1/AFzf/gABPYwAXOCXAAE9nwBc4Q4AAT2yAFzhawABPb8AXOIwAAE9zABc6ssAAT3fAFzsSwABPewAXPE0AAE9+QBc8agAAT4GAFzx+gABPhMAXPJVAAE+IABc9A8AAT4tAFz0/gABPjUAXPVLAAE+QgBc9ZIAAT5PAFz2AQABPlwAXPbHAAE+aQBc9vAAAT52AFz5MgABPoMAXPo4AAE+iQBc+k8AAT6PAFz6+AABPpUAXP/zAAE+mwBdApoAAT6oAF0DOAABPrUAXQOPAAE+zwBdBRcAAT7cAF0FYQABPukAXQXDAAE+9gBdBpsAAT8AAF0G3wABPwoAXQ7xAAE/FwBdD+YAAT8kAF0RXAABPzEAXROMAAE/PgBdFEUAAT9LAF0fbwABP1gAXSBVAAE/fQBdINsAAT+VAF0hYAABP6AAXSToAAE/qwBdJwAAAT/AAF0nqAABP9QAXSizAAE/3ABdLdgAAT/tAF0vSgABP/MAXS/7AAFABABdMKYAAUAKAF0xZwABQBsAXTI3AAFAIQBdMwkAAUAnAF01gAABQC0AXTYBAAFAMwBdNtoAAUA5AF03jQABQD8AXUE9AAFARQBdRuEAAUBJAF1J8AABQE8AXVDZAAFAVQBdXGYAAUBdAF1dawABQHsAXWU7AAFAmQBdZT4AAUCmAF1oMAABQMAAXWgzAAFAzQBdaLgAAUDnAF1ouwABQPQAXWnVAAFBDgBdadgAAUEbAF1vtQABQTUAXXBsAAFBRwBdckoAAUFfAF1yTQABQWwAXXRaAAFBhgBddWEAAUGRAF12EwABQZwAXXYWAAFBqQBdd5wAAUHDAF13nwABQdAAXYB2AAFB6gBdgP8AAUH0AF2BawABQgcAXYHpAAFCEQBdgucAAUIkAF2EOwABQkIAXYWgAAFCVQBdh1UAAUJvAF2HhQABQnwAXYgKAAFCmgBdiEQAAUKtAF2JuwABQsAAXYo7AAFC2wBdkRkAAUL2AF2RbwABQwEAXZMSAAFDDABdk5IAAUMmAF2VlQABQzEAXZYVAAFDSwBdlrEAAUNYAF2XFAABQ5IAXZjhAAFDzABdmlYAAUPZAF2a7AABQ+YAXZtPAAFEIABdnDQAAURaAF2c6AABRGUAXaSdAAFEbwBdpk0AAUR5AF2m8QABRMEAXacvAAFEywBdrU0AAUTVAF2u+AABROIAXa/XAAFE7wBdsPUAAUT8AF2xtQABRQkAXbKNAAFFFgBds0QAAUUjAF20MQABRTAAXbSVAAFFPQBdtYQAAUVKAF22mAABRVcAXbm5AAFFXQBdu1IAAUV3AF274wABRYQAXbyJAAFFkQBd4lkAAUWkAF3khwABRbwAXeT7AAFFxABd5VYAAUXMAF3m4QABRdIAXeb3AAFF2ABd6OwAAUXeAF3pGAABReQAXen/AAFF6gBd6hUAAUXwAF3r6gABRfYAXeyRAAFF/ABd7NYAAUYCAF3tTgABRggAXe2TAAFGDgBd7b0AAUYUAF3uUAABRhoAXe+/AAFGIABd8isAAUYmAF3ySQABRiwAXfJnAAFGMgBd8oUAAUY4AF33qQABRj4AXffrAAFGRABd+C0AAUZKAF34bwABRlAAXftmAAFGVgBd+4QAAUZcAF37ogABRmIAXfvAAAFGaABd+94AAUZuAF39rAABRnQAXf3tAAFGegBeAfUAAUaAAF4CNwABRoYAXgJ5AAFGjABeArsAAUaSAF4C/QABRpgAXgXDAAFGngBeBeEAAUakAF4F/wABRqoAXgYdAAFGsABeBjsAAUa2AF4GWQABRrwAXgZ4AAFGwgBeBpcAAUbIAF4MiAABRs4AXg0PAAFG1ABeEagAAUbaAF4R6gABRuAAXhIsAAFG5gBeEm4AAUbsAF4SsAABRvIAXhLyAAFG+ABeEzYAAUb+AF4TegABRwQAXhm9AAFHCgBeGpkAAUcQAF4d4wABRx0AXh8iAAFHIwBeIBoAAUcpAF4g3gABRy8AXie2AAFHNQBeKksAAUdAAF4q/wABR0YAXjSrAAFHTABeNXgAAUdZAF43wAABR2YAXjhKAAFHbABeP8sAAUdyAF5AegABR3gAXkUpAAFHjABeRdgAAUeSAF5IzAABR6YAXkwEAAFHswBeTNEAAUfAAF5YEgABR80AXliwAAFH0wBeXZ4AAUfnAF5ePAABR+0AXmHVAAFIAQBeYvcAAUgHAF5juwABSA0AXmPZAAFIEwBeaIUAAUgZAF5pfgABSCQAXmpdAAFILwBeao8AAUg6AF5rSAABSEUAXmvqAAFIUABebNcAAUhbAF5uXgABSGYAXm7sAAFIcQBeb/oAAUh8AF5yZwABSIcAXnKKAAFIjwBec7UAAUiXAF50OgABSKIAXnZHAAFIrQBedrMAAUi4AF536gABSMMAXnhKAAFIzgBeeM8AAUjZAF54+gABSOQAXnlTAAFI7wBeeaAAAUj6AF56VQABSQUAXnqHAAFJEABee+kAAUkbAF58IwABSSYAXn0OAAFJMQBefcAAAUk8AF5+FAABSUcAABjvAAAAAcAAkk4AFCMpLTk9QUlRVlxjZWh3gIuAl4CbgKOAq4C2gMWA0oDlgPOBAIEHgQ6BH4ElgS2BMYE5gUCBSIFpgXSBgIGFgYqBkIGlgbqB0oHageKB7YH6ghCCJII7gk2CVYJbgmSCaIKAgqKCtoK6gsKC04LbguaC94MDgxODJYMmgzyDRoNIg1iDWoNcg2eDcoN2g36Df4OPg5eDm4Ojg6qDrYOvg7ODuIO6g8ODy4PTg9qD34Ppg++D8IPxg/KEA4QShBmEN4RAhEWEXoRlhHeEhoSJhJWEoISshLqEyYTVhOKE7IT5hQSFC4UThR6FMoU9hUeFTIVThV+FcIV8hYWFkYWihbKFvYXJhdaF4YXthfiGEoYghjCGOYY7hl+Gc4Z4hnmGoIajhsaG04blhv2HOodjh2uHmIfCh8+H1Ifah9+H4Ifth/iIAYgEiAeIDYgRiBKIKogyiEuIXohoiGmIcoiJiJeIp4iuiLWItoi6iMOIxojTiN2I6YjviPWJMolOiVuJaIl+ib2J0InbieaJ+YoFihSKIIonijGKMopFik+KWopkimWKjoq6isiK1oriixqLJos1i3KLgYuQi6CLq4u2i7uLwovnjAyMHownjCyMPoxKjFWMVoxXjFiMWYxujHaMf4ybjK6MvozOjQqNFo0sjU2NZY1ujX+Nko2VjZaNpY21jc2N2o3ejfaOBI4bjjeOQo5RjmGOfI6WjruOy47jjvWPJY8yjz+PVY9lj3qPio+Yj7uPyo/cj/OQC5AukEiQT5BgkHSQk5CpkNuRBZEKkSeRN5E/kU+RZZF0kZCRqZG5kdGR35H8kgmSMZJIkl2SaJKIkqeSupLNkuCTAZMVkxyTH5MvkzGTM5NAk12Td5OBk5STrJOwk7STu5PSk9eT3pPvlASUEZRGlFCUVpRelIaUsZS2lOuVDpUzlTiVcJWnldeV2JXalfaV+JYPlhWWGZYmljSWOpZDllKWWJZhlnSWeZaGlouWlJaflqiWspbDls2W1JbjlvWW/5cJlxKXHZcilyuXLZcwlzGXM5c7l1CXcJeNl5OXq5e3l8eX2Zfjl+2YCpgUmDCYNJg4mD+YR5hKmE+YXZhkmGmYaphtmHqYjJiSmKGYq5ivmMSYzZjRmNmY8Zj5mP6ZBZkTmRmZKJkzmTmZPZlOmViZYJlkmXOZfJmAmYaZjJmRmZiZpJm0mcGZ05nhmfCZ/5oNmiSaLZo0mj6aSppNmk6aWJppmnGaeJqFmpKamJqcm4ybl7VLtU+1WrVhtXC1n7Wqta61srW5tcW1zLXVtdq18LX3tiu2NbY+tky2VbZbtmS2a7Z3tn22gbaGtoq2kbadtqi2trbDtsq22Lbetue26bbvtwe3F7chtzG3R7dWt2i3cLeGt5C3m7egt6u3w7fNt9a37Lf9uBG4Jbg1uFG4Xrh2uIa4mbipuL243LjquPy5CbkguS+5MbkzuTW5N7lBuUS5SLlLuVC5U7lWuVm5XblfuWG5Y7lluWe5abltuXi5gbmOuau5sLnCucq50LniufG6AroIugm6Erocuim6Lro4ukS6SrpeumW6c7p8uoa6nbrOutm657rzuwC7ELsWuy67MrtCu067T7tau267dLt4u427kbuZu6O7q7u/u8u71bveu+y7/LwAvAa8C7wMvBW8IrwtvDe8RLxVvGm8fLySvKK8pLyqvLO8u7zGvMu81bzavOq877z1vPi9Br0WvR+9I70zvUa9Sr1PvWC9aL2Ivaa9yr3pvey9873/vhe+Lr4zvke+XL5rvn6+lb6yvs++4775vwy/Hb8qv0C/XL93v4u/pb+4v9W/5b/+wABAEcAAQBzAAEApwABASsAAQFbAAEBowABAc8AAQInAAECPwABAq8AAQLPAAEC/wABAy8AAQN7AAED1wABBAsAAQRLAAEEXwABBH8AAQS7AAEFLwABBY8AAQXXAAEGFwABBjcAAQZ3AAEGlwABBrsAAQbnAAEHFwABBzMAAQeDAAEHqwABB+sAAQhzAAEIywABCSMAAQl3AAEJwwABCiMAAQpPAAEKZwABCqMAAQrjAAELHwABCz8AAQtnAAELawABC28AAQurAAEL1wABDAMAAQxPAAEMkwABDNMAAQ0rAAENdwABDc8AAQ4bAAEONwABDscAAQ8HAAEPPwABD48AAQ/rAAEQMwABEIMAARDzAAERQwABEYcAARGrAAER2wABEkcAARLPAAETOwABE7MAARP3AAEURwABFIMAARUPAAEVNwABFUsAARXnAAEWawABFtsAARdjAAEX0wABGA8AARhfAAEYfwABGQ8AARnHAAEaewABGq8AARsrAAEbbwABG6MAARvDAAEb8wABHAcAARwzAAEcVwABHHsAARyXAAEcswABHQsAAR0zAAEdNwABHY8AAR3fAAEd9wABHicAAR4/AAEegwABHscAAR7vAAEfUwABH2MAAR+3AAEf3wABICsAASBXAAEgpwABILcAASDPAAEhCwABIVMAASF3AAEhgwABIb8AASIDAAEiQwABIm8AASKXAAEivwABIvMAASMDAAEjFwABI0sAASOnAAEjqwABI+8AASQHAAEkPwABJEcAASRjAAEkewABJIMAASS/AAEkxwABJQcAASULAAElIwABJTsAASVXAAEldwABJZ8AASWrAAEl6wABJfMAASYjAAEmUwABJn8AASaPAAEmmwABJqsAASbDAAEm7wABJw8AASdDAAEnhwABJ5cAASenAAEoDwABKHsAASibAAEowwABKOMAASkLAAEpHwABKTMAASlPAAEpXwABKY8AASmjAAEpuwABKe8AASoLAAEqLwABKkcAASqHAAEq9wABKwsAASsPAAErJwABKzsAAStzAAErdwABK4sAASvTAAEr8wABK/cAASv/AAEsdwABLM8AASzzAAEtRwABLYMAAS3HAAEt6wABLe8AAS4HAAEuNwABLm8AAS6jAAEvEwABL1sAAS9vAAEviwABL+sAATAHAAEwTwABMF8AATCLAAEwqwABMNcAATEDAAExMwABMT8AATFXAAExfwABMZsAATHDAAEx8wABMiMAATKHAAEyvwABMsMAATLHAAEyywABMs8AATLTAAEy1wABMtsAATLfAAEzAwABMyMAATNTAAEzVwABM6MAATOzAAEzywABM/MAATQ3AAE0ZwABNKcAATTDAAE04wABNR8AATU/AAE1RwABNUsAATVTAAE1YwABNW8AATWXAAE1rwABNc8AATX7AAE2CwABNhsAATYrAAE2OwABNksAATZbAAE2ewABNpcAATabAAE2uwABNvsAATcfAAE3MwABN08AATdbAAE3dwABN4cAATeLAAE3jwABN6MAATenAAE30wABOAMAATgvAAE4bwABOHcAATijAAE43wABOQcAATkvAAE5WwABOXcAATl7AAE5gwABOaMAATm/AAE5ywABOecAATn/AAE6DwABOh8AATo3AAE6hwABOpcAATqvAAE6zwABOw8AATtTAAE7WwABO5sAATunAAE7ywABO9MAATvvAAE78wABO/8AATwzAAE8QwABPFMAATxrAAE8cwABPKcAATzLAAE89wABPPsAATz/AAE9WwABPaMAAT2rAAE9rwABPeMAAT4bAAE+QwABPksAAT5TAAE+WwABPmMAAT5rAAE+nwABPtsAAT7vAAE/AwABPxcAAT8rAAE/PwABP4MAAT+jAAE/ywABP+cAAT/7AAFAFwABQDsAAUBjAAFAjwABQKsAAUDHAAFA3wABQP8AAUETAAFBHwABQTMAAUFPAAFBbwABQZMAAUGrAAFBxwABQisAAUJTAAFChwABQqsAAULHAAFC3wABQzsAAUNPAAFDiwABQ+MAAUQXAAFEhwABRNMAAUUrAAFFOwABRUsAAUVjAAFFjwABRbMAAUX7AAFGDwABRlcAAUZzAAFGswABRvcAAUdHAAFHdwABR6MAAUfTAAFH+wABSC8AAUg/AAFIVwABSIsAAUirAAFI2wABSPsAAUkTAAFJOwABSX8AAUmvAAFJwwABSe8AAUobAAFKMwABSnsAAUqbAAFLBwABSysAAUtPAAFLgwABS68AAUvLAAFL9wABTCMAAUxXAAFMewABTK8AAUzzAAFNFwABTecAAU4DAAFOywABTusAAU+3AAFP0wABUJsAAVDPAAFRrwABUdsAAVKzAAFS1wABU6cAAVPDAAFT5wABVFMAAVS/AAFVEwABVWcAAVWXAAFVywABVd8AAVYXAAFWWwABVm8AAVaPAAFWqwABVtMAAVbrAAFXLwABV1cAAVenAAFX9wABWD8AAVjTAAFY1wABWQMAAVkfAAFZNwABWVsAAVl7AAFZkwABWbMAAVnHAAFZ9wABWhsAAVpDAAFaYwABWrcAAVsDAAFbGwABW2MAAVuDAAFbtwABW9MAAVwDAAFcRwABXKcAAVzTAAFc+wABXSsAAV1nAAFdnwABXbcAAV3PAAFd+wABXjsAAV5vAAFejwABXq8AAV7XAAFe/wABX1cAAV+DAAFfnwABX98AAWAHAAFgHwABYDMAAWBDAAFgUwABYHsAAWCTAAFgzwABYOsAAWEjAAFhkwABYeMAAWIfAAFiPwABYm8AAWKjAAFiywABYxsAAWNXAAFjpwABY+cAAWQjAAFkRwABZFcAAWR7AAFkjwABZJ8AAWSzAAFk7wABZSMAAWU3AAFlWwABZYsAAWWrAAFl8wABZj8AAWaPAAFmswABZt8AAWcfAAFnTwABZ8cAAWfnAAFoCwABaDcAAWh3AAFojwABaNMAAWkbAAFpbwABaZsAAWm/AAFp7wABah8AAWprAAFqkwABasMAAWrXAAFrHwABa1MAAWurAAFsIwABbDsAAWxjAAFsnwABbOsAAW03AAFtbwABbasAAW3HAAFt7wABbicAAW4/AAFufwABbrcAAW7bAAFu/wABbz8AAW9nAAFvjwABb9cAAW/rAAFwFwABcDsAAXBfAAFwhwABcNsAAXEvAAFxYwABccMAAXIHAAFySwABcqMAAXLHAAFzKwABc1MAAXOfAAFzywABc/sAAXQrAAF0XwABdJ8AAXUDAAF1dwABdasAAXXnAAF2PwABdm8AAXb3AAF3owABd8cAAXhPAAF45wABeS8AAXmHAAF6CwABem8AAXqvAAF6/wABe2MAAXvXAAF79wABfIsAAX0HAAF9VwABfbMAAX3TAAF+IwABfkMAAX6TAAF+uwABfvMAAX9PAAF/dwABf6cAAX/bAAGAKwABgIMAAYCbAAGAswABgMsAAYDrAAGBBwABgTMAAYF7AAGB1wABghcAAYJPAAGCowABguMAAYM3AAGDjwABg/sAAYQ7AAGEjwABhNMAAYT3AAGFTwABhX8AAYWrAAGF5wABhfsAAYYnAAGGZwABho8AAYbPAAGHFwABh3MAAYeHAAGHpwABh+8AAYgzAAGIXwABiK8AAYjzAAGJRwABiacAAYm3AAGJ1wABiesAAYoPAAGKPwABimcAAYqbAAGKrwABixMAAYsnAAGLRwABi28AAYu7AAGL3wABjDMAAYxPAAGMWwABjJ8AAYz3AAGNIwABjVMAAY2TAAGNvwABjf8AAY4rAAGOSwABjqsAAY7nAAGPFwABj08AAY93AAGPkwABj78AAY/fAAGQHwABkEsAAZCLAAGQzwABkScAAZFrAAGRwwABkhsAAZKHAAGS/wABk3MAAZObAAGT2wABlBMAAZRnAAGUpwABlPsAAZUfAAGVVwABlXsAAZWzAAGV1wABlesAAZYPAAGWRwABloMAAZbTAAGXIwABl2MAAZeDAAGX1wABmCsAAZiTAAGY0wABmScAAZl7AAGZ4wABmh8AAZpTAAGapwABmu8AAZr7AAGbFwABmzcAAZt7AAGbiwABm6sAAZu/AAGcFwABnGsAAZyPAAGcswABnNsAAZ1DAAGdjwABnbsAAZ3jAAGeQwABnocAAZ63AAGeywABnwcAAZ9fAAGfnwABn68AAZ/nAAGgOwABoHsAAaCXAAGguwABoMsAAaEDAAGhVwABoZcAAaHPAAGh+wABohcAAaJTAAGipwABoscAAaLzAAGjIwABo2cAAaOXAAGjywABo/cAAaQ7AAGkawABpJ8AAaTnAAGlDwABpUsAAaV/AAGlpwABpe8AAaYbAAGmWwABpocAAabHAAGm+wABpyMAAadrAAGnlwABp9cAAagPAAGoWwABqHcAAainAAGouwABqOMAAakPAAGpTwABqXcAAamzAAGp2wABqhcAAao3AAGqawABqqcAAarXAAGrJwABq1sAAaujAAGr/wABrEcAAaxnAAGswwABrPcAAa0DAAGtIwABrV8AAa2vAAGt2wABrgMAAa5DAAGukwABrrsAAa8fAAGvQwABr48AAa/vAAGwAwABsCsAAbBTAAGwewABsKsAAbDXAAGxFwABsU8AAbGbAAGx1wABsicAAbJvAAGyvwABsv8AAbNTAAGziwABs9cAAbQPAAG0WwABtIcAAbTHAAG09wABtRsAAbU3AAG1ewABtbMAAbXbAAG19wABtkMAAbZ/AAG2kwABtuMAAbcLAAG3TwABt3MAAbefAAG32wABuDcAAbinAAG40wABuRMAAblPAAG5nwABub8AAbnbAAG6DwABuiMAAbo3AAG6XwABuocAAbqvAAG60wABuw8AAbtHAAG7ewABu6MAAbvPAAG77wABvDsAAbyHAAG8xwABvQsAAb1HAAG9cwABvacAAb3HAAG+JwABvnMAAb7TAAG+4wABvwcAAb8zAAG/VwABv3sAAb+rAAG/swABv/MAAcAfAAHASwABwJsAAcD3AAHBQwABwYsAAcGrAAHB1wABwfMAAcILAAHCKwABwlcAAcJzAAHCnwABwssAAcMLAAHDnwABw8sAAcQLAAHEKwABxF8AAcSHAAHEwwABxPcAAcUbAAHFbwABxbcAAcXnAAHGEwABxjcAAcZ3AAHGkwABxtcAAccbAAHHLwABx0MAAcdXAAHHXwABx5cAAce/AAHH6wAByBcAAchXAAHIqwAByM8AAckHAAHJSwAByZcAAcnLAAHKIwABylsAAcqTAAHK0wABywcAAcszAAHLewABy+cAAcwLAAHMRwABzGcAAcyDAAHMswABzPcAAc0nAAHNawABzdMAAc4DAAHORwABzq8AAc7bAAHPGwABz38AAc+3AAHQAwAB0HMAAdCHAAHQvwAB0QsAAdF7AAHRswAB0fMAAdI/AAHSrwAB0rMAAdLfAAHTGwAB01sAAdO/AAHTxwAB1AcAAdQ3AAHUewAB1OMAAdUPAAHVTwAB1bMAAdXzAAHWRwAB1r8AAdbHAAHWywAB1zsAAdd3AAHX+wAB2KMAAdirAAHY5wAB2QMAAdk/AAHZhwAB2dcAAdpLAAHalwAB2vcAAdt7AAHbxwAB3CcAAdyrAAHcuwAB3N8AAd0LAAHdKwAB3WMAAd2DAAHdtwAB3d8AAd5bAAHelwAB3ucAAd8LAAHfQwAB328AAd/DAAHf6wAB4AsAAeAjAAHgawAB4J8AAeDXAAHg/wAB4TsAAeFfAAHhbwAB4ZcAAeHDAAHh7wAB4iMAAeK7AAHjCwAB4y8AAeNjAAHjhwAB468AAePbAAHkDwAB5DcAAeRnAAHkmwAB5LsAAeTfAAHk/wAB5ScAAeVXAAHlvwAB5gsAAeYrAAHmWwAB5psAAebTAAHnDwAB5ycAAedPAAHndwAB56MAAee7AAHn8wAB6BcAAehPAAHoWwAB6H8AAeijAAHoywAB6PsAAekPAAHpEwAB6WMAAemLAAHppwAB6b8AAenzAAHqEwAB6isAAepDAAHqewAB6o8AAeqrAAHqxwAB6wMAAesTAAHrPwAB61cAAeuzAAHr3wAB6/MAAew/AAHsmwAB7McAAezvAAHtAwAB7ScAAe1DAAHtdwAB7bsAAe3jAAHuOwAB7m8AAe67AAHvAwAB70cAAe+nAAHv/wAB8FsAAfC/AAHw7wAB8RsAAfFjAAHxswAB8dsAAfH/AAHyKwAB8o8AAfLrAAHzWwAB838AAfOXAAH0JwAB9HsAAfSzAAH03wAB9SsAAfVzAAH1dwAB9Z8AAfXbAAH2IwAB9msAAfZzAAH2swAB9vcAAfc3AAH3dwAB97MAAfgDAAH4cwAB+MsAAfkjAAH5awAB+dsAAfofAAH6kwAB+z8AAftjAAH7qwAB+8MAAfxjAAH8hwAB/M8AAf1TAAH9rwAB/b8AAf3PAAH+UwAB/nMAAf6TAAH+ywAB/vsAAf9rAAH/2wACACcAAgB7AAIAlwACAQcAAgEnAAIBQwACAX8AAgGjAAIB1wACAf8AAgJHAAICYwACAsMAAgM3AAIDkwACBAMAAgRfAAIExwACBQcAAgVXAAIFfwACBY8AAgW7AAIF1wACBfsAAgZjAAIGtwACBv8AAgcbAAIHUwACB3sAAge/AAIH5wACCCsAAghbAAIIjwACCPcAAgkbAAIJSwACCZsAAgnXAAIKOwACCqcAAgrHAAILHwACC0cAAgtTAAILowACDBMAAgyjAAINWwACDa8AAg4fAAIOLwACDpMAAg7TAAIPBwACD08AAg9vAAIPvwACD/cAAhBDAAIQiwACENMAAhErAAIRawACEa8AAhHbAAISBwACElcAAhK3AAIS+wACEysAAhNzAAITowACE9MAAhQnAAIUVwACFIMAAhSzAAIVEwACFTsAAhVfAAIVkwACFbMAAhXrAAIWFwACFm8AAhbHAAIW4wACF3sAAhgTAAIY9wACGUMAAhljAAIZ6wACGjsAAhqfAAIbJwACG48AAhvrAAIcawACHNMAAhz7AAIdEwACHUcAAh3DAAIeMwACHkMAAh5nAAIelwACHs8AAh8fAAIfgwACH88AAh/vAAIgGwACIFsAAiDDAAIg2wACIQcAAiEjAAIhcwACIZcAAiHDAAIiCwACIlcAAiKHAAIivwACItcAAiL7AAIjOwACI3sAAiOzAAIj0wACJC8AAiSvAAIlAwACJT8AAiV7AAIlxwACJg8AAiZXAAImgwACJx8AAidPAAIn2wACKA8AAih/AAIpbwACKjcAAiqXAAIrAwACK0cAAiuTAAIrywACK/8AAixLAAIsawACLNMAAi0bAAItOwACLZsAAi3DAAIuYwACLrMAAi8XAAIvXwACL58AAi/LAAIv3wACMFcAAjDHAAIxEwACMUMAAjFjAAIxqwACMgcAAjIfAAIyzwACNEcAAjRXAAI1XwACNbcAAjanAAI3nwACOBsAAjkHAAI5gwACObcAAjnXAAI6XwACOxsAAjs/AAI7uwACPEcAAjxvAAI8kwACPLcAAjzbAAI84wACPP8AAj13AAI90wACPfcAAj4XAAI+OwACPj8AAj5PAAI+bwACPo8AAj8zAAI/OwACP0cAAj93AAI/owACP98AAkArAAJAYwACQIsAAkC/AAJA5wACQRcAAkFjAAJBlwACQcsAAkHrAAJCVwACQssAAkMPAAJDSwACQ3cAAkObAAJDuwACRAMAAkQ3AAJEcwACRM8AAkUXAAJF3wACRpMAAka7AAJG4wACRwMAAkcrAAJHvwACR9sAAkf7AAJIiwACSLMAAkjbAAJI+wACSWMAAkmbAAJJ7wACSgMAAkqDAAJKtwACSwsAAktTAAJLhwACS8MAAkvnAAJMEwACTFcAAkyTAAJMmwACTNcAAkzzAAJNPwACTasAAk3PAAJOcwACTo8AAk6fAAJOzwACTv8AAk8jAAJPPwACT2cAAk9zAAJPqwACT9cAAlAvAAJQPwACUF8AAlCrAAJROwACUVMAAlGbAAJRzwACUgMAAlJXAAJSlwACUxMAAlPPAAJU1wACVUsAAlVXAAJVnwACVbcAAlXXAAJWBwACVh8AAlZHAAJWfwACVtMAAlcbAAJXRwACV3MAAleDAAJX6wACWCcAAlhHAAJYewACWKcAAljHAAJZAwACWS8AAlljAAJZmwACWbsAAlnfAAJZ/wACWhcAAlozAAJaTwACWm8AAlqXAAJaswACWx8AAltfAAJbnwACXCcAAl0HAAJdfwACXecAAl5DAAJenwACX3cAAmELAAJhVwACYb8AAmILAAJi7wACYysAAmOLAAJj4wACZJMAAmXTAAJmcwACZwMAAmePAAJn2wACaDMAAmhvAAJomwACaQcAAmnLAAJqJwACanMAAmrDAAJrXwACbB8AAmyrAAJs+wACbaMAAm5LAAJvFwACb68AAnBjAAJw5wACchMAAnNDAAJztwACdBsAAnSLAAJ0/wACdh8AAnaDAAJ21wACdxsAAndzAAJ4EwACeFsAAni/AAJ5LwACed8AAno/AAJ6uwACew8AAnxPAAJ8kwACfRMAAn1zAAJ9wwACfxsAAoDHAAKBBwACgW8AAoHLAAKCDwACgu8AAoMjAAKDewACg8sAAoRTAAKFMwAChasAAoYTAAKGrwACiO8AAoqzAAKLPwACi7sAAowTAAKMqwACjjMAAo7nAAKPbwACj+cAApCjAAKR7wACkpsAApM3AAKTjwAClKcAApUrAAKVcwACldcAApZfAAKXGwACl5MAApf7AAKYdwACmV8AAponAAKakwACmu8AAptbAAKb8wACnH8AAp0HAAKdfwACngcAAp6rAAKfbwACoAMAAqCzAAKg+wACocsAAqIDAAKiVwACov8AAqPvAAKkhwACpQ8AAqWzAAKmXwACpvMAAqeLAAKoOwACqJcAAqjvAAKpOwACqW8AAqnXAAKqTwACqrcAAqtXAAKscwACrQMAAq2vAAKuTwACr48AArC7AAKxSwACsfcAArKDAAKzDwACs+MAArVTAAK1wwACtocAArc7AAK3lwACuCsAArlXAAK5xwACuksAArq/AAK7OwACu/cAAr1LAAK99wACvpMAAr7TAAK/AwACv0sAAr/7AALAxwACwWcAAsH3AALCUwACwu8AAsTrAALGVwACxuMAAsdfAALHrwACyCMAAsjDAALJJwACybsAAso7AALKswACy3cAAsxvAALM1wACzVsAAs2XAALOuwAC0AcAAtAzAALQewAC0PMAAtFbAALR3wAC0h8AAtLbAALTcwAC06MAAtPvAALUPwAC1OcAAtWfAALV3wAC1jsAAtbPAALYHwAC2N8AAtljAALZ1wAC2jcAAtqnAALbnwAC3CMAAtyDAALc0wAC3VMAAt3fAALeTwAC3q8AAt8XAALfhwAC4AMAAuBjAALgswAC4R8AAuGXAALh8wAC4j8AAuKTAALjGwAC45MAAuP7AALkZwAC5N8AAuU7AALlhwAC5g8AAuaHAALm7wAC53MAAugHAALoewAC6N8AAulvAALp9wAC6l8AAurXAALrawAC668AAuyTAALtXwAC7ZMAAu3jAALuGwAC7rsAAvFPAALxdwAC8bsAAvI/AALzJwAC85sAAvQzAAL0wwAC9VsAAvYTAAL2mwAC9z8AAvfjAAL41wAC+WsAAvobAAL6iwAC+yMAAvvzAAL8UwAC/L8AAv07AAL9zwAC/s8AAv9TAAL/6wADAIsAAwDrAAMBgwADAdMAAwI/AAMCjwADAs8AAwMPAAMDawADA+sAAwXfAAMGTwADBq8AAwdvAAMH8wADCR8AAwmTAAMJ9wADCmMAAwrXAAML4wADDEcAAwybAAMM9wADDZMAAw6TAAMPHwADD5sAAxA7AAMQqwADEQMAAxFjAAMRzwADEksAAxL3AAMTowADFD8AAxTLAAMVUwADFw8AAxeHAAMX7wADGJMAAxojAAMatwADGzsAAxvfAAMeBwADHpsAAx8fAAMfvwADIO8AAyF/AAMh/wADIkcAAyLTAAMkDwADJIsAAyT3AAMllwADJpcAAycnAAMnpwADKEsAAykTAAMrpwADLF8AAy0HAAMtgwADLgsAAzA/AAMwtwADMR8AAzGPAAMyxwADMycAAzN3AAM0AwADNPMAAzVvAAM12wADNpcAAzcPAAM4dwADON8AAzk3AAM5wwADOscAAztDAAM7rwADPBcAAzyzAAM98wADPn8AAz77AAM/fwADQAMAA0EbAANBjwADQhMAA0KjAANDDwADQ9cAA0QzAANElwADRQ8AA0VnAANF/wADRkcAA0arAANHCwADR6cAA0f3AANIYwADSNMAA0ovAANKjwADSt8AA0s7AANLewADTIsAA037AANOKwADTncAA08LAANQMwADUYcAA1ILAANSjwADUy8AA1O/AANUewADVXsAA1X7AANWawADVr8AA1cXAANXxwADWNsAA1kjAANZcwADWdcAA1oTAANbBwADW4sAA1u3AANb/wADXFMAA1z3AANePwADXoMAA177AANfWwADX8cAA2BPAANgqwADYPcAA2FLAANhowADYo8AA2LXAANjJwADY4sAA2P/AANklwADZQsAA2VvAANl7wADZm8AA2ebAANoYwADaNMAA2l7AANqBwADaosAA2srAANrnwADbBMAA2yjAANtEwADbicAA26HAANu5wADb2MAA2//AANwqwADcTcAA3GzAANyGwADcqcAA3L/AANzOwADc68AA3QTAAN1NwADdccAA3YbAAN2iwADdx8AA3fnAAN4awADeN8AA3lXAAN6ewADe88AA3w3AAN8uwADfRsAA32/AAN+DwADfk8AA36nAAN/nwADgH8AA4DHAAOBKwADgXcAA4J7AAODDwADg0sAA4OjAAOEEwADhNMAA4YnAAOGhwADhtcAA4drAAOH2wADiF8AA4i/AAOJDwADiYsAA4o7AAOKzwADi28AA4v/AAOMZwADjLsAA41zAAONtwADjesAA45zAAOPKwADkBsAA5DDAAORYwADkicAA5LzAAOTZwADlCMAA5T7AAOVxwADlzcAA5ezAAOYbwADmRsAA5nbAAOaNwADm2sAA5wzAAOcfwADnOcAA51nAAOeqwADnxsAA597AAOf0wADoGcAA6C7AAOhPwADobMAA6IrAAOjowADpTcAA6WfAAOl9wADpm8AA6bXAAOonwADqPcAA6k/AAOpxwADqmsAA6rjAAOrSwADq78AA6x7AAOtPwADraMAA64jAAOudwADr1sAA7ALAAOwTwADsK8AA7FLAAOyOwADsu8AA7N7AAOz9wADtEMAA7UvAAO1rwADtesAA7ZDAAO2twADt18AA7fDAAO4FwADuGcAA7jvAAO5bwADuecAA7pPAAO6+wADu/MAA7yPAAO9GwADvZsAA757AAO+6wADv0sAA7+rAAPAbwADwL8AA8D/AAPBPwADwbcAA8IfAAPCdwADwtcAA8ObAAPD6wADxCsAA8SjAAPFCwADxWMAA8WjAAPGHwADxvsAA8dnAAPHwwADyD8AA8jXAAPJTwADydcAA8pPAAPKywADy6cAA8wTAAPMbwADzOsAA82DAAPN+wADzoMAA877AAPPYwAD0BcAA9DjAAPROwAD0YMAA9ITAAPTEwAD05MAA9QDAAPUdwAD1RsAA9V7AAPWDwAD1pMAA9cPAAPXlwAD2AMAA9hfAAPYvwAD2TsAA9nDAAPaLwAD2osAA9sbAAPbkwAD3BMAA9yDAAPc7wAD3YcAA94rAAPehwAD3s8AA99HAAPfvwAD4GMAA+EXAAPhfwAD4gMAA+IzAAPiswAD4tMAA+MPAAPjqwAD5McAA+VTAAPlzwAD5j8AA+afAAPnKwAD53sAA+e3AAPoIwAD6F8AA+j7AAPpjwAD6bsAA+oDAAPqVwAD6scAA+sLAAPrSwAD66sAA+w3AAPtXwAD7dcAA+5TAAPu6wAD71cAA+/PAAPwKwAD8HcAA/CvAAPxEwAD8XMAA/HHAAPyNwAD8nsAA/K/AAPy9wAD8ysAA/N7AAPz1wAD9FsAA/SnAAP0+wAD9WMAA/WjAAP10wAD9h8AA/Z3AAP28wAD9zsAA/dzAAP33wAD+IsAA/jnAAP5MwAD+YcAA/oHAAP6xwAD+ysAA/ubAAP7+wAD/GcAA/0PAAP9awAD/bcAA/4DAAP+XwAD/sMAA/8PAAP/dwAD/9cABAB3AAQBhwAEAdcABAIXAAQCWwAEAssABAN7AAQD2wAEBCsABAR7AAQFIwAEBWMABAWnAAQGAwAEBmsABAcTAAQHawAEB7MABAgPAAQImwAECOcABAkjAAQJhwAECecABAo7AAQKowAECxMABAt3AAQMRwAEDJsABA0LAAQNYwAEDZcABA3fAAQOQwAEDpcABA7rAAQPLwAED48ABA/nAAQQewAEEMMABBD7AAQRVwAEEasABBIXAAQSWwAEEo8ABBLfAAQTawAEE6sABBPbAAQUIwAEFF8ABBSbAAQUxwAEFQ8ABBV/AAQWUwAEF7cABBgXAAQYZwAEGLMABBlvAAQaXwAEGpsABBrzAAQbVwAEHD8ABByTAAQc1wAEHTsABB9bAAQfrwAEIB8ABCBzAAQhUwAEIZcABCHLAAQh+wAEImcABCNTAAQjrwAEI/sABCRbAAQknwAEJUsABCXbAAQmDwAEJl8ABCbbAAQnewAEKK8ABCkbAAQpowAEKlMABCsTAAQsMwAELNMABC2DAAQuPwAELn8ABC8jAAQvUwAEL58ABDAXAAQwtwAEMUsABDGzAAQyNwAEMqMABDM3AAQ0WwAENLcABDUvAAQ1cwAENhsABDZPAAQ2nwAENwcABDfDAAQ4GwAEOI8ABDjbAAQ5iwAEOccABDofAAQ6hwAEOxMABDtvAAQ7xwAEPA8ABDxXAAQ9MwAEPWsABD2rAAQ9/wAEPncABD9bAAQ/5wAEQE8ABEDTAARBUwAEQccABEI3AARClwAEQt8ABG2HAARtvwAEbhMABG5fAARwqwAEcOcABHE/AARxqwAEcl8ABHK7AARzBwAEc6sABHRrAAR0/wAEdYMABHXrAAR4IwAEeHsABHjDAAR5LwAEewsABHtnAAR7swAEfCMABH4zAAR+kwAEfuMABH8zAASA2wAEgRsABIFLAASBqwAEgj8ABIKPAASCzwAEgycABIRbAASEowAEhNsABIU3AASGkwAEht8ABIcbAASHcwAEiMcABIkPAASJRwAEicsABIqPAASLAwAEi2cABIwLAASM5wAEjpcABI8rAASP2wAEkHMABJFbAASRrwAEkjcABJLbAASTLwAElCMABJT/AASVQwAElaMABJXfAASWuwAElzcABJdjAASXqwAEmCsABJjHAASZ4wAEmlMABJqzAASbBwAEm7sABJynAASd5wAEnosABJ8fAASfqwAEoDsABKD3AAShdwAEoecABKKjAASjvwAEpGsABKUHAASlhwAEplcABKbLAASniwAEqDsABKjfAASqAwAEqpsABKsvAASrswAErCsABKynAAStewAErecABK5vAASu1wAEr8MABLAbAASwjwAEsQ8ABLIPAASyfwAEst8ABLM3AASzrwAEtE8ABLTXAAS1PwAEtacABLYrAAS2mwAEt1MABLezAAS4KwAEuKcABLkbAAS6iwAEuz8ABLujAAS8EwAEvJMABLz3AAS9nwAEvfMABL4/AAS+rwAEvycABMArAATAkwAEwScABMGrAATChwAEw5sABMRvAATFOwAExfcABMaXAATHUwAEyDsABMjTAATJfwAEykcABMqfAATLBwAEy08ABMuHAATLxwAEzBsABMyzAATNBwAEzUsABM2jAATOAwAEzpMABM9TAATP0wAE0G8ABND7AATSHwAE0psABNMnAATTvwAE1FsABNU7AATVxwAE1m8ABNbXAATX9wAE2E8ABNizAATZJwAE2XcABNoDAATaQwAE2nMABNqnAATbOwAE3B8ABNyjAATdFwAE3X8ABN4nAATe8wAE34sABOATAATggwAE4P8ABOFfAAThrwAE4jcABONfAATj1wAE5F8ABOTzAATliwAE5mcABObvAATnkwAE5/8ABOjfAATpywAE6icABOqfAATq9wAE68MABOybAATs4wAE7UcABO2nAATuewAE71sABO+rAATwFwAE8G8ABPE7AATxgwAE8ecABPJPAATy4wAE838ABPPXAAT0HwAE9GsABPTbAAT13wAE9m8ABPbPAAT3HwAE93cABPfzAAT5gwAE+nMABPrfAAT7OwAE+6cABPw3AAT9UwAE/dMABP5DAAT+jwAE/0sABQA7AAUAdwAFAM8ABQEzAAUCGwAFAm8ABQKzAAUDWwAFBGMABQT7AAUFgwAFBeMABQZXAAUH6wAFCOcABQlLAAUJnwAFCiMABQrHAAUMpwAFDTsABQ2/AAUOXwAFEKMABREzAAURswAFEnMABRTbAAUWCwAFFrsABRdbAAUX7wAFGacABRorAAUanwAFGzcABRznAAUdbwAFHecABR6fAAUgcwAFIRsABSGzAAUiNwAFIxsABSOPAAUkHwAFJIcABSUrAAUlgwAFJcsABSY7AAUnCwAFJ2sABSfnAAUoYwAFKOsABSlfAAUp1wAFKmsABSrzAAUrfwAFK/cABSyLAAUtMwAFNTMABTXLAAU2UwAFNxMABTrDAAU7cwAFPBMABTyzAAVFTwAFRd8ABUZfAAVHFwAFS2MABUwLAAVMowAFTSMABU4LAAVPCwAFT3sABVAHAAVQiwAFUUMABVG3AAVSGwAFUosABVMfAAVURwAFVMsABVU/AAVVuwAFVlMABVfjAAVY8wAFWXsABVnzAAVaZwAFWwMABVuzAAVcPwAFXOcABV07AAVdfwAFXgcABV73AAVg9wAFYW8ABWHXAAViRwAFYrsABWOvAAVkEwAFZGcABWT7AAVl2wAFZl8ABWb/AAVnmwAFaEMABWjPAAVpdwAFah8ABWq7AAVrUwAFa9sABWxzAAVtNwAFbb8ABW43AAVuuwAFb4sABW//AAVwYwAFcRcABXGjAAVyRwAFcwcABXPTAAV0uwAFdXcABXZPAAV20wAFd38ABXgTAAV4rwAFeTsABXm3AAV6DwAFensABXrXAAV7WwAFe+MABXxXAAV8uwAFfVsABX3PAAV+XwAFfwsABX/HAAWAawAFgRcABYGzAAWCiwAFgxsABYOjAAWEIwAFhJMABYVfAAWGOwAFhvcABYejAAWIJwAFiMMABYk3AAWJmwAFihsABYqTAAWLAwAFi2MABYvzAAWMSwAFjMsABY07AAWNswAFjhsABY63AAWPKwAFj7cABZAzAAWQ0wAFkacABZI3AAWStwAFkw8ABZOvAAWT9wAFlHcABZTbAAWVcwAFlocABZdnAAWX7wAFmGcABZjLAAWaKwAFmn8ABZrDAAWbCwAFm1cABZxTAAWdKwAFnWcABZ2/AAWeJwAFnoMABZ7bAAWfIwAFn58ABaCzAAWh6wAFolcABaKzAAWjGwAFo5MABaSLAAWlpwAFpg8ABaZnAAWmywAFpz8ABagzAAWpSwAFqa8ABaoDAAWqYwAFqtcABavLAAWs4wAFrUcABa2bAAWt+wAFrnsABa+fAAWwqwAFsRsABbF7AAWxzwAFsjcABbNfAAW0qwAFtQMABbVLAAW1nwAFthsABbc7AAW4PwAFuKsABbkHAAW5UwAFud8ABbsTAAW7jwAFu/sABbxfAAW8vwAFvRMABb1vAAW93wAFvi8ABb8vAAW/bwAFv7cABcATAAXAhwAFwO8ABcFTAAXBpwAFwfcABcMzAAXDcwAFw88ABcQnAAXEhwAFxVsABcW/AAXGMwAFx28ABcmfAAXKAwAFynMABcrzAAXLTwAFzCMABcxvAAXMqwAFzQ8ABc2nAAXN+wAFzj8ABc6zAAXQowAF0QcABdGHAAXR4wAF0kMABdLLAAXTFwAF03MABdPbAAXUSwAF1tMABdczAAXXrwAF2A8ABdnzAAXaQwAF2q8ABdsrAAXbfwAF27cABdwjAAXcowAF3SsABd1nAAXeXwAF34MABd+vAAXf9wAF4FsABeE7AAXhjwAF4dMABeI7AAXijwAF4vMABeQbAAXkXwAF5JMABeUDAAXl+wAF5u8ABedPAAXnywAF6FcABekXAAXpkwAF6hMABeqrAAXrIwAF7eMABe5nAAXuzwAF7ycABe+jAAXwJwAF8JMABfEPAAXxlwAF8h8ABfLzAAXzawAF89MABfRbAAX1LwAF9acABfYPAAX2lwAF918ABffXAAX4UwAF+OcABflbAAX6VwAF+rsABfs7AAX7nwAF/GcABfy7AAX9MwAF/aMABf37AAX+YwAF/qsABf7jAAX/IwAF/38ABgBLAAYAlwAGAP8ABgFzAAYCOwAGApMABgL3AAYDdwAGA/8ABgSvAAYFJwAGBbsABgYzAAYHhwAGCJsABgkDAAYJhwAGChcABgrHAAYLRwAGC7cABgwDAAYNswAGDsMABg7/AAYPMwAGD4sABg/7AAYQfwAGEa8ABhIPAAYSiwAGEv8ABhPvAAYUzwAGFTMABhWfAAYWHwAGFqcABhcHAAYXfwAGF+cABhiHAAYZ0wAGHJ8ABh0vAAYdrwAGHjsABh57AAYetwAGHyMABiALAAYg4wAGIT8ABiGjAAYiGwAGIoMABiOHAAYkDwAGJGcABiTbAAYlLwAGJj8ABiaDAAYmtwAGJvcABid7AAYoEwAGKJsABikPAAYpnwAGKg8ABirLAAYrdwAGK9cABiw/AAYsuwAGLW8ABi6DAAYvJwAGL7sABjBnAAYw+wAGMx8ABjOjAAY0FwAGNLcABjUfAAY2HwAGNpcABjbvAAY3NwAGN8sABjinAAY5KwAGOasABjpLAAY6lwAGO38ABjzXAAY9EwAGPWsABj3DAAY+twAGP7sABkADAAZAbwAGQNMABkFHAAZCGwAGQucABkNLAAZDywAGRB8ABkTzAAZF1wAGRhsABkZ7AAZGuwAGR5cABkiDAAZIswAGSP8ABklrAAZKCwAGSmcABkrLAAZLQwAGS8cABkzDAAZNNwAGTZsABk4jAAZOxwAGUF8ABlDXAAZRawAGUa8ABlJTAAZTnwAGU9MABlP3AAZUZwAGVQsABlVrAAZVuwAGVh8ABlafAAZXLwAGV58ABlgrAAZYkwAGWj8ABluLAAZb4wAGXCsABlyTAAZd0wAGXisABl5zAAZezwAGYAMABmDPAAZhGwAGYYMABmHPAAZi8wAGYy8ABmOHAAZj/wAGZL8ABmUnAAZlswAGZjcABmanAAZnUwAGZ7MABmgvAAZonwAGaYsABmrzAAZrUwAGa8cABmxDAAZsywAGbZcABm4PAAZudwAGbvsABnAvAAZwowAGcQcABnFvAAZx1wAGci8ABnKjAAZzKwAGdI8ABnUHAAZ1bwAGdZcABnXXAAZ2KwAGdlsABnZ7AAZ2xwAGdw8ABndLAAZ3owAGd98ABngzAAZ4XwAGeKcABnkLAAZ5kwAGeecABnorAAZ6nwAGezMABnuXAAZ76wAGfC8ABnzbAAZ9DwAGfV8ABn2vAAZ+XwAGfp8ABn77AAZ/PwAGf88ABoADAAaAUwAGgH8ABoGXAAaCuwAGgtcABoMPAAaDpwAGhHMABobvAAaHdwAGh+8ABoijAAaJKwAGiecABopfAAaKxwAGi08ABowbAAaMkwAGjPsABo2XAAaOHwAGju8ABo9nAAaPzwAGkEsAB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ULXAAlDDwAJQ18ACUNnAAlDlwAJQ8sACUPzAAlEIwAJRDcACURXAAlEbwAJRKsACUTDAAlE8wAJRScACUVXAAlFjwAJRc8ACUYDAAlGPwAJRpsACUbnAAlHHwAJR2MACUevAAlIGwAJSE8ACUjLAAlJIwAJSXMACUmnAAlJ5wAJSiMACUpzAAlKswAJSvcACUszAAlLpwAJS8sACUvnAAlMAwAJTBsACUw3AAlMWwAJTI8ACUynAAlMxwAJTPsACU1nAAlNdwAJTbMACU4LAAlOmwAJTrcACU7fAAlPOwAJT4cACU+fAAlQFwAJUEcACVB3AAlQzwAJUO8ACVEXAAlRTwAJUYcACVGnAAlR4wAJUi8ACVJjAAlSgwAJUs8ACVLrAAlTLwAJU0sACVNjAAlTgwAJU+cACVQ3AAlUVwAJVIcACVSXAAlUxwAJVOcACVUXAAlVWwAJVWcACVWrAAlV/wAJVksACVaLAAlW1wAJVycACVc/AAlXbwAJV9cACVg3AAlYVwAJWJ8ACVi7AAlZMwAJWTsACVlbAAlaNwAJWoMACVrbAAla/wAJWzcACVtzAAlbpwAJW9MACVvnAAlb/wAJXEMACVxzAAlcswAJXMcACVzTAAldKwAJXTsACV2bAAld0wAJXg8ACV4/AAleiwAJXtcACV8fAAlfawAJX6cACV/jAAlgMwAJYJsACWDfAAlhIwAJYWsACWGvAAliCwAJYkcACWKLAAli1wAJYycACWNrAAljzwAJZBsACWRDAAlkawAJZI8ACWS3AAlkzwAJZOcACWUTAAllVwAJZXcACWWXAAlluwAJZdsACWYTAAlmKwAJZksACWZzAAlmkwAJZtMACWb7AAlm/wAJZwsACWdLAAlnvwAJaCsACWhzAAloywAJaRcACWlzAAlp0wAJaeMACWnzAAlp/wAJahMACWofAAlqNwAJaksACWprAAlqkwAJap8ACWrLAAlq+wAJaw8ACWsjAAlrOwAJa1MACWtvAAlrhwAJa48ACWuXAAlrnwAJa6cACWuvAAlrtwAJa78ACWvHAAlr3wAJbAcACWwTAAlsHwAJbCsACWxPAAlsWwAJbGMACWxrAAlscwAJbHsACWyDAAlsiwAJbJMACWybAAlsowAJbKsACWyzAAlsuwAJbMMACWzLAAls0wAJbNsACWzjAAls6wAJbPMACWz7AAltAwAJbQsACW0TAAltGwAJbWsACW2/AAlt1wAJbfsACW4DAAluCwAJbhMACW4bAAluIwAJbisACW4zAAluOwAJbkMACW5LAAluUwAJblsACW5jAAluawAJbnMACW57AAlugwAJbosACW6TAAlumwAJbqMACW6rAAlu9wAJbwcACW9XAAlvbwAJb4MACW/DAAlv/wAJcD8ACXBbAAlwjwAJcLcACXDrAAlxCwAJcVsACXGrAAlx/wAJcjsACXKfAAlyzwAJcxcACXNDAAlzXwAJc4sACXOzAAlzwwAJc8sACXPvAAl0CwAJdE8ACXRfAAl0bwAJdIcACXS7AAl07wAJdRcACXVDAAl1lwAJdasACXXbAAl16wAJdg8ACXY3AAl2TwAJdn8ACXanAAl2xwAJdusACXcDAAl3GwAJd0cACXdrAAl3ewAJd58ACXfDAAl32wAJeA8ACXgzAAl4qwAJeNsACXkTAAl5FwAJeSsACXlzAAl5rwAJebcACXm/AAl55wAJei8ACXpPAAl6owAJerMACXrXAAl7AwAJeycACXtHAAl7VwAJe2cACXt7AAl7mwAJe8cACXvnAAl8CwAJfCMACXw/AAl8kwAJfNcACX0vAAl9cwAJfYMACX2zAAl9xwAJffMACX4fAAl+PwAJfm8ACX6PAAl+ywAJfwsACX87AAl/TwAJf5cACX/PAAmAJwAJgDMACYBvAAmAjwAJgJsACYDjAAmBIwAJgUMACYF7AAmBlwAJgcsACYILAAmCKwAJgmMACYKDAAmCnwAJgtcACYL7AAmDAwAJgyMACYNXAAmDiwAJg98ACYQjAAmESwAJhFsACYR3AAmEmwAJhMsACYTXAAmE8wAJhRMACYUvAAmFZwAJhbMACYW/AAmGBwAJhgsACYY3AAmGUwAJhosACYanAAmGrwAJhvsACYdXAAmHWwAJh3cACYeTAAmHxwAJiAcACYgbAAmIewAJiL8ACYjPAAmI9wAJiRMACYlnAAmKBwAJikcACYprAAmK+wAJiysACYtXAAmLhwAJi6MACYvXAAmL5wAJi/sACYwnAAmMmwAJjNMACYznAAmM9wAJjSMACY03AAmNWwAJjW8ACY2bAAmNrwAJjd8ACY3zAAmOGwAJji8ACY5jAAmOdwAJjp8ACY6zAAmO3wAJjvMACY8DAAmPFwAJjyMACY83AAmPTwAJj18ACY97AAmPiwAJj58ACY/3AAmQNwAJkF8ACZCnAAmQ4wAJkRMACZF/AAmRzwAJkecACZIbAAmSXwAJkpMACZK/AAmS6wAJkwcACZMrAAmTNwAJk1cACZN3AAmTiwAJk9cACZQrAAmUVwAJlHMACZTbAAmVGwAJlTcACZVXAAmVbwAJldMACZYnAAmWawAJlm8ACZarAAmW/wAJlxcACZc7AAmXZwAJl3cACZebAAmXxwAJl9sACZgLAAmYMwAJmHcACZjDAAmY3wAJmPcACZkTAAmZMwAJmUMACZlbAAmZcwAJmZcACZmvAAmZzwAJmesACZoPAAmaNwAJmmsACZqzAAmaywAJmx8ACZs/AAmbiwAJm58ACZvHAAmb3wAJnCsACZxHAAmcXwAJnIMACZyfAAmctwAJnMcACZzTAAmdBwAJnVsACZ2nAAmd9wAJnicACZ5bAAmejwAJns8ACZ8DAAmfSwAJn58ACZ/TAAmgEwAJoFcACaDLAAmhQwAJod8ACaI7AAmiiwAJoq8ACaLjAAmjLwAJo2cACaN7AAmjswAJo+MACaQjAAmkjwAJpPMACaVzAAml8wAJpl8ACabTAAmnGwAJp5MACafzAAmoRwAJqG8ACaiHAAmowwAJqN8ACaj/AAmpHwAJqT8ACaljAAmpowAJqb8ACaoDAAmqRwAJqmcACaqLAAmqrwAJqrsACasbAAmrNwAJq48ACavXAAmr+wAJrFcACaxzAAmspwAJrNcACa0DAAmtZwAJrbMACa47AAmujwAJrtMACa7nAAmvCwAJrz8ACa9LAAmvowAJr+sACbAzAAmwawAJsLMACbDrAAmxSwAJsZsACbJDAAmy2wAJszcACbODAAmzywAJtAMACbRTAAm0kwAJtNsACbUfAAm1ZwAJtacACbXrAAm2TwAJtocACbbjAAm3GwAJt5sACbf3AAm4FwAJuE8ACbhnAAm4owAJuMsACbkTAAm5UwAJuasACbnzAAm6KwAJumsACbq/AAm7CwAJuzMACbtbAAm7kwAJu+cACbyjAAm8zwAJvO8ACb0rAAm9PwAJvWMACb2DAAm9twAJvhcACb5LAAm+dwAJvssACb8PAAm/EwAJv1cACb/TAAnAUwAJwIcACcDzAAnBRwAJwY8ACcG3AAnCiwAJwt8ACcMDAAnD4wAJxA8ACcTnAAnFMwAJxZMACcXrAAnGLwAJxocACcbbAAnHAwAJx1sACcdnAAnHhwAJx8cACcg3AAnIcwAJyLcACcjfAAnJDwAJyZMACcnzAAnKFwAJyjcACcqHAAnKjwAJypcACcr3AAnLIwAJyy8ACctTAAnLpwAJy/cACcwzAAnMswAJzM8ACcz7AAnNcwAJza8ACc43AAnOgwAJzxsACc97AAnQKwAJ0GcACdDvAAnRMwAJ0cMACdILAAnSnwAJ0tMACdNTAAnTqwAJ1FMACdSTAAnVHwAJ1acACdYfAAnWvwAJ10MACdffAAnYXwAJ2QcACdmLAAnaEwAJ2sMACds3AAnb0wAJ3F8ACdzTAAndSwAJ3esACd5fAAne+wAJ328ACeALAAngYwAJ4NsACeF7AAniDwAJ4nsACeNfAAnj3wAJ5IcACeUHAAnlrwAJ5msACedLAAnn0wAJ6H8ACekTAAnpzwAJ6lsACervAAnrqwAJ6+cACev/AAnsKwAJ7G8ACeyfAAns4wAJ7QMACe0/AAntWwAJ7YMACe2jAAntxwAJ7esACe47AAnudwAJ7rMACe7nAAnvDwAJ7z8ACe9PAAnvcwAJ74cACe+jAAnv1wAJ8AsACfBTAAnwfwAJ8JMACfCnAAnwuwAJ8M8ACfEHAAnxKwAJ8XcACfGbAAnx0wAJ8fcACfIXAAnyNwAJ8o8ACfK3AAny2wAJ8usACfNPAAnztwAJ898ACfPnAAn0LwAJ9IMACfS/AAn1CwAJ9XMACfXnAAn2YwAJ9t8ACfdHAAn3twAJ+AMACfgzAAn4kwAJ+McACfjvAAn5JwAJ+WMACfmrAAn5wwAJ+e8ACfofAAn6WwAJ+pMACfq7AAn6/wAJ+zsACfuPAAn7swAJ/C8ACfx7AAn8owAJ/MsACf0HAAn9JwAJ/WsACf13AAn9ywAJ/hMACf5PAAn+YwAJ/osACf63AAn++wAJ/1MACf9/AAn/twAKAAcACgBbAAoAowAKAN8ACgEPAAoBcwAKAbMACgIPAAoCawAKAr8ACgMbAAoDYwAKA6cACgPTAAoEIwAKBFcACgR/AAoEywAKBPMACgUnAAoFWwAKBXsACgW/AAoF/wAKBjsACgZLAAoG5wAKBwcACgdTAAoHZwAKB/8ACghHAAoIjwAKCNMACgk/AAoJmwAKCfcACgpPAAoLNwAKC2sACgwXAAoMTwAKDG8ACgyTAAoMrwAKDM8ACgzvAAoNFwAKDUsACg2TAAoN7wAKDi8ACg47AAoO5wAKDzMACg9fAAoPhwAKD5sACg/nAAoQKwAKEGMAChF7AAoR2wAKEksAChLnAAoTGwAKE1cAChObAAoT3wAKFAsAChRvAAoUjwAKFLcAChTbAAoVEwAKFZMAChYLAAoWVwAKFzMACheDAAoXpwAKF98AChgHAAoYQwAKGKMAChj7AAoZPwAKGWsAChmPAAoZswAKGecACho7AAoaYwAKGqsAChrTAAobGwAKG2sAChubAAob0wAKHA8AChx/AAodBwAKHTcACh2DAAodtwAKHfMACh53AAoe4wAKHysACh97AAofpwAKIAcACiBDAAogZwAKIKcACiDzAAohSwAKIccACiIHAAoiZwAKIrMACiLnAAojXwAKI5MACiQDAAokMwAKJGsACiSvAAok+wAKJUsACiWbAAol0wAKJi8ACiaDAAom7wAKJ0sACifXAAon8wAKKDsACihnAAoopwAKKQMACilHAAopswAKKeMACipLAAoqbwAKKqsACiq/AAorBwAKKzsACiujAAorxwAKLFcACiybAAos3wAKLRMACi1TAAotnwAKLf8ACi5nAAouqwAKLtsACi83AAovgwAKL+cACjAXAAowUwAKMIMACjC7AAow7wAKMRsACjEvAAoxdwAKMYsACjGnAAox0wAKMf8ACjKTAAoyxwAKMvsACjL/AAozFwAKMy8ACjNfAAozbwAKM38ACjOrAAoz0wAKNAMACjRPAAo0dwAKNH8ACjSHAAo0nwAKNK8ACjS3AAo0zwAKNNcACjT7AAo1AwAKNSMACjVXAAo1ZwAKNZMACjWjAAo10wAKNfsACjYfAAo2SwAKNo8ACjbHAAo3FwAKN0cACjeLAAo3wwAKN/MACjf3AAo4dwAKOIsACjiXAAo4uwAKOPsACjkXAAo5TwAKOYMACjmfAAo51wAKOfsACjonAAo6OwAKOksACjpjAAo6nwAKOqsACjrPAAo6+wAKOzcACjtvAAo7nwAKO9cACjwjAAo8UwAKPIsACjy7AAo84wAKPS8ACj1fAAo9kwAKPb8ACj37AAo+SwAKPqsACj77AAo/XwAKP6cACj//AApASwAKQJ8ACkC3AApA0wAKQNsACkDnAApBAwAKQScACkFLAApBZwAKQXsACkHnAApCFwAKQk8ACkKrAApC7wAKQxcACkNLAApDWwAKQ5cACkO3AApDywAKRBcACkRrAApEhwAKRLMACkTfAApFYwAKRZcACkWfAApFxwAKRfsACkYjAApGTwAKRnsACkajAApG6wAKRysACkdDAApHZwAKR2sACkdvAApHdwAKR6cACkevAApH9wAKSBsACkhPAApIkwAKSMsACklLAApJnwAKSdMACknvAApKBwAKSjsACkpvAApKxwAKSw8ACktLAApLnwAKS9MACkvbAApMHwAKTDcACkxHAApMWwAKTG8ACkyHAApMpwAKTQMACk0LAApNDwAKTRcACk1TAApNdwAKTbsACk3/AApOLwAKTnsACk6TAApOnwAKTt8ACk7/AApPdwAKT88AClBjAApQ3wAKURsAClFLAApRfwAKUasAClG3AApRzwAKUicAClKTAApS1wAKUxMAClNHAApTnwAKU78AClPfAApUCwAKVDcAClRXAApUYwAKVJ8AClTvAApVTwAKVXMAClW/AApV0wAKVeMAClX/AApWJwAKVlsAClZ/AApWxwAKVvcACldHAApXUwAKV2cACldzAApXdwAKV58AClenAApXrwAKV+sAClg3AApYPwAKWEcAClhPAApYXwAKWGcACliDAApYnwAKWNcACljfAApZEwAKWSMAClk/AApZUwAKWWcACllzAApZewAKWY8AClnHAApZ0wAKWfMACloLAApaEwAKWicAClo7AApaQwAKWk8AClqDAApamwAKWqcAClq3AApa0wAKWvMAClr7AApbCwAKWyMAClsvAApbNwAKW0sACluLAApbpwAKW78AClvbAApb7wAKW/8AClwbAApcZwAKXJcAClyzAApcwwAKXMsAClzTAApdJwAKXUMACl1TAApdewAKXaMACl3PAApeFwAKXj8ACl5rAApeiwAKXrMACl7bAApfBwAKXzMACl9HAApfZwAKX58ACl+3AApf0wAKYAMACmAfAApgNwAKYHcACmB/AApg6wAKYS8ACmFLAAphmwAKYdsACmITAApibwAKYqsACmMLAApjYwAKY98ACmRPAApkkwAKZNcACmUrAAplNwAKZZMACmXbAApmHwAKZl8ACmaTAApm2wAKZwcACmdDAApngwAKZ78ACmgDAApoYwAKaIcACmjvAAppDwAKaSMACmmDAApp2wAKafcACmo3AApqYwAKaqsACmrvAAprHwAKa3MACmuPAApruwAKa98ACmv/AApsYwAKbMcACm0fAAptowAKbdMACm3/AApuQwAKbnMACm7nAApu/wAKbyMACm9rAApvtwAKcCcACnBjAApwiwAKcMMACnEPAApxWwAKcV8ACnGrAApx9wAKckMACnJrAApypwAKcuMACnL/AApzHwAKc3sACnOvAApz8wAKdC8ACnRTAAp0ewAKdLMACnT7AAp1EwAKdUcACnVvAAp1owAKdbcACnX7AAp2QwAKdoMACnbHAAp3AwAKdzsACneDAAp4AwAKeGMACni3AAp5CwAKeSsACnl/AAp5kwAKeacACnnnAAp6JwAKek8ACnqbAAp6swAKevcACntHAAp7WwAKe4MACnvDAAp8DwAKfIsACnyfAAp8twAKfPMACn0TAAp9twAKfcsACn37AAp+LwAKfl8ACn6fAAp+xwAKfvMACn8zAAp/awAKf7MACn//AAqARwAKgLcACoDvAAqBGwAKgWsACoGTAAqBrwAKggcACoJDAAqCnwAKgxMACoNDAAqDfwAKg6MACoPrAAqEGwAKhEsACoR3AAqEmwAKhL8ACoTfAAqE+wAKhRsACoVHAAqFcwAKhZ8ACoXDAAqF/wAKhjMACoZnAAqGkwAKhrcACobXAAqG9wAKhycACodbAAqHgwAKh68ACofbAAqIDwAKiDcACohLAAqImwAKiLcACojjAAqJCwAKiTsAColvAAqJqwAKifsACoorAAqKYwAKioMACorLAAqLCwAKi0sACouLAAqLowAKi+MACovvAAqMBwAKjBsACowzAAqMVwAKjG8ACoyfAAqMvwAKjRcACo17AAqNrwAKjcMACo37AAqOTwAKjoMACo7bAAqPBwAKj0sACo9vAAqPuwAKkBsACpBrAAqQrwAKkPMACpELAAqRUwAKkW8ACpG3AAqSAwAKkksACpJ7AAqSmwAKks8ACpMbAAqTWwAKk5sACpPrAAqUXwAKlKcACpTjAAqVIwAKlU8ACpV/AAqVmwAKldMACpYDAAqWJwAKlk8ACpZzAAqWmwAKlscACpb3AAqXIwAKl1MACpeDAAqXtwAKl9sACpgDAAqYFwAKmFcACpivAAqY4wAKmXcACpm7AAqZ3wAKmg8ACppbAAqa4wAKmzsACptbAAqbhwAKm8sACpvzAAqcNwAKnFMACpyXAAqcxwAKnQMACp0vAAqdawAKnZsACp3jAAqeJwAKnsMACp7jAAqe6wAKn08ACp+nAAqgJwAKoF8ACqDPAAqhQwAKoXcACqGXAAqhswAKocMACqH7AAqiHwAKolsACqLDAAqi8wAKo1cACqOnAAqjtwAKo8sACqPrAAqkCwAKpC8ACqRDAAqkVwAKpHcACqSXAAqknwAKpKcACqTXAAqlNwAKpUsACqVzAAqltwAKpd8ACqYvAAqmUwAKpnsACqbDAAqnKwAKp4MACqe/AAqoGwAKqGcACqiXAAqoxwAKqQcACqk3AAqpawAKqYsACqmvAAqp1wAKqecACqovAAqqdwAKqssACqr3AAqriwAKq8sACqvrAAqsKwAKrH8ACqzfAAqtHwAKrX8ACq4PAAquawAKrocACq7fAAqvXwAKr7cACq/7AAqwKwAKsEMACrC3AAqwxwAKsM8ACrDfAAqxDwAKsYMACrGrAAqxzwAKsfsACrI7AAqyewAKsscACrMTAAqzPwAKs3sACrOzAAqz7wAKtGcACrS/AAq1DwAKtVsACrWPAAq15wAKtjsACrZ3AAq2wwAKtucACrcLAAq3LwAKt3sACrePAAq38wAKt/8ACrhPAAq4ZwAKuJMACri/AAq40wAKuPsACrkbAAq5OwAKuVsACrmHAAq5ywAKuh8ACrpPAAq6kwAKutcACrr7AAq7NwAKu1sACrtzAAq7gwAKu5MACrufAAq7qwAKu8MACrvbAAq76wAKu/cACrwXAAq8NwAKvE8ACrxvAAq8lwAKvNcACr0PAAq9NwAKvU8ACr1/AAq9rwAKvdcACr3/AAq+IwAKvkcACr53AAq+pwAKvs8ACr7zAAq/FwAKv08ACr+HAAq/twAKv98ACsAXAArAVwAKwK8ACsE/AArBzwAKwh8ACsKPAArC2wAKw3MACsOnAArD5wAKxDcACsRrAArEmwAKxNsACsULAArFbwAKxacACsYjAArGnwAKxvsACsd3AArH+wAKyKsACsknAArJqwAKyicACsqnAArLKwAKy38ACsvPAArMCwAKzDsACsxnAArMnwAKzOcACs1nAArNqwAKzgsACs47AArOYwAKztMACs73AArPXwAKz+MACtADAArQiwAK0K8ACtEnAArRRwAK0b8ACtJrAArS5wAK0w8ACtNjAArTuwAK1BcACtR3AArU7wAK1UcACtXDAArWHwAK1m8ACtafAArW/wAK108ACtfHAArYGwAK2HMACtjLAArY7wAK2SsACtlTAArZfwAK2asACtnLAAraEwAK2jcACtqDAAravwAK2xMACttXAArb4wAK3AcACtw7AArchwAK3PMACt0jAArdLwAK3WsACt2jAArd1wAK3gcACt6TAAre1wAK3w8ACt8/AArfawAK34MACt+rAArf3wAK4CMACuBfAArghwAK4O8ACuErAArhXwAK4a8ACuHHAAriEwAK4pMACuLrAArjPwAK42sACuPjAArkFwAK5FsACuSPAArk2wAK5U8ACuWXAArmKwAK5kcACuaTAArmzwAK5ysACudTAArnewAK55sACuevAAroHwAK6GcACuiXAArouwAK6PMACukDAArpUwAK6YsACum3AArqFwAK6lMACurTAArrCwAK6ycACutnAArrkwAK65sACuw/AArsswAK7V8ACu2LAArtqwAK7dcACu4HAAruOwAK7kMACu6zAAru/wAK708ACu93AArvvwAK7+8ACvAbAArwNwAK8GMACvCDAArxAwAK8TMACvGDAArx7wAK8jcACvK3AAry0wAK8wcACvMrAArzfwAK888ACvPrAAr0OwAK9IcACvU7AAr1vwAK9dsACvXjAAr2UwAK9wMACvc3AAr4XwAK+IsACvkvAAr59wAK+i8ACvr7AAr7GwAK+9sACvyTAAr80wAK/UMACv1PAAr9YwAK/ZMACv3HAAr96wAK/hsACv5DAAr+cwAK/rsACv7XAAr/CwAK/xcACv9zAAr/kwAK/8cACwAPAAsARwALAI8ACwDbAAsBEwALAUMACwFTAAsBewALAZsACwGzAAsB3wALAgMACwIrAAsCWwALAmMACwKTAAsCuwALAscACwLbAAsDKwALA18ACwOXAAsD9wALBBsACwRPAAsEkwALBOMACwUrAAsFUwALBYsACwXTAAsGHwALBosACwaXAAsG0wALBvMACwcHAAsHDwALB3sACwfHAAsH5wALCAsACwhLAAsIgwALCNMACwkHAAsJLwALCV8ACwmjAAsJ1wALCgsACwovAAsKUwALCoMACwrPAAsK9wALCwcACws3AAsLZwALC4MACwvTAAsL7wALDB8ACww/AAsMswALDMcACwzbAAsNJwALDU8ACw1/AAsNtwALDgsACw5TAAsOhwALDqcACw73AAsPRwALD5cACxB7AAsRXwALEYcACxGnAAsR5wALEe8ACxI3AAsSXwALEqsACxK3AAsTQwALE78ACxPfAAsUQwALFGMACxRrAAsUgwALFJcACxSrAAsUvwALFM8ACxTjAAsU9wALFQsACxUrAAsVTwALFWsACxWLAAsVkwALFa8ACxW/AAsVzwALFd8ACxX3AAsWEwALFjcACxZXAAsWcwALFocACxabAAsWrwALFssACxbXAAsW9wALFwMACxcTAAsXGwALF0MACxdbAAsXYwALF4cACxerAAsXswALF8MACxfTAAsX7wALGAMACxgbAAsYMwALGD8ACxhPAAsYVwALGF8ACxh/AAsYjwALGKMACxi3AAsY1wALGPcACxkTAAsZKwALGTcACxlHAAsZXwALGXcACxmLAAsZowALGbMACxnDAAsZ1wALGecACxnzAAsaDwALGhsACxorAAsaPwALGk8ACxpjAAsagwALGqcACxrHAAsa7wALGzMACxt3AAsbswALG8sACxwPAAscKwALHFsACxx/AAsc0wALHP8ACx1DAAsdhwALHasACx3HAAseAwALHhcACx4jAAseSwALHncACx6TAAseuwALHwcACx9bAAsfnwALH6sACx/jAAsgCwALICsACyBvAAsguwALIQsACyFXAAshpwALIecACyI3AAsiewALIrsACyMLAAsjVwALI7MACyP/AAskNwALJI8ACyTjAAsk+wALJScACyVTAAslewALJaMACyWvAAsl9wALJh8ACyY3AAsmWwALJqcACyb/AAsnCwALJzsACydDAAsnSwALJ1sACyd3AAsnnwALJ6sACye3AAsn0wALJ/sACygHAAsoHwALKCcACyg7AAsoTwALKGMACyiDAAsoiwALKNcACykDAAspUwALKVsACylvAAspjwALKZsACymjAAsptwALKcsACynrAAsp9wALKhcACypDAAsqUwALKmMACyp3AAsqlwALKqsACyq/AAsq3wALKusACyr/AAsrHwALKycACytTAAsrWwALK3cACyufAAsrpwALK78ACyvzAAssAwALLB8ACywnAAssSwALLFMACyxzAAssrwALLLcACyz7AAstSwALLVcACy17AAstjwALLa8ACy23AAstxwALLeMACy3rAAsuZwALLmsACy5/AAsuqwALLuMACy7vAAsvDwALLxMACy83AAsvhwALL/sACzALAAswLwALMGsACzCLAAswqwALMLcACzDjAAsxKwALMXsACzHPAAsyFwALMmMACzLDAAszEwALM08ACzOnAAsz+wALNEMACzR3AAs0ywALNRMACzVrAAs1swALNgcACzZfAAs2qwALNv8ACzdTAAs3qwALOAMACzhDAAs4jwALOPMACzk3AAs5fwALOcsACzojAAs6TwALOmsACzqPAAs6wwALOuMACzsXAAs7NwALO2sACzuLAAs7vwALO/MACzwfAAs8QwALPGcACzyDAAs8+wALPScACz1TAAs9WwALPWsACz2TAAs9rwALPdsACz4HAAs+LwALPnMACz6vAAs/AwALP1sACz+rAAtABwALQC8AC0BnAAtAswALQN8AC0E7AAtBZwALQZsAC0GrAAtB3wALQgMAC0IfAAtCMwALQpsAC0LrAAtDGwALQ1MAC0OHAAtDrwALQ8sAC0P3AAtELwALRDsAC0STAAtEvwALROcAC0UrAAtFWwALRasAC0XzAAtGGwALRlcAC0aLAAtG2wALRxcAC0dnAAtHfwALR6cAC0fPAAtIGwALSEsAC0iPAAtIzwALSRcAC0lnAAtJlwALSd8AC0oLAAtKUwALSoMAC0rDAAtLAwALSzsAC0tnAAtLvwALTCsAC0xvAAtMswALTN8AC00TAAtNRwALTXcAC02jAAtNzwALTe8AC04PAAtONwALTkcAC05nAAtOhwALTscAC07jAAtO8wALTzsAC09jAAtPxwALUAsAC1BDAAtQcwALUMMAC1DzAAtRPwALUWMAC1GbAAtR5wALUlMAC1KzAAtTIwALU28AC1OvAAtT+wALVDsAC1SbAAtU1wALVQMAC1U7AAtViwALVe8AC1ZTAAtWfwALVtsAC1dHAAtXlwALV98AC1gLAAtYYwALWMsAC1k7AAtZhwALWc8AC1ojAAtafwALWr8AC1rnAAtbEwALWz8AC1tbAAtbpwALW+cAC1wnAAtcwwALXO8AC11jAAtdxwALXkcAC15XAAteswALXwsAC19HAAtfwwALX+sAC1//AAtgYwALYIMAC2CbAAtg2wALYVsAC2GjAAth1wALYhMAC2JPAAtiYwALYn8AC2KrAAti6wALYzMAC2OHAAtj0wALZAsAC2R7AAtkpwALZNsAC2UnAAtlVwALZWsAC2V/AAtlwwALZecAC2YHAAtmYwALZqsAC2bjAAtm+wALZ1sAC2eHAAtn0wALaD8AC2iHAAtovwALaOsAC2kPAAtpbwALacsAC2njAAtqMwALalMAC2qPAAtquwALawsAC2srAAtrtwALa+MAC2wDAAtsJwALbEsAC2xzAAtslwALbLMAC2zXAAttHwALbVcAC22XAAtt2wALbgcAC25zAAtuxwALbvcAC28bAAtvTwALb48AC2/bAAtwKwALcGsAC3C3AAtxNwALchsAC3I3AAtybwALcsMAC3MDAAtzqwALdEMAC3RjAAt0kwALdKcAC3TrAAt1HwALdVsAC3WLAAt1rwALdgcAC3Y/AAt2XwALdpsAC3bLAAt3RwALd+MAC3hzAAt5AwALeSsAC3lLAAt5XwALebMAC3n3AAt6FwALen8AC3rrAAt7GwALezMAC3t3AAt7mwALe8MAC3vvAAt8HwALfFcAC3x/AAt8vwALfOcAC30TAAt9NwALfWsAC32TAAt9vwALffcAC35PAAt+1wALfyMAC3+rAAt/9wALgH8AC4DHAAuBIwALgZsAC4G/AAuB5wALgg8AC4JrAAuCmwALgtcAC4MTAAuDbwALg8sAC4QTAAuEWwALhH8AC4SfAAuEzwALhQMAC4VHAAuFnwALheMAC4YnAAuGQwALhoMAC4aTAAuGxwALhwMAC4crAAuHWwALh4MAC4erAAuH+wALiCcAC4hTAAuIowALiRcAC4lPAAuJwwALihcAC4ovAAuKRwALio8AC4rDAAuK+wALi0cAC4uHAAuL0wALjBMAC4xLAAuMawALjMMAC4zjAAuNCwALjU8AC42XAAuN3wALjkcAC457AAuOywALjvcAC48TAAuPTwALj3MAC4/LAAuQcwALkJcAC5EnAAuRkwALkeMAC5IbAAuSUwALkpMAC5LfAAuTKwALk48AC5O3AAuT7wALlDMAC5R/AAuUvwALlOsAC5UbAAuVTwALlY8AC5XDAAuV9wALljMAC5ZfAAuWrwALls8AC5b7AAuXHwALly8AC5dPAAuXkwALl/MAC5hXAAuYywALmPMAC5kbAAuZcwALmY8AC5nDAAuZ9wALmjcAC5pvAAuanwALmrsAC5r/AAubJwALm1MAC5t/AAubxwALm9MAC5v3AAucUwALnL8AC50fAAudRwALnbMAC537AAueJwALnjsAC56zAAufKwALn5MAC5/PAAugAwALoCsAC6BPAAugZwALoI8AC6DDAAuhMwALoXMAC6GbAAuhuwALod8AC6H7AAuiMwALolMAC6J/AAuimwALorMAC6K/AAui2wALoucAC6MPAAujLwALo1sAC6NrAAujjwALo7MAC6PbAAukCwALpDcAC6RnAAuklwALpLsAC6TjAAulGwALpTsAC6VfAAulmwALpbMAC6XbAAul7wALphsAC6ZvAAumfwALprcAC6b3AAunFwALpzMAC6d3AAunuwALqDMAC6iHAAuoiwALqM8AC6j3AAupdwALqdMAC6n3AAuqMwALqlcAC6qbAAuq9wALqysAC6tfAAurfwALq8MAC6vPAAusIwALrRMAC61PAAutcwALracAC63LAAut/wALriMAC64vAAuuOwALrkMAC65LAAuuWwALrmsAC67LAAuu6wALrysAC69TAAuvpwALr+8AC7A/AAuwnwALsPsAC7FbAAuxwwALsi8AC7J/AAuyywALsxMAC7NPAAuzwwALs/cAC7QnAAu0YwALtJMAC7S3AAu07wALtTMAC7VjAAu1nwALtdcAC7YTAAu2OwALtl8AC7aLAAu2twALttcAC7b3AAu3HwALt38AC7fjAAu4IwALuEMAC7hvAAu4nwALuMcAC7j/AAu5HwALuYMAC7nrAAu6LwALumsAC7qXAAu6wwALuusAC7sfAAu7SwALu7MAC7vfAAu8FwALvE8AC7y3AAu9AwALvTsAC71nAAu9nwALvcsAC733AAu+LwALvmcAC76TAAu+0wALvwcAC79rAAu/2wALwCMAC8BXAAvAlwALwMcAC8D7AAvBNwALwWsAC8GvAAvB5wALwjcAC8J7AAvCuwALwucAC8MfAAvDUwALw+cAC8Q7AAvElwALxP8AC8V/AAvF9wALxi8AC8a7AAvG/wALx6MAC8frAAvIJwALyDsAC8hbAAvIfwALyLMAC8jXAAvI9wALyScAC8lXAAvJewALyZsAC8mzAAvJywALyhcAC8pbAAvKgwALyrsAC8rrAAvLIwALy0MAC8tXAAvLhwALy6cAC8wDAAvMWwALzJMAC8zLAAvNDwALzT8AC813AAvNmwALzdMAC84HAAvONwALzmcAC86rAAvO8wALzysAC89vAAvPywALz+8AC9AzAAvQjwAL0LMAC9ETAAvRlwAL0fMAC9JLAAvSmwAL0xsAC9NrAAvTswAL1A8AC9RrAAvUtwAL1QsAC9V3AAvVwwAL1i8AC9ZvAAvWswAL1w8AC9dfAAvXiwAL1+8AC9gLAAvYIwAL2HMAC9iLAAvYywAL2QcAC9kzAAvZSwAL2XsAC9mzAAvaFwAL2n8AC9qvAAva3wAL21MAC9ujAAvb1wAL3B8AC9xTAAvcgwAL3NMAC90jAAvdcwAL3ccAC93zAAveLwAL3n8AC97fAAvfUwAL38cAC+AbAAvggwAL4LcAC+DXAAvg3wAL4QsAC+ErAAvhewAL4ccAC+IjAAviVwAL4psAC+LvAAvjPwAL408AC+N7AAvjlwAL46MAC+PTAAvj8wAL5EMAC+R/AAvkrwAL5OcAC+UjAAvlYwAL5YMAC+WrAAvlvwAL5hMAC+ZDAAvmdwAL5rcAC+cLAAvnRwAL54cAC+f3AAvoCwAL6GMAC+ivAAvpJwAL6XcAC+mzAAvp8wAL6jMAC+pnAAvqzwAL6wMAC+srAAvriwAL67cAC+v3AAvsFwAL7G8AC+z7AAvtVwAL7X8AC+2XAAvtuwAL7gcAC+5XAAvuiwAL7scAC+73AAvvPwAL74MAC++vAAvv5wAL8AsAC/BHAAvwfwAL8PcAC/EbAAvxMwAL8WMAC/G3AAvx2wAL8jMAC/JnAAvy5wAL8z8AC/NjAAvzswAL8/cAC/QzAAv0awAL9LcAC/VPAAv1awAL9bsAC/YXAAv2fwAL9tMAC/b7AAv3MwAL94MAC/e7AAv3/wAL+DsAC/hrAAv4qwAL+OMAC/k3AAv5UwAL+ZMAC/n3AAv6LwAL+mMAC/qDAAv6qwAL+t8AC/sLAAv7bwAL+7MAC/vzAAv8KwAL/GsAC/yjAAv86wAL/SsAC/2fAAv96wAL/i8AC/57AAv+uwAL/uMAC/8TAAv/RwAL/4MAC//HAAv//wAMAHMADADPAAwBXwAMAbcADAHbAAwCMwAMAocADAKrAAwC/wAMAzcADANzAAwDxwAMA98ADAQzAAwEiwAMBMcADAUzAAwFbwAMBccADAXvAAwGMwAMBlsADAavAAwG6wAMBx8ADAdjAAwHmwAMB/8ADAhDAAwIpwAMCNcADAkzAAwJowAMCfsADApTAAwKxwAMCyMADAtfAAwLhwAMC68ADAv7AAwMVwAMDGcADAy/AAwNIwAMDXsADA2vAAwN1wAMDgcADA5bAAwOkwAMDsMADA7bAAwPAwAMDz8ADA9fAAwPqwAMD9cADBAbAAwQLwAMEIMADBCPAAwQ5wAMETMADBFzAAwR0wAMEh8ADBI/AAwSawAMErsADBLzAAwTPwAME1cADBOnAAwT2wAMFB8ADBRzAAwUxwAMFNcADBUHAAwVMwAMFYsADBW3AAwV3wAMFiMADBZXAAwWmwAMFusADBcnAAwXfwAMF6MADBfDAAwYJwAMGHcADBi3AAwY3wAMGQsADBlLAAwZdwAMGasADBoXAAwaVwAMGqMADBsDAAwbbwAMG7cADBvHAAwcBwAMHDcADByrAAwc1wAMHRsADB1XAAwdmwAMHbcADB3PAAweCwAMHjMADB5jAAweiwAMHscADB7rAAwfDwAMH0MADB+LAAwfywAMH/MADCAzAAwgewAMIK8ADCDDAAwhNwAMIX8ADCGrAAwhxwAMIfcADCIzAAwiYwAMInsADCLfAAwjDwAMI1sADCObAAwjwwAMI/cADCQfAAwkWwAMJLcADCTbAAwlMwAMJaMADCXLAAwmEwAMJkcADCabAAwm1wAMJx8ADCeDAAwnwwAMJ+cADCgfAAwoOwAMKF8ADCh/AAwonwAMKNsADCkHAAwpXwAMKacADCnzAAwqQwAMKm8ADCrbAAwrLwAMK3MADCvzAAwsRwAMLJMADCzzAAwtOwAMLaMADC4DAAwuJwAMLnsADC7fAAwvAwAMLzsADC+XAAwv5wAMMDcADDBXAAwwvwAMMScADDF3AAwxmwAMMdsADDIHAAwyUwAMMosADDLLAAwzLwAMM38ADDPXAAw0cwAMNPsADDVrAAw1uwAMNlcADDbbAAw3iwAMOCMADDhrAAw4kwAMOLcADDjrAAw5PwAMOYMADDm7AAw52wAMOiMADDqTAAw66wAMOz8ADDvPAAw8DwAMPDsADDxjAAw8nwAMPOcADD0jAAw9QwAMPacADD3nAAw+FwAMPksADD6HAAw+zwAMPwsADD9vAAw/uwAMP+MADEAHAAxASwAMQHcADECnAAxA1wAMQQMAD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O13AAztxwAM7ocADO7LAAzvAwAM71MADO+HAAzvvwAM8AcADPA/AAzwgwAM8MsADPELAAzxSwAM8WsADPGnAAzx7wAM8iMADPKDAAzyxwAM8w8ADPNXAAzzhwAM87sADPPjAAz0EwAM9D8ADPR/AAz0ywAM9QMADPU/AAz1awAM9cMADPXzAAz2GwAM9nMADPavAAz3KwAM91MADPePAAz4DwAM+FsADPiXAAz47wAM+UcADPmDAAz51wAM+iMADPpTAAz6nwAM+ssADPsHAAz7NwAM+18ADPuPAAz7/wAM/B8ADPw3AAz8WwAM/I8ADPzLAAz9GwAM/UsADP1zAAz9owAM/esADP4TAAz+IwAM/msADP6LAAz+uwAM/ssADP77AAz/IwAM/1cADP+HAAz/qwANAD8ADQCDAA0AywANAPsADQEfAA0BYwANAYsADQGvAA0B0wANAhcADQJzAA0CzwANAxsADQNDAA0DgwANA78ADQPvAA0EJwANBGMADQSDAA0EvwANBOMADQUPAA0FSwANBWsADQXTAA0GDwANBnMADQa7AA0G7wANBxMADQc/AA0HgwANB68ADQgPAA0INwANCF8ADQivAA0I7wANCUcADQmLAA0J9wANCiMADQpPAA0KmwANCt8ADQsnAA0LYwANC5cADQvbAA0MDwANDCcADQyXAA0NIwANDYcADQ4LAA0OawANDtcADQ8vAA0PdwAND58ADQ/jAA0QAwANEDMADRBbAA0QpwANEOMADRErAA0ROwANEUsADRFnAA0RwwANEf8ADRInAA0SSwANEosADRLHAA0TMwANE5sADRQfAA0UnwANFTsADRWfAA0WPwANFuMADRdnAA0X4wANGE8ADRjLAA0ZZwANGecADRqzAA0bMwANG9MADRzDAA0dRwANHd8ADR6PAA0fPwANIAcADSC3AA0hawANIgsADSKLAA0jEwANI88ADSRvAA0lAwANJbMADSZXAA0nEwANJ5sADShTAA0pPwANKe8ADSqbAA0rIwANK58ADSyXAA0tawANLj8ADS7/AA0vpwANME8ADTD3AA0xywANMpMADTOfAA00JwANNJsADTU3AA02AwANNoMADTb/AA03mwANOAMADThTAA041wANOYcADToDAA06pwANO08ADTu7AA08KwANPOsADT1bAA090wANPkMADT77AA0/swANQDsADUC/AA1BWwANQfsADULTAA1DVwANRA8ADUSrAA1FWwANRZcADUXPAA1GDwANRmMADUazAA1G5wANR1cADUfLAA1IHwANSGsADUinAA1I8wANSV8ADUmvAA1JywANSfsADUo3AA1KiwANSycADUt3AA1L5wANTKcADUz7AA1NYwANTeMADU5jAA1O+wANT3sADU//AA1QbwANUL8ADVEXAA1RowANUhMADVJ3AA1S9wANU2sADVP3AA1UTwANVNcADVWTAA1WEwANVo8ADVbPAA1XLwANV4cADVfTAA1YmwANWT8ADVnjAA1acwANWusADVtjAA1b2wANXH8ADV0XAA1d8wANXksADV6PAA1fHwANX4sADWAnAA1gdwANYMMADWEvAA1hZwANYcMADWHjAA1iYwANYtcADWNPAA1jiwANZBsADWSjAA1lKwANZX8ADWXrAA1mWwANZwMADWdXAA1n3wANaEsADWjLAA1o6wANaQsADWkvAA1pvwANanMADWu7AA1tJwANbo8ADW8rAA1vlwANb/cADXBTAA1wpwANcQMADXFrAA1xywANcjMADXKPAA1y6wANc1MADXOzAA10GwANdSsADXVvAA11xwANdhcADXZvAA13FwANd3MADXgPAA15QwANeY8ADXoTAA17FwANfLsADX4DAA1/dwANgIcADYGTAA2CTwANg8sADYWHAA2F5wANhwMADYiHAA2JowANiiMADYqLAA2LxwANjHsADY2fAA2OJwANj0MADY/bAA2Q2wANkgsADZQjAA2UowANlRsADZWbAA2WowANl88ADZirAA2ZhwANmhcADZqfAA2auwANmx8ADZuPAA2cSwANnKMADZ17AA2e0wANn1cADaKvAA2jjwANpIcADadTAA2qTwANrBsADa0/AA2vMwANr8sADbDTAA2yWwANs4MADbQ7AA21OwANtd8ADblHAA26/wANvOsADcC7AA3BdwANwm8ADcL/AA3DiwANxF8ADcSjAA3FbwANxqcADce3AA3I6wANyccADcufAA3MVwANzQcADc4DAA3O/wAN0B8ADdDzAA3S1wAN1CMADdRnAA3UpwAN1dsADdc7AA3X+wAN2M8ADdn3AA3atwAN2z8ADdu/AA3cgwAN3UcADeZLAA3nTwAN5/8ADeiXAA3qwwAN7EsADe57AA3xHwAN8zsADfUDAA32EwAN9v8ADfkzAA36MwAN/YMADf+7AA4BwwAOA8sADgX/AA4IAwAOCOsADgqXAA4MswAODscADhDzAA4SfwAOFAcADhUbAA4VmwAOFgsADhjDAA4auwAOG8MADh6rAA4gmwAOIW8ADiRLAA4mAwAOKUsADioPAA4rXwAOLFsADi0/AA4t+wAOLsMADi9TAA4vfwAOL7cADi+/AA4v2wAOMG8ADjCvAA4w6wAOMRMADjFjAA4xjwAOMf8ADjJHAA4yiwAOMqsADjLDAA4y7wAOMw8ADjNTAA4zXwAOM3sADjOfAA4z8wAONFsADjSHAA40twAONP8ADjVHAA41ewAONbsADjX3AA42MwAONn8ADjbLAA43EwAON0cADjd/AA43uwAOOC8ADjiDAA44ywAOOSMADjl7AA450wAOOicADjqLAA46vwAOOwsADjs3AA47gwAOO68ADjv/AA48MwAOPHsADjyrAA488wAOPR8ADj1rAA49qwAOPesADj4bAA4+PwAOPvcADj9HAA4/rwAOQCMADkBPAA5A4wAOQScADkFjAA5BmwAOQccADkHXAA5B5wAOQoMADkKTAA5CqwAOQtsADkLzAA5DFwAOQ1cADkN/AA5DowAOQ/MADkQjAA5EUwAORGMADkSTAA5EowAORMMADkTvAA5FIwAORTcADkVrAA5FqwAORdsADkYzAA5GbwAORpcADkbHAA5HFwAOR0MADkd3AA5HvwAOR+MADkgbAA5IVwAOSIcADkinAA5I9wAOSSsADklHAA5JWwAOSeMADkojAA5KYwAOSmsADkrnAA5K9wAOSwcADksXAA5LJwAOSzcADktHAA5LVwAOS2cADktzAA5LfwAOS48ADkubAA5LpwAOS7MADku/AA5LywAOS9cADkvnAA5L9wAOTAcADkwXAA5MJwAOTDcADkxHAA5MVwAOTGcADkxzAA5MgwAOTJMADkyfAA5MqwAOTLcADkzDAA5M0wAOTOsADk0bAA5NLwAOTUcADk17AA5NowAOTbcADk3TAA5N8wAOTgMADk4rAA5OPwAOTmsADk6fAA5OuwAOTucADk8rAA5PRwAOT3cADk+/AA5P4wAOT/cADlAPAA5QJwAOUDsADlBLAA5QbwAOUIcADlCnAA5QywAOUOMADlELAA5RFwAOUT8AD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sUXAA7FiwAOxd8ADsYfAA7GjwAOxt8ADsdHAA7HgwAOx98ADsiPAA7JWwAOydMADspDAA7KgwAOyt8ADsszAA7LgwAOzA8ADsxHAA7MewAOzMMADszXAA7NAwAOzTsADs2DAA7NpwAOzgcADs57AA7O7wAOz08ADs+/AA7QIwAO0RsADtG/AA7SAwAO0tsADtO/AA7T+wAO1C8ADtRvAA7UuwAO1NMADtTrAA7VDwAO1VcADtWbAA7V3wAO1gsADtZXAA7WkwAO1vcADtdLAA7XnwAO1+MADtgTAA7YOwAO2HMADtivAA7ZAwAO2VcADtmrAA7aIwAO2kcADtqTAA7aswAO2tcADtsTAA7bKwAO6H8ADvWTAA722wAO95MADvefAA730wAO9/MADvgXAA74XwAO+I8ADvjbAA74/wAO+TcADvlvAA75qwAO+c8ADvoDAA76EwAO+jsADvpbAA76twAO+vsADvsfAA77NwAO+2MADvuLAA773wAO/F8ADvy/AA786wAO/R8ADv1zAA793wAO/hsADv4/AA7+ewAO/rMADv8XAA7/awAO/7MADwAbAA8AWwAPAJsADwDzAA8BQwAPAYcADwHjAA8CGwAPAksADwJ/AA8CrwAPAuMADwMTAA8DzwAPBAsADwRbAA8ErwAPBMcADwUrAA8FiwAPBe8ADwY7AA8GbwAPBrcADweDAA8HuwAPB9sADwgDAA8IhwAPCPsADwlHAA8JfwAPCaMADwoPAA8KLwAPCp8ADwsTAA8LhwAPC9sADwwvAA8MxwAPDQcADw1bAA8NlwAPDfcADw4bAA8OdwAPDusADw8jAA8PTwAPD58ADw/zAA8QSwAPELcADxEbAA8RewAPEf8ADxJTAA8SfwAPEqcADxLPAA8S7wAPExcADxM/AA8TjwAPE9MADxP7AA8ULwAPFHsADxSvAA8U5wAPFTcADxV/AA8VzwAPFksADxarAA8W9wAPFzcADxePAA8XvwAPF+sADxgrAA8YbwAPGLcADxjvAA8ZQwAPGWcADxmzAA8Z4wAPGhMADxpHAA8adwAPGrMADxrzAA8bDwAPG18ADxuDAA8b2wAPHD8ADxyDAA8dhwAPHmcADx6nAA8etwAPHwMADx9PAA8fgwAPH9sADyAXAA8gMwAPII8ADyDDAA8g7wAPIQsADyEvAA8hUwAPIW8ADyGnAA8iHwAPIisADyJXAA8ifwAPIusADyMXAA8jswAPI/MADyQ7AA8kewAPJJsADyTbAA8k/wAPJQ8ADyUvAA8lswAPJecADyZDAA8mtwAPJuMADydPAA8npwAPJ/cADygbAA8oXwAPKLMADykLAA8pdwAPKdcADyoLAA8qNwAPKmsADyrHAA8q5wAPKzMADytrAA8rvwAPK88ADyw3AA8s5wAPLU8ADy1nAA8tbwAPLZcADy2rAA8uEwAPLjMADy5bAA8uywAPLwsADy+DAA8wJwAPMJsADzD3AA8xLwAPMcMADzH/AA8yQwAPMnMADzKjAA8ywwAPMv8ADzMjAA8zRwAPM4sADzSXAA81YwAPNjsADzZ/AA821wAPNu8ADzcfAA83LwAPN2cADzeLAA83owAPN8sADzfrAA84fwAPOLsADzjfAA85MwAPOVsADznHAA86FwAPOlcADzrHAA86+wAPO0cADztjAA870wAPPCcADzxzAA89HwAPPYMADz2vAA892wAPPhsADz4zAA8+fwAPPp8ADz8TAA8/WwAPP8sAD0ATAA9AMwAPQFsAD0CLAA9A+wAPQUMAD0GTAA9B2wAPQjMAD0JXAA9CnwAPQt8AD0MTAA9DVwAPQ6sAD0P7AA9EIwAPRC8AD0RLAA9EewAPRL8AD0UjAA9FMwAPRWMAD0W3AA9F5wAPRlsAD0aPAA9GwwAPRu8AD0dfAA9HiwAPR5MAD0fHAA9H6wAPSBMAD0hXAA9IowAPSNcAD0j3AA9JgwAPSb8AD0nnAA9KTwAPSqMAD0srAA9LawAPS58AD0v7AA9MSwAPTJsAD0y/AA9M7wAPTTcAD02DAA9NrwAPTgMAD05LAA9OjwAPTtMAD0+bAA9QLwAPUQsAD1EbAA9RfwAPUbcAD1H7AA9SawAPUs8AD1MHAA9TSwAPU6cAD1P7AA9UcwAPVKMAD1ULAA9VSwAPVZMAD1YbAA9WcwAPVwMAD1cbAA9XnwAPV/cAD1gzAA9YdwAPWPsAD1lTAA9ZlwAPWjcAD1rXAA9bYwAPW3sAD1uvAA9b1wAPXCsAD1yzAA9dDwAPXUsAD12XAA9d5wAPXisAD16fAA9eswAPXtsAD19zAA9fowAPX+cAD2CHAA9g0wAPYR8AD2EvAA9hawAPYa8AD2HzAA9iLwAPYmMAD2KrAA9ixwAPYt8AD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QYnABEGjwARBucAEQdTABEHmwARCCcAEQh3ABEItwARCPsAEQlDABEJYwARCYcAEQmzABEKBwARCkMAEQqLABEKwwARCwMAEQtTABELkwARC8sAEQwvABEMiwARDPMAEQ1zABENuwARDe8AEQ4fABEOUwARDnsAEQ6vABEO2wARDwcAEQ93ABEP7wAREFMAERCvABEQ7wAREUsAERGXABER2wAREjMAERKTABES2wAREw8AERNDABETwwARFCsAERSHABEUzwARFP8AERVDABEVgwARFdMAERYjABEWZwARFsMAERczABEXnwARF/MAERgzABEYiwARGN8AERk7ABEZkwARGesAERo/ABEakwARGu8AERsXABEbQwARG3MAERvPABEcOwARHJMAERzbABEdJwARHXMAER2fABEd5wARHhsAER6PABEfAwARH0sAER+PABEf4wARIBsAESCrABEhKwARIasAESIPABEiWwARIq8AESLvABEjNwARI38AESPHABEkHwARJF8AESS7ABElEwARJZcAESXTABEmAwARJjcAESZjABEmowARJtMAESc3ABEnnwARJ/8AEShTABEolwARKNsAESkbABEpcwARKe8AESozABEqawARKsMAESsXABErbwARK+sAESx/ABEsnwARLM8AES0PABEtRwARLW8AES2jABEtywARLf8AES4zABEudwARLuMAES9TABEvywARMA8AETBzABEw4wARMU8AETHHABEyBwARMmcAETLTABEzEwARM3MAETPfABE0KwARNJcAETUPABE1cwARNbcAETX3ABE2XwARNpMAETbPABE3HwARN1sAETeXABE32wAROBsAEThrABE4xwAROT8AETmvABE58wAROjsAETp/ABE6uwAROxsAETt3ABE78wARPFsAETyfABE8xwARPQMAET1bABE9jwARPc8AET4bABE+SwARPnMAET6bABE+zwARPx8AET9vABE/ywARP/8AEUAjABFAlwARQN8AEUDvABFBDwARQUcAEUGbABFB3wARQh8AEUJvABFCqwARQtcAEUMXABFDUwARQ7MAEURLABFE4wARRSsAEUVrABFFwwARRi8AEUaLABFG+wARRzsAEUeTABFH/wARSFsAEUjLABFJFwARSXcAEUnjABFKZwARSrMAEUrrABFLHwARS1cAEUuDABFLuwARS+sAEUwbABFMjwARTQsAEU1zABFN0wARThcAEU53ABFOxwARTw8AEU9rABFPzwARUBsAEVBTABFQiwARUPcAEVFXABFRnwARUcsAEVIDABFSRwARUpcAEVLLABFTEwARU1cAEVOLABFT0wARVBcAEVRrABFUvwARVQcAEVVbABFVuwARVhsAEVaPABFW/wARV1cAEVe3ABFX4wARWBMAEVhHABFYpwARWRcAEVlzABFaDwARWjMAEVpnABFaqwARWucAEVsTABFbPwARW3cAEVuvABFb5wARXC8AEVyfABFdEwARXY8AEV33ABFePwARXqcAEV8TABFfZwARX8cAEV//ABFgNwARYI8AEWDXABFhIwARYUsAEWFrABFhnwARYdsAEWIbABFiqwARYvMAEWMLABFjNwARY4cAEWOvABFjywARY/cAEWRDABFkgwARZNsAEWUnABFlVwARZX8AEWXjABFmFwARZncAEWaXABFmrwARZt8AEWcHABFnOwARZ5sAEWfvABFoTwARaIsAEWi3ABFo5wARaRsAEWl3ABFptwARaesAEWorABFqdwARarsAEWrXABFrGwARa1MAEWunABFsBwARbH8AEWzXABFtOwARbWcAEW2HABFtowARbcMAEW3XABFt9wARbg8AEW4nABFuewARbtcAEW8fABFvXwARb4sAEW/TABFwCwARcDsAEXB/ABFwywARcP8AEXEfABFxPwARcbcAEXIHABFyHwARcjMAEXJzABFyjwARctMAEXMXABFzNwARc18AEXOrABFz6wARdAcAEXQ3ABF0awARdH8AEXSfABF0ywARdRMAEXV7ABF1pwARdesAEXYrABF2cwARdo8AEXarABF2wwARdtsAEXcfABF3cwARd7MAEXf/ABF4CwAReB8AEXhbABF4gwAReKMAEXjDABF47wAReSMAEXl7ABF5zwAReg8AEXpXABF6owARev8AEXs7ABF7iwARe+cAEXyPABF8uwARfO8AEXz7ABF9PwARfWMAEX2rABF9twARfcMAEX3bABF97wARfgMAEX4jABF+PwARfnsAEX7DABF/BwARf1cAEX9vABF/pwARf+sAEYADABGAOwARgH8AEYCjABGA5wARgTcAEYFbABGBrwARgg8AEYIzABGCVwARgq8AEYLTABGC+wARg2sAEYO7ABGD+wARhC8AEYRbABGEqwARhO8AEYUjABGFfwARhccAEYYPABGGfwARhr8AEYbrABGHIwARh4cAEYfXABGIEwARiHMAEYjDABGI8wARiTMAEYlfABGJqwARidsAEYpDABGKrwARitcAEYsfABGLXwARi6MAEYwDABGMTwARjLcAEY0PABGNXwARjbsAEY4TABGOewARju8AEY+DABGP0wARkDsAEZB7ABGQ1wARkRMAEZFHABGRewARkdsAEZIfABGSiwARkvMAEZMrABGTXwARk7cAEZPfABGUDwARlC8AEZRTABGUgwARlI8AEZTTABGU/wARlTsAEZV3ABGVnwARldMAEZYTABGWPwARlm8AEZa7ABGW8wARl18AEZeHABGXowARl7MAEZfzABGYPwARmHcAEZjLABGZAwARmT8AEZl/ABGZ/wARmi8AEZqnABGa/wARm78AEZwTABGccwARnTcAEZ2TABGeAwARnoMAEZ6vABGe2wARnwMAEZ9bABGfjwARn8cAEaBHABGg3wARoUsAEaGzABGiHwARon8AEaK7ABGjNwARo5sAEaQbABGkawARpMMAEaUPABGldwARpdsAEaZTABGmvwARpxsAEadvABGn0wARqCcAEaiHABGonwARqLMAEajbABGpLwARqWsAEamrABGp+wARqm8AEaq/ABGrFwARq2cAEavXABGsHwARrMsAEa2nABGuAwARrmMAEa7LABGvBwARr1cAEa93ABGvmwARr+MAEa//ABGwIwARsGcAEbCTABGwzwARsScAEbFrABGxkwARscMAEbHzABGyWwARsrcAEbLXABGy9wARsxsAEbNbABGzhwARs6MAEbO/ABG0JwARtG8AEbR/ABG0pwARtK8AEbS/ABG02wARtQ8AEbU7ABG1UwARtX8AEbWfABG1zwARtfMAEbY/ABG2TwARtnsAEbarABG3MwARt2cAEberABG32wARuB8AEbhfABG4lwARuNMAEbkTABG5QwARuWcAEbl3ABG5iwARuasAEbnLABG58wARuhsAEbo3ABG6UwARuncAEbqnABG65wARuwsAEbtDABG7ewARu7sAEbvnABG8FwARvEsAEbyDABG8wwARvScAEb1jABG9wwARvfsAEb4fABG+UwARvp8AEb7fABG/FwARv0cAEb+XABG/0wARwA8AEcBPABHAlwARwMMAEcDzABHBKwARwZMAEcG/ABHB7wARwiMAEcJfABHCmwARws8AEcMDABHDRwARw3cAEcOrABHD4wARxCMAEcRbABHEkwARxNcAEcUfABHFgwARxfMAEcZbABHGzwARxxsAEcdvABHH6wARyCcAEcibABHI0wARyQMAEcmfABHKCwARylMAEcqnABHK3wARyycAEctXABHLewARy68AEcvfABHMFwARzE8AEcyjABHM1wARzPMAEc0vABHNcwARzZcAEc3PABHOJwARznMAEc7XABHPKwARz3sAEc+rABHPxwARz+MAEdADABHQhwAR0LcAEdDfABHRFwAR0VMAEdF/ABHRqwAR0c8AEdIjABHScwAR0tMAEdNPABHTYwAR07MAEdQPABHUQwAR1H8AEdSzABHU7wAR1RMAEdVjABHViwAR1acAEdXTABHV7wAR1gcAEdY3ABHWawAR1q8AEdbTABHXFwAR1ysAEddnABHXnwAR1+cAEdgrABHYZwAR2KcAEdi/ABHZBwAR2SsAEdlfABHZjwAR2bcAEdnjABHaHwAR2mMAEdqHABHaswAR2tMAEdtjABHblwAR29sAEdwDABHcUwAR3KsAEdzjABHdDwAR3WsAEd2bABHdywAR3gMAEd4fABHeawAR3p8AEd7DABHe+wAR30MAEd9zABHfpwAR39MAEd/3ABHgMwAR4GcAEeCXABHgzwAR4PMAEeELABHhLwAR4WcAEeGnABHh1wAR4f8AEeIzABHidwAR4sMAEeL7ABHjHwAR4y8AEeNDABHjYwAR438AEeOnABHjswAR488AEeQTABHkSwAR5HsAEeSjABHk+wAR5UsAEeVvABHl+wAR5rsAEebjABHnzwAR6A8AEegzABHocwAR6JcAEeizABHo3wAR6QMAEekfABHpSwAR6X8AEemnABHp3wAR6iMAEepvABHqpwAR6ucAEeszABHrewAR678AEev3ABHsQwAR7HcAEeyXABHsuwAR7NsAEezzABHtJwAR7VcAEe1zABHtlwAR7cMAEe3nABHuGwAR7mMAEe6fABHuywAR7wMAEe9LABHvbwAR75cAEe+/ABHv/wAR8EMAEfCXABHwqwAR8PMAEfE/ABHxhwAR8acAEfHvABHyKwAR8l8AEfKDABHyzwAR8xsAEfNvABHzswAR87sAEfP3ABH0MwAR9GcAEfSTABH0vwAR9SMAEfU/ABH17wAR9jMAEfafABH24wAR9xMAEfdTABH3swAR99MAEff/ABH4XwAR+MsAEfkrABH5dwAR+ccAEfnzABH6IwAR+lcAEfqLABH6uwAR+vcAEfsfABH7XwAR+5cAEfvbABH8IwAR/IMAEfzDABH9LwAR/WcAEf2nABH92wAR/hsAEf5bABH+kwAR/qsAEf73ABH/RwAR/6sAEf/rABIAMwASAJcAEgDPABIBGwASATMAEgF7ABIBuwASAisAEgKTABICzwASAwcAEgNrABIDwwASBBcAEgRfABIErwASBPMAEgVHABIFnwASBc8AEgYfABIGXwASBtsAEgcXABIHWwASB3sAEge/ABIIGwASCDcAEghrABIIjwASCM8AEglPABIJbwASCacAEgpfABIKjwASCvMAEgsvABILkwASC9MAEgwjABIMVwASDKMAEg0DABINbwASDdsAEg4fABIOZwASDtsAEg8zABIPYwASD3MAEg+HABIPmwASD98AEhAnABIQUwASEH8AEhCvABIQ4wASERMAEhFrABIRnwASEgcAEhI7ABISXwASEssAEhL/ABITSwASE3cAEhO3ABIT6wASFBMAEhQ7ABIUdwASFKsAEhTbABIVCwASFS8AEhV/ABIVuwASFgcAEhZXABIWiwASFt8AEhcnABIXcwASF8cAEhgXABIYawASGJsAEhjfABIZCwASGTcAEhlnABIZpwASGe8AEhofABIaOwASGm8AEhqjABIa5wASGy8AEhtvABIbvwASG+8AEhwzABIcawASHLMAEhzPABIdEwASHUcAEh1rABIdiwASHasAEh3vABIeSwASHocAEh6nABIe3wASHv8AEh83ABIfWwASH5cAEh+3ABIf7wASIDMAEiBfABIgiwASIQcAEiEzABIhgwASIbcAEiHvABIiMwASIo8AEiLXABIjDwASI1MAEiOLABIjvwASI/sAEiQrABIkfwASJJ8AEiTzABIlUwASJZsAEiXTABImCwASJk8AEiaTABIm4wASJyMAEidzABIntwASJ/MAEihXABIpBwASKScAEik/ABIpTwASKZcAEin3ABIqVwASKo8AEirfABIrRwASLBMAEizTABItewASLhsAEi7LABIvkwASL+8AEjBTABIwlwASMM8AEjDjABIxGwASMaMAEjH3ABIyDwASMpsAEjKvABIzGwASM4cAEjPLABI0KwASNI8AEjTbABI1PwASNYcAEjXPABI2BwASNlcAEjanABI20wASNwMAEjczABI3YwASN4cAEjenABI30wASN/8AEjg/ABI4awASOIsAEjivABI44wASOQcAEjk/ABI5dwASObsAEjnbABI6DwASOi8AEjpjABI6jwASOrMAEjsHABI7RwASO5cAEjvzABI8OwASPH8AEjzXABI9FwASPXMAEj2nABI9zwASPfsAEj5TABI+lwASPtcAEj8rABI/ZwASP4sAEj+zABI//wASQG8AEkCPABJAwwASQQcAEkE3ABJBgwASQbcAEkHvABJCFwASQj8AEkJbABJChwASQqMAEkLHABJDGwASQ2sAEkPDABJEFwASRGsAEkSzABJE7wASRSsAEkVnABJFrwASRe8AEkYvABJGdwASRpsAEkbrABJHFwASR0cAEkdnABJHnwASR+MAEkgvABJIdwASSLcAEkkPABJJWwASSZ8AEknrABJKNwASSmsAEkqjABJK0wASSvsAEksnABJLTwASS5cAEkvnABJMBwASTCMAEkx/ABJMpwASTNcAEk0DABJNHwASTTsAEk1XABJNhwASTb8AEk3TABJN5wASTgcAEk4jABJOUwASToMAEk6/ABJO9wASTx8AEk9rABJPrwAST9sAElAXABJQWwASUJsAElDHABJRBwASUS8AElF7ABJRwwASUd8AElIPABJSbwASUpMAElK3ABJS2wASUycAElNvABJTjwASU88AElQvABJUkwASVPcAElVnABJV1wASVkMAElavABJXBwASV0sAEleTABJX0wASWBMAElh7ABJYvwASWO8AEllLABJZuwASWlMAElp3ABJauwASWwcAEluXABJb7wASXBMAElwvABJcQwASXFsAElx/ABJcnwASXOcAEl2LABJd0wASXf8AEl4zABJecwASXqsAEl67ABJe5wASXxsAEl9bABJfawASX78AEl/TABJf6wASX/8AEmAXABJgdwASYKcAEmDvABJhNwASYUcAEmFrABJhkwASYbMAEmJ3ABJifwASYq8AEmN/ABJjmwASZBMAEmSDABJkzwASZOsAEmVLABJljwASZdcAEmYnABJmfwASZpcAEmbrABJnDwASZ4cAEmenABJn+wASaBcAEmhLABJofwASaJ8AEmjnABJpGwASaVcAEmmXABJqBwASaicAEmpbABJqewASaqcAEmrDABJq3wASavsAEmsnABJrTwASa3cAEmu/ABJr6wASbAsAEmwrABJsmwASbPsAEm1HABJtjwASbasAEm3fABJuCwASbk8AEm6PABJu0wASbwMAEm8nABJv1wAScAMAEnAbABJwTwAScIsAEnCjABJwywAScN8AEnD/ABJxGwAScScAEnFXABJxhwASca8AEnHfABJyFwAScm8AEnLDABJzOwASc1sAEnOPABJzuwASc98AEnQvABJ0pwASdNsAEnUfABJ1VwASdasAEnXvABJ2GwASdjcAEnZ3ABJ29wASd28AEnfjABJ4IwASeGcAEnjDABJ49wASeTcAEnmTABJ59wASejMAEnqDABJ6swASeucAEnsfABJ7WwASe48AEnvHABJ8BwASfNsAEn3HABJ9+wASfiMAEn57ABJ+xwASfycAEn9DABJ/iwASf6sAEoA3ABKAwwASgNcAEoEXABKBmwASgesAEoKDABKDWwASg+MAEoP7ABKEwwAShU8AEoW3ABKGMwAShoMAEobnABKHQwASh3cAEoerABKH1wASiBMAEohPABKIfwASiLMAEojvABKJMwASiW8AEonTABKKLwASiosAEoqzABKLEwASizsAEot7ABKLnwASi88AEov7ABKMJwASjHMAEoyXABKMtwASjNcAEoz7ABKNFwASjTcAEo1fABKNiwASjesAEo4TABKOOwASjnMAEo6rABKO6wASj0sAEo+TABKP2wASkB8AEpBTABKQewASkK8AEpDbABKRAwASkSMAEpFLABKRZwASkYMAEpGvABKR6wASkisAEpJPABKShwASksMAEpLnABKTDwASk1MAEpNvABKTpwASk8cAEpPPABKUHwASlHcAEpSjABKUxwASlTMAEpVPABKVcwASlaMAEpXHABKWFwASlm8AEpaTABKWxwASlu8AEpcfABKXRwASl18AEpdzABKX7wASmDMAEphzABKYzwASmS8AEpl3ABKZtwASmd8AEporABKaSwASmoMAEpr7ABKbcwASm/MAEpwbABKcWwASnKMAEpzvABKdKwASnWMAEp2jABKd3wASnhMAEp4bABKenwASnsMAEp7rABKfCwASn0cAEp9zABKfnwASoDsAEqBjABKgqwASoOsAEqEvABKhdwASobcAEqHfABKiHwASojcAEqJTABKiewASor8AEqLvABKjTwASo4cAEqO/ABKkGwASpGcAEqTDABKlFwASpYcAEqYbABKmdwASpsMAEqcDABKnNwASp48AEqe/ABKoHwASqH8AEqkHABKpWwASqbcAEqoTABKqlwASqtsAEqtfABKrxwASrAsAEqxfABKs/wASrT8AEq2bABKt6wASrlcAEq6TABKu4wASr4MAEq/PABKwFwASsEsAErBnABKwiwASsNcAErETABKxdwASsfMAErInABKyawASsqMAErLfABKzIwASs08AErPHABK0HwAStDcAErSbABK0ywAStQ8AErVDABK1owAStd8AErYzABK2mwAStwMAErfbABK4TwASuSsAErlrABK6NwASuo8AErtDABK7fwASu78AErwHABK8TwASvJcAErzLABK9LwASvVcAEr1zABK9swASvgsAEr5HABK+owASvssAEr7/ABK/IwASv2cAEr+bABK/zwASv/8AEsAvABLAawASwJsAEsDvABLBQwASwZMAEsHvABLCRwASwn8AEsKzABLDAwASw1cAEsPPABLD/wASxCsAEsRPABLEvwASxP8AEsU7ABLFbwASxa8AEsYDABLGQwASxlcAEsaLABLG8wASxyMAEsdjABLHgwASx8cAEsgLABLIewASyLMAEsjXABLJEwASyXMAEsm3ABLKEwASylcAEsqDABLK1wASyxsAEstfABLLxwASzB8AEsyfABLM4wASzQsAEs1DABLNowASzfsAEs5TABLOkwASzscAEs8nABLPdwASz7cAEs/7ABLQQwAS0JMAEtD3ABLRewAS0bMAEtH3ABLSfwAS0tsAEtOTABLT0wAS1BcAEtQzABLUfwAS1IcAEtSfABLU1wAS1U8AEtV/ABLV0wAS1isAEtZvABLWxwAS12sAEtgTABLYQwAS2HMAEtjDABLZKwAS2Y8AEtoTABLaZwAS2q8AEtsDABLbXwAS25cAEtvPABLcAwAS3E8AEtyfABLc+wAS3V8AEt2jABLd8wAS3hsAEt5fABLeqwAS3v8AEt9DABLfiwAS39MAEt/zABLgFwAS4EcAEuBrABLgiwAS4L8AEuDzABLhEwAS4TMAEuFfABLhiwAS4ccAEuIDABLiOwAS4nMAEuLXABLjEwAS42cAEuOPABLkFwAS5EsAEuSnABLk/wAS5TMAEuVrABLlpwAS5e8AEuYjABLmWwAS5nMAEuaHABLmvwAS5v8AEucnABLnPwAS52MAEud7ABLnhwAS56cAEue7ABLn5wAS6CsAEuhPABLogwAS6LsAEuj7ABLpOwAS6YMAEumnABLp5wAS6i8AEupDABLqWwAS6o8AEurTABLrIwAS628AEuuHABLr4wAS7BsAEuynABLtOwAS7XMAEu2vABLuAwAS7osAEu8LABLvMwAS78MAEvAjABLwSwAS8HcAEvCXABLwtwAS8NcAEvEDABLxLwAS8VcAEvGDABLxwwAS8e8AEvInABLyUwAS8ncAEvKnABLy2wAS8w8AEvNPABLzhwAS86sAEvPbABL0HwAS9FMAEvR7ABL0uwAS9PsAEvVDABL1owAS9gMAEvZjABL2pwAS9ucAEvdPABL3rwAS98sAEvgfABL4VwAS+JMAEvi3ABL47wAS+S8AEvljABL5lwAS+dMAEvoPABL6QwAS+m8AEvrLABL7FwAS+zcAEvuHABL71wAS+/cAEvwvABL8ZwAS/KMAEvzPABL9DwAS/VMAEv2LABL9vwAS/g8AEv5jABL+rwAS/vsAEv9HABL/fwAS/6cAEv/3ABMAWwATALcAEwDjABMBEwATAVsAEwGfABMB0wATAjMAEwJnABMCmwATAs8AEwMXABMDKwATA2cAEwOjABMD+wATBBMAEwRfABMEjwATBM8AEwUfABMFSwATBWMAEwWfABMF4wATBiMAEwaHABMGywATBvsAEwcTABMHXwATB4sAEwerABMH/wATCDsAEwhjABMIhwATCNMAEwkLABMJawATCa8AEwnzABMKVwATCpMAEwrPABMLJwATC2cAEwuXABMLxwATDBsAEwxvABMMkwATDMsAEw0HABMNIwATDUcAEw1vABMNiwATDbsAEw4PABMOUwATDpMAEw6/ABMPBwATD2MAEw+jABMP+wATEDsAExB7ABMQtwATEN8AExEDABMRQwATEWMAExGXABMR4wATEiMAExJjABMSewATEr8AExLXABMTQwATE3sAExOTABMTvwATE+cAExQTABMURwATFF8AExRvABMUkwATFNMAExTrABMVEwATFTcAExVPABMVYwATFXsAExWbABMVywATFe8AExYfABMWVwATFqMAExbDABMW6wATFzMAExdbABMXcwATF38AExejABMX+wATGB8AExhPABMYowATGM8AExjrABMZGwATGW8AExmHABMZtwATGdsAExoHABMaSwATGpsAExrHABMa3wATGvcAExsfABMbMwATG3sAExurABMbzwATG+sAExwzABMcfwATHNMAEx0rABMdewATHasAEx3nABMeKwATHm8AEx67ABMe9wATHzcAEx93ABMfswATH/MAEyAjABMgZwATIKcAEyD/ABMhMwATIX8AEyG7ABMiDwATIlcAEyK3ABMjAwATI1sAEyOTABMjvwATJBsAEyRrABMk0wATJT8AEyWrABMmKwATJp8AEybzABMnOwATJ4cAEye3ABMoFwATKHcAEyi3ABMo+wATKVsAEymzABMp+wATKm8AEyq3ABMq/wATKzsAEytbABMrcwATK5cAEyu7ABMr0wATLAsAEyxTABMscwATLKMAEyzDABMs9wATLSsAEy1nABMtmwATLb8AEy3rABMuEwATLjMAEy5jABMujwATLrcAEy7jABMvDwATLzcAEy9vABMvkwATL7MAEy/TABMwOwATMHMAEzCbABMw3wATMRcAEzFXABMxmwATMdsAEzITABMyRwATMoMAEzK7ABMzDwATM0MAEzNvABMzpwATM78AEzPnABM0UwATNHcAEzSrABM09wATNP8AEzUzABM1TwATNYMAEzWjABM14wATNisAEzZLABM2gwATNpsAEza/ABM25wATNxsAEzdHABM3dwATN5MAEze7ABM4BwATOD8AEzhPABM4dwATOIsAEzjLABM44wATORMAEzlDABM5awATOa8AEzn7ABM6JwATOlcAEzqLABM60wATOvsAEzsnABM7VwATO3MAEzufABM74wATPAMAEzwjABM8SwATPHsAEzyXABM8ywATPQ8AEz1PABM9dwATPasAEz3jABM+DwATPkMAEz6XABM+ywATPxMAEz93ABM/kwATP98AE0AXABNAZwATQOcAE0EzABNBrwATQf8AE0IjABNCowATQvMAE0MbABNDmwATQ8MAE0P3ABNELwATRGsAE0SbABNEswATROsAE0VDABNFpwATRfcAE0ZLABNGewATRp8AE0brABNHOwATR18AE0enABNH0wATSBcAE0gvABNIUwATSJcAE0i/ABNI6wATSSsAE0lPABNJZwATSYMAE0mTABNJqwATScsAE0nfABNJ9wATShMAE0ozABNKWwATSpsAE0rLABNK7wATSxMAE0szABNLXwATS48AE0u/ABNL8wATTC8AE0xLABNMbwATTLcAE0zvABNM9wATTSsAE01vABNNfwATTZsAE02/ABNN4wATTicAE05PABNOawATTp8AE07fABNPDwATTzcAE09jABNPewATT5cAE0+zABNP4wATT/8AE1APABNQKwATUD8AE1BTABNQYwATUHcAE1CTABNQqwATUQcAE1EfABNRQwATUWcAE1F3ABNRnwATUcMAE1HjABNSAwATUkMAE1JPABNSjwATUrMAE1LXABNTAwATU1MAE1OHABNTswATU9cAE1P7ABNUEwATVCcAE1Q7ABNUUwATVG8AE1SHABNUlwATVMMAE1TbABNVFwATVU8AE1V3ABNViwATVZsAE1X3ABNWDwATViMAE1ZvABNWjwATVrsAE1bjABNXAwATVxMAE1c/ABNXnwATV8MAE1gLABNYKwATWF8AE1hzABNYmwATWLcAE1j3ABNZNwATWU8AE1lnABNZfwATWaMAE1m/ABNaOwATWlcAE1qHABNazwATWwsAE1uLABNcAwATXE8AE1zLABNc9wATXScAE11XABNdtwATXesAE14bABNeSwATXmMAE167ABNe8wATXyMAE19fABNfswATX78AE1/jABNgGwATYFMAE2CLABNgvwATYNcAE2D/ABNhHwATYUsAE2G/ABNh4wATYgsAE2JHABNigwATYpMAE2LXABNi/wATYysAE2NnABNjjwATY7cAE2PbABNj/wATZFcAE2SfABNk8wATZR8AE2VLABNldwATZcsAE2XnABNmIwATZlcAE2aTABNm3wATZysAE2ePABNn2wATaCcAE2iXABNo0wATaRMAE2k7ABNpXwATaYcAE2mfABNpwwATad8AE2oHABNqJwATamcAE2qbABNqzwATavcAE2sbABNrWwATa38AE2vPABNr8wATbCMAE2xLABNsjwATbOMAE207ABNtqwATbf8AE24zABNuXwATbo8AE27LABNvDwATb1MAE2/HABNv/wATcFcAE3C3ABNxGwATcTsAE3GzABNx5wATclsAE3K7ABNy4wATczcAE3NfABNzfwATc6sAE3P7ABN0IwATdEsAE3SXABN0uwATdN8AE3U3ABN1hwATdbsAE3YXABN2VwATdqsAE3bXABN3CwATd2MAE3e7ABN4NwATeLMAE3jTABN48wATeT8AE3lfABN5wwATehMAE3pDABN6XwATemsAE3qPABN6swATetMAE3snABN7SwATe28AE3uTABN7ywATe/8AE3w7ABN8dwATfJsAE3zDABN9EwATfWsAE32PABN9vwATfecAE34LABN+NwATfncAE36LABN+uwATftMAE37rABN++wATfxcAE38zABN/fwATf5MAE3/DABN//wATgDMAE4B7ABOAswATgRMAE4FDABOBswATgd8AE4I/ABOCcwATgp8AE4KzABOC7wATgysAE4ODABODxwAThA8AE4R3ABOExwAThQcAE4VrABOFjwAThdMAE4YDABOGMwAThmsAE4abABOGwwAThxsAE4dTABOHnwATiCMAE4hTABOIzwATiQ8AE4lPABOJkwATie8AE4pLABOKkwATiuMAE4szABOLfwATi9sAE4wjABOMZwATjKsAE40HABONPwATjY8AE43rABOORwATjrcAE47/ABOPSwATj38AE4+7ABOP9wATkDsAE5BrABOQ5wATkV8AE5HXABOR+wATkmsAE5KnABOS7wATkzcAE5N/ABOTzwATk/MAE5RXABOUjwATlLMAE5UDABOVJwATlY8AE5XHABOWNwATlnsAE5a/ABOW5wATlwcAE5dDABOXbwATl4MAE5fXABOYOwATmIsAE5ijABOYpwATmQMAE5lLABOZnwATmecAE5o/ABOaawATmqcAE5sbABObmwATnBsAE5x/ABOc5wATnUcAE527ABOeMwATnpMAE58DABOfXwATn78AE6AfABOgowAToNMAE6ErABOhfwAToasAE6IvABOiqwATovsAE6NjABOjnwATo9sAE6QLABOkdwATpNcAE6UnABOlPwATpZ8AE6W/ABOmAwATpjMAE6ZrABOmowATpxsAE6eXABOn1wATqBcAE6iTABOpEwATqW8AE6nLABOqJwATqkMAE6qTABOrAwATq0cAE6tzABOrxwATrAsAE6wnABOsawATrM8AE603ABOtSwATrZsAE63jABOt+wATrjcAE65rABOugwATrp8AE67PABOvGwATr3MAE6+3ABOv2wATsAsAE7BjABOwtwATsS8AE7FPABOx2wATsf8AE7KTABOyvwATsy8AE7NDABOzhwATs8cAE7QfABO0fwATtL8AE7T3ABO1NwATtXcAE7W/ABO15wATtgsAE7ZzABO2uwATtyMAE7eLABO3vwATt/sAE7iXABO4vwATuRsAE7lXABO5nwATufMAE7pLABO6fwATupsAE7rfABO7LwATu4cAE7vLABO8HwATvMcAE70TABO9ZwATvecAE743ABO+jwATv1cAE7/nABPAKwATwFcAE8CnABPAswATwNMAE8D3ABPBLwATwYcAE8H3ABPCIwATwqcAE8LbABPDUwATw68AE8PnABPEGwATxDsAE8SDABPEywATxScAE8V/ABPF1wATxjsAE8arABPHGwATx5sAE8e/ABPIBwATyFMAE8jrABPJXwATyX8AE8mfABPJzwATyfsAE8ofABPKUwATypsAE8rLABPK9wATyxsAE8tPABPLcwATy9MAE8wLABPMRwATzGsAE8yjABPM0wATzSsAE82HABPNvwATzfMAE84vABPObwATzqMAE87nABPPGwATz1MAE8+PABPPtwATz/cAE9A3ABPQSwAT0I8AE9CnABPQqwAT0PcAE9EfABPRkwAT0esAE9JPABPSwwAT0y8AE9PfABPUZwAT1O8AE9V3ABPV6wAT1msAE9bnABPXVwAT19cAE9g/ABPY6wAT2VcAE9m/ABPaJwAT2pMAE9sHABPbvwAT3E8AE9zDABPdLwAT3Z8AE94zABPe3wAT33cAE9/rABPgewAT4JMAE+CjABPg9wAT4SMAE+FPABPhcwAT4YcAE+GrABPh+wAT4gsAE+IXABPicwAT4qcAE+K3ABPiywAT4wMAE+NTABPjjwAT48MAE+PzABPkRwAT5GMAE+T/ABPlwwAT5jcAE+ZfABPmiwAT5vcAE+cjABPnewAT558AE+fLABPoHwAT6D8AE+hnABPoxwAT6PMAE+knABPphwAT6bMAE+nnABPqPwAT6mMAE+p7ABPq0wAT6vsAE+sfABPrQwAT60sAE+ufABPrvwAT6+MAE+w3ABPsVwAT7HsAE+yjABPsqwAT7OcAE+1bABPtmwAT7d8AE+4TABPuSwAT7nsAE+7HABPvEwAT72sAE+//ABPwSwAT8JcAE/DHABPxCwAT8SsAE/GDABPxpwAT8c8AE/JDABPygwAT8ucAE/NHABPzcwAT86MAE/P7ABP0dwAT9J8AE/TvABP1CwAT9S8AE/VrABP1kwAT9ccAE/YHABP2JwAT9oMAE/a7ABP27wAT9y8AE/erABP38wAT+EsAE/iLABP48wAT+TcAE/mXABP5zwAT+iMAE/qHABP6/wAT+3MAE/vLABP8IwAT/HcAE/zPABP9JwAT/YMAE/3bABP+MwAT/osAE/7jABP/PwAT/5MAE//nABQAQwAUAJ8AFAD3ABQBXwAUAb8AFAJnABQCqwAUAtsAFALrABQDBwAUAysAFANTABQDgwAUA6MAFAPXABQD+wAUBA8AFARDABQEewAUBQ8AFAV7ABQFswAUBe8AFAZLABQGnwAUBscAFAbrABQHGwAUB5MAFAfXABQINwAUCKsAFAjHABQI5wAUCT8AFAlXABQJcwAUCasAFAnPABQJ9wAUChcAFAo7ABQKpwAUCuMAFAsnABQLewAUC9MAFAv7ABQMJwAUDGcAFAzrABQNTwAUDeMAFA5DABQOqwAUDuMAFA8nABQPdwAUD9MAFBAfABQQrwAUEQsAFBFvABQSCwAUEnMAFBLjABQTQwAUE2cAFBOTABQT0wAUE/8AFBR7ABQU6wAUFUMAFBWnABQVswAUFe8AFBYrABQWcwAUFoMAFBabABQWxwAUFu8AFBcLABQXFwAUFyMAFBc3ABQXowAUF+MAFBhLABQYvwAUGQsAFBlHABQZiwAUGbsAFBnzABQaDwAUGj8AFBpXABQaqwAUGtsAFBsrABQbRwAUG18AFBt3ABQb0wAUHCcAFBxPABQccwAUHLsAFB0DABQdMwAUHdMAFB3vABQeZwAUHq8AFB7XABQfzwAUIA8AFCA3ABQgVwAUIIcAFCD7ABQhMwAUIWsAFCGjABQhtwAUIeMAFCInABQiawAUIrcAFCMDABQjPwAUI38AFCO7ABQkEwAUJEcAFCRjABQklwAUJMcAFCUXABQlewAUJfMAFCYHABQmGwAUJjMAFCaDABQmmwAUJsMAFCbrABQnMwAUJ5MAFCfvABQoUwAUKI8AFCjLABQo/wAUKUsAFClvABQpwwAUKiMAFCqPABQq+wAUK3cAFCu/ABQsDwAULGMAFCzTABQtQwAULX8AFC2/ABQuKwAULpcAFC8DABQvbwAUL+sAF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V0PABVdYwAVXacAFV33ABVeQwAVXpsAFV7rABVfNwAVX4MAFWAXABVgvwAVYR8AFWF/ABVhpwAVYecAFWI3ABVimwAVYw8AFWOHABVjuwAVZAsAFWQzABVkewAVZN8AFWU3ABVlZwAVZccAFWYTABVmXwAVZpsAFWa/ABVmzwAVZx8AFWebABVoAwAVaD8AFWiHABVozwAVaQ8AFWlPABVpmwAVaesAFWozABVqgwAVazcAFWuPABVr9wAVbHcAFWznABVtVwAVbdcAFW5HABVuawAVbpMAFW6vABVuzwAVbw8AFW87ABVvYwAVb8sAFXADABVwUwAVcKcAFXDjABVxKwAVcbcAFXIXABVySwAVcq8AFXL/ABVzVwAVc68AFXQPABV0QwAVdJsAFXUfABV1owAVddcAFXYbABV2VwAVdpcAFXbTABV3RwAVd4cAFXgXABV4dwAVeM8AFXkfABV5VwAVeYcAFXnbABV6NwAVel8AFXp7ABV6rwAVeuMAFXsLABV7PwAVe3cAFXubABV72wAVfAsAFXxDABV8mwAVfNsAFX0HABV9RwAVfWsAFX2jABV+DwAVfkcAFX57ABV+3wAVfz8AFX+rABV/1wAVgAMAFYBbABWA5wAVgWsAFYGbABWBxwAVgesAFYH3ABWCDwAVgn8AFYKbABWCywAVgtMAFYLbABWDEwAVg1MAFYN7ABWDqwAVhAsAFYR7ABWEywAVhPMAFYVXABWFgwAVhasAFYX3ABWGfwAVhqMAFYbXABWHHwAVh6cAFYgDABWIVwAViIsAFYjvABWJHwAVia8AFYofABWKPwAVincAFYrfABWLOwAVi5cAFYu7ABWMGwAVjH8AFYzXABWNNwAVjY8AFY3rABWOJwAVjlcAFY6PABWOuwAVju8AFY9jABWPpwAVkAcAFZAvABWQXwAVkIMAFZCnABWQ0wAVkRcAFZFbABWRpwAVkdMAFZIjABWSUwAVkrcAFZL/ABWTkwAVlDcAFZS7ABWVqwAVliMAFZZ/ABWW/wAVl3sAFZfTABWYTwAVmKsAFZjzABWZSwAVmcMAFZoTABWaGwAVmkMAFZpvABWaqwAVmssAFZs3ABWbswAVnA8AFZzXABWdDwAVnS8AFZ1/ABWdswAVneMAFZ47ABWejwAVnqcAFZ77ABWfEwAVnz8AFZ97ABWfywAVn/MAFaAbABWgQwAVoGMAFaBvABWgkwAVoOsAFaEXABWhPwAVoYsAFaGfABWh7wAVogMAFaIXABWiMwAVolsAFaKDABWiwwAVowcAFaNfABWjmwAVo7cAFaQbABWkNwAVpHMAFaSvABWk6wAVpUcAFaWTABWl5wAVpi8AFaZzABWm0wAVpzsAFadTABWnbwAVp4sAFae/ABWn8wAVqAsAFag/ABWoVwAVqG8AFajfABWpHwAVqUsAFamHABWprwAVqc8AFaoTABWqawAVqn8AFaq3ABWq8wAVqycAFatjABWrpwAVq8sAFavvABWsFwAVrDcAFaxfABWsdwAVrKcAFazDABWs8wAVrVcAFa2HABWtuwAVrd8AFa4bABWuMwAVrlMAFa6fABWu6wAVrvcAFa8XABWvNwAVr2cAFa+HABWvlwAVr78AFa/HABWv9wAVsC8AFbBnABWwhwAVsK8AFbDfABWw6wAVsPMAFbELABWxRwAVsW8AFbGnABWx3wAVshsAFbJjABWybwAVsqcAFbLPABWy8wAVsycAFbM3ABWzRwAVs2cAFbOnABWz8wAVtCsAFbRXABW0XwAVtGcAFbSbABW0uwAVtOMAFbTrABW08wAVtRcAFbVLABW1bwAVtacAFbXLABW16wAVticAFbZXABW2gwAVtq8AFba/ABW3FwAVtz8AFbdvABW3gwAVt5sAFbejABW3qwAVt9MAFbgDABW4FwAVuDMAFbhvABW4qwAVuM8AFbjjABW5BwAVuTcAFblPABW5gwAVuZ8AFbnbABW59wAVujsAFbqHABW6uwAVuucAFbsjABW7hwAVu6sAFbvXABW8EwAVvB8AFbwrABW8PwAVvFMAFbx/ABW8qwAVvNMAFb0DABW9FwAVvV8AFb2nABW9zwAVve8AFb6DABW+rwAVvucAFb8PABW/IwAVv1cAFb9/ABW/lwAVv68AFcBHABXAgwAVwLMAFcDXABXA5wAVwRMAFcFbABXBgwAVwbcAFcHHABXB6wAVwfsAFcI3ABXCXwAVwncAFcKjABXC1wAVwvMAFcMfABXDPwAVw28AFcODABXDvwAVw98AFcQPABXEPwAVxFsAFcSHABXEqwAVxN8AFcUDABXFIwAVxU8AFcVrABXFiwAVxb8AFcXbABXGCwAVxiMAFcZHABXGVwAVxmcAFcZ3ABXGpwAVxrcAFcbLABXG6wAVxwsAFcc3ABXHRwAVx1sAFcd/ABXHuwAVx9MAFcgXABXIIwAVyLMAFcjbABXJAwAVySsAFclHABXJZwAVyYMAFcmrABXJwwAVyfsAFcoLABXKHwAVykMAFcpvABXKgwAVyrcAFcsHABXLTwAVy4sAFcvTABXMEwAVzL8AFcz7ABXNQwAVzYcAFc3TABXOYwAVzqsAFc7fABXPHwAVz18AFc+XABXPtwAVz/8AFdCbABXRHwAV0U8AFdF/ABXR4wAV0j8AFdJvABXSpwAV0ssAFdMLABXTNwAV03MAFdO/ABXUDwAV1FMAFdTDABXVDwAV1VMAFdV7ABXVuwAV1hsAFdYzABXWuwAV1v8AFddnABXXvwAV2DsAFdh7ABXY/wAV2UcAFdmXABXZ1wAV2h8AFdpPABXajwAV2rsAFdr/ABXbPwAV24cAFdunABXb4wAV3CMAFdxrABXc0wAV3VMAFd2HABXd3wAV3k8AFd6rABXfDwAV32cAFd/DABXf+wAV4D8AFeCHABXgwwAV4P8AFeEnABXhZwAV4ZMAFeHfABXiFwAV4lcAFeKbABXixwAV4wsAFeMjABXjXwAV44cAFePTABXj/wAV5DsAFeRvABXkqwAV5OMAFeUfABXlYwAV5ccAFeZDABXmcwAV5scAFeczABXniwAV5+sAFeg/ABXolwAV6MsAFekLABXpTwAV6YcAFem/ABXp4wAV6h8AFepHABXqjwAV6ssAFesLABXrPwAV62cAFeunABXr1wAV7BsAFexXABXsmwAV7NsAFe0zABXtYwAV7ccAFe4jABXuhwAV7ucAFe9fABXvjwAV7+cAFfA3ABXwXwAV8LcAFfDnABXxOwAV8acAFfHrABXyFwAV8lMAFfKHABXyuwAV8vsAFfM3ABXzgwAV85cAFfPDABXz8wAV9BcAFfRXABX0jwAV9McAFfT7ABX1MwAV9W8AFfXDABX2CwAV9iMAFfYzABX2XwAV9tMAFfbzABX3MwAV92cAFferABX4RwAV+H8AFfjLABX47wAV+TMAFfl3ABX5rwAV+gMAFfqDABX6xwAV+xsAFftjABX8AwAV/FcAFfyjABX84wAV/UMAFf2LABX93wAV/hsAFf5LABX+rwAV/vMAFf87ABX/iwAV/88AFgAfABYAZwAWAJsAFgDDABYA8wAWAS8AFgFrABYBrwAWAecAFgJfABYChwAWAr8AFgM/ABYDgwAWA9MAFgR3ABYE3wAWBScAFgWTABYF3wAWBjcAFgZ/ABYGxwAWBw8AFgd/ABYHowAWCA8AFgiDABYJEwAWCacAFgonABYKjwAWCucAFgtjABYL5wAWDCcAFgxPABYMmwAWDOMAFg1fABYNywAWDhMAFg5XABYOjwAWDssAFg8PABYPNwAWD1sAFg+LABYPuwAWEBMAFhBrABYQvwAWER8AFhF/ABYR1wAWEj8AFhKXABYS6wAWEz8AFhNbABYTgwAWE/cAFhRPABYUywAWFUMAFhW3ABYWOwAWFmMAFhbvABYXYwAWF8cAFhgXABYYWwAWGJcAFhjHABYZFwAWGb8AFhpPABYbawAWHGsAFhyzABYc5wAWHRcAFh1PABYdhwAWHbsAFh4DABYeRwAWHn8AFh6fABYe3wAWHzMAFh+XABYgGwAWIH8AFiDnABYhNwAWIZcAFiHrABYiLwAWIo8AFiLzABYjewAWI+8AFiSDABYk+wAWJVsAFiXLABYmNwAWJqcAFicvABYnuwAWKDsAFiiDABYozwAWKQsAFilnABYpqwAWKeMAFioPABYqZwAWKqcAFisHABYrSwAWK4sAFiu/ABYsCwAWLEsAFixvABYsuwAWLO8AFi0bABYtPwAWLYMAFi3bABYuTwAWLoMAFi7DABYu5wAWLw8AFi87ABYvjwAWMAsAFjBPABYwlwAWMN8AFjD/ABYxRwAWMbcAFjHrABYyTwAWMpcAFjMLABYzlwAWM8cAFjPvABY0OwAWNJMAFjS/ABY1CwAWNbsAFjZLABY23wAWN+cAFjgbABY4WwAWOH8AFjjjABY5IwAWOVsAFjl7ABY5mwAWObMAFjnXABY5/wAWOkMAFjpzABY6twAWOtsAFjrzABY7EwAWO2cAFjurABY73wAWPEsAFjyPABY81wAWPOcAFj0XABY9NwAWPYcAFj2nABY93wAWPgcAFj5HABY+iwAWPrcAFj77ABY/QwAWP38AFj/HABZAIwAWQE8AFkBnABZAjwAWQRsAFkFPABZBcwAWQa8AFkHrABZCEwAWQj8AFkKTABZCwwAWQvsAFkMzABZDVwAWQ48AFkPHABZD/wAWREMAFkR7ABZExwAWRP8AFkVHABZFewAWRYMAFkWrABZF1wAWRgMAFkY/ABZGewAWRr8AFkbrABZHQwAWR28AFkePABZH2wAWSAsAFkhHABZIZwAWSJsAFkj3ABZJKwAWSVsAFknHABZKIwAWSkcAFkqnABZLBwAWS1sAFkuDABZLmwAWS8sAFkvfABZMFwAWTEMAFkxnABZMvwAWTQ8AFk0bABZNZwAWTa8AFk27ABZN6wAWTisAFk5zABZOwwAWTw8AFk8vABZPUwAWT3MAFk+TABZP8wAWUCcAFlBvABZQwwAWURcAFlFfABZRswAWUgsAFlJDABZSlwAWUucAFlMbABZTMwAWU3sAFlOLABZTvwAWU/8AFlRHABZUbwAWVJcAFlTDABZU8wAWVWcAFlWnABZWKwAWVksAFlaXABZW0wAWV0MAFlePABZX6wAWWB8AFliHABZYwwAWWOsAFlkjABZZhwAWWbMAFlnbABZZ8wAWWg8AFlorABZaYwAWWsMAFlsHABZbMwAWW08AFluTABZbvwAWW/sAFlwrABZcewAWXM8AFl0PABZdOwAWXYcAFl3HABZeEwAWXisAFl5HABZecwAWXocAFl7PABZfFwAWX58AFmAjABZgswAWYQcAFmEvABZhcwAWYcMAFmIrABZibwAWYocAFmLHABZjBwAWYzsAFmNzABZjmwAWY7sAFmPrABZkNwAWZEMAFmRjABZkhwAWZJMAFmSfABZkywAWZQcAFmVLABZlfwAWZcMAFmYLABZmVwAWZoMAFmazABZm7wAWZzsAFmePABZnwwAWaAcAFmg7ABZoewAWaJsAFmjLABZo0wAWaRMAFmk7ABZpWwAWaX8AFmmvABZp3wAWai8AFmp7ABZqmwAWatcAFmtLABZrkwAWa/cAFmxXABZsiwAWbN8AFmz/ABZtSwAWbZsAFm3zABZuHwAWbl8AFm67ABZu+wAWbycAFm9nABZvnwAWb/cAFnBbABZwwwAWcQ8AFnE7ABZxWwAWcYsAFnHDABZx+wAWchMAFnJXABZybwAWcpMAFnLHABZy0wAWcwMAFnM/ABZzbwAWc68AFnP/ABZ0FwAWdG8AFnTbABZ1NwAWdaMAFnYzABZ2owAWdycAFnePABZ3qwAWd8cAFngLABZ4bwAWeMcAFnkHABZ5JwAWeW8AFnmrABZ52wAWehcAFnpjABZ6swAWeusAFnsbABZ7SwAWe3cAFnvrABZ8OwAWfKMAFn0XABZ9ewAWfccAFn4PABZ+MwAWflcAFn5fABZ+ZwAWftMAFn83ABZ/QwAWf08AFn9zABZ/lwAWf6sAFn+/ABaAFwAWgC8AFoBHABaAXwAWgHcAFoCPABaApwAWgOsAFoE3ABaBbwAWgZMAFoG7ABaCFwAWgmsAFoKzABaDAwAWgycAFoNPABaDgwAWg68AFoQHABaEPwAWhG8AFoSjABaE/wAWhVcAFoWTABaFwwAWhe8AFoYbABaGmwAWhrcAFobbABaHKwAWh2cAFoejABaHzwAWh/8AFog3ABaIbwAWiJ8AFojDABaI4wAWiQ8AFolrABaJmwAWiecAFoojABaKWwAWin8AFoqzABaK3wAWi0MAFot/ABaLzwAWjB8AFoxfABaMxwAWjQMAFo0fABaNZwAWjc8AFo3fABaOFwAWjlcAFo5zABaOrwAWjucAFo9DABaPkwAWj9cAFpAXABaQXwAWkIcAFpCfABaQvwAWkNcAFpDvABaREwAWkW8AFpGTABaRtwAWkgsAFpIvABaSTwAWkncAFpKbABaS4wAWkwcAFpNPABaTYwAWk38AFpOXABaTpwAWk78AFpPjABaUCwAWlEMAFpRvABaUjwAWlJ8AFpTfABaU9wAWlR8AFpVLABaVYwAWlZcAFpXTABaV/wAWlh8AFpZPABaWdwAWlqsAFpbHABaW8wAWlxsAFpdHABaXdwAWl5MAFpfPABaYCwAWmHMAFpiXABaYrwAWmNsAFpkDABaZLwAWmVsAFpmHABaZnwAWmcsAFpnjABaaCwAWmjMAFppbABaakwAWmq8AFprTABaa7wAWmwcAFpsbABabWwAWm2sAFpt7ABabiwAWm5sAFpvPABacAwAWnDMAFpxPABacpwAWnNsAFp0vABadPwAWnVMAFp1vABadtwAWnecAFp5PABaejwAWnr8AFp7PABae7wAWnw8AFp8nABafPwAWn2cAFp+TABafpwAWn78AFp/3ABagKwAWoHcAFqCXABagtwAWoN8AFqD3ABahFwAWoUsAFqF/ABahnwAWocsAFqH/ABaiJwAWomMAFqKXABaitwAWou8AFqMvABajhwAWo6MAFqPbABaj+wAWpBcAFqQzABakZwAWpI8AFqSrABakxwAWpPcAFqUbABalQwAWpV8AFqV3ABalowAWpc8AFqX3ABamIwAWpkcAFqaHABamowAWpr8AFqbfABam/wAWpx8AFqc/ABanXwAWp5MAFqe7ABan5wAWqBcAFqhPABaoiwAWqLsAFqjTABapCwAWqTcAFql7ABaprwAWqdsAFqoLABaqMwAWqlcAFqqDABaqswAWqvsAFqsvABarawAWq5sAFquzABar3wAWq/MAFqwbABasMwAWrEcAFqx7ABaslwAWrK8AFqzHABas1wAWrO8AFq0nABatWwAWrbsAFq3rABauHwAWrjsAFq5zABaujwAWrsMAFq7jABavIwAWr1MAFq+DABavxwAWr+sAFrAHABawGwAWsF8AFrCLABawmwAWsK8AFrDLABaxAwAWsTMAFrFfABaxdwAWsZcAFrG3ABax1wAWsf8AFrIjABayQwAWslsAFrKvABaywwAWsvsAFrMTABazKwAWsz8AFrNjABazgwAWs7sAFrPLABaz6wAWtAcAFrQfABa0VwAWtIsAFrTDABa07wAWtSMAFrUzABa1UwAWtV8AFrWHABa1qwAWtc8AFrX3ABa2WwAWtl8AFrZjABa2ZwAWtmsAFrZvABa2cwAWtncAFrZ7ABa2fwAWtoMAFrb3ABa3OwAWt2cAFrenABa3uwAWt+cAFrf/ABa4MwAWuGcAFriLABa41wAWuRMAFrlfABa5mwAWueMAFrobABa6nwAWuxMAFrtXABa7awAWu6MAFrvrABa8FwAWvFMAFryjABa88wAWvUMAFr1/ABa9xwAWvi8AFr57ABa+swAWvt8AFr8LABa/XwAWv5sAFr/PABbAGwAWwJcAFsDzABbBRwAWwXMAFsGfABbB5wAWwh8AFsJvABbCuwAWwvsAFsMzABbDewAWw7cAFsQPABbEPwAWxH8AFsS3ABbFAwAWxUsAFsVzABbFvwAWxdsAFsYPABbGJwAWxlcAFsaDABbGqwAWxtMAFsc/ABbHswAWx98AFsgvABbIbwAWyLMAFsjnABbJEwAWyWcAFsmvABbKDwAWyiMAFsqXABbKxwAWyxMAFss/ABbLcwAWy6MAFsvDABbMAwAWzDMAFsxfABbMtwAWzS8AFs2HABbN0wAWzeMAFs5PABbOywAWzysAFs9DABbPkwAWz7sAFtATABbQMwAW0HcAFtDDABbRAwAW0UMAFtGLABbR3wAW0isAFtKTABbS+wAW028AFtPfABbUIwAW1IcAFtTLABbVJwAW1bMAFtX/ABbWSwAW1nsAFtbTABbXPwAW12MAFteXABbXwwAW2B8AFthbABbYmwAW2NcAFtlDABbZXwAW2ZcAFtnjABbZ/wAW2ksAFtqfABba6wAW2wcAFtsvABbbhwAW2+cAFtxDABbcdwAW3I8AFty7ABbdAwAW3TsAFt2nABbeAwAW3k8AFt6fABbevwAW3ycAFt87ABbftwAW39cAFuAXABbgJwAW4FsAFuDXABbg2wAW4RcAFuGPABbh0wAW4fMAFuJzABbizwAW4v8AFuM7ABbjZwAW47MAFuPfABbkHwAW5F8AFuRrABbkewAW5JMAFuS3ABbkxwAW5NcAFuTnABbk+wAW5QsAFuUbABblKwAW5T8AFuVLABblVwAW5WcAFuV3ABblgwAW5Z8AFuYvABbmPwAW5pMAFubHABbnBwAW508AFudrABbngwAW56cAFue/ABbn3wAW6AcAFugPABboLwAW6EsAFulDABbpXwAW6ZMAFumzABbpzwAW6hMAFuo/ABbqmwAW6q8AFurjABbrCwAW6ycAFutTABbrdwAW7FcAFuynABbtcwAW7isAFu5LABbudwAW7psAFu6rABbuywAW7usAFu8vABbvgwAW768AFu/rABbwEwAW8D8AFvBzABbwmwAW8M8AFvD/ABbxJwAW8TcAFvFHABbxhwAW8ZsAFvHPABbx8wAW8jMAFvJjABbyvwAW8wcAFvM/ABbzdwAW87MAFvO/ABbzywAW9A8AFvQ3ABb0jwAW9NMAFvTfABb1JwAW9VMAFvVvABb1uwAW9hsAFvZTABb2qwAW9u8AFvb3ABb3WwAW96cAFvfzABb4TwAW+KsAFvj/ABb5VwAW+a8AFvoHABb6XwAW+rcAFvsPABb7bwAW+8MAFvxPABb84wAW/WcAFv3XABb+XwAW/s8AFv8vABb/dwAW/8sAFv/zABcAXwAXAJsAFwFDABcBswAXAk8AFwKzABcDTwAXA7MAFwRvABcE8wAXBa8AFwYzABcG4wAXB1sAFwe3ABcH4wAXCHcAFwizABcJNwAXCa8AFwovABcKtwAXCzcAFwuLABcL5wAXDDcAFwyHABcM4wAXDTsAFw2zABcN1wAXDiMAFw5XABcO3wAXDusAFw8fABcPbwAXD5sAFw/HABcP6wAXD/MAFw/7ABcQAwAXEAsAFxATABcQGwAXECMAFxArABcQMwAXEDsAFxBDABcQSwAXEFMAFxBbABcQYwAXEGsAFxBzABcQewAXEIMAFxCLABcQkwAXEJ8AFxCrABcQtwAXEMMAFxDPABcQ2wAXEOcAFxDzABcQ/wAXEQsAFxEXABcRIwAXES8AFxE7ABcRRwAXEVMAFxFfABcRawAXEXcAFxGDABcRjwAXEZsAFxGnABcRswAXEb8AFxHLABcR1wAXEeMAFxHvABcR+wAXEgcAFxITABcSIwAXEjMAFxJDABcSUwAXEmMAFxJzABcSgwAXEpMAFxKjABcSswAXEsMAFxLTABcS4wAXEvMAFxMDABcTEwAXEyMAFxMzABcTQwAXE1MAFxNjABcTcwAXE4MAFxOTABcTowAXE7MAFxPDABcT0wAXE+MAFxPzABcUAwAXFBMAFxQjABcUMwAXFEMAFxRTABcUYwAXFHMAFxSDABcUkwAXFKMAFxSzABcUwwAXFNMAFxTjABcU8wAXFQMAFxUTABcVIwAXFTMAFxVDABcVhwAXFa8AFxXzABcWFwAXFjMAFxazABcXCwAXFxcAFxc3ABcXVwAXF28AFxejABcXxwAXGB8AFxg7ABcYWwAXGKsAFxljABcanwAXGq8AFxq/ABca5wAXGxcAFxtjABcbkwAXG5cAFxvDABcb8wAXHA8AFxw3ABcciwAXHJcAFxy/ABcdBwAXHScAFx1fABcdiwAXHasAFx5DABcfSwAXH6MAFx/3ABchgwAXIa8AFyH7ABciVwAXIrsAFyLfABcjKwAXI08AFyOHABcj4wAXI/cAFyQDABckHwAXJEcAFyRbABckkwAXJLsAFyT/ABclNwAXJWMAFyV/ABcltwAXJj8AFybPABcnDwAXJzsAFydTABcniwAXJ58AFyfTABcn2wAXKCcAFyhHABcohwAXKK8AFyjbABcpRwAXKXMAFymnABcp9wAXKkMAFyqjABcq5wAXKzMAFyufABcsHwAXLEcAFyxbABcs3wAXLRsAFy2LABct4wAXLjsAFy6PABcu7wAXL0MAFy9zABcvkwAXL9MAFzALABcwPwAXMHMAFzCbABcwwwAXMOcAFzEXABcxLwAXMVsAFzF/ABcxpwAXMgsAFzIzABcyOwAXMqsAFzLjABczPwAXM2cAFzOPABcztwAXM+MAFzQDABc0HwAXNHMAFzS/ABc00wAXNN8AFzT/ABc1QwAXNVcAFzWPABc1owAXNa8AFzXLABc19wAXNkcAFzZ3ABc2hwAXNr8AFzb7ABc3LwAXN3MAFzezABc3wwAXN/8AFzgzABc4ZwAXOIsAFzi7ABc48wAXORsAFzlLABc5hwAXOasAFznXABc6EwAXOjsAFzpzABc6kwAXOrcAFzr7ABc7PwAXO4MAFzurABc7zwAXPAcAFzwrABc8ZwAXPI8AFzyzABc8+wAXPRMAFz0nABc9PwAXPWsAFz1/ABc9mwAXPbcAFz3TABc96wAXPfcAFz4jABc+kwAXPs8AFz7jABc/MwAXP2cAFz+fABc/wwAXP+cAF0AvABdAowAXQMsAF0FLABdBgwAXQjMAF0JjABdCxwAXQt8AF0L/ABdDQwAXQ28AF0PfABdEAwAXRGsAF0TrABdFLwAXRb8AF0YfABdGqwAXRy8AF0dPABdHdwAXR/sAF0gjABdINwAXSKMAF0i/ABdJbwAXSasAF0oDABdKKwAXSmcAF0qLABdK6wAXSzMAF0t7ABdLlwAXS8MAF0vjABdMOwAXTJcAF0zjABdNJwAXTWMAF02nABdOHwAXTmcAF067ABdPDwAXT3MAF0+PABdQHwAXUFcAF1DDABdQ9wAXUUcAF1GPABdR6wAXUlMAF1LXABdTHwAXU6MAF1PzABdUYwAXVNMAF1VDABdVswAXVhsAF1ZnABdWqwAXVwsAF1d7ABdX5wAXWGMAF1jrABdZWwAXWacAF1nXABdaEwAXWlsAF1q/ABda5wAXW0sAF1t7ABdbywAXXBsAF1xrABdcuwAXXQMAF10vABddbwAXXb8AF14LABdeZwAXXs8AF18DABdfOwAXX2sAF1+PABdfwwAXX/sAF2AzABdgbwAXYKcAF2DXABdhOwAXYVcAF2G7ABdh1wAXYj8AF2JfABdirwAXYtcAF2L/ABdjTwAXY6MAF2QrABdkYwAXZLMAF2UDABdlGwAXZUcAF2V/ABdmKwAXZj8AF2ZzABdmpwAXZysAF2dDABdnVwAXZ28AF2erABdn4wAXaB8AF2hDABdogwAXaLMAF2j7ABdpQwAXaV8AF2mPABdpuwAXagMAF2pjABdqlwAXarcAF2rrABdrEwAXazsAF2tjABdrrwAXa9cAF2wzABds9wAXbTcAF22HABdtmwAXbasAF23bABduMwAXbocAF27LABdvFwAXb2cAF3AzABdwZwAXcMcAF3DrABdxUwAXcccAF3HrABdyNwAXcssAF3M/ABdzZwAXc7cAF3P7ABd0JwAXdHsAF3TrABd1swAXddMAF3YbABd2TwAXdpcAF3bPABd3FwAXd0cAF3efABd4CwAXeDcAF3iTABd5iwAXed8AF3rTABd7HwAXe08AF3unABd8FwAXfF8AF3yDABd8zwAXfPMAF30/ABd9gwAXff8AF35bABd/OwAXf5MAF4BDABeA1wAXgS8AF4GHABeCGwAXgj8AF4KLABeC9wAXgzsAF4NbABeD6wAXhAsAF4Q3ABeEbwAXhLsAF4TzABeFGwAXhTsAF4VXABeFfwAXhc8AF4YbABeGTwAXhosAF4avABeG4wAXhwMAF4cPABeHGwAXhzMAF4dDABeHVwAXh28AF4eLABeHnwAXh7cAF4fHABeH5wAXh/8AF4g3ABeIZwAXiIsAF4jTABeJHwAXiV8AF4mrABeJywAXifsAF4ozABeKYwAXirMAF4rPABeK8wAXiwcAF4svABeLQwAXi2cAF4trABeLiwAXi78AF4v3ABeMIwAXjFsAF4yPABeMxwAXjQsAF41LABeNawAXjYcAF43HABeN2wAXjjMAF45zABeOnwAXjtsAF48PABePPwAXj2sAF4/DABeP+wAXkBcAF5AzABeQUwAXkHsAF5CfABeQuwAXkQ8AF5EzABeRSwAXkWsAF5GjABeR0wAXkisAF5JPABeScwAXkrsAF5MTABeTNwAXk5MAF5O3ABeT7wAXlCsAF5RnABeUkwAXlM8AF5TjABeVGwAXlUsAF5WTABeVrwAXlc8AF5X7ABeWGwAXllcAF5aPABeWywAXlxMAF5dfABeXlwAXl7cAF5gDABeYIwAXmEcAF5hrABeYtwAXmP8AF5lXABeZcwAXmZMAF5m/ABeZ3wAXmf8AF5pHABeaiwAXms8AF5sLABebUwAXm7cAF5vLABeb6wAXnCcAF5xXABecfwAXnKsAF50DABedNwAXnX8AF52/ABeeEwAXnk8AF56TABeeuwAXnucAF58jABefbwAXn5cAF5/PABegAwAXoDsAF6BPABegdwAXoJMAF6DHABeg5wAXoPsAF6EbABehdwAXoc8AF6IjABeidwAXoq8AF6LXABejGwAXo1sAF6OjABejzwAXpAcAF6QrABekTwAXpGMAF6SPABekuwAXpOsAF6UHABelIwAXpTsAF6VTABelZwAXpX8AF6WnABelywAXpfsAF6YXABemNwAXpk8AF6ZzABemgwAXpqcAF6bPABenPwAXp68AF6fXABeoBwAXqCsAF6hPABeojwAXqL8AF6jvABepHwAXqUcAF6lvABeplwAXqb8AF6njABep9wAXqhsAF6o7ABeqWwAXqosAF6q3ABeq5wAXqz8AF6uPABer9wAXrDMAF6x7ABesvwAXrPcAF61TABetuwAXricAF66LABeu5wAXr0sAF6+fABev9wAXsGsAF7DDABexFwAXsTMAF7GLABex2wAXsgcAF7JbABeytwAXsx8AF7OLABez1wAXtD8AF7SHABe0zwAXtQ8AF7VzABe1swAXtc8AF7ZXABe2kwAXtt8AF7d3ABe3wwAXt/sAF7hfABe4uwAXuRsAF7lbABe5pwAXuesAF7oDABe6SwAXuqcAF7r7ABe7UwAXu3cAF7u/ABe8EwAXvFMAF7yjABe8/wAXvV8AF74DABe+PwAXvmcAF76fABe+ywAXvyMAF78vABe/iwAXv/MAF8BLABfAvwAXwTcAF8F/ABfBywAXwhsAF8JPABfDCwAXw0MAF8ObABfEWwAXxPcAF8UrABfF/wAXxjcAF8ZXABfGswAXxu8AF8czABfHXwAXx38AF8ejABfHywAXx/sAF8grABfIdwAXyPMAF8lHABfJbwAXyacAF8nDABfJ8wAXyisAF8pvABfKmwAXyuMAF8sfABfLQwAXy28AF8unABfL2wAXzBsAF8xvABfMpwAXzQcAF81/ABfN5wAXzi8AF86DABfO2wAXzycAF897ABfPzwAX0A8AF9AvABfQfwAX0MsAF9E3ABfRUwAX0YMAF9GvABfR2wAX0f8AF9I3ABfSVwAX0ocAF9LLABfS6wAX0ysAF9N3ABfTnwAX08sAF9P3ABfUEwAX1DsAF9R3ABfUpwAX1N8AF9UXABfVUwAX1ZsAF9W7ABfV+wAX1j8AF9ZrABfWgwAX1qcAF9cfABfXpwAX19cAF9gnABfYgwAX2L8AF9j3ABfZNwAX2XMAF9mPABfZvwAX2fcAF9ojABfaUwAX2q8AF9sLABfbJwAX228AF9uzABfb+wAX3G8AF9zfABfdhwAX3c8AF93vABfd9wAX3hcAF94vABfeRwAX3mcAF96HABfeowAX3scAF97rABffGwAX33MAF9+/ABff2wAX3/cAF+ATABfgKwAX4F8AF+CXABfg2wAX4RMAF+FbABfhqwAX4eMAF+InABfiNwAX4lsAF+J7ABfilwAX4scAF+LnABfjEwAX41MAF+OLABfj1wAX5AMAF+QnABfkXwAX5H8AF+SvABfk8wAX5WcAF+WfABflywAX5gsAF+aLABfmuwAX5xcAF+drABfnuwAX6B8AF+hjABfojwAX6M8AF+j/ABfpMwAX6XcAF+mXABfpwwAX6hMAF+pDABfqewAX6tMAF+sDABfrNwAX62cAF+uPABfrwwAX698AF+wbABfsSwAX7IsAF+yvABfsywAX7O8AF+0bABftUwAX7YMAF+2XABftswAX7d8AF+4XABfuTwAX7n8AF+6jABfuwwAX7uMAF+77ABfvEwAX7zcAF+9XABfvgwAX76MAF+/7ABfwBwAX8CMAF/A3ABfwawAX8H8AF/CnABfw+wAX8S8AF/FbABfxjwAX8b8AF/HnABfyGwAX8ksAF/KbABfy6wAX808AF/N7ABfzuwAX8+sAF/QzABf0bwAX9KcAF/UDABf1EwAX9V8AF/WfABf1pwAX9f8AF/YTABf2NwAX9kcAF/aDABf2twAX9vsAF/c/ABf3jwAX99cAF/gPABf4XwAX+I8AF/ivABf43wAX+R8AF/lPABf5dwAX+aMAF/pbABf6pwAX+ucAF/szABf7dwAX+6MAF/vbABf8HwAX/FMAF/yfABf8wwAX/RsAF/1jABf9jwAX/bcAF/3nABf+GwAX/jMAF/5bABf+mwAX/tMAF/8DABf/MwAX/1MAF/+TABf/zwAX//8AGABHABgAhwAYAOMAGAEXABgBPwAYAacAGAIXABgCOwAYAncAGAKzABgC5wAYA1MAGAOHABgDwwAYBBsAGASDABgE1wAYBPMAGAUzABgFawAYBZMAGAW/ABgF7wAYBgcAGAYfABgGWwAYBosAGAbXABgHFwAYB1sAGAebABgH3wAYCCMAGAh3ABgI1wAYCPcAGAk/ABgJgwAYCb8AGAn7ABgKNwAYCmsAGAqzABgK4wAYCv8AGAtXABgLiwAYC7MAGAvXABgL7wAYDG8AGAyTABgMtwAYDPsAGA1HABgNfwAYDfsAGA5fABgOqwAYDtMAGA7zABgPQwAYD58AGA/7ABgQcwAYELMAGBDzABgRJwAYEVcAGBFzABgRjwAYEbcAGBHfABgSFwAYEksAGBJ/ABgSmwAYErsAGBLbABgTFwAYE1cAGBODABgTswAYE+8AGBQbABgUWwAYFLcAGBUDABgVQwAYFbMAGBY/ABgWrwAYFysAGBdTABgXqwAYGBcAGBg3ABgYZwAYGI8AGBjvABgZVwAYGXsAGBoHABgahwAYGvsAGBsnABgbuwAYHDsAGByDABgcxwAYHPMAGB1DABgdmwAYHesAGB5nABgerwAYHvMAGB8nABgfUwAYH4MAGB+vABgf3wAYIAsAGCArABggUwAYILMAGCD/ABghTwAYIaMAGCH7ABgiMwAYIm8AGCKvABgiywAYIu8AGCMPABgjQwAYI3sAGCO3ABgj7wAYJAcAGCQjABgkQwAYJH8AGCS/ABglAwAYJS8AGCVzABglmwAYJd8AGCYLABgmLwAYJlsAGCaTABgm0wAYJvMAGCcfABgnTwAYJ4sAGCevABgnxwAYKA8AGChPABgodwAYKKMAGCj/ABgpUwAYKYMAGCmrABgp0wAYKfMAGCojABgqTwAYKnMAGCq3ABgq9wAYKy8AGCt7ABgrowAYLBcAGCyLABgs8wAYLWMAGC3TABguNwAYLrMAGC8nABgvYwAYL48AGDAHABgwfwAYMOsAGDEDABgxMwAYMWcAGDGTABgxswAYMeMAGDIXABgyYwAYMr8AGDMnABgzVwAYM6sAGDPbABg0GwAYNK8AGDVHABg1lwAYNecAGDYzABg2jwAYNucAGDdHABg3dwAYN6sAGDfzABg4GwAYOGcAGDi7ABg43wAYOUcAGDmDABg5zwAYOh8AGDpjABg6ywAYOxcAGDs7ABg7iwAYO88AGDvzABg8QwAYPI8AGDzfABg9MwAYPV8AGD1/ABg9twAYPcsAGD4bABg+TwAYPpMAGD7jABg/PwAYP4cAGD/vABhAMwAYQIcAGEC3ABhA9wAYQTsAGEGDABhBpwAYQeMAGEIjABhCXwAYQocAGELPABhDKwAYQ28AGEO/ABhEGwAYRH8AGETnABhFbwAYRZcAGEXbABhGKwAYRnMAGEbPABhHPwAYR3MAGEevABhICwAYSHsAGEijABhI1wAYSTcAGEl/ABhJvwAYSjMAG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TbfABk3IwAZN1MAGTfTABk4FwAZODsAGThzABk4lwAZOM8AGTj7ABk5KwAZOVMAGTlvABk5kwAZOe8AGTobABk6TwAZOnsAGTqnABk7CwAZO0sAGTu7ABk76wAZPDsAGTzPABk9OwAZPW8AGT2zABk96wAZPicAGT5rABk+wwAZPucAGT9vABlABwAZQEcAGUBnABlAlwAZQLMAGUDbABlA8wAZQR8AGUGbABlBvwAZQe8AGUI/ABlCYwAZQqMAGUMTABlDSwAZQ38AGUOrABlD1wAZQ/MAGUQTABlEOwAZRHMAGUSrABlE0wAZRPsAGUUnABlFVwAZRYsAGUWjABlFuwAZRdMAGUX3ABlGRwAZRnsAGUbDABlHAwAZR0sAGUdnABlHmwAZR9MAGUgbABlISwAZSHsAGUi7ABlJBwAZSWcAGUm7ABlJ6wAZSjMAGUqrABlLGwAZS2MAGUvPABlMawAZTP8AGU1TABlNawAZTY8AGU3fABlN/wAZTh8AGU5HABlOgwAZTscAGU83ABlPiwAZT9cAGVAHABlQfwAZUNsAGVEvABlRUwAZUYMAGVHHABlR5wAZUgsAGVIjABlSOwAZUlcAGVJ3ABlSvwAZUtsAGVLvABlTFwAZUycAGVOPABlTowAZU9MAGVP7ABlUfwAZVPcAGVUjABlVawAZVcMAGVX7ABlWMwAZVncAGVa/ABlW5wAZVycAGVdnABlXjwAZV98AGVhzABlYxwAZWRcAGVlTABlZnwAZWeMAGVpvABlavwAZWxsAGVtrABlbuwAZXBsAGVxLABlcnwAZXQcAGV1rABldowAZXmcAGV8jABlfqwAZYCsAGWBfABlghwAZYLsAGWDrABlhDwAZYS8AGWFfABlhpwAZYdMAGWILABliJwAZYoMAGWLHABljDwAZYzcAGWNrABljowAZY/8AGWRrABlkrwAZZM8AGWUXABllSwAZZXMAGWWfABllxwAZZfMAGWY7ABlmkwAZZtsAGWcnABlncwAZZ7sAGWfrABloPwAZaIcAGWizABlpAwAZaVMAGWmPABlpzwAZafcAGWonABlqbwAZapcAGWrzABlrGwAZa18AGWubABlr8wAZbDsAGWyDABlswwAZbOMAGW0fABltSwAZbZsAGW3vABluHwAZbmsAGW6bABlu4wAZby8AGW9vABlvvwAZb+8AGXAnABlwXwAZcKsAGXD/ABlxLwAZcWMAGXGLABlxzwAZcfMAGXIjABlyVwAZcq8AGXMXABlzRwAZc7sAGXPjABl0zwAZdacAGXXXABl1+wAZdh8AGXZPABl2dwAZdrsAGXbfABl3ywAZeJ8AGXlfABl5pwAZee8AGXozABl6XwAZeq8AGXrzABl7GwAZe2cAGXu3ABl8AwAZfFsAGXyHABl8swAZfNsAGX0PABl9QwAZfXsAGX2fABl94wAZfgcAGX5fABl/MwAZf3MAGX+rABl//wAZgEMAGYB/ABmAtwAZgN8AGYErABmBewAZgacAGYHvABmCNwAZgnMAGYK/ABmC8wAZgzsAGYOXABmDwwAZhFcAGYTjABmFPwAZhV8AGYWTABmF7wAZhisAGYZ3ABmGqwAZhvsAGYdfABmHpwAZh+8AGYg/ABmIbwAZiP8AGYmvABmKUwAZiqMAGYrXABmLPwAZi18AGYvfABmMKwAZjHMAGYy/ABmM+wAZjW8AGY2XABmNvwAZjfMAGY5fABmOxwAZjvsAGY87ABmPiwAZkAsAGZBPABmQ4wAZkScAGZFnABmR0wAZkiMAGZI/ABmSYwAZkpsAGZK/ABmTUwAZk+sAGZSfABmU0wAZlP8AGZUzABmVXwAZlZcAGZXHABmV/wAZljsAGZaTABmW0wAZlxMAGZeHABmXswAZl98AGZg/ABmYiwAZmPsAGZlnABmZswAZmhcAGZp7ABmavwAZmxMAGZt7ABmb5wAZnEMAGZyrABmc5wAZnXcAGZ3DABmeAwAZnksAGZ7TABmfNwAZn5cAGZ+/ABmgGwAZoHcAGaC3ABmhEwAZoXsAGaHLABmiFwAZoqMAGaLjABmjEwAZo1sAGaPLABmj3wAZpEMAGaS7ABmlAwAZpUcAGaV/ABmlkwAZpdsAGaYjABmmWwAZppcAGabvABmnMwAZp4sAGae7ABmn9wAZqF8AGaiLABmoswAZqNMAGajnABmpMwAZqc8AGaojABmqRwAZqo8AGarHABmrIwAZq48AGavDABmsEwAZrCsAGayHABms3wAZrTMAGa1zABmtowAZrdMAGa4LABmuTwAZrq8AGa7fABmvBwAZrzMAGa9zABmvuwAZsA8AGbBLABmwfwAZsKMAGbDPABmxAwAZsVcAGbGfABmxuwAZsecAGbJfABmykwAZsucAGbMXABmzRwAZs5cAGbPPABmz/wAZtCsAGbSbABm0zwAZtQsAGbU7ABm1gwAZtcMAGbYzABm2XwAZtsMAGbbrABm3GwAZt18AGbevABm34wAZuBcAGbhbABm4fwAZuK8AGbjPABm4/wAZuUcAGbmTABm51wAZuncAGbqbABm6vwAZuxsAGbtvABm7owAZu8MAGbvjABm8MwAZvJ8AGbzLABm9AwAZvW8AGb2/ABm+JwAZvnsAGb6nABm/DwAZv38AGb/HABm/8wAZwIsAGcDPABnBIwAZwW8AGcHrABnCRwAZwrMAGcMHABnDUwAZw48AGcPXABnD8wAZxEcAGcSrABnE3wAZxP8AGcWXABnF4wAZxgsAGcZLABnG5wAZxx8AGcdPABnH5wAZyF8AGcinABnI2wAZyRsAGclzABnJowAZyicAGcpzABnK8wAZyy8AGct3ABnLxwAZzAMAGcx/ABnMtwAZzRsAGc1/ABnN7wAZzi8AGc5nABnOrwAZzt8AGc77ABnPHwAZz18AGc+nABnQAwAZ0E8AGdCPABnQ5wAZ0RMAGdFXABnRiwAZ0hcAGdJTABnSnwAZ0xMAGdNvABnT0wAZ0/sAGdRbABnUtwAZ1SsAGdWvABnWEwAZ1xcAGddXABnXwwAZ1/sAGdg3ABnYfwAZ2OcAGdlXABnZgwAZ2bMAGdnXABnaBwAZ2kMAGdqLABnarwAZ2ucAGdsLABnbLwAZ22sAGduXABnb5wAZ3EsAGdyjABndSwAZ3XsAGd3HABneJwAZ3nsAGd67ABne9wAZ3ycAGd+TABnf2wAZ4DsAGeCLABngvwAZ4QsAGeHHABniFwAZ4j8AGeJ/ABniwwAZ4ssAGeMfABnjKwAZ45MAGePDABnkCwAZ5HcAGeTbABnlJwAZ5UsAGeVjABnlmwAZ5ccAGeY3ABnmowAZ5vcAGec3ABnnYwAZ56MAGefbABnoBwAZ6C8AGehXABnopwAZ6OcAGek3ABnpgwAZ6a8AGem3ABnp0wAZ6gsAGepDABnq1wAZ6xsAGesnABnrXwAZ67cAGev/ABnsQwAZ7GsAGeyvABns3wAZ7SMAGe0/ABntfwAZ7fsAGe4fABnudwAZ7rcAGe7XABnvAwAZ7z8AGe9jABnvjwAZ78sAGe/rABnwIwAZ8FsAGfCLABnwvwAZ8PMAGfErABnxawAZ8aMAGfHjABnyHwAZ8jcAGfJrABnyjwAZ8q8AGfL/ABnzQwAZ84cAGfPPABnz6wAZ9B8AGfRLABn0ewAZ9LsAGfTvABn1DwAZ9WMAGfWrABn12wAZ9fMAGfY/ABn2dwAZ9qcAGfcLABn3TwAZ93cAGfe3ABn36wAZ+BsAGfhPABn4swAZ+N8AGfkDABn5LwAZ+VcAGfnDABn6MwAZ+msAGfqrABn69wAZ+ycAGftjABn7kwAZ+8cAGfv3ABn8SwAZ/GcAGfyXABn8ywAZ/QcAGf1LABn9fwAZ/aMAGf3TABn+UwAZ/osAGf6rABn+7wAZ/08AGf93ABn/mwAZ/+cAGgBjABoAhwAaAMMAGgDfABoBBwAaAT8AGgF7ABoCOwAaApsAGgLLABoDMwAaA1sAGgOrABoEDwAaBHcAGgS7ABoE/wAaBT8AGgWjABoGHwAaBksAGgbbABoHPwAaB6cAGggXABoIbwAaCMsAGglDABoJqwAaChcAGgqTABoLLwAaC1sAGgvDABoMNwAaDJsAGgzzABoNSwAaDccAGg3zABoOIwAaDj8AGg6XABoOwwAaDucAGg8jABoPawAaD6sAGhAfABoQcwAaEOMAGhEvABoRpwAaEfMAGhJrABoSlwAaEvMAGhNrABoTxwAaE/MAGhRPABoUcwAaFOMAGhUbABoViwAaFdsAGhZjABoWtwAaFysAGhdvABoXmwAaF+sAGhhTABoYpwAaGNMAGhnHABoaFwAaGksAGhp7ABoaywAaGysAGhtbABobiwAaG/cAGhwrABocXwAaHKcAGhzLABoc1wAaHOcAGhz3ABodAwAaHRcAGh03ABodVwAaHW8AGh2HABodqwAaHhcAGh43ABoepwAaHycAGh+fABogKwAaIE8AGiBfABohDwAaIT8AGiGnABoibwAaIn8AGiLPABojawAaI/MAGiQbABokNwAaJI8AGiSrABok2wAaJS8AGiXLABomFwAaJpMAGicTABonwwAaKCMAGiiDABoo0wAaKS8AGimzABoqPwAaKp8AGirrABorSwAaK58AGivjABor/wAaLDcAGixnABosfwAaLLMAGizTABos2wAaLS8AGi1fABotlwAaLaMAGi3PABouGwAaLpMAGi7fABovHwAaL0sAGi/nABowSwAaMHcAGjCrABoxfwAaMb8AGjH3ABoyVwAaMp8AGjLDABozRwAaM2cAGjO/ABoz4wAaNCcAGjRnABo0mwAaNK8AGjTHABo0zwAaNRcAGjVbABo1mwAaNdMAGjYfABo2mwAaN2cAGjejABo34wAaOAsAGjhLABo4kwAaOKcAGjj3ABo5OwAaOXsAGjm/ABo5+wAaOisAGjprABo6xwAaOu8AGjsbABo7ewAaO9cAGjwTABo8kwAaPL8AGjzrABo9MwAaPU8AGj3vABo+HwAaPlMAGj5zABo+twAaPuMAGj8rABo/ewAaP/8AGkBHABpAbwAaQJ8AGkDfABpBJwAaQVsAGkGvABpB/wAaQjMAGkKHABpCrwAaQucAGkMbABpDVwAaQ38AGkPTABpD+wAaRG8AGkSzABpFGwAaRWcAGkWLABpF1wAaRmMAGkbnABpHOwAaR48AGkfvABpIOwAaSJcAGkjfABpJawAaSbMAGkn3ABpKTwAaSr8AGkrXABpK/wAaS08AGktjABpL3wAaTAsAGkw/ABpMfwAaTLcAGkzvABpNIwAaTUMAGk2XABpOLwAaTqMAGk7jABpPWwAaT7MAGk/bABpQFwAaUGMAGlCzABpRDwAaUWcAGlGbABpR6wAaUhMAGlJHABpScwAaUq8AGlLjABpTJwAaU2MAGlOHABpTvwAaVB8AGlRHABpUdwAaVMMAGlUTABpVNwAaVYsAGlWjABpV7wAaVicAGlaDABpWywAaVvsAGlcvABpXcwAaV7MAGlfnABpYCwAaWDMAGlh3ABpY2wAaWUsAGlm3ABpZ7wAaWhcAGlpDABpaawAaWqcAGlrDABpa6wAaWwMAGls3ABpbVwAaW4sAGlwTABpcZwAaXIMAGlyXABpczwAaXQ8AGl0zABpdewAaXb8AGl3rABpeKwAaXqMAGl7bABpfBwAaX28AGl+nABpf8wAaYEMAGmBvABpgrwAaYPMAGmEbABphZwAaYaMAGmHTABpiPwAaYtcAGmM/ABpj0wAaY/sAGmQ7ABpkgwAaZMcAGmUPABplTwAaZZsAGmXvABpmOwAaZo8AGmbrABpnFwAaZ1sAGmd/ABpnowAaZ9MAGmgXABpoZwAaaNcAGmkrABppiwAaaf8AGmpHABpqfwAaawcAGmtXABprkwAaa8MAGmvnABpsLwAabKMAGm0bABptOwAabX8AGm3vABpuYwAabr8AGm7fABpvhwAab9MAGnAbABpwgwAacL8AGnDzABpxUwAaccMAGnInABpywwAac0sAGnPbABp0XwAadNsAGnVXABp1zwAadjsAGna7ABp3NwAad5sAGngHABp4bwAaeNcAGnl7ABp5+wAaelMAGnqfABp68wAaex8AGnszABp7dwAae68AGnv3ABp8NwAafJsAGnzvABp9IwAafXsAGn2/ABp96wAafhMAGn5nABp+lwAafucAGn8/ABp/UwAaf68AGoALABqARwAagH8AGoDrABqBNwAagYMAGoHLABqCHwAagpsAGoLzABqDXwAag5MAGoPPABqEAwAahEcAGoTjABqFMwAahWcAGoWTABqFzwAahgMAGoY3ABqGbwAahsMAGocjABqHVwAah4sAGofHABqICwAaiEMAGoiXABqIswAaiPcAGoknABqJZwAaia8AGooHABqKXwAair8AGos/ABqLrwAai/MAGowrABqMVwAajMsAGo3fABqPewAaj8cAGpAbABqQdwAakOcAGpFnABqR6wAakn8AGpL7ABqTOwAak4MAGpPzABqUGwAalG8AGpTjABqVSwAalY8AGpY7ABqWlwAalvsAGpdvABqX0wAamBcAGpijABqZHwAamVcAGpl7ABqaFwAamxMAGpszABqbVwAam6cAGpwHABqcLwAanE8AGpxzABqcrwAanOcAGp0fABqdTwAanX8AGp2nABqd3wAang8AGp5DABqebwAanrsAGp8DABqfRwAan4MAGp+7ABqgCwAaoEsAGqCHABqgzwAaoPcAGqEzABqhawAaoY8AGqHTABqiEwAaomcAGqK3ABqjCwAaozMAGqNLABqjcwAao4sAGqPHABqj5wAapAcAGqQvABqkVwAapHsAGqSfABqkwwAapR8AGqVLABqldwAapcMAGqX/ABqmSwAappMAGqbPABqnFwAap0MAGqdzABqnrwAap+cAGqg3ABqobwAaqKcAGqjbABqo4wAaqRcAGqlbABqpiwAaqdMAGqoHABqqNwAaql8AGqqbABqqxwAaqvcAGqtLABqrawAaq6sAGqvfABqsDwAarFMAGqynABqtAwAarT8AGq1jABqtjwAardMAGq37ABquSwAarpMAGq7TABqvKwAar+MAGrAPABqwWwAasIMAGrCvABqw2wAasTMAGrFfABqxnwAasfMAGrJDABqyhwAasscAGrMHABqzawAas58AGrO/ABq0KwAatGMAGrSvABq1FwAatXcAGrW7ABq2BwAatmcAGrazABq3DwAat3sAGre/ABq33wAauEsAGrizABq48wAauTcAGrmjABq55wAauisAGrp/ABq7ewAau5MAGru7ABq76wAavBcAGrxrABq8pwAavMMAGrz3ABq9DwAavVcAGr3fABq+SwAavrMAGr9bABq/5wAawJsAGsEHABrBRwAawXMAGsILABrCXwAawqsAGsLzABrDOwAaw4cAGsPfABrELwAaxH8AGsTbABrFQwAaxbMAGsXDABrGGwAaxmcAGsb/ABrHRwAax4MAGsffABrIRwAayG8AGsibABrI/wAayTMAGslfABrJiwAayfMAGspHABrKjwAaytsAGssHABrLZwAay8sAGsv3ABrMKwAazGsAGsznABrNPwAaza8AGs3DABrOHwAazkMAGs5rABrOmwAazusAGs8zABrPdwAaz98AGtALABrQOwAa0IcAGtD3ABrRawAa0asAGtHvABrSQwAa0mcAGtLDABrTXwAa05MAGtPbABrUQwAa1IMAGtTLABrVDwAa1W8AGtXbABrWPwAa1qsAGtcTABrXlwAa198AGtgXABrYjwAa2P8AGtlHABrZuwAa2i8AGtp3ABrazwAa2zcAGtuTABrbvwAa2/MAGtwjABrcVwAa3I8AGtznABrdAwAa3TMAGt13ABrdmwAa3gMAGt4jABreRwAa3osAGt7LABrfEwAa31cAGt+DABrfswAa388AGuADABrgKwAa4FsAGuCbABrgwwAa4SMAGuFTABrhmwAa4fcAGuJjABrikwAa4tcAGuMjABrjPwAa42sAGuOHABrjswAa4+cAGuQTABrkcwAa5J8AGuTXABrlCwAa5WsAGuXDABrl8wAa5lsAGuaHABrmswAa5xcAGufnABroIwAa6GMAGuivABrpBwAa6UMAGumTABrp2wAa6jcAGuqbABrq0wAa6wsAGutHABrrcwAa65sAGuvjABrsJwAa7GsAGuyzABrs5wAa7XMAGu3rABruhwAa7w8AGu8vABrvjwAa7/sAGvB3ABrw0wAa8T8AGvGLABrx2wAa8iMAGvJ7ABryxwAa8wsAGvM/ABrzbwAa88sAGvQXABr0ewAa9MMAGvUXABr1QwAa9XcAGvXjABr2VwAa9pcAGvcfABr3iwAa978AGvgTABr4UwAa+I8AGvjbABr5HwAa+U8AGvmLABr5kwAa+d8AGvn/ABr6OwAa+nsAGvrPABr7FwAa+9cAGvwjABr8rwAa/OcAGv0/ABr9bwAa/ZMAGv3vABr+JwAa/m8AGv6jABr+1wAa/ysAGv+bABsANwAbAF8AGwCHABsAtwAbAM8AGwDnABsBMwAbAZcAGwHXABsCGwAbAlMAGwKbABsC5wAbAzMAGwOLABsD2wAbBEMAGwSXABsE9wAbBT8AGwVzABsFvwAbBjMAGwaDABsG1wAbBx8AGwdLABsHfwAbB78AGwf7ABsIRwAbCIMAGwjTABsJJwAbCXsAGwm/ABsKEwAbCmMAGwrnABsLLwAbC7sAGwv3ABsMPwAbDJMAGwzHABsNGwAbDWcAGw2XABsN8wAbDg8AGw5LABsObwAbDpcAGw7zABsPOwAbD4sAGw/PABsQCwAbEEMAGxCDABsQvwAbEOMAGxFHABsRcwAbEY8AGxHTABsR8wAbEisAGxJbABsSkwAbEtMAGxMjABsTfwAbE9cAGxQ7ABsUpwAbFRsAGxWjABsWRwAbFssAGxbvABsXMwAbF2sAGxezABsYBwAbGFMAGxinABsY+wAbGUcAGxmTABsZ2wAbGiMAGxp3ABsauwAbGv8AGxs3ABsbYwAbG6MAGxvXABscGwAbHIcAGxzbABsdVwAbHacAGx3fABseEwAbHlcAGx6rABse8wAbHycAGx9vABsfswAbIB8AGyCrABsg9wAbIW8AGyHHABsiCwAbIjcAGyKfABsjGwAbI4MAGyPrABskMwAbJH8AGyTHABslEwAbJW8AGyWvABsl7wAbJk8AGyarABsm7wAbJ0MAGyezABsoHwAbKLcAGyj7ABspPwAbKaMAGynnABsqtwAbKt8AGysfABsrXwAbK6cAGyvPABsr9wAbLDsAGyxvABssnwAbLNMAGy0DABstUwAbLaMAGy3vABsuUwAbLpsAGy73ABsvRwAbL48AGy/7ABswWwAbMKsAGzDzABsxWwAbMbMAGzH/ABsyTwAbMncAGzLXABszIwAbM4cAGzPXABs0VwAbNMcAGzU3ABs1lwAbNgMAGzZrABs23wAbNwsAGzc3ABs3cwAbN6MAGzfXABs4BwAbOFcAGziTABs4zwAbOQMAGzk/ABs5bwAbOa8AGznzABs6HwAbOlsAGzqzABs7BwAbO4cAGzu7ABs7/wAbPFMAGzyjABs86wAbPRcAGz1bABs9lwAbPccAGz4PABs+ZwAbPq8AGz7nABs/RwAbP3sAGz+/ABs/5wAbQBMAG0AzABtAiwAbQNsAG0ErABtBSwAbQaMAG0ILABtCZwAbQtsAG0MPABtDVwAbQ7MAG0P3ABtEYwAbRMMAG0UTABtFWwAbRecAG0ZrABtGswAbRu8AG0cnABtHiwAbR+sAG0hbABtImwAbSM8AG0lnABtJzwAbShMAG0qLABtK4wAbSyMAG0uXABtLywAbTAMAG0wvABtMfwAbTMMAG00TABtNfwAbTgsAG04nABtOTwAbToMAG063ABtO8wAbTw8AG09PABtPlwAbT78AG0/fABtQDwAbUEcAG1CHABtQywAbUQcAG1FTABtRdwAbUZ8AG1HPABtR/wAbUjcAG1JzABtSnwAbUsMAG1MTABtTSwAbU4MAG1PHABtT5wAbVDMAG1R3ABtUvwAbVPsAG1VDABtVfwAbVc8AG1Y3ABtWiwAbVvcAG1djABtXuwAbWCcAG1hbABtYkwAbWOMAG1kXABtZcwAbWZ8AG1m7ABtZ6wAbWiMAG1pfABtaowAbWsMAG1rjABtbKwAbW3MAG1uzABtb9wAbXFMAG1yjABtc6wAbXUcAG12jABteGwAbXocAG18HABtfhwAbYCMAG2C/ABthbwAbYdsAG2JLABtifwAbYscAG2MLABtjYwAbY8cAG2P7ABtkBwAbZDMAG2R3ABtk+wAbZTMAG2VzABtlrwAbZesAG2YfABtmUwAbZsMAG2cTABtnSwAbZ58AG2fDABtoOwAbaL8AG2kLABtpXwAbabsAG2ojABtqYwAbao8AG2rbABtrIwAba38AG2u/ABtr7wAbbCsAG2xzABts1wAbbS8AG22HABttvwAbbe8AG24nABtuXwAbbqMAG27LABtvEwAbb0sAG2/bABtwGwAbcEcAG3B/ABtw1wAbcU8AG3HbABtyGwAbcoMAG3LbABtzSwAbc6MAG3PrABt0QwAbdIsAG3S/ABt08wAbdbsAG3X3ABt2SwAbdp8AG3cjABt3ZwAbd6MAG3gXABt4RwAbeHsAG3i3ABt43wAbeQsAG3lPABt5fwAbebMAG3oLABt6UwAbev8AG3sTABt7pwAbe/sAG3w7ABt8pwAbfOsAG31LABt9vwAbff8AG34zABt+uwAbfusAG38bABt/SwAbf4cAG3+vABt/2wAbgC8AG4B/ABuA0wAbgRMAG4FfABuBuwAbghsAG4JvABuC0wAbgz8AG4OnABuD0wAbhDsAG4SfABuFDwAbhW8AG4WzABuGLwAbhncAG4b3ABuHLwAbh5MAG4iDABuIvwAbiTMAG4lnABuJkwAbin8AG4qjABuLFwAbi18AG4vDABuMHwAbjFcAG4y/ABuM/wAbjVsAG423ABuN4wAbjmcAG47PABuPBwAbj2cAG4+3ABuQOwAbkIMAG5DnABuRHwAbkXMAG5GnABuR4wAbkg8AG5JbABuShwAbkrsAG5L/ABuTYwAbk4cAG5PrABuUKwAblF8AG5TXABuVGwAblaMAG5YHABuWrwAbltMAG5cXABuXZwAbl4cAG5ffABuYFwAbmFMAG5hzABuY4wAbmSsAG5lPABuZcwAbmfcAG5p/ABua7wAbm2MAG5ubABubtwAbm98AG5v7ABucIwAbnEsAG5xvABucwwAbnRcAG52PABueCwAbnm8AG56HABuenwAbnrcAG58fABuffwAbn+MAG6AvABugkwAboNcAG6EvABuhtwAbogMAG6JDABuidwAborsAG6LzABujSwAbo5cAG6PPABuj+wAbpEsAG6S3ABuk2wAbpR8AG6VPABulswAbpe8AG6YnABumUwAbppcAG6bPABunEwAbp1cAG6drABunrwAbp+cAG6g3ABuoewAbqMcAG6kHABupUwAbqZMAG6n/ABuqOwAbql8AG6qXABuquwAbqxsAG6tzABuruwAbq/cAG6xHABusdwAbrLsAG60PAButTwAbrZ8AG63jABuuKwAbrmsAG66fABuu4wAbrxsAG69fABuvlwAbr+sAG7AvABuwZwAbsKMAG7DTABuxGwAbsVcAG7GzABuyAwAbslMAG7KXABuy6wAbsxcAG7NfABuzrwAbs/MAG7SDABu00wAbtRcAG7VTABu1gwAbtd8AG7YvABu2bwAbtqMAG7bLABu25wAbtxMAG7c/ABu3twAbuC8AG7jLABu5IwAbuccAG7pnABu7FwAbu7cAG7wfABu8gwAbvQMAG71DABu9kwAbvksAG77PABu+5wAbvwsAG7+PABvAOwAbwLsAG8D7ABvBOwAbwXsAG8GrABvB4wAbwksAG8KLABvCwwAbwvMAG8NDABvDiwAbw9sAG8P/ABvEIwAbxCsAG8QzABvEUwAbxHMAG8S3ABvE8wAbxRMAG8UnABvFQwAbxWMAG8V3ABvFkwAbxfsAG8aTABvGvwAbxu8AG8cnABvHawAbx5sAG8fLABvH+wAbyC8AG8hfABvIjwAbyL8AG8jzABvJHwAbyUsAG8l3ABvJowAbydMAG8oDABvKLwAbyl8AG8qbABvLBwAbyyMAG8t3ABvLxwAbzAsAG8xPABvMWwAbzHMAG8ybABvMzwAbzQsAG80rABvNcwAbzYsAG82XABvNowAbza8AG827ABvNywAbzdcAG83jABvN7wAbzf8AG84PABvOHwAbzisAG84zABvOPwAbzlsAG86TABvO2wAbzyMAG89jABvPnwAb0AcAG9BvABvQ1wAb0RcAG9FzABvRowAb0d8AG9JzABvSqwAb0v8AG9NbABvTtwAb1AcAG9RjABvU3wAb1UcAG9WLABvVzwAb1jsAG9avABvXAwAb13cAG9gPABvYjwAb2KcAG9i7ABvY1wAb2WsAG9mPABvZzwAb2fsAG9oXABvaNwAb2l8AG9r3ABvbIwAb20cAG9trABvblwAb258AG9vDABvcOwAb3F8AG9ynABvc6wAb3RcAG90rABvdWwAb3acAG947ABveVwAb3l8AG96PABve5wAb308AG9+jABvgCwAb4C8AG+BPABvgjwAb4M8AG+EHABvhOwAb4UsAG+GHABvh3wAb4ksAG+K3ABvjKwAb45sAG+P/ABvkFwAb5I8AG+TrABvlcwAb5isAG+bXABvnWwAb54MAG+fbABvoJwAb6FcAG+ijABvpCwAb6UcAG+mvABvqCwAb6kMAG+q3ABvq6wAb61MAG+ufABvrwwAb6/MAG+wbABvsXwAb7G8AG+x/ABvswwAb7RcAG+1TABvtlwAb7jcAG+6bABvu4wAb73cAG+/jABvwHwAb8I8AG/FPABvxvwAb8h8AG/KDABvyvwAb8yMAG/NLABvzlwAb9CsAG/SfABv1QwAb9ccAG/YXABv2UwAb9pMAG/abABv2xwAb9yMAG/djABv3mwAb9+8AG/hjABv4vwAb+RsAG/ljABv5lwAb+d8AG/pTABv6fwAb+uMAG/sbABv7YwAb+68AG/v3ABv8KwAb/HsAG/zTABv9HwAb/YMAG/23ABv94wAb/lcAG/6PABv+uwAb/ysAG/9bABv/iwAb/8sAG///ABwAQwAcAIsAHADPABwBJwAcAXsAHAG7ABwB+wAcAmsAHAK3ABwDTwAcA48AHAO/ABwEGwAcBGcAHAS3ABwE4wAcBS8AHAVnABwFnwAcBf8AHAZbABwGjwAcBsMAHAbvABwHGwAcBzMAHAdLABwHYwAcB3sAHAfbABwIIwAcCG8AHAi/ABwI4wAcCTMAHAmPABwJwwAcCiMAHApXABwKtwAcCyMAHAtjABwLuwAcDA8AHAynABwM+wAcDWcAHA3fABwOKwAcDoMAHA67ABwO1wAcDxMAHA9DABwP1wAcEDMAHBCPABwQuwAcEOsAHBETABwROwAcEVsAHBGLABwRywAcEkMAHBLzABwTUwAcE4cAHBOvABwT5wAcFBsAHBRDABwUZwAcFJsAHBTHABwU5wAcFXcAHBXXABwWPwAcFu8AHBd/ABwXuwAcF/MAHBinABwY1wAcGV8AHBmjABwZ4wAcGhcAHBpbABwbGwAcG3MAHBubABwbxwAcHAsAHBxjABwcowAcHPMAHB1nABwdywAcHi8AHB57ABweswAcHvMAHB9rABwfuwAcICsAHCBHABwgwwAcIWMAHCHPABwiYwAcItsAHCNHABwjxwAcJFsAHCTHABwlSwAcJc8AHCZ7ABwm7wAcJ2cAHCgLABwojwAcKQsAHClrABwqDwAcKpcAHCsfABwruwAcLEsAHCyHABwtEwAcLYsAHC2rABwuSwAcLssAHC9HABwv4wAcMGsAHDCzABwxGwAcMXsAHDHPABwyJwAcMncAHDK/ABwy9wAcMz8AHDNzABwznwAcM88AHDP7ABw0JwAcNG8AHDSnABw02wAcNQMAHDVHABw1fwAcNcMAHDY3ABw2VwAcNn8AHDbXABw3FwAcN0cAHDe3ABw4HwAcOGcAHDinABw44wAcOScAHDljABw5rwAcOfcAHDpvABw61wAcOwMAHDs3ABw76wAcPEsAHDyXABw8ywAcPT8AHD3LABw+cwAcPsMAHD8LABw/SwAcP3sAHD/DABxABwAcQFcAHECvABxA8wAcQTcAHEFTABxBmwAcQcMAHEH/ABxCMwAcQpsAHEMDABxDWwAcQ8sAHEQbABxEPwAcRLcAHEUrABxF7wAcRi8AHEZ/ABxGvwAcRtsAHEcPABxHfwAcR68AHEfvABxIKwAcSJMAHEkfABxJWwAcSZMAHEnjABxKJwAcSl8AHEqjABxK/wAcSycAHEtjABxLlwAcS98AHEwDABxMQwAcTMsAHEzvABxNIwAcTUMAHE27ABxOTwAcTocAHE6jABxOvwAcT3cAHE+vABxPywAcUBMAHFCLABxQ+wAcUSsAHFGPABxRvwAcUfsAHFIjABxSfwAcUqsAHFLzABxTOwAcU4sAHFPXABxUBwAcVE8AHFS3ABxU4wAcVScAHFWfABxWCwAcVncAHFbjABxXGwAcV3sAHFefABxX2wAcWEcAHFh/ABxYuwAcWQsAHFlzABxZpwAcWc8AHFoTABxaSwAcWo8AHFrbABxbUwAcW8sAHFvzABxcHwAcXGsAHFyrABxc2wAcXP8AHF0nABxdewAcXaMAHF3/ABxeLwAcXlcAHF6PABxeswAcXwsAHF9TABxfhwAcX78AHGBnABxglwAcYK8AHGEfABxhSwAcYXcAHGHPABxh+wAcYmMAHGKXABxi1wAcYw8AHGNbABxjfwAcY8cAHGQTABxkWwAcZKMAHGTfABxk9wAcZUsAHGWjABxl0wAcZjcAHGaXABxm/wAcZy8AHGdjABxnswAcZ/MAHGh3ABxoswAcaN8AHGkHABxpLwAcaUcAHGlfABxptwAcaecAHGoLABxqswAcavsAHGs7ABxrewAca/MAHGxLABxshwAcbLcAHGznABxtFwAcbUMAHG1jABxtjwAcbeMAHG4fABxuYwAcbrsAHG7jABxvKwAcb7MAHG/7ABxwawAccHMAHHDfABxxUwAccX8AHHGTABxx0wAccfMAHHIfABxyewAccq8AHHLfABxzQwAcc4MAHHO3ABx0SwAcdH8AHHS3ABx1AwAcdVMAHHVjABx1gwAcdbcAHHXrABx2JwAcdlcAHHaHABx2qwAcdwsAHHdfABx3swAcd/sAHHhHABx4awAceKcAHHjLABx45wAceU8AHHnnABx6LwAcer8AHHs/ABx7hwAce7MAHHvfABx7/wAcfG8AHHyfABx8uwAcfQsAHH1TABx9pwAcfg8AHH4rABx+QwAcfnMAHH6TABx/BwAcfz8AHH93ABx/pwAcf88AHIAHAByARwAcgJ8AHIDXAByBDwAcgT8AHIFjAByBpwAcgdMAHIH/AByCQwAcgnsAHIK/AByC/wAcgzcAHIOLAByDtwAcg/cAHIQjAByEewAchNMAHIVTAByF0wAchkMAHIazAByG3wAchwcAHIc/AByHdwAch8cAHIffAByIBwAciEcAHIiTAByI9wAciSMAHIk/AByJfwAcidcAHIoXAByKbwAcivMAHIszAByLfwAci58AHIuvAByL5wAcjCMAHIx7AByMswAcjNMAHIz/AByNJwAcjXcAHI2vAByN7wAcjicAHI5bAByO4wAcjxsAHI9PAByPcwAcj+8AHJArAByQxwAckPsAHJFbAByRrwAckkMAHJL3AByTowAck88AHJPvAByUJwAclFsAHJSXAByU3wAclQ8AHJVbAByVkwAclcMAHJX3AByWGwAcliMAHJZvAByWowAclucAHJeXAByXywAcl9MAHJgXAByYTwAcmK8AHJlPAByZnwAcmksAHJqLAByakwAcmtMAHJtvABybuwAcnBsAHJyTAByc0wAcnUcAHJ2nAByeCwAcnk8AHJ7LAByfKwAcn7cAHKAjABygbwAcoMMAHKEHAByhTwAcoYcAHKG7AByh5wAcoisAHKJjAByimwAcoscAHKL7AByjLwAco1MAHKODAByjtwAco98AHKQLABykTwAcpG8AHKSXABykywAcpOsAHKUXABylVwAcpXcAHKWzAByl8wAcpisAHKZLABymjwAcpsMAHKcPABynXwAcp48AHKfDAByn9wAcqCcAHKiTAByo7wAcqR8AHKl3AByppwAcqc8AHKn7AByqNwAcqnMAHKq/AByq+wAcqyMAHKtDAByrkwAcq7MAHKvbABysFwAcrEcAHKxbABysswAcrO8AHK0rABytPwAcrg8AHK6PAByuxwAcrzMAHK9vAByvswAcr8sAHLADABywFwAcsFMAHLCzAByw6wAcsScAHLFjAByxqwAcseMAHLITAByyUwAcsocAHLLXAByzOwAcs5cAHLPPABy0FwActDMAHLRzABy0mwActLsAHLV3ABy1hwActasAHLY/ABy2dwActp8AHLbzABy3EwActzcAHLdbABy3gwAct8cAHLf7ABy4JwAcuEsAHLhvABy4pwAcuMsAHLj3ABy5IwAcuZsAHLnbABy6KwAculMAHLpvABy6owAcutMAHLr7ABy7GwAcuzsAHLuPABy7wwAcu+sAH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ULjAB1DFwAdQz8AHUN/AB1DpwAdQ98AHUQjAB1EUwAdROMAHUVLAB1FowAdReMAHUYjAB1GZwAdRosAHUa/AB1G3wAdRzMAHUeXAB1H4wAdSBsAHUh3AB1I0wAdSP8AHUlnAB1JiwAdSbMAHUn7AB1KHwAdSmsAHUqXAB1KwwAdSw8AHUtTAB1LewAdS5sAHUvrAB1MCwAdTDsAHUxrAB1MlwAdTJ8AHUzLAB1NGwAdTSsAHU1fAB1NiwAdTbMAHU3bAB1OAwAdTlMAHU5zAB1O1wAdTwMAHU8jAB1PewAdT78AHU//AB1QSwAdUJ8AHVDPAB1RRwAdUWsAHVGvAB1SBwAdUlMAHVLDAB1S/wAdUw8AHVNLAB1TywAdU/8AHVQTAB1UJwAdVEsAHVRzAB1U1wAdVTsAHVXTAB1WBwAdVjsAHVZnAB1WlwAdVs8AHVcXAB1XOwAdV1sAHVeXAB1X6wAdWA8AHVhHAB1YhwAdWNcAHVkfAB1ZfwAdWccAHVonAB1aXwAdWpcAHVq7AB1a+wAdWzsAHVuDAB1b4wAdXBcAHVw7AB1cZwAdXLcAHVzbAB1c+wAdXSMAHV0/AB1dqwAdXe8AHV4nAB1eSwAdXnMAHV7HAB1fBwAdXxsAHV83AB1fdwAdX6MAHV/XAB1f7wAdYBMAHWBLAB1giwAdYMsAHWEPAB1hfwAdYZsAHWHLAB1h9wAdYgcAHWIzAB1iVwAdYq8AHWLXAB1jBwAdY1sAHWOLAB1juwAdY/MAHWQ7AB1kbwAdZJsAHWSjAB1kuwAdZNcAHWTnAB1k8wAdZQcAHWUPAB1lJwAdZTMAHWVLAB1lewAdZYsAHWWnAB1l5wAdZgsAHWZfAB1mowAdZsMAHWcfAB1nSwAdZ3MAHWfLAB1n9wAdaAcAHWgTAB1ovwAdaNsAHWkfAB1pUwAdabsAHWoPAB1qPwAdamMAHWpzAB1qpwAdarMAHWrXAB1q9wAday8AHWtLAB1rfwAda7cAHWvvAB1sNwAdbFMAHWyHAB1sxwAdbOsAHW0vAB1tTwAdbY8AHW5bAB1uswAdb2cAHW+zAB1wewAdcM8AHXGHAB1ySwAdcpsAHXNfAB1zswAddIMAHXTfAB11YwAddZcAHXWrAB11zwAddisAHXaDAB12mwAddvsAHXdbAB13twAdeBMAHXg3AB14mwAdeOsAHXkHAB15MwAdeTsAHXmDAB15lwAdegsAHXo7AB16awAdepsAHXrjAB168wAdey8AHXs3AB17UwAde3MAHXvDAB176wAdfCsAHXwzAB18VwAdfHcAHXyjAB180wAdfQcAHX1LAB19ewAdfaMAHX3XAB197wAdfgMAHX5fAB1+ZwAdfpcAHX7HAB1+6wAdfyMAHX9rAB1/fwAdf5sAHX+nAB1/vwAdf9cAHX/vAB2ABwAdgCMAHYA/AB2AUwAdgHsAHYCjAB2BHwAdgWMAHYGfAB2CLwAdgk8AHYKDAB2CywAdgxMAHYNTAB2DXwAdg4MAHYOzAB2DywAdg/sAHYQnAB2EdwAdhUMAHYVzAB2FwwAdhgsAHYYjAB2GZwAdhqcAHYbfAB2HFwAdh1MAHYePAB2H1wAdiKsAHYjbAB2I/wAdiR8AHYm7AB2KEwAdik8AHYpnAB2K0wAdizMAHYtTAB2L5wAdjDMAHYyLAB2MtwAdjNsAHYz7AB2NHwAdjZ8AHY4fAB2OTwAdjocAHY67AB2O5wAdjxsAHY9PAB2PdwAdj48AHY/PAB2QPwAdkHMAHZDnAB2RYwAdkZ8AHZHLAB2R8wAdkkMAHZJ/AB2SnwAdkv8AHZMfAB2TRwAdk2MAHZOPAB2T3wAdlDsAHZRjAB2U2wAdlU8AHZXjAB2WBwAdlkcAHZZvAB2WtwAdlvsAHZdbAB2XywAdmBcAHZhTAB2YhwAdmNMAHZk3AB2Z1wAdmhMAHZp3AB2a8wAdmz8AHZtnAB2bjwAdm7MAHZvzAB2cMwAdnGMAHZzHAB2c/wAdnW8AHZ2LAB2dxwAdngcAHZ4rAB2eRwAdnmcAHZ6XAB2eqwAdnr8AHZ73AB2fGwAdn0cAHZ9rAB2fjwAdn6sAHZ/3AB2gMwAdoGMAHaCvAB2hAwAdoXMAHaGXAB2h0wAdogMAHaIjAB2iUwAdoqcAHaK7AB2i5wAdoxcAHaMjAB2jQwAdo28AHaN/AB2jxwAdpAcAHaQXAB2kOwAdpGMAHaSHAB2k3wAdpRMAHaUnAB2lWwAdpW8AHaWHAB2llwAdpfsAHaZjAB2mhwAdpssAHabrAB2nNwAdp1MAHadvAB2nqwAdqDMAHahfAB2onwAdqMcAHalPAB2pZwAdqY8AHam/AB2p9wAdqn8AHaq3AB2rOwAdq3MAHaubAB2rywAdrB8AHaxrAB2snwAdrMcAHazjAB2tIwAdrVcAHa2LAB2t2wAdricAHa5jAB2umwAdruMAHa7/AB2vFwAdrzsAHa9vAB2vowAdr8sAHa//AB2wTwAdsIMAHbC/AB2xCwAdsVMAHbF3AB2xlwAdsecAHbI3AB2ygwAdsysAHbNXAB2zgwAdtCMAHbTTAB21QwAdtXMAHbWTAB219wAdtisAHbZjAB23HwAdt4cAHbgPAB24XwAduLsAHbkXAB25dwAduacAHbnHAB26XwAduqsAHbrXAB27LwAdu4MAHbvTAB28JwAdvIMAHb0PAB29QwAdvbcAHb3rAB2+KwAdvoMAHb63AB2+1wAdvwsAHb8rAB2/UwAdv3MAHb+zAB2/2wAdv+sAHcAjAB3ARwAdwHMAHcCvAB3AywAdwO8AHcEPAB3BLwAdwV8AHcGjAB3BxwAdwgMAHcIrAB3CYwAdwpcAHcK3AB3C2wAdwwcAHcM3AB3DZwAdw5MAHcO7AB3D6wAdxB8AHcRXAB3EtwAdxRcAHcVfAB3FdwAdxZ8AHcXHAB3F3wAdxfcAHcYbAB3GTwAdxmMAHcZ3AB3GswAdxs8AHcbvAB3HgwAdyDcAHchnAB3IuwAdyRMAHckrAB3JZwAdycMAHcn3AB3KKwAdylcAHcqHAB3KtwAdyucAHcsXAB3LRwAdy3cAHcuvAB3L2wAdzD8AHcyrAB3NBwAdzU8AHc2vAB3N9wAdzi8AHc5PAB3OewAdzr8AHc8/AB3PswAd0CcAHdC7AB3RTwAd0dcAHdILAB3SdwAd0s8AHdMrAB3TewAd09MAHdQzAB3UXwAd1JMAHdS7AB3U4wAd1RcAHdVHAB3VmwAd1fMAHdZ7AB3WswAd1tsAHdcPAB3XawAd188AHdgHAB3YPwAd2JMAHdi3AB3YvwAd2OMAHdjrAB3ZKwAd2TcAHdmzAB3Z3wAd2kcAHdp3AB3a3wAd2y8AHdu3AB3b5wAd3AcAHdwbAB3cYwAd3J8AHdzvAB3dNwAd3WsAHd2bAB3d5wAd3isAHd5PAB3eiwAd3r8AHd7rAB3fEwAd32sAHd+7AB3gFwAd4E8AHeCDAB3g2wAd4SsAHeFzAB3hswAd4gMAHeJLAB3iowAd4vMAHeMrAB3jWwAd46cAHePrAB3kOwAd5IcAHeS3AB3k5wAd5RMAHeU/AB3lfwAd5bsAHeXnAB3mDwAd5k8AHeZrAB3mjwAd5qcAHea/AB3nGwAd52MAHeerAB3n+wAd6BsAHeiLAB3o0wAd6RsAHemTAB3p8wAd6iMAHepXAB3qiwAd6q8AHernAB3rOwAd62sAHeurAB3r6wAd7CsAHexXAB3sgwAd7KcAHezzAB3tKwAd7YcAHe3jAB3uSwAd7p8AHe7TAB3vwwAd8BMAHfAvAB3wTwAd8GsAHfCXAB3wywAd8O8AHfEPAB3xLwAd8bcAHfJ7AB3yvwAd8tcAHfMTAB3zWwAd85sAHfPTAB30FwAd9F8AHfR3AB30uwAd9O8AHfUbAB31XwAd9csAHfYXAB32jwAd9u8AHfdfAB33wwAd998AHfgHAB34OwAd+G8AHfizAB340wAd+R8AHflXAB35vwAd+gMAHfpLAB36pwAd+vMAHfsrAB37cwAd+8MAHfv7AB38SwAd/HsAHfzDAB39EwAd/V8AHf2DAB391wAd/hMAHf6TAB3+0wAd/wsAHf9fAB3/cwAd/4MAHf+nAB4AFwAeAG8AHgC7AB4A/wAeAU8AHgHbAB4CHwAeAkcAHgJrAB4CnwAeAtcAHgNLAB4DfwAeA9cAHgQbAB4EbwAeBKsAHgTvAB4FLwAeBXsAHgW3AB4F/wAeBpcAHgbPAB4HCwAeBzsAHgdbAB4HlwAeCBcAHghLAB4IbwAeCKsAHgjfAB4JCwAeCScAHgl7AB4JmwAeCfsAHgo/AB4KnwAeCwcAHgtnAB4LywAeC/8AHgxPAB4MpwAeDRMAHg1TAB4OawAeDr8AHg7fAB4O+wAeDyMAHg83AB4PhwAeECMAHhBTAB4QmwAeEOcAHhE7AB4RkwAeEfsAHhJLAB4SYwAeErcAHhLTAB4TJwAeE0MAHhOXAB4TswAeFDcAHhRnAB4U9wAeFVcAHhV/AB4V5wAeFjMAHhaHAB4W7wAeF2MAHheLAB4YPwAeGF8AHhhzAB4ZdwAeGdMAHhnnAB4aDwAeGoMAHhrLAB4a/wAeG3cAHhv/AB4cdwAeHJsAHhzzAB4dMwAeHYMAHh4HAB4eawAeHrsAHh7vAB4fDwAeH08AHh+HAB4frwAeH+MAHiA7AB4gWwAeIJcAHiDTAB4hXwAeIdcAHiJ7AB4irwAeIzsAHiOXAB4jywAeJDsAHiSrAB4kxwAeJUsAHiWzAB4mLwAeJoMAHia7AB4m6wAeJ1MAHidnAB4njwAeJ/cAHihTAB4oewAeKWMAHimLAB4prwAeKfsAHipHAB4qfwAeKqcAHisHAB4riwAeK98AHix3AB4tWwAeLaMAHi3HAB4uIwAeLo8AHi7LAB4vSwAeMC8AHjB3AB4wvwAeMP8AHjEbAB4xNwAeMVsAHjF7AB4xrwAeMgsAHjIzAB4yQwAeMlMAHjJjAB4yjwAeMusAHjNbAB4zhwAeM+sAHjRjAB40lwAeNPsAHjUjAB41NwAeNUcAHjVnAB413wAeNt8AHjc3AB43VwAeN8MAHjgXAB44ZwAeOHsAHjjfAB45LwAeOUMAHjmnAB45/wAeOjMAHjqHAB46swAeOtcAHjsfAB47ewAeO6MAHjvLAB48FwAePGcAHjy3AB487wAePSsAHj3XAB4+WwAePp8AHj7/AB4/VwAeP6MAHj/rAB5AIwAeQFcAHkCHAB5AswAeQN8AHkFnAB5BvwAeQeMAHkIfAB5CUwAeQrMAHkLrAB5DVwAeQ8cAHkQTAB5EOwAeRG8AHkSzAB5E/wAeRUsAHkVzAB5FswAeRcsAHkYnAB5GcwAeRsMAHkb7AB5HGwAeRz8AHkePAB5H2wAeSA8AHkhTAB5IowAeSNsAHkkbAB5JbwAeSa8AHknbAB5KGwAeSncAHkq7AB5LQwAeS5sAHkvvAB5MUwAeTGsAHkyXAB5M0wAeTRcAHk1XAB5NowAeTgMAHk5DAB5OawAeTssAHk8HAB5PQwAeT3sAHk+bAB5PzwAeUAcAHlA7AB5QnwAeUM8AHlD7AB5RJwAeUVsAHlGLAB5R6wAeUhcAHlJ3AB5SnwAeUr8AHlLnAB5TEwAeU4sAHlPvAB5UKwAeVIsAHlTTAB5VPwAeVasAHlXvAB5WdwAeVucAHldrAB5X3wAeWCcAHlhPAB5YrwAeWO8AHlk7AB5ZcwAeWb8AHln/AB5aPwAeWmsAHlqbAB5a2wAeWwsAHls3AB5bewAeW48AHlu7AB5b4wAeXGsAHlyjAB5c5wAeXTMAHl3HAB5ePwAeXmMAHl67AB5fFwAeX3cAHl+jAB5gDwAeYH8AHmC3AB5g7wAeYVMAHmG7AB5iEwAeYm8AHmLLAB5jKwAeY3MAHmO/AB5j5wAeZFsAHmR/AB5kpwAeZO8AHmU7AB5lfwAeZa8AHmXnAB5mCwAeZksAH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sPbAB7D8wAexCMAHsQ/AB7EcwAexIsAHsS7AB7E1wAexPMAHsUjAB7FSwAexYsAHsWvAB7F6wAexh8AHsZPAB7GlwAexrsAHsb3AB7HAwAexycAHsdTAB7HfwAex8cAHsfvAB7ILwAeyHsAHsinAB7I6wAeyRcAHslbAB7JfwAeybsAHsnnAB7KEwAeylMAHsp3AB7KswAeyvcAHssPAB7LPwAey2cAHsurAB7L5wAezD8AHsxTAB7MhwAezMMAHs1fAB7NvwAezeMAHs4LAB7OTwAeztMAHs8LAB7PcwAez6sAHtAzAB7QXwAe0IMAHtCnAB7QuwAe0PMAHtE7AB7RdwAe0e8AHtILAB7SZwAe0oMAHtK7AB7S2wAe2NMAHtlfAB7ZnwAe2fsAHtpfAB7aqwAe25cAHtvrAB7c5wAe3RsAHt1fAB7vvwAe+gsAHwHvAB8CqwAfAt8AHwMTAB8DSwAfA28AHwP7AB8EUwAfBP8AHwU7AB8FqwAfBd8AHwZXAB8GowAfBrcAHwcHAB8HQwAfB/cAHwgrAB8IYwAfCLcAHwkvAB8JZwAfCdsAHwpPAB8KjwAfCssAHwrrAB8LBwAfCysAHwtDAB8LXwAfC4MAHwunAB8LywAfDAsAHwwzAB8MgwAfDfcAHw4XAB8OowAfDzcAHxL7AB8THwAfE7sAHxP3AB8UWwAfFMMAHxTTAB8U4wAfFSMAHxVjAB8V2wAfGEcAHxhrAB8YdwAfGJMAHxl3AB8ZowAfGmcAHxxjAB8clwAfHM8AHx0bAB8dQwAfHZcAHx2rAB8eFwAfIKsAHyO7AB8k9wAfJtsAHycjAB8nUwAfJ4cAHyg3AB8o4wAfKSsAHylnAB8pswAfOWsAHzn3AB86MwAfOscAHztnAB87twAfPAMAHzxDAB88qwAfRa8AH0v3AB9MXwAfTLcAH0zLAB9NCwAfTTcAH01fAB9NewAfTaMAH037AB9OIwAfTncAH07TAB9PCwAfTzsAH09vAB9xjwAfcesAH3JHAB9y8wAfczMAH3NzAB9zxwAfdA8AH3RfAB90mwAfdPMAH3UPAB91cwAfdbcAH3XjAB92KwAfdl8AH3avAB92/wAfdzMAH3dnAB93owAfd98AH3hfAB95AwAfeUcAH3m3AB95+wAfehsAH3o/AB96VwAfeoMAH3qnAB964wAfexMAH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T8XACE/SwAhP3cAIT+3ACE/8wAhQEcAIUCDACFAuwAhQN8AIUEfACFBOwAhQW8AIUGjACFB1wAhQfsAIUIvACFCVwAhQosAIUK3ACFC9wAhQzMAIUM7ACFDVwAhQ6MAIUO3ACFD9wAhRCsAIURjACFEuwAhROMAIUUrACFFOwAhRcsAIUYrACFG0wAhR2sAIUfjACFIGwAhSO8AIUmzACFKTwAhSmsAIUqTACFKswAhStcAIUtrACFLmwAhS8MAIUwHACFMHwAhTGMAIUyvACFMzwAhTRsAIU1LACFNcwAhTaMAIU3/ACFOIwAhTksAIU6bACFO1wAhTvsAIU9LACFPkwAhT7cAIU/jACFQEwAhUEcAIVCHACFQowAhUMMAIVETACFSGwAhUjcAIVJrACFShwAhUwcAIVYTACFWUwAhVnsAIVbTACFW9wAhV38AIVrHACFa3wAhWxsAIVs3ACFb7wAhXA8AIVw/ACFcZwAhXJcAIVzPACFc4wAhXSMAIV23ACFeAwAhXlMAIV67ACFe3wAhX0MAIWAfACFgjwAhYWcAIWXTACFmGwAhZlcAIWaHACFmvwAhZxcAIWdHACFnYwAhZ5MAIWezACFoCwAhaI8AIWjbACFpHwAhaU8AIWmLACFpuwAhadsAIWofACFqUwAhaocAIWqzACFrEwAha0sAIWtvACFrkwAhcJcAIXDjACFxkwAhch8AIXJPACFyiwAhcrMAIXMDACFzZwAhc7MAIXPTACF0JwAhdGsAIXSnACF1BwAhdWMAIXV/ACF2RwAhdqMAIXbDACF28wAhd38AIXe/ACF39wAheC8AIXhTACF4fwAheKsAIXi3ACF4zwAheP8AIXkTACF5MwAheVMAIXoLACF6VwAhexsAIXtzACF8MwAhfIcAIXzPACF89wAhfRsAIX1LACF+BwAhflcAIX6PACF+twAhfxMAIX9HACF/iwAhf8cAIYAzACGAXwAhgK8AIYEPACGBYwAhgdcAIYH7ACGCHwAhgj8AIYL3ACGDPwAhg3sAIYPfACGD+wAhhB8AIYRDACGEXwAhhIMAIYSjACGE3wAhhacAIYYDACGGTwAhhnMAIYaTACGGpwAhhtMAIYb7ACGHLwAhh2sAIYd/ACGHhwAhh8MAIYgjACGIRwAhiHcAIYiXACGI0wAhiPsAIYkPACGJLwAhiUcAIYlPACGJiwAhiacAIYm7ACGJ5wAhif8AIYonACGKWwAhipsAIYtfACGLtwAhi+sAIYw7ACGMrwAhjQsAIY2rACGN/wAhjjMAIY5jACGOowAhjrMAIY7DACGO7wAhjwsAIY8rACGPZwAhj5sAIY+3ACGP5wAhkBcAIZA3ACGQPwAhkGsAIZCfACGQ5wAhkR8AIZE7ACGRewAhkb8AIZIbACGSSwAhkosAIZKrACGTZwAhk7cAIZPrACGUDwAhlFMAIZR3ACGUnwAhlOsAIZUnACGVawAhlZcAIZXHACGWIwAhll8AIZaPACGXAwAhl2MAIZevACGYQwAhmHcAIZjfACGZGwAhmVcAIZmfACGZzwAhmf8AIZpDACGaXwAhmq8AIZrXACGbEwAhm0cAIZvPACGcOwAhnIsAIZyzACGc5wAhnRcAIZ1zACGdpwAhndsAIZ4TACGePwAhnncAIZ6TACGeqwAhntcAIZ8jACGfYwAhn48AIZ/PACGgBwAhoEMAIaCLACGgkwAhoMsAIaDfACGhCwAhoSsAIaFLACGhjwAhobMAIaHfACGh6wAhohcAIaIjACGiUwAhopMAIaL3ACGjKwAho18AIaOvACGjzwAhpBMAIaRHACGknwAhpMsAIaUHACGlIwAhpVcAIaWPACGl4wAhpg8AIaZrACGmvwAhpusAIacTACGnPwAhp18AIaeLACGn3wAhqBMAIag7ACGoXwAhqKsAIajzACGpDwAhqS8AIamDACGpvwAhqfsAIaovACGqiwAhqqsAIarjACGrMwAhq08AIat7ACGrowAhq8MAIavrACGsCwAhrDMAIaxTACGsawAhrH8AIaybACGsuwAhrO8AIa0fACGtZwAhrasAIa3bACGuAwAhrhMAIa47ACGuSwAhrmsAIa6fACGuzwAhrx8AIa9HACGvdwAhr5sAIa/DACGv4wAhsAsAIbA3ACGwWwAhsHcAIbCTACGwwwAhsPcAIbErACGxVwAhsZcAIbHLACGx/wAhshMAIbI/ACGyUwAhspcAIbLjACGzMwAhs1sAIbOfACGzxwAhtAcAIbQfACG0NwAhtL8AIbTvACG1KwAhtT8AIbVrACG1lwAhtcMAIbXvACG2IwAhtncAIbaLACG2nwAhttcAIbcjACG3dwAht6sAIbfTACG3+wAhuE8AIbh3ACG4nwAhuNcAIblHACG5twAhufsAIbobACG6OwAhuocAIbrPACG67wAhu0cAIbtjACG7gwAhu4sAIbuTACG7uwAhu9cAIbvvACG8BwAhvEMAIbyDACG8wwAhvQMAIb0/ACG9YwAhvYcAIb2TACG9nwAhvbsAIb3rACG+MwAhvpcAIb7DACG+5wAhvwcAIb83ACG/bwAhv5sAIb/jACG//wAhwCMAIcBXACHAgwAhwKsAIcCzACHBCwAhwTMAIcGPACHBqwAhwdMAIcH/ACHCKwAhwkMAIcJLACHCYwAhwoMAIcKnACHCwwAhwtcAIcLzACHDEwAhwzsAIcNzACHDhwAhw6cAIcPPACHEEwAhxC8AIcRLACHEZwAhxNMAIcTvACHFDwAhxSsAIcVfACHFiwAhxa8AIcXTACHGAwAhxjcAIcZ7ACHGvwAhxtsAIccXACHHQwAhx2cAIceTACHH1wAhyAMAIcg/ACHIdwAhyJsAIcjDACHI9wAhyRcAIclDACHJYwAhyc8AIcnzACHKCwAhyh8AIcozACHKbwAhypMAIcq7ACHK2wAhyvsAIcsbACHLOwAhy1sAIcuDACHLnwAhy/MAIcwPACHMdwAhzKMAIczXACHM/wAhzR8AIc1PACHNgwAhzb8AIc33ACHOjwAhzxMAIc8zACHPVwAhz3sAIc+zACHP+wAh0AsAIdBbACHROwAh0fcAIdJDACHSYwAh0rMAIdOPACHT2wAh0/cAIdRHACHUlwAh1RsAIdVLACHVpwAh1e8AIdZjACHWmwAh1v8AIdcjACHXVwAh17cAIdfXACHYEwAh2HsAIdijACHY1wAh2UMAIdofACHaQwAh2mMAIdrvACHbGwAh20sAIdt3ACHblwAh288AIdv/ACHcVwAh3HsAIdyfACHcwwAh3RsAId0zACHdYwAh3YcAId3TACHeIwAh3lcAId5nACHeswAh3ucAId7/ACHfIwAh30sAId9zACHfqwAh388AId/rACHgEwAh4EsAIeCDACHgowAh4LMAIeDHACHg2wAh4N8AIeDzACHhMwAh4V8AIeGfACHh/wAh4g8AIeI3ACHiUwAh4m8AIeLzACHjJwAh428AIeOnACHj2wAh5A8AIeRfACHkgwAh5KsAIeTjACHlNwAh5YcAIeXXACHmEwAh5jsAIeaLACHm2wAh5yMAIeejACHnswAh6BMAIeiPACHo6wAh6WcAIenDACHqDwAh6lcAIeqLACHqxwAh6wcAIevbACHsFwAh7IsAIezDACHtHwAh7U8AIe3DACHuMwAh7osAIe7XACHvCwAh748AIe/rACHwrwAh8RMAIfFjACHxrwAh8fsAIfKnACHzAwAh818AIfQvACH1AwAh9U8AIfW7ACH1/wAh9kMAIfZzACH2twAh9tsAIfdPACH3ewAh97cAIffzACH4MwAh+HcAIfjPACH5BwAh+UsAIflrACH5jwAh+bcAIfnvACH6EwAh+jMAIfpHACH6ZwAh+psAIfrDACH68wAh+08AIft/ACH7twAh++cAIfw3ACH8YwAh/KMAIfznACH9EwAh/T8AIf2nACH97wAh/lMAIf57ACH+swAh/uMAIf8TACH/XwAh/2cAIf+rACIABwAiAC8AIgBXACIAiwAiALsAIgEDACIBKwAiAVcAIgF7ACIBpwAiAg8AIgJDACICgwAiAs8AIgMjACIDSwAiA48AIgPDACIEBwAiBD8AIgR3ACIEwwAiBNsAIgTzACIFMwAiBWsAIgWjACIF0wAiBdsAIgYbACIGTwAiBlsAIgaDACIG0wAiBwcAIgdbACIHhwAiB8MAIgg7ACIImwAiCNsAIgkjACIJawAiCYsAIgnDACIJ7wAiCgsAIgpjACIKqwAiCvcAIgs3ACILiwAiC88AIgwbACIMcwAiDJsAIgzLACIM/wAiDS8AIg1jACINiwAiDbcAIg3rACIOFwAiDmcAIg6rACIPAwAiDz8AIg+bACIP2wAiD/MAIhADACIQHwAiEE8AIhCHACIQuwAiEQsAIhFfACIRkwAiEpMAIhK3ACIS0wAiEwsAIhM/ACITXwAiE3sAIhOnACIT/wAiFBsAIhRPACIUbwAiFJcAIhUnACIVawAiFa8AIhXjACIWHwAiFk8AIhaHACIWwwAiFwMAIhcTACIXIwAiFz8AIhdbACIXdwAiF5MAIhfjACIYJwAiGDsAIhj3ACIZSwAiGXMAIhmbACIaAwAiGj8AIhprACIakwAiGu8AIhtrACIbowAiG/MAIhwvACIcUwAiHHMAIhy3ACIc1wAiHRsAIh07ACIdmwAiHcMAIh3zACIeOwAiHlMAIh5vACIejwAiHrsAIh7/ACIfLwAiH18AIh+PACIftwAiH/8AIiAjACIglwAiILMAIiDrACIhCwAiIUcAIiGDACIh1wAiIe8AIiIjACIiTwAiIncAIiKXACIiywAiIw8AIiMzACIjPwAiI3MAIiOrACIj3wAiJAMAIiQ/ACIkcwAiJKsAIiTjACIlIwAiJWcAIiWXACIl3wAiJicAIiZDACImfwAiJssAIicDACInHwAiJ1sAIifDACIn/wAiKB8AIihfACIonwAiKO8AIikDACIpJwAiKVcAIimTACIpswAiKdcAIioLACIqMwAiKncAIiqjACIqxwAiKu8AIisLACIrSwAiK5MAIivPACIr8wAiLBMAIiw/ACIsbwAiLK8AIizbACItAwAiLS8AIi1nACItkwAiLc8AIi33ACIuMwAiLksAIi5zACIumwAiLqcAIi7TACIu+wAiLycAIi+rACIv1wAiL/8AIjAnACIwTwAiMHcAIjCfACIwzwAiMO8AIjE/ACIxdwAiMl8AIjKTACIyxwAiMucAIjMDACIzMwAiM1sAIjNzACIzjwAiM5cAIjOfACIz1wAiM98AIjPnACI0CwAiNDcAIjRjACI0iwAiNK8AIjWvACI12wAiNi8AIjZbACI2rwAiNtcAIjcfACI3RwAiN2cAIjd/ACI3swAiN98AIjfnACI4DwAiODcAIjhrACI4kwAiOLsAIjjbACI5HwAiOTcAIjlDACI5TwAiOX8AIjmfACI5zwAiOdsAIjoDACI6GwAiOlcAIjp7ACI6kwAiOtMAIjsLACI7IwAiO1cAIjt/ACI7twAiO+MAIjwXACI8SwAiPIcAIjy/ACI8+wAiPScAIj1XACI9ZwAiPYMAIj2zACI9zwAiPf8AIj4rACI+RwAiPmsAIj6bACI+uwAiPusAIj8LACI/QwAiP2sAIj+fACI/wwAiP/sAIkAjACJASwAiQGMAIkCPACJAqwAiQNMAIkD3ACJBEwAiQWMAIkGDACJB0wAiQh8AIkJXACJCdwAiQpMAIkKvACJCywAiQuMAIkMHACJDJwAiQ0cAIkNfACJDewAiQ6MAIkO/ACJD3wAiQ+sAIkQjACJENwAiRFcAIkSHACJEuwAiROsAIkUfACJFQwAiRV8AIkV3ACJFhwAiRasAIkXPACJF8wAiRgMAIkYnACJGTwAiRo8AIka3ACJG2wAiRxMAIkczACJHSwAiR1cAIkd3ACJHnwAiR8cAIkfvACJIBwAiSC8AIkhXACJIfwAiSKcAIkjPACJI9wAiSR8AIklHACJJbwAiSZcAIkm/ACJJ5wAiSg8AIko3ACJKXwAiSocAIkqvACJK1wAiSv8AIksnACJLTwAiS3cAIkufACJLxwAiS+8AIkwXACJMPwAiTGcAIkyPACJMtwAiTN8AIk0HACJNLwAiTVcAIk1/ACJNpwAiTc8AIk33ACJOHwAiTkcAIk5vACJOlwAiTr8AIk7nACJPDwAiTzcAIk9fACJPhwAiT68AIk/XACJP/wAiUCcAIlBPACJQdwAiUJ8AIlDHACJQ7wAiUPsAIlETACJRRwAiUVcAIlF7ACJRnwAiUccAIlHXACJR/wAiUicAIlJPACJSdwAiUocAIlKfACJSywAiUvMAIlMbACJTQwAiU2sAIlOTACJTuwAiU9cAIlPjACJT8wAiVAsAIlQjACJUOwAiVFMAIlRnACJUjwAiVLcAIlTfACJVBwAiVS8AIlVXACJVfwAiVacAIlXPACJV9wAiVh8AIlZHACJWbwAiVpcAIla/ACJW5wAiVw8AIlc3ACJXXwAiV4cAIlevACJX1wAiV/8AIlgnACJYTwAiWHcAIlifACJYxwAiWO8AIlkXACJZPwAiWWcAIlmPACJZtwAiWd8AIloHACJaLwAiWlcAIlp/ACJapwAiWs8AIlr3ACJbHwAiW0cAIltvACJblwAiW78AIlvnACJb+wAiXBMAIlw7ACJcWwAiXHcAIlyrACJdCwAiXUsAIl2DACJdswAiXfMAIl5zACJekwAiXscAIl7zACJfGwAiX08AIl9vACJflwAiX7sAIl/7ACJgPwAiYGMAImCbACJg1wAiYPcAImHrACJiGwAiYjsAImJXACJibwAiYpsAImLLACJi3wAiYvcAImMXACJjUwAiY28AImPbACJkJwAiZFMAImR7ACJkowAiZMMAImTPACJlCwAiZUMAImV7ACJlqwAiZf8AImZLACJmcwAiZq8AImbPACJm+wAiZxMAImdHACJniwAiZ9cAImf/ACJoFwAiaKMAImjfACJpBwAiaR8AImlHACJpZwAiaY8AImozACJqfwAiapsAImrHACJq6wAiaysAImtrACJrkwAia78AImwbACJsUwAibJ8AImz7ACJtMwAibVcAIm2jACJt/wAibi8AIm5XACJufwAibt8AIm8vACJvjwAib68AIm/vACJwJwAicFcAInCLACJwrwAicOMAInEvACJxSwAicZMAInG7ACJx+wAicisAInJnACJypwAicssAInMTACJzOwAic2sAInOXACJzywAic/MAInQ7ACJ0awAidJcAInTHACJ08wAidSMAInVPACJ1gwAidbcAInXrACJ2JwAidlsAInabACJ3EwAidzsAIndzACJ3mwAid+8AIngjACJ4cwAieJ8AInjXACJ46wAieSsAInmrACJ58wAieh8AInpfACJ6uwAieucAIns/ACJ7fwAie78AInwfACJ8RwAifGsAInzPACJ9HwAifUMAIn17ACJ9uwAife8AIn4nACJ+XwAifqcAIn8HACJ/VwAif5MAIn/DACJ/8wAigDsAIoBzACKAmwAigNcAIoD/ACKBIwAigU8AIoGjACKB+wAigk8AIoKvACKC4wAigxMAIoNXACKDnwAihAcAIoQvACKEawAihKsAIoUHACKFdwAihesAIoY7ACKGmwAihuMAIodLACKHewAih6cAIofbACKIAwAiiBsAIog7ACKIZwAiiJ8AIoi/ACKI/wAiiSsAIolzACKJxwAiiecAIooHACKKJwAiik8AIoprACKKrwAiis8AIotXACKLlwAii8MAIov7ACKMQwAijHcAIoyXACKM1wAijQMAIo1bACKNlwAijcsAIo4zACKOXwAijnMAIo6XACKOrwAijuMAIo7/ACKPNwAij1sAIo+vACKP9wAikBcAIpA7ACKQowAikNsAIpEPACKRTwAikZcAIpHbACKSFwAikkMAIpJfACKTSwAik4MAIpO/ACKT3wAilBsAIpRXACKUhwAilMsAIpT7ACKVFwAilVMAIpV/ACKVpwAildsAIpYPACKWPwAilnMAIparACKXTwAimAcAIpgrACKYXwAimIcAIpivACKY0wAimQ8AIpkzACKZUwAimZMAIpqDACKaswAimusAIptjACKb3wAinAsAIpx7ACKcpwAinOcAIp0PACKdSwAinYcAIp3bACKeOwAinrMAIp7fACKfDwAinzsAIp9fACKfgwAin88AIp/rACKf+wAioBcAIqA/ACKgawAioIsAIqC/ACKg9wAioT8AIqFbACKhcwAioY8AIqG3ACKh6wAioksAIqJvACKijwAioqsAIqLPACKi8wAiozMAIqOPACKjtwAipBcAIqRTACKkiwAipMcAIqTrACKlHwAipV8AIqWHACKlqwAipesAIqYnACKmcwAiprcAIqbrACKm/wAipy8AIqdfACKnjwAip8sAIqfrACKoCwAiqDMAIqh/ACKovwAiqOsAIqkbACKpWwAiqYMAIqnLACKp6wAiqisAIqp/ACKqswAiqt8AIqsLACKrUwAiq3cAIqubACKrvwAiq/cAIqw/ACKsewAirKMAIqzPACKs8wAirR8AIq1LACKtnwAirfsAIq47ACKuhwAirtsAIq7zACKvIwAir18AIq+DACKvswAir/cAIrA7ACKwfwAisMMAIrEDACKxTwAisY8AIrG/ACKyEwAisjMAIrJ/ACKyvwAisw8AIrNLACKzZwAis88AIrQHACK0PwAitIsAIrS3ACK0ywAitRsAIrVnACK1iwAitdMAIrZDACK2TwAitosAIrazACK23wAitw8AIrcvACK3bwAit4MAIrenACK37wAiuC8AIrhLACK4awAiuK8AIrjPACK4+wAiuR8AIrkvACK5ZwAiuasAIrnPACK55wAiufsAIronACK6RwAiumcAIrqTACK6wwAiuu8AIrsrACK7dwAiu7MAIrv7ACK8IwAivEsAIrx7ACK8owAivL8AIrz3ACK9HwAivWMAIr2HACK9twAivdcAIr3jACK96wAivfMAIr37ACK+AwAivgsAIr4TACK+ZwAivtMAIr8TACK/NwAiv3MAIr+vACLAGwAiwIMAIsDXACLBGwAiwV8AIsGbACLB+wAiwhsAIsJHACLCgwAiwrsAIsLzACLDDwAiw18AIsOXACLEDwAixKcAIsU3ACLFawAixa8AIsXnACLGWwAixtMAIscrACLHfwAix8sAIsgnACLISwAiyJMAIsjPACLJCwAiyUsAIsnHACLJ7wAiyicAIsqXACLK7wAiyzsAIsuTACLL2wAizCMAIsxrACLMhwAizKMAIszXACLM9wAizU8AIs4PACLO/wAizyMAIs9HACLPfwAiz7cAIs/jACLQMwAi0G8AItCLACLQuwAi0PcAItEXACLRTwAi0WsAItGXACLRuwAi0fsAItIbACLSQwAi0ncAItKjACLSxwAi0xcAItMzACLTiwAi068AItPPACLUFwAi1EsAItRnACLUlwAi1MsAItT7ACLVVwAi1Y8AItXXACLWFwAi1lMAItaXACLW2wAi1xsAItd3ACLXnwAi18cAItfjACLYBwAi2CMAIthTACLYmwAi2NsAItkbACLZOwAi2YcAItnPACLaGwAi2m8AItrjACLb4wAi3AsAItxvACLcswAi3NcAIt0PACLdPwAi3YMAIt2vACLd3wAi3gsAIt5/ACLerwAi3sMAIt7rACLfEwAi3zsAIt9nACLfmwAi37cAIt//ACLgKwAi4IsAIuC7ACLgzwAi4Q8AIuE7ACLhewAi4Z8AIuHbACLh/wAi4jMAIuJPACLikwAi4xsAIuNbACLjcwAi45cAIuPLACLkKwAi5IMAIuSvACLk7wAi5TMAIuW/ACLl9wAi5lsAIuaDACLm2wAi51MAIuezACLnxwAi6BMAIuhfACLokwAi6KMAIujTACLpSwAi6ZsAIunDACLp7wAi6h8AIupTACLqYwAi6qsAIurPACLq8wAi6xcAIus7ACLrawAi668AIuv3ACLsWwAi7HMAIuyLACLsvwAi7QMAIu07ACLtiwAi7asAIu3vACLuRwAi7qMAIu7bACLvIwAi7zsAIu9PACLvYwAi748AIu/HACLv7wAi8CcAIvBvACLwkwAi8LMAIvDnACLxJwAi8VsAIvGPACLx4wAi8icAIvJLACLyYwAi8p8AIvLPACLy6wAi82sAIvOLACLz9wAi9IsAIvTvACL1ewAi9eMAIvZvACL23wAi9z8AIveLACL3zwAi+DcAIvizACL45wAi+TsAIvpHACL67wAi+ycAIvtzACL7ywAi++sAIvxjACL8jwAi/NsAIv0bACL9XwAi/Z8AIv3PACL98wAi/i8AIv6nACL+/wAi/zsAIv+bACL/1wAjADcAIwBXACMAiwAjAKsAIwDfACMBFwAjAWsAIwHTACMCPwAjAocAIwLfACMDGwAjA1sAIwO7ACMD4wAjBBMAIwQ3ACME0wAjBU8AIwVvACMFnwAjBdMAIwaDACMGpwAjBuMAIwcjACMHVwAjB4sAIwe/ACMH8wAjCEMAIwiTACMI0wAjCPcAIwkbACMJQwAjCWMAIwmfACMJuwAjCdsAIwoPACMKLwAjCncAIwqTACMKtwAjCssAIwr7ACMLOwAjC2cAIwuTACMLrwAjC9cAIwv/ACMMJwAjDF8AIwyDACMMowAjDOMAIw0XACMNVwAjDaMAIw33ACMONwAjDk8AIw5nACMOswAjDwcAIw8nACMPSwAjD2cAIw+XACMPzwAjEBMAIxA7ACMQcwAjELMAIxDrACMRDwAjEUMAIxGDACMRuwAjEd8AIxIDACMSMwAjElMAIxJ/ACMSzwAjEzsAIxOTACMT6wAjFCMAIxSHACMU6wAjFScAIxV7ACMVzwAjFjMAIxaXACMXBwAjF3cAIxebACMX5wAjGDMAIxhjACMYlwAjGOcAIxkLACMZLwAjGV8AIxl/ACMZnwAjGccAIxnzACMaEwAjGjsAIxpjACMaiwAjGr8AIxrjACMbIwAjGz8AIxtrACMb0wAjHEcAIxz3ACMdMwAjHVsAIx5bACMedwAjHosAIx6nACMe5wAjHwMAIx8fACMfSwAjH6cAIx/PACMf/wAjIDsAIyBDACMgSwAjIXMAIyMHACMjXwAjI6sAIySDACMlqwAjJvsAIyjDACMpNwAjKgcAIysnACMsbwAjLNsAIy0bACMtKwAjLT8AIy1/ACMuOwAjL2MAIzCvACMwtwAjMOsAIzE/ACMxcwAjMrsAIzMvACMzmwAjM88AIzP7ACM0FwAjNGsAIzSfACM01wAjNOsAIzU7ACM1dwAjNesAIzYLACM2QwAjNlcAIzaXACM2vwAjNtcAIzcLACM3NwAjN1MAIzeXACM4PwAjOIsAIzi/ACM4+wAjORMAIzk/ACM5bwAjOdcAIzoHACM6MwAjOj8AIzqnACM6+wAjOycAIztbACM7gwAjO7MAIzw7ACM8WwAjPKcAIz0fACM9cwAjPccAIz4bACM+NwAjPv8AIz8rACM/XwAjP4MAIz/bACNADwAjQDMAI0CPACNA2wAjQPcAI0EXACNBewAjQeMAI0InACNCSwAjQm8AI0KXACNCxwAjQy8AI0NXACNDhwAjQ6sAI0PzACNEVwAjRIsAI0S3ACNE3wAjRScAI0VLACNFawAjRcsAI0X3ACNGFwAjRo8AI0bHACNHCwAjRzMAI0dfACNHdwAjR6MAI0fDACNH2wAjR/8AI0gjACNITwAjSGMAI0h7ACNInwAjSSMAI0lTACNJbwAjSZcAI0nbACNJ+wAjShcAI0pLACNKfwAjSscAI0rbACNK/wAjSy8AI0uLACNLpwAjS8cAI0vrACNMKwAjTH8AI0yjACNM/wAjTVMAI02vACNNywAjTiMAI067ACNPdwAjT6cAI1AHACNQPwAjUHcAI1C3ACNREwAjUVcAI1GPACNRuwAjUdsAI1H3ACNSMwAjUm8AI1KfACNS0wAjUu8AI1MjACNTUwAjU3sAI1OnACNT9wAjVFMAI1R7ACNUswAjVOcAI1UnACNVSwAjVXcAI1W/ACNWFwAjVjcAI1Z3ACNWlwAjVtMAI1bzACNXJwAjV1cAI1eHACNXrwAjV9cAI1gDACNYNwAjWFsAI1iDACNYswAjWNMAI1kbACNZTwAjWX8AI1nPACNZ6wAjWh8AI1pLACNaiwAjWssAI1sDACNbIwAjW08AI1uXACNbuwAjW+sAI1wfACNcSwAjXI8AI1zPACNc+wAjXScAI11LACNdbwAjXZcAI13LACNd7wAjXjMAI153ACNeuwAjXwMAI19DACNfiwAjX9MAI2AbACNgVwAjYHsAI2CHACNgowAjYN8AI2EDACNhFwAjYUcAI2FfACNhdwAjYY8AI2GvACNhzwAjYecAI2H/ACNiFwAjYi8AI2JHACNiXwAjYncAI2KPACNipwAjYr8AI2LnACNjHwAjY1sAI2OXACNjxwAjY+cAI2QHACNkKwAjZEcAI2R7ACNkjwAjZLcAI2TjACNlDwAjZTMAI2VbACNlbwAjZbMAI2X3ACNmKwAjZmMAI2aDACNmowAjZscAI2bjACNnHwAjZ08AI2d/ACNnowAjZ9MAI2f/ACNoHwAjaGMAI2ivACNoywAjaQcAI2kzACNpbwAjaa8AI2nTACNqAwAjaksAI2qTACNq3wAjaysAI2t3ACNruwAjbAMAI2w3ACNsewAjbKcAI2znACNs/wAjbS8AI21bACNtfwAjbacAI23LACNt9wAjbj8AI25TACNucwAjbt8AI28LACNvNwAjb2sAI2+LACNv4wAjcEsAI3CLACNwwwAjcOMAI3FPACNxpwAjcc8AI3HzACNyOwAjclcAI3KXACNyswAjcvsAI3MzACNzQwAjc1cAI3NvACNziwAjc6sAI3PPACNz9wAjdCMAI3RTACN0hwAjdL8AI3T7ACN1OwAjdX8AI3XHACN2EwAjdmMAI3a3ACN3DwAjd2sAI3d/ACN3kwAjd+MAI3g/ACN4gwAjeNsAI3j3ACN5KwAjeW8AI3mvACN53wAjegMAI3o3ACN6YwAjeocAI3q3ACN67wAjexsAI3tPACN7iwAje8MAI3wHACN8UwAjfIMAI3y7ACN88wAjfUMAI32LACN9qwAjfecAI34DACN+HwAjfksAI37TACN+6wAjfzsAI39rACN/hwAjf+sAI4ALACOATwAjgNcAI4EnACOBWwAjgZcAI4HnACOCCwAjgjMAI4JnACOClwAjgrcAI4MLACODNwAjg2cAI4PXACOEBwAjhGsAI4U3ACOFiwAjhesAI4YnACOGVwAjhn8AI4b3ACOHGwAjh3cAI4f3ACOIIwAjiD8AI4hfACOImwAjiMsAI4knACOJVwAjiYcAI4nTACOJ9wAjinMAI4qnACOK0wAji9MAI4vfACOMhwAjjVcAI42LACONqwAjjeMAI44fACOOZwAjj2cAI4+TACOPuwAjj+cAI5ALACOQOwAjkGMAI5CPACOQvwAjkOcAI5EvACORWwAjkYcAI5G7ACOSIwAjkjMAI5JvACOS2wAjkwcAI5NPACOTqwAjlAMAI5Q3ACOUbwAjlI8AI5SvACOUtwAjlPcAI5UrACOVRwAjlWMAI5W3ACOWAwAjlj8AI5ZzACOWrwAjlxMAI5ezACOX3wAjl/8AI5gXACOYkwAjmNcAI5kTACOZQwAjmX8AI5nDACOZ2wAjmjMAI5qXACOa3wAjmv8AI5tHACObdwAjm88AI5wPACOcUwAjnKMAI5zTACOc9wAjnQsAI51LACOdlwAjnccAI54rACOeUwAjnoMAI56XACOepwAjnscAI57zACOfDwAjn0cAI59fACOfcwAjn5cAI6BrACOgpwAjoOMAI6EfACOhRwAjoW8AI6GXACOhrwAjobcAI6HPACOh4wAjog8AI6IvACOiZwAjop8AI6LfACOjAwAjowsAI6MjACOjNwAjo1MAI6NrACOjfwAjo68AI6PXACOj+wAjpDMAI6RbACOkgwAjpKsAI6TXACOk+wAjpScAI6U/ACOlZwAjpXsAI6WTACOlpwAjpbsAI6X3ACOmXwAjpqMAI6bXACOm/wAjp78AI6iTACOozwAjqUcAI6lrACOpmwAjqccAI6nzACOqGwAjqlcAI6qfACOq6wAjqwcAI6szACOrWwAjq4cAI6unACOrxwAjrAcAI6wjACOskwAjrMMAI60TACOtPwAjrX8AI62jACOtrwAjrcsAI64DACOuIwAjrjsAI65fACOudwAjro8AI66nACOuvwAjrtcAI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GLPACRjQwAkY5cAJGPjACRkBwAkZCcAJGSzACRlXwAkZZ8AJGW/ACRl5wAkZjMAJGZ3ACRm1wAkZu8AJGcHACRnewAkZ6cAJGfzACRoYwAkaJMAJGj3ACRpfwAkabsAJGnrACRqEwAkajcAJGpzACRquwAkavsAJGszACRrbwAka6sAJGwDACRsNwAkbIsAJGz3ACRtNwAkbVcAJG2fACRt6wAkbhcAJG5/ACRutwAkbusAJG8HACRvawAkb+cAJHAfACRwVwAkcNcAJHETACRxLwAkcWMAJHGfACRx0wAkch8AJHKDACRy6wAkc1MAJHPHACRz8wAkdFcAJHTbACR1AwAkdRcAJHU3ACR1ZwAkdY8AJHWjACR1xwAkdd8AJHYHACR2MwAkdm8AJHavACR2xwAkdusAJHcXACR3TwAkd2MAJHefACR31wAkd/cAJHgXACR4RwAkeGsAJHi7ACR5AwAkeS8AJHljACR5iwAkeZ8AJHm7ACR56wAkehMAJHozACR6VwAkep8AJHrnACR7MwAke2cAJHuzACR8CwAkfDcAJHxfACR8ewAkfKcAJHzrACR9JwAkfVsAJH2nACR9+wAkfk8AJH6rACR+5wAkfwcAJH8fACR/OwAkf08AJH9jACR/hwAkf6sAJH/TACR/+wAkgCsAJIBnACSAowAkgO8AJIEzACSBYwAkgYcAJIG3ACSB5wAkgksAJIMfACSDVwAkg6sAJIPrACSEAwAkhDsAJIRTACSEdwAkhLcAJITXACSFEwAkhUcAJIWXACSF3wAkhisAJIbHACSHfwAkh8cAJIgbACSIiwAkiJcAJIl/ACSJjwAkidsAJIovACSKcwAkitcAJIrrACSLHwAkiz8AJIunACSMHwAkjL8AJIzvACSNJwAkjacAJI4nACSOTwAkjo8AJI6nACSO6wAkjxsAJI9rACSPowAkj8MAJJADACSQTwAkkHsAJJC7ACSQ+wAkkScAJJFDACSRawAkkZcAJJHHACSSGwAkki8AJJJPACSSZwAkko8AJJLzACSTVwAkk8cAJJRDACSUzwAklRMAJJWDACSVtwAkld8AJJYHACSWMwAkllcAJJarACSW0wAklv8AJJc3ACSXUwAkl3sAJJejACSXwwAkl+sAJJgTACSYPwAkmFMAJJh7ACSYowAkmOMAJJlTACSZZwAkmY8AJ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V2vACVeZwAlX2sAJV+rACVgLwAlYOMAJWHjACViHwAlYp8AJWNXACVkWwAlZJsAJWUfACVl0wAlZtMAJWcPACVnjwAlaEcAJWlLACVpiwAlag8AJWrXACVr9wAlbDsAJWzDACVtiwAlbqsAJW7vACVvdwAlcFMAJXCfACVxLwAlcfsAJXI/ACVyxwAlc6MAJXPvACV0fwAldLMAJXUrACV1RwAldWMAJXWDACV1owAldcMAJXXjACV2AwAldiMAJXZDACV2YwAldocAJXarACV20wAldvsAJXcrACV3WwAld48AJXfLACV34wAleBcAJXgjACV4OwAleFsAJXhvACV4kwAleLMAJXjvACV5SwAleasAJXnrACV6ZwAleosAJXrrACV7TwAle68AJXwTACV8NwAlfJcAJXy/ACV9IwAlfU8AJX23ACV94wAlfksAJX5/ACV+7wAlfxsAJX+DACV/twAlgCcAJYBLACWAWwAlgGsAJYB7ACWAiwAlgJsAJYCrACWAuwAlgMsAJYDbACWA6wAlgPsAJYELACWBGwAlgSsAJYE7ACWBSwAlgVsAJYFrACWBewAlgYsAJYGbACWBqwAlgbsAJYHLACWB2wAlgesAJYH7ACWCCwAlghsAJYIrACWCOwAlgksAJYJbACWCawAlgnsAJYKLACWCmwAlgqsAJYK7ACWCywAlgtsAJYLrACWC+wAlgwsAJYMbACWDKwAlgzsAJYNLACWDWwAlg2sAJYN7ACWDiwAlg5sAJYOrACWDuwAlg8sAJYPbACWD6wAlg/sAJYQLACWEGwAlhCsAJYQ7ACWESwAlhFsAJYRrACWEewAlhIsAJYSbACWEqwAlhLsAJYTLACWE2wAlhOsAJYT7ACWFCwAlhRsAJYUrACWFOwAlhUsAJYVbACWFawAlhXsAJYWLACWFmwAlhasAJYW7ACWFywAlhdsAJYXrACWF+wAlhgsAJYYbACWGKwAlhjsAJYZLACWGWwAlhmsAJYZ7ACWGiwAlhpsAJYarACWGuwAlhssAJYbbACWG6wAlhvsAJYcLACWHGwAlhysAJYc7ACWHSwAlh1sAJYdrACWHewAlh4sAJYebACWHqwAlh7sAJYfLACWH2wAlh+sAJYf7ACWICwAliBsAJYgrACWIOwAliEsAJYhbACWIawAliHsAJYiLACWImwAliKsAJYi7ACWIywAliNsAJYjrACWI+wAliQsAJYkbACWJKwAliTsAJYlLACWJWwAliWsAJYl7ACWJiwAliZsAJYmrACWJuwAlicsAJYnbACWJ6wAlifsAJYoLACWKGwAliisAJYo7ACWKSwAlilsAJYprACWKewAliosAJYqbACWKqwAlirsAJYrLACWK2wAliusAJYr7ACWLCwAlixsAJYsrACWLOwAli0sAJYtbACWLawAli3sAJYuLACWLmwAli6sAJYu7ACWLywAli9sAJYvrACWL+wAljAsAJYwbACWMKwAljDsAJYxLACWMWwAljGsAJYx7ACWMiwAljJsAJYyrACWMuwAljMsAJYzbACWM6wAljPsAJY0LACWNGwAljSsAJY07ACWNSwAljVsAJY1rACWNewAljYsAJY2bACWNqwAljbsAJY3LACWN2wAljesAJY37ACWOCwAljhsAJY4rACWOOwAljksAJY5bACWOawAljnsAJY6LACWOmwAljqsAJY67ACWOywAljtsAJY7rACWO+wAljwsAJY8bACWPKwAljzsAJY9LACWPWwAlj2sAJY97ACWPiwAlj5sAJY+rACWPuwAlj8sAJY/bACWP6wAlj/sAJZALACWQGwAlkCsAJZA7ACWQSwAlkJ8AJZCzACWQ7wAlkP8AJZE3ACWRcwAlkdcAJZILACWSZwAlkoMAJZLDACWTBwAlk0sAJZOvACWT0wAllCcAJZRjACWUmwAllM8AJZUrACWVkwAllfMAJZavACWXBwAllw8AJZdDACWYWwAlmL8AJZnTACWaMwAlm2cAJZvnACWdAwAlnWsAJZ6DACWe5wAloAMAJaBrACWhgwAloecAJaMDACWjawAlpIMAJaTnACWmBwAlpnMAJaebACWoDwAlqTcAJamrACWqywAlqzcAJaxXACWswwAlrOMAJa0DACWtIwAlrUMAJa1vACWtmwAlrcMAJa3rACWuFwAlri8AJa5LACWuawAlrqcAJa7HACWu6wAlrwsAJa8vACWvWwAlr68AJa/TACWv8wAlsFMAJbCfACWwzwAlsPsAJbEnACWxVwAlsZcAJbGvACWx3wAlsg8AJbJDACWyewAlsqMAJbLXACWy3wAlsx8AJbNbACWzhwAls48AJbO3ACWz/wAltCMAJbQ3ACW0ewAltKcAJbTbACW1CwAltUMAJbVvACW1rwAltfsAJbY/ACW2jwAltsMAJbb/ACW3RwAlt4cAJbevACW36wAluDMAJbhzACW4qwAluQMAJblLACW5kwAluacAJbm/ACW58wAluiMAJbpvACW60wAluxsAJbsvACW7VwAlvB8AJbw/ACW8dwAlvT8AJb2PACW9zwAlvlMAJb8XACW/OwAlv38AJb+fACW/1wAlwBcAJcB/ACXA/wAlwScAJcF3ACXB5wAlwjcAJcLTACXDMwAlw38AJcPvACXD+wAlxDcAJcR3ACXE2wAlxSMAJcVXACXFbwAlxYsAJcXTACXF+wAlxk8AJca7ACXGxwAlxxMAJcc3ACXHlwAlx88AJcgfACXIRwAlyKsAJci7ACXJIwAlyYsAJcoDACXKLwAlynMAJcqvACXKywAlyvMAJctfACXL2wAlzBMAJcwfACXMZwAlzJMAJcyzACXMvwAlzNMAJc0jACXNawAlzYcAJc3LACXN/wAlzgcAJc5HACXOawAlzncAJc6bACXOywAlzucAJc83ACXPTwAlz7MAJc/bACXQJwAl0EsAJdCHACXQxwAl0NMAJdD7ACXRIwAl0WMAJdGfACXRtwAl0c8AJdHjACXSDwAl0kcAJdJ3ACXSowAl0t8AJdLzACXTLwAl03cAJdQPACXUMwAl1OcAJdT7ACXVGwAl1VcAJdVzACXVlwAl1bsAJdXLACXV7wAl1g8AJdY7ACXW3wAl1vcAJdebACXXvwAl2I8AJdkjACXZhwAl2cMAJdnnACXaDwAl2jMAJdpbACXamwAl2ycAJdvXACXb/wAl3CcAJdxPACXcfwAl3MsAJdzjACXdEwAl3X8AJd2zACXd6wAl3hcAJd4vACXeQwAl3lMAJd5rACXeewAl3tsAJd8zACXfcwAl37MAJd/zACXgNwAl4IMAJeDjACXhSwAl4asAJeIDACXiYwAl4qcAJeLvACXjPwAl42MAJeOjACXj9wAl4/8AJeRTACXkkwAl5NsAJeT7ACXlawAl5bcAJeXbACXmLwAl5lMAJeZ/ACXmrwAl5r8AJeb/ACXnJwAl5+8AJegPACXozwAl6RcAJekrACXpWwAl6YsAJem3ACXqLwAl6pMAJeqzACXrCwAl60sAJetjACXrqwAl69sAJewjACXscwAl7NMAJe0zACXtfwAl7eMAJe43ACXujwAl7sMAJe8XACXvOwAl75sAJe/HACXwCwAl8HMAJfDTACXxEwAl8XMAJfG3ACXxzwAl8gMAJfIbACXyPwAl8ucAJfOrACXz/wAl9B8AJfSTACX0nwAl9LsAJfTvACX1GwAl9UcAJfWzACX1vwAl9kcAJfa/ACX3AwAl93sAJffbACX4MwAl+PsAJfl7ACX5twAl+g8AJfqHACX7CwAl+3sAJfu3ACX79wAl/AMAJfwPACX8WwAl/IcAJfyjACX8twAl/RMAJf1LACX9twAl/eMAJf4rACX+nwAl/tsAJf8XACX/jwAl/+MAJgALACYATwAmAJMAJgDvACYBLwAmAXMAJgGPACYBtwAmAd8AJgH/ACYCHwAmAoMAJgLjACYDEwAmAzcAJgNPACYDpwAmA8MAJgPnACYENwAmBHMAJgSbACYExwAmBO8AJgUnACYFdwAmBcsAJgX7ACYGRwAmBosAJgbXACYHHwAmB1sAJgevACYH8wAmCDcAJgiTACYI0wAmCRcAJgmzACYKFwAmCncAJgrDACYLDwAmC2cAJguTACYLuwAmC+8AJgwTACYMNwAmDHMAJgyTACYMtwAmDPsAJg07ACYNXwAmDZ8AJg27ACYN+wAmDgMAJg4/ACYOYwAmDpsAJg7TACYPCwAmDzMAJg9PACYPbwAmD6MAJg/HACYP2wAmD/sAJhBTACYQowAmEL8AJhDLACYQ+wAmEUcAJhF/ACYR1wAmEe8AJhInACYSYwAmErcAJhMHACYTwwAmE/MAJhSDACYUlwAmFMMAJhWXACYWHwAmFlMAJhcDACYXbwAmF6MAJhfXACYYCwAmGDMAJhhzACYZKwAmGdsAJhofACYaVwAmGmsAJhp/ACYalwAmGssAJhsPACYbPwAmG4MAJhunACYb1wAmHAcAJhxDACYcjwAmHMMAJhzjACYdIwAmHXcAJh2rACYdxwAmHdsAJh4TACYecwAmHu8AJh+DACYfjwAmH+sAJh/3ACYgGwAmICcAJiBLACYgVwAmIH8AJiCPACYgwwAmIOMAJiEHACYhHwAmITcAJiFjACYhjwAmIaMAJiG7ACYh3wAmIgcAJiI3ACYiZwAmIp8AJiLbACYjGwAmI1cAJiN7ACYjtwAmI+8AJiQLACYkKwAmJEMAJiRzACYkswAmJP8AJiUfACYljwAmJbMAJiXTACYl+wAmJh8AJiZ7ACYm4wAmJ08AJifDACYoGwAmKHcAJiivACYo0wAmKPcAJikrACYpZwAmKYcAJimzACYpuwAmKesAJipnACYqhwAmKqsAJirfACYrCwAmKzcAJitzACYrmwAmK7sAJivnACYsLwAmLF8AJiyHACYstwAmLP8AJi1rACYtmwAmLdsAJi5XACYufwAmLt8AJi8XACYvSwAmL3cAJi+7ACYv1wAmMAMAJjBfACYwpwAmMMsAJjD/ACYxJwAmMUcAJjFzACYxjwAmMb8AJjHfACYyKwAmMosAJjLTACYzFwAmMzsAJjNjACYzjwAmNCsAJjSDACY0ywAmNN8AJjUDACY1OwAmNVsAJjWrACY2CwAmNjsAJjarACY23wAmNysAJjdTACY3gwAmN7cAJjgTACY4nwAmOSMAJjlPACY5cwAmOYMAJjmvACY59wAmOi8AJjpvACY6uwAmOucAJjsjACY7XwAmO5cAJjvXACY8JwAmPIcAJjzXACY9LwAmPX8AJj2zACY9/wAmPk8AJj6vACY/EwAmP18AJj/LACZAJwAmQIcAJkDjACZBJwAmQV8AJkGrACZCDwAmQmMAJkLLACZDMwAmQ38AJkPnACZEQwAmRLMAJkV/ACZF/wAmRicAJkZDACZGdwAmRs8AJkdbACZHvwAmSIcAJkkTACZJTwAmSY8AJkoXACZKVwAmSrsAJktHACZLnwAmTB8AJkyPACZNJwAmTV8AJk2XACZNzwAmTisAJk5jACZOjwAmTusAJk8XACZPSwAmT6MAJk/LACZP+wAmUC8AJlBLACZQWwAmUJsAJlC3ACZQ1wAmURsAJlE3ACZRdwAmUcsAJlJHACZSgwAmUtsAJlMXACZTbwAmU6cAJlQDACZUPwAmVJ8AJlTbACZU/wAmVScAJlU/ACZVbwAmVbsAJlX7ACZWQwAmVscAJlbPACZXHwAmV4sAJlfnACZYPwAmWHcAJli/ACZY+wAmWVsAJlnfACZaFwAmWn8AJlrDACZbCwAmW28AJluvACZbywAmXCsAJlx7ACZcywAmXR8AJl2/ACZeGwAmXsMAJl8jACZf7wAmYIsAJmEjACZhWwAmYbsAJmIbACZiewAmYtsAJmL3ACZjPwAmY2sAJmO/ACZj9wAmZEMAJmSTACZk1wAmZPsAJmUzACZljwAmZeMAJmYTACZmTwAmZnMAJma/ACZm9wAmZysAJmdzACZnowAmaAcAJmhPACZoowAmaO8AJmkbACZpQwAmaZ8AJmnfACZqTwAmansAJmsbACZrQwAma+MAJmxDACZsfwAmbLsAJmzjACZtFwAmbTsAJm1bACZtjwAmbccAJm3rACZuIwAmblcAJm6DACZuwwAmbvcAJm8jACZvSwAmb1sAJm9/ACZvrwAmb8cAJnArACZwQwAmcG8AJnCfACZwzwAmcP8AJnE7ACZxlwAmchMAJnIzACZyXwAmcpcAJnK7ACZy+wAmc0MAJnNrACZzywAmdBMAJnQjACZ0QwAmdKMAJnTfACZ0/wAmdRcAJnU/ACZ1ZwAmdYcAJnW3ACZ14wAmdh8AJnZ/ACZ2twAmdvcAJnc3ACZ3YwAmd7MAJnffACZ4LwAmeGsAJniTACZ41wAmeRsAJnk3ACZ5awAmeb8AJnoDACZ6YwAmeq8AJnsXACZ7YwAme4sAJnu/ACZ8IwAmfFMAJnyHACZ85wAmfPsAJn0PACZ9JwAmfUMAJn1fACZ9jwAmfacAJn3HACZ96wAmfksAJn5zACZ+0wAmfzsAJn+TACZ/9wAmgEsAJoCjACaBKwAmgZMAJoI/ACaCvwAmgwcAJoM7ACaDhwAmg9MAJoQPACaEQwAmhIMAJoSfACaE5wAmhQ8AJoVHACaFTwAmhXsAJoWPACaFqwAmhcsAJoX7ACaGLwAmhl8AJoaPACaGxwAmhv8AJocPACaHNwAmh1MAJodvACaHmwAmh9MAJogLACaIHwAmiEMAJoh3ACaIowAmiNMAJojvACaJkwAmiZ8AJonfACaKLwAmin8AJoq7ACaK9wAmizMAJotvACaLnwAmi88AJovrACaMBwAmjBsAJow7ACaMYwAmjIsAJoy3ACaM4wAmjUcAJo1jACaNfwAmjcMAJo4HACaOHwAmjnMAJo63ACaO/wAmj2cAJpBHACaQcwAmkJsAJpDLACaRCwAmkUsAJpF7ACaRrwAmkdMAJpH7ACaSIwAmkk8AJpKHACaSrwAmktMAJpL7ACaTKwAmk3cAJpPHACaUDwAmlFsAJpSLACaUtwAmlPMAJpUbACaVWwAmlacAJpXHACaV9wAmlhsAJpY/ACaWdwAmlscAJpb7ACaXLwAml3cAJpfXACaYFwAmmGsAJpi/ACaZDwAmmT8AJplvACaZvwAmmhsAJppTACaaqwAmms8AJpr/ACabSwAmm38AJpu3ACab6wAmnA8AJpwzACacVwAmnIcAJpyrACac4wAmnR8AJp1bACadmwAmndMAJp4DACaeIwAmnjsAJp5rACaerwAmntsAJp8vACafYwAmn3MAJp/bACagEwAmoE8AJqCPACag8wAmoSMAJqFXACahfwAmoasAJqH3ACaiUwAmon8AJqKrACai7wAmoxsAJqNTACajgwAmpBMAJqQzACakTwAmpH8AJqTvACalHwAmpTsAJqVTACalawAmpcMAJqY7ACamjwAmptMAJqcDACanMwAmp1cAJqdjACanwwAmqEMAJqhvACaohwAmqK8AJqjvACapAwAmqRcAJqlTACapewAmqacAJqnLACap5wAmqgMAJqo7ACaqcwAmqq8AJqs/ACardwAmq6MAJqvTACar8wAmrCMAJqxPACasfwAmrK8AJqzLACatIwAmrVcAJq2jACat2wAmrhcAJq47ACauXwAmrscAJq7/ACavRwAmr2sAJq+PACavvwAmr/MAJrATACawewAmsN8AJrEbACaxRwAmsXsAJrGfACax2wAmsf8AJrI7ACayawAmspsAJrLjACazEwAms1sAJrObACa0VwAmtQMAJrU3ACa1awAmtaMAJrXvACa2JwAmtncAJra/ACa2/wAmtysAJrdnACa3pwAmt9sAJrgrACa4iwAmuLMAJrkLACa5NwAmuasAJroPACa6WwAmupMAJrrjACa7JwAmu28AJrurACa76wAmvAsAJrxXACa8lwAmvOMAJr0zACa9hwAmvccAJr3jACa+GwAmvjcAJr53ACa+7wAmv1cAJr+jACa/vwAmv+cAJsAvACbAewAmwM8AJsEXACbBPwAmwW8AJsGXACbBuwAmwcMAJsHrACbCLwAmwksAJsJ/ACbCowAmwvcAJsMzACbDowAmw9cAJsPvACbEMwAmxHsAJsSXACbE2wAmxP8AJsUvACbFOwAmxa8AJsXrACbGEwAmxlsAJsafACbG0wAmxxsAJsdbACbHjwAmx7sAJsf3ACbIVwAmyLcAJsjzACbJswAmyfMAJsq3ACbK+wAmyzMAJstPACbLnwAmy78AJsvjACbMBwAmzCcAJsx3ACbMmwAmzPMAJs0fACbNUwAmzdMAJs4zACbOdwAmzucAJs9fACbQCwAm0I8AJtFHACbRpwAm0ccAJtIvACbSbwAm0qcAJtLnACbTNwAm038AJtPfACbUEwAm1DMAJtR7ACbVAwAm1SMAJtV7ACbV5wAm1pMAJta3ACbXAwAm12MAJtgDACbYKwAm2HsAJtjfACbZgwAm2bcAJtn3ACbaFwAm2lcAJtqbACbbGwAm258AJtvvACbcFwAm3D8AJtxrACbcewAm3JsAJtynACbctwAm3NcAJtzjACbc9wAm3RsAJt03ACbdZwAm3X8AJt2rACbd3wAm3hcAJt4rACbeVwAm3ocAJt7PACbfDwAm32MAJt+PACbfrwAm4EMAJuCjACbhFwAm4XcAJuG3ACbh7wAm4j8AJuJ/ACbiuwAm4ysAJuOvACbj/wAm5DsAJuSHACbkswAm5P8AJuVPACblvwAm5kcAJua7ACbm6wAm5zsAJueLACboBwAm6JMAJuj/ACbpawAm6c8AJupLACbqowAm6wsAJuuDACbr/wAm7GsAJuyHACbs1wAm7PsAJu0jACbtUwAm7YcAJu2jACbtywAm7fcAJu4TACbuPwAm7l8AJu6HACburwAm7usAJu8PACbvRwAm75sAJu/DACbv9wAm8DMAJvCXACbwywAm8QcAJvFrACbxrwAm8fsAJvJvACbyjwAm8rMAJvMDACbzIwAm80cAJvOXACbzxwAm8/sAJvRbACb0hwAm9LsAJvUXACb1QwAm9XcAJvXTACb2DwAm9lMAJva/ACb2/wAm90MAJvezACb3/wAm+FMAJvjPACb4+wAm+SsAJvmHACb5uwAm+fMAJvpXACb6kwAm+tMAJvs/ACb7YwAm+4MAJvuvACb72wAm/A8AJvxDACb8dwAm/M8AJv0nACb9UwAm/ZMAJv3TACb9/wAm/iMAJv5PACb+mwAm/ucAJv8PACb/ZwAm/7cAJwAXACcALwAnAEsAJwBzACcAkwAnAL8AJwDnACcBBwAnASMAJwF7ACcBvwAnAesAJwI7ACcCZwAnArcAJwLjACcDMwAnA08AJwOPACcDzwAnBAMAJwRDACcEXwAnBJ8AJwUDACcFiwAnBisAJwZ3ACcGnwAnB2MAJwgDACcIQwAnCLcAJwjrACcJHwAnCVsAJwobACcLAwAnCysAJwvDACcL3wAnDBsAJwxHACcMewAnDKsAJwy3ACcNFwAnDWsAJw2LACcNvwAnDd8AJw4DACcOIwAnDlMAJw6DACcOwwAnDvcAJw8XACcPQwAnD1MAJw9zACcPlwAnD9sAJw//ACcQXwAnEJsAJxC/ACcQ3wAnERsAJxFXACcRewAnEa8AJxIHACcSjwAnEuMAJxL7ACcTCwAnE0sAJxNfACcTowAnE7sAJxQDACcUJwAnFE8AJxSjACcU3wAnFSMAJxWPACcVrwAnFccAJxYPACcWMwAnFlcAJxarACcW4wAnFx8AJxeHACcXywAnGBMAJxiHACcYrwAnGM8AJxj/ACcZPwAnGXsAJxnHACcZ9wAnGjcAJxpzACcavwAnGt8AJxsLACcbRwAnG3sAJxu7ACcb6wAnHB8AJxxPACcciwAnHLsAJxzfACcc/wAnHRcAJx0/ACcdZwAnHZMAJx2/ACcd+wAnHi8AJx5rACcegwAnHqMAJx7jACcfCwAnHzMAJx97ACcfywAnH+cAJyAPACcgNwAnIIMAJyCXACcgwwAnIOcAJyEPACchIwAnIXsAJyHTACch/wAnIncAJyK/ACci6wAnIxcAJyNTACcjfwAnI7sAJyQDACckLwAnJHMAJySvACclCwAnJTcAJyVTACclfwAnJbsAJyYPACcmIwAnJkcAJybXACcnFwAnJ48AJyfLACcoFwAnKIMAJyi3ACco+wAnKRMAJylrACcpqwAnKfsAJypzACcq9wAnKysAJytvACcr3wAnLB8AJyxvACcs/wAnLSMAJy1LACctgwAnLbsAJy4rACcuSwAnLocAJy6vACcvRwAnL2MAJy+TACcv4wAnMCcAJzCLACcwywAnMPsAJzEjACcxcwAnMcMAJzIjACcyfwAnMqMAJzLLACczDwAnM0sAJzN3ACczswAnM+8AJzQvACc0pwAnNOcAJzUjACc1awAnNacAJzXbACc2CwAnNkMAJzZLACc2dwAnNqsAJzbXACc3cwAnN8MAJzfTACc4EwAnODcAJzhbACc4rwAnOL8AJzj/ACc5IwAnOT8AJzlfACc5jwAnOcMAJzn3ACc6GwAnOjsAJzp/ACc6owAnOscAJzrnACc7KwAnOz8AJzt7ACc7xwAnPBcAJzxnACc8pwAnPM8AJz0PACc9OwAnPUcAJz1TACc9XwAnPWsAJz13ACc9gwAnPY8AJz2rACc9xwAnPesAJz5XACc+rwAnPuMAJz8rACc/UwAnP8cAJz/zACdADwAnQDcAJ0BLACdAXwAnQO8AJ0EfACdBXwAnQZcAJ0IzACdCZwAnQqcAJ0LnACdDLwAnQ18AJ0PHACdEHwAnRGMAJ0SDACdEmwAnRMMAJ0TbACdFAwAnRTsAJ0VjACdFnwAnRdcAJ0YHACdGRwAnRosAJ0bfACdHQwAnR2MAJ0d/ACdHkwAnR9sAJ0hzACdIowAnSNsAJ0kXACdJXwAnSX8AJ0mnACdJ2wAnSkcAJ0q7ACdK9wAnSw8AJ0tXACdLbwAnS4cAJ0vPACdL5wAnTC8AJ0w/ACdMTwAnTI8AJ0zLACdNDwAnTTsAJ01TACdNpwAnTgMAJ05XACdOjwAnTusAJ08zACdPhwAnT+MAJ1AvACdQgwAnUI8AJ1DXACdQ/wAnUU8AJ1InACdS4wAnUzMAJ1NzACdTrwAnU+sAJ1P/ACdUGwAnVDsAJ1RnACdUewAnVKsAJ1UfACdVUwAnVcsAJ1XzACdWXwAnVo8AJ1cDACdXHwAnV0sAJ1e7ACdX6wAnWF8AJ1jTACdZDwAnWRsAJ1lDACdZjwAnWb8AJ1oDACdaJwAnWn8AJ1qvACda0wAnWvsAJ1sbACdbPwAnW4MAJ1unACdbzwAnW/cAJ1w3ACdcZwAnXI8AJ1yzACdc6wAnXTMAJ12DACddpwAnXecAJ14fACdeVwAnXrMAJ17/ACdfQwAnX5cAJ1/jACdgCwAnYBcAJ2A/ACdgSwAnYHcAJ2CfACdgtwAnYN8AJ2EnACdhZwAnYYsAJ2GTACdhvwAnYg8AJ2JHACdidwAnYqcAJ2LXACdjEwAnY0sAJ2OXACdj5wAnZAcAJ2RXACdk8wAnZW8AJ2WfACdl5wAnZi8AJ2ZbACdmfwAnZr8AJ2c3ACdnXwAnZ5MAJ2fDACdn7wAnaBcAJ2g/ACdoZwAnaI8AJ2ivACdozwAnaS8AJ2lTACdpgwAnab8AJ2nvACdqNwAnancAJ2rDACdrAwAna08AJ2tzACdrowAna9cAJ2v3ACdsJwAnbFsAJ2yTACdsywAnbQMAJ207ACdtWwAnbY8AJ22vACdtzwAnbf8AJ25PACdumwAnbtcAJ28TACdvTwAnb5sAJ2/jACdwJwAncGsAJ3CnACdw5wAncSsAJ3FPACdxdwAncaMAJ3HLACdx8wAnchsAJ3IvACdySwAncqMAJ3MbACdzYwAnc6sAJ3QHACd0VwAndLsAJ3T7ACd1IwAndU8AJ3VrACd1nwAndecAJ3YvACd2cwAndrMAJ3cDACd3UwAnd68AJ3fbACd4DwAneFMAJ3h/ACd4uwAneNsAJ3knACd5XwAneasAJ3n3ACd6LwAnem8AJ3rLACd7AwAneyMAJ3s/ACd7UwAne28AJ3uDACd7pwAne8MAJ3vXACd74wAnfAcAJ3wjACd8awAnfJMAJ3zPACd9JwAnfVsAJ32jACd97wAnftMAJ373ACd/LwAnf3MAJ3+zACd/5wAnf/sAJ4BnACeAvwAngR8AJ4GbACeB8wAngh8AJ4J7ACeCxwAng0MAJ4OTACeD4wAnhFMAJ4SfACeEywAnhRcAJ4UzACeFXwAnhcMAJ4X3ACeGFwAnhlMAJ4ajACeG0wAnhwMAJ4dPACeHfwAnh8sAJ4fjACeIFwAniCcAJ4hTACeIgwAniJsAJ4izACeIzwAniOsAJ4kLACeJXwAniaMAJ4nPACeJ6wAnijMAJ4pfACeKtwAnit8AJ4r3ACeLNwAni38AJ4uvACeL4wAnjEMAJ4xjACeMgwAnjNMAJ40XACeNYwAnjdcAJ43zACeODwAnjkMAJ45bACeOcwAnjo8AJ46nACeOvwAnjtsAJ473ACePEwAnjy8AJ49HACePXwAnj3cAJ4+PACePqwAnj8cAJ4/jACeP/wAnkBsAJ5A3ACeQUwAnkG8AJ5CLACeQpwAnkMMAJ5DfACeQ+wAnkRcAJ5EzACeRTwAnkWsAJ5GHACeRowAnkb8AJ5HbACeR9wAnkhMAJ5IrACeSQwAnkl8AJ5J7ACeSlwAnkrMAJ5LXACeS+wAnkxcAJ5MzACeTUwAnk28AJ5OLACeTowAnk7sAJ5QDACeUSwAnlJcAJ5TfACeVKwAnlXcAJ5W/ACeWBwAnllMAJ5afACeW6wAnlzcAJ5eDACeXzwAnmBsAJ5hnACeYswAnmP8AJ5lLACeZlwAnmeMAJ5orACeadwAnmsMAJ5sXACebYwAnm7MAJ5v/ACecRwAnnIMAJ5yvACec8wAnnTMAJ51vACedtwAnnecAJ54vACeedwAnnqcAJ577ACefGwAnn0MAJ5+DACefswAnn/MAJ6ATACegPwAnoG8AJ6CfACeg2wAnoRcAJ6FLACehbwAnoZcAJ6H/ACeiZwAnossAJ6M3ACejdwAno7MAJ6PvACekHwAnpFsAJ6SbACek1wAnpRcAJ6VDACeliwAnpdcAJ6YLACemUwAnpm8AJ6abACem3wAnpyMAJ6drACenlwAnp8cAJ6f7ACeoNwAnqG8AJ6ijACeo1wAnqRsAJ6lPACepywAnqisAJ6prACeqmwAnq0sAJ6uLACer0wAnrA8AJ6xDACes6wAnrZMAJ63vACeuNwAnrxMAJ6+DACevvwAnsJMAJ7FvACex1wAnsfMAJ7IfACey2wAnswsAJ7M/ACezcwAns58AJ7PPACe0ZwAntRcAJ7U/ACe1jwAntfMAJ7YvACe2XwAntpcAJ7bPACe23wAntvsAJ7cfACe3OwAnt3cAJ7enACe3zwAnt/8AJ7gnACe4SwAnuGMAJ7iHACe4owAnuNcAJ7kHACe5TwAnuZ8AJ7nbACe6DwAnuncAJ7qzACe66wAnu7cAJ7xzACe8nwAnvUMAJ71vACe9jwAnvcMAJ737ACe+RwAnvlcAJ75nACe+ewAnvrsAJ77PACe/DwAnvxsAJ79XACe/awAnv6MAJ7//ACfAUwAnwI8AJ8DHACfBJwAnwV8AJ8G/ACfB4wAnwi8AJ8JTACfCnwAnwt8AJ8MXACfDjwAnw8MAJ8P/ACfELwAnxGsAJ8SHACfE0wAnxOMAJ8UjACfFYwAnxZMAJ8W7ACfF5wAnxj8AJ8Z/ACfGvwAnxvcAJ8cnACfHawAnx9sAJ8hLACfIzwAnyUcAJ8nTACfKRwAnyrsAJ8rjACfLCwAny0cAJ8t3ACfLuwAny+cAJ8wTACfMTwAnzIMAJ8zXACfNTwAnzWsAJ82LACfNtwAnzdsAJ84zACfOVwAnzq8AJ87PACfO7wAnzysAJ89jACfPiwAnz7cAJ9APACfQJwAn0G8AJ9C7ACfRCwAn0W8AJ9HDACfR+wAn0h8AJ9I3ACfSVwAn0osAJ9KnACfSxwAn0wsAJ9Q7ACfUawAn1I8AJ9S3ACfUywAn1NcAJ9T7ACfVPwAn1W8AJ9WzACfV1wAn1hsAJ9ZLACfWjwAn1scAJ9cTACfXQwAn13sAJ9enACfXxwAn1+cAJ9gHACfYhwAn2T8AJ9m/ACfaPwAn2vcAJ9t3ACfb7wAn3GMAJ9yPACfcpwAn3NcAJ90LACfddwAn3bcAJ94PACfeUwAn3qMAJ97TACffDwAn308AJ9+DACffuwAn3/cAJ+A7ACfgcwAn4LMAJ+DjACfhAwAn4ScAJ+FHACfhlwAn4acAJ+HnACfiKwAn4lcAJ+KDACfixwAn4zcAJ+OLACfkTwAn5J8AJ+VHACflcwAn5b8AJ+YbACfmUwAn5msAJ+bHACfnPwAn53MAJ+fLACfoNwAn6JMAJ+jDACfpGwAn6YcAJ+nXACfqHwAn6l8AJ+q/ACfq/wAn60sAJ+unACfsCwAn7GcAJ+x3ACfshwAn7McAJ+zXACftFwAn7XsAJ+3jACfuTwAn7scAJ+9XACfvfwAn78MAJ+/7ACfwMwAn8JMAJ/DjACfxMwAn8YsAJ/HfACfx/wAn8iMAJ/JHACfyfwAn8rsAJ/MjACfzXwAn86cAJ/PvACf0SwAn9K8AJ/TXACf1SwAn9YcAJ/W7ACf18wAn9iMAJ/ZXACf2kwAn9ucAJ/cfACf3VwAn998AJ/hXACf4swAn+P8AJ/lTACf5pwAn+f8AJ/q/ACf60wAn+1sAJ/wfACf8TwAn/HMAJ/yPACf8rwAn/OMAJ/0XACf9RwAn/esAJ/47ACf+bwAn/q8AJ/7jACf/IwAn/z8AJ/97ACf/owAn/+8AKAATACgAIwAoAE8AKABzACgArwAoAOcAKAETACgBRwAoAXMAKAGvACgB3wAoAhMAKAJLACgCawAoAqcAKALHACgC6wAoAwsAKAM3ACgDZwAoA5MAKAO3ACgD8wAoBCsAKARXACgEnwAoBN8AKAUDACgFIwAoBXsAKAW3ACgF3wAoBgcAKAYzACgGewAoBo8AKAbDACgG/wAoBysAKAdnACgHnwAoB7cAKAf7ACgIMwAoCFsAKAiTACgIuwAoCPMAKAmrACgJ8wAoCk8AKAp7ACgKowAoCssAKArzACgLKwAoC2MAKAtvACgLkwAoC8cAKAv7ACgMJwAoDEMAKAyTACgMrwAoDPsAKA1HACgNiwAoDdMAKA4TACgOVwAoDpMAKA7DACgO8wAoDx8AKA87ACgPgwAoD88AKBAPACgQRwAoEI8AKBC7ACgQzwAoEScAKBFbACgRmwAoEe8AKBITACgSMwAoEnMAKBKjACgS3wAoEwcAKBMzACgTVwAoE18AKBQfACgUUwAoFHcAKBSXACgUxwAoFQ8AKBU/ACgVXwAoFZsAKBXfACgWBwAoFiMAKBZTACgWgwAoFqMAKBbPACgXJwAoF1sAKBeTACgXzwAoF/8AKBgjACgYQwAoGGsAKBijACgYvwAoGNMAKBjzACgZKwAoGTsAKBljACgZgwAoGbcAKBnTACgZ5wAoGhMAKBqLACgavwAoGusAKBr7ACgbLwAoG1sAKBtzACgbqwAoG9cAKBv7ACgcFwAoHDMAKBxrACgcowAoHNsAKB0fACgdUwAoHW8AKB2nACgduwAoHdMAKB3bACgd9wAoHg8AKB5XACgemwAoHqMAKB6rACgeswAoHrsAKB7DACgeywAoHucAKB8rACgfUwAoH3sAKB/TACggBwAoIBcAKCAzACggYwAoIIsAKCCXACggpwAoIMsAKCDXACgg4wAoIP8AKCETACghSwAoIW8AKCGPACghlwAoIZ8AKCHHACgiQwAoIlsAKCKHACgirwAoIssAKCM3ACgjwwAoI/sAKCRHACgkhwAoJLsAKCTXACgk6wAoJRcAKCUnACglNwAoJVMAKCVbACglewAoJZMAKCXLACgl6wAoJhMAKCYzACgmWwAoJmcAKCaDACgmmwAoJscAKCcHACgnRwAoJ2MAKCd/ACgnhwAoJ6cAKCfDACgn3wAoJ/sAKCgXACgoMwAoKF8AKCiLACgotwAoKOMAKCj/ACgpGwAoKTcAKClTACgpewAoKgcAKCoTACgqOwAoKmMAKCqjACgqwwAoKucAKCsjACgrTwAoK2sAKCuzACgrzwAoK+MAKCwDACgsEwAoLBsAKCxbACgshwAoLLcAKC0PACgtLwAoLW8AKC3XACgt9wAoLi8AKC5DACguewAoLpcAKC7DACgu5wAoLxsAKC87ACgvawAoL48AKC/DACgv3wAoL+8AKC//ACgwBwAoMA8AKDArACgwhwAoMLcAKDD/ACgxUwAoMX8AKDGnACgx3wAoMfsAKDI3ACgyZwAoMo8AKDLPACgy+wAoM1sAKDOXACgz2wAoNAMAKDQTACg0OwAoNGMAKDSLACg0ywAoNPMAKDUPACg1QwAoNWsAKDWrACg18wAoNiMAKDZfACg2swAoNvsAKDc3ACg3cwAoN68AKDf/ACg4RwAoOJsAKDj3ACg5awAoObsAKDoLACg6RwAoOlsAKDprACg6mwAoOssAKDr7ACg7JwAoO2MAKDuTACg7wwAoO/8AKDw3ACg8dwAoPM8AKD0nACg9lwAoPeMAKD4HACg+VwAoPr8AKD73ACg/MwAoP3cAKD+3AChACwAoQEcAKECHAChAlwAoQKsAKEDHAChA6wAoQSMAKEFTAChBfwAoQdsAKEIjAChCWwAoQosAKEKzAChCxwAoQy8AKENXAChDiwAoQ9MAKEP3AChEFwAoRDcAKERfAChEgwAoRLsAKET7AChFMwAoRZcAKEW3AChGJwAoRocAKEbjAChHGwAoR0sAKEd/AChHywAoR/8AKEgvAChIUwAoSKcAKEjLAChJKwAoSYMAKEmrAChJ2wAoSgsAKEpPAChKawAoSsMAKErjAChLMwAoS48AKEvrAChMHwAoTD8AKExLAChMZwAoTH8AKEyzAChMzwAoTRcAKE1LAChNswAoTd8AKE4DAChONwAoTmsAKE6fAChOvwAoTvMAKE+DAChP9wAoUIMAKFDjAChRSwAoUbMAKFITAChSOwAoUqMAKFMLAChTYwAoU/MAKFQ7AChUfwAoVMcAKFT/AChVYwAoVcMAKFYnAChWYwAoVrsAKFb3AChXTwAoV6cAKFf/AChYVwAoWMMAKFknAChZnwAoWfcAKFpPAChagwAoWtsAKFrzAChbIwAoW0sAKFtbAChbhwAoW8sAKFvXAChb4wAoW+8AKFv7AChcBwAoXBMAKFwfAChcKwAoXDcAKFxDAChcTwAoXFsAKFxnAChccwAoXH8AKFyLAChclwAoXKMAKFyvAChcuwAoXMcAKFzTAChc3wAoXOsAKFz3AChdAwAoXQ8AKF0bAChdJwAoXTMAKF0/AChdSwAoXVcAKF1jAChdbwAoXXsAKF2HAChdkwAoXZ8AKF2rAChdtwAoXcMAKF3PAChd2wAoXecAKF3zAChd/wAoXgsAKF4XACheIwAoXi8AKF47ACheRwAoXlMAKF5fACheawAoXncAKF6DAChejwAoXpsAKF6nACheswAoXr8AKF7LAChe1wAoXuMAKF7vAChe+wAoXwcAKF8TAChfHwAoXysAKF83AChfQwAoX08AKF9bAChfZwAoX3MAKF9/AChfiwAoX5cAKF+jAChfrwAoX7sAKF/HAChf0wAoX98AKF/rAChf9wAoYAMAKGALAChgEwAoYBsAKGAjAChgKwAoYDMAKGA7AChgPwAoYEMAKGBHAChgSwAoYE8AKGBTAChgVwAoYFsAKGBjAChgawAoYHMAKGB7AChggwAoYIsAKGCTAChgmwAoYKMAKGCrAChgswAoYLsAKGDDAChgywAoYNMAKGDbAChg4wAoYOsAKGDzAChg+wAoYQMAKGELAChhEwAoYRsAKGEjAChhKwAoYTMAKGE7AChhQwAoYUsAKGFTAChhWwAoYWMAKGFrAChhcwAoYXsAKGGDAChhiwAoYZMAKGGbAChhowAoYasAKGGzAChhuwAoYcMAKGHLAChh0wAoYdsAKGHjAChh6wAoYfMAKGH7AChiAwAoYgsAKGITAChiGwAoYiMAKGIrAChiMwAoYjsAKGJDAChiSwAoYlMAKGJbAChiYwAoYmsAKGJzAChiewAoYoMAKGKLAChikwAoYpsAKGKjAChiqwAoYrMAKGK7AChiwwAoYssAKGLTAChi2wAoYuMAKGLrAChi8wAoYvsAKGMDAChjCwAoYxMAKGMbAChjIwAoYysAKGNPAChjcwAoY5cAKGPLAChj/wAoZEMAKGSXAChkowAoZMcAKGUbAChlMwAoZXcAKGWLAChlwwAoZfsAKGYXAChmMwAoZk8AKGZnAChmjwAoZrsAKGbjAChnCwAoZysAKGdDAChnXwAoZ48AKGe3AChn5wAoaBMAKGg/AChodwAoaI8AKGjTAChpGwAoaU8AKGmfAChp5wAoakcAKGpzAChqwwAoav8AKGsvAChrgwAoa7MAKGvfAChsLwAobL8AKGz/AChtMwAobW8AKG2PAChtswAobhcAKG5jAChupwAobzMAKG+PAChvxwAob9sAKHAjAChwSwAocKcAKHD/AChxXwAocfMAKHIjAChyWwAocnMAKHKDAChywwAocvMAKHMPAChzJwAoc1MAKHNzAChznwAoc+sAKHQDACh0KwAodFMAKHR7ACh0hwAodMMAKHUrACh1UwAodX8AKHWbACh13wAodhcAKHZLACh2lwAodsMAKHcHACh3WwAod5cAKHf7ACh4HwAoeGsAKHiLACh40wAoeSMAKHlbACh5swAoef8AKHorACh6jwAoetsAKHrnACh69wAoe0MAKHuHACh7swAoe98AKHwbACh8RwAofG8AKHynACh88wAofXsAKH2vACh+LwAofncAKH6fACh+6wAofvsAKH8fACh/VwAof7sAKH/rACiAJwAogHcAKIDLACiBRwAogW8AKIGjACiB4wAoghcAKII/ACiCawAogpsAKILPACiDEwAog3cAKIPrACiEOwAohIsAKITXACiFHwAohT8AKIVTACiFlwAohdcAKIYPACiGXwAohqMAKIa7ACiG+wAoh2sAKIeXACiH6wAoiGcAKIjXACiJHwAoiU8AKImLACiJ6wAoih8AKIpnACiKlwAoissAKIsTACiLWwAoi4sAKIvTACiMGwAojFMAKIx3ACiSdwAokpsAKJiPACiY0wAomVMAKJmbACiaFwAomlMAKJp7ACiarwAomrsAKJrXACia5wAomw8AKJsnACibSwAom3sAKJuXACib7wAonE8AKJzjACidLwAonWMAKJ2bACid+wAono8AKJ7nACifPwAon28AKJ/TACif6wAooAsAKKBvACigowAooPcAKKE3ACihVwAooY8AKKHDACih0wAoohMAKKJfACiiswAoowcAKKMvACijSwAopBsAKKRrACikjwAopLsAKKTTACik6wAopQsAKKVbACilewAopcMAKKYLACimPwAopnMAKKafACimxwAopv8AKKcvACinWwAop3cAKKe7ACin0wAop+8AKKgTACioMwAoqEsAKKhrACiogwAoqK8AKKjLACio6wAoqP8AKKkTACipIwAoqTMAKKlLACipbwAoqYsAKKmrACipywAoqf8AKKpnACiqpwAoqtcAKKtTACisNwAorNcAKKznACis+wAorQcAKK0XACitLwAorVsAKK2HACitkwAorfsAKK5jACiuuwAoruMAKK9nACiv3wAor+8AKLAzACiwmwAosRMAKLFnACixqwAosk8AKLLPACizUwAos/cAKLQ7ACi0ZwAotI8AKLS7ACi03wAotRMAKLU/ACi1TwAotVsAKLVnACi1cwAotYsAKLXDACi2BwAotksAKLZ7ACi2qwAottMAKLb7ACi3LwAot4MAKLebACi32wAouAsAKLg3ACi4VwAouJMAKLi7ACi5JwAouW8AKLmnACi53wAouf8AKLpfACi6owAoutcAKLsTACi7SwAou2cAKLvLACi73wAovCMAKLxzACi8qwAovOsAKL0vACi9ewAovZsAKL23ACi99wAovhMAKL4nACi+UwAovmMAKL5vACi+lwAovscAKL7vACi++wAov1MAKL93ACi/nwAov8cAKL/3ACjAAwAowDsAKMB3ACjAkwAowJ8AKMC/ACjA/wAowSsAKMFDACjBZwAowZcAKMHTACjB+wAowi8AKMJTACjCbwAowosAKMK3ACjC7wAoww8AKMN3ACjDywAoxAsAKMRDACjEbwAoxMMAKMUXACjFYwAoxasAKMX/ACjGSwAoxpMAKMbLACjG/wAoxzMAKMdXACjHiwAox6sAKMfDACjH3wAoyAMAKMgnACjISwAoyF8AKMibACjI1wAoyP8AKMlLACjJhwAoyb8AKMn/ACjKOwAoynMAKMqnACjKywAoyvsAKMs7ACjLawAoy5MAKMvTACjL3wAozCMAKMxPACjMdwAozL8AKMzzACjNFwAozWcAKM2jACjN3wAozgMAKM4fACjOXwAozs8AKM9LACjPhwAoz7MAKNAjACjQewAo0KMAKNDrACjRWwAo0bMAKNIjACjShwAo0sMAKNNTACjTewAo1BsAKNSjACjUuwAo1NcAKNUvACjVWwAo1ZsAKNXXACjWcwAo1scAKNcTACjXYwAo16sAKNgLACjYrwAo2OcAKNkzACjaAwAo2jcAKNpnACjaxwAo2ucAKNsnACjbQwAo248AKNu/ACjcPwAo3E8AKNyjACjdQwAo3WsAKN3HACjeCwAo3ucAKN97ACjfvwAo4CcAKOBvACjgxwAo4N8AKOEPACjhJwAo4U8AKOGbACjh2wAo4gMAKOIrACjiXwAo4oMAKOLPACji9wAo4zMAKONzACjjkwAo49MAKOQDACjkLwAo5EsAKORnACjkfwAo5L8AKOUbACjlYwAo5bMAKOXbACjmBwAo5nMAKOarACjnTwAo5/cAKOg3ACjoawAo6LMAKOjrACjpTwAo6hMAKOp3ACjq4wAo6wsAKOs3ACjrcwAo66MAKOu/ACjsAwAo7CsAKOxbACjsYwAo7J8AKOyzACjs2wAo7QsAKO2DACjtnwAo7b8AKO3zACjuEwAo7jMAKO8rACjvQwAo72MAKO9rACjvjwAo76cAKO/fACjwEwAo8DsAKPCHACjw0wAo8R8AKPFrACjxswAo8f8AKPJLACjylwAo8t8AKPMrACjzcwAo878AKPQHACj0UwAo9JsAKPTjACj1LwAo9XsAKPXDACj2CwAo9lMAKPafACj25wAo9y8AKPd3ACj3vwAo+AsAKPhXACj4owAo+OsAKPkPACj5MwAo+aMAKPnPACj6SwAo+pcAKPrnACj7FwAo+x8AKPs/ACj7VwAo+6sAKPvjACj8GwAo/DcAKPxXACj8fwAo/LcAKPzXACj8/wAo/VMAKP2nACj+UwAo/v8AKP8rACj/iwAo/+cAKQBTACkAawApALcAKQDrACkBFwApAUMAKQFbACkBpwApAnMAKQK3ACkC/wApA1MAKQODACkDswApA9MAKQP3ACkEUwApBKsAKQTfACkFDwApBTMAKQVbACkF3wApBhcAKQZbACkGiwApBscAKQcDACkHUwApB7sAKQfnACkIKwApCI8AKQjTACkJLwApCYMAKQnbACkKDwApCksAKQqTACkKpwApCtcAKQsTACkLRwApC4MAKQ2DACkNvwApDhMAKQ4fACkOSwApDlsAKQ6bACkO4wApDycAKQ9LACkPcwApD7cAKRADACkQMwApEEcAKRB/ACkQtwApEOMAKREXACkRSwApEXsAKRHTACkR5wApEhcAKRJHACkSdwApEqsAKRLvACkTPwApE7MAKRPTACkT/wApFDsAKRRrACkUmwApFMsAKRUPACkVfwApFbsAKRYPACkWhwApFsMAKRcjACkXWwApF3sAKRfLACkX6wApGA8AKRivACkY1wApGOMAKRkHACkZOwApGXMAKRmnACkaBwApGj8AKRqHACkaowApGt8AKRsXACkbOwApG18AKRuDACkbpwApG8sAKRvzACkcJwApHEcAKRxTACkcewApHJcAKRy3ACkcwwApHP8AKR1PACkdiwApHcsAKR4bACkeQwApHmsAKR6rACke6wApHy8AKR+HACkfqwApH88AKSATACkgvwApIVMAKSGTACkh6wApIgsAKSLnACkjowApI/MAKSQjACkkPwApJI8AKSUTACklRwApJVsAKSWTACkmCwApJuMAKSfLACkoAwApKBMAKShTACkodwApKI8AKSizACko5wApKR8AKSlfACkprwApKe8AKSo/ACkqfwApKq8AKSrzACkrPwApK4sAKSvDACkr9wApLC8AKSyDACksvwApLO8AKS03ACktiwApLa8AKS3/ACkuMwApLmMAKS6PACkuywApLvsAKS8jACkvWwApL4MAKS+fACkvwwApL/MAKTAfACkwOwApMHcAKTDXACkxNwApMV8AKTH3ACkyFwApMksAKTKnACkzMwApM2MAKTOTACkz9wApNGMAKTTDACk1FwApNUcAKTWDACk1zwApNd8AKTXvACk2qwApN2sAKTeLACk3qwApN98AKTgLACk4VwApOHsAKTifACk4xwApOVcAKTlvACk5mwApOacAKTnXACk6CwApOksAKTp7ACk7BwApOz8AKTuDACk7rwApO+MAKTyXACk82wApPTsAKT2HACk9uwApPd8AKT4nACk+twApPvcAKT8vACk/VwApP/cAKUAvAClAYwApQKMAKUDHAClBAwApQUMAKUFvAClBrwApQd8AKUIzAClCVwApQp8AKULrAClDFwApQzsAKUNbAClDdwApQ88AKUPXAClEHwApRHcAKUSrAClEtwApROcAKUUfAClFRwApRW8AKUWXAClFwwApResAKUZ7AClHQwApR+cAKUfzAClIewApSIsAKUl7AClKdwApSqMAKUt/AClLwwApTAsAKUxDAClMfwApTIcAKUzDAClNEwApTTcAKU1fAClNlwApTcMAKU4LAClOWwApToMAKU6vAClPKwApT18AKU+3AClP+wApUBcAKVA7AClQfwApUKMAKVC/AClQ+wApUSMAKVFTAClRfwApUa8AKVHPAClR8wApUkcAKVLHAClTXwApU4cAKVPLAClT7wApVHMAKVT7AClVKwApVW8AKVXbAClWAwApVisAKVZjAClWkwApVrMAKVbTAClW6wApVxcAKVdvAClXswApV+cAKVgbAClYVwApWI8AKVi3AClY3wApWQcAKVkvAClZVwApWYMAKVm7AClZ6wApWgcAKVojAClaQwApWmsAKVqPAClapwApW3sAKVuXAClbzwApW/8AKVwvAClcRwApXF8AKVyDAClcmwApXLsAKV0bACldPwApXWcAKV2LACldtwApXeMAKV33ACleFwApXj8AKV5TACleawApXocAKV67ACle7wApXyMAKV9LAClfgwApX7cAKV/rAClgHwApYEcAKWCDAClgvwApYPsAKWE3AClhdwApYcMAKWH/ACliIwApYm8AKWKfACli1wApYucAKWL3ACljHwApY3cAKWPnAClkMwApZFMAKWSLAClkqwApZOMAKWUvACllmwApZesAKWYrAClmXwApZncAKWa7AClm2wApZwMAKWg3ACloPwApaEcAKWhPACloWwApaG8AKWirAClo9wApaR8AKWlLAClpgwApaccAKWn/AClqPwApaoMAKWq7AClrBwApaz8AKWuXAClrnwApa+MAKWwLAClsOwApbGsAKWyXACls7wApbRcAKW03ACltbwApbasAKW33ACluBwApbjMAKW5jAClurwApbucAKW83AClvcwApb8MAKW//AClwRwApcHsAKXCfAClwqwApcNcAKXDrAClxNwApcWsAKXGzAClx5wApcicAKXJ7AClyuwApcw8AKXNPAClzmwApc9MAKXQnACl0ZwApdKcAKXTTACl1GwApdU8AKXWTACl1wwApdesAKXYTACl2IwApdlMAKXZrACl2nwApdscAKXbvACl3IwApd0MAKXeXACl32wApeB8AKXhTACl4hwApeKcAKXkDACl5TwApeZcAKXnLACl6AwApekcAKXp3ACl6pwApewMAKXtLACl7qwApe/cAKXwjACl8VwApfHMAKXyzACl83wApfP8AKX0HACl9OwApfVcAKX2vACl98wApficAKX5DACl+fwApfqcAKX7PACl+3wApfwMAKX83ACl/iwApf8sAKX/jACmAQwApgHsAKYD3ACmBMwApgbMAKYHvACmCbwApgqMAKYMbACmDJwApg3sAKYOPACmD6wAphB8AKYSbACmEzwAphUcAKYVvACmF3wAphh8AKYajACmG4wAph2cAKYefACmIGwApiFsAKYjfACmJCwApiXsAKYmvACmKJwApilcAKYrLACmK2wApizMAKYtDACmLmwApi7MAKYwTACmMLwApjJMAKYyjACmM+wApjQsAKY1jACmNgwApjecAKY4rACmOrwApjuMAKY9XACmPdwApj9sAKZAnACmQswApkOcAKZFfACmRfwApkecAKZIXACmSiwApkqMAKZMDACmTSwApk9cAKZQjACmUswAplMcAKZUjACmVPwAplaMAKZXPACmWPwApllcAKZa3ACmWvwAplw8AKZcrACmXjwApl9MAKZhbACmYdwApmNsAKZkDACmZbwApmX8AKZnXACmZ4wApmjcAKZqbACma2wApm18AKZuPACmbpwApm+MAKZwLACmcIwApnIMAKZyrACmdFwApnU8AKZ2LACmd8wApnicAKZ5fACmewwApnv8AKZ8/ACmfqwApn+MAKaAfACmghwApoMMAKaD3ACmhUwApoXcAKaGjACmh6wApoiMAKaJnACmikwApoqcAKaK3ACmi9wApowcAKaNHACmjVwApo5cAKaPHACmkDwAppDsAKaRXACmkbwAppIcAKaSnACmk7wAppRsAKaVLACmlZwAppYMAKaW/ACml7wAppg8AKaY/ACmmbwAppqsAKabvACmnWwApp5sAKafjACmoUwApqJcAKajPACmo8wApqTMAKalPACmpZwApqYsAKamrACmpxwApqfcAKaovACmqQwApqm8AKaqTACmq8wApqzcAKauDACmr2wAprBcAKaxHACmsjwAprM8AKaz3ACmtGwAprUcAKa3PACmujwApr0sAKa//ACmwMwApsGMAKbCLACmw3wApsUcAKbFnACmx0wApshsAKbJLACmygwApsrMAKbLnACmzIwAps0MAKbOHACmz0wAptAMAKbQPACm0FwAptB8AKbRLACm0ewAptMcAKbT3ACm1BwAptS8AKbVjACm1owAptc8AKbXzACm2PwAptpsAKba/ACm3CwApuEMAKbh/ACm4wwApuQsAKblHACm5TwApuYMAKbpTACm6iwApurcAKbrPACm66wApuw8AKbs/ACm7cwApu5cAKbu7ACm7wwApu8sAKbvTACm72wApu+sAKbwrACm8VwApvGcAKbxvACm8dwApvH8AKbyTACm8mwApvLsAKbzHACm80wApvN8AKbzrACm89wApvQMAKb0PACm9GwApvScAKb0zACm9PwApvUsAKb1XACm9YwApvW8AKb17ACm9hwApvZMAKb2fACm9pwApva8AKb2/ACm9xwApvfsAKb4rACm+XwApvqcAKb7bACm+8wApvw8AKb8zACm/UwApv2sAKb+LACm/owApv88AKb/zACnAFwApwCMAKcBjACnAswApwMcAKcDzACnBKwApwUsAKcFXACnBYwApwW8AKcF7ACnBhwApwZMAKcGfACnBqwApwbcAKcHDACnB3wApwhMAKcIzACnCTwApwncAKcKXACnCxwApwucAKcMHACnDSwApw4MAKcPXACnENwApxIsAKcTbACnFEwApxY8AKcXDACnF3wApxesAKcbrACnHKwApx1MAKcgvACnInwApyZcAKcm7ACnJ/wApyh8AKco/ACnKawApyqMAKcrfACnLIwApy3MAKcu/ACnMQwApzHsAKczrACnNFwApzUMAKc1jACnNlwApzdsAKc3zACnOFwApzj8AKc5rACnOowApzyMAKc9bACnP3wAp0A8AKdBrACnQrwAp0R8AKdFLACnRhwAp0c8AKdIbACnSSwAp0nsAKdKbACnSywAp0ucAKdM3ACnTrwAp0+sAKdQzACnUfwAp1JsAKdS7ACnU4wAp1QsAKdUvACnVSwAp1WsAKdWTACnVxwAp1n8AKdc7ACnXYwAp15cAKdfTACnYCwAp2DsAKdhbACnYjwAp2McAKdjnACnZTwAp2XMAKdmTACnZ3wAp2g8AKdo7ACnadwAp2pcAKdrLACnbJwAp208AKdt3ACnbmwAp29cAKdv/ACncIwAp3GcAKdyHACncxwAp3O8AKd0jACndbwAp3Z8AKd3nACneNwAp3l8AKd6zACnewwAp3tMAKd+DACnf2wAp4CcAKeBrACngywAp4O8AKeE7ACnhbwAp4ZMAKeGnACnh2wAp4hcAKeJrACnigwAp4sMAKeMHACnjYwAp46sAKeP/ACnkRwAp5GsAKeR/ACnkiwAp5LMAKeTHACnk/wAp5S8AKeWPACnlywAp5hsAKeZLACnmfwAp5qMAKebDACnm4wAp5xsAKednACnnlwAp5+MAKegXACnoQwAp6HcAKeibACno0wAp6QsAKekzACnpdwAp6ccAKen7ACnqKwAp6lcAKepvACnqmwAp6r8AKesLACnrJwAp60cAKeu7ACnr4wAp7BcAKexTACnskwAp7NcAKezrACntDwAp7T8AKe1jACntqwAp7dcAKe4HACnuRwAp7msAKe6PACnu1wAp7w8AKe+DACnvwwAp7+MAKe/zACnwLwAp8HsAKfDbACnxKwAp8YMAKfH/ACnyRwAp8psAKfLXACnzAwAp808AKfOPACnz9wAp9BMAKfRbACn0owAp9McAKfUHACn1OwAp9YsAKfW3ACn11wAp9jMAKfZfACn2qwAp9ssAKfbnACn3FwAp90sAKfdrACn3nwAp9/cAKfgrACn4UwAp+IMAKfjXACn5CwAp+R8AKflDACn5YwAp+Y8AKfnTACn6AwAp+i8AKfprACn6pwAp+tsAKfsLACn7wwAp/DsAKfxrACn9TwAp/Y8AKf4/ACn+rwAp/usAKf8/ACn/awAp/4sAKf+zACn/3wAqADcAKgBrACoAowAqAY8AKgJHACoC2wAqAwMAKgMXACoDUwAqA2MAKgN7ACoDvwAqA+MAKgP7ACoEIwAqBGcAKgSHACoE6wAqBQ8AKgVbACoGAwAqBjsAKgZ/ACoHAwAqBzMAKgdTACoHYwAqB4cAKgfDACoIBwAqCBsAKgg3ACoIZwAqCJMAKgivACoI0wAqCPMAKgknACoJVwAqCZcAKgnXACoJ8wAqCg8AKgpbACoKzwAqCysAKgtjACoLewAqC8sAKgv3ACoMFwAqDF8AKgynACoM1wAqDP8AKg0vACoNkwAqDbMAKg33ACoONwAqDpsAKg7rACoPDwAqDzMAKg9rACoPqwAqD8cAKhAHACoQQwAqEKcAKhDXACoQ7wAqERcAKhErACoRQwAqEWMAKhF/ACoRnwAqEb8AKhHnACoSDwAqEjsAKhJnACoTIwAqE18AKhN7ACoTjwAqE68AKhPTACoUAwAqFCcAKhRTACoUdwAqFK8AKhTPACoU/wAqFT8AKhVjACoVfwAqFasAKhYPACoWXwAqFnMAKhaXACoWswAqFtsAKhbzACoXAwAqFx8AKhc/ACoXxwAqF/MAKhgTACoYRwAqGHcAKhi/ACoY/wAqGWsAKhmnACoZzwAqGicAKhpDACoagwAqGrcAKhtDACobUwAqG48AKhvbACocCwAqHD8AKhyvACoczwAqHQcAKh1TACodjwAqHeMAKh3/ACoeGwAqHi8AKh5HACoeWwAqHm8AKh6fACoeqwAqHusAKh8LACofLwAqH3MAKh+rACogAwAqIG8AKiDfACog6wAqIQMAKiELACohJwAqIU8AKiFzACohlwAqIbMAKiHnACoiAwAqIisAKiJDACoicwAqIqcAKiK/ACoizwAqIu8AKiMHACojHwAqI1MAKiN3ACojfwAqI48AKiO3ACojywAqI+MAKiRfACokswAqJP8AKiU/AColowAqJe8AKiZTAComvwAqJw8AKic/AConbwAqJ7cAKifnACooXwAqKL8AKijzACopSwAqKaMAKinLACoqGwAqKl8AKiqvACoq/wAqKw8AKisvACorSwAqK4sAKiu7ACor6wAqLBsAKiw3ACosVwAqLNMAKiz/ACotKwAqLVMAKi2bACot7wAqLhsAKi5PACouhwAqLssAKi77ACovPwAqL5MAKi/DACov8wAqMCMAKjBrACowiwAqMMMAKjEHACoxIwAqMU8AKjGLACox0wAqMesAKjIfACoyVwAqMncAKjKjACoy3wAqMxcAKjN7ACoz3wAqNDcAKjSLACo02wAqNPcAKjVDACo1swAqNisAKjaPACo2uwAqNxcAKjc/ACo3cwAqN5cAKjfTACo4BwAqOD8AKjjXACo5mwAqOlcAKjqDACo6wwAqOvMAKjsjACo7bwAqO68AKju/ACo7zwAqPB8AKjxPACo8cwAqPLMAKjzHACo9IwAqPUcAKj1vACo9jwAqPcsAKj4XACo+UwAqPmsAKj6nACo+7wAqPxcAKj9DACo/dwAqP6sAKj/7ACpARwAqQIsAKkDHACpA+wAqQR8AKkFTACpBjwAqQb8AKkH/ACpCOwAqQpcAKkLTACpDBwAqQ2sAKkObACpD0wAqRDcAKkRfACpEswAqROsAKkVPACpFjwAqRfsAKkYvACpGjwAqRtcAKkdHACpHhwAqR/MAKkhbACpI5wAqSScAKkmTACpJzwAqSjMAKkqfACpLMwAqS2cAKkvHACpMDwAqTFcAKkzPACpNBwAqTRMAKk17ACpN1wAqTjMAKk5/ACpOywAqTzcAKk9bACpPZwAqT78AKlArACpQjwAqUPcAKlFbACpRuwAqUe8AKlI3ACpSnwAqUw8AKlN3ACpT5wAqVA8AKlRfACpUnwAqVMsAKlULACpVLwAqVVcAKlWvACpV7wAqVjsAKlZrACpYSwAqWJMAKli7ACpZVwAqWgMAKlorACpaTwAqWnsAKlrDACpbEwAqW2cAKlunACpb1wAqW/8AKlwnACpcTwAqXHcAKlyfACpcswAqXMMAKlzTACpc+wAqXSMAKl1LACpdcwAqXZsAKl3TACpeNwAqXqsAKl7PACpe7wAqXwsAKl8XACpfJwAqXzcAKl9HACpfXwAqX28AKl+bACpftwAqX9MAKmAbACpgfwAqYNcAKmETACphXwAqYYsAKmG/ACph3wAqYf8AKmKLACpirwAqYucAKmMjACpjTwAqY3MAKmOnACpjwwAqZAMAKmRDACpkawAqZI8AKmS7ACplPwAqZcsAKmX/ACpmTwAqZqcAKmbfACpnFwAqZ3sAKme/ACpn7wAqaA8AKmiTACporwAqaNMAKmkXACpppwAqafcAKmpPACpqawAqa1cAKmurACpr5wAqbEcAKmxPACpskwAqbOcAKm1TACptiwAqbcMAKm4bACpunwAqbrsAKm7jACpvVwAqb48AKnAXACpwNwAqcGsAKnCnACpw0wAqcPsAKnEjACpxLwAqcVsAKnF/ACpxxwAqcfcAKnI7ACpyTwAqcnsAKnMPACpzRwAqc3MAKnO/ACpz6wAqdBsAKnRDACp0cwAqdKcAKnTPACp0+wAqdScAKnUvACp1OwAqdZsAKnW/ACp18wAqdhMAKnZPACp2ywAqd6sAKnfjACp4GwAqeQMAKnmrACp6EwAqekcAKnqfACp68wAqeycAKnt7ACp7lwAqe7cAKnvvACp8KwAqfH8AKny/ACp9CwAqfUMAKn2jACp+AwAqflMAKn6jACp+3wAqfvMAKn8bACp/swAqgDcAKoDzACqBewAqgi8AKoK7ACqDPwAqg/cAKoSjACqFLwAqhZcAKoXzACqGewAqh18AKohLACqJNwAqigcAKorLACqLpwAqjGsAKo0bACqNvwAqjn8AKo8fACqQHwAqkPcAKpGnACqSiwAqk38AKpRzACqVFwAqle8AKpa7ACqXYwAqmEcAKpkHACqZfwAqmgMAKpqDACqbIwAqm78AKpxTACqc5wAqnYcAKp4vACqevwAqnysAKp+zACqgVwAqoNcAKqFnACqh2wAqomcAKqLfACqjbwAqpBMAKqTHACqlwwAqpp8AKqdDACqn5wAqqIMAKqk/ACqqBwAqqr8AKqtfACqr+wAqrMsAKq1jACquJwAqrvsAKq+vACqwbwAqsQsAKrHvACqyywAqs7cAKrR3ACq1RwAqticAKrb3ACq3ywAquGsAKrkDACq5gwAqugsAKrrDACq7VwAqvA8AKryHACq9BwAqvecAKr5XACq+2wAqv0cAKr/XACrAywAqwYsAKsJXACrDJwAqw/8AKsTXACrFvwAqxoMAKsbnACrHywAqyGMAKslTACrKSwAqyx8AKswHACrM5wAqzc8AKs6PACrO/wAqz+sAKtDPACrRjwAq0mcAKtMrACrTzwAq1GcAKtUDACrVmwAq1nMAKtc/ACrYMwAq2SsAKtn3ACrauwAq26sAKty3ACrdcwAq3isAKt8jACrf/wAq4McAKuGfACriswAq458AKuRXACrlAwAq5gMAKubPACrnhwAq6D8AKukjACrp3wAq6qMAKutfACrsAwAq7KsAKu1LACrtswAq7ksAKu7fACrvgwAq8B8AKvDrACrxdwAq8iMAKvKnACrzUwAq9DMAKvTbACr1owAq9kMAKvb/ACr3rwAq+HcAKvkvACr57wAq+osAKvs7ACr8AwAq/I8AKv07ACr+GwAq/wcAKv/DACsAPwArATsAKwH3ACsClwArA0MAKwQ/ACsFOwArBicAKwcjACsIEwArCOsAKwmvACsKSwArCysAKwwfACsNEwArDacAKw53ACsPLwArD8sAKxBnACsRIwArEhcAKxMPACsT+wArFM8AKxWbACsWdwArF3cAKxiLACsZpwArGsMAKxtzACscZwArHT8AKx5XACsfJwArIBsAKyDvACshxwArIssAKyOzACskqwArJZ8AKyZ/ACsnWwArKD8AKylHACsqKwArKwMAKyvvACssywArLbcAKy6LACsvjwArMIcAKzFnACsyTwArMw8AKzPHACs0lwArNU8AKzZDACs3KwArN/MAKzi/ACs5nwArOk8AKzsnACs8RwArPL8AKz1bACs+IwArPt8AKz+bACtANwArQOMAK0GXACtCbwArQ0MAK0PHACtETwArRPcAK0WXACtGEwArRrsAK0dfACtIBwArSJ8AK0k3ACtJ1wArSpsAK0tnACtMJwArTMsAK02HACtOLwArTqcAK09LACtQAwArUM8AK1F7ACtSOwArUvcAK1O3ACtUpwArVUcAK1YPACtW5wArV78AK1h3ACtZPwArWgMAK1qvACtbXwArW98AK1zDACtdiwArXnMAK19LACtgBwArYN8AK2GXACtiYwArYzcAK2QrACtlBwArZdsAK2aXACtnNwArZ+cAK2hzACtpGwArabMAK2p/ACtrKwAra/cAK2ynACttUwArbfMAK26DACtvDwArb68AK3A/ACtwxwArcY8AK3JvACtzYwArdAcAK3S/ACt1bwArdjMAK3b7ACt3fwAreB8AK3jXACt5uwArelMAK3sPACt7vwArfK8AK31jACt+DwArfs8AK3+HACuAYwArgRcAK4IbACuC8wArg9cAK4TDACuFqwArhnMAK4dTACuIOwAriS8AK4nzACuK7wAri/8AK4zvACuNywArjnMAK48/ACuQGwArkMMAK5FbACuSDwArkrcAK5NLACuT4wArlHcAK5UrACuVtwArln8AK5cHACuXjwArmDMAK5jfACuZhwArmgsAK5rDACubjwArnFMAK5z7ACudvwArnoMAK58jACuf5wAroJ8AK6FTACuiBwAros8AK6OHACukJwArpNcAK6W7ACumvwArp7sAK6ivACupgwArqncAK6tjACusIwArrMsAK62XACuuRwArru8AK6+vACuwhwArsScAK7HLACuyiwArs0cAK7PPACu0VwArtOsAK7V7ACu2NwArtyMAK7fbACu4bwAruWsAK7pDACu7FwArvB8AK7z3ACu9qwArvmsAK79HACvAFwArwNMAK8GbACvCNwArwr8AK8NXACvECwArxQcAK8XzACvG2wArx3cAK8gHACvIpwAryUcAK8nbACvKewAryyMAK8u7ACvMTwArzRMAK83TACvOYwArzu8AK8+nACvQhwAr0TsAK9HnACvScwAr0y8AK9PrACvUwwAr1XMAK9X3ACvWvwAr13MAK9fbACvYuwAr2U8AK9nHACvaNwAr2qcAK9sTACvbgwAr2/sAK9xrACvc9wAr3XsAK93vACvekwAr30sAK9+7ACvgOwAr4PsAK+GDACviEwAr4qMAK+NDACvj4wAr5HcAK+TvACvlHwAr5VcAK+V3ACvlpwAr5csAK+X/ACvmOwAr5n8AK+a7ACvm7wAr5zsAK+dbACvngwAr6AGNvbXBpbGVyLmJpbi5kYXJ0MmpzZGFydDJqcy5jbWRsaW5lRnV0dXJldXRmOExpbmVTcGxpdHRlcmV4aXRGaWxlRmlsZU1vZGVQbGF0Zm9ybXN0ZGluc3RkZXJySXNvbGF0ZWZlYXBpQ29tcGlsZXJPcHRpb25zc3RhY2tUcmFjZUZpbGVQcmVmaXhIYW5kbGVPcHRpb25kYXRhRXhpdEZ1bmNleGl0Q29kZUNvbXBpbGVGdW5jY29tcGlsZXJPcHRpb25zY29tcGlsZXJJbnB1dGNvbXBpbGVyRGlhZ25vc3RpY3Njb21waWxlck91dHB1dE9wdGlvbkhhbmRsZXJwYXR0ZXJuX2hhbmRsZW11bHRpcGxlQXJndW1lbnRzaGFuZGxlYXJndW1lbnRjYWxsQWJvcnRMZWdtZXNzYWdldG9TdHJpbmdBYm9ydGVkIGR1ZSB0byAtLXRocm93LW9uLWVycm9yOiBfRXhpdFNpZ25hbFJlYWRTdHJhdGVneWluZGV4X25hbWV2YWx1ZXNSZWFkU3RyYXRlZ3kuZnJvbURhcnRSZWFkU3RyYXRlZ3kuZnJvbURhdGFSZWFkU3RyYXRlZ3kuZnJvbUNvZGVnZW5mcm9tRGFydGZyb21EYXRhZnJvbUNvZGVnZW5Xcml0ZVN0cmF0ZWd5V3JpdGVTdHJhdGVneS50b0tlcm5lbFdyaXRlU3RyYXRlZ3kudG9EYXRhV3JpdGVTdHJhdGVneS50b0NvZGVnZW5Xcml0ZVN0cmF0ZWd5LnRvSnN0b0tlcm5lbHRvRGF0YXRvQ29kZWdlbnRvSnNfZGVmYXVsdFNwZWNpZmljYXRpb25VcmkuLi8uLi8uLi8uLi9zZGsvbGliL2xpYnJhcmllcy5qc29uT1VUUFVUX0xBTkdVQUdFX0RBUlREYXJ0QlVJTERfSURkaWFnbm9zdGljSGFuZGxlcmV4aXRGdW5jY29tcGlsZUZ1bmNlbmFibGVXcml0ZVN0cmluZ19FWElUX1NJR05BTGV4dHJhY3RQYXJhbWV0ZXJpc09wdGlvbmFsQXJndW1lbnRtXigtW2EtekEtWl18LS0uKz0pKC4qKWZpcnN0TWF0Y2g9PVVua25vd24gb3B0aW9uICIiLltdZXh0cmFjdFBhdGhpc0RpcmVjdG9yeXBhdGhlbmRzV2l0aC9wYXJzZUNvbW1hbmRMaW5laGFuZGxlcnNhcmd2cGF0dGVybnNoYW5kbGVyYWRkXihqb2luKSR8XigpJGFyZ3VtZW50c2l0ZXJhdG9ybW92ZU5leHRjdXJyZW50bWF0Y2hncm91cENvdW50bGVuZ3RoaTwrSW50ZXJuYWwgZXJyb3I6ICIiIGRpZCBub3QgbWF0Y2hjb21waWxla2VybmVsSW5pdGlhbGl6ZWRDb21waWxlclN0YXRld2FsbGNsb2Nrc3RhcnRsaWJyYXJpZXNTcGVjaWZpY2F0aW9uVXJpcmVzb2x2ZWxpYi9saWJyYXJpZXMuanNvbm91dHB1dFNwZWNpZmllZG91dHNvdXJjZU1hcE91dHJlYWREYXRhVXJpd3JpdGVEYXRhVXJpcmVhZENvZGVnZW5Vcml3cml0ZUNvZGVnZW5Vcmljb2RlZ2VuU2hhcmRjb2RlZ2VuU2hhcmRzYmF6ZWxQYXRoc3BhY2thZ2VDb25maWdwYWNrYWdlUm9vdG9wdGlvbnN3YW50SGVscHdhbnRWZXJzaW9udHJ1c3RUeXBlQW5ub3RhdGlvbnNjaGVja2VkTW9kZXN0cm9uZ01vZGVoaW50c3ZlcmJvc2V0aHJvd09uRXJyb3J0aHJvd09uRXJyb3JDb3VudHNob3dXYXJuaW5nc3Nob3dIaW50c2VuYWJsZUNvbG9yc29wdGltaXphdGlvbkxldmVscGxhdGZvcm1CaW5hcmllc2Vudmlyb25tZW50cmVhZFN0cmF0ZWd5d3JpdGVTdHJhdGVneXBhc3NUaHJvdWdoaWdub3JlT3B0aW9uLS1idWlsZC1pZD1zZXRMaWJyYXJ5U3BlY2lmaWNhdGlvblVyaXNldFBhY2thZ2VSb290c2V0UGFja2FnZUNvbmZpZ3NldE91dHB1dC1vRXJyb3I6IE1pc3NpbmcgZmlsZSBhZnRlciAtbyBvcHRpb24uc2V0T3B0aW1pemF0aW9uTGV2ZWx2YWx1ZT5FcnJvcjogVW5zdXBwb3J0ZWQgb3B0aW1pemF0aW9uIGxldmVsICcnLCBzdXBwb3J0ZWQgbGV2ZWxzIGFyZTogMCwgMSwgMiwgMywgNHNldE91dHB1dFR5cGUtLW91dHB1dC10eXBlPWRhcnQtLW91dHB1dC10eXBlPWRhcnQtbXVsdGktLW91dHB1dC10eXBlPWRhcnQgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gSXQgd2FzIGRlcHJlY2F0ZWQgc2luY2UgRGFydCAxLjExIGFuZCByZW1vdmVkIGluIERhcnQgMS4xOS5zZXRTdHJpcE9wdGlvbiAnLS1mb3JjZS1zdHJpcCcgaXMgbm90IGluIHVzZSBub3cgdGhhdC0tb3V0cHV0LXR5cGU9ZGFydCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLnNldEJhemVsUGF0aHNwYXRoc2FkZEFsbHNwbGl0LGdldERlcHNPdXRwdXRzb3VyY2VGaWxlc2ZpbGVuYW1lc21hcHVyaXRvTGlzdHNvcnQKc2V0QWxsb3dOYXRpdmVFeHRlbnNpb25zT3B0aW9uICctLWFsbG93LW5hdGl2ZS1leHRlbnNpb25zJyBpcyBub3Qgc3VwcG9ydGVkLnNldFZlcmJvc2VfLS12ZXJib3Nlc2V0VHJ1c3RUeXBlQW5ub3RhdGlvbnNzZXRDaGVja2VkTW9kZWFkZEluRW52aXJvbm1lbnRlcUluZGV4aW5kZXhPZj1uYW1lc3Vic3RyaW5nW109c2V0Q2F0ZWdvcmllc2NhdGVnb3JpZXNpc1NlcnZlck1vZGVzaW5nbGVTZXJ2ZXJUaGUgLS1jYXRlZ29yaWVzIGZsYWcgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSBkZWxldGVkIGluIGEgZnV0dXJlIHJlbGVhc2UsIHBsZWFzZSB1c2UgJy0tc2VydmVyLW1vZGUnIGluc3RlYWQgb2YgJy0tY2F0ZWdvcmllcz1TZXJ2ZXInLlRoZSAtLWNhdGVnb3JpZXMgZmxhZyBpcyBkZXByZWNhdGVkLCBzZWUgdGhlIHVzYWdlIGZvciBkZXRhaWxzLnNldFBsYXRmb3JtQmluYXJpZXNzZXRSZWFkRGF0YS0tcmVhZC1kYXRhc2V0RGlsbERlcGVuZGVuY2llc2RlcGVuZGVuY2llc3VyaURlcGVuZGVuY2llc3NwbGl0TWFwSm9pbm9uTWF0Y2hvbk5vbk1hdGNocC0tZGlsbC1kZXBlbmRlbmNpZXNzZXRDZmVPbmx5Q2Fubm90IHVzZSAtLWNmZS1vbmx5IGFuZCB3cml0ZSBzZXJpYWxpemVkIGRhdGEgc2ltdWx0YW5lb3VzbHkuYW5kIHdyaXRlIHNlcmlhbGl6ZWQgY29kZWdlbiBzaW11bHRhbmVvdXNseS5zZXRSZWFkQ29kZWdlbi0tcmVhZC1jb2RlZ2Vuc2V0V3JpdGVEYXRhQ2Fubm90IHdyaXRlIHNlcmlhbGl6ZWQgZGF0YSBhbmQgY29kZWdlbiBzaW11bHRhbmVvdXNseS4tLXdyaXRlLWRhdGFzZXRXcml0ZUNvZGVnZW5DYW5ub3Qgd3JpdGUgc2VyaWFsaXplZCBkYXRhIGFuZCBjb2RlZ2VuIGRhdGEgc2ltdWx0YW5lb3VzbHkuLS13cml0ZS1jb2RlZ2Vuc2V0Q29kZWdlblNoYXJkc2V0Q29kZWdlblNoYXJkc3NldER1bXBJbmZvLS1kdW1wLWluZm89anNvbj1iaW5hcnlFcnJvcjogVW5zdXBwb3J0ZWQgZHVtcC1pbmZvIGZvcm1hdCAnc3VwcG9ydGVkIGZvcm1hdHMgYXJlOiBqc29uIG9yIGJpbmFyeWhhbmRsZVRocm93T25FcnJvcnBhcmFtZXRlcmNvdW50aGFuZGxlU2hvcnRPcHRpb25zc2hvcnRPcHRpb25zc2hvcnRPcHRpb252aD9jLS1lbmFibGUtY2hlY2tlZC1tb2RlLS1taW5pZnktW2Nodm0/XSstLXRocm93LW9uLWVycm9yKD86PVswLTldKyk/LS1zdXBwcmVzcy13YXJuaW5ncy0tZmF0YWwtd2FybmluZ3MtLXN1cHByZXNzLWhpbnRzLS1vdXRwdXQtdHlwZT1kYXJ0fC0tb3V0cHV0LXR5cGU9ZGFydC1tdWx0aXwtLW91dHB1dC10eXBlPWpzLS11c2Uta2VybmVsLS1wbGF0Zm9ybS1iaW5hcmllcz0uKy0tbm8tZnJlcXVlbmN5LWJhc2VkLW1pbmlmaWNhdGlvbi0tc2hvdy1pbnRlcm5hbC1wcm9ncmVzcy0tdmVyc2lvbi0tbGlicmFyeS1yb290PS4rLS1saWJyYXJpZXMtc3BlYz0uKz0uK3wtLWNvZGVnZW4tc2hhcmQtLWNvZGVnZW4tc2hhcmRzLS1kZWJ1Zy1nbG9iYWwtaW5mZXJlbmNlLS1vdXQ9Lit8LW8uKi1PLiotLWFsbG93LW1vY2stY29tcGlsYXRpb24tLWZhc3Qtc3RhcnR1cC0tZ2VuZXJpYy1tZXRob2Qtc3ludGF4LS1pbml0aWFsaXppbmctZm9ybWFsLWFjY2Vzcy0tbm8tbWluaWZ5LS1wcmVzZXJ2ZS11cmlzLS1mb3JjZS1zdHJpcD0uKi0tZGlzYWJsZS1kaWFnbm9zdGljLWNvbG9ycy0tZW5hYmxlLWRpYWdub3N0aWMtY29sb3JzLS1lbmFibGVbXy1dY2hlY2tlZFtfLV1tb2RlfC0tY2hlY2tlZC0tZW5hYmxlLWFzc2VydHMtLXRydXN0LXR5cGUtYW5ub3RhdGlvbnMtLXRydXN0LXByaW1pdGl2ZXMtLWV4cGVyaW1lbnRhbC10cnVzdC1qcy1pbnRlcm9wLXR5cGUtYW5ub3RhdGlvbnMtLWhlbHB8L1w/fC9oLS1wYWNrYWdlcz0uKy0tcGFja2FnZS1yb290PS4rfC1wListLW5vLXNvdXJjZS1tYXBzLS1yZXNvbHV0aW9uLWlucHV0PS4rLS1iYXplbC1wYXRocz0uKy0tcmVzb2x2ZS1vbmx5LS1kaXNhYmxlLW5hdGl2ZS1saXZlLXR5cGUtYW5hbHlzaXMtLWNhdGVnb3JpZXM9LiotLWRpc2FibGUtaW5saW5pbmctLWRpc2FibGUtcHJvZ3JhbS1zcGxpdC0tZGlzYWJsZS10eXBlLWluZmVyZW5jZS0tdXNlLXRyaXZpYWwtYWJzdHJhY3QtdmFsdWUtZG9tYWluLS1kaXNhYmxlLXJ0aS1vcHRpbWl6YXRpb24tLXRlcnNlLS1kZWZlcnJlZC1tYXA9ListLW5ldy1kZWZlcnJlZC1zcGxpdC0tcmVwb3J0LWludmFsaWQtZGVmZXJyZWQtdHlwZXMtLWRpc2FsbG93LXVuc2FmZS1ldmFsLS1zaG93LXBhY2thZ2Utd2FybmluZ3N8LS1zaG93LXBhY2thZ2Utd2FybmluZ3M9LiotLWVuYWJsZS1leHBlcmltZW50fC0tZW5hYmxlLWV4cGVyaW1lbnQ9LiotLWNzcC0tZW5hYmxlLWV4cGVyaW1lbnRhbC1taXJyb3JzLS1hc3NlcnQtbWVzc2FnZS0tc3Ryb25nLS1wcmV2aWV3LWRhcnQtMi0tb21pdC1pbXBsaWNpdC1jaGVja3MtLW9taXQtYXMtY2FzdHMtLWxheC1ydW50aW1lLXR5cGUtdG8tc3RyaW5nLS1iZW5jaG1hcmtpbmctcHJvZHVjdGlvbi0tYmVuY2htYXJraW5nLXgtLWNvbmRpdGlvbmFsLWRpcmVjdGl2ZXMtLWVuYWJsZS1hc3luYy0tZW5hYmxlLW51bGwtYXdhcmUtb3BlcmF0b3JzLS1lbmFibGUtZW51bS0tZ2VuZXJhdGUtY29kZS13aXRoLWNvbXBpbGUtdGltZS1lcnJvcnMtLXVzZS1tdWx0aS1zb3VyY2UtaW5mby0tdXNlLW5ldy1zb3VyY2UtaW5mby0tdGVzdC1tb2RlLS1leHBlcmltZW50YWwtdHJhY2stYWxsb2NhdGlvbnMtLWV4cGVyaW1lbnRhbC1hbGxvY2F0aW9ucy1wYXRoLS1leHBlcmltZW50LWNvZGUtMS0tZXhwZXJpbWVudC1jb2RlLTItLWV4cGVyaW1lbnQtY29kZS0zLS1leHBlcmltZW50LWNhbGwtaW5zdHJ1bWVudGF0aW9uLS1leHBlcmltZW50LW5ldy1ydGktRC4rPS4qLS4qVW5rbm93biBvcHRpb24gJycuLippbnB1dFByb3ZpZGVyJyBpcyBub3QgbmVlZGVkIGluIERhcnQgMi4wLiBUbyBlbmFibGUgYXNzZXJ0aW9ucyB1c2UgJycgaW5zdGVhZC4nIGlzIG5vdCBhdmFpbGFibGUgaW4gRGFydCAyLjAuIFRyeSB1c2luZyAnaGludGluZm9pc0VtcHR5Tm8gRGFydCBmaWxlIHNwZWNpZmllZC5leHRyYXN1Ymxpc3RFeHRyYSBhcmd1bWVudHM6ICcgbWF5IG5vdCBiZSB1c2VkIGluIGNoZWNrZWQgbW9kZS5DYW5ub3Qgc3BlY2lmeSBib3RoICctLXBhY2thZ2Utcm9vdCcgYW5kICctLXBhY2thZ2VzLnNjcmlwdE5hbWVvdXQuanNvdXQuZGlsbGFuZCByZWFkIHNlcmlhbGl6ZWQgZGF0YSBzaW11bHRhbmVvdXNseS5hbmQgcmVhZCBzZXJpYWxpemVkIGNvZGVnZW4gc2ltdWx0YW5lb3VzbHkuLmRhdGFDYW5ub3QgcmVhZCBhbmQgd3JpdGUgc2VyaWFsaXplZCBkYXRhIHNpbXVsdGFuZW91c2x5LkNhbm5vdCByZWFkIHNlcmlhbGl6ZWQgY29kZWdlbiBhbmQgd3JpdGUgc2VyaWFsaXplZCBkYXRhIHNpbXVsdGFuZW91c2x5Li5jb2RlQ2Fubm90IHJlYWQgYW5kIHdyaXRlIHNlcmlhbGl6ZWQgY29kZWdlbiBzaW11bHRhbmVvdXNseS5DYW4gb25seSB3cml0ZSBzZXJpYWxpemVkIGNvZGVnZW4gZnJvbSBzZXJpYWxpemVkIGRhdGEuQ2Fubm90IHdyaXRlIHNlcmlhbGl6ZWQgY29kZWdlbiB3aXRob3V0IHNldHRpbmcgLjw9IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLj49IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAtLW91dD0ubWFwLS1zb3VyY2UtbWFwPW91dHB1dFByb3ZpZGVyb25JbmZvb25GYWlsdXJlY29tcGlsYXRpb25Eb25lcmVzdWx0aXNTdWNjZXNzQ29tcGlsYXRpb24gZmFpbGVkLi5kZXBzZ2V0U291cmNlVXJpc2lucHV0aW5wdXRTaXplcHJvY2Vzc05hbWVpbnB1dE5hbWVvdXRwdXRTaXplcHJpbWFyeU91dHB1dFNpemVvdXRwdXROYW1lc3VtbWFyeWNoYXJhY3RlcnMgRGFydGRhcnRDaGFyYWN0ZXJzUmVhZERhcnQgZmlsZSBieXRlcyBkYXRhZGF0YUlucHV0RGF0YSBmaWxlcyAgYW5kIGNvZGVJbnB1dCwgWzAtLV0gQ29tcGlsZWRjaGFyYWN0ZXJzIEphdmFTY3JpcHR0b3RhbENoYXJhY3RlcnNXcml0dGVuSmF2YVNjcmlwdHRvdGFsQ2hhcmFjdGVyc1dyaXR0ZW5QcmltYXJ5b3V0cHV0Y29tcGlsZWQgdG8gSmF2YVNjcmlwdDoga2VybmVsIGJ5dGVzdG90YWxEYXRhV3JpdHRlbmNvbXBpbGVkIHRvIGRpbGw6IFNlcmlhbGl6ZWRkYXRhT3V0cHV0c2VyaWFsaXplZCB0byBkaWxsIGFuZCBkYXRhOiBjb2RlT3V0cHV0c2VyaWFsaXplZCB0byBjb2RlZ2VuIGRhdGE6ICB0byAgaW4gZWxhcHNlZCBzZWNvbmRzaW4gZmlsZXNhbGxPdXRwdXRGaWxlc2pzQ291bnR3aGVyZWYuanNFbWl0dGVkIGZpbGUgIEphdmFTY3JpcHQgZmlsZXMuc2NyaXB0YXV0b1JlYWRGaWxlVXJpZW50cnlQb2ludHRoZW5fZm9ybWF0Q2hhcmFjdGVyQ291bnRzZXBhcmF0b3J0ZXh0cG9zaXRpb25fZm9ybWF0RHVyYXRpb25Bc1NlY29uZHNkdXJhdGlvbndpZHRoc2Vjb25kc2luTWlsbGlzZWNvbmRzZGlnaXRzdG9TdHJpbmdBc0ZpeGVkd3JpdGVTdHJpbmdzY2hlbWVmaWxlVW5oYW5kbGVkIHNjaGVtZSB0b0ZpbGVQYXRob3BlblN5bmNtb2Rld3JpdGVTdHJpbmdTeW5jY2xvc2VTeW5jZmFpbHJlcG9ydHVuYXJ5LWVycm9yRXJyb3I6IGNvbXBpbGVyTWFpbjphc3luY19jb21wbGV0ZXI6cmV0dXJuX3ZhbHVlOmFzeW5jX3N0YWNrX3RyYWNlOmFzeW5jX29wX3RoZW46YXN5bmNfb3BfZXJyb3I6YXdhaXRfanVtcF92YXI6YXdhaXRfY3R4X3ZhcjpzYXZlZF90cnlfY29udGV4dF92YXIwOmFzeW5jX29wOnJlc3VsdDpleGNlcHRpb246c3RhY2tfdHJhY2Vhbnlhc3RhcnRzV2l0aC0tbGlicmFyaWVzLXNwZWM9aXNTY2hlbWVwYWNrYWdlbGlicmFyaWVzSnNvbmNvbXBsZXRlRXJyb3JmdXR1cmVoZWxwVXNhZ2U6IGRhcnQyanMgW29wdGlvbnNdIGRhcnRmaWxlCgpDb21waWxlcyBEYXJ0IHRvIEphdmFTY3JpcHQuCgpDb21tb24gb3B0aW9uczoKICAtbyA8ZmlsZT4gR2VuZXJhdGUgdGhlIG91dHB1dCBpbnRvIDxmaWxlPi4KICAtbSAgICAgICAgR2VuZXJhdGUgbWluaWZpZWQgb3V0cHV0LgogIC1oICAgICAgICBEaXNwbGF5IHRoaXMgbWVzc2FnZSAoYWRkIC12IGZvciBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb3B0aW9ucykudmVyYm9zZUhlbHBVc2FnZTogZGFydDJqcyBbb3B0aW9uc10gZGFydGZpbGUKCkNvbXBpbGVzIERhcnQgdG8gSmF2YVNjcmlwdC4KClN1cHBvcnRlZCBvcHRpb25zOgogIC1oLCAvaCwgLz8sIC0taGVscAogICAgRGlzcGxheSB0aGlzIG1lc3NhZ2UgKGFkZCAtdiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgYWxsIG9wdGlvbnMpLgoKICAtbyA8ZmlsZT4sIC0tb3V0PTxmaWxlPgogICAgR2VuZXJhdGUgdGhlIG91dHB1dCBpbnRvIDxmaWxlPi4KCiAgLW0sIC0tbWluaWZ5CiAgICBHZW5lcmF0ZSBtaW5pZmllZCBvdXRwdXQuCgogIC0tZW5hYmxlLWFzc2VydHMKICAgIEVuYWJsZSBhc3NlcnRpb25zLgoKICAtdiwgLS12ZXJib3NlCiAgICBEaXNwbGF5IHZlcmJvc2UgaW5mb3JtYXRpb24uCgogIC1EPG5hbWU+PTx2YWx1ZT4KICAgIERlZmluZSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KCiAgLS12ZXJzaW9uCiAgICBEaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24uCgogIC0tcGFja2FnZXM9PHBhdGg+CiAgICBQYXRoIHRvIHRoZSBwYWNrYWdlIHJlc29sdXRpb24gY29uZmlndXJhdGlvbiBmaWxlLCB3aGljaCBzdXBwbGllcyBhIG1hcHBpbmcKICAgIG9mIHBhY2thZ2UgbmFtZXMgdG8gcGF0aHMuCgogIC0tc3VwcHJlc3Mtd2FybmluZ3MKICAgIERvIG5vdCBkaXNwbGF5IGFueSB3YXJuaW5ncy4KCiAgLS1mYXRhbC13YXJuaW5ncwogICAgVHJlYXQgd2FybmluZ3MgYXMgY29tcGlsYXRpb24gZXJyb3JzLgoKICAtLXN1cHByZXNzLWhpbnRzCiAgICBEbyBub3QgZGlzcGxheSBhbnkgaGludHMuCgogIC0tZW5hYmxlLWRpYWdub3N0aWMtY29sb3JzCiAgICBBZGQgY29sb3JzIHRvIGRpYWdub3N0aWMgbWVzc2FnZXMuCgogIC0tdGVyc2UKICAgIEVtaXQgZGlhZ25vc3RpY3Mgd2l0aG91dCBzdWdnZXN0aW9ucyBmb3IgaG93IHRvIGdldCByaWQgb2YgdGhlIGRpYWdub3NlZAogICAgcHJvYmxlbXMuCgogIC0tc2hvdy1wYWNrYWdlLXdhcm5pbmdzCiAgICBTaG93IHdhcm5pbmdzIGFuZCBoaW50cyBnZW5lcmF0ZWQgZnJvbSBwYWNrYWdlcy4KCiAgLS1jc3AKICAgIERpc2FibGUgZHluYW1pYyBnZW5lcmF0aW9uIG9mIGNvZGUgaW4gdGhlIGdlbmVyYXRlZCBvdXRwdXQuIFRoaXMgaXMKICAgIG5lY2Vzc2FyeSB0byBzYXRpc2Z5IENTUCByZXN0cmljdGlvbnMgKHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1AvKS4KCiAgLS1uby1zb3VyY2UtbWFwcwogICAgRG8gbm90IGdlbmVyYXRlIGEgc291cmNlIG1hcCBmaWxlLgoKICAtTzwwLDEsMiwzLDQ+CiAgICBDb250cm9scyBvcHRpbWl6YXRpb25zIHRoYXQgY2FuIGhlbHAgcmVkdWNlIGNvZGUtc2l6ZSBhbmQgaW1wcm92ZQogICAgcGVyZm9ybWFuY2Ugb2YgdGhlIGdlbmVyYXRlZCBjb2RlIGZvciBkZXBsb3ltZW50LgoKICAgIC1PMAogICAgICAgRGlzYWJsZXMgYWxsIG9wdGltaXphdGlvbnMuIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBkYXJ0MmpzIHdpdGggdGhlc2UKICAgICAgIGV4dHJhIGZsYWdzOgogICAgICAgIC0tZGlzYWJsZS1pbmxpbmluZwogICAgICAgIC0tZGlzYWJsZS10eXBlLWluZmVyZW5jZQogICAgICAgIC0tZGlzYWJsZS1ydGktb3B0aW1pemF0aW9ucwoKCiAgICAgICBTb21lIG9wdGltaXphdGlvbnMgY2Fubm90IGJlIGRpc3NhYmxlZCBhdCB0aGlzIHRpbWUsIGFzIHdlIGFkZCB0aGUgb3B0aW9uCiAgICAgICB0byBkaXNhYmxlIHRoZW0sIHRoZXkgd2lsbCBiZSBhZGRlZCBoZXJlIGFzIHdlbGwuCgogICAgLU8xCiAgICAgICBFbmFibGVzIGRlZmF1bHQgb3B0aW1pemF0aW9ucy4gRXF1aXZhbGVudCB0byBjYWxsaW5nIGRhcnQyanMgd2l0aCBubwogICAgICAgZXh0cmEgZmxhZ3MuCgogICAgLU8yCiAgICAgICBFbmFibGVzIG9wdGltaXphdGlvbnMgdGhhdCByZXNwZWN0IHRoZSBsYW5ndWFnZSBzZW1hbnRpY3MgYW5kIGFyZSBzYWZlCiAgICAgICBmb3IgYWxsIHByb2dyYW1zLiBJdCBob3dldmVyIGNoYW5nZXMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0eXBlcywKICAgICAgIHdoaWNoIHdpbGwgbm8gbG9uZ2VyIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgRGFydCBWTSBvciBEREMuCgogICAgICAgRXF1aXZhbGVudCB0byBjYWxsaW5nIGRhcnQyanMgd2l0aCB0aGVzZSBleHRyYSBmbGFnczoKICAgICAgICAtLW1pbmlmeQogICAgICAgIC0tbGF4LXJ1bnRpbWUtdHlwZS10by1zdHJpbmcKCiAgICAtTzMKICAgICAgIEVuYWJsZXMgb3B0aW1pemF0aW9ucyB0aGF0IHJlc3BlY3QgdGhlIGxhbmd1YWdlIHNlbWFudGljcyBvbmx5IG9uCiAgICAgICBwcm9ncmFtcyB0aGF0IGRvbid0IGV2ZXIgdGhyb3cgYW55IHN1YnR5cGUgb2YgYEVycm9yYC4gIFRoZXNlCiAgICAgICBvcHRpbWl6YXRpb25zIGltcHJvdmUgdGhlIGdlbmVyYXRlZCBjb2RlLCBidXQgdGhleSBtYXkgY2F1c2UgcHJvZ3JhbXMgdG8KICAgICAgIGJlaGF2ZSB1bmV4cGVjdGVkbHkgaWYgdGhpcyBhc3N1bXB0aW9uIGlzIG5vdCBtZXQuICBUbyB1c2UgdGhpcwogICAgICAgb3B0aW9uLCB3ZSByZWNvbW1lbmQgdGhhdCB5b3UgcHJvcGVybHkgdGVzdCB5b3VyIGFwcGxpY2F0aW9uIGZpcnN0CiAgICAgICB3aXRob3V0IGl0LCBhbmQgZW5zdXJlIHRoYXQgbm8gc3VidHlwZSBvZiBgRXJyb3JgIChzdWNoIGFzIGBUeXBlRXJyb3JgKQogICAgICAgaXMgZXZlciB0aHJvd24uCgogICAgICAgRXF1aXZhbGVudCB0byBjYWxsaW5nIGRhcnQyanMgd2l0aCB0aGVzZSBleHRyYSBmbGFnczoKICAgICAgICAgLU8yCiAgICAgICAgIC0tb21pdC1pbXBsaWNpdC1jaGVja3MKCiAgICAtTzQKICAgICAgIEVuYWJsZXMgbW9yZSBhZ2dyZXNzaXZlIG9wdGltaXphdGlvbnMgdGhhbiAtTzMsIGJ1dCB3aXRoIHRoZSBzYW1lCiAgICAgICBhc3N1bXB0aW9ucy4gVGhlc2Ugb3B0aW1pemF0aW9ucyBhcmUgb24gYSBzZXBhcmF0ZSBncm91cCBiZWNhdXNlIHRoZXkKICAgICAgIGFyZSBtb3JlIHN1c2NlcHRpYmxlIHRvIHZhcmlhdGlvbnMgaW4gaW5wdXQgZGF0YS4gVG8gdXNlIHRoaXMgb3B0aW9uIHdlCiAgICAgICByZWNvbW1lbmQgdG8gcGF5IHNwZWNpYWwgYXR0ZW50aW9uIHRvIHRlc3QgZWRnZSBjYXNlcyBpbiB1c2VyIGlucHV0LgoKICAgICAgIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBkYXJ0MmpzIHdpdGggdGhlc2UgZXh0cmEgZmxhZ3M6CiAgICAgICAgIC1PMwogICAgICAgICAtLXRydXN0LXByaW1pdGl2ZXMKCiAgICBXaGlsZSBzb21lIG9mIHRoZSBpbmRpdmlkdWFsIG9wdGltaXphdGlvbnMgYW5kIGZsYWdzIG1heSBjaGFuZ2Ugd2l0aCB0aW1lLAogICAgd2UgaW50ZW5kIHRvIGtlZXAgdGhlIC1PKiBmbGFncyBzdGFibGUuIE5ldyBzYWZlIG9wdGltaXphdGlvbnMgbWF5IGJlIGFkZGVkCiAgICBvbiBhbnkgbGV2ZWwsIGFuZCBvcHRpbWl6YXRpb25zIHRoYXQgb25seSB3b3JrIG9uIHNvbWUgcHJvZ3JhbXMgbWF5IG1vdmUgdXAKICAgIGZyb20gb25lIGxldmVsIHRvIHRoZSBuZXh0IChmb3IgaW5zdGFuY2UsIG9uY2UgYWx0ZXJuYXRpdmUgc2FmZQogICAgb3B0aW1pemF0aW9ucyBhcmUgaW1wbGVtZW50ZWQsIGBvbWl0LWltcGxpY2l0LWNoZWNrc2AgbWF5IGJlIHJlbW92ZWQgb3IgbWF5CiAgICBtb3ZlIHRvIHRoZSBPNCBsZXZlbCkuCgpUaGUgZm9sbG93aW5nIGluZGl2aWR1YWwgb3B0aW9ucyBhcmUgaW5jbHVkZWQgaW4gc29tZSBvZiB0aGUgLU8gb3B0aW1pemF0aW9uCmxldmVscyBhYm92ZS4gVGhleSBoZWxwIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUsIGJ1dCB0aGV5IG1heQpjYXVzZSBwcm9ncmFtcyB0byBiZWhhdmUgdW5leHBlY3RlZGx5IGlmIGFzc3VtcHRpb25zIGFyZSBub3QgbWV0LiBPbmx5IHR1cm4gb24KdGhlc2UgZmxhZ3MgaWYgeW91IGhhdmUgZW5vdWdoIHRlc3QgY292ZXJhZ2UgdG8gZW5zdXJlIHRoZXkgYXJlIHNhZmUgdG8gdXNlOgoKICAtLW9taXQtaW1wbGljaXQtY2hlY2tzCiAgICBPbWl0IGltcGxpY2l0IHJ1bnRpbWUgY2hlY2tzLCBzdWNoIGFzIHBhcmFtZXRlciBjaGVja3MgYW5kIGltcGxpY2l0CiAgICBkb3duY2FzdHMuIFRoZXNlIGNoZWNrcyBhcmUgaW5jbHVkZWQgYnkgZGVmYXVsdCBpbiBEYXJ0IDIuMC4gQnkKICAgIHVzaW5nIHRoaXMgZmxhZyB0aGUgY2hlY2tzIGFyZSByZW1vdmVkLCBob3dldmVyIHRoZSBjb21waWxlciB3aWxsIGFzc3VtZQogICAgdGhhdCBhbGwgc3VjaCBjaGVja3Mgd2VyZSB2YWxpZCBhbmQgbWF5IHVzZSB0aGlzIGluZm9ybWF0aW9uIGZvcgogICAgb3B0aW1pemF0aW9ucy4gVXNlIHRoaXMgb3B0aW9uIG9ubHkgaWYgeW91IGhhdmUgZW5vdWdoIHRlc3RpbmcgdG8gZW5zdXJlCiAgICB0aGF0IHlvdXIgcHJvZ3JhbSB3b3JrcyB3aXRoIHRoZSBjaGVja3MuCgogIC0tdHJ1c3QtcHJpbWl0aXZlcwogICAgQXNzdW1lIHRoYXQgb3BlcmF0aW9ucyBvbiBudW1iZXJzLCBzdHJpbmdzLCBhbmQgbGlzdHMgaGF2ZSB2YWxpZCBpbnB1dHMuCiAgICBUaGlzIG9wdGlvbiBhbGxvd3MgdGhlIGNvbXBpbGVyIHRvIGRyb3AgcnVudGltZSBjaGVja3MgZm9yIHRob3NlIG9wZXJhdGlvbnMuCiAgICBOb3RlOiBhIHdlbGwtdHlwZWQgcHJvZ3JhbSBpcyBub3QgZ3VhcmFudGVlZCB0byBoYXZlIHZhbGlkIGlucHV0cy4gRm9yCiAgICBleGFtcGxlLCBhbiBpbnQgaW5kZXggYXJndW1lbnQgbWF5IGJlIG51bGwgb3Igb3V0IG9mIHJhbmdlLgoKICAtLWxheC1ydW50aW1lLXR5cGUtdG8tc3RyaW5nCiAgICBPbWl0cyByZWlmaWVkIGNsYXNzIHR5cGUgYXJndW1lbnRzIHdoZW4gdGhlc2UgYXJlIG9ubHkgbmVlZGVkIGZvciBgdG9TdHJpbmdgCiAgICBvbiBgcnVudGltZVR5cGVgLiBUaGlzIGlzIHVzZWZ1bCBpZiBgcnVudGltZVR5cGUudG9TdHJpbmcoKWAgaXMgb25seSB1c2VkCiAgICBmb3IgZGVidWdnaW5nLiBOb3RlIHRoYXQgc2VtYW50aWNzIG9mIG90aGVyIHVzZXMgb2YgYC5ydW50aW1lVHlwZWAsIGZvcgogICAgaW5zdGFuY2UgYGEucnVudGltZVR5cGUgPT0gYi5ydW50aW1lVHlwZWAsIGlzIG5vdCBhZmZlY3RlZCBieSB0aGlzIGZsYWcuCgpUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIG9ubHkgdXNlZCBmb3IgY29tcGlsZXIgZGV2ZWxvcG1lbnQgYW5kIG1heQpiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb246CgogIC0tdGhyb3ctb24tZXJyb3IKICAgIFRocm93IGFuIGV4Y2VwdGlvbiBpZiBhIGNvbXBpbGUtdGltZSBlcnJvciBpcyBkZXRlY3RlZC4KCiAgLS1saWJyYXJpZXMtc3BlYz08ZmlsZT4KICAgIEEgLmpzb24gZmlsZSBjb250YWluaW5nIHRoZSBsaWJyYXJpZXMgc3BlY2lmaWNhdGlvbiBmb3IgZGFydDJqcy4KCiAgLS1hbGxvdy1tb2NrLWNvbXBpbGF0aW9uCiAgICBEbyBub3QgZ2VuZXJhdGUgYSBjYWxsIHRvIG1haW4gaWYgZWl0aGVyIG9mIHRoZSBmb2xsb3dpbmcKICAgIGxpYnJhcmllcyBhcmUgdXNlZDogZGFydDpkb20sIGRhcnQ6aHRtbCBkYXJ0OmlvLgoKICAtLWRpc2FibGUtbmF0aXZlLWxpdmUtdHlwZS1hbmFseXNpcwogICAgRGlzYWJsZSB0aGUgb3B0aW1pemF0aW9uIHRoYXQgcmVtb3ZlcyB1bnVzZWQgbmF0aXZlIHR5cGVzIGZyb20gZGFydDpodG1sCiAgICBhbmQgcmVsYXRlZCBsaWJyYXJpZXMuCgogIC0tc2VydmVyLW1vZGUKICAgIENvbXBpbGUgd2l0aCBzZXJ2ZXIgc3VwcG9ydC4gVGhlIGNvbXBpbGVyIHdpbGwgdXNlIGEgbGlicmFyeSBzcGVjaWZpY2F0aW9uCiAgICB0aGF0IGRpc2FibGVzIGRhcnQ6aHRtbCBidXQgc3VwcG9ydHMgZGFydDpqcyBpbiBjb25kaXRpb25hbCBpbXBvcnRzLgoKICAtLWNhdGVnb3JpZXM9PGNhdGVnb3JpZXM+CiAgICAoZGVwcmVjYXRlZCkKICAgIFVzZSAnLS1zZXJ2ZXItbW9kZScgaW5zdGVhZCBvZiAnLS1jYXRlZ29yaWVzPVNlcnZlcicuIEFsbCBvdGhlciBjYXRlZ29yeQogICAgdmFsdWVzIGhhdmUgbm8gZWZmZWN0IG9uIHRoZSBjb21waWxlciBiZWhhdmlvci4KCiAgLS1kZWZlcnJlZC1tYXA9PGZpbGU+CiAgICBHZW5lcmF0ZXMgYSBqc29uIGZpbGUgd2l0aCBhIG1hcHBpbmcgZnJvbSBlYWNoIGRlZmVycmVkIGltcG9ydCB0byBhIGxpc3Qgb2YKICAgIHRoZSBwYXJ0LmpzIGZpbGVzIHRoYXQgd2lsbCBiZSBsb2FkZWQuCgogIC0tZHVtcC1pbmZvWz08Zm9ybWF0Pl0KICAgIEdlbmVyYXRlcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZ2VuZXJhdGVkIGNvZGUuICdmb3JtYXQnIGNhbiBiZSBlaXRoZXIKICAgICdqc29uJyBvciAnYmluYXJ5Jy4KICAgIFlvdSBjYW4gaW5zcGVjdCB0aGUgZ2VuZXJhdGVkIGRhdGEgdXNpbmcgdG9vbHMgZnJvbSAncGFja2FnZTpkYXJ0MmpzX2luZm8nLgoKICAtLWdlbmVyYXRlLWNvZGUtd2l0aC1jb21waWxlLXRpbWUtZXJyb3JzCiAgICBHZW5lcmF0ZXMgb3V0cHV0IGV2ZW4gaWYgdGhlIHByb2dyYW0gY29udGFpbnMgY29tcGlsZS10aW1lIGVycm9ycy4gVXNlIHRoZQogICAgZXhpdCBjb2RlIHRvIGRldGVybWluZSBpZiBjb21waWxhdGlvbiBmYWlsZWQuCgogIC0tbm8tZnJlcXVlbmN5LWJhc2VkLW1pbmlmaWNhdGlvbgogICAgRXhwZXJpbWVudGFsLiAgRGlzYWJsZWQgdGhlIG5ldyBmcmVxdWVuY3kgYmFzZWQgbWluaWZ5aW5nIG5hbWVyIGFuZCB1c2UgdGhlCiAgICBvbGQgbmFtZXIgaW5zdGVhZC4KdHJpbWhlbHBBbmRFeGl0dmVyc2lvbjxub24tU0RLIGJ1aWxkPkRhcnQtdG8tSmF2YVNjcmlwdCBjb21waWxlciAoZGFydDJqcykgdmVyc2lvbjogaGVscEFuZEZhaWxtYWlubGFzdC0tYmF0Y2hpbnRlcm5hbE1haW5vbkVycm9yZXhjZXB0aW9udHJhY2VUaGUgY29tcGlsZXIgY3Jhc2hlZDogaWdub3JlZFRoZSBjb21waWxlciBjcmFzaGVkOiBlcnJvciB3aGlsZSBwcmludGluZyBleGNlcHRpb25jYXRjaEVycm9yYmF0Y2hNYWluYmF0Y2hBcmd1bWVudHNlcnJvckNvZGVzdHJlYW10cmFuc2Zvcm1kZWNvZGVyc3Vic2NyaXB0aW9ubGlzdGVubGluZXBhdXNlYXJnc3dpbmRvd3N3aGVuQ29tcGxldGU+Pj4gVEVTVCBPSz4+PiBURVNUIENSQVNIPj4+IFRFU1QgRkFJTHdyaXRlbG4+Pj4gRU9GIFNUREVSUnJlc3VtZUNvbXBvbmVudGlyVGFyZ2V0RGlhZ25vc3RpY01lc3NhZ2VIYW5kbGVyRXhwZXJpbWVudGFsRmxhZ0ZpbGVTeXN0ZW1Qcm9jZXNzZWRPcHRpb25zTGlicmFyaWVzU3BlY2lmaWNhdGlvbkNvbXBpbGVyQ29udGV4dG1lc3NhZ2VNaXNzaW5nTWFpblNldmVyaXR5Z2VuZXJhdGVLZXJuZWxJbnRlcm5hbEVycm9yVG9rZW5TdHJpbmdUb2tlblRva2VucmVkaXJlY3RpbmdJbml0aWFsaXplZENvbXBpbGVyU3RhdGVlcXVhbExpc3RzZXF1YWxNYXBzcGFyc2VFeHBlcmltZW50YWxGbGFnc0RpYWdub3N0aWNNZXNzYWdlZ2V0TWVzc2FnZUNoYXJPZmZzZXRnZXRNZXNzYWdlSGVhZGVyVGV4dGdldE1lc3NhZ2VMZW5ndGhnZXRNZXNzYWdlUmVsYXRlZEluZm9ybWF0aW9uZ2V0TWVzc2FnZVVyaWRlZmF1bHRFeHBlcmltZW50YWxGbGFnc0ZpbGVTeXN0ZW1FbnRpdHlGaWxlU3lzdGVtRXhjZXB0aW9ua2VybmVsRm9yUHJvZ3JhbURhdGFGaWxlU3lzdGVtRW50aXR5Y29tcHV0ZVBsYXRmb3JtQmluYXJpZXNMb2NhdGlvbkxvY2F0ZWRNZXNzYWdlb3BlcmF0b3JGcm9tU3RyaW5nQXN5bmNNb2RpZmllcmlzVXNlckRlZmluYWJsZU9wZXJhdG9yaXNNaW51c09wZXJhdG9yJCQkMCQ5JEEkQkFDS1NMQVNIJENSJERFTCREUSRIQVNIJExGJExTJFBTJFRBQiRaJF8kYSRnJHMkekxpbmtMaW5rQnVpbGRlckxpbmtFbnRyeXJlbGF0aXZpemVVcmljbGVhclN0cmluZ1Rva2VuQ2Fub25pY2FsaXplcmNsZWFyaW5pdGlhbGl6ZUNvbXBpbGVyb2xkU3RhdGV0YXJnZXRsaW5rZWREZXBlbmRlbmNpZXNwYWNrYWdlc0ZpbGVVcmlleHBlcmltZW50YWxGbGFnc3ZlcmlmeWJjb21wYXJlVG9sZWdhY3lNb2RlcHJvY2Vzc2VkT3B0c3N0YXRlZmlsZVN5c3RlbW9uRGlhZ25vc3RpY2lucHV0c2NsZWFyRmlsZVN5c3RlbUNhY2hlY29udGV4dGNvbXBpbGVyUmVzdWx0Y29tcG9uZW50bWFpbk1ldGhvZE5vICdtYWluJyBtZXRob2QgZm91bmQuVHJ5IGFkZGluZyBhIG1ldGhvZCBuYW1lZCAnbWFpbicgdG8geW91ciBwcm9ncmFtLk1pc3NpbmdNYWluU2V2ZXJpdHkuZXJyb3J3aXRoTG9jYXRpb250b2tlblRvU3RyaW5nYXNzZXJ0aW9uTWVzc2FnZWxleGVtZWdldFN1cHBvcnRlZExpYnJhcnlOYW1lc2pzb25zcGVjaWZpY2F0aW9uRm9yYWxsTGlicmFyaWVzbGlzU3VwcG9ydGVkaXNSZWRpcmVjdGluZ0ZhY3RvcnltZW1iZXJraW5kUHJvY2VkdXJlS2luZC5GYWN0b3J5Ym9keWZ1bmN0aW9uZXhwcmVzc2lvbnZhcmlhYmxlI3JlZGlyZWN0aW5nX2ZhY3Rvcnljb21waWxlcl9uZXdEaWFnbm9zdGljSW5wdXRLaW5kSW5wdXRLaW5kLlVURjhJbnB1dEtpbmQuYmluYXJ5VVRGOGJpbmFyeUlucHV0VGlucHV0S2luZENvbXBpbGVySW5wdXRyZWFkRnJvbVVyaU91dHB1dFR5cGVPdXRwdXRUeXBlLmpzT3V0cHV0VHlwZS5qc1BhcnRPdXRwdXRUeXBlLnNvdXJjZU1hcE91dHB1dFR5cGUuZHVtcEluZm9PdXRwdXRUeXBlLmRlZmVycmVkTWFwT3V0cHV0VHlwZS5kZWJ1Z2pzanNQYXJ0c291cmNlTWFwZHVtcEluZm9kZWZlcnJlZE1hcGRlYnVnT3V0cHV0U2lua2Nsb3NlQmluYXJ5T3V0cHV0U2lua3dyaXRlYnVmZmVyZW5kQ29tcGlsZXJPdXRwdXRjcmVhdGVPdXRwdXRTaW5rZXh0ZW5zaW9udHlwZWNyZWF0ZUJpbmFyeVNpbmtDb21waWxlckRpYWdub3N0aWNzY29kZWJlZ2luQ29tcGlsYXRpb25SZXN1bHRjb21waWxlcmNvbXBpbGVyT3B0aW9ucyBtdXN0IGJlIG5vbi1udWxsY29tcGlsZXJJbnB1dCBtdXN0IGJlIG5vbi1udWxsY29tcGlsZXJEaWFnbm9zdGljcyBtdXN0IGJlIG5vbi1udWxsY29tcGlsZXJPdXRwdXQgbXVzdCBiZSBub24tbnVsbHJ1bnN1Y2Nlc3NrZXJuZWxMb2FkZXJpbml0aWFsaXplZENvbXBpbGVyU3RhdGVkYXJ0MmpzLmNtZGxpbmUub3B0aW9uc0ZsYWdzYWxsb3dNb2NrQ29tcGlsYXRpb25hbGxvd05hdGl2ZUV4dGVuc2lvbnNkaXNhYmxlSW5saW5pbmdkaXNhYmxlUHJvZ3JhbVNwbGl0ZGlzYWJsZURpYWdub3N0aWNDb2xvcnNkaXNhYmxlTmF0aXZlTGl2ZVR5cGVBbmFseXNpc3VzZVRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluZGlzYWJsZVR5cGVJbmZlcmVuY2VkaXNhYmxlUnRpT3B0aW1pemF0aW9uZW5hYmxlQXNzZXJ0TWVzc2FnZWVuYWJsZUNoZWNrZWRNb2RlZW5hYmxlQXNzZXJ0c2VuYWJsZURpYWdub3N0aWNDb2xvcnNleHBlcmltZW50YWxUcmFja0FsbG9jYXRpb25zZXhwZXJpbWVudGFsQWxsb2NhdGlvbnNQYXRoZXhwZXJpbWVudExvY2FsTmFtZXNleHBlcmltZW50U3RhcnR1cEZ1bmN0aW9uc2V4cGVyaW1lbnRUb0Jvb2xlYW5leHBlcmltZW50Q2FsbEluc3RydW1lbnRhdGlvbmV4cGVyaW1lbnROZXdSdGllbmFibGVMYW5ndWFnZUV4cGVyaW1lbnRzLS1lbmFibGUtZXhwZXJpbWVudGZhc3RTdGFydHVwZmF0YWxXYXJuaW5nc2dlbmVyYXRlQ29kZVdpdGhDb21waWxlVGltZUVycm9yc3ByZXZpZXdEYXJ0Mm9taXRJbXBsaWNpdENoZWNrc29taXRBc0Nhc3RzbGF4UnVudGltZVR5cGVUb1N0cmluZ21pbmlmeW5vRnJlcXVlbmN5QmFzZWRNaW5pZmljYXRpb25ub01pbmlmeW5vU291cmNlTWFwc3ByZXNlcnZlVXJpc3Nob3dQYWNrYWdlV2FybmluZ3MtLXNob3ctcGFja2FnZS13YXJuaW5nc3N1cHByZXNzSGludHNzdXBwcmVzc1dhcm5pbmdzdGVyc2V0ZXN0TW9kZXRydXN0UHJpbWl0aXZlc3RydXN0SlNJbnRlcm9wVHlwZUFubm90YXRpb25zdXNlQ29udGVudFNlY3VyaXR5UG9saWN5dXNlTXVsdGlTb3VyY2VJbmZvdXNlTmV3U291cmNlSW5mb3Byb2dyZXNzZGlsbERlcGVuZGVuY2llc3JlYWREYXRhd3JpdGVEYXRhcmVhZENvZGVnZW53cml0ZUNvZGVnZW5jZmVPbmx5ZGVidWdHbG9iYWxJbmZlcmVuY2VzZXJ2ZXJNb2RlbmV3RGVmZXJyZWRTcGxpdHJlcG9ydEludmFsaWRJbmZlcnJlZERlZmVycmVkVHlwZXNiZW5jaG1hcmtpbmdQcm9kdWN0aW9uYmVuY2htYXJraW5nRXhwZXJpbWVudGNvbmRpdGlvbmFsRGlyZWN0aXZlc2dlbmVyaWNNZXRob2RTeW50YXhpbml0aWFsaXppbmdGb3JtYWxBY2Nlc3NyZXNvbHZlT25seU9wdGlvbnJlc29sdXRpb25JbnB1dGN1cnJlbnREaXJlY3RvcnluYXRpdmVUb1VyaVBhdGhmaWxlbmFtZXJlcGxhY2VBbGxcOnVyaVBhdGhUb05hdGl2ZW5hdGl2ZVRvVXJpYXBwZW5kU2xhc2hkYXJ0MmpzLnNyYy5vcHRpb25zRGlhZ25vc3RpY09wdGlvbnN0ZXJzZURpYWdub3N0aWNzc2hvd0FsbFBhY2thZ2VXYXJuaW5nc2hpZGVQYWNrYWdlV2FybmluZ3NzaG93UGFja2FnZVdhcm5pbmdzRm9ybGFuZ3VhZ2VFeHBlcmltZW50c2J1aWxkSWRidWlsZCBudW1iZXIgY291bGQgbm90IGJlIGRldGVybWluZWRjb21waWxlRm9yU2VydmVyZGVmZXJyZWRNYXBVcmlzaG93blBhY2thZ2VXYXJuaW5nc3VzZUR1bXBJbmZvQmluYXJ5Rm9ybWF0ZW5hYmxlTWluaWZpY2F0aW9uX2Rpc2FibGVNaW5pZmljYXRpb25lbmFibGVOYXRpdmVMaXZlVHlwZUFuYWx5c2lzZW5hYmxlVXNlckFzc2VydGlvbnNnZW5lcmF0ZVNvdXJjZU1hcG91dHB1dFVyaXNvdXJjZU1hcFVyaWRlZmF1bHRQYXJhbWV0ZXJDaGVja1BvbGljeWRlZmF1bHRJbXBsaWNpdERvd25jYXN0Q2hlY2tQb2xpY3lkZWZhdWx0Q29uZGl0aW9uQ2hlY2tQb2xpY3lkZWZhdWx0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3l1c2VGcmVxdWVuY3lOYW1lcnNob3dJbnRlcm5hbFByb2dyZXNzdXNlQ0ZFQ29uc3RhbnRzRXhwZXJpbWVudGFsRmxhZy5jb25zdGFudFVwZGF0ZTIwMThoYXNCdWlsZElkcGFyc2VFeHBlcmltZW50YWxGbGFnLmNvbnRyb2xGbG93Q29sbGVjdGlvbnNFeHBlcmltZW50YWxGbGFnLmV4dGVuc2lvbk1ldGhvZHNFeHBlcmltZW50YWxGbGFnLm5vbk51bGxhYmxlRXhwZXJpbWVudGFsRmxhZy5zcHJlYWRDb2xsZWN0aW9uc0V4cGVyaW1lbnRhbEZsYWcudHJpcGxlU2hpZnQtLWRlZmVycmVkLW1hcD0tLXBsYXRmb3JtLWJpbmFyaWVzPXZhbGlkYXRlW2xpYnJhcmllc1NwZWNpZmljYXRpb25VcmldIGlzIG51bGwuW2xpYnJhcmllc1NwZWNpZmljYXRpb25VcmldIHNob3VsZCBiZSBhIGZpbGU6IE9ubHkgb25lIG9mIFtwYWNrYWdlUm9vdF0gb3IgW3BhY2thZ2VDb25maWddIG1heSBiZSBnaXZlbi5bcGFja2FnZVJvb3RdIG11c3QgZW5kIHdpdGggYSAvTWlzc2luZyByZXF1aXJlZCBkZXJpdmVPcHRpb25zY29udGFpbnNwYXRoU2VnbWVudHNmaXJzdENoZWNrUG9saWN5aXNUcnVzdGVkaXNFbWl0dGVkdHJ1c3RlZGNoZWNrZWRDaGVja1BvbGljeShpc1RydXN0ZWQ9aXNFbWl0dGVkPSlfVU5ERVRFUk1JTkVEX0JVSUxEX0lEX2V4dHJhY3RTdHJpbmdPcHRpb25wcmVmaXhkZWZhdWx0VmFsdWVvcHRpb25fZXh0cmFjdFVyaU9wdGlvbl9leHRyYWN0SW50T3B0aW9uX2hhc09wdGlvbl9leHRyYWN0T3B0aW9uYWxDc3ZPcHRpb25mbGFnX2V4dHJhY3RVcmlMaXN0T3B0aW9uc3RyaW5nVXJpc19leHRyYWN0RXhwZXJpbWVudHNleHBlcmltZW50c3NvdXJjZV9maWxlX3Byb3ZpZGVybWF0aGNvbG9yc01lc3NhZ2VDYWxsYmFja1NvdXJjZUZpbGVQcm92aWRlcmlzV2luZG93c2N3ZHV0ZjhTb3VyY2VGaWxlc2JpbmFyeVNvdXJjZUZpbGVzcmVhZEJ5dGVzRnJvbVVyaXJlc291cmNlVXJpaXNBYnNvbHV0ZXJlc29sdmVVcmlfcmVhZEZyb21GaWxlaHR0cGh0dHBzX3JlYWRGcm9tSHR0cFVua25vd24gc2NoZW1lIGluIHVyaSAnJ19yZWFkRnJvbUZpbGVTeW5jc291cmNlemVyb1Rlcm1pbmF0ZWRleG9zRXJyb3JkZXRhaWwgKEVycm9yIHJlYWRpbmcgJycgYXV0b1JlYWRGcm9tRmlsZWVjbGllbnRnZXRVcmxyZXF1ZXN0cmVzcG9uc2VzdGF0dXNDb2RlbXNnRmFpbHVyZSBnZXR0aW5nIDogcmVhc29uUGhyYXNlc3BsaXRDb250ZW50dG90YWxMZW5ndGhmb2xkb2xkbGlzdG9mZnNldGNvbnRlbnRQYXJ0c2V0UmFuZ2V1bmltcGxlbWVudGVkZ2V0VXRmOFNvdXJjZUZpbGV1cmlza2V5c0NvbXBpbGVyU291cmNlRmlsZVByb3ZpZGVyRm9ybWF0dGluZ0RpYWdub3N0aWNIYW5kbGVycHJvdmlkZXJpc0Fib3J0aW5nbGFzdEtpbmRmYXRhbENvdW50RkFUQUxjcmFzaG9yZGluYWxJTkZPdmVyYm9zZSBpbmZvSW5mbzpJbmZvOiBwcmVmaXhNZXNzYWdld2FybmluZ1dhcm5pbmc6IEhpbnQ6IEludGVybmFsIEVycm9yOiBVbmV4cGVjdGVkIGRpYWdub3N0aWMga2luZDogZmF0YWwmaXNJbmZvY29sb3JVbmtub3duIGtpbmQ6IHguZGFydGdldExvY2F0aW9uTWVzc2FnZWNvbG9yaXplQDoKUmFuZG9tQWNjZXNzRmlsZU91dHB1dFByb3ZpZGVydG90YWxDaGFyYWN0ZXJzV3JpdHRlbmNyZWF0ZVVyaVVua25vd24gb3V0cHV0IHR5cGU6IGlzUHJpbWFyeU91dHB1dGNoYXJhY3RlcnNXcml0dGVuY2h1bmtTaXplKm9uRG9uZWJ5dGVzV3JpdHRlbndyaXRlQnl0ZXNTeW5jd3JpdGVGcm9tU3luY1JhbmRvbUFjY2Vzc0JpbmFyeU91dHB1dFNpbmtfT3V0cHV0U2lua1dyYXBwZXJvbkFkZG9uQ2xvc2VfQmluYXJ5T3V0cHV0U2lua1dyYXBwZXJvbldyaXRlQmF6ZWxJbnB1dFByb3ZpZGVyZGlyc3NlYXJjaFBhdGhzX3Jlc29sdmVyZXNvbHZlZFVyaS9iYXplbC1yb290L2JhemVsLXJvb3QvZGlyZXhpc3RzZXhpc3RzU3luY3JlYWRBbGxsZW5ndGhTeW5jYnVmZmVyTGVuZ3RocmVhZEludG9TeW5jZGFydDJqcy51dGlsLmNvbW1hbmRfbGluZUVTQ0FQRV9NQVBQSU5HbnINdAkIDAtzcGxpdExpbmVpblF1b3Rlc29wZW5pbmdRdW90ZSJVbmZpbmlzaGVkIGVzY2FwZTogbmV4dG1hcHBlZGlzTm90RW1wdHlVbmNsb3NlZCBxdW90ZXM6IGRhcnQyanMudXRpbGluZGVudGF0aW9uLmRhcnRIYXNoaW5nU01JX01BU0ttaXhIYXNoQ29kZUJpdHNleGlzdGluZzw8Xj4+aGlnaGxvd29iamVjdEhhc2hvYmplY3RoYXNoQ29kZW9iamVjdHNIYXNob2JqMW9iajJvYmozb2JqNG9iajVoYXNobGlzdEhhc2hzZXRIYXNoRWl0ZXJhYmxldW5vcmRlcmVkTWFwSGFzaGhhc2hDb2Rlc2VudHJ5ZW50cmllc2tleW1hcEhhc2hQYWlyQUJvdGhlcihJbmRlbnRhdGlvbl9pbmRlbnRMZXZlbF9pbmRlbnRMaXN0X2luZGVudGF0aW9uVW5pdCAgaW5kZW50YXRpb25pbmRlbnRhdGlvblVuaXRpbmRlbnRNb3JlaW5kZW50TGVzc2luZGVudEJsb2NrVGFnZ2luZ05zYnRhZ1N0YWNrcHVzaFRhZ3RhZ3ByZXBlbmRwb3BUYWdoZWFkdGFpbHN0cmluZ2FkZERlZmF1bHRQYXJhbWV0ZXJzbm9kZXBhcmFtc29wZW5Ob2RlYWRkQ3VycmVudEluZGVudGFkZFR5cGVXaXRoUGFyYW1zPgpvcGVuQW5kQ2xvc2VOb2RlLz4KY2xvc2VOb2RlPC9mb3JFYWNoa3N0cnZhbHVlVG9TdHJpbmcmbHQ7Jmd0O1tudWxsXT0iZXF1YWxFbGVtZW50c2VxdWFsU2V0c2NvbnRhaW5zQWxsS1Z3cml0ZUpzb25Fc2NhcGVkQ2hhcnNPbmFkZENvZGVVbml0RXNjYXBlZFx1MHRvUmFkaXhTdHJpbmd3cml0ZUVzY2FwZWRPbmNvZGVVbml0QXRcIlx0XG5cclxcd3JpdGVDaGFyQ29kZWNvbXB1dGVIYXNoQ29kZXBhcnQxcGFydDJwYXJ0M3BhcnQ0cGFydDVtb2RpZmllcnNUb1N0cmluZ2lzU3RhdGljaXNBYnN0cmFjdGlzRmluYWxpc1ZhcmlzQ29uc3Rpc0ZhY3Rvcnlpc0V4dGVybmFsaXNDb3ZhcmlhbnRidWlsZGVyYWRkTGFzdHN0YXRpY2Fic3RyYWN0ZmluYWx2YXJjb25zdGZhY3RvcnlleHRlcm5hbGNvdmFyaWFudHRvTGlua3ByaW50T25sb25nZXN0Q29tbW9uUHJlZml4TGVuZ3RobWFrZVVuaXF1ZXN1Z2dlc3RlZE5hbWV1c2VkTmFtZXNjb3VudGVya2VybmVsbG9hZENvbXBvbmVudEZyb21CaW5hcnlieXRlc3JlYWRBc0J5dGVzU3luY2xvYWRDb21wb25lbnRGcm9tQnl0ZXNyZWFkQ29tcG9uZW50bG9hZENvbXBvbmVudFNvdXJjZUZyb21CeXRlc3JlYWRDb21wb25lbnRTb3VyY2V3cml0ZUNvbXBvbmVudFRvQmluYXJ5c2lua251bGxzdGRvdXRub25CbG9ja2luZ29wZW5Xcml0ZXdyaXRlQ29tcG9uZW50RmlsZWZsdXNod3JpdGVMaWJyYXJ5VG9UZXh0bGlicmFyeXdyaXRlTGlicmFyeUZpbGV3cml0ZUFzU3RyaW5nU3luY3dyaXRlQ29tcG9uZW50VG9UZXh0c2hvd0V4dGVybmFsc2hvd09mZnNldHNzaG93TWV0YWRhdGFrZXJuZWwuYXN0Q2Fub25pY2FsTmFtZU5vZGVhY2NlcHR2aXNpdENoaWxkcmVuVHJlZU5vZGVfaGFzaENvdW50ZXJub09mZnNldHBhcmVudGZpbGVPZmZzZXR0cmFuc2Zvcm1DaGlsZHJlbnJlcGxhY2VDaGlsZGNoaWxkcmVwbGFjZW1lbnRyZXBsYWNlV2l0aHJlbW92ZWVuY2xvc2luZ0NvbXBvbmVudGxvY2F0aW9uX2dldExvY2F0aW9uSW5FbmNsb3NpbmdGaWxlTmFtZWROb2RlcmVmZXJlbmNlY2Fub25pY2FsTmFtZUZpbGVVcmlOb2RlZmlsZVVyaUFubm90YXRhYmxlYW5ub3RhdGlvbnNhZGRBbm5vdGF0aW9uUmVmZXJlbmNlUmVmZXJlbmNlIHRvIFVuYm91bmQgcmVmZXJlbmNlYXNMaWJyYXJ5IGlzIG5vdCBib3VuZCB0byBhbiBBU1Qgbm9kZS4gQSBsaWJyYXJ5IHdhcyBleHBlY3RlZGFzQ2xhc3MgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIGNsYXNzIHdhcyBleHBlY3RlZGFzTWVtYmVyIGlzIG5vdCBib3VuZCB0byBhbiBBU1Qgbm9kZS4gQSBtZW1iZXIgd2FzIGV4cGVjdGVkYXNGaWVsZCBpcyBub3QgYm91bmQgdG8gYW4gQVNUIG5vZGUuIEEgZmllbGQgd2FzIGV4cGVjdGVkYXNDb25zdHJ1Y3RvciBpcyBub3QgYm91bmQgdG8gYW4gQVNUIG5vZGUuIEEgY29uc3RydWN0b3Igd2FzIGV4cGVjdGVkYXNQcm9jZWR1cmUgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIHByb2NlZHVyZSB3YXMgZXhwZWN0ZWRhc1R5cGVkZWYgaXMgbm90IGJvdW5kIHRvIGFuIEFTVCBub2RlLiBBIHR5cGVkZWYgd2FzIGV4cGVjdGVkTGlicmFyeWltcG9ydFVyaWRlZmF1bHRMYW5nYXVnZVZlcnNpb25NYWpvcmRlZmF1bHRMYW5nYXVnZVZlcnNpb25NaW5vcl9sYW5ndWFnZVZlcnNpb25NYWpvcl9sYW5ndWFnZVZlcnNpb25NaW5vckV4dGVybmFsRmxhZ1N5bnRoZXRpY0ZsYWdmbGFnc3Byb2JsZW1zQXNKc29uYWRkaXRpb25hbEV4cG9ydHNwYXJ0c3R5cGVkZWZzY2xhc3Nlc3Byb2NlZHVyZXNmaWVsZHNfbGlicmFyeUlkQ291bnRlcl9saWJyYXJ5SWRsYW5ndWFnZVZlcnNpb25NYWpvcmxhbmd1YWdlVmVyc2lvbk1pbm9yc2V0TGFuZ3VhZ2VWZXJzaW9uVHJ5aW5nIHRvIHNldCBsYW5nYXVnZSB2ZXJzaW9uICdudWxsJ35pc1N5bnRoZXRpY21lbWJlcnNleHBhbmRhZGRNZW1iZXJhZGRDbGFzc2NsYXNzX2FkZEZpZWxkZmllbGRhZGRQcm9jZWR1cmVwcm9jZWR1cmVhZGRUeXBlZGVmdHlwZWRlZl9jb21wdXRlQ2Fub25pY2FsTmFtZXNnZXRDaGlsZEZyb21UeXBlZGVmYmluZFRvZ2V0Q2hpbGRGcm9tTWVtYmVyZ2V0Q2hpbGRhZGREZXBlbmRlbmN5YWRkUGFydHZpc2l0TGlicmFyeUxpYnJhcnlEZXBlbmRlbmN5aW1wb3J0ZWRMaWJyYXJ5UmVmZXJlbmNlY29tYmluYXRvcnNFeHBvcnRGbGFnRGVmZXJyZWRGbGFnaW1wb3J0ZWRMaWJyYXJ5ZGVmZXJyZWRJbXBvcnRpbXBvcnRleHBvcnRieVJlZmVyZW5jZWVuY2xvc2luZ0xpYnJhcnl0YXJnZXRMaWJyYXJ5aXNFeHBvcnRpc0ltcG9ydGlzRGVmZXJyZWRhbm5vdGF0aW9udmlzaXRMaWJyYXJ5RGVwZW5kZW5jeUxpYnJhcnlQYXJ0cGFydFVyaXZpc2l0TGlicmFyeVBhcnRDb21iaW5hdG9yaXNTaG93bmFtZXNzaG93aGlkZWRlcGVuZGVuY3lpc0hpZGV2aXNpdENvbWJpbmF0b3JUeXBlZGVmdHlwZVBhcmFtZXRlcnN0eXBlUGFyYW1ldGVyc09mRnVuY3Rpb25UeXBlcG9zaXRpb25hbFBhcmFtZXRlcnNuYW1lZFBhcmFtZXRlcnN0aGlzVHlwZXZpc2l0VHlwZWRlZnZpc2l0RGFydFR5cGVDbGFzc0xldmVsQ2xhc3NMZXZlbC5UZW1wb3JhcnlDbGFzc0xldmVsLlR5cGVDbGFzc0xldmVsLkhpZXJhcmNoeUNsYXNzTGV2ZWwuTWl4aW5DbGFzc0xldmVsLkJvZHlUZW1wb3JhcnlUeXBlSGllcmFyY2h5TWl4aW5Cb2R5Q2xhc3NzdGFydEZpbGVPZmZzZXRmaWxlRW5kT2Zmc2V0bGV2ZWxMZXZlbE1hc2tGbGFnQWJzdHJhY3RGbGFnRW51bUZsYWdBbm9ueW1vdXNNaXhpbkZsYWdFbGltaW5hdGVkTWl4aW5GbGFnTWl4aW5EZWNsYXJhdGlvbnN1cGVydHlwZW1peGVkSW5UeXBlaW1wbGVtZW50ZWRUeXBlc2NvbnN0cnVjdG9yc3JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yc19yYXdUeXBlX3RoaXNUeXBlX2JvdHRvbVR5cGVpc0Fub255bW91c01peGluaXNFbnVtaXNFbGltaW5hdGVkTWl4aW5pc01peGluRGVjbGFyYXRpb25zdXBlcmNsYXNzQ29uc3RyYWludHNjb25zdHJhaW50c2NsYXNzTm9kZWN1cnJlbnRDbGFzc3N1YnN0aXR1dGlvbnN1YnN0aXR1dGVTdXBlcnR5cGVzdXBlcmNsYXNzbWl4ZWRJbkNsYXNzbWl4aW5pc01peGluQXBwbGljYXRpb25kZW1hbmdsZWROYW1lbmFtZUFzTWl4aW5BcHBsaWNhdGlvbm5hbWVBc01peGluQXBwbGljYXRpb25TdWJjbGFzc3N1cGVyc3Zpc2l0Q2xhc3NhY2NlcHRSZWZlcmVuY2V2aXNpdENsYXNzUmVmZXJlbmNlaXNJbkV4dGVybmFsTGlicmFyeWFzUmF3U3VwZXJ0eXBlYXNUaGlzU3VwZXJ0eXBlcmF3VHlwZWJvdHRvbVR5cGV2aXNpdFN1cGVydHlwZU1lbWJlcnRyYW5zZm9ybWVyRmxhZ3NlbmNsb3NpbmdDbGFzc2hhc0dldHRlcmhhc1NldHRlcmlzSW5zdGFuY2VNZW1iZXJnZXR0ZXJUeXBlc2V0dGVyVHlwZWNvbnRhaW5zU3VwZXJDYWxsc0ZpZWxkaW5pdGlhbGl6ZXJGbGFnRmluYWxGbGFnQ29uc3RGbGFnU3RhdGljRmxhZ0hhc0ltcGxpY2l0R2V0dGVyRmxhZ0hhc0ltcGxpY2l0U2V0dGVyRmxhZ0NvdmFyaWFudEZsYWdHZW5lcmljQ292YXJpYW50SW1wbGhhc0ltcGxpY2l0R2V0dGVyaGFzSW1wbGljaXRTZXR0ZXJpc0dlbmVyaWNDb3ZhcmlhbnRJbXBsaXNNdXRhYmxlRmllbGRzIGNhbm5vdCBiZSBleHRlcm5hbHZpc2l0RmllbGR2aXNpdEZpZWxkUmVmZXJlbmNlQ29uc3RydWN0b3Jpbml0aWFsaXplcnNGbGFnRXh0ZXJuYWxGbGFnU3ludGhldGljdmlzaXRDb25zdHJ1Y3RvcnZpc2l0Q29uc3RydWN0b3JSZWZlcmVuY2VSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnR5cGVBcmd1bWVudHN0YXJnZXRSZWZlcmVuY2VyZXF1aXJlZFBhcmFtZXRlckNvdW50aXNVbnJlc29sdmVkdmlzaXRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JSZWZlcmVuY2VQcm9jZWR1cmVmb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0UmVmZXJlbmNlZm9yd2FyZGluZ1N0dWJJbnRlcmZhY2VUYXJnZXRSZWZlcmVuY2VGbGFnRm9yd2FyZGluZ1N0dWJGbGFnRm9yd2FyZGluZ1NlbWlTdHViRmxhZ1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yRmxhZ05vU3VjaE1ldGhvZEZvcndhcmRlcmlzRm9yd2FyZGluZ1N0dWJpc0ZvcndhcmRpbmdTZW1pU3R1YmZvcndhcmRpbmdTdHViU3VwZXJUYXJnZXRmb3J3YXJkaW5nU3R1YkludGVyZmFjZVRhcmdldG5ld1ZhbHVlc2V0VHJhbnNmb3JtZXJGbGFnc1dpdGhvdXRMYXp5TG9hZGluZ2lzUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3Jpc1N5bnRoZXRpY0ZvcndhcmRlcmlzTm9TdWNoTWV0aG9kRm9yd2FyZGVyaXNHZXR0ZXJQcm9jZWR1cmVLaW5kLkdldHRlcmlzU2V0dGVyUHJvY2VkdXJlS2luZC5TZXR0ZXJpc0FjY2Vzc29ydmlzaXRQcm9jZWR1cmV2aXNpdFByb2NlZHVyZVJlZmVyZW5jZXJldHVyblR5cGVmdW5jdGlvblR5cGVQcm9jZWR1cmVLaW5kUHJvY2VkdXJlS2luZC5NZXRob2RQcm9jZWR1cmVLaW5kLk9wZXJhdG9yTWV0aG9kR2V0dGVyU2V0dGVyT3BlcmF0b3JGYWN0b3J5SW5pdGlhbGl6ZXJJbnZhbGlkSW5pdGlhbGl6ZXJ2aXNpdEludmFsaWRJbml0aWFsaXplckZpZWxkSW5pdGlhbGl6ZXJmaWVsZFJlZmVyZW5jZXZpc2l0RmllbGRJbml0aWFsaXplclN1cGVySW5pdGlhbGl6ZXJ2aXNpdFN1cGVySW5pdGlhbGl6ZXJSZWRpcmVjdGluZ0luaXRpYWxpemVydmlzaXRSZWRpcmVjdGluZ0luaXRpYWxpemVyTG9jYWxJbml0aWFsaXplcnZpc2l0TG9jYWxJbml0aWFsaXplckFzc2VydEluaXRpYWxpemVyc3RhdGVtZW50dmlzaXRBc3NlcnRJbml0aWFsaXplckZ1bmN0aW9uTm9kZWFzeW5jTWFya2VyZGFydEFzeW5jTWFya2VyX2JvZHlsYXp5QnVpbGRlckFzeW5jTWFya2VyLlN5bmNfYnVpbGRMYXp5bGF6eUJ1aWxkZXJMb2NhbF9nZXRUeXBlT2ZWYXJpYWJsZV9nZXROYW1lZFR5cGVPZlZhcmlhYmxlbmFtZWRncm93YWJsZXR5cGVQYXJhbWV0ZXJzQ29weXZpc2l0RnVuY3Rpb25Ob2RlQXN5bmNNYXJrZXJBc3luY01hcmtlci5TeW5jU3RhckFzeW5jTWFya2VyLkFzeW5jQXN5bmNNYXJrZXIuQXN5bmNTdGFyQXN5bmNNYXJrZXIuU3luY1lpZWxkaW5nU3luY1N5bmNTdGFyQXN5bmNBc3luY1N0YXJTeW5jWWllbGRpbmdFeHByZXNzaW9uZ2V0U3RhdGljVHlwZXR5cGVzZ2V0U3RhdGljVHlwZUFzSW5zdGFuY2VPZmJvdW5kbnVsbFR5cGV1cGNhc3RUeXBlZ2V0VHlwZUFzSW5zdGFuY2VPZnR5cGVFcnJvciBpcyBub3QgYSBzdWJ0eXBlIG9mIGFjY2VwdDFhcmdJbnZhbGlkRXhwcmVzc2lvbnZpc2l0SW52YWxpZEV4cHJlc3Npb25WYXJpYWJsZUdldHByb21vdGVkVHlwZXZpc2l0VmFyaWFibGVHZXRWYXJpYWJsZVNldHZpc2l0VmFyaWFibGVTZXRQcm9wZXJ0eUdldHJlY2VpdmVyaW50ZXJmYWNlVGFyZ2V0UmVmZXJlbmNlaW50ZXJmYWNlVGFyZ2V0cmVjZWl2ZXJUeXBlc3Vic3RpdHV0ZVR5cGVuYW1lU3RyaW5naW50VHlwZXJ1bnRpbWVUeXBldHlwZVR5cGV2aXNpdFByb3BlcnR5R2V0UHJvcGVydHlTZXR2aXNpdFByb3BlcnR5U2V0RGlyZWN0UHJvcGVydHlHZXR2aXNpdERpcmVjdFByb3BlcnR5R2V0RGlyZWN0UHJvcGVydHlTZXR2aXNpdERpcmVjdFByb3BlcnR5U2V0RGlyZWN0TWV0aG9kSW52b2NhdGlvbnZpc2l0RGlyZWN0TWV0aG9kSW52b2NhdGlvbmlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvcmdldFR5cGVPZk92ZXJsb2FkZWRBcml0aG1ldGljcG9zaXRpb25hbFN1cGVyUHJvcGVydHlHZXRkZWNsYXJpbmdDbGFzc3Zpc2l0U3VwZXJQcm9wZXJ0eUdldFN1cGVyUHJvcGVydHlTZXR2aXNpdFN1cGVyUHJvcGVydHlTZXRTdGF0aWNHZXR2aXNpdFN0YXRpY0dldFN0YXRpY1NldHZpc2l0U3RhdGljU2V0QXJndW1lbnRzZW1wdHlmb3J3YXJkZWR2aXNpdEFyZ3VtZW50c05hbWVkRXhwcmVzc2lvbnZpc2l0TmFtZWRFeHByZXNzaW9uSW52b2NhdGlvbkV4cHJlc3Npb25NZXRob2RJbnZvY2F0aW9uYm9vbFR5cGV2aXNpdE1ldGhvZEludm9jYXRpb25TdXBlck1ldGhvZEludm9jYXRpb252aXNpdFN1cGVyTWV0aG9kSW52b2NhdGlvblN0YXRpY0ludm9jYXRpb252aXNpdFN0YXRpY0ludm9jYXRpb25Db25zdHJ1Y3Rvckludm9jYXRpb252aXNpdENvbnN0cnVjdG9ySW52b2NhdGlvbmNvbnN0cnVjdGVkVHlwZUluc3RhbnRpYXRpb253aXRob3V0VHlwZVBhcmFtZXRlcnN2aXNpdEluc3RhbnRpYXRpb25Ob3RvcGVyYW5kdmlzaXROb3RMb2dpY2FsRXhwcmVzc2lvbmxlZnRvcGVyYXRvcnJpZ2h0dmlzaXRMb2dpY2FsRXhwcmVzc2lvbkNvbmRpdGlvbmFsRXhwcmVzc2lvbmNvbmRpdGlvbm90aGVyd2lzZXN0YXRpY1R5cGV2aXNpdENvbmRpdGlvbmFsRXhwcmVzc2lvblN0cmluZ0NvbmNhdGVuYXRpb25leHByZXNzaW9uc3N0cmluZ1R5cGV2aXNpdFN0cmluZ0NvbmNhdGVuYXRpb25MaXN0Q29uY2F0ZW5hdGlvbnR5cGVBcmd1bWVudGxpc3RzbGl0ZXJhbExpc3RUeXBldmlzaXRMaXN0Q29uY2F0ZW5hdGlvblNldENvbmNhdGVuYXRpb25zZXRzbGl0ZXJhbFNldFR5cGV2aXNpdFNldENvbmNhdGVuYXRpb25NYXBDb25jYXRlbmF0aW9ua2V5VHlwZXZhbHVlVHlwZW1hcHNsaXRlcmFsTWFwVHlwZXZpc2l0TWFwQ29uY2F0ZW5hdGlvbkluc3RhbmNlQ3JlYXRpb25jbGFzc1JlZmVyZW5jZWZpZWxkVmFsdWVzYXNzZXJ0c3VudXNlZEFyZ3VtZW50c3Zpc2l0SW5zdGFuY2VDcmVhdGlvbmZpZWxkUmVmdHJhbnNmb3JtZWRJc0V4cHJlc3Npb252aXNpdElzRXhwcmVzc2lvbkFzRXhwcmVzc2lvbkZsYWdUeXBlRXJyb3Jpc1R5cGVFcnJvcnZpc2l0QXNFeHByZXNzaW9uQmFzaWNMaXRlcmFsU3RyaW5nTGl0ZXJhbHZpc2l0U3RyaW5nTGl0ZXJhbEludExpdGVyYWx2aXNpdEludExpdGVyYWxEb3VibGVMaXRlcmFsZG91YmxlVHlwZXZpc2l0RG91YmxlTGl0ZXJhbEJvb2xMaXRlcmFsdmlzaXRCb29sTGl0ZXJhbE51bGxMaXRlcmFsdmlzaXROdWxsTGl0ZXJhbFN5bWJvbExpdGVyYWxzeW1ib2xUeXBldmlzaXRTeW1ib2xMaXRlcmFsVHlwZUxpdGVyYWx2aXNpdFR5cGVMaXRlcmFsVGhpc0V4cHJlc3Npb252aXNpdFRoaXNFeHByZXNzaW9uUmV0aHJvd3Zpc2l0UmV0aHJvd1Rocm93dmlzaXRUaHJvd0xpc3RMaXRlcmFsdmlzaXRMaXN0TGl0ZXJhbFNldExpdGVyYWx2aXNpdFNldExpdGVyYWxNYXBMaXRlcmFsdmlzaXRNYXBMaXRlcmFsTWFwRW50cnl2aXNpdE1hcEVudHJ5QXdhaXRFeHByZXNzaW9udW5mdXR1cmVUeXBldmlzaXRBd2FpdEV4cHJlc3Npb25Mb2NhbEZ1bmN0aW9uRnVuY3Rpb25FeHByZXNzaW9udmlzaXRGdW5jdGlvbkV4cHJlc3Npb25Db25zdGFudEV4cHJlc3Npb25jb25zdGFudHZpc2l0Q29uc3RhbnRFeHByZXNzaW9udmlzaXRDb25zdGFudExldHZpc2l0TGV0QmxvY2tFeHByZXNzaW9udmlzaXRCbG9ja0V4cHJlc3Npb25Mb2FkTGlicmFyeWZ1dHVyZVR5cGV2aXNpdExvYWRMaWJyYXJ5Q2hlY2tMaWJyYXJ5SXNMb2FkZWRvYmplY3RUeXBldmlzaXRDaGVja0xpYnJhcnlJc0xvYWRlZFN0YXRlbWVudEV4cHJlc3Npb25TdGF0ZW1lbnR2aXNpdEV4cHJlc3Npb25TdGF0ZW1lbnRCbG9ja3N0YXRlbWVudHNyZW1vdmVMYXN0dmlzaXRCbG9ja2FkZFN0YXRlbWVudEFzc2VydEJsb2NrdmlzaXRBc3NlcnRCbG9ja0VtcHR5U3RhdGVtZW50dmlzaXRFbXB0eVN0YXRlbWVudEFzc2VydFN0YXRlbWVudGNvbmRpdGlvblN0YXJ0T2Zmc2V0Y29uZGl0aW9uRW5kT2Zmc2V0dmlzaXRBc3NlcnRTdGF0ZW1lbnRMYWJlbGVkU3RhdGVtZW50dmlzaXRMYWJlbGVkU3RhdGVtZW50QnJlYWtTdGF0ZW1lbnR2aXNpdEJyZWFrU3RhdGVtZW50V2hpbGVTdGF0ZW1lbnR2aXNpdFdoaWxlU3RhdGVtZW50RG9TdGF0ZW1lbnR2aXNpdERvU3RhdGVtZW50Rm9yU3RhdGVtZW50dmFyaWFibGVzdXBkYXRlc3Zpc2l0Rm9yU3RhdGVtZW50Rm9ySW5TdGF0ZW1lbnRib2R5T2Zmc2V0aXNBc3luY3Zpc2l0Rm9ySW5TdGF0ZW1lbnRTd2l0Y2hTdGF0ZW1lbnRjYXNlc3Zpc2l0U3dpdGNoU3RhdGVtZW50U3dpdGNoQ2FzZWV4cHJlc3Npb25PZmZzZXRzaXNEZWZhdWx0ZGVmYXVsdENhc2V2aXNpdFN3aXRjaENhc2VDb250aW51ZVN3aXRjaFN0YXRlbWVudHZpc2l0Q29udGludWVTd2l0Y2hTdGF0ZW1lbnRJZlN0YXRlbWVudHZpc2l0SWZTdGF0ZW1lbnRSZXR1cm5TdGF0ZW1lbnR2aXNpdFJldHVyblN0YXRlbWVudFRyeUNhdGNoY2F0Y2hlc3Zpc2l0VHJ5Q2F0Y2hDYXRjaGd1YXJkc3RhY2tUcmFjZXZpc2l0Q2F0Y2hUcnlGaW5hbGx5ZmluYWxpemVydmlzaXRUcnlGaW5hbGx5WWllbGRTdGF0ZW1lbnRGbGFnWWllbGRTdGFyRmxhZ05hdGl2ZWlzWWllbGRTdGFyaXNOYXRpdmV2aXNpdFlpZWxkU3RhdGVtZW50VmFyaWFibGVEZWNsYXJhdGlvbmZpbGVFcXVhbHNPZmZzZXRiaW5hcnlPZmZzZXROb1RhZ0ZsYWdGaWVsZEZvcm1hbEZsYWdJblNjb3BlaXNGaWVsZEZvcm1hbGZvclZhbHVldmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uRnVuY3Rpb25EZWNsYXJhdGlvbnZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbk5hbWVfaW50ZXJuYWxsaWJyYXJ5TmFtZWlzUHJpdmF0ZXZpc2l0TmFtZV9Qcml2YXRlTmFtZTo6X2NvbXB1dGVIYXNoQ29kZV9QdWJsaWNOYW1lTnVsbGFiaWxpdHlOdWxsYWJpbGl0eS5udWxsYWJsZU51bGxhYmlsaXR5Lm5vbk51bGxhYmxlTnVsbGFiaWxpdHkubmVpdGhlck51bGxhYmlsaXR5LmxlZ2FjeW51bGxhYmxlbm9uTnVsbGFibGVuZWl0aGVybGVnYWN5RGFydFR5cGVudWxsYWJpbGl0eXVuYWxpYXN1bmFsaWFzT25jZUludmFsaWRUeXBldmlzaXRJbnZhbGlkVHlwZUludmFsaWRUeXBlIGRvZXNuJ3QgaGF2ZSBudWxsYWJpbGlpdHlEeW5hbWljVHlwZXZpc2l0RHluYW1pY1R5cGVWb2lkVHlwZXZpc2l0Vm9pZFR5cGVCb3R0b21UeXBldmlzaXRCb3R0b21UeXBlSW50ZXJmYWNlVHlwZWNsYXNzTmFtZV9kZWZhdWx0VHlwZUFyZ3VtZW50c3Zpc2l0SW50ZXJmYWNlVHlwZUZ1bmN0aW9uVHlwZXR5cGVkZWZUeXBlX2hhc2hDb2RldHlwZWRlZlJlZmVyZW5jZXR5cGVkZWZ2aXNpdEZ1bmN0aW9uVHlwZWdldE5hbWVkUGFyYW1ldGVybG93ZXJ1cHBlcnBpdm90fi9uYW1lZFBhcmFtZXRlcmNvbXBhcmlzb25UeXBlZGVmVHlwZXR5cGVkZWZOb2RldmlzaXRUeXBlZGVmVHlwZXZpc2l0VHlwZWRlZlJlZmVyZW5jZU5hbWVkVHlwZXZpc2l0TmFtZWRUeXBlVHlwZVBhcmFtZXRlclR5cGVkZWNsYXJlZE51bGxhYmlsaXR5cHJvbW90ZWRCb3VuZHZpc2l0VHlwZVBhcmFtZXRlclR5cGVnZXROdWxsYWJpbGl0eWxoc051bGxhYmlsaXR5Ym91bmROdWxsYWJpbGl0eVR5cGVQYXJhbWV0ZXJkZWZhdWx0VHlwZXZpc2l0VHlwZVBhcmFtZXRlcmlzRnVuY3Rpb25UeXBlVHlwZVBhcmFtZXRlclN1cGVydHlwZWFzSW50ZXJmYWNlVHlwZUNvbnN0YW50Z2V0VHlwZWFzRXhwcmVzc2lvblByaW1pdGl2ZUNvbnN0YW50TnVsbENvbnN0YW50dmlzaXROdWxsQ29uc3RhbnR2aXNpdE51bGxDb25zdGFudFJlZmVyZW5jZUJvb2xDb25zdGFudHZpc2l0Qm9vbENvbnN0YW50dmlzaXRCb29sQ29uc3RhbnRSZWZlcmVuY2VJbnRDb25zdGFudHZpc2l0SW50Q29uc3RhbnR2aXNpdEludENvbnN0YW50UmVmZXJlbmNlRG91YmxlQ29uc3RhbnR2aXNpdERvdWJsZUNvbnN0YW50dmlzaXREb3VibGVDb25zdGFudFJlZmVyZW5jZWlzTmFOU3RyaW5nQ29uc3RhbnR2aXNpdFN0cmluZ0NvbnN0YW50dmlzaXRTdHJpbmdDb25zdGFudFJlZmVyZW5jZVN5bWJvbENvbnN0YW50bGlicmFyeVJlZmVyZW5jZXZpc2l0U3ltYm9sQ29uc3RhbnR2aXNpdFN5bWJvbENvbnN0YW50UmVmZXJlbmNlI01hcENvbnN0YW50X2NhY2hlZEhhc2hDb2RldmlzaXRNYXBDb25zdGFudHZpc2l0TWFwQ29uc3RhbnRSZWZlcmVuY2U+KENvbnN0YW50TWFwRW50cnlMaXN0Q29uc3RhbnR2aXNpdExpc3RDb25zdGFudHZpc2l0TGlzdENvbnN0YW50UmVmZXJlbmNlU2V0Q29uc3RhbnR2aXNpdFNldENvbnN0YW50dmlzaXRTZXRDb25zdGFudFJlZmVyZW5jZUluc3RhbmNlQ29uc3RhbnR2aXNpdEluc3RhbmNlQ29uc3RhbnR2aXNpdEluc3RhbmNlQ29uc3RhbnRSZWZlcmVuY2Uge31QYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50dGVhck9mZkNvbnN0YW50dmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50dmlzaXRQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50UmVmZXJlbmNlPil0eXBlRW52aXJvbm1lbnRtYXBwaW5nVGVhck9mZkNvbnN0YW50cHJvY2VkdXJlUmVmZXJlbmNldmlzaXRUZWFyT2ZmQ29uc3RhbnR2aXNpdFRlYXJPZmZDb25zdGFudFJlZmVyZW5jZVR5cGVMaXRlcmFsQ29uc3RhbnR2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnR2aXNpdFR5cGVMaXRlcmFsQ29uc3RhbnRSZWZlcmVuY2VVbmV2YWx1YXRlZENvbnN0YW50dmlzaXRVbmV2YWx1YXRlZENvbnN0YW50dmlzaXRVbmV2YWx1YXRlZENvbnN0YW50UmVmZXJlbmNlcm9vdGxpYnJhcmllc3VyaVRvU291cmNlbWV0YWRhdGFtYWluTWV0aG9kTmFtZW5hbWVSb290YWRvcHRDaGlsZHJlbmFkb3B0Q2hpbGRjb21wdXRlQ2Fub25pY2FsTmFtZXNGb3JMaWJyYXJ5Z2V0Q2hpbGRGcm9tVXJpdW5iaW5kQ2Fub25pY2FsTmFtZXN1bmJpbmRBbGx2aXNpdENvbXBvbmVudGdldExvY2F0aW9uYWRkTWV0YWRhdGFSZXBvc2l0b3J5cmVwb3NpdG9yeUxvY2F0aW9uY29sdW1uTWV0YWRhdGFSZXBvc2l0b3J5d3JpdGVUb0JpbmFyeXJlYWRGcm9tQmluYXJ5QmluYXJ5U2lua2dldEJ1ZmZlck9mZnNldHdyaXRlQnl0ZWJ5dGV3cml0ZUJ5dGVzd3JpdGVVSW50MzJ3cml0ZVVJbnQzMHdyaXRlQnl0ZUxpc3R3cml0ZU51bGxBbGxvd2VkQ2Fub25pY2FsTmFtZVJlZmVyZW5jZXdyaXRlU3RyaW5nUmVmZXJlbmNld3JpdGVOYW1ld3JpdGVEYXJ0VHlwZXdyaXRlTm9kZWVudGVyU2NvcGVtZW1iZXJTY29wZXZhcmlhYmxlU2NvcGVsZWF2ZVNjb3BlQmluYXJ5U291cmNlY3VycmVudE9mZnNldHJlYWRCeXRlcmVhZEJ5dGVzcmVhZFVJbnRyZWFkVWludDMycmVhZEJ5dGVMaXN0cmVhZENhbm9uaWNhbE5hbWVSZWZlcmVuY2VyZWFkU3RyaW5nUmVmZXJlbmNlcmVhZE5hbWVyZWFkRGFydFR5cGVyZWFkRnVuY3Rpb25Ob2RlX0NoaWxkUmVwbGFjZXJkZWZhdWx0VHJlZU5vZGVTb3VyY2VsaW5lU3RhcnRzY2FjaGVkVGV4dGdldFRleHRMaW5lZGVjb2RlYWxsb3dNYWxmb3JtZWRlbmRPZkxpbmVJbnRlcm5hbCBlcnJvcm1pZGxpbmVJbmRleGxpbmVTdGFydGxpbmVOdW1iZXJjb2x1bW5OdW1iZXJfSGFzaE0tNzA3MDY3NTU2NTkyMTQyNDAyM2ludElzNjRCaXRjb21iaW5lZmluaXNoY29tYmluZUZpbmlzaGNvbWJpbmUydmFsdWUxdmFsdWUyY29tYmluZTJGaW5pc2hoYXNoMm9iamVjdDFvYmplY3QyY29tYmluZUxpc3RIYXNoaXRlbWNvbWJpbmVMaXN0aGFzaGVzY29tYmluZU1hcEhhc2hVbm9yZGVyZWRlbnRyeUhhc2hlc19zaHJ1OTIyMzM3MjAzNjg1NDc3MTcxMl90ZW1wb3JhcnlIYXNoQ29kZVRhYmxlaW5mb3JtYXRpdmVzZXRQYXJlbnRzbm9kZXN2aXNpdExpc3R2aXNpdG9ydmlzaXRJdGVyYWJsZXRyYW5zZm9ybVR5cGVMaXN0c3RvcmVJbmRleHRyYW5zZm9ybVN1cGVydHlwZUxpc3R0cmFuc2Zvcm1MaXN0X2dldEFzVHlwZUFyZ3VtZW50c2dldE1lbWJlclJlZmVyZW5jZWdldENsYXNzUmVmZXJlbmNlZ2V0Q2Fub25pY2FsTmFtZU9mTWVtYmVyIGhhcyBubyBjYW5vbmljYWwgbmFtZWdldENhbm9uaWNhbE5hbWVPZkNsYXNzZ2V0Q2Fub25pY2FsTmFtZU9mTGlicmFyeWxpc3RIYXNoQ29kZW1hcEhhc2hDb2RlbWFwSGFzaENvZGVPcmRlcmVkbWFwSGFzaENvZGVVbm9yZGVyZWRsaXN0RXF1YWxzbWFwRXF1YWxzY29udGFpbnNLZXlnZXRDYW5vbmljYWxOYW1lT2ZUeXBlZGVmX2dldExvY2F0aW9uSW5Db21wb25lbnRkZW1hbmdsZU1peGluQXBwbGljYXRpb25OYW1lbmFtZVBhcnRzIHdpdGggZGVtYW5nbGVNaXhpbkFwcGxpY2F0aW9uU3ViY2xhc3NOYW1la2VybmVsLnRhcmdldC50YXJnZXRzX1RhcmdldEJ1aWxkZXJUYXJnZXRGbGFnc3RyYWNrV2lkZ2V0Q3JlYXRpb25EaWFnbm9zdGljUmVwb3J0ZXJDY2hhck9mZnNldE51bWJlclNlbWFudGljc051bWJlclNlbWFudGljcy52bU51bWJlclNlbWFudGljcy5qc3ZtQ29uc3RhbnRzQmFja2VuZGxvd2VyTGlzdENvbnN0YW50bG93ZXJTZXRDb25zdGFudGxvd2VyTWFwQ29uc3RhbnRudW1iZXJTZW1hbnRpY3NzaG91bGRJbmxpbmVDb25zdGFudHN1cHBvcnRzVW5ldmFsdWF0ZWRDb25zdGFudHNleHRyYVJlcXVpcmVkTGlicmFyaWVzZXh0cmFEZWNsYXJlZFZhcmlhYmxlc3JlcXVpcmVkU2RrQ2xhc3Nlc2VuYWJsZU5vU3VjaE1ldGhvZEZvcndhcmRlcnNlbmFibGVTdXBlck1peGluc3BlcmZvcm1PdXRsaW5lVHJhbnNmb3JtYXRpb25zcGVyZm9ybVByZUNvbnN0YW50RXZhbHVhdGlvblRyYW5zZm9ybWF0aW9uc2NvcmVUeXBlc2RpYWdub3N0aWNSZXBvcnRlcmxvZ2dlcnBlcmZvcm1Nb2R1bGFyVHJhbnNmb3JtYXRpb25zT25MaWJyYXJpZXNoaWVyYXJjaHllbnZpcm9ubWVudERlZmluZXNwZXJmb3JtVHJhbnNmb3JtYXRpb25zT25Qcm9jZWR1cmVtYXlEZWZpbmVSZXN0cmljdGVkVHlwZWRhcnRjb3JlYWxsb3dQbGF0Zm9ybVByaXZhdGVMaWJyYXJ5QWNjZXNzaW1wb3J0ZXJpbXBvcnRlZGRhcnRfaW50ZXJuYWwvZW5hYmxlTmF0aXZlbmF0aXZlRXh0ZW5zaW9uRXhwZWN0c1N0cmluZ2Vycm9yT25VbmV4YWN0V2ViSW50TGl0ZXJhbHNzdXBwb3J0c1NldExpdGVyYWxzaW5zdGFudGlhdGVJbnZvY2F0aW9uaXNTdXBlcmluc3RhbnRpYXRlTm9TdWNoTWV0aG9kRXJyb3Jpc01ldGhvZGlzRmllbGRpc0xvY2FsVmFyaWFibGVpc0R5bmFtaWNpc0NvbnN0cnVjdG9yaXNUb3BMZXZlbGNvbmZpZ3VyZUNvbXBvbmVudFRhcmdldChjb25jcmV0ZUxpc3RMaXRlcmFsQ2xhc3Njb25jcmV0ZUNvbnN0TGlzdExpdGVyYWxDbGFzc2NvbmNyZXRlTWFwTGl0ZXJhbENsYXNzY29uY3JldGVDb25zdE1hcExpdGVyYWxDbGFzc2NvbmNyZXRlSW50TGl0ZXJhbENsYXNzY29uY3JldGVTdHJpbmdMaXRlcmFsQ2xhc3Njb25zdGFudHNCYWNrZW5kTm9uZUNvbnN0YW50c0JhY2tlbmROb25lVGFyZ2V0bm9uZXRhcmdldE5hbWVzdGFyZ2V0c2dldFRhcmdldGZyb250X2VuZC5jb21waWxlcl9vcHRpb25zcGFyc2VFeHBlcmltZW50YWxGbGFnU3RhbmRhcmRGaWxlU3lzdGVtc2RrUm9vdGlucHV0U3VtbWFyaWVzc2RrU3VtbWFyeWRlY2xhcmVkVmFyaWFibGVzY29tcGlsZVNka2NoYXNlRGVwZW5kZW5jaWVzbmV4dCByZWxlYXNldGFyZ2V0UGF0Y2hlc2Vycm9yT25VbmV2YWx1YXRlZENvbnN0YW50ZGVidWdEdW1wb21pdFBsYXRmb3Jtc2V0RXhpdENvZGVPblByb2JsZW1lbWJlZFNvdXJjZVRleHR0aHJvd09uRXJyb3JzRm9yRGVidWdnaW5ndGhyb3dPbldhcm5pbmdzRm9yRGVidWdnaW5nYnl0ZWNvZGV3cml0ZUZpbGVPbkNyYXNoUmVwb3J0ZXhwZXJpbWVudG5vLVVua25vd24gZXhwZXJpbWVudDogRXhwZXJpbWVudGFsRmxhZy5leHBpcmVkRmxhZ0V4cGVyaW1lbnQgZmxhZyBubyBsb25nZXIgcmVxdWlyZWQ6IEV4cGVyaW1lbnQgc3BlY2lmaWVkIHdpdGggY29uZmxpY3RpbmcgdmFsdWVzOiBObyBkZWZhdWx0IHZhbHVlIGZvciBmcm9udF9lbmQuZGlhZ25vc3RpY19tZXNzYWdlQ29kZURpYWdub3N0aWNNZXNzYWdlRnJvbUpzb25Gb3JtYXR0ZWRNZXNzYWdlYW5zaUZvcm1hdHRlZHBsYWluVGV4dEZvcm1hdHRlZHNldmVyaXR5Z2V0TWVzc2FnZUNvZGVPYmplY3RnZXRNZXNzYWdlQ29kZWdldE1lc3NhZ2VBcmd1bWVudHNyZWxhdGVkSW5mb3JtYXRpb25jb25zdGFudFVwZGF0ZTIwMThjb250cm9sRmxvd0NvbGxlY3Rpb25zZXh0ZW5zaW9uTWV0aG9kc3NwcmVhZENvbGxlY3Rpb25zdHJpcGxlU2hpZnRleHBpcmVkRmxhZ2NvbnN0YW50LXVwZGF0ZS0yMDE4Y29udHJvbC1mbG93LWNvbGxlY3Rpb25zZXh0ZW5zaW9uLW1ldGhvZHNub24tbnVsbGFibGVzcHJlYWQtY29sbGVjdGlvbnN0cmlwbGUtc2hpZnRzZXQtbGl0ZXJhbHNmcm9udF9lbmQuZmlsZV9zeXN0ZW1lbnRpdHlGb3JVcmlyZWFkQXNCeXRlc3JlYWRBc1N0cmluZ0ZpbGVTeXN0ZW1FeGNlcHRpb24odXJpPTsgbWVzc2FnZT1VaW50OExpc3RCaW5hcnlCdWlsZGVyUGFja2FnZXNwYWNrYWdlX2NvbmZpZ01hcFBhY2thZ2VzcHJpbnREaWFnbm9zdGljTWVzc2FnZWNvbW1hbmRfbGluZV9yZXBvcnRpbmdNZXNzYWdlbWVzc2FnZUNhbnRJbmZlclBhY2thZ2VzRnJvbU1hbnlJbnB1dHNtZXNzYWdlQ2FudEluZmVyUGFja2FnZXNGcm9tUGFja2FnZVVyaW1lc3NhZ2VJbnRlcm5hbFByb2JsZW1Qcm92aWRlZEJvdGhDb21waWxlU2RrQW5kU2RrU3VtbWFyeW1lc3NhZ2VNaXNzaW5nSW5wdXRub0xlbmd0aHRlbXBsYXRlQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb250ZW1wbGF0ZUNhbnRSZWFkRmlsZXRlbXBsYXRlSW5wdXRGaWxlTm90Rm91bmR0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVVuc3VwcG9ydGVkdGVtcGxhdGVQYWNrYWdlc0ZpbGVGb3JtYXR0ZW1wbGF0ZVNka1Jvb3ROb3RGb3VuZHRlbXBsYXRlU2RrU3BlY2lmaWNhdGlvbk5vdEZvdW5kdGVtcGxhdGVTZGtTdW1tYXJ5Tm90Rm91bmREZWJ1Z0Fib3J0VGlja2VyVXJpVHJhbnNsYXRvckxpYnJhcmllc1NwZWNpZmljYXRpb25FeGNlcHRpb25UYXJnZXRMaWJyYXJpZXNTcGVjaWZpY2F0aW9uX3Jhd19wYWNrYWdlc19wYWNrYWdlc1VyaV91cmlUcmFuc2xhdG9yX3Nka1N1bW1hcnlDb21wb25lbnRfaW5wdXRTdW1tYXJpZXNDb21wb25lbnRzX2xpbmtlZERlcGVuZGVuY2llc19zZGtSb290X3Nka1N1bW1hcnlfc2RrU3VtbWFyeUJ5dGVzX2xpYnJhcmllc1NwZWNpZmljYXRpb25Vcml0aWNrZXJfZmlsZVN5c3RlbV90YXJnZXRfY29tcHV0ZWRTZGtEZWZhdWx0c2lzVmVyYm9zZXBhY2thZ2VzVXJpX2Vuc3VyZVNka0RlZmF1bHRzbG9hZFNka1N1bW1hcnlCeXRlc19yZWFkQXNCeXRlc3BhY2thZ2VzVXJpUmF3Zm9ybWF0Zm9ybWF0dGVkZm9ybWF0dGVkQ29udGV4dFNldmVyaXR5LmNvbnRleHR3aXRoRm9ybWF0dGluZ2xvZ0Vycm9ycmVwb3J0RGlhZ25vc3RpY01lc3NhZ2VfZGVmYXVsdERpYWdub3N0aWNNZXNzYWdlSGFuZGxlcnJlcG9ydFdpdGhvdXRMb2NhdGlvbndpdGhvdXRMb2NhdGlvbnZhbGlkYXRlT3B0aW9uc2Vycm9yT25NaXNzaW5nSW5wdXQ6YXN5bmNfdGVtcG9yYXJ5XzA6YXN5bmNfdGVtcG9yYXJ5XzFkZWJ1Z1N0cmluZ05vIGlucHV0IGZpbGUgcHJvdmlkZWQgdG8gdGhlIGNvbXBpbGVyLk1pc3NpbmdJbnB1dFNESyByb290IGRpcmVjdG9yeSBub3QgZm91bmQ6ICN1cmkud2l0aEFyZ3VtZW50c1NESyBzdW1tYXJ5IG5vdCBmb3VuZDogI3VyaS5UaGUgY29tcGlsZVNkayBhbmQgc2RrU3VtbWFyeSBvcHRpb25zIGFyZSBtdXR1YWxseSBleGNsdXNpdmVJbnRlcm5hbFByb2JsZW1Qcm92aWRlZEJvdGhDb21waWxlU2RrQW5kU2RrU3VtbWFyeVNldmVyaXR5LmludGVybmFsUHJvYmxlbUlucHV0IGZpbGUgbm90IGZvdW5kOiAjdXJpLl9jcmVhdGVGaWxlU3lzdGVtaXNFeHBlcmltZW50RW5hYmxlZGxvYWRTZGtTdW1tYXJ5bG9hZENvbXBvbmVudHNka1N1bW1hcnlDb21wb25lbnRwbGF0Zm9ybXNka1N1bW1hcnkgYWxyZWFkeSBsb2FkZWQubG9hZElucHV0U3VtbWFyaWVzYWxsQnl0ZXNpbnB1dFN1bW1hcmllc0NvbXBvbmVudHNjb21wb25lbnRzaW5wdXRTdW1tYXJpZXNDb21wb25lbnRzIGFscmVhZHkgbG9hZGVkLmxvYWRMaW5rRGVwZW5kZW5jaWVzYWx3YXlzQ3JlYXRlTmV3TmFtZWROb2Rlc2Rpc2FibGVMYXp5UmVhZGluZ2dldFVyaVRyYW5zbGF0b3JieXBhc3NDYWNoZWxvZ01zU3RhcnRlZCBidWlsZGluZyBVcmlUcmFuc2xhdG9yX2NvbXB1dGVMaWJyYXJ5U3BlY2lmaWNhdGlvblJlYWQgbGlicmFyaWVzIGZpbGVfZ2V0UGFja2FnZXNwYWNrYWdlc1JlYWQgcGFja2FnZXMgZmlsZTpzYXZlZF90cnlfY29udGV4dF92YXIxX2Zhc3RhU0RLIGxpYnJhcmllcyBzcGVjaWZpY2F0aW9uIG5vdCBmb3VuZDogI3VyaS5Ob3JtYWxseSwgdGhlIHNwZWNpZmljYXRpb24gaXMgYSBmaWxlIG5hbWVkICdsaWJyYXJpZXMuanNvbicgaW4gdGhlIERhcnQgU0RLIGluc3RhbGwgbG9jYXRpb24uc3BlY1VuYWJsZSB0byByZWFkIHRoZSAnbGlicmFyaWVzLmpzb24nIHNwZWNpZmljYXRpb24gZmlsZToKICAjc3RyaW5nLmNyZWF0ZVBhY2thZ2VzRnJvbUZpbGVDYW4ndCBpbmZlciBhIC5wYWNrYWdlcyBmaWxlIHdoZW4gY29tcGlsaW5nIG11bHRpcGxlIGlucHV0cy5Ucnkgc3BlY2lmeWluZyB0aGUgZmlsZSBleHBsaWNpdGx5IHdpdGggdGhlIC0tcGFja2FnZXMgb3B0aW9uLkNhbnRJbmZlclBhY2thZ2VzRnJvbU1hbnlJbnB1dHNDYW4ndCBpbmZlciBhIC5wYWNrYWdlcyBmaWxlIGZyb20gYW4gaW5wdXQgJ3BhY2thZ2U6KicgVVJJLkNhbnRJbmZlclBhY2thZ2VzRnJvbVBhY2thZ2VVcmlfZmluZFBhY2thZ2VzY29udGVudHNFcnJvciB3aGVuIHJlYWRpbmcgJyN1cmknOiAjc3RyaW5nUHJvYmxlbSBpbiBwYWNrYWdlcyBjb25maWd1cmF0aW9uIGZpbGU6ICNzdHJpbmdzY3JpcHRVcmlVbnN1cHBvcnRlZCBvcGVyYXRpb246ICcjbmFtZScuRXhwZWN0ZWQgaW5wdXQgVXJpIHRvIGJlIGFic29sdXRlOiBjaGVja0luRGlyY2FuZGlkYXRlLnBhY2thZ2VzcGFyZW50RGlyLi5yZXBsYWNlaW5mZXIgdGhlIGRlZmF1bHQgc2RrIGxvY2F0aW9udm1fcGxhdGZvcm1fc3Ryb25nLmRpbGx3cml0ZUxpc3RlbGVtZW50czogPGVtcHR5PnMgIC0gSW5wdXRzOiBPdXRwdXQ6IFdhcyBkaWFnbm9zdGljIG1lc3NhZ2UgaGFuZGxlciBwcm92aWRlZDogbm95ZXNGaWxlU3lzdGVtOiAocHJvdmlkZWQ6IElucHV0IFN1bW1hcmllc0xpbmtlZCBEZXBlbmRlbmNpZXNQYWNrYWdlcyB1cmk6IFBhY2thZ2VzOiBDb21waWxlIFNESzogU0RLIHJvb3Q6ICAocHJvdmlkZWQ6IFNESyBzcGVjaWZpY2F0aW9uOiBTREsgc3VtbWFyeTogTGVnYWN5IG1vZGU6IFRhcmdldDogdGhyb3dPbkVycm9yc0ZvckRlYnVnZ2luZzogdGhyb3dPbldhcm5pbmdzRm9yRGVidWdnaW5nOiBleGl0IG9uIHByb2JsZW06IEVtYmVkIHNvdXJjZXM6IGRlYnVnRHVtcDogdmVyYm9zZTogdmVyaWZ5OiBIZXJtZXRpY0ZpbGVTeXN0ZW1pbmNsdWRlZEZpbGVzX3JlYWxGaWxlU3lzdGVtSGVybWV0aWNBY2Nlc3NFeGNlcHRpb25JbnZhbGlkIGFjY2VzcyB0byB0aGUgZmlsZSBpcyBhY2Nlc3NlZCBpbiBhIG1vZHVsYXIgaGVybWV0aWMgYnVpbGQsIGJ1dCBpdCB3YXMgbm90IGV4cGxpY2l0bHkgbGlzdGVkIGFzIGFuIGlucHV0Lmpzb25EZWNvZGVqc29uRW5jb2RlX3RhcmdldHN0YXJnZXRTcGVjTm8gbGlicmFyeSBzcGVjaWZpY2F0aW9uIGZvciB0YXJnZXQgImJhc2VVcmlqc29uRGF0YXRvcC1sZXZlbCBzcGVjaWZpY2F0aW9uIGlzIG5vdCBhIG1hcHRhcmdldE5hbWV0YXJnZXREYXRhY29tbWVudDp0YXJnZXQgc3BlY2lmaWNhdGlvbiBmb3IgJycgaXMgbm90IGEgbWFwdGFyZ2V0IHNwZWNpZmljYXRpb24gZm9yICcnIGRvZXNuJ3QgaGF2ZSBhIGxpYnJhcmllcyBlbnRyeWxpYnJhcmllc0RhdGFsaWJyYXJpZXMgZW50cnkgZm9yICdsaWJyYXJ5IGRhdGEgZm9yICcnIGluIHRhcmdldCAnY2hlY2tBbmRSZXNvbHZldXJpU3RyaW5ndXJpIHZhbHVlICcnIGlzIG5vdCBhIHN0cmluZyhmcm9tIGxpYnJhcnkgJycpdXJpIHNjaGVtZSBpbiAncGF0Y2hlc3BhdGNoZXMgZW50cnkgZm9yICcnIGlzIG5vdCBhIGxpc3Qgb3IgYSBzdHJpbmdzdXBwb3J0ZWQic3VwcG9ydGVkIiBlbnRyeTogZXhwZWN0ZWQgYSAnYm9vbCcgYnV0IGdvdCBhICcnICgnX3JlcG9ydEVycm9ydG9Kc29uU3RyaW5ndG9Kc29uTWFwcGF0aEZvcl9saWJyYXJpZXNsaWJsaWJyYXJ5SW5mb0ZvckxpYnJhcnlJbmZvZmFzdGEuY29tcGlsZXJfY29udGV4dFpvbmVydW5ab25lZGNvbXB1dGVFbmFibGVDb2xvcnNtZXNzYWdlSW50ZXJuYWxQcm9ibGVtTWlzc2luZ0NvbnRleHRlcnJvcnNlbmFibGVDb2xvcnNDYWNoZWRjYWNoZWRTZGtSb290ZGlzYWJsZUNvbG9yc2Zvcm1hdFdpdGhvdXRMb2NhdGlvbnJlY29yZERlcGVuZGVuY3lFeHBlY3RlZCBhIGZpbGUtVVJJLCBidXQgZ290OiAnQ29tcGlsZXIgY2Fubm90IHJ1biB3aXRob3V0IGEgY29tcGlsZXIgY29udGV4dC5BcmUgY2FsbHMgdG8gdGhlIGNvbXBpbGVyIHdyYXBwZWQgaW4gQ29tcGlsZXJDb250ZXh0LnJ1bkluQ29udGV4dD9JbnRlcm5hbFByb2JsZW1NaXNzaW5nQ29udGV4dHRpcEludGVybmFsIHByb2JsZW06IApUaXA6IGlzQWN0aXZlcnVuSW5Db250ZXh0YWN0aW9uem9uZVZhbHVlc3J1bldpdGhPcHRpb25zcnVuV2l0aERlZmF1bHRPcHRpb25zY29tcGlsZXJDb250ZXh0S2V5ZmFzdGEuY29kZXNKc29uRW5jb2RlcnV0aWxmYXN0YV9jb2Rlc19nZW5lcmF0ZWQuZGFydFN1bW1hcnlUZW1wbGF0ZXRlbXBsYXRlYW5hbHl6ZXJDb2Rlc01lc3NhZ2VDb2RlVGVtcGxhdGVtZXNzYWdlVGVtcGxhdGV0aXBUZW1wbGF0ZW1lc3NhZ2VPYmplY3Rsb2NhdGVkTWVzc2FnZTpzeW5jX29wOml0ZXJhdG9yX2N1cnJlbnR0b0pzb25lbmNvZGVyY29udmVydGZyb21Kc29uanNvblN0cmluZ2RlY29kZWRTZXZlcml0eS5lcnJvckxlZ2FjeVdhcm5pbmdTZXZlcml0eS5pZ25vcmVkU2V2ZXJpdHkud2FybmluZ3RlbXBsYXRlQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25UaGUgY2xhc3MgJyNuYW1lJyBpcyBhYnN0cmFjdCBhbmQgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLmNvZGVBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uTkVXX1dJVEhfQUJTVFJBQ1RfQ0xBU1Njb2RlQWJzdHJhY3RDbGFzc01lbWJlck1lbWJlcnMgb2YgY2xhc3NlcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnYWJzdHJhY3QnLlRyeSByZW1vdmluZyB0aGUgJ2Fic3RyYWN0JyBrZXl3b3JkLiBZb3UgY2FuIGFkZCB0aGUgJ2Fic3RyYWN0JyBrZXl3b3JkIGJlZm9yZSB0aGUgY2xhc3MgZGVjbGFyYXRpb24uQWJzdHJhY3RDbGFzc01lbWJlcm1lc3NhZ2VBYnN0cmFjdENsYXNzTWVtYmVyY29kZUFic3RyYWN0Tm90U3luY0Fic3RyYWN0IG1ldGhvZHMgY2FuJ3QgdXNlICdhc3luYycsICdhc3luYyonLCBvciAnc3luYyonLkFic3RyYWN0Tm90U3luY05PTl9TWU5DX0FCU1RSQUNUX01FVEhPRG1lc3NhZ2VBYnN0cmFjdE5vdFN5bmN0ZW1wbGF0ZUFic3RyYWN0UmVkaXJlY3RlZENsYXNzSW5zdGFudGlhdGlvbkZhY3RvcnkgcmVkaXJlY3RzIHRvIGNsYXNzICcjbmFtZScsIHdoaWNoIGlzIGFic3RyYWN0IGFuZCBjYW4ndCBiZSBpbnN0YW50aWF0ZWQuY29kZUFic3RyYWN0UmVkaXJlY3RlZENsYXNzSW5zdGFudGlhdGlvbkFic3RyYWN0UmVkaXJlY3RlZENsYXNzSW5zdGFudGlhdGlvbkZBQ1RPUllfUkVESVJFQ1RTX1RPX0FCU1RSQUNUX0NMQVNTdGVtcGxhdGVBY2Nlc3NFcnJvckFjY2VzcyBlcnJvcjogJyNuYW1lJy5jb2RlQWNjZXNzRXJyb3JBY2Nlc3NFcnJvcnRlbXBsYXRlQW1iaWd1b3VzU3VwZXJ0eXBlcycjbmFtZScgY2FuJ3QgaW1wbGVtZW50IGJvdGggJyN0eXBlJyBhbmQgJyN0eXBlMidjb2RlQW1iaWd1b3VzU3VwZXJ0eXBlc0FtYmlndW91c1N1cGVydHlwZXNBTUJJR1VPVVNfU1VQRVJUWVBFU2NvZGVBbm9ueW1vdXNCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbkNhbid0IGJyZWFrIHRvIGEgdGFyZ2V0IGluIGEgZGlmZmVyZW50IGZ1bmN0aW9uLkFub255bW91c0JyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uTEFCRUxfSU5fT1VURVJfU0NPUEVtZXNzYWdlQW5vbnltb3VzQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb25jb2RlQW5vbnltb3VzQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb25DYW4ndCBjb250aW51ZSBhdCBhIHRhcmdldCBpbiBhIGRpZmZlcmVudCBmdW5jdGlvbi5Bbm9ueW1vdXNDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbm1lc3NhZ2VBbm9ueW1vdXNDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbnRlbXBsYXRlQXJndW1lbnRUeXBlTm90QXNzaWduYWJsZVRoZSBhcmd1bWVudCB0eXBlICcjdHlwZScgY2FuJ3QgYmUgYXNzaWduZWQgdG8gdGhlIHBhcmFtZXRlciB0eXBlICcjdHlwZTInLlRyeSBjaGFuZ2luZyB0aGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVyLCBvciBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byAnI3R5cGUyJy5jb2RlQXJndW1lbnRUeXBlTm90QXNzaWduYWJsZUFyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGVBUkdVTUVOVF9UWVBFX05PVF9BU1NJR05BQkxFdGVtcGxhdGVBc2NpaUNvbnRyb2xDaGFyYWN0ZXJUaGUgY29udHJvbCBjaGFyYWN0ZXIgI3VuaWNvZGUgY2FuIG9ubHkgYmUgdXNlZCBpbiBzdHJpbmdzIGFuZCBjb21tZW50cy5jb2RlQXNjaWlDb250cm9sQ2hhcmFjdGVyQXNjaWlDb250cm9sQ2hhcmFjdGVySUxMRUdBTF9DSEFSQUNURVJjb2RlQXNzZXJ0QXNFeHByZXNzaW9uYGFzc2VydGAgY2FuJ3QgYmUgdXNlZCBhcyBhbiBleHByZXNzaW9uLkFzc2VydEFzRXhwcmVzc2lvbm1lc3NhZ2VBc3NlcnRBc0V4cHJlc3Npb25jb2RlQXNzZXJ0RXh0cmFuZW91c0FyZ3VtZW50YGFzc2VydGAgY2FuJ3QgaGF2ZSBtb3JlIHRoYW4gdHdvIGFyZ3VtZW50cy5Bc3NlcnRFeHRyYW5lb3VzQXJndW1lbnRtZXNzYWdlQXNzZXJ0RXh0cmFuZW91c0FyZ3VtZW50Y29kZUF3YWl0QXNJZGVudGlmaWVyJ2F3YWl0JyBjYW4ndCBiZSB1c2VkIGFzIGFuIGlkZW50aWZpZXIgaW4gJ2FzeW5jJywgJ2FzeW5jKicsIG9yICdzeW5jKicgbWV0aG9kcy5Bd2FpdEFzSWRlbnRpZmllckFTWU5DX0tFWVdPUkRfVVNFRF9BU19JREVOVElGSUVSbWVzc2FnZUF3YWl0QXNJZGVudGlmaWVyY29kZUF3YWl0Rm9yTm90QXN5bmNUaGUgYXN5bmNocm9ub3VzIGZvci1pbiBjYW4gb25seSBiZSB1c2VkIGluIGZ1bmN0aW9ucyBtYXJrZWQgd2l0aCAnYXN5bmMnIG9yICdhc3luYyonLlRyeSBtYXJraW5nIHRoZSBmdW5jdGlvbiBib2R5IHdpdGggZWl0aGVyICdhc3luYycgb3IgJ2FzeW5jKicsIG9yIHJlbW92aW5nIHRoZSAnYXdhaXQnIGJlZm9yZSB0aGUgZm9yIGxvb3AuQXdhaXRGb3JOb3RBc3luY0FTWU5DX0ZPUl9JTl9XUk9OR19DT05URVhUbWVzc2FnZUF3YWl0Rm9yTm90QXN5bmNjb2RlQXdhaXROb3RBc3luYydhd2FpdCcgY2FuIG9ubHkgYmUgdXNlZCBpbiAnYXN5bmMnIG9yICdhc3luYyonIG1ldGhvZHMuQXdhaXROb3RBc3luY0FXQUlUX0lOX1dST05HX0NPTlRFWFRtZXNzYWdlQXdhaXROb3RBc3luY3RlbXBsYXRlQmFkVHlwZVZhcmlhYmxlSW5TdXBlcnR5cGVGb3VuZCB1bnN1cHBvcnRlZCB1c2VzIG9mICcjbmFtZScgaW4gc3VwZXJ0eXBlICcjbmFtZTInLmNvZGVCYWRUeXBlVmFyaWFibGVJblN1cGVydHlwZUJhZFR5cGVWYXJpYWJsZUluU3VwZXJ0eXBldGVtcGxhdGVCb3VuZElzc3VlVmlhQ3ljbGVOb25TaW1wbGljaXR5R2VuZXJpYyB0eXBlICcjbmFtZScgY2FuJ3QgYmUgdXNlZCB3aXRob3V0IHR5cGUgYXJndW1lbnRzIGluIHRoZSBib3VuZHMgb2YgaXRzIG93biB0eXBlIHZhcmlhYmxlcy4gSXQgaXMgcmVmZXJlbmNlZCBpbmRpcmVjdGx5IHRocm91Z2ggJyNuYW1lMicuVHJ5IHByb3ZpZGluZyB0eXBlIGFyZ3VtZW50cyB0byAnI25hbWUyJyBoZXJlIG9yIHRvIHNvbWUgb3RoZXIgcmF3IHR5cGVzIGluIHRoZSBib3VuZHMgYWxvbmcgdGhlIHJlZmVyZW5jZSBjaGFpbi5jb2RlQm91bmRJc3N1ZVZpYUN5Y2xlTm9uU2ltcGxpY2l0eUJvdW5kSXNzdWVWaWFDeWNsZU5vblNpbXBsaWNpdHlOT1RfSU5TVEFOVElBVEVEX0JPVU5EdGVtcGxhdGVCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHlHZW5lcmljIHR5cGUgJyNuYW1lJyBjYW4ndCBiZSB1c2VkIHdpdGhvdXQgdHlwZSBhcmd1bWVudHMgaW4gdGhlIGJvdW5kcyBvZiBpdHMgb3duIHR5cGUgdmFyaWFibGVzLlRyeSBwcm92aWRpbmcgdHlwZSBhcmd1bWVudHMgdG8gJyNuYW1lJyBoZXJlLmNvZGVCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHlCb3VuZElzc3VlVmlhTG9vcE5vblNpbXBsaWNpdHl0ZW1wbGF0ZUJvdW5kSXNzdWVWaWFSYXdUeXBlV2l0aE5vblNpbXBsZUJvdW5kc0dlbmVyaWMgdHlwZSAnI25hbWUnIGNhbid0IGJlIHVzZWQgd2l0aG91dCB0eXBlIGFyZ3VtZW50cyBpbiBhIHR5cGUgdmFyaWFibGUgYm91bmQuY29kZUJvdW5kSXNzdWVWaWFSYXdUeXBlV2l0aE5vblNpbXBsZUJvdW5kc0JvdW5kSXNzdWVWaWFSYXdUeXBlV2l0aE5vblNpbXBsZUJvdW5kc2NvZGVCcmVha091dHNpZGVPZkxvb3BBIGJyZWFrIHN0YXRlbWVudCBjYW4ndCBiZSB1c2VkIG91dHNpZGUgb2YgYSBsb29wIG9yIHN3aXRjaCBzdGF0ZW1lbnQuVHJ5IHJlbW92aW5nIHRoZSBicmVhayBzdGF0ZW1lbnQuQnJlYWtPdXRzaWRlT2ZMb29wbWVzc2FnZUJyZWFrT3V0c2lkZU9mTG9vcHRlbXBsYXRlQnJlYWtUYXJnZXRPdXRzaWRlRnVuY3Rpb25DYW4ndCBicmVhayB0byAnI25hbWUnIGluIGEgZGlmZmVyZW50IGZ1bmN0aW9uLmNvZGVCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbkJyZWFrVGFyZ2V0T3V0c2lkZUZ1bmN0aW9udGVtcGxhdGVCdWlsdEluSWRlbnRpZmllckFzVHlwZVRoZSBidWlsdC1pbiBpZGVudGlmaWVyICcjbGV4ZW1lJyBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZS5UcnkgY29ycmVjdGluZyB0aGUgbmFtZSB0byBtYXRjaCBhbiBleGlzdGluZyB0eXBlLmNvZGVCdWlsdEluSWRlbnRpZmllckFzVHlwZUJ1aWx0SW5JZGVudGlmaWVyQXNUeXBlQlVJTFRfSU5fSURFTlRJRklFUl9BU19UWVBFdGVtcGxhdGVCdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb25DYW4ndCB1c2UgJyNsZXhlbWUnIGFzIGEgbmFtZSBoZXJlLmNvZGVCdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb25CdWlsdEluSWRlbnRpZmllckluRGVjbGFyYXRpb25CVUlMVF9JTl9JREVOVElGSUVSX0lOX0RFQ0xBUkFUSU9OY29kZUJ5dGVjb2RlTGltaXRFeGNlZWRlZFRvb01hbnlBcmd1bWVudHNEYXJ0IGJ5dGVjb2RlIGxpbWl0IGV4Y2VlZGVkOiB0b28gbWFueSBhcmd1bWVudHMuQnl0ZWNvZGVMaW1pdEV4Y2VlZGVkVG9vTWFueUFyZ3VtZW50c21lc3NhZ2VCeXRlY29kZUxpbWl0RXhjZWVkZWRUb29NYW55QXJndW1lbnRzY29kZUNhbmRpZGF0ZUZvdW5kRm91bmQgdGhpcyBjYW5kaWRhdGUsIGJ1dCB0aGUgYXJndW1lbnRzIGRvbid0IG1hdGNoLkNhbmRpZGF0ZUZvdW5kbWVzc2FnZUNhbmRpZGF0ZUZvdW5kdGVtcGxhdGVDYW5kaWRhdGVGb3VuZElzRGVmYXVsdENvbnN0cnVjdG9yVGhlIGNsYXNzICcjbmFtZScgaGFzIGEgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBubyBhcmd1bWVudHMuY29kZUNhbmRpZGF0ZUZvdW5kSXNEZWZhdWx0Q29uc3RydWN0b3JDYW5kaWRhdGVGb3VuZElzRGVmYXVsdENvbnN0cnVjdG9yY29kZUNhbm5vdEFzc2lnblRvUGFyZW50aGVzaXplZEV4cHJlc3Npb25DYW4ndCBhc3NpZ24gdG8gYSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb24uQ2Fubm90QXNzaWduVG9QYXJlbnRoZXNpemVkRXhwcmVzc2lvbkFTU0lHTk1FTlRfVE9fUEFSRU5USEVTSVpFRF9FWFBSRVNTSU9ObWVzc2FnZUNhbm5vdEFzc2lnblRvUGFyZW50aGVzaXplZEV4cHJlc3Npb25jb2RlQ2Fubm90QXNzaWduVG9TdXBlckNhbid0IGFzc2lnbiB0byBzdXBlci5DYW5ub3RBc3NpZ25Ub1N1cGVyTk9UX0FOX0xWQUxVRW1lc3NhZ2VDYW5ub3RBc3NpZ25Ub1N1cGVyY29kZUNhbm5vdFJlYWRTZGtTcGVjaWZpY2F0aW9uQ2Fubm90UmVhZFNka1NwZWNpZmljYXRpb25jb2RlQ2FudERpc2FtYmlndWF0ZUFtYmlndW91c0luZm9ybWF0aW9uQm90aCBJdGVyYWJsZSBhbmQgTWFwIHNwcmVhZCBlbGVtZW50cyBlbmNvdW50ZXJlZCBpbiBhbWJpZ3VvdXMgbGl0ZXJhbC5DYW50RGlzYW1iaWd1YXRlQW1iaWd1b3VzSW5mb3JtYXRpb25tZXNzYWdlQ2FudERpc2FtYmlndWF0ZUFtYmlndW91c0luZm9ybWF0aW9uY29kZUNhbnREaXNhbWJpZ3VhdGVOb3RFbm91Z2hJbmZvcm1hdGlvbk5vdCBlbm91Z2ggdHlwZSBpbmZvcm1hdGlvbiB0byBkaXNhbWJpZ3VhdGUgYmV0d2VlbiBsaXRlcmFsIHNldCBhbmQgbGl0ZXJhbCBtYXAuVHJ5IHByb3ZpZGluZyB0eXBlIGFyZ3VtZW50cyBmb3IgdGhlIGxpdGVyYWwgZXhwbGljaXRseSB0byBkaXNhbWJpZ3VhdGUgaXQuQ2FudERpc2FtYmlndWF0ZU5vdEVub3VnaEluZm9ybWF0aW9ubWVzc2FnZUNhbnREaXNhbWJpZ3VhdGVOb3RFbm91Z2hJbmZvcm1hdGlvbmNvZGVDYW50SW5mZXJQYWNrYWdlc0Zyb21NYW55SW5wdXRzY29kZUNhbnRJbmZlclBhY2thZ2VzRnJvbVBhY2thZ2VVcml0ZW1wbGF0ZUNhbnRJbmZlclJldHVyblR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlc0Nhbid0IGluZmVyIGEgcmV0dXJuIHR5cGUgZm9yICcjbmFtZScgYXMgc29tZSBvZiB0aGUgaW5oZXJpdGVkIG1lbWJlcnMgaGF2ZSBkaWZmZXJlbnQgdHlwZXMuVHJ5IGFkZGluZyBhbiBleHBsaWNpdCB0eXBlLmNvZGVDYW50SW5mZXJSZXR1cm5UeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXNDYW50SW5mZXJSZXR1cm5UeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXNJTlZBTElEX01FVEhPRF9PVkVSUklERXRlbXBsYXRlQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHlDYW4ndCBpbmZlciB0aGUgdHlwZSBvZiAnI3N0cmluZyc6IGNpcmN1bGFyaXR5IGZvdW5kIGR1cmluZyB0eXBlIGluZmVyZW5jZS5TcGVjaWZ5IHRoZSB0eXBlIGV4cGxpY2l0bHkuY29kZUNhbnRJbmZlclR5cGVEdWVUb0NpcmN1bGFyaXR5Q2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHlSRUNVUlNJVkVfQ09NUElMRV9USU1FX0NPTlNUQU5UdGVtcGxhdGVDYW50SW5mZXJUeXBlRHVlVG9JbmNvbnNpc3RlbnRPdmVycmlkZXNDYW4ndCBpbmZlciBhIHR5cGUgZm9yICcjbmFtZScgYXMgc29tZSBvZiB0aGUgaW5oZXJpdGVkIG1lbWJlcnMgaGF2ZSBkaWZmZXJlbnQgdHlwZXMuY29kZUNhbnRJbmZlclR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlc0NhbnRJbmZlclR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlc2NvZGVDYW50UmVhZEZpbGVDYW50UmVhZEZpbGVVUklfRE9FU19OT1RfRVhJU1R0ZW1wbGF0ZUNhbnRVc2VDb250cm9sRmxvd09yU3ByZWFkQXNDb25zdGFudCcjbGV4ZW1lJyBpcyBub3Qgc3VwcG9ydGVkIGluIGNvbnN0YW50IGV4cHJlc3Npb25zLmNvZGVDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnRDYW50VXNlQ29udHJvbEZsb3dPclNwcmVhZEFzQ29uc3RhbnROT1RfQ09OU1RBTlRfRVhQUkVTU0lPTnRlbXBsYXRlQ2FudFVzZURlZmVycmVkUHJlZml4QXNDb25zdGFudCcjbGV4ZW1lJyBjYW4ndCBiZSB1c2VkIGluIGEgY29uc3RhbnQgZXhwcmVzc2lvbiBiZWNhdXNlIGl0J3MgbWFya2VkIGFzICdkZWZlcnJlZCcgd2hpY2ggbWVhbnMgaXQgaXNuJ3QgYXZhaWxhYmxlIHVudGlsIGxvYWRlZC5UcnkgbW92aW5nIHRoZSBjb25zdGFudCBmcm9tIHRoZSBkZWZlcnJlZCBsaWJyYXJ5LCBvciByZW1vdmluZyAnZGVmZXJyZWQnIGZyb20gdGhlIGltcG9ydC4KY29kZUNhbnRVc2VEZWZlcnJlZFByZWZpeEFzQ29uc3RhbnRDYW50VXNlRGVmZXJyZWRQcmVmaXhBc0NvbnN0YW50Q09OU1RfREVGRVJSRURfQ0xBU1Njb2RlQ2FudFVzZVByZWZpeEFzRXhwcmVzc2lvbkEgcHJlZml4IGNhbid0IGJlIHVzZWQgYXMgYW4gZXhwcmVzc2lvbi5DYW50VXNlUHJlZml4QXNFeHByZXNzaW9uUFJFRklYX0lERU5USUZJRVJfTk9UX0ZPTExPV0VEX0JZX0RPVG1lc3NhZ2VDYW50VXNlUHJlZml4QXNFeHByZXNzaW9uY29kZUNhbnRVc2VQcmVmaXhXaXRoTnVsbEF3YXJlQSBwcmVmaXggY2FuJ3QgYmUgdXNlZCB3aXRoIG51bGwtYXdhcmUgb3BlcmF0b3JzLkl0IHNob3VsZCBiZSBzYWZlIHRvIHJlbW92ZSB0aGUgJz8nIGFzIGEgcHJlZml4IGlzIG5ldmVyIG51bGwuQ2FudFVzZVByZWZpeFdpdGhOdWxsQXdhcmVtZXNzYWdlQ2FudFVzZVByZWZpeFdpdGhOdWxsQXdhcmVjb2RlQ2F0Y2hTeW50YXgnY2F0Y2gnIG11c3QgYmUgZm9sbG93ZWQgYnkgJyhpZGVudGlmaWVyKScgb3IgJyhpZGVudGlmaWVyLCBpZGVudGlmaWVyKScuTm8gdHlwZXMgYXJlIG5lZWRlZCwgdGhlIGZpcnN0IGlzIGdpdmVuIGJ5ICdvbicsIHRoZSBzZWNvbmQgaXMgYWx3YXlzICdTdGFja1RyYWNlJy5DYXRjaFN5bnRheG1lc3NhZ2VDYXRjaFN5bnRheGNvZGVDYXRjaFN5bnRheEV4dHJhUGFyYW1ldGVyc0NhdGNoU3ludGF4RXh0cmFQYXJhbWV0ZXJzbWVzc2FnZUNhdGNoU3ludGF4RXh0cmFQYXJhbWV0ZXJzY29kZUNsYXNzSW5DbGFzc0NsYXNzZXMgY2FuJ3QgYmUgZGVjbGFyZWQgaW5zaWRlIG90aGVyIGNsYXNzZXMuVHJ5IG1vdmluZyB0aGUgY2xhc3MgdG8gdGhlIHRvcC1sZXZlbC5DbGFzc0luQ2xhc3NtZXNzYWdlQ2xhc3NJbkNsYXNzY29kZUNvbG9uSW5QbGFjZU9mSW5Gb3ItaW4gbG9vcHMgdXNlICdpbicgcmF0aGVyIHRoYW4gYSBjb2xvbi5UcnkgcmVwbGFjaW5nIHRoZSBjb2xvbiB3aXRoIHRoZSBrZXl3b3JkICdpbicuQ29sb25JblBsYWNlT2ZJbm1lc3NhZ2VDb2xvbkluUGxhY2VPZkludGVtcGxhdGVDb21iaW5lZE1lbWJlclNpZ25hdHVyZUZhaWxlZENsYXNzICcjbmFtZScgaW5oZXJpdHMgbXVsdGlwbGUgbWVtYmVycyBuYW1lZCAnI25hbWUyJyB3aXRoIGluY29tcGF0aWJsZSBzaWduYXR1cmVzLlRyeSBhZGRpbmcgYSBkZWNsYXJhdGlvbiBvZiAnI25hbWUyJyB0byAnI25hbWUnLmNvZGVDb21iaW5lZE1lbWJlclNpZ25hdHVyZUZhaWxlZENvbWJpbmVkTWVtYmVyU2lnbmF0dXJlRmFpbGVkSU5DT05TSVNURU5UX0lOSEVSSVRBTkNFdGVtcGxhdGVDb25mbGljdGluZ01vZGlmaWVyc01lbWJlcnMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgYm90aCAnI3N0cmluZycgYW5kICcjc3RyaW5nMicuVHJ5IHJlbW92aW5nIG9uZSBvZiB0aGUga2V5d29yZHMuY29kZUNvbmZsaWN0aW5nTW9kaWZpZXJzQ29uZmxpY3RpbmdNb2RpZmllcnN0ZW1wbGF0ZUNvbmZsaWN0c1dpdGhDb25zdHJ1Y3RvckNvbmZsaWN0cyB3aXRoIGNvbnN0cnVjdG9yICcjbmFtZScuY29kZUNvbmZsaWN0c1dpdGhDb25zdHJ1Y3RvckNvbmZsaWN0c1dpdGhDb25zdHJ1Y3RvckNPTkZMSUNUU19XSVRIX0NPTlNUUlVDVE9SdGVtcGxhdGVDb25mbGljdHNXaXRoRmFjdG9yeUNvbmZsaWN0cyB3aXRoIGZhY3RvcnkgJyNuYW1lJy5jb2RlQ29uZmxpY3RzV2l0aEZhY3RvcnlDb25mbGljdHNXaXRoRmFjdG9yeXRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlckNvbmZsaWN0cyB3aXRoIG1lbWJlciAnI25hbWUnLmNvZGVDb25mbGljdHNXaXRoTWVtYmVyQ29uZmxpY3RzV2l0aE1lbWJlckNPTkZMSUNUU19XSVRIX01FTUJFUnRlbXBsYXRlQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmdjb2RlQ29uZmxpY3RzV2l0aE1lbWJlcldhcm5pbmdDb25mbGljdHNXaXRoTWVtYmVyV2FybmluZ3RlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlckNvbmZsaWN0cyB3aXRoIHNldHRlciAnI25hbWUnLmNvZGVDb25mbGljdHNXaXRoU2V0dGVyQ29uZmxpY3RzV2l0aFNldHRlcnRlbXBsYXRlQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmdjb2RlQ29uZmxpY3RzV2l0aFNldHRlcldhcm5pbmdDb25mbGljdHNXaXRoU2V0dGVyV2FybmluZ3RlbXBsYXRlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNvbmZsaWN0cyB3aXRoIHR5cGUgdmFyaWFibGUgJyNuYW1lJy5jb2RlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNvbmZsaWN0c1dpdGhUeXBlVmFyaWFibGVDT05GTElDVElOR19UWVBFX1ZBUklBQkxFX0FORF9NRU1CRVJjb2RlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNhdXNlVGhpcyBpcyB0aGUgdHlwZSB2YXJpYWJsZS5Db25mbGljdHNXaXRoVHlwZVZhcmlhYmxlQ2F1c2VtZXNzYWdlQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNhdXNlY29kZUNvbnN0QW5kRmluYWxNZW1iZXJzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlIGJvdGggJ2NvbnN0JyBhbmQgJ2ZpbmFsJy5UcnkgcmVtb3ZpbmcgZWl0aGVyIHRoZSAnY29uc3QnIG9yICdmaW5hbCcga2V5d29yZC5Db25zdEFuZEZpbmFsbWVzc2FnZUNvbnN0QW5kRmluYWxjb2RlQ29uc3RDbGFzc0NsYXNzZXMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2NvbnN0Jy5UcnkgcmVtb3ZpbmcgdGhlICdjb25zdCcga2V5d29yZC4gSWYgeW91J3JlIHRyeWluZyB0byBpbmRpY2F0ZSB0aGF0IGluc3RhbmNlcyBvZiB0aGUgY2xhc3MgY2FuIGJlIGNvbnN0YW50cywgcGxhY2UgdGhlICdjb25zdCcga2V5d29yZCBvbiAgdGhlIGNsYXNzJyBjb25zdHJ1Y3RvcihzKS5Db25zdENsYXNzbWVzc2FnZUNvbnN0Q2xhc3Njb2RlQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGRDb25zdHJ1Y3RvciBpcyBtYXJrZWQgJ2NvbnN0JyBzbyBhbGwgZmllbGRzIG11c3QgYmUgZmluYWwuQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGRDT05TVF9DT05TVFJVQ1RPUl9XSVRIX05PTl9GSU5BTF9GSUVMRG1lc3NhZ2VDb25zdENvbnN0cnVjdG9yTm9uRmluYWxGaWVsZGNvZGVDb25zdENvbnN0cnVjdG9yTm9uRmluYWxGaWVsZENhdXNlRmllbGQgaXNuJ3QgZmluYWwsIGJ1dCBjb25zdHJ1Y3RvciBpcyAnY29uc3QnLkNvbnN0Q29uc3RydWN0b3JOb25GaW5hbEZpZWxkQ2F1c2VtZXNzYWdlQ29uc3RDb25zdHJ1Y3Rvck5vbkZpbmFsRmllbGRDYXVzZWNvZGVDb25zdENvbnN0cnVjdG9yUmVkaXJlY3Rpb25Ub05vbkNvbnN0QSBjb25zdGFudCBjb25zdHJ1Y3RvciBjYW4ndCBjYWxsIGEgbm9uLWNvbnN0YW50IGNvbnN0cnVjdG9yLkNvbnN0Q29uc3RydWN0b3JSZWRpcmVjdGlvblRvTm9uQ29uc3RtZXNzYWdlQ29uc3RDb25zdHJ1Y3RvclJlZGlyZWN0aW9uVG9Ob25Db25zdGNvZGVDb25zdENvbnN0cnVjdG9yV2l0aEJvZHlBIGNvbnN0IGNvbnN0cnVjdG9yIGNhbid0IGhhdmUgYSBib2R5LlRyeSByZW1vdmluZyBlaXRoZXIgdGhlICdjb25zdCcga2V5d29yZCBvciB0aGUgYm9keS5Db25zdENvbnN0cnVjdG9yV2l0aEJvZHlDT05TVF9DT05TVFJVQ1RPUl9XSVRIX0JPRFltZXNzYWdlQ29uc3RDb25zdHJ1Y3RvcldpdGhCb2R5Y29kZUNvbnN0Q29uc3RydWN0b3JXaXRoTm9uQ29uc3RTdXBlckNvbnN0YW50IGNvbnN0cnVjdG9yIGNhbid0IGNhbGwgbm9uLWNvbnN0YW50IHN1cGVyIGNvbnN0cnVjdG9ycy5Db25zdENvbnN0cnVjdG9yV2l0aE5vbkNvbnN0U3VwZXJDT05TVF9DT05TVFJVQ1RPUl9XSVRIX05PTl9DT05TVF9TVVBFUm1lc3NhZ2VDb25zdENvbnN0cnVjdG9yV2l0aE5vbkNvbnN0U3VwZXJjb2RlQ29uc3RFdmFsQ2lyY3VsYXJpdHlDb25zdGFudCBleHByZXNzaW9uIGRlcGVuZHMgb24gaXRzZWxmLkNvbnN0RXZhbENpcmN1bGFyaXR5bWVzc2FnZUNvbnN0RXZhbENpcmN1bGFyaXR5Y29kZUNvbnN0RXZhbENvbnRleHRXaGlsZSBhbmFseXppbmc6Q29uc3RFdmFsQ29udGV4dG1lc3NhZ2VDb25zdEV2YWxDb250ZXh0dGVtcGxhdGVDb25zdEV2YWxEZWZlcnJlZExpYnJhcnknI25hbWUnIGNhbid0IGJlIHVzZWQgaW4gYSBjb25zdGFudCBleHByZXNzaW9uIGJlY2F1c2UgaXQncyBtYXJrZWQgYXMgJ2RlZmVycmVkJyB3aGljaCBtZWFucyBpdCBpc24ndCBhdmFpbGFibGUgdW50aWwgbG9hZGVkLmNvZGVDb25zdEV2YWxEZWZlcnJlZExpYnJhcnlDb25zdEV2YWxEZWZlcnJlZExpYnJhcnlOT05fQ09OU1RBTlRfREVGQVVMVF9WQUxVRV9GUk9NX0RFRkVSUkVEX0xJQlJBUll0ZW1wbGF0ZUNvbnN0RXZhbER1cGxpY2F0ZUVsZW1lbnRUaGUgZWxlbWVudCAnI2NvbnN0YW50JyBjb25mbGljdHMgd2l0aCBhbm90aGVyIGV4aXN0aW5nIGVsZW1lbnQgaW4gdGhlIHNldC5jb2RlQ29uc3RFdmFsRHVwbGljYXRlRWxlbWVudENvbnN0RXZhbER1cGxpY2F0ZUVsZW1lbnRFUVVBTF9FTEVNRU5UU19JTl9DT05TVF9TRVR0ZW1wbGF0ZUNvbnN0RXZhbER1cGxpY2F0ZUtleVRoZSBrZXkgJyNjb25zdGFudCcgY29uZmxpY3RzIHdpdGggYW5vdGhlciBleGlzdGluZyBrZXkgaW4gdGhlIG1hcC5jb2RlQ29uc3RFdmFsRHVwbGljYXRlS2V5Q29uc3RFdmFsRHVwbGljYXRlS2V5RVFVQUxfS0VZU19JTl9DT05TVF9NQVB0ZW1wbGF0ZUNvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWxUaGUgZWxlbWVudCAnI2NvbnN0YW50JyBkb2VzIG5vdCBoYXZlIGEgcHJpbWl0aXZlIG9wZXJhdG9yICc9PScuY29kZUNvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWxDb25zdEV2YWxFbGVtZW50SW1wbGVtZW50c0VxdWFsQ09OU1RfU0VUX0VMRU1FTlRfVFlQRV9JTVBMRU1FTlRTX0VRVUFMU2NvZGVDb25zdEV2YWxGYWlsZWRBc3NlcnRpb25UaGlzIGFzc2VydGlvbiBmYWlsZWQuQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uQ09OU1RfRVZBTF9USFJPV1NfRVhDRVBUSU9ObWVzc2FnZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbnRlbXBsYXRlQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uV2l0aE1lc3NhZ2VUaGlzIGFzc2VydGlvbiBmYWlsZWQgd2l0aCBtZXNzYWdlOiAjc3RyaW5nY29kZUNvbnN0RXZhbEZhaWxlZEFzc2VydGlvbldpdGhNZXNzYWdlQ29uc3RFdmFsRmFpbGVkQXNzZXJ0aW9uV2l0aE1lc3NhZ2V0ZW1wbGF0ZUNvbnN0RXZhbEZyZWVUeXBlUGFyYW1ldGVyVGhlIHR5cGUgJyN0eXBlJyBpcyBub3QgYSBjb25zdGFudCBiZWNhdXNlIGl0IGRlcGVuZHMgb24gYSB0eXBlIHBhcmFtZXRlciwgb25seSBpbnN0YW50aWF0ZWQgdHlwZXMgYXJlIGFsbG93ZWQuY29kZUNvbnN0RXZhbEZyZWVUeXBlUGFyYW1ldGVyQ29uc3RFdmFsRnJlZVR5cGVQYXJhbWV0ZXJ0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZUJpbmFyeSBvcGVyYXRvciAnI3N0cmluZycgb24gJyNjb25zdGFudCcgcmVxdWlyZXMgb3BlcmFuZCBvZiB0eXBlICcjdHlwZScsIGJ1dCB3YXMgb2YgdHlwZSAnI3R5cGUyJy5jb2RlQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBlQ29uc3RFdmFsSW52YWxpZEJpbmFyeU9wZXJhbmRUeXBldGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkRXF1YWxzT3BlcmFuZFR5cGVCaW5hcnkgb3BlcmF0b3IgJz09JyByZXF1aXJlcyByZWNlaXZlciBjb25zdGFudCAnI2NvbnN0YW50JyBvZiB0eXBlICdOdWxsJywgJ2Jvb2wnLCAnaW50JywgJ2RvdWJsZScsIG9yICdTdHJpbmcnLCBidXQgd2FzIG9mIHR5cGUgJyN0eXBlJy5jb2RlQ29uc3RFdmFsSW52YWxpZEVxdWFsc09wZXJhbmRUeXBlQ29uc3RFdmFsSW52YWxpZEVxdWFsc09wZXJhbmRUeXBldGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvblRoZSBtZXRob2QgJyNzdHJpbmcnIGNhbid0IGJlIGludm9rZWQgb24gJyNjb25zdGFudCcgd2l0aGluIGEgY29uc3QgY29udGV4dC5jb2RlQ29uc3RFdmFsSW52YWxpZE1ldGhvZEludm9jYXRpb25Db25zdEV2YWxJbnZhbGlkTWV0aG9kSW52b2NhdGlvblVOREVGSU5FRF9PUEVSQVRPUnRlbXBsYXRlQ29uc3RFdmFsSW52YWxpZFByb3BlcnR5R2V0VGhlIHByb3BlcnR5ICcjc3RyaW5nJyBjYW4ndCBiZSBhY2Nlc3NlZCBvbiAnI2NvbnN0YW50JyB3aXRoaW4gYSBjb25zdCBjb250ZXh0LmNvZGVDb25zdEV2YWxJbnZhbGlkUHJvcGVydHlHZXRDb25zdEV2YWxJbnZhbGlkUHJvcGVydHlHZXR0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uVGhlIGludm9jYXRpb24gb2YgJyNuYW1lJyBpcyBub3QgYWxsb3dlZCB3aXRoaW4gYSBjb25zdCBjb250ZXh0LmNvZGVDb25zdEV2YWxJbnZhbGlkU3RhdGljSW52b2NhdGlvbkNvbnN0RXZhbEludmFsaWRTdGF0aWNJbnZvY2F0aW9uQ09OU1RfSU5JVElBTElaRURfV0lUSF9OT05fQ09OU1RBTlRfVkFMVUV0ZW1wbGF0ZUNvbnN0RXZhbEludmFsaWRTdHJpbmdJbnRlcnBvbGF0aW9uT3BlcmFuZFRoZSAnI2NvbnN0YW50JyBjYW4ndCBiZSB1c2VkIGFzIHBhcnQgb2YgYSBzdHJpbmcgaW50ZXJwb2xhdGlvbiB3aXRoaW4gYSBjb25zdCBjb250ZXh0LCBvbmx5IHZhbHVlcyBvZiB0eXBlICdudWxsJywgJ2Jvb2wnLCAnaW50JywgJ2RvdWJsZScsIG9yICdTdHJpbmcnIGNhbiBiZSB1c2VkLmNvZGVDb25zdEV2YWxJbnZhbGlkU3RyaW5nSW50ZXJwb2xhdGlvbk9wZXJhbmRDb25zdEV2YWxJbnZhbGlkU3RyaW5nSW50ZXJwb2xhdGlvbk9wZXJhbmRDT05TVF9FVkFMX1RZUEVfQk9PTF9OVU1fU1RSSU5HdGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkU3ltYm9sTmFtZVRoZSBzeW1ib2wgbmFtZSBtdXN0IGJlIGEgdmFsaWQgcHVibGljIERhcnQgbWVtYmVyIG5hbWUsIHB1YmxpYyBjb25zdHJ1Y3RvciBuYW1lLCBvciBsaWJyYXJ5IG5hbWUsIG9wdGlvbmFsbHkgcXVhbGlmaWVkLCBidXQgd2FzICcjY29uc3RhbnQnLmNvZGVDb25zdEV2YWxJbnZhbGlkU3ltYm9sTmFtZUNvbnN0RXZhbEludmFsaWRTeW1ib2xOYW1ldGVtcGxhdGVDb25zdEV2YWxJbnZhbGlkVHlwZUV4cGVjdGVkIGNvbnN0YW50ICcjY29uc3RhbnQnIHRvIGJlIG9mIHR5cGUgJyN0eXBlJywgYnV0IHdhcyBvZiB0eXBlICcjdHlwZTInLmNvZGVDb25zdEV2YWxJbnZhbGlkVHlwZUNvbnN0RXZhbEludmFsaWRUeXBldGVtcGxhdGVDb25zdEV2YWxLZXlJbXBsZW1lbnRzRXF1YWxUaGUga2V5ICcjY29uc3RhbnQnIGRvZXMgbm90IGhhdmUgYSBwcmltaXRpdmUgb3BlcmF0b3IgJz09Jy5jb2RlQ29uc3RFdmFsS2V5SW1wbGVtZW50c0VxdWFsQ29uc3RFdmFsS2V5SW1wbGVtZW50c0VxdWFsQ09OU1RfTUFQX0tFWV9FWFBSRVNTSU9OX1RZUEVfSU1QTEVNRU5UU19FUVVBTFN0ZW1wbGF0ZUNvbnN0RXZhbE5lZ2F0aXZlU2hpZnRCaW5hcnkgb3BlcmF0b3IgJyNzdHJpbmcnIG9uICcjc3RyaW5nMicgcmVxdWlyZXMgbm9uLW5lZ2F0aXZlIG9wZXJhbmQsIGJ1dCB3YXMgJyNzdHJpbmczJy5jb2RlQ29uc3RFdmFsTmVnYXRpdmVTaGlmdENvbnN0RXZhbE5lZ2F0aXZlU2hpZnR0ZW1wbGF0ZUNvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbENhbid0IGhhdmUgYSBub24tY29uc3RhbnQgI3N0cmluZyBsaXRlcmFsIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQuY29kZUNvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbENvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbE5PTl9DT05TVEFOVF9ERUZBVUxUX1ZBTFVFdGVtcGxhdGVDb25zdEV2YWxOb25Db25zdGFudFZhcmlhYmxlR2V0VGhlIHZhcmlhYmxlICcjc3RyaW5nJyBpcyBub3QgYSBjb25zdGFudCwgb25seSBjb25zdGFudCBleHByZXNzaW9ucyBhcmUgYWxsb3dlZC5jb2RlQ29uc3RFdmFsTm9uQ29uc3RhbnRWYXJpYWJsZUdldENvbnN0RXZhbE5vbkNvbnN0YW50VmFyaWFibGVHZXROT05fQ09OU1RBTlRfVkFMVUVfSU5fSU5JVElBTElaRVJjb2RlQ29uc3RFdmFsTm90TGlzdE9yU2V0SW5TcHJlYWRPbmx5IGxpc3RzIGFuZCBzZXRzIGNhbiBiZSB1c2VkIGluIHNwcmVhZHMgaW4gY29uc3RhbnQgbGlzdHMgYW5kIHNldHMuQ29uc3RFdmFsTm90TGlzdE9yU2V0SW5TcHJlYWRDT05TVF9TUFJFQURfRVhQRUNURURfTElTVF9PUl9TRVRtZXNzYWdlQ29uc3RFdmFsTm90TGlzdE9yU2V0SW5TcHJlYWRjb2RlQ29uc3RFdmFsTm90TWFwSW5TcHJlYWRPbmx5IG1hcHMgY2FuIGJlIHVzZWQgaW4gc3ByZWFkcyBpbiBjb25zdGFudCBtYXBzLkNvbnN0RXZhbE5vdE1hcEluU3ByZWFkQ09OU1RfU1BSRUFEX0VYUEVDVEVEX01BUG1lc3NhZ2VDb25zdEV2YWxOb3RNYXBJblNwcmVhZGNvZGVDb25zdEV2YWxOdWxsVmFsdWVOdWxsIHZhbHVlIGR1cmluZyBjb25zdGFudCBldmFsdWF0aW9uLkNvbnN0RXZhbE51bGxWYWx1ZW1lc3NhZ2VDb25zdEV2YWxOdWxsVmFsdWVjb2RlQ29uc3RFdmFsVW5ldmFsdWF0ZWRDb3VsZCBub3QgZXZhbHVhdGUgY29uc3RhbnQgZXhwcmVzc2lvbi5Db25zdEV2YWxVbmV2YWx1YXRlZG1lc3NhZ2VDb25zdEV2YWxVbmV2YWx1YXRlZHRlbXBsYXRlQ29uc3RFdmFsWmVyb0Rpdmlzb3JCaW5hcnkgb3BlcmF0b3IgJyNzdHJpbmcnIG9uICcjc3RyaW5nMicgcmVxdWlyZXMgbm9uLXplcm8gZGl2aXNvciwgYnV0IGRpdmlzb3Igd2FzICcwJy5jb2RlQ29uc3RFdmFsWmVyb0Rpdmlzb3JDb25zdEV2YWxaZXJvRGl2aXNvckNPTlNUX0VWQUxfVEhST1dTX0lEQlpFY29kZUNvbnN0RmFjdG9yeU9ubHkgcmVkaXJlY3RpbmcgZmFjdG9yeSBjb25zdHJ1Y3RvcnMgY2FuIGJlIGRlY2xhcmVkIHRvIGJlICdjb25zdCcuVHJ5IHJlbW92aW5nIHRoZSAnY29uc3QnIGtleXdvcmQsIG9yIHJlcGxhY2luZyB0aGUgYm9keSB3aXRoICc9JyBmb2xsb3dlZCBieSBhIHZhbGlkIHRhcmdldC5Db25zdEZhY3RvcnltZXNzYWdlQ29uc3RGYWN0b3J5Y29kZUNvbnN0RmFjdG9yeVJlZGlyZWN0aW9uVG9Ob25Db25zdENvbnN0YW50IGZhY3RvcnkgY29uc3RydWN0b3IgY2FuJ3QgZGVsZWdhdGUgdG8gYSBub24tY29uc3RhbnQgY29uc3RydWN0b3IuVHJ5IHJlZGlyZWN0aW5nIHRvIGEgZGlmZmVyZW50IGNvbnN0cnVjdG9yIG9yIG1hcmtpbmcgdGhlIHRhcmdldCBjb25zdHJ1Y3RvciAnY29uc3QnLkNvbnN0RmFjdG9yeVJlZGlyZWN0aW9uVG9Ob25Db25zdFJFRElSRUNUX1RPX05PTl9DT05TVF9DT05TVFJVQ1RPUm1lc3NhZ2VDb25zdEZhY3RvcnlSZWRpcmVjdGlvblRvTm9uQ29uc3R0ZW1wbGF0ZUNvbnN0RmllbGRXaXRob3V0SW5pdGlhbGl6ZXJUaGUgY29uc3QgdmFyaWFibGUgJyNuYW1lJyBtdXN0IGJlIGluaXRpYWxpemVkLlRyeSBhZGRpbmcgYW4gaW5pdGlhbGl6ZXIgKCc9IDxleHByZXNzaW9uPicpIHRvIHRoZSBkZWNsYXJhdGlvbi5jb2RlQ29uc3RGaWVsZFdpdGhvdXRJbml0aWFsaXplckNvbnN0RmllbGRXaXRob3V0SW5pdGlhbGl6ZXJDT05TVF9OT1RfSU5JVElBTElaRURjb2RlQ29uc3RJbnN0YW5jZUZpZWxkT25seSBzdGF0aWMgZmllbGRzIGNhbiBiZSBkZWNsYXJlZCBhcyBjb25zdC5UcnkgdXNpbmcgJ2ZpbmFsJyBpbnN0ZWFkIG9mICdjb25zdCcsIG9yIGFkZGluZyB0aGUga2V5d29yZCAnc3RhdGljJy5Db25zdEluc3RhbmNlRmllbGRDT05TVF9JTlNUQU5DRV9GSUVMRG1lc3NhZ2VDb25zdEluc3RhbmNlRmllbGRjb2RlQ29uc3RNZXRob2RHZXR0ZXJzLCBzZXR0ZXJzIGFuZCBtZXRob2RzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlICdjb25zdCcuVHJ5IHJlbW92aW5nIHRoZSAnY29uc3QnIGtleXdvcmQuQ29uc3RNZXRob2RtZXNzYWdlQ29uc3RNZXRob2Rjb2RlQ29uc3RydWN0b3JDeWNsaWNSZWRpcmVjdGluZyBjb25zdHJ1Y3RlcnMgY2FuJ3QgYmUgY3ljbGljLlRyeSB0byBoYXZlIGFsbCBjb25zdHJ1Y3RvcnMgZXZlbnR1YWxseSByZWRpcmVjdCB0byBhIG5vbi1yZWRpcmVjdGluZyBjb25zdHJ1Y3Rvci5Db25zdHJ1Y3RvckN5Y2xpY1JFQ1VSU0lWRV9DT05TVFJVQ1RPUl9SRURJUkVDVG1lc3NhZ2VDb25zdHJ1Y3RvckN5Y2xpY3RlbXBsYXRlQ29uc3RydWN0b3JOb3RGb3VuZENvdWxkbid0IGZpbmQgY29uc3RydWN0b3IgJyNuYW1lJy5jb2RlQ29uc3RydWN0b3JOb3RGb3VuZENvbnN0cnVjdG9yTm90Rm91bmRDT05TVFJVQ1RPUl9OT1RfRk9VTkRjb2RlQ29uc3RydWN0b3JOb3RTeW5jQ29uc3RydWN0b3IgYm9kaWVzIGNhbid0IHVzZSAnYXN5bmMnLCAnYXN5bmMqJywgb3IgJ3N5bmMqJy5Db25zdHJ1Y3Rvck5vdFN5bmNOT05fU1lOQ19DT05TVFJVQ1RPUm1lc3NhZ2VDb25zdHJ1Y3Rvck5vdFN5bmNjb2RlQ29uc3RydWN0b3JXaXRoUmV0dXJuVHlwZUNvbnN0cnVjdG9ycyBjYW4ndCBoYXZlIGEgcmV0dXJuIHR5cGUuVHJ5IHJlbW92aW5nIHRoZSByZXR1cm4gdHlwZS5Db25zdHJ1Y3RvcldpdGhSZXR1cm5UeXBlbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFJldHVyblR5cGVjb2RlQ29uc3RydWN0b3JXaXRoVHlwZUFyZ3VtZW50c0EgY29uc3RydWN0b3IgaW52b2NhdGlvbiBjYW4ndCBoYXZlIHR5cGUgYXJndW1lbnRzIG9uIHRoZSBjb25zdHJ1Y3RvciBuYW1lLlRyeSB0byBwbGFjZSB0aGUgdHlwZSBhcmd1bWVudHMgb24gdGhlIGNsYXNzIG5hbWUuQ29uc3RydWN0b3JXaXRoVHlwZUFyZ3VtZW50c1dST05HX05VTUJFUl9PRl9UWVBFX0FSR1VNRU5UU19DT05TVFJVQ1RPUm1lc3NhZ2VDb25zdHJ1Y3RvcldpdGhUeXBlQXJndW1lbnRzY29kZUNvbnN0cnVjdG9yV2l0aFR5cGVQYXJhbWV0ZXJzQ29uc3RydWN0b3JzIGNhbid0IGhhdmUgdHlwZSBwYXJhbWV0ZXJzLkNvbnN0cnVjdG9yV2l0aFR5cGVQYXJhbWV0ZXJzVFlQRV9QQVJBTUVURVJfT05fQ09OU1RSVUNUT1JtZXNzYWdlQ29uc3RydWN0b3JXaXRoVHlwZVBhcmFtZXRlcnNjb2RlQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lVGhlIG5hbWUgb2YgYSBjb25zdHJ1Y3RvciBtdXN0IG1hdGNoIHRoZSBuYW1lIG9mIHRoZSBlbmNsb3NpbmcgY2xhc3MuQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lSU5WQUxJRF9DT05TVFJVQ1RPUl9OQU1FbWVzc2FnZUNvbnN0cnVjdG9yV2l0aFdyb25nTmFtZXRlbXBsYXRlQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lQ29udGV4dFRoZSBuYW1lIG9mIHRoZSBlbmNsb3NpbmcgY2xhc3MgaXMgJyNuYW1lJy5jb2RlQ29uc3RydWN0b3JXaXRoV3JvbmdOYW1lQ29udGV4dENvbnN0cnVjdG9yV2l0aFdyb25nTmFtZUNvbnRleHRjb2RlQ29udGludWVMYWJlbE5vdFRhcmdldFRhcmdldCBvZiBjb250aW51ZSBtdXN0IGJlIGEgbGFiZWwuQ29udGludWVMYWJlbE5vdFRhcmdldExBQkVMX1VOREVGSU5FRG1lc3NhZ2VDb250aW51ZUxhYmVsTm90VGFyZ2V0Y29kZUNvbnRpbnVlT3V0c2lkZU9mTG9vcEEgY29udGludWUgc3RhdGVtZW50IGNhbid0IGJlIHVzZWQgb3V0c2lkZSBvZiBhIGxvb3Agb3Igc3dpdGNoIHN0YXRlbWVudC5UcnkgcmVtb3ZpbmcgdGhlIGNvbnRpbnVlIHN0YXRlbWVudC5Db250aW51ZU91dHNpZGVPZkxvb3BtZXNzYWdlQ29udGludWVPdXRzaWRlT2ZMb29wdGVtcGxhdGVDb250aW51ZVRhcmdldE91dHNpZGVGdW5jdGlvbkNhbid0IGNvbnRpbnVlIGF0ICcjbmFtZScgaW4gYSBkaWZmZXJlbnQgZnVuY3Rpb24uY29kZUNvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uQ29udGludWVUYXJnZXRPdXRzaWRlRnVuY3Rpb25jb2RlQ29udGludWVXaXRob3V0TGFiZWxJbkNhc2VBIGNvbnRpbnVlIHN0YXRlbWVudCBpbiBhIHN3aXRjaCBzdGF0ZW1lbnQgbXVzdCBoYXZlIGEgbGFiZWwgYXMgYSB0YXJnZXQuVHJ5IGFkZGluZyBhIGxhYmVsIGFzc29jaWF0ZWQgd2l0aCBvbmUgb2YgdGhlIGNhc2UgY2xhdXNlcyB0byB0aGUgY29udGludWUgc3RhdGVtZW50LkNvbnRpbnVlV2l0aG91dExhYmVsSW5DYXNlbWVzc2FnZUNvbnRpbnVlV2l0aG91dExhYmVsSW5DYXNldGVtcGxhdGVDb3VsZE5vdFBhcnNlVXJpQ291bGRuJ3QgcGFyc2UgVVJJICcjc3RyaW5nJzoKICAjc3RyaW5nMi5jb2RlQ291bGROb3RQYXJzZVVyaUNvdWxkTm90UGFyc2VVcmljb2RlQ292YXJpYW50QW5kU3RhdGljTWVtYmVycyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSBib3RoICdjb3ZhcmlhbnQnIGFuZCAnc3RhdGljJy5UcnkgcmVtb3ZpbmcgZWl0aGVyIHRoZSAnY292YXJpYW50JyBvciAnc3RhdGljJyBrZXl3b3JkLkNvdmFyaWFudEFuZFN0YXRpY21lc3NhZ2VDb3ZhcmlhbnRBbmRTdGF0aWNjb2RlQ292YXJpYW50TWVtYmVyR2V0dGVycywgc2V0dGVycyBhbmQgbWV0aG9kcyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnY292YXJpYW50Jy5UcnkgcmVtb3ZpbmcgdGhlICdjb3ZhcmlhbnQnIGtleXdvcmQuQ292YXJpYW50TWVtYmVybWVzc2FnZUNvdmFyaWFudE1lbWJlcnRlbXBsYXRlQ3ljbGVJblR5cGVWYXJpYWJsZXNUeXBlICcjbmFtZScgaXMgYSBib3VuZCBvZiBpdHNlbGYgdmlhICcjc3RyaW5nJy5UcnkgYnJlYWtpbmcgdGhlIGN5Y2xlIGJ5IHJlbW92aW5nIGF0IGxlYXN0IG9uIG9mIHRoZSAnZXh0ZW5kcycgY2xhdXNlcyBpbiB0aGUgY3ljbGUuY29kZUN5Y2xlSW5UeXBlVmFyaWFibGVzQ3ljbGVJblR5cGVWYXJpYWJsZXNUWVBFX1BBUkFNRVRFUl9TVVBFUlRZUEVfT0ZfSVRTX0JPVU5EdGVtcGxhdGVDeWNsaWNDbGFzc0hpZXJhcmNoeScjbmFtZScgaXMgYSBzdXBlcnR5cGUgb2YgaXRzZWxmLmNvZGVDeWNsaWNDbGFzc0hpZXJhcmNoeUN5Y2xpY0NsYXNzSGllcmFyY2h5UkVDVVJTSVZFX0lOVEVSRkFDRV9JTkhFUklUQU5DRXRlbXBsYXRlQ3ljbGljUmVkaXJlY3RpbmdGYWN0b3J5Q29uc3RydWN0b3JzQ3ljbGljIGRlZmluaXRpb24gb2YgZmFjdG9yeSAnI25hbWUnLmNvZGVDeWNsaWNSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnNDeWNsaWNSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcnNSRUNVUlNJVkVfRkFDVE9SWV9SRURJUkVDVHRlbXBsYXRlQ3ljbGljVHlwZWRlZlRoZSB0eXBlZGVmICcjbmFtZScgaGFzIGEgcmVmZXJlbmNlIHRvIGl0c2VsZi5jb2RlQ3ljbGljVHlwZWRlZkN5Y2xpY1R5cGVkZWZUWVBFX0FMSUFTX0NBTk5PVF9SRUZFUkVOQ0VfSVRTRUxGY29kZURlY2xhcmVkTWVtYmVyQ29uZmxpY3RzV2l0aEluaGVyaXRlZE1lbWJlckNhbid0IGRlY2xhcmUgYSBtZW1iZXIgdGhhdCBjb25mbGljdHMgd2l0aCBhbiBpbmhlcml0ZWQgb25lLkRlY2xhcmVkTWVtYmVyQ29uZmxpY3RzV2l0aEluaGVyaXRlZE1lbWJlckRFQ0xBUkVEX01FTUJFUl9DT05GTElDVFNfV0lUSF9JTkhFUklURURtZXNzYWdlRGVjbGFyZWRNZW1iZXJDb25mbGljdHNXaXRoSW5oZXJpdGVkTWVtYmVyY29kZURlY2xhcmVkTWVtYmVyQ29uZmxpY3RzV2l0aEluaGVyaXRlZE1lbWJlckNhdXNlVGhpcyBpcyB0aGUgaW5oZXJpdGVkIG1lbWJlci5EZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXJDYXVzZW1lc3NhZ2VEZWNsYXJlZE1lbWJlckNvbmZsaWN0c1dpdGhJbmhlcml0ZWRNZW1iZXJDYXVzZXRlbXBsYXRlRGVmYXVsdFZhbHVlSW5SZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvckNhbid0IGhhdmUgYSBkZWZhdWx0IHZhbHVlIGhlcmUgYmVjYXVzZSBhbnkgZGVmYXVsdCB2YWx1ZXMgb2YgJyNuYW1lJyB3b3VsZCBiZSB1c2VkIGluc3RlYWQuVHJ5IHJlbW92aW5nIHRoZSBkZWZhdWx0IHZhbHVlLmNvZGVEZWZhdWx0VmFsdWVJblJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yRGVmYXVsdFZhbHVlSW5SZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvckRFRkFVTFRfVkFMVUVfSU5fUkVESVJFQ1RJTkdfRkFDVE9SWV9DT05TVFJVQ1RPUmNvZGVEZWZlcnJlZEFmdGVyUHJlZml4VGhlIGRlZmVycmVkIGtleXdvcmQgc2hvdWxkIGNvbWUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBwcmVmaXggKCdhcycgY2xhdXNlKS5UcnkgbW92aW5nIHRoZSBkZWZlcnJlZCBrZXl3b3JkIGJlZm9yZSB0aGUgcHJlZml4LkRlZmVycmVkQWZ0ZXJQcmVmaXhtZXNzYWdlRGVmZXJyZWRBZnRlclByZWZpeHRlbXBsYXRlRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkQ2FuJ3QgdXNlIHRoZSBuYW1lICcjbmFtZScgZm9yIGEgZGVmZXJyZWQgbGlicmFyeSwgYXMgdGhlIG5hbWUgaXMgdXNlZCBlbHNld2hlcmUuY29kZURlZmVycmVkUHJlZml4RHVwbGljYXRlZERlZmVycmVkUHJlZml4RHVwbGljYXRlZFNIQVJFRF9ERUZFUlJFRF9QUkVGSVh0ZW1wbGF0ZURlZmVycmVkUHJlZml4RHVwbGljYXRlZENhdXNlJyNuYW1lJyBpcyB1c2VkIGhlcmUuY29kZURlZmVycmVkUHJlZml4RHVwbGljYXRlZENhdXNlRGVmZXJyZWRQcmVmaXhEdXBsaWNhdGVkQ2F1c2V0ZW1wbGF0ZURlZmVycmVkVHlwZUFubm90YXRpb25UaGUgdHlwZSAnI3R5cGUnIGlzIGRlZmVycmVkIGxvYWRlZCB2aWEgcHJlZml4ICcjbmFtZScgYW5kIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlIGFubm90YXRpb24uVHJ5IHJlbW92aW5nICdkZWZlcnJlZCcgZnJvbSB0aGUgaW1wb3J0IG9mICcjbmFtZScgb3IgdXNlIGEgc3VwZXJ0eXBlIG9mICcjdHlwZScgdGhhdCBpc24ndCBkZWZlcnJlZC5jb2RlRGVmZXJyZWRUeXBlQW5ub3RhdGlvbkRlZmVycmVkVHlwZUFubm90YXRpb25UWVBFX0FOTk9UQVRJT05fREVGRVJSRURfQ0xBU1N0ZW1wbGF0ZURpbGxPdXRsaW5lU3VtbWFyeUluZGV4ZWQgI2NvdW50IGxpYnJhcmllcyAoI2NvdW50MiBieXRlcykgaW4gI251bTElLjNtcywgdGhhdCBpcywKI251bTIlMTIuMyBieXRlcy9tcywgYW5kCiNudW0zJTEyLjMgbXMvbGlicmFyaWVzLmNvZGVEaWxsT3V0bGluZVN1bW1hcnlEaWxsT3V0bGluZVN1bW1hcnl0ZW1wbGF0ZURpcmVjdEN5Y2xlSW5UeXBlVmFyaWFibGVzVHlwZSAnI25hbWUnIGNhbid0IHVzZSBpdHNlbGYgYXMgYSBib3VuZC5jb2RlRGlyZWN0Q3ljbGVJblR5cGVWYXJpYWJsZXNEaXJlY3RDeWNsZUluVHlwZVZhcmlhYmxlc2NvZGVEaXJlY3RpdmVBZnRlckRlY2xhcmF0aW9uRGlyZWN0aXZlcyBtdXN0IGFwcGVhciBiZWZvcmUgYW55IGRlY2xhcmF0aW9ucy5UcnkgbW92aW5nIHRoZSBkaXJlY3RpdmUgYmVmb3JlIGFueSBkZWNsYXJhdGlvbnMuRGlyZWN0aXZlQWZ0ZXJEZWNsYXJhdGlvbm1lc3NhZ2VEaXJlY3RpdmVBZnRlckRlY2xhcmF0aW9uY29kZUR1cGxpY2F0ZURlZmVycmVkQW4gaW1wb3J0IGRpcmVjdGl2ZSBjYW4gb25seSBoYXZlIG9uZSAnZGVmZXJyZWQnIGtleXdvcmQuVHJ5IHJlbW92aW5nIGFsbCBidXQgb25lICdkZWZlcnJlZCcga2V5d29yZC5EdXBsaWNhdGVEZWZlcnJlZG1lc3NhZ2VEdXBsaWNhdGVEZWZlcnJlZHRlbXBsYXRlRHVwbGljYXRlTGFiZWxJblN3aXRjaFN0YXRlbWVudFRoZSBsYWJlbCAnI25hbWUnIHdhcyBhbHJlYWR5IHVzZWQgaW4gdGhpcyBzd2l0Y2ggc3RhdGVtZW50LlRyeSBjaG9vc2luZyBhIGRpZmZlcmVudCBuYW1lIGZvciB0aGlzIGxhYmVsLmNvZGVEdXBsaWNhdGVMYWJlbEluU3dpdGNoU3RhdGVtZW50RHVwbGljYXRlTGFiZWxJblN3aXRjaFN0YXRlbWVudGNvZGVEdXBsaWNhdGVQcmVmaXhBbiBpbXBvcnQgZGlyZWN0aXZlIGNhbiBvbmx5IGhhdmUgb25lIHByZWZpeCAoJ2FzJyBjbGF1c2UpLlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSBwcmVmaXguRHVwbGljYXRlUHJlZml4bWVzc2FnZUR1cGxpY2F0ZVByZWZpeHRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uJyNuYW1lJyBpcyBhbHJlYWR5IGRlY2xhcmVkIGluIHRoaXMgc2NvcGUuY29kZUR1cGxpY2F0ZWREZWNsYXJhdGlvbkR1cGxpY2F0ZWREZWNsYXJhdGlvbkRVUExJQ0FURV9ERUZJTklUSU9OdGVtcGxhdGVEdXBsaWNhdGVkRGVjbGFyYXRpb25DYXVzZVByZXZpb3VzIGRlY2xhcmF0aW9uIG9mICcjbmFtZScuY29kZUR1cGxpY2F0ZWREZWNsYXJhdGlvbkNhdXNlRHVwbGljYXRlZERlY2xhcmF0aW9uQ2F1c2V0ZW1wbGF0ZUR1cGxpY2F0ZWREZWNsYXJhdGlvblN5bnRoZXRpY0NhdXNlUHJldmlvdXMgZGVjbGFyYXRpb24gb2YgJyNuYW1lJyBpcyBpbXBsaWVkIGJ5IHRoaXMgZGVmaW5pdGlvbi5jb2RlRHVwbGljYXRlZERlY2xhcmF0aW9uU3ludGhldGljQ2F1c2VEdXBsaWNhdGVkRGVjbGFyYXRpb25TeW50aGV0aWNDYXVzZXRlbXBsYXRlRHVwbGljYXRlZERlY2xhcmF0aW9uVXNlQ2FuJ3QgdXNlICcjbmFtZScgYmVjYXVzZSBpdCBpcyBkZWNsYXJlZCBtb3JlIHRoYW4gb25jZS5jb2RlRHVwbGljYXRlZERlY2xhcmF0aW9uVXNlRHVwbGljYXRlZERlY2xhcmF0aW9uVXNldGVtcGxhdGVEdXBsaWNhdGVkRXhwb3J0JyNuYW1lJyBpcyBleHBvcnRlZCBmcm9tIGJvdGggJyN1cmknIGFuZCAnI3VyaTInLmNvZGVEdXBsaWNhdGVkRXhwb3J0RHVwbGljYXRlZEV4cG9ydEFNQklHVU9VU19FWFBPUlR0ZW1wbGF0ZUR1cGxpY2F0ZWRFeHBvcnRJblR5cGVjb2RlRHVwbGljYXRlZEV4cG9ydEluVHlwZUR1cGxpY2F0ZWRFeHBvcnRJblR5cGV0ZW1wbGF0ZUR1cGxpY2F0ZWRJbXBvcnQnI25hbWUnIGlzIGltcG9ydGVkIGZyb20gYm90aCAnI3VyaScgYW5kICcjdXJpMicuY29kZUR1cGxpY2F0ZWRJbXBvcnREdXBsaWNhdGVkSW1wb3J0dGVtcGxhdGVEdXBsaWNhdGVkSW1wb3J0SW5UeXBlY29kZUR1cGxpY2F0ZWRJbXBvcnRJblR5cGVEdXBsaWNhdGVkSW1wb3J0SW5UeXBlQU1CSUdVT1VTX0lNUE9SVHRlbXBsYXRlRHVwbGljYXRlZExpYnJhcnlFeHBvcnRBIGxpYnJhcnkgd2l0aCBuYW1lICcjbmFtZScgaXMgZXhwb3J0ZWQgbW9yZSB0aGFuIG9uY2UuY29kZUR1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0RHVwbGljYXRlZExpYnJhcnlFeHBvcnRFWFBPUlRfRFVQTElDQVRFRF9MSUJSQVJZX05BTUVEdGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUV4cG9ydENvbnRleHQnI25hbWUnIGlzIGFsc28gZXhwb3J0ZWQgaGVyZS5jb2RlRHVwbGljYXRlZExpYnJhcnlFeHBvcnRDb250ZXh0RHVwbGljYXRlZExpYnJhcnlFeHBvcnRDb250ZXh0dGVtcGxhdGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydEEgbGlicmFyeSB3aXRoIG5hbWUgJyNuYW1lJyBpcyBpbXBvcnRlZCBtb3JlIHRoYW4gb25jZS5jb2RlRHVwbGljYXRlZExpYnJhcnlJbXBvcnREdXBsaWNhdGVkTGlicmFyeUltcG9ydElNUE9SVF9EVVBMSUNBVEVEX0xJQlJBUllfTkFNRUR0ZW1wbGF0ZUR1cGxpY2F0ZWRMaWJyYXJ5SW1wb3J0Q29udGV4dCcjbmFtZScgaXMgYWxzbyBpbXBvcnRlZCBoZXJlLmNvZGVEdXBsaWNhdGVkTGlicmFyeUltcG9ydENvbnRleHREdXBsaWNhdGVkTGlicmFyeUltcG9ydENvbnRleHR0ZW1wbGF0ZUR1cGxpY2F0ZWRNb2RpZmllclRoZSBtb2RpZmllciAnI2xleGVtZScgd2FzIGFscmVhZHkgc3BlY2lmaWVkLlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSBvY2N1cmVuY2Ugb2YgdGhlIG1vZGlmaWVyLmNvZGVEdXBsaWNhdGVkTW9kaWZpZXJEdXBsaWNhdGVkTW9kaWZpZXJ0ZW1wbGF0ZUR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWRDYW4ndCBkZWNsYXJlICcjbmFtZScgYmVjYXVzZSBpdCB3YXMgYWxyZWFkeSB1c2VkIGluIHRoaXMgc2NvcGUuY29kZUR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWREdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkUkVGRVJFTkNFRF9CRUZPUkVfREVDTEFSQVRJT050ZW1wbGF0ZUR1cGxpY2F0ZWROYW1lUHJldmlvdXNseVVzZWRDYXVzZVByZXZpb3VzIHVzZSBvZiAnI25hbWUnLmNvZGVEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkQ2F1c2VEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkQ2F1c2V0ZW1wbGF0ZUR1cGxpY2F0ZWROYW1lZEFyZ3VtZW50RHVwbGljYXRlZCBuYW1lZCBhcmd1bWVudCAnI25hbWUnLmNvZGVEdXBsaWNhdGVkTmFtZWRBcmd1bWVudER1cGxpY2F0ZWROYW1lZEFyZ3VtZW50RFVQTElDQVRFX05BTUVEX0FSR1VNRU5UdGVtcGxhdGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUR1cGxpY2F0ZWQgcGFyYW1ldGVyIG5hbWUgJyNuYW1lJy5jb2RlRHVwbGljYXRlZFBhcmFtZXRlck5hbWVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZXRlbXBsYXRlRHVwbGljYXRlZFBhcmFtZXRlck5hbWVDYXVzZU90aGVyIHBhcmFtZXRlciBuYW1lZCAnI25hbWUnLmNvZGVEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlRHVwbGljYXRlZFBhcmFtZXRlck5hbWVDYXVzZWNvZGVFbXB0eU5hbWVkUGFyYW1ldGVyTGlzdE5hbWVkIHBhcmFtZXRlciBsaXN0cyBjYW5ub3QgYmUgZW1wdHkuVHJ5IGFkZGluZyBhIG5hbWVkIHBhcmFtZXRlciB0byB0aGUgbGlzdC5FbXB0eU5hbWVkUGFyYW1ldGVyTGlzdE1JU1NJTkdfSURFTlRJRklFUm1lc3NhZ2VFbXB0eU5hbWVkUGFyYW1ldGVyTGlzdGNvZGVFbXB0eU9wdGlvbmFsUGFyYW1ldGVyTGlzdE9wdGlvbmFsIHBhcmFtZXRlciBsaXN0cyBjYW5ub3QgYmUgZW1wdHkuVHJ5IGFkZGluZyBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdG8gdGhlIGxpc3QuRW1wdHlPcHRpb25hbFBhcmFtZXRlckxpc3RtZXNzYWdlRW1wdHlPcHRpb25hbFBhcmFtZXRlckxpc3Rjb2RlRW5jb2RpbmdVbmFibGUgdG8gZGVjb2RlIGJ5dGVzIGFzIFVURi04LkVuY29kaW5nbWVzc2FnZUVuY29kaW5ndGVtcGxhdGVFbnVtQ29uc3RhbnRTYW1lTmFtZUFzRW5jbG9zaW5nTmFtZSBvZiBlbnVtIGNvbnN0YW50ICcjbmFtZScgY2FuJ3QgYmUgdGhlIHNhbWUgYXMgdGhlIGVudW0ncyBvd24gbmFtZS5jb2RlRW51bUNvbnN0YW50U2FtZU5hbWVBc0VuY2xvc2luZ0VudW1Db25zdGFudFNhbWVOYW1lQXNFbmNsb3NpbmdFTlVNX0NPTlNUQU5UX1dJVEhfRU5VTV9OQU1FY29kZUVudW1EZWNsYXJhdGlvbkVtcHR5QW4gZW51bSBkZWNsYXJhdGlvbiBjYW4ndCBiZSBlbXB0eS5FbnVtRGVjbGFyYXRpb25FbXB0eUVNUFRZX0VOVU1fQk9EWW1lc3NhZ2VFbnVtRGVjbGFyYXRpb25FbXB0eWNvZGVFbnVtSW5DbGFzc0VudW1zIGNhbid0IGJlIGRlY2xhcmVkIGluc2lkZSBjbGFzc2VzLlRyeSBtb3ZpbmcgdGhlIGVudW0gdG8gdGhlIHRvcC1sZXZlbC5FbnVtSW5DbGFzc21lc3NhZ2VFbnVtSW5DbGFzc2NvZGVFbnVtSW5zdGFudGlhdGlvbkVudW1zIGNhbid0IGJlIGluc3RhbnRpYXRlZC5FbnVtSW5zdGFudGlhdGlvbklOU1RBTlRJQVRFX0VOVU1tZXNzYWdlRW51bUluc3RhbnRpYXRpb25jb2RlRXF1YWxpdHlDYW5ub3RCZUVxdWFsaXR5T3BlcmFuZEFuIGVxdWFsaXR5IGV4cHJlc3Npb24gY2FuJ3QgYmUgYW4gb3BlcmFuZCBvZiBhbm90aGVyIGVxdWFsaXR5IGV4cHJlc3Npb24uVHJ5IHJlLXdyaXRpbmcgdGhlIGV4cHJlc3Npb24uRXF1YWxpdHlDYW5ub3RCZUVxdWFsaXR5T3BlcmFuZG1lc3NhZ2VFcXVhbGl0eUNhbm5vdEJlRXF1YWxpdHlPcGVyYW5kdGVtcGxhdGVFeHBlY3RlZEFmdGVyQnV0R290RXhwZWN0ZWQgJyNzdHJpbmcnIGFmdGVyIHRoaXMuY29kZUV4cGVjdGVkQWZ0ZXJCdXRHb3RFeHBlY3RlZEFmdGVyQnV0R290RVhQRUNURURfVE9LRU5jb2RlRXhwZWN0ZWRBbkluaXRpYWxpemVyRXhwZWN0ZWQgYW4gaW5pdGlhbGl6ZXIuRXhwZWN0ZWRBbkluaXRpYWxpemVybWVzc2FnZUV4cGVjdGVkQW5Jbml0aWFsaXplcmNvZGVFeHBlY3RlZEJsb2NrRXhwZWN0ZWQgYSBibG9jay5UcnkgYWRkaW5nIHt9LkV4cGVjdGVkQmxvY2ttZXNzYWdlRXhwZWN0ZWRCbG9ja2NvZGVFeHBlY3RlZEJsb2NrVG9Ta2lwRXhwZWN0ZWQgYSBmdW5jdGlvbiBib2R5IG9yICc9PicuRXhwZWN0ZWRCbG9ja1RvU2tpcE1JU1NJTkdfRlVOQ1RJT05fQk9EWW1lc3NhZ2VFeHBlY3RlZEJsb2NrVG9Ta2lwY29kZUV4cGVjdGVkQm9keUV4cGVjdGVkQm9keW1lc3NhZ2VFeHBlY3RlZEJvZHl0ZW1wbGF0ZUV4cGVjdGVkQnV0R290RXhwZWN0ZWQgJyNzdHJpbmcnIGJlZm9yZSB0aGlzLmNvZGVFeHBlY3RlZEJ1dEdvdEV4cGVjdGVkQnV0R290dGVtcGxhdGVFeHBlY3RlZENsYXNzTWVtYmVyRXhwZWN0ZWQgYSBjbGFzcyBtZW1iZXIsIGJ1dCBnb3QgJyNsZXhlbWUnLmNvZGVFeHBlY3RlZENsYXNzTWVtYmVyRXhwZWN0ZWRDbGFzc01lbWJlckVYUEVDVEVEX0NMQVNTX01FTUJFUnRlbXBsYXRlRXhwZWN0ZWRDbGFzc09yTWl4aW5Cb2R5QSAjc3RyaW5nIG11c3QgaGF2ZSBhIGJvZHksIGV2ZW4gaWYgaXQgaXMgZW1wdHkuVHJ5IGFkZGluZyBhbiBlbXB0eSBib2R5LmNvZGVFeHBlY3RlZENsYXNzT3JNaXhpbkJvZHlFeHBlY3RlZENsYXNzT3JNaXhpbkJvZHl0ZW1wbGF0ZUV4cGVjdGVkRGVjbGFyYXRpb25FeHBlY3RlZCBhIGRlY2xhcmF0aW9uLCBidXQgZ290ICcjbGV4ZW1lJy5jb2RlRXhwZWN0ZWREZWNsYXJhdGlvbkV4cGVjdGVkRGVjbGFyYXRpb25FWFBFQ1RFRF9FWEVDVVRBQkxFY29kZUV4cGVjdGVkRWxzZU9yQ29tbWFFeHBlY3RlZCAnZWxzZScgb3IgY29tbWEuRXhwZWN0ZWRFbHNlT3JDb21tYW1lc3NhZ2VFeHBlY3RlZEVsc2VPckNvbW1hdGVtcGxhdGVFeHBlY3RlZEVudW1Cb2R5RXhwZWN0ZWQgYSBlbnVtIGJvZHksIGJ1dCBnb3QgJyNsZXhlbWUnLkFuIGVudW0gZGVmaW5pdGlvbiBtdXN0IGhhdmUgYSBib2R5IHdpdGggYXQgbGVhc3Qgb25lIGNvbnN0YW50IG5hbWUuY29kZUV4cGVjdGVkRW51bUJvZHlFeHBlY3RlZEVudW1Cb2R5TUlTU0lOR19FTlVNX0JPRFl0ZW1wbGF0ZUV4cGVjdGVkRnVuY3Rpb25Cb2R5RXhwZWN0ZWQgYSBmdW5jdGlvbiBib2R5LCBidXQgZ290ICcjbGV4ZW1lJy5jb2RlRXhwZWN0ZWRGdW5jdGlvbkJvZHlFeHBlY3RlZEZ1bmN0aW9uQm9keWNvZGVFeHBlY3RlZEhleERpZ2l0QSBoZXggZGlnaXQgKDAtOSBvciBBLUYpIG11c3QgZm9sbG93ICcweCcuRXhwZWN0ZWRIZXhEaWdpdE1JU1NJTkdfSEVYX0RJR0lUbWVzc2FnZUV4cGVjdGVkSGV4RGlnaXR0ZW1wbGF0ZUV4cGVjdGVkSWRlbnRpZmllckV4cGVjdGVkIGFuIGlkZW50aWZpZXIsIGJ1dCBnb3QgJyNsZXhlbWUnLmNvZGVFeHBlY3RlZElkZW50aWZpZXJFeHBlY3RlZElkZW50aWZpZXJ0ZW1wbGF0ZUV4cGVjdGVkSW5zdGVhZEV4cGVjdGVkICcjc3RyaW5nJyBpbnN0ZWFkIG9mIHRoaXMuY29kZUV4cGVjdGVkSW5zdGVhZEV4cGVjdGVkSW5zdGVhZGNvZGVFeHBlY3RlZE5hbWVkQXJndW1lbnRFeHBlY3RlZCBuYW1lZCBhcmd1bWVudC5FeHBlY3RlZE5hbWVkQXJndW1lbnRFWFRSQV9QT1NJVElPTkFMX0FSR1VNRU5UU21lc3NhZ2VFeHBlY3RlZE5hbWVkQXJndW1lbnRjb2RlRXhwZWN0ZWRPbmVFeHByZXNzaW9uRXhwZWN0ZWQgb25lIGV4cHJlc3Npb24sIGJ1dCBmb3VuZCBhZGRpdGlvbmFsIGlucHV0LkV4cGVjdGVkT25lRXhwcmVzc2lvbm1lc3NhZ2VFeHBlY3RlZE9uZUV4cHJlc3Npb25jb2RlRXhwZWN0ZWRPcGVuUGFyZW5zRXhwZWN0ZWQgJygnLkV4cGVjdGVkT3BlblBhcmVuc21lc3NhZ2VFeHBlY3RlZE9wZW5QYXJlbnNjb2RlRXhwZWN0ZWRTdGF0ZW1lbnRFeHBlY3RlZCBhIHN0YXRlbWVudC5FeHBlY3RlZFN0YXRlbWVudG1lc3NhZ2VFeHBlY3RlZFN0YXRlbWVudHRlbXBsYXRlRXhwZWN0ZWRTdHJpbmdFeHBlY3RlZCBhIFN0cmluZywgYnV0IGdvdCAnI2xleGVtZScuY29kZUV4cGVjdGVkU3RyaW5nRXhwZWN0ZWRTdHJpbmdFWFBFQ1RFRF9TVFJJTkdfTElURVJBTHRlbXBsYXRlRXhwZWN0ZWRUb2tlbkV4cGVjdGVkIHRvIGZpbmQgJyNzdHJpbmcnLmNvZGVFeHBlY3RlZFRva2VuRXhwZWN0ZWRUb2tlbnRlbXBsYXRlRXhwZWN0ZWRUeXBlRXhwZWN0ZWQgYSB0eXBlLCBidXQgZ290ICcjbGV4ZW1lJy5jb2RlRXhwZWN0ZWRUeXBlRXhwZWN0ZWRUeXBlRVhQRUNURURfVFlQRV9OQU1FY29kZUV4cGVjdGVkVXJpRXhwZWN0ZWQgYSBVUkkuRXhwZWN0ZWRVcmltZXNzYWdlRXhwZWN0ZWRVcml0ZW1wbGF0ZUV4cGVyaW1lbnROb3RFbmFibGVkVGhpcyByZXF1aXJlcyB0aGUgJyNzdHJpbmcnIGV4cGVyaW1lbnQgdG8gYmUgZW5hYmxlZC5UcnkgZW5hYmxpbmcgdGhpcyBleHBlcmltZW50IGJ5IGFkZGluZyBpdCB0byB0aGUgY29tbWFuZCBsaW5lIHdoZW4gY29tcGlsaW5nIGFuZCBydW5uaW5nLmNvZGVFeHBlcmltZW50Tm90RW5hYmxlZEV4cGVyaW1lbnROb3RFbmFibGVkY29kZUV4cG9ydEFmdGVyUGFydEV4cG9ydCBkaXJlY3RpdmVzIG11c3QgcHJlY2VkZSBwYXJ0IGRpcmVjdGl2ZXMuVHJ5IG1vdmluZyB0aGUgZXhwb3J0IGRpcmVjdGl2ZXMgYmVmb3JlIHRoZSBwYXJ0IGRpcmVjdGl2ZXMuRXhwb3J0QWZ0ZXJQYXJ0bWVzc2FnZUV4cG9ydEFmdGVyUGFydHRlbXBsYXRlRXhwb3J0SGlkZXNFeHBvcnRFeHBvcnQgb2YgJyNuYW1lJyAoZnJvbSAnI3VyaScpIGhpZGVzIGV4cG9ydCBmcm9tICcjdXJpMicuY29kZUV4cG9ydEhpZGVzRXhwb3J0RXhwb3J0SGlkZXNFeHBvcnRjb2RlRXhwcmVzc2lvbk5vdE1ldGFkYXRhVGhpcyBjYW4ndCBiZSB1c2VkIGFzIG1ldGFkYXRhOyBtZXRhZGF0YSBzaG91bGQgYmUgYSByZWZlcmVuY2UgdG8gYSBjb21waWxlLXRpbWUgY29uc3RhbnQgdmFyaWFibGUsIG9yIGEgY2FsbCB0byBhIGNvbnN0YW50IGNvbnN0cnVjdG9yLkV4cHJlc3Npb25Ob3RNZXRhZGF0YW1lc3NhZ2VFeHByZXNzaW9uTm90TWV0YWRhdGF0ZW1wbGF0ZUV4dGVuZGluZ0VudW0nI25hbWUnIGlzIGFuIGVudW0gYW5kIGNhbid0IGJlIGV4dGVuZGVkIG9yIGltcGxlbWVudGVkLmNvZGVFeHRlbmRpbmdFbnVtRXh0ZW5kaW5nRW51bUVYVEVORFNfRU5VTXRlbXBsYXRlRXh0ZW5kaW5nUmVzdHJpY3RlZCcjbmFtZScgaXMgcmVzdHJpY3RlZCBhbmQgY2FuJ3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuY29kZUV4dGVuZGluZ1Jlc3RyaWN0ZWRFeHRlbmRpbmdSZXN0cmljdGVkRVhURU5EU19ESVNBTExPV0VEX0NMQVNTY29kZUV4dGVybmFsQ2xhc3NDbGFzc2VzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlICdleHRlcm5hbCcuVHJ5IHJlbW92aW5nIHRoZSBrZXl3b3JkICdleHRlcm5hbCcuRXh0ZXJuYWxDbGFzc21lc3NhZ2VFeHRlcm5hbENsYXNzY29kZUV4dGVybmFsQ29uc3RydWN0b3JXaXRoQm9keUV4dGVybmFsIGNvbnN0cnVjdG9ycyBjYW4ndCBoYXZlIGEgYm9keS5UcnkgcmVtb3ZpbmcgdGhlIGJvZHkgb2YgdGhlIGNvbnN0cnVjdG9yLCBvciByZW1vdmluZyB0aGUga2V5d29yZCAnZXh0ZXJuYWwnLkV4dGVybmFsQ29uc3RydWN0b3JXaXRoQm9keW1lc3NhZ2VFeHRlcm5hbENvbnN0cnVjdG9yV2l0aEJvZHljb2RlRXh0ZXJuYWxDb25zdHJ1Y3RvcldpdGhGaWVsZEluaXRpYWxpemVyc0FuIGV4dGVybmFsIGNvbnN0cnVjdG9yIGNhbid0IGluaXRpYWxpemUgZmllbGRzLlRyeSByZW1vdmluZyB0aGUgZmllbGQgaW5pdGlhbGl6ZXJzLCBvciByZW1vdmluZyB0aGUga2V5d29yZCAnZXh0ZXJuYWwnLkV4dGVybmFsQ29uc3RydWN0b3JXaXRoRmllbGRJbml0aWFsaXplcnNFWFRFUk5BTF9DT05TVFJVQ1RPUl9XSVRIX0ZJRUxEX0lOSVRJQUxJWkVSU21lc3NhZ2VFeHRlcm5hbENvbnN0cnVjdG9yV2l0aEZpZWxkSW5pdGlhbGl6ZXJzY29kZUV4dGVybmFsRW51bUVudW1zIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlICdleHRlcm5hbCcuRXh0ZXJuYWxFbnVtbWVzc2FnZUV4dGVybmFsRW51bWNvZGVFeHRlcm5hbEZhY3RvcnlSZWRpcmVjdGlvbkEgcmVkaXJlY3RpbmcgZmFjdG9yeSBjYW4ndCBiZSBleHRlcm5hbC5UcnkgcmVtb3ZpbmcgdGhlICdleHRlcm5hbCcgbW9kaWZpZXIuRXh0ZXJuYWxGYWN0b3J5UmVkaXJlY3Rpb25tZXNzYWdlRXh0ZXJuYWxGYWN0b3J5UmVkaXJlY3Rpb25jb2RlRXh0ZXJuYWxGYWN0b3J5V2l0aEJvZHlFeHRlcm5hbCBmYWN0b3JpZXMgY2FuJ3QgaGF2ZSBhIGJvZHkuVHJ5IHJlbW92aW5nIHRoZSBib2R5IG9mIHRoZSBmYWN0b3J5LCBvciByZW1vdmluZyB0aGUga2V5d29yZCAnZXh0ZXJuYWwnLkV4dGVybmFsRmFjdG9yeVdpdGhCb2R5bWVzc2FnZUV4dGVybmFsRmFjdG9yeVdpdGhCb2R5Y29kZUV4dGVybmFsRmllbGRGaWVsZHMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgJ2V4dGVybmFsJy5FeHRlcm5hbEZpZWxkbWVzc2FnZUV4dGVybmFsRmllbGRjb2RlRXh0ZXJuYWxNZXRob2RXaXRoQm9keUFuIGV4dGVybmFsIG9yIG5hdGl2ZSBtZXRob2QgY2FuJ3QgaGF2ZSBhIGJvZHkuRXh0ZXJuYWxNZXRob2RXaXRoQm9keW1lc3NhZ2VFeHRlcm5hbE1ldGhvZFdpdGhCb2R5Y29kZUV4dGVybmFsVHlwZWRlZlR5cGVkZWZzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlICdleHRlcm5hbCcuRXh0ZXJuYWxUeXBlZGVmbWVzc2FnZUV4dGVybmFsVHlwZWRlZnRlbXBsYXRlRXh0cmFuZW91c01vZGlmaWVyQ2FuJ3QgaGF2ZSBtb2RpZmllciAnI2xleGVtZScgaGVyZS5UcnkgcmVtb3ZpbmcgJyNsZXhlbWUnLmNvZGVFeHRyYW5lb3VzTW9kaWZpZXJFeHRyYW5lb3VzTW9kaWZpZXJjb2RlRmFjdG9yeU5vdFN5bmNGYWN0b3J5IGJvZGllcyBjYW4ndCB1c2UgJ2FzeW5jJywgJ2FzeW5jKicsIG9yICdzeW5jKicuRmFjdG9yeU5vdFN5bmNOT05fU1lOQ19GQUNUT1JZbWVzc2FnZUZhY3RvcnlOb3RTeW5jY29kZUZhY3RvcnlUb3BMZXZlbERlY2xhcmF0aW9uVG9wLWxldmVsIGRlY2xhcmF0aW9ucyBjYW4ndCBiZSBkZWNsYXJlZCB0byBiZSAnZmFjdG9yeScuVHJ5IHJlbW92aW5nIHRoZSBrZXl3b3JkICdmYWN0b3J5Jy5GYWN0b3J5VG9wTGV2ZWxEZWNsYXJhdGlvbm1lc3NhZ2VGYWN0b3J5VG9wTGV2ZWxEZWNsYXJhdGlvbnRlbXBsYXRlRmFzdGFDTElBcmd1bWVudFJlcXVpcmVkRXhwZWN0ZWQgdmFsdWUgYWZ0ZXIgJyNuYW1lJy5jb2RlRmFzdGFDTElBcmd1bWVudFJlcXVpcmVkRmFzdGFDTElBcmd1bWVudFJlcXVpcmVkY29kZUZhc3RhVXNhZ2VMb25nU3VwcG9ydGVkIG9wdGlvbnM6CgogIC1vIDxmaWxlPiwgLS1vdXRwdXQ9PGZpbGU+CiAgICBHZW5lcmF0ZSB0aGUgb3V0cHV0IGludG8gPGZpbGU+LgoKICAtaCwgL2gsIC8/LCAtLWhlbHAKICAgIERpc3BsYXkgdGhpcyBtZXNzYWdlIChhZGQgLXYgZm9yIGluZm9ybWF0aW9uIGFib3V0IGFsbCBvcHRpb25zKS4KCiAgLXYsIC0tdmVyYm9zZQogICAgRGlzcGxheSB2ZXJib3NlIGluZm9ybWF0aW9uLgoKICAtRG5hbWUKICAtRG5hbWU9dmFsdWUKICAgIERlZmluZSBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbiB0aGUgY29tcGlsZS10aW1lIGVudmlyb25tZW50LgoKICAtLW5vLWRlZmluZXMKICAgIElnbm9yZSBhbGwgLUQgb3B0aW9ucyBhbmQgbGVhdmUgZW52aXJvbm1lbnQgY29uc3RhbnRzIHVuZXZhbHVhdGVkLgoKICAtLQogICAgU3RvcCBvcHRpb24gcGFyc2luZywgdGhlIHJlc3Qgb2YgdGhlIGNvbW1hbmQgbGluZSBpcyBhc3N1bWVkIHRvIGJlCiAgICBmaWxlIG5hbWVzIG9yIGFyZ3VtZW50cyB0byB0aGUgRGFydCBwcm9ncmFtLgoKICAtLXBhY2thZ2VzPTxmaWxlPgogICAgVXNlIHBhY2thZ2UgcmVzb2x1dGlvbiBjb25maWd1cmF0aW9uIDxmaWxlPiwgd2hpY2ggc2hvdWxkIGNvbnRhaW4gYSBtYXBwaW5nCiAgICBvZiBwYWNrYWdlIG5hbWVzIHRvIHBhdGhzLgoKICAtLXBsYXRmb3JtPTxmaWxlPgogICAgUmVhZCB0aGUgU0RLIHBsYXRmb3JtIGZyb20gPGZpbGU+LCB3aGljaCBzaG91bGQgYmUgaW4gRGlsbC9LZXJuZWwgSVIgZm9ybWF0CiAgICBhbmQgY29udGFpbiB0aGUgRGFydCBTREsuCgogIC0tdGFyZ2V0PWRhcnQyanN8ZGFydDJqc19zZXJ2ZXJ8ZGFydF9ydW5uZXJ8Zmx1dHRlcnxmbHV0dGVyX3J1bm5lcnxub25lfHZtCiAgICBTcGVjaWZ5IHRoZSB0YXJnZXQgY29uZmlndXJhdGlvbi4KCiAgLS1lbmFibGUtYXNzZXJ0cwogICAgQ2hlY2sgYXNzZXJ0cyBpbiBpbml0aWFsaXplcnMgZHVyaW5nIGNvbnN0YW50IGV2YWx1YXRpb24uCgogIC0tdmVyaWZ5CiAgICBDaGVjayB0aGF0IHRoZSBnZW5lcmF0ZWQgb3V0cHV0IGlzIGZyZWUgb2YgdmFyaW91cyBwcm9ibGVtcy4gVGhpcyBpcyBtb3N0bHkKICAgIHVzZWZ1bCBmb3IgZGV2ZWxvcGVycyBvZiB0aGlzIGNvbXBpbGVyIG9yIEtlcm5lbCB0cmFuc2Zvcm1hdGlvbnMuCgogIC0tZHVtcC1pcgogICAgUHJpbnQgY29tcGlsZWQgbGlicmFyaWVzIGluIEtlcm5lbCBzb3VyY2Ugbm90YXRpb24uCgogIC0tb21pdC1wbGF0Zm9ybQogICAgRXhjbHVkZSB0aGUgcGxhdGZvcm0gZnJvbSB0aGUgc2VyaWFsaXplZCBkaWxsIGZpbGUuCgogIC0tYnl0ZWNvZGUKICAgIEdlbmVyYXRlIGJ5dGVjb2RlLiBTdXBwb3J0ZWQgb25seSBmb3IgU0RLIHBsYXRmb3JtIGNvbXBpbGF0aW9uLgoKICAtLWV4Y2x1ZGUtc291cmNlCiAgICBEbyBub3QgaW5jbHVkZSBzb3VyY2UgY29kZSBpbiB0aGUgZGlsbCBmaWxlLgoKICAtLWNvbXBpbGUtc2RrPTxzZGs+CiAgICBDb21waWxlIHRoZSBTREsgZnJvbSBzY3JhdGNoIGluc3RlYWQgb2YgcmVhZGluZyBpdCBmcm9tIGEgLmRpbGwgZmlsZQogICAgKHNlZSAtLXBsYXRmb3JtKS4KCiAgLS1zZGs9PHNkaz4KICAgIExvY2F0aW9uIG9mIHRoZSBTREsgc291cmNlcyBmb3IgdXNlIHdoZW4gY29tcGlsaW5nIGFkZGl0aW9uYWwgcGxhdGZvcm0KICAgIGxpYnJhcmllcy4KCiAgLS1zdXBlcm1peGluCiAgICBJZ25vcmVkIGZvciBub3cuCgogIC0tc2luZ2xlLXJvb3Qtc2NoZW1lPVN0cmluZwogIC0tc2luZ2xlLXJvb3QtYmFzZT08ZGlyPgogICAgU3BlY2lmeSBhIGN1c3RvbSBVUkkgc2NoZW1lIGFuZCBhIGxvY2F0aW9uIG9uIGRpc2sgd2hlcmUgc3VjaCBVUklzIGFyZQogICAgbWFwcGVkIHRvLgoKICAgIFdoZW4gc3BlY2lmaWVkLCB0aGUgY29tcGlsZXIgY2FuIGJlIGludm9rZWQgd2l0aCBpbnB1dHMgdXNpbmcgdGhlIGN1c3RvbQogICAgVVJJIHNjaGVtZS4gVGhlIGNvbXBpbGVyIGNhbiBpZ25vcmUgdGhlIGV4YWN0IGxvY2F0aW9uIG9mIGZpbGVzIG9uIGRpc2sKICAgIGFuZCBhcyBhIHJlc3VsdCB0byBwcm9kdWNlIG91dHB1dCB0aGF0IGlzIGluZGVwZW5kZW5kZW50IG9mIHRoZSBhYnNvbHV0ZQogICAgbG9jYXRpb24gb2YgZmlsZXMgb24gZGlzay4gVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGZvciBpbnRlZ3JhdGluZyB3aXRoCiAgICBidWlsZCBzeXN0ZW1zLgoKICAtLWZhdGFsPWVycm9ycwogIC0tZmF0YWw9d2FybmluZ3MKICAgIE1ha2VzIG1lc3NhZ2VzIG9mIHRoZSBnaXZlbiBraW5kcyBmYXRhbCwgdGhhdCBpcywgaW1tZWRpYXRlbHkgc3RvcCB0aGUKICAgIGNvbXBpbGVyIHdpdGggYSBub24temVybyBleGl0LWNvZGUuIEluIC0tdmVyYm9zZSBtb2RlLCBhbHNvIGRpc3BsYXkgYW4KICAgIGludGVybmFsIHN0YWNrIHRyYWNlIGZyb20gdGhlIGNvbXBpbGVyLiBNdWx0aXBsZSBraW5kcyBjYW4gYmUgc2VwYXJhdGVkIGJ5CiAgICBjb21tYXMsIGZvciBleGFtcGxlLCAtLWZhdGFsPWVycm9ycyx3YXJuaW5ncy4KCiAgLS1lbmFibGUtZXhwZXJpbWVudD08ZmxhZz4KICAgIEVuYWJsZSBvciBkaXNhYmxlIGFuIGV4cGVyaW1lbnRhbCBmbGFnLCB1c2VkIHRvIGd1YXJkIGZlYXR1cmVzIGN1cnJlbnRseQogICAgaW4gZGV2ZWxvcG1lbnQuIFByZWZpeCBhbiBleHBlcmltZW50IG5hbWUgd2l0aCAnbm8tJyB0byBkaXNhYmxlIGl0LgogICAgTXVsdGlwbGUgZXhwZXJpbWVudHMgY2FuIGJlIHNlcGFyYXRlZCBieSBjb21tYXMuRmFzdGFVc2FnZUxvbmdtZXNzYWdlRmFzdGFVc2FnZUxvbmdjb2RlRmFzdGFVc2FnZVNob3J0RnJlcXVlbnRseSB1c2VkIG9wdGlvbnM6CgogIC1vIDxmaWxlPiBHZW5lcmF0ZSB0aGUgb3V0cHV0IGludG8gPGZpbGU+LgogIC1oICAgICAgICBEaXNwbGF5IHRoaXMgbWVzc2FnZSAoYWRkIC12IGZvciBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb3B0aW9ucykuRmFzdGFVc2FnZVNob3J0bWVzc2FnZUZhc3RhVXNhZ2VTaG9ydHRlbXBsYXRlRmZpRGFydFR5cGVNaXNtYXRjaEV4cGVjdGVkICcjdHlwZScgdG8gYmUgYSBzdWJ0eXBlIG9mICcjdHlwZTInLmNvZGVGZmlEYXJ0VHlwZU1pc21hdGNoRmZpRGFydFR5cGVNaXNtYXRjaHRlbXBsYXRlRmZpRXh0ZW5kc09ySW1wbGVtZW50c1NlYWxlZENsYXNzQ2xhc3MgJyNuYW1lJyBjYW5ub3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuY29kZUZmaUV4dGVuZHNPckltcGxlbWVudHNTZWFsZWRDbGFzc0ZmaUV4dGVuZHNPckltcGxlbWVudHNTZWFsZWRDbGFzc3RlbXBsYXRlRmZpRmllbGRBbm5vdGF0aW9uRmllbGQgJyNuYW1lJyByZXF1aXJlcyBleGFjdGx5IG9uZSBhbm5vdGF0aW9uIHRvIGRlY2xhcmUgaXRzIEMrKyB0eXBlLCB3aGljaCBjYW5ub3QgYmUgVm9pZC4gZGFydDpmZmkgU3RydWN0cyBjYW5ub3QgaGF2ZSByZWd1bGFyIERhcnQgZmllbGRzLmNvZGVGZmlGaWVsZEFubm90YXRpb25GZmlGaWVsZEFubm90YXRpb250ZW1wbGF0ZUZmaUZpZWxkSW5pdGlhbGl6ZXJGaWVsZCAnI25hbWUnIGlzIGEgZGFydDpmZmkgUG9pbnRlciB0byBhIHN0cnVjdCBmaWVsZCBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgY29uc3RydWN0b3IgZXhlY3V0aW9uLmNvZGVGZmlGaWVsZEluaXRpYWxpemVyRmZpRmllbGRJbml0aWFsaXplcnRlbXBsYXRlRmZpRmllbGROb0Fubm90YXRpb25GaWVsZCAnI25hbWUnIHJlcXVpcmVzIG5vIGFubm90YXRpb24gdG8gZGVjbGFyZSBpdHMgQysrIHR5cGUsIGl0IGlzIGEgUG9pbnRlciB3aGljaCBpcyByZXByZXNlbnRlZCBieSB0aGUgc2FtZSB0eXBlIGluIERhcnQgYW5kIEMrKy5jb2RlRmZpRmllbGROb0Fubm90YXRpb25GZmlGaWVsZE5vQW5ub3RhdGlvbnRlbXBsYXRlRmZpTm90U3RhdGljI25hbWUgZXhwZWN0cyBhIHN0YXRpYyBmdW5jdGlvbiBhcyBwYXJhbWV0ZXIuIGRhcnQ6ZmZpIG9ubHkgc3VwcG9ydHMgY2FsbGluZyBzdGF0aWMgRGFydCBmdW5jdGlvbnMgZnJvbSBjLmNvZGVGZmlOb3RTdGF0aWNGZmlOb3RTdGF0aWN0ZW1wbGF0ZUZmaVN0cnVjdEdlbmVyaWNTdHJ1Y3QgJyNuYW1lJyBzaG91bGQgbm90IGJlIGdlbmVyaWMuY29kZUZmaVN0cnVjdEdlbmVyaWNGZmlTdHJ1Y3RHZW5lcmljdGVtcGxhdGVGZmlUeXBlSW52YWxpZEV4cGVjdGVkIHR5cGUgJyN0eXBlJyB0byBiZSBhIHZhbGlkIGFuZCBpbnN0YW50aWF0ZWQgc3VidHlwZSBvZiAnTmF0aXZlVHlwZScuY29kZUZmaVR5cGVJbnZhbGlkRmZpVHlwZUludmFsaWR0ZW1wbGF0ZUZmaVR5cGVNaXNtYXRjaEV4cGVjdGVkIHR5cGUgJyN0eXBlJyB0byBiZSAnI3R5cGUyJywgd2hpY2ggaXMgdGhlIERhcnQgdHlwZSBjb3JyZXNwb25kaW5nIHRvICcjdHlwZTMnLmNvZGVGZmlUeXBlTWlzbWF0Y2hGZmlUeXBlTWlzbWF0Y2h0ZW1wbGF0ZUZmaVR5cGVVbnNpemVkTWV0aG9kICcjbmFtZScgY2Fubm90IGJlIGNhbGxlZCBvbiBzb21ldGhpbmcgb2YgdHlwZSAnI3R5cGUnIGFzIHRoaXMgdHlwZSBpcyB1bnNpemVkLmNvZGVGZmlUeXBlVW5zaXplZEZmaVR5cGVVbnNpemVkdGVtcGxhdGVGZmlXcm9uZ1N0cnVjdEluaGVyaXRhbmNlU3RydWN0ICcjbmFtZScgbXVzdCBpbmhlcml0IGZyb20gJ1N0cnVjdDwjbmFtZT4nLmNvZGVGZmlXcm9uZ1N0cnVjdEluaGVyaXRhbmNlRmZpV3JvbmdTdHJ1Y3RJbmhlcml0YW5jZWNvZGVGaWVsZEluaXRpYWxpemVkT3V0c2lkZURlY2xhcmluZ0NsYXNzQSBmaWVsZCBjYW4gb25seSBiZSBpbml0aWFsaXplZCBpbiBpdCdzIGRlY2xhcmluZyBjbGFzc1RyeSBwYXNzaW5nIGEgdmFsdWUgaW50byB0aGUgc3VwZXJjbGFzcyBjb25zdHJ1Y3Rvciwgb3IgbW92aW5nIHRoZSBpbml0aWFsaXphdGlvbiBpbnRvIHRoZSBjb25zdHJ1Y3RvciBib2R5LkZpZWxkSW5pdGlhbGl6ZWRPdXRzaWRlRGVjbGFyaW5nQ2xhc3NtZXNzYWdlRmllbGRJbml0aWFsaXplZE91dHNpZGVEZWNsYXJpbmdDbGFzc2NvZGVGaWVsZEluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yRmllbGQgZm9ybWFsIHBhcmFtZXRlcnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBhIGNvbnN0cnVjdG9yLlRyeSByZW1vdmluZyAndGhpcy4nLkZpZWxkSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3JtZXNzYWdlRmllbGRJbml0aWFsaXplck91dHNpZGVDb25zdHJ1Y3RvcmNvZGVGaW5hbEFuZENvdmFyaWFudE1lbWJlcnMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgYm90aCAnZmluYWwnIGFuZCAnY292YXJpYW50Jy5UcnkgcmVtb3ZpbmcgZWl0aGVyIHRoZSAnZmluYWwnIG9yICdjb3ZhcmlhbnQnIGtleXdvcmQuRmluYWxBbmRDb3ZhcmlhbnRtZXNzYWdlRmluYWxBbmRDb3ZhcmlhbnRjb2RlRmluYWxBbmRWYXJNZW1iZXJzIGNhbid0IGJlIGRlY2xhcmVkIHRvIGJlIGJvdGggJ2ZpbmFsJyBhbmQgJ3ZhcicuVHJ5IHJlbW92aW5nIHRoZSBrZXl3b3JkICd2YXInLkZpbmFsQW5kVmFybWVzc2FnZUZpbmFsQW5kVmFydGVtcGxhdGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWRGaW5hbCBmaWVsZCAnI25hbWUnIGlzIG5vdCBpbml0aWFsaXplZC5UcnkgdG8gaW5pdGlhbGl6ZSB0aGUgZmllbGQgaW4gdGhlIGRlY2xhcmF0aW9uIG9yIGluIGV2ZXJ5IGNvbnN0cnVjdG9yLmNvZGVGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWRGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWRGSU5BTF9OT1RfSU5JVElBTElaRUR0ZW1wbGF0ZUZpbmFsRmllbGROb3RJbml0aWFsaXplZEJ5Q29uc3RydWN0b3JGaW5hbCBmaWVsZCAnI25hbWUnIGlzIG5vdCBpbml0aWFsaXplZCBieSB0aGlzIGNvbnN0cnVjdG9yLlRyeSB0byBpbml0aWFsaXplIHRoZSBmaWVsZCB1c2luZyBhbiBpbml0aWFsaXppbmcgZm9ybWFsIG9yIGEgZmllbGQgaW5pdGlhbGl6ZXIuY29kZUZpbmFsRmllbGROb3RJbml0aWFsaXplZEJ5Q29uc3RydWN0b3JGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yRklOQUxfTk9UX0lOSVRJQUxJWkVEX0NPTlNUUlVDVE9SXzF0ZW1wbGF0ZUZpbmFsRmllbGRXaXRob3V0SW5pdGlhbGl6ZXJUaGUgZmluYWwgdmFyaWFibGUgJyNuYW1lJyBtdXN0IGJlIGluaXRpYWxpemVkLmNvZGVGaW5hbEZpZWxkV2l0aG91dEluaXRpYWxpemVyRmluYWxGaWVsZFdpdGhvdXRJbml0aWFsaXplcnRlbXBsYXRlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkJyNuYW1lJyBpcyBhIGZpbmFsIGluc3RhbmNlIHZhcmlhYmxlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5jb2RlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkRklOQUxfSU5JVElBTElaRURfTVVMVElQTEVfVElNRVN0ZW1wbGF0ZUZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZENhdXNlJyNuYW1lJyB3YXMgaW5pdGlhbGl6ZWQgaGVyZS5jb2RlRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkQ2F1c2VGaW5hbEluc3RhbmNlVmFyaWFibGVBbHJlYWR5SW5pdGlhbGl6ZWRDYXVzZXRlbXBsYXRlRm9ySW5Mb29wRWxlbWVudFR5cGVOb3RBc3NpZ25hYmxlQSB2YWx1ZSBvZiB0eXBlICcjdHlwZScgY2FuJ3QgYmUgYXNzaWduZWQgdG8gYSB2YXJpYWJsZSBvZiB0eXBlICcjdHlwZTInLlRyeSBjaGFuZ2luZyB0aGUgdHlwZSBvZiB0aGUgdmFyaWFibGUuY29kZUZvckluTG9vcEVsZW1lbnRUeXBlTm90QXNzaWduYWJsZUZvckluTG9vcEVsZW1lbnRUeXBlTm90QXNzaWduYWJsZUZPUl9JTl9PRl9JTlZBTElEX0VMRU1FTlRfVFlQRWNvZGVGb3JJbkxvb3BFeGFjdGx5T25lVmFyaWFibGVBIGZvci1pbiBsb29wIGNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSBsb29wIHZhcmlhYmxlLkZvckluTG9vcEV4YWN0bHlPbmVWYXJpYWJsZW1lc3NhZ2VGb3JJbkxvb3BFeGFjdGx5T25lVmFyaWFibGVjb2RlRm9ySW5Mb29wTm90QXNzaWduYWJsZUNhbid0IGFzc2lnbiB0byB0aGlzLCBzbyBpdCBjYW4ndCBiZSB1c2VkIGluIGEgZm9yLWluIGxvb3AuRm9ySW5Mb29wTm90QXNzaWduYWJsZW1lc3NhZ2VGb3JJbkxvb3BOb3RBc3NpZ25hYmxldGVtcGxhdGVGb3JJbkxvb3BUeXBlTm90SXRlcmFibGVUaGUgdHlwZSAnI3R5cGUnIHVzZWQgaW4gdGhlICdmb3InIGxvb3AgbXVzdCBpbXBsZW1lbnQgJyN0eXBlMicuY29kZUZvckluTG9vcFR5cGVOb3RJdGVyYWJsZUZvckluTG9vcFR5cGVOb3RJdGVyYWJsZUZPUl9JTl9PRl9JTlZBTElEX1RZUEVjb2RlRm9ySW5Mb29wV2l0aENvbnN0VmFyaWFibGVBIGZvci1pbiBsb29wLXZhcmlhYmxlIGNhbid0IGJlICdjb25zdCcuVHJ5IHJlbW92aW5nIHRoZSAnY29uc3QnIG1vZGlmaWVyLkZvckluTG9vcFdpdGhDb25zdFZhcmlhYmxlRk9SX0lOX1dJVEhfQ09OU1RfVkFSSUFCTEVtZXNzYWdlRm9ySW5Mb29wV2l0aENvbnN0VmFyaWFibGVjb2RlRnVuY3Rpb25UeXBlRGVmYXVsdFZhbHVlQ2FuJ3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgaW4gYSBmdW5jdGlvbiB0eXBlLkZ1bmN0aW9uVHlwZURlZmF1bHRWYWx1ZURFRkFVTFRfVkFMVUVfSU5fRlVOQ1RJT05fVFlQRW1lc3NhZ2VGdW5jdGlvblR5cGVEZWZhdWx0VmFsdWVjb2RlRnVuY3Rpb25UeXBlZFBhcmFtZXRlclZhckZ1bmN0aW9uLXR5cGVkIHBhcmFtZXRlcnMgY2FuJ3Qgc3BlY2lmeSAnY29uc3QnLCAnZmluYWwnIG9yICd2YXInIGluIHBsYWNlIG9mIGEgcmV0dXJuIHR5cGUuVHJ5IHJlcGxhY2luZyB0aGUga2V5d29yZCB3aXRoIGEgcmV0dXJuIHR5cGUuRnVuY3Rpb25UeXBlZFBhcmFtZXRlclZhckZVTkNUSU9OX1RZUEVEX1BBUkFNRVRFUl9WQVJtZXNzYWdlRnVuY3Rpb25UeXBlZFBhcmFtZXRlclZhcmNvZGVHZW5lcmF0b3JSZXR1cm5zVmFsdWUnc3luYyonIGFuZCAnYXN5bmMqJyBjYW4ndCByZXR1cm4gYSB2YWx1ZS5HZW5lcmF0b3JSZXR1cm5zVmFsdWVSRVRVUk5fSU5fR0VORVJBVE9SbWVzc2FnZUdlbmVyYXRvclJldHVybnNWYWx1ZWNvZGVHZW5lcmljRnVuY3Rpb25UeXBlSW5Cb3VuZFR5cGUgdmFyaWFibGVzIGNhbid0IGhhdmUgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlcyBpbiB0aGVpciBib3VuZHMuR2VuZXJpY0Z1bmN0aW9uVHlwZUluQm91bmRHRU5FUklDX0ZVTkNUSU9OX1RZUEVfQ0FOTk9UX0JFX0JPVU5EbWVzc2FnZUdlbmVyaWNGdW5jdGlvblR5cGVJbkJvdW5kdGVtcGxhdGVHZW5lcmljRnVuY3Rpb25UeXBlSW5mZXJyZWRBc0FjdHVhbFR5cGVBcmd1bWVudFVuZXhwZWN0ZWQgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlICcjdHlwZScgaW5mZXJyZWQgYXMgYSB0eXBlIGFyZ3VtZW50LlRyeSBwcm92aWRpbmcgYSBub24tZ2VuZXJpYyBmdW5jdGlvbiB0eXBlIGV4cGxpY2l0bHkuY29kZUdlbmVyaWNGdW5jdGlvblR5cGVJbmZlcnJlZEFzQWN0dWFsVHlwZUFyZ3VtZW50R2VuZXJpY0Z1bmN0aW9uVHlwZUluZmVycmVkQXNBY3R1YWxUeXBlQXJndW1lbnRHRU5FUklDX0ZVTkNUSU9OX0NBTk5PVF9CRV9UWVBFX0FSR1VNRU5UY29kZUdlbmVyaWNGdW5jdGlvblR5cGVVc2VkQXNBY3R1YWxUeXBlQXJndW1lbnRVbmV4cGVjdGVkIGdlbmVyaWMgZnVuY3Rpb24gdHlwZSBmb3VuZCBpbiBhIHR5cGUgYXJndW1lbnQuVHJ5IHVzaW5nIGEgbm9uLWdlbmVyaWMgZnVuY3Rpb24gdHlwZS5HZW5lcmljRnVuY3Rpb25UeXBlVXNlZEFzQWN0dWFsVHlwZUFyZ3VtZW50bWVzc2FnZUdlbmVyaWNGdW5jdGlvblR5cGVVc2VkQXNBY3R1YWxUeXBlQXJndW1lbnR0ZW1wbGF0ZUdldHRlck5vdEZvdW5kR2V0dGVyIG5vdCBmb3VuZDogJyNuYW1lJy5jb2RlR2V0dGVyTm90Rm91bmRHZXR0ZXJOb3RGb3VuZFVOREVGSU5FRF9HRVRURVJjb2RlR2V0dGVyV2l0aEZvcm1hbHNBIGdldHRlciBjYW4ndCBoYXZlIGZvcm1hbCBwYXJhbWV0ZXJzLlRyeSByZW1vdmluZyAnKC4uLiknLkdldHRlcldpdGhGb3JtYWxzR0VUVEVSX1dJVEhfUEFSQU1FVEVSU21lc3NhZ2VHZXR0ZXJXaXRoRm9ybWFsc2NvZGVJbGxlZ2FsQXNzaWdubWVudFRvTm9uQXNzaWduYWJsZUlsbGVnYWwgYXNzaWdubWVudCB0byBub24tYXNzaWduYWJsZSBleHByZXNzaW9uLklsbGVnYWxBc3NpZ25tZW50VG9Ob25Bc3NpZ25hYmxlbWVzc2FnZUlsbGVnYWxBc3NpZ25tZW50VG9Ob25Bc3NpZ25hYmxlY29kZUlsbGVnYWxBc3luY0dlbmVyYXRvclJldHVyblR5cGVGdW5jdGlvbnMgbWFya2VkICdhc3luYyonIG11c3QgaGF2ZSBhIHJldHVybiB0eXBlIGFzc2lnbmFibGUgdG8gJ1N0cmVhbScuSWxsZWdhbEFzeW5jR2VuZXJhdG9yUmV0dXJuVHlwZUlMTEVHQUxfQVNZTkNfR0VORVJBVE9SX1JFVFVSTl9UWVBFbWVzc2FnZUlsbGVnYWxBc3luY0dlbmVyYXRvclJldHVyblR5cGVjb2RlSWxsZWdhbEFzeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGVGdW5jdGlvbnMgbWFya2VkICdhc3luYyonIGNhbid0IGhhdmUgcmV0dXJuIHR5cGUgJ3ZvaWQnLklsbGVnYWxBc3luY0dlbmVyYXRvclZvaWRSZXR1cm5UeXBlbWVzc2FnZUlsbGVnYWxBc3luY0dlbmVyYXRvclZvaWRSZXR1cm5UeXBlY29kZUlsbGVnYWxBc3luY1JldHVyblR5cGVGdW5jdGlvbnMgbWFya2VkICdhc3luYycgbXVzdCBoYXZlIGEgcmV0dXJuIHR5cGUgYXNzaWduYWJsZSB0byAnRnV0dXJlJy5JbGxlZ2FsQXN5bmNSZXR1cm5UeXBlSUxMRUdBTF9BU1lOQ19SRVRVUk5fVFlQRW1lc3NhZ2VJbGxlZ2FsQXN5bmNSZXR1cm5UeXBldGVtcGxhdGVJbGxlZ2FsTWl4aW5UaGUgdHlwZSAnI25hbWUnIGNhbid0IGJlIG1peGVkIGluLmNvZGVJbGxlZ2FsTWl4aW5JbGxlZ2FsTWl4aW5JTExFR0FMX01JWElOdGVtcGxhdGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0Nhbid0IHVzZSAnI25hbWUnIGFzIGEgbWl4aW4gYmVjYXVzZSBpdCBoYXMgY29uc3RydWN0b3JzLmNvZGVJbGxlZ2FsTWl4aW5EdWVUb0NvbnN0cnVjdG9yc0lsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzTUlYSU5fREVDTEFSRVNfQ09OU1RSVUNUT1J0ZW1wbGF0ZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzQ2F1c2VUaGlzIGNvbnN0cnVjdG9yIHByZXZlbnRzIHVzaW5nICcjbmFtZScgYXMgYSBtaXhpbi5jb2RlSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZUlsbGVnYWxNaXhpbkR1ZVRvQ29uc3RydWN0b3JzQ2F1c2V0ZW1wbGF0ZUlsbGVnYWxSZWN1cnNpdmVUeXBlSWxsZWdhbCByZWN1cnNpdmUgdHlwZSAnI3R5cGUnLmNvZGVJbGxlZ2FsUmVjdXJzaXZlVHlwZUlsbGVnYWxSZWN1cnNpdmVUeXBlY29kZUlsbGVnYWxTeW5jR2VuZXJhdG9yUmV0dXJuVHlwZUZ1bmN0aW9ucyBtYXJrZWQgJ3N5bmMqJyBtdXN0IGhhdmUgYSByZXR1cm4gdHlwZSBhc3NpZ25hYmxlIHRvICdJdGVyYWJsZScuSWxsZWdhbFN5bmNHZW5lcmF0b3JSZXR1cm5UeXBlSUxMRUdBTF9TWU5DX0dFTkVSQVRPUl9SRVRVUk5fVFlQRW1lc3NhZ2VJbGxlZ2FsU3luY0dlbmVyYXRvclJldHVyblR5cGVjb2RlSWxsZWdhbFN5bmNHZW5lcmF0b3JWb2lkUmV0dXJuVHlwZUZ1bmN0aW9ucyBtYXJrZWQgJ3N5bmMqJyBjYW4ndCBoYXZlIHJldHVybiB0eXBlICd2b2lkJy5JbGxlZ2FsU3luY0dlbmVyYXRvclZvaWRSZXR1cm5UeXBlbWVzc2FnZUlsbGVnYWxTeW5jR2VuZXJhdG9yVm9pZFJldHVyblR5cGVjb2RlSW1wbGVtZW50c0JlZm9yZUV4dGVuZHNUaGUgZXh0ZW5kcyBjbGF1c2UgbXVzdCBiZSBiZWZvcmUgdGhlIGltcGxlbWVudHMgY2xhdXNlLlRyeSBtb3ZpbmcgdGhlIGV4dGVuZHMgY2xhdXNlIGJlZm9yZSB0aGUgaW1wbGVtZW50cyBjbGF1c2UuSW1wbGVtZW50c0JlZm9yZUV4dGVuZHNtZXNzYWdlSW1wbGVtZW50c0JlZm9yZUV4dGVuZHNjb2RlSW1wbGVtZW50c0JlZm9yZU9uVGhlIG9uIGNsYXVzZSBtdXN0IGJlIGJlZm9yZSB0aGUgaW1wbGVtZW50cyBjbGF1c2UuVHJ5IG1vdmluZyB0aGUgb24gY2xhdXNlIGJlZm9yZSB0aGUgaW1wbGVtZW50cyBjbGF1c2UuSW1wbGVtZW50c0JlZm9yZU9ubWVzc2FnZUltcGxlbWVudHNCZWZvcmVPbmNvZGVJbXBsZW1lbnRzQmVmb3JlV2l0aFRoZSB3aXRoIGNsYXVzZSBtdXN0IGJlIGJlZm9yZSB0aGUgaW1wbGVtZW50cyBjbGF1c2UuVHJ5IG1vdmluZyB0aGUgd2l0aCBjbGF1c2UgYmVmb3JlIHRoZSBpbXBsZW1lbnRzIGNsYXVzZS5JbXBsZW1lbnRzQmVmb3JlV2l0aG1lc3NhZ2VJbXBsZW1lbnRzQmVmb3JlV2l0aGNvZGVJbXBsZW1lbnRzRnV0dXJlT3InRnV0dXJlT3InIGNhbid0IGJlIHVzZWQgaW4gYW4gJ2ltcGxlbWVudHMnIGNsYXVzZS5JbXBsZW1lbnRzRnV0dXJlT3JtZXNzYWdlSW1wbGVtZW50c0Z1dHVyZU9ydGVtcGxhdGVJbXBsZW1lbnRzUmVwZWF0ZWQnI25hbWUnIGNhbiBvbmx5IGJlIGltcGxlbWVudGVkIG9uY2UuVHJ5IHJlbW92aW5nICNjb3VudCBvZiB0aGUgb2NjdXJyZW5jZXMuY29kZUltcGxlbWVudHNSZXBlYXRlZEltcGxlbWVudHNSZXBlYXRlZElNUExFTUVOVFNfUkVQRUFURUR0ZW1wbGF0ZUltcGxlbWVudHNTdXBlckNsYXNzJyNuYW1lJyBjYW4ndCBiZSB1c2VkIGluIGJvdGggJ2V4dGVuZHMnIGFuZCAnaW1wbGVtZW50cycgY2xhdXNlcy5UcnkgcmVtb3Zpbmcgb25lIG9mIHRoZSBvY2N1cnJlbmNlcy5jb2RlSW1wbGVtZW50c1N1cGVyQ2xhc3NJbXBsZW1lbnRzU3VwZXJDbGFzc0lNUExFTUVOVFNfU1VQRVJfQ0xBU1N0ZW1wbGF0ZUltcGxpY2l0Q2FsbE9mTm9uTWV0aG9kQ2Fubm90IGludm9rZSBhbiBpbnN0YW5jZSBvZiAnI3R5cGUnIGJlY2F1c2UgaXQgZGVjbGFyZXMgJ2NhbGwnIHRvIGJlIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgbWV0aG9kLlRyeSBjaGFuZ2luZyAnY2FsbCcgdG8gYSBtZXRob2Qgb3IgZXhwbGljaXRseSBpbnZva2UgJ2NhbGwnLmNvZGVJbXBsaWNpdENhbGxPZk5vbk1ldGhvZEltcGxpY2l0Q2FsbE9mTm9uTWV0aG9kSU1QTElDSVRfQ0FMTF9PRl9OT05fTUVUSE9EdGVtcGxhdGVJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0T3ZlcnJpZGUgd2FzIGludHJvZHVjZWQgd2hlbiB0aGUgbWl4aW4gJyNuYW1lJyB3YXMgYXBwbGllZCB0byAnI25hbWUyJy5jb2RlSW1wbGljaXRNaXhpbk92ZXJyaWRlQ29udGV4dEltcGxpY2l0TWl4aW5PdmVycmlkZUNvbnRleHRjb2RlSW1wb3J0QWZ0ZXJQYXJ0SW1wb3J0IGRpcmVjdGl2ZXMgbXVzdCBwcmVjZWRlIHBhcnQgZGlyZWN0aXZlcy5UcnkgbW92aW5nIHRoZSBpbXBvcnQgZGlyZWN0aXZlcyBiZWZvcmUgdGhlIHBhcnQgZGlyZWN0aXZlcy5JbXBvcnRBZnRlclBhcnRtZXNzYWdlSW1wb3J0QWZ0ZXJQYXJ0dGVtcGxhdGVJbXBvcnRIaWRlc0ltcG9ydEltcG9ydCBvZiAnI25hbWUnIChmcm9tICcjdXJpJykgaGlkZXMgaW1wb3J0IGZyb20gJyN1cmkyJy5jb2RlSW1wb3J0SGlkZXNJbXBvcnRJbXBvcnRIaWRlc0ltcG9ydHRlbXBsYXRlSW5jb21wYXRpYmxlUmVkaXJlY3RlZUZ1bmN0aW9uVHlwZVRoZSBjb25zdHJ1Y3RvciBmdW5jdGlvbiB0eXBlICcjdHlwZScgaXNuJ3QgYSBzdWJ0eXBlIG9mICcjdHlwZTInLmNvZGVJbmNvbXBhdGlibGVSZWRpcmVjdGVlRnVuY3Rpb25UeXBlSW5jb21wYXRpYmxlUmVkaXJlY3RlZUZ1bmN0aW9uVHlwZVJFRElSRUNUX1RPX0lOVkFMSURfVFlQRXRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50VHlwZSBhcmd1bWVudCAnI3R5cGUnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyN0eXBlMicgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBvbiAnI25hbWUyJy5UcnkgY2hhbmdpbmcgdHlwZSBhcmd1bWVudHMgc28gdGhhdCB0aGV5IGNvbmZvcm0gdG8gdGhlIGJvdW5kcy5jb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5jb3JyZWN0VHlwZUFyZ3VtZW50VFlQRV9BUkdVTUVOVF9OT1RfTUFUQ0hJTkdfQk9VTkRTdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblJldHVyblR5cGVUeXBlIGFyZ3VtZW50ICcjdHlwZScgZG9lc24ndCBjb25mb3JtIHRvIHRoZSBib3VuZCAnI3R5cGUyJyBvZiB0aGUgdHlwZSB2YXJpYWJsZSAnI25hbWUnIG9uICcjbmFtZTInIGluIHRoZSByZXR1cm4gdHlwZS5jb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5SZXR1cm5UeXBlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5SZXR1cm5UeXBldGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZVR5cGUgYXJndW1lbnQgJyN0eXBlJyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcjdHlwZTInIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcjbmFtZScgb24gJyNuYW1lMicgaW4gdGhlIHN1cGVydHlwZSAnI25hbWUzJyBvZiBjbGFzcyAnI25hbWU0Jy5jb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZXRlbXBsYXRlSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVJbmZlcnJlZEluZmVycmVkIHR5cGUgYXJndW1lbnQgJyN0eXBlJyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcjdHlwZTInIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcjbmFtZScgb24gJyNuYW1lMicgaW4gdGhlIHN1cGVydHlwZSAnI25hbWUzJyBvZiBjbGFzcyAnI25hbWU0Jy5Ucnkgc3BlY2lmeWluZyB0eXBlIGFyZ3VtZW50cyBleHBsaWNpdGx5IHNvIHRoYXQgdGhleSBjb25mb3JtIHRvIHRoZSBib3VuZHMuY29kZUluY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlSW5mZXJyZWRJbmNvcnJlY3RUeXBlQXJndW1lbnRJblN1cGVydHlwZUluZmVycmVkdGVtcGxhdGVJbmNvcnJlY3RUeXBlQXJndW1lbnRJbmZlcnJlZEluZmVycmVkIHR5cGUgYXJndW1lbnQgJyN0eXBlJyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcjdHlwZTInIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcjbmFtZScgb24gJyNuYW1lMicuY29kZUluY29ycmVjdFR5cGVBcmd1bWVudEluZmVycmVkSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5mZXJyZWR0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZFR5cGUgYXJndW1lbnQgJyN0eXBlJyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcjdHlwZTInIG9mIHRoZSB0eXBlIHZhcmlhYmxlICcjbmFtZScgb24gJyN0eXBlMy4jbmFtZTInLmNvZGVJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWR0ZW1wbGF0ZUluY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZEluZmVycmVkSW5mZXJyZWQgdHlwZSBhcmd1bWVudCAnI3R5cGUnIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgYm91bmQgJyN0eXBlMicgb2YgdGhlIHR5cGUgdmFyaWFibGUgJyNuYW1lJyBvbiAnI3R5cGUzLiNuYW1lMicuY29kZUluY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZEluZmVycmVkSW5jb3JyZWN0VHlwZUFyZ3VtZW50UXVhbGlmaWVkSW5mZXJyZWRjb2RlSW5jb3JyZWN0VHlwZUFyZ3VtZW50VmFyaWFibGVUaGlzIGlzIHRoZSB0eXBlIHZhcmlhYmxlIHdob3NlIGJvdW5kIGlzbid0IGNvbmZvcm1lZCB0by5JbmNvcnJlY3RUeXBlQXJndW1lbnRWYXJpYWJsZW1lc3NhZ2VJbmNvcnJlY3RUeXBlQXJndW1lbnRWYXJpYWJsZXRlbXBsYXRlSW5mZXJyZWRQYWNrYWdlVXJpSW50ZXJwcmV0aW5nIHRoaXMgYXMgcGFja2FnZSBVUkksICcjdXJpJy5jb2RlSW5mZXJyZWRQYWNrYWdlVXJpSW5mZXJyZWRQYWNrYWdlVXJpY29kZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhbid0IGluaGVyaXQgbWVtYmVycyB0aGF0IGNvbmZsaWN0IHdpdGggZWFjaCBvdGhlci5Jbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDT05GTElDVFNfV0lUSF9JTkhFUklURURfTUVNQkVSbWVzc2FnZUluaGVyaXRlZE1lbWJlcnNDb25mbGljdGNvZGVJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTFUaGlzIGlzIG9uZSBpbmhlcml0ZWQgbWVtYmVyLkluaGVyaXRlZE1lbWJlcnNDb25mbGljdENhdXNlMW1lc3NhZ2VJbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTFjb2RlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Q2F1c2UyVGhpcyBpcyB0aGUgb3RoZXIgaW5oZXJpdGVkIG1lbWJlci5Jbmhlcml0ZWRNZW1iZXJzQ29uZmxpY3RDYXVzZTJtZXNzYWdlSW5oZXJpdGVkTWVtYmVyc0NvbmZsaWN0Q2F1c2UydGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkVHJpZWQgdG8gaW5pdGlhbGl6ZSBmcm9tIGEgcHJldmlvdXMgY29tcGlsYXRpb24gKCNzdHJpbmcpLCBidXQgdGhlIGZpbGUgd2FzIG5vdCBzZWxmLWNvbnRhaW5lZC4gVGhpcyBtaWdodCBiZSBhIGJ1Zy4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0IGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvIHJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy4KSWYgeW91IGFyZSBjb21mb3J0YWJsZSB3aXRoIGl0LCBpdCB3b3VsZCBpbXByb3ZlIHRoZSBjaGFuY2VzIG9mIGZpeGluZyBhbnkgYnVnIGlmIHlvdSBpbmNsdWRlZCB0aGUgZmlsZSAjdXJpIGluIHlvdXIgZXJyb3IgcmVwb3J0LCBidXQgYmUgYXdhcmUgdGhhdCB0aGlzIGZpbGUgaW5jbHVkZXMgeW91ciBzb3VyY2UgY29kZS4KRWl0aGVyIHdheSwgeW91IHNob3VsZCBwcm9iYWJseSBkZWxldGUgdGhlIGZpbGUgc28gaXQgZG9lc24ndCB1c2UgdW5uZWNlc3NhcnkgZGlzayBzcGFjZS5jb2RlSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZEluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWR0ZW1wbGF0ZUluaXRpYWxpemVGcm9tRGlsbE5vdFNlbGZDb250YWluZWROb0R1bXBUcmllZCB0byBpbml0aWFsaXplIGZyb20gYSBwcmV2aW91cyBjb21waWxhdGlvbiAoI3N0cmluZyksIGJ1dCB0aGUgZmlsZSB3YXMgbm90IHNlbGYtY29udGFpbmVkLiBUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LmNvZGVJbml0aWFsaXplRnJvbURpbGxOb3RTZWxmQ29udGFpbmVkTm9EdW1wSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZE5vRHVtcHRlbXBsYXRlSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW1UcmllZCB0byBpbml0aWFsaXplIGZyb20gYSBwcmV2aW91cyBjb21waWxhdGlvbiAoI3N0cmluZyksIGJ1dCBjb3VsZG4ndC4KRXJyb3IgbWVzc2FnZSB3YXMgJyNzdHJpbmcyJy4KU3RhY2t0cmFjZSBpbmNsdWRlZCAnI3N0cmluZzMnLgpUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LgpJZiB5b3UgYXJlIGNvbWZvcnRhYmxlIHdpdGggaXQsIGl0IHdvdWxkIGltcHJvdmUgdGhlIGNoYW5jZXMgb2YgZml4aW5nIGFueSBidWcgaWYgeW91IGluY2x1ZGVkIHRoZSBmaWxlICN1cmkgaW4geW91ciBlcnJvciByZXBvcnQsIGJ1dCBiZSBhd2FyZSB0aGF0IHRoaXMgZmlsZSBpbmNsdWRlcyB5b3VyIHNvdXJjZSBjb2RlLgpFaXRoZXIgd2F5LCB5b3Ugc2hvdWxkIHByb2JhYmx5IGRlbGV0ZSB0aGUgZmlsZSBzbyBpdCBkb2Vzbid0IHVzZSB1bm5lY2Vzc2FyeSBkaXNrIHNwYWNlLmNvZGVJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtdGVtcGxhdGVJbml0aWFsaXplRnJvbURpbGxVbmtub3duUHJvYmxlbU5vRHVtcFRyaWVkIHRvIGluaXRpYWxpemUgZnJvbSBhIHByZXZpb3VzIGNvbXBpbGF0aW9uICgjc3RyaW5nKSwgYnV0IGNvdWxkbid0LgpFcnJvciBtZXNzYWdlIHdhcyAnI3N0cmluZzInLgpTdGFja3RyYWNlIGluY2x1ZGVkICcjc3RyaW5nMycuClRoaXMgbWlnaHQgYmUgYSBidWcuCgpUaGUgRGFydCB0ZWFtIHdvdWxkIGdyZWF0bHkgYXBwcmVjaWF0ZSBpdCBpZiB5b3Ugd291bGQgdGFrZSBhIG1vbWVudCB0byByZXBvcnQgdGhpcyBwcm9ibGVtIGF0IGh0dHA6Ly9kYXJ0YnVnLmNvbS9uZXcuY29kZUluaXRpYWxpemVGcm9tRGlsbFVua25vd25Qcm9ibGVtTm9EdW1wSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW1Ob0R1bXBjb2RlSW5pdGlhbGl6ZWRWYXJpYWJsZUluRm9yRWFjaFRoZSBsb29wIHZhcmlhYmxlIGluIGEgZm9yLWVhY2ggbG9vcCBjYW4ndCBiZSBpbml0aWFsaXplZC5UcnkgcmVtb3ZpbmcgdGhlIGluaXRpYWxpemVyLCBvciB1c2luZyBhIGRpZmZlcmVudCBraW5kIG9mIGxvb3AuSW5pdGlhbGl6ZWRWYXJpYWJsZUluRm9yRWFjaG1lc3NhZ2VJbml0aWFsaXplZFZhcmlhYmxlSW5Gb3JFYWNodGVtcGxhdGVJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkJyNuYW1lJyBpc24ndCBhbiBpbnN0YW5jZSBmaWVsZCBvZiB0aGlzIGNsYXNzLmNvZGVJbml0aWFsaXplckZvclN0YXRpY0ZpZWxkSW5pdGlhbGl6ZXJGb3JTdGF0aWNGaWVsZElOSVRJQUxJWkVSX0ZPUl9TVEFUSUNfRklFTER0ZW1wbGF0ZUluaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yT25seSBjb25zdHJ1Y3RvcnMgY2FuIGhhdmUgaW5pdGlhbGl6ZXJzLCBhbmQgJyNuYW1lJyBpcyBub3QgYSBjb25zdHJ1Y3Rvci5jb2RlSW5pdGlhbGl6ZXJPdXRzaWRlQ29uc3RydWN0b3JJbml0aWFsaXplck91dHNpZGVDb25zdHJ1Y3RvcklOSVRJQUxJWkVSX09VVFNJREVfQ09OU1RSVUNUT1J0ZW1wbGF0ZUluaXRpYWxpemluZ0Zvcm1hbFR5cGVNaXNtYXRjaFRoZSB0eXBlIG9mIHBhcmFtZXRlciAnI25hbWUnLCAnI3R5cGUnIGlzIG5vdCBhIHN1YnR5cGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQncyB0eXBlLCAnI3R5cGUyJy5UcnkgY2hhbmdpbmcgdGhlIHR5cGUgb2YgcGFyYW1ldGVyICcjbmFtZScgdG8gYSBzdWJ0eXBlIG9mICcjdHlwZTInLmNvZGVJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2hJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2hJTlZBTElEX1BBUkFNRVRFUl9ERUNMQVJBVElPTmNvZGVJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2hGaWVsZFRoZSBmaWVsZCB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSBwYXJhbWV0ZXIuSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoRmllbGRtZXNzYWdlSW5pdGlhbGl6aW5nRm9ybWFsVHlwZU1pc21hdGNoRmllbGRjb2RlSW5wdXRGaWxlTm90Rm91bmRJbnB1dEZpbGVOb3RGb3VuZHRlbXBsYXRlSW50ZWdlckxpdGVyYWxJc091dE9mUmFuZ2VUaGUgaW50ZWdlciBsaXRlcmFsICNzdHJpbmcgY2FuJ3QgYmUgcmVwcmVzZW50ZWQgaW4gNjQgYml0cy5UcnkgdXNpbmcgdGhlIEJpZ0ludCBjbGFzcyBpZiB5b3UgbmVlZCBhbiBpbnRlZ2VyIGxhcmdlciB0aGFuIDksMjIzLDM3MiwwMzYsODU0LDc3NSw4MDcgb3IgbGVzcyB0aGFuIC05LDIyMywzNzIsMDM2LDg1NCw3NzUsODA4LmNvZGVJbnRlZ2VyTGl0ZXJhbElzT3V0T2ZSYW5nZUludGVnZXJMaXRlcmFsSXNPdXRPZlJhbmdlSU5URUdFUl9MSVRFUkFMX09VVF9PRl9SQU5HRXRlbXBsYXRlSW50ZXJmYWNlQ2hlY2tDb250ZXh0Qm90aCBtZW1iZXJzIGFyZSBpbmhlcml0ZWQgYnkgdGhlIG5vbi1hYnN0cmFjdCBjbGFzcyAnI25hbWUnLmNvZGVJbnRlcmZhY2VDaGVja0NvbnRleHRJbnRlcmZhY2VDaGVja0NvbnRleHRjb2RlSW50ZXJuYWxQcm9ibGVtQWxyZWFkeUluaXRpYWxpemVkQXR0ZW1wdCB0byBzZXQgaW5pdGlhbGl6ZXIgb24gZmllbGQgd2l0aG91dCBpbml0aWFsaXplci5JbnRlcm5hbFByb2JsZW1BbHJlYWR5SW5pdGlhbGl6ZWRtZXNzYWdlSW50ZXJuYWxQcm9ibGVtQWxyZWFkeUluaXRpYWxpemVkY29kZUludGVybmFsUHJvYmxlbUJvZHlPbkFic3RyYWN0TWV0aG9kQXR0ZW1wdGluZyB0byBzZXQgYm9keSBvbiBhYnN0cmFjdCBtZXRob2QuSW50ZXJuYWxQcm9ibGVtQm9keU9uQWJzdHJhY3RNZXRob2RtZXNzYWdlSW50ZXJuYWxQcm9ibGVtQm9keU9uQWJzdHJhY3RNZXRob2R0ZW1wbGF0ZUludGVybmFsUHJvYmxlbUNvbnN0cnVjdG9yTm90Rm91bmRObyBjb25zdHJ1Y3RvciBuYW1lZCAnI25hbWUnIGluICcjdXJpJy5jb2RlSW50ZXJuYWxQcm9ibGVtQ29uc3RydWN0b3JOb3RGb3VuZEludGVybmFsUHJvYmxlbUNvbnN0cnVjdG9yTm90Rm91bmR0ZW1wbGF0ZUludGVybmFsUHJvYmxlbUNvbnRleHRTZXZlcml0eU5vbi1jb250ZXh0IG1lc3NhZ2UgaGFzIGNvbnRleHQgc2V2ZXJpdHk6ICNzdHJpbmdjb2RlSW50ZXJuYWxQcm9ibGVtQ29udGV4dFNldmVyaXR5SW50ZXJuYWxQcm9ibGVtQ29udGV4dFNldmVyaXR5dGVtcGxhdGVJbnRlcm5hbFByb2JsZW1EZWJ1Z0Fib3J0Q29tcGlsYXRpb24gYWJvcnRlZCBkdWUgdG8gZmF0YWwgJyNuYW1lJyBhdDoKI3N0cmluZ2NvZGVJbnRlcm5hbFByb2JsZW1EZWJ1Z0Fib3J0SW50ZXJuYWxQcm9ibGVtRGVidWdBYm9ydGNvZGVJbnRlcm5hbFByb2JsZW1FeHRlbmRpbmdVbm1vZGlmaWFibGVTY29wZUNhbid0IGV4dGVuZCBhbiB1bm1vZGlmaWFibGUgc2NvcGUuSW50ZXJuYWxQcm9ibGVtRXh0ZW5kaW5nVW5tb2RpZmlhYmxlU2NvcGVtZXNzYWdlSW50ZXJuYWxQcm9ibGVtRXh0ZW5kaW5nVW5tb2RpZmlhYmxlU2NvcGVjb2RlSW50ZXJuYWxQcm9ibGVtTGFiZWxVc2FnZUluVmFyaWFibGVzRGVjbGFyYXRpb25VbmV4cGVjdGVkIHVzYWdlIG9mIGxhYmVsIGluc2lkZSBkZWNsYXJhdGlvbiBvZiB2YXJpYWJsZXMuSW50ZXJuYWxQcm9ibGVtTGFiZWxVc2FnZUluVmFyaWFibGVzRGVjbGFyYXRpb25tZXNzYWdlSW50ZXJuYWxQcm9ibGVtTGFiZWxVc2FnZUluVmFyaWFibGVzRGVjbGFyYXRpb25jb2RlSW50ZXJuYWxQcm9ibGVtTWlzc2luZ0NvbnRleHR0ZW1wbGF0ZUludGVybmFsUHJvYmxlbU5vSW5mZXJyZWRUeXBlU3RvcmVkVGhlcmUncyBubyBpbmZlcnJlZCB0eXBlIGZvciAnI25hbWUnLmNvZGVJbnRlcm5hbFByb2JsZW1Ob0luZmVycmVkVHlwZVN0b3JlZEludGVybmFsUHJvYmxlbU5vSW5mZXJyZWRUeXBlU3RvcmVkdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZENvdWxkbid0IGZpbmQgJyNuYW1lJy5jb2RlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbnRlcm5hbFByb2JsZW1Ob3RGb3VuZHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbkNvdWxkbid0IGZpbmQgJyNuYW1lJyBpbiAnI25hbWUyJy5jb2RlSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRJbkludGVybmFsUHJvYmxlbU5vdEZvdW5kSW5jb2RlSW50ZXJuYWxQcm9ibGVtUHJldmlvdXNUb2tlbk5vdEZvdW5kQ291bGRuJ3QgZmluZCBwcmV2aW91cyB0b2tlbi5JbnRlcm5hbFByb2JsZW1QcmV2aW91c1Rva2VuTm90Rm91bmRtZXNzYWdlSW50ZXJuYWxQcm9ibGVtUHJldmlvdXNUb2tlbk5vdEZvdW5kdGVtcGxhdGVJbnRlcm5hbFByb2JsZW1Qcml2YXRlQ29uc3RydWN0b3JBY2Nlc3NDYW4ndCBhY2Nlc3MgcHJpdmF0ZSBjb25zdHJ1Y3RvciAnI25hbWUnLmNvZGVJbnRlcm5hbFByb2JsZW1Qcml2YXRlQ29uc3RydWN0b3JBY2Nlc3NJbnRlcm5hbFByb2JsZW1Qcml2YXRlQ29uc3RydWN0b3JBY2Nlc3Njb2RlSW50ZXJuYWxQcm9ibGVtUHJvdmlkZWRCb3RoQ29tcGlsZVNka0FuZFNka1N1bW1hcnl0ZW1wbGF0ZUludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHkjbmFtZS5zdGFjayBpc24ndCBlbXB0eToKICAjc3RyaW5nY29kZUludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHlJbnRlcm5hbFByb2JsZW1TdGFja05vdEVtcHR5dGVtcGxhdGVJbnRlcm5hbFByb2JsZW1TdG9yaW5nTXVsdGlwbGVJbmZlcnJlZFR5cGVzVGhlcmUncyBhbHJlYWR5IGFuIGluZmVycmVkIHR5cGUsICcjdHlwZScsIGZvciAnI25hbWUnLmNvZGVJbnRlcm5hbFByb2JsZW1TdG9yaW5nTXVsdGlwbGVJbmZlcnJlZFR5cGVzSW50ZXJuYWxQcm9ibGVtU3RvcmluZ011bHRpcGxlSW5mZXJyZWRUeXBlc3RlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5leHBlY3RlZEV4cGVjdGVkICcjc3RyaW5nJywgYnV0IGdvdCAnI3N0cmluZzInLmNvZGVJbnRlcm5hbFByb2JsZW1VbmV4cGVjdGVkSW50ZXJuYWxQcm9ibGVtVW5leHBlY3RlZHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5oYW5kbGVkVW5oYW5kbGVkICNzdHJpbmcgaW4gI3N0cmluZzIuY29kZUludGVybmFsUHJvYmxlbVVuaGFuZGxlZEludGVybmFsUHJvYmxlbVVuaGFuZGxlZHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVW5pbXBsZW1lbnRlZFVuaW1wbGVtZW50ZWQgI3N0cmluZy5jb2RlSW50ZXJuYWxQcm9ibGVtVW5pbXBsZW1lbnRlZEludGVybmFsUHJvYmxlbVVuaW1wbGVtZW50ZWRjb2RlSW50ZXJuYWxQcm9ibGVtVW5zdXBwb3J0ZWRJbnRlcm5hbFByb2JsZW1VbnN1cHBvcnRlZHRlbXBsYXRlSW50ZXJuYWxQcm9ibGVtVXJpTWlzc2luZ1NjaGVtZVRoZSBVUkkgJyN1cmknIGhhcyBubyBzY2hlbWUuY29kZUludGVybmFsUHJvYmxlbVVyaU1pc3NpbmdTY2hlbWVJbnRlcm5hbFByb2JsZW1VcmlNaXNzaW5nU2NoZW1ldGVtcGxhdGVJbnRlcm5hbFByb2JsZW1WZXJpZmljYXRpb25FcnJvclZlcmlmaWNhdGlvbiBvZiB0aGUgZ2VuZXJhdGVkIHByb2dyYW0gZmFpbGVkOgojc3RyaW5nY29kZUludGVybmFsUHJvYmxlbVZlcmlmaWNhdGlvbkVycm9ySW50ZXJuYWxQcm9ibGVtVmVyaWZpY2F0aW9uRXJyb3Jjb2RlSW50ZXJwb2xhdGlvbkluVXJpQ2FuJ3QgdXNlIHN0cmluZyBpbnRlcnBvbGF0aW9uIGluIGEgVVJJLkludGVycG9sYXRpb25JblVyaUlOVkFMSURfTElURVJBTF9JTl9DT05GSUdVUkFUSU9ObWVzc2FnZUludGVycG9sYXRpb25JblVyaXRlbXBsYXRlSW50ZXJzZWN0aW9uVHlwZUFzVHlwZUFyZ3VtZW50Q2FuJ3QgaW5mZXIgYSB0eXBlIGZvciAnI25hbWUnLCBpdCBjYW4gYmUgZWl0aGVyICcjdHlwZScgb3IgJyN0eXBlMicuVHJ5IGFkZGluZyBhIHR5cGUgYXJndW1lbnQgc2VsZWN0aW5nIG9uZSBvZiB0aGUgb3B0aW9ucy5jb2RlSW50ZXJzZWN0aW9uVHlwZUFzVHlwZUFyZ3VtZW50SW50ZXJzZWN0aW9uVHlwZUFzVHlwZUFyZ3VtZW50dGVtcGxhdGVJbnZhbGlkQXNzaWdubWVudFRyeSBjaGFuZ2luZyB0aGUgdHlwZSBvZiB0aGUgbGVmdCBoYW5kIHNpZGUsIG9yIGNhc3RpbmcgdGhlIHJpZ2h0IGhhbmQgc2lkZSB0byAnI3R5cGUyJy5jb2RlSW52YWxpZEFzc2lnbm1lbnRJbnZhbGlkQXNzaWdubWVudElOVkFMSURfQVNTSUdOTUVOVGNvZGVJbnZhbGlkQXdhaXRGb3JUaGUga2V5d29yZCAnYXdhaXQnIGlzbid0IGFsbG93ZWQgZm9yIGEgbm9ybWFsICdmb3InIHN0YXRlbWVudC5UcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQsIG9yIHVzZSBhIGZvci1lYWNoIHN0YXRlbWVudC5JbnZhbGlkQXdhaXRGb3JtZXNzYWdlSW52YWxpZEF3YWl0Rm9ydGVtcGxhdGVJbnZhbGlkQnJlYWtUYXJnZXRDYW4ndCBicmVhayB0byAnI25hbWUnLmNvZGVJbnZhbGlkQnJlYWtUYXJnZXRJbnZhbGlkQnJlYWtUYXJnZXR0ZW1wbGF0ZUludmFsaWRDYXN0RnVuY3Rpb25FeHByVGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24gdHlwZSAnI3R5cGUnIGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyN0eXBlMicuQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBmdW5jdGlvbiBleHByZXNzaW9uIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuY29kZUludmFsaWRDYXN0RnVuY3Rpb25FeHBySW52YWxpZENhc3RGdW5jdGlvbkV4cHJJTlZBTElEX0NBU1RfRlVOQ1RJT05fRVhQUnRlbXBsYXRlSW52YWxpZENhc3RMaXRlcmFsTGlzdFRoZSBsaXN0IGxpdGVyYWwgdHlwZSAnI3R5cGUnIGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyN0eXBlMicuQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBsaXN0IGxpdGVyYWwgb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC5jb2RlSW52YWxpZENhc3RMaXRlcmFsTGlzdEludmFsaWRDYXN0TGl0ZXJhbExpc3RJTlZBTElEX0NBU1RfTElURVJBTF9MSVNUdGVtcGxhdGVJbnZhbGlkQ2FzdExpdGVyYWxNYXBUaGUgbWFwIGxpdGVyYWwgdHlwZSAnI3R5cGUnIGlzbid0IG9mIGV4cGVjdGVkIHR5cGUgJyN0eXBlMicuQ2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBtYXAgbGl0ZXJhbCBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLmNvZGVJbnZhbGlkQ2FzdExpdGVyYWxNYXBJbnZhbGlkQ2FzdExpdGVyYWxNYXBJTlZBTElEX0NBU1RfTElURVJBTF9NQVB0ZW1wbGF0ZUludmFsaWRDYXN0TGl0ZXJhbFNldFRoZSBzZXQgbGl0ZXJhbCB0eXBlICcjdHlwZScgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy5DaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIHNldCBsaXRlcmFsIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuY29kZUludmFsaWRDYXN0TGl0ZXJhbFNldEludmFsaWRDYXN0TGl0ZXJhbFNldElOVkFMSURfQ0FTVF9MSVRFUkFMX1NFVHRlbXBsYXRlSW52YWxpZENhc3RMb2NhbEZ1bmN0aW9uVGhlIGxvY2FsIGZ1bmN0aW9uIGhhcyB0eXBlICcjdHlwZScgdGhhdCBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgZnVuY3Rpb24gb3IgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQgaXMgdXNlZC5jb2RlSW52YWxpZENhc3RMb2NhbEZ1bmN0aW9uSW52YWxpZENhc3RMb2NhbEZ1bmN0aW9uSU5WQUxJRF9DQVNUX0ZVTkNUSU9OdGVtcGxhdGVJbnZhbGlkQ2FzdE5ld0V4cHJUaGUgY29uc3RydWN0b3IgcmV0dXJucyB0eXBlICcjdHlwZScgdGhhdCBpc24ndCBvZiBleHBlY3RlZCB0eXBlICcjdHlwZTInLkNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgb2JqZWN0IGJlaW5nIGNvbnN0cnVjdGVkIG9yIHRoZSBjb250ZXh0IGluIHdoaWNoIGl0IGlzIHVzZWQuY29kZUludmFsaWRDYXN0TmV3RXhwckludmFsaWRDYXN0TmV3RXhwcklOVkFMSURfQ0FTVF9ORVdfRVhQUnRlbXBsYXRlSW52YWxpZENhc3RTdGF0aWNNZXRob2RUaGUgc3RhdGljIG1ldGhvZCBoYXMgdHlwZSAnI3R5cGUnIHRoYXQgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy5DaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIG1ldGhvZCBvciB0aGUgY29udGV4dCBpbiB3aGljaCBpdCBpcyB1c2VkLmNvZGVJbnZhbGlkQ2FzdFN0YXRpY01ldGhvZEludmFsaWRDYXN0U3RhdGljTWV0aG9kSU5WQUxJRF9DQVNUX01FVEhPRHRlbXBsYXRlSW52YWxpZENhc3RUb3BMZXZlbEZ1bmN0aW9uVGhlIHRvcCBsZXZlbCBmdW5jdGlvbiBoYXMgdHlwZSAnI3R5cGUnIHRoYXQgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnI3R5cGUyJy5jb2RlSW52YWxpZENhc3RUb3BMZXZlbEZ1bmN0aW9uSW52YWxpZENhc3RUb3BMZXZlbEZ1bmN0aW9uY29kZUludmFsaWRDYXRjaEFyZ3VtZW50c0ludmFsaWQgY2F0Y2ggYXJndW1lbnRzLkludmFsaWRDYXRjaEFyZ3VtZW50c0lOVkFMSURfQ0FUQ0hfQVJHVU1FTlRTbWVzc2FnZUludmFsaWRDYXRjaEFyZ3VtZW50c2NvZGVJbnZhbGlkQ29kZVBvaW50VGhlIGVzY2FwZSBzZXF1ZW5jZSBzdGFydGluZyB3aXRoICdcdScgaXNuJ3QgYSB2YWxpZCBjb2RlIHBvaW50LkludmFsaWRDb2RlUG9pbnRJTlZBTElEX0NPREVfUE9JTlRtZXNzYWdlSW52YWxpZENvZGVQb2ludHRlbXBsYXRlSW52YWxpZENvbnRpbnVlVGFyZ2V0Q2FuJ3QgY29udGludWUgYXQgJyNuYW1lJy5jb2RlSW52YWxpZENvbnRpbnVlVGFyZ2V0SW52YWxpZENvbnRpbnVlVGFyZ2V0Y29kZUludmFsaWRIZXhFc2NhcGVBbiBlc2NhcGUgc2VxdWVuY2Ugc3RhcnRpbmcgd2l0aCAnXHgnIG11c3QgYmUgZm9sbG93ZWQgYnkgMiBoZXhhZGVjaW1hbCBkaWdpdHMuSW52YWxpZEhleEVzY2FwZW1lc3NhZ2VJbnZhbGlkSGV4RXNjYXBlY29kZUludmFsaWRJbml0aWFsaXplck5vdCBhIHZhbGlkIGluaXRpYWxpemVyLlRvIGluaXRpYWxpemUgYSBmaWVsZCwgdXNlIHRoZSBzeW50YXggJ25hbWUgPSB2YWx1ZScubWVzc2FnZUludmFsaWRJbml0aWFsaXplcmNvZGVJbnZhbGlkSW5saW5lRnVuY3Rpb25UeXBlSW5saW5lIGZ1bmN0aW9uIHR5cGVzIGNhbm5vdCBiZSB1c2VkIGZvciBwYXJhbWV0ZXJzIGluIGEgZ2VuZXJpYyBmdW5jdGlvbiB0eXBlLlRyeSBjaGFuZ2luZyB0aGUgaW5saW5lIGZ1bmN0aW9uIHR5cGUgKGFzIGluICdpbnQgZigpJykgdG8gYSBwcmVmaXhlZCBmdW5jdGlvbiB0eXBlIHVzaW5nIHRoZSBgRnVuY3Rpb25gIGtleXdvcmQgKGFzIGluICdpbnQgRnVuY3Rpb24oKSBmJykuSW52YWxpZElubGluZUZ1bmN0aW9uVHlwZUlOVkFMSURfSU5MSU5FX0ZVTkNUSU9OX1RZUEVtZXNzYWdlSW52YWxpZElubGluZUZ1bmN0aW9uVHlwZXRlbXBsYXRlSW52YWxpZE9wZXJhdG9yVGhlIHN0cmluZyAnI2xleGVtZScgaXNuJ3QgYSB1c2VyLWRlZmluYWJsZSBvcGVyYXRvci5jb2RlSW52YWxpZE9wZXJhdG9ySW52YWxpZE9wZXJhdG9ydGVtcGxhdGVJbnZhbGlkUGFja2FnZVVyaUludmFsaWQgcGFja2FnZSBVUkkgJyN1cmknOgogICNzdHJpbmcuY29kZUludmFsaWRQYWNrYWdlVXJpSW52YWxpZFBhY2thZ2VVcmljb2RlSW52YWxpZFN1cGVySW5Jbml0aWFsaXplckNhbiBvbmx5IHVzZSAnc3VwZXInIGluIGFuIGluaXRpYWxpemVyIGZvciBjYWxsaW5nIHRoZSBzdXBlcmNsYXNzIGNvbnN0cnVjdG9yIChlLmcuICdzdXBlcigpJyBvciAnc3VwZXIubmFtZWRDb25zdHJ1Y3RvcigpJylJbnZhbGlkU3VwZXJJbkluaXRpYWxpemVybWVzc2FnZUludmFsaWRTdXBlckluSW5pdGlhbGl6ZXJjb2RlSW52YWxpZFN5bmNNb2RpZmllckludmFsaWQgbW9kaWZpZXIgJ3N5bmMnLlRyeSByZXBsYWNpbmcgJ3N5bmMnIHdpdGggJ3N5bmMqJy5JbnZhbGlkU3luY01vZGlmaWVyTUlTU0lOR19TVEFSX0FGVEVSX1NZTkNtZXNzYWdlSW52YWxpZFN5bmNNb2RpZmllcmNvZGVJbnZhbGlkVGhpc0luSW5pdGlhbGl6ZXJDYW4gb25seSB1c2UgJ3RoaXMnIGluIGFuIGluaXRpYWxpemVyIGZvciBmaWVsZCBpbml0aWFsaXphdGlvbiAoZS5nLiAndGhpcy54ID0gc29tZXRoaW5nJykgYW5kIGNvbnN0cnVjdG9yIHJlZGlyZWN0aW9uIChlLmcuICd0aGlzKCknIG9yICd0aGlzLm5hbWVkQ29uc3RydWN0b3IoKSlJbnZhbGlkVGhpc0luSW5pdGlhbGl6ZXJtZXNzYWdlSW52YWxpZFRoaXNJbkluaXRpYWxpemVyY29kZUludmFsaWRVbmljb2RlRXNjYXBlQW4gZXNjYXBlIHNlcXVlbmNlIHN0YXJ0aW5nIHdpdGggJ1x1JyBtdXN0IGJlIGZvbGxvd2VkIGJ5IDQgaGV4YWRlY2ltYWwgZGlnaXRzIG9yIGZyb20gMSB0byA2IGRpZ2l0cyBiZXR3ZWVuICd7JyBhbmQgJ30nLkludmFsaWRVbmljb2RlRXNjYXBlbWVzc2FnZUludmFsaWRVbmljb2RlRXNjYXBlY29kZUludmFsaWRVc2VPZk51bGxBd2FyZUFjY2Vzc0Nhbm5vdCB1c2UgJz8uJyBoZXJlLlRyeSB1c2luZyAnLicuSW52YWxpZFVzZU9mTnVsbEF3YXJlQWNjZXNzSU5WQUxJRF9VU0VfT0ZfTlVMTF9BV0FSRV9BQ0NFU1NtZXNzYWdlSW52YWxpZFVzZU9mTnVsbEF3YXJlQWNjZXNzY29kZUludmFsaWRWb2lkVHlwZSAndm9pZCcgY2FuJ3QgYmUgdXNlZCBoZXJlIGJlY2F1c2UgaXQgaXNuJ3QgYSByZXR1cm4gdHlwZS5UcnkgcmVtb3ZpbmcgJ3ZvaWQnIGtleXdvcmQgb3IgcmVwbGFjZSBpdCB3aXRoICd2YXInLCAnZmluYWwnLCBvciBhIHR5cGUuSW52YWxpZFZvaWRtZXNzYWdlSW52YWxpZFZvaWR0ZW1wbGF0ZUludm9rZU5vbkZ1bmN0aW9uJyNuYW1lJyBpc24ndCBhIGZ1bmN0aW9uIG9yIG1ldGhvZCBhbmQgY2FuJ3QgYmUgaW52b2tlZC5jb2RlSW52b2tlTm9uRnVuY3Rpb25JbnZva2VOb25GdW5jdGlvbklOVk9DQVRJT05fT0ZfTk9OX0ZVTkNUSU9OdGVtcGxhdGVMYWJlbE5vdEZvdW5kQ2FuJ3QgZmluZCBsYWJlbCAnI25hbWUnLlRyeSBkZWZpbmluZyB0aGUgbGFiZWwsIG9yIGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gbWF0Y2ggYW4gZXhpc3RpbmcgbGFiZWwuY29kZUxhYmVsTm90Rm91bmRMYWJlbE5vdEZvdW5kY29kZUxpYnJhcnlEaXJlY3RpdmVOb3RGaXJzdFRoZSBsaWJyYXJ5IGRpcmVjdGl2ZSBtdXN0IGFwcGVhciBiZWZvcmUgYWxsIG90aGVyIGRpcmVjdGl2ZXMuVHJ5IG1vdmluZyB0aGUgbGlicmFyeSBkaXJlY3RpdmUgYmVmb3JlIGFueSBvdGhlciBkaXJlY3RpdmVzLkxpYnJhcnlEaXJlY3RpdmVOb3RGaXJzdG1lc3NhZ2VMaWJyYXJ5RGlyZWN0aXZlTm90Rmlyc3Rjb2RlTGlzdExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50c0xpc3QgbGl0ZXJhbCByZXF1aXJlcyBleGFjdGx5IG9uZSB0eXBlIGFyZ3VtZW50Lkxpc3RMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHNFWFBFQ1RFRF9PTkVfTElTVF9UWVBFX0FSR1VNRU5UU21lc3NhZ2VMaXN0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzdGVtcGxhdGVMb2FkTGlicmFyeUhpZGVzTWVtYmVyVGhlIGxpYnJhcnkgJyN1cmknIGRlZmluZXMgYSB0b3AtbGV2ZWwgbWVtYmVyIG5hbWVkICdsb2FkTGlicmFyeScuIFRoaXMgbWVtYmVyIGlzIGhpZGRlbiBieSB0aGUgc3BlY2lhbCBtZW1iZXIgJ2xvYWRMaWJyYXJ5JyB0aGF0IHRoZSBsYW5ndWFnZSBhZGRzIHRvIHN1cHBvcnQgZGVmZXJyZWQgbG9hZGluZy5UcnkgdG8gcmVuYW1lIG9yIGhpZGUgdGhlIG1lbWJlci5jb2RlTG9hZExpYnJhcnlIaWRlc01lbWJlckxvYWRMaWJyYXJ5SGlkZXNNZW1iZXJjb2RlTG9hZExpYnJhcnlUYWtlc05vQXJndW1lbnRzJ2xvYWRMaWJyYXJ5JyB0YWtlcyBubyBhcmd1bWVudHMuTG9hZExpYnJhcnlUYWtlc05vQXJndW1lbnRzTE9BRF9MSUJSQVJZX1RBS0VTX05PX0FSR1VNRU5UU21lc3NhZ2VMb2FkTGlicmFyeVRha2VzTm9Bcmd1bWVudHN0ZW1wbGF0ZUxvY2FsRGVmaW5pdGlvbkhpZGVzRXhwb3J0TG9jYWwgZGVmaW5pdGlvbiBvZiAnI25hbWUnIGhpZGVzIGV4cG9ydCBmcm9tICcjdXJpJy5jb2RlTG9jYWxEZWZpbml0aW9uSGlkZXNFeHBvcnRMb2NhbERlZmluaXRpb25IaWRlc0V4cG9ydHRlbXBsYXRlTG9jYWxEZWZpbml0aW9uSGlkZXNJbXBvcnRMb2NhbCBkZWZpbml0aW9uIG9mICcjbmFtZScgaGlkZXMgaW1wb3J0IGZyb20gJyN1cmknLmNvZGVMb2NhbERlZmluaXRpb25IaWRlc0ltcG9ydExvY2FsRGVmaW5pdGlvbkhpZGVzSW1wb3J0Y29kZU1hcExpdGVyYWxUeXBlQXJndW1lbnRNaXNtYXRjaEEgbWFwIGxpdGVyYWwgcmVxdWlyZXMgZXhhY3RseSB0d28gdHlwZSBhcmd1bWVudHMuTWFwTGl0ZXJhbFR5cGVBcmd1bWVudE1pc21hdGNoRVhQRUNURURfVFdPX01BUF9UWVBFX0FSR1VNRU5UU21lc3NhZ2VNYXBMaXRlcmFsVHlwZUFyZ3VtZW50TWlzbWF0Y2hjb2RlTWVtYmVyV2l0aFNhbWVOYW1lQXNDbGFzc0EgY2xhc3MgbWVtYmVyIGNhbid0IGhhdmUgdGhlIHNhbWUgbmFtZSBhcyB0aGUgZW5jbG9zaW5nIGNsYXNzLk1lbWJlcldpdGhTYW1lTmFtZUFzQ2xhc3NtZXNzYWdlTWVtYmVyV2l0aFNhbWVOYW1lQXNDbGFzc2NvZGVNZXRhZGF0YVR5cGVBcmd1bWVudHNBbiBhbm5vdGF0aW9uIChtZXRhZGF0YSkgY2FuJ3QgdXNlIHR5cGUgYXJndW1lbnRzLk1ldGFkYXRhVHlwZUFyZ3VtZW50c0FOTk9UQVRJT05fV0lUSF9UWVBFX0FSR1VNRU5UU21lc3NhZ2VNZXRhZGF0YVR5cGVBcmd1bWVudHN0ZW1wbGF0ZU1ldGhvZE5vdEZvdW5kTWV0aG9kIG5vdCBmb3VuZDogJyNuYW1lJy5jb2RlTWV0aG9kTm90Rm91bmRNZXRob2ROb3RGb3VuZFVOREVGSU5FRF9NRVRIT0Rjb2RlTWlzc2luZ0FyZ3VtZW50TGlzdENvbnN0cnVjdG9yIGludm9jYXRpb25zIG11c3QgaGF2ZSBhbiBhcmd1bWVudCBsaXN0Lk1pc3NpbmdBcmd1bWVudExpc3RtZXNzYWdlTWlzc2luZ0FyZ3VtZW50TGlzdGNvZGVNaXNzaW5nQXNzaWduYWJsZVNlbGVjdG9yTWlzc2luZyBzZWxlY3RvciBzdWNoIGFzICcuPGlkZW50aWZpZXI+JyBvciAnWzBdJy5UcnkgYWRkaW5nIGEgc2VsZWN0b3IuTWlzc2luZ0Fzc2lnbmFibGVTZWxlY3Rvcm1lc3NhZ2VNaXNzaW5nQXNzaWduYWJsZVNlbGVjdG9yY29kZU1pc3NpbmdBc3NpZ25tZW50SW5Jbml0aWFsaXplckV4cGVjdGVkIGFuIGFzc2lnbm1lbnQgYWZ0ZXIgdGhlIGZpZWxkIG5hbWUuTWlzc2luZ0Fzc2lnbm1lbnRJbkluaXRpYWxpemVybWVzc2FnZU1pc3NpbmdBc3NpZ25tZW50SW5Jbml0aWFsaXplcmNvZGVNaXNzaW5nQ29uc3RGaW5hbFZhck9yVHlwZVZhcmlhYmxlcyBtdXN0IGJlIGRlY2xhcmVkIHVzaW5nIHRoZSBrZXl3b3JkcyAnY29uc3QnLCAnZmluYWwnLCAndmFyJyBvciBhIHR5cGUgbmFtZS5UcnkgYWRkaW5nIHRoZSBuYW1lIG9mIHRoZSB0eXBlIG9mIHRoZSB2YXJpYWJsZSBvciB0aGUga2V5d29yZCAndmFyJy5NaXNzaW5nQ29uc3RGaW5hbFZhck9yVHlwZW1lc3NhZ2VNaXNzaW5nQ29uc3RGaW5hbFZhck9yVHlwZXRlbXBsYXRlTWlzc2luZ0V4cGxpY2l0VHlwZUFyZ3VtZW50c05vIHR5cGUgYXJndW1lbnRzIHByb3ZpZGVkLCAjY291bnQgcG9zc2libGUuY29kZU1pc3NpbmdFeHBsaWNpdFR5cGVBcmd1bWVudHNNaXNzaW5nRXhwbGljaXRUeXBlQXJndW1lbnRzY29kZU1pc3NpbmdFeHBvbmVudE51bWJlcnMgaW4gZXhwb25lbnRpYWwgbm90YXRpb24gc2hvdWxkIGFsd2F5cyBjb250YWluIGFuIGV4cG9uZW50IChhbiBpbnRlZ2VyIG51bWJlciB3aXRoIGFuIG9wdGlvbmFsIHNpZ24pLk1ha2Ugc3VyZSB0aGVyZSBpcyBhbiBleHBvbmVudCwgYW5kIHJlbW92ZSBhbnkgd2hpdGVzcGFjZSBiZWZvcmUgaXQuTWlzc2luZ0V4cG9uZW50TUlTU0lOR19ESUdJVG1lc3NhZ2VNaXNzaW5nRXhwb25lbnRjb2RlTWlzc2luZ0V4cHJlc3Npb25JblRocm93TWlzc2luZyBleHByZXNzaW9uIGFmdGVyICd0aHJvdycuQWRkIGFuIGV4cHJlc3Npb24gYWZ0ZXIgJ3Rocm93JyBvciB1c2UgJ3JldGhyb3cnIHRvIHRocm93IGEgY2F1Z2h0IGV4Y2VwdGlvbk1pc3NpbmdFeHByZXNzaW9uSW5UaHJvd21lc3NhZ2VNaXNzaW5nRXhwcmVzc2lvbkluVGhyb3djb2RlTWlzc2luZ0Z1bmN0aW9uUGFyYW1ldGVyc0EgZnVuY3Rpb24gZGVjbGFyYXRpb24gbmVlZHMgYW4gZXhwbGljaXQgbGlzdCBvZiBwYXJhbWV0ZXJzLlRyeSBhZGRpbmcgYSBwYXJhbWV0ZXIgbGlzdCB0byB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24uTWlzc2luZ0Z1bmN0aW9uUGFyYW1ldGVyc01JU1NJTkdfRlVOQ1RJT05fUEFSQU1FVEVSU21lc3NhZ2VNaXNzaW5nRnVuY3Rpb25QYXJhbWV0ZXJzdGVtcGxhdGVNaXNzaW5nSW1wbGVtZW50YXRpb25DYXVzZScjbmFtZScgaXMgZGVmaW5lZCBoZXJlLmNvZGVNaXNzaW5nSW1wbGVtZW50YXRpb25DYXVzZU1pc3NpbmdJbXBsZW1lbnRhdGlvbkNhdXNldGVtcGxhdGVNaXNzaW5nSW1wbGVtZW50YXRpb25Ob3RBYnN0cmFjdFRoZSBub24tYWJzdHJhY3QgY2xhc3MgJyNuYW1lJyBpcyBtaXNzaW5nIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlc2UgbWVtYmVyczoKI25hbWVzVHJ5IHRvIGVpdGhlcgogLSBwcm92aWRlIGFuIGltcGxlbWVudGF0aW9uLAogLSBpbmhlcml0IGFuIGltcGxlbWVudGF0aW9uIGZyb20gYSBzdXBlcmNsYXNzIG9yIG1peGluLAogLSBtYXJrIHRoZSBjbGFzcyBhcyBhYnN0cmFjdCwgb3IKIC0gcHJvdmlkZSBhICdub1N1Y2hNZXRob2QnIGltcGxlbWVudGF0aW9uLgpjb2RlTWlzc2luZ0ltcGxlbWVudGF0aW9uTm90QWJzdHJhY3RNaXNzaW5nSW1wbGVtZW50YXRpb25Ob3RBYnN0cmFjdENPTkNSRVRFX0NMQVNTX1dJVEhfQUJTVFJBQ1RfTUVNQkVSY29kZU1pc3NpbmdJbnB1dGNvZGVNaXNzaW5nTWFpbmNvZGVNaXNzaW5nTWV0aG9kUGFyYW1ldGVyc0EgbWV0aG9kIGRlY2xhcmF0aW9uIG5lZWRzIGFuIGV4cGxpY2l0IGxpc3Qgb2YgcGFyYW1ldGVycy5UcnkgYWRkaW5nIGEgcGFyYW1ldGVyIGxpc3QgdG8gdGhlIG1ldGhvZCBkZWNsYXJhdGlvbi5NaXNzaW5nTWV0aG9kUGFyYW1ldGVyc01JU1NJTkdfTUVUSE9EX1BBUkFNRVRFUlNtZXNzYWdlTWlzc2luZ01ldGhvZFBhcmFtZXRlcnNjb2RlTWlzc2luZ09wZXJhdG9yS2V5d29yZE9wZXJhdG9yIGRlY2xhcmF0aW9ucyBtdXN0IGJlIHByZWNlZGVkIGJ5IHRoZSBrZXl3b3JkICdvcGVyYXRvcicuVHJ5IGFkZGluZyB0aGUga2V5d29yZCAnb3BlcmF0b3InLk1pc3NpbmdPcGVyYXRvcktleXdvcmRtZXNzYWdlTWlzc2luZ09wZXJhdG9yS2V5d29yZHRlbXBsYXRlTWlzc2luZ1BhcnRPZkNhbid0IHVzZSAnI3VyaScgYXMgYSBwYXJ0LCBiZWNhdXNlIGl0IGhhcyBubyAncGFydCBvZicgZGVjbGFyYXRpb24uY29kZU1pc3NpbmdQYXJ0T2ZNaXNzaW5nUGFydE9mUEFSVF9PRl9OT05fUEFSVGNvZGVNaXNzaW5nUHJlZml4SW5EZWZlcnJlZEltcG9ydERlZmVycmVkIGltcG9ydHMgc2hvdWxkIGhhdmUgYSBwcmVmaXguVHJ5IGFkZGluZyBhIHByZWZpeCB0byB0aGUgaW1wb3J0Lk1pc3NpbmdQcmVmaXhJbkRlZmVycmVkSW1wb3J0bWVzc2FnZU1pc3NpbmdQcmVmaXhJbkRlZmVycmVkSW1wb3J0Y29kZU1pc3NpbmdUeXBlZGVmUGFyYW1ldGVyc0EgdHlwZWRlZiBuZWVkcyBhbiBleHBsaWNpdCBsaXN0IG9mIHBhcmFtZXRlcnMuVHJ5IGFkZGluZyBhIHBhcmFtZXRlciBsaXN0IHRvIHRoZSB0eXBlZGVmLk1pc3NpbmdUeXBlZGVmUGFyYW1ldGVyc01JU1NJTkdfVFlQRURFRl9QQVJBTUVURVJTbWVzc2FnZU1pc3NpbmdUeXBlZGVmUGFyYW1ldGVyc3RlbXBsYXRlTWl4aW5BcHBsaWNhdGlvbkluY29tcGF0aWJsZVN1cGVydHlwZScjdHlwZScgZG9lc24ndCBpbXBsZW1lbnQgJyN0eXBlMicgc28gaXQgY2FuJ3QgYmUgdXNlZCB3aXRoICcjdHlwZTMnLmNvZGVNaXhpbkFwcGxpY2F0aW9uSW5jb21wYXRpYmxlU3VwZXJ0eXBlTWl4aW5BcHBsaWNhdGlvbkluY29tcGF0aWJsZVN1cGVydHlwZU1JWElOX0FQUExJQ0FUSU9OX05PVF9JTVBMRU1FTlRFRF9JTlRFUkZBQ0V0ZW1wbGF0ZU1peGluSW5mZXJlbmNlTm9NYXRjaGluZ0NsYXNzVHlwZSBwYXJhbWV0ZXJzIGNvdWxkIG5vdCBiZSBpbmZlcnJlZCBmb3IgdGhlIG1peGluICcjbmFtZScgYmVjYXVzZSAnI25hbWUyJyBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIG1peGluJ3Mgc3VwZXJ0eXBlIGNvbnN0cmFpbnQgJyN0eXBlJy5jb2RlTWl4aW5JbmZlcmVuY2VOb01hdGNoaW5nQ2xhc3NNaXhpbkluZmVyZW5jZU5vTWF0Y2hpbmdDbGFzc01JWElOX0lORkVSRU5DRV9OT19QT1NTSUJMRV9TVUJTVElUVVRJT050ZW1wbGF0ZU1vZGlmaWVyT3V0T2ZPcmRlclRoZSBtb2RpZmllciAnI3N0cmluZycgc2hvdWxkIGJlIGJlZm9yZSB0aGUgbW9kaWZpZXIgJyNzdHJpbmcyJy5UcnkgcmUtb3JkZXJpbmcgdGhlIG1vZGlmaWVycy5jb2RlTW9kaWZpZXJPdXRPZk9yZGVyTW9kaWZpZXJPdXRPZk9yZGVyY29kZU1vcmVUaGFuT25lU3VwZXJPclRoaXNJbml0aWFsaXplckNhbid0IGhhdmUgbW9yZSB0aGFuIG9uZSAnc3VwZXInIG9yICd0aGlzJyBpbml0aWFsaXplci5Nb3JlVGhhbk9uZVN1cGVyT3JUaGlzSW5pdGlhbGl6ZXJTVVBFUl9JTl9SRURJUkVDVElOR19DT05TVFJVQ1RPUm1lc3NhZ2VNb3JlVGhhbk9uZVN1cGVyT3JUaGlzSW5pdGlhbGl6ZXJjb2RlTXVsdGlwbGVFeHRlbmRzRWFjaCBjbGFzcyBkZWZpbml0aW9uIGNhbiBoYXZlIGF0IG1vc3Qgb25lIGV4dGVuZHMgY2xhdXNlLlRyeSBjaG9vc2luZyBvbmUgc3VwZXJjbGFzcyBhbmQgZGVmaW5lIHlvdXIgY2xhc3MgdG8gaW1wbGVtZW50IChvciBtaXggaW4pIHRoZSBvdGhlcnMuTXVsdGlwbGVFeHRlbmRzbWVzc2FnZU11bHRpcGxlRXh0ZW5kc2NvZGVNdWx0aXBsZUltcGxlbWVudHNFYWNoIGNsYXNzIGRlZmluaXRpb24gY2FuIGhhdmUgYXQgbW9zdCBvbmUgaW1wbGVtZW50cyBjbGF1c2UuVHJ5IGNvbWJpbmluZyBhbGwgb2YgdGhlIGltcGxlbWVudHMgY2xhdXNlcyBpbnRvIGEgc2luZ2xlIGNsYXVzZS5NdWx0aXBsZUltcGxlbWVudHNNVUxUSVBMRV9JTVBMRU1FTlRTX0NMQVVTRVNtZXNzYWdlTXVsdGlwbGVJbXBsZW1lbnRzY29kZU11bHRpcGxlTGlicmFyeURpcmVjdGl2ZXNPbmx5IG9uZSBsaWJyYXJ5IGRpcmVjdGl2ZSBtYXkgYmUgZGVjbGFyZWQgaW4gYSBmaWxlLlRyeSByZW1vdmluZyBhbGwgYnV0IG9uZSBvZiB0aGUgbGlicmFyeSBkaXJlY3RpdmVzLk11bHRpcGxlTGlicmFyeURpcmVjdGl2ZXNtZXNzYWdlTXVsdGlwbGVMaWJyYXJ5RGlyZWN0aXZlc2NvZGVNdWx0aXBsZU9uQ2xhdXNlc0VhY2ggbWl4aW4gZGVmaW5pdGlvbiBjYW4gaGF2ZSBhdCBtb3N0IG9uZSBvbiBjbGF1c2UuVHJ5IGNvbWJpbmluZyBhbGwgb2YgdGhlIG9uIGNsYXVzZXMgaW50byBhIHNpbmdsZSBjbGF1c2UuTXVsdGlwbGVPbkNsYXVzZXNtZXNzYWdlTXVsdGlwbGVPbkNsYXVzZXNjb2RlTXVsdGlwbGVXaXRoRWFjaCBjbGFzcyBkZWZpbml0aW9uIGNhbiBoYXZlIGF0IG1vc3Qgb25lIHdpdGggY2xhdXNlLlRyeSBjb21iaW5pbmcgYWxsIG9mIHRoZSB3aXRoIGNsYXVzZXMgaW50byBhIHNpbmdsZSBjbGF1c2UuTXVsdGlwbGVXaXRobWVzc2FnZU11bHRpcGxlV2l0aGNvZGVOYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbkEgZnVuY3Rpb24gZXhwcmVzc2lvbiBjYW4ndCBoYXZlIGEgbmFtZS5OYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbk5BTUVEX0ZVTkNUSU9OX0VYUFJFU1NJT05tZXNzYWdlTmFtZWRGdW5jdGlvbkV4cHJlc3Npb250ZW1wbGF0ZU5hbWVkTWl4aW5PdmVycmlkZUNvbnRleHRPdmVycmlkZSB3YXMgaW50cm9kdWNlZCBpbiB0aGUgbWl4aW4gYXBwbGljYXRpb24gY2xhc3MgJyNuYW1lJy5jb2RlTmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dE5hbWVkTWl4aW5PdmVycmlkZUNvbnRleHRjb2RlTmF0aXZlQ2xhdXNlU2hvdWxkQmVBbm5vdGF0aW9uTmF0aXZlIGNsYXVzZSBpbiB0aGlzIGZvcm0gaXMgZGVwcmVjYXRlZC5UcnkgcmVtb3ZpbmcgdGhpcyBuYXRpdmUgY2xhdXNlIGFuZCBhZGRpbmcgQG5hdGl2ZSgpIG9yIEBuYXRpdmUoJ25hdGl2ZS1uYW1lJykgYmVmb3JlIHRoZSBkZWNsYXJhdGlvbi5OYXRpdmVDbGF1c2VTaG91bGRCZUFubm90YXRpb25tZXNzYWdlTmF0aXZlQ2xhdXNlU2hvdWxkQmVBbm5vdGF0aW9udGVtcGxhdGVOb0Zvcm1hbHNBIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGZvcm1hbCBwYXJhbWV0ZXJzLlRyeSBhZGRpbmcgJygpJyBhZnRlciAnI2xleGVtZScsIG9yIGFkZCAnZ2V0JyBiZWZvcmUgJyNsZXhlbWUnIHRvIGRlY2xhcmUgYSBnZXR0ZXIuY29kZU5vRm9ybWFsc05vRm9ybWFsc3RlbXBsYXRlTm9TdWNoTmFtZWRQYXJhbWV0ZXJObyBuYW1lZCBwYXJhbWV0ZXIgd2l0aCB0aGUgbmFtZSAnI25hbWUnLmNvZGVOb1N1Y2hOYW1lZFBhcmFtZXRlck5vU3VjaE5hbWVkUGFyYW1ldGVyVU5ERUZJTkVEX05BTUVEX1BBUkFNRVRFUmNvZGVOb1VubmFtZWRDb25zdHJ1Y3RvckluT2JqZWN0J09iamVjdCcgaGFzIG5vIHVubmFtZWQgY29uc3RydWN0b3IuTm9Vbm5hbWVkQ29uc3RydWN0b3JJbk9iamVjdG1lc3NhZ2VOb1VubmFtZWRDb25zdHJ1Y3RvckluT2JqZWN0dGVtcGxhdGVOb25Bc2NpaUlkZW50aWZpZXJUaGUgbm9uLUFTQ0lJIGNoYXJhY3RlciAnI2NoYXJhY3RlcicgKCN1bmljb2RlKSBjYW4ndCBiZSB1c2VkIGluIGlkZW50aWZpZXJzLCBvbmx5IGluIHN0cmluZ3MgYW5kIGNvbW1lbnRzLlRyeSB1c2luZyBhbiBVUy1BU0NJSSBsZXR0ZXIsIGEgZGlnaXQsICdfJyAoYW4gdW5kZXJzY29yZSksIG9yICckJyAoYSBkb2xsYXIgc2lnbikuY29kZU5vbkFzY2lpSWRlbnRpZmllck5vbkFzY2lpSWRlbnRpZmllcnRlbXBsYXRlTm9uQXNjaWlXaGl0ZXNwYWNlVGhlIG5vbi1BU0NJSSBzcGFjZSBjaGFyYWN0ZXIgI3VuaWNvZGUgY2FuIG9ubHkgYmUgdXNlZCBpbiBzdHJpbmdzIGFuZCBjb21tZW50cy5jb2RlTm9uQXNjaWlXaGl0ZXNwYWNlTm9uQXNjaWlXaGl0ZXNwYWNlY29kZU5vbkNvbnN0Q29uc3RydWN0b3JDYW5ub3QgaW52b2tlIGEgbm9uLSdjb25zdCcgY29uc3RydWN0b3Igd2hlcmUgYSBjb25zdCBleHByZXNzaW9uIGlzIGV4cGVjdGVkLlRyeSB1c2luZyBhIGNvbnN0cnVjdG9yIG9yIGZhY3RvcnkgdGhhdCBpcyAnY29uc3QnLk5vbkNvbnN0Q29uc3RydWN0b3JtZXNzYWdlTm9uQ29uc3RDb25zdHJ1Y3RvcmNvZGVOb25Db25zdEZhY3RvcnlDYW5ub3QgaW52b2tlIGEgbm9uLSdjb25zdCcgZmFjdG9yeSB3aGVyZSBhIGNvbnN0IGV4cHJlc3Npb24gaXMgZXhwZWN0ZWQuTm9uQ29uc3RGYWN0b3J5bWVzc2FnZU5vbkNvbnN0RmFjdG9yeWNvZGVOb25JbnN0YW5jZVR5cGVWYXJpYWJsZVVzZUNhbiBvbmx5IHVzZSB0eXBlIHZhcmlhYmxlcyBpbiBpbnN0YW5jZSBtZXRob2RzLk5vbkluc3RhbmNlVHlwZVZhcmlhYmxlVXNlVFlQRV9QQVJBTUVURVJfUkVGRVJFTkNFRF9CWV9TVEFUSUNtZXNzYWdlTm9uSW5zdGFuY2VUeXBlVmFyaWFibGVVc2Vjb2RlTm9uTnVsbEF3YXJlU3ByZWFkSXNOdWxsQ2FuJ3Qgc3ByZWFkIGEgdmFsdWUgd2l0aCBzdGF0aWMgdHlwZSBOdWxsLk5vbk51bGxBd2FyZVNwcmVhZElzTnVsbG1lc3NhZ2VOb25OdWxsQXdhcmVTcHJlYWRJc051bGxjb2RlTm9uUGFydE9mRGlyZWN0aXZlSW5QYXJ0VGhlIHBhcnQtb2YgZGlyZWN0aXZlIG11c3QgYmUgdGhlIG9ubHkgZGlyZWN0aXZlIGluIGEgcGFydC5UcnkgcmVtb3ZpbmcgdGhlIG90aGVyIGRpcmVjdGl2ZXMsIG9yIG1vdmluZyB0aGVtIHRvIHRoZSBsaWJyYXJ5IGZvciB3aGljaCB0aGlzIGlzIGEgcGFydC5Ob25QYXJ0T2ZEaXJlY3RpdmVJblBhcnROT05fUEFSVF9PRl9ESVJFQ1RJVkVfSU5fUEFSVG1lc3NhZ2VOb25QYXJ0T2ZEaXJlY3RpdmVJblBhcnR0ZW1wbGF0ZU5vblNpbXBsZUJvdW5kVmlhUmVmZXJlbmNlQm91bmQgb2YgdGhpcyB2YXJpYWJsZSByZWZlcmVuY2VzIHJhdyB0eXBlICcjbmFtZScuY29kZU5vblNpbXBsZUJvdW5kVmlhUmVmZXJlbmNlTm9uU2ltcGxlQm91bmRWaWFSZWZlcmVuY2V0ZW1wbGF0ZU5vblNpbXBsZUJvdW5kVmlhVmFyaWFibGVCb3VuZCBvZiB0aGlzIHZhcmlhYmxlIHJlZmVyZW5jZXMgdmFyaWFibGUgJyNuYW1lJyBmcm9tIHRoZSBzYW1lIGRlY2xhcmF0aW9uLmNvZGVOb25TaW1wbGVCb3VuZFZpYVZhcmlhYmxlTm9uU2ltcGxlQm91bmRWaWFWYXJpYWJsZWNvZGVOb3RBQ29uc3RhbnRFeHByZXNzaW9uTm90IGEgY29uc3RhbnQgZXhwcmVzc2lvbi5Ob3RBQ29uc3RhbnRFeHByZXNzaW9ubWVzc2FnZU5vdEFDb25zdGFudEV4cHJlc3Npb250ZW1wbGF0ZU5vdEFQcmVmaXhJblR5cGVBbm5vdGF0aW9uJyNuYW1lLiNuYW1lMicgY2FuJ3QgYmUgdXNlZCBhcyBhIHR5cGUgYmVjYXVzZSAnI25hbWUnIGRvZXNuJ3QgcmVmZXIgdG8gYW4gaW1wb3J0IHByZWZpeC5jb2RlTm90QVByZWZpeEluVHlwZUFubm90YXRpb25Ob3RBUHJlZml4SW5UeXBlQW5ub3RhdGlvbk5PVF9BX1RZUEV0ZW1wbGF0ZU5vdEFUeXBlJyNuYW1lJyBpc24ndCBhIHR5cGUuY29kZU5vdEFUeXBlTm90QVR5cGVjb2RlTm90QVR5cGVDb250ZXh0VGhpcyBpc24ndCBhIHR5cGUuTm90QVR5cGVDb250ZXh0bWVzc2FnZU5vdEFUeXBlQ29udGV4dGNvZGVOb3RBbkx2YWx1ZUNhbid0IGFzc2lnbiB0byB0aGlzLk5vdEFuTHZhbHVlbWVzc2FnZU5vdEFuTHZhbHVldGVtcGxhdGVOb3RCaW5hcnlPcGVyYXRvcicjbGV4ZW1lJyBpc24ndCBhIGJpbmFyeSBvcGVyYXRvci5jb2RlTm90QmluYXJ5T3BlcmF0b3JOb3RCaW5hcnlPcGVyYXRvcnRlbXBsYXRlTm90Q29uc3RhbnRFeHByZXNzaW9uI3N0cmluZyBpcyBub3QgYSBjb25zdGFudCBleHByZXNzaW9uLmNvZGVOb3RDb25zdGFudEV4cHJlc3Npb25Ob3RDb25zdGFudEV4cHJlc3Npb25jb2RlT2JqZWN0RXh0ZW5kc1RoZSBjbGFzcyAnT2JqZWN0JyBjYW4ndCBoYXZlIGEgc3VwZXJjbGFzcy5PYmplY3RFeHRlbmRzbWVzc2FnZU9iamVjdEV4dGVuZHNjb2RlT2JqZWN0SW1wbGVtZW50c1RoZSBjbGFzcyAnT2JqZWN0JyBjYW4ndCBpbXBsZW1lbnQgYW55dGhpbmcuT2JqZWN0SW1wbGVtZW50c21lc3NhZ2VPYmplY3RJbXBsZW1lbnRzY29kZU9iamVjdE1peGVzSW5UaGUgY2xhc3MgJ09iamVjdCcgY2FuJ3QgdXNlIG1peGlucy5PYmplY3RNaXhlc0lubWVzc2FnZU9iamVjdE1peGVzSW5jb2RlT25seVRyeUEgdHJ5IGJsb2NrIG11c3QgYmUgZm9sbG93ZWQgYnkgYW4gJ29uJywgJ2NhdGNoJywgb3IgJ2ZpbmFsbHknIGNsYXVzZS5UcnkgYWRkaW5nIGVpdGhlciBhIGNhdGNoIG9yIGZpbmFsbHkgY2xhdXNlLCBvciByZW1vdmUgdGhlIHRyeSBzdGF0ZW1lbnQuT25seVRyeW1lc3NhZ2VPbmx5VHJ5dGVtcGxhdGVPcGVyYXRvck1pbnVzUGFyYW1ldGVyTWlzbWF0Y2hPcGVyYXRvciAnI25hbWUnIHNob3VsZCBoYXZlIHplcm8gb3Igb25lIHBhcmFtZXRlci5XaXRoIHplcm8gcGFyYW1ldGVycywgaXQgaGFzIHRoZSBzeW50YWN0aWMgZm9ybSAnLWEnLCBmb3JtYWxseSBrbm93biBhcyAndW5hcnktJy4gV2l0aCBvbmUgcGFyYW1ldGVyLCBpdCBoYXMgdGhlIHN5bnRhY3RpYyBmb3JtICdhIC0gYicsIGZvcm1hbGx5IGtub3duIGFzICctJy5jb2RlT3BlcmF0b3JNaW51c1BhcmFtZXRlck1pc21hdGNoT3BlcmF0b3JNaW51c1BhcmFtZXRlck1pc21hdGNoV1JPTkdfTlVNQkVSX09GX1BBUkFNRVRFUlNfRk9SX09QRVJBVE9SX01JTlVTdGVtcGxhdGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoME9wZXJhdG9yICcjbmFtZScgc2hvdWxkbid0IGhhdmUgYW55IHBhcmFtZXRlcnMuY29kZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gwT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDB0ZW1wbGF0ZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gxT3BlcmF0b3IgJyNuYW1lJyBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBwYXJhbWV0ZXIuY29kZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gxT3BlcmF0b3JQYXJhbWV0ZXJNaXNtYXRjaDFXUk9OR19OVU1CRVJfT0ZfUEFSQU1FVEVSU19GT1JfT1BFUkFUT1J0ZW1wbGF0ZU9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gyT3BlcmF0b3IgJyNuYW1lJyBzaG91bGQgaGF2ZSBleGFjdGx5IHR3byBwYXJhbWV0ZXJzLmNvZGVPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMk9wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gyY29kZU9wZXJhdG9yV2l0aE9wdGlvbmFsRm9ybWFsc0FuIG9wZXJhdG9yIGNhbid0IGhhdmUgb3B0aW9uYWwgcGFyYW1ldGVycy5PcGVyYXRvcldpdGhPcHRpb25hbEZvcm1hbHNtZXNzYWdlT3BlcmF0b3JXaXRoT3B0aW9uYWxGb3JtYWxzdGVtcGxhdGVPdmVycmlkZGVuTWV0aG9kQ2F1c2VUaGlzIGlzIHRoZSBvdmVycmlkZGVuIG1ldGhvZCAoJyNuYW1lJykuY29kZU92ZXJyaWRkZW5NZXRob2RDYXVzZU92ZXJyaWRkZW5NZXRob2RDYXVzZXRlbXBsYXRlT3ZlcnJpZGVGZXdlck5hbWVkQXJndW1lbnRzVGhlIG1ldGhvZCAnI25hbWUnIGhhcyBmZXdlciBuYW1lZCBhcmd1bWVudHMgdGhhbiB0aG9zZSBvZiBvdmVycmlkZGVuIG1ldGhvZCAnI25hbWUyJy5jb2RlT3ZlcnJpZGVGZXdlck5hbWVkQXJndW1lbnRzT3ZlcnJpZGVGZXdlck5hbWVkQXJndW1lbnRzSU5WQUxJRF9PVkVSUklERV9OQU1FRHRlbXBsYXRlT3ZlcnJpZGVGZXdlclBvc2l0aW9uYWxBcmd1bWVudHNUaGUgbWV0aG9kICcjbmFtZScgaGFzIGZld2VyIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYW4gdGhvc2Ugb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJyNuYW1lMicuY29kZU92ZXJyaWRlRmV3ZXJQb3NpdGlvbmFsQXJndW1lbnRzT3ZlcnJpZGVGZXdlclBvc2l0aW9uYWxBcmd1bWVudHNJTlZBTElEX09WRVJSSURFX1BPU0lUSU9OQUx0ZW1wbGF0ZU92ZXJyaWRlTWlzbWF0Y2hOYW1lZFBhcmFtZXRlclRoZSBtZXRob2QgJyNuYW1lJyBkb2Vzbid0IGhhdmUgdGhlIG5hbWVkIHBhcmFtZXRlciAnI25hbWUyJyBvZiBvdmVycmlkZGVuIG1ldGhvZCAnI25hbWUzJy5jb2RlT3ZlcnJpZGVNaXNtYXRjaE5hbWVkUGFyYW1ldGVyT3ZlcnJpZGVNaXNtYXRjaE5hbWVkUGFyYW1ldGVydGVtcGxhdGVPdmVycmlkZU1vcmVSZXF1aXJlZEFyZ3VtZW50c1RoZSBtZXRob2QgJyNuYW1lJyBoYXMgbW9yZSByZXF1aXJlZCBhcmd1bWVudHMgdGhhbiB0aG9zZSBvZiBvdmVycmlkZGVuIG1ldGhvZCAnI25hbWUyJy5jb2RlT3ZlcnJpZGVNb3JlUmVxdWlyZWRBcmd1bWVudHNPdmVycmlkZU1vcmVSZXF1aXJlZEFyZ3VtZW50c0lOVkFMSURfT1ZFUlJJREVfUkVRVUlSRUR0ZW1wbGF0ZU92ZXJyaWRlVHlwZU1pc21hdGNoUGFyYW1ldGVyVGhlIHBhcmFtZXRlciAnI25hbWUnIG9mIHRoZSBtZXRob2QgJyNuYW1lMicgaGFzIHR5cGUgJyN0eXBlJywgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIGNvcnJlc3BvbmRpbmcgdHlwZSwgJyN0eXBlMicsIGluIHRoZSBvdmVycmlkZGVuIG1ldGhvZCwgJyNuYW1lMycuQ2hhbmdlIHRvIGEgc3VwZXJ0eXBlIG9mICcjdHlwZTInLCBvciwgZm9yIGEgY292YXJpYW50IHBhcmFtZXRlciwgYSBzdWJ0eXBlLmNvZGVPdmVycmlkZVR5cGVNaXNtYXRjaFBhcmFtZXRlck92ZXJyaWRlVHlwZU1pc21hdGNoUGFyYW1ldGVydGVtcGxhdGVPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGVUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIG1ldGhvZCAnI25hbWUnIGlzICcjdHlwZScsIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSByZXR1cm4gdHlwZSwgJyN0eXBlMicsIG9mIHRoZSBvdmVycmlkZGVuIG1ldGhvZCwgJyNuYW1lMicuQ2hhbmdlIHRvIGEgc3VidHlwZSBvZiAnI3R5cGUyJy5jb2RlT3ZlcnJpZGVUeXBlTWlzbWF0Y2hSZXR1cm5UeXBlT3ZlcnJpZGVUeXBlTWlzbWF0Y2hSZXR1cm5UeXBldGVtcGxhdGVPdmVycmlkZVR5cGVWYXJpYWJsZXNNaXNtYXRjaERlY2xhcmVkIHR5cGUgdmFyaWFibGVzIG9mICcjbmFtZScgZG9lc24ndCBtYXRjaCB0aG9zZSBvbiBvdmVycmlkZGVuIG1ldGhvZCAnI25hbWUyJy5jb2RlT3ZlcnJpZGVUeXBlVmFyaWFibGVzTWlzbWF0Y2hPdmVycmlkZVR5cGVWYXJpYWJsZXNNaXNtYXRjaElOVkFMSURfTUVUSE9EX09WRVJSSURFX1RZUEVfUEFSQU1FVEVSU3RlbXBsYXRlUGFja2FnZU5vdEZvdW5kQ291bGQgbm90IHJlc29sdmUgdGhlIHBhY2thZ2UgJyNuYW1lJyBpbiAnI3VyaScuY29kZVBhY2thZ2VOb3RGb3VuZFBhY2thZ2VOb3RGb3VuZGNvZGVQYWNrYWdlc0ZpbGVGb3JtYXRQYWNrYWdlc0ZpbGVGb3JtYXRjb2RlUGFydEV4cG9ydENhbid0IGV4cG9ydCB0aGlzIGZpbGUgYmVjYXVzZSBpdCBjb250YWlucyBhICdwYXJ0IG9mJyBkZWNsYXJhdGlvbi5QYXJ0RXhwb3J0RVhQT1JUX09GX05PTl9MSUJSQVJZbWVzc2FnZVBhcnRFeHBvcnRjb2RlUGFydEV4cG9ydENvbnRleHRUaGlzIGlzIHRoZSBmaWxlIHRoYXQgY2FuJ3QgYmUgZXhwb3J0ZWQuUGFydEV4cG9ydENvbnRleHRtZXNzYWdlUGFydEV4cG9ydENvbnRleHRjb2RlUGFydEluUGFydEEgZmlsZSB0aGF0J3MgYSBwYXJ0IG9mIGEgbGlicmFyeSBjYW4ndCBoYXZlIHBhcnRzIGl0c2VsZi5UcnkgbW92aW5nIHRoZSAncGFydCcgZGVjbGFyYXRpb24gdG8gdGhlIGNvbnRhaW5pbmcgbGlicmFyeS5QYXJ0SW5QYXJ0bWVzc2FnZVBhcnRJblBhcnRjb2RlUGFydEluUGFydExpYnJhcnlDb250ZXh0VGhpcyBpcyB0aGUgY29udGFpbmluZyBsaWJyYXJ5LlBhcnRJblBhcnRMaWJyYXJ5Q29udGV4dG1lc3NhZ2VQYXJ0SW5QYXJ0TGlicmFyeUNvbnRleHR0ZW1wbGF0ZVBhcnRPZkluTGlicmFyeUNhbid0IGltcG9ydCAnI3VyaScsIGJlY2F1c2UgaXQgaGFzIGEgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uLlRyeSByZW1vdmluZyB0aGUgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uLCBvciB1c2luZyAnI3VyaScgYXMgYSBwYXJ0LmNvZGVQYXJ0T2ZJbkxpYnJhcnlQYXJ0T2ZJbkxpYnJhcnlJTVBPUlRfT0ZfTk9OX0xJQlJBUll0ZW1wbGF0ZVBhcnRPZkxpYnJhcnlOYW1lTWlzbWF0Y2hVc2luZyAnI3VyaScgYXMgcGFydCBvZiAnI25hbWUnIGJ1dCBpdHMgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uIHNheXMgJyNuYW1lMicuY29kZVBhcnRPZkxpYnJhcnlOYW1lTWlzbWF0Y2hQYXJ0T2ZMaWJyYXJ5TmFtZU1pc21hdGNoUEFSVF9PRl9ESUZGRVJFTlRfTElCUkFSWWNvZGVQYXJ0T2ZTZWxmQSBmaWxlIGNhbid0IGJlIGEgcGFydCBvZiBpdHNlbGYuUGFydE9mU2VsZm1lc3NhZ2VQYXJ0T2ZTZWxmY29kZVBhcnRPZlR3aWNlT25seSBvbmUgcGFydC1vZiBkaXJlY3RpdmUgbWF5IGJlIGRlY2xhcmVkIGluIGEgZmlsZS5UcnkgcmVtb3ZpbmcgYWxsIGJ1dCBvbmUgb2YgdGhlIHBhcnQtb2YgZGlyZWN0aXZlcy5QYXJ0T2ZUd2ljZW1lc3NhZ2VQYXJ0T2ZUd2ljZWNvZGVQYXJ0T2ZUd29MaWJyYXJpZXNBIGZpbGUgY2FuJ3QgYmUgcGFydCBvZiBtb3JlIHRoYW4gb25lIGxpYnJhcnkuVHJ5IG1vdmluZyB0aGUgc2hhcmVkIGRlY2xhcmF0aW9ucyBpbnRvIHRoZSBsaWJyYXJpZXMsIG9yIGludG8gYSBuZXcgbGlicmFyeS5QYXJ0T2ZUd29MaWJyYXJpZXNtZXNzYWdlUGFydE9mVHdvTGlicmFyaWVzY29kZVBhcnRPZlR3b0xpYnJhcmllc0NvbnRleHRVc2VkIGFzIGEgcGFydCBpbiB0aGlzIGxpYnJhcnkuUGFydE9mVHdvTGlicmFyaWVzQ29udGV4dG1lc3NhZ2VQYXJ0T2ZUd29MaWJyYXJpZXNDb250ZXh0dGVtcGxhdGVQYXJ0T2ZVcmlNaXNtYXRjaFVzaW5nICcjdXJpJyBhcyBwYXJ0IG9mICcjdXJpMicgYnV0IGl0cyAncGFydCBvZicgZGVjbGFyYXRpb24gc2F5cyAnI3VyaTMnLmNvZGVQYXJ0T2ZVcmlNaXNtYXRjaFBhcnRPZlVyaU1pc21hdGNodGVtcGxhdGVQYXJ0T2ZVc2VVcmlVc2luZyAnI3VyaScgYXMgcGFydCBvZiAnI3VyaTInIGJ1dCBpdHMgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uIHNheXMgJyNuYW1lJy5UcnkgY2hhbmdpbmcgdGhlICdwYXJ0IG9mJyBkZWNsYXJhdGlvbiB0byB1c2UgYSByZWxhdGl2ZSBmaWxlIG5hbWUuY29kZVBhcnRPZlVzZVVyaVBhcnRPZlVzZVVyaVBBUlRfT0ZfVU5OQU1FRF9MSUJSQVJZY29kZVBhcnRPcnBoYW5UaGlzIHBhcnQgZG9lc24ndCBoYXZlIGEgY29udGFpbmluZyBsaWJyYXJ5LlRyeSByZW1vdmluZyB0aGUgJ3BhcnQgb2YnIGRlY2xhcmF0aW9uLlBhcnRPcnBoYW5tZXNzYWdlUGFydE9ycGhhbnRlbXBsYXRlUGFydFR3aWNlQ2FuJ3QgdXNlICcjdXJpJyBhcyBhIHBhcnQgbW9yZSB0aGFuIG9uY2UuY29kZVBhcnRUd2ljZVBhcnRUd2ljZURVUExJQ0FURV9QQVJUY29kZVBhdGNoQ2xhc3NPcmlnaW5UaGlzIGlzIHRoZSBvcmlnaW4gY2xhc3MuUGF0Y2hDbGFzc09yaWdpbm1lc3NhZ2VQYXRjaENsYXNzT3JpZ2luY29kZVBhdGNoQ2xhc3NUeXBlVmFyaWFibGVzTWlzbWF0Y2hBIHBhdGNoIGNsYXNzIG11c3QgaGF2ZSB0aGUgc2FtZSBudW1iZXIgb2YgdHlwZSB2YXJpYWJsZXMgYXMgaXRzIG9yaWdpbiBjbGFzcy5QYXRjaENsYXNzVHlwZVZhcmlhYmxlc01pc21hdGNobWVzc2FnZVBhdGNoQ2xhc3NUeXBlVmFyaWFibGVzTWlzbWF0Y2hjb2RlUGF0Y2hEZWNsYXJhdGlvbk1pc21hdGNoVGhpcyBwYXRjaCBkb2Vzbid0IG1hdGNoIG9yaWdpbiBkZWNsYXJhdGlvbi5QYXRjaERlY2xhcmF0aW9uTWlzbWF0Y2htZXNzYWdlUGF0Y2hEZWNsYXJhdGlvbk1pc21hdGNoY29kZVBhdGNoRGVjbGFyYXRpb25PcmlnaW5UaGlzIGlzIHRoZSBvcmlnaW4gZGVjbGFyYXRpb24uUGF0Y2hEZWNsYXJhdGlvbk9yaWdpbm1lc3NhZ2VQYXRjaERlY2xhcmF0aW9uT3JpZ2ludGVtcGxhdGVQYXRjaEluamVjdGlvbkZhaWxlZENhbid0IGluamVjdCAnI25hbWUnIGludG8gJyN1cmknLlRyeSBhZGRpbmcgJ0BwYXRjaCcuY29kZVBhdGNoSW5qZWN0aW9uRmFpbGVkUGF0Y2hJbmplY3Rpb25GYWlsZWRjb2RlUGF0Y2hOb25FeHRlcm5hbENhbid0IGFwcGx5IHRoaXMgcGF0Y2ggYXMgaXRzIG9yaWdpbiBkZWNsYXJhdGlvbiBpc24ndCBleHRlcm5hbC5UcnkgYWRkaW5nICdleHRlcm5hbCcgdG8gdGhlIG9yaWdpbiBkZWNsYXJhdGlvbi5QYXRjaE5vbkV4dGVybmFsbWVzc2FnZVBhdGNoTm9uRXh0ZXJuYWxjb2RlUGxhdGZvcm1Qcml2YXRlTGlicmFyeUFjY2Vzc0Nhbid0IGFjY2VzcyBwbGF0Zm9ybSBwcml2YXRlIGxpYnJhcnkuUGxhdGZvcm1Qcml2YXRlTGlicmFyeUFjY2Vzc0lNUE9SVF9JTlRFUk5BTF9MSUJSQVJZbWVzc2FnZVBsYXRmb3JtUHJpdmF0ZUxpYnJhcnlBY2Nlc3Njb2RlUG9zaXRpb25hbEFmdGVyTmFtZWRBcmd1bWVudFBsYWNlIHBvc2l0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBuYW1lZCBhcmd1bWVudHMuVHJ5IG1vdmluZyB0aGUgcG9zaXRpb25hbCBhcmd1bWVudCBiZWZvcmUgdGhlIG5hbWVkIGFyZ3VtZW50cywgb3IgYWRkIGEgbmFtZSB0byB0aGUgYXJndW1lbnQuUG9zaXRpb25hbEFmdGVyTmFtZWRBcmd1bWVudFBPU0lUSU9OQUxfQUZURVJfTkFNRURfQVJHVU1FTlRtZXNzYWdlUG9zaXRpb25hbEFmdGVyTmFtZWRBcmd1bWVudGNvZGVQb3NpdGlvbmFsUGFyYW1ldGVyV2l0aEVxdWFsc1Bvc2l0aW9uYWwgb3B0aW9uYWwgcGFyYW1ldGVycyBjYW4ndCB1c2UgJzonIHRvIHNwZWNpZnkgYSBkZWZhdWx0IHZhbHVlLlRyeSByZXBsYWNpbmcgJzonIHdpdGggJz0nLlBvc2l0aW9uYWxQYXJhbWV0ZXJXaXRoRXF1YWxzV1JPTkdfU0VQQVJBVE9SX0ZPUl9QT1NJVElPTkFMX1BBUkFNRVRFUm1lc3NhZ2VQb3NpdGlvbmFsUGFyYW1ldGVyV2l0aEVxdWFsc2NvZGVQcmVmaXhBZnRlckNvbWJpbmF0b3JUaGUgcHJlZml4ICgnYXMnIGNsYXVzZSkgc2hvdWxkIGNvbWUgYmVmb3JlIGFueSBzaG93L2hpZGUgY29tYmluYXRvcnMuVHJ5IG1vdmluZyB0aGUgcHJlZml4IGJlZm9yZSB0aGUgY29tYmluYXRvcnMuUHJlZml4QWZ0ZXJDb21iaW5hdG9ybWVzc2FnZVByZWZpeEFmdGVyQ29tYmluYXRvcmNvZGVQcml2YXRlTmFtZWRQYXJhbWV0ZXJBbiBvcHRpb25hbCBuYW1lZCBwYXJhbWV0ZXIgY2FuJ3Qgc3RhcnQgd2l0aCAnXycuUHJpdmF0ZU5hbWVkUGFyYW1ldGVyUFJJVkFURV9PUFRJT05BTF9QQVJBTUVURVJtZXNzYWdlUHJpdmF0ZU5hbWVkUGFyYW1ldGVyY29kZVJlZGlyZWN0aW5nQ29uc3RydWN0b3JXaXRoQm9keVJlZGlyZWN0aW5nIGNvbnN0cnVjdG9ycyBjYW4ndCBoYXZlIGEgYm9keS5UcnkgcmVtb3ZpbmcgdGhlIGJvZHksIG9yIG5vdCBtYWtpbmcgdGhpcyBhIHJlZGlyZWN0aW5nIGNvbnN0cnVjdG9yLlJlZGlyZWN0aW5nQ29uc3RydWN0b3JXaXRoQm9keW1lc3NhZ2VSZWRpcmVjdGluZ0NvbnN0cnVjdG9yV2l0aEJvZHl0ZW1wbGF0ZVJlZGlyZWN0aW5nRmFjdG9yeUluY29tcGF0aWJsZVR5cGVBcmd1bWVudFRoZSB0eXBlICcjdHlwZScgZG9lc24ndCBleHRlbmQgJyN0eXBlMicuVHJ5IHVzaW5nIGEgZGlmZmVyZW50IHR5cGUgYXMgYXJndW1lbnQuY29kZVJlZGlyZWN0aW5nRmFjdG9yeUluY29tcGF0aWJsZVR5cGVBcmd1bWVudFJlZGlyZWN0aW5nRmFjdG9yeUluY29tcGF0aWJsZVR5cGVBcmd1bWVudGNvZGVSZWRpcmVjdGlvbkluTm9uRmFjdG9yeU9ubHkgZmFjdG9yeSBjb25zdHJ1Y3RvciBjYW4gc3BlY2lmeSAnPScgcmVkaXJlY3Rpb24uVHJ5IG1ha2luZyB0aGlzIGEgZmFjdG9yeSBjb25zdHJ1Y3Rvciwgb3IgcmVtb3ZlIHRoZSByZWRpcmVjdGlvbi5SZWRpcmVjdGlvbkluTm9uRmFjdG9yeW1lc3NhZ2VSZWRpcmVjdGlvbkluTm9uRmFjdG9yeXRlbXBsYXRlUmVkaXJlY3Rpb25UYXJnZXROb3RGb3VuZFJlZGlyZWN0aW9uIGNvbnN0cnVjdG9yIHRhcmdldCBub3QgZm91bmQ6ICcjbmFtZSdjb2RlUmVkaXJlY3Rpb25UYXJnZXROb3RGb3VuZFJlZGlyZWN0aW9uVGFyZ2V0Tm90Rm91bmRSRURJUkVDVF9UT19NSVNTSU5HX0NPTlNUUlVDVE9SY29kZVJlcXVpcmVkUGFyYW1ldGVyV2l0aERlZmF1bHROb24tb3B0aW9uYWwgcGFyYW1ldGVycyBjYW4ndCBoYXZlIGEgZGVmYXVsdCB2YWx1ZS5UcnkgcmVtb3ZpbmcgdGhlIGRlZmF1bHQgdmFsdWUgb3IgbWFraW5nIHRoZSBwYXJhbWV0ZXIgb3B0aW9uYWwuUmVxdWlyZWRQYXJhbWV0ZXJXaXRoRGVmYXVsdE5BTUVEX1BBUkFNRVRFUl9PVVRTSURFX0dST1VQbWVzc2FnZVJlcXVpcmVkUGFyYW1ldGVyV2l0aERlZmF1bHRjb2RlUmV0aHJvd05vdENhdGNoJ3JldGhyb3cnIGNhbiBvbmx5IGJlIHVzZWQgaW4gY2F0Y2ggY2xhdXNlcy5SZXRocm93Tm90Q2F0Y2hSRVRIUk9XX09VVFNJREVfQ0FUQ0htZXNzYWdlUmV0aHJvd05vdENhdGNoY29kZVJldHVybkZyb21Wb2lkRnVuY3Rpb25DYW4ndCByZXR1cm4gYSB2YWx1ZSBmcm9tIGEgdm9pZCBmdW5jdGlvbi5SZXR1cm5Gcm9tVm9pZEZ1bmN0aW9uUkVUVVJOX09GX0lOVkFMSURfVFlQRW1lc3NhZ2VSZXR1cm5Gcm9tVm9pZEZ1bmN0aW9uY29kZVJldHVyblR5cGVGdW5jdGlvbkV4cHJlc3Npb25BIGZ1bmN0aW9uIGV4cHJlc3Npb24gY2FuJ3QgaGF2ZSBhIHJldHVybiB0eXBlLlJldHVyblR5cGVGdW5jdGlvbkV4cHJlc3Npb25tZXNzYWdlUmV0dXJuVHlwZUZ1bmN0aW9uRXhwcmVzc2lvbmNvZGVSZXR1cm5XaXRob3V0RXhwcmVzc2lvbk11c3QgZXhwbGljaXRseSByZXR1cm4gYSB2YWx1ZSBmcm9tIGEgbm9uLXZvaWQgZnVuY3Rpb24uUmV0dXJuV2l0aG91dEV4cHJlc3Npb25SRVRVUk5fV0lUSE9VVF9WQUxVRW1lc3NhZ2VSZXR1cm5XaXRob3V0RXhwcmVzc2lvbmNvZGVTZGtSb290Tm90Rm91bmRTZGtSb290Tm90Rm91bmRjb2RlU2RrU3BlY2lmaWNhdGlvbk5vdEZvdW5kU2RrU3BlY2lmaWNhdGlvbk5vdEZvdW5kY29kZVNka1N1bW1hcnlOb3RGb3VuZFNka1N1bW1hcnlOb3RGb3VuZGNvZGVTZXRMaXRlcmFsVG9vTWFueVR5cGVBcmd1bWVudHNBIHNldCBsaXRlcmFsIHJlcXVpcmVzIGV4YWN0bHkgb25lIHR5cGUgYXJndW1lbnQuU2V0TGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzbWVzc2FnZVNldExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50c2NvZGVTZXRPck1hcExpdGVyYWxUb29NYW55VHlwZUFyZ3VtZW50c0Egc2V0IG9yIG1hcCBsaXRlcmFsIHJlcXVpcmVzIGV4YWN0bHkgb25lIG9yIHR3byB0eXBlIGFyZ3VtZW50cywgcmVzcGVjdGl2ZWx5LlNldE9yTWFwTGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzbWVzc2FnZVNldE9yTWFwTGl0ZXJhbFRvb01hbnlUeXBlQXJndW1lbnRzdGVtcGxhdGVTZXR0ZXJOb3RGb3VuZFNldHRlciBub3QgZm91bmQ6ICcjbmFtZScuY29kZVNldHRlck5vdEZvdW5kU2V0dGVyTm90Rm91bmRVTkRFRklORURfU0VUVEVSY29kZVNldHRlck5vdFN5bmNTZXR0ZXJzIGNhbid0IHVzZSAnYXN5bmMnLCAnYXN5bmMqJywgb3IgJ3N5bmMqJy5TZXR0ZXJOb3RTeW5jSU5WQUxJRF9NT0RJRklFUl9PTl9TRVRURVJtZXNzYWdlU2V0dGVyTm90U3luY2NvZGVTZXR0ZXJXaXRoV3JvbmdOdW1iZXJPZkZvcm1hbHNBIHNldHRlciBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBmb3JtYWwgcGFyYW1ldGVyLlNldHRlcldpdGhXcm9uZ051bWJlck9mRm9ybWFsc1dST05HX05VTUJFUl9PRl9QQVJBTUVURVJTX0ZPUl9TRVRURVJtZXNzYWdlU2V0dGVyV2l0aFdyb25nTnVtYmVyT2ZGb3JtYWxzdGVtcGxhdGVTb3VyY2VCb2R5U3VtbWFyeUJ1aWx0IGJvZGllcyBmb3IgI2NvdW50IGNvbXBpbGF0aW9uIHVuaXRzICgjY291bnQyIGJ5dGVzKSBpbiAjbnVtMSUuM21zLCB0aGF0IGlzLAojbnVtMiUxMi4zIGJ5dGVzL21zLCBhbmQKI251bTMlMTIuMyBtcy9jb21waWxhdGlvbiB1bml0LmNvZGVTb3VyY2VCb2R5U3VtbWFyeVNvdXJjZUJvZHlTdW1tYXJ5dGVtcGxhdGVTb3VyY2VPdXRsaW5lU3VtbWFyeUJ1aWx0IG91dGxpbmVzIGZvciAjY291bnQgY29tcGlsYXRpb24gdW5pdHMgKCNjb3VudDIgYnl0ZXMpIGluICNudW0xJS4zbXMsIHRoYXQgaXMsCiNudW0yJTEyLjMgYnl0ZXMvbXMsIGFuZAojbnVtMyUxMi4zIG1zL2NvbXBpbGF0aW9uIHVuaXQuY29kZVNvdXJjZU91dGxpbmVTdW1tYXJ5U291cmNlT3V0bGluZVN1bW1hcnljb2RlU3ByZWFkRWxlbWVudEl0ZXJhYmxlIHNwcmVhZC5TcHJlYWRFbGVtZW50bWVzc2FnZVNwcmVhZEVsZW1lbnR0ZW1wbGF0ZVNwcmVhZEVsZW1lbnRUeXBlTWlzbWF0Y2hDYW4ndCBhc3NpZ24gc3ByZWFkIGVsZW1lbnRzIG9mIHR5cGUgJyN0eXBlJyB0byBjb2xsZWN0aW9uIGVsZW1lbnRzIG9mIHR5cGUgJyN0eXBlMicuY29kZVNwcmVhZEVsZW1lbnRUeXBlTWlzbWF0Y2hTcHJlYWRFbGVtZW50VHlwZU1pc21hdGNoTElTVF9FTEVNRU5UX1RZUEVfTk9UX0FTU0lHTkFCTEVjb2RlU3ByZWFkTWFwRWxlbWVudE1hcCBzcHJlYWQuU3ByZWFkTWFwRWxlbWVudG1lc3NhZ2VTcHJlYWRNYXBFbGVtZW50dGVtcGxhdGVTcHJlYWRNYXBFbnRyeUVsZW1lbnRLZXlUeXBlTWlzbWF0Y2hDYW4ndCBhc3NpZ24gc3ByZWFkIGVudHJ5IGtleXMgb2YgdHlwZSAnI3R5cGUnIHRvIG1hcCBlbnRyeSBrZXlzIG9mIHR5cGUgJyN0eXBlMicuY29kZVNwcmVhZE1hcEVudHJ5RWxlbWVudEtleVR5cGVNaXNtYXRjaFNwcmVhZE1hcEVudHJ5RWxlbWVudEtleVR5cGVNaXNtYXRjaE1BUF9LRVlfVFlQRV9OT1RfQVNTSUdOQUJMRXRlbXBsYXRlU3ByZWFkTWFwRW50cnlFbGVtZW50VmFsdWVUeXBlTWlzbWF0Y2hDYW4ndCBhc3NpZ24gc3ByZWFkIGVudHJ5IHZhbHVlcyBvZiB0eXBlICcjdHlwZScgdG8gbWFwIGVudHJ5IHZhbHVlcyBvZiB0eXBlICcjdHlwZTInLmNvZGVTcHJlYWRNYXBFbnRyeUVsZW1lbnRWYWx1ZVR5cGVNaXNtYXRjaFNwcmVhZE1hcEVudHJ5RWxlbWVudFZhbHVlVHlwZU1pc21hdGNoTUFQX1ZBTFVFX1RZUEVfTk9UX0FTU0lHTkFCTEV0ZW1wbGF0ZVNwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNoVW5leHBlY3RlZCB0eXBlICcjdHlwZScgb2YgYSBtYXAgc3ByZWFkIGVudHJ5LiAgRXhwZWN0ZWQgJ2R5bmFtaWMnIG9yIGEgTWFwLmNvZGVTcHJlYWRNYXBFbnRyeVR5cGVNaXNtYXRjaFNwcmVhZE1hcEVudHJ5VHlwZU1pc21hdGNodGVtcGxhdGVTcHJlYWRUeXBlTWlzbWF0Y2hVbmV4cGVjdGVkIHR5cGUgJyN0eXBlJyBvZiBhIHNwcmVhZC4gIEV4cGVjdGVkICdkeW5hbWljJyBvciBhbiBJdGVyYWJsZS5jb2RlU3ByZWFkVHlwZU1pc21hdGNoU3ByZWFkVHlwZU1pc21hdGNoY29kZVN0YWNrT3ZlcmZsb3dUaGUgZmlsZSBoYXMgdG9vIG1hbnkgbmVzdGVkIGV4cHJlc3Npb25zIG9yIHN0YXRlbWVudHMuVHJ5IHNpbXBsaWZ5aW5nIHRoZSBjb2RlLlN0YWNrT3ZlcmZsb3dtZXNzYWdlU3RhY2tPdmVyZmxvd2NvZGVTdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0VGhpcyBzdGF0aWMgbWVtYmVyIGNvbmZsaWN0cyB3aXRoIGFuIGluc3RhbmNlIG1lbWJlci5TdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0Q09ORkxJQ1RJTkdfU1RBVElDX0FORF9JTlNUQU5DRW1lc3NhZ2VTdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0Y29kZVN0YXRpY0FuZEluc3RhbmNlQ29uZmxpY3RDYXVzZVRoaXMgaXMgdGhlIGluc3RhbmNlIG1lbWJlci5TdGF0aWNBbmRJbnN0YW5jZUNvbmZsaWN0Q2F1c2VtZXNzYWdlU3RhdGljQW5kSW5zdGFuY2VDb25mbGljdENhdXNlY29kZVN0YXRpY0NvbnN0cnVjdG9yQ29uc3RydWN0b3JzIGNhbid0IGJlIHN0YXRpYy5UcnkgcmVtb3ZpbmcgdGhlIGtleXdvcmQgJ3N0YXRpYycuU3RhdGljQ29uc3RydWN0b3JtZXNzYWdlU3RhdGljQ29uc3RydWN0b3Jjb2RlU3RhdGljT3BlcmF0b3JPcGVyYXRvcnMgY2FuJ3QgYmUgc3RhdGljLlN0YXRpY09wZXJhdG9ybWVzc2FnZVN0YXRpY09wZXJhdG9yY29kZVN1cGVyQXNFeHByZXNzaW9uQ2FuJ3QgdXNlICdzdXBlcicgYXMgYW4gZXhwcmVzc2lvbi5UbyBkZWxlZ2F0ZSBhIGNvbnN0cnVjdG9yIHRvIGEgc3VwZXIgY29uc3RydWN0b3IsIHB1dCB0aGUgc3VwZXIgY2FsbCBhcyBhbiBpbml0aWFsaXplci5TdXBlckFzRXhwcmVzc2lvblNVUEVSX0FTX0VYUFJFU1NJT05tZXNzYWdlU3VwZXJBc0V4cHJlc3Npb25jb2RlU3VwZXJBc0lkZW50aWZpZXJFeHBlY3RlZCBpZGVudGlmaWVyLCBidXQgZ290ICdzdXBlcicuU3VwZXJBc0lkZW50aWZpZXJtZXNzYWdlU3VwZXJBc0lkZW50aWZpZXJjb2RlU3VwZXJJbml0aWFsaXplck5vdExhc3RDYW4ndCBoYXZlIGluaXRpYWxpemVycyBhZnRlciAnc3VwZXInLlN1cGVySW5pdGlhbGl6ZXJOb3RMYXN0SU5WQUxJRF9TVVBFUl9JTlZPQ0FUSU9ObWVzc2FnZVN1cGVySW5pdGlhbGl6ZXJOb3RMYXN0Y29kZVN1cGVyTnVsbEF3YXJlVGhlIG9wZXJhdG9yICc/LicgY2Fubm90IGJlIHVzZWQgd2l0aCAnc3VwZXInIGJlY2F1c2UgJ3N1cGVyJyBjYW5ub3QgYmUgbnVsbC5UcnkgcmVwbGFjaW5nICc/Licgd2l0aCAnLidTdXBlck51bGxBd2FyZW1lc3NhZ2VTdXBlck51bGxBd2FyZXRlbXBsYXRlU3VwZXJjbGFzc0hhc05vQ29uc3RydWN0b3JTdXBlcmNsYXNzIGhhcyBubyBjb25zdHJ1Y3RvciBuYW1lZCAnI25hbWUnLmNvZGVTdXBlcmNsYXNzSGFzTm9Db25zdHJ1Y3RvclN1cGVyY2xhc3NIYXNOb0NvbnN0cnVjdG9yVU5ERUZJTkVEX0NPTlNUUlVDVE9SX0lOX0lOSVRJQUxJWkVSVU5ERUZJTkVEX0NPTlNUUlVDVE9SX0lOX0lOSVRJQUxJWkVSX0RFRkFVTFR0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb0RlZmF1bHRDb25zdHJ1Y3RvclRoZSBzdXBlcmNsYXNzLCAnI25hbWUnLCBoYXMgbm8gdW5uYW1lZCBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIG5vIGFyZ3VtZW50cy5jb2RlU3VwZXJjbGFzc0hhc05vRGVmYXVsdENvbnN0cnVjdG9yU3VwZXJjbGFzc0hhc05vRGVmYXVsdENvbnN0cnVjdG9yTk9fREVGQVVMVF9TVVBFUl9DT05TVFJVQ1RPUl9JTVBMSUNJVHRlbXBsYXRlU3VwZXJjbGFzc0hhc05vR2V0dGVyU3VwZXJjbGFzcyBoYXMgbm8gZ2V0dGVyIG5hbWVkICcjbmFtZScuY29kZVN1cGVyY2xhc3NIYXNOb0dldHRlclN1cGVyY2xhc3NIYXNOb0dldHRlclVOREVGSU5FRF9TVVBFUl9HRVRURVJ0ZW1wbGF0ZVN1cGVyY2xhc3NIYXNOb01ldGhvZFN1cGVyY2xhc3MgaGFzIG5vIG1ldGhvZCBuYW1lZCAnI25hbWUnLmNvZGVTdXBlcmNsYXNzSGFzTm9NZXRob2RTdXBlcmNsYXNzSGFzTm9NZXRob2RVTkRFRklORURfU1VQRVJfTUVUSE9EdGVtcGxhdGVTdXBlcmNsYXNzSGFzTm9TZXR0ZXJTdXBlcmNsYXNzIGhhcyBubyBzZXR0ZXIgbmFtZWQgJyNuYW1lJy5jb2RlU3VwZXJjbGFzc0hhc05vU2V0dGVyU3VwZXJjbGFzc0hhc05vU2V0dGVyVU5ERUZJTkVEX1NVUEVSX1NFVFRFUnRlbXBsYXRlU3VwZXJjbGFzc01ldGhvZEFyZ3VtZW50TWlzbWF0Y2hTdXBlcmNsYXNzIGRvZXNuJ3QgaGF2ZSBhIG1ldGhvZCBuYW1lZCAnI25hbWUnIHdpdGggbWF0Y2hpbmcgYXJndW1lbnRzLmNvZGVTdXBlcmNsYXNzTWV0aG9kQXJndW1lbnRNaXNtYXRjaFN1cGVyY2xhc3NNZXRob2RBcmd1bWVudE1pc21hdGNoY29kZVN1cGVydHlwZUlzRnVuY3Rpb25DYW4ndCB1c2UgYSBmdW5jdGlvbiB0eXBlIGFzIHN1cGVydHlwZS5TdXBlcnR5cGVJc0Z1bmN0aW9ubWVzc2FnZVN1cGVydHlwZUlzRnVuY3Rpb250ZW1wbGF0ZVN1cGVydHlwZUlzSWxsZWdhbFRoZSB0eXBlICcjbmFtZScgY2FuJ3QgYmUgdXNlZCBhcyBzdXBlcnR5cGUuY29kZVN1cGVydHlwZUlzSWxsZWdhbFN1cGVydHlwZUlzSWxsZWdhbEVYVEVORFNfTk9OX0NMQVNTdGVtcGxhdGVTdXBlcnR5cGVJc1R5cGVWYXJpYWJsZVRoZSB0eXBlIHZhcmlhYmxlICcjbmFtZScgY2FuJ3QgYmUgdXNlZCBhcyBzdXBlcnR5cGUuY29kZVN1cGVydHlwZUlzVHlwZVZhcmlhYmxlU3VwZXJ0eXBlSXNUeXBlVmFyaWFibGVjb2RlU3dpdGNoQ2FzZUZhbGxUaHJvdWdoU3dpdGNoIGNhc2UgbWF5IGZhbGwgdGhyb3VnaCB0byB0aGUgbmV4dCBjYXNlLlN3aXRjaENhc2VGYWxsVGhyb3VnaENBU0VfQkxPQ0tfTk9UX1RFUk1JTkFURURtZXNzYWdlU3dpdGNoQ2FzZUZhbGxUaHJvdWdodGVtcGxhdGVTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZVR5cGUgJyN0eXBlJyBvZiB0aGUgc3dpdGNoIGV4cHJlc3Npb24gaXNuJ3QgYXNzaWduYWJsZSB0byB0aGUgdHlwZSAnI3R5cGUyJyBvZiB0aGlzIGNhc2UgZXhwcmVzc2lvbi5jb2RlU3dpdGNoRXhwcmVzc2lvbk5vdEFzc2lnbmFibGVTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZVNXSVRDSF9FWFBSRVNTSU9OX05PVF9BU1NJR05BQkxFY29kZVN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlQ2F1c2VUaGUgc3dpdGNoIGV4cHJlc3Npb24gaXMgaGVyZS5Td2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZUNhdXNlbWVzc2FnZVN3aXRjaEV4cHJlc3Npb25Ob3RBc3NpZ25hYmxlQ2F1c2Vjb2RlU3dpdGNoSGFzQ2FzZUFmdGVyRGVmYXVsdFRoZSBkZWZhdWx0IGNhc2Ugc2hvdWxkIGJlIHRoZSBsYXN0IGNhc2UgaW4gYSBzd2l0Y2ggc3RhdGVtZW50LlRyeSBtb3ZpbmcgdGhlIGRlZmF1bHQgY2FzZSBhZnRlciB0aGUgb3RoZXIgY2FzZSBjbGF1c2VzLlN3aXRjaEhhc0Nhc2VBZnRlckRlZmF1bHRtZXNzYWdlU3dpdGNoSGFzQ2FzZUFmdGVyRGVmYXVsdGNvZGVTd2l0Y2hIYXNNdWx0aXBsZURlZmF1bHRzVGhlICdkZWZhdWx0JyBjYXNlIGNhbiBvbmx5IGJlIGRlY2xhcmVkIG9uY2UuVHJ5IHJlbW92aW5nIGFsbCBidXQgb25lIGRlZmF1bHQgY2FzZS5Td2l0Y2hIYXNNdWx0aXBsZURlZmF1bHRzbWVzc2FnZVN3aXRjaEhhc011bHRpcGxlRGVmYXVsdHNjb2RlU3ludGhldGljVG9rZW5UaGlzIGNvdWxkbid0IGJlIHBhcnNlZC5TeW50aGV0aWNUb2tlbm1lc3NhZ2VTeW50aGV0aWNUb2tlbnRlbXBsYXRlVGhpc0FjY2Vzc0luRmllbGRJbml0aWFsaXplckNhbid0IGFjY2VzcyAndGhpcycgaW4gYSBmaWVsZCBpbml0aWFsaXplciB0byByZWFkICcjbmFtZScuY29kZVRoaXNBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXJUaGlzQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyVEhJU19BQ0NFU1NfRlJPTV9GSUVMRF9JTklUSUFMSVpFUmNvZGVUaGlzQXNJZGVudGlmaWVyRXhwZWN0ZWQgaWRlbnRpZmllciwgYnV0IGdvdCAndGhpcycuVGhpc0FzSWRlbnRpZmllcklOVkFMSURfUkVGRVJFTkNFX1RPX1RISVNtZXNzYWdlVGhpc0FzSWRlbnRpZmllcmNvZGVUaGlzSW5pdGlhbGl6ZXJOb3RBbG9uZUNhbid0IGhhdmUgb3RoZXIgaW5pdGlhbGl6ZXJzIHRvZ2V0aGVyIHdpdGggJ3RoaXMnLlRoaXNJbml0aWFsaXplck5vdEFsb25lRklFTERfSU5JVElBTElaRVJfUkVESVJFQ1RJTkdfQ09OU1RSVUNUT1JtZXNzYWdlVGhpc0luaXRpYWxpemVyTm90QWxvbmV0ZW1wbGF0ZVRoaXNPclN1cGVyQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyQ2FuJ3QgYWNjZXNzICcjc3RyaW5nJyBpbiBhIGZpZWxkIGluaXRpYWxpemVyLmNvZGVUaGlzT3JTdXBlckFjY2Vzc0luRmllbGRJbml0aWFsaXplclRoaXNPclN1cGVyQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyVEhJU19BQ0NFU1NfRlJPTV9JTklUSUFMSVpFUnRlbXBsYXRlVG9vRmV3QXJndW1lbnRzVG9vIGZldyBwb3NpdGlvbmFsIGFyZ3VtZW50czogI2NvdW50IHJlcXVpcmVkLCAjY291bnQyIGdpdmVuLmNvZGVUb29GZXdBcmd1bWVudHNUb29GZXdBcmd1bWVudHNOT1RfRU5PVUdIX1JFUVVJUkVEX0FSR1VNRU5UU3RlbXBsYXRlVG9vTWFueUFyZ3VtZW50c1RvbyBtYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzOiAjY291bnQgYWxsb3dlZCwgYnV0ICNjb3VudDIgZm91bmQuVHJ5IHJlbW92aW5nIHRoZSBleHRyYSBwb3NpdGlvbmFsIGFyZ3VtZW50cy5jb2RlVG9vTWFueUFyZ3VtZW50c1Rvb01hbnlBcmd1bWVudHNjb2RlVG9wTGV2ZWxPcGVyYXRvck9wZXJhdG9ycyBtdXN0IGJlIGRlY2xhcmVkIHdpdGhpbiBhIGNsYXNzLlRyeSByZW1vdmluZyB0aGUgb3BlcmF0b3IsIG1vdmluZyBpdCB0byBhIGNsYXNzLCBvciBjb252ZXJ0aW5nIGl0IHRvIGJlIGEgZnVuY3Rpb24uVG9wTGV2ZWxPcGVyYXRvcm1lc3NhZ2VUb3BMZXZlbE9wZXJhdG9yY29kZVR5cGVBZnRlclZhclZhcmlhYmxlcyBjYW4ndCBiZSBkZWNsYXJlZCB1c2luZyBib3RoICd2YXInIGFuZCBhIHR5cGUgbmFtZS5UcnkgcmVtb3ZpbmcgJ3Zhci4nVHlwZUFmdGVyVmFybWVzc2FnZVR5cGVBZnRlclZhcnRlbXBsYXRlVHlwZUFyZ3VtZW50TWlzbWF0Y2hFeHBlY3RlZCAjY291bnQgdHlwZSBhcmd1bWVudHMuY29kZVR5cGVBcmd1bWVudE1pc21hdGNoVHlwZUFyZ3VtZW50TWlzbWF0Y2hXUk9OR19OVU1CRVJfT0ZfVFlQRV9BUkdVTUVOVFN0ZW1wbGF0ZVR5cGVBcmd1bWVudHNPblR5cGVWYXJpYWJsZUNhbid0IHVzZSB0eXBlIGFyZ3VtZW50cyB3aXRoIHR5cGUgdmFyaWFibGUgJyNuYW1lJy5UcnkgcmVtb3ZpbmcgdGhlIHR5cGUgYXJndW1lbnRzLmNvZGVUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGVUeXBlQXJndW1lbnRzT25UeXBlVmFyaWFibGVjb2RlVHlwZUJlZm9yZUZhY3RvcnlGYWN0b3J5IGNvbnN0cnVjdG9ycyBjYW5ub3QgaGF2ZSBhIHJldHVybiB0eXBlLlRyeSByZW1vdmluZyB0aGUgdHlwZSBhcHBlYXJpbmcgYmVmb3JlICdmYWN0b3J5Jy5UeXBlQmVmb3JlRmFjdG9yeW1lc3NhZ2VUeXBlQmVmb3JlRmFjdG9yeXRlbXBsYXRlVHlwZU5vdEZvdW5kVHlwZSAnI25hbWUnIG5vdCBmb3VuZC5jb2RlVHlwZU5vdEZvdW5kVHlwZU5vdEZvdW5kVU5ERUZJTkVEX0NMQVNTdGVtcGxhdGVUeXBlT3JpZ2luJyNuYW1lJyBpcyBmcm9tICcjdXJpJy5jb2RlVHlwZU9yaWdpblR5cGVPcmlnaW50ZW1wbGF0ZVR5cGVPcmlnaW5XaXRoRmlsZVVyaScjbmFtZScgaXMgZnJvbSAnI3VyaScgKCcjdXJpMicpLmNvZGVUeXBlT3JpZ2luV2l0aEZpbGVVcmlUeXBlT3JpZ2luV2l0aEZpbGVVcmljb2RlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWVBIHR5cGUgdmFyaWFibGUgY2FuJ3QgaGF2ZSB0aGUgc2FtZSBuYW1lIGFzIGFub3RoZXIuVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWVtZXNzYWdlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWV0ZW1wbGF0ZVR5cGVWYXJpYWJsZUR1cGxpY2F0ZWROYW1lQ2F1c2VUaGUgb3RoZXIgdHlwZSB2YXJpYWJsZSBuYW1lZCAnI25hbWUnLmNvZGVUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlVHlwZVZhcmlhYmxlRHVwbGljYXRlZE5hbWVDYXVzZWNvZGVUeXBlVmFyaWFibGVJbkNvbnN0YW50Q29udGV4dFR5cGUgdmFyaWFibGVzIGNhbid0IGJlIHVzZWQgYXMgY29uc3RhbnRzLlR5cGVWYXJpYWJsZUluQ29uc3RhbnRDb250ZXh0VFlQRV9QQVJBTUVURVJfSU5fQ09OU1RfRVhQUkVTU0lPTm1lc3NhZ2VUeXBlVmFyaWFibGVJbkNvbnN0YW50Q29udGV4dGNvZGVUeXBlVmFyaWFibGVJblN0YXRpY0NvbnRleHRUeXBlIHZhcmlhYmxlcyBjYW4ndCBiZSB1c2VkIGluIHN0YXRpYyBtZW1iZXJzLlR5cGVWYXJpYWJsZUluU3RhdGljQ29udGV4dG1lc3NhZ2VUeXBlVmFyaWFibGVJblN0YXRpY0NvbnRleHRjb2RlVHlwZVZhcmlhYmxlU2FtZU5hbWVBc0VuY2xvc2luZ0EgdHlwZSB2YXJpYWJsZSBjYW4ndCBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgaXRzIGVuY2xvc2luZyBkZWNsYXJhdGlvbi5UeXBlVmFyaWFibGVTYW1lTmFtZUFzRW5jbG9zaW5nQ09ORkxJQ1RJTkdfVFlQRV9WQVJJQUJMRV9BTkRfQ0xBU1NtZXNzYWdlVHlwZVZhcmlhYmxlU2FtZU5hbWVBc0VuY2xvc2luZ2NvZGVUeXBlZGVmSW5DbGFzc1R5cGVkZWZzIGNhbid0IGJlIGRlY2xhcmVkIGluc2lkZSBjbGFzc2VzLlRyeSBtb3ZpbmcgdGhlIHR5cGVkZWYgdG8gdGhlIHRvcC1sZXZlbC5UeXBlZGVmSW5DbGFzc21lc3NhZ2VUeXBlZGVmSW5DbGFzc2NvZGVUeXBlZGVmTm90RnVuY3Rpb25DYW4ndCBjcmVhdGUgdHlwZWRlZiBmcm9tIG5vbi1mdW5jdGlvbiB0eXBlLlR5cGVkZWZOb3RGdW5jdGlvbklOVkFMSURfR0VORVJJQ19GVU5DVElPTl9UWVBFbWVzc2FnZVR5cGVkZWZOb3RGdW5jdGlvbnRlbXBsYXRlVW5kZWZpbmVkR2V0dGVyVGhlIGdldHRlciAnI25hbWUnIGlzbid0IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnI3R5cGUnLlRyeSBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGdldHRlciwgb3IgZGVmaW5pbmcgYSBnZXR0ZXIgb3IgZmllbGQgbmFtZWQgJyNuYW1lJy5jb2RlVW5kZWZpbmVkR2V0dGVyVW5kZWZpbmVkR2V0dGVydGVtcGxhdGVVbmRlZmluZWRNZXRob2RUaGUgbWV0aG9kICcjbmFtZScgaXNuJ3QgZGVmaW5lZCBmb3IgdGhlIGNsYXNzICcjdHlwZScuVHJ5IGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgbWV0aG9kLCBvciBkZWZpbmluZyBhIG1ldGhvZCBuYW1lZCAnI25hbWUnLmNvZGVVbmRlZmluZWRNZXRob2RVbmRlZmluZWRNZXRob2R0ZW1wbGF0ZVVuZGVmaW5lZFNldHRlclRoZSBzZXR0ZXIgJyNuYW1lJyBpc24ndCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJyN0eXBlJy5UcnkgY29ycmVjdGluZyB0aGUgbmFtZSB0byB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBzZXR0ZXIsIG9yIGRlZmluaW5nIGEgc2V0dGVyIG9yIGZpZWxkIG5hbWVkICcjbmFtZScuY29kZVVuZGVmaW5lZFNldHRlclVuZGVmaW5lZFNldHRlcmNvZGVVbmV4cGVjdGVkRG9sbGFySW5TdHJpbmdBICckJyBoYXMgc3BlY2lhbCBtZWFuaW5nIGluc2lkZSBhIHN0cmluZywgYW5kIG11c3QgYmUgZm9sbG93ZWQgYnkgYW4gaWRlbnRpZmllciBvciBhbiBleHByZXNzaW9uIGluIGN1cmx5IGJyYWNlcyAoe30pLlRyeSBhZGRpbmcgYSBiYWNrc2xhc2ggKFwpIHRvIGVzY2FwZSB0aGUgJyQnLlVuZXhwZWN0ZWREb2xsYXJJblN0cmluZ1VORVhQRUNURURfRE9MTEFSX0lOX1NUUklOR21lc3NhZ2VVbmV4cGVjdGVkRG9sbGFySW5TdHJpbmd0ZW1wbGF0ZVVuZXhwZWN0ZWRUb2tlblVuZXhwZWN0ZWQgdG9rZW4gJyNsZXhlbWUnLmNvZGVVbmV4cGVjdGVkVG9rZW5VbmV4cGVjdGVkVG9rZW5VTkVYUEVDVEVEX1RPS0VOdGVtcGxhdGVVbm1hdGNoZWRUb2tlbkNhbid0IGZpbmQgJyNzdHJpbmcnIHRvIG1hdGNoICcjbGV4ZW1lJy5jb2RlVW5tYXRjaGVkVG9rZW5Vbm1hdGNoZWRUb2tlbnRlbXBsYXRlVW5yZXNvbHZlZFByZWZpeEluVHlwZUFubm90YXRpb24nI25hbWUuI25hbWUyJyBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZSBiZWNhdXNlICcjbmFtZScgaXNuJ3QgZGVmaW5lZC5jb2RlVW5yZXNvbHZlZFByZWZpeEluVHlwZUFubm90YXRpb25VbnJlc29sdmVkUHJlZml4SW5UeXBlQW5ub3RhdGlvbnRlbXBsYXRlVW5zcGVjaWZpZWQjc3RyaW5nY29kZVVuc3BlY2lmaWVkVW5zcGVjaWZpZWR0ZW1wbGF0ZVVuc3VwcG9ydGVkT3BlcmF0b3JUaGUgJyNsZXhlbWUnIG9wZXJhdG9yIGlzIG5vdCBzdXBwb3J0ZWQuY29kZVVuc3VwcG9ydGVkT3BlcmF0b3JVbnN1cHBvcnRlZE9wZXJhdG9yVU5TVVBQT1JURURfT1BFUkFUT1Jjb2RlVW5zdXBwb3J0ZWRQcmVmaXhQbHVzJysnIGlzIG5vdCBhIHByZWZpeCBvcGVyYXRvci5UcnkgcmVtb3ZpbmcgJysnLlVuc3VwcG9ydGVkUHJlZml4UGx1c21lc3NhZ2VVbnN1cHBvcnRlZFByZWZpeFBsdXNjb2RlVW50ZXJtaW5hdGVkQ29tbWVudENvbW1lbnQgc3RhcnRpbmcgd2l0aCAnLyonIG11c3QgZW5kIHdpdGggJyovJy5VbnRlcm1pbmF0ZWRDb21tZW50VU5URVJNSU5BVEVEX01VTFRJX0xJTkVfQ09NTUVOVG1lc3NhZ2VVbnRlcm1pbmF0ZWRDb21tZW50dGVtcGxhdGVVbnRlcm1pbmF0ZWRTdHJpbmdTdHJpbmcgc3RhcnRpbmcgd2l0aCAjc3RyaW5nIG11c3QgZW5kIHdpdGggI3N0cmluZzIuY29kZVVudGVybWluYXRlZFN0cmluZ1VudGVybWluYXRlZFN0cmluZ1VOVEVSTUlOQVRFRF9TVFJJTkdfTElURVJBTGNvZGVVbnRlcm1pbmF0ZWRUb2tlbkluY29tcGxldGUgdG9rZW4uVW50ZXJtaW5hdGVkVG9rZW5tZXNzYWdlVW50ZXJtaW5hdGVkVG9rZW50ZW1wbGF0ZVVudHJhbnNsYXRhYmxlVXJpTm90IGZvdW5kOiAnI3VyaSdjb2RlVW50cmFuc2xhdGFibGVVcmlVbnRyYW5zbGF0YWJsZVVyaXRlbXBsYXRlVXNlT2ZEZXByZWNhdGVkSWRlbnRpZmllcicjbmFtZScgaXMgZGVwcmVjYXRlZC5jb2RlVXNlT2ZEZXByZWNhdGVkSWRlbnRpZmllclVzZU9mRGVwcmVjYXRlZElkZW50aWZpZXJjb2RlVmFyQXNUeXBlTmFtZVRoZSBrZXl3b3JkICd2YXInIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlIG5hbWUuVmFyQXNUeXBlTmFtZW1lc3NhZ2VWYXJBc1R5cGVOYW1lY29kZVZhclJldHVyblR5cGVUaGUgcmV0dXJuIHR5cGUgY2FuJ3QgYmUgJ3ZhcicuVHJ5IHJlbW92aW5nIHRoZSBrZXl3b3JkICd2YXInLCBvciByZXBsYWNpbmcgaXQgd2l0aCB0aGUgbmFtZSBvZiB0aGUgcmV0dXJuIHR5cGUuVmFyUmV0dXJuVHlwZW1lc3NhZ2VWYXJSZXR1cm5UeXBlY29kZVZvaWRFeHByZXNzaW9uVGhpcyBleHByZXNzaW9uIGhhcyB0eXBlICd2b2lkJyBhbmQgY2FuJ3QgYmUgdXNlZC5Wb2lkRXhwcmVzc2lvblVTRV9PRl9WT0lEX1JFU1VMVG1lc3NhZ2VWb2lkRXhwcmVzc2lvbnRlbXBsYXRlV2ViTGl0ZXJhbENhbm5vdEJlUmVwcmVzZW50ZWRFeGFjdGx5VGhlIGludGVnZXIgbGl0ZXJhbCAjc3RyaW5nIGNhbid0IGJlIHJlcHJlc2VudGVkIGV4YWN0bHkgaW4gSmF2YVNjcmlwdC5UcnkgY2hhbmdpbmcgdGhlIGxpdGVyYWwgdG8gc29tZXRoaW5nIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGluIEphdmFzY3JpcHQuIEluIEphdmFzY3JpcHQgI3N0cmluZzIgaXMgdGhlIG5lYXJlc3QgdmFsdWUgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgZXhhY3RseS5jb2RlV2ViTGl0ZXJhbENhbm5vdEJlUmVwcmVzZW50ZWRFeGFjdGx5V2ViTGl0ZXJhbENhbm5vdEJlUmVwcmVzZW50ZWRFeGFjdGx5Y29kZVdpdGhCZWZvcmVFeHRlbmRzVGhlIGV4dGVuZHMgY2xhdXNlIG11c3QgYmUgYmVmb3JlIHRoZSB3aXRoIGNsYXVzZS5UcnkgbW92aW5nIHRoZSBleHRlbmRzIGNsYXVzZSBiZWZvcmUgdGhlIHdpdGggY2xhdXNlLldpdGhCZWZvcmVFeHRlbmRzbWVzc2FnZVdpdGhCZWZvcmVFeHRlbmRzY29kZVlpZWxkQXNJZGVudGlmaWVyJ3lpZWxkJyBjYW4ndCBiZSB1c2VkIGFzIGFuIGlkZW50aWZpZXIgaW4gJ2FzeW5jJywgJ2FzeW5jKicsIG9yICdzeW5jKicgbWV0aG9kcy5ZaWVsZEFzSWRlbnRpZmllcm1lc3NhZ2VZaWVsZEFzSWRlbnRpZmllcmNvZGVZaWVsZE5vdEdlbmVyYXRvcid5aWVsZCcgY2FuIG9ubHkgYmUgdXNlZCBpbiAnc3luYyonIG9yICdhc3luYyonIG1ldGhvZHMuWWllbGROb3RHZW5lcmF0b3JZSUVMRF9JTl9OT05fR0VORVJBVE9SbWVzc2FnZVlpZWxkTm90R2VuZXJhdG9yaXRlbWl6ZU5hbWVzIC0gX3dpdGhBcmd1bWVudHNBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbk5vIG5hbWUgcHJvdmlkZWRUaGUgY2xhc3MgJycgaXMgYWJzdHJhY3QgYW5kIGNhbid0IGJlIGluc3RhbnRpYXRlZC5fd2l0aEFyZ3VtZW50c0Fic3RyYWN0UmVkaXJlY3RlZENsYXNzSW5zdGFudGlhdGlvbkZhY3RvcnkgcmVkaXJlY3RzIHRvIGNsYXNzICcnLCB3aGljaCBpcyBhYnN0cmFjdCBhbmQgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLl93aXRoQXJndW1lbnRzQWNjZXNzRXJyb3JBY2Nlc3MgZXJyb3I6ICdfd2l0aEFyZ3VtZW50c0FtYmlndW91c1N1cGVydHlwZXNfdHlwZV90eXBlMmxhYmVsZXJ0eXBlUGFydHNsYWJlbFR5cGV0eXBlMlBhcnRzdHlwZTInIGNhbid0IGltcGxlbWVudCBib3RoICcnIGFuZCAnb3JpZ2luTWVzc2FnZXNfd2l0aEFyZ3VtZW50c0FyZ3VtZW50VHlwZU5vdEFzc2lnbmFibGVUaGUgYXJndW1lbnQgdHlwZSAnJyBjYW4ndCBiZSBhc3NpZ25lZCB0byB0aGUgcGFyYW1ldGVyIHR5cGUgJ1RyeSBjaGFuZ2luZyB0aGUgdHlwZSBvZiB0aGUgcGFyYW1ldGVyLCBvciBjYXN0aW5nIHRoZSBhcmd1bWVudCB0byAnX3dpdGhBcmd1bWVudHNBc2NpaUNvbnRyb2xDaGFyYWN0ZXJjb2RlUG9pbnR1bmljb2RlVSt0b1VwcGVyQ2FzZXBhZExlZnRUaGUgY29udHJvbCBjaGFyYWN0ZXIgIGNhbiBvbmx5IGJlIHVzZWQgaW4gc3RyaW5ncyBhbmQgY29tbWVudHMuX3dpdGhBcmd1bWVudHNCYWRUeXBlVmFyaWFibGVJblN1cGVydHlwZW5hbWUyRm91bmQgdW5zdXBwb3J0ZWQgdXNlcyBvZiAnJyBpbiBzdXBlcnR5cGUgJ193aXRoQXJndW1lbnRzQm91bmRJc3N1ZVZpYUN5Y2xlTm9uU2ltcGxpY2l0eUdlbmVyaWMgdHlwZSAnJyBjYW4ndCBiZSB1c2VkIHdpdGhvdXQgdHlwZSBhcmd1bWVudHMgaW4gdGhlIGJvdW5kcyBvZiBpdHMgb3duIHR5cGUgdmFyaWFibGVzLiBJdCBpcyByZWZlcmVuY2VkIGluZGlyZWN0bHkgdGhyb3VnaCAnVHJ5IHByb3ZpZGluZyB0eXBlIGFyZ3VtZW50cyB0byAnJyBoZXJlIG9yIHRvIHNvbWUgb3RoZXIgcmF3IHR5cGVzIGluIHRoZSBib3VuZHMgYWxvbmcgdGhlIHJlZmVyZW5jZSBjaGFpbi5fd2l0aEFyZ3VtZW50c0JvdW5kSXNzdWVWaWFMb29wTm9uU2ltcGxpY2l0eScgY2FuJ3QgYmUgdXNlZCB3aXRob3V0IHR5cGUgYXJndW1lbnRzIGluIHRoZSBib3VuZHMgb2YgaXRzIG93biB0eXBlIHZhcmlhYmxlcy4nIGhlcmUuX3dpdGhBcmd1bWVudHNCb3VuZElzc3VlVmlhUmF3VHlwZVdpdGhOb25TaW1wbGVCb3VuZHMnIGNhbid0IGJlIHVzZWQgd2l0aG91dCB0eXBlIGFyZ3VtZW50cyBpbiBhIHR5cGUgdmFyaWFibGUgYm91bmQuX3dpdGhBcmd1bWVudHNCcmVha1RhcmdldE91dHNpZGVGdW5jdGlvbkNhbid0IGJyZWFrIHRvICcnIGluIGEgZGlmZmVyZW50IGZ1bmN0aW9uLl93aXRoQXJndW1lbnRzQnVpbHRJbklkZW50aWZpZXJBc1R5cGV0b2tlblRoZSBidWlsdC1pbiBpZGVudGlmaWVyICcnIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlLl93aXRoQXJndW1lbnRzQnVpbHRJbklkZW50aWZpZXJJbkRlY2xhcmF0aW9uQ2FuJ3QgdXNlICcnIGFzIGEgbmFtZSBoZXJlLl93aXRoQXJndW1lbnRzQ2FuZGlkYXRlRm91bmRJc0RlZmF1bHRDb25zdHJ1Y3RvcicgaGFzIGEgY29uc3RydWN0b3IgdGhhdCB0YWtlcyBubyBhcmd1bWVudHMuX3dpdGhBcmd1bWVudHNDYW5ub3RSZWFkU2RrU3BlY2lmaWNhdGlvbk5vIHN0cmluZyBwcm92aWRlZFVuYWJsZSB0byByZWFkIHRoZSAnbGlicmFyaWVzLmpzb24nIHNwZWNpZmljYXRpb24gZmlsZToKICBfd2l0aEFyZ3VtZW50c0NhbnRJbmZlclJldHVyblR5cGVEdWVUb0luY29uc2lzdGVudE92ZXJyaWRlc0Nhbid0IGluZmVyIGEgcmV0dXJuIHR5cGUgZm9yICcnIGFzIHNvbWUgb2YgdGhlIGluaGVyaXRlZCBtZW1iZXJzIGhhdmUgZGlmZmVyZW50IHR5cGVzLl93aXRoQXJndW1lbnRzQ2FudEluZmVyVHlwZUR1ZVRvQ2lyY3VsYXJpdHlDYW4ndCBpbmZlciB0aGUgdHlwZSBvZiAnJzogY2lyY3VsYXJpdHkgZm91bmQgZHVyaW5nIHR5cGUgaW5mZXJlbmNlLl93aXRoQXJndW1lbnRzQ2FudEluZmVyVHlwZUR1ZVRvSW5jb25zaXN0ZW50T3ZlcnJpZGVzQ2FuJ3QgaW5mZXIgYSB0eXBlIGZvciAnX3dpdGhBcmd1bWVudHNDYW50UmVhZEZpbGV1cmlfRXJyb3Igd2hlbiByZWFkaW5nICcnOiBfd2l0aEFyZ3VtZW50c0NhbnRVc2VDb250cm9sRmxvd09yU3ByZWFkQXNDb25zdGFudCcgaXMgbm90IHN1cHBvcnRlZCBpbiBjb25zdGFudCBleHByZXNzaW9ucy5fd2l0aEFyZ3VtZW50c0NhbnRVc2VEZWZlcnJlZFByZWZpeEFzQ29uc3RhbnQnIGNhbid0IGJlIHVzZWQgaW4gYSBjb25zdGFudCBleHByZXNzaW9uIGJlY2F1c2UgaXQncyBtYXJrZWQgYXMgJ2RlZmVycmVkJyB3aGljaCBtZWFucyBpdCBpc24ndCBhdmFpbGFibGUgdW50aWwgbG9hZGVkLl93aXRoQXJndW1lbnRzQ29tYmluZWRNZW1iZXJTaWduYXR1cmVGYWlsZWRDbGFzcyAnJyBpbmhlcml0cyBtdWx0aXBsZSBtZW1iZXJzIG5hbWVkICcnIHdpdGggaW5jb21wYXRpYmxlIHNpZ25hdHVyZXMuVHJ5IGFkZGluZyBhIGRlY2xhcmF0aW9uIG9mICcnIHRvICdfd2l0aEFyZ3VtZW50c0NvbmZsaWN0aW5nTW9kaWZpZXJzc3RyaW5nMk1lbWJlcnMgY2FuJ3QgYmUgZGVjbGFyZWQgdG8gYmUgYm90aCAnX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoQ29uc3RydWN0b3JDb25mbGljdHMgd2l0aCBjb25zdHJ1Y3RvciAnX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoRmFjdG9yeUNvbmZsaWN0cyB3aXRoIGZhY3RvcnkgJ193aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aE1lbWJlckNvbmZsaWN0cyB3aXRoIG1lbWJlciAnX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoTWVtYmVyV2FybmluZ193aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aFNldHRlckNvbmZsaWN0cyB3aXRoIHNldHRlciAnX3dpdGhBcmd1bWVudHNDb25mbGljdHNXaXRoU2V0dGVyV2FybmluZ193aXRoQXJndW1lbnRzQ29uZmxpY3RzV2l0aFR5cGVWYXJpYWJsZUNvbmZsaWN0cyB3aXRoIHR5cGUgdmFyaWFibGUgJ193aXRoQXJndW1lbnRzQ29uc3RFdmFsRGVmZXJyZWRMaWJyYXJ5X3dpdGhBcmd1bWVudHNDb25zdEV2YWxEdXBsaWNhdGVFbGVtZW50X2NvbnN0YW50Y29uc3RhbnRQYXJ0c2xhYmVsQ29uc3RhbnRUaGUgZWxlbWVudCAnJyBjb25mbGljdHMgd2l0aCBhbm90aGVyIGV4aXN0aW5nIGVsZW1lbnQgaW4gdGhlIHNldC5fd2l0aEFyZ3VtZW50c0NvbnN0RXZhbER1cGxpY2F0ZUtleVRoZSBrZXkgJycgY29uZmxpY3RzIHdpdGggYW5vdGhlciBleGlzdGluZyBrZXkgaW4gdGhlIG1hcC5fd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEVsZW1lbnRJbXBsZW1lbnRzRXF1YWwnIGRvZXMgbm90IGhhdmUgYSBwcmltaXRpdmUgb3BlcmF0b3IgJz09Jy5fd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEZhaWxlZEFzc2VydGlvbldpdGhNZXNzYWdlVGhpcyBhc3NlcnRpb24gZmFpbGVkIHdpdGggbWVzc2FnZTogX3dpdGhBcmd1bWVudHNDb25zdEV2YWxGcmVlVHlwZVBhcmFtZXRlclRoZSB0eXBlICcnIGlzIG5vdCBhIGNvbnN0YW50IGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBhIHR5cGUgcGFyYW1ldGVyLCBvbmx5IGluc3RhbnRpYXRlZCB0eXBlcyBhcmUgYWxsb3dlZC5fd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRCaW5hcnlPcGVyYW5kVHlwZUJpbmFyeSBvcGVyYXRvciAnJyBvbiAnJyByZXF1aXJlcyBvcGVyYW5kIG9mIHR5cGUgJycsIGJ1dCB3YXMgb2YgdHlwZSAnX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkRXF1YWxzT3BlcmFuZFR5cGVCaW5hcnkgb3BlcmF0b3IgJz09JyByZXF1aXJlcyByZWNlaXZlciBjb25zdGFudCAnJyBvZiB0eXBlICdOdWxsJywgJ2Jvb2wnLCAnaW50JywgJ2RvdWJsZScsIG9yICdTdHJpbmcnLCBidXQgd2FzIG9mIHR5cGUgJ193aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZE1ldGhvZEludm9jYXRpb25UaGUgbWV0aG9kICcnIGNhbid0IGJlIGludm9rZWQgb24gJycgd2l0aGluIGEgY29uc3QgY29udGV4dC5fd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRQcm9wZXJ0eUdldFRoZSBwcm9wZXJ0eSAnJyBjYW4ndCBiZSBhY2Nlc3NlZCBvbiAnX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkU3RhdGljSW52b2NhdGlvblRoZSBpbnZvY2F0aW9uIG9mICcnIGlzIG5vdCBhbGxvd2VkIHdpdGhpbiBhIGNvbnN0IGNvbnRleHQuX3dpdGhBcmd1bWVudHNDb25zdEV2YWxJbnZhbGlkU3RyaW5nSW50ZXJwb2xhdGlvbk9wZXJhbmRUaGUgJycgY2FuJ3QgYmUgdXNlZCBhcyBwYXJ0IG9mIGEgc3RyaW5nIGludGVycG9sYXRpb24gd2l0aGluIGEgY29uc3QgY29udGV4dCwgb25seSB2YWx1ZXMgb2YgdHlwZSAnbnVsbCcsICdib29sJywgJ2ludCcsICdkb3VibGUnLCBvciAnU3RyaW5nJyBjYW4gYmUgdXNlZC5fd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEludmFsaWRTeW1ib2xOYW1lVGhlIHN5bWJvbCBuYW1lIG11c3QgYmUgYSB2YWxpZCBwdWJsaWMgRGFydCBtZW1iZXIgbmFtZSwgcHVibGljIGNvbnN0cnVjdG9yIG5hbWUsIG9yIGxpYnJhcnkgbmFtZSwgb3B0aW9uYWxseSBxdWFsaWZpZWQsIGJ1dCB3YXMgJ193aXRoQXJndW1lbnRzQ29uc3RFdmFsSW52YWxpZFR5cGVFeHBlY3RlZCBjb25zdGFudCAnJyB0byBiZSBvZiB0eXBlICdfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbEtleUltcGxlbWVudHNFcXVhbF93aXRoQXJndW1lbnRzQ29uc3RFdmFsTmVnYXRpdmVTaGlmdHN0cmluZzMnIHJlcXVpcmVzIG5vbi1uZWdhdGl2ZSBvcGVyYW5kLCBidXQgd2FzICdfd2l0aEFyZ3VtZW50c0NvbnN0RXZhbE5vbkNvbnN0YW50TGl0ZXJhbENhbid0IGhhdmUgYSBub24tY29uc3RhbnQgIGxpdGVyYWwgd2l0aGluIGEgY29uc3QgY29udGV4dC5fd2l0aEFyZ3VtZW50c0NvbnN0RXZhbE5vbkNvbnN0YW50VmFyaWFibGVHZXRUaGUgdmFyaWFibGUgJycgaXMgbm90IGEgY29uc3RhbnQsIG9ubHkgY29uc3RhbnQgZXhwcmVzc2lvbnMgYXJlIGFsbG93ZWQuX3dpdGhBcmd1bWVudHNDb25zdEV2YWxaZXJvRGl2aXNvcicgcmVxdWlyZXMgbm9uLXplcm8gZGl2aXNvciwgYnV0IGRpdmlzb3Igd2FzICcwJy5fd2l0aEFyZ3VtZW50c0NvbnN0RmllbGRXaXRob3V0SW5pdGlhbGl6ZXJUaGUgY29uc3QgdmFyaWFibGUgJycgbXVzdCBiZSBpbml0aWFsaXplZC5fd2l0aEFyZ3VtZW50c0NvbnN0cnVjdG9yTm90Rm91bmRDb3VsZG4ndCBmaW5kIGNvbnN0cnVjdG9yICdfd2l0aEFyZ3VtZW50c0NvbnN0cnVjdG9yV2l0aFdyb25nTmFtZUNvbnRleHRUaGUgbmFtZSBvZiB0aGUgZW5jbG9zaW5nIGNsYXNzIGlzICdfd2l0aEFyZ3VtZW50c0NvbnRpbnVlVGFyZ2V0T3V0c2lkZUZ1bmN0aW9uQ2FuJ3QgY29udGludWUgYXQgJ193aXRoQXJndW1lbnRzQ291bGROb3RQYXJzZVVyaUNvdWxkbid0IHBhcnNlIFVSSSAnJzoKICBfd2l0aEFyZ3VtZW50c0N5Y2xlSW5UeXBlVmFyaWFibGVzVHlwZSAnJyBpcyBhIGJvdW5kIG9mIGl0c2VsZiB2aWEgJ193aXRoQXJndW1lbnRzQ3ljbGljQ2xhc3NIaWVyYXJjaHknIGlzIGEgc3VwZXJ0eXBlIG9mIGl0c2VsZi5fd2l0aEFyZ3VtZW50c0N5Y2xpY1JlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yc0N5Y2xpYyBkZWZpbml0aW9uIG9mIGZhY3RvcnkgJ193aXRoQXJndW1lbnRzQ3ljbGljVHlwZWRlZlRoZSB0eXBlZGVmICcnIGhhcyBhIHJlZmVyZW5jZSB0byBpdHNlbGYuX3dpdGhBcmd1bWVudHNEZWZhdWx0VmFsdWVJblJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yQ2FuJ3QgaGF2ZSBhIGRlZmF1bHQgdmFsdWUgaGVyZSBiZWNhdXNlIGFueSBkZWZhdWx0IHZhbHVlcyBvZiAnJyB3b3VsZCBiZSB1c2VkIGluc3RlYWQuX3dpdGhBcmd1bWVudHNEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWRDYW4ndCB1c2UgdGhlIG5hbWUgJycgZm9yIGEgZGVmZXJyZWQgbGlicmFyeSwgYXMgdGhlIG5hbWUgaXMgdXNlZCBlbHNld2hlcmUuX3dpdGhBcmd1bWVudHNEZWZlcnJlZFByZWZpeER1cGxpY2F0ZWRDYXVzZScgaXMgdXNlZCBoZXJlLl93aXRoQXJndW1lbnRzRGVmZXJyZWRUeXBlQW5ub3RhdGlvbicgaXMgZGVmZXJyZWQgbG9hZGVkIHZpYSBwcmVmaXggJycgYW5kIGNhbid0IGJlIHVzZWQgYXMgYSB0eXBlIGFubm90YXRpb24uVHJ5IHJlbW92aW5nICdkZWZlcnJlZCcgZnJvbSB0aGUgaW1wb3J0IG9mICcnIG9yIHVzZSBhIHN1cGVydHlwZSBvZiAnJyB0aGF0IGlzbid0IGRlZmVycmVkLl93aXRoQXJndW1lbnRzRGlsbE91dGxpbmVTdW1tYXJ5Y291bnQyX251bTFfbnVtMl9udW0zTm8gY291bnQgcHJvdmlkZWRObyBudW1iZXIgcHJvdmlkZWRudW0xbnVtMm51bTNJbmRleGVkICBsaWJyYXJpZXMgKCBieXRlcykgaW4gbXMsIHRoYXQgaXMsCiBieXRlcy9tcywgYW5kCiBtcy9saWJyYXJpZXMuX3dpdGhBcmd1bWVudHNEaXJlY3RDeWNsZUluVHlwZVZhcmlhYmxlcycgY2FuJ3QgdXNlIGl0c2VsZiBhcyBhIGJvdW5kLl93aXRoQXJndW1lbnRzRHVwbGljYXRlTGFiZWxJblN3aXRjaFN0YXRlbWVudFRoZSBsYWJlbCAnJyB3YXMgYWxyZWFkeSB1c2VkIGluIHRoaXMgc3dpdGNoIHN0YXRlbWVudC5fd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWREZWNsYXJhdGlvbicgaXMgYWxyZWFkeSBkZWNsYXJlZCBpbiB0aGlzIHNjb3BlLl93aXRoQXJndW1lbnRzRHVwbGljYXRlZERlY2xhcmF0aW9uQ2F1c2VQcmV2aW91cyBkZWNsYXJhdGlvbiBvZiAnX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRGVjbGFyYXRpb25TeW50aGV0aWNDYXVzZScgaXMgaW1wbGllZCBieSB0aGlzIGRlZmluaXRpb24uX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRGVjbGFyYXRpb25Vc2UnIGJlY2F1c2UgaXQgaXMgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UuX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkRXhwb3J0dXJpMl91cmkyJyBpcyBleHBvcnRlZCBmcm9tIGJvdGggJ193aXRoQXJndW1lbnRzRHVwbGljYXRlZEV4cG9ydEluVHlwZV93aXRoQXJndW1lbnRzRHVwbGljYXRlZEltcG9ydCcgaXMgaW1wb3J0ZWQgZnJvbSBib3RoICdfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRJbXBvcnRJblR5cGVfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0QSBsaWJyYXJ5IHdpdGggbmFtZSAnJyBpcyBleHBvcnRlZCBtb3JlIHRoYW4gb25jZS5fd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRMaWJyYXJ5RXhwb3J0Q29udGV4dCcgaXMgYWxzbyBleHBvcnRlZCBoZXJlLl93aXRoQXJndW1lbnRzRHVwbGljYXRlZExpYnJhcnlJbXBvcnQnIGlzIGltcG9ydGVkIG1vcmUgdGhhbiBvbmNlLl93aXRoQXJndW1lbnRzRHVwbGljYXRlZExpYnJhcnlJbXBvcnRDb250ZXh0JyBpcyBhbHNvIGltcG9ydGVkIGhlcmUuX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTW9kaWZpZXJUaGUgbW9kaWZpZXIgJycgd2FzIGFscmVhZHkgc3BlY2lmaWVkLl93aXRoQXJndW1lbnRzRHVwbGljYXRlZE5hbWVQcmV2aW91c2x5VXNlZENhbid0IGRlY2xhcmUgJycgYmVjYXVzZSBpdCB3YXMgYWxyZWFkeSB1c2VkIGluIHRoaXMgc2NvcGUuX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkTmFtZVByZXZpb3VzbHlVc2VkQ2F1c2VQcmV2aW91cyB1c2Ugb2YgJ193aXRoQXJndW1lbnRzRHVwbGljYXRlZE5hbWVkQXJndW1lbnREdXBsaWNhdGVkIG5hbWVkIGFyZ3VtZW50ICdfd2l0aEFyZ3VtZW50c0R1cGxpY2F0ZWRQYXJhbWV0ZXJOYW1lRHVwbGljYXRlZCBwYXJhbWV0ZXIgbmFtZSAnX3dpdGhBcmd1bWVudHNEdXBsaWNhdGVkUGFyYW1ldGVyTmFtZUNhdXNlT3RoZXIgcGFyYW1ldGVyIG5hbWVkICdfd2l0aEFyZ3VtZW50c0VudW1Db25zdGFudFNhbWVOYW1lQXNFbmNsb3NpbmdOYW1lIG9mIGVudW0gY29uc3RhbnQgJycgY2FuJ3QgYmUgdGhlIHNhbWUgYXMgdGhlIGVudW0ncyBvd24gbmFtZS5fd2l0aEFyZ3VtZW50c0V4cGVjdGVkQWZ0ZXJCdXRHb3RFeHBlY3RlZCAnJyBhZnRlciB0aGlzLl93aXRoQXJndW1lbnRzRXhwZWN0ZWRCdXRHb3QnIGJlZm9yZSB0aGlzLl93aXRoQXJndW1lbnRzRXhwZWN0ZWRDbGFzc01lbWJlckV4cGVjdGVkIGEgY2xhc3MgbWVtYmVyLCBidXQgZ290ICdfd2l0aEFyZ3VtZW50c0V4cGVjdGVkQ2xhc3NPck1peGluQm9keUEgIG11c3QgaGF2ZSBhIGJvZHksIGV2ZW4gaWYgaXQgaXMgZW1wdHkuX3dpdGhBcmd1bWVudHNFeHBlY3RlZERlY2xhcmF0aW9uRXhwZWN0ZWQgYSBkZWNsYXJhdGlvbiwgYnV0IGdvdCAnX3dpdGhBcmd1bWVudHNFeHBlY3RlZEVudW1Cb2R5RXhwZWN0ZWQgYSBlbnVtIGJvZHksIGJ1dCBnb3QgJ193aXRoQXJndW1lbnRzRXhwZWN0ZWRGdW5jdGlvbkJvZHlFeHBlY3RlZCBhIGZ1bmN0aW9uIGJvZHksIGJ1dCBnb3QgJ193aXRoQXJndW1lbnRzRXhwZWN0ZWRJZGVudGlmaWVyRXhwZWN0ZWQgYW4gaWRlbnRpZmllciwgYnV0IGdvdCAnX3dpdGhBcmd1bWVudHNFeHBlY3RlZEluc3RlYWQnIGluc3RlYWQgb2YgdGhpcy5fd2l0aEFyZ3VtZW50c0V4cGVjdGVkU3RyaW5nRXhwZWN0ZWQgYSBTdHJpbmcsIGJ1dCBnb3QgJ193aXRoQXJndW1lbnRzRXhwZWN0ZWRUb2tlbkV4cGVjdGVkIHRvIGZpbmQgJ193aXRoQXJndW1lbnRzRXhwZWN0ZWRUeXBlRXhwZWN0ZWQgYSB0eXBlLCBidXQgZ290ICdfd2l0aEFyZ3VtZW50c0V4cGVyaW1lbnROb3RFbmFibGVkVGhpcyByZXF1aXJlcyB0aGUgJycgZXhwZXJpbWVudCB0byBiZSBlbmFibGVkLl93aXRoQXJndW1lbnRzRXhwb3J0SGlkZXNFeHBvcnRFeHBvcnQgb2YgJycgKGZyb20gJycpIGhpZGVzIGV4cG9ydCBmcm9tICdfd2l0aEFyZ3VtZW50c0V4dGVuZGluZ0VudW0nIGlzIGFuIGVudW0gYW5kIGNhbid0IGJlIGV4dGVuZGVkIG9yIGltcGxlbWVudGVkLl93aXRoQXJndW1lbnRzRXh0ZW5kaW5nUmVzdHJpY3RlZCcgaXMgcmVzdHJpY3RlZCBhbmQgY2FuJ3QgYmUgZXh0ZW5kZWQgb3IgaW1wbGVtZW50ZWQuX3dpdGhBcmd1bWVudHNFeHRyYW5lb3VzTW9kaWZpZXJDYW4ndCBoYXZlIG1vZGlmaWVyICdUcnkgcmVtb3ZpbmcgJ193aXRoQXJndW1lbnRzRmFzdGFDTElBcmd1bWVudFJlcXVpcmVkRXhwZWN0ZWQgdmFsdWUgYWZ0ZXIgJ193aXRoQXJndW1lbnRzRmZpRGFydFR5cGVNaXNtYXRjaCcgdG8gYmUgYSBzdWJ0eXBlIG9mICdfd2l0aEFyZ3VtZW50c0ZmaUV4dGVuZHNPckltcGxlbWVudHNTZWFsZWRDbGFzcycgY2Fubm90IGJlIGV4dGVuZGVkIG9yIGltcGxlbWVudGVkLl93aXRoQXJndW1lbnRzRmZpRmllbGRBbm5vdGF0aW9uRmllbGQgJycgcmVxdWlyZXMgZXhhY3RseSBvbmUgYW5ub3RhdGlvbiB0byBkZWNsYXJlIGl0cyBDKysgdHlwZSwgd2hpY2ggY2Fubm90IGJlIFZvaWQuIGRhcnQ6ZmZpIFN0cnVjdHMgY2Fubm90IGhhdmUgcmVndWxhciBEYXJ0IGZpZWxkcy5fd2l0aEFyZ3VtZW50c0ZmaUZpZWxkSW5pdGlhbGl6ZXInIGlzIGEgZGFydDpmZmkgUG9pbnRlciB0byBhIHN0cnVjdCBmaWVsZCBhbmQgdGhlcmVmb3JlIGNhbm5vdCBiZSBpbml0aWFsaXplZCBiZWZvcmUgY29uc3RydWN0b3IgZXhlY3V0aW9uLl93aXRoQXJndW1lbnRzRmZpRmllbGROb0Fubm90YXRpb24nIHJlcXVpcmVzIG5vIGFubm90YXRpb24gdG8gZGVjbGFyZSBpdHMgQysrIHR5cGUsIGl0IGlzIGEgUG9pbnRlciB3aGljaCBpcyByZXByZXNlbnRlZCBieSB0aGUgc2FtZSB0eXBlIGluIERhcnQgYW5kIEMrKy5fd2l0aEFyZ3VtZW50c0ZmaU5vdFN0YXRpYyBleHBlY3RzIGEgc3RhdGljIGZ1bmN0aW9uIGFzIHBhcmFtZXRlci4gZGFydDpmZmkgb25seSBzdXBwb3J0cyBjYWxsaW5nIHN0YXRpYyBEYXJ0IGZ1bmN0aW9ucyBmcm9tIGMuX3dpdGhBcmd1bWVudHNGZmlTdHJ1Y3RHZW5lcmljU3RydWN0ICcnIHNob3VsZCBub3QgYmUgZ2VuZXJpYy5fd2l0aEFyZ3VtZW50c0ZmaVR5cGVJbnZhbGlkRXhwZWN0ZWQgdHlwZSAnJyB0byBiZSBhIHZhbGlkIGFuZCBpbnN0YW50aWF0ZWQgc3VidHlwZSBvZiAnTmF0aXZlVHlwZScuX3dpdGhBcmd1bWVudHNGZmlUeXBlTWlzbWF0Y2hfdHlwZTN0eXBlM1BhcnRzdHlwZTMnIHRvIGJlICcnLCB3aGljaCBpcyB0aGUgRGFydCB0eXBlIGNvcnJlc3BvbmRpbmcgdG8gJ193aXRoQXJndW1lbnRzRmZpVHlwZVVuc2l6ZWRNZXRob2QgJycgY2Fubm90IGJlIGNhbGxlZCBvbiBzb21ldGhpbmcgb2YgdHlwZSAnJyBhcyB0aGlzIHR5cGUgaXMgdW5zaXplZC5fd2l0aEFyZ3VtZW50c0ZmaVdyb25nU3RydWN0SW5oZXJpdGFuY2UnIG11c3QgaW5oZXJpdCBmcm9tICdTdHJ1Y3Q8PicuX3dpdGhBcmd1bWVudHNGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWRGaW5hbCBmaWVsZCAnJyBpcyBub3QgaW5pdGlhbGl6ZWQuX3dpdGhBcmd1bWVudHNGaW5hbEZpZWxkTm90SW5pdGlhbGl6ZWRCeUNvbnN0cnVjdG9yJyBpcyBub3QgaW5pdGlhbGl6ZWQgYnkgdGhpcyBjb25zdHJ1Y3Rvci5fd2l0aEFyZ3VtZW50c0ZpbmFsRmllbGRXaXRob3V0SW5pdGlhbGl6ZXJUaGUgZmluYWwgdmFyaWFibGUgJ193aXRoQXJndW1lbnRzRmluYWxJbnN0YW5jZVZhcmlhYmxlQWxyZWFkeUluaXRpYWxpemVkJyBpcyBhIGZpbmFsIGluc3RhbmNlIHZhcmlhYmxlIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5fd2l0aEFyZ3VtZW50c0ZpbmFsSW5zdGFuY2VWYXJpYWJsZUFscmVhZHlJbml0aWFsaXplZENhdXNlJyB3YXMgaW5pdGlhbGl6ZWQgaGVyZS5fd2l0aEFyZ3VtZW50c0ZvckluTG9vcEVsZW1lbnRUeXBlTm90QXNzaWduYWJsZUEgdmFsdWUgb2YgdHlwZSAnJyBjYW4ndCBiZSBhc3NpZ25lZCB0byBhIHZhcmlhYmxlIG9mIHR5cGUgJ193aXRoQXJndW1lbnRzRm9ySW5Mb29wVHlwZU5vdEl0ZXJhYmxlJyB1c2VkIGluIHRoZSAnZm9yJyBsb29wIG11c3QgaW1wbGVtZW50ICdfd2l0aEFyZ3VtZW50c0dlbmVyaWNGdW5jdGlvblR5cGVJbmZlcnJlZEFzQWN0dWFsVHlwZUFyZ3VtZW50VW5leHBlY3RlZCBnZW5lcmljIGZ1bmN0aW9uIHR5cGUgJycgaW5mZXJyZWQgYXMgYSB0eXBlIGFyZ3VtZW50Ll93aXRoQXJndW1lbnRzR2V0dGVyTm90Rm91bmRHZXR0ZXIgbm90IGZvdW5kOiAnX3dpdGhBcmd1bWVudHNJbGxlZ2FsTWl4aW4nIGNhbid0IGJlIG1peGVkIGluLl93aXRoQXJndW1lbnRzSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnMnIGFzIGEgbWl4aW4gYmVjYXVzZSBpdCBoYXMgY29uc3RydWN0b3JzLl93aXRoQXJndW1lbnRzSWxsZWdhbE1peGluRHVlVG9Db25zdHJ1Y3RvcnNDYXVzZVRoaXMgY29uc3RydWN0b3IgcHJldmVudHMgdXNpbmcgJycgYXMgYSBtaXhpbi5fd2l0aEFyZ3VtZW50c0lsbGVnYWxSZWN1cnNpdmVUeXBlSWxsZWdhbCByZWN1cnNpdmUgdHlwZSAnX3dpdGhBcmd1bWVudHNJbXBsZW1lbnRzUmVwZWF0ZWQnIGNhbiBvbmx5IGJlIGltcGxlbWVudGVkIG9uY2UuVHJ5IHJlbW92aW5nICBvZiB0aGUgb2NjdXJyZW5jZXMuX3dpdGhBcmd1bWVudHNJbXBsZW1lbnRzU3VwZXJDbGFzcycgY2FuJ3QgYmUgdXNlZCBpbiBib3RoICdleHRlbmRzJyBhbmQgJ2ltcGxlbWVudHMnIGNsYXVzZXMuX3dpdGhBcmd1bWVudHNJbXBsaWNpdENhbGxPZk5vbk1ldGhvZENhbm5vdCBpbnZva2UgYW4gaW5zdGFuY2Ugb2YgJycgYmVjYXVzZSBpdCBkZWNsYXJlcyAnY2FsbCcgdG8gYmUgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBtZXRob2QuX3dpdGhBcmd1bWVudHNJbXBsaWNpdE1peGluT3ZlcnJpZGVDb250ZXh0T3ZlcnJpZGUgd2FzIGludHJvZHVjZWQgd2hlbiB0aGUgbWl4aW4gJycgd2FzIGFwcGxpZWQgdG8gJ193aXRoQXJndW1lbnRzSW1wb3J0SGlkZXNJbXBvcnRJbXBvcnQgb2YgJycpIGhpZGVzIGltcG9ydCBmcm9tICdfd2l0aEFyZ3VtZW50c0luY29tcGF0aWJsZVJlZGlyZWN0ZWVGdW5jdGlvblR5cGVUaGUgY29uc3RydWN0b3IgZnVuY3Rpb24gdHlwZSAnJyBpc24ndCBhIHN1YnR5cGUgb2YgJ193aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50VHlwZSBhcmd1bWVudCAnJyBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIGJvdW5kICcnIG9mIHRoZSB0eXBlIHZhcmlhYmxlICdfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudEluUmV0dXJuVHlwZScgaW4gdGhlIHJldHVybiB0eXBlLl93aXRoQXJndW1lbnRzSW5jb3JyZWN0VHlwZUFyZ3VtZW50SW5TdXBlcnR5cGVuYW1lM25hbWU0JyBpbiB0aGUgc3VwZXJ0eXBlICcnIG9mIGNsYXNzICdfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudEluU3VwZXJ0eXBlSW5mZXJyZWRJbmZlcnJlZCB0eXBlIGFyZ3VtZW50ICdfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudEluZmVycmVkX3dpdGhBcmd1bWVudHNJbmNvcnJlY3RUeXBlQXJndW1lbnRRdWFsaWZpZWRfd2l0aEFyZ3VtZW50c0luY29ycmVjdFR5cGVBcmd1bWVudFF1YWxpZmllZEluZmVycmVkX3dpdGhBcmd1bWVudHNJbmZlcnJlZFBhY2thZ2VVcmlJbnRlcnByZXRpbmcgdGhpcyBhcyBwYWNrYWdlIFVSSSwgJ193aXRoQXJndW1lbnRzSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZFRyaWVkIHRvIGluaXRpYWxpemUgZnJvbSBhIHByZXZpb3VzIGNvbXBpbGF0aW9uICgpLCBidXQgdGhlIGZpbGUgd2FzIG5vdCBzZWxmLWNvbnRhaW5lZC4gVGhpcyBtaWdodCBiZSBhIGJ1Zy4KClRoZSBEYXJ0IHRlYW0gd291bGQgZ3JlYXRseSBhcHByZWNpYXRlIGl0IGlmIHlvdSB3b3VsZCB0YWtlIGEgbW9tZW50IHRvIHJlcG9ydCB0aGlzIHByb2JsZW0gYXQgaHR0cDovL2RhcnRidWcuY29tL25ldy4KSWYgeW91IGFyZSBjb21mb3J0YWJsZSB3aXRoIGl0LCBpdCB3b3VsZCBpbXByb3ZlIHRoZSBjaGFuY2VzIG9mIGZpeGluZyBhbnkgYnVnIGlmIHlvdSBpbmNsdWRlZCB0aGUgZmlsZSAgaW4geW91ciBlcnJvciByZXBvcnQsIGJ1dCBiZSBhd2FyZSB0aGF0IHRoaXMgZmlsZSBpbmNsdWRlcyB5b3VyIHNvdXJjZSBjb2RlLgpFaXRoZXIgd2F5LCB5b3Ugc2hvdWxkIHByb2JhYmx5IGRlbGV0ZSB0aGUgZmlsZSBzbyBpdCBkb2Vzbid0IHVzZSB1bm5lY2Vzc2FyeSBkaXNrIHNwYWNlLl93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZUZyb21EaWxsTm90U2VsZkNvbnRhaW5lZE5vRHVtcCksIGJ1dCB0aGUgZmlsZSB3YXMgbm90IHNlbGYtY29udGFpbmVkLiBUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3Ll93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW0pLCBidXQgY291bGRuJ3QuCkVycm9yIG1lc3NhZ2Ugd2FzICcnLgpTdGFja3RyYWNlIGluY2x1ZGVkICcnLgpUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LgpJZiB5b3UgYXJlIGNvbWZvcnRhYmxlIHdpdGggaXQsIGl0IHdvdWxkIGltcHJvdmUgdGhlIGNoYW5jZXMgb2YgZml4aW5nIGFueSBidWcgaWYgeW91IGluY2x1ZGVkIHRoZSBmaWxlIF93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZUZyb21EaWxsVW5rbm93blByb2JsZW1Ob0R1bXAnLgpUaGlzIG1pZ2h0IGJlIGEgYnVnLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaXQgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8gcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3Ll93aXRoQXJndW1lbnRzSW5pdGlhbGl6ZXJGb3JTdGF0aWNGaWVsZCcgaXNuJ3QgYW4gaW5zdGFuY2UgZmllbGQgb2YgdGhpcyBjbGFzcy5fd2l0aEFyZ3VtZW50c0luaXRpYWxpemVyT3V0c2lkZUNvbnN0cnVjdG9yT25seSBjb25zdHJ1Y3RvcnMgY2FuIGhhdmUgaW5pdGlhbGl6ZXJzLCBhbmQgJycgaXMgbm90IGEgY29uc3RydWN0b3IuX3dpdGhBcmd1bWVudHNJbml0aWFsaXppbmdGb3JtYWxUeXBlTWlzbWF0Y2hUaGUgdHlwZSBvZiBwYXJhbWV0ZXIgJycsICcnIGlzIG5vdCBhIHN1YnR5cGUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZmllbGQncyB0eXBlLCAnVHJ5IGNoYW5naW5nIHRoZSB0eXBlIG9mIHBhcmFtZXRlciAnJyB0byBhIHN1YnR5cGUgb2YgJ193aXRoQXJndW1lbnRzSW5wdXRGaWxlTm90Rm91bmRJbnB1dCBmaWxlIG5vdCBmb3VuZDogX3dpdGhBcmd1bWVudHNJbnRlZ2VyTGl0ZXJhbElzT3V0T2ZSYW5nZVRoZSBpbnRlZ2VyIGxpdGVyYWwgIGNhbid0IGJlIHJlcHJlc2VudGVkIGluIDY0IGJpdHMuX3dpdGhBcmd1bWVudHNJbnRlcmZhY2VDaGVja0NvbnRleHRCb3RoIG1lbWJlcnMgYXJlIGluaGVyaXRlZCBieSB0aGUgbm9uLWFic3RyYWN0IGNsYXNzICdfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbUNvbnN0cnVjdG9yTm90Rm91bmRObyBjb25zdHJ1Y3RvciBuYW1lZCAnJyBpbiAnX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1Db250ZXh0U2V2ZXJpdHlOb24tY29udGV4dCBtZXNzYWdlIGhhcyBjb250ZXh0IHNldmVyaXR5OiBfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbURlYnVnQWJvcnRDb21waWxhdGlvbiBhYm9ydGVkIGR1ZSB0byBmYXRhbCAnJyBhdDoKX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1Ob0luZmVycmVkVHlwZVN0b3JlZFRoZXJlJ3Mgbm8gaW5mZXJyZWQgdHlwZSBmb3IgJ193aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtTm90Rm91bmRDb3VsZG4ndCBmaW5kICdfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbU5vdEZvdW5kSW5fd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVByaXZhdGVDb25zdHJ1Y3RvckFjY2Vzc0Nhbid0IGFjY2VzcyBwcml2YXRlIGNvbnN0cnVjdG9yICdfd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVN0YWNrTm90RW1wdHkuc3RhY2sgaXNuJ3QgZW1wdHk6CiAgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1TdG9yaW5nTXVsdGlwbGVJbmZlcnJlZFR5cGVzVGhlcmUncyBhbHJlYWR5IGFuIGluZmVycmVkIHR5cGUsICcnLCBmb3IgJ193aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtVW5leHBlY3RlZCcsIGJ1dCBnb3QgJ193aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtVW5oYW5kbGVkVW5oYW5kbGVkIF93aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtVW5pbXBsZW1lbnRlZFVuaW1wbGVtZW50ZWQgX3dpdGhBcmd1bWVudHNJbnRlcm5hbFByb2JsZW1VbnN1cHBvcnRlZFVuc3VwcG9ydGVkIG9wZXJhdGlvbjogJ193aXRoQXJndW1lbnRzSW50ZXJuYWxQcm9ibGVtVXJpTWlzc2luZ1NjaGVtZVRoZSBVUkkgJycgaGFzIG5vIHNjaGVtZS5fd2l0aEFyZ3VtZW50c0ludGVybmFsUHJvYmxlbVZlcmlmaWNhdGlvbkVycm9yVmVyaWZpY2F0aW9uIG9mIHRoZSBnZW5lcmF0ZWQgcHJvZ3JhbSBmYWlsZWQ6Cl93aXRoQXJndW1lbnRzSW50ZXJzZWN0aW9uVHlwZUFzVHlwZUFyZ3VtZW50JywgaXQgY2FuIGJlIGVpdGhlciAnJyBvciAnX3dpdGhBcmd1bWVudHNJbnZhbGlkQXNzaWdubWVudFRyeSBjaGFuZ2luZyB0aGUgdHlwZSBvZiB0aGUgbGVmdCBoYW5kIHNpZGUsIG9yIGNhc3RpbmcgdGhlIHJpZ2h0IGhhbmQgc2lkZSB0byAnX3dpdGhBcmd1bWVudHNJbnZhbGlkQnJlYWtUYXJnZXRfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0RnVuY3Rpb25FeHByVGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24gdHlwZSAnJyBpc24ndCBvZiBleHBlY3RlZCB0eXBlICdfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0TGl0ZXJhbExpc3RUaGUgbGlzdCBsaXRlcmFsIHR5cGUgJ193aXRoQXJndW1lbnRzSW52YWxpZENhc3RMaXRlcmFsTWFwVGhlIG1hcCBsaXRlcmFsIHR5cGUgJ193aXRoQXJndW1lbnRzSW52YWxpZENhc3RMaXRlcmFsU2V0VGhlIHNldCBsaXRlcmFsIHR5cGUgJ193aXRoQXJndW1lbnRzSW52YWxpZENhc3RMb2NhbEZ1bmN0aW9uVGhlIGxvY2FsIGZ1bmN0aW9uIGhhcyB0eXBlICcnIHRoYXQgaXNuJ3Qgb2YgZXhwZWN0ZWQgdHlwZSAnX3dpdGhBcmd1bWVudHNJbnZhbGlkQ2FzdE5ld0V4cHJUaGUgY29uc3RydWN0b3IgcmV0dXJucyB0eXBlICdfd2l0aEFyZ3VtZW50c0ludmFsaWRDYXN0U3RhdGljTWV0aG9kVGhlIHN0YXRpYyBtZXRob2QgaGFzIHR5cGUgJ193aXRoQXJndW1lbnRzSW52YWxpZENhc3RUb3BMZXZlbEZ1bmN0aW9uVGhlIHRvcCBsZXZlbCBmdW5jdGlvbiBoYXMgdHlwZSAnX3dpdGhBcmd1bWVudHNJbnZhbGlkQ29udGludWVUYXJnZXRfd2l0aEFyZ3VtZW50c0ludmFsaWRPcGVyYXRvclRoZSBzdHJpbmcgJycgaXNuJ3QgYSB1c2VyLWRlZmluYWJsZSBvcGVyYXRvci5fd2l0aEFyZ3VtZW50c0ludmFsaWRQYWNrYWdlVXJpSW52YWxpZCBwYWNrYWdlIFVSSSAnX3dpdGhBcmd1bWVudHNJbnZva2VOb25GdW5jdGlvbicgaXNuJ3QgYSBmdW5jdGlvbiBvciBtZXRob2QgYW5kIGNhbid0IGJlIGludm9rZWQuX3dpdGhBcmd1bWVudHNMYWJlbE5vdEZvdW5kQ2FuJ3QgZmluZCBsYWJlbCAnX3dpdGhBcmd1bWVudHNMb2FkTGlicmFyeUhpZGVzTWVtYmVyVGhlIGxpYnJhcnkgJycgZGVmaW5lcyBhIHRvcC1sZXZlbCBtZW1iZXIgbmFtZWQgJ2xvYWRMaWJyYXJ5Jy4gVGhpcyBtZW1iZXIgaXMgaGlkZGVuIGJ5IHRoZSBzcGVjaWFsIG1lbWJlciAnbG9hZExpYnJhcnknIHRoYXQgdGhlIGxhbmd1YWdlIGFkZHMgdG8gc3VwcG9ydCBkZWZlcnJlZCBsb2FkaW5nLl93aXRoQXJndW1lbnRzTG9jYWxEZWZpbml0aW9uSGlkZXNFeHBvcnRMb2NhbCBkZWZpbml0aW9uIG9mICcnIGhpZGVzIGV4cG9ydCBmcm9tICdfd2l0aEFyZ3VtZW50c0xvY2FsRGVmaW5pdGlvbkhpZGVzSW1wb3J0JyBoaWRlcyBpbXBvcnQgZnJvbSAnX3dpdGhBcmd1bWVudHNNZXRob2ROb3RGb3VuZE1ldGhvZCBub3QgZm91bmQ6ICdfd2l0aEFyZ3VtZW50c01pc3NpbmdFeHBsaWNpdFR5cGVBcmd1bWVudHNObyB0eXBlIGFyZ3VtZW50cyBwcm92aWRlZCwgIHBvc3NpYmxlLl93aXRoQXJndW1lbnRzTWlzc2luZ0ltcGxlbWVudGF0aW9uQ2F1c2UnIGlzIGRlZmluZWQgaGVyZS5fd2l0aEFyZ3VtZW50c01pc3NpbmdJbXBsZW1lbnRhdGlvbk5vdEFic3RyYWN0X25hbWVzTm8gbmFtZXMgcHJvdmlkZWRUaGUgbm9uLWFic3RyYWN0IGNsYXNzICcnIGlzIG1pc3NpbmcgaW1wbGVtZW50YXRpb25zIGZvciB0aGVzZSBtZW1iZXJzOgpfd2l0aEFyZ3VtZW50c01pc3NpbmdQYXJ0T2YnIGFzIGEgcGFydCwgYmVjYXVzZSBpdCBoYXMgbm8gJ3BhcnQgb2YnIGRlY2xhcmF0aW9uLl93aXRoQXJndW1lbnRzTWl4aW5BcHBsaWNhdGlvbkluY29tcGF0aWJsZVN1cGVydHlwZScgZG9lc24ndCBpbXBsZW1lbnQgJycgc28gaXQgY2FuJ3QgYmUgdXNlZCB3aXRoICdfd2l0aEFyZ3VtZW50c01peGluSW5mZXJlbmNlTm9NYXRjaGluZ0NsYXNzVHlwZSBwYXJhbWV0ZXJzIGNvdWxkIG5vdCBiZSBpbmZlcnJlZCBmb3IgdGhlIG1peGluICcnIGJlY2F1c2UgJycgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBtaXhpbidzIHN1cGVydHlwZSBjb25zdHJhaW50ICdfd2l0aEFyZ3VtZW50c01vZGlmaWVyT3V0T2ZPcmRlcicgc2hvdWxkIGJlIGJlZm9yZSB0aGUgbW9kaWZpZXIgJ193aXRoQXJndW1lbnRzTmFtZWRNaXhpbk92ZXJyaWRlQ29udGV4dE92ZXJyaWRlIHdhcyBpbnRyb2R1Y2VkIGluIHRoZSBtaXhpbiBhcHBsaWNhdGlvbiBjbGFzcyAnX3dpdGhBcmd1bWVudHNOb0Zvcm1hbHNUcnkgYWRkaW5nICcoKScgYWZ0ZXIgJycsIG9yIGFkZCAnZ2V0JyBiZWZvcmUgJycgdG8gZGVjbGFyZSBhIGdldHRlci5fd2l0aEFyZ3VtZW50c05vU3VjaE5hbWVkUGFyYW1ldGVyTm8gbmFtZWQgcGFyYW1ldGVyIHdpdGggdGhlIG5hbWUgJ193aXRoQXJndW1lbnRzTm9uQXNjaWlJZGVudGlmaWVyY2hhcmFjdGVycnVuZXNOb3QgYSBjaGFyYWN0ZXIgJ1RoZSBub24tQVNDSUkgY2hhcmFjdGVyICcnICgpIGNhbid0IGJlIHVzZWQgaW4gaWRlbnRpZmllcnMsIG9ubHkgaW4gc3RyaW5ncyBhbmQgY29tbWVudHMuX3dpdGhBcmd1bWVudHNOb25Bc2NpaVdoaXRlc3BhY2VUaGUgbm9uLUFTQ0lJIHNwYWNlIGNoYXJhY3RlciBfd2l0aEFyZ3VtZW50c05vblNpbXBsZUJvdW5kVmlhUmVmZXJlbmNlQm91bmQgb2YgdGhpcyB2YXJpYWJsZSByZWZlcmVuY2VzIHJhdyB0eXBlICdfd2l0aEFyZ3VtZW50c05vblNpbXBsZUJvdW5kVmlhVmFyaWFibGVCb3VuZCBvZiB0aGlzIHZhcmlhYmxlIHJlZmVyZW5jZXMgdmFyaWFibGUgJycgZnJvbSB0aGUgc2FtZSBkZWNsYXJhdGlvbi5fd2l0aEFyZ3VtZW50c05vdEFQcmVmaXhJblR5cGVBbm5vdGF0aW9uJyBjYW4ndCBiZSB1c2VkIGFzIGEgdHlwZSBiZWNhdXNlICcnIGRvZXNuJ3QgcmVmZXIgdG8gYW4gaW1wb3J0IHByZWZpeC5fd2l0aEFyZ3VtZW50c05vdEFUeXBlJyBpc24ndCBhIHR5cGUuX3dpdGhBcmd1bWVudHNOb3RCaW5hcnlPcGVyYXRvcicgaXNuJ3QgYSBiaW5hcnkgb3BlcmF0b3IuX3dpdGhBcmd1bWVudHNOb3RDb25zdGFudEV4cHJlc3Npb24gaXMgbm90IGEgY29uc3RhbnQgZXhwcmVzc2lvbi5fd2l0aEFyZ3VtZW50c09wZXJhdG9yTWludXNQYXJhbWV0ZXJNaXNtYXRjaE9wZXJhdG9yICcnIHNob3VsZCBoYXZlIHplcm8gb3Igb25lIHBhcmFtZXRlci5fd2l0aEFyZ3VtZW50c09wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gwJyBzaG91bGRuJ3QgaGF2ZSBhbnkgcGFyYW1ldGVycy5fd2l0aEFyZ3VtZW50c09wZXJhdG9yUGFyYW1ldGVyTWlzbWF0Y2gxJyBzaG91bGQgaGF2ZSBleGFjdGx5IG9uZSBwYXJhbWV0ZXIuX3dpdGhBcmd1bWVudHNPcGVyYXRvclBhcmFtZXRlck1pc21hdGNoMicgc2hvdWxkIGhhdmUgZXhhY3RseSB0d28gcGFyYW1ldGVycy5fd2l0aEFyZ3VtZW50c092ZXJyaWRkZW5NZXRob2RDYXVzZVRoaXMgaXMgdGhlIG92ZXJyaWRkZW4gbWV0aG9kICgnJykuX3dpdGhBcmd1bWVudHNPdmVycmlkZUZld2VyTmFtZWRBcmd1bWVudHMnIGhhcyBmZXdlciBuYW1lZCBhcmd1bWVudHMgdGhhbiB0aG9zZSBvZiBvdmVycmlkZGVuIG1ldGhvZCAnX3dpdGhBcmd1bWVudHNPdmVycmlkZUZld2VyUG9zaXRpb25hbEFyZ3VtZW50cycgaGFzIGZld2VyIHBvc2l0aW9uYWwgYXJndW1lbnRzIHRoYW4gdGhvc2Ugb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJ193aXRoQXJndW1lbnRzT3ZlcnJpZGVNaXNtYXRjaE5hbWVkUGFyYW1ldGVyJyBkb2Vzbid0IGhhdmUgdGhlIG5hbWVkIHBhcmFtZXRlciAnJyBvZiBvdmVycmlkZGVuIG1ldGhvZCAnX3dpdGhBcmd1bWVudHNPdmVycmlkZU1vcmVSZXF1aXJlZEFyZ3VtZW50cycgaGFzIG1vcmUgcmVxdWlyZWQgYXJndW1lbnRzIHRoYW4gdGhvc2Ugb2Ygb3ZlcnJpZGRlbiBtZXRob2QgJ193aXRoQXJndW1lbnRzT3ZlcnJpZGVUeXBlTWlzbWF0Y2hQYXJhbWV0ZXJUaGUgcGFyYW1ldGVyICcnIG9mIHRoZSBtZXRob2QgJycgaGFzIHR5cGUgJycsIHdoaWNoIGRvZXMgbm90IG1hdGNoIHRoZSBjb3JyZXNwb25kaW5nIHR5cGUsICcnLCBpbiB0aGUgb3ZlcnJpZGRlbiBtZXRob2QsICdDaGFuZ2UgdG8gYSBzdXBlcnR5cGUgb2YgJycsIG9yLCBmb3IgYSBjb3ZhcmlhbnQgcGFyYW1ldGVyLCBhIHN1YnR5cGUuX3dpdGhBcmd1bWVudHNPdmVycmlkZVR5cGVNaXNtYXRjaFJldHVyblR5cGVUaGUgcmV0dXJuIHR5cGUgb2YgdGhlIG1ldGhvZCAnJyBpcyAnJywgd2hpY2ggZG9lcyBub3QgbWF0Y2ggdGhlIHJldHVybiB0eXBlLCAnJywgb2YgdGhlIG92ZXJyaWRkZW4gbWV0aG9kLCAnQ2hhbmdlIHRvIGEgc3VidHlwZSBvZiAnX3dpdGhBcmd1bWVudHNPdmVycmlkZVR5cGVWYXJpYWJsZXNNaXNtYXRjaERlY2xhcmVkIHR5cGUgdmFyaWFibGVzIG9mICcnIGRvZXNuJ3QgbWF0Y2ggdGhvc2Ugb24gb3ZlcnJpZGRlbiBtZXRob2QgJ193aXRoQXJndW1lbnRzUGFja2FnZU5vdEZvdW5kQ291bGQgbm90IHJlc29sdmUgdGhlIHBhY2thZ2UgJ193aXRoQXJndW1lbnRzUGFja2FnZXNGaWxlRm9ybWF0UHJvYmxlbSBpbiBwYWNrYWdlcyBjb25maWd1cmF0aW9uIGZpbGU6IF93aXRoQXJndW1lbnRzUGFydE9mSW5MaWJyYXJ5Q2FuJ3QgaW1wb3J0ICcnLCBiZWNhdXNlIGl0IGhhcyBhICdwYXJ0IG9mJyBkZWNsYXJhdGlvbi5UcnkgcmVtb3ZpbmcgdGhlICdwYXJ0IG9mJyBkZWNsYXJhdGlvbiwgb3IgdXNpbmcgJycgYXMgYSBwYXJ0Ll93aXRoQXJndW1lbnRzUGFydE9mTGlicmFyeU5hbWVNaXNtYXRjaFVzaW5nICcnIGFzIHBhcnQgb2YgJycgYnV0IGl0cyAncGFydCBvZicgZGVjbGFyYXRpb24gc2F5cyAnX3dpdGhBcmd1bWVudHNQYXJ0T2ZVcmlNaXNtYXRjaHVyaTNfdXJpM193aXRoQXJndW1lbnRzUGFydE9mVXNlVXJpX3dpdGhBcmd1bWVudHNQYXJ0VHdpY2UnIGFzIGEgcGFydCBtb3JlIHRoYW4gb25jZS5fd2l0aEFyZ3VtZW50c1BhdGNoSW5qZWN0aW9uRmFpbGVkQ2FuJ3QgaW5qZWN0ICcnIGludG8gJ193aXRoQXJndW1lbnRzUmVkaXJlY3RpbmdGYWN0b3J5SW5jb21wYXRpYmxlVHlwZUFyZ3VtZW50JyBkb2Vzbid0IGV4dGVuZCAnX3dpdGhBcmd1bWVudHNSZWRpcmVjdGlvblRhcmdldE5vdEZvdW5kUmVkaXJlY3Rpb24gY29uc3RydWN0b3IgdGFyZ2V0IG5vdCBmb3VuZDogJ193aXRoQXJndW1lbnRzU2RrUm9vdE5vdEZvdW5kU0RLIHJvb3QgZGlyZWN0b3J5IG5vdCBmb3VuZDogX3dpdGhBcmd1bWVudHNTZGtTcGVjaWZpY2F0aW9uTm90Rm91bmRTREsgbGlicmFyaWVzIHNwZWNpZmljYXRpb24gbm90IGZvdW5kOiBfd2l0aEFyZ3VtZW50c1Nka1N1bW1hcnlOb3RGb3VuZFNESyBzdW1tYXJ5IG5vdCBmb3VuZDogX3dpdGhBcmd1bWVudHNTZXR0ZXJOb3RGb3VuZFNldHRlciBub3QgZm91bmQ6ICdfd2l0aEFyZ3VtZW50c1NvdXJjZUJvZHlTdW1tYXJ5QnVpbHQgYm9kaWVzIGZvciAgY29tcGlsYXRpb24gdW5pdHMgKCBtcy9jb21waWxhdGlvbiB1bml0Ll93aXRoQXJndW1lbnRzU291cmNlT3V0bGluZVN1bW1hcnlCdWlsdCBvdXRsaW5lcyBmb3IgX3dpdGhBcmd1bWVudHNTcHJlYWRFbGVtZW50VHlwZU1pc21hdGNoQ2FuJ3QgYXNzaWduIHNwcmVhZCBlbGVtZW50cyBvZiB0eXBlICcnIHRvIGNvbGxlY3Rpb24gZWxlbWVudHMgb2YgdHlwZSAnX3dpdGhBcmd1bWVudHNTcHJlYWRNYXBFbnRyeUVsZW1lbnRLZXlUeXBlTWlzbWF0Y2hDYW4ndCBhc3NpZ24gc3ByZWFkIGVudHJ5IGtleXMgb2YgdHlwZSAnJyB0byBtYXAgZW50cnkga2V5cyBvZiB0eXBlICdfd2l0aEFyZ3VtZW50c1NwcmVhZE1hcEVudHJ5RWxlbWVudFZhbHVlVHlwZU1pc21hdGNoQ2FuJ3QgYXNzaWduIHNwcmVhZCBlbnRyeSB2YWx1ZXMgb2YgdHlwZSAnJyB0byBtYXAgZW50cnkgdmFsdWVzIG9mIHR5cGUgJ193aXRoQXJndW1lbnRzU3ByZWFkTWFwRW50cnlUeXBlTWlzbWF0Y2hVbmV4cGVjdGVkIHR5cGUgJycgb2YgYSBtYXAgc3ByZWFkIGVudHJ5LiAgRXhwZWN0ZWQgJ2R5bmFtaWMnIG9yIGEgTWFwLl93aXRoQXJndW1lbnRzU3ByZWFkVHlwZU1pc21hdGNoJyBvZiBhIHNwcmVhZC4gIEV4cGVjdGVkICdkeW5hbWljJyBvciBhbiBJdGVyYWJsZS5fd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb0NvbnN0cnVjdG9yU3VwZXJjbGFzcyBoYXMgbm8gY29uc3RydWN0b3IgbmFtZWQgJ193aXRoQXJndW1lbnRzU3VwZXJjbGFzc0hhc05vRGVmYXVsdENvbnN0cnVjdG9yVGhlIHN1cGVyY2xhc3MsICcnLCBoYXMgbm8gdW5uYW1lZCBjb25zdHJ1Y3RvciB0aGF0IHRha2VzIG5vIGFyZ3VtZW50cy5fd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NIYXNOb0dldHRlclN1cGVyY2xhc3MgaGFzIG5vIGdldHRlciBuYW1lZCAnX3dpdGhBcmd1bWVudHNTdXBlcmNsYXNzSGFzTm9NZXRob2RTdXBlcmNsYXNzIGhhcyBubyBtZXRob2QgbmFtZWQgJ193aXRoQXJndW1lbnRzU3VwZXJjbGFzc0hhc05vU2V0dGVyU3VwZXJjbGFzcyBoYXMgbm8gc2V0dGVyIG5hbWVkICdfd2l0aEFyZ3VtZW50c1N1cGVyY2xhc3NNZXRob2RBcmd1bWVudE1pc21hdGNoU3VwZXJjbGFzcyBkb2Vzbid0IGhhdmUgYSBtZXRob2QgbmFtZWQgJycgd2l0aCBtYXRjaGluZyBhcmd1bWVudHMuX3dpdGhBcmd1bWVudHNTdXBlcnR5cGVJc0lsbGVnYWwnIGNhbid0IGJlIHVzZWQgYXMgc3VwZXJ0eXBlLl93aXRoQXJndW1lbnRzU3VwZXJ0eXBlSXNUeXBlVmFyaWFibGVUaGUgdHlwZSB2YXJpYWJsZSAnX3dpdGhBcmd1bWVudHNTd2l0Y2hFeHByZXNzaW9uTm90QXNzaWduYWJsZScgb2YgdGhlIHN3aXRjaCBleHByZXNzaW9uIGlzbid0IGFzc2lnbmFibGUgdG8gdGhlIHR5cGUgJycgb2YgdGhpcyBjYXNlIGV4cHJlc3Npb24uX3dpdGhBcmd1bWVudHNUaGlzQWNjZXNzSW5GaWVsZEluaXRpYWxpemVyQ2FuJ3QgYWNjZXNzICd0aGlzJyBpbiBhIGZpZWxkIGluaXRpYWxpemVyIHRvIHJlYWQgJ193aXRoQXJndW1lbnRzVGhpc09yU3VwZXJBY2Nlc3NJbkZpZWxkSW5pdGlhbGl6ZXJDYW4ndCBhY2Nlc3MgJycgaW4gYSBmaWVsZCBpbml0aWFsaXplci5fd2l0aEFyZ3VtZW50c1Rvb0Zld0FyZ3VtZW50c1RvbyBmZXcgcG9zaXRpb25hbCBhcmd1bWVudHM6ICByZXF1aXJlZCwgIGdpdmVuLl93aXRoQXJndW1lbnRzVG9vTWFueUFyZ3VtZW50c1RvbyBtYW55IHBvc2l0aW9uYWwgYXJndW1lbnRzOiAgYWxsb3dlZCwgYnV0ICBmb3VuZC5fd2l0aEFyZ3VtZW50c1R5cGVBcmd1bWVudE1pc21hdGNoRXhwZWN0ZWQgIHR5cGUgYXJndW1lbnRzLl93aXRoQXJndW1lbnRzVHlwZUFyZ3VtZW50c09uVHlwZVZhcmlhYmxlQ2FuJ3QgdXNlIHR5cGUgYXJndW1lbnRzIHdpdGggdHlwZSB2YXJpYWJsZSAnX3dpdGhBcmd1bWVudHNUeXBlTm90Rm91bmQnIG5vdCBmb3VuZC5fd2l0aEFyZ3VtZW50c1R5cGVPcmlnaW4nIGlzIGZyb20gJ193aXRoQXJndW1lbnRzVHlwZU9yaWdpbldpdGhGaWxlVXJpX3dpdGhBcmd1bWVudHNUeXBlVmFyaWFibGVEdXBsaWNhdGVkTmFtZUNhdXNlVGhlIG90aGVyIHR5cGUgdmFyaWFibGUgbmFtZWQgJ193aXRoQXJndW1lbnRzVW5kZWZpbmVkR2V0dGVyVGhlIGdldHRlciAnJyBpc24ndCBkZWZpbmVkIGZvciB0aGUgY2xhc3MgJ1RyeSBjb3JyZWN0aW5nIHRoZSBuYW1lIHRvIHRoZSBuYW1lIG9mIGFuIGV4aXN0aW5nIGdldHRlciwgb3IgZGVmaW5pbmcgYSBnZXR0ZXIgb3IgZmllbGQgbmFtZWQgJ193aXRoQXJndW1lbnRzVW5kZWZpbmVkTWV0aG9kVHJ5IGNvcnJlY3RpbmcgdGhlIG5hbWUgdG8gdGhlIG5hbWUgb2YgYW4gZXhpc3RpbmcgbWV0aG9kLCBvciBkZWZpbmluZyBhIG1ldGhvZCBuYW1lZCAnX3dpdGhBcmd1bWVudHNVbmRlZmluZWRTZXR0ZXJUaGUgc2V0dGVyICdUcnkgY29ycmVjdGluZyB0aGUgbmFtZSB0byB0aGUgbmFtZSBvZiBhbiBleGlzdGluZyBzZXR0ZXIsIG9yIGRlZmluaW5nIGEgc2V0dGVyIG9yIGZpZWxkIG5hbWVkICdfd2l0aEFyZ3VtZW50c1VuZXhwZWN0ZWRUb2tlblVuZXhwZWN0ZWQgdG9rZW4gJ193aXRoQXJndW1lbnRzVW5tYXRjaGVkVG9rZW5DYW4ndCBmaW5kICcnIHRvIG1hdGNoICdfd2l0aEFyZ3VtZW50c1VucmVzb2x2ZWRQcmVmaXhJblR5cGVBbm5vdGF0aW9uJyBpc24ndCBkZWZpbmVkLl93aXRoQXJndW1lbnRzVW5zcGVjaWZpZWRfd2l0aEFyZ3VtZW50c1Vuc3VwcG9ydGVkT3BlcmF0b3InIG9wZXJhdG9yIGlzIG5vdCBzdXBwb3J0ZWQuX3dpdGhBcmd1bWVudHNVbnRlcm1pbmF0ZWRTdHJpbmdTdHJpbmcgc3RhcnRpbmcgd2l0aCAgbXVzdCBlbmQgd2l0aCBfd2l0aEFyZ3VtZW50c1VudHJhbnNsYXRhYmxlVXJpTm90IGZvdW5kOiAnX3dpdGhBcmd1bWVudHNVc2VPZkRlcHJlY2F0ZWRJZGVudGlmaWVyJyBpcyBkZXByZWNhdGVkLl93aXRoQXJndW1lbnRzV2ViTGl0ZXJhbENhbm5vdEJlUmVwcmVzZW50ZWRFeGFjdGx5IGNhbid0IGJlIHJlcHJlc2VudGVkIGV4YWN0bHkgaW4gSmF2YVNjcmlwdC5UcnkgY2hhbmdpbmcgdGhlIGxpdGVyYWwgdG8gc29tZXRoaW5nIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGluIEphdmFzY3JpcHQuIEluIEphdmFzY3JpcHQgIGlzIHRoZSBuZWFyZXN0IHZhbHVlIHRoYXQgY2FuIGJlIHJlcHJlc2VudGVkIGV4YWN0bHkuZmFzdGEuc2V2ZXJpdHllcnJvckxlZ2FjeVdhcm5pbmdpbnRlcm5hbFByb2JsZW1zZXZlcml0eUVudW1OYW1lc0NPTlRFWFRFUlJPUkVSUk9SX0xFR0FDWV9XQVJOSU5HSUdOT1JFRElOVEVSTkFMX1BST0JMRU1XQVJOSU5Hc2V2ZXJpdHlFbnVtVmFsdWVzc2V2ZXJpdHlQcmVmaXhlc0Vycm9ySW50ZXJuYWwgcHJvYmxlbVdhcm5pbmdDb250ZXh0c2V2ZXJpdHlUZXh0c2ludGVybmFsIHByb2JsZW1mcm9udF9lbmQua2VybmVsX2dlbmVyYXRvcl9pbXBsd2l0aENyYXNoUmVwb3J0aW5nRGlsbFRhcmdldEtlcm5lbFRhcmdldHByaW50Q29tcG9uZW50VGV4dHNlcmlhbGl6ZUNvbXBvbmVudHZlcmlmeUNvbXBvbmVudExvYWRlckNvbXBpbGVyUmVzdWx0ZGVwc2tlcm5lbFRhcmdldEZvclRlc3RpbmdnZW5lcmF0ZUtlcm5lbGJ1aWxkU3VtbWFyeWJ1aWxkQ29tcG9uZW50dHJ1bmNhdGVTdW1tYXJ5aW5jbHVkZU9mZnNldHNyZXRhaW5EYXRhRm9yVGVzdGluZ2Zzc291cmNlTG9hZGVydXJpVHJhbnNsYXRvcmRpbGxUYXJnZXRleHRlcm5hbExpYnN0b1NldGV4Y2x1ZGVkbG9hZGVyYXBwZW5kTGlicmFyaWVzZmlsdGVyaW5wdXRTdW1tYXJ5YnVpbGRPdXRsaW5lc2tlcm5lbFRhcmdldHNldEVudHJ5UG9pbnRzc3VtbWFyeUNvbXBvbmVudGxpYnJhcnlGaWx0ZXJpc1NvdXJjZUxpYnJhcnl0cmltbWVkU3VtbWFyeUNvbXBvbmVudFRyYW5zZm9ybWVkIG91dGxpbmVpbmNsdWRlU291cmNlc0dlbmVyYXRlZCBvdXRsaW5lR2VuZXJhdGVkIGNvbXBvbmVudGN1cnJlbnRVcmlGb3JDcmFzaFJlcG9ydGluZ2Zhc3RhLnNjYW5uZXJ1bmljb2RlUmVwbGFjZW1lbnRDaGFyYWN0ZXJSdW5lTGFuZ3VhZ2VWZXJzaW9uQ2hhbmdlZFNjYW5uZXJDb25maWd1cmF0aW9uU3RyaW5nU2Nhbm5lclV0ZjhCeXRlc1NjYW5uZXJzY2FubmVyUmVjb3ZlcnlMYW5ndWFnZVZlcnNpb25Ub2tlbmlzQmluYXJ5T3BlcmF0b3Jpc1Rlcm5hcnlPcGVyYXRvcmlzVW5hcnlPcGVyYXRvcmJ1aWxkVW5leHBlY3RlZENoYXJhY3RlclRva2VuRU9GX1RPS0VOS2V5d29yZFJlY292ZXJ0b2tlbnNTY2FubmVyaGFzRXJyb3JzY29uZmlndXJhdGlvbmNvbmZpZ3Rva2VuaXplU2Nhbm5lclJlc3VsdHVuaWNvZGVSZXBsYWNlbWVudENoYXJhY3RlcnNjYW5pbmNsdWRlQ29tbWVudHNsYW5ndWFnZVZlcnNpb25DaGFuZ2VkW2J5dGVzXTogdGhlIGxhc3QgYnl0ZSBtdXN0IGJlIG51bGwuc2Nhbm5lcnNjYW5TdHJpbmdzb3VyY2UgbXVzdCBub3QgYmUgbnVsbF90b2tlbml6ZUFuZFJlY292ZXJlbmNvZGVmYXN0YS5yZWRpcmVjdGluZ19mYWN0b3J5X2JvZHlTdWJzdGl0dXRpb25FbnN1cmVMb2FkZWRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5aW50ZXJuYWx1bnJlc29sdmVkdW5yZXNvbHZlZE5hbWVib2R5RXhwcmVzc2lvbmdldFZhbHVlcmVzdG9yZUZyb21EaWxsZW5jb2RlVHlwZUFyZ3VtZW50c3Zhck5hbWVQcmVmaXgjdHlwZUFyZ2RlY29kZVR5cGVBcmd1bWVudHNlbmNvZGVkUmVkaXJlY3Rpb25UYXJnZXRsZXROYW1laGVscGVyaXNMb2FkZWRnZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5Z2V0UmVkaXJlY3Rpb25UYXJnZXR0b3J0b2lzZXRvcnRvaXNlQm9keWhhcmVlbnN1cmVMb2FkZWRoYXJlQm9keW5leHRUb3J0b2lzZW5leHRUeXBlQXJndW1lbnRzc3VidHlwZUFyZ3VtZW50Q291bnRuZXh0VHlwZUFyZ3VtZW50Q291bnRJbmNyZW1lbnRhbENvbXBpbGVyd29ya2VySW5wdXRDYWNoZWluY3JlbWVudGFsQ29tcGlsZXJXb3JrZXJJbnB1dENvbXBvbmVudGRpZ2VzdGRpZ2VzdHNFcXVhbGZyb250X2VuZC5rZXJuZWxfZ2VuZXJhdG9ya2VybmVsRm9yUHJvZ3JhbUludGVybmFscE9wdGlvbnNrZXJuZWxGb3JDb21wb25lbnRzb3VyY2VzZnJvbnRfZW5kLnN0YW5kYXJkX2ZpbGVfc3lzdGVtaW9pbnN0YW5jZVN0YW5kYXJkRmlsZVN5c3RlbSBvbmx5IHN1cHBvcnRzIGZpbGU6KiBhbmQgZGF0YToqIFVSSXNfSW9GaWxlU3lzdGVtRW50aXR5X3RvRmlsZVN5c3RlbUV4Y2VwdGlvbm9zTWVzc2FnZWNvbnRlbnRBc0J5dGVzY29udGVudEFzU3RyaW5nZm9yY2VCdWlsZERpcnZtRGlyZWN0b3J5L2Jpbi8uLi8uLi8uLi9saWIvX2ludGVybmFsL3RyYW5zbGF0ZVNka29yZy1kYXJ0bGFuZy1zZGsvc2RrLy4uL3Nkay9saWIvbGlicmFyaWVzLmpzb25zZGsvb3JnLWRhcnRsYW5nLXNkazovLy9zZGsvaXNFeGlzdGluZ0ZpbGVmYXN0YS5vcGVyYXRvcnNPcGVyYXRvci5hZGRPcGVyYXRvci5iaXR3aXNlQW5kT3BlcmF0b3IuYml0d2lzZU5vdE9wZXJhdG9yLmJpdHdpc2VPck9wZXJhdG9yLmJpdHdpc2VYb3JPcGVyYXRvci5kaXZpZGVPcGVyYXRvci5lcXVhbHNPcGVyYXRvci5ncmVhdGVyVGhhbk9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWxzT3BlcmF0b3IuaW5kZXhHZXRPcGVyYXRvci5pbmRleFNldE9wZXJhdG9yLmxlZnRTaGlmdE9wZXJhdG9yLmxlc3NUaGFuT3BlcmF0b3IubGVzc1RoYW5FcXVhbHNPcGVyYXRvci5tb2R1bG9PcGVyYXRvci5tdWx0aXBseU9wZXJhdG9yLnJpZ2h0U2hpZnRPcGVyYXRvci50cmlwbGVTaGlmdE9wZXJhdG9yLnN1YnRyYWN0T3BlcmF0b3IudHJ1bmNhdGluZ0RpdmlkZU9wZXJhdG9yLnVuYXJ5TWludXNiaXR3aXNlQW5kYml0d2lzZU5vdGJpdHdpc2VPcmJpdHdpc2VYb3JkaXZpZGVlcXVhbHNncmVhdGVyVGhhbmdyZWF0ZXJUaGFuRXF1YWxzaW5kZXhHZXRpbmRleFNldGxlZnRTaGlmdGxlc3NUaGFubGVzc1RoYW5FcXVhbHNtb2R1bG9tdWx0aXBseXJpZ2h0U2hpZnRzdWJ0cmFjdHRydW5jYXRpbmdEaXZpZGV1bmFyeU1pbnVzJT4+Pm9wZXJhdG9yVG9TdHJpbmdvcGVyYXRvclJlcXVpcmVkQXJndW1lbnRDb3VudGZhc3RhLnBhcnNlci5hc3luY19tb2RpZmllckFzeW5jTW9kaWZpZXIuU3luY0FzeW5jTW9kaWZpZXIuU3luY1N0YXJBc3luY01vZGlmaWVyLkFzeW5jQXN5bmNNb2RpZmllci5Bc3luY1N0YXJmYXN0YS5zY2FubmVyLmNoYXJhY3RlcnMkRU9GJFNUWCRCUyRWVEFCJEZGJFNQQUNFJEJBTkckUEVSQ0VOVCRBTVBFUlNBTkQkU1EkT1BFTl9QQVJFTiRDTE9TRV9QQVJFTiRTVEFSJFBMVVMkQ09NTUEkTUlOVVMkUEVSSU9EJFNMQVNIJDEkMiQzJDQkNSQ2JDckOCRDT0xPTiRTRU1JQ09MT04kTFQkRVEkR1QkUVVFU1RJT04kQVQkQiRDJEQkRSRGJEckSCRJJEokSyRMJE0kTiRPJFAkUSRSJFMkVCRVJFYkVyRYJFkkT1BFTl9TUVVBUkVfQlJBQ0tFVCRDTE9TRV9TUVVBUkVfQlJBQ0tFVCRDQVJFVCRCQUNLUElORyRiJGMkZCRlJGYkaCRpJGokayRsJG0kbiRvJHAkcSRyJHQkdSR2JHckeCR5JE9QRU5fQ1VSTFlfQlJBQ0tFVCRCQVIkQ0xPU0VfQ1VSTFlfQlJBQ0tFVCRUSUxERSROQlNQJEZJUlNUX1NVUlJPR0FURSRMQVNUX1NVUlJPR0FURSRMQVNUX0NPREVfUE9JTlRpc0RpZ2l0Y2hhcmFjdGVyQ29kZWlzSGV4RGlnaXRoZXhEaWdpdFZhbHVlaGV4RGlnaXRpc1VuaWNvZGVTY2FsYXJWYWx1ZWlzVXRmMTZMZWFkU3Vycm9nYXRlaXNVdGYxNlRyYWlsU3Vycm9nYXRlZmFzdGEudXRpbC5saW5rTGlua0J1aWxkZXJJbXBsZW1lbnRhdGlvbkxpbmtJdGVyYXRvck1hcHBlZExpbmtJdGVyYWJsZW5vIGVsZW1lbnRzZWxlbWVudHNlcGFyYXRlZEJ5c2xvd0xlbmd0aGxpbmtmbm1hcFRvTGlzdHJldmVyc2VyZXZlcnNlUHJlcGVuZEFsbGZyb21za2lwSW5kZXggIG91dCBvZiByYW5nZUxpbmsuaGFzaENvZGVnZXQ6bGVuZ3RoTm8gZWxlbWVudHNNb3JlIHRoYW4gb25lIGVsZW1lbnRldmVyeV91bnN1cHBvcnRlZGNhc3RlbGVtZW50QXRmaXJzdFdoZXJlb3JFbHNlaW5pdGlhbFZhbHVlZm9sbG93ZWRCeWdldDpsYXN0bGFzdFdoZXJlcmVkdWNlcmV0eXBlc2luZ2xlV2hlcmVza2lwV2hpbGV0YWtldGFrZVdoaWxld2hlcmVUeXBlbWV0aG9kX3JlZGlyZWN0aW5nIyN0eXBlQXJnMGZhc3RhLnV0aWwubGlua19pbXBsZW1lbnRhdGlvbkl0ZXJhYmxlQmFzZVRyYW5zZm9ybWF0aW9uU19saW5rTWFwcGVkTGlua0l0ZXJhdG9yX3RyYW5zZm9ybWF0aW9uWyAgXW15RWxlbWVudHNMaW5rRW50cnkuaGFzaENvZGVsYXN0TGlua2Zhc3RhLnV0aWwucmVsYXRpdml6ZWJhc2VlcXVhbHNOQ1N0b0xvd2VyQ2FzZW5vcm1hbGl6ZXVzZXJJbmZvaG9zdHBvcnRxdWVyeWZyYWdtZW50bGFzdEluZGV4T2Z1cmlQYXJ0c2Jhc2VQYXJ0c2NvbW1vbm5ld19hcGlDb21waWxlcklucHV0UHJvdmlkZXJSZWFkU3RyaW5nRnJvbVVyaUNvbXBpbGVyT3V0cHV0UHJvdmlkZXJEaWFnbm9zdGljSGFuZGxlckhJTlRWRVJCT1NFX0lORk9DUkFTSGxlZ19hcGlpbXBsR2VuZXJpY1Rhc2tNZWFzdXJlckNvbXBpbGVySW1wbG1lYXN1cmVydXNlckhhbmRsZXJUYXNrdXNlclByb3ZpZGVyVGFza21ha2VSZXBvcnRlcnRhc2tzRGlhZ25vc3RpYyBoYW5kbGVySW5wdXQgcHJvdmlkZXJlbmFibGVUYXNrTWVhc3VyZW1lbnRzbG9nY2FsbFVzZXJIYW5kbGVyc2V0dXBTZGtlbnZzdXBwb3J0ZWRMaWJyYXJpZXNzcGVjaWZpY2F0aW9uVXJpc2xvd1RleHRkYXJ0MmpzX3NlcnZlcmRhcnQyanNzZXR1cER1cmF0aW9uZWxhcHNlZFdhbGxDbG9ja3NlbGZUYXNrbWVhc3VyZVN1YnRhc2tpbXBsLnJ1bnRpbWluZ3Njb21wdXRlVGltaW5nc19mb3JtYXRNc21zVGltaW5nczp0b3RhbER1cmF0aW9uYXN5bmNEdXJhdGlvbmVsYXBzZWRBc3luY1dhbGxDbG9ja2N1bXVsYXRlZER1cmF0aW9udGltaW5nRGF0YXRhc2tydW5uaW5naXNSdW5uaW5nbWlsbGlzZWNvbmRzICAgc3VidGFza3N1YnRhc2tzc3VidGltZWdldFN1YnRhc2tUaW1lZ2V0U3VidGFza0lzUnVubmluZyA+IGxvbmdlc3REZXNjcmlwdGlvbmRkZXNjcmlwdGlvbnBhZGRpbmdwZXJjZW50UGFkZGluZ3BlcmNlbnQlKXVuYWNjb3VudGVkRHVyYXRpb24gICAgVG90YWwgY29tcGlsZS10aW1lIDsgc2V0dXAgIGFzeW5jICB1bmFjY291bnRlZCByZXBvcnREaWFnbm9zdGljaW5mb3NfcmVwb3J0RGlhZ25vc3RpY01lc3NhZ2VkaWFnbm9zdGljTWVzc2FnZXNwYW5zb3VyY2VTcGFubWVhc3VyZXJlcG9ydENyYXNoSW5Vc2VyQ29kZVVuY2F1Z2h0IGV4Y2VwdGlvbiBpbiBkaWFnbm9zdGljIGhhbmRsZXJjYWxsVXNlclByb3ZpZGVybWVhc3VyZUlvVW5jYXVnaHQgZXhjZXB0aW9uIGluIGlucHV0IHByb3ZpZGVyX0Vudmlyb25tZW50ZGVmaW5pdGlvbnNfY29tcGxldGVNYXB2YWx1ZU9mZGFydC5saWJyYXJ5LnRydWV0b01hcF9UaW1pbmdEYXRhX2RhcnRMaWJyYXJ5RW52aXJvbm1lbnRQcmVmaXhkYXJ0MmpzLmNvbG9yc1JFU0VUG1swbUJMQUNLX0NPTE9SG1szMG1SRURfQ09MT1IbWzMxbUdSRUVOX0NPTE9SG1szMm1ZRUxMT1dfQ09MT1IbWzMzbUJMVUVfQ09MT1IbWzM0bU1BR0VOVEFfQ09MT1IbWzM1bUNZQU5fQ09MT1IbWzM2bVdISVRFX0NPTE9SG1szN213cmFwYmxhY2tyZWRncmVlbnllbGxvd2JsdWVtYWdlbnRhY3lhbndoaXRlZGFydDJqcy5pby5zb3VyY2VfZmlsZUxvY2F0aW9uUHJvdmlkZXJTb3VyY2VGaWxlY2FjaGVkS2VybmVsU291cmNlbGluZVN0YXJ0c0NhY2hla2VybmVsU291cmNlc2xvd1V0ZjhaZXJvVGVybWluYXRlZEJ5dGVzbGluZVN0YXJ0c0Zyb21TdHJpbmdzdGFydHNzbG93U3Vic3RyaW5naW5jbHVkZVNvdXJjZUxpbmVzdGFydExvY2F0aW9uZW5kTG9jYXRpb25jb2x1bW5TdGFydGxpbmVFbmRjb2x1bW5FbmRidWZ0ZXh0TGluZXRvQ29sdW1ubGluZXNVdGY4Qnl0ZXNTb3VyY2VGaWxlemVyb1Rlcm1pbmF0ZWRDb250ZW50bGVuZ3RoQ2FjaGVjb250ZW50Q2FjaGluZ1V0ZjhCeXRlc1NvdXJjZUZpbGVTdHJpbmdTb3VyY2VGaWxlZnJvbVVyaWZyb21OYW1lQmluYXJ5X3plcm9UZXJtaW5hdGVJZk5lY2Vzc2FyeWRhcnQyanMudXRpbC5lbXB0eXNldEltbXV0YWJsZUVtcHR5U2V0Ul9pbW11dGFibGVFcnJvckVtcHR5U2V0IGlzIGltbXV0YWJsZWxvb2t1cHJlbW92ZUFsbHJlbW92ZVdoZXJldGVzdHJldGFpbkFsbHJldGFpbldoZXJldW5pb25pbnRlcnNlY3Rpb25kaWZmZXJlbmNlX0VtcHR5U2V0SXRlcmF0b3JkYXJ0MmpzLnV0aWwubWFwbGV0TWFwQmFzZU1hcGxldF9NQVJLRVJDQVBBQ0lUWV9rZXlfdmFsdWVfZXh0cmFyZW1haW5pbmdjb3B5VG9jb3B5RnJvbWVhY2hLZXllYWNoVmFsdWV2YWx1ZUluZGV4X01hcGxldE1hcmtlcl9NYXBsZXRLZXlJdGVyYWJsZW1hcGxldF9NYXBsZXRTaW5nbGVJdGVyYXRvcl9lbGVtZW50X01hcGxldExpc3RJdGVyYXRvcl9saXN0X3JlbWFpbmluZ19pbmRleGRhcnQyanMudXRpbC5zZXRsZXRTZXRCYXNlU2V0bGV0X2NvbnRlbnRzX25ld1NldG5ld1NldGVhY2hzZXRfU2V0bGV0TWFya2VyX1NldGxldFNpbmdsZUl0ZXJhdG9yX1NldGxldExpc3RJdGVyYXRvcmtlcm5lbC5hc3RfdG9fYmluYXJ5Qnl0ZXNCdWlsZGVyTGlicmFyeUZpbHRlckJpbmFyeVByaW50ZXJfdmFyaWFibGVJbmRleGVyX2xhYmVsSW5kZXhlcl9zd2l0Y2hDYXNlSW5kZXhlcl90eXBlUGFyYW1ldGVySW5kZXhlcnN0cmluZ0luZGV4ZXJfY29uc3RhbnRJbmRleGVyX3NvdXJjZVVyaUluZGV4ZXJfY3VycmVudGx5SW5Ob25pbXBsZW1lbnRhdGlvbl9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbl9zb3VyY2VzRnJvbVJlYWxJbXBsZW1lbnRhdGlvbkluTGlicmFyeV9saWJyYXJ5RGVwZW5kZW5jeUluZGV4X21ldGFkYXRhU3Vic2VjdGlvbnNfbWFpblNpbmtfbWV0YWRhdGFTaW5rX2NvbnN0YW50c0J5dGVzU2lua19jb25zdGFudHNTaW5rX3NpbmtsaWJyYXJ5T2Zmc2V0c2NsYXNzT2Zmc2V0c3Byb2NlZHVyZU9mZnNldHNfYmluYXJ5T2Zmc2V0Rm9yU291cmNlVGFibGVfYmluYXJ5T2Zmc2V0Rm9yTGlua1RhYmxlX2JpbmFyeU9mZnNldEZvck1ldGFkYXRhUGF5bG9hZHNfYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFNYXBwaW5nc19iaW5hcnlPZmZzZXRGb3JTdHJpbmdUYWJsZV9iaW5hcnlPZmZzZXRGb3JDb25zdGFudFRhYmxlX2Nhbm9uaWNhbE5hbWVMaXN0X2tub3duQ2Fub25pY2FsTmFtZU5vblJvb3RUb3BzX3JlaW5kZXhlZENhbm9uaWNhbE5hbWVzaW5zaWRlRXh0ZXJuYWxMaWJyYXJ5X2VtcHR5TmFtZV9mbHVzaGZsdXNoQW5kRGVzdHJveWFkZEJ5dGVhZGRCeXRlc2FkZEJ5dGUyYWRkQnl0ZTR1dGY4Qnl0ZXN3cml0ZVN0cmluZ1RhYmxlaW5kZXhlcnJlcXVpcmVkTWluTGVuZ3RoYWxsb2NhdGVNaW5MZW5ndGhuZXdJbmRleG5ld0xlbmd0aGNvbnZlcnRlZHB1dHdyaXRlU3RyaW5nUmVmZXJlbmNlTGlzdHN0cmluZ3N3cml0ZUNvbnN0YW50UmVmZXJlbmNld3JpdGVDb25zdGFudFRhYmxldGFrZUJ5dGVzd3JpdGVDb25zdGFudFRhYmxlRW50cnlvbGRTaW5raW5pdGlhbE9mZnNldHdyaXRlSW50ZWdlcndyaXRlRG91Ymxld3JpdGVOdWxsQWxsb3dlZFJlZmVyZW5jZXdyaXRlQ2xhc3NSZWZlcmVuY2V3cml0ZU5vbk51bGxDYW5vbmljYWxOYW1lUmVmZXJlbmNlVW5zdXBwb3J0ZWQgY29uc3RhbnQgd3JpdGVVcmlSZWZlcmVuY2VpdGVtc3dyaXRlSXRlbXdyaXRlTm9kZUxpc3RsZW53cml0ZVByb2NlZHVyZU5vZGVMaXN0d3JpdGVQcm9jZWR1cmVOb2Rld3JpdGVGaWVsZE5vZGVMaXN0d3JpdGVGaWVsZE5vZGV3cml0ZUNsYXNzTm9kZUxpc3R3cml0ZUNsYXNzTm9kZXdyaXRlQ29uc3RydWN0b3JOb2RlTGlzdHdyaXRlQ29uc3RydWN0b3JOb2Rld3JpdGVSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvck5vZGVMaXN0d3JpdGVSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3Rvck5vZGV3cml0ZVN3aXRjaENhc2VOb2RlTGlzdHdyaXRlU3dpdGNoQ2FzZU5vZGV3cml0ZUNhdGNoTm9kZUxpc3R3cml0ZUNhdGNoTm9kZXdyaXRlVHlwZWRlZk5vZGVMaXN0d3JpdGVUeXBlZGVmTm9kZV93cml0ZU5vZGVNZXRhZGF0YXdyaXRlRnVuY3Rpb25Ob2Rld3JpdGVBcmd1bWVudHNOb2Rld3JpdGVMaWJyYXJ5Tm9kZXdyaXRlT3B0aW9uYWxOb2Rld3JpdGVPcHRpb25hbEZ1bmN0aW9uTm9kZXdyaXRlTGlua1RhYmxld3JpdGVDYW5vbmljYWxOYW1lRW50cnlpbmRleExpbmtUYWJsZXNob3VsZFdyaXRlTGlicmFyeUNhbm9uaWNhbE5hbWVzX2luZGV4TGlua1RhYmxlSW50ZXJuYWxjaGlsZHJlbmNoaWxkcmVuT3JOdWxsaXNSb290Y29tcG9uZW50T2Zmc2V0MjQyNzE3ODQ3OXdyaXRlTGlzdE9mU3RyaW5nc19jb2xsZWN0TWV0YWRhdGFfd3JpdGVOb2RlTWV0YWRhdGFJbXBsY2hlY2tDYW5vbmljYWxOYW1ld3JpdGVMaWJyYXJpZXN3cml0ZVVyaVRvU291cmNlX3dyaXRlTWV0YWRhdGFTZWN0aW9ud3JpdGVDb21wb25lbnRJbmRleG5vZGVPZmZzZXRzdWJzZWN0aW9uTm9kZXMgb2YgdHlwZSAgY2FuJ3QgaGF2ZSBtZXRhZGF0YS5Ob2RlIHdyaXR0ZW4gaW50byBtZXRhZGF0YSBjYW4ndCBoYXZlIG1ldGFkYXRhIChtZXRhZGF0YTogLCBub2RlOiBtZXRhZGF0YU1hcHBpbmdlbnRlcnB1c2hTY29wZXBvcFNjb3BlbWFwcGluZ0xlbmd0aG51bUNvbXBvbmVudEluZGV4RW50cmllc3VuYWxpZ25lZFNpemV1cmlBc1N0cmluZ291dHB1dFN0cmluZ1ZpYUJ1ZmZlcnByZXZpb3VzTGluZVN0YXJ0amltcG9ydFVyaUFzU3RyaW5nd3JpdGVMaWJyYXJ5RGVwZW5kZW5jeVJlZmVyZW5jZVJlZmVyZW5jZSB0byBsaWJyYXJ5IGRlcGVuZGVuY3kgIG91dCBvZiBzY29wZU1pc3NpbmcgY2Fub25pY2FsIG5hbWUgZm9yIHdyaXRlTm9uTnVsbFJlZmVyZW5jZUdvdCBudWxsIHJlZmVyZW5jZW5vblJvb3RUb3BFeHBlY3RlZCBhIGNhbm9uaWNhbCBuYW1lIHRvIGJlIHZhbGlkIGJ1dCB3YXMgYG51bGxgLndyaXRlTGlicmFyeVJlZmVyZW5jZWFsbG93TnVsbEV4cGVjdGVkIGEgbGlicmFyeSByZWZlcmVuY2UgdG8gYmUgdmFsaWQgYnV0IHdhcyBgbnVsbGAud3JpdGVPZmZzZXRFeHBlY3RlZCBhIGNsYXNzIHJlZmVyZW5jZSB0byBiZSB2YWxpZCBidXQgd2FzIGBudWxsYC53cml0ZUFubm90YXRpb25MaXN0d3JpdGVMaWJyYXJ5RGVwZW5kZW5jaWVzd3JpdGVBZGRpdGlvbmFsRXhwb3J0c3dyaXRlTGlicmFyeVBhcnRzc291cmNlUmVmZXJlbmNlc09mZnNldHNvdXJjZVJlZmVyZW5jZXNDb3VudGltcG9ydE5vZGV3cml0ZUxpYnJhcnlEZXBlbmRlbmN5cmVmcGFydE5vZGV3cml0ZUxpYnJhcnlQYXJ0d3JpdGVWYXJpYWJsZURlY2xhcmF0aW9uTGlzdHdyaXRlQW5ub3RhdGlvbl9lbmNvZGVDbGFzc0ZsYWdzbGV2ZWxJbmRleHJlc3RvcmVTY29wZWN1cnJlbnRseUluTm9uaW1wbGVtZW50YXRpb25TYXZlZHdyaXRlVmFyaWFibGVEZWNsYXJhdGlvbm9sZExhYmVsc29sZENhc2VzbG9naWNhbE9wZXJhdG9ySW5kZXgmJnx8Tm90IGEgbG9naWNhbCBvcGVyYXRvcjogYmlhc2VkVmFsdWVhYnNhZGREb3VibGV3cml0ZVN0YXRlbWVudE9yRW1wdHlfZW5jb2RlVHJ5Q2F0Y2hGbGFnc25lZWRzU3RhY2tUcmFjZXdyaXRlT3B0aW9uYWxWYXJpYWJsZURlY2xhcmF0aW9uZGVjbGFyZWRlZmF1bHROb2Rlc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIE5vZGVzZGVmYXVsdENvbnN0YW50c2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIENvbnN0YW50c2RlZmF1bHRCYXNpY0xpdGVyYWxzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgQmFzaWNMaXRlcmFsc2RlZmF1bHRDb25zdGFudFJlZmVyZW5jZXNlcmlhbGl6YXRpb24gb2YgZ2VuZXJpYyBDb25zdGFudCByZWZlcmVuY2VzZGVmYXVsdERhcnRUeXBlc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIERhcnRUeXBlc2RlZmF1bHRFeHByZXNzaW9uc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIEV4cHJlc3Npb25zZGVmYXVsdEluaXRpYWxpemVyc2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIEluaXRpYWxpemVyc2RlZmF1bHRNZW1iZXJzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgTWVtYmVyc2RlZmF1bHRNZW1iZXJSZWZlcmVuY2VzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgTWVtYmVyIHJlZmVyZW5jZXNkZWZhdWx0U3RhdGVtZW50c2VyaWFsaXphdGlvbiBvZiBnZW5lcmljIFN0YXRlbWVudHNzZXJpYWxpemF0aW9uIG9mIGdlbmVyaWMgVHJlZU5vZGVzc2VyaWFsaXphdGlvbiBvZiBCb29sQ29uc3RhbnRzc2VyaWFsaXphdGlvbiBvZiBCb29sQ29uc3RhbnQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgQ2xhc3MgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgQ29uc3RydWN0b3IgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgRG91YmxlQ29uc3RhbnRzc2VyaWFsaXphdGlvbiBvZiBEb3VibGVDb25zdGFudCByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBGaWVsZCByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBJbnN0YW5jZUNvbnN0YW50c3NlcmlhbGl6YXRpb24gb2YgSW5zdGFuY2VDb25zdGFudCByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBJbnRDb25zdGFudHNzZXJpYWxpemF0aW9uIG9mIEludENvbnN0YW50IHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIExpYnJhcnlEZXBlbmRlbmN5c3NlcmlhbGl6YXRpb24gb2YgTGlicmFyeVBhcnRzc2VyaWFsaXphdGlvbiBvZiBMaXN0Q29uc3RhbnRzc2VyaWFsaXphdGlvbiBvZiBMaXN0Q29uc3RhbnQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgU2V0Q29uc3RhbnRzc2VyaWFsaXphdGlvbiBvZiBTZXRDb25zdGFudCByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBNYXBDb25zdGFudHNzZXJpYWxpemF0aW9uIG9mIE1hcENvbnN0YW50IHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIE5hbWVzc2VyaWFsaXphdGlvbiBvZiBOdWxsQ29uc3RhbnRzc2VyaWFsaXphdGlvbiBvZiBOdWxsQ29uc3RhbnQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgUHJvY2VkdXJlIHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIENvbXBvbmVudHNzZXJpYWxpemF0aW9uIG9mIFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0cnVjdG9yIHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIFN0cmluZ0NvbnN0YW50c3NlcmlhbGl6YXRpb24gb2YgU3RyaW5nQ29uc3RhbnQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgU3ltYm9sQ29uc3RhbnRzc2VyaWFsaXphdGlvbiBvZiBTeW1ib2xDb25zdGFudCByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBQYXJ0aWFsSW5zdGFudGlhdGlvbkNvbnN0YW50cyBzZXJpYWxpemF0aW9uIG9mIFBhcnRpYWxJbnN0YW50aWF0aW9uQ29uc3RhbnQgcmVmZXJlbmNlc3NlcmlhbGl6YXRpb24gb2YgVGVhck9mZkNvbnN0YW50cyBzZXJpYWxpemF0aW9uIG9mIFRlYXJPZmZDb25zdGFudCByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBUeXBlTGl0ZXJhbENvbnN0YW50c3NlcmlhbGl6YXRpb24gb2YgVHlwZUxpdGVyYWxDb25zdGFudCByZWZlcmVuY2Vzc2VyaWFsaXphdGlvbiBvZiBUeXBlZGVmIHJlZmVyZW5jZXNzZXJpYWxpemF0aW9uIG9mIFVuZXZhbHVhdGVkQ29uc3RhbnRzc2VyaWFsaXphdGlvbiBvZiBVbmV2YWx1YXRlZENvbnN0YW50IHJlZmVyZW5jZXNWYXJpYWJsZUluZGV4ZXJzY29wZXNzdGFja0hlaWdodG51bWJlck9mVmFyaWFibGVzTGFiZWxJbmRleGVyU3dpdGNoQ2FzZUluZGV4ZXJjYXNlTm9kZUNvbnN0YW50SW5kZXhlcm9mZnNldHNuZXh0T2Zmc2V0X3ByaW50ZXJvbGRPZmZzZXRuZXdPZmZzZXRUeXBlUGFyYW1ldGVySW5kZXhlclR5cGUgcGFyYW1ldGVyICBpcyBub3QgaW5kZXhlZFN0cmluZ0luZGV4ZXJVcmlJbmRleGVyQnVmZmVyZWRTaW5rU0laRVNBRkVfU0laRVNNQUxMX2J1ZmZlcmZsdXNoZWRMZW5ndGhfZG91YmxlQnVmZmVyX2RvdWJsZUJ1ZmZlclVpbnQ4YXNVaW50OExpc3RieXRlMWJ5dGUyYnl0ZTNieXRlNGFscmVhZHlFbWl0dGVkcmVtYWluZGVyX01ldGFkYXRhU3Vic2VjdGlvbkJ5dGVzU2lua05vdFF1aXRlU3RyaW5nd3JpdGVVdGY4Y29kZVVuaXRuZXh0Q2hhcmtlcm5lbC5hc3RfZnJvbV9iaW5hcnlQYXJzZUVycm9yYnl0ZUluZGV4IGF0IEludmFsaWRLZXJuZWxWZXJzaW9uRXJyb3JVbmV4cGVjdGVkIEtlcm5lbCB2ZXJzaW9uIChleHBlY3RlZCApLkNhbm9uaWNhbE5hbWVFcnJvckNhbm9uaWNhbE5hbWVTZGtFcnJvcl9Db21wb25lbnRJbmRleG51bWJlck9mRml4ZWRGaWVsZHNiaW5hcnlPZmZzZXRGb3JTb3VyY2VUYWJsZWJpbmFyeU9mZnNldEZvckNhbm9uaWNhbE5hbWVzYmluYXJ5T2Zmc2V0Rm9yTWV0YWRhdGFQYXlsb2Fkc2JpbmFyeU9mZnNldEZvck1ldGFkYXRhTWFwcGluZ3NiaW5hcnlPZmZzZXRGb3JTdHJpbmdUYWJsZWJpbmFyeU9mZnNldEZvckNvbnN0YW50VGFibGVtYWluTWV0aG9kUmVmZXJlbmNlbGlicmFyeUNvdW50Y29tcG9uZW50RmlsZVNpemVJbkJ5dGVzdmFyaWFibGVTdGFja2xhYmVsU3RhY2tsYWJlbFN0YWNrQmFzZXN3aXRjaENhc2VTdGFja3R5cGVQYXJhbWV0ZXJTdGFja19ieXRlc19ieXRlT2Zmc2V0X3N0cmluZ1RhYmxlX3NvdXJjZVVyaVRhYmxlX2NvbnN0YW50VGFibGVfbGlua1RhYmxlX3RyYW5zZm9ybWVyRmxhZ3NfY3VycmVudExpYnJhcnlfY29tcG9uZW50U3RhcnRPZmZzZXRkZWJ1Z1BhdGhfaXNSZWFkaW5nTGlicmFyeUltcGxlbWVudGF0aW9uX2Rpc2FibGVMYXp5UmVhZGluZ2J5dGVPZmZzZXRyZWFkRG91YmxlcmVhZFN0cmluZ0VudHJ5bnVtQnl0ZXNudW1CeXRlT3JkZXJNYXJrc++7v19yZWFkTWV0YWRhdGFNYXBwaW5nc19hc3NvY2lhdGVNZXRhZGF0YXJlYWRTdHJpbmdUYWJsZXRhYmxlZW5kT2Zmc2V0c3N0YXJ0T2Zmc2V0cmVhZENvbnN0YW50VGFibGVyZWFkQ29uc3RhbnRUYWJsZUVudHJ5Y29uc3RhbnRUYWdyZWFkRXhwcmVzc2lvbnJlYWRMaWJyYXJ5UmVmZXJlbmNlcmVhZENvbnN0YW50UmVmZXJlbmNlcmVhZENsYXNzUmVmZXJlbmNlZmllbGRWYWx1ZUNvdW50Z2V0UmVmZXJlbmNldW5leHBlY3RlZCBjb25zdGFudCB0YWc6IHJlYWRVcmlSZWZlcmVuY2VyZWFkU3RyaW5nUmVmZXJlbmNlTGlzdHJlYWRTdHJpbmdPck51bGxJZkVtcHR5cmVhZEFuZENoZWNrT3B0aW9uVGFndW5leHBlY3RlZCBvcHRpb24gdGFnOiByZWFkQW5ub3RhdGlvbkxpc3RfZmlsbFRyZWVOb2RlTGlzdGJ1aWxkT2JqZWN0X2ZpbGxOb25UcmVlTm9kZUxpc3Rfc2tpcE5vZGVMaXN0c2tpcE9iamVjdF9tZXJnZU5hbWVkTm9kZUxpc3RyZWFkT2JqZWN0bnVtYmVyT2ZOb2Rlc3JlYWRMaW5rVGFibGVsaW5rUm9vdGJpYXNlZFBhcmVudEluZGV4X2luZGV4Q29tcG9uZW50c3NhdmVkQnl0ZU9mZnNldHNpemVpbmRpY2F0ZWQgc2l6ZSBkb2VzIG5vdCBtYXRjaCBmaWxlIHNpemVyZXZlcnNlZGNoZWNrQ2Fub25pY2FsTmFtZXNtYWdpY05vdCBhIC5kaWxsIGZpbGUgKHdyb25nIG1hZ2ljIG51bWJlcikuY29tcG9uZW50RmlsZVNpemVzY29tcG9uZW50RmlsZUluZGV4X3JlYWRPbmVDb21wb25lbnRfY2hlY2tDYW5vbmljYWxOYW1lQ2hpbGRyZW5fcmVhZE9uZUNvbXBvbmVudFNvdXJjZXJlYWRTaW5nbGVGaWxlQ29tcG9uZW50aW52YWxpZCBjb21wb25lbnQgZGF0YUNvbmNhdGVuYXRlZCBjb21wb25lbnQgZmlsZSBnaXZlbiB3aGVuIGEgc2luZ2xlIGNvbXBvbmVudCB3YXMgZXhwZWN0ZWQuVW5yZWNvZ25pemVkIGJ5dGVzIGZvbGxvd2luZyBjb21wb25lbnQgZGF0YXBhcmVudENoaWxkcmVuQG1ldGhvZHNAdHlwZWRlZnNAZmllbGRzQGdldHRlcnNAc2V0dGVyc0BmYWN0b3JpZXNAY29uc3RydWN0b3JzY2hlY2tSZWZlcmVuY2VOb2RlYnVpbGRDYW5vbmljYWxOYW1lRXJyb3JOdWxsIHJlZmVyZW5jZSAoKSAoQ2Fub25pY2FsIG5hbWUgYW5kIHJlZmVyZW5jZSBkb2Vzbid0IGFncmVlLlJlZmVyZW5jZSBpcyBudWxsIChwcm9ibGVtTm9kZWxpYnJhcnlVcmlkYXJ0Ol9yZWFkQ29tcG9uZW50SW5kZXhjb21wb25lbnRGaWxlU2l6ZXNhdmVkQnl0ZUluZGV4TWFsZm9ybWVkIGJpbmFyeTogVGhpcyBjb21wb25lbnQgZmlsZSdzIGNvbXBvbmVudCBpbmRleCBpbmRpY2F0ZXMgdGhhdCB0aGUgZmlsZXNpemUgc2hvdWxkIGJlICBidXQgb3RoZXIgY29tcG9uZW50IGluZGV4ZXMgaGFzIGluZGljYXRlZCB0aGF0IHRoZSBzaXplIHNob3VsZCBiZSBmb3JtYXRWZXJzaW9ucmVhZFVyaVRvU291cmNlcmVhZExpc3RPZlN0cmluZ3NudW1iZXJPZkxpYnJhcmllc3JlYWRMaWJyYXJ5Z2V0TWVtYmVyUmVmZXJlbmNlRnJvbUludHVyaUJ5dGVzc291cmNlQ29kZWxpbmVDb3VudGltcG9ydFVyaUJ5dGVzZ2V0Q2Fub25pY2FsTmFtZVJlZmVyZW5jZUZyb21JbnRyZWFkTGlicmFyeURlcGVuZGVuY3lSZWZlcmVuY2VyZWFkTWVtYmVyUmVmZXJlbmNlRXhwZWN0ZWQgYSBtZW1iZXIgcmVmZXJlbmNlIHRvIGJlIHZhbGlkIGJ1dCB3YXMgYG51bGxgLnJlYWRUeXBlZGVmUmVmZXJlbmNlZW5kT2Zmc2V0cHJvY2VkdXJlQ291bnRjbGFzc0NvdW50c2hvdWxkV3JpdGVEYXRhX3JlYWRMaWJyYXJ5RGVwZW5kZW5jaWVzX3JlYWRBZGRpdGlvbmFsRXhwb3J0c19yZWFkTGlicmFyeVBhcnRzcmVhZFR5cGVkZWZyZWFkQ2xhc3NyZWFkRmllbGRyZWFkUHJvY2VkdXJlcmVhZExpYnJhcnlEZXBlbmRlbmN5cmVhZE9mZnNldHJlYWRFeHByZXNzaW9uTGlzdHByZWZpeE5hbWVyZWFkQ29tYmluYXRvckxpc3RudW1FeHBvcnRlZFJlZmVyZW5jZWV4cG9ydGVkTmFtZXJlYWRDb21iaW5hdG9ycmVhZExpYnJhcnlQYXJ0cmVhZEFuZFB1c2hUeXBlUGFyYW1ldGVyTGlzdHJlYWRBbmRQdXNoVmFyaWFibGVEZWNsYXJhdGlvbkxpc3Rub3JtYWwtY2xhc3NyZWFkU3VwZXJ0eXBlT3B0aW9ucmVhZFN1cGVydHlwZXJlYWRDb25zdHJ1Y3RvcnJlYWRSZWRpcmVjdGluZ0ZhY3RvcnlDb25zdHJ1Y3RvcmdldEFuZFJlc2V0VHJhbnNmb3JtZXJGbGFnc2FkZFRyYW5zZm9ybWVyRmxhZ3JlYWRFeHByZXNzaW9uT3B0aW9uY29uc3RydWN0b3JwdXNoVmFyaWFibGVEZWNsYXJhdGlvbnNyZWFkSW5pdGlhbGl6ZXJraW5kSW5kZXhmdW5jdGlvbk5vZGVTaXplcmVhZEZ1bmN0aW9uTm9kZU5vd3JlYWRGdW5jdGlvbk5vZGVPcHRpb25yZWRpcmVjdGluZy1mYWN0b3J5LWNvbnN0cnVjdG9ycmVhZERhcnRUeXBlTGlzdHR5cGVQYXJhbWV0ZXJTdGFja0hlaWdodHZhcmlhYmxlU3RhY2tIZWlnaHRyZWFkQXJndW1lbnRzcmVhZEFuZFB1c2hWYXJpYWJsZURlY2xhcmF0aW9ucmVhZFN0YXRlbWVudHVuZXhwZWN0ZWQgaW5pdGlhbGl6ZXIgdGFnOiBsYXp5TG9hZEJvZHlvdXRlckVuZE9mZnNldG9sZExhYmVsU3RhY2tCYXNlcmVhZFN0YXRlbWVudE9wdGlvbl9zZXRMYXp5TG9hZEZ1bmN0aW9uY29tcG9uZW50U3RhcnRPZmZzZXRjdXJyZW50TGlicmFyeXB1c2hWYXJpYWJsZURlY2xhcmF0aW9ucmVhZFZhcmlhYmxlUmVmZXJlbmNldW5leHBlY3RlZCB2YXJpYWJsZSBpbmRleDogbG9naWNhbE9wZXJhdG9yVG9TdHJpbmd1bmV4cGVjdGVkIGxvZ2ljYWwgb3BlcmF0b3IgaW5kZXg6IHRhZ0J5dGVyZWFkRGFydFR5cGVPcHRpb25hc3NlcnRDb3VudHJlYWRNYXBFbnRyeUxpc3RyZWFkVmFyaWFibGVEZWNsYXJhdGlvbnJlYWRTdGF0ZW1lbnRMaXN0dW5leHBlY3RlZCBleHByZXNzaW9uIHRhZzogcmVhZE1hcEVudHJ5cmVhZFN0YXRlbWVudE9yTnVsbElmRW1wdHlyZWFkQmxvY2tyZWFkQXNzZXJ0QmxvY2tsYWJlbHJlYWRTd2l0Y2hDYXNlSW50b3JlYWRDYXRjaExpc3R1bmV4cGVjdGVkIHN0YXRlbWVudCB0YWc6IHJlYWRDYXRjaHJlYWRBbmRQdXNoVmFyaWFibGVEZWNsYXJhdGlvbk9wdGlvbnJlYWRTdXBlcnR5cGVMaXN0cmVhZE5hbWVkVHlwZUxpc3RyZWFkTmFtZWRUeXBlbnVsbGFiaWxpdHlJbmRleHRvdGFsUGFyYW1ldGVyQ291bnRkZWNsYXJlZE51bGxhYmlsaXR5SW5kZXh1bmV4cGVjdGVkIGRhcnQgdHlwZSB0YWc6IHJlYWRUeXBlUGFyYW1ldGVybnVtQXJndW1lbnRzcmVhZE5hbWVkRXhwcmVzc2lvbkxpc3RyZWFkTmFtZWRFeHByZXNzaW9uQmluYXJ5QnVpbGRlcldpdGhNZXRhZGF0YV9zdWJzZWN0aW9uc3N1YlNlY3Rpb25Db3VudG1hcHBpbmdTdGFydG1ldGFkYXRhT2Zmc2V0X3JlYWRNZXRhZGF0YXNhdmVkT2Zmc2V0cGFyYW1rZXJuZWwuYXN0X3RvX3RleHROYW1lcmdldE5hbWVwdXRJZkFic2VudE5vcm1hbE5hbWVyX0NvbnN0YW50TmFtZXImUmVjdXJzaXZlVmlzaXRvciZOYW1lckNvbnN0YW50TmFtZXJEaXNhbWJpZ3VhdG9yVW5hbWVzVG5hbWVzVWRpc2FtYmlndWF0ZWtleTFrZXkycHJvcG9zZU5hbWVnZXROZXdOYW1lcHJvcG9zZWROYW1lQ2Fubm90IGRpc2FtYmlndWF0ZU5hbWVTeXN0ZW0jdCNtI2NsYXNzI2xpYiNUbGFiZWxzI0xjb25zdGFudHMjQ3ByZWZpeGVzcGF0aFNlcGFyYXRvcltcL11wdW5jdHVhdGlvblsuOl1uYW1lVmFyaWFibGVuYW1lTWVtYmVybmFtZUNsYXNzbmFtZUxpYnJhcnluYW1lVHlwZVBhcmFtZXRlcm5hbWVTd2l0Y2hDYXNlbmFtZUxhYmVsZWRTdGF0ZW1lbnRuYW1lQ29uc3RhbnRuYW1lTGlicmFyeVByZWZpeGFiYnJldmlhdGVOYW1laGFzRW1wdHlQYXRoTG5hbWVDYW5vbmljYWxOYW1lQXNMaWJyYXJ5UHJlZml4c2xhc2hkb3RBbm5vdGF0b3Jhbm5vdGF0ZVZhcmlhYmxlcHJpbnRlcmFubm90YXRlUmV0dXJuYW5ub3RhdGVGaWVsZFByaW50ZXJzeW50aGV0aWNOYW1lc2Fubm90YXRvcmltcG9ydFRhYmxlU1BBQ0VXT1JEU1lNQk9MZW1wdHlOYW1lU3RyaW5n4oCiZW1wdHlOYW1lY3JlYXRlSW5uZXJzaG91bGRIaWdobGlnaHRzdGFydEhpZ2hsaWdodGVuZEhpZ2hsaWdodGdldExpYnJhcnlOYW1lZ2V0TGlicmFyeVJlZmVyZW5jZTxObyBMaWJyYXJ5PmdldEltcG9ydEluZGV4Z2V0Q2xhc3NOYW1lPE5vIENsYXNzPmdldFR5cGVkZWZSZWZlcmVuY2U8Tm8gVHlwZWRlZj5nZXRNZW1iZXJOYW1lPE5vIE1lbWJlcj5nZXRWYXJpYWJsZU5hbWVnZXRWYXJpYWJsZVJlZmVyZW5jZTxObyBWYXJpYWJsZURlY2xhcmF0aW9uPmdldFR5cGVQYXJhbWV0ZXJOYW1lZ2V0VHlwZVBhcmFtZXRlclJlZmVyZW5jZTxObyBUeXBlUGFyYW1ldGVyPndyaXRlQ29tcG9uZW50UHJvYmxlbXN3cml0ZVByb2JsZW1zQXNKc29uUHJvYmxlbXMgaW4gY29tcG9uZW50aGVhZGVyZW5kTGluZS8vLy8gdHJpbW1lZHRyaW1SaWdodHdyaXRlV29yZGltcG9ydHNpbm5lcndyaXRlU3RhbmRhcmRMaWJyYXJ5Q29udGVudG91dGVyUHJpbnRlcmltcG9ydHNUb1ByaW50cHJpbnRMaWJyYXJ5SW1wb3J0VGFibGVpbXBvcnRlZExpYnJhcmllc2ltcG9ydFBhdGhnZXRJbXBvcnRQYXRoc2VsZmltcG9ydCBzZWxmIGFzIGltcG9ydCAiIiBhcyBQcm9ibGVtcyBpbiBsaWJyYXJ5YWRkaXRpb25hbEV4cG9ydHMgPSAoaXNGaXJzdG5vZGVMaWJyYXJ5d3JpdGVTcGFjZWR3cml0ZU1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2V3cml0ZU1ldGFkYXRhYXNjb25zdGFudHMgZ2V0UHJlY2VkZW5jZXdyaXRlU3BhY2VlbnN1cmVTcGFjZXdyaXRlU3ltYm9sd3JpdGVDb21tYWVuc3VyZVdvcmRCb3VuZGFyeXdyaXRlSW5kZW50YXRpb248TnVsbD5oaWdobGlnaHRbXW1kbm9kZU1ldGFkYXRhW0B3cml0ZUFubm90YXRlZFR5cGV3cml0ZVR5cGU8Tm8gRGFydFR5cGU+d3JpdGVPcHRpb25hbFR5cGU8Tm8gU3VwZXJ0eXBlPndyaXRlQ2xhc3NSZWZlcmVuY2VGcm9tUmVmZXJlbmNld3JpdGVUeXBlZGVmUmVmZXJlbmNld3JpdGVNb2RpZmllcmlzVGhlcmU8YW5vbj53cml0ZUZ1bmN0aW9udGVybWluYXRlTGluZXdyaXRlVHlwZVBhcmFtZXRlckxpc3R3cml0ZVBhcmFtZXRlckxpc3R3cml0ZVJldHVyblR5cGVnZXRBc3luY01hcmtlcktleXdvcmQvKiBvcmlnaW5hbGx5Ki93cml0ZUZ1bmN0aW9uQm9keW1hcmtlcnN5bmNzeW5jKmFzeW5jYXN5bmMqeWllbGRpbmc8SW52YWxpZCBhc3luYyBtYXJrZXI6IHt9ez0+d3JpdGVFeHByZXNzaW9ud3JpdGVCb2R5d3JpdGVGdW5jdGlvblR5cGV0eXBlZGVmUG9zaXRpb25hbHR5cGVkZWZOYW1lZHBhcmFtZXRlcnNBbm5vdGF0ZWRmb3JtYWzihpJ3cml0ZU51bGxhYmlsaXR5Y2FsbGJhY2tnZXRDbGFzc1JlZmVyZW5jZUZyb21SZWZlcmVuY2VnZXRDYW5vbmljYWxOYW1lU3RyaW5nTmVpdGhlciBub2RlIG5vciBjYW5vbmljYWwgbmFtZSBmb3VuZGdldE1lbWJlclJlZmVyZW5jZUZyb21SZWZlcmVuY2V1bmV4cGVjdGVkIHJvb3R1bmV4cGVjdGVkIEBsaWJyYXJ5U3RyaW5nY2xhc3NTdHJpbmdjbHNhdE5vZGV3cml0ZVZhcmlhYmxlUmVmZXJlbmNld3JpdGVUeXBlUGFyYW1ldGVyUmVmZXJlbmNlbWluaW11bVByZWNlZGVuY2VuZWVkc1BhcmVudGVzZXNzZXBhcmF0ZUxpbmVzZ2VuZXJpYy1jb3ZhcmlhbnQtaW1wbFtnZXR0ZXJdW3NldHRlcl1bbm8tZ2V0dGVyXVtuby1zZXR0ZXJdLyogZnJvbSAgKi9mb3J3YXJkaW5nLXN0dWJmb3J3YXJkaW5nLXNlbWktc3R1Ym5vLXN1Y2gtbWV0aG9kLWZvcndhcmRlcnN5bnRoZXRpY3JlZGlyZWN0aW5nX2ZhY3RvcnljbGFzc3dpdGhleHRlbmRzaW1wbGVtZW50c2VuZExpbmVTdHJpbmcgLy8gZnJvbSBpbnZhbGlkLWV4cHJlc3Npb25lc2NhcGVTdHJpbmd3cml0ZUludGVyZmFjZVRhcmdldC57PXN1cGVybmV3IXByZWNlZGVuY2U/PyE9d3JpdGVTdGF0aWNUeXBlZ2V0RXNjYXBlZENoYXJhY3Rlclx2XGZcJHBhcnQke2Fzc2VydF9hc3NlcnQodW51c2VkQXJndW1lbnRpc2Fze1R5cGVFcnJvcn10aGlzcmV0aHJvd3Rocm93YXdhaXRsZXRpbmJsb2Nrd3JpdGVCbG9ja0JvZHkgPT5kZWZlcnJlZGFzc2VydCk7YnJlYWt3aGlsZWRvZm9ydXNlVmFyS2V5d29yZHN3aXRjaCkge2Nhc2VkZWZhdWx0Y29udGludWVpZmVsc2VyZXR1cm50cnlvbmNhdGNobm8tZXhjZXB0aW9uLXZhcmZpbmFsbHl5aWVsZCpbeWllbGRdeWllbGQuLi47YWxsQXJnc2ludmFsaWQtaW5pdGlhbGl6ZXJpbnZhbGlkLXR5cGVkeW5hbWljdm9pZD5bPntwYXJ0aWFsLWluc3RhbnRpYXRpb250ZWFyb2ZmZXZhbFByZWNlZGVuY2VFWFBSRVNTSU9OQ09ORElUSU9OQUxMT0dJQ0FMX05VTExfQVdBUkVMT0dJQ0FMX09STE9HSUNBTF9BTkRFUVVBTElUWVJFTEFUSU9OQUxCSVRXSVNFX09SQklUV0lTRV9YT1JCSVRXSVNFX0FORFNISUZUQURESVRJVkVNVUxUSVBMSUNBVElWRVBSRUZJWFBPU1RGSVhUWVBFX0xJVEVSQUxQUklNQVJZQ0FMTEVFYmluYXJ5UHJlY2VkZW5jZW9maXNBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yRXhwcmVzc2lvblByaW50ZXJ3cml0ZWVyZ2xvYmFsRGVidWdnaW5nTmFtZXNkZWJ1Z0xpYnJhcnlOYW1lZGVidWdDbGFzc05hbWVkZWJ1Z1F1YWxpZmllZENsYXNzTmFtZWRlYnVnTWVtYmVyTmFtZWRlYnVnUXVhbGlmaWVkTWVtYmVyTmFtZWRlYnVnVHlwZVBhcmFtZXRlck5hbWVkZWJ1Z1F1YWxpZmllZFR5cGVQYXJhbWV0ZXJOYW1lZGVidWdWYXJpYWJsZURlY2xhcmF0aW9uTmFtZWRlYnVnTm9kZVRvU3RyaW5nY29tcG9uZW50VG9TdHJpbmdwcm9jZWR1cmVLaW5kVG9TdHJpbmdnZXRpbGxlZ2FsIFByb2NlZHVyZUtpbmQ6IGtlcm5lbC5hc3QudmlzaXRvckV4cHJlc3Npb25WaXNpdG9yU3RhdGVtZW50VmlzaXRvck1lbWJlclZpc2l0b3JJbml0aWFsaXplclZpc2l0b3JUcmVlVmlzaXRvckRhcnRUeXBlVmlzaXRvckRhcnRUeXBlVmlzaXRvcjFDb25zdGFudFZpc2l0b3JfQ29uc3RhbnRDYWxsYmFja19Db25zdGFudENhbGxiYWNrVmlzaXRvcl9jYWxsYmFja0NvbXB1dGVPbmNlQ29uc3RhbnRWaXNpdG9yX3Zpc2l0b3JjYWNoZVZpc2l0T25jZUNvbnN0YW50VmlzaXRvck1lbWJlclJlZmVyZW5jZVZpc2l0b3JWaXNpdG9yUmVjdXJzaXZlVmlzaXRvclRyYW5zZm9ybWVyRXhwcmVzc2lvblZpc2l0b3IxU3RhdGVtZW50VmlzaXRvcjFCb2R5VmlzaXRvcjFrZXJuZWwuY2Fub25pY2FsX25hbWVfcGFyZW50X25vblJvb3RUb3BfY2hpbGRyZW5oYXNDaGlsZGdldENoaWxkRnJvbVF1YWxpZmllZE5hbWVnZXRDaGlsZEZyb21GaWVsZFdpdGhOYW1lQ2Fubm90IGFkZCBhIGNoaWxkIHRvICBiZWNhdXNlIHRoaXMgbmFtZSBhbHJlYWR5IGhhcyBhIGNoaWxkIG5hbWVkIHJlbW92ZUNoaWxkIGlzIGFscmVhZHkgYm91bmRDYW5ub3QgYmluZCAsIHRhcmdldCBpcyBhbHJlYWR5IGJvdW5kIHRvIHVuYmluZGNoaWxkcmVuX2dldE1lbWJlclF1YWxpZmllclVuZXhwZWN0ZWQgbWVtYmVyOiBrZXJuZWwudHJhbnNmb3JtYXRpb25zLmZsYWdzVHJhbnNmb3JtZXJGbGFnc3VwZXJDYWxsc3NlZW5CeVZlcmlmaWVya2VybmVsLnR5cGVfYWxnZWJyYVR5cGVQYXJhbWV0ZXJGaWx0ZXJQRnJlc2hUeXBlUGFyYW1ldGVyc2ZyZXNoVHlwZVBhcmFtZXRlcnNhcHBseVRvRnVuY3Rpb25UeXBlc3Vic3RpdHV0ZXN1YnN0aXR1dGVOYW1lZHN1YnN0aXR1dGVTdXBlcmZyb21NYXBmaWx0ZXJlZGZyb21VcHBlckFuZExvd2VyQm91bmRzZnJvbVN1cGVydHlwZWZyb21JbnRlcmZhY2VUeXBlZnJvbVR5cGVkZWZUeXBlZnJvbVBhaXJzcGFyYW1ldGVyc2JvdHRvbUZvckNsYXNzdXBwZXJCb3VuZEZvckNsYXNzc2Vjb25kZ2V0U3Vic3RpdHV0ZXVwcGVyQm91bmRjb250cmF2YXJpYW50dmlzaXRfTnVsbFN1YnN0aXR1dGlvblN1YnN0aXR1dGlvbi5lbXB0eV9NYXBTdWJzdGl0dXRpb25fTWFwU3Vic3RpdHV0aW9uKF9Ub3BTdWJzdGl0dXRvcmludmVydFZhcmlhbmNlZnJlc2hUeXBlUGFyYW1ldGVyQ3JlYXRlIGEgZnJlc2ggZW52aXJvbm1lbnQgZmlyc3RfQ2xhc3NCb3R0b21TdWJzdGl0dXRpb25fQ29tYmluZWRTdWJzdGl0dXRpb25fRmlsdGVyZWRTdWJzdGl0dXRpb25maWx0ZXJGbl9Jbm5lclR5cGVTdWJzdGl0dXRvcm91dGVyZnJlc2hfVHlwZVN1YnN0aXR1dG9yY292YXJpYW50Q29udGV4dHVzZUNvdW50ZXJuZXdJbm5lckVudmlyb25tZW50YmVmb3JlYnVtcENvdW50ZXJzVW50aWxfRGVlcFR5cGVTdWJzdGl0dXRvcmRlcHRoaXNJbmZpbml0ZV9UeXBlVW5pZmljYXRpb25xdWFudGlmaWVkVmFyaWFibGVzX3VuaXZlcnNhbGx5UXVhbnRpZmllZFZhcmlhYmxlc3R5cGUxX3VuaWZ5X3N1YnN0aXR1dGVIZWFkbmV4dFR5cGVVbmV4cGVjdGVkIGN5Y2xlIGZvdW5kIGR1cmluZyB1bmlmaWNhdGlvbl9mYWlsbGVmdEluc3RhbmNlcmlnaHRJbnN0YW5jZWluc3RhbnRpYXRvcmluc3RhbnRpYXRvclR5cGVsZWZ0UmV0dXJucmlnaHRSZXR1cm5fdHJ5U3Vic3RpdHV0aW9uZGVlcFN1YnN0aXR1dGVfT2NjdXJyZW5jZVZpc2l0b3JoYW5kbGVUeXBlUGFyYW1ldGVyZ2V0U3Vic3RpdHV0aW9uTWFwZ2V0VXBwZXJCb3VuZFN1YnN0aXR1dGlvbk1hcHN1YnN0aXR1dGVEZWVwc3Vic3RpdHV0b3Jjb250YWluc1R5cGVWYXJpYWJsZXVuaWZ5VHlwZXN1bmlmaWVyZ2V0RnJlc2hUeXBlUGFyYW1ldGVyc2ZyZXNoUGFyYW1ldGVyc2tlcm5lbC50eXBlX2Vudmlyb25tZW50SGllcmFyY2h5QmFzZWRUeXBlRW52aXJvbm1lbnRFcnJvckhhbmRsZXJUeXBlRW52aXJvbm1lbnR5aWVsZFR5cGVjdXJyZW50QXN5bmNNYXJrZXJlcnJvckhhbmRsZXJmcm9tU3ViY2xhc3NvYmplY3RDbGFzc251bGxDbGFzc2Jvb2xDbGFzc2ludENsYXNzbnVtVHlwZW51bUNsYXNzZG91YmxlQ2xhc3NzdHJpbmdDbGFzc3N5bWJvbENsYXNzdHlwZUNsYXNzcmF3RnVuY3Rpb25UeXBlZnVuY3Rpb25DbGFzc2Z1dHVyZU9yQ2xhc3NlbGVtZW50VHlwZWxpc3RDbGFzc3NldENsYXNzbWFwQ2xhc3NpdGVyYWJsZVR5cGVpdGVyYWJsZUNsYXNzc3RyZWFtVHlwZXN0cmVhbUNsYXNzZnV0dXJlQ2xhc3NTdWJ0eXBlVGVzdGVydHlwZUNoZWNrc2lzVG9wX2NvbGxlY3RfaXNTdWJ0eXBlT2ZzdWJ0eXBlaXNTdWJ0eXBlT2ZzdWJ0eXBlQXJnc3VwZXJ0eXBlQXJnc3VidHlwZUZ1dHVyZXN1cGVydHlwZUZ1dHVyZV9pc0Z1bmN0aW9uU3VidHlwZU9mc3ViUGFyYW1ldGVyc3VwZXJQYXJhbWV0ZXJzdWJCb3VuZHN1cGVydHlwZVBhcmFtZXRlcnN1YnR5cGVQYXJhbWV0ZXJzdWJ0eXBlTmFtZUluZGV4a2VybmVsLmNvcV9hbm5vdENvcUxpYmRlc3RQYXRoUmVsYXRpdmVjb3Fjb3FyZWZub2NvcWNvcW9wdGNvcXNpbmdsZWNvcWRlZmNvcXNpbmdsZWRlZmNvcUVudW1za2VybmVsLmNsYXNzX2hpZXJhcmNoeUhhbmRsZUFtYmlndW91c1N1cGVydHlwZXNNaXhpbkluZmVycmVyaW5mZXJDbGFzc0hpZXJhcmNoeW9uQW1iaWd1b3VzU3VwZXJ0eXBlc21peGluSW5mZXJyZXIgY2FuJ3QgaW1wbGVtZW50IGJvdGggX2luaXRpYWxpemVnZXRPcmRlcmVkQ2xhc3Nlc3Vub3JkZXJlZGdlbmVyaWNTdXBlcnR5cGVzT2ZnZXRMZWdhY3lMZWFzdFVwcGVyQm91bmRnZXRDbGFzc0FzSW5zdGFuY2VPZmFzSW5zdGFudGlhdGlvbk9mZ2V0RGlzcGF0Y2hUYXJnZXRzZXR0ZXJnZXREaXNwYXRjaFRhcmdldHNzZXR0ZXJzZ2V0SW50ZXJmYWNlTWVtYmVyZ2V0SW50ZXJmYWNlTWVtYmVyc2dldERlY2xhcmVkTWVtYmVyc2lzU3ViY2xhc3NPZnN1YmNsYXNzaXNVc2VkQXNNaXhpbmZvckVhY2hPdmVycmlkZVBhaXJhcHBseVRyZWVDaGFuZ2VzcmVtb3ZlZExpYnJhcmllc2Vuc3VyZUtub3duTGlicmFyaWVzcmVpc3N1ZUFtYmlndW91c1N1cGVydHlwZXNGb3JhcHBseU1lbWJlckNoYW5nZXNmaW5kRGVzY2VuZGFudHNtZXJnZVNvcnRlZExpc3RzZmlyc3RNZW1iZXJzZWNvbmRNZW1iZXJjb21wYXJlY29tcGFyZU1lbWJlcnNjb21wYXJlTmFtZXNmaXJzdE5hbWVzZWNvbmROYW1lZmlyc3RIYXNoc2Vjb25kSGFzaGZpcnN0U3RyaW5nc2Vjb25kU3RyaW5nZmlyc3RMZW5ndGhzZWNvbmRMZW5ndGhmaXJzdExpYnJhcnlzZWNvbmRMaWJyYXJ5Zmlyc3RVbml0c2Vjb25kVW5pdGRlbHRhZmluZE1lbWJlckJ5TmFtZUNsYXNzSGllcmFyY2h5U3VidHlwZXNnZXRTdWJ0eXBlc09mZ2V0U2luZ2xlVGFyZ2V0Rm9ySW50ZXJmYWNlSW52b2NhdGlvbl9DbGFzc0luZm9TdWJ0eXBlY2xhc3NJbmZvdG9wRG93bkluZGV4c3VidHlwZUludGVydmFsTGlzdF9DbG9zZWRXb3JsZENsYXNzSGllcmFyY2h5U3VidHlwZXNfY2xhc3Nlc0J5VG9wRG93bkluZGV4X2luZm9NYXBpbnZhbGlkYXRlZF90b3BEb3duU29ydEluZGV4YWxsQmV0c09mZl90b3BEb3duU29ydFZpc2l0c3ViSW5mb3N1YnR5cGVTZXRCdWlsZGVyYWRkU2luZ2xldG9uZGlyZWN0RXh0ZW5kZXJzc3VidHlwZUluZm9hZGRJbnRlcnZhbExpc3RkaXJlY3RNaXhlcnNkaXJlY3RJbXBsZW1lbnRlcnNidWlsZEludGVydmFsTGlzdFRoaXMgZGF0YXN0cnVjdHVyZSBoYXMgYmVlbiBpbnZhbGlkYXRlZHN1YnR5cGVzdG9DbG9zZWRXb3JsZENsYXNzSGllcmFyY2h5X29uQW1iaWd1b3VzU3VwZXJ0eXBlc19vbkFtYmlndW91c1N1cGVydHlwZXNOb3RXcmFwcGVka25vd25MaWJyYXJpZXNfcmVjb3JkZWRBbWJpZ3VvdXNTdXBlcnR5cGVzX2NhY2hlZENsYXNzSGllcmFyY2h5U3VidHlwZXNfdG9wU29ydEluZGV4cmVjb3JkZWRpbmZvRm9ydXNlZGdldFVzZWRDbGFzc2VzcmVzZXRVc2VkbnVtYmVyT2ZDbGFzc2VzY29tcHV0ZVN1YnR5cGVzSW5mb3JtYXRpb251bm9yZGVyZWRTZXRfZ2V0UmFua2VkU3VwZXJjbGFzc0luZm9zbGVhc3RVcHBlckJvdW5kSW5mb3NoZWFwY2hhaW5sYXN0SW5mb25leHRJbmZvYWRkVG9IZWFwaW5mbzFpbmZvMmNsYXNzZXMxY2xhc3NlczJpMWkyY3VycmVudERlcHRobnVtQ2FuZGlkYXRlc0F0VGhpc0RlcHRobmV4dDJzdXBlclR5cGUxZ2VuZXJpY1N1cGVyVHlwZXNzdXBlclR5cGUyOiBObyBjbGFzcyBpbmZvIGZvciBzdXBlckluZm9jYXN0ZWRUeXBlaW1wbGVtZW50ZWRTZXR0ZXJzaW1wbGVtZW50ZWRHZXR0ZXJzQW5kQ2FsbHNfYnVpbGRJbnRlcmZhY2VNZW1iZXJzZGVjbGFyZWRTZXR0ZXJzZGVjbGFyZWRHZXR0ZXJzQW5kQ2FsbHNjcm9zc0dldHRlcnNTZXR0ZXJzc3VwZXJHZXR0ZXJzc3VwZXJTZXR0ZXJzX3JlcG9ydE92ZXJyaWRlc2RlY2xhcmVkTGlzdGluaGVyaXRlZExpc3RkZWNsYXJlZGluaGVyaXRlZHN1cGVydHlwZXNsaWJzYWRkZWRDbGFzc2VzU29ydGVkZXhwZWN0ZWRTdGFydEluZGV4X3RvcG9sb2dpY2FsU29ydFZpc2l0b3JkZXJlZExpc3RfaW5pdGlhbGl6ZVRvcG9sb2dpY2FsbHlTb3J0ZWRDbGFzc2VzcHJvY2Vzc2VkQ2xhc3Nlc3dvcmtsaXN0dG9wb2xvZ2ljYWxJbmRleF9idWlsZERlY2xhcmVkTWVtYmVyc19idWlsZEltcGxlbWVudGVkTWVtYmVyc2ludGVyZmFjZVNldHRlcnNpbnRlcmZhY2VHZXR0ZXJzQW5kQ2FsbHNzYW5pdHlDaGVja0Fsc29Lbm93c1BhcmVudEFuZExpYnJhcnlEaWRuJ3Qga25vdyBsaWJyYXJ5IG9mICAoZnJvbSBEaWRuJ3Qga25vdyBwYXJlbnQgb2YgZXhwZWN0ZWRTdGFydGluZ1RvcG9sb2dpY2FsSW5kZXhfY29sbGVjdFN1cGVyc0ZvckNsYXNzX3JlY29yZFN1cGVyVHlwZXNObyBpbmZvIGZvciAgZnJvbSBVbmV4cGVjdGVkIHRvcG9sb2dpY2FsSW5kZXggKCAhPSApIGZvciBiZWluZ1Zpc2l0ZWRDeWNsaWMgaW5oZXJpdGFuY2UgaW52b2x2aW5nIHN1cGVyRGVwdGhtaXhlZEluZm9taXhpbk1lbWJlcmluaGVyaXRlZE1lbWJlcnNpbmhlcml0ZWRTZXR0ZXJzc2tpcEFic3RyYWN0TWVtYmVyc2FsbEluaGVyaXRlZE1lbWJlcnNpbmhlcml0RnJvbV9pbmhlcml0TWVtYmVyc2RlY2xhcmVkTWVtYmVyaW5oZXJpdGVkTWVtYmVyX2dldFVuc2hhZG93ZWRJbmhlcml0ZWRNZW1iZXJzcmVjb3JkR2VuZXJpY1N1cGVyVHlwZXN1cGVyY2xhc3NTZXRCdWlsZGVyc3VwZXJ0eXBlU2V0QnVpbGRlcnN1cGVydHlwZUluZm9zdXBlcmNsYXNzSW50ZXJ2YWxMaXN0c3VwZXJ0eXBlSW50ZXJ2YWxMaXN0bWl4ZWRJblR5cGVJbmZvZ2V0RXhwZW5zZUhpc3RvZ3JhbWludGVydmFsc29sZExlbmd0aGZpbGxSYW5nZWdldENvbXByZXNzaW9uUmF0aW9zaXplc2dldFN1cGVyVHlwZUhhc2hUYWJsZVNpemVzdW1fSW50ZXJ2YWxMaXN0QnVpbGRlcmV2ZW50c2FkZEludGVydmFsaW5zaWRlQ291bnRldmVudF9DbGFzc0luZm9DbGFzc1NldF9jbGFzc2VzX0x1YkhlYXBzb3J0c0JlZm9yZXNvcnRzQmVmb3JlU3RhdGljX2ludGVydmFsTGlzdENvbnRhaW5zaW50ZXJ2YWxMaXN0X2ludGVydmFsTGlzdFNpemVrZXJuZWwuY29yZV90eXBlc0NvcmVUeXBlc3JlcXVpcmVkQ2xhc3Nlc2RhcnQ6Y29yZU9iamVjdE51bGxib29saW50bnVtZG91YmxlU3RyaW5nTGlzdE1hcEl0ZXJhYmxlSXRlcmF0b3JTeW1ib2xGdW5jdGlvbkludm9jYXRpb25GYWxsVGhyb3VnaEVycm9yZGFydDpfaW50ZXJuYWxkYXJ0OmFzeW5jU3RyZWFtX2NvcmVMaWJyYXJ5X29iamVjdENsYXNzX251bGxDbGFzc19ib29sQ2xhc3NfaW50Q2xhc3NfbnVtQ2xhc3NfZG91YmxlQ2xhc3Nfc3RyaW5nQ2xhc3NfbGlzdENsYXNzX3NldENsYXNzX21hcENsYXNzX2l0ZXJhYmxlQ2xhc3NfaXRlcmF0b3JDbGFzc19zeW1ib2xDbGFzc190eXBlQ2xhc3NfZnVuY3Rpb25DbGFzc19pbnZvY2F0aW9uQ2xhc3NfaW52b2NhdGlvbk1pcnJvckNsYXNzX2ludm9jYXRpb25NaXJyb3JXaXRoVHlwZUNvbnN0cnVjdG9yX25vU3VjaE1ldGhvZEVycm9yRGVmYXVsdENvbnN0cnVjdG9yX2xpc3RGcm9tQ29uc3RydWN0b3JfbGlzdFVubW9kaWZpYWJsZUNvbnN0cnVjdG9yX2lkZW50aWNhbFByb2NlZHVyZV9mYWxsVGhyb3VnaEVycm9yVXJsQW5kTGluZUNvbnN0cnVjdG9yX29iamVjdEVxdWFsc19tYXBVbm1vZGlmaWFibGVfaW50ZXJuYWxTeW1ib2xDbGFzc19hc3luY0xpYnJhcnlfZnV0dXJlQ2xhc3Nfc3RhY2tUcmFjZUNsYXNzX3N0cmVhbUNsYXNzX2FzeW5jQXdhaXRDb21wbGV0ZXJDbGFzc19mdXR1cmVPckNsYXNzX2FzeW5jQXdhaXRDb21wbGV0ZXJDb25zdHJ1Y3Rvcl9jb21wbGV0ZU9uQXN5bmNSZXR1cm5Qcm9jZWR1cmVfY29tcGxldGVyQ29tcGxldGVFcnJvcl9zeW5jSXRlcmFibGVEZWZhdWx0Q29uc3RydWN0b3Jfc3RyZWFtSXRlcmF0b3JEZWZhdWx0Q29uc3RydWN0b3JfYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckRlZmF1bHRDb25zdHJ1Y3Rvcl9hc3luY1N0YXJMaXN0ZW5IZWxwZXJQcm9jZWR1cmVfYXN5bmNTdGFyTW92ZU5leHRIZWxwZXJQcm9jZWR1cmVfYXN5bmNTdGFja1RyYWNlSGVscGVyUHJvY2VkdXJlX2FzeW5jVGhlbldyYXBwZXJIZWxwZXJQcm9jZWR1cmVfYXN5bmNFcnJvcldyYXBwZXJIZWxwZXJQcm9jZWR1cmVfYXdhaXRIZWxwZXJQcm9jZWR1cmVfYm9vbEZyb21FbnZpcm9ubWVudF9taXJyb3JzTGlicmFyeV9wcmFnbWFDbGFzc19wcmFnbWFOYW1lX3ByYWdtYU9wdGlvbnNfcHJhZ21hQ29uc3RydWN0b3Jhc3luY0Vycm9yV3JhcHBlckhlbHBlclByb2NlZHVyZWdldFRvcExldmVsTWVtYmVyX2FzeW5jRXJyb3JXcmFwcGVySGVscGVyYXN5bmNMaWJyYXJ5Z2V0TGlicmFyeWFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJBZGRnZXRNZW1iZXJfQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcmFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJBZGRFcnJvcmFkZEVycm9yYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbWFkZFN0cmVhbWFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJDbGFzc2dldENsYXNzYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckNsb3NlYXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckRlZmF1bHRDb25zdHJ1Y3RvcmFzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJTdHJlYW1nZXQ6c3RyZWFtYXN5bmNTdGFyTGlzdGVuSGVscGVyX2FzeW5jU3Rhckxpc3RlbkhlbHBlcmFzeW5jU3Rhck1vdmVOZXh0SGVscGVyX2FzeW5jU3Rhck1vdmVOZXh0SGVscGVyYXN5bmNTdGFja1RyYWNlSGVscGVyUHJvY2VkdXJlX2FzeW5jU3RhY2tUcmFjZUhlbHBlcmFzeW5jVGhlbldyYXBwZXJIZWxwZXJQcm9jZWR1cmVfYXN5bmNUaGVuV3JhcHBlckhlbHBlcmF3YWl0SGVscGVyUHJvY2VkdXJlX2F3YWl0SGVscGVyYXN5bmNBd2FpdENvbXBsZXRlckNsYXNzX0FzeW5jQXdhaXRDb21wbGV0ZXJhc3luY0F3YWl0Q29tcGxldGVyQ29uc3RydWN0b3Jjb21wbGV0ZU9uQXN5bmNSZXR1cm5fY29tcGxldGVPbkFzeW5jUmV0dXJuY29tcGxldGVyQ29tcGxldGVFcnJvckNvbXBsZXRlcmNvbXBsZXRlckZ1dHVyZWdldDpmdXR1cmVjb3JlTGlicmFyeXRyeUdldENsYXNzRnV0dXJlT3JpZGVudGljYWxQcm9jZWR1cmVpZGVudGljYWxpbnRlcm5hbFN5bWJvbENsYXNzaW52b2NhdGlvbkNsYXNzaW52b2NhdGlvbk1pcnJvckNsYXNzX0ludm9jYXRpb25NaXJyb3JpbnZvY2F0aW9uTWlycm9yV2l0aFR5cGVDb25zdHJ1Y3Rvcl93aXRoVHlwZWl0ZXJhdG9yQ2xhc3NsaXN0RnJvbUNvbnN0cnVjdG9ybGlzdFVubW9kaWZpYWJsZUNvbnN0cnVjdG9ydW5tb2RpZmlhYmxlU2V0bWFwVW5tb2RpZmlhYmxlbWlycm9yc0xpYnJhcnl0cnlHZXRMaWJyYXJ5ZGFydDptaXJyb3Jzbm9TdWNoTWV0aG9kRXJyb3JEZWZhdWx0Q29uc3RydWN0b3JOb1N1Y2hNZXRob2RFcnJvcndpdGhJbnZvY2F0aW9ub2JqZWN0RXF1YWxzcHJhZ21hQ2xhc3NwcmFnbWFwcmFnbWFOYW1lcHJhZ21hT3B0aW9uc3ByYWdtYUNvbnN0cnVjdG9yc3RhY2tUcmFjZUNsYXNzU3RhY2tUcmFjZXN0cmVhbUl0ZXJhdG9yU3Vic2NyaXB0aW9uX1N0cmVhbUl0ZXJhdG9yX3N1YnNjcmlwdGlvbnN0cmVhbUl0ZXJhdG9yQ2FuY2VsY2FuY2Vsc3RyZWFtSXRlcmF0b3JDbGFzc3N0cmVhbUl0ZXJhdG9yRGVmYXVsdENvbnN0cnVjdG9yc3RyZWFtSXRlcmF0b3JNb3ZlTmV4dHN0cmVhbUl0ZXJhdG9yQ3VycmVudGdldDpjdXJyZW50c3luY0l0ZXJhYmxlRGVmYXVsdENvbnN0cnVjdG9yX1N5bmNJdGVyYWJsZXN5bmNJdGVyYXRvckNsYXNzX1N5bmNJdGVyYXRvcnN5bmNJdGVyYXRvckN1cnJlbnRzeW5jSXRlcmF0b3JZaWVsZEVhY2hJdGVyYWJsZV95aWVsZEVhY2hJdGVyYWJsZWZhbGxUaHJvdWdoRXJyb3JVcmxBbmRMaW5lQ29uc3RydWN0b3JfY3JlYXRlYm9vbEZyb21FbnZpcm9ubWVudGZyb21FbnZpcm9ubWVudHBhY2thZ2VfY29uZmlnLnBhY2thZ2Vzbm9QYWNrYWdlc3BhY2thZ2VVcmlub3RGb3VuZGFzTWFwcGFja2FnZV9jb25maWcucGFja2FnZXNfZmlsZWlzVmFsaWRQYWNrYWdlTmFtZWJhc2VMb2NhdGlvbmlzQ29tbWVudHNlcGFyYXRvckluZGV4Y2hhck1pc3NpbmcgcGFja2FnZSBuYW1lTm8gJzonIG9uIGxpbmVwYWNrYWdlTmFtZU5vdCBhIHZhbGlkIHBhY2thZ2UgbmFtZXBhY2thZ2VMb2NhdGlvblNhbWUgcGFja2FnZSBuYW1lIG9jY3VyZWQgdHdpY2UucGFja2FnZU1hcHBpbmdjb21tZW50TXVzdCBiZSBhYnNvbHV0ZWNvbW1lbnRMaW5lIyAjIGdlbmVyYXRlZCBieSBwYWNrYWdlOnBhY2thZ2VfY29uZmlnIGF0ICIgaXMgbm90IGEgdmFsaWQgcGFja2FnZSBuYW1lUGFja2FnZSBsb2NhdGlvbiBtdXN0IG5vdCBiZSBhIHBhY2thZ2U6IFVSSV9yZWxhdGl2aXplaGFzUXVlcnloYXNGcmFnbWVudGhhc0F1dGhvcml0eW5vcm1hbGl6ZVBhdGguL3BhY2thZ2VfY29uZmlnLnBhY2thZ2VzX2ltcGxVbm1vZGlmaWFibGVNYXBWaWV3Y2hlY2tWYWxpZFBhY2thZ2VVcmlOb1BhY2thZ2VzTm8gcGFja2FnZSBuYW1lZCAiUGFja2FnZXNCYXNlcGFja2FnZUJhc2VnZXRCYXNlcGFja2FnZVBhdGhfbWFwcGluZ05vbkZpbGVQYWNrYWdlc0RpcmVjdG9yeVBhY2thZ2VzX3BhY2thZ2VCYXNlX2ZhaWxMaXN0aW5nUGFja2FnZXNDYW5ub3QgbGlzdCBwYWNrYWdlcyBmb3IgYSBiYXNlZCBwYWNrYWdlIHJvb3Rmcm9udF9lbmQudGVybWluYWxfY29sb3Jfc3VwcG9ydFByb2Nlc3NQcm9jZXNzUmVzdWx0QUxMX0NPREVTVEVSTUlOQUxfQ0FQQUJJTElUSUVTZW5hYmxlVGVybWluYWxDb2xvcnNwcmludGxuX2NvbXB1dGVFbmFibGVDb2xvcnNzdXBwb3J0c0Fuc2lFc2NhcGVzTm90IGVuYWJsaW5nIGNvbG9ycyBhcyBBTlNJIGlzIG5vdCBzdXBwb3J0ZWQuRW5hYmxpbmcgY29sb3JzIGFzIE9TIGlzIFdpbmRvd3MuL2Jpbi9zaC1jdHR5ID4gL2Rldi9udWxsIDI+IC9kZXYvbnVsbE5vdCBlbmFibGluZyBjb2xvcnMsIHN0ZGluIGlzbid0IGEgdGVybWluYWwucHJpbnRmICclcycgJ2NvbG9ycwpzZXRhZiAwCnNldGFmIDEKc2V0YWYgMgpzZXRhZiAzCnNldGFmIDQKc2V0YWYgNQpzZXRhZiA2CnNldGFmIDcKb3AKJyB8IHRwdXQgLVNOb3QgZW5hYmxpbmcgY29sb3JzLCBydW5uaW5nIHRwdXQgZmFpbGVkLk5vdCBlbmFibGluZyBjb2xvcnMsIHVuZXhwZWN0ZWQgb3V0cHV0IGZyb20gdHB1dDogbnVtYmVyT2ZDb2xvcnNOb3QgZW5hYmxpbmcgY29sb3JzLCBsZXNzIHRoYW4gOCBjb2xvcnMgc3VwcG9ydGVkOiBhbGxDb2RlcxtbMzBtG1szMW0bWzMybRtbMzNtG1szNG0bWzM1bRtbMzZtG1szN20bWzM5OzQ5bU5vdCBlbmFibGluZyBjb2xvcnMsIGNvbG9yIGNvZGVzIGRvbid0IG1hdGNoOiBFbmFibGluZyBjb2xvcnMuZmFzdGEuY29tbWFuZF9saW5lX3JlcG9ydGluZ21pbkNyYXNoc2FmZVRvU3RyaW5nZ2V0U291cmNlTGluZXVuaGFuZGxlZGhpZGVXYXJuaW5nc3NvdXJjZUxpbmVpbmRlbnRMZW5ndGhsZW5ndGhJblNvdXJjZUxpbmVwb2ludGVycG9pbnRlckxlbmd0aC4uLkNyYXNoIHdoZW4gZm9ybWF0dGluZzogaXNIaWRkZW5zaG91bGRUaHJvd09uaXNDb21waWxlVGltZUVycm9yZmFzdGEubWVzc2FnZXNnZXRMb2NhdGlvbkZyb21VcmlnZXRMb2NhdGlvbkZyb21Ob2RlZmFzdGEucHJvYmxlbXNEZWJ1Z0Fib3J0OiB3aGF0dW5leHBlY3RlZGV4cGVjdGVkYWN0dWFsdW5zdXBwb3J0ZWRvcGVyYXRpb25nZXRGaWxlVXJpZmFzdGEudGlja2Vyc3dwcmV2aW91c1RpY2tzaW5jZVN0YXJ0bXMucmVzZXRmYXN0YS51cmlfdHJhbnNsYXRvcmRhcnRMaWJyYXJpZXNnZXREYXJ0UGF0Y2hlc2lzUGxhdGZvcm1JbXBsZW1lbnRhdGlvbnRyYW5zbGF0ZXJlcG9ydE1lc3NhZ2VfdHJhbnNsYXRlRGFydFVyaV90cmFuc2xhdGVQYWNrYWdlVXJpZ2V0UGFja2FnZUZyYWdtZW50Zmlyc3RTbGFzaHBhY2thZ2VCYXNlVXJpaXNMaWJyYXJ5U3VwcG9ydGVkX3BhY2thZ2VVcmlOb3RGb3VuZF9wYWNrYWdlVXJpTm90Rm91bmROb1JlcG9ydEM6XHJlc29sdmVJbnB1dFVyaXBhcnNlVXJpZmlsZTp4LXJlc29sdmVBbWJpZ3VvdXNXaW5kb3dzUGF0aGZhc3RhLnNjYW5uZXIudG9rZW5hbmFseXplclRva2VuVHlwZUlERU5USUZJRVJfVE9LRU5MQVpZX1RIUkVTSE9MRHZhbHVlT3JMYXp5U3Vic3RyaW5nY2Fub25pY2FsaXplcmZyb21TdHJpbmdjYW5vbmljYWxpemVwcmVjZWRpbmdDb21tZW50c2Zyb21TdWJzdHJpbmdmcm9tVXRmOEJ5dGVzYXNjaWlPbmx5Ym9vbFZhbHVlaXNJZGVudGlmaWVyY2Fub25pY2FsaXplZFN0cmluZ2RlY29kZVV0Zjhjb3B5Y29weUNvbW1lbnRzbm9TdWNoTWV0aG9kX3ZhbHVlPVN5bnRoZXRpY1N0cmluZ1Rva2VuX2xlbmd0aENvbW1lbnRUb2tlbnByZXZpb3Vzc2V0TmV4dFdpdGhvdXRTZXR0aW5nUHJldmlvdXNtYWpvcm1pbm9yU0lOR0xFX0xJTkVfQ09NTUVOVHRva2VuU3RhcnREYXJ0RG9jVG9rZW5fTGF6eVN1YnN0cmluZ19Db21wYWN0TGF6eVN1YnN0cmluZ19GdWxsTGF6eVN1YnN0cmluZ0RFRkFVTFRfQ09MT1IbWzM5OzQ5bV9zdXBwb3J0c0Fuc2lFc2NhcGVzc3RkZXJyU3VwcG9ydHNDb2xvcnNzdGRvdXRTdXBwb3J0c0NvbG9yc05vdCBlbmFibGluZyBjb2xvcnMsIHN0ZG91dCBkb2VzIG5vdCBzdXBwb3J0IEFOU0kgY29sb3JzLk5vdCBlbmFibGluZyBjb2xvcnMsIHN0ZGVyciBkb2VzIG5vdCBzdXBwb3J0IEFOU0kgY29sb3JzLkJlZ2luVG9rZW5lbmRUb2tlbnByZWNlZGluZ0NvbW1lbnRMVE9QRU5fQ1VSTFlfQlJBQ0tFVE9QRU5fUEFSRU5PUEVOX1NRVUFSRV9CUkFDS0VUPy5bUVVFU1RJT05fUEVSSU9EX09QRU5fU1FVQVJFX0JSQUNLRVRTVFJJTkdfSU5URVJQT0xBVElPTl9FWFBSRVNTSU9OZW5kR3JvdXBEb2N1bWVudGF0aW9uQ29tbWVudFRva2VuQUJTVFJBQ1RBU0FTU0VSVEFTWU5DQVdBSVRCUkVBS0NBU0VDQVRDSENMQVNTQ09OU1RDT05USU5VRUNPVkFSSUFOVERFRkFVTFRERUZFUlJFRERPRFlOQU1JQ0VMU0VFTlVNZW51bUVYUE9SVEVYVEVORFNFWFRFTlNJT05FWFRFUk5BTEZBQ1RPUllGQUxTRWZhbHNlRklOQUxGSU5BTExZRk9SRlVOQ1RJT05HRVRISURFSUZJTVBMRU1FTlRTSU1QT1JUSU5JTlRFUkZBQ0VpbnRlcmZhY2VJU0xBVEVsYXRlTElCUkFSWU1JWElOTkFUSVZFbmF0aXZlTkVXTlVMTE9GT05PUEVSQVRPUlBBUlRQQVRDSHBhdGNoUkVRVUlSRURyZXF1aXJlZFJFVEhST1dSRVRVUk5TRVRTSE9XU09VUkNFU1RBVElDU1VQRVJTV0lUQ0hTWU5DVEhJU1RIUk9XVFJVRVRSWVRZUEVERUZWQVJWT0lEV0hJTEVXSVRIWUlFTERrZXl3b3Jkc2lzQnVpbHRJbmlzUHNldWRvaXNNb2RpZmllcmlzVG9wTGV2ZWxLZXl3b3JkaXNCdWlsdEluT3JQc2V1ZG9pc1BzZXVkb0tleXdvcmRzeW50YXhfY3JlYXRlS2V5d29yZE1hcGtleXdvcmRLZXl3b3JkVG9rZW5pc0tleXdvcmRpc0tleXdvcmRPcklkZW50aWZpZXJTaW1wbGVUb2tlbl9wcmVjZWRpbmdDb21tZW50X3NldENvbW1lbnRQYXJlbnRjaGFyQ291bnRjaGFyRW5kYmVmb3JlU3ludGhldGljaXNFb2ZFT0Zpc09wZXJhdG9yc3RyaW5nVmFsdWVzZXROZXh0bWF0Y2hlc0FueVN5bnRoZXRpY0JlZ2luVG9rZW5TeW50aGV0aWNLZXl3b3JkVG9rZW5wcmVjZWVkaW5nQ29tbWVudGVvZmxleGljYWxseUZpcnN0VG9rZW5DbGFzc05PX0NMQVNTQURESVRJVkVfT1BFUkFUT1JBU1NJR05NRU5UX09QRVJBVE9SQklUV0lTRV9BTkRfT1BFUkFUT1JCSVRXSVNFX09SX09QRVJBVE9SQklUV0lTRV9YT1JfT1BFUkFUT1JDQVNDQURFX09QRVJBVE9SQ09ORElUSU9OQUxfT1BFUkFUT1JFUVVBTElUWV9PUEVSQVRPUklGX05VTExfT1BFUkFUT1JMT0dJQ0FMX0FORF9PUEVSQVRPUkxPR0lDQUxfT1JfT1BFUkFUT1JNVUxUSVBMSUNBVElWRV9PUEVSQVRPUlJFTEFUSU9OQUxfT1BFUkFUT1JTSElGVF9PUEVSQVRPUlVOQVJZX1BPU1RGSVhfT1BFUkFUT1JVTkFSWV9QUkVGSVhfT1BFUkFUT1JET1VCTEVIRVhBREVDSU1BTGhleGFkZWNpbWFsSURFTlRJRklFUmlkZW50aWZpZXJJTlRNVUxUSV9MSU5FX0NPTU1FTlRTQ1JJUFRfVEFHU1RSSU5HQU1QRVJTQU5EQU1QRVJTQU5EX0FNUEVSU0FOREFNUEVSU0FORF9BTVBFUlNBTkRfRVEmJj1BTVBFUlNBTkRfRVEmPUFUQkFOR0JBTkdfRVFCQU5HX0VRX0VRIT09QkFSQkFSX0JBUkJBUl9CQVJfRVF8fD1CQVJfRVF8PUNPTE9OQ09NTUFDQVJFVENBUkVUX0VRXj1DTE9TRV9DVVJMWV9CUkFDS0VUQ0xPU0VfUEFSRU5DTE9TRV9TUVVBUkVfQlJBQ0tFVEVRRVFfRVFFUV9FUV9FUT09PUdUR1RfRVFHVF9HVEdUX0dUX0VRPj49R1RfR1RfR1RHVF9HVF9HVF9FUT4+Pj1IQVNISU5ERVhJTkRFWF9FUUxUX0VRTFRfTFRMVF9MVF9FUTw8PU1JTlVTTUlOVVNfRVEtPU1JTlVTX01JTlVTLS1QRVJDRU5UUEVSQ0VOVF9FUSU9UEVSSU9EUEVSSU9EX1BFUklPRFBMVVNQTFVTX0VRKz1QTFVTX1BMVVMrK1FVRVNUSU9OUVVFU1RJT05fUEVSSU9EPy5RVUVTVElPTl9RVUVTVElPTlFVRVNUSU9OX1FVRVNUSU9OX0VRPz89U0VNSUNPTE9OU0xBU0hTTEFTSF9FUS89U1RBUlNUQVJfRVEqPVNUUklOR19JTlRFUlBPTEFUSU9OX0lERU5USUZJRVIkVElMREVUSUxERV9TTEFTSFRJTERFX1NMQVNIX0VRfi89QkFDS1BJTkdgQkFDS1NMQVNIUEVSSU9EX1BFUklPRF9QRVJJT0RQRVJJT0RfUEVSSU9EX1BFUklPRF9RVUVTVElPTi4uLj9CQURfSU5QVVRtYWxmb3JtZWQgaW5wdXRSRUNPVkVSWXJlY292ZXJ5YWxsdW5zcGVjaWZpZWRpc0FkZGl0aXZlT3BlcmF0b3Jpc0Fzc2lnbm1lbnRPcGVyYXRvcmlzQXNzb2NpYXRpdmVPcGVyYXRvcmlzRXF1YWxpdHlPcGVyYXRvcmlzSW5jcmVtZW50T3BlcmF0b3Jpc011bHRpcGxpY2F0aXZlT3BlcmF0b3Jpc1JlbGF0aW9uYWxPcGVyYXRvcmlzU2hpZnRPcGVyYXRvcmlzVW5hcnlQb3N0Zml4T3BlcmF0b3Jpc1VuYXJ5UHJlZml4T3BlcmF0b3Jpc1NlbGVjdG9yT3BlcmF0b3JOT19QUkVDRURFTkNFQVNTSUdOTUVOVF9QUkVDRURFTkNFQ0FTQ0FERV9QUkVDRURFTkNFQ09ORElUSU9OQUxfUFJFQ0VERU5DRUlGX05VTExfUFJFQ0VERU5DRUxPR0lDQUxfT1JfUFJFQ0VERU5DRUxPR0lDQUxfQU5EX1BSRUNFREVOQ0VFUVVBTElUWV9QUkVDRURFTkNFUkVMQVRJT05BTF9QUkVDRURFTkNFQklUV0lTRV9PUl9QUkVDRURFTkNFQklUV0lTRV9YT1JfUFJFQ0VERU5DRUJJVFdJU0VfQU5EX1BSRUNFREVOQ0VTSElGVF9QUkVDRURFTkNFQURESVRJVkVfUFJFQ0VERU5DRU1VTFRJUExJQ0FUSVZFX1BSRUNFREVOQ0VQUkVGSVhfUFJFQ0VERU5DRVBPU1RGSVhfUFJFQ0VERU5DRVNFTEVDVE9SX1BSRUNFREVOQ0VibGFja2xpc3RlZENvcmVDbGFzc2VzVHlwZUxhYmVsZXJuYW1lTWFwbnVsbC10eXBlbnVsbC1jb25zdGFudG1lc3NhZ2Vzb3JpZ2luTWVzc2FnZWlzT2JqZWN0bmFtZUZvckVudGl0eW5vZGVOYW1lbGFiZWxzRm9yTmFtZWVudGl0eUZvck5hbWVib3R0b20tdHlwZSBGdW5jdGlvbiBleHRlbmRzIHR5cGVBcmdwcmludGluZyB1bmV2YWx1YXRlZCBjb25zdGFudHNMYWJlbGVkTm9kZXR5cGVMYWJlbGVyLyoKIC0gdW5rbm93blVyaXVua25vd25mYXN0YS5jcmFzaENvbnRlbnRUeXBlSHR0cENsaWVudEh0dHBDbGllbnRSZXF1ZXN0U29ja2V0RXhjZXB0aW9uQ3Jhc2ggd2hlbiBjb21waWxpbmcgLAphdCBjaGFyYWN0ZXIgb2Zmc2V0IGRlZmF1bHRTZXJ2ZXJBZGRyZXNzaHR0cDovLzEyNy4wLjAuMTo1OTQxMC9oYXNDcmFzaGVkZmlyc3RTb3VyY2VVcmlyZXNldENyYXNoUmVwb3J0aW5ncmVwb3J0Q3Jhc2g6c2F2ZWRfdHJ5X2NvbnRleHRfdmFyMjpleGNlcHRpb24wOnN0YWNrX3RyYWNlMG5vdGVwYWNrYWdlOmZhc3Rhc2VydmVyVXJpcG9zdFVybGZvcmNlClNlbmRpbmcgY3Jhc2ggcmVwb3J0IGRhdGFwZXJzaXN0ZW50Q29ubmVjdGlvbmJ1ZmZlck91dHB1dGNvbm5lY3Rpb25JbmZvcmVtb3RlQWRkcmVzc3JlbW90ZVBvcnRoZWFkZXJzY29udGVudFR5cGUKCgpGRTo6RVJST1I6OgoKCkVycm9yIHdoZW4gY29udmVydGluZyAgdG8gc3RyaW5nLmN1cnJlbnRVcmlmYXN0YS5kaWxsX3RhcmdldENsYXNzQnVpbGRlclRhcmdldEltcGxlbWVudGF0aW9uRGlsbExpYnJhcnlCdWlsZGVyRGlsbExvYWRlcmxpYnJhcnlCdWlsZGVyc2JhY2tlbmRUYXJnZXRhZGRTb3VyY2VJbmZvcm1hdGlvbmZpbmFsaXplRXhwb3J0c2NyZWF0ZUxpYnJhcnlCdWlsZGVyb3JpZ2luYnJlYWtDeWNsZWFkZExpYnJhcnlmYXN0YS5rZXJuZWxfdGFyZ2V0Q2xvbmVWaXNpdG9yRGlsbE1lbWJlckJ1aWxkZXJBbWJpZ3VvdXNCdWlsZGVyU291cmNlQ2xhc3NCdWlsZGVyU291cmNlTGlicmFyeUJ1aWxkZXJTb3VyY2VMb2FkZXJ0cmFuc2Zvcm1MaWJyYXJpZXNEZWNsYXJhdGlvbkludmFsaWRUeXBlQnVpbGRlckZpZWxkQnVpbGRlck5hbWVkVHlwZUJ1aWxkZXJQcm9jZWR1cmVCdWlsZGVyTGlicmFyeUJ1aWxkZXJUeXBlQnVpbGRlclR5cGVEZWNsYXJhdGlvbkJ1aWxkZXJLZXJuZWxDb25zdGFudEVycm9yUmVwb3J0ZXJNZXRhZGF0YUNvbGxlY3Rvcm1ldGFkYXRhQ29sbGVjdG9yZHluYW1pY1R5cGVleGNsdWRlU291cmNlY2xvbmVkRm9ybWFsc2NyZWF0ZUxvYWRlcmVudHJ5UG9pbnRzcGFja2FnZXNNYXBhc1N0cmluZ3BhY2thZ2U6YWRkUHJvYmxlbXJlYWRhY2Nlc3NvcmJ1aWxkZXJzY29sbGVjdE15Q2xhc3Nlc2lzUGF0Y2hiaW5kb2JqZWN0Q2xhc3NCdWlsZGVyaW50ZXJmYWNlc2NyZWF0ZVR5cGVJbmZlcmVuY2VFbmdpbmViZWNvbWVDb3JlTGlicmFyeWdldExvY2FsTWVtYmVycmVzb2x2ZVBhcnRzY29tcHV0ZUxpYnJhcnlTY29wZXNyZXNvbHZlVHlwZXNjb21wdXRlRGVmYXVsdFR5cGVzbXlDbGFzc2VzY2hlY2tTZW1hbnRpY3NmaW5pc2hUeXBlVmFyaWFibGVzZmluYWxpemVJbml0aWFsaXppbmdGb3JtYWxzaW5zdGFsbERlZmF1bHRTdXBlcnR5cGVzaW5zdGFsbFN5bnRoZXRpY0NvbnN0cnVjdG9yc3Jlc29sdmVDb25zdHJ1Y3RvcnNjb21wdXRlQ29yZVR5cGVzYnVpbGRDbGFzc0hpZXJhcmNoeWNvbXB1dGVIaWVyYXJjaHlwZXJmb3JtVG9wTGV2ZWxJbmZlcmVuY2VjaGVja1N1cGVydHlwZXNjaGVja0JvdW5kc2NoZWNrT3ZlcnJpZGVzY2hlY2tBYnN0cmFjdE1lbWJlcnNjaGVja1JlZGlyZWN0aW5nRmFjdG9yaWVzYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVyc2NoZWNrTWl4aW5zYnVpbGRPdXRsaW5lRXhwcmVzc2lvbnNpbnN0YWxsQWxsQ29tcG9uZW50UHJvYmxlbXNhbGxDb21wb25lbnRQcm9ibGVtc0J1aWxkaW5nIGNvbXBvbmVudGJ1aWxkQm9kaWVzZmluaXNoQ2xvbmVkUGFyYW1ldGVyc2ZpbmlzaERlZmVycmVkTG9hZFRlYXJvZmZzZmluaXNoTm9TdWNoTWV0aG9kRm9yd2FyZGVyc2ZpbmlzaE5hdGl2ZU1ldGhvZHNmaW5pc2hQYXRjaE1ldGhvZHNmaW5pc2hBbGxDb25zdHJ1Y3RvcnNydW5CdWlsZFRyYW5zZm9ybWF0aW9uc2Zvcm1hdHRlZE1lc3NhZ2Vjb3B5U291cmNlZGVjbGFyYXRpb25leHBvcnRTY29wZXByb2JsZW1nZXRGaXJzdERlY2xhcmF0aW9uTGlua2VkIGNvbXBvbmVudGJ1aWxkTWl4ZWRJblR5cGVJbnN0YWxsZWQgT2JqZWN0IGFzIGltcGxpY2l0IHN1cGVyY2xhc3Npc0V4dGVuc2lvbmluc3RhbGxGb3J3YXJkaW5nQ29uc3RydWN0b3JzaW5zdGFsbERlZmF1bHRDb25zdHJ1Y3Rvckluc3RhbGxlZCBzeW50aGV0aWMgY29uc3RydWN0b3JzcHJvY2FkZFN5bnRoZXRpY0NvbnN0cnVjdG9ybWFrZURlZmF1bHRDb25zdHJ1Y3RvcnN1YnN0aXR1dGlvbk1hcG1ha2VNaXhpbkFwcGxpY2F0aW9uQ29uc3RydWN0b3Jjb3B5Rm9ybWFsY2xvbmVtYWtlQ29uc3RydWN0b3JSZXR1cm5UeXBlb3JpZ2luYWxjbG9uZXJ0eXBlU3Vic3RpdHV0aW9uQ2xvbmVkIGRlZmF1bHQgdmFsdWVzIG9mIGZvcm1hbHN0eXBlUGFyYW1ldGVyVHlwZXN0eXBlUGFyYW1ldGVycGxhdGZvcm1MaWJyYXJ5ZGFydDpjb2xsZWN0aW9uZm91bmRtaXJyb3JzQ2FuJ3QgZmluZCBwbGFmb3JtTGlicmFyaWVzZmluaXNoQ29uc3RydWN0b3JzRmluaXNoZWQgY29uc3RydWN0b3JzdW5pbml0aWFsaXplZEZpZWxkc25vbkZpbmFsRmllbGRzY29uc3RydWN0b3JJbml0aWFsaXplZEZpZWxkc3N1cGVyVGFyZ2V0aXNSZWRpcmVjdGluZ215SW5pdGlhbGl6ZWRGaWVsZHNmaWVsZEJ1aWxkZXJzY29wZWxvY2FsaW5pdGlhbGl6ZWRGaWVsZHNkYXJ0Omh0bWxkYXJ0OnN2Z2RhcnQ6X25hdGl2ZV90eXBlZF9kYXRhZGFydDpfaW50ZXJjZXB0b3JzanNfc3RyaW5nLmRhcnRpbnNlcnRlbmFibGVDb25zdGFudFVwZGF0ZTIwMThkZXN1Z2FyU2V0c0V2YWx1YXRlZCBjb25zdGFudHNydW5Qcm9jZWR1cmVUcmFuc2Zvcm1hdGlvbnNWZXJpZmllZCBjb21wb25lbnRyZWFkUGF0Y2hGaWxlc3BhcnRPZmZzZXRzcGFydE9mVXJpS2VybmVsRGlhZ25vc3RpY1JlcG9ydGVyZGVmYXVsdFN1cGVyQ29uc3RydWN0b3JJT1NpbmtMaW1pdGVkQmluYXJ5UHJpbnRlckJ5dGVTaW5ra0RlYnVnQ2xhc3NOYW1lI0RlYnVnQ2xhc3N3cml0ZUNvbXBvbmVudFRvRmlsZWJ5dGVTaW5rY3JlYXRlRXhwcmVzc2lvbkV2YWx1YXRpb25Db21wb25lbnRmYWtlTGlicmFyeWV2YWx1YXRlcmVhbENsYXNzZmFrZUNsYXNzdHlwZVBhcmFtc3R5cGVQYXJhbW5ld05vZGV2aXNpdFR5cGVzZXJpYWxpemVQcm9jZWR1cmVmYXN0YS52ZXJpZmllclZlcmlmeWluZ1Zpc2l0b3JUeXBlU2NoZW1hVmlzaXRvclVua25vd25UeXBlU3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50RmFzdGFWZXJpZnlpbmdWaXNpdG9yc2tpcFBsYXRmb3JtaXNPdXRsaW5lY2hlY2tMb2NhdGlvbicgaGFzIG5vIGZpbGVVcmknIGhhcyBubyBmaWxlT2Zmc2V0Y2hlY2tTdXBlckludm9jYXRpb25jb250YWluaW5nTWVtYmVyZ2V0Q29udGFpbmluZ01lbWJlclN1cGVyIGNhbGwgb3V0c2lkZSBvZiBhbnkgbWVtYmVyU3VwZXIgY2FsbCBpbiBhIG1lbWJlciBsYWNraW5nIFRyYW5zZm9ybWVyRmxhZy5zdXBlckNhbGxzZGV0YWlsc05vIG9mZnNldCBmb3IgTGVha2luZyBzaGFkb3cgbm9kZTogdmlzaXRVbmtub3duVHlwZVVuZXhwZWN0ZWQgYXBwZWFyYW5jZSBvZiB0aGUgdW5rbm93biB0eXBlLkF0dGVtcHQgdG8gaW52b2tlIHJlZGlyZWN0aW5nIGZhY3RvcnkudmVyaWZpZXJmYXN0YS5sb2FkZXJRdWV1ZXVucGFyc2VkTGlicmFyaWVzaGFuZGxlZEVycm9yc3VuaGFuZGxlZEVycm9yc3NlZW5NZXNzYWdlc2J5dGVDb3VudG91dGxpbmVTdW1tYXJ5VGVtcGxhdGVpc1NvdXJjZUxvYWRlcmRhcnQtZXh0cGFja2FnZUZyYWdtZW50dHJhbnNsYXRlVXJpb3JnLWRhcnRsYW5nLXVudHJhbnNsYXRhYmxlLXVyaWhhc1ZhbGlkUGFja2FnZVNwZWNpZmllZExhbmd1YWdlVmVyc2lvbnBhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb25NYWpvcnBhY2thZ2VTcGVjaWZpZWRMYW5ndWFnZVZlcnNpb25NaW5vcnByb3BlcnRpZXNwcm9wZXJ0eWRhcnQ9bGFuZ2F1Z2VWZXJzaW9uU3RyaW5nZG90U2VwYXJhdGVkUGFydHNleHBsaWNpdGxvYWRFeHRyYVJlcXVpcmVkTGlicmFyaWVzbWF5SW1wbGVtZW50UmVzdHJpY3RlZFR5cGVzcmVjb3JkQWNjZXNzaXNQYXJ0ZW5zdXJlQ29yZUxpYnJhcnlidWlsZEJvZHlsb2dTdW1tYXJ5cmVtb3ZlRmlyc3RidWlsZE91dGxpbmVpbk1pY3Jvc2Vjb25kc3dhc0hhbmRsZWRwcm9ibGVtT25MaWJyYXJ5YWRkTWVzc2FnZWZpeFNldmVyaXR5bWVzc2FnZTogCmNoYXJPZmZzZXQ6IApmaWxlVXJpOiAKc2V2ZXJpdHk6IGNvbnRleHRNZXNzYWdlY3JlYXRlRm9ybWF0dGVkTWVzc2FnZWdldEFic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3JnZXRDb21waWxlVGltZUVycm9yZ2V0RHVwbGljYXRlZEZpZWxkSW5pdGlhbGl6ZXJFcnJvcmdldE5hdGl2ZUFubm90YXRpb25jb21wdXRlQ2xhc3NCdWlsZGVyRnJvbVRhcmdldENsYXNzY29tcHV0ZVR5cGVCdWlsZGVydW50cmFuc2xhdGFibGVVcmlTY2hlbWVmYXN0YS5zY2FubmVyLmFic3RyYWN0X3NjYW5uZXJMaXN0TWl4aW5VaW50MTZMaXN0VWludDMyTGlzdE5vbkFzY2lpSWRlbnRpZmllclRva2VuS2V5d29yZFN0YXRlbGFuZ3VhZ2VWZXJzaW9uQWJzdHJhY3RTY2FubmVyTEFaWV9BU1NJR05NRU5UX0VOQUJMRURfZW5hYmxlRXh0ZW5zaW9uTWV0aG9kc19lbmFibGVOb25OdWxsYWJsZV9lbmFibGVUcmlwbGVTaGlmdGVycm9yVGFpbGNvbW1lbnRzY29tbWVudHNUYWlsZ3JvdXBpbmdTdGFja251bWJlck9mQnl0ZXNIaW50ZW5hYmxlRXh0ZW5zaW9uTWV0aG9kc2VuYWJsZU5vbk51bGxhYmxlZW5hYmxlVHJpcGxlU2hpZnRhZHZhbmNlY3VycmVudEFzVW5pY29kZXBlZWtoYW5kbGVVbmljb2Rlc3RhcnRTY2FuT2Zmc2V0c2Nhbk9mZnNldHN0cmluZ09mZnNldGZpcnN0VG9rZW5iZWdpblRva2VuYXBwZW5kU3Vic3RyaW5nVG9rZW5leHRyYU9mZnNldGFwcGVuZFRva2VuY3JlYXRlU3Vic3RyaW5nVG9rZW5hcHBlbmRTeW50aGV0aWNTdWJzdHJpbmdUb2tlbnN5bnRoZXRpY0NoYXJzY3JlYXRlU3ludGhldGljU3Vic3RyaW5nVG9rZW5hcHBlbmRQcmVjZWRlbmNlVG9rZW5zZWxlY3RjaG9pY2VhcHBlbmRLZXl3b3JkVG9rZW5kaXNjYXJkT3Blbkx0YXBwZW5kRW9mVG9rZW51bm1hdGNoZWRCZWdpbkdyb3VwYXBwZW5kV2hpdGVTcGFjZWxpbmVGZWVkSW5NdWx0aWxpbmVhcHBlbmRCZWdpbkdyb3VwYXBwZW5kRW5kR3JvdXBvcGVuS2luZGRpc2NhcmRCZWdpbkdyb3VwVW50aWxhcHBlbmRHdGFwcGVuZEd0R3RwcmVwZW5kRXJyb3JUb2tlbmNyZWF0ZUNvbW1lbnRUb2tlbmNyZWF0ZURhcnREb2NUb2tlbmNyZWF0ZUxhbmd1YWdlVmVyc2lvblRva2Vub3JpZ2luYWxTdGFja2Rpc2NhcmRJbnRlcnBvbGF0aW9uYXRFbmRPZkZpbGVvbGRUYWlsYmlnSGVhZGVyU3dpdGNoYmlnU3dpdGNodG9rZW5pemVTbGFzaE9yQ29tbWVudHRva2VuaXplTGFuZ3VhZ2VWZXJzaW9uT3JTaW5nbGVMaW5lQ29tbWVudG5leHRMb3dlcnRva2VuaXplUmF3U3RyaW5nS2V5d29yZE9ySWRlbnRpZmllcnRva2VuaXplS2V5d29yZE9ySWRlbnRpZmllcnRva2VuaXplRG90c09yTnVtYmVydG9rZW5pemVFcXVhbHN0b2tlbml6ZVN0cmluZ3Rva2VuaXplTGVzc1RoYW50b2tlbml6ZUdyZWF0ZXJUaGFudG9rZW5pemVFeGNsYW1hdGlvbnRva2VuaXplT3BlblNxdWFyZUJyYWNrZXR0b2tlbml6ZUF0dG9rZW5pemVOdW1iZXJ0b2tlbml6ZUFtcGVyc2FuZHRva2VuaXplSGV4T3JOdW1iZXJ0b2tlbml6ZVF1ZXN0aW9udG9rZW5pemVCYXJ0b2tlbml6ZVBsdXN0b2tlbml6ZU1pbnVzdG9rZW5pemVNdWx0aXBseXRva2VuaXplQ2FyZXR0b2tlbml6ZVRpbGRldG9rZW5pemVQZXJjZW50dG9rZW5pemVUYWd0b2tlbml6ZUZyYWN0aW9uUGFydG5leHRuZXh0dG9rZW5pemVIZXhoYXNEaWdpdHNkb25laGFzRGlnaXRoYXNFeHBvbmVudERpZ2l0c3Rva2VuaXplTXVsdGlMaW5lQ29tbWVudHRva2VuaXplU2luZ2xlTGluZUNvbW1lbnR0b2tlbml6ZVNpbmdsZUxpbmVDb21tZW50UmVzdG1ham9yU3RhcnRtaW5vclN0YXJ0X2FwcGVuZFRvQ29tbWVudFN0cmVhbWRhcnRkb2NhcHBlbmREYXJ0RG9jYXBwZW5kQ29tbWVudGFzY2lpT25seUNvbW1lbnRhc2NpaU9ubHlMaW5lc3VuaWNvZGVTdGFydG5lc3RpbmdhZHZhbmNlQWZ0ZXJFcnJvcm5ld0NvbW1lbnRhbGxvd0RvbGxhcm5leHRDYXBpdGFsdG9rZW5pemVJZGVudGlmaWVycmF3cXVvdGVDaGFydG9rZW5pemVNdWx0aUxpbmVTdHJpbmd0b2tlbml6ZVNpbmdsZUxpbmVSYXdTdHJpbmd0b2tlbml6ZVNpbmdsZUxpbmVTdHJpbmdxdW90ZVN0YXJ0dG9rZW5pemVTdHJpbmdJbnRlcnBvbGF0aW9udW50ZXJtaW5hdGVkU3RyaW5naXNNdWx0aUxpbmVpc1Jhd3Rva2VuaXplSW50ZXJwb2xhdGVkRXhwcmVzc2lvbnRva2VuaXplSW50ZXJwb2xhdGVkSWRlbnRpZmllcnRva2VuaXplTXVsdGlMaW5lUmF3U3RyaW5nYXNjaWlPbmx5U3RyaW5nYXNjaWlPbmx5TGluZWVycm9yVG9rZW5jb2RlVW5pdHNzdWZmaXhlcnJvclN0YXJ0c2hvdWxkQWR2YW5jZV9MaW5lU3RhcnRzJk9iamVjdCZMaXN0TWl4aW52bTpwcmVmZXItaW5saW5lbWF0Y2hGb3VuZHdyaXRlQWxsX2Nsb3NlR2FwX2ZpbHRlcnJldGFpbk1hdGNoaW5ncmV0YWluZWRfY29tcGFyZUFueXNodWZmbGVyYW5kb21wb3NuZXh0SW50dG1wbGlzdExlbmd0aGdldFJhbmdlcmVtb3ZlUmFuZ2VmaWxsc2tpcENvdW50b3RoZXJMaXN0b3RoZXJTdGFydHJlcGxhY2VSYW5nZW5ld0NvbnRlbnRzcmVtb3ZlTGVuZ3RoaW5zZXJ0TGVuZ3RoaW5zZXJ0RW5kaW5kZXhXaGVyZWxhc3RJbmRleFdoZXJlcmVtb3ZlQXRpbnNlcnRBbGxpbnNlcnRpb25MZW5ndGhzZXRBbGxMaW5lU3RhcnRzYXJyYXlhcnJheUxlbmd0aGV4cGVjdGVkTnVtYmVyT2ZMaW5lc2dyb3dzd2l0Y2hUb1VpbnQzMm5ld0xlbmd0aE1pbmltdW1uZXdBcnJheWNsYXNzaWNjbG9zZUJyYWNlSW5mb0Zvcl9pc0lkZW50aWZpZXJDaGFyZGFydDJqcy5zY2FubmVyLnN0cmluZ19zY2FubmVyZW5zdXJlWmVyb1Rlcm1pbmF0aW9uAGlzTGVnYWxJZGVudGlmaWVyc3RhcnRUb2tlbmZhc3RhLnNjYW5uZXIudXRmOF9ieXRlc19zY2FubmVydW5pY29kZUJvbUNoYXJhY3RlclJ1bmVzY2FuU2xhY2tzY2FuU2xhY2tPZmZzZXR1dGY4U2xhY2tsYXN0VW5pY29kZU9mZnNldHN0cmluZ09mZnNldFNsYWNrT2Zmc2V0Y29udGFpbnNCb21BdG5leHRDb2RlUG9pbnRuZXh0Qnl0ZWV4cGVjdGVkSGlnaEJ5dGVzcmVzZmFzdGEuc2Nhbm5lci5yZWNvdmVySW50ZXJuYWwgZXJyb3I6IEFsbCBlcnJvciB0b2tlbnMgc2hvdWxkIGhhdmUgYmVlbiBwcmVwZW5kZWQ6c3ludGhlc2l6ZVRva2Vuc2tpcFRvRW9mY2xvc2VCcmFjZUZvcm9wZW5CcmFjZWNsb3NlUXVvdGVGb3JvcGVuUXVvdGUiIiInJydyInInciIiInInJydkYXJ0X3NjYW5uZXIuZXJyb3JfdG9rZW5lcnJvck1zZ14jWzAtOV0qICpQYXJzZXJ0cmFjZUxpbmVzdW5zdXBwb3J0ZWQgb3BlcmF0aW9uRW5jb2RpbmdFcnJvclRva2VuRW5jb2RpbmdFcnJvclRva2VuKClOb25Bc2NpaUlkZW50aWZpZXJUb2tlbihOb25Bc2NpaVdoaXRlc3BhY2VUb2tlbk5vbkFzY2lpV2hpdGVzcGFjZVRva2VuKEFzY2lpQ29udHJvbENoYXJhY3RlclRva2VuQXNjaWlDb250cm9sQ2hhcmFjdGVyVG9rZW4oVW5zdXBwb3J0ZWRPcGVyYXRvcihVbnRlcm1pbmF0ZWRTdHJpbmcoVW50ZXJtaW5hdGVkVG9rZW4oVW5tYXRjaGVkVG9rZW4oZmFzdGEuc2Nhbm5lci50b2tlbl9jb25zdGFudHNLRVlXT1JEX1RPS0VOU0NSSVBUX1RPS0VOQkFEX0lOUFVUX1RPS0VORE9VQkxFX1RPS0VOSU5UX1RPS0VOUkVDT1ZFUllfVE9LRU5IRVhBREVDSU1BTF9UT0tFTlNUUklOR19UT0tFTkFNUEVSU0FORF9UT0tFTkJBQ0tQSU5HX1RPS0VOQkFDS1NMQVNIX1RPS0VOQkFOR19UT0tFTkJBUl9UT0tFTkNPTE9OX1RPS0VOQ09NTUFfVE9LRU5FUV9UT0tFTkdUX1RPS0VOSEFTSF9UT0tFTk9QRU5fQ1VSTFlfQlJBQ0tFVF9UT0tFTk9QRU5fU1FVQVJFX0JSQUNLRVRfVE9LRU5PUEVOX1BBUkVOX1RPS0VOTFRfVE9LRU5NSU5VU19UT0tFTlBFUklPRF9UT0tFTlBMVVNfVE9LRU5RVUVTVElPTl9UT0tFTkFUX1RPS0VOQ0xPU0VfQ1VSTFlfQlJBQ0tFVF9UT0tFTkNMT1NFX1NRVUFSRV9CUkFDS0VUX1RPS0VOQ0xPU0VfUEFSRU5fVE9LRU5TRU1JQ09MT05fVE9LRU5TTEFTSF9UT0tFTlRJTERFX1RPS0VOU1RBUl9UT0tFTlBFUkNFTlRfVE9LRU5DQVJFVF9UT0tFTlNUUklOR19JTlRFUlBPTEFUSU9OX1RPS0VOTFRfRVFfVE9LRU5GVU5DVElPTl9UT0tFTlNMQVNIX0VRX1RPS0VOUEVSSU9EX1BFUklPRF9QRVJJT0RfVE9LRU5QRVJJT0RfUEVSSU9EX1RPS0VORVFfRVFfRVFfVE9LRU5FUV9FUV9UT0tFTkxUX0xUX0VRX1RPS0VOTFRfTFRfVE9LRU5HVF9FUV9UT0tFTkdUX0dUX0VRX1RPS0VOSU5ERVhfRVFfVE9LRU5JTkRFWF9UT0tFTkJBTkdfRVFfRVFfVE9LRU5CQU5HX0VRX1RPS0VOQU1QRVJTQU5EX0FNUEVSU0FORF9UT0tFTkFNUEVSU0FORF9BTVBFUlNBTkRfRVFfVE9LRU5BTVBFUlNBTkRfRVFfVE9LRU5CQVJfQkFSX1RPS0VOQkFSX0JBUl9FUV9UT0tFTkJBUl9FUV9UT0tFTlNUQVJfRVFfVE9LRU5QTFVTX1BMVVNfVE9LRU5QTFVTX0VRX1RPS0VOTUlOVVNfTUlOVVNfVE9LRU5NSU5VU19FUV9UT0tFTlRJTERFX1NMQVNIX0VRX1RPS0VOVElMREVfU0xBU0hfVE9LRU5QRVJDRU5UX0VRX1RPS0VOR1RfR1RfVE9LRU5DQVJFVF9FUV9UT0tFTkNPTU1FTlRfVE9LRU5TVFJJTkdfSU5URVJQT0xBVElPTl9JREVOVElGSUVSX1RPS0VOUVVFU1RJT05fUEVSSU9EX1RPS0VOUVVFU1RJT05fUVVFU1RJT05fVE9LRU5RVUVTVElPTl9RVUVTVElPTl9FUV9UT0tFTkdFTkVSSUNfTUVUSE9EX1RZUEVfQVNTSUdOX1RPS0VOR0VORVJJQ19NRVRIT0RfVFlQRV9MSVNUX1RPS0VOR1RfR1RfR1RfVE9LRU5QRVJJT0RfUEVSSU9EX1BFUklPRF9RVUVTVElPTl9UT0tFTkdUX0dUX0dUX0VRX1RPS0VOUVVFU1RJT05fUEVSSU9EX09QRU5fU1FVQVJFX0JSQUNLRVRfVE9LRU5mYXN0YS5ib2R5X2J1aWxkZXJDb25zdGFudENvbnRleHRmYXN0YU1vZGlmaWVyY29uc3RNYXNrY292YXJpYW50TWFza2ZpbmFsTWFza2NhbGxOYW1laW5kZXhHZXROYW1laW5kZXhTZXROYW1lbWludXNOYW1lcGx1c05hbWVBc3NlcnRQYXJzZXJGb3JtYWxQYXJhbWV0ZXJLaW5kSWRlbnRpZmllckNvbnRleHRNZW1iZXJLaW5kbGVuZ3RoRm9yVG9rZW5sZW5ndGhPZlNwYW5vZmZzZXRGb3JUb2tlbm9wdGlvbmFsUXVvdGVhbmFseXplUXVvdGV1bmVzY2FwZXVuZXNjYXBlRmlyc3RTdHJpbmdQYXJ0dW5lc2NhcGVMYXN0U3RyaW5nUGFydHVuZXNjYXBlU3RyaW5nUHJvYmxlbUJ1aWxkZXJGaXhlZE51bGxhYmxlTGlzdEdyb3dhYmxlTGlzdEp1bXBUYXJnZXRLaW5kTnVsbFZhbHVlUGFyc2VyUmVjb3ZlcnlTY29wZUxpc3RlbmVyVHlwZUluZmVycmVyVHlwZVByb21vdGVyVHlwZVByb21vdGlvbkZhY3RUeXBlUHJvbW90aW9uU2NvcGVTcHJlYWRNYXBFbnRyeWNvbnZlcnRUb01hcEVudHJ5aXNDb252ZXJ0aWJsZVRvTWFwRW50cnlDb25zdG5lc3NEZWxheWVkQXNzaWdubWVudERlbGF5ZWRQb3N0Zml4SW5jcmVtZW50R2VuZXJhdG9ySW5jb21wbGV0ZUVycm9yR2VuZXJhdG9ySW5jb21wbGV0ZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9ySW5jb21wbGV0ZVNlbmRHZW5lcmF0b3JJbmRleGVkQWNjZXNzR2VuZXJhdG9yTG9hZExpYnJhcnlHZW5lcmF0b3JQYXJlbnRoZXNpemVkRXhwcmVzc2lvbkdlbmVyYXRvclBhcnNlckVycm9yR2VuZXJhdG9yUHJlZml4VXNlR2VuZXJhdG9yUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3JSZWFkT25seUFjY2Vzc0dlbmVyYXRvclNlbmRBY2Nlc3NHZW5lcmF0b3JTdGF0aWNBY2Nlc3NHZW5lcmF0b3JTdXBlckluZGV4ZWRBY2Nlc3NHZW5lcmF0b3JUaGlzQWNjZXNzR2VuZXJhdG9yVGhpc1Byb3BlcnR5QWNjZXNzR2VuZXJhdG9yVHlwZVVzZUdlbmVyYXRvclVubGlua2VkR2VuZXJhdG9yVW5yZXNvbHZlZE5hbWVHZW5lcmF0b3JWYXJpYWJsZVVzZUdlbmVyYXRvcmJ1aWxkSXNOdWxsRXhwcmVzc2lvbkdlbmVyYXRvckhlbHBlckZhbmdvcm5Gb3Jlc3RJbXBsaWNpdFR5cGVBcmd1bWVudHNoYWRvd1N5bnRoZXRpY1dyYXBwZXJjYWxjdWxhdGVCb3VuZHNCb2R5QnVpbGRlcmZvcmVzdGNsYXNzQnVpbGRlcmVuY2xvc2luZ1Njb3Blc3RyaW5nRXhwZWN0ZWRBZnRlck5hdGl2ZWlnbm9yZU1haW5JbkdldE1haW5DbG9zdXJldHlwZUluZmVycmVydHlwZVByb21vdGVybmVlZHNJbXBsaWNpdFN1cGVySW5pdGlhbGl6ZXJmb3JtYWxQYXJhbWV0ZXJTY29wZWluSW5pdGlhbGl6ZXJpbkZpZWxkSW5pdGlhbGl6ZXJpbkNhdGNoQ2xhdXNlaW5DYXRjaEJsb2NrZnVuY3Rpb25OZXN0aW5nTGV2ZWx0cmFuc2Zvcm1Db2xsZWN0aW9uc3RyYW5zZm9ybVNldExpdGVyYWxzcHJvYmxlbUluTG9vcE9yU3dpdGNoc3dpdGNoU2NvcGVjb25zdGFudENvbnRleHRDb25zdGFudENvbnRleHQubm9uZWN1cnJlbnRMb2NhbFZhcmlhYmxlVHlwZWN1cnJlbnRMb2NhbFZhcmlhYmxlTW9kaWZpZXJzcmVkaXJlY3RpbmdGYWN0b3J5SW52b2NhdGlvbnN2YXJpYWJsZXNXaXRoTWV0YWRhdGFtdWx0aVZhcmlhYmxlc1dpdGhNZXRhZGF0YWV4dGVuc2lvblRoaXNfYnVpbHRpbnVpd2l0aFBhcmVudHNmb3JGaWVsZGZvck91dGxpbmVFeHByZXNzaW9udHlwZUluZmVyZW5jZUVuZ2luZWNyZWF0ZUxvY2FsVHlwZUluZmVycmVyaW5Db25zdHJ1Y3RvcmlzSW5zdGFuY2VDb250ZXh0dHlwZVNjaGVtYUVudmlyb25tZW50aW1wbGljaXRUeXBlQXJndW1lbnRwdXNocG9wRm9yVmFsdWV0b1ZhbHVlcG9wcG9wRm9yRWZmZWN0dG9FZmZlY3Rwb3BGb3JWYWx1ZUlmTm90TnVsbGJ1aWxkU2ltcGxlUmVhZGJ1aWxkUHJvYmxlbWJ1aWxkRm9yRWZmZWN0cG9wTGlzdEZvclZhbHVlcG9wTGlzdEZvckVmZmVjdHBvcEJsb2NrY2xvc2VCcmFjZXN0YWNrcG9wU3RhdGVtZW50SWZOb3ROdWxscG9wU3RhdGVtZW50d3JhcFZhcmlhYmxlc2VudGVyU3dpdGNoU2NvcGVOdWxsVmFsdWUuU3dpdGNoU2NvcGVleGl0U3dpdGNoU2NvcGVvdXRlclN3aXRjaFNjb3BldW5jbGFpbWVkRm9yd2FyZERlY2xhcmF0aW9uc3VzZXJzd3JhcEluUHJvYmxlbVN0YXRlbWVudGZvcndhcmREZWNsYXJlTGFiZWx3cmFwVmFyaWFibGVJbml0aWFsaXplckluRXJyb3J3cmFwSW5Mb2NhdGVkUHJvYmxlbWRlY2xhcmVWYXJpYWJsZWNyZWF0ZUp1bXBUYXJnZXRpbmZlckFubm90YXRpb25zaW5mZXJNZXRhZGF0YXRyYW5zZm9ybUxpc3RQb3N0SW5mZXJlbmNlYmVnaW5NZXRhZGF0YWRlYnVnRXZlbnRDb25zdGFudENvbnRleHQuaW5mZXJyZWRlbmRNZXRhZGF0YXBlcmlvZEJlZm9yZU5hbWVNZXRhZGF0YXB1c2hRdWFsaWZpZWRSZWZlcmVuY2VidWlsZENvbnN0cnVjdG9yUmVmZXJlbmNlSW52b2NhdGlvbkNvbnN0bmVzcy5leHBsaWNpdENvbnN0bmFtZU9yaWdpbnBlcmlvZGdlbmVyYXRvcmJ1aWxkUHJvcGVydHlBY2Nlc3NzYXZlZENvbnN0YW50Q29udGV4dHdyYXBJblByb2JsZW1lbmRNZXRhZGF0YVN0YXJNZXRhZGF0YVN0YXJOdWxsVmFsdWUuTWV0YWRhdGFlbmRUb3BMZXZlbEZpZWxkc3N0YXRpY1Rva2VuY292YXJpYW50VG9rZW5sYXRlVG9rZW52YXJGaW5hbE9yQ29uc3RUb3BMZXZlbEZpZWxkc3JlcG9ydE5vbk51bGxhYmxlTW9kaWZpZXJFcnJvcmVuZEZpZWxkc0ZpZWxkc2ZpbmlzaEZpZWxkc2luZmVyRmllbGRJbml0aWFsaXplcmJ1aWx0VHlwZXRyYW5zZm9ybVBvc3RJbmZlcmVuY2VidWlsZERhcnRUeXBlcmVzb2x2ZVJlZGlyZWN0aW5nRmFjdG9yeVRhcmdldHNmaW5pc2hWYXJpYWJsZU1ldGFkYXRhZW5kTWVtYmVyZW5kQmxvY2tGdW5jdGlvbkJvZHlCbG9ja0Z1bmN0aW9uQm9keU51bGxWYWx1ZS5CbG9ja2V4aXRMb2NhbFNjb3BlcHJlcGFyZUluaXRpYWxpemVyc2NvbXB1dGVGb3JtYWxQYXJhbWV0ZXJJbml0aWFsaXplclNjb3BlZm9ybWFsc2lzSW5pdGlhbGl6aW5nRm9ybWFsYnVpbGRJbnZhbGlkSW5pdGlhbGl6ZXJkZXN1Z2FyU3ludGhldGljRXhwcmVzc2lvbmJ1aWxkRmllbGRJbml0aWFsaXplcmZvcm1hbFR5cGVhZGRJbml0aWFsaXplcmhhbmRsZU5vSW5pdGlhbGl6ZXJzTm9Jbml0aWFsaXplcnNiZWdpbkluaXRpYWxpemVyc2VuZEluaXRpYWxpemVyc0luaXRpYWxpemVyc2JlZ2luSW5pdGlhbGl6ZXJlbmRJbml0aWFsaXplcmJ1aWxkU3VwZXJJbml0aWFsaXplcmlzVGhyb3dpbmZlckluaXRpYWxpemVyX2NvbXB1dGVSZXR1cm5UeXBlQ29udGV4dGZpbmlzaEZ1bmN0aW9uYXN5bmNNb2RpZmllcmZpbmlzaGVkaXNPcHRpb25hbHJlYWxQYXJhbWV0ZXJsaXRlcmFsTnVsbGluZmVyUGFyYW1ldGVySW5pdGlhbGl6ZXJpbmZlckZ1bmN0aW9uQm9keWZ1dHVyZUJvdHRvbVR5cGVmdXR1cmVPZkJvdHRvbXN0cmVhbUJvdHRvbVR5cGVzdHJlYW1PZkJvdHRvbWl0ZXJhYmxlQm90dG9tVHlwZWl0ZXJhYmxlT2ZCb3R0b21hc3luYywgYXN5bmMqLCBzeW5jLCBvciBzeW5jKmV4cHJlc3Npb25TdGF0ZW1lbnRmaW5pc2hDb25zdHJ1Y3RvcmVuc3VyZUxpYnJhcnlMb2FkZWRpc0J1aWx0QW5kTWFya2VkaW52b2NhdGlvbmluZmVycmVkVHlwZWluaXRpYWxUYXJnZXRyZXBsYWNlbWVudE5vZGVyZWRpcmVjdGlvblRhcmdldHJlc29sdmVkVGFyZ2V0Y29uc3RydWN0b3JOYW1lRm9yRGlhZ25vc3RpY3NldmFsdWF0ZUFyZ3VtZW50c0JlZm9yZWJ1aWxkQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcnJlZGlyZWN0aW5nRmFjdG9yeUJvZHllcnJvck5hbWV0aHJvd05vU3VjaE1ldGhvZEVycm9yYnVpbGRTdGF0aWNJbnZvY2F0aW9uY29uc3RuZXNzQ29uc3RuZXNzLmV4cGxpY2l0TmV3ZmluaXNoTWV0YWRhdGF0ZW1wb3JhcnlQYXJlbnRwYXJzZVNpbmdsZUV4cHJlc3Npb25wYXJzZXJ0eXBlUGFyYW1ldGVyQnVpbGRlcnNlbnRlckZ1bmN0aW9uVHlwZVNjb3BlZW50ZXJMb2NhbFNjb3BlY29tcHV0ZUZvcm1hbFBhcmFtZXRlclNjb3BlcGFyc2VFeHByZXNzaW9uc3ludGhldGljUHJldmlvdXNUb2tlbmZha2VSZXR1cm5wYXJzZUluaXRpYWxpemVyc2NoZWNrRW1wdHlwYXJzZUZpZWxkSW5pdGlhbGl6ZXJwYXJzZUFubm90YXRpb25wYXJzZU1ldGFkYXRhbG9va3VwQ29uc3RydWN0b3Jhcmd1bWVudHNFbXB0eWNoZWNrQXJndW1lbnRzRm9yRnVuY3Rpb25mdWxsTmFtZUZvckVycm9yc2hhbmRsZUV4cHJlc3Npb25TdGF0ZW1lbnRlbmRBcmd1bWVudHNmaXJzdE5hbWVkQXJndW1lbnRJbmRleGhhbmRsZVBhcmVudGhlc2l6ZWRDb25kaXRpb25QYXJlbnRoZXNpemVkQ29uZGl0aW9ucGFyZW50aGVzaXplZENvbmRpdGlvbmhhbmRsZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uUGFyZW50aGVzaXplZEV4cHJlc3Npb25pc1BhcmVudGhlc2l6ZWRoYW5kbGVTZW5kY2hlY2tTdGF0ZU51bGxWYWx1ZS5Bcmd1bWVudHNOdWxsVmFsdWUuVHlwZUFyZ3VtZW50c1NlbmRhcmd1bWVudHNUeXBlQXJndW1lbnRzYXJndW1lbnRzU2V0VHlwZUFyZ3VtZW50c2J1aWxkRGFydFR5cGVBcmd1bWVudHNjYXN0QXJndW1lbnRzZmluaXNoU2VuZGRvSW52b2NhdGlvbmJ1aWxkTWV0aG9kSW52b2NhdGlvbmlzSW1wbGljaXRDYWxsYmVnaW5DYXNjYWRlZXh0ZW5kZW5kQ2FzY2FkZWNhc2NhZGVSZWNlaXZlcmZpbmFsaXplYmVnaW5DYXNlRXhwcmVzc2lvbmNhc2VLZXl3b3JkZW5kQ2FzZUV4cHJlc3Npb25jb2xvbmJlZ2luQmluYXJ5RXhwcmVzc2lvbmxoc2VudGVyTG9naWNhbEV4cHJlc3Npb25lbmRCaW5hcnlFeHByZXNzaW9uQmluYXJ5RXhwcmVzc2lvbmRvRG90T3JDYXNjYWRlRXhwcmVzc2lvbmRvTG9naWNhbEV4cHJlc3Npb25kb0lmTnVsbGRvSWZOb3ROdWxsdGhpc0FjY2Vzc29yUmVjZWl2ZXJ0aGlzRXhwcmVzc2lvbmJ1aWxkQmluYXJ5T3BlcmF0b3JuZWdhdGVpc0NvbnN0YW50RXhwcmVzc2lvbm5vdEV4cHJlc3Npb25sb2dpY2FsRXhwcmVzc2lvbmV4aXRMb2dpY2FsRXhwcmVzc2lvbmNvbmRpdGlvbmFsRXhwcmVzc2lvbnNlbmR3aXRoUmVjZWl2ZXJpc051bGxBd2FyZWFyZUFyZ3VtZW50c0NvbXBhdGlibGVwZXJpb2RJbmRleGtlcm5lbE5hbWV3YXJuVW5yZXNvbHZlZEdldHJlcG9ydFdhcm5pbmd3YXJuVW5yZXNvbHZlZFNldHdhcm5VbnJlc29sdmVkTWV0aG9kdGhyb3dFeHByZXNzaW9uYWRkUHJvYmxlbUVycm9ySWZDb25zdHBsYWluTmFtZWRvdEluZGV4d2FyblR5cGVBcmd1bWVudHNNaXNtYXRjaGxvb2t1cEluc3RhbmNlTWVtYmVyaGFuZGxlSWRlbnRpZmllcmRlcHJlY2F0ZWRkZXByZWNhdGVkX2lzU2NvcGVSZWZlcmVuY2VzY29wZUxvb2t1cGluRGVjbGFyYXRpb250b3BMZXZlbFZhcmlhYmxlRGVjbGFyYXRpb25maWVsZERlY2xhcmF0aW9uaGFzQ29uc3RDb25zdHJ1Y3RvckNvbnN0YW50Q29udGV4dC5yZXF1aXJlZGFsbG93ZWRJbkNvbnN0YW50RXhwcmVzc2lvbl9jcmVhdGVWYXJpYWJsZUdldGZhY3RnZXRGYWN0Rm9yQWNjZXNzY3VycmVudFNjb3BlX2NyZWF0ZVJlYWRPbmx5VmFyaWFibGVBY2Nlc3Npc1F1YWxpZmllZGZpbmRTdGF0aWNCdWlsZGVyX2dldE1haW5DbG9zdXJlaXNUeXBlRGVjbGFyYXRpb25pc0xvY2FsZ2V0dGVyaXNSZWd1bGFyTWV0aG9kaGFzUHJvYmxlbWxvb2t1cFNldHRlcnJlYWRUYXJnZXRoYW5kbGVRdWFsaWZpZWRRdWFsaWZpZWRxdWFsaWZpZXJ3aXRoUXVhbGlmaWVyYmVnaW5MaXRlcmFsU3RyaW5naGFuZGxlU3RyaW5nUGFydFN0cmluZ1BhcnRlbmRMaXRlcmFsU3RyaW5naW50ZXJwb2xhdGlvbkNvdW50bGl0ZXJhbFN0cmluZ3F1b3Rlc3RyaW5nQ29uY2F0ZW5hdGlvbkV4cHJlc3Npb25oYW5kbGVOYXRpdmVDbGF1c2VuYXRpdmVUb2tlbmhhc05hbWVOYXRpdmVDbGF1c2Vhc0xpdGVyYWxTdHJpbmdoYW5kbGVTY3JpcHRTY3JpcHRoYW5kbGVTdHJpbmdKdXh0YXBvc2l0aW9ubGl0ZXJhbENvdW50U3RyaW5nSnV4dGFwb3NpdGlvbmhhbmRsZUxpdGVyYWxJbnRMaXRlcmFsSW50bGFyZ2UgaW50ZWdlcmxpdGVyYWxJbnRsaXRlcmFsTGFyZ2VJbnRoYW5kbGVFbXB0eUZ1bmN0aW9uQm9keXNlbWljb2xvbkV4cHJlc3Npb25GdW5jdGlvbkJvZHloYW5kbGVFeHByZXNzaW9uRnVuY3Rpb25Cb2R5YXJyb3dUb2tlbmVuZFJldHVyblN0YXRlbWVudGhhc0V4cHJlc3Npb25idWlsZFByb2JsZW1TdGF0ZW1lbnRyZXR1cm5TdGF0ZW1lbnRiZWdpblRoZW5TdGF0ZW1lbnRlbnRlclRoZW5Gb3JUeXBlUHJvbW90aW9uZW5kVGhlblN0YXRlbWVudGVudGVyRWxzZWVuZElmU3RhdGVtZW50aWZUb2tlbmVsc2VUb2tlbmVsc2VQYXJ0dGhlblBhcnRleGl0Q29uZGl0aW9uYWxpZlN0YXRlbWVudGVuZFZhcmlhYmxlSW5pdGlhbGl6ZXJhc3NpZ25tZW50T3BlcmF0b3JWYXJpYWJsZUluaXRpYWxpemVycHVzaE5ld0xvY2FsVmFyaWFibGVlcXVhbHNUb2tlbmhhbmRsZU5vVmFyaWFibGVJbml0aWFsaXplck5vVmFyaWFibGVJbml0aWFsaXplcmZvclN5bnRoZXRpY1Rva2VuY2hlY2tCb3VuZHNJblZhcmlhYmxlRGVjbGFyYXRpb25iZWdpbkZpZWxkSW5pdGlhbGl6ZXJlbmRGaWVsZEluaXRpYWxpemVyaGFuZGxlTm9GaWVsZEluaXRpYWxpemVyTm9GaWVsZEluaXRpYWxpemVyTnVsbFZhbHVlLkZpZWxkSW5pdGlhbGl6ZXJlbmRJbml0aWFsaXplZElkZW50aWZpZXJuYW1lVG9rZW5Jbml0aWFsaXplZElkZW50aWZpZXJiZWdpblZhcmlhYmxlc0RlY2xhcmF0aW9ubW9kaWZpZXJzTnVsbFZhbHVlLlR5cGVlbmRWYXJpYWJsZXNEZWNsYXJhdGlvblZhcmlhYmxlc0RlY2xhcmF0aW9udmFyaWFibGVzRGVjbGFyYXRpb25lbmRCbG9ja2hhbmRsZUludmFsaWRUb3BMZXZlbEJsb2NraGFuZGxlQXNzaWdubWVudEV4cHJlc3Npb25Bc3NpZ25tZW50RXhwcmVzc2lvbmVudGVyTG9vcGVudGVyQnJlYWtUYXJnZXRicmVha1RhcmdldGVudGVyQ29udGludWVUYXJnZXRjb250aW51ZVRhcmdldGV4aXRMb29wT3JTd2l0Y2hidWlsZFZhcmlhYmxlRGVjbGFyYXRpb25zdmFyaWFibGVPckV4cHJlc3Npb25pc1ZhcmlhYmxlc0RlY2xhcmF0aW9udmFyaWFibGVzRGVjbGFyYXRpb25FeHRyYWN0RGVjbGFyYXRpb25zaGFuZGxlRm9ySW5pdGlhbGl6ZXJFbXB0eVN0YXRlbWVudEZvckluaXRpYWxpemVyRW1wdHlTdGF0ZW1lbnROdWxsVmFsdWUuRXhwcmVzc2lvbmhhbmRsZUZvckluaXRpYWxpemVyRXhwcmVzc2lvblN0YXRlbWVudEZvckluaXRpYWxpemVyRXhwcmVzc2lvblN0YXRlbWVudGhhbmRsZUZvckluaXRpYWxpemVyTG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uRm9ySW5pdGlhbGl6ZXJMb2NhbFZhcmlhYmxlRGVjbGFyYXRpb25oYW5kbGVGb3JMb29wUGFydHNmb3JLZXl3b3JkbGVmdFBhcmVubGVmdFNlcGFyYXRvcnVwZGF0ZUV4cHJlc3Npb25Db3VudGVuZEZvckNvbnRyb2xGbG93Rm9yQ29udHJvbEZsb3dmb3JUb2tlbmNvbmRpdGlvblN0YXRlbWVudGVuYWJsZUNvbnRyb2xGbG93Q29sbGVjdGlvbnNoYW5kbGVSZWNvdmVyYWJsZUVycm9yaXNFeHByZXNzaW9uU3RhdGVtZW50Z2V0RXhwcmVzc2lvbkZyb21FeHByZXNzaW9uU3RhdGVtZW50aXNFbXB0eVN0YXRlbWVudGZvck1hcEVudHJ5Zm9yRWxlbWVudGVuZEZvclN0YXRlbWVudGV4aXRDb250aW51ZVRhcmdldGV4aXRCcmVha1RhcmdldGhhc1VzZXJzc3ludGhldGljTGFiZWxlZFN0YXRlbWVudHJlc29sdmVDb250aW51ZXNmb3JTdGF0ZW1lbnRyZXNvbHZlQnJlYWtzc3VwcHJlc3NNZXNzYWdlZW5kQXdhaXRFeHByZXNzaW9uYXdhaXRFeHByZXNzaW9uZW5kSW52YWxpZEF3YWl0RXhwcmVzc2lvbmhhbmRsZUFzeW5jTW9kaWZpZXJhc3luY1Rva2Vuc3RhclRva2VuaGFuZGxlTGl0ZXJhbExpc3RsZWZ0QnJhY2tldGNvbnN0S2V5d29yZHJpZ2h0QnJhY2tldExpdGVyYWxMaXN0ZWxlbWxpdGVyYWxMaXN0Y2hlY2tCb3VuZHNJbkxpc3RMaXRlcmFsYnVpbGRMaXRlcmFsU2V0bGVmdEJyYWNlc2V0T3JNYXBFbnRyaWVzbGl0ZXJhbFNldGNoZWNrQm91bmRzSW5TZXRMaXRlcmFsaGFuZGxlTGl0ZXJhbFNldE9yTWFwcmlnaHRCcmFjZWhhc1NldEVudHJ5TGl0ZXJhbFNldE9yTWFwdHlwZUFyZ0NvdW50aXNTZXRtYXBFbnRyaWVzYnVpbGRMaXRlcmFsTWFwaGFuZGxlTGl0ZXJhbEJvb2xMaXRlcmFsQm9vbGxpdGVyYWxCb29saGFuZGxlTGl0ZXJhbERvdWJsZUxpdGVyYWxEb3VibGVsaXRlcmFsRG91YmxlaGFuZGxlTGl0ZXJhbE51bGxMaXRlcmFsTnVsbGxpdGVyYWxNYXBjaGVja0JvdW5kc0luTWFwTGl0ZXJhbGhhbmRsZUxpdGVyYWxNYXBFbnRyeUxpdGVyYWxNYXBFbnRyeW1hcEVudHJ5c3ltYm9sUGFydFRvU3RyaW5nZW5kTGl0ZXJhbFN5bWJvbGhhc2hUb2tlbmlkZW50aWZpZXJDb3VudExpdGVyYWxTeW1ib2xsaXRlcmFsU3ltYm9sU2luZ2x1YXJsaXRlcmFsU3ltYm9sTXVsdGlwbGVoYW5kbGVOb25OdWxsQXNzZXJ0RXhwcmVzc2lvbmJhbmdyZXBvcnROb25OdWxsQXNzZXJ0RXhwcmVzc2lvbk5vdEVuYWJsZWRoYW5kbGVUeXBlcXVlc3Rpb25NYXJrcmVwb3J0RXJyb3JJZk51bGxhYmxlVHlwZXF1YWxpZmllZHF1YWxpZmllZExvb2t1cGRpc3BsYXlOYW1lYnVpbGRUeXBlV2l0aFJlc29sdmVkQXJndW1lbnRzYmVnaW5GdW5jdGlvblR5cGV0eXBlVmFyaWFibGVzY3JlYXRlTmVzdGVkU2NvcGVmdW5jdGlvbi10eXBlIHNjb3BlaXNNb2RpZmlhYmxlc2NvcGVCdWlsZGVycmVwb3J0RHVwbGljYXRlZERlY2xhcmF0aW9uZW5kRnVuY3Rpb25UeXBlZnVuY3Rpb25Ub2tlbnRvRnVuY3Rpb25UeXBlaGFuZGxlVm9pZEtleXdvcmRWb2lkS2V5d29yZGhhbmRsZUFzT3BlcmF0b3JBc09wZXJhdG9yY2hlY2tCb3VuZHNJblR5cGVBcyBleHByZXNzaW9uaGFuZGxlSXNPcGVyYXRvcm5vdElzT3BlcmF0b3Jpc0ludmVydGVkaXNFeHByZXNzaW9uaGFuZGxlSXNDaGVja0lzIGV4cHJlc3Npb25iZWdpbkNvbmRpdGlvbmFsRXhwcmVzc2lvbnF1ZXN0aW9uZW50ZXJUaGVuaGFuZGxlQ29uZGl0aW9uYWxFeHByZXNzaW9uQ29sb25lbmRDb25kaXRpb25hbEV4cHJlc3Npb25lbHNlRXhwcmVzc2lvbnRoZW5FeHByZXNzaW9uaGFuZGxlVGhyb3dFeHByZXNzaW9udGhyb3dUb2tlblRocm93RXhwcmVzc2lvbmJlZ2luRm9ybWFsUGFyYW1ldGVycmVxdWlyZWRUb2tlbmVuZEZvcm1hbFBhcmFtZXRlcnRoaXNLZXl3b3JkcGVyaW9kQWZ0ZXJUaGlzaW5pdGlhbGl6ZXJTdGFydGluaXRpYWxpemVyRW5kbWVtYmVyS2luZEZvcm1hbFBhcmFtZXRlcm5hbWVOb2RlTWVtYmVyS2luZC5HZW5lcmFsaXplZEZ1bmN0aW9uVHlwZWdldEZvcm1hbGJ1aWxkRm9ybWFsUGFyYW1ldGVyS2luZC5tYW5kYXRvcnllbmRPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnNPcHRpb25hbEZvcm1hbFBhcmFtZXRlcnNGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsTmFtZWRGb3JtYWxQYXJhbWV0ZXJLaW5kLm9wdGlvbmFsUG9zaXRpb25hbGJlZ2luRnVuY3Rpb25UeXBlZEZvcm1hbFBhcmFtZXRlcmVuZEZ1bmN0aW9uVHlwZWRGb3JtYWxQYXJhbWV0ZXJGdW5jdGlvblR5cGVkRm9ybWFsUGFyYW1ldGVyYmVnaW5Gb3JtYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVFeHByZXNzaW9uZW5kRm9ybWFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlRXhwcmVzc2lvbkZvcm1hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZUV4cHJlc3Npb25kZWZhdWx0VmFsdWVFeHByZXNzaW9uaGFuZGxlVmFsdWVkRm9ybWFsUGFyYW1ldGVyVmFsdWVkRm9ybWFsUGFyYW1ldGVyaGFuZGxlRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlRm9ybWFsUGFyYW1ldGVyV2l0aG91dFZhbHVlYmVnaW5Gb3JtYWxQYXJhbWV0ZXJzZW5kRm9ybWFsUGFyYW1ldGVyc0Zvcm1hbFBhcmFtZXRlcnNvcHRpb25hbHNvcHRpb25hbHNDb3VudHBvcFBhZGRlZGJlZ2luQ2F0Y2hDbGF1c2VlbmRDYXRjaENsYXVzZUNhdGNoQ2xhdXNlaGFuZGxlQ2F0Y2hCbG9ja29uS2V5d29yZGNhdGNoS2V5d29yZGNvbW1hQ2F0Y2hCbG9ja2NhdGNoUGFyYW1ldGVyc3BvcElmTm90TnVsbGV4Y2VwdGlvblR5cGVjb21waWxlVGltZUVycm9yc3BhcmFtZXRlckNvdW50Y2F0Y2hDbGF1c2VlbmRUcnlTdGF0ZW1lbnRjYXRjaENvdW50dHJ5S2V5d29yZGZpbmFsbHlLZXl3b3JkZmluYWxseUJsb2NrY2F0Y2hCbG9ja3NjYXRjaEJsb2Nrc0FuZEVycm9yc3RyeUJsb2NrdHJ5U3RhdGVtZW50aGFuZGxlSW5kZXhlZEV4cHJlc3Npb25vcGVuU3F1YXJlQnJhY2tldGNsb3NlU3F1YXJlQnJhY2tldEluZGV4ZWRFeHByZXNzaW9uaGFuZGxlVW5hcnlQcmVmaXhFeHByZXNzaW9uVW5hcnlQcmVmaXhFeHByZXNzaW9ucmVjZWl2ZXJWYWx1ZWluY3JlbWVudE9wZXJhdG9yaGFuZGxlVW5hcnlQcmVmaXhBc3NpZ25tZW50RXhwcmVzc2lvblVuYXJ5UHJlZml4QXNzaWdubWVudEV4cHJlc3Npb25idWlsZFByZWZpeEluY3JlbWVudGhhbmRsZVVuYXJ5UG9zdGZpeEFzc2lnbm1lbnRFeHByZXNzaW9uVW5hcnlQb3N0Zml4QXNzaWdubWVudEV4cHJlc3Npb25lbmRDb25zdHJ1Y3RvclJlZmVyZW5jZUNvbnN0cnVjdG9yUmVmZXJlbmNlTnVsbFZhbHVlLklkZW50aWZpZXJDb25zdG5lc3MuaW1wbGljaXRjaGFyTGVuZ3RoYXJnTWVzc2FnZXdyYXBTeW50aGV0aWNFeHByZXNzaW9ud3JhcEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb25jaGVja0JvdW5kc0luQ29uc3RydWN0b3JJbnZvY2F0aW9uY2hlY2tCb3VuZHNJbkZhY3RvcnlJbnZvY2F0aW9uY2hlY2tCb3VuZHNJblN0YXRpY0ludm9jYXRpb25hcmd1bWVudHNQb3NpdGlvbmFsYXJndW1lbnRzTmFtZWRjaGVja0FyZ3VtZW50c0ZvclR5cGViZWdpbk5ld0V4cHJlc3Npb25OZXcgZXhwcmVzc2lvbmJlZ2luQ29uc3RFeHByZXNzaW9uYmVnaW5Db25zdExpdGVyYWxiZWdpbkltcGxpY2l0Q3JlYXRpb25FeHByZXNzaW9uZW5kQ29uc3RMaXRlcmFsbGl0ZXJhbGVuZE5ld0V4cHJlc3Npb25OZXdFeHByZXNzaW9ubmFtZUxhc3RJZGVudGlmaWVybmFtZUxhc3RUb2tlbmludm9rZUNvbnN0cnVjdG9yZW5kSW1wbGljaXRDcmVhdGlvbkV4cHJlc3Npb25JbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbmJ1aWxkQ29uc3RydWN0b3JJbnZvY2F0aW9uZmluZENvbnN0cnVjdG9yT3JGYWN0b3J5d3JhcFVucmVzb2x2ZWRUYXJnZXRJbnZvY2F0aW9uZW5kQ29uc3RFeHByZXNzaW9uYmVnaW5JZkNvbnRyb2xGbG93YmVnaW5UaGVuQ29udHJvbEZsb3doYW5kbGVFbHNlQ29udHJvbEZsb3dlbmRJZkNvbnRyb2xGbG93aWZNYXBFbnRyeWlmRWxlbWVudGVuZElmRWxzZUNvbnRyb2xGbG93ZWxzZUVudHJ5dGhlbkVudHJ5aGFuZGxlU3ByZWFkRXhwcmVzc2lvbnNwcmVhZFRva2VuU3ByZWFkRXhwcmVzc2lvbmVuYWJsZVNwcmVhZENvbGxlY3Rpb25zc3ByZWFkRWxlbWVudGVuZFR5cGVBcmd1bWVudHNUeXBlQXJndW1lbnRzaGFuZGxlSW52YWxpZFR5cGVBcmd1bWVudHNJbnZhbGlkVHlwZUFyZ3VtZW50c2hhbmRsZVRoaXNFeHByZXNzaW9uaGFuZGxlU3VwZXJFeHByZXNzaW9uU3VwZXJFeHByZXNzaW9uaGFuZGxlTmFtZWRBcmd1bWVudE5hbWVkQXJndW1lbnRlbmRGdW5jdGlvbk5hbWVGdW5jdGlvbk5hbWVpc0xvY2FsRnVuY3Rpb25lbnRlckZ1bmN0aW9uZXhpdEZ1bmN0aW9uTnVsbFZhbHVlLlR5cGVWYXJpYWJsZXNiZWdpbkxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbmJlZ2luTmFtZWRGdW5jdGlvbkV4cHJlc3Npb25uYW1lZCBmdW5jdGlvbmJlZ2luRnVuY3Rpb25FeHByZXNzaW9ucHVzaE5hbWVkRnVuY3Rpb25pc0Z1bmN0aW9uRXhwcmVzc2lvbmhhc0ltcGxpY2l0UmV0dXJuVHlwZWJ1aWxkRnVuY3Rpb25Ob2Rlb2xkSW5pdGlhbGl6ZXJpc0Vycm9uZW91c05vZGVlbmROYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbmVuZExvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbkxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbmVuZEZ1bmN0aW9uRXhwcmVzc2lvbmVuZERvV2hpbGVTdGF0ZW1lbnRkb0tleXdvcmR3aGlsZUtleXdvcmREb1doaWxlU3RhdGVtZW50ZG9TdGF0ZW1lbnRiZWdpbkZvckluRXhwcmVzc2lvbmVuZEZvckluRXhwcmVzc2lvbkZvckluRXhwcmVzc2lvbmhhbmRsZUZvckluTG9vcFBhcnRzYXdhaXRUb2tlbmxlZnRQYXJlbnRoZXNpc2luS2V5d29yZE51bGxWYWx1ZS5Bd2FpdFRva2VuZW5kRm9ySW5Db250cm9sRmxvd0ZvckluQ29udHJvbEZsb3dpblRva2VubHZhbHVlYnVpbGRGb3JJblZhcmlhYmxlY2hlY2tGb3JJblZhcmlhYmxlcHJvbG9ndWVidWlsZEZvckluQm9keWZvckluTWFwRW50cnlmb3JJbkVsZW1lbnRzeW50aGV0aWNBc3NpZ25tZW50YnVpbGRBc3NpZ25tZW50dm9pZENvbnRleHRlbmRGb3JJbkZvckluaGFuZGxlTGFiZWxMYWJlbGJlZ2luTGFiZWxlZFN0YXRlbWVudGxhYmVsQ291bnRjcmVhdGVOZXN0ZWRMYWJlbFNjb3BlZGVjbGFyZUxhYmVsZW5kTGFiZWxlZFN0YXRlbWVudGVuZFJldGhyb3dTdGF0ZW1lbnRyZXRocm93VG9rZW5SZXRocm93U3RhdGVtZW50cmV0aHJvd1N0YXRlbWVudGhhbmRsZUZpbmFsbHlCbG9ja0ZpbmFsbHlCbG9ja2VuZFdoaWxlU3RhdGVtZW50d2hpbGVTdGF0ZW1lbnRoYW5kbGVFbXB0eVN0YXRlbWVudGVtcHR5U3RhdGVtZW50YmVnaW5Bc3NlcnRhc3NlcnRLZXl3b3JkZW5kQXNzZXJ0Y29tbWFUb2tlbnNlbWljb2xvblRva2VuQXNzZXJ0LlN0YXRlbWVudGFzc2VydFN0YXRlbWVudEFzc2VydC5FeHByZXNzaW9uQXNzZXJ0LkluaXRpYWxpemVyYXNzZXJ0SW5pdGlhbGl6ZXJlbmRZaWVsZFN0YXRlbWVudHlpZWxkVG9rZW55aWVsZFN0YXRlbWVudGJlZ2luU3dpdGNoQmxvY2tzd2l0Y2ggYmxvY2tiZWdpblN3aXRjaENhc2VleHByZXNzaW9uQ291bnRsYWJlbHNBbmRFeHByZXNzaW9uc2xhYmVsSW5kZXhleHByZXNzaW9uSW5kZXhsYWJlbE9yRXhwcmVzc2lvbmxhYmVsTmFtZWhhc0xvY2FsTGFiZWxjbGFpbUxhYmVsY3JlYXRlR290b1RhcmdldE51bGxWYWx1ZS5MYWJlbHNzd2l0Y2ggY2FzZWVuZFN3aXRjaENhc2VkZWZhdWx0S2V5d29yZGNvbG9uQWZ0ZXJEZWZhdWx0c3RhdGVtZW50Q291bnRlbmRTd2l0Y2hTdGF0ZW1lbnRzd2l0Y2hLZXl3b3JkZW5kU3dpdGNoQmxvY2tjYXNlQ291bnRTd2l0Y2hCbG9ja2xvb2t1cExhYmVscmVzb2x2ZUdvdG9zbGFzdE5vZGVpc0Jsb2NrYnVpbGRGYWxsVGhyb3VnaEVycm9yaGFuZGxlQ2FzZU1hdGNoQ2FzZU1hdGNoaGFuZGxlQnJlYWtTdGF0ZW1lbnRoYXNUYXJnZXRicmVha0tleXdvcmRpc0JyZWFrVGFyZ2V0bGFiZWxUb2tlbmJ1aWxkUHJvYmxlbVRhcmdldE91dHNpZGVMb2NhbEZ1bmN0aW9uYnJlYWtTdGF0ZW1lbnRhZGRCcmVha2lzQnJlYWtoYW5kbGVDb250aW51ZVN0YXRlbWVudGNvbnRpbnVlS2V5d29yZENvbnRpbnVlU3RhdGVtZW50bmFtZWRUYXJnZXRpc0dvdG9UYXJnZXRhZGRHb3RvaXNDb250aW51ZVRhcmdldGNvbnRpbnVlU3RhdGVtZW50YWRkQ29udGludWViZWdpblR5cGVWYXJpYWJsZWhhbmRsZVR5cGVWYXJpYWJsZXNEZWZpbmVkZW5kVHlwZVZhcmlhYmxlZXh0ZW5kc09yU3VwZXJUeXBlVmFyaWFibGVlbmRUeXBlVmFyaWFibGVzVHlwZVZhcmlhYmxlc2NhbGN1bGF0ZWRCb3VuZHNyZXNvbHZlSW5oYW5kbGVOb1R5cGVWYXJpYWJsZXNOb1R5cGVWYXJpYWJsZXN0eXBlVmFyaWFibGVCdWlsZGVyc1RvS2VybmVsdHlwZVZhcmlhYmxlQnVpbGRlcnNoYW5kbGVJbnZhbGlkU3RhdGVtZW50YnVpbGRJbnZhbGlkU3VwZXJJbml0aWFsaXplcmJ1aWxkRHVwbGljYXRlZEluaXRpYWxpemVycHJldmlvdXNJbml0aWFsaXplck9mZnNldGZpZWxkTmFtZU9mZnNldGFzc2lnbm1lbnRPZmZzZXRoYXNJbml0aWFsaXplcmJ1aWxkUmVkaXJlY3RpbmdJbml0aWFsaXplcmNoZWNrQ29uc3RydWN0b3JDeWNsaWNoYW5kbGVPcGVyYXRvcmhhbmRsZVN5bWJvbFZvaWRTeW1ib2xWb2lkaGFuZGxlSW52YWxpZEZ1bmN0aW9uQm9keU51bGxWYWx1ZS5GdW5jdGlvbkJvZHl2YWxpZGF0ZVR5cGVVc2Vub25JbnN0YW5jZUFjY2Vzc0lzRXJyb3Jpc1R5cGVWYXJpYWJsZWlzSWRlbnRpY2FsTWV0aG9kIGludm9jYXRpb25pc1RoaXNFeHByZXNzaW9ubWFrZVN0YXRpY0dldHdyYXBJbkRlZmVycmVkQ2hlY2tjaGVja2NoZWNrTGlicmFyeUlzTG9hZGVkdW5yZXNvbHZlZFR5cGV1bnJlc29sdmVkVHlwZXNkZXN1Z2FyZWRzaGFkb3dOb2Rld3JhcEludmFsaWRXcml0ZXdyYXBVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50aXNDb21wb3VuZHJoc29wZXJhdG9yKEp1bXBUYXJnZXRKdW1wVGFyZ2V0S2luZC5CcmVha0p1bXBUYXJnZXRLaW5kLkNvbnRpbnVlSnVtcFRhcmdldEtpbmQuR290b3VzZXI8anVtcC10YXJnZXQ+TGFiZWxUYXJnZXQ8bGFiZWwtdGFyZ2V0PkVtcHR5IHBhcmFtZXRlcnMgc2hvdWxkIGJlIG51bGxpc05hbWVkRm9ybWFsUGFyYW1ldGVycyhsYWJlbChub0xvY2F0aW9uaW52YWxpZENvbGxlY3Rpb25FbGVtZW50Y29tYmluZVN0YXRlbWVudHNkZWJ1Z05hbWUucmVzdWx0Z2V0Tm9kZU5hbWVhc3luY01hcmtlckZyb21Ub2tlbnNmYXN0YS5pbmNyZW1lbnRhbF9jb21waWxlckluY3JlbWVudGFsS2VybmVsR2VuZXJhdG9yTWVtb3J5RmlsZVN5c3RlbUJ1aWxkZXJHcmFwaHNhdmVBc0d6aXBIeWJyaWRGaWxlU3lzdGVtQ2xhc3NIaWVyYXJjaHlCdWlsZGVyVmFyaWFibGVEZWNsYXJhdGlvbkp1ZGdtZW50TGlicmFyeUdyYXBob3V0bGluZU9ubHl0cmFja05lZWRlZERpbGxMaWJyYXJpZXNuZWVkZWREaWxsTGlicmFyaWVzaW52YWxpZGF0ZWRVcmlzZGlsbExvYWRlZERhdGFwbGF0Zm9ybUJ1aWxkZXJzdXNlckJ1aWxkZXJzaW5pdGlhbGl6ZUZyb21EaWxsVXJpY29tcG9uZW50VG9Jbml0aWFsaXplRnJvbWluaXRpYWxpemVkRnJvbURpbGxwcmV2aW91c1BhY2thZ2VzVXJpcHJldmlvdXNQYWNrYWdlc01hcGN1cnJlbnRQYWNrYWdlc01hcGhhc1RvQ2hlY2tQYWNrYWdlVXJpc3JlbWFpbmluZ0NvbXBvbmVudFByb2JsZW1zbW9kdWxlc1RvTG9hZGRlYnVnRXhwclVyaW9yZy1kYXJ0bGFuZy1kZWJ1Z3N5bnRoZXRpY19kZWJ1Z19leHByZXNzaW9udXNlckNvZGVmcm9tQ29tcG9uZW50Y29tcHV0ZURlbHRhZnVsbENvbXBvbmVudGJ5dGVzTGVuZ3RoaW5pdGlhbGl6ZUZyb21Db21wb25lbnRzdW1tYXJ5Qnl0ZXNwcmVwYXJlU3VtbWFyeWluaXRpYWxpemVGcm9tRGlsbHN0Z3pJbml0aWFsaXplZEZyb21pbml0aWFsaXphdGlvbkJ5dGVzaW5pdGlhbGl6ZV9mcm9tLmRpbGxyZWNvcmRUZW1wb3JhcnlGaWxlRm9yVGVzdGluZ2ludmFsaWRhdGVOb3RLZXB0VXNlckJ1aWxkZXJzbm90UmV1c2VkTGlicmFyaWVzcmV1c2VkTGlicmFyaWVzY29tcHV0ZVJldXNlZExpYnJhcmllc25vdFJldXNlZHJlbW92ZWREaWxsQnVpbGRlcnNkaWxsQnVpbGRlcnJlbW92ZUxpYnJhcnlGcm9tUmVtYWluaW5nQ29tcG9uZW50UHJvYmxlbXNvbGREaWxsTG9hZGVkRGF0YURlY2lkZWQgdG8gcmV1c2UgIG9mICBsaWJyYXJpZXNsb2FkRW5zdXJlTG9hZGVkQ29tcG9uZW50c3VzZXJDb2RlT2xkY29tcG9uZW50V2l0aERpbGxyZWNvcmROb25GdWxsQ29tcG9uZW50Rm9yVGVzdGluZ3VwZGF0ZU5lZWRlZERpbGxMaWJyYXJlc1dpdGhIaWVyYXJjaHlidWlsZGVySGllcmFyY2h5cmVsZWFzZUFuY2lsbGFyeVJlc291cmNlc2NvbXBpbGVkTGlicmFyaWVzdXNlckxvYWRlZFVyaU1haW5vdXRwdXRMaWJyYXJpZXNjb21wdXRlVHJhbnNpdGl2ZUNsb3N1cmVyZWlzc3VlQ29tcG9uZW50UHJvYmxlbXNyZWlzc3VlTGlicmFyeVByb2JsZW1zZ2V0Q29yZVR5cGVzZ2V0Q2xhc3NIaWVyYXJjaHl1c2VkQ2xhc3Nlc2xvYWRlZE5vdEtlcHRtb2R1bGVsb2FkZWRBbnl0aGluZ3VzZWRDb21wb25lbnRpc3N1ZWRQcm9ibGVtc2dldFBhcnRGaWxlVXJpcGFyZW50RmlsZVVyaWlucHV0TGlicmFyaWVzaW5wdXRMaWJyYXJpZXNGaWx0ZXJlZGxpYnJhcnlNYXBwb3RlbnRpYWxseVJlZmVyZW5jZWRMaWJyYXJpZXNwb3RlbnRpYWxseVJlZmVyZW5jZWRJbnB1dExpYnJhcmllc2dyYXBobmVpZ2hib3JuZWlnaGJvcnNPZnBhcnRGaWxlVXJpUmVhZCBEZXNlcmlhbGl6ZWQgZW50aXR5c2F2ZUNvbXBvbmVudFByb2JsZW1zQWJvdXQgdG8gaW5pdGlhbGl6ZUZyb21Db21wb25lbnRmb3VuZERhcnRDb3JlRGlkIG5vdCBmaW5kIGRhcnQ6Y29yZSB3aGVuIHRyaWVkIHRvIGluaXRpYWxpemUgZnJvbSBjb21wb25lbnQuUmFuIGluaXRpYWxpemVGcm9tQ29tcG9uZW50QXBwZW5kZWQgbGlicmFyaWVzY29tcGlsZUV4cHJlc3Npb250eXBlRGVmaW5pdGlvbnNzeW50aGV0aWNQcm9jZWR1cmVOYW1la2VybmVsQ2xhc3NkZWJ1Z0xpYnJhcnljb21iaW5hdG9yYWRkSW1wb3J0YWRkSW1wb3J0c1RvU2NvcGVoZnNtZW1vcnltb2RpZnlUYXJnZXRidWlsZEV4cHJlc3Npb25jb21waWxlZEV4cHJlc3Npb25zb3VyY2VCeXRlc2ludmFsaWRhdGVkSW1wb3J0VXJpc2lzSW52YWxpZGF0ZWRuZXdGaWxlVXJpYWRkQnVpbGRlckFuZEludmFsaWRhdGVVcmlzcmVjb3JkSW52YWxpZGF0ZWRJbXBvcnRVcmlzRm9yVGVzdGluZ2RpcmVjdERlcGVuZGVuY2llc3ZlcnRleHZlcnRpY2Vzd29ya0xpc3RyZW1vdmVkc2VlblVyaXNpbnZhbGlkYXRlaW52YWxpZGF0ZUFsbFNvdXJjZXNzZXRNb2R1bGVzVG9Mb2FkT25OZXh0Q29tcHV0ZURlbHRhUGFja2FnZUNoYW5nZWRFcnJvckluaXRpYWxpemVGcm9tQ29tcG9uZW50RXJyb3JJbmNyZW1lbnRhbENvbXBpbGVyRGF0YWNvbXBpbGVyLmFwaS5sZWdhY3lFdmVudFNpbmtOdWxsU2lua0xlZ2FjeUNvbXBpbGVySW5wdXRfaW5wdXRQcm92aWRlcnNvdXJjZUZpbGVFeHBlY3RlZCBhICdTdHJpbmcnIG9yIGEgJ0xpc3Q8aW50PicgZnJvbSB0aGUgaW5wdXQgcHJvdmlkZXIsIGJ1dCBnb3Q6IExlZ2FjeUNvbXBpbGVyRGlhZ25vc3RpY3NfaGFuZGxlckxlZ2FjeUNvbXBpbGVyT3V0cHV0X291dHB1dFByb3ZpZGVyZGVmZXJyZWRfbWFwTGVnYWN5Q29tcGlsZXJPdXRwdXQuY3JlYXRlQmluYXJ5U2lua0xlZ2FjeU91dHB1dFNpbmtkYXJ0MmpzLmNvbW1vbi50YXNrc1pvbmVEZWxlZ2F0ZVpvbmVTcGVjaWZpY2F0aW9uQ29tcGlsZXJUYXNrX21lYXN1cmVyX3dhdGNoX3N1YnRhc2tzX2FzeW5jQ291bnRfem9uZVNwZWNpZmljYXRpb25fem9uZVZhbHVlc19pc0Rpc2FibGVkVW5rbm93biB0YXNrICd0aW1pbmd0b3RhbGVsYXBzZWRNaWxsaXNlY29uZHNfbWVhc3VyZVpvbmVkX3N0YXJ0X2N1cnJlbnRUYXNrc3RvcHN0b3BBc3luY1dhbGxDbG9ja19zdG9wc3RhcnRBc3luY1dhbGxDbG9ja3pvbmVTcGVjaWZpY2F0aW9uX3J1bnJ1blVuYXJ5X3J1blVuYXJ5cnVuQmluYXJ5X3J1bkJpbmFyeXpvbmVUMVQyYTFhMl9jdXJyZW50QXN5bmNUYXNrQ2FuJ3QgdHJhY2sgYXN5bmMgdGFzayAnJyBiZWNhdXNlICcnIGlzIGFscmVhZHkgYmVpbmcgdHJhY2tlZC5tZWFzdXJlSW9TdWJ0YXNrX3dhbGxDbG9ja19hc3luY1dhbGxDbG9ja19oYXNoQ29kZUdlbmVyYXRvcnN0YXJ0V2FsbENsb2Nrc3RvcFdhbGxDbG9ja2RhcnQyanMuY29tbW9uYXNzZXJ0RGVidWdNb2RlZmFpbGVkQXRNZXNzYWdlS2luZFNvdXJjZVNwYW5DVVJSRU5UX0VMRU1FTlRfU1BBTk5BQkxFTk9fTE9DQVRJT05fU1BBTk5BQkxFU3Bhbm5hYmxlU3Bhbm5hYmxlQXNzZXJ0aW9uRmFpbHVyZWRhcnQyanMuY29tcGlsZXJfYmFzZVNlbGVjdG9yc1VyaXNXb3JrSXRlbUVsZW1lbnRFbnZpcm9ubWVudERlZmVycmVkTG9hZFRhc2tPdXRwdXRVbml0RGF0YU1lc3NhZ2VUZW1wbGF0ZUR1bXBJbmZvVGFza0VucXVldWVyRW5xdWV1ZVRhc2tSZXNvbHV0aW9uRW5xdWV1ZXJBYnN0cmFjdFZhbHVlU3RyYXRlZ3lUcml2aWFsQWJzdHJhY3RWYWx1ZVN0cmF0ZWd5VHlwZU1hc2tTdHJhdGVneUdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzR2xvYmFsVHlwZUluZmVyZW5jZVRhc2tTb3VyY2VJbmZvcm1hdGlvbkNvZGVnZW5JbnB1dHNKYXZhU2NyaXB0SW1wYWN0U3RyYXRlZ3lLZXJuZWxMb2FkZXJUYXNrS2VybmVsUmVzdWx0TnVsbENvbXBpbGVyT3V0cHV0SEluc3RydWN0aW9uU2VsZWN0b3JJbXBhY3RTdHJhdGVneVdvcmxkSW1wYWN0V29ybGRJbXBhY3RCdWlsZGVySW1wbEpDbG9zZWRXb3JsZEtDbG9zZWRXb3JsZE1ha2VSZXBvcnRlckZ1bmN0aW9uQ29tcGlsZXJmcm9udGVuZFN0cmF0ZWd5YmFja2VuZFN0cmF0ZWd5X3JlcG9ydGVyX2ltcGFjdENhY2hlX2ltcGFjdENhY2hlRGVsZXRlcmltcGFjdFN0cmF0ZWd5c3RvcEFmdGVyQ2xvc2VkV29ybGRzdG9wQWZ0ZXJUeXBlSW5mZXJlbmNlX3VzZXJDb2RlTG9jYXRpb25zYmFja2VuZENsb3NlZFdvcmxkRm9yVGVzdGluZ2dsb2JhbEluZmVyZW5jZV9jb2RlZ2VuV29ybGRCdWlsZGVyYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5ZW5xdWV1ZXJkZWZlcnJlZExvYWRUYXNrZHVtcEluZm9UYXNrc2VyaWFsaXphdGlvblRhc2tQSEFTRV9TQ0FOTklOR1BIQVNFX1JFU09MVklOR1BIQVNFX0RPTkVfUkVTT0xWSU5HUEhBU0VfQ09NUElMSU5HcGhhc2Vjb21waWxhdGlvbkZhaWxlZG9uUmVzb2x1dGlvblF1ZXVlRW1wdHlGb3JUZXN0aW5nb25Db2RlZ2VuUXVldWVFbXB0eUZvclRlc3Rpbmdjb2RlZ2VuV29ybGRGb3JUZXN0aW5nQkVOSUdOX0VSUk9SU01lc3NhZ2VLaW5kLklOVkFMSURfTUVUQURBVEFNZXNzYWdlS2luZC5JTlZBTElEX01FVEFEQVRBX0dFTkVSSUNrZXJuZWxGcm9udEVuZFRhc2tGcm9udCBlbmRyZXBvcnRlcmNyZWF0ZUJhY2tlbmRTdHJhdGVneWNyZWF0ZURlZmVycmVkTG9hZFRhc2tpbXBhY3RDYWNoZWltcGFjdENhY2hlRGVsZXRlcmN1cnJlbnRFbGVtZW50cmVzb2x1dGlvbldvcmxkQnVpbGRlcnJlc29sdXRpb253b3JsZEJ1aWxkZXJjb2RlZ2VuV29ybGRCdWlsZGVyTm8gbG9jYXRpb25Db2RlZ2VuV29ybGRCdWlsZGVyIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC5ydW5JbnRlcm5hbGNsZWFyU3RhdGVDb21waWxpbmcgZGVzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlZ2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHNwZXJmb3JtR2xvYmFsVHlwZUluZmVyZW5jZWNsb3NlZFdvcmxkZ2VuZXJhdGVKYXZhU2NyaXB0Q29kZWxvYWRLZXJuZWwgbG9hZCBjb21wbGV0ZXJlZ2lzdGVyTG9hZGVkTGlicmFyaWVzcmVwb3J0V2FybmluZ01lc3NhZ2VNZXNzYWdlS2luZC5NSVJST1JTX0xJQlJBUllfTk9UX1NVUFBPUlRfV0lUSF9DRkVjb21waWxlRnJvbUtlcm5lbHJvb3RMaWJyYXJ5VXJpcmVnaXN0ZXJKQ2xvc2VkV29ybGRjb2RlZ2VuSW5wdXRzb25Db2RlZ2VuU3RhcnRkZXNlcmlhbGl6ZUNvZGVnZW5jb2RlZ2VuUmVzdWx0c0NvbXBpbGluZyBtZXRob2RzcnVuQ29kZWdlbkVucXVldWVyZnVuY3Rpb25Db21waWxlcnNlcmlhbGl6ZUNvZGVnZW5zZWxlY3RvcnN0YXJ0UmVzb2x1dGlvbnJlc29sdXRpb25FbnF1ZXVlcmhhc1Jlc29sdXRpb25jcmVhdGVSZXNvbHV0aW9uRW5xdWV1ZXJvblJlc29sdXRpb25TdGFydGNvbXB1dGVDbG9zZWRXb3JsZGVsZW1lbnRFbnZpcm9ubWVudGZvckVhY2hDbGFzc3JlZ2lzdGVyQ2xhc3NtYWluSW1wYWN0bWFpbkZ1bmN0aW9uY29tcHV0ZU1haW5iZWZvcmVSZXNvbHV0aW9uc3VwcG9ydERlZmVycmVkTG9hZGlzUHJvZ3JhbVNwbGl0c3VwcG9ydER1bXBJbmZvYXBwbHlJbXBhY3RDb21wdXRpbmcgY2xvc2VkIHdvcmxkcHJvY2Vzc1F1ZXVlb25Qcm9ncmVzc3Nob3dSZXNvbHV0aW9uUHJvZ3Jlc3NvblJlc29sdXRpb25FbmRyZXBvcnRTdXBwcmVzc2VkTWVzc2FnZXNTdW1tYXJ5Y2hlY2tRdWV1ZWNsb3NlUmVzb2x1dGlvblBlcmZvcm1pbmcgZ2xvYmFsIHR5cGUgaW5mZXJlbmNlaW5mZXJyZWREYXRhQnVpbGRlcmFubm90YXRpb25zRGF0YXJ1bkdsb2JhbFR5cGVJbmZlcmVuY2VnbG9iYWxJbmZlcmVuY2VSZXN1bHRzY29kZWdlbkVucXVldWVyY3JlYXRlQ29kZWdlbkVucXVldWVyc2hvd0NvZGVnZW5Qcm9ncmVzc2NvZGVnZW5Xb3JsZEVtaXR0aW5nIEphdmFTY3JpcHRwcm9ncmFtU2l6ZWFzc2VtYmxlUHJvZ3JhbWluZmVycmVkRGF0YXJlcG9ydFNpemVvbkNvZGVnZW5FbmRzZXJpYWxpemVHbG9iYWxUeXBlSW5mZXJlbmNlc3RyYXRlZ3lpckRhdGF3b3JsZERhdGFzZXJpYWxpemVEYXRhZGVzZXJpYWxpemVEYXRhZGVzZXJpYWxpemVDb21wb25lbnRrQ2xvc2VkV29ybGRjbG9zZVdvcmxkakNsb3NlZFdvcmxkY3JlYXRlSkNsb3NlZFdvcmxkZW1wdHlRdWV1ZXdvcmt3aXRoQ3VycmVudEVsZW1lbnR3b3JrLnJ1bmltcGFjdFNvdXJjZW9wZW5jYW5vbmljYWxVcmlzdGFydFBoYXNlcXVldWVJc0Nsb3NlZG9uSW1wYWN0VXNlZGltcGFjdFVzZWNoZWNrTm9FbnF1ZXVlZEludm9rZWRJbnN0YW5jZU1ldGhvZHNjaGVja1F1ZXVlSXNFbXB0eVVuZXhwZWN0ZWQgcGhhc2U6IHNob3dQcm9ncmVzc1Jlc29sdmVkIHByb2Nlc3NlZEVudGl0aWVzIGVsZW1lbnRzLkNvbXBpbGVkICBtZXRob2RzLm9uQ3Jhc2hJblVzZXJDb2RlbWFya0NvbXBpbGF0aW9uQXNGYWlsZWRmYXRhbERpYWdub3N0aWNSZXBvcnRlZGN1cnJlbnRseUluVXNlckNvZGVpblVzZXJDb2RlYXNzdW1lSW5Vc2VyQ29kZV91cmlGcm9tRWxlbWVudGNvZGVMb2NhdGlvbmluU2FtZUxvY2F0aW9uZ2V0Q2Fub25pY2FsVXJpc2xhc2hQb3NfQ29tcGlsZXJPdXRwdXRfY29tcGlsZXJfdXNlck91dHB1dFN1cHByZXNzaW9uSW5mb3dhcm5pbmdzQ29tcGlsZXJEaWFnbm9zdGljUmVwb3J0ZXJfY3VycmVudEVsZW1lbnRsYXN0RGlhZ25vc3RpY1dhc0ZpbHRlcmVkc3VwcHJlc3NlZFdhcm5pbmdzY3JlYXRlTWVzc2FnZXNwYW5uYWJsZW1lc3NhZ2VLaW5kc3BhbkZyb21TcGFubmFibGVyZXBvcnRFcnJvcnJlcG9ydERpYWdub3N0aWNJbnRlcm5hbHJlcG9ydEhpbnRyZXBvcnRJbmZvZWxlbWVudEZyb21TcGFubmFibGVoYXNSZXBvcnRlZEVycm9ycmVwb3J0QXNzZXJ0aW9uRmFpbHVyZXBsZWFzZVJlcG9ydENyYXNodW5oYW5kbGVkRXhjZXB0aW9uT25FbGVtZW50ZG91YmxlRmF1bHR0cnlUb1N0cmluZ01lc3NhZ2VLaW5kLkdFTkVSSUNfc3BhbkZyb21TdHJhdGVneU5vIGVycm9yIGxvY2F0aW9uLkN1cnJlbnQgZWxlbWVudHNvdXJjZUVsZW1lbnRzb3VyY2VJbmZvcm1hdGlvbmludGVybmFsRXJyb3JyZWFzb25NZXNzYWdlS2luZC5DT01QSUxFUl9DUkFTSEVETWVzc2FnZUtpbmQuUExFQVNFX1JFUE9SVF9USEVfQ1JBU0g8ZXhjZXB0aW9uIGluIHRvU3RyaW5nKCk+TWVzc2FnZUtpbmQuSElEREVOX1dBUk5JTkdTX0hJTlRTTWVzc2FnZUtpbmQuSElEREVOX0hJTlRTTWVzc2FnZUtpbmQuSElEREVOX1dBUk5JTkdTX01hcEltcGFjdENhY2hlRGVsZXRlcnVuY2FjaGVXb3JsZEltcGFjdGVtcHR5Q2FjaGVfRW1wdHlFbnZpcm9ubWVudFByb2dyZXNzUHJvZ3Jlc3NJbXBsX3N0b3B3YXRjaEludGVyYWN0aXZlUHJvZ3Jlc3Nfc3RvcHdhdGNoUGhhc2Vfc3RvcHdhdGNoSW50ZXJ2YWx0aW1lcmF0ZRtbMUEbW0sbWzQ4OzU7NDBtG1szMG09PT4bWzBtICBFbGFwc2VkIHRpbWU6ICBzLiBSYXRlOiAgdW5pdHMvbXNkYXJ0MmpzLm1lc3NhZ2Vzc2hhcmVkX21lc3NhZ2VzTWVzc2FnZUtpbmQuQUJTVFJBQ1RfR0VUVEVSTWVzc2FnZUtpbmQuQ0FOTk9UX1JFU09MVkVNZXNzYWdlS2luZC5DT01QTEVYX1JFVFVSTklOR19OU01NZXNzYWdlS2luZC5DT01QTEVYX1RIUk9XSU5HX05TTU1lc3NhZ2VLaW5kLkNPTlNUX0NPTlNUUlVDVE9SX1dJVEhfQk9EWU1lc3NhZ2VLaW5kLkNPTlNUX0ZBQ1RPUllNZXNzYWdlS2luZC5DT05TVFJVQ1RPUl9XSVRIX1JFVFVSTl9UWVBFTWVzc2FnZUtpbmQuQ1lDTElDX0NPTVBJTEVfVElNRV9DT05TVEFOVFNNZXNzYWdlS2luZC5ESVJFQ1RMWV9USFJPV0lOR19OU01NZXNzYWdlS2luZC5FUVVBTF9NQVBfRU5UUllfS0VZTWVzc2FnZUtpbmQuRVFVQUxfU0VUX0VOVFJZTWVzc2FnZUtpbmQuRVhUUkFORU9VU19NT0RJRklFUk1lc3NhZ2VLaW5kLkVYVFJBTkVPVVNfTU9ESUZJRVJfUkVQTEFDRU1lc3NhZ2VLaW5kLkZPUklOX05PVF9BU1NJR05BQkxFTWVzc2FnZUtpbmQuSU1QTElDSVRfSlNfSU5URVJPUF9GSUVMRF9OT1RfU1VQUE9SVEVETWVzc2FnZUtpbmQuSU5WQUxJRF9BU1NFUlRfVkFMVUVNZXNzYWdlS2luZC5JTlZBTElEX0FTU0VSVF9WQUxVRV9NRVNTQUdFTWVzc2FnZUtpbmQuSU5WQUxJRF9CT09MX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9DQVNUTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9BRERfVFlQRVNNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9JTlRfVFlQRU1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQklOQVJZX05VTV9UWVBFTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfUFJJTUlUSVZFX1RZUEVNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0NPTVBMRU1FTlRfVFlQRU1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ09ORElUSU9OQUxfVFlQRU1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfQ09OU1RSVUNUT1JNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0RJVk1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfSU5ERVhNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX0lOVEVSUE9MQVRJT05fVFlQRU1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfTkVHQVRFX1RZUEVNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX05PVF9UWVBFTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9TVFJJTkdfQUREX1RZUEVNZXNzYWdlS2luZC5JTlZBTElEX0NPTlNUQU5UX05VTV9BRERfVFlQRU1lc3NhZ2VLaW5kLklOVkFMSURfQ09OU1RBTlRfU1RSSU5HX0xFTkdUSF9UWVBFTWVzc2FnZUtpbmQuSU5WQUxJRF9DT05TVEFOVF9TSElGVE1lc3NhZ2VLaW5kLklOVkFMSURfRlJPTV9FTlZJUk9OTUVOVF9OQU1FX1RZUEVNZXNzYWdlS2luZC5JTlZBTElEX0lOVF9GUk9NX0VOVklST05NRU5UX0RFRkFVTFRfVkFMVUVfVFlQRU1lc3NhZ2VLaW5kLklOVkFMSURfTE9HSUNBTF9BTkRfT1BFUkFORF9UWVBFTWVzc2FnZUtpbmQuSU5WQUxJRF9MT0dJQ0FMX09SX09QRVJBTkRfVFlQRU1lc3NhZ2VLaW5kLklOVkFMSURfUEFDS0FHRV9DT05GSUdNZXNzYWdlS2luZC5JTlZBTElEX1BBQ0tBR0VfVVJJTWVzc2FnZUtpbmQuSU5WQUxJRF9TVFJJTkdfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEVNZXNzYWdlS2luZC5KU19JTlRFUk9QX0NMQVNTX0NBTk5PVF9FWFRFTkRfREFSVF9DTEFTU01lc3NhZ2VLaW5kLkpTX0lOVEVST1BfQ0xBU1NfTk9OX0VYVEVSTkFMX0NPTlNUUlVDVE9STWVzc2FnZUtpbmQuSlNfSU5URVJPUF9DTEFTU19OT05fRVhURVJOQUxfTUVNQkVSTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9GSUVMRF9OT1RfU1VQUE9SVEVETWVzc2FnZUtpbmQuSlNfSU5URVJPUF9JTkRFWF9OT1RfU1VQUE9SVEVETWVzc2FnZUtpbmQuSlNfSU5URVJPUF9OT05fRVhURVJOQUxfTUVNQkVSTWVzc2FnZUtpbmQuSlNfSU5URVJPUF9NRU1CRVJfSU5fTk9OX0pTX0lOVEVST1BfQ0xBU1NNZXNzYWdlS2luZC5KU19JTlRFUk9QX01FVEhPRF9XSVRIX05BTUVEX0FSR1VNRU5UU01lc3NhZ2VLaW5kLkpTX09CSkVDVF9MSVRFUkFMX0NPTlNUUlVDVE9SX1dJVEhfUE9TSVRJT05BTF9BUkdVTUVOVFNNZXNzYWdlS2luZC5KU19QTEFDRUhPTERFUl9DQVBUVVJFTWVzc2FnZUtpbmQuTElCUkFSWV9OT1RfRk9VTkRNZXNzYWdlS2luZC5NSVNTSU5HX0VYUFJFU1NJT05fSU5fVEhST1dNZXNzYWdlS2luZC5OQVRJVkVfTk9OX0lOU1RBTkNFX0lOX05PTl9OQVRJVkVfQ0xBU1NNZXNzYWdlS2luZC5OT19TVUNIX1NVUEVSX01FTUJFUk1lc3NhZ2VLaW5kLk5PTl9OQVRJVkVfRVhURVJOQUxNZXNzYWdlS2luZC5OT1RfQV9DT01QSUxFX1RJTUVfQ09OU1RBTlRNZXNzYWdlS2luZC5OT1RfQVNTSUdOQUJMRU1lc3NhZ2VLaW5kLlBSRUFNQkxFTWVzc2FnZUtpbmQuUkVUSFJPV19PVVRTSURFX0NBVENITWVzc2FnZUtpbmQuUkVUVVJOX0lOX0dFTkVSQVRJVkVfQ09OU1RSVUNUT1JNZXNzYWdlS2luZC5SRVRVUk5fSU5fR0VORVJBVE9STWVzc2FnZUtpbmQuUlVOVElNRV9UWVBFX1RPX1NUUklOR19PQkpFQ1RNZXNzYWdlS2luZC5SVU5USU1FX1RZUEVfVE9fU1RSSU5HX1NVQlRZUEVNZXNzYWdlS2luZC5TVFJJTkdfRVhQRUNURURNZXNzYWdlS2luZC5VTkRFRklORURfR0VUVEVSTWVzc2FnZUtpbmQuVU5ERUZJTkVEX0lOU1RBTkNFX0dFVFRFUl9CVVRfU0VUVEVSTWVzc2FnZUtpbmQuVU5ERUZJTkVEX01FVEhPRE1lc3NhZ2VLaW5kLlVOREVGSU5FRF9PUEVSQVRPUk1lc3NhZ2VLaW5kLlVOREVGSU5FRF9TRVRURVJNZXNzYWdlS2luZC5VTkRFRklORURfU1RBVElDX0dFVFRFUl9CVVRfU0VUVEVSTWVzc2FnZUtpbmQuVU5ERUZJTkVEX1NUQVRJQ19TRVRURVJfQlVUX0dFVFRFUk1lc3NhZ2VLaW5kLlVOREVGSU5FRF9TVVBFUl9TRVRURVJNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfRklSU1RNZXNzYWdlS2luZC5XUk9OR19BUkdVTUVOVF9GT1JfSlNfU0VDT05ETWVzc2FnZUtpbmQuV1JPTkdfQVJHVU1FTlRfRk9SX0pTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfRk9SQklEREVOTWVzc2FnZUtpbmQuU1dJVENIX0NBU0VfVkFMVUVfT1ZFUlJJREVTX0VRVUFMU01lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX1RZUEVTX05PVF9FUVVBTE1lc3NhZ2VLaW5kLlNXSVRDSF9DQVNFX1RZUEVTX05PVF9FUVVBTF9DQVNFQUJTVFJBQ1RfR0VUVEVSQ0FOTk9UX1JFU09MVkVDT01QSUxFUl9DUkFTSEVEQ09NUExFWF9SRVRVUk5JTkdfTlNNQ09NUExFWF9USFJPV0lOR19OU01DT05TVF9GQUNUT1JZQ09OU1RSVUNUT1JfV0lUSF9SRVRVUk5fVFlQRUNZQ0xJQ19DT01QSUxFX1RJTUVfQ09OU1RBTlRTRElSRUNUTFlfVEhST1dJTkdfTlNNRVFVQUxfTUFQX0VOVFJZX0tFWUVRVUFMX1NFVF9FTlRSWUVYVFJBTkVPVVNfTU9ESUZJRVJFWFRSQU5FT1VTX01PRElGSUVSX1JFUExBQ0VGT1JJTl9OT1RfQVNTSUdOQUJMRUdFTkVSSUNISURERU5fSElOVFNISURERU5fV0FSTklOR1NISURERU5fV0FSTklOR1NfSElOVFNJTVBMSUNJVF9KU19JTlRFUk9QX0ZJRUxEX05PVF9TVVBQT1JURURJTlZBTElEX0FTU0VSVF9WQUxVRUlOVkFMSURfQVNTRVJUX1ZBTFVFX01FU1NBR0VJTlZBTElEX0JPT0xfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEVJTlZBTElEX0NPTlNUQU5UX0NBU1RJTlZBTElEX0NPTlNUQU5UX0FERF9UWVBFU0lOVkFMSURfQ09OU1RBTlRfQklOQVJZX0lOVF9UWVBFSU5WQUxJRF9DT05TVEFOVF9CSU5BUllfTlVNX1RZUEVJTlZBTElEX0NPTlNUQU5UX0JJTkFSWV9QUklNSVRJVkVfVFlQRUlOVkFMSURfQ09OU1RBTlRfQ09NUExFTUVOVF9UWVBFSU5WQUxJRF9DT05TVEFOVF9DT05ESVRJT05BTF9UWVBFSU5WQUxJRF9DT05TVEFOVF9DT05TVFJVQ1RPUklOVkFMSURfQ09OU1RBTlRfRElWSU5WQUxJRF9DT05TVEFOVF9JTkRFWElOVkFMSURfQ09OU1RBTlRfSU5URVJQT0xBVElPTl9UWVBFSU5WQUxJRF9DT05TVEFOVF9ORUdBVEVfVFlQRUlOVkFMSURfQ09OU1RBTlRfTk9UX1RZUEVJTlZBTElEX0NPTlNUQU5UX1NUUklOR19BRERfVFlQRUlOVkFMSURfQ09OU1RBTlRfTlVNX0FERF9UWVBFSU5WQUxJRF9DT05TVEFOVF9TVFJJTkdfTEVOR1RIX1RZUEVJTlZBTElEX0NPTlNUQU5UX1NISUZUSU5WQUxJRF9GUk9NX0VOVklST05NRU5UX05BTUVfVFlQRUlOVkFMSURfSU5UX0ZST01fRU5WSVJPTk1FTlRfREVGQVVMVF9WQUxVRV9UWVBFSU5WQUxJRF9MT0dJQ0FMX0FORF9PUEVSQU5EX1RZUEVJTlZBTElEX0xPR0lDQUxfT1JfT1BFUkFORF9UWVBFSU5WQUxJRF9NRVRBREFUQUlOVkFMSURfTUVUQURBVEFfR0VORVJJQ0lOVkFMSURfUEFDS0FHRV9DT05GSUdJTlZBTElEX1BBQ0tBR0VfVVJJSU5WQUxJRF9TVFJJTkdfRlJPTV9FTlZJUk9OTUVOVF9ERUZBVUxUX1ZBTFVFX1RZUEVKU19JTlRFUk9QX0NMQVNTX0NBTk5PVF9FWFRFTkRfREFSVF9DTEFTU0pTX0lOVEVST1BfQ0xBU1NfTk9OX0VYVEVSTkFMX0NPTlNUUlVDVE9SSlNfSU5URVJPUF9DTEFTU19OT05fRVhURVJOQUxfTUVNQkVSSlNfSU5URVJPUF9GSUVMRF9OT1RfU1VQUE9SVEVESlNfSU5URVJPUF9JTkRFWF9OT1RfU1VQUE9SVEVESlNfSU5URVJPUF9OT05fRVhURVJOQUxfTUVNQkVSSlNfSU5URVJPUF9NRU1CRVJfSU5fTk9OX0pTX0lOVEVST1BfQ0xBU1NKU19JTlRFUk9QX01FVEhPRF9XSVRIX05BTUVEX0FSR1VNRU5UU0pTX09CSkVDVF9MSVRFUkFMX0NPTlNUUlVDVE9SX1dJVEhfUE9TSVRJT05BTF9BUkdVTUVOVFNKU19QTEFDRUhPTERFUl9DQVBUVVJFTElCUkFSWV9OT1RfRk9VTkRNSVJST1JTX0xJQlJBUllfTk9UX1NVUFBPUlRfV0lUSF9DRkVNSVNTSU5HX0VYUFJFU1NJT05fSU5fVEhST1dOQVRJVkVfTk9OX0lOU1RBTkNFX0lOX05PTl9OQVRJVkVfQ0xBU1NOT19TVUNIX1NVUEVSX01FTUJFUk5PTl9OQVRJVkVfRVhURVJOQUxOT1RfQV9DT01QSUxFX1RJTUVfQ09OU1RBTlROT1RfQVNTSUdOQUJMRVBMRUFTRV9SRVBPUlRfVEhFX0NSQVNIUFJFQU1CTEVSRVRVUk5fSU5fR0VORVJBVElWRV9DT05TVFJVQ1RPUlJVTlRJTUVfVFlQRV9UT19TVFJJTkdfT0JKRUNUUlVOVElNRV9UWVBFX1RPX1NUUklOR19TVUJUWVBFU1RSSU5HX0VYUEVDVEVEVU5ERUZJTkVEX0lOU1RBTkNFX0dFVFRFUl9CVVRfU0VUVEVSVU5ERUZJTkVEX1NUQVRJQ19HRVRURVJfQlVUX1NFVFRFUlVOREVGSU5FRF9TVEFUSUNfU0VUVEVSX0JVVF9HRVRURVJXUk9OR19BUkdVTUVOVF9GT1JfSlNXUk9OR19BUkdVTUVOVF9GT1JfSlNfRklSU1RXUk9OR19BUkdVTUVOVF9GT1JfSlNfU0VDT05EV1JPTkdfQVJHVU1FTlRfRk9SX0pTX0lOVEVSQ0VQVE9SX0NPTlNUQU5UU1dJVENIX0NBU0VfRk9SQklEREVOU1dJVENIX0NBU0VfVkFMVUVfT1ZFUlJJREVTX0VRVUFMU1NXSVRDSF9DQVNFX1RZUEVTX05PVF9FUVVBTFNXSVRDSF9DQVNFX1RZUEVTX05PVF9FUVVBTF9DQVNFaG93VG9GaXhleGFtcGxlc1RFTVBMQVRFU0NvbnN0IGNvbnN0cnVjdG9yIGNhbid0IGhhdmUgYSBib2R5LlRyeSByZW1vdmluZyB0aGUgJ2NvbnN0JyBrZXl3b3JkIG9yIHRoZSBib2R5LiAgICAgICAgIGNsYXNzIEMgewogICAgICAgICAgIGNvbnN0IEMoKSB7fQogICAgICAgICB9CgogICAgICAgICBtYWluKCkgPT4gbmV3IEMoKTtUcnkgcmVtb3ZpbmcgdGhlICdjb25zdCcga2V5d29yZCBvciByZXBsYWNpbmcgdGhlIGJvZHkgd2l0aCAnPScgZm9sbG93ZWQgYnkgYSB2YWxpZCB0YXJnZXQuICAgICAgICAgY2xhc3MgQyB7CiAgICAgICAgICAgY29uc3QgZmFjdG9yeSBDKCkge30KICAgICAgICAgfQoKICAgICAgICAgbWFpbigpID0+IG5ldyBDKCk7Q2FuJ3QgaGF2ZSBtb2RpZmllciAnI3ttb2RpZmllcn0nIGhlcmUuVHJ5IHJlbW92aW5nICcje21vZGlmaWVyfScudmFyIFN0cmluZyBmb287IG1haW4oKXt9dmFyIGZpbmFsIGZvbzsgbWFpbigpe312YXIgdmFyIGZvbzsgbWFpbigpe312YXIgY29uc3QgZm9vOyBtYWluKCl7fXZhciBhYnN0cmFjdCBmb287IG1haW4oKXt9dmFyIHN0YXRpYyBmb287IG1haW4oKXt9dmFyIGV4dGVybmFsIGZvbzsgbWFpbigpe31maW5hbCB2YXIgZm9vOyBtYWluKCl7fWNvbnN0IHZhciBmb287IG1haW4oKXt9YWJzdHJhY3QgdmFyIGZvbzsgbWFpbigpe31zdGF0aWMgdmFyIGZvbzsgbWFpbigpe31leHRlcm5hbCB2YXIgZm9vOyBtYWluKCl7fVRyeSByZXBsYWNpbmcgbW9kaWZpZXIgJyN7bW9kaWZpZXJ9JyB3aXRoICd2YXInLCAnZmluYWwnLCBvciBhIHR5cGUuc2V0IGZvbzsgbWFpbigpe31hYnN0cmFjdCBmb287IG1haW4oKXt9c3RhdGljIGZvbzsgbWFpbigpe31leHRlcm5hbCBmb287IG1haW4oKXt9Y2xhc3MgQSB7IGludCBBKCkge30gfSBtYWluKCkgeyBuZXcgQSgpOyB9RGlkIHlvdSBtZWFuICdyZXRocm93Jz9SZXRocm93IG11c3QgYmUgaW5zaWRlIG9mIGNhdGNoIGNsYXVzZS5UcnkgbW92aW5nIHRoZSBleHByZXNzaW9uIGludG8gYSBjYXRjaCBjbGF1c2UsIG9yIHVzaW5nIGEgJ3Rocm93JyBleHByZXNzaW9uLm1haW4oKSB7IHJldGhyb3c7IH1Db25zdHJ1Y3RvcnMgY2FuJ3QgcmV0dXJuIHZhbHVlcy5UcnkgcmVtb3ZpbmcgdGhlIHJldHVybiBzdGF0ZW1lbnQgb3IgdXNpbmcgYSBmYWN0b3J5IGNvbnN0cnVjdG9yLiAgICAgICAgY2xhc3MgQyB7CiAgICAgICAgICBDKCkgewogICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG1haW4oKSA9PiBuZXcgQygpO0Nhbid0IHJldHVybiBhIHZhbHVlIGZyb20gYSBnZW5lcmF0b3IgZnVuY3Rpb24gKHVzaW5nIHRoZSAnI3ttb2RpZmllcn0nIG1vZGlmaWVyKS5UcnkgcmVtb3ZpbmcgdGhlIHZhbHVlLCByZXBsYWNpbmcgJ3JldHVybicgd2l0aCAneWllbGQnIG9yIGNoYW5naW5nIHRoZSBtZXRob2QgYm9keSBtb2RpZmllci4gICAgICAgIGZvbygpIGFzeW5jKiB7IHJldHVybiAwOyB9CiAgICAgICAgbWFpbigpID0+IGZvbygpOwogICAgICAgICAgICAgICAgZm9vKCkgc3luYyogeyByZXR1cm4gMDsgfQogICAgICAgIG1haW4oKSA9PiBmb28oKTsKICAgICAgICAnI3tmcm9tVHlwZX0nIGlzIG5vdCBhc3NpZ25hYmxlIHRvICcje3RvVHlwZX0nLlRoZSBlbGVtZW50IHR5cGUgJyN7Y3VycmVudFR5cGV9JyBvZiAnI3tleHByZXNzaW9uVHlwZX0nIGlzIG5vdCBhc3NpZ25hYmxlIHRvICcje2VsZW1lbnRUeXBlfScuICAgICAgICBtYWluKCkgewogICAgICAgICAgTGlzdDxpbnQ+IGxpc3QgPSA8aW50PlsxLCAyXTsKICAgICAgICAgIGZvciAoU3RyaW5nIHggaW4gbGlzdCkgeDsKICAgICAgICB9CiAgICAgICAgQ2FuJ3QgcmVzb2x2ZSAnI3tuYW1lfScuVGhlIG1ldGhvZCAnI3ttZW1iZXJOYW1lfScgaXMgbm90IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnI3tjbGFzc05hbWV9Jy4gICAgICAgIGNsYXNzIEEgewogICAgICAgICAgZm9vKCkgeyBiYXIoKTsgfQogICAgICAgIH0KICAgICAgICBtYWluKCkgeyBuZXcgQSgpLmZvbygpOyB9CiAgICAgICAgVGhlIGdldHRlciAnI3ttZW1iZXJOYW1lfScgaXMgbm90IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnI3tjbGFzc05hbWV9Jy5jbGFzcyBBIHt9IG1haW4oKSB7IG5ldyBBKCkueDsgfWNsYXNzIEEge30gbWFpbigpIHsgQS54OyB9VGhlIHNldHRlciAnI3ttZW1iZXJOYW1lfScgaW4gY2xhc3MgJyN7Y2xhc3NOYW1lfScgY2FuIG5vdCBiZSB1c2VkIGFzIGEgZ2V0dGVyLmNsYXNzIEEgeyBzZXQgeCh5KSB7fSB9IG1haW4oKSB7IG5ldyBBKCkueDsgfVRoZSBvcGVyYXRvciAnI3ttZW1iZXJOYW1lfScgaXMgbm90IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnI3tjbGFzc05hbWV9Jy5jbGFzcyBBIHt9IG1haW4oKSB7IG5ldyBBKCkgKyAzOyB9VGhlIHNldHRlciAnI3ttZW1iZXJOYW1lfScgaXMgbm90IGRlZmluZWQgZm9yIHRoZSBjbGFzcyAnI3tjbGFzc05hbWV9Jy5jbGFzcyBBIHt9IG1haW4oKSB7IG5ldyBBKCkueCA9IDQ5OTsgfUNhbid0IHJlc29sdmUgJyN7bWVtYmVyTmFtZX0nIGluIGEgc3VwZXJjbGFzcyBvZiAnI3tjbGFzc05hbWV9Jy5UaGUgc2V0dGVyICcje21lbWJlck5hbWV9JyBpcyBub3QgZGVmaW5lZCBpbiBhIHN1cGVyY2xhc3Mgb2YgJyN7Y2xhc3NOYW1lfScuICAgICAgICBjbGFzcyBBIHt9CiAgICAgICAgY2xhc3MgQiBleHRlbmRzIEEgewogICAgICAgICAgZm9vKCkgeyBzdXBlci54ID0gNDk5OyB9CiAgICAgICAgfQogICAgICAgIG1haW4oKSB7IG5ldyBCKCkuZm9vKCk7IH0KICAgICAgICBDYW5ub3QgcmVzb2x2ZSBnZXR0ZXIgJyN7bmFtZX0nLnNldCBmb28oeCkge30gIG1haW4oKSB7IGZvbzsgfUNhbm5vdCByZXNvbHZlIHNldHRlciAnI3tuYW1lfScuICAgICAgICBtYWluKCkgewogICAgICAgICAgZmluYWwgeCA9IDE7CiAgICAgICAgICB4ID0gMjsKICAgICAgICB9ICAgICAgICBtYWluKCkgewogICAgICAgICAgY29uc3QgeCA9IDE7CiAgICAgICAgICB4ID0gMjsKICAgICAgICB9CiAgICAgICAgICAgICAgICBmaW5hbCB4ID0gMTsKICAgICAgICBtYWluKCkgeyB4ID0gMzsgfQogICAgICAgICAgICAgICAgY29uc3QgeCA9IDE7CiAgICAgICAgbWFpbigpIHsgeCA9IDM7IH0KICAgICAgICBnZXQgZm9vID0+IG51bGwgIG1haW4oKSB7IGZvbyA9IDU7IH1jb25zdCBmb28gPSAwICBtYWluKCkgeyBmb28gPSA1OyB9I3t0ZXh0fUNhbm5vdCByZXNvbHZlICcje25hbWV9Jy5Ob3QgYSBjb21waWxlLXRpbWUgY29uc3RhbnQuQ3ljbGUgaW4gdGhlIGNvbXBpbGUtdGltZSBjb25zdGFudCBjb21wdXRhdGlvbi5DYW5ub3QgcmVzb2x2ZSBzZXR0ZXIuRXhwZWN0ZWQgYSAnU3RyaW5nJywgYnV0IGdvdCBhbiBpbnN0YW5jZSBvZiAnI3t0eXBlfScuSnMtaW50ZXJvcCBjbGFzcyAnI3tjbHN9JyBjYW5ub3QgZXh0ZW5kIGZyb20gdGhlIG5vbiBqcy1pbnRlcm9wIGNsYXNzICcje3N1cGVyY2xhc3N9Jy5Bbm5vdGF0ZSB0aGUgc3VwZXJjbGFzcyB3aXRoIEBKUy4gICAgICAgICAgICAgIGltcG9ydCAncGFja2FnZTpqcy9qcy5kYXJ0JzsKCiAgICAgICAgICAgICAgY2xhc3MgRm9vIHsgfQoKICAgICAgICAgICAgICBASlMoKQogICAgICAgICAgICAgIGNsYXNzIEJhciBleHRlbmRzIEZvbyB7IH0KCiAgICAgICAgICAgICAgbWFpbigpIHsKICAgICAgICAgICAgICAgIG5ldyBCYXIoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgSnMtaW50ZXJvcCBkb2VzIG5vdCBzdXBwb3J0IFtdIGFuZCBbXT0gb3BlcmF0b3IgbWV0aG9kcy5UcnkgcmVwbGFjaW5nIFtdIGFuZCBbXT0gb3BlcmF0b3IgbWV0aG9kcyB3aXRoIG5vcm1hbCBtZXRob2RzLiAgICAgICAgaW1wb3J0ICdwYWNrYWdlOmpzL2pzLmRhcnQnOwoKICAgICAgICBASlMoKQogICAgICAgIGNsYXNzIEZvbyB7CiAgICAgICAgICBleHRlcm5hbCBvcGVyYXRvciBbXShhcmcpOwogICAgICAgIH0KCiAgICAgICAgbWFpbigpIHsKICAgICAgICAgIG5ldyBGb28oKVswXTsKICAgICAgICB9CiAgICAgICAgICAgICAgICBpbXBvcnQgJ3BhY2thZ2U6anMvanMuZGFydCc7CgogICAgICAgIEBKUygpCiAgICAgICAgY2xhc3MgRm9vIHsKICAgICAgICAgIGV4dGVybmFsIG9wZXJhdG9yIFtdPShhcmcsIHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIG1haW4oKSB7CiAgICAgICAgICBuZXcgRm9vKClbMF0gPSAxOwogICAgICAgIH0KICAgICAgICBTb21lIHBhcmFtZXRlcnMgaW4gYW5vbnltb3VzIGpzLWludGVyb3AgY2xhc3MgJyN7Y2xzfScgb2JqZWN0IGxpdGVyYWwgY29uc3RydWN0b3IgYXJlIHBvc2l0aW9uYWwgaW5zdGVhZCBvZiBuYW1lZC4uTWFrZSBhbGwgYXJndW1lbnRzIGluIGV4dGVybmFsIGZhY3Rvcnkgb2JqZWN0IGxpdGVyYWwgY29uc3RydWN0b3JzIG5hbWVkLmNsYXNzIFN1cGVyIHsKICBmYWN0b3J5IFN1cGVyLmZvbygpID0+IG51bGw7Cn0KY2xhc3MgQ2xhc3MgZXh0ZW5kcyBTdXBlciB7CiAgQ2xhc3MoKSA6IHN1cGVyLmZvbygpOwp9Cm1haW4oKSA9PiBuZXcgQ2xhc3MoKTsKSnMtaW50ZXJvcCBtZW1iZXJzIG11c3QgYmUgJ2V4dGVybmFsJy5Kcy1pbnRlcm9wIGNsYXNzIG1lbWJlcnMgYXJlIG9ubHkgc3VwcG9ydGVkIGluIGpzLWludGVyb3AgY2xhc3Nlcy5UcnkgbWFya2luZyB0aGUgZW5jbG9zaW5nIGNsYXNzIGFzIGpzLWludGVyb3Agb3IgcmVtb3ZlIHRoZSBqcy1pbnRlcm9wIGFubm90YXRpb24gZnJvbSB0aGUgbWVtYmVyLkNvbnN0cnVjdG9yICcje2NvbnN0cnVjdG9yfScgaW4ganMtaW50ZXJvcCBjbGFzcyAnI3tjbHN9JyBpcyBub3QgZXh0ZXJuYWwuVHJ5IGFkZGluZyB0aGUgJ2V4dGVybmFsJyB0byAnI3tjb25zdHJ1Y3Rvcn0nLk1lbWJlciAnI3ttZW1iZXJ9JyBpbiBqcy1pbnRlcm9wIGNsYXNzICcje2Nsc30nIGlzIG5vdCBleHRlcm5hbC5UcnkgYWRkaW5nIHRoZSAnZXh0ZXJuYWwnIHRvICcje21lbWJlcn0nLiAgICAgICAgICAgICAgaW1wb3J0ICdwYWNrYWdlOmpzL2pzLmRhcnQnOwoKICAgICAgICAgICAgICBASlMoKQogICAgICAgICAgICAgIGNsYXNzIEZvbyB7CiAgICAgICAgICAgICAgICBiYXIoKSB7fQogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgbWFpbigpIHsKICAgICAgICAgICAgICAgIG5ldyBGb28oKS5iYXIoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgSnMtaW50ZXJvcCBtZXRob2QgJyN7bWV0aG9kfScgaGFzIG5hbWVkIGFyZ3VtZW50cyBidXQgaXMgbm90IGEgZmFjdG9yeSBjb25zdHJ1Y3RvciBvZiBhbiBAYW5vbnltb3VzIEBKUyBjbGFzcy5SZW1vdmUgYWxsIG5hbWVkIGFyZ3VtZW50cyBmcm9tIGpzLWludGVyb3AgbWV0aG9kIG9yIGluIHRoZSBjYXNlIG9mIGEgZmFjdG9yeSBjb25zdHJ1Y3RvciBhbm5vdGF0ZSB0aGUgY2xhc3MgYXMgQGFub255bW91cy4gICAgICAgICAgICAgIGltcG9ydCAncGFja2FnZTpqcy9qcy5kYXJ0JzsKCiAgICAgICAgICAgICAgQEpTKCkKICAgICAgICAgICAgICBjbGFzcyBGb28gewogICAgICAgICAgICAgICAgZXh0ZXJuYWwgYmFyKGZvbywge2Jhen0pOwogICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgbWFpbigpIHsKICAgICAgICAgICAgICAgIG5ldyBGb28oKS5iYXIoNCwgYmF6OiA1KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgRmllbGRzIGluIGpzLWludGVyb3AgY2xhc3NlcyBhcmUgbm90IHN1cHBvcnRlZC5UcnkgcmVwbGFjaW5nIHRoZSBmaWVsZCB3aXRoIGFuIGV4dGVybmFsIGdldHRlciBhbmQvb3Igc2V0dGVyLkZpZWxkIGNhbid0IGJlIG1hcmtlZCBhcyBqcy1pbnRlcm9wLkxpYnJhcnkgbm90IGZvdW5kICcje3Jlc29sdmVkVXJpfScuUGFja2FnZSBjb25maWcgZmlsZSAnI3t1cml9JyBpcyBpbnZhbGlkLgoje2V4Y2VwdGlvbn1Db21wdXRlciBzYXlzIG5vIScje3VyaX0nIGlzIG5vdCBhIHZhbGlkIHBhY2thZ2UgVVJJICgje2V4Y2VwdGlvbn0pLi8vIGNhbid0IGhhdmUgYSAndG9wIGxldmVsJyBwYWNrYWdlIFVSSQppbXBvcnQgJ3BhY2thZ2U6Zm9vLmRhcnQnOwoKbWFpbigpIHt9Ci8vIGNhbid0IGhhdmUgMiBzbGFzaGVzCmltcG9ydCAncGFja2FnZTovL2Zvby9mb28uZGFydCc7CgptYWluKCkge30KLy8gcGFja2FnZSBuYW1lIG11c3QgYmUgdmFsaWQKaW1wb3J0ICdwYWNrYWdlOm5vdAthbGlkL2Zvby5kYXJ0JzsKCm1haW4oKSB7fQpKUyBjb2RlIG11c3Qgbm90IHVzZSAnIycgcGxhY2Vob2xkZXJzIGluc2lkZSBmdW5jdGlvbnMuVXNlIGFuIGltbWVkaWF0ZWx5IGNhbGxlZCBKYXZhU2NyaXB0IGZ1bmN0aW9uIHRvIGNhcHR1cmUgdGhlIHRoZSBwbGFjZWhvbGRlciB2YWx1ZXMgYXMgSmF2YVNjcmlwdCBmdW5jdGlvbiBwYXJhbWV0ZXJzLkpTIGV4cHJlc3Npb24gbXVzdCB0YWtlIHR3byBvciBtb3JlIGFyZ3VtZW50cy5KUyBzZWNvbmQgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyBsaXRlcmFsLkFyZ3VtZW50IGZvciAnSlNfSU5URVJDRVBUT1JfQ09OU1RBTlQnIG11c3QgYmUgYSB0eXBlIGNvbnN0YW50LlRoZSBnZXR0ZXIgJyN7bmFtZX0nIGhhcyBubyBpbXBsZW1lbnRhdGlvbiBpbiBjbGFzcyAnI3tjbGFzc30nLlRyeSBhZGRpbmcgYSBib2R5IHRvICcje25hbWV9JyBvciBkZWNsYXJpbmcgJyN7Y2xhc3N9JyB0byBiZSAnYWJzdHJhY3QnLmNsYXNzIENsYXNzIHsKICBnZXQgZ2V0dGVyOwp9Cm1haW4oKSA9PiBuZXcgQ2xhc3MoKTsKQSBtZXRhZGF0YSBhbm5vdGF0aW9uIG11c3QgYmUgZWl0aGVyIGEgcmVmZXJlbmNlIHRvIGEgY29tcGlsZS10aW1lIGNvbnN0YW50IHZhcmlhYmxlIG9yIGEgY2FsbCB0byBhIGNvbnN0YW50IGNvbnN0cnVjdG9yLlRyeSB1c2luZyBhIGRpZmZlcmVudCBjb25zdGFudCB2YWx1ZSBvciByZWZlcmVuY2luZyBpdCB0aHJvdWdoIGEgY29uc3RhbnQgdmFyaWFibGUuQE9iamVjdCBtYWluKCkge31AcHJpbnQgbWFpbigpIHt9QSBtZXRhZGF0YSBhbm5vdGF0aW9uIHVzaW5nIGEgY29uc3RhbnQgY29uc3RydWN0b3IgY2Fubm90IHVzZSB0eXBlIGFyZ3VtZW50cy5UcnkgcmVtb3ZpbmcgdGhlIHR5cGUgYXJndW1lbnRzIG9yIHJlZmVyZW5jaW5nIHRoZSBjb25zdGFudCB0aHJvdWdoIGEgY29uc3RhbnQgdmFyaWFibGUuY2xhc3MgQzxUPiB7CiAgY29uc3QgQygpOwp9CkBDPGludD4oKSBtYWluKCkge30KQW4gZW50cnkgd2l0aCB0aGUgc2FtZSBrZXkgYWxyZWFkeSBleGlzdHMgaW4gdGhlIG1hcC5UcnkgcmVtb3ZpbmcgdGhlIHByZXZpb3VzIGVudHJ5IG9yIGNoYW5naW5nIHRoZSBrZXkgaW4gb25lIG9mIHRoZSBlbnRyaWVzLm1haW4oKSB7CiAgdmFyIG0gPSBjb25zdCB7J2Zvbyc6IDEsICdmb28nOiAyfTsKfUFuIGVudHJ5IGFwcGVhcnMgdHdpY2UgaW4gdGhlIHNldC5UcnkgcmVtb3Zpbmcgb25lIG9mIHRoZSBlbnRyaWVzLm1haW4oKSB7CiAgdmFyIG0gPSBjb25zdCB7J2ZvbycsICdiYXInLCAnZm9vJ307Cn1UaGUgY29tcGlsZXIgY3Jhc2hlZCB3aGVuIGNvbXBpbGluZyB0aGlzIGVsZW1lbnQuVGhlIGNvbXBpbGVyIGlzIGJyb2tlbi4KCldoZW4gY29tcGlsaW5nIHRoZSBhYm92ZSBlbGVtZW50LCB0aGUgY29tcGlsZXIgY3Jhc2hlZC4gSXQgaXMgbm90CnBvc3NpYmxlIHRvIHRlbGwgaWYgdGhpcyBpcyBjYXVzZWQgYnkgYSBwcm9ibGVtIGluIHlvdXIgcHJvZ3JhbSBvcgpub3QuIFJlZ2FyZGxlc3MsIHRoZSBjb21waWxlciBzaG91bGQgbm90IGNyYXNoLgoKVGhlIERhcnQgdGVhbSB3b3VsZCBncmVhdGx5IGFwcHJlY2lhdGUgaWYgeW91IHdvdWxkIHRha2UgYSBtb21lbnQgdG8KcmVwb3J0IHRoaXMgcHJvYmxlbSBhdCBodHRwOi8vZGFydGJ1Zy5jb20vbmV3LgoKUGxlYXNlIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKCiogdGhlIG5hbWUgYW5kIHZlcnNpb24gb2YgeW91ciBvcGVyYXRpbmcgc3lzdGVtLAoKKiB0aGUgRGFydCBTREsgYnVpbGQgbnVtYmVyICgje2J1aWxkSWR9KSwgYW5kCgoqIHRoZSBlbnRpcmUgbWVzc2FnZSB5b3Ugc2VlIGhlcmUgKGluY2x1ZGluZyB0aGUgZnVsbCBzdGFjayB0cmFjZQogIGJlbG93IGFzIHdlbGwgYXMgdGhlIHNvdXJjZSBsb2NhdGlvbiBhYm92ZSkuCiN7d2FybmluZ3N9IHdhcm5pbmcocykgYW5kICN7aGludHN9IGhpbnQocykgc3VwcHJlc3NlZCBpbiAje3VyaX0uI3t3YXJuaW5nc30gd2FybmluZyhzKSBzdXBwcmVzc2VkIGluICN7dXJpfS4je2hpbnRzfSBoaW50KHMpIHN1cHByZXNzZWQgaW4gI3t1cml9LldoZW4gcnVuIG9uIHRoZSBjb21tYW5kLWxpbmUsIHRoZSBjb21waWxlZCBvdXRwdXQgbWlnaHQgcmVxdWlyZSBhIHByZWFtYmxlIGZpbGUgbG9jYXRlZCBpbjoKICA8c2RrPi9saWIvX2ludGVybmFsL2pzX3J1bnRpbWUvbGliL3ByZWFtYmxlcy5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIGNvbnN0YW50IGNvbmRpdGlvbi4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2Jvb2wnLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IHZhbGlkIGluIGNvbnN0YW50IHN0cmluZyBpbnRlcnBvbGF0aW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnYm9vbCcsICdpbnQnLCAnZG91YmxlJywgb3IgJ1N0cmluZycuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIG9mIGEgY29uc3RhbnQgYmluYXJ5ICN7b3BlcmF0b3J9IGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdib29sJywgJ2ludCcsICdkb3VibGUnLCAnU3RyaW5nJywgb3IgJ051bGwnLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhIGNvbnN0YW50IGJpbmFyeSArIGV4cHJlc3Npb24gb24gJ1N0cmluZycuIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdTdHJpbmcnLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBmb3IgYSAubGVuZ3RoIGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdTdHJpbmcnLlNoaWZ0IGFtb3VudCBtdXN0IGJlIG5vbi1uZWdhdGl2ZSBpbiBgI3tsZWZ0fSAje29wZXJhdG9yfSAje3JpZ2h0fWAuRGl2aXNvciBtdXN0IGJlIG5vbi16ZXJvIGluIGAje2xlZnR9ICN7b3BlcmF0b3J9ICN7cmlnaHR9YC5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgb2YgYSBjb25zdGFudCBiaW5hcnkgKyBleHByZXNzaW9uIG9uICdudW0nLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnaW50JyBvciAnZG91YmxlJy5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHN1YnR5cGUgb2YgI3tjYXN0VHlwZX0uYCN7bGVmdENvbnN0YW50fWAgb2YgdHlwZSAnI3tsZWZ0VHlwZX0nIGFuZCBgI3tyaWdodENvbnN0YW50fWAgb2YgdHlwZSAnI3tyaWdodFR5cGV9JyBhcmUgbm90IHZhbGlkIG9wZXJhbmRzIG9mIGEgY29uc3RhbnQgYmluYXJ5ICsgZXhwcmVzc2lvbi4gTXVzdCBib3RoIGJlIGVpdGhlciBvZiB0eXBlICdTdHJpbmcnLCBvciBvZiB0eXBlcyAnaW50JyBvciAnZG91YmxlJy5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgb2YgYSBjb25zdGFudCBiaW5hcnkgI3tvcGVyYXRvcn0gZXhwcmVzc2lvbi4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2ludCcgb3IgJ2RvdWJsZScuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBvcGVyYW5kIG9mIGEgY29uc3RhbnQgYmluYXJ5ICN7b3BlcmF0b3J9IGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdpbnQnLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgb3BlcmFuZCBvZiBhIGNvbnN0YW50IHVuYXJ5ICN7b3BlcmF0b3J9IGV4cHJlc3Npb24uIE11c3QgYmUgYSB2YWx1ZSBvZiB0eXBlICdib29sJy5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgb2YgYSBjb25zdGFudCB1bmFyeSAje29wZXJhdG9yfSBleHByZXNzaW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnaW50JyBvciAnZG91YmxlJy5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIG9wZXJhbmQgb2YgYSBjb25zdGFudCB1bmFyeSAje29wZXJhdG9yfSBleHByZXNzaW9uLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnaW50Jy5JbmRleCBleHByZXNzaW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gY29uc3RhbnQgZXhwcmVzc2lvbnMuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBlbnZpcm9ubWVudCBuYW1lIGNvbnN0YW50LiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnU3RyaW5nJy5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIGBib29sLmZyb21FbnZpcm9ubWVudGAgZGVmYXVsdCB2YWx1ZSBjb25zdGFudC4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2Jvb2wnIG9yIGBudWxsYC5gI3tjb25zdGFudH1gIG9mIHR5cGUgJyN7dHlwZX0nIGlzIG5vdCBhIHZhbGlkIGBpbnQuZnJvbUVudmlyb25tZW50YCBkZWZhdWx0IHZhbHVlIGNvbnN0YW50LiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnaW50JyBvciBgbnVsbGAuYCN7Y29uc3RhbnR9YCBvZiB0eXBlICcje3R5cGV9JyBpcyBub3QgYSB2YWxpZCBgU3RyaW5nLmZyb21FbnZpcm9ubWVudGAgZGVmYXVsdCB2YWx1ZSBjb25zdGFudC4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ1N0cmluZycgb3IgYG51bGxgLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgbG9naWNhbCBhbmQgb3BlcmFuZC4gTXVzdCBiZSBhIHZhbHVlIG9mIHR5cGUgJ2Jvb2wnLmAje2NvbnN0YW50fWAgb2YgdHlwZSAnI3t0eXBlfScgaXMgbm90IGEgdmFsaWQgbG9naWNhbCBvciBvcGVyYW5kLiBNdXN0IGJlIGEgdmFsdWUgb2YgdHlwZSAnYm9vbCcuQ29uc3RydWN0b3IgJyN7Y29uc3RydWN0b3JOYW1lfScgaXMgbm90IGEgdmFsaWQgY29uc3RhbnQgY29uc3RydWN0b3IuQXNzZXJ0aW9uICcje2Fzc2VydGlvbn0nIGZhaWxlZC5Bc3NlcnRpb24gZmFpbGVkOiAje21lc3NhZ2V9ZGFydDJqcyBubyBsb25nZXIgc3VwcG9ydHMgdGhlIGRhcnQ6bWlycm9ycyBsaWJyYXJ5LgoKQVBJcyBmcm9tIHRoaXMgbGlicmFyeSB3aWxsIHRocm93IGEgcnVudGltZSBlcnJvciBhdCB0aGlzIHRpbWUsIGJ1dCB0aGV5IHdpbGwKYmVjb21lIGEgY29tcGlsZS10aW1lIGVycm9yIGluIHRoZSBmdXR1cmUuVGhpcyAnbm9TdWNoTWV0aG9kJyBpbXBsZW1lbnRhdGlvbiBpcyBndWFyYW50ZWVkIHRvIHRocm93IGFuIGV4Y2VwdGlvbi4gVGhlIGdlbmVyYXRlZCBjb2RlIHdpbGwgYmUgc21hbGxlciBpZiBpdCBpcyByZXdyaXR0ZW4uUmV3cml0ZSB0byAnbm9TdWNoTWV0aG9kKEludm9jYXRpb24gaSkgPT4gc3VwZXIubm9TdWNoTWV0aG9kKGkpOycuVGhpcyAnbm9TdWNoTWV0aG9kJyBpbXBsZW1lbnRhdGlvbiBpcyBndWFyYW50ZWVkIHRvIHRocm93IGFuIGV4Y2VwdGlvbi4gVGhlIGdlbmVyYXRlZCBjb2RlIHdpbGwgYmUgc21hbGxlciBhbmQgdGhlIGNvbXBpbGVyIHdpbGwgYmUgYWJsZSB0byBwZXJmb3JtIG1vcmUgb3B0aW1pemF0aW9ucyBpZiBpdCBpcyByZXdyaXR0ZW4uT3ZlcnJpZGluZyAnbm9TdWNoTWV0aG9kJyBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvIGdlbmVyYXRlIG1vcmUgY29kZSBhbmQgcHJldmVudHMgdGhlIGNvbXBpbGVyIGZyb20gZG9pbmcgc29tZSBvcHRpbWl6YXRpb25zLkNvbnNpZGVyIHJlbW92aW5nIHRoaXMgJ25vU3VjaE1ldGhvZCcgaW1wbGVtZW50YXRpb24uVXNpbmcgJy5ydW50aW1lVHlwZS50b1N0cmluZygpJyBjYXVzZXMgdGhlIGNvbXBpbGVyIHRvIGdlbmVyYXRlIG1vcmUgY29kZSBiZWNhdXNlIGl0IG5lZWRzIHRvIHByZXNlcnZlIHR5cGUgYXJndW1lbnRzIG9uIGFsbCBnZW5lcmljIGNsYXNzZXMsIGV2ZW4gaWYgdGhleSBhcmUgbm90IG5lY2Vzc2FyeSBlbHNld2hlcmUuSWYgdXNlZCBvbmx5IGZvciBkZWJ1Z2dpbmcsIGNvbnNpZGVyIHVzaW5nIG9wdGlvbiAtLWxheC1ydW50aW1lLXR5cGUtdG8tc3RyaW5nIHRvIHJlZHVjZSB0aGUgY29kZSBzaXplIGltcGFjdC5Vc2luZyAnLnJ1bnRpbWVUeXBlLnRvU3RyaW5nKCknIGhlcmUgY2F1c2VzIHRoZSBjb21waWxlciB0byBnZW5lcmF0ZSBtb3JlIGNvZGUgYmVjYXVzZSBpdCBuZWVkcyB0byBwcmVzZXJ2ZSB0eXBlIGFyZ3VtZW50cyBvbiBhbGwgZ2VuZXJpYyBzdWJ0eXBlcyBvZiAnI3tyZWNlaXZlclR5cGV9JywgZXZlbiBpZiB0aGV5IGFyZSBub3QgbmVjZXNzYXJ5IGVsc2V3aGVyZS5Pbmx5IGV4dGVybmFsIGpzLWludGVyb3AgZnVuY3Rpb25zIGFyZSBzdXBwb3J0ZWQuVHJ5IHJlbW92aW5nICdleHRlcm5hbCcga2V5d29yZCBvciBhbm5vdGF0aW5nIHRoZSBmdW5jdGlvbiBhcyBhIGpzLWludGVyb3AgZnVuY3Rpb24uTmF0aXZlIG5vbi1pbnN0YW5jZSBtZW1iZXJzIGFyZSBvbmx5IGFsbG93ZWQgaW4gbmF0aXZlIGNsYXNzZXMuJ2Nhc2UnIGV4cHJlc3Npb24gdHlwZSAnI3t0eXBlfScgb3ZlcnJpZGVzICdvcGVyYXRvciA9PScuJ2Nhc2UnIGV4cHJlc3Npb24gbWF5IG5vdCBiZSBvZiB0eXBlICcje3R5cGV9Jy4nY2FzZScgZXhwcmVzc2lvbnMgZG8gbm90IGFsbCBoYXZlIHR5cGUgJyN7dHlwZX0nLidjYXNlJyBleHByZXNzaW9uIG9mIHR5cGUgJyN7dHlwZX0nLmhhc0hvd1RvRml4Y29tcHV0ZU1lc3NhZ2UjeyNcey4rXH1NaXNzaW5nIGFyZ3VtZW50cyBpbiBlcnJvciBtZXNzYWdlOiAiTWVzc2FnZS5oYXNoQ29kZWNvbnZlcnRUb1N0cmluZ3RvRGFydFRleHRET05UX0tOT1dfSE9XX1RPX0ZJWEVudmlyb25tZW50ZGFydDJqcy5pby5sb2NhdGlvbl9wcm92aWRlckNvZGVPdXRwdXRMaXN0ZW5lckxvY2F0aW9uQ29sbGVjdG9yX2NvbGxlY3RvblRleHRsaW5lU3RhcnRzPSxsZW5ndGg9a2VybmVsLmJpbmFyeS50YWdUYWdOb3RoaW5nU29tZXRoaW5nQ29uc3RTdGF0aWNJbnZvY2F0aW9uQ29uc3RDb25zdHJ1Y3Rvckludm9jYXRpb25UcnVlTGl0ZXJhbEZhbHNlTGl0ZXJhbFBvc2l0aXZlSW50TGl0ZXJhbE5lZ2F0aXZlSW50TGl0ZXJhbEJpZ0ludExpdGVyYWxDb25zdExpc3RMaXRlcmFsQ29uc3RNYXBMaXRlcmFsQ29uc3RTZXRMaXRlcmFsQXN5bmNGb3JJblN0YXRlbWVudFNpbXBsZUludGVyZmFjZVR5cGVTaW1wbGVGdW5jdGlvblR5cGVOdWxsUmVmZXJlbmNlQ2xhc3NSZWZlcmVuY2VNZW1iZXJSZWZlcmVuY2VEZXByZWNhdGVkX0NvbnN0YW50RXhwcmVzc2lvblNwZWNpYWxpemVkVGFnSGlnaEJpdFNwZWNpYWxpemVkVGFnTWFza1NwZWNpYWxpemVkUGF5bG9hZE1hc2tTcGVjaWFsaXplZFZhcmlhYmxlR2V0U3BlY2lhbGl6ZWRWYXJpYWJsZVNldFNwZWNpYWxpemVkSW50TGl0ZXJhbFNwZWNpYWxpemVkSW50TGl0ZXJhbEJpYXNDb21wb25lbnRGaWxlQmluYXJ5Rm9ybWF0VmVyc2lvbkNvbnN0YW50VGFna2VybmVsLmltcG9ydF90YWJsZUltcG9ydFRhYmxlQ29tcG9uZW50SW1wb3J0VGFibGVfbGlicmFyeUluZGV4TGlicmFyeUltcG9ydFRhYmxlX2ltcG9ydFBhdGhzX2ltcG9ydGVkTGlicmFyaWVzaW1wb3J0UGF0aHNfSW1wb3J0VGFibGVCdWlsZGVycmVmZXJlbmNlTGlicmFyeWFkZExpYnJhcnlJbXBvcnRyZWZlcmVuY2VVcml0YXJnZXRVcmkgY2Fubm90IHJlZmVyIHRvIGxpYnJhcnkgd2l0aG91dCBhbiBpbXBvcnQgVVJJaXNGaWxlT3JDdXN0b21TY2hlbWVpc1RhcmdldFNjaGVtZUZpbGVPckN1c3RvbWlzUmVmZXJlbmNlU2NoZW1lRmlsZU9yQ3VzdG9tcmVsYXRpdmVVcmkgY2Fubm90IHJlZmVyIHRvIGFwcGxpY2F0aW9uIGxpYnJhcnkgZXhwb3J0ZWRSZWZlcmVuY2VyZWxhdGl2ZVVyaVBhdGh0YXJnZXRTZWdtZW50c3JlZlNlZ21lbnRzc2FtZW9rZWRrZXJuZWwuaGllcmFyY2h5X2Jhc2VkX3R5cGVfZW52aXJvbm1lbnRIZWFwX2l0ZW1zX3BhcmVudEluZGV4b3JwaGFuX3JlSW5zZXJ0X2ZpcnN0Q2hpbGRJbmRleGNoaWxkSW5kZXhuZXh0Q2hpbGRrZXJuZWwubGlicmFyeV9pbmRleExpYnJhcnlJbmRleGdldHRlclByZWZpeGdldDpzZXR0ZXJQcmVmaXhzZXQ6dG9wTGV2ZWxsaWJyYXJ5VXJpc2xpYnJhcnlVcmlTZXRieVVyaWNvcmVMaWJyYXJpZXNfZ2V0TGlicmFyeUluZGV4bGlicmFyeUluZGV4JyBoYXMgbm90IGJlZW4gaW5kZXhlZGNvbnRhaW5zTGlicmFyeW1lbWJlck5hbWV0cnlHZXRNZW1iZXJ0cnlHZXRUb3BMZXZlbE1lbWJlcl9DbGFzc1RhYmxlY29udGFpbmVyTmFtZWV4dGVybmFsIGxpYnJhcnkgJ2xpYnJhcnkgJ19nZXRDbGFzc0luZGV4JyBub3QgZm91bmQgaW4gX01lbWJlclRhYmxlX21lbWJlcnNnZXREaXNhbWJpZ3VhdGVkTmFtZXRvcC1sZXZlbCBvZiBjbGFzcyAnJyBpbiBBIG1lbWJlciB3aXRoIGRpc2FtYmlndWF0ZWQgbmFtZSAnJyB3YXMgbm90IGZvdW5kIC4gRGlkIHlvdSBtZWFuICcnP2NoYXJjb2RlLmFzY2lpLmRvbGxhcl9sb3dlcmNhc2UkbnVsJHNvaCRzdHgkZXR4JGVvdCRlbnEkYWNrJGJlbCRicyRodCR0YWIkbGYkdnQkZmYkY3Ikc28kc2kkZGxlJGRjMSRkYzIkZGMzJGRjNCRuYWskc3luJGV0YiRjYW4kZW0kc3ViJGVzYyRmcyRncyRycyR1cyRkZWwkc3BhY2UkZXhjbGFtYXRpb24kcXVvdCRxdW90ZSRkb3VibGVfcXVvdGUkcXVvdGF0aW9uJGhhc2gkZG9sbGFyJHBlcmNlbnQkYW1wJGFtcGVyc2FuZCRhcG9zJGFwb3N0cm9waGUkc2luZ2xlX3F1b3RlJGxwYXJlbiRvcGVuX3BhcmVuJG9wZW5fcGFyZW50aGVzaXMkcnBhcmVuJGNsb3NlX3BhcmVuJGNsb3NlX3BhcmVudGhlc2lzJGFzdGVyaXNrJHBsdXMkY29tbWEkbWludXMkZGFzaCRkb3QkZnVsbHN0b3Akc2xhc2gkc29saWR1cyRkaXZpc2lvbiRjb2xvbiRzZW1pY29sb24kbHQkbGVzc190aGFuJGxhbmdsZSRvcGVuX2FuZ2xlJGVxdWFsJGd0JGdyZWF0ZXJfdGhhbiRyYW5nbGUkY2xvc2VfYW5nbGUkcXVlc3Rpb24kYXQkbGJyYWNrZXQkb3Blbl9icmFja2V0JGJhY2tzbGFzaCRyYnJhY2tldCRjbG9zZV9icmFja2V0JGNpcmN1bWZsZXgkY2FyZXQkaGF0JHVuZGVyc2NvcmUkdW5kZXJsaW5lJGJhY2txdW90ZSRncmF2ZSRsYnJhY2Ukb3Blbl9icmFjZSRwaXBlJGJhciRyYnJhY2UkY2xvc2VfYnJhY2UkdGlsZGVwYWNrYWdlX2NvbmZpZy51dGlsX3ZhbGlkUGFja2FnZU5hbWVDaGFyYWN0ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISAgJCAmJygpKissLS4gMDEyMzQ1Njc4OSA7ID0gIEBBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiAgICBfIGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6ICAgfiBfZmluZEludmFsaWRDaGFyYWN0ZXJub25Eb3ROb3QgYSBwYWNrYWdlOiBVUklQYWNrYWdlIFVSSXMgbXVzdCBub3QgaGF2ZSBhIGhvc3QgcGFydFBhY2thZ2UgVVJJcyBtdXN0IG5vdCBoYXZlIGEgcXVlcnkgcGFydFBhY2thZ2UgVVJJcyBtdXN0IG5vdCBoYXZlIGEgZnJhZ21lbnQgcGFydFBhY2thZ2UgVVJJcyBtdXN0IG5vdCBzdGFydCB3aXRoIGEgJy8nUGFja2FnZSBVUklzIG11c3Qgc3RhcnQgd2l0aCB0aGUgcGFja2FnZSBuYW1lIGZvbGxvd2VkIGJ5IGEgJy8nYmFkSW5kZXhQYWNrYWdlIG5hbWVzIG11cyBiZSBub24tZW1wdHlQYWNrYWdlIG5hbWVzIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgbm9uLScuJyBjaGFyYWN0ZXJiYWRDaGFyQ29kZWJhZENoYXJQYWNrYWdlIG5hbWVzIG11c3Qgbm90IGNvbnRhaW4gZmFzdGEuc2Nhbm5lci5zdHJpbmdfY2Fub25pY2FsaXplcnBheWxvYWRTdHJpbmdDYW5vbmljYWxpemVyTUFTS0lOSVRJQUxfU0laRV9zaXplX2NvdW50X25vZGVzaGFzaEJ5dGVzaGFzaFN0cmluZ3JlaGFzaG5ld1NpemVuZXdOb2Rlc1N5bnRhY3RpY0VudGl0eVN0cmluZ1V0aWxpdGllc0lOVEVSTkVSaW50ZXJuZmFzdGEua2VybmVsX2J1aWxkZXJEZWxheWVkTWVtYmVyRGVsYXllZE92ZXJyaWRlQ2hlY2tJbXBsaWNpdEZpZWxkVHlwZVZhcmlhYmxlQnVpbGRlckxvYWRMaWJyYXJ5QnVpbGRlclVubGlua2VkRGVjbGFyYXRpb25jb21wYXJlUHJvY2VkdXJlc2lzUmVkaXJlY3RpbmdHZW5lcmF0aXZlQ29uc3RydWN0b3JJbXBsZW1lbnRhdGlvbnRvS2VybmVsQ29tYmluYXRvcnNmYXN0YUNvbWJpbmF0b3JzbmFtZUxpc3RmYXN0YS50YXJnZXRfaW1wbGVtZW50YXRpb25iYWNrZW5kcmV3cml0ZVNldmVyaXR5Y2FjaGVkQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcmNhY2hlZENvbXBpbGVUaW1lRXJyb3JjYWNoZWREdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yY2FjaGVkRmFsbFRocm91Z2hFcnJvcmNhY2hlZE5hdGl2ZUFubm90YXRpb25jYWNoZWROYXRpdmVFeHRlbnNpb25Bbm5vdGF0aW9uZ2V0Q29uc3RydWN0b3JBYnN0cmFjdENsYXNzSW5zdGFudGlhdGlvbkVycm9yX0NvbXBpbGVUaW1lRXJyb3JieXBhc3NMaWJyYXJ5UHJpdmFjeV9EdXBsaWNhdGVkRmllbGRJbml0aWFsaXplckVycm9yRXh0ZXJuYWxOYW1lbWVzc2FnZUNvbnRleHRwcm9jZXNzZWRPcHRpb25zZmFzdGEuZGlsbF9saWJyYXJ5X2J1aWxkZXJEeW5hbWljVHlwZUJ1aWxkZXJTY29wZURpbGxDbGFzc0J1aWxkZXJEaWxsVHlwZUFsaWFzQnVpbGRlckxhenlMaWJyYXJ5U2NvcGVsaWJyYXJ5QnVpbGRlcnRvcE5vIGxpYnJhcnkgYnVpbGRlci51bnNlcmlhbGl6YWJsZUV4cG9ydHNleHBvcnRzQWxyZWFkeUZpbmFsaXplZGlzUmVhZHlUb0J1aWxkaXNSZWFkeVRvRmluYWxpemVFeHBvcnRzaXNCdWlsdGxhenlTY29wZWxhenlFeHBvcnRTY29wZU5vdCByZWFkeSB0byBidWlsZC5Ob3QgcmVhZHkgdG8gZmluYWxpemUgZXhwb3J0cy5hZGRTeW50aGV0aWNEZWNsYXJhdGlvbk9mRHluYW1pY2FkZEJ1aWxkZXJjbGFzc0J1bGRlcl9leHBvcnRzI2FkZFNldHRlcmV4cG9ydFNjb3BlQnVpbGRlcmFkZFRvU2NvcGVjb21wdXRlQW1iaWd1b3VzRGVjbGFyYXRpb248bGlicmFyeSAnJz5tYXJrQXNSZWFkeVRvQnVpbGRtYXJrQXNSZWFkeVRvRmluYWxpemVFeHBvcnRzbWVzc2FnZVRleHRObyBidWlsZGVyIGZvciAnRXhwb3J0ZWQgZWxlbWVudCAnJyBub3QgZm91bmQgaW4gJ2Zhc3RhLmRpbGxfbG9hZGVyVHlwZUJ1aWxkZXJDb21wdXRlcmNvbXBvbmVudExpYnJhcmllc3JlcXVlc3RlZExpYnJhcmllc2J1aWxkZXIubGlicmFyeWtlcm5lbExpYnJhcnlrZXJuZWwuY2xvbmVzd2l0Y2hDYXNlc2Nsb25lQW5ub3RhdGlvbnNfYWN0aXZlRmlsZVVyaWVuc3VyZU11dGFibGVDbG9uaW5nIG9mIGxpYnJhcmllcyBpcyBub3QgaW1wbGVtZW50ZWRDbG9uaW5nIG9mIGNsYXNzZXMgaXMgbm90IGltcGxlbWVudGVkX2Nsb25lRmlsZU9mZnNldGFjdGl2ZUZpbGVVcmlTYXZlZGNsb25lT3B0aW9uYWx2aXNpdE9wdGlvbmFsVHlwZW5ld1ZhcmlhYmxlc3dpdGNoQ2FzZW5ld0V4Y2VwdGlvbm5ld1N0YWNrVHJhY2VjbG9uZUZ1bmN0aW9uTm9kZUJvZHlzYXZlZENsb25lQW5ub3RhdGlvbnNVbmltcGxlbWVudGVkIGNsb25lIGZvciBLZXJuZWwgZXhwcmVzc2lvbjogVW5pbXBsZW1lbnRlZCBjbG9uZSBmb3IgS2VybmVsIGluaXRpYWxpemVyOiBVbmltcGxlbWVudGVkIGNsb25lIGZvciBLZXJuZWwgbWVtYmVyOiBVbmltcGxlbWVudGVkIGNsb25lIGZvciBLZXJuZWwgc3RhdGVtZW50OiBDbG9uaW5nIEtlcm5lbCBub24tbWVtYmVycyBpcyBub3Qgc3VwcG9ydGVkLiAgVHJpZWQgY2xvbmluZyBDbG9uZVdpdGhvdXRCb2R5ZmFzdGEuZGlsbF9tZW1iZXJfYnVpbGRlck1lbWJlckJ1aWxkZXJhYnN0cmFjdE1hc2tleHRlcm5hbE1hc2tzdGF0aWNNYXNraXNSZWRpcmVjdGluZ0dlbmVyYXRpdmVDb25zdHJ1Y3RvcmNvbXB1dGVNb2RpZmllcnNtb2RpZmllcmZhc3RhLnNjb3BlTmFtZUl0ZXJhdG9yVHlwZVZhcmlhYmxlQnVpbGRlck11dGFibGVTY29wZWNsYXNzTmFtZU9yRGVidWdOYW1lU2NvcGUoZm9yd2FyZERlY2xhcmVkTGFiZWxzaW1tdXRhYmxlbmVzdGVkbmFtZUl0ZXJhdG9yY29weVdpdGhQYXJlbnRsb2NhbD1zZXR0ZXJzPXBhcmVudD1iZWNvbWVQYXJ0T2Z3aXRoVHlwZVZhcmlhYmxlc25ld1Njb3BldHlwZSB2YXJpYWJsZXNyZWNvcmRVc2Vsb29rdXBJbmlzSW5zdGFuY2VTY29wZW1lcmdlbWVyZ2VNZW1iZXJuZXN0aW5nTGV2ZWx3cml0ZU9uaW5kZW50Y29tcHV0ZU1peGluU2NvcGVuZWVkc0NvcHlTY29wZUJ1aWxkZXJBY2Nlc3NFcnJvckJ1aWxkZXJTY29wZUxvY2FsRGVjbGFyYXRpb25JdGVyYXRvclNjb3BlTG9jYWxEZWNsYXJhdGlvbk5hbWVJdGVyYXRvcmxvY2FsTmFtZXNzZXR0ZXJOYW1lc2Zhc3RhLnNvdXJjZV9jbGFzc19idWlsZGVyQ29uc3RydWN0b3JSZWZlcmVuY2VCdWlsZGVyRnVuY3Rpb25CdWlsZGVyTWV0YWRhdGFCdWlsZGVyVmFyaWFuY2Vjb21wdXRlVmFyaWFuY2VhY3R1YWxDbHNjb25zdHJ1Y3RvclJlZmVyZW5jZXNvblR5cGVzc3RhcnRDaGFyT2Zmc2V0Y2hhckVuZE9mZnNldGJ1aWxkQnVpbGRlcnNjaGVja1N1cGVydHlwZWJ1aWxkU3VwZXJ0eXBlY29uc3RydWN0b3JTY29wZUJ1aWxkZXJ2YXJpYW5jZW1lbWJlckJ1aWxkZXJmaW5pc2hQYXRjaGNvbXB1dGVEaXJlY3RTdXBlcnR5cGVzaW5pdGlhbGl6ZUNsYXNzZmFzdGEuc291cmNlX2xpYnJhcnlfYnVpbGRlclR5cGVBcmd1bWVudElzc3VlZmluZFR5cGVBcmd1bWVudElzc3Vlc2ZpbmRUeXBlQXJndW1lbnRJc3N1ZXNGb3JJbnZvY2F0aW9uZ2V0R2VuZXJpY1R5cGVOYW1lcmVzb2x2ZVJlbGF0aXZlVXJpRW51bUNvbnN0YW50SW5mb0Zvcm1hbFBhcmFtZXRlckJ1aWxkZXJGdW5jdGlvblR5cGVCdWlsZGVyUHJlZml4QnVpbGRlclF1YWxpZmllZE5hbWVVbnJlc29sdmVkVHlwZWZsYXR0ZW5OYW1lQ29uZmlndXJhdGlvbkV4cG9ydEltcG9ydEJ1aWx0aW5UeXBlQnVpbGRlckNvbnN0cnVjdG9yQnVpbGRlckVudW1CdWlsZGVyVHlwZUFsaWFzQnVpbGRlck1peGluQXBwbGljYXRpb25CdWlsZGVyUmVkaXJlY3RpbmdGYWN0b3J5QnVpbGRlclZvaWRUeXBlQnVpbGRlcmZpbmRHZW5lcmljRnVuY3Rpb25UeXBlc2dldE5vblNpbXBsaWNpdHlJc3N1ZXNGb3JEZWNsYXJhdGlvbmdldE5vblNpbXBsaWNpdHlJc3N1ZXNGb3JUeXBlVmFyaWFibGVzaGFzQ29uc3RDb25zdHJ1Y3Rvck1hc2toYXNJbml0aWFsaXplck1hc2tpbml0aWFsaXppbmdGb3JtYWxNYXNrbWl4aW5EZWNsYXJhdGlvbk1hc2tuYW1lZE1peGluQXBwbGljYXRpb25NYXNrVHlwZUluZmVycmVySW1wbE1BTEZPUk1FRF9VUklfU0NIRU1Fb3JnLWRhcnRsYW5nLW1hbGZvcm1lZC11cmlsaWJyYXJ5RGVjbGFyYXRpb25leHBvcnRzaW1wb3J0U2NvcGVpbXBsZW1lbnRhdGlvbkJ1aWxkZXJzYWNjZXNzb3JzZG9jdW1lbnRhdGlvbkNvbW1lbnRwYXJ0T2ZOYW1lY3VycmVudERlY2xhcmF0aW9uY2FuQWRkSW1wbGVtZW50YXRpb25CdWlsZGVyc2FjY2Vzc1Byb2JsZW1hY3R1YWxPcmlnaW5uYXRpdmVNZXRob2RzYm91bmRsZXNzVHlwZVZhcmlhYmxlc2ZvcndhcmRlcnNPcmlnaW5zaW5mZXJyZWRUeXBlc19uYW1lT3JpZ2ludW50eXBlZEluaXRpYWxpemluZ0Zvcm1hbHNpbXBsaWNpdGx5VHlwZWRGaWVsZHNsYW5ndWFnZVZlcnNpb25FeHBsaWNpdGx5U2V0ZnJvbVNjb3Blc3RvU2NvcGVhZGRUeXBlYWRkQ29uc3RydWN0b3JSZWZlcmVuY2ViZWdpbk5lc3RlZERlY2xhcmF0aW9uaGFzTWVtYmVyc2NyZWF0ZU5lc3RlZGVuZE5lc3RlZERlY2xhcmF0aW9uVW5leHBlY3RlZCBkZWNsYXJhdGlvbi4gVHJ5aW5nIHRvIGVuZCBhICBhcyBhIDxzeW50YXgtZXJyb3I+dXJpSXNWYWxpZHVyaU9mZnNldHBhcnNlZFVyaWNvbXB1dGVBbmRWYWxpZGF0ZUNvbnN0cnVjdG9yTmFtZWFkZEV4cG9ydGNvbmZpZ3VyYXRpb25zbG9va3VwSW1wb3J0Q29uZGl0aW9uZG90dGVkTmFtZWV4cG9ydGVkTGlicmFyeWFkZEV4cG9ydGVycHJlZml4Q2hhck9mZnNldGltcG9ydEluZGV4bmF0aXZlUGF0aGRhcnQtZXh0OnN0cmlwcGVkVXJpbmF0aXZlSW1wb3J0UGF0aGFkZFBhcnRPZmFkZEZpZWxkc2ZpZWxkSW5mb3Nwb3RlbnRpYWxseU5lZWRJbml0aWFsaXplckluT3V0bGluZWluaXRpYWxpemVyVG9rZW5iZWZvcmVMYXN0Y29uc3RJbml0aWFsaXplclRva2VuaXNEdXBsaWNhdGVkRGVjbGFyYXRpb25mdWxsTmFtZWJ1aWxkQnVpbGRlcmFkZERlcGVuZGVuY2llc3NldERvY3VtZW50YXRpb25Db21tZW50YWRkSW1wbGVtZW50YXRpb25CdWlsZGVydmFsaWRhdGVQYXJ0dXNlZFBhcnRzZXhwb3J0ZXJzZXhwb3J0ZXJpbmNsdWRlUGFydHNzZWVuUGFydHNwYXJ0T2Zmc2V0cGFydE9mTGlicmFyeWluY2x1ZGVQYXJ0cGFydERlY2xhcmF0aW9uc2R1cGxpY2F0ZWRwYXJ0SW1wbGljaXRseVR5cGVkRmllbGRzdGFrZUltcGxpY2l0bHlUeXBlZEZpZWxkc2J1aWxkSW5pdGlhbFNjb3Blc2FkZFRvRXhwb3J0U2NvcGVleHBsaWNpdENvcmVJbXBvcnRmaW5hbGl6ZUltcG9ydHNtZW1iZXJMYXN0dHlwZUNvdW50Y2hlY2tUeXBlbm9ybWFsaXplVHlwZWFkZFByb2JsZW1BdEFjY2Vzc29yc2FkZE5hbWVkVHlwZWFkZE1peGluQXBwbGljYXRpb25taXhpbnNhZGRWb2lkVHlwZW5hbWVPZmZzZXRzdXBlcnR5cGVPZmZzZXRfYWRkQ2xhc3NEZWNsYXJhdGlvbktpbmQuY2xhc3NEZWNsYXJhdGlvbmFkZE1peGluRGVjbGFyYXRpb25EZWNsYXJhdGlvbktpbmQubWl4aW5EZWNsYXJhdGlvbmNsYXNzU2NvcGVjbGFzcyBjb25zdHJ1Y3RvclNjb3BlYXBwbHlNaXhpbnN0eXBlVmFyaWFibGVzQnlOYW1lY2hlY2tUeXBlVmFyaWFibGVzc2V0UGFyZW50c2V0UGFyZW50QW5kQ2hlY2tDb25mbGljdHN0dm93bmVyYWRkRXh0ZW5zaW9uRGVjbGFyYXRpb25leHRlbnNpb25OYW1lRGVjbGFyYXRpb25LaW5kLmV4dGVuc2lvbkRlY2xhcmF0aW9uZXh0ZW5zaW9uIHN1YmNsYXNzTmFtZXVubmFtZWQgbWl4aW4gYXBwbGljYXRpb25ydW5uaW5nTmFtZWlzTmFtZWRNaXhpbkFwcGxpY2F0aW9udHlwZVZhcmlhYmxlTmFtZXN0eXBlVmFyaWFibGV1c2VzVHlwZVZhcmlhYmxlc2lzR2VuZXJpY2Z1bGxuYW1lYXBwbGljYXRpb25UeXBlVmFyaWFibGVzYXBwbGljYXRpb25UeXBlQXJndW1lbnRzRGVjbGFyYXRpb25LaW5kLnVubmFtZWRNaXhpbkFwcGxpY2F0aW9ubWl4aW4gYXBwbGljYXRpb25jb3B5VHlwZVZhcmlhYmxlc25ld1R5cGVzbmV3VHlwZW1peGluRGVjbGFyYXRpb25jb21wdXRlZFN0YXJ0Q2hhck9mZnNldGFwcGxpY2F0aW9ubWl4aW4gYWRkTmFtZWRNaXhpbkFwcGxpY2F0aW9ubWl4aW5BcHBsaWNhdGlvbkRlY2xhcmF0aW9uS2luZC5uYW1lZE1peGluQXBwbGljYXRpb25hZGRDb25zdHJ1Y3RvcmNvbnN0cnVjdG9yTmFtZWNoYXJPcGVuUGFyZW5PZmZzZXRuYXRpdmVNZXRob2ROYW1lc2V0Q29uc3RydWN0b3JOYW1lT2Zmc2V0YWRkTmF0aXZlTWV0aG9kYWRkRmFjdG9yeU1ldGhvZGZhY3RvcnlEZWNsYXJhdGlvbkRlY2xhcmF0aW9uS2luZC5mYWN0b3J5TWV0aG9kI2ZhY3RvcnlfbWV0aG9kcHJvY2VkdXJlTmFtZXNhdmVkRGVjbGFyYXRpb25hZGRFbnVtZW51bUNvbnN0YW50SW5mb3NhZGRGdW5jdGlvblR5cGVBbGlhc0RlY2xhcmF0aW9uS2luZC50eXBlZGVmI3R5cGVkZWZhZGRGdW5jdGlvblR5cGVEZWNsYXJhdGlvbktpbmQuZnVuY3Rpb25UeXBlI2Z1bmN0aW9uX3R5cGVhZGRGb3JtYWxQYXJhbWV0ZXJoYXNUaGlzYWRkVHlwZVZhcmlhYmxlYWRkTmF0aXZlRGVwZW5kZW5jeXNlZW5leHBvcnRJbmRleHByZWZpeEJ1aWxkZXJleHBvcnRlZGlzTG9hZExpYnJhcnlwcmVmZXJyZWRvdGhlclVyaXByZWZlcnJlZFVyaWhpZGRlblVyaWJ1aWxkZXJUZW1wbGF0ZWxvYWRMaWJyYXJ5QnVpbGRlcmZpbmlzaEZvcndhcmRlcnNmb3J3YXJkZXJwb3NpdGlvbmFsQ291bnRmb3J3YXJkZXJQYXJhbWV0ZXJvcmlnaW5QYXJhbWV0ZXJvcmlnaW5OYW1lZE1hcG9yaWdpbk5hbWVkZm9yd2FyZGVyTmFtZWRiZWNvbWVOYXRpdmVzeW50aGVzaXplVHlwZVBhcmFtZXRlck5hbWVzc3ludGhlc2l6ZVR5cGVQYXJhbWV0ZXJOYW1lY29tcHV0ZURlZmF1bHRUeXBlc0ZvclZhcmlhYmxlc2hhdmVFcnJvbmVvdXNCb3VuZHNnZW5lcmljRnVuY3Rpb25UeXBlc3JlcG9ydElzc3Vlc2lzc3Vlc3BlcmZvcm1FcnJvclJlY292ZXJ5YXBwbHlQYXRjaGVzb3JpZ2luRGVjbGFyYXRpb25zYXBwbHlQYXRjaHBhdGNoRGVjbGFyYXRpb25zaW5qZWN0TWVtYmVyRnJvbVBhdGNoZXhwb3J0TWVtYmVyRnJvbVBhdGNocmVwb3J0VHlwZUFyZ3VtZW50SXNzdWVzaW5mZXJyZWR0YXJnZXRSZWNlaXZlcmlzc3VlaXNzdWVJbmZlcnJlZGVuY2xvc2luZ1R5cGVlbmNsb3NpbmdOYW1lcmVwb3J0VHlwZUFyZ3VtZW50SXNzdWVjaGVja0JvdW5kc0luRmllbGRhbGxvd1N1cGVyQm91bmRlZGNoZWNrQm91bmRzSW5GdW5jdGlvbk5vZGVQYXJ0c2NoZWNrQm91bmRzSW5GdW5jdGlvbk5vZGVrbGFzc2NoZWNrQm91bmRzSW5NZXRob2RJbnZvY2F0aW9ucmVjZWl2ZXJUeXBlQXJndW1lbnRzbWV0aG9kUGFyYW1ldGVyc2luc3RhbnRpYXRlZE1ldGhvZFBhcmFtZXRlcnNjaGVja0JvdW5kc0luT3V0bGluZWZpbmFsaXplSW5pdGlhbGl6aW5nRm9ybWFsRGVjbGFyYXRpb25LaW5kRGVjbGFyYXRpb25LaW5kLmxpYnJhcnlEZWNsYXJhdGlvbktpbmQuY2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbkRlY2xhcmF0aW9uS2luZC5zdGF0aWNPckluc3RhbmNlTWV0aG9kT3JDb25zdHJ1Y3RvckRlY2xhcmF0aW9uS2luZC50b3BMZXZlbE1ldGhvZGNsYXNzT3JOYW1lZE1peGluQXBwbGljYXRpb25jbGFzc0RlY2xhcmF0aW9udW5uYW1lZE1peGluQXBwbGljYXRpb25uYW1lZE1peGluQXBwbGljYXRpb25leHRlbnNpb25EZWNsYXJhdGlvbnN0YXRpY09ySW5zdGFuY2VNZXRob2RPckNvbnN0cnVjdG9ydG9wTGV2ZWxNZXRob2RmYWN0b3J5TWV0aG9kRGVjbGFyYXRpb25CdWlsZGVyX2tpbmRfY2hhck9mZnNldF90eXBlVmFyaWFibGVzX2V4dGVuc2lvblRoaXNUeXBlPGxpYnJhcnk+cmVnaXN0ZXJDbGFzc0RlY2xhcmF0aW9uVW5leHBlY3RlZCBkZWNsYXJhdGlvbiBraW5kOiByZWdpc3Rlck5hbWVkTWl4aW5BcHBsaWNhdGlvbnJlZ2lzdGVyTWl4aW5EZWNsYXJhdGlvbnJlZ2lzdGVyRXh0ZW5zaW9uRGVjbGFyYXRpb25yZWdpc3RlckV4dGVuc2lvblRoaXNUeXBlRGVjbGFyYXRpb25CdWlsZGVyLnJlZ2lzdGVyRXh0ZW5zaW9uVGhpc1R5cGUgaXMgbm90IHN1cHBvcnRlZCBFeHRlbnNpb24gdGhpcyB0eXBlIGhhcyBhbHJlYWR5IGJlZW4gc2V0LmV4dGVuc2lvblRoaXNUeXBlRGVjbGFyYXRpb25CdWlsZGVyLmV4dGVuc2lvblRoaXNUeXBlIG5vdCBzdXBwb3J0ZWQgb24gRGVjbGFyYXRpb25CdWlsZGVyLmV4dGVuc2lvblRoaXNUeXBlIGhhcyBub3QgYmVlbiBzZXQgb24gbmFtZU9yUXVhbGlmaWVkZW5kQ2hhck9mZnNldGJ1aWxkSW52YWxpZFR5cGVEZWNsYXJhdGlvbkJ1aWxkZXIoOmtpbmQ9LG5hbWU9RmllbGRJbmZvSW1wbGVtZW50YXRpb25JbmZvY29tcHV0ZUxpYnJhcnlVcmlubyBsaWJyYXJ5IHBhcmVudGV4dHJhY3ROYW1lZmFzdGEuc291cmNlX2xvYWRlckluc3RydW1lbnRhdGlvblNoYWRvd1R5cGVJbmZlcmVuY2VFbmdpbmVDb2xsZWN0aW9uVHJhbnNmb3JtZXJTZXRMaXRlcmFsVHJhbnNmb3JtZXJDbGFzc01lbWJlclBhcnNlckRpZXRMaXN0ZW5lckRpZXRQYXJzZXJPdXRsaW5lQnVpbGRlcmluc3RydW1lbnRhdGlvbmNvbGxlY3Rpb25UcmFuc2Zvcm1lcnNldExpdGVyYWxUcmFuc2Zvcm1lcnN1cHByZXNzTGV4aWNhbEVycm9yc3N5bnRoZXNpemVTb3VyY2VGb3JNaXNzaW5nRmlsZWhhc1NjaGVtZXplcm9UZXJtaW5hdGVkQnl0ZXNyYXdCeXRlc2dldFNvdXJjZW5ld1BhdGhTZWdtZW50cy1wYXRjaGltcG9ydCAnZGFydDpfaW50ZXJuYWwnOwppbXBvcnQgJ2RhcnQ6YXN5bmMnOwoKZXhwb3J0ICdkYXJ0OmFzeW5jJyBzaG93IEZ1dHVyZSwgU3RyZWFtOwoKcHJpbnQob2JqZWN0KSB7fQoKY2xhc3MgSXRlcmF0b3Ige30KCmNsYXNzIEl0ZXJhYmxlIHt9CgpjbGFzcyBMaXN0IGV4dGVuZHMgSXRlcmFibGUgewogIGZhY3RvcnkgTGlzdC51bm1vZGlmaWFibGUoZWxlbWVudHMpID0+IG51bGw7Cn0KCmNsYXNzIE1hcCBleHRlbmRzIEl0ZXJhYmxlIHsKICBmYWN0b3J5IE1hcC51bm1vZGlmaWFibGUob3RoZXIpID0+IG51bGw7Cn0KCmNsYXNzIE5vU3VjaE1ldGhvZEVycm9yIHsKICBOb1N1Y2hNZXRob2RFcnJvci53aXRoSW52b2NhdGlvbihyZWNlaXZlciwgaW52b2NhdGlvbik7Cn0KCmNsYXNzIE51bGwge30KCmNsYXNzIE9iamVjdCB7CiAgbm9TdWNoTWV0aG9kKGludm9jYXRpb24pID0+IG51bGw7Cn0KCmNsYXNzIFN0cmluZyB7fQoKY2xhc3MgU3ltYm9sIHt9CgpjbGFzcyBTZXQge30KCmNsYXNzIFR5cGUge30KCmNsYXNzIF9JbnZvY2F0aW9uTWlycm9yIHsKICBfSW52b2NhdGlvbk1pcnJvci5fd2l0aFR5cGUoX21lbWJlck5hbWUsIF90eXBlLCBfdHlwZUFyZ3VtZW50cywKICAgICAgX3Bvc2l0aW9uYWxBcmd1bWVudHMsIF9uYW1lZEFyZ3VtZW50cyk7Cn0KCmNsYXNzIGJvb2wge30KCmNsYXNzIGRvdWJsZSBleHRlbmRzIG51bSB7fQoKY2xhc3MgaW50IGV4dGVuZHMgbnVtIHt9CgpjbGFzcyBudW0ge30KCmNsYXNzIF9TeW5jSXRlcmFibGUge30KCmNsYXNzIF9TeW5jSXRlcmF0b3IgewogIHZhciBfY3VycmVudDsKICB2YXIgX3lpZWxkRWFjaEl0ZXJhYmxlOwp9CgpjbGFzcyBGdW5jdGlvbiB7fQpfYXN5bmNFcnJvcldyYXBwZXJIZWxwZXIoY29udGludWF0aW9uKSB7fQoKX2FzeW5jU3RhY2tUcmFjZUhlbHBlcihhc3luY19vcCkge30KCl9hc3luY1RoZW5XcmFwcGVySGVscGVyKGNvbnRpbnVhdGlvbikge30KCl9hd2FpdEhlbHBlcihvYmplY3QsIHRoZW5DYWxsYmFjaywgZXJyb3JDYWxsYmFjaywgYXdhaXRlcikge30KCl9jb21wbGV0ZU9uQXN5bmNSZXR1cm4oY29tcGxldGVyLCB2YWx1ZSkge30KCmNsYXNzIF9Bc3luY1N0YXJTdHJlYW1Db250cm9sbGVyIHsKICBhZGQoZXZlbnQpIHt9CgogIGFkZEVycm9yKGVycm9yLCBzdGFja1RyYWNlKSB7fQoKICBhZGRTdHJlYW0oc3RyZWFtKSB7fQoKICBjbG9zZSgpIHt9CgogIGdldCBzdHJlYW0gPT4gbnVsbDsKfQoKY2xhc3MgQ29tcGxldGVyIHsKICBmYWN0b3J5IENvbXBsZXRlci5zeW5jKCkgPT4gbnVsbDsKCiAgZ2V0IGZ1dHVyZTsKCiAgY29tcGxldGUoW3ZhbHVlXSk7CgogIGNvbXBsZXRlRXJyb3IoZXJyb3IsIFtzdGFja1RyYWNlXSk7Cn0KCmNsYXNzIEZ1dHVyZSB7CiAgZmFjdG9yeSBGdXR1cmUubWljcm90YXNrKGNvbXB1dGF0aW9uKSA9PiBudWxsOwp9CgpjbGFzcyBGdXR1cmVPciB7Cn0KCmNsYXNzIF9Bc3luY0F3YWl0Q29tcGxldGVyIGltcGxlbWVudHMgQ29tcGxldGVyIHsKICBnZXQgZnV0dXJlID0+IG51bGw7CgogIGNvbXBsZXRlKFt2YWx1ZV0pIHt9CgogIGNvbXBsZXRlRXJyb3IoZXJyb3IsIFtzdGFja1RyYWNlXSkge30KfQoKY2xhc3MgU3RyZWFtIHt9CgpjbGFzcyBfU3RyZWFtSXRlcmF0b3IgewogIGdldCBjdXJyZW50ID0+IG51bGw7CgogIG1vdmVOZXh0KCkge30KCiAgY2FuY2VsKCkge30KfQpjbGFzcyBfVW5tb2RpZmlhYmxlU2V0IHsKICBmaW5hbCBNYXAgX21hcDsKICBjb25zdCBfVW5tb2RpZmlhYmxlU2V0KHRoaXMuX21hcCk7Cn0KY2xhc3MgU3ltYm9sIHsKICBjb25zdCBTeW1ib2woU3RyaW5nIG5hbWUpOwp9Ci8qIG9mZnNldEluQnl0ZXNsaXN0ZW5lcnBhcnNlVW5pdGNyZWF0ZURpZXRMaXN0ZW5lcmRpZXRMaXN0ZW5lcmRlYnVnRXhwcmVzc2lvbiBpbiBkZWJ1Z0V4cHJjcmVhdGVMaXN0ZW5lclJlc29sdmVkIHBhcnRzQXBwbGllZCBwYXRjaGVzZXhwb3J0ZWVzc291cmNlTGlicmFyeWJvdGh3YXNDaGFuZ2VkZXhwb3J0ZWVDb21wdXRlZCBsaWJyYXJ5IHNjb3Blc2RlYnVnUHJpbnRFeHBvcnRzIGV4cG9ydHMgIHR5cGVzZm9ybWFsQ291bnRGaW5hbGl6ZWQgIGluaXRpYWxpemluZyBmb3JtYWxzRmluaXNoZWQgZGVmZXJyZWQgbG9hZCB0ZWFyb2ZmcyBGaW5pc2hlZCBmb3J3YXJkZXJzIGZvciAgcHJvY2VkdXJlcyBjb25zdHJ1Y3RvcnMgdHlwZS12YXJpYWJsZSBib3VuZHNDb21wdXRlZCBkZWZhdWx0IHR5cGVzIGZvciAgdHlwZSB2YXJpYWJsZXNGaW5pc2hlZCAgbmF0aXZlIG1ldGhvZHMgcGF0Y2ggbWV0aG9kc2NoZWNrT2JqZWN0Q2xhc3NIaWVyYXJjaHloYW5kbGVIaWVyYXJjaHlDeWNsZXNibGFja0xpc3RlZENsYXNzZXN0b3BvbG9naWNhbGx5U29ydGVkQ2xhc3Nlc3ByZXZpb3VzV29ya0xpc3RkaXJlY3RTdXBlcnR5cGVzYWxsU3VwZXJ0eXBlc1Byb2Nlc3NlZGNoZWNrQ2xhc3NTdXBlcnR5cGVzY2xhc3Nlc1dpdGhDeWNsZXNDaGVja2VkIGNsYXNzIGhpZXJhcmNoeWlzQ2xhc3NCdWlsZGVyY29uc3RydWN0b3J5bmFtZVRvRXhwb3J0c2Vycm9yRXhwb3J0c25hbWVUb0ltcG9ydHNlcnJvckltcG9ydHNDaGVja2VkIGltcG9ydHMgYW5kIGV4cG9ydHMgZm9yIGR1cGxpY2F0ZSBuYW1lc0J1aWx0IGNvbXBvbmVudGNvbXB1dGVGdWxsQ29tcG9uZW50YW1iaWd1b3VzVHlwZXNSZWNvcmRzcmVjb3JkaGFuZGxlQW1iaWd1b3VzU3VwZXJ0eXBlc0NvbXB1dGVkIGNsYXNzIGhpZXJhcmNoeWlnbm9yZUFtYmlndW91c1N1cGVydHlwZXNDb21wdXRlZCBjb3JlIHR5cGVzc291cmNlQ2xhc3Nlc0NoZWNrZWQgc3VwZXJ0eXBlc0NoZWNrZWQgdHlwZSBhcmd1bWVudHMgb2Ygc3VwZXJzIGFnYWluc3QgdGhlIGJvdW5kc292ZXJyaWRlQ2hlY2tzQ2hlY2tlZCAgb3ZlcnJpZGVzZmluaXNoVG9wTGV2ZWxJbml0aWFsaXppbmdGb3JtYWxzRmluaXNoZWQgaW5pdGlhbGl6aW5nIGZvcm1hbHNkZWxheWVkTWVtYmVyQ2hlY2tzY2hhbmdlZENsYXNzZXNDb21wdXRlZCAgY29tYmluZWQgbWVtYmVyIHNpZ25hdHVyZXNVcGRhdGVkICBjbGFzc2VzIGluIGtlcm5lbCBoaWVyYXJjaHlDaGVja2VkIHJlZGlyZWN0aW5nIGZhY3Rvcmllc0FkZGVkIG5vU3VjaE1ldGhvZCBmb3J3YXJkZXJzY2hlY2tNaXhpbkRlY2xhcmF0aW9uY2hlY2tNaXhpbkFwcGxpY2F0aW9uQ2hlY2tlZCBtaXhpbiBkZWNsYXJhdGlvbiBhcHBsaWNhdGlvbnNoaWVyYXJjaHlCdWlsZGVyQnVpbHQgY2xhc3MgaGllcmFyY2h5cHJlcGFyZVRvcExldmVsYWxsSW1wbGljaXRseVR5cGVkRmllbGRzaW5mZXJUeXBlaXNUeXBlSW5mZXJlbmNlUHJlcGFyZWRQZXJmb3JtZWQgdG9wIGxldmVsIGluZmVyZW5jZXRyYW5zZm9ybUNvbnN0dHJhbnNmb3JtZXJBbWJpZ3VvdXNUeXBlc1JlY29yZGRlZmF1bHREYXJ0Q29yZVNvdXJjZWRlZmF1bHREYXJ0QXN5bmNTb3VyY2VkZWZhdWx0RGFydENvbGxlY3Rpb25Tb3VyY2VkZWZhdWx0RGFydEludGVybmFsU291cmNlZmFzdGEuY29uc3RhbnRfZXZhbHVhdG9yY29uc3RhbnRfY29sbGVjdGlvbl9idWlsZGVycy5kYXJ0SmF2YVNjcmlwdEludENvbnN0YW50YmlnSW50VmFsdWVmcm9tRG91YmxlZnJvbUJpZ0ludHRvRG91YmxlZnJvbVVJbnQ2NHRvVW5zaWduZWRDb25zdGFudHNUcmFuc2Zvcm1lcmNvbnN0YW50RXZhbHVhdG9ya2VlcEZpZWxkc2tlZXBWYXJpYWJsZXNldmFsdWF0ZUFubm90YXRpb25zZXJyb3JSZXBvcnRlcmNvbnZlcnRMaWJyYXJ5dHJhbnNmb3JtQW5ub3RhdGlvbnN3aXRoTmV3RW52aXJvbm1lbnR0cmFuc2Zvcm1FeHByZXNzaW9uc2V2YWx1YXRlQW5kVHJhbnNmb3JtV2l0aENvbnRleHRwb3NpdGlvbmFsUGFyYW1ldGVyQ291bnRldmFsdWF0ZVdpdGhDb250ZXh0YWRkVmFyaWFibGVWYWx1ZW1ha2VDb25zdGFudEV4cHJlc3Npb25zaG91bGRJbmxpbmV0cmVlQ29udGV4dHJ1bkluc2lkZUNvbnRleHRDb25zdGFudEV2YWx1YXRvcnVubW9kaWZpYWJsZVNldE1hcGlzSW5zdGFudGlhdGVkY2Fub25pY2FsaXphdGlvbkNhY2hlbm9kZUNhY2hlcHJpbWl0aXZlRXF1YWxDYWNoZW51bGxDb25zdGFudHRydWVDb25zdGFudGZhbHNlQ29uc3RhbnRjb250ZXh0Q2hhaW5pbnN0YW5jZUJ1aWxkZXJyZXBsYWNlbWVudE5vZGVzbG93ZXJlZHNlZW5VbmV2YWx1YXRlZENoaWxkbGF6eURlcHRocHVibGljSWRlbnRpZmllclJlZ0V4cF5bYS16QS1aJF1bYS16QS1aMC05XyRdKiRub25Vc2FibGVLZXl3b3Jkc05vICdlbnZpcm9ubWVudERlZmluZXMnIHBhc3NlZCB0byB0aGUgY29uc3RhbnQgZXZhbHVhdG9yIGJ1dCB0aGUgQ29uc3RhbnRzQmFja2VuZCBkb2VzIG5vdCBzdXBwb3J0IHVuZXZhbHVhdGVkIGNvbnN0YW50cy5fVW5tb2RpZmlhYmxlU2V0X21hcHNob3VsZEJlVW5ldmFsdWF0ZWR0YXJnZXRpbmdKYXZhU2NyaXB0Z2V0RmlsZU9mZnNldF9ldmFsdWF0ZVN1YmV4cHJlc3Npb25jb250ZXh0TWVzc2FnZXNpbnZhbGlkcmVwb3J0SW52YWxpZEV4cHJlc3Npb25yZXBvcnRJbnZhbGlkdW5ldmFsdWF0ZWRleHRyYWN0ZW50ZXJMYXp5bGVhdmVMYXp5dW5sb3dlcndhc1VuZXZhbHVhdGVkX2V2YWx1YXRlTnVsbGFibGVTdWJleHByZXNzaW9uZnVucHVzaENvbnRleHRwb3BDb250ZXh0cnVuSW5zaWRlQ29udGV4dElmTm9Db250ZXh0Y29udGV4dE5vZGVDb25zdGFudCBldmFsdWF0aW9uIGhhcyBubyBzdXBwb3J0IGZvciBtYWtlQm9vbENvbnN0YW50bWFrZURvdWJsZUNvbnN0YW50ZXZhbHVhdGVEYXJ0VHlwZWlzRmluaXRldHJ1bmNhdGVUb0RvdWJsZWFkZFNwcmVhZHNldF9pc1N5bWJvbE5vbi1jb25zdCBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uLkNvbnN0cnVjdG9yICIiIGhhcyBub24tdHJpdmlhbCBib2R5ICIgYmVsb25ncyB0byBhYnN0cmFjdCBjbGFzcyAicG9zaXRpb25hbHNldmFsdWF0ZVBvc2l0aW9uYWxBcmd1bWVudHNldmFsdWF0ZU5hbWVkQXJndW1lbnRzdW5ldmFsdWF0ZWRBcmd1bWVudHNuYW1lVmFsdWVpc1ZhbGlkU3ltYm9sTmFtZWV2YWx1YXRlVHlwZUFyZ3VtZW50c3dpdGhOZXdJbnN0YW5jZUJ1aWxkZXJoYW5kbGVDb25zdHJ1Y3Rvckludm9jYXRpb25idWlsZFVuZXZhbHVhdGVkSW5zdGFuY2VidWlsZEluc3RhbmNlY2hlY2tBc3NlcnRzZXRGaWVsZFZhbHVlaXNWYWxpZFB1YmxpY0lkZW50aWZpZXJoYXNNYXRjaHBvc2l0aW9uYWxBcmd1bWVudHNuYW1lZEFyZ3VtZW50c2FkZFR5cGVQYXJhbWV0ZXJWYWx1ZWluaXRldmFsdWF0ZVN1cGVyVHlwZUFyZ3VtZW50c05vIHN1cHBvcnQgZm9yIGhhbmRsaW5nIGluaXRpYWxpemVyIG9mIHR5cGUgdW5ldmFsdWF0ZWRVbnJlYWRDb25zdGFudHNpc1plcm9vcG90aGVyVmFsdWV0b0ludGV2YWx1YXRlQmluYXJ5Qml0T3BlcmF0aW9ubmVnYXRpdmVpc05lZ2F0aXZlZXZhbHVhdGVCaW5hcnlTaGlmdE9wZXJhdGlvbm5lZ2F0aXZlUmVjZWl2ZXJldmFsdWF0ZUJpbmFyeU51bWVyaWNPcGVyYXRpb25JbnN0YW5jZSBmaWVsZCBhY2Nlc3Mgb3V0c2lkZSBjb25zdHJ1Y3RvckNvdWxkIG5vdCBldmFsdWF0ZSBmaWVsZCBnZXQgIG9uIGluY29tcGxldGUgaW5zdGFuY2Vsb29rdXBWYXJpYWJsZVZhcmlhYmxlIGdldCBvZiBhIG5vbi1jb25zdCB2YXJpYWJsZS5ObyBzdXBwb3J0IGZvciAgaW4gYSBzdGF0aWMtZ2V0LmNvbmNhdGVuYXRlZGJvb2xDb25zdGFudGludFZhbHVlZW5zdXJlSXNTdWJ0eXBlaXNTdWJ0eXBlbGlicmFyeU9mZXZhbHVhdGVEYXJ0VHlwZXNUaGUgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIHN1cHBsaWVkIGluIHRoZSBwYXJ0aWFsIGluc3RhbnRpYXRpb24gZG9lcyBub3QgbWF0Y2ggdGhlIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyBvZiB0aGUgT25seSB0ZWFyLW9mZiBjb25zdGFudHMgY2FuIGJlIHBhcnRpYWxseSBpbnN0YW50aWF0ZWQuaGFzUHJpbWl0aXZlRXF1YWxjbGFzc0hhc1ByaW1pdGl2ZUVxdWFsY2FjaGVkY29uc3RhbnRUeXBlcGFpcnBvc2l0aW9uYWxBcmdzbmFtZWRBcmdzb2xkRW52MjE0NzQ4MzY0OHRvU2lnbmVkVW5leHBlY3RlZCBiaW5hcnkgbnVtZXJpYyBvcGVyYXRpb24gJ0luc3RhbmNlQnVpbGRlcmV2YWx1YXRvckV2YWx1YXRpb25FbnZpcm9ubWVudF92YXJpYWJsZXNfdW5yZWFkVW5ldmFsdWF0ZWRWYXJpYWJsZXNsb29rdXBQYXJhbWV0ZXJWYWx1ZV9BYm9ydER1ZVRvRXJyb3JfQWJvcnREdWVUb0ludmFsaWRFeHByZXNzaW9uRXJyb3JSZXBvcnRlclNpbXBsZUVycm9yUmVwb3J0ZXJfcmVwb3J0IENvbnN0YW50IGV2YWx1YXRpb24gZXJyb3I6IElzSW5zdGFudGlhdGVkVmlzaXRvcl9hdmFpbGFibGVWYXJpYWJsZXNBIHZpc2l0b3IgbWV0aG9kIHNlZW1zIHRvIGJlIHVuaW1wbGVtZW50ZWQhX0xpc3RPclNldENvbnN0YW50QnVpbGRlcm1ha2VMaXRlcmFsYWRkQ29uc3RhbnRzcHJlYWRFeHByZXNzaW9uc3ByZWFkTGlzdENvbnN0YW50QnVpbGRlcmxhc3RQYXJ0Tm9uLWNvbnN0YW50IGluIGNvbnN0YW50IGxpc3RTZXRDb25zdGFudEJ1aWxkZXJOb24tY29uc3RhbnQgaW4gY29uc3RhbnQgc2V0TWFwQ29uc3RhbnRCdWlsZGVyc2VlbktleXNrZXlDb250ZXh0dmFsdWVDb250ZXh0Tm9uLWNvbnN0YW50IGluIGNvbnN0YW50IG1hcHRyYW5zZm9ybUNvbXBvbmVudGNvbnN0YW50c1RyYW5zZm9ybWVyX2lzRm9ybWFsUGFyYW1ldGVyZmFzdGEua2VybmVsX2NvbnN0YW50c3ByZWRpY2F0ZWV4Y2x1ZGVVcmlUb1NvdXJjZWxpYnJhcmllc1RvV3JpdGVrZXJuZWwuY2hlY2tzVmVyaWZpY2F0aW9uRXJyb3I6IFZlcmlmaWNhdGlvbiBlcnJvcjpWZXJpZmljYXRpb24gZXJyb3I6IENvbnRleHQ6ICcnLgpOb2RlOiAnVHlwZWRlZlN0YXRlVHlwZWRlZlN0YXRlLkRvbmVUeXBlZGVmU3RhdGUuQmVpbmdDaGVja2VkRG9uZUJlaW5nQ2hlY2tlZHR5cGVQYXJhbWV0ZXJzSW5TY29wZXR5cGVkZWZTdGF0ZWNsYXNzVHlwZVBhcmFtZXRlcnNBcmVJblNjb3BlY3VycmVudE1lbWJlcmN1cnJlbnRQYXJlbnRlbnRlclBhcmVudEluY29ycmVjdCBwYXJlbnQgcG9pbnRlciBvbiAgZXhwZWN0ZWQgJycsIGJ1dCBmb3VuZDogJ29sZFBhcmVudGV4aXRQYXJlbnR1bmRlY2xhcmVWYXJpYWJsZXZpc2l0V2l0aExvY2FsU2NvcGVkZWNsYXJlTWVtYmVyTWVtYmVyICcnIGhhcyBiZWVuIGRlY2xhcmVkIG1vcmUgdGhhbiBvbmNlLnVuZGVjbGFyZU1lbWJlclZhcmlhYmxlICcnIGRlY2xhcmVkIG1vcmUgdGhhbiBvbmNlLmRlY2xhcmVUeXBlUGFyYW1ldGVyc01pc3NpbmcgYm91bmQgZm9yIHR5cGUgcGFyYW1ldGVyICdUeXBlIHBhcmFtZXRlciAnJyByZWRlY2xhcmVkLnVuZGVjbGFyZVR5cGVQYXJhbWV0ZXJzY2hlY2tWYXJpYWJsZUluU2NvcGUnIHVzZWQgb3V0IG9mIHNjb3BlLlR5cGVkZWYgJ2NoZWNrVHlwZWRlZicgcmVmZXJzIHRvIGl0c2VsZnNhdmVkVHlwZVBhcmFtZXRlcnNzYXZlZFBhcmVudFRoZSB0b3AtbGV2ZWwgZmllbGQgJycgc2hvdWxkIGJlIHN0YXRpY1RoZSBjb25zdCBmaWVsZCAnc2F2ZWRJbkNhdGNoQmxvY2tOYW1lZCBwYXJhbWV0ZXJzIGFyZSBub3Qgc29ydGVkIG9uIGZ1bmN0aW9uIHR5cGUgKFJldGhyb3cgbXVzdCBiZSBpbnNpZGUgYSBDYXRjaCBibG9jay5WYXJpYWJsZURlY2xhcmF0aW9uIG11c3QgYmUgYSBkaXJlY3QgY2hpbGQgb2YgYSBCbG9jaywgbm90IFN0YXRpY0dldCB3aXRob3V0IHRhcmdldC5TdGF0aWNHZXQgb2YgJycgd2l0aG91dCBnZXR0ZXIuJyB0aGF0J3MgYW4gaW5zdGFuY2UgbWVtYmVyLlN0YXRpY1NldCB3aXRob3V0IHRhcmdldC5TdGF0aWNTZXQgdG8gJycgd2l0aG91dCBzZXR0ZXIuY2hlY2tUYXJnZXRlZEludm9jYXRpb25TdGF0aWNJbnZvY2F0aW9uIG9mICdDb25zdGFudCBTdGF0aWNJbnZvY2F0aW9uIG9mICcnIHRoYXQgaXNuJ3QgYSBjb25zdCBleHRlcm5hbCBmYWN0b3J5LiB3aXRob3V0IHRhcmdldC4gd2l0aG91dCBmdW5jdGlvbi4gd2l0aCBpbmNvbXBhdGlibGUgYXJndW1lbnRzIGZvciAnZXhwZWN0ZWRUeXBlUGFyYW1ldGVycyB3aXRoIHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyBmb3IgJ0RpcmVjdFByb3BlcnR5R2V0IHdpdGhvdXQgdGFyZ2V0LkRpcmVjdFByb3BlcnR5R2V0IG9mICcnIHRoYXQgaXNuJ3QgYW4gaW5zdGFuY2UgbWVtYmVyLkRpcmVjdFByb3BlcnR5U2V0IHdpdGhvdXQgdGFyZ2V0LkRpcmVjdFByb3BlcnR5U2V0IG9mICcnIHRoYXQgaXMgc3RhdGljLkRpcmVjdE1ldGhvZEludm9jYXRpb24gd2l0aG91dCByZWNlaXZlci5Db25zdHJ1Y3Rvckludm9jYXRpb24gb2YgYWJzdHJhY3QgY2xhc3MuQ29uc3RhbnQgQ29uc3RydWN0b3JJbnZvY2F0aW9uIGZvICcnIHRoYXQgaXNuJ3QgY29uc3QuTm8gdGFyZ2V0LlRhcmdldCBoYXMgbm8gcGFyZW50LlN3aXRjaCBjYXNlIGlzbid0IGNoaWxkIG9mIHBhcmVudC5EYW5nbGluZyByZWZlcmVuY2UgdG8gJycsIHBhcmVudCBpczogJycgcmVmZXJlbmNlZCBvdXQgb2Ygc2NvcGUsIHBhcmVudCBpczogJycgcmVmZXJlbmNlZCBmcm9tIHN0YXRpYyBjb250ZXh0LCBwYXJlbnQgaXM6ICdUeXBlICBwcm92aWRlcyAgdHlwZSBhcmd1bWVudHMgYnV0IHRoZSBjbGFzcyBkZWNsYXJlcyBwYXJhbWV0ZXJzLlRoZSB0eXBlZGVmIHR5cGUgIHR5cGUgYXJndW1lbnRzIGJ1dCB0aGUgdHlwZWRlZiBkZWNsYXJlc0NoZWNrUGFyZW50UG9pbnRlcnNQYXJlbnQgcG9pbnRlciBvbiAnaXMgJ2J1dCBzaG91bGQgYmUgJ2NoZWNrSW5pdGlhbGl6ZXJzVHlwZVNjaGVtYVByaW50ZXJfSXNLbm93blZpc2l0b3JwYXJhbWV0ZXJUeXBlbmFtZWRQYXJhbWV0ZXJUeXBlaXNLbm93bnNjaGVtYXR5cGVTY2hlbWFUb1N0cmluZ0luc3RydW1lbnRhdGlvblZhbHVlRm9yTWVtYmVySW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlSW5zdHJ1bWVudGF0aW9uVmFsdWVGb3JUeXBlQXJnc0luZmVyZW5jZUhlbHBlckluY2x1ZGVzVHlwZVBhcmFtZXRlcnNOb25Db3ZhcmlhbnRseVR5cGVJbmZlcmVuY2VFbmdpbmVFeHByZXNzaW9uSW5mZXJlbmNlUmVzdWx0VHlwZVByb21vdGVySW1wbGdyZWF0ZXN0Q2xvc3VyZVR5cGVTY2hlbWFFbnZpcm9ubWVudGdldFBvc2l0aW9uYWxQYXJhbWV0ZXJUeXBlQ29udHJvbEZsb3dNYXBFbnRyeUZvckVsZW1lbnRGb3JJbkVsZW1lbnRGb3JJbk1hcEVudHJ5Rm9yTWFwRW50cnlJZkVsZW1lbnRJZk1hcEVudHJ5Y29udmVydFRvRWxlbWVudG1ha2VMZXRpbmZlcmVuY2VfdmlzaXRvci5kYXJ0aW5mZXJyZWRfdHlwZV92aXNpdG9yLmRhcnRDbGFzc0luZmVyZW5jZUluZm9uZWVkc0NoZWNrVmlzaXRvcmdldHRlcnNBbmRNZXRob2RzQXJndW1lbnRzSnVkZ21lbnRfaGFzRXhwbGljaXRUeXBlQXJndW1lbnRzcG9zaXRpb25hbEp1ZGdtZW50c3NldE5vbkluZmVycmFibGVBcmd1bWVudFR5cGVzcmVtb3ZlTm9uSW5mZXJyYWJsZUFyZ3VtZW50VHlwZXNBc3NlcnRJbml0aWFsaXplckp1ZGdtZW50anVkZ21lbnRhY2NlcHRJbmZlcmVuY2V2aXNpdEFzc2VydEluaXRpYWxpemVySnVkZ21lbnRBc3NlcnRTdGF0ZW1lbnRKdWRnbWVudGNvbmRpdGlvbkp1ZGdtZW50bWVzc2FnZUp1ZGdtZW50dmlzaXRBc3NlcnRTdGF0ZW1lbnRKdWRnbWVudEJsb2NrSnVkZ21lbnRqdWRnbWVudHN2aXNpdEJsb2NrSnVkZ21lbnRDYXNjYWRlSnVkZ21lbnRuZXh0Q2FzY2FkZXRhcmdldEp1ZGdtZW50Y2FzY2FkZUp1ZGdtZW50c3NlY3Rpb25uZXdDYXNjYWRldHlwZUNvbnRleHR2aXNpdENhc2NhZGVKdWRnbWVudENvbXBsZXhBc3NpZ25tZW50SnVkZ21lbnRjb21iaW5lcm51bGxBd2FyZUNvbWJpbmVyaXNQb3N0SW5jRGVjaXNQcmVJbmNEZWNfZ2V0VG9TdHJpbmdQYXJ0c2Rlc3VnYXJlZD1yZWFkPXJocz13cml0ZT1jb21iaW5lcj1udWxsQXdhcmVDb21iaW5lcj1pc1Bvc3RJbmNEZWM9dHJ1ZWlzUHJlSW5jRGVjPXRydWVfaW5mZXJSaHNpbmZlcnJlcnJlYWRUeXBld3JpdGVDb250ZXh0Y29tYmluZXJNZW1iZXJjb21iaW5lZFR5cGVmaW5kTWV0aG9kSW52b2NhdGlvbk1lbWJlcmluc3RydW1lbnRlZGlzT3ZlcmxvYWRlZEFyaXRobWV0aWNPcGVyYXRvckFuZFR5cGVyaHNUeXBlY29tYmluZXJUeXBlZ2V0Q2FsbGVlRnVuY3Rpb25UeXBlZ2V0Q2FsbGVlVHlwZWluZmVyRXhwcmVzc2lvbmV4cGVjdGVkVHlwZWVuc3VyZUFzc2lnbmFibGVjaGVja0tpbmRwcmVDaGVja0ludm9jYXRpb25Db250cmF2YXJpYW5jZXJlcGxhY2VkQ29tYmluZXJoYW5kbGVJbnZvY2F0aW9uQ29udHJhdmFyaWFuY2VyZXBsYWNlZENvbWJpbmVyMl9zdG9yZUxldFR5cGVpc1ZvaWRBbGxvd2VkcmVwbGFjZWRSaHNlcXVhbHNJbnZvY2F0aW9uZ2V0U3RhbmRhcmRVcHBlckJvdW5kQ29tcGxleEFzc2lnbm1lbnRKdWRnbWVudFdpdGhSZWNlaXZlcnJlY2VpdmVyPWlzU3VwZXI9dHJ1ZV9pbmZlclJlY2VpdmVyY2xhc3NIaWVyYXJjaHlDb250aW51ZVN3aXRjaEp1ZGdtZW50dmlzaXRDb250aW51ZVN3aXRjaEp1ZGdtZW50RGVmZXJyZWRDaGVja0p1ZGdtZW50dmlzaXREZWZlcnJlZENoZWNrSnVkZ21lbnREb0p1ZGdtZW50dmlzaXREb0p1ZGdtZW50RG91YmxlSnVkZ21lbnR2aXNpdERvdWJsZUp1ZGdtZW50RXhwcmVzc2lvbkp1ZGdtZW50RW1wdHlTdGF0ZW1lbnRKdWRnbWVudHZpc2l0RW1wdHlTdGF0ZW1lbnRKdWRnbWVudEV4cHJlc3Npb25TdGF0ZW1lbnRKdWRnbWVudHZpc2l0RXhwcmVzc2lvblN0YXRlbWVudEp1ZGdtZW50RmFjdG9yeUNvbnN0cnVjdG9ySW52b2NhdGlvbkp1ZGdtZW50YXJndW1lbnRKdWRnbWVudHN2aXNpdEZhY3RvcnlDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudFNoYWRvd0ZpZWxkSW5pdGlhbGl6ZXJ2aXNpdFNoYWRvd0ZpZWxkSW5pdGlhbGl6ZXJGb3JKdWRnbWVudHVwZGF0ZUp1ZGdtZW50c3Zpc2l0Rm9ySnVkZ21lbnRGdW5jdGlvbk5vZGVKdWRnbWVudEZ1bmN0aW9uRGVjbGFyYXRpb25KdWRnbWVudF9oYXNJbXBsaWNpdFJldHVyblR5cGV2YXJpYWJsZUp1ZGdtZW50ZnVuY3Rpb25KdWRnbWVudHZpc2l0RnVuY3Rpb25EZWNsYXJhdGlvbkp1ZGdtZW50c2V0SGFzSW1wbGljaXRSZXR1cm5UeXBlSW52YWxpZFN1cGVySW5pdGlhbGl6ZXJKdWRnbWVudGFyZ3VtZW50c0p1ZGdtZW50dmlzaXRJbnZhbGlkU3VwZXJJbml0aWFsaXplckp1ZGdtZW50SWZOdWxsSnVkZ21lbnRsZWZ0SnVkZ21lbnRyaWdodEp1ZGdtZW50dmlzaXRJZk51bGxKdWRnbWVudElmSnVkZ21lbnR2aXNpdElmSnVkZ21lbnRJbGxlZ2FsQXNzaWdubWVudEp1ZGdtZW50dmlzaXRJbGxlZ2FsQXNzaWdubWVudEp1ZGdtZW50SW5kZXhBc3NpZ25tZW50SnVkZ21lbnRfZ2V0SW52b2NhdGlvbkFyZ3VtZW50c2luZGV4PXZpc2l0SW5kZXhBc3NpZ25tZW50SnVkZ21lbnRJbml0aWFsaXplckp1ZGdtZW50SW50SnVkZ21lbnRhc0RvdWJsZW5lZ2F0ZWRkb3VibGVWYWx1ZXZpc2l0SW50SnVkZ21lbnRTaGFkb3dMYXJnZUludExpdGVyYWxhc0ludDY0dmlzaXRTaGFkb3dMYXJnZUludExpdGVyYWxTaGFkb3dJbnZhbGlkSW5pdGlhbGl6ZXJ2aXNpdFNoYWRvd0ludmFsaWRJbml0aWFsaXplclNoYWRvd0ludmFsaWRGaWVsZEluaXRpYWxpemVydmlzaXRTaGFkb3dJbnZhbGlkRmllbGRJbml0aWFsaXplckxpc3RMaXRlcmFsSnVkZ21lbnR2aXNpdExpc3RMaXRlcmFsSnVkZ21lbnRTZXRMaXRlcmFsSnVkZ21lbnR2aXNpdFNldExpdGVyYWxKdWRnbWVudE1hcExpdGVyYWxKdWRnbWVudHZpc2l0TWFwTGl0ZXJhbEp1ZGdtZW50TWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50X2lzSW1wbGljaXRDYWxsdmlzaXRNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnROYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbkp1ZGdtZW50dmlzaXROYW1lZEZ1bmN0aW9uRXhwcmVzc2lvbkp1ZGdtZW50TnVsbEF3YXJlTWV0aG9kSW52b2NhdGlvbkp1ZGdtZW50X2Rlc3VnYXJlZEludm9jYXRpb252aXNpdE51bGxBd2FyZU1ldGhvZEludm9jYXRpb25KdWRnbWVudE51bGxBd2FyZVByb3BlcnR5R2V0SnVkZ21lbnRfZGVzdWdhcmVkR2V0cmVjZWl2ZXJKdWRnbWVudHZpc2l0TnVsbEF3YXJlUHJvcGVydHlHZXRKdWRnbWVudFByb3BlcnR5QXNzaWdubWVudEp1ZGdtZW50bnVsbEF3YXJlR3VhcmRudWxsQXdhcmVHdWFyZD1faGFuZGxlV3JpdGVDb250cmF2YXJpYW5jZWZpbmRQcm9wZXJ0eVNldE1lbWJlcnZpc2l0UHJvcGVydHlBc3NpZ25tZW50SnVkZ21lbnRSZWRpcmVjdGluZ0luaXRpYWxpemVySnVkZ21lbnR2aXNpdFJlZGlyZWN0aW5nSW5pdGlhbGl6ZXJKdWRnbWVudFJldHVybkp1ZGdtZW50cmV0dXJuS2V5d29yZExleGVtZXZpc2l0UmV0dXJuSnVkZ21lbnRTdGF0ZW1lbnRKdWRnbWVudFN0YXRpY0Fzc2lnbm1lbnRKdWRnbWVudHZpc2l0U3RhdGljQXNzaWdubWVudEp1ZGdtZW50U3VwZXJJbml0aWFsaXplckp1ZGdtZW50dmlzaXRTdXBlckluaXRpYWxpemVySnVkZ21lbnRTdXBlck1ldGhvZEludm9jYXRpb25KdWRnbWVudHZpc2l0U3VwZXJNZXRob2RJbnZvY2F0aW9uSnVkZ21lbnRTdXBlclByb3BlcnR5R2V0SnVkZ21lbnR2aXNpdFN1cGVyUHJvcGVydHlHZXRKdWRnbWVudFN3aXRjaENhc2VKdWRnbWVudGV4cHJlc3Npb25KdWRnbWVudHNTd2l0Y2hTdGF0ZW1lbnRKdWRnbWVudGV4cHJlc3Npb25KdWRnbWVudGNhc2VKdWRnbWVudHN2aXNpdFN3aXRjaFN0YXRlbWVudEp1ZGdtZW50U3ltYm9sTGl0ZXJhbEp1ZGdtZW50dmlzaXRTeW1ib2xMaXRlcmFsSnVkZ21lbnRJbnZhbGlkQ29uc3RydWN0b3JJbnZvY2F0aW9uSnVkZ21lbnR2aXNpdEludmFsaWRDb25zdHJ1Y3Rvckludm9jYXRpb25KdWRnbWVudEludmFsaWRXcml0ZUp1ZGdtZW50dmlzaXRJbnZhbGlkV3JpdGVKdWRnbWVudHZpc2l0U3ludGhldGljRXhwcmVzc2lvbkp1ZGdtZW50X3JlcGxhY2VXaXRoRGVzdWdhcmVkZGVzdWdhcmVkTGV0ZGVzdWdhcmVkQ29uZGl0aW9uYWxFeHByZXNzaW9uQ2F0Y2hKdWRnbWVudGV4Y2VwdGlvbkp1ZGdtZW50c3RhY2tUcmFjZUp1ZGdtZW50VHJ5Q2F0Y2hKdWRnbWVudGNhdGNoSnVkZ21lbnRzdmlzaXRUcnlDYXRjaEp1ZGdtZW50VHJ5RmluYWxseUp1ZGdtZW50dmlzaXRUcnlGaW5hbGx5SnVkZ21lbnRjcmVhdGVUb3BMZXZlbFR5cGVJbmZlcnJlclNoYWRvd1R5cGVJbmZlcnJlcnByaXZhdGVlbmdpbmVnZXRGaWVsZEluaXRpYWxpemVydHlwZU5lZWRlZGtlcm5lbEluaXRpYWxpemVyaW5mZXJTdGF0ZW1lbnRUeXBlTGl0ZXJhbEp1ZGdtZW50dmlzaXRUeXBlTGl0ZXJhbEp1ZGdtZW50U2hhZG93VHlwZVByb21vdGVyZ2V0VmFyaWFibGVGdW5jdGlvbk5lc3RpbmdMZXZlbF9mdW5jdGlvbk5lc3RpbmdMZXZlbGlzUHJvbW90aW9uQ2FuZGlkYXRla2VybmVsVmFyaWFibGVEZWNsYXJhdGlvbl9pc0xvY2FsRnVuY3Rpb25zYW1lRXhwcmVzc2lvbnNzZXRWYXJpYWJsZU11dGF0ZWRBbnl3aGVyZV9tdXRhdGVkQW55d2hlcmVzZXRWYXJpYWJsZU11dGF0ZWRJbkNsb3N1cmVfbXV0YXRlZEluQ2xvc3VyZXdhc1ZhcmlhYmxlTXV0YXRlZEFueXdoZXJlVmFyaWFibGVBc3NpZ25tZW50SnVkZ21lbnR2aXNpdFZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50X2ltcGxpY2l0bHlUeXBlZGZvckVmZmVjdGluaXRpYWxpemVySnVkZ21lbnR2aXNpdFZhcmlhYmxlRGVjbGFyYXRpb25KdWRnbWVudGlzSW1wbGljaXRseVR5cGVkVW5yZXNvbHZlZFRhcmdldEludm9jYXRpb25KdWRnbWVudHZpc2l0VW5yZXNvbHZlZFRhcmdldEludm9jYXRpb25KdWRnbWVudFVucmVzb2x2ZWRWYXJpYWJsZUFzc2lnbm1lbnRKdWRnbWVudHZpc2l0VW5yZXNvbHZlZFZhcmlhYmxlQXNzaWdubWVudEp1ZGdtZW50VmFyaWFibGVHZXRKdWRnbWVudF9mYWN0X3Njb3BldmlzaXRWYXJpYWJsZUdldEp1ZGdtZW50V2hpbGVKdWRnbWVudHZpc2l0V2hpbGVKdWRnbWVudFlpZWxkSnVkZ21lbnR2aXNpdFlpZWxkSnVkZ21lbnRMb2FkTGlicmFyeUp1ZGdtZW50dmlzaXRMb2FkTGlicmFyeUp1ZGdtZW50TG9hZExpYnJhcnlUZWFyT2ZmSnVkZ21lbnR2aXNpdExvYWRMaWJyYXJ5VGVhck9mZkp1ZGdtZW50X0NvbXBsZXhBc3NpZ25tZW50SW5mZXJlbmNlUmVzdWx0X1VuZmluaXNoZWRDYXNjYWRld3JhcElsbGVnYWxBc3NpZ25tZW50d3JhcEluZGV4QXNzaWdubWVudHdyYXBQcm9wZXJ0eUFzc2lnbm1lbnR3cmFwU3RhdGljQXNzaWdubWVudHdyYXBWYXJpYWJsZUFzc2lnbm1lbnRJbmZlcmVuY2VWaXNpdG9ybWFwRW50cnlDbGFzc21hcEVudHJ5T2Zmc2V0bWFwU3ByZWFkT2Zmc2V0aXRlcmFibGVTcHJlYWRPZmZzZXRpdGVyYWJsZVNwcmVhZFR5cGVpc0VtcHR5Q29udGV4dHdyYXBGdXR1cmVPclR5cGVzdG9yZUluZmVycmVkVHlwZWJlaW5nSW5mZXJyZWR0b0JlSW5mZXJyZWRpbmZlckluaXRpYWxpemluZ0Zvcm1hbGhhc0V4cGxpY2l0VHlwZUFyZ3VtZW50c2luZmVyZW5jZVJlc3VsdGluZmVySW52b2NhdGlvbmhhZEV4cGxpY2l0VHlwZUFyZ3VtZW50c2luaXRpYWxpemVyVHlwZWhhbmRsZUZvckluRGVjbGFyaW5nVmFyaWFibGV0eXBlQ2hlY2tzTmVlZGVkaW5mZXJGb3JJbkl0ZXJhYmxldGVtcFZhcnZhcmlhYmxlR2V0aW1wbGljaXREb3duY2FzdHdyYXBUeXBlaW5mZXJyZWRFeHByZXNzaW9uVHlwZXJlc29sdmVUeXBlUGFyYW1ldGVyaGFuZGxlRm9ySW5XaXRob3V0VmFyaWFibGVzeW50aGV0aWNXcml0ZVR5cGV3cml0ZU1lbWJlcmdldFNldHRlclR5cGVoYW5kbGVGb3JJblN0YXRlbWVudFdpdGhvdXRWYXJpYWJsZXVwZGF0ZXZpc2l0RnVuY3Rpb25Ob2RlSnVkZ21lbnRyZXR1cm5Db250ZXh0cmV0dXJuVHlwZUluc3RydW1lbnRhdGlvbk9mZnNldGluZmVyTG9jYWxGdW5jdGlvbmluZmVyTWV0YWRhdGFLZWVwaW5nSGVscGVyc2tpcFR5cGVBcmd1bWVudEluZmVyZW5jZWxoc1R5cGVjYWxsZWVUeXBlZXhwZWN0ZWRJbmRleFR5cGVGb3JXcml0ZWluZGV4Q29udGV4dGluZGV4VHlwZXJlYWRNZW1iZXJjYWxsZWVGdW5jdGlvblR5cGVkZXN1Z2FyZWRJbnZvY2F0aW9ucmVwbGFjZWRSZWFkaXNEb3VibGVDb250ZXh0Z2V0U3ByZWFkRWxlbWVudFR5cGVzcHJlYWRUeXBlaW5mZXJFbGVtZW50aW5mZXJyZWRUeXBlQXJndW1lbnRpbmZlcnJlZFNwcmVhZFR5cGVzaW5mZXJlbmNlTmVlZGVkc3ByZWFkRWxlbWVudFR5cGVpc0Fzc2lnbmFibGVjb25kaXRpb25UeXBldGhlblR5cGVvdGhlcndpc2VUeXBlY2hlY2tFbGVtZW50bGlzdFR5cGVmb3JtYWxUeXBlc2FjdHVhbFR5cGVzaW5mZXJHZW5lcmljRnVuY3Rpb25PclR5cGV0eXBlQXJnc3N0b3JlU3ByZWFkTWFwRW50cnlFbGVtZW50VHlwZXNzcHJlYWRNYXBFbnRyeVR5cGVpbmZlck1hcEVudHJ5aW5mZXJyZWRLZXlUeXBlaW5mZXJyZWRWYWx1ZVR5cGVzcHJlYWRDb250ZXh0YWN0dWFsVHlwZXNGb3JTZXRhY3R1YWxLZXlUeXBlYWN0dWFsVmFsdWVUeXBlYWN0dWFsRWxlbWVudFR5cGVrZXlFcnJvcnZhbHVlRXJyb3JlbnRyeVR5cGVpc01hcGlzSXRlcmFibGVhY3R1YWxUeXBlRm9yU2V0bGVuZ3RoRm9yU2V0Y2hlY2tNYXBFbnRyeWNhY2hlZEtleWNhY2hlZFZhbHVlbWFwVHlwZXR5cGVDb250ZXh0SXNNYXB0eXBlQ29udGV4dElzSXRlcmFibGVzZXRMaXRlcmFsY2FjaGVkS2V5c2NhY2hlZFZhbHVlc2hhc01hcEVudHJ5aGFzTWFwU3ByZWFkaGFzSXRlcmFibGVTcHJlYWRzcHJlYWRUeXBlQ29udGV4dGNhbkJlU2V0Y2FuQmVNYXBzZXRFbGVtZW50c2Zvcm1hbFR5cGVzRm9yU2V0c2V0VHlwZWluZmVycmVkVHlwZXNGb3JTZXRpbmZlck1ldGhvZEludm9jYXRpb25yZWNlaXZlclZhcmlhYmxlaW5mZXJQcm9wZXJ0eUdldGRlc3VnYXJlZEdldHZhcmlhYmxlVHlwZWZpbmRQcm9wZXJ0eUdldE1lbWJlcmhhbmRsZVByb3BlcnR5R2V0Q29udHJhdmFyaWFuY2VjbGFzc1R5cGVQYXJhbWV0ZXJzY2xvc3VyZUNvbnRleHRpc0dlbmVyYXRvcnJldHVybk9yWWllbGRDb250ZXh0aGFuZGxlUmV0dXJuaW5zdGFudGlhdGVUZWFyT2ZmaW50ZXJmYWNlTWVtYmVybWV0aG9kTmFtZXByb3BlcnR5TmFtZWV4cHJlc3Npb25UeXBlY2FzZUV4cHJlc3Npb25jYXNlRXhwcmVzc2lvblR5cGV2aXNpdENhdGNoSnVkZ21lbnRjYXRjaF9kZWNsYXJlZFR5cGVpbmZlckRlY2xhcmF0aW9uVHlwZXJlcGxhY2VkSW5pdGlhbGl6ZXJtdXRhdGVkSW5DbG9zdXJlZGVjbGFyZWRPckluZmVycmVkVHlwZWNvbXB1dGVQcm9tb3RlZFR5cGVoYW5kbGVZaWVsZEluZmVycmVkVHlwZVZpc2l0b3JnZXRJbmZlcnJlZFR5cGVyZWFkSW5mZXJyZWRUeXBlaW52YWxpZFRvQm90dG9taW52YWxpZFRvVG9wY29tcHV0ZUNvbnN0cnVjdG9yUmV0dXJuVHlwZWdldEV4cGxpY2l0VHlwZUFyZ3VtZW50c2NoZWNrV2ViSW50TGl0ZXJhbHNFcnJvcklmVW5leGFjdGFzSW50bmVhcmVzdDB4MFhmYXN0YS5idWlsZGVySWRlbnRpZmllcmRlcHJlY2F0ZWRfZXh0cmFjdFRva2VuTW9kaWZpZXJCdWlsZGVyZmFzdGEuc2Nhbm5lci5rZXl3b3Jkc19LRVlXT1JEX1NUQVRFS0VZV09SRF9TVEFURWNvbXB1dGVLZXl3b3JkU3RhdGVUYWJsZWlzTG93ZXJjYXNlY2h1bmtjaHVua1N0YXJ0aXNMZWFmQXJyYXlLZXl3b3JkU3RhdGVmb287IExvd2VyQ2FzZUFycmF5S2V5d29yZFN0YXRlVXBwZXJDYXNlQXJyYXlLZXl3b3JkU3RhdGVMZWFmS2V5d29yZFN0YXRlZmFzdGEuY29uc3RhbnRfY29udGV4dGZhc3RhLm1vZGlmaWVyTW9kaWZpZXJFbnVtTW9kaWZpZXJFbnVtLkFic3RyYWN0TW9kaWZpZXJFbnVtLkNvbnN0TW9kaWZpZXJFbnVtLkNvdmFyaWFudE1vZGlmaWVyRW51bS5FeHRlcm5hbE1vZGlmaWVyRW51bS5GaW5hbE1vZGlmaWVyRW51bS5TdGF0aWNNb2RpZmllckVudW0uVmFyQWJzdHJhY3RDb25zdENvdmFyaWFudEV4dGVybmFsRmluYWxTdGF0aWNWYXJtYXNrTW9kaWZpZXIuZnJvbVN0cmluZ21vZGlmaWVyKE1vZGlmaWVyRW51bS52YWxpZGF0ZVZhckZpbmFsT3JDb25zdE1vZGlmaWVyLnZhbGlkYXRlVmFyRmluYWxPckNvbnN0ZXh0ZW5zaW9uRGVjbGFyYXRpb25NYXNrdmFyTWFza2Zyb250X2VuZC5zcmMuZmFzdGEubmFtZXNhbXBlcnNhbmROYW1lYmFyTmFtZWNhcmV0TmFtZWRpdmlzaW9uTmFtZWRvdWJsZUFtcGVyc2FuZE5hbWVkb3VibGVCYXJOYW1lZG91YmxlUXVlc3Rpb25OYW1lZXF1YWxzTmFtZWdyZWF0ZXJUaGFuTmFtZWdyZWF0ZXJUaGFuT3JFcXVhbHNOYW1laWRlbnRpY2FsTmFtZWxlZnRTaGlmdE5hbWVsZW5ndGhOYW1lbGVzc1RoYW5OYW1lbGVzc1RoYW5PckVxdWFsc05hbWVtdWx0aXBseU5hbWVtdXN0YWNoZU5hbWVuZWdhdGlvbk5hbWVub1N1Y2hNZXRob2ROYW1lcGVyY2VudE5hbWVyaWdodFNoaWZ0TmFtZXRyaXBsZVNoaWZ0TmFtZXRpbGRlTmFtZXVuYXJ5TWludXNOYW1lZmFzdGEucGFyc2VyTGlzdGVuZXJQYXJzZXJFcnJvckNsYXNzS2luZFRvcExldmVsUGFyc2VyRXJyb3JDb2xsZWN0aW5nTGlzdGVuZXJyZWNvdmVyYWJsZUVycm9yc2Zhc3RhLnF1b3RlUXVvdGUuU2luZ2xlUXVvdGUuRG91YmxlUXVvdGUuTXVsdGlMaW5lU2luZ2xlUXVvdGUuTXVsdGlMaW5lRG91YmxlUXVvdGUuUmF3U2luZ2xlUXVvdGUuUmF3RG91YmxlUXVvdGUuUmF3TXVsdGlMaW5lU2luZ2xlUXVvdGUuUmF3TXVsdGlMaW5lRG91YmxlU2luZ2xlRG91YmxlTXVsdGlMaW5lU2luZ2xlTXVsdGlMaW5lRG91YmxlUmF3U2luZ2xlUmF3RG91YmxlUmF3TXVsdGlMaW5lU2luZ2xlUmF3TXVsdGlMaW5lRG91YmxlVW5lc2NhcGVFcnJvckxpc3RlbmVyaGFuZGxlVW5lc2NhcGVFcnJvcmxlbmd0aE9mT3B0aW9uYWxXaGl0ZXNwYWNlUHJlZml4Zmlyc3RRdW90ZUxlbmd0aGxhc3RRdW90ZUxlbmd0aGlzTGFzdFF1b3RlU3ludGhldGljdW5lc2NhcGVDb2RlVW5pdHNyZXN1bHRPZmZzZXRkaWdpdGZhc3RhLnNjb3BlX2xpc3RlbmVyU3RhY2tMaXN0ZW5lckJyZWFrQ29udGludWVHb3RvSmNyZWF0ZUJyZWFrVGFyZ2V0Y3JlYXRlQ29udGludWVUYXJnZXROdWxsVmFsdWUuQnJlYWtUYXJnZXROdWxsVmFsdWUuQ29udGludWVUYXJnZXRiZWdpbkJsb2NrRnVuY3Rpb25Cb2R5YmxvY2sgZnVuY3Rpb24gYm9keWJlZ2luRm9yU3RhdGVtZW50Zm9yIHN0YXRtZW50YmVnaW5Gb3JDb250cm9sRmxvd2ZvciBpbiBhIGNvbGxlY3Rpb25iZWdpbkJsb2NrYmVnaW5Eb1doaWxlU3RhdGVtZW50YmVnaW5XaGlsZVN0YXRlbWVudGJlZ2luRG9XaGlsZVN0YXRlbWVudEJvZHlkby13aGlsZSBzdGF0ZW1lbnQgYm9keWVuZERvV2hpbGVTdGF0ZW1lbnRCb2R5YmVnaW5XaGlsZVN0YXRlbWVudEJvZHl3aGlsZSBzdGF0ZW1lbnQgYm9keWVuZFdoaWxlU3RhdGVtZW50Qm9keWJlZ2luRm9yU3RhdGVtZW50Qm9keWZvciBzdGF0ZW1lbnQgYm9keWVuZEZvclN0YXRlbWVudEJvZHliZWdpbkZvckluQm9keWZvci1pbiBib2R5ZW5kRm9ySW5Cb2R5YmVnaW5FbHNlU3RhdGVtZW50ZW5kRWxzZVN0YXRlbWVudFZhbHVlS2luZEFyZ3VtZW50c09yTnVsbEludGVnZXJGb3JtYWxzRm9ybWFsc09yTnVsbE51bGxWYWx1ZS5Gb3JtYWxQYXJhbWV0ZXJzTWV0aG9kQm9keU1vZGlmaWVyc01vZGlmaWVyc09yTnVsbE51bGxWYWx1ZS5Nb2RpZmllcnNOYW1lT3JOdWxsTnVsbFZhbHVlLk5hbWVOYW1lT3JPcGVyYXRvck5hbWVPclF1YWxpZmllZE5hbWVPck9wZXJhdG9yTmFtZU9yUGFyc2VyUmVjb3ZlcnlNZXRhZGF0YUxpc3RPck51bGxUb2tlbk9yTnVsbE51bGxWYWx1ZS5Ub2tlblR5cGVBcmd1bWVudHNPck51bGxUeXBlQnVpbGRlck9yTnVsbFR5cGVWYXJpYWJsZUxpc3RPck51bGxfU2luZ2xlVmFsdWVLaW5kbnVsbFZhbHVlIG9yIF9VbmlvblZhbHVlS2luZGtpbmRzb3JyZXBlYXRlZEtpbmRzdW5pb25PZktpbmRzaGFzQW55VHlwZVZhcmlhYmxlc1R5cGVDb25zdHJhaW50R2F0aGVyZXJnZXROYW1lZFBhcmFtZXRlclR5cGVUeXBlVmFyaWFibGVFbGltaW5hdG9yQ2xvc3VyZUNvbnRleHRkZWNsYXJlZFJldHVyblR5cGVfbmVlZFRvSW5mZXJSZXR1cm5UeXBlX2luZmVycmVkVW53cmFwcGVkUmV0dXJuT3JZaWVsZFR5cGVpc0Fycm93cmV0dXJuU3RhdGVtZW50c3JldHVybkV4cHJlc3Npb25UeXBlc25lZWRUb0luZmVyUmV0dXJuVHlwZWdldFR5cGVBcmd1bWVudE9mY2hlY2tWYWxpZFJldHVybmZsYXR0ZW5lZFJldHVyblR5cGVmbGF0dGVuZWRFeHByZXNzaW9uVHlwZWlzUmV0dXJuRnJvbUFzeW5jdW53cmFwcGVkVHlwZV93cmFwQXN5bmNPckdlbmVyYXRvcmdldERlcml2ZWRUeXBlQXJndW1lbnRPZmluZmVyUmV0dXJuVHlwZXdyYXBGdXR1cmVUeXBlTWV0aG9kQ29udHJhdmFyaWFuY2VDaGVja0tpbmRNZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZC5ub25lTWV0aG9kQ29udHJhdmFyaWFuY2VDaGVja0tpbmQuY2hlY2tNZXRob2RSZXR1cm5NZXRob2RDb250cmF2YXJpYW5jZUNoZWNrS2luZC5jaGVja0dldHRlclJldHVybmNoZWNrTWV0aG9kUmV0dXJuY2hlY2tHZXR0ZXJSZXR1cm51bmtub3duRnVuY3Rpb25pbmZlcnJlZFR5cGVzTWFwbGFzdEluZmVycmVkU3Vic3RpdHV0aW9ubGFzdENhbGxlZVR5cGVhY3R1YWxUeXBlaW5pdGlhbEV4cGVjdGVkVHlwZXVuZnV0dXJlZEV4cGVjdGVkVHlwZWZ1dHVyZWRFeHBlY3RlZFR5cGVjYWxsTWVtYmVyX3Nob3VsZFRlYXJPZmZDYWxsbnVsbENoZWNrdGVhck9mZmNvbmRpdGlvbmFsZXJyb3JOb2RlX2dldFByZWNpc2VUeXBlRXJyb3JUZW1wbGF0ZXR5cGVDaGVja2lzTnVsbGZpbmRJbnRlcmZhY2VNZW1iZXJlcnJvclRlbXBsYXRlX2dldEludGVyZmFjZU1lbWJlcm1ldGhvZEludm9jYXRpb25zaWduYXR1cmVwcm9wZXJ0eUdldHByb3BlcnR5U2V0Zm9sbG93Q2FsbGNhbGxUeXBlbWVtYmVyQ2xhc3N0eXBlQXNJbnN0YW5jZU9mQ2xhc3NnZXRSZWFsVGFyZ2V0c2V0dGVyUGFyYW1ldGVyc2V4cHJlc3Npb25Ub1JlcGxhY2VjaGVja1JldHVybnJlcGxhY2VkRXhwcmVzc2lvbmNhbGxlZVR5cGVQYXJhbWV0ZXJzZXhwbGljaXRUeXBlQXJndW1lbnRzX2ZvckVhY2hBcmd1bWVudGluZmVycmVkRm9ybWFsVHlwZXNlZW5OYW1lc25hbWVkVHlwZUluZGV4dW5pcXVlTmFtZWRwcmV2TmFtZWRFeHByZXNzaW9ubnVtUG9zaXRpb25hbEFyZ3Nmb3JtYWxUeXBlc0Zyb21Db250ZXh0bmVlZFRvU2V0UmV0dXJuVHlwZW9sZENsb3N1cmVDb250ZXh0aW5mZXJyZWRSZXR1cm5UeXBlcGFyZW50c2FjdHVhbFJlY2VpdmVyVHlwZWFjdHVhbE1ldGhvZE5hbWV0ZWFyb2ZmVHlwZWluc3RhbnRpYXRlZFR5cGVyZXR1cm5lZFR5cGVQYXJhbWV0ZXJzT2NjdXJOb25Db3ZhcmlhbnRseWNoZWNrZXJpbml0aWFsVmFyaWFuY2VWYXJpYW5jZS5jb3ZhcmlhbnRyZXNvbHZlT25lU3RlcHJlc29sdmVkc3RlcDFzdGVwMnR5cGVXaXRob3V0RnV0dXJlT3JuYW1lZEV4cHJlc3Npb25nZXRDb21iaW5lZE1lbWJlclNpZ25hdHVyZUtlcm5lbGdhdGhlcmVycmVwb3J0UHJvYmxlbWdlbmVyYXRlQ29uc3RyYWludHNtaXhpbkNsYXNzYmFzZVR5cGVtaXhpblN1cGVydHlwZW1peGluU3VwZXJjbGFzc0NvbXBpbGVyLWdlbmVyYXRlZCBtaXhpbiBhcHBsaWNhdGlvbnMgaGF2ZSBhIG1peGluIG9yIGVsc2UgaW1wbGVtZW50IGV4YWN0bHkgb25lIHR5cGUgaW1wbGVtZW50cyBzMHMxdTB0cnlTdWJ0eXBlTWF0Y2hjb21wdXRlQ29uc3RyYWludHNjb25zdHJhaW50ZXhhY3Rib3VuZHNnZXROYW1lZEZvcm1hbGdldFBvc2l0aW9uYWxGb3JtYWxpc092ZXJsb2FkYWJsZUFyaXRobWV0aWNPcGVyYXRvcmRpc2FibGVkbXV0YXRlVmFyaWFibGVUeXBlUHJvbW90ZXJEaXNhYmxlZF9udWxsRmFjdHNfZmFjdENhY2hlX2ZhY3RDYWNoZVN0YXRlX2N1cnJlbnRGYWN0c19wcm9tb3Rpb25FeHByZXNzaW9uX3RydWVGYWN0c0ZvclByb21vdGlvbkV4cHJlc3Npb25fY3VycmVudFNjb3BlX2xhc3RGYWN0U2VxdWVuY2VOdW1iZXJfY29tcHV0ZVByb21vdGVkVHlwZWFmdGVyVHJ1ZWJlZm9yZUVsc2V0cnVlRmFjdHNfZmFjdHNXaGVuVHJ1ZWZhbHNlRmFjdHNfZmFjdHNXaGVuRmFsc2Vpc0FuZF9lbmNsb3NpbmdfbWVyZ2VGYWN0c19yZWNvcmRQcm9tb3Rpb25FeHByZXNzaW9uc2hvcnRjdXRGYWN0c19jb21wdXRlQ3VycmVudEZhY3RNYXBpc0NoZWNrY29tbW9uQW5jZXN0b3JzZXF1ZW5jZU51bWJlcnByZXZpb3VzRm9yVmFyaWFibGVuZXdTdGF0ZWN1cnJlbnRseUNhY2hlZF9wcmludEV2ZW50ZmFjdENoYWluKG51bGwpIC0+ICAgX3Byb21vdGlvbkV4cHJlc3Npb246ICAgICBpZiB0cnVlOiBpZlRydWVpZkZhbHNlX211dGF0ZWRJblNjb3Blc19hY2Nlc3NlZEluQ2xvc3VyZUluU2NvcGVzcHJvbW90ZXJfcmVjb3JkQWNjZXNzZWRJblNjb3BlX3JlY29yZE11dGF0ZWRJblNjb3BlX2RlcHRoX3RvcExldmVsY29udGFpbnNTY29wZV9Db25kaXRpb25hbFNjb3BlZW5jbG9zaW5nX0lzQ2hlY2tjaGVja2VkVHlwZWlzQ2hlY2socHJldmlvdXNQcm9tb3RlZFR5cGVhc3NpZ25tZW50U2NvcGVhY2Nlc3NTY29wZXByZXZpb3VzVHlwZV9Mb2dpY2FsU2NvcGVfTnVsbEZhY3RUcmllZCB0byBjcmVhdGUgcHJvbW90ZWQgdHlwZSBmb3Igbm8gdmFyaWFibGVfVG9wTGV2ZWxTY29wZWZhc3RhLmNvbGxlY3Rpb25zQ29udHJvbEZsb3dFbGVtZW50X1NwcmVhZEVsZW1lbnQmRXhwcmVzc2lvbiZDb250cm9sRmxvd0VsZW1lbnRfSWZFbGVtZW50JkV4cHJlc3Npb24mQ29udHJvbEZsb3dFbGVtZW50X0ZvckVsZW1lbnQmRXhwcmVzc2lvbiZDb250cm9sRmxvd0VsZW1lbnRfRm9ySW5FbGVtZW50JkV4cHJlc3Npb24mQ29udHJvbEZsb3dFbGVtZW50Q29udHJvbEZsb3dNYXBFbnRyeS5rZXkgZ2V0dGVyZXhwckNvbnRyb2xGbG93TWFwRW50cnkua2V5IHNldHRlckNvbnRyb2xGbG93TWFwRW50cnkudmFsdWUgZ2V0dGVyQ29udHJvbEZsb3dNYXBFbnRyeS52YWx1ZSBzZXR0ZXJfU3ByZWFkTWFwRW50cnkmVHJlZU5vZGUmQ29udHJvbEZsb3dNYXBFbnRyeV9JZk1hcEVudHJ5JlRyZWVOb2RlJkNvbnRyb2xGbG93TWFwRW50cnlfRm9yTWFwRW50cnkmVHJlZU5vZGUmQ29udHJvbEZsb3dNYXBFbnRyeV9Gb3JJbk1hcEVudHJ5JlRyZWVOb2RlJkNvbnRyb2xGbG93TWFwRW50cnlmYXN0YS5jb25zdG5lc3NleHBsaWNpdENvbnN0ZXhwbGljaXROZXdpbXBsaWNpdGZhc3RhLmV4cHJlc3Npb25fZ2VuZXJhdG9ycHJpbnROb2RlT25wcmludFF1YWxpZmllZE5hbWVPbl9oZWxwZXJfZm9yZXN0X3BsYWluTmFtZUZvclJlYWRfZGVidWdOYW1lX3VyaV9maW5pc2hfbWFrZVNpbXBsZVJlYWRfbWFrZVJlYWRjb21wbGV4QXNzaWdubWVudHN0YXJ0Q29tcGxleEFzc2lnbm1lbnRfbWFrZVNpbXBsZVdyaXRlX21ha2VXcml0ZWJ1aWxkTnVsbEF3YXJlQXNzaWdubWVudGJ1aWxkQ29tcG91bmRBc3NpZ25tZW50YmluYXJ5T3BlcmF0b3JidWlsZFBvc3RmaXhJbmNyZW1lbnR2YWx1ZUFjY2Vzc2R1bW15X21ha2VJbnZhbGlkUmVhZF9tYWtlSW52YWxpZFdyaXRlb3BlcmF0b3JPZmZzZXQob2Zmc2V0OiAsIHZhcmlhYmxlOiAsIHByb21vdGVkVHlwZTogX3JlY2VpdmVyVmFyaWFibGVyZWNlaXZlckFjY2VzcywgX3JlY2VpdmVyVmFyaWFibGU6ICwgcmVjZWl2ZXI6ICwgbmFtZTogLCBnZXR0ZXI6ICwgc2V0dGVyOiBtYWtlTnVsbEF3YXJlUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3JyZWNlaXZlckV4cHJlc3Npb25rZXJuZWxQcm9wZXJ0eUFzc2lnbiwgcmVjZWl2ZXJFeHByZXNzaW9uOiAsIHR5cGU6IFN1cGVyUHJvcGVydHlBY2Nlc3NHZW5lcmF0b3JpbmRleFZhcmlhYmxlaW5kZXhBY2Nlc3NfbWFrZVdyaXRlQW5kUmV0dXJudmFsdWVWYXJpYWJsZSwgaW5kZXg6ICwgcmVjZWl2ZXJWYXJpYWJsZTogLCBpbmRleFZhcmlhYmxlOiBUaGlzSW5kZXhlZEFjY2Vzc0dlbmVyYXRvcndyaXRlVGFyZ2V0ZnJvbUJ1aWxkZXJidWlsZGVyU2V0dGVyU3RhdGljQWNjZXNzR2VuZXJhdG9yLmZyb21CdWlsZGVyLCByZWFkVGFyZ2V0OiAsIHdyaXRlVGFyZ2V0OiBsb2FkTGlicmFyeWltcG9ydERlcGVuZGVuY3ljcmVhdGVUZWFyb2ZmTWV0aG9kY3JlYXRlTG9hZExpYnJhcnksIGJ1aWxkZXI6IERlZmVycmVkQWNjZXNzR2VuZXJhdG9ycHJlZml4R2VuZXJhdG9yc3VmZml4R2VuZXJhdG9ycHJvcGVydHlBY2Nlc3NkZWZlcnJlZEFjY2Vzc29yLnBsYWluTmFtZUZvclJlYWQsIHByZWZpeEdlbmVyYXRvcjogLCBzdWZmaXhHZW5lcmF0b3I6IHBsYWluTmFtZUZvclJlYWR0eXBlVmFyaWFibGVzQ291bnRhcmd1bWVudEJ1aWxkZXJzLCBkZWNsYXJhdGlvbjogLCBwbGFpbk5hbWVGb3JSZWFkOiBsaXRlcmFsVHlwZSwgZXhwcmVzc2lvbjogLCB2YWx1ZTogRXJyb25lb3VzRXhwcmVzc2lvbkdlbmVyYXRvcmJ1aWxkRXJyb3JfYnVpbGRVbnJlc29sdmVkVmFyaWFibGVBc3NpZ25tZW50Q29udGV4dEF3YXJlR2VuZXJhdG9ybWFrZUludmFsaWRSZWFkaGFuZGxlQXNzaWdubWVudCwgYXNzaWdubWVudE9wZXJhdG9yOiAsIGJpbmFyeU9wZXJhdG9yOiAsIGludGVyZmFjZVRhcmdldDogJyAhPSAsIHByZWZpeDogLCBkZWZlcnJlZDogVW5leHBlY3RlZFF1YWxpZmllZFVzZUdlbmVyYXRvciNwYXJzZXItZXJyb3Jpc0luaXRpYWxpemVyLnBsYWluTmFtZUZvclJlYWRidWlsZEZpZWxkSW5pdGlhbGl6ZXJFcnJvcmJ1aWxkQ29uc3RydWN0b3JJbml0aWFsaXplcmJ1aWxkQXNzaWdubWVudEVycm9yLCBpc0luaXRpYWxpemVyOiAsIGluRmllbGRJbml0aWFsaXplcjogLCBpc1N1cGVyOiBfSW5jb21wbGV0ZUVycm9yR2VuZXJhdG9yJkVycm9uZW91c0V4cHJlc3Npb25HZW5lcmF0b3ImSW5jb21wbGV0ZVNlbmRHZW5lcmF0b3IsIG1lc3NhZ2U6IF9TZW5kQWNjZXNzR2VuZXJhdG9yJkdlbmVyYXRvciZJbmNvbXBsZXRlU2VuZEdlbmVyYXRvciwgYXJndW1lbnRzOiBfSW5jb21wbGV0ZVByb3BlcnR5QWNjZXNzR2VuZXJhdG9yJkdlbmVyYXRvciZJbmNvbXBsZXRlU2VuZEdlbmVyYXRvcm1ha2VCaW5hcnltYWtlT3JSZXVzZVZhcmlhYmxlYWRqdXN0Rm9ySW1wbGljaXRDYWxsaXNGaWVsZE9yR2V0dGVyZmFzdGEuZXhwcmVzc2lvbl9nZW5lcmF0b3JfaGVscGVyZmFzdGEuZmFuZ29ybmNvbmRpdGlvbkJvdW5kYXJ5Y29uZGl0aW9uTGFzdFRva2VubmV4dFRva2VuZGVjbGFyYXRpb25zZXhjZXB0aW9uUGFyYW1ldGVyc3RhY2tUcmFjZVBhcmFtZXRlcnN0YWNrVHJhY2VUeXBldXBkYXRlcnNyaWdodFBhcmVudGhlc2lzaWZLZXl3b3JkdGhlblN0YXRlbWVudGVsc2VLZXl3b3JkZWxzZVN0YXRlbWVudG5vdE9wZXJhdG9ybGFiZWxlZFN0YXRlbWVudGxlZnRPcGVyYW5kcmlnaHRPcGVyYW5kcmV0aHJvd0tleXdvcmRyZXR1cm5LZXl3b3JkdGhyb3dLZXl3b3Jkb2NhdGNoQ2xhdXNlc3lpZWxkS2V5d29yZHN0YXJzeW50aF9WYXJpYWJsZXNEZWNsYXJhdGlvbmZhc3RhLmZvcmVzdGZhc3RhLmltcGxpY2l0X3R5cGVfYXJndW1lbnRHcmFwaGNvbXB1dGVTdHJvbmdDb21wb25lbnRzVHlwZVZhcmlhYmxlc0dyYXBoZWRnZXN2YXJpYWJsZUluZGljZXNjb2xsZWN0UmVmZXJlbmNlc0Zyb21UeXBlVmFyaWFibGVTZWFyY2hhbnlUeXBlVmFyaWFibGVzc3Vic3RpdHV0ZVJhbmdldXBwZXJTdWJzdGl0dXRpb25sb3dlclN1YnN0aXR1dGlvbnN1YnN0aXR1dGVkQXJndW1lbnRjaGFuZ2Vkc3Ryb25nbHlDb25uZWN0ZWRkeW5hbWljU3Vic3RpdHV0aW9ubnVsbFN1YnN0aXR1dGlvbnZhcmlhYmxlSW5kZXhmaW5kVmFyaWFibGVVc2VzSW5UeXBldXNlc2RlcGVuZGVudFZhcmlhYmxlZmluZEluYm91bmRSZWZlcmVuY2VzdmFyaWFibGVzQW5kRGVwZW5kZW5jaWVzZGVwZW5kZW50ZGVwZW5kZW5jZWZpbmRSYXdUeXBlc1dpdGhJbmJvdW5kUmVmZXJlbmNlc3R5cGVzQW5kRGVwZW5kZW5jaWVzaGFzSW5ib3VuZGdldEluYm91bmRSZWZlcmVuY2VJc3N1ZXNyYXdUeXBlc0FuZE11dHVhbERlcGVuZGVuY2llc2ZpbmRSYXdUeXBlUGF0aHNUb0RlY2xhcmF0aW9udmlzaXRlZGRlcGVuZGVuY3lQYXRoZmluZFJhd1R5cGVDeWNsZXNjeWNsZXNjb252ZXJ0UmF3VHlwZUN5Y2xlc0ludG9Jc3N1ZXNjeWNsZWZpcnN0RW5jb3VudGVyZWRUeXBlY3ljbGVzVG9SZXBvcnRkZWNsYXJhdGlvblBhdGhBbmROYW1lbGV4TWluUGF0aEFuZE5hbWVwYXRoQW5kTmFtZXJhd1R5cGVDeWNsZXNBc0lzc3Vlc2JyZWFrQ3ljbGVzZmFzdGEua2VybmVsX2FwaWluc3RhbnRpYXRlVG9Cb3VuZHNmYXN0YS5rZXJuZWxfYXN0X2FwaWZyb250X2VuZC5tZW1vcnlfZmlsZV9zeXN0ZW1fZmlsZXNfZGlyZWN0b3JpZXMtIF9hZGRUcmFpbGluZ1NsYXNoTWVtb3J5RmlsZVN5c3RlbUVudGl0eWNyZWF0ZURpcmVjdG9yeUVudHJ5ICBpcyBhIGZpbGUuRmlsZSAgZG9lcyBub3QgZXhpc3Qud3JpdGVBc0J5dGVzU3luY191cGRhdGUgaXMgYSBkaXJlY3RvcnkuZmFzdGEuYnVpbGRlcl9ncmFwaExpYnJhcnkgbm90IGZvdW5kOiBmYXN0YS5jb21iaW5hdG9yRGlyZWN0b3J5R1ppcENvZGVjZ1ppcENvZGVjZ3ppcHBlZEluaXRpYWxpemVkRnJvbURhdGF0ZW1wRGlyY3JlYXRlVGVtcFN5bmMuZ3pmcm9udF9lbmQuc3JjLmh5YnJpZF9maWxlX3N5c3RlbXBoeXNpY2FsX3BoeXNpY2FsSHlicmlkRmlsZVN5c3RlbUVudGl0eV9kZWxlZ2F0ZV9mc2RlbGVnYXRlZmFzdGEubGlicmFyeV9ncmFwaHVyaTFjb21waWxlci5udWxsX2FwaU51bGxCaW5hcnlTaW5rTnVsbEJpbmFyeVNpbmsoZGFydDJqcy5kaWFnbm9zdGljX2xpc3RlbmVycmVwb3J0RXJyb3JNZXNzYWdlcmVwb3J0SGludE1lc3NhZ2VkYXJ0MmpzLmRpYWdub3N0aWNzLmludmFyaWFudERFQlVHX01PREVEZWJ1ZyBtb2RlIGlzIG5vdCBlbmFibGVkOiBTcGFubmFibGUgd2FzIG51bGwgZm9yIGZhaWxlZEF0LiBVc2UgQ1VSUkVOVF9FTEVNRU5UX1NQQU5OQUJMRS5kYXJ0MmpzLmRpYWdub3N0aWNzLnNvdXJjZV9zcGFuU291cmNlU3BhbihkYXJ0MmpzLmRpYWdub3N0aWNzLnNwYW5uYWJsZV9TcGFubmFibGVTZW50aW5lbEFzc2VydGlvbiBmYWlsdXJlZGFydDJqcy5oZWxwZXJzRGVidWdQcmludERlYnVnV3JhcFByaW50UmVwb3J0SGVyZWRlYnVnTWVzc2FnZV9EZWJ1Z0luZGVudGF0aW9uREVCVUdfUFJJTlRfRU5BQkxFRF9pbmRlbnRhdGlvbl90cmFja2VkT2JqZWN0c3RyYWNrV2l0aFRyYWNlZW5hYmxlRGVidWdNb2RlZGVidWdQcmludF9kZWJ1Z1ByaW50ZGVidWdXcmFwUHJpbnRfZGVidWdXcmFwUHJpbnRzdGFydDplbmQ6ZGVidWdCcmVha3JlcG9ydEhlcmVfcmVwb3J0SGVyZUhFUkU6IHRyYWNrZG9UcmFja3ByaW50VHJhY2V0cmFjazogbGltaXR0aHJvd09uUHJpbnRpZlRyYWNrZWR0cmFja2VkOiBkYXJ0MmpzLmJhY2tlbmRfc3RyYXRlZ3lCYWNrZW5kU3RyYXRlZ3llbWl0dGVyVGFza291dHB1dFVuaXREYXRhY29kZWdlbmNyZWF0ZVNzYUJ1aWxkZXJzb3VyY2VJbmZvcm1hdGlvblN0cmF0ZWd5Y3JlYXRlVHlwZXNJbmZlcnJlcmZvckVhY2hDb2RlZ2VuTWVtYmVycHJlcGFyZUNvZGVnZW5SZWFkZXJkYXJ0MmpzLmNvbW1vbi5jb2RlZ2VuRW1pdHRlckNvbnN0YW50VXNlRHluYW1pY1VzZVN0YXRpY1VzZVR5cGVVc2VXb3JsZEltcGFjdFZpc2l0b3JDb2RlZ2VuSW1wYWN0cmVhZEZyb21EYXRhU291cmNld3JpdGVUb0RhdGFTaW5rQ29kZWdlbkltcGFjdC53cml0ZVRvRGF0YVNpbmt0eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzY29uc3RTeW1ib2xzc3BlY2lhbGl6ZWRHZXRJbnRlcmNlcHRvcnN1c2VzSW50ZXJjZXB0b3Jhc3luY01hcmtlcnNnZW5lcmljSW5zdGFudGlhdGlvbnNuYXRpdmVCZWhhdmlvcnNvbmVTaG90SW50ZXJjZXB0b3JzX0NvZGVnZW5JbXBhY3Rjb2RlZ2VuLWltcGFjdF90eXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tzX2NvbnN0U3ltYm9sc19zcGVjaWFsaXplZEdldEludGVyY2VwdG9yc191c2VzSW50ZXJjZXB0b3JfYXN5bmNNYXJrZXJzX2dlbmVyaWNJbnN0YW50aWF0aW9uc19uYXRpdmVCZWhhdmlvcnNfbmF0aXZlTWV0aG9kc19vbmVTaG90SW50ZXJjZXB0b3JzZHluYW1pY1VzZXNzdGF0aWNVc2VzdHlwZVVzZXNjb25zdGFudFVzZXNyZWFkTGlzdGVtcHR5QXNOdWxscmVhZFN0cmluZ3NyZWFkQ2xhc3Nlc3JlYWRCb29sYXN5bmNNYXJrZXJzVmFsdWVyZWFkSW50T3JOdWxscmVhZE1lbWJlcnN1c2V3cml0ZVN0cmluZ3N3cml0ZUNsYXNzZXN3cml0ZUJvb2x3cml0ZUludE9yTnVsbGluc3RhbnRpYXRpb25iZWhhdmlvcndyaXRlTWVtYmVyc2FwcGx5dmlzaXRTdGF0aWNVc2V2aXNpdER5bmFtaWNVc2V2aXNpdFR5cGVVc2V2aXNpdENvbnN0YW50VXNlcmVnaXN0ZXJUeXBlVmFyaWFibGVCb3VuZHNTdWJ0eXBlQ2hlY2tyZWdpc3RlckNvbnN0U3ltYm9scmVnaXN0ZXJTcGVjaWFsaXplZEdldEludGVyY2VwdG9ycmVnaXN0ZXJVc2VJbnRlcmNlcHRvcnJlZ2lzdGVyQXN5bmNNYXJrZXJyZWdpc3RlckdlbmVyaWNJbnN0YW50aWF0aW9ucmVnaXN0ZXJOYXRpdmVCZWhhdmlvcm5hdGl2ZUJlaGF2aW9ycmVnaXN0ZXJOYXRpdmVNZXRob2RyZWdpc3Rlck9uZVNob3RJbnRlcmNlcHRvckNvZGVnZW5JbXBhY3Q6dGl0bGUKIAogIAogdXNlc0ludGVyY2VwdG9yOiB0cnVlQ29kZWdlblJlZ2lzdHJ5X2VsZW1lbnRFbnZpcm9ubWVudF93b3JsZEltcGFjdF9leHByZXNzaW9uc0NvZGVnZW5SZWdpc3RyeSBmb3IgcmVnaXN0ZXJJbnN0YW50aWF0ZWRDbGFzc3JlZ2lzdGVySW5zdGFudGlhdGlvbmdldFJhd1R5cGVyZWdpc3RlclN0YXRpY1VzZXN0YXRpY1VzZXJlZ2lzdGVyRHluYW1pY1VzZWR5bmFtaWNVc2VyZWdpc3RlclR5cGVVc2V0eXBlVXNlcmVnaXN0ZXJDb25zdGFudFVzZWNvbnN0YW50VXNlcmVnaXN0ZXJJbnN0YW50aWF0ZWRDbG9zdXJlcmVnaXN0ZXJNb2R1bGFyTmFtZXJlZ2lzdGVyTW9kdWxhckV4cHJlc3Npb25Db2RlZ2VuUmVzdWx0c2dldENvZGVnZW5SZXN1bHRzT25EZW1hbmRDb2RlZ2VuUmVzdWx0c19mdW5jdGlvbkNvbXBpbGVyRGVzZXJpYWxpemVkQ29kZWdlblJlc3VsdHNObyBjb2RlZ2VuIHJlc3VsdHMgZnJvbSBDb2RlZ2VuUmVzdWx0Y29kZWdlbi1yZXN1bHRpbXBhY3Rtb2R1bGFyTmFtZXNtb2R1bGFyRXhwcmVzc2lvbnNyZWFkSnNOb2RlT3JOdWxsd3JpdGVKc05vZGVPck51bGxhcHBseU1vZHVsYXJTdGF0ZW5hbWVyZW1pdHRlck1vZHVsYXJOYW1lS2luZC5ydGlGaWVsZHJ0aUZpZWxkSnNOYW1lTW9kdWxhck5hbWVLaW5kLnJ1bnRpbWVUeXBlTmFtZXJ1bnRpbWVUeXBlTmFtZU1vZHVsYXJOYW1lS2luZC5jbGFzc05hbWVNb2R1bGFyTmFtZUtpbmQuYWxpYXNlZFN1cGVyTWVtYmVyYWxpYXNlZFN1cGVyTWVtYmVyUHJvcGVydHlOYW1lTW9kdWxhck5hbWVLaW5kLnN0YXRpY0Nsb3N1cmVzdGF0aWNDbG9zdXJlTmFtZU1vZHVsYXJOYW1lS2luZC5tZXRob2RQcm9wZXJ0eW1ldGhvZFByb3BlcnR5TmFtZU1vZHVsYXJOYW1lS2luZC5vcGVyYXRvcklzb3BlcmF0b3JJc01vZHVsYXJOYW1lS2luZC5vcGVyYXRvcklzVHlwZW9wZXJhdG9ySXNUeXBlTW9kdWxhck5hbWVLaW5kLnN1YnN0aXR1dGlvbnN1YnN0aXR1dGlvbk5hbWVNb2R1bGFyTmFtZUtpbmQuaW5zdGFuY2VNZXRob2RpbnN0YW5jZU1ldGhvZE5hbWVNb2R1bGFyTmFtZUtpbmQuaW5zdGFuY2VGaWVsZGluc3RhbmNlRmllbGRQcm9wZXJ0eU5hbWVNb2R1bGFyTmFtZUtpbmQuaW52b2NhdGlvbmludm9jYXRpb25OYW1lTW9kdWxhck5hbWVLaW5kLmxhenlJbml0aWFsaXplcmxhenlJbml0aWFsaXplck5hbWVNb2R1bGFyTmFtZUtpbmQuZ2xvYmFsUHJvcGVydHlOYW1lRm9yQ2xhc3NnbG9iYWxQcm9wZXJ0eU5hbWVGb3JDbGFzc01vZHVsYXJOYW1lS2luZC5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JUeXBlZ2xvYmFsUHJvcGVydHlOYW1lRm9yVHlwZU1vZHVsYXJOYW1lS2luZC5nbG9iYWxQcm9wZXJ0eU5hbWVGb3JNZW1iZXJnbG9iYWxQcm9wZXJ0eU5hbWVGb3JNZW1iZXJNb2R1bGFyTmFtZUtpbmQuZ2xvYmFsTmFtZUZvckludGVyZmFjZVR5cGVWYXJpYWJsZWdsb2JhbE5hbWVGb3JJbnRlcmZhY2VUeXBlVmFyaWFibGVNb2R1bGFyTmFtZUtpbmQubmFtZUZvckdldEludGVyY2VwdG9ybmFtZUZvckdldEludGVyY2VwdG9yTW9kdWxhck5hbWVLaW5kLm5hbWVGb3JPbmVTaG90SW50ZXJjZXB0b3JuYW1lRm9yT25lU2hvdEludGVyY2VwdG9yTW9kdWxhck5hbWVLaW5kLmFzTmFtZWFzTmFtZU1vZHVsYXJFeHByZXNzaW9uS2luZC5nbG9iYWxPYmplY3RGb3JMaWJyYXJ5cmVhZEdsb2JhbE9iamVjdEZvckxpYnJhcnl3aXRoU291cmNlSW5mb3JtYXRpb25Nb2R1bGFyRXhwcmVzc2lvbktpbmQuZ2xvYmFsT2JqZWN0Rm9yQ2xhc3NyZWFkR2xvYmFsT2JqZWN0Rm9yQ2xhc3NNb2R1bGFyRXhwcmVzc2lvbktpbmQuZ2xvYmFsT2JqZWN0Rm9yVHlwZXJlYWRHbG9iYWxPYmplY3RGb3JUeXBlTW9kdWxhckV4cHJlc3Npb25LaW5kLmdsb2JhbE9iamVjdEZvck1lbWJlcnJlYWRHbG9iYWxPYmplY3RGb3JNZW1iZXJNb2R1bGFyRXhwcmVzc2lvbktpbmQuY29uc3RhbnRjb25zdGFudFJlZmVyZW5jZU1vZHVsYXJFeHByZXNzaW9uS2luZC5lbWJlZGRlZEdsb2JhbEFjY2Vzc2dlbmVyYXRlRW1iZWRkZWRHbG9iYWxBY2Nlc3NDb2RlZ2VuUmVzdWx0KGNvZGU9PG51bGw+LGltcGFjdD1tb2R1bGFyTmFtZXM9bW9kdWxhckV4cHJlc3Npb25zPU1vZHVsYXJOYW1lS2luZHJ0aUZpZWxkYWxpYXNlZFN1cGVyTWVtYmVyc3RhdGljQ2xvc3VyZW1ldGhvZFByb3BlcnR5aW5zdGFuY2VNZXRob2RpbnN0YW5jZUZpZWxkbGF6eUluaXRpYWxpemVyTW9kdWxhck5hbWVtb2R1bGFyLW5hbWVyZWFkRW51bWRhdGFJc0NsYXNzRW50aXR5cmVhZFR5cGVWYXJpYWJsZXJlYWRTdHJpbmd3cml0ZUVudW13cml0ZUNsYXNzd3JpdGVUeXBlZGVmd3JpdGVUeXBlVmFyaWFibGV2YWx1ZSBub3Qgc2V0IGZvciBhbGxvd1JlbmFtZWNvbnRhaW5lZE5vZGVzTW9kdWxhck5hbWUoa2luZD0sIGRhdGE9LCB2YWx1ZT1fY2xvbmVNb2R1bGFyRXhwcmVzc2lvbktpbmRnbG9iYWxPYmplY3RGb3JMaWJyYXJ5Z2xvYmFsT2JqZWN0Rm9yQ2xhc3NnbG9iYWxPYmplY3RGb3JUeXBlZ2xvYmFsT2JqZWN0Rm9yTWVtYmVyZW1iZWRkZWRHbG9iYWxBY2Nlc3NNb2R1bGFyRXhwcmVzc2lvbm1vZHVsYXItZXhwcmVzc2lvbnJlYWRDb25zdGFudHdyaXRlTGlicmFyeXdyaXRlQ29uc3RhbnRwcmVjZWRlbmNlTGV2ZWxNb2R1bGFyRXhwcmVzc2lvbihraW5kPSxkYXRhPXRvU3RydWN0dXJlZFRleHQsdmFsdWU9SnNOb2RlS2luZEpzTm9kZUtpbmQuY29tbWVudEpzTm9kZUtpbmQuYXdhaXRKc05vZGVLaW5kLnJlZ0V4cExpdGVyYWxKc05vZGVLaW5kLnByb3BlcnR5SnNOb2RlS2luZC5vYmplY3RJbml0aWFsaXplckpzTm9kZUtpbmQuYXJyYXlIb2xlSnNOb2RlS2luZC5hcnJheUluaXRpYWxpemVySnNOb2RlS2luZC5wYXJlbnRoZXNlc0pzTm9kZUtpbmQubW9kdWxhck5hbWVKc05vZGVLaW5kLmFzeW5jTmFtZUpzTm9kZUtpbmQuc3RyaW5nQmFja2VkTmFtZUpzTm9kZUtpbmQuc3RyaW5nQ29uY2F0ZW5hdGlvbkpzTm9kZUtpbmQubGl0ZXJhbE51bGxKc05vZGVLaW5kLmxpdGVyYWxOdW1iZXJKc05vZGVLaW5kLmxpdGVyYWxTdHJpbmdKc05vZGVLaW5kLmxpdGVyYWxTdHJpbmdGcm9tTmFtZUpzTm9kZUtpbmQubGl0ZXJhbEJvb2xKc05vZGVLaW5kLm1vZHVsYXJFeHByZXNzaW9uSnNOb2RlS2luZC5mdW5jdGlvbkpzTm9kZUtpbmQubmFtZWRGdW5jdGlvbkpzTm9kZUtpbmQuYWNjZXNzSnNOb2RlS2luZC5wYXJhbWV0ZXJKc05vZGVLaW5kLnZhcmlhYmxlRGVjbGFyYXRpb25Kc05vZGVLaW5kLnRoaXNFeHByZXNzaW9uSnNOb2RlS2luZC52YXJpYWJsZVVzZUpzTm9kZUtpbmQucG9zdGZpeEpzTm9kZUtpbmQucHJlZml4SnNOb2RlS2luZC5iaW5hcnlKc05vZGVLaW5kLmNhbGxFeHByZXNzaW9uSnNOb2RlS2luZC5uZXdFeHByZXNzaW9uSnNOb2RlS2luZC5jb25kaXRpb25hbEpzTm9kZUtpbmQudmFyaWFibGVJbml0aWFsaXphdGlvbkpzTm9kZUtpbmQuYXNzaWdubWVudEpzTm9kZUtpbmQudmFyaWFibGVEZWNsYXJhdGlvbkxpc3RKc05vZGVLaW5kLmxpdGVyYWxFeHByZXNzaW9uSnNOb2RlS2luZC5kYXJ0WWllbGRKc05vZGVLaW5kLmxpdGVyYWxTdGF0ZW1lbnRKc05vZGVLaW5kLmxhYmVsZWRTdGF0ZW1lbnRKc05vZGVLaW5kLmZ1bmN0aW9uRGVjbGFyYXRpb25Kc05vZGVLaW5kLnN3aXRjaERlZmF1bHRKc05vZGVLaW5kLnN3aXRjaENhc2VKc05vZGVLaW5kLnN3aXRjaFN0YXRlbWVudEpzTm9kZUtpbmQuY2F0Y2hDbGF1c2VKc05vZGVLaW5kLnRyeVN0YXRlbWVudEpzTm9kZUtpbmQudGhyb3dTdGF0ZW1lbnRKc05vZGVLaW5kLnJldHVyblN0YXRlbWVudEpzTm9kZUtpbmQuYnJlYWtTdGF0ZW1lbnRKc05vZGVLaW5kLmNvbnRpbnVlU3RhdGVtZW50SnNOb2RlS2luZC5kb1N0YXRlbWVudEpzTm9kZUtpbmQud2hpbGVTdGF0ZW1lbnRKc05vZGVLaW5kLmZvckluU3RhdGVtZW50SnNOb2RlS2luZC5mb3JTdGF0ZW1lbnRKc05vZGVLaW5kLmlmU3RhdGVtZW50SnNOb2RlS2luZC5lbXB0eVN0YXRlbWVudEpzTm9kZUtpbmQuZXhwcmVzc2lvblN0YXRlbWVudEpzTm9kZUtpbmQuYmxvY2tKc05vZGVLaW5kLnByb2dyYW1yZWdFeHBMaXRlcmFsb2JqZWN0SW5pdGlhbGl6ZXJhcnJheUhvbGVhcnJheUluaXRpYWxpemVycGFyZW50aGVzZXNtb2R1bGFyTmFtZWFzeW5jTmFtZXN0cmluZ0JhY2tlZE5hbWVzdHJpbmdDb25jYXRlbmF0aW9ubGl0ZXJhbE51bWJlcmxpdGVyYWxTdHJpbmdGcm9tTmFtZW1vZHVsYXJFeHByZXNzaW9ubmFtZWRGdW5jdGlvbmFjY2Vzc3ZhcmlhYmxlRGVjbGFyYXRpb252YXJpYWJsZVVzZXBvc3RmaXhjYWxsRXhwcmVzc2lvbm5ld0V4cHJlc3Npb252YXJpYWJsZUluaXRpYWxpemF0aW9uYXNzaWdubWVudHZhcmlhYmxlRGVjbGFyYXRpb25MaXN0bGl0ZXJhbEV4cHJlc3Npb25kYXJ0WWllbGRsaXRlcmFsU3RhdGVtZW50ZnVuY3Rpb25EZWNsYXJhdGlvbnN3aXRjaERlZmF1bHRzd2l0Y2hTdGF0ZW1lbnR0aHJvd1N0YXRlbWVudGZvckluU3RhdGVtZW50cHJvZ3JhbUpzTm9kZVRhZ3Nqcy1ub2RlanMtY29tbWVudGpzLWF3YWl0anMtcmVnRXhwTGl0ZXJhbGpzLXByb3BlcnR5anMtb2JqZWN0SW5pdGlhbGl6ZXJqcy1hcnJheUhvbGVqcy1hcnJheUluaXRpYWxpemVyanMtcGFyZW50aGVzZXNqcy1tb2R1bGFyTmFtZWpzLWFzeW5jTmFtZWpzLXN0cmluZ0JhY2tlZE5hbWVqcy1zdHJpbmdDb25jYXRlbmF0aW9uanMtbGl0ZXJhbE51bGxqcy1saXRlcmFsTnVtYmVyanMtbGl0ZXJhbFN0cmluZ2pzLWxpdGVyYWxTdHJpbmdGcm9tTmFtZWpzLWxpdGVyYWxCb29sanMtbW9kdWxhckV4cHJlc3Npb25qcy1mdW5jdGlvbmpzLW5hbWVkRnVuY3Rpb25qcy1hY2Nlc3Nqcy1wYXJhbWV0ZXJqcy12YXJpYWJsZURlY2xhcmF0aW9uanMtdGhpc0V4cHJlc3Npb25qcy12YXJpYWJsZVVzZWpzLXBvc3RmaXhqcy1wcmVmaXhqcy1iaW5hcnlqcy1jYWxsRXhwcmVzc2lvbmpzLW5ld0V4cHJlc3Npb25qcy1jb25kaXRpb25hbGpzLXZhcmlhYmxlSW5pdGlhbGl6YXRpb25qcy1hc3NpZ25tZW50anMtdmFyaWFibGVEZWNsYXJhdGlvbkxpc3Rqcy1saXRlcmFsRXhwcmVzc2lvbmpzLWRhcnRZaWVsZGpzLWxpdGVyYWxTdGF0ZW1lbnRqcy1sYWJlbGVkU3RhdGVtZW50anMtZnVuY3Rpb25EZWNsYXJhdGlvbmpzLXN3aXRjaERlZmF1bHRqcy1zd2l0Y2hDYXNlanMtc3dpdGNoU3RhdGVtZW50anMtY2F0Y2hDbGF1c2Vqcy10cnlTdGF0ZW1lbnRqcy10aHJvd1N0YXRlbWVudGpzLXJldHVyblN0YXRlbWVudGpzLWJyZWFrU3RhdGVtZW50anMtY29udGludWVTdGF0ZW1lbnRqcy1kb1N0YXRlbWVudGpzLXdoaWxlU3RhdGVtZW50anMtZm9ySW5TdGF0ZW1lbnRqcy1mb3JTdGF0ZW1lbnRqcy1pZlN0YXRlbWVudGpzLWVtcHR5U3RhdGVtZW50anMtZXhwcmVzc2lvblN0YXRlbWVudGpzLWJsb2NranMtcHJvZ3JhbUpzTm9kZVNlcmlhbGl6ZXJzZXJpYWxpemVyX3dyaXRlSW5mb3dyaXRlQ2FjaGVkdmlzaXRJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbkpzTm9kZVNlcmlhbGl6ZXIudmlzaXRJbnRlcnBvbGF0ZWREZWNsYXJhdGlvbnZpc2l0SW50ZXJwb2xhdGVkU3RhdGVtZW50SnNOb2RlU2VyaWFsaXplci52aXNpdEludGVycG9sYXRlZFN0YXRlbWVudHZpc2l0SW50ZXJwb2xhdGVkU2VsZWN0b3J2aXNpdEludGVycG9sYXRlZFBhcmFtZXRlckpzTm9kZVNlcmlhbGl6ZXIudmlzaXRJbnRlcnBvbGF0ZWRQYXJhbWV0ZXJ2aXNpdEludGVycG9sYXRlZExpdGVyYWxKc05vZGVTZXJpYWxpemVyLnZpc2l0SW50ZXJwb2xhdGVkTGl0ZXJhbHZpc2l0SW50ZXJwb2xhdGVkRXhwcmVzc2lvbkpzTm9kZVNlcmlhbGl6ZXIudmlzaXRJbnRlcnBvbGF0ZWRFeHByZXNzaW9udmlzaXRDb21tZW50dmlzaXRBd2FpdHZpc2l0UmVnRXhwTGl0ZXJhbHZpc2l0UHJvcGVydHl2aXNpdE9iamVjdEluaXRpYWxpemVyaXNPbmVMaW5lcnZpc2l0QXJyYXlIb2xldmlzaXRBcnJheUluaXRpYWxpemVydmlzaXRQYXJlbnRoZXNlc2VuY2xvc2VkVW5leHBlY3RlZCBkZWZlcnJlZCBleHByZXNzaW9uOiB2aXNpdExpdGVyYWxOdWxsdmlzaXRMaXRlcmFsTnVtYmVydmlzaXRMaXRlcmFsU3RyaW5ndmlzaXRMaXRlcmFsQm9vbHZpc2l0RGVmZXJyZWRTdHJpbmdKc05vZGVTZXJpYWxpemVyLnZpc2l0RGVmZXJyZWRTdHJpbmd2aXNpdERlZmVycmVkTnVtYmVySnNOb2RlU2VyaWFsaXplci52aXNpdERlZmVycmVkTnVtYmVydmlzaXREZWZlcnJlZEV4cHJlc3Npb252aXNpdEZ1bnZpc2l0TmFtZWRGdW5jdGlvbnZpc2l0QWNjZXNzdmlzaXRQYXJhbWV0ZXJ2aXNpdFRoaXN2aXNpdFZhcmlhYmxlVXNldmlzaXRQb3N0Zml4dmlzaXRQcmVmaXh2aXNpdEJpbmFyeXZpc2l0Q2FsbHZpc2l0TmV3dmlzaXRDb25kaXRpb25hbHZpc2l0VmFyaWFibGVJbml0aWFsaXphdGlvbnZpc2l0QXNzaWdubWVudGxlZnRIYW5kU2lkZXdyaXRlU3RyaW5nT3JOdWxsdmlzaXRWYXJpYWJsZURlY2xhcmF0aW9uTGlzdGluZGVudFNwbGl0c3Zpc2l0TGl0ZXJhbEV4cHJlc3Npb252aXNpdERhcnRZaWVsZGhhc1N0YXJ2aXNpdExpdGVyYWxTdGF0ZW1lbnR2aXNpdERlZmF1bHR2aXNpdENhc2V2aXNpdFN3aXRjaHZpc2l0VHJ5Y2F0Y2hQYXJ0ZmluYWxseVBhcnR2aXNpdFJldHVybnZpc2l0QnJlYWt0YXJnZXRMYWJlbHZpc2l0Q29udGludWV2aXNpdERvdmlzaXRXaGlsZXZpc2l0Rm9ySW52aXNpdEZvcnZpc2l0SWZ2aXNpdFByb2dyYW1Kc05vZGVEZXNlcmlhbGl6ZXJkZXNlcmlhbGl6ZXJoYXNWYWx1ZXJlYWRWYWx1ZU9yTnVsbHJlYWRTdHJpbmdPck51bGxyZWFkQ2FjaGVkQ29kZWdlblJlYWRlckltcGxyZWFkQWJzdHJhY3RWYWx1ZWFic3RyYWN0VmFsdWVEb21haW5yZWFkQWJzdHJhY3RWYWx1ZUZyb21EYXRhU291cmNlcmVhZEpzTm9kZXJlYWRPdXRwdXRVbml0UmVmZXJlbmNlb3V0cHV0VW5pdHNyZWFkSW50Q29kZWdlbldyaXRlckltcGx3cml0ZUFic3RyYWN0VmFsdWV3cml0ZUFic3RyYWN0VmFsdWVUb0RhdGFTaW5rd3JpdGVKc05vZGV3cml0ZU91dHB1dFVuaXRSZWZlcmVuY2V3cml0ZUludGRhcnQyanMuY29tbW9uLm5hbWVzUHVibGljTmFtZUNhbGxTdHJ1Y3R1cmVJZGVudGlmaWVyc25vU3VjaE1ldGhvZF9ydW50aW1lVHlwZV86c2lnbmF0dXJlSlNKU19CVUlMVElOSlNfRU1CRURERURfR0xPQkFMSlNfSU5URVJDRVBUT1JfQ09OU1RBTlRKU19TVFJJTkdfQ09OQ0FUREFSVF9DTE9TVVJFX1RPX0pTTmFtZXNkeW5hbWljX3RvU3RyaW5nX0lOREVYX05BTUVJTkRFWF9TRVRfTkFNRUNBTExfTkFNRWdlbmVyaWNJbnN0YW50aWF0aW9uaW5zdGFudGlhdGVub1N1Y2hNZXRob2RHZXR0ZXJ0b1N0cmluZ0dldHRlcmhhc2hDb2RlX0FMTGRhcnRfYXN5bmNkYXJ0X2NvbGxlY3Rpb25jb2xsZWN0aW9uZGFydF9jb3JlZGFydF9odG1saHRtbGRhcnRfaHRtbF9jb21tb25odG1sX2NvbW1vbmRhcnRfaW5kZXhlZF9kYmluZGV4ZWRfZGJkYXJ0X2lzb2xhdGVpc29sYXRlZGFydF9tYXRoZGFydF9taXJyb3JzZGFydF9faW50ZXJuYWxkYXJ0X19uYXRpdmVfdHlwZWRfZGF0YV9uYXRpdmVfdHlwZWRfZGF0YWRhcnRfdHlwZWRfZGF0YXR5cGVkX2RhdGFkYXJ0X3N2Z3N2Z2RhcnRfd2ViX2F1ZGlvd2ViX2F1ZGlvZGFydF93ZWJfZ2x3ZWJfZ2xkYXJ0X3dlYl9zcWx3ZWJfc3FsZGFydF9fanNfaGVscGVyX2pzX2hlbHBlcmRhcnRfX3J0aV9ydGlkYXJ0X19pbnRlcmNlcHRvcnNfaW50ZXJjZXB0b3JzZGFydF9fZm9yZWlnbl9oZWxwZXJfZm9yZWlnbl9oZWxwZXJkYXJ0X19qc19uYW1lc19qc19uYW1lc2RhcnRfX2pzX2VtYmVkZGVkX25hbWVzX2pzX2VtYmVkZGVkX25hbWVzcGFja2FnZV9qc2pzL2pzLmRhcnRwYWNrYWdlX21ldGFfZGFydDJqc21ldGEvZGFydDJqcy5kYXJ0ZGFydDJqcy5jb21tb24ud29ya01lbWJlckVudGl0eWRhcnQyanMudHlwZV9zeXN0ZW1jb25zdGFudF9zeXN0ZW1OYXRpdmVCYXNpY0RhdGFDb21tb25FbGVtZW50c3Jlc291cmNlQ2xhc3N1bm1vZGlmaWFibGVTZXRDbGFzc3R5cGVkRGF0YUxpYnJhcnlqc0hlbHBlckxpYnJhcnlpbnRlcmNlcHRvcnNMaWJyYXJ5Zm9yZWlnbkxpYnJhcnlydGlMaWJyYXJ5aW50ZXJuYWxMaWJyYXJ5dHlwZWREYXRhQ2xhc3NzeW1ib2xDb25zdHJ1Y3RvclRhcmdldGlzU3ltYm9sQ29uc3RydWN0b3JpZGVudGljYWxGdW5jdGlvbmlzRnVuY3Rpb25BcHBseU1ldGhvZHR5cGVMaXRlcmFsVHlwZWlzTnVtYmVyT3JTdHJpbmdTdXBlcnR5cGVpc1N0cmluZ09ubHlTdXBlcnR5cGVpc0xpc3RTdXBlcnR5cGVnZXRDb25zdGFudE1hcFR5cGVGb3Jzb3VyY2VUeXBlaGFzUHJvdG9LZXlvbmx5U3RyaW5nS2V5c2dldENvbnN0YW50U2V0VHlwZUZvcnN5bWJvbEZpZWxkc3ltYm9sSW1wbGVtZW50YXRpb25UeXBlbWFwTGl0ZXJhbENsYXNzbWFwTGl0ZXJhbENvbnN0cnVjdG9ybWFwTGl0ZXJhbENvbnN0cnVjdG9yRW1wdHltYXBMaXRlcmFsVW50eXBlZE1ha2VybWFwTGl0ZXJhbFVudHlwZWRFbXB0eU1ha2Vyc2V0TGl0ZXJhbENsYXNzc2V0TGl0ZXJhbENvbnN0cnVjdG9yc2V0TGl0ZXJhbENvbnN0cnVjdG9yRW1wdHlzZXRMaXRlcmFsVW50eXBlZE1ha2Vyc2V0TGl0ZXJhbFVudHlwZWRFbXB0eU1ha2Vyb2JqZWN0Tm9TdWNoTWV0aG9kaXNEZWZhdWx0Tm9TdWNoTWV0aG9kSW1wbGVtZW50YXRpb25hc3luY0hlbHBlclN0YXJ0U3luY2FzeW5jSGVscGVyQXdhaXRhc3luY0hlbHBlclJldHVybmFzeW5jSGVscGVyUmV0aHJvd3dyYXBCb2R5eWllbGRTdGFyeWllbGRTaW5nbGVzeW5jU3RhclVuY2F1Z2h0RXJyb3Jhc3luY1N0YXJIZWxwZXJzdHJlYW1PZkNvbnRyb2xsZXJlbmRPZkl0ZXJhdGlvbnN5bmNTdGFySXRlcmFibGVmdXR1cmVJbXBsZW1lbnRhdGlvbmNvbnRyb2xsZXJTdHJlYW1zdHJlYW1JdGVyYXRvcnN0cmVhbUl0ZXJhdG9yQ29uc3RydWN0b3JzeW5jU3Rhckl0ZXJhYmxlRmFjdG9yeWFzeW5jQXdhaXRDb21wbGV0ZXJGYWN0b3J5YXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlckZhY3Rvcnlqc0ludGVyY2VwdG9yQ2xhc3Nqc1N0cmluZ0NsYXNzanNBcnJheUNsYXNzanNOdW1iZXJDbGFzc2pzSW50Q2xhc3Nqc0RvdWJsZUNsYXNzanNOdWxsQ2xhc3Nqc0Jvb2xDbGFzc2pzUGxhaW5KYXZhU2NyaXB0T2JqZWN0Q2xhc3Nqc1Vua25vd25KYXZhU2NyaXB0T2JqZWN0Q2xhc3Nqc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzanNKYXZhU2NyaXB0T2JqZWN0Q2xhc3Nqc0luZGV4YWJsZUNsYXNzanNNdXRhYmxlSW5kZXhhYmxlQ2xhc3Nqc011dGFibGVBcnJheUNsYXNzanNGaXhlZEFycmF5Q2xhc3Nqc0V4dGVuZGFibGVBcnJheUNsYXNzanNVbm1vZGlmaWFibGVBcnJheUNsYXNzanNQb3NpdGl2ZUludENsYXNzanNVSW50MzJDbGFzc2pzVUludDMxQ2xhc3Npc0ZpbmRJbmRleEZvck5hdGl2ZVN1YmNsYXNzVHlwZWdldE5hdGl2ZUludGVyY2VwdG9yTWV0aG9kanNBcnJheVR5cGVkQ29uc3RydWN0b3JmaW5kSGVscGVyRnVuY3Rpb25jbG9zdXJlQ2xhc3Nib3VuZENsb3N1cmVDbGFzc3R5cGVMaXRlcmFsQ2xhc3Njb25zdE1hcExpdGVyYWxDbGFzc2NvbnN0U2V0TGl0ZXJhbENsYXNzdHlwZVZhcmlhYmxlQ2xhc3Nqc0ludm9jYXRpb25NaXJyb3JDbGFzc2ludm9jYXRpb25UeXBlQXJndW1lbnRHZXR0ZXJqc0luZGV4aW5nQmVoYXZpb3JJbnRlcmZhY2VzdGFja1RyYWNlSGVscGVyQ2xhc3Njb25zdGFudE1hcENsYXNzY29uc3RhbnRTdHJpbmdNYXBDbGFzc2NvbnN0YW50UHJvdG9NYXBDbGFzc2dlbmVyYWxDb25zdGFudE1hcENsYXNzYW5ub3RhdGlvbkNyZWF0ZXNDbGFzc2Fubm90YXRpb25SZXR1cm5zQ2xhc3Nhbm5vdGF0aW9uSlNOYW1lQ2xhc3NuYXRpdmVBbm5vdGF0aW9uQ2xhc3N0eXBlVmFyaWFibGVDb25zdHJ1Y3RvcmFzc2VydFRlc3Rhc3NlcnRUaHJvd2Fzc2VydEhlbHBlcmFzc2VydFVucmVhY2hhYmxlTWV0aG9kZ2V0SXNvbGF0ZUFmZmluaXR5VGFnTWFya2VycmVxdWlyZXNQcmVhbWJsZU1hcmtlcmxvYWRMaWJyYXJ5V3JhcHBlcmxvYWREZWZlcnJlZExpYnJhcnlib29sQ29udmVyc2lvbkNoZWNrdHJhY2VIZWxwZXJjbG9zdXJlRnJvbVRlYXJPZmZpc0pzSW5kZXhhYmxldGhyb3dJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb250aHJvd0luZGV4T3V0T2ZSYW5nZUV4Y2VwdGlvbmV4Y2VwdGlvblVud3JhcHBlcnRocm93UnVudGltZUVycm9ydGhyb3dVbnN1cHBvcnRlZEVycm9ydGhyb3dUeXBlRXJyb3J0aHJvd0Fic3RyYWN0Q2xhc3NJbnN0YW50aWF0aW9uRXJyb3JjaGVja0NvbmN1cnJlbnRNb2RpZmljYXRpb25FcnJvcnRocm93Q29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yc3RyaW5nSW50ZXJwb2xhdGlvbkhlbHBlcndyYXBFeGNlcHRpb25IZWxwZXJ0aHJvd0V4cHJlc3Npb25IZWxwZXJjbG9zdXJlQ29udmVydGVydHJhY2VGcm9tRXhjZXB0aW9uc2V0UnVudGltZVR5cGVJbmZvZ2V0UnVudGltZVR5cGVJbmZvZ2V0VHlwZUFyZ3VtZW50QnlJbmRleGNvbXB1dGVTaWduYXR1cmVnZXRSdW50aW1lVHlwZUFyZ3VtZW50c2dldFJ1bnRpbWVUeXBlQXJndW1lbnRnZXRSdW50aW1lVHlwZUFyZ3VtZW50SW50ZXJjZXB0ZWRhc3NlcnRJc1N1YnR5cGVjaGVja1N1YnR5cGVhc3NlcnRTdWJ0eXBlc3VidHlwZUNhc3RmdW5jdGlvblR5cGVUZXN0ZnV0dXJlT3JUZXN0Y2hlY2tTdWJ0eXBlT2ZSdW50aW1lVHlwZWFzc2VydFN1YnR5cGVPZlJ1bnRpbWVUeXBlc3VidHlwZU9mUnVudGltZVR5cGVDYXN0Y2hlY2tEZWZlcnJlZElzTG9hZGVkdGhyb3dOb1N1Y2hNZXRob2RjcmVhdGVSdW50aW1lVHlwZWZhbGxUaHJvdWdoRXJyb3JjcmVhdGVJbnZvY2F0aW9uTWlycm9yY3JlYXRlVW5tYW5nbGVkSW52b2NhdGlvbk1pcnJvcmN5Y2xpY1Rocm93SGVscGVyZGVmaW5lUHJvcGVydHlpc0V4dHJhY3RUeXBlQXJndW1lbnRzZ2V0SW5zdGFudGlhdGlvbkNsYXNzZ2V0SW5zdGFudGlhdGVGdW5jdGlvbmluc3RhbnRpYXRlZEdlbmVyaWNGdW5jdGlvblR5cGVleHRyYWN0RnVuY3Rpb25UeXBlT2JqZWN0RnJvbUludGVybmFsZmluZFR5cGVpbnN0YW5jZVR5cGV0eXBlTGl0ZXJhbE1ha2VyY2hlY2tUeXBlQm91bmRydGlBc0ZpZWxkcnRpQ2hlY2tGaWVsZHJ0aUlzRmllbGRydGlFdmFsTWV0aG9kcnRpQmluZE1ldGhvZHJ0aUFkZFJ1bGVzTWV0aG9kZ2VuZXJhbElzVGVzdEltcGxlbWVudGF0aW9uZ2VuZXJhbEFzQ2hlY2tJbXBsZW1lbnRhdGlvbmdlbmVyYWxUeXBlQ2hlY2tJbXBsZW1lbnRhdGlvbnNwZWNpYWxpemVkSXNCb29sc3BlY2lhbGl6ZWRBc0Jvb2xOdWxsYWJsZXNwZWNpYWxpemVkQ2hlY2tCb29sTnVsbGFibGVzcGVjaWFsaXplZEFzRG91YmxlTnVsbGFibGVzcGVjaWFsaXplZENoZWNrRG91YmxlTnVsbGFibGVzcGVjaWFsaXplZElzSW50c3BlY2lhbGl6ZWRBc0ludE51bGxhYmxlc3BlY2lhbGl6ZWRDaGVja0ludE51bGxhYmxlc3BlY2lhbGl6ZWRJc051bXNwZWNpYWxpemVkQXNOdW1OdWxsYWJsZXNwZWNpYWxpemVkQ2hlY2tOdW1OdWxsYWJsZXNwZWNpYWxpemVkSXNTdHJpbmdzcGVjaWFsaXplZEFzU3RyaW5nTnVsbGFibGVzcGVjaWFsaXplZENoZWNrU3RyaW5nTnVsbGFibGVzeW1ib2xJbXBsZW1lbnRhdGlvbkNsYXNzZXh0ZXJuYWxOYW1lQ2xhc3NleHRlcm5hbE5hbWVUeXBlc3ltYm9sVmFsaWRhdGVkQ29uc3RydWN0b3Jqc0dldE5hbWVFbnVtaXNGb3JlaWduSGVscGVyZ2V0RGVmYXVsdFN1cGVyY2xhc3NuYXRpdmVCYXNpY0RhdGFLQ29tbW9uRWxlbWVudHNqc0Fubm90YXRpb25DbGFzc2pzQW5vbnltb3VzQ2xhc3NwcmFnbWFDbGFzc05hbWVGaWVsZHByYWdtYUNsYXNzT3B0aW9uc0ZpZWxkaXNDcmVhdGVJbnZvY2F0aW9uTWlycm9ySGVscGVyaXNTeW1ib2xWYWxpZGF0ZWRDb25zdHJ1Y3Rvcm1ldGFOb0lubGluZUNsYXNzbWV0YVRyeUlubGluZUNsYXNzaXNFeHRlcm5hbEFsbG93ZWRKQ29tbW9uRWxlbWVudHNpc1VubmFtZWRMaXN0Q29uc3RydWN0b3Jpc0ZpbGxlZExpc3RDb25zdHJ1Y3RvcmlzRGVmYXVsdEVxdWFsaXR5SW1wbGVtZW50YXRpb25hcHBsaWVzVG9Kc0luZGV4YWJsZUxlbmd0aGpzQXJyYXlSZW1vdmVMYXN0anNBcnJheUFkZGlzSnNTdHJpbmdTcGxpdGFwcGxpZXNUb0pzU3RyaW5nU3BsaXRqc1N0cmluZ1NwbGl0anNTdHJpbmdUb1N0cmluZ2pzU3RyaW5nT3BlcmF0b3JBZGRqc0NvbnN0Q2xhc3Npc0NoZWNrSW50aXNDaGVja051bWlzQ2hlY2tTdHJpbmdpc0luc3RhbnRpYXRpb25DbGFzc3R5cGVkQXJyYXlPZkludENsYXNzdHlwZWRBcnJheU9mRG91YmxlQ2xhc3Nqc0J1aWx0aW5FbnVtaXNGb3JlaWdub3BlcmF0b3JFcUhhbmRsZXNOdWxsQXJndW1lbnRDb21tb25FbGVtZW50c0ltcGxfZW52X29wdGlvbnNfcmVzb3VyY2VDbGFzc191bm1vZGlmaWFibGVTZXRDbGFzc190eXBlZERhdGFMaWJyYXJ5X2pzSGVscGVyTGlicmFyeV9pbnRlcmNlcHRvcnNMaWJyYXJ5X2ZvcmVpZ25MaWJyYXJ5X3J0aUxpYnJhcnlfaW50ZXJuYWxMaWJyYXJ5X3R5cGVkRGF0YUNsYXNzX3N5bWJvbENvbnN0cnVjdG9yVGFyZ2V0X2NvbXB1dGVkU3ltYm9sQ29uc3RydWN0b3JEZXBlbmRlbmNpZXNfc3ltYm9sQ29uc3RydWN0b3JJbXBsZW1lbnRhdGlvblRhcmdldF9pZGVudGljYWxGdW5jdGlvbl9tYXBMaXRlcmFsQ2xhc3NfbWFwTGl0ZXJhbENvbnN0cnVjdG9yX21hcExpdGVyYWxDb25zdHJ1Y3RvckVtcHR5X21hcExpdGVyYWxVbnR5cGVkTWFrZXJfbWFwTGl0ZXJhbFVudHlwZWRFbXB0eU1ha2VyX3NldExpdGVyYWxDbGFzc19zZXRMaXRlcmFsQ29uc3RydWN0b3Jfc2V0TGl0ZXJhbENvbnN0cnVjdG9yRW1wdHlfc2V0TGl0ZXJhbFVudHlwZWRNYWtlcl9zZXRMaXRlcmFsVW50eXBlZEVtcHR5TWFrZXJfb2JqZWN0Tm9TdWNoTWV0aG9kX3N5bmNTdGFySXRlcmFibGVGYWN0b3J5X2FzeW5jQXdhaXRDb21wbGV0ZXJGYWN0b3J5X2FzeW5jU3RhclN0cmVhbUNvbnRyb2xsZXJGYWN0b3J5X2pzSW50ZXJjZXB0b3JDbGFzc19qc1N0cmluZ0NsYXNzX2pzQXJyYXlDbGFzc19qc051bWJlckNsYXNzX2pzSW50Q2xhc3NfanNEb3VibGVDbGFzc19qc051bGxDbGFzc19qc0Jvb2xDbGFzc19qc1BsYWluSmF2YVNjcmlwdE9iamVjdENsYXNzX2pzVW5rbm93bkphdmFTY3JpcHRPYmplY3RDbGFzc19qc0phdmFTY3JpcHRGdW5jdGlvbkNsYXNzX2pzSmF2YVNjcmlwdE9iamVjdENsYXNzX2pzSW5kZXhhYmxlQ2xhc3NfanNNdXRhYmxlSW5kZXhhYmxlQ2xhc3NfanNNdXRhYmxlQXJyYXlDbGFzc19qc0ZpeGVkQXJyYXlDbGFzc19qc0V4dGVuZGFibGVBcnJheUNsYXNzX2pzVW5tb2RpZmlhYmxlQXJyYXlDbGFzc19qc1Bvc2l0aXZlSW50Q2xhc3NfanNVSW50MzJDbGFzc19qc1VJbnQzMUNsYXNzX2dldE5hdGl2ZUludGVyY2VwdG9yTWV0aG9kX2pzQXJyYXlUeXBlZENvbnN0cnVjdG9yX2pzQXJyYXlSZW1vdmVMYXN0X2pzQXJyYXlBZGRfanNTdHJpbmdTcGxpdF9qc1N0cmluZ1RvU3RyaW5nX2pzU3RyaW5nT3BlcmF0b3JBZGRfanNDb25zdENsYXNzX2pzQW5ub3RhdGlvbkNsYXNzX2pzQW5vbnltb3VzQ2xhc3NfY2xvc3VyZUNsYXNzX2JvdW5kQ2xvc3VyZUNsYXNzX3R5cGVMaXRlcmFsQ2xhc3NfY29uc3RNYXBMaXRlcmFsQ2xhc3NfY29uc3RTZXRMaXRlcmFsQ2xhc3NfdHlwZVZhcmlhYmxlQ2xhc3NfcHJhZ21hQ2xhc3NOYW1lRmllbGRfcHJhZ21hQ2xhc3NPcHRpb25zRmllbGRfanNJbnZvY2F0aW9uTWlycm9yQ2xhc3NfaW52b2NhdGlvblR5cGVBcmd1bWVudEdldHRlcl9qc0luZGV4aW5nQmVoYXZpb3JJbnRlcmZhY2VfbmF0aXZlQW5ub3RhdGlvbkNsYXNzX3R5cGVWYXJpYWJsZUNvbnN0cnVjdG9yX2Fzc2VydFRlc3RfYXNzZXJ0VGhyb3dfYXNzZXJ0SGVscGVyX2Fzc2VydFVucmVhY2hhYmxlTWV0aG9kX2dldElzb2xhdGVBZmZpbml0eVRhZ01hcmtlcl9yZXF1aXJlc1ByZWFtYmxlTWFya2VyX2NhY2hlZENoZWNrQ29uY3VycmVudE1vZGlmaWNhdGlvbkVycm9yX2ZpbmRUeXBlX2luc3RhbmNlVHlwZV90eXBlTGl0ZXJhbE1ha2VyX2NoZWNrVHlwZUJvdW5kX3J0aUFzRmllbGRfcnRpSXNGaWVsZF9ydGlDaGVja0ZpZWxkX3J0aUV2YWxNZXRob2RfcnRpQmluZE1ldGhvZF9ydGlBZGRSdWxlc01ldGhvZF9nZW5lcmFsSXNUZXN0SW1wbGVtZW50YXRpb25fZ2VuZXJhbEFzQ2hlY2tJbXBsZW1lbnRhdGlvbl9nZW5lcmFsVHlwZUNoZWNrSW1wbGVtZW50YXRpb25fc3ltYm9sSW1wbGVtZW50YXRpb25DbGFzc19leHRlcm5hbE5hbWVDbGFzc19zeW1ib2xJbXBsZW1lbnRhdGlvbkZpZWxkX3N5bWJvbFZhbGlkYXRlZENvbnN0cnVjdG9yX3R5cGVkQXJyYXlPZkludENsYXNzX3R5cGVkQXJyYXlPZkRvdWJsZUNsYXNzX2pzR2V0TmFtZUVudW1fanNCdWlsdGluRW51bV9tZXRhQW5ub3RhdGlvbkNoZWNrZWRfbWV0YU5vSW5saW5lQ2xhc3NfbWV0YVRyeUlubGluZUNsYXNzX2ZpbmRDbGFzc1Jlc291cmNlbG9va3VwTGlicmFyeU5hdGl2ZVR5cGVkRGF0YV9maW5kQ29uc3RydWN0b3JfZW5zdXJlU3ltYm9sQ29uc3RydWN0b3JEZXBlbmRlbmNpZXNfZmluZExpYnJhcnlNZW1iZXJmaWxsZWRfZ2V0UmF3VHlwZV9jcmVhdGVJbnRlcmZhY2VUeXBlQ29tcGFyYWJsZVBhdHRlcm5sb29rdXBDbGFzc2xvb2t1cExpYnJhcnlNZW1iZXJfZmluZENsYXNzTWVtYmVybG9va3VwTG9jYWxDbGFzc01lbWJlcmNyZWF0ZUludGVyZmFjZVR5cGVjbGFzc0VsZW1lbnR0cmVhdEFzUmF3c3ltYm9sSW1wbGVtZW50YXRpb25GaWVsZExpbmtlZEhhc2hNYXBfZW5zdXJlTWFwTGl0ZXJhbEhlbHBlcnNfbGl0ZXJhbF9lbXB0eV9tYWtlTGl0ZXJhbF9tYWtlRW1wdHlMaW5rZWRIYXNoU2V0X2Vuc3VyZVNldExpdGVyYWxIZWxwZXJzX2ZpbmRBc3luY0hlbHBlckNsYXNzX2ZpbmRBc3luY0hlbHBlckZ1bmN0aW9uX2FzeW5jU3RhcnRTeW5jX2FzeW5jQXdhaXRfYXN5bmNSZXR1cm5fYXN5bmNSZXRocm93X3dyYXBKc0Z1bmN0aW9uRm9yQXN5bmNfSXRlcmF0aW9uTWFya2VydW5jYXVnaHRFcnJvcl9hc3luY1N0YXJIZWxwZXJfc3RyZWFtT2ZDb250cm9sbGVyX1N5bmNTdGFySXRlcmFibGVfRnV0dXJlX0NvbnRyb2xsZXJTdHJlYW1TdHJlYW1JdGVyYXRvcl9tYWtlU3luY1N0YXJJdGVyYWJsZV9tYWtlQXN5bmNBd2FpdENvbXBsZXRlcl9tYWtlQXN5bmNTdGFyU3RyZWFtQ29udHJvbGxlcl9maW5kSW50ZXJjZXB0b3JzQ2xhc3NfZmluZEludGVyY2VwdG9yc0Z1bmN0aW9uSW50ZXJjZXB0b3JKU1N0cmluZ0pTQXJyYXlKU051bWJlckpTSW50SlNEb3VibGVKU051bGxKU0Jvb2xQbGFpbkphdmFTY3JpcHRPYmplY3RVbmtub3duSmF2YVNjcmlwdE9iamVjdEphdmFTY3JpcHRGdW5jdGlvbkphdmFTY3JpcHRPYmplY3RKU0luZGV4YWJsZUpTTXV0YWJsZUluZGV4YWJsZUpTTXV0YWJsZUFycmF5SlNGaXhlZEFycmF5SlNFeHRlbmRhYmxlQXJyYXlKU1VubW9kaWZpYWJsZUFycmF5SlNQb3NpdGl2ZUludEpTVUludDMySlNVSW50MzFmaW5kSW5kZXhGb3JOYXRpdmVTdWJjbGFzc1R5cGVnZXROYXRpdmVJbnRlcmNlcHRvcmlzQ2FsbHR5cGVkX2lzSnNTdHJpbmdDbGFzc2FwcGxpZXNpc1RhcmdldGluZ01lbWJlcmlzUG90ZW50aWFsbHlUcnVlSlNfQ09OU1RfQW5vbnltb3VzX2ZpbmRIZWxwZXJGdW5jdGlvbl9maW5kSGVscGVyQ2xhc3NDbG9zdXJlQm91bmRDbG9zdXJlX2ZpbmRSdGlDbGFzc19UeXBlVHlwZUltcGxDb25zdGFudE1hcEpTSW52b2NhdGlvbk1pcnJvckphdmFTY3JpcHRJbmRleGluZ0JlaGF2aW9yX1N0YWNrVHJhY2VDb25zdGFudFN0cmluZ01hcENvbnN0YW50UHJvdG9NYXBHZW5lcmFsQ29uc3RhbnRNYXBDcmVhdGVzUmV0dXJuc0pTTmFtZU5hdGl2ZWFzc2VydFVucmVhY2hhYmxlZ2V0SXNvbGF0ZUFmZmluaXR5VGFncmVxdWlyZXNQcmVhbWJsZV9sb2FkTGlicmFyeVdyYXBwZXJpYWVpb29yZXVud3JhcEV4Y2VwdGlvbmlzRnVuY3Rpb25jaGVja0ludGNoZWNrTnVtY2hlY2tTdHJpbmd3cmFwRXhjZXB0aW9uY29udmVydERhcnRDbG9zdXJlVG9KU2dldFRyYWNlRnJvbUV4Y2VwdGlvbl9maW5kUnRpRnVuY3Rpb25fY3JlYXRlUnVudGltZVR5cGVnZXRGYWxsVGhyb3VnaEVycm9yX2NyZWF0ZUludm9jYXRpb25NaXJyb3J0aHJvd0N5Y2xpY0luaXRleHRyYWN0VHlwZUFyZ3VtZW50c19jaGVja1R5cGVBcmd1bWVudENvdW50VW5zdXBwb3J0ZWQgaW5zdGFudGlhdGlvbiBhcmd1bWVudCBjb3VudDogdHlwZUxpdGVyYWxfcnRpSW1wbENsYXNzUnRpX3J0aVVuaXZlcnNlQ2xhc3NfVW5pdmVyc2VfZmluZFJ0aUNsYXNzRmllbGRfYXNfaXNfY2hlY2tfZXZhbF9iaW5kYWRkUnVsZXNfaXNCb29sX2FzQm9vbE51bGxhYmxlX2NoZWNrQm9vbE51bGxhYmxlX2FzRG91YmxlTnVsbGFibGVfY2hlY2tEb3VibGVOdWxsYWJsZV9pc0ludF9hc0ludE51bGxhYmxlX2NoZWNrSW50TnVsbGFibGVfaXNOdW1fYXNOdW1OdWxsYWJsZV9jaGVja051bU51bGxhYmxlX2lzU3RyaW5nX2FzU3RyaW5nTnVsbGFibGVfY2hlY2tTdHJpbmdOdWxsYWJsZXZhbGlkYXRlZE5hdGl2ZVR5cGVkQXJyYXlPZkludE5hdGl2ZVR5cGVkQXJyYXlPZkRvdWJsZUpzR2V0TmFtZUpzQnVpbHRpbl9lbnN1cmVNZXRhQW5ub3RhdGlvbnNfTm9JbmxpbmVfVHJ5SW5saW5laXNGcm9tRW52aXJvbm1lbnRDb25zdHJ1Y3RvclVuZXhwZWN0ZWQgZnVuY3Rpb24gaXNKc0ludGVyb3BDbGFzc2lzTmF0aXZlQ2xhc3NtYWluTGlicmFyeWZvckVhY2hMaWJyYXJ5TWVtYmVybG9va3VwQ2xhc3NNZW1iZXJnZXRTdXBlckNsYXNzZm9yRWFjaExvY2FsQ2xhc3NNZW1iZXJmb3JFYWNoQ2xhc3NNZW1iZXJmb3JFYWNoQ29uc3RydWN0b3Jza2lwVW5uYW1lZE1peGluQXBwbGljYXRpb25zZm9yRWFjaFN1cGVydHlwZWdldFRoaXNUeXBlaXNHZW5lcmljQ2xhc3Npc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uZ2V0VHlwZVZhcmlhYmxlQm91bmRnZXRGdW5jdGlvblR5cGVnZXRGdW5jdGlvblR5cGVWYXJpYWJsZXNnZXRMb2NhbEZ1bmN0aW9uVHlwZWdldEZpZWxkVHlwZWdldFVuYWxpYXNlZFR5cGVpc0VudW1DbGFzc0tFbGVtZW50RW52aXJvbm1lbnRmb3JFYWNoTWl4aW5nZXRGaWVsZENvbnN0YW50Rm9yVGVzdGluZ2lzRGVmZXJyZWRMb2FkTGlicmFyeUdldHRlcmdldEltcG9ydHNnZXRMaWJyYXJ5TWV0YWRhdGFnZXRDbGFzc01ldGFkYXRhZ2V0TWVtYmVyTWV0YWRhdGFpbmNsdWRlUGFyYW1ldGVyTWV0YWRhdGFKRWxlbWVudEVudmlyb25tZW50Zm9yRWFjaEluamVjdGVkQ2xhc3NNZW1iZXJmb3JFYWNoQ29uc3RydWN0b3JCb2R5Zm9yRWFjaE5lc3RlZENsb3N1cmVpc1N1cGVyTWl4aW5BcHBsaWNhdGlvbmdldEVmZmVjdGl2ZU1peGluQ2xhc3NnZXRUeXBlVmFyaWFibGVEZWZhdWx0VHlwZWdldEFzeW5jT3JTeW5jU3RhckVsZW1lbnRUeXBlZ2V0RnVuY3Rpb25Bc3luY09yU3luY1N0YXJFbGVtZW50VHlwZWZvckVhY2hJbnN0YW5jZUZpZWxkZm9yRWFjaERpcmVjdEluc3RhbmNlRmllbGRmb3JFYWNoUGFyYW1ldGVyZm9yRWFjaFBhcmFtZXRlckFzTG9jYWxnbG9iYWxMb2NhbHNNYXBkZWZlcnJlZF9sb2FkQ29uc3RhbnRWYWx1ZUNvbnN0cnVjdGVkQ29uc3RhbnRWYWx1ZVR5cGVDb25zdGFudFZhbHVlRGVmZXJyZWRHbG9iYWxDb25zdGFudFZhbHVlSW5zdGFudGlhdGlvbkNvbnN0YW50VmFsdWVLTG9jYWxGdW5jdGlvbkltcGFjdFVzZUNhc2VXb3JsZEltcGFjdFZpc2l0b3JJbXBsT3V0cHV0VW5pdGlzTWFpbk91dHB1dF9pbXBvcnRzb3RoZXJTaXplb3RoZXJJbXBvcnRzY21waW1wb3J0c0ZvclRlc3RpbmdPdXRwdXRVbml0KF9tYWluT3V0cHV0VW5pdF9hbGxPdXRwdXRVbml0c0lNUEFDVF9VU0VEZWZlcnJlZCBsb2FkX2ltcG9ydERlZmVyTmFtZV9jbGFzc1RvU2V0X21lbWJlclRvU2V0X2xvY2FsRnVuY3Rpb25Ub1NldF9jb25zdGFudFRvU2V0X2RlZmVycmVkSW1wb3J0RGVzY3JpcHRpb25zaW1wb3J0U2V0c21haW5TZXR1bml0RGVmZXJyZWQgTG9hZGluZ19hbGxEZWZlcnJlZEltcG9ydHNjb21tb25FbGVtZW50c19pc0V4cGxpY2l0bHlEZWZlcnJlZGNsYXNzSW1wb3J0c1RvbWVtYmVySW1wb3J0c1RvdHlwZWRlZkltcG9ydHNUb19jb2xsZWN0RGlyZWN0TWVtYmVyRGVwZW5kZW5jaWVzaXNNZW1iZXJVc2VkX2NvbGxlY3REZXBlbmRlbmNpZXNGcm9tSW1wYWN0Y29sbGVjdENvbnN0YW50c0luQm9keV9jb2xsZWN0QWxsRWxlbWVudHNBbmRDb25zdGFudHNSZXNvbHZlZEZyb21DbGFzc2FkZExpdmVJbnN0YW5jZU1lbWJlcl9jb2xsZWN0VHlwZURlcGVuZGVuY2llc19jb2xsZWN0QWxsRWxlbWVudHNBbmRDb25zdGFudHNSZXNvbHZlZEZyb21NZW1iZXJpc0dlbmVyYXRpdmVDb25zdHJ1Y3RvcmNvbGxlY3RDb25zdGFudHNGcm9tTWV0YWRhdGFfY29sbGVjdFR5cGVBcmd1bWVudERlcGVuZGVuY2llc3dvcmxkSW1wYWN0dmlzaXRJbXBhY3R1c2VkRW50aXR5VW5leHBlY3RlZCBzdGF0aWMgdXNlIGxvY2FsRnVuY3Rpb25sb2NhbEZ1bmN0aW9uc1N0YXRpY1VzZUtpbmQuQ09OU1RSVUNUT1JfSU5WT0tFU3RhdGljVXNlS2luZC5DT05TVF9DT05TVFJVQ1RPUl9JTlZPS0VTdGF0aWNVc2VLaW5kLlNUQVRJQ19JTlZPS0VTdGF0aWNVc2VLaW5kLkNMT1NVUkVfQ0FMTFN0YXRpY1VzZUtpbmQuRElSRUNUX0lOVk9LRVR5cGVVc2VLaW5kLlRZUEVfTElURVJBTGlzSW50ZXJmYWNlVHlwZVR5cGVVc2VLaW5kLkNPTlNUX0lOU1RBTlRJQVRJT05UeXBlVXNlS2luZC5JTlNUQU5USUFUSU9OVHlwZVVzZUtpbmQuTkFUSVZFX0lOU1RBTlRJQVRJT05UeXBlVXNlS2luZC5JU19DSEVDS1R5cGVVc2VLaW5kLkNBVENIX1RZUEVUeXBlVXNlS2luZC5BU19DQVNUZ2V0RXhwbGljaXRDYXN0Q2hlY2tQb2xpY3lUeXBlVXNlS2luZC5JTVBMSUNJVF9DQVNUZ2V0SW1wbGljaXREb3duY2FzdENoZWNrUG9saWN5VHlwZVVzZUtpbmQuUEFSQU1FVEVSX0NIRUNLZ2V0UGFyYW1ldGVyQ2hlY2tQb2xpY3lUeXBlVXNlS2luZC5SVElfVkFMVUVUeXBlVXNlS2luZC5UWVBFX0FSR1VNRU5UVW5leHBlY3RlZCB0eXBlIHVzZTogX3VwZGF0ZUNvbnN0YW50UmVjdXJzaXZlb2xkU2V0cXVldWVjdXJyZW50U2V0X3VwZGF0ZUNsYXNzUmVjdXJzaXZlZ2V0RGVwZW5kZW5jaWVzVHJpZWQgdG8gYXNzaWduICB0byB0aGUgbWFpbiBvdXRwdXQgdW5pdCwgYnV0IGl0IHdhcyBhc3NpZ25lZCB0byBfcHJvY2Vzc0RlcGVuZGVuY2llc191cGRhdGVNZW1iZXJSZWN1cnNpdmVfdXBkYXRlTG9jYWxGdW5jdGlvbl9zaG91bGRBZGREZWZlcnJlZERlcGVuZGVuY3lfZml4RGVwZW5kZW5jeUluZm8nIGlzIGRlZmVycmVkIGJ1dCBhcHBlYXJzIHRvIGJlIGluZmVycmVkIGFzIGEgcmV0dXJuIHR5cGUgb3IgYSB0eXBlIHBhcmFtZXRlciAoZGFydGJ1Zy5jb20vMzUzMTEpLl9maXhDbGFzc0RlcGVuZGVuY3lJbmZvX2ZpeE1lbWJlckRlcGVuZGVuY3lJbmZvX2ZpeENvbnN0YW50RGVwZW5kZW5jeUluZm9yZXByZXNlbnRlZFR5cGVDbGFzcyAoaW4gY29uc3RhbnQpIFR5cGVkZWYgc2luZ2xldG9uX2NyZWF0ZU91dHB1dFVuaXRzYWRkVW5pdGltcG9ydFNldF9zZXR1cEh1bmtzVG9Mb2FkaHVua3NUb0xvYWR1c2VkSW1wb3J0TmFtZXNjb21wdXRlSW1wb3J0RGVmZXJOYW1lc29ydGVkT3V0cHV0VW5pdHNvdXRwdXRVbml0X2J1aWxkUmVzdWx0YmFja2VuZFVzYWdlZ2xvYmFsRnVuY3Rpb25EZXBlbmRlbmNpZXNnbG9iYWxDbGFzc0RlcGVuZGVuY2llc25leHRJdGVtY2xhc3NNYXBtZW1iZXJNYXBsb2NhbEZ1bmN0aW9uTWFwY29uc3RhbnRNYXBjbGVhbnVwcHJlcGFyZWNoZWNrRm9yRGVmZXJyZWRFcnJvckNhc2VzaWdub3JlRW50aXR5SW5EdW1wZHVtcGVsZW1lbnRNYXBpZCBjbHMgbWVtYmVybWVtYmVyQ29udGV4dDxhbm9ueW1vdXM+IGxvY2FsaXNQcmltaXRpdmV1bml0VGV4dCA8TUFJTiBVTklUPiBpbXBvcnRzOmVuY2xvc2luZ0xpYnJhcnlVcmkKICAgCiBlbGVtZW50czoKIGNvbnN0YW50czoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KT3V0cHV0IHVuaXQ6IEltcG9ydERlc2NyaXB0aW9uaW1wb3J0aW5nVXJpX2ltcG9ydGluZ0xpYnJhcnlpbXBvcnRpbmdMaWJyYXJ5bWFpbkxpYnJhcnlVcmlfRGVmZXJyZWRJbXBvcnRJbXBvcnRTZXRMYXR0aWNlX2ltcG9ydEluZGV4X2VtcHR5U2V0X2FkZF93cmFwYUltcG9ydHNiSW1wb3J0c2xhc3RBSW5kZXhsYXN0QkluZGV4aW1wb3J0QWltcG9ydEJJbXBvcnRTZXRfdHJhbnNpdGlvbnNJbXBvcnRTZXQoc2l6ZTogV29ya1F1ZXVlcGVuZGluZ0NsYXNzZXNwZW5kaW5nTWVtYmVyc3BlbmRpbmdDb25zdGFudHNfaW1wb3J0U2V0c2ltcG9ydHNUb0FkZENsYXNzV29ya0l0ZW1NZW1iZXJXb3JrSXRlbUNvbnN0YW50V29ya0l0ZW1MYXRlT3V0cHV0VW5pdERhdGFCdWlsZGVyX291dHB1dFVuaXREYXRhcmVnaXN0ZXJDb2xvY2F0ZWRNZW1iZXJzZXhpc3RpbmdFbnRpdHluZXdFbnRpdHlfbWVtYmVyVG9Vbml0b3V0cHV0VW5pdEZvck1lbWJlcm91dHB1dC11bml0LWRhdGFtYWluT3V0cHV0VW5pdF9jbGFzc1RvVW5pdF9sb2NhbEZ1bmN0aW9uVG9Vbml0X2NvbnN0YW50VG9Vbml0Y29udmVydENsYXNzTWFwY29udmVydE1lbWJlck1hcGNvbnZlcnRDb25zdGFudE1hcGNsYXNzVG9Vbml0bWVtYmVyVG9Vbml0Y29uc3RhbnRUb1VuaXRkZWZlcnJlZEltcG9ydERlc2NyaXB0aW9uc3JlYWRJbXBvcnRzcmVhZENsYXNzTWFwcmVhZE1lbWJlck1hcHJlYWRDb25zdGFudE1hcGltcG9ydERlZmVyTmFtZXJlYWRJbXBvcnRNYXByZWFkU3RyaW5nTWFwb3V0cHV0VW5pdEluZGljZXN3cml0ZUltcG9ydHN3cml0ZUNsYXNzTWFwd3JpdGVNZW1iZXJNYXB3cml0ZUNvbnN0YW50TWFwd3JpdGVJbXBvcnRNYXB3cml0ZVN0cmluZ01hcGltcG9ydERlc2NyaXB0aW9ub3V0cHV0VW5pdEZvckNsYXNzTm8gb3V0cHV0IHVuaXQgZm9yIGNsYXNzIG91dHB1dFVuaXRGb3JDbGFzc0ZvclRlc3RpbmdObyBvdXRwdXQgdW5pdCBmb3IgbWVtYmVyIG91dHB1dFVuaXRGb3JNZW1iZXJGb3JUZXN0aW5nY29uc3RhbnRzRm9yVGVzdGluZ291dHB1dFVuaXRGb3JDb25zdGFudG91dHB1dFVuaXRGb3JDb25zdGFudEZvclRlc3Rpbmdpc0RlZmVycmVkQ2xhc3NoYXNPbmx5Tm9uRGVmZXJyZWRJbXBvcnRQYXRoc291dHB1dFVuaXRGcm9tb3V0cHV0VW5pdFRvaGFzT25seU5vbkRlZmVycmVkSW1wb3J0UGF0aHNUb0NvbnN0YW50cmVnaXN0ZXJDb25zdGFudERlZmVycmVkVXNlZ2V0SW1wb3J0RGVmZXJOYW1lTm8gZGVmZXJyZWQgbmFtZSBmb3IgZ2V0SW1wb3J0TmFtZXNjb21wdXRlRGVmZXJyZWRNYXBvbWl0dGVkVW5pdHM8dW5uYW1lZD5wYXJ0RmlsZU5hbWVzRGVwZW5kZW5jaWVzcmVnaXN0ZXJJbXBvcnREZXBlbmRlbmN5SW5mb1R5cGVEZXBlbmRlbmN5VmlzaXRvcl9kZXBlbmRlbmNpZXNfaW1wb3J0X2NvbW1vbkVsZW1lbnRzdmlzaXRGdXR1cmVPclR5cGV1bmFsaWFzZWRwYXJhbWV0ZXJUeXBlc29wdGlvbmFsUGFyYW1ldGVyVHlwZXNuYW1lZFBhcmFtZXRlclR5cGVzdmlzaXRGdW5jdGlvblR5cGVWYXJpYWJsZXZpc2l0VHlwZVZhcmlhYmxlVHlwZWRlZmVycmVkUGFydEZpbGVOYW1lYWRkRXh0ZW5zaW9ub3V0UGF0aG91dE5hbWUucGFydC5qc2RhcnQyanMuZGlhZ25vc3RpY3MuY29kZV9sb2NhdGlvbkNvZGVMb2NhdGlvbnJlbGF0aXZpemVTY2hlbWVMb2NhdGlvblBhY2thZ2VMb2NhdGlvblVyaUxvY2F0aW9uQW55TG9jYXRpb25kdW1wX2luZm9DaHVua2VkQ29udmVyc2lvblNpbmtTdHJpbmdDb252ZXJzaW9uU2lua0ludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZUdsb2JhbFR5cGVJbmZlcmVuY2VNZW1iZXJSZXN1bHRqc0FzdEVsZW1lbnRJbmZvQ29sbGVjdG9yX2dsb2JhbEluZmVyZW5jZVJlc3VsdHNfZW50aXR5VG9JbmZvX2NvbnN0YW50VG9JbmZvX291dHB1dFRvSW5mb19jb25zdGFudFRvTm9kZV9ub2RlRGF0YV91bml0SW5mb0ZvckNvbnN0YW50c2hvdWxkS2VlcGltcGFjdHNpbmxpbmVDb3VudGxpYm5hbWVzaXplT2ZmdW5jdGlvbkluZm92aXNpdEZ1bmN0aW9udG9wTGV2ZWxGdW5jdGlvbnNmaWVsZEluZm90b3BMZXZlbFZhcmlhYmxlc2NsYXp6X3Jlc3VsdE9mTWVtYmVycmVzdWx0T2ZNZW1iZXJfcmVzdWx0T2ZQYXJhbWV0ZXJyZXN1bHRPZlBhcmFtZXRlcmNvbnRhaW5pbmdDbGFzc2lzRGVmaW5pdGVseVRydWVjb2RlT2ZfdW5pdEluZm9Gb3JNZW1iZXJmaWVsZERhdGFmaWVsZEFuYWx5c2lzZ2V0RmllbGREYXRhY292ZXJhZ2VJZGNsb3N1cmVTaXplX2FkZENsb3N1cmVJbmZvX3VuaXRJbmZvRm9yQ2xhc3NmdW5jdGlvbnNjbG9zdXJlSW5mb2Nsb3N1cmVzQ2xhc3MgbWVtYmVyIG5vdCBhIGZ1bmN0aW9uIG9yIGZpZWxkbmVlZGVkQ2xhc3Nlc3Zpc2l0Q2xvc3VyZUNsYXNzY2FsbE1ldGhvZGlzRmFjdG9yeUNvbnN0cnVjdG9yaW5mZXJyZWRQYXJhbWV0ZXJUeXBlc3BhcmFtZXRlckluZGV4c2lkZUVmZmVjdHNnZXRTaWRlRWZmZWN0c09mRWxlbWVudGlubGluZWRDb3VudGZ1bmN0aW9uS2luZG5lc3RlZENsb3N1cmVzY2xvc3VyZV9pbmZvRnJvbU91dHB1dFVuaXRnZW5lcmF0ZWRTaXplU2VsZWN0aW9uc2VsZWN0ZWRFbnRpdHlyZWNlaXZlckNvbnN0cmFpbnRJbmZvUmVwb3J0ZXJyZXBvcnRJbmxpbmVkaW5saW5lZEZyb21EdW1wIGluZm91c2VCaW5hcnlGb3JtYXRpbmZvQ29sbGVjdG9yX3Byb2dyYW1TaXplX2VudGl0eVRvTm9kZXNpbmxpbmVNYXBfc3RhY2tEdW1wIEluZm9yZWdpc3RlckltcGFjdHVucmVnaXN0ZXJJbXBhY3RnZXRSZXRhaW5pbmdzZWxlY3Rpb25zbG9jYXRlTWVtYmVyc3JlZ2lzdGVyRW50aXR5QXN0cmVnaXN0ZXJDb25zdGFudEFzdHNob3VsZEVtaXRUZXh0ZW50ZXJOb2RlZW1pdF90ZXh0ZXhpdE5vZGVjbG9zaW5nc2l6ZU9mTm9kZWFzdGFsbEluZm9idWlsZER1bXBJbmZvRGF0YWR1bXBJbmZvQmluYXJ5ZHVtcEluZm9Kc29uanNvbkJ1ZmZlcnN0YXJ0Q2h1bmtlZENvbnZlcnNpb25pc0JhY2t3YXJkQ29tcGF0aWJsZWluZm8uanNvblZpZXcgdGhlIGR1bXBlZCAuaW5mby5qc29uIGZpbGUgYXQgaHR0cHM6Ly9kYXJ0LWxhbmcuZ2l0aHViLmlvL2R1bXAtaW5mby12aXN1YWxpemVyLmluZm8uZGF0YVVzZSBgcGFja2FnZTpkYXJ0MmpzX2luZm9gIHRvIHBhcnNlIGFuZCBwcm9jZXNzIHRoZSBkdW1wZWQgLmluZm8uZGF0YSBmaWxlLnN0b3B3YXRjaGZ1bmN0aW9uRW50aXRpZXNzZWxlY3Rpb251c2VJbmZvZmllbGRFbnRpdHlvdXRlckluZm9pbmxpbmVkaW5saW5lZEluZm9kZWZlcnJlZEZpbGVzZW50cnlwb2ludGRhcnQyanNWZXJzaW9uY29tcGlsYXRpb25Nb21lbnRjb21waWxhdGlvbkR1cmF0aW9udG9Kc29uRHVyYXRpb25kdW1wSW5mb0R1cmF0aW9ubm9TdWNoTWV0aG9kRW5hYmxlZGlzTm9TdWNoTWV0aG9kVXNlZGlzUnVudGltZVR5cGVVc2VkaXNJc29sYXRlSW5Vc2Vpc0Z1bmN0aW9uQXBwbHlVc2VkaXNNaXJyb3JzVXNlZG1pbmlmaWVkX0NvZGVEYXRhZW50aXRpZXNFbnRpdHlMaWJyYXJ5RW50aXR5SW1wb3J0RW50aXR5aW1wb3J0KCBkZWZlcnJlZENsYXNzRW50aXR5aXNDbG9zdXJlVHlwZWRlZkVudGl0eVR5cGVWYXJpYWJsZUVudGl0eXR5cGVEZWNsYXJhdGlvbkZpZWxkRW50aXR5RnVuY3Rpb25FbnRpdHlwYXJhbWV0ZXJTdHJ1Y3R1cmVTWU5DX1NUQVJBU1lOQ19TVEFSaXNZaWVsZGluZ2FzeW5jUGFyc2VyU3RhdGVDb25zdHJ1Y3RvckVudGl0eUNvbnN0cnVjdG9yQm9keUVudGl0eUxvY2FsUGFyYW1ldGVyU3RydWN0dXJlcGFyYW1ldGVyLXN0cnVjdHVyZXJlcXVpcmVkUGFyYW1ldGVyc2Zyb21UeXBlb3B0aW9uYWxQYXJhbWV0ZXJzdG90YWxQYXJhbWV0ZXJzY2FsbFN0cnVjdHVyZXNob3J0VGV4dFBhcmFtZXRlclN0cnVjdHVyZShyZXF1aXJlZFBhcmFtZXRlcnM9cG9zaXRpb25hbFBhcmFtZXRlcnM9bmFtZWRQYXJhbWV0ZXJzPXt9LHR5cGVQYXJhbWV0ZXJzPWRhcnQyanMuZW5xdWV1ZVN0YXRpY1VzZUtpbmRUeXBlVXNlS2luZF9yZXNvbHV0aW9uY29kZWdlbkVucXVldWVyRm9yVGVzdGluZ0VucXVldWVSZXNvbHV0aW9uRW5xdWV1ZXIgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgeWV0Lm9uRW1wdHlGb3JUZXN0aW5nc2tpcEVucXVldWVyQ2hlY2tGb3JUZXN0aW5naXNSZXNvbHV0aW9uUXVldWVxdWV1ZUlzRW1wdHlFbnF1ZXVlckxpc3RlbmVycmVnaXN0ZXJJbnN0YW50aWF0ZWRUeXBlaXNHbG9iYWxuYXRpdmVVc2FnZXJlZ2lzdGVySW1wbGVtZW50ZWRDbGFzc3JlZ2lzdGVyR2V0T2ZTdGF0aWNGdW5jdGlvbnJlZ2lzdGVyQ2xvc3VyaXplZE1lbWJlcnJlZ2lzdGVyVXNlZEVsZW1lbnRyZWdpc3RlclVzZWRDb25zdGFudG9uUXVldWVPcGVub25RdWV1ZUVtcHR5cmVjZW50Q2xhc3Nlc29uUXVldWVDbG9zZWRFbnF1ZXVlckltcGxfaW1wYWN0U3RyYXRlZ3ljaGVja0NsYXNzcHJvY2Vzc1N0YXRpY1VzZXByb2Nlc3NUeXBlVXNlcHJvY2Vzc0R5bmFtaWNVc2Vwcm9jZXNzQ29uc3RhbnRVc2VjaGVja0VucXVldWVyQ29uc2lzdGVuY3lyZXNvbHV0aW9uLmNoZWNrZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzX3JlY2VudENsYXNzZXNfcmVjZW50Q29uc3RhbnRzX3dvcmxkQnVpbGRlcl93b3JrSXRlbUJ1aWxkZXJfYW5ub3RhdGlvbnNEYXRhX2ltcGFjdFZpc2l0b3JfcXVldWVyZXNvbHV0aW9uIGVucXVldWVyIHF1ZXVlIGlzIG5vdCBlbXB0eS5fcmVnaXN0ZXJJbnN0YW50aWF0ZWRUeXBlZ2xvYmFsRGVwZW5kZW5jeXJlc29sdXRpb24udHlwZVVzZXJlZ2lzdGVyVHlwZUluc3RhbnRpYXRpb25fYXBwbHlDbGFzc1VzZXByb2Nlc3NDbGFzc01lbWJlcnN1c2VTZXRVbmVucXVldWVkIHVzZSBvZiBNZW1iZXJVc2UuTk9STUFMTWVtYmVyVXNlLkNMT1NVUklaRV9JTlNUQU5DRU1lbWJlclVzZS5DTE9TVVJJWkVfU1RBVElDX2FwcGx5TWVtYmVyVXNlX2FkZFRvV29ya0xpc3RfcmVnaXN0ZXJDbG9zdXJpemVkTWVtYmVyZ2V0IG9mIHN0YXRpYyBmdW5jdGlvbkNsYXNzVXNlLklOU1RBTlRJQVRFRGluc3RhbnRpYXRlZCBjbGFzc0NsYXNzVXNlLklNUExFTUVOVEVEaW1wbGVtZW50ZWQgY2xhc3NyZXNvbHV0aW9uLmR5bmFtaWNVc2VyZXNvbHV0aW9uLmNvbnN0YW50VXNlY29uc3RhbnQgdXNlcmVzb2x1dGlvbi5zdGF0aWNVc2VfcmVnaXN0ZXJJc0NoZWNrcmVnaXN0ZXJUeXBlVmFyaWFibGVUeXBlTGl0ZXJhbHJlZ2lzdGVySXNDaGVja2Nsb3N1cml6ZWQgbWVtYmVyX2ZvckVhY2hpc01lbWJlclByb2Nlc3NlZHJlZ2lzdGVyUHJvY2Vzc2VkTWVtYmVycmVjZW50c19vblF1ZXVlRW1wdHlFbnF1ZXVlcihwcm9jZXNzZWRNZW1iZXJzcmVnaXN0ZXJQcm9jZXNzZWRFbGVtZW50SW50ZXJuYWx3b3JrSXRlbWNyZWF0ZVdvcmtJdGVtUmVzb2x1dGlvbiB3b3JrIGxpc3QgaXMgY2xvc2VkLiBUcnlpbmcgdG8gYWRkIHVzZWQgZWxlbWVudEVucXVldWVySW1wbEltcGFjdFZpc2l0b3JXb3JrSXRlbUJ1aWxkZXJkYXJ0MmpzLmZyb250ZW5kX3N0cmF0ZWd5RnJvbnRlbmRTdHJhdGVneW5vU3VjaE1ldGhvZFJlZ2lzdHJ5aW1wYWN0QnVpbGRlckFubm90YXRpb25Qcm9jZXNzb3JleHRyYWN0TmF0aXZlQW5ub3RhdGlvbnNleHRyYWN0SnNJbnRlcm9wQW5ub3RhdGlvbnNwcm9jZXNzSnNJbnRlcm9wQW5ub3RhdGlvbnNuYXRpdmVEYXRhQnVpbGRlckltcGFjdENhY2hlRGVsZXRlcmRhcnQyanMuYWJzdHJhY3RfdmFsdWVfZG9tYWluUHJpbWl0aXZlQ29uc3RhbnRWYWx1ZUFic3RyYWN0Qm9vbFRydWVGYWxzZU1heWJlaXNEZWZpbml0ZWx5RmFsc2Vpc1BvdGVudGlhbGx5RmFsc2V0cnVlT3JNYXliZXRydWVPckZhbHNlbWF5YmVPckZhbHNlQWJzdHJhY3RCb29sLmNyZWF0ZURvbWFpbmNyZWF0ZVNlbGVjdG9yU3RyYXRlZ3lBYnN0cmFjdFZhbHVlQWJzdHJhY3RWYWx1ZVdpdGhQcmVjaXNpb25hYnN0cmFjdFZhbHVlaXNQcmVjaXNlQWJzdHJhY3RWYWx1ZVdpdGhQcmVjaXNpb24oLCBpc1ByZWNpc2U6IEFic3RyYWN0VmFsdWVEb21haW5ub25OdWxsVHlwZWdyb3dhYmxlTGlzdFR5cGVmaXhlZExpc3RUeXBldWludDMxVHlwZXVpbnQzMlR5cGVwb3NpdGl2ZUludFR5cGVjb25zdExpc3RUeXBlY29uc3RTZXRUeXBlY29uc3RNYXBUeXBlZW1wdHlUeXBlc3luY1N0YXJJdGVyYWJsZVR5cGVhc3luY0Z1dHVyZVR5cGVhc3luY1N0YXJTdHJlYW1UeXBlY3JlYXRlRnJvbVN0YXRpY1R5cGVjbGFzc1JlbGF0aW9uQ2xhc3NSZWxhdGlvbi5zdWJ0eXBlY3JlYXRlTm9uTnVsbEV4YWN0Y3JlYXRlTnVsbGFibGVFeGFjdGNyZWF0ZU5vbk51bGxTdWJjbGFzc2NyZWF0ZU5vbk51bGxTdWJ0eXBlY3JlYXRlTnVsbGFibGVTdWJ0eXBlaXNUeXBlZEFycmF5Y291bGRCZVR5cGVkQXJyYXlleGNsdWRlTnVsbGluY2x1ZGVOdWxsY29udGFpbnNUeXBlY29udGFpbnNPbmx5VHlwZWlzSW5zdGFuY2VPZk9yTnVsbGlzSW5zdGFuY2VPZmlzRXhhY3Rpc0V4YWN0T3JOdWxsZ2V0RXhhY3RDbGFzc2lzUHJpbWl0aXZlTnVtYmVyaXNQcmltaXRpdmVCb29sZWFuaXNQcmltaXRpdmVBcnJheWlzSW5kZXhhYmxlUHJpbWl0aXZlaXNGaXhlZEFycmF5aXNFeHRlbmRhYmxlQXJyYXlpc011dGFibGVBcnJheWlzTXV0YWJsZUluZGV4YWJsZWlzQXJyYXlpc1ByaW1pdGl2ZVN0cmluZ2lzSW50ZXJjZXB0b3Jpc0ludGVnZXJpc1VJbnQzMmlzVUludDMxaXNQb3NpdGl2ZUludGVnZXJpc1Bvc2l0aXZlSW50ZWdlck9yTnVsbGlzSW50ZWdlck9yTnVsbGlzTnVtYmVyaXNOdW1iZXJPck51bGxpc0RvdWJsZWlzRG91YmxlT3JOdWxsaXNCb29sZWFuaXNCb29sZWFuT3JOdWxsaXNTdHJpbmdpc1N0cmluZ09yTnVsbGlzUHJpbWl0aXZlT3JOdWxsdW5pb25PZk1hbnlhcmVEaXNqb2ludGNvbXB1dGVBYnN0cmFjdFZhbHVlRm9yQ29uc3RhbnRpc0NvbnRhaW5lcmNyZWF0ZUNvbnRhaW5lclZhbHVlb3JpZ2luYWxWYWx1ZWFsbG9jYXRpb25Ob2RlYWxsb2NhdGlvbkVsZW1lbnRnZXRDb250YWluZXJFbGVtZW50VHlwZWdldENvbnRhaW5lckxlbmd0aGNyZWF0ZVNldFZhbHVlZ2V0U2V0RWxlbWVudFR5cGVjcmVhdGVNYXBWYWx1ZWdldE1hcEtleVR5cGVnZXRNYXBWYWx1ZVR5cGVpc0RpY3Rpb25hcnljcmVhdGVEaWN0aW9uYXJ5VmFsdWVtYXBwaW5nc2NvbnRhaW5zRGljdGlvbmFyeUtleWdldERpY3Rpb25hcnlWYWx1ZUZvcktleWlzU3BlY2lhbGl6YXRpb25PZnNwZWNpYWxpemF0aW9uZ2VuZXJhbGl6YXRpb25nZXRHZW5lcmFsaXphdGlvbmdldEFsbG9jYXRpb25Ob2RlZ2V0QWxsb2NhdGlvbkVsZW1lbnRpc1ByaW1pdGl2ZVZhbHVlY3JlYXRlUHJpbWl0aXZlVmFsdWVnZXRQcmltaXRpdmVWYWx1ZWNvbXB1dGVSZWNlaXZlcm5lZWRzTm9TdWNoTWV0aG9kSGFuZGxpbmdnZXRBYnN0cmFjdFZhbHVlRm9yTmF0aXZlTWV0aG9kUGFyYW1ldGVyVHlwZXN1cGVyc2V0c3Vic2V0aXNJbmxvY2F0ZVNpbmdsZU1lbWJlcmlzSnNJbmRleGFibGVBbmRJdGVyYWJsZWlzRml4ZWRMZW5ndGhKc0luZGV4YWJsZWdldENvbXBhY3RUZXh0VHJpdmlhbEFic3RyYWN0VmFsdWVUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpblRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluLmdldERpY3Rpb25hcnlWYWx1ZUZvcktleVRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluLmNvbnRhaW5zRGljdGlvbmFyeUtleVRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluLmdldE1hcFZhbHVlVHlwZVRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluLmdldE1hcEtleVR5cGVUcml2aWFsQWJzdHJhY3RWYWx1ZURvbWFpbi5nZXRTZXRFbGVtZW50VHlwZVRyaXZpYWxBYnN0cmFjdFZhbHVlRG9tYWluLmdldENvbnRhaW5lckVsZW1lbnRUeXBlVHJpdmlhbFNlbGVjdG9yU3RyYXRlZ3ljcmVhdGVTZWxlY3RvckNvbnN0cmFpbnRzaW5pdGlhbENvbnN0cmFpbnRhcHBsaWVkVW5uYW1lZHdvcmxkYXBwbGllc1VubmFtZWRUcml2aWFsVW5pdmVyc2VTZWxlY3RvckNvbnN0cmFpbnRzYWRkUmVjZWl2ZXJDb25zdHJhaW50Y2FuSGl0VHJpdmlhbFVuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50czptYXNrc1VuaXZlcnNlU2VsZWN0b3JDb25zdHJhaW50c1NlbGVjdG9yQ29uc3RyYWludHNTdHJhdGVneVR5cGVHcmFwaEluZmVycmVyY29udGFpbmVyX3R5cGVfbWFzay5kYXJ0ZGljdGlvbmFyeV90eXBlX21hc2suZGFydGZsYXRfdHlwZV9tYXNrLmRhcnRmb3J3YXJkaW5nX3R5cGVfbWFzay5kYXJ0bWFwX3R5cGVfbWFzay5kYXJ0c2V0X3R5cGVfbWFzay5kYXJ0dHlwZV9tYXNrLmRhcnR1bmlvbl90eXBlX21hc2suZGFydHZhbHVlX3R5cGVfbWFzay5kYXJ0Q29tbW9uTWFza3NfY2xvc2VkV29ybGRfZHluYW1pY1R5cGVfbm9uTnVsbFR5cGVfbnVsbFR5cGVfaW50VHlwZV91aW50MzJUeXBlX3VpbnQzMVR5cGVfcG9zaXRpdmVJbnRUeXBlX2RvdWJsZVR5cGVfbnVtVHlwZV9ib29sVHlwZV9mdW5jdGlvblR5cGVfbGlzdFR5cGVfY29uc3RMaXN0VHlwZV9maXhlZExpc3RUeXBlX2dyb3dhYmxlTGlzdFR5cGVfc2V0VHlwZV9jb25zdFNldFR5cGVfbWFwVHlwZV9jb25zdE1hcFR5cGVfc3RyaW5nVHlwZV90eXBlVHlwZV9zeW5jU3Rhckl0ZXJhYmxlVHlwZV9hc3luY0Z1dHVyZVR5cGVfYXN5bmNTdGFyU3RyZWFtVHlwZV9pbmRleGFibGVQcmltaXRpdmVUeXBlX3JlYWRhYmxlQXJyYXlUeXBlX211dGFibGVBcnJheVR5cGVfdW5tb2RpZmlhYmxlQXJyYXlUeXBlX2ludGVyY2VwdG9yVHlwZV9jYW5vbmljYWxpemVkVHlwZU1hc2tzZ2V0Q2FjaGVkTWFza2NyZWF0ZU1hc2tjYWNoZWRNYXNrc2luZGV4YWJsZVByaW1pdGl2ZVR5cGVyZWFkYWJsZUFycmF5VHlwZW11dGFibGVBcnJheVR5cGV1bm1vZGlmaWFibGVBcnJheVR5cGVpbnRlcmNlcHRvclR5cGVzYXRpc2ZpZXNpbnRlcnNlY3RzQ2xhc3NSZWxhdGlvbi5leGFjdENsYXNzUmVsYXRpb24udGhpc0V4cHJlc3Npb250eXBlTWFza19jb250YWluc1R5cGVfY29udGFpbnNPbmx5VHlwZWNvbnRhaW5zT25seV9pc0luc3RhbmNlT2ZPck51bGxpc0ltcGxlbWVudGVkZXhwcmVzc2lvbk1hc2tpc0Rpc2pvaW50aXNOdWxsYWJsZV9pc051bGxzaW5nbGVDbGFzc2lzVmFsdWV2YWx1ZU1hc2tfY2FuQmVQcmltaXRpdmVOdW1iZXJfY2FuQmVQcmltaXRpdmVBcnJheV9jYW5CZVByaW1pdGl2ZUJvb2xlYW5fY2FuQmVQcmltaXRpdmVTdHJpbmdfaXNJbmRleGFibGVQcmltaXRpdmVjb250YWluc09ubHlTdHJpbmdjb250YWluc09ubHlJbnRjb250YWluc09ubHlOdW1faXNOdW1iZXJPck51bGxjb250YWluc09ubHlEb3VibGVjb250YWluc09ubHlCb29sX2lzQm9vbGVhbk9yTnVsbF9pc1ByaW1pdGl2ZU9yTnVsbGZvcndhcmRUb2hhc0FueVN0cmljdFN1YmNsYXNzbWl4aW5Vc2VzT2Zjb250YWluc01hc2tpc0luTWFza2dldFZhbHVlRm9yS2V5Q29udGFpbmVyVHlwZU1hc2tjb250YWluZXItdHlwZS1tYXNrcmVhZFRyZWVOb2RlT3JOdWxscmVhZE1lbWJlck9yTnVsbFR5cGVNYXNrS2luZC5jb250YWluZXJ3cml0ZVRyZWVOb2RlT3JOdWxsd3JpdGVNZW1iZXJPck51bGxlcXVhbHNEaXNyZWdhcmROdWxsZm9yd2FyZEludGVyc2VjdGlvbmlzRW1wdHlPck51bGxuZXdFbGVtZW50VHlwZW5ld0ZvcndhcmRUb0NvbnRhaW5lcigsIGVsZW1lbnQ6ICwgbGVuZ3RoOiBEaWN0aW9uYXJ5VHlwZU1hc2tkaWN0aW9uYXJ5LXR5cGUtbWFza190eXBlTWFwdHlwZU1hcFR5cGVNYXNrS2luZC5kaWN0aW9uYXJ5bmV3S2V5VHlwZW5ld1ZhbHVlVHlwZURpY3Rpb25hcnkoLCBrZXk6IHZhbHVlOiAsIG1hcDogRmxhdFR5cGVNYXNrZmxhdC10eXBlLW1hc2tFTVBUWUVYQUNUU1VCQ0xBU1NTVUJUWVBFbm9uTnVsbEVtcHR5bm9uTnVsbEV4YWN0bm9uTnVsbFN1YmNsYXNzbm9uTnVsbFN1YnR5cGVub3JtYWxpemVkaGFzQW55U3RyaWN0U3VidHlwZWhhc09ubHlTdWJjbGFzc2VzY29tbW9uTWFza3NyZWFkQ2xhc3NPck51bGxUeXBlTWFza0tpbmQuZmxhdHdyaXRlQ2xhc3NPck51bGxfY2xhc3NRdWVyeUNsYXNzUXVlcnkuRVhBQ1Rpc1N1YmNsYXNzQ2xhc3NRdWVyeS5TVUJDTEFTU0NsYXNzUXVlcnkuU1VCVFlQRWlzVW5pb25pc0ZvcndhcmRpbmdpc1NpbmdsZUltcGxlbWVudGF0aW9uT2ZmbGF0T3RoZXJvdGhlckJhc2V1bmlvblNhbWV1bmlvblN0cmljdFN1YmNsYXNzdW5pb25TdHJpY3RTdWJ0eXBlY29tYmluZWRjb21tb25TdWJjbGFzc2VzU3ViY2xhc3NSZXN1bHRLaW5kLkVNUFRZU3ViY2xhc3NSZXN1bHRLaW5kLkVYQUNUMVN1YmNsYXNzUmVzdWx0S2luZC5FWEFDVDJTdWJjbGFzc1Jlc3VsdEtpbmQuU1VCQ0xBU1MxU3ViY2xhc3NSZXN1bHRLaW5kLlNVQkNMQVNTMlN1YmNsYXNzUmVzdWx0S2luZC5TVUJUWVBFMVN1YmNsYXNzUmVzdWx0S2luZC5TVUJUWVBFMlN1YmNsYXNzUmVzdWx0S2luZC5TRVRfaXNEaXNqb2ludEhlbHBlcnN0cmljdFN1YmNsYXNzZXNPZnN0cmljdFN1YnR5cGVzT2ZpbnRlcnNlY3Rpb25TYW1laW50ZXJzZWN0aW9uU3RyaWN0U3ViY2xhc3NpbnRlcnNlY3Rpb25FbXB0eWhhc0VsZW1lbnRJbmhhc0FueVN1YmNsYXNzVGhhdE1peGVzaGFzQW55U3ViY2xhc3NUaGF0SW1wbGVtZW50c2hhc0FueVN1YmNsYXNzT2ZNaXhpblVzZVRoYXRJbXBsZW1lbnRzbWl4aW5Vc2VzbmVlZHNOb1N1Y2hNZXRob2RpbmNsdWRlc0Nsb3N1cmVDYWxsZXZlcnlTdWJ0eXBlSXNTdWJjbGFzc09mT3JNaXhpblVzZU9maXNTdWJjbGFzc09mTWl4aW5Vc2VPZm90aGVyTWFza1tlbXB0eV1udWxsfGV4YWN0PXN1YmNsYXNzPXN1YnR5cGU9Rm9yd2FyZGluZ1R5cGVNYXNrU3ViY2xhc3Mgc2hvdWxkIGltcGxlbWVudCBoYXNoQ29kZSBnZXR0ZXJBbGxvY2F0aW9uVHlwZU1hc2tNYXBUeXBlTWFza21hcC10eXBlLW1hc2tUeXBlTWFza0tpbmQubWFwbmV3TWFwVHlwZU1hc2tNYXAoU2V0VHlwZU1hc2tzZXQtdHlwZS1tYXNrVHlwZU1hc2tLaW5kLnNldFNldChJbmNyZWFzaW5nVHlwZU1hc2tTZXRpc0FsbF9tYXNrczxhbGw+PG5vbmU+VHlwZU1hc2tTZWxlY3RvclN0cmF0ZWd5VHlwZU1hc2tLaW5kVHlwZU1hc2tLaW5kLnVuaW9uVHlwZU1hc2tLaW5kLnZhbHVlZmxhdGNvbnRhaW5lcmRpY3Rpb25hcnlUeXBlTWFza0Nhbm5vdCBjcmVhdGUgZXhhY3QgdHlwZSBtYXNrIGZvciB1bmluc3RhbnRpYXRlZCAuCmV4YWN0T3JFbXB0eUNhbm5vdCBjcmVhdGUgc3ViY2xhc3MgdHlwZSBtYXNrIGZvciB1bmluc3RhbnRpYXRlZCB0b3Btb3N0Z2V0THViT2ZJbnN0YW50aWF0ZWRTdWJjbGFzc2VzZ2V0THViT2ZJbnN0YW50aWF0ZWRTdWJ0eXBlc25vbk51bGxFeGFjdE9yRW1wdHl1bmlvbk9mVW5leHBlY3RlZCBUeXBlTWFza0tpbmQgbm9uRm9yd2FyZGluZ01hc2thc3NlcnRJc05vcm1hbGl6ZWQgaXMgbm90IG5vcm1hbGl6ZWQ6IGdldE5vdE5vcm1hbGl6ZWRSZWFzb25FeGFjdCAgaXMgbm90IGluc3RhbnRpYXRlZC5TdWJjbGFzcyAgZG9lcyBub3QgaGF2ZSBhbnkgc3ViY2xhc3Nlcy5TdWJ0eXBlICBvbmx5IGhhcyBzdWJjbGFzc2VzLnN1Ym1hc2tkaXNqb2ludE1hc2tzc3VibWFza1JlYXNvblN1Ym1hc2sgVW5rbm93biB0eXBlIG1hc2sgVW5pb25UeXBlTWFza3VuaW9uLXR5cGUtbWFza01BWF9VTklPTl9MRU5HVEhQRVJGT1JNX0VYVFJBX0NPTlRBSU5TX0NIRUNLZGlzam9pbnR1bmlvbk9mSGVscGVyZmxhdE1hc2tpbkxpc3RJbmRleGNvdmVyZWRuZXdNYXNrZmxhdHRlbnVzZVN1YmNsYXNzbWFza3NCYXNlc2NhbmRpZGF0ZXNjb21tb25TdXBlcnR5cGVzT2ZiZXN0RWxlbWVudGJlc3RLaW5kYmVzdFNpemVpc0luc3RhbnRpYXRlZFN0cmljdFN1YmNsYXNzaXNFeHBsaWNpdGx5SW5zdGFudGlhdGVkc3RyaWN0U3ViY2xhc3NDb3VudHN0cmljdFN1YnR5cGVDb3VudG5ld0xpc3RpbnRlcnNlY3Rpb25zbmV3SXRlcmFibGVzbG93Q29udGFpbnNDaGVja2NvbnRhaW5lZEluQW55T2ZtYXNrRGlzcmVnYXJkTnVsbGRpc2pvaW50TWFza2NvbnRhaW5lZFR5cGVNYXNrIGJhc2VkIGNvbnRhaW5tZW50IGNoZWNrIGZhaWxlZCBmb3IgbWFza3NTdHJpbmdVbmlvbihWYWx1ZVR5cGVNYXNrdmFsdWUtdHlwZS1tYXNrVmFsdWUoZm9ybWF0VHlwZUVtcHR5bnVsbEZsYWdzdWJGbGFnIHwgaXNDYWxsZWRPbmNldGhyb3dzQWx3YXlzdHlwZU9mU2VuZHR5cGVPZkdldHRlcnR5cGVPZkl0ZXJhdG9ydHlwZU9mSXRlcmF0b3JNb3ZlTmV4dHR5cGVPZkl0ZXJhdG9yQ3VycmVudEdsb2JhbFR5cGVJbmZlcmVuY2VFbGVtZW50RGF0YWNvbXByZXNzVHlwZXNJbmZlcnJlcmFuYWx5emVNYWluaXNUcml2aWFscmVzdWx0VHlwZU9mU2VsZWN0b3Jpc0ZpeGVkQXJyYXlDaGVja2VkRm9yR3Jvd2FibGV0eXBlT2ZOZXdMaXN0dHlwZU9mTGlzdExpdGVyYWxUeXBlIGluZmVyZW5jZXR5cGVzSW5mZXJyZXJJbnRlcm5hbHJlc3VsdHNGb3JUZXN0aW5nbWFpbkVsZW1lbnRyZXN1bHRzbm9TdWNoTWV0aG9kRGF0YWNhdGVnb3JpemVDb21wbGV4SW1wbGVtZW50YXRpb25zR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHNJbXBsZ2xvYmFsLXR5cGUtaW5mZXJlbmNlLXJlc3VsdHNfZGVhZEZpZWxkUmVzdWx0X2RlYWRNZXRob2RSZXN1bHRfdHJpdmlhbFBhcmFtZXRlclJlc3VsdG1lbWJlclJlc3VsdHNwYXJhbWV0ZXJSZXN1bHRzY2hlY2tlZEZvckdyb3dhYmxlTGlzdHNyZXR1cm5zTGlzdEVsZW1lbnRUeXBlU2V0X2FsbG9jYXRlZExpc3RzZ2V0TWVtYmVyQ29udGV4dE5vZGVyZWFkTG9jYWxNYXByZWFkVHJlZU5vZGVzYWxsb2NhdGVkTGlzdHNyZWFkVHJlZU5vZGVNYXB3cml0ZUxvY2FsTWFwd3JpdGVUcmVlTm9kZXN3cml0ZVRyZWVOb2RlTWFwdW5leHBlY3RlZCBpbnB1dDogQ29uc3RydWN0b3JCb2R5RWxlbWVudHMgYXJlIGNyZWF0ZWQgYWZ0ZXIgZ2xvYmFsIHR5cGUgaW5mZXJlbmNlLCBubyBkYXRhIGlzIGF2YWlhYmxlIGZvciB0aGVtLmlzQ2xvc3VyZUNhbGxpc0luZGV4U2V0cmV0dXJuc0xpc3RFbGVtZW50VHlwZXJldHVybnNNYXBWYWx1ZVR5cGV0eXBlT2ZNZW1iZXJXaXRoU2VsZWN0b3Jpc0luZGV4VW5leHBlY3RlZCBtZW1iZXIgY3RvckNhbGxHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0SW1wbGdsb2JhbC10eXBlLWluZmVyZW5jZS1tZW1iZXItcmVzdWx0X2RhdGF3cml0ZVZhbHVlT3JOdWxsVHJpdmlhbEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzX3RyaXZpYWxNZW1iZXJSZXN1bHRUcml2aWFsR2xvYmFsVHlwZUluZmVyZW5jZU1lbWJlclJlc3VsdFRyaXZpYWxHbG9iYWxUeXBlSW5mZXJlbmNlTWVtYmVyUmVzdWx0LndyaXRlVG9EYXRhU2lua0RlYWRGaWVsZEdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRkb21haW5EZWFkRmllbGRHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0LndyaXRlVG9EYXRhU2lua0RlYWRNZXRob2RHbG9iYWxUeXBlSW5mZXJlbmNlUmVzdWx0ZGFydDJqcy5zb3VyY2VfaW5mb3JtYXRpb25KYXZhU2NyaXB0Tm9kZVNvdXJjZUluZm9ybWF0aW9uaGFzU291cmNlSW5mb3JtYXRpb25wb3NpdGlvblNvdXJjZUluZm9ybWF0aW9ud3JpdGVUb0RhdGFTaW5rSW50ZXJuYWxzdGFydFBvc2l0aW9uaW5uZXJQb3NpdGlvbmVuZFBvc2l0aW9uc291cmNlTG9jYXRpb25zaW5saW5pbmdDb250ZXh0RnJhbWVDb250ZXh0ZnJhbWUtY29udGV4dGNhbGxJbmZvcm1hdGlvbmlubGluZWRNZXRob2ROYW1lKEZyYW1lQ29udGV4dDogU291cmNlSW5mb3JtYXRpb25TdHJhdGVneWNyZWF0ZUJ1aWxkZXJGb3JDb250ZXh0YnVpbGRTb3VyY2VNYXBwZWRNYXJrZXJvbkNvbXBsZXRlU291cmNlSW5mb3JtYXRpb25CdWlsZGVyZm9yQ29udGV4dGJ1aWxkRGVjbGFyYXRpb25idWlsZFN0dWJidWlsZEdlbmVyaWNidWlsZENyZWF0ZWJ1aWxkUmV0dXJuYnVpbGRJbXBsaWNpdFJldHVybmJ1aWxkTG9vcGJ1aWxkR2V0YnVpbGRTZXRidWlsZENhbGxidWlsZElmYnVpbGROZXdidWlsZFRocm93YnVpbGRBc3NlcnRidWlsZFZhcmlhYmxlRGVjbGFyYXRpb25idWlsZEF3YWl0YnVpbGRZaWVsZGJ1aWxkQXN5bmNCb2R5YnVpbGRBc3luY0V4aXRidWlsZEZvcmVpZ25Db2RlYnVpbGRTdHJpbmdJbnRlcnBvbGF0aW9uYnVpbGRGb3JJbkl0ZXJhdG9yYnVpbGRGb3JJbk1vdmVOZXh0YnVpbGRGb3JJbkN1cnJlbnRidWlsZEZvckluU2V0YnVpbGRJbmRleGJ1aWxkSW5kZXhTZXRidWlsZEJpbmFyeWJ1aWxkVW5hcnlidWlsZFRyeWJ1aWxkQ2F0Y2hidWlsZElzYnVpbGRBc2J1aWxkU3dpdGNoYnVpbGRTd2l0Y2hDYXNlYnVpbGRMaXN0TGl0ZXJhbGJ1aWxkR290b1NvdXJjZUxvY2F0aW9uc291cmNlLWxvY2F0aW9uc291cmNlVXJpc291cmNlTmFtZWhhc1NvdXJjZUxvY2F0aW9ucmVhZFVyaXNvdXJjZUxvY2F0aW9ud3JpdGVVcmk6W0RpcmVjdFNvdXJjZUxvY2F0aW9uQWJzdHJhY3RTb3VyY2VMb2NhdGlvbl9zb3VyY2VGaWxlX2xvY2F0aW9uSW52YWxpZCBzb3VyY2UgbG9jYXRpb24gaW4gb2Zmc2V0PSwgbGVuZ3RoPWZyb21Mb2NhdGlvbmZyb21PdGhlck9mZnNldFNvdXJjZUxvY2F0aW9uTm9Tb3VyY2VMb2NhdGlvbk1hcmtlcnNob3J0TmFtZTxuby1sb2NhdGlvbj5GcmFtZUVudHJ5cHVzaExvY2F0aW9uaXNFbXB0eVBvcGlzUHVzaGlzUG9wY29tcHV0ZUVsZW1lbnROYW1lRm9yU291cmNlTWFwc2NvbXB1dGVTdHViU3VmZml4W2Z1bmN0aW9uLWVudHJ5JHBvc2l0aW9uYWxBcmd1bWVudENvdW50Z2V0T3JkZXJlZE5hbWVkQXJndW1lbnRzanNfYmFja2VuZC5iYWNrZW5kRnVuY3Rpb25Db21waWxlcmluaXRpYWxpemVGdW5jdGlvbklubGluZUNhY2hlX3Vua25vd25fbXVzdE5vdElubGluZV9tYXlJbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZV9jYW5JbmxpbmVJbkxvb3BNdXN0Tm90T3V0c2lkZV9jYW5JbmxpbmVJbkxvb3BNYXlJbmxpbmVPdXRzaWRlX2NhbklubGluZV9jYWNoZWREZWNpc2lvbnNfbm9JbmxpbmVGdW5jdGlvbnNfdHJ5SW5saW5lRnVuY3Rpb25zZm9yRWFjaE5vSW5saW5lbWFya0FzTm9JbmxpbmVmb3JFYWNoVHJ5SW5saW5lbWFya0FzVHJ5SW5saW5lY2hlY2tGdW5jdGlvbmo6Z2V0Q3VycmVudENhY2hlRGVjaXNpb25Gb3JUZXN0aW5nY2FuSW5saW5laW5zaWRlTG9vcGRlY2lzaW9ubWFya0FzSW5saW5hYmxlb2xkRGVjaXNpb25DYW4ndCBtYXJrICBhcyBub24taW5saW5hYmxlIGFuZCBpbmxpbmFibGUgYXQgdGhlIHNhbWUgdGltZS5tYXJrQXNOb25JbmxpbmFibGVtYXJrZWRBc05vSW5saW5lbWFya2VkQXNUcnlJbmxpbmVjaGVja2VkTW9kZUhlbHBlcnNydGlTdWJzdGl0dXRpb25zcnRpRW5jb2RlcnJ0aVJlY2lwZUVuY29kZXJ0cmFjZXJydGlUYWdzZml4ZWROYW1lc0NvZGVnZW5JbnB1dHNJbXBsSW5mZXJyZWREYXRhZ2V0U2lkZUVmZmVjdHNPZlNlbGVjdG9yZ2V0Q2Fubm90VGhyb3dpc0NhbGxlZEluTG9vcGdldE1pZ2h0QmVQYXNzZWRUb0FwcGx5SW5mZXJyZWREYXRhQnVpbGRlcnJlZ2lzdGVyU2lkZUVmZmVjdHNGcmVlZ2V0U2lkZUVmZmVjdHNCdWlsZGVycmVnaXN0ZXJNaWdodEJlUGFzc2VkVG9BcHBseWdldEN1cnJlbnRseUtub3duTWlnaHRCZVBhc3NlZFRvQXBwbHlhZGRGdW5jdGlvbkNhbGxlZEluTG9vcHJlZ2lzdGVyQ2Fubm90VGhyb3dJbmZlcnJlZERhdGFJbXBsaW5mZXJyZWQtZGF0YV9mdW5jdGlvbnNDYWxsZWRJbkxvb3Bfc2lkZUVmZmVjdHNfc2lkZUVmZmVjdHNGcmVlRWxlbWVudHNfZWxlbWVudHNUaGF0Q2Fubm90VGhyb3dfZnVuY3Rpb25zVGhhdE1pZ2h0QmVQYXNzZWRUb0FwcGx5ZnVuY3Rpb25zQ2FsbGVkSW5Mb29wc2lkZUVmZmVjdHNGcmVlRWxlbWVudHNlbGVtZW50c1RoYXRDYW5ub3RUaHJvd2Z1bmN0aW9uc1RoYXRNaWdodEJlUGFzc2VkVG9BcHBseWZpZWxkTmV2ZXJDaGFuZ2Vzc2V0RGVwZW5kc09uSW5zdGFuY2VQcm9wZXJ0eVN0b3Jlc2V0Q2hhbmdlc0luc3RhbmNlUHJvcGVydHlzZXRBbGxTaWRlRWZmZWN0c3NldERlcGVuZHNPblNvbWV0aGluZ1NpZGUgZWZmZWN0cyBoYXZlIG5vdCBiZWVuIGNvbXB1dGVkIHlldC5fbWFrZVNpZGVFZmZlY3RzSW5mZXJyZWREYXRhQnVpbGRlckltcGxfc2lkZUVmZmVjdHNCdWlsZGVyc3ByZW1hdHVyZVNpZGVFZmZlY3RBY2Nlc3Nlc2ZvckVhY2hOb1Rocm93c2ZvckVhY2hOb1NpZGVFZmZlY3RzSW5mZXJyZWQgZGF0YSBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkLnNpZGVFZmZlY3RzQnVpbGRlcnNzaWRlRWZmZWN0c0J1aWxkZXJlbXB0eVdvcmtMaXN0aW5RdWV1ZWRlcGVuZGluZ1RyaXZpYWxJbmZlcnJlZERhdGFfYWxsU2lkZUVmZmVjdHNkYXJ0MmpzLmpzX21vZGVsLnN0cmF0ZWd5S2VybmVsU291cmNlSW5mb3JtYXRpb25TdHJhdGVneVJlY2lwZUVuY29kZXJSZWNpcGVFbmNvZGVySW1wbE1vZHVsYXJFbWl0dGVyQ29kZUVtaXR0ZXJUYXNrSnNCYWNrZW5kU3RyYXRlZ3lfZWxlbWVudE1hcF9jdXN0b21FbGVtZW50c0NvZGVnZW5BbmFseXNpc19uYXRpdmVDb2RlZ2VuRW5xdWV1ZXJfbmFtZXJfY29kZWdlbkltcGFjdFRyYW5zZm9ybWVyX2VtaXR0ZXJUYXNrX3J0aUNoZWNrc0J1aWxkZXJnZW5lcmF0ZWRDb2RlY29kZWdlbkltcGFjdHNGb3JUZXN0aW5nbmFtZXJGb3JUZXN0aW5nbmF0aXZlQ29kZWdlbkVucXVldWVycnRpQ2hlY2tzQnVpbGRlckZvclRlc3RpbmdnZXRHZW5lcmF0ZWRDb2RlRm9yVGVzdGluZ0pzQmFja2VuZFN0cmF0ZWd5LmVsZW1lbnRNYXAgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgeWV0LmN1c3RvbUVsZW1lbnRzQ29kZWdlbkFuYWx5c2lzQ3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXMgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgeWV0LnJ0aUNoZWNrc0J1aWxkZXJSdW50aW1lVHlwZXNDaGVja3NCdWlsZGVyIGhhcyBub3QgYmVlbiBjcmVhdGVkIHlldC5ydGlDaGVja3NCdWlsZGVyQ2xvc2VkUnVudGltZVR5cGVzQ2hlY2tzIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQubGl2ZU1lbWJlclVzYWdlX2dsb2JhbExvY2Fsc01hcGNsb3N1cmVEYXRhQnVpbGRlcmNsb3NlZFdvcmxkQnVpbGRlcmNvbnZlcnRDbG9zZWRXb3JsZGNsb3N1cmVNb2RlbHNsYXRlT3V0cHV0VW5pdERhdGFCdWlsZGVybmF0aXZlRGF0YXJ0aU5lZWRydW50aW1lVHlwZXNJbXBsb25lU2hvdEludGVyY2VwdG9yRGF0YWludGVyY2VwdG9yRGF0YV9vbkNvZGVnZW5FbnF1ZXVlclN0YXJ0cHJvZ3JhbUVudm1haW5Db21wb25lbnRkYXJ0VHlwZXNsaXZlTmF0aXZlQ2xhc3Nlc2NyZWF0ZUVtaXR0ZXJuYXRpdmVFbWl0dGVyZ2VuZXJhdGVDb2RlZW50aXR5TG9va3VwY29tcG9uZW50TG9va3VwdXNlRGF0YUtpbmRzcmVnaXN0ZXJDb2RlZ2VuV3JpdGVycmVnaXN0ZXJDb2RlZ2VuUmVhZGVycmVnaXN0ZXJFbnRpdHlMb29rdXByZWdpc3RlckNvbXBvbmVudExvb2t1cHRyYW5zZm9ybUNvZGVnZW5JbXBhY3RlbWl0RGlhZ25vc3RpY2dldFNvdXJjZVNwYW5yZWdpc3RlckVudGl0eVJlYWRlcmVhcmx5TWVtYmVySW5kZXhMaW1pdHByZXBhcmVGb3JDb2RlZ2VuU2VyaWFsaXphdGlvbmVudGl0eVdyaXRlcm1lbWJlckluZGV4Z2V0RW50aXR5S2VybmVsQ29kZWdlbldvcmtJdGVtQnVpbGRlcl9iYWNrZW5kU3RyYXRlZ3lfY29kZWdlblJlc3VsdHNfZW50aXR5TG9va3VwX2NvbXBvbmVudExvb2t1cEtlcm5lbENvZGVnZW5Xb3JrSXRlbUtlcm5lbFNzYUJ1aWxkZXJfdGFza19kdW1wSW5mb1Rhc2tfc291cmNlSW5mb3JtYXRpb25TdHJhdGVneV9pbmxpbmVDYWNoZV9pbmxpbmVEYXRhQ2FjaGVyZWdpc3RyeW9taXRJbXBsaWNpdENhc3RzZ2V0TWVtYmVyVGhpc1R5cGVLZXJuZWxUb1R5cGVJbmZlcmVuY2VNYXBJbXBsX3RhcmdldFJlc3VsdHNfcmVzdWx0T2ZnZXRSZXR1cm5UeXBlT2ZyZWNlaXZlclR5cGVPZkludm9jYXRpb25yZWNlaXZlclR5cGVPZkdldHJlY2VpdmVyVHlwZU9mRGlyZWN0R2V0cmVjZWl2ZXJUeXBlT2ZTZXRsaXN0TGl0ZXJhbGlzSnNJbmRleGFibGVJdGVyYXRvcmluZmVycmVkSW5kZXhUeXBlZ2V0SW5mZXJyZWRUeXBlT2ZnZXRJbmZlcnJlZFR5cGVPZlBhcmFtZXRlcnR5cGVGcm9tTmF0aXZlQmVoYXZpb3JkYXJ0MmpzLmtlcm5lbC5mcm9udGVuZF9zdHJhdGVneUNsb3N1cmVTY29wZU1vZGVsU2NvcGVNb2RlbEtGaWVsZEFuYWx5c2lzTmF0aXZlUmVzb2x1dGlvbkVucXVldWVyS2VybmVsRnJvbnRlbmRTdHJhdGVneW5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXJfbmF0aXZlQmFzaWNEYXRhX2NvbXBpbGVyVGFza19ydW50aW1lVHlwZXNOZWVkQnVpbGRlcl9hbm5vdGF0aW9uUHJvY2Vzc29yX21vZHVsYXJTdHJhdGVneV9pckFubm90YXRpb25EYXRhX25hdGl2ZURhdGFCdWlsZGVyX2JhY2tlbmRVc2FnZUJ1aWxkZXJfbmF0aXZlUmVzb2x1dGlvbkVucXVldWVyX2N1c3RvbUVsZW1lbnRzUmVzb2x1dGlvbkFuYWx5c2lzX2ZpZWxkQW5hbHlzaXNpbXBhY3RUcmFuc2Zvcm1lcm5hdGl2ZVJlc29sdXRpb25FbnF1ZXVlckZvclRlc3RpbmdmaWVsZEFuYWx5c2lzRm9yVGVzdGluZ192YWxpZGF0ZUludGVyY2VwdG9ySW1wbGVtZW50c0FsbE9iamVjdE1ldGhvZHNpbnRlcmNlcHRvckNsYXNzaW50ZXJjZXB0b3JNZW1iZXJNZW1iZXIgIG5vdCBvdmVycmlkZGVuIGluIC4gRm91bmQgcnRpTmVlZEJ1aWxkZXJfY3JlYXRlUnVudGltZVR5cGVzTmVlZEJ1aWxkZXJjbGFzc1F1ZXJpZXNjbGFzc0hpZXJhcmNoeUJ1aWxkZXJhbm5vdGF0aW9uc0RhdGFCdWlsZGVycHJhZ21hQW5ub3RhdGlvbnNpbnRlcmNlcHRvckRhdGFCdWlsZGVyQW5ub3RhdGlvblByb2Nlc3NvciBoYXMgbm90IGJlZW4gY3JlYXRlZC5OYXRpdmVCYXNpY0RhdGEgaGFzIG5vdCBiZWVuIGNvbXB1dGVkIHlldC5rZXJuZWxSZXN1bHRhZGRDb21wb25lbnRyZWdpc3Rlckh0bWxJc0xvYWRlZGlyQW5ub3RhdGlvbkRhdGFGb3JUZXN0aW5nbW9kdWxhclN0cmF0ZWd5Rm9yVGVzdGluZ3J1bnRpbWVUeXBlc05lZWRCdWlsZGVyRm9yVGVzdGluZ0tlcm5lbFdvcmtJdGVtQnVpbGRlcl9pbXBhY3RUcmFuc2Zvcm1lcl9uYXRpdmVNZW1iZXJSZXNvbHZlcl9hbm5vdGF0aW9uc0RhdGFCdWlsZGVyX2Nsb3N1cmVNb2RlbHNLZXJuZWxXb3JrSXRlbWdldE1lbWJlck5vZGVyZXNvbHZlTmF0aXZlTWVtYmVycHJhZ21hQW5ub3RhdGlvbkRhdGFnZXRQcmFnbWFBbm5vdGF0aW9uRGF0YXJlZ2lzdGVyUHJhZ21hQW5ub3RhdGlvbnNtb2R1bGFyTWVtYmVyRGF0YWdldE1vZHVsYXJNZW1iZXJEYXRhc2NvcGVNb2RlbGNsb3N1cmVTY29wZU1vZGVscmVnaXN0ZXJTdGF0aWNGaWVsZGluaXRpYWxpemVyQ29tcGxleGl0eWltcGFjdEJ1aWxkZXJEYXRhY29tcHV0ZVdvcmxkSW1wYWN0dmFyaWFibGVTY29wZU1vZGVsbm9JbmxpbmV0cnlJbmxpbmVkaXNhYmxlRmluYWxub0VsaXNpb25ub1Rocm93c25vU2lkZUVmZmVjdHNhc3N1bWVEeW5hbWljYXM6dHJ1c3RhczpjaGVja3R5cGVzOnRydXN0dHlwZXM6Y2hlY2twYXJhbWV0ZXI6dHJ1c3RwYXJhbWV0ZXI6Y2hlY2tkb3duY2FzdDp0cnVzdGRvd25jYXN0OmNoZWNrdHJhbnNmb3JtUmVzb2x1dGlvbkltcGFjdEtlcm5lbFdvcmtJdGVtKEtlcm5lbE1vZHVsYXJTdHJhdGVneXVzZUFzc2VydHNpbmZlckVmZmVjdGl2ZWx5RmluYWxWYXJpYWJsZVR5cGVzY29tcHV0ZUltcGFjdHVzZUltcGFjdERhdGFGb3JUZXN0aW5nZGFydDJqcy5saWJyYXJ5X2xvYWRlckRhcnQyanNUYXJnZXRfY29tcGlsZXJJbnB1dF9jb21waWxlck91dHB1dGZvcmNlU2VyaWFsaXphdGlvbmtlcm5lbCBsb2FkZXJfcGxhdGZvcm0uZGlsbGlzRGlsbC5kaWxsc2VyaWFsaXplIGRpbGxXcml0aW5nIGRpbGwgdG8gZGlsbE91dHB1dGlyU2lua190b1Jlc3VsdHNlYXJjaGRlcGRhcnRDb3Jlcm9vdD0sbGlicmFyaWVzPVNlcmlhbGl6YXRpb25UYXNrX3Byb3ZpZGVyU2VyaWFsaXphdGlvbnNlcmlhbGl6ZSBkYXRhV3JpdGluZyBkYXRhIHRvIGRlc2VyaWFsaXplIGRpbGxSZWFkaW5nIGRpbGwgZnJvbSBkaWxsSW5wdXRkZXNlcmlhbGl6ZSBkYXRhUmVhZGluZyBkYXRhIGZyb20gc2hhcmRzaGFyZHNjb2RlZ2VuUmVzdWx0c2VyaWFsaXplIGNvZGVnZW5yZWdpc3RlckVudGl0eVdyaXRlcmRlc2VyaWFsaXplIGNvZGVnZW5yZWFkZXJkZXJlZ2lzdGVyQ29kZWdlblJlYWRlciBtZW1iZXJzIGZyb20gc2VyaWFsaXplR2xvYmFsVHlwZUluZmVyZW5jZVJlc3VsdHNkZXNlcmlhbGl6ZUdsb2JhbFR5cGVJbmZlcmVuY2VSZXN1bHRzbmV3Q2xvc2VkV29ybGRuZXdJbmZlcnJlZERhdGFTZXJpYWxpemF0aW9uU3RyYXRlZ3lCeXRlc0luTWVtb3J5U2VyaWFsaXphdGlvblN0cmF0ZWd5Qnl0ZXNPbkRpc2tTZXJpYWxpemF0aW9uU3RyYXRlZ3l3b3JsZC5kYXRhT2JqZWN0c0luTWVtb3J5U2VyaWFsaXphdGlvblN0cmF0ZWd5VHlwZUVudmlyb25tZW50U3RydWN0dXJlVHlwZVJlY2lwZVNpZGVFZmZlY3RzSFZpc2l0b3J2aXNpdEFic3Zpc2l0QWRkdmlzaXRCaXRBbmR2aXNpdEJpdE5vdHZpc2l0Qml0T3J2aXNpdEJpdFhvcnZpc2l0Qm91bmRzQ2hlY2t2aXNpdENyZWF0ZXZpc2l0Q3JlYXRlQm94dmlzaXREaXZpZGV2aXNpdEV4aXR2aXNpdEV4aXRUcnl2aXNpdEZpZWxkR2V0dmlzaXRGaWVsZFNldHZpc2l0Rm9yZWlnbkNvZGV2aXNpdEdldExlbmd0aHZpc2l0R290b3Zpc2l0R3JlYXRlcnZpc2l0R3JlYXRlckVxdWFsdmlzaXRJZGVudGl0eXZpc2l0SW5kZXh2aXNpdEluZGV4QXNzaWdudmlzaXRJbnRlcmNlcHRvcnZpc2l0SW52b2tlQ2xvc3VyZXZpc2l0SW52b2tlRHluYW1pY0dldHRlcnZpc2l0SW52b2tlRHluYW1pY01ldGhvZHZpc2l0SW52b2tlRHluYW1pY1NldHRlcnZpc2l0SW52b2tlU3RhdGljdmlzaXRJbnZva2VTdXBlcnZpc2l0SW52b2tlQ29uc3RydWN0b3JCb2R5dmlzaXRJbnZva2VHZW5lcmF0b3JCb2R5dmlzaXRJc3Zpc2l0SXNWaWFJbnRlcmNlcHRvcnZpc2l0TGF0ZVZhbHVldmlzaXRMYXp5U3RhdGljdmlzaXRMZXNzdmlzaXRMZXNzRXF1YWx2aXNpdExpdGVyYWxMaXN0dmlzaXRMb2NhbEdldHZpc2l0TG9jYWxTZXR2aXNpdExvY2FsVmFsdWV2aXNpdExvb3BCcmFuY2h2aXNpdE11bHRpcGx5dmlzaXROZWdhdGV2aXNpdE9uZVNob3RJbnRlcmNlcHRvcnZpc2l0UGFyYW1ldGVyVmFsdWV2aXNpdFBoaXZpc2l0UmFuZ2VDb252ZXJzaW9udmlzaXRSZWFkTW9kaWZ5V3JpdGV2aXNpdFJlZnZpc2l0UmVtYWluZGVydmlzaXRTaGlmdExlZnR2aXNpdFNoaWZ0UmlnaHR2aXNpdFN0YXRpY3Zpc2l0U3RhdGljU3RvcmV2aXNpdFN0cmluZ0NvbmNhdHZpc2l0U3RyaW5naWZ5dmlzaXRTdWJ0cmFjdHZpc2l0VGhyb3dFeHByZXNzaW9udmlzaXRUcnVuY2F0aW5nRGl2aWRldmlzaXRUeXBlQ29udmVyc2lvbnZpc2l0UHJpbWl0aXZlQ2hlY2t2aXNpdEJvb2xDb252ZXJzaW9udmlzaXRUeXBlS25vd252aXNpdFlpZWxkdmlzaXRUeXBlSW5mb1JlYWRSYXd2aXNpdFR5cGVJbmZvUmVhZFZhcmlhYmxldmlzaXRUeXBlSW5mb0V4cHJlc3Npb252aXNpdElzVGVzdHZpc2l0QXNDaGVja3Zpc2l0QXNDaGVja1NpbXBsZXZpc2l0U3VidHlwZUNoZWNrdmlzaXRMb2FkVHlwZXZpc2l0SW5zdGFuY2VFbnZpcm9ubWVudHZpc2l0VHlwZUV2YWx2aXNpdFR5cGVCaW5kSEdyYXBoVmlzaXRvcnZpc2l0RG9taW5hdG9yVHJlZWZyYW1ldmlzaXRCYXNpY0Jsb2NrZG9taW5hdGVkQmxvY2tzdmlzaXRQb3N0RG9taW5hdG9yVHJlZV9GcmFtZUhJbnN0cnVjdGlvblZpc2l0b3JjdXJyZW50QmxvY2t2aXNpdEluc3RydWN0aW9udmlzaXRJbnN0cnVjdGlvbkxpc3RpbnN0cnVjdGlvbkhHcmFwaHRoaXNJbnN0cnVjdGlvbm5lZWRzQXN5bmNSZXdyaXRlYXN5bmNFbGVtZW50VHlwZWV4cGxpY2l0UmVjZWl2ZXJQYXJhbWV0ZXJpc1JlY3Vyc2l2ZU1ldGhvZGNhbGxlZEluTG9vcGJsb2Nrc2FsbG9jYXRlZEZpeGVkTGlzdHNhZGROZXdCbG9ja2FkZEJsb2NrYWRkTmV3TG9vcEhlYWRlckJsb2NrbG9vcEluZm9ybWF0aW9uaXNDb25zdGFudGFkZEF0RXhpdGFkZERlZmVycmVkQ29uc3RhbnRhZGRDb25zdGFudEludGFkZENvbnN0YW50SW50QXNVbnNpZ25lZGFkZENvbnN0YW50RG91YmxlYWRkQ29uc3RhbnRTdHJpbmdhZGRDb25zdGFudFN0cmluZ0Zyb21OYW1lYWRkQ29uc3RhbnRCb29sYWRkQ29uc3RhbnROdWxsYWRkQ29uc3RhbnRVbnJlYWNoYWJsZWFzc2lnbkRvbWluYXRvcnNwcmVkZWNlc3NvcnNpc0xvb3BIZWFkZXJhc3NpZ25Db21tb25Eb21pbmF0b3Jhc3NpZ25Eb21pbmF0b3JSYW5nZXNkZnNOdW1iZXJkb21pbmF0b3JEZnNJbmRvbWluYXRvckRmc091dGlzVmFsaWR2YWxpZGF0b3J2aXNpdEdyYXBoSEdyYXBoKEhCYXNlVmlzaXRvcnZpc2l0QmluYXJ5QXJpdGhtZXRpY3Zpc2l0SW52b2tlQmluYXJ5dmlzaXRCaW5hcnlCaXRPcHZpc2l0SW52b2tldmlzaXRJbnZva2VEeW5hbWljdmlzaXRJbnZva2VEeW5hbWljRmllbGR2aXNpdEludm9rZVVuYXJ5dmlzaXRDb25kaXRpb25hbEJyYW5jaHZpc2l0Q29udHJvbEZsb3d2aXNpdEZpZWxkQWNjZXNzdmlzaXRSZWxhdGlvbmFsdmlzaXRDaGVja3Zpc2l0SnVtcHZpc2l0TG9jYWxBY2Nlc3NTdWJHcmFwaFN1YkV4cHJlc3Npb25jb25kaXRpb25FeHByZXNzaW9uSEluc3RydWN0aW9uTGlzdGludGVybmFsQWRkQWZ0ZXJjdXJzb3JpbnRlcm5hbEFkZEJlZm9yZWRldGFjaF90cnVuY2F0ZWRDb250YWluc0ZvckFzc2VydGlzSW5CYXNpY0Jsb2NrdXNlZEJ5SEJhc2ljQmxvY2tTVEFUVVNfTkVXU1RBVFVTX09QRU5TVEFUVVNfQ0xPU0VEc3RhdHVzcGhpc2Jsb2NrRmxvd3BhcmVudExvb3BIZWFkZXJpc0xpdmVzdWNjZXNzb3JzZG9taW5hdG9yd2l0aElkaXNOZXdpc09wZW5pc0Nsb3NlZHNldEJsb2NrRmxvd2Jsb2NrSW5mb2NvbnRpbnVhdGlvbmlzTGFiZWxlZEJsb2NrZW5jbG9zaW5nTG9vcEhlYWRlcmFkZEFmdGVyYWRkQXRFbnRyeW5vdGlmeUFkZGVkVG9CbG9ja21vdmVBdEV4aXRhZGRQaGlwaGlyZW1vdmVQaGlub3RpZnlSZW1vdmVkRnJvbUJsb2NrYWRkQmVmb3JlYWRkU3VjY2Vzc29ycG9zdFByb2Nlc3NMb29wSGVhZGVyYWRkQmFja0VkZ2VyZXdyaXRlcmV3cml0ZUlucHV0cmV3cml0ZVdpdGhCZXR0ZXJVc2VyYmV0dGVyY2hlY2tlZElucHV0ZG9taW5hdGVzaXNFeGl0QmxvY2thZGREb21pbmF0ZWRCbG9ja3JlbW92ZURvbWluYXRlZEJsb2NrcHJlZGVjZXNzb3JibG9jazBibG9jazFmb3JFYWNoUGhpc2F2ZWRmb3JFYWNoSW5zdHJ1Y3Rpb25IQmFzaWNCbG9jayhpZENvdW50ZXJfdXNlR3ZuVU5ERUZJTkVEX1RZUEVDT0RFVFlQRV9HVUFSRF9UWVBFQ09ERUJPVU5EU19DSEVDS19UWVBFQ09ERUlOVEVHRVJfQ0hFQ0tfVFlQRUNPREVJTlRFUkNFUFRPUl9UWVBFQ09ERUFERF9UWVBFQ09ERURJVklERV9UWVBFQ09ERU1VTFRJUExZX1RZUEVDT0RFU1VCVFJBQ1RfVFlQRUNPREVTSElGVF9MRUZUX1RZUEVDT0RFQklUX09SX1RZUEVDT0RFQklUX0FORF9UWVBFQ09ERUJJVF9YT1JfVFlQRUNPREVORUdBVEVfVFlQRUNPREVCSVRfTk9UX1RZUEVDT0RFTk9UX1RZUEVDT0RFSURFTlRJVFlfVFlQRUNPREVHUkVBVEVSX1RZUEVDT0RFR1JFQVRFUl9FUVVBTF9UWVBFQ09ERUxFU1NfVFlQRUNPREVMRVNTX0VRVUFMX1RZUEVDT0RFU1RBVElDX1RZUEVDT0RFU1RBVElDX1NUT1JFX1RZUEVDT0RFRklFTERfR0VUX1RZUEVDT0RFVFlQRV9DT05WRVJTSU9OX1RZUEVDT0RFVFlQRV9LTk9XTl9UWVBFQ09ERUlOVk9LRV9TVEFUSUNfVFlQRUNPREVJTkRFWF9UWVBFQ09ERUlTX1RZUEVDT0RFSU5WT0tFX0RZTkFNSUNfVFlQRUNPREVTSElGVF9SSUdIVF9UWVBFQ09ERVRSVU5DQVRJTkdfRElWSURFX1RZUEVDT0RFSVNfVklBX0lOVEVSQ0VQVE9SX1RZUEVDT0RFVFlQRV9JTkZPX1JFQURfUkFXX1RZUEVDT0RFVFlQRV9JTkZPX1JFQURfVkFSSUFCTEVfVFlQRUNPREVUWVBFX0lORk9fRVhQUkVTU0lPTl9UWVBFQ09ERUZPUkVJR05fQ09ERV9UWVBFQ09ERVJFTUFJTkRFUl9UWVBFQ09ERUdFVF9MRU5HVEhfVFlQRUNPREVBQlNfVFlQRUNPREVCT09MX0NPTlZFUlNJT05fVFlQRUNPREVQUklNSVRJVkVfQ0hFQ0tfVFlQRUNPREVJU19URVNUX1RZUEVDT0RFQVNfQ0hFQ0tfVFlQRUNPREVBU19DSEVDS19TSU1QTEVfVFlQRUNPREVTVUJUWVBFX0NIRUNLX1RZUEVDT0RFTE9BRF9UWVBFX1RZUEVDT0RFSU5TVEFOQ0VfRU5WSVJPTk1FTlRfVFlQRUNPREVUWVBFX0VWQUxfVFlQRUNPREVUWVBFX0JJTkRfVFlQRUNPREVpbnN0cnVjdGlvblR5cGVpbnB1dHM6IHVzZUd2bnNldFVzZUd2bmlzTW92YWJsZWlzUHVyZWhhc1NpZGVFZmZlY3RzZGVwZW5kc09uU29tZXRoaW5nY2FuVGhyb3dpc0FsbG9jYXRpb25ub25DaGVja2lzQ29udHJvbEZsb3dpc0NvbmZsaWN0aW5nZ2V0RGFydFJlY2VpdmVyb25seVRocm93c05TTWd2bkVxdWFsc2hhc1NhbWVUeXBldHlwZUVxdWFsc3R5cGVDb2RlaW5wdXRzTGVuZ3Rob3RoZXJJbnB1dHNkYXRhRXF1YWxzZ3ZuSGFzaENvZGV0YXJnZXRCbG9ja3JlbW92ZVVzZXJyZW1vdmVGcm9tTGlzdGNoYW5nZVVzZW9sZElucHV0bmV3SW5wdXRyZXBsYWNlQWxsVXNlcnNEb21pbmF0ZWRCeW5ld0luc3RydWN0aW9ubW92ZUJlZm9yZWlzQ29uc3RhbnRCb29sZWFuaXNDb25zdGFudE51bGxpc0NvbnN0YW50TnVtYmVyaXNDb25zdGFudEludGVnZXJpc0NvbnN0YW50U3RyaW5naXNDb25zdGFudExpc3Rpc0NvbnN0YW50TWFwaXNDb25zdGFudEZhbHNlaXNDb25zdGFudFRydWVpc0NvZGVNb3Rpb25JbnZhcmlhbnRpc0pzU3RhdGVtZW50Y29udmVydFR5cGVpc0Z1bmN0aW9uVHlwZWlzVm9pZGlzRnV0dXJlT3JjcmVhdGluZyBjb21wb3VuZCBjaGVjayB0byAgKHRoaXMgPSBpbnRlcmZhY2VUeXBlaGFzU2FtZUxvb3BIZWFkZXJBcygpRG9taW5hdGVkVXNlc19zb3VyY2VfaW5zdHJ1Y3Rpb25zX2luZGV4ZXNleGNsdWRlRG9taW5hdG9yZXhjbHVkZVBoaU91dEVkZ2VzX2NvbXB1dGVvbGRJbnN0cnVjdGlvbklucHV0ICBjaGFuZ2VkLgogIEZvdW5kOiAKICBFeHBlY3RlZDogaXNTaW5nbGV0b25pbnN0cnVjdGlvbnNfYWRkVXNlaW5wdXRJbmRleHVzZXJzSW5DdXJyZW50QmxvY2tkb21pbmF0b3JCbG9ja0hSZWZjb252ZXJzaW9uSFJlZihITGF0ZUluc3RydWN0aW9uSENoZWNrSEJvdW5kc0NoZWNrQUxXQVlTX0ZBTFNFRlVMTF9DSEVDS0FMV0FZU19BQk9WRV9aRVJPQUxXQVlTX0JFTE9XX0xFTkdUSEFMV0FZU19UUlVFc3RhdGljQ2hlY2tzcmVwb3J0ZWRJbmRleEhDb25kaXRpb25hbEJyYW5jaHRydWVCcmFuY2hmYWxzZUJyYW5jaEhDb250cm9sRmxvd0hDcmVhdGVoYXNSdGlJbnB1dGluc3RhbnRpYXRlZFR5cGVzcnRpSW5wdXRIQ3JlYXRlKEhDcmVhdGVCb3hIQ3JlYXRlQm94KClISW52b2tlX2lzQWxsb2NhdGlvbmlzSW50ZXJjZXB0ZWRDYWxsQVJHVU1FTlRTX09GRlNFVHJlc3VsdFR5cGVzZXRBbGxvY2F0aW9uSEludm9rZUR5bmFtaWNzcGVjaWFsaXplcl9yZWNlaXZlclR5cGVfb3JpZ2luYWxSZWNlaXZlclR5cGVpc0ludGVyY2VwdGVkdXBkYXRlUmVjZWl2ZXJUeXBlaW52b2tlIGR5bmFtaWM6IHNlbGVjdG9yPSwgbWFzaz1pc0NhbGxPbkludGVyY2VwdG9ySEludm9rZUNsb3N1cmVISW52b2tlRHluYW1pY01ldGhvZGludm9rZSBkeW5hbWljIG1ldGhvZDogc2VsZWN0b3I9SEludm9rZUR5bmFtaWNGaWVsZGludm9rZSBkeW5hbWljIGZpZWxkOiBzZWxlY3Rvcj1ISW52b2tlRHluYW1pY0dldHRlcmlzVGVhck9mZmludm9rZSBkeW5hbWljIGdldHRlcjogc2VsZWN0b3I9SEludm9rZUR5bmFtaWNTZXR0ZXJuZWVkc0NoZWNraW52b2tlIGR5bmFtaWMgc2V0dGVyOiBzZWxlY3Rvcj0sIGVsZW1lbnQ9SEludm9rZVN0YXRpY3RhcmdldENhblRocm93aW52b2tlIHN0YXRpYzogSEludm9rZVN1cGVyY2FsbGVyaW52b2tlIHN1cGVyOiBISW52b2tlQ29uc3RydWN0b3JCb2R5aW52b2tlIGNvbnN0cnVjdG9yIGJvZHk6IEhJbnZva2VHZW5lcmF0b3JCb2R5SEludm9rZUdlbmVyYXRvckJvZHkoSEZpZWxkQWNjZXNzSEZpZWxkR2V0Y2xlYXJBbGxTaWRlRWZmZWN0c2NsZWFyQWxsRGVwZW5kZW5jaWVzdGhpc0xvY2FsaXNJbnRlcmNlcHRlZENsYXNzaXNOdWxsQ2hlY2tGaWVsZEdldChlbGVtZW50PSx0eXBlPUhGaWVsZFNldEZpZWxkU2V0KGVsZW1lbnQ9SEdldExlbmd0aEdldExlbmd0aCgpSFJlYWRNb2RpZnlXcml0ZUFTU0lHTl9PUFBSRV9PUFBPU1RfT1Bqc09wb3BLaW5kYXNzaWduT3BwcmVPcHBvc3RPcGlzUHJlT3Bpc1Bvc3RPcGlzQXNzaWduT3BSZWFkTW9kaWZ5V3JpdGUgSExvY2FsQWNjZXNzSExvY2FsR2V0SExvY2FsU2V0SEZvcmVpZ25pc1N0YXRlbWVudEhGb3JlaWduQ29kZWNvZGVUZW1wbGF0ZXRocm93QmVoYXZpb3Jmb3JlaWduRnVuY3Rpb25lZmZlY3Rzb25Ob25OdWxsaXNPbmx5TnVsbE5TTUd1YXJkSEZvcmVpZ25Db2RlKCIiKUhJbnZva2VCaW5hcnlIQmluYXJ5QXJpdGhtZXRpY0hBZGRIRGl2aWRlSE11bHRpcGx5SFN1YnRyYWN0SFRydW5jYXRpbmdEaXZpZGVIUmVtYWluZGVySFN3aXRjaGRlZmF1bHRUYXJnZXRIU3dpdGNoIGNhc2VzID0gSEJpbmFyeUJpdE9wSFNoaWZ0TGVmdEhTaGlmdFJpZ2h0SEJpdE9ySEJpdEFuZEhCaXRYb3JISW52b2tlVW5hcnlITmVnYXRlSEFic0hCaXROb3RIRXhpdEhHb3RvZ290b0hKdW1wdG9MYWJlbEhCcmVha2JyZWFrU3dpdGNoQ29udGludWVMb29wYnJlYWsgSENvbnRpbnVlY29udGludWUgSFRyeWNhdGNoQmxvY2tqb2luQmxvY2tIRXhpdFRyeWV4aXQgdHJ5Ym9keVRyeVN1Y2Nlc3NvckhJZmJsb2NrSW5mb3JtYXRpb250aGVuQmxvY2tlbHNlQmxvY2tITG9vcEJyYW5jaENPTkRJVElPTl9GSVJTVF9MT09QRE9fV0hJTEVfTE9PUGxvb3AtYnJhbmNoSENvbnN0YW50bGl0ZXJhbDogaXNCb29saXNOdW1pc0ludGlzTGlzdGlzRmFsc2Vpc1RydWVITm90SExvY2FsVmFsdWVsb2NhbCBIUGFyYW1ldGVyVmFsdWV1c2VkQXNWYXJpYWJsZXBhcmFtZXRlciBIVGhpc0hQaGlJU19OT1RfTE9HSUNBTF9PUEVSQVRPUklTX0FORElTX09SbG9naWNhbE9wZXJhdG9yVHlwZW5vSW5wdXRzc2luZ2xlSW5wdXRtYW55SW5wdXRzYWRkSW5wdXRwaGkgSFJlbGF0aW9uYWx1c2VzQm9vbGlmaWVkSW50ZXJjZXB0b3JISWRlbnRpdHlzaW5nbGVDb21wYXJpc29uT3BIR3JlYXRlckhHcmVhdGVyRXF1YWxITGVzc0hMZXNzRXF1YWxIUmV0dXJuSFRocm93RXhwcmVzc2lvbnRocm93IGV4cHJlc3Npb25IQXdhaXRIWWllbGRIVGhyb3dpc1JldGhyb3dIU3RhdGljc2V0RGVwZW5kc09uU3RhdGljUHJvcGVydHlTdG9yZXN0YXRpYyBISW50ZXJjZXB0b3JpbnRlcmNlcHRlZENsYXNzZXNpbnRlcmNlcHRvciBvbiBpc0NvbmRpdGlvbmFsQ29uc3RhbnRJbnRlcmNlcHRvcmNvbmRpdGlvbmFsQ29uc3RhbnRJbnRlcmNlcHRvckhPbmVTaG90SW50ZXJjZXB0b3JvbmUgc2hvdCBpbnRlcmNlcHRvcjogc2VsZWN0b3I9SExhenlTdGF0aWNsYXp5IHN0YXRpYyBIU3RhdGljU3RvcmVzZXRDaGFuZ2VzU3RhdGljUHJvcGVydHlzdGF0aWMgc3RvcmUgSExpdGVyYWxMaXN0bGl0ZXJhbCBsaXN0SEluZGV4c2V0RGVwZW5kc09uSW5kZXhTdG9yZWluZGV4IG9wZXJhdG9ySEluZGV4QXNzaWduc2V0Q2hhbmdlc0luZGV4aW5kZXggYXNzaWduIG9wZXJhdG9ySElzUkFXX0NIRUNLQ09NUE9VTkRfQ0hFQ0tWQVJJQUJMRV9DSEVDS3R5cGVFeHByZXNzaW9udXNlSW5zdGFuY2VPZmRpcmVjdGluc3RhbmNlT2Zjb21wb3VuZGludGVyY2VwdG9yVW5leHBlY3RlZCByYXcgaXMtdGVzdCB0eXBlOiBjaGVja0NhbGxpc1Jhd0NoZWNraXNWYXJpYWJsZUNoZWNraXNDb21wb3VuZENoZWNrIGlzIEhJc1ZpYUludGVyY2VwdG9ySExhdGVWYWx1ZUhMYXRlVmFsdWUoSFR5cGVDb252ZXJzaW9uVFlQRV9DSEVDS0NBU1RfQ0hFQ0tpbnB1dFR5cGVpc1R5cGVkZWZ3aXRoVHlwZVJlcHJlc2VudGF0aW9udHlwZVJlcHJlc2VudGF0aW9uaGFzVHlwZVJlcHJlc2VudGF0aW9uaXNUeXBlQ2hlY2tpc0Nhc3RDaGVja2lzUmVkdW5kYW50SFR5cGVDb252ZXJzaW9uKHR5cGU9LCBraW5kPXJlcHJlc2VudGF0aW9uPWNoZWNrZWRJbnB1dD1IUHJpbWl0aXZlQ2hlY2tBUkdVTUVOVF9UWVBFX0NIRUNLUkVDRUlWRVJfVFlQRV9DSEVDS3JlY2VpdmVyVHlwZUNoZWNrU2VsZWN0b3Jpc1JlY2VpdmVyVHlwZUNoZWNraXNBcmd1bWVudFR5cGVDaGVja0hQcmltaXRpdmVDaGVjayhjaGVja2VkVHlwZT1IQm9vbENvbnZlcnNpb25IQm9vbENvbnZlcnNpb24oSFR5cGVLbm93bmtub3duVHlwZV9pc01vdmFibGVwaW5uZWR3aXRuZXNzZWR3aXRuZXNzVHlwZUtub3duIGlzUGlubmVkSFJhbmdlQ29udmVyc2lvbkhTdHJpbmdDb25jYXRzdHJpbmcgY29uY2F0SFN0cmluZ2lmeXN0cmluZ2lmeUhMb29wSW5mb3JtYXRpb25iYWNrRWRnZXNsb29wQmxvY2tJbmZvcm1hdGlvbndvcmtRdWV1ZXBhcmVudEhlYWRlckhCbG9ja0Zsb3dIQmxvY2tJbmZvcm1hdGlvbkhTdGF0ZW1lbnRJbmZvcm1hdGlvbkhFeHByZXNzaW9uSW5mb3JtYXRpb25IU3RhdGVtZW50SW5mb3JtYXRpb25WaXNpdG9ydmlzaXRMYWJlbGVkQmxvY2tJbmZvdmlzaXRMb29wSW5mb3Zpc2l0SWZJbmZvdmlzaXRUcnlJbmZvdmlzaXRTd2l0Y2hJbmZvdmlzaXRTZXF1ZW5jZUluZm92aXNpdFN1YkdyYXBoSW5mb0hFeHByZXNzaW9uSW5mb3JtYXRpb25WaXNpdG9ydmlzaXRBbmRPckluZm92aXNpdFN1YkV4cHJlc3Npb25JbmZvSEJsb2NrSW5mb3JtYXRpb25WaXNpdG9ySFN1YkdyYXBoQmxvY2tJbmZvcm1hdGlvbnN1YkdyYXBoSFN1YkV4cHJlc3Npb25CbG9ja0luZm9ybWF0aW9uc3ViRXhwcmVzc2lvbkhTdGF0ZW1lbnRTZXF1ZW5jZUluZm9ybWF0aW9uSExhYmVsZWRCbG9ja0luZm9ybWF0aW9uaXNDb250aW51ZUhMb29wQmxvY2tJbmZvcm1hdGlvbldISUxFX0xPT1BGT1JfTE9PUEZPUl9JTl9MT09QU1dJVENIX0NPTlRJTlVFX0xPT1BOT1RfQV9MT09QbG9vcEhlYWRlckhJZkJsb2NrSW5mb3JtYXRpb250aGVuR3JhcGhlbHNlR3JhcGhIQW5kT3JCbG9ja0luZm9ybWF0aW9uSFRyeUJsb2NrSW5mb3JtYXRpb25jYXRjaFZhcmlhYmxlSFN3aXRjaEJsb2NrSW5mb3JtYXRpb25IVHlwZUluZm9SZWFkUmF3SFR5cGVJbmZvUmVhZFZhcmlhYmxlaW50ZXJjZXB0ZWRub0ludGVyY2VwdG9ySFR5cGVJbmZvUmVhZFZhcmlhYmxlKFR5cGVJbmZvRXhwcmVzc2lvbktpbmRUeXBlSW5mb0V4cHJlc3Npb25LaW5kLkNPTVBMRVRFVHlwZUluZm9FeHByZXNzaW9uS2luZC5JTlNUQU5DRUNPTVBMRVRFSU5TVEFOQ0VIVHlwZUluZm9FeHByZXNzaW9uZGFydFR5cGVpc1R5cGVWYXJpYWJsZVJlcGxhY2VtZW50SFR5cGVJbmZvRXhwcmVzc2lvbihraW5kQXNTdHJpbmdISXNUZXN0cnRpdHlwZUlucHV0SElzVGVzdCgpSEFzQ2hlY2tjaGVja2VkVHlwZUV4cHJlc3Npb25UeXBlRXJyb3JDYXN0RXJyb3JIQXNDaGVjayhIQXNDaGVja1NpbXBsZUhTdWJ0eXBlQ2hlY2tIU3VidHlwZUNoZWNrKClIUnRpSW5zdHJ1Y3Rpb25ITG9hZFR5cGVITG9hZFR5cGUoSEluc3RhbmNlRW52aXJvbm1lbnRISW5zdGFuY2VFbnZpcm9ubWVudCgpSFR5cGVFdmFsZW52U3RydWN0dXJlSFR5cGVFdmFsKEhUeXBlQmluZEhUeXBlQmluZCgpZGFydDJqcy5zZWxlY3RvcnV0aWxzU2VsZWN0b3JLaW5kR0VUVEVSU0VUVEVSQ0FMTFNQRUNJQUxzcGVjaWFsY2Fub25pY2FsaXplZFZhbHVlc2tpbmQ9LG1lbWJlck5hbWU9LGNhbGxTdHJ1Y3R1cmU6YXJndW1lbnRDb3VudG5hbWVkQXJndW1lbnRDb3VudGlzT3BlcmF0b3JOYW1lVW5hcnlPcGVyYXRvcktpbmQuTkVHQVRFc2VsZWN0b3JOYW1lVW5hcnlPcGVyYXRvcktpbmQuQ09NUExFTUVOVGZyb21FbGVtZW50Q2FuJ3QgZ2V0IHNlbGVjdG9yIGZyb20gdW5hcnlPcGVyYXRvcmNhbGxDbG9zdXJlYXJpdHljYWxsQ2xvc3VyZUZyb21jYWxsQ29uc3RydWN0b3JjYWxsRGVmYXVsdENvbnN0cnVjdG9ycmVhZExpYnJhcnlPck51bGx3cml0ZUxpYnJhcnlPck51bGxpbnZvY2F0aW9uTWlycm9yTWVtYmVyTmFtZWludm9jYXRpb25NaXJyb3JLaW5kc2lnbmF0dXJlQXBwbGllc2FwcGxpZXNUb051bGxXaXRob3V0VGhyb3dTZWxlY3RvcihzdHJ1Y3R1cmVUb1N0cmluZ3RvTm9ybWFsaXplZGlzTm9ybWFsaXplZHRvQ2FsbFNlbGVjdG9ydG9Ob25HZW5lcmljbm9uR2VuZXJpY09uZVNob3RJbnRlcmNlcHRvckRhdGFEeW5hbWljVXNlS2luZENvZGVnZW5Xb3JsZEJ1aWxkZXJhZGRDb21waWxlVGltZUNvbnN0YW50Rm9yRW1pc3Npb25Db2RlZ2VuV29ybGRmb3JFYWNoR2VuZXJpY0Nsb3N1cmVDYWxsTWV0aG9kaGFzSW52b2tlZEdldHRlcmhhc0ludm9rZWRTZXR0ZXJpbnZvY2F0aW9uc0J5TmFtZWdldHRlckludm9jYXRpb25zQnlOYW1lc2V0dGVySW52b2NhdGlvbnNCeU5hbWVmb3JFYWNoSW52b2tlZE5hbWVmb3JFYWNoSW52b2tlZEdldHRlcmZvckVhY2hJbnZva2VkU2V0dGVyaW5zdGFudGlhdGVkQ2xhc3Nlc21ldGhvZHNOZWVkc1N1cGVyR2V0dGVyZm9yRWFjaFN0YXRpY0ZpZWxkY29uc3RUeXBlTGl0ZXJhbHNsaXZlVHlwZUFyZ3VtZW50c2dldENvbnN0YW50c0ZvckVtaXNzaW9ucHJlU29ydENvbXBhcmVpc0FsaWFzZWRTdXBlck1lbWJlckNvZGVnZW5Xb3JsZEJ1aWxkZXJJbXBsX29uZVNob3RJbnRlcmNlcHRvckRhdGFfZGlyZWN0bHlJbnN0YW50aWF0ZWRDbGFzc2VzX2luc3RhbnRpYXRlZFR5cGVzX2ltcGxlbWVudGVkQ2xhc3Nlc19pbnZva2VkTmFtZXNfaW52b2tlZEdldHRlcnNfaW52b2tlZFNldHRlcnNfcHJvY2Vzc2VkQ2xhc3Nlc19tZW1iZXJVc2FnZV9pbnZva2FibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWVfcmVhZGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWVfd3JpdGFibGVJbnN0YW5jZU1lbWJlcnNCeU5hbWVfaXNDaGVja3Nfc2VsZWN0b3JDb25zdHJhaW50c1N0cmF0ZWd5X2NvbnN0YW50VmFsdWVzX2NvbnN0VHlwZUxpdGVyYWxzX2xpdmVUeXBlQXJndW1lbnRzX2NvbXBpbGVkQ29uc3RhbnRzY2xhc3NVc2FnZUZvclRlc3RpbmdjbGFzc1VzZWRfcHJvY2Vzc0luc3RhbnRpYXRlZENsYXNzX2dldENsYXNzVXNhZ2VpbXBsZW1lbnRfaGFzTWF0Y2hpbmdTZWxlY3RvcnNlbGVjdG9yc19nZXRNYXRjaGluZ0NhbGxTdHJ1Y3R1cmVzY2FsbFN0cnVjdHVyZXNfZ2V0SW52b2NhdGlvbkNhbGxTdHJ1Y3R1cmVzX2hhc0ludm9rZWRHZXR0ZXJfaGFzSW52b2tlZFNldHRlcm1lbWJlclVzZWRfcHJvY2Vzc3Nob3VsZEJlUmVtb3ZlZF9wcm9jZXNzU2V0dXNhZ2VEeW5hbWljVXNlS2luZC5JTlZPS0VyZWdpc3RlckR5bmFtaWNJbnZvY2F0aW9uX3JlZ2lzdGVyTmV3U2VsZWN0b3JpbnZva2V1aGFzUGVuZGluZ0R5bmFtaWNJbnZva2VEeW5hbWljVXNlS2luZC5HRVRoYXNQZW5kaW5nRHluYW1pY1JlYWREeW5hbWljVXNlS2luZC5TRVRoYXNQZW5kaW5nRHluYW1pY1dyaXRlc2VsZWN0b3JNYXBfZ2V0TWVtYmVyVXNhZ2VTdGF0aWNVc2VLaW5kLlNUQVRJQ19URUFSX09GRlN0YXRpY1VzZUtpbmQuSU5TVEFOQ0VfRklFTERfR0VUU3RhdGljVXNlS2luZC5JTlNUQU5DRV9GSUVMRF9TRVRTdGF0aWNVc2VLaW5kLkNBTExfTUVUSE9EU3RhdGljVXNlS2luZC5TVVBFUl9JTlZPS0VyZWdpc3RlclN0YXRpY0ludm9jYXRpb25TdGF0aWNVc2VLaW5kLlNVUEVSX0ZJRUxEX1NFVFN0YXRpY1VzZUtpbmQuU1VQRVJfU0VUVEVSX1NFVFN0YXRpY1VzZUtpbmQuU1RBVElDX1NFVFN0YXRpY1VzZUtpbmQuU1VQRVJfVEVBUl9PRkZTdGF0aWNVc2VLaW5kLlNVUEVSX0dFVFN0YXRpY1VzZUtpbmQuU1RBVElDX0dFVFN0YXRpY1VzZUtpbmQuRklFTERfSU5JVFN0YXRpY1VzZUtpbmQuRklFTERfQ09OU1RBTlRfSU5JVGNvbnN0YW50SW5pdFN0YXRpY1VzZUtpbmQuSU5MSU5JTkdTdGF0aWNVc2VLaW5kLkNMT1NVUkVTdGF0aWMgdXNlICBpcyBub3Qgc3VwcG9ydGVkIGR1cmluZyBjb2RlZ2VuLl9wcm9jZXNzSW5zdGFudGlhdGVkQ2xhc3NNZW1iZXJVbmVucXVldWVkIHVzYWdlIG9mIDogCmJlZm9yZTogPG5vbmU+CmFmdGVyIDogcG90ZW50aWFsQWNjZXNzZ2V0TWVtYmVyQWNjZXNzcHJvY2Vzc0NsYXNzY29tcGlsZWRDb25zdGFudHNGb3JUZXN0aW5ncmVnaXN0ZXJDb25zdFR5cGVMaXRlcmFscmVnaXN0ZXJUeXBlQXJndW1lbnRoYXNVc2V0eXBlVmFyaWFibGVUeXBlTGl0ZXJhbHNpc0NoZWNrc2NvbXBpbGVkQ29uc3RhbnRzaW52b2tlZE5hbWVzaW52b2tlZEdldHRlcnNpbnZva2VkU2V0dGVyc3N0YXRpY1R5cGVBcmd1bWVudERlcGVuZGVuY2llc2R5bmFtaWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXNDb2RlZ2VuV29ybGRJbXBsX2xpdmVNZW1iZXJVc2FnZV9zdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmNpZXNfZHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY2llc191c2VyTm9TdWNoTWV0aG9kc0NhY2hlX2Nsb3N1cml6ZWRNZW1iZXJzQ2FjaGVfY2xvc3VyaXplZFN0YXRpY3NDYWNoZWZhaWx1cmVmb3JFYWNoR2VuZXJpY01ldGhvZGZvckVhY2hHZW5lcmljSW5zdGFuY2VNZXRob2R1c2VyTm9TdWNoTWV0aG9kc21lbWJlclVzYWdlZ2VuZXJpY0xvY2FsRnVuY3Rpb25zY2xvc3VyaXplZE1lbWJlcnNoYXNSZWFkY2xvc3VyaXplZFN0YXRpY3Nmb3JFYWNoU3RhdGljVHlwZUFyZ3VtZW50Zm9yRWFjaER5bmFtaWNUeXBlQXJndW1lbnRyZWFkc0FjY2Vzcy5keW5hbWljQWNjZXNzQWNjZXNzLnN1cGVyQWNjZXNzd3JpdGVzX2FzVW5tb2RpZmlhYmxlc2VlbkNvbnN0YW50c3NvcnRlZGludm9rZXNCYWNrZW5kVXNhZ2VCYWNrZW5kVXNhZ2VCdWlsZGVySW50ZXJjZXB0b3JEYXRhQnVpbGRlck5hdGl2ZURhdGFCdWlsZGVyT3BlbldvcmxkQ2xhc3NRdWVyaWVzUmVzb2x1dGlvbldvcmxkQnVpbGRlcmNsb3NlZFdvcmxkRm9yVGVzdGluZ1Jlc29sdXRpb25FbnF1ZXVlcldvcmxkQnVpbGRlckluc3RhbmNlSW5zdGFudGlhdGlvbi5ESVJFQ1RMWV9JTlNUQU5USUFURUQgZGlyZWN0bHlJbnN0YW50aWF0aW9uLkFCU1RSQUNUTFlfSU5TVEFOVElBVEVEIGFic3RyYWN0bHlJbnN0YW50aWF0aW9uLlVOSU5TVEFOVElBVEVEIG5vbmVJbnN0YW50aWF0aW9uSW5mb2luc3RhbnRpYXRpb25NYXBpc0RpcmVjdGx5SW5zdGFudGlhdGVkaXNBYnN0cmFjdGx5SW5zdGFudGlhdGVkYWRkSW5zdGFudGlhdGlvbkluc3RhbnRpYXRpb24gIGlzIG5vdCBhbGxvd2VkLmhhc0luc3RhbnRpYXRpb25JbnN0YW50aWF0aW9uSW5mb1tuZWVkc0NvbW1hPHVua25vd24+UmVzb2x1dGlvbldvcmxkQnVpbGRlckltcGxfaW5zdGFudGlhdGlvbkluZm9fYWxsUmVmZXJlbmNlZFN0YXRpY0ZpZWxkc19tZXRob2RzTmVlZGluZ1N1cGVyR2V0dGVyX2ZpZWxkU2V0dGVyc19sb2NhbEZ1bmN0aW9uc19jbG9zdXJpemVkTWVtYmVyc1dpdGhGcmVlVHlwZVZhcmlhYmxlc19kYXJ0VHlwZXNfaW50ZXJjZXB0b3JEYXRhQnVpbGRlcl9ydGlOZWVkQnVpbGRlcl9hbGxvY2F0b3JBbmFseXNpc19ub1N1Y2hNZXRob2RSZWdpc3RyeV9jbGFzc0hpZXJhcmNoeUJ1aWxkZXJfY2xhc3NRdWVyaWVzX2Nsb3NlZF9jbG9zZWRXb3JsZENhY2hlX2xpdmVJbnN0YW5jZU1lbWJlcnNfZ2VuZXJpY0xvY2FsRnVuY3Rpb25zX3Byb2Nlc3NlZE1lbWJlcnNtZW1iZXJVc2FnZUZvclRlc3RpbmdUaGUgd29ybGQgYnVpbGRlciBoYXMgbm90IHlldCBiZWVuIGNsb3NlZC5nZXRJbnN0YW50aWF0aW9uTWFwY29udGFpbnNUeXBlVmFyaWFibGVzdXBkYXRlQ2xhc3NIaWVyYXJjaHlOb2RlRm9yQ2xhc3NkaXJlY3RseUluc3RhbnRpYXRlZGFic3RyYWN0bHlJbnN0YW50aWF0ZWREaXJlY3Qgc3RhdGljIHVzZSBpcyBub3Qgc3VwcG9ydGVkIGZvciByZXNvbHV0aW9uLiBpcyBub3Qgc3VwcG9ydGVkIGR1cmluZyByZXNvbHV0aW9uLl9jcmVhdGVDbGFzc1VzYWdldXBkYXRlVXNhZ2VoYXNQZW5kaW5nRHluYW1pY1VzZTogCmJlZm9yZTogCmFmdGVyIDogYWxsTWl4aW5Vc2VzT2Zwb3B1bGF0ZUhpZXJhcmNoeU5vZGVzdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3Nlc2FkZFN1YnR5cGVzdHlwZXNJbXBsZW1lbnRlZEJ5U3ViY2xhc3Nlc09mQ2xzZ2V0U3VwZXJ0eXBlc2NvbXB1dGVBc3NpZ25lZEluc3RhbmNlTWVtYmVyc2Fzc2lnbmVkSW5zdGFuY2VNZW1iZXJzaW5zdGFuY2VNZW1iZXJpc0luaGVyaXRlZElucmVsYXRpb25pc0luaGVyaXRlZEluQ2xhc3NtZW1iZXJIb2xkaW5nQ2xhc3Npc0luaGVyaXRlZEluRXhhY3RDbGFzc2lzSW5oZXJpdGVkSW5UaGlzQ2xhc3Npc0luaGVyaXRlZEluU3VidHlwZU9mVW5leHBlY3RlZCBDbGFzc1JlbGF0aW9uICBpcyB1c2VkIGJ1dCBub3QgcHJvY2Vzc2VkOiAgaXMgcHJvY2Vzc2VkIGJ1dCBub3QgdXNlZDogIGlzIHByb2Nlc3NlZCBidXQgaGFzIG5vdCB1c2FnZS5pbnN0YW5jZXNpbXBsZW1lbnRlZENsYXNzZXNsaXZlSW5zdGFuY2VNZW1iZXJzY2xvc3VyaXplZE1lbWJlcnNXaXRoRnJlZVR5cGVWYXJpYWJsZXNkYXJ0MmpzLnVuaXZlcnNlLndvcmxkX2ltcGFjdFZpc2l0VXNlbWVtYmVyOiBkeW5hbWljIHVzZXNzdGF0aWMgdXNlc3R5cGUgdXNlc2NvbnN0YW50IHVzZXNXb3JsZEltcGFjdEJ1aWxkZXJfZHluYW1pY1VzZXNfc3RhdGljVXNlc190eXBlVXNlc19jb25zdGFudFVzZXNhZGRJbXBhY3RTdGFnZWRXb3JsZEltcGFjdEJ1aWxkZXJjb2xsZWN0SW1wYWN0c19jdXJyZW50QnVpbGRlcl9idWlsZGVyc19lbnN1cmVCdWlsZGVyd29ybGRJbXBhY3RzVHJhbnNmb3JtZWRXb3JsZEltcGFjdFRyYW5zZm9ybWVkV29ybGRJbXBhY3QoSW1wYWN0VXNlQ2FzZShpbXBhY3RVc2VDYXNlX3Zpc2l0U3RhdGljVXNlX3Zpc2l0RHluYW1pY1VzZV92aXNpdFR5cGVVc2VfdmlzaXRDb25zdGFudFVzZWRhcnQyanMud29ybGRKRmllbGRBbmFseXNpc0ludGVyY2VwdG9yRGF0YU5hdGl2ZURhdGFOb1N1Y2hNZXRob2REYXRhUnVudGltZVR5cGVzTmVlZFdvcmxkY2xvc3VyZURhdGFMb29rdXBzb3J0ZXJ5Y29tcHV0ZVJlY2VpdmVyVHlwZUJ1aWx0V29ybGRkYXJ0MmpzLmNvbnN0YW50cy5leHByZXNzaW9uc0NvbnN0YW50RXhwcmVzc2lvbktpbmRDb25zdGFudEV4cHJlc3Npb25LaW5kLkFTQ29uc3RhbnRFeHByZXNzaW9uS2luZC5CSU5BUllDb25zdGFudEV4cHJlc3Npb25LaW5kLkJPT0xDb25zdGFudEV4cHJlc3Npb25LaW5kLkJPT0xfRlJPTV9FTlZJUk9OTUVOVENvbnN0YW50RXhwcmVzc2lvbktpbmQuQ09OQ0FURU5BVEVDb25zdGFudEV4cHJlc3Npb25LaW5kLkNPTkRJVElPTkFMQ29uc3RhbnRFeHByZXNzaW9uS2luZC5DT05TVFJVQ1RFRENvbnN0YW50RXhwcmVzc2lvbktpbmQuRE9VQkxFQ29uc3RhbnRFeHByZXNzaW9uS2luZC5FUlJPTkVPVVNDb25zdGFudEV4cHJlc3Npb25LaW5kLkZVTkNUSU9OQ29uc3RhbnRFeHByZXNzaW9uS2luZC5GSUVMRENvbnN0YW50RXhwcmVzc2lvbktpbmQuSURFTlRJQ0FMQ29uc3RhbnRFeHByZXNzaW9uS2luZC5JTlRDb25zdGFudEV4cHJlc3Npb25LaW5kLklOVF9GUk9NX0VOVklST05NRU5UQ29uc3RhbnRFeHByZXNzaW9uS2luZC5MSVNUQ29uc3RhbnRFeHByZXNzaW9uS2luZC5TRVRDb25zdGFudEV4cHJlc3Npb25LaW5kLk1BUENvbnN0YW50RXhwcmVzc2lvbktpbmQuTlVMTENvbnN0YW50RXhwcmVzc2lvbktpbmQuU1RSSU5HQ29uc3RhbnRFeHByZXNzaW9uS2luZC5TVFJJTkdfRlJPTV9FTlZJUk9OTUVOVENvbnN0YW50RXhwcmVzc2lvbktpbmQuU1RSSU5HX0xFTkdUSENvbnN0YW50RXhwcmVzc2lvbktpbmQuU1lNQk9MQ29uc3RhbnRFeHByZXNzaW9uS2luZC5UWVBFQ29uc3RhbnRFeHByZXNzaW9uS2luZC5VTkFSWUNvbnN0YW50RXhwcmVzc2lvbktpbmQuTE9DQUxfVkFSSUFCTEVDb25zdGFudEV4cHJlc3Npb25LaW5kLlBPU0lUSU9OQUxfUkVGRVJFTkNFQ29uc3RhbnRFeHByZXNzaW9uS2luZC5OQU1FRF9SRUZFUkVOQ0VDb25zdGFudEV4cHJlc3Npb25LaW5kLkFTU0VSVENvbnN0YW50RXhwcmVzc2lvbktpbmQuSU5TVEFOVElBVElPTkJJTkFSWUJPT0xCT09MX0ZST01fRU5WSVJPTk1FTlRDT05DQVRFTkFURUNPTlNUUlVDVEVERVJST05FT1VTRklFTERJREVOVElDQUxJTlRfRlJPTV9FTlZJUk9OTUVOVExJU1RNQVBTVFJJTkdfRlJPTV9FTlZJUk9OTUVOVFNUUklOR19MRU5HVEhUWVBFVU5BUllMT0NBTF9WQVJJQUJMRVBPU0lUSU9OQUxfUkVGRVJFTkNFTkFNRURfUkVGRVJFTkNFSU5TVEFOVElBVElPTmdldEtub3duVHlwZV9jcmVhdGVTdHJ1Y3R1cmVkVGV4dF9lcXVhbHNVc2UgQ29uc3RhbnRFeHByZXNzaW9uLnRvRGFydFRleHQoKSBvciBDb25zdGFudEV4cHJlc3Npb24udG9TdHJ1Y3R1cmVkVGV4dCgpIGluc3RlYWQgb2YgQ29uc3RhbnRFeHByZXNzaW9uLnRvU3RyaW5nKClpc0ltcGxpY2l0aXNQb3RlbnRpYWxFcnJvbmVvdXNDb25zdGFudEV4cHJlc3Npb25FcnJvbmVvdXMoKUJvb2xDb25zdGFudEV4cHJlc3Npb252aXNpdEJvb2xCb29sKHZhbHVlPUludENvbnN0YW50RXhwcmVzc2lvbnZpc2l0SW50SW50KHZhbHVlPURvdWJsZUNvbnN0YW50RXhwcmVzc2lvbnZpc2l0RG91YmxlRG91YmxlKHZhbHVlPVN0cmluZ0NvbnN0YW50RXhwcmVzc2lvbnZpc2l0U3RyaW5nU3RyaW5nKHZhbHVlPU51bGxDb25zdGFudEV4cHJlc3Npb252aXNpdE51bGxOdWxsKClMaXN0Q29uc3RhbnRFeHByZXNzaW9uTGlzdCh0eXBlPSx2YWx1ZXM9W2RlbGltaXRlcl0pU2V0Q29uc3RhbnRFeHByZXNzaW9udmlzaXRTZXRTZXQodHlwZT1NYXBDb25zdGFudEV4cHJlc3Npb252aXNpdE1hcE1hcCh0eXBlPSxlbnRyaWVzPVstPmV2YWx1YXRlTWFwQm9keUNvbnN0cnVjdGVkQ29uc3RhbnRFeHByZXNzaW9udmlzaXRDb25zdHJ1Y3RlZENvbnN0cnVjdGVkKHR5cGU9LGNvbnN0cnVjdG9yPWNhbGxTdHJ1Y3R1cmU9LGFyZ3VtZW50cz1bY29tcHV0ZUluc3RhbmNlRGF0YWNvbnN0YW50Q29uc3RydWN0b3JnZXRDb25zdHJ1Y3RvckNvbnN0YW50Tm8gY29uc3RhbnQgY29uc3RydWN0b3IgY29tcHV0ZWQgZm9yIGNvbXB1dGVJbnN0YW5jZVR5cGVldmFsdWF0ZUNvbnN0cnVjdG9yaW5zdGFuY2VEYXRhaXNWYWxpZEFzQ29uc3RhbnRmaWVsZE1hcE5vIHZhbHVlIGNvbXB1dGVkIGZvciBhc3NlcnRpb25hc3NlcnRpb25zQ29uY2F0ZW5hdGVDb25zdGFudEV4cHJlc3Npb252aXNpdENvbmNhdGVuYXRlQ29uY2F0ZW5hdGUoZXhwcmVzc2lvbnM9W1N5bWJvbENvbnN0YW50RXhwcmVzc2lvbnZpc2l0U3ltYm9sU3ltYm9sKG5hbWU9VHlwZUNvbnN0YW50RXhwcmVzc2lvblVuZXhwZWN0ZWQgdHlwZSBjb25zdGFudCB0eXBlOiBUeXBlKHR5cGU9QXNDb25zdGFudEV4cHJlc3Npb252aXNpdEFzQXModmFsdWU9ZXhwcmVzc2lvblZhbHVlY2hlY2tDYXN0c3R5cGVJbkNvbnRleHRnZXRUeXBlSW5Db250ZXh0Y2FzdFR5cGVGaWVsZENvbnN0YW50RXhwcmVzc2lvbkZpZWxkKGVsZW1lbnQ9ZXZhbHVhdGVGaWVsZGdldEZpZWxkQ29uc3RhbnRMb2NhbFZhcmlhYmxlQ29uc3RhbnRFeHByZXNzaW9udmlzaXRMb2NhbFZhcmlhYmxlTG9jYWxWYXJpYWJsZShlbGVtZW50PWdldExvY2FsQ29uc3RhbnRGdW5jdGlvbkNvbnN0YW50RXhwcmVzc2lvbkZ1bmN0aW9uKGVsZW1lbnQ9QmluYXJ5Q29uc3RhbnRFeHByZXNzaW9uUFJFQ0VERU5DRV9NQVBCaW5hcnlPcGVyYXRvcktpbmQuRVFCaW5hcnlPcGVyYXRvcktpbmQuTk9UX0VRQmluYXJ5T3BlcmF0b3JLaW5kLkxPR0lDQUxfQU5EQmluYXJ5T3BlcmF0b3JLaW5kLkxPR0lDQUxfT1JCaW5hcnlPcGVyYXRvcktpbmQuWE9SQmluYXJ5T3BlcmF0b3JLaW5kLkFOREJpbmFyeU9wZXJhdG9yS2luZC5PUkJpbmFyeU9wZXJhdG9yS2luZC5TSExCaW5hcnlPcGVyYXRvcktpbmQuU0hSQmluYXJ5T3BlcmF0b3JLaW5kLlNIUlVCaW5hcnlPcGVyYXRvcktpbmQuQUREQmluYXJ5T3BlcmF0b3JLaW5kLlNVQkJpbmFyeU9wZXJhdG9yS2luZC5NVUxCaW5hcnlPcGVyYXRvcktpbmQuRElWQmluYXJ5T3BlcmF0b3JLaW5kLklESVZCaW5hcnlPcGVyYXRvcktpbmQuR1RCaW5hcnlPcGVyYXRvcktpbmQuTFRCaW5hcnlPcGVyYXRvcktpbmQuR1RFUUJpbmFyeU9wZXJhdG9yS2luZC5MVEVRQmluYXJ5T3BlcmF0b3JLaW5kLk1PREJpbmFyeU9wZXJhdG9yS2luZC5JRl9OVUxMQmluYXJ5T3BlcmF0b3JLaW5kLklOREVYTWlzc2luZyBwcmVjZW5kZW5jZSBmb3IgYmluYXJ5IG9wZXJhdG9yOiAncG90ZW50aWFsT3BlcmF0b3JCaW5hcnkobGVmdD0sb3A9LHJpZ2h0PWxlZnRWYWx1ZXJpZ2h0VmFsdWVsZWZ0Q29uc3RhbnRsZWZ0VHlwZXJpZ2h0Q29uc3RhbnRyaWdodFR5cGVzaGlmdGtub3duTGVmdFR5cGVrbm93blJpZ2h0VHlwZVVuZXhwZWN0ZWQgY29uc3RhbnQgYmluYXJ5IG9wZXJhdG9yOiBJZGVudGljYWxDb25zdGFudEV4cHJlc3Npb252aXNpdElkZW50aWNhbElkZW50aWNhbChsZWZ0PVVuYXJ5Q29uc3RhbnRFeHByZXNzaW9uVW5hcnlPcGVyYXRvcktpbmQuTk9UdmlzaXRVbmFyeVVuYXJ5KG9wPSxleHByZXNzaW9uPVN0cmluZ0xlbmd0aENvbnN0YW50RXhwcmVzc2lvbnZpc2l0U3RyaW5nTGVuZ3RoU3RyaW5nTGVuZ3RoKGV4cHJlc3Npb249Q29uZGl0aW9uYWxDb25zdGFudEV4cHJlc3Npb250cnVlRXhwZmFsc2VFeHBDb25kaXRpb25hbChjb25kaXRpb249LHRydWU9LGZhbHNlPWNvbmRpdGlvblZhbHVldHJ1ZVZhbHVlZmFsc2VWYWx1ZXRydWVUeXBlZmFsc2VUeXBlUG9zaXRpb25hbEFyZ3VtZW50UmVmZXJlbmNldmlzaXRQb3NpdGlvbmFsUG9zaXRpb25hbChpbmRleD1nZXRQb3NpdGlvbmFsQXJndW1lbnROYW1lZEFyZ3VtZW50UmVmZXJlbmNldmlzaXROYW1lZE5hbWVkKG5hbWU9Z2V0TmFtZWRBcmd1bWVudEZyb21FbnZpcm9ubWVudENvbnN0YW50RXhwcmVzc2lvbl9jaGVja05hbWVGcm9tRW52aXJvbm1lbnRCb29sRnJvbUVudmlyb25tZW50Q29uc3RhbnRFeHByZXNzaW9udmlzaXRCb29sRnJvbUVudmlyb25tZW50Ym9vbC5mcm9tRW52aXJvbm1lbnQobmFtZT0sZGVmYXVsdFZhbHVlPW5hbWVDb25zdGFudFZhbHVlZGVmYXVsdENvbnN0YW50VmFsdWVuYW1lU3RyaW5nQ29uc3RhbnRWYWx1ZXJlYWRGcm9tRW52aXJvbm1lbnRJbnRGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb252aXNpdEludEZyb21FbnZpcm9ubWVudGludC5mcm9tRW52aXJvbm1lbnQobmFtZT1TdHJpbmdGcm9tRW52aXJvbm1lbnRDb25zdGFudEV4cHJlc3Npb252aXNpdFN0cmluZ0Zyb21FbnZpcm9ubWVudFN0cmluZy5mcm9tRW52aXJvbm1lbnQobmFtZT1Bc3NlcnRDb25zdGFudEV4cHJlc3Npb24sbWVzc2FnZT12YWxpZEFzc2VydGVuYWJsZUFzc2VydGlvbnN2aXNpdEFzc2VydEluc3RhbnRpYXRpb25Db25zdGFudEV4cHJlc3Npb25JbnN0YW50aWF0aW9uKHR5cGVBcmd1bWVudHM9dHlwZUFyZ3VtZW50c0luQ29udGV4dENvbnN0YW50RXhwcmVzc2lvblZpc2l0b3JleHBDb25zdEV4cFByaW50ZXJsZWZ0QXNzb2NpYXRpdmV3cml0ZVR5cGVBcmd1bWVudHMgYXMgY29uc3QgbmFtZWRPZmZzZXRpZGVudGljYWwoLmxlbmd0aCA/ICA6IGFyZ3NbY29uc3QgYm9vbC5mcm9tRW52aXJvbm1lbnQoLCBkZWZhdWx0VmFsdWU6IGNvbnN0IGludC5mcm9tRW52aXJvbm1lbnQoY29uc3QgU3RyaW5nLmZyb21FbnZpcm9ubWVudChkYXJ0MmpzLmNvZGVfb3V0cHV0U291cmNlTG9jYXRpb25zYWRkU291cmNlTG9jYXRpb250YXJnZXRPZmZzZXRzb3VyY2VQb3NpdGlvbmFkZFB1c2hwdXNoUG9zaXRpb25hZGRQb3Bmb3JFYWNoU291cmNlTG9jYXRpb25mcmFtZU1hcmtlcnNfU291cmNlTG9jYXRpb25zSW1wbG1hcmtlcnNmcmFtZXNfbWVyZ2VTb3VyY2VMb2NhdGlvbnNQcm92aWRlcmNyZWF0ZVNvdXJjZUxvY2F0aW9uc0NvZGVPdXRwdXRhZGRCdWZmZXJBYnN0cmFjdENvZGVPdXRwdXRzb3VyY2VMb2NhdGlvbnNNYXBfYWRkSW50ZXJuYWxDb2RlIG91dHB1dCBpcyBjbG9zZWQuIFRyeWluZyB0byB3cml0ZSAnZ2V0VGV4dENvZGUgb3V0cHV0IGlzIGFscmVhZHkgY2xvc2VkLkJ1ZmZlcmVkQ29kZU91dHB1dENvZGVCdWZmZXJEb24ndCB1c2UgQ29kZUJ1ZmZlci50b1N0cmluZygpIHNpbmNlIGl0IGRyb3BzIHNvdXJjZW1hcCBkYXRhLlN0cmVhbUNvZGVPdXRwdXRfbGlzdGVuZXJzSW50ZXJuZXJOdWxsSW50ZXJuZXJmYXN0YS5jbGFzc19oaWVyYXJjaHlfYnVpbGRlclN0YW5kYXJkQm91bmRzVHlwZUNvbnN0cmFpbnRGb3J3YXJkaW5nTm9kZVR5cGVzRGVidWdMb2dnZXJvYmplY3RLZXJuZWxDbGFzc2Z1dHVyZUtlcm5lbENsYXNzZnV0dXJlT3JLZXJuZWxDbGFzc2Z1bmN0aW9uS2VybmVsQ2xhc3NudWxsS2VybmVsQ2xhc3NnZXROb2RlRnJvbUNsYXNzZ2V0Tm9kZUZyb21UeXBlZ2V0Tm9kZUZyb21LZXJuZWxDbGFzc2FzU3VwZXJ0eXBlT2ZjbHNOb2Rlc3VwZXJ0eXBlTm9kZXN1cGVyY2xhc3Nlc3N1cGVydHlwZURlY2xhcmF0aW9uZ2V0S2VybmVsVHlwZUFzSW5zdGFuY2VPZmdldEtlcm5lbExlZ2FjeUxlYXN0VXBwZXJCb3VuZG5vZGUxbm9kZTJub2RlczFjb21wdXRlQWxsU3VwZXJOb2Rlc25vZGVzMmNhbmRpZGF0ZTFjYW5kaWRhdGUybWF4SW5oZXJpdGFuY2VQYXRoZ2V0SW50ZXJmYWNlTWVtYmVyS2VybmVsZ2V0RGlzcGF0Y2hUYXJnZXRLZXJuZWxDbGFzc0hpZXJhcmNoeU5vZGVCdWlsZGVyaGFzTm9TdWNoTWV0aG9kYWJzdHJhY3RNZW1iZXJzc3Vic3RpdHV0aW9uc2hhbmRsZU1lcmdlQ29uZmxpY3RtZXJnZUtpbmRoYW5kbGVNZXJnZUNvbmZsaWN0OiBjaGVja0luaGVyaXRhbmNlQ29uZmxpY3RNZXJnZUtpbmQuc3VwZXJjbGFzc01lbWJlcnNNZXJnZUtpbmQuc3VwZXJjbGFzc1NldHRlcnNzdXBlcmNsYXNzOiBjaGVja1ZhbGlkT3ZlcnJpZGUoY2hlY2tWYWxpZE92ZXJyaWRlcmVjb3JkQWJzdHJhY3RNZW1iZXJpc0luaGVyaXRhYmxlQ29uZmxpY3RNZXJnZUtpbmQubWVtYmVyc1dpdGhTZXR0ZXJzTWVyZ2VLaW5kLnNldHRlcnNXaXRoTWVtYmVyc2luZmVyRmllbGRUeXBlc2luZmVyTWV0aG9kVHlwZXNNZXJnZUtpbmQuaW50ZXJmYWNlc01lbWJlcnNNZXJnZUtpbmQuaW50ZXJmYWNlc1NldHRlcnNNZXJnZUtpbmQuc3VwZXJ0eXBlc01lbWJlcnNNZXJnZUtpbmQuc3VwZXJ0eXBlc1NldHRlcnNzdXBlcnR5cGVzOiBjaGVja1ZhbGlkT3ZlcnJpZGUoYWRkQWxsRGVjbGFyYXRpb25zVG9zdXBlcnR5cGVzOiByZXBvcnRJbmhlcml0YW5jZUNvbmZsaWN0VHJ5aW5nIHRvIGluZmVyIHR5cGVzIGZvciAgYmFzZWQgb24gaGFzU2FtZVNpZ25hdHVyZWluZmVyR2V0dGVyVHlwZWluZmVyU2V0dGVyVHlwZWhhZFR5cGVzSW5mZXJyZWRhQ2xzYVN1YnN0aXR1dGlvbmJDbHNiU3Vic3RpdHV0aW9uYVByb2NlZHVyZUdpdmluZyB1cCAxYlByb2NlZHVyZWFGdW5jdGlvbmJGdW5jdGlvbmFUeXBlUGFyYW1ldGVyc2JUeXBlUGFyYW1ldGVyc3R5cGVQYXJhbWV0ZXJDb3VudEdpdmluZyB1cCAyY29weVR5cGVQYXJhbWV0ZXJDb3ZhcmlhbmNlYUJvdW5kYkJvdW5kR2l2aW5nIHVwIDNhUmV0dXJuVHlwZWJSZXR1cm5UeXBlR2l2aW5nIHVwIDRhUG9zaXRpb25hbGJQb3NpdGlvbmFsR2l2aW5nIHVwIDVHaXZpbmcgdXAgNmFQYXJhbWV0ZXJiUGFyYW1ldGVyY29weVBhcmFtZXRlckNvdmFyaWFuY2VhVHlwZWJUeXBlR2l2aW5nIHVwIDhhTmFtZWRiTmFtZWRHaXZpbmcgdXAgOUdpdmluZyB1cCAxMGFDb3VudGJDb3VudEdpdmluZyB1cCAxMUdpdmluZyB1cCAxMkluZmVycmluZyB0eXBlcyBmb3Igc3VjY2VlZGVkLmZhaWxlZC5JbmZlcnJpbmcgZ2V0dGVyIHR5cGVzIGZvciBiVGFyZ2V0R2l2aW5nIHVwICh0eXBlIG1heSBiZSBpbmZlcnJlZClHaXZpbmcgdXAgKHJldHVybiB0eXBlIG1heSBiZSBpbmZlcnJlZClHaXZpbmcgdXAgKG5vdCBhY2Nlc3NvcjogR2l2aW5nIHVwIChub3QgZmllbGQvcHJvY2VkdXJlOiBJbmZlcnJpbmcgc2V0dGVyIHR5cGVzIGZvciBjb3B5UGFyYW1ldGVyQ292YXJpYW5jZUZyb21GaWVsZGNoZWNrVmFsaWRPdmVycmlkZShhVGFyZ2V0VHJ5aW5nIHRvIGluZmVyIGZpZWxkIHR5cGVzIGZvciBpbmhlcml0ZWRUeXBlY29weUZpZWxkQ292YXJpYW5jZUZyb21QYXJhbWV0ZXJjb3B5RmllbGRDb3ZhcmlhbmNlR2l2aW5nIHVwIChpbmhlcml0ZWRUeXBlID09IG51bGwpCmJGaWVsZGFGaWVsZHN0YXRpY01lbWJlcmR1cGxpY2F0ZWhhbmRsZU9ubHlBaGFuZGxlT25seUJ3aXRoUGFyZW50c3VwZXJub2RlaW5mZXJNaXhpbkFwcGxpY2F0aW9ubG9jYWxNZW1iZXJzbG9jYWxTZXR0ZXJzbWVyZ2VBY2Nlc3NvcnNjbGFzc01lbWJlcnNjbGFzc1NldHRlcnNpbnRlcmZhY2VNZW1iZXJzc3Vic3RTdXBlcnR5cGVzcmVjb3JkU3VwZXJ0eXBlZGlyZWN0SW50ZXJmYWNlc2lnbm9yZUZ1bmN0aW9uc3VwZXJjbGFzc0ludGVyZmFjZXNtZXJnZUludGVyZmFjZXNtZXJnZWRNZW1iZXJzbWVyZ2VkU2V0dGVyc2FkZEludGVyZmFjZWRpcmVjdEludGVyZmFjZWludGVyZmFjZU5vZGVyZXBvcnRNaXNzaW5nTWVtYmVyc2luc3RhbGxOc21IYW5kbGVyc0luICByZWNvcmRTdXBlcnR5cGUoY29tcHV0ZURlZmF1bHRUeXBlQXJndW1lbnRza2VybmVsQXJndW1lbnRza2VybmVsUGFyYW1ldGVycyBhcmVuJ3Qgc3Vic3RlZHN1YnN0ZWRzdWJzdCBpc24ndCBzdWJzdGVkbXlEZXB0aG1lcmdlSW50ZXJmYWNlcyhtZW1iZXJMaXN0c3NldHRlckxpc3RzbWVyZ2VMaXN0c2lzT2RkY29udGV4dE1hcHBhcmVudE5hbWVhTGlzdGJMaXN0a2VybmVsTWl4ZWRJblR5cGVpbmZlcnJlZEFyZ3VtZW50c0NsYXNzSGllcmFyY2h5Tm9kZSAgTG9uZ2VzdCBwYXRoIHRvIE9iamVjdDogICBzdXBlcmNsYXNzZXM6LT4gICBpbnRlcmZhY2VzOnByaW50TWVtYmVyc2hlYWRpbmcgICAgZmluZE1lbWJlcmNvbXBhcmVNYXhJbmhlcml0YW5jZVBhdGhNZXJnZVJlc3VsdE1lcmdlS2luZHN1cGVyY2xhc3NNZW1iZXJzc3VwZXJjbGFzc1NldHRlcnNpbnRlcmZhY2VzTWVtYmVyc2ludGVyZmFjZXNTZXR0ZXJzc3VwZXJ0eXBlc01lbWJlcnNzdXBlcnR5cGVzU2V0dGVyc21lbWJlcnNXaXRoU2V0dGVyc3NldHRlcnNXaXRoTWVtYmVyc0J1aWxkZXJNaXhpbkluZmVycmVyX1R5cGVCdWlsZGVyQ29uc3RyYWludEdhdGhlcmVyJlR5cGVDb25zdHJhaW50R2F0aGVyZXImU3RhbmRhcmRCb3VuZHNzdWJjbGFzc2luZ2dldFN0YW5kYXJkTG93ZXJCb3VuZF9mdW5jdGlvblN0YW5kYXJkTG93ZXJCb3VuZF90eXBlUGFyYW1ldGVyU3RhbmRhcmRVcHBlckJvdW5kX2ludGVyZmFjZVN0YW5kYXJkVXBwZXJCb3VuZF9mdW5jdGlvblN0YW5kYXJkVXBwZXJCb3VuZHR5cGUxID0gOyB0eXBlMiA9IGd0b3RhbFBvc2l0aW9uYWxmVHlwZWdUeXBlaGFzUG9zaXRpb25hbGZOYW1lZ05hbWVvcmRlcmhhc05hbWVkdEFyZ3MxdEFyZ3MydEFyZ3NUeXBlQnVpbGRlckNvbnN0cmFpbnRHYXRoZXJlcmFkZExvd2VyQm91bmRhZGRVcHBlckJvdW5kaXNTdWJ0eXBlT2ZLZXJuZWxjaGVja092ZXJyaWRlaXNJbnRlcmZhY2VDaGVja0RlbGF5ZWQgb3ZlcnJpZGUgY2hlY2sgb2YgIHdydC4gSW5mZXJyZWQgdHlwZSAgZm9yIG1vZGlmeUtlcm5lbEluaGVyaXRlZEltcGxlbWVudGF0aW9uSW50ZXJmYWNlQ29uZmxpY3Rjb21iaW5lZE1lbWJlclNpZ25hdHVyZVJlc3VsdEluaGVyaXRlZEltcGxlbWVudGF0aW9uSW50ZXJmYWNlQ29uZmxpY3QoY29uY3JldGVJbXBsZW1lbnRhdGlvbmNyZWF0ZUZvcndhcmRlcnNJbnRlcmZhY2VDb25mbGljdEludGVyZmFjZUNvbmZsaWN0KGNvbXB1dGVNZW1iZXJUeXBlaXNNb3JlU3BlY2lmaWNiZXN0U29GYXJiZXN0VHlwZVNvRmFyY2FuZGlkYXRlVHlwZUNvbWJpbmVkIE1lbWJlciBTaWduYXR1cmU6ICA8OiAgITw6IENvbWJpbmVkIE1lbWJlciBTaWduYXR1cmUgYmVzdFNvRmFyOiBkYXJ0OmpzanNfZGFydDJqcy5kYXJ0anNfbnVtYmVyLmRhcnRpc0Fub255bW91c01peGluQXBwbGljYXRpb25Db21iaW5lZCBNZW1iZXIgU2lnbmF0dXJlIG9mIDogbmV3IEZvcndhcmRpbmdOb2RlKHN0dWI6IGFkZGVkIHN0dWIgOiBwaWNrZWQgYmVzdFNvRmFyQWJzdHJhY3RNZW1iZXJPdmVycmlkaW5nSW1wbGVtZW50YXRpb25hYnN0cmFjdE1lbWJlcnNlbGVjdEFic3RyYWN0c2VsZWN0Q29uY3JldGVjb21wYXJlRGVjbGFyYXRpb25zaXNOYW1lVmlzaWJsZUluaXNJbmhlcml0YW5jZUNvbmZsaWN0aW1wbGllc1NldHRlcmFQb3NpdGlvbmFsUGFyYW1ldGVyc2JQb3NpdGlvbmFsUGFyYW1ldGVyc2FOYW1lZFBhcmFtZXRlcnNiTmFtZWRQYXJhbWV0ZXJzaW5oZXJpdGVkQ29uZmxpY3RDb250ZXh0aW5oZXJpdGVkQ29uZmxpY3RDb250ZXh0S2VybmVsYWRkRGVjbGFyYXRpb25JZkRpZmZlcmVudGNvbXBhcmVOYW1lZFBhcmFtZXRlcnNpbmZlclBhcmFtZXRlclR5cGVyZXBvcnRDYW50SW5mZXJQYXJhbWV0ZXJUeXBlcmVwb3J0Q2FudEluZmVyUmV0dXJuVHlwZXJlcG9ydENhbnRJbmZlckZpZWxkVHlwZWhhc0V4cGxpY2l0UmV0dXJuVHlwZWhhc0V4cGxpY2l0bHlUeXBlZEZvcm1hbFBhcmFtZXRlcmZhc3RhLmltcGxpY2l0X3R5cGVpc1N0YXJ0ZWRmYXN0YS5rZXJuZWxfdmFyaWFibGVfYnVpbGRlcl9fbG9hZExpYnJhcnlfVW5saW5rZWRTY29wZWZhc3RhUGF0aC9wa2cvZnJvbnRfZW5kL2xpYi9zcmMvZmFzdGEvL3BrZy9mcm9udF9lbmQvdG9vbC9fZmFzdGEvY29tbWFuZF9saW5lLmRhcnRrZXJuZWwvYm9keV9idWlsZGVyLmRhcnRmYXN0YS50YXJnZXRmYXN0YS5kaWxsX2NsYXNzX2J1aWxkZXJ0YXJnZXRTdXBlcnR5cGVidWlsZFR5cGVBcmd1bWVudHNtaXhlZEluVHlwZT1jb21wdXRlVHlwZVZhcmlhYmxlQnVpbGRlcnNmYXN0YS5kaWxsX3R5cGVkZWZfYnVpbGRlcmJ1aWxkVGhpc1R5cGVmYXN0YS50eXBlX2J1aWxkZXJfY29tcHV0ZXJVbnN1cHBvcnRlZE5vdCBpbXBsZW1lbnRlZFR5cGVWYXJpYWJsZUdyYXBodHlwZVBhcmFtZXRlckluZGljZXNjb2xsZWN0b3JvY2N1cnJlZE9jY3VycmVuY2VDb2xsZWN0b3JWaXNpdG9ydW5yZWxhdGVkaW52YXJpYW50bWVldHVwcGVyQm91bmRzbG93ZXJCb3VuZHN0eXBlUGFyYW1ldGVySW5kZXh0eXBlZGVmUmhzUmVzdWx0Y2xvbmVkYXJndW1lbnRzUmVzdWx0YXJndW1lbnRzVG9SZXBvcnR0eXBlZGVmSW5zdGFudGlhdGlvbnNjb252ZXJ0U3VwZXJCb3VuZGVkVG9SZWd1bGFyQm91bmRlZHJlcGxhY2VkVHlwZUFyZ3VtZW50c3JlcGxhY2VkUmV0dXJuVHlwZXJlcGxhY2VkUG9zaXRpb25hbFBhcmFtZXRlcnNyZXBsYWNlZE5hbWVkUGFyYW1ldGVyc2NvbnRhaW5lZFVyaWZhc3RhLmNvbmZpZ3VyYXRpb25mYXN0YS5leHBvcnRmYXN0YS5pbXBvcnRjcmVhdGVQcmVmaXhCdWlsZGVySW5zdHJ1bWVudGF0aW9uVmFsdWVtYXRjaGVzSW5zdHJ1bWVudGF0aW9uVmFsdWVMaXRlcmFsX3Nob3J0ZW5JbnN0cnVtZW50YXRpb25TdHJpbmdkYXJ0LmNvcmU6OmRhcnQuYXN5bmM6OnRlc3Q6OmZhc3RhLnRyYW5zZm9ybV9jb2xsZWN0aW9uc2xpc3RBZGRzZXRGYWN0b3J5c2V0QWRkbWFwUHV0bWFwRW50cnlLZXltYXBFbnRyeVZhbHVlZ2V0OmVudHJpZXNfZmluZFNldEZhY3RvcnlfdHJhbnNsYXRlTGlzdE9yU2V0X2FkZEV4cHJlc3Npb25FbGVtZW50X3RyYW5zbGF0ZUVsZW1lbnRfdHJhbnNsYXRlU3ByZWFkRWxlbWVudF90cmFuc2xhdGVJZkVsZW1lbnRfdHJhbnNsYXRlRm9yRWxlbWVudF90cmFuc2xhdGVGb3JJbkVsZW1lbnR0aGVuU3RhdGVtZW50c2Vsc2VTdGF0ZW1lbnRzdGhlbkJvZHllbHNlQm9keWxvb3BCb2R5bG9vcHRlbXBlbHRjYXN0ZWRWYXJfdHJhbnNsYXRlQ29uc3RMaXN0T3JTZXRfdHJhbnNsYXRlQ29uc3RNYXBfYWRkTm9ybWFsRW50cnlfdHJhbnNsYXRlRW50cnlfdHJhbnNsYXRlU3ByZWFkRW50cnlfdHJhbnNsYXRlSWZFbnRyeV90cmFuc2xhdGVGb3JFbnRyeV90cmFuc2xhdGVGb3JJbkVudHJ5a2V5VmFydmFsdWVWYXJjdXJyZW50UGFydGZhc3RhLnRyYW5zZm9ybV9zZXRfbGl0ZXJhbHNhZGRNZXRob2R1bm1vZGlmaWFibGVTZXRDb25zdHJ1Y3Rvcl9maW5kQWRkTWV0aG9kX2ZpbmRVbm1vZGlmaWFibGVTZXRDb25zdHJ1Y3RvcmNvbGxlY3Rpb25Vcmljb2xsZWN0aW9uTGlicmFyeW1hcEV4cHNldFZhcnNldEV4cGZhc3RhLnBhcnNlci5jbGFzc19tZW1iZXJfcGFyc2VyRXJyb3JEZWxlZ2F0aW9uTGlzdGVuZXJza2lwUGFyc2Vyc2tpcEV4cHJlc3Npb25wYXJzZUlkZW50aWZpZXJFeHByZXNzaW9ubWF5UGFyc2VGdW5jdGlvbkV4cHJlc3Npb25zYXN5bmNTdGF0ZWxvb3BTdGF0ZXBhcnNlQXJndW1lbnRzT3B0c2tpcEFyZ3VtZW50c09wdHBhcnNlRnVuY3Rpb25Cb2R5YWxsb3dBYnN0cmFjdHNraXBGdW5jdGlvbkJvZHlwYXJzZUludmFsaWRCbG9ja3NraXBCbG9ja2Zhc3RhLmRpZXRfbGlzdGVuZXJpc0lnbm9yZWRQYXJzZXJFcnJvcmltcG9ydEV4cG9ydERpcmVjdGl2ZUluZGV4cGFydERpcmVjdGl2ZUluZGV4Y3VycmVudENsYXNzSXNQYXJzZXJSZWNvdmVyeXVubmFtZWRFeHRlbnNpb25Db3VudGVyZGlzY2FyZGVuZFBhcnRPZnBhcnRLZXl3b3Jkb2ZLZXl3b3JkUGFydE9maGFuZGxlSW52YWxpZFRvcExldmVsRGVjbGFyYXRpb25JbnZhbGlkVG9wTGV2ZWxEZWNsYXJhdGlvbmhhbmRsZU5vQXJndW1lbnRzTm9Bcmd1bWVudHNoYW5kbGVOb1R5cGVBcmd1bWVudHNOb1R5cGVBcmd1bWVudHNoYW5kbGVOb0NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzTm9Db25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50c2hhbmRsZU5vVHlwZWxhc3RDb25zdW1lZE5vVHlwZWVuZFR5cGVMaXN0VHlwZUxpc3RoYW5kbGVOYW1lZE1peGluQXBwbGljYXRpb25XaXRoQ2xhdXNld2l0aEtleXdvcmROYW1lZE1peGluQXBwbGljYXRpb25XaXRoQ2xhdXNlaGFuZGxlQ2xhc3NXaXRoQ2xhdXNlQ2xhc3NXaXRoQ2xhdXNlaGFuZGxlQ2xhc3NOb1dpdGhDbGF1c2VDbGFzc05vV2l0aENsYXVzZWhhbmRsZU5vRm9ybWFsUGFyYW1ldGVyc05vRm9ybWFsUGFyYW1ldGVyc2VuZEZ1bmN0aW9uVHlwZUFsaWFzdHlwZWRlZktleXdvcmRGdW5jdGlvblR5cGVBbGlhc3R5cGVkZWZCdWlsZGVybG9va3VwQnVpbGRlcm1ldGFkYXRhVG9rZW50b2tlbkZvck9mZnNldGlzUG9zaXRpb25hbGJ1aWxkRmllbGRzZW5kVG9wTGV2ZWxNZXRob2RnZXRPclNldFRvcExldmVsTWV0aG9kYm9keVRva2VuY3JlYXRlRnVuY3Rpb25MaXN0ZW5lcmJ1aWxkRnVuY3Rpb25Cb2R5TWVtYmVyS2luZC5Ub3BMZXZlbE1ldGhvZGhhbmRsZU5vRnVuY3Rpb25Cb2R5Tm9GdW5jdGlvbkJvZHllbmRMaWJyYXJ5TmFtZWxpYnJhcnlLZXl3b3JkaGFuZGxlRG90dGVkTmFtZWZpcnN0SWRlbnRpZmllckRvdHRlZE5hbWVlbmRDb25kaXRpb25hbFVyaWVxdWFsU2lnbkNvbmRpdGlvbmFsVXJpZW5kQ29uZGl0aW9uYWxVcmlzQ29uZGl0aW9uYWxVcmlzaGFuZGxlT3BlcmF0b3JOYW1lb3BlcmF0b3JLZXl3b3JkT3BlcmF0b3JOYW1laGFuZGxlSW52YWxpZE9wZXJhdG9yTmFtZUludmFsaWRPcGVyYXRvck5hbWVoYW5kbGVJZGVudGlmaWVyTGlzdElkZW50aWZpZXJMaXN0ZW5kU2hvd3Nob3dLZXl3b3JkU2hvd2VuZEhpZGVoaWRlS2V5d29yZEhpZGVlbmRDb21iaW5hdG9yc0NvbWJpbmF0b3JzaGFuZGxlSW1wb3J0UHJlZml4ZGVmZXJyZWRLZXl3b3JkYXNLZXl3b3JkSW1wb3J0UHJlZml4cHVzaElmTnVsbE51bGxWYWx1ZS5QcmVmaXhlbmRJbXBvcnRpbXBvcnRLZXl3b3JkaW1wb3J0VXJpVG9rZW5saWJyYXJ5Tm9kZWhhbmRsZVJlY292ZXJJbXBvcnRlbmRFeHBvcnRleHBvcnRLZXl3b3JkZW5kUGFydFBhcnRlbmRGYWN0b3J5TWV0aG9kZmFjdG9yeUtleXdvcmRGYWN0b3J5TWV0aG9kYnVpbGRSZWRpcmVjdGluZ0ZhY3RvcnlNZXRob2RNZW1iZXJLaW5kLkZhY3RvcnllbmRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5aGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5TmF0aXZlRnVuY3Rpb25Cb2R5aGFuZGxlTmF0aXZlRnVuY3Rpb25Cb2R5SWdub3JlZE5hdGl2ZUZ1bmN0aW9uQm9keUlnbm9yZWRoYW5kbGVOYXRpdmVGdW5jdGlvbkJvZHlTa2lwcGVkTmF0aXZlRnVuY3Rpb25Cb2R5U2tpcHBlZGVuZE1ldGhvZGJlZ2luUGFyYW1NZW1iZXJLaW5kLlN0YXRpY01ldGhvZE1lbWJlcktpbmQuTm9uU3RhdGljTWV0aG9kdHlwZVBhcmFtZXRlclNjb3BlY29tcHV0ZVR5cGVQYXJhbWV0ZXJTY29wZXBhcnNlTWV0YWRhdGFTdGFycGFyc2VGb3JtYWxQYXJhbWV0ZXJzT3B0cGFyc2VGaWVsZHNoYW5kbGVJbnZhbGlkTWVtYmVySW52YWxpZE1lbWJlcmJlZ2luQ2xhc3NPck1peGluQm9keWVuZENsYXNzT3JNaXhpbkJvZHltZW1iZXJDb3VudENsYXNzT3JNaXhpbkJvZHliZWdpbkNsYXNzRGVjbGFyYXRpb25hYnN0cmFjdFRva2VuZW5kQ2xhc3NEZWNsYXJhdGlvbmJlZ2luTWl4aW5EZWNsYXJhdGlvbm1peGluS2V5d29yZGVuZE1peGluRGVjbGFyYXRpb25iZWdpbkV4dGVuc2lvbkRlY2xhcmF0aW9uZXh0ZW5zaW9uS2V5d29yZGV4dGVuc2lvbiNlbmRFeHRlbnNpb25EZWNsYXJhdGlvbmVuZEVudW1lbnVtS2V5d29yZEVudW1lbmROYW1lZE1peGluQXBwbGljYXRpb25jbGFzc0tleXdvcmRpbXBsZW1lbnRzS2V5d29yZE5hbWVkTWl4aW5BcHBsaWNhdGlvbmdldEFzeW5jTWFya2VybGlzdGVuZXJGaW5pc2hGdW5jdGlvbmxpc3RlbmVyRmluaXNoRmllbGRzcGFyc2VJbml0aWFsaXplcnNPcHRwYXJzZUFzeW5jTW9kaWZpZXJPcHRwYXJzZVRvcExldmVsTWVtYmVycGFyc2VDbGFzc09yTWl4aW5NZW1iZXJoYW5kbGVEdXBsaWNhdGVkTmFtZWNoZWNrQnVpbGRlcm5lYXJlc3REZWNsYXJhdGlvbm1pbkRpc3RhbmNlZGlzdGFuY2V0b2tlbnNGb3JPZmZzZXRzaXNJZ25vcmVkRXJyb3JmYXN0YS5kaWV0X3BhcnNlcnBhcnNlRm9ybWFsUGFyYW1ldGVyc1Jlc3Rza2lwRm9ybWFsUGFyYW1ldGVyc1Jlc3RmYXN0YS5vdXRsaW5lX2J1aWxkZXJNZXRob2RCb2R5LkFic3RyYWN0TWV0aG9kQm9keS5SZWd1bGFyTWV0aG9kQm9keS5SZWRpcmVjdGluZ0ZhY3RvcnlCb2R5UmVndWxhcmluQ29uc3RydWN0b3JOYW1lcG9wQ2hhck9mZnNldHBvcElkZW50aWZpZXJMaXN0aXNQYXJzZXJSZWNvdmVyeXNlbnRpbmVsTnVsbFZhbHVlLkNvbWJpbmF0b3JzRW5kSW1wb3J0cHJlZml4T2Zmc2V0RW5kQ29uZGl0aW9uYWxVcmlzTnVsbFZhbHVlLkNvbmRpdGlvbmFsVXJpc0VuZENvbmRpdGlvbmFsVXJpUmVjb3ZlckltcG9ydE51bGxWYWx1ZS5EZWZlcnJlZGVudW1WYWx1ZURlY2xhcmF0aW9ubWV0aG9kRGVjbGFyYXRpb25oYW5kbGVOb05hbWU6YmFkaW50ZXJwb2xhdGlvbk9mZnNldGVuZElkZW50aWZpZXJMaXN0TnVsbFZhbHVlLklkZW50aWZpZXJMaXN0c3VmZml4T2Zmc2V0YmVnaW5DbGFzc09yTmFtZWRNaXhpbkFwcGxpY2F0aW9uY2xhc3Mgb3IgbWl4aW4gYXBwbGljYXRpb25DbGFzc0tpbmQuRXh0ZW5zaW9uYmVnaW5OYW1lZE1peGluQXBwbGljYXRpb25oYW5kbGVDbGFzc09yTWl4aW5JbXBsZW1lbnRzaW50ZXJmYWNlc0NvdW50Q2xhc3NPck1peGluSW1wbGVtZW50c051bGxWYWx1ZS5UeXBlQnVpbGRlckxpc3RoYW5kbGVSZWNvdmVyQ2xhc3NIZWFkZXJoYW5kbGVSZWNvdmVyTWl4aW5IZWFkZXJoYW5kbGVDbGFzc0V4dGVuZHNleHRlbmRzS2V5d29yZGhhbmRsZU1peGluT25udWxsSWZQYXJzZXJSZWNvdmVyeW1peGluVG9rZW5zdXBlcnR5cGVDb25zdHJhaW50c2NvbXB1dGVQcm9jZWR1cmVLaW5kYmVnaW5Ub3BMZXZlbE1ldGhvZGV4dGVybmFsVG9rZW4jbWV0aG9kZm9ybWFsc09mZnNldGhhbmRsZUZ1bmN0aW9uQm9keVNraXBwZWRpc0V4cHJlc3Npb25Cb2R5YmVnaW5NZXRob2Rib2R5S2luZG5hbWVPck9wZXJhdG9ycmVxdWlyZWRBcmd1bWVudENvdW50aXNSZXF1aXJlZHZhckZpbmFsT3JDb25zdE9mZnNldGRlY2xhcmF0aW9uQnVpbGRlcnN5bnRoZXNpemVkVHlwZVZhcmlhYmxlc3N5bnRoZXNpemVkRm9ybWFscyN0aGlzYmVnaW5GdW5jdGlvblR5cGVBbGlhc3BvcEZpZWxkSW5mb3Npbml0aWFsaXplclRva2VuRm9ySW5mZXJlbmNlVHlwZVZhcmlhYmxlc0RlZmluZWRzdGVwc3ZpYWNvbnRhaW5pbmdMaWJyYXJ5YmVnaW5GYWN0b3J5TWV0aG9kY29uc3RUb2tlbmV4dGVuZHNPZmZzZXRoYW5kbGVDbGFzc0hlYWRlckNsYXNzSGVhZGVyaGFuZGxlTWl4aW5IZWFkZXJnZXREb2N1bWVudGF0aW9uQ29tbWVudGRvY1Rva2VuaW5TbGFzaC8qKi8vL1ZhcmlhbmNlLmNvbnRyYXZhcmlhbnRWYXJpYW5jZS5pbnZhcmlhbnRfdmFyaWFuY2VfdHlwZVBhcmFtZXRlcnNUb1NlYXJjaEZvcm9sZFZhcmlhbmNlcmVzb2x2ZUluZmVyZW5jZU5vZGVpbmZlckNvcGllZFR5cGVfVHlwZVNjaGVtYUVsaW1pbmF0aW9uVmlzaXRvcmlzTGVhc3RDbG9zdXJlbmV3UmV0dXJuVHlwZW5ld1Bvc2l0aW9uYWxQYXJhbWV0ZXJzbmV3TmFtZWRQYXJhbWV0ZXJzbmV3VHlwZUFyZ3VtZW50c2xlYXN0Q2xvc3VyZSA8OiA8dHlwZT4gPDogX1R5cGVTY2hlbWFFbnZpcm9ubWVudCZIaWVyYXJjaHlCYXNlZFR5cGVFbnZpcm9ubWVudCZTdGFuZGFyZEJvdW5kc3R5cGVQYXJhbWV0ZXJzVG9JbmZlcnJldHVybkNvbnRleHRUeXBlaW5mZXJUeXBlRnJvbUNvbnN0cmFpbnRzZG93bndhcmRzSW5mZXJQaGFzZWhhc09taXR0ZWRCb3VuZHR5cGVzRnJvbURvd253YXJkc0luZmVyZW5jZXR5cGVQYXJhbUJvdW5kZXh0ZW5kc0NvbnN0cmFpbnRfaW5mZXJUeXBlUGFyYW1ldGVyRnJvbUNvbnRleHRfaW5mZXJUeXBlUGFyYW1ldGVyRnJvbUFsbGtub3duVHlwZXN0eXBlU2F0aXNmaWVzQ29uc3RyYWludHNvbHZlVHlwZUNvbnN0cmFpbnRncm91bmRlZHR5cGVGcm9tQ29udGV4dEluZmVyZW5jZV9jb3JlVHlwZXNzdWJzdGl0dXRlVHlwZVBhcmFtc25ld1R5cGVQYXJhbWV0ZXJzZmFzdGEucXVhbGlmaWVkX25hbWVwcmVzZXJ2ZVRva2VuaWRlbnRpZmllcihfVG9rZW5JZGVudGlmaWVydG9rZW4taWRlbnRpZmllcihpbml0aWFsaXplZC1pZGVudGlmaWVyKHF1YWxpZmllZC1uYW1lKF9Ub2tlblF1YWxpZmllZE5hbWV0b2tlbi1xdWFsaWZpZWQtbmFtZShmbGF0dGVuUXVhbGlmaWVkTmFtZU9udG9rZW5JZGVudGlmaWVyZmFzdGEuYnVpbHRpbl90eXBlX2J1aWxkZXJjb21waWxhdGlvblVuaXRidWlsZFR5cGVidWlsZFR5cGVzV2l0aEJ1aWx0QXJndW1lbnRzZmFzdGEuY2xhc3NfYnVpbGRlcnR5cGVfYWxnZWJyYXJlZGlyZWN0aW5nQ29uc3RydWN0b3JzaWdub3JlcmVkaXJlY3RjeWNsZVJlcG9ydGVkdGFyZ2V0QnVpbGRlcmFkZFJlZGlyZWN0aW5nQ29uc3RydWN0b3JzZXRSZWRpcmVjdGluZ0ZhY3RvcnlCb2R5YWNjZXNzaW5nTGlicmFyeWZpcnN0TWVtYmVyTmFtZWRzdXBlckNsYXNzc3VwZXJDbGFzc1R5cGVkZWNscHJvYmxlbXNwcm9ibGVtc09mZnNldHNpbXBsZW1lbnRlZHJlcGV0aXRpb25zY2hlY2tCb3VuZHNJblN1cGVydHlwZWNvbnN0cnVjdG9yc0ZpZWxkaGFuZGxlU2VlbkNvdmFyaWFudENvbnN0cnVjdG9yIGluIG92ZXJyaWRlIGNoZWNrLnNlZW5Db3ZhcmlhbnRjaGVja01ldGhvZE92ZXJyaWRlY2hlY2tHZXR0ZXJPdmVycmlkZWNoZWNrU2V0dGVyT3ZlcnJpZGVkZWNsYXJlZE1lbWJlckhhc0dldHRlcmludGVyZmFjZU1lbWJlckhhc0dldHRlcmRlY2xhcmVkTWVtYmVySGFzU2V0dGVyaW50ZXJmYWNlTWVtYmVySGFzU2V0dGVyaGFzVXNlckRlZmluZWROb1N1Y2hNZXRob2R0cmFuc2Zvcm1Qcm9jZWR1cmVUb05vU3VjaE1ldGhvZEZvcndhcmRlcm5vU3VjaE1ldGhvZEludGVyZmFjZWFkZE5vU3VjaE1ldGhvZEZvcndhcmRlckZvclByb2NlZHVyZWFkZE5vU3VjaE1ldGhvZEZvcndhcmRlckdldHRlckZvckZpZWxkYWRkTm9TdWNoTWV0aG9kRm9yd2FyZGVyU2V0dGVyRm9yRmllbGRleGlzdGluZ0ZvcndhcmRlcnNOYW1lc2V4aXN0aW5nU2V0dGVyRm9yd2FyZGVyc05hbWVzbGVhc3RDb25jcmV0ZVN1cGVyY2xhc3NzdXBlckhhc1VzZXJEZWZpbmVkTm9TdWNoTWV0aG9kY29uY3JldGVjb25jcmV0ZVNldHRlcnNjbHNIYXNVc2VyRGVmaW5lZE5vU3VjaE1ldGhvZF9nZXRNZW1iZXJVcmlfY29tcHV0ZUludGVyZmFjZVN1YnN0aXR1dGlvbmRlY2xhcmVkRnVuY3Rpb25pbnRlcmZhY2VGdW5jdGlvbmludGVyZmFjZVN1YnN0aXR1dGlvbmluaGVyaXRlZENvbnRleHRkZWNsYXJlZFBhcmFtZXRlcmludGVyZmFjZVBhcmFtZXRlcmRlY2xhcmVkQm91bmRpbnRlcmZhY2VCb3VuZF9jb21wdXRlRGVjbGFyZWRTdWJzdGl0dXRpb25kZWNsYXJlZFN1YnN0aXR1dGlvbl9jaGVja1R5cGVzYXNJZkRlY2xhcmVkUGFyYW1ldGVyaW5QYXJhbWV0ZXJkZWNsYXJlZE1lbWJlck5hbWVpbnRlcmZhY2VNZW1iZXJOYW1lcDBwMXNvcnRlZEZyb21EZWNsYXJlZHNvcnRlZEZyb21JbnRlcmZhY2VkZWNsYXJlZE5hbWVkUGFyYW1ldGVyc2ludGVyZmFjZU5hbWVkUGFyYW1ldGVyc2Jhc2VOYW1lbWl4aW5OYW1lY2xhc3NOYW1lTGVuZ3RobWVtYmVyUGF0Y2hvcmlnaW5MZW5ndGhwYXRjaExlbmd0aGNvbXB1dGVSZWRpcmVjdGVlVHlwZXRhcmdldEZ1bmN0aW9uVHlwZXR5cGVQYXJhbWV0ZXJCb3VuZGNvbXB1dGVSZWRpcmVjdGVlTmFtZWNoZWNrUmVkaXJlY3RpbmdGYWN0b3J5ZmFjdG9yeVR5cGVyZWRpcmVjdGVlVHlwZWRpcmVjdFN1YnN0aXR1dGlvbk1hcGluc3RhbmNlQ2xhc3MgZXhwZWN0ZWQgbG9va3VwQ29uc3RydWN0b3JXaXRoUGF0Y2hlc2dldFN1cGVyY2xhc3NDb25zdHJ1Y3RvclJlZGlyZWN0aW9uZmFzdGEuY29uc3RydWN0b3JfcmVmZXJlbmNlX2J1aWxkZXJtaWRkbGVmYXN0YS5kZWNsYXJhdGlvbi50YXJnZXQuYXBwbHlQYXRjaC5maW5pc2hQYXRjaGZhc3RhLmR5bmFtaWNfdHlwZV9idWlsZGVyZmFzdGEuZW51bV9idWlsZGVyc2VsZlR5cGVjb25zdHJ1Y3RvckJ1aWxkZXJ2YWx1ZXNCdWlsZGVydG9TdHJpbmdCdWlsZGVyZW51bUNvbnN0YW50SW5mb3N0YXJ0Q2hhck9mZnNldENvbXB1dGVkZW51bUJ1aWxkZXJlbnVtIGluZGV4RmllbGRCdWlsZGVyaW5kZXhGaWVsZG5hbWVGaWVsZEJ1aWxkZXJuYW1lRmllbGRzdXBlckNvbnN0cnVjdG9yZmFzdGEuZmllbGRfYnVpbGRlcmlzRWxpZ2libGVGb3JJbmZlcmVuY2Vpc0NsYXNzTWVtYmVyYm9keUJ1aWxkZXJmYXN0YS5mb3JtYWxfcGFyYW1ldGVyX2J1aWxkZXJpc01hbmRhdG9yeUZvcm1hbFBhcmFtZXRlcktpbmRpc09wdGlvbmFsTmFtZWRGb3JtYWxQYXJhbWV0ZXJLaW5kaXNPcHRpb25hbFBvc2l0aW9uYWxGb3JtYWxQYXJhbWV0ZXJLaW5kZm9yRm9ybWFsUGFyYW1ldGVySW5pdGlhbGl6ZXJTY29wZWlzQ29uc3RDb25zdHJ1Y3RvclBhcmFtZXRlcmZhc3RhLnByb2NlZHVyZV9idWlsZGVyYWN0dWFsQm9keWZvcm1hbCBwYXJhbWV0ZXJmb3JtYWwgcGFyYW1ldGVyIGluaXRpYWxpemVydHlwZSBwYXJhbWV0ZXJuZXdCb2R5YnVpbGRGdW5jdGlvbiNzeW50aGV0aWNyZW1vdmVUeXBlVmFyaWFibGVzY2hlY2tQYXRjaHJlcG9ydFBhdGNoTWlzbWF0Y2hhY3R1YWxBc3luY01vZGlmaWVybmV3TW9kaWZpZXJpc0VsaWdpYmxlRm9yVG9wTGV2ZWxJbmZlcmVuY2VoYXNNb3ZlZFN1cGVySW5pdGlhbGl6ZXJzdXBlckluaXRpYWxpemVycmVkaXJlY3RpbmdJbml0aWFsaXplcmZ1bmN0aW9uTm9kZWluamVjdEludmFsaWRJbml0aWFsaXplcmxhc3RJbml0aWFsaXplcnJlZGlyZWN0aW5nT3JpZ2luZmFzdGEuZnVuY3Rpb25fdHlwZV9idWlsZGVyKSAtPiBidWlsdFJldHVyblR5cGVjbG9uZWRUeXBlVmFyaWFibGVzZmFzdGEuaW52YWxpZF90eXBlX2J1aWxkZXJmYXN0YS5saWJyYXJ5X2J1aWxkZXIuYXBwbHlQYXRjaGVzTGlicmFyeUxvY2FsRGVjbGFyYXRpb25JdGVyYXRvckxpYnJhcnlMb2NhbERlY2xhcmF0aW9uTmFtZUl0ZXJhdG9yZmFzdGEubWVtYmVyX2J1aWxkZXJmYXN0YS5tZXRhZGF0YV9idWlsZGVyYnVpbGRBbm5vdGF0aW9uc2Fubm90YXRpb25CdWlsZGVyZmFzdGEubWl4aW5fYXBwbGljYXRpb25fYnVpbGRlcmZhc3RhLm1vZGlmaWVyX2J1aWxkZXJpc01peGluZmFzdGEubmFtZV9pdGVyYXRvcmZhc3RhLm5hbWVkX3R5cGVfYnVpbGRlcmZyb21UeXBlRGVjbGFyYXRpb25CdWlsZGVydHlwZU5hbWV0eXBlTmFtZU9mZnNldGZsYXROYW1laGFuZGxlSW52YWxpZFN1cGVydHlwZURlY2xhcmF0aW9uIGhhcyBub3QgYmVlbiByZXNvbHZlZCBvbiBjbG9uZWRBcmd1bWVudHNmYXN0YS5wcmVmaXhfYnVpbGRlcmZhc3RhLmZ1bmN0aW9uX3R5cGVfYWxpYXNfYnVpbGRlcmN5Y2xpY1R5cGVBbGlhc01hcmtlcmZhc3RhLnR5cGVfYnVpbGRlcmZhc3RhLnR5cGVfZGVjbGFyYXRpb25fYnVpbGRlcmZhc3RhLnR5cGVfdmFyaWFibGVfYnVpbGRlcmFjdHVhbFBhcmFtZXRlcmZyb21LZXJuZWxhc1R5cGVCdWlsZGVya2VybmVsVHlwZVBhcmFtZXRlcnNGcm9tQnVpbGRlcnNmYXN0YS51bnJlc29sdmVkX3R5cGVVbnJlc29sdmVkVHlwZShAZmFzdGEudm9pZF90eXBlX2J1aWxkZXJmYXN0YS5wYXJzZXIubGlzdGVuZXJsb2dFdmVudHN1cHByZXNzUGFyc2VFcnJvcnNiZWdpbkFyZ3VtZW50c2JlZ2luQXdhaXRFeHByZXNzaW9uSW52YWxpZEF3YWl0RXhwcmVzc2lvbkNhc2NhZGVDYXNlRXhwcmVzc2lvbkNsYXNzRXh0ZW5kc0NsYXNzSW1wbGVtZW50c1JlY292ZXJDbGFzc0hlYWRlckNsYXNzRGVjbGFyYXRpb25NaXhpbk9uTWl4aW5IZWFkZXJSZWNvdmVyTWl4aW5IZWFkZXJNaXhpbkRlY2xhcmF0aW9uRXh0ZW5zaW9uRGVjbGFyYXRpb25iZWdpbkNvbWJpbmF0b3JzYmVnaW5Db21waWxhdGlvblVuaXRoYW5kbGVEaXJlY3RpdmVzT25seWVuZENvbXBpbGF0aW9uVW5pdENvbXBpbGF0aW9uVW5pdENvbnN0TGl0ZXJhbGJlZ2luQ29uc3RydWN0b3JSZWZlcmVuY2VEb1doaWxlU3RhdGVtZW50Qm9keVdoaWxlU3RhdGVtZW50Qm9keWJlZ2luRW51bWJlZ2luRXhwb3J0aGFuZGxlRXh0cmFuZW91c0V4cHJlc3Npb25FeHRyYW5lb3VzRXhwcmVzc2lvbkZvclN0YXRlbWVudEJvZHlGb3JJbkJvZHliZWdpbkZ1bmN0aW9uTmFtZWJlZ2luSGlkZWJlZ2luVHlwZUxpc3RiZWdpbklmU3RhdGVtZW50VGhlblN0YXRlbWVudEVsc2VTdGF0ZW1lbnRiZWdpbkltcG9ydEltcG9ydFJlY292ZXJ5YmVnaW5Db25kaXRpb25hbFVyaXNiZWdpbkNvbmRpdGlvbmFsVXJpYmVnaW5Jbml0aWFsaXplZElkZW50aWZpZXJiZWdpblZhcmlhYmxlSW5pdGlhbGl6ZXJDb25zdHJ1Y3RvckluaXRpYWxpemVyaGFuZGxlSW52YWxpZEV4cHJlc3Npb25JbnZhbGlkRnVuY3Rpb25Cb2R5aGFuZGxlSW52YWxpZFR5cGVSZWZlcmVuY2VJbnZhbGlkVHlwZVJlZmVyZW5jZWJlZ2luTGlicmFyeU5hbWVMaWJyYXJ5TmFtZWhhbmRsZUludGVycG9sYXRpb25FeHByZXNzaW9uTGl0ZXJhbFN0cmluZ2JlZ2luTWVtYmVyYmVnaW5NZXRhZGF0YVN0YXJiZWdpbk9wdGlvbmFsRm9ybWFsUGFyYW1ldGVyc2JlZ2luUGFydGJlZ2luUGFydE9mYmVnaW5SZWRpcmVjdGluZ0ZhY3RvcnlCb2R5YmVnaW5SZXR1cm5TdGF0ZW1lbnRFbXB0eUZ1bmN0aW9uQm9keWJlZ2luU2hvd2JlZ2luU3dpdGNoU3RhdGVtZW50YmVnaW5MaXRlcmFsU3ltYm9sYmVnaW5SZXRocm93U3RhdGVtZW50ZW5kVG9wTGV2ZWxEZWNsYXJhdGlvblRvcExldmVsRGVjbGFyYXRpb25iZWdpblRvcExldmVsTWVtYmVyYmVnaW5UcnlTdGF0ZW1lbnRUcnlTdGF0ZW1lbnROb25OdWxsQXNzZXJ0RXhwcmVzc2lvbm1vZGlmaWVyVG9rZW5Ob05hbWViZWdpblR5cGVBcmd1bWVudHNiZWdpblR5cGVWYXJpYWJsZXNDb25zdEV4cHJlc3Npb25FbHNlQ29udHJvbEZsb3diZWdpbllpZWxkU3RhdGVtZW50aGFuZGxlRXJyb3JUb2tlbmRpc2NhcmRUeXBlUmVwbGFjZWRXaXRoQ29tbWVudFR5cGVBc3NpZ25oYW5kbGVDb21tZW50UmVmZXJlbmNlVGV4dHJlZmVyZW5jZVNvdXJjZXJlZmVyZW5jZU9mZnNldENvbW1lbnRSZWZlcmVuY2VUZXh0aGFuZGxlQ29tbWVudFJlZmVyZW5jZW5ld0tleXdvcmRoYW5kbGVOb0NvbW1lbnRSZWZlcmVuY2VmYXN0YS5wYXJzZXIucGFyc2VyRm9yd2FyZGluZ0xpc3RlbmVybG9va3NMaWtlRXhwcmVzc2lvblN0YXJ0TGl0ZXJhbEVudHJ5SW5mb2NvbXB1dGVMaXRlcmFsRW50cnlsb29rc0xpa2VMaXRlcmFsRW50cnlzaW1wbGVFbnRyeUxvb3BTdGF0ZU1vZGlmaWVyUmVjb3ZlcnlDb250ZXh0Q2xhc3NIZWFkZXJSZWNvdmVyeUxpc3RlbmVySW1wb3J0UmVjb3ZlcnlMaXN0ZW5lck1peGluSGVhZGVyUmVjb3ZlcnlMaXN0ZW5lclRva2VuU3RyZWFtUmV3cml0ZXJUeXBlSW5mb1R5cGVQYXJhbU9yQXJnSW5mb2NvbXB1dGVNZXRob2RUeXBlQXJndW1lbnRzY29tcHV0ZVR5cGVjb21wdXRlVHlwZVBhcmFtT3JBcmdpc1ZhbGlkVHlwZVJlZmVyZW5jZW5vVHlwZW5vVHlwZVBhcmFtT3JBcmdmaW5kTm9uWmVyb0xlbmd0aFRva2VuZmluZFByZXZpb3VzTm9uWmVyb0xlbmd0aFRva2VuaXNMZXR0ZXJpc0xldHRlck9yRGlnaXRpc09uZU9maXNPbmVPZk9yRW9maXNXaGl0ZXNwYWNlX01lc3NhZ2VXaXRoQXJndW1lbnRMb29wU3RhdGUuT3V0c2lkZUxvb3BjYWNoZWRSZXdyaXRlcnN0YXRlbWVudERlcHRoZXhwcmVzc2lvbkRlcHRocmV3cml0ZXJpbkdlbmVyYXRvcmluQXN5bmNpblBsYWluU3luY2lzQnJlYWtBbGxvd2VkaXNDb250aW51ZUFsbG93ZWRMb29wU3RhdGUuSW5zaWRlTG9vcGlzQ29udGludWVXaXRoTGFiZWxBbGxvd2Vkc2tpcEVycm9yVG9rZW5zZGlyZWN0aXZlU3RhdGVjaGVja1NjcmlwdFRhZ3BhcnNlU2NyaXB0cGFyc2VUb3BMZXZlbERlY2xhcmF0aW9uSW1wbHJlcG9ydFJlY292ZXJhYmxlRXJyb3JXaXRoVG9rZW5yZXBvcnRBbGxFcnJvclRva2Vuc3BhcnNlRGlyZWN0aXZlc25leHRWYWx1ZWNoZWNrSW1wb3J0cGFyc2VJbXBvcnRjaGVja0V4cG9ydHBhcnNlRXhwb3J0Y2hlY2tMaWJyYXJ5cGFyc2VMaWJyYXJ5TmFtZXBhcnNlUGFydE9yUGFydE9mcGFyc2VUb3BMZXZlbERlY2xhcmF0aW9ucGFyc2VUb3BMZXZlbEtleXdvcmREZWNsYXJhdGlvbmNoZWNrRGVjbGFyYXRpb25wYXJzZVRvcExldmVsTWVtYmVySW1wbHJlcG9ydFJlY292ZXJhYmxlRXJyb3JpbnNlcnRTeW50aGV0aWNJZGVudGlmaWVyI3N5bnRoZXRpY19mdW5jdGlvbl9wYXJzZUludmFsaWRUb3BMZXZlbERlY2xhcmF0aW9ucGFyc2VDbGFzc0RlY2xhcmF0aW9uTW9kaWZpZXJzcGFyc2VUb3BMZXZlbEtleXdvcmRNb2RpZmllcnNyZXBvcnRUb3BMZXZlbE1vZGlmaWVyRXJyb3JhZnRlck1vZGlmaWVyc3BhcnNlQ2xhc3NPck5hbWVkTWl4aW5BcHBsaWNhdGlvbnBhcnNlRW51bXBhcnNlRXh0ZW5zaW9ucGFyc2VUeXBlZGVmcGFyc2VNaXhpbkludGVybmFsIGVycm9yOiBVbmhhbmRsZWQgdG9wIGxldmVsIGtleXdvcmQgJ3BhcnNlUXVhbGlmaWVkbGlicmFyeU5hbWVDb250aW51YXRpb25lbnN1cmVTZW1pY29sb25wYXJzZUltcG9ydFByZWZpeE9wdGRlZmVycmVkVG9rZW5lbnN1cmVJZGVudGlmaWVyaW1wb3J0UHJlZml4RGVjbGFyYXRpb25lbnN1cmVMaXRlcmFsU3RyaW5ncGFyc2VDb25kaXRpb25hbFVyaVN0YXJwYXJzZUNvbWJpbmF0b3JTdGFycGFyc2VJbXBvcnRSZWNvdmVyeXByaW1hcnlMaXN0ZW5lcnJlY292ZXJ5TGlzdGVuZXJmaXJzdERlZmVycmVkS2V5d29yZGhhc1ByZWZpeGhhc0NvbWJpbmF0b3Jza2lwVW5leHBlY3RlZFRva2VuT3B0cGFyc2VDb25kaXRpb25hbFVyaWluc2VydFBhcmVuc3BhcnNlRG90dGVkTmFtZWVxdWFsaXR5U2lnbm1vdmVTeW50aGV0aWNkb3R0ZWROYW1lQ29udGludWF0aW9ucGFyc2VIaWRlcGFyc2VTaG93cGFyc2VJZGVudGlmaWVyTGlzdHBhcnNlVHlwZUxpc3RlbnN1cmVUeXBlT3JWb2lkY2hlY2tQYXJ0T2ZwYXJzZVBhcnRPZmNoZWNrUGFydHBhcnNlUGFydHBhcnROYW1lcGFydE5hbWVDb250aW51YXRpb25hdFRva2VubWV0YWRhdGFSZWZlcmVuY2VwYXJzZVF1YWxpZmllZFJlc3RPcHRtZXRhZGF0YUNvbnRpbnVhdGlvbnBhcnNlQXJndW1lbnRzbWV0YWRhdGFDb250aW51YXRpb25BZnRlclR5cGVBcmd1bWVudHN0eXBlSW5mb3NraXBUeXBldHlwZWRlZkRlY2xhcmF0aW9ucGFyc2VWYXJpYWJsZXNwYXJzZVR5cGVwYXJzZUZvcm1hbFBhcmFtZXRlcnNSZXF1aXJlZE9wdE1lbWJlcktpbmQuRnVuY3Rpb25UeXBlQWxpYXNwYXJzZU1peGluQXBwbGljYXRpb25SZXN0aW5zZXJ0U3ludGhldGljS2V5d29yZHBhcnNlV2l0aENsYXVzZU9wdHBhcnNlR2V0dGVyT3JGb3JtYWxQYXJhbWV0ZXJzcGFyc2VGb3JtYWxQYXJhbWV0ZXJzaXNVbmFyeU1pbnVzbWlzc2luZ1BhcmFtZXRlck1lc3NhZ2Vza2lwRm9ybWFsUGFyYW1ldGVyc3BhcnNlT3B0aW9uYWxQb3NpdGlvbmFsUGFyYW1ldGVyc2Vuc3VyZUNsb3NlUGFyZW5wYXJzZU9wdGlvbmFsTmFtZWRQYXJhbWV0ZXJzcmV3cml0ZVNxdWFyZUJyYWNrZXRzcGFyc2VGb3JtYWxQYXJhbWV0ZXJyZXdyaXRlQW5kUmVjb3ZlcnBhcmFtZXRlcktpbmRpbkZ1bmN0aW9uVHlwZXBhcnNlRm9ybWFsUGFyYW1ldGVyTW9kaWZpZXJzYmVmb3JlVHlwZWlzTmFtZWRQYXJhbWV0ZXJuYW1lQ29udGV4dGZvcm1hbFBhcmFtZXRlckRlY2xhcmF0aW9uZmllbGRJbml0aWFsaXplcmJlZm9yZUlubGluZUZ1bmN0aW9uVHlwZWNsb3NlcmVuZElubGluZUZ1bmN0aW9uVHlwZU1lbWJlcktpbmQuRnVuY3Rpb25UeXBlZFBhcmFtZXRlcmVxdWFsY29udGludWF0aW9uQ29udGV4dHBhcnNlUXVhbGlmaWVkUmVzdGVuc3VyZUJsb2NrZW51bURlY2xhcmF0aW9uY2xhc3NPck1peGluRGVjbGFyYXRpb25wYXJzZU5hbWVkTWl4aW5BcHBsaWNhdGlvbnBhcnNlQ2xhc3NlbnN1cmVUeXBlTm90Vm9pZHBhcnNlQ2xhc3NIZWFkZXJPcHRwYXJzZUNsYXNzSGVhZGVyUmVjb3ZlcnljbGFzcyBkZWNsYXJhdGlvbnBhcnNlQ2xhc3NPck1peGluQm9keUNsYXNzS2luZC5DbGFzc3BhcnNlQ2xhc3NFeHRlbmRzT3B0cGFyc2VDbGFzc09yTWl4aW5JbXBsZW1lbnRzT3B0cGFyc2VOYXRpdmVDbGF1c2VoYXNFeHRlbmRzaGFzSW1wbGVtZW50c2hhc1dpdGhpbmNvcnJlY3RFeHRlbmRzS2V5d29yZGhlYWRlclN0YXJ0cGFyc2VNaXhpbkhlYWRlck9wdHBhcnNlTWl4aW5IZWFkZXJSZWNvdmVyeW1peGluIGRlY2xhcmF0aW9uQ2xhc3NLaW5kLk1peGlucGFyc2VNaXhpbk9uT3B0aGFzT25wYXJzZU1peGluT25leHRlbnNpb24gZGVjbGFyYXRpb25wYXJzZVN0cmluZ1BhcnRpbnNlcnRUb2tlbm1lc3NhZ2VPblRva2VucmVjb3ZlcnlUZW1wbGF0ZW5vdEVvZk9yVmFsdWVwYXJzZVR5cGVWYXJpYWJsZXNPcHRiZWZvcmVTdGFydHBhcnNlVG9wTGV2ZWxNb2RpZmllcnMjc3ludGhldGljX2lkZW50aWZpZXJfcGFyc2VUb3BMZXZlbE1ldGhvZGZpZWxkQ291bnRwYXJzZUZpZWxkSW5pdGlhbGl6ZXJPcHRpbnNlcnRTeW50aGV0aWNUb2tlbnRvcExldmVsRnVuY3Rpb25EZWNsYXJhdGlvbnBhcnNlTWV0aG9kVHlwZVZhcnNhdmVkQXN5bmNNb2RpZmllcnR5cGVWYXJwYXJzZVZhcmlhYmxlSW5pdGlhbGl6ZXJPcHRwYXJzZUluaXRpYWxpemVyYmVmb3JlRXhwcmVzc2lvbnBhcnNlQXNzZXJ0cGFyc2VTdXBlckluaXRpYWxpemVyRXhwcmVzc2lvbnBhcnNlSW5pdGlhbGl6ZXJFeHByZXNzaW9uUmVzdGV4cHJlc3Npb25Db250aW51YXRpb25ibG9ja0tpbmRpbnNlcnRCbG9ja2JlZ2luR3JvdXBvcGVuUGFyZW5lbnN1cmVDb2xvbm5ld1Rva2VuIiJwYXJzZUxpdGVyYWxTdHJpbmdyZXBsYWNlVG9rZW5Gb2xsb3dpbmdleHBlY3RlZE5leHRleHBlY3RlZFZhbHVlc2tpcENsYXNzT3JNaXhpbkJvZHlwYXJzZUNsYXNzT3JNaXhpbk1lbWJlckltcGx1bmFyeXBhcnNlQ2xhc3NNZW1iZXJNb2RpZmllcnNwYXJzZUZhY3RvcnlNZXRob2RwYXJzZU1ldGhvZHBhcnNlSW52YWxpZE9wZXJhdG9yRGVjbGFyYXRpb25yZWNvdmVyRnJvbUludmFsaWRDbGFzc01lbWJlcnBhcnNlT3BlcmF0b3JOYW1lbWV0aG9kRGVjbGFyYXRpb25Db250aW51YXRpb25iZWZvcmVQYXJhbWJlZm9yZUluaXRpYWxpemVyc3BhcnNlUmVkaXJlY3RpbmdGYWN0b3J5Qm9keXN0YXRpY09yQ292YXJpYW50cGFyc2VNb2RpZmllcnNBZnRlckZhY3RvcnliZWZvcmVUb2tlbnBhcnNlRnVuY3Rpb25FeHByZXNzaW9uTWVtYmVyS2luZC5Mb2NhbHBhcnNlQXN5bmNPcHRCb2R5cGFyc2VGdW5jdGlvbkxpdGVyYWxiZWZvcmVOYW1lcGFyc2VOYW1lZEZ1bmN0aW9uUmVzdGxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbm9mRnVuY3Rpb25FeHByZXNzaW9ucGFyc2VDb25zdHJ1Y3RvclJlZmVyZW5jZWNvbnN0cnVjdG9yUmVmZXJlbmNlY29uc3RydWN0b3JSZWZlcmVuY2VDb250aW51YXRpb25jb25zdHJ1Y3RvclJlZmVyZW5jZUNvbnRpbnVhdGlvbkFmdGVyVHlwZUFyZ3VtZW50c3NraXBBc3luY01vZGlmaWVycGFyc2VFeHByZXNzaW9uRnVuY3Rpb25Cb2R5c2F2ZWRMb29wU3RhdGVwYXJzZVN0YXRlbWVudHJlY292ZXJGcm9tU3RhY2tPdmVyZmxvd3BhcnNlU3RhdGVtZW50WHBhcnNlTGFiZWxlZFN0YXRlbWVudHBhcnNlRXhwcmVzc2lvblN0YXRlbWVudE9yRGVjbGFyYXRpb25BZnRlck1vZGlmaWVyc3BhcnNlQmxvY2twYXJzZVJldHVyblN0YXRlbWVudHZhck9yRmluYWxwYXJzZUV4cHJlc3Npb25TdGF0ZW1lbnRPckRlY2xhcmF0aW9ucGFyc2VJZlN0YXRlbWVudHBhcnNlRm9yU3RhdGVtZW50cGFyc2VSZXRocm93U3RhdGVtZW50cGFyc2VXaGlsZVN0YXRlbWVudHBhcnNlRG9XaGlsZVN0YXRlbWVudHBhcnNlVHJ5U3RhdGVtZW50cGFyc2VTd2l0Y2hTdGF0ZW1lbnRwYXJzZUJyZWFrU3RhdGVtZW50cGFyc2VDb250aW51ZVN0YXRlbWVudHBhcnNlQXNzZXJ0U3RhdGVtZW50cGFyc2VFbXB0eVN0YXRlbWVudHBhcnNlWWllbGRTdGF0ZW1lbnRJbnRlcm5hbCBlcnJvcjogVW5rbm93biBhc3luY1N0YXRlOiAncGFyc2VFeHByZXNzaW9uU3RhdGVtZW50T3JDb25zdERlY2xhcmF0aW9ubG9va3NMaWtlQXdhaXRFeHByZXNzaW9ucGFyc2VFeHByZXNzaW9uU3RhdGVtZW50cGFyc2VMYWJlbGxhYmVsRGVjbGFyYXRpb25wYXJzZVRocm93RXhwcmVzc2lvbnBhcnNlUHJlY2VkZW5jZUV4cHJlc3Npb25wYXJzZUV4cHJlc3Npb25XaXRob3V0Q2FzY2FkZXBhcnNlQ29uZGl0aW9uYWxFeHByZXNzaW9uUmVzdGFsbG93Q2FzY2FkZXNwYXJzZVVuYXJ5RXhwcmVzc2lvbnRva2VuTGV2ZWxfY29tcHV0ZVByZWNlZGVuY2VsYXN0QmluYXJ5RXhwcmVzc2lvbkxldmVscGFyc2VDYXNjYWRlRXhwcmVzc2lvbnBhcnNlUHJpbWFyeXBhcnNlQXJndW1lbnRPckluZGV4U3RhcnBhcnNlSXNPcGVyYXRvclJlc3RwYXJzZUFzT3BlcmF0b3JSZXN0Y2FzY2FkZU9wZXJhdG9ycGFyc2VTZW5kbWFya3BhcnNlQXdhaXRFeHByZXNzaW9ucGFyc2VJbXBsaWNpdENyZWF0aW9uRXhwcmVzc2lvbnBhcnNlU2VuZE9yRnVuY3Rpb25MaXRlcmFscGFyc2VMaXRlcmFsSW50cGFyc2VMaXRlcmFsRG91YmxlcGFyc2VMaXRlcmFsU3ltYm9scGFyc2VMaXRlcmFsQm9vbHBhcnNlTGl0ZXJhbE51bGxwYXJzZVRoaXNFeHByZXNzaW9ucGFyc2VTdXBlckV4cHJlc3Npb25wYXJzZU5ld0V4cHJlc3Npb25wYXJzZUNvbnN0RXhwcmVzc2lvbnBhcnNlUGFyZW50aGVzaXplZEV4cHJlc3Npb25PckZ1bmN0aW9uTGl0ZXJhbHBhcnNlTGl0ZXJhbExpc3RTdWZmaXhwYXJzZUxpdGVyYWxTZXRPck1hcFN1ZmZpeHBhcnNlTGl0ZXJhbExpc3RTZXRNYXBPckZ1bmN0aW9ucGFyc2VQYXJlbnRoZXNpemVkRXhwcmVzc2lvbmVuc3VyZVBhcmVudGhlc2l6ZWRDb25kaXRpb25wYXJzZUV4cHJlc3Npb25JblBhcmVudGhlc2lzUmVzdHBhcnNlRXhwcmVzc2lvbkluUGFyZW50aGVzaXN0aGlzVG9rZW5zdXBlclRva2VuaWZDb3VudGhhc0VudHJ5aWZDb25kaXRpb25EZWx0YWNvbXB1dGVOZXh0aXNNYXBFbnRyeXBhcnNlTGl0ZXJhbEZ1bmN0aW9uU3VmZml4dHlwZVBhcmFtT3JBcmdwYXJzZU1hcExpdGVyYWxFbnRyeWxvb2tzTGlrZUZ1bmN0aW9uQm9keWVuc3VyZUFyZ3VtZW50c3BhcnNlQXJndW1lbnRzUmVzdHBhcnNlQ29uc3RydWN0b3JJbnZvY2F0aW9uQXJndW1lbnRzcGFyc2VTaW5nbGVMaXRlcmFsU3RyaW5nbGl0ZXJhbFN5bWJvbGxpdGVyYWxTeW1ib2xDb250aW51YXRpb25oYXNTZWVuTmFtZWRBcmd1bWVudG5hbWVkQXJndW1lbnRSZWZlcmVuY2Vjb21wdXRlVHlwZUFmdGVySXNPckFzc2tpcENoYWluZWRBc0lzT3BlcmF0b3JzYXNOb25OdWxsYWJsZWxvb2tzTGlrZUxvY2FsRnVuY3Rpb25vbmx5UGFyc2VWYXJpYWJsZURlY2xhcmF0aW9uU3RhcnRwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25Nb2RpZmllcnNiZWZvcmVGb3JtYWxzY291bGRCZUV4cHJlc3Npb25hZnRlcklkZW50aWZpZXJvcmlnaW5hbExpc3RlbmVyYWZ0ZXJFeHByZXNzaW9ucGFyc2VWYXJpYWJsZXNEZWNsYXJhdGlvblJlc3RlbmRXaXRoU2VtaWNvbG9ucGFyc2VPcHRpb25hbGx5SW5pdGlhbGl6ZWRJZGVudGlmaWVybG9jYWxWYXJpYWJsZURlY2xhcmF0aW9ucGFyc2VGb3JMb29wUGFydHNTdGFydHBhcnNlRm9yTG9vcFBhcnRzTWlkcGFyc2VGb3JJblJlc3RwYXJzZUZvclJlc3RwYXJzZUZvckxvb3BQYXJ0c1Jlc3RwYXJzZUZvckluTG9vcFBhcnRzUmVzdHdoaWxlVG9rZW5kb1Rva2VuZm9yd2FyZEVycm9yc3RyeSBzdGF0ZW1lbnRvcGVuUGFyZW5zZXhjZXB0aW9uTmFtZWNhdGNoUGFyYW1ldGVydHJhY2VOYW1lTWVtYmVyS2luZC5DYXRjaGNhdGNoIGNsYXVzZWZpbmFsbHkgY2xhdXNlTG9vcFN0YXRlLkluc2lkZVN3aXRjaHBhcnNlU3dpdGNoQmxvY2tiZWdpblN3aXRjaHN3aXRjaCBzdGF0ZW1lbnRiZWdpbkNhc2VwZWVrUGFzdExhYmVsc3BhcnNlU3RhdGVtZW50c0luU3dpdGNoQ2FzZWxhYmVsUmVmZXJlbmNlcHJldmlvdXNUb2tlbnJlcG9ydEFuZFNraXBDbGFzc0luQ2xhc3NyZXBvcnRBbmRTa2lwRW51bUluQ2xhc3NyZXBvcnRBbmRTa2lwVHlwZWRlZkluQ2xhc3NmaW5kRGFydERvY2lzTXVsdGlsaW5lcGFyc2VDb21tZW50UmVmZXJlbmNlc3BhcnNlUmVmZXJlbmNlc0luU2luZ2xlTGluZUNvbW1lbnRzcGFyc2VSZWZlcmVuY2VzSW5NdWx0aUxpbmVDb21tZW50bXVsdGlMaW5lRG9jaW5Db2RlQmxvY2tjb2RlQmxvY2tgYGAqICAgICBwYXJzZUNvbW1lbnRSZWZlcmVuY2VzSW5UZXh0Ly8vICAgIGNvbW1lbnRUb2tlbmNoOl1yZWZlcmVuY2VTdGFydGZpbmRSZWZlcmVuY2VFbmRpc0xpbmtUZXh0ZW5kQ29kZUJsb2NrcGFyc2VPbmVDb21tZW50UmVmZXJlbmNlcGFyc2VPbmVDb21tZW50UmVmZXJlbmNlUmVzdGlkZW50aWZpZXJPck9wZXJhdG9ycmlnaHRJbmRleGZhc3RhLnBhcnNlci5wYXJzZXJfZXJyb3JiZWdpbk9mZnNldGZyb21Ub2tlbnNmYXN0YS5wYXJzZXIuQXNzZXJ0ZmFzdGEucGFyc2VyLmZvcm1hbF9wYXJhbWV0ZXJfa2luZG1hbmRhdG9yeW9wdGlvbmFsTmFtZWRvcHRpb25hbFBvc2l0aW9uYWxjbGFzc09yTWl4aW5PckV4dGVuc2lvbkRlY2xhcmF0aW9udHlwZVZhcmlhYmxlRGVjbGFyYXRpb25wcmVmaXhlZFR5cGVSZWZlcmVuY2V0eXBlUmVmZXJlbmNldHlwZVJlZmVyZW5jZUNvbnRpbnVhdGlvbm9wZXJhdG9yTmFtZWxvY2FsRnVuY3Rpb25EZWNsYXJhdGlvbkNvbnRpbnVhdGlvbmluTGlicmFyeU9yUGFydE9mRGVjbGFyYXRpb25pblN5bWJvbGlzQ29udGludWF0aW9uaXNCdWlsdEluSWRlbnRpZmllckFsbG93ZWRsb29rc0xpa2VTdGF0ZW1lbnRTdGFydGZhc3RhLnBhcnNlci5jbGFzc19raW5kRXh0ZW5zaW9uZmFzdGEucGFyc2VyLm1lbWJlcl9raW5kTWVtYmVyS2luZC5Ob25TdGF0aWNGaWVsZE1lbWJlcktpbmQuU3RhdGljRmllbGRNZW1iZXJLaW5kLlRvcExldmVsRmllbGRGdW5jdGlvblR5cGVkUGFyYW1ldGVyR2VuZXJhbGl6ZWRGdW5jdGlvblR5cGVOb25TdGF0aWNNZXRob2RTdGF0aWNNZXRob2ROb25TdGF0aWNGaWVsZFN0YXRpY0ZpZWxkVG9wTGV2ZWxGaWVsZGZhc3RhLnBhcnNlci50b3BfbGV2ZWxfcGFyc2VyZmFzdGEucGFyc2VyLnV0aWxiZWZvcmVDbG9zZUJyYWNlVG9rZW5Gb3J0b2tlblZhbHVlc2tpcE1ldGFkYXRhc3BsaXRHdEVxc3BsaXRHdEd0c3BsaXRHdEd0RXFzcGxpdEd0RnJvbUd0R3RFcXNwbGl0R3RGcm9tR3RHdEd0c3BsaXRHdEZyb21HdEd0R3RFcXN5bnRoZXRpY0d0ZmFzdGEuc3RhY2tfbGlzdGVuZXJOdWxsVmFsdWUuQXNOdWxsVmFsdWUuQ2FzY2FkZVJlY2VpdmVyTnVsbFZhbHVlLkNvbW1lbnRzTnVsbFZhbHVlLkNvbmRpdGlvbmFsbHlTZWxlY3RlZEltcG9ydE51bGxWYWx1ZS5Db25zdHJ1Y3RvckluaXRpYWxpemVyU2VwYXJhdG9yTnVsbFZhbHVlLkNvbnN0cnVjdG9ySW5pdGlhbGl6ZXJzTnVsbFZhbHVlLkNvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzTnVsbFZhbHVlLkRvY3VtZW50YXRpb25Db21tZW50TnVsbFZhbHVlLkV4dGVuZHNDbGF1c2VOdWxsVmFsdWUuRnVuY3Rpb25Cb2R5QXN5bmNUb2tlbk51bGxWYWx1ZS5GdW5jdGlvbkJvZHlTdGFyVG9rZW5OdWxsVmFsdWUuSW5pdGlhbGl6ZXJzTnVsbFZhbHVlLlBhcmFtZXRlckRlZmF1bHRWYWx1ZU51bGxWYWx1ZS5TdHJpbmdMaXRlcmFsTnVsbFZhbHVlLlR5cGVMaXN0TnVsbFZhbHVlLlR5cGVWYXJpYWJsZU51bGxWYWx1ZS5WYXJGaW5hbE9yQ29uc3RUb2tlbk51bGxWYWx1ZS5XaXRoQ2xhdXNlQXNBd2FpdFRva2VuQnJlYWtUYXJnZXRDYXNjYWRlUmVjZWl2ZXJDb21tZW50c0NvbmRpdGlvbmFsbHlTZWxlY3RlZEltcG9ydENvbnN0cnVjdG9ySW5pdGlhbGl6ZXJTZXBhcmF0b3JDb25zdHJ1Y3RvckluaXRpYWxpemVyc0NvbnN0cnVjdG9yUmVmZXJlbmNlQ29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzQ29udGludWVUYXJnZXREZWZlcnJlZERvY3VtZW50YXRpb25Db21tZW50RXh0ZW5kc0NsYXVzZUZ1bmN0aW9uQm9keUZ1bmN0aW9uQm9keUFzeW5jVG9rZW5GdW5jdGlvbkJvZHlTdGFyVG9rZW5MYWJlbHNQYXJhbWV0ZXJEZWZhdWx0VmFsdWVQcmVmaXhTd2l0Y2hTY29wZVR5cGVCdWlsZGVyTGlzdFZhckZpbmFsT3JDb25zdFRva2VuV2l0aENsYXVzZWNoZWNrVmFsdWVzdGFja0luZGV4cGFkUmlnaHQtLS0gZmFpbHVyZQpmaW5pc2hTaW5nbGVFeHByZXNzaW9udG9rZW5Pck51bGxwcmludEV2ZW50Ci0tLS0tLS0tLS0tLS0tLS0tLSAgPj4gc3RyaW5nIGludGVycG9sYXRpb25TdGFja19ncm93cG9wTGlzdHN0YXJ0SW5kZXhhcnJheUluZGV4UGFyc2VyUmVjb3ZlcnkoQF9wcm90b0NvbnN0cmFpbnRzX3BhcmFtZXRlcnNUb0NvbnN0cmFpbnByb3RvQ29uc3RyYWludGlzVXBwZXJvbGRQcm90b0NvbnN0cmFpbnRzTGVuZ3RoaXNNYXRjaF9pc1N1YnR5cGVNYXRjaF9jb25zdHJhaW5Mb3dlcl9jb25zdHJhaW5VcHBlcl9pc0Z1bmN0aW9uU3VidHlwZU1hdGNoc3VidHlwZVN1YnN0aXR1dGlvbnN1cGVydHlwZVN1YnN0aXR1dGlvbmZyZXNoVHlwZVZhcmlhYmxlc19tYXRjaFR5cGVGb3JtYWxzX2lzSW50ZXJmYWNlU3VidHlwZU1hdGNobWF0Y2hpbmdTdXBlcnR5cGVPZlN1YnR5cGVfaXNUb3BwYXJhbXMxcGFyYW1zMnN1YnN0aXR1dGlvbjFzdWJzdGl0dXRpb24ycEZyZXNodmFyaWFibGVGcmVzaGJvdW5kMWJvdW5kMlR5cGVTY2hlbWFDb25zdHJhaW50R2F0aGVyZXJfUHJvdG9Db25zdHJhaW50ZmFzdGEuZ3JhcGhwcmVvcmRlck51bWJlcnN1bmFzc2lnbmVkYXNzaWduZWRyZWN1cnNpdmVseVNlYXJjaG5laWdoYm9yUHJlb3JkZXJOdW1iZXJUcmFjZVRyYWNlQW5kUmVwb3J0U3RhY2tUcmFjZUxpbmVzbWF4RmlsZUxlbmd0aG1heExpbmVOb0xlbmd0aG1heENvbHVtbk5vTGVuZ3RoZnJvbUxpbmVzZnJvbVRyYWNlcmFuZ2VTdGFydHJhbmdlRW5kZmlsZVByZWZpeGxhbWJkYWluZGV4UGF0dGVybiNcZCtccypyZXBsYWNlRmlyc3Q8YXN5bmNocm9ub3VzIHN1c3BlbnNpb24+bGVmdFBhcmVuUG9zcmlnaHRQYXJlblBvc2xhc3RDb2xvbm5leHRUb0xhc3RDb2xvbmxpbmVOb2NvbHVtbk5vPGFub255bW91cyBjbG9zdXJlPkVycm9yIHByZXR0aWZ5aW5nICIiOiBzdWJ0cmFjZXByZXR0aWZ5c2hvd0NvbHVtbk5vc2hvd0RvdHNkb3RzZmlsZUxlbmd0aCAubGluZU5vTGVuZ3RoY29sdW1uTm9MZW5ndGhTdGFja1RyYWNlTGluZWZpbGVUZXh0bGluZU5vVGV4dGNvbHVtbk5vVGV4dCBAICBbX3RyYWNldHJhY2VFeGNlcHRpb25zZXhjZXB0aW9uc3RyYWNlQW5kUmVwb3J0cmVwb3J0QW5kVHJhY2VfdHJhY2VBbmRSZXBvcnRwcmV0dGlmeVN0YWNrVHJhY2VwYWRpbnRlbmRlZExlbmd0aGRvdHNMZW5ndGhkb3RzSW5kZXhEZWJ1Z0NhbGxiYWNrYXJnMWFyZzJEZWJ1Z01hcGluZGV4U2V0Q2FsbGJhY2twdXRJZkFic2VudENhbGxiYWNrcmVtb3ZlQ2FsbGJhY2thZGRDYWxsYmFja1JLUlZjb250YWluc1ZhbHVlaWZBYnNlbnRhZGRFbnRyaWVzSzJWMnVwZGF0ZUFsbERlYnVnSXRlcmFibGVEZWJ1Z0xpc3RhZGRBbGxDYWxsYmFja2ZpbGxWYWx1ZURlYnVnU2V0TWFwVHlwZUFzc2VydGVycnVudGltZVR5cGVzc2hvd09iamVjdHN2YWx1ZXNUeXBlcyA9PiBDb2xsZWN0aW9uVHlwZUFzc2VydGVyYXNzZXJ0VHlwZUV4cGVuc2l2ZU1hcF9tYXBzY29waWVzS1JWUmV4cGVuc2l2ZShFeHBlbnNpdmVTZXRfc2V0c29iamVjdHNvYmplY3RzVG9SZW1vdmVvYmplY3RzVG9SZXRhaW5yZXRhaW5TZXRTdGF0c3JlY29yZE1hcGZyb21FeGlzdGluZ2dldE1hcHJlY29yZEVsZW1lbnRnZXRMaXN0cmVjb3JkRnJlcXVlbmN5ZXhhbXBsZXJlY29yZEZyZXF1ZW5jaWVzcmVjb3JkZWRGcmVxdWVuY2llc3JlY29yZENvdW50ZXJyZWNvcmRUcmFjZXNhbXBsZUZyZXF1ZW5jeXN0YWNrVHJhY2VTYW1wbGVGcmVxdWVuY3lkdW1wU3RhdHNiZWZvcmVDbG9zZWR1bXBDb3JyZWxhdGlvbmlkQWlkQmRhdGFBZGF0YUJTdGF0c091dHB1dERlYnVnT3V0cHV0U2lua091dHB1dFN0YXRzUHJpbnRlcmdyb3VwY3JlYXRlR3JvdXBDb250ZW50Y3JlYXRlQ2hpbGRDb250ZW50YmVnaW5FeHRyYWVuZEV4dHJhX0Jhc2VQcmludGVyJlN0YXRzUHJpbnRlciZJbmRlbnRhdGlvbkJhc2VQcmludGVyQ29uc29sZVByaW50ZXJleHRyYUxldmVsc3BhY2Vub25OdWxsVmFsdWVzWE1MUHJpbnRlcmVzY2FwZW9wZW5lZDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+X1N0YWNrVHJhY2VOb2RlY29tbW9uUHJlZml4c3VidHJhY2VzbGVhZmFkZFN1YnRyYWNlY29tbW9uUHJlZml4TGVuZ3RoZHVtcFRyYWNlc2R1bXBTdWJ0cmFjZXNzdGVwY291bnRUZXh0Li4uCl9TdGFja1RyYWNlVHJlZXRvdGFsQ291bnRzYW1wbGVBY3RpdmVTdGF0c2ZyZXF1ZW5jeU1hcHNzZXRzTWFwY291bnRlcnNNYXB0cmFjZU1hcGZyZXF1ZW5jeU1hcHN0YXRzZHVtcEZyZXF1ZW5jaWVzZHVtcFNldHNkdW1wQ291bnRlcnNkdW1wSXRlcmFibGVkYXRhTWFwZnJlcXVlbmNpZXNmcmVxdWVuY3lkdW1wRnJlcXVlbmN5c29ydGVkTWFwY291bnRlcnNkdW1wQ291bnRlcmhhc0RhdGFjYXRlZ29yeWV4YW1wbGVzTGltaXRoYXNNb3JlaW5jbHVkZUNvdW50dHJhY2VzZHVtcFRyYWNldHJlZWtleUFrZXlCY29ycmVsYXRpb25zIHZzIGFBbmRCYUFuZE5vdEJub3RBYW5kQmNvcnJlbGF0aW9uICYmICAmJiAhY2hpbGREYXRhbm9uTnVsbEl0ZXJhYmxlX3N0YXRzZW5hYmxlU3RhdHNPdXRwdXR4bWxTdGF0cyBoYXZlIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5pbnZlcnNlTWFwaXNWYWxpZEtleXRyeVNvcnRNYXBzb3J0TWFwVHJhY2tNYXBfY291bnRzX2NvdW50c01hcGNvdW50c3ByaW50SGlzdG9ncmFtIC0tICBtYXBzaW5jcmVtZW50YWNjdW11bGF0ZWQgIC0tICU6IGxlbmd0aCA8PSBfbm90aWZ5TGVuZ3RoQ2hhbmdlZGRhcnQyanMuanMuZW5xdWV1ZUNvZGVnZW5FbnF1ZXVlcl9wcm9jZXNzZWRFbnRpdGllc2NvZGVnZW4gZW5xdWV1ZXJDb2RlZ2VuIHdvcmsgbGlzdCBpcyBjbG9zZWQuIFRyeWluZyB0byBhZGQgY29kZWdlbi50eXBlVXNlY29kZWdlbi5keW5hbWljVXNlY29kZWdlbi5zdGF0aWNVc2Vjb2RlZ2VuLmNvbnN0YW50VXNlZGFydDJqcy5qc19lbWl0dGVyLmNvZGVfZW1pdHRlcl90YXNrc3RhcnR1cF9qc19lbWl0dGVyTmF0aXZlRW1pdHRlclR5cGVUZXN0UmVnaXN0cnl0eXBlVGVzdFJlZ2lzdHJ5X25hdGl2ZUVtaXR0ZXJfZW1pdHRlcl9nZW5lcmF0ZVNvdXJjZU1hcE5hdGl2ZUVtaXR0ZXIgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgeWV0LkVtaXR0ZXIgaGFzIG5vdCBiZWVuIGNyZWF0ZWQgeWV0LkNvZGUgZW1pdHRlcl9maW5hbGl6ZVJ0aWNvbXB1dGVSZXF1aXJlZFR5cGVDaGVja3Njb21wdXRlUnRpTmVlZGVkQ2xhc3Nlc2ZpbmFsaXplIHJ0aXByb2dyYW1CdWlsZGVycnRpQ2hlY2tzcnRpTmVlZGVkQ2xhc3Nlc2VtaXRQcm9ncmFtcHJvdG90eXBlQWNjZXNzaGFzQmVlbkluc3RhbnRpYXRlZHN0YXRpY0Z1bmN0aW9uQWNjZXNzc3RhdGljRmllbGRBY2Nlc3Npc29sYXRlTGF6eUluaXRpYWxpemVyQWNjZXNzc3RhdGljQ2xvc3VyZUFjY2Vzc2NvbnN0cnVjdG9yQWNjZXNzdHlwZUFjY2Vzc3R5cGVBY2Nlc3NOZXdSdGl0eXBlVmFyaWFibGVBY2Nlc3NOZXdSdGlnbG9iYWxnZW5lcmF0ZUVtYmVkZGVkR2xvYmFsQWNjZXNzU3RyaW5ncHJvZ3JhbUZvclRlc3RpbmdpbnRlcmNlcHRvclByb3RvdHlwZUFjY2Vzc2ludGVyY2VwdG9yQ2xhc3NBY2Nlc3NnZW5lcmF0ZUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsY29tcGFyZUNvbnN0YW50c2lzQ29uc3RhbnRJbmxpbmVkT3JBbHJlYWR5RW1pdHRlZGFic3RyYWN0X3NpbmsuZGFydGFic3RyYWN0X3NvdXJjZS5kYXJ0YmluYXJ5X3NpbmsuZGFydGJpbmFyeV9zb3VyY2UuZGFydGhlbHBlcnMuZGFydG1lbWJlcl9kYXRhLmRhcnRtaXhpbnMuZGFydG5vZGVfaW5kZXhlci5kYXJ0b2JqZWN0X3NpbmsuZGFydG9iamVjdF9zb3VyY2UuZGFydERhdGFTaW5rd3JpdGVNZW1iZXJOb2Rld3JpdGVNZW1iZXJOb2Rlc3dyaXRlTWVtYmVyTm9kZU1hcHdyaXRlTGlicmFyeURlcGVuZGVuY3lOb2Rld3JpdGVMaWJyYXJ5RGVwZW5kZW5jeU5vZGVPck51bGx3cml0ZVRyZWVOb2Rld3JpdGVUcmVlTm9kZUluQ29udGV4dHdyaXRlVHJlZU5vZGVPck51bGxJbkNvbnRleHR3cml0ZVRyZWVOb2Rlc0luQ29udGV4dHdyaXRlVHJlZU5vZGVNYXBJbkNvbnRleHR3cml0ZVR5cGVQYXJhbWV0ZXJOb2Rld3JpdGVUeXBlUGFyYW1ldGVyTm9kZXN3cml0ZURhcnRUeXBlc3dyaXRlRGFydFR5cGVOb2Rld3JpdGVEYXJ0VHlwZU5vZGVzd3JpdGVTb3VyY2VTcGFud3JpdGVMaWJyYXJ5TWFwd3JpdGVMb2NhbHdyaXRlTG9jYWxPck51bGx3cml0ZUxvY2Fsc3dyaXRlQ29uc3RhbnRPck51bGx3cml0ZUNvbnN0YW50c3dyaXRlRG91YmxlVmFsdWV3cml0ZUludGVnZXJWYWx1ZXdyaXRlSW1wb3J0d3JpdGVJbXBvcnRPck51bGx3cml0ZXJpbk1lbWJlckNvbnRleHREYXRhU291cmNlcmVnaXN0ZXJMb2NhbExvb2t1cGxvY2FsTG9va3VwcmVhZExpYnJhcnlOb2RlcmVhZENsYXNzTm9kZXJlYWRUeXBlZGVmTm9kZXJlYWRNZW1iZXJOb2RlcmVhZE1lbWJlck5vZGVzcmVhZE1lbWJlck5vZGVNYXByZWFkTGlicmFyeURlcGVuZGVuY3lOb2RlcmVhZExpYnJhcnlEZXBlbmRlbmN5Tm9kZU9yTnVsbHJlYWRUcmVlTm9kZXJlYWRUcmVlTm9kZUluQ29udGV4dHJlYWRUcmVlTm9kZU9yTnVsbEluQ29udGV4dHJlYWRUcmVlTm9kZXNJbkNvbnRleHRyZWFkVHJlZU5vZGVNYXBJbkNvbnRleHRyZWFkVHlwZVBhcmFtZXRlck5vZGVyZWFkVHlwZVBhcmFtZXRlck5vZGVzcmVhZERhcnRUeXBlc3JlYWREYXJ0VHlwZU5vZGVyZWFkRGFydFR5cGVOb2Rlc3JlYWRTb3VyY2VTcGFucmVhZExpYnJhcnlNYXByZWFkTG9jYWxyZWFkTG9jYWxPck51bGxyZWFkTG9jYWxzcmVhZENvbnN0YW50T3JOdWxscmVhZERvdWJsZVZhbHVlcmVhZEludGVnZXJWYWx1ZXJlYWRDb25zdGFudHNyZWFkSW1wb3J0cmVhZEltcG9ydE9yTnVsbEVudGl0eUxvb2t1cGdldExpYnJhcnlCeUluZGV4Z2V0Q2xhc3NCeUluZGV4Z2V0VHlwZWRlZkJ5SW5kZXhnZXRNZW1iZXJCeUluZGV4Z2V0VHlwZVZhcmlhYmxlQnlJbmRleEVudGl0eVJlYWRlcnJlYWRMaWJyYXJ5RnJvbURhdGFTb3VyY2VyZWFkQ2xhc3NGcm9tRGF0YVNvdXJjZXJlYWRUeXBlZGVmRnJvbURhdGFTb3VyY2VyZWFkTWVtYmVyRnJvbURhdGFTb3VyY2VyZWFkVHlwZVZhcmlhYmxlRnJvbURhdGFTb3VyY2VFbnRpdHlXcml0ZXJ3cml0ZUxpYnJhcnlUb0RhdGFTaW5rd3JpdGVDbGFzc1RvRGF0YVNpbmtjbGFzc0luZGV4d3JpdGVUeXBlZGVmVG9EYXRhU2lua3R5cGVkZWZJbmRleHdyaXRlTWVtYmVyVG9EYXRhU2lua3dyaXRlVHlwZVZhcmlhYmxlVG9EYXRhU2lua3R5cGVWYXJpYWJsZUluZGV4TG9jYWxMb29rdXBnZXRMb2NhbEJ5SW5kZXhDb2RlZ2VuUmVhZGVyQ29kZWdlbldyaXRlckFic3RyYWN0RGF0YVNpbmtfZGFydFR5cGVXcml0ZXJfZGFydFR5cGVOb2RlV3JpdGVyX3RhZ3NfbWVtYmVyRGF0YV9zdHJpbmdJbmRleF91cmlJbmRleF9tZW1iZXJOb2RlSW5kZXhfY29uc3RhbnRJbmRleF9nZW5lcmFsQ2FjaGVzX2VudGl0eVdyaXRlcl9jb2RlZ2VuV3JpdGVydGFnRnJlcXVlbmN5TWFwX2N1cnJlbnRNZW1iZXJDb250ZXh0X2N1cnJlbnRNZW1iZXJEYXRhX2JlZ2luX2VuZGV4aXN0aW5nVGFnVW5leHBlY3RlZCB0YWcgZW5kLiBFeHBlY3RlZCAsIGZvdW5kIG9sZE1lbWJlckNvbnRleHRvbGRNZW1iZXJEYXRhY3VycmVudE1lbWJlckRhdGFEYXRhU2luayBoYXMgbm8gY3VycmVudCBtZW1iZXIgY29udGV4dC5fd3JpdGVEYXRhS2luZERhdGFLaW5kLnNvdXJjZVNwYW5fd3JpdGVVcmlfd3JpdGVJbnRJbnRlcm5hbERhdGFLaW5kLmRhcnRUeXBlX3dyaXRlRGFydFR5cGVmdW5jdGlvblR5cGVWYXJpYWJsZXNNaXNzaW5nIERhcnRUeXBlIGlzIG5vdCBhbGxvd2VkLkRhcnRUeXBlS2luZC5ub25lRGF0YUtpbmQuZGFydFR5cGVOb2RlX3dyaXRlRGFydFR5cGVOb2RlTWlzc2luZyBpci5EYXJ0VHlwZSBub2RlIGlzIG5vdCBhbGxvd2VkLkRhcnRUeXBlTm9kZUtpbmQubm9uZURhdGFLaW5kLm1lbWJlck5vZGVfd3JpdGVNZW1iZXJOb2RlX3dyaXRlTWVtYmVyTm9kZUludGVybmFsX3dyaXRlRW51bUludGVybmFsTWVtYmVyQ29udGV4dEtpbmQuY2xzX3dyaXRlQ2xhc3NOb2RlX3dyaXRlU3RyaW5nTWVtYmVyQ29udGV4dEtpbmQubGlicmFyeV93cml0ZUxpYnJhcnlOb2RlRGF0YUtpbmQuY2xhc3NOb2RlRGF0YUtpbmQudHlwZWRlZk5vZGVfd3JpdGVUeXBlZGVmTm9kZURhdGFLaW5kLmxpYnJhcnlOb2RlRGF0YUtpbmQuZW51bVZhbHVlRGF0YUtpbmQuYm9vbF93cml0ZUJvb2xEYXRhS2luZC51cmlEYXRhS2luZC5zdHJpbmdEYXRhS2luZC51aW50MzBEYXRhS2luZC50cmVlTm9kZV93cml0ZVRyZWVOb2Rld3JpdGVUcmVlTm9kZUluQ29udGV4dEludGVybmFsbWVtYmVyRGF0YV9nZXRNZW1iZXJEYXRhTm8gZW5jbG9zaW5nIG1lbWJlciBvZiBUcmVlTm9kZSBfVHJlZU5vZGVLaW5kLmNsc19UcmVlTm9kZUtpbmQubWVtYmVyX1RyZWVOb2RlS2luZC5mdW5jdGlvbkRlY2xhcmF0aW9uVmFyaWFibGVfVHJlZU5vZGVLaW5kLmZ1bmN0aW9uTm9kZV93cml0ZUZ1bmN0aW9uTm9kZV9UcmVlTm9kZUtpbmQudHlwZVBhcmFtZXRlcl93cml0ZVR5cGVQYXJhbWV0ZXJfVHJlZU5vZGVLaW5kLmNvbnN0YW50Z2V0SW5kZXhCeUNvbnN0YW50X1RyZWVOb2RlS2luZC5ub2RlZ2V0SW5kZXhCeVRyZWVOb2RlTm8gVHJlZU5vZGUgaW5kZXggZm91bmQgZm9yIGZvdW5kIGluIF9GdW5jdGlvbk5vZGVLaW5kLnByb2NlZHVyZV9GdW5jdGlvbk5vZGVLaW5kLmNvbnN0cnVjdG9yX0Z1bmN0aW9uTm9kZUtpbmQuZnVuY3Rpb25FeHByZXNzaW9uX0Z1bmN0aW9uTm9kZUtpbmQuZnVuY3Rpb25EZWNsYXJhdGlvblVuc3VwcG9ydGVkIEZ1bmN0aW9uTm9kZSBwYXJlbnQgRGF0YUtpbmQudHlwZVBhcmFtZXRlck5vZGVfVHlwZVBhcmFtZXRlcktpbmQuY2xzX1R5cGVQYXJhbWV0ZXJLaW5kLmZ1bmN0aW9uTm9kZVVuc3VwcG9ydGVkIFR5cGVQYXJhbWV0ZXIgcGFyZW50IExvY2FsS2luZC5qTG9jYWxsb2NhbEluZGV4TG9jYWxLaW5kLnRoaXNMb2NhbExvY2FsS2luZC5ib3hMb2NhbExvY2FsS2luZC5hbm9ueW1vdXNDbG9zdXJlTG9jYWxMb2NhbEtpbmQudHlwZVZhcmlhYmxlTG9jYWxVbnN1cHBvcnRlZCBsb2NhbCBEYXRhS2luZC5jb25zdGFudF93cml0ZUNvbnN0YW50RGF0YUtpbmQuZG91YmxlX3dyaXRlRG91YmxlVmFsdWVzZXRGbG9hdDY0Z2V0VWludDE2RGF0YUtpbmQuaW50X3dyaXRlQmlnSW50X3dyaXRlQ29uc3RhbnRJbnRlcm5hbENvbnN0YW50VmFsdWVLaW5kLkJPT0xDb25zdGFudFZhbHVlS2luZC5JTlRDb25zdGFudFZhbHVlS2luZC5ET1VCTEVDb25zdGFudFZhbHVlS2luZC5TVFJJTkdDb25zdGFudFZhbHVlS2luZC5OVUxMQ29uc3RhbnRWYWx1ZUtpbmQuRlVOQ1RJT05Db25zdGFudFZhbHVlS2luZC5MSVNUQ29uc3RhbnRWYWx1ZUtpbmQuU0VUQ29uc3RhbnRWYWx1ZUtpbmQuTUFQa2V5TGlzdHByb3RvVmFsdWVDb25zdGFudFZhbHVlS2luZC5DT05TVFJVQ1RFRENvbnN0YW50VmFsdWVLaW5kLlRZUEVDb25zdGFudFZhbHVlS2luZC5JTlNUQU5USUFUSU9OQ29uc3RhbnRWYWx1ZUtpbmQuTk9OX0NPTlNUQU5UQ29uc3RhbnRWYWx1ZUtpbmQuSU5URVJDRVBUT1JDb25zdGFudFZhbHVlS2luZC5ERUZFUlJFRF9HTE9CQUxyZWZlcmVuY2VkQ29uc3RhbnRWYWx1ZUtpbmQuRFVNTVlfSU5URVJDRVBUT1JDb25zdGFudFZhbHVlS2luZC5VTlJFQUNIQUJMRUNvbnN0YW50VmFsdWVLaW5kLkpTX05BTUVfd3JpdGVTdHJpbmdJbnRlcm5hbF93cml0ZVVyaUludGVybmFsRGF0YUtpbmQuaW1wb3J0X3dyaXRlSW1wb3J0X3dyaXRlSW1wb3J0SW50ZXJuYWxDYW4gbm90IHNlcmlhbGl6ZSBhbiBPdXRwdXRVbml0IHJlZmVyZW5jZSB3aXRob3V0IGEgcmVnaXN0ZXJlZCBjb2RlZ2VuIHdyaXRlci5DYW4gbm90IHNlcmlhbGl6ZSBhbiBBYnN0cmFjdFZhbHVlIHdpdGhvdXQgYSByZWdpc3RlcmVkIGNvZGVnZW4gd3JpdGVyLkNhbiBub3Qgc2VyaWFsaXplIGEgSlMgbmRvZSB3aXRob3V0IGEgcmVnaXN0ZXJlZCBjb2RlZ2VuIHdyaXRlci5BYnN0cmFjdERhdGFTb3VyY2VfZW50aXR5UmVhZGVyX2xvY2FsTG9va3VwX2NvZGVnZW5SZWFkZXJfcmVhZERhcnRUeXBlc19yZWFkRGFydFR5cGVfcmVhZERhcnRUeXBlTm9kZXNfcmVhZERhcnRUeXBlTm9kZV9jaGVja0RhdGFLaW5kX3JlYWRVcmlfcmVhZEludEludGVybmFsRGFydFR5cGVLaW5kLnZvaWRUeXBlRGFydFR5cGVLaW5kLnR5cGVWYXJpYWJsZURhcnRUeXBlS2luZC5mdW5jdGlvblR5cGVWYXJpYWJsZURhcnRUeXBlS2luZC5mdW5jdGlvblR5cGVEYXJ0VHlwZUtpbmQuaW50ZXJmYWNlVHlwZURhcnRUeXBlS2luZC50eXBlZGVmRGFydFR5cGVLaW5kLmR5bmFtaWNUeXBlRGFydFR5cGVLaW5kLmZ1dHVyZU9ydHlwZVZhcmlhYmxlQ291bnRVbmV4cGVjdGVkIERhcnRUeXBlS2luZCBEYXJ0VHlwZU5vZGVLaW5kLnZvaWRUeXBlRGFydFR5cGVOb2RlS2luZC50eXBlUGFyYW1ldGVyVHlwZURhcnRUeXBlTm9kZUtpbmQuZnVuY3Rpb25UeXBlRGFydFR5cGVOb2RlS2luZC5mdW5jdGlvblR5cGVWYXJpYWJsZURhcnRUeXBlTm9kZUtpbmQuaW50ZXJmYWNlVHlwZURhcnRUeXBlTm9kZUtpbmQudHlwZWRlZkRhcnRUeXBlTm9kZUtpbmQuZHluYW1pY1R5cGVEYXJ0VHlwZU5vZGVLaW5kLmJvdHRvbVR5cGVEYXJ0VHlwZU5vZGVLaW5kLmludmFsaWRUeXBlRGFydFR5cGVOb2RlS2luZC50aGlzSW50ZXJmYWNlVHlwZURhcnRUeXBlTm9kZUtpbmQuZXhhY3RJbnRlcmZhY2VUeXBlRGFydFR5cGVOb2RlS2luZC5kb2VzTm90Q29tcGxldGVmdW5jdGlvbi10eXBlLW5vZGVuYW1lZFBhcmFtZXRlckNvdW50X3JlYWRNZW1iZXJEYXRhX3JlYWRNZW1iZXJEYXRhSW50ZXJuYWxfcmVhZEVudW1JbnRlcm5hbF9yZWFkQ2xhc3NEYXRhX3JlYWRTdHJpbmdsb29rdXBNZW1iZXJEYXRhQnlOYW1lX3JlYWRMaWJyYXJ5RGF0YVVuc3VwcG9ydGVkIF9NZW1iZXJLaW5kIGxvb2t1cENsYXNzQnlOYW1lX3JlYWRUeXBlZGVmTm9kZWxvb2t1cFR5cGVkZWZnZXRMaWJyYXJ5RGF0YUJ5VXJpX3JlYWRVcmlJbnRlcm5hbF9yZWFkQm9vbF9yZWFkU3RyaW5nSW50ZXJuYWxfcmVhZFRyZWVOb2RlbGlicmFyeURhdGFjbGFzc0RhdGFsb29rdXBDbGFzc0J5Tm9kZWxvb2t1cE1lbWJlckRhdGFCeU5vZGVyZWFkVHJlZU5vZGVJbkNvbnRleHRJbnRlcm5hbF9yZWFkQ29uc3RhbnRfcmVhZERvdWJsZVZhbHVlc2V0VWludDE2Z2V0RmxvYXQ2NF9yZWFkQmlnSW50X3JlYWRDb25zdGFudEludGVybmFsVW5leHBleHRlZCBjb25zdGFudCB2YWx1ZSBraW5kIF9yZWFkRnVuY3Rpb25Ob2RlX3JlYWRUeXBlUGFyYW1ldGVyZ2V0Q29uc3RhbnRCeUluZGV4dHJlZU5vZGVnZXRUcmVlTm9kZUJ5SW5kZXhObyBUcmVlTm9kZSBmb3VuZCBmb3IgaW5kZXggX2Vycm9yQ29udGV4dFVuZXhwZWN0ZWQgX1RyZWVOb2RlS2luZCBmdW5jdGlvbkV4cHJlc3Npb25VbmV4cGVjdGVkIF9GdW5jdGlvbk5vZGVLaW5kIFVuZXhwZWN0ZWQgX1R5cGVQYXJhbWV0ZXJLaW5kIGtpbmQgZXhwZWN0ZWRLaW5kYWN0dWFsS2luZEludmFsaWQgZGF0YSBraW5kLiBVbmV4cGVjdGVkIGxvY2FsIGtpbmQgX3JlYWRJbXBvcnRfcmVhZEltcG9ydEludGVybmFsQ2FuIG5vdCBkZXNlcmlhbGl6ZSBhbiBPdXRwdXRVbml0IHJlZmVyZW5jZSB3aXRob3V0IGEgcmVnaXN0ZXJlZCBjb2RlZ2VuIHJlYWRlci5DYW4gbm90IGRlc2VyaWFsaXplIGFuIEFic3RyYWN0VmFsdWUgQ2FuIG5vdCBkZXNlcmlhbGl6ZSBhIEpTIG5vZGUgd2l0aG91dCBhIHJlZ2lzdGVyZWQgY29kZWdlbiByZWFkZXIuX2J1ZmZlcmVkU2lua0JpbmFyeVNvdXJjZUltcGxfcmVhZEJ5dGVJbnZhbGlkIGRhdGEga2luZCBpbmRleC4gRXhwZWN0ZWQgb25lIG9mICwgZm91bmQgaW5kZXggIE9mZnNldCBEYXRhS2luZHVpbnQzMGVudW1WYWx1ZW1lbWJlck5vZGV0eXBlUGFyYW1ldGVyTm9kZWRhcnRUeXBlTm9kZU1lbWJlckNvbnRleHRLaW5kTG9jYWxLaW5kakxvY2FsYm94TG9jYWxhbm9ueW1vdXNDbG9zdXJlTG9jYWx0eXBlVmFyaWFibGVMb2NhbF9UcmVlTm9kZUtpbmRmdW5jdGlvbkRlY2xhcmF0aW9uVmFyaWFibGVfRnVuY3Rpb25Ob2RlS2luZF9UeXBlUGFyYW1ldGVyS2luZFRhZyhEYXJ0VHlwZUtpbmR2b2lkVHlwZWZ1bmN0aW9uVHlwZVZhcmlhYmxlZnV0dXJlT3JEYXJ0VHlwZVdyaXRlcnZpc2l0VHlwZXNEYXJ0VHlwZU5vZGVLaW5kdHlwZVBhcmFtZXRlclR5cGVpbnZhbGlkVHlwZXRoaXNJbnRlcmZhY2VUeXBlZXhhY3RJbnRlcmZhY2VUeXBlZG9lc05vdENvbXBsZXRlRGFydFR5cGVOb2RlV3JpdGVyVW5leHBlY3RlZCBpci5EYXJ0VHlwZSBJbmRleGVkU2lua19jYWNoZXdyaXRlVmFsdWVDeWNsaWMgZGVwZW5kZW5jeSBvbiBjYWNoZWQgdmFsdWU6IEluZGV4ZWRTb3VyY2VyZWFkVmFsdWVVbmZpbGxlZCBpbmRleCBDb21wb25lbnRMb29rdXBfY29tcG9uZW50X2xpYnJhcnlNYXBObyBsaWJyYXJ5IGZvdW5kIGZvciBfTGlicmFyeURhdGFfY2xhc3Nlc0J5TmFtZV9jbGFzc2VzQnlOb2RlX3R5cGVkZWZzX21lbWJlcnNCeU5hbWVfbWVtYmVyc0J5Tm9kZV9lbnN1cmVDbGFzc2VzRHVwbGljYXRlIGNsYXNzICd0cnlpbmcgdG8gYWRkIER1cGxpY2F0ZSB0eXBlZGVmICdfZW5zdXJlTWVtYmVyc0R1cGxpY2F0ZSBtZW1iZXIgJ19MaWJyYXJ5RGF0YSgpKV9DbGFzc0RhdGFfQ2xhc3NEYXRhKF9NZW1iZXJEYXRhX2luZGV4VG9Ob2RlTWFwX25vZGVUb0luZGV4TWFwX2NvbnN0YW50SW5kZXhNYXBfZW5zdXJlTWFwc19jcmVhdGVDb25zdGFudEluZGV4ZXJnZXRDb25zdGFudGdldEluZGV4Tm8gaW5kZXggZm91bmQgZm9yIF9NZW1iZXJEYXRhKERhdGFTb3VyY2VNaXhpbmhhc0NsYXNzRGF0YVNpbmtNaXhpbl9UcmVlTm9kZUluZGV4ZXJWaXNpdG9yX2N1cnJlbnRJbmRleHJlZ2lzdGVyTm9kZV9Db25zdGFudE5vZGVJbmRleGVyVmlzaXRvcl92aXNpdGVkTm9uaW5kZXhlZE5vZGVzX3JlZ2lzdGVyQ29uc3RhbnQgd2l0aG91dCBpbmRleDogSW5kZXggd2l0aG91dCBjb25zdGFudDogVW5leHBlY3RlZCBjb25zdGFudDogT2JqZWN0U2lua2JlZ2luOk9iamVjdFNvdXJjZV9yZWFkIHZhbHVlLCBmb3VuZCBleHBlY3RlZFRhZ2FjdHVhbFRhZ1VuZXhwZWN0ZWQgYmVnaW4gdGFnLiBVbmV4cGVjdGVkIGVuZCB0YWcuIAo+IGZ1bmN0aW9uVHlwZU5vZGVUYWdfY29tcHV0ZU1lbWJlck5hbWVzc2FNb2R1bGFyTmFtZXJNb2R1bGFyTmFtZXJJbXBsTW9kdWxhckVtaXR0ZXJJbXBsVHlwZUV4cHJlc3Npb25SZWNpcGVTc2FGdW5jdGlvbkNvbXBpbGVyX2J1aWxkZXJvcHRpbWl6ZXJfY29kZWdlbm9wdGltaXplc291cmNlSW5mb3JtYXRpb25CdWlsZGVyX3Jld3JpdGVBc3luY2FzeW5jVHlwZVBhcmFtZXRlcmJvZHlTb3VyY2VJbmZvcm1hdGlvbmV4aXRTb3VyY2VJbmZvcm1hdGlvbl9tYWtlQXN5bmNSZXdyaXRlcl9tYWtlU3luY1N0YXJSZXdyaXRlcl9tYWtlQXN5bmNTdGFyUmV3cml0ZXJfZmV0Y2hJdGVtVHlwZWdldFR5cGVSZXByZXNlbnRhdGlvbl9mZXRjaEl0ZW1UeXBlTmV3UnRpaGVscGVyRWxlbWVudHJlY2lwZWVuY29kZUdyb3VuZFJlY2lwZSMoIylzdGFydEZ1bmN0aW9uY29tcGxldGVyRmFjdG9yeWl0ZW1UeXBlRXhwcmVzc2lvbmFzeW5jU3RhcnRhc3luY0F3YWl0YXN5bmNSZXR1cm5hc3luY1JldGhyb3djb21wbGV0ZXJGYWN0b3J5VHlwZUFyZ3VtZW50c3NhZmVWYXJpYWJsZU5hbWVzYWZlVmFyaWFibGVQcmVmaXhGb3JBc3luY1Jld3JpdGVib2R5TmFtZWRlcml2ZUFzeW5jQm9keU5hbWVpdGVyYWJsZUZhY3RvcnlpdGVyYWJsZUZhY3RvcnlUeXBlQXJndW1lbnRzeWllbGRTdGFyRXhwcmVzc2lvbnVuY2F1Z2h0RXJyb3JFeHByZXNzaW9ubmV3Q29udHJvbGxlcm5ld0NvbnRyb2xsZXJUeXBlQXJndW1lbnRzeWllbGRFeHByZXNzaW9uU3NhQnVpbGRlclNzYUJ1aWxkZXJUYXNrX3NvdXJjZUluZm9ybWF0aW9uRmFjdG9yeVNTQSBidWlsZGVyQVNTSUdOTUVOVEJJVF9PUkJJVF9YT1JCSVRfQU5ETEVGVF9IQU5EX1NJREVkYXJ0MmpzLmNvbnN0YW50cy52YWx1ZXNDb25zdGFudFZhbHVlS2luZElOVEVSQ0VQVE9SSlNfTkFNRURVTU1ZX0lOVEVSQ0VQVE9SVU5SRUFDSEFCTEVERUZFUlJFRF9HTE9CQUxOT05fQ09OU1RBTlRDb25zdGFudFZhbHVlVmlzaXRvcnZpc2l0RHVtbXlJbnRlcmNlcHRvcnZpc2l0VW5yZWFjaGFibGV2aXNpdEpzTmFtZXZpc2l0RGVmZXJyZWRHbG9iYWx2aXNpdE5vbkNvbnN0YW50aXNDb25zdHJ1Y3RlZE9iamVjdGlzVHlwZWlzRHVtbXlpc01pbnVzWmVyb2lzT25laXNQb3NpdGl2ZUluZmluaXR5aXNOZWdhdGl2ZUluZmluaXR5VXNlIENvbnN0YW50VmFsdWUudG9EYXJ0VGV4dCgpIG9yIENvbnN0YW50VmFsdWUudG9TdHJ1Y3R1cmVkVGV4dCgpIGluc3RlYWQgb2YgQ29uc3RhbnRWYWx1ZS50b1N0cmluZygpLkZ1bmN0aW9uQ29uc3RhbnRWYWx1ZTIxNDc0ODM2NDdGdW5jdGlvbkNvbnN0YW50KFByaW1pdGl2ZUNvbnN0YW50Lj09UHJpbWl0aXZlQ29uc3RhbnQuaGFzaENvZGVOdWxsQ29uc3RhbnRWYWx1ZUpzTnVsbE51bUNvbnN0YW50VmFsdWVJbnRDb25zdGFudFZhbHVlX2NhY2hlZFZhbHVlc2ludENvbnN0YW50VmFsaXNQb3NpdGl2ZW90aGVySW50SW50Q29uc3RhbnQoRG91YmxlQ29uc3RhbnRWYWx1ZU5hTkluZmluaXR5LUluZmluaXR5MC4wMS4wb3RoZXJEb3VibGVEb3VibGVDb25zdGFudChCb29sQ29uc3RhbnRWYWx1ZUJvb2xDb25zdGFudChUcnVlQ29uc3RhbnRWYWx1ZUZhbHNlQ29uc3RhbnRWYWx1ZVN0cmluZ0NvbnN0YW50VmFsdWVvdGhlclN0cmluZ3RvRGFydFN0cmluZ1N0cmluZ0NvbnN0YW50KE9iamVjdENvbnN0YW50VmFsdWVfdW5wYXJzZVR5cGVBcmd1bWVudHNUeXBlQ29uc3RhbnQoTGlzdENvbnN0YW50VmFsdWVMaXN0Q29uc3RhbnQoU2V0Q29uc3RhbnRWYWx1ZW90aGVyU2V0U2V0Q29uc3RhbnQofSlNYXBDb25zdGFudFZhbHVlX2xvb2t1cE1hcG90aGVyTWFwbG9va3VwTWFwTWFwQ29uc3RhbnQoaW50ZXJjZXB0b3IoSW50ZXJjZXB0b3JDb25zdGFudChKc05hbWVDb25zdGFudFZhbHVlanNfbmFtZShKc05hbWVDb25zdGFudChEdW1teUludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZWR1bW15X2ludGVyY2VwdG9yKER1bW15SW50ZXJjZXB0b3JDb25zdGFudChVbnJlYWNoYWJsZUNvbnN0YW50VmFsdWV1bnJlYWNoYWJsZSgpVW5yZWFjaGFibGVDb25zdGFudCgpb3RoZXJWYXJfZmllbGRzU29ydGVkQnlOYW1lQ29uc3RydWN0ZWRDb25zdGFudChJbnN0YW50aWF0aW9uQ29uc3RhbnQoaXNSZWZlcmVuY2VkZWZlcnJlZF9nbG9iYWwoRGVmZXJyZWRHbG9iYWxDb25zdGFudChOb25Db25zdGFudFZhbHVlTm9uQ29uc3RhbnQ+Pm5vbi1jb25zdGFudDw8dHJlYXRBc0R5bmFtaWNpc0Z1bmN0aW9uVHlwZVZhcmlhYmxlY29udGFpbnNGcmVlVHlwZVZhcmlhYmxlc19jb250YWluc0ZyZWVUeXBlVmFyaWFibGVzZm9yRWFjaFR5cGVWYXJpYWJsZWFzc3VtcHRpb25zYmluZGluZ3NfQXNzdW1wdGlvbnNfYXNzdW1wdGlvbk1hcF9hZGRBc3N1bXB0aW9uYXNzdW1lX3JlbW92ZUFzc3VtcHRpb25mb3JnZXRpc0Fzc3VtZWRfQXNzdW1wdGlvbnMoKS0+YXJndW1lbnRIYXNoX2VxdWFsc0ludGVybmFsbmV3VW5hbGlhc2VkVHlwZVZhcmlhYmxlVHlwZUZ1bmN0aW9uVHlwZVZhcmlhYmxlX2JvdW5kQm91bmQgaGFzbid0IGJlZW4gc2V0LkJvdW5kIGhhcyBhbHJlYWR5IGJlZW4gc2V0LkludmFsaWQgcmV0dXJuIHR5cGUgaW4gSW52YWxpZCBwYXJhbWV0ZXIgdHlwZXMgaW4gSW52YWxpZCBvcHRpb25hbCBwYXJhbWV0ZXIgdHlwZXMgaW4gSW52YWxpZCBuYW1lZCBwYXJhbWV0ZXJzIGluIEludmFsaWQgbmFtZWQgcGFyYW1ldGVyIHR5cGVzIGluIEludmFsaWQgdHlwZSB2YXJpYWJsZXMgaW4gcmVzdG9yZWhhc0ZyZWVuZXdQYXJhbWV0ZXJUeXBlc25ld09wdGlvbmFsUGFyYW1ldGVyVHlwZXNuZXdOYW1lZFBhcmFtZXRlclR5cGVzbmV3VHlwZVZhcmlhYmxlc25ld0JvdW5kbmVlZHNPcHRpb25hbENvbW1hbmVlZHNOYW1lZENvbW1hRnV0dXJlT3JUeXBlbmV3VHlwZUFyZ3VtZW50QmFzZURhcnRUeXBlVmlzaXRvckFic3RyYWN0VHlwZVJlbGF0aW9uZW5zdXJlUmVzb2x2ZWRnZXRVbmFsaWFzZWRhc0luc3RhbmNlT2ZnZXRDYWxsVHlwZWludGVybmFsIGVycm9yOiB1bmtub3duIHR5cGUgaW52YWxpZFR5cGVBcmd1bWVudHNpbnZhbGlkRnVuY3Rpb25SZXR1cm5UeXBlc2ludmFsaWRGdW5jdGlvblBhcmFtZXRlclR5cGVzaW52YWxpZFR5cGVWYXJpYWJsZUJvdW5kc2ludmFsaWRDYWxsYWJsZVR5cGVjaGVja1R5cGVBcmd1bWVudHN0VHlwZUFyZ3NzVHlwZUFyZ3N0ZnNmZ2V0Q29tbW9uVHlwZVZhcmlhYmxlc0NvdW50dmlzaXRGdW5jdGlvblR5cGVJbnRlcm5hbHRwc3Nwc3NOb3RFbXB0eXROb3RFbXB0eXROZXh0c05leHRpbmNvbXBhdGlibGVQYXJhbWV0ZXJzdE5hbWVzdFR5cGVzc05hbWVzc1R5cGVzdEluZGV4c0luZGV4c2VlblR5cGVWYXJpYWJsZXNNb3JlU3BlY2lmaWNWaXNpdG9yU3VidHlwZVZpc2l0b3JzRnV0dXJlT3J0SW50ZXJmYWNlUG90ZW50aWFsU3VidHlwZVZpc2l0b3JfYXNzdW1lSW5zdGFudGlhdGlvbnNpc1BvdGVudGlhbFN1YnR5cGVhc3N1bWVJbnN0YW50aWF0aW9uc0RhcnRUeXBlc0lTX1NVQlRZUEVNQVlCRV9TVUJUWVBFTk9UX1NVQlRZUEVjb21wdXRlU3VidHlwZVJlbGF0aW9uc3Vic3RCeUNvbnRleHRnZXRTdXBlcnR5cGVnZXRJbnRlcmZhY2VzY2hlY2tUeXBlVmFyaWFibGVCb3VuZHNjaGVja1R5cGVWYXJpYWJsZUJvdW5kZ2V0Q2xhc3NDb250ZXh0Y29udGV4dENsYXNzX3N1YnN0VHlwZXNfZXF1YWxUeXBlc0RhcnQySlNKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0bW9uaXRvcm91dEJ1ZmZlcmNvZGVQb3NpdGlvbkxpc3RlbmVyb25TdGFydFBvc2l0aW9uY2xvc2luZ1Bvc2l0aW9ub25Qb3NpdGlvbnNBc3RDb250YWluZXJUb2tlbkZpbmFsaXplcmZpbmFsaXplVG9rZW5zVG9rZW5Db3VudGVydmlzaXROb2RlbWFya1NlZW5jb3VudFRva2Vuc1JlZmVyZW5jZUNvdW50ZWRBc3ROb2RlVW5wYXJzZWROb2RlX2VuYWJsZU1pbmlmaWNhdGlvbl9wcm90ZWN0Rm9yRXZhbF9jYWNoZWRMaXRlcmFsZnVuY3Rpb24gZXNjYXBlZFN0cmluZ3ByZXR0eVByaW50YWxsb3dWYXJpYWJsZU1pbmlmaWNhdGlvbnJlbmFtZXJGb3JOYW1lc3Nob3VsZENvbXByZXNzT3V0cHV0bWluaWZ5TG9jYWxWYXJpYWJsZXNjcmVhdGVDb2RlQnVmZmVyc291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3JjcmVhdGVQcm9jZXNzb3Jwcm9jZXNzaXNJZGVudGl0eVRlbXBsYXRlaXNOdWxsR3VhcmRPbkZpcnN0QXJndW1lbnRob2xlbmFtZU9yUG9zaXRpb25qc19iYWNrZW5kLm5hbWVySGFzaE1hcFJ1bnRpbWVUeXBlVGFnc0pHZW5lcmF0b3JCb2R5ZmllbGRfbmFtaW5nX21peGluLmRhcnRmcmVxdWVuY3lfbmFtZXIuZGFydG1pbmlmeV9uYW1lci5kYXJ0bmFtZXJfbmFtZXMuZGFydGphdmFTY3JpcHRLZXl3b3Jkc2luc3RhbmNlb2Z0eXBlb2ZkZWJ1Z2dlcmRlbGV0ZXB1YmxpY3Byb3RlY3RlZHJlc2VydmVkUHJvcGVydHlTeW1ib2xzX19wcm90b19fcHJvdG90eXBlcmVzZXJ2ZWRHbG9iYWxTeW1ib2xzdW5kZWZpbmVkcGFyc2VJbnRwYXJzZUZsb2F0ZGVjb2RlVVJJZGVjb2RlVVJJQ29tcG9uZW50ZW5jb2RlVVJJZW5jb2RlVVJJQ29tcG9uZW50QXJyYXlCb29sZWFuTnVtYmVyRGF0ZVJlZ0V4cEV2YWxFcnJvclJhbmdlRXJyb3JSZWZlcmVuY2VFcnJvclN5bnRheEVycm9yVVJJRXJyb3JNYXRoYXBwbGljYXRpb25DYWNoZWNsb3NlZENvbXBvbmVudHNjb250cm9sbGVyc2NyeXB0b2RlZmF1bHRTdGF0dXNkaWFsb2dBcmd1bWVudHNkaXJlY3Rvcmllc2RvY3VtZW50ZnJhbWVFbGVtZW50ZnVsbFNjcmVlbmdsb2JhbFN0b3JhZ2VoaXN0b3J5aW5uZXJIZWlnaHRpbm5lcldpZHRobG9jYXRpb25iYXJsb2NhbFN0b3JhZ2VtZW51YmFybW96SW5uZXJTY3JlZW5YbW96SW5uZXJTY3JlZW5ZbW96U2NyZWVuUGl4ZWxzUGVyQ3NzUGl4ZWxuYXZpZ2F0b3JvcGVuZXJvdXRlckhlaWdodG91dGVyV2lkdGhwYWdlWE9mZnNldHBhZ2VZT2Zmc2V0cGVyc29uYWxiYXJwa2NzMTFyZXR1cm5WYWx1ZXNjcmVlbnNjcm9sbGJhcnNzY3JvbGxNYXhYc2Nyb2xsTWF4WXNlc3Npb25TdG9yYWdlc2lkZWJhcnN0YXR1c2JhcnRvb2xiYXJ3aW5kb3dhbGVydGFkZEV2ZW50TGlzdGVuZXJhdG9iYmFja2JsdXJidG9hY2FwdHVyZUV2ZW50c2NsZWFySW50ZXJ2YWxjbGVhclRpbWVvdXRjb25maXJtZGlzYWJsZUV4dGVybmFsQ2FwdHVyZWRpc3BhdGNoRXZlbnRlbmFibGVFeHRlcm5hbENhcHR1cmVmaW5kZm9jdXNmb3J3YXJkR2Vja29BY3RpdmVYT2JqZWN0Z2V0QXR0ZW50aW9uZ2V0QXR0ZW50aW9uV2l0aEN5Y2xlQ291bnRnZXRDb21wdXRlZFN0eWxlZ2V0U2VsZWN0aW9uaG9tZW1heGltaXplbWluaW1pemVtb3ZlQnltb3ZlVG9vcGVuRGlhbG9ncG9zdE1lc3NhZ2VwcmludHByb21wdFF1ZXJ5SW50ZXJmYWNlcmVsZWFzZUV2ZW50c3JlbW92ZUV2ZW50TGlzdGVuZXJyZXNpemVCeXJlc2l6ZVRvcm91dGVFdmVudHNjcm9sbHNjcm9sbEJ5c2Nyb2xsQnlMaW5lc3Njcm9sbEJ5UGFnZXNzY3JvbGxUb3NldEludGVydmFsc2V0UmVzaXplYWJsZXNldFRpbWVvdXRzaG93TW9kYWxEaWFsb2dzaXplVG9Db250ZW50dXVlc2NhcGV1cGRhdGVDb21tYW5kc1hQQ05hdGl2ZVdyYXBwZXJYUENTYWZlSlNPamJlY3RXcmFwcGVyb25hYm9ydG9uYmVmb3JldW5sb2Fkb25jaGFuZ2VvbmNsaWNrb25jbG9zZW9uY29udGV4dG1lbnVvbmRyYWdkcm9wb25lcnJvcm9uZm9jdXNvbmhhc2hjaGFuZ2VvbmtleWRvd25vbmtleXByZXNzb25rZXl1cG9ubG9hZG9ubW91c2Vkb3dub25tb3VzZW1vdmVvbm1vdXNlb3V0b25tb3VzZW92ZXJvbm1vdXNldXBvbm1vem9yaWVudGF0aW9ub25wYWludG9ucmVzZXRvbnJlc2l6ZW9uc2Nyb2xsb25zZWxlY3RvbnN1Ym1pdG9udW5sb2Fkb250b3VjaGNhbmNlbG9udG91Y2hlbmRvbnRvdWNobW92ZW9udG91Y2hzdGFydG9uZ2VzdHVyZXN0YXJ0b25nZXN0dXJlY2hhbmdlb25nZXN0dXJlZW5kdW5ldmFsZ2V0UHJvdG90eXBlT2ZhdHRhY2hFdmVudGNsaWVudEluZm9ybWF0aW9uY2xpcGJvYXJkRGF0YWNyZWF0ZVBvcHVwZGlhbG9nSGVpZ2h0ZGlhbG9nTGVmdGRpYWxvZ1RvcGRpYWxvZ1dpZHRob25hZnRlcnByaW50b25iZWZvcmVkZWFjdGl2YXRlb25iZWZvcmVwcmludG9uY29udHJvbHNlbGVjdG9uZGVhY3RpdmF0ZW9uaGVscG9ucmVzaXplZW5kRGVidWdFbnVtZXJhdG9yR2xvYmFsSW1hZ2VBY3RpdmVYT2JqZWN0VkJBcnJheUFuY2hvckFwcGxldEF0dHJDYW52YXNDYW52YXNHcmFkaWVudENhbnZhc1BhdHRlcm5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDREFUQVNlY3Rpb25DaGFyYWN0ZXJEYXRhQ29tbWVudENTUzJQcm9wZXJ0aWVzQ1NTUnVsZUNTU1N0eWxlU2hlZXREb2N1bWVudERvY3VtZW50RnJhZ21lbnREb2N1bWVudFR5cGVET01FeGNlcHRpb25ET01JbXBsZW1lbnRhdGlvbkRPTVBhcnNlckVsZW1lbnRFdmVudEV4dGVybmFsSW50ZXJmYWNlRmxhc2hQbGF5ZXJGb3JtRnJhbWVIaXN0b3J5SFRNTENvbGxlY3Rpb25IVE1MRG9jdW1lbnRIVE1MRWxlbWVudElGcmFtZUpTT2JqZWN0S2V5RXZlbnRNaW1lVHlwZU1vdXNlRXZlbnROYXZpZ2F0b3JOb2RlTGlzdFBsdWdpblByb2Nlc3NpbmdJbnN0cnVjdGlvblJhbmdlUmFuZ2VFeGNlcHRpb25TY3JlZW5TZWxlY3RUYWJsZVRhYmxlQ2VsbFRhYmxlUm93VGFibGVTZWxlY3Rpb25UZXh0VGV4dEFyZWFVSUV2ZW50V2luZG93WE1MSHR0cFJlcXVlc3RYTUxTZXJpYWxpemVyWFBhdGhFeGNlcHRpb25YUGF0aFJlc3VsdFhTTFRQcm9jZXNzb3JqYXZhbmV0c2NhcGVzdW5KYXZhT2JqZWN0SmF2YUNsYXNzSmF2YUFycmF5SmF2YU1lbWJlcnJlc2VydmVkR2xvYmFsT2JqZWN0TmFtZXNERkdIT1FXWFlacmVzZXJ2ZWRHbG9iYWxIZWxwZXJGdW5jdGlvbnN1c2VyR2xvYmFsT2JqZWN0c19qc1Jlc2VydmVkbGF6eUdldHRlclByZWZpeCRnZXQkc3VwZXJQcmVmaXhzdXBlciRtZXRhZGF0YUZpZWxkc3R1Yk5hbWVGaWVsZCRzdHViTmFtZXJlZmxlY3Rpb25JbmZvRmllbGQkcmVmbGVjdGlvbkluZm9yZWZsZWN0aW9uTmFtZUZpZWxkJHJlZmxlY3Rpb25OYW1lbWV0YWRhdGFJbmRleEZpZWxkJG1ldGFkYXRhSW5kZXhtZXRob2RzV2l0aE9wdGlvbmFsQXJndW1lbnRzRmllbGQkbWV0aG9kc1dpdGhPcHRpb25hbEFyZ3VtZW50c19jYWxsUHJlZml4RG9sbGFyY2FsbCRfbGl0ZXJhbERvbGxhcl9saXRlcmFsVW5kZXJzY29yZWxpdGVyYWxQbHVzX2xpdGVyYWxEeW5hbWljX2xpdGVyYWxHZXR0ZXJQcmVmaXhfbGl0ZXJhbFNldHRlclByZWZpeF9zdGF0aWNzUHJvcGVydHlOYW1lX3J0aUZpZWxkSnNOYW1lbmF0aXZlU3BlY1Byb3BlcnR5XltBLVphLXpfJF1bQS1aYS16MC05XyRdKiROT05fSURFTlRJRklFUl9DSEFSW15BLVphLXpfMC05JF1nbG9iYWxTY29wZXVzZXJHbG9iYWxzdXNlckdsb2JhbHNTZWNvbmROYW1laW50ZXJuYWxHbG9iYWxzaW5zdGFuY2VTY29wZXVzZXJJbnN0YW5jZU1lbWJlcnN1c2VySW5zdGFuY2VNZW1iZXJzT3JpZ2luYWxOYW1laW50ZXJuYWxJbnN0YW5jZU1lbWJlcnN1c2VySW5zdGFuY2VPcGVyYXRvcnN1c2VyR2V0dGVyc3VzZXJTZXR0ZXJzX3R5cGVWYXJpYWJsZU5hbWVzX2NvbnN0YW50U2NvcGVfcHJpdmF0ZU5hbWluZ1Njb3Blc3BvcHVsYXJOYW1lQ291bnRlcnNsaWJyYXJ5TG9uZ05hbWVzX2NvbnN0YW50TmFtZXNfY29uc3RhbnRMb25nTmFtZXNfY29uc3RhbnRIYXNoZXJzaG9ydFByaXZhdGVOYW1lT3duZXJzX2xpYnJhcnlLZXlzX25vbklkZW50aWZpZXJSRVteQS1aYS16MC05XyRdZnVuY3Rpb25UeXBlTmFtZU1hcF9mdW5jdGlvblR5cGVOYW1lcmpzUmVzZXJ2ZWRzdGF0aWNzUHJvcGVydHlOYW1lcnRpTmFtZV9yZWdpc3Rlck5hbWVqc05hbWVvcmlnaW5hbE5hbWVpc0ZpbmFsaXplZGdldHRlck5hbWVzZXR0ZXJOYW1lY3JlYXRlTWluaWZpZWRHbG9iYWxOYW1lTWFwY3JlYXRlTWluaWZpZWRJbnN0YW5jZU5hbWVNYXBfbmF0aXZlRGF0YWRlZmVycmVkTWV0YWRhdGFOYW1lZGVmZXJyZWRNZXRhZGF0YWRlZmVycmVkVHlwZXNOYW1lZGVmZXJyZWRUeXBlc2lzb2xhdGVOYW1laXNvbGF0ZVByb3BlcnRpZXNOYW1lJGlzb2xhdGVQcm9wZXJ0aWVzU1RBVElDX0NMT1NVUkVfTkFNRV9OQU1FJG5hbWVjbG9zdXJlSW52b2NhdGlvblNlbGVjdG9yTmFtZXNob3VsZE1pbmlmeV9nZXRQcml2YXRlU2NvcGVGb3Jyb290T2ZTY29wZV9uZXdSZWZlcmVuY2Vjb25zdGFudE5hbWVsb25nTmFtZWNvbnN0YW50TG9uZ05hbWVnZXRGcmVzaE5hbWVwcml2YXRlTmFtZV9wcm9wb3NlTmFtZUZvckxpYnJhcnlfcHJvcG9zZU5hbWVGb3JDb25zdHJ1Y3RvckJvZHljYWxsU3VmZml4Rm9yU2lnbmF0dXJlY29uc3RydWN0b3JCb2R5TmFtZWN0b3JfZGlzYW1iaWd1YXRlSW50ZXJuYWxNZW1iZXJnZW5lcmF0b3JCb2R5SW5zdGFuY2VNZXRob2ROYW1lb3BlcmF0b3JOYW1lVG9JZGVudGlmaWVyJGJvZHkkZGVyaXZlQ2FsbE1ldGhvZE5hbWVjYWxsUHJlZml4Y2FsbFN1ZmZpeEZvclN0cnVjdHVyZXN1ZmZpeGVzZGlzYW1iaWd1YXRlZE5hbWVfZGlzYW1iaWd1YXRlTWVtYmVyZGVyaXZlR2V0dGVyTmFtZWRlcml2ZVNldHRlck5hbWVvcGVyYXRvcklkZW50aWZpZXJfZGlzYW1iaWd1YXRlT3BlcmF0b3JzcGVjaWFsU2VsZWN0b3JOYW1lVW5leHBlY3RlZCBzZWxlY3RvciBraW5kOiBnZW5lcmljSW5zdGFudGlhdGlvblByZWZpeFVuZXhwZWN0ZWQgc3BlY2lhbCBzZWxlY3RvcjogaW52b2NhdGlvbk1pcnJvckludGVybmFsTmFtZWZpZWxkQWNjZXNzb3JOYW1lX2Rpc2FtYmlndWF0ZUdsb2JhbE1lbWJlcmZpZWxkUHJvcGVydHlOYW1lX2Rpc2FtYmlndWF0ZUdsb2JhbFR5cGVfZ2xvYmFsTmFtZUZvckludGVyZmFjZVR5cGVWYXJpYWJsZWhhc0ZpeGVkQmFja2VuZE5hbWVnZXRGaXhlZEJhY2tlbmROYW1lZGVjbGFyZWROYW1lX2lzU2hhZG93aW5nU3VwZXJGaWVsZF9pc1VzZXJDbGFzc0V4dGVuZGluZ05hdGl2ZWZpZWxkTmFtZW1lbWJlckxpYnJhcnlmb3VuZE1lbWJlcmlzTmF0aXZlT3JFeHRlbmRzTmF0aXZlc2V0dGVyRm9yTWVtYmVyZ2V0dGVyRm9yRWxlbWVudGdldHRlckZvck1lbWJlcl9kaXNhbWJpZ3VhdGVJbnRlcm5hbEdsb2JhbG5ld05hbWVpbnRlcm5hbEdsb2JhbF9nZW5lcmF0ZUxpYnJhcnlLZXlrZXlCYXNlX2Rpc2FtYmlndWF0ZUdsb2JhbF9wcm9wb3NlTmFtZUZvck1lbWJlcl9wcm9wb3NlTmFtZUZvclR5cGVnbG9iYWxzbGlicmFyeUtleXNhbml0aXplRm9yQW5ub3RhdGlvbnNfZGlzYW1iaWd1YXRlTWVtYmVyQnlLZXlyZXNlcnZlUHVibGljTWVtYmVyTmFtZWxpYnJhcnlQcmVmaXhpc1VzZWRyZWdpc3RlclVzZXNhbml0aXplRm9yTmF0aXZlc21heUNsYXNoTmF0aXZlX2dlbmVyYXRlRnJlc2hTdHJpbmdGb3JOYW1lX3Nhbml0aXplRm9yQW5ub3RhdGlvbnNfc2FuaXRpemVGb3JOYXRpdmVzX3Nhbml0aXplRm9yS2V5d29yZHNpc1VudXNlZF9wcm9wb3NlTmFtZUZvckNvbnN0cnVjdG9yJGJvZHlfcHJvcG9zZU5hbWVGb3JMYXp5U3RhdGljR2V0dGVycmVwbGFjZXJyZXBsYWNlQWxsTWFwcGVkbGliX2Rpc2FtYmlndWF0ZWRfZ2V0U3VmZml4Rm9ySW50ZXJjZXB0ZWRDbGFzc2VzemdldEludGVyY2VwdG9yJF9pc1Byb3BlcnR5T2ZTdGF0aWNTdGF0ZUhvbGRlcnN0YXRpY1N0YXRlSG9sZGVyJGNsb3N1cmV1bmlxdWVOYW1lRm9yVHlwZUNvbnN0YW50RWxlbWVudGdsb2JhbE9iamVjdEZvckNvbnN0YW50JGluc3RhbnRpYXRldHlwZXNPZmZzZXROYW1ldHlwZXNPZmZzZXRnZXRGdW5jdGlvblR5cGVOYW1lY29tcHV0ZU5hbWVvcGVyYXRvcklzUHJlZml4b3BlcmF0b3JBc1ByZWZpeCRlcSRub3QkaW5kZXgkaW5kZXhTZXQkbXVsJGRpdiRtb2QkdGRpdiRhZGQkc2hsJHNociRzaHJ1JGdlJGxlJGFuZCR4b3Ikb3IkbmVnYXRlZ2V0VHlwZVJlcHJlc2VudGF0aW9uRm9yVHlwZUNvbnN0YW50KCktPkNvbnN0YW50TmFtaW5nVmlzaXRvck1BWF9GUkFHTUVOVFNNQVhfRVhUUkFfTEVOR1RIREVGQVVMVF9UQUdfTEVOR1RIX2hhc2hlcmZhaWxlZGZyYWdtZW50c192aXNpdENPTlNUQU5UZ2V0SGFzaFRhZ0NfaGFzaFdvcmRnZXRIYXNoMDEyMzQ1Njc4OWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphZGRSb290YWRkSWRlbnRpZmllcmlzRWxpZGVkbWV0aG9kc2R1bW15X2ludGVyY2VwdG9ydW5yZWFjaGFibGVDb25zdGFudENhbm9uaWNhbEhhc2hlcl9NQVNLX1VJTlQzMl9MSU1JVDQyOTQ5NjcyOTZfaGFzaGVzX2hhc2hTdHJpbmdfaGFzaExpc3REdW1teUludGVyY2VwdG9yQ29uc3RhbnRWYWx1ZSBzaG91bGQgbmV2ZXIgYmUgbmFtZWQgYW5kIG5ldmVyIGJlIHN1YmNvbnN0YW50VW5yZWFjaGFibGVDb25zdGFudFZhbHVlIHNob3VsZCBuZXZlciBiZSBuYW1lZCBhbmQgSnNOYW1lQ29uc3RhbnRWYWx1ZSBzaG91bGQgbmV2ZXIgYmUgbmFtZWQgYW5kIF9oYXNoSW50X2hhc2hEb3VibGVtYWduaXR1ZGVzaWduZnJhY3Rpb25fY29tYmluZUZ1bmN0aW9uVHlwZU5hbWVyX2lzU2ltcGxlRnVuY3Rpb25UeXBlTmFtaW5nU2NvcGVfc3VnZ2VzdGVkTmFtZXNfdXNlZE5hbWVzc3VnZ2VzdE5hbWVhZGRTdWdnZXN0aW9uc3VnZ2VzdGlvbmhhc1N1Z2dlc3Rpb25pc1N1Z2dlc3Rpb25GaXhlZE5hbWVzZ2V0JHNldCRjYWxsQ2F0Y2hBbGxOYW1lY2FsbCpjYWxsTmFtZUZpZWxkJGNhbGxOYW1lcmVmbGVjdGFibGVGaWVsZCRyZWZsZWN0YWJsZWNsYXNzRGVzY3JpcHRvclByb3BlcnR5ZGVmYXVsdFZhbHVlc0ZpZWxkJGRlZmF1bHRWYWx1ZXNkZWZlcnJlZEFjdGlvbiRkZWZlcnJlZEFjdGlvbiRpcyRhc29wZXJhdG9yU2lnbmF0dXJlJHNpZ25hdHVyZXJlcXVpcmVkUGFyYW1ldGVyRmllbGQkcmVxdWlyZWRBcmdDb3VudCR0aU1pbmlmaWVkRml4ZWROYW1lc2FzeW5jUHJlZml4JGFzeW5jJF9saXRlcmFsQXN5bmNQcmVmaXhfanNWYXJpYWJsZVJlc2VydmVkQ2FjaGVicmVha0xhYmVsTmFtZWltcGxpY2l0QnJlYWtMYWJlbE5hbWVjb250aW51ZUxhYmVsTmFtZWMkaW1wbGljaXRDb250aW51ZUxhYmVsTmFtZV9qc1ZhcmlhYmxlUmVzZXJ2ZWRnZXROYW1lRm9ySnNHZXROYW1lSnNHZXROYW1lLkdFVFRFUl9QUkVGSVhKc0dldE5hbWUuU0VUVEVSX1BSRUZJWEpzR2V0TmFtZS5DQUxMX1BSRUZJWEpzR2V0TmFtZS5DQUxMX1BSRUZJWDBKc0dldE5hbWUuQ0FMTF9QUkVGSVgxSnNHZXROYW1lLkNBTExfUFJFRklYMkpzR2V0TmFtZS5DQUxMX1BSRUZJWDNKc0dldE5hbWUuQ0FMTF9QUkVGSVg0SnNHZXROYW1lLkNBTExfUFJFRklYNUpzR2V0TmFtZS5DQUxMX0NBVENIX0FMTEpzR2V0TmFtZS5SRUZMRUNUQUJMRUpzR2V0TmFtZS5DTEFTU19ERVNDUklQVE9SX1BST1BFUlRZSnNHZXROYW1lLlJFUVVJUkVEX1BBUkFNRVRFUl9QUk9QRVJUWUpzR2V0TmFtZS5ERUZBVUxUX1ZBTFVFU19QUk9QRVJUWUpzR2V0TmFtZS5DQUxMX05BTUVfUFJPUEVSVFlKc0dldE5hbWUuREVGRVJSRURfQUNUSU9OX1BST1BFUlRZSnNHZXROYW1lLk9QRVJBVE9SX0FTX1BSRUZJWEpzR2V0TmFtZS5TSUdOQVRVUkVfTkFNRUpzR2V0TmFtZS5SVElfTkFNRUpzR2V0TmFtZS5UWVBFREVGX1RBR3R5cGVkZWZUYWdKc0dldE5hbWUuRlVOQ1RJT05fVFlQRV9UQUdmdW5jdGlvblR5cGVUYWdKc0dldE5hbWUuRlVOQ1RJT05fVFlQRV9HRU5FUklDX0JPVU5EU19UQUdmdW5jdGlvblR5cGVHZW5lcmljQm91bmRzVGFnSnNHZXROYW1lLkZVTkNUSU9OX1RZUEVfVk9JRF9SRVRVUk5fVEFHZnVuY3Rpb25UeXBlVm9pZFJldHVyblRhZ0pzR2V0TmFtZS5GVU5DVElPTl9UWVBFX1JFVFVSTl9UWVBFX1RBR2Z1bmN0aW9uVHlwZVJldHVyblR5cGVUYWdKc0dldE5hbWUuRlVOQ1RJT05fVFlQRV9SRVFVSVJFRF9QQVJBTUVURVJTX1RBR2Z1bmN0aW9uVHlwZVJlcXVpcmVkUGFyYW1ldGVyc1RhZ0pzR2V0TmFtZS5GVU5DVElPTl9UWVBFX09QVElPTkFMX1BBUkFNRVRFUlNfVEFHZnVuY3Rpb25UeXBlT3B0aW9uYWxQYXJhbWV0ZXJzVGFnSnNHZXROYW1lLkZVTkNUSU9OX1RZUEVfTkFNRURfUEFSQU1FVEVSU19UQUdmdW5jdGlvblR5cGVOYW1lZFBhcmFtZXRlcnNUYWdKc0dldE5hbWUuRlVUVVJFX09SX1RBR2Z1dHVyZU9yVGFnSnNHZXROYW1lLkZVVFVSRV9PUl9UWVBFX0FSR1VNRU5UX1RBR2Z1dHVyZU9yVHlwZVRhZ0pzR2V0TmFtZS5JU19JTkRFWEFCTEVfRklFTERfTkFNRUpzR2V0TmFtZS5OVUxMX0NMQVNTX1RZUEVfTkFNRUpzR2V0TmFtZS5PQkpFQ1RfQ0xBU1NfVFlQRV9OQU1FSnNHZXROYW1lLkZVTkNUSU9OX0NMQVNTX1RZUEVfTkFNRUpzR2V0TmFtZS5GVVRVUkVfQ0xBU1NfVFlQRV9OQU1FSnNHZXROYW1lLkJPT0xfUkVDSVBFSnNHZXROYW1lLkRPVUJMRV9SRUNJUEVKc0dldE5hbWUuSU5UX1JFQ0lQRUpzR2V0TmFtZS5OVU1fUkVDSVBFSnNHZXROYW1lLlNUUklOR19SRUNJUEVKc0dldE5hbWUuUlRJX0ZJRUxEX0lTRXJyb3I6IE5hbWVyIGhhcyBubyBuYW1lIGZvciAiX3JlZ2lzdHJ5X01pbmlmaWVkRmllbGROYW1lcmZpZWxkUmVnaXN0cnlfbWluaWZpZWRJbnN0YW5jZUZpZWxkUHJvcGVydHlOYW1lYm94Y29udGFpbnNGaWVsZF9GaWVsZE5hbWluZ1JlZ2lzdHJ5Z2xvYmFsTmFtZXNnbG9iYWxDb3VudG5hbWVTdG9yZWN4Y3lkYmR4ZHlmcmZ4Znlnb2sxazJrM2s0cjFyMnJ4cnl4MXgyeTF5MmFsdGFyY0NDV2luMWluMm0xMW0xMm0xM20xNG0yMW0yMm0yM20yNG0zMW0zMm0zM20zNG00MW00Mm00M200NG1heG5vd09ORXJlbHJldlJHQnNkcHNyY3VpZHVybFVSTGFiYnJheGVzYXhpc0JBQ0tiZXRhYmlhc0Jsb2JCTFVSQk9USEJZVEVjaXRlY2xpcGNvbHNjdWVzREVDUkRPTkVmYWNlZm9udGZvcm1nYWluaHJlZkhSVEZJRExFSU5DUklOSVRpc0lkS0VFUGtuZWVsYW5nTEVTU05vbmVOT05Fb25seU9QRU5waW5ncGxheXJlY3RSZWN0cmVmWHJlZllSR0JBcm93c3NhdmVzZWVkc2Vla1NJTkVzdGF0dGFnc3ZpZXd3YXJuWkVST19GaWVsZE5hbWluZ1Njb3Blc3VwZXJTY29wZV9maWVsZE5hbWVDb3VudGVycm9vdFNjb3BlaW5oZXJpdGluaGVyaXRhbmNlQmFzZWRGaWVsZE5hbWVDb3VudGVyX2xvY2FsRmllbGROYW1lQ291bnRlcnZhbGZvckNsYXNzZGVjbGFyZXJmb3JCb3hfaXNOYW1lVW51c2VkX25leHROYW1lX01peGluRmllbGROYW1pbmdTY29wZW1peGVkSW5wcm9wb3NlZF9Cb3hGaWVsZE5hbWluZ1Njb3BlX0ZyZXF1ZW5jeUJhc2VkTmFtZXImTmFtZXImX01pbmlmaWVkRmllbGROYW1lcl9GcmVxdWVuY3lCYXNlZE5hbWVyJk5hbWVyJl9NaW5pZmllZEZpZWxkTmFtZXImX01pbmlmaWVkT25lU2hvdEludGVyY2VwdG9yTmFtZXIkZ2V0JHNldGNhbGxTdWZmaXgkaW50ZXJjZXB0ZWRGcmVxdWVuY3lCYXNlZE5hbWVyX3Rva2VuU2NvcGVzSW5ld1Njb3BlRm9yaWxsZWdhbE5hbWVzaWxsZWdhbHRva2VuU2NvcGVjb21wYXJlUmVmZXJlbmNlQ291bnRfcmNUb2tlblNjb3BlX2luY3JlbWVudFBvc2l0aW9ub3ZlcmZsb3dfaW5jcmVtZW50TmFtZWdldE5leHROYW1lcHJvcG9zYWxfTWluaWZ5TmFtZXImTmFtZXImX01pbmlmaWVkRmllbGROYW1lcl9NaW5pZnlOYW1lciZOYW1lciZfTWluaWZpZWRGaWVsZE5hbWVyJl9NaW5pZnlDb25zdHJ1Y3RvckJvZHlOYW1lcl9jb25zdHJ1Y3RvckJvZHlTY29wZXNjb25zdHJ1Y3RvckJvZHlLZXlGb3JfTWluaWZ5TmFtZXImTmFtZXImX01pbmlmaWVkRmllbGROYW1lciZfTWluaWZ5Q29uc3RydWN0b3JCb2R5TmFtZXImX01pbmlmaWVkT25lU2hvdEludGVyY2VwdG9yTmFtZXJNaW5pZnlOYW1lckFMUEhBQkVUX0NIQVJBQ1RFUlNBTFBIQU5VTUVSSUNfQ0hBUkFDVEVSU19yZXNlcnZlZE5hdGl2ZVByb3BlcnRpZXNfYmFkTmFtZXNyZXNlcnZlQmFja2VuZE5hbWVzZnJlc2hOYW1lX2dldFVudXNlZE5hbWVfcG9wdWxhdGVTdWdnZXN0ZWROYW1lc2FkZCQxJG5lY2xvbmUkMG1vdmVOZXh0JDBzdHlsZW5vU3VjaE1ldGhvZCQxdG9TdHJpbmckMFVuc3VwcG9ydGVkRXJyb3IkQXJndW1lbnRFcnJvciRTdGF0ZUVycm9yJEtleV9LZXlMaXN0X0xpc3QkZnJvbUxpbmtlZEhhc2hNYXBfTGlua2VkSGFzaE1hcCRfZW1wdHlMaW5rZWRIYXNoTWFwX0xpbmtlZEhhc2hNYXAkX2xpdGVyYWxSYW5nZUVycm9yJHZhbHVlc3VnZ2VzdGlvbnNsZXR0ZXJfY2FsY3VsYXRlSGFzaGNvZGVzX2xldHRlck51bWJlcmgyX2FscGhhTnVtZXJpY051bWJlcl9iYWROYW1lX2hhc0Jhbm5lZFByZWZpeDQyOTQ5NjcyOTVzdGFydExldHRlcl9Db25zdHJ1Y3RvckJvZHlOYW1pbmdTY29wZV9zdGFydEluZGV4X2NvbnN0cnVjdG9yc251bWJlck9mQ29uc3RydWN0b3JzZm9yTWl4aW5BcHBsaWNhdGlvbmNvbnN0cnVjdG9yIGJvZHkgbWlzc2luZ0Bjb25zdHJ1Y3RvckJvZHlAX2dldENvbnN0cnVjdG9yTGlzdF9NaW5pZnlDb25zdHJ1Y3RvckJvZHlOYW1lcl9NaW5pZmllZE9uZVNob3RJbnRlcmNlcHRvck5hbWVyX05hbWVyTmFtZU5hbWUoQ2Fubm90IGNvbnZlcnQgYSBuYW1lIHRvIGEgc3RyaW5nX05hbWVyTmFtZUtpbmRzX05hbWVyTmFtZUtpbmRzLlN0cmluZ0JhY2tlZF9OYW1lck5hbWVLaW5kcy5HZXR0ZXJfTmFtZXJOYW1lS2luZHMuU2V0dGVyX05hbWVyTmFtZUtpbmRzLkFzeW5jX05hbWVyTmFtZUtpbmRzLkNvbXBvdW5kX05hbWVyTmFtZUtpbmRzLlRva2VuU3RyaW5nQmFja2VkQ29tcG91bmRTdHJpbmdCYWNrZWROYW1lb3RoZXJOYW1lck5hbWVfUHJlZml4ZWROYW1lb3RoZXJTYW1lS2luZEdldHRlck5hbWVTZXR0ZXJOYW1lQXN5bmNOYW1lQ29tcG91bmROYW1lX3BhcnRzX2NhY2hlZE5hbWVUb2tlbk5hbWVUb2tlbk5hbWUoKSBoYXMgbm90IGJlZW4gZmluYWxpemVkLm90aGVyVG9rZW4pPSBoYXMgYWxyZWFkeSBiZWVuIGZpbmFsaXplZC5fTmFtZVJlZmVyZW5jZXN1ZmZpeEZvckdldEludGVyY2VwdG9yYWJicmV2aWF0ZVR5cGVMb29rdXB0eXBlU3RyaW5nU3BlY2lhbFR5cGVKc09iamVjdD1PYmplY3RVbmtub3duIFNwZWNpYWxUeXBlICdOYXRpdmVUaHJvd0JlaGF2aW9yTkVWRVJNQVlOVUxMX05TTU5VTExfTlNNX1RIRU5fTUFZX2JpdHNpc051bGxOU01HdWFyZG5ldmVybWF5bnVsbCgxKW51bGwoMSkrbWF5TmF0aXZlVGhyb3dCZWhhdmlvcihfYml0c1RvVmFsdWViaXRzTmF0aXZlQmVoYXZpb3JuYXRpdmUtYmVoYXZpb3J0eXBlc1JldHVybmVkdHlwZXNJbnN0YW50aWF0ZWRjb2RlVGVtcGxhdGVUZXh0UFVSRVBVUkVfQUxMT0NBVElPTkNIQU5HRVNfT1RIRVJERVBFTkRTX09USEVScmVhZFR5cGVzc3BlY2lhbENvdW50cGFyc2VGb3JlaWduSlN3cml0ZVR5cGVzc3BlY2lhbFR5cGVzTmF0aXZlQmVoYXZpb3IocmV0dXJuczogLCBjcmVhdGVzOiAsIHNpZGVFZmZlY3RzOiAsIHRocm93czogLCBpc0FsbG9jYXRpb24sIHVzZUd2bl9tYWtlUHVyZV9tYWtlQ2hhbmdlc090aGVyX21ha2VEZXBlbmRzT3RoZXJwcm9jZXNzU3BlY1N0cmluZ3NwZWNTdHJpbmd2YWxpZFRhZ3NzZXRTaWRlRWZmZWN0c3NldFRocm93c3NldElzQWxsb2NhdGlvbmxvb2t1cFR5cGVzZWVuRXJyb3JyZXNvbHZlVHlwZXNTdHJpbmdvblR5cGVvblZhcm9uVm9pZHR5cGVzU3RyaW5nc3BlY3NjcmVhdGVzcmV0dXJuc2RlcGVuZHN0aHJvd3Nndm50YWdBbmRWYWx1ZUludmFsaWQgPHRhZz46PHZhbHVlPiBwYWlyICdEdXBsaWNhdGUgdGFnICdUYWcgJycgaXMgbm90IHZhbGlkIGhlcmUuVW5rbm93biB0YWcgJ3RhZ1ZhbHVlTG9va3VwdGFnU3RyaW5nVW5rbm93biAnJyBzcGVjaWZpY2F0aW9uOiAnSW52YWxpZCB0eXBlIHN0cmluZyAnY3JlYXRlczp0aHJvd3NLaW5kJ25ldycgYW5kICdndm4nIGFyZSBpbmNvbXBhdGlibGVwcm9jZXNzRWZmZWN0cydlZmZlY3RzJyBhbmQgJ2RlcGVuZHMnIG11c3Qgb2NjdXIgdG9nZXRoZXIuc3BsaXRFZmZlY3RzTWlzc2luZyBzaWRlLWVmZmVjdCBmbGFnLmVmZmVjdG5vLWluZGV4Y2xlYXJDaGFuZ2VzSW5kZXhuby1pbnN0YW5jZWNsZWFyQ2hhbmdlc0luc3RhbmNlUHJvcGVydHluby1zdGF0aWNjbGVhckNoYW5nZXNTdGF0aWNQcm9wZXJ0eVVucmVjb2duaXplZCBzaWRlLWVmZmVjdCBmbGFnOiAnc3BsaXREZXBlbmRlbmNpZXNNaXNzaW5nIHNpZGUtZWZmZWN0IGRlcGVuZGVuY3kgZmxhZy5jbGVhckRlcGVuZHNPbkluZGV4U3RvcmVjbGVhckRlcGVuZHNPbkluc3RhbmNlUHJvcGVydHlTdG9yZWNsZWFyRGVwZW5kc09uU3RhdGljUHJvcGVydHlTdG9yZW9mSnNDYWxsY29kZVN0cmluZ3NpZGVFZmZlY3RzQXJlRW5jb2RlZEluU3BlY1N0cmluZ25ld0VmZmVjdHNzZXRUb3Rocm93QmVoYXZpb3JGcm9tU3BlY1N0cmluZ2FuYWx5emVfZmlsbE5hdGl2ZUJlaGF2aW9yT2ZCdWlsdGluT3JFbWJlZGRlZEdsb2JhbG9mSnNCdWlsdGluQ2FsbG9mSnNFbWJlZGRlZEdsb2JhbENhbGxfcGFyc2VUeXBlQmVoYXZpb3JCdWlsZGVyX2JlaGF2aW9yX292ZXJyaWRlV2l0aEFubm90YXRpb25zY3JlYXRlc0Fubm90YXRpb25zcmV0dXJuc0Fubm90YXRpb25zX2VzY2FwZWlzSnNJbnRlcm9wX2NhcHR1cmVidWlsZEZpZWxkTG9hZEJlaGF2aW9yYnVpbGRGaWVsZFN0b3JlQmVoYXZpb3JidWlsZE1ldGhvZEJlaGF2aW9yY3JlYXRlQW5ub3RhdGlvbnNfZ2V0QW5ub3RhdGlvbnNjb25zdHJ1Y3RlZE9iamVjdEFubm90YXRpb25zIG5lZWRzIG9uZSBzdHJpbmc6IHNwZWNTdHJpbmdDb25zdGFudGdldENyZWF0ZXNBbm5vdGF0aW9uc2dldFJldHVybnNBbm5vdGF0aW9uc2NvbXBpbGVyLnVuaXZlcnNlLmZlYXR1cmVGZWF0dXJlRmVhdHVyZS5BQlNUUkFDVF9DTEFTU19JTlNUQU5USUFUSU9ORmVhdHVyZS5BU1NFUlRGZWF0dXJlLkFTU0VSVF9XSVRIX01FU1NBR0VGZWF0dXJlLkFTWU5DRmVhdHVyZS5BU1lOQ19GT1JfSU5GZWF0dXJlLkFTWU5DX1NUQVJGZWF0dXJlLkNBVENIX1NUQVRFTUVOVEZlYXR1cmUuRkFMTF9USFJPVUdIX0VSUk9SRmVhdHVyZS5GSUVMRF9XSVRIT1VUX0lOSVRJQUxJWkVSRmVhdHVyZS5MQVpZX0ZJRUxERmVhdHVyZS5MT0NBTF9XSVRIT1VUX0lOSVRJQUxJWkVSRmVhdHVyZS5MT0FEX0xJQlJBUllGZWF0dXJlLlNUQUNLX1RSQUNFX0lOX0NBVENIRmVhdHVyZS5TVFJJTkdfSU5URVJQT0xBVElPTkZlYXR1cmUuU1RSSU5HX0pVWFRBUE9TSVRJT05GZWF0dXJlLlNVUEVSX05PX1NVQ0hfTUVUSE9ERmVhdHVyZS5TWU1CT0xfQ09OU1RSVUNUT1JGZWF0dXJlLlNZTkNfRk9SX0lORmVhdHVyZS5TWU5DX1NUQVJGZWF0dXJlLlRIUk9XX0VYUFJFU1NJT05GZWF0dXJlLlRIUk9XX05PX1NVQ0hfTUVUSE9ERmVhdHVyZS5USFJPV19SVU5USU1FX0VSUk9SRmVhdHVyZS5USFJPV19VTlNVUFBPUlRFRF9FUlJPUkZlYXR1cmUuVFlQRV9WQVJJQUJMRV9CT1VORFNfQ0hFQ0tBQlNUUkFDVF9DTEFTU19JTlNUQU5USUFUSU9OQVNTRVJUX1dJVEhfTUVTU0FHRUFTWU5DX0ZPUl9JTkNBVENIX1NUQVRFTUVOVEZBTExfVEhST1VHSF9FUlJPUkZJRUxEX1dJVEhPVVRfSU5JVElBTElaRVJMQVpZX0ZJRUxETE9DQUxfV0lUSE9VVF9JTklUSUFMSVpFUkxPQURfTElCUkFSWVNUQUNLX1RSQUNFX0lOX0NBVENIU1RSSU5HX0lOVEVSUE9MQVRJT05TVFJJTkdfSlVYVEFQT1NJVElPTlNVUEVSX05PX1NVQ0hfTUVUSE9EU1lNQk9MX0NPTlNUUlVDVE9SU1lOQ19GT1JfSU5USFJPV19FWFBSRVNTSU9OVEhST1dfTk9fU1VDSF9NRVRIT0RUSFJPV19SVU5USU1FX0VSUk9SVEhST1dfVU5TVVBQT1JURURfRVJST1JUWVBFX1ZBUklBQkxFX0JPVU5EU19DSEVDS01hcExpdGVyYWxVc2VNYXBMaXRlcmFsVXNlKCxpc0NvbnN0YW50Oixpc0VtcHR5OlNldExpdGVyYWxVc2VTZXRMaXRlcmFsVXNlKExpc3RMaXRlcmFsVXNlTGlzdExpdGVyYWxVc2UoUnVudGltZVR5cGVVc2Vhcmd1bWVudFR5cGVSdW50aW1lVHlwZVVzZUtpbmQuc3RyaW5nc3RyaW5nOlJ1bnRpbWVUeXBlVXNlS2luZC5lcXVhbHNlcXVhbHM6UnVudGltZVR5cGVVc2VLaW5kLnVua25vd251bmtub3duOlJ1bnRpbWVUeXBlVXNlKGtpbmQ9LHJlY2VpdmVyPSxhcmd1bWVudD1HZW5lcmljSW5zdGFudGlhdGlvbmdlbmVyaWMtaW5zdGFudGlhdGlvbkdlbmVyaWNJbnN0YW50aWF0aW9uKGZ1bmN0aW9uVHlwZTp0eXBlQXJndW1lbnRzOmRhcnQyanMudW5pdmVyc2UudXNlU3Ryb25nTW9kZUNvbnN0cmFpbnRJTlZPS0VkeW5hbWljLXVzZV90eXBlQXJndW1lbnRzVHlwZSBhcmd1bWVudCBjb3VudCBtaXNtYXRjaC4gU2VsZWN0b3IgaGFzICBidXQgIHdlcmUgcGFzc2VkLmhhc0NvbnN0cmFpbnRVbnN1cHBvcnRlZCByZWNlaXZlciBjb25zdHJhaW50OiBpc1RoaXN0aGlzOmV4YWN0OlNUQVRJQ19URUFSX09GRlNVUEVSX1RFQVJfT0ZGU1VQRVJfRklFTERfU0VUU1VQRVJfR0VUU1VQRVJfU0VUVEVSX1NFVFNVUEVSX0lOVk9LRUlOU1RBTkNFX0ZJRUxEX0dFVElOU1RBTkNFX0ZJRUxEX1NFVENMT1NVUkVDTE9TVVJFX0NBTExDQUxMX01FVEhPRENPTlNUUlVDVE9SX0lOVk9LRUNPTlNUX0NPTlNUUlVDVE9SX0lOVk9LRURJUkVDVF9JTlZPS0VJTkxJTklOR1NUQVRJQ19JTlZPS0VTVEFUSUNfR0VUU1RBVElDX1NFVEZJRUxEX0lOSVRGSUVMRF9DT05TVEFOVF9JTklUc3RhdGljLXVzZV9jaGVja0dlbmVyaWNJbnZhcmlhbnRzVHlwZSBhcmd1bWVudCBjb3VudCBtaXNtYXRjaC4gQ2FsbCBzdHJ1Y3R1cmUgaGFzICB3ZXJlIHBhc3NlZCBpbiBVbnN1cHBvcnRlZCBlbnRpdHk6IGluaXQ6ZGVmOnN0YXRpY0ludm9rZVN0YXRpYyBpbnZva2UgZWxlbWVudCAgbXVzdCBiZSBhIHRvcC1sZXZlbCBvciBzdGF0aWMgbWV0aG9kLlN0YXRpYyBnZXQgZWxlbWVudCAgbXVzdCBiZSBhIGZ1bmN0aW9uLk5vdCBDYWxsU3RydWN0dXJlIGZvciBzdGF0aWMgaW52b2NhdGlvbiBvZiBlbGVtZW50IHN0YXRpY1RlYXJPZmZTdGF0aWMgdGVhci1vZmYgZWxlbWVudCBzdGF0aWNHZXRvciBzdGF0aWMgZmllbGQgb3IgZ2V0dGVyLiBtdXN0IGJlIGEgZmllbGQgb3IgYSBnZXR0ZXIuc3RhdGljU2V0U3RhdGljIHNldCBlbGVtZW50IG11c3QgYmUgYSB0b3AtbGV2ZWwgb3Igc3RhdGljIG1ldGhvZC4gbXVzdCBiZSBhIGZpZWxkIG9yIGEgc2V0dGVyLnN0YXRpY0luaXRTdGF0aWMgaW5pdCBlbGVtZW50ICBtdXN0IGJlIGEgZmllbGQuc3VwZXJJbnZva2VTdXBlciBpbnZva2UgZWxlbWVudCAgbXVzdCBiZSBhbiBpbnN0YW5jZSBtZXRob2QuTm90IENhbGxTdHJ1Y3R1cmUgZm9yIHN1cGVyIGludm9jYXRpb24gb2YgZWxlbWVudCBzdXBlckdldFN1cGVyIGdldCBlbGVtZW50IHN1cGVyRmllbGRTZXRTdXBlciBzZXQgZWxlbWVudCBzdXBlclNldHRlclNldCBtdXN0IGJlIGEgc2V0dGVyLnN1cGVyVGVhck9mZnN1cGVyQ29uc3RydWN0b3JJbnZva2VDb25zdHJ1Y3RvciBpbnZva2UgZWxlbWVudCAgbXVzdCBiZSBhIGdlbmVyYXRpdmUgY29uc3RydWN0b3IuTm90IENhbGxTdHJ1Y3R1cmUgZm9yIHN1cGVyIGNvbnN0cnVjdG9yIGludm9jYXRpb24gb2YgZWxlbWVudCBjb25zdHJ1Y3RvckJvZHlJbnZva2VOb3QgQ2FsbFN0cnVjdHVyZSBmb3IgY29uc3RydWN0b3IgYm9keSBpbnZvY2F0aW9uIG9mIGVsZW1lbnQgZ2VuZXJhdG9yQm9keUludm9rZWRpcmVjdEludm9rZURpcmVjdCBpbnZva2UgZWxlbWVudCAgbXVzdCBiZSBhbiBpbnN0YW5jZSBtZW1iZXIuIG11c3QgYmUgYSBtZXRob2QuZGlyZWN0R2V0RGlyZWN0IGdldCBlbGVtZW50IGRpcmVjdFNldERpcmVjdCBzZXQgZWxlbWVudCBjb25zdHJ1Y3Rvckludm9rZUNvbnN0cnVjdG9yIGludm9jYXRpb24gZWxlbWVudCAgbXVzdCBiZSBhIGNvbnN0cnVjdG9yLk5vdCBDYWxsU3RydWN0dXJlIGZvciBjb25zdHJ1Y3RvciBpbnZvY2F0aW9uIG9mIGVsZW1lbnQgdHlwZWRDb25zdHJ1Y3Rvckludm9rZU5vIHR5cGUgcHJvdmlkZWQgZm9yIGNvbnN0cnVjdG9yIGludm9jYXRpb24uVHlwZWQgY29uc3RydWN0b3IgaW52b2NhdGlvbiBlbGVtZW50IG11c3QgYmUgYSBjb25zdHJ1Y3Rvci5jb25zdENvbnN0cnVjdG9ySW52b2tlQ29uc3QgY29uc3RydWN0b3IgaW52b2NhdGlvbiBlbGVtZW50IGZpZWxkSW5pdEZpZWxkIGluaXQgZWxlbWVudCAgbXVzdCBiZSBhbiBpbnN0YW5jZSBmaWVsZC5maWVsZENvbnN0YW50SW5pdGZpZWxkR2V0IG11c3QgYmUgYW4gaW5zdGFuY2Ugb3IgYm94ZWQgZmllbGQuZmllbGRTZXRjbG9zdXJlQ2FsbGltcGxpY2l0SW52b2tlY29uc3RydWN0b3JJbmxpbmluZ21ldGhvZElubGluaW5nU3RhdGljVXNlKElTX0NIRUNLQVNfQ0FTVENBVENIX1RZUEVOQVRJVkVfSU5TVEFOVElBVElPTkNPTlNUX0lOU1RBTlRJQVRJT05JTVBMSUNJVF9DQVNUUEFSQU1FVEVSX0NIRUNLUlRJX1ZBTFVFVFlQRV9BUkdVTUVOVHR5cGUtdXNlaXM6YXM6Y2F0Y2g6bGl0Omluc3Q6Y29uc3Q6bmF0aXZlOmltcGw6cGFyYW06cnRpOnR5cGVBcmc6YXNDYXN0cGFyYW1ldGVyQ2hlY2tpbXBsaWNpdENhc3RjYXRjaFR5cGVjb25zdEluc3RhbnRpYXRpb25uYXRpdmVJbnN0YW50aWF0aW9uY29uc3RUeXBlTGl0ZXJhbGluc3RhbmNlQ29uc3RydWN0b3JUeXBlVXNlKGNvbnN0YW50LXVzZWN1c3RvbUVsZW1lbnRzQ29uc3RhbnRVc2UoZGFydDJqcy51dGlsLmVudW1zZXRFbnVtU2V0ZnJvbVZhbHVlZml4ZWRmcm9tVmFsdWVzbWludXNiaXRMZW5ndGgxX0VudW1TZXRfQ29uc3RFbnVtU2V0RW51bVNldC52YWx1ZT1FbnVtU2V0LmFkZEVudW1TZXQuYWRkQWxsRW51bVNldC5jbGVhckVudW1TZXQucmVtb3ZlRW51bVNldC5yZW1vdmVBbGxfRW51bVNldEl0ZXJhYmxlX2VudW1TZXRfdmFsdWVzX0VudW1TZXRJdGVyYXRvcl9tYXNrZGFydDJqcy5lbGVtZW50cy5uYW1lc2lzQWNjZXNzaWJsZUZyb21pc1NpbWlsYXJUb3NpbWlsYXJIYXNoQ29kZWlzUHJpdmF0ZU5hbWVpc1B1YmxpY05hbWVQcml2YXRlTmFtZWRhcnQyanMuY2FsbF9zdHJ1Y3R1cmVjYWxsLXN0cnVjdHVyZU5PX0FSR1NPTkVfQVJHVFdPX0FSR1NUSFJFRV9BUkdTRk9VUl9BUkdTdW5uYW1lZHdpdGhUeXBlQXJndW1lbnRDb3VudGlzVW5uYW1lZGFyaXR5PSwgdHlwZXM9Q2FsbFN0cnVjdHVyZShjYWxsU2VsZWN0b3JvcHRpb25hbFBhcmFtZXRlckNvdW50bmFtZUluZGV4c2FtZU5hbWVzTmFtZWRDYWxsU3RydWN0dXJlX29yZGVyZWROYW1lZEFyZ3VtZW50cywgbmFtZWQ9W2RhcnQyanMuY29uc3RhbnRfc3lzdGVtT3BlcmF0aW9uVW5hcnlPcGVyYXRpb25CaW5hcnlPcGVyYXRpb25CaXROb3RPcGVyYXRpb25pbnRDb25zdGFudE5lZ2F0ZU9wZXJhdGlvbl9mb2xkZG91YmxlQ29uc3RhbnROb3RPcGVyYXRpb25CaW5hcnlCaXRPcGVyYXRpb25sZWZ0SW50cmlnaHRJbnRyZXN1bHRWYWx1ZWZvbGRJbnRzQml0QW5kT3BlcmF0aW9uQml0T3JPcGVyYXRpb25CaXRYb3JPcGVyYXRpb25TaGlmdExlZnRPcGVyYXRpb25TaGlmdFJpZ2h0T3BlcmF0aW9udHJ1bmNhdGVkVmFsdWVTSUdOX0JJVEJpbmFyeUJvb2xPcGVyYXRpb25sZWZ0Qm9vbHJpZ2h0Qm9vbGZvbGRCb29sc0Jvb2xlYW5BbmRPcGVyYXRpb25Cb29sZWFuT3JPcGVyYXRpb25Bcml0aG1ldGljTnVtT3BlcmF0aW9ubGVmdE51bXJpZ2h0TnVtZm9sZGVkVmFsdWVmb2xkTnVtc2lzRGl2aWRlaXNUcnVuY2F0aW5nRGl2aWRlU3VidHJhY3RPcGVyYXRpb25NdWx0aXBseU9wZXJhdGlvbk1vZHVsb09wZXJhdGlvblJlbWFpbmRlck9wZXJhdGlvblRydW5jYXRpbmdEaXZpZGVPcGVyYXRpb25yYXRpb3RydW5jYXRlRGl2aWRlT3BlcmF0aW9uQWRkT3BlcmF0aW9ubGVmdFN0cmluZ3JpZ2h0U3RyaW5nUmVsYXRpb25hbE51bU9wZXJhdGlvbkxlc3NPcGVyYXRpb25MZXNzRXF1YWxPcGVyYXRpb25HcmVhdGVyT3BlcmF0aW9uR3JlYXRlckVxdWFsT3BlcmF0aW9uRXF1YWxzT3BlcmF0aW9uSWRlbnRpdHlPcGVyYXRpb25sZWZ0RG91YmxlcmlnaHREb3VibGVJZk51bGxPcGVyYXRpb25Db2RlVW5pdEF0T3BlcmF0aW9uY2hhckNvZGVBdHN0cmluZ0NvbnN0YW50aW5kZXhDb25zdGFudFJvdW5kT3BlcmF0aW9ucm91bmR0cnlUb1JvdW5kcm91bmRlZHJvdW5kVG9Eb3VibGVyb3VuZGVkMTFlLTEzcm91bmRlZDIxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOFVuZm9sZGVkVW5hcnlPcGVyYXRpb25KYXZhU2NyaXB0U2V0Q29uc3RhbnRKYXZhU2NyaXB0TWFwQ29uc3RhbnRQUk9UT19QUk9QRVJUWURBUlRfQ0xBU1NEQVJUX1NUUklOR19DTEFTU0RBUlRfUFJPVE9fQ0xBU1NEQVJUX0dFTkVSQUxfQ0xBU1NMRU5HVEhfTkFNRUpTX09CSkVDVF9OQU1FX2pzT2JqZWN0S0VZU19OQU1FX2tleXNQUk9UT19WQUxVRV9wcm90b1ZhbHVlSlNfREFUQV9OQU1FX2pzRGF0YV9CSVRTMzJiaXRBbmRiaXROb3RiaXRPcmJpdFhvcmJvb2xlYW5BbmRib29sZWFuT3JncmVhdGVyRXF1YWxncmVhdGVyaWRlbnRpdHlpZk51bGxsZXNzRXF1YWxsZXNzc2hpZnRMZWZ0c2hpZnRSaWdodF9pbnRlZ2VyQmVjb21lc05hbk9ySW5maW5pdHlfY29udmVydFRvSmF2YVNjcmlwdENvbnN0YW50Zmxvb3JWYWx1ZWRvdWJsZVJlc3VsdHRydW5jYXRlZGNyZWF0ZUludGNyZWF0ZUludEZyb21JbnRfY3JlYXRlSW50MzJjcmVhdGVEb3VibGVjcmVhdGVTdHJpbmdjcmVhdGVCb29sY3JlYXRlTnVsbGNyZWF0ZUxpc3RjcmVhdGVUeXBlY3JlYXRlU2V0bnVsbHNjcmVhdGVNYXBrZXlzVHlwZWtleXNMaXN0Y3JlYXRlU3ltYm9sbG9va3VwVW5hcnlsb29rdXBCaW5hcnlqc19iYWNrZW5kLm5hdGl2ZV9kYXRhZ2V0TmF0aXZlVGFnc09mQ2xhc3NoYXNOYXRpdmVUYWdzRm9yY2VkTm9uTGVhZmlzSnNJbnRlcm9wVXNlZGlzSnNJbnRlcm9wTGlicmFyeWlzSnNJbnRlcm9wTWVtYmVyaXNOYXRpdmVNZW1iZXJnZXROYXRpdmVNZXRob2RCZWhhdmlvcmdldE5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yZ2V0TmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yZ2V0Rml4ZWRCYWNrZW5kTWV0aG9kUGF0aGdldEpzSW50ZXJvcExpYnJhcnlOYW1laXNBbm9ueW1vdXNKc0ludGVyb3BDbGFzc2dldEpzSW50ZXJvcENsYXNzTmFtZWdldEpzSW50ZXJvcE1lbWJlck5hbWVjb21wdXRlVW5lc2NhcGVkSlNJbnRlcm9wTmFtZU5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXJzZXROYXRpdmVDbGFzc1RhZ0luZm90YWdJbmZvbWFya0FzSnNJbnRlcm9wTGlicmFyeW1hcmtBc0pzSW50ZXJvcENsYXNzaXNBbm9ueW1vdXNtYXJrQXNKc0ludGVyb3BNZW1iZXJzZXROYXRpdmVNZXRob2RCZWhhdmlvcnNldE5hdGl2ZUZpZWxkTG9hZEJlaGF2aW9yc2V0TmF0aXZlRmllbGRTdG9yZUJlaGF2aW9yc2V0TmF0aXZlTWVtYmVyTmFtZU5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXJJbXBsbmF0aXZlQ2xhc3NUYWdJbmZvanNJbnRlcm9wTGlicmFyaWVzanNJbnRlcm9wQ2xhc3Nlc2Fub255bW91c0pzSW50ZXJvcENsYXNzZXNqc0ludGVyb3BNZW1iZXJzdGFnVGV4dE5hdGl2ZUJhc2ljRGF0YUJ1aWxkZXIgaXMgY2xvc2VkLiBUcnlpbmcgdG8gbWFyayAgYXMgYSBuYXRpdmUgY2xhc3MuTmF0aXZlIHRhZyBpbmZvIHNldCBpbmNvbnNpc3RlbnRseSBvbiBFeGlzdGluZyB0YWcgaW5mbyAnbmV3IHRhZyBpbmZvICcgYXMgYSBqcy1pbnRlcm9wIGxpYnJhcnkuIGFzIGEganMtaW50ZXJvcCBjbGFzcy4gYXMgYSBqcy1pbnRlcm9wIG1lbWJlci5yZW9wZW5Gb3JUZXN0aW5nTmF0aXZlQmFzaWNEYXRhSW1wbG5hdGl2ZS1iYXNpYy1kYXRhZnJvbUlyZm9yRWFjaE5hdGl2ZUNsYXNzZm9yRWFjaEpzSW50ZXJvcExpYnJhcnlmb3JFYWNoSnNJbnRlcm9wQ2xhc3Nmb3JFYWNoSnNJbnRlcm9wTWVtYmVyaXNOb25MZWFmX2lzSnNJbnRlcm9wTWVtYmVyTmF0aXZlRGF0YUJ1aWxkZXJJbXBsbmF0aXZlTWVtYmVyTmFtZW5hdGl2ZU1ldGhvZEJlaGF2aW9ybmF0aXZlRmllbGRMb2FkQmVoYXZpb3JuYXRpdmVGaWVsZFN0b3JlQmVoYXZpb3JOYXRpdmUgbWVtYmVyIG5hbWUgc2V0IGluY29uc2lzdGVudGx5IG9uIEV4aXN0aW5nIG5hbWUgJ25ldyBuYW1lICdOYXRpdmVEYXRhSW1wbG5hdGl2ZS1kYXRhX2pzSW50ZXJvcEVzY2FwZVByZWZpeEpTJGZvckVhY2hOYXRpdmVNZXRob2REYXRhZ2V0TmF0aXZlQmVoYXZpb3JGb3JNZXRob2Rmb3JFYWNoTmF0aXZlRmllbGREYXRhZ2V0TmF0aXZlQmVoYXZpb3JGb3JGaWVsZExvYWRnZXROYXRpdmVCZWhhdmlvckZvckZpZWxkU3RvcmVfanNDbGFzc05hbWVIZWxwZXJfanNNZW1iZXJOYW1lSGVscGVyX2pzTGlicmFyeU5hbWVIZWxwZXJqc0ludGVyb3BOYW1lIGlzIGpzIGludGVyb3AgYnV0IGpzIGludGVyb3AgbmFtZSBoYXMgbm90IHlldCBiZWVuIGNvbXB1dGVkLl9maXhlZEJhY2tlbmRDbGFzc1BhdGhObyBuYXRpdmUgbWV0aG9kIGJlaGF2aW9yIGhhcyBiZWVuIGNvbXB1dGVkIGZvciBObyBuYXRpdmUgZmllbGQgbG9hZCBiZWhhdmlvciBoYXMgYmVlbiBjb21wdXRlZCBmb3IgTm8gbmF0aXZlIGZpZWxkIHN0b3JlIGJlaGF2aW9yIGhhcyBiZWVuIGNvbXB1dGVkIGZvciBOYXRpdmVDbGFzc1RhZyFub25sZWFmZGFydDJqcy5qc19tb2RlbC5sb2NhbHNHbG9iYWxMb2NhbHNNYXBnbG9iYWwtbG9jYWxzLW1hcF9sb2NhbHNNYXBzbWFwQ291bnRsb2NhbHNNYXByZXZlcnNlTWFwZ2V0TG9jYWxzTWFwc2V0TG9jYWxzTWFwTm8gbWVtYmVyIHByb3ZpZGVkLkxvY2FscyBtYXAgYWxyZWFkeSBjcmVhdGVkIGZvciBLZXJuZWxUb0xvY2Fsc01hcEltcGxsb2NhbHMtbWFwX2N1cnJlbnRNZW1iZXJfbG9jYWxzX3ZhcmlhYmxlTWFwX2p1bXBUYXJnZXRNYXBfYnJlYWtzQXNDb250aW51ZWxvY2Fsc0NvdW50aXNSZWd1bGFyUGFyYW1ldGVycmVnaXN0ZXJCeUluZGV4anVtcENvdW50cmV2ZXJzZWRNYXBfZW5zdXJlSnVtcE1hcGp1bXBUYXJnZXRNYXBicmVha3NBc0NvbnRpbnVlZ2V0SnVtcFRhcmdldEZvckJyZWFrTm8gdGFyZ2V0IGZvciBnZW5lcmF0ZUNvbnRpbnVlRm9yQnJlYWtnZXRKdW1wVGFyZ2V0Rm9yQ29udGludWVTd2l0Y2hnZXRKdW1wVGFyZ2V0Rm9yU3dpdGNoQ2FzZWdldEp1bXBUYXJnZXRGb3JEb2dldEp1bXBUYXJnZXRGb3JMYWJlbGdldEp1bXBUYXJnZXRGb3JTd2l0Y2hnZXRKdW1wVGFyZ2V0Rm9yRm9yZ2V0SnVtcFRhcmdldEZvckZvckluZ2V0SnVtcFRhcmdldEZvcldoaWxlZ2V0TG9jYWxWYXJpYWJsZXJlZ2lzdGVyZ2V0TG9jYWxUeXBlVmFyaWFibGVnZXRUeXBlVmFyaWFibGVUeXBlZ2V0RnVuY3Rpb25Ob2RlRm9yUGFyYW1ldGVyZ2V0RGF0YWdldExvY2FsVHlwZWdldERhcnRUeXBlSnVtcFZpc2l0b3JqdW1wSW5kZXhfZ2V0SnVtcFRhcmdldGlzU3dpdGNoaXNTd2l0Y2hDYXNlX2dldE9yQ3JlYXRlTGFiZWxhZGRMYWJlbGNhbkJlQnJlYWtUYXJnZXRjYW5CZUNvbnRpbnVlVGFyZ2V0bmVlZHNMYWJlbEpKdW1wVGFyZ2V0anVtcC10YXJnZXRfbGFiZWxzZGVmaW5pdGlvbmxhYmVsRGVmaW5pdGlvbkpKdW1wVGFyZ2V0KG1lbWJlckNvbnRleHQ9LG5lc3RpbmdMZXZlbD0saXNCcmVha1RhcmdldD0saXNDb250aW51ZVRhcmdldD0sbGFiZWxzPUpMYWJlbERlZmluaXRpb25KTGFiZWxEZWZpbml0aW9uKCxsYWJlbE5hbWU9SkxvY2FsTG9jYWxEYXRhZm9yRWFjaE9yZGVyZWRQYXJhbWV0ZXJBc0xvY2FsY29tcGlsZXIuc3JjLmtlcm5lbC5kYXJ0MmpzX3RhcmdldGRhcnQ6X2Nocm9tZWRhcnQ6X2ZvcmVpZ25faGVscGVyZGFydDpfanNfZW1iZWRkZWRfbmFtZXNkYXJ0Ol9qc19oZWxwZXJkYXJ0Ol9qc19uYW1lc2RhcnQ6aHRtbF9jb21tb25kYXJ0OmluZGV4ZWRfZGJkYXJ0OmlvZGFydDpqc191dGlsZGFydDp3ZWJfYXVkaW9kYXJ0OndlYl9nbGRhcnQ6d2ViX3NxbERhcnQyanNDb25zdGFudHNCYWNrZW5kX2FsbG93ZWREYXJ0U2NoZW1lUGF0aHNqc191dGlsX3JlcXVpcmVkTGlicmFyaWVzbWF5YmVFbmFibGVOYXRpdmVhbGxvd2VkVGVzdExpYnJhcnl0ZXN0cy9jb21waWxlci9kYXJ0MmpzX25hdGl2ZXRlc3RzL2NvbXBpbGVyL2RhcnQyanNfZXh0cmFnZW5lcmF0ZWRfdGVzdHMvZGFydDJqc19uYXRpdmUvbmF0aXZlX3Rlc3RhbGxvd2VkRGFydExpYnJhcnlLTGlicmFyeWs6bGlicmFyeShLQ2xhc3NjbGFzcyhLVHlwZWRlZnR5cGVkZWYoS01lbWJlcl9pc1N0YXRpY0tGdW5jdGlvbktDb25zdHJ1Y3RvcktHZW5lcmF0aXZlQ29uc3RydWN0b3JLRmFjdG9yeUNvbnN0cnVjdG9yS01ldGhvZEtHZXR0ZXJLU2V0dGVyS0ZpZWxkS1R5cGVWYXJpYWJsZXR5cGVfdmFyaWFibGUoZXhlY3V0YWJsZUNvbnRleHRsb2NhbF9mdW5jdGlvbktMb2NhbFR5cGVWYXJpYWJsZWxvY2FsX3R5cGVfdmFyaWFibGUoa0VsZW1lbnRQcmVmaXhkYXJ0MmpzX2luZm8uaW5mb0luZm9CYXNpY0luZm9Db2RlSW5mb0FsbEluZm9taW5vclZlcnNpb252aXNpdEFsbFByb2dyYW1JbmZvSW5mb0tpbmQubGlicmFyeU91dHB1dFVuaXRJbmZvSW5mb0tpbmQub3V0cHV0VW5pdHZpc2l0T3V0cHV0Q2xhc3NJbmZvSW5mb0tpbmQuY2xhenpDb2RlU3BhbkNvbnN0YW50SW5mb0luZm9LaW5kLmNvbnN0YW50X0ZpZWxkSW5mbyZCYXNpY0luZm8mQ29kZUluZm9JbmZvS2luZC5maWVsZFR5cGVkZWZJbmZvSW5mb0tpbmQudHlwZWRlZl9GdW5jdGlvbkluZm8mQmFzaWNJbmZvJkNvZGVJbmZvRnVuY3Rpb25JbmZvVE9QX0xFVkVMX0ZVTkNUSU9OX0tJTkRDTE9TVVJFX0ZVTkNUSU9OX0tJTkRNRVRIT0RfRlVOQ1RJT05fS0lORENPTlNUUlVDVE9SX0ZVTkNUSU9OX0tJTkRJbmZvS2luZC5mdW5jdGlvbkNsb3N1cmVJbmZvSW5mb0tpbmQuY2xvc3VyZXZpc2l0Q2xvc3VyZVBhcmFtZXRlckluZm9GdW5jdGlvbk1vZGlmaWVyc0luZm9LaW5kSW5mb1Zpc2l0b3JSZWN1cnNpdmVJbmZvVmlzaXRvcmtpbmRUb1N0cmluZ2tpbmRGcm9tU3RyaW5nSnNvblRvQWxsSW5mb0NvbnZlcnRlcnBhcnNlTGlicmFyeXBhcnNlRnVuY3Rpb25wYXJzZUNsb3N1cmVwYXJzZUZpZWxkcGFyc2VDb25zdGFudGhvbGRpbmdwYXJzZU91dHB1dFVuaXRwYXJzZVByb2dyYW1kZWZlcnJlZEZpbGVzTWFwaW1wb3J0TWFwcGFyc2VJZHBhcnNlQ29kZXByb2dyYW1JbmZvX3BhcnNlRHVyYXRpb25taWNyb3NlY29uZHNob3Vyc21pbnV0ZXN0b3RhbE1pbGxpc3BhcnNlUGFyYW1ldGVycGFyc2VNb2RpZmllcnNzZXJpYWxpemVkSWRmdW5jdGlvbi9jbG9zdXJlL2xpYnJhcnkvY2xhc3MvZmllbGQvY29uc3RhbnQvdHlwZWRlZi9vdXRwdXRVbml0L2pzb25Db2RlQWxsSW5mb1RvSnNvbkNvbnZlcnRlcmlkc3VzZWRJZHNpZEZvcnVzZUxpYnJhcnlVcmlmb3JJZF92aXNpdExpc3RfdmlzaXRBbGxJbmZvRWxlbWVudHNqc29uTGlicmFyaWVzanNvbkNsYXNzZXNqc29uRnVuY3Rpb25zanNvblR5cGVkZWZzanNvbkZpZWxkc2pzb25Db25zdGFudHNqc29uQ2xvc3VyZXNfdmlzaXREZXBlbmRlbmN5SW5mb192aXNpdEFsbEluZm9Ib2xkaW5nX3Zpc2l0QWxsSW5mb0RlcGVuZGVuY2llc2pzb25Ib2xkaW5nanNvbkRlcGVuZGVuY2llc2R1bXBfdmVyc2lvbmR1bXBfbWlub3JfdmVyc2lvbl92aXNpdEJhc2ljSW5mb19zZXJpYWxpemVDb2RlX3Zpc2l0RnVuY3Rpb25Nb2RpZmllcnNtb2RzX3Zpc2l0UGFyYW1ldGVySW5mb0FsbEluZm9Kc29uQ29kZWNJZF90b1NvcnRlZFNlcmlhbGl6ZWRJZHNnZXRJZHdyaXRlRGF0ZWRhdGV0b0lzbzg2MDFTdHJpbmd3cml0ZUR1cmF0aW9ud3JpdGVJbmZvV2l0aEtpbmR3cml0ZURlcGVuZGVuY2llc193cml0ZURlcGVuZGVuY3lJbmZvX3dyaXRlT3V0cHV0T3JOdWxsX3Zpc2l0Q29kZVNwYW5fd3JpdGVDb25zdGFudE9yTnVsbEJpbmFyeVJlYWRlcnJlYWREYXRlcmVhZER1cmF0aW9ucmVhZEluZm9XaXRoS2luZHJlYWRGdW5jdGlvbnJlYWRPdXRwdXRyZWFkQ2xvc3VyZXdhcm5pbmc6IGRhdGEgd2FzIGVuY29kZWQgd2l0aCBmb3JtYXQgdmVyc2lvbiAsIGJ1dCBkZWNvZGVkIHdpdGggcmVhZERlcGVuZGVuY2llc19yZWFkRGVwZW5kZW5jeUluZm9kZXBlbmRlbmNpZXNUb3RhbHJlYWRQcm9ncmFtX3JlYWRCYXNpY0luZm9fcmVhZE91dHB1dE9yTnVsbF9yZWFkQ29kZVNwYW5fcmVhZENvbnN0YW50T3JOdWxsaGFzT3V0cHV0X3JlYWRGdW5jdGlvbk1vZGlmaWVyc19yZWFkUGFyYW1ldGVySW5mb19zdGF0aWNNYXNrX2NvbnN0TWFza19mYWN0b3J5TWFza19leHRlcm5hbE1hc2tKRmllbGRfY2xhc3NEYXRhX3N0YXRpY0ZpZWxkRGF0YWtlcm5lbFN0cmF0ZWd5Z2V0Q2xhc3NOb2RlZmllbGRFbGVtZW50Z2V0RmllbGRnZXRDb25zdGFudFZhbHVlcmVxdWlyZUNvbnN0YW50aW1wbGljaXROdWxsY29uc3RydWN0b3JFbGVtZW50aW5pdGlhbGl6ZXJWYWx1ZUluaXRpYWxpemVyS2luZC5jb21wbGV4Y29uc3RhbnRWYWx1ZWNvbXBsZXhpdHlnZXRBbGxvY2F0b3JEYXRhRm9yVGVzdGluZ2dldFN0YXRpY0ZpZWxkRGF0YUZvclRlc3RpbmdDbGFzc0RhdGFTdGF0aWNGaWVsZERhdGFoYXNEZXBlbmRlbmNpZXNBbGxvY2F0b3JEYXRhQWxsb2NhdG9yRGF0YShpbml0aWFsVmFsdWU9aW5pdGlhbGl6ZXJzPUluaXRpYWxpemVyS2luZEluaXRpYWxpemVyS2luZC5kaXJlY3RJbml0aWFsaXplcktpbmQucG9zaXRpb25hbEluaXRpYWxpemVyS2luZC5uYW1lZGNvbXBsZXhVbmV4cGVjdGVkIGtpbmQgZmllbGQtYW5hbHlzaXNfZmllbGREYXRhY2FuQmVFbGlkZWRoYXNOb0VsaXNpb25rRmllbGRqRmllbGR0b0JhY2tlbmRNZW1iZXJpc1Rvb0NvbXBsZXhpbmNsdWRlSW5pdGlhbFZhbHVlaW5pdGlhbENvbnN0YW50c2luQWxsQ29uc3RydWN0b3JzY29uc3RydWN0b3JVc2FnZWludm9rZWRQYXJhbWV0ZXJzdG9CYWNrZW5kQ29uc3RhbnRpc0VmZmVjdGl2ZWx5Q29uc3RhbnRpc0luaXRpYWxpemVkSW5BbGxvY2F0b3JoYXNXcml0ZWlzRWZmZWN0aXZlbHlGaW5hbGluZGVwZW5kZW50RmllbGRzZGVwZW5kZW50RmllbGRzc3RhdGljRmllbGREYXRhcHJvY2Vzc2VkRmllbGRzY3VycmVudEZpZWxkc2VhZ2VyQ3JlYXRpb25JbmRleHByb2Nlc3NGaWVsZGlzRWFnZXJlYWdlckZpZWxkRGVwZW5kZW5jaWVzY3JlYXRpb25JbmRleG90aGVyRmllbGRvdGhlckRhdGFpc0xhenllYWdlckZpZWxkRGVwZW5kZW5jaWVzRm9yVGVzdGluZ2FMb2NhdGlvbmJMb2NhdGlvbkZpZWxkQW5hbHlzaXNEYXRhZmllbGQtYW5hbHlzaXMtZGF0YWZyb21EYXRhU291cmNlRmllbGRBbmFseXNpc0RhdGEoaW5pdGlhbFZhbHVlPWlzSW5pdGlhbGl6ZWRJbkFsbG9jYXRvcj1pc0VmZmVjdGl2ZWx5RmluYWw9LGlzRWxpZGVkPWlzRWFnZXI9LGVhZ2VyQ3JlYXRpb25JbmRleD1lYWdlckZpZWxkRGVwZW5kZW5jaWVzPUJpbmFyeU91dHB1dFNpbmtBZGFwdGVyanNfYmFja2VuZC5iYWNrZW5kLmFubm90YXRpb25zUHJhZ21hQW5ub3RhdGlvbmZvckZ1bmN0aW9uc09ubHlmb3JGaWVsZHNPbmx5aW50ZXJuYWxPbmx5YXNUcnVzdGFzQ2hlY2t0eXBlc1RydXN0dHlwZXNDaGVja3BhcmFtZXRlclRydXN0ZG93bmNhc3RUcnVzdGRvd25jYXN0Q2hlY2tpbXBsaWVzZXhjbHVkZXNyZXF1aXJlc0Fubm90YXRpb25zRGF0YWhhc0Fzc3VtZUR5bmFtaWNoYXNOb0lubGluZWhhc1RyeUlubGluZWhhc0Rpc2FibGVGaW5hbGhhc05vVGhyb3dzaGFzTm9TaWRlRWZmZWN0c2dldENvbmRpdGlvbkNoZWNrUG9saWN5QW5ub3RhdGlvbnNEYXRhSW1wbGFubm90YXRpb25zLWRhdGFfZGVmYXVsdFBhcmFtZXRlckNoZWNrUG9saWN5X2RlZmF1bHRJbXBsaWNpdERvd25jYXN0Q2hlY2tQb2xpY3lfZGVmYXVsdENvbmRpdGlvbkNoZWNrUG9saWN5X2RlZmF1bHRFeHBsaWNpdENhc3RDaGVja1BvbGljeV9oYXNQcmFnbWFBbm5vdGF0aW9uc0RhdGFCdWlsZGVyY29tcHV0ZVByYWdtYUFubm90YXRpb25EYXRhZGFydDJqczpvcHRpb25zVmFsdWVoYXNPcHRpb25zcHJvY2Vzc01lbWJlckFubm90YXRpb25zcGxhdGZvcm1Bbm5vdGF0aW9uc0FsbG93ZWRAcHJhZ21hKCcnKSBhbm5vdGF0aW9uIGRvZXMgbm90IHRha2Ugb3B0aW9ucycpIGFubm90YXRpb24gaXMgb25seSBzdXBwb3J0ZWQgZm9yIG1ldGhvZHMgYW5kIGNvbnN0cnVjdG9ycy5mb3IgZmllbGRzLlVucmVjb2duaXplZCBkYXJ0MmpzIHByYWdtYSBAcHJhZ21hKCdVbmtub3duIGRhcnQyanMgcHJhZ21hIEBwcmFnbWEoJ3JlcG9ydGVkRXhjbHVzaW9uc0BwcmFnbWEoJ2RhcnQyanM6JykgaW1wbGllcyAnKSBtdXN0IG5vdCBiZSB1c2VkIHdpdGggQHByYWdtYSgnZGFydDJqczonKSBzaG91bGQgYWx3YXlzIGJlIGNvbWJpbmVkIHdpdGggQHByYWdtYSgnZGFydDJqczpNZW1iZXJVc2VkQ2FsbGJhY2tDbGFzc1VzZWRDYWxsYmFja0Fic3RyYWN0VXNhZ2VfcGVuZGluZ1VzZV9vcmlnaW5hbFVzZV9hcHBsaWVkVXNlaGFzU2FtZVVzYWdlTWVtYmVyVXNhZ2VlbXB0eVNldHBlbmRpbmdVc2VjcmVhdGVQb3RlbnRpYWxBY2Nlc3NTZXRBY2Nlc3Muc3RhdGljQWNjZXNzY3JlYXRlUG90ZW50aWFsUmVhZHNjcmVhdGVQb3RlbnRpYWxXcml0ZXNjcmVhdGVQb3RlbnRpYWxJbnZva2VzcG90ZW50aWFsUmVhZHNwb3RlbnRpYWxXcml0ZXNwb3RlbnRpYWxJbnZva2VzaGFzSW5pdGhhc0ludm9rZWFjY2Vzc2VzUHJvcGVydHlVc2FnZWFscmVhZHlIYXNSZWFkYWxyZWFkeUhhc1dyaXRlUHJvcGVydHlVc2FnZShyZWFkcz13cml0ZXM9aW52b2tlcz1wb3RlbnRpYWxSZWFkcz1wb3RlbnRpYWxXcml0ZXM9cG90ZW50aWFsSW52b2tlcz1wZW5kaW5nVXNlPWluaXRpYWxDb25zdGFudHM9RmllbGRVc2FnZV9pbml0aWFsQ29uc3RhbnRzRmllbGRVc2FnZSgsaGFzSW5pdD1NZXRob2RVc2FnZXBhcmFtZXRlclVzYWdlYWxyZWFkeUhhc0ludm9rZWZ1bGx5VXNlaXNGdWxseVVzZWRNZXRob2RVc2FnZShwYXJhbWV0ZXJVc2FnZT1NZW1iZXJVc2VOT1JNQUxDTE9TVVJJWkVfSU5TVEFOQ0VDTE9TVVJJWkVfU1RBVElDTWVtYmVyVXNlc05PUk1BTF9PTkxZQ0xPU1VSSVpFX0lOU1RBTkNFX09OTFlDTE9TVVJJWkVfU1RBVElDX09OTFlBTExfSU5TVEFOQ0VBTExfU1RBVElDQ2xhc3NVc2FnZUNsYXNzVXNlSU5TVEFOVElBVEVESU1QTEVNRU5URURDbGFzc1VzZXNJTlNUQU5USUFURURfT05MWUlNUExFTUVOVEVEX09OTFlQYXJhbWV0ZXJVc2FnZV9wYXJhbWV0ZXJTdHJ1Y3R1cmVfaGFzSW52b2tlX3Byb3ZpZGVkUG9zaXRpb25hbFBhcmFtZXRlcnNfYXJlQWxsVHlwZVBhcmFtZXRlcnNQcm92aWRlZF91bnByb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzcHJvdmlkZWRQb3NpdGlvbmFsUGFyYW1ldGVyc2FyZUFsbFR5cGVQYXJhbWV0ZXJzUHJvdmlkZWR1bnByb3ZpZGVkTmFtZWRQYXJhbWV0ZXJzbmV3UHJvdmlkZWRQb3NpdGlvbmFsUGFyYW1ldGVyc19wcm92aWRlZE5hbWVkUGFyYW1ldGVyc0NvdW50UGFyYW1ldGVyVXNhZ2UoX2hhc0ludm9rZT1fcHJvdmlkZWRQb3NpdGlvbmFsUGFyYW1ldGVycz1fYXJlQWxsVHlwZVBhcmFtZXRlcnNQcm92aWRlZD1fdW5wcm92aWRlZE5hbWVkUGFyYW1ldGVycz1BY2Nlc3NzdGF0aWNBY2Nlc3NkeW5hbWljQWNjZXNzc3VwZXJBY2Nlc3NBY2Nlc3Nlc01lbWJlckFjY2Vzc3dvcmxkX2J1aWxkZXJTZWxlY3RvckNvbnN0cmFpbnRzU3Ryb25nTW9kZVdvcmxkU3RyYXRlZ3lTdHJvbmdNb2RlV29ybGRDb25zdHJhaW50c19jb25zdHJhaW50c1N0cm9uZ01vZGVDb25zdHJhaW50KFdvcmxkQnVpbGRlcldvcmxkQnVpbGRlckJhc2VfcmVnaXN0ZXJTdGF0aWNUeXBlQXJndW1lbnREZXBlbmRlbmN5X3JlZ2lzdGVyRHluYW1pY1R5cGVBcmd1bWVudERlcGVuZGVuY3lOb1N1Y2hNZXRob2RSZWdpc3RyeXJlZ2lzdGVyTm9TdWNoTWV0aG9kbm9TdWNoTWV0aG9kRWxlbWVudGhhc1Rocm93aW5nTm9TdWNoTWV0aG9kaGFzQ29tcGxleE5vU3VjaE1ldGhvZE5vU3VjaE1ldGhvZFJlZ2lzdHJ5SW1wbGRlZmF1bHRJbXBsc3Rocm93aW5nSW1wbHNub3RBcHBsaWNhYmxlSW1wbHNvdGhlckltcGxzX3VuY2F0ZWdvcml6ZWRJbXBsc2ZvcndhcmRpbmdTeW50YXhJbXBsc19yZXNvbHZlcmludGVybmFsUmVzb2x2ZXJGb3JUZXN0aW5nX2NhdGVnb3JpemVJbXBsTnNtQ2F0ZWdvcnkuREVGQVVMVE5zbUNhdGVnb3J5LlRIUk9XSU5HTnNtQ2F0ZWdvcnkuT1RIRVJOc21DYXRlZ29yeS5OT1RfQVBQTElDQUJMRWhhc0ZvcndhcmRpbmdTeW50YXhzdXBlckNhbGxnZXRTdXBlck5vU3VjaE1ldGhvZGhhc1Rocm93aW5nU3ludGF4aXNDb21wbGV4Tm9TdWNoTWV0aG9kRGF0YUltcGxuby1zdWNoLW1ldGhvZC1kYXRhY29tcGxleE5vUmV0dXJuSW1wbHNjb21wbGV4UmV0dXJuaW5nSW1wbHNOc21DYXRlZ29yeVRIUk9XSU5HTk9UX0FQUExJQ0FCTEVPVEhFUk5vU3VjaE1ldGhvZFJlc29sdmVyQ2xhc3NSZWxhdGlvblN0YXRpY1R5cGVWaXNpdG9yX2V4cHJlc3Npb25UeXBlQ2FjaGVfZm9ySW5JdGVyYXRvclR5cGVDYWNoZXR5cGVNYXBzRm9yVGVzdGluZ19wZW5kaW5nUnVudGltZVR5cGVVc2VEYXRhX2N1cnJlbnRWYXJpYWJsZXNfaW52YWxpZGF0ZWRWYXJpYWJsZXNfdHlwZU1hcEJhc2VfdHlwZU1hcFdoZW5UcnVlX3R5cGVNYXBXaGVuRmFsc2VnZXRTdGF0aWNUeXBlQ2FjaGVjb21wbGV0ZXN0eXBlTWFwV2hlblRydWV0eXBlTWFwV2hlbkZhbHNlVW5oYW5kbGVkIG5vZGUgdmlzaXROb2Rlc2dldEludGVyZmFjZVR5cGVPZl9jb21wdXRlUHJvcGVydHlHZXRUeXBlaGFuZGxlUHJvcGVydHlHZXRoYW5kbGVSdW50aW1lVHlwZVVzZV9uYXJyb3dJbnN0YW5jZVJlY2VpdmVybGVmdFJ1bnRpbWVUeXBlRXhwcmVzc2lvbnJpZ2h0UnVudGltZVR5cGVFeHByZXNzaW9uVW5leHBlY3RlZCBSdW50aW1lVHlwZVVzZURhdGEgZm9yIGlzQ29tcGxldGVoYW5kbGVQcm9wZXJ0eVNldHJlY2VpdmVyU3Vic3RpdHV0aW9uaGFuZGxlQXNFeHByZXNzaW9uaGFuZGxlRGlyZWN0UHJvcGVydHlHZXRoYW5kbGVEaXJlY3RNZXRob2RJbnZvY2F0aW9uYXJndW1lbnRUeXBlc192aXNpdEFyZ3VtZW50c2hhbmRsZURpcmVjdFByb3BlcnR5U2V0aXNTcGVjaWFsQ2FzZWRCaW5hcnlPcGVyYXRvcl9nZXRNZW1iZXJfaXNBcHBsaWNhYmxlaXNGdW5jdGlvblR5cGVBcHBsaWNhYmxlZ2V0TmFtZWRQYXJhbWV0ZXJzaXNUeXBlQXBwbGljYWJsZV91cGRhdGVNZXRob2RJbnZvY2F0aW9uVGFyZ2V0bmVlZGVkUG9zaXRpb25hbENoZWNrc25lZWRlZE5hbWVkQ2hlY2tzYXJndW1lbnRJbmRleG5hbWVkQXJndW1lbnRuYW1lZFR5cGVsZXRWYXJpYWJsZXN1cGRhdGVBcmd1bWVudGNoZWNrZWRQYXJhbWV0ZXJUeXBlaGFuZGxlVmFyaWFibGVEZWNsYXJhdGlvbmhhbmRsZVZhcmlhYmxlR2V0X2NvbXB1dGVNZXRob2RJbnZvY2F0aW9uVHlwZWhhbmRsZU1ldGhvZEludm9jYXRpb25hZnRlckludm9jYXRpb25wcm9tb3RldHlwZU9mVW5leHBlY3RlZCBwcm9tb3Rpb24gb2YgaGFuZGxlVmFyaWFibGVTZXRoYW5kbGVTdGF0aWNHZXRoYW5kbGVTdGF0aWNTZXRoYW5kbGVTdGF0aWNJbnZvY2F0aW9uaGFuZGxlU3VwZXJQcm9wZXJ0eUdldGhhbmRsZVN1cGVyUHJvcGVydHlTZXRoYW5kbGVTdXBlck1ldGhvZEludm9jYXRpb25hZnRlckxlZnRXaGVuVHJ1ZWFmdGVyTGVmdFdoZW5GYWxzZWFmdGVyUmlnaHRXaGVuVHJ1ZWFmdGVyUmlnaHRXaGVuRmFsc2VhZnRlck9wZXJhbmRXaGVuVHJ1ZWFmdGVyT3BlcmFuZFdoZW5GYWxzZV9oYW5kbGVDb25kaXRpb25hbGFmdGVyQ29uZGl0aW9uV2hlblRydWVhZnRlckNvbmRpdGlvbldoZW5GYWxzZWFmdGVyVGhlbmFmdGVyT3RoZXJ3aXNlaGFuZGxlSXNFeHByZXNzaW9uYWZ0ZXJPcGVyYW5kX3Byb2Nlc3NMb2NhbFZhcmlhYmxlX2NvbXB1dGVJbnN0YW50aWF0aW9uVHlwZWhhbmRsZUluc3RhbnRpYXRpb25JbmNvbXBsZXRlIFJ1bnRpbWVUeXBlVXNlRGF0YTogb3BlcmFuZFR5cGVoYW5kbGVTdHJpbmdDb25jYXRlbmF0aW9uaGFuZGxlSW50TGl0ZXJhbGhhbmRsZURvdWJsZUxpdGVyYWxoYW5kbGVCb29sTGl0ZXJhbGhhbmRsZVN0cmluZ0xpdGVyYWxoYW5kbGVTeW1ib2xMaXRlcmFsaGFuZGxlTnVsbExpdGVyYWxoYW5kbGVMaXN0TGl0ZXJhbGhhbmRsZVNldExpdGVyYWxoYW5kbGVNYXBMaXRlcmFsaGFuZGxlRnVuY3Rpb25FeHByZXNzaW9uYmVmb3JlQ2xvc3VyZWdldFNjb3BlRm9yYXNzaWduZWRWYXJpYWJsZXNfb2xkVmFyaWFibGVzdmlzaXRTaWduYXR1cmVoYW5kbGVUaHJvd2hhbmRsZUZpZWxkSW5pdGlhbGl6ZXJoYW5kbGVSZWRpcmVjdGluZ0luaXRpYWxpemVyaGFuZGxlU3VwZXJJbml0aWFsaXplcmJlZm9yZUxvb3BoYW5kbGVGb3JJblN0YXRlbWVudGl0ZXJhdG9yVHlwZXN0cmVhbUludGVyZmFjZVR5cGVpdGVyYWJsZUludGVyZmFjZVR5cGVoYW5kbGVTd2l0Y2hTdGF0ZW1lbnRhZnRlclN0YXRlbWVudGJlZm9yZUNhc2VoYXNDb250aW51ZVN3aXRjaGhhbmRsZUNhdGNoaGFuZGxlVHlwZUxpdGVyYWxoYW5kbGVMb2FkTGlicmFyeWhhbmRsZUFzc2VydFN0YXRlbWVudGJlZm9yZUNvbmRpdGlvbmhhbmRsZUZ1bmN0aW9uRGVjbGFyYXRpb25oYW5kbGVQYXJhbWV0ZXJoYW5kbGVTaWduYXR1cmVoYW5kbGVQcm9jZWR1cmVoYW5kbGVDb25zdHJ1Y3RvcmhhbmRsZUZpZWxkaGFuZGxlQ29uc3RhbnRFeHByZXNzaW9uQXJndW1lbnRUeXBlc1R5cGVIb2xkZXJ0cnVlVHlwZXNmYWxzZVR5cGVzX2dldFRleHR0eXBlc1RvVGV4dHRydWU6ZmFsc2U6VHlwZUhvbGRlcihkZWNsYXJlZD1UYXJnZXRJbmZvdHlwZUhvbGRlcnN0eXBlc09mSW50ZXJlc3RuZXdUeXBlSG9sZGVyc2FkZFR5cGVIb2xkZXJ0eXBlSG9sZGVyYWRkQXNDb3B5bmV3VHlwZXNPZkludGVyZXN0YWRkVHlwZUhvbGRlcnNvdGhlclRydWVUeXBlc290aGVyRmFsc2VUeXBlc290aGVyVHlwZXNPZkludGVyZXN0bmV3VHJ1ZVR5cGVzbmV3RmFsc2VUeXBlc3RoaXNUcnVlVHlwZXN0aGlzRmFsc2VUeXBlc1RhcmdldEluZm8oZGVjbGFyZWRUeXBlPXR5cGVIb2xkZXJzPWRlY2xhcmF0aW9uc09mSW50ZXJlc3Q9VHlwZU1hcF90YXJnZXRJbmZvTWFwbmV3SW5mb01hcHRhcmdldEluZm90eXBlT2ZJbnRlcmVzdHR5cGVIb2xkZXJJZk5vbk51bGx0eXBlSG9sZGVySWZOdWxsVHlwZU1hcChjb21wdXRlQ2xhc3NSZWxhdGlvbkZyb21UeXBlaXNJbmRpcmVjdGx5SW5zdGFudGlhdGVkc3ViY2xhc3Nlc09mZm9yRWFjaFN0cmljdFN1YmNsYXNzT2ZhbnlTdHJpY3RTdWJjbGFzc09mc3VidHlwZXNPZmZvckVhY2hTdHJpY3RTdWJ0eXBlT2ZhbnlTdHJpY3RTdWJ0eXBlT2ZoYXZlQW55Q29tbW9uU3VidHlwZXNjbHMxcXVlcnkxY2xzMnF1ZXJ5MmdldENsYXNzSGllcmFyY2h5Tm9kZWdldENsYXNzU2V0Q2xhc3NIaWVyYXJjaHlJbXBsY2xhc3MtaGllcmFyY2h5X2NsYXNzSGllcmFyY2h5Tm9kZXNfY2xhc3NTZXRzY2xhc3NIaWVyYXJjaHlOb2Rlc2NsYXNzU2V0c2NsYXNzU2V0Zm9yRWFjaFN1YmNsYXNzTm8gQ2xhc3NTZXQgZm9yICk6IGNsYXNzSGllcmFyY2h5Tm9kZU5vIENsYXNzSGllcmFyY2h5Tm9kZSBmb3IgaGFzU3VidHlwZWhhc1N1YmNsYXNzc3ViY2xhc3Nlc0J5TWFza3N1YmNsYXNzZXNzdHJpY3RpbnN0YW50aWF0ZWRTdWJjbGFzc0NvdW50YW55U3ViY2xhc3NzdWJ0eXBlc0J5TWFza2luc3RhbnRpYXRlZFN1YnR5cGVDb3VudGZvckVhY2hTdWJ0eXBlYW55U3VidHlwZWNsYXNzU2V0QWNsYXNzU2V0QnN1YnR5cGVzT2ZCc3VidHlwZU9mQWhhc09ubHlJbnN0YW50aWF0ZWRTdWJjbGFzc2VzSXRlcmF0aW9uU3RlcC5TS0lQX1NVQkNMQVNTRVNJdGVyYXRpb25TdGVwLkNPTlRJTlVFQ2xhc3NlcyBpbiB0aGUgY2xvc2VkIHdvcmxkIHJlbGF0ZWQgdG8gSW5zdGFudGlhdGVkIGNsYXNzZXMgaW4gdGhlIGNsb3NlZCB3b3JsZDoKaW5zdGFudGlhdGVkT25seXdpdGhSZXNwZWN0VG9faW5oZXJpdGVkSW5UaGlzQ2xhc3NDYWNoZU1hcF9pbmhlcml0ZWRJblN1YnR5cGVDYWNoZU1hcENsYXNzSGllcmFyY2h5Tm9kZS9DbGFzc1NldCBtaXNtYXRjaDogX2Vuc3VyZUNsYXNzU2V0Z2V0RGVjbGFyYXRpb25fZW5zdXJlQ2xhc3NIaWVyYXJjaHlOb2RlcGFyZW50Tm9kZWdldEhpZXJhcmNoeURlcHRoc3VidHlwZVNldGFkZFN1YnR5cGVhcHBsaWVkTWl4aW5nZXRBcHBsaWVkTWl4aW5yZWdpc3Rlck1peGluVXNlbWl4aW5TZXRfdXBkYXRlU3VwZXJDbGFzc0hpZXJhcmNoeU5vZGVGb3JDbGFzc2ltcGxlbWVudHNGdW5jdGlvbl9pc1N1YnR5cGVPZkNsYXNzU2V0IGZvciAgaGFzIG5vdCBiZWVuIGNvbXB1dGVkIHlldC5leGFjdENsYXNzZXhhY3RDbGFzc05vZGVtZW1iZXJIb2xkaW5nQ2xhc3NTZXRtaXhpbkFwcGxpY2F0aW9uTm9kZXN0aGlzQ2xhc3Npc0luaGVyaXRlZEluVGhpc0NsYXNzT2ZfSW5oZXJpdGVkSW5UaGlzQ2xhc3NDYWNoZV9pbmhlcml0aW5nQ2xhc3Nlc19jb21wdXRlSW5oZXJpdGluZ0luVGhpc0NsYXNzU2V0aGFzTGl2ZUNsYXNzbWVtYmVySG9sZGluZ0NsYXNzTm9kZXZhbGlkYXRpbmdTZXRwcm9jZXNzSGllcmFyY2h5bWl4ZXJOb2RlaW5oZXJpdGluZ0NsYXNzaW5oZXJpdGluZ0NsYXNzTm9kZXRoaXNDbGFzc1NldF9Jbmhlcml0ZWRJblN1YnR5cGVDYWNoZV9jb21wdXRlSW5oZXJpdGluZ0luU3VidHlwZVNldHN1YmNsYXNzSW1wbGVtZW50c19MaXZlU2V0X3Jlc3VsdENsYXNzUXVlcnlTdWJjbGFzc1Jlc3VsdEtpbmRFWEFDVDFFWEFDVDJTVUJDTEFTUzFTVUJDTEFTUzJTVUJUWVBFMVNVQlRZUEUyU3ViY2xhc3NSZXN1bHRTdWJjbGFzc1Jlc3VsdCgsY2xhc3Nlcz10eXBlX2dyYXBoX2luZmVycmVySkNsb3N1cmVDYWxsTWV0aG9kZG9Ob3RFbnF1ZXVlX2luZmVycmVkRGF0YUJ1aWxkZXJHcmFwaCBpbmZlcnJlcmNyZWF0ZUluZmVycmVyRW5naW5lRm9ycnVuT3ZlckFsbEVsZW1lbnRzYnVpbGRSZXN1bHRzZ2V0Q2FsbGVyc09mRm9yVGVzdGluZ2NyZWF0ZU1lbWJlclJlc3VsdHN0eXBlSW5mb3JtYXRpb25kYXRhT2ZNZW1iZXJmcmVlVmFyaWFibGVzZm9yRWFjaE1lbWJlclR5cGVnZXRTY29wZUluZm9mb3JFYWNoRnJlZVZhcmlhYmxlZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXJjb21wdXRlSXNDYWxsZWRPbmNlZm9yRWFjaFBhcmFtZXRlclR5cGVjaGVja3NHcm93YWJsZXR5cGVzLmNvbnN0YW50c0NvbnN0YW50VmFsdWVUeXBlTWFza3Njb21wdXRlVHlwZU1hc2tKUmVjb3JkRmllbGRKc1RvRWxlbWVudE1hcGdldEludGVyZmFjZVR5cGVnZXRDYWxsU3RydWN0dXJlZ2V0U2VsZWN0b3JnZXRNZXRob2RnZXRUeXBlZGVmVHlwZWdldFN1cGVyTWVtYmVyZ2V0TmF0aXZlQmVoYXZpb3JGb3JKc0NhbGxnZXROYXRpdmVCZWhhdmlvckZvckpzQnVpbHRpbkNhbGxnZXROYXRpdmVCZWhhdmlvckZvckpzRW1iZWRkZWRHbG9iYWxDYWxsZ2V0SW1wb3J0Z2V0Q2xhc3NEZWZpbml0aW9uZ2V0RGFydFR5cGVzZ2V0TWVtYmVyRGVmaW5pdGlvbmdldENsYXNzVHlwZVZhcmlhYmxlQWNjZXNzRm9yTWVtYmVyZ2V0U3Bhbm5hYmxlZ2V0Q29uc3RydWN0b3JCb2R5Z2V0R2VuZXJhdG9yQm9keW1ha2VSZWNvcmRDb250YWluZXJnZXRTdGF0aWNUeXBlUHJvdmlkZXJLZXJuZWxUb1R5cGVJbmZlcmVuY2VNYXBLZXJuZWxUb0xvY2Fsc01hcE1lbWJlcktpbmQucmVndWxhck1lbWJlcktpbmQuY29uc3RydWN0b3JNZW1iZXJLaW5kLmNvbnN0cnVjdG9yQm9keU1lbWJlcktpbmQuY2xvc3VyZUNhbGxNZW1iZXJLaW5kLmNsb3N1cmVGaWVsZE1lbWJlcktpbmQuc2lnbmF0dXJlTWVtYmVyS2luZC5nZW5lcmF0b3JCb2R5cmVndWxhcmNvbnN0cnVjdG9yQm9keWNsb3N1cmVGaWVsZGdlbmVyYXRvckJvZHlNZW1iZXJEZWZpbml0aW9uVW5leHBlY3RlZCBNZW1iZXJLaW5kIENsYXNzS2luZC5yZWd1bGFyQ2xhc3NLaW5kLmNsb3N1cmVDbGFzc0tpbmQucmVjb3JkUmVndWxhck1lbWJlckRlZmluaXRpb25yZWd1bGFyLW1lbWJlci1kZWZpbml0aW9uUmVndWxhck1lbWJlckRlZmluaXRpb24oa2luZDpub2RlOixsb2NhdGlvbjpTcGVjaWFsTWVtYmVyRGVmaW5pdGlvbnNwZWNpYWwtbWVtYmVyLWRlZmluaXRpb25TcGVjaWFsTWVtYmVyRGVmaW5pdGlvbihraW5kOkNsYXNzRGVmaW5pdGlvblVuZXhwZWN0ZWQgQ2xhc3NLaW5kIFJlZ3VsYXJDbGFzc0RlZmluaXRpb25yZWd1bGFyLWNsYXNzLWRlZmluaXRpb25SZWd1bGFyQ2xhc3NEZWZpbml0aW9uKGtpbmQ6Z2V0RnVuY3Rpb25Ob2RlZm9yRWFjaE9yZGVyZWRQYXJhbWV0ZXJCeUZ1bmN0aW9uTm9kZXVzZU5hdGl2ZU9yZGVyaW5nZm9yRWFjaE9yZGVyZWRQYXJhbWV0ZXJVbmV4cGVjdGVkIGZ1bmN0aW9uIGRlZmluaXRpb24gSW5mZXJyZXJFbmdpbmVjb25jcmV0ZVR5cGVzYW5hbHl6ZUxpc3RBbmRFbnF1ZXVlYW5hbHl6ZVNldEFuZEVucXVldWVhbmFseXplTWFwQW5kRW5xdWV1ZWFkZFJldHVyblR5cGVGb3JNZXRob2R1bnVzZWRmb3JFYWNoRWxlbWVudE1hdGNoaW5nZ2V0RGVmYXVsdFR5cGVPZlBhcmFtZXRlcmhhc0FscmVhZHlDb21wdXRlZFR5cGVPZlBhcmFtZXRlckRlZmF1bHRzZXREZWZhdWx0VHlwZU9mUGFyYW1ldGVyY2hlY2tJZkV4cG9zZXNUaGlzcmVjb3JkRXhwb3Nlc1RoaXNleHBvc2VzVGhpc3JlY29yZFJldHVyblR5cGVyZWNvcmRUeXBlT2ZGaWVsZHJlZ2lzdGVyQXdhaXRyZWdpc3RlcllpZWxkcmVnaXN0ZXJDYWxsZWRDbG9zdXJlaW5Mb29wcmVnaXN0ZXJDYWxsZWRNZW1iZXJjYWxsZWVyZWdpc3RlckNhbGxlZFNlbGVjdG9yaXNDb25kaXRpb25hbHVwZGF0ZVBhcmFtZXRlckFzc2lnbm1lbnRzYWRkVG9RdWV1ZXVwZGF0ZVNlbGVjdG9ySW5NZW1iZXJyZXR1cm5UeXBlT2ZNZW1iZXJ0eXBlT2ZNZW1iZXJ0eXBlT2ZQYXJhbWV0ZXJ0eXBlT2ZOYXRpdmVCZWhhdmlvcmNhbkZpZWxkQmVVc2VkRm9yR2xvYmFsT3B0aW1pemF0aW9uc2NhbkZ1bmN0aW9uUGFyYW1ldGVyc0JlVXNlZEZvckdsb2JhbE9wdGltaXphdGlvbnNJbmZlcnJlckVuZ2luZUltcGxkZWZhdWx0VHlwZU9mUGFyYW1ldGVyYW5hbHl6ZWRFbGVtZW50c01BWF9DSEFOR0VfQ09VTlRvdmVyYWxsUmVmaW5lQ291bnRhZGRlZEluR3JhcGhnZW5lcmF0aXZlQ29uc3RydWN0b3JzRXhwb3NpbmdUaGlzdXBkYXRlU2lkZUVmZmVjdHNzZXRBbGxTaWRlRWZmZWN0c0FuZERlcGVuZHNPblNvbWV0aGluZ21hcHBlZFR5cGVjb21wdXRlTFVCQ2FsbFR5cGUuYWNjZXNzc2V0VHlwZU1hc2tDYWxsVHlwZS5mb3JJbnNldEl0ZXJhdG9yVHlwZU1hc2tzZXRDdXJyZW50VHlwZU1hc2tzZXRNb3ZlTmV4dFR5cGVNYXNrYW5hbHl6ZWRzdWNjZWVkZWRiYWlsZWRPdXRvcmlnaW5hbFR5cGVjYWxsc0dyb3dhYmxlTWV0aG9kYXNzaWdubWVudHNhZGRBc3NpZ25tZW50a2V5QXNzaWdubWVudHNhZGRFbnRyeUFzc2lnbm1lbnR2YWx1ZUFzc2lnbm1lbnRzbWFwQXNzaWdubWVudHNhZGRNYXBBc3NpZ25tZW50bWFya0FzSW5mZXJyZWR0eXBlSW5mb01hcGFuYWx5emVBbGxFbGVtZW50c2JlZm9yZUFuYWx5c2lzYnVpbGRXb3JrUXVldWVyZWZpbmVhbGxvY2F0ZWRTZXRzYWxsb2NhdGVkTWFwc2JhaWxlZE91dE9uYWxsb2NhdGVkQ2xvc3VyZXNjb250aW51ZUFuYWx5emluZ3RyYWNlZCBjbG9zdXJlICAoYmFpbClnaXZlVXBjbGVhckFzc2lnbm1lbnRzbWF5YmVSZXN1bWV0cmFjZWRUeXBlbWlnaHRCZVBhc3NlZFRvRnVuY3Rpb25BcHBseWNhbGxlZEVsZW1lbnRsb29rdXBDYWxsTWV0aG9kY2FsbGVlc1VuZXhwZWN0ZWQgY2xvc3VyZSBhbGxvY2F0aW9uIGluZm8gYmVmb3JlVHJhY2luZ3NlZW5UeXBlc19pbmZvYXQgYWZ0ZXIgcmVmaW5lQ291bnRnZXRJbmZlcnJlZFNpZ25hdHVyZWhhc0Nsb3N1cmVDYWxsVGFyZ2V0czxDbG9zdXJlLmNhbGw+Y29uY3JldGVUYXJnZXRzZ2V0SW5mZXJyZWRTaWduYXR1cmVPZk1ldGhvZCBmb3Igc29tZSB1bmtub3duIGtpbmQgb2YgY2xvc3VyZSA6OiBhZnRlckFuYWx5c2lzSW5mZXJyZWQgIHR5cGVzLnByb2Nlc3NMb29wSW5mb3JtYXRpb25BZGRlZCAgZWxlbWVudHMgaW4gaW5mZXJlbmNpbmcgZ3JhcGgud2l0aE1lbWJlcmNvbXB1dGVNZW1iZXJCb2R5VW5leHBlY3RlZCBtZW1iZXIgZGVmaW5pdGlvbjogY29tcHV0ZU1lbWJlclR5cGVJbmZvcm1hdGlvbmZ1bmN0aW9uQ29uc3RhbnRhbGxvY2F0ZUNsb3N1cmVyZWZpbmVkVHlwZWFsbG9jYXRlZFR5cGVzaXNGaWVsZEluaXRpYWxpemVyUG90ZW50aWFsbHlOdWxsaGFzQ2FsbFR5cGVhbGxvY2F0ZWRDYWxsc29sZFR5cGVhYmFuZG9uSW5mZXJlbmNpbmdBTk9NQUxZIFdBUk5JTkc6IG1heCByZWZpbmVtZW50IHJlYWNoZWQgZm9yIGhhc1N0YWJsZVR5cGVzdGFiaWxpemVvcmRlcmVkVHlwZUluZm9ybWF0aW9uc3JlbW92ZUFzc2lnbm1lbnRjbG9zdXJpemVkQ291bnR0YWdBc1RlYXJPZmZDbG9zdXJlUGFyYW1ldGVyTm8gZGVmYXVsdCB0eXBlIGZvciBhZGRVc2Vyc09mYWRkVG9HcmFwaG1lbWJlclR5cGVJbmZvcm1hdGlvbnNwYXJhbWV0ZXJUeXBlSW5mb3JtYXRpb25zY2FsbGVyc0ZvclRlc3Rpbmdpc0ZpZWxkVXNlZEJ5QmFja2VuZGlzRnVuY3Rpb25Vc2VkQnlCYWNrZW5kS2VybmVsVHlwZVN5c3RlbVN0cmF0ZWd5Y2hlY2tDbGFzc0VudGl0eWNoZWNrTWFwTm9kZWNoZWNrU2V0Tm9kZWNoZWNrTGlzdE5vZGVjaGVja0xvb3BQaGlOb2RlY2hlY2tQaGlOb2RlY3JlYXRlUGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uZ2V0Q2xvc3VyZUluZm9tZW1iZXJUeXBlSW5mb3JtYXRpb25jcmVhdGVNZW1iZXJUeXBlSW5mb3JtYXRpb25LZXJuZWxHbG9iYWxUeXBlSW5mZXJlbmNlRWxlbWVudERhdGFnbG9iYWwtdHlwZS1pbmZlcmVuY2UtZWxlbWVudC1kYXRhX3NlbmRNYXBfaXRlcmF0b3JNYXBfY3VycmVudE1hcF9tb3ZlTmV4dE1hcHNlbmRNYXBpdGVyYXRvck1hcGN1cnJlbnRNYXBtb3ZlTmV4dE1hcF9tYXBzVG9OdWxsZGFydDJqcy5zb3VyY2VfaW5mb3JtYXRpb24ucG9zaXRpb25Qb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uc291cmNlLWluZm9ybWF0aW9uX2NvbXB1dGVUZXh0dXJpVGV4dC1bQWJzdHJhY3RQb3NpdGlvblNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3lTb3VyY2VNYXBwZWRNYXJrZXJDb2RlUG9zaXRpb25nZXRQb3NpdGlvbkNvZGVQb3NpdGlvbktpbmQuU1RBUlRDb2RlUG9zaXRpb25LaW5kLkVORENvZGVQb3NpdGlvbktpbmQuQ0xPU0lOR0NvZGVQb3NpdGlvbihzdGFydD1lbmQ9LGNsb3Npbmc9Q29kZVBvc2l0aW9uTWFwQ29kZVBvc2l0aW9uUmVjb3JkZXJfY29kZVBvc2l0aW9uTWFwcmVnaXN0ZXJQb3NpdGlvbnNyZWdpc3RlckNvZGVQb3NpdGlvbmNvZGVQb3NpdGlvblNvdXJjZVBvc2l0aW9uS2luZFNvdXJjZVBvc2l0aW9uS2luZC5TVEFSVFNvdXJjZVBvc2l0aW9uS2luZC5JTk5FUlNUQVJUSU5ORVJDb2RlUG9zaXRpb25LaW5kQ0xPU0lOR0VORFBvc2l0aW9uU291cmNlSW5mb3JtYXRpb25Qcm9jZXNzb3J2MmNvZGVQb3NpdGlvblJlY29yZGVyY29kZVBvc2l0aW9uTWFwdHJhY2VMaXN0ZW5lcnNpbmxpbmluZ0xpc3RlbmVyY292ZXJhZ2Vzb3VyY2VNYXBwZXJjcmVhdGVTb3VyY2VNYXBwZXJOb2RlU291cmNlSW5mb3JtYXRpb25nZXRTb3VyY2VJbmZvcm1hdGlvbk5vZGVUb1NvdXJjZUluZm9ybWF0aW9uTWl4aW5jb21wdXRlU291cmNlSW5mb3JtYXRpb25fSW5saW5pbmdUcmFjZUxpc3RlbmVyJlRyYWNlTGlzdGVuZXImTm9kZVRvU291cmNlSW5mb3JtYXRpb25NaXhpbklubGluaW5nVHJhY2VMaXN0ZW5lcl9mcmFtZXNvblN0ZXBTdGVwS2luZC5GVU5fRVhJVGxhc3RJbmxpbmluZ0NvbnRleHRuZXdJbmxpbmluZ0NvbnRleHRwb3BDb3VudHB1c2hlc3JlZ2lzdGVyUG9wcmVnaXN0ZXJQdXNoX1Bvc2l0aW9uVHJhY2VMaXN0ZW5lciZUcmFjZUxpc3RlbmVyJk5vZGVUb1NvdXJjZUluZm9ybWF0aW9uTWl4aW5Qb3NpdGlvblRyYWNlTGlzdGVuZXJTdGVwS2luZC5OT19JTkZPcmVnaXN0ZXJQb3NpdGlvbnNvdXJjZVBvc2l0aW9uS2luZFN0ZXBLaW5kLkZVTl9FTlRSWVN0ZXBLaW5kLkNBTExjYWxsUG9zaXRpb25TdGVwS2luZC5BQ0NFU1NTdGVwS2luZC5ORVdTdGVwS2luZC5SRVRVUk5TdGVwS2luZC5CUkVBS1N0ZXBLaW5kLkNPTlRJTlVFU3RlcEtpbmQuVEhST1dTdGVwS2luZC5FWFBSRVNTSU9OX1NUQVRFTUVOVFN0ZXBLaW5kLklGX0NPTkRJVElPTlN0ZXBLaW5kLkZPUl9JTklUSUFMSVpFUlN0ZXBLaW5kLkZPUl9DT05ESVRJT05TdGVwS2luZC5GT1JfVVBEQVRFU3RlcEtpbmQuV0hJTEVfQ09ORElUSU9OU3RlcEtpbmQuRE9fQ09ORElUSU9OU3RlcEtpbmQuU1dJVENIX0VYUFJFU1NJT05DYWxsUG9zaXRpb25jb2RlUG9zaXRpb25LaW5kZ2V0U2VtYW50aWNQb3NpdGlvbkZvckNhbGxwdXJlQWNjZXNzdGFyZ2V0QWNjZXNzVW5leHBlY3RlZCBwcm9wZXJ0eSBhY2Nlc3MgT2Zmc2V0c3RhdGVtZW50T2Zmc2V0c3ViZXhwcmVzc2lvbk9mZnNldGxlZnRUb1JpZ2h0T2Zmc2V0T2Zmc2V0W3N0YXRlbWVudE9mZnNldD1sZWZ0VG9SaWdodE9mZnNldD1zdWJleHByZXNzaW9uT2Zmc2V0PUJyYW5jaEtpbmRCcmFuY2hLaW5kLkNPTkRJVElPTkJyYW5jaEtpbmQuTE9PUEJyYW5jaEtpbmQuQ0FUQ0hCcmFuY2hLaW5kLkZJTkFMTFlCcmFuY2hLaW5kLkNBU0VDT05ESVRJT05MT09QU3RlcEtpbmRGVU5fRU5UUllGVU5fRVhJVEFDQ0VTU0VYUFJFU1NJT05fU1RBVEVNRU5USUZfQ09ORElUSU9ORk9SX0lOSVRJQUxJWkVSRk9SX0NPTkRJVElPTkZPUl9VUERBVEVXSElMRV9DT05ESVRJT05ET19DT05ESVRJT05TV0lUQ0hfRVhQUkVTU0lPTk5PX0lORk9UcmFjZUxpc3RlbmVyb25TdGFydG9uRW5kcHVzaEJyYW5jaHBvcEJyYW5jaEphdmFTY3JpcHRUcmFjZXJjb2RlUG9zaXRpb25zbGlzdGVuZXJzb2Zmc2V0UG9zaXRpb25hY3RpdmVub3RpZnlTdGFydG5vdGlmeUVuZG5vdGlmeVB1c2hCcmFuY2hub3RpZnlQb3BCcmFuY2hub3RpZnlTdGVwZ2V0U3ludGF4T2Zmc2V0Z2V0T2Zmc2V0Rm9yTm9kZWJyYW5jaG5vZGVMaXN0X2hhbmRsZUZ1bmN0aW9uYWN0aXZlQmVmb3JlZW50cnlPZmZzZXRleGl0T2Zmc2V0dmlzaXRTdWJleHByZXNzaW9uY29kZU9mZnNldG9sZFN0ZXBzb2xkUG9zaXRpb25wb3NpdGlvbk5vZGVjYWxsT2Zmc2V0Q292ZXJhZ2Vfbm9kZXNXaXRoSW5mb19ub2Rlc1dpdGhJbmZvQ291bnRfbm9kZXNXaXRob3V0SW5mb19ub2Rlc1dpdGhvdXRJbmZvQ291bnRfbm9kZXNXaXRob3V0SW5mb0NvdW50QnlUeXBlX25vZGVzV2l0aG91dE9mZnNldF9ub2Rlc1dpdGhvdXRPZmZzZXRDb3VudHJlZ2lzdGVyTm9kZVdpdGhJbmZvcmVnaXN0ZXJOb2RlV2l0aG91dEluZm9yZWdpc3Rlck5vZGVzV2l0aG91dE9mZnNldGNvbGxhcHNlZ2V0Q292ZXJhZ2VSZXBvcnQlKSBub2RlcyB3aXRoIGluZm8uTm8gbm9kZXMuIG5vZGUgd2l0aG91dCBvZmZzZXQuCk5vZGVzIHdpdGhvdXQgaW5mbyAoKSBieSBydW50aW1lIHR5cGU6X0NvdmVyYWdlTGlzdGVuZXImVHJhY2VMaXN0ZW5lciZOb2RlVG9Tb3VyY2VJbmZvcm1hdGlvbk1peGluQ292ZXJhZ2VMaXN0ZW5lckNvZGVQb3NpdGlvbkNvdmVyYWdlZ2V0U291cmNlTG9jYXRpb25kYXJ0MmpzLmpzX21vZGVsLmVsZW1lbnRzQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcEtleUpMaWJyYXJ5SkNsYXNzS2luZEpDbGFzc0tpbmQubm9kZUpDbGFzc0tpbmQuY2xvc3VyZUpDbGFzc0tpbmQucmVjb3JkX0pDbGFzcyZJbmRleGVkQ2xhc3MmQ2xhc3NIaWVyYXJjaHlOb2Rlc01hcEtleV9jbGFzc0hpZXJhcmNoeU5vZGVKQ2xhc3NKVHlwZWRlZkpNZW1iZXJLaW5kSk1lbWJlcktpbmQuZ2VuZXJhdGl2ZUNvbnN0cnVjdG9ySk1lbWJlcktpbmQuZmFjdG9yeUNvbnN0cnVjdG9ySk1lbWJlcktpbmQuY29uc3RydWN0b3JCb2R5Sk1lbWJlcktpbmQuZmllbGRKTWVtYmVyS2luZC5nZXR0ZXJKTWVtYmVyS2luZC5zZXR0ZXJKTWVtYmVyS2luZC5tZXRob2RKTWVtYmVyS2luZC5jbG9zdXJlRmllbGRKTWVtYmVyS2luZC5jbG9zdXJlQ2FsbE1ldGhvZEpNZW1iZXJLaW5kLmdlbmVyYXRvckJvZHlKTWVtYmVyS2luZC5zaWduYXR1cmVNZXRob2RKTWVtYmVyS2luZC5yZWNvcmRGaWVsZGdlbmVyYXRpdmVDb25zdHJ1Y3RvcmZhY3RvcnlDb25zdHJ1Y3RvcmNsb3N1cmVDYWxsTWV0aG9kc2lnbmF0dXJlTWV0aG9kcmVjb3JkRmllbGRKTWVtYmVyVW5leHBlY3RlZCBKTWVtYmVyS2luZCBKRnVuY3Rpb25KQ29uc3RydWN0b3JKR2VuZXJhdGl2ZUNvbnN0cnVjdG9yZ2VuZXJhdGl2ZS1jb25zdHJ1Y3RvckpGYWN0b3J5Q29uc3RydWN0b3JmYWN0b3J5LWNvbnN0cnVjdG9ySkNvbnN0cnVjdG9yQm9keWNvbnN0cnVjdG9yLWJvZHljb25zdHJ1Y3Rvcl9ib2R5Sk1ldGhvZGdlbmVyYXRvci1ib2R5Z2VuZXJhdG9yX2JvZHlKR2V0dGVySlNldHRlcmNsb3N1cmUtY2FsbC1tZXRob2RjbG9zdXJlX2NhbGxKU2lnbmF0dXJlTWV0aG9kc2lnbmF0dXJlLW1ldGhvZEpUeXBlVmFyaWFibGVLaW5kSlR5cGVWYXJpYWJsZUtpbmQuY2xzSlR5cGVWYXJpYWJsZUtpbmQubWVtYmVySlR5cGVWYXJpYWJsZUtpbmQudHlwZWRlZkpUeXBlVmFyaWFibGVLaW5kLmxvY2FsSlR5cGVWYXJpYWJsZXR5cGUtdmFyaWFibGVVbmV4cGVjdGVkIHR5cGUgdmFyaWFibGUgZGVjbGFyZXIganNFbGVtZW50UHJlZml4SFRyYWNlclRyYWNlcnRyYWNlQWN0aXZldHJhY2VGaWx0ZXJjZmdpc0VuYWJsZWR0cmFjZUNvbXBpbGF0aW9uY29tcGlsYXRpb25wcmludFByb3BlcnR5bWlsbGlzZWNvbmRzU2luY2VFcG9jaHRyYWNlR3JhcGhpck9iamVjdFRyYWNlclV0aWxfaW5kdGFnTmFtZWJlZ2luX2VuZF9hZGRJbmRlbnRwcmludEVtcHR5UHJvcGVydHlmb3JtYXRQcnR5aW52YWxpZCBwcm9wZXJ0eSB0eXBlOiBUUkFDRV9GSUxURVJfUEFUVEVSTl9GUk9NX0VOVklST05NRU5UVFJBQ0VfRklMVEVSX1BBVFRFUk5fRk9SX1RFU1RUUkFDRV9GSUxURVJfUEFUVEVSTlNzYUNvZGVHZW5lcmF0b3JDaGVja2VkTW9kZUhlbHBlcmdldFN0YXRpY1VzZWdlbmVyYXRlQWRkaXRpb25hbEFyZ3VtZW50c1Byb3BlcnR5Q2hlY2tlZE1vZGVIZWxwZXJhZGRpdGlvbmFsQXJndW1lbnRxdW90ZU5hbWVUeXBlVmFyaWFibGVDaGVja2VkTW9kZUhlbHBlckZ1bmN0aW9uVHlwZVJlcHJlc2VudGF0aW9uQ2hlY2tlZE1vZGVIZWxwZXJGdXR1cmVPclJlcHJlc2VudGF0aW9uQ2hlY2tlZE1vZGVIZWxwZXJTdWJ0eXBlQ2hlY2tlZE1vZGVIZWxwZXJDaGVja2VkTW9kZUhlbHBlcnNoZWxwZXJzc3RyaW5nVHlwZUNhc3RzdHJpbmdUeXBlQ2hlY2tkb3VibGVUeXBlQ2FzdGRvdWJsZVR5cGVDaGVja251bVR5cGVDYXN0bnVtVHlwZUNoZWNrYm9vbFR5cGVDYXN0Ym9vbFR5cGVDaGVja2ludFR5cGVDYXN0aW50VHlwZUNoZWNrbnVtYmVyT3JTdHJpbmdTdXBlck5hdGl2ZVR5cGVDYXN0bnVtYmVyT3JTdHJpbmdTdXBlck5hdGl2ZVR5cGVDaGVja251bWJlck9yU3RyaW5nU3VwZXJUeXBlQ2FzdG51bWJlck9yU3RyaW5nU3VwZXJUeXBlQ2hlY2tzdHJpbmdTdXBlck5hdGl2ZVR5cGVDYXN0c3RyaW5nU3VwZXJOYXRpdmVUeXBlQ2hlY2tzdHJpbmdTdXBlclR5cGVDYXN0c3RyaW5nU3VwZXJUeXBlQ2hlY2tsaXN0VHlwZUNhc3RsaXN0VHlwZUNoZWNrbGlzdFN1cGVyTmF0aXZlVHlwZUNhc3RsaXN0U3VwZXJOYXRpdmVUeXBlQ2hlY2tsaXN0U3VwZXJUeXBlQ2FzdGxpc3RTdXBlclR5cGVDaGVja2ludGVyY2VwdGVkVHlwZUNhc3RpbnRlcmNlcHRlZFR5cGVDaGVja3Byb3BlcnR5VHlwZUNhc3Rwcm9wZXJ0eVR5cGVDaGVja2Z1bmN0aW9uVHlwZUNhc3RmdW5jdGlvblR5cGVDaGVja2Z1dHVyZU9yQ2FzdGZ1dHVyZU9yQ2hlY2tjaGVja2VkTW9kZUhlbHBlckJ5TmFtZWdldENoZWNrZWRNb2RlSGVscGVydHlwZUNhc3RnZXRDaGVja2VkTW9kZUhlbHBlckludGVybmFsbmF0aXZlQ2hlY2tPbmx5Z2V0TmF0aXZlQ2hlY2tlZE1vZGVIZWxwZXJnZXRDaGVja2VkTW9kZUhlbHBlck5hbWVJbnRlcm5hbFVuZXhwZWN0ZWQgdHlwZTogbmF0aXZlQ2hlY2tUeXBlQ2FzdFR5cGVDaGVja251bWJlck9yU3RyaW5nU3VwZXJOYXRpdmVudW1iZXJPclN0cmluZ1N1cGVyc3RyaW5nU3VwZXJOYXRpdmVzdHJpbmdTdXBlcmxpc3RTdXBlck5hdGl2ZWxpc3RTdXBlcmpzX2JhY2tlbmQucnVudGltZV90eXBlc09uVmFyaWFibGVDYWxsYmFja1Nob3VsZEVuY29kZVR5cGVkZWZDYWxsYmFja1J1bnRpbWVUeXBlc0NoZWNrc3JlcXVpcmVkQ2hlY2tzVHJpdmlhbFR5cGVzQ2hlY2tzX3R5cGVDaGVja3NfYWxsQ2xhc3Nlc1J1bnRpbWVUeXBlc0NoZWNrc0J1aWxkZXJjb21wdXRlUmVxdWlyZWRDaGVja3NUcml2aWFsUnVudGltZVR5cGVzQ2hlY2tzQnVpbGRlcl9zdWJzdGl0dXRpb25zY2xhc3NVc2VNYXBjbGFzc1VzZWRpcmVjdEluc3RhbmNlY2hlY2tlZEluc3RhbmNlY2hlY2tlZFR5cGVBcmd1bWVudF9yZXF1aXJlZENoZWNrc19jb21wdXRlQ2hlY2tzY29tcHV0ZUNoZWNrZWRDbGFzc2VzaW1wbGljaXRJc0NoZWNrc2NvbXB1dGVDaGVja2VkRnVuY3Rpb25zUnVudGltZVR5cGVzU3Vic3RpdHV0aW9uc01peGluX3R5cGVzX3J0aU5lZWRoYW5kbGVkZW1wdHlVc2Vjb21wdXRlQ2hlY2tzY2hlY2tzc3VwZXJDaGVja3NleHRlbmRzU3VwZXJDbGFzc1RyaXZpYWxseWlzVHJpdmlhbFN1YnN0aXR1dGlvbmNvbXB1dGVTdWJzdGl0dXRpb25uZWVkc0lzaW5oZXJpdGVkQ2xhc3Nlc3Byb2Nlc3NTdXBlcnR5cGVjaGVja2VkQ2xhc3NjaGVja2VkQ2xhc3NVc2Vpbmhlcml0c0Zyb21DaGVja2VkQ2xhc3NuZWVkc1R5cGVBcmd1bWVudHNGb3JDaGVja2VkQ2xhc3NjbGFzc05lZWRzVHlwZUFyZ3VtZW50c2lzQ2hlY2tlZGltcGxlbWVudHNDaGVja2VkVHJpdmlhbGx5aXNDaGVja2VkR2VuZXJpY2NoZWNrRnJvbVN1cGVyQ2xhc3NnZXRDbGFzc2VzVXNlZEluU3Vic3RpdHV0aW9uc2luc3RhbnRpYXRlZGNsYXNzQ2hlY2tzY29sbGVjdEFsbGdldFN1YnN0aXR1dGlvbmFsd2F5c0dlbmVyYXRlRnVuY3Rpb25Ucml2aWFsUnVudGltZVR5cGVzU3Vic3RpdHV0aW9uc1J1bnRpbWVUeXBlc0VuY29kZXJnZXRTaWduYXR1cmVFbmNvZGluZ3RoaXNfdGVtcGxhdGVGb3JJc0Z1bmN0aW9uVHlwZXRlbXBsYXRlRm9ySXNGdXR1cmVPclR5cGV0ZW1wbGF0ZUZvcklzVm9pZFR5cGV0ZW1wbGF0ZUZvcklzRHluYW1pY1R5cGV0ZW1wbGF0ZUZvcklzSnNJbnRlcm9wVHlwZUFyZ3VtZW50b25WYXJpYWJsZXNob3VsZEVuY29kZVR5cGVkZWZnZXRKc0ludGVyb3BUeXBlQXJndW1lbnRzX1J1bnRpbWVUeXBlc0NoZWNrc190eXBlTGl0ZXJhbHNfUnVudGltZVR5cGVzSW1wbCZPYmplY3QmUnVudGltZVR5cGVzU3Vic3RpdHV0aW9uc01peGluUnVudGltZVR5cGVzSW1wbGNoZWNrZWRUeXBlQXJndW1lbnRzY2hlY2tlZEJvdW5kc2NhY2hlZFJlcXVpcmVkQ2hlY2tzY2xhc3NVc2VNYXBGb3JUZXN0aW5ndHlwZVZhcmlhYmxlVGVzdHNmb3JSdGlOZWVkc2V4cGxpY2l0SXNDaGVja3NjaGVja2VkRnVuY3Rpb25UeXBlc3R5cGVMaXRlcmFsc2xpdmVUeXBlVmlzaXRvcm9uQ2xhc3NUeXBlVmlzaXRvclN0YXRlLmNvdmFyaWFudFR5cGVBcmd1bWVudFR5cGVWaXNpdG9yU3RhdGUuY29udHJhdmFyaWFudFR5cGVBcmd1bWVudFR5cGVWaXNpdG9yU3RhdGUudHlwZUxpdGVyYWxUeXBlVmlzaXRvclN0YXRlLmRpcmVjdHRlc3RlZFR5cGVWaXNpdG9ydmlzaXRlZFN1cGVyQ2xhc3Nlc3Byb2Nlc3NNZXRob2RUeXBlQXJndW1lbnRzaXNGdW5jdGlvbkNoZWNrZWRwcm9jZXNzQ2hlY2tlZFR5cGVsaXZlQ2xhc3Nlc21ldGhvZE5lZWRzVHlwZUFyZ3VtZW50c1J1bnRpbWVUeXBlc0VuY29kZXJJbXBsX3JlcHJlc2VudGF0aW9uR2VuZXJhdG9yZ2V0VHlwZVZhcmlhYmxlTmFtZWdldFR5cGVFbmNvZGluZ2VuY29kaW5nZnVuY3Rpb24oIykgeyByZXR1cm4gIyB9Y29udGV4dE5hbWVmdW5jdGlvbiAoKSB7IHJldHVybiAjKCMsICMsICMpOyB9ZnVuY3JldG9wdFR5cGVSZXByZXNlbnRhdGlvbkdlbmVyYXRvcl9ydGlUYWdzdHlwZWRlZkJpbmRpbmdzZW5jb2RlVHlwZWRlZnJlcHJlc2VudGF0aW9uZ2V0SmF2YVNjcmlwdENsYXNzTmFtZWdldER5bmFtaWNWYWx1ZWdldFZvaWRWYWx1ZS0xZ2V0SnNJbnRlcm9wVHlwZUFyZ3VtZW50VmFsdWUtMm51bWJlcmV4cHJlc3Npb25UZW1wbGF0ZUZvcicgaW4gIyMgPT09IC0xIyA9PSBudWxsIyA9PT0gLTJhZGRQcm9wZXJ0eXNob3VsZEVuY29kZXVuYWxpYXNlZFR5cGVvbGRCaW5kaW5nc2VuY29kZWRUeXBlZGVmVHlwZUNoZWNrTWFwcGluZ2hvbGRlckFyZ3VtZW50Q29sbGVjdG9yY29sbGVjdGlzVHlwZUFyZ3VtZW50RnVuY3Rpb25Bcmd1bWVudENvbGxlY3RvclR5cGVWaXNpdG9yU3RhdGVjb3ZhcmlhbnRUeXBlQXJndW1lbnRjb250cmF2YXJpYW50VHlwZUFyZ3VtZW50VHlwZVZpc2l0b3JfdmlzaXRlZEZ1bmN0aW9uVHlwZVZhcmlhYmxlc29uVHlwZVZhcmlhYmxlb25GdW5jdGlvblR5cGVjb3ZhcmlhbnRBcmd1bWVudFVuZXhwZWN0ZWQgVHlwZVZpc2l0b3JTdGF0ZSBjb250cmF2YXJpYW50QXJndW1lbnRydGlWYWx1ZUNsYXNzVXNlKF9jb21wdXRlRnVuY3Rpb25UeXBlc2lnbmF0dXJlRnVuY3Rpb25jYWxsRnVuY3Rpb25qc19iYWNrZW5kLnJ1bnRpbWVfdHlwZXNfY29kZWdlbkNsYXNzRnVuY3Rpb25UeXBlX25leHRIYXNoVHlwZUNoZWNrKGNscz0sbmVlZHNJcz0sc3Vic3RpdHV0aW9uPUNsYXNzQ2hlY2tzQ2xhc3NDaGVja3MoVHlwZUNoZWNrc3RyaXZpYWxqc0ludGVyb3BTdWJzdGl0dXRpb24oaXNUcml2aWFsPWlzRnVuY3Rpb249LGlzSnNJbnRlcm9wPSxhcmd1bWVudHM9cGFyYW1ldGVycz1SdW50aW1lVHlwZXNTdWJzdGl0dXRpb25zaGFzVHlwZUFyZ3VtZW50c2pzX2JhY2tlbmQucnVudGltZV90eXBlc19uZXdlbmNvZGVSZWNpcGVlbnZpcm9ubWVudFN0cnVjdHVyZWVuY29kZVJlY2lwZVdpdGhWYXJpYWJsZXNSZXBsYWNlQnlBbnllbmNvZGVEaXJlY3RTdXBlcnR5cGVSZWNpcGVkZWNsYXJpbmdUeXBlc3VwZXJ0eXBlQXJndW1lbnRldmFsdWF0ZVJlY2lwZWVuY29kZVNpZ25hdHVyZV9ydGlTdWJzdGl0dXRpb25zaGFja1R5cGVWYXJpYWJsZXNUb0FueWNsYXNzVHlwZWluZGV4VHlwZVZhcmlhYmxlc09uRGVjbGFyaW5nQ2xhc3NSZWNpcGVFbmNvZGVySW1wbC5nZXRTaWduYXR1cmVFbmNvZGluZ19SZWNpcGVHZW5lcmF0b3JfZW5jb2Rlcl9lbnZpcm9ubWVudF9yZWNpcGVfZnJhZ21lbnRzX2NvZGVzX2ZsdXNoQ29kZXNfc3RhcnRGdWxsVHlwZUVudmlyb25tZW50UmVjaXBlX2VtaXRDb2RlX2VtaXRJbnRlZ2VyX2VtaXRTdHJpbmdVbmVzY2FwZWRfZW1pdE5hbWVfZW1pdEV4dGVuc2lvbk9wX2luZGV4SW50b0NsYXNzVHlwZVZhcmlhYmxlc2VtaXROYW1lZEdyb3VwX1J1bGVzZXRFbnRyeV90YXJnZXRUeXBlX3N1cGVydHlwZXNSdWxlc2V0X2VudHJpZXN0YXJnZXRUeXBlUnVsZXNldEVuY29kZXJfcmVjaXBlRW5jb2Rlcl9sZWZ0QnJhY2VzdHJpbmdQYXJ0X3JpZ2h0QnJhY2VfbGVmdEJyYWNrZXRfcmlnaHRCcmFja2V0X2NvbG9uX2NvbW1hX3F1b3RlX2lzT2JqZWN0X3ByZXByb2Nlc3NTdXBlcnR5cGV0aGlzU3VwZXJ0eXBlc3VwZXJ0eXBlQXJndW1lbnRzX3ByZXByb2Nlc3NFbnRyeV9wcmVwcm9jZXNzUnVsZXNldHJ1bGVzZXRlbmNvZGVSdWxlc2V0X2VuY29kZVJ1bGVzZXRjb25jYXRlbmF0ZVN0cmluZ3Nqb2luTGl0ZXJhbHNfZW5jb2RlRW50cnlfZW5jb2RlU3VwZXJ0eXBlX2VuY29kZVR5cGVWYXJpYWJsZV9lbmNvZGVTdXBlcnR5cGVBcmd1bWVudHVuaXZlcnNlLnNpZGVfZWZmZWN0c3NpZGUtZWZmZWN0c0ZMQUdfQ0hBTkdFU19JTkRFWEZMQUdfQ0hBTkdFU19JTlNUQU5DRV9QUk9QRVJUWUZMQUdfQ0hBTkdFU19TVEFUSUNfUFJPUEVSVFlGTEFHX0NIQU5HRVNfQ09VTlRGTEFHX0RFUEVORFNfT05fSU5ERVhfU1RPUkVGTEFHX0RFUEVORFNfT05fSU5TVEFOQ0VfUFJPUEVSVFlfU1RPUkVGTEFHX0RFUEVORFNfT05fU1RBVElDX1BST1BFUlRZX1NUT1JFRkxBR19ERVBFTkRTX09OX0NPVU5UX2ZsYWdzZnJvbUZsYWdzU2lkZUVmZmVjdHMuaGFzaENvZGVfZ2V0RmxhZ19zZXRGbGFnX2NsZWFyRmxhZ2dldENoYW5nZXNGbGFnc2dldERlcGVuZHNPbkZsYWdzZGVwZW5kc09uU3RhdGljUHJvcGVydHlTdG9yZWNoYW5nZXNTdGF0aWNQcm9wZXJ0eWRlcGVuZHNPbkluZGV4U3RvcmVjaGFuZ2VzSW5kZXhkZXBlbmRzT25JbnN0YW5jZVByb3BlcnR5U3RvcmVjaGFuZ2VzSW5zdGFuY2VQcm9wZXJ0eWNvbXB1dGVEZXBlbmRzT25GbGFnc2RlcGVuZHNPbmRlcGVuZHNGbGFnc1NpZGVFZmZlY3RzKHJlYWRzIG5vdGhpbmcgYW55dGhpbmcgaW5kZXggZmllbGQgc3RhdGljOyB3cml0ZXNTaWRlRWZmZWN0c0J1aWxkZXJfbWVtYmVyX2ZyZWVfZGVwZW5kaW5nZnJlZVNpZGVFZmZlY3RzQnVpbGRlcihtZW1iZXI9ZnJlZT1zaWRlRWZmZWN0cz1kZXBlbmRpbmc9ZGFydDJqcy5zb3VyY2VfaW5mb3JtYXRpb24ua2VybmVsS2VybmVsU291cmNlSW5mb3JtYXRpb25CdWlsZGVyd2l0aENvbnRleHRfZ2V0U291cmNlTG9jYXRpb25ObyBsb2NhdGlvbiBmb3VuZCBmb3IgX2J1aWxkRnVuY3Rpb25fYnVpbGRUcmVlTm9kZV9idWlsZEZ1bmN0aW9uRW5kX2J1aWxkRnVuY3Rpb25FeGl0X2J1aWxkQm9keV9idWlsZE1lbWJlckJvZHlfYnVpbGRNZW1iZXJFeGl0bmV3Q29udGV4dEtlcm5lbFNvdXJjZUxvY2F0aW9uY29tcHV0ZUtlcm5lbEVsZW1lbnROYW1lRm9yU291cmNlTWFwczxhbm9ueW1vdXMgZnVuY3Rpb24+Ljxhbm9ueW1vdXMgZnVuY3Rpb24+ZW5jbG9zaW5nTWVtYmVyZW5jbG9zaW5nTWVtYmVyTmFtZWpzLnNvdXJjZV9tYXBwaW5nSmF2YVNjcmlwdFNvdXJjZUluZm9ybWF0aW9uU3RyYXRlZ3lzb3VyY2VNYXBwZXJQcm92aWRlclNvdXJjZUluZm9ybWF0aW9uUmVhZGVyQ29kZVBvc2l0aW9uTGlzdGVuZXJTb3VyY2VNYXBwZXJQcm92aWRlclNvdXJjZU1hcHBlclByb3ZpZGVySW1wbFNvdXJjZU1hcHBlclNvdXJjZUxvY2F0aW9uc01hcHBlclNvdXJjZUluZm9ybWF0aW9uUHJvY2Vzc29yZGFydDJqcy5qc19oZWxwZXJzLmltcGFjdEJhY2tlbmRGZWF0dXJlQmFja2VuZEZlYXR1cmUubmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZ0JhY2tlbmRGZWF0dXJlLm5lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5bmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZ25lZWRUb0luaXRpYWxpemVEaXNwYXRjaFByb3BlcnR5QmFja2VuZEltcGFjdGdsb2JhbFVzZXNnbG9iYWxDbGFzc2Vzb3RoZXJJbXBhY3RzX2ZlYXR1cmVzZmVhdHVyZXNjcmVhdGVJbXBhY3R3b3JsZEltcGFjdEJ1aWxkZXJvdGhlckltcGFjdEJhY2tlbmRJbXBhY3RzX25ld1J0aV9nZXRSdW50aW1lVHlwZUFyZ3VtZW50X2NvbXB1dGVTaWduYXR1cmVfbWFpbldpdGhBcmd1bWVudHNfYXN5bmNCb2R5X3N5bmNTdGFyQm9keV9hc3luY1N0YXJCb2R5X3R5cGVWYXJpYWJsZUJvdW5kQ2hlY2tfYWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25fZmFsbFRocm91Z2hFcnJvcl9hc0NoZWNrX3Rocm93Tm9TdWNoTWV0aG9kX3N0cmluZ1ZhbHVlc19udW1WYWx1ZXNfYm9vbFZhbHVlc19udWxsVmFsdWVfbGlzdFZhbHVlc190aHJvd1J1bnRpbWVFcnJvcl90aHJvd1Vuc3VwcG9ydGVkRXJyb3Jfc3VwZXJOb1N1Y2hNZXRob2RfY29uc3RhbnRNYXBMaXRlcmFsX2NvbnN0YW50U2V0TGl0ZXJhbF9zeW1ib2xDb25zdHJ1Y3Rvcl9jb25zdFN5bWJvbF9hc3NlcnRXaXRob3V0TWVzc2FnZV9hc3NlcnRXaXRoTWVzc2FnZV9hc3luY0ZvckluX3N0cmluZ0ludGVycG9sYXRpb25fc3RyaW5nSnV4dGFwb3NpdGlvbl9jYXRjaFN0YXRlbWVudF90aHJvd0V4cHJlc3Npb25fbGF6eUZpZWxkX3R5cGVMaXRlcmFsX3N0YWNrVHJhY2VJbkNhdGNoX3N5bmNGb3JJbl90eXBlVmFyaWFibGVFeHByZXNzaW9uX3R5cGVDaGVja19nZW5lcmljVHlwZUNoZWNrX2dlbmVyaWNJc0NoZWNrX3R5cGVWYXJpYWJsZVR5cGVDaGVja19mdW5jdGlvblR5cGVDaGVja19mdXR1cmVPclR5cGVDaGVja19uYXRpdmVUeXBlQ2hlY2tfY2xvc3VyZV9pbnRlcmNlcHRvclVzZV9udW1DbGFzc2VzX2xpc3RPclN0cmluZ0NsYXNzZXNfbmF0aXZlT3JFeHRlbmRzQ2xhc3NfbGlzdENsYXNzZXNfanNJbmRleGluZ0JlaGF2aW9yX3RyYWNlSGVscGVyX2Fzc2VydFVucmVhY2hhYmxlX3J1bnRpbWVUeXBlU3VwcG9ydF9kZWZlcnJlZExvYWRpbmdfbm9TdWNoTWV0aG9kU3VwcG9ydF9sb2FkTGlicmFyeV9tZW1iZXJDbG9zdXJlX3N0YXRpY0Nsb3N1cmVfdHlwZVZhcmlhYmxlTWlycm9yX2dlbmVyaWNJbnN0YW50aWF0aW9uX3J0aUFkZFJ1bGVzbmV3UnRpSW1wYWN0c2xpc3RWYWx1ZXNtYWluV2l0aEFyZ3VtZW50c2FzeW5jQm9keXN5bmNTdGFyQm9keWFzeW5jU3RhckJvZHl0eXBlVmFyaWFibGVCb3VuZENoZWNrYWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25fbmVlZHNTdHJpbmdOZWVkZWQgdG8gZW5jb2RlIHRoZSBtZXNzYWdlLl9uZWVkc0xpc3ROZWVkZWQgdG8gZW5jb2RlIHRoZSBhcmd1bWVudHMgZm9yIHRocm93IE5vU3VjaE1ldGhvZEVycm9yLk5lZWRlZCB0byBlbmNvZGUgdGhlIG5hbWUgZm9yIHRocm93IE5vU3VjaE1ldGhvZEVycm9yLnN0cmluZ1ZhbHVlc251bVZhbHVlc2ludFZhbHVlc2RvdWJsZVZhbHVlc2Jvb2xWYWx1ZXNzdXBlck5vU3VjaE1ldGhvZF9uZWVkc0ludE5lZWRlZCB0byBlbmNvZGUgdGhlIGludm9jYXRpb24ga2luZCBvZiBzdXBlci5ub1N1Y2hNZXRob2QuTmVlZGVkIHRvIGVuY29kZSB0aGUgYXJndW1lbnRzIG9mIHN1cGVyLm5vU3VjaE1ldGhvZC5OZWVkZWQgdG8gZW5jb2RlIHRoZSBuYW1lIG9mIHN1cGVyLm5vU3VjaE1ldGhvZC5jb25zdGFudE1hcExpdGVyYWxjb25zdGFudFNldExpdGVyYWxzeW1ib2xDb25zdHJ1Y3RvcmNvbnN0U3ltYm9sYXNzZXJ0V2l0aG91dE1lc3NhZ2Vhc3NlcnRXaXRoTWVzc2FnZWFzeW5jRm9ySW5zdHJpbmdJbnRlcnBvbGF0aW9uU3RyaW5ncyBhcmUgY3JlYXRlZC5zdHJpbmdKdXh0YXBvc2l0aW9uU3RyaW5nLmNvbmNhdCBpcyB1c2VkLm51bGxMaXRlcmFsYm9vbExpdGVyYWxpbnRMaXRlcmFsZG91YmxlTGl0ZXJhbHN0cmluZ0xpdGVyYWxjYXRjaFN0YXRlbWVudGxhenlGaWVsZHN0YWNrVHJhY2VJbkNhdGNoc3luY0ZvckludHlwZVZhcmlhYmxlRXhwcmVzc2lvbk5lZWRlZCBmb3IgYWNjZXNzaW5nIGEgdHlwZSB2YXJpYWJsZSBsaXRlcmFsIG9uIHRoaXMuZ2VuZXJpY1R5cGVDaGVja2dlbmVyaWNJc0NoZWNrdHlwZVZhcmlhYmxlVHlwZUNoZWNrZnV0dXJlT3JUeXBlQ2hlY2tuYXRpdmVUeXBlQ2hlY2tpbnRlcmNlcHRvclVzZW51bUNsYXNzZXNsaXN0T3JTdHJpbmdDbGFzc2VzbmF0aXZlT3JFeHRlbmRzQ2xhc3NsaXN0Q2xhc3Nlc2pzSW5kZXhpbmdCZWhhdmlvcnJ1bnRpbWVUeXBlU3VwcG9ydGRlZmVycmVkTG9hZGluZ25vU3VjaE1ldGhvZFN1cHBvcnRtZW1iZXJDbG9zdXJldHlwZVZhcmlhYmxlTWlycm9yZ2V0R2VuZXJpY0luc3RhbnRpYXRpb25ydGlBZGRSdWxlc05lZWRlZCB0byBlbmNvZGUgdGhlIG5ldyBSVEkgcnVsZXNldC5qc19iYWNrZW5kLmJhY2tlbmQuY29kZWdlbl9saXN0ZW5lckNvZGVnZW5FbnF1ZXVlckxpc3RlbmVyX2ltcGFjdHNfYmFja2VuZFVzYWdlX2N1c3RvbUVsZW1lbnRzQW5hbHlzaXNfbmF0aXZlRW5xdWV1ZXJfaXNOb1N1Y2hNZXRob2RVc2VkX2lzTmV3UnRpVXNlZG1ldGhvZE5lZWRzU2lnbmF0dXJlX3JlZ2lzdGVyQ29tcHV0ZVNpZ25hdHVyZW9uSW5zdGFudGlhdGVkVHlwZV9jb21wdXRlTWFpbkltcGFjdHByb2Nlc3NOYXRpdmVDbGFzc2VzbmV3UnRpSW1wYWN0X2NvbXB1dGVJbXBhY3RGb3JDb21waWxlVGltZUNvbnN0YW50X2NvbXB1dGVJbXBhY3RGb3JDb21waWxlVGltZUNvbnN0YW50SW50ZXJuYWxfY29tcHV0ZUltcGFjdEZvckluc3RhbnRpYXRlZENvbnN0YW50VHlwZXJlZ2lzdGVyVHlwZUNvbnN0YW50X3Byb2Nlc3NDbGFzc0N1c3RvbUVsZW1lbnRzQW5hbHlzaXNCYXNlZGVtYW5kZWRDdXN0b21FbGVtZW50c1Jlc29sdXRpb25BbmFseXNpc2JhY2tlbmRVc2FnZUJ1aWxkZXJhbGxDbGFzc2VzU2VsZWN0ZWRyZWdpc3RlclR5cGVMaXRlcmFsc2VsZWN0ZWRDbGFzc2VzQ3VzdG9tRWxlbWVudHNDb2RlZ2VuQW5hbHlzaXNuZWVkc1RhYmxlbmVlZHNDbGFzc2FjdGl2ZUNsYXNzZXNjb21wdXRlRXNjYXBpbmdDb25zdHJ1Y3RvcnNDdXN0b21FbGVtZW50c0FuYWx5c2lzSm9pbmZvclJlc29sdXRpb25uZXdBY3RpdmVDbGFzc2VzZXNjYXBpbmdDb25zdHJ1Y3RvcnNyZWdpc3Rlckdsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jeV9tYWtlVHlwZUNvbnN0YW50anNfYmFja2VuZC5iYWNrZW5kLmltcGFjdF90cmFuc2Zvcm1lckltcGFjdFRyYW5zZm9ybWVyUmVzb2x1dGlvbkltcGFjdEphdmFTY3JpcHRJbXBhY3RUcmFuc2Zvcm1lcnByb2Nlc3NCYWNrZW5kSW1wYWN0ZmVhdHVyZWhhc0FzQ2FzdGhhc1R5cGVMaXRlcmFsb25Jc0NoZWNrcmVnaXN0ZXJDbGFzc1VzaW5nVHlwZVZhcmlhYmxlTGl0ZXJhbHJlZ2lzdGVyTWV0aG9kVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFscmVnaXN0ZXJMb2NhbEZ1bmN0aW9uVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFsbWFwTGl0ZXJhbFVzZW1hcExpdGVyYWxzc2V0TGl0ZXJhbFVzZXNldExpdGVyYWxzbGlzdExpdGVyYWxVc2VsaXN0TGl0ZXJhbHNydW50aW1lVHlwZVVzZXJ1bnRpbWVUeXBlVXNlc3JlZ2lzdGVyUnVudGltZVR5cGVVc2Vjb25zdFN5bWJvbE5hbWVzY29uc3RhbnRMaXRlcmFsc1VuZXhwZWN0ZWQgY29uc3RhbnQgbGl0ZXJhbDogY2xhc3NFbnRpdHlzZWVuQ2xhc3Nlc0NvZGVnZW5JbXBhY3RUcmFuc2Zvcm1lcm9uSXNDaGVja0ZvckNvZGVnZW5oYXNJbnN0YW50aWF0ZWROYXRpdmVDbGFzc2VzanNfYmFja2VuZC5pbnRlcmNlcHRvcl9kYXRhaXNJbnRlcmNlcHRlZE1ldGhvZGZpZWxkSGFzSW50ZXJjZXB0ZWRHZXR0ZXJmaWVsZEhhc0ludGVyY2VwdGVkU2V0dGVyaXNJbnRlcmNlcHRlZE5hbWVpc0ludGVyY2VwdGVkU2VsZWN0b3Jpc0ludGVyY2VwdGVkTWl4aW5TZWxlY3RvcmlzTWl4ZWRJbnRvSW50ZXJjZXB0ZWRDbGFzc2dldEludGVyY2VwdGVkQ2xhc3Nlc09ubWF5R2VuZXJhdGVJbnN0YW5jZW9mQ2hlY2thZGRJbnRlcmNlcHRvcnNhZGRJbnRlcmNlcHRvcnNGb3JOYXRpdmVDbGFzc01lbWJlcnNJbnRlcmNlcHRvckRhdGFJbXBsaW50ZXJjZXB0b3ItZGF0YWludGVyY2VwdGVkTWVtYmVyc2NsYXNzZXNNaXhlZEludG9JbnRlcmNlcHRlZENsYXNzZXNfaW50ZXJjZXB0ZWRNaXhpbkVsZW1lbnRzX2ludGVyY2VwdGVkQ2xhc3Nlc0NhY2hlX25vQ2xhc3Nlc2ludGVyY2VwdGVkTWVtYmVyc0NvdW50X2lzQ29tcGlsZVRpbWVPbmx5Q2xhc3NuYXRpdmVTdWJjbGFzc2VzbmF0aXZlU3ViY2xhc3Nlc09mTWl4aW5JbnRlcmNlcHRvckRhdGFCdWlsZGVySW1wbF9pbnRlcmNlcHRlZEVsZW1lbnRzX2ludGVyY2VwdGVkQ2xhc3Nlc19jbGFzc2VzTWl4ZWRJbnRvSW50ZXJjZXB0ZWRDbGFzc2VzX2ludGVyY2VwdG9yRGF0YWludGVyY2VwdG9yc09uZVNob3RJbnRlcmNlcHRvck9uZVNob3RJbnRlcmNlcHRvcihzZWxlY3Rvcj0sa2V5PVNwZWNpYWxpemVkR2V0SW50ZXJjZXB0b3JTcGVjaWFsaXplZEdldEludGVyY2VwdG9yKGtleT1kYXJ0MmpzLmpzX2VtaXR0ZXJOYXRpdmVDbGFzc0ZpbmRlck5hdGl2ZUVucXVldWVyY2F1c2VOYXRpdmVFbnF1ZXVlckJhc2VfcmVnaXN0ZXJlZENsYXNzZXNfdW51c2VkQ2xhc3Nlc19hbGxVc2VkTWVzc2FnZWVuYWJsZUxpdmVUeXBlQW5hbHlzaXNfcmVnaXN0ZXJUeXBlVXNlc19wcm9jZXNzTmF0aXZlQmVoYXZpb3J1bnVzZWRCZWZvcmVtYXRjaGluZ0NsYXNzZXNfZmluZFVudXNlZENsYXNzZXNNYXRjaGluZ25hdGl2ZUNsYXNzbmF0aXZlVHlwZXNwZWNUeXBlIHdhcyBfb25GaXJzdE5hdGl2ZUNsYXNzQWxsIG5hdGl2ZSB0eXBlcyBtYXJrZWQgYXMgdXNlZCBkdWUgdG8gX2ZpbmROYXRpdmVFeGNlcHRpb25zRXhjZXB0aW9uX25hdGl2ZUNsYXNzRmluZGVyX25hdGl2ZUNsYXNzZXNuYXRpdmVDbGFzc2VzRm9yVGVzdGluZ3JlZ2lzdGVyZWRDbGFzc2VzRm9yVGVzdGluZ25hdGl2ZUNsYXNzZXNjb21wdXRlTmF0aXZlQ2xhc3Nlc2ZvcmNlZCBuYXRpdmUgZWxlbWVudHMgdXNlZCwgIG5hdGl2ZSBlbGVtZW50cyBkZWFkLk5hdGl2ZUNvZGVnZW5FbnF1ZXVlcl9kb25lQWRkU3VidHlwZXN3YXMgcmVzb2x2ZWRfYWRkU3VidHlwZXNkaXJlY3RTdWJ0eXBlcyBuYXRpdmUgY2xhc3NlcywgIG5hdGl2ZSBjbGFzc2VzIG9taXR0ZWQuVGFyZ2V0Q2hlY2tzU3RhY2tGcmFtZWxldEJpbmRpbmdzdHlwZUluZmVyZW5jZU1hcHN0YXRpY1R5cGVQcm92aWRlcktlcm5lbFNzYUdyYXBoQnVpbGRlcl9pblRyeVN0YXRlbWVudGxvY2Fsc0hhbmRsZXJsb29wRGVwdGhqdW1wVGFyZ2V0c3RhcmdldEVsZW1lbnRfaW5pdGlhbFRhcmdldEVsZW1lbnRfY2xvc3VyZURhdGFMb29rdXBfdHJhY2VyX3J0aUVuY29kZXJfY3VycmVudEltcGxpY2l0SW5zdGFudGlhdGlvbnNfaW5mb1JlcG9ydGVyX3JldGhyb3dhYmxlRXhjZXB0aW9uX2xvb3BIYW5kbGVyX3R5cGVCdWlsZGVyX2luRXhwcmVzc2lvbk9mVGhyb3dfaW5saW5pbmdTdGFja19yZXR1cm5Mb2NhbF9yZXR1cm5UeXBlX2luTGF6eUluaXRpYWxpemVyRXhwcmVzc2lvbl9jdXJyZW50RnJhbWVsYXN0T3BlbmVkQmxvY2tfaXNSZWFjaGFibGVsYXN0QWRkZWRQYXJhbWV0ZXJlbGlkZWRQYXJhbWV0ZXJzX2Z1bmN0aW9uVHlwZVBhcmFtZXRlckxvY2Fsc19lbnRlckZyYW1lX3NvdXJjZUluZm9ybWF0aW9uQnVpbGRlcl9sb2NhbHNNYXBfbGV0QmluZGluZ3NfdHlwZUluZmVyZW5jZU1hcF9hYnN0cmFjdFZhbHVlRG9tYWluX2luZmVycmVkRGF0YXB1c2hDaGVja051bGxfY2xvc2VBbmRHb3RvRXhpdGlzQWJvcnRlZG9wZW5OZXdCbG9ja25ld0Jsb2NrYWRkUGFyYW1ldGVyd3JhcFN0YXRlbWVudEdyYXBod3JhcEV4cHJlc3Npb25HcmFwaF9idWlsZExpdGVyYWxMaXN0X2NhbGxTZXRSdW50aW1lVHlwZUluZm9XaXRoVHlwZUFyZ3VtZW50c3J0aUlucHV0c25ld09iamVjdF9jYWxsU2V0UnVudGltZVR5cGVJbmZvX2hhbmRsZUluVHJ5U3RhdGVtZW50X2dldEZsYWdWYWx1ZWZsYWdOYW1lTUlOSUZJRURNVVNUX1JFVEFJTl9NRVRBREFUQVVTRV9DT05URU5UX1NFQ1VSSVRZX1BPTElDWVVTRV9ORVdfUlRJX2dldFN0YXRpY1R5cGVfZ2V0U3RhdGljRm9ySW5JdGVyYXRvclR5cGVnZXRGb3JJbkl0ZXJhdG9yVHlwZV9lZmZlY3RpdmVUYXJnZXRFbGVtZW50Rm9yY2FsbFNvdXJjZUluZm9ybWF0aW9uX2xlYXZlRnJhbWVfYnVpbGRFeHRlcm5hbEZ1bmN0aW9uTm9kZV9lbnN1cmVEZWZhdWx0QXJndW1lbnRWYWx1ZXNfYnVpbGRGdW5jdGlvbk5vZGVfYnVpbGRGaWVsZE5vIGNhc2UgaW1wbGVtZW50ZWQgdG8gaGFuZGxlIHRhcmdldDogX2J1aWxkQ29uc3RydWN0b3JfYnVpbGRDb25zdHJ1Y3RvckJvZHlvcmlnaW5hbENsb3N1cmVOb2RlVW5leHBlY3RlZCBmdW5jdGlvbiBzaWduYXR1cmU6ICBpbnNpZGUgYSBub24tY2xvc3VyZTogX2J1aWxkTWV0aG9kU2lnbmF0dXJlTmV3UnRpX2J1aWxkTWV0aG9kU2lnbmF0dXJlX2J1aWxkR2VuZXJhdG9yQm9keV9mdW5jdGlvbk5vZGVPZkludmFsaWQgZ3JhcGggZm9yICAoYm9keSlfcmVnaXN0ZXJEZWZhdWx0VmFsdWVObyBjb25zdGFudCBjb21wdXRlZCBmb3IgX29wZW5GdW5jdGlvbnJlYWRUaGlzcG90ZW50aWFsbHlDaGVja09yVHJ1c3RUeXBlT2ZQYXJhbWV0ZXJfZ2V0RGFydFR5cGVJZlZhbGlkZmllbGRWYWx1ZWNoZWNrSW5zdHJ1Y3Rpb25wb3RlbnRpYWxseUNoZWNrT3JUcnVzdFR5cGVPZkFzc2lnbm1lbnRfY2xvc2VGdW5jdGlvbnBvcEJvb2xpZmllZHBvdGVudGlhbGx5Q2hlY2tPclRydXN0VHlwZU9mQ29uZGl0aW9uX2FkZENsYXNzVHlwZVZhcmlhYmxlc0lmTmVlZGVkbmVlZHNUeXBlQXJndW1lbnRzX3R5cGVWYXJpYWJsZXR5cGVWYXJpYWJsZVR5cGVnZXRUeXBlVmFyaWFibGVBc0xvY2FsZGlyZWN0TG9jYWxzX2FkZEZ1bmN0aW9uVHlwZVZhcmlhYmxlc0lmTmVlZGVkZWxpZGVUeXBlUGFyYW1ldGVyc19jb21wdXRlVHlwZUFyZ3VtZW50RGVmYXVsdFZhbHVlY29uc3RydWN0b3JEYXRhX2J1aWxkSW5pdGlhbGl6ZXJzY29uc3RydWN0b3JBcmd1bWVudHNpc0N1c3RvbUVsZW1lbnRObyBpbml0aWFsaXplciB2YWx1ZSBmb3IgZmllbGQgc3Vic3RJbkNvbnRleHRfYWRkSW1wbGljaXRJbnN0YW50aWF0aW9uYW5hbHl6ZVR5cGVBcmd1bWVudE5ld1J0aV9yZW1vdmVJbXBsaWNpdEluc3RhbnRpYXRpb25jb25zdHJ1Y3RvckNoYWluYm9keUNhbGxJbnB1dHNpbmxpbmVkQ29uc3RydWN0b3JfaW5saW5lZEZyb21pc0JveGVkc2NvcGVEYXRhZ2V0Q2FwdHVyZWRTY29wZXJlcXVpcmVzQ29udGV4dEJveGlubGluZWRDb25zdHJ1Y3RvckNsYXNzYW5hbHl6ZVR5cGVBcmd1bWVudF90cnlJbmxpbmVNZXRob2RfaW52b2tlQ29uc3RydWN0b3JCb2R5dXBkYXRlTG9jYWxfaXNFbXB0eVN0YXRlbWVudGlubGluZWRUYXJnZXRfZW5zdXJlVHlwZVZhcmlhYmxlc0ZvckluaXRpYWxpemVyc2luY2x1ZGVkQ2xhc3Nlc19jb2xsZWN0RmllbGRWYWx1ZXNVbmV4cGVjdGVkIG1lbWJlciBkZWZpbml0aW9uIGlnbm9yZUFsbG9jYXRvckFuYWx5c2lzX2lzUmVkaXJlY3RpbmdDb25zdHJ1Y3RvcmJ1dCBmb3VuZCBmb3VuZFN1cGVyT3JSZWRpcmVjdENhbGxfaW5saW5lU3VwZXJJbml0aWFsaXplcl9pbmxpbmVSZWRpcmVjdGluZ0luaXRpYWxpemVyaXIuSW52YWxpZEluaXRpYWxpemVyIG5vdCBoYW5kbGVkVW5oYW5kbGVkIGluaXRpYWxpemVyIGlyLkFsbCBjb25zdHJ1Y3RvcnMgc2hvdWxkIGhhdmUgc3VwZXItIG9yIHJlZGlyZWN0aW5nLSBpbml0aWFsaXplcnMsIGV4Y2VwdCBPYmplY3QoKV9ub3JtYWxpemVBbmRCdWlsZEFyZ3VtZW50c2J1aWx0QXJndW1lbnRzcG9zaXRpb25hbEluZGV4Y29ycmVzcG9uZGluZ05hbWVkc3VwZXJPclJlZGlyZWN0Q29uc3RydWN0b3JfaW5saW5lU3VwZXJPclJlZGlyZWN0Q29tbW9uY2FsbGVyQ2xhc3NvbGRTY29wZUluZm9zY29wZUluZm9uZXdTY29wZUluZm9fYnVpbGRHZW5lcmF0b3JfY2hlY2tzRm9yRnVuY3Rpb25faGFuZGxlSWZ2aXNpdENvbmRpdGlvbnZpc2l0VGhlbnZpc2l0RWxzZWVtcHR5UGFyYW1ldGVyc19hZGRDb21tZW50IGluZmVycmVkIGFzIFtlbXB0eV1zdGF0ZW1lbnRUZW1wbGF0ZVlpZWxkaW5nX2dlbmVyYXRlZEVudHJ5SXNFbXB0eV9wb3RlbnRpYWxseUFkZEZ1bmN0aW9uUGFyYW1ldGVyVHlwZUNoZWNrc3RhcmdldENoZWNrc2NoZWNrVHlwZVBhcmFtZXRlcnNfY2hlY2tUeXBlVmFyaWFibGVCb3VuZHNub2RlSXNDb25zdHJ1Y3RvckJvZHlfaGFuZGxlUGFyYW1ldGVyaXNCb3hlZFZhcmlhYmxlbmV3UGFyYW1ldGVyTm8gaW5pdGlhbCBpbnN0cnVjdGlvbiBmb3IgY2hlY2tBbGxQYXJhbWV0ZXJzY2hlY2tDb3ZhcmlhbnRQYXJhbWV0ZXJzdHJ1c3RUeXBlT2ZQYXJhbWV0ZXJfYXNzZXJ0SXNUeXBlVGhlIHR5cGUgYXJndW1lbnQgJycgaXMgbm90IGEgc3VidHlwZSBvZiB0aGUgdHlwZSB2YXJpYWJsZSBib3VuZCAnJyBvZiB0eXBlIHZhcmlhYmxlICduYXRpdmVOYW1ldGVtcGxhdGVSZWNlaXZlcnRlbXBsYXRlQXJndW1lbnRzIy5fcHVzaFN0YXRpY0ludm9jYXRpb24gPSB1bmNhY2hlZEV4cHJlc3Npb25UZW1wbGF0ZXBhcmFtZXRlck1hcGVsaWRlZFBhcmFtZXRlclNldGlzR2VuZXJhdGl2ZUNvbnN0cnVjdG9yQm9keV9kZWZhdWx0VmFsdWVGb3JQYXJhbWV0ZXJfaW5zZXJ0Q292ZXJhZ2VDYWxsY2hlY2tMb2FkbG9hZElkcHJlZml4Q29uc3RhbnR1cmlDb25zdGFudE5vbi1lbXB0eSBpbnN0cnVjdGlvbiBzdGFjay5Ob24tZW1wdHkgaW5zdHJ1Y3Rpb24gc3RhY2tfdmlzaXRUaHJvd0V4cHJlc3Npb25kZWZlcnJlZENvbnN0YW50X2VtaXRSZXR1cm5idWlsZEluaXRpYWxpemVyYnVpbGRDb25kaXRpb25idWlsZFVwZGF0ZWp1bXBUYXJnZXRoYW5kbGVMb29wZ2V0Q2FwdHVyZWRMb29wU2NvcGVfYnVpbGRBc3luY0ZvckluX2J1aWxkRm9ySW5JbmRleGFibGVfYnVpbGRGb3JJbkl0ZXJhdG9yY3JlYXRlTG9jYWxfaWlzRml4ZWRvcmlnaW5hbExlbmd0aGJ1aWxkR2V0TGVuZ3RoYnVpbGRDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3JDaGVja2xvb3BWYXJpYWJsZUxvY2Fsb25lYWRkSW5zdHJ1Y3Rpb25fcHVzaER5bmFtaWNJbnZvY2F0aW9uc3RhdGljSW5zdGFuY2VUeXBlX2FkZFR5cGVBcmd1bWVudHN0cnlCdWlsZGVyZmluYWxpemVyRnVuY3Rpb25jbG9zZVRyeUJvZHlidWlsZEZpbmFsbHlCbG9ja2NsZWFuVXB0eXBlSW5mb1NldHRlckZuVW5leHBlY3RlZCBgc3RhY2subGFzdGA6IEZvdW5kIGV4cGVjdGVkICBvciBhbiBISW52b2tlU3RhdGljLiBTdGF0ZTogdHlwZUluZm89LCBzdGFjaz1zYXZlZExvY2Fsc2xvb3BDbG9zdXJlSW5mb3N0YXJ0TG9vcGp1bXBIYW5kbGVyYmVnaW5Mb29wSGVhZGVybG9vcEluZm9sb29wRW50cnlCbG9ja2JvZHlFbnRyeUJsb2NraGFzQ29udGludWVzZW50ZXJMb29wQm9keWJvZHlFeGl0QmxvY2tpc0Fib3J0aW5nQm9keWxvb3BJc0RlZ2VuZXJhdGVjb25kaXRpb25CbG9ja2NvbnRpbnVlSGFuZGxlcnNmb3JFYWNoQ29udGludWVsb2NhbHNtZXJnZU11bHRpcGxlYm9keUdyYXBoYm9keUluZm9jb25kaXRpb25JbnN0cnVjdGlvbmNvbmRpdGlvbkVuZEJsb2NrYXZvaWRDcml0aWNhbEVkZ2Vjb25kaXRpb25FeGl0QmxvY2tlbmRMb29wbG9vcEJsb2NrSW5mb2hhc0FueUJyZWFrZm9yRWFjaEJyZWFrYnJlYWtJbnN0cnVjdGlvbmJyYW5jaEJ1aWxkZXJoYW5kbGVJZmV4cHJlc3Npb25JbnN0cnVjdGlvbl9nZW5lcmF0ZVR5cGVFcnJvcmludmFsaWQgdHlwZXBvbGljeWJ1aWxkVHlwZUNvbnZlcnNpb25fZ2VuZXJhdGVFcnJvcmVycm9yTWVzc2FnZV9nZW5lcmF0ZVVuc3VwcG9ydGVkRXJyb3JjcmVhdGVKdW1wSGFuZGxlcmlzTG9vcEp1bXBnZW5lcmF0ZUNvbnRpbnVlZ2VuZXJhdGVCcmVha2JlZm9yZUxvY2Fsc2JyZWFrSGFuZGxlcnNfYnVpbGRTd2l0Y2hDYXNlQ29uc3RhbnRzaGFzQ29udGludWVjYXNlSW5kZXhzd2l0Y2hJbmRleGhhc0RlZmF1bHRfYnVpbGRTaW1wbGVTd2l0Y2hTdGF0ZW1lbnRfYnVpbGRDb21wbGV4U3dpdGNoU3RhdGVtZW50X2lzRGVmYXVsdENhc2VfYnVpbGRFeHByZXNzaW9uX2dldFN3aXRjaENvbnN0YW50c3BhcmVudFN3aXRjaGNvbnN0YW50c0xvb2t1cGNvbnN0YW50TGlzdF9oYW5kbGVTd2l0Y2hzd2l0Y2hUYXJnZXRjYXNlU291cmNlSW5mb3JtYXRpb25ub3RVc2VkZ2V0Q29uc3RhbnRzaXNEZWZhdWx0Q2FzZWV4cHJlc3Npb25TdGFydHN3aXRjaEluc3RydWN0aW9uZXhwcmVzc2lvbkVuZGhDb25zdGFudGNhc2VIYW5kbGVyc0NvbnRpbnVlIGNhbm5vdCB0YXJnZXQgYSBzd2l0Y2guZXhwcmVzc2lvbkluZm9icmFuY2hlcmhhbmRsZUNvbmRpdGlvbmFsX2hhbmRsZUxvZ2ljYWxFeHByZXNzaW9udmlzaXRSaWdodGlubmVyTGVmdGhhbmRsZUxvZ2ljYWxCaW5hcnlfc2V0TGlzdFJ1bnRpbWVUeXBlSW5mb0lmTmVlZGVkYXJyYXlUeXBlbGlzdEluc3RydWN0aW9uYXJnTGlzdHR5cGVJbnB1dHNyZXR1cm5UeXBlTWFza2NvbnN0cnVjdG9yQXJnc2lyLk1hcEVudHJ5IHNob3VsZCBiZSBoYW5kbGVkIGluIHZpc2l0TWFwTGl0ZXJhbFVuZXhwZWN0ZWQgdHlwZSBsaXRlcmFsIHN0YXRpY1RhcmdldFVuZXhwZWN0ZWQgZmllbGQgZGF0YSBmb3IgbGV0QmluZGluZ2lyLkRpcmVjdFByb3BlcnR5U2V0aXIuRGlyZWN0TWV0aG9kSW52b2NhdGlvbl9nZW5lcmF0ZVN1cGVyTm9TdWNoTWV0aG9kX2J1aWxkSW52b2tlU3VwZXJfdmlzaXRMb2NhbFNldHRlcmluaXRpYWxpemVkVmFsdWVfdmlzaXRQb3NpdGlvbmFsQXJndW1lbnRzX3Zpc2l0QXJndW1lbnRzRm9yRHluYW1pY1RhcmdldG5hbWVkVmFsdWVzX3Zpc2l0QXJndW1lbnRzRm9yTmF0aXZlU3RhdGljVGFyZ2V0X2ZpbGxEeW5hbWljVHlwZUFyZ3VtZW50c3NlbGVjdG9yTmVlZHNUeXBlQXJndW1lbnRzX2dldENvbnN0cnVjdG9yVHlwZUFyZ3VtZW50c19nZXRDbGFzc1R5cGVBcmd1bWVudHNfZ2V0U3RhdGljVHlwZUFyZ3VtZW50c192aXNpdEFyZ3VtZW50c0ZvclN0YXRpY1RhcmdldF9oYW5kbGVJbnZva2VTdGF0aWNGb3JlaWduX2hhbmRsZUV4dHJhY3RUeXBlQXJndW1lbnRzX2hhbmRsZUludm9rZUZhY3RvcnlDb25zdHJ1Y3RvcmNhbiBvbmx5IGJlIHVzZWQgYXMgYSBjb25zdCBjb25zdHJ1Y3RvcmlzRml4ZWRMaXN0aXNGaXhlZExpc3RDb25zdHJ1Y3RvckNhbGxpc0dyb3dhYmxlTGlzdENvbnN0cnVjdG9yQ2FsbGlzSlNBcnJheVR5cGVkQ29uc3RydWN0b3JfaW5mZXJyZWRUeXBlT2ZOZXdMaXN0VW5leHBlY3RlZCBhcmd1bWVudHMuIEV4cGVjdGVkIDEtMiBhcmd1bWVudCwgYWN0dWFsOiBsZW5ndGhJbnB1dG5ldyBBcnJheSgjKWZvcmVpZ24jLmZpeGVkJGxlbmd0aCA9IEFycmF5bmV3SW5zdGFuY2V0eXBlVmFsdWVfaW50ZXJjZXB0b3JGb3JyZWNlaXZlclN0YXRpY1R5cGVfaGFuZGxlRm9yZWlnbkpzX2hhbmRsZUZvcmVpZ25EYXJ0Q2xvc3VyZVRvSnNSQVdfREFSVF9GVU5DVElPTl9SRUZfaGFuZGxlRm9yZWlnblJhd0Z1bmN0aW9uUmVmSlNfU0VUX1NUQVRJQ19TVEFURV9oYW5kbGVGb3JlaWduSnNTZXRTdGF0aWNTdGF0ZUpTX0dFVF9TVEFUSUNfU1RBVEVfaGFuZGxlRm9yZWlnbkpzR2V0U3RhdGljU3RhdGVKU19HRVRfTkFNRV9oYW5kbGVGb3JlaWduSnNHZXROYW1lX2hhbmRsZUZvcmVpZ25Kc0VtYmVkZGVkR2xvYmFsX2hhbmRsZUZvcmVpZ25Kc0J1aWx0aW5KU19HRVRfRkxBR19oYW5kbGVGb3JlaWduSnNHZXRGbGFnSlNfRUZGRUNUX2hhbmRsZUpzSW50ZXJjZXB0b3JDb25zdGFudGdldEludGVyY2VwdG9yX2hhbmRsZUZvcmVpZ25HZXRJbnRlcmNlcHRvcmdldEpTQXJyYXlJbnRlcm9wUnRpX2hhbmRsZUZvcmVpZ25HZXRKU0FycmF5SW50ZXJvcFJ0aV9oYW5kbGVKc1N0cmluZ0NvbmNhdF9oYW5kbGVDcmVhdGVJbnZvY2F0aW9uTWlycm9yVW5rbm93biBmb3JlaWduOiBuYW1lTGl0ZXJhbHR5cGVBcmd1bWVudHNMaXRlcmFscG9zaXRpb25hbEFyZ3VtZW50c0xpdGVyYWxuYW1lZEFyZ3VtZW50c0xpdGVyYWxraW5kTGl0ZXJhbFVuZXhwZWN0ZWQgbmFtZWQgYXJndW1lbnRzIHZhbHVlIGluIGNyZWF0ZUludm9jYXRpb25NaXJycm9yOiBhcmd1bWVudHNJbnN0cnVjdGlvbmFyZ3VtZW50TmFtZXNhcmd1bWVudE5hbWVhcmd1bWVudE5hbWVDb25zdGFudGFyZ3VtZW50TmFtZXNJbnN0cnVjdGlvbmludGVybmFsTmFtZWtpbmRDb25zdGFudF91bmV4cGVjdGVkRm9yZWlnbkFyZ3VtZW50c21pblBvc2l0aW9uYWxtYXhQb3NpdGlvbmFscGx1cmFsaXplQXJndW1lbnRzYWRqZWN0aXZlbm8gb25lIHR3byBiYWR0eXBlIEVycm9yOiAnJyB0YWtlcyAsIG5vdCBwaHJhc2VhdCBsZWFzdCBFcnJvcjogVG9vIGZldyBhcmd1bWVudHMuICdhdCBtb3N0IEVycm9yOiBUb28gbWFueSBhcmd1bWVudHMuICcnIGRvZXMgbm90IHRha2UgbmFtZWQgYXJndW1lbnRzLl9mb3JlaWduQ29uc3RhbnRTdHJpbmdBcmd1bWVudEVycm9yOiBFeHBlY3RlZCBTdHJpbmcgY29uc3RhbnQgYXMgYXJndW1lbnQgdG8gJ3JlcXVpcmVzIGEgc3RhdGljIG1ldGhvZCBvciB0b3AtbGV2ZWwgbWV0aG9kaGFuZGxlVGFyZ2V0ZXhwcmVzc2lvblRlbXBsYXRlWWllbGRpbmdkb2VzIG5vdCBoYW5kbGUgYSBjbG9zdXJlIHdpdGggb3B0aW9uYWwgcGFyYW1ldGVycyA9ICNfZ2V0TmFtZUZvckpzR2V0TmFtZUVycm9yOiBFeHBlY3RlZCBhIEpzR2V0TmFtZSBlbnVtIHZhbHVlLl9leHRyYWN0RW51bUluZGV4RnJvbUNvbnN0YW50VmFsdWVnbG9iYWxOYW1lc2Vjb25kIE5vIE5hdGl2ZUJlaGF2aW9yIGZvciBzc2FUeXBlbmFtZUFyZ3VtZW50X2dldEpzQnVpbHRpblRlbXBsYXRlRXJyb3I6IEV4cGVjdGVkIGEgSnNCdWlsdGluIGVudW0gdmFsdWUuX3RlbXBsYXRlRm9yQnVpbHRpbkpzQnVpbHRpbi5kYXJ0T2JqZWN0Q29uc3RydWN0b3JKc0J1aWx0aW4uZGFydENsb3N1cmVDb25zdHJ1Y3RvckpzQnVpbHRpbi5pc0NoZWNrUHJvcGVydHlUb0pzQ29uc3RydWN0b3JOYW1lSnNCdWlsdGluLmlzRnVuY3Rpb25UeXBlSnNCdWlsdGluLmlzRnV0dXJlT3JUeXBlSnNCdWlsdGluLmlzVm9pZFR5cGVKc0J1aWx0aW4uaXNEeW5hbWljVHlwZUpzQnVpbHRpbi5pc0pzSW50ZXJvcFR5cGVBcmd1bWVudEpzQnVpbHRpbi5yYXdSdGlUb0pzQ29uc3RydWN0b3JOYW1lSnNCdWlsdGluLnJhd1J1bnRpbWVUeXBlSnNCdWlsdGluLmlzU3VidHlwZUpzQnVpbHRpbi5pc0dpdmVuVHlwZVJ0aUpzQnVpbHRpbi5nZXRNZXRhZGF0YUpzQnVpbHRpbi5nZXRUeXBlYnVpbHRpbmlzUHJlZml4TGVuZ3RoIy5zdWJzdHJpbmcoIy5uYW1lIy5jb25zdHJ1Y3RvcmlzUHJlZml4KCcnICsgIykgaW4gIy5wcm90b3R5cGUjLm5hbWUgPT09ICNtZXRhZGF0YUFjY2Vzc1sjXXR5cGVzQWNjZXNzVW5oYW5kbGVkIEJ1aWx0aW46IEVycm9yOiBVbmtub3duIGludGVybmFsIGZsYWcgImFyZ3VtZW50SW5zdHJ1Y3Rpb25hcmd1bWVudENvbnN0YW50aW50ZXJvcFR5cGVNaXNtYXRjaCBiZXR3ZWVuIG51bWJlciBvZiBwbGFjZWhvbGRlcnMgYW5kIG51bWJlciBvZiBhcmd1bWVudHMudHJ1c3RlZE1hc2t0cnVzdFR5cGVNYXNrVHlwZSBhcmd1bWVudCB0b28gbmFycm93IGZvciBzcGVjaWZpZWQgYmVoYXZpb3IgdHlwZSAgZG9lcyBub3QgYWxsb3cgYWxsIHZhbHVlcyBpbiBfaW52b2tlSnNJbnRlcm9wRnVuY3Rpb25zdGF0aWNSZWNlaXZlclR5cGV0eXBlQm91bmRpc09wdGltaXphYmxlT3BlcmF0aW9uT25JbmRleGFibGVpc0xlbmd0aGlzT3B0aW1pemFibGVPcGVyYXRpb25wb3NpdGlvbnNmaWx0ZXJlZEFyZ3VtZW50c3BhcmFtZXRlck5hbWVNYXBwYXJhbWV0ZXJOYW1lIyA9ICNuZXcgIygjKGNsb3N1cmVDbGFzc0VudGl0eWNhcHR1cmVkVmFyaWFibGVzZ2V0TG9jYWxGb3JGaWVsZGZ1bmNFeHByZXNzaW9udHlwZUFyZ3VtZW50c05lZWRlZGluc3RhbnRpYXRpb25OZWVkc1R5cGVBcmd1bWVudHNHZW5lcmljIGZ1bmN0aW9uIGluc3RhbnRpYXRpb24gbm90IGltcGxlbWVudGVkIGZvciAgdHlwZSBhcmd1bWVudHNfY29udGFpbmluZ0NsYXNzcHVibGljTmFtZXRhcmdldERlZmluaXRpb25zdWJ0eXBlSW5zdHJ1Y3Rpb25pbmZpeHN1cGVydHlwZUluc3RydWN0aW9ucHJlZml4SW5zdHJ1Y3Rpb25pbmZpeEluc3RydWN0aW9uc3VmZml4SW5zdHJ1Y3Rpb250eXBlSW5zdHJ1Y3Rpb252YXJpYWJsZU5hbWVib3VuZEluc3RydWN0aW9udmFyaWFibGVOYW1lSW5zdHJ1Y3Rpb25jaGVja0JvdW5kX3B1c2hJc1Rlc3RhZGRUeXBlVmFyaWFibGVSZWZlcmVuY2VfY2FuSWdub3JlVHlwZUFyZ3VtZW50c3JlcHJlc2VudGF0aW9uc2J1aWxkVHlwZUFyZ3VtZW50UmVwcmVzZW50YXRpb25zaXNGaWVsZE5hbWVhc0ZpZWxkTmFtZV9oYXNEaXJlY3RDaGVja0ZvcmF3YWl0ZWRyZXRocm93YWJsZUV4Y2VwdGlvbiBzaG91bGQgbm90IGJlIG51bGwuc3RyaW5nQ29uY2F0c3RyaW5nQnVpbGRlcnRyeUNhdGNocHJvdmlkZWRBcmd1bWVudHNjdXJyZW50Tm9kZWNhY2hlZENhbkJlSW5saW5lZG1lZXRzSGFyZENvbnN0cmFpbnRzTWlzc2luZyBzZWxlY3RvciBmb3IgaW5saW5pbmcgb2YgZG9lc05vdENvbnRhaW5Db2RlaW5saW5lRGF0YWNhbkJlSW5saW5lZG1heElubGluaW5nTm9kZXNyZWR1Y3RpdmVIZXVyaXN0aWNfaXNDYWxsZWRPbmNlY2FuQmVJbmxpbmVkUmVkdWN0aXZlaGV1cmlzdGljU2F5R29vZFRvR29nZXRJbmxpbmVEYXRhY2Fubm90QmVJbmxpbmVkUmVhc29uYWxsb3dMb29wc0Nhbm5vdCBpbmxpbmUgbnVtUGFyYW1ldGVyc21hcmtlZFRyeUlubGluZWNhbGxlZE9uY2VfaXNGdW5jdGlvbkNhbGxlZE9uY2Vkb0lubGluaW5nVW5leHBlY3RlZCBpbnN0YW5jZSB0eXBlIGZvciBjb21waWxlZEFyZ3VtZW50c19jb21wbGV0ZUNhbGxBcmd1bWVudHNMaXN0X2VudGVySW5saW5lZE1ldGhvZF9kb0lubGluZV9sZWF2ZUlubGluZWRNZXRob2RfcHJvdmlkZWRBcmd1bWVudHNLbm93blRvQmVDb21wbGV0ZV9jb21wbGV0ZUR5bmFtaWNDYWxsQXJndW1lbnRzTGlzdHNlbGVjdG9yQXJndW1lbnROYW1lc2NvbXBpbGVkQXJndW1lbnRJbmRleHBvc2l0aW9uYWxBcmd1bWVudE9mZnNldG5hbWVkQXJndW1lbnRPZmZzZXRwb3NpdGlvbmFsQXJndW1lbnRJbmRleG5hbWVkQXJndW1lbnRJbmRleE5vIGNvbnN0YW50IGNvbXB1dGVkIGZvciBwYXJhbWV0ZXIgdHlwZUFyZ3VtZW50T2Zmc2V0dHlwZUFyZ3VtZW50SW5kZXhfc2V0dXBTdGF0ZUZvcklubGluaW5nZm9yR2VuZXJhdGl2ZUNvbnN0cnVjdG9yQm9keWhhc0JveGlubGluZWRCb3hpbmxpbmVUeXBlUGFyYW1ldGVyc09ubHkgYXJndW1lbnRzIGhhdmUgYmVlbiByZWFkIGZyb206ICBwYXNzZWQgdG8gX3Jlc3RvcmVTdGF0ZW9sZExvY2Fsc0hhbmRsZXJvbGRSZXR1cm5Mb2NhbGluVHJ5U3RhdGVtZW50b2xkUmV0dXJuVHlwZW9sZFN0YWNrX3Zpc2l0SW5saW5lZEZ1bmN0aW9uX3BvdGVudGlhbGx5Q2hlY2tJbmxpbmVkUGFyYW1ldGVyVHlwZXNVbmV4cGVjdGVkIGlubGluZWQgZnVuY3Rpb246IGNoZWNrZWRPclRydXN0ZWRfYWxsSW5saW5lZEZ1bmN0aW9uc0NhbGxlZE9uY2VhbGxGdW5jdGlvbnNDYWxsZWRPbmNlaWRDb25zdGFudENvbnN0cnVjdG9yRGF0YUtlcm5lbElubGluaW5nU3RhdGVLZXJuZWxJbmxpbmluZ1N0YXRlKGFsbEZ1bmN0aW9uc0NhbGxlZE9uY2U9VHJ5Q2F0Y2hGaW5hbGx5QnVpbGRlcmtlcm5lbEJ1aWxkZXJ0cnlTb3VyY2VJbmZvcm1hdGlvbmVudGVyQmxvY2tzdGFydFRyeUJsb2NrZW5kVHJ5QmxvY2tzdGFydENhdGNoQmxvY2tlbmRDYXRjaEJsb2Nrc3RhcnRGaW5hbGx5QmxvY2tlbmRGaW5hbGx5QmxvY2tleGl0QmxvY2t0cnlJbnN0cnVjdGlvbnByZXZpb3VzbHlJblRyeVN0YXRlbWVudGNhdGNoR3JhcGhmaW5hbGx5R3JhcGhvcmlnaW5hbFNhdmVkTG9jYWxzX2FkZEV4aXRUcnlTdWNjZXNzb3JzdWNjZXNzb3JfYWRkT3B0aW9uYWxTdWNjZXNzb3JibG9jazJfc2V0QmxvY2tTdWNjZXNzb3JzYnVpbGRGaW5hbGl6ZXJvbGRSZXRocm93YWJsZUV4Y2VwdGlvbnVud3JhcHBlZEV4Y2VwdGlvbmNhdGNoZXNJbmRleHB1c2hDb25kaXRpb25leGNlcHRpb25WYXJpYWJsZXRyYWNlSW5zdHJ1Y3Rpb250cmFjZVZhcmlhYmxlbmV4dENhdGNoZmlyc3RCbG9ja0tlcm5lbFR5cGVCdWlsZGVyY29tcHV0ZVR5cGVWYXJpYWJsZUFjY2Vzc19FcnJvbmVvdXNJbml0aWFsaXplclZpc2l0b3JLZXJuZWxTd2l0Y2hDYXNlSnVtcEhhbmRsZXJ0YXJnZXRJbmRleE1hcFN0YXRpY1R5cGVTdGF0aWNUeXBlKElubGluZURhdGFjb2RlQWZ0ZXJSZXR1cm5oYXNMb29waGFzQ2xvc3VyZWhhc1RyeWhhc0FzeW5jQXdhaXRoYXNUaHJvd2hhc0xvbmdTdHJpbmdoYXNFeHRlcm5hbENvbnN0YW50Q29uc3RydWN0b3JDYWxsaGFzQXJndW1lbnREZWZhdWx0aW5naGFzQ2FzdGhhc0lmYXJndW1lbnRDb3VudHNyZWd1bGFyTm9kZUNvdW50Y2FsbENvdW50cmVkdWN0aXZlTm9kZUNvdW50Y29kZSBhZnRlciByZXR1cm5hc3luYy9hd2FpdHRvbyBtYW55IG5vZGVzIChjYW5ub3RCZUlubGluZWRSZWR1Y3RpdmVSZWFzb250b28gbWFueSBjYWxsc2xvbmcgc3RyaW5nZXh0ZXJuYWwgY29uc3QgY29uc3RydWN0b3J0eXBlIGFyZ3VtZW50c2FyZ3VtZW50IGRlZmF1bHRpbmdpbmNyZWFzaW5nIGFyZ3VtZW50c0lubGluZURhdGEoYXJndW1lbnRDb3VudHM9e3JlZ3VsYXJOb2RlQ291bnQ9Y2FsbENvdW50PXJlZHVjdGl2ZU5vZGVDb3VudD1JbmxpbmVEYXRhQ2FjaGVJbmxpbmVXZWVkZXJJTkxJTklOR19OT0RFU19PVVRTSURFX0xPT1BJTkxJTklOR19OT0RFU19PVVRTSURFX0xPT1BfQVJHX0ZBQ1RPUklOTElOSU5HX05PREVTX0lOU0lERV9MT09QSU5MSU5JTkdfTk9ERVNfSU5TSURFX0xPT1BfQVJHX0ZBQ1RPUnNlZW5SZXR1cm5jb3VudFJlZ3VsYXJOb2RlY291bnRSZWR1Y3RpdmVOb2RlY29tcHV0ZUlubGluZURhdGFza2lwUmVkdWN0aXZlTm9kZXNza2lwUmVndWxhck5vZGVzb2xkQ291bnRSZWd1bGFyTm9kZW9sZENvdW50UmVkdWN0aXZlTm9kZXJlZ2lzdGVyUmVndWxhck5vZGVyZWdpc3RlclJlZHVjdGl2ZU5vZGV1bnJlZ2lzdGVyUmVkdWN0aXZlTm9kZV9oYW5kbGVMb29wY29tbW9uUHJlZml4Q291bnR0aGVuQ291bnRlbHNlQ291bnRyZWdpc3RlckNhbGxfcHJvY2Vzc0FyZ3VtZW50c0Fic3RyYWN0VmFsdWVGYWN0b3J5aW5mZXJyZWRSZXR1cm5UeXBlRm9yRWxlbWVudGluZmVycmVkVHlwZUZvck1lbWJlcmluZmVycmVkVHlwZUZvclBhcmFtZXRlcmluZmVycmVkUmVzdWx0VHlwZUZvclNlbGVjdG9yZnJvbU5hdGl2ZUJlaGF2aW9yZnJvbU5hdGl2ZVR5cGVVbmV4cGVjdGVkIGVtcHR5IHJldHVybiB2YWx1ZSBmb3IgSnNDbG9zZWRXb3JsZEJ1aWxkZXJDbG9zdXJlRGF0YUltcGxjbG9zdXJlLWRhdGFfc2NvcGVNYXBfY2FwdHVyZWRTY29wZXNNYXBfY2FwdHVyZWRTY29wZUZvclNpZ25hdHVyZU1hcF9sb2NhbENsb3N1cmVSZXByZXNlbnRhdGlvbk1hcHNjb3BlTWFwY2FwdHVyZWRTY29wZXNNYXBjYXB0dXJlZFNjb3BlRm9yU2lnbmF0dXJlTWFwbG9jYWxDbG9zdXJlUmVwcmVzZW50YXRpb25NYXBNaXNzaW5nIHNjb3BlIGluZm8gZm9yIGxvb3BOb2RlQ29ycmVzcG9uZGluZyBjbG9zdXJlIGNsYXNzIG5vdCBmb3VuZCBmb3IgQ2xvc3VyZXMgZm91bmQgZm9yIENsb3N1cmVEYXRhQnVpbGRlcl91cGRhdGVTY29wZUJhc2VkT25SdGlOZWVkb3V0ZXJtb3N0RW50aXR5aW5jbHVkZUZvclJ0aVZhcmlhYmxlVXNlS2luZC5leHBsaWNpdFZhcmlhYmxlVXNlS2luZC5pbXBsaWNpdENhc3RWYXJpYWJsZVVzZUtpbmQubG9jYWxUeXBlVmFyaWFibGVVc2VLaW5kLmNvbnN0cnVjdG9yVHlwZUFyZ3VtZW50VmFyaWFibGVVc2VLaW5kLnN0YXRpY1R5cGVBcmd1bWVudFZhcmlhYmxlVXNlS2luZC5pbnN0YW5jZVR5cGVBcmd1bWVudFZhcmlhYmxlVXNlS2luZC5sb2NhbFR5cGVBcmd1bWVudGxvY2FsRnVuY3Rpb25OZWVkc1R5cGVBcmd1bWVudHNWYXJpYWJsZVVzZUtpbmQubWVtYmVyUGFyYW1ldGVyVmFyaWFibGVVc2VLaW5kLmxvY2FsUGFyYW1ldGVybG9jYWxGdW5jdGlvbk5lZWRzU2lnbmF0dXJlVmFyaWFibGVVc2VLaW5kLm1lbWJlclJldHVyblR5cGVWYXJpYWJsZVVzZUtpbmQubG9jYWxSZXR1cm5UeXBlVmFyaWFibGVVc2VLaW5kLmZpZWxkVHlwZVZhcmlhYmxlVXNlS2luZC5saXN0TGl0ZXJhbFZhcmlhYmxlVXNlS2luZC5zZXRMaXRlcmFsVmFyaWFibGVVc2VLaW5kLm1hcExpdGVyYWxWYXJpYWJsZVVzZUtpbmQuaW5zdGFudGlhdGlvblR5cGVBcmd1bWVudHRoaXNVc2VkQXNGcmVlVmFyaWFibGVJZk5lZWRzUnRpdGhpc1VzZWRBc0ZyZWVWYXJpYWJsZWZyZWVWYXJpYWJsZXNGb3JSdGljcmVhdGVDbG9zdXJlRW50aXRpZXNjYWxsTWV0aG9kc21vZGVsYWxsQm94ZWRWYXJpYWJsZXNib3hlZFZhcmlhYmxlc2Nsb3N1cmVzVG9HZW5lcmF0ZWNsb3N1cmVDbGFzc0luZm9fcHJvZHVjZVN5bnRoZXRpY0VsZW1lbnRzY3JlYXRlU2lnbmF0dXJlTWV0aG9kY2FwdHVyZWRTY29wZXNpZ25hdHVyZUNhcHR1cmVkU2NvcGVidWlsZENsb3N1cmVDbGFzc0pzU2NvcGVJbmZvc2NvcGUtaW5mb2xvY2Fsc1VzZWRJblRyeU9yU3luY2hhc1RoaXNMb2NhbGZvckVhY2hCb3hlZFZhcmlhYmxlbG9jYWxJc1VzZWRJblRyeU9yU3luY3RoaXM9bG9jYWxzVXNlZEluVHJ5T3JTeW5jPXtTY29wZUluZm9LaW5kLnNjb3BlSW5mb0pzQ2FwdHVyZWRTY29wZWNhcHR1cmVkLXNjb3BlU2NvcGVJbmZvS2luZC5jYXB0dXJlZFNjb3BlSnNDYXB0dXJlZExvb3BTY29wZWNhcHR1cmVkLWxvb3Atc2NvcGVib3hlZExvb3BWYXJpYWJsZXNoYXNCb3hlZExvb3BWYXJpYWJsZXNTY29wZUluZm9LaW5kLmNhcHR1cmVkTG9vcFNjb3BlS2VybmVsQ2xvc3VyZUNsYXNzSW5mb2Nsb3N1cmUtcmVwcmVzZW50YXRpb24taW5mb2Nsb3N1cmVFbnRpdHlsb2NhbFRvRmllbGRNYXBmcm9tU2NvcGVJbmZvY2xvc3VyZVNvdXJjZU5vZGVTY29wZUluZm9LaW5kLmNsb3N1cmVSZXByZXNlbnRhdGlvbkluZm9jcmVhdGVkRmllbGRFbnRpdGllc05vIGxvY2FsIGZvciAuIE9wdGlvbnM6IHRoaXNGaWVsZEVudGl0eUpDbG9zdXJlQ2xhc3NjbG9zdXJlLWNsYXNzY2xvc3VyZV9jbGFzcyhBbm9ueW1vdXNDbG9zdXJlTG9jYWxhbm9ueW1vdXNfY2xvc3VyZV9sb2NhbChKQ2xvc3VyZUZpZWxkY2xvc3VyZS1maWVsZFJlY29yZENsYXNzRGF0YXJlY29yZC1jbGFzcy1kYXRhb3JkZXJlZFR5cGVTZXRKQ2xhc3NEYXRhS2luZC5yZWNvcmRKUmVjb3JkcmVjb3JkX2NvbnRhaW5lcihyZWNvcmQtZmllbGRDbG9zdXJlQ2xhc3NEYXRhY2xvc3VyZS1jbGFzcy1kYXRhSkNsYXNzRGF0YUtpbmQuY2xvc3VyZUNsb3N1cmVDbGFzc0RlZmluaXRpb25jbG9zdXJlLWNsYXNzLWRlZmluaXRpb25DbG9zdXJlQ2xhc3NEZWZpbml0aW9uLm5vZGUgZm9yIENsb3N1cmVDbGFzc0RlZmluaXRpb24oa2luZDpDbG9zdXJlTWVtYmVyRGF0YW1lbWJlclRoaXNUeXBlc3RhdGljVHlwZXNDbG9zdXJlTWVtYmVyRGF0YS5zdGF0aWNUeXBlc19DbG9zdXJlRnVuY3Rpb25EYXRhJkNsb3N1cmVNZW1iZXJEYXRhJkZ1bmN0aW9uRGF0YVR5cGVWYXJpYWJsZXNNaXhpbl9DbG9zdXJlRnVuY3Rpb25EYXRhJkNsb3N1cmVNZW1iZXJEYXRhJkZ1bmN0aW9uRGF0YVR5cGVWYXJpYWJsZXNNaXhpbiZGdW5jdGlvbkRhdGFGb3JFYWNoUGFyYW1ldGVyTWl4aW5DbG9zdXJlRnVuY3Rpb25EYXRhY2xvc3VyZS1mdW5jdGlvbi1kYXRhY2xhc3NUeXBlVmFyaWFibGVBY2Nlc3NDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5ub25lQ2xhc3NUeXBlVmFyaWFibGVBY2Nlc3MucHJvcGVydHlDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5wYXJhbWV0ZXJDbGFzc1R5cGVWYXJpYWJsZUFjY2Vzcy5pbnN0YW5jZUZpZWxkSk1lbWJlckRhdGFLaW5kLmNsb3N1cmVGdW5jdGlvbkNsb3N1cmVGaWVsZERhdGFjbG9zdXJlLWZpZWxkLWRhdGFKTWVtYmVyRGF0YUtpbmQuY2xvc3VyZUZpZWxkc291cmNlTm9kZVVuZXhwZWN0ZWQgbm9kZSB0eXBlIENsb3N1cmVGaWVsZERhdGEuZ2V0RmllbGRUeXBlZ2V0RmllbGRDb25zdGFudEV4cHJlc3Npb25VbmV4cGVjdGVkIGZpZWxkIENsb3N1cmVGaWVsZERhdGEuZ2V0RmllbGRDb25zdGFudEV4cHJlc3Npb25DbG9zdXJlTWVtYmVyRGVmaW5pdGlvbmNsb3N1cmUtbWVtYmVyLWRlZmluaXRpb25DbG9zdXJlTWVtYmVyRGVmaW5pdGlvbihraW5kOlJlY29yZENvbnRhaW5lckRlZmluaXRpb25yZWNvcmQtZGVmaW5pdGlvblJlY29yZENvbnRhaW5lckRlZmluaXRpb24ubm9kZSBmb3IgUmVjb3JkQ29udGFpbmVyRGVmaW5pdGlvbihraW5kOkNsb3N1cmVSdGlOZWVkX2dldExvY2FsT25seSBrbm93IGhvdyB0byBnZXQvY3JlYXRlIGxvY2FscyBmb3IgVmFyaWFibGVEZWNsYXJhdGlvbnMgb3IgVHlwZVBhcmFtZXRlclR5cGVXaXRoQ29udGV4dC4gUmVjaWV2ZWQgQm94TG9jYWxUaGlzTG9jYWxKc0tlcm5lbFRvRWxlbWVudE1hcGpzLWtlcm5lbC10by1lbGVtZW50LW1hcGxpYnJhcnlUYWdjbGFzc1RhZ21lbWJlclRhZ3R5cGVWYXJpYWJsZVRhZ3R5cGUtdmFyaWFibGVzbGlicmFyeURhdGFUYWdsaWJyYXJ5LWRhdGFjbGFzc0RhdGFUYWdjbGFzcy1kYXRhdHlwZWRlZkRhdGFUYWd0eXBlZGVmLWRhdGFtZW1iZXJEYXRhVGFnbWVtYmVyLWRhdGF0eXBlVmFyaWFibGVEYXRhVGFndHlwZS12YXJpYWJsZS1kYXRhbmVzdGVkQ2xvc3VyZXNUYWduZXN0ZWQtY2xvc3VyZXNfdHlwZUNvbnZlcnRlcl9jb25zdGFudEVudmlyb25tZW50X3R5cGVFbnZpcm9ubWVudF9jbGFzc0hpZXJhcmNoeV9jb25zdGFudFZhbHVlZmllcnR5cGVkZWZNYXB0eXBlVmFyaWFibGVNYXBjb25zdHJ1Y3Rvck1hcG1ldGhvZE1hcF9uZXN0ZWRDbG9zdXJlTWFwX2dlbmVyYXRvckJvZGllc19pbmplY3RlZENsYXNzTWVtYmVyc19jYWNoZWRUeXBlTG9va3VwUmF3X2NhY2hlZFR5cGVMb29rdXBGdWxsb2xkTGlicmFyeWdldEVudm5ld0xpYnJhcnluZXdFbnZyZWdpc3RlckxpYnJhcnlvbGRDbGFzc25ld0NsYXNzb2xkVHlwZWRlZm5ld1R5cGVkZWZvbGRNZW1iZXJza2lwSW5kZXhuZXdNZW1iZXJNZW1iZXIgaW5kZXggbWlzbWF0Y2g6IE9sZCBtZW1iZXIgIGhhcyBpbmRleCB3aGVyZWFzIG5ldyBtZW1iZXIgb2xkVHlwZVZhcmlhYmxlb2xkVHlwZVZhcmlhYmxlRGF0YW5ld1R5cGVEZWNsYXJhdGlvbm5ld1R5cGVWYXJpYWJsZWNyZWF0ZVR5cGVWYXJpYWJsZWVudklzQ2xvc2VkdHlwZWRlZkNvdW50cmVnaXN0ZXJUeXBlZGVmcmVnaXN0ZXJNZW1iZXJyZWdpc3RlclR5cGVWYXJpYWJsZWZvckVhY2hMaWJyYXJ5Zm9yRWFjaFR5cGVkZWZmb3JFYWNoTWVtYmVyX19fbWFpbkZ1bmN0aW9uZ2V0TWV0aG9kSW50ZXJuYWxfbWFpbkxpYnJhcnlnZXRMaWJyYXJ5SW50ZXJuYWxmcm9tU3Bhbm5hYmxlTm8gZGF0YSBmb3IgbGlicmFyeUVudl9nZXRMaWJyYXJ5TmFtZWNoZWNrRmFtaWx5bG9va3VwTWVtYmVyX2ZvckVhY2hMaWJyYXJ5TWVtYmVyY2xhc3NFbnZnZXRDbGFzc0ludGVybmFsX2ZvckVhY2hDbGFzc2dldFN1cGVyVHlwZV9lbnN1cmVTdXBlcnR5cGVzX2Vuc3VyZVRoaXNBbmRSYXdUeXBlZ2V0VHlwZVZhcmlhYmxlSW50ZXJuYWxnZXRUeXBlVmFyaWFibGVzdXBlcmRhdGFsaW5rQnVpbGRlcmRlZmF1bHRTdXBlcmNsYXNzc2V0QnVpbGRlcmNyZWF0ZU9yZGVyZWRUeXBlU2V0Z2V0VHlwZWRlZkludGVybmFsZ2V0RmllbGRJbnRlcm5hbGdldENvbnN0cnVjdG9ySW50ZXJuYWxObyBlbmNsb3NpbmcgY2xhc3MgZm9yIHN1cGVyIG1lbWJlciBhY2Nlc3MgaW4gc3VwZXJNZW1iZXJnZXRTdXBlckNvbnN0cnVjdG9ydGFyZ2V0Tm9kZXNvdXJjZUNsYXNzdGFyZ2V0Q2xhc3NTdXBlciBjb25zdHJ1Y3RvciBmb3IgIG5vdCBmb3VuZC5nZXRQYXJhbWV0ZXJUeXBlc29ydGVkTmFtZWRQYXJhbWV0ZXJzY29tcHV0ZUNvbnN0YW50VmFsdWVfZ2V0Q29uc3RhbnRWYWx1ZWNvbnN0YW50UmVxdWlyZWRfZ2V0RnVuY3Rpb25UeXBlX2dldEZ1bmN0aW9uVHlwZVZhcmlhYmxlc19nZXRGaWVsZFR5cGVnZXRCb3VuZF9nZXRUeXBlVmFyaWFibGVEZWZhdWx0VHlwZWdldERlZmF1bHRUeXBlX2lzTWl4aW5BcHBsaWNhdGlvbl9pc1VubmFtZWRNaXhpbkFwcGxpY2F0aW9uX2lzU3VwZXJNaXhpbkFwcGxpY2F0aW9uX2ZvckVhY2hTdXBlcnR5cGVfZm9yRWFjaENvbnN0cnVjdG9yX2ZvckVhY2hMb2NhbENsYXNzTWVtYmVyX2ZvckVhY2hDbGFzc01lbWJlcl9nZXRDb25zdHJ1Y3RvckNvbnN0YW50X2dldEZpZWxkQ29uc3RhbnRFeHByZXNzaW9uZ2V0T3JkZXJlZFR5cGVTZXRtYXhEZXB0aGdldE1lbWJlckRlZmluaXRpb25JbnRlcm5hbGdldENsYXNzRGVmaW5pdGlvbkludGVybmFsbWVtYmVyRGVmaW5pdGlvbmNhY2hlZFN0YXRpY1R5cGVzTm8gc3RhdGljIHR5cGVzIGNhY2hlZCBmb3IgZ2V0R2V0dGVyU2VsZWN0b3JnZXRTZXR0ZXJTZWxlY3RvcmdldEludm9jYXRpb25TZWxlY3RvckNhbiBvbmx5IGdldCB0aGUgc2VsZWN0b3IgZm9yIGEgcHJvcGVydHkgZ2V0IG9yIGFuIGludm9jYXRpb246IGlyTmFtZXR5cGVMb29rdXByZXNvbHZlQXNSYXdfdHlwZUxvb2t1cGNhY2hlZE1heUxvb2t1cEluTWFpbm1heUxvb2t1cEluTWFpbm1haW5VcmlmaW5kSW5MaWJyYXJ5ZmluZEluX2dldFN0cmluZ0FyZ3VtZW50SlMgYnVpbHRpbiBleHByZXNzaW9uIGhhcyBubyB0eXBlLkpTIGJ1aWx0aW4gaXMgbWlzc2luZyBuYW1lLlVuZXhwZWN0ZWQgZmlyc3QgYXJndW1lbnQuSlMgZW1iZWRkZWQgZ2xvYmFsIGV4cHJlc3Npb24gaGFzIG5vIHR5cGUuSlMgZW1iZWRkZWQgZ2xvYmFsIGlzIG1pc3NpbmcgbmFtZS5KUyBlbWJlZGRlZCBnbG9iYWwgaGFzIG1vcmUgdGhhbiAyIGFyZ3VtZW50cy5ObyBleHByZXNzaW9uIGZvciBjb25zdGFudC5ObyBjb25zdGFudCBmb3IgZ2V0TWV0YWRhdGFObyBzdXBlciBub1N1Y2hNZXRob2QgZm91bmQgZm9yIGNsYXNzIGNyZWF0ZUNvbnN0cnVjdG9yQm9keWNyZWF0ZUdlbmVyYXRvckJvZHlVbmV4cGVjdGVkIGVudGl0eSAsIGV4cGVjdGVkIGZhbWlseSBsaWJyYXJ5TGlzdEludGVybmFsTm8gbGlicmFyeSBlbnRpdHkgZm9yIE5vIGNsYXNzIGVudGl0eSBmb3IgTm8gZmllbGQgZW50aXR5IGZvciBObyBmdW5jdGlvbiBlbnRpdHkgZm9yIE5vIGNvbnN0cnVjdG9yIGVudGl0eSBmb3IgTm8gdHlwZSB2YXJpYWJsZSBlbnRpdHkgZm9yICBvbiBObyB0eXBlZGVmIGVudGl0eSBmb3IgX2dldENvbnN0cnVjdG9yQm9keV9nZXRQYXJhbWV0ZXJTdHJ1Y3R1cmVGcm9tRnVuY3Rpb25Ob2RlYWRkQ29uc3RydWN0b3JCb2R5Z2V0UGFyZW50TWVtYmVyVW5leHBlY3RlZCBtZW1iZXIga2luZCBfY29uc3RydWN0UmVjb3JkRmllbGRFbnRyeWJveGVkRmllbGRib3hlZEZpZWxkc2NhcHR1cmVkVmFyaWFibGVzQWNjZXNzb3Jjb250YWluZXJEYXRhZXh0ZW5kQ2xhc3NfaXNJblJlY29yZHJlY29yZEZpZWxkc1Zpc2libGVJblNjb3BlY29uc3RydWN0Q2xvc3VyZUNsYXNzdHlwZVZhcmlhYmxlQWNjZXNzX2NvbXB1dGVDbG9zdXJlTmFtZWNsb3N1cmVEYXRhX2J1aWxkQ2xvc3VyZUNsYXNzRmllbGRzX2NvbnN0cnVjdFNpZ25hdHVyZU1ldGhvZGZpZWxkTnVtYmVyY2FwdHVyZWRMb2NhbGNvbnN0cnVjdGVkRmllbGRfY29uc3RydWN0Q2xvc3VyZUZpZWxkRm9yUmVjb3JkX2NvbnN0cnVjdENsb3N1cmVGaWVsZFVuZXhwZWN0ZWQgZmllbGQgbm9kZSB0eXBlOiBfYm94X19nZXRDbG9zdXJlVmFyaWFibGVOYW1lYW5vbnltb3VzX2NhcHR1cmVkX2Z1bmN0aW9uRGF0YUpzRWxlbWVudEVudmlyb25tZW50VW5leHBlY3RlZCBtYXJrZXIgVGhlIGNvbnN0cnVjdG9yICcnIHdhcyBub3QgZm91bmQgaW4gY2xhc3MgJ2luIGxpYnJhcnkgVGhlIG1lbWJlciAnJyB3YXMgbm90IGZvdW5kIGluICcgd2FzIG5vdCBmb3VuZCBpbiBsaWJyYXJ5ICcnICB3YXMgbm90IGZvdW5kIGluIGxpYnJhcnkgJycgd2FzIG5vdCBmb3VuZC5Kc0JlaGF2aW9yQnVpbGRlckpzQ29uc3RhbnRFbnZpcm9ubWVudF92YWx1ZU1hcEpzRXZhbHVhdGlvbkVudmlyb25tZW50X0V2YWx1YXRpb25FbnZpcm9ubWVudC5nZXRMb2NhbENvbnN0YW50X0VudGl0eUxvb2t1cExpYnJhcnkgZm9yIGluZGV4ICBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuQ2xhc3MgZm9yIGluZGV4IFR5cGVkZWYgZm9yIGluZGV4IE1lbWJlciBmb3IgaW5kZXggVHlwZSB2YXJpYWJsZSBmb3IgaW5kZXggTm8gbGlicmFyeSBmb3VuZCBmb3IgaW5kZXggTm8gY2xhc3MgZm91bmQgZm9yIGluZGV4IE5vIHR5cGVkZWYgZm91bmQgZm9yIGluZGV4IE5vIG1lbWJlciBmb3VuZCBmb3IgaW5kZXggTm8gdHlwZSB2YXJpYWJsZSBmb3VuZCBmb3IgaW5kZXggQ2xvc2VkRW50aXR5TG9va3VwTGF0ZU1lbWJlcktpbmRMYXRlTWVtYmVyS2luZC5jb25zdHJ1Y3RvckJvZHlMYXRlTWVtYmVyS2luZC5nZW5lcmF0b3JCb2R5Q2xvc2VkRW50aXR5UmVhZGVyX3JlYWRMYXRlTWVtYmVyRnJvbURhdGFTb3VyY2VVbmV4cGVjdGVkIGxhdGUgbWVtYmVyIGtpbmQ6IENsb3NlZEVudGl0eVdyaXRlcl9lYXJseU1lbWJlckluZGV4TGltaXRfd3JpdGVMYXRlTWVtYmVyVG9EYXRhU2lua1VuZXhwZWN0ZWQgbGF0ZSBtZW1iZXIgRnVuY3Rpb25TZXRKc0Nsb3NlZFdvcmxkY2xvc2VkLXdvcmxkX2FsbEZ1bmN0aW9uc19saXZlTWl4aW5Vc2VzX3N1YnR5cGVDb3ZlcmVkQnlDYWNoZV9zb3J0ZXJtZW1iZXJBY2Nlc3NhbGxvY2F0b3JBbmFseXNpc3NlY29uZE1hcHN1YmNsYXNzZXNOZWVkTm9TdWNoTWV0aG9kcm9vdE5vZGVyb290Q2xhc3NfaGFzQ29uY3JldGVNYXRjaHN0b3BBdFN1cGVyY2xhc3NJdGVyYXRpb25TdGVwLlNUT1BObyBjbGFzcyBzZXQgZm9yIHN1YnR5cGVOb2Rlc3VidHlwZU5vZGVzdHlwZVNldG90aGVyVHlwZVNldHNvdGhlckNsYXNzb3RoZXJUeXBlU2V0Y29tbW9uU3VwZXJ0eXBlc2FkZExpdmVVc2VfaXNOYW1lZE1peGluQXBwbGljYXRpb25jdXJyZW50TWl4aW5fZW5zdXJlRnVuY3Rpb25TZXRoYXNBbnlVc2VyRGVmaW5lZEdldHRlciBoYXMgbm90IGJlZW4gaW5zdGFudGlhdGVkLktlcm5lbFNvcnRlcl9jb21wYXJlTGlicmFyaWVzX2NvbXBhcmVTb3VyY2VTcGFuc2VudGl0eTFzb3VyY2VTcGFuMWVudGl0eTJzb3VyY2VTcGFuMnNvcnRMaWJyYXJpZXNzb3J0TWVtYmVyc2NvbXBhcmVNZW1iZXJzQnlMb2NhdGlvbnNvcnRDbGFzc2VzcmVndWxhckNsYXNzZXN1bm5hbWVkTWl4aW5zY29tcGFyZUNsYXNzZXNCeUxvY2F0aW9uTXVsdGlwbGUgbWl4aW5zIG5hbWVkIHNvcnRUeXBlZGVmc2NvbXBhcmVMaWJyYXJpZXNCeUxvY2F0aW9uZGVmaW5pdGlvbjFkZWZpbml0aW9uMmNvbXBhcmVUeXBlZGVmc0J5TG9jYXRpb25LZXJuZWxTb3J0ZXIuY29tcGFyZVR5cGVkZWZzQnlMb2NhdGlvbiB1bmltcGxlbWVudGVkTG9jYWxMb29rdXBJbXBsX0VudGl0eUNvbnZlcnRlcl9jbG9zdXJlRGF0YUJ1aWxkZXJfYWJzdHJhY3RWYWx1ZVN0cmF0ZWd5a091dHB1dFVuaXREYXRhX2NvbnZlcnRCYWNrZW5kVXNhZ2VfY29udmVydE5hdGl2ZURhdGFfY29udmVydEludGVyY2VwdG9yRGF0YWNvbnZlcnRDbGFzc0hpZXJhcmNoeU5vZGV0b0JhY2tlbmRDbGFzc2hpZXJhcmNoeURlcHRoY29udmVydENsYXNzU2V0bmV3Q2xhc3NTZXRuZXdTdWJ0eXBldG9CYWNrZW5kTWVtYmVyU2V0dG9CYWNrZW5kQ2xhc3NNYXB0b0JhY2tlbmRDbGFzc1NldHRvQmFja2VuZE1lbWJlck1hcGtlcm5lbFJ0aU5lZWRsb2NhbEZ1bmN0aW9uc05vZGVzTmVlZGluZ1NpZ25hdHVyZWxvY2FsRnVuY3Rpb25zTmVlZGluZ1NpZ25hdHVyZWxvY2FsRnVuY3Rpb25zTm9kZXNOZWVkaW5nVHlwZUFyZ3VtZW50c2xvY2FsRnVuY3Rpb25zTmVlZGluZ1R5cGVBcmd1bWVudHNqUnRpTmVlZF9jb252ZXJ0UnVudGltZVR5cGVzTmVlZGNhbGxNZXRob2RzTmVlZGluZ1NpZ25hdHVyZWNhbGxNZXRob2RzTmVlZGluZ1R5cGVBcmd1bWVudHNtZXRob2RzTmVlZGluZ1NpZ25hdHVyZW1ldGhvZHNOZWVkaW5nVHlwZUFyZ3VtZW50c29sZE5vU3VjaE1ldGhvZERhdGF0b0JhY2tlbmRGdW5jdGlvblNldG9sZEFubm90YXRpb25zRGF0YV9jb252ZXJ0T3V0cHV0VW5pdERhdGFoZWxwZXJGdW5jdGlvbnNVc2VkaGVscGVyQ2xhc3Nlc1VzZWR0b0JhY2tlbmRUeXBlaXNIdG1sTG9hZGVkX2NvbnZlcnROYXRpdmVCYXNpY0RhdGF0b0JhY2tlbmRMaWJyYXJ5TWFwY29udmVydE5hdGl2ZUJlaGF2aW9yVHlwZWFsbG93RnJlZVZhcmlhYmxlc2NvbnZlcnROYXRpdmVCZWhhdmlvcm5ld0JlaGF2aW9yYmFja2VuZE1ldGhvZGNsYXNzZXNOZWVkaW5nVHlwZUFyZ3VtZW50c3NlbGVjdG9yc05lZWRpbmdUeXBlQXJndW1lbnRzdG9CYWNrZW5kTGlicmFyeWluc3RhbnRpYXRpb25zTmVlZGluZ1R5cGVBcmd1bWVudHNvcmlnaW5hbENsb3N1cmVGdW5jdGlvbk5vZGViYWNrZW5kRW50aXR5VHJpdmlhbENsb3N1cmVSdGlOZWVkSnNDbG9zdXJlUnRpTmVlZEpzVG9Gcm9udGVuZE1hcHRvQmFja2VuZExpYnJhcnlTZXR0b0JhY2tlbmRGaWVsZFNldGJhY2tlbmRGaWVsZGJhY2tlbmRGdW5jdGlvblYxSnNUb0Zyb250ZW5kTWFwSW1wbF9iYWNrZW5kdG9CYWNrZW5kRW50aXR5dG9CYWNrZW5kVHlwZWRlZnRvQmFja2VuZFR5cGVWYXJpYWJsZXVuZXhwZWN0ZWQgZW50aXR5IExvY2FsIGZ1bmN0aW9uIHR5cGUgdmFyaWFibGVzIGFyZSBub3Qgc3VwcG9ydGVkLmluZGV4ZWRUeXBlVmFyaWFibGVOdWxsIG5vdCBhbGxvd2VkIGFzIGNvbnN0YW50IHZhbHVlLl9UeXBlQ29udmVydGVyX2Z1bmN0aW9uVHlwZVZhcmlhYmxlc2NvbnZlcnRUeXBlc2NvbnZlcnRlckZ1bmN0aW9uIHR5cGUgdmFyaWFibGUgIG5vdCBmb3VuZCBpbiBfQ29uc3RhbnRDb252ZXJ0ZXJ0eXBlQ29udmVydGVyX2hhbmRsZVZhbHVlc05vIGJhY2tlbmQgZmllbGQgZm9yIFVuZXhwZWN0ZWQgdmlzaXRJbnRlcmNlcHRvciBVbmV4cGVjdGVkIERlZmVycmVkR2xvYmFsQ29uc3RhbnRWYWx1ZSBjb252ZXJ0TWFwY29udmVydEtleWNvbnZlcnRWYWx1ZW5ld01hcG5ld0tleWRhcnQyanMuYmFja2VuZF9hcGlkYXJ0MmpzLmNvbW1vbi5yZXNvbHV0aW9uSXJBbm5vdGF0aW9uRGF0YV9uYXRpdmVDbGFzc05hbWVzX25hdGl2ZU1lbWJlcnNfbmF0aXZlTWVtYmVyTmFtZXNfY3JlYXRlc0Fubm90YXRpb25zX3JldHVybnNBbm5vdGF0aW9uc19qc0ludGVyb3BMaWJyYXJ5TmFtZXNfanNJbnRlcm9wQ2xhc3NOYW1lc19hbm9ueW1vdXNKc0ludGVyb3BDbGFzc2VzX2pzSW50ZXJvcE1lbWJlck5hbWVzX21lbWJlclByYWdtYUFubm90YXRpb25zZ2V0TmF0aXZlQ2xhc3NOYW1laGFzTmF0aXZlQm9keWdldE5hdGl2ZU1lbWJlck5hbWVnZXRNZW1iZXJQcmFnbWFBbm5vdGF0aW9uRGF0YVByYWdtYUFubm90YXRpb25EYXRhUHJhZ21hQW5ub3RhdGlvbkRhdGEocHJvY2Vzc0Fubm90YXRpb25zbW9kdWxhckNvcmVwcm9jZXNzTWVtYmVycHJhZ21hQW5ub3RhdGlvbm5hdGl2ZUNsYXNzTmFtZV9nZXROYXRpdmVDbGFzc05hbWVfaXNOYXRpdmVNZW1iZXJfZ2V0TmF0aXZlTWVtYmVyTmFtZV9nZXRDcmVhdGVzQW5ub3RhdGlvbl9nZXRSZXR1cm5zQW5ub3RhdGlvbl9nZXRKc0ludGVyb3BOYW1lX2lzQW5vbnltb3VzSnNJbnRlcm9wX2dldFByYWdtYUFubm90YXRpb25jb21wdXRlUHJhZ21hQW5ub3RhdGlvbkRhdGFGcm9tSXJjb25zdGFudEV4cHJlc3Npb25VbmV4cGVjdGVkIHVuZXZhbHVhdGVkIGNvbnN0YW50IG9uIEtlcm5lbFNjb3BlSW5mb3dpdGhCb3hlZFZhcmlhYmxlc0tlcm5lbFNjb3BlSW5mbyh0aGlzPWZyZWVWcmlhYmxlcz1mcmVlVmFyaWFibGVzRm9yUnRpPXtLZXJuZWxDYXB0dXJlZFNjb3BlZm9yU2lnbmF0dXJlS2VybmVsQ2FwdHVyZWRMb29wU2NvcGVOb2RlQm94VmFyaWFibGVVc2VLaW5kbG9jYWxUeXBlbWFwTGl0ZXJhbGNvbnN0cnVjdG9yVHlwZUFyZ3VtZW50c3RhdGljVHlwZUFyZ3VtZW50aW5zdGFuY2VUeXBlQXJndW1lbnRsb2NhbFR5cGVBcmd1bWVudG1lbWJlclBhcmFtZXRlcmxvY2FsUGFyYW1ldGVybWVtYmVyUmV0dXJuVHlwZWxvY2FsUmV0dXJuVHlwZWZpZWxkVHlwZWluc3RhbnRpYXRpb25UeXBlQXJndW1lbnRWYXJpYWJsZVVzZV9zaW1wbGVWYXJpYWJsZVVzZShraW5kPSxtZW1iZXI9bG9jYWxGdW5jdGlvbj0saW52b2NhdGlvbj1pbnN0YW50aWF0aW9uPVR5cGVWYXJpYWJsZUtpbmRUeXBlVmFyaWFibGVLaW5kLmNsc1R5cGVWYXJpYWJsZUtpbmQubWV0aG9kVHlwZVZhcmlhYmxlS2luZC5sb2NhbFR5cGVWYXJpYWJsZUtpbmQuZnVuY3Rpb25UeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHRVbmV4cGVjdGVkIHR5cGUgZGVjbGFyYXRpb246IFR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dC5hY2NlcHRUeXBlVmFyaWFibGVUeXBlV2l0aENvbnRleHQudmlzaXRDaGlsZHJlblR5cGVWYXJpYWJsZVR5cGVXaXRoQ29udGV4dCh0eXBlPSxjb250ZXh0PSx0eXBlRGVjbGFyYXRpb249SW1wYWN0UmVnaXN0cnlyZWdpc3RlckludExpdGVyYWxyZWdpc3RlckRvdWJsZUxpdGVyYWxyZWdpc3RlckJvb2xMaXRlcmFscmVnaXN0ZXJTdHJpbmdMaXRlcmFscmVnaXN0ZXJTeW1ib2xMaXRlcmFscmVnaXN0ZXJOdWxsTGl0ZXJhbHJlZ2lzdGVyTGlzdExpdGVyYWxyZWdpc3RlclNldExpdGVyYWxyZWdpc3Rlck1hcExpdGVyYWxyZWdpc3RlclN0YXRpY1RlYXJPZmZyZWdpc3RlclN0YXRpY0dldHJlZ2lzdGVyU3RhdGljU2V0cmVnaXN0ZXJBc3NlcnR3aXRoTWVzc2FnZXJlZ2lzdGVyU3luY1N0YXJyZWdpc3RlckFzeW5jcmVnaXN0ZXJBc3luY1N0YXJyZWdpc3RlclN0cmluZ0NvbmNhdGVuYXRpb25yZWdpc3RlckxvY2FsRnVuY3Rpb25yZWdpc3RlckxvY2FsV2l0aG91dEluaXRpYWxpemVycmVnaXN0ZXJJbXBsaWNpdENhc3RyZWdpc3RlckFzQ2FzdHJlZ2lzdGVyVGhyb3dyZWdpc3RlclN5bmNGb3JJbml0ZXJhdG9yQ2xhc3NSZWxhdGlvbnJlZ2lzdGVyQXN5bmNGb3JJbnJlZ2lzdGVyQ2F0Y2hyZWdpc3RlclN0YWNrVHJhY2VyZWdpc3RlckNhdGNoVHlwZXJlZ2lzdGVyRmllbGRJbml0aWFsaXphdGlvbnJlZ2lzdGVyRmllbGRDb25zdGFudEluaXRpYWxpemF0aW9ucmVnaXN0ZXJMb2FkTGlicmFyeXJlZ2lzdGVyUmVkaXJlY3RpbmdJbml0aWFsaXplcnJlZ2lzdGVyUGFyYW1ldGVyQ2hlY2tyZWdpc3RlckxhenlGaWVsZHJlZ2lzdGVyTmV3cmVnaXN0ZXJDb25zdEluc3RhbnRpYXRpb25yZWdpc3RlckxvY2FsRnVuY3Rpb25JbnZvY2F0aW9ucmVnaXN0ZXJJbnN0YW5jZUludm9jYXRpb25yZWdpc3RlckZ1bmN0aW9uSW52b2NhdGlvbnJlZ2lzdGVyRHluYW1pY0dldHJlZ2lzdGVySW5zdGFuY2VHZXRyZWdpc3RlckR5bmFtaWNTZXRyZWdpc3Rlckluc3RhbmNlU2V0cmVnaXN0ZXJTdXBlckludm9jYXRpb25yZWdpc3RlclN1cGVyR2V0cmVnaXN0ZXJTdXBlclNldHJlZ2lzdGVyU3VwZXJJbml0aWFsaXplcnJlZ2lzdGVyQ29uc3RydWN0b3JOb2RlcmVnaXN0ZXJGaWVsZE5vZGVyZWdpc3RlclByb2NlZHVyZU5vZGVyZWdpc3RlclN0YXRpY0ludm9jYXRpb25Ob2RlcmVnaXN0ZXJTd2l0Y2hTdGF0ZW1lbnROb2RlcmVnaXN0ZXJDb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGVJbXBhY3RCdWlsZGVyQmFzZWhhbmRsZUFzeW5jTWFya2VyVW5leHBlY3RlZCBhc3luYyBtYXJrZXI6IHBvc2l0aW9uQXJndW1lbnRzX0ltcGFjdEJ1aWxkZXImSW1wYWN0QnVpbGRlckJhc2UmSW1wYWN0UmVnaXN0cnlNaXhpbmltcGFjdERhdGFfcmVnaXN0ZXJGZWF0dXJlX3JlZ2lzdGVyVHlwZVVzZV9zdXBlckluaXRpYWxpemVyc19zdXBlclNldHNfc3VwZXJHZXRzX3N1cGVySW52b2NhdGlvbnNfaW5zdGFuY2VTZXRzX2R5bmFtaWNTZXRzX2luc3RhbmNlR2V0c19keW5hbWljR2V0c19mdW5jdGlvbkludm9jYXRpb25zX2luc3RhbmNlSW52b2NhdGlvbnNfZHluYW1pY0ludm9jYXRpb25zX2xvY2FsRnVuY3Rpb25JbnZvY2F0aW9uc19zdGF0aWNJbnZvY2F0aW9uc19jb25zdHJ1Y3Rvckludm9jYXRpb25zX2NvbnN0SW5zdGFudGlhdGlvbnNfRmVhdHVyZS5sYXp5RmllbGRfVHlwZVVzZUtpbmQucGFyYW1ldGVyQ2hlY2tfcmVkaXJlY3RpbmdJbml0aWFsaXplcnNfRmVhdHVyZS5sb2FkTGlicmFyeV9maWVsZEluaXRpYWxpemVyc19maWVsZENvbnN0YW50SW5pdGlhbGl6ZXJzX1R5cGVVc2VLaW5kLmNhdGNoVHlwZV9GZWF0dXJlLnN0YWNrVHJhY2VfRmVhdHVyZS5jYXRjaENsYXVzZV9mb3JJbkRhdGFfRmVhdHVyZS50aHJvd0V4cHJlc3Npb25fVHlwZVVzZUtpbmQuYXNDYXN0X1R5cGVVc2VLaW5kLmltcGxpY2l0Q2FzdF9UeXBlVXNlS2luZC5pc0NoZWNrX0ZlYXR1cmUubG9jYWxXaXRob3V0SW5pdGlhbGl6ZXJfRmVhdHVyZS5zdHJpbmdDb25jYXRlbmF0aW9uX1R5cGVVc2VLaW5kLmFzeW5jU3Rhck1hcmtlcl9UeXBlVXNlS2luZC5hc3luY01hcmtlcl9UeXBlVXNlS2luZC5zeW5jU3Rhck1hcmtlcl9GZWF0dXJlLmFzc2VydFdpdGhNZXNzYWdlX0ZlYXR1cmUuYXNzZXJ0V2l0aG91dE1lc3NhZ2Vfc3RhdGljU2V0c19zdGF0aWNHZXRzX3N0YXRpY1RlYXJPZmZzX21hcExpdGVyYWxzX2xpc3RMaXRlcmFsc19zZXRMaXRlcmFsc19GZWF0dXJlLm51bGxMaXRlcmFsX3N5bWJvbExpdGVyYWxzX3N0cmluZ0xpdGVyYWxzX2Jvb2xMaXRlcmFsc19kb3VibGVMaXRlcmFsc19pbnRMaXRlcmFsc19ydW50aW1lVHlwZVVzZXNfY29uc3RydWN0b3JOb2Rlc19maWVsZE5vZGVzX3Byb2NlZHVyZU5vZGVzX3N0YXRpY0ludm9jYXRpb25Ob2Rlc19zd2l0Y2hTdGF0ZW1lbnROb2Rlc19jb25zdENvbnN0cnVjdG9ySW52b2NhdGlvbk5vZGVzSW1wYWN0QnVpbGRlckltcGFjdEJ1aWxkZXJEYXRhQ29uc3RhbnRJbXBhY3RWaXNpdG9yVW5leHBlY3RlZCBjb25zdGFudCBfZ2V0TmFtZWRBcmd1bWVudHNNb2R1bGFyQ29yZU1vZHVsYXJNZW1iZXJEYXRhTW9kdWxhclN0cmF0ZWd5Y29tcHV0ZU1vZGVsVmFyaWFibGVTY29wZU1vZGVsVmFyaWFibGVTY29wZU1vZGVsSW1wbF9hc3NpZ25lZFZhcmlhYmxlc2NyZWF0ZVNjb3BlRm9ycmVnaXN0ZXJBc3NpZ25lZFZhcmlhYmxlVmFyaWFibGVTY29wZVZhcmlhYmxlU2NvcGVJbXBsX3N1YlNjb3Blc2FkZFN1YlNjb3Blc3ViU2NvcGVWYXJpYWJsZUNvbGxlY3Rvck1peGluY3VycmVudFZhcmlhYmxlU2NvcGV2aXNpdEluVmFyaWFibGVTY29wZW9sZFNjb3BlcmVnaXN0ZXJDb250aW51ZVN3aXRjaHJlZ2lzdGVyQmFja2VuZEZ1bmN0aW9uVXNlcmVnaXN0ZXJCYWNrZW5kQ2xhc3NVc2VyZWdpc3Rlckdsb2JhbENsYXNzRGVwZW5kZW5jeWJhY2tlbmRJbXBhY3RyZWdpc3RlclVzZWRNZW1iZXJCYWNrZW5kVXNhZ2VCdWlsZGVySW1wbF9mcm9udGVuZFN0cmF0ZWd5X2dsb2JhbEZ1bmN0aW9uRGVwZW5kZW5jaWVzX2dsb2JhbENsYXNzRGVwZW5kZW5jaWVzX2hlbHBlckZ1bmN0aW9uc1VzZWRfaGVscGVyQ2xhc3Nlc1VzZWRfbmVlZFRvSW5pdGlhbGl6ZUlzb2xhdGVBZmZpbml0eVRhZ19uZWVkVG9Jbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eV9pc1ZhbGlkQmFja2VuZFVzZUJhY2tlbmQgdXNlIG9mIF9pc1ZhbGlkRW50aXR5X2ludGVybmFsL2pzX3J1bnRpbWUvbGliL19wcm9jZXNzQmFja2VuZFN0YXRpY1VzZV9wcm9jZXNzQmFja2VuZEluc3RhbnRpYXRpb25CYWNrZW5kVXNhZ2VJbXBsYmFja2VuZC11c2FnZWpzX2JhY2tlbmQuYmFja2VuZC5yZXNvbHV0aW9uX2xpc3RlbmVyUmVzb2x1dGlvbkVucXVldWVyTGlzdGVuZXJfZGVmZXJyZWRMb2FkVGFza19pc0xvYWRMaWJyYXJ5RnVuY3Rpb25SZXNvbHZlZF9yZWdpc3RlckJhY2tlbmRJbXBhY3RfYWRkSW50ZXJjZXB0b3JzX2NvbXB1dGVEZWZlcnJlZExvYWRpbmdJbXBhY3RkZWZlcnJlZCBsb2FkbmF0aXZlIGNsYXNzZXNtYWluIGltcGFjdGNvbXB1dGVIZWxwZXJzSW1wYWN0YWxsUGFyYW1ldGVyVHlwZXNfcmVnaXN0ZXJSdW50aW1lVHlwZV9yZWdpc3RlckNoZWNrZWRNb2RlSGVscGVyc2pzX2JhY2tlbmQucnVudGltZV90eXBlc19yZXNvbHV0aW9uUnRpTm9kZV90ZXN0U3RhdGVfbGl0ZXJhbFN0YXRlaGFzRGlyZWN0VGVzdGhhc0luZGlyZWN0VGVzdGhhc1Rlc3RoYXNEaXJlY3RMaXRlcmFsaGFzSW5kaXJlY3RMaXRlcmFsaGFzTGl0ZXJhbG1hcmtUZXN0c2V0VGVzdFN0YXRlbWFya0RpcmVjdFRlc3RtYXJrSW5kaXJlY3RUZXN0bWFya0RpcmVjdExpdGVyYWxzZXRMaXRlcmFsU3RhdGVtYXJrSW5kaXJlY3RMaXRlcmFsQ2xhc3NOb2RlTWV0aG9kTm9kZWlzQ2FsbFRhcmdldGluc3RhbmNlTmFtZWlzTm9TdWNoTWV0aG9kc2VsZWN0b3JBcHBsaWVzTWV0aG9kTm9kZShmdW5jdGlvbj0scGFyYW1ldGVyU3RydWN0dXJlPSxpc0NhbGxUYXJnZXQ9LGluc3RhbmNlTmFtZT1UeXBlVmFyaWFibGVUZXN0c19tZXRob2RzX2FwcGxpZWRTZWxlY3Rvck1hcF9pbnN0YW50aWF0aW9uTWFwX3NldHVwRGVwZW5kZW5jaWVzX3Byb3BhZ2F0ZVRlc3RzX3Byb3BhZ2F0ZUxpdGVyYWxzX2NvbGxlY3RSZXN1bHRzY2xhc3NUZXN0c0ZvclRlc3RpbmdkaXJlY3RDbGFzc1Rlc3RzRm9yVGVzdGluZ21ldGhvZFRlc3RzRm9yVGVzdGluZ2RpcmVjdE1ldGhvZFRlc3RzRm9yVGVzdGluZ2dldFR5cGVBcmd1bWVudERlcGVuZGVuY2llc2ZvckVhY2hBcHBsaWVkU2VsZWN0b3Jmb3JFYWNoR2VuZXJpY0luc3RhbnRpYXRpb25fZ2V0Q2xhc3NOb2RlX2dldE1ldGhvZE5vZGVyZWdpc3RlckRlcGVuZGVuY2llc3Byb2Nlc3NFbnRpdHlwcm9jZXNzVHlwZVZhcmlhYmxlVHlwZXByb2Nlc3NUeXBlYWRkTm9kZSBkaXJlY3QgdGVzdCBpbmRpcmVjdCB0ZXN0IGRpcmVjdCBsaXRlcmFsIGluZGlyZWN0IGxpdGVyYWxjbGFzc2VzOm1ldGhvZHM6ZXhwbGljaXQgaXMtdGVzdHM6aW1wbGljaXQgaXMtdGVzdHM6YWRkSW1wbGljaXRDaGVja2FkZEltcGxpY2l0Q2hlY2tzVHJpdmlhbFJ1bnRpbWVUeXBlc05lZWRSdW50aW1lVHlwZXNOZWVkSW1wbHJ1bnRpbWUtdHlwZXMtbmVlZFJ1bnRpbWVUeXBlc05lZWRCdWlsZGVyY29tcHV0ZVJ1bnRpbWVUeXBlc05lZWRUcml2aWFsUnVudGltZVR5cGVzTmVlZEJ1aWxkZXJSdW50aW1lVHlwZXNOZWVkQnVpbGRlckltcGxjbGFzc2VzVXNpbmdUeXBlVmFyaWFibGVMaXRlcmFsc21ldGhvZHNVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxzbG9jYWxGdW5jdGlvbnNVc2luZ1R5cGVWYXJpYWJsZUxpdGVyYWxzc2VsZWN0b3JzTmVlZGluZ1R5cGVBcmd1bWVudHNGb3JUZXN0aW5naW5zdGFudGlhdGlvbnNOZWVkaW5nVHlwZUFyZ3VtZW50c0ZvclRlc3Rpbmd0eXBlVmFyaWFibGVUZXN0c0ZvclRlc3Rpbmdwb3RlbnRpYWxseU5lZWRUeXBlQXJndW1lbnRzY2hlY2tDbG9zdXJlc3BvdGVudGlhbFN1YnR5cGVPZmNoZWNrRnVuY3Rpb25UeXBlbG9jYWxGdW5jdGlvbnNUb1JlbW92ZWNsb3N1cml6ZWRNZW1iZXJzVG9SZW1vdmVwcm9jZXNzQ2hlY2tzaXRmbmVlZGVkT25BbGxuZWVkZWRPbkZ1bmN0aW9uc2NsYXNzZXNEaXJlY3RseU5lZWRpbmdSdW50aW1lVHlwZWltcGxpZWRDbGFzc2VzVW5leHBlY3RlZCB0eXBlIHJlY2VpdmVyQ2xhc3Nlc2FyZ3VtZW50Q2xhc3Nlc3JlY2VpdmVyQ2xhc3Nhcmd1bWVudENsYXNzYWxsQ2xhc3Nlc05lZWRpbmdSdW50aW1lVHlwZU5hdGl2ZU1lbWJlclJlc29sdmVyYW5ub3RhdGlvbkRhdGFCYXNlTmF0aXZlQ2xhc3NGaW5kZXJfdGFnT3duZXJfcHJvY2Vzc05hdGl2ZUNsYXNzZXNJbkxpYnJhcnlfcHJvY2Vzc1N1YmNsYXNzZXNPZk5hdGl2ZUNsYXNzZXNfcHJvY2Vzc05hdGl2ZUNsYXNzJyBhbHJlYWR5IGluIHVzZSBieSAnX2ZpbmRFeHRlbmRzTmFtZU9mQ2xhc3NuYXRpdmVDbGFzc2VzQW5kU3ViY2xhc3Nlc3BvdGVudGlhbEV4dGVuZHNleHRlbmRzTmFtZXBvdGVudGlhbFN1YmNsYXNzZXNuYXRpdmVTdXBlcmNsYXNzT2Z3YWxrUG90ZW50aWFsU3ViY2xhc3Nlc25hdGl2ZVN1cGVyY2xhc3Npc0Fubm90YXRpb25hbm5vdGF0aW9uQ2xhc3NyZWFkQW5ub3RhdGlvbk5hbWVrZXJuZWwuZGVmZXJyZWRfbG9hZF9kYXRhS2VybmVsRGVmZXJyZWRMb2FkVGFza19hZGRpdGlvbmFsRXhwb3J0c1NldHNfZmluZEltcG9ydHNUb2ZpbmQtaW1wb3J0c2dldExpYnJhcnlOb2RlZ2V0VHlwZWRlZk5vZGVDb25zdGFudENvbGxlY3Rvcl9pc1Zpc2libGVLZXJuZWxUb0VsZW1lbnRNYXBnZXRGb3JlaWduS2luZGdldEludGVyZmFjZVR5cGVGb3JKc0ludGVyY2VwdG9yQ2FsbGdldExvY2FsRnVuY3Rpb25Gb3JlaWduS2luZEZvcmVpZ25LaW5kLkpTRm9yZWlnbktpbmQuSlNfQlVJTFRJTkZvcmVpZ25LaW5kLkpTX0VNQkVEREVEX0dMT0JBTEZvcmVpZ25LaW5kLkpTX0lOVEVSQ0VQVE9SX0NPTlNUQU5URm9yZWlnbktpbmQuTk9ORWRhcnQyanMua2VybmVsLmVsZW1lbnRfbWFwbmF0aXZlX2Jhc2ljX2RhdGEuZGFydG5vX3N1Y2hfbWV0aG9kX3Jlc29sdmVyLmRhcnRLZXJuZWxUb0VsZW1lbnRNYXBJbXBsX2NvbnN0YW50RXZhbHVhdG9yX25hdGl2ZUJlaGF2aW9yQnVpbGRlcmVuc3VyZUNsYXNzTWVtYmVyc2Vuc3VyZU1lbWJlcnNfZm9yRWFjaE1peGluS2VybmVsVG9FbGVtZW50TWFwQmFzZS5fZm9yRWFjaEluamVjdGVkQ2xhc3NNZW1iZXJfZ2V0VHlwZWRlZk5vZGVnZXRQYXJhbWV0ZXJTdHJ1Y3R1cmVpbmNsdWRlVHlwZVBhcmFtZXRlcnNleHRyYWN0RW51bUluZGV4RnJvbUNvbnN0YW50VmFsdWVfZ2V0TGlicmFyeUNyZWF0ZUVudmlyb25tZW50IG9mICBpcyBjbG9zZWQuIFRyeWluZyB0byBjcmVhdGUgbGlicmFyeSBmb3IgY3JlYXRlTGlicmFyeV9nZXRDbGFzc0NyZWF0ZWNsYXNzIGZvciBjcmVhdGVDbGFzc19nZXRUeXBlZGVmQ3JlYXRldHlwZWRlZiBmb3IgY3JlYXRlVHlwZWRlZl9nZXRUeXBlVmFyaWFibGVDcmVhdGV0eXBlIHZhcmlhYmxlIGZvciBVbnN1cHBvcnRlZCBmdW5jdGlvbiB0eXBlIHBhcmFtZXRlciBwYXJlbnQgbm9kZSBVbnN1cHBvcnRlZCB0eXBlIHBhcmFtZXRlciB0eXBlIG5vZGUgX2dldENvbnN0cnVjdG9yQ3JlYXRlY29uc3RydWN0b3IgZm9yIGNyZWF0ZUdlbmVyYXRpdmVDb25zdHJ1Y3RvcmlzRnJvbUVudmlyb25tZW50Y3JlYXRlRmFjdG9yeUNvbnN0cnVjdG9yVW5leHBlY3RlZCBjb25zdHJ1Y3RvciBub2RlOiBfZ2V0TWV0aG9kQ3JlYXRlZnVuY3Rpb24gZm9yIENhbm5vdCBjcmVhdGUgbWV0aG9kIGZyb20gZmFjdG9yeS5jcmVhdGVHZXR0ZXJjcmVhdGVNZXRob2RjcmVhdGVTZXR0ZXJfZ2V0RmllbGRDcmVhdGVmaWVsZCBmb3IgY3JlYXRlRmllbGRuYXRpdmVCZWhhdmlvckJ1aWxkZXJnZXRDYWNoZWRTdGF0aWNUeXBlc2dldFR5cGVNYXBzRm9yVGVzdGluZ19sb29rdXBQcm9jZWR1cmVfaW1wbGVtZW50c0Z1bmN0aW9uVW5leHBlY3RlZCBtZXRob2Qgbm9kZSBLZXJuZWxFbGVtZW50RW52aXJvbm1lbnRLZXJuZWxCZWhhdmlvckJ1aWxkZXJLZXJuZWxDb25zdGFudEVudmlyb25tZW50S2VybmVsRXZhbHVhdGlvbkVudmlyb25tZW50S2VybmVsTmF0aXZlTWVtYmVyUmVzb2x2ZXJfaWRlbnRpZmllcl5bYS16QS1aXyRdW2EtekEtWjAtOV8kXSokX3Byb2Nlc3NNZXRob2RBbm5vdGF0aW9uc19jb21wdXRlTmF0aXZlTWV0aG9kQmVoYXZpb3JfcHJvY2Vzc0ZpZWxkQW5ub3RhdGlvbnNmaWVsZExvYWRCZWhhdmlvcl9jb21wdXRlTmF0aXZlRmllbGRMb2FkQmVoYXZpb3JmaWVsZFN0b3JlQmVoYXZpb3JfY29tcHV0ZU5hdGl2ZUZpZWxkU3RvcmVCZWhhdmlvcl9zZXROYXRpdmVOYW1lX2ZpbmRKc05hbWVGcm9tQW5ub3RhdGlvbkBKU05hbWUoLi4uKSBhbm5vdGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHN0YXRpYyBmaWVsZHM6IF9pc05hdGl2ZU1ldGhvZF9zZXROYXRpdmVOYW1lRm9yU3RhdGljTWV0aG9kX2lzSWRlbnRpZmllcm5hdGl2ZU5hbWVzVW5hYmxlIHRvIGRldGVybWluZSBhIG5hdGl2ZSBuYW1lIGZvciB0aGUgZW5jbG9zaW5nIGNsYXNzLCBvcHRpb25zOiBUb28gbWFueSBKU05hbWUgYW5ub3RhdGlvbnM6IEtlcm5lbENsYXNzUXVlcmllc0tlcm5lbEFubm90YXRpb25Qcm9jZXNzb3JfbmF0aXZlQmFzaWNEYXRhQnVpbGRlcmFubm90YXRpb25OYW1lVG9vIG1hbnkgbmFtZSBhbm5vdGF0aW9ucy5nZXRKc0ludGVyb3BOYW1lY2hlY2tGdW5jdGlvblBhcmFtZXRlcnNpc0V4cGxpY2l0bHlseUpzTGlicmFyeWlzSnNMaWJyYXJ5aW1wbGVtZW50c0pzSmF2YVNjcmlwdE9iamVjdENsYXNzS2VybmVsTm9TdWNoTWV0aG9kUmVzb2x2ZXJmaXJzdFBhcmFtZXRlcl9jcmVhdGVEaWFnbm9zdGljTWVzc2FnZXJlcG9ydExvY2F0ZWRNZXNzYWdlY29tcGlsZXIua2VybmVsLmZyb250X2VuZF9hZGFwdGVyQ29tcGlsZXJGaWxlU3lzdGVtX0NvbXBpbGVyRmlsZVN5c3RlbUVudGl0eUZpbGUgbm90IGZvdW5kcmVwb3J0RnJvbnRFbmRNZXNzYWdlX2dldFNwYW5uYWJsZV9jb252ZXJ0TWVzc2FnZW1haW5NZXNzYWdldW5oYW5kbGVkIHNldmVyaXR5IENsb3N1cmVEYXRhU2NvcGVJbmZvS2luZGNhcHR1cmVkTG9vcFNjb3BlY2xvc3VyZVJlcHJlc2VudGF0aW9uSW5mb1Njb3BlSW5mb1VuZXhwZWN0ZWQgU2NvcGVJbmZvS2luZCAud3JpdGVUb0RhdGFTaW5rQ2FwdHVyZWRTY29wZVVuZXhwZWN0ZWQgQ2FwdHVyZWRTY29wZSBraW5kIENhcHR1cmVkTG9vcFNjb3BlVW5leHBlY3RlZCBDYXB0dXJlZExvb3BTY29wZSBraW5kIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm9VbmV4cGVjdGVkIENsb3N1cmVSZXByZXNlbnRhdGlvbkluZm8ga2luZCBCb3hMb2NhbChUeXBlVmFyaWFibGVMb2NhbHR5cGVfdmFyaWFibGVfbG9jYWwoSlNFbnRpdHlQcml2YXRlbHlOYW1lZEpTRW50aXR5ZWxlbWVudHMuanVtcHNMYWJlbERlZmluaXRpb25pc1RhcmdldGRhcnQyanMuanNfbW9kZWwudHlwZV9yZWNpcGVfc2FtZUZ1bGxTdHJ1Y3R1cmVhQmluZGluZ3NiQmluZGluZ3NTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmVTaW5nbGV0b25UeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUoRnVsbFR5cGVFbnZpcm9ubWVudFN0cnVjdHVyZUZ1bGxUeXBlRW52aXJvbm1lbnRTdHJ1Y3R1cmUoeWllbGRzU2FtZVR5cGVyZWNpcGVBc3RydWN0dXJlQXJlY2lwZUJzdHJ1Y3R1cmVCaXNJZGVudGl0eXN0cnVjdHVyZVR5cGVFeHByZXNzaW9uUmVjaXBlKFR5cGVFbnZpcm9ubWVudFJlY2lwZVNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFJlY2lwZVNpbmdsZXRvblR5cGVFbnZpcm9ubWVudFJlY2lwZShGdWxsVHlwZUVudmlyb25tZW50UmVjaXBlX2VxdWFsYVR5cGVzYlR5cGVzRnVsbFR5cGVFbnZpcm9ubWVudFJlY2lwZShJbnZva2VEeW5hbWljU3BlY2lhbGl6ZXJjb21wdXRlVHlwZUZyb21JbnB1dFR5cGVzdHJ5Q29udmVydFRvQnVpbHRpbnJlbmFtZVRvT3B0aW1pemVkU2VsZWN0b3Jsb29rdXBTcGVjaWFsaXplckluZGV4QXNzaWduU3BlY2lhbGl6ZXJfdmFsdWVQYXJhbWV0ZXJDaGVja0Fsd2F5c1N1Y2NlZWRzcmVnaXN0ZXJJbmRleEFzc2lnbkluZGV4U3BlY2lhbGl6ZXJyZWdpc3RlckluZGV4Qml0Tm90U3BlY2lhbGl6ZXJyZWdpc3RlckJpdE5vdFVuYXJ5TmVnYXRlU3BlY2lhbGl6ZXJyZWdpc3RlclVuYXJ5TmVnYXRlQWJzU3BlY2lhbGl6ZXJyZWdpc3RlckFic3JlZ2lzdGVyT3B0aW1pemF0aW9uQmluYXJ5QXJpdGhtZXRpY1NwZWNpYWxpemVyaXNCdWlsdGlubmV3QnVpbHRpblZhcmlhbnRpbnB1dHNBcmVOdW1pbnB1dHNBcmVQb3NpdGl2ZUludGVnZXJzaW5wdXRzQXJlVUludDMxQWRkU3BlY2lhbGl6ZXJyZWdpc3RlckFkZERpdmlkZVNwZWNpYWxpemVycmVnaXN0ZXJEaXZpZGVNb2R1bG9TcGVjaWFsaXplcmNhbkJlUG9zaXRpdmVaZXJvaW5QaGljYW5CZU5lZ2F0aXZlWmVyb3JlZ2lzdGVyTW9kdWxvUmVtYWluZGVyU3BlY2lhbGl6ZXJyZWdpc3RlclJlbWFpbmRlck11bHRpcGx5U3BlY2lhbGl6ZXJyZWdpc3Rlck11bHRpcGx5U3VidHJhY3RTcGVjaWFsaXplcnJlZ2lzdGVyU3VidHJhY3RUcnVuY2F0aW5nRGl2aWRlU3BlY2lhbGl6ZXJoYXNVaW50MzFSZXN1bHRpc05vdFplcm9pc1R3b09yR3JlYXRlcl90ZGl2RmFzdHJlZ2lzdGVyVHJ1bmNhdGluZ0RpdmlkZUJpbmFyeUJpdE9wU3BlY2lhbGl6ZXJhcmd1bWVudExlc3NUaGFuMzJhcmd1bWVudEluUmFuZ2VTaGlmdExlZnRTcGVjaWFsaXplcl9zaGxQb3NpdGl2ZXJlZ2lzdGVyU2hpZnRMZWZ0U2hpZnRSaWdodFNwZWNpYWxpemVyX3NockJvdGhQb3NpdGl2ZV9zaHJSZWNlaXZlclBvc2l0aXZlX3Nock90aGVyUG9zaXRpdmVyZWdpc3RlclNoaWZ0UmlnaHRCaXRPclNwZWNpYWxpemVycmVnaXN0ZXJCaXRPckJpdEFuZFNwZWNpYWxpemVycmVnaXN0ZXJCaXRBbmRCaXRYb3JTcGVjaWFsaXplcnJlZ2lzdGVyQml0WG9yUmVsYXRpb25hbFNwZWNpYWxpemVyRXF1YWxzU3BlY2lhbGl6ZXJyZWdpc3RlckVxdWFsc0xlc3NTcGVjaWFsaXplcnJlZ2lzdGVyTGVzc0dyZWF0ZXJTcGVjaWFsaXplcnJlZ2lzdGVyR3JlYXRlckdyZWF0ZXJFcXVhbFNwZWNpYWxpemVycmVnaXN0ZXJHcmVhdGVyRXF1YWxMZXNzRXF1YWxTcGVjaWFsaXplcnJlZ2lzdGVyTGVzc0VxdWFsQ29kZVVuaXRBdFNwZWNpYWxpemVyX2NvZGVVbml0QXRyZWdpc3RlckNvZGVVbml0QXRDb21wYXJlVG9TcGVjaWFsaXplcnJlZ2lzdGVyQ29tcGFyZVRvSWRlbXBvdGVudFN0cmluZ09wZXJhdGlvblNwZWNpYWxpemVyU3Vic3RyaW5nU3BlY2lhbGl6ZXJyZWdpc3RlclN1YnN0cmluZ1RyaW1TcGVjaWFsaXplcnJlZ2lzdGVyVHJpbVBhdHRlcm5NYXRjaFNwZWNpYWxpemVycmVnaXN0ZXJQYXR0ZXJuTWF0Y2hSb3VuZFNwZWNpYWxpemVycmVnaXN0ZXJSb3VuZEhWYWxpZGF0b3J2aXNpdGVlbWFya0ludmFsaWRlbXB0eSBibG9ja2Jsb2NrIGVuZHMgd2l0aCBub24tdGFpbCBub2RlLklmIG5vZGUgd2l0aG91dCB0d28gc3VjY2Vzc29yc0NvbmRpdGlvbmFsIG5vZGUgd2l0aG91dCB0d28gc3VjY2Vzc29yc2F2b2lkQ3JpdGljYWxFZGdlQmxvY2tDcml0aWNhbCBlZGdlIGJsb2NrIGNvbnRhaW5zIGluc3RydWN0aW9uc0dvdG8gbm9kZSB3aXRoIG5vdCBleGFjdGx5IG9uZSBzdWNjZXNzb3JCcmVhayBvciBjb250aW51ZSBub2RlIHdpdGhvdXQgb25lIHN1Y2Nlc3NvclJldHVybiBvciB0aHJvdyBub2RlIHdpdGggPiAxIHN1Y2Nlc3NvciBvciBub3QgZ29pbmcgdG8gZXhpdC1ibG9ja0V4aXQgYmxvY2sgd2l0aCBzdWNjZXNzb3JOb24tZXhpdCBibG9jayB3aXRob3V0IHN1Y2Nlc3NvcmJsb2NrIHdpdGhvdXQgaWRzdWNjZXNzb3Igd2l0aG91dCBpZHN1Y2Nlc3NvciB3aXRoIGxvd2VyIGlkLCBidXQgbm90IGEgbG9vcC1oZWFkZXJTU0EgZ3JhcGggY29udGFpbnMgY3JpdGljYWwgZWRnZS5sYXN0SWRkb21pbmF0ZWRkb21pbmF0ZWQgYmxvY2sgbm90IHBvaW50aW5nIGJhY2tkb21pbmF0ZWQuaWQgPT0gbnVsbCBvciBkb21pbmF0ZWQgaGFzIDw9IGlkRGVmaW5pdGlvbiBkb2VzIG5vdCBkb21pbmF0ZSB1c2Vjb3VudEluc3RydWN0aW9uZXZlcnlJbnN0cnVjdGlvbmhhc0NvcnJlY3RJbnB1dHNpbkJhc2ljQmxvY2toYXNDb3JyZWN0VXNlc0luc3RydWN0aW9uIGluIHdyb25nIGJsb2NrSW5jb3JyZWN0IGlucHV0c0luY29ycmVjdCB1c2VzZW50aXR5X3V0aWxzY29tcGFyZUxpYnJhcmllc1VyaXNieUNhbm9uaWNhbFVyaVBhdGhfY29tcGFyZUNhbm9uaWNhbFVyaWFTZWdtZW50c2JTZWdtZW50c2FJYklhU2VnbWVudGJTZWdtZW50Y29tcGFyZVNvdXJjZVVyaXNjb21wYXJlRW50aXRpZXNlbGVtZW50MWxpbmUxY29sdW1uMWVsZW1lbnQybGluZTJjb2x1bW4ycmVjb25zdHJ1Y3RDb25zdHJ1Y3Rvck5hbWVyZWNvbnN0cnVjdENvbnN0cnVjdG9yTmFtZVNvdXJjZVN0cmluZ29wZXJhdG9yJGVxb3BlcmF0b3Ikbm90b3BlcmF0b3IkaW5kZXhvcGVyYXRvciRpbmRleFNldG9wZXJhdG9yJG11bG9wZXJhdG9yJGRpdm9wZXJhdG9yJG1vZG9wZXJhdG9yJHRkaXZvcGVyYXRvciRhZGRvcGVyYXRvciRzaGxvcGVyYXRvciRzaHJvcGVyYXRvciRzaHJ1b3BlcmF0b3IkZ2VvcGVyYXRvciRndG9wZXJhdG9yJGxlb3BlcmF0b3IkbHRvcGVyYXRvciRhbmRvcGVyYXRvciR4b3JvcGVyYXRvciRvcm9wZXJhdG9yJHN1Ym9wZXJhdG9yJG5lZ2F0ZWNvbnN0cnVjdE9wZXJhdG9yTmFtZU9yTnVsbGlzVW5hcnljb25zdHJ1Y3RPcGVyYXRvck5hbWVVbmhhbmRsZWQgb3BlcmF0b3I6IGRhcnQyanMub3BlcmF0b3JzVW5hcnlPcGVyYXRvcktpbmROT1RORUdBVEVDT01QTEVNRU5UVW5hcnlPcGVyYXRvcmlzVXNlckRlZmluYWJsZWZyb21LaW5kQmluYXJ5T3BlcmF0b3JLaW5kTk9UX0VRQUREU1VCTVVMRElWSURJVk1PRFNITFNIUlNIUlVHVEVRTFRFUUFORE9SWE9SSUZfTlVMTEJpbmFyeU9wZXJhdG9ycGFyc2VVc2VyRGVmaW5hYmxlX05vdEVxdWFsc09wZXJhdG9yX0xvZ2ljYWxPcGVyYXRvcl9JZk51bGxPcGVyYXRvcmludm9jYXRpb25NaXJyb3JNZXRob2RLaW5kaW52b2NhdGlvbk1pcnJvckdldHRlcktpbmRpbnZvY2F0aW9uTWlycm9yU2V0dGVyS2luZEtDbG9zZWRXb3JsZEltcGxkYXJ0MmpzLndvcmxkLmNsYXNzX3NldEluZGV4ZWRDbGFzc0ZvckVhY2hGdW5jdGlvbkluc3RhbnRpYXRpb24uSU5ESVJFQ1RMWV9JTlNUQU5USUFURURVTklOU1RBTlRJQVRFRERJUkVDVExZX0lOU1RBTlRJQVRFRElORElSRUNUTFlfSU5TVEFOVElBVEVEQUJTVFJBQ1RMWV9JTlNUQU5USUFURURjbGFzcy1oaWVyYXJjaHktbm9kZUVYUExJQ0lUTFlfSU5TVEFOVElBVEVEX2xlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJjbGFzc19pbnN0YW50aWF0ZWRTdWJjbGFzc0NvdW50X2RpcmVjdFN1YmNsYXNzZXNhZGREaXJlY3RTdWJjbGFzc2luY2x1ZGVEaXJlY3RseUluc3RhbnRpYXRlZGluY2x1ZGVJbmRpcmVjdGx5SW5zdGFudGlhdGVkaW5jbHVkZVVuaW5zdGFudGlhdGVkaW5jbHVkZUFic3RyYWN0bHlJbnN0YW50aWF0ZWRfdXBkYXRlUGFyZW50SW5zdGFudGlhdGVkU3ViY2xhc3NDb3VudF91cGRhdGVJbnN0YW50aWF0ZWRTdWJjbGFzc0NvdW50Y2hhbmdlYWZ0ZXJub2RlTWFwTm8gQ2xhc3NIaWVyYXJjaHlOb2RlIGZvciBzdXBlcmNsYXNzIG1hc2tWYWx1ZWRpcmVjdFN1YmNsYXNzZXNpbmNsdWRlUm9vdHdyYXBwZXJuZXh0U3RlcHN1YkZvckVhY2hfY29tcHV0ZUxlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJjbGFzc2lzUmVsYXRlZFRvX3N1YmNsYXNzYWJzdHJhY3QgIGluZGlyZWN0bHksCmNsYXNzLXNldF9sZWFzdFVwcGVySW5zdGFudGlhdGVkU3VidHlwZV9zdWJ0eXBlc19taXhpbkFwcGxpY2F0aW9uc21peGluQXBwbGljYXRpb25zbmV3U3VidHlwZXNhZGRlZG90aGVyU3VidHlwZW90aGVySGllcmFyY2h5RGVwdGhfY29tcHV0ZUxlYXN0VXBwZXJJbnN0YW50aWF0ZWRTdWJ0eXBlc3Vibm9kZVsKICBzdWJ0eXBlczoKICBtaXhpbi1hcHBsaWNhdGlvbnM6CkNsYXNzSGllcmFyY2h5Tm9kZUl0ZXJhYmxlTm8gcm9vdCBmb3IgaXRlcmFibGUuQ2xhc3NIaWVyYXJjaHlOb2RlSXRlcmF0b3JfZmluZE5leHRfaXNWYWxpZFN1YnR5cGVzSXRlcmFibGVTdWJ0eXBlc0l0ZXJhdG9yaGllcmFyY2h5Tm9kZXNJdGVyYXRpb25TdGVwU1RPUFNLSVBfU1VCQ0xBU1NFU0NsYXNzSGllcmFyY2h5Tm9kZXNNYXBDbGFzc0hpZXJhcmNoeU5vZGVzTWFwIGZvciBDbGFzc0hpZXJhcmNoeU5vZGVzTWFwLmtleXNDbGFzc0hpZXJhcmNoeU5vZGVzTWFwLnJlbW92ZUNsYXNzSGllcmFyY2h5Tm9kZXNNYXAuY2xlYXJkYXJ0MmpzLmpzX2VtaXR0ZXIuc29ydGVyU29ydGVyZGFydDJqcy5jb25zdGFudHMuY29uc3RydWN0b3JzQ29uc3RhbnRDb25zdHJ1Y3RvcktpbmRDb25zdGFudENvbnN0cnVjdG9yS2luZC5HRU5FUkFUSVZFQ29uc3RhbnRDb25zdHJ1Y3RvcktpbmQuUkVESVJFQ1RJTkdfR0VORVJBVElWRUNvbnN0YW50Q29uc3RydWN0b3JLaW5kLlJFRElSRUNUSU5HX0ZBQ1RPUllDb25zdGFudENvbnN0cnVjdG9yS2luZC5FUlJPTkVPVVNHRU5FUkFUSVZFUkVESVJFQ1RJTkdfR0VORVJBVElWRVJFRElSRUNUSU5HX0ZBQ1RPUllJbnN0YW5jZURhdGFDb25zdGFudENvbnN0cnVjdG9yQ29uc3RhbnRDb25zdHJ1Y3RvclZpc2l0b3J2aXNpdEdlbmVyYXRpdmV2aXNpdFJlZGlyZWN0aW5nR2VuZXJhdGl2ZXZpc2l0UmVkaXJlY3RpbmdGYWN0b3J5dmlzaXRFcnJvbmVvdXNHZW5lcmF0aXZlQ29uc3RhbnRDb25zdHJ1Y3RvcmRlZmF1bHRWYWx1ZXNzdXBlckNvbnN0cnVjdG9ySW52b2NhdGlvbmFwcGxpZWRJbnN0YW5jZURhdGF7J3R5cGUnOiAsCiAnZGVmYXVsdDosCiAnZmllbGQ6LAogJ2NvbnN0cnVjdG9yOiBtYXAxbWFwMmFwcGx5SW5zdGFuY2VEYXRhY29uc3RydWN0b3JJbnZvY2F0aW9uYXBwbGllZEZpZWxkTWFwYXBwbGllZEFzc2VydGlvbnNSZWRpcmVjdGluZ0dlbmVyYXRpdmVDb25zdGFudENvbnN0cnVjdG9ydGhpc0NvbnN0cnVjdG9ySW52b2NhdGlvbiwKICdjb25zdHJ1Y3Rvcic6IFJlZGlyZWN0aW5nRmFjdG9yeUNvbnN0YW50Q29uc3RydWN0b3J0YXJnZXRDb25zdHJ1Y3Rvckludm9jYXRpb24nY29uc3RydWN0b3InOiBFcnJvbmVvdXNDb25zdGFudENvbnN0cnVjdG9yRXJyb25lb3VzQ29uc3RhbnRDb25zdHJ1Y3Rvci5jb21wdXRlSW5zdGFuY2VUeXBlZGFydDJqcy5jb25zdGFudHMuZXZhbHVhdGlvbmVuY2xvc2luZ0NvbnN0cnVjdGVkVHlwZUV2YWx1YXRpb25FbnZpcm9ubWVudEJhc2Vfc3Bhbm5hYmxlU3RhY2tfY3VycmVudGx5RXZhbHVhdGVkRmllbGRzX3NwYW5uYWJsZU5vcm1hbGl6ZWRBcmd1bWVudHNObyBkZWZhdWx0IHZhbHVlIGZvciBuYW1lZCBhcmd1bWVudCAnTm8gdmFsdWUgZm9yIG5hbWVkIGFyZ3VtZW50ICdObyBkZWZhdWx0IHZhbHVlIGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50IE5vIHZhbHVlIGZvciBwb3NpdGlvbmFsIGFyZ3VtZW50IE5vcm1hbGl6ZWRBcmd1bWVudHNbZGVmYXVsdFZhbHVlcz17fSxjYWxsU3RydWN0dXJlPV1dX2NhbmRpZGF0ZXNfY29tcHV0ZUNvdmFyaWFuY2VGaXhlc19zdWJzdGl0dXRpb25Gb3JnZXRDYW5kaWRhdGVBdF9jcmVhdGVGb3J3YXJkaW5nU3R1YmludGVyZmFjZVBvc2l0aW9uYWxQYXJhbWV0ZXJzZ2V0UG9zaXRpb25hbFBhcmFtZXRlcnNpbnRlcmZhY2VUeXBlUGFyYW1ldGVyc2NyZWF0ZVN0dWJJZk5lZWRlZGlzSW1wbENyZWF0ZWRjcmVhdGVJbXBsSWZOZWVkZWRfY3JlYXRlRm9yd2FyZGluZ0ltcGxJZk5lZWRlZG90aGVyTWVtYmVyb3RoZXJQb3NpdGlvbmFsUGFyYW1ldGVyc290aGVyUGFyYW1ldGVyc3VwZXJUeXBlUGFyYW1ldGVyb3RoZXJUeXBlUGFyYW1ldGVyc290aGVyVHlwZVBhcmFtZXRlcmNvcHlQYXJhbWV0ZXJ0YXJnZXRUeXBlUGFyYW1ldGVyc2FkZGl0aW9uYWxTdWJzdGl0dXRpb250YXJnZXRUeXBlUGFyYW1ldGVyZ2V0UmVxdWlyZWRQYXJhbWV0ZXJDb3VudGdldFJldHVyblR5cGVmaW5hbFRhcmdldF9nZXRGb3J3YXJkaW5nU3R1YlN1cGVyVGFyZ2V0Zm9yd2FyZGluZ1N0dWJmYXN0YS50eXBlc2lzU3VidHlwZU9mS2VybmVsTnVsbGFiaWxpdHlzTnVsbGFiaWxpdHl0TnVsbGFiaWxpdHlpc0R5bmFtaWNSZWxhdGVkaXNWb2lkUmVsYXRlZGlzRnV0dXJlT3JSZWxhdGVkaXNJbnRlcmZhY2VSZWxhdGVkaXNGdW5jdGlvblJlbGF0ZWRpc1R5cGVQYXJhbWV0ZXJSZWxhdGVkaXNJbnRlcnNlY3Rpb25SZWxhdGVkaXNUeXBlZGVmUmVsYXRlZFVuaGFuZGxlZCB0eXBlOiBVbmhhbmRsZWQgdHlwZSBjb21iaW5hdGlvbjogYXJlU3VidHlwZXNPZktlcm5lbE51bWJlcnMgb2YgdHlwZSBhcmd1bWVudHMgZG9uJ3QgbWF0Y2ggaXNTYW1lVHlwZUtlcm5lbFR5cGVSZWxhdGlvbmludGVyc2VjdGlvbk51bGxhYmlsaXR5ZnV0dXJlT3JOdWxsYWJpbGl0eUlzSW50ZXJmYWNlU3VidHlwZU9mYXNTdXBlcnR5cGVJc0Z1bmN0aW9uU3VidHlwZU9mc1R5cGVWYXJpYWJsZXN0VHlwZVZhcmlhYmxlc3R5cGVWYXJpYWJsZVN1YnN0aXR1dGlvbnNlY29uZEJvdW5kc0NoZWNrTmVlZGVkc1R5cGVWYXJpYWJsZXRUeXBlVmFyaWFibGVzUG9zaXRpb25hbHRQb3NpdGlvbmFsc05hbWVkdE5hbWVkc0NvdW50dENvdW50SXNUeXBlUGFyYW1ldGVyU3VidHlwZU9mSXNUeXBlZGVmU3VidHlwZU9mSXNGdXR1cmVPclN1YnR5cGVPZnNGdXR1cmVPck51bGxhYmlsaXR5dEZ1dHVyZU9ydEZ1dHVyZU9yTnVsbGFiaWxpdHlJc0ludGVyc2VjdGlvblN1YnR5cGVPZnNJbnRlcnNlY3Rpb25zSW50ZXJzZWN0aW9uTnVsbGFiaWxpdHl0SW50ZXJzZWN0aW9udEludGVyc2VjdGlvbk51bGxhYmlsaXR5ZmFzdGEuaWdub3JlZF9wYXJzZXJfZXJyb3JzRGlyZWN0aXZlQ29udGV4dERpcmVjdGl2ZVN0YXRlLlVua25vd25EaXJlY3RpdmVTdGF0ZS5TY3JpcHRJbnRlcm5hbCBlcnJvcjogVW5leHBlY3RlZCBzY3JpcHQgdGFnLkRpcmVjdGl2ZVN0YXRlLlBhcnRPZkRpcmVjdGl2ZVN0YXRlLkRlY2xhcmF0aW9uc0RpcmVjdGl2ZVN0YXRlLkltcG9ydEFuZEV4cG9ydERpcmVjdGl2ZVN0YXRlLlBhcnREaXJlY3RpdmVTdGF0ZS5MaWJyYXJ5RGlyZWN0aXZlU3RhdGVVbmtub3duSW1wb3J0QW5kRXhwb3J0RGVjbGFyYXRpb25zSW50ZXJuYWwgRXJyb3I6IHNob3VsZCBub3QgY2FsbCBwYXJzZSBzaG91bGQgaW1wbGVtZW50IHBhcnNlZmFzdGEucGFyc2VyLmxvb3Bfc3RhdGVPdXRzaWRlTG9vcEluc2lkZVN3aXRjaEluc2lkZUxvb3BmaW5hbFRva2VudmFyVG9rZW5hZnRlckZhY3RvcnlJbnRlcm5hbCBlcnJvcjogVW5leHBlY3RlZCBzdGF0aWNPckNvdmFyaWFudCAnSW50ZXJuYWwgZXJyb3I6IFVuZXhwZWN0ZWQgdmFyRmluYWxPckNvbnN0ICdyZXBvcnRFeHRyYW5lb3VzTW9kaWZpZXJwYXJzZUFic3RyYWN0cGFyc2VDb25zdHBhcnNlQ292YXJpYW50cGFyc2VFeHRlcm5hbHBhcnNlRmluYWxwYXJzZUxhdGVwYXJzZVJlcXVpcmVkcGFyc2VTdGF0aWNwYXJzZVZhckludGVybmFsIEVycm9yOiBVbmhhbmRsZWQgbW9kaWZpZXI6IHJlcG9ydE1vZGlmaWVyT3V0T2ZPcmRlcnJlcG9ydENvbmZsaWN0aW5nTW9kaWZpZXJzSW50ZXJuYWwgRXJyb3I6IFVuZXhwZWN0ZWQgdmFyRmluYWxPckNvbnN0OiBJbnRlcm5hbCBFcnJvcjogVW5oYW5kbGVkIHJlY292ZXJ5OiBlYXJsaWVyTW9kaWZpZXJiZWZvcmVNb2RpZmllcl9Ub2tlblN0cmVhbVJld3JpdGVyJk9iamVjdCZfVG9rZW5TdHJlYW1NaXhpbm5ld1Rva2VuVHlwZXVzZSBpbnNlcnRTeW50aGV0aWNLZXl3b3JkIGluc3RlYWRpbmNsdWRlSWRlbnRpZmllcnJlcGxhY2VtZW50VG9rZW5yZXBsYWNlZFRva2VuX2xhc3RUb2tlbkluQ2hhaW5fVG9rZW5TdHJlYW1HaG9zdFdyaXRlciZPYmplY3QmX1Rva2VuU3RyZWFtTWl4aW5Ub2tlblN0cmVhbUdob3N0V3JpdGVycmlnaHRQYXJlbm5ld0VuZEdyb3VwX1Rva2VuU3RyZWFtTWl4aW5mYXN0YS5wYXJzZXIudHlwZV9pbmZvcGFyc2VUeXBlTm90Vm9pZGlzU2ltcGxlVHlwZUFyZ3VtZW50IGlzIG5vdCBhIFNpbXBsZVR5cGVBcmd1bWVudC5pc0dlbmVyYWxpemVkRnVuY3Rpb25UeXBlY29tcHV0ZUJ1aWx0aW5PclZhckFzVHlwZWNvbXB1dGVQcmVmaXhlZFR5cGVjb21wdXRlVm9pZEdGVGNvbXB1dGVOb1R5cGVHRlRjb21wdXRlU2ltcGxlV2l0aFR5cGVBcmd1bWVudHNjb21wdXRlSWRlbnRpZmllckdGVGNvbXB1dGVJZGVudGlmaWVyUXVlc3Rpb25HRlRjb21wdXRlQ2F0Y2hQYXJhbWV0ZXJJZGVudGlmaWVyQ29udGV4dENsYXNzT3JNaXhpbk9yRXh0ZW5zaW9uSWRlbnRpZmllckNvbnRleHRDb21iaW5hdG9ySWRlbnRpZmllckNvbnRleHRDb25zdHJ1Y3RvclJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0Y29udGludWF0aW9uQWZ0ZXJUeXBlQXJndW1lbnRzRG90dGVkTmFtZUlkZW50aWZpZXJDb250ZXh0RW51bURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHRFbnVtVmFsdWVEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0RXhwcmVzc2lvbklkZW50aWZpZXJDb250ZXh0RmllbGREZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0RmllbGRJbml0aWFsaXplcklkZW50aWZpZXJDb250ZXh0Rm9ybWFsUGFyYW1ldGVyRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dEltcG9ydFByZWZpeElkZW50aWZpZXJDb250ZXh0TGl0ZXJhbFN5bWJvbElkZW50aWZpZXJDb250ZXh0TG9jYWxGdW5jdGlvbkRlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHRMYWJlbERlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHRMYWJlbFJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0TGlicmFyeUlkZW50aWZpZXJDb250ZXh0TG9jYWxWYXJpYWJsZURlY2xhcmF0aW9uSWRlbnRpZmllckNvbnRleHRNZXRhZGF0YVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0TWV0aG9kRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dE5hbWVkQXJndW1lbnRSZWZlcmVuY2VJZGVudGlmaWVyQ29udGV4dFRvcExldmVsRGVjbGFyYXRpb25JZGVudGlmaWVyQ29udGV4dGZvbGxvd2luZ1ZhbHVlc1R5cGVkZWZEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0VHlwZVJlZmVyZW5jZUlkZW50aWZpZXJDb250ZXh0cHJlZml4ZWRUeXBlVmFyaWFibGVEZWNsYXJhdGlvbklkZW50aWZpZXJDb250ZXh0Y2hlY2tBc3luY0F3YWl0WWllbGRBc0lkZW50aWZpZXJsb29rc0xpa2VTdGFydE9mTmV4dENsYXNzTWVtYmVybG9va3NMaWtlU3RhcnRPZk5leHRUb3BMZXZlbERlY2xhcmF0aW9uZGFydDJqcy5qc19lbWl0dGVyLnByb2dyYW1fYnVpbGRlckNsYXNzU3R1YkdlbmVyYXRvckluc3RhbnRpYXRpb25TdHViR2VuZXJhdG9ySW50ZXJjZXB0b3JTdHViR2VuZXJhdG9yTWFpbkNhbGxTdHViR2VuZXJhdG9yUGFyYW1ldGVyU3R1YkdlbmVyYXRvclJ1bnRpbWVUeXBlR2VuZXJhdG9yVHlwZVRlc3RQcm9wZXJ0aWVzY29sbGVjdG9yLmRhcnRmaWVsZF92aXNpdG9yLmRhcnRyZWdpc3RyeS5kYXJ0QWNjZXB0RmllbGRhY2Nlc3Nvck5hbWVuZWVkc0dldHRlcm5lZWRzU2V0dGVybmVlZHNDaGVja2VkU2V0dGVyUHJvZ3JhbUJ1aWxkZXJfY29kZWdlbldvcmxkX3J0aUNoZWNrc19ydGlSZWNpcGVFbmNvZGVyX2dlbmVyYXRlZENvZGVfcnRpTmVlZGVkQ2xhc3Nlc19zdG9yZUZ1bmN0aW9uVHlwZXNJbk1ldGFkYXRhX291dHB1dHNfY29uc3RhbnRzX3VubmVlZGVkTmF0aXZlQ2xhc3Nlc19ub3RTb2Z0RGVmZXJyZWRidWlsZFByb2dyYW1zdG9yZUZ1bmN0aW9uVHlwZXNJbk1ldGFkYXRhX2luaXRpYWxpemVTb2Z0RGVmZXJyZWRNYXByZWdpc3Rlck91dHB1dFVuaXRvdXRwdXRDbGFzc0xpc3RzcmVnaXN0ZXJDbGFzc2Vzb3V0cHV0U3RhdGljTGlzdHNyZWdpc3Rlck1lbWJlcnNvdXRwdXRDb25zdGFudExpc3RzX3JlZ2lzdGVyQ29uc3RhbnRzb3V0cHV0U3RhdGljTm9uRmluYWxGaWVsZExpc3RzX3JlZ2lzdGVyU3RhdGljU3RhdGVIb2xkZXJfYnVpbGRDbGFzc3NldFN1cGVyY2xhc3NObyBDbGFzcyBmb3IgaGFzIGJlZW4gY3JlYXRlZCBmb3Igc3VwZXJjbGFzcyBpc1NpbXBsZU1peGluQXBwbGljYXRpb25lZmZlY3RpdmVNaXhpbkNsYXNzc2V0TWl4aW5DbGFzc05vIGNsYXNzIGZvciBlZmZlY3RpdmUgbWl4aW4gaW50ZXJjZXB0b3JDbGFzc2VzTmVlZGVkQnlDb25zdGFudHNjb21wdXRlSW50ZXJjZXB0b3JzUmVmZXJlbmNlZEZyb21Db25zdGFudHNwcmVwYXJlTmF0aXZlQ2xhc3Nlc19hZGRKc0ludGVyb3BTdHVic21haW5MaWJyYXJpZXNNYXBtYWluRnJhZ21lbnRfYnVpbGRNYWluRnJhZ21lbnRkZWZlcnJlZEZyYWdtZW50c2RlZmVycmVkTGlicmFyaWVzTWFwX2J1aWxkRGVmZXJyZWRGcmFnbWVudGxpYnJhcmllc01hcENvdW50X21hcmtFYWdlckNsYXNzZXNob2xkZXJzbmVlZHNOYXRpdmVTdXBwb3J0ZmluYWxpemVyc25hbWluZ0ZpbmFsaXplcl9idWlsZExvYWRNYXBfYnVpbGRUeXBlVG9JbnRlcmNlcHRvck1hcG91dHB1dENvbnRhaW5zQ29uc3RhbnRMaXN0aGFzU29mdERlZmVycmVkQ2xhc3Nlc19tYXJrRWFnZXJJbnRlcmNlcHRvckNsYXNzZXNhbGxvY2F0ZWRDbGFzc2VzUGF0aGJsYWNrTGlzdGRhcnQ6dHlwZWRfZGF0YV9pbXBsZW1lbnRhdGlvblByb2ZpbGUgZmlsZSBkb2VzIG5vdCBleGlzdDogUHJvZmlsZSBpbmZvcm1hdGlvbiAoYWxsb2NhdGVkIGNsYXNzZXMpIGlzIGVtcHR5LnJlYWRBc1N0cmluZ1N5bmNhbGxvY2F0ZWRDbGFzc2VzS2V5c2FsbG9jYXRlZENsYXNzZXNsb2FkTWFwc3R1YkdlbmVyYXRvcmdlbmVyYXRlVHlwZVRvSW50ZXJjZXB0b3JNYXBsaWJyYXJpZXNNYXBfYnVpbGRJbnZva2VNYWluX2J1aWxkTGlicmFyaWVzX2J1aWxkU3RhdGljTm9uRmluYWxGaWVsZHNfYnVpbGRTdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkc19idWlsZENvbnN0YW50c2NvbnN0YW50VmFsdWVzc3RhdGljTm9uRmluYWxGaWVsZHNfYnVpbGRTdGF0aWNGaWVsZHJlZ2lzdGVySG9sZGVyaXNDb25zdGFudHNIb2xkZXJpc0luaXRpYWxpemVkQnlDb25zdGFudGxhenlGaWVsZHNfYnVpbGRMYXp5RmllbGRfYnVpbGRMaWJyYXJ5dG9TdHJpbmdJbnZvY2F0aW9uY2FsbFN0dWJzX2J1aWxkU3R1Yk1ldGhvZGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpcy4jKHRoaXMpIH1zdHViTmFtZXNjbGFzc0VsZW1lbnRzc3R1Yk5hbWVmdW5jdGlvbihvYmopIHsgcmV0dXJuIG9iai4jIH1mdW5jdGlvbihvYmosIHYpIHsgcmV0dXJuIG9iai4jID0gdiB9aXNGdW5jdGlvbkxpa2VtaW5BcmdzbWF4QXJnc2Z1bmN0aW9uKHJlY2VpdmVyLCAjKSB7IHJldHVybiByZWNlaXZlci4jKCMpIH1tZW1iZXJFbGVtZW50c3N0YXRpY3NfYnVpbGRTdGF0aWNNZXRob2RfZ2VuZXJhdGVHZXRJbnRlcmNlcHRvck1ldGhvZHNfZ2VuZXJhdGVPbmVTaG90SW50ZXJjZXB0b3JzdmlzaXRTdGF0aWNzc3RhdGljRmllbGRzRm9yUmVmbGVjdGlvbl9idWlsZEZpZWxkc19pc1NvZnREZWZlcnJlZG9ubHlGb3JSdGljbGFzc2VzT25seU5lZWRlZEZvclJ0aWhhc1J0aUZpZWxkaXNDbG9zdXJlQmFzZUNsYXNzY2xhc3NTdHViR2VuZXJhdG9ycnVudGltZVR5cGVHZW5lcmF0b3J2aXNpdEluc3RhbmNlTWVtYmVyX2J1aWxkTWV0aG9kY2FsbFN0dWJzRm9yTWVtYmVyZ2VuZXJhdGVDYWxsU3R1YnNGb3JHZXR0ZXJ2aXNpdE1lbWJlcm5vU3VjaE1ldGhvZFN0dWJzY29tcHV0ZVNlbGVjdG9yc0Zvck5zbUhhbmRsZXJzZ2VuZXJhdGVTdHViRm9yTm9TdWNoTWV0aG9kZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9X2dlbmVyYXRlSW5zdGFudGlhdGlvblN0dWJzaW5zdGFuY2VGaWVsZHNpc0hvbGRlckludGVyY2VwdGVkQ2xhc3N0eXBlVGVzdHNnZW5lcmF0ZUlzVGVzdHNzdG9yZUZ1bmN0aW9uVHlwZUluTWV0YWRhdGFjaGVja2VkU2V0dGVyc2ZvckVhY2hQcm9wZXJ0eW5lZWRzVW5jaGVja2VkU2V0dGVyTm8gc2V0dGVyIGNvZGUgZm9yIGZpZWxkOiBmdW5jdGlvbigpIHt9aG9sZGVyTmFtZWZ1bmN0aW9uVHlwZUluZGV4aXNTb2Z0RGVmZXJyZWRfbWV0aG9kTmVlZHNTdHVic19tZXRob2RDYW5CZUFwcGxpZWRfY29tcHV0ZVBhcmFtZXRlckRlZmF1bHRWYWx1ZXNvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXNjYW5UZWFyT2ZmdGVhck9mZk5hbWVpc0Nsb3N1cmVDYWxsTWV0aG9kaXNOb3RBcHBseVRhcmdldGNhbkJlQXBwbGllZGFsaWFzTmFtZW1lbWJlclR5cGVfZ2VuZXJhdGVGdW5jdGlvblR5cGVhcHBseUluZGV4X2dlbmVyYXRlUGFyYW1ldGVyU3R1YnNuZWVkc1RlYXJPZmZ0aGlzQWNjZXNzdGhpcy4kcmVjZWl2ZXJyZWlmeVR5cGVnZW5lcmF0ZVBhcmFtZXRlclN0dWJzaW5zdGFudGlhdGlvbkNsYXNzZ2VuZXJhdGVTdHVic2ludGVyY2VwdG9yTWFwRHVwbGljYXRlIHNwZWNpYWxpemVkIGdldCBpbnRlcmNlcHRvciBmb3IgOiBFeGlzdGluZzogLCBuZXcgZ2VuZXJhdGVHZXRJbnRlcmNlcHRvck1ldGhvZGdldHRlckZsYWdzc2V0dGVyRmxhZ3Npbml0aWFsaXplckluQWxsb2NhdG9ydmlzaXRGaWVsZHNnZW5lcmF0ZU9uZVNob3RJbnRlcmNlcHRvcmlzQXBwbHlUYXJnZXRyZWdpc3RlckNvbnN0YW50Y29uc3RhbnRPYmplY3Rpc1N0YXRpY1N0YXRlSG9sZGVyQ29sbGVjdG9yb3V0cHV0TGlicmFyeUxpc3RzaW50ZXJjZXB0b3JDb25zdGFudGNvbXB1dGVDbGFzc0ZpbHRlcmJhY2tlbmRUeXBlSGVscGVyc3VubmVlZGVkQ2xhc3Nlc25lZWRlZGdldEJhY2tlbmRUeXBlSGVscGVyc2NvbXB1dGVOZWVkZWRDb25zdGFudHNjb25zdGFudFVuaXRjb21wdXRlTmVlZGVkRGVjbGFyYXRpb25zYWRkQ2xhc3NXaXRoU3VwZXJjbGFzc2VzYWRkQ2xhc3Nlc1dpdGhTdXBlcmNsYXNzZXNtaXhpbkNsYXNzZXNzb3J0ZWRDbGFzc2VzY29tcHV0ZU5lZWRlZFN0YXRpY3Npc1N0YXRpY0Z1bmN0aW9uY29tcHV0ZU5lZWRlZFN0YXRpY05vbkZpbmFsRmllbGRzYWRkVG9PdXRwdXRVbml0ZWFnZXJGaWVsZHNhRmllbGREYXRhYkZpZWxkRGF0YWFJbmRleGJJbmRleGNvbXB1dGVOZWVkZWRMaWJyYXJpZXNGaWVsZFZpc2l0b3Jpc0xpYnJhcnlFeHBlY3RlZCBhIENsYXNzRW50aXR5IG9yIGEgTGlicmFyeUVudGl0eS5pc01peGluTmF0aXZlRmllbGRmaWVsZE5lZWRzR2V0dGVyZmllbGROZWVkc1NldHRlcmNhbkF2b2lkR2VuZXJhdGVkQ2hlY2tlZFNldHRlcmZpZWxkQWNjZXNzTmV2ZXJUaHJvd3NMaWJyYXJ5Q29udGVudHNMaWJyYXJpZXNNYXBfbGFzdExpYnJhcnlfbGFzdE1hcHBpbmdfZ2V0TWFwcGluZ1JlZ2lzdHJ5X2hvbGRlcnNNYXBfZGVmZXJyZWRMaWJyYXJpZXNNYXBfbGFzdE91dHB1dFVuaXRfbGFzdExpYnJhcmllc01hcF9tYXBVbml0VG9MaWJyYXJpZXNNYXB0YXJnZXRVbml0dGFyZ2V0TGlicmFyaWVzTWFwZGFydDJqcy5qc19lbWl0dGVyLnN0YXJ0dXBfZW1pdHRlck1vZHVsYXJFbWl0dGVyQmFzZWdsb2JhbFByb3BlcnR5QWNjZXNzRm9yQ2xhc3NwYWdsb2JhbFByb3BlcnR5QWNjZXNzRm9yVHlwZWdsb2JhbFByb3BlcnR5QWNjZXNzRm9yTWVtYmVyIy5wcm90b3R5cGVpbml0Ll9jb25zdGFudEVtaXR0ZXJnZW5lcmF0ZUVtaXR0ZXJJbXBsc2hvdWxkR2VuZXJhdGVTb3VyY2VNYXBidWlsZCBwcm9ncmFtZW1pdCBwcm9ncmFtZ2VuZXJhdGVDb25zdGFudFJlZmVyZW5jZW9taXR0ZWRGcmFnbWVudHNvdXRwdXRCdWZmZXJzZGFydDJqcy5qc19lbWl0dGVyLm1ldGFkYXRhX2NvbGxlY3RvcmpzX3ByZWNlZGVuY2VfTWV0YWRhdGFFbnRyeV9Cb3VuZE1ldGFkYXRhRW50cnlfQm91bmRNZXRhZGF0YUVudHJ5KCxyYz0sX3ZhbHVlPV9NZXRhZGF0YUxpc3RzZXRFeHByZXNzaW9uX21ldGFkYXRhVG9rZW5zX21ldGFkYXRhTWFwX3R5cGVzVG9rZW5zX3R5cGVzTWFwZ2V0TWV0YWRhdGFGb3JPdXRwdXRVbml0Z2V0VHlwZXNGb3JPdXRwdXRVbml0cmVpZnlEZWZhdWx0QXJndW1lbnRzX2FkZEdsb2JhbE1ldGFkYXRhYWRkVHlwZUluT3V0cHV0VW5pdHJlaWZ5TmFtZXJlaWZ5RXhwcmVzc2lvbm5hbWVUb0tleXByaW50ZWRfY29tcHV0ZVR5cGVSZXByZXNlbnRhdGlvblR5cGUgcmVwcmVzZW50YXRpb24gZm9yIHR5cGUgdmFyaWFibGUgIGlzIG5vdCBzdXBwb3J0ZWQucmVpZmllZCB0eXBlcyBzaG91bGQgbm90IGJlIHN0cmluZ3MuX2NvbXB1dGVUeXBlUmVwcmVzZW50YXRpb25OZXdSdGljb3VudFRva2Vuc0luVHlwZXNmaW5hbGl6ZU1hcG1ldGFkYXRhTWFwdHlwZXNNYXBkYXJ0MmpzLm5ld19qc19lbWl0dGVyLm1vZGVsbm9kZVRvU3RyaW5nUHJvZ3JhbXR5cGVUb0ludGVyY2VwdG9yTWFwX21ldGFkYXRhQ29sbGVjdG9ybWV0YWRhdGFGb3JPdXRwdXRVbml0bWV0YWRhdGFUeXBlc0Zvck91dHB1dFVuaXRpc1NwbGl0SG9sZGVySG9sZGVyKG5hbWU9RnJhZ21lbnRzdGF0aWNMYXppbHlJbml0aWFsaXplZEZpZWxkc291dHB1dEZpbGVOYW1laXNNYWluRnJhZ21lbnRNYWluRnJhZ21lbnRpbnZva2VNYWluTWFpbkZyYWdtZW50KClEZWZlcnJlZEZyYWdtZW50RGVmZXJyZWRGcmFnbWVudChuYW1lPUNvbnN0YW50KG5hbWU9RmllbGRDb250YWluZXJMaWJyYXJ5KHVyaT0sZWxlbWVudD1TdGF0aWNGaWVsZChuYW1lPV9zdXBlcmNsYXNzX21peGluQ2xhc3NjbGFzc0NoZWNrc05ld1J0aW5hdGl2ZUxlYWZUYWdzbmF0aXZlTm9uTGVhZlRhZ3NuYXRpdmVFeHRlbnNpb25zc3VwZXJjbGFzc05hbWVzdXBlcmNsYXNzSG9sZGVySW5kZXhDbGFzcyhuYW1lPU1peGluQXBwbGljYXRpb25NaXhpbihuYW1lPW5lZWRzSW50ZXJjZXB0ZWRHZXR0ZXJuZWVkc0ludGVyY2VwdGVkU2V0dGVybmVlZHNJbnRlcmNlcHRlZEdldHRlck9uUmVjZWl2ZXJuZWVkc0ludGVyY2VwdGVkU2V0dGVyT25SZWNlaXZlcm5lZWRzSW50ZXJjZXB0ZWRHZXR0ZXJPblRoaXNuZWVkc0ludGVyY2VwdGVkU2V0dGVyT25UaGlzRmllbGQobmFtZT1EYXJ0TWV0aG9kcGFyYW1ldGVyU3R1YnNJbnN0YW5jZU1ldGhvZEluc3RhbmNlTWV0aG9kKG5hbWU9LGNvZGU9U3R1Yk1ldGhvZFN0dWJNZXRob2QobmFtZT1QYXJhbWV0ZXJTdHViTWV0aG9kUGFyYW1ldGVyU3R1Yk1ldGhvZChuYW1lPSwgY2FsbE5hbWU9LCBjb2RlPVN0YXRpY0RhcnRNZXRob2RTdGF0aWNEYXJ0TWV0aG9kKG5hbWU9U3RhdGljU3R1Yk1ldGhvZFN0YXRpY1N0dWJNZXRob2QobmFtZT1kYXJ0MmpzLmpzX2VtaXR0ZXIubmF0aXZlX2VtaXR0ZXJoYXNOYXRpdmVDbGFzc2VzY2xhc3Nlc05lZWRlZEZvclJ0aXByZU9yZGVyd2Fsa25vbkxlYWZDbGFzc2VzZXh0ZW5zaW9uUG9pbnRzY29tcHV0ZUV4dGVuc2lvblBvaW50c2lzVHJpdmlhbENsYXNzbGVhZlRhZ3Nub25sZWFmVGFnc25hdGl2ZVRhZ3NzdWZmaWNpbmdJbnRlcmNlcHRvcmZpbGxOYXRpdmVJbmZvbmF0aXZlQW5jZXN0b3JPZm5hdGl2ZUFuY2VzdG9ybmVlZHNBY2Nlc3NvcnBvdGVudGlhbGx5Q29udmVydERhcnRDbG9zdXJlc1RvSnNzdHViUGFyYW1ldGVyc3N0dWJQYXJhbWV0ZXIjID0gIygjLCBnZW5lcmF0ZVBhcmFtZXRlclN0dWJTdGF0ZW1lbnRzYXJndW1lbnRzQnVmZmVyaW5kZXhPZkxhc3RPcHRpb25hbEFyZ3VtZW50SW5QYXJhbWV0ZXJzcmV0dXJuICMuIygjKWlzU3VwZXJ0eXBlT2ZOYXRpdmVDbGFzc3JlcXVpcmVzTmF0aXZlSXNDaGVja2RhcnQyanMuanNfZW1pdHRlci50eXBlX3Rlc3RfcmVnaXN0cnlSdW50aW1lVHlwZXNDaGVja3MgaGFzIG5vdCBiZWVuIGNvbXB1dGVkIHlldC5ydGlOZWVkZWRDbGFzc2VzIGhhcyBub3QgYmVlbiBjb21wdXRlZCB5ZXQubGl2ZU1lbWJlcnNfSW5kZXhlZEluZGV4ZWRMaWJyYXJ5SW5kZXhlZE1lbWJlckluZGV4ZWRGdW5jdGlvbkluZGV4ZWRDb25zdHJ1Y3RvckluZGV4ZWRGaWVsZEluZGV4ZWRUeXBlVmFyaWFibGVJbmRleGVkVHlwZWRlZkluZGV4ZWRMb2NhbEVudGl0eU1hcEJhc2VFbnRpdHlNYXBFMFRyeWluZyB0byByZWdpc3RlciAgd2hlbiBjbG9zZWQuRW50aXR5RGF0YU1hcEJhc2VEYXRhIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQgZm9yIEVudGl0eURhdGFNYXBEMERhdGEgbGlzdCBsZW5ndGggIGluY29uc2lzdGVudCB3aXRoIGVudGl0eSBsaXN0IGxlbmd0aCBEYXRhIGlzIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIGNyZWF0ZWQuRW50aXR5RGF0YUVudk1hcEJhc2VFbnYgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgY3JlYXRlZCBmb3IgRW50aXR5RGF0YUVudk1hcFYwRW52IGxpc3QgbGVuZ3RoIEVudiBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBjcmVhdGVkLlJlcG9ydEVycm9yRnVuY3Rpb25EYXJ0MmpzQ29uc3RhbnRFdmFsdWF0b3Jfc3VwcG9ydFJlZXZhbHVhdGlvbkZvclRlc3RpbmdyZXF1aXJlc0NvbnN0YW50c3VwcG9ydFJlZXZhbHVhdGlvbkZvclRlc3RpbmdJbnZhbGlkIGNvbnN0YW50IHJlc3VsdCBVbmV2YWx1YXRlZENvbnN0YW50RmluZGVyQ29uc3RhbnRSZWZlcmVuY2VDb25zdGFudFJlZmVyZW5jZS52aXNpdENoaWxkcmVuQ29uc3RhbnRSZWZlcmVuY2UuYWNjZXB0Q29uc3RhbnRSZWZlcmVuY2UudHJhbnNmb3JtQ2hpbGRyZW5Db25zdGFudFJlZmVyZW5jZShjb25zdGFudD1Eb2VzTm90Q29tcGxldGVUeXBlRG9lc05vdENvbXBsZXRlVHlwZSgpVGhpc0ludGVyZmFjZVR5cGVFeGFjdEludGVyZmFjZVR5cGVTdGF0aWNUeXBlQmFzZXJld3JpdGVfYXN5bmNlcnJvcl9jb2Rlc0FzeW5jUmV3cml0ZXJCYXNlbG9jYWxWYXJpYWJsZXNjb250aW51ZUxhYmVsc2JyZWFrTGFiZWxzZmluYWxseUxhYmVsc2hhbmRsZXJMYWJlbHNleGl0TGFiZWxyZXRocm93TGFiZWxjb250aW51ZVN0YWNrYnJlYWtTdGFja3JldHVyblN0YWNrdmFyaWFibGVSZW5hbWluZ3NhbmFseXNpc3Jlc3VsdE5hbWVlcnJvckNvZGVOYW1lZ290b05hbWVoYW5kbGVyTmFtZWhhc0hhbmRsZXJMYWJlbHNuZXh0TmFtZXJldHVyblZhbHVlTmFtZWN1cnJlbnRFcnJvck5hbWVvdXRlckxhYmVsTmFtZXNlbGZOYW1ldHlwZUFyZ3VtZW50TmFtZXNfY3VycmVudExhYmVsY3VycmVudFRlbXBWYXJJbmRleHRlbXBWYXJIaWdoV2F0ZXJNYXJrdGVtcFZhck5hbWVzbGFiZWxsZWRQYXJ0c2xhYmVsQ29tbWVudHNoYXNUcnlCbG9ja3NpbnNpZGVVbnRyYW5zbGF0ZWRCcmVha2FibGVoYXNKdW1wVGhvdWdoT3V0ZXJMYWJlbG5lZWRzUmV0aHJvd2N1cnJlbnRTdGF0ZW1lbnRCdWZmZXJjdXJyZW50RXJyb3Jpc1N5bmNTdGFyaXNBc3luY1N0YXJpbml0aWFsaXplTmFtZXNyZXdyaXRlRnVuY3Rpb25jdXJyZW50RXJyb3JIYW5kbGVyYWxsb2NhdGVUZW1wVmFydXNlVGVtcFZhcnNhZmVOYW1lcHJvY2Vzc1R5cGVBcmd1bWVudHNuZXdMYWJlbGJlZ2luTGFiZWxzZXRHb3RvVmFyaWFibGVnb3RvQW5kQnJlYWtnb3RvIGFkZEV4cHJlc3Npb25TdGF0ZW1lbnRzaG91bGRUcmFuc2Zvcm1oYXNBd2FpdE9yWWllbGROb2RlICBjYW5ub3QgYmUgdHJhbnNmb3JtZWQgYnkgdGhlIGF3YWl0LXN5bmMgdHJhbnNmb3JtZXJJbnRlcm5hbCBlcnJvciwgdHJ5aW5nIHRvIHZpc2l0IHZpc2l0U3RhdGVtZW50dmlzaXRFeHByZXNzaW9uSWdub3JlUmVzdWx0dmlzaXRFeHByZXNzaW9uX3N0b3JlSWZOZWNlc3NhcnkjID0gIzt3aXRoRXhwcmVzc2lvbnN0b3Jlb2xkVGVtcFZhckluZGV4d2l0aENhbGxUYXJnZXRFeHByZXNzaW9uc3RvcmVkSWZOZWVkZWR3aXRoRXhwcmVzc2lvbjJ3aXRoRXhwcmVzc2lvbnNsYXN0VHJhbnNmb3JtSW5kZXhhZGRTdWNjZXNzRXhpdGFkZEVycm9yRXhpdGFkZEZ1bmN0aW9uRXhpdHNyZXdyaXR0ZW5Cb2R5dmFyaWFibGVEZWNsYXJhdGlvbnNmdW5jdGlvblNvdXJjZUluZm9ybWF0aW9udmFyaWFibGVJbml0aWFsaXphdGlvbnNGdW5jdGlvbiBzdGFydGhhc0V4cGxpY2l0UmV0dXJuc2NsYXVzZXN3aGlsZSAodHJ1ZSkgeyN9aGFzRmluYWxseWhhc1lpZWxkTmVzdGVkIGZ1bmN0aW9uIGlzIGEgZ2VuZXJhdG9yIG9yIGFzeW5jaHJvbm91cy4jWyNdZXZhbHVhdGVkVW5leHBlY3RlZCBhc3NpZ25tZW50IGxlZnQgaGFuZCBzaWRlIGF3YWl0U3RhdGVtZW50YWZ0ZXJBd2FpdHJldHVybmluZyBmcm9tIGF3YWl0LmlzUmVzdWx0dGhlbkxhYmVsam9pbkxhYmVsYXNzaWduTGVmdGlmICgjKSB7I30gZWxzZSAjdHJhbnNsYXRlSnVtcHN0b3JlVGFyZ2V0IyA/ICMgOiAjZWxzZUxhYmVsIyA9ICMgPyAjIDogIztqdW1wU3RhY2tmaXJzdFRhcmdldGpzSnVtcFN0YWNrb2xkSW5zaWRlVW50cmFuc2xhdGVkQnJlYWthYmxlZG8geyN9IHdoaWxlICgjKXRyYW5zbGF0ZVRvU3RhdGVtZW50c3RhcnRMYWJlbGRvIGJvZHljb250aW51ZUxhYmVsZG8gY29uZGl0aW9uYWZ0ZXJMYWJlbGFmdGVyIGRvaWYgKCMpICNvbGRJbnNpZGVVbnRyYW5zbGF0ZWRmb3IgY29uZGl0aW9uZm9yIHVwZGF0ZWFmdGVyIGZvcnRyaXZpYWwgY29uZGl0aW9uSmF2YXNjcmlwdCBmb3ItaW4gbm90IGltcGxlbWVudGVkIHlldCBpbiB0aGUgYXdhaXQgdHJhbnNmb3JtYXRpb250cmFuc2xhdGVUb1N0YXRlbWVudFNlcXVlbmNlb2xkQnVmZmVycmVzdWx0QnVmZmVydHJhbnNsYXRlVG9CbG9ja3RyYW5zbGF0ZWRUaGVudHJhbnNsYXRlZEVsc2VicmVha0xhYmVsVW5leHBlY3RlZCBwb3N0Zml4IG9wZXJhdG9yIGFyZ3VtZW50IFVuZXhwZWN0ZWQgcHJlZml4ICBvcGVyYXRvciBjbGF1c2VhZnRlciBzd2l0Y2hhbnlDYXNlRXhwcmVzc2lvblRyYW5zZm9ybWVkZGVmYXVsdEluZGV4VW5rbm93biBjbGF1c2UgdHlwZSBzZXRFcnJvckhhbmRsZXJfZmluYWxsaWVzVXBUb0FuZEVuY2xvc2luZ0hhbmRsZXJoYW5kbGVyTGFiZWxmaW5hbGx5TGFiZWx1bmNhdWdodExhYmVsdW5jYXVnaHRhZnRlckZpbmFsbHlMYWJlbGFmdGVyIGZpbmFsbHkjLnB1c2goIyk7ZXJyb3JSZW5hbWVlbmNsb3NpbmdGaW5hbGxpZXNuZXh0TGFiZWwvLyBnb3RvIHRoZSBuZXh0IGZpbmFsbHkgaGFuZGxlciMgPSAjLnBvcCgpO2luaXRpYWxpemF0aW9ucmVuYW1pbmd3aGlsZSBjb25kaXRpb25hZnRlciB3aGlsZWFkZFlpZWxkYWZ0ZXIgeWllbGRBc3luY1Jld3JpdGVyY29tcGxldGVyTmFtZWNvbXBsZXRlcllpZWxkIGluIG5vbi1nZW5lcmF0aW5nIGFzeW5jIGZ1bmN0aW9udGhlbkhlbHBlckNhbGwjdGhlbkhlbHBlcigjY3VycmVudEVycm9yLCAjY29tcGxldGVyKXRoZW5IZWxwZXJpbXBsaWNpdCByZXR1cm5ydW50aW1lSGVscGVyQ2FsbCNydW50aW1lSGVscGVyKCNyZXR1cm5WYWx1ZSwgI2NvbXBsZXRlcilydW50aW1lSGVscGVyYXN5bmNIZWxwZXJDYWxsI2FzeW5jSGVscGVyKCN2YWx1ZSwgI2JvZHlOYW1lKWFzeW5jSGVscGVyYXN5bmNSZXRocm93Q2FsbCNhc3luY1JldGhyb3coI3Jlc3VsdCwgI2NvbXBsZXRlcilyZXR1cm5Bc3luY1JldGhyb3dlcnJvckNoZWNrICAgICAgaWYgKCNlcnJvckNvZGUgPT09ICNFUlJPUikgewogICAgICAgIGlmICgjaGFzSGFuZGxlckxhYmVscykgewogICAgICAgICAgICAjY3VycmVudEVycm9yID0gI3Jlc3VsdDsKICAgICAgICAgICAgI2dvdG8gPSAjaGFuZGxlcjsKICAgICAgICB9IGVsc2UKICAgICAgICAgICAgI3JldHVybkFzeW5jUmV0aHJvdzsKICAgICAgfWlubmVyRnVuY3Rpb24gICAgICBmdW5jdGlvbiAoI2Vycm9yQ29kZSwgI3Jlc3VsdCkgewogICAgICAgICNlcnJvckNoZWNrOwogICAgICAgICNyZXdyaXR0ZW5Cb2R5OwogICAgICB9YXN5bmNTdGFydENhbGwjYXN5bmNTdGFydCgjYm9keU5hbWUsICNjb21wbGV0ZXIpcmV0dXJuQXN5bmNTdGFydHdyYXBCb2R5Q2FsbCN3cmFwQm9keSgjaW5uZXJGdW5jdGlvbikgICAgICAgIGZ1bmN0aW9uICgjcGFyYW1ldGVycywgI3R5cGVQYXJhbWV0ZXJzKSB7CiAgICAgICAgICAjdmFyaWFibGVEZWNsYXJhdGlvbnM7CiAgICAgICAgICB2YXIgI2JvZHlOYW1lID0gI3dyYXBCb2R5Q2FsbDsKICAgICAgICAgICNyZXR1cm5Bc3luY1N0YXJ0OwogICAgICAgIH1TeW5jU3RhclJld3JpdGVyZGlhZ25vc3RpY0xpc3RlbmVycmVuYW1lZFBhcmFtZXRlcnNyZW5hbWVkTmFtZWNvcHlQYXJhbWV0ZXJzc2V0Q3VycmVudEVycm9yI2N1cnJlbnRFcnJvciA9ICNyZXN1bHRzZXRHb3RvI2dvdG8gPSAjaGFuZGxlcmNoZWNrRXJyb3JDb2RlICAgICAgICAgIGlmICgjZXJyb3JDb2RlID09PSAjRVJST1IpIHsKICAgICAgICAgICAgICAjc2V0Q3VycmVudEVycm9yOwogICAgICAgICAgICAgICNzZXRHb3RvOwogICAgICAgICAgfWlubmVySW5uZXJGdW5jdGlvbiAgICAgICAgICBmdW5jdGlvbiAjYm9keSgjZXJyb3JDb2RlLCAjcmVzdWx0KSB7CiAgICAgICAgICAgICNjaGVja0Vycm9yQ29kZTsKICAgICAgICAgICAgI2hlbHBlckJvZHk7CiAgICAgICAgICB9aGVscGVyQm9keXJldHVybklubmVySW5uZXJGdW5jdGlvbiAgICAgICAgICBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIGlmICgjaGFzUGFyYW1ldGVycykgewogICAgICAgICAgICAgICNjb3B5UGFyYW1ldGVyczsKICAgICAgICAgICAgfQogICAgICAgICAgICAjdmFyRGVjbDsKICAgICAgICAgICAgI3JldHVybklubmVySW5uZXJGdW5jdGlvbjsKICAgICAgICAgIH1oYXNQYXJhbWV0ZXJzdmFyRGVjbGNhbGxJdGVyYWJsZUZhY3RvcnkjaXRlcmFibGVGYWN0b3J5KCNpbm5lckZ1bmN0aW9uLCAjdHlwZSlyZXR1cm5DYWxsSXRlcmFibGVGYWN0b3J5ICAgICAgICAgIGZ1bmN0aW9uICgjcmVuYW1lZFBhcmFtZXRlcnMsICN0eXBlUGFyYW1ldGVycykgewogICAgICAgICAgICBpZiAoI25lZWRzVGhpcykKICAgICAgICAgICAgICB2YXIgI3NlbGYgPSB0aGlzOwogICAgICAgICAgICAjcmV0dXJuQ2FsbEl0ZXJhYmxlRmFjdG9yeTsKICAgICAgICAgIH0KICAgICAgICAgIG5lZWRzVGhpc3VuY2F1Z2h0RXJyb3JFeHByZXNzaW9uQ2FsbGVuZE9mSXRlcmF0aW9uQ2FsbCMoKVN5bmMqIGZ1bmN0aW9ucyBjYW5ub3QgY29udGFpbiBhd2FpdCBzdGF0ZW1lbnRzLkFzeW5jU3RhclJld3JpdGVybmV4dFdoZW5DYW5jZWxlZE5hbWVjb250cm9sbGVyTmFtZW5leHRXaGVuQ2FuY2VsZWRjb250cm9sbGVyZW5jbG9zaW5nRmluYWxseUxhYmVsc3lpZWxkRXhwcmVzc2lvbkNhbGwjeWllbGRFeHByZXNzaW9uKCNleHByZXNzaW9uKWFzeW5jU3RhckhlbHBlckNhbGwjYXN5bmNTdGFySGVscGVyKCN5aWVsZEV4cHJlc3Npb25DYWxsLCAjYm9keU5hbWUsICNjb250cm9sbGVyKXVwZGF0ZU5leHQjbmV4dCA9ICNuZXh0V2hlbkNhbmNlbGVkY2FsbFBvcCNuZXh0LnBvcCgpZ290b0NhbmNlbGxlZCNnb3RvID0gI2NhbGxQb3B1cGRhdGVFcnJvcmdvdG9FcnJvciAgICAgICAgc3dpdGNoICgjZXJyb3JDb2RlKSB7CiAgICAgICAgICBjYXNlICNTVFJFQU1fV0FTX0NBTkNFTEVEOgogICAgICAgICAgICAjdXBkYXRlTmV4dDsKICAgICAgICAgICAgI2dvdG9DYW5jZWxsZWQ7CiAgICAgICAgICAgICNicmVhazsKICAgICAgICAgIGNhc2UgI0VSUk9SOgogICAgICAgICAgICAjdXBkYXRlRXJyb3I7CiAgICAgICAgICAgICNnb3RvRXJyb3I7CiAgICAgICAgfVNUUkVBTV9XQVNfQ0FOQ0VMRURpZkVycm9yICAgICAgICBpZiAoI2Vycm9yQ29kZSA9PT0gI0VSUk9SKSB7CiAgICAgICAgICAjdXBkYXRlRXJyb3I7CiAgICAgICAgICAjZ290b0Vycm9yOwogICAgICAgIH1pZkhhc1lpZWxkICAgICAgICBpZiAoI2hhc1lpZWxkKSB7CiAgICAgICAgICAjc3dpdGNoQ2FzZQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAjaWZFcnJvcjsKICAgICAgICB9CiAgICAgICAgICAgIGZ1bmN0aW9uICgjZXJyb3JDb2RlLCAjcmVzdWx0KSB7CiAgICAgICAgICAjaWZIYXNZaWVsZDsKICAgICAgICAgICNyZXdyaXR0ZW5Cb2R5OwogICAgICAgIH1kZWNsYXJlQm9keU5hbWV2YXIgI2JvZHlOYW1lID0gI3dyYXBCb2R5Q2FsbDtzdHJlYW1PZkNvbnRyb2xsZXJDYWxsI3N0cmVhbU9mQ29udHJvbGxlcigjY29udHJvbGxlcilyZXR1cm5TdHJlYW1PZkNvbnRyb2xsZXJDYWxsICAgICAgICBmdW5jdGlvbiAoI3BhcmFtZXRlcnMsICN0eXBlUGFyYW1ldGVycykgewogICAgICAgICAgI2RlY2xhcmVCb2R5TmFtZTsKICAgICAgICAgICN2YXJpYWJsZURlY2xhcmF0aW9uczsKICAgICAgICAgICNyZXR1cm5TdHJlYW1PZkNvbnRyb2xsZXJDYWxsOwogICAgICAgIH0jYXN5bmNIZWxwZXIoI2N1cnJlbnRFcnJvciwgI2Vycm9yQ29kZSwgI2NvbnRyb2xsZXIpc3RyZWFtSGVscGVyQ2FsbCNzdHJlYW1IZWxwZXIobnVsbCwgI3N1Y2Nlc3NDb2RlLCAjY29udHJvbGxlcilzdHJlYW1IZWxwZXJzdWNjZXNzQ29kZSMoIywgIykjYXN5bmNIZWxwZXIoI3ZhbHVlLCAjYm9keU5hbWUsICNjb250cm9sbGVyKVByZVRyYW5zbGF0aW9uQW5hbHlzaXNsb29wc0FuZFN3aXRjaGVzbGFiZWxsZWRTdGF0ZW1lbnRzY3VycmVudEZ1bmN0aW9uY29udGFpbnNBd2FpdHN0bXRhcmdldFN0YXRlbWVudFVuZXhwZWN0ZWRfbWFrZVZhcmlhYmxlSW5pdGlhbGl6ZXJpbml0VmFsdWVDb2RlZ2VuUGhhc2VTc2FDb2RlR2VuZXJhdG9yVGFza1NTQSBjb2RlIGdlbmVyYXRvcmJ1aWxkSmF2YVNjcmlwdEZ1bmN0aW9uZ2VuZXJhdGVMYXp5SW5pdGlhbGl6ZXJnZW5lcmF0ZU1ldGhvZGNvZGVHZW5lcmF0b3JUWVBFX1NUQVRFTUVOVFRZUEVfRVhQUkVTU0lPTlRZUEVfREVDTEFSQVRJT05pc0dlbmVyYXRpbmdFeHByZXNzaW9uX2NvZGVnZW5UYXNrX2NoZWNrZWRNb2RlSGVscGVyc2dlbmVyYXRlQXRVc2VTaXRlY29udHJvbEZsb3dPcGVyYXRvcnNicmVha0FjdGlvbmNvbnRpbnVlQWN0aW9uaW1wbGljaXRDb250aW51ZUFjdGlvbmN1cnJlbnRDb250YWluZXJleHByZXNzaW9uU3RhY2tvbGRDb250YWluZXJTdGFja3ZhcmlhYmxlTmFtZXNzaG91bGRHcm91cFZhckRlY2xhcmF0aW9uc2NvbGxlY3RlZFZhcmlhYmxlRGVjbGFyYXRpb25zZGVjbGFyZWRMb2NhbHNjdXJyZW50R3JhcGhjdXJyZW50QmxvY2tJbmZvcm1hdGlvbmJsb2NrUXVldWVpc0dlbmVyYXRlQXRVc2VTaXRlaGFzTm9uQml0T3BVc2VycGhpU2V0Yml0V2lkdGhiaXRPcGxlZnRXaWR0aHNoaWZ0Q291bnRyZXF1aXJlc1VpbnRDb252ZXJzaW9ucHVzaFN0YXRlbWVudGluc2VydFN0YXRlbWVudEF0U3RhcnRwdXNoRXhwcmVzc2lvbkFzU3RhdGVtZW50cHJlR2VuZXJhdGVNZXRob2RydW5QaGFzZUdyYXBoIG5vdCB2YWxpZCBhZnRlciBpbnRlcnZhbEJ1aWxkZXJhbGxvY2F0b3JsaXZlSW5zdHJ1Y3Rpb25zbGl2ZUludGVydmFsc2hhbmRsZURlbGF5ZWRWYXJpYWJsZURlY2xhcmF0aW9uc25leHRTdGF0ZW1lbnRfc2FmZUluSW5pdGlhbGl6ZXJ1bmluaXRpYWxpemVkZGVjbGFyYXRpb25MaXN0dmlzaXRTdWJHcmFwaG5ld1N1YkdyYXBob2xkU3ViR3JhcGhvbGRCbG9ja1F1ZXVlZW50ZXJTdWJHcmFwaGxpbWl0c2Jhc2ljQmxvY2tpc0pTRXhwcmVzc2lvbmlzSlNDb25kaXRpb25nZW5lcmF0ZVN0YXRlbWVudHNnZW5lcmF0ZVN0YXRlbWVudHNJbk5ld0Jsb2Nrb2xkQ29udGFpbmVydW53cmFwU3RhdGVtZW50Z2VuZXJhdGVFeHByZXNzaW9ub2xkSXNHZW5lcmF0aW5nRXhwcmVzc2lvbm9sZEV4cHJlc3Npb25TdGFja3NlcXVlbmNlRWxlbWVudHNleHByZXNzaW9uU3ViR3JhcGhpc1ZhcmlhYmxlRGVjbGFyZWRnZW5lcmF0ZUV4cHJlc3Npb25Bc3NpZ25tZW50YXNzaWduVmFyaWFibGVkZWZpbmVuZWVkc0Fzc2lnbm1lbnRjb250aW51ZUFzQnJlYWtpbXBsaWNpdENvbnRpbnVlQXNCcmVha2ltcGxpY2l0QnJlYWtXaXRoTGFiZWx3cmFwSW50b0xhYmVsc2JyZWFrTGFiZWxTdHJpbmdoYW5kbGVkRGVmYXVsdHN0YXRlbWVudEluZGV4dmlzaXRCb2R5SWdub3JlTGFiZWxzb2xkSW5mb2lzQ29uZGl0aW9uRXhwcmVzc2lvbmluaXRpYWxpemF0aW9uVHlwZWF2b2lkQ29udGFpbmVyYXNzaWduUGhpc09mU3VjY2Vzc29yc2hhc1BoaVVwZGF0ZXNqc0luaXRpYWxpemF0aW9uZGVsYXllZFZhcmlhYmxlc0NvdW50YWxsU2ltcGxlQXNzaWdubWVudHNpc0NvbW1hT3BlcmF0b3Jpbml0c2pzQ29uZGl0aW9uanNVcGRhdGVzbmV3TGl0ZXJhbEJvb2xpZlRlc3Rqc0JyZWFrZXhpdExvb3B3cmFwTG9vcEJvZHlGb3JDb250aW51ZWV4aXRBdm9pZENvbnRhaW5lcmhhc0V4aXRQaGlVcGRhdGVzYXZvaWRFZGdldXBkYXRlQm9keVVuZXhwZWN0ZWQgbG9vcCBraW5kOiBjb250aW51ZUxhYmVsU3RyaW5nbGFiZWxlZEJsb2NrSW5mb2NvbnRpbnVlT3ZlcnJpZGVzaGFuZGxlQmxvY2tGbG93b2xkQmxvY2tJbmZvcm1hdGlvbmNvbnRpbnVlU3ViR3JhcGhpdGVyYXRlQmFzaWNCbG9ja2VtaXRBc3NpZ25tZW50ZGVzdGluYXRpb25zZXF1ZW50aWFsaXplQ29waWVzaW5zdHJ1Y3Rpb25Db3BpZXN0ZW1wTmFtZWRvQXNzaWdubWVudHNvdXJjZUluZm9ybWF0aW9uTWFwZGVzdGluYXRpb25OYW1lY3VycmVudExvY2F0aW9ucmVhZHlwcnVuZWRDb3BpZXNnZXRDb3B5SGFuZGxlcmdldFN3YXBUZW1waGFuZGxlSW52b2tlQmluYXJ5anNMZWZ0dmlzaXRCaXRJbnZva2VCaW5hcnl2aXNpdEJpdEludm9rZVVuYXJ5ZW1pdElkZW50aXR5Q29tcGFyaXNvbmludmVyc2VsZWZ0RXF1YWxzTnVsbHJpZ2h0RXF1YWxzTnVsbHRyaXBsZUVxTWF0aC5hYnMoIylkb21pbmF0ZWQubGVuZ3RoID0gbm9kZS5ibG9jayAhPSBjdXJyZW50R3JhcGguZW50cnl2aXNpdFRyeSBzaG91bGQgbm90IGJlIGNhbGxlZC50cnlDb250cm9sRmxvd09wZXJhdGlvbmF0VXNlU2l0ZWdlbmVyYXRlSWZnZW5lcmF0ZU5vdF9hc3NlbWJsZUlmVGhlbkVsc2UjICYmICNtZXRob2RMaXRlcmFscmVnaXN0ZXJNZXRob2RJbnZva2VyZWdpc3RlckdldHRlcnJlZ2lzdGVyU2V0dGVyZ2V0T3B0aW1pemVkU2VsZWN0b3JGb3JFbGVtZW50IHRvIGJlIG1peGVkIGluLiBkb2VzIG5vdCBhcHBseSB0byBVbmV4cGVjdGVkIGRpcmVjdCBpbnZvY2F0aW9uIHNlbGVjdG9yOiB0aHJvd0Z1bmN0aW9uKDAsICMpKCMpIyB8fCAjc3VwZXJFbGVtZW50dXNlQWxpYXNlZFN1cGVyIy4jLmNhbGwoIykjLiMoIylyZWdpc3RlckZvcmVpZ25UeXBlc2ludGVycG9sYXRlZEV4cHJlc3Npb25zanNDbGFzc1JlZmVyZW5jZWdlbmVyYXRlQ29uc3RhbnR0eXBlQ29uc3RhbnRtYXBSZWxhdGlvbmFsT3BlcmF0b3JpbnZlcnNlT3BlcmF0b3JjYW5HZW5lcmF0ZU9wdGltaXplZENvbXBhcmlzb25yZWxhdGlvbmFsaGFuZGxlZEJ5U3BlY2lhbENhc2VlbWl0SXNlbWl0SXNWaWFJbnRlcmNlcHRvcmlmQmxvY2tnZW5lcmF0ZVRocm93V2l0aEhlbHBlcnVuZGVyb3ZlciMgPCAwanNJbmRleCMgPj4+IDAgIT09ICN1bmRlck92ZXJqc0hlbHBlcmxhenlHZXR0ZXJnZW5lcmF0ZUFycmF5TGl0ZXJhbG9yMGNoZWNrQmlnSW50bWF0aEZsb29yQ2FsbE1hdGguZmxvb3IoIykgI2NoZWNrVHlwZU9mY2hlY2tEb3VibGVjaGVja0Jvb2xib29sZWFuY2hlY2tPYmplY3Rub3ROdWxsZXFOdWxsY2hlY2tBcnJheWNoZWNrRmllbGRFeGlzdHNjaGVja0ZpZWxkRG9lc05vdEV4aXN0Y2hlY2tJbW11dGFibGVBcnJheWltbXV0YWJsZSRsaXN0Y2hlY2tNdXRhYmxlQXJyYXljaGVja0V4dGVuZGFibGVBcnJheWZpeGVkJGxlbmd0aGNoZWNrRml4ZWRBcnJheWNoZWNrTnVsbGNoZWNrTm9uTnVsbGNoZWNrVHlwZVZpYVByb3BlcnR5Y2hlY2tUeXBlVmlhSW5zdGFuY2VvZiMgaW5zdGFuY2VvZiAjaGFuZGxlTnVtYmVyT3JTdHJpbmdTdXBlcnR5cGVDaGVja251bWJlclRlc3RzdHJpbmdUZXN0b2JqZWN0VGVzdGNvbWJpbmVyMmhhbmRsZVN0cmluZ1N1cGVydHlwZUNoZWNraGFuZGxlTGlzdE9yU3VwZXJ0eXBlQ2hlY2thcnJheVRlc3RudW1UZXN0X2dlbmVyYXRlUmVjZWl2ZXJPckFyZ3VtZW50VHlwZVRlc3RVbmV4cGVjdGVkIGNoZWNrOiAjLiN0eXBlVmFyaWFibGVBY2Nlc3NOZWVkc1N1YnN0aXR1dGlvbiMoIywgIywgIywgIykjKCMsICMsICMpTm90IGFsbCBpbnB1dCBpcyByZWFkIGZvciB0eXBlIHJlY2VpdmVyTWFza21ldGhvZEFjY2Vzc1NzYUNvZGVHZW5lcmF0b3IudmlzaXRTdWJ0eXBlQ2hlY2sgIGV4dGVuc2lvbnNPcHRpbWl6YXRpb25QaGFzZVNzYU9wdGltaXplclRhc2tyYW5nZXNsb2dnZXJzRm9yVGVzdGluZ1NTQSBvcHRpbWl6ZXJib3VuZHNDaGVja2VkY29kZU1vdGlvbmxvYWRFbGltaW5hdGlvbnBoYXNlc2RjZW1vdmVkQ29kZWVsaW1pbmF0ZWRTaWRlRWZmZWN0c25ld0d2bkNhbmRpZGF0ZXNTc2FJbnN0cnVjdGlvblNpbXBsaWZpZXJNQVhfU0hBUkVEX0NPTlNUQU5UX0ZPTERFRF9TVFJJTkdfTEVOR1RIX2xvZ19ncmFwaHNpbXBsaWZ5UGhpc2IxYjJjb250cm9sRmxvd3Rlc3RlZHdoZW5OdWxsVmFsdWV3aGVuTm90TnVsbFZhbHVld2hlbk51bGxCbG9ja3doZW5Ob3ROdWxsQmxvY2tfc2FtZU9yUmVmaW5lbWVudE9mX2lzQm9vbENvbnN0YW50X21vc3RseUVtcHR5aW5zbmdldENvbnN0YW50RnJvbVR5cGVwcm9wYWdhdGVDb25zdGFudFZhbHVlVG9Vc2VzZm9sZGVkZm9sZFVuYXJ5dHJ5T3B0aW1pemVMZW5ndGhJbnRlcmNlcHRlZEdldHRlcmFjdHVhbFJlY2VpdmVyY29uc3RhbnRJbnB1dGhhbmRsZUludGVyY2VwdGVkQ2FsbGZvbGRCaW5hcnloYW5kbGVTdHJpbmdTcGxpdG9wdGltaXplZHJlc3VsdE1hc2tzcGxpdEluc3RydWN0aW9uc3RyaW5nVHlwZUluZm90YWdJbnN0cnVjdGlvbnRyeUlubGluZU5hdGl2ZU1ldGhvZGluc2VydGlvblBvaW50ZHVtbXlHZXRyZWdpc3RlckZpZWxkQ2FsbHJlZ2lzdGVyQ29uc3RhbnRGaWVsZENhbGxpbnB1dFBvc2l0aW9uY2hlY2tQYXJhbWV0ZXJUeXBlcGFyYW1ldGVyQWJzdHJhY3RWYWx1ZWNvbnN0YW50SW5zdHJ1Y3Rpb25vcDFvcDJoYW5kbGVJZGVudGl0eUNoZWNrbWFrZVRydWVtYWtlRmFsc2Vjb21wYXJlQ29uc3RhbnRzaW1wbGlmeUNvbmRpdGlvbmlzTmVnYXRlZGRvbWluYXRpbmdob2lzdGVkcmVwZmluZENvbmNyZXRlRmllbGRGb3JEeW5hbWljQWNjZXNzY29uc3RydWN0ZWRDb25zdGFudGNvbnN0YW50UmVjZWl2ZXJpbmRleEluc3RydWN0aW9ucmVnaXN0ZXJGaWVsZEdldHJlZ2lzdGVyQ29uc3RhbnRGaWVsZEdldF9kaXJlY3RGaWVsZEdldHJlZ2lzdGVyRmllbGRTZXRoYW5kbGVBcnJheVR5cGVJbmZvZmlyc3RBcmd1bWVudGdldFN0cmluZ2xlZnRDb25jYXR0cnlDb25zdGFudHRvU3RyaW5nVHlwZW5lZWRzU3Vic3RpdHV0aW9uRm9yVHlwZVZhcmlhYmxlQWNjZXNzdHJ5Q29weUluZm9leHBlY3RlZEluZGV4bmV4dFNvdXJjZWZpbmlzaEdyb3VuZFR5cGVncm91bmRUeXBldHlwZUF0VmFyaWFibGVmaW5pc2hTdWJzdGl0dXRlZGNyZWF0ZWRDbGFzc3NlbGVjdFR5cGVBcmd1bWVudEZyb21PYmplY3RDcmVhdGlvbmluc3RydWN0aW9uRm9yVHlwZVZhcmlhYmxlcmVnaXN0ZXJJbnN0YW50aWF0aW9uc3NwZWNpYWxpemVkQ2hlY2tTc2FDaGVja0luc2VydGVyaW5zZXJ0Qm91bmRzQ2hlY2tpbmRleE5vZGVpbmRleEFyZ3VtZW50bWludXNPbmVTc2FEZWFkQ29kZUVsaW1pbmF0b3J0cml2aWFsRGVhZFN0b3JlUmVjZWl2ZXJzemFwSW5zdHJ1Y3Rpb25DYWNoZXphcEluc3RydWN0aW9udGVtcGxhdGVUaHJvd3NOU01vbk51bGxoYXNGb2xsb3dpbmdUaHJvd2luZ05TTWlzRGVhZEJsb2NraXNUcml2aWFsRGVhZFN0b3JlUmVjZWl2ZXJpc0RlYWRVc2Vpc0RlYWRDb2RlaXNUcml2aWFsRGVhZFN0b3JlY2xlYW5QaGlzc2ltcGxpZnlDb250cm9sRmxvd3JlbW92ZVVzZXJzc2ltcGxpZnlQaGlldmFjdWF0ZVRha2VuQnJhbmNoc2VlblVucmVmaW5lZEJhc2VyZWZpbmVtZW50dGhlblNpemVtZWFzdXJlRW1wdHlJbnRlcnZhbGVsc2VTaXplbmV3Q29uZGl0aW9ucmVwbGFjZUlucHV0aW5kZXhPZkxpdmVieXJlbW92ZUlucHV0U3NhTGl2ZUJsb2NrQW5hbHl6ZXJsaXZlbWFya0Jsb2NrTGl2ZXN3aXRjaFJhbmdlbG93ZXJWYWx1ZXVwcGVyVmFsdWVsaXZlTGFiZWxzU3NhRGVhZFBoaUVsaW1pbmF0b3JsaXZlUGhpc1NzYVJlZHVuZGFudFBoaUVsaW1pbmF0b3JHdm5Xb3JrSXRlbXZhbHVlU2V0U3NhR2xvYmFsVmFsdWVOdW1iZXJlcmJsb2NrQ2hhbmdlc0ZsYWdzbG9vcENoYW5nZXNGbGFnc2NvbXB1dGVDaGFuZ2VzRmxhZ3Ntb3ZlTG9vcEludmFyaWFudENvZGVjaGFuZ2VzRmxhZ3Ntb3ZlTG9vcEludmFyaWFudENvZGVGcm9tQmxvY2twcmVoZWFkZXJpc0xvb3BBbHdheXNUYWtlbmZpcnN0SW5zdHJ1Y3Rpb25Jbkxvb3Bsb29wSW52YXJpYW50SW5wdXRzaXNJbnB1dERlZmluZWRBZnRlckRvbWluYXRvcm9sZENoYW5nZXNGbGFnc2tpbGxzdWNjZXNzb3JWYWx1ZXNnZXRDaGFuZ2VzRmxhZ3NGb3JEb21pbmF0ZWRCbG9ja1NzYUNvZGVNb3Rpb25pbnNuMWluc24ydG9SZXdyaXRlY2FuQmVNb3ZlZFNzYVR5cGVDb252ZXJzaW9uSW5zZXJ0ZXJTc2FUeXBlY29udmVyc2lvbkluc2VydGVyaW5zZXJ0VHlwZVByb3BhZ2F0aW9uRm9yRG9taW5hdGVkVXNlcnNjb252ZXJ0ZWRUeXBlZG9taW5hdGVkVXNlc3RydWVUYXJnZXRzZmFsc2VUYXJnZXRzY29sbGVjdFRhcmdldHNTc2FMb2FkRWxpbWluYXRpb25tZW1vcnlTZXRtZW1vcmllc2ludGVyc2VjdGlvbkZvcmNoZWNrTmV3R3ZuQ2FuZGlkYXRlc2hhc1VzZUd2bl92aXNpdEZpZWxkR2V0bG9va3VwRmllbGRWYWx1ZU1lbW9yeUZlYXR1cmUubGVuZ3RocmVnaXN0ZXJGaWVsZFZhbHVlcmVnaXN0ZXJGaWVsZFZhbHVlVXBkYXRlcmVnaXN0ZXJBbGxvY2F0aW9uc2hvdWxkVHJhY2tJbml0aWFsVmFsdWVza2lsbEFmZmVjdGVkQnlpbnRlcmVzdGluZ1VzZWhlYXBEZXB0aGhhbmRsZVN0YXRpY0xvYWRsb29rdXBLZXllZFZhbHVlcmVnaXN0ZXJLZXllZFZhbHVlcmVnaXN0ZXJLZXllZFZhbHVlVXBkYXRlTWVtb3J5RmVhdHVyZU1lbW9yeVNldGtleWVkVmFsdWVzbm9uRXNjYXBpbmdSZWNlaXZlcnNtdXN0QWxpYXNtYXlBbGlhc2lzQ29uY3JldGVlc2NhcGVzVW5leHBlY3RlZCBtZW1iZXIvZmVhdHVyZTogcmVjZWl2ZXJzVG9SZW1vdmVmaWVsZHNUb1JlbW92ZXdlYWtJbmRleG90aGVySW5kZXhmaW5kQ29tbW9uSW5zdHJ1Y3Rpb25wcmVkZWNlc3NvckluZGV4dXNlcjJwaGlUeXBlaXNOb25Fc2NhcGluZ1VzZW90aGVyVmFsdWVzaXNGaXhlZExlbmd0aGpzX2FzdGNoYXJDb2Rlc3NyYy9ub2Rlcy5kYXJ0c3JjL2J1aWxkZXIuZGFydHNyYy9wcmludGVyLmRhcnRzcmMvdGVtcGxhdGUuZGFydHNyYy9lcXVpdmFsZW5jZV92aXNpdG9yLmRhcnRSZW5hbWVySW5zdGFudGlhdG9yTm9kZVZpc2l0b3Jjb25kQmFzZVZpc2l0b3J2aXNpdExvb3B2aXNpdFZhcmlhYmxlUmVmZXJlbmNldmlzaXRUb2tlbnZpc2l0TGl0ZXJhbHZpc2l0SW50ZXJwb2xhdGVkTm9kZU5vZGVWaXNpdG9yMUJhc2VWaXNpdG9yMXZpc2l0Q2hpbGRyZW4xX3NvdXJjZUluZm9ybWF0aW9uYXNWYXJpYWJsZVVzZXRvU3RhdGVtZW50SWZub0Vsc2VoYXNFbHNlTG9vcEZvcldoaWxlRG9SZXR1cm5UcnlTd2l0Y2hTd2l0Y2hDbGF1c2VDYXNlRGVmYXVsdExpdGVyYWxTdGF0ZW1lbnREYXJ0WWllbGRMaXRlcmFsU3RyaW5nRnJvbU5hbWVMaXRlcmFsRXhwcmVzc2lvbndpdGhEYXRhVmFyaWFibGVEZWNsYXJhdGlvbkxpc3RQYXJlbnRoZXNlc0Fzc2lnbm1lbnRWYXJpYWJsZUluaXRpYWxpemF0aW9uQ29uZGl0aW9uYWxDYWxsTmV3SW50ZXJuYWwgRXJyb3I6IFVuaGFuZGxlZCBiaW5hcnkgb3BlcmF0b3I6IFBvc3RmaXhWYXJpYWJsZVJlZmVyZW5jZV9pZGVudGlmaWVyUkVeW0EtWmEtel8kXVtBLVphLXpfJDAtOV0qJE5vbi1pZGVudGlmaWVyIG5hbWUgJ1ZhcmlhYmxlVXNlKFBhcmFtZXRlclRoaXNOYW1lZEZ1bmN0aW9uRnVuYXN5bmNTdGFyc3luY1N0YXJQcm9wZXJ0eUFjY2Vzc2luZGV4ZWREZWZlcnJlZFRva2VuRGVmZXJyZWROdW1iZXJEZWZlcnJlZFN0cmluZ0RlZmVycmVkRXhwcmVzc2lvbkxpdGVyYWxMaXRlcmFsTnVtYmVyQXJyYXlJbml0aWFsaXplckFycmF5SG9sZU9iamVjdEluaXRpYWxpemVyUHJvcGVydHlJbnRlcnBvbGF0ZWROb2RlX0ludGVycG9sYXRlZEV4cHJlc3Npb24mRXhwcmVzc2lvbiZJbnRlcnBvbGF0ZWROb2RlSW50ZXJwb2xhdGVkRXhwcmVzc2lvbl9JbnRlcnBvbGF0ZWRMaXRlcmFsJkxpdGVyYWwmSW50ZXJwb2xhdGVkTm9kZUludGVycG9sYXRlZExpdGVyYWxfSW50ZXJwb2xhdGVkUGFyYW1ldGVyJkV4cHJlc3Npb24mSW50ZXJwb2xhdGVkTm9kZUludGVycG9sYXRlZFBhcmFtZXRlckludGVycG9sYXRlZFBhcmFtZXRlci5uYW1lIG11c3Qgbm90IGJlIGludm9rZWRfSW50ZXJwb2xhdGVkU2VsZWN0b3ImRXhwcmVzc2lvbiZJbnRlcnBvbGF0ZWROb2RlSW50ZXJwb2xhdGVkU2VsZWN0b3JfSW50ZXJwb2xhdGVkU3RhdGVtZW50JlN0YXRlbWVudCZJbnRlcnBvbGF0ZWROb2RlSW50ZXJwb2xhdGVkU3RhdGVtZW50X0ludGVycG9sYXRlZERlY2xhcmF0aW9uJkV4cHJlc3Npb24mSW50ZXJwb2xhdGVkTm9kZUludGVycG9sYXRlZERlY2xhcmF0aW9uTm8gbmFtZSBmb3IgdGhlIGludGVycG9sYXRlZCBub2RlUmVnRXhwTGl0ZXJhbEF3YWl0SnNCdWlsZGVyX2ZpbmRFeHByZXNzaW9uVGVtcGxhdGVfZmluZFN0YXRlbWVudFRlbXBsYXRldGhyb3cgbG9va3VwRXhwcmVzc2lvblRlbXBsYXRlZGVmaW5lRXhwcmVzc2lvblRlbXBsYXRlbG9va3VwU3RhdGVtZW50VGVtcGxhdGVkZWZpbmVTdGF0ZW1lbnRUZW1wbGF0ZWZvcmNlQ29weXVuY2FjaGVkU3RhdGVtZW50VGVtcGxhdGVfbGVnYWN5RXNjYXBlZFN0cmluZ2VzY2FwZWQKfCJ8CHwJfAt8DVxiVW5leHBlY3RlZCBtYXRjaDogYXNjaWlDYW5ub3QgYmUgYm90aCBVVEY4IGFuZCBBU0NJSXNpbmdsZVF1b3Rlc2RvdWJsZVF1b3Rlc290aGVyRXNjYXBlc3VucGFpcmVkU3Vycm9nYXRlc3J1bmV1c2VTaW5nbGVRdW90ZXNceGxlYWRpbmd0cmFpbGluZ19pc1VucGFpcmVkU3Vycm9nYXRlNDI5NDk2NTI0OF9pcnJlZ3VsYXJFc2NhcGVcJ2FkZFF1b3Rlc251bUFycmF5c3RyaW5nQXJyYXlwcm9wZXJ0eUNhbGxvYmplY3RMaXRlcmFsTWluaUpzUGFyc2VyRXJyb3JsYXN0UG9zaXRpb25uZXdsaW5lUG9zbGFzdExpbmVTdGFydHNwYWNlc1teXHRdRXJyb3IgaW4gTWluaUpzUGFyc2VyOgpeCk1pbmlKc1BhcnNlcmxhc3RDYXRlZ29yeWxhc3RUb2tlbnNraXBwZWROZXdsaW5laW50ZXJwb2xhdGVkVmFsdWVzQUxQSEFOVU1FUklDRE9UTFBBUkVOUlBBUkVOTEJSQUNFUkJSQUNFTFNRVUFSRVJTUVVBUkVRVUVSWVdISVRFU1BBQ0VDQVRFR09SSUVTSElHSEVTVF9QQVJTRV9CSU5BUllfUFJFQ0VERU5DRUJJTkFSWV9QUkVDRURFTkNFVU5BUllfT1BFUkFUT1JTT1BFUkFUT1JTX1RIQVRfTE9PS19MSUtFX0lERU5USUZJRVJTZ2V0VG9rZW5oYXNOYW1lZEhvbGVzaGFzUG9zaXRpb25hbEhvbGVzc2luZ2xlQ2hhckNhdGVnb3J5Y2F0ZWdvcnlUb1N0cmluZ2NhdFVua25vd246IGlzQXNzaWdubWVudHN5bWJvbGdldERlbGltaXRlZGN1cnJlbnRDb2RlVW50ZXJtaW5hdGVkIGxpdGVyYWxOdW1lcmljIGFuZCBoZXggZXNjYXBlcyBhcmUgbm90IGFsbG93ZWQgaW4gbGl0ZXJhbHNuZXh0UG9zaXRpb25VbnRlcm1pbmF0ZWQgY29tbWVudFVucGFyc2VhYmxlIG51bWJlcm5ld0NhdGJpbmFyeVByZWNlbmRlbmNlVW5rbm93biBvcGVyYXRvcmV4cGVjdENhdGVnb3J5YWNjZXB0Q2F0ZWdvcnlleHBlY3RTZW1pY29sb25hY2NlcHRTZW1pY29sb25FeHBlY3RlZCBTRU1JQ09MT05ObyBhdXRvbWF0aWMgc2VtaWNvbG9uIGluc2VydGlvbiBhdCBwcmVjZWRpbmcgbmV3bGluZWFjY2VwdFN0cmluZ3BhcnNlSGFzaGhvbGVOYW1lSG9sZXMgbXVzdCBhbGwgYmUgcG9zaXRpb25hbCBvciBuYW1lZC4gcGFyc2VPYmplY3RJbml0aWFsaXplcnBhcnNlQXNzaWdubWVudHJlZ2V4cEV4cGVjdGVkIHByaW1hcnkgZXhwcmVzc2lvbnBhcnNlVmFyaWFibGVEZWNsYXJhdGlvbnBhcnNlRnVuT25seSBzeW5jKiBpcyB2YWxpZCAtIHN5bmMgaXMgaW1wbGllZGludGVycG9sYXRlZExpdGVyYWxFeHBlY3RlZCBwcm9wZXJ0eSBuYW1lcGFyc2VNZW1iZXJnZXREb3RSaHNpbkJyYWNlc3BhcnNlQ2FsbFBhcmVudGhlc2VzIGFyZSByZXF1aXJlZCBmb3IgbmV3RXhwZWN0ZWQgYWxwaGFudW1lcmljIGlkZW50aWZpZXJwYXJzZVBvc3RmaXhwYXJzZVVuYXJ5SGlnaHBhcnNlVW5hcnlMb3dwYXJzZUJpbmFyeW1heFByZWNlZGVuY2VtaW5QcmVjZWRlbmNlbGFzdFN5bWJvbGhpZ2hlcnBhcnNlQ29uZGl0aW9uYWxwYXJzZVZhcmlhYmxlRGVjbGFyYXRpb25MaXN0Zmlyc3RWYXJpYWJsZWZpbmlzaFZhcmlhYmxlRGVjbGFyYXRpb25MaXN0cGFyc2VWYXJEZWNsYXJhdGlvbk9yRXhwcmVzc2lvblVucGFyc2VkIGp1bms6IHBhcnNlUmV0dXJucGFyc2VUaHJvd3BhcnNlQnJlYWtPckNvbnRpbnVlcGFyc2VJZlRoZW5FbHNlcGFyc2VGb3JwYXJzZUZ1bmN0aW9uRGVjbGFyYXRpb25wYXJzZVRyeXBhcnNlV2hpbGVwYXJzZURvcGFyc2VTd2l0Y2hDYXNlIG91dHNpZGUgc3dpdGNoLkRlZmF1bHQgb3V0c2lkZSBzd2l0Y2gucGFyc2VZaWVsZE5vdCBpbXBsZW1lbnRlZCBpbiBtaW5pIHBhcnNlcmNoZWNrRm9ySW50ZXJwb2xhdGVkU3RhdGVtZW50dGhyb3cgZXhwcmVzc2lvbiBtdXN0IGJlIG9uIHNhbWUgbGluZWZpbmlzaEZvcm9iamVjdEV4cHJlc3Npb25wYXJzZUNhdGNoZXhwZWN0ZWQgJ2ZpbmFsbHkncGFyc2VTd2l0Y2hDbGF1c2VleHBlY3RlZCBjYXNlIG9yIGRlZmF1bHRNaXNzaW5nIHdoaWxlIGFmdGVyIGRvIGJvZHkuX0ludGVybGVhdmVJdGVyYXRvcmlzTmV4dFNlcGFyYXRvcmlzSW5pdGlhbGl6ZWRfSW50ZXJsZWF2ZUl0ZXJhYmxlSmF2YVNjcmlwdFByaW50aW5nT3B0aW9uc3ByZWZlclNlbWljb2xvblRvTmV3bGluZUluTWluaWZpZWRPdXRwdXRpZGVudGl0eVJlbmFtZXJKYXZhU2NyaXB0UHJpbnRpbmdDb250ZXh0U2ltcGxlSmF2YVNjcmlwdFByaW50aW5nQ29udGV4dGRhbmdsaW5nRWxzZVZpc2l0b3Jsb2NhbE5hbWVyX2NoYXJDb3VudGluRm9ySW5pdGF0U3RhdGVtZW50QmVnaW5wZW5kaW5nU2VtaWNvbG9ucGVuZGluZ1NwYWNlaWRlbnRpZmllckNoYXJhY3RlclJlZ0V4cF5bYS16QS1aXzAtOSRdZXhwcmVzc2lvbkNvbnRpbnVhdGlvblJlZ0V4cF5bLSsoW11sYXN0QWRkZWRTdHJpbmdkZXRlcm1pbmVSZW5hbWVyZm9yY2VMaW5lbGluZU91dHNwYWNlT3V0bGFzdENoYXJDb2RlX2VtaXRvdXRMbm91dFNlbWljb2xvbkxub3V0SW5kZW50b3V0SW5kZW50TG5zdGFydE5vZGVhZGRUb05vZGVlbmROb2RldmlzaXRDb21tYVNlcGFyYXRlZGhhc1JlcXVpcmVkVHlwZW5ld0luRm9ySW5pdG5ld0F0U3RhdGVtZW50QmVnaW52aXNpdE5lc3RlZEV4cHJlc3Npb251bndyYXBCbG9ja0lmU2luZ2xlU3RhdGVtZW50YmxvY2tCb2R5bmVlZHNTZXBhcmF0aW9ubmVlZHNOZXdsaW5lYmxvY2tPdXRzaG91bGRJbmRlbnRibG9ja091dFdpdGhvdXRCcmFjZXNpZk91dG5lZWRzQnJhY2VzdGhlbldhc0Jsb2NrIGluZGVmYXVsdDpmdW5jdGlvbk91dHZhcnNyZXF1aXJlZFByZWNlZGVuY2VuZWVkc1BhcmVudGhlc2VzdmFyIHVzZUluZGVudGxhc3RXYXNCaWd0aGlzSXNCaWdfaXNTbWFsbEluaXRpYWxpemF0aW9uX291dHB1dEluY0RlY2FsaWFzcmlnaHRIYW5kU2lkZXJMZWZ0clJpZ2h0bmV3IGxlZnRQcmVjZWRlbmNlUmVxdWlyZW1lbnRyaWdodFByZWNlZGVuY2VSZXF1aXJlbWVudGxlZnRTcGFjZUZvcmdvdCBvcGVyYXRvcjogY2hhckNvZGVpc1ZhbGlkSmF2YVNjcmlwdElkInN1cGVyIiJjYXRjaCJmaWVsZFdpdGhRdW90ZXNvdXRwdXROdW1iZXJXaXRoUmVxdWlyZWRXaGl0ZXNwYWNlVW5yZWFjaGFibGVleGl0T25lTGluZXJNb2RlbmFtZU51bWJlcldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIEpTOiBhd2FpdCBPcmRlcmVkU2V0VmFyQ29sbGVjdG9yZW5hYmxlUmVuYW1pbmdkaXNhYmxlVmFyaWFibGVNaW5pZmljYXRpb25QYXR0ZXJuOjpub3JlbmFtaW5nOjplbmFibGVWYXJpYWJsZU1pbmlmaWNhdGlvblBhdHRlcm46OmRvcmVuYW1pbmc6OmZvckVhY2hWYXJmb3JFYWNoUGFyYW1jb2xsZWN0VmFyc0luRnVuY3Rpb25EYW5nbGluZ0Vsc2VWaXNpdG9yRm9yZ290IG5vZGU6IExvY2FsTmFtZXJvbGROYW1lZGVjbGFyZVBhcmFtZXRlcklkZW50aXR5TmFtZXJNaW5pZnlSZW5hbWVycGFyYW1ldGVyTnVtYmVyU3RhY2t2YXJpYWJsZU51bWJlclN0YWNrcGFyYW1ldGVyTnVtYmVydmFyaWFibGVOdW1iZXJMT1dFUl9DQVNFX0xFVFRFUlNMRVRURVJTRElHSVRTbnRoTGV0dGVyYXZvaWRSZW5hbWluZ2dldE5hbWVOdW1iZXJhbHBoYUNoYXJzbmFtZVNwYWNlU2l6ZVthLXpBLVpdW2EtekEtWjAtOV0qRW50ZXJFeGl0Tm9kZVRlbXBsYXRlTWFuYWdlcmV4cHJlc3Npb25UZW1wbGF0ZXNzdGF0ZW1lbnRUZW1wbGF0ZXNob2xlTmFtZXNfY29tcGlsZXdpdGhFeHByZXNzaW9uUmVzdWx0X2NoZWNrTm9QbGFjZWhvbGRlcnN3aXRoU3RhdGVtZW50UmVzdWx0V3JvbmcgbnVtYmVyIG9mIHRlbXBsYXRlIGFyZ3VtZW50cywgZ2l2ZW4gLCBzb3VyY2U6ICJ1bnVzZWROYW1lc1RlbXBsYXRlIGFyZ3VtZW50cyBoYXMgdW51c2VkIG1hcHBpbmdzOiBUZW1wbGF0ZSBhcmd1bWVudHMgaXMgbWlzc2luZyBtYXBwaW5ncyBmb3I6IEluc3RhbnRpYXRvckdlbmVyYXRvclZpc2l0b3JpZGVudGlmaWVyUkVtYWtlTnVsbGNvbnRhaW5zSW50ZXJwb2xhdGVkTm9kZXN2aXNpdE51bGxhYmxldmlzaXRTcGxheWFibGVVbmltcGxlbWVudGVkIEluc3RhbnRpYXRvckdlbmVyYXRvclZpc2l0b3IgZm9yIGNvbnZlcnRTdHJpbmdUb1ZhcmlhYmxlVXNlY29udmVydFN0cmluZ1RvVmFyaWFibGVEZWNsYXJhdGlvbkludGVycG9sYXRlZCB2YWx1ZSAjIGlzIG5vdCBhbiBFeHByZXNzaW9uOiAgaXMgbm90IGEgZGVjbGFyYXRpb246IHZpc2l0U3BsYXlhYmxlRXhwcmVzc2lvbnRvRXhwcmVzc2lvbiBpcyBub3QgYW4gRXhwcmVzc2lvbiBvciBMaXN0IG9mIEV4cHJlc3Npb25zOiAgaXMgbm90IGEgTGl0ZXJhbDogdG9QYXJhbWV0ZXIgaXMgbm90IGEgUGFyYW1ldGVyIG9yIExpc3Qgb2YgUGFyYW1ldGVyczogIGlzIG5vdCBhIHNlbGVjdG9yOiAgaXMgbm90IGEgU3RhdGVtZW50OiB2aXNpdFNwbGF5YWJsZVN0YXRlbWVudGEgU3RhdGVtZW50IG9yIExpc3Qgb2YgU3RhdGVtZW50czogaW5zdGFudGlhdG9yc3Zpc2l0SWZDb25kaXRpb25hbENvbXBpbGF0aW9udmlzaXRJZk5vcm1hbGNvbXBpbGVDb25kaXRpb25pcyBub3QgYW4gRXhwcmVzc2lvbjogbWFrZUNvbmRpdGlvbm1ha2VUaGVubWFrZU90aGVyd2lzZW1ha2VJbml0bWFrZVVwZGF0ZW1ha2VCb2R5bWFrZUxlZnRIYW5kU2lkZW1ha2VPYmplY3RUT0RPbWFrZUV4cHJlc3Npb25tYWtlQ2F0Y2htYWtlRmluYWxseW1ha2VEZWNsYXJhdGlvbm1ha2VLZXltYWtlQ2FzZXNtYWtlQ2FzZW1ha2VOYW1lbWFrZUZ1bmN0aW9uZGVjbGFyYXRpb25NYWtlcnNtYWtlVmFsdWVoYW5kbGVDYWxsT3JOZXdtYWtlVGFyZ2V0YXJndW1lbnRNYWtlcnNjYWxsQXJndW1lbnRzbWFrZUxlZnRtYWtlUmlnaHRtYWtlT3BlcmFuZG1ha2VSZWNlaXZlcm1ha2VTZWxlY3RvcnBhcmFtTWFrZXJzcGFydE1ha2Vyc21ha2VFbmNsb3NlZGVsZW1lbnRNYWtlcnNwcm9wZXJ0eU1ha2Vyc0ludGVycG9sYXRlZE5vZGVBbmFseXNpc2NvbnRhaW5zSW50ZXJwb2xhdGVkTm9kZUVxdWl2YWxlbmNlVmlzaXRvcmZhaWxBdHRlc3RWYWx1ZXN0ZXN0TGFiZWxzbGFiZWwxbGFiZWwydGVzdE5vZGVzdGVzdE5vZGVMaXN0c2xpc3QxbGlzdDJ0ZW1wbGF0ZU1hbmFnZXJ1bmRlZmVyanMuZGVidWdfRGVidWdQcmludGVyJkJhc2VWaXNpdG9yJkluZGVudGF0aW9uX0RlYnVnUHJpbnRlciZCYXNlVmlzaXRvciZJbmRlbnRhdGlvbiZUYWdnaW5nRGVidWdQcmludGVydmlzaXROb2RlV2l0aENoaWxkcmVuTGVuaWVudFByaW50aW5nQ29udGV4dHByZXR0eXByaW50aW5nQ29udGV4dGRhcnQyanMuX2VtYmVkZGVkX25hbWVzR0VUVEVSX1BSRUZJWFNFVFRFUl9QUkVGSVhDQUxMX1BSRUZJWENBTExfUFJFRklYMENBTExfUFJFRklYMUNBTExfUFJFRklYMkNBTExfUFJFRklYM0NBTExfUFJFRklYNENBTExfUFJFRklYNUNBTExfQ0FUQ0hfQUxMUkVGTEVDVEFCTEVDTEFTU19ERVNDUklQVE9SX1BST1BFUlRZUkVRVUlSRURfUEFSQU1FVEVSX1BST1BFUlRZREVGQVVMVF9WQUxVRVNfUFJPUEVSVFlDQUxMX05BTUVfUFJPUEVSVFlERUZFUlJFRF9BQ1RJT05fUFJPUEVSVFlPUEVSQVRPUl9BU19QUkVGSVhTSUdOQVRVUkVfTkFNRVJUSV9OQU1FVFlQRURFRl9UQUdGVU5DVElPTl9UWVBFX1RBR0ZVTkNUSU9OX1RZUEVfR0VORVJJQ19CT1VORFNfVEFHRlVOQ1RJT05fVFlQRV9WT0lEX1JFVFVSTl9UQUdGVU5DVElPTl9UWVBFX1JFVFVSTl9UWVBFX1RBR0ZVTkNUSU9OX1RZUEVfUkVRVUlSRURfUEFSQU1FVEVSU19UQUdGVU5DVElPTl9UWVBFX09QVElPTkFMX1BBUkFNRVRFUlNfVEFHRlVOQ1RJT05fVFlQRV9OQU1FRF9QQVJBTUVURVJTX1RBR0ZVVFVSRV9PUl9UQUdGVVRVUkVfT1JfVFlQRV9BUkdVTUVOVF9UQUdGVVRVUkVfQ0xBU1NfVFlQRV9OQU1FSVNfSU5ERVhBQkxFX0ZJRUxEX05BTUVOVUxMX0NMQVNTX1RZUEVfTkFNRU9CSkVDVF9DTEFTU19UWVBFX05BTUVGVU5DVElPTl9DTEFTU19UWVBFX05BTUVCT09MX1JFQ0lQRURPVUJMRV9SRUNJUEVJTlRfUkVDSVBFTlVNX1JFQ0lQRVNUUklOR19SRUNJUEVSVElfRklFTERfSVNkYXJ0T2JqZWN0Q29uc3RydWN0b3JkYXJ0Q2xvc3VyZUNvbnN0cnVjdG9yaXNDaGVja1Byb3BlcnR5VG9Kc0NvbnN0cnVjdG9yTmFtZWlzRnV0dXJlT3JUeXBlaXNWb2lkVHlwZWlzRHluYW1pY1R5cGVpc0pzSW50ZXJvcFR5cGVBcmd1bWVudHJhd1J0aVRvSnNDb25zdHJ1Y3Rvck5hbWVyYXdSdW50aW1lVHlwZWlzR2l2ZW5UeXBlUnRpUnRpVW5pdmVyc2VGaWVsZE5hbWVzZXZhbENhY2hlZUN0eXBlUnVsZXN0UnNoYXJlZEVtcHR5QXJyYXlzRUFUWVBFREVGX1BSRURJQ0FURV9QUk9QRVJUWV9OQU1FJCRpc1R5cGVkZWZUWVBFREVGX1RZUEVfUFJPUEVSVFlfTkFNRSR0eXBlZGVmVHlwZU5BVElWRV9TVVBFUkNMQVNTX1RBR19OQU1FJG5hdGl2ZVN1cGVyY2xhc3NUYWdTVEFUSUNfRlVOQ1RJT05fTkFNRV9QUk9QRVJUWV9OQU1FJHN0YXRpY19uYW1lTUVUQURBVEFUWVBFU0dFVF9UWVBFX0ZST01fTkFNRWdldFR5cGVGcm9tTmFtZU1BTkdMRURfR0xPQkFMX05BTUVTbWFuZ2xlZEdsb2JhbE5hbWVzTUFOR0xFRF9OQU1FU21hbmdsZWROYW1lc0lOVEVSQ0VQVE9SU19CWV9UQUdpbnRlcmNlcHRvcnNCeVRhZ0xFQUZfVEFHU0dFVF9JU09MQVRFX1RBR2dldElzb2xhdGVUYWdJU09MQVRFX1RBR2lzb2xhdGVUYWdESVNQQVRDSF9QUk9QRVJUWV9OQU1FZGlzcGF0Y2hQcm9wZXJ0eU5hbWVUWVBFX1RPX0lOVEVSQ0VQVE9SX01BUENVUlJFTlRfU0NSSVBUY3VycmVudFNjcmlwdERFRkVSUkVEX0xJQlJBUllfUEFSVFNkZWZlcnJlZExpYnJhcnlQYXJ0c0RFRkVSUkVEX1BBUlRfVVJJU2RlZmVycmVkUGFydFVyaXNERUZFUlJFRF9QQVJUX0hBU0hFU2RlZmVycmVkUGFydEhhc2hlc0lOSVRJQUxJWkVfTE9BREVEX0hVTktpbml0aWFsaXplTG9hZGVkSHVua0lTX0hVTktfTE9BREVEaXNIdW5rTG9hZGVkSVNfSFVOS19JTklUSUFMSVpFRGlzSHVua0luaXRpYWxpemVkREVGRVJSRURfSU5JVElBTElaRURkZWZlcnJlZEluaXRpYWxpemVkUlRJX1VOSVZFUlNFdHlwZVVuaXZlcnNlUFJFQ09NUElMRURwcmVjb21waWxlZEZJTklTSEVEX0NMQVNTRVNmaW5pc2hlZENsYXNzZXNBTExfQ0xBU1NFU2FsbENsYXNzZXNUWVBFX0lORk9STUFUSU9OU1RBVElDU0xJQlJBUklFU0xBWklFU2xhemllc0hhc0NhcHR1cmVkUGxhY2Vob2xkZXJzZW5jbG9zaW5nRnVuY3Rpb25zU2lkZUVmZmVjdHNWaXNpdG9yVGhyb3dCZWhhdmlvclZpc2l0b3JzZXF1ZW5jZV9pc0ZpcnN0SW50ZXJwb2xhdGVkUHJvcGVydHlSdW50aW1lVHlwZVVzZUtpbmRSdW50aW1lVHlwZVVzZURhdGFVbmV4cGVjdGVkIFJ1bnRpbWVUeXBlVXNlS2luZCBSdW50aW1lVHlwZVVzZURhdGEoa2luZD1yZWNlaXZlckdldD1yZWNlaXZlclR5cGU9LGFyZ3VtZW50R2V0PWFyZ3VtZW50PSxhcmd1bWVudFR5cGU9Y29tcHV0ZVJ1bnRpbWVUeXBlVXNlcmVjZWl2ZXJEYXRhaXNHZXRSdW50aW1lVHlwZWFzR2V0UnVudGltZVR5cGVpc0ludm9rZVRvU3RyaW5ncmVjZWl2ZXJHZXRhcmd1bWVudEdldG51bGxBd2FyZW90aGVyR2V0UnVudGltZVR5cGVvdGhlck51bGxBd2FyZU1pc3NpbmcgcmVjZWl2ZXJHZXQgaW4gTWlzc2luZyBhcmd1bWVudEdldCBpbiBEdXBsaWNhdGUgcHJvcGVydHkgZ2V0IGluIGRhcnQyanNfaW5mby5zcmMudXRpbGdyYXBoRnJvbUluZm8gIGluZm86IGRlcGVuZGVuY3kgZ3JhcGggaW5mb3JtYXRpb24gaXMgd29yayBpbiBwcm9ncmVzcyBhbmQgbWlnaHQgYmUgaW5jb21wbGV0ZWFkZEVkZ2VpbmZvUGF0aHNlZ21lbnRjdXJyZW50QmFzZXNlZ21lbnRTdHJpbmdfd3JpdGVJbnRfcmVhZEludF9wZW5kaW5nc2VyaWFsaXphdGlvbiBjeWNsZXMgbm90IHN1cHBvcnRlZF9TY29wZU1vZGVsQnVpbGRlciZWaXNpdG9yJlZhcmlhYmxlQ29sbGVjdG9yTWl4aW5TY29wZU1vZGVsQnVpbGRlcl9tb2RlbF9zY29wZVZhcmlhYmxlc19leGVjdXRhYmxlQ29udGV4dF9pc0luc2lkZUNsb3N1cmVfb3V0ZXJtb3N0Tm9kZV9tdXRhdGVkVmFyaWFibGVzX2NhcHR1cmVkVmFyaWFibGVzX2luVHJ5X2N1cnJlbnRTY29wZUluZm9faGFzVGhpc0xvY2FsX2JveENvdW50ZXJfY3VycmVudFR5cGVVc2FnZV9zY29wZXNDYXB0dXJlZEluQ2xvc3VyZU1hcF9jbG9zdXJlc1RvR2VuZXJhdGVDb21wbGV4aXR5TGV2ZWwuZGVmaW5pdGVseUxhenlDb21wbGV4aXR5TGV2ZWwuY29uc3RhbnRhdHRhY2hDYXB0dXJlZFNjb3BlVmFyaWFibGVzY2FwdHVyZWRWYXJpYWJsZXNGb3JTY29wZW5vZGVCb3hnZXRCb3hOYW1lZW50ZXJOZXdTY29wZXZpc2l0TmV3U2NvcGVvbGRTY29wZVZhcmlhYmxlc29sZEluVHJ5X21hcmtWYXJpYWJsZUFzVXNlZHZpc2l0SW5Db250ZXh0X2hhbmRsZVZhcmlhYmxlRGVjbGFyYXRpb25faW5DdXJyZW50Q29udGV4dF9yZWdpc3Rlck5lZWRzVGhpc191c2VUeXBlVmFyaWFibGVBc0xvY2FsdmlzaXROb2Rlc0luQ29udGV4dHZpc2l0SW52b2thYmxlb2xkSXNJbnNpZGVDbG9zdXJlb2xkRXhlY3V0YWJsZUNvbnRleHRzYXZlZFNjb3BlSW5mb3NhdmVkSXNJbnNpZGVDbG9zdXJlZnJlZVZhcmlhYmxlZnJlZVZhcmlhYmxlRm9yUnRpX2FuYWx5emVUeXBlVmFyaWFibGVvbGRDdXJyZW50VHlwZVVzYWdlbWFrZUVhZ2VyX2lzRmllbGRPckNvbnN0cnVjdG9yQ29tcGxleGl0eUxldmVsQ29tcGxleGl0eUxldmVsLnBvdGVudGlhbGx5RWFnZXJwb3RlbnRpYWxseUVhZ2VyZGVmaW5pdGVseUxhenlJbml0aWFsaXplckNvbXBsZXhpdHllYWdlcmxhenkmZmllbGRzPVtVbmV4cGVjdGVkIGNvbXBsZXhpdHkgbGV2ZWwgSW5pdGlhbGl6ZXJDb21wbGV4aXR5KE51bGxBd2FyZUV4cHJlc3Npb25zeW50aGV0aWNWYXJpYWJsZV9GcmVlVmFyaWFibGVWaXNpdG9yRnJlZVZhcmlhYmxlVmlzaXRvci5kZWZhdWx0VHlwZU5vZGVub2RlVG9EZWJ1Z1N0cmluZ3RleHRMZW5ndGhibG9ja1RleHRuYW1lZE9yZGVyaW5nbmF0aXZlT3JkZXJpbmdjb21wdXRlU291cmNlU3BhbkZyb21UcmVlTm9kZUFzeW5jIG1hcmtlciBnZXROdWxsQXdhcmVFeHByZXNzaW9uZ2V0RGVmZXJyZWRJbXBvcnRjb250YWluc0ZyZWVWYXJpYWJsZXNTdGF0aWNUeXBlQ2FjaGVzdGF0aWMtdHlwZS1jYWNoZV9leHByZXNzaW9uVHlwZXNfZm9ySW5JdGVyYXRvclR5cGVzZXhwcmVzc2lvblR5cGVzZm9ySW5JdGVyYXRvclR5cGVzY29tcGlsZXIuc3JjLmluZmVycmVyLnR5cGVfZ3JhcGhfbm9kZXNBcmd1bWVudHNUeXBlc1R5cGVJbmZvcm1hdGlvbl9hc3NpZ25tZW50c2lzU3RhYmxlX3N0YXRpY0hhc2hDb2RlU1RPUF9UUkFDS0lOR19BU1NJR05NRU5UU19NQVJLRVJub0Fzc2lnbm1lbnRzdW50cmFja2Vkd2l0aEFzc2lnbm1lbnRzY29udGV4dE1lbWJlcm1pZ2h0UmVzdW1lYWRkVXNlcmFyZUFzc2lnbm1lbnRzVHJhY2tlZHNhZmVUeXBlcmVtb3ZlQW5kQ2xlYXJSZWZlcmVuY2VzX3RvU3RydWN0dXJlZFRleHRBcHBseWFibGVUeXBlSW5mb3JtYXRpb25QbGFjZWhvbGRlclR5cGVJbmZvcm1hdGlvbkNhbm5vdCB2aXNpdCBwbGFjZWhvbGRlckNhbm5vdCByZWZpbmUgcGxhY2Vob2xkZXJQbGFjZWhvbGRlciBbUGFyYW1ldGVyQXNzaWdubWVudHNFbGVtZW50VHlwZUluZm9ybWF0aW9uZGlzYWJsZUluZmVyZW5jZUZvckNsb3N1cmVzX3dpdGhBc3NpZ25tZW50c19NZW1iZXJUeXBlSW5mb3JtYXRpb24mRWxlbWVudFR5cGVJbmZvcm1hdGlvbiZBcHBseWFibGVUeXBlSW5mb3JtYXRpb25NZW1iZXJUeXBlSW5mb3JtYXRpb25fY2FsbGVyc2FkZENhbGxyZW1vdmVDYWxsY2FsbHNfY29tcHV0ZUlzQ2FsbGVkT25jZWlzQ2FsbGVkT25jZSBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkLmlzQ2xvc3VyaXplZGhhbmRsZVNwZWNpYWxDYXNlc19oYW5kbGVGdW5jdGlvbkNhc2Vwb3RlbnRpYWxseU5hcnJvd1R5cGVfcG90ZW50aWFsbHlOYXJyb3dUeXBldmlzaXRNZW1iZXJUeXBlSW5mb3JtYXRpb25GaWVsZFR5cGVJbmZvcm1hdGlvbl9maWVsZEdldHRlclR5cGVJbmZvcm1hdGlvbl9nZXR0ZXJTZXR0ZXJUeXBlSW5mb3JtYXRpb25fc2V0dGVyTWV0aG9kVHlwZUluZm9ybWF0aW9uX21ldGhvZEZhY3RvcnlDb25zdHJ1Y3RvclR5cGVJbmZvcm1hdGlvbl9jb25zdHJ1Y3RvckdlbmVyYXRpdmVDb25zdHJ1Y3RvclR5cGVJbmZvcm1hdGlvblBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbl9wYXJhbWV0ZXJfaXNJbnN0YW5jZU1lbWJlclBhcmFtZXRlcl9pc0Nsb3N1cmVQYXJhbWV0ZXJfaXNJbml0aWFsaXppbmdGb3JtYWxfaXNUZWFyT2ZmQ2xvc3VyZVBhcmFtZXRlcnZpc2l0UGFyYW1ldGVyVHlwZUluZm9ybWF0aW9uUGFyYW1ldGVyIFBhcmFtZXRlclR5cGVJbmZvcm1hdGlvbi5nZXRJbmZlcnJlZFNpZ25hdHVyZUNhbGxUeXBlZm9ySW5fQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb24mVHlwZUluZm9ybWF0aW9uJkFwcGx5YWJsZVR5cGVJbmZvcm1hdGlvbkNhbGxTaXRlVHlwZUluZm9ybWF0aW9uX2NhbGxDYWxsIHNpdGUgU3RhdGljQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb25fZ2V0Q2FsbGVkVHlwZUluZm9pc1N5bnRoZXNpemVkX2dldENhbGxlZFR5cGVJbmZvV2l0aFNlbGVjdG9ydmlzaXRTdGF0aWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbkR5bmFtaWNDYWxsU2l0ZVR5cGVJbmZvcm1hdGlvbl9jYWxsVHlwZV9oYXNDbG9zdXJlQ2FsbFRhcmdldHNfY29uY3JldGVUYXJnZXRzY29tcHV0ZVR5cGVkU2VsZWN0b3J0YXJnZXRzSW5jbHVkZUNvbXBsZXhOb1N1Y2hNZXRob2RoYW5kbGVJbnRyaXNpZmllZFNlbGVjdG9ydWludDMxSW1wbGVtZW50YXRpb25pc1Bvc2l0aXZlSW50dHJ5TGF0ZXJub25OdWxsRW1wdHlUeXBlaGFzTm9Bcmd1bWVudHNvbGRUYXJnZXRzam9pblR5cGVNYXNrc0RpY3Rpb25hcnkgbG9va3VwIGZvciAgeWllbGRzICB5aWVsZHMgW251bGxdLk1hcCBsb29rdXAgZm9yIHZpc2l0RHluYW1pY0NhbGxTaXRlVHlwZUluZm9ybWF0aW9uQ2xvc3VyZUNhbGxTaXRlVHlwZUluZm9ybWF0aW9uQ2Fubm90IGNvbXB1dGUgY2FsbGVlcyBvZiBhIGNsb3N1cmUgY2FsbC5DbG9zdXJlIGNhbGwgdmlzaXRDbG9zdXJlQ2FsbFNpdGVUeXBlSW5mb3JtYXRpb25Db25jcmV0ZVR5cGVJbmZvcm1hdGlvbk5vdCBzdXBwb3J0ZWR2aXNpdENvbmNyZXRlVHlwZUluZm9ybWF0aW9uU3RyaW5nTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbiB2YWx1ZSB2aXNpdFN0cmluZ0xpdGVyYWxUeXBlSW5mb3JtYXRpb25Cb29sTGl0ZXJhbFR5cGVJbmZvcm1hdGlvbnZpc2l0Qm9vbExpdGVyYWxUeXBlSW5mb3JtYXRpb25OYXJyb3dUeXBlSW5mb3JtYXRpb250eXBlQW5ub3RhdGlvbm5hcnJvd2VkVHlwZUFOT01BTFkgV0FSTklORzogbmFycm93ZWQgIHZpYSBOYXJyb3cgdG8gdmlzaXROYXJyb3dUeXBlSW5mb3JtYXRpb25JbmZlcnJlZFR5cGVJbmZvcm1hdGlvbnBhcmVudFR5cGVfTGlzdFR5cGVJbmZvcm1hdGlvbiZUeXBlSW5mb3JtYXRpb24mVHJhY2VkVHlwZUluZm9ybWF0aW9uX2Zsb3dzSW50b2Zsb3dzSW50b2FkZEZsb3dzSW50b1RhcmdldHNMaXN0VHlwZUluZm9ybWF0aW9uaW5mZXJyZWRMZW5ndGhMaXN0IHR5cGUgdmlzaXRMaXN0VHlwZUluZm9ybWF0aW9uRWxlbWVudEluQ29udGFpbmVyVHlwZUluZm9ybWF0aW9uRWxlbWVudCBpbiBjb250YWluZXIgdmlzaXRFbGVtZW50SW5Db250YWluZXJUeXBlSW5mb3JtYXRpb25fU2V0VHlwZUluZm9ybWF0aW9uJlR5cGVJbmZvcm1hdGlvbiZUcmFjZWRUeXBlSW5mb3JtYXRpb25TZXRUeXBlSW5mb3JtYXRpb25TZXQgdHlwZSB2aXNpdFNldFR5cGVJbmZvcm1hdGlvbkVsZW1lbnRJblNldFR5cGVJbmZvcm1hdGlvbkVsZW1lbnQgaW4gc2V0IHZpc2l0RWxlbWVudEluU2V0VHlwZUluZm9ybWF0aW9uX01hcFR5cGVJbmZvcm1hdGlvbiZUeXBlSW5mb3JtYXRpb24mVHJhY2VkVHlwZUluZm9ybWF0aW9uTWFwVHlwZUluZm9ybWF0aW9uX2FsbEtleXNBcmVTdHJpbmdzaW5EaWN0aW9uYXJ5TW9kZW5vbk51bGxuZXdJbmZva2V5U3RyaW5nbmV3SW5mb3Nub3Qgc3VwcG9ydGVkdmlzaXRNYXBUeXBlSW5mb3JtYXRpb250b1R5cGVNYXNrTWFwICAoSzosIFY6KSBjb250ZW50cyBLZXlJbk1hcFR5cGVJbmZvcm1hdGlvbnZpc2l0S2V5SW5NYXBUeXBlSW5mb3JtYXRpb25LZXkgaW4gTWFwIFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb252aXNpdFZhbHVlSW5NYXBUeXBlSW5mb3JtYXRpb25WYWx1ZSBpbiBNYXAgUGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbmJyYW5jaE5vZGVpc1RyeVBoaSggWyAuLi4gXXZpc2l0UGhpRWxlbWVudFR5cGVJbmZvcm1hdGlvbl9DbG9zdXJlVHlwZUluZm9ybWF0aW9uJlR5cGVJbmZvcm1hdGlvbiZBcHBseWFibGVUeXBlSW5mb3JtYXRpb25DbG9zdXJlVHlwZUluZm9ybWF0aW9uQ2xvc3VyZSB2aXNpdENsb3N1cmVUeXBlSW5mb3JtYXRpb25UcmFjZWRUeXBlSW5mb3JtYXRpb25Bd2FpdFR5cGVJbmZvcm1hdGlvbl9ub2RldmlzaXRBd2FpdFR5cGVJbmZvcm1hdGlvbllpZWxkVHlwZUluZm9ybWF0aW9uWWllbGR2aXNpdFlpZWxkVHlwZUluZm9ybWF0aW9uVHlwZUluZm9ybWF0aW9uVmlzaXRvcnZhbGlkQ2FsbFR5cGVVbmV4cGVjdGVkIGNhbGwgdHlwZSBfbmFycm93VHlwZW90aGVyVHlwZVN0YXRpY1R5cGVQcm92aWRlckNsYXNzVHlwZVZhcmlhYmxlQWNjZXNzX3RydXN0VHlwZV9jaGVja1R5cGVfY2hlY2tCb29sQ29udmVyaW9ucGFyYW1ldGVyQ2hlY2tQb2xpY3ljb25kaXRpb25DaGVja1BvbGljeXJlYWRBc1Byb3BlcnR5cmVhZEFzUGFyYW1ldGVyVW5leHBlY3RlZCB0eXBlIHZhcmlhYmxlIGluIHN0YXRpYyBjb250ZXh0LlVuZXhwZWN0ZWQgdHlwZSB2YXJpYWJsZSBhY2Nlc3M6IGVudmlyb25tZW50QWNjZXNzX2J1aWxkRW52aXJvbm1lbnRGb3JUeXBldXNlc0luc3RhbmNlUGFyYW1ldGVyc3Byb2Nlc3NUeXBlVmFyaWFibGVzaW5nbGV0b25TdHJ1Y3R1cmVzaW5nbGV0b25UdXBsZWZ1bGxTdHJ1Y3R1cmVidWlsZEFzQ2hlY2tyZWlmaWVkVHlwZXJlZmluZWRNYXNrX0Vudmlyb25tZW50RXhwcmVzc2lvbkFuZFN0cnVjdHVyZUtlcm5lbFR5cGVHcmFwaEJ1aWxkZXJfaW5mZXJyZXJfYW5hbHl6ZWRNZW1iZXJfYW5hbHl6ZWROb2RlX2luR2VuZXJhdGl2ZUNvbnN0cnVjdG9yX3N0YXRlSW50ZXJuYWxfc3RhdGVBZnRlcldoZW5UcnVlSW50ZXJuYWxfc3RhdGVBZnRlcldoZW5GYWxzZUludGVybmFsX3NpZGVFZmZlY3RzQnVpbGRlcl9icmVha3NGb3JfY29udGludWVzRm9yX2NhcHR1cmVkQW5kQm94ZWRfc3RhdGljVHlwZVByb3ZpZGVyX2FjY3VtdWxhdGVJc0NoZWNrc19sb29wTGV2ZWxjYXB0dXJlZEFuZEJveGVkX3N0YXRlaW5HZW5lcmF0aXZlQ29uc3RydWN0b3Jfc3RhdGVBZnRlcldoZW5UcnVlX3N0YXRlQWZ0ZXJXaGVuRmFsc2Vfc2V0U3RhdGVBZnRlcndoZW5UcnVld2hlbkZhbHNlX2lzSW5DbGFzc09yU3ViY2xhc3NfY2hlY2tJZkV4cG9zZXNUaGlzaXNUaGlzRXhwb3NlZG1hcmtUaGlzQXNFeHBvc2VkaXNJbmNvbXBhdGlibGVJbnZva2VhbmFseXplZE1ldGhvZGNvbmRpdGlvbkNvbnRleHRvbGRBY2N1bXVsYXRlSXNDaGVja3NoYW5kbGVQYXJhbWV0ZXJzdXBkYXRlRmllbGRhbmFseXplQXJndW1lbnRzaGFuZGxlQ29uc3RydWN0b3JJbnZva2VzZWVuUmV0dXJuT3JUaHJvd2NyZWF0ZUluc3RhbnRpYXRpb25UeXBlSW5mb3JtYXRpb25VbmhhbmRsZWQgZXhwcmVzc2lvbjogVW5oYW5kbGVkIHN0YXRlbWVudDogY3JlYXRlTnVsbFR5cGVJbmZvcm1hdGlvbmFib3J0c3N0YXRlQmVmb3JlaGFuZGxlQ29uZGl0aW9uc3RhdGVBZnRlck1lc3NhZ2VtZXJnZURpYW1vbmRGbG93c2VlbkJyZWFrT3JDb250aW51ZV9zZXR1cEJyZWFrc0FuZENvbnRpbnVlc21lcmdlQWZ0ZXJCcmVha3NfZ2V0QnJlYWtzX2NsZWFyQnJlYWtzQW5kQ29udGludWVzY29udGludWVUYXJnZXRzc3RhdGVCZWZvcmVDYXNlc3RhdGVBZnRlckNhc2VtZXJnZUFsbHN0YXRlc1RvTWVyZ2VoYXNEZWZhdWx0Q2FzZWtlZXBPd25Mb2NhbHNjcmVhdGVMaXN0VHlwZUluZm9ybWF0aW9uZWxlbWVudFR5cGVzYWxsb2NhdGVQaGlhZGRQaGlJbnB1dGNvbnRhaW5lclR5cGVhbGxvY2F0ZUxpc3RjcmVhdGVTZXRUeXBlSW5mb3JtYXRpb25hbGxvY2F0ZVNldGNyZWF0ZU1hcFR5cGVJbmZvcm1hdGlvbmVudHJ5VHlwZXNrZXlUeXBlc3ZhbHVlVHlwZXNhbGxvY2F0ZU1hcG1hcmtJbml0aWFsaXphdGlvbkFzSW5kZWZpbml0ZWNyZWF0ZUJvb2xUeXBlSW5mb3JtYXRpb25ib29sTGl0ZXJhbFR5cGVjcmVhdGVJbnRUeXBlSW5mb3JtYXRpb25nZXRDb25jcmV0ZVR5cGVGb3JjcmVhdGVEb3VibGVUeXBlSW5mb3JtYXRpb25jcmVhdGVTdHJpbmdUeXBlSW5mb3JtYXRpb25zdHJpbmdMaXRlcmFsVHlwZWNyZWF0ZVN5bWJvbExpdGVyYWxUeXBlSW5mb3JtYXRpb25jcmVhdGVUeXBlTGl0ZXJhbEluZm9ybWF0aW9uVW5leHBlY3RlZCBwYXJhbWV0ZXIgZGVjbGFyYXRpb24uTWlzc2luZyB0eXBlIGluZm9ybWF0aW9uIGZvciBoYW5kbGVTdGF0aWNJbnZva2VuYXJyb3dUeXBlX3BvdGVudGlhbGx5QWRkTnVsbENoZWNrbmV3VHlwZWRTZWxlY3RvcmhhbmRsZUR5bmFtaWNJbnZva2VfaGFuZGxlRHluYW1pY3NlbGVjdG9yTmVlZHNVcGRhdGVoYW5kbGVEeW5hbWljR2V0aGFuZGxlRHluYW1pY1NldGN1cnJlbnRNYXNrbW92ZU5leHRNYXNraXRlcmF0b3JTZWxlY3Rvcml0ZXJhdG9yTWFza2N1cnJlbnRUeXBlX2dldExvb3BCYWNrRWRnZXNsb2dpY19maW5kTGVuZ3RoaXNWYWxpZEludF9pc0NvbnN0cnVjdG9yT2ZUeXBlZEFycmF5U3ViY2xhc3Nhcmd1bWVudHNUeXBlc2hhbmRsZUNsb3N1cmVDYWxsaGFuZGxlRm9yZWlnbkludm9rZVVuZXhwZWN0ZWQgc3RhdGljIGludm9jYXRpb24gdGFyZ2V0OiBjcmVhdGVTdGF0aWNHZXRUeXBlSW5mb3JtYXRpb250eXBlZE1hc2tfcG90ZW50aWFsbHlBZGRJc0NoZWNrc3RhdGVBZnRlckNoZWNrV2hlblRydWVzdGF0ZUFmdGVyQ2hlY2tXaGVuRmFsc2VuYXJyb3dMb2NhbHN0YXRlQWZ0ZXJDb25kaXRpb25XaGVuVHJ1ZXN0YXRlQWZ0ZXJDb25kaXRpb25XaGVuRmFsc2VzdGF0ZUFmdGVyVGhlbnN0YXRlQWZ0ZXJFbHNlc3RhdGVBZnRlck9wZXJhbmRXaGVuVHJ1ZXN0YXRlQWZ0ZXJPcGVyYW5kV2hlbkZhbHNlc3RhdGVBZnRlckxlZnRXaGVuVHJ1ZXN0YXRlQWZ0ZXJMZWZ0V2hlbkZhbHNlc3RhdGVBZnRlclJpZ2h0V2hlblRydWVzdGF0ZUFmdGVyUmlnaHRXaGVuRmFsc2VzdGF0ZUFmdGVyV2hlblRydWVzdGF0ZUFmdGVyV2hlbkZhbHNlc3RhdGVBZnRlclVuZXhwZWN0ZWQgbG9naWNhbCBvcGVyYXRvciAnZmlyc3RUeXBlc2Vjb25kVHlwZWFsbG9jYXRlRGlhbW9uZFBoaWhhbmRsZUxvY2FsRnVuY3Rpb25sb2NhbEZ1bmN0aW9uVHlwZWNsb3N1cmVTdGF0ZXN0YXRlQWZ0ZXJCb2R5bWVyZ2VGbG93c3RhdGVCZWZvcmVDYXRjaHN0YXRlQWZ0ZXJDYXRjaGhhbmRsZVN1cGVyTm9TdWNoTWV0aG9kTm8gbWVtYmVyIGZvdW5kIGZvciBzdXBlciBwcm9wZXJ0eSBnZXQ6IE5vIG1lbWJlciBmb3VuZCBmb3Igc3VwZXIgcHJvcGVydHkgc2V0OiBVbmV4cGVjdGVkIHN1cGVyIGludm9jYXRpb24gdGFyZ2V0OiBUeXBlSW5mb3JtYXRpb25Db25zdGFudFZpc2l0b3JVbmV4cGVjdGVkIHVuZXZhbHVhdGVkIGNvbnN0YW50OiBSZWZpbmVtZW50TG9jYWxTdGF0ZV9maWVsZHNfdHJ5QmxvY2tpbml0aWFsY2hpbGRQYXRoZGVlcENvcHlPZmZpZWxkU2NvcGVpc0luZGVmaW5pdGV0aGVuQnJhbmNoZWxzZUJyYW5jaGluUGxhY2VzdGF0ZXNhbGxCcmFuY2hlc0Fib3J0TG9jYWxTdGF0ZSgpIFsgIGxvY2FsczoKXWxvY2Fscz0sZmllbGRzPSxzZWVuUmV0dXJuT3JUaHJvdyxzZWVuQnJlYWtPckNvbnRpbnVlY29tcGlsZXIuc3JjLmluZmVycmVyLmNsb3N1cmVfdHJhY2VyQ2xvc3VyZVRyYWNlclZpc2l0b3J0cmFjZWRFbGVtZW50c19jYWxsc1RvQW5hbHl6ZVRyYWNpbmcgYWJzdHJhY3QgbWV0aG9kczogX2FuYWx5emVDYWxsX3RhZ0FzRnVuY3Rpb25BcHBseVRhcmdldCBtaWdodCBiZSBwYXNzZWQgdG8gYXBwbHk6IF9yZWdpc3RlckNhbGxGb3JMYXRlckFuYWx5c2lzZnVuY3Rpb25FbGVtZW50Y3VycmVudFVzZXJiYWlsb3V0UGFzc2VkIHRvIGEgY2xvc3VyZWNhbGxlZFVzZWQgaW4gSlMgX2NoZWNrSWZGdW5jdGlvbkFwcGx5c3RhdGljIGNhbGxfY2hlY2tJZkN1cnJlbnRVc2VyZHluYW1pYyBjYWxsYWRkTmV3RXNjYXBlSW5mb3JtYXRpb25TdGF0aWNUZWFyT2ZmQ2xvc3VyZVRyYWNlclZpc2l0b3J0cmFjZWRFbGVtZW50Y29tcGlsZXIuc3JjLmluZmVycmVyLmRlYnVnVkVSQk9TRVBSSU5UX1NVTU1BUllBTk9NQUxZX1dBUk5QUklOVF9HUkFQSFBSSU5UX0dSQVBIX0FMTF9OT0RFU2xvY2Fsc19oYW5kbGVySXRlcmFibGVNaXhpbl9sZXZlbGNvcHlPZlVuZXhwZWN0ZWQgYmxvY2sgIGZvciBWYXJpYWJsZVNjb3BlLnRyeUJsb2NrY29tbW9uUGFyZW50Zm9yRWFjaExvY2FsVW50aWxTY29wZV9mb3JFYWNoTG9jYWxVbnRpbFNjb3Blc2VlbkxvY2Fsc1Njb3BlIG5vdCBmb3VuZDogCm9yaWdpbj1zY29wZT1mb3JFYWNoTG9jYWxWYXJpYWJsZVNjb3BlKCAgbGV2ZWw6ICBjb3B5T2Y6VmFyaWFibGVTY29wZSggIHRyeUJsb2NrOiAgIHZhcmlhYmxlczogICAgICAgIHBhcmVudDogICAgIHJlc3R9IEZpZWxkSW5pdGlhbGl6YXRpb25TY29wZWludGVybmFsRnJvbXRoZW5TY29wZWVsc2VTY29wZW90aGVyU2NvcGV7IHBvc2l0aW9uYWwgPSAsIG5hbWVkID0gIH1Bcmd1bWVudHNUeXBlcy5oYXNoQ29kZUFyZ3VtZW50c1R5cGVzSXRlcmF0b3JfaXRlcmF0ZVBvc2l0aW9uYWxpdGVyYXRlZV9jdXJyZW50SXRlcmF0b3JMb2NhbHNIYW5kbGVyTm8gY29tbW9uIHBhcmVudCBmb3IKMToyOk5vbi1lbXB0eSBjb21tb24gcGFyZW50IGZvcgpteVR5cGVtZXJnZUxvY2FsZWxzZVR5cGVEaWZmIGNvbW1vbiBwYXJlbnQgZm9yCgoyOmNvbW1vbjptZXJnZWRhbGxvY2F0ZUxvb3BQaGlMb2NhbHNIYW5kbGVyKGNvbXBpbGVyLnNyYy5pbmZlcnJlci5saXN0X3RyYWNlckxpc3RUcmFjZXJWaXNpdG9ycG9zaXRpb25hbExlbmd0aFVzZWQgaW4gYSBub3Qtb2sgc2VsZWN0b3Jva0xpc3RTZWxlY3RvcnNTZXRjaGVja011dGFibGVjaGVja0dyb3dhYmxlZG9Ob3RDaGFuZ2VMZW5ndGhTZWxlY3RvcnNTZXRjb21waWxlci5zcmMuaW5mZXJyZXIubWFwX3RyYWNlck1hcFRyYWNlclZpc2l0b3JBZGRpbmcgbWFwIHdpdGggdW5rbm93biB0eXBlaW5mbyB0byBjdXJyZW50IG1hcE1hcCB1c2VkIGluIGEgbm90LW9rIHNlbGVjdG9yIFtva01hcFNlbGVjdG9yc1NldGNvbXBpbGVyLnNyYy5pbmZlcnJlci5zZXRfdHJhY2VyU2V0VHJhY2VyVmlzaXRvckFkZGluZyBpdGVyYWJsZSB3aXRoIHVua25vd24gdHlwZWluZm8gdG8gY3VycmVudCBzZXRTZXQgdXNlZCBpbiBhIG5vdC1vayBzZWxlY3RvciBbb2tTZXRTZWxlY3RvclNldGRhcnQyanMuaW5mZXJyZXIudHlwZV9ncmFwaF9kdW1wVHlwZUdyYXBoRHVtcG91dHB1dERpcnR5cGVncmFwaGFzc2lnbm1lbnRzQmVmb3JlQW5hbHlzaXNhc3NpZ25tZW50c0JlZm9yZVRyYWNpbmd1c2VkRmlsZW5hbWVzYWxsVHlwZXNmaWxlbmFtZUZyb21FbGVtZW50YWRkTWlzc2luZ05vZGVzZ2V0LXNldC0tY29uc3RydWN0b3JzZXJpYWxOdW1iZXJfR3JhcGhHZW5lcmF0b3Jub2RlSWRlc2NhcGVSZWdleHBbInt9PD58XWRlZmF1bHROb2RlQ29sb3IjZWVmZmVlcGhpQ29sb3IjZWVmZmZmbmFycm93Q29sb3JjYWxsQ29sb3IjZmZmZmVldW5jaGFuZ2VkRWRnZWFkZGVkRWRnZWdyZWVuNHJlbW92ZWRFZGdlcmVkM3RlbXBvcmFyeUVkZ2VvcmFuZ2VnZXROb2RlYXBwZW5kZGlncmFwaCB7c2hvcnRlbmdldEZyZXNoSWRlc2NhcGVMYWJlbGRzdGRzdFRleHRDb25jcmV0ZXw8cmV0dXJuVHlwZT4gIFtzaGFwZT1yZWNvcmQsc3R5bGU9ZG90dGVkLGxhYmVsPSIiXSBbY29sb3I9IjpyZXR1cm5UeXBlIC0+IGdldFN0eWxlRm9yTm9kZXN0eWxlPWRvdHRlZHN0eWxlPWZpbGxlZCxmaWxsY29sb3I9ImFwcGVuZERldGFpbHMKKHJldHVybiB2YWx1ZSkKKGZyb20gPGE+IHt7fXwgW3NoYXBlPXJlY29yZCxsYWJlbD0iIixvcmlnaW5hbFNldHRyYWNlclNldE5hcnJvdwpQaGkgRWxlbWVudEluQ29udGFpbmVyRWxlbWVudEluU2V0S2V5SW5NYXBWYWx1ZUluTWFwU3RyaW5nTGl0ZXJhbAoiQm9vbExpdGVyYWwKaGFuZGxlQ2FsbGFyZ05hbWVDbG9zdXJlQ2FsbFNpdGVTdGF0aWNDYWxsU2l0ZUR5bmFtaWNDYWxsU2l0ZW9iak1lbWJlcgpDbG9zdXJlCkF3YWl0CllpZWxkClR5cGVTeXN0ZW1TdHJhdGVneVR5cGVTeXN0ZW1fb3JkZXJlZFR5cGVJbmZvcm1hdGlvbnNudWxsVHlwZUNhY2hlaW50VHlwZUNhY2hldWludDMyVHlwZUNhY2hldWludDMxVHlwZUNhY2hlcG9zaXRpdmVJbnRUeXBlQ2FjaGVkb3VibGVUeXBlQ2FjaGVudW1UeXBlQ2FjaGVib29sVHlwZUNhY2hlZnVuY3Rpb25UeXBlQ2FjaGVsaXN0VHlwZUNhY2hlY29uc3RMaXN0VHlwZUNhY2hlZml4ZWRMaXN0VHlwZUNhY2hlZ3Jvd2FibGVMaXN0VHlwZUNhY2hlc2V0VHlwZUNhY2hlY29uc3RTZXRUeXBlQ2FjaGVtYXBUeXBlQ2FjaGVjb25zdE1hcFR5cGVDYWNoZXN0cmluZ1R5cGVDYWNoZXR5cGVUeXBlQ2FjaGVkeW5hbWljVHlwZUNhY2hlYXN5bmNGdXR1cmVUeXBlQ2FjaGVzeW5jU3Rhckl0ZXJhYmxlVHlwZUNhY2hlYXN5bmNTdGFyU3RyZWFtVHlwZUNhY2hlQWxyZWFkeSBjb25zdHJ1Y3RpbmcgZ3JhcGggZm9yIF9pc05vbk51bGxOYXJyb3dVbmV4cGVjdGVkIGFic3RyYWN0IG1lbWJlciBfZ2V0SW5mZXJyZWRUeXBlT2ZNZW1iZXJpc0VsZW1lbnRJbmZlcnJlZGVsZW1lbnRUeXBlTWFza2tleVR5cGVNYXNrdmFsdWVUeXBlTWFza2tleVR5cGVJbmZvdmFsdWVUeXBlSW5mb2ZpcnN0SW5wdXRzZWNvbmRJbnB1dF9hZGRQaGlpc0R5bmFtaWNJbmdvcmluZ051bGxtYXlCZU51bGxzc2EudHJhY2VyX0hUcmFjZXImSEdyYXBoVmlzaXRvciZUcmFjZXJVdGlsYWRkUHJlZGVjZXNzb3JzICJCYWRkU3VjY2Vzc29yc2FkZEluc3RydWN0aW9uc3N0cmluZ2lmaWVyYmNpY2hhbmdlc3RlbXBvcmFyeUlkaW5zdHJ1Y3Rpb25TdHJpbmcgPHxACmZyb21fYmNpdG9fYmNpeGhhbmRsZXJzcGhpSWRpbnB1dElkcyBbIEhJUkhJbnN0cnVjdGlvblN0cmluZ2lmaWVyTGF0ZVZhbHVlOiBvcGNvZGVBYnM6IEFkZEJpdEFuZEJpdE5vdDogQml0T3JCaXRYb3JsZW5ndGhJZGluZGV4SWRCb3VuZHNDaGVjazogbGVuZ3RoID0gLCBpbmRleCA9IEJyZWFrIDogKEJCcmVhazogKEJDb25zdGFudDogQ29udGludWUgQ29udGludWU6IChCaGFuZGxlR2VuZXJpY0ludm9rZUNyZWF0ZUNyZWF0ZUJveERpdmlkZUV4aXRGaWVsZEdldDogTnVsbENoZWNrIEZpZWxkR2V0OiB2YWx1ZUlkRmllbGRTZXQ6IHJlY2VpdmVySWRSZWFkTW9kaWZ5V3JpdGU6ID0gR2V0TGVuZ3RoOiBsb2NhbE5hbWVMb2NhbEdldDogTG9jYWxTZXQ6IEdvdG86IChCR3JlYXRlckdyZWF0ZXJFcXVhbElkZW50aXR5Y29uZGl0aW9uSWRJZiAoKTogKEIpIGVsc2UgKEJpbnZva2VUeXBlZnVuY3Rpb25OYW1lYXJndW1lbnRzU3RyaW5nSW5kZXg6IEluZGV4QXNzaWduOiBdID0gSW50ZXJjZXB0b3IgKEludGVyY2VwdG9yOiBoYW5kbGVJbnZva2VEeW5hbWljSW52b2tlQ2xvc3VyZUludm9rZUR5bmFtaWNNZXRob2RJbnZva2VEeW5hbWljR2V0dGVySW52b2tlRHluYW1pY1NldHRlckludm9rZVN0YXRpY0ludm9rZVN1cGVySW52b2tlQ29uc3RydWN0b3JCb2R5SW52b2tlR2VuZXJhdG9yQm9keUZvcmVpZ25Db2RlOiBMZXNzTGVzc0VxdWFsZWxlbWVudHNTdHJpbmdMaXRlcmFsTGlzdDogW2JvZHlCbG9ja0xvb3BCcmFuY2ggKCkgdGhlbiAoQk11bHRpcGx5TmVnYXRlOiBOb3Q6IFBhcmFtZXRlclZhbHVlOiBMb2NhbFZhbHVlOiBQaGk6IFJlZjogUmV0dXJuOiBTaGlmdExlZnRTaGlmdFJpZ2h0U3RhdGljOiBMYXp5U3RhdGljOiBTdGF0aWNTdG9yZTogbGVmdElkcmlnaHRJZFN0cmluZ0NvbmNhdDogICsgU3RyaW5naWZ5OiBTdWJ0cmFjdFN3aXRjaDogKDogQmRlZmF1bHQ6IEJUaHJvdzogVGhyb3dFeHByZXNzaW9uOiBUcnVuY2F0aW5nRGl2aWRlUmVtYWluZGVyRXhpdFRyeVRyeTogLCBDYXRjaDogLCBGaW5hbGx5OiBKb2luOiBCSXM6IElzVmlhSW50ZXJjZXB0b3I6IF90eXBlQ29udmVyc2lvbktpbmRUeXBlQ29udmVyc2lvbjogX3ByaW1pdGl2ZUNoZWNrS2luZFByaW1pdGl2ZUNoZWNrOiBSRUNFSVZFUkFSR1VNRU5UQm9vbENvbnZlcnNpb246IFR5cGVLbm93bjogIHdpdG5lc3NlZCBieSBSYW5nZUNvbnZlcnNpb246IFR5cGVJbmZvUmVhZFJhdzogVHlwZUluZm9SZWFkVmFyaWFibGU6IFR5cGVJbmZvRXhwcmVzc2lvbjogQXdhaXQ6IElzVGVzdDogQXNDaGVjazogQXNDaGVja1NpbXBsZTogU3VidHlwZUNoZWNrOiBMb2FkVHlwZTogSW5zdGFuY2VFbnZpcm9ubWVudDogVHlwZUV2YWw6IFR5cGVCaW5kOiBkYXJ0MmpzLl9yZWNpcGVfc3ludGF4UmVjaXBlc2VwYXJhdG9yU3RyaW5ndG9UeXBldG9UeXBlU3RyaW5ncHVzaER5bmFtaWNwdXNoRHluYW1pY1N0cmluZ3B1c2hWb2lkcHVzaFZvaWRTdHJpbmd3cmFwU3RhcndyYXBTdGFyU3RyaW5nd3JhcFF1ZXN0aW9ud3JhcFF1ZXN0aW9uU3RyaW5nd3JhcEZ1dHVyZU9yd3JhcEZ1dHVyZU9yU3RyaW5nc3RhcnRUeXBlQXJndW1lbnRzc3RhcnRUeXBlQXJndW1lbnRzU3RyaW5nZW5kVHlwZUFyZ3VtZW50c1N0cmluZ3N0YXJ0RnVuY3Rpb25Bcmd1bWVudHNzdGFydEZ1bmN0aW9uQXJndW1lbnRzU3RyaW5nZW5kRnVuY3Rpb25Bcmd1bWVudHNlbmRGdW5jdGlvbkFyZ3VtZW50c1N0cmluZ3N0YXJ0T3B0aW9uYWxHcm91cHN0YXJ0T3B0aW9uYWxHcm91cFN0cmluZ2VuZE9wdGlvbmFsR3JvdXBlbmRPcHRpb25hbEdyb3VwU3RyaW5nc3RhcnROYW1lZEdyb3Vwc3RhcnROYW1lZEdyb3VwU3RyaW5nZW5kTmFtZWRHcm91cGVuZE5hbWVkR3JvdXBTdHJpbmduYW1lU2VwYXJhdG9ybmFtZVNlcGFyYXRvclN0cmluZ2dlbmVyaWNGdW5jdGlvblR5cGVQYXJhbWV0ZXJJbmRleGdlbmVyaWNGdW5jdGlvblR5cGVQYXJhbWV0ZXJJbmRleFN0cmluZ2V4dGVuc2lvbk9wZXh0ZW5zaW9uT3BTdHJpbmdwdXNoTmV2ZXJFeHRlbnNpb25wdXNoTmV2ZXJFeHRlbnNpb25TdHJpbmdwdXNoQW55RXh0ZW5zaW9ucHVzaEFueUV4dGVuc2lvblN0cmluZ19mb3JtZmVlZF9mb3JtZmVlZFN0cmluZ19zcGFjZV9zcGFjZVN0cmluZ19leGNsYW1hdGlvbl9leGNsYW1hdGlvblN0cmluZ19oYXNoX2RvbGxhcl9kb2xsYXJTdHJpbmdfcGVyY2VudF9wZXJjZW50U3RyaW5nX2FtcGVyc2FuZF9hbXBlcnNhbmRTdHJpbmdfYXBvc3Ryb3BoZV9hcG9zdHJvcGhlU3RyaW5nX2xlZnRQYXJlbl9sZWZ0UGFyZW5TdHJpbmdfcmlnaHRQYXJlbl9yaWdodFBhcmVuU3RyaW5nX2FzdGVyaXNrX2FzdGVyaXNrU3RyaW5nX3BsdXNfcGx1c1N0cmluZ19jb21tYVN0cmluZ19taW51c19taW51c1N0cmluZ19wZXJpb2RfcGVyaW9kU3RyaW5nX3NsYXNoX3NsYXNoU3RyaW5nX2RpZ2l0MF9kaWdpdDlfY29sb25TdHJpbmdfc2VtaWNvbG9uX3NlbWljb2xvblN0cmluZ19sZXNzVGhhbl9sZXNzVGhhblN0cmluZ19lcXVhbHNTdHJpbmdfZ3JlYXRlclRoYW5fZ3JlYXRlclRoYW5TdHJpbmdfcXVlc3Rpb25fcXVlc3Rpb25TdHJpbmdfYXRfYXRTdHJpbmdfdXBwZXJjYXNlQV91cHBlcmNhc2VaX2xlZnRCcmFja2V0U3RyaW5nX2JhY2tzbGFzaF9iYWNrc2xhc2hTdHJpbmdfcmlnaHRCcmFja2V0U3RyaW5nX2NpcmN1bWZsZXhfY2lyY3VtZmxleFN0cmluZ191bmRlcnNjb3JlX3VuZGVyc2NvcmVTdHJpbmdfYmFja3RpY2tfYmFja3RpY2tTdHJpbmdfbG93ZXJjYXNlQV9sb3dlcmNhc2VaX2xlZnRCcmFjZVN0cmluZ192ZXJ0aWNhbF92ZXJ0aWNhbFN0cmluZ19yaWdodEJyYWNlU3RyaW5nX3RpbGRlX3RpbGRlU3RyaW5nZGlnaXRWYWx1ZWlzSWRlbnRpZmllclN0YXJ0dGVzdEVxdWl2YWxlbmNlOiBTdHJpbmcuZnJvbUNoYXJDb2RlKCkgIT0gdGVzdEV4dGVuc2lvbi50b1N0cmluZygpICE9IGRhcnQyanMuanNfZW1pdHRlci5jbGFzc19zdHViX2dlbmVyYXRvcmdlbmVyYXRlQ2xhc3NDb25zdHJ1Y3RvcnR5cGVJbml0c3RoaXMuIyA9ICNmaWVsZEluaXRpYWxpemVyc2Z1bmN0aW9uKCMsICMpIHsgIzsgIzsgdGhpcy4jKCk7fWdlbmVyYXRlR2V0dGVyZnVuY3Rpb24oIykgeyByZXR1cm4gIy4jIH1nZW5lcmF0ZVNldHRlcmZ1bmN0aW9uKCMsIHYpIHsgcmV0dXJuICMuIyA9IHY7IH1idWlsZEdldHRlciRyZWNlaXZlcnRoaXMuIygjKSMuIygpZ2VuZXJhdGVkU3R1YnNnZW5lcmF0ZWRTZWxlY3RvcnNjbG9zdXJlQ2FsbE5hbWVmdW5jdGlvbigjKSB7IHJldHVybiAjLiMoIyk7IH1qc05hbWVzYWRkTm9TdWNoTWV0aG9kSGFuZGxlcnNtYXNrU2V0cGFyYW1ldGVyTmFtZXNhcmdOYW1lc3RoaXMuI25vU3VjaE1ldGhvZE5hbWUoI3JlY2VpdmVyLAogICAgICAgICAgICAgICAgICAgICNjcmVhdGVJbnZvY2F0aW9uTWlycm9yKCNtZXRob2ROYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNpbnRlcm5hbE5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FyZ3VtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjbmFtZWRBcmd1bWVudHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3R5cGVBcmd1bWVudENvdW50KSlmdW5jdGlvbigkcmVjZWl2ZXIsICMpIHsgcmV0dXJuICMgfWJ1aWxkVGVhck9mZkNvZGV0ZWFyT2ZmQWNjZXNzRXhwcmVzc2lvbnRlYXJPZmZHbG9iYWxPYmplY3RTdHJpbmd0ZWFyT2ZmR2xvYmFsT2JqZWN0ZnVuY3Rpb24oKSB7IHRocm93ICJIZWxwZXIgJ2Nsb3N1cmVGcm9tVGVhck9mZicgbWlzc2luZy4iIH1NaXNzaW5nSGVscGVyRnVuY3Rpb24oZnVuY3Rpb24oKSB7IHRocm93ICJIZWxwZXIgJ2Nsb3N1cmVGcm9tVGVhck9mZicgbWlzc2luZy4iIH0pKCl0ZWFyT2ZmR2V0dGVydGVhck9mZkFjY2Vzc1RleHRmdW5jdGlvbiB0ZWFyT2ZmR2V0dGVyKGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwgcmVmbGVjdGlvbkluZm8sIG5hbWUsIGlzSW50ZXJjZXB0ZWQpIHsKICByZXR1cm4gaXNJbnRlcmNlcHRlZAogICAgICA/IG5ldyBGdW5jdGlvbigiZnVuY3MiLCAiYXBwbHlUcmFtcG9saW5lSW5kZXgiLCAicmVmbGVjdGlvbkluZm8iLCAibmFtZSIsCiAgICAgICAgICAgICAgICAgICAgICN0ZWFyT2ZmR2xvYmFsT2JqZWN0U3RyaW5nLCAiYyIsCiAgICAgICAgICAicmV0dXJuIGZ1bmN0aW9uIHRlYXJPZmZfIiArIG5hbWUgKyAoZnVuY3Rpb25Db3VudGVyKyspICsgIihyZWNlaXZlcikgeyIgKwogICAgICAgICAgICAiaWYgKGMgPT09IG51bGwpIGMgPSAiICsgI3RlYXJPZmZBY2Nlc3NUZXh0ICsgIigiICsKICAgICAgICAgICAgICAgICJ0aGlzLCBmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBmYWxzZSwgdHJ1ZSwgbmFtZSk7IiArCiAgICAgICAgICAgICAgICAicmV0dXJuIG5ldyBjKHRoaXMsIGZ1bmNzWzBdLCByZWNlaXZlciwgbmFtZSk7IiArCiAgICAgICAgICAgIn0iKShmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBuYW1lLCAjdGVhck9mZkdsb2JhbE9iamVjdCwgbnVsbCkKICAgICAgOiBuZXcgRnVuY3Rpb24oImZ1bmNzIiwgImFwcGx5VHJhbXBvbGluZUluZGV4IiwgInJlZmxlY3Rpb25JbmZvIiwgIm5hbWUiLAogICAgICAgICAgICAgICAgICAgICAjdGVhck9mZkdsb2JhbE9iamVjdFN0cmluZywgImMiLAogICAgICAgICAgInJldHVybiBmdW5jdGlvbiB0ZWFyT2ZmXyIgKyBuYW1lICsgKGZ1bmN0aW9uQ291bnRlcisrKSsgIigpIHsiICsKICAgICAgICAgICAgImlmIChjID09PSBudWxsKSBjID0gIiArICN0ZWFyT2ZmQWNjZXNzVGV4dCArICIoIiArCiAgICAgICAgICAgICAgICAidGhpcywgZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LCByZWZsZWN0aW9uSW5mbywgZmFsc2UsIGZhbHNlLCBuYW1lKTsiICsKICAgICAgICAgICAgICAgICJyZXR1cm4gbmV3IGModGhpcywgZnVuY3NbMF0sIG51bGwsIG5hbWUpOyIgKwogICAgICAgICAgICAgIn0iKShmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBuYW1lLCAjdGVhck9mZkdsb2JhbE9iamVjdCwgbnVsbCk7Cn0gICAgICBmdW5jdGlvbiB0ZWFyT2ZmR2V0dGVyKGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwgcmVmbGVjdGlvbkluZm8sIG5hbWUsIGlzSW50ZXJjZXB0ZWQpIHsKICAgICAgICB2YXIgY2FjaGUgPSBudWxsOwogICAgICAgIHJldHVybiBpc0ludGVyY2VwdGVkCiAgICAgICAgICAgID8gZnVuY3Rpb24ocmVjZWl2ZXIpIHsKICAgICAgICAgICAgICAgIGlmIChjYWNoZSA9PT0gbnVsbCkgY2FjaGUgPSAjKAogICAgICAgICAgICAgICAgICAgIHRoaXMsIGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwgcmVmbGVjdGlvbkluZm8sIGZhbHNlLCB0cnVlLCBuYW1lKTsKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgY2FjaGUodGhpcywgZnVuY3NbMF0sIHJlY2VpdmVyLCBuYW1lKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDogZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICBpZiAoY2FjaGUgPT09IG51bGwpIGNhY2hlID0gIygKICAgICAgICAgICAgICAgICAgICB0aGlzLCBmdW5jcywgYXBwbHlUcmFtcG9saW5lSW5kZXgsIHJlZmxlY3Rpb25JbmZvLCBmYWxzZSwgZmFsc2UsIG5hbWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBjYWNoZSh0aGlzLCBmdW5jc1swXSwgbnVsbCwgbmFtZSk7CiAgICAgICAgICAgICAgfTsKICAgICAgfSAgICAgIGZ1bmN0aW9uIHRlYXJPZmYoZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LAogICAgICAgICAgcmVmbGVjdGlvbkluZm8sIGlzU3RhdGljLCBuYW1lLCBpc0ludGVyY2VwdGVkKSB7CiAgICAgIHZhciBjYWNoZSA9IG51bGw7CiAgICAgIHJldHVybiBpc1N0YXRpYwogICAgICAgICAgPyBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBpZiAoY2FjaGUgPT09IG51bGwpIGNhY2hlID0gI3RlYXJPZmYoCiAgICAgICAgICAgICAgICAgIHRoaXMsIGZ1bmNzLCBhcHBseVRyYW1wb2xpbmVJbmRleCwKICAgICAgICAgICAgICAgICAgcmVmbGVjdGlvbkluZm8sIHRydWUsIGZhbHNlLCBuYW1lKS5wcm90b3R5cGU7CiAgICAgICAgICAgICAgcmV0dXJuIGNhY2hlOwogICAgICAgICAgICB9CiAgICAgICAgICA6IHRlYXJPZmZHZXR0ZXIoZnVuY3MsIGFwcGx5VHJhbXBvbGluZUluZGV4LAogICAgICAgICAgICAgIHJlZmxlY3Rpb25JbmZvLCBuYW1lLCBpc0ludGVyY2VwdGVkKTsKICAgIH1kYXJ0MmpzLmpzX2VtaXR0ZXIuaW5zdGFudGlhdGlvbl9zdHViX2dlbmVyYXRvcl9nZW5lcmF0ZVN0dWJmdW5jdGlvbkZpZWxkdGFyZ2V0U2VsZWN0b3J0aGlzLiNbI11mdW5jdGlvbigjKSB7IHJldHVybiB0aGlzLiMuIygjKTsgfV9nZW5lcmF0ZVNpZ25hdHVyZVN0dWJmdW5jdGlvbigpIHsgcmV0dXJuICMoIyh0aGlzLiMpLCB0aGlzLiMpOyB9X2dlbmVyaWNDbG9zdXJlQ2FuJ3QgZmluZCBDbG9zdXJlIGZpZWxkIG9mIGNhbGxTZWxlY3RvcnNjb21wdXRlTGl2ZVBhcmFtZXRlclN0cnVjdHVyZXNwYXJhbWV0ZXJTdHJ1Y3R1cmVzc3R1YnNnZW5lcmljQ2FsbFN0cnVjdHVyZWdlbmVyaWNTZWxlY3RvcmRhcnQyanMuanNfZW1pdHRlci5pbnRlcmNlcHRvcl9zdHViX2dlbmVyYXRvcmVtYmVkZGVkTmFtZXNpbnRlcmNlcHRvckZvcmJ1aWxkSW50ZXJjZXB0b3JDaGVjayh0eXBlb2YgcmVjZWl2ZXIpID09ICJib29sZWFuImludGVybmFsIGVycm9ycmVjZWl2ZXIuY29uc3RydWN0b3IgPT0gQXJyYXkodHlwZW9mIHJlY2VpdmVyKSA9PSAic3RyaW5nInJlY2VpdmVyID09IG51bGxpZiAoIykgcmV0dXJuICNoYXNBcnJheWhhc0Jvb2xoYXNEb3VibGVoYXNJbnRoYXNOdWxsaGFzTnVtYmVyaGFzU3RyaW5naGFzTmF0aXZlYW55TmF0aXZlQ2xhc3Nlc3doZW5OdW1iZXJpbnRlcmNlcHRvckZvck51bWJlcnsKICAgICAgICAgICAgaWYgKE1hdGguZmxvb3IocmVjZWl2ZXIpID09IHJlY2VpdmVyKSByZXR1cm4gIzsKICAgICAgICAgICAgcmV0dXJuICM7CiAgICAgICAgfXJldHVybiAjaWYgKHR5cGVvZiByZWNlaXZlciA9PSAibnVtYmVyIikgIztpZiAocmVjZWl2ZXIgPT0gbnVsbCkgcmV0dXJuIHJlY2VpdmVyewogICAgICAgICAgaWYgKHR5cGVvZiByZWNlaXZlciAhPSAib2JqZWN0IikgewogICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVjZWl2ZXIgPT0gImZ1bmN0aW9uIiApIHJldHVybiAjOwogICAgICAgICAgICAgIHJldHVybiByZWNlaXZlcjsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChyZWNlaXZlciBpbnN0YW5jZW9mICMpIHJldHVybiByZWNlaXZlcjsKICAgICAgICAgIHJldHVybiAjKHJlY2VpdmVyKTsKICAgICAgfWpzVW5rbm93bmlmICghKHJlY2VpdmVyIGluc3RhbmNlb2YgIykpIHJldHVybiAjO3JldHVybiByZWNlaXZlcmZ1bmN0aW9uKHJlY2VpdmVyKSB7ICM7IH1fZ2VuZXJhdGVJc0pzSW5kZXhhYmxlQ2FsbHVzZTF1c2UyZGlzcGF0Y2hQcm9wZXJ0eWhlbHBlckV4cHJlc3Npb25fZmFzdFBhdGhGb3JPbmVTaG90SW50ZXJjZXB0b3J7CiAgICAgICAgICBpZiAocmVjZWl2ZXIgPT0gbnVsbCkgcmV0dXJuIGEwID09IG51bGw7CiAgICAgICAgICBpZiAodHlwZW9mIHJlY2VpdmVyICE9ICJvYmplY3QiKQogICAgICAgICAgICByZXR1cm4gYTAgIT0gbnVsbCAmJiByZWNlaXZlciA9PT0gYTA7CiAgICAgICAgfXJlY2VpdmVyICBhMCMgPj4+IDBpZiAodHlwZW9mIHJlY2VpdmVyID09ICJudW1iZXIiICYmIHR5cGVvZiBhMCA9PSAibnVtYmVyIikgIHJldHVybiAjO2lmICh0eXBlb2YgcmVjZWl2ZXIgPT0gIm51bWJlciIpIHJldHVybiAtcmVjZWl2ZXIgICAgICAgICAgaWYgKHR5cGVvZiByZWNlaXZlciA9PSAibnVtYmVyIiAmJiBNYXRoLmZsb29yKHJlY2VpdmVyKSA9PSByZWNlaXZlcikKICAgICAgICAgICAgcmV0dXJuICh+cmVjZWl2ZXIpID4+PiAwOwogICAgICAgICAgY29udGFpbnNBcnJheWNvbnRhaW5zU3RyaW5nY29udGFpbnNKc0luZGV4YWJsZWFycmF5Q2hlY2tnZW5lcmljSW5kZXhhYmxlQ2hlY2tvckV4cHR5cGVvZiByZWNlaXZlciA9PSAic3RyaW5nIiAgICAgICAgICBpZiAodHlwZW9mIGEwID09PSAibnVtYmVyIikKICAgICAgICAgICAgaWYgKCMpCiAgICAgICAgICAgICAgaWYgKChhMCA+Pj4gMCkgPT09IGEwICYmIGEwIDwgcmVjZWl2ZXIubGVuZ3RoKQogICAgICAgICAgICAgICAgcmV0dXJuIHJlY2VpdmVyW2EwXTsKICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGEwID09PSAibnVtYmVyIikKICAgICAgICAgICAgaWYgKCMgJiYgIXJlY2VpdmVyLmltbXV0YWJsZSRsaXN0ICYmCiAgICAgICAgICAgICAgICAoYTAgPj4+IDApID09PSBhMCAmJiBhMCA8IHJlY2VpdmVyLmxlbmd0aCkKICAgICAgICAgICAgICByZXR1cm4gcmVjZWl2ZXJbYTBdID0gYTE7CiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWNlaXZlciA9PT0gIm51bWJlciIpIHJldHVybiBNYXRoLmFicyhyZWNlaXZlcik7CiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVjZWl2ZXIgPT09ICJudW1iZXIiKQogICAgICAgICAgICAgcmV0dXJuIHJlY2VpdmVyID4gMCA/IDEgOiByZWNlaXZlciA8IDAgPyAtMSA6IHJlY2VpdmVyOwogICAgICAgIGdldEludGVyY2VwdG9yTmFtZWdsb2JhbE9iamVjdG9wdGltaXplZFBhdGhmdW5jdGlvbigjKSB7ICM7IHJldHVybiAjLiMocmVjZWl2ZXIpLiMoIykgfWRhcnQyanMuanNfZW1pdHRlci5tYWluX2NhbGxfc3R1Yl9nZW5lcmF0b3JnZW5lcmF0ZUludm9rZU1haW5tYWluQ2FsbENsb3N1cmVjdXJyZW50U2NyaXB0QWNjZXNzICAgICAgKGZ1bmN0aW9uIChjYWxsYmFjaykgewogICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICBjYWxsYmFjayhudWxsKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLy8gV2hlbiBydW5uaW5nIGFzIGEgY29udGVudC1zY3JpcHQgb2YgYSBjaHJvbWUtZXh0ZW5zaW9uIHRoZQogICAgICAgIC8vICdjdXJyZW50U2NyaXB0JyBpcyBgbnVsbGAgKGJ1dCBub3QgdW5kZWZpbmVkKS4KICAgICAgICBpZiAodHlwZW9mIGRvY3VtZW50LmN1cnJlbnRTY3JpcHQgIT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgIGNhbGxiYWNrKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdmFyIHNjcmlwdHMgPSBkb2N1bWVudC5zY3JpcHRzOwogICAgICAgIGZ1bmN0aW9uIG9uTG9hZChldmVudCkgewogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgIHNjcmlwdHNbaV0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsIG9uTG9hZCwgZmFsc2UpOwogICAgICAgICAgfQogICAgICAgICAgY2FsbGJhY2soZXZlbnQudGFyZ2V0KTsKICAgICAgICB9CiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKSB7CiAgICAgICAgICBzY3JpcHRzW2ldLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBvbkxvYWQsIGZhbHNlKTsKICAgICAgICB9CiAgICAgIH0pKGZ1bmN0aW9uKGN1cnJlbnRTY3JpcHQpIHsKICAgICAgICAjY3VycmVudFNjcmlwdCA9IGN1cnJlbnRTY3JpcHQ7CgogICAgICAgIGlmICh0eXBlb2YgZGFydE1haW5SdW5uZXIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGRhcnRNYWluUnVubmVyKCNtYWluQ2FsbENsb3N1cmUsIFtdKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgI21haW5DYWxsQ2xvc3VyZShbXSk7CiAgICAgICAgfQogICAgICB9KWRhcnQyanMuanNfZW1pdHRlci5uYXRpdmVfZ2VuZXJhdG9yTmF0aXZlR2VuZXJhdG9ybmVlZHNJc29sYXRlQWZmaW5pdHlUYWdJbml0aWFsaXphdGlvbmdlbmVyYXRlSXNvbGF0ZUFmZmluaXR5VGFnSW5pdGlhbGl6YXRpb25pbnRlcm5TdHJpbmdGdW5jdGlvbmdldElzb2xhdGVUYWdBY2Nlc3Npc29sYXRlVGFnQWNjZXNzZGlzcGF0Y2hQcm9wZXJ0eU5hbWVBY2Nlc3MgICAgICAhZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGludGVybiA9ICNpbnRlcm5TdHJpbmdGdW5jdGlvbjsKCiAgICAgICAgI2dldElzb2xhdGVUYWcgPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgICByZXR1cm4gaW50ZXJuKCJfX19kYXJ0XyIgKyBuYW1lICsgI2lzb2xhdGVUYWcpOwogICAgICAgIH07CgogICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IGRpZmZlcmVudCBwcm9ncmFtcyBsb2FkZWQgaW50byB0aGUgc2FtZSBjb250ZXh0IChwYWdlKQogICAgICAgIC8vIHVzZSBkaXN0aW5jdCBkaXNwYXRjaCBwcm9wZXJpZXMsIHdlIHBsYWNlIGFuIG9iamVjdCBvbiBgT2JqZWN0YCB0bwogICAgICAgIC8vIGNvbnRhaW4gdGhlIG5hbWVzIGFscmVhZHkgaW4gdXNlLgogICAgICAgIHZhciB0YWJsZVByb3BlcnR5ID0gIl9fX2RhcnRfaXNvbGF0ZV90YWdzXyI7CiAgICAgICAgdmFyIHVzZWRQcm9wZXJ0aWVzID0gT2JqZWN0W3RhYmxlUHJvcGVydHldIHx8CiAgICAgICAgICAgIChPYmplY3RbdGFibGVQcm9wZXJ0eV0gPSBPYmplY3QuY3JlYXRlKG51bGwpKTsKCiAgICAgICAgdmFyIHJvb3RQcm9wZXJ0eSA9ICJfIjsKICAgICAgICBmb3IgKHZhciBpID0gMDsgOyBpKyspIHsKICAgICAgICAgIHZhciBwcm9wZXJ0eSA9IGludGVybihyb290UHJvcGVydHkgKyAiXyIgKyBpICsgIl8iKTsKICAgICAgICAgIGlmICghKHByb3BlcnR5IGluIHVzZWRQcm9wZXJ0aWVzKSkgewogICAgICAgICAgICB1c2VkUHJvcGVydGllc1twcm9wZXJ0eV0gPSAxOwogICAgICAgICAgICAjaXNvbGF0ZVRhZyA9IHByb3BlcnR5OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCNpbml0aWFsaXplRGlzcGF0Y2hQcm9wZXJ0eSkgewogICAgICAgICAgI2Rpc3BhdGNoUHJvcGVydHlOYW1lID0gI2dldElzb2xhdGVUYWcoImRpc3BhdGNoX3JlY29yZCIpOwogICAgICAgIH0KICAgICAgfSgpOwogICAgaW5pdGlhbGl6ZURpc3BhdGNoUHJvcGVydHlnZW5lcmF0ZUlzb2xhdGVUYWdSb290WnhZeFhlbmNvZGVOYXRpdmVJbmZvbm9uTGVhZlRhZ3Nmb3JtYXRUYWdzbGVhZlN0cm5vbkxlYWZTdHJidWlsZE5hdGl2ZUluZm9IYW5kbGVyaW5mb0FjY2Vzc3N1YmNsYXNzUmVhZEdlbmVyYXRvcmludGVyY2VwdG9yc0J5VGFnQWNjZXNzbGVhZlRhZ3NBY2Nlc3NzdWJjbGFzc1JlYWRzdWJjbGFzc2VzW2ldICAgICAgICAgIC8vIFRoZSBuYXRpdmUgaW5mbyBsb29rcyBsaWtlIHRoaXM6CiAgICAgICAgICAvLwogICAgICAgICAgLy8gSHRtbEVsZW1lbnQ6IHsKICAgICAgICAgIC8vICAgICAiJSI6ICJIVE1MRGl2RWxlbWVudHxIVE1MQW5jaG9yRWxlbWVudDtIVE1MRWxlbWVudDtGYW5jeUJ1dHRvbiIKICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGUgZmlyc3QgdHdvIHNlbWljb2xvbi1zZXBhcmF0ZWQgcGFydHMgY29udGFpbiBkaXNwYXRjaCB0YWdzLCB0aGUKICAgICAgICAgIC8vIHRoaXJkIGNvbnRhaW5zIHRoZSBKYXZhU2NyaXB0IG5hbWVzIGZvciBjbGFzc2VzLgogICAgICAgICAgLy8KICAgICAgICAgIC8vIFRoZSB0YWdzIGluZGljYXRlIHRoYXQgSmF2YVNjcmlwdCBvYmplY3RzIHdpdGggdGhlIGRpc3BhdGNoIHRhZ3MKICAgICAgICAgIC8vICh1c3VhbGx5IGNvbnN0cnVjdG9yIG5hbWVzKSBIVE1MRGl2RWxlbWVudCwgSFRNTEFuY2hvckVsZW1lbnQgYW5kCiAgICAgICAgICAvLyBIVE1MRWxlbWVudCBhbGwgbWFwIHRvIHRoZSBEYXJ0IG5hdGl2ZSBjbGFzcyBuYW1lZCBIdG1sRWxlbWVudC4KICAgICAgICAgIC8vIFRoZSBmaXJzdCBzZXQgaXMgZm9yIGVmZmVjdGl2ZSBsZWFmIG5vZGVzIGluIHRoZSBoaWVyYXJjaHksIHRoZQogICAgICAgICAgLy8gc2Vjb25kIHNldCBpcyBub24tbGVhZiBub2Rlcy4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGUgdGhpcmQgcGFydCBjb250YWlucyB0aGUgSmF2YVNjcmlwdCBuYW1lcyBvZiBEYXJ0IGNsYXNzZXMgdGhhdAogICAgICAgICAgLy8gZXh0ZW5kIHRoZSBuYXRpdmUgY2xhc3MuIEhlcmUsIEZhbmN5QnV0dG9uIGV4dGVuZHMgSHRtbEVsZW1lbnQsIHNvCiAgICAgICAgICAvLyB0aGUgcnVudGltZSBuZWVkcyB0byBrbm93IHRoYXQgd2luZG93LkhUTUxFbGVtZW50LnByb3RvdHlwZSBpcyB0aGUKICAgICAgICAgIC8vIHByb3RvdHlwZSB0aGF0IG5lZWRzIHRvIGJlIGV4dGVuZGVkIGluIGNyZWF0aW5nIHRoZSBjdXN0b20gZWxlbWVudC4KICAgICAgICAgIC8vCiAgICAgICAgICAvLyBUaGUgaW5mb3JtYXRpb24gaXMgdXNlZCB0byBidWlsZCB0YWJsZXMgcmVmZXJlbmNlZCBieQogICAgICAgICAgLy8gZ2V0TmF0aXZlSW50ZXJjZXB0b3IgYW5kIGN1c3RvbSBlbGVtZW50IHN1cHBvcnQuCiAgICAgICAgICB7CiAgICAgICAgICAgIHZhciBuYXRpdmVTcGVjID0gI2luZm8uc3BsaXQoIjsiKTsKICAgICAgICAgICAgaWYgKG5hdGl2ZVNwZWNbMF0pIHsKICAgICAgICAgICAgICB2YXIgdGFncyA9IG5hdGl2ZVNwZWNbMF0uc3BsaXQoInwiKTsKICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRhZ3MubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICAgICNpbnRlcmNlcHRvcnNCeVRhZ0FjY2Vzc1t0YWdzW2ldXSA9ICNjb25zdHJ1Y3RvcjsKICAgICAgICAgICAgICAgICNsZWFmVGFnc0FjY2Vzc1t0YWdzW2ldXSA9IHRydWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChuYXRpdmVTcGVjWzFdKSB7CiAgICAgICAgICAgICAgdGFncyA9IG5hdGl2ZVNwZWNbMV0uc3BsaXQoInwiKTsKICAgICAgICAgICAgICBpZiAoI2FsbG93TmF0aXZlc1N1YmNsYXNzaW5nKSB7CiAgICAgICAgICAgICAgICBpZiAobmF0aXZlU3BlY1syXSkgewogICAgICAgICAgICAgICAgICB2YXIgc3ViY2xhc3NlcyA9IG5hdGl2ZVNwZWNbMl0uc3BsaXQoInwiKTsKICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdWJjbGFzc2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgdmFyIHN1YmNsYXNzID0gI3N1YmNsYXNzUmVhZDsKICAgICAgICAgICAgICAgICAgICBzdWJjbGFzcy4jbmF0aXZlU3VwZXJjbGFzc1RhZ05hbWUgPSB0YWdzWzBdOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGFncy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAjaW50ZXJjZXB0b3JzQnlUYWdBY2Nlc3NbdGFnc1tpXV0gPSAjY29uc3RydWN0b3I7CiAgICAgICAgICAgICAgICAgICNsZWFmVGFnc0FjY2Vzc1t0YWdzW2ldXSA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgbmF0aXZlU3VwZXJjbGFzc1RhZ05hbWVhbGxvd05hdGl2ZXNTdWJjbGFzc2luZ2RhcnQyanMuanNfZW1pdHRlci5wYXJhbWV0ZXJfc3R1Yl9nZW5lcmF0b3JlbXB0eVNlbGVjdG9yU2V0bmVlZHNTdXBlckdldHRlcmdlbmVyYXRlUGFyYW1ldGVyU3R1YmV4dHJhQXJndW1lbnRDb3VudHJlY2VpdmVyQXJndW1lbnROYW1ldGFyZ2V0QXJndW1lbnRzb3B0aW9uYWxQYXJhbWV0ZXJTdGFydHR5cGVSdGlyZXR1cm4gIy4jLmNhbGwodGhpcywgIyk7cmV0dXJuIHRoaXMuIygjKTtyZXR1cm4gIygjKWZ1bmN0aW9uKCMpIHsgIzsgfWxpdmVTZWxlY3RvcnNtZW1iZXJUeXBlUGFyYW1ldGVyc3JlbmFtZWRDYWxsU2VsZWN0b3Jzc3R1YlNlbGVjdG9yc25hbWVkU2VsZWN0b3JjbG9zdXJlU2VsZWN0b3JyZW5hbWVkU2VsZWN0b3JyZW5hbWVkU2VsZWN0b3JXaXRoVHlwZUFyZ3VtZW50c2RhcnQyanMuanNfZW1pdHRlci5ydW50aW1lX3R5cGVfZ2VuZXJhdG9yanNJbnRlcm9wQW5hbHlzaXNGdW5jdGlvblR5cGVTaWduYXR1cmVFbWl0dGVyY2xhc3NGdW5jdGlvblR5cGVUeXBlVGVzdFR5cGVUZXN0c2lzVGVzdF9wcm9wZXJ0aWVzYWRkSXNUZXN0YWRkU3Vic3RpdHV0aW9uYWRkU2lnbmF0dXJlaGFuZGxlVHlwZVRlc3R0eXBlVGVzdF9vdXRwdXRVbml0VmlzaXRvcmdlbmVyYXRlRnVuY3Rpb25UeXBlU2lnbmF0dXJlaXNUeXBlQ29udGFpbmVkSW5nZW5lcmF0ZVR5cGVDaGVja19nZXRTdWJzdGl0dXRpb25Db2RlX2dlbmVyYXRlSXNUZXN0c09uZnVuY3Rpb24oKSB7IHJldHVybiAjIH1fZ2V0VmFyaWFibGVOYW1lX2dldFN1YnN0aXR1dGlvblJlcHJlc2VudGF0aW9uZW1pdFR5cGVDaGVja2dlbmVyYXRlZF9UeXBlQ29udGFpbmVkSW5PdXRwdXRVbml0VmlzaXRvcmRhcnQyanMudGFyZ2V0X2NoZWNrc2R5bmFtaWNDaGVja3Njb3ZhcmlhbnRDaGVja3NfY2hlY2tPdGhlclBhcmFtZXRlcnNfY2hlY2tDb3ZhcmlhbnRQYXJhbWV0ZXJzX2NoZWNrVHlwZVBhcmFtZXRlcnNfSnVtcEhhbmRsZXJFbnRyeWp1bXBJbnN0cnVjdGlvbkp1bXBIYW5kbGVyaGFzQW55Q29udGludWVOdWxsSnVtcEhhbmRsZXJOdWxsSnVtcEhhbmRsZXIuZ2VuZXJhdGVCcmVhayBzaG91bGQgbm90IGJlIGNhbGxlZC5OdWxsSnVtcEhhbmRsZXIuZ2VuZXJhdGVDb250aW51ZSBzaG91bGQgbm90IGJlIGNhbGxlZC5UYXJnZXRKdW1wSGFuZGxlcmp1bXBzY29udGludWVJbnN0cnVjdGlvblN3aXRjaENhc2VKdW1wSGFuZGxlcmlzQ29udGludWVUb1N3aXRjaENhc2VLZXJuZWxTdHJpbmdCdWlsZGVyVW5leHBlY3RlZCBub2RlOiBjb25jYXRyZWRpcmVjdGlvbk1hcHBpbmd0eXBlVmFyaWFibGVMb2NhbHNjYWNoZWRUeXBlT2ZUaGlzY2FjaGVkVHlwZXNPZkNhcHR1cmVkVmFyaWFibGVzYWN0aXZhdGlvblZhcmlhYmxlc3JlZGlyZWN0RWxlbWVudGlzU3RvcmVkSW5DbG9zdXJlRmllbGRjcmVhdGVCb3hqRnJvbWlzUGFyYW1ldGVydXBkYXRlQ2FwdHVyZUJveGN1cnJlbnRCb3h0b0JlQ29waWVkRWxlbWVudHNvbGRCb3huZXdCb3hib3hlZFZhcmlhYmxlb2xkVmFsdWVnZXRUeXBlT2ZUaGlzaXNOYXRpdmVVcGdyYWRlRmFjdG9yeWlzQWNjZXNzZWREaXJlY3RseXJlZGlyZWN0VGFyZ2V0X2lzVXNlZEluVHJ5T3JHZW5lcmF0b3JSdW50aW1lIHR5cGUgaW5mb3JtYXRpb24gbm90IGF2YWlsYWJsZSBmb3IgQ2Fubm90IGZpbmQgdmFsdWUgZ2V0VHlwZU9mQ2FwdHVyZWRWYXJpYWJsZWxvY2FsQm94bG9jYWxWYWx1ZWdldExvY2FsTG9jYWwgIGlzIHN0b3JlZCBpbiBhIGNsb3N1cmUgZmllbGQubG9vcEVudHJ5c2F2ZWREaXJlY3RMb2NhbHNlbnRlckxvb3BVcGRhdGVzcG9zdExvb3BEZWZpbml0aW9ubWVyZ2VXaXRob3RoZXJMb2NhbHNqb2luZWRMb2NhbHNtaW5lbG9jYWxzSGFuZGxlcnN0aGlzVmFsdWVTeW50aGV0aWNMb2NhbF9uZXh0SGFzaENvZGVTeW50aGV0aWNMb2NhbChMb29wSGFuZGxlcmluaXRpYWxpemVyR3JhcGhzdGFydEJsb2NraW5pdGlhbGl6ZXJCbG9ja2JlZ2luQm9keUJsb2NrdXBkYXRlR3JhcGh1cGRhdGVCbG9ja3VwZGF0ZUVuZEJsb2NrbG9vcEtpbmRsYWJlbEdyYXBobGFiZWxJbmZvcHJldmlvdXNCbG9ja2JyYW5jaEV4aXRCbG9ja2xvb3BFeGl0QmxvY2tLZXJuZWxMb29wSGFuZGxlcl9LZXJuZWxMb29wVHlwZVZpc2l0b3JTc2FCcmFuY2hzdGFydExvY2Fsc2V4aXRMb2NhbHNTc2FCcmFuY2hCdWlsZGVyZGlhZ25vc3RpY05vZGVjaGVja05vdEFib3J0ZWRhYm9ydGVkIGNvbnRyb2wgZmxvd2NvbmRpdGlvbkJyYW5jaHN0YXJ0QnJhbmNoY29uZGl0aW9uQnJhbmNoTG9jYWxzQ2FuQmVSZXVzZWRtZXJnZUxvY2Fsc21heVJldXNlRnJvbUxvY2Fsc2Zyb21CcmFuY2h0b0JyYW5jaGZyb21Mb2NhbHNidWlsZEJyYW5jaHZpc2l0QnJhbmNoam9pbkJyYW5jaF9oYW5kbGVEaWFtb25kQnJhbmNoaGFuZGxlSWZOdWxsbGVmdEV4cHJlc3Npb25ib29saWZpZWRMZWZ0Ym9vbGlmaWVkUmlnaHRub3RJc0FuZHRoZW5WYWx1ZWVsc2VWYWx1ZWNvbmRpdGlvblN0YXJ0QmxvY2tjb25kaXRpb25HcmFwaFN3aXRjaENvbnRpbnVlQW5hbHlzaXNjb250YWluc0NvbnRpbnVlc3dpdGNoQ2FzZUJvZHljb250aW51ZVN0bXR0cnlGaW5hbGx5U3RhdGVtZW50IHR5cGUgIG5vdCBoYW5kbGVkIGluIElyVG9FbGVtZW50TWFwZGFydDJqcy5qc19tb2RlbC5lbnZKUHJvZ3JhbUVudl9jb21wb25lbnRzSkxpYnJhcnlFbnZsaWJyYXJ5LWVudl9jbGFzc01hcF9tZW1iZXJNYXBfc2V0dGVyTWFwc2V0dGVyTWFwSkxpYnJhcnlEYXRhaW1wb3J0Q291bnRKQ2xhc3NFbnZLaW5kSkNsYXNzRW52S2luZC5ub2RlSkNsYXNzRW52S2luZC5jbG9zdXJlSkNsYXNzRW52S2luZC5yZWNvcmRKQ2xhc3NFbnZVbnN1cHBvcnRlZCBKQ2xhc3NFbnZLaW5kIEpDbGFzc0VudkltcGxjbGFzcy1lbnZfY29uc3RydWN0b3JNYXBfY29uc3RydWN0b3JCb2R5TGlzdFJlY29yZEVudnJlY29yZC1lbnZDbG9zdXJlQ2xhc3NFbnZjbG9zdXJlLWNsYXNzLWVudkpDbGFzc0RhdGFLaW5kSkNsYXNzRGF0YUtpbmQubm9kZUpDbGFzc0RhdGFVbmV4cGVjdGVkIEpDbGFzc0RhdGFLaW5kIEpDbGFzc0RhdGFJbXBsaXNDYWxsVHlwZUNvbXB1dGVkSk1lbWJlckRhdGFLaW5kSk1lbWJlckRhdGFLaW5kLmZ1bmN0aW9uSk1lbWJlckRhdGFLaW5kLmZpZWxkSk1lbWJlckRhdGFLaW5kLmNvbnN0cnVjdG9ySk1lbWJlckRhdGFLaW5kLmNvbnN0cnVjdG9yQm9keUpNZW1iZXJEYXRhS2luZC5zaWduYXR1cmVKTWVtYmVyRGF0YUtpbmQuZ2VuZXJhdG9yQm9keWNsb3N1cmVGdW5jdGlvbkpNZW1iZXJEYXRhVW5leHBlY3RlZCBKTWVtYmVyRGF0YUtpbmQgSk1lbWJlckRhdGFJbXBsRnVuY3Rpb25EYXRhRnVuY3Rpb25EYXRhVHlwZVZhcmlhYmxlc01peGluRnVuY3Rpb25EYXRhRm9yRWFjaFBhcmFtZXRlck1peGluX0Z1bmN0aW9uRGF0YUltcGwmSk1lbWJlckRhdGFJbXBsJkZ1bmN0aW9uRGF0YVR5cGVWYXJpYWJsZXNNaXhpbl9GdW5jdGlvbkRhdGFJbXBsJkpNZW1iZXJEYXRhSW1wbCZGdW5jdGlvbkRhdGFUeXBlVmFyaWFibGVzTWl4aW4mRnVuY3Rpb25EYXRhRm9yRWFjaFBhcmFtZXRlck1peGluRnVuY3Rpb25EYXRhSW1wbGZ1bmN0aW9uLWRhdGFVbmV4cGVjdGVkIG1lbWJlciBub2RlIFNpZ25hdHVyZUZ1bmN0aW9uRGF0YXNpZ25hdHVyZS1mdW5jdGlvbi1kYXRhU2lnbmF0dXJlRnVuY3Rpb25EYXRhLmdldEZ1bmN0aW9uVHlwZVNpZ25hdHVyZURhdGEuZm9yRWFjaFBhcmFtZXRlckRlbGVnYXRlZEZ1bmN0aW9uRGF0YWJhc2VEYXRhR2VuZXJhdG9yQm9keUZ1bmN0aW9uRGF0YWdlbmVyYXRvci1ib2R5LWRhdGFKQ29uc3RydWN0b3JEYXRhSkNvbnN0cnVjdG9yRGF0YUltcGxjb25zdHJ1Y3Rvci1kYXRhX2NvbnN0YW50Q29uc3RydWN0b3Jjb21wdXRlQ29uc3RhbnRDb25zdHJ1Y3RvclVuZXhwZWN0ZWQgY29uc3RydWN0b3IgQ29uc3RydWN0b3JEYXRhSW1wbC5fZ2V0Q29uc3RydWN0b3JDb25zdGFudENvbnN0cnVjdG9yQm9keURhdGFJbXBsY29uc3RydWN0b3ItYm9keS1kYXRhSkZpZWxkRGF0YUpGaWVsZERhdGFJbXBsZmllbGQtZGF0YV9jb25zdGFudEV4cHJlc3Npb25GaWVsZERhdGFJbXBsLmdldEZpZWxkQ29uc3RhbnRKVHlwZWRlZkRhdGFKVHlwZVZhcmlhYmxlRGF0YV9kZWZhdWx0VHlwZW9yZGVyZWRfdHlwZXNldE9yZGVyZWRUeXBlU2V0b3JkZXJlZC10eXBlLXNldF9sZXZlbHN0eXBlc0NvdW50dHlwZUxpbmtCdWlsZGVybGlua3NsZXZlbENvdW50bGV2ZWxzdHlwZUxpc3RsZXZlbExpc3RDYW5ub3QgZXh0ZW5kIGdlbmVyaWMgY2xhc3MgIHVzaW5nIE9yZGVyZWRUeXBlU2V0LmV4dGVuZENsYXNzZXh0ZW5kZWRUeXBlc2xldmVsT2Zmc2V0c09yZGVyZWRUeXBlU2V0QnVpbGRlck9yZGVyZWRUeXBlU2V0QnVpbGRlckJhc2VfYWRkQWxsU3VwZXJ0eXBlc3RvVHlwZVNldFN1cGVydHlwZXMgbm90IGNvbXB1dGVkIG9uIGR1cmluZyByZXNvbHV0aW9uIG9mIF9hZGRBdERlcHRocHJldmV4aXN0aW5nVHlwZUludmFsaWQgb3JkZXJlZCB0eXBlc2V0IGZvciBkYXJ0MmpzLmNvbXBpbGVfdGltZV9jb25zdGFudF9ldmFsdWF0b3JDb25zdGFudEVudmlyb25tZW50QmFja2VuZENvbnN0YW50RW52aXJvbm1lbnRyZWdpc3RlckxhenlTdGF0aWNDb25zdGFudENvbXBpbGVyVGFza0NhY2hlZFN0YXRpY1R5cGVObyBzdGF0aWMgdHlwZSBmb3VuZCBmb3IgTm8gZm9yLWluIGl0ZXJhdG9yIHR5cGUgZm91bmQgZm9yIE5vIHN0YXRpYyB0eXBlIGNhY2hlZCBmb3Iga2VybmVsLmRlYnVnX0RlYnVnUHJpbnRlciZWaXNpdG9yJkluZGVudGF0aW9uX0RlYnVnUHJpbnRlciZWaXNpdG9yJkluZGVudGF0aW9uJlRhZ2dpbmctLXVubmFtZWQtLUtlcm5lbERhcnRUeXBlc3N1YnR5cGVWaXNpdG9ycG90ZW50aWFsU3VidHlwZVZpc2l0b3JLZXJuZWxPcmRlcmVkVHlwZVNldEJ1aWxkZXJBYnN0cmFjdFR5cGVSZWxhdGlvbk1peGluX0tlcm5lbFN1YnR5cGVWaXNpdG9yJlN1YnR5cGVWaXNpdG9yJkFic3RyYWN0VHlwZVJlbGF0aW9uTWl4aW5LZXJuZWxTdWJ0eXBlVmlzaXRvcl9fS2VybmVsUG90ZW50aWFsU3VidHlwZVZpc2l0b3ImUG90ZW50aWFsU3VidHlwZVZpc2l0b3ImQWJzdHJhY3RUeXBlUmVsYXRpb25NaXhpbl9LZXJuZWxQb3RlbnRpYWxTdWJ0eXBlVmlzaXRvclN0cmluZ2lmaWVyQ29uc3RhbnRpZmllcmZhaWxOb2RlX2luaXRpYWxpemVyTG9jYWxzX2NvbXB1dGVMaXN0X2NvbXB1dGVBcmd1bWVudHNfY29tcHV0ZUNvbnN0cnVjdG9ySW52b2NhdGlvbnJlZ2lzdGVyRmllbGRVbmV4cGVjdGVkIGluaXRpYWxpemVyIERhcnRUeXBlQ29udmVydGVyY3VycmVudEZ1bmN0aW9uVHlwZVBhcmFtZXRlcnNDb25zdGFudFZhbHVlZmllclVuZXhwZWN0ZWQgdW5ldmFsdWF0ZWQgY29uc3RhbnQgZGFydDJqcy5rZXJuZWwuZW52bWVyZ2VTb3J0S1Byb2dyYW1FbnZfYWRkTGlicmFyaWVzX2Vuc3VyZUxpYnJhcnlNYXBLTGlicmFyeUVudl9lbnN1cmVDbGFzc01hcF9lbnN1cmVNZW1iZXJNYXBzVW5leHBlY3RlZCBsaWJyYXJ5IG1lbWJlciBub2RlOiBLTGlicmFyeURhdGFfbWV0YWRhdGFLQ2xhc3NFbnZLQ2xhc3NFbnZJbXBsX2J1aWxkRm9yd2FyZGluZ0NvbnN0cnVjdG9yc3VwZXJjbGFzc0NvbnN0cnVjdG9yc3VwZXJGdW5jdGlvbmNsb25lVmFyaWFibGVpbmNsdWRlU3RhdGljaW5jbHVkZU5vU3VjaE1ldGhvZEZvcndhcmRlcnNhZGRDb25zdHJ1Y3RvcnNtaXhpbk1lbWJlckNvdW50Y2xvbmVWaXNpdG9yc3VwZXJjbGFzc1N1YnN0aXR1dGlvbnN1cGVyY2xhc3NDbG9uZXJmb3J3YXJkaW5nQ29uc3RydWN0b3JLQ2xhc3NEYXRhS0NsYXNzRGF0YUltcGxLTWVtYmVyRGF0YUtNZW1iZXJEYXRhSW1wbEtGdW5jdGlvbkRhdGFLRnVuY3Rpb25EYXRhTWl4aW5fS0Z1bmN0aW9uRGF0YUltcGwmS01lbWJlckRhdGFJbXBsJktGdW5jdGlvbkRhdGFNaXhpbktGdW5jdGlvbkRhdGFJbXBsS0NvbnN0cnVjdG9yRGF0YUtDb25zdHJ1Y3RvckRhdGFJbXBsS0ZpZWxkRGF0YUtGaWVsZERhdGFJbXBsS1R5cGVkZWZEYXRhS1R5cGVWYXJpYWJsZURhdGFvcmRlckJ5RmlsZU9mZnNldGFMb2NiTG9jYVVyaWJVcml1cmlDb21wYXJldW5pdmVyc2UuZnVuY3Rpb25fc2V0Y29tcHV0ZU1hc2tfY3JlYXRlU2VsZWN0b3JNYXNrc2VsZWN0b3JNYXNrbm9TdWNoTWV0aG9kTWFza25vU3VjaE1ldGhvZHNTZWxlY3Rvck1hc2tGdW5jdGlvblNldE5vZGVNQVhfRUxFTUVOVFNfSU5fTElTVG5vU3VjaE1ldGhvZFF1ZXJ5RnVuY3Rpb25TZXROb2RlKEZ1bmN0aW9uU2V0UXVlcnlFbXB0eUZ1bmN0aW9uU2V0UXVlcnk8ZW1wdHk+RnVsbEZ1bmN0aW9uU2V0UXVlcnlfcmVjZWl2ZXJJbXBhY3RSZWdpc3RyeU1peGluSW1wYWN0RGF0YXRvRGF0YVNpbmtJbXBhY3REYXRhSW1wbF9DYWxsU3RydWN0dXJlX1N1cGVySW5pdGlhbGl6ZXJzb3VyY2VDb25zdHJ1Y3RvcnRhcmdldENvbnN0cnVjdG9yX1N1cGVySW52b2NhdGlvbl9JbnN0YW5jZUFjY2Vzc19EeW5hbWljQWNjZXNzX0Z1bmN0aW9uSW52b2NhdGlvbl9JbnN0YW5jZUludm9jYXRpb25fRHluYW1pY0ludm9jYXRpb25fTG9jYWxGdW5jdGlvbkludm9jYXRpb25fU3RhdGljSW52b2NhdGlvbl9Db25zdHJ1Y3Rvckludm9jYXRpb25fQ29uc3RJbnN0YW50aWF0aW9uX0ZlYXR1cmVsb2NhbFdpdGhvdXRJbml0aWFsaXplcl9UeXBlVXNlX1R5cGVVc2VLaW5kYXN5bmNTdGFyTWFya2Vyc3luY1N0YXJNYXJrZXJfUmVkaXJlY3RpbmdJbml0aWFsaXplcl9UeXBlTGl0ZXJhbF9HZW5lcmljSW5zdGFudGlhdGlvbl9TdGF0aWNBY2Nlc3NfTWFwTGl0ZXJhbF9Db250YWluZXJMaXRlcmFsX1J1bnRpbWVUeXBlVXNlX0ZvckluRGF0YWZyb250X2VuZC5jb25zdGFudF9ldmFsdWF0b3JSZXNvbHV0aW9uV29ybGRJbXBhY3RCdWlsZGVyX0tlcm5lbEltcGFjdEJ1aWxkZXImSW1wYWN0QnVpbGRlckJhc2UmS2VybmVsSW1wYWN0UmVnaXN0cnlNaXhpbl9jb21wdXRlUmVjZWl2ZXJDb25zdHJhaW50aXJUeXBlX2dldFR5cGVBcmd1bWVudHNyZWdpc3RlckZlYXR1cmVyZWdpc3Rlck5hdGl2ZURhdGFyZWdpc3RlckNvbnN0YW50TGl0ZXJhbHJlZ2lzdGVyQ29uc3RTeW1ib2xOYW1lZGFydFR5cGVBcmd1bWVudHNtYXRjaGVkVHlwZXJlY2VpdmVyRGFydFR5cGVhcmd1bWVudERhcnRUeXBlZmlyc3RDYXNlZmlyc3RDYXNlVHlwZW92ZXJyaWRlc0VxdWFsc0tlcm5lbEltcGFjdEJ1aWxkZXJfYW5ub3RhdGlvbnNLZXJuZWxJbXBhY3RDb252ZXJ0ZXJLZXJuZWxJbXBhY3RSZWdpc3RyeU1peGluT3B0aW1pemF0aW9uVGVzdExvZ191bmNvbnZlcnRlZDxudWxsLWd1YXJkPkZpZWxkR2V0RmllbGRTZXRGaWVsZENhbGxDb25zdGFudEZpZWxkR2V0Q29uc3RhbnRGaWVsZENhbGxfcmVnaXN0ZXJTcGVjaWFsaXplcnVuY29udmVydGVkTmFtZVNwZWNpYWxpemVySW5kZXhBc3NpZ25JbmRleEJpdE5vdE5lZ2F0ZUFic01vZHVsb0R5bmFtaWNNb2R1bG9UcnVuY2F0aW5nRGl2aWRlLlNoaWZ0TGVmdC5TaGlmdFJpZ2h0LkVxdWFsc0xlc3NFcXVhbHNHcmVhdGVyRXF1YWxzQ29kZVVuaXRBdENvbXBhcmVUb1N1YnN0cmluZ1RyaW1QYXR0ZXJuTWF0Y2hSb3VuZHJlZ2lzdGVyUHJpbWl0aXZlQ2hlY2tQcmltaXRpdmVDaGVja09wdGltaXphdGlvbkxvZyhPcHRpbWl6YXRpb25Mb2dFbnRyeUZvckNvbmRpdGlvbmluU3R5bGVGb3JTcHJlYWRGb3JJblNwcmVhZEZvckVudHJ5Rm9ySW5FbnRyeUZvckNvbXBsZXRlRm9ySW5Db21wbGV0ZUlmQ29uZGl0aW9uSWZTcHJlYWRJZkVudHJ5SWZDb21wbGV0ZUlmRWxzZUVsc2VTcHJlYWRFbHNlRW50cnlJZkVsc2VDb21wbGV0ZVNwcmVhZE9wZXJhdG9yTmVzdGVkbmVzdGVkU3RlcGxhc3RTdGVwaWZDb25kaXRpb25zcHJlYWRPcGVyYXRvcmZhc3RhLnBhcnNlci50eXBlX2luZm9faW1wbFByZWZpeGVkVHlwZVNpbXBsZU51bGxhYmxlVHlwZVdpdGgxQXJndW1lbnRwYXJzZVR5cGVSZXN0U2ltcGxlVHlwZVdpdGgxQXJndW1lbnRTaW1wbGVOdWxsYWJsZVR5cGVTaW1wbGVUeXBlQ29tcGxleFR5cGVJbmZvYmVmb3JlUXVlc3Rpb25NYXJrdHlwZVZhcmlhYmxlU3RhcnRlcnNnZnRIYXNSZXR1cm5UeXBlX25vbk51bGxhYmxldHlwZVZhcmlhYmxlRW5kR3JvdXBzdHlwZVJlZk9yUHJlZml4ZW5kR3JvdXBJbmRleGNvbXB1dGVSZXN0dHlwZVZhcmlhYmxlU3RhcnROb1R5cGVQYXJhbU9yQXJnU2ltcGxlVHlwZUFyZ3VtZW50MXBhcnNlRW5kR3JvdXBza2lwRW5kR3JvdXBTaW1wbGVUeXBlQXJndW1lbnQxR3RFcWJlZm9yZUVuZEdyb3VwU2ltcGxlVHlwZUFyZ3VtZW50MUd0R3RDb21wbGV4VHlwZVBhcmFtT3JBcmdJbmZvc2tpcEVuZHBhcnNlVW5leHBlY3RlZEVuZHBhcnNlTWlzc2luZ0NvbW1hdHlwZVN0YXJ0c3N1cGVyVHlwZUluZm9zdG9rZW4yaXNBcmd1bWVudHNlcnJvclJlcG9ydGVkdHlwZUZvbGxvd3NFeHRlbmRzaW52YWxpZFR5cGVWYXJzaW1wbGVUeXBlc2ltcGxlTnVsbGFibGVUeXBlcHJlZml4ZWRUeXBlc2ltcGxlVHlwZVdpdGgxQXJndW1lbnRzaW1wbGVUeXBlV2l0aDFBcmd1bWVudEd0RXFzaW1wbGVUeXBlV2l0aDFBcmd1bWVudEd0R3RzaW1wbGVOdWxsYWJsZVR5cGVXaXRoMUFyZ3VtZW50c2ltcGxlVHlwZUFyZ3VtZW50MXNpbXBsZVR5cGVBcmd1bWVudDFHdEVxc2ltcGxlVHlwZUFyZ3VtZW50MUd0R3Rsb29rc0xpa2VOYW1lbG9va3NMaWtlVHlwZVBhcmFtT3JBcmdpc0Nsb3NlcnBhcnNlQ2xvc2VyYmVmb3JlQ2xvc2VydW5zcGxpdHNwbGl0Q2xvc2VyX0NvbnN0YW50UmVmZXJlbmNlR2VuZXJhdG9yX0NvbnN0YW50TGlzdEdlbmVyYXRvck1vZHVsYXJDb25zdGFudEVtaXR0ZXJfZXhwb25lbnRpYWxSRShbLStdPykoWzAtOV0rKSguKFswLTldKikpP2UoWy0rXT9bMC05XSspVGhlIGZ1bmN0aW9uIGNvbnN0YW50IGRvZXMgbm90IG5lZWQgc3BlY2lmaWMgSlMgY29kZS5fc2hvcnRlbkV4cG9uZW50aWFsUmVwcmVzZW50YXRpb25udW1iZXJTdHJpbmdsZWFkaW5nRGlnaXRzZnJhY3Rpb25EaWdpdHNleHBvbmVudGFsdGVybmF0aXZlY3V0b2ZmdG9TdHJpbmdBc0V4cG9uZW50aWFsMC8wMS8wLTEvMHNob3J0ZW5lZCEwITFDb25zdGFudEVtaXR0ZXJDT01NRU5UX1JFXiAqKC8vLiopP1xufCAgKi8vW14nJyJcbl0qJG11bHRpTGluZV9jb25zdGFudFJlZmVyZW5jZUdlbmVyYXRvcl9tYWtlQ29uc3RhbnRMaXN0bWF5YmVBZGRMaXN0VHlwZUFyZ3VtZW50c05ld1J0aW1heWJlQWRkVHlwZUFyZ3VtZW50c0NvbXBpbGVyIGVuY291dGVyZWQgdW5leHBlY3RlZCBzZXQgY2xhc3MgX3JlaWZpZWRUeXBlTmV3UnRpX3JlaWZpZWRUeXBlQXJndW1lbnRzanNNYXBrZXlFeHByZXNzaW9udmFsdWVFeHByZXNzaW9uanNHZW5lcmFsTWFwZW1pdHRlZEFyZ3VtZW50Q291bnRDb21waWxlciBoYXMgdW5leHBlY3RlZCBmaWVsZCBDb21waWxlciBhbmQgIGRpc2FncmVlIG9uIG51bWJlciBvZiBmaWVsZHMuZ2V0SGVscGVyUHJvcGVydHlfdmFyaWFibGVVbmV4cGVjdGVkIHR5cGUgdmFyaWFibGUgJyBpbiBjb25zdGFudCAnc3RyaXBDb21tZW50c3Jhd0phdmFTY3JpcHRkYXJ0MmpzLmpzX2VtaXR0ZXIuc3RhcnR1cF9lbWl0dGVyLm1vZGVsX2VtaXR0ZXJSYW5kb21IYXNoZXJTb3VyY2VNYXBCdWlsZGVyQ29uc3RhbnRPcmRlcmluZ2ZyYWdtZW50X2VtaXR0ZXIuZGFydE1vZGVsRW1pdHRlcl9zaG91bGRHZW5lcmF0ZVNvdXJjZU1hcF9jb25zdGFudE9yZGVyaW5nZGVmZXJyZWRJbml0aWFsaXplcnNHbG9iYWwkX19kYXJ0X2RlZmVycmVkX2luaXRpYWxpemVyc19fcGFydEV4dGVuc2lvbmRlZmVycmVkRXh0ZW5zaW9ucGFydC5qc3R5cGVOYW1lUHJvcGVydHlidWlsdGluJGNsc2NvbnN0YW50TGlzdEdlbmVyYXRvcm1ha2VDb25zdExpc3QoIyljbXAxY21wMmZyYWdtZW50RW1pdHRlcmRlZmVycmVkTG9hZGluZ1N0YXRlbWFpbkNvZGVlbWl0TWFpbkZyYWdtZW50ZGVmZXJyZWRGcmFnbWVudHNDb2RlZnJhZ21lbnRDb2RlZW1pdERlZmVycmVkRnJhZ21lbnRodW5rSGFzaGVzd3JpdGUgZnJhZ21lbnRzd3JpdGVEZWZlcnJlZEZyYWdtZW50c2ZpbmFsaXplRGVmZXJyZWRMb2FkaW5nRGF0YXdyaXRlTWFpbkZyYWdtZW50d3JpdGVEZWZlcnJlZE1hcGJ1aWxkR2VuZXJhdGVkQnlmbGF2b3JmYXN0IHN0YXJ0dXAgZW1pdHRlciwgc3Ryb25nLCB0cnVzdCBwcmltaXRpdmVzLCBvbWl0IGNoZWNrcywgbGF4IHJ1bnRpbWUgdHlwZSwgQ1NQZnJhZ21lbnRzQ29kZXdyaXRlRGVmZXJyZWRGcmFnbWVudGJ1aWxkRGVmZXJyZWRJbml0aWFsaXplckdsb2JhbHNlbGYuI2RlZmVycmVkSW5pdGlhbGl6ZXJzID0gc2VsZi4jZGVmZXJyZWRJbml0aWFsaXplcnMgfHwgT2JqZWN0LmNyZWF0ZShudWxsKTtkZWZlcnJlZEluaXRpYWxpemVyc2xvY2F0aW9uQ29sbGVjdG9yY29kZU91dHB1dExpc3RlbmVyc3NvdXJjZS1tYXBzbWFpbk91dHB1dC8vIFRoZSBjb2RlIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmcgaG9va3M6Ci8vIGRhcnRQcmludChtZXNzYWdlKToKLy8gICAgaWYgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkIGl0IGlzIGNhbGxlZCBpbnN0ZWFkIG9mIHRoZSBEYXJ0IFtwcmludF0KLy8gICAgbWV0aG9kLgovLwovLyBkYXJ0TWFpblJ1bm5lcihtYWluLCBhcmdzKToKLy8gICAgaWYgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkLCB0aGUgRGFydCBbbWFpbl0gbWV0aG9kIHdpbGwgbm90IGJlIGludm9rZWQKLy8gICAgZGlyZWN0bHkuIEluc3RlYWQsIGEgY2xvc3VyZSB0aGF0IHdpbGwgaW52b2tlIFttYWluXSwgYW5kIGl0cyBhcmd1bWVudHMKLy8gICAgW2FyZ3NdIGlzIHBhc3NlZCB0byBbZGFydE1haW5SdW5uZXJdLgovLwovLyBkYXJ0RGVmZXJyZWRMaWJyYXJ5TG9hZGVyKHVyaSwgc3VjY2Vzc0NhbGxiYWNrLCBlcnJvckNhbGxiYWNrKToKLy8gICAgaWYgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkLCBpdCB3aWxsIGJlIGNhbGxlZCB3aGVuIGEgZGVmZXJyZWQgbGlicmFyeQovLyAgICBpcyBsb2FkZWQuIEl0IHNob3VsZCBsb2FkIGFuZCBldmFsIHRoZSBqYXZhc2NyaXB0IG9mIGB1cmlgLCBhbmQgY2FsbAovLyAgICBzdWNjZXNzQ2FsbGJhY2suIElmIGl0IGZhaWxzIHRvIGRvIHNvLCBpdCBzaG91bGQgY2FsbCBlcnJvckNhbGxiYWNrIHdpdGgKLy8gICAgYW4gZXJyb3IuCi8vCi8vIGRhcnRDYWxsSW5zdHJ1bWVudGF0aW9uKGlkLCBxdWFsaWZpZWROYW1lKToKLy8gICAgaWYgdGhpcyBmdW5jdGlvbiBpcyBkZWZpbmVkLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBlYWNoIGVudHJ5IG9mIGEKLy8gICAgbWV0aG9kIG9yIGNvbnN0cnVjdG9yLiBVc2VkIG9ubHkgd2hlbiBjb21waWxpbmcgcHJvZ3JhbXMgd2l0aAovLyAgICAtLWV4cGVyaW1lbnQtY2FsbC1pbnN0cnVtZW50YXRpb24uCmVtaXQgYnVmZmVyc291dHB1dExpc3RlbmVyc2hhc2hlcmh1bmtQcmVmaXguY3VycmVudCA9ICNbIiJdID0gLmN1cnJlbnRtYXBVcmlodW5rRmlsZU5hbWVtYXBGaWxlTmFtZW1hcFNlZ21lbnRzcGFydFNlZ21lbnRzX2NvbW1lbnRUaGlzIG1hcHBpbmcgc2hvd3Mgd2hpY2ggY29tcGlsZWQgYC5qc2AgZmlsZXMgYXJlIG5lZWRlZCBmb3IgYSBnaXZlbiBkZWZlcnJlZCBsaWJyYXJ5IGltcG9ydC5GcmFnbWVudEVtaXR0ZXJfbW9kZWxFbWl0dGVyX3J1bGVzZXRFbmNvZGVyX2NhbGwwTmFtZV9jYWxsMU5hbWVfY2FsbDJOYW1lY2FsbDBOYW1lY2FsbDFOYW1lY2FsbDJOYW1lbm9uU3RhdGljU3RhdGVIb2xkZXJzc29mdERlZmVycmVkSWRzb2Z0RGVmZXJyZWRob2xkZXJDb2RlZW1pdEhvbGRlcnNpbml0aWFsaXplRW1wdHlIb2xkZXJzKGZ1bmN0aW9uIGRhcnRQcm9ncmFtKCkgewovLyBDb3BpZXMgdGhlIG93biBwcm9wZXJ0aWVzIGZyb20gW2Zyb21dIHRvIFt0b10uCmZ1bmN0aW9uIGNvcHlQcm9wZXJ0aWVzKGZyb20sIHRvKSB7CiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmcm9tKTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBrZXkgPSBrZXlzW2ldOwogICAgdG9ba2V5XSA9IGZyb21ba2V5XTsKICB9Cn0KCi8vIE9ubHkgdXNlIGRpcmVjdCBwcm90byBhY2Nlc3MgdG8gY29uc3RydWN0IHRoZSBwcm90b3R5cGUgY2hhaW4gKGluc3RlYWQgb2YKLy8gY29weWluZyBwcm9wZXJ0aWVzKSBvbiBwbGF0Zm9ybXMgd2hlcmUgd2Uga25vdyBpdCB3b3JrcyB3ZWxsIChDaHJvbWUgLyBkOCkuCnZhciBzdXBwb3J0c0RpcmVjdFByb3RvQWNjZXNzID0gI2RpcmVjdEFjY2Vzc1Rlc3RFeHByZXNzaW9uOwoKLy8gU2V0cyB0aGUgbmFtZSBwcm9wZXJ0eSBvZiBmdW5jdGlvbnMsIGlmIHRoZSBKUyBlbmdpbmUgZG9lc24ndCBzZXQgdGhlIG5hbWUKLy8gaXRzZWxmLgovLyBBcyBvZiAyMDE4IG9ubHkgSUUxMSBkb2Vzbid0IHNldCB0aGUgbmFtZS4KZnVuY3Rpb24gc2V0RnVuY3Rpb25OYW1lc0lmTmVjZXNzYXJ5KGhvbGRlcnMpIHsKICBmdW5jdGlvbiB0KCl7fTsKICBpZiAodHlwZW9mIHQubmFtZSA9PSAic3RyaW5nIikgcmV0dXJuOwoKICBmb3IgKHZhciBpID0gMDsgaSA8IGhvbGRlcnMubGVuZ3RoOyBpKyspIHsKICAgIHZhciBob2xkZXIgPSBob2xkZXJzW2ldOwogICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhob2xkZXIpOwogICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgaisrKSB7CiAgICAgIHZhciBrZXkgPSBrZXlzW2pdOwogICAgICB2YXIgZiA9IGhvbGRlcltrZXldOwogICAgICBpZiAodHlwZW9mIGYgPT0gJ2Z1bmN0aW9uJykgZi5uYW1lID0ga2V5OwogICAgfQogIH0KfQoKLy8gTWFrZXMgW2Nsc10gaW5oZXJpdCBmcm9tIFtzdXBdLgovLyBPbiBDaHJvbWUsIEZpcmVmb3ggYW5kIHJlY2VudCBJRXMgdGhpcyBoYXBwZW5zIGJ5IHVwZGF0aW5nIHRoZSBpbnRlcm5hbAovLyBwcm90by1wcm9wZXJ0eSBvZiB0aGUgY2xhc3NlcyAncHJvdG90eXBlJyBmaWVsZC4KLy8gT2xkZXIgSUVzIHVzZSBgT2JqZWN0LmNyZWF0ZWAgYW5kIGNvcHkgb3ZlciB0aGUgcHJvcGVydGllcy4KZnVuY3Rpb24gaW5oZXJpdChjbHMsIHN1cCkgewogIC8vIE5vdGUgdGhhdCBSVEkgbmVlZHMgY2xzLm5hbWUsIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIHNldCBpdCBhbnltb3JlLgogIGNscy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjbHM7CiAgY2xzLnByb3RvdHlwZVsjb3BlcmF0b3JJc1ByZWZpeCArIGNscy5uYW1lXSA9IGNsczsKCiAgLy8gVGhlIHN1cGVyY2xhc3MgaXMgb25seSBudWxsIGZvciB0aGUgRGFydCBPYmplY3QuCiAgaWYgKHN1cCAhPSBudWxsKSB7CiAgICBpZiAoc3VwcG9ydHNEaXJlY3RQcm90b0FjY2VzcykgewogICAgICAvLyBGaXJlZm94IGRvZXNuJ3QgbGlrZSB0byB1cGRhdGUgdGhlIHByb3RvdHlwZXMsIGJ1dCB3aGVuIHNldHRpbmcgdXAKICAgICAgLy8gdGhlIGhpZXJhcmNoeSBjaGFpbiBpdCdzIG9rLgogICAgICBjbHMucHJvdG90eXBlLl9fcHJvdG9fXyA9IHN1cC5wcm90b3R5cGU7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBjbHNQcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cC5wcm90b3R5cGUpOwogICAgY29weVByb3BlcnRpZXMoY2xzLnByb3RvdHlwZSwgY2xzUHJvdG90eXBlKTsKICAgIGNscy5wcm90b3R5cGUgPSBjbHNQcm90b3R5cGU7CiAgfQp9CgovLyBCYXRjaGVkIHZlcnNpb24gb2YgW2luaGVyaXRdIGZvciBtdWx0aXBsZSBjbGFzc2VzIGZyb20gb25lIHN1cGVyY2xhc3MuCmZ1bmN0aW9uIGluaGVyaXRNYW55KHN1cCwgY2xhc3NlcykgewogIGZvciAodmFyIGkgPSAwOyBpIDwgY2xhc3Nlcy5sZW5ndGg7IGkrKykgewogICAgaW5oZXJpdChjbGFzc2VzW2ldLCBzdXApOwogIH0KfQoKLy8gTWl4ZXMgaW4gdGhlIHByb3BlcnRpZXMgb2YgW21peGluXSBpbnRvIFtjbHNdLgpmdW5jdGlvbiBtaXhpbihjbHMsIG1peGluKSB7CiAgY29weVByb3BlcnRpZXMobWl4aW4ucHJvdG90eXBlLCBjbHMucHJvdG90eXBlKTsKICBjbHMucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY2xzOwp9CgovLyBDcmVhdGVzIGEgbGF6eSBmaWVsZC4KLy8KLy8gQSBsYXp5IGZpZWxkIGhhcyBhIHN0b3JhZ2UgZW50cnksIFtuYW1lXSwgd2hpY2ggaG9sZHMgdGhlIHZhbHVlLCBhbmQgYQovLyBnZXR0ZXIgKFtnZXR0ZXJOYW1lXSkgdG8gYWNjZXNzIHRoZSBmaWVsZC4gSWYgdGhlIGZpZWxkIHdhc24ndCBzZXQgYmVmb3JlCi8vIHRoZSBmaXJzdCBhY2Nlc3MsIGl0IGlzIGluaXRpYWxpemVkIHdpdGggdGhlIFtpbml0aWFsaXplcl0uCmZ1bmN0aW9uIGxhenkoaG9sZGVyLCBuYW1lLCBnZXR0ZXJOYW1lLCBpbml0aWFsaXplcikgewogIHZhciB1bmluaXRpYWxpemVkU2VudGluZWwgPSBob2xkZXI7CiAgaG9sZGVyW25hbWVdID0gdW5pbml0aWFsaXplZFNlbnRpbmVsOwogIGhvbGRlcltnZXR0ZXJOYW1lXSA9IGZ1bmN0aW9uKCkgewogICAgaG9sZGVyW2dldHRlck5hbWVdID0gZnVuY3Rpb24oKSB7ICNjeWNsaWNUaHJvdyhuYW1lKSB9OwogICAgdmFyIHJlc3VsdDsKICAgIHZhciBzZW50aW5lbEluUHJvZ3Jlc3MgPSBpbml0aWFsaXplcjsKICAgIHRyeSB7CiAgICAgIGlmIChob2xkZXJbbmFtZV0gPT09IHVuaW5pdGlhbGl6ZWRTZW50aW5lbCkgewogICAgICAgIHJlc3VsdCA9IGhvbGRlcltuYW1lXSA9IHNlbnRpbmVsSW5Qcm9ncmVzczsKICAgICAgICByZXN1bHQgPSBob2xkZXJbbmFtZV0gPSBpbml0aWFsaXplcigpOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdCA9IGhvbGRlcltuYW1lXTsKICAgICAgfQogICAgfSBmaW5hbGx5IHsKICAgICAgLy8gVXNlIHRyeS1maW5hbGx5LCBub3QgdHJ5LWNhdGNoL3Rocm93IGFzIGl0IGRlc3Ryb3lzIHRoZSBzdGFjawogICAgICAvLyB0cmFjZS4KICAgICAgaWYgKHJlc3VsdCA9PT0gc2VudGluZWxJblByb2dyZXNzKSB7CiAgICAgICAgLy8gVGhlIGxhenkgc3RhdGljIChob2xkZXJbbmFtZV0pIG1pZ2h0IGhhdmUgYmVlbiBzZXQgdG8gYSBkaWZmZXJlbnQKICAgICAgICAvLyB2YWx1ZS4gQWNjb3JkaW5nIHRvIHNwZWMgd2Ugc3RpbGwgaGF2ZSB0byByZXNldCBpdCB0byBudWxsLCBpZgogICAgICAgIC8vIHRoZSBpbml0aWFsaXphdGlvbiBmYWlsZWQuCiAgICAgICAgaG9sZGVyW25hbWVdID0gbnVsbDsKICAgICAgfQogICAgICAvLyBUT0RPKGZsb2l0c2NoKTogZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgdGhlIGZ1bmN0aW9uIHNob3VsZCBwcm9iYWJseQogICAgICAvLyBiZSB1bmlxdWUgZm9yIGVhY2ggc3RhdGljLgogICAgICBob2xkZXJbZ2V0dGVyTmFtZV0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXNbbmFtZV07IH07CiAgICB9CiAgICByZXR1cm4gcmVzdWx0OwogIH07Cn0KCi8vIEdpdmVuIGEgbGlzdCwgbWFya3MgaXQgYXMgY29uc3RhbnQuCi8vCi8vIFRoZSBydW50aW1lIGVuc3VyZXMgdGhhdCBjb25zdC1saXN0cyBjYW5ub3QgYmUgbW9kaWZpZWQuCmZ1bmN0aW9uIG1ha2VDb25zdExpc3QobGlzdCkgewogIC8vIEJ5IGFzc2lnbmluZyBhIGZ1bmN0aW9uIHRvIHRoZSBwcm9wZXJ0aWVzIHRoZXkgYmVjb21lIHBhcnQgb2YgdGhlCiAgLy8gaGlkZGVuIGNsYXNzLiBUaGUgYWN0dWFsIHZhbHVlcyBvZiB0aGUgZmllbGRzIGRvbid0IG1hdHRlciwgc2luY2Ugd2UKICAvLyBvbmx5IGNoZWNrIGlmIHRoZXkgZXhpc3QuCiAgbGlzdC5pbW11dGFibGUkbGlzdCA9IEFycmF5OwogIGxpc3QuZml4ZWQkbGVuZ3RoID0gQXJyYXk7CiAgcmV0dXJuIGxpc3Q7Cn0KCmZ1bmN0aW9uIGNvbnZlcnRUb0Zhc3RPYmplY3QocHJvcGVydGllcykgewogIC8vIENyZWF0ZSBhbiBpbnN0YW5jZSB0aGF0IHVzZXMgJ3Byb3BlcnRpZXMnIGFzIHByb3RvdHlwZS4gVGhpcyBzaG91bGQKICAvLyBtYWtlICdwcm9wZXJ0aWVzJyBhIGZhc3Qgb2JqZWN0LgogIGZ1bmN0aW9uIHQoKSB7fQogIHQucHJvdG90eXBlID0gcHJvcGVydGllczsKICBuZXcgdCgpOwogIHJldHVybiBwcm9wZXJ0aWVzOwp9CgpmdW5jdGlvbiBjb252ZXJ0QWxsVG9GYXN0T2JqZWN0KGFycmF5T2ZPYmplY3RzKSB7CiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mT2JqZWN0cy5sZW5ndGg7ICsraSkgewogICAgY29udmVydFRvRmFzdE9iamVjdChhcnJheU9mT2JqZWN0c1tpXSk7CiAgfQp9CgovLyBUaGlzIHZhcmlhYmxlIGlzIHVzZWQgYnkgdGhlIHRlYXJPZmZDb2RlIHRvIGd1YXJhbnRlZSB1bmlxdWUgZnVuY3Rpb25zIHBlcgovLyB0ZWFyLW9mZnMuCnZhciBmdW5jdGlvbkNvdW50ZXIgPSAwOwojdGVhck9mZkNvZGU7CgovLyBFYWNoIGRlZmVycmVkIGh1bmsgY29tZXMgd2l0aCBpdHMgb3duIHR5cGVzIHdoaWNoIGFyZSBhZGRlZCB0byB0aGUgZW5kCi8vIG9mIHRoZSB0eXBlcy1hcnJheS4KLy8gVGhlIGBmdW5UeXBlc2AgcGFzc2VkIHRvIHRoZSBgaW5zdGFsbFRlYXJPZmZgIGZ1bmN0aW9uIGJlbG93IGlzIHJlbGF0aXZlIHRvCi8vIHRoZSBodW5rIHRoZSBmdW5jdGlvbiBjb21lcyBmcm9tLiBUaGUgYHR5cGVzT2Zmc2V0YCB2YXJpYWJsZSBlbmNvZGVzIHRoZQovLyBvZmZzZXQgYXQgd2hpY2ggdGhlIG5ldyB0eXBlcyB3aWxsIGJlIGFkZGVkLgp2YXIgdHlwZXNPZmZzZXQgPSAwOwoKLy8gQWRhcHRzIHRoZSBzdG9yZWQgZGF0YSwgc28gaXQncyBzdWl0YWJsZSBmb3IgYSB0ZWFyT2ZmIGNhbGwuCi8vCi8vIFN0b3JlcyB0aGUgdGVhci1vZmYgZ2V0dGVyLWZ1bmN0aW9uIGluIHRoZSBbY29udGFpbmVyXSdzIFtnZXR0ZXJOYW1lXQovLyBwcm9wZXJ0eS4KLy8KLy8gVGhlIFtjb250YWluZXJdIGlzIGVpdGhlciBhIGNsYXNzICh0aGF0IGlzLCBpdHMgcHJvdG90eXBlKSwgb3IgdGhlIGhvbGRlciBmb3IKLy8gc3RhdGljIGZ1bmN0aW9ucy4KLy8KLy8gVGhlIGFyZ3VtZW50IFtmdW5zT3JOYW1lc10gaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBvciBmdW5jdGlvbnMuIElmIGl0IGlzIGEKLy8gbmFtZSwgdGhlbiB0aGUgZnVuY3Rpb24gc2hvdWxkIGJlIGZldGNoZWQgZnJvbSB0aGUgY29udGFpbmVyLiBUaGUgZmlyc3QKLy8gZW50cnkgaW4gdGhhdCBhcnJheSAqbXVzdCogYmUgYSBzdHJpbmcuCi8vCi8vIFRPRE8oZmxvaXRzY2gpOiBDaGFuZ2UgdGVhck9mZkNvZGUgdG8gYWNjZXB0IHRoZSBkYXRhIGRpcmVjdGx5LCBvciBjcmVhdGUgYQovLyBkaWZmZXJlbnQgdGVhck9mZkNvZGU/CmZ1bmN0aW9uIGluc3RhbGxUZWFyT2ZmKAogICAgY29udGFpbmVyLCBnZXR0ZXJOYW1lLCBpc1N0YXRpYywgaXNJbnRlcmNlcHRlZCwgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwKICAgIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywgY2FsbE5hbWVzLCBmdW5zT3JOYW1lcywgZnVuVHlwZSwgYXBwbHlJbmRleCkgewogIC8vIEEgZnVuY3Rpb24gY2FuIGhhdmUgc2V2ZXJhbCBzdHVicyAoZm9yIGV4YW1wbGUgdG8gZmlsbCBpbiBvcHRpb25hbAogIC8vIGFyZ3VtZW50cykuIFdlIGNvbGxlY3QgdGhlc2UgZnVuY3Rpb25zIGluIHRoZSBgZnVuc2AgYXJyYXkuCiAgdmFyIGZ1bnMgPSBbXTsKICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bnNPck5hbWVzLmxlbmd0aDsgaSsrKSB7CiAgICB2YXIgZnVuID0gZnVuc09yTmFtZXNbaV07CiAgICBpZiAoKHR5cGVvZiBmdW4pID09ICdzdHJpbmcnKSBmdW4gPSBjb250YWluZXJbZnVuXTsKICAgIGZ1bi4jY2FsbE5hbWUgPSBjYWxsTmFtZXNbaV07CiAgICBmdW5zLnB1c2goZnVuKTsKICB9CgogIC8vIFRoZSBtYWluIGZ1bmN0aW9uIHRvIHdoaWNoIGFsbCBzdHVicyByZWRpcmVjdC4KICB2YXIgZnVuID0gZnVuc1swXTsKCiAgZnVuWyNhcmd1bWVudENvdW50XSA9IHJlcXVpcmVkUGFyYW1ldGVyQ291bnQ7CiAgZnVuWyNkZWZhdWx0QXJndW1lbnRWYWx1ZXNdID0gb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzOwogIHZhciByZWZsZWN0aW9uSW5mbyA9IGZ1blR5cGU7CiAgaWYgKHR5cGVvZiByZWZsZWN0aW9uSW5mbyA9PSAibnVtYmVyIikgewogICAgLy8gVGhlIHJlZmxlY3Rpb25JbmZvIGNhbiBlaXRoZXIgYmUgYSBmdW5jdGlvbiwgb3IgYSBwb2ludGVyIGludG8gdGhlIHR5cGVzCiAgICAvLyB0YWJsZS4gSWYgaXQgcG9pbnRzIGludG8gdGhlIHR5cGVzLXRhYmxlIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBpbmRleCwKICAgIC8vIGluIGNhc2UgdGhlIHRlYXItb2ZmIGlzIHBhcnQgb2YgYSBkZWZlcnJlZCBodW5rLgogICAgcmVmbGVjdGlvbkluZm8gPSByZWZsZWN0aW9uSW5mbyArIHR5cGVzT2Zmc2V0OwogIH0KICB2YXIgbmFtZSA9IGZ1bnNPck5hbWVzWzBdOwogIGZ1bi4jc3R1Yk5hbWUgPSBuYW1lOwogIHZhciBnZXR0ZXJGdW5jdGlvbiA9CiAgICAgIHRlYXJPZmYoZnVucywgYXBwbHlJbmRleCB8fCAwLCByZWZsZWN0aW9uSW5mbywgaXNTdGF0aWMsIG5hbWUsIGlzSW50ZXJjZXB0ZWQpOwogIGNvbnRhaW5lcltnZXR0ZXJOYW1lXSA9IGdldHRlckZ1bmN0aW9uOwogIGlmIChpc1N0YXRpYykgewogICAgZnVuLiR0ZWFyT2ZmID0gZ2V0dGVyRnVuY3Rpb247CiAgfQp9CgpmdW5jdGlvbiBpbnN0YWxsU3RhdGljVGVhck9mZigKICAgIGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwKICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgIGNhbGxOYW1lcywgZnVuc09yTmFtZXMsIGZ1blR5cGUsIGFwcGx5SW5kZXgpIHsKICAvLyBUT0RPKHNyYSk6IFNwZWNpYWxpemUgaW5zdGFsbFRlYXJPZmYgZm9yIHN0YXRpYyBtZXRob2RzLiBJdCBtaWdodCBiZQogIC8vIHBvc3NpYmxlIHRvIGhhbmRsZSBzb21lIHZlcnkgY29tbW9uIHNpbXBsZSBjYXNlcyBkaXJlY3RseS4KICByZXR1cm4gaW5zdGFsbFRlYXJPZmYoCiAgICAgIGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgdHJ1ZSwgZmFsc2UsCiAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgY2FsbE5hbWVzLCBmdW5zT3JOYW1lcywgZnVuVHlwZSwgYXBwbHlJbmRleCk7Cn0KCmZ1bmN0aW9uIGluc3RhbGxJbnN0YW5jZVRlYXJPZmYoCiAgICBjb250YWluZXIsIGdldHRlck5hbWUsIGlzSW50ZXJjZXB0ZWQsCiAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICBjYWxsTmFtZXMsIGZ1bnNPck5hbWVzLCBmdW5UeXBlLCBhcHBseUluZGV4KSB7CiAgLy8gVE9ETyhzcmEpOiBTcGVjaWFsaXplIGluc3RhbGxUZWFyT2ZmIGZvciBpbnN0YW5jZSBtZXRob2RzLgogIHJldHVybiBpbnN0YWxsVGVhck9mZigKICAgICAgY29udGFpbmVyLCBnZXR0ZXJOYW1lLCBmYWxzZSwgaXNJbnRlcmNlcHRlZCwKICAgICAgcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICBjYWxsTmFtZXMsIGZ1bnNPck5hbWVzLCBmdW5UeXBlLCBhcHBseUluZGV4KTsKfQoKLy8gSW5zdGVhZCBvZiBzZXR0aW5nIHRoZSBpbnRlcmNlcHRvciB0YWdzIGRpcmVjdGx5IHdlIHVzZSB0aGlzIHVwZGF0ZQovLyBmdW5jdGlvbi4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIGRlZmVycmVkIGZyYWdtZW50cyB0byBjb250cmlidXRlIHRvIHRoZQovLyBlbWJlZGRlZCBnbG9iYWwuCmZ1bmN0aW9uIHNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWcobmV3VGFncykgewogIHZhciB0YWdzID0gI2VtYmVkZGVkSW50ZXJjZXB0b3JUYWdzOwogIGlmICghdGFncykgewogICAgI2VtYmVkZGVkSW50ZXJjZXB0b3JUYWdzID0gbmV3VGFnczsKICAgIHJldHVybjsKICB9CiAgY29weVByb3BlcnRpZXMobmV3VGFncywgdGFncyk7Cn0KCi8vIEluc3RlYWQgb2Ygc2V0dGluZyB0aGUgbGVhZiB0YWdzIGRpcmVjdGx5IHdlIHVzZSB0aGlzIHVwZGF0ZQovLyBmdW5jdGlvbi4gVGhpcyBtYWtlcyBpdCBlYXNpZXIgZm9yIGRlZmVycmVkIGZyYWdtZW50cyB0byBjb250cmlidXRlIHRvIHRoZQovLyBlbWJlZGRlZCBnbG9iYWwuCmZ1bmN0aW9uIHNldE9yVXBkYXRlTGVhZlRhZ3MobmV3VGFncykgewogIHZhciB0YWdzID0gI2VtYmVkZGVkTGVhZlRhZ3M7CiAgaWYgKCF0YWdzKSB7CiAgICAjZW1iZWRkZWRMZWFmVGFncyA9IG5ld1RhZ3M7CiAgICByZXR1cm47CiAgfQogIGNvcHlQcm9wZXJ0aWVzKG5ld1RhZ3MsIHRhZ3MpOwp9CgovLyBVcGRhdGVzIHRoZSB0eXBlcyBlbWJlZGRlZCBnbG9iYWwuCmZ1bmN0aW9uIHVwZGF0ZVR5cGVzKG5ld1R5cGVzKSB7CiAgdmFyIHR5cGVzID0gI2VtYmVkZGVkVHlwZXM7CiAgdmFyIGxlbmd0aCA9IHR5cGVzLmxlbmd0aDsKICAvLyBUaGUgdGVhci1vZmYgZnVuY3Rpb24gdXNlcyBhbm90aGVyICd0eXBlc09mZnNldCcgdmFsdWUgY2FjaGVkIGluCiAgLy8gW2luaXRpYWxpemVEZWZlcnJlZEh1bmtdIHNvIFt1cGRhdGVUeXBlc10gY2FuIGJlIGNhbGxlZCBlaXRoZXIgYmVmb3JlIG9yCiAgLy8gYWZ0ZXIgdGhlIHRlYXJvZmZzIGhhdmUgYmVlbiBpbnN0YWxsZWQuCiAgdHlwZXMucHVzaC5hcHBseSh0eXBlcywgbmV3VHlwZXMpOwogIHJldHVybiBsZW5ndGg7Cn0KCi8vIFVwZGF0ZXMgdGhlIGdpdmVuIGhvbGRlciB3aXRoIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBbbmV3SG9sZGVyXS4KLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHdoZW4gYSBkZWZlcnJlZCBmcmFnbWVudCBpcyBpbml0aWFsaXplZC4KZnVuY3Rpb24gdXBkYXRlSG9sZGVyKGhvbGRlciwgbmV3SG9sZGVyKSB7CiAgY29weVByb3BlcnRpZXMobmV3SG9sZGVyLCBob2xkZXIpOwogIHJldHVybiBob2xkZXI7Cn0KCnZhciAjaHVua0hlbHBlcnMgPSAoZnVuY3Rpb24oKXsKICB2YXIgbWtJbnN0YW5jZSA9IGZ1bmN0aW9uKAogICAgICBpc0ludGVyY2VwdGVkLCByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgIGNhbGxOYW1lcywgYXBwbHlJbmRleCkgewogICAgcmV0dXJuIGZ1bmN0aW9uKGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgbmFtZSwgZnVuVHlwZSkgewogICAgICByZXR1cm4gaW5zdGFsbEluc3RhbmNlVGVhck9mZigKICAgICAgICAgIGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgaXNJbnRlcmNlcHRlZCwKICAgICAgICAgIHJlcXVpcmVkUGFyYW1ldGVyQ291bnQsIG9wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICAgIGNhbGxOYW1lcywgW25hbWVdLCBmdW5UeXBlLCBhcHBseUluZGV4KTsKICAgIH0KICB9LAoKICBta1N0YXRpYyA9IGZ1bmN0aW9uKAogICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgIGNhbGxOYW1lcywgYXBwbHlJbmRleCkgewogICAgcmV0dXJuIGZ1bmN0aW9uKGNvbnRhaW5lciwgZ2V0dGVyTmFtZSwgbmFtZSwgZnVuVHlwZSkgewogICAgICByZXR1cm4gaW5zdGFsbFN0YXRpY1RlYXJPZmYoCiAgICAgICAgICBjb250YWluZXIsIGdldHRlck5hbWUsCiAgICAgICAgICByZXF1aXJlZFBhcmFtZXRlckNvdW50LCBvcHRpb25hbFBhcmFtZXRlckRlZmF1bHRWYWx1ZXMsCiAgICAgICAgICBjYWxsTmFtZXMsIFtuYW1lXSwgZnVuVHlwZSwgYXBwbHlJbmRleCk7CiAgICB9CiAgfTsKCiAgLy8gVE9ETyhzcmEpOiBNaW5pZnkgcHJvcGVydGllcyBvZiAnaHVua0hlbHBlcnMnLgogIHJldHVybiB7CiAgICBpbmhlcml0OiBpbmhlcml0LAogICAgaW5oZXJpdE1hbnk6IGluaGVyaXRNYW55LAogICAgbWl4aW46IG1peGluLAogICAgaW5zdGFsbFN0YXRpY1RlYXJPZmY6IGluc3RhbGxTdGF0aWNUZWFyT2ZmLAogICAgaW5zdGFsbEluc3RhbmNlVGVhck9mZjogaW5zdGFsbEluc3RhbmNlVGVhck9mZiwKCiAgICAgICAgLy8gVW5pbnRlcmNlcHRlZCBtZXRob2RzLgogICAgX2luc3RhbmNlXzB1OiBta0luc3RhbmNlKDAsIDAsIG51bGwsIFsjY2FsbDBzZWxlY3Rvcl0sIDApLAogICAgX2luc3RhbmNlXzF1OiBta0luc3RhbmNlKDAsIDEsIG51bGwsIFsjY2FsbDFzZWxlY3Rvcl0sIDApLAogICAgX2luc3RhbmNlXzJ1OiBta0luc3RhbmNlKDAsIDIsIG51bGwsIFsjY2FsbDJzZWxlY3Rvcl0sIDApLAoKICAgICAgICAvLyBJbnRlcmNlcHRlZCBtZXRob2RzLgogICAgX2luc3RhbmNlXzBpOiBta0luc3RhbmNlKDEsIDAsIG51bGwsIFsjY2FsbDBzZWxlY3Rvcl0sIDApLAogICAgX2luc3RhbmNlXzFpOiBta0luc3RhbmNlKDEsIDEsIG51bGwsIFsjY2FsbDFzZWxlY3Rvcl0sIDApLAogICAgX2luc3RhbmNlXzJpOiBta0luc3RhbmNlKDEsIDIsIG51bGwsIFsjY2FsbDJzZWxlY3Rvcl0sIDApLAoKICAgICAgICAvLyBTdGF0aWMgbWV0aG9kcy4KICAgIF9zdGF0aWNfMDogbWtTdGF0aWMoMCwgbnVsbCwgWyNjYWxsMHNlbGVjdG9yXSwgMCksCiAgICBfc3RhdGljXzE6IG1rU3RhdGljKDEsIG51bGwsIFsjY2FsbDFzZWxlY3Rvcl0sIDApLAogICAgX3N0YXRpY18yOiBta1N0YXRpYygyLCBudWxsLCBbI2NhbGwyc2VsZWN0b3JdLCAwKSwKCiAgICBtYWtlQ29uc3RMaXN0OiBtYWtlQ29uc3RMaXN0LAogICAgbGF6eTogbGF6eSwKICAgIHVwZGF0ZUhvbGRlcjogdXBkYXRlSG9sZGVyLAogICAgY29udmVydFRvRmFzdE9iamVjdDogY29udmVydFRvRmFzdE9iamVjdCwKICAgIHNldEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeTogc2V0RnVuY3Rpb25OYW1lc0lmTmVjZXNzYXJ5LAogICAgdXBkYXRlVHlwZXM6IHVwZGF0ZVR5cGVzLAogICAgc2V0T3JVcGRhdGVJbnRlcmNlcHRvcnNCeVRhZzogc2V0T3JVcGRhdGVJbnRlcmNlcHRvcnNCeVRhZywKICAgIHNldE9yVXBkYXRlTGVhZlRhZ3M6IHNldE9yVXBkYXRlTGVhZlRhZ3MsCiAgfTsKfSkoKTsKCi8vIEV2ZXJ5IGRlZmVycmVkIGh1bmsgKGkuZS4gZnJhZ21lbnQpIGlzIGEgZnVuY3Rpb24gdGhhdCB3ZSBjYW4gaW52b2tlIHRvCi8vIGluaXRpYWxpemUgaXQuIEF0IHRoaXMgbW9tZW50IGl0IGNvbnRyaWJ1dGVzIGl0cyBkYXRhIHRvIHRoZSBtYWluIGh1bmsuCmZ1bmN0aW9uIGluaXRpYWxpemVEZWZlcnJlZEh1bmsoaHVuaykgewogIC8vIFVwZGF0ZSB0aGUgdHlwZXNPZmZzZXQgZm9yIHRoZSBuZXh0IGRlZmVycmVkIGxpYnJhcnkuCiAgdHlwZXNPZmZzZXQgPSAjZW1iZWRkZWRUeXBlcy5sZW5ndGg7CgogIC8vIFRPRE8oZmxvaXRzY2gpOiBleHRlbmQgbmF0aXZlcy4KICBodW5rKGh1bmtIZWxwZXJzLCAjZW1iZWRkZWRHbG9iYWxzT2JqZWN0LCBob2xkZXJzLCAjc3RhdGljU3RhdGUpOwp9CgovLyBSZXR1cm5zIHRoZSBnbG9iYWwgd2l0aCB0aGUgZ2l2ZW4gW25hbWVdLgpmdW5jdGlvbiBnZXRHbG9iYWxGcm9tTmFtZShuYW1lKSB7CiAgLy8gVE9ETyhmbG9pdHNjaCk6IHdlIGFyZSBydW5uaW5nIHRocm91Z2ggYWxsIGhvbGRlcnMuIFNpbmNlIG5lZ2F0aXZlCiAgLy8gbG9va3VwcyBhcmUgZXhwZW5zaXZlIHdlIG1pZ2h0IG5lZWQgdG8gaW1wcm92ZSB0aGlzLgogIC8vIFJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IGFsbCBuYW1lcyBhcmUgdW5pcXVlIGFjcm9zcyBhbGwgaG9sZGVycy4KICBmb3IgKHZhciBpID0gMDsgaSA8IGhvbGRlcnMubGVuZ3RoOyBpKyspIHsKICAgIC8vIFRoZSBjb25zdGFudCBob2xkZXIgcmV1c2VzIHRoZSBzYW1lIG5hbWVzLiBUaGVyZWZvcmUgd2UgbXVzdCBza2lwIGl0LgogICAgaWYgKGhvbGRlcnNbaV0gPT0gI2NvbnN0YW50SG9sZGVyUmVmZXJlbmNlKSBjb250aW51ZTsKICAgIC8vIFJlbGllcyBvbiB0aGUgZmFjdCB0aGF0IGFsbCB2YXJpYWJsZXMgYXJlIHVuaXF1ZS4KICAgIGlmIChob2xkZXJzW2ldW25hbWVdKSByZXR1cm4gaG9sZGVyc1tpXVtuYW1lXTsKICB9Cn0KCmlmICgjaGFzU29mdERlZmVycmVkQ2xhc3NlcykgewogIC8vIExvYWRzIHRoZSBzb2Z0LWRlZmVycmVkIGNsYXNzZXMgYW5kIGluaXRpYWxpemVzIHRoZW0uCiAgLy8gVXBkYXRlcyB0aGUgcHJvdG90eXBlIG9mIHRoZSBnaXZlbiBvYmplY3QuCiAgZnVuY3Rpb24gc29mdERlZihvKSB7CiAgICBzb2Z0RGVmID0gZnVuY3Rpb24obykge307ICAvLyBSZXBsYWNlIG91cnNlbHZlcy4KICAgICNkZWZlcnJlZEdsb2JhbFsjc29mdElkXSgKICAgICAgICBob2xkZXJzLCAjZW1iZWRkZWRHbG9iYWxzT2JqZWN0LCAjc3RhdGljU3RhdGUsCiAgICAgICAgaHVua0hlbHBlcnMpOwogICAgaWYgKG8gIT0gbnVsbCkgewogICAgICAvLyBUT0RPKDI5NTc0KTogc2hvdWxkIHdlIGRvIHNvbWV0aGluZyBkaWZmZXJlbnQgZm9yIEZpcmVmb3g/CiAgICAgIC8vIElmIHdlIHJlY29tbWVuZCB0aGF0IHRoZSBwcm9ncmFtIHRyaWdnZXJzIHRoZSBsb2FkIGJ5IGl0c2VsZiBiZWZvcmUKICAgICAgLy8gY2xhc3NlcyBhcmUgbmVlZGVkLCB0aGVuIHRoaXMgbGluZSBzaG91bGQgcmFyZWx5IGJlIGhpdC4KICAgICAgLy8gQWxzbywgaXQgaXMgb25seSBoaXQgYXQgbW9zdCBvbmNlIChwZXIgc29mdC1kZWZlcnJlZCBjaHVuaykuCiAgICAgIG8uX19wcm90b19fID0gby5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7CiAgICB9CiAgfQp9CgppZiAoI2lzVHJhY2tpbmdBbGxvY2F0aW9ucykgewogIHZhciBhbGxvY2F0aW9ucyA9ICNkZWZlcnJlZEdsb2JhbFsnYWxsb2NhdGlvbnMnXSA9IHt9Owp9CgovLyBDcmVhdGVzIHRoZSBob2xkZXJzLgojaG9sZGVyczsKCi8vIElmIHRoZSBuYW1lIGlzIG5vdCBzZXQgb24gdGhlIGZ1bmN0aW9ucywgZG8gaXQgbm93LgpodW5rSGVscGVycy5zZXRGdW5jdGlvbk5hbWVzSWZOZWNlc3NhcnkoaG9sZGVycyk7CgovLyBUT0RPKGZsb2l0c2NoKTogd2Ugc2hvdWxkIGJ1aWxkIHRoaXMgb2JqZWN0IGFzIGEgbGl0ZXJhbC4KdmFyICNzdGF0aWNTdGF0ZURlY2xhcmF0aW9uID0ge307CgovLyBTZXRzIHRoZSBwcm90b3R5cGVzIG9mIGNsYXNzZXMuCiNwcm90b3R5cGVzOwovLyBTZXRzIGFsaWFzZXMgb2YgbWV0aG9kcyAob24gdGhlIHByb3RvdHlwZXMgb2YgY2xhc3NlcykuCiNhbGlhc2VzOwovLyBJbnN0YWxscyB0aGUgdGVhci1vZmZzIG9mIGZ1bmN0aW9ucy4KI3RlYXJPZmZzOwovLyBCdWlsZHMgdGhlIGluaGVyaXRhbmNlIHN0cnVjdHVyZS4KI2luaGVyaXRhbmNlOwoKLy8gRW1pdHMgdGhlIGVtYmVkZGVkIGdsb2JhbHMuIFRoaXMgbmVlZHMgdG8gYmUgYmVmb3JlIGNvbnN0YW50cyBzbyB0aGUgZW1iZWRkZWQKLy8gZ2xvYmFsIHR5cGUgcmVzb3VyY2VzIGFyZSBhdmFpbGFibGUgZm9yIGdlbmVyYXRpbmcgY29uc3RhbnRzLgojZW1iZWRkZWRHbG9iYWxzUGFydDE7CgovLyBBZGRzIHRoZSBzdWJ0eXBlIHJ1bGVzIGZvciB0aGUgbmV3IFJUSS4KI3R5cGVSdWxlczsKCi8vIEluc3RhbnRpYXRlcyBhbGwgY29uc3RhbnRzLgojY29uc3RhbnRzOwoKLy8gQWRkcyB0byB0aGUgZW1iZWRkZWQgZ2xvYmFscy4gQSBmZXcgZ2xvYmFscyByZWZlciB0byBjb25zdGFudHMuCiNlbWJlZGRlZEdsb2JhbHNQYXJ0MjsgCgovLyBJbml0aWFsaXplcyB0aGUgc3RhdGljIG5vbi1maW5hbCBmaWVsZHMgKHdpdGggdGhlaXIgY29uc3RhbnQgdmFsdWVzKS4KI3N0YXRpY05vbkZpbmFsRmllbGRzOwovLyBDcmVhdGVzIGxhenkgZ2V0dGVycyBmb3Igc3RhdGljcyB0aGF0IG11c3QgcnVuIGluaXRpYWxpemVycyBvbiBmaXJzdCBhY2Nlc3MuCiNsYXp5U3RhdGljczsKCi8vIFNldHMgdXAgdGhlIG5hdGl2ZSBzdXBwb3J0LgovLyBOYXRpdmUtc3VwcG9ydCB1c2VzIHNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWcgYW5kIHNldE9yVXBkYXRlTGVhZlRhZ3MuCiNuYXRpdmVTdXBwb3J0OwoKLy8gU2V0cyB1cCB0aGUganMtaW50ZXJvcCBzdXBwb3J0LgojanNJbnRlcm9wU3VwcG9ydDsKCi8vIEVuc3VyZSBob2xkZXJzIGFyZSBpbiBmYXN0IG1vZGUsIG5vdyB3ZSBoYXZlIGZpbmlzaGVkIGFkZGluZyB0aGluZ3MuCmNvbnZlcnRBbGxUb0Zhc3RPYmplY3QoaG9sZGVycyk7CmNvbnZlcnRUb0Zhc3RPYmplY3QoI3N0YXRpY1N0YXRlKTsKCi8vIEludm9rZXMgbWFpbiAobWFraW5nIHN1cmUgdGhhdCBpdCByZWNvcmRzIHRoZSAnY3VycmVudC1zY3JpcHQnIHZhbHVlKS4KI2ludm9rZU1haW47Cn0pKCkKaHVua0hlbHBlcnNkaXJlY3RBY2Nlc3NUZXN0RXhwcmVzc2lvbiAgKGZ1bmN0aW9uICgpIHsKICAgIHZhciBjbHMgPSBmdW5jdGlvbiAoKSB7fTsKICAgIGNscy5wcm90b3R5cGUgPSB7J3AnOiB7fX07CiAgICB2YXIgb2JqZWN0ID0gbmV3IGNscygpOwogICAgaWYgKCEob2JqZWN0Ll9fcHJvdG9fXyAmJiBvYmplY3QuX19wcm90b19fLnAgPT09IGNscy5wcm90b3R5cGUucCkpCiAgICAgIHJldHVybiBmYWxzZTsKCiAgICB0cnkgewogICAgICAvLyBBcmUgd2UgcnVubmluZyBvbiBhIHBsYXRmb3JtIHdoZXJlIHRoZSBwZXJmb3JtYW5jZSBpcyBnb29kPwogICAgICAvLyAoaS5lLiBDaHJvbWUgb3IgZDgpLgoKICAgICAgLy8gQ2hyb21lIHVzZXJBZ2VudD8KICAgICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT0gInVuZGVmaW5lZCIgJiYKICAgICAgICAgIHR5cGVvZiBuYXZpZ2F0b3IudXNlckFnZW50ID09ICJzdHJpbmciICYmCiAgICAgICAgICBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIkNocm9tZS8iKSA+PSAwKSByZXR1cm4gdHJ1ZTsKICAgICAgLy8gZDggdmVyc2lvbigpIGxvb2tzIGxpa2UgIk4uTi5OLk4iLCBqc3NoZWxsIHZlcnNpb24oKSBsaWtlICJOIi4KICAgICAgaWYgKHR5cGVvZiB2ZXJzaW9uID09ICJmdW5jdGlvbiIgJiYKICAgICAgICAgIHZlcnNpb24ubGVuZ3RoID09IDApIHsKICAgICAgICB2YXIgdiA9IHZlcnNpb24oKTsKICAgICAgICBpZiAoL15cZCtcLlxkK1wuXGQrXC5cZCskLy50ZXN0KHYpKSByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfSBjYXRjaChfKSB7fQoKICAgIHJldHVybiBmYWxzZTsKICB9KSgpCmN5Y2xpY1Rocm93dGVhck9mZkNvZGVlbWJlZGRlZFR5cGVzZW1iZWRkZWRJbnRlcmNlcHRvclRhZ3NlbWJlZGRlZExlYWZUYWdzZW1iZWRkZWRHbG9iYWxzT2JqZWN0c3RhdGljU3RhdGVEZWNsYXJhdGlvbnN0YXRpY1N0YXRlY29uc3RhbnRIb2xkZXJSZWZlcmVuY2VidWlsZENvbnN0YW50SG9sZGVyUmVmZXJlbmNlZGVmYXVsdEFyZ3VtZW50VmFsdWVzZGVmZXJyZWRHbG9iYWxzb2Z0SWRpc1RyYWNraW5nQWxsb2NhdGlvbnNwcm90b3R5cGVzZW1pdFByb3RvdHlwZXNpbmhlcml0YW5jZWVtaXRJbmhlcml0YW5jZWFsaWFzZXNlbWl0SW5zdGFuY2VNZXRob2RBbGlhc2VzdGVhck9mZnNlbWl0SW5zdGFsbFRlYXJPZmZzZW1pdENvbnN0YW50c2VtaXRTdGF0aWNOb25GaW5hbEZpZWxkc2xhenlTdGF0aWNzZW1pdExhemlseUluaXRpYWxpemVkU3RhdGljc2VtYmVkZGVkR2xvYmFsc1BhcnQxZW1pdEVtYmVkZGVkR2xvYmFsc1BhcnQxZW1iZWRkZWRHbG9iYWxzUGFydDJlbWl0RW1iZWRkZWRHbG9iYWxzUGFydDJlbWl0VHlwZVJ1bGVzbmF0aXZlU3VwcG9ydGVtaXROYXRpdmVTdXBwb3J0anNJbnRlcm9wU3VwcG9ydGNhbGwwc2VsZWN0b3JjYWxsMXNlbGVjdG9yY2FsbDJzZWxlY3RvciNkZWZlcnJlZEdsb2JhbFsjc29mdElkXSA9CiAgZnVuY3Rpb24oaG9sZGVyc0xpc3QsICNlbWJlZGRlZEdsb2JhbHNPYmplY3QsICNzdGF0aWNTdGF0ZSwKICAgICAgICAgICBodW5rSGVscGVycykgewoKLy8gSW5zdGFsbHMgdGhlIGhvbGRlcnMgYXMgbG9jYWwgdmFyaWFibGVzLgojaW5zdGFsbEhvbGRlcnNBc0xvY2FsczsKLy8gU2V0cyB0aGUgcHJvdG90eXBlcyBvZiB0aGUgbmV3IGNsYXNzZXMuCiNwcm90b3R5cGVzOwovLyBTZXRzIGFsaWFzZXMgb2YgbWV0aG9kcyAob24gdGhlIHByb3RvdHlwZXMgb2YgY2xhc3NlcykuCiNhbGlhc2VzOwovLyBJbnN0YWxscyB0aGUgdGVhci1vZmZzIG9mIGZ1bmN0aW9ucy4KI3RlYXJPZmZzOwovLyBCdWlsZHMgdGhlIGluaGVyaXRhbmNlIHN0cnVjdHVyZS4KI2luaGVyaXRhbmNlOwp9aW5zdGFsbEhvbGRlcnNBc0xvY2Fsc2VtaXRJbnN0YWxsSG9sZGVyc0FzTG9jYWxzaG9sZGVySW5pdHNob2xkZXJzTGlzdFsjXXVwZGF0ZUhvbGRlckFzc2lnbm1lbnRzYWN0aXZlSG9sZGVycyNob2xkZXIgPSBodW5rSGVscGVycy51cGRhdGVIb2xkZXIoaG9sZGVyc0xpc3RbI2luZGV4XSwgI2hvbGRlcikjaG9sZGVyID0gaG9sZGVyc0xpc3RbI2luZGV4XWNsYXNzUHJvdG90eXBlc2luY2x1ZGVDbG9zdXJlc2Nsb3N1cmVQcm90b3R5cGVzbWV0aG9kQWxpYXNlc2xhenlJbml0aWFsaXplcnNmdW5jdGlvbihodW5rSGVscGVycywgI2VtYmVkZGVkR2xvYmFsc09iamVjdCwgaG9sZGVyc0xpc3QsICNzdGF0aWNTdGF0ZSkgewoKLy8gQnVpbGRzIHRoZSBob2xkZXJzLiBUaGV5IG9ubHkgY29udGFpbiB0aGUgZGF0YSBmb3IgbmV3IGhvbGRlcnMuCiNob2xkZXJzOwoKLy8gSWYgdGhlIG5hbWUgaXMgbm90IHNldCBvbiB0aGUgZnVuY3Rpb25zLCBkbyBpdCBub3cuCmh1bmtIZWxwZXJzLnNldEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeSgjZGVmZXJyZWRIb2xkZXJzTGlzdCk7CgovLyBVcGRhdGVzIHRoZSBob2xkZXJzIG9mIHRoZSBtYWluLWZyYWdtZW50LiBVc2VzIHRoZSBwcm92aWRlZCBob2xkZXJzTGlzdCB0bwovLyBhY2Nlc3MgdGhlIG1haW4gaG9sZGVycy4KLy8gVGhlIGxvY2FsIGhvbGRlcnMgYXJlIHJlcGxhY2VkIGJ5IHRoZSBjb21iaW5lZCBob2xkZXJzLiBUaGlzIGlzIG5lY2Vzc2FyeQovLyBmb3IgdGhlIGluaGVyaXRhbmNlIHNldHVwIGJlbG93LgojdXBkYXRlSG9sZGVyczsKLy8gU2V0cyB0aGUgcHJvdG90eXBlcyBvZiB0aGUgbmV3IGNsYXNzZXMuCiNwcm90b3R5cGVzOwovLyBBZGQgc2lnbmF0dXJlIGZ1bmN0aW9uIHR5cGVzIGFuZCBjb21wdXRlIHRoZSB0eXBlcyBvZmZzZXQgaW4gYGluaXQudHlwZXNgLgovLyBUaGVzZSBjYW4gb25seSByZWZlciB0byByZWd1bGFyIGNsYXNzZXMgYW5kIGluIERhcnQgMiBvbmx5IGNsb3N1cmVzIGhhdmUKLy8gZnVuY3Rpb24gdHlwZXMgc28gdGhlIGB0eXBlc09mZnNldGAgaGFzIGJlZW4gc2FmZWx5IGNvbXB1dGVkIGJlZm9yZSBpdCdzCi8vIHJlZmVycmVkIGluIHRoZSBzaWduYXR1cmVzIG9mIHRoZSBgY2xvc3VyZXNgIGJlbG93Lgp2YXIgI3R5cGVzT2Zmc2V0ID0gaHVua0hlbHBlcnMudXBkYXRlVHlwZXMoI3R5cGVzKTsKI2Nsb3N1cmVzOwovLyBTZXRzIGFsaWFzZXMgb2YgbWV0aG9kcyAob24gdGhlIHByb3RvdHlwZXMgb2YgY2xhc3NlcykuCiNhbGlhc2VzOwovLyBJbnN0YWxscyB0aGUgdGVhci1vZmZzIG9mIGZ1bmN0aW9ucy4KI3RlYXJPZmZzOwovLyBCdWlsZHMgdGhlIGluaGVyaXRhbmNlIHN0cnVjdHVyZS4KI2luaGVyaXRhbmNlOwoKLy8gQWRkcyB0aGUgc3VidHlwZSBydWxlcyBmb3IgdGhlIG5ldyBSVEkuCiN0eXBlUnVsZXM7CgovLyBJbnN0YW50aWF0ZXMgYWxsIGNvbnN0YW50cyBvZiB0aGlzIGRlZmVycmVkIGZyYWdtZW50LgovLyBOb3RlIHRoYXQgdGhlIGNvbnN0YW50LWhvbGRlciBoYXMgYmVlbiB1cGRhdGVkIGVhcmxpZXIgYW5kIHN0b3JpbmcgdGhlCi8vIGNvbnN0YW50IHZhbHVlcyBpbiB0aGUgY29uc3RhbnQtaG9sZGVyIG1ha2VzIHRoZW0gYXZhaWxhYmxlIGdsb2JhbGx5LgojY29uc3RhbnRzOwovLyBJbml0aWFsaXplcyB0aGUgc3RhdGljIG5vbi1maW5hbCBmaWVsZHMgKHdpdGggdGhlaXIgY29uc3RhbnQgdmFsdWVzKS4KI3N0YXRpY05vbkZpbmFsRmllbGRzOwovLyBDcmVhdGVzIGxhenkgZ2V0dGVycyBmb3Igc3RhdGljcyB0aGF0IG11c3QgcnVuIGluaXRpYWxpemVycyBvbiBmaXJzdCBhY2Nlc3MuCiNsYXp5U3RhdGljczsKCi8vIE5hdGl2ZS1zdXBwb3J0IHVzZXMgc2V0T3JVcGRhdGVJbnRlcmNlcHRvcnNCeVRhZyBhbmQgc2V0T3JVcGRhdGVMZWFmVGFncy4KI25hdGl2ZVN1cHBvcnQ7Cn1kZWZlcnJlZEhvbGRlcnNMaXN0dXBkYXRlSG9sZGVyc3Byb3BlcnR5TWFwZW1pdFN0YXRpY01ldGhvZGVtaXRDb25zdHJ1Y3RvcmhvbGRlckluaXRpYWxpemF0aW9uc3ZhciBob2xkZXJzID0gI2NvbnN0YW50SG9sZGVyanNNZXRob2RzZnVuY3Rpb24gIygpIHsgfXRoaXNSZWZzb2Z0RGVmKHRoaXMpcXVhbGlmaWVkTmFtZWFsbG9jYXRpb25zWyIiXSA9IHRydWVlbWl0dGVkRmllbGRzdW5kZXJzY29yZXZhciAjID0gdGhpcztjaGFpbkxlbmd0aHByZXZpb3VzQ29uc3RhbnRmbHVzaEFzc2lnbm1lbnQjOyMuIyA9ICNmdW5jdGlvbiAjKCMpIHsgIyB9cHJvdG8jLnByb3RvdHlwZSA9ICM7ZW1pdFByb3RvdHlwZWdldHRlcnNTZXR0ZXJzZ2VuZXJhdGVHZXR0ZXJzU2V0dGVyc2FsbE1ldGhvZHNlbWl0SW5zdGFuY2VNZXRob2Rwcm9wTm8gY29uc3RhbnQgdmFsdWUgZm9yIGVsaWRlZCBmaWVsZDogZnVuY3Rpb24oKSB7IHJldHVybiAjOyB9ZnVuY3Rpb24ocmVjZWl2ZXIpIHsgcmV0dXJuIHJlY2VpdmVyWyNdOyB9ZnVuY3Rpb24ocmVjZWl2ZXIpIHsgcmV0dXJuIHRoaXNbI107IH1mdW5jdGlvbigpIHsgcmV0dXJuIHRoaXNbI107IH1mdW5jdGlvbigpIHsgfWZ1bmN0aW9uKHJlY2VpdmVyLCB2YWwpIHsgcmV0dXJuIHJlY2VpdmVyWyNdID0gdmFsOyB9ZnVuY3Rpb24ocmVjZWl2ZXIsIHZhbCkgeyByZXR1cm4gdGhpc1sjXSA9IHZhbDsgfWZ1bmN0aW9uKHZhbCkgeyByZXR1cm4gdGhpc1sjXSA9IHZhbDsgfWdldHRlcnNzdHViTWV0aG9kZm9yY2VBZGRhcHBseU5hbWVfZW5jb2RlT3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzaW5oZXJpdENhbGxzbWl4aW5DYWxsc2NsYXNzZXNJbkZyYWdtZW50X21peGluaHVua0hlbHBlcnMubWl4aW5zdXBlcmNsYXNzUmVmZXJlbmNlX2luaGVyaXRodW5rSGVscGVycy5pbmhlcml0bGlzdEVsZW1lbnRzZmlyc3RDbGFzc19pbmhlcml0TWFueWh1bmtIZWxwZXJzLmluaGVyaXRNYW55d3JhcFBoYXNlZmlyc3RBbGlhc3ZhciBfID0gIy5wcm90b3R5cGU7XyA9ICMucHJvdG90eXBlXy4jID0gXy4jKGZ1bmN0aW9uICMoKXsjfSkoKTtlbWl0SW5zdGFsbFRlYXJPZmZjYWxsTmFtZXNmdW5zT3JOYW1lc2FkZEZ1bk9yTmFtZWNhbGxOYW1lQXJyYXlmdW5zT3JOYW1lc0FycmF5aW5zdGFsbF9zdGF0aWNfaHVua0hlbHBlcnMuX3N0YXRpY18gICAgICAgICAgICAgICAgI2luc3RhbGwoI2NvbnRhaW5lciwgI2dldHRlck5hbWUsICNuYW1lLCAjZnVuVHlwZSlmdW5UeXBlaW5zdGFsbGVkTmFtZV9zdGF0aWNodW5rSGVscGVycy5pbnN0YWxsU3RhdGljVGVhck9mZiAgICAgICAgICAgICNpbnN0YWxsKCNjb250YWluZXIsICNnZXR0ZXJOYW1lLAogICAgICAgICAgICAgICAgICAgICAjcmVxdWlyZWRQYXJhbWV0ZXJDb3VudCwgI29wdGlvbmFsUGFyYW1ldGVyRGVmYXVsdFZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICNjYWxsTmFtZXMsICNmdW5zT3JOYW1lcywgI2Z1blR5cGUsICNhcHBseUluZGV4KWlzSW50ZXJjZXB0ZWRUYWdfaW5zdGFuY2VfaHVua0hlbHBlcnMuX2luc3RhbmNlX19pbnN0YW5jZWh1bmtIZWxwZXJzLmluc3RhbGxJbnN0YW5jZVRlYXJPZmYgICAgICAgICAgICAjaW5zdGFsbCgjY29udGFpbmVyLCAjZ2V0dGVyTmFtZSwgI2lzSW50ZXJjZXB0ZWQsCiAgICAgICAgICAgICAgICAgICAgICNyZXF1aXJlZFBhcmFtZXRlckNvdW50LCAjb3B0aW9uYWxQYXJhbWV0ZXJEZWZhdWx0VmFsdWVzLAogICAgICAgICAgICAgICAgICAgICAjY2FsbE5hbWVzLCAjZnVuc09yTmFtZXMsICNmdW5UeXBlLCAjYXBwbHlJbmRleCl2YXIgXztpbnN0YWxsVGVhck9mZnNoYXNMaXN0dmFyIG1ha2VDb25zdExpc3QgPSBodW5rSGVscGVycy5tYWtlQ29uc3RMaXN0OyMuIyA9ICM7Tm8gY29kZSBmb3IgIy4jID0gIygpO3N0YXRpY0ZpZWxkcyMoIywgIywgIywgIyk7X2xhenlodW5rSGVscGVycy5sYXp5ZW1pdEVtYmVkZGVkR2xvYmFsc0ZvckRlZmVycmVkTG9hZGluZ09iamVjdC5jcmVhdGUobnVsbClpc0h1bmtMb2FkZWRGdW5jdGlvbmZ1bmN0aW9uKGhhc2gpIHsgcmV0dXJuICEhW2hhc2hdOyB9aXNIdW5rSW5pdGlhbGl6ZWRGdW5jdGlvbmZ1bmN0aW9uKGhhc2gpIHsgcmV0dXJuICEhI2RlZmVycmVkSW5pdGlhbGl6ZWRbaGFzaF07IH1pbml0aWFsaXplTG9hZGVkSHVua0Z1bmN0aW9uICAgICAgICAgICAgZnVuY3Rpb24oaGFzaCkgewogICAgICAgICAgICAgIHZhciBodW5rID0gW2hhc2hdOwogICAgICAgICAgICAgIGlmIChodW5rID09IG51bGwpIHsKICAgICAgICAgICAgICAgIHRocm93ICJEZWZlcnJlZExvYWRpbmcgc3RhdGUgZXJyb3I6IGNvZGUgd2l0aCBoYXNoICciICsKICAgICAgICAgICAgICAgICAgICBoYXNoICsgIicgd2FzIG5vdCBsb2FkZWQiOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpbml0aWFsaXplRGVmZXJyZWRIdW5rKGh1bmspOwogICAgICAgICAgICAgICNkZWZlcnJlZEluaXRpYWxpemVkW2hhc2hdID0gdHJ1ZTsKICAgICAgICAgICAgfWRlZmVycmVkTG9hZEhhc2hlc2ZyYWdtZW50SW5kZXhlc2ZyYWdtZW50VXJpc2ZyYWdtZW50SGFzaGVzbGlicmFyeVBhcnRzTWFwRW50cmllc2ZyYWdtZW50TGlzdGluZGV4ZXNmcmFnbWVudEhhc2hzZXRWYWx1ZWVtaXRNYW5nbGVkR2xvYmFsTmFtZXNuYXRpdmVDbGFzc2VzTmVlZGluZ1VubWFuZ2xlZE5hbWVlbWl0R2V0VHlwZUZyb21OYW1lZ2V0R2xvYmFsRnJvbU5hbWVlbWl0TWV0YWRhdGFtZXRhZGF0YUdsb2JhbHNjcmVhdGVHbG9iYWxtYWluVW5pdGNyZWF0ZVJ0aVVuaXZlcnNlZ2xvYmFsc09iamVjdHZhciBpbml0ID0gIztpbml0LiMgPSAjOyMoaW5pdC4jLEpTT04ucGFyc2UoIykpO3VuaXZlcnNlRmllbGRzaW5pdEZpZWxkbmV3IE1hcCgpICAgICAgICAvLyBPbiBWOCwgdGhlICdpbnRlcm4nIGZ1bmN0aW9uIGNvbnZlcnRzIGEgc3RyaW5nIHRvIGEgc3ltYm9sLCB3aGljaAogICAgICAgIC8vIG1ha2VzIHByb3BlcnR5IGFjY2VzcyBtdWNoIGZhc3Rlci4KICAgICAgICAvLyBUT0RPKHNyYSk6IFVzZSBTeW1ib2wgb24gbm9uLUlFMTEgYnJvd3NlcnMuCiAgICAgICAgZnVuY3Rpb24gKHMpIHsKICAgICAgICAgIHZhciBvID0ge307CiAgICAgICAgICBvW3NdID0gMTsKICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhodW5rSGVscGVycy5jb252ZXJ0VG9GYXN0T2JqZWN0KG8pKVswXTsKICAgICAgICB9c3ViY2xhc3NBc3NpZ25tZW50c2h1bmtIZWxwZXJzLnNldE9yVXBkYXRlSW50ZXJjZXB0b3JzQnlUYWcoIyk7aHVua0hlbHBlcnMuc2V0T3JVcGRhdGVMZWFmVGFncygjKTtMb2NhbEFsaWFzZXNpbml0aWFsaXphdGlvbnNIb2xkZXJDb2RlRGVmZXJyZWRMb2FkaW5nU3RhdGVEZWZlcnJlZFByaW1hcnlFeHByZXNzaW9udGVhck9mZlByb3BlcnR5TmFtZSR0ZWFyT2ZmY2FjaGVkQ2xhc3NGaWVsZE5hbWVzJGNhY2hlZEZpZWxkTmFtZXNtYWluQm9pbGVycGxhdGVkZWZlcnJlZEJvaWxlcnBsYXRlRGFydDJzb2Z0RGVmZXJyZWRCb2lsZXJwbGF0ZVNVQ0NFU1NfU3NhSW5zdHJ1Y3Rpb25TZWxlY3Rpb24mSEJhc2VWaXNpdG9yJkNvZGVnZW5QaGFzZVNzYUluc3RydWN0aW9uU2VsZWN0aW9uc2ltcGxlT3BfaW50ZXJjZXB0ZWR0cnlSZXBsYWNlRXhwbGljaXRSZWNlaXZlcldpdGhEdW1teXJlY2VpdmVyQXJndW1lbnRpc01hdGNoaW5nUmVhZG5vTWF0Y2hpbmdSZWFkcmVwbGFjZU9wcGx1c09yTWludXNpbmNyZW1lbnRPcHJtd3NpbXBsZXNpbXBsZUJpbmFyeWJpdG9wb3BlcmFuZDFvcGVyYW5kMl9Tc2FUeXBlS25vd25SZW1vdmVyJkhCYXNlVmlzaXRvciZDb2RlZ2VuUGhhc2VTc2FUeXBlS25vd25SZW1vdmVyX1NzYVRydXN0ZWRDaGVja1JlbW92ZXImSEJhc2VWaXNpdG9yJkNvZGVnZW5QaGFzZVNzYVRydXN0ZWRDaGVja1JlbW92ZXJfU3NhQXNzaWdubWVudENoYWluaW5nJkhCYXNlVmlzaXRvciZDb2RlZ2VuUGhhc2VTc2FBc3NpZ25tZW50Q2hhaW5pbmd0cnlDaGFpbkFzc2lnbm1lbnRuZXh0U2V0dGVybmV4dFN0b3Jlc2ltcGxlU291cmNlX1NzYUluc3RydWN0aW9uTWVyZ2VyJkhCYXNlVmlzaXRvciZDb2RlZ2VuUGhhc2VTc2FJbnN0cnVjdGlvbk1lcmdlcmV4cGVjdGVkSW5wdXRzcHVyZUlucHV0c21hcmtBc0dlbmVyYXRlQXRVc2VTaXRlYW5hbHl6ZUlucHV0c2lzRWZmZWN0aXZlbHlQdXJlaXNBc3NpZ25lZExvY2FsaW5pdGlhbGl6aW5nQXNzaWdubWVudENvdW50c3VwZXJNZXRob2R0cnlHZW5lcmF0ZUF0VXNlU2l0ZWlzQmxvY2tTaW5nbGVQcmVkZWNlc3NvcnRyeU1lcmdpbmdFeHByZXNzaW9uc2ZpbmRJbklucHV0c0FuZFBvcE5vbk1hdGNoaW5nbmV4dElucHV0bmV3SW5wdXRzbmV3Q291bnRfU3NhQ29uZGl0aW9uTWVyZ2VyJkhHcmFwaFZpc2l0b3ImQ29kZWdlblBoYXNlU3NhQ29uZGl0aW9uTWVyZ2VyaGFzQW55U3RhdGVtZW50aXNTYWZlVG9HZW5lcmF0ZUF0VXNlU2l0ZXN0YXJ0SWZ0aGVuSW5wdXRlbHNlSW5wdXRvdGhlcklmb3RoZXJKb2lub3RoZXJQaGluZXh0SW5zdHJ1Y3Rpb25fU3NhU2hhcmVSZWdpb25Db25zdGFudHMmSEJhc2VWaXNpdG9yJkNvZGVnZW5QaGFzZVNzYVNoYXJlUmVnaW9uQ29uc3RhbnRzX2NvdW50Q2FjaGVhYmxlVXNlc2NhY2hlYWJsZXVzZUNvdW50X3RoaXNfaGFuZGxlTnVsbF9oYW5kbGVJbnRfaGFuZGxlU3RyaW5nX2lzQ2FjaGVhYmxlVXNlX251bGxfc19FeHByZXNzaW9uTmFtZWNhblVzZUFsaWFzZWRTdXBlck1lbWJlckxpdmVSYW5nZUxpdmVJbnRlcnZhbGZvckNoZWNrY2hlY2tlZEludGVydmFsbG9vcFVwZGF0ZXJhbmdlaW50ZXJ2YWxkaWVzQXRhdExpdmVFbnZpcm9ubWVudHN0YXJ0SWRlbmRJZGxvb3BNYXJrZXJzdXNlcklkZXhpc3RpbmdJZGFkZExvb3BNYXJrZXJyZW1vdmVMb29wTWFya2VyX1NzYUxpdmVJbnRlcnZhbEJ1aWxkZXImSEJhc2VWaXNpdG9yJkNvZGVnZW5QaGFzZVNzYUxpdmVJbnRlcnZhbEJ1aWxkZXJpbnN0cnVjdGlvbklkTGl2ZUludGVydmFsQnVpbGRlci5tYXJrSW5wdXRzQXNMaXZlSW5FbnZpcm9ubWVudG1hcmtBc0xpdmVJbkVudmlyb25tZW50Y2hlY2tlZEluc3RydWN0aW9uT3JOb25HZW5lcmF0ZUF0VXNlU2l0ZXJlbW92ZUZyb21FbnZpcm9ubWVudGlmSW5zdHJ1Y3Rpb25zdWNjZXNzb3JFbnZ1cGRhdGVMb29wTWFya2VyQ29weSA8LSBDb3B5SGFuZGxlcmFkZENvcHlDb3BpZXM6ICwgYXNzaWdubWVudHM6IFZhcmlhYmxlTmFtZXNvd25OYW1lY29weUhhbmRsZXJzYWxsVXNlZE5hbWVzc3dhcFRlbXB0MGFkZE5hbWVVc2VkVmFyaWFibGVOYW1lcmZyZWVUZW1wb3JhcnlOYW1lc3RlbXBvcmFyeUluZGV4dFswLTldK2FsbG9jYXRlV2l0aEhpbnRhbGxvY2F0ZVRlbXBvcmFyeWZpcnN0UGhpVXNlcldpdGhFbGVtZW50YWxsb2NhdGVOYW1lYWRkQWxsb2NhdGVkTmFtZWZyZWVOYW1lX1NzYVZhcmlhYmxlQWxsb2NhdG9yJkhCYXNlVmlzaXRvciZDb2RlZ2VuUGhhc2VTc2FWYXJpYWJsZUFsbG9jYXRvcnZhcmlhYmxlTmFtZXJoYW5kbGVQaGloYW5kbGVJbnN0cnVjdGlvbm5lZWRzTmFtZWF0SW50ZXJ2YWxpbnN0cnVjdGlvbkludGVydmFsZnJlZVVzZWROYW1lc0F0U3BlY2lhbGl6ZWRDaGVja3NmaW5kQXNDaGVja19maW5kQXNDaGVja1NzYVNpbXBsaWZ5SW50ZXJjZXB0b3JzX2VuY2xvc2luZ0NsYXNzc2hvdWxkUmVtb3ZldHJ5Q29tcHV0ZUNvbnN0YW50SW50ZXJjZXB0b3JjYW5Vc2VTZWxmRm9ySW50ZXJjZXB0b3Jjb25zdGFudEludGVyY2VwdG9ydHJ5Q29tcHV0ZUNvbnN0YW50SW50ZXJjZXB0b3JGcm9tVHlwZWZpbmREb21pbmF0b3JyZXdyaXRlU2VsZkludGVyY2VwdG9yVXNlc3JlcGxhY2VVc2VyV2l0aGluc3RhbmNlb2ZDaGVja29uZVNob3RJbnRlcmNlcHRvcmZpbmlzaEludm9rZWNhbGxSZWNlaXZlclNzYVR5cGVQcm9wYWdhdG9yd29ya21hcHBlbmRpbmdPcHRpbWl6YXRpb25zdXBkYXRlVHlwZXByb2Nlc3NXb3JrbGlzdGFkZFRvV29ya0xpc3RhZGREZXBlbmRlbnRJbnN0cnVjdGlvbnNUb1dvcmtMaXN0cHJvY2Vzc1BlbmRpbmdPcHRpbWl6YXRpb25zY2hlY2tQb3NpdGl2ZUludGVnZXJvdXRwdXRUeXBlX251bWVyaWNGaXh1cGNvbnZlcnRJbnB1dGlzQ2hlY2tFbm91Z2hGb3JOc21PckFlY2hlY2tSZWNlaXZlcmNoZWNrQXJndW1lbnRhZGRBbGxVc2Vyc0J1dGNoZWNrSW5wdXRzVmFsdWVSYW5nZUluZm9pbnRaZXJvaW50T25lbmV3SW50VmFsdWVuZXdJbnN0cnVjdGlvblZhbHVlbmV3UG9zaXRpdmVWYWx1ZW5ld0FkZFZhbHVlbmV3U3VidHJhY3RWYWx1ZW5ld05lZ2F0ZVZhbHVlbmV3VW5ib3VuZFJhbmdlbmV3Tm9ybWFsaXplZFJhbmdldXBuZXdNYXJrZXJSYW5nZVZhbHVlTWFya2VyVmFsdWVwb3NpdGl2ZUludFZhbHVlSW50VmFsdWUuaGFzaENvZGVJbnRWYWx1ZSBNYXhJbnRWYWx1ZU1heE1pbkludFZhbHVlTWluVW5rbm93blZhbHVlSW5zdHJ1Y3Rpb25WYWx1ZUluc3RydWN0aW9uVmFsdWUuaGFzaENvZGVJbnN0cnVjdGlvbjogUG9zaXRpdmVWYWx1ZUJpbmFyeU9wZXJhdGlvblZhbHVlQWRkVmFsdWVBZGRWYWx1ZS5oYXNoQ29kZVN1YnRyYWN0VmFsdWVTdWJ0cmFjdFZhbHVlLmhhc2hDb2RlTmVnYXRlVmFsdWVOZWdhdGUuaGFzaENvZGV1bmJvdW5kaXNTaW5nbGVWYWx1ZVJhbmdlLmhhc2hDb2RlU3NhVmFsdWVSYW5nZUFuYWx5emVyY29udmVyc2lvbnNTU0EgdmFsdWUgcmFuZ2UgYnVpbGRlcnJlbW92ZVJhbmdlQ29udmVyc2lvbmNvbnN0YW50TnVtaW5kZXhSYW5nZWxlbmd0aFJhbmdlbWF4SW5kZXhiZWxvd0xlbmd0aGNyZWF0ZVJhbmdlQ29udmVyc2lvbm5ld0luZGV4UmFuZ2VyaWdodFJhbmdlbGVmdFJhbmdlaGFuZGxlRXF1YWxpdHlDaGVja2hhbmRsZUludm9rZU1vZHVsb2Rpdmlzb3JkaXZpZGVuZGhhbmRsZUJpbmFyeU9wZXJhdGlvbnRyeUNvbXB1dGVSYW5nZW5lZ2F0ZU9wZXJhdGlvbmZsaXBPcGVyYXRpb25jb21wdXRlQ29uc3RyYWluZWRSYW5nZW1pcnJvck9wcmV2ZXJzZWRNaXJyb3JMb29wVXBkYXRlUmVjb2duaXplcmxvb3BQaGl1cGRhdGVSYW5nZXN0YXJ0UmFuZ2VwaGlSYW5nZWlucHV0UmFuZ2VWYWx1ZVNldGNvbGxpc2lvbnNjYXBhY2l0eXJlc2l6ZXByb2Jlb2xkU2l6ZW9sZFRhYmxlb2xkQ29sbGlzaW9uc1ZhbHVlU2V0Tm9kZWpzX2NoYXJhY3Rlcl9jb2Rlc19NRVJHRV9TT1JUX0xJTUlUYmluYXJ5U2VhcmNoc29ydGVkTGlzdGNvbXBsb3dlckJvdW5kdG1wMV9yZXZlcnNlaW5zZXJ0aW9uU29ydHNjcmF0Y2hTcGFjZV9tb3ZpbmdJbnNlcnRpb25Tb3J0X21lcmdlU29ydHRhcmdldE1pZGRsZWZpcnN0TGlzdGZpcnN0U3RhcnRmaXJzdEVuZHNlY29uZExpc3RzZWNvbmRTdGFydHNlY29uZEVuZGN1cnNvcjFjdXJzb3IyZmlyc3RFbGVtZW50c2Vjb25kRWxlbWVudF9DYW5vbmljYWxpemVfSXNWYWxpZEtleUNhbm9uaWNhbGl6ZWRNYXBfY2Fub25pY2FsaXplX2lzVmFsaWRLZXlGbl9iYXNlX2lzVmFsaWRLZXl7Li4ufV90b1N0cmluZ1Zpc2l0aW5nX2lzVG9TdHJpbmdWaXNpdGluZ0NvbWJpbmVkSXRlcmFibGVWaWV3X2l0ZXJhYmxlc19Db21iaW5lZEl0ZXJhdG9yX2l0ZXJhdG9yc0NvbWJpbmVkTGlzdFZpZXdfbGlzdHNfdGhyb3dDYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBMaXN0aW5pdGlhbEluZGV4Q29tYmluZWRNYXBWaWV3X3plcm9fdXBwZXJDYXNlQV91cHBlckNhc2VaX2xvd2VyQ2FzZUFfbG93ZXJDYXNlWl9hc2NpaUNhc2VCaXRlcXVhbHNJZ25vcmVBc2NpaUNhc2VhQ2hhcmJDaGFyYUNoYXJMb3dlckNhc2VoYXNoSWdub3JlQXNjaWlDYXNlY29tcGFyZUFzY2lpVXBwZXJDYXNlZGVmYXVsdFJlc3VsdGFVcHBlckNhc2ViVXBwZXJDYXNlY29tcGFyZUFzY2lpTG93ZXJDYXNlYUxvd2VyQ2FzZWJMb3dlckNhc2Vjb21wYXJlTmF0dXJhbGNvbXBhcmVBc2NpaUxvd2VyQ2FzZU5hdHVyYWxjb21wYXJlQXNjaWlVcHBlckNhc2VOYXR1cmFsX2NvbXBhcmVOYXR1cmFsbHlhSXNEaWdpdGJJc0RpZ2l0X2NvbXBhcmVOdW1lcmljYWxseV9jb21wYXJlRGlnaXRDb3VudF9pc0RpZ2l0X2lzTm9uWmVyb051bWJlclN1ZmZpeF9HZXRLZXlFcXVhbGl0eWUxZTJFcXVhbGl0eUJ5X2dldEtleV9pbm5lcmdldEtleURlZmF1bHRFcXVhbGl0eUlkZW50aXR5RXF1YWxpdHlJdGVyYWJsZUVxdWFsaXR5X2VsZW1lbnRFcXVhbGl0eWVsZW1lbnRFcXVhbGl0eWVsZW1lbnRzMWVsZW1lbnRzMml0MWl0Mmhhc05leHRMaXN0RXF1YWxpdHlfVW5vcmRlcmVkRXF1YWxpdHlVbm9yZGVyZWRJdGVyYWJsZUVxdWFsaXR5U2V0RXF1YWxpdHlfTWFwRW50cnllcXVhbGl0eV9rZXlFcXVhbGl0eV92YWx1ZUVxdWFsaXR5TWFwRXF1YWxpdHllcXVhbEVsZW1lbnRDb3VudHNrZXlIYXNodmFsdWVIYXNoTXVsdGlFcXVhbGl0eV9lcXVhbGl0aWVzZXF1YWxpdGllc2VxRGVlcENvbGxlY3Rpb25FcXVhbGl0eV91bm9yZGVyZWRDYXNlSW5zZW5zaXRpdmVFcXVhbGl0eXN0cmluZzFfSEFTSF9NQVNLRXF1YWxpdHlNYXBFcXVhbGl0eVNldG1hcE1hcEsxbWFwS2V5bWFwVmFsdWVtZXJnZU1hcHNncm91cEJ5bWluQnlvcmRlckJ5bWluVmFsdWVtaW5PcmRlckJ5ZWxlbWVudE9yZGVyQnltYXhCeW1heFZhbHVlbWF4T3JkZXJCeXRyYW5zaXRpdmVDbG9zdXJldmVydGV4MXZlcnRleDJ2ZXJ0ZXgzc3Ryb25nbHlDb25uZWN0ZWRDb21wb25lbnRzaW5kaWNlc2xvd0xpbmtzb25TdGFja3N0cm9uZ0Nvbm5lY3RJdGVyYWJsZVppcGl0ZXJhYmxlc2l0ZXJhdG9yc19JdGVyYXRvclppcFByaW9yaXR5UXVldWVIZWFwUHJpb3JpdHlRdWV1ZV9JTklUSUFMX0NBUEFDSVRZX2xvY2F0ZU5vIHN1Y2ggZWxlbWVudF9yZW1vdmVMYXN0X2J1YmJsZVVwX2J1YmJsZURvd25sZWZ0Q2hpbGRQb3NpdGlvbnBhcmVudEluZGV4cmlnaHRDaGlsZEluZGV4bGVmdENoaWxkSW5kZXhsZWZ0Q2hpbGRyaWdodENoaWxkbWluQ2hpbGRJbmRleG1pbkNoaWxkbmV3Q2FwYWNpdHluZXdRdWV1ZV9RdWV1ZUxpc3QmT2JqZWN0Jkxpc3RNaXhpblF1ZXVlTGlzdF90YWJsZV9oZWFkX3RhaWxpbml0aWFsQ2FwYWNpdHlfY2FzdEZyb21zb3VyY2VMaXN0YWRkQ291bnRfcHJlR3Jvd2VuZFNwYWNlcHJlU3BhY2VhZGRGaXJzdE5vIGVsZW1lbnRMZW5ndGggIG1heSBub3QgYmUgbmVnYXRpdmUubmV3VGFpbCBtdXN0IGJlIGluIHRoZSByYW5nZSBbMC4uX2lzUG93ZXJPZjJfbmV4dFBvd2VyT2YybmV4dE51bWJlcm5ld1RhYmxlX3dyaXRlVG9MaXN0Zmlyc3RQYXJ0U2l6ZW5ld0VsZW1lbnRDb3VudF9DYXN0UXVldWVMaXN0X1VuaW9uU2V0JlNldEJhc2UmVW5tb2RpZmlhYmxlU2V0TWl4aW5DYW5ub3QgbW9kaWZ5IGFuIHVubW9kaWZpYWJsZSBTZXRVbmlvblNldF9kaXNqb2ludF9pdGVyYWJsZV9kZWR1cEl0ZXJhYmxlVW5pb25TZXRDb250cm9sbGVyX3NldFVubW9kaWZpYWJsZUxpc3RWaWV3X05vbkdyb3dhYmxlTGlzdFZpZXcmRGVsZWdhdGluZ0xpc3QmTm9uR3Jvd2FibGVMaXN0TWl4aW5DYW5ub3QgY2hhbmdlIHRoZSBsZW5ndGggb2YgYSBmaXhlZC1sZW5ndGggbGlzdE5vbkdyb3dhYmxlTGlzdFZpZXdsaXN0QmFzZU5vbkdyb3dhYmxlTGlzdE1peGluX1VubW9kaWZpYWJsZVNldFZpZXcmRGVsZWdhdGluZ1NldCZVbm1vZGlmaWFibGVTZXRNaXhpblVubW9kaWZpYWJsZVNldFZpZXdzZXRCYXNlVW5tb2RpZmlhYmxlU2V0TWl4aW5Vbm1vZGlmaWFibGVNYXBNaXhpbkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIE1hcF9LZXlGb3JWYWx1ZV9EZWxlZ2F0aW5nSXRlcmFibGVCYXNlRGVsZWdhdGluZ0l0ZXJhYmxlVXNlIGl0ZXJhYmxlLmNhc3Q8RT4gaW5zdGVhZC5EZWxlZ2F0aW5nTGlzdFVzZSBsaXN0LmNhc3Q8RT4gaW5zdGVhZC5fbGlzdEJhc2VEZWxlZ2F0aW5nU2V0VXNlIHNldC5jYXN0PEU+IGluc3RlYWQuX3NldEJhc2VEZWxlZ2F0aW5nUXVldWVVc2UgcXVldWUuY2FzdDxFPiBpbnN0ZWFkLl9iYXNlUXVldWVEZWxlZ2F0aW5nTWFwVXNlIG1hcC5jYXN0PEssIFY+IGluc3RlYWQuX01hcEtleVNldCZfRGVsZWdhdGluZ0l0ZXJhYmxlQmFzZSZVbm1vZGlmaWFibGVTZXRNaXhpbk1hcEtleVNldF9iYXNlTWFwTWFwS2V5U2V0IGRvZXNuJ3Qgc3VwcG9ydCBsb29rdXAoKS5NYXBWYWx1ZVNldF9rZXlGb3JWYWx1ZWtleUZvclZhbHVldG9SZW1vdmV2YWx1ZXNUb1JldGFpbmtleXNUb1JlbW92ZWRhcnQyanNfaW5mby5zcmMuZ3JhcGhub2RlQ291bnR0YXJnZXRzT2Zzb3VyY2VzT2Zjb21wdXRlVG9wb2xvZ2ljYWxTb3J0ZmluZGVyY29udGFpbnNQYXRocG9zdE9yZGVyZmluZEN5Y2xlQ29udGFpbmluZ19jb21wb25lbnRDb250YWluaW5nZG9taW5hdG9yVHJlZWlEb21pbW1lZGlhdGVEb21pbmF0b3JzRWRnZUxpc3RHcmFwaF9lZGdlc19yZXZFZGdlc3JlbW92ZUVkZ2VyZW1vdmVOb2RlcmVtb3ZlQWxsTm9kZXNfTm9kZUluZm9sb3dsaW5rX1NjY0ZpbmRlcl9hbGxDb21wb25lbnRzX3N0cm9uZ0Nvbm5lY3Rub2RlSW5mb19wb3BfcHVzaHZJbmZvd3dJbmZvX0RvbWluYXRvckZpbmRlcnBvc3RPcmRlcklkbm9kZXNJblBvc3RPcmRlcm5vZGVzSW5SZXZlcnNlZFBvc3RPcmRlcmlkb21faW50ZXJzZWN0ZmluZ2VyMWZpbmdlcjJjb21waWxlci5zcmMuaW5mZXJyZXIubm9kZV90cmFjZXJUcmFjZXJWaXNpdG9yTUFYX0FOQUxZU0lTX0NPVU5UbGlzdHNUb0FuYWx5emVzZXRzVG9BbmFseXplbWFwc1RvQW5hbHl6ZV93b3VsZEJlVG9vTWFueVVzZXJzc2VlblNvRmFyYWN0dWFsV29ya1RvbyBtYW55IHVzZXJzYW5hbHl6ZVN0b3JlZEludG9MaXN0YW5hbHl6ZVN0b3JlZEludG9TZXRhbmFseXplU3RvcmVkSW50b01hcEJhaWxpbmcgb3V0IG9uICBiZWNhdXNlOiBQYXNzZWQgdGhyb3VnaCBhd2FpdFBhc3NlZCB0aHJvdWdoIHlpZWxkVXNlZCBhcyBrZXkgaW4gTWFwU3RvcmVkIGluIGEgbGlzdCB0aGF0IGJhaWxlZCBvdXRmbG93RXNjYXBlIGZyb20gYSBsaXN0IHZpYSBbU3RvcmVkIGluIGEgc2V0IHRoYXQgYmFpbGVkIG91dEVzY2FwZSBmcm9tIGEgc2V0IHZpYSBbU3RvcmVkIGluIGEgbWFwIHRoYXQgYmFpbGVkIG91dEVzY2FwZSBmcm9tIGEgbWFwIHZpYSBbbWlnaHRBZGRUb0NvbnRhaW5lcmlzSW5kZXhTZXRBcmd1bWVudGlzSW5kZXhTZXRLZXlpc0luZGV4U2V0VmFsdWViYWlsb3V0SWZSZWFjaGVzUmVhY2hlZCBzdXBwcmVzc2VkIHBhcmFtZXRlciB3aXRob3V0IHByZWNpc2UgcmVjZWl2ZXJhZGRzVG9Db250YWluZXJTdG9yZWQgaW4gdG9vIG1hbnkgY29udGFpbmVyc2FkZHNUb01hcFZhbHVlU3RvcmVkIGluIHRvbyBtYW55IG1hcHNhZGRzVG9NYXBLZXlpc1BhcmFtZXRlck9mTGlzdEFkZGluZ01ldGhvZGlzUGFyYW1ldGVyT2ZNYXBBZGRpbmdNZXRob2RQYXNzZWQgdG8gbm9TdWNoTWV0aG9kaW5mZXJyZWRUYXJnZXRUeXBlc3BhcmFtZXRlckluZm9SZXR1cm5lZCBmcm9tIGEgY2xvc3VyaXplZCBtZXRob2RSZXR1cm5lZCBmcm9tIGEgY2xvc3VyZUVzY2FwZSB0byBjb2RlIHRoYXQgaGFzIHNwZWNpYWwgYmFja2VuZCB0cmVhdG1lbnRQYXNzZWQgdG8gYSBuYXRpdmUgbWV0aG9kZG9lc05vdEVzY2FwZUxpc3RTZXRkb2VzTm90RXNjYXBlU2V0U2V0ZG9lc05vdEVzY2FwZU1hcFNldGNvbXBpbGVyLnNyYy5qc19iYWNrZW5kLmpzX2ludGVyb3BfYW5hbHlzaXNidWlsZEpzSW50ZXJvcEJvb3RzdHJhcGNhbmRpZGF0ZVBhcmFtZXRlck5hbWVzYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWkZ1bmN0aW9uLnByb3RvdHlwZS4jID0gZnVuY3Rpb24oIykgeyByZXR1cm4gdGhpcygjKSB9YnVpbGRKc0Z1bmN0aW9uVHlwZWRhcnQyanMucmVzb2x1dGlvbi5yZWdpc3RyeV9jb25zdFN5bWJvbE5hbWVzX2NvbnN0YW50TGl0ZXJhbHNfc2VlbkNsYXNzZXNyZWdpc3RlclNlZW5DbGFzc3NlZW5DbGFzc1Jlc29sdXRpb25Xb3JsZEltcGFjdEJ1aWxkZXIoCiBmZWF0dXJlczoKIG1hcC1saXRlcmFsczoKIHNldC1saXRlcmFsczoKIGxpc3QtbGl0ZXJhbHM6CiBjb25zdC1saXRlcmFsczoKIGNvbnN0LXN5bWJvbC1uYW1lczogCiBuYXRpdmUtZGF0YToKIGluc3RhbnRpYXRpb25zOkZlYXR1cmVzX3Vuc29ydGVkYWRkRWxlbWVudG1hcmtBc1Vuc29ydGVkRmVhdHVyZXMoZnJvbVRleHRlcVBvc2NvbW1hUG9zZW5kRGVsaW1pdGVyc3ZhbHVlU3RhcnRlbmREZWxpbWl0ZXJGZWF0dXJlc0RhdGFJbnRlcnByZXRlcmlzQXNFeHBlY3RlZGFjdHVhbEZlYXR1cmVzZXhwZWN0ZWREYXRhRXhwZWN0ZWQgZW1wdHkgZGF0YS5lcnJvcnNGb3VuZGV4cGVjdGVkRmVhdHVyZXN2YWxpZGF0ZWRGZWF0dXJlc2V4cGVjdE1hdGNoYWN0dWFsVmFsdWVVbmV4cGVjdGVkIGRhdGEgZm91bmQgZm9yIE5vIGRhdGEgZm91bmQgZm9yIE5vbi1lbXB0eSBkYXRhIGZvdW5kIGZvciBhY3R1YWxMaXN0ZXhwZWN0ZWRPYmplY3RleHBlY3RlZFRleHRhY3R1YWxPYmplY3RObyBtYXRjaCBmb3VuZCBmb3IgPVtFeHRyYSBkYXRhIGZvdW5kIExpc3QgZGF0YSBleHBlY3RlZCBmb3IgZXhwZWN0ZWQgJycsIGZvdW5kICdNaXNtYXRjaCBmb3IgOiBleHBlY3RlZCAnRXh0cmEgZGF0YSBmb3VuZCAnYWN0dWFsRGF0YV9kaWdlc3RTaW5rX2J5dGVTaW5rX0RpZ2VzdFNpbmtkYXJ0MmpzLnNvdXJjZV9tYXBfYnVpbGRlcnRhcmdldEZpbGVVcmlsb2NhdGlvblByb3ZpZGVybWluaWZpZWRHbG9iYWxOYW1lc21pbmlmaWVkSW5zdGFuY2VOYW1lc2FkZE1hcHBpbmdwcmludFN0cmluZ0xpc3RPbmxpbmVDb2x1bW5NYXBzb3VyY2VMb2NhdGlvbk1hcHNvdXJjZU1hcEVudHJ5a2VybmVsTG9jYXRpb25zb3VyY2VMaW5lQ29sdW1uTWFwX2J1aWxkdXJpTWFwcmVnaXN0ZXJMb2NhdGlvbmZvckVhY2hFbGVtZW50bWFwcGluZ3NCdWZmZXJ3cml0ZUVudHJpZXN7CiAgInZlcnNpb24iOiAzLAogICJlbmdpbmUiOiAiIiwKICAiZmlsZSI6ICAgInNvdXJjZVJvb3QiOiAiIiwKICAic291cmNlcyI6IHJlbGF0aXZlU291cmNlVXJpTGlzdCAgIm5hbWVzIjogICAibWFwcGluZ3MiOiAiICAieF9vcmdfZGFydGxhbmdfZGFydDJqcyI6IHsKICAgICJtaW5pZmllZF9uYW1lcyI6IHsKICAgICAgImdsb2JhbCI6IHdyaXRlTWluaWZpZWROYW1lcyAgICAgICJpbnN0YW5jZSI6IAogICAgfSwKICAgICJmcmFtZXMiOiB3cml0ZUZyYW1lcwogIH0KfQpwcmV2aW91c1NvdXJjZUxvY2F0aW9ucHJldmlvdXNUYXJnZXRMaW5ldGFyZ2V0Q29sdW1uRW5jb2RlcmZpcnN0RW50cnlJbkxpbmVzb3VyY2VVcmlJbmRleEVuY29kZXJzb3VyY2VMaW5lRW5jb2RlcnNvdXJjZUNvbHVtbkVuY29kZXJzb3VyY2VOYW1lSW5kZXhFbmNvZGVydGFyZ2V0TGluZXRhcmdldENvbHVtbm1pbmlmaWVkTmFtZXNtaW5pZmllZE5hbWVvZmZzZXRFbmNvZGVydXJpRW5jb2RlcmxpbmVFbmNvZGVyY29sdW1uRW5jb2Rlcm5hbWVFbmNvZGVyZ2VuZXJhdGVTb3VyY2VNYXBUYWdzb3VyY2VNYXBGaWxlTmFtZQovLyMgc291cmNlTWFwcGluZ1VSTD1vdXRwdXRTb3VyY2VNYXBzb3VyY2VMb2NhdGlvbnNQcm92aWRlcnNvdXJjZU1hcEJ1aWxkZXJqcy5tYXBtYXAuanMubWFwLkRlbHRhRW5jb2RlclZMUV9CQVNFX1NISUZUVkxRX0JBU0VfTUFTS1ZMUV9DT05USU5VQVRJT05fQklUVkxRX0NPTlRJTlVBVElPTl9NQVNLQkFTRTY0X0RJR0lUU0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky9lbmNvZGVWTFFzaWduQml0U291cmNlTWFwRW50cnlMaW5lQ29sdW1uTWFwX2dldExpc3RsaW5lTWFwZm9yRWFjaExpbmVnZXRGaXJzdEVsZW1lbnRzSW5MaW5lY29sdW1uc2ZvckVhY2hDb2x1bW5JbmRleE1hcGpzX2JhY2tlbmRkYXJ0MmpzLmpzX2VtaXR0ZXIuY29uc3RhbnRfb3JkZXJpbmdfQ29uc3RhbnRPcmRlcmluZ19kYXJ0VHlwZU9yZGVyaW5nY29tcGFyZVZhbHVlc2NvbXBhcmVOdWxsYWJsZWNvbXBhcmVMaXN0c2NvbXBhcmVDbGFzc2VzY29tcGFyZVR5cGVkZWZzY29tcGFyZURhcnRUeXBlc2FJbnRiSW50YVN0cmluZ2JTdHJpbmdhRmllbGRzYkZpZWxkc19EYXJ0VHlwZUtpbmRWaXNpdG9yX0RhcnRUeXBlT3JkZXJpbmdfcm9vdFR5cGUgdmFyaWFibGVzIGFyZSBub3QgZXhwZWN0ZWQgaW4gY29uc3RhbnRzOiAnX2NvbXBhcmVUeXBlQXJndW1lbnRzYUFyZ3VtZW50c2JBcmd1bWVudHNkYXJ0MmpzLmpzX2VtaXR0ZXIuaGVhZGVyc0hPT0tTX0FQSV9VU0FHRWdlbmVyYXRlZEJ5IHZlcnNpb246IC8vIEdlbmVyYXRlZCBieSBkYXJ0MmpzdGhlIERhcnQgdG8gSmF2YVNjcmlwdCBjb21waWxlcmRlZmF1bHRDb21wYXJlRW1wdHlVbm1vZGlmaWFibGVTZXRSdW5UZXN0RnVuY3Rpb25wcmludENvZGVzdWNjaW5jdHRlc3RBZnRlckZhaWx1cmVzdGVzdERhdGFNZW1iZXJBbm5vdGF0aW9uc0RhdGFUeXBlX2NvbXB1dGVkRGF0YUZvckVhY2hGaWxlZ2xvYmFsRGF0YWNvbXB1dGVkRGF0YU1lbWJlckFubm90YXRpb25zKGRhdGE6e2dsb2JhbDpUZXN0RGF0YXRlc3RGaWxlVXJpbWVtb3J5U291cmNlRmlsZXNleHBlY3RlZE1hcHNsaWJGaWxlTmFtZXNDb21waWxlZERhdGFhY3R1YWxNYXBzY29tcHV0ZUFubm90YXRpb25zYWN0dWFsTWFwY29tcHV0ZURpZmZBbm5vdGF0aW9uc0FnYWluc3R0aGlzTWFwaW5jbHVkZU1hdGNoZXN0aGlzRGF0YWdldE9mZnNldEZyb21JZERhdGFJbnRlcnByZXRlclN0cmluZ0RhdGFJbnRlcnByZXRlcklkRGF0YV9jb21waWxlZERhdGFfYWN0dWFsTWFwc2FjdHVhbENvZGVkaWZmQ29kZWRhdGFWYWxpZGF0b3J1bmV4cGVjdGVkTWVzc2FnZWNmZU1hcmtlcmNmZWRhcnQyanNNYXJrZXJhbmFseXplck1hcmtlcnNoYXJlZE1hcmtlcnN1c2VDb2xvcnNjb2xvcml6ZU1lc3NhZ2Vjb2xvcml6ZU1hdGNoY29sb3JpemVTaW5nbGVjb2xvcml6ZUFjdHVhbGNvbG9yaXplRXhwZWN0ZWRjb2xvcml6ZURlbGltaXRlcmNvbG9yaXplRGlmZmNvbG9yaXplQW5ub3RhdGlvbmNvbXB1dGVFeHBlY3RlZE1hcG1hcEtleXNmaWxlQW5ub3RhdGlvbnNObyBhbm5vdGF0aW9ucyBmb3IgZXhwZWN0ZWRWYWx1ZXNpZFZhbHVlRXJyb3IgaW4gdGVzdCAnRHVwbGljYXRlIGFubm90YXRpb25zIGZvciBjb21wdXRlVGVzdERhdGF0ZXN0RmlsZXRlc3RMaWJEaXJlY3RvcnlzdXBwb3J0ZWRNYXJrZXJzY3JlYXRlVXJpRm9yRmlsZU5hbWVpc0xpYm1haW4uZGFydG1haW5UZXN0RmlsZWFkZGl0aW9uYWxGaWxlc2xpc3RTeW5jcmVjdXJzaXZlYW5ub3RhdGVkQ29kZXRlc3RNYXJrZXJhZGRTdXBwb3J0aW5nRmlsZWxpYkZpbGVOYW1lbGliRW50aXR5bGliRmlsZVVyaWxpYkNvZGVhbm5vdGF0ZWRMaWJDb2RlYWRkaXRpb25hbEZpbGVEYXRhd2l0aEFubm90YXRpb25zY2hlY2tDb2RlbW9kZU5hbWVtYWluRmlsZVVyaWNvbXBpbGVkRGF0YWZpbHRlckFjdHVhbERhdGFmYXRhbEVycm9yc2hhc0ZhaWx1cmVuZWVkZWREaWZmc2NoZWNrQWN0dWFsTWFwZXhwZWN0ZWRNYXBoYXNMb2NhbEZhaWx1cmVhY3R1YWxUZXh0YWN0dWFsVmFsdWVUZXh0RVhUUkEgIERBVEEgZm9yIGRlc2NyaXB0b3I6CiBvYmplY3QgICA6IG9iamVjdFRleHRhY3R1YWwgICA6IERhdGEgd2FzIGV4cGVjdGVkIGZvciB0aGVzZSBpZHM6IFVORVhQRUNURUQgZGV0YWlsICA6IG9iamVjdCAgOiBleHBlY3RlZDogYWN0dWFsICA6IG1pc3NpbmdJZHNjaGVja01pc3NpbmdNSVNTSU5HIC0tYW5ub3RhdGlvbnMgZGlmZiBbXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tTUlTU0lORyBpZHM6IEVycm9ycyBmb3VuZC5ydW5UZXN0c2RhdGFEaXJsaWJEaXJlY3RvcnlzaGFyZEluZGV4b25UZXN0cnVuVGVzdC12LXNzaG91bGRDb250aW51ZS1hLXBjb250aW51ZWRoYXNGYWlsdXJlc3JlbGF0aXZlRGlyRGF0YSBkaXI6IHRlc3RDb3VudC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1UZXN0IGZpbGU6IFN1cHBvcnRpbmcgbGlicmFyaWVzOiAgICAtIGxpYnMvTm8gZmlsZXMgd2VyZSB0ZXN0ZWQuQW5ub3RhdGlvbkFubm90YXRpb24obGluZU5vPSxjb2x1bW5Obz0sb2Zmc2V0PSx0ZXh0PUFubm90YXRlZENvZGVfbGluZVN0YXJ0c0B7Y29kZUJ1ZmZlcnN0YXJ0TWF0Y2htYXRjaEFzUHJlZml4ZW5kTWF0Y2hlc2FsbE1hdGNoZXNlbmRNYXRjaF9lbnN1cmVMaW5lU3RhcnRzdG9UZXh0X0xGX0NSYXRCcmFjZVN0YXJ0YnJhY2VFbmRjb21tZW50U3RhcnQvXCpjb21tZW50RW5kXCovXHMqc3BsaXRCeVByZWZpeGVzcHJlZml4U2V0ZG90UG9zYW5ub3RhdGlvblByZWZpeGFubm90YXRpb25UZXh0SWRLaW5kSWRLaW5kLm1lbWJlcklkS2luZC5jbHNJZEtpbmQubGlicmFyeUlkS2luZC5ub2RlSWRLaW5kLmludm9rZUlkS2luZC51cGRhdGVJZEtpbmQuaXRlcmF0b3JJZEtpbmQuY3VycmVudElkS2luZC5tb3ZlTmV4dElkS2luZC5zdG10SWRLaW5kLmVycm9yc3RtdElkVmFsdWVnbG9iYWxQcmVmaXhnbG9iYWwjbWVtYmVyUHJlZml4Y2xhc3NQcmVmaXhjbGFzczogbGlicmFyeTogaW52b2tlUHJlZml4aW52b2tlOiB1cGRhdGVQcmVmaXh1cGRhdGU6IGl0ZXJhdG9yUHJlZml4aXRlcmF0b3I6IGN1cnJlbnRQcmVmaXhjdXJyZW50OiBtb3ZlTmV4dFByZWZpeG1vdmVOZXh0OiBzdG10UHJlZml4c3RtdDogZXJyb3JQcmVmaXhlcnJvcjogaWRUb1N0cmluZ2VsZW1lbnRJZGNsYXNzSWRVbmV4cGVjdGVkIGlkIGtpbmQ6IGNvbG9uUG9zSW52YWxpZCBtZW1iZXIgaWQ6ICdJbnZhbGlkIGNsYXNzIGlkOiAnXHMqKFxuXHMqKStccypNZW1iZXJJZG1lbWJlciBtZW1iZXI6Q2xhc3NJZGNsYXNzOkxpYnJhcnlJZGxpYnJhcnkgbGlicmFyeTpOb2RlSWRvZmZzZXQgQWN0dWFsRGF0YV9vZmZzZXRvYmplY3QgYGAgKEFjdHVhbERhdGEoaWQ9LHVyaT0sb2JqZWN0PURhdGFSZWdpc3RyeXJlZ2lzdGVyVmFsdWVleGlzdGluZ0RhdGFEdXBsaWNhdGUgaWQgLCBvYmplY3Q9b2JqZWN0PURpZ2VzdEhhc2hibG9ja1NpemVpbm5lclNpbmtvdXRlclNpbmtIbWFjX0htYWNTaW5rX291dGVyU2lua19pbm5lclJlc3VsdFNpbmtfaW5uZXJTaW5rX2lzQ2xvc2VkSE1BQyBpcyBjbG9zZWRhZGRTbGljZWlzTGFzdE1ENV9NRDVTaW5rMTczMjU4NDE5MzQwMjMyMzM0MTcyNTYyMzgzMTAyZW5kaWFudXBkYXRlSGFzaDM2MTQwOTAzNjAzOTA1NDAyNzEwMzI1MDQ0MTk2NjQxMTg1NDgzOTkxMjAwMDgwNDI2MjgyMTczNTk1NTQyNDkyNjEzMTMxNzcwMDM1NDE2MjMzNjU1Mjg3OTQyOTQ5MjUyMzMyMzA0NTYzMTM0MTgwNDYwMzY4MjQyNTQ2MjYxOTUyNzkyOTY1MDA2MTIzNjUzNTMyOTQxMjkxNzA3ODYzMjI1NDY1NjY0MzkyMTA2OTk5NDM1OTM0MDg2MDUzNjM0NDg4OTYxMzg4OTQyOTQ0ODMyNzUxNjM2MDY0MTA3NjAzMzM1MTE2MzUzMTUwMTI4NTAyODU4Mjk0MjQzNTYzNTEyMTczNTMyODQ3MzIzNjgzNTk1NjI0Mjk0NTg4NzM4MjI3MjM5MjgzMzE4MzkwMzA1NjI0MjU5NjU3NzQwMjc2Mzk3NTIzNjEyNzI4OTMzNTM0MTM5NDY5NjY0MzIwMDIzNjY1NjM5MzY0MzAwNzQzNTcyNDQ1MzE3MzY1NDYwMjgwOTM4NzMxNTE0NjEzMjk5NjI4NjQ1NDA5NjMzNjQ1MjExMjY4OTE0MTUyODc4NjEyMzkxNDIzNzUzMzI0MTE3MDA0ODU1NzEyMzk5OTgwNjkwNDI5MzkxNTc3MzIyNDAwNDQ0OTcxODczMzEzMzU5NDI2NDM1NTU1MjI3MzQ3Njg5MTYxMzA5MTUxNjQ5NDE0OTQ0NDIyNjMxNzQ3NTY5MTczOTUxNDgxNzQ1bWQ1X25vaXNlX3NoaWZ0QW1vdW50c1NoYTFfU2hhMVNpbmtfZXh0ZW5kZWQzMjg1Mzc3NTIwbmV3QTE1MTg1MDAyNDkxODU5Nzc1MzkzMjQwMDk1OTcwODMzOTU0Njk3ODJzaGExU2hhMjU2X1NoYTI1NlNpbmsxNzc5MDMzNzAzMzE0NDEzNDI3NzI3NzM0ODA3NjIxMzU5ODkzMTE5MjYwMDgyMjkyNDE1NDE0NTkyMjVfcm90cjMyX2NoX21hal9ic2lnMF9ic2lnMV9zc2lnMF9zc2lnMXRlbXAxMTExNjM1MjQwODE4OTk0NDc0NDEzMDQ5MzIzNDcxMzkyMTAwOTU3MzE1MDg5NzA5OTMyNDUzNjM1NzQ4Mjg3MDc2MzIyMTM2MjQzODEwODAxNDI2ODgxOTg3MTkyNTA3ODM4ODIxNjIwNzgyMDYyNjE0ODg4MTAzMzI0ODIyMjU4MDM4MzUzOTA0MDE0MDIyMjI0Nzc0MTI0OTE1MDEyMjE1NTUwODE2OTIxOTk2MDY0OTg2MjU1NDIyMDg4MjI4MjE4MzQzNDkyOTUyOTk2ODA4MzIxMDMxMzY3MTMzMzY1NzE4OTEzNTg0NTI4NzExMTI5NDc1NzM3MjEzOTYxODIyOTExNjk1MTgzNzAwMTk4NjY2MTA1MTIxNzcwMjYzNTAyNDU2OTU2MDM3MjczMDQ4NTkyMTI4MjAzMDI0MTEzMjU5NzMwODAwMzM0NTc2NDc3MTM1MTYwNjU4MTczNjAwMzUyODA0NDA5NDU3MTkwOTEzMjI4MjIyMTgxNTM3MDAyMDYzMTc0Nzg3Mzc3OTE5NTU1NjIyMjIyMDI0MTA0ODE1MjIyNzczMDQ1MjIzNjE4NTI0MjQyNDI4NDM2NDc0Mjc1NjczNDE4NzMyMDQwMzE0NzkzMzI5MzI1Mjk4dGVtcDJzaGEyNTZEaWdlc3RTaW5rSGFzaFNpbmtfZW5kaWFuX2N1cnJlbnRDaHVua19tYXhNZXNzYWdlTGVuZ3RoSW5CeXRlczExMjU4OTk5MDY4NDI2MjNfbGVuZ3RoSW5CeXRlc19wZW5kaW5nRGF0YWNodW5rU2l6ZUluV29yZHNIYXNoLmFkZCgpIGNhbGxlZCBhZnRlciBjbG9zZSgpLl9pdGVyYXRlX2ZpbmFsaXplRGF0YV9ieXRlRGlnZXN0Ynl0ZURpZ2VzdGxlbmd0aEluQnl0ZXNieXRlRGF0YWFzQnl0ZURhdGFzZXRVaW50MzJwZW5kaW5nRGF0YUJ5dGVzcGVuZGluZ0RhdGFDaHVua3NnZXRVaW50MzJjb250ZW50c0xlbmd0aGZpbmFsaXplZExlbmd0aF9yb3VuZFVwSGFzaGluZyBpcyB1bnN1cHBvcnRlZCBmb3IgbWVzc2FnZXMgd2l0aCBtb3JlIHRoYW4gMl41MyBiaXRzLmxlbmd0aEluQml0c2hpZ2hCaXRzbG93Qml0c21hc2szMmJpdHNQZXJCeXRlYnl0ZXNQZXJXb3JkYWRkMzJyb3RsMzJtb2RTaGlmdEFjY3VtdWxhdG9yU2lua19ldmVudHNDYW4ndCBhZGQgdG8gYSBjbG9zZWQgc2luay5CeXRlQWNjdW11bGF0b3JTaW5rY29udmVydC5oZXhoZXhFbmNvZGVyaGV4RGVjb2RlckhleENvZGVjaGV4Y29udmVydC5wZXJjZW50cGVyY2VudEVuY29kZXJwZXJjZW50RGVjb2RlclBlcmNlbnRDb2RlY1N0cmluZ0FjY3VtdWxhdG9yU2lua2NvbnZlcnQuaGV4LmVuY29kZXJIZXhFbmNvZGVyX0hleEVuY29kZXJTaW5rX2NvbnZlcnRidWZmZXJJbmRleGJ5dGVPckludmFsaWQgYnl0ZSBfY29kZVVuaXRGb3JEaWdpdGNvbnZlcnQuaGV4LmRlY29kZXJIZXhEZWNvZGVyaXNFdmVuSW52YWxpZCBpbnB1dCBsZW5ndGgsIG11c3QgYmUgZXZlbi5fSGV4RGVjb2RlclNpbmtfbGFzdERpZ2l0X2Nsb3NlYnl0ZXNTdGFydGhleFBhaXJzYXNVdGY4U2lua0lucHV0IGVuZGVkIHdpdGggaW5jb21wbGV0ZSBlbmNvZGVkIGJ5dGUuX0hleERlY29kZXJCeXRlU2lua19kZWNvZGVzb3VyY2VTdGFydHNvdXJjZUVuZGRlc3RpbmF0aW9uU3RhcnRkZXN0aW5hdGlvbkluZGV4Zmlyc3REaWdpdHNlY29uZERpZ2l0Y29udmVydC5wZXJjZW50LmVuY29kZXJQZXJjZW50RW5jb2Rlcl9QZXJjZW50RW5jb2RlclNpbmtjb252ZXJ0LnBlcmNlbnQuZGVjb2RlclBlcmNlbnREZWNvZGVybGFzdERpZ2l0X1BlcmNlbnREZWNvZGVyU2lua19QZXJjZW50RGVjb2RlckJ5dGVTaW5rX2xhc3RQZXJjZW50Y29kZVVuaXRPcnNsaWNlU3RhcnRfY2hlY2tGb3JJbnZhbGlkQ29kZVVuaXROb24tQVNDSUkgY29kZSB1bml0IHR5cGVkX2RhdGEudHlwZWRfYnVmZmVyc0xpc3RCYXNlX1R5cGVkRGF0YUJ1ZmZlcklOSVRJQUxfTEVOR1RIX3R5cGVkQnVmZmVyX2RlZmF1bHRWYWx1ZW5ld0J1ZmZlcl9jcmVhdGVCdWZmZXJfY3JlYXRlQmlnZ2VyQnVmZmVyX2FkZEFsbF9pbnNlcnRLbm93bkxlbmd0aHdyaXRlSW5kZXhUb28gZmV3IGVsZW1lbnRzdmFsdWVzTGVuZ3RoX2Vuc3VyZUNhcGFjaXR5cmVxdWlyZWRDYXBhY2l0eV9zZXRSYW5nZWVsZW1lbnRTaXplSW5CeXRlc19JbnRCdWZmZXJfRmxvYXRCdWZmZXJVaW50OEJ1ZmZlcmluaXRpYWxMZW5ndGhJbnQ4QnVmZmVyVWludDhDbGFtcGVkQnVmZmVyVWludDE2QnVmZmVySW50MTZCdWZmZXJVaW50MzJCdWZmZXJJbnQzMkJ1ZmZlclVpbnQ2NEJ1ZmZlckludDY0QnVmZmVyRmxvYXQzMkJ1ZmZlckZsb2F0NjRCdWZmZXJJbnQzMng0QnVmZmVyRmxvYXQzMng0QnVmZmVyY29udmVydC51dGlsc2RpZ2l0Rm9yQ29kZVVuaXRJbnZhbGlkIGhleGFkZWNpbWFsIGNvZGUgdW5pdCBkYXJ0LmFzeW5jVk1MaWJyYXJ5SG9va3NDYXN0U3RyZWFtQ2FzdFN0cmVhbVRyYW5zZm9ybWVyRW1wdHlJdGVyYXRvckl0ZXJhYmxlRWxlbWVudEVycm9ycHJpbnRUb1pvbmVwcmludFRvQ29uc29sZVNpbmNlYXN5bmNfZXJyb3IuZGFydGJyb2FkY2FzdF9zdHJlYW1fY29udHJvbGxlci5kYXJ0ZGVmZXJyZWRfbG9hZC5kYXJ0ZnV0dXJlLmRhcnRmdXR1cmVfaW1wbC5kYXJ0c2NoZWR1bGVfbWljcm90YXNrLmRhcnRzdHJlYW0uZGFydHN0cmVhbV9jb250cm9sbGVyLmRhcnRzdHJlYW1faW1wbC5kYXJ0c3RyZWFtX3BpcGUuZGFydHN0cmVhbV90cmFuc2Zvcm1lcnMuZGFydHRpbWVyLmRhcnR6b25lLmRhcnRfU2NoZWR1bGVJbW1lZGlhdGVDbG9zdXJlX1RpbWVyRmFjdG9yeUNsb3N1cmVyZXBlYXRpbmdfRnV0dXJlT25WYWx1ZV9GdXR1cmVFcnJvclRlc3RfRnV0dXJlQWN0aW9uX0FzeW5jQ2FsbGJhY2tfVGltZXJDYWxsYmFja0NvbnRyb2xsZXJDYWxsYmFja0NvbnRyb2xsZXJDYW5jZWxDYWxsYmFja19Ob3RpZmljYXRpb25IYW5kbGVyX0V2ZW50R2VuZXJhdG9yX0RhdGFIYW5kbGVyX0RvbmVIYW5kbGVyX0Jyb2FkY2FzdENhbGxiYWNrX0Vycm9yQ2FsbGJhY2tfUHJlZGljYXRlX1RyYW5zZm9ybWF0aW9uX0Vycm9yVGVzdF9FcXVhbGl0eV9TaW5rTWFwcGVyX1RyYW5zZm9ybURhdGFIYW5kbGVyX1RyYW5zZm9ybUVycm9ySGFuZGxlcl9UcmFuc2Zvcm1Eb25lSGFuZGxlcl9TdWJzY3JpcHRpb25UcmFuc2Zvcm1lcmNhbmNlbE9uRXJyb3Jab25lQ2FsbGJhY2tab25lVW5hcnlDYWxsYmFja1pvbmVCaW5hcnlDYWxsYmFja0hhbmRsZVVuY2F1Z2h0RXJyb3JIYW5kbGVyUnVuSGFuZGxlclJ1blVuYXJ5SGFuZGxlclJ1bkJpbmFyeUhhbmRsZXJSZWdpc3RlckNhbGxiYWNrSGFuZGxlclJlZ2lzdGVyVW5hcnlDYWxsYmFja0hhbmRsZXJSZWdpc3RlckJpbmFyeUNhbGxiYWNrSGFuZGxlckVycm9yQ2FsbGJhY2tIYW5kbGVyU2NoZWR1bGVNaWNyb3Rhc2tIYW5kbGVyQ3JlYXRlVGltZXJIYW5kbGVyQ3JlYXRlUGVyaW9kaWNUaW1lckhhbmRsZXJQcmludEhhbmRsZXJGb3JrSGFuZGxlcnNwZWNpZmljYXRpb25fY29tcGxldGVyaXNTeW5jY29tcGxldGVpc0NvbXBsZXRlZHZtOmVudHJ5LXBvaW50aXNBZGRpbmdvbkxpc3RlblJlY2VpdmVkaXNTY2hlZHVsZWRpc1N1c3BlbmRlZEF0WWllbGRjYW5jZWxsYXRpb25Db21wbGV0ZXJvbkxpc3Rlbm9uUmVzdW1lb25DYW5jZWxfZ2VuZXJhdG9ycnVuQm9keXNjaGVkdWxlR2VuZXJhdG9yaXNQYXVzZWR5aWVsZCBiZWZvcmUgc3RyZWFtIGlzIGxpc3RlbmVkIHRvdW5leHBlY3RlZCB5aWVsZGhhc0xpc3RlbmVyd2hlbkRvbmVBZGRpbmdfU2NoZWR1bGVJbW1lZGlhdGVfVGltZXJGYWN0b3J5X2ZhY3RvcnlfQnJvYWRjYXN0U3RyZWFtaXNCcm9hZGNhc3RfQnJvYWRjYXN0U3Vic2NyaXB0aW9uX1NUQVRFX0VWRU5UX0lEX1NUQVRFX0ZJUklOR19TVEFURV9SRU1PVkVfQUZURVJfRklSSU5HX2V2ZW50U3RhdGVfbmV4dF9wcmV2aW91c29uRGF0YV9leHBlY3RzRXZlbnRldmVudElkX3RvZ2dsZUV2ZW50SWRfaXNGaXJpbmdfc2V0UmVtb3ZlQWZ0ZXJGaXJpbmdfcmVtb3ZlQWZ0ZXJGaXJpbmdfb25QYXVzZV9vblJlc3VtZV9Ccm9hZGNhc3RTdHJlYW1Db250cm9sbGVyX1NUQVRFX0lOSVRJQUxfU1RBVEVfQ0xPU0VEX1NUQVRFX0FERFNUUkVBTV9maXJzdFN1YnNjcmlwdGlvbl9sYXN0U3Vic2NyaXB0aW9uX2FkZFN0cmVhbVN0YXRlX2RvbmVGdXR1cmVvblBhdXNlQnJvYWRjYXN0IHN0cmVhbSBjb250cm9sbGVycyBkbyBub3Qgc3VwcG9ydCBwYXVzZSBjYWxsYmFja3NvblBhdXNlSGFuZGxlcm9uUmVzdW1lSGFuZGxlcl9pc0VtcHR5X2hhc09uZUxpc3RlbmVyX2lzQWRkaW5nU3RyZWFtX21heUFkZEV2ZW50X2Vuc3VyZURvbmVGdXR1cmVfYWRkTGlzdGVuZXJvbGRMYXN0X3JlbW92ZUxpc3RlbmVyX2NvbnRyb2xsZXJfc3Vic2NyaWJlX3JlY29yZENhbmNlbF9jYWxsT25DYW5jZWxfcmVjb3JkUGF1c2VfcmVjb3JkUmVzdW1lX2FkZEV2ZW50RXJyb3JDYW5ub3QgYWRkIG5ldyBldmVudHMgYWZ0ZXIgY2FsbGluZyBjbG9zZUNhbm5vdCBhZGQgbmV3IGV2ZW50cyB3aGlsZSBkb2luZyBhbiBhZGRTdHJlYW1fc2VuZERhdGFlcnJvckNhbGxiYWNrX3NlbmRFcnJvcmRvbmVGdXR1cmVfc2VuZERvbmVhZGRTdHJlYW1GdXR1cmVfYWRkRXJyb3JhZGRTdGF0ZV9mb3JFYWNoTGlzdGVuZXJDYW5ub3QgZmlyZSBuZXcgZXZlbnQuIENvbnRyb2xsZXIgaXMgYWxyZWFkeSBmaXJpbmcgYW4gZXZlbnRfbWF5Q29tcGxldGVfYXN5bmNDb21wbGV0ZV9TeW5jQnJvYWRjYXN0U3RyZWFtQ29udHJvbGxlcl9Bc3luY0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXJfYWRkUGVuZGluZ19Bc0Jyb2FkY2FzdFN0cmVhbUNvbnRyb2xsZXJfaGFzUGVuZGluZ19hZGRQZW5kaW5nRXZlbnRoYW5kbGVOZXh0RGVmZXJyZWRMaWJyYXJ5RGFydCBzZGsgdi4gMS44RGVmZXJyZWRMb2FkRXhjZXB0aW9uRGVmZXJyZWRMb2FkRXhjZXB0aW9uOiAnRnV0dXJlT3IgY2FuJ3QgYmUgaW5zdGFudGlhdGVkX251bGxGdXR1cmVfZmFsc2VGdXR1cmVjb21wdXRhdGlvbl9jb21wbGV0ZW1pY3JvdGFza19hc3luY0NvbXBsZXRlRXJyb3JkZWxheWVkd2FpdGZ1dHVyZXNlYWdlckVycm9yaGFuZGxlRXJyb3J0aGVFcnJvcnRoZVN0YWNrVHJhY2VfY29tcGxldGVFcnJvcl9jb21wbGV0ZVdpdGhWYWx1ZW9uVmFsdWVfa1RydWVkb1doaWxlZG9uZVNpZ25hbG5leHRJdGVyYXRpb25iaW5kVW5hcnlDYWxsYmFja0d1YXJkZWRrZWVwR29pbmdhc1N0cmVhbXRpbWVvdXR0aW1lTGltaXRvblRpbWVvdXRUaW1lb3V0RXhjZXB0aW9uVGltZW91dEV4Y2VwdGlvbiBhZnRlciBfQ29tcGxldGVyRnV0dXJlIGFscmVhZHkgY29tcGxldGVkX0FzeW5jQ29tcGxldGVyX1N5bmNDb21wbGV0ZXJfRnV0dXJlTGlzdGVuZXJtYXNrRXJyb3JtYXNrVGVzdEVycm9ybWFza1doZW5jb21wbGV0ZXN0YXRlQ2hhaW5zdGF0ZVRoZW5zdGF0ZVRoZW5PbmVycm9yc3RhdGVDYXRjaGVycm9yc3RhdGVDYXRjaGVycm9yVGVzdHN0YXRlV2hlbmNvbXBsZXRlX25leHRMaXN0ZW5lcl96b25laGFuZGxlc1ZhbHVlaGFuZGxlc0Vycm9yaGFzRXJyb3JUZXN0aGFuZGxlc0NvbXBsZXRlX29uVmFsdWVfb25FcnJvcl9lcnJvclRlc3Rfd2hlbkNvbXBsZXRlQWN0aW9uaGFzRXJyb3JDYWxsYmFja2hhbmRsZVZhbHVlc291cmNlUmVzdWx0bWF0Y2hlc0Vycm9yVGVzdGFzeW5jRXJyb3JoYW5kbGVXaGVuQ29tcGxldGVfYXdhaXRlcl9zdGF0ZUluY29tcGxldGVfc3RhdGVQZW5kaW5nQ29tcGxldGVfc3RhdGVDaGFpbmVkX3N0YXRlVmFsdWVfc3RhdGVFcnJvcl9yZXN1bHRPckxpc3RlbmVyc2ltbWVkaWF0ZXpvbmVWYWx1ZV9zZXRWYWx1ZWltbWVkaWF0ZUVycm9yX2lzUGVuZGluZ0NvbXBsZXRlX21heUFkZExpc3RlbmVyX2lzQ2hhaW5lZF9pc0NvbXBsZXRlX2hhc0Vycm9yX3NldENoYWluZWRjdXJyZW50Wm9uZXJlZ2lzdGVyVW5hcnlDYWxsYmFja190aGVuTm9ab25lUmVnaXN0cmF0aW9ucmVnaXN0ZXJDYWxsYmFja19zZXRQZW5kaW5nQ29tcGxldGVfY2xlYXJQZW5kaW5nQ29tcGxldGVfZXJyb3JfY2hhaW5Tb3VyY2Vfc2V0RXJyb3JPYmplY3Rfc2V0RXJyb3JfY2xvbmVSZXN1bHRzY2hlZHVsZU1pY3JvdGFza19wcmVwZW5kTGlzdGVuZXJzZXhpc3RpbmdMaXN0ZW5lcnNfcmV2ZXJzZUxpc3RlbmVyc19yZW1vdmVMaXN0ZW5lcnNfY2hhaW5Gb3JlaWduRnV0dXJlX2NoYWluQ29yZUZ1dHVyZV9jaGFpbkZ1dHVyZV9wcm9wYWdhdGVUb0xpc3RlbmVyc2hhc0Vycm9yaGFuZGxlVW5jYXVnaHRFcnJvcmxpc3RlbmVySGFzRXJyb3JsaXN0ZW5lclZhbHVlT3JFcnJvcmluU2FtZUVycm9yWm9uZW9sZFpvbmVoYW5kbGVXaGVuQ29tcGxldGVDYWxsYmFja2NvbXBsZXRlUmVzdWx0b3JpZ2luYWxTb3VyY2VoYW5kbGVWYWx1ZUNhbGxiYWNrY2hhaW5Tb3VyY2V0aW1lckZ1dHVyZSBub3QgY29tcGxldGVkX0FzeW5jQ2FsbGJhY2tFbnRyeV9Bc3luY1J1bl9zY2hlZHVsZUltbWVkaWF0ZU1pY3JvdGFza3MgYXJlIG5vdCBzdXBwb3J0ZWQyLjVfY2xvc2VVbmNoZWNrZWRmcm9tRnV0dXJlZnJvbUZ1dHVyZXNmcm9tSXRlcmFibGVwZXJpb2RpY2NvbXB1dGF0aW9uQ291bnR3YXRjaHNlbmRFdmVudHN0YXJ0UGVyaW9kaWNUaW1lcmV2ZW50VHJhbnNmb3JtZWRtYXBTaW5rY2FzdEZyb21hc0Jyb2FkY2FzdFN0cmVhbWFzeW5jTWFwYXN5bmNFeHBhbmRuZXdTdHJlYW1waXBlc3RyZWFtQ29uc3VtZXJzdHJlYW1UcmFuc2Zvcm1lcnNlZW5GaXJzdG5lZWRsZWRyYWluZnV0dXJlVmFsdWVhc0Z1dHVyZWRpc3RpbmN0Zm91bmRSZXN1bHRlbGVtZW50SW5kZXhjcmVhdGVUaW1lck5vIHN0cmVhbSBldmVudHJlZ2lzdGVyZWRPblRpbWVvdXRydW5VbmFyeUd1YXJkZWRTdHJlYW1TdWJzY3JpcHRpb25oYW5kbGVEYXRhaGFuZGxlRG9uZXJlc3VtZVNpZ25hbFN0cmVhbVZpZXdfc3RyZWFtU3RyZWFtQ29uc3VtZXJTdHJlYW1TaW5rU3RyZWFtVHJhbnNmb3JtZXIjdHlwZUFyZzFmcm9tSGFuZGxlcnNmcm9tQmluZDIuMVNTU1RUU1RUUlNSVFN0cmVhbVRyYW5zZm9ybWVyQmFzZV9Db250cm9sbGVyRXZlbnRTaW5rV3JhcHBlclN0cmVhbUNvbnRyb2xsZXJicm9hZGNhc3Rvbkxpc3RlbkhhbmRsZXJvbkNhbmNlbEhhbmRsZXJTeW5jaHJvbm91c1N0cmVhbUNvbnRyb2xsZXJfU3RyZWFtQ29udHJvbGxlckxpZmVjeWNsZV9TdHJlYW1Db250cm9sbGVyQmFzZV9TdHJlYW1Db250cm9sbGVyX1NUQVRFX1NVQlNDUklCRURfU1RBVEVfQ0FOQ0VMRURfU1RBVEVfU1VCU0NSSVBUSU9OX01BU0tfdmFyRGF0YV9pc0NhbmNlbGVkX2lzSW5pdGlhbFN0YXRlX2lzSW5wdXRQYXVzZWRfcGVuZGluZ0V2ZW50c3ZhckRhdGFfZW5zdXJlUGVuZGluZ0V2ZW50c19iYWRFdmVudFN0YXRlQ2Fubm90IGFkZCBldmVudCBhZnRlciBjbG9zaW5nQ2Fubm90IGFkZCBldmVudCB3aGlsZSBhZGRpbmcgYSBzdHJlYW1TdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBsaXN0ZW5lZCB0by5wZW5kaW5nRXZlbnRzX3NldFBlbmRpbmdFdmVudHNfZ3VhcmRDYWxsYmFja19TeW5jU3RyZWFtQ29udHJvbGxlckRpc3BhdGNoX0FzeW5jU3RyZWFtQ29udHJvbGxlckRpc3BhdGNoX0FzeW5jU3RyZWFtQ29udHJvbGxlcl9TeW5jU3RyZWFtQ29udHJvbGxlcl9jcmVhdGVTdWJzY3JpcHRpb25fQ29udHJvbGxlclN1YnNjcmlwdGlvbl9vbkNhbmNlbF9TdHJlYW1TaW5rV3JhcHBlcl9BZGRTdHJlYW1TdGF0ZWFkZFN1YnNjcmlwdGlvbm1ha2VFcnJvckhhbmRsZXJfU3RyZWFtQ29udHJvbGxlckFkZFN0cmVhbVN0YXRlX0V2ZW50U2lua19FdmVudERpc3BhdGNoX0J1ZmZlcmluZ1N0cmVhbVN1YnNjcmlwdGlvbl9TVEFURV9DQU5DRUxfT05fRVJST1JfU1RBVEVfSU5QVVRfUEFVU0VEX1NUQVRFX1dBSVRfRk9SX0NBTkNFTF9TVEFURV9JTl9DQUxMQkFDS19TVEFURV9IQVNfUEVORElOR19TVEFURV9QQVVTRV9DT1VOVF9vbkRhdGFfb25Eb25lX2NhbmNlbEZ1dHVyZXNjaGVkdWxlcmVnaXN0ZXJCaW5hcnlDYWxsYmFja2hhbmRsZUVycm9yIGNhbGxiYWNrIG11c3QgdGFrZSBlaXRoZXIgYW4gT2JqZWN0ICh0aGUgZXJyb3IpLCBvciBib3RoIGFuIE9iamVjdCAodGhlIGVycm9yKSBhbmQgYSBTdGFja1RyYWNlLndhc1BhdXNlZF9pc1BhdXNlZHdhc0lucHV0UGF1c2VkY2FuY2VsU2NoZWR1bGVfaW5DYWxsYmFja19kZWNyZW1lbnRQYXVzZUNvdW50X21heVJlc3VtZUlucHV0X2NhbmNlbGNhbmNlbEZ1dHVyZV93YWl0c0ZvckNhbmNlbF9jYW5GaXJlX2NhbmNlbE9uRXJyb3JwZW5kaW5nX2NoZWNrU3RhdGVzZW5kRXJyb3JydW5CaW5hcnlHdWFyZGVkc2VuZERvbmVydW5HdWFyZGVkaXNJbnB1dFBhdXNlZF9TdHJlYW1JbXBsX29uTGlzdGVuX0dlbmVyYXRlZFN0cmVhbUltcGxfaXNVc2VkX0l0ZXJhYmxlUGVuZGluZ0V2ZW50c19pdGVyYXRvcmRpc3BhdGNoTm8gZXZlbnRzIHBlbmRpbmcuX0RlbGF5ZWRFdmVudHBlcmZvcm1fRGVsYXllZERhdGFfRGVsYXllZEVycm9yX0RlbGF5ZWREb25lTm8gZXZlbnRzIGFmdGVyIGEgZG9uZS5fUGVuZGluZ0V2ZW50c19TVEFURV9VTlNDSEVEVUxFRF9TVEFURV9TQ0hFRFVMRURfZXZlbnRTY2hlZHVsZWRfU3RyZWFtSW1wbEV2ZW50c2ZpcnN0UGVuZGluZ0V2ZW50bGFzdFBlbmRpbmdFdmVudF9Eb25lU3RyZWFtU3Vic2NyaXB0aW9uX0RPTkVfU0VOVF9TQ0hFRFVMRURfUEFVU0VEX3NjaGVkdWxlX2lzU2VudF9pc1NjaGVkdWxlZF9Bc0Jyb2FkY2FzdFN0cmVhbV9vbkxpc3RlbkhhbmRsZXJfb25DYW5jZWxIYW5kbGVyc2h1dGRvd25fY2FuY2VsU3Vic2NyaXB0aW9uX3BhdXNlU3Vic2NyaXB0aW9uX3Jlc3VtZVN1YnNjcmlwdGlvbl9pc1N1YnNjcmlwdGlvblBhdXNlZF9Ccm9hZGNhc3RTdWJzY3JpcHRpb25XcmFwcGVyQ2Fubm90IGNoYW5nZSBoYW5kbGVycyBvZiBhc0Jyb2FkY2FzdFN0cmVhbSBzb3VyY2Ugc3Vic2NyaXB0aW9uLl9zdGF0ZURhdGFBbHJlYWR5IHdhaXRpbmcgZm9yIG5leHQuX2luaXRpYWxpemVPckRvbmVzdGF0ZURhdGFtb3ZlTmV4dEZ1dHVyZV9FbXB0eVN0cmVhbV9Gb3J3YXJkaW5nU3RyZWFtX2hhbmRsZURhdGFfaGFuZGxlRXJyb3JfaGFuZGxlRG9uZV9Gb3J3YXJkaW5nU3RyZWFtU3Vic2NyaXB0aW9uX1doZXJlU3RyZWFtX3Rlc3RpbnB1dEV2ZW50X01hcFN0cmVhbV90cmFuc2Zvcm1vdXRwdXRFdmVudF9FeHBhbmRTdHJlYW1fZXhwYW5kX0hhbmRsZUVycm9yU3RyZWFtX1Rha2VTdHJlYW1fU3RhdGVTdHJlYW1TdWJzY3JpcHRpb25fc2hhcmVkU3RhdGVfZmxhZ19UYWtlV2hpbGVTdHJlYW1fU2tpcFN0cmVhbV9Ta2lwV2hpbGVTdHJlYW1oYXNGYWlsZWRfRGlzdGluY3RTdHJlYW1fU0VOVElORUxwcmV2aW91c0V2ZW50aXNFcXVhbF9FdmVudFNpbmtXcmFwcGVyX1NpbmtUcmFuc2Zvcm1lclN0cmVhbVN1YnNjcmlwdGlvbl90cmFuc2Zvcm1lclNpbmttYXBwZXJldmVudFNpbmtfaXNTdWJzY3JpYmVkU3RyZWFtIGlzIGFscmVhZHkgY2xvc2VkX1N0cmVhbVNpbmtUcmFuc2Zvcm1lcl9zaW5rTWFwcGVyX0JvdW5kU2lua1N0cmVhbV9IYW5kbGVyRXZlbnRTaW5rVGhlIHByb3ZpZGVkIHNpbmsgbXVzdCBub3QgYmUgbnVsbC5TaW5rIGlzIGNsb3NlZF9TdHJlYW1IYW5kbGVyVHJhbnNmb3JtZXJvdXRwdXRTaW5rX1N0cmVhbUJpbmRUcmFuc2Zvcm1lcl9TdHJlYW1TdWJzY3JpcHRpb25UcmFuc2Zvcm1lcl9Cb3VuZFN1YnNjcmlwdGlvblN0cmVhbVRpbWVyYmluZENhbGxiYWNrR3VhcmRlZGNyZWF0ZVBlcmlvZGljVGltZXJib3VuZENhbGxiYWNrdGlja19jcmVhdGVUaW1lclRpbWVyIGludGVyZmFjZSBub3Qgc3VwcG9ydGVkLl9jcmVhdGVQZXJpb2RpY1RpbWVyQXN5bmNFcnJvcl9zdGFja1RyYWNlX3N0YWNrVHJhY2U9X1pvbmVGdW5jdGlvbmZvcmtfWm9uZVNwZWNpZmljYXRpb25lcnJvclpvbmVvdGhlclpvbmVhcmd1bWVudDFhcmd1bWVudDJiaW5kQ2FsbGJhY2tiaW5kVW5hcnlDYWxsYmFja2JpbmRCaW5hcnlDYWxsYmFja2JpbmRCaW5hcnlDYWxsYmFja0d1YXJkZWRfZW50ZXJfbGVhdmVfWm9uZURlbGVnYXRlX2RlbGVnYXRpb25UYXJnZXRpbXBsZW1lbnRhdGlvbl9oYW5kbGVVbmNhdWdodEVycm9yaW1wbFpvbmVfcmVnaXN0ZXJDYWxsYmFja19yZWdpc3RlclVuYXJ5Q2FsbGJhY2tfcmVnaXN0ZXJCaW5hcnlDYWxsYmFja19lcnJvckNhbGxiYWNrX3NjaGVkdWxlTWljcm90YXNrX3ByaW50X2ZvcmtfWm9uZV9DdXN0b21ab25lX2RlbGVnYXRlQ2FjaGVyZWdpc3RlcmVkcGFyZW50RGVsZWdhdGVpbXBsZW1lbnRhdGlvblpvbmVfUm9vdFpvbmVfcm9vdE1hcF9yb290RGVsZWdhdGVfbG9hZGVkTGlicmFyaWVzX25leHRDYWxsYmFja19sYXN0Q2FsbGJhY2tfbGFzdFByaW9yaXR5Q2FsbGJhY2tfaXNJbkNhbGxiYWNrTG9vcF9yb290Wm9uZV9mYXRhbERhcnRBc3luY19mYXRhbHRoZW5DYWxsYmFja2F3YWl0ZXJTdGFja1RyYWNlX2FzeW5jU3RhY2tUcmFjZUhlbHBlcmFzeW5jX29wX2NsZWFyQXN5bmNUaHJlYWRTdGFja1RyYWNlU3RhY2tUcmFjZV9jbGVhckFzeW5jVGhyZWFkU3RhY2tUcmFjZV9zZXRBc3luY1RocmVhZFN0YWNrVHJhY2VTdGFja1RyYWNlX3NldEFzeW5jVGhyZWFkU3RhY2tUcmFjZV9tb3ZlTmV4dERlYnVnZ2VyU3RlcENoZWNrQXN5bmNTdGFyTW92ZU5leHRfZGVidWdnZXJTdGVwQ2hlY2tfc2V0U2NoZWR1bGVJbW1lZGlhdGVDbG9zdXJlX2Vuc3VyZVNjaGVkdWxlSW1tZWRpYXRlX2ludm9rZUVycm9ySGFuZGxlcnVuYXJ5RXJyb3JIYW5kbGVyX2NvbXBsZXRlV2l0aEVycm9yQ2FsbGJhY2tfYXN5bmNDb21wbGV0ZVdpdGhFcnJvckNhbGxiYWNrX25vbk51bGxFcnJvcl9yZWdpc3RlckVycm9ySGFuZGxlckVycm9yIGhhbmRsZXIgbXVzdCBhY2NlcHQgb25lIE9iamVjdCBvciBvbmUgT2JqZWN0IGFuZCBhIFN0YWNrVHJhY2UgYXMgYXJndW1lbnRzLCBhbmQgcmV0dXJuIGEgYSB2YWxpZCByZXN1bHRfbWljcm90YXNrTG9vcF9zdGFydE1pY3JvdGFza0xvb3Bfc2NoZWR1bGVBc3luY0NhbGxiYWNrbmV3RW50cnlfc2NoZWR1bGVQcmlvcml0eUFzeW5jQ2FsbGJhY2tfcnVuR3VhcmRlZG5vdGlmaWNhdGlvbkhhbmRsZXJfbnVsbERhdGFIYW5kbGVyX251bGxFcnJvckhhbmRsZXJfbnVsbERvbmVIYW5kbGVyX3J1blVzZXJDb2Rlb25TdWNjZXNzX2NhbmNlbEFuZEVycm9yX2NhbmNlbEFuZEVycm9yV2l0aFJlcGxhY2VtZW50X2NhbmNlbEFuZEVycm9yQ2xvc3VyZV9jYW5jZWxBbmRWYWx1ZV9hZGRFcnJvcldpdGhSZXBsYWNlbWVudF9wYXJlbnREZWxlZ2F0ZV9yb290SGFuZGxlVW5jYXVnaHRFcnJvcl9yZXRocm93QXN5bmNfcmV0aHJvd19yb290UnVuX3Jvb3RSdW5VbmFyeV9yb290UnVuQmluYXJ5X3Jvb3RSZWdpc3RlckNhbGxiYWNrX3Jvb3RSZWdpc3RlclVuYXJ5Q2FsbGJhY2tfcm9vdFJlZ2lzdGVyQmluYXJ5Q2FsbGJhY2tfcm9vdEVycm9yQ2FsbGJhY2tfcm9vdFNjaGVkdWxlTWljcm90YXNraGFzRXJyb3JIYW5kbGVyX3Jvb3RDcmVhdGVUaW1lcl9yb290Q3JlYXRlUGVyaW9kaWNUaW1lcl9yb290UHJpbnRfcHJpbnRUb1pvbmVfcm9vdEZvcmtab25lU3BlY2lmaWNhdGlvbnMgbXVzdCBiZSBpbnN0YW50aWF0ZWQgd2l0aCB0aGUgcHJvdmlkZWQgY29uc3RydWN0b3IudmFsdWVNYXB1bmFyeU9uRXJyb3JiaW5hcnlPbkVycm9yb25FcnJvciBjYWxsYmFjayBtdXN0IHRha2UgZWl0aGVyIGFuIE9iamVjdCBfcnVuWm9uZWRkYXJ0LmNvbGxlY3Rpb25jb2xsZWN0aW9ucy5kYXJ0aGFzaF9tYXAuZGFydGhhc2hfc2V0LmRhcnRpdGVyYWJsZS5kYXJ0aXRlcmF0b3IuZGFydGxpbmtlZF9oYXNoX21hcC5kYXJ0bGlua2VkX2hhc2hfc2V0LmRhcnRsaW5rZWRfbGlzdC5kYXJ0bGlzdC5kYXJ0bWFwcy5kYXJ0cXVldWUuZGFydHNldC5kYXJ0c3BsYXlfdHJlZS5kYXJ0X0hhc2hlcl9IYXNoTWFwX2VsZW1lbnRDb3VudF9idWNrZXRzX21vZGlmaWNhdGlvbkNvdW50YnVja2V0c19hZGRFbnRyeXN0YW1wX3JlbW92ZUVudHJ5cHJldmlvdXNJbkJ1Y2tldGJ1Y2tldEluZGV4bmV3RWxlbWVudHNfcmVzaXplb2xkQnVja2V0c25ld0J1Y2tldHNfbmV3S2V5U2V0X0N1c3RvbUhhc2hNYXBfdmFsaWRLZXl2YWxpZEtleV9JZGVudGl0eUhhc2hNYXBfSGFzaE1hcEVudHJ5X0hhc2hNYXBJdGVyYWJsZV9IYXNoTWFwS2V5SXRlcmFibGVfSGFzaE1hcFZhbHVlSXRlcmFibGVfSGFzaE1hcEl0ZXJhdG9yX3N0YW1wX2VudHJ5X0hhc2hNYXBLZXlJdGVyYXRvcl9IYXNoTWFwVmFsdWVJdGVyYXRvcl9IYXNoU2V0X25ld0VtcHR5X3JlbW92ZV9maWx0ZXJXaGVyZXJlbW92ZU1hdGNoaW5nbW9kaWZpY2F0aW9uQ291bnR0ZXN0UmVzdWx0X25ld1NpbWlsYXJTZXRfSWRlbnRpdHlIYXNoU2V0X0N1c3RvbUhhc2hTZXRfZXF1YWxpdHlfSGFzaFNldEVudHJ5X0hhc2hTZXRJdGVyYXRvcl9IYXNoRmllbGRCYXNlX2hhc2hNYXNrX3VzZWREYXRhX2RlbGV0ZWRLZXlzZGF0YVNpemVfSGFzaFZNQmFzZXZtOmV4YWN0LXJlc3VsdC10eXBlZGFydDp0eXBlZF9kYXRhI19VaW50MzJMaXN0TGlua2VkSGFzaE1hcF9nZXRJbmRleExpbmtlZEhhc2hNYXBfc2V0SW5kZXhkYXJ0OmNvcmUjX1NtaUxpbmtlZEhhc2hNYXBfZ2V0SGFzaE1hc2tMaW5rZWRIYXNoTWFwX3NldEhhc2hNYXNrZGFydDpjb3JlI19MaXN0TGlua2VkSGFzaE1hcF9nZXREYXRhTGlua2VkSGFzaE1hcF9zZXREYXRhTGlua2VkSGFzaE1hcF9nZXRVc2VkRGF0YUxpbmtlZEhhc2hNYXBfc2V0VXNlZERhdGFMaW5rZWRIYXNoTWFwX2dldERlbGV0ZWRLZXlzTGlua2VkSGFzaE1hcF9zZXREZWxldGVkS2V5c19IYXNoQmFzZV9JTklUSUFMX0lOREVYX0JJVFNfSU5JVElBTF9JTkRFWF9TSVpFX1VOVVNFRF9QQUlSX0RFTEVURURfUEFJUl9pbmRleFNpemVUb0hhc2hNYXNraW5kZXhTaXplaW5kZXhCaXRzX2hhc2hQYXR0ZXJuZnVsbEhhc2hoYXNoTWFza21hc2tlZEhhc2hfZmlyc3RQcm9iZXNpemVNYXNrX25leHRQcm9iZV9pc0RlbGV0ZWRrZXlPclZhbHVlX3NldERlbGV0ZWRBdF9jaGVja1N1bV9pc01vZGlmaWVkU2luY2VvbGREYXRhb2xkQ2hlY2tTdW1fT3BlcmF0b3JFcXVhbHNBbmRIYXNoQ29kZV9JZGVudGljYWxBbmRJZGVudGl0eUhhc2hDb2RlX19JbnRlcm5hbExpbmtlZEhhc2hNYXAmX0hhc2hWTUJhc2UmTWFwTWl4aW5LZXkgbm90IGluIG1hcC5uZXdFbnRyaWVzX19JbnRlcm5hbExpbmtlZEhhc2hNYXAmX0hhc2hWTUJhc2UmTWFwTWl4aW4mX0xpbmtlZEhhc2hNYXBNaXhpbl9yZWhhc2hfaW5pdG9sZFVzZWRfcmVnZW5lcmF0ZUluZGV4dG1wVXNlZF9pbnNlcnRoYXNoUGF0dGVybl9maW5kVmFsdWVPckluc2VydFBvaW50bWF4RW50cmllc2ZpcnN0RGVsZXRlZF9nZXRWYWx1ZU9yRGF0YWtpdmlfX0ludGVybmFsTGlua2VkSGFzaE1hcCZfSGFzaFZNQmFzZSZNYXBNaXhpbiZfTGlua2VkSGFzaE1hcE1peGluJl9IYXNoQmFzZV9fSW50ZXJuYWxMaW5rZWRIYXNoTWFwJl9IYXNoVk1CYXNlJk1hcE1peGluJl9MaW5rZWRIYXNoTWFwTWl4aW4mX0hhc2hCYXNlJl9PcGVyYXRvckVxdWFsc0FuZEhhc2hDb2RlX0ludGVybmFsTGlua2VkSGFzaE1hcF9MaW5rZWRIYXNoTWFwTWl4aW5fX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hNYXAmX0hhc2hGaWVsZEJhc2UmTWFwTWl4aW5fX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hNYXAmX0hhc2hGaWVsZEJhc2UmTWFwTWl4aW4mX0xpbmtlZEhhc2hNYXBNaXhpbl9fQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaE1hcCZfSGFzaEZpZWxkQmFzZSZNYXBNaXhpbiZfTGlua2VkSGFzaE1hcE1peGluJl9IYXNoQmFzZV9fQ29tcGFjdExpbmtlZElkZW50aXR5SGFzaE1hcCZfSGFzaEZpZWxkQmFzZSZNYXBNaXhpbiZfTGlua2VkSGFzaE1hcE1peGluJl9IYXNoQmFzZSZfSWRlbnRpY2FsQW5kSWRlbnRpdHlIYXNoQ29kZV9Db21wYWN0TGlua2VkSWRlbnRpdHlIYXNoTWFwX19Db21wYWN0TGlua2VkQ3VzdG9tSGFzaE1hcCZfSGFzaEZpZWxkQmFzZSZNYXBNaXhpbl9fQ29tcGFjdExpbmtlZEN1c3RvbUhhc2hNYXAmX0hhc2hGaWVsZEJhc2UmTWFwTWl4aW4mX0xpbmtlZEhhc2hNYXBNaXhpbl9fQ29tcGFjdExpbmtlZEN1c3RvbUhhc2hNYXAmX0hhc2hGaWVsZEJhc2UmTWFwTWl4aW4mX0xpbmtlZEhhc2hNYXBNaXhpbiZfSGFzaEJhc2VfQ29tcGFjdExpbmtlZEN1c3RvbUhhc2hNYXBfQ29tcGFjdEl0ZXJhYmxlX2xlbl9zdGVwX0NvbXBhY3RJdGVyYXRvcl9fQ29tcGFjdExpbmtlZEhhc2hTZXQmX0hhc2hGaWVsZEJhc2UmX0hhc2hCYXNlX19Db21wYWN0TGlua2VkSGFzaFNldCZfSGFzaEZpZWxkQmFzZSZfSGFzaEJhc2UmX09wZXJhdG9yRXF1YWxzQW5kSGFzaENvZGVfX0NvbXBhY3RMaW5rZWRIYXNoU2V0Jl9IYXNoRmllbGRCYXNlJl9IYXNoQmFzZSZfT3BlcmF0b3JFcXVhbHNBbmRIYXNoQ29kZSZTZXRNaXhpbml0Zm91bmRNYXRjaGluZ19Db21wYWN0TGlua2VkSGFzaFNldF9nZXRLZXlPckRhdGFfX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hTZXQmX0NvbXBhY3RMaW5rZWRIYXNoU2V0Jl9JZGVudGljYWxBbmRJZGVudGl0eUhhc2hDb2RlX0NvbXBhY3RMaW5rZWRJZGVudGl0eUhhc2hTZXRfQ29tcGFjdExpbmtlZEN1c3RvbUhhc2hTZXRmcm9tSXRlcmFibGVzZnJvbUVudHJpZXNIYXNoU2V0aXRlcmFibGVUb1Nob3J0U3RyaW5nbGVmdERlbGltaXRlcnJpZ2h0RGVsaW1pdGVyKC4uLilpdGVyYWJsZVRvRnVsbFN0cmluZ0hhc05leHRJdGVyYXRvcl9IQVNfTkVYVF9BTkRfTkVYVF9JTl9DVVJSRU5UX05PX05FWFRfTk9UX01PVkVEX1lFVF9tb3ZlTm8gbW9yZSBlbGVtZW50c0xpbmtlZExpc3RfZmlyc3RfaW5zZXJ0QmVmb3JldXBkYXRlRmlyc3RfdW5saW5rVG9vIG1hbnkgZWxlbWVudHNMaW5rZWRMaXN0RW50cnkgaXMgYWxyZWFkeSBpbiBhIExpbmtlZExpc3RfTGlua2VkTGlzdEl0ZXJhdG9yX3Zpc2l0ZWRGaXJzdExpbmtlZExpc3RFbnRyeXVubGlua2luc2VydEFmdGVyaW5zZXJ0QmVmb3JlX0xpc3RCYXNlJk9iamVjdCZMaXN0TWl4aW5saXN0VG9TdHJpbmdtYXBUb1N0cmluZ19pZF9maWxsTWFwV2l0aE1hcHBlZEl0ZXJhYmxlX2ZpbGxNYXBXaXRoSXRlcmFibGVza2V5SXRlcmF0b3J2YWx1ZUl0ZXJhdG9yaGFzTmV4dEtleWhhc05leHRWYWx1ZUl0ZXJhYmxlcyBkbyBub3QgaGF2ZSBzYW1lIGxlbmd0aC5NYXBNaXhpblVubW9kaWZpYWJsZU1hcEJhc2VDYW5ub3QgbW9kaWZ5IHVubW9kaWZpYWJsZSBtYXBfTWFwQmFzZVZhbHVlSXRlcmFibGVfTWFwQmFzZVZhbHVlSXRlcmF0b3JfVW5tb2RpZmlhYmxlTWFwTWl4aW5NYXBWaWV3X1VubW9kaWZpYWJsZU1hcFZpZXcmTWFwVmlldyZfVW5tb2RpZmlhYmxlTWFwTWl4aW5fRG91YmxlTGlua19wcmV2aW91c0xpbmtfbmV4dExpbmtEb3VibGVMaW5rZWRRdWV1ZUVudHJ5cHJldmlvdXNFbnRyeW5leHRFbnRyeV9Eb3VibGVMaW5rZWRRdWV1ZUVudHJ5X2FzTm9uU2VudGluZWxFbnRyeV9hcHBlbmRfcHJlcGVuZF9Eb3VibGVMaW5rZWRRdWV1ZUVsZW1lbnRfRG91YmxlTGlua2VkUXVldWVTZW50aW5lbERvdWJsZUxpbmtlZFF1ZXVlX3NlbnRpbmVsbGFzdEVudHJ5Zmlyc3RFbnRyeWZvckVhY2hFbnRyeV9Eb3VibGVMaW5rZWRRdWV1ZUl0ZXJhdG9yX25leHRFbnRyeWVsZW1lbnRFbnRyeUxpc3RRdWV1ZV9jaGVja01vZGlmaWNhdGlvbmV4cGVjdGVkTW9kaWZpY2F0aW9uQ291bnRzdGFydERpc3RhbmNlZW5kRGlzdGFuY2VwcmV2T2Zmc2V0X0xpc3RRdWV1ZUl0ZXJhdG9yX3Bvc2l0aW9uU2V0TWl4aW5fU2V0QmFzZSZPYmplY3QmU2V0TWl4aW5zZXRUb1N0cmluZ19TZXRCYXNlQ2Fubm90IGNoYW5nZSB1bm1vZGlmaWFibGUgc2V0X1NwbGF5VHJlZU5vZGVfU3BsYXlUcmVlTWFwTm9kZV9TcGxheVRyZWVfc3BsYXlDb3VudF9kdW1teV9jb21wYXJhdG9yX2NvbXBhcmVfc3BsYXlfc3BsYXlNaW5fc3BsYXlNYXhfYWRkTmV3Um9vdF9sYXN0X2NsZWFyX1R5cGVUZXN0X1NwbGF5VHJlZU1hcCZfU3BsYXlUcmVlJk1hcE1peGluU3BsYXlUcmVlTWFwbWFwUm9vdHNwbGF5Q291bnRpbml0aWFsU3BsYXlDb3VudGZpcnN0S2V5bGFzdEtleWxhc3RLZXlCZWZvcmVmaXJzdEtleUFmdGVyX1NwbGF5VHJlZUl0ZXJhdG9yX3RyZWVfd29ya0xpc3RfY3VycmVudE5vZGVfZmluZExlZnRNb3N0RGVzY2VuZGVudHN0YXJ0QXRzdGFydEtleV9nZXRWYWx1ZV9yZWJ1aWxkV29ya0xpc3RfU3BsYXlUcmVlS2V5SXRlcmFibGVfY29weU5vZGVfU3BsYXlUcmVlVmFsdWVJdGVyYWJsZV9TcGxheVRyZWVLZXlJdGVyYXRvcl9TcGxheVRyZWVWYWx1ZUl0ZXJhdG9ybWFwTm9kZV9TcGxheVRyZWVOb2RlSXRlcmF0b3JfU3BsYXlUcmVlU2V0Jl9TcGxheVRyZWUmSXRlcmFibGVNaXhpbl9TcGxheVRyZWVTZXQmX1NwbGF5VHJlZSZJdGVyYWJsZU1peGluJlNldE1peGluU3BsYXlUcmVlU2V0X01PRElGSUNBVElPTl9DT1VOVF9NQVNLX3JlaGFzaE9iamVjdHNfZGVmYXVsdEVxdWFsc19kZWZhdWx0SGFzaENvZGVfaXRlcmFibGVQYXJ0c1RvU3RyaW5nc3BlbnVsdGltYXRlU3RyaW5ndWx0aW1hdGVTdHJpbmdwZW51bHRpbWF0ZXVsdGltYXRlZWxpc2lvbl9keW5hbWljQ29tcGFyZV9kZWZhdWx0Q29tcGFyZWRhcnQuY29udmVydFBPV0VSU19PRl9URU5DbGFzc0lEQ2FzdENvbnZlcnRlcnBhcnNlSGV4Qnl0ZWFzY2lpLmRhcnRiYXNlNjQuZGFydGJ5dGVfY29udmVyc2lvbi5kYXJ0Y2h1bmtlZF9jb252ZXJzaW9uLmRhcnRjb2RlYy5kYXJ0Y29udmVydGVyLmRhcnRlbmNvZGluZy5kYXJ0aHRtbF9lc2NhcGUuZGFydGpzb24uZGFydGxhdGluMS5kYXJ0bGluZV9zcGxpdHRlci5kYXJ0c3RyaW5nX2NvbnZlcnNpb24uZGFydHV0Zi5kYXJ0X0pzb25VdGY4RGVjb2Rlcl9yZXZpdmVyX2FsbG93TWFsZm9ybWVkY2h1bmtFbmRfSnNvbkxpc3RlbmVyaGFuZGxlU3RyaW5naGFuZGxlTnVtYmVyaGFuZGxlQm9vbGhhbmRsZU51bGxiZWdpbk9iamVjdHByb3BlcnR5VmFsdWVlbmRPYmplY3RiZWdpbkFycmF5YXJyYXlFbGVtZW50ZW5kQXJyYXlfQnVpbGRKc29uTGlzdGVuZXJwdXNoQ29udGFpbmVycG9wQ29udGFpbmVyX1Jldml2ZXJKc29uTGlzdGVuZXJyZXZpdmVyX051bWJlckJ1ZmZlcm1pbkNhcGFjaXR5a0RlZmF1bHRPdmVyaGVhZF9pbml0aWFsQ2FwYWNpdHllbnN1cmVDYXBhY2l0eXBhcnNlTnVtcGFyc2VEb3VibGVfQ2h1bmtlZEpzb25QYXJzZXJUT1BfTEVWRUxJTlNJREVfQVJSQVlJTlNJREVfT0JKRUNUQUZURVJfQ09MT05BTExPV19TVFJJTkdfTUFTS0FMTE9XX1ZBTFVFX01BU0tBTExPV19WQUxVRVNUUklOR19PTkxZTk9fVkFMVUVTTk9OX0VNUFRZRU1QVFlfTUFTS1NUQVRFX0lOSVRJQUxTVEFURV9FTkRTVEFURV9BUlJBWV9FTVBUWVNUQVRFX0FSUkFZX1ZBTFVFU1RBVEVfQVJSQVlfQ09NTUFTVEFURV9PQkpFQ1RfRU1QVFlTVEFURV9PQkpFQ1RfS0VZU1RBVEVfT0JKRUNUX0NPTE9OU1RBVEVfT0JKRUNUX1ZBTFVFU1RBVEVfT0JKRUNUX0NPTU1BVkFMVUVfUkVBRF9CSVRTQkFDS1NQQUNFVEFCTkVXTElORUNBUlJJQUdFX1JFVFVSTkZPUk1fRkVFRFFVT1RFREVDSU1BTFBPSU5UQ0hBUl8wQ0hBUl85Q0hBUl9FTEJSQUNLRVRSQlJBQ0tFVENIQVJfYUNIQVJfYkNIQVJfZUNIQVJfZkNIQVJfbENIQVJfbkNIQVJfckNIQVJfc0NIQVJfdENIQVJfdU5PX1BBUlRJQUxQQVJUSUFMX1NUUklOR1BBUlRJQUxfTlVNRVJBTFBBUlRJQUxfS0VZV09SRE1BU0tfUEFSVElBTE5VTV9TSUdOTlVNX1pFUk9OVU1fRElHSVROVU1fRE9UTlVNX0RPVF9ESUdJVE5VTV9FTlVNX0VfU0lHTk5VTV9FX0RJR0lUTlVNX1NVQ0NFU1NTVFJfUExBSU5TVFJfRVNDQVBFU1RSX1VTVFJfVV9DT1VOVF9TSElGVFNUUl9VX1ZBTFVFX1NISUZUS1dEX1RZUEVfTUFTS0tXRF9UWVBFX1NISUZUS1dEX05VTExLV0RfVFJVRUtXRF9GQUxTRUtXRF9CT01LV0RfQ09VTlRfU0hJRlRUV09fQklUX01BU0twYXJ0aWFsU3RhdGVzYXZlU3RhdGVyZXN0b3JlU3RhdGVwYXJ0aWFsVHlwZW51bVN0YXRlZmluaXNoQ2h1bmtOdW1iZXJVbnRlcm1pbmF0ZWQgc3RyaW5nZ2V0Q2hhcmNvcHlDaGFyc1RvTGlzdGJlZ2luU3RyaW5nYWRkQ2hhclRvU3RyaW5nYWRkU2xpY2VUb1N0cmluZ2VuZFN0cmluZ3BhcnNlUGFydGlhbHBhcnNlUGFydGlhbFN0cmluZ3BhcnNlUGFydGlhbE51bWJlcnBhcnNlUGFydGlhbEtleXdvcmRjb250aW51ZUNodW5rTnVtYmVycGFyc2VTdHJpbmdUb0J1ZmZlcnBhcnNlU3RyaW5nRXNjYXBlY2h1bmtTdHJpbmdFc2NhcGVVcGFyc2VIZXhEaWdpdEludmFsaWQgaGV4IGRpZ2l0a2V5d29yZFR5cGVrZXl3b3JkVHlwZUluZGV4w6/Cu8K/ZXhwZWN0ZWRDaGFycGFyc2VTdHJpbmdwYXJzZU51bGxwYXJzZUZhbHNlcGFyc2VUcnVlcGFyc2VOdW1iZXJwYXJzZUtleXdvcmRQcmVmaXhjaGFyc3NsaWNlRW5kQ29udHJvbCBjaGFyYWN0ZXIgaW4gc3RyaW5nY2h1bmtTdHJpbmdzdHJpbmdTdGF0ZXF1b3RlUG9zaXRpb25oZXhTdGFydEludmFsaWQgdW5pY29kZSBlc2NhcGVVbnJlY29nbml6ZWQgc3RyaW5nIGVzY2FwZWJlZ2luQ2h1bmtOdW1iZXJhZGROdW1iZXJDaHVua292ZXJoZWFkVW50ZXJtaW5hdGVkIG51bWJlciBsaXRlcmFsTWlzc2luZyBleHBlY3RlZCBkaWdpdGRpZ2l0Q291bnRoaWdoRGlnaXQ5MjIzMzcyMDM2ODU0Nzc1ODBleHBTaWduZXhwb25lbnRPdmVyZmxvd2JpdEZsYWc5MDA3MTk5MjU0NzQwOTkyLjBzaWduZWRNYW50aXNzYTEwLjAxMDAuMDEwMDAuMDEwMDAwLjAxMDAwMDAuMDEwMDAwMDAuMDEwMDAwMDAwLjAxMDAwMDAwMDAuMDEwMDAwMDAwMDAuMDEwMDAwMDAwMDAwLjAxMDAwMDAwMDAwMDAuMDEwMDAwMDAwMDAwMDAuMDEwMDAwMDAwMDAwMDAwLjAxMDAwMDAwMDAwMDAwMDAuMDEwMDAwMDAwMDAwMDAwMDAuMDEwMDAwMDAwMDAwMDAwMDAwLjAxMDAwMDAwMDAwMDAwMDAwMDAuMDEwMDAwMDAwMDAwMDAwMDAwMDAuMDEwMDAwMDAwMDAwMDAwMDAwMDAwLjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAuMDFlKzIxMWUrMjJVbmV4cGVjdGVkIGNoYXJhY3RlclVuZXhwZWN0ZWQgZW5kIG9mIGlucHV0X0pzb25TdHJpbmdQYXJzZXJfSnNvblN0cmluZ0RlY29kZXJTaW5rX3BhcnNlcl9jcmVhdGVQYXJzZXJfVXRmOFN0cmluZ0J1ZmZlcklOSVRJQUxfQ0FQQUNJVFlNQVNLX1RXT19CSVRNQVNLX1NJWkVTSElGVF9NSVNTSU5HU0hJRlRfVkFMVUVNQVhfQVNDSUlNQVhfVFdPX0JZVEVNQVhfVEhSRUVfQllURU1BWF9VTklDT0RFTUFTS19UV09fQllURU1BU0tfVEhSRUVfQllURU1BU0tfRk9VUl9CWVRFTUFTS19DT05USU5VRV9UQUdNQVNLX0NPTlRJTlVFX1ZBTFVFQ09OVElOVUVfVEFHTEVBRF9TVVJST0dBVEVUQUlMX1NVUlJPR0FURVNISUZUX0hJR0hfU1VSUk9HQVRFTUFTS19MT1dfU1VSUk9HQVRFaXNMYXRpbjFhZGRDb250aW51YXRpb25taXNzaW5nY29kZUVuZGFkZENoYXJDb2RlRXhwZWN0ZWQgVVRGLTggY29udGludWF0aW9uIGJ5dGUsIGZvdW5kIEludmFsaWQgZW5jb2Rpbmc6IFUrIGVuY29kZWQgaW4gIGJ5dGVzLkluY29tcGxldGUgVVRGLTggc2VxdWVuY2VfdG8xNkJpdGNvbnRpbnVlQnl0ZUNvdW50VW5leHBlY3RlZCBVVEYtOCBjb250aW51YXRpb24gYnl0ZUludmFsaWQgVVRGLTggYnl0ZTogc2VlbkJ5dGVDb3VudF9Kc29uVXRmOFBhcnNlcl9Kc29uVXRmOERlY29kZXJTaW5rX2FkZENodW5rQXNjaWlDb2RlY19hbGxvd0ludmFsaWRhbGxvd0ludmFsaWR1cy1hc2NpaV9Vbmljb2RlU3Vic2V0RW5jb2Rlcl9zdWJzZXRNYXNrc3RyaW5nTGVuZ3RoQ29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzLkFzY2lpRW5jb2Rlcl9Vbmljb2RlU3Vic2V0RW5jb2RlclNpbmtTb3VyY2UgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXIgd2l0aCBjb2RlIHBvaW50OiBfVW5pY29kZVN1YnNldERlY29kZXJJbnZhbGlkIHZhbHVlIGluIGlucHV0OiBfY29udmVydEludmFsaWRBc2NpaURlY29kZXJzdHJpbmdTaW5rX0Vycm9ySGFuZGxpbmdBc2NpaURlY29kZXJTaW5rX3V0ZjhTaW5rX1NpbXBsZUFzY2lpRGVjb2RlclNpbmtTb3VyY2UgY29udGFpbnMgbm9uLUFTQ0lJIGJ5dGVzLkJhc2U2NENvZGVjdXJsU2FmZWFscGhhYmV0aW52ZXJzZUFscGhhYmV0Zmlyc3RQYWRkaW5nZmlyc3RQYWRkaW5nU291cmNlSW5kZXhwYWRkaW5nQ291bnRvcmlnaW5hbENoYXJJbnZhbGlkIGJhc2U2NCBkYXRhZW5kTGVuZ3RoSW52YWxpZCBiYXNlNjQgZW5jb2RpbmcgbGVuZ3RoIF9jaGVja1BhZGRpbmdzb3VyY2VJbmRleEludmFsaWQgYmFzZTY0IHBhZGRpbmcsIHBhZGRlZCBsZW5ndGggbXVzdCBiZSBtdWx0aXBsZSBvZiBmb3VyLCBpcyBJbnZhbGlkIGJhc2U2NCBwYWRkaW5nLCAnPScgbm90IGF0IHRoZSBlbmRJbnZhbGlkIGJhc2U2NCBwYWRkaW5nLCBtb3JlIHRoYW4gdHdvICc9JyBjaGFyYWN0ZXJzQmFzZTY0RW5jb2Rlcl91cmxTYWZlX0Jhc2U2NEVuY29kZXJfYmFzZTY0QWxwaGFiZXRfYmFzZTY0VXJsQWxwaGFiZXRBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fX3ZhbHVlU2hpZnRfY291bnRNYXNrX3NpeEJpdE1hc2tfYWxwaGFiZXRfZW5jb2RlU3RhdGVfc3RhdGVCaXRzX3N0YXRlQ291bnRjcmVhdGVCdWZmZXJmdWxsQ2h1bmtzcGFydGlhbENodW5rTGVuZ3RoZW5jb2RlQ2h1bmtvdXRwdXRJbmRleGV4cGVjdGVkQ2hhcnNOb3QgYSBieXRlIHZhbHVlIGF0IGluZGV4IDogMHh3cml0ZUZpbmFsQ2h1bmtfQnVmZmVyQ2FjaGluZ0Jhc2U2NEVuY29kZXJidWZmZXJDYWNoZV9CYXNlNjRFbmNvZGVyU2lua19Bc2NpaUJhc2U2NEVuY29kZXJTaW5rX1V0ZjhCYXNlNjRFbmNvZGVyU2lua0Jhc2U2NERlY29kZXJfQmFzZTY0RGVjb2Rlcl9pbnZhbGlkX3BhZGRpbmdfcF9pbnZlcnNlQWxwaGFiZXRfY2hhcl9wZXJjZW50X2NoYXJfM19jaGFyX2RfZW5jb2RlQ2hhcmFjdGVyU3RhdGVfZW5jb2RlUGFkZGluZ1N0YXRlZXhwZWN0ZWRQYWRkaW5nX3N0YXRlUGFkZGluZ19oYXNTZWVuUGFkZGluZ01pc3NpbmcgcGFkZGluZyBjaGFyYWN0ZXJJbnZhbGlkIGxlbmd0aCwgbXVzdCBiZSBtdWx0aXBsZSBvZiBmb3VyZGVjb2RlQ2h1bmtvdXRJbmRleGNoYXJPckludmFsaWQgZW5jb2RpbmcgYmVmb3JlIHBhZGRpbmdJbnZhbGlkIGNoYXJhY3Rlcl9hbGxvY2F0ZUJ1ZmZlcnBhZGRpbmdTdGFydHJlbWFpbmRlckxlbmd0aF90cmltUGFkZGluZ0NoYXJzbmV3RW5kZXhwZWN0ZWRQYXJ0aWFsUGFkZGluZ0ludmFsaWQgcGFkZGluZyBjaGFyYWN0ZXJfQmFzZTY0RGVjb2RlclNpbmtfZGVjb2RlckJ5dGVDb252ZXJzaW9uU2lua3dpdGhDYWxsYmFja0J5dGVDb252ZXJzaW9uU2lua0Jhc2VfQnl0ZUFkYXB0ZXJTaW5rX0J5dGVDYWxsYmFja1NpbmtfSU5JVElBTF9CVUZGRVJfU0laRV9idWZmZXJJbmRleGZyZWVDb3VudGdyb3duX3JvdW5kVG9Qb3dlck9mMl9TaW1wbGVDYWxsYmFja1NpbmtfYWNjdW11bGF0ZWRfQ29udmVydGVyU3RyZWFtRXZlbnRTaW5rX2V2ZW50U2lua19jaHVua2VkU2lua0NvZGVjZnVzZWludmVydGVkX0Z1c2VkQ29kZWNfc2Vjb25kX0ludmVydGVkQ29kZWNfY29kZWNjb2RlY0NvbnZlcnRlclRoaXMgY29udmVydGVyIGRvZXMgbm90IHN1cHBvcnQgY2h1bmtlZCBjb252ZXJzaW9uczogX0Z1c2VkQ29udmVydGVyX25hbWVUb0VuY29kaW5naXNvXzg4NTktMToxOTg3aXNvLWlyLTEwMGlzb184ODU5LTFpc28tODg1OS0xbGF0aW4xbDFpYm04MTljcDgxOWNzaXNvbGF0aW4xaXNvLWlyLTZhbnNpX3gzLjQtMTk2OGFuc2lfeDMuNC0xOTg2aXNvXzY0Ni5pcnY6MTk5MWlzbzY0Ni11c3VzaWJtMzY3Y3AzNjdjc2FzY2lpY3N1dGY4dXRmLThkZWNvZGVTdHJlYW1ieXRlU3RyZWFtZ2V0QnlOYW1lSHRtbEVzY2FwZU1vZGVlc2NhcGVMdEd0ZXNjYXBlUXVvdGVzY2FwZUFwb3Nlc2NhcGVTbGFzaGF0dHJpYnV0ZXNxQXR0cmlidXRlY3VzdG9tSHRtbEVzY2FwZSZhbXA7JnF1b3Q7JiMzOTsmIzQ3O19IdG1sRXNjYXBlU2lua0pzb25VbnN1cHBvcnRlZE9iamVjdEVycm9ydW5zdXBwb3J0ZWRPYmplY3RwYXJ0aWFsUmVzdWx0c2FmZVN0cmluZ0NvbnZlcnRpbmcgb2JqZWN0IHRvIGFuIGVuY29kYWJsZSBvYmplY3QgZmFpbGVkOkNvbnZlcnRpbmcgb2JqZWN0IGRpZCBub3QgcmV0dXJuIGFuIGVuY29kYWJsZSBvYmplY3Q6SnNvbkN5Y2xpY0Vycm9yQ3ljbGljIGVycm9yIGluIEpTT04gc3RyaW5naWZ5SnNvbkNvZGVjX3RvRW5jb2RhYmxldG9FbmNvZGFibGV3aXRoUmV2aXZlcndpdGhJbmRlbnRKc29uVXRmOEVuY29kZXJfZGVmYXVsdEJ1ZmZlclNpemVERUZBVUxUX0JVRkZFUl9TSVpFX2luZGVudF9idWZmZXJTaXplYnVmZmVyU2l6ZV91dGY4RW5jb2RlYWRkQ2h1bmtieXRlTGlzdF9Kc29uRW5jb2RlclNpbmtfaXNEb25lT25seSBvbmUgY2FsbCB0byBhZGQgYWxsb3dlZGFzU3RyaW5nU2lua19Kc29uVXRmOEVuY29kZXJTaW5rSnNvbkRlY29kZXJfSnNvblN0cmluZ2lmaWVyYmFja3NwYWNldGFibmV3bGluZWNhcnJpYWdlUmV0dXJuZm9ybUZlZWRjaGFyXzBiYWNrc2xhc2hjaGFyX2JjaGFyX2ZjaGFyX25jaGFyX3JjaGFyX3RjaGFyX3Vfc2Vlbl9wYXJ0aWFsUmVzdWx0Y2hhcmFjdGVyc3dyaXRlU3RyaW5nU2xpY2V3cml0ZU51bWJlcndyaXRlU3RyaW5nQ29udGVudF9jaGVja0N5Y2xlX3JlbW92ZVNlZW53cml0ZU9iamVjdHdyaXRlSnNvblZhbHVlY3VzdG9tSnNvbndyaXRlTWFwa2V5VmFsdWVMaXN0YWxsU3RyaW5nS2V5cywiIjpfSnNvblByZXR0eVByaW50TWl4aW5pbmRlbnRMZXZlbF9Kc29uU3RyaW5nU3RyaW5naWZpZXJfX0pzb25TdHJpbmdTdHJpbmdpZmllclByZXR0eSZfSnNvblN0cmluZ1N0cmluZ2lmaWVyJl9Kc29uUHJldHR5UHJpbnRNaXhpbl9Kc29uU3RyaW5nU3RyaW5naWZpZXJQcmV0dHlfSnNvblV0ZjhTdHJpbmdpZmllcndyaXRlQXNjaWlTdHJpbmd3cml0ZUZvdXJCeXRlQ2hhckNvZGV3cml0ZU11bHRpQnl0ZUNoYXJDb2RlX19Kc29uVXRmOFN0cmluZ2lmaWVyUHJldHR5Jl9Kc29uVXRmOFN0cmluZ2lmaWVyJl9Kc29uUHJldHR5UHJpbnRNaXhpbl9Kc29uVXRmOFN0cmluZ2lmaWVyUHJldHR5TGF0aW4xQ29kZWNMYXRpbjFFbmNvZGVyTGF0aW4xRGVjb2Rlcl9MYXRpbjFEZWNvZGVyU2lua19hZGRTbGljZVRvU2lua19jaGVja1ZhbGlkTGF0aW4xX3JlcG9ydEludmFsaWRMYXRpbjFTb3VyY2UgY29udGFpbnMgbm9uLUxhdGluLTEgY2hhcmFjdGVycy5fTGF0aW4xQWxsb3dJbnZhbGlkRGVjb2RlclNpbmtwcmV2aW91c0NoYXJfTGluZVNwbGl0dGVyU2lua19jYXJyeV9za2lwTGVhZGluZ0xGX2FkZExpbmVzX0xpbmVTcGxpdHRlckV2ZW50U2lua2Zyb21TdHJpbmdTaW5rQ2xvc2FibGVTdHJpbmdTaW5rX0Nsb3NhYmxlU3RyaW5nU2lua19TdHJpbmdDb252ZXJzaW9uU2lua0FzU3RyaW5nU2lua0FkYXB0ZXJfTUlOX1NUUklOR19TSVpFU3RyaW5nQ29udmVyc2lvblNpbmtCYXNlU3RyaW5nQ29udmVyc2lvblNpbmtNaXhpbl9TdHJpbmdTaW5rQ29udmVyc2lvblNpbmtUU3RyaW5nU2lua19zdHJpbmdTaW5rX1N0cmluZ0NhbGxiYWNrU2lua19TdHJpbmdBZGFwdGVyU2lua19VdGY4U3RyaW5nU2lua0FkYXB0ZXJlbmRJbmRleF9VdGY4Q29udmVyc2lvblNpbmtzdHJpbmdCdWZmZXJVdGY4Q29kZWNVdGY4RW5jb2Rlcl9maWxsQnVmZmVybGFzdENvZGVVbml0d2FzQ29tYmluZWRfd3JpdGVTdXJyb2dhdGVfVXRmOEVuY29kZXJfREVGQVVMVF9CWVRFX0JVRkZFUl9TSVpFd2l0aEJ1ZmZlclNpemVsZWFkaW5nU3Vycm9nYXRlbmV4dENvZGVVbml0c3RyaW5nSW5kZXhfX1V0ZjhFbmNvZGVyU2luayZfVXRmOEVuY29kZXImU3RyaW5nQ29udmVyc2lvblNpbmtNaXhpbl9VdGY4RW5jb2RlclNpbmtpc0xhc3RTbGljZWhhc0JlZW5Db21iaW5lZFV0ZjhEZWNvZGVyb25lQnl0ZXNpc0ZpcnN0Q2hhcmFjdGVyZmlyc3RQYXJ0X2lzRmlyc3RDaGFyYWN0ZXJfY29udmVydEludGVyY2VwdGVkX1V0ZjhEZWNvZGVyX2V4cGVjdGVkVW5pdHNfZXh0cmFVbml0c19MSU1JVFNoYXNQYXJ0aWFsSW5wdXRVbmZpbmlzaGVkIFVURi04IG9jdGV0IHNlcXVlbmNlZXhwZWN0ZWRVbml0c2V4dHJhVW5pdHNCYWQgVVRGLTggZW5jb2RpbmcgMHhPdmVybG9uZyBlbmNvZGluZyBvZiAweENoYXJhY3RlciBvdXRzaWRlIHZhbGlkIFVuaWNvZGUgcmFuZ2U6IE5lZ2F0aXZlIFVURi04IGNvZGUgdW5pdDogLTB4X2FzY2lpTWFza2Jhc2U2NGJhc2U2NFVybF9wYWRkaW5nQ2hhcmh0bWxFc2NhcGVfbGF0aW4xTWFza19PTkVfQllURV9MSU1JVF9UV09fQllURV9MSU1JVF9USFJFRV9CWVRFX0xJTUlUX0ZPVVJfQllURV9MSU1JVF9TVVJST0dBVEVfVEFHX01BU0tfU1VSUk9HQVRFX1ZBTFVFX01BU0tfTEVBRF9TVVJST0dBVEVfTUlOX1RBSUxfU1VSUk9HQVRFX01JTl9wYXJzZURvdWJsZURvdWJsZV9wYXJzZWJhc2U2NEVuY29kZWJhc2U2NFVybEVuY29kZWJhc2U2NERlY29kZV9wYXJzZUpzb25fZGVmYXVsdFRvRW5jb2RhYmxlX2lzTGVhZFN1cnJvZ2F0ZV9pc1RhaWxTdXJyb2dhdGVfY29tYmluZVN1cnJvZ2F0ZVBhaXJsZWFkX3NjYW5PbmVCeXRlQ2hhcmFjdGVyc3VuaXRzZGFydC5kZXZlbG9wZXJTZW5kUG9ydFJhd1JlY2VpdmVQb3J0ZXh0ZW5zaW9uLmRhcnRwcm9maWxlci5kYXJ0c2VydmljZS5kYXJ0dGltZWxpbmUuZGFydFNlcnZpY2VFeHRlbnNpb25IYW5kbGVyVGltZWxpbmVTeW5jRnVuY3Rpb25UaW1lbGluZUFzeW5jRnVuY3Rpb25fVXNlclRhZ1VzZXJUYWdfbmV3VXNlclRhZ19sYWJlbG1ha2VDdXJyZW50VXNlclRhZ19tYWtlQ3VycmVudFNlcnZpY2VFeHRlbnNpb25SZXNwb25zZWVycm9yRGV0YWlsa0ludmFsaWRQYXJhbXNrRXh0ZW5zaW9uRXJyb3JrRXh0ZW5zaW9uRXJyb3JNYXhrRXh0ZW5zaW9uRXJyb3JNaW5pbnZhbGlkUGFyYW1zZXh0ZW5zaW9uRXJyb3JleHRlbnNpb25FcnJvck1heGV4dGVuc2lvbkVycm9yTWluX2Vycm9yQ29kZU1lc3NhZ2VJbnZhbGlkIHBhcmFtc1NlcnZlciBlcnJvcl92YWxpZGF0ZUVycm9yQ29kZU91dCBvZiByYW5nZWlzRXJyb3JfdG9TdHJpbmdVc2VyVGFnTUFYX1VTRVJfVEFHU2RlZmF1bHRUYWdNZXRyaWNJbnZhbGlkIE1ldHJpYyBuYW1lLl90b0pTT05HYXVnZW1pbiBtdXN0IGJlIGxlc3MgdGhhbiBtYXhtZXRyaWNzL0NvdW50ZXJNZXRyaWNzX21ldHJpY3NtZXRyaWNSZWdpc3RlcmVkIG1ldHJpY3MgaGF2ZSB1bmlxdWUgbmFtZXNkZXJlZ2lzdGVyX3ByaW50TWV0cmljX3ByaW50TWV0cmljc21ldHJpY3NNZXRyaWNMaXN0U2VydmljZVByb3RvY29sSW5mb21ham9yVmVyc2lvbkRhcnQgVk0gU2VydmljZSBQcm90b2NvbCB2bGlzdGVuaW5nIG9uIFNlcnZpY2VnZXRJbmZvcmVjZWl2ZVBvcnR1cmlDb21wbGV0ZXJzZW5kUG9ydGNvbnRyb2xXZWJTZXJ2ZXJlbmFibGVnZXRJc29sYXRlSURjb250cm9sUG9ydEZsb3dUaW1lbGluZXN0YXJ0U3luY19hcmd1bWVudHNmaW5pc2hTeW5jVW5ldmVuIGNhbGxzIHRvIHN0YXJ0U3luYyBhbmQgZmluaXNoU3luY2luc3RhbnRTeW5jaW5zdGFudEFyZ3VtZW50c3RpbWVTeW5jVGltZWxpbmVUYXNrX3Rhc2tJZHdpdGhUYXNrSWR0YXNrSWRpbnN0YW50VW5ldmVuIGNhbGxzIHRvIHN0YXJ0IGFuZCBmaW5pc2hwYXNzWW91IGNhbm5vdCBwYXNzIGEgVGltZWxpbmVUYXNrIHdpdGhvdXQgZmluaXNoaW5nIGFsbCBzdGFydGVkIG9wZXJhdGlvbnNfQXN5bmNCbG9ja19TeW5jQmxvY2tfc3RhcnRDcHVfZmxvd19uZXh0U2VxdWVuY2VOdW1iZXJfaGFzVGltZWxpbmVEZXZlbG9wZXJfbG9ndGltZXN0YW1wX3J1bkV4dGVuc2lvbnBhcmFtZXRlcktleXNwYXJhbWV0ZXJWYWx1ZXNyZXBseVBvcnR0cmFjZV9zZXJ2aWNlZXJyb3JEZXRhaWxzRXh0ZW5zaW9uIGhhbmRsZXIgbXVzdCByZXR1cm4gYSBGdXR1cmVFeHRlbnNpb24gaGFuZGxlciBtdXN0IGNvbXBsZXRlIHRvIGEgU2VydmljZUV4dGVuc2lvblJlc3BvbnNlX3Bvc3RSZXNwb25zZXZtLXNlcnZpY2U6IHBvc3Rpbmcgbm8gcmVzcG9uc2UgZm9yIHJlcXVlc3R7Impzb25ycGMiOiIyLjAiLHZtLXNlcnZpY2U6IHBvc3RpbmcgZXJyb3IgcmVzcG9uc2UgZm9yIHJlcXVlc3QgImVycm9yIjp2bS1zZXJ2aWNlOiBwb3N0aW5nIHJlc3BvbnNlIGZvciByZXF1ZXN0ICJyZXN1bHQiOiJpZCI6IiJ9ImlkIjpfZ2V0Q3VycmVudFRhZ1Byb2ZpbGVyX2dldEN1cnJlbnRUYWdfZ2V0RGVmYXVsdFRhZ1VzZXJUYWdfZGVmYXVsdFRhZ0RldmVsb3Blcl9kZWJ1Z2dlcndoZW5pbnNwZWN0RGV2ZWxvcGVyX2luc3BlY3RNdXN0IGJlIGEgU3RyaW5nTXVzdCBiZSBhIERhdGVUaW1lcmVnaXN0ZXJFeHRlbnNpb25leHQuTXVzdCBiZWdpbiB3aXRoIGV4dC5FeHRlbnNpb24gYWxyZWFkeSByZWdpc3RlcmVkOiBwb3N0RXZlbnRldmVudEtpbmRldmVudERhdGFldmVudERhdGFBc1N0cmluZ19wb3N0RXZlbnREZXZlbG9wZXJfcG9zdEV2ZW50X2xvb2t1cEV4dGVuc2lvbkRldmVsb3Blcl9sb29rdXBFeHRlbnNpb25fcmVnaXN0ZXJFeHRlbnNpb25EZXZlbG9wZXJfcmVnaXN0ZXJFeHRlbnNpb25nZXRDdXJyZW50VGFnX2dldFNlcnZlckluZm9EZXZlbG9wZXJfZ2V0U2VydmVySW5mb193ZWJTZXJ2ZXJDb250cm9sRGV2ZWxvcGVyX3dlYlNlcnZlckNvbnRyb2xfZ2V0U2VydmljZU1ham9yVmVyc2lvbkRldmVsb3Blcl9nZXRTZXJ2aWNlTWFqb3JWZXJzaW9uX2dldFNlcnZpY2VNaW5vclZlcnNpb25EZXZlbG9wZXJfZ2V0U2VydmljZU1pbm9yVmVyc2lvbl9nZXRJc29sYXRlSURGcm9tU2VuZFBvcnREZXZlbG9wZXJfZ2V0SXNvbGF0ZUlERnJvbVNlbmRQb3J0X2FyZ3VtZW50c0FzSnNvbl9pc0RhcnRTdHJlYW1FbmFibGVkVGltZWxpbmVfaXNEYXJ0U3RyZWFtRW5hYmxlZF9nZXROZXh0QXN5bmNJZFRpbWVsaW5lX2dldE5leHRBc3luY0lkX2dldFRyYWNlQ2xvY2tUaW1lbGluZV9nZXRUcmFjZUNsb2NrX2dldFRocmVhZENwdUNsb2NrVGltZWxpbmVfZ2V0VGhyZWFkQ3B1Q2xvY2tfcmVwb3J0VGFza0V2ZW50VGltZWxpbmVfcmVwb3J0VGFza0V2ZW50YXJndW1lbnRzQXNKc29uX3JlcG9ydENvbXBsZXRlRXZlbnRUaW1lbGluZV9yZXBvcnRDb21wbGV0ZUV2ZW50c3RhcnRDcHVfcmVwb3J0Rmxvd0V2ZW50VGltZWxpbmVfcmVwb3J0Rmxvd0V2ZW50X3JlcG9ydEluc3RhbnRFdmVudFRpbWVsaW5lX3JlcG9ydEluc3RhbnRFdmVudGRhcnQuZmZpbmF0aXZlX3R5cGUuZGFydGFubm90YXRpb25zLmRhcnRkeW5hbWljX2xpYnJhcnkuZGFydHN0cnVjdC5kYXJ0UG9pbnRlcmFsbG9jYXRlZnJvbUFkZHJlc3NwdHJmcm9tRnVuY3Rpb25GZmlfZnJvbUZ1bmN0aW9uZXhjZXB0aW9uYWxSZXR1cm5GZmlfc3RvcmVGZmlfbG9hZGFkZHJlc3NGZmlfYWRkcmVzc0ZmaV9lbGVtZW50QXRvZmZzZXRCeUZmaV9vZmZzZXRCeUZmaV9jYXN0YXNGdW5jdGlvblBvaW50ZXIuYXNGdW5jdGlvbiBjYW5ub3QgYmUgY2FsbGVkIGR5bmFtaWNhbGx5LkZmaV9mcmVlTmF0aXZlVHlwZV9OYXRpdmVJbnRlZ2VyX05hdGl2ZURvdWJsZUludDhJbnQxNkludDMySW50NjRVaW50OFVpbnQxNlVpbnQzMlVpbnQ2NEludFB0ckZsb2F0Vm9pZE5hdGl2ZUZ1bmN0aW9uRGFydFJlcHJlc2VudGF0aW9uT2ZVbnNpemVkRHluYW1pY0xpYnJhcnlnZXRIYW5kbGVGZmlfZGxfZ2V0SGFuZGxlRmZpX2RsX2xvb2t1cHN5bWJvbE5hbWVsb29rdXBGdW5jdGlvbkR5bmFtaWMgaW52b2NhdGlvbiBvZiBsb29rdXBGdW5jdGlvbiBpcyBub3Qgc3VwcG9ydGVkLlN0cnVjdGFkZHJlc3NPZmZyb21Qb2ludGVybnVsbHB0cnVuc2l6ZWRfb3BlbkZmaV9kbF9vcGVuX2FsbG9jYXRlRmZpX2FsbG9jYXRlX2Zyb21BZGRyZXNzRmZpX2Zyb21BZGRyZXNzX2FzRnVuY3Rpb25JbnRlcm5hbEZmaV9hc0Z1bmN0aW9uSW50ZXJuYWxEU05TRmZpX3NpemVPZmRhcnQuX2ludGVybmFsSW50MzJMaXN0YXN5bmNfY2FzdC5kYXJ0Y2FzdC5kYXJ0cHJpbnQuZGFydHNvcnQuZGFydHN5bWJvbC5kYXJ0X1ByaW50Q2xvc3VyZV9FbGVtZW50UHJlZGljYXRlX0V4cGFuZEZ1bmN0aW9udGltZXJGYWN0b3J5ZXZlbnRIYW5kbGVyU2VuZERhdGF0aW1lck1pbGxpc2Vjb25kQ2xvY2tyZXNvdXJjZVJlYWRBc0J5dGVzcGFja2FnZVJvb3RTdHJpbmdwYWNrYWdlQ29uZmlnU3RyaW5ncGFja2FnZVJvb3RVcmlGdXR1cmVwYWNrYWdlQ29uZmlnVXJpRnV0dXJlcmVzb2x2ZVBhY2thZ2VVcmlGdXR1cmVfY29tcHV0ZVNjcmlwdFVyaV9jYWNoZWRTY3JpcHRwbGF0Zm9ybVNjcmlwdExpc3Rzc3JjU3RhcnRkc3RTdGFydGNpZEFycmF5Y2lkRXh0ZXJuYWxPbmVCeXRlU3RyaW5nY2lkR3Jvd2FibGVPYmplY3RBcnJheWNpZEltbXV0YWJsZUFycmF5Y2lkT25lQnl0ZVN0cmluZ2NpZFR3b0J5dGVTdHJpbmdjaWRVaW50OEFycmF5Vmlld2dldElEQ2xhc3NJRF9nZXRJRF9QYXRjaENvZGVVbml0c19zdHJpbmdzdHJpbmdPZjIuMkh0dHBTdGF0dXNjb250aW51ZV9zd2l0Y2hpbmdQcm90b2NvbHNwcm9jZXNzaW5nb2tjcmVhdGVkYWNjZXB0ZWRub25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb25ub0NvbnRlbnRyZXNldENvbnRlbnRwYXJ0aWFsQ29udGVudG11bHRpU3RhdHVzYWxyZWFkeVJlcG9ydGVkaW1Vc2VkbXVsdGlwbGVDaG9pY2VzbW92ZWRQZXJtYW5lbnRseW1vdmVkVGVtcG9yYXJpbHlzZWVPdGhlcm5vdE1vZGlmaWVkdXNlUHJveHl0ZW1wb3JhcnlSZWRpcmVjdHBlcm1hbmVudFJlZGlyZWN0YmFkUmVxdWVzdHVuYXV0aG9yaXplZHBheW1lbnRSZXF1aXJlZGZvcmJpZGRlbm1ldGhvZE5vdEFsbG93ZWRub3RBY2NlcHRhYmxlcHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkcmVxdWVzdFRpbWVvdXRjb25mbGljdGdvbmVsZW5ndGhSZXF1aXJlZHByZWNvbmRpdGlvbkZhaWxlZHJlcXVlc3RFbnRpdHlUb29MYXJnZXJlcXVlc3RVcmlUb29Mb25ndW5zdXBwb3J0ZWRNZWRpYVR5cGVyZXF1ZXN0ZWRSYW5nZU5vdFNhdGlzZmlhYmxlZXhwZWN0YXRpb25GYWlsZWRtaXNkaXJlY3RlZFJlcXVlc3R1bnByb2Nlc3NhYmxlRW50aXR5bG9ja2VkZmFpbGVkRGVwZW5kZW5jeXVwZ3JhZGVSZXF1aXJlZHByZWNvbmRpdGlvblJlcXVpcmVkdG9vTWFueVJlcXVlc3RzcmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlY29ubmVjdGlvbkNsb3NlZFdpdGhvdXRSZXNwb25zZXVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zY2xpZW50Q2xvc2VkUmVxdWVzdGludGVybmFsU2VydmVyRXJyb3Jub3RJbXBsZW1lbnRlZGJhZEdhdGV3YXlzZXJ2aWNlVW5hdmFpbGFibGVnYXRld2F5VGltZW91dGh0dHBWZXJzaW9uTm90U3VwcG9ydGVkdmFyaWFudEFsc29OZWdvdGlhdGVzaW5zdWZmaWNpZW50U3RvcmFnZWxvb3BEZXRlY3RlZG5vdEV4dGVuZGVkbmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWRuZXR3b3JrQ29ubmVjdFRpbWVvdXRFcnJvclVzZSBjb250aW51ZV8gaW5zdGVhZFNXSVRDSElOR19QUk9UT0NPTFNVc2Ugc3dpdGNoaW5nUHJvdG9jb2xzIGluc3RlYWRPS1VzZSBvayBpbnN0ZWFkQ1JFQVRFRFVzZSBjcmVhdGVkIGluc3RlYWRBQ0NFUFRFRFVzZSBhY2NlcHRlZCBpbnN0ZWFkTk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT05Vc2Ugbm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uIGluc3RlYWROT19DT05URU5UVXNlIG5vQ29udGVudCBpbnN0ZWFkUkVTRVRfQ09OVEVOVFVzZSByZXNldENvbnRlbnQgaW5zdGVhZFBBUlRJQUxfQ09OVEVOVFVzZSBwYXJ0aWFsQ29udGVudCBpbnN0ZWFkTVVMVElQTEVfQ0hPSUNFU1VzZSBtdWx0aXBsZUNob2ljZXMgaW5zdGVhZE1PVkVEX1BFUk1BTkVOVExZVXNlIG1vdmVkUGVybWFuZW50bHkgaW5zdGVhZEZPVU5EVXNlIGZvdW5kIGluc3RlYWRNT1ZFRF9URU1QT1JBUklMWVVzZSBtb3ZlZFRlbXBvcmFyaWx5IGluc3RlYWRTRUVfT1RIRVJVc2Ugc2VlT3RoZXIgaW5zdGVhZE5PVF9NT0RJRklFRFVzZSBub3RNb2RpZmllZCBpbnN0ZWFkVVNFX1BST1hZVXNlIHVzZVByb3h5IGluc3RlYWRURU1QT1JBUllfUkVESVJFQ1RVc2UgdGVtcG9yYXJ5UmVkaXJlY3QgaW5zdGVhZEJBRF9SRVFVRVNUVXNlIGJhZFJlcXVlc3QgaW5zdGVhZFVOQVVUSE9SSVpFRFVzZSB1bmF1dGhvcml6ZWQgaW5zdGVhZFBBWU1FTlRfUkVRVUlSRURVc2UgcGF5bWVudFJlcXVpcmVkIGluc3RlYWRGT1JCSURERU5Vc2UgZm9yYmlkZGVuIGluc3RlYWROT1RfRk9VTkRVc2Ugbm90Rm91bmQgaW5zdGVhZE1FVEhPRF9OT1RfQUxMT1dFRFVzZSBtZXRob2ROb3RBbGxvd2VkIGluc3RlYWROT1RfQUNDRVBUQUJMRVVzZSBub3RBY2NlcHRhYmxlIGluc3RlYWRQUk9YWV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRFVzZSBwcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQgaW5zdGVhZFJFUVVFU1RfVElNRU9VVFVzZSByZXF1ZXN0VGltZW91dCBpbnN0ZWFkQ09ORkxJQ1RVc2UgY29uZmxpY3QgaW5zdGVhZEdPTkVVc2UgZ29uZSBpbnN0ZWFkTEVOR1RIX1JFUVVJUkVEVXNlIGxlbmd0aFJlcXVpcmVkIGluc3RlYWRQUkVDT05ESVRJT05fRkFJTEVEVXNlIHByZWNvbmRpdGlvbkZhaWxlZCBpbnN0ZWFkUkVRVUVTVF9FTlRJVFlfVE9PX0xBUkdFVXNlIHJlcXVlc3RFbnRpdHlUb29MYXJnZSBpbnN0ZWFkUkVRVUVTVF9VUklfVE9PX0xPTkdVc2UgcmVxdWVzdFVyaVRvb0xvbmcgaW5zdGVhZFVOU1VQUE9SVEVEX01FRElBX1RZUEVVc2UgdW5zdXBwb3J0ZWRNZWRpYVR5cGUgaW5zdGVhZFJFUVVFU1RFRF9SQU5HRV9OT1RfU0FUSVNGSUFCTEVVc2UgcmVxdWVzdGVkUmFuZ2VOb3RTYXRpc2ZpYWJsZSBpbnN0ZWFkRVhQRUNUQVRJT05fRkFJTEVEVXNlIGV4cGVjdGF0aW9uRmFpbGVkIGluc3RlYWRVUEdSQURFX1JFUVVJUkVEVXNlIHVwZ3JhZGVSZXF1aXJlZCBpbnN0ZWFkSU5URVJOQUxfU0VSVkVSX0VSUk9SVXNlIGludGVybmFsU2VydmVyRXJyb3IgaW5zdGVhZE5PVF9JTVBMRU1FTlRFRFVzZSBub3RJbXBsZW1lbnRlZCBpbnN0ZWFkQkFEX0dBVEVXQVlVc2UgYmFkR2F0ZXdheSBpbnN0ZWFkU0VSVklDRV9VTkFWQUlMQUJMRVVzZSBzZXJ2aWNlVW5hdmFpbGFibGUgaW5zdGVhZEdBVEVXQVlfVElNRU9VVFVzZSBnYXRld2F5VGltZW91dCBpbnN0ZWFkSFRUUF9WRVJTSU9OX05PVF9TVVBQT1JURURVc2UgaHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQgaW5zdGVhZE5FVFdPUktfQ09OTkVDVF9USU1FT1VUX0VSUk9SVXNlIG5ldHdvcmtDb25uZWN0VGltZW91dEVycm9yIGluc3RlYWRDYXN0U3RyZWFtU3Vic2NyaXB0aW9uX0Nhc3RJdGVyYWJsZUJhc2VDYXN0SXRlcmF0b3JDYXN0SXRlcmFibGVfRWZmaWNpZW50TGVuZ3RoQ2FzdEl0ZXJhYmxlX19DYXN0TGlzdEJhc2UmX0Nhc3RJdGVyYWJsZUJhc2UmTGlzdE1peGluX0Nhc3RMaXN0QmFzZXYxQ2FzdExpc3RDYXN0U2V0X2RlZmF1bHRFbXB0eVNldF9jb25kaXRpb25hbEFkZG90aGVyQ29udGFpbnNjYXN0RWxlbWVudENhc3RNYXBTS1NWQ2FzdFF1ZXVlRWZmaWNpZW50TGVuZ3RoSXRlcmFibGVMaXN0SXRlcmFibGVTdWJMaXN0SXRlcmFibGVfZW5kT3JMZW5ndGhfZW5kSW5kZXhyZWFsSW5kZXhuZXdTdGFydExpc3RJdGVyYXRvck1hcHBlZEl0ZXJhYmxlX2ZFZmZpY2llbnRMZW5ndGhNYXBwZWRJdGVyYWJsZU1hcHBlZEl0ZXJhdG9yTWFwcGVkTGlzdEl0ZXJhYmxlV2hlcmVJdGVyYWJsZVdoZXJlSXRlcmF0b3JFeHBhbmRJdGVyYWJsZUV4cGFuZEl0ZXJhdG9yX2N1cnJlbnRFeHBhbnNpb25UYWtlSXRlcmFibGVfdGFrZUNvdW50dGFrZUNvdW50RWZmaWNpZW50TGVuZ3RoVGFrZUl0ZXJhYmxlaXRlcmFibGVMZW5ndGhUYWtlSXRlcmF0b3JUYWtlV2hpbGVJdGVyYWJsZVRha2VXaGlsZUl0ZXJhdG9yX2lzRmluaXNoZWRTa2lwSXRlcmFibGVfc2tpcENvdW50RWZmaWNpZW50TGVuZ3RoU2tpcEl0ZXJhYmxlU2tpcEl0ZXJhdG9yU2tpcFdoaWxlSXRlcmFibGVTa2lwV2hpbGVJdGVyYXRvcl9oYXNTa2lwcGVkRW1wdHlJdGVyYWJsZUZvbGxvd2VkQnlJdGVyYWJsZWZpcnN0RWZmaWNpZW50RWZmaWNpZW50TGVuZ3RoRm9sbG93ZWRCeUl0ZXJhYmxlRm9sbG93ZWRCeUl0ZXJhdG9yX25leHRJdGVyYWJsZVdoZXJlVHlwZUl0ZXJhYmxlV2hlcmVUeXBlSXRlcmF0b3Jub0VsZW1lbnR0b29NYW55dG9vRmV3Rml4ZWRMZW5ndGhMaXN0TWl4aW5DYW5ub3QgYWRkIHRvIGEgZml4ZWQtbGVuZ3RoIGxpc3RDYW5ub3QgcmVtb3ZlIGZyb20gYSBmaXhlZC1sZW5ndGggbGlzdENhbm5vdCBjbGVhciBhIGZpeGVkLWxlbmd0aCBsaXN0VW5tb2RpZmlhYmxlTGlzdE1peGluQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdENhbm5vdCBjaGFuZ2UgdGhlIGxlbmd0aCBvZiBhbiB1bm1vZGlmaWFibGUgbGlzdENhbm5vdCBhZGQgdG8gYW4gdW5tb2RpZmlhYmxlIGxpc3RDYW5ub3QgcmVtb3ZlIGZyb20gYW4gdW5tb2RpZmlhYmxlIGxpc3RDYW5ub3QgY2xlYXIgYW4gdW5tb2RpZmlhYmxlIGxpc3RGaXhlZExlbmd0aExpc3RCYXNlVW5tb2RpZmlhYmxlTGlzdEJhc2VfTGlzdEluZGljZXNJdGVyYWJsZV9iYWNrZWRMaXN0TGlzdE1hcFZpZXdSZXZlcnNlZExpc3RJdGVyYWJsZVVubW9kaWZpYWJsZUxpc3RFcnJvckNhbm5vdCBhZGQgdG8gdW5tb2RpZmlhYmxlIExpc3RDYW5ub3QgY2hhbmdlIHRoZSBjb250ZW50IG9mIGFuIHVubW9kaWZpYWJsZSBMaXN0Q2Fubm90IGNoYW5nZSBsZW5ndGggb2YgdW5tb2RpZmlhYmxlIExpc3RDYW5ub3QgcmVtb3ZlIGZyb20gdW5tb2RpZmlhYmxlIExpc3ROb25Hcm93YWJsZUxpc3RFcnJvckNhbm5vdCBhZGQgdG8gbm9uLWdyb3dhYmxlIExpc3RDYW5ub3QgY2hhbmdlIGxlbmd0aCBvZiBub24tZ3Jvd2FibGUgTGlzdENhbm5vdCByZW1vdmUgZnJvbSBub24tZ3Jvd2FibGUgTGlzdFNvcnRfSU5TRVJUSU9OX1NPUlRfVEhSRVNIT0xEc29ydFJhbmdlT3V0T2ZSYW5nZV9kb1NvcnRfaW5zZXJ0aW9uU29ydGVsX2R1YWxQaXZvdFF1aWNrc29ydHNpeHRoaW5kZXgxaW5kZXg1aW5kZXgzaW5kZXgyaW5kZXg0ZWwxZWwyZWwzZWw0ZWw1cGl2b3QxcGl2b3QyZ3JlYXRwaXZvdHNfYXJlX2VxdWFsYWtjb21wX3Bpdm90MWNvbXBfcGl2b3QycmVzZXJ2ZWRXb3JkUkUoPzphc3NlcnR8YnJlYWt8Yyg/OmEoPzpzZXx0Y2gpfGxhc3N8b24oPzpzdHx0aW51ZSkpfGQoPzplZmF1bHR8byl8ZSg/OmxzZXxudW18eHRlbmRzKXxmKD86YWxzZXxpbmFsKD86bHkpP3xvcil8aVtmbnNdfG4oPzpld3x1bGwpfHJldCg/Omhyb3d8dXJuKXxzKD86dXBlcnx3aXRjaCl8dCg/OmgoPzppc3xyb3cpfHIoPzp1ZXx5KSl8dig/OmFyfG9pZCl8dyg/OmhpbGV8aXRoKSlwdWJsaWNJZGVudGlmaWVyUkUoPyEoPzphc3NlcnR8YnJlYWt8Yyg/OmEoPzpzZXx0Y2gpfGxhc3N8b24oPzpzdHx0aW51ZSkpfGQoPzplZmF1bHR8byl8ZSg/OmxzZXxudW18eHRlbmRzKXxmKD86YWxzZXxpbmFsKD86bHkpP3xvcil8aVtmbnNdfG4oPzpld3x1bGwpfHJldCg/Omhyb3d8dXJuKXxzKD86dXBlcnx3aXRjaCl8dCg/OmgoPzppc3xyb3cpfHIoPzp1ZXx5KSl8dig/OmFyfG9pZCl8dyg/OmhpbGV8aXRoKSlcYig/IVwkKSlbYS16QS1aJF1bXHckXSooPyEoPzphc3NlcnR8YnJlYWt8Yyg/OmEoPzpzZXx0Y2gpfGxhc3N8b24oPzpzdHx0aW51ZSkpfGQoPzplZmF1bHR8byl8ZSg/OmxzZXxudW18eHRlbmRzKXxmKD86YWxzZXxpbmFsKD86bHkpP3xvcil8aVtmbnNdfG4oPzpld3x1bGwpfHJldCg/Omhyb3d8dXJuKXxzKD86dXBlcnx3aXRjaCl8dCg/OmgoPzppc3xyb3cpfHIoPzp1ZXx5KSl8dig/OmFyfG9pZCl8dyg/OmhpbGV8aXRoKSlcYig/IVwkKSlbYS16QS1aJF9dW1x3JF0qb3BlcmF0b3JSRSg/OltcLSsqLyUmfF5dfFxbXF09P3w9PXx+Lz98PFs8PV0/fD5bPj1dP3x1bmFyeS0pcHVibGljU3ltYm9sUGF0dGVybl4oPzokfCg/Oj0/JHxbLl0oPyEkKSkpKz8kc3ltYm9sUGF0dGVybnVudmFsaWRhdGVkU3ltYm9sKCJ2YWxpZGF0ZVB1YmxpY1N5bWJvbCIgaXMgYSBwcml2YXRlIGlkZW50aWZpZXIiIGlzIG5vdCBhIHZhbGlkIChxdWFsaWZpZWQpIHN5bWJvbCBuYW1laXNWYWxpZFN5bWJvbGNvbXB1dGVVbm1hbmdsZWROYW1lYWRkX3NldHRlcl9zdWZmaXhuZXdMYXN0bmV3Rmlyc3RpczY0Qml0X3ByaW50Q2xvc3VyZV9pbnF1aXJlSXM2NEJpdEludGVybmFsX2lucXVpcmVJczY0Qml0X2NsYXNzUmFuZ2VDaGVja2NpZGxvd2VyTGltaXR1cHBlckxpbWl0X3ByZXBlbmRUeXBlQXJndW1lbnRzSW50ZXJuYWxfcHJlcGVuZFR5cGVBcmd1bWVudHNmdW5jdGlvblR5cGVBcmd1bWVudHNwYXJlbnRUeXBlQXJndW1lbnRzcGFyZW50TGVudG90YWxMZW5fYm91bmRzQ2hlY2tGb3JQYXJ0aWFsSW5zdGFudGlhdGlvbkludGVybmFsX2JvdW5kc0NoZWNrRm9yUGFydGlhbEluc3RhbnRpYXRpb25fZ3Jvd1JlZ0V4cFN0YWNrbmV3U3RhY2t1bnNhZmVDYXN0SW50ZXJuYWxfdW5zYWZlQ2FzdF91bnN1cHBvcnRlZFByaW50J3ByaW50JyBpcyBub3Qgc3VwcG9ydGVkZGlnaXQxZGlnaXQySW50ZXJuYWxfZXh0cmFjdFR5cGVBcmd1bWVudHNfY2hlY2tDb3VudG1ha2VMaXN0Rml4ZWRMZW5ndGhJbnRlcm5hbF9tYWtlTGlzdEZpeGVkTGVuZ3RoZ3Jvd2FibGVMaXN0bWFrZUZpeGVkTGlzdFVubW9kaWZpYWJsZUludGVybmFsX21ha2VGaXhlZExpc3RVbm1vZGlmaWFibGVmaXhlZExlbmd0aExpc3RkYXJ0Lmlzb2xhdGVCeXRlQnVmZmVyVHlwZWREYXRhY2FwYWJpbGl0eS5kYXJ0X0ltbWVkaWF0ZUNhbGxiYWNrX051bGxhcnlGdW5jdGlvbl9VbmFyeUZ1bmN0aW9uX0JpbmFyeUZ1bmN0aW9uX0NhcGFiaWxpdHlJbXBsQ2FwYWJpbGl0eUltcGxfZmFjdG9yeV9nZXRfaGFzaGNvZGVDYXBhYmlsaXR5SW1wbF9lcXVhbHNDYXBhYmlsaXR5SW1wbF9nZXRfaGFzaGNvZGVfUmVjZWl2ZVBvcnRJbXBsX3Jhd1BvcnRmcm9tUmF3UmVjZWl2ZVBvcnRfUmF3UmVjZWl2ZVBvcnRJbXBsX2hhbmRsZXJNYXBSYXdSZWNlaXZlUG9ydEltcGxfZmFjdG9yeV9jbG9zZUludGVybmFsX2dldF9zZW5kcG9ydF9nZXRfaWRSYXdSZWNlaXZlUG9ydEltcGxfZ2V0X2lkUmF3UmVjZWl2ZVBvcnRJbXBsX2dldF9zZW5kcG9ydF9sb29rdXBIYW5kbGVyX2hhbmRsZU1lc3NhZ2VSYXdSZWNlaXZlUG9ydEltcGxfY2xvc2VJbnRlcm5hbF9pbml0SGFuZGxlck1hcHRlbXBNYXBfU2VuZFBvcnRJbXBsX3VuaW5zdGFudGlhYmxlX3NlbmRJbnRlcm5hbFNlbmRQb3J0SW1wbF9nZXRfaWRTZW5kUG9ydEltcGxfZ2V0X2hhc2hjb2RlU2VuZFBvcnRJbXBsX3NlbmRJbnRlcm5hbF9fVHJhbnNmZXJhYmxlVHlwZWREYXRhSW1wbFRyYW5zZmVyYWJsZVR5cGVkRGF0YV9mYWN0b3J5bWF0ZXJpYWxpemVfbWF0ZXJpYWxpemVJbnRvVWludDhMaXN0VHJhbnNmZXJhYmxlVHlwZWREYXRhX21hdGVyaWFsaXplX1RpbWVySGVhcF91c2VkaW5pdFNpemVfaW5kZXhPck5leHRfY29tcGFyZVRvX3N3YXBsZWZ0SW5kZXhuZXdlc3RfbGVmdENoaWxkX3JpZ2h0Q2hpbGRfbGVmdENoaWxkSW5kZXhfcmlnaHRDaGlsZEluZGV4X1RpbWVyX05PX1RJTUVSX1pFUk9fRVZFTlRfVElNRU9VVF9FVkVOVF9oZWFwX2ZpcnN0WmVyb1RpbWVyX2xhc3RaZXJvVGltZXJfSURfTUFTS19pZENvdW50X3JlY2VpdmVQb3J0X3NlbmRQb3J0X3NjaGVkdWxlZFdha2V1cFRpbWVfaGFuZGxpbmdDYWxsYmFja3Nfd2FrZXVwVGltZV9taWxsaVNlY29uZHNfcmVwZWF0aW5nX3RpY2tfbmV4dElkbWlsbGlTZWNvbmRzd2FrZXVwVGltZV9lbnF1ZXVlX2lzSW5IZWFwX2FkdmFuY2VXYWtldXBUaW1lX25vdGlmeVplcm9IYW5kbGVyX3F1ZXVlRnJvbVplcm9FdmVudHBlbmRpbmdUaW1lcnNfbm90aWZ5RXZlbnRIYW5kbGVyX3F1ZXVlRnJvbVRpbWVvdXRFdmVudGN1cnJlbnRUaW1lX3J1blRpbWVyc292ZXJkdWVtaXNzZWRUaWNrc2ltbWVkaWF0ZUNhbGxiYWNrX3NjaGVkdWxlV2FrZXVwX2NhbmNlbFdha2V1cF9jcmVhdGVUaW1lckhhbmRsZXJfc2h1dGRvd25UaW1lckhhbmRsZXJJc29sYXRlU3Bhd25FeGNlcHRpb25Jc29sYXRlU3Bhd25FeGNlcHRpb246IF9jdXJyZW50SXNvbGF0ZV9yb290VXJpX1BBVVNFX1JFU1VNRV9QSU5HX0tJTExfQUREX0VYSVRfREVMX0VYSVRfQUREX0VSUk9SX0RFTF9FUlJPUl9FUlJPUl9GQVRBTGJlZm9yZU5leHRFdmVudHBhdXNlQ2FwYWJpbGl0eXRlcm1pbmF0ZUNhcGFiaWxpdHlfcGFja2FnZVN1cHBvcnRlZF9zcGF3bkNvbW1vbnJlYWR5UG9ydHJlYWR5TWVzc2FnZWNhcGFiaWxpdGllc1VuYWJsZSB0byBzcGF3biBpc29sYXRlOiBJbnRlcm5hbCBlcnJvcjogdW5leHBlY3RlZCBmb3JtYXQgZm9yIHJlYWR5IG1lc3NhZ2U6IF9zcGF3bkZ1bmN0aW9uSXNvbGF0ZV9zcGF3bkZ1bmN0aW9udG9wTGV2ZWxGdW5jdGlvbnBhdXNlZGVycm9yc0FyZUZhdGFsb25FeGl0X3NwYXduVXJpSXNvbGF0ZV9zcGF3blVyaV9zZW5kT09CSXNvbGF0ZV9zZW5kT09CX2dldERlYnVnTmFtZUlzb2xhdGVfZ2V0RGVidWdOYW1lX2dldEN1cnJlbnRJc29sYXRlcG9ydEFuZENhcGFiaWxpdGllc19nZXRQb3J0QW5kQ2FwYWJpbGl0aWVzT2ZDdXJyZW50SXNvbGF0ZUlzb2xhdGVfZ2V0UG9ydEFuZENhcGFiaWxpdGllc09mQ3VycmVudElzb2xhdGVfZ2V0Q3VycmVudFJvb3RVcmlfZ2V0Q3VycmVudFJvb3RVcmlTdHJJc29sYXRlX2dldEN1cnJlbnRSb290VXJpU3RyMi4zcGFja2FnZXMvIGRpcmVjdG9yeSByZXNvbHV0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gRGFydCAyLmhvb2tJc29sYXRlLnBhY2thZ2VSb290SXNvbGF0ZS5wYWNrYWdlQ29uZmlncmVzb2x2ZVBhY2thZ2VVcmlJc29sYXRlLnJlc29sdmVQYWNrYWdlVXJpc3Bhd25Jc29sYXRlLnNwYXduc3Bhd25VcmlhdXRvbWF0aWNQYWNrYWdlUmVzb2x1dGlvbkNhbm5vdCBzaW11bHRhbmVvdXNseSByZXF1ZXN0IGF1dG9tYXRpY1BhY2thZ2VSZXNvbHV0aW9uIGFuZCBzcGVjaWZ5IGFwYWNrYWdlUm9vdC5wYWNrYWdlQ29uZmlnLkNhbm5vdCBzaW11bHRhbmVvdXNseSBzcGVjaWZ5IGEgcGFja2FnZVJvb3QgYW5kIGEgcGFja2FnZUNvbmZpZy5zcGF3bmVkVXJpcmVzdW1lQ2FwYWJpbGl0eV9wYXVzZWFkZE9uRXhpdExpc3RlbmVycmVzcG9uc2VQb3J0cmVtb3ZlT25FeGl0TGlzdGVuZXJzZXRFcnJvcnNGYXRhbHByaW9yaXR5YWRkRXJyb3JMaXN0ZW5lcnJlbW92ZUVycm9yTGlzdGVuZXJsaXN0TWVzc2FnZWVycm9yRGVzY3JpcHRpb25zdGFja0Rlc2NyaXB0aW9uUmVjZWl2ZVBvcnRyYXdQb3J0bmV3SGFuZGxlclJlbW90ZUVycm9yX2Rlc2NyaXB0aW9uVHJhbnNmZXJhYmxlVHlwZWREYXRhMi4zLjJmcm9tTGlzdGNodW5rc0NhcGFiaWxpdHlfcGVuZGluZ0ltbWVkaWF0ZUNhbGxiYWNrX2lzb2xhdGVTY2hlZHVsZUltbWVkaWF0ZV9ydW5QZW5kaW5nSW1tZWRpYXRlQ2FsbGJhY2tfcmVtb3ZlUGVuZGluZ0ltbWVkaWF0ZUNhbGxiYWNrX2dldElzb2xhdGVTY2hlZHVsZUltbWVkaWF0ZUNsb3N1cmVfc3RhcnRNYWluSXNvbGF0ZV9nZXRTdGFydE1haW5Jc29sYXRlRnVuY3Rpb25fc3RhcnRJc29sYXRlcGFyZW50UG9ydGlzU3Bhd25Vcmlfc2V0dXBIb29rc2RhcnQubWF0aGplbmtpbnNfc21pX2hhc2guZGFydHBvaW50LmRhcnRyYW5kb20uZGFydHJlY3RhbmdsZS5kYXJ0X1JhbmRvbV9rU1RBVEVfTE9fa1NUQVRFX0hJX1BPVzJfMzJfUE9XMl81M19EX1BPVzJfMjdfRDEzNDIxNzcyOC4wX3Bybmdfd2l0aFN0YXRlX25leHRTdGF0ZVJhbmRvbV9uZXh0U3RhdGVNdXN0IGJlIHBvc2l0aXZlIGFuZCA8PSAyXjMycm5kMzJuZXh0RG91YmxlbmV4dEJvb2xfc2V0dXBTZWVkUmFuZG9tX3NldHVwU2VlZF9pbml0aWFsU2VlZFJhbmRvbV9pbml0aWFsU2VlZF9uZXh0U2VlZF9TZWN1cmVSYW5kb21fZ2V0Qnl0ZXNTZWN1cmVSYW5kb21fZ2V0Qnl0ZXNybmRfSmVua2luc1NtaUhhc2hoYXNoNFBvaW50UG9pbnQoZmFjdG9yZGlzdGFuY2VUb3NxdWFyZWREaXN0YW5jZVRvc2VjdXJlX1JlY3RhbmdsZUJhc2VoZWlnaHRib3R0b21SZWN0YW5nbGUgKCB4IHgweTBib3VuZGluZ0JveGNvbnRhaW5zUmVjdGFuZ2xlYW5vdGhlcmNvbnRhaW5zUG9pbnR0b3BMZWZ0dG9wUmlnaHRib3R0b21SaWdodGJvdHRvbUxlZnRSZWN0YW5nbGVmcm9tUG9pbnRzTXV0YWJsZVJlY3RhbmdsZV93aWR0aF9oZWlnaHQyLjcxODI4MTgyODQ1OTA0NWxuMTAyLjMwMjU4NTA5Mjk5NDA0NmxuMjAuNjkzMTQ3MTgwNTU5OTQ1M2xvZzJlMS40NDI2OTUwNDA4ODg5NjM0bG9nMTBlMC40MzQyOTQ0ODE5MDMyNTE4cGkzLjE0MTU5MjY1MzU4OTc5M3NxcnQxXzIwLjcwNzEwNjc4MTE4NjU0NzZzcXJ0MjEuNDE0MjEzNTYyMzczMDk1MV9kb3VibGVQb3dkYXJ0OmNvcmUjX0RvdWJsZV9wb3dNYXRoX2RvdWJsZVBvd19pbnRQb3dfYXRhbjJNYXRoX2F0YW4yX3Npbk1hdGhfc2luX2Nvc01hdGhfY29zX3Rhbk1hdGhfdGFuX2Fjb3NNYXRoX2Fjb3NfYXNpbk1hdGhfYXNpbl9hdGFuTWF0aF9hdGFuX3NxcnRNYXRoX3NxcnRfZXhwTWF0aF9leHBNYXRoX2xvZ2F0YW4ydm06bmV2ZXItaW5saW5lcG93c2lucmFkaWFuc2Nvc3RhbmFjb3Nhc2luYXRhbnNxcnRfY2xhbXBUb1plcm9kYXJ0Lm1pcnJvcnNfSW50ZXJuYWxNaXJyb3JFcnJvcl9tc2dfTG9jYWxNaXJyb3JTeXN0ZW1faXNvbGF0ZV9jb21wdXRlTGlicmFyaWVzTWlycm9yU3lzdGVtX2xpYnJhcmllc19jb21wdXRlSXNvbGF0ZU1pcnJvclN5c3RlbV9pc29sYXRlTWlycm9yU3lzdGVtIGZvciBpc29sYXRlICdfU291cmNlTG9jYXRpb25fTG9jYWxNaXJyb3JfTG9jYWxJc29sYXRlTWlycm9ycm9vdExpYnJhcnlpc0N1cnJlbnRJc29sYXRlTWlycm9yIG9uICdsb2FkVXJpQ2Fubm90IGxvYWQgX2xvYWRVcmlJc29sYXRlTWlycm9yX2xvYWRVcmlfU3ludGhldGljQWNjZXNzb3JzaW1wbGVOYW1laXNDb25zdENvbnN0cnVjdG9yaXNSZWRpcmVjdGluZ0NvbnN0cnVjdG9yX1N5bnRoZXRpY1NldHRlclBhcmFtZXRlcmhhc0RlZmF1bHRWYWx1ZV9Mb2NhbE9iamVjdE1pcnJvcl9yZWZsZWN0ZWVfaW52b2tlcmVmbGVjdGVlX2ludm9rZUdldHRlcl9pbnZva2VTZXR0ZXJudW1Qb3NpdGlvbmFsQXJndW1lbnRzbnVtTmFtZWRBcmd1bWVudHNzZXRGaWVsZHVud3JhcHBlZHdpdGhvdXRFcXVhbF9Mb2NhbEluc3RhbmNlTWlycm9yaGFzUmVmbGVjdGVlSW5zdGFuY2VNaXJyb3Igb24gSW5zdGFuY2VNaXJyb3JfaW52b2tlSW5zdGFuY2VNaXJyb3JfaW52b2tlR2V0dGVySW5zdGFuY2VNaXJyb3JfaW52b2tlU2V0dGVyX2NvbXB1dGVUeXBlSW5zdGFuY2VNaXJyb3JfY29tcHV0ZVR5cGVfTG9jYWxDbG9zdXJlTWlycm9yX2Z1bmN0aW9uQ2xvc3VyZU1pcnJvciBvbiAnX2NvbXB1dGVGdW5jdGlvbkNsb3N1cmVNaXJyb3JfZnVuY3Rpb25fTG9jYWxUeXBlTWlycm9yX3JlZmxlY3RlZFR5cGVfTG9jYWxDbGFzc01pcnJvcl9zaW1wbGVOYW1lX293bmVyX2lzR2VuZXJpY19pc1RyYW5zZm9ybWVkTWl4aW5BcHBsaWNhdGlvbl9pc0dlbmVyaWNEZWNsYXJhdGlvbl9pbnN0YW50aWF0b3JfcXVhbGlmaWVkTmFtZV90cnVlU3VwZXJjbGFzc0ZpZWxkX3N1cGVyaW50ZXJmYWNlc19jYWNoZWRTdGF0aWNNZW1iZXJzX2NhY2hlZEluc3RhbmNlTWVtYmVyc19kZWNsYXJhdGlvbnNyZWZsZWN0ZWRUeXBlaGFzUmVmbGVjdGVkVHlwZURlY2xhcmF0aW9ucyBvZiBnZW5lcmljcyBoYXZlIG5vIHJlZmxlY3RlZCB0eXBlX21peGluQXBwbGljYXRpb25OYW1lX3RydWVTdXBlcmNsYXNzaXNPcmlnaW5hbERlY2xhcmF0aW9uc3VwZXJpbnRlcmZhY2VzaW50ZXJmYWNlVHlwZXNpbnRlcmZhY2VNaXJyb3JzbWl4aW5UeXBlc3RhdGljTWVtYmVyc2luc3RhbmNlTWVtYmVyc2RlY2xzX2NvbXB1dGVNZW1iZXJzX2NvbXB1dGVDb25zdHJ1Y3RvcnNzdHJpbmdOYW1lX3BhdGNoQ29uc3RydWN0b3JOYW1lX2lzQW5vbnltb3VzTWl4aW5BcHBsaWNhdGlvbm9yaWdpbmFsRGVjbGFyYXRpb25taXJyb3JDbGFzc01pcnJvciBvbiAnaXNBc3NpZ25hYmxlVG9vdGhlclJlZmxlY3RlZFR5cGVvdGhlckRlY2xhcmF0aW9uX2xpYnJhcnlVcmlDbGFzc01pcnJvcl9saWJyYXJ5VXJpX3N1cGVydHlwZUNsYXNzTWlycm9yX3N1cGVydHlwZV9zdXBlcnR5cGVJbnN0YW50aWF0ZWRDbGFzc01pcnJvcl9zdXBlcnR5cGVfaW5zdGFudGlhdGVkX25hdGl2ZUludGVyZmFjZXNDbGFzc01pcnJvcl9pbnRlcmZhY2VzX25hdGl2ZUludGVyZmFjZXNJbnN0YW50aWF0ZWRDbGFzc01pcnJvcl9pbnRlcmZhY2VzX2luc3RhbnRpYXRlZF9uYXRpdmVNaXhpbkNsYXNzTWlycm9yX21peGluX25hdGl2ZU1peGluSW5zdGFudGlhdGVkQ2xhc3NNaXJyb3JfbWl4aW5faW5zdGFudGlhdGVkQ2xhc3NNaXJyb3JfbWVtYmVyc0NsYXNzTWlycm9yX2NvbnN0cnVjdG9yc0NsYXNzTWlycm9yX2ludm9rZUNsYXNzTWlycm9yX2ludm9rZUdldHRlckNsYXNzTWlycm9yX2ludm9rZVNldHRlcl9pbnZva2VDb25zdHJ1Y3RvckNsYXNzTWlycm9yX2ludm9rZUNvbnN0cnVjdG9yX0NsYXNzTWlycm9yX3R5cGVfdmFyaWFibGVzQ2xhc3NNaXJyb3JfdHlwZV92YXJpYWJsZXNfY29tcHV0ZVR5cGVBcmd1bWVudHNDbGFzc01pcnJvcl90eXBlX2FyZ3VtZW50c19Mb2NhbEZ1bmN0aW9uVHlwZU1pcnJvcl9mdW5jdGlvblJlZmxlY3RlZV9jYWxsTWV0aG9kX3BhcmFtZXRlcnNfRnVuY3Rpb25UeXBlTWlycm9yX2NhbGxfbWV0aG9kX0Z1bmN0aW9uVHlwZU1pcnJvcl9wYXJhbWV0ZXJzRnVuY3Rpb25UeXBlTWlycm9yIG9uICdGdW5jdGlvblR5cGVNaXJyb3JfY2FsbF9tZXRob2RmdW5jdGlvblJlZmxlY3RlZV9GdW5jdGlvblR5cGVNaXJyb3JfcmV0dXJuX3R5cGVGdW5jdGlvblR5cGVNaXJyb3JfcmV0dXJuX3R5cGVGdW5jdGlvblR5cGVNaXJyb3JfcGFyYW1ldGVyc19Mb2NhbERlY2xhcmF0aW9uTWlycm9yX0xvY2FsVHlwZVZhcmlhYmxlTWlycm9yX3VwcGVyQm91bmRUeXBlIHZhcmlhYmxlcyBoYXZlIG5vIHJlZmxlY3RlZCB0eXBlVHlwZVZhcmlhYmxlTWlycm9yIG9uICdfVHlwZVZhcmlhYmxlTWlycm9yX293bmVyVHlwZVZhcmlhYmxlTWlycm9yX293bmVyX1R5cGVWYXJpYWJsZU1pcnJvcl91cHBlcl9ib3VuZFR5cGVWYXJpYWJsZU1pcnJvcl91cHBlcl9ib3VuZF9Mb2NhbFR5cGVkZWZNaXJyb3JfcmVmZXJlbnRyZWZlcmVudFR5cGVkZWZNaXJyb3Igb24gJ19uYXRpdmVSZWZlcmVudFR5cGVkZWZNaXJyb3JfcmVmZXJlbnRfbmF0aXZlRGVjbGFyYXRpb25UeXBlZGVmTWlycm9yX2RlY2xhcmF0aW9uX0xvY2FsTGlicmFyeU1pcnJvcl9jYWNoZWRMaWJyYXJ5RGVwZW5kZW5jaWVzTGlicmFyeU1pcnJvciBvbiAnbGlicmFyeURlcGVuZGVuY2llc19saWJyYXJ5RGVwZW5kZW5jaWVzTGlicmFyeU1pcnJvcl9saWJyYXJ5RGVwZW5kZW5jaWVzTGlicmFyeU1pcnJvcl9pbnZva2VMaWJyYXJ5TWlycm9yX2ludm9rZUdldHRlckxpYnJhcnlNaXJyb3JfaW52b2tlU2V0dGVyTGlicmFyeU1pcnJvcl9tZW1iZXJzX0xvY2FsTGlicmFyeURlcGVuZGVuY3lNaXJyb3JfdGFyZ2V0TWlycm9yT3JQcmVmaXhtdXRhYmxlQ29tYmluYXRvcnNwcmVmaXhTdHJpbmd1bndyYXBwZWRNZXRhZGF0YW1pcnJvck9yTnVsbHNhdmVkUHJlZml4X3RyeVVwZ3JhZGVQcmVmaXhMaWJyYXJ5TWlycm9yX2Zyb21QcmVmaXhfTG9jYWxDb21iaW5hdG9yTWlycm9yaWRlbnRpZmllcnNpZGVudGlmaWVyU3RyaW5nX0xvY2FsTWV0aG9kTWlycm9yX2tpbmRGbGFnc2tBYnN0cmFjdGtHZXR0ZXJrU2V0dGVya0NvbnN0cnVjdG9ya0NvbnN0Q3RvcmtHZW5lcmF0aXZlQ3RvcmtSZWRpcmVjdGluZ0N0b3JrRmFjdG9yeUN0b3JrRXh0ZXJuYWxrU3ludGhldGljX29wZXJhdG9yc19jb25zdHJ1Y3Rvck5hbWVfTWV0aG9kTWlycm9yX3BhcmFtZXRlcnNJbnRlcm5hbCBlcnJvciBpbiBNZXRob2RNaXJyb3IuY29uc3RydWN0b3JOYW1lOiBtYWxmb3JtZWQgbmFtZSA8ZGVmaW5pbmdMaWJyYXJ5b3duZXJOYW1lY25NZXRob2RNaXJyb3Igb24gJ19NZXRob2RNaXJyb3Jfb3duZXJNZXRob2RNaXJyb3Jfb3duZXJfTWV0aG9kTWlycm9yX3JldHVybl90eXBlTWV0aG9kTWlycm9yX3JldHVybl90eXBlTWV0aG9kTWlycm9yX3BhcmFtZXRlcnNfTWV0aG9kTWlycm9yX3NvdXJjZU1ldGhvZE1pcnJvcl9zb3VyY2VfTG9jYWxWYXJpYWJsZU1pcnJvcnVuZXhwZWN0ZWQgb3duZXIgVmFyaWFibGVNaXJyb3Igb24gJ19WYXJpYWJsZU1pcnJvcl90eXBlVmFyaWFibGVNaXJyb3JfdHlwZV9Mb2NhbFBhcmFtZXRlck1pcnJvcl91bm1pcnJvcmVkTWV0YWRhdGFfZGVmYXVsdFZhbHVlUmVmbGVjdGVlUGFyYW1ldGVyTWlycm9yLmxvY2F0aW9uIHVuaW1wbGVtZW50ZWRQYXJhbWV0ZXJNaXJyb3Igb24gJ19QYXJhbWV0ZXJNaXJyb3JfdHlwZVBhcmFtZXRlck1pcnJvcl90eXBlX1NwZWNpYWxUeXBlTWlycm9ydm9pZCBoYXMgbm8gcmVmbGVjdGVkIHR5cGVUeXBlTWlycm9yIG9uICdfTWlycm9yc19jdXJyZW50TWlycm9yU3lzdGVtX2RlY2xhcmF0aW9uQ2FjaGVDbGFzc01pcnJvcl9pbnN0YW50aWF0aW9uQ2FjaGVUeXBlTWlycm9yY3VycmVudE1pcnJvclN5c3RlbXJlZmxlY3RfbWFrZUxvY2FsQ2xhc3NNaXJyb3JNaXJyb3JzX21ha2VMb2NhbENsYXNzTWlycm9yX21ha2VMb2NhbFR5cGVNaXJyb3JNaXJyb3JzX21ha2VMb2NhbFR5cGVNaXJyb3JfaW5zdGFudGlhdGVHZW5lcmljVHlwZU1pcnJvcnNfaW5zdGFudGlhdGVHZW5lcmljVHlwZXJlZmxlY3RDbGFzc2NsYXNzTWlycm9ycmVmbGVjdFR5cGV0eXBlTWlycm9yX2luc3RhbnRpYXRlVHlwZVR5cGUgYXJndW1lbnRzIGxpc3QgY2Fubm90IGJlIGVtcHR5Ll9NaXJyb3JSZWZlcmVuY2VNaXJyb3JSZWZlcmVuY2VfZXF1YWxzTWlycm9yU3lzdGVtX21hbmdsZU5hbWVNaXJyb3JzX21hbmdsZU5hbWVmaW5kTGlicmFyeVRoZXJlIGFyZSBtdWx0aXBsZSBsaWJyYXJpZXMgbmFtZWQgVGhlcmUgaXMgbm8gbGlicmFyeSBuYW1lZCAnZ2V0U3ltYm9sTWlycm9ySXNvbGF0ZU1pcnJvckRlY2xhcmF0aW9uTWlycm9yT2JqZWN0TWlycm9ySW5zdGFuY2VNaXJyb3JDbG9zdXJlTWlycm9yTGlicmFyeU1pcnJvckxpYnJhcnlEZXBlbmRlbmN5TWlycm9yQ29tYmluYXRvck1pcnJvckZ1bmN0aW9uVHlwZU1pcnJvclR5cGVWYXJpYWJsZU1pcnJvclR5cGVkZWZNaXJyb3JNZXRob2RNaXJyb3JWYXJpYWJsZU1pcnJvclBhcmFtZXRlck1pcnJvcnRyaW1tZWRUZXh0aXNEb2NDb21tZW50TWlycm9yc1VzZWRObyBsb25nZXIgaGFzIGFueSBlZmZlY3QuIFdpbGwgYmUgcmVtb3ZlZCBpbiBhIGxhdGVyIHJlbGVhc2Uuc3ltYm9sc21ldGFUYXJnZXRzb3ZlcnJpZGVfZGlydHlfbl9jb21wdXRlUXVhbGlmaWVkTmFtZV9tYWtlU2lnbmF0dXJlU3RyaW5nZm91bmRfb3B0aW9uYWxfcG9zaXRpb25hbGZvdW5kX29wdGlvbmFsX25hbWVkRGVjbGFyYXRpb25NaXJyb3JfbG9jYXRpb25EZWNsYXJhdGlvbk1pcnJvcl9tZXRhZGF0YV9zdWJ0eXBlVGVzdFR5cGVNaXJyb3Jfc3VidHlwZVRlc3RfYXNTZXR0ZXJkYXJ0LnByb2ZpbGVyRGFydCBTREsgMS4xMmRhcnQudHlwZWRfZGF0YXVubW9kaWZpYWJsZV90eXBlZF9kYXRhLmRhcnRfVHlwZWRMaXN0QmFzZUNhbm5vdCByZXNpemUgYSBmaXhlZC1sZW5ndGggbGlzdFR5cGVkRGF0YV9zZXRSYW5nZXN0YXJ0SW5CeXRlc3N0YXJ0RnJvbUluQnl0ZXN0b0NpZGZyb21DaWRfSW50TGlzdE1peGluQ2Fubm90IGluc2VydCBpbnRvIGEgZml4ZWQtbGVuZ3RoIGxpc3RfVHlwZWRJbnRMaXN0TWl4aW5TcGF3bmVkVHlwZV9jcmVhdGVMaXN0ZnJvbUFzVHlwZWRMaXN0ZnJvbUFzTGlzdHRlbXBCdWZmZXJfRG91YmxlTGlzdE1peGluX1R5cGVkRG91YmxlTGlzdE1peGluX0Zsb2F0MzJ4NExpc3RNaXhpblNJTUQgZG9uJ3QgaGF2ZSBkZWZhdWx0IGNvbXBhcmUuX0ludDMyeDRMaXN0TWl4aW5fRmxvYXQ2NHgyTGlzdE1peGluX0J5dGVCdWZmZXJfTmV3YXNJbnQ4TGlzdGFzVWludDhDbGFtcGVkTGlzdGFzSW50MTZMaXN0YXNVaW50MTZMaXN0YXNJbnQzMkxpc3Rhc1VpbnQzMkxpc3Rhc0ludDY0TGlzdGFzVWludDY0TGlzdGFzRmxvYXQzMkxpc3Rhc0Zsb2F0NjRMaXN0YXNGbG9hdDMyeDRMaXN0YXNJbnQzMng0TGlzdGFzRmxvYXQ2NHgyTGlzdF9UeXBlZExpc3RUeXBlZERhdGFfbGVuZ3RoX2dldEludDhUeXBlZERhdGFfR2V0SW50OF9zZXRJbnQ4VHlwZWREYXRhX1NldEludDhfZ2V0VWludDhUeXBlZERhdGFfR2V0VWludDhfc2V0VWludDhUeXBlZERhdGFfU2V0VWludDhfZ2V0SW50MTZUeXBlZERhdGFfR2V0SW50MTZfc2V0SW50MTZUeXBlZERhdGFfU2V0SW50MTZfZ2V0VWludDE2VHlwZWREYXRhX0dldFVpbnQxNl9zZXRVaW50MTZUeXBlZERhdGFfU2V0VWludDE2X2dldEludDMyVHlwZWREYXRhX0dldEludDMyX3NldEludDMyVHlwZWREYXRhX1NldEludDMyX2dldFVpbnQzMlR5cGVkRGF0YV9HZXRVaW50MzJfc2V0VWludDMyVHlwZWREYXRhX1NldFVpbnQzMl9nZXRJbnQ2NFR5cGVkRGF0YV9HZXRJbnQ2NF9zZXRJbnQ2NFR5cGVkRGF0YV9TZXRJbnQ2NF9nZXRVaW50NjRUeXBlZERhdGFfR2V0VWludDY0X3NldFVpbnQ2NFR5cGVkRGF0YV9TZXRVaW50NjRfZ2V0RmxvYXQzMlR5cGVkRGF0YV9HZXRGbG9hdDMyX3NldEZsb2F0MzJUeXBlZERhdGFfU2V0RmxvYXQzMl9nZXRGbG9hdDY0VHlwZWREYXRhX0dldEZsb2F0NjRfc2V0RmxvYXQ2NFR5cGVkRGF0YV9TZXRGbG9hdDY0X2dldEZsb2F0MzJ4NFR5cGVkRGF0YV9HZXRGbG9hdDMyeDRfc2V0RmxvYXQzMng0VHlwZWREYXRhX1NldEZsb2F0MzJ4NF9nZXRJbnQzMng0VHlwZWREYXRhX0dldEludDMyeDRfc2V0SW50MzJ4NFR5cGVkRGF0YV9TZXRJbnQzMng0X2dldEZsb2F0NjR4MlR5cGVkRGF0YV9HZXRGbG9hdDY0eDJfc2V0RmxvYXQ2NHgyVHlwZWREYXRhX1NldEZsb2F0NjR4Ml9zZXRDb2RlVW5pdHNieXRlU3RhcnRza2lwQ291bnQgKyBsZW5ndGhfX0ludDhMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fSW50OExpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9JbnQ4TGlzdF9fVWludDhMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fVWludDhMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fVWludDhMaXN0X19VaW50OENsYW1wZWRMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fVWludDhDbGFtcGVkTGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX1VpbnQ4Q2xhbXBlZExpc3RfX0ludDE2TGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX0ludDE2TGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0ludDE2TGlzdF9nZXRJbmRleGVkSW50MTZfc2V0SW5kZXhlZEludDE2X19VaW50MTZMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fVWludDE2TGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX1VpbnQxNkxpc3RfZ2V0SW5kZXhlZFVpbnQxNl9zZXRJbmRleGVkVWludDE2X19JbnQzMkxpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19JbnQzMkxpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9JbnQzMkxpc3RfZ2V0SW5kZXhlZEludDMyX3NldEluZGV4ZWRJbnQzMl9fVWludDMyTGlzdCZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX1VpbnQzMkxpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9VaW50MzJMaXN0X2dldEluZGV4ZWRVaW50MzJfc2V0SW5kZXhlZFVpbnQzMl9fSW50NjRMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fSW50NjRMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fSW50NjRMaXN0X2dldEluZGV4ZWRJbnQ2NF9zZXRJbmRleGVkSW50NjRfX1VpbnQ2NExpc3QmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19VaW50NjRMaXN0Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fVWludDY0TGlzdF9nZXRJbmRleGVkVWludDY0X3NldEluZGV4ZWRVaW50NjRfX0Zsb2F0MzJMaXN0Jl9UeXBlZExpc3QmX0RvdWJsZUxpc3RNaXhpbl9fRmxvYXQzMkxpc3QmX1R5cGVkTGlzdCZfRG91YmxlTGlzdE1peGluJl9UeXBlZERvdWJsZUxpc3RNaXhpbl9GbG9hdDMyTGlzdF9nZXRJbmRleGVkRmxvYXQzMl9zZXRJbmRleGVkRmxvYXQzMl9fRmxvYXQ2NExpc3QmX1R5cGVkTGlzdCZfRG91YmxlTGlzdE1peGluX19GbG9hdDY0TGlzdCZfVHlwZWRMaXN0Jl9Eb3VibGVMaXN0TWl4aW4mX1R5cGVkRG91YmxlTGlzdE1peGluX0Zsb2F0NjRMaXN0X2dldEluZGV4ZWRGbG9hdDY0X3NldEluZGV4ZWRGbG9hdDY0X19GbG9hdDMyeDRMaXN0Jl9UeXBlZExpc3QmX0Zsb2F0MzJ4NExpc3RNaXhpbl9GbG9hdDMyeDRMaXN0X2dldEluZGV4ZWRGbG9hdDMyeDRfc2V0SW5kZXhlZEZsb2F0MzJ4NF9fSW50MzJ4NExpc3QmX1R5cGVkTGlzdCZfSW50MzJ4NExpc3RNaXhpbl9JbnQzMng0TGlzdF9nZXRJbmRleGVkSW50MzJ4NF9zZXRJbmRleGVkSW50MzJ4NF9fRmxvYXQ2NHgyTGlzdCZfVHlwZWRMaXN0Jl9GbG9hdDY0eDJMaXN0TWl4aW5fRmxvYXQ2NHgyTGlzdF9nZXRJbmRleGVkRmxvYXQ2NHgyX3NldEluZGV4ZWRGbG9hdDY0eDJfX0V4dGVybmFsSW50OEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fRXh0ZXJuYWxJbnQ4QXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9FeHRlcm5hbEludDhBcnJheV9fRXh0ZXJuYWxVaW50OEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fRXh0ZXJuYWxVaW50OEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fRXh0ZXJuYWxVaW50OEFycmF5X19FeHRlcm5hbFVpbnQ4Q2xhbXBlZEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fRXh0ZXJuYWxVaW50OENsYW1wZWRBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0V4dGVybmFsVWludDhDbGFtcGVkQXJyYXlfX0V4dGVybmFsSW50MTZBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX0V4dGVybmFsSW50MTZBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0V4dGVybmFsSW50MTZBcnJheV9fRXh0ZXJuYWxVaW50MTZBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW5fX0V4dGVybmFsVWludDE2QXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9FeHRlcm5hbFVpbnQxNkFycmF5X19FeHRlcm5hbEludDMyQXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19FeHRlcm5hbEludDMyQXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9FeHRlcm5hbEludDMyQXJyYXlfX0V4dGVybmFsVWludDMyQXJyYXkmX1R5cGVkTGlzdCZfSW50TGlzdE1peGluX19FeHRlcm5hbFVpbnQzMkFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fRXh0ZXJuYWxVaW50MzJBcnJheV9fRXh0ZXJuYWxJbnQ2NEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fRXh0ZXJuYWxJbnQ2NEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fRXh0ZXJuYWxJbnQ2NEFycmF5X19FeHRlcm5hbFVpbnQ2NEFycmF5Jl9UeXBlZExpc3QmX0ludExpc3RNaXhpbl9fRXh0ZXJuYWxVaW50NjRBcnJheSZfVHlwZWRMaXN0Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0V4dGVybmFsVWludDY0QXJyYXlfX0V4dGVybmFsRmxvYXQzMkFycmF5Jl9UeXBlZExpc3QmX0RvdWJsZUxpc3RNaXhpbl9fRXh0ZXJuYWxGbG9hdDMyQXJyYXkmX1R5cGVkTGlzdCZfRG91YmxlTGlzdE1peGluJl9UeXBlZERvdWJsZUxpc3RNaXhpbl9FeHRlcm5hbEZsb2F0MzJBcnJheV9fRXh0ZXJuYWxGbG9hdDY0QXJyYXkmX1R5cGVkTGlzdCZfRG91YmxlTGlzdE1peGluX19FeHRlcm5hbEZsb2F0NjRBcnJheSZfVHlwZWRMaXN0Jl9Eb3VibGVMaXN0TWl4aW4mX1R5cGVkRG91YmxlTGlzdE1peGluX0V4dGVybmFsRmxvYXQ2NEFycmF5X19FeHRlcm5hbEZsb2F0MzJ4NEFycmF5Jl9UeXBlZExpc3QmX0Zsb2F0MzJ4NExpc3RNaXhpbl9FeHRlcm5hbEZsb2F0MzJ4NEFycmF5X19FeHRlcm5hbEludDMyeDRBcnJheSZfVHlwZWRMaXN0Jl9JbnQzMng0TGlzdE1peGluX0V4dGVybmFsSW50MzJ4NEFycmF5X19FeHRlcm5hbEZsb2F0NjR4MkFycmF5Jl9UeXBlZExpc3QmX0Zsb2F0NjR4Mkxpc3RNaXhpbl9FeHRlcm5hbEZsb2F0NjR4MkFycmF5X0Zsb2F0MzJ4NEZsb2F0MzJ4NF9hZGRGbG9hdDMyeDRfbmVnYXRlRmxvYXQzMng0X3N1YkZsb2F0MzJ4NF9tdWxGbG9hdDMyeDRfZGl2RmxvYXQzMng0X2NtcGx0bGVzc1RoYW5PckVxdWFsRmxvYXQzMng0X2NtcGx0ZUZsb2F0MzJ4NF9jbXBndGdyZWF0ZXJUaGFuT3JFcXVhbEZsb2F0MzJ4NF9jbXBndGVGbG9hdDMyeDRfY21wZXF1YWxub3RFcXVhbEZsb2F0MzJ4NF9jbXBuZXF1YWxzY2FsZUZsb2F0MzJ4NF9zY2FsZUZsb2F0MzJ4NF9hYnNjbGFtcEZsb2F0MzJ4NF9jbGFtcEZsb2F0MzJ4NF9nZXRYRmxvYXQzMng0X2dldFlGbG9hdDMyeDRfZ2V0WkZsb2F0MzJ4NF9nZXRXc2lnbk1hc2tGbG9hdDMyeDRfZ2V0U2lnbk1hc2tGbG9hdDMyeDRfc2h1ZmZsZXNodWZmbGVNaXhGbG9hdDMyeDRfc2h1ZmZsZU1peHp3d2l0aFhGbG9hdDMyeDRfc2V0WHdpdGhZRmxvYXQzMng0X3NldFl3aXRoWkZsb2F0MzJ4NF9zZXRad2l0aFdGbG9hdDMyeDRfc2V0V0Zsb2F0MzJ4NF9taW5GbG9hdDMyeDRfbWF4RmxvYXQzMng0X3NxcnRyZWNpcHJvY2FsRmxvYXQzMng0X3JlY2lwcm9jYWxyZWNpcHJvY2FsU3FydEZsb2F0MzJ4NF9yZWNpcHJvY2FsU3FydF9JbnQzMng0SW50MzJ4NF9vckludDMyeDRfYW5kSW50MzJ4NF94b3JJbnQzMng0X2FkZEludDMyeDRfc3ViSW50MzJ4NF9nZXRYSW50MzJ4NF9nZXRZSW50MzJ4NF9nZXRaSW50MzJ4NF9nZXRXSW50MzJ4NF9nZXRTaWduTWFza0ludDMyeDRfc2h1ZmZsZUludDMyeDRfc2h1ZmZsZU1peEludDMyeDRfc2V0WEludDMyeDRfc2V0WUludDMyeDRfc2V0WkludDMyeDRfc2V0V2ZsYWdYSW50MzJ4NF9nZXRGbGFnWGZsYWdZSW50MzJ4NF9nZXRGbGFnWWZsYWdaSW50MzJ4NF9nZXRGbGFnWmZsYWdXSW50MzJ4NF9nZXRGbGFnV3dpdGhGbGFnWEludDMyeDRfc2V0RmxhZ1h3aXRoRmxhZ1lJbnQzMng0X3NldEZsYWdZd2l0aEZsYWdaSW50MzJ4NF9zZXRGbGFnWndpdGhGbGFnV0ludDMyeDRfc2V0RmxhZ1dJbnQzMng0X3NlbGVjdF9GbG9hdDY0eDJGbG9hdDY0eDJfYWRkRmxvYXQ2NHgyX25lZ2F0ZUZsb2F0NjR4Ml9zdWJGbG9hdDY0eDJfbXVsRmxvYXQ2NHgyX2RpdkZsb2F0NjR4Ml9zY2FsZUZsb2F0NjR4Ml9hYnNGbG9hdDY0eDJfY2xhbXBGbG9hdDY0eDJfZ2V0WEZsb2F0NjR4Ml9nZXRZRmxvYXQ2NHgyX2dldFNpZ25NYXNrRmxvYXQ2NHgyX3NldFhGbG9hdDY0eDJfc2V0WUZsb2F0NjR4Ml9taW5GbG9hdDY0eDJfbWF4RmxvYXQ2NHgyX3NxcnRfVHlwZWRMaXN0SXRlcmF0b3JfYXJyYXlfVHlwZWRMaXN0Vmlld190eXBlZERhdGF2bTpub24tbnVsbGFibGUtcmVzdWx0LXR5cGVUeXBlZERhdGFWaWV3X3R5cGVkRGF0YVR5cGVkRGF0YVZpZXdfb2Zmc2V0SW5CeXRlc1R5cGVkRGF0YVZpZXdfbGVuZ3RoX19JbnQ4QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW5fX0ludDhBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fSW50OEFycmF5Vmlld1R5cGVkRGF0YVZpZXdfSW50OEFycmF5Vmlld19uZXdfX1VpbnQ4QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW5fX1VpbnQ4QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX1VpbnQ4QXJyYXlWaWV3VHlwZWREYXRhVmlld19VaW50OEFycmF5Vmlld19uZXdfX1VpbnQ4Q2xhbXBlZEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluX19VaW50OENsYW1wZWRBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fVWludDhDbGFtcGVkQXJyYXlWaWV3VHlwZWREYXRhVmlld19VaW50OENsYW1wZWRBcnJheVZpZXdfbmV3X19JbnQxNkFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluX19JbnQxNkFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9JbnQxNkFycmF5Vmlld1R5cGVkRGF0YVZpZXdfSW50MTZBcnJheVZpZXdfbmV3X19VaW50MTZBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbl9fVWludDE2QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX1VpbnQxNkFycmF5Vmlld1R5cGVkRGF0YVZpZXdfVWludDE2QXJyYXlWaWV3X25ld19fSW50MzJBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbl9fSW50MzJBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fSW50MzJBcnJheVZpZXdUeXBlZERhdGFWaWV3X0ludDMyQXJyYXlWaWV3X25ld19fVWludDMyQXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW5fX1VpbnQzMkFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluJl9UeXBlZEludExpc3RNaXhpbl9VaW50MzJBcnJheVZpZXdUeXBlZERhdGFWaWV3X1VpbnQzMkFycmF5Vmlld19uZXdfX0ludDY0QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW5fX0ludDY0QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnRMaXN0TWl4aW4mX1R5cGVkSW50TGlzdE1peGluX0ludDY0QXJyYXlWaWV3VHlwZWREYXRhVmlld19JbnQ2NEFycmF5Vmlld19uZXdfX1VpbnQ2NEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfSW50TGlzdE1peGluX19VaW50NjRBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0ludExpc3RNaXhpbiZfVHlwZWRJbnRMaXN0TWl4aW5fVWludDY0QXJyYXlWaWV3VHlwZWREYXRhVmlld19VaW50NjRBcnJheVZpZXdfbmV3X19GbG9hdDMyQXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9Eb3VibGVMaXN0TWl4aW5fX0Zsb2F0MzJBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0RvdWJsZUxpc3RNaXhpbiZfVHlwZWREb3VibGVMaXN0TWl4aW5fRmxvYXQzMkFycmF5Vmlld1R5cGVkRGF0YVZpZXdfRmxvYXQzMkFycmF5Vmlld19uZXdfX0Zsb2F0NjRBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0RvdWJsZUxpc3RNaXhpbl9fRmxvYXQ2NEFycmF5VmlldyZfVHlwZWRMaXN0VmlldyZfRG91YmxlTGlzdE1peGluJl9UeXBlZERvdWJsZUxpc3RNaXhpbl9GbG9hdDY0QXJyYXlWaWV3VHlwZWREYXRhVmlld19GbG9hdDY0QXJyYXlWaWV3X25ld19fRmxvYXQzMng0QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9GbG9hdDMyeDRMaXN0TWl4aW5fRmxvYXQzMng0QXJyYXlWaWV3VHlwZWREYXRhVmlld19GbG9hdDMyeDRBcnJheVZpZXdfbmV3X19JbnQzMng0QXJyYXlWaWV3Jl9UeXBlZExpc3RWaWV3Jl9JbnQzMng0TGlzdE1peGluX0ludDMyeDRBcnJheVZpZXdUeXBlZERhdGFWaWV3X0ludDMyeDRBcnJheVZpZXdfbmV3X19GbG9hdDY0eDJBcnJheVZpZXcmX1R5cGVkTGlzdFZpZXcmX0Zsb2F0NjR4Mkxpc3RNaXhpbl9GbG9hdDY0eDJBcnJheVZpZXdUeXBlZERhdGFWaWV3X0Zsb2F0NjR4MkFycmF5Vmlld19uZXdfQnl0ZURhdGFWaWV3VHlwZWREYXRhVmlld19CeXRlRGF0YVZpZXdfbmV3Z2V0SW50OHNldEludDhnZXRVaW50OHNldFVpbnQ4Z2V0SW50MTZzZXRJbnQxNmdldEludDMyc2V0SW50MzJnZXRJbnQ2NHNldEludDY0Z2V0VWludDY0c2V0VWludDY0Z2V0RmxvYXQzMnNldEZsb2F0MzJnZXRGbG9hdDMyeDRzZXRGbG9hdDMyeDRfVHlwZWRJbnRMaXN0X1R5cGVkRmxvYXRMaXN0RW5kaWFuX2xpdHRsZUVuZGlhbmJpZ2xpdHRsZUJ5dGVEYXRhX3ZpZXd0eXBlZERhdGFJbnQ4TGlzdGJ5dGVzUGVyRWxlbWVudFR5cGVkRGF0YV9JbnQ4QXJyYXlfbmV3VHlwZWREYXRhX1VpbnQ4QXJyYXlfbmV3VWludDhDbGFtcGVkTGlzdFR5cGVkRGF0YV9VaW50OENsYW1wZWRBcnJheV9uZXdJbnQxNkxpc3RUeXBlZERhdGFfSW50MTZBcnJheV9uZXdUeXBlZERhdGFfVWludDE2QXJyYXlfbmV3VHlwZWREYXRhX0ludDMyQXJyYXlfbmV3VHlwZWREYXRhX1VpbnQzMkFycmF5X25ld0ludDY0TGlzdFR5cGVkRGF0YV9JbnQ2NEFycmF5X25ld1VpbnQ2NExpc3RUeXBlZERhdGFfVWludDY0QXJyYXlfbmV3RmxvYXQzMkxpc3RUeXBlZERhdGFfRmxvYXQzMkFycmF5X25ld0Zsb2F0NjRMaXN0VHlwZWREYXRhX0Zsb2F0NjRBcnJheV9uZXdGbG9hdDMyeDRMaXN0VHlwZWREYXRhX0Zsb2F0MzJ4NEFycmF5X25ld0ludDMyeDRMaXN0VHlwZWREYXRhX0ludDMyeDRBcnJheV9uZXdGbG9hdDY0eDJMaXN0VHlwZWREYXRhX0Zsb2F0NjR4MkFycmF5X25ld0Zsb2F0MzJ4NHh4eHh4eHh5eHh4enh4eHd4eHl4eHh5eXh4eXp4eHl3eHh6eHh4enl4eHp6eHh6d3h4d3h4eHd5eHh3enh4d3d4eXh4eHl4eXh5eHp4eXh3eHl5eHh5eXl4eXl6eHl5d3h5enh4eXp5eHl6enh5end4eXd4eHl3eXh5d3p4eXd3eHp4eHh6eHl4enh6eHp4d3h6eXh4enl5eHp5enh6eXd4enp4eHp6eXh6enp4enp3eHp3eHh6d3l4end6eHp3d3h3eHh4d3h5eHd4enh3eHd4d3l4eHd5eXh3eXp4d3l3eHd6eHh3enl4d3p6eHd6d3h3d3h4d3d5eHd3enh3d3d5eHh4eXh4eXl4eHp5eHh3eXh5eHl4eXl5eHl6eXh5d3l4enh5eHp5eXh6enl4end5eHd4eXh3eXl4d3p5eHd3eXl4eHl5eHl5eXh6eXl4d3l5eXh5eXl5eXl5enl5eXd5eXp4eXl6eXl5enp5eXp3eXl3eHl5d3l5eXd6eXl3d3l6eHh5enh5eXp4enl6eHd5enl4eXp5eXl6eXp5enl3eXp6eHl6enl5enp6eXp6d3l6d3h5end5eXp3enl6d3d5d3h4eXd4eXl3eHp5d3h3eXd5eHl3eXl5d3l6eXd5d3l3enh5d3p5eXd6enl3end5d3d4eXd3eXl3d3p5d3d3enh4eHp4eHl6eHh6enh4d3p4eXh6eHl5enh5enp4eXd6eHp4enh6eXp4enp6eHp3enh3eHp4d3l6eHd6enh3d3p5eHh6eXh5enl4enp5eHd6eXl4enl5eXp5eXp6eXl3enl6eHp5enl6eXp6enl6d3p5d3h6eXd5enl3enp5d3d6enh4enp4eXp6eHp6enh3enp5eHp6eXl6enl6enp5d3p6enh6enp5enp6enp6end6end4enp3eXp6d3p6end3end4eHp3eHl6d3h6end4d3p3eXh6d3l5end5enp3eXd6d3p4end6eXp3enp6d3p3end3eHp3d3l6d3d6end3d3d4eHh3eHh5d3h4end4eHd3eHl4d3h5eXd4eXp3eHl3d3h6eHd4enl3eHp6d3h6d3d4d3h3eHd5d3h3end4d3d3eXh4d3l4eXd5eHp3eXh3d3l5eHd5eXl3eXl6d3l5d3d5enh3eXp5d3l6end5end3eXd4d3l3eXd5d3p3eXd3d3p4eHd6eHl3enh6d3p4d3d6eXh3enl5d3p5end6eXd3enp4d3p6eXd6enp3enp3d3p3eHd6d3l3end6d3p3d3d3eHh3d3h5d3d4end3eHd3d3l4d3d5eXd3eXp3d3l3d3d6eHd3enl3d3p6d3d6d3d3d3h3d3d5d3d3end3d3dGbG9hdDMyeDRfZnJvbURvdWJsZXNzcGxhdEZsb2F0MzJ4NF9zcGxhdHplcm9GbG9hdDMyeDRfemVyb2Zyb21JbnQzMng0Qml0c0Zsb2F0MzJ4NF9mcm9tSW50MzJ4NEJpdHNmcm9tRmxvYXQ2NHgyRmxvYXQzMng0X2Zyb21GbG9hdDY0eDJJbnQzMng0SW50MzJ4NF9mcm9tSW50c0ludDMyeDRfZnJvbUJvb2xzZnJvbUZsb2F0MzJ4NEJpdHNJbnQzMng0X2Zyb21GbG9hdDMyeDRCaXRzRmxvYXQ2NHgyRmxvYXQ2NHgyX2Zyb21Eb3VibGVzRmxvYXQ2NHgyX3NwbGF0RmxvYXQ2NHgyX3plcm9mcm9tRmxvYXQzMng0RmxvYXQ2NHgyX2Zyb21GbG9hdDMyeDRVbm1vZGlmaWFibGVCeXRlQnVmZmVyVmlld1VubW9kaWZpYWJsZUJ5dGVEYXRhVmlld0FuIFVubW9kaWZpYWJsZUJ5dGVEYXRhVmlldyBtYXkgbm90IGJlIG1vZGlmaWVkX1VubW9kaWZpYWJsZUxpc3RNaXhpblREc3VibGlzdExlbmd0aF9Vbm1vZGlmaWFibGVVaW50OExpc3RWaWV3JlVubW9kaWZpYWJsZUxpc3RCYXNlJl9Vbm1vZGlmaWFibGVMaXN0TWl4aW5Vbm1vZGlmaWFibGVVaW50OExpc3RWaWV3X1VubW9kaWZpYWJsZUludDhMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlSW50OExpc3RWaWV3X1VubW9kaWZpYWJsZVVpbnQ4Q2xhbXBlZExpc3RWaWV3JlVubW9kaWZpYWJsZUxpc3RCYXNlJl9Vbm1vZGlmaWFibGVMaXN0TWl4aW5Vbm1vZGlmaWFibGVVaW50OENsYW1wZWRMaXN0Vmlld19Vbm1vZGlmaWFibGVVaW50MTZMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlVWludDE2TGlzdFZpZXdfVW5tb2RpZmlhYmxlSW50MTZMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlSW50MTZMaXN0Vmlld19Vbm1vZGlmaWFibGVVaW50MzJMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlVWludDMyTGlzdFZpZXdfVW5tb2RpZmlhYmxlSW50MzJMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlSW50MzJMaXN0Vmlld19Vbm1vZGlmaWFibGVVaW50NjRMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlVWludDY0TGlzdFZpZXdfVW5tb2RpZmlhYmxlSW50NjRMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlSW50NjRMaXN0Vmlld19Vbm1vZGlmaWFibGVJbnQzMng0TGlzdFZpZXcmVW5tb2RpZmlhYmxlTGlzdEJhc2UmX1VubW9kaWZpYWJsZUxpc3RNaXhpblVubW9kaWZpYWJsZUludDMyeDRMaXN0Vmlld19Vbm1vZGlmaWFibGVGbG9hdDMyeDRMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlRmxvYXQzMng0TGlzdFZpZXdfVW5tb2RpZmlhYmxlRmxvYXQ2NHgyTGlzdFZpZXcmVW5tb2RpZmlhYmxlTGlzdEJhc2UmX1VubW9kaWZpYWJsZUxpc3RNaXhpblVubW9kaWZpYWJsZUZsb2F0NjR4Mkxpc3RWaWV3X1VubW9kaWZpYWJsZUZsb2F0MzJMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlRmxvYXQzMkxpc3RWaWV3X1VubW9kaWZpYWJsZUZsb2F0NjRMaXN0VmlldyZVbm1vZGlmaWFibGVMaXN0QmFzZSZfVW5tb2RpZmlhYmxlTGlzdE1peGluVW5tb2RpZmlhYmxlRmxvYXQ2NExpc3RWaWV3X2NvbnZVMzJfY29udlU2NF9jb252RjMyX2NvbnZGNjRfYnl0ZVN3YXAxNl9ieXRlU3dhcDMyNDI3ODI1NTM2MDQyOTQ5MDE3NjBfYnl0ZVN3YXA2NF90b0ludF90b0ludDhfdG9VaW50OF90b0NsYW1wZWRVaW50OF90b0ludDE2X3RvVWludDE2X3RvSW50MzJfdG9VaW50MzJfcmFuZ2VDaGVja19vZmZzZXRBbGlnbm1lbnRDaGVja2FsaWdubWVudE9mZnNldCAoKSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgQllURVNfUEVSX0VMRU1FTlQgKHZtc2VydmljZV9pb2xvYWRlci5kYXJ0c2VydmVyLmRhcnRQZW5kaW5nV3JpdGVwYXJlbnRfZGlyZWN0b3J5Y3JlYXRld3JpdGVBc0J5dGVzV3JpdGVMaW1pdGVycGVuZGluZ1dyaXRlc2tNYXhPcGVuV3JpdGVzb3BlbldyaXRlc3NjaGVkdWxlV3JpdGVwd19tYXliZVdyaXRlRmlsZXNfd3JpdGVDb21wbGV0ZWRGaWxlUmVxdWVzdHNwbGlicmFyeVVybElzb2xhdGVMb2FkZXJTdGF0ZWlzb2xhdGVJZF9kZWFkX3dvcmtpbmdEaXJlY3Rvcnlfcm9vdFNjcmlwdF9wYWNrYWdlRXJyb3JfcGFja2FnZVJvb3RfcGFja2FnZUNvbmZpZ19wYWNrYWdlTWFwX21heEZpbGVSZXF1ZXN0c2N1cnJlbnRGaWxlUmVxdWVzdHNfZmlsZVJlcXVlc3RRdWV1ZV9wZW5kaW5nUGFja2FnZUxvYWRzX3BhY2thZ2VzUG9ydHBhY2thZ2VSb290RmxhZ3BhY2thZ2VzQ29uZmlnRmxhZ3dvcmtpbmdEaXJlY3Rvcnlyb290U2NyaXB0X3NldFBhY2thZ2VSb290X3NldFBhY2thZ2VzQ29uZmlndXBkYXRlUGFja2FnZU1hcF9wYWNrYWdlc1JlYWR5c2hvdWxkSXNzdWVGaWxlUmVxdWVzdGVucXVldWVGaWxlUmVxdWVzdGRlcXVldWVGaWxlUmVxdWVzdGh0dHA6aHR0cHM6cGFja2FnZXNQYXJhbXBhY2thZ2VzTmFtZV9yZXF1ZXN0UGFja2FnZXNNYXBfdHJpZ2dlclBhY2thZ2VSZXNvbHV0aW9uX3Jlc29sdmVQYWNrYWdlVXJpd3JvbmdwYWNrYWdlOi8vVVJJcyB1c2luZyB0aGUgJ3BhY2thZ2U6JyBzY2hlbWUgc2hvdWxkIGxvb2sgbGlrZSAnLCBub3QgJ3BhY2thZ2VOYW1lRW5kVVJJUyB1c2luZyB0aGUgJ3BhY2thZ2U6JyBzY2hlbWUgc2hvdWxkIGxvb2sgbGlrZSAncGFja2FnZTpwYWNrYWdlTmFtZScsIG5vdCAncGFja2FnZTpSZXNvbHZpbmcgcGFja2FnZSB3aXRoIHVyaSBwYXRoOiBSZXNvbHZpbmcgcGFja2FnZSB3aXRoIHBlbmRpbmcgcmVzb2x1dGlvbiBlcnJvcjogJ3BhY2thZ2U6LycsIG5vdCAncGFja2FnZTpNYXBwZWQgJycgcGFja2FnZSB0byAnTm8gbWFwcGluZyBmb3IgJycgcGFja2FnZSB3aGVuIHJlc29sdmluZyAnUGF0aCB0byBiZSByZXNvbHZlZCBpbiBwYWNrYWdlOiBSZXNvbHZlZCAnX2hhbmRsZVBhY2thZ2VzUmVwbHlSZXF1ZXN0ZWQgcGFja2FnZXMgbWFwIGZvciAnR290IHBhY2thZ2VzIHJlcGx5OiBHb3QgZmFpbHVyZSByZXNwb25zZSBvbiBwYWNrYWdlIHBvcnQ6ICdSZWNlaXZlZCBwYWNrYWdlIHJvb3Q6ICdTZXR1cCBwYWNrYWdlIG1hcDogQmFkIHR5cGUgb2YgcGFja2FnZXMgcmVwbHk6IHJlcVdlYlNvY2tldENsaWVudFBBUlNFX0VSUk9SX0NPREVCSU5BUllfTUVTU0FHRV9FUlJPUl9DT0RFTk9UX01BUF9FUlJPUl9DT0RFSURfRVJST1JfQ09ERXNvY2tldHNlcnZpY2VvbldlYlNvY2tldE1lc3NhZ2VkaXNjb25uZWN0TWVzc2FnZSBwYXJzZSBlcnJvcjogTWVzc2FnZSBtdXN0IGJlIGEgSlNPTiBtYXAucnBjTWVzc2FnZVR5cGUuUmVxdWVzdG9uUmVxdWVzdE1lc3NhZ2VUeXBlLk5vdGlmaWNhdGlvbm9uTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUuUmVzcG9uc2VvblJlc3BvbnNlTWVzc2FnZSBtdXN0IGJlIGEgc3RyaW5nLnBvc3RSZXNwb25zZVBheWxvYWRLaW5kLlN0cmluZ1Jlc3BvbnNlUGF5bG9hZEtpbmQuQmluYXJ5UmVzcG9uc2VQYXlsb2FkS2luZC5VdGY4U3RyaW5nYWRkVXRmOFRleHRIdHRwUmVxdWVzdENsaWVudGpzb25Db250ZW50VHlwZWNoYXJzZXRzZW5kRXZlbnRzQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luQ2FuIG5vdCBoYW5kbGUgYmluYXJ5IHJlc3BvbnNlc1dFQlNPQ0tFVF9QQVRIL3dzUk9PVF9SRURJUkVDVF9QQVRIL2luZGV4Lmh0bWxfc2VydmljZV9pcF9wb3J0X29yaWdpbkNoZWNrRGlzYWJsZWRfYXV0aENvZGVzRGlzYWJsZWRfc2VydmVyYXV0aENvZGVzRGlzYWJsZWRzZXJ2ZXJBZGRyZXNzaXBfaXNBbGxvd2VkT3JpZ2lubG9jYWxob3N0OjoxMTI3LjAuMC4xX29yaWdpbkNoZWNrb3JpZ2luc1NlYy1XZWJTb2NrZXQtT3JpZ2luT3JpZ2luX2NoZWNrQXV0aFRva2VuQW5kR2V0UGF0aHJlcXVlc3RVcmlyZXF1ZXN0UGF0aFNlZ21lbnRzYXV0aFRva2VuX3JlcXVlc3RIYW5kbGVyZm9yYmlkZGVuIG9yaWdpblBVVGZzTmFtZUxpc3Rmc1BhdGhMaXN0ZnNQYXRoQmFzZTY0TGlzdGZzVXJpQmFzZTY0TGlzdGZzTmFtZWZzUGF0aGZzVXJpZGV2X2ZzX25hbWVkZXZfZnNfdXJpX2I2NGRlY29kZWRGc1VyaWRldl9mc19wYXRoZGV2X2ZzX3BhdGhfYjY0ZGV2ZnNoYW5kbGVQdXRTdHJlYW1tZXRob2Qgbm90IGFsbG93ZWRtaXNzaW5nIG9yIGludmFsaWQgYXV0aGVudGljYXRpb24gY29kZXdlYlNvY2tldFRoaXMgVk0gd2FzIGJ1aWx0IHdpdGhvdXQgdGhlIE9ic2VydmF0b3J5IFVJLmFzc2V0bWltZVR5cGVxdWVyeVBhcmFtZXRlcnNzdGFydHVwcG9sbEVycm9ycG9sbFN0YWNrcG9sbGFkZHJlc3Nlc2F0dGVtcHRzbWF4QXR0ZW1wdHNPYnNlcnZhdG9yeSBzZXJ2ZXIgZmFpbGVkIHRvIHN0YXJ0IGFmdGVyICB0cmllc0NvdWxkIG5vdCBzdGFydCBPYnNlcnZhdG9yeSBIVFRQIHNlcnZlcjoKaXNFeGl0aW5nT2JzZXJ2YXRvcnkgSFRUUCBzZXJ2ZXIgZXhpdGluZyBiZWZvcmUgbGlzdGVuaW5nIGFzIHZtIHNlcnZpY2UgaGFzIHJlY2VpdmVkIGV4aXQgcmVxdWVzdApPYnNlcnZhdG9yeSBsaXN0ZW5pbmcgb24gL2RhcnQuc2VydmljZXMvQ3JlYXRpbmcgY3JlYXRlU3luY0RlbGV0aW5nIGRlbGV0ZVN5bmNvbGRTZXJ2ZXJBZGRyZXNzT2JzZXJ2YXRvcnkgbm8gbG9uZ2VyIGxpc3RlbmluZyBvbiBDb3VsZCBub3Qgc2h1dGRvd24gT2JzZXJ2YXRvcnkgSFRUUCBzZXJ2ZXI6Cl9hdXRvU3RhcnRfaXNXaW5kb3dzX2lzRnVjaHNpYV9zaWduYWxXYXRjaF9zaWduYWxTdWJzY3JpcHRpb25zZXJ2ZXJzZXJ2ZXJGdXR1cmVfcmVnaXN0ZXJTaWduYWxIYW5kbGVyVGltZXJfdHJhY2VMb2FkaW5nX2RldGVybWluaXN0aWNfaHR0cENsaWVudF9TUEFDRV9IQVNIX0RPVF9DT0xPTl9ERUxfaW52YWxpZFBhY2thZ2VOYW1lQ2hhcnNfRGFydF9rQ2Fub25pY2FsaXplVXJsX0RhcnRfa1NjcmlwdFRhZ19EYXJ0X2tTb3VyY2VUYWdfRGFydF9rSW1wb3J0VGFnX0RhcnRfa0luaXRMb2FkZXJfRGFydF9rUmVzb3VyY2VMb2FkX0RhcnRfa0dldFBhY2thZ2VSb290VXJpX0RhcnRfa0dldFBhY2thZ2VDb25maWdVcmlfRGFydF9rUmVzb2x2ZVBhY2thZ2VVcmlfRGFydF9rSW1wb3J0RXh0ZW5zaW9uX0RhcnRfa1Jlc29sdmVBc0ZpbGVQYXRoc2lsZW50T2JzZXJ2YXRvcnlTSUxFTlRfT0JTRVJWQVRPUllfc2FuaXRpemVXaW5kb3dzUGF0aGZpeGVkUGF0aF90cmltV2luZG93c1BhdGhfZW5mb3JjZVRyYWlsaW5nU2xhc2glIF9zZW5kUmVzb3VyY2VSZXNwb25zZUNvdWxkIG5vdCBsb2FkICJDb3VsZCBub3QgaW1wb3J0ICIiIGZyb20gIl9zZW5kRXh0ZW5zaW9uSW1wb3J0UmVzcG9uc2VDb3VsZCBub3QgcmVzb2x2ZSAiX2xvYWRIdHRwbWF4Q29ubmVjdGlvbnNQZXJIb3N0X2xvYWRGaWxlbG9hZGVyU3RhdGVfbG9hZERhdGFVcmltaW1lYXBwbGljYXRpb24vZGFydHRleHQvcGxhaW5NSU1FLXR5cGUgbXVzdCBiZSBhcHBsaWNhdGlvbi9kYXJ0IG9yIHRleHQvcGxhaW46IFVTLUFTQ0lJT25seSB1dGYtOCBvciBVUy1BU0NJSSBlbmNvZGluZ3MgYXJlIHN1cHBvcnRlZDogSW52YWxpZCBkYXRhIHVyaSAoKToKICBfbG9hZFBhY2thZ2V0cmFjZUxvYWRpbmdFeGNlcHRpb24gKCkgd2hlbiByZXNvbHZpbmcgcGFja2FnZSBVUkk6IFBlbmRpbmcgcGFja2FnZSBsb2FkIG9mICcgcGVuZGluZ19oYW5kbGVSZXNvdXJjZVJlcXVlc3RVbmtub3duIHNjaGVtZSAoKSBmb3IgX3BhcnNlUGFja2FnZXNGaWxlcGFja2FnZXNGaWxlaW52YWxpZFBhY2thZ2VOYW1lU2tpcHBpbmcgY29tbWVudCBpbiBMaW5lIHN0YXJ0cyB3aXRoICc6JyBpbiBNaXNzaW5nIHBhY2thZ2UgbmFtZSBpbiBMaW5lIGhhcyBubyAnOicgaW4gTWlzc2luZyAnOicgc2VwYXJhdG9yIGluIEludmFsaWQgcGFja2FnZSBuYW1lIEludmFsaWQgcGFja2FnZSBuYW1lICdwYWNrYWdlTmFtZTogb3JpZ2luYWwgcGFja2FnZVVyaTogbWFwcGluZzogUGFyc2VkIHBhY2thZ2VzIGZpbGUgYXQgLiBTZW5kaW5nOgpfbG9hZFBhY2thZ2VzRmlsZUxvYWRlZCBwYWNrYWdlcyBmaWxlIGZyb20gRXJyb3IgbG9hZGluZyBwYWNrYWdlczogVW5jYXVnaHQgZXJyb3IgKCkgbG9hZGluZyBwYWNrYWdlcyBmaWxlLl9maW5kUGFja2FnZXNGaWxlZGlyVXJpQ2hlY2tpbmcgZm9yICBmaWxlLiBleGlzdHM6IENvdWxkIG5vdCByZXNvbHZlIGEgcGFja2FnZSBsb2NhdGlvbiBmcm9tIENvdWxkIG5vdCByZXNvbHZlIGEgcGFja2FnZSBsb2NhdGlvbiBmb3IgYmFzZSBhdCBfbG9hZEh0dHBQYWNrYWdlc0ZpbGVyZXNvdXJjZUZldGNoaW5nIHBhY2thZ2VzIGZpbGUgZnJvbSAncnNwOnN0cmVhbTpmb3ItaXRlcmF0b3JHb3Qgc3RhdHVzICBmZXRjaGluZyAnTG9hZGVkIHBhY2thZ2VzIGZpbGUgZnJvbSAnJzoKRXJyb3IgbG9hZGluZyBwYWNrYWdlcyBmaWxlIGZyb20gJykgbG9hZGluZyBwYWNrYWdlcyBmaWxlIGZyb20gJ19sb2FkUGFja2FnZXNEYXRhTUlNRS10eXBlIG11c3QgYmUgdGV4dC9wbGFpbjogKSBsb2FkaW5nIHBhY2thZ2VzIGRhdGEuX2hhbmRsZVBhY2thZ2VzUmVxdWVzdFVuc3VwcG9ydGVkIHNjaGVtZSB1c2VkIHRvIGxvY2F0ZSAucGFja2FnZXMgZmlsZTogSGFuZGxpbmcgbG9hZCBvZiBwYWNrYWdlcyBtYXA6ICdQYWNrYWdlcyBmaWxlICcpIGZvciBwYWNrYWdlIGZpbGUgYXQgVW5rbm93biBwYWNrYWdlcyByZXF1ZXN0IHRhZzogRXJyb3IgaGFuZGxpbmcgcGFja2FnZXMgcmVxdWVzdDogKSBoYW5kbGluZyBwYWNrYWdlcyByZXF1ZXN0LnNodXRkb3duTG9hZGVyc1NlcnZpY2Ugc2h1dGRvd25pZWRpbHNfcHJvY2Vzc0xvYWRSZXF1ZXN0aXNSZWxvYWRpbmdwYXRoVXJpKSBpbiBDYW5ub3QgcmVzb2x2ZSBzY2hlbWUgKCkgdG8gZmlsZSBwYXRoVW5rbm93biBsb2FkZXIgcmVxdWVzdCB0YWc9c2VydmVyUHJpbnRfbm90aWZ5U2VydmVyU3RhdGVWTVNlcnZpY2VJT19Ob3RpZnlTZXJ2ZXJTdGF0ZV9sYXp5U2VydmVyQm9vdGNsZWFudXBDYWxsYmFja0Vycm9yIGluIHZtLXNlcnZpY2Ugc2h1dGRvd246IGNyZWF0ZVRlbXBEaXJDYWxsYmFja2NyZWF0ZVRlbXBkZWxldGVEaXJDYWxsYmFja3dyaXRlRmlsZUNhbGxiYWNrd3JpdGVTdHJlYW1GaWxlQ2FsbGJhY2tyZWFkRmlsZUNhbGxiYWNrbGlzdEZpbGVzQ2FsbGJhY2tkaXJQYXRoZGlyUGF0aFN0cmZpbGVFbnRpdHlmaWxlUGF0aG1vZGlmaWVkc2VydmVySW5mb3JtYXRpb25DYWxsYmFja3dlYlNlcnZlckNvbnRyb2xDYWxsYmFja19jbGVhckZ1dHVyZV9vblNpZ25hbHNpZ25hbF9yZWdpc3RlclNpZ25hbEhhbmRsZXJTSUdRVUlUX3NodXRkb3duVk1TZXJ2aWNlSU9fU2h1dGRvd25kYXJ0Ll92bXNlcnZpY2Vhc3NldC5kYXJ0Y2xpZW50LmRhcnRkZXZmcy5kYXJ0Y29uc3RhbnRzLmRhcnRydW5uaW5nX2lzb2xhdGUuZGFydHJ1bm5pbmdfaXNvbGF0ZXMuZGFydG1lc3NhZ2UuZGFydG1lc3NhZ2Vfcm91dGVyLmRhcnRuYW1lZF9sb29rdXAuZGFydFNlcnZlclN0YXJ0Q2FsbGJhY2tTZXJ2ZXJTdG9wQ2FsbGJhY2tDbGVhbnVwQ2FsbGJhY2tDcmVhdGVUZW1wRGlyQ2FsbGJhY2tEZWxldGVEaXJDYWxsYmFja1dyaXRlRmlsZUNhbGxiYWNrV3JpdGVTdHJlYW1GaWxlQ2FsbGJhY2tSZWFkRmlsZUNhbGxiYWNrTGlzdEZpbGVzQ2FsbGJhY2tTZXJ2ZXJJbmZvcm1hbWVzc2FnZV9yb3V0ZXJ0aW9uQ2FsbGJhY2tTZXJ2ZXJJbmZvcm1hdGlvbkNhbGxiYWNrV2ViU2VydmVyQ29udHJvbENhbGxiYWNrQ2xpZW50U2VydmljZUhhbmRsZUlzb2xhdGVFbWJlZGRlckRhdGFWTVNlcnZpY2VFbWJlZGRlckhvb2tzc2VydmVyU3RhcnRzZXJ2ZXJTdG9wY3JlYXRlVGVtcERpcmRlbGV0ZURpcndyaXRlRmlsZXdyaXRlU3RyZWFtRmlsZXJlYWRGaWxlbGlzdEZpbGVzc2VydmVySW5mb3JtYXRpb253ZWJTZXJ2ZXJDb250cm9sVk1TZXJ2aWNlc2VydmljZU5hbWVzcGFjZWNsaWVudHNfc2VydmljZVJlcXVlc3Rzc3JydW5uaW5nSXNvbGF0ZXNldmVudFBvcnRrU2VydmljZVN0cmVhbXNlcnZpY2VTdHJlYW1zbWVzc2FnZUhhbmRsZXJfYWRkQ2xpZW50c3RyZWFtc3NlcnZpY2VzX3JlbW92ZUNsaWVudG5hbWVzcGFjZWtleU9mc3RyZWFtSWRfaXNBbnlDbGllbnRTdWJzY3JpYmVkX2V2ZW50TWVzc2FnZUhhbmRsZXJqc29ucnBjMi4wc3RyZWFtTm90aWZ5U2VydmljZVVucmVnaXN0ZXJlZHNlcnZpY2VIYW5kbGVzX2NvbnRyb2xNZXNzYWdlSGFuZGxlcnBvcnRJZGlzb2xhdGVTdGFydHVwaXNvbGF0ZVNodXRkb3duX3NlcnZlck1lc3NhZ2VIYW5kbGVyX2hhbmRsZU5hdGl2ZVJwY0NhbGxUaGUgY2xpZW50IHNlbnQgYSBub24tcmVxdWVzdCBqc29uLXJwYyBtZXNzYWdlLnJvdXRlUmVxdWVzdFRoZSBycGMgY2FsbCByZXN1bHRlZCBpbiBleGNlcHRpb246IF9leGl0Y2xpZW50c0xpc3RJbnRlcm5hbCB2bS1zZXJ2aWNlIGVycm9yOiBpZ25vcmluZyBpbGxlZ2FsIG1lc3NhZ2U6IF9maW5kRmlyc3RDbGllbnRUaGF0SGFuZGxlc1NlcnZpY2Vfc3RyZWFtTGlzdGVuc3RyZWFtTGlzdGVuOiBpbnZhbGlkICdzdHJlYW1JZCcgcGFyYW1ldGVyOiBfc2VuZFNlcnZpY2VSZWdpc3RlcmVkRXZlbnRfc3RyZWFtQ2FuY2VsX2hhc05hbWVzcGFjZV9nZXROYW1lc3BhY2VfZ2V0TWV0aG9kX3JlZ2lzdGVyU2VydmljZXJlZ2lzdGVyU2VydmljZTogaW52YWxpZCAnc2VydmljZScgcGFyYW1ldGVyOiByZWdpc3RlclNlcnZpY2U6IGludmFsaWQgJ2FsaWFzJyBwYXJhbWV0ZXI6IFNlcnZpY2VSZWdpc3RlcmVkX2hhbmRsZVNlcnZpY2VuZXdJZG9sZElkc2VyaWFsZm9yd2FyZFRvSnNvblVua25vd24gc2VydmljZTogYXJnc09mU3RyaW5nX3JvdXRlUmVxdWVzdEltcGxjb21wbGV0ZWRzdHJlYW1MaXN0ZW5zdHJlYW1DYW5jZWxyZWdpc3RlclNlcnZpY2VzaG91bGRIYW5kbGVNZXNzYWdlaGFuZGxlTWVzc2FnZXNlbmRUb1ZNc2V0RXJyb3JSZXNwb25zZVVuZXhwZWN0ZWQgZXhjZXB0aW9uOnJvdXRlUmVzcG9uc2VyZWxlYXNlQXNzZXRleHRlbnNpb25TdGFydHRleHQvaHRtbDsgY2hhcnNldD1VVEYtOGFwcGxpY2F0aW9uL2RhcnQ7IGNoYXJzZXQ9VVRGLThhcHBsaWNhdGlvbi9qYXZhc2NyaXB0OyBjaGFyc2V0PVVURi04Y3NzdGV4dC9jc3M7IGNoYXJzZXQ9VVRGLThnaWZpbWFnZS9naWZwbmdpbWFnZS9wbmdqcGdpbWFnZS9qcGVnanBlZ2ltYWdlL3N2Zyt4bWx0YXJCeXRlc2Fzc2V0TGlzdGFzc2V0c0NsaWVudF9GaWxlU3lzdGVtcmVzb2x2ZVBhdGhEZXZGU19mc01hcF9ycGNOYW1lc19saXN0RGV2RlNfY3JlYXRlRGV2RlNfZGVsZXRlRGV2RlNfcmVhZERldkZTRmlsZV93cml0ZURldkZTRmlsZV93cml0ZURldkZTRmlsZXNfbGlzdERldkZTRmlsZXNkZWxldGlvbnNVbmV4cGVjdGVkIHJwYyBGaWxlU3lzdGVtTGlzdGZzTmFtZXN1cmlQYXJhbUZTRmlsZWZpbGVDb250ZW50c19yZWFkRGV2RlNGaWxlOiBkZWNvZGVkRmlsZUNvbnRlbnRzZmlsZUluZm86IGludmFsaWQgJ2ZpbGVzJyBwYXJhbWV0ZXIgYXQgaW5kZXggZmlsZUxpc3RGU0ZpbGVMaXN0Q29uc3RhbnRzU0VSVklDRV9FWElUX01FU1NBR0VfSURJU09MQVRFX1NUQVJUVVBfTUVTU0FHRV9JRElTT0xBVEVfU0hVVERPV05fTUVTU0FHRV9JRFdFQl9TRVJWRVJfQ09OVFJPTF9NRVNTQUdFX0lEU0VSVkVSX0lORk9fTUVTU0FHRV9JRE1FVEhPRF9DQUxMX0ZST01fTkFUSVZFUnVubmluZ0lzb2xhdGVzZXJ2aWNlSWRpc29sYXRlcy9zZW5kVG9Jc29sYXRlUnVubmluZ0lzb2xhdGVzaXNvbGF0ZXNfcm9vdFBvcnRJZHJpaXNvbGF0ZVBhcmFtaW52YWxpZCAnaXNvbGF0ZUlkJyBwYXJhbWV0ZXI6IFNlbnRpbmVsQ29sbGVjdGVkdmFsdWVBc1N0cmluZzxjb2xsZWN0ZWQ+c2V0UmVzcG9uc2VldmFsdWF0ZUluRnJhbWVfRXZhbHVhdG9yX21lc3NhZ2VfYnVpbGRTY29wZWJ1aWxkU2NvcGVSZXNwb25zZXJlc3BvbnNlSnNvbmRlY29kZUpzb25rZXJuZWxCYXNlNjRfY29tcGlsZUV4cHJlc3Npb25fZXZhbHVhdGVDb21waWxlZEV4cHJlc3Npb25fc2V0dXBQYXJhbXNidWlsZFNjb3BlUGFyYW1zX2J1aWxkRXhwcmVzc2lvbkV2YWx1YXRpb25TY29wZWJ1aWxkU2NvcGVidWlsZFNjb3BlUmVzcG9uc2VSZXN1bHRleHRlcm5hbENsaWVudGNvbXBpbGVQYXJhbXNwYXJhbV9uYW1lc3R5cGVfcGFyYW1zX25hbWVzanNvbk1hcGtlcm5lbEJ5dGVzY29tcGlsZUV4cHJlc3Npb25QYXJhbXNkaXNhYmxlQnJlYWtwb2ludHNydW5QYXJhbXNydW5FeHByZXNzaW9uZnJhbWVJbmRleHRhcmdldElkTWVzc2FnZVR5cGVSZXF1ZXN0Tm90aWZpY2F0aW9uUmVzcG9uc2VfZnJvbUpzb25ScGNSZXF1ZXN0X2Zyb21Kc29uUnBjTm90aWZpY2F0aW9uX2Zyb21Kc29uUnBjUmVzdWx0X2Zyb21Kc29uUnBjRXJyb3Jmb3JNZXRob2Rmb3JJc29sYXRlZnJvbUpzb25ScGMiaWQiIG11c3QgYmUgYSBudW1iZXIsIHN0cmluZywgb3IgbnVsbC5JbnZhbGlkIG1lc3NhZ2UgZm9ybWF0X21ldGhvZE5hbWVGcm9tVXJpdG9VcmlvdmVybG9hZHNfbWFrZUFsbFN0cmluZ25ld19saXN0X3NldFJlc3BvbnNlRnJvbVBvcnRjb3VsZCBub3Qgc2VuZCBtZXNzYWdlIFtdIHRvIGlzb2xhdGVfbWV0aG9kTmVlZHNPYmplY3RQYXJhbWV0ZXJzTWVzc2FnZVJvdXRlclJlc3BvbnNlUGF5bG9hZEtpbmRVdGY4U3RyaW5nU2VydmljZUVycm9ySW50ZXJuYWxFcnJvclVucmVjb2duaXplZCByZXNwb25zZTogQmluYXJ5IHJlc3BvbnNlcyBjYW4gbm90IGJlIGRlY29kZWRfTmFtZWRMb29rdXAmT2JqZWN0Jkl0ZXJhYmxlTWl4aW5OYW1lZExvb2t1cF9lbGVtZW50c19pZHNJZEdlbmVyYXRvcmlzb2xhdGVDb250cm9sUG9ydHNjcmlwdExvYWRQb3J0c2VydmljZUF1dGhUb2tlbmlzb2xhdGVFbWJlZGRlckRhdGFrUGFyc2VFcnJvcmtJbnZhbGlkUmVxdWVzdGtNZXRob2ROb3RGb3VuZGtJbnRlcm5hbEVycm9ya0ZlYXR1cmVEaXNhYmxlZGtDYW5ub3RBZGRCcmVha3BvaW50a1N0cmVhbUFscmVhZHlTdWJzY3JpYmVka1N0cmVhbU5vdFN1YnNjcmliZWRrSXNvbGF0ZU11c3RCZVJ1bm5hYmxla0lzb2xhdGVNdXN0QmVQYXVzZWRrQ2Fubm90UmVzdW1la0lzb2xhdGVJc1JlbG9hZGluZ2tJc29sYXRlUmVsb2FkQmFycmVka0lzb2xhdGVNdXN0SGF2ZVJlbG9hZGVka1NlcnZpY2VBbHJlYWR5UmVnaXN0ZXJlZGtTZXJ2aWNlRGlzYXBwZWFyZWRrRXhwcmVzc2lvbkNvbXBpbGF0aW9uRXJyb3JrSW52YWxpZFRpbWVsaW5lUmVxdWVzdGtGaWxlU3lzdGVtQWxyZWFkeUV4aXN0c2tGaWxlU3lzdGVtRG9lc05vdEV4aXN0a0ZpbGVEb2VzTm90RXhpc3RfZXJyb3JNZXNzYWdlc0ZlYXR1cmUgaXMgZGlzYWJsZWRTdHJlYW0gYWxyZWFkeSBzdWJzY3JpYmVkU3RyZWFtIG5vdCBzdWJzY3JpYmVkRmlsZSBzeXN0ZW0gYWxyZWFkeSBleGlzdHNGaWxlIHN5c3RlbSBkb2VzIG5vdCBleGlzdEZpbGUgZG9lcyBub3QgZXhpc3RTZXJ2aWNlIGFscmVhZHkgcmVnaXN0ZXJlZFNlcnZpY2UgaGFzIGRpc2FwcGVhcmVkRXhwcmVzc2lvbiBjb21waWxhdGlvbiBlcnJvclRoZSB0aW1lbGluZSByZWxhdGVkIHJlcXVlc3QgY291bGQgbm90IGJlIGNvbXBsZXRlZGR1ZSB0byB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uc2hvcnREZWxheV9hc3NldHNfZGVjb2RlQXNzZXRzVk1TZXJ2aWNlX0RlY29kZUFzc2V0c0NvdWxkIG5vdCBsb2FkIE9ic2VydmF0b3J5IGFzc2V0czogX2VuY29kZURldkZTRGlzYWJsZWRFcnJvckRldkZTIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBEYXJ0IGltcGxlbWVudGF0aW9uX2VuY29kZUZpbGVTeXN0ZW1BbHJlYWR5RXhpc3RzRXJyb3I6IGZpbGUgc3lzdGVtICcnIGFscmVhZHkgZXhpc3RzX2VuY29kZUZpbGVTeXN0ZW1Eb2VzTm90RXhpc3RFcnJvcicgZG9lcyBub3QgZXhpc3RzZW5kSXNvbGF0ZVNlcnZpY2VNZXNzYWdlVk1TZXJ2aWNlX1NlbmRJc29sYXRlU2VydmljZU1lc3NhZ2VzZW5kUm9vdFNlcnZpY2VNZXNzYWdlVk1TZXJ2aWNlX1NlbmRSb290U2VydmljZU1lc3NhZ2VzZW5kT2JqZWN0Um9vdFNlcnZpY2VNZXNzYWdlVk1TZXJ2aWNlX1NlbmRPYmplY3RSb290U2VydmljZU1lc3NhZ2VfbWFrZUF1dGhUb2tlbmtUb2tlbkJ5dGVTaXplZW5jb2RlUnBjRXJyb3JlbmNvZGVNaXNzaW5nUGFyYW1FcnJvciBleHBlY3RzIHRoZSAnJyBwYXJhbWV0ZXJlbmNvZGVJbnZhbGlkUGFyYW1FcnJvcjogaW52YWxpZCAnJyBwYXJhbWV0ZXI6IGVuY29kZUNvbXBpbGF0aW9uRXJyb3JkaWFnbm9zdGljZW5jb2RlUmVzdWx0ZW5jb2RlU3VjY2Vzc1N1Y2Nlc3Nib290X3JlZ2lzdGVySXNvbGF0ZXBvcnRfaWRfb25TdGFydFZNU2VydmljZV9PblN0YXJ0X29uRXhpdFZNU2VydmljZV9PbkV4aXRvblNlcnZlckFkZHJlc3NDaGFuZ2VWTVNlcnZpY2VfT25TZXJ2ZXJBZGRyZXNzQ2hhbmdlX3ZtTGlzdGVuU3RyZWFtVk1TZXJ2aWNlX0xpc3RlblN0cmVhbV92bUNhbmNlbFN0cmVhbVZNU2VydmljZV9DYW5jZWxTdHJlYW1fcmVxdWVzdEFzc2V0c1ZNU2VydmljZV9SZXF1ZXN0QXNzZXRzX3NwYXduVXJpTm90aWZ5Vk1TZXJ2aWNlX3NwYXduVXJpTm90aWZ5X3NldHVwQ29tcGxldGVkX2xvYWRQb3J0X2lzb2xhdGVJZF9sb2dJZF9wcmludFN0cmluZ0J1aWx0aW5fUHJpbnRTdHJpbmdfZ2V0UHJpbnRDbG9zdXJlX21ha2VMb2FkZXJSZXF1ZXN0U2VydmljZSBpc29sYXRlIGlzIG5vdCBhdmFpbGFibGUuKiBfc2V0V29ya2luZ0RpcmVjdG9yeVNldHRpbmcgd29ya2luZyBkaXJlY3Rvcnk6IFdvcmtpbmcgZGlyZWN0b3J5IFVSSTogU2V0dGluZyBwYWNrYWdlIHJvb3Q6IHBhY2thZ2VSb290U3RyUGFja2FnZSByb290IFVSSTogX3NldFBhY2thZ2VzTWFwUmVzb2x2aW5nIHBhY2thZ2VzIG1hcDogTm8gY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBzZXQucGFja2FnZXNVcmlTdHJSZXNvbHZlZCBwYWNrYWdlcyBtYXAgdG86IF9yZXNvbHZlU2NyaXB0VXJpUmVzb2x2aW5nIHNjcmlwdDogUmVzb2x2ZWQgZW50cnkgcG9pbnQgdG86IF9maWxlUGF0aEZyb21Vcml1c2VyVXJpR2V0dGluZyBmaWxlIHBhdGggZnJvbTogTm90IGEga25vd24gc2NoZW1lOiBfcmVzb3VyY2VSZWFkQXNCeXRlc19nZXRQYWNrYWdlUm9vdEZ1dHVyZVJlcXVlc3QgZm9yIHBhY2thZ2Ugcm9vdCBmcm9tIHVzZXIgY29kZS5fZ2V0UGFja2FnZUNvbmZpZ0Z1dHVyZVJlcXVlc3QgZm9yIHBhY2thZ2UgY29uZmlnIGZyb20gdXNlciBjb2RlLl9yZXNvbHZlUGFja2FnZVVyaUZ1dHVyZVJlcXVlc3QgZm9yIHBhY2thZ2UgVXJpIHJlc29sdXRpb24gZnJvbSB1c2VyIGNvZGU6IE5vbi1wYWNrYWdlIFVyaSwgcmV0dXJuaW5nIHVubW9kaWZpZWQ6IEV4Y2VwdGlvbiB3aGVuIHJlc29sdmluZyBwYWNrYWdlIFVSSTogbmF0aXZld3JhcHBlcnNOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczFOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczJOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczNOYXRpdmVGaWVsZFdyYXBwZXJDbGFzczRkYXJ0LmlvYnl0ZXNfYnVpbGRlci5kYXJ0Y29tbW9uLmRhcnRkYXRhX3RyYW5zZm9ybWVyLmRhcnRkaXJlY3RvcnkuZGFydGRpcmVjdG9yeV9pbXBsLmRhcnRlbWJlZGRlcl9jb25maWcuZGFydGV2ZW50aGFuZGxlci5kYXJ0ZmlsZS5kYXJ0ZmlsZV9pbXBsLmRhcnRmaWxlX3N5c3RlbV9lbnRpdHkuZGFydGlvX3Jlc291cmNlX2luZm8uZGFydGlvX3NpbmsuZGFydGlvX3NlcnZpY2UuZGFydGxpbmsuZGFydG5hbWVzcGFjZV9pbXBsLmRhcnRvdmVycmlkZXMuZGFydHBsYXRmb3JtLmRhcnRwbGF0Zm9ybV9pbXBsLmRhcnRwcm9jZXNzLmRhcnRzZWN1cmVfc2VydmVyX3NvY2tldC5kYXJ0c2VjdXJlX3NvY2tldC5kYXJ0c2VjdXJpdHlfY29udGV4dC5kYXJ0c2VydmljZV9vYmplY3QuZGFydHNvY2tldC5kYXJ0c3RkaW8uZGFydHN0cmluZ190cmFuc2Zvcm1lci5kYXJ0c3luY19zb2NrZXQuZGFydF9Bc3luY0RpcmVjdG9yeUxpc3Rlck9wc0ltcGxfc2V0UG9pbnRlckRpcmVjdG9yeV9TZXRBc3luY0RpcmVjdG9yeUxpc3RlclBvaW50ZXJnZXRQb2ludGVyRGlyZWN0b3J5X0dldEFzeW5jRGlyZWN0b3J5TGlzdGVyUG9pbnRlcl9SYW5kb21BY2Nlc3NGaWxlT3BzSW1wbEZpbGVfU2V0UG9pbnRlckZpbGVfR2V0UG9pbnRlckZpbGVfQ2xvc2VGaWxlX1JlYWRCeXRlRmlsZV9SZWFkcmVhZEludG9GaWxlX1JlYWRJbnRvRmlsZV9Xcml0ZUJ5dGV3cml0ZUZyb21GaWxlX1dyaXRlRnJvbUZpbGVfUG9zaXRpb25zZXRQb3NpdGlvbkZpbGVfU2V0UG9zaXRpb25GaWxlX1RydW5jYXRlRmlsZV9MZW5ndGhGaWxlX0ZsdXNobG9ja0ZpbGVfTG9ja19XYXRjaGVyUGF0aHBhdGhJZF9Jbm90aWZ5RmlsZVN5c3RlbVdhdGNoZXJfaWRNYXBfbmV3V2F0Y2hlcl9kb25lV2F0Y2hlcl9wYXRoV2F0Y2hlZF93YXRjaGVyUGF0aF9wYXRoV2F0Y2hlZEVuZF9XaW4zMkZpbGVTeXN0ZW1XYXRjaGVyX0ZTRXZlbnRTdHJlYW1GaWxlU3lzdGVtV2F0Y2hlcnNvY2tldElkX0ZpbHRlckltcGxGaWx0ZXJfUHJvY2Vzc3Byb2Nlc3NlZEZpbHRlcl9Qcm9jZXNzZWRfWkxpYkluZmxhdGVGaWx0ZXJ3aW5kb3dCaXRzRmlsdGVyX0NyZWF0ZVpMaWJJbmZsYXRlX1pMaWJEZWZsYXRlRmlsdGVyZ3ppcG1lbUxldmVsRmlsdGVyX0NyZWF0ZVpMaWJEZWZsYXRlX0lPU2VydmljZVBvcnRzbWF4UG9ydHNfcG9ydHNfZnJlZVBvcnRzX3VzZWRQb3J0c19nZXRQb3J0Zm9yUmVxdWVzdElkX3JldHVyblBvcnRfbmV3U2VydmljZVBvcnRJT1NlcnZpY2VfTmV3U2VydmljZVBvcnRfTmFtZXNwYWNlSW1wbF9jYWNoZWROYW1lc3BhY2VOYW1lc3BhY2VfQ3JlYXRlX2dldFBvaW50ZXJOYW1lc3BhY2VfR2V0UG9pbnRlcl9nZXREZWZhdWx0TmFtZXNwYWNlX0dldERlZmF1bHRfc2V0dXBOYW1lc3BhY2VfbmFtZXNwYWNlX25hbWVzcGFjZVBvaW50ZXJfU2lnbmFsQ29udHJvbGxlcl9saXN0ZW5fc2lnbmFsTnVtYmVyRmFpbGVkIHRvIGxpc3RlbiBmb3IgX3NldFNpZ25hbEhhbmRsZXJQcm9jZXNzX1NldFNpZ25hbEhhbmRsZXJfY2xlYXJTaWduYWxIYW5kbGVyUHJvY2Vzc19DbGVhclNpZ25hbEhhbmRsZXJfUHJvY2Vzc1N0YXJ0U3RhdHVzX2Vycm9yQ29kZV9lcnJvck1lc3NhZ2VfUHJvY2Vzc0ltcGxOYXRpdmVXcmFwcGVyX1Byb2Nlc3NJbXBsX3Jlc291cmNlSW5mb2Nvbm5lY3RlZFJlc291cmNlSGFuZGxlcl9wYXRoX21vZGVfc3RkaW5fc3Rkb3V0X3N0ZGVycl9leGl0SGFuZGxlcl9lbmRlZF9zdGFydGVkX2V4aXRDb2RlaW5jbHVkZVBhcmVudEVudmlyb25tZW50cnVuSW5TaGVsbGV4dC5kYXJ0LmlvLmdldFByb2Nlc3Nlc2V4dC5kYXJ0LmlvLmdldFByb2Nlc3NCeUlkUGF0aCBpcyBub3QgYSBTdHJpbmc6IEFyZ3VtZW50cyBpcyBub3QgYSBMaXN0OiBOb24tc3RyaW5nIGFyZ3VtZW50OiBfd2luZG93c0FyZ3VtZW50RXNjYXBlV29ya2luZ0RpcmVjdG9yeSBpcyBub3QgYSBTdHJpbmc6IEVudmlyb25tZW50IGlzIG5vdCBhIG1hcDogRW52aXJvbm1lbnQga2V5IG9yIHZhbHVlIGlzIG5vdCBhIHN0cmluZzogKE1vZGUgaXMgbm90IGEgUHJvY2Vzc1N0YXJ0TW9kZTogX3N0ZGluTmF0aXZlU29ja2V0X25hdGl2ZVNvY2tldF9zdGRvdXROYXRpdmVTb2NrZXRfc3RkZXJyTmF0aXZlU29ja2V0X21vZGVJc0F0dGFjaGVkX21vZGVIYXNTdGRpb19nZXRTaGVsbENvbW1hbmRjbWQuZXhlX2dldFNoZWxsQXJndW1lbnRzZXhlY3V0YWJsZXNoZWxsQXJndW1lbnRzL2Njb21tYW5kTGluZSciJyInbmV4dFBvc3F1b3RlUG9zbnVtQmFja3NsYXNoX2ludEZyb21CeXRlc19zdGFydE5hdGl2ZWV4aXREYXRhUmVhZEVYSVRfREFUQV9TSVpFZXhpdERhdGFCdWZmZXJpbnRzaGFuZGxlRXhpdGRlc3Ryb3lzdG9wcGVkX3J1bkFuZFdhaXRzdGRvdXRFbmNvZGluZ3N0ZGVyckVuY29kaW5nX3dhaXRnZXRPdXRwdXRQcm9jZXNzX1N0YXJ0ZXhpdEhhbmRsZXJQcm9jZXNzX1dhaXRTSUdURVJNQXJndW1lbnQgJ3NpZ25hbCcgbXVzdCBiZSBhIFByb2Nlc3NTaWduYWxwaWRfSW50ZXJuZXRBZGRyZXNzX2FkZHJlc3NMb29wYmFja0lQdjRfYWRkcmVzc0xvb3BiYWNrSVB2Nl9hZGRyZXNzQW55SVB2NF9hZGRyZXNzQW55SVB2Nl9JUHY0QWRkckxlbmd0aF9JUHY2QWRkckxlbmd0aGxvb3BiYWNrSVB2NGxvb3BiYWNrSVB2NmFueUlQdjRhbnlJUHY2X2hvc3RfaW5fYWRkcnJhd0FkZHJlc3Npc0xvb3BiYWNraXNMaW5rTG9jYWxpc011bHRpY2FzdEludmFsaWQgaW50ZXJuZXQgYWRkcmVzcyBpbl9hZGRyMC4wLjAuMF9jbG9uZVdpdGhOZXdIb3N0SW50ZXJuZXRBZGRyZXNzKCdfcGFyc2VJbnRlcm5ldEFkZHJlc3NfUGFyc2VfTmV0d29ya0ludGVyZmFjZU5ldHdvcmtJbnRlcmZhY2UoJ19OYXRpdmVTb2NrZXROYXRpdmVXcmFwcGVyX19OYXRpdmVTb2NrZXQmX05hdGl2ZVNvY2tldE5hdGl2ZVdyYXBwZXImX1NlcnZpY2VPYmplY3RfX3NlcnZpY2VJZF9zZXJ2aWNlSWRfc2VydmljZVBhdGhfc2VydmljZVR5cGVQYXRoX3NlcnZpY2VUeXBlTmFtZV9zZXJ2aWNlVHlwZV9OYXRpdmVTb2NrZXRyZWFkRXZlbnR3cml0ZUV2ZW50ZXJyb3JFdmVudGNsb3NlZEV2ZW50ZGVzdHJveWVkRXZlbnRmaXJzdEV2ZW50bGFzdEV2ZW50ZXZlbnRDb3VudGNsb3NlQ29tbWFuZHNodXRkb3duUmVhZENvbW1hbmRzaHV0ZG93bldyaXRlQ29tbWFuZHJldHVyblRva2VuQ29tbWFuZHNldEV2ZW50TWFza0NvbW1hbmRmaXJzdENvbW1hbmRsYXN0Q29tbWFuZGxpc3RlbmluZ1NvY2tldHBpcGVTb2NrZXR0eXBlTm9ybWFsU29ja2V0dHlwZUxpc3RlbmluZ1NvY2tldHR5cGVQaXBldHlwZVR5cGVNYXNrdGNwU29ja2V0dWRwU29ja2V0aW50ZXJuYWxTb2NrZXRpbnRlcm5hbFNpZ25hbFNvY2tldHR5cGVUY3BTb2NrZXR0eXBlVWRwU29ja2V0dHlwZUludGVybmFsU29ja2V0dHlwZUludGVybmFsU2lnbmFsU29ja2V0dHlwZVByb3RvY29sTWFza2hvc3ROYW1lTG9va3VwTWVzc2FnZWxpc3RJbnRlcmZhY2VzTWVzc2FnZXJldmVyc2VMb29rdXBNZXNzYWdlcHJvdG9jb2xJUHY0cHJvdG9jb2xJUHY2bm9ybWFsVG9rZW5CYXRjaFNpemVsaXN0ZW5pbmdUb2tlbkJhdGNoU2l6ZV9yZXRyeUR1cmF0aW9uX3JldHJ5RHVyYXRpb25Mb29wYmFja2lzQ2xvc2luZ2lzQ2xvc2VkUmVhZGNsb3NlZFJlYWRFdmVudFNlbnRpc0Nsb3NlZFdyaXRlY2xvc2VDb21wbGV0ZXJldmVudEhhbmRsZXJzZmxhZ3NTZW50dHlwZUZsYWdzbG9jYWxQb3J0bG9jYWxBZGRyZXNzYXZhaWxhYmxlc2VuZFJlYWRFdmVudHNyZWFkRXZlbnRJc3N1ZWRzZW5kV3JpdGVFdmVudHN3cml0ZUV2ZW50SXNzdWVkd3JpdGVBdmFpbGFibGVyZXNvdXJjZUluZm9kYXRhZ3JhbW5vcm1hbF93YXRjaENvbW1vbm5hdGl2ZVNldFNvY2tldElkd2F0Y2hTaWduYWxGYWlsZWQgaG9zdCBsb29rdXA6ICdyZXZlcnNlTG9va3VwYWRkckZhaWxlZCByZXZlcnNlIGhvc3QgbG9va3VwbGlzdEludGVyZmFjZXNpbmNsdWRlTG9vcGJhY2tpbmNsdWRlTGlua0xvY2FsRmFpbGVkIGxpc3RpbmcgaW50ZXJmYWNlc3N0YXJ0Q29ubmVjdHNvdXJjZUFkZHJlc3Njb25uZWN0aW5nY29ubmVjdE5leHRuYXRpdmVDcmVhdGVDb25uZWN0bmF0aXZlQ3JlYXRlQmluZENvbm5lY3Rpc0JpbmRFcnJvckJpbmQgZmFpbGVkQ29ubmVjdGlvbiBmYWlsZWRzZXRIYW5kbGVyc25hdGl2ZUdldEVycm9yc2V0TGlzdGVuaW5nQ29ubmVjdGlvbiBhdHRlbXB0IGNhbmNlbGxlZCwgaG9zdDogLCBwb3J0OiBjb25uZWN0c29ja2V0RnV0dXJlQ29ubmVjdGlvbiB0aW1lZCBvdXQsIGhvc3Q6IF9yZXNvbHZlSG9zdGJhY2tsb2d2Nk9ubHlzaGFyZWRuYXRpdmVDcmVhdGVCaW5kTGlzdGVuRmFpbGVkIHRvIGNyZWF0ZSBzZXJ2ZXIgc29ja2V0Y29ubmVjdFRvRXZlbnRIYW5kbGVyc2V0dXBSZXNvdXJjZUluZm9iaW5kRGF0YWdyYW1yZXVzZUFkZHJlc3NyZXVzZVBvcnR0dGxuYXRpdmVDcmVhdGVCaW5kRGF0YWdyYW1GYWlsZWQgdG8gY3JlYXRlIGRhdGFncmFtIHNvY2tldGlzTGlzdGVuaW5naXNQaXBlaXNJbnRlcm5hbGlzSW50ZXJuYWxTaWduYWxpc1RjcGlzVWRwSWxsZWdhbCBsZW5ndGggbmF0aXZlUmVhZFJlYWQgZmFpbGVkdG90YWxSZWFkZGlkUmVhZHJlY2VpdmVuYXRpdmVSZWN2RnJvbVJlY2VpdmUgZmFpbGVkbmF0aXZlQXZhaWxhYmxlSW52YWxpZCBhcmd1bWVudHMgdG8gd3JpdGUgb24gU29ja2V0YnVmZmVyQW5kU3RhcnRuYXRpdmVXcml0ZVdyaXRlIGZhaWxlZGFkZFdyaXRlbmF0aXZlU2VuZFRvU2VuZCBmYWlsZWRyZXR1cm5Ub2tlbnNuYXRpdmVBY2NlcHRhZGRSZWFkU29ja2V0IGhhcyBiZWVuIGNsb3NlZG5hdGl2ZUdldFBvcnRuYXRpdmVHZXRSZW1vdGVQZWVyaXNzdWVSZWFkRXZlbnRpc3N1ZVdyaXRlRXZlbnRtdWx0aXBsZXhldmVudHNPYmpkaXNjb25uZWN0RnJvbUV2ZW50SGFuZGxlcnRva2VuQmF0Y2hTaXplc2VuZFRvRXZlbnRIYW5kbGVyZGVzdHJveWVkZGlyZWN0aW9uc2h1dGRvd25SZWFkc2h1dGRvd25Xcml0ZWZ1bGxEYXRhZXh0LmRhcnQuaW8uZ2V0T3BlblNvY2tldHNleHQuZGFydC5pby5nZXRTb2NrZXRCeUlEaXNFcnJvclJlc3BvbnNlY3JlYXRlRXJyb3JVbmtub3duIGVycm9yZ2V0T3B0aW9ubmF0aXZlR2V0T3B0aW9uc2V0T3B0aW9ubmF0aXZlU2V0T3B0aW9uZ2V0UmF3T3B0aW9ub3B0aW9uLnZhbHVlbmF0aXZlR2V0UmF3T3B0aW9uc2V0UmF3T3B0aW9ubmF0aXZlU2V0UmF3T3B0aW9ubXVsdGljYXN0QWRkcmVzc1RoZSBuZXR3b3JrIGludGVyZmFjZSBkb2VzIG5vdCBoYXZlIGFuIGFkZHJlc3Mgb2YgdGhlIHNhbWUgZmFtaWx5IGFzIHRoZSBtdWx0aWNhc3QgYWRkcmVzc2pvaW5NdWx0aWNhc3RpbnRlcmZhY2VBZGRyaW50ZXJmYWNlSW5kZXhuYXRpdmVKb2luTXVsdGljYXN0bGVhdmVNdWx0aWNhc3RuYXRpdmVMZWF2ZU11bHRpY2FzdFNvY2tldF9TZXRTb2NrZXRJZFNvY2tldF9BdmFpbGFibGVTb2NrZXRfUmVhZFNvY2tldF9SZWN2RnJvbVNvY2tldF9Xcml0ZUxpc3RTb2NrZXRfU2VuZFRvU29ja2V0X0NyZWF0ZUNvbm5lY3RTb2NrZXRfQ3JlYXRlQmluZENvbm5lY3Rzb3VyY2VBZGRyU29ja2V0QmFzZV9Jc0JpbmRFcnJvcmVycm9yTnVtYmVyU2VydmVyU29ja2V0X0NyZWF0ZUJpbmRMaXN0ZW5Tb2NrZXRfQ3JlYXRlQmluZERhdGFncmFtU2VydmVyU29ja2V0X0FjY2VwdFNvY2tldF9HZXRQb3J0U29ja2V0X0dldFJlbW90ZVBlZXJuYXRpdmVHZXRTb2NrZXRJZFNvY2tldF9HZXRTb2NrZXRJZFNvY2tldF9HZXRFcnJvclNvY2tldF9HZXRPcHRpb25wcm90b2NvbFNvY2tldF9HZXRSYXdPcHRpb25Tb2NrZXRfU2V0T3B0aW9uU29ja2V0X1NldFJhd09wdGlvblNvY2tldF9Kb2luTXVsdGljYXN0U29ja2V0X0xlYXZlTXVsdGljYXN0X1Jhd1NlcnZlclNvY2tldF9zb2NrZXRfcmVmZXJlbmNlUG9ydF92Nk9ubHlJbnZhbGlkIGJhY2tsb2cgU3RyZWFtIHdhcyBhbHJlYWR5IGxpc3RlbmVkIHRvX29uU3Vic2NyaXB0aW9uU3RhdGVDaGFuZ2Vfb25QYXVzZVN0YXRlQ2hhbmdlX3Jlc3VtZV9SYXdTb2NrZXRfcmVhZEV2ZW50c0VuYWJsZWRfd3JpdGVFdmVudHNFbmFibGVkX2lzTWFjT1NUZXJtaW5hbElucHV0d3JpdGVFdmVudHNFbmFibGVkbmF0aXZlVGFza25hdGl2ZVNvY2tldF93cml0ZVBpcGVfcmVhZFBpcGVmZHNvY2tldFR5cGVyZWFkRXZlbnRzRW5hYmxlZGVuYWJsZWRfU2VydmVyU29ja2V0cmF3U29ja2V0X1NvY2tldFN0cmVhbUNvbnN1bWVyc3RyZWFtQ29tcGxldGVyX2Vuc3VyZVJhd1NvY2tldFN1YnNjcmlwdGlvbl9jb25zdW1lckRvbmVfd3JpdGVfZW5hYmxlV3JpdGVFdmVudF9kaXNhYmxlV3JpdGVFdmVudF9Tb2NrZXRfY29udHJvbGxlckNsb3NlZF9jb25zdW1lcl9kZXRhY2hSZWFkeXNlcENhbm5vdCBzZW5kIGVycm9ycyBvbiBzb2NrZXRzX2Nsb3NlUmF3U29ja2V0X2RldGFjaFJhd19SYXdEYXRhZ3JhbVNvY2tldG11bHRpY2FzdExvb3BiYWNrbXVsdGljYXN0SG9wc211bHRpY2FzdEludGVyZmFjZWJyb2FkY2FzdEVuYWJsZWRfU2VjdXJlU29ja2V0cmVuZWdvdGlhdGV1c2VTZXNzaW9uQ2FjaGVyZXF1ZXN0Q2xpZW50Q2VydGlmaWNhdGVyZXF1aXJlQ2xpZW50Q2VydGlmaWNhdGVwZWVyQ2VydGlmaWNhdGVwZWVyQ2VydGlmaWNhdGUgY2FsbGVkIG9uIGRlc3Ryb3llZCBTZWN1cmVTb2NrZXRzZWxlY3RlZFByb3RvY29sc2VsZWN0ZWRQcm90b2NvbCBjYWxsZWQgb24gZGVzdHJveWVkIFNlY3VyZVNvY2tldF9TZWN1cmVGaWx0ZXJJbXBsRU5DUllQVEVEX1NJWkVidWZmZXJzU2VjdXJlU29ja2V0X0Nvbm5lY3Rob3N0TmFtZWlzX3NlcnZlcnByb3RvY29sc19kZXN0cm95U2VjdXJlU29ja2V0X0Rlc3Ryb3loYW5kc2hha2VTZWN1cmVTb2NrZXRfSGFuZHNoYWtlcmVoYW5kc2hha2Vwcm9jZXNzQnVmZmVyU2VjdXJlU29ja2V0X0dldFNlbGVjdGVkUHJvdG9jb2xTZWN1cmVTb2NrZXRfUmVuZWdvdGlhdGVTZWN1cmVTb2NrZXRfSW5pdFNlY3VyZVNvY2tldF9QZWVyQ2VydGlmaWNhdGVyZWdpc3RlckJhZENlcnRpZmljYXRlQ2FsbGJhY2tTZWN1cmVTb2NrZXRfUmVnaXN0ZXJCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrcmVnaXN0ZXJIYW5kc2hha2VDb21wbGV0ZUNhbGxiYWNrU2VjdXJlU29ja2V0X1JlZ2lzdGVySGFuZHNoYWtlQ29tcGxldGVDYWxsYmFja2hhbmRzaGFrZUNvbXBsZXRlSGFuZGxlcl9wb2ludGVyU2VjdXJlU29ja2V0X0ZpbHRlclBvaW50ZXJfU2VjdXJpdHlDb250ZXh0ZGVmYXVsdENvbnRleHR3aXRoVHJ1c3RlZFJvb3RzX2NyZWF0ZU5hdGl2ZUNvbnRleHRfdHJ1c3RCdWlsdGluUm9vdHNTZWN1cml0eUNvbnRleHRfQWxsb2NhdGV1c2VQcml2YXRlS2V5cGFzc3dvcmR1c2VQcml2YXRlS2V5Qnl0ZXNTZWN1cml0eUNvbnRleHRfVXNlUHJpdmF0ZUtleUJ5dGVza2V5Qnl0ZXNzZXRUcnVzdGVkQ2VydGlmaWNhdGVzc2V0VHJ1c3RlZENlcnRpZmljYXRlc0J5dGVzU2VjdXJpdHlDb250ZXh0X1NldFRydXN0ZWRDZXJ0aWZpY2F0ZXNCeXRlc2NlcnRCeXRlc3VzZUNlcnRpZmljYXRlQ2hhaW51c2VDZXJ0aWZpY2F0ZUNoYWluQnl0ZXNTZWN1cml0eUNvbnRleHRfVXNlQ2VydGlmaWNhdGVDaGFpbkJ5dGVzY2hhaW5CeXRlc3NldENsaWVudEF1dGhvcml0aWVzc2V0Q2xpZW50QXV0aG9yaXRpZXNCeXRlc1NlY3VyaXR5Q29udGV4dF9TZXRDbGllbnRBdXRob3JpdGllc0J5dGVzYXV0aENlcnRCeXRlc3NldEFscG5Qcm90b2NvbHNpc1NlcnZlcmVuY29kZWRQcm90b2NvbHNfc2V0QWxwblByb3RvY29sc1NlY3VyaXR5Q29udGV4dF9TZXRBbHBuUHJvdG9jb2xzU2VjdXJpdHlDb250ZXh0X1RydXN0QnVpbHRpblJvb3RzX1g1MDlDZXJ0aWZpY2F0ZUltcGxfY2FjaGVkRGVyX2NhY2hlZFBlbV9jYWNoZWRTaGExX2Rlclg1MDlfRGVyZGVyX3BlbVg1MDlfUGVtcGVtX3NoYTFYNTA5X1NoYTFzdWJqZWN0WDUwOV9TdWJqZWN0aXNzdWVyWDUwOV9Jc3N1ZXJzdGFydFZhbGlkaXR5X3N0YXJ0VmFsaWRpdHlpc1V0Y2VuZFZhbGlkaXR5X2VuZFZhbGlkaXR5WDUwOV9TdGFydFZhbGlkaXR5WDUwOV9FbmRWYWxpZGl0eV9SYXdTeW5jaHJvbm91c1NvY2tldGNvbm5lY3RTeW5jcmVhZFN5bmNfTmF0aXZlU3luY2hyb25vdXNTb2NrZXROYXRpdmVXcmFwcGVyX05hdGl2ZVN5bmNocm9ub3VzU29ja2V0UGFyYW1ldGVyIGhvc3QgY2Fubm90IGJlIG51bGxfbmF0aXZlQ3JlYXRlQ29ubmVjdFN5bmNfbmF0aXZlQXZhaWxhYmxlX25hdGl2ZUdldFBvcnRfbmF0aXZlR2V0UmVtb3RlUGVlcl9uYXRpdmVDbG9zZVN5bmNfY2hlY2tBdmFpbGFibGVTb2NrZXQgaXMgY2xvc2VkIGZvciByZWFkaW5nSW52YWxpZCBhcmd1bWVudHMgdG8gcmVhZEludG9TeW5jc3RhcnQgY2Fubm90IGJlIG51bGxfbmF0aXZlUmVhZEludG9yZWFkSW50b1N5bmMgZmFpbGVkX25hdGl2ZVJlYWRfbmF0aXZlU2h1dGRvd25SZWFkX25hdGl2ZVNodXRkb3duV3JpdGVTb2NrZXQgaXMgY2xvc2VkIGZvciB3cml0aW5nSW52YWxpZCBhcmd1bWVudHMgdG8gd3JpdGVGcm9tU3luY3N0YXJ0IGNhbm5vdCBiZSBlcXVhbCB0byBudWxsX25hdGl2ZVdyaXRld3JpdGVGcm9tU3luYyBmYWlsZWRfbmF0aXZlTG9va3VwUmVxdWVzdFN5bmNocm9ub3VzU29ja2V0X0xvb2t1cFJlcXVlc3RTeW5jaHJvbm91c1NvY2tldF9DcmVhdGVDb25uZWN0U3luY1N5bmNocm9ub3VzU29ja2V0X0F2YWlsYWJsZVN5bmNocm9ub3VzU29ja2V0X0Nsb3NlU3luY1N5bmNocm9ub3VzU29ja2V0X0dldFBvcnRTeW5jaHJvbm91c1NvY2tldF9HZXRSZW1vdGVQZWVyU3luY2hyb25vdXNTb2NrZXRfUmVhZFN5bmNocm9ub3VzU29ja2V0X1JlYWRMaXN0U3luY2hyb25vdXNTb2NrZXRfU2h1dGRvd25SZWFkU3luY2hyb25vdXNTb2NrZXRfU2h1dGRvd25Xcml0ZVN5bmNocm9ub3VzU29ja2V0X1dyaXRlTGlzdHRvQnl0ZXNfQ29weWluZ0J5dGVzQnVpbGRlcl9pbml0U2l6ZV9lbXB0eUxpc3RfcG93MnJvdW5kdXBfQnl0ZXNCdWlsZGVyX2NodW5rc3R5cGVkQnl0ZXNJT0V4Y2VwdGlvbk9TRXJyb3Jub0Vycm9yQ29kZU9TIEVycm9yLCBlcnJubyA9IDogZXJybm8gPSBfQnVmZmVyQW5kU3RhcnRfSU9DcnlwdG9nZXRSYW5kb21CeXRlc0NyeXB0b19HZXRSYW5kb21CeXRlc1pMaWJPcHRpb25taW5XaW5kb3dCaXRzTUlOX1dJTkRPV19CSVRTVXNlIG1pbldpbmRvd0JpdHMgaW5zdGVhZG1heFdpbmRvd0JpdHNNQVhfV0lORE9XX0JJVFNVc2UgbWF4V2luZG93Qml0cyBpbnN0ZWFkZGVmYXVsdFdpbmRvd0JpdHNERUZBVUxUX1dJTkRPV19CSVRTVXNlIGRlZmF1bHRXaW5kb3dCaXRzIGluc3RlYWRtaW5MZXZlbE1JTl9MRVZFTFVzZSBtaW5MZXZlbCBpbnN0ZWFkbWF4TGV2ZWxNQVhfTEVWRUxVc2UgbWF4TGV2ZWwgaW5zdGVhZGRlZmF1bHRMZXZlbERFRkFVTFRfTEVWRUxVc2UgZGVmYXVsdExldmVsIGluc3RlYWRtaW5NZW1MZXZlbE1JTl9NRU1fTEVWRUxVc2UgbWluTWVtTGV2ZWwgaW5zdGVhZG1heE1lbUxldmVsTUFYX01FTV9MRVZFTFVzZSBtYXhNZW1MZXZlbCBpbnN0ZWFkZGVmYXVsdE1lbUxldmVsREVGQVVMVF9NRU1fTEVWRUxVc2UgZGVmYXVsdE1lbUxldmVsIGluc3RlYWRzdHJhdGVneUZpbHRlcmVkU1RSQVRFR1lfRklMVEVSRURVc2Ugc3RyYXRlZ3lGaWx0ZXJlZCBpbnN0ZWFkc3RyYXRlZ3lIdWZmbWFuT25seVNUUkFURUdZX0hVRkZNQU5fT05MWVVzZSBzdHJhdGVneUh1ZmZtYW5Pbmx5IGluc3RlYWRzdHJhdGVneVJsZVNUUkFURUdZX1JMRVVzZSBzdHJhdGVneVJsZSBpbnN0ZWFkc3RyYXRlZ3lGaXhlZFNUUkFURUdZX0ZJWEVEVXNlIHN0cmF0ZWd5Rml4ZWQgaW5zdGVhZHN0cmF0ZWd5RGVmYXVsdFNUUkFURUdZX0RFRkFVTFRVc2Ugc3RyYXRlZ3lEZWZhdWx0IGluc3RlYWRaTGliQ29kZWNfZGVmYXVsdFpMaWJFbmNvZGVyWkxpYkRlY29kZXJSYXdaTGliRmlsdGVyZGVmbGF0ZUZpbHRlcmluZmxhdGVGaWx0ZXJfbWFrZVpMaWJEZWZsYXRlRmlsdGVyX21ha2VaTGliSW5mbGF0ZUZpbHRlcl9CdWZmZXJTaW5rX1pMaWJFbmNvZGVyU2lua19aTGliRGVjb2RlclNpbmtfRmlsdGVyU2lua292ZXJyaWRlc2Zyb21SYXdQYXRoZ2V0Q3VycmVudERpcmVjdG9yeXNldEN1cnJlbnREaXJlY3RvcnlzeXN0ZW1UZW1wZ2V0U3lzdGVtVGVtcERpcmVjdG9yeXJlc29sdmVTeW1ib2xpY0xpbmtzcmVzb2x2ZVN5bWJvbGljTGlua3NTeW5jcmVuYW1lbmV3UGF0aHJlbmFtZVN5bmNhYnNvbHV0ZWZvbGxvd0xpbmtzX0RpcmVjdG9yeV9yYXdQYXRocmF3UGF0aHJhd1BhdGggY2Fubm90IGJlIG51bGxEaXJlY3RvcnlfQ3VycmVudF9zZXRDdXJyZW50RGlyZWN0b3J5X1NldEN1cnJlbnRfY3JlYXRlVGVtcERpcmVjdG9yeV9DcmVhdGVUZW1wX3N5c3RlbVRlbXBEaXJlY3RvcnlfU3lzdGVtVGVtcF9leGlzdHNEaXJlY3RvcnlfRXhpc3RzRGlyZWN0b3J5X0NyZWF0ZV9kZWxldGVOYXRpdmVEaXJlY3RvcnlfRGVsZXRlX3JlbmFtZURpcmVjdG9yeV9SZW5hbWVfZmlsbFdpdGhEaXJlY3RvcnlMaXN0aW5nRGlyZWN0b3J5X0ZpbGxXaXRoRGlyZWN0b3J5TGlzdGluZ0dldHRpbmcgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBmYWlsZWQgaXMgbm90IGEgU3RyaW5nIG9yIERpcmVjdG9yeVRoaXMgZW1iZWRkZXIgZGlzYWxsb3dzIHNldHRpbmcgRGlyZWN0b3J5LmN1cnJlbnRTZXR0aW5nIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkgZmFpbGVkX2lzRXJyb3JSZXNwb25zZV9leGNlcHRpb25PckVycm9yRnJvbVJlc3BvbnNlRXhpc3RzIGZhaWxlZF9hYnNvbHV0ZVBhdGhDcmVhdGlvbiBmYWlsZWREaXJlY3RvcnkuY3JlYXRlVGVtcCBjYWxsZWQgd2l0aCBhbiBlbXB0eSBwYXRoLiBUbyB1c2UgdGhlIHN5c3RlbSB0ZW1wIGRpcmVjdG9yeSwgdXNlIERpcmVjdG9yeS5zeXN0ZW1UZW1wZnVsbFByZWZpeENyZWF0aW9uIG9mIHRlbXBvcmFyeSBkaXJlY3RvcnkgZmFpbGVkX2RlbGV0ZURlbGV0aW9uIGZhaWxlZF9kZWxldGVTeW5jUmVuYW1lIGZhaWxlZERpcmVjdG9yeTogJ2Vycl9Bc3luY0RpcmVjdG9yeUxpc3Rlck9wc19Bc3luY0RpcmVjdG9yeUxpc3Rlcmxpc3RGaWxlbGlzdERpcmVjdG9yeWxpc3RMaW5rbGlzdEVycm9ybGlzdERvbmVyZXNwb25zZVR5cGVyZXNwb25zZVBhdGhyZXNwb25zZUNvbXBsZXRlcmVzcG9uc2VFcnJvcmNhbmNlbGVkbmV4dFJ1bm5pbmdfb3BzX2NsZWFudXBlcnJvclR5cGVyZXNwb25zZUVycm9ySW5mb2Vycm9yUGF0aERpcmVjdG9yeSBsaXN0aW5nIGZhaWxlZF9FbWJlZGRlckNvbmZpZ19tYXlDaGRpcl9tYXlFeGl0X21heVNldEVjaG9Nb2RlX21heVNldExpbmVNb2RlX21heVNsZWVwX0V2ZW50SGFuZGxlcl90aW1lck1pbGxpc2Vjb25kQ2xvY2tFdmVudEhhbmRsZXJfVGltZXJNaWxsaXNlY29uZENsb2NrRXZlbnRIYW5kbGVyX1NlbmREYXRhc2VuZGVyUkVBRFVzZSByZWFkIGluc3RlYWRXUklURVVzZSB3cml0ZSBpbnN0ZWFkQVBQRU5EVXNlIGFwcGVuZCBpbnN0ZWFkd3JpdGVPbmx5V1JJVEVfT05MWVVzZSB3cml0ZU9ubHkgaW5zdGVhZHdyaXRlT25seUFwcGVuZFdSSVRFX09OTFlfQVBQRU5EVXNlIHdyaXRlT25seUFwcGVuZCBpbnN0ZWFkRmlsZUxvY2tTSEFSRURVc2Ugc2hhcmVkIGluc3RlYWRleGNsdXNpdmVFWENMVVNJVkVVc2UgZXhjbHVzaXZlIGluc3RlYWRibG9ja2luZ1NoYXJlZEJMT0NLSU5HX1NIQVJFRFVzZSBibG9ja2luZ1NoYXJlZCBpbnN0ZWFkYmxvY2tpbmdFeGNsdXNpdmVCTE9DS0lOR19FWENMVVNJVkVVc2UgYmxvY2tpbmdFeGNsdXNpdmUgaW5zdGVhZGNyZWF0ZUZpbGVjb3B5U3luY2xhc3RBY2Nlc3NlZGxhc3RBY2Nlc3NlZFN5bmNzZXRMYXN0QWNjZXNzZWRzZXRMYXN0QWNjZXNzZWRTeW5jbGFzdE1vZGlmaWVkbGFzdE1vZGlmaWVkU3luY3NldExhc3RNb2RpZmllZHNldExhc3RNb2RpZmllZFN5bmNvcGVuUmVhZHJlYWRBc0xpbmVzcmVhZEFzTGluZXNTeW5jd3JpdGVBc1N0cmluZ1JhbmRvbUFjY2Vzc0ZpbGVyZWFkQnl0ZVN5bmN3cml0ZUJ5dGVTeW5jcG9zaXRpb25TeW5jc2V0UG9zaXRpb25TeW5jdHJ1bmNhdGVTeW5jZmx1c2hTeW5jbG9ja1N5bmN1bmxvY2t1bmxvY2tTeW5jLCBwYXRoID0gJ19GaWxlU3RyZWFtX29wZW5lZEZpbGVfY2xvc2VDb21wbGV0ZXJfdW5zdWJzY3JpYmVkX3JlYWRJblByb2dyZXNzX2F0RW5kZm9yU3RkaW5fc2V0dXBDb250cm9sbGVyX3JlYWRCbG9ja19jbG9zZUZpbGVCYWQgZW5kIHBvc2l0aW9uOiBCYWQgc3RhcnQgcG9zaXRpb246IG9uUmVhZHlvbk9wZW5GaWxlb3BlbkZhaWxlZF9GaWxlU3RyZWFtQ29uc3VtZXJfZmlsZV9vcGVuRnV0dXJlZnJvbVN0ZGlvb3BlbmVkRmlsZV9GaWxlX2Rpc3BhdGNoV2l0aE5hbWVzcGFjZUNhbm5vdCBjaGVjayBleGlzdGVuY2VGaWxlX0V4aXN0c0Nhbm5vdCBjaGVjayBleGlzdGVuY2Ugb2YgZmlsZUNhbm5vdCBjcmVhdGUgZmlsZUZpbGVfQ3JlYXRlX2NyZWF0ZUxpbmtGaWxlX0NyZWF0ZUxpbmtfbGlua1RhcmdldEZpbGVfTGlua1RhcmdldENhbm5vdCBkZWxldGUgZmlsZUZpbGVfRGVsZXRlX2RlbGV0ZUxpbmtOYXRpdmVGaWxlX0RlbGV0ZUxpbmtDYW5ub3QgcmVuYW1lIGZpbGUgdG8gJ0ZpbGVfUmVuYW1lb2xkUGF0aF9yZW5hbWVMaW5rRmlsZV9SZW5hbWVMaW5rQ2Fubm90IGNvcHkgZmlsZSB0byAnX2NvcHlGaWxlX0NvcHlJbnZhbGlkIGZpbGUgbW9kZSBmb3IgdGhpcyBvcGVyYXRpb25DYW5ub3Qgb3BlbiBmaWxlQ2Fubm90IHJldHJpZXZlIGxlbmd0aCBvZiBmaWxlX2xlbmd0aEZyb21QYXRoRmlsZV9MZW5ndGhGcm9tUGF0aENhbm5vdCByZXRyaWV2ZSBhY2Nlc3MgdGltZV9sYXN0QWNjZXNzZWRGaWxlX0xhc3RBY2Nlc3NlZG1pbGxpc0Nhbm5vdCBzZXQgYWNjZXNzIHRpbWVfc2V0TGFzdEFjY2Vzc2VkRmlsZV9TZXRMYXN0QWNjZXNzZWRGYWlsZWQgdG8gc2V0IGZpbGUgYWNjZXNzIHRpbWVDYW5ub3QgcmV0cmlldmUgbW9kaWZpY2F0aW9uIHRpbWVfbGFzdE1vZGlmaWVkRmlsZV9MYXN0TW9kaWZpZWRDYW5ub3Qgc2V0IG1vZGlmaWNhdGlvbiB0aW1lX3NldExhc3RNb2RpZmllZEZpbGVfU2V0TGFzdE1vZGlmaWVkRmFpbGVkIHRvIHNldCBmaWxlIG1vZGlmaWNhdGlvbiB0aW1lRmlsZV9PcGVuX29wZW5TdGRpb0ZpbGVfT3BlblN0ZGlvX29wZW5TdGRpb1N5bmNDYW5ub3Qgb3BlbiBzdGRpbyBmaWxlIGZvcjogY29uc3VtZXJyZWFkRGF0YUNodW5rZWRfdHJ5RGVjb2RlRmFpbGVkIHRvIGRlY29kZSBkYXRhIHVzaW5nIGVuY29kaW5nICdGaWxlOiAndGhyb3dJZkVycm9yX1JhbmRvbUFjY2Vzc0ZpbGVPcHNfUmFuZG9tQWNjZXNzRmlsZV9jb25uZWN0ZWRSZXNvdXJjZUhhbmRsZXJfYXN5bmNEaXNwYXRjaGVkX2ZpbGVTZXJ2aWNlbG9ja1VubG9ja19tYXliZUNvbm5lY3RIYW5kbGVyX21heWJlUGVyZm9ybUNsZWFudXBleHQuZGFydC5pby5nZXRPcGVuRmlsZXNleHQuZGFydC5pby5nZXRGaWxlQnlJRF9kaXNwYXRjaG1hcmtDbG9zZWRDYW5ub3QgY2xvc2UgZmlsZXJlYWRCeXRlIGZhaWxlZHJlYWQgZmFpbGVkcmVhZFN5bmMgZmFpbGVkcmVhZEludG8gZmFpbGVkd3JpdGVCeXRlIGZhaWxlZEludmFsaWQgYXJndW1lbnRzIHRvIHdyaXRlRnJvbXdyaXRlRnJvbSBmYWlsZWRwb3NpdGlvbiBmYWlsZWRzZXRQb3NpdGlvbiBmYWlsZWR0cnVuY2F0ZSBmYWlsZWRsZW5ndGggZmFpbGVkZmx1c2ggZmFpbGVkX2ZpbGVMb2NrVmFsdWVmbGxvY2sgZmFpbGVkdW5sb2NrIGZhaWxlZEZpbGUgY2xvc2VkQW4gYXN5bmMgb3BlcmF0aW9uIGlzIGN1cnJlbnRseSBwZW5kaW5nRmlsZVN5c3RlbUVudGl0eVR5cGVGSUxFVXNlIGZpbGUgaW5zdGVhZGRpcmVjdG9yeURJUkVDVE9SWVVzZSBkaXJlY3RvcnkgaW5zdGVhZExJTktVc2UgbGluayBpbnN0ZWFkX3R5cGVMaXN0X2xvb2t1cEZpbGVTdGF0X2NoYW5nZWRUaW1lX21vZGlmaWVkVGltZV9hY2Nlc3NlZFRpbWVfbm90Rm91bmRhY2Nlc3NlZF9pbnRlcm5hbE5vdEZvdW5kX3N0YXRTeW5jRmlsZV9TdGF0c3RhdFN5bmNfc3RhdFN5bmNJbnRlcm5hbF9zdGF0RmlsZVN0YXQ6IHR5cGUgCiAgICAgICAgICBjaGFuZ2VkIAogICAgICAgICAgbW9kaWZpZWQgCiAgICAgICAgICBhY2Nlc3NlZCAKICAgICAgICAgIG1vZGUgbW9kZVN0cmluZwogICAgICAgICAgc2l6ZSBwZXJtaXNzaW9ucy0teC13LS13eHItLXIteHJ3LXJ3eChzdWlkKSAoZ3VpZCkgKHN0aWNreSkgX2Fic29sdXRlV2luZG93c1BhdGhQYXR0ZXJuXihcXFxcfFthLXpBLVpdOlsvXFxdKV9wYXJlbnRSZWdFeHBbXi9cXF1bL1xcXStbXi9cXF1bXi9dLytbXi9dQ2Fubm90IHJlc29sdmUgc3ltYm9saWMgbGlua3N0cmltbWVkUGF0aGZzV2F0Y2hfaWRlbnRpY2FscGF0aDFwYXRoMkVycm9yIGluIEZpbGVTeXN0ZW1FbnRpdHkuaWRlbnRpY2FsKGZzZUlkZW50aWNhbF9yYXdBYnNvbHV0ZVBhdGhfaWRlbnRpY2FsU3luY0Vycm9yIGluIEZpbGVTeXN0ZW1FbnRpdHkuaWRlbnRpY2FsU3luY2lkZW50aWNhbFN5bmNmc2VJZGVudGljYWxTeW5jaXNXYXRjaFN1cHBvcnRlZGZzV2F0Y2hJc1N1cHBvcnRlZF90b1V0ZjhBcnJheV90b051bGxUZXJtaW5hdGVkVXRmOEFycmF5X3RvU3RyaW5nRnJvbVV0ZjhBcnJheW5vbk51bGxUZXJtaW5hdGVkdHlwZVN5bmNpc0xpbmtfaXNMaW5rUmF3aXNGaWxlaXNMaW5rU3luY19pc0xpbmtSYXdTeW5jaXNGaWxlU3luY2lzRGlyZWN0b3J5U3luY19nZXRUeXBlTmF0aXZlRmlsZV9HZXRUeXBlX2lkZW50aWNhbE5hdGl2ZUZpbGVfQXJlSWRlbnRpY2FsX3Jlc29sdmVTeW1ib2xpY0xpbmtzRmlsZV9SZXNvbHZlU3ltYm9saWNMaW5rc3BhcmVudE9mcm9vdEVuZFsvXFxdX2dldFR5cGVTeW5jSGVscGVyRXJyb3IgZ2V0dGluZyB0eXBlIG9mIEZpbGVTeXN0ZW1FbnRpdHlfZ2V0VHlwZVN5bmNmc2VHZXRUeXBlU3luY19nZXRUeXBlUmVxdWVzdEVycm9yIGdldHRpbmcgdHlwZV9nZXRUeXBlZnNlR2V0VHlwZV90aHJvd0lmRXJyb3JfdHJpbVRyYWlsaW5nUGF0aFNlcGFyYXRvcnNfZW5zdXJlVHJhaWxpbmdQYXRoU2VwYXJhdG9yc0ZpbGVTeXN0ZW1FdmVudENSRUFURVVzZSBjcmVhdGUgaW5zdGVhZG1vZGlmeU1PRElGWVVzZSBtb2RpZnkgaW5zdGVhZERFTEVURVVzZSBkZWxldGUgaW5zdGVhZG1vdmVNT1ZFVXNlIG1vdmUgaW5zdGVhZFVzZSBhbGwgaW5zdGVhZF9tb2RpZnlBdHRyaWJ1dGVzX2RlbGV0ZVNlbGZfaXNEaXJGaWxlU3lzdGVtQ3JlYXRlRXZlbnRGaWxlU3lzdGVtQ3JlYXRlRXZlbnQoJ0ZpbGVTeXN0ZW1Nb2RpZnlFdmVudGNvbnRlbnRDaGFuZ2VkRmlsZVN5c3RlbU1vZGlmeUV2ZW50KCcnLCBjb250ZW50Q2hhbmdlZD1GaWxlU3lzdGVtRGVsZXRlRXZlbnRGaWxlU3lzdGVtRGVsZXRlRXZlbnQoJ0ZpbGVTeXN0ZW1Nb3ZlRXZlbnRGaWxlU3lzdGVtTW92ZUV2ZW50KCcsICdfRmlsZVN5c3RlbVdhdGNoZXJfcmVjdXJzaXZlX2Jyb2FkY2FzdENvbnRyb2xsZXJGaWxlIHN5c3RlbSB3YXRjaGluZyBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm1GYWlsZWQgdG8gaW5pdGlhbGl6ZSBmaWxlIHN5c3RlbSBlbnRpdHkgd2F0Y2hlckZhaWxlZCB0byB3YXRjaCBwYXRoX2RvbmVQYXRoV2F0Y2hlZF9wYXRoRnJvbVBhdGhJZF9saXN0ZW5PblNvY2tldHN0b3BzZ2V0UGF0aGdldElzRGlycmV3cml0ZU1vdmVpc0Rpcl9pbml0V2F0Y2hlckZpbGVTeXN0ZW1XYXRjaGVyX0luaXRXYXRjaGVyX2Nsb3NlV2F0Y2hlckZpbGVTeXN0ZW1XYXRjaGVyX0Nsb3NlV2F0Y2hlcl93YXRjaFBhdGhGaWxlU3lzdGVtV2F0Y2hlcl9XYXRjaFBhdGhfdW53YXRjaFBhdGhGaWxlU3lzdGVtV2F0Y2hlcl9VbndhdGNoUGF0aHBhdGhfaWRfcmVhZEV2ZW50c0ZpbGVTeXN0ZW1XYXRjaGVyX1JlYWRFdmVudHNfZ2V0U29ja2V0SWRGaWxlU3lzdGVtV2F0Y2hlcl9HZXRTb2NrZXRJZEZpbGVTeXN0ZW1XYXRjaGVyX0lzU3VwcG9ydGVkX0lPUmVzb3VyY2VJbmZvX3N3X3N0YXJ0VGltZWVsYXBzZWRNaWNyb3NlY29uZHNmdWxsVmFsdWVNYXByZWZlcmVuY2VWYWx1ZU1hcGdldE5leHRJRF9SZWFkV3JpdGVSZXNvdXJjZUluZm90b3RhbFdyaXR0ZW5yZWFkQ291bnR3cml0ZUNvdW50bGFzdFJlYWRsYXN0V3JpdGVfRmlsZVJlc291cmNlSW5mb29wZW5GaWxlc0ZpbGVPcGVuZWRGaWxlQ2xvc2VkZ2V0T3BlbkZpbGVzTGlzdGdldE9wZW5GaWxlc19vcGVuZmlsZXNqc29uVmFsdWVnZXRGaWxlSW5mb01hcGdldEZpbGVJbmZvTWFwQnlJRF9Qcm9jZXNzUmVzb3VyY2VJbmZvc3RhcnRlZEF0c3RhcnRlZFByb2Nlc3Nlc1Byb2Nlc3NTdGFydGVkUHJvY2Vzc1N0b3BwZWRnZXRTdGFydGVkUHJvY2Vzc2VzTGlzdGdldFN0YXJ0ZWRQcm9jZXNzZXNfc3RhcnRlZHByb2Nlc3Nlc2dldFByb2Nlc3NJbmZvTWFwQnlJZF9Tb2NrZXRSZXNvdXJjZUluZm9fdGNwU3RyaW5nVENQX3VkcFN0cmluZ1VEUG9wZW5Tb2NrZXRzbGlzdGVuaW5nOnJlbW90ZXJlbW90ZUhvc3RnZXRPcGVuU29ja2V0c0xpc3RnZXRTb2NrZXRJbmZvTWFwbGlzdGVuaW5nTkFhZGRyZXNzVHlwZWdldFNvY2tldEluZm9NYXBCeUlEZ2V0T3BlblNvY2tldHNfb3BlbnNvY2tldHNTb2NrZXRPcGVuZWRTb2NrZXRDbG9zZWRfU3RyZWFtU2lua0ltcGxfZG9uZUNvbXBsZXRlcl9jb250cm9sbGVySW5zdGFuY2VfY29udHJvbGxlckNvbXBsZXRlcl9pc0JvdW5kU3RyZWFtU2luayBpcyBjbG9zZWRTdHJlYW1TaW5rIGlzIGFscmVhZHkgYm91bmQgdG8gYSBzdHJlYW1TdHJlYW1TaW5rIGlzIGJvdW5kIHRvIGEgc3RyZWFtX2Nsb3NlVGFyZ2V0X2NvbXBsZXRlRG9uZVZhbHVlX2NvbXBsZXRlRG9uZUVycm9yX0lPU2lua0ltcGxfZW5jb2RpbmdfZW5jb2RpbmdNdXRhYmxlSU9TaW5rIGVuY29kaW5nIGlzIG5vdCBtdXRhYmxlX0lPU2VydmljZV9zZXJ2aWNlUG9ydHNfcmVwbHlUb1BvcnRfbWVzc2FnZU1hcGZpbGVFeGlzdHNmaWxlQ3JlYXRlZmlsZURlbGV0ZWZpbGVSZW5hbWVmaWxlQ29weWZpbGVPcGVuZmlsZVJlc29sdmVTeW1ib2xpY0xpbmtzZmlsZUNsb3NlZmlsZVBvc2l0aW9uZmlsZVNldFBvc2l0aW9uZmlsZVRydW5jYXRlZmlsZUxlbmd0aEZyb21QYXRoZmlsZUxhc3RBY2Nlc3NlZGZpbGVTZXRMYXN0QWNjZXNzZWRmaWxlTGFzdE1vZGlmaWVkZmlsZVNldExhc3RNb2RpZmllZGZpbGVGbHVzaGZpbGVSZWFkQnl0ZWZpbGVXcml0ZUJ5dGVmaWxlUmVhZGZpbGVSZWFkSW50b2ZpbGVXcml0ZUZyb21maWxlQ3JlYXRlTGlua2ZpbGVEZWxldGVMaW5rZmlsZVJlbmFtZUxpbmtmaWxlTGlua1RhcmdldGZpbGVUeXBlZmlsZUlkZW50aWNhbGZpbGVTdGF0ZmlsZUxvY2tzb2NrZXRMb29rdXBzb2NrZXRMaXN0SW50ZXJmYWNlc3NvY2tldFJldmVyc2VMb29rdXBkaXJlY3RvcnlDcmVhdGVkaXJlY3RvcnlEZWxldGVkaXJlY3RvcnlFeGlzdHNkaXJlY3RvcnlDcmVhdGVUZW1wZGlyZWN0b3J5TGlzdFN0YXJ0ZGlyZWN0b3J5TGlzdE5leHRkaXJlY3RvcnlMaXN0U3RvcGRpcmVjdG9yeVJlbmFtZXNzbFByb2Nlc3NGaWx0ZXJfZW5zdXJlSW5pdGlhbGl6ZV9maW5hbGl6ZV9nZXROZXh0SWRzZXJ2aWNlUG9ydGNyZWF0ZUxpbmt1cGRhdGVTeW5jdGFyZ2V0U3luY19MaW5rTGluazogJ19leGNlcHRpb25Gcm9tUmVzcG9uc2VDYW5ub3QgY3JlYXRlIGxpbmsgdG8gdGFyZ2V0ICdDYW5ub3QgY3JlYXRlIGxpbmtDYW5ub3QgZGVsZXRlIGxpbmtDYW5ub3QgcmVuYW1lIGxpbmsgdG8gJ0Nhbm5vdCByZW5hbWUgbGluayAnQ2Fubm90IGdldCB0YXJnZXQgb2YgbGlua0Nhbm5vdCByZWFkIGxpbmtfTmFtZXNwYWNlSU9PdmVycmlkZXNfZ2xvYmFsc29ja2V0Q29ubmVjdHNvY2tldFN0YXJ0Q29ubmVjdHJ1bldpdGhJT092ZXJyaWRlc19JT092ZXJyaWRlc1Njb3BlX2NyZWF0ZURpcmVjdG9yeV9nZXRDdXJyZW50RGlyZWN0b3J5X3NldEN1cnJlbnREaXJlY3RvcnlfZ2V0U3lzdGVtVGVtcERpcmVjdG9yeV9jcmVhdGVGaWxlX2ZzZUlkZW50aWNhbF9mc2VJZGVudGljYWxTeW5jX2ZzZUdldFR5cGVfZnNlR2V0VHlwZVN5bmNfZnNXYXRjaF9mc1dhdGNoSXNTdXBwb3J0ZWRfc29ja2V0Q29ubmVjdF9zb2NrZXRTdGFydENvbm5lY3RfbnVtYmVyT2ZQcm9jZXNzb3JzX3BhdGhTZXBhcmF0b3Jfb3BlcmF0aW5nU3lzdGVtX29wZXJhdGluZ1N5c3RlbVZlcnNpb25fbG9jYWxIb3N0bmFtZV92ZXJzaW9uaXNMaW51eGxpbnV4aXNNYWNPU21hY29zaXNBbmRyb2lkYW5kcm9pZGlzSU9TaW9zaXNGdWNoc2lhZnVjaHNpYW51bWJlck9mUHJvY2Vzc29yc2xvY2FsZU5hbWVvcGVyYXRpbmdTeXN0ZW1vcGVyYXRpbmdTeXN0ZW1WZXJzaW9ubG9jYWxIb3N0bmFtZXJlc29sdmVkRXhlY3V0YWJsZWV4ZWN1dGFibGVBcmd1bWVudHNwYWNrYWdlcy8gZGlyZWN0b3J5IHJlc29sdXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBEYXJ0IDJfUGxhdGZvcm1fbG9jYWxlQ2xvc3VyZV9lbnZpcm9ubWVudENhY2hlX2NhY2hlZE9TVmVyc2lvbl9uYXRpdmVTY3JpcHRkYXRhOlBsYXRmb3JtX051bWJlck9mUHJvY2Vzc29yc1BsYXRmb3JtX1BhdGhTZXBhcmF0b3JQbGF0Zm9ybV9PcGVyYXRpbmdTeXN0ZW1QbGF0Zm9ybV9PcGVyYXRpbmdTeXN0ZW1WZXJzaW9uUGxhdGZvcm1fTG9jYWxIb3N0bmFtZV9leGVjdXRhYmxlUGxhdGZvcm1fRXhlY3V0YWJsZU5hbWVfcmVzb2x2ZWRFeGVjdXRhYmxlUGxhdGZvcm1fUmVzb2x2ZWRFeGVjdXRhYmxlTmFtZVBsYXRmb3JtX0Vudmlyb25tZW50X2V4ZWN1dGFibGVBcmd1bWVudHNQbGF0Zm9ybV9FeGVjdXRhYmxlQXJndW1lbnRzUGxhdGZvcm1fR2V0VmVyc2lvbl9sb2NhbGVOYW1lUGxhdGZvcm1fTG9jYWxlTmFtZV9zY3JpcHRlcXVhbHNJbmRleF9DYXNlSW5zZW5zaXRpdmVTdHJpbmdNYXBfUHJvY2Vzc1V0aWxzX2tpbGxQaWRQcm9jZXNzX0tpbGxQaWRfd2F0Y2hTaWduYWxJbnRlcm5hbFByb2Nlc3NfRXhpdF9zZXRFeGl0Q29kZVByb2Nlc3NfU2V0RXhpdENvZGVfZ2V0RXhpdENvZGVQcm9jZXNzX0dldEV4aXRDb2RlX3NsZWVwUHJvY2Vzc19TbGVlcF9waWRQcm9jZXNzX1BpZF93YXRjaFNpZ25hbFNJR0hVUFNJR0lOVFNJR1VTUjFTSUdVU1IyU0lHV0lOQ0hMaXN0ZW5pbmcgZm9yIHNpZ25hbCAgaXMgbm90IHN1cHBvcnRlZFByb2Nlc3NJbmZvX21heFJzc1Byb2Nlc3NJbmZvX01heFJTU19jdXJyZW50UnNzUHJvY2Vzc0luZm9fQ3VycmVudFJTU2N1cnJlbnRSc3NtYXhSc3NQcm9jZXNzU3RhcnRNb2RlVXNlIG5vcm1hbCBpbnN0ZWFkaW5oZXJpdFN0ZGlvSU5IRVJJVF9TVERJT1VzZSBpbmhlcml0U3RkaW8gaW5zdGVhZGRldGFjaGVkREVUQUNIRURVc2UgZGV0YWNoZWQgaW5zdGVhZGRldGFjaGVkV2l0aFN0ZGlvREVUQUNIRURfV0lUSF9TVERJT1VzZSBkZXRhY2hlZFdpdGhTdGRpbyBpbnN0ZWFkcnVuU3luY2tpbGxQaWRQcm9jZXNzU2lnbmFsc2lnaHVwc2lnaW50c2lncXVpdHNpZ2lsbFNJR0lMTHNpZ3RyYXBTSUdUUkFQc2lnYWJydFNJR0FCUlRzaWdidXNTSUdCVVNzaWdmcGVTSUdGUEVzaWdraWxsU0lHS0lMTHNpZ3VzcjFzaWdzZWd2U0lHU0VHVnNpZ3VzcjJzaWdwaXBlU0lHUElQRXNpZ2Fscm1TSUdBTFJNc2lndGVybXNpZ2NobGRTSUdDSExEc2lnY29udFNJR0NPTlRzaWdzdG9wU0lHU1RPUHNpZ3RzdHBTSUdUU1RQc2lndHRpblNJR1RUSU5zaWd0dG91U0lHVFRPVXNpZ3VyZ1NJR1VSR3NpZ3hjcHVTSUdYQ1BVc2lneGZzelNJR1hGU1pzaWd2dGFscm1TSUdWVEFMUk1zaWdwcm9mU0lHUFJPRnNpZ3dpbmNoc2lncG9sbFNJR1BPTExzaWdzeXNTSUdTWVNVc2Ugc2lnaHVwIGluc3RlYWRVc2Ugc2lnaW50IGluc3RlYWRVc2Ugc2lncXVpdCBpbnN0ZWFkVXNlIHNpZ2lsbCBpbnN0ZWFkVXNlIHNpZ3RyYXAgaW5zdGVhZFVzZSBzaWdhYnJ0IGluc3RlYWRVc2Ugc2lnYnVzIGluc3RlYWRVc2Ugc2lnZnBlIGluc3RlYWRVc2Ugc2lna2lsbCBpbnN0ZWFkVXNlIHNpZ3VzcjEgaW5zdGVhZFVzZSBzaWdzZWd2IGluc3RlYWRVc2Ugc2lndXNyMiBpbnN0ZWFkVXNlIHNpZ3BpcGUgaW5zdGVhZFVzZSBzaWdhbHJtIGluc3RlYWRVc2Ugc2lndGVybSBpbnN0ZWFkVXNlIHNpZ2NobGQgaW5zdGVhZFVzZSBzaWdjb250IGluc3RlYWRVc2Ugc2lnc3RvcCBpbnN0ZWFkVXNlIHNpZ3RzdHAgaW5zdGVhZFVzZSBzaWd0dGluIGluc3RlYWRVc2Ugc2lndHRvdSBpbnN0ZWFkVXNlIHNpZ3VyZyBpbnN0ZWFkVXNlIHNpZ3hjcHUgaW5zdGVhZFVzZSBzaWd4ZnN6IGluc3RlYWRVc2Ugc2lndnRhbHJtIGluc3RlYWRVc2Ugc2lncHJvZiBpbnN0ZWFkVXNlIHNpZ3dpbmNoIGluc3RlYWRVc2Ugc2lncG9sbCBpbnN0ZWFkVXNlIHNpZ3N5cyBpbnN0ZWFkU2lnbmFsRXhjZXB0aW9uLCBvc0Vycm9yOiBTaWduYWxFeGNlcHRpb246IFByb2Nlc3NFeGNlcHRpb25PUyBlcnJvciBjb2RlOiBQcm9jZXNzRXhjZXB0aW9uOiAKICBDb21tYW5kOiBTZWN1cmVTZXJ2ZXJTb2NrZXRzdXBwb3J0ZWRQcm90b2NvbHNzZXJ2ZXJTb2NrZXRSYXdTZWN1cmVTZXJ2ZXJTb2NrZXRfY29udGV4dGNvbm5lY3Rpb25zZWN1cmVDb25uZWN0aW9uU2VjdXJlU29ja2V0b25CYWRDZXJ0aWZpY2F0ZXJhd1N0YXRlZGV0YWNoZWRSYXdzZWN1cmVTZXJ2ZXJidWZmZXJlZERhdGFSYXdTZWN1cmVTb2NrZXRYNTA5Q2VydGlmaWNhdGVfRmlsdGVyU3RhdHVzcmVhZEVtcHR5d3JpdGVFbXB0eXJlYWRQbGFpbnRleHROb0xvbmdlckVtcHR5d3JpdGVQbGFpbnRleHROb0xvbmdlckZ1bGxyZWFkRW5jcnlwdGVkTm9Mb25nZXJGdWxsd3JpdGVFbmNyeXB0ZWROb0xvbmdlckVtcHR5X1Jhd1NlY3VyZVNvY2tldGhhbmRzaGFrZVN0YXR1c2Nvbm5lY3RlZFN0YXR1c2Nsb3NlZFN0YXR1c3JlYWRQbGFpbnRleHRJZHdyaXRlUGxhaW50ZXh0SWRyZWFkRW5jcnlwdGVkSWR3cml0ZUVuY3J5cHRlZElkYnVmZmVyQ291bnRfaGFuZHNoYWtlQ29tcGxldGVfc29ja2V0U3Vic2NyaXB0aW9uX2J1ZmZlcmVkRGF0YV9idWZmZXJlZERhdGFJbmRleF9zdGF0dXNfcGF1c2VDb3VudF9wZW5kaW5nUmVhZEV2ZW50X3NvY2tldENsb3NlZFJlYWRfc29ja2V0Q2xvc2VkV3JpdGVfY2xvc2VkUmVhZF9jbG9zZWRXcml0ZV9maWx0ZXJTdGF0dXNfY29ubmVjdFBlbmRpbmdfZmlsdGVyUGVuZGluZ19maWx0ZXJBY3RpdmVfc2VjdXJlRmlsdGVyX3NlbGVjdGVkUHJvdG9jb2xyZXF1ZXN0ZWRQb3J0X3NlY3VyZUhhbmRzaGFrZUNvbXBsZXRlSGFuZGxlcl9vbkJhZENlcnRpZmljYXRlV3JhcHBlcl9ldmVudERpc3BhdGNoZXJfZG9uZUhhbmRsZXJTdWJzY3JpcHRpb24gcGFzc2VkIHRvIFRMUyB1cGdyYWRlIGlzIHBhdXNlZF9zZWN1cmVIYW5kc2hha2VfaXNCdWZmZXJFbmNyeXB0ZWRfc2VuZFdyaXRlRXZlbnRfdmVyaWZ5RmllbGRzaG9zdCBpcyBub3QgYSBTdHJpbmcgb3IgYW4gSW50ZXJuZXRBZGRyZXNzcmVxdWVzdGVkUG9ydCBpcyBub3QgaW4gdGhlIHJhbmdlIDAuLjY1NTM1X2NvbXBsZXRlQ2xvc2VDb21wbGV0ZXJfc2NoZWR1bGVSZWFkRXZlbnRJbnZhbGlkIGxlbmd0aCBwYXJhbWV0ZXIgaW4gU2VjdXJlU29ja2V0LnJlYWQgKGxlbmd0aDogUmVhZGluZyBmcm9tIGEgY2xvc2VkIHNvY2tldF9zY2hlZHVsZUZpbHRlckludmFsaWQgYnl0ZXMgcGFyYW1ldGVyIGluIFNlY3VyZVNvY2tldC5yZWFkIChieXRlczogSW52YWxpZCBvZmZzZXQgcGFyYW1ldGVyIGluIFNlY3VyZVNvY2tldC5yZWFkIChvZmZzZXQ6IFdyaXRpbmcgdG8gYSBjbG9zZWQgc29ja2V0d3JpdHRlbmNlcnRpZmljYXRlb25CYWRDZXJ0aWZpY2F0ZSBjYWxsYmFjayByZXR1cm5lZCBub24tYm9vbGVhbiBfcmVhZEhhbmRsZXJfd3JpdGVIYW5kbGVyX2Nsb3NlSGFuZGxlcl9yZWFkU29ja2V0X3dyaXRlU29ja2V0Q29ubmVjdGlvbiB0ZXJtaW5hdGVkIGR1cmluZyBoYW5kc2hha2VDYWxsZWQgcmVuZWdvdGlhdGUgb24gYSBub24tY29ubmVjdGVkIHNvY2tldF90cnlGaWx0ZXJfcHVzaEFsbEZpbHRlclN0YWdlc19yZWFkU29ja2V0T3JCdWZmZXJlZERhdGF3cml0ZUZyb21Tb3VyY2VyZWFkVG9Tb2NrZXRfc2VuZFJlYWRFdmVudHdhc0luSGFuZHNoYWtlYnVmcyBlcnJvciBuZXdfc3RhcnRuZXdfZW5kX0V4dGVybmFsQnVmZmVyYWR2YW5jZVN0YXJ0YWR2YW5jZUVuZGxpbmVhckxlbmd0aGxpbmVhckZyZWVieXRlc1JlYWR0b1JlYWRpbnB1dERhdGF0b1dyaXRlX1NlY3VyZUZpbHRlclRsc0V4Y2VwdGlvbkhhbmRzaGFrZUV4Y2VwdGlvbkNlcnRpZmljYXRlRXhjZXB0aW9uU2VjdXJpdHlDb250ZXh0YWxwblN1cHBvcnRlZF9wcm90b2NvbHNUb0xlbmd0aEVuY29kaW5ncHJvdG9jb2xzTGVuZ3RoZXhwZWN0ZWRMZW5ndGhMZW5ndGggb2YgcHJvdG9jb2wgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDI1NSAod2FzOiBUaGUgbWF4aW11bSBtZXNzYWdlIGxlbmd0aCBzdXBwb3J0ZWQgaXMgMl4xMy0xLmJ5dGVzT2Zmc2V0X3Byb3RvY29sc1RvTGVuZ3RoRW5jb2RpbmdOb25Bc2NpaUJhaWxvdXRhZGRQcm90b2NvbG91dEJ5dGVzcHJvdG9jb2xCeXRlc19TZXJ2aWNlT2JqZWN0SW50ZXJuZXRBZGRyZXNzVHlwZUlQdjRJUHY2SVBfVjRVc2UgSVB2NCBpbnN0ZWFkSVBfVjZVc2UgSVB2NiBpbnN0ZWFkQU5ZVXNlIGFueSBpbnN0ZWFkX2Zyb21JbnZhbGlkIHR5cGU6IEludmFsaWQgSW50ZXJuZXRBZGRyZXNzSW50ZXJuZXRBZGRyZXNzVHlwZTogSW50ZXJuZXRBZGRyZXNzTE9PUEJBQ0tfSVBfVjRVc2UgbG9vcGJhY2tJUHY0IGluc3RlYWRMT09QQkFDS19JUF9WNlVzZSBsb29wYmFja0lQdjYgaW5zdGVhZEFOWV9JUF9WNFVzZSBhbnlJUHY0IGluc3RlYWRBTllfSVBfVjZVc2UgYW55SVB2NiBpbnN0ZWFkTmV0d29ya0ludGVyZmFjZV9saXN0U3VwcG9ydGVkTmV0d29ya0ludGVyZmFjZV9MaXN0U3VwcG9ydGVkbGlzdFN1cHBvcnRlZFJhd1NlcnZlclNvY2tldFNlcnZlclNvY2tldFNvY2tldERpcmVjdGlvblJFQ0VJVkVVc2UgcmVjZWl2ZSBpbnN0ZWFkU0VORFVzZSBzZW5kIGluc3RlYWRVc2UgYm90aCBpbnN0ZWFkU29ja2V0T3B0aW9udGNwTm9EZWxheVRDUF9OT0RFTEFZVXNlIHRjcE5vRGVsYXkgaW5zdGVhZF9pcE11bHRpY2FzdExvb3BfaXBNdWx0aWNhc3RIb3BzX2lwTXVsdGljYXN0SWZfaXBCcm9hZGNhc3RfUmF3U29ja2V0T3B0aW9uc19SYXdTb2NrZXRPcHRpb25zLlNPTF9TT0NLRVRfUmF3U29ja2V0T3B0aW9ucy5JUFBST1RPX0lQX1Jhd1NvY2tldE9wdGlvbnMuSVBfTVVMVElDQVNUX0lGX1Jhd1NvY2tldE9wdGlvbnMuSVBQUk9UT19JUFY2X1Jhd1NvY2tldE9wdGlvbnMuSVBWNl9NVUxUSUNBU1RfSUZfUmF3U29ja2V0T3B0aW9ucy5JUFBST1RPX1RDUF9SYXdTb2NrZXRPcHRpb25zLklQUFJPVE9fVURQU09MX1NPQ0tFVElQUFJPVE9fSVBJUF9NVUxUSUNBU1RfSUZJUFBST1RPX0lQVjZJUFY2X01VTFRJQ0FTVF9JRklQUFJPVE9fVENQSVBQUk9UT19VRFBSYXdTb2NrZXRPcHRpb25fb3B0aW9uc0NhY2hlX2dldE5hdGl2ZU9wdGlvblZhbHVlUmF3U29ja2V0T3B0aW9uX0dldE9wdGlvblZhbHVlZnJvbUludGZyb21Cb29sbGV2ZWxTb2NrZXRsZXZlbElQdjRJUHY0TXVsdGljYXN0SW50ZXJmYWNlbGV2ZWxJUHY2SVB2Nk11bHRpY2FzdEludGVyZmFjZWxldmVsVGNwbGV2ZWxVZHBfZ2V0T3B0aW9uVmFsdWVSYXdTb2NrZXRFdmVudHJlYWRDbG9zZWRSRUFEX0NMT1NFRFVzZSByZWFkQ2xvc2VkIGluc3RlYWRDTE9TRURVc2UgY2xvc2VkIGluc3RlYWRSYXdTb2NrZXRFdmVudC5yZWFkUmF3U29ja2V0RXZlbnQud3JpdGVSYXdTb2NrZXRFdmVudC5yZWFkQ2xvc2VkUmF3U29ja2V0RXZlbnQuY2xvc2VkQ29ubmVjdGlvblRhc2tSYXdTb2NrZXRTb2NrZXRfY29ubmVjdF9zdGFydENvbm5lY3RyYXdUYXNrRGF0YWdyYW1SYXdEYXRhZ3JhbVNvY2tldFRoaXMgcHJvcGVydHkgaXMgbm90IGltcGxlbWVudGVkLiBVc2UgZ2V0UmF3T3B0aW9uIGFuZCBzZXRSYXdPcHRpb24gaW5zdGVhZC4sIGFkZHJlc3MgPSAsIHBvcnQgPSBfU3RkU3RyZWFtU3RkaW5fZmRfZWNob01vZGVTdGRpbl9HZXRFY2hvTW9kZV9zZXRFY2hvTW9kZVN0ZGluX1NldEVjaG9Nb2RlX2xpbmVNb2RlU3RkaW5fR2V0TGluZU1vZGVfc2V0TGluZU1vZGVTdGRpbl9TZXRMaW5lTW9kZVN0ZGluX1JlYWRCeXRlU3RkaW5fQW5zaVN1cHBvcnRlZHJlYWRMaW5lU3luY3JldGFpbk5ld2xpbmVzY3JJc05ld2xpbmV0ZXJtaW5hbGxpbmVNb2RlZWNob01vZGVFcnJvciBnZXR0aW5nIHRlcm1pbmFsIGVjaG8gbW9kZVRoaXMgZW1iZWRkZXIgZGlzYWxsb3dzIHNldHRpbmcgU3RkaW4uZWNob01vZGVFcnJvciBzZXR0aW5nIHRlcm1pbmFsIGVjaG8gbW9kZUVycm9yIGdldHRpbmcgdGVybWluYWwgbGluZSBtb2RlVGhpcyBlbWJlZGRlciBkaXNhbGxvd3Mgc2V0dGluZyBTdGRpbi5saW5lTW9kZUVycm9yIHNldHRpbmcgdGVybWluYWwgbGluZSBtb2RlRXJyb3IgZGV0ZXJtaW5pbmcgQU5TSSBzdXBwb3J0RXJyb3IgcmVhZGluZyBieXRlIGZyb20gc3RkaW5oYXNUZXJtaW5hbFN0ZG91dF9ub25CbG9ja2luZ190ZXJtaW5hbFNpemVDb3VsZCBub3QgZ2V0IHRlcm1pbmFsIHNpemVfZ2V0VGVybWluYWxTaXplU3Rkb3V0X0dldFRlcm1pbmFsU2l6ZV9nZXRBbnNpU3VwcG9ydGVkU3Rkb3V0X0Fuc2lTdXBwb3J0ZWRfaGFzVGVybWluYWx0ZXJtaW5hbENvbHVtbnNfdGVybWluYWxDb2x1bW5zdGVybWluYWxMaW5lc190ZXJtaW5hbExpbmVzU3Rkb3V0RXhjZXB0aW9uU3Rkb3V0RXhjZXB0aW9uOiBTdGRpbkV4Y2VwdGlvblN0ZGluRXhjZXB0aW9uOiBfU3RkQ29uc3VtZXJfU3RkU2lua1N0ZGlvVHlwZVRFUk1JTkFMVXNlIHRlcm1pbmFsIGluc3RlYWRQSVBFVXNlIHBpcGUgaW5zdGVhZFVzZSBvdGhlciBpbnN0ZWFkU3RkaW9UeXBlOiBfU3RkSU9VdGlsc19uYXRpdmVTb2NrZXRUeXBlRXJyb3IgcmV0cmlldmluZyBzb2NrZXQgdHlwZV9nZXRTdGRpb091dHB1dFN0cmVhbUNvdWxkbid0IGRldGVybWluZSBmaWxlIHR5cGUgb2Ygc3RkaW8gaGFuZGxlIChmZCBfZ2V0U3RkaW9JbnB1dFN0cmVhbUNvdWxkbid0IGRldGVybWluZSBmaWxlIHR5cGUgb2Ygc3RkaW4gKGZkIF9zb2NrZXRUeXBlX2dldFN0ZGlvSGFuZGxlVHlwZUZpbGVfR2V0U3RkaW9IYW5kbGVUeXBlU3lzdGVtRW5jb2RpbmdzeXN0ZW1fV2luZG93c0NvZGVQYWdlRW5jb2RlckludmFsaWQgY2hhcmFjdGVyIGZvciBlbmNvZGluZ19lbmNvZGVTdHJpbmdTdHJpbmdUb1N5c3RlbUVuY29kaW5nX1dpbmRvd3NDb2RlUGFnZUVuY29kZXJTaW5rX1dpbmRvd3NDb2RlUGFnZURlY29kZXJfZGVjb2RlQnl0ZXNTeXN0ZW1FbmNvZGluZ1RvU3RyaW5nX1dpbmRvd3NDb2RlUGFnZURlY29kZXJTaW5rUmF3U3luY2hyb25vdXNTb2NrZXRfc2lnbmFsQ29udHJvbGxlcnNfc3VjY2Vzc1Jlc3BvbnNlX2lsbGVnYWxBcmd1bWVudFJlc3BvbnNlX29zRXJyb3JSZXNwb25zZV9maWxlQ2xvc2VkUmVzcG9uc2VfZXJyb3JSZXNwb25zZUVycm9yVHlwZV9vc0Vycm9yUmVzcG9uc2VFcnJvckNvZGVfb3NFcnJvclJlc3BvbnNlTWVzc2FnZXpsaWJaTElCVXNlIHpsaWIgaW5zdGVhZEdaSVBVc2UgZ3ppcCBpbnN0ZWFkVXNlIEZpbGVNb2RlLnJlYWQgaW5zdGVhZFVzZSBGaWxlTW9kZS53cml0ZSBpbnN0ZWFkVXNlIEZpbGVNb2RlLmFwcGVuZCBpbnN0ZWFkVXNlIEZpbGVNb2RlLndyaXRlT25seSBpbnN0ZWFkVXNlIEZpbGVNb2RlLndyaXRlT25seUFwcGVuZCBpbnN0ZWFkX2Jsb2NrU2l6ZV9pb092ZXJyaWRlc1Rva2VuX2FzeW5jUnVuWm9uZWRfbmV4dFNlcnZpY2VJZF9zdGRpb0hhbmRsZVR5cGVUZXJtaW5hbF9zdGRpb0hhbmRsZVR5cGVQaXBlX3N0ZGlvSGFuZGxlVHlwZUZpbGVfc3RkaW9IYW5kbGVUeXBlU29ja2V0X3N0ZGlvSGFuZGxlVHlwZU90aGVyX3N0ZGluRkRfc3Rkb3V0RkRfc3RkZXJyRkRzeXN0ZW1FbmNvZGluZ1NZU1RFTV9FTkNPRElOR1VzZSBzeXN0ZW1FbmNvZGluZyBpbnN0ZWFkX3VyaUJhc2VDbG9zdXJlX2dldFVyaUJhc2VDbG9zdXJlX21ha2VVaW50OExpc3RWaWV3X2dldFdhdGNoU2lnbmFsSW50ZXJuYWxfcnVuTm9uSW50ZXJhY3RpdmVQcm9jZXNzZm9sZFN0cmVhbV9ydW5Ob25JbnRlcmFjdGl2ZVByb2Nlc3NTeW5jX3Rocm93T25CYWRQb3J0SW52YWxpZCBwb3J0IF90aHJvd09uQmFkVHRsSW52YWxpZCB0dGwgX21ha2VEYXRhZ3JhbV9nZXRTdGRpb0hhbmRsZVNvY2tldF9HZXRTdGRpb0hhbmRsZV9nZXRTb2NrZXRUeXBlU29ja2V0X0dldFR5cGVfZW5zdXJlRmFzdEFuZFNlcmlhbGl6YWJsZUJ5dGVEYXRhTGlzdCBlbGVtZW50IGlzIG51bGwgYXQgaW5kZXggX3ZhbGlkYXRlWkxpYldpbmRvd0JpdHNfdmFsaWRhdGVaTGliZUxldmVsX3ZhbGlkYXRlWkxpYk1lbUxldmVsX3ZhbGlkYXRlWkxpYlN0cmF0ZWd5VW5zdXBwb3J0ZWQgJ3N0cmF0ZWd5J1RoaXMgZW1iZWRkZXIgZGlzYWxsb3dzIGNhbGxpbmcgZGFydDppbydzIGV4aXQoKXNsZWVwc2xlZXA6IGR1cmF0aW9uIGNhbm5vdCBiZSBuZWdhdGl2ZVRoaXMgZW1iZWRkZXIgZGlzYWxsb3dzIGNhbGxpbmcgZGFydDppbydzIHNsZWVwKClfc2V0U3RkaW9GRHNzdGRpb1R5cGVzdGRpb2ZkZGFydC5jbGl3YWl0X2Zvci5kYXJ0X1dhaXRGb3JVdGlsc3dhaXRGb3JFdmVudHdhaXRGb3IgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGVtYmVkZGVyX3dhaXRGb3JFdmVudENsb3N1cmVfd2FpdEZvckV2ZW50Q0xJX1dhaXRGb3JFdmVudHRpbWVvdXRNaWxsaXNfZ2V0V2FpdEZvckV2ZW50d2FpdEZvcmZ1dHVyZUNvbXBsZXRlZHN0YWNrdHJhY2V3YWl0Rm9yKCkgdGltZWQgb3V0ZGFydC5jb3JlTWFwc2JpZ2ludC5kYXJ0Ym9vbC5kYXJ0Y29tcGFyYWJsZS5kYXJ0ZGF0ZV90aW1lLmRhcnRkb3VibGUuZGFydGR1cmF0aW9uLmRhcnRlcnJvcnMuZGFydGV4Y2VwdGlvbnMuZGFydGV4cGFuZG8uZGFydGZ1bmN0aW9uLmRhcnRpZGVudGljYWwuZGFydGludC5kYXJ0aW52b2NhdGlvbi5kYXJ0bWFwLmRhcnRudWxsLmRhcnRudW0uZGFydG9iamVjdC5kYXJ0cGF0dGVybi5kYXJ0cmVnZXhwLmRhcnRzaW5rLmRhcnRzdGFja3RyYWNlLmRhcnRzdG9wd2F0Y2guZGFydHN0cmluZy5kYXJ0c3RyaW5nX2J1ZmZlci5kYXJ0c3RyaW5nX3NpbmsuZGFydHR5cGUuZGFydHVyaS5kYXJ0X1N5bmNHZW5lcmF0b3JDYWxsYmFja19VcmlCYXNlQ2xvc3VyZUNvbXBhcmF0b3JfR2VuZXJhdG9yX21vdmVOZXh0Rm5feWllbGRFYWNoSXRlcmF0b3JfTGlzdExpc3RfYWxsb2NhdGVMaXN0X2dldEluZGV4ZWRfc2V0SW5kZXhlZExpc3Rfc2V0SW5kZXhlZExpc3RfZ2V0TGVuZ3RoX3NsaWNlbmVlZHNUeXBlQXJndW1lbnRfc2xpY2VJbnRlcm5hbExpc3Rfc2xpY2VpdGVyYWJsZUFzTGlzdF9zZXRMZW5ndGhfSW1tdXRhYmxlTGlzdEltbXV0YWJsZUFycmF5IGNhbiBvbmx5IGJlIGFsbG9jYXRlZCBieSB0aGUgVk1JbW11dGFibGVMaXN0X2Zyb21fRml4ZWRTaXplQXJyYXlJdGVyYXRvcl9CaWdJbnRJbXBsX2RpZ2l0Qml0c19kaWdpdEJhc2VfZGlnaXRNYXNrX2hhbGZEaWdpdEJpdHNfaGFsZkRpZ2l0TWFza3R3b19taW51c09uZV9vbmVEaWdpdE1hc2tfdHdvRGlnaXRNYXNrX29uZUJpbGxpb25fbWluSW50LTkyMjMzNzIwMzY4NTQ3NzU4MDhfbWF4SW50OTIyMzM3MjAzNjg1NDc3NTgwN19sYXN0RGl2aWRlbmREaWdpdHNfbGFzdERpdmlkZW5kVXNlZF9sYXN0RGl2aXNvckRpZ2l0c19sYXN0RGl2aXNvclVzZWRfbGFzdFF1b1JlbURpZ2l0c19sYXN0UXVvUmVtVXNlZF9sYXN0UmVtVXNlZF9sYXN0UmVtX25zaF9pc05lZ2F0aXZlX2RpZ2l0c19iaXRzRm9yRnJvbURvdWJsZV9kaXZpc29yTG93VG9wRGlnaXRfZGl2aXNvclRvcERpZ2l0X3F1b3RpZW50RGlnaXRfcXVvdGllbnRIaWdoRGlnaXRfbm9ybWFsaXplZHJhZGl4Q291bGQgbm90IHBhcnNlIEJpZ0ludF9wYXJzZURlY2ltYWxkaWdpdEluUGFydENvdW50X2NvZGVVbml0VG9SYWRpeFZhbHVlX3BhcnNlSGV4c3RhcnRQb3NoZXhDaGFyc1BlckRpZ2l0c291cmNlTGVuZ3RobGFzdERpZ2l0TGVuZ3RoZGlnaXRJbmRleF9wYXJzZVJhZGl4X3RyeVBhcnNlcmVeXHMqKFsrLV0/KSgoMHhbYS1mMC05XSspfChcZCspfChbYS16MC05XSspKVxzKiRjYXNlU2Vuc2l0aXZlc2lnbkluZGV4aGV4SW5kZXhkZWNpbWFsSW5kZXhub25EZWNpbWFsSGV4SW5kZXhkZWNpbWFsTWF0Y2hoZXhNYXRjaG5vbkRlY2ltYWxNYXRjaGlzIG5vdCBhbiBpbnRlZ2VyX25vcm1hbGl6ZV9pc1plcm9fY2xvbmVEaWdpdHNyZXN1bHREaWdpdHNfZnJvbUludF9mcm9tRG91YmxlVmFsdWUgbXVzdCBiZSBmaW5pdGU6IGZsb29yVG9Eb3VibGViaWFzZWRFeHBvbmVudHVuc2hpZnRlZERpZ2l0c3Vuc2hpZnRlZEJpZ2Fic1Jlc3VsdF9kbFNoaWZ0cmVzdWx0VXNlZF9kbFNoaWZ0RGlnaXRzeERpZ2l0c3hVc2VkX2RyU2hpZnRfZHJTaGlmdERpZ2l0c19sc2hkaWdpdFNoaWZ0Yml0U2hpZnRjYXJyeUJpdFNoaWZ0Yml0TWFza2NhcnJ5c2hpZnRBbW91bnRzaGlmdC1hbW91bnQgbXVzdCBiZSBwb3NpdGl2ZSBfbFNoaWZ0RGlnaXRzZGlnaXRzU2hpZnRfcnNoX3JTaGlmdERpZ2l0c19hYnNDb21wYXJlYmlnSW50X2NvbXBhcmVEaWdpdHNvdGhlckRpZ2l0c290aGVyVXNlZF9hYnNBZGRfYWJzU3ViX2Fic0FkZFNldFNpZ25fYWJzU3ViU2V0U2lnbl9hYnNBbmRTZXRTaWduX2Fic0FuZE5vdFNldFNpZ25fYWJzT3JTZXRTaWdubERpZ2l0c19hYnNYb3JTZXRTaWdudGhpczFvdGhlcjFuMV9tdWxBZGR4SW5kZXhtdWx0aXBsaWNhbmREaWdpdHNhY2N1bXVsYXRvckRpZ2l0c3hseGhtbG1ocGhwbF9zcXJBZGRhY2N1bHVtYXRvckRpZ2l0c19tdWxEaWdpdHNfc3FyRGlnaXRzX2VzdGltYXRlUXVvdGllbnREaWdpdHF1b3RpZW50RGlnaXRfZGl2X2RpdlJlbWxhc3RRdW9fdXNlZHF1b19kaWdpdHNxdW9fcmVtcmVtRGlnaXRzcmVtbnNoeURpZ2l0c3lVc2VkbnVtRXh0cmFEaWdpdHN0bXBEaWdpdHNueURpZ2l0c2QwZDFfcmVtRGlnaXRzRXhwb25lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmU6IG1vZFBvd2JpZ0V4cG9uZW50YmlnTW9kdWx1c21vZHVsdXNleHBvbmVudCBtdXN0IGJlIHBvc2l0aXZlOiBtb2R1bHVzIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmU6IGV4cG9uZW50Qml0bGVuY2Fubm90VXNlTW9udGdvbWVyeV9ub3JtTW9kdWx1c1VzZWRyZXN1bHQyRGlnaXRzZ0RpZ2l0c2dVc2VkcmVzdWx0MlVzZWRfc3FyX211bF9yZXZlcnRrbWcyRGlnaXRzZzJVc2VkZXhwb25lbnREaWdpdHNnd0RpZ2l0c3N3YXBEaWdpdHNzd2FwVXNlZF9iaW5hcnlHY2RpbnZtYXhVc2VkbWF4TGVuTm90IGNvcHJpbWVtdXN0IG5vdCBiZSB6ZXJvZGlnaXRTaGlmdEFtb3VudHVEaWdpdHN2RGlnaXRzYWNhYmNkVXNlZGFiY2RMZW5hRGlnaXRzYkRpZ2l0c2NEaWdpdHNkRGlnaXRzYUlzTmVnYXRpdmViSXNOZWdhdGl2ZWNJc05lZ2F0aXZlZElzTmVnYXRpdmVhX2NtcF9jYl9jbXBfZGNfY21wX2FkX2NtcF9ibW9kSW52ZXJzZU1vZHVsdXMgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZTogZ2NkcmVzdWx0Qml0c2NhY2hlZEJpdHNjYWNoZWRCaXRzTGVuZ3RocmVhZEJpdHNuZXh0RGlnaXRuZXh0RGlnaXRMZW5ndGhsZWFkaW5nQml0c3JvdW5kVXBkZWNpbWFsRGlnaXRDaHVua3NkaWdpdHM5emVyb3MwMDAwMDAwMDAwMDAwMF90b1JhZGl4Q29kZVVuaXRkaWdpdFN0cmluZ190b0hleFN0cmluZ3JldmVyc2VkRGlnaXRDb2RlVW5pdHNtc2JDaHVua19CaWdJbnRSZWR1Y3Rpb25fQmlnSW50TW9udGdvbWVyeVJlZHVjdGlvbl9tb2R1bHVzX21vZHVsdXNEaWdpdHNfYXJnc19kaWdpdHNQZXJTdGVwX3hEaWdpdF94SGlnaERpZ2l0X3Job0RpZ2l0X3Job0hpZ2hEaWdpdF9tdURpZ2l0X211SGlnaERpZ2l0X2ludkRpZ2l0X2ludkRpZ2l0UGFpcl9tdWxNb2RyaG9scmhvaGRoZGxfcmVkdWNlX0JpZ0ludENsYXNzaWNSZWR1Y3Rpb25fbm9ybU1vZHVsdXNfbm9ybU1vZHVsdXNEaWdpdHNfbmVnTm9ybU1vZHVsdXNEaWdpdHNfbW9kdWx1c05zaF90bXBEaWdpdHNuZWdOb3JtTW9kdWx1c19Eb3VibGVDQUNIRV9TSVpFX0xPRzJDQUNIRV9MRU5HVEhDQUNIRV9NQVNLX2NhY2hlRXZpY3RJbmRleGZyb21JbnRlZ2VyRG91YmxlX2RvdWJsZUZyb21JbnRlZ2VyRG91YmxlX2hhc2hDb2RlX2lkZW50aXR5SGFzaENvZGVEb3VibGVfYWRkX3N1YkRvdWJsZV9zdWJEb3VibGVfbXVsX3RydW5jX2RpdkRvdWJsZV90cnVuY19kaXZEb3VibGVfZGl2X21vZHVsb0RvdWJsZV9tb2R1bG9fcmVtYWluZGVyRG91YmxlX3JlbWFpbmRlckRvdWJsZV9mbGlwU2lnbkJpdERvdWJsZV9lcXVhbF9lcXVhbFRvSW50ZWdlckRvdWJsZV9lcXVhbFRvSW50ZWdlckRvdWJsZV9ncmVhdGVyVGhhbl9hZGRGcm9tSW50ZWdlcl9zdWJGcm9tSW50ZWdlcl9tdWxGcm9tSW50ZWdlcl90cnVuY0RpdkZyb21JbnRlZ2VyX21vZHVsb0Zyb21JbnRlZ2VyX3JlbWFpbmRlckZyb21JbnRlZ2VyX2dyZWF0ZXJUaGFuRnJvbUludGVnZXJEb3VibGVfZ3JlYXRlclRoYW5Gcm9tSW50ZWdlckRvdWJsZV9nZXRJc05lZ2F0aXZlRG91YmxlX2dldElzSW5maW5pdGVEb3VibGVfZ2V0SXNOYU5mbG9vcmNlaWxjZWlsVG9Eb3VibGVEb3VibGVfcm91bmREb3VibGVfZmxvb3JEb3VibGVfY2VpbERvdWJsZV90cnVuY2F0ZW5vdCBhIG51bWJlckRvdWJsZV90b0ludERvdWJsZV90b1N0cmluZ25vdCBhbiBpbnRlZ2VyX3RvU3RyaW5nQXNGaXhlZERvdWJsZV90b1N0cmluZ0FzRml4ZWRfdG9TdHJpbmdBc0V4cG9uZW50aWFsRG91YmxlX3RvU3RyaW5nQXNFeHBvbmVudGlhbHRvU3RyaW5nQXNQcmVjaXNpb25wcmVjaXNpb25fdG9TdHJpbmdBc1ByZWNpc2lvbkRvdWJsZV90b1N0cmluZ0FzUHJlY2lzaW9udGhpc0lzTmVnYXRpdmVvdGhlcklzTmVnYXRpdmUtOTAwNzE5OTI1NDc0MDk5MjkwMDcxOTkyNTQ3NDA5OTI5MjIzMzcyMDM2ODU0Nzc2MDAwLjBfQXNzZXJ0aW9uRXJyb3JfZmFpbGVkQXNzZXJ0aW9uX3VybF9saW5lX2NvbHVtbl90aHJvd05ld2Fzc2VydGlvblN0YXJ0YXNzZXJ0aW9uRW5kX2RvVGhyb3dOZXdBc3NlcnRpb25FcnJvcl90aHJvd05ld19ldmFsdWF0ZUFzc2VydGlvbl9tZXNzYWdlU3RyaW5naXMgbm90IHRydWUuY29sdW1uSW5mbyBwb3MgJzogRmFpbGVkIGFzc2VydGlvbjogbGluZSBfVHlwZUVycm9yaXMgYXNzaWduYWJsZVR5cGVFcnJvcl90aHJvd05ld3NyY192YWx1ZWRzdF90eXBlZHN0X25hbWVfQ2FzdEVycm9yX2Vycm9yTXNnX0ludGVybmFsRXJyb3JJbnRlcm5hbEVycm9yOiAnRXJyb3I6IGZpZWxkICcnIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuX0Nsb3N1cmVfaW5zdGFudGlhdG9yX3R5cGVfYXJndW1lbnRzX2Z1bmN0aW9uX3R5cGVfYXJndW1lbnRzX2RlbGF5ZWRfdHlwZV9hcmd1bWVudHNDbG9zdXJlX2VxdWFsc19jb21wdXRlSGFzaENsb3N1cmVfY2xvbmVDbG9zdXJlX2NvbXB1dGVIYXNoX0dyb3dhYmxlTGlzdHdpdGhDYXBhY2l0eV93aXRoRGF0YUdyb3dhYmxlTGlzdF9hbGxvY2F0ZV9jYXBhY2l0eUdyb3dhYmxlTGlzdF9nZXRDYXBhY2l0eUdyb3dhYmxlTGlzdF9nZXRMZW5ndGhuZXdfbGVuZ3Rob2xkX2NhcGFjaXR5bmV3X2NhcGFjaXR5c2hvdWxkU2hyaW5rVG9GaXRfc2hyaW5rR3Jvd2FibGVMaXN0X3NldExlbmd0aF9zZXREYXRhR3Jvd2FibGVMaXN0X3NldERhdGFHcm93YWJsZUxpc3RfZ2V0SW5kZXhlZEdyb3dhYmxlTGlzdF9zZXRJbmRleGVkX25leHRDYXBhY2l0eWlzVk1MaXN0Y2FwaXRlckxlbm5ld0xlbl9hbGxvY2F0ZURhdGFuZXdEYXRhX2pvaW5XaXRoU2VwYXJhdG9yY29kZVVuaXRDb3VudGZpcnN0Tm9uT25lQnl0ZVN0cmluZ0xpbWl0bmV4dEVsZW1lbnRjb3B5SW5kZXhvbmVieXRlQ2FuYXJ5ZWxlbWVudFN0cmluZ19JbW11dGFibGVNYXBfa3ZQYWlyc2tleVZhbHVlUGFpcnNDYW5ub3Qgc2V0IHZhbHVlIGluIHVubW9kaWZpYWJsZSBNYXBDYW5ub3QgY2xlYXIgdW5tb2RpZmlhYmxlIE1hcENhbm5vdCByZW1vdmUgZnJvbSB1bm1vZGlmaWFibGUgTWFwX0ltbXV0YWJsZU1hcEtleUl0ZXJhYmxlX0ltbXV0YWJsZU1hcFZhbHVlSXRlcmFibGVfSW1tdXRhYmxlTWFwRW50cnlJdGVyYWJsZV9JbW11dGFibGVNYXBLZXlJdGVyYXRvcl9uZXh0SW5kZXhfSW1tdXRhYmxlTWFwVmFsdWVJdGVyYXRvcl9JbW11dGFibGVNYXBFbnRyeUl0ZXJhdG9yX0ludGVnZXJJbXBsZW1lbnRhdGlvbjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5el9iaXRBbmRGcm9tSW50ZWdlcl9iaXRPckZyb21JbnRlZ2VyX2JpdFhvckZyb21JbnRlZ2VyX2JpdEFuZEZyb21TbWlJbnRlZ2VyX2JpdEFuZEZyb21JbnRlZ2VySW50ZWdlcl9iaXRPckZyb21JbnRlZ2VySW50ZWdlcl9iaXRYb3JGcm9tSW50ZWdlcl9zaHJGcm9tSW50ZWdlckludGVnZXJfc2hyRnJvbUludGVnZXJfc2hsRnJvbUludGVnZXJJbnRlZ2VyX3NobEZyb21JbnRlZ2VySW50ZWdlcl9hZGRGcm9tSW50ZWdlckludGVnZXJfc3ViRnJvbUludGVnZXJJbnRlZ2VyX211bEZyb21JbnRlZ2VySW50ZWdlcl90cnVuY0RpdkZyb21JbnRlZ2VySW50ZWdlcl9tb2R1bG9Gcm9tSW50ZWdlckludGVnZXJfZ3JlYXRlclRoYW5Gcm9tSW50ZWdlckludGVnZXJfZXF1YWxUb0ludGVnZXItOTIyMzM3MjAzNjg1NDc3NjAwMC4wX3RvUG93MlN0cmluZ19taW5JbnQ2NFRvUmFkaXhTdHJpbmdfc2V0QXRiaXRzUGVyRGlnaXQzMDM3MDAwNDk5X1NtaV9kaWdpdFRhYmxlX3NtYWxsTG9va3VwVGFibGUtOTktOTgtOTctOTYtOTUtOTQtOTMtOTItOTEtOTAtODktODgtODctODYtODUtODQtODMtODItODEtODAtNzktNzgtNzctNzYtNzUtNzQtNzMtNzItNzEtNzAtNjktNjgtNjctNjYtNjUtNjQtNjMtNjItNjEtNjAtNTktNTgtNTctNTYtNTUtNTQtNTMtNTItNTEtNTAtNDktNDgtNDctNDYtNDUtNDQtNDMtNDItNDEtNDAtMzktMzgtMzctMzYtMzUtMzQtMzMtMzItMzEtMzAtMjktMjgtMjctMjYtMjUtMjQtMjMtMjItMjEtMjAtMTktMTgtMTctMTYtMTUtMTQtMTMtMTItMTEtMTAtOS04LTctNi01LTQtMzIzNDU2Nzg5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5X1BPV18xMF83X1BPV18xMF84X1BPV18xMF85U21pX2JpdE5lZ2F0ZVNtaV9iaXRMZW5ndGhTbWlfYml0QW5kRnJvbVNtaV9wb3NpdGl2ZUJhc2UxMExlbmd0aHNtaXR3b0RpZ2l0c19uZWdhdGl2ZUJhc2UxMExlbmd0aG5lZ1NtaV9uZWdhdGl2ZVRvU3RyaW5nX01pbnRNaW50X2JpdE5lZ2F0ZU1pbnRfYml0TGVuZ3RoX01FVEhPRF9HRVRURVJfU0VUVEVSX0ZJRUxEX0xPQ0FMX1ZBUl9LSU5EX1NISUZUX0tJTkRfQklUU19LSU5EX01BU0tfRFlOQU1JQ19TVVBFUl9TVEFUSUNfQ09OU1RSVUNUT1JfVE9QX0xFVkVMX0xFVkVMX1NISUZUX0xFVkVMX0JJVFNfTEVWRUxfTUFTS19UWVBFX0FSR1NfTEVOX0NPVU5UX1BPU0lUSU9OQUxfQ09VTlRfRklSU1RfTkFNRURfRU5UUllfZnVuY3Rpb25OYW1lX2FyZ3VtZW50c0Rlc2NyaXB0b3JfaXNTdXBlckludm9jYXRpb25fZGVsYXllZFR5cGVBcmd1bWVudHNMZW5fbWVtYmVyTmFtZV9wb3NpdGlvbmFsQXJndW1lbnRzX25hbWVkQXJndW1lbnRzX3dpdGhvdXRUeXBlX3NldE1lbWJlck5hbWVBbmRUeXBlX3R5cGVBcmdzTGVudHlwZUFyZ3NMZW5fdW5wYWNrVHlwZUFyZ3VtZW50c0ludm9jYXRpb25NaXJyb3JfdW5wYWNrVHlwZUFyZ3VtZW50c251bVR5cGVBcmd1bWVudHNyZWNlaXZlckluZGV4bmFtZWRFbnRyeUluZGV4YXJnX25hbWVhcmdfdmFsdWVfYWxsb2NhdGVJbnZvY2F0aW9uTWlycm9yYXJndW1lbnRzRGVzY3JpcHRvcmlzU3VwZXJJbnZvY2F0aW9uX2FsbG9jYXRlSW52b2NhdGlvbk1pcnJvckZvckNsb3N1cmVkZWxheWVkVHlwZUFyZ3VtZW50c0xlbl9MaWJyYXJ5UHJlZml4X2xvYWRMaWJyYXJ5UHJlZml4X2xvYWRfbG9hZEVycm9yTGlicmFyeVByZWZpeF9sb2FkRXJyb3JMaWJyYXJ5UHJlZml4X2lzTG9hZGVkX2ludmFsaWRhdGVEZXBlbmRlbnRDb2RlTGlicmFyeVByZWZpeF9pbnZhbGlkYXRlRGVwZW5kZW50Q29kZWhhc0NvbXBsZXRlZF9SZWdFeHBIYXNoS2V5ZG90QWxsdGhhdF9SZWdFeHBIYXNoVmFsdWVfUmVnRXhwTWF0Y2hfcmVnZXhwX21hdGNoX01BVENIX1BBSVJncm91cElkeF9ncm91cENvdW50X3N1YnN0cmluZ1VuY2hlY2tlZGdyb3Vwc2dyb3Vwc1NwZWNncm91cHNMaXN0bmFtZWRHcm91cGlkeF9ncm91cE5hbWVJbmRleE5vdCBhIGNhcHR1cmUgZ3JvdXAgbmFtZTogZ3JvdXBOYW1lc19ncm91cE5hbWVzX1JlZ0V4cF93b3JkQ2hhcmFjdGVyTWFwUmVnRXhwX2ZhY3RvcnlfRXhlY3V0ZU1hdGNoX0V4ZWN1dGVNYXRjaFN0aWNreXN0cmluZ01hdGNoUmVnRXhwX2dldFBhdHRlcm5SZWdFeHBfZ2V0SXNNdWx0aUxpbmVpc0Nhc2VTZW5zaXRpdmVSZWdFeHBfZ2V0SXNDYXNlU2Vuc2l0aXZlaXNVbmljb2RlUmVnRXhwX2dldElzVW5pY29kZWlzRG90QWxsUmVnRXhwX2dldElzRG90QWxsUmVnRXhwX2dldEdyb3VwQ291bnRfZ3JvdXBOYW1lTGlzdFJlZ0V4cF9nZXRHcm91cE5hbWVNYXBSZWdFeHBfRXhlY3V0ZU1hdGNoc3RhcnRfaW5kZXhSZWdFeHBfRXhlY3V0ZU1hdGNoU3RpY2t5X0FsbE1hdGNoZXNJdGVyYWJsZV9yZV9zdHJfQWxsTWF0Y2hlc0l0ZXJhdG9yX2lzVHJhaWxTdXJyb2dhdGVfU3RyaW5nQmFzZV9sZW5ndGhCaXRzX21heExlbmd0aFZhbHVlX2xlbmd0aE1hc2tfc3RhcnRCaXRzX21heFN0YXJ0VmFsdWVfbWF4VW5zaWduZWRTbWlCaXRzX21heEpvaW5SZXBsYWNlT25lQnl0ZVN0cmluZ0xlbmd0aF9pc1doaXRlc3BhY2VfU3RyaW5nQmFzZSBjYW4ndCBiZSBpbnN0YW5pYXRlZFN0cmluZ19nZXRIYXNoQ29kZV9pc09uZUJ5dGVjcmVhdGVGcm9tQ2hhckNvZGVzY2NpZGNvZGVDb3VudF9zY2FuQ29kZVVuaXRzX2NyZWF0ZVN0cmluZ0Zyb21JdGVyYWJsZWNoYXJDb2RlTGlzdGlzT25lQnl0ZVN0cmluZ19jcmVhdGVPbmVCeXRlU3RyaW5nX2NyZWF0ZUZyb21Db2RlUG9pbnRzU3RyaW5nQmFzZV9jcmVhdGVGcm9tQ29kZVBvaW50c2NvZGVQb2ludHNTdHJpbmdfY2hhckF0U3RyaW5nX2dldExlbmd0aFN0cmluZ19jb25jYXR0aGlzTGVuZ3Rob3RoZXJMZW5ndGh0aGlzQ29kZVVuaXRvdGhlckNvZGVVbml0X3N1YnN0cmluZ01hdGNoZXNfc3Vic3RyaW5nVW5jaGVja2VkTmF0aXZlU3RyaW5nQmFzZV9zdWJzdHJpbmdVbmNoZWNrZWRfaXNPbmVCeXRlV2hpdGVzcGFjZV9pc1R3b0J5dGVXaGl0ZXNwYWNlX2ZpcnN0Tm9uV2hpdGVzcGFjZV9sYXN0Tm9uV2hpdGVzcGFjZXRyaW1MZWZ0dGltZXMgaXMgbm90IGEgUGF0dGVybiBpcyBub3QgYSBTdHJpbmcgaXMgbm90IGFuIGludHJlcGxhY2VtZW50SXNPbmVCeXRlcmVwbGFjZW1lbnRMZW5ndGhzbGljZXNfYWRkUmVwbGFjZVNsaWNlX2pvaW5SZXBsYWNlQWxsT25lQnl0ZVJlc3VsdHNsaWNlTGVuZ3RoX2pvaW5SZXBsYWNlQWxsUmVzdWx0U3RyaW5nQmFzZV9qb2luUmVwbGFjZUFsbFJlc3VsdHJlcGxhY2VtZW50U3RyaW5nc0FyZU9uZUJ5dGVyZXBsYWNlRmlyc3RNYXBwZWRfbWF0Y2hTdHJpbmdfc3RyaW5nSWRlbnRpdHlfc3BsaXRNYXBKb2luRW1wdHlTdHJpbmdzdHJpbmdQYXR0ZXJuX2ludGVycG9sYXRlU2luZ2xlX2ludGVycG9sYXRlcHJldmlvdXNJbmRleFN0cmluZ190b1VwcGVyQ2FzZVN0cmluZ190b0xvd2VyQ2FzZV9jb25jYXRSYW5nZV9jb25jYXRSYW5nZU5hdGl2ZVN0cmluZ19jb25jYXRSYW5nZV9PbmVCeXRlU3RyaW5nX0xDX1RBQkxFAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn/CgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0wrXCtsK3wrjCucK6wrvCvMK9wr7Cv8Ogw6HDosOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDl8O4w7nDusO7w7zDvcO+w5/DoMOhw6LDo8Okw6XDpsOnw6jDqcOqw6vDrMOtw67Dr8Oww7HDssOzw7TDtcO2w7fDuMO5w7rDu8O8w73DvsO/X1VDX1RBQkxFAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXV5fYEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlae3x9fn/CgMKBwoLCg8KEwoXChsKHwojCicKKwovCjMKNwo7Cj8KQwpHCksKTwpTClcKWwpfCmMKZwprCm8Kcwp3CnsKfwqDCocKiwqPCpMKlwqbCp8KowqnCqsKrwqzCrcKuwq/CsMKxwrLCs8K0AMK2wrfCuMK5wrrCu8K8wr3CvsK/w4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsOXw5jDmcOaw5vDnMOdw54Aw4DDgcOCw4PDhMOFw4bDh8OIw4nDisOLw4zDjcOOw4/DkMORw5LDk8OUw5XDlsO3w5jDmcOaw5vDnMOdw54AU3RyaW5nX2NvZGVVbml0QXRPbmVCeXRlU3RyaW5nX3N1YnN0cmluZ1VuY2hlY2tlZF9zcGxpdFdpdGhDaGFyQ29kZU9uZUJ5dGVTdHJpbmdfc3BsaXRXaXRoQ2hhckNvZGVwYXR0ZXJuQXNTdHJpbmdfY29uY2F0QWxsc3RyaW5nc0xlbmd0aHJJeGVMZW5ndGhwQ2lkcGF0dGVybkN1MHBhZENpZHBhZExlbmd0aHJlc3VsdExlbmd0aHBhZENoYXJPbmVCeXRlU3RyaW5nX2FsbG9jYXRlX2FsbG9jYXRlRnJvbU9uZUJ5dGVMaXN0T25lQnl0ZVN0cmluZ19hbGxvY2F0ZUZyb21PbmVCeXRlTGlzdE9uZUJ5dGVTdHJpbmdfc2V0QXRvbmVCeXRlU3RyaW5nX1R3b0J5dGVTdHJpbmdfYWxsb2NhdGVGcm9tVHdvQnl0ZUxpc3RUd29CeXRlU3RyaW5nX2FsbG9jYXRlRnJvbVR3b0J5dGVMaXN0X0V4dGVybmFsT25lQnl0ZVN0cmluZ19FeHRlcm5hbFR3b0J5dGVTdHJpbmdfU3RyaW5nTWF0Y2hfU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhYmxlX2lucHV0X3BhdHRlcm5fU3RyaW5nQWxsTWF0Y2hlc0l0ZXJhdG9yX0Fic3RyYWN0VHlwZUFic3RyYWN0VHlwZV90b1N0cmluZ1R5cGVfZ2V0SGFzaENvZGVfVHlwZVJlZl9UeXBlUGFyYW1ldGVyX1dlYWtQcm9wZXJ0eV9uZXdXZWFrUHJvcGVydHlfbmV3V2Vha1Byb3BlcnR5X2dldEtleVdlYWtQcm9wZXJ0eV9nZXRWYWx1ZVdlYWtQcm9wZXJ0eV9zZXRWYWx1ZURlcHJlY2F0ZWRleHBpcmVzVXNlIGBtZXNzYWdlYCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gRGFydCAzLjAuMERlcHJlY2F0ZWQgZmVhdHVyZTogX092ZXJyaWRlUHJvdmlzaW9uYWxfUHJveHlCaWdJbnR0cnlQYXJzZUJvb2xfZnJvbUVudmlyb25tZW50RGF0ZVRpbWVfTUlDUk9TRUNPTkRfSU5ERVhfTUlMTElTRUNPTkRfSU5ERVhfU0VDT05EX0lOREVYX01JTlVURV9JTkRFWF9IT1VSX0lOREVYX0RBWV9JTkRFWF9XRUVLREFZX0lOREVYX01PTlRIX0lOREVYX1lFQVJfSU5ERVhfX3BhcnRzX0RBWVNfVU5USUxfTU9OVEhtb25kYXl0dWVzZGF5d2VkbmVzZGF5dGh1cnNkYXlmcmlkYXlzYXR1cmRheXN1bmRheWRheXNQZXJXZWVramFudWFyeWZlYnJ1YXJ5bWFyY2hhcHJpbGp1bmVqdWx5YXVndXN0c2VwdGVtYmVyb2N0b2Jlcm5vdmVtYmVyZGVjZW1iZXJtb250aHNQZXJZZWFyX21heE1pbGxpc2Vjb25kc1NpbmNlRXBvY2g4NjQwMDAwMDAwMDAwMDAwX3BhcnNlRm9ybWF0XihbKy1dP1xkezQsNn0pLT8oXGRcZCktPyhcZFxkKSg/OlsgVF0oXGRcZCkoPzo6PyhcZFxkKSg/Ojo/KFxkXGQpKD86Wy4sXShcZHsxLDZ9KSk/KT8pPyggP1t6Wl18ID8oWy0rXSkoXGRcZCkoPzo6PyhcZFxkKSk/KT8pPyR5ZWFybW9udGhkYXlob3VybWludXRlbWlsbGlzZWNvbmRtaWNyb3NlY29uZHV0Y2Zyb21NaWxsaXNlY29uZHNTaW5jZUVwb2NoZnJvbU1pY3Jvc2Vjb25kc1NpbmNlRXBvY2htaWNyb3NlY29uZHNTaW5jZUVwb2NoX3dpdGhWYWx1ZURhdGVUaW1lIGlzIG91dHNpZGUgdmFsaWQgcmFuZ2U6ICdpc1V0YycgZmxhZyBtYXkgbm90IGJlICdudWxsJ19ub3dfZ2V0Q3VycmVudE1pY3Jvc0RhdGVUaW1lX2N1cnJlbnRUaW1lTWljcm9zX3RpbWVab25lTmFtZUZvckNsYW1wZWRTZWNvbmRzRGF0ZVRpbWVfdGltZVpvbmVOYW1lc2Vjb25kc1NpbmNlRXBvY2hfdGltZVpvbmVPZmZzZXRJblNlY29uZHNGb3JDbGFtcGVkU2Vjb25kc0RhdGVUaW1lX3RpbWVab25lT2Zmc2V0SW5TZWNvbmRzX2xvY2FsVGltZVpvbmVBZGp1c3RtZW50SW5TZWNvbmRzRGF0ZVRpbWVfbG9jYWxUaW1lWm9uZUFkanVzdG1lbnRJblNlY29uZHNfY29tcHV0ZVVwcGVyUGFydGxvY2FsTWljcm9zcmVzdWx0WWVhcnJlc3VsdE1vbnRocmVzdWx0RGF5ZGF5c1NpbmNlMTk3MDg2NDAwMDAwMDAwZGF5c3lkMXlkMnlkM2lzTGVhcGRheXNVbnRpbE1vbnRocmVzdWx0TWljcm9zZWNvbmRyZXN1bHRNaWxsaXNlY29uZHJlc3VsdFNlY29uZHJlc3VsdE1pbnV0ZXJlc3VsdEhvdXIzNjAwMDAwMDAwcmVzdWx0V2Vla2RheV9sb2NhbERhdGVJblV0Y01pY3Jvc21pY3Jvc19mbG9vcmVkRGl2aXNpb25fZGF5RnJvbVllYXJfaXNMZWFwWWVhcl93ZWVrRGF5X2VxdWl2YWxlbnRZZWFycmVjZW50WWVhcl95ZWFyc0Zyb21TZWNvbmRzU2luY2VFcG9jaF9lcXVpdmFsZW50U2Vjb25kc2VxdWl2YWxlbnRZZWFyZXF1aXZhbGVudERheXNkaWZmRGF5c190aW1lWm9uZU9mZnNldEluU2Vjb25kc2VxdWl2YWxlbnRTZWNvbmRzX3RpbWVab25lTmFtZWZvcm1hdHRlZFN0cmluZ3BhcnNlSW50T3JaZXJvbWF0Y2hlZHBhcnNlTWlsbGlBbmRNaWNyb3NlY29uZHN5ZWFyc2FkZE9uZU1pbGxpc2Vjb25kbWlsbGlBbmRNaWNyb3NlY29uZHNob3VyRGlmZmVyZW5jZW1pbnV0ZURpZmZlcmVuY2VUaW1lIG91dCBvZiByYW5nZUludmFsaWQgZGF0ZSBmb3JtYXRpc0JlZm9yZWlzQWZ0ZXJpc0F0U2FtZU1vbWVudEFzdG9Mb2NhbHRvVXRjX2ZvdXJEaWdpdHNhYnNOMDAwX3NpeERpZ2l0c190aHJlZURpZ2l0c190d29EaWdpdHNzZWNfYnJva2VuRG93bkRhdGVUb1ZhbHVlcmVhbE1vbnRoYWRqdXN0bWVudHpvbmVPZmZzZXR0aW1lWm9uZU5hbWVVVEN0aW1lWm9uZU9mZnNldG9mZnNldEluU2Vjb25kc3dlZWtkYXluYW5pbmZpbml0eW5lZ2F0aXZlSW5maW5pdHltaW5Qb3NpdGl2ZTVlLTMyNG1heEZpbml0ZV9uYXRpdmVQYXJzZV90cnlQYXJzZURvdWJsZWRpZ2l0c1NlZW5leHBvbmVudERlbHRhZmlyc3RDaGFybmZpbml0eWV4cFBhcnRuZWdFeHBvbmVudEludmFsaWQgZG91YmxlRHVyYXRpb25taWNyb3NlY29uZHNQZXJNaWxsaXNlY29uZG1pbGxpc2Vjb25kc1BlclNlY29uZHNlY29uZHNQZXJNaW51dGVtaW51dGVzUGVySG91cmhvdXJzUGVyRGF5bWljcm9zZWNvbmRzUGVyU2Vjb25kbWljcm9zZWNvbmRzUGVyTWludXRlbWljcm9zZWNvbmRzUGVySG91cm1pY3Jvc2Vjb25kc1BlckRheW1pbGxpc2Vjb25kc1Blck1pbnV0ZW1pbGxpc2Vjb25kc1BlckhvdXJtaWxsaXNlY29uZHNQZXJEYXlzZWNvbmRzUGVySG91cnNlY29uZHNQZXJEYXltaW51dGVzUGVyRGF5X2R1cmF0aW9uX21pY3Jvc2Vjb25kc3F1b3RpZW50aW5EYXlzaW5Ib3Vyc2luTWludXRlc2luU2Vjb25kc3NpeERpZ2l0czAwMDAwdHdvRGlnaXRNaW51dGVzdHdvRGlnaXRTZWNvbmRzc2l4RGlnaXRVc19zdHJpbmdUb1NhZmVTdHJpbmdfb2JqZWN0VG9TdHJpbmdBc3NlcnRpb25FcnJvckFzc2VydGlvbiBmYWlsZWROdWxsVGhyb3duRXJyb3JUaHJvdyBvZiBudWxsLkFyZ3VtZW50RXJyb3JfaGFzVmFsdWVpbnZhbGlkVmFsdWVNdXN0IG5vdCBiZSBudWxsY2hlY2tOb3ROdWxsX2Vycm9yTmFtZUludmFsaWQgYXJndW1lbnQocylfZXJyb3JFeHBsYW5hdGlvbmV4cGxhbmF0aW9uZXJyb3JWYWx1ZVZhbHVlIG5vdCBpbiByYW5nZUludmFsaWQgdmFsdWVpbmRleGFibGVjaGVja1ZhbHVlSW5JbnRlcnZhbGNoZWNrVmFsaWRJbmRleGNoZWNrVmFsaWRSYW5nZXN0YXJ0TmFtZWVuZE5hbWVjaGVja05vdE5lZ2F0aXZlOiBOb3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDogTm90IGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA6IE5vdCBpbiByYW5nZSAsIGluY2x1c2l2ZTogVmFsaWQgdmFsdWUgcmFuZ2UgaXMgZW1wdHk6IE9ubHkgdmFsaWQgdmFsdWUgaXMgSW5kZXhFcnJvckluZGV4IG91dCBvZiByYW5nZTogaW5kZXggbXVzdCBub3QgYmUgbmVnYXRpdmU6IG5vIGluZGljZXMgYXJlIHZhbGlkOiBpbmRleCBzaG91bGQgYmUgbGVzcyB0aGFuIEZhbGxUaHJvdWdoRXJyb3JfdGhyb3dOZXdjYXNlX2NsYXVzZV9wb3MnOiBTd2l0Y2ggY2FzZSBmYWxsLXRocm91Z2ggYXQgbGluZSBfY2xhc3NOYW1lQWJzdHJhY3RDbGFzc0luc3RhbnRpYXRpb25FcnJvcl90aHJvd05ld0Nhbm5vdCBpbnN0YW50aWF0ZSBhYnN0cmFjdCBjbGFzcyBfdXJsICcnIGxpbmUgX2V4aXN0aW5nQXJndW1lbnROYW1lc19pbnZvY2F0aW9uX2ludm9jYXRpb25fdHlwZWludm9jYXRpb25fdHlwZVVzZSBOb1N1Y2hNZXRob2Qud2l0aEludm9jYXRpb24gaW5zdGVhZGV4aXN0aW5nQXJndW1lbnROYW1lc190aHJvd05ld0ludm9jYXRpb25fdGhyb3dOZXdJZk5vdExvYWRlZF9OYW1lZEFyZ3VtZW50c01hcF9leGlzdGluZ01ldGhvZFNpZ25hdHVyZU5vU3VjaE1ldGhvZEVycm9yX2V4aXN0aW5nTWV0aG9kU2lnbmF0dXJlaW52b2NhdGlvblR5cGVfdG9TdHJpbmdEZXByZWNhdGVkTm9TdWNoTWV0aG9kRXJyb3I6IENhbm5vdCBhc3NpZ24gdG8gZmluYWwgdmFyaWFibGUgJ2FyZ3NfbWlzbWF0Y2hhcmdzX21lc3NhZ2Ugd2l0aCBtYXRjaGluZyBhcmd1bWVudHN0eXBlX3N0cmdldHRlciBvciBzZXR0ZXJtc2dfYnVmTm9TdWNoTWV0aG9kRXJyb3I6IGlzX3R5cGVfY2FsbFRoZSBudWxsIG9iamVjdCBkb2VzIG5vdCBoYXZlIGEgVGhlICcgd2FzIGNhbGxlZCBvbiBudWxsLkNsb3N1cmUgY2FsbCB3aXRoIG1pc21hdGNoZWQgYXJndW1lbnRzOiBmdW5jdGlvbiAnQXR0ZW1wdGVkIHRvIHVzZSB0eXBlICcnIGFzIGEgZnVuY3Rpb24uIFNpbmNlIHR5cGVzIGRvIG5vdCBkZWZpbmUgYSBtZXRob2QgJ2NhbGwnLCB0aGlzIGlzIG5vdCBwb3NzaWJsZS4gRGlkIHlvdSBpbnRlbmQgdG8gY2FsbCB0aGUgIGNvbnN0cnVjdG9yIGFuZCBmb3JnZXQgdGhlICduZXcnIG9wZXJhdG9yPycgaGFzIG5vIGluc3RhbmNlIFN1cGVyIGNsYXNzIG9mIGNsYXNzICcnIGhhcyBubyBpbnN0YW5jZSBzdXBlci5ObyBzdGF0aWMgZGVjbGFyZWQgaW4gY2xhc3MgJ05vIGNvbnN0cnVjdG9yICcgZGVjbGFyZWQgaW4gY2xhc3MgJ05vIHRvcC1sZXZlbCBkZWNsYXJlZC5SZWNlaXZlcjogdG9wLWxldmVsUmVjZWl2ZXI6IFRyaWVkIGNhbGxpbmc6IGZvcm1hbFBhcmFtZXRlcnMKRm91bmQ6IHR5cGVBcmd1bWVudHNCdWZhcmd1bWVudHNCdWZleGlzdGluZ1NpZ2FyZ3NNc2draW5kQnVmbXNnQnVmVW5zdXBwb3J0ZWRFcnJvclVuc3VwcG9ydGVkIG9wZXJhdGlvbjogVW5pbXBsZW1lbnRlZEVycm9yVW5pbXBsZW1lbnRlZEVycm9yOiBTdGF0ZUVycm9yQmFkIHN0YXRlOiBDb25jdXJyZW50TW9kaWZpY2F0aW9uRXJyb3Jtb2RpZmllZE9iamVjdENvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGR1cmluZyBpdGVyYXRpb24uQ29uY3VycmVudCBtb2RpZmljYXRpb24gZHVyaW5nIGl0ZXJhdGlvbjogT3V0T2ZNZW1vcnlFcnJvck91dCBvZiBNZW1vcnlTdGFja092ZXJmbG93RXJyb3JTdGFjayBPdmVyZmxvd0N5Y2xpY0luaXRpYWxpemF0aW9uRXJyb3JSZWFkaW5nIHN0YXRpYyB2YXJpYWJsZSBkdXJpbmcgaXRzIGluaXRpYWxpemF0aW9uUmVhZGluZyBzdGF0aWMgdmFyaWFibGUgJycgZHVyaW5nIGl0cyBpbml0aWFsaXphdGlvbl9FeGNlcHRpb25FeGNlcHRpb246IEZvcm1hdEV4Y2VwdGlvbm9iamVjdFNvdXJjZWxpbmVOdW1wcmV2aW91c0NoYXJXYXNDUiAoYXQgbGluZSAsIGNoYXJhY3RlciApCiAoYXQgY2hhcmFjdGVyIHNsaWNlbWFya09mZnNldCAoYXQgb2Zmc2V0IEludGVnZXJEaXZpc2lvbkJ5WmVyb0V4Y2VwdGlvbkV4cGFuZG9fbWluU2l6ZV9kZWxldGVkRW50cnlvbGRfZGF0YW5ld19zaXplRXhwYW5kb3MgYXJlIG5vdCBhbGxvd2VkIG9uIHN0cmluZ3MsIG51bWJlcnMsIGJvb2xlYW5zIG9yIG51bGxfbGltaXRFeHBhbmRvOndwZW1wdHlfaWR4X2FwcGx5RnVuY3Rpb25fYXBwbHlfUEFSU0VfTElNSVRTMTA3Mzc0MTgyNDQ2MTE2ODYwMTg0MjczODc5MDQ0MDUyNTU1MTUzMDE4OTc2MjY3MTE1MjkyMTUwNDYwNjg0Njk3NjE0OTAxMTYxMTkzODQ3NjU2MjU3ODk3MzAyMjMwNTM2MDI4MTYzOTA5ODIxMDQ4NTgyOTg4MDQ5MTM1MDg1MTcxNzY3Mjk5MjA4OTEwMDAwMDAwMDAwMDAwMDAwMDA1MDU0NDcwMjg0OTkyOTM3NzEyMjE4NjExMTA2NzQwNDM2OTkyNjY1NDE2NjA5MTgzMTc5ODQxMjE3Nzk1MzMzNzgwOTM3MTEzNjQzNzg5Mzg5MDM4MDg1OTM3NTI4NjI0MjMwNTE1MDk4MTU3OTMzNzQ4MTMzNjc1ODIwODEwMjQ3OTkwMDY2ODU3ODI4ODQxMjExNjM4NDAwMDAwMDAwMDAwMDAwMzI0MzkxOTkzMjUyMTUwODY4MTI4MjgxMDA1Nzg4MzA4Mjc1MjUwNDAzNjM2MTkzNjQ2NzM4Mzg3NjQ4ODMzODQ2NTM1NzgyNDI0ODExNTI4NzMyMDM3MzY1NzYyMzIyMTgyNjUwODkyMTI0MTYzNTM4MTQ3ODMyMDU0NjkwNDE1MzE0NDEwMDAwMDAwMDAwMDA3ODc2NjI3ODM3ODg1NDk3NjExNjY3ODg5NTE0OTUyOTg0OTYxMjM4NjQyMDY4MzY5MzEwMTA1NjMzNzkyMjA1MDgwNTY2NDA2MjUxMzE2MjE3MDM4NDIyNjcxMzZfbWF4SW50NjRfbWluSW50NjRfaW50NjRVbnNpZ25lZE92ZXJmbG93TGltaXRzNjg3MTk0NzY3MzVfaW50NjRVbnNpZ25lZFNtaU92ZXJmbG93TGltaXRzMTE1MjkyMTUwNDYwNjg0Njk3NV9pbnQ2NE92ZXJmbG93TGltaXRzX3RyeVBhcnNlU21paXhzbWlMaW1pdF9rTnVsbF90aHJvd0Zvcm1hdEV4Y2VwdGlvbkludmFsaWQgbnVtYmVySW52YWxpZCByYWRpeC0gbnVtYmVyYWxsb3dVNjR0YWJsZUluZGV4c21hbGxCbG9ja1NpemVibG9ja0VuZG11bHRpcGxpZXJwb3NpdGl2ZU92ZXJmbG93TGltaXRuZWdhdGl2ZU92ZXJmbG93TGltaXRQb3NpdGl2ZSBpbnB1dCBleGNlZWRzIHRoZSBsaW1pdCBvZiBpbnRlZ2VyTmVnYXRpdmUgaW5wdXQgZXhjZWVkcyB0aGUgbGltaXQgb2YgaW50ZWdlcl9wYXJzZUJsb2NrX2luaXRJbnQ2NE92ZXJmbG93TGltaXRzSW50ZWdlcl9mcm9tRW52aXJvbm1lbnRUaGUgc291cmNlIG11c3Qgbm90IGJlIG51bGxSYWRpeCAgbm90IGluIHJhbmdlIDIuLjM2Z2VuZXJpY01ldGhvZF9JbnZvY2F0aW9uX3Bvc2l0aW9uYWxfbmFtZWRfZW5zdXJlTm9uTnVsbFR5cGVzVHlwZSBhcmd1bWVudHMgbXVzdCBiZSBub24tbnVsbCwgd2FzIG51bGwgYXQgaW5kZXggX21ha2VVbm1vZGlmaWFibGVfR2VuZXJhdG9ySXRlcmFibGVCaWRpcmVjdGlvbmFsSXRlcmF0b3Jtb3ZlUHJldmlvdXNfZnJvbUxpdGVyYWxMaXN0X25ld2NvcHlSYW5nZU5vdCBiaWcgZW5vdWdoIHRvIGhvbGQgIGVsZW1lbnRzIGF0IHBvc2l0aW9uIHdyaXRlSXRlcmFibGV0YXJnZXRMZW5ndGhNYXBFbnRyeShfSEFTSF9DT0RFY2xhc3MgTnVsbCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkX3JldHVybkludE51bGxfcmV0dXJuRG91YmxlTnVsbF9oYXNoQ29kZVJuZF9vYmplY3RIYXNoQ29kZU9iamVjdF90b1N0cmluZ19oYXZlU2FtZVJ1bnRpbWVUeXBlT2JqZWN0X2hhdmVTYW1lUnVudGltZVR5cGVfaW5zdGFuY2VPZk9iamVjdF9pbnN0YW5jZU9maW5zdGFudGlhdG9yVHlwZUFyZ3VtZW50c19zaW1wbGVJbnN0YW5jZU9mT2JqZWN0X3NpbXBsZUluc3RhbmNlT2Zfc2ltcGxlSW5zdGFuY2VPZlRydWVfc2ltcGxlSW5zdGFuY2VPZkZhbHNlT2JqZWN0X2VxdWFsc2RhcnQ6Y29yZSNfVHlwZU9iamVjdF9ydW50aW1lVHlwZU1hdGNoZ3JvdXBJbmRpY2VzX01BWF9DQUNIRV9TSVpFX3JlY2VudGx5VXNlZF9maW5kRXNjYXBlQ2hhcgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEAAAAAAQEAAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBZXNjYXBlQ2hhckluZGV4cHJldmlvdXNTbGljZUVuZEluZGV4Mi40UmVnRXhwTWF0Y2hTaW5rc3RhY2tUcmFjZVN0cmluZ1N0YWNrVHJhY2VfY3VycmVudF9TdHJpbmdTdGFja1RyYWNlU3RvcHdhdGNoX2ZyZXF1ZW5jeV9jb21wdXRlRnJlcXVlbmN5U3RvcHdhdGNoX2ZyZXF1ZW5jeWVsYXBzZWRUaWNrc3RpY2tzdGlja3NQZXJTZWNvbmRyZW1haW5pbmdUaWNrc19pbml0VGlja2VyU3RvcHdhdGNoX25vd2Zyb21DaGFyQ29kZXNmcm9tQ2hhckNvZGVTdHJpbmdfZnJvbUVudmlyb25tZW50UnVuZXNObyBlbGVtZW50cy5wcmV2aW91c0NvZGVSdW5lSXRlcmF0b3JfbmV4dFBvc2l0aW9uX2N1cnJlbnRDb2RlUG9pbnRfY2hlY2tTcGxpdFN1cnJvZ2F0ZUluZGV4IGluc2lkZSBzdXJyb2dhdGUgcGFpcjogcmF3SW5kZXhjdXJyZW50U2l6ZWN1cnJlbnRBc1N0cmluZ3ByZXZDb2RlVW5pdFN0cmluZ0J1ZmZlcl9CVUZGRVJfU0laRV9QQVJUU19UT19DT01QQUNUX1BBUlRTX1RPX0NPTVBBQ1RfU0laRV9MSU1JVF9wYXJ0c0NvZGVVbml0c19wYXJ0c0NvbXBhY3Rpb25JbmRleF9wYXJ0c0NvZGVVbml0c1NpbmNlQ29tcGFjdGlvbl9idWZmZXJQb3NpdGlvbl9idWZmZXJDb2RlVW5pdE1hZ25pdHVkZV9jb25zdW1lQnVmZmVyX2FkZFBhcnRwYXJ0c1NpbmNlQ29tcGFjdGlvbl9jb21wYWN0Y29tcGFjdGVkU3RyaW5nQnVmZmVyX2NyZWF0ZVN0cmluZ0Zyb21VaW50MTZBcnJheVN0cmluZ1NpbmtVcmlhdXRob3JpdHl1bmVuY29kZWRQYXRoZGF0YUZyb21TdHJpbmdkYXRhRnJvbUJ5dGVzYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtcGVyY2VudEVuY29kZWRxdWVyeVBhcmFtZXRlcnNBbGxoYXNQb3J0aGFzQWJzb2x1dGVQYXRocmVtb3ZlRnJhZ21lbnRkYXRhRGVsdGFzY2hlbWVFbmRob3N0U3RhcnRwb3J0U3RhcnRwYXRoU3RhcnRxdWVyeVN0YXJ0ZnJhZ21lbnRTdGFydGlzU2ltcGxlLy4uc2NoZW1lQXV0aGZpbGU6Ly9maWxlOi8vLzQ0M2VuY29kZUNvbXBvbmVudGVuY29kZVF1ZXJ5Q29tcG9uZW50ZGVjb2RlQ29tcG9uZW50ZW5jb2RlZENvbXBvbmVudGRlY29kZVF1ZXJ5Q29tcG9uZW50ZW5jb2RlRnVsbGRlY29kZUZ1bGxzcGxpdFF1ZXJ5U3RyaW5ncGFyc2VJUHY0QWRkcmVzc19wYXJzZUlQdjRBZGRyZXNzSWxsZWdhbCBJUHY0IGFkZHJlc3MsIHBhcnRJbmRleHBhcnRTdGFydGludmFsaWQgY2hhcmFjdGVySVB2NCBhZGRyZXNzIHNob3VsZCBjb250YWluIGV4YWN0bHkgNCBwYXJ0c2VhY2ggcGFydCBtdXN0IGJlIGluIHRoZSByYW5nZSAwLi4yNTVwYXJzZUlQdjZBZGRyZXNzSWxsZWdhbCBJUHY2IGFkZHJlc3MsIHBhcnNlSGV4YW4gSVB2NiBwYXJ0IGNhbiBvbmx5IGNvbnRhaW4gYSBtYXhpbXVtIG9mIDQgaGV4IGRpZ2l0c2VhY2ggcGFydCBtdXN0IGJlIGluIHRoZSByYW5nZSBvZiBgMHgwLi4weEZGRkZgYWRkcmVzcyBpcyB0b28gc2hvcnR3aWxkY2FyZFNlZW5zZWVuRG90aW52YWxpZCBzdGFydCBjb2xvbi5vbmx5IG9uZSB3aWxkY2FyZCBgOjpgIGlzIGFsbG93ZWR0b28gZmV3IHBhcnRzYXRFbmRpc0xhc3RXaWxkY2FyZGV4cGVjdGVkIGEgcGFydCBhZnRlciBsYXN0IGA6YGFuIGFkZHJlc3Mgd2l0aCBhIHdpbGRjYXJkIG11c3QgaGF2ZSBsZXNzIHRoYW4gNyBwYXJ0c2FuIGFkZHJlc3Mgd2l0aG91dCBhIHdpbGRjYXJkIG11c3QgY29udGFpbiBleGFjdGx5IDggcGFydHN3aWxkQ2FyZExlbmd0aF9VcmlfaXNXaW5kb3dzQ2FjaGVkX3VzZXJJbmZvX3F1ZXJ5X2ZyYWdtZW50X3BhdGhTZWdtZW50c19oYXNoQ29kZUNhY2hlX3F1ZXJ5UGFyYW1ldGVyc19xdWVyeVBhcmFtZXRlckxpc3RzX3VucmVzZXJ2ZWRUYWJsZV91bnJlc2VydmVkMjM5NlRhYmxlX2VuY29kZUZ1bGxUYWJsZV9zY2hlbWVUYWJsZV9zY2hlbWVMb3dlclRhYmxlX3N1YkRlbGltaXRlcnNUYWJsZV9nZW5EZWxpbWl0ZXJzVGFibGVfdXNlcmluZm9UYWJsZV9yZWdOYW1lVGFibGVfcGF0aENoYXJUYWJsZV9wYXRoQ2hhck9yU2xhc2hUYWJsZV9xdWVyeUNoYXJUYWJsZV96b25lSURUYWJsZV9pc1dpbmRvd3NQbGF0Zm9ybVVyaV9pc1dpbmRvd3NQbGF0Zm9ybW5vdFNpbXBsZUludmFsaWQgZW1wdHkgc2NoZW1ldXNlckluZm9TdGFydEludmFsaWQgcG9ydGFsbG93U2NoZW1lX3dyaXRlQXV0aG9yaXR5X2RlZmF1bHRQb3J0dGhpc1NjaGVtZV9jb21wYXJlU2NoZW1lc2NoZW1lQ2hhcnVyaUNoYXJsb3dlckNoYXJfbWFrZUh0dHBVcmloYXNVc2VySW5mb2hvc3RFbmRlc2NhcGVGb3Jab25lSURJbnZhbGlkIElQdjYgaG9zdCBlbnRyeS5JbnZhbGlkIGVuZCBvZiBhdXRob3JpdHlwb3J0U3RyaW5nX2NoZWNrTm9uV2luZG93c1BhdGhSZXNlcnZlZENoYXJhY3RlcnNzZWdtZW50c2FyZ3VtZW50RXJyb3JJbGxlZ2FsIHBhdGggY2hhcmFjdGVyIF9jaGVja1dpbmRvd3NQYXRoUmVzZXJ2ZWRDaGFyYWN0ZXJzZmlyc3RTZWdtZW50WyIqLzo8Pj9cXHxdSWxsZWdhbCBjaGFyYWN0ZXIgaW4gcGF0aElsbGVnYWwgY2hhcmFjdGVyIGluIHBhdGg6IF9jaGVja1dpbmRvd3NEcml2ZUxldHRlcklsbGVnYWwgZHJpdmUgbGV0dGVyIF9tYWtlRmlsZVVyaXNsYXNoVGVybWluYXRlZF9tYWtlV2luZG93c0ZpbGVVcmxcXD9cVU5DXFdpbmRvd3MgcGF0aHMgd2l0aCBcXD9cIHByZWZpeCBtdXN0IGJlIGFic29sdXRlV2luZG93cyBwYXRocyB3aXRoIGRyaXZlIGxldHRlciBtdXN0IGJlIGFic29sdXRlaG9zdFBhcnRwYXRoUGFydHNjaGVtZUNoYW5nZWRwYXRoVG9TcGxpdHF1ZXJ5UGFyYW1ldGVyTGlzdHNfbWFrZVBvcnRfbWFrZUhvc3RzdHJpY3RJUHY2TWlzc2luZyBlbmQgYF1gIHRvIG1hdGNoIGBbYCBpbiBob3N0em9uZUlEem9uZUlEc3RhcnQlMjVfY2hlY2tab25lSURfaXNab25lSURDaGFyX25vcm1hbGl6ZVpvbmVJRHNlY3Rpb25TdGFydFpvbmVJRCBzaG91bGQgbm90IGNvbnRhaW4gJSBhbnltb3JlX2lzUmVnTmFtZUNoYXJfbm9ybWFsaXplUmVnTmFtZV9tYWtlU2NoZW1lZmlyc3RDb2RlVW5pdFNjaGVtZSBub3Qgc3RhcnRpbmcgd2l0aCBhbHBoYWJldGljIGNoYXJhY3RlcmNvbnRhaW5zVXBwZXJDYXNlSWxsZWdhbCBzY2hlbWUgY2hhcmFjdGVyX2Nhbm9uaWNhbGl6ZVNjaGVtZV9tYWtlVXNlckluZm9fbWFrZVBhdGhlbnN1cmVMZWFkaW5nU2xhc2hCb3RoIHBhdGggYW5kIHBhdGhTZWdtZW50cyBzcGVjaWZpZWRlc2NhcGVEZWxpbWl0ZXJzX25vcm1hbGl6ZVBhdGhfbWFrZVF1ZXJ5Qm90aCBxdWVyeSBhbmQgcXVlcnlQYXJhbWV0ZXJzIHNwZWNpZmllZHdyaXRlUGFyYW1ldGVyX21ha2VGcmFnbWVudF9ub3JtYWxpemVFc2NhcGVsb3dlckNhc2VmaXJzdERpZ2l0VmFsdWVzZWNvbmREaWdpdFZhbHVlX2VzY2FwZUNoYXIwMTIzNDU2Nzg5QUJDREVGZW5jb2RlZEJ5dGVzX25vcm1hbGl6ZU9yU3Vic3RyaW5nY2hhclRhYmxlX2lzU2NoZW1lQ2hhcmFjdGVyX2lzR2VuZXJhbERlbGltaXRlcl9tZXJnZVBhdGhzYmFja0NvdW50cmVmU3RhcnRiYXNlRW5kX21heUNvbnRhaW5Eb3RTZWdtZW50cy8uX3JlbW92ZURvdFNlZ21lbnRzX25vcm1hbGl6ZVJlbGF0aXZlUGF0aF9lc2NhcGVTY2hlbWUlM0F0YXJnZXRTY2hlbWV0YXJnZXRVc2VySW5mb3RhcmdldEhvc3R0YXJnZXRQb3J0dGFyZ2V0UGF0aHRhcmdldFF1ZXJ5bWVyZ2VkUGF0aENhbm5vdCB1c2Ugb3JpZ2luIHdpdGhvdXQgYSBzY2hlbWU6IE9yaWdpbiBpcyBvbmx5IGFwcGxpY2FibGUgc2NoZW1lcyBodHRwIGFuZCBodHRwczogOiBVUkkgc2hvdWxkIGhhdmUgYSBub24tZW1wdHkgaG9zdCBuYW1lOiA6Ly9DYW5ub3QgZXh0cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEgIFVSSUNhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSBVUkkgd2l0aCBhIHF1ZXJ5IGNvbXBvbmVudENhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSBVUkkgd2l0aCBhIGZyYWdtZW50IGNvbXBvbmVudF90b0ZpbGVQYXRoQ2Fubm90IGV4dHJhY3QgYSBub24tV2luZG93cyBmaWxlIHBhdGggZnJvbSBhIGZpbGUgVVJJIHdpdGggYW4gYXV0aG9yaXR5X3RvV2luZG93c0ZpbGVQYXRoaGFzRHJpdmVMZXR0ZXJfaXNQYXRoQWJzb2x1dGVzc19pbml0aWFsaXplVGV4dF9zcGxpdFF1ZXJ5U3RyaW5nQWxscGFyc2VQYWlyX3VyaUVuY29kZWNhbm9uaWNhbFRhYmxlc3BhY2VUb1BsdXNfaGV4Q2hhclBhaXJUb0J5dGVJbnZhbGlkIFVSTCBlbmNvZGluZ191cmlEZWNvZGVwbHVzVG9TcGFjZUlsbGVnYWwgcGVyY2VudCBlbmNvZGluZyBpbiBVUklUcnVuY2F0ZWQgVVJJX2lzQWxwaGFiZXRpY0NoYXJhY3Rlcl9pc1VucmVzZXJ2ZWRDaGFyVXJpRGF0YV9ub1NjaGVtZV9zZXBhcmF0b3JJbmRpY2VzX3VyaUNhY2hlX2Jhc2U2NF90b2tlbkNoYXJUYWJsZV91cmljVGFibGVfYmFzZTY0VGFibGVjaGFyc2V0TmFtZWVuY29kaW5nTmFtZTtiYXNlNjQsZnJvbUJ5dGVzU2NoZW1lIG11c3QgYmUgJ2RhdGEnRGF0YSB1cmkgbXVzdCBub3QgaGF2ZSBhdXRob3JpdHlEYXRhIHVyaSBtdXN0IG5vdCBoYXZlIGEgZnJhZ21lbnQgcGFydHNsYXNoSW5kZXhJbnZhbGlkIE1JTUUgdHlwZTtjaGFyc2V0PVBhcmFtZXRlciBuYW1lcyBtdXN0IG5vdCBiZSBlbXB0eVBhcmFtZXRlciB2YWx1ZXMgbXVzdCBub3QgYmUgZW1wdHlwYXJhbWV0ZXJzWyJfdmFsaWRhdGVNaW1lVHlwZURvZXMgbm90IHN0YXJ0IHdpdGggJ2RhdGE6J2NvbG9uSW5kZXhxdWVyeUluZGV4cGFyYW1ldGVyU3RhcnRwYXJhbWV0ZXJFbmRpc0Jhc2U2NGtleVN0YXJ0a2V5RW5kY29udGVudFRleHRJbnZhbGlkIHBlcmNlbnQgZXNjYXBlVW5rbm93biBjaGFyc2V0OiBsYXN0U2VwYXJhdG9yRXhwZWN0aW5nICc9J191cmlFbmNvZGVCeXRlc25vbi1ieXRlIHZhbHVlX1NpbXBsZVVyaV9zY2hlbWVFbmRfaG9zdFN0YXJ0X3BvcnRTdGFydF9wYXRoU3RhcnRfcXVlcnlTdGFydF9mcmFnbWVudFN0YXJ0X3NjaGVtZUNhY2hlX2lzRmlsZV9pc0h0dHBfaXNIdHRwc19pc1BhY2thZ2VfaXNTY2hlbWVpc0h0dHBPcmlnaW4gaXMgb25seSBhcHBsaWNhYmxlIHRvIHNjaGVtZXMgaHR0cCBhbmQgaHR0cHM6IF9pc1BvcnRwb3J0RGlnaXRTdGFydF9zaW1wbGVNZXJnZV90b05vblNpbXBsZW5ld1VyaXJlZlVyaWJhc2VTdGFydHJlZkVuZF9EYXRhVXJpX291dHN0YW5kaW5nTG9hZFJlcXVlc3RzX21heEFzY2lpX21heExhdGluMV9tYXhVdGYxNl9tYXhVbmljb2RlcHJvdmlzaW9uYWxwcm94eV9QRVJDRU5UX0FNUEVSU0FORF9QTFVTX1NMQVNIX0VRVUFMU19VUFBFUl9DQVNFX0FfVVBQRVJfQ0FTRV9aX0xFRlRfQlJBQ0tFVF9CQUNLU0xBU0hfUklHSFRfQlJBQ0tFVF9MT1dFUl9DQVNFX0FfTE9XRVJfQ0FTRV9GX0xPV0VSX0NBU0VfWl9oZXhEaWdpdHNfc2NoZW1lRW5kSW5kZXhfaG9zdFN0YXJ0SW5kZXhfcG9ydFN0YXJ0SW5kZXhfcGF0aFN0YXJ0SW5kZXhfcXVlcnlTdGFydEluZGV4X2ZyYWdtZW50U3RhcnRJbmRleF9ub3RTaW1wbGVJbmRleF91cmlTdGFydF9ub25TaW1wbGVFbmRTdGF0ZXNfc2NoZW1lU3RhcnRfc2Nhbm5lclRhYmxlc19tYXhfbWluX25ld0RpZ2l0c19jb21wbGV0ZURlZmVycmVkTG9hZHNzdGlsbE91dHN0YW5kaW5nTG9hZFJlcXVlc3Rzb3V0c3RhbmRpbmdSZXF1ZXN0c19nZXRIYXNoT2JqZWN0X2dldEhhc2hfc2V0SGFzaE9iamVjdF9zZXRIYXNoX3Vuc3VwcG9ydGVkVXJpQmFzZSdVcmkuYmFzZScgaXMgbm90IHN1cHBvcnRlZElkZW50aWNhbF9jb21wYXJpc29uaWRlbnRpdHlIYXNoQ29kZV9jcmVhdGVUYWJsZXN0YWJsZXNkZWZhdWx0VHJhbnNpdGlvbnNldENoYXJzdHJhbnNpdGlvbjAxMjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LS5ffiEkJicoKSorLDs9QVowOWF6Ky0uX3NjYW5fc3RhcnRzV2l0aERhdGFfc3RyaW5nT3JOdWxsTGVuZ3RoZGFydC5faHR0cGNyeXB0by5kYXJ0aHR0cF9kYXRlLmRhcnRodHRwX2hlYWRlcnMuZGFydGh0dHBfaW1wbC5kYXJ0aHR0cF9wYXJzZXIuZGFydGh0dHBfc2Vzc2lvbi5kYXJ0d2Vic29ja2V0LmRhcnR3ZWJzb2NrZXRfaW1wbC5kYXJ0X0J5dGVzQ29uc3VtZXJCYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrY3JfUHJvdG9jb2xTZWxlY3Rvckh0dHBTZXJ2ZXJzZXJ2ZXJIZWFkZXJhdXRvQ29tcHJlc3NpZGxlVGltZW91dGRlZmF1bHRSZXNwb25zZUhlYWRlcnNiaW5kU2VjdXJlbGlzdGVuT25zZXNzaW9uVGltZW91dGNvbm5lY3Rpb25zSW5mb0h0dHBDb25uZWN0aW9uc0luZm9pZGxlSHR0cEhlYWRlcnNhY2NlcHRIZWFkZXJhY2NlcHRDaGFyc2V0SGVhZGVyYWNjZXB0LWNoYXJzZXRhY2NlcHRFbmNvZGluZ0hlYWRlcmFjY2VwdC1lbmNvZGluZ2FjY2VwdExhbmd1YWdlSGVhZGVyYWNjZXB0LWxhbmd1YWdlYWNjZXB0UmFuZ2VzSGVhZGVyYWNjZXB0LXJhbmdlc2FnZUhlYWRlcmFnZWFsbG93SGVhZGVyYWxsb3dhdXRob3JpemF0aW9uSGVhZGVyYXV0aG9yaXphdGlvbmNhY2hlQ29udHJvbEhlYWRlcmNhY2hlLWNvbnRyb2xjb25uZWN0aW9uSGVhZGVyY29udGVudEVuY29kaW5nSGVhZGVyY29udGVudC1lbmNvZGluZ2NvbnRlbnRMYW5ndWFnZUhlYWRlcmNvbnRlbnQtbGFuZ3VhZ2Vjb250ZW50TGVuZ3RoSGVhZGVyY29udGVudC1sZW5ndGhjb250ZW50TG9jYXRpb25IZWFkZXJjb250ZW50LWxvY2F0aW9uY29udGVudE1ENUhlYWRlcmNvbnRlbnQtbWQ1Y29udGVudFJhbmdlSGVhZGVyY29udGVudC1yYW5nZWNvbnRlbnRUeXBlSGVhZGVyY29udGVudC10eXBlZGF0ZUhlYWRlcmV0YWdIZWFkZXJldGFnZXhwZWN0SGVhZGVyZXhwZWN0ZXhwaXJlc0hlYWRlcmZyb21IZWFkZXJob3N0SGVhZGVyaWZNYXRjaEhlYWRlcmlmLW1hdGNoaWZNb2RpZmllZFNpbmNlSGVhZGVyaWYtbW9kaWZpZWQtc2luY2VpZk5vbmVNYXRjaEhlYWRlcmlmLW5vbmUtbWF0Y2hpZlJhbmdlSGVhZGVyaWYtcmFuZ2VpZlVubW9kaWZpZWRTaW5jZUhlYWRlcmlmLXVubW9kaWZpZWQtc2luY2VsYXN0TW9kaWZpZWRIZWFkZXJsYXN0LW1vZGlmaWVkbG9jYXRpb25IZWFkZXJtYXhGb3J3YXJkc0hlYWRlcm1heC1mb3J3YXJkc3ByYWdtYUhlYWRlcnByb3h5QXV0aGVudGljYXRlSGVhZGVycHJveHktYXV0aGVudGljYXRlcHJveHlBdXRob3JpemF0aW9uSGVhZGVycHJveHktYXV0aG9yaXphdGlvbnJhbmdlSGVhZGVycmVmZXJlckhlYWRlcnJlZmVyZXJyZXRyeUFmdGVySGVhZGVycmV0cnktYWZ0ZXJ0ZUhlYWRlcnRldHJhaWxlckhlYWRlcnRyYWlsZXJ0cmFuc2ZlckVuY29kaW5nSGVhZGVydHJhbnNmZXItZW5jb2Rpbmd1cGdyYWRlSGVhZGVydXBncmFkZXVzZXJBZ2VudEhlYWRlcnVzZXItYWdlbnR2YXJ5SGVhZGVydmFyeXZpYUhlYWRlcndhcm5pbmdIZWFkZXJ3d3dBdXRoZW50aWNhdGVIZWFkZXJ3d3ctYXV0aGVudGljYXRlQUNDRVBUVXNlIGFjY2VwdEhlYWRlciBpbnN0ZWFkQUNDRVBUX0NIQVJTRVRVc2UgYWNjZXB0Q2hhcnNldEhlYWRlciBpbnN0ZWFkQUNDRVBUX0VOQ09ESU5HVXNlIGFjY2VwdEVuY29kaW5nSGVhZGVyIGluc3RlYWRBQ0NFUFRfTEFOR1VBR0VVc2UgYWNjZXB0TGFuZ3VhZ2VIZWFkZXIgaW5zdGVhZEFDQ0VQVF9SQU5HRVNVc2UgYWNjZXB0UmFuZ2VzSGVhZGVyIGluc3RlYWRBR0VVc2UgYWdlSGVhZGVyIGluc3RlYWRBTExPV1VzZSBhbGxvd0hlYWRlciBpbnN0ZWFkQVVUSE9SSVpBVElPTlVzZSBhdXRob3JpemF0aW9uSGVhZGVyIGluc3RlYWRDQUNIRV9DT05UUk9MVXNlIGNhY2hlQ29udHJvbEhlYWRlciBpbnN0ZWFkQ09OTkVDVElPTlVzZSBjb25uZWN0aW9uSGVhZGVyIGluc3RlYWRDT05URU5UX0VOQ09ESU5HVXNlIGNvbnRlbnRFbmNvZGluZ0hlYWRlciBpbnN0ZWFkQ09OVEVOVF9MQU5HVUFHRVVzZSBjb250ZW50TGFuZ3VhZ2VIZWFkZXIgaW5zdGVhZENPTlRFTlRfTEVOR1RIVXNlIGNvbnRlbnRMZW5ndGhIZWFkZXIgaW5zdGVhZENPTlRFTlRfTE9DQVRJT05Vc2UgY29udGVudExvY2F0aW9uSGVhZGVyIGluc3RlYWRDT05URU5UX01ENVVzZSBjb250ZW50TUQ1SGVhZGVyIGluc3RlYWRDT05URU5UX1JBTkdFVXNlIGNvbnRlbnRSYW5nZUhlYWRlciBpbnN0ZWFkQ09OVEVOVF9UWVBFVXNlIGNvbnRlbnRUeXBlSGVhZGVyIGluc3RlYWREQVRFVXNlIGRhdGVIZWFkZXIgaW5zdGVhZEVUQUdVc2UgZXRhZ0hlYWRlciBpbnN0ZWFkRVhQRUNUVXNlIGV4cGVjdEhlYWRlciBpbnN0ZWFkRVhQSVJFU1VzZSBleHBpcmVzSGVhZGVyIGluc3RlYWRGUk9NVXNlIGZyb21IZWFkZXIgaW5zdGVhZEhPU1RVc2UgaG9zdEhlYWRlciBpbnN0ZWFkSUZfTUFUQ0hVc2UgaWZNYXRjaEhlYWRlciBpbnN0ZWFkSUZfTU9ESUZJRURfU0lOQ0VVc2UgaWZNb2RpZmllZFNpbmNlSGVhZGVyIGluc3RlYWRJRl9OT05FX01BVENIVXNlIGlmTm9uZU1hdGNoSGVhZGVyIGluc3RlYWRJRl9SQU5HRVVzZSBpZlJhbmdlSGVhZGVyIGluc3RlYWRJRl9VTk1PRElGSUVEX1NJTkNFVXNlIGlmVW5tb2RpZmllZFNpbmNlSGVhZGVyIGluc3RlYWRMQVNUX01PRElGSUVEVXNlIGxhc3RNb2RpZmllZEhlYWRlciBpbnN0ZWFkTE9DQVRJT05Vc2UgbG9jYXRpb25IZWFkZXIgaW5zdGVhZE1BWF9GT1JXQVJEU1VzZSBtYXhGb3J3YXJkc0hlYWRlciBpbnN0ZWFkUFJBR01BVXNlIHByYWdtYUhlYWRlciBpbnN0ZWFkUFJPWFlfQVVUSEVOVElDQVRFVXNlIHByb3h5QXV0aGVudGljYXRlSGVhZGVyIGluc3RlYWRQUk9YWV9BVVRIT1JJWkFUSU9OVXNlIHByb3h5QXV0aG9yaXphdGlvbkhlYWRlciBpbnN0ZWFkUkFOR0VVc2UgcmFuZ2VIZWFkZXIgaW5zdGVhZFJFRkVSRVJVc2UgcmVmZXJlckhlYWRlciBpbnN0ZWFkUkVUUllfQUZURVJVc2UgcmV0cnlBZnRlckhlYWRlciBpbnN0ZWFkU0VSVkVSVXNlIHNlcnZlckhlYWRlciBpbnN0ZWFkVEVVc2UgdGVIZWFkZXIgaW5zdGVhZFRSQUlMRVJVc2UgdHJhaWxlckhlYWRlciBpbnN0ZWFkVFJBTlNGRVJfRU5DT0RJTkdVc2UgdHJhbnNmZXJFbmNvZGluZ0hlYWRlciBpbnN0ZWFkVVBHUkFERVVzZSB1cGdyYWRlSGVhZGVyIGluc3RlYWRVU0VSX0FHRU5UVXNlIHVzZXJBZ2VudEhlYWRlciBpbnN0ZWFkVkFSWVVzZSB2YXJ5SGVhZGVyIGluc3RlYWRWSUFVc2UgdmlhSGVhZGVyIGluc3RlYWRVc2Ugd2FybmluZ0hlYWRlciBpbnN0ZWFkV1dXX0FVVEhFTlRJQ0FURVVzZSB3d3dBdXRoZW50aWNhdGVIZWFkZXIgaW5zdGVhZGNvb2tpZUhlYWRlcmNvb2tpZXNldENvb2tpZUhlYWRlcnNldC1jb29raWVDT09LSUVVc2UgY29va2llSGVhZGVyIGluc3RlYWRTRVRfQ09PS0lFVXNlIHNldENvb2tpZUhlYWRlciBpbnN0ZWFkZ2VuZXJhbEhlYWRlcnNHRU5FUkFMX0hFQURFUlNVc2UgZ2VuZXJhbEhlYWRlcnMgaW5zdGVhZGVudGl0eUhlYWRlcnNFTlRJVFlfSEVBREVSU1VzZSBlbnRpdHlIZWFkZXJzIGluc3RlYWRyZXNwb25zZUhlYWRlcnNSRVNQT05TRV9IRUFERVJTVXNlIHJlc3BvbnNlSGVhZGVycyBpbnN0ZWFkcmVxdWVzdEhlYWRlcnNSRVFVRVNUX0hFQURFUlNVc2UgcmVxdWVzdEhlYWRlcnMgaW5zdGVhZGlmTW9kaWZpZWRTaW5jZWNvbnRlbnRMZW5ndGhjaHVua2VkVHJhbnNmZXJFbmNvZGluZ25vRm9sZGluZ0hlYWRlclZhbHVlcGFyYW1ldGVyU2VwYXJhdG9ydmFsdWVTZXBhcmF0b3JwcmVzZXJ2ZUJhY2tzbGFzaEh0dHBTZXNzaW9ucGxhaW5URVhUVXNlIHRleHQgaW5zdGVhZEhUTUxVc2UgaHRtbCBpbnN0ZWFkSlNPTlVzZSBqc29uIGluc3RlYWRvY3RldC1zdHJlYW1Vc2UgYmluYXJ5IGluc3RlYWRwcmltYXJ5VHlwZXN1YlR5cGVDb29raWVtYXhBZ2VodHRwT25seWZyb21TZXRDb29raWVWYWx1ZUh0dHBSZXF1ZXN0cmVxdWVzdGVkVXJpY29va2llc3Nlc3Npb25wcm90b2NvbFZlcnNpb25IdHRwUmVzcG9uc2VkZWFkbGluZWRldGFjaFNvY2tldHdyaXRlSGVhZGVyc2RlZmF1bHRIdHRwUG9ydERFRkFVTFRfSFRUUF9QT1JUVXNlIGRlZmF1bHRIdHRwUG9ydCBpbnN0ZWFkZGVmYXVsdEh0dHBzUG9ydERFRkFVTFRfSFRUUFNfUE9SVFVzZSBkZWZhdWx0SHR0cHNQb3J0IGluc3RlYWRjb25uZWN0aW9uVGltZW91dGF1dG9VbmNvbXByZXNzdXNlckFnZW50Y3JlYXRlSHR0cENsaWVudG9wZW5VcmxwdXRVcmxkZWxldGVVcmxwYXRjaFVybGhlYWRVcmxhdXRoZW50aWNhdGVhZGRDcmVkZW50aWFsc3JlYWxtY3JlZGVudGlhbHNmaW5kUHJveHlmaW5kUHJveHlGcm9tRW52aXJvbm1lbnRhdXRoZW50aWNhdGVQcm94eWFkZFByb3h5Q3JlZGVudGlhbHNiYWRDZXJ0aWZpY2F0ZUNhbGxiYWNrZm9sbG93UmVkaXJlY3RzbWF4UmVkaXJlY3RzSHR0cENsaWVudFJlc3BvbnNlY29tcHJlc3Npb25TdGF0ZWlzUmVkaXJlY3RyZWRpcmVjdHNmb2xsb3dMb29wc0h0dHBDbGllbnRSZXNwb25zZUNvbXByZXNzaW9uU3RhdGVIdHRwQ2xpZW50UmVzcG9uc2VDb21wcmVzc2lvblN0YXRlLm5vdENvbXByZXNzZWRIdHRwQ2xpZW50UmVzcG9uc2VDb21wcmVzc2lvblN0YXRlLmRlY29tcHJlc3NlZEh0dHBDbGllbnRSZXNwb25zZUNvbXByZXNzaW9uU3RhdGUuY29tcHJlc3NlZG5vdENvbXByZXNzZWRkZWNvbXByZXNzZWRjb21wcmVzc2VkSHR0cENsaWVudENyZWRlbnRpYWxzSHR0cENsaWVudEJhc2ljQ3JlZGVudGlhbHN1c2VybmFtZUh0dHBDbGllbnREaWdlc3RDcmVkZW50aWFsc0h0dHBDb25uZWN0aW9uSW5mb1JlZGlyZWN0SW5mb0RldGFjaGVkU29ja2V0dW5wYXJzZWREYXRhSHR0cEV4Y2VwdGlvbkh0dHBFeGNlcHRpb246ICwgdXJpID0gUmVkaXJlY3RFeGNlcHRpb25SZWRpcmVjdEV4Y2VwdGlvbjogX0NyeXB0b1V0aWxzUEFEQ1JMRkxJTkVfTEVOR1RIX2VuY29kZVRhYmxlX2VuY29kZVRhYmxlVXJsU2FmZV9kZWNvZGVUYWJsZV9ybmdieXRlc1RvSGV4Ynl0ZXNUb0Jhc2U2NGFkZExpbmVTZXBhcmF0b3JjaHVua0xlbmd0aG91dHB1dExlbmJhc2U2NFN0cmluZ1RvQnl0ZXNpZ25vcmVJbnZhbGlkQ2hhcmFjdGVyc2V4dHJhc0xlbkludmFsaWQgY2hhcmFjdGVyOiBTaXplIG9mIEJhc2UgNjQgY2hhcmFjdGVycyBpbiBJbnB1dAogICAgICAgICAgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuIElucHV0OiBjdXJyZW50Q29kZVVuaXRfY2h1bmtTaXplSW5Xb3Jkc19kaWdlc3RTaXplSW5Xb3Jkc19iaWdFbmRpYW5Xb3Jkc19oX2RpZ2VzdENhbGxlZEhhc2ggdXBkYXRlIG1ldGhvZCBjYWxsZWQgYWZ0ZXIgZGlnZXN0IHdhcyByZXRyaWV2ZWRfcmVzdWx0QXNCeXRlc191cGRhdGVIYXNoX2FkZDMyX3JvdGwzMm1vZF9zaGlmdF93b3JkVG9CeXRlc19ieXRlc1RvQ2h1bmtkYXRhSW5kZXh3b3JkSW5kZXh3M3cydzF3MHdvcmRjaHVua1NpemVJbkJ5dGVzemVyb1BhZGRpbmdfTUQ1X2tfcnQxX1NIQTFfd0h0dHBEYXRlTW9uVHVlV2VkVGh1RnJpU2F0U3VuSmFuRmViTWFyQXByTWF5SnVuSnVsQXVnU2VwT2N0Tm92RGVjIDA6MCBHTVRTUGZvcm1hdFJmYzExMjNmb3JtYXRSZmM4NTBmb3JtYXRBc2N0aW1lSW52YWxpZCBIVFRQIGRhdGUgZXhwZWN0V2Vla2RheU1vbmRheVR1ZXNkYXlXZWRuZXNkYXlUaHVyc2RheUZyaWRheVNhdHVyZGF5U3VuZGF5ZXhwZWN0TW9udGhleHBlY3ROdW1leHBlY3RFbmRHTVRfcGFyc2VDb29raWVEYXRlSW52YWxpZCBjb29raWUgZGF0ZSBpc0VuZGlzRGVsaW1pdGVyaXNOb25EZWxpbWl0ZXJnZXRNb250aGphbmZlYm1hcmFwcmp1bmp1bGF1Z29jdG5vdmRlY3RpbWVTdHJkYXlPZk1vbnRoU3RybW9udGhTdHJ5ZWFyU3RyZGF5T2ZNb250aHRpbWVMaXN0X0h0dHBIZWFkZXJzX2hlYWRlcnNfbXV0YWJsZV9ub0ZvbGRpbmdIZWFkZXJzX2NvbnRlbnRMZW5ndGhfcGVyc2lzdGVudENvbm5lY3Rpb25fY2h1bmtlZFRyYW5zZmVyRW5jb2RpbmdfZGVmYXVsdFBvcnRGb3JTY2hlbWVkZWZhdWx0UG9ydEZvclNjaGVtZWluaXRpYWxIZWFkZXJzTW9yZSB0aGFuIG9uZSB2YWx1ZSBmb3IgaGVhZGVyIF9jaGVja011dGFibGVjaHVua2VkMS4xVHJ5aW5nIHRvIHNldCAnQ29ubmVjdGlvbjogS2VlcC1BbGl2ZScgb24gSFRUUCAxLjAgaGVhZGVycyB3aXRoIG5vIENvbnRlbnRMZW5ndGhrZWVwLWFsaXZlVHJ5aW5nIHRvIGNsZWFyIENvbnRlbnRMZW5ndGggb24gSFRUUCAxLjAgaGVhZGVycyB3aXRoICdDb25uZWN0aW9uOiBLZWVwLUFsaXZlJyBzZXRUcnlpbmcgdG8gc2V0ICdUcmFuc2Zlci1FbmNvZGluZzogQ2h1bmtlZCcgb24gSFRUUCAxLjAgaGVhZGVyc19hZGRWYWx1ZV91cGRhdGVIb3N0SGVhZGVyX2FkZERhdGVfYWRkSG9zdF9hZGRFeHBpcmVzX2FkZENvbm5lY3Rpb25fYWRkQ29udGVudFR5cGVfYWRkQ29udGVudExlbmd0aF9hZGRUcmFuc2ZlckVuY29kaW5nX2FkZElmTW9kaWZpZWRTaW5jZVVuZXhwZWN0ZWQgdHlwZSBmb3IgaGVhZGVyIG5hbWVkIGxvd2VyQ2FzZVZhbHVlSFRUUCBoZWFkZXJzIGFyZSBub3QgbXV0YWJsZWRlZmF1bHRQb3J0X2ZvbGRIZWFkZXJuYW1lRGF0YV9wYXJzZUNvb2tpZXNwYXJzZUNvb2tpZVN0cmluZ3NraXBXU3BhcnNlTmFtZXBhcnNlVmFsdWVoZWFkZXJWYWx1ZV92YWxpZGF0ZUZpZWxkSW52YWxpZCBIVFRQIGhlYWRlciBmaWVsZCBuYW1lOiBfdmFsaWRhdGVWYWx1ZUludmFsaWQgSFRUUCBoZWFkZXIgZmllbGQgdmFsdWU6IF9IZWFkZXJWYWx1ZV91bm1vZGlmaWFibGVQYXJhbWV0ZXJzX2Vuc3VyZVBhcmFtZXRlcnNGYWlsZWQgdG8gcGFyc2UgaGVhZGVyIHZhbHVlbWF5YmVFeHBlY3RwYXJzZVBhcmFtZXRlcnNwYXJzZVBhcmFtZXRlck5hbWVwYXJzZVBhcmFtZXRlclZhbHVlX0NvbnRlbnRUeXBlX3ByaW1hcnlUeXBlX3N1YlR5cGVsb3dlckNhc2VLZXlfQ29va2llX3BhcnNlU2V0Q29va2llVmFsdWVGYWlsZWQgdG8gcGFyc2UgaGVhZGVyIHZhbHVlIFtwYXJzZUF0dHJpYnV0ZXNwYXJzZUF0dHJpYnV0ZU5hbWVwYXJzZUF0dHJpYnV0ZVZhbHVlbWF4LWFnZWh0dHBvbmx5OyBFeHBpcmVzPTsgTWF4LUFnZT07IERvbWFpbj07IFBhdGg9OyBTZWN1cmU7IEh0dHBPbmx5X3ZhbGlkYXRlTmFtZUludmFsaWQgY2hhcmFjdGVyIGluIGNvb2tpZSBuYW1lLCBjb2RlIHVuaXQ6ICdJbnZhbGlkIGNoYXJhY3RlciBpbiBjb29raWUgdmFsdWUsIGNvZGUgdW5pdDogJ19JTklUX1NJWkVfSHR0cEluY29taW5nX3RyYW5zZmVyTGVuZ3RoX2RhdGFDb21wbGV0ZXJmdWxsQm9keVJlYWR1cGdyYWRlZGhhc1N1YnNjcmliZXJ0cmFuc2Zlckxlbmd0aGRhdGFEb25lX0h0dHBJbmJvdW5kTWVzc2FnZUxpc3RJbnRfaW5jb21pbmdfY29va2llc19IdHRwSW5ib3VuZE1lc3NhZ2VfSHR0cFJlcXVlc3RfaHR0cFNlcnZlcl9odHRwQ29ubmVjdGlvbl9zZXNzaW9uX3JlcXVlc3RlZFVyaV9zZXNzaW9uTWFuYWdlckluc3RhbmNlc2Vzc2lvbklkc0RBUlRTRVNTSURzZXNzaW9uSWRfc2Vzc2lvbk1hbmFnZXJnZXRTZXNzaW9uX21hcmtTZWVueC1mb3J3YXJkZWQtcHJvdG9ob3N0TGlzdHgtZm9yd2FyZGVkLWhvc3RfZGVzdHJveWVkY3JlYXRlU2Vzc2lvbl9IdHRwQ2xpZW50UmVzcG9uc2VfaHR0cFJlcXVlc3RfcmVzcG9uc2VSZWRpcmVjdHNfZ2V0Q29tcHJlc3Npb25TdGF0ZWh0dHBDbGllbnRfaHR0cENsaWVudENvbm5lY3Rpb25IRUFEUE9TVFJlc3BvbnNlIGhhcyBubyBMb2NhdGlvbiBoZWFkZXIgZm9yIHJlZGlyZWN0UmVkaXJlY3QgbG9vcCBkZXRlY3RlZF9vcGVuVXJsRnJvbVJlcXVlc3RfY29ubmVjdGlvbkNsb3NlZF9zaG91bGRBdXRoZW50aWNhdGVQcm94eWNoYWxsZW5nZV9zaG91bGRBdXRoZW50aWNhdGVfYXV0aGVudGljYXRlcHJveHlBdXRocmV0cnlhdXRoQ2hhbGxlbmdlZmluZENyZWRlbnRpYWxzX2ZpbmRQcm94eUNyZWRlbnRpYWxzX3Byb3h5X2ZpbmRDcmVkZW50aWFsc3JlbW92ZUNyZWRlbnRpYWxzX3JlbW92ZVByb3h5Q3JlZGVudGlhbHNfcmVtb3ZlQ3JlZGVudGlhbHNyZXF1ZXN0QXV0aGVudGljYXRpb25fYXV0aGVudGljYXRlUHJveHlhbGdvcml0aG1ub25jZXFvcG5vbmNlQ291bnRzdGFsZWNyZWRzQXZhaWxhYmxlX1RvVWludDhMaXN0X1VpbnQ4TGlzdENvbnZlcnNpb25TaW5rdGFyZ2V0QWRkU3RyZWFtX0h0dHBPdXRib3VuZE1lc3NhZ2VfZW5jb2RpbmdTZXRfYnVmZmVyT3V0cHV0X291dGdvaW5nb3V0Z29pbmdvdXRib3VuZGhlYWRlcnNXcml0dGVuSGVhZGVyIGFscmVhZHkgc2VudF93cml0ZUhlYWRlcl9pc0Nvbm5lY3Rpb25DbG9zZWRfSHR0cFJlc3BvbnNlX3N0YXR1c0NvZGVfcmVhc29uUGhyYXNlX2RlYWRsaW5lX2RlYWRsaW5lVGltZXJkZWZhdWx0SGVhZGVyc19pc0Nsb3NpbmdfZmluZFJlYXNvblBocmFzZUhlYWRlcnMgYWxyZWFkeSBzZW50aGVhZGVyc0Z1dHVyZWRyYWluUmVxdWVzdHNldE91dGdvaW5nX2lzTmV3aGVhZGVyQnl0ZXNzZXRIZWFkZXJTd2l0Y2hpbmcgUHJvdG9jb2xzQ3JlYXRlZEFjY2VwdGVkTm9uLUF1dGhvcml0YXRpdmUgSW5mb3JtYXRpb25ObyBDb250ZW50UmVzZXQgQ29udGVudFBhcnRpYWwgQ29udGVudE11bHRpcGxlIENob2ljZXNNb3ZlZCBQZXJtYW5lbnRseUZvdW5kU2VlIE90aGVyTm90IE1vZGlmaWVkVXNlIFByb3h5VGVtcG9yYXJ5IFJlZGlyZWN0QmFkIFJlcXVlc3RVbmF1dGhvcml6ZWRQYXltZW50IFJlcXVpcmVkRm9yYmlkZGVuTm90IEZvdW5kTWV0aG9kIE5vdCBBbGxvd2VkTm90IEFjY2VwdGFibGVQcm94eSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZFJlcXVlc3QgVGltZS1vdXRDb25mbGljdEdvbmVMZW5ndGggUmVxdWlyZWRQcmVjb25kaXRpb24gRmFpbGVkUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlUmVxdWVzdC1VUkkgVG9vIExvbmdVbnN1cHBvcnRlZCBNZWRpYSBUeXBlUmVxdWVzdGVkIHJhbmdlIG5vdCBzYXRpc2ZpYWJsZUV4cGVjdGF0aW9uIEZhaWxlZEludGVybmFsIFNlcnZlciBFcnJvck5vdCBJbXBsZW1lbnRlZEJhZCBHYXRld2F5U2VydmljZSBVbmF2YWlsYWJsZUdhdGV3YXkgVGltZS1vdXRIdHRwIFZlcnNpb24gbm90IHN1cHBvcnRlZFN0YXR1cyBfSHR0cENsaWVudFJlcXVlc3RfcmVzcG9uc2VDb21wbGV0ZXJfcmVzcG9uc2VfZm9sbG93UmVkaXJlY3RzX21heFJlZGlyZWN0c1JlcXVlc3QgYWxyZWFkeSBzZW50X29uSW5jb21pbmdpbmNvbWluZ1JlZGlyZWN0IGxpbWl0IGV4Y2VlZGVkX3JlcXVlc3RVcml1cmlTdGFydGluZ0Zyb21QYXRoaXNEaXJlY3RDT05ORUNUX3Byb3h5VHVubmVsX0h0dHBHWmlwU2lua19jb25zdW1lX0h0dHBPdXRnb2luZ19mb290ZXJBbmRDaHVuazBMZW5ndGhfY2h1bmswTGVuZ3RoaWdub3JlQm9keV9jbG9zZUZ1dHVyZV9wZW5kaW5nQ2h1bmtlZEZvb3Rlcl9ieXRlc1dyaXR0ZW5fZ3ppcF9nemlwU2lua19nemlwQWRkX2d6aXBCdWZmZXJfZ3ppcEJ1ZmZlckxlbmd0aF9zb2NrZXRFcnJvcmRyYWluRnV0dXJlYWNjZXB0RW5jb2RpbmdzY29udGVudEVuY29kaW5nX2FkZEdaaXBDaHVua19jaHVua0hlYWRlckNvbnRlbnQgc2l6ZSBleGNlZWRzIHNwZWNpZmllZCBjb250ZW50TGVuZ3RoLiAgYnl0ZXMgd3JpdHRlbiB3aGlsZSBleHBlY3RlZCBfaWdub3JlRXJyb3JObyBjb250ZW50IGV2ZW4gdGhvdWdoIGNvbnRlbnRMZW5ndGggd2FzIHNwZWNpZmllZCB0byBiZSBncmVhdGVyIHRoYW4gMDogQ29udGVudCBzaXplIGJlbG93IHNwZWNpZmllZCBjb250ZW50TGVuZ3RoLiAgYnl0ZXMgd3JpdHRlbiBidXQgZXhwZWN0ZWQgZm9vdGVyQW5kSGVhZGVyX0h0dHBDbGllbnRDb25uZWN0aW9uX2h0dHBQYXJzZXJfZGlzcG9zZV9pZGxlVGltZXJfY3VycmVudFVyaV9uZXh0UmVzcG9uc2VDb21wbGV0ZXJfc3RyZWFtRnV0dXJlbGlzdGVuVG9TdHJlYW1VbmV4cGVjdGVkIHJlc3BvbnNlICh1bnNvbGljaXRlZCByZXNwb25zZSB3aXRob3V0IHJlcXVlc3QpLkNvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSByZXNwb25zZSB3YXMgcmVjZWl2ZWRTb2NrZXQgY2xvc2VkIGJlZm9yZSByZXF1ZXN0IHdhcyBzZW50cHJveHlDcmVkc2NyZWRzaXNBdXRoZW50aWNhdGVkYXV0aEJhc2ljIF9wcm94eUNyZWRlbnRpYWxzYXV0aG9yaXplaXNIZWFkc3RhcnRUaW1lcl9yZXR1cm5Db25uZWN0aW9uYXV0aEluZm9wcm94eS1hdXRoZW50aWNhdGlvbi1pbmZvbmV4dG5vbmNlYXV0aGVudGljYXRpb24taW5mb0Nvbm5lY3Rpb24gY2xvc2VkIGJlZm9yZSBkYXRhIHdhcyByZWNlaXZlZGRldGFjaEluY29taW5nY3JlYXRlUHJveHlUdW5uZWxQcm94eSBmYWlsZWQgdG8gZXN0YWJsaXNoIHR1bm5lbCBzZWN1cmVTb2NrZXRpc1NlY3VyZXNzaDpzdG9wVGltZXJfQ29ubmVjdGlvbkluZm9fQ29ubmVjdGlvblRhcmdldF9pZGxlX2FjdGl2ZV9zb2NrZXRUYXNrc19jb25uZWN0aW5naGFzSWRsZWhhc0FjdGl2ZXRha2VJZGxlX2NoZWNrUGVuZGluZ2FkZE5ld0FjdGl2ZXJldHVybkNvbm5lY3Rpb25jb25uZWN0aW9uQ2xvc2VkdXJpSG9zdHVyaVBvcnRfY29ubmVjdGlvbnNDaGFuZ2VkY3VycmVudEJhZENlcnRpZmljYXRlQ2FsbGJhY2tfYmFkQ2VydGlmaWNhdGVDYWxsYmFja2Nvbm5lY3Rpb25UYXNrdHVubmVsX2dldENvbm5lY3Rpb25UYXJnZXRfSHR0cENsaWVudF9jbG9zaW5nX2Nsb3NpbmdGb3JjZWZ1bGx5X2Nvbm5lY3Rpb25UYXJnZXRzX2NyZWRlbnRpYWxzX2ZpbmRQcm94eV9pZGxlVGltZW91dF9wbGF0Zm9ybUVudmlyb25tZW50Q2FjaGVfb3BlblVybF9jbG9zZUNvbm5lY3Rpb25zQ2xpZW50IGlzIGNsb3NlZE5vIGhvc3Qgc3BlY2lmaWVkIGluIFVSSSBVbnN1cHBvcnRlZCBzY2hlbWUgJycgaW4gVVJJIHByb3h5Q29uZl9nZXRDb25uZWN0aW9uY29ubmVjdGlvblRhcmdldHByb3hpZXNObyBwcm94aWVzIGdpdmVuc2l0ZUNyZWRlbnRpYWxzX2ZpbmRQcm94eUZyb21FbnZpcm9ubWVudGNoZWNrTm9Qcm94eURJUkVDVGNoZWNrUHJveHk6MTA4MFBST1hZIHByb3h5Q2Znbm9Qcm94eW5vX3Byb3h5Tk9fUFJPWFlodHRwX3Byb3h5SFRUUF9QUk9YWWh0dHBzX3Byb3h5SFRUUFNfUFJPWFlfX0h0dHBDb25uZWN0aW9uJkxpbmtlZExpc3RFbnRyeSZfU2VydmljZU9iamVjdF9IdHRwQ29ubmVjdGlvbl9BQ1RJVkVfSURMRV9DTE9TSU5HX0RFVEFDSEVEX2Nvbm5lY3Rpb25zX2lkbGVNYXJrX21hcmtBY3RpdmVfbWFya0lkbGVfaGFuZGxlUmVxdWVzdG1hcmtJZGxlaXNNYXJrZWRJZGxlZGV0YWNoZWRJbmNvbWluZ19pc0FjdGl2ZV9pc0lkbGVfaXNEZXRhY2hlZGlvL2h0dHAvc2VydmVyY29ubmVjdGlvbnNIdHRwU2VydmVyQ29ubmVjdGlvbiA8LT4gdXNlcl9uYW1lQFNvY2tldFVzZXJTb2NrZXRBY3RpdmVJZGxlQ2xvc2luZ0RldGFjaGVkX19IdHRwU2VydmVyJlN0cmVhbSZfU2VydmljZU9iamVjdF9IdHRwU2VydmVyX3NlcnZlcnNfc2VydmVyU29ja2V0X2Nsb3NlU2VydmVyX2FjdGl2ZUNvbm5lY3Rpb25zX2lkbGVDb25uZWN0aW9uc19pbml0RGVmYXVsdFJlc3BvbnNlSGVhZGVyc1gtRnJhbWUtT3B0aW9uc1NBTUVPUklHSU5YLUNvbnRlbnQtVHlwZS1PcHRpb25zbm9zbmlmZlgtWFNTLVByb3RlY3Rpb24xOyBtb2RlPWJsb2NrSHR0cFNlcnZlciBpcyBub3QgYm91bmQgdG8gYSBzb2NrZXRjb25uaW8vaHR0cC9zZXJ2ZXJzX1Byb3h5Q29uZmlndXJhdGlvblBST1hZX1BSRUZJWERJUkVDVF9QUkVGSVhJbnZhbGlkIHByb3h5IGNvbmZpZ3VyYXRpb24gdXNlcmluZm9pbnZhbGlkIHBvcnQgJ19IdHRwQ29ubmVjdGlvbkluZm9fRGV0YWNoZWRTb2NrZXRfQXV0aGVudGljYXRpb25TY2hlbWVfc2NoZW1lVU5LTk9XTkJBU0lDRElHRVNUYmFzaWNCYXNpY19DcmVkZW50aWFsc2hhMV9TaXRlQ3JlZGVudGlhbHN0aGlzUG9ydG90aGVyUG9ydF9Qcm94eUNyZWRlbnRpYWxzYXV0aG9yaXplUHJveHlfSHR0cENsaWVudENyZWRlbnRpYWxzX0h0dHBDbGllbnRCYXNpY0NyZWRlbnRpYWxzX0h0dHBDbGllbnREaWdlc3RDcmVkZW50aWFsc2hhMmNub25jZW5jRGlnZXN0IHVzZXJuYW1lPSIsIHJlYWxtPSIsIG5vbmNlPSIsIHVyaT0iLCBhbGdvcml0aG09IiwgcW9wPSIsIGNub25jZT0iLCBuYz0iLCByZXNwb25zZT0iX1JlZGlyZWN0SW5mb19Db25zdEhUVFBIVFRQMURPVEhUVFAxMEhUVFAxMVNFUEFSQVRPUl9NQVBfQ2hhckNvZGVIVERBU0hTRU1JX0NPTE9ORVFVQUxfU3RhdGVNRVRIT0RfT1JfUkVTUE9OU0VfSFRUUF9WRVJTSU9OUkVTUE9OU0VfSFRUUF9WRVJTSU9OUkVRVUVTVF9MSU5FX01FVEhPRFJFUVVFU1RfTElORV9VUklSRVFVRVNUX0xJTkVfSFRUUF9WRVJTSU9OUkVRVUVTVF9MSU5FX0VORElOR1JFU1BPTlNFX0xJTkVfU1RBVFVTX0NPREVSRVNQT05TRV9MSU5FX1JFQVNPTl9QSFJBU0VSRVNQT05TRV9MSU5FX0VORElOR0hFQURFUl9TVEFSVEhFQURFUl9GSUVMREhFQURFUl9WQUxVRV9TVEFSVEhFQURFUl9WQUxVRUhFQURFUl9WQUxVRV9GT0xESU5HX09SX0VORElOR0hFQURFUl9WQUxVRV9GT0xEX09SX0VOREhFQURFUl9FTkRJTkdDSFVOS19TSVpFX1NUQVJUSU5HX0NSQ0hVTktfU0laRV9TVEFSVElOR19MRkNIVU5LX1NJWkVDSFVOS19TSVpFX0VYVEVOU0lPTkNIVU5LX1NJWkVfRU5ESU5HQ0hVTktFRF9CT0RZX0RPTkVfQ1JDSFVOS0VEX0JPRFlfRE9ORV9MRkJPRFlVUEdSQURFREZBSUxVUkVGSVJTVF9CT0RZX1NUQVRFX0h0dHBWZXJzaW9uVU5ERVRFUk1JTkVEX01lc3NhZ2VUeXBlUkVRVUVTVFJFU1BPTlNFX0h0dHBEZXRhY2hlZFN0cmVhbVN1YnNjcmlwdGlvbl9pbmplY3REYXRhX3VzZXJPbkRhdGFfc2NoZWR1bGVkX21heWJlU2NoZWR1bGVEYXRhX0h0dHBEZXRhY2hlZEluY29taW5nX0h0dHBQYXJzZXJfcGFyc2VyQ2FsbGVkX3JlcXVlc3RQYXJzZXJfaHR0cFZlcnNpb25JbmRleF9tZXNzYWdlVHlwZV9zdGF0dXNDb2RlTGVuZ3RoX3VyaV9vcl9yZWFzb25fcGhyYXNlX2hlYWRlckZpZWxkX2hlYWRlclZhbHVlX2h0dHBWZXJzaW9uX2Nvbm5lY3Rpb25VcGdyYWRlX2NodW5rZWRfbm9NZXNzYWdlQm9keV9yZW1haW5pbmdDb250ZW50X3BhdXNlZF9ib2R5UGF1c2VkX2JvZHlDb250cm9sbGVyX3BhdXNlU3RhdGVDaGFuZ2VkX3Jlc2V0cmVxdWVzdFBhcnNlcnJlc3BvbnNlUGFyc2VyX2RvUGFyc2VfaGVhZGVyc0VuZF9jcmVhdGVJbmNvbWluZ19jbG9zZUluY29taW5nRGF0YSBvbiBjbG9zZWQgY29ubmVjdGlvbkRhdGEgb24gZmFpbGVkIGNvbm5lY3Rpb25JbnZhbGlkIHJlcXVlc3QgbWV0aG9kSW52YWxpZCByZXNwb25zZSBsaW5lSW52YWxpZCByZXF1ZXN0IGxpbmVfZXhwZWN0SW52YWxpZCByZXF1ZXN0IFVSSUludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIGNvZGVJbnZhbGlkIHJlc3BvbnNlIHJlYXNvbiBwaHJhc2VJbnZhbGlkIGhlYWRlciBmaWVsZCBuYW1laGVhZGVyRmllbGRfY2FzZUluc2Vuc2l0aXZlQ29tcGFyZWlzUmVzcG9uc2Vpc1VwZ3JhZGVDb2RlaXNVcGdyYWRlX2V4cGVjdEhleERpZ2l0ZGF0YUF2YWlsYWJsZV9yZWxlYXNlQnVmZmVyQ29ubmVjdGlvbiBjbG9zZWQgd2hpbGUgcmVjZWl2aW5nIGRhdGFDb25uZWN0aW9uIGNsb3NlZCBiZWZvcmUgZnVsbCBoZWFkZXIgd2FzIHJlY2VpdmVkQ29ubmVjdGlvbiBjbG9zZWQgYmVmb3JlIGZ1bGwgYm9keSB3YXMgcmVjZWl2ZWRtZXNzYWdlVHlwZXJlYWRVbnBhcnNlZERhdGFfaXNUb2tlbkNoYXJfaXNWYWx1ZUNoYXJfdG9rZW5pemVGaWVsZFZhbHVlX3RvTG93ZXJDYXNlQnl0ZXZhbDF2YWwyRmFpbGVkIHRvIHBhcnNlIEhUVFBfSHR0cFNlc3Npb25fbGFzdFNlZW5fdGltZW91dENhbGxiYWNrX3ByZXZfcmVtb3ZlRnJvbVRpbWVvdXRRdWV1ZV9zZXNzaW9uc19idW1wVG9FbmRsYXN0U2Vlbkh0dHBTZXNzaW9uIGlkOl9IdHRwU2Vzc2lvbk1hbmFnZXJfc2Vzc2lvblRpbWVvdXRfdGltZXJjcmVhdGVTZXNzaW9uSWRfYWRkVG9UaW1lb3V0UXVldWVfc3RvcFRpbWVyX3N0YXJ0VGltZXJfdGltZXJUaW1lb3V0SHR0cE92ZXJyaWRlc3J1bldpdGhIdHRwT3ZlcnJpZGVzX0h0dHBPdmVycmlkZXNTY29wZV9jcmVhdGVIdHRwQ2xpZW50V2ViU29ja2V0U3RhdHVzbm9ybWFsQ2xvc3VyZWdvaW5nQXdheXByb3RvY29sRXJyb3J1bnN1cHBvcnRlZERhdGFyZXNlcnZlZDEwMDRub1N0YXR1c1JlY2VpdmVkYWJub3JtYWxDbG9zdXJlaW52YWxpZEZyYW1lUGF5bG9hZERhdGFwb2xpY3lWaW9sYXRpb25tZXNzYWdlVG9vQmlnbWlzc2luZ01hbmRhdG9yeUV4dGVuc2lvbnJlc2VydmVkMTAxNU5PUk1BTF9DTE9TVVJFVXNlIG5vcm1hbENsb3N1cmUgaW5zdGVhZEdPSU5HX0FXQVlVc2UgZ29pbmdBd2F5IGluc3RlYWRQUk9UT0NPTF9FUlJPUlVzZSBwcm90b2NvbEVycm9yIGluc3RlYWRVTlNVUFBPUlRFRF9EQVRBVXNlIHVuc3VwcG9ydGVkRGF0YSBpbnN0ZWFkUkVTRVJWRURfMTAwNFVzZSByZXNlcnZlZDEwMDQgaW5zdGVhZE5PX1NUQVRVU19SRUNFSVZFRFVzZSBub1N0YXR1c1JlY2VpdmVkIGluc3RlYWRBQk5PUk1BTF9DTE9TVVJFVXNlIGFibm9ybWFsQ2xvc3VyZSBpbnN0ZWFkSU5WQUxJRF9GUkFNRV9QQVlMT0FEX0RBVEFVc2UgaW52YWxpZEZyYW1lUGF5bG9hZERhdGEgaW5zdGVhZFBPTElDWV9WSU9MQVRJT05Vc2UgcG9saWN5VmlvbGF0aW9uIGluc3RlYWRNRVNTQUdFX1RPT19CSUdVc2UgbWVzc2FnZVRvb0JpZyBpbnN0ZWFkTUlTU0lOR19NQU5EQVRPUllfRVhURU5TSU9OVXNlIG1pc3NpbmdNYW5kYXRvcnlFeHRlbnNpb24gaW5zdGVhZFJFU0VSVkVEXzEwMTVVc2UgcmVzZXJ2ZWQxMDE1IGluc3RlYWRDb21wcmVzc2lvbk9wdGlvbnNjb21wcmVzc2lvbkRlZmF1bHRVc2UgY29tcHJlc3Npb25EZWZhdWx0IGluc3RlYWRjb21wcmVzc2lvbk9mZk9GRlVzZSBjb21wcmVzc2lvbk9mZiBpbnN0ZWFkY2xpZW50Tm9Db250ZXh0VGFrZW92ZXJzZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlcmNsaWVudE1heFdpbmRvd0JpdHNzZXJ2ZXJNYXhXaW5kb3dCaXRzX2NyZWF0ZVNlcnZlclJlc3BvbnNlSGVhZGVycmVxdWVzdGVkbXdic2VydmVyX21heF93aW5kb3dfYml0c0lsbGVnYWwgMCBwYWRkaW5nIG9uIHZhbHVlLjsgc2VydmVyX21heF93aW5kb3dfYml0cz1fY3JlYXRlQ2xpZW50UmVxdWVzdEhlYWRlcjsgY2xpZW50X21heF93aW5kb3dfYml0cz07IGNsaWVudF9tYXhfd2luZG93X2JpdHNfY3JlYXRlSGVhZGVycGVybWVzc2FnZS1kZWZsYXRlY2xpZW50X25vX2NvbnRleHRfdGFrZW92ZXI7IGNsaWVudF9ub19jb250ZXh0X3Rha2VvdmVyc2VydmVyX25vX2NvbnRleHRfdGFrZW92ZXI7IHNlcnZlcl9ub19jb250ZXh0X3Rha2VvdmVyaGVhZGVyTGlzdFdlYlNvY2tldFRyYW5zZm9ybWVycHJvdG9jb2xTZWxlY3RvcmNvbXByZXNzaW9uaXNVcGdyYWRlUmVxdWVzdFdlYlNvY2tldENPTk5FQ1RJTkdVc2UgY29ubmVjdGluZyBpbnN0ZWFkVXNlIG9wZW4gaW5zdGVhZFVzZSBjbG9zaW5nIGluc3RlYWRwaW5nSW50ZXJ2YWxUaGlzIGNvbnN0cnVjdG9yIHdpbGwgYmUgcmVtb3ZlZCBpbiBEYXJ0IDIuMC4gVXNlIGBpbXBsZW1lbnRzYCBpbnN0ZWFkIG9mIGBleHRlbmRzYCBpZiBpbXBsZW1lbnRpbmcgdGhpcyBhYnN0cmFjdCBjbGFzcy5mcm9tVXBncmFkZWRTb2NrZXRzZXJ2ZXJTaWRlVGhlIHNlcnZlclNpZGUgYXJndW1lbnQgbXVzdCBiZSBwYXNzZWQgZXhwbGljaXRseSB0byBXZWJTb2NrZXQuZnJvbVVwZ3JhZGVkU29ja2V0LnJlYWR5U3RhdGVjbG9zZUNvZGVjbG9zZVJlYXNvbldlYlNvY2tldEV4Y2VwdGlvbldlYlNvY2tldEV4Y2VwdGlvbjogX1dlYlNvY2tldE1lc3NhZ2VUeXBlX1dlYlNvY2tldE9wY29kZUNPTlRJTlVBVElPTlJFU0VSVkVEXzNSRVNFUlZFRF80UkVTRVJWRURfNVJFU0VSVkVEXzZSRVNFUlZFRF83Q0xPU0VQSU5HUE9OR1JFU0VSVkVEX0JSRVNFUlZFRF9DUkVTRVJWRURfRFJFU0VSVkVEX0VSRVNFUlZFRF9GX0VuY29kZWRTdHJpbmdfQ29tcHJlc3Npb25NYXhXaW5kb3dCaXRzX1dlYlNvY2tldFByb3RvY29sVHJhbnNmb3JtZXJMRU5fRklSU1RMRU5fUkVTVFBBWUxPQURGSU5SU1YxUlNWMlJTVjNPUENPREVfZmluX2NvbXByZXNzZWRfb3Bjb2RlX21hc2tlZF9yZW1haW5pbmdMZW5CeXRlc19yZW1haW5pbmdNYXNraW5nS2V5Qnl0ZXNfcmVtYWluaW5nUGF5bG9hZEJ5dGVzX3VubWFza2luZ0luZGV4X2N1cnJlbnRNZXNzYWdlVHlwZV9zZXJ2ZXJTaWRlX21hc2tpbmdCeXRlc19wYXlsb2FkX2RlZmxhdGVXZWJTb2NrZXQgdHJhbnNmb3JtZXIgYWxyZWFkeSB1c2VkLmxhc3RJbmRleFByb3RvY29sIGVycm9yX2lzQ29udHJvbEZyYW1lX2xlbmd0aERvbmVfbWFza0RvbmVwYXlsb2FkTGVuZ3RoX3VubWFza19jb250cm9sRnJhbWVFbmRfbWVzc2FnZUZyYW1lRW5kYmxvY2tDb3VudGJsb2NrTWFza2Jsb2NrQnVmZmVyUmVjZWl2ZWQgbWFza2VkIGZyYW1lIGZyb20gc2VydmVyUmVjZWl2ZWQgdW5tYXNrZWQgZnJhbWUgZnJvbSBjbGllbnRfc3RhcnRQYXlsb2FkX3ByZXBhcmVGb3JOZXh0RnJhbWVwcm9jZXNzSW5jb21pbmdNZXNzYWdlX1dlYlNvY2tldFBpbmdfV2ViU29ja2V0UG9uZ19XZWJTb2NrZXRUcmFuc2Zvcm1lckltcGxfcHJvdG9jb2xTZWxlY3Rvcl9jb21wcmVzc2lvbl91cGdyYWRlSW52YWxpZCBXZWJTb2NrZXQgdXBncmFkZSByZXF1ZXN0VXBncmFkZXdlYnNvY2tldFNlYy1XZWJTb2NrZXQtS2V5MjU4RUFGQTUtRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjExU2VjLVdlYlNvY2tldC1BY2NlcHRTZWMtV2ViU29ja2V0LVByb3RvY29sZGVmbGF0ZVNlbGVjdGVkIHByb3RvY29sIGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBhdmFpbGFibGUgcHJvdG9jb2xzX25lZ290aWF0ZUNvbXByZXNzaW9uZXh0ZW5zaW9uSGVhZGVyU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zaHZfaXNVcGdyYWRlUmVxdWVzdFNlYy1XZWJTb2NrZXQtVmVyc2lvbl9XZWJTb2NrZXRQZXJNZXNzYWdlRGVmbGF0ZV9lbnN1cmVEZWNvZGVyX2Vuc3VyZUVuY29kZXJwcm9jZXNzT3V0Z29pbmdNZXNzYWdlTGlzdCBlbGVtZW50IGlzIG5vdCBhIGJ5dGUgdmFsdWUgKHZhbHVlICBhdCBpbmRleCBfV2ViU29ja2V0T3V0Z29pbmdUcmFuc2Zvcm1lcl9kZWZsYXRlSGVscGVyV2ViU29ja2V0IHRyYW5zZm9ybWVyIGFscmVhZHkgdXNlZGFkZEZyYW1lX291dENsb3NlQ29kZV9vdXRDbG9zZVJlYXNvbmNyZWF0ZUZyYW1lZGF0YUxlbmd0aGhlYWRlclNpemVob2NsZW5ndGhCeXRlc21hc2tCeXRlc19XZWJTb2NrZXRDb25zdW1lcl9pc3N1ZWRQYXVzZV9lbnN1cmVDb250cm9sbGVyX2RvbmVjbG9zZVNvY2tldF9fV2ViU29ja2V0SW1wbCZTdHJlYW0mX1NlcnZpY2VPYmplY3RfV2ViU29ja2V0SW1wbF93ZWJTb2NrZXRzUEVSX01FU1NBR0VfREVGTEFURV9yZWFkeVN0YXRlX3dyaXRlQ2xvc2VkX2Nsb3NlQ29kZV9jbG9zZVJlYXNvbl9waW5nSW50ZXJ2YWxfcGluZ1RpbWVyX2Nsb3NlVGltZXJfZnJvbVNvY2tldHdzd3NzVW5zdXBwb3J0ZWQgVVJMIHNjaGVtZSAnbm9uY2VEYXRhQ2FjaGUtQ29udHJvbG5vLWNhY2hlQ29ubmVjdGlvbiB0byAnJyB3YXMgbm90IHVwZ3JhZGVkIHRvIHdlYnNvY2tldFJlc3BvbnNlIGRpZCBub3QgY29udGFpbiBhICdTZWMtV2ViU29ja2V0LUFjY2VwdCcgaGVhZGVyZXhwZWN0ZWRBY2NlcHRyZWNlaXZlZEFjY2VwdFJlc3BvbnNlIGhlYWRlciAnU2VjLVdlYlNvY2tldC1BY2NlcHQnIGlzIHRoZSB3cm9uZyBsZW5ndGhCYWQgcmVzcG9uc2UgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyBoZWFkZXJuZWdvdGlhdGVDbGllbnRDb21wcmVzc2lvbmdldFdpbmRvd0JpdHNjbGllbnRfbWF4X3dpbmRvd19iaXRzUmVzZXJ2ZWQgc3RhdHVzIGNvZGUgaW8vd2Vic29ja2V0c19pc1Jlc2VydmVkU3RhdHVzQ29kZV9NQVNLXzhfTUFTS18zMl9CSVRTX1BFUl9CWVRFX0JZVEVTX1BFUl9XT1JEX09VVEdPSU5HX0JVRkZFUl9TSVpFX0RBUlRfU0VTU0lPTl9JRF9odHRwT3ZlcnJpZGVzVG9rZW5fd2ViU29ja2V0R1VJRF9jbGllbnROb0NvbnRleHRUYWtlb3Zlcl9zZXJ2ZXJOb0NvbnRleHRUYWtlb3Zlcl9jbGllbnRNYXhXaW5kb3dCaXRzX3NlcnZlck1heFdpbmRvd0JpdHNfZ2V0SHR0cFZlcnNpb25EYXJ0LyAoZGFydDppbylzZGtyb290Oi9wa2cvY29tcGlsZXIvYmluL2RhcnQyanMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2RhcnQyanMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfdW5zdGFibGUvZGFydDJqcy5kYXJ0cGFja2FnZTpjb21waWxlci9jb21waWxlcl9uZXcuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbW1hbmRsaW5lX29wdGlvbnMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2ZpbGVuYW1lcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvb3B0aW9ucy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc291cmNlX2ZpbGVfcHJvdmlkZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3V0aWwvY29tbWFuZF9saW5lLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91dGlsL3V0aWwuZGFydHBhY2thZ2U6a2VybmVsL2tlcm5lbC5kYXJ0cGFja2FnZTprZXJuZWwvYXN0LmRhcnRwYWNrYWdlOmtlcm5lbC90YXJnZXQvdGFyZ2V0cy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvY29tcGlsZXJfb3B0aW9ucy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2FwaV9wcm90b3R5cGUvZGlhZ25vc3RpY19tZXNzYWdlLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9leHBlcmltZW50YWxfZmxhZ3MuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL2ZpbGVfc3lzdGVtLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYmFzZS9wcm9jZXNzZWRfb3B0aW9ucy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Jhc2UvbGlicmFyaWVzX3NwZWNpZmljYXRpb24uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jb21waWxlcl9jb250ZXh0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZmFzdGFfY29kZXMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zZXZlcml0eS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2tlcm5lbF9nZW5lcmF0b3JfaW1wbC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvcmVkaXJlY3RpbmdfZmFjdG9yeV9ib2R5LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL2NvbXBpbGVyX3N0YXRlLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Vuc3RhYmxlL3V0aWwuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL2tlcm5lbF9nZW5lcmF0b3IuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL3N0YW5kYXJkX2ZpbGVfc3lzdGVtLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvY29tcHV0ZV9wbGF0Zm9ybV9iaW5hcmllc19sb2NhdGlvbi5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL29wZXJhdG9yLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2FzeW5jX21vZGlmaWVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9jaGFyYWN0ZXJzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdXRpbC9saW5rLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdXRpbC9saW5rX2ltcGxlbWVudGF0aW9uLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdXRpbC9yZWxhdGl2aXplLmRhcnRwYWNrYWdlOmNvbXBpbGVyL2NvbXBpbGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9hcGlpbXBsLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb2xvcnMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lvL3NvdXJjZV9maWxlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91dGlsL2VtcHR5c2V0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91dGlsL21hcGxldC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdXRpbC9zZXRsZXQuZGFydHBhY2thZ2U6a2VybmVsL2JpbmFyeS9hc3RfdG9fYmluYXJ5LmRhcnRwYWNrYWdlOmtlcm5lbC9iaW5hcnkvYXN0X2Zyb21fYmluYXJ5LmRhcnRwYWNrYWdlOmtlcm5lbC90ZXh0L2FzdF90b190ZXh0LmRhcnRwYWNrYWdlOmtlcm5lbC92aXNpdG9yLmRhcnRwYWNrYWdlOmtlcm5lbC9jYW5vbmljYWxfbmFtZS5kYXJ0cGFja2FnZTprZXJuZWwvdHJhbnNmb3JtYXRpb25zL2ZsYWdzLmRhcnRwYWNrYWdlOmtlcm5lbC90eXBlX2FsZ2VicmEuZGFydHBhY2thZ2U6a2VybmVsL3R5cGVfZW52aXJvbm1lbnQuZGFydHBhY2thZ2U6a2VybmVsL2NvcV9hbm5vdC5kYXJ0cGFja2FnZTprZXJuZWwvY2xhc3NfaGllcmFyY2h5LmRhcnRwYWNrYWdlOmtlcm5lbC9jb3JlX3R5cGVzLmRhcnRwYWNrYWdlOnBhY2thZ2VfY29uZmlnL3BhY2thZ2VzLmRhcnRwYWNrYWdlOnBhY2thZ2VfY29uZmlnL3BhY2thZ2VzX2ZpbGUuZGFydHBhY2thZ2U6cGFja2FnZV9jb25maWcvc3JjL3BhY2thZ2VzX2ltcGwuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL3Rlcm1pbmFsX2NvbG9yX3N1cHBvcnQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jb21tYW5kX2xpbmVfcmVwb3J0aW5nLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvbWVzc2FnZXMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wcm9ibGVtcy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3RpY2tlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3VyaV90cmFuc2xhdG9yLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcmVzb2x2ZV9pbnB1dF91cmkuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY2FubmVyL3Rva2VuLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvc2Nhbm5lci90b2tlbi5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2NvbG9ycy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC90eXBlX2xhYmVsZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jcmFzaC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2RpbGwvZGlsbF90YXJnZXQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX3RhcmdldC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC91dGlscy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC92ZXJpZmllci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2xvYWRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIvYWJzdHJhY3Rfc2Nhbm5lci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIvc3RyaW5nX3NjYW5uZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY2FubmVyL3V0ZjhfYnl0ZXNfc2Nhbm5lci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIvcmVjb3Zlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NjYW5uZXIvZXJyb3JfdG9rZW4uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY2FubmVyL3Rva2VuX2NvbnN0YW50cy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9ib2R5X2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9pbmNyZW1lbnRhbF9jb21waWxlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvb2xkX3RvX25ld19hcGkuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbW1vbi90YXNrcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21waWxlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvZGlhZ25vc3RpY3MvbWVzc2FnZXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2Vudmlyb25tZW50LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pby9sb2NhdGlvbl9wcm92aWRlci5kYXJ0cGFja2FnZTprZXJuZWwvYmluYXJ5L3RhZy5kYXJ0cGFja2FnZTprZXJuZWwvaW1wb3J0X3RhYmxlLmRhcnRwYWNrYWdlOmtlcm5lbC9zcmMvaGllcmFyY2h5X2Jhc2VkX3R5cGVfZW52aXJvbm1lbnQuZGFydHBhY2thZ2U6a2VybmVsL3NyYy9oZWFwLmRhcnRwYWNrYWdlOmtlcm5lbC9saWJyYXJ5X2luZGV4LmRhcnRwYWNrYWdlOmNoYXJjb2RlL2FzY2lpLmRhcnRwYWNrYWdlOnBhY2thZ2VfY29uZmlnL3NyYy91dGlsLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9zdHJpbmdfY2Fub25pY2FsaXplci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Jhc2Uvc3ludGFjdGljX2VudGl0eS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL3NjYW5uZXIvc3RyaW5nX3V0aWxpdGllcy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2JsYWNrbGlzdGVkX2NsYXNzZXMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90YXJnZXRfaW1wbGVtZW50YXRpb24uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9kaWxsL2RpbGxfbGlicmFyeV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZGlsbC9kaWxsX2xvYWRlci5kYXJ0cGFja2FnZTprZXJuZWwvY2xvbmUuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9kaWxsL2RpbGxfbWVtYmVyX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zY29wZS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS9zb3VyY2VfY2xhc3NfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS9zb3VyY2VfbGlicmFyeV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL3NvdXJjZV9sb2FkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvY29uc3RhbnRfZXZhbHVhdG9yLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9jb25zdGFudHMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvbWV0YWRhdGFfY29sbGVjdG9yLmRhcnRwYWNrYWdlOmtlcm5lbC9iaW5hcnkvbGltaXRlZF9hc3RfdG9fYmluYXJ5LmRhcnRwYWNrYWdlOmtlcm5lbC92ZXJpZmllci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9zaGFkb3dfYXN0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc2Nhbm5lci9rZXl3b3JkX3N0YXRlLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvY29uc3RhbnRfY29udGV4dC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL21vZGlmaWVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvbmFtZXMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9xdW90ZS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS9zY29wZV9saXN0ZW5lci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3NvdXJjZS92YWx1ZV9raW5kcy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfaW5mZXJyZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX3Byb21vdGlvbi5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9jb2xsZWN0aW9ucy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9jb25zdG5lc3MuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvZXhwcmVzc2lvbl9nZW5lcmF0b3IuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvZXhwcmVzc2lvbl9nZW5lcmF0b3JfaGVscGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2Zhbmdvcm4uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvZm9yZXN0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2ltcGxpY2l0X3R5cGVfYXJndW1lbnQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvdHlwZV9hbGdvcml0aG1zLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF9hcGkuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwva2VybmVsX2FzdF9hcGkuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL2luY3JlbWVudGFsX2tlcm5lbF9nZW5lcmF0b3IuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9hcGlfcHJvdG90eXBlL21lbW9yeV9maWxlX3N5c3RlbS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXJfZ3JhcGguZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9jb21iaW5hdG9yLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdXRpbC9lcnJvcl9yZXBvcnRlcl9maWxlX2NvcGllci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2h5YnJpZF9maWxlX3N5c3RlbS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2xpYnJhcnlfZ3JhcGguZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL251bGxfY29tcGlsZXJfb3V0cHV0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9kaWFnbm9zdGljX2xpc3RlbmVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9pbnZhcmlhbnQuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2RpYWdub3N0aWNzL3NvdXJjZV9zcGFuLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9zcGFubmFibGUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvaGVscGVycy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvYmFja2VuZF9zdHJhdGVneS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uL2NvZGVnZW4uZGFydHBhY2thZ2U6anNfYXN0L2pzX2FzdC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uL25hbWVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24vd29yay5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29tbW9uX2VsZW1lbnRzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kZWZlcnJlZF9sb2FkLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9jb2RlX2xvY2F0aW9uLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kdW1wX2luZm8uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2VsZW1lbnRzL2VudGl0aWVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbnF1ZXVlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9mcm9udGVuZF9zdHJhdGVneS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvYWJzdHJhY3RfdmFsdWVfZG9tYWluLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90cml2aWFsLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlbWFza3MvbWFza3MuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pby9zb3VyY2VfaW5mb3JtYXRpb24uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvYmFja2VuZC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9pbmZlcnJlZF9kYXRhLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9qc19zdHJhdGVneS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2tlcm5lbF9zdHJhdGVneS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2xvYWRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc2VyaWFsaXphdGlvbi90YXNrLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uL3N0cmF0ZWdpZXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9ub2Rlcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2Uvc2VsZWN0b3IuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL2NvZGVnZW5fd29ybGRfYnVpbGRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvcmVzb2x1dGlvbl93b3JsZF9idWlsZGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS93b3JsZF9pbXBhY3QuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3dvcmxkLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9kaWFnbm9zdGljcy9nZW5lcmF0ZWQvc2hhcmVkX21lc3NhZ2VzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb25zdGFudHMvZXhwcmVzc2lvbnMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lvL2NvZGVfb3V0cHV0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvc2Nhbm5lci9pbnRlcm5lci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9jbGFzc19oaWVyYXJjaHlfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3N0YW5kYXJkX2JvdW5kcy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9pbXBsaWNpdF9maWVsZF90eXBlLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2tlcm5lbF92YXJpYWJsZV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL2xvYWRfbGlicmFyeV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEva2VybmVsL3VubGlua2VkX3Njb3BlLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcmV3cml0ZV9zZXZlcml0eS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3RhcmdldC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2RpbGwvZGlsbF9jbGFzc19idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvZGlsbC9kaWxsX3R5cGVfYWxpYXNfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC90eXBlX2J1aWxkZXJfY29tcHV0ZXIuZGFydHBhY2thZ2U6a2VybmVsL3NyYy9ib3VuZHNfY2hlY2tzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYmFzZS9yZXNvbHZlX3JlbGF0aXZlX3VyaS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2NvbmZpZ3VyYXRpb24uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9leHBvcnQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9pbXBvcnQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9iYXNlL2luc3RydW1lbnRhdGlvbi5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC90cmFuc2Zvcm1fY29sbGVjdGlvbnMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvdHJhbnNmb3JtX3NldF9saXRlcmFscy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9jbGFzc19tZW1iZXJfcGFyc2VyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvc291cmNlL2RpZXRfbGlzdGVuZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zb3VyY2UvZGlldF9wYXJzZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zb3VyY2Uvb3V0bGluZV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvaW5mZXJlbmNlX2hlbHBlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfaW5mZXJlbmNlX2VuZ2luZS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3R5cGVfaW5mZXJlbmNlL3R5cGVfc2NoZW1hX2VsaW1pbmF0aW9uLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvdHlwZV9pbmZlcmVuY2UvdHlwZV9zY2hlbWFfZW52aXJvbm1lbnQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9pZGVudGlmaWVycy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvYnVpbHRpbl90eXBlX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2NsYXNzX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2NvbnN0cnVjdG9yX3JlZmVyZW5jZV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9kZWNsYXJhdGlvbi5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvZHluYW1pY190eXBlX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL2VudW1fYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvZmllbGRfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvZm9ybWFsX3BhcmFtZXRlcl9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9wcm9jZWR1cmVfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvZnVuY3Rpb25fdHlwZV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9pbnZhbGlkX3R5cGVfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbGlicmFyeV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9tZW1iZXJfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbWV0YWRhdGFfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbWl4aW5fYXBwbGljYXRpb25fYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbW9kaWZpZXJfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbmFtZV9pdGVyYXRvci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvbmFtZWRfdHlwZV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci9wcmVmaXhfYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvdHlwZV9hbGlhc19idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci90eXBlX2J1aWxkZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL3R5cGVfZGVjbGFyYXRpb25fYnVpbGRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2J1aWxkZXIvdHlwZV92YXJpYWJsZV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvYnVpbGRlci91bnJlc29sdmVkX3R5cGUuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9idWlsZGVyL3ZvaWRfdHlwZV9idWlsZGVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2xpc3RlbmVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL3BhcnNlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9wYXJzZXJfZXJyb3IuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvYXNzZXJ0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2Zvcm1hbF9wYXJhbWV0ZXJfa2luZC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9pZGVudGlmaWVyX2NvbnRleHQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvY2xhc3Nfa2luZC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9tZW1iZXJfa2luZC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci90b3BfbGV2ZWxfcGFyc2VyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL3V0aWwuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9zb3VyY2Uvc3RhY2tfbGlzdGVuZXIuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS90eXBlX2luZmVyZW5jZS90eXBlX2NvbnN0cmFpbnRfZ2F0aGVyZXIuZGFydHBhY2thZ2U6a2VybmVsL3V0aWwvZ3JhcGguZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvdHJhY2UuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvZGVidWdfY29sbGVjdGlvbi5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaGVscGVycy9leHBlbnNpdmVfbWFwLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9oZWxwZXJzL2V4cGVuc2l2ZV9zZXQuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvc3RhdHMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2hlbHBlcnMvdHJhY2tfbWFwLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2VucXVldWVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL2NvZGVfZW1pdHRlcl90YXNrLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zZXJpYWxpemF0aW9uL3NlcmlhbGl6YXRpb24uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9zc2EuZGFydHBhY2thZ2U6anNfYXN0L3NyYy9wcmVjZWRlbmNlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb25zdGFudHMvdmFsdWVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbGVtZW50cy90eXBlcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanMvanMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvbmFtZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL25hdGl2ZS9iZWhhdmlvci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvZmVhdHVyZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvdXNlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91dGlsL2VudW1zZXQuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2VsZW1lbnRzL25hbWVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS9jYWxsX3N0cnVjdHVyZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvY29uc3RhbnRzL2NvbnN0YW50X3N5c3RlbS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9uYXRpdmVfZGF0YS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvbG9jYWxzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwvZGFydDJqc190YXJnZXQuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9rZWxlbWVudHMuZGFydHBhY2thZ2U6ZGFydDJqc19pbmZvL2luZm8uZGFydHBhY2thZ2U6ZGFydDJqc19pbmZvL2pzb25faW5mb19jb2RlYy5kYXJ0cGFja2FnZTpkYXJ0MmpzX2luZm8vYmluYXJ5X3NlcmlhbGl6YXRpb24uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvZmllbGRfYW5hbHlzaXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3V0aWwvc2lua19hZGFwdGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2Fubm90YXRpb25zLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS9tZW1iZXJfdXNhZ2UuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL3dvcmxkX2J1aWxkZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvbm9fc3VjaF9tZXRob2RfcmVnaXN0cnkuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3N0YXRpY190eXBlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS9jbGFzc19oaWVyYXJjaHkuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVfZ3JhcGhfaW5mZXJyZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL3R5cGVtYXNrcy9jb25zdGFudHMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX21vZGVsL2VsZW1lbnRfbWFwLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci9pbmZlcnJlcl9lbmdpbmUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lvL3Bvc2l0aW9uX2luZm9ybWF0aW9uLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9lbGVtZW50cy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvY2xhc3Nfc2V0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy90cmFjZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvY2hlY2tlZF9tb2RlX2hlbHBlcnMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvcnVudGltZV90eXBlcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9ydW50aW1lX3R5cGVzX2NvZGVnZW4uZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvcnVudGltZV90eXBlc19uZXcuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3VuaXZlcnNlL3NpZGVfZWZmZWN0cy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW8va2VybmVsX3NvdXJjZV9pbmZvcm1hdGlvbi5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanMvanNfc291cmNlX21hcHBpbmcuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvYmFja2VuZF9pbXBhY3QuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvY29kZWdlbl9saXN0ZW5lci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9jdXN0b21fZWxlbWVudHNfYW5hbHlzaXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvaW1wYWN0X3RyYW5zZm9ybWVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2ludGVyY2VwdG9yX2RhdGEuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvanNfZW1pdHRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvbmF0aXZlL2VucXVldWUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9idWlsZGVyX2tlcm5lbC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL3R5cGVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9jbG9zdXJlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9lbnYuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX21vZGVsL2VsZW1lbnRfbWFwX2ltcGwuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX21vZGVsL2pzX3dvcmxkLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19tb2RlbC9qc193b3JsZF9idWlsZGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb21tb24vYmFja2VuZF9hcGkuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbW1vbi9yZXNvbHV0aW9uLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9hbm5vdGF0aW9ucy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvY2xvc3VyZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvaW1wYWN0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9pbXBhY3RfZGF0YS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvbW9kdWxhci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvc2NvcGUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvYmFja2VuZF91c2FnZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9yZXNvbHV0aW9uX2xpc3RlbmVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL3J1bnRpbWVfdHlwZXNfcmVzb2x1dGlvbi5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvbmF0aXZlL3Jlc29sdmVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwvZGVmZXJyZWRfbG9hZC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2VsZW1lbnRfbWFwLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9rZXJuZWwvZWxlbWVudF9tYXBfaW1wbC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2Zyb250X2VuZF9hZGFwdGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jbG9zdXJlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbGVtZW50cy9qdW1wcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfbW9kZWwvdHlwZV9yZWNpcGUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9pbnZva2VfZHluYW1pY19zcGVjaWFsaXplcnMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS92YWxpZGF0ZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvZWxlbWVudHMvZW50aXR5X3V0aWxzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbGVtZW50cy9vcGVyYXRvcnMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9pbnZvY2F0aW9uX21pcnJvcl9jb25zdGFudHMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9rZXJuZWxfd29ybGQuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvc29ydGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb25zdGFudHMvY29uc3RydWN0b3JzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9jb25zdGFudHMvZXZhbHVhdGlvbi5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2tlcm5lbC9mb3J3YXJkaW5nX25vZGUuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9rZXJuZWwvdHlwZXMuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvZXJyb3JfZGVsZWdhdGlvbl9saXN0ZW5lci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL2lnbm9yZWRfcGFyc2VyX2Vycm9ycy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9kaXJlY3RpdmVfY29udGV4dC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9mb3J3YXJkaW5nX2xpc3RlbmVyLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL2xpdGVyYWxfZW50cnlfaW5mby5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9sb29wX3N0YXRlLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL21vZGlmaWVyX2NvbnRleHQuZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvcmVjb3ZlcnlfbGlzdGVuZXJzLmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvZmFzdGEvcGFyc2VyL3Rva2VuX3N0cmVhbV9yZXdyaXRlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci90eXBlX2luZm8uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy9mYXN0YS9wYXJzZXIvaWRlbnRpZmllcl9jb250ZXh0X2ltcGwuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvcHJvZ3JhbV9idWlsZGVyL3Byb2dyYW1fYnVpbGRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9zdGFydHVwX2VtaXR0ZXIvZW1pdHRlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9tZXRhZGF0YV9jb2xsZWN0b3IuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvbW9kZWwuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvbmF0aXZlX2VtaXR0ZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvdHlwZV90ZXN0X3JlZ2lzdHJ5LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9lbGVtZW50cy9pbmRleGVkLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9jb25zdGFudHMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3N0YXRpY190eXBlX2Jhc2UuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzL3Jld3JpdGVfYXN5bmMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9jb2RlZ2VuLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2Evb3B0aW1pemUuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzL2pzX2RlYnVnLmRhcnRwYWNrYWdlOmpzX3J1bnRpbWUvc2hhcmVkL2VtYmVkZGVkX25hbWVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9uYXRpdmUvanMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3J1bnRpbWVfdHlwZV9hbmFseXNpcy5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL2NvbGxlY3Rpb24uZGFydHBhY2thZ2U6ZGFydDJqc19pbmZvL3NyYy91dGlsLmRhcnRwYWNrYWdlOmRhcnQyanNfaW5mby9zcmMvYmluYXJ5L3NpbmsuZGFydHBhY2thZ2U6ZGFydDJqc19pbmZvL3NyYy9iaW5hcnkvc291cmNlLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9zY29wZV92aXNpdG9yLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci91dGlsLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci9zdGF0aWNfdHlwZV9jYWNoZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZV9ncmFwaF9ub2Rlcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvc3RhdGljX3R5cGVfcHJvdmlkZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS90eXBlX2J1aWxkZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL2J1aWxkZXJfa2VybmVsLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci9jbG9zdXJlX3RyYWNlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvZGVidWcuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2luZmVycmVyL2xvY2Fsc19oYW5kbGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci9saXN0X3RyYWNlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvbWFwX3RyYWNlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvc2V0X3RyYWNlci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvdHlwZV9ncmFwaF9kdW1wLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pbmZlcnJlci90eXBlX3N5c3RlbS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL3NzYV90cmFjZXIuZGFydHBhY2thZ2U6anNfcnVudGltZS9zaGFyZWQvcmVjaXBlX3N5bnRheC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9jbGFzc19zdHViX2dlbmVyYXRvci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9pbnN0YW50aWF0aW9uX3N0dWJfZ2VuZXJhdG9yLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL2ludGVyY2VwdG9yX3N0dWJfZ2VuZXJhdG9yLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL21haW5fY2FsbF9zdHViX2dlbmVyYXRvci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9uYXRpdmVfZ2VuZXJhdG9yLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL3BhcmFtZXRlcl9zdHViX2dlbmVyYXRvci5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfZW1pdHRlci9ydW50aW1lX3R5cGVfZ2VuZXJhdG9yLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy91bml2ZXJzZS90YXJnZXRfY2hlY2tzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvanVtcF9oYW5kbGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2Eva2VybmVsX3N0cmluZ19idWlsZGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvbG9jYWxzX2hhbmRsZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9sb29wX2hhbmRsZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9zc2FfYnJhbmNoX2J1aWxkZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS9zd2l0Y2hfY29udGludWVfYW5hbHlzaXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL2VsZW1lbnRfbWFwLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9vcmRlcmVkX3R5cGVzZXQuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2NvbXBpbGVfdGltZV9jb25zdGFudHMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL2NhY2hlZF9zdGF0aWNfdHlwZS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaXIvZGVidWcuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2lyL3R5cGVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9pci92aXNpdG9ycy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMva2VybmVsL2Vudi5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvdW5pdmVyc2UvZnVuY3Rpb25fc2V0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvYXBpX3Byb3RvdHlwZS9jb25zdGFudF9ldmFsdWF0b3IuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2tlcm5lbC9rZXJuZWxfaW1wYWN0LmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvbG9nZ2luZy5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci9saXRlcmFsX2VudHJ5X2luZm9faW1wbC5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL2Zhc3RhL3BhcnNlci90eXBlX2luZm9faW1wbC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvanNfYmFja2VuZC9jb25zdGFudF9lbWl0dGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19lbWl0dGVyL3N0YXJ0dXBfZW1pdHRlci9tb2RlbF9lbWl0dGVyLmRhcnRwYWNrYWdlOmpzX3J1bnRpbWUvc2hhcmVkL2FzeW5jX2F3YWl0X2Vycm9yX2NvZGVzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvY29kZWdlbl9oZWxwZXJzLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvdmFyaWFibGVfYWxsb2NhdG9yLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL3NwZWNpYWxpemVkX2NoZWNrcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL2ludGVyY2VwdG9yX3NpbXBsaWZpZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL3NzYS90eXBlc19wcm9wYWdhdGlvbi5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvc3NhL3ZhbHVlX3JhbmdlX2FuYWx5emVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9zc2EvdmFsdWVfc2V0LmRhcnRwYWNrYWdlOmpzX2FzdC9zcmMvY2hhcmFjdGVycy5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9hbGdvcml0aG1zLmRhcnRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2Nhbm9uaWNhbGl6ZWRfbWFwLmRhcnRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2NvbWJpbmVkX3dyYXBwZXJzL2NvbWJpbmVkX2l0ZXJhYmxlLmRhcnRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2NvbWJpbmVkX3dyYXBwZXJzL2NvbWJpbmVkX2xpc3QuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvY29tYmluZWRfd3JhcHBlcnMvY29tYmluZWRfbWFwLmRhcnRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2NvbXBhcmF0b3JzLmRhcnRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2VxdWFsaXR5LmRhcnRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2VxdWFsaXR5X21hcC5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9lcXVhbGl0eV9zZXQuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvZnVuY3Rpb25zLmRhcnRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL2l0ZXJhYmxlX3ppcC5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9wcmlvcml0eV9xdWV1ZS5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9xdWV1ZV9saXN0LmRhcnRwYWNrYWdlOmNvbGxlY3Rpb24vc3JjL3VuaW9uX3NldC5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy91bm1vZGlmaWFibGVfd3JhcHBlcnMuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvdW5pb25fc2V0X2NvbnRyb2xsZXIuZGFydHBhY2thZ2U6Y29sbGVjdGlvbi9zcmMvd3JhcHBlcnMuZGFydHBhY2thZ2U6ZGFydDJqc19pbmZvL3NyYy9ncmFwaC5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW5mZXJyZXIvbm9kZV90cmFjZXIuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2JhY2tlbmQvanNfaW50ZXJvcF9hbmFseXNpcy5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvcmVzb2x1dGlvbi9yZWdpc3RyeS5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL3Rlc3RpbmcvZmVhdHVyZXMuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2hhc2gvc2hhMS5kYXJ0cGFja2FnZTpjb21waWxlci9zcmMvaW8vc291cmNlX21hcF9idWlsZGVyLmRhcnRwYWNrYWdlOmNvbXBpbGVyL3NyYy9qc19iYWNrZW5kL2pzX2JhY2tlbmQuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvY29uc3RhbnRfb3JkZXJpbmcuZGFydHBhY2thZ2U6Y29tcGlsZXIvc3JjL2pzX2VtaXR0ZXIvaGVhZGVycy5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy91dGlscy5kYXJ0cGFja2FnZTpjb2xsZWN0aW9uL3NyYy9lbXB0eV91bm1vZGlmaWFibGVfc2V0LmRhcnRwYWNrYWdlOmZyb250X2VuZC9zcmMvdGVzdGluZy9pZF90ZXN0aW5nLmRhcnRwYWNrYWdlOmNyeXB0by9jcnlwdG8uZGFydHBhY2thZ2U6ZnJvbnRfZW5kL3NyYy90ZXN0aW5nL2Fubm90YXRlZF9jb2RlX2hlbHBlci5kYXJ0cGFja2FnZTpmcm9udF9lbmQvc3JjL3Rlc3RpbmcvaWQuZGFydHBhY2thZ2U6Y3J5cHRvL3NyYy9kaWdlc3QuZGFydHBhY2thZ2U6Y3J5cHRvL3NyYy9oYXNoLmRhcnRwYWNrYWdlOmNyeXB0by9zcmMvaG1hYy5kYXJ0cGFja2FnZTpjcnlwdG8vc3JjL21kNS5kYXJ0cGFja2FnZTpjcnlwdG8vc3JjL3NoYTEuZGFydHBhY2thZ2U6Y3J5cHRvL3NyYy9zaGEyNTYuZGFydHBhY2thZ2U6Y29udmVydC9jb252ZXJ0LmRhcnRwYWNrYWdlOmNyeXB0by9zcmMvZGlnZXN0X3NpbmsuZGFydHBhY2thZ2U6Y3J5cHRvL3NyYy9oYXNoX3NpbmsuZGFydHBhY2thZ2U6Y3J5cHRvL3NyYy91dGlscy5kYXJ0cGFja2FnZTpjb252ZXJ0L3NyYy9hY2N1bXVsYXRvcl9zaW5rLmRhcnRwYWNrYWdlOmNvbnZlcnQvc3JjL2J5dGVfYWNjdW11bGF0b3Jfc2luay5kYXJ0cGFja2FnZTpjb252ZXJ0L3NyYy9oZXguZGFydHBhY2thZ2U6Y29udmVydC9zcmMvcGVyY2VudC5kYXJ0cGFja2FnZTpjb252ZXJ0L3NyYy9zdHJpbmdfYWNjdW11bGF0b3Jfc2luay5kYXJ0cGFja2FnZTp0eXBlZF9kYXRhL3R5cGVkX2RhdGEuZGFydHBhY2thZ2U6Y29udmVydC9zcmMvaGV4L2VuY29kZXIuZGFydHBhY2thZ2U6Y29udmVydC9zcmMvaGV4L2RlY29kZXIuZGFydHBhY2thZ2U6Y29udmVydC9zcmMvcGVyY2VudC9lbmNvZGVyLmRhcnRwYWNrYWdlOmNvbnZlcnQvc3JjL3BlcmNlbnQvZGVjb2Rlci5kYXJ0cGFja2FnZTp0eXBlZF9kYXRhL3R5cGVkX2J1ZmZlcnMuZGFydHBhY2thZ2U6Y29udmVydC9zcmMvdXRpbHMuZGFydGRhcnQ6Y29udmVydGRhcnQ6ZGV2ZWxvcGVyZGFydDpmZmlkYXJ0Omlzb2xhdGVkYXJ0Om1hdGhkYXJ0OnByb2ZpbGVyZGFydDp0eXBlZF9kYXRhZGFydDp2bXNlcnZpY2VfaW9kYXJ0Ol92bXNlcnZpY2VkYXJ0Ol9idWlsdGluZGFydDpuYXRpdmV3cmFwcGVyc2RhcnQ6Y2xpZGFydDpfaHR0cHZtLmNhbGwtc2l0ZS1hdHRyaWJ1dGVzLm1ldGFkYXRhqA8BAAjAAPn7AAACkwQqCDcAAjkJOwsClAQrCDcAAjkVOxcClQQsCDcAAjkhOyMHYAM3Aw0ZJQQxCEQAAkYJSDUEMghEAAJGFUg/BDMIRAACRiFISQKWBDQIRAACRlNIVQdgA0QEN0FLVwQ6BDwKwADqaQpcCDQAAAEBAASAsgSAxwSAzQSA1QSA2ASA3QSA4ASA4wSA5wSA8gSA8wSA9ASA9QSA9gRFBID3BID6BID7BID8BID/BIEABIC2BIEBBIECBIEHBIEIBIEJBIEMBIENBIEOBIEPBIEQBIERBIETBIEUBIEWBIEXBIEYBIEZBIEdBIEeBIEfBIEgBIEhBIEjBIEkBIElBIEmBIEnBIEoBIEqBIErBIEtBIEuBIEvBIExBIEzBIE0BIE1BIE2BIE3BIE4BIE5BIE9BIE+BIE/BIFABIFBBIFCBIFDBIFEBIFFBIFGBIFHApcEgVMIk34AApOGgVeTh4FZChoEgKcIwADupAABwADusRUEgcUIk34AApOGFZOHgXoIwADJXQABwADJYAAEglcEglgEglkCkgSCWgiRpgACkagVkaqBoAiRWQAHkVuBlZFcgZiRRYGbkUaBnpFHeZFIeZFJgaMEgmgIhCcAAoQpgVeEK4HOBIJtBIJxCF0AAl8JYYHhBIJyCF0AAl8VYYHtB2ADXQKB5IHwBIJ7CHUAAncJeYICBIJ8CHUAAncVeYIOBIJ9CHUAAncheYIaBIJ+CHUAAndTeYImBIJ/CHUAAneBV3mCMgI3BQSCgAh1AAJ3gj95gkIHYAN1BoIFghGCHYIpgjWCRQSCtgSCxAdbAAjAAPezAmADwAD962ADwAD96wHAAPe2gmYEgvIEgwUIi10AAotfCYthgoUEgwgIi10AAotfFYthgpQEgwkIi10AAotfIYthgqMEgwoIi10AAotfU4thgrIEgwsIi10AAotfgVeLYYLBBIMMCItdAAKLX4I/i2GC0QdbDIKId4KXd4KmAIK1AILEd4LUAAjAAPezAmADi11gA8AA+j8BwAD3toLhCIFnAAKBaXeBagAIgWcAAoFpAIFqdwdgA8AA/esACsAA/poCN4DIAjcgBINqCJN+AAKThoM0k4eDNwI3CASBVAiTfgACk4aDR5OHg0oCNxAEg20Ik34AApOGg1qTh4NdBINxCJN+AAKThiGTh4NtCpPECpPICpPJCpPFCoHWBIOjBICvBIOkBIOlBIOmBIOnBIJKBIOoBIGmBIOpBIOqBILlB1sOg4uDjoORg5SDl4Oag52DoIOjg6aAlYOpg6yDrAjAAPezAmADwAD962ADwAD96wHAAPe2g68CN/////8IkucBYAPAAP3rAAI3IgI3CQI3CgI3DQI3fwI3oCgCN6ApAjdcBAACNwYHYAOErgAEhMYIgwoAAoMMCYMOhB0EhMcIgwoAAoMMFYMOhCwEhMgIgwoAAoMMIYMOhDsEhMkIgwoAAoMMU4MOhEoEhMoIgwoAAoMMgVeDDoRZB2ADgwoFhCCEL4Q+hE2EXAI3QAdgA4lkAAI3wADUMQiIzwABiNGEggI3wAfYpQiI5wABiOmEkQI3gIAEhTQIhCcAAoQpFYQrhKQEhTYIhCcAAoQpIYQrhLMEhT0IhCcAAoQpCYQrhMIEhT4IhCcAAoQpU4QrhNEHYAOEJwWExYSnhLaE1IHRAjcHBIVYCISfAAKEoQmEo4TzCoSUCoSTBIViCISfAAKEoRWEo4UIBIVjCISfAAKEoSGEo4UXBIVkCISfAAKEoVOEo4UmBIVlCISfAAKEoYFXhKOFNQdgA4SfBYT2hQuFGoUphTgEhmQIiKoAAoisCYiuhVUEhmUIiKoAAoisFYiuhWQEhmYIiKoAAoisIYiuhXMEhmcIiKoAAoisU4iuhYIHYAOIqgSFWIVnhXaFhQdgA4i4AAdgA4kxAAdgA4lPAAI5hxsEh1YIitYAAorYCYrahbUEh1cIitYAAorYFYrahcQHYAOK1gKFuIXHCIsOAAGLEHcEh5oIwAD58gABwAD59IXlBIeoCItdAAKLX4QUi2GF9QdgA4tdB4KIgpeCpoK1gsSC1IX4BIe9BIe+BIe/BIfABIfBBIfCBIfDBIf8CJGmAAKRqAmRqoYuCsAA9egEiAgEiAkIkVkAB5FbhkKRXHmRRYZFkUaBnpFHeZFIeZFJgaMEiAoKkRkIkWUBYQMBYAPAAP5sYAORTgORZ4ZmkWh5kWmGaQSIDAqRGwiRZQFhAwFgA8AA/mxgA5FOA5FnhomRaHmRaYaMBIgNBIgOBIgPCJGmAAKRqIFXkaqGsgiRWQAHkVuGrJFceZFFhq+RRoGekUd5kUh5kUmGtQSIEAqQywiRZQFhAwFgA8AA/mxgA5FOA5FnhuCRaHmRaYbjB2ADik0ABIgrBIgsCpEaCJFlAWEDAWADwAD+bGADkU4DkWeHCZFohwyRaYcPBIguCpBGCJFlAWEDAWADwAD962ADkU4DkWeHMJFoeZFphzMEiDAEiDEEiDIIkVkAB5Fbh1ORXIdWkUWHWZFGgZ6RR3mRSHmRSYGjCJzaAAAEiDMEiDQIkVkAB5Fbh4CRXIdWkUWHg5FGgZ6RR3mRSHmRSYGjBIg3CpBKCJFlAWEDAmADwAD+bGADwAD962ADkU4DkWeHpZFoeZFph6gEiDgKkRAIkWUBYQMBYAPAAP3rYAORTgORZ4fOkWh5kWmH0QSIOgqQ2giRZQFhAwFgA8AA/etgA5FOA5Fnh/GRaHmRaYf0CMAA97MCYAPAAP3rYAOL6QHAAPe2gmYIi9wAAYvfiBQHYAPAAP5sAAjAAPezAmADwAD962ADi/QBwAD3toJmBIifBIigBIihCJFZAAeRW4hTkVyIVpFFiFmRRoGekUd5kUh5kUmGtQjAAPezAmADwAD961sBwAD3toJmCMAAx9gAAsAAx9t5wADH3HkEiMIIkaYAApGoIZGqiKAEiMMIkaYAApGoU5GqiK8EiMQIkaYAApGogj+Rqoi+B2ADkaYGhjGBo4ijiLKGtYjBBIjGCpA4CJFlAWEDAWADwAD962ADkU4DkWeI4JFoeZFpiOMEiMgEiMkHYAPAAP3rAYkGCJFDAWEDAWADwAD962ADkU4FkUWJA5FGgZ6RR4jmkUiJCZFJiKMEiMsEiMwEiM0CNzMIkVkAB5FbiTmRXIk8kUWJP5FGiUKRR3mRSHmRSYGjBIjQBIjRBIjSB2ADwAD96wGJagiRWQAHkVuJZJFceZFFiWeRRoGekUd5kUiJbZFJgaMEiNUKkDkIkWUBYQMBYAPAAP3rYAORTgORZ4mWkWh5kWmJmQSI1wSI2AdgA8AA/esBibwIkUMBYQMBYAPAAP3rYAORTgWRRYm5kUaBnpFHiZyRSIm/kUmIowSI2gqQOgiRZQFhAwFgA8AA/etgA5FOA5Fnie+RaHmRaYnyBIjcCJFDAWEDAWADwAD962ADkU4FkUWKEpFGgZ6RR4n1kUh5kUmBowSI3gqQOwiRZQFhAwNgA8AA/etgA4i4YAOIuGADkU4DkWeKOpFoeZFpij0EiOAEiOEHYAPAAP3rAYpoCJFDAWEDA2ADwAD962ADiLhgA4i4YAORTgWRRYplkUaBnpFHikCRSIprkUmBowSI4wSI5ASI5QdgA8AA/esBiqkIkVkAB5FbiqORXHmRRYqmkUaBnpFHeZFIiqyRSYGjBIjoBIjpCJFZAAeRW4rVkVx5kUWK2JFGgZ6RR3mRSIqskUmBowSI7ASI7QqQPAiRZQFhAwJgA4i4YAOIuGADkU4DkWeK+pFoiv2RaYsABIjvBIjwB2ADwAD96wGLJgiRQwFhAwJgA4i4YAOIuGADkU4FkUWLI5FGgZ6RR4sDkUiLKZFJgaMEiPIKkD0IkWUBYQMBYAPAAPwFYAORTgORZ4tbkWh5kWmLXgSI9ASI9QdgA8AA/esBi4EIkUMBYQMBYAPAAPwFYAORTgWRRYt+kUaBnpFHi2GRSIuEkUmBowSI9wSI+AiRWQAHkVuLtJFceZFFi7eRRoGekUd5kUh5kUmBowSI+wSI/AiRWQAHkVuL2JFceZFFi9uRRoGekUd5kUh5kUmBowSI/wSJAASJAQdgA8AA/esBjAIIkVkAB5Fbi/yRXHmRRYv/kUaBnpFHeZFIjAWRSYGjBIkEBIkFBIkGBIkHB2ADwAD96wGMNwiRWQAHkVuMLpFcjDGRRYw0kUaBnpFHeZFIjDqRSYGjBIkKBIkLBIkMB2ADwAD96wGMagiRWQAHkVuMZJFceZFFjGeRRoGekUd5kUiMbZFJgaMEiQ8KkD4IkWUBYQMCYAPAAP3rYAPAAP3rYAORTgORZ4yWkWh5kWmMmQSJEQiRQwFhAwJgA8AA/etgA8AA/etgA5FOBZFFjL+RRoGekUeMnJFIeZFJgaMEiRMEiRQKkD8IkWUBYQMCYAPAAP3rYAPAAP3rYAORTgORZ4ztkWiM8JFpjPMEiRYEiRcHYAPAAP3rAY0dCJFDAWEDAmADwAD962ADwAD962ADkU4FkUWNGpFGgZ6RR4z2kUiNIJFJgaMEiRkEiRoKkEAIkWUBYQMBYAPAAP3rYAORTgORZ41WkWiNWZFpjVwEiRwIkUMBYQMBYAPAAP3rYAORTgWRRY19kUaBnpFHjV+RSI0gkUmBowSJHgqQQQiRZQFhAwFgA8AA/etgA5FOA5FnjaaRaI1ZkWmNqQSJIAiRQwFhAwFgA8AA/etgA5FOBZFFjcqRRoGekUeNrJFIjSCRSYGjBIkiBIkjBIkkAjc0CJFZAAeRW43zkVyN9pFFjfmRRo38kUd5kUh5kUmBowSJJwqQQgiRZQFhAwFgA8AA/etgA5FOA5Fnjh6RaHmRaY4hBIkpCJFDAWEDAWADwAD962ADkU4FkUWOQZFGgZ6RR44kkUiKrJFJgaMEiSsEiSwKkEMIkWUBYQMBYAOesWADkU4DkWeOapFojm2RaY5wBIkuBIkvB2ADwAD96wGOkgiRQwFhAwFgA56xYAORTgWRRY6PkUaBnpFHjnORSI6VkUmBowSJMQqQRAiRZQFhAwFgA56xYAORTgORZ47DkWh5kWmOxgSJMwSJNAdgA8AA/esBjucIkUMBYQMBYAOesWADkU4FkUWO5JFGgZ6RR47JkUiO6pFJgaMEiTYEiTcIkVkAB5FbjxiRXHmRRY8bkUaBnpFHeZFIeZFJgaMEiToEiTsIkVkAB5FbjzyRXHmRRY8/kUaBnpFHeZFIeZFJhjEEiT4KkEUIkWUBYQMBYAPAAP3rYAORTgORZ49gkWh5kWmPYwSJQAiRQwFhAwFgA8AA/etgA5FOBZFFj4ORRoGekUePZpFIeZFJhjEEiUIEiUMEiUQHYAPAAP3rAY+xCJFZAAeRW4+rkVx5kUWPrpFGgZ6RR3mRSI+0kUmBowSJRwSJSASJSQdgA8AA/esBj+MIkVkAB5Fbj92RXHmRRY/gkUaBnpFHeZFIj+aRSYGjBIlMCJFDAWEDAWADwAD962ADkU4FkUWQD5FGgZ6RR4c2kUh5kUmBowSJTgSJTwiRWQAHkVuQN5FceZFFkDqRRoGekUd5kUh5kUmBowSJUgSJUwSJVAiRWQAHkVuQW5FckF6RRZBhkUaBnpFHeZFIeZFJgaMEiVkEiVoKkEcIkWUBYQMBYAPAAP3rYAORTgORZ5CDkWiQhpFpkIkEiVwEiV0HYAPAAP3rAZCtCJFDAWEDAWADwAD962ADkU4FkUWQqpFGgZ6RR5CMkUiQsJFJgaMEiV8EiWAKkEgIkWUBYQMBYAPAAP3rYAORTgORZ5DgkWiQ45FpkOYEiWIEiWMHYAPAAP3rAZEKCJFDAWEDAWADwAD962ADkU4FkUWRB5FGgZ6RR5DpkUiRDZFJgaMEiWUKkEkIkWUBYQMBYAPAAP3rYAORTgORZ5E9kWiQhpFpkUAEiWcIkUMBYQMBYAPAAP3rYAORTgWRRZFhkUaBnpFHkUORSJCwkUmBowSJaQSJagdgA8AA/esBkY0IkUMBYQMCYAPAAP5sYAPAAP3rYAORTgWRRZGKkUaBnpFHh6uRSJGQkUmBowSJbAqQSwiRZQFhAwFgA56xYAORTgORZ5HGkWh5kWmRyQSJbgSJbwdgA8AA/esBkeoIkUMBYQMBYAOesWADkU4FkUWR55FGgZ6RR5HMkUiR7ZFJgaMEiXEEiXIKkEwIkWUBYQMBYAOesWADkU4DkWeSG5Fokh6RaZIhBIl0BIl1B2ADwAD96wGSQwiRQwFhAwFgA56xYAORTgWRRZJAkUaBnpFHkiSRSJJGkUmBowSJdwSJeASJeQdgA8AA/esBknoIkVkAB5FbknSRXHmRRZJ3kUaBnpFHeZFIkn2RSYGjBIl8BIl9BIl+CJFZAAeRW5KmkVySqZFFkqyRRoGekUd5kUiSfZFJgaMEiYEEiYIEiYMCN1QIkVkAB5Fbks+RXJLSkUWS1ZFGktiRR3mRSHmRSYGjBImGAjdTCJFZAAeRW5LPkVyS0pFFkvqRRpL9kUd5kUh5kUmBowSJiQSJigSJiwI3NQiRWQAHkVuTH5FckyKRRZMlkUaTKJFHeZFIeZFJgaMEiY4EiY8EiZACNzYIkVkAB5Fbk0qRXJNNkUWTUJFGk1ORR3mRSHmRSYGjBImTBImUCpBNCJFlAWEDAmADwAD962ADwAD962ADkU4DkWeTdZFok3iRaZN7BImWBImXB2ADwAD96wGTpQiRQwFhAwJgA8AA/etgA8AA/etgA5FOBZFFk6KRRoGekUeTfpFIk6iRSYGjBImZBImaCpBOCJFlAWEDAmADwAD962ADwAD962ADkU4DkWeT3pFok+GRaZPkBImcAjc7CJFDAWEDAmADwAD962ADwAD962ADkU4FkUWUC5FGlA6RR5PnkUh5kUmBowSJngqQTwiRZQFhAwFgA8AA/etgA5FOA5FnlDyRaHmRaZQ/BImgBImhB2ADwAD96wGUYgiRQwFhAwFgA8AA/etgA5FOBZFFlF+RRoGekUeUQpFIlGWRSYGjBImjCpBQCJFlAWEDAWADwAD962ADkU4DkWeUlZFoeZFplJgEiaUIkUMBYQMBYAPAAP3rYAORTgWRRZS4kUaBnpFHlJuRSHmRSYGjBImnCpBRCJFlAWEDAWADwAD962ADkU4DkWeU4JFoeZFplOMEiakEiaoHYAPAAP3rAZUGCJFDAWEDAWADwAD962ADkU4FkUWVA5FGgZ6RR5TmkUiVCZFJgaMKkFIIkWUBYQMBYAPAAP3rYAORTgORZ5TgkWh5kWmVOQSJrQiRQwFhAwFgA8AA/etgA5FOBZFFlVmRRoGekUeVPJFIlQmRSYijBImvCpBTCJFlAWEDAWADwAD962ADkU4DkWeVgpFoeZFplYUEibEIkUMBYQMBYAPAAP3rYAORTgWRRZWlkUaBnpFHlYiRSJUJkUmBowqQVAiRZQFhAwFgA8AA/etgA5FOA5FnlYKRaHmRaZXOBIm0CJFDAWEDAWADwAD962ADkU4FkUWV7pFGgZ6RR5XRkUiVCZFJiKMEibYKkFUIkWUBYQMBYAPAAP3rYAORTgORZ5YXkWh5kWmWGgSJuASJuQdgA8AA/esBlj0IkUMBYQMBYAPAAP3rYAORTgWRRZY6kUaBnpFHlh2RSJZAkUmBowSJuwSJvAiRWQAHkVuWcJFceZFFlnORRoGekUd5kUh5kUmGMQSJvwSJwASJwQI3OgiRWQAHkVuWlJFclpeRRZaakUaWnZFHeZFIeZFJgaMEicQEicUEicYCNzwIkVkAB5Fblr+RXJbCkUWWxZFGlsiRR3mRSHmRSYGjBInJBInKBInLB2ADwAD96wGW8AiRWQAHkVuW6pFceZFFlu2RRoGekUd5kUiW85FJgaMEic4Eic8IkVkAB5FblxyRXHmRRZcfkUaBnpFHeZFIeZFJhjEEidIEidMIkVkAB5Fbl0CRXHmRRZdDkUaBnpFHeZFIeZFJgaMEidYEidcEidgEidkHYAPAAP3rAZdtCJFZAAeRW5dkkVyXZ5FFl2qRRoGekUd5kUiXcJFJgaMEidwEid0Eid4HYAPAAP3rAZegCJFZAAeRW5eakVx5kUWXnZFGgZ6RR3mRSJejkUmBowSJ4QSJ4giRWQAHkVuXzJFceZFFl8+RRoGekUd5kUiRDZFJgaMEieUEieYIkVkAB5Fbl/GRXHmRRZf0kUaBnpFHeZFIeZFJgaMEiekKkFYIkWUBYQMBYAPAAP3rYAORTgORZ5gVkWiSHpFpmBgEiesEiewHYAPAAP3rAZg8CJFDAWEDAWADwAD962ADkU4FkUWYOZFGgZ6RR5gbkUiYP5FJgaMEie4KkFcIkWUBYQMBYAOJc2ADkU4DkWeYb5FoeZFpmHIEifAEifEHYAPAAP3rAZiTCJFDAWEDAWADiXNgA5FOBZFFmJCRRoGekUeYdZFImJaRSYGjBInzCpBYCJFlAWEDAWADiXNgA5FOA5FnmMSRaHmRaZjHBIn1BIn2B2ADwAD96wGY6AiRQwFhAwFgA4lzYAORTgWRRZjlkUaBnpFHmMqRSJjrkUmBowSJ+AqQWQiRZQFhAwFgA4lzYAORTgORZ5kZkWh5kWmZHASJ+gSJ+wdgA8AA/esBmT0IkUMBYQMBYAOJc2ADkU4FkUWZOpFGgZ6RR5kfkUiZQJFJgaMEif0Eif4Eif8HYAPAAP3rAZl0CJFZAAeRW5lukVx5kUWZcZFGgZ6RR3mRSJl3kUmBowSKAgqQWgiRZQFhAwFgA8AA/etgA5FOA5FnmaCRaHmRaZmjBIoECJFDAWEDAWADwAD962ADkU4FkUWZw5FGgZ6RR5mmkUiZd5FJgaMEigYKkFsIkWUBYQMBYAOIuGADkU4DkWeZ7JFoeZFpme8EiggIkUMBYQMBYAOIuGADkU4FkUWaDZFGgZ6RR5nykUh5kUmBowSKCgqQXAiRZQFhAwRgA8AA/etgA4lzYAOIuGADiLhgA5FOA5FnmjORaHmRaZo2BIoMCJFDAWEDBGADwAD962ADiXNgA4i4YAOIuGADkU4FkUWaYpFGgZ6RR5o5kUh5kUmBowSKDgqQXQiRZQFhAwJgA4lzYAOIuGADkU4DkWealpFoeZFpmpkEihAIkUMBYQMCYAOJc2ADiLhgA5FOBZFFmruRRoGekUeanJFIeZFJgaMEihIKkF4IkWUBYQMCYAPAAP3rYAOJc2ADkU4DkWea5ZFoeZFpmugEihQEihUHYAPAAP3rAZsPCJFDAWEDAmADwAD962ADiXNgA5FOBZFFmwyRRoGekUea65FImxKRSYGjBIoXCpBfCJFlAWEDAmADwAD962ADiXNgA5FOA5Fnm0aRaHmRaZtJBIoZCJFDAWEDAmADwAD962ADiXNgA5FOBZFFm22RRoGekUebTJFImXeRSYGjBIobCpBgCJFlAWEDAWADwAD962ADkU4DkWebmpFoeZFpm50Eih0Eih4HYAPAAP3rAZvACJFDAWEDAWADwAD962ADkU4FkUWbvZFGgZ6RR5ugkUibw5FJgaMEiiAKkGEIkWUBYQMBYAOJc2ADkU4DkWeb85FoeZFpm/YEiiIEiiMHYAPAAP3rAZwXCJFDAWEDAWADiXNgA5FOBZFFnBSRRoGekUeb+ZFInBqRSYGjBIolCpBiCJFlAWEDAWADiXNgA5FOA5FnnEiRaHmRaZxLBIonCJFDAWEDAWADiXNgA5FOBZFFnGmRRoGekUecTpFImXeRSYGjBIopCpBjCJFlAWEDA2ADiXNgA4i4YAOIuGADkU4DkWeckJFoeZFpnJMEiisIkUMBYQMDYAOJc2ADiLhgA4i4YAORTgWRRZy5kUaBnpFHnJaRSHmRSYGjBIotCpBkCJFlAWEDAWADiXNgA5FOA5FnnOeRaHmRaZzqBIovBIowB2ADwAD96wGdCwiRQwFhAwFgA4lzYAORTgWRRZ0IkUaBnpFHnO2RSJ0OkUmBowSKMgqQZQiRZQFhAwNgA8AA/etgA8AA/etgA8AA/etgA5FOA5FnnTyRaHmRaZ0/BIo0CJFDAWEDA2ADwAD962ADwAD962ADwAD962ADkU4FkUWda5FGgZ6RR51CkUh5kUmBowSKNgqQZgiRZQFhAwFgA8AA/etgA5FOA5FnnZ+RaHmRaZ2iBIo4BIo5B2ADwAD96wGdxQiRQwFhAwFgA8AA/etgA5FOBZFFncKRRoGekUedpZFInciRSYGjBIo7CpBnCJFlAWEDAWADwAD962ADkU4DkWed+JFoeZFpnfsEij0Eij4HYAPAAP3rAZ4eCJFDAWEDAWADwAD962ADkU4FkUWeG5FGgZ6RR53+kUieIZFJgaMEikAEikEEikIHYAPAAP3rAZ5XCJFZAAeRW55RkVx5kUWeVJFGgZ6RR3mRSJ5akUmBowSKRQSKRgSKRwdgA8AA/esBnokIkVkAB5FbnoORXHmRRZ6GkUaBnpFHeZFInoyRSYGjBIpKBIpLCJFZAAeRW561kVx5kUWeuJFGgZ6RR3mRSJl3kUmBowSKTgSKTwiRWQAHkVue2pFceZFFnt2RRoGekUd5kUh5kUmBowSKUgqQaAiRZQFhAwJgA8AA/etgA8AA/etgA5FOA5Fnnv6RaHmRaZ8BBIpUBIpVB2ADwAD96wGfKgiRQwFhAwJgA8AA/etgA8AA/etgA5FOBZFFnyeRRoGekUefBJFIny2RSYGjBIpXBIpYBIpZAjc+CJFZAAeRW59jkVyfZpFFn2mRRp9skUd5kUh5kUmBowSKXASKXQSKXgSKXwdgA8AA/esBn5cIkVkAB5Fbn46RXJ+RkUWflJFGgZ6RR3mRSJ+akUmBowSKYgSKYwqQaQiRZQFhAwFgA8AA/etgA5FOA5Fnn8SRaJ/HkWmfygSKZQSKZgdgA8AA/esBn+4IkUMBYQMBYAPAAP3rYAORTgWRRZ/rkUaBnpFHn82RSJ/xkUmBowSKaASKaQSKagSKawdgA8AA/esBoCoIkVkAB5FboCGRXKAkkUWgJ5FGgZ6RR3mRSKAtkUmBowSKbgSKbwSKcAI3PwiRWQAHkVugV5FcoFqRRaBdkUagYJFHeZFIeZFJgaMEinMEinQEinUEinYHYAPAAP3rAaCLCJFZAAeRW6CCkVyghZFFoIiRRoGekUd5kUigjpFJgaMEinkKkGoIkWUBYQMBYAPAAP3rYAORTgORZ6C4kWh5kWmguwSKewSKfAdgA8AA/esBoN4IkUMBYQMBYAPAAP3rYAORTgWRRaDbkUaBnpFHoL6RSKDhkUmIowSKfgSKfwSKgAdgA8AA/esBoRcIkVkAB5FboRGRXHmRRaEUkUaBnpFHeZFIoRqRSYGjBIqDBIqEBIqFAjc3CJFZAAeRW6FDkVyhRpFFoUmRRqFMkUd5kUh5kUmBowSKiASKiQSKigSKiwdgA8AA/esBoXcIkVkAB5FboW6RXKFxkUWhdJFGgZ6RR3mRSKF6kUmBowSKjgSKjwSKkAdgA8AA/esBoaoIkVkAB5FboaSRXHmRRaGnkUaBnpFHeZFIoa2RSYGjBIqTBIqUBIqVB2ADwAD96wGh3AiRWQAHkVuh1pFceZFFodmRRoGekUd5kUih35FJgaMEipgKkGsIkWUBYQMBYAPAAP3rYAORTgORZ6IIkWh5kWmiCwSKmgiRQwFhAwFgA8AA/etgA5FOBZFFoiuRRoGekUeiDpFIeZFJhjEEipwEip0Eip4HYAPAAP3rAaJZCJFZAAeRW6JTkVx5kUWiVpFGgZ6RR3mRSKJckUmBowSKoQSKogSKowiRWQAHkVuihZFcooiRRaKLkUYhkUd5kUh5kUmBowSKpgqQbAiRZQFhAwFgA8AA/etgA5FOA5FnoqyRaHmRaaKvBIqoCJFDAWEDAWADwAD962ADkU4FkUWiz5FGgZ6RR6KykUiKrJFJgaMEiqoEiqsEiqwIkVkAB5FboviRXKL7kUWi/pFGhHmRR3mRSHmRSYGjBIqvCpBtCJFlAWEDAmADwAD962ADwAD962ADkU4DkWejIJFoeZFpoyMEirEIkUMBYQMCYAPAAP3rYAPAAP3rYAORTgWRRaNJkUaBnpFHoyaRSHmRSYGjBIqzBIq0BIq1AjdCCJFZAAeRW6N3kVyjepFFo32RRqOAkUd5kUh5kUmBowSKuASKuQSKugI3QwiRWQAHkVujopFco6WRRaOokUajq5FHeZFIeZFJgaMEir0Eir4KkG4IkWUBYQMCYAPAAP3rYAPAAP3rYAORTgORZ6PNkWij0JFpo9MEisAEisEHYAPAAP3rAaP9CJFDAWEDAmADwAD962ADwAD962ADkU4FkUWj+pFGgZ6RR6PWkUikAJFJgaMEisMKkG8IkWUBYQMBYAPAAP3rYAORTgORZ6Q2kWh5kWmkOQSKxQSKxgdgA8AA/esBpFwIkUMBYQMBYAPAAP3rYAORTgWRRaRZkUaBnpFHpDyRSKRfkUmBowSKyAqQcAiRZQFhAwFgA8AA/etgA5FOA5FnpI+RaHmRaaSSBIrKBIrLB2ADwAD96wGktQiRQwFhAwFgA8AA/etgA5FOBZFFpLKRRoGekUeklZFIpLiRSYGjBIrNCpBxCJFlAWEDAWADwAD962ADkU4DkWek6JFoeZFppOsEis8EitAHYAPAAP3rAaUOCJFDAWEDAWADwAD962ADkU4FkUWlC5FGgZ6RR6TukUilEZFJgaMEitIEitMEitQHYAPAAP3rAaVHCJFZAAeRW6VBkVx5kUWlRJFGgZ6RR3mRSKVKkUmBowSK1wSK2AiRWQAHkVulc5FceZFFpXaRRoGekUd5kUh5kUmGMQSK2wSK3AqQcgiRZQFhAwFgA8AA/etgA5FOA5FnpZeRaKWakWmlnQSK3gSK3wdgA8AA/esBpcEIkUMBYQMBYAPAAP3rYAORTgWRRaW+kUaBnpFHpaCRSKXEkUmBowSK4QSK4gSK4wI3RAiRWQAHkVul9JFcpfeRRaX6kUal/ZFHeZFIeZFJgaMEiuYKkHMIkWUBYQMBYAPAAP3rYAORTgORZ6YfkWh5kWmmIgSK6ASK6QdgA8AA/esBpkUIkUMBYQMBYAPAAP3rYAORTgWRRaZCkUaBnpFHpiWRSKZIkUmBowSK6wqQdAiRZQFhAwFgA8AA/etgA5FOA5FnpniRaHmRaaZ7BIrtCJFDAWEDAWADwAD962ADkU4FkUWmm5FGgZ6RR6Z+kUh5kUmGMQSK7wSK8AqQdQiRZQFhAwJgA4i4YAPAAP3rYAORTgORZ6bDkWimxpFppskEivIEivMHYAPAAP3rAabxCJFDAWEDAmADiLhgA8AA/etgA5FOBZFFpu6RRoGekUemzJFIpvSRSYijBIr1CpB2CJFlAWEDBWADwAD8BWADwAD8BWADwAD9G2ADwAD9G2ADwAD9G2ADkU4DkWenKJFoeZFppysEivcIkUMBYQMFYAPAAPwFYAPAAPwFYAPAAP0bYAPAAP0bYAPAAP0bYAORTgWRRadjkUaBnpFHpy6RSHmRSYGjBIr5CpB3CJFlAWEDAWADwAD962ADkU4DkWeno5Foo9CRaaemBIr7CJFDAWEDAWADwAD962ADkU4FkUWnx5FGgZ6RR6epkUikAJFJgaMEiv0Eiv4Eiv8CN0UIkVkAB5Fbp/CRXKfzkUWn9pFGp/mRR3mRSHmRSYGjBIsCBIsDBIsEAjdHCJFZAAeRW6gbkVyoHpFFqCGRRqgkkUd5kUh5kUmBowSLBwSLCAqQeAiRZQFhAwFgA8AA/etgA5FOA5FnqEaRaKhJkWmoTASLCgI3SAiRQwFhAwFgA8AA/etgA5FOBZFFqG2RRqhwkUeoT5FIeZFJgaMEiwwEiw0Eiw4CN0kIkVkAB5FbqJiRXKibkUWonpFGqKGRR3mRSHmRSYGjBIsRCpB5CJFlAWEDAWADwAD962ADkU4DkWeow5FoeZFpqMYEixMEixQHYAPAAP3rAajpCJFDAWEDAWADwAD962ADkU4FkUWo5pFGgZ6RR6jJkUio7JFJgaMEixYKkHoIkWUBYQMBYAPAAP3rYAORTgORZ6kckWh5kWmpHwSLGAiRQwFhAwFgA8AA/etgA5FOBZFFqT+RRoGekUepIpFIeZFJhjEEixoKkHsIkWUBYQMBYAPAAP3rYAORTgORZ6lnkWh5kWmpagSLHAiRQwFhAwFgA8AA/etgA5FOBZFFqYqRRoGekUepbZFIeZFJhjEEix4KkHwIkWUBYQMBYAPAAP3rYAORTgORZ6mykWh5kWmptQSLIAiRQwFhAwFgA8AA/etgA5FOBZFFqdWRRoGekUepuJFIeZFJgaMEiyIKkH0IkWUBYQMDYAPAAP3rYAPAAP5sYAPAAP5sYAORTgORZ6n9kWh5kWmqAASLJASLJQdgA8AA/esBqi8IkUMBYQMDYAPAAP3rYAPAAP5sYAPAAP5sYAORTgWRRaoskUaBnpFHqgORSKoykUmBowqQfgiRZQFhAwNgA8AA/etgA8AA/mxgA8AA/mxgA5FOA5Fnqf2RaHmRaapuBIsoCJFDAWEDA2ADwAD962ADwAD+bGADwAD+bGADkU4FkUWqmpFGgZ6RR6pxkUh5kUmIowSLKgqQfwiRZQFhAwNgA8AA/etgA8AA/mxgA8AA/mxgA5FOA5Fnqs6RaHmRaarRBIssCJFDAWEDA2ADwAD962ADwAD+bGADwAD+bGADkU4FkUWq/ZFGgZ6RR6rUkUh5kUmIsgqQgAiRZQFhAwNgA8AA/etgA8AA/mxgA8AA/mxgA5FOA5Fnqs6RaHmRaasxBIsvBIswB2ADwAD96wGrYAiRQwFhAwNgA8AA/etgA8AA/mxgA8AA/mxgA5FOBZFFq12RRoGekUerNJFIq2ORSYijBIsyCpCBCJFlAWEDAWADwAD962ADkU4DkWern5FoeZFpq6IEizQEizUHYAPAAP3rAavFCJFDAWEDAWADwAD962ADkU4FkUWrwpFGgZ6RR6ulkUiryJFJgaMEizcKkIIIkWUBYQMBYAPAAP3rYAORTgORZ6v4kWh5kWmr+wSLOQiRQwFhAwFgA8AA/etgA5FOBZFFrBuRRoGekUer/pFIeZFJhjEEizsKkIMIkWUBYQMBYAPAAP3rYAORTgORZ6xDkWh5kWmsRgSLPQSLPgdgA8AA/esBrGkIkUMBYQMBYAPAAP3rYAORTgWRRaxmkUaBnpFHrEmRSKxskUmIwQSLQAqQhAiRZQFhAwFgA8AA/etgA5FOA5FnrJyRaHmRaayfBItCCJFDAWEDAWADwAD962ADkU4FkUWsv5FGgZ6RR6yikUh5kUmGMQSLRASLRQqQhQiRZQFhAwFgA56xYAORTgORZ6znkWis6pFprO0Ei0cCN0YIkUMBYQMBYAOesWADkU4FkUWtDJFGrQ+RR6zwkUh5kUmBowSLSQqQhgiRZQFhAwFgA8AA/etgA5FOA5FnrTWRaHmRaa04BItLBItMB2ADwAD96wGtWwiRQwFhAwFgA8AA/etgA5FOBZFFrViRRoGekUetO5FIrV6RSYGjBItOCpCHCJFlAWEDAWADwAD962ADkU4DkWetjpFoeZFprZEEi1AIkUMBYQMBYAPAAP3rYAORTgWRRa2xkUaBnpFHrZSRSHmRSYYxBItSCpCICJFlAWEDAWADwAD962ADkU4DkWet2ZFoeZFprdwEi1QEi1UHYAPAAP3rAa3/CJFDAWEDAWADwAD962ADkU4FkUWt/JFGgZ6RR63fkUiuApFJgaMEi1cKkIkIkWUBYQMBYAPAAP3rYAORTgORZ64ykWh5kWmuNQSLWQiRQwFhAwFgA8AA/etgA5FOBZFFrlWRRoGekUeuOJFIqOyRSYGjBItbCpCKCJFlAWEDAWADwAD962ADkU4DkWeufpFoeZFproEEi10IkUMBYQMBYAPAAP3rYAORTgWRRa6hkUaBnpFHroSRSHmRSYYxBItfBItgBIthBItiB2ADwAD96wGu0giRWQAHkVuuyZFcrsyRRa7PkUaBnpFHeZFIrtWRSYGjBItlBItmBItnCJFZAAeRW67/kVyvApFFrwWRRoGekUd5kUiu1ZFJgaMEi2oEi2sIkVkAB5FbryiRXHmRRa8rkUaBnpFHeZFIeZFJgaMEi24KkIsIkWUBYQMBYAPAAP3rYAORTgORZ69MkWh5kWmvTwSLcASLcQdgA8AA/esBr3IIkUMBYQMBYAPAAP3rYAORTgWRRa9vkUaBnpFHr1KRSK91kUmBowSLcwSLdASLdQdgA8AA/esBr6sIkVkAB5Fbr6WRXHmRRa+okUaBnpFHeZFIr66RSYGjBIt4BIt5BIt6AjdKCJFZAAeRW6/XkVyv2pFFr92RRq/gkUd5kUh5kUmBowSLfQSLfgSLfwdgA8AA/esBsAgIkVkAB5FbsAKRXHmRRbAFkUaBnpFHeZFIsAuRSYGjBIuCBIuDBIuECJFZAAeRW7A0kVywN5FFsDqRRhWRR3mRSHmRSYGjBIuHCpCMCJFlAWEDAWADwAD962ADkU4DkWewW5FoeZFpsF4Ei4kEi4oHYAPAAP3rAbCBCJFDAWEDAWADwAD962ADkU4FkUWwfpFGgZ6RR7BhkUiwhJFJgaMEi4wEi40CNyQIkVkAB5FbsLSRXHmRRbC3kUawupFHeZFIeZFJgaMEi5AEi5EEi5IIkVkAB5FbsNuRXLDekUWw4ZFGgZ6RR3mRSLCEkUmBowSLlQSLlgSLlwdgA8AA/esBsQoIkVkAB5FbsQSRXLDekUWxB5FGgZ6RR3mRSLENkUmBowSLmgiRWQAHkVuxBJFcsN6RRbE3kUaBnpFHeZFIsQ2RSYGjBIudCpCNCJFlAWEDAWADwAD962ADkU4DkWexWpFoeZFpsV0Ei58IkUMBYQMBYAPAAP3rYAORTgWRRbF9kUaBnpFHsWCRSLCEkUmBowSLoQqQjgiRZQFhAwFgA56xYAORTgORZ7GmkWh5kWmxqQSLowSLpAdgA8AA/esBscoIkUMBYQMBYAOesWADkU4FkUWxx5FGgZ6RR7GskUixzZFJgaMEi6YEi6cKkI8IkWUBYQMBYAPAAP3rYAORTgORZ7H7kWix/pFpsgEEi6kIkUMBYQMBYAPAAP3rYAORTgWRRbIikUaDR5FHsgSRSHmRSYGjBIurCpCQCJFlAWEDAWADnrFgA5FOA5FnskqRaHmRabJNBIutBIuuB2ADwAD96wGybgiRQwFhAwFgA56xYAORTgWRRbJrkUaBnpFHslCRSLJxkUmBowSLsASLsQI3LgiRWQAHkVuyn5FceZFFsqKRRrKlkUd5kUh5kUmBowSLtASLtQqQkQiRZQFhAwFgA56xYAORTgORZ7LGkWiyyZFpsswEi7cEi7gHYAPAAP3rAbLuCJFDAWEDAWADnrFgA5FOBZFFsuuRRoGekUeyz5FIsvGRSYGjBIu6CpCSCJFlAWEDAWADnrFgA5FOA5Fnsx+RaHmRabMiBIu8CJFDAWEDAWADnrFgA5FOBZFFs0CRRoGekUezJZFIsQ2RSYGjBIu+BIu/BIvAB2ADwAD96wGzbQiRWQAHkVuzZ5FceZFFs2qRRoGekUd5kUizcJFJgaMEi8MKkJMIkWUBYQMBYAOesWADkU4DkWezmZFoeZFps5wEi8UIkUMBYQMBYAOesWADkU4FkUWzupFGgZ6RR7OfkUiu1ZFJgaMEi8cKkJQIkWUBYQMBYAPAAP3rYAORTgORZ7PhkWh5kWmz5ASLyQI3KQiRQwFhAwFgA8AA/etgA5FOBZFFtASRRrQHkUez55FIeZFJgaMEi8sEi8wEi80HYAPAAP3rAbQ1CJFZAAeRW7QvkVx5kUW0MpFGgZ6RR3mRSLQ4kUmBowSL0ASL0QiRWQAHkVu0YZFceZFFtGSRRoGekUd5kUh5kUmBowSL1ASL1QiRWQAHkVu0hZFceZFFtIiRRoGekUd5kUh5kUmBowSL2ASL2QI3HQiRWQAHkVu0qZFceZFFtKyRRrSvkUd5kUh5kUmBowSL3AqQlQiRZQFhAwFgA56xYAORTgORZ7TQkWh5kWm00wSL3gSL3wdgA8AA/esBtPQIkUMBYQMBYAOesWADkU4FkUW08ZFGgZ6RR7TWkUi095FJgaMEi+EKkJYIkWUBYQMBYAPAAP3rYAORTgORZ7UlkWh5kWm1KASL4wiRQwFhAwFgA8AA/etgA5FOBZFFtUiRRoGekUe1K5FIsISRSYGjBIvlCpCXCJFlAWEDAWADnrFgA5FOA5FntXGRaHmRabV0BIvnBIvoB2ADwAD96wG1lQiRQwFhAwFgA56xYAORTgWRRbWSkUaBnpFHtXeRSLWYkUmBowSL6gSL6wiRWQAHkVu1xpFceZFFtcmRRoGekUd5kUh5kUmBowSL7gSL7wqQmAiRZQFhAwFgA8AA/etgA5FOA5FnteqRaLXtkWm18ASL8QI3MAiRQwFhAwFgA8AA/etgA5FOBZFFthGRRrYUkUe185FIeZFJgaMEi/MEi/QEi/UCN0sIkVkAB5FbtjyRXLY/kUW2QpFGtkWRR3mRSHmRSYGjBIv4CpCZCJFlAWEDA2ADwAD962ADwAD+bGADwAD+bGADkU4DkWe2Z5FoeZFptmoEi/oIkUMBYQMDYAPAAP3rYAPAAP5sYAPAAP5sYAORTgWRRbaWkUaBnpFHtm2RSHmRSYiyBIv8BIv9CJFZAAeRW7bKkVx5kUW2zZFGgZ6RR3mRSHmRSYGjBIwACpCaCJFlAWEDAWADwAD962ADkU4DkWe27pFoeZFptvEEjAIEjAMHYAPAAP3rAbcUCJFDAWEDAWADwAD962ADkU4FkUW3EZFGgZ6RR7b0kUi3F5FJgaMEjAUKkJsIkWUBYQMBYAPAAP3rYAORTgORZ7dHkWh5kWm3SgSMBwSMCAdgA8AA/esBt20IkUMBYQMBYAPAAP3rYAORTgWRRbdqkUaBnpFHt02RSLdwkUmBowSMCgSMCwSMDAiRWQAHkVu3oJFct6ORRbemkUZTkUd5kUh5kUmBowSMDwSMEASMEQI3VwiRWQAHkVu3x5Fct8qRRbfNkUa30JFHeZFIeZFJgaMEjBQEjBUEjBYEjBcHYAPAAP3rAbf7CJFZAAeRW7fykVy39ZFFt/iRRoGekUd5kUi3/pFJgaMEjBoEjBsIkVkAB5FbuCiRXLejkUW4K5FGgj+RR3mRSHmRSYGjBIweBIwfBIwgAjdVCJFZAAeRW7hNkVy4UJFFuFORRrhWkUd5kUh5kUmBowSMIwSMJASMJQI3VgiRWQAHkVu4eJFcuHuRRbh+kUa4gZFHeZFIeZFJgaMEjCgEjCkCNzIIkVkAB5FbuKORXLejkUW4ppFGuKmRR3mRSHmRSYGjBIwsBIwtAjcxCJFZAAeRW7jLkVx5kUW4zpFGuNGRR3mRSHmRSYGjBIwwBIwxAjdMCJFZAAeRW7jykVy3o5FFuPWRRrj4kUd5kUh5kUmBowSMNASMNQqQnAiRZQFhAwFgA56xYAORTgORZ7kakWi5HZFpuSAEjDcCN00IkUMBYQMBYAOesWADkU4FkUW5P5FGuUKRR7kjkUh5kUmBowSMOQSMOgSMOwdgA8AA/esBuW4IkVkAB5FbuWiRXHmRRblrkUaBnpFHeZFIuXGRSYGjBIw+BIw/BIxAAjdOCJFZAAeRW7makVy5nZFFuaCRRrmjkUd5kUh5kUmBowSMQwqQnQiRZQFhAwFgA8AA/etgA5FOA5FnucWRaHmRabnIBIxFCJFDAWEDAWADwAD962ADkU4FkUW56JFGgZ6RR7nLkUh5kUmBowSMRwSMSAiRWQAHkVu6EJFceZFFuhORRoGekUd5kUh5kUmBowSMSwSMTAiRWQAHkVu6NJFceZFFujeRRoGekUd5kUh5kUmBowSMTwqQngiRZQFhAwJgA4i4YAOIuGADkU4DkWe6WJFoeZFpulsEjFEIkUMBYQMCYAOIuGADiLhgA5FOBZFFun2RRoGekUe6XpFIeZFJgaMEjFMKkJ8IkWUBYQMBYAPAAP3rYAORTgORZ7qnkWh5kWm6qgSMVQiRQwFhAwFgA8AA/etgA5FOBZFFusqRRoGekUe6rZFIeZFJgaMEjFcKkKAIkWUBYQMBYAPAAP3rYAORTgORZ7rykWh5kWm69QSMWQiRQwFhAwFgA8AA/etgA5FOBZFFuxWRRoGekUe6+JFIeZFJgaMEjFsKkKEIkWUBYQMBYAPAAP3rYAORTgORZ7s9kWh5kWm7QASMXQiRQwFhAwFgA8AA/etgA5FOBZFFu2CRRoGekUe7Q5FIeZFJgaMEjF8KkKIIkWUBYQMBYAPAAP3rYAORTgORZ7uIkWh5kWm7iwSMYQiRQwFhAwFgA8AA/etgA5FOBZFFu6uRRoGekUe7jpFIeZFJgaMEjGMKkKMIkWUBYQMBYAPAAP3rYAORTgORZ7vTkWh5kWm71gSMZQiRQwFhAwFgA8AA/etgA5FOBZFFu/aRRoGekUe72ZFIeZFJgaMEjGcKkKQIkWUBYQMBYAPAAP3rYAORTgORZ7wekWh5kWm8IQSMaQiRQwFhAwFgA8AA/etgA5FOBZFFvEGRRoGekUe8JJFIeZFJgaMEjGsKkKUIkWUBYQMBYAOIuGADkU4DkWe8aZFoeZFpvGwEjG0IkUMBYQMBYAOIuGADkU4FkUW8ipFGgZ6RR7xvkUh5kUmBowSMbwqQpgiRZQFhAwNgA4i4YAOIuGADiLhgA5FOA5FnvLCRaHmRabyzBIxxCJFDAWEDA2ADiLhgA4i4YAOIuGADkU4FkUW82ZFGgZ6RR7y2kUh5kUmBowSMcwqQpwiRZQFhAwJgA8AA/etgA4i4YAORTgORZ70HkWh5kWm9CgSMdQiRQwFhAwJgA8AA/etgA4i4YAORTgWRRb0ukUaBnpFHvQ2RSHmRSYGjBIx3CpCoCJFlAWEDAWADwAD962ADkU4DkWe9WpFoeZFpvV0EjHkIkUMBYQMBYAPAAP3rYAORTgWRRb19kUaBnpFHvWCRSHmRSYGjBIx7BIx8BIx9AjdYCJFZAAeRW72lkVy9qJFFvauRRr2ukUd5kUh5kUmBowSMgASMgQSMggI3TwiRWQAHkVu90JFcvdORRb3WkUa92ZFHeZFIeZFJgaMEjIUEjIYEjIcCN1AIkVkAB5FbvfuRXL3+kUW+AZFGvgSRR3mRSHmRSYGjBIyKBIyLBIyMAjdRCJFZAAeRW74mkVy+KZFFviyRRr4vkUd5kUh5kUmBowSMjwSMkAqQqQiRZQFhAwFgA8AA/etgA5FOA5FnvlGRaL5UkWm+VwSMkgSMkwdgA8AA/esBvnsIkUMBYQMBYAPAAP3rYAORTgWRRb54kUaBnpFHvlqRSL5+kUmBowSMlQSMlgqQqgiRZQFhAwFgA8AA/etgA5FOA5Fnvq6RaL6xkWm+tASMmASMmQdgA8AA/esBvtgIkUMBYQMBYAPAAP3rYAORTgWRRb7VkUaBnpFHvreRSL7bkUmBowSMmwqQqwiRZQFhAwFgA8AA/etgA5FOA5FnvwuRaJ/HkWm/DgSMnQiRQwFhAwFgA8AA/etgA5FOBZFFvy+RRoGekUe/EZFIvn6RSYGjBIyfCpCsCJFlAWEDAWADwAD962ADkU4DkWe/WJFoeZFpv1sEjKEEjKIHYAPAAP3rAb9+CJFDAWEDAWADwAD962ADkU4FkUW/e5FGgZ6RR79ekUi/gZFJiKMEjKQKkK0IkWUBYQMBYAPAAP3rYAORTgORZ7+xkWh5kWm/tASMpgiRQwFhAwFgA8AA/etgA5FOBZFFv9SRRoGekUe/t5FIeZFJhjEEjKgEjKkKkK4IkWUBYQMCYAOIuGADiLhgA5FOA5Fnv/yRaL//kWnAAEACBIyrBIysB2ADwAD96wHAAEAqCJFDAWEDAmADiLhgA4i4YAORTgWRRcAAQCeRRoGekUfAAEAFkUjAAEAtkUmBowSMrgSMrwiRWQAHkVvAAEBnkVx5kUXAAEBqkUaBnpFHeZFIeZFJgaMEjLIEjLMIkVkAB5FbwABAj5FceZFFwABAkpFGgZ6RR3mRSHmRSYGjBIy2CpCvCJFlAWEDAmADiLhgA4i4YAORTgORZ8AAQLeRaHmRacAAQLoEjLgEjLkHYAPAAP3rAcAAQOMIkUMBYQMCYAOIuGADiLhgA5FOBZFFwABA4JFGgZ6RR8AAQL2RSMAAQOaRSYGjBIy7BIy8BIy9BIy+B2ADwAD96wHAAEEpCJFZAAeRW8AAQSCRXMAAQSORRcAAQSaRRoGekUd5kUjAAEEskUmBowSMwQSMwgSMwwdgA8AA/esBwABBZgiRWQAHkVvAAEFgkVx5kUXAAEFjkUaBnpFHeZFIwABBaZFJgaMEjMYEjMcEjMgEjMkHYAPAAP3rAcAAQaMIkVkAB5FbwABBmpFcwABBnZFFwABBoJFGgZ6RR3mRSMAAQaaRSYGjBIzMBIzNBIzOB2ADwAD96wHAAEHgCJFZAAeRW8AAQdqRXHmRRcAAQd2RRoGekUd5kUjAAEHjkUmBowSM0QSM0gSM0wdgA8AA/esBwABCGgiRWQAHkVvAAEIUkVx5kUXAAEIXkUaBnpFHeZFIwABCHZFJgaMEjNYEjNcKkLAIkWUBYQMBYAOIuGADkU4DkWfAAEJOkWjAAEJRkWnAAEJUBIzZBIzaB2ADwAD96wHAAEJ8CJFDAWEDAWADiLhgA5FOBZFFwABCeZFGgZ6RR8AAQleRSMAAQn+RSYGjBIzcBIzdBIzeCJFZAAeRW8AAQrWRXMAAQriRRcAAQruRRoGekUd5kUjAAEJ/kUmBowSM4QqQsQiRZQFhAwFgA8AA/etgA5FOA5FnwABC5pFoeZFpwABC6QSM4wSM5AdgA8AA/esBwABDEAiRQwFhAwFgA8AA/etgA5FOBZFFwABDDZFGgZ6RR8AAQuyRSMAAQxORSYijBIzmBIznBIzoBIzpB2ADwAD96wHAAENUCJFZAAeRW8AAQ0uRXMAAQ06RRcAAQ1GRRoGekUd5kUjAAENXkUmBowSM7ASM7QI3LQiRWQAHkVvAAEOLkVx5kUXAAEOOkUbAAEORkUd5kUh5kUmBowSM8ASM8QSM8gdgA8AA/esBwABDvgiRWQAHkVvAAEO4kVx5kUXAAEO7kUaBnpFHeZFIwABDwZFJgaMEjPUEjPYIkVkAB5FbwABD8pFceZFFwABD9ZFGgZ6RR3mRSHmRSYGjBIz5BIz6BIz7B2ADwAD96wHAAEQgCJFZAAeRW8AARBqRXHmRRcAARB2RRoGekUd5kUjAAEQjkUmBowSM/gqQsgiRZQFhAwFgA8AA/etgA5FOA5FnwABEVJFoeZFpwABEVwSNAASNAQdgA8AA/esBwABEfgiRQwFhAwFgA8AA/etgA5FOBZFFwABEe5FGgZ6RR8AARFqRSMAARIGRSYGjBI0DCpCzCJFlAWEDAWADwAD962ADkU4DkWfAAES5kWh5kWnAAES8BI0FBI0GB2ADwAD96wHAAETjCJFDAWEDAWADwAD962ADkU4FkUXAAETgkUaBnpFHwABEv5FIwABE5pFJgaMEjQgKkLQIkWUBYQMBYAPAAP3rYAORTgORZ8AARR6RaHmRacAARSEEjQoIkUMBYQMBYAPAAP3rYAORTgWRRcAARUWRRoGekUfAAEUkkUh5kUmGMQSNDAqQtQiRZQFhAwFgA4i4YAORTgORZ8AARXGRaHmRacAARXQEjQ4IkUMBYQMBYAOIuGADkU4FkUXAAEWWkUaBnpFHwABFd5FIeZFJgaMEjRAEjREEjRIHYAPAAP3rAcAARcYIkVkAB5FbwABFwJFceZFFwABFw5FGgZ6RR3mRSMAARcmRSYGjBI0VBI0WCJFZAAeRW8AARfqRXHmRRcAARf2RRoGekUd5kUh5kUmBowSNGQSNGgSNGwI3LAiRWQAHkVvAAEYikVzAAEYlkUXAAEYokUbAAEYrkUd5kUh5kUmBowSNHgSNHwSNIAI3KwiRWQAHkVvAAEZVkVzAAEZYkUXAAEZbkUbAAEZekUd5kUh5kUmBowSNIwSNJASNJQI3KgiRWQAHkVvAAEaIkVzAAEaLkUXAAEaOkUbAAEaRkUd5kUh5kUmBowSNKASNKQiRWQAHkVvAAEa7kVx5kUXAAEa+kUaBnpFHeZFIeZFJgaMEjSwEjS0KkLYIkWUBYQMCYAPAAP3rYAPAAPwFYAORTgORZ8AARuORaMAARuaRacAARukEjS8EjTAHYAPAAP3rAcAARxkIkUMBYQMCYAPAAP3rYAPAAPwFYAORTgWRRcAARxaRRoGekUfAAEbskUjAAEcckUmBowSNMgSNMwqQtwiRZQFhAwFgA8AA/etgA5FOA5FnwABHWpFowABHXZFpwABHYASNNQSNNgdgA8AA/esBwABHigiRQwFhAwFgA8AA/etgA5FOBZFFwABHh5FGgZ6RR8AAR2ORSMAAR42RSYGjBI04BI05CpC4CJFlAWEDAWADiLhgA5FOA5FnwABHxZFowABHyJFpwABHywSNOwSNPAdgA8AA/esBwABH8wiRQwFhAwFgA4i4YAORTgWRRcAAR/CRRoGekUfAAEfOkUjAAEf2kUmBowSNPgqQuQiRZQFhAwJgA8AA/etgA8AA/etgA5FOA5FnwABILJFoeZFpwABILwSNQAiRQwFhAwJgA8AA/etgA8AA/etgA5FOBZFFwABIWZFGgZ6RR8AASDKRSHmRSYYxBI1CBI1DBI1ECJFZAAeRW8AASIuRXMAASI6RRcAASJGRRoP+kUd5kUh5kUmBowSNRwqQugiRZQFhAwNgA8AA/etgA8AA/mxgA8AA/mxgA5FOA5FnwABIuZFoeZFpwABIvASNSQiRQwFhAwNgA8AA/etgA8AA/mxgA8AA/mxgA5FOBZFFwABI7JFGgZ6RR8AASL+RSHmRSYiyBI1LCpC7CJFlAWEDAmADiLhgA4i4YAORTgORZ8AASSSRaHmRacAASScEjU0EjU4HYAPAAP3rAcAASVAIkUMBYQMCYAOIuGADiLhgA5FOBZFFwABJTZFGgZ6RR8AASSqRSMAASVORSYGjBI1QBI1RCpC8CJFlAWEDBGADiLhgA4i4YAPAAP3rYAPAAP3rYAORTgORZ8AASY2RaMAASZCRacAASZMEjVMEjVQHYAPAAP3rAcAAScsIkUMBYQMEYAOIuGADiLhgA8AA/etgA8AA/etgA5FOBZFFwABJyJFGgZ6RR8AASZaRSMAASc6RSYGjBI1WCpC9CJFlAWEDBGADiLhgA4i4YAPAAP3rYAPAAP3rYAORTgORZ8AAShSRaMAASZCRacAAShcEjVgIkUMBYQMEYAOIuGADiLhgA8AA/etgA8AA/etgA5FOBZFFwABKTJFGgZ6RR8AAShqRSMAASc6RSYGjBI1aCpC+CJFlAWEDBmADiLhgA4i4YAPAAP3rYAPAAP3rYAPAAP3rYAPAAP3rYAORTgORZ8AASomRaMAASZCRacAASowEjVwIkUMBYQMGYAOIuGADiLhgA8AA/etgA8AA/etgA8AA/etgA8AA/etgA5FOBZFFwABKzZFGgZ6RR8AASo+RSMAASc6RSYGjBI1eBI1fCpC/CJFlAWEDBmADiLhgA4i4YAPAAP3rYAPAAP3rYAPAAP3rYAPAAP3rYAORTgORZ8AASxaRaMAASxmRacAASxwEjWEIkUMBYQMGYAOIuGADiLhgA8AA/etgA8AA/etgA8AA/etgA8AA/etgA5FOBZFFwABLXZFGgZ6RR8AASx+RSMAASc6RSYGjBI1jCpDACJFlAWEDBGADiLhgA4i4YAPAAP3rYAPAAP3rYAORTgORZ8AAS6aRaMAASxmRacAAS6kEjWUIkUMBYQMEYAOIuGADiLhgA8AA/etgA8AA/etgA5FOBZFFwABL3pFGgZ6RR8AAS6yRSMAASc6RSYGjBI1nCpDBCJFlAWEDBWADiLhgA4i4YAPAAP3rYAOIuGADwAD962ADkU4DkWfAAEwbkWjAAEmQkWnAAEweBI1pCJFDAWEDBWADiLhgA4i4YAPAAP3rYAOIuGADwAD962ADkU4FkUXAAExXkUaBnpFHwABMIZFIwABJzpFJgaMEjWsKkMIIkWUBYQMFYAOIuGADiLhgA8AA/etgA4i4YAPAAP3rYAORTgORZ8AATJiRaMAASxmRacAATJsEjW0IkUMBYQMFYAOIuGADiLhgA8AA/etgA4i4YAPAAP3rYAORTgWRRcAATNSRRoGekUfAAEyekUjAAEnOkUmBowSNbwSNcAiRWQAHkVvAAE0VkVx5kUXAAE0YkUaBnpFHeZFIeZFJhjEEjXMKkMMIkWUBYQMBYAPAAP5sYAORTgORZ8AATT2RaHmRacAATUAEjXUIkUMBYQMBYAPAAP5sYAORTgWRRcAATWSRRoGekUfAAE1DkUh5kUmIwQSNdwSNeASNeQdgA8AA/esBwABNlgiRWQAHkVvAAE2QkVx5kUXAAE2TkUaBnpFHeZFIwABNmZFJgaMEjXwEjX0IkVkAB5FbwABNypFceZFFwABNzZFGgZ6RR3mRSHmRSYYxBI2ABI2BCJFZAAeRW8AATfKRXHmRRcAATfWRRoGekUd5kUh5kUmGMQSNhAqQxAiRZQFhAwJgA8AA/etgA8AA/mxgA5FOA5FnwABOGpFoeZFpwABOHQSNhgiRQwFhAwJgA8AA/etgA8AA/mxgA5FOBZFFwABOR5FGgZ6RR8AATiCRSHmRSYjBBI2ICpDFCJFlAWEDAWADwAD962ADkU4DkWfAAE55kWh5kWnAAE58BI2KCJFDAWEDAWADwAD962ADkU4FkUXAAE6gkUaBnpFHwABOf5FIeZFJiMEEjYwKkMYIkWUBYQMEYAPAAP3rYAPAAP3rYAPAAP3rYAPAAP5sYAORTgORZ8AATsyRaHmRacAATs8EjY4IkUMBYQMEYAPAAP3rYAPAAP3rYAPAAP3rYAPAAP5sYAORTgWRRcAATwWRRoGekUfAAE7SkUh5kUmIwQSNkAqQxwiRZQFhAwNgA8AA/etgA8AA/etgA8AA/etgA5FOA5FnwABPQ5FoeZFpwABPRgSNkgiRQwFhAwNgA8AA/etgA8AA/etgA8AA/etgA5FOBZFFwABPdpFGgZ6RR8AAT0mRSHmRSYjBBI2UBI2VBI2WAjdSCJFZAAeRW8AAT66RXMAAT7GRRcAAT7SRRsAAT7eRR3mRSHmRSYGjBI2ZCpDICJFlAWEDAWADwAD962ADkU4DkWfAAE/hkWh5kWnAAE/kBI2bBI2cB2ADwAD96wHAAFALCJFDAWEDAWADwAD962ADkU4FkUXAAFAIkUaBnpFHwABP55FIwABQDpFJgaMEjZ4KkMkIkWUBYQMBYAPAAP3rYAORTgORZ8AAUEaRaHmRacAAUEkEjaAEjaEHYAPAAP3rAcAAUHAIkUMBYQMBYAPAAP3rYAORTgWRRcAAUG2RRoGekUfAAFBMkUjAAFBzkUmBowSNowSNpAqQygiRZQFhAwNgA8AA/etgA4i4YAOIuGADkU4DkWfAAFCrkWjAAFCukWnAAFCxBI2mBI2nB2ADwAD96wHAAFDjCJFDAWEDA2ADwAD962ADiLhgA4i4YAORTgWRRcAAUOCRRoGekUfAAFC0kUjAAFDmkUmIowSNqQSNqgiRWQAHkVvAAFEmkVx5kUXAAFEpkUaBnpFHeZFIeZFJhjEEja0IkUMBYQMBYAPAAP5sYAORTgWRRcAAUU6RRoGekUeG5pFIeZFJgaMEja8EjbAKkMwIkWUBYQMBYAPAAP3rYAORTgORZ8AAUXiRaMAAUXuRacAAUX4EjbIEjbMHYAPAAP3rAcAAUagIkUMBYQMBYAPAAP3rYAORTgWRRcAAUaWRRoGekUfAAFGBkUjAAFGrkUmBowSNtQqQzQiRZQFhAwFgA8AA/etgA5FOA5FnwABR45FoeZFpwABR5gSNtwiRQwFhAwFgA8AA/etgA5FOBZFFwABSCpFGgZ6RR8AAUemRSHmRSYYxBI25BI26CJFZAAeRW8AAUjaRXHmRRcAAUjmRRoGekUd5kUh5kUmGtQSNvQSNvgiRWQAHkVvAAFJekVx5kUXAAFJhkUaBnpFHeZFIeZFJhrUEjcEKkM4IkWUBYQMCYAPAAP3rYAPAAP5sYAORTgORZ8AAUoaRaHmRacAAUokEjcMIkUMBYQMCYAPAAP3rYAPAAP5sYAORTgWRRcAAUrORRoGekUfAAFKMkUh5kUmGtQSNxQqQzwiRZQFhAwFgA8AA/etgA5FOA5FnwABS5ZFoeZFpwABS6ASNxwiRQwFhAwFgA8AA/etgA5FOBZFFwABTDJFGgZ6RR8AAUuuRSHmRSYa1BI3JCpDQCJFlAWEDAmADwAD962ADwAD962ADkU4DkWfAAFM4kWh5kWnAAFM7BI3LCJFDAWEDAmADwAD962ADwAD962ADkU4FkUXAAFNlkUaBnpFHwABTPpFIeZFJhrUEjc0Ejc4IkVkAB5FbwABTl5FceZFFwABTmpFGgZ6RR3mRSHmRSYa1BI3RBI3SCJFZAAeRW8AAU7+RXHmRRcAAU8KRRoGekUd5kUh5kUmGtQSN1gqQ0QiRZQFhAwFgA8AA/etgA5FOA5FnwABT55FoeZFpwABT6gSN2AiRQwFhAwFgA8AA/etgA5FOBZFFwABUDpFGgZ6RR8AAU+2RSHmRSYa1BI3aCpDSCJFlAWEDAWADwAD962ADkU4DkWfAAFQ6kWh5kWnAAFQ9BI3cCJFDAWEDAWADwAD962ADkU4FkUXAAFRhkUaBnpFHwABUQJFIeZFJhrUEjd4KkNMIkWUBYQMCYAPAAP3rYAPAAP3rYAORTgORZ8AAVI2RaHmRacAAVJAEjeAIkUMBYQMCYAPAAP3rYAPAAP3rYAORTgWRRcAAVLqRRoGekUfAAFSTkUh5kUmGtQSN4gSN4wiRWQAHkVvAAFTskVx5kUXAAFTvkUaBnpFHeZFIeZFJhrUEjeYKkNQIkWUBYQMBYAPAAP3rYAORTgORZ8AAVRSRaHmRacAAVRcEjegIkUMBYQMBYAPAAP3rYAORTgWRRcAAVTuRRoGekUfAAFUakUh5kUmGtQSN6wqQ1QiRZQFhAwJgA8AA/etgA8AA/etgA5FOA5FnwABVZ5FoeZFpwABVagSN7QiRQwFhAwJgA8AA/etgA8AA/etgA5FOBZFFwABVlJFGgZ6RR8AAVW2RSHmRSYa1BI3vCpDWCJFlAWEDAmADiLhgA8AA/etgA5FOA5FnwABVxpFoeZFpwABVyQSN8QiRQwFhAwJgA4i4YAPAAP3rYAORTgWRRcAAVfGRRoGekUfAAFXMkUh5kUmGtQSN8wqQ1wiRZQFhAwJgA8AA/etgA8AA/etgA5FOA5FnwABWIZFoeZFpwABWJASN9QiRQwFhAwJgA8AA/etgA8AA/etgA5FOBZFFwABWTpFGgZ6RR8AAVieRSHmRSYa1BI33CpDYCJFlAWEDAmADwAD962ADwAD962ADkU4DkWfAAFaAkWh5kWnAAFaDBI35CJFDAWEDAmADwAD962ADwAD962ADkU4FkUXAAFatkUaBnpFHwABWhpFIeZFJhrUEjfsKkNkIkWUBYQMBYAPAAP3rYAORTgORZ8AAVt+RaHmRacAAVuIEjf0IkUMBYQMBYAPAAP3rYAORTgWRRcAAVwaRRoGekUfAAFblkUh5kUmGtQSN/wiRQwFhAwFgA8AA/etgA5FOBZFFwABXMpFGgZ6RR4f3kUh5kUmGtQSOAQqQ2wiRZQFhAwFgA8AA/mxgA5FOA5FnwABXXJFoeZFpwABXXwSOAwiRQwFhAwFgA8AA/mxgA5FOBZFFwABXg5FGgZ6RR8AAV2KRSHmRSYa1BI4FCpDcCJFlAWEDAWADwAD962ADkU4DkWfAAFevkWh5kWnAAFeyBI4HCJFDAWEDAWADwAD962ADkU4FkUXAAFfWkUaBnpFHwABXtZFIeZFJhrUEjgkEjgoEjgsHYAPAAP3rAcAAWAgIkVkAB5FbwABYApFceZFFwABYBZFGgZ6RR3mRSMAAWAuRSYGjBI4OBI4PCpDdCJFlAWEDA2ADwAD962ADiLhgA4i4YAORTgORZ8AAWDyRaMAAWD+RacAAWEIEjhEIkUMBYQMDYAPAAP3rYAOIuGADiLhgA5FOBZFFwABYcZFGgZ6RR8AAWEWRSHmRSYGjBI4TCpDeCJFlAWEDAmADiLhgA4i4YAORTgORZ7/8kWjAAFilkWnAAFioBI4VBI4WB2ADwAD96wHAAFjSCJFDAWEDAmADiLhgA4i4YAORTgWRRcAAWM+RRoGekUfAAFirkUjAAFjVkUmBowSOGASOGQSOGgiRWQAHkVvAAFkPkVzAAFkSkUXAAFkVkUaD+5FHeZFIeZFJgaMEjh0KkN8IkWUBYQMBYAPAAP3rYAORTgORZ8AAWT2RaHmRacAAWUAEjh8IkUMBYQMBYAPAAP3rYAORTgWRRcAAWWSRRoGekUfAAFlDkUh5kUmBowSOIQSOIgqQ4AiRZQFhAwJgA4i4YAOIuGADkU4DkWfAAFmQkWjAAFmTkWnAAFmWBI4kBI4lB2ADwAD96wHAAFnCCJFDAWEDAmADiLhgA4i4YAORTgWRRcAAWb+RRoGekUfAAFmZkUjAAFnFkUmBowSOJwSOKAqQ4QiRZQFhAwJgA4i4YAOIuGADkU4DkWfAAFn/kWjAAFoCkWnAAFoFBI4qBI4rB2ADwAD96wHAAFoxCJFDAWEDAmADiLhgA4i4YAORTgWRRcAAWi6RRoGekUfAAFoIkUjAAFo0kUmBowSOLQSOLgqQ4giRZQFhAwJgA4i4YAOIuGADkU4DkWfAAFpukWjAAFpxkWnAAFp0BI4wBI4xB2ADwAD96wHAAFqgCJFDAWEDAmADiLhgA4i4YAORTgWRRcAAWp2RRoGekUfAAFp3kUjAAFqjkUmBowSOMwSONAqQ4wiRZQFhAwJgA4i4YAOIuGADkU4DkWfAAFrdkWjAAFrgkWnAAFrjBI42BI43B2ADwAD96wHAAFsPCJFDAWEDAmADiLhgA4i4YAORTgWRRcAAWwyRRoGekUfAAFrmkUjAAFsSkUmBowSOOQSOOgqQ5AiRZQFhAwJgA4i4YAOIuGADkU4DkWfAAFtMkWjAAFtPkWnAAFtSBI48BI49B2ADwAD96wHAAFt+CJFDAWEDAmADiLhgA4i4YAORTgWRRcAAW3uRRoGekUfAAFtVkUjAAFuBkUmBowSOPwSOQAqQ5QiRZQFhAwJgA4i4YAOIuGADkU4DkWfAAFu7kWjAAFu+kWnAAFvBBI5CBI5DB2ADwAD96wHAAFvtCJFDAWEDAmADiLhgA4i4YAORTgWRRcAAW+qRRoGekUfAAFvEkUjAAFvwkUmBowSORQSORgqQ5giRZQFhAwJgA4i4YAOIuGADkU4DkWfAAFwqkWjAAFwtkWnAAFwwBI5IBI5JB2ADwAD96wHAAFxcCJFDAWEDAmADiLhgA4i4YAORTgWRRcAAXFmRRoGekUfAAFwzkUjAAFxfkUmBowSOSwqQ5wiRZQFhAwJgA4i4YAOIuGADkU4DkWfAAFyZkWjAAFtPkWnAAFycBI5NCJFDAWEDAmADiLhgA4i4YAORTgWRRcAAXMWRRoGekUfAAFyfkUjAAFuBkUmBowSOTwSOUASOUQdgA8AA/esBwABc/AiRWQAHkVvAAFz2kVx5kUXAAFz5kUaBnpFHeZFIwABc/5FJgaMEjlQEjlUEjlYHYAPAAP3rAcAAXTYIkVkAB5FbwABdMJFceZFFwABdM5FGgZ6RR3mRSMAAXTmRSYGjBI5ZCpDoCJFlAWEDAWADwAD962ADkU4DkWfAAF1qkWh5kWnAAF1tBI5bCJFDAWEDAWADwAD962ADkU4FkUXAAF2RkUaBnpFHwABdcJFIeZFJgaMEjl0Ejl4CNygIkVkAB5FbwABdvZFceZFFwABdwJFGwABdw5FHeZFIeZFJgaMEjmEEjmIEhUUIkVkAB5FbwABd6pFcwABd7ZFFwABd8JFGgZ6RR3mRSHmRSYGjBI5lBI5mBI5nBI5oB2ADwAD96wHAAF4hCJFZAAeRW8AAXhiRXMAAXhuRRcAAXh6RRoGekUd5kUjAAF4kkUmBowSOawqQ6QiRZQFhAwFgA56xYAORTgORZ8AAXliRaHmRacAAXlsEjm0CNycIkUMBYQMBYAOesWADkU4FkUXAAF59kUbAAF6AkUfAAF5ekUh5kUmBowSObwqQ6giRZQFhAwJgA8AA/mxgA8AA/etgA5FOA5FnwABerJFoeZFpwABerwSOcQiRQwFhAwJgA8AA/mxgA8AA/etgA5FOBZFFwABe2ZFGgZ6RR8AAXrKRSHmRSYGjBI5zBI50AjcvCJFZAAeRW8AAXwuRXHmRRcAAXw6RRsAAXxGRR3mRSHmRSYGjBI53BI54BI55BI56B2ADwAD96wHAAF9BCJFZAAeRW8AAXziRXMAAXzuRRcAAXz6RRoGekUd5kUjAAF9EkUmBowSOfQSOfgI3QQiRWQAHkVvAAF94kVx5kUXAAF97kUbAAF9+kUd5kUh5kUmBowSOgQSOggI3JgiRWQAHkVvAAF+lkVx5kUXAAF+okUbAAF+rkUd5kUh5kUmBowSOhQSOhgSOhwSOiAdgA8AA/esBwABf2wiRWQAHkVvAAF/SkVzAAF/VkUXAAF/YkUaBnpFHeZFIwABf3pFJgaMEjosEjowEjo0IkVkAB5FbwABgEpFcwABgFZFFwABgGJFGgZ6RR3mRSLWYkUmBowSOkAqQ6wiRZQFhAwFgA8AA/etgA5FOA5FnwABgQZFoeZFpwABgRASOkgSOkwdgA8AA/esBwABgawiRQwFhAwFgA8AA/etgA5FOBZFFwABgaJFGgZ6RR8AAYEeRSMAAYG6RSYGjBI6VBI6WCpDsCJFlAWEDAWADwAD962ADkU4DkWfAAGCmkWjAAGCpkWnAAGCsBI6YCJFDAWEDAWADwAD962ADkU4FkUXAAGDTkUaBnpFHwABgr5FIolyRSYGjBI6aBI6bBI6cAjclCJFZAAeRW8AAYQCRXMAAYQORRcAAYQaRRsAAYQmRR3mRSHmRSYGjBI6fBI6gBI6hB2ADwAD96wHAAGE5CJFZAAeRW8AAYTORXHmRRcAAYTaRRoGekUd5kUjAAGE8kUmIowSOpASOpQqQ7QiRZQFhAwFgA8AA/mxgA5FOA5FnwABhbZFowABhcJFpwABhcwSOpwiRQwFhAwFgA8AA/mxgA5FOBZFFwABhmpFGgZ6RR8AAYXaRSHmRSYiyBI6pBI6qBI6rB2ADwAD96wHAAGHMCJFZAAeRW8AAYcaRXHmRRcAAYcmRRoGekUd5kUjAAGHPkUmIowSOrgqQ7giRZQFhAwJgA8AA/etgA8AA/mxgA5FOA5FnwABiAJFoeZFpwABiAwSOsAiRQwFhAwJgA8AA/etgA8AA/mxgA5FOBZFFwABiLZFGgZ6RR8AAYgaRSHmRSYiyBI6yCpDvCJFlAWEDAmADwAD962ADwAD+bGADkU4DkWfAAGJfkWh5kWnAAGJiBI60CJFDAWEDAmADwAD962ADwAD+bGADkU4FkUXAAGKMkUaBnpFHwABiZZFIeZFJiLIEjrYEjrcEjrgHYAPAAP3rAcAAYsQIkVkAB5FbwABivpFceZFFwABiwZFGgZ6RR3mRSMAAYseRSYijBI67BI68CJFZAAeRW8AAYviRXHmRRcAAYvuRRoGekUd5kUh5kUmBowSOvwSOwASOwQdgA8AA/esBwABjJgiRWQAHkVvAAGMgkVx5kUXAAGMjkUaBnpFHeZFIwABjKZFJgaMEjsQKkPAIkWUBYQMBYAPAAP3rYAORTgORZ8AAY1qRaHmRacAAY10EjsYEjscHYAPAAP3rAcAAY4QIkUMBYQMBYAPAAP3rYAORTgWRRcAAY4GRRoGekUfAAGNgkUjAAGOHkUmIowSOyQSOygiRWQAHkVvAAGO/kVx5kUXAAGPCkUaBnpFHeZFIeZFJgaMEjs0Ejs4Ejs8CNyMIkVkAB5FbwABj55FcwABj6pFFwABj7ZFGwABj8JFHeZFIeZFJgaMEjtIEjtMIkVkAB5FbwABkGpFcwABd7ZFFwABkHZFGg/iRR3mRSHmRSYGjBI7WBI7XBI7YAjchCJFZAAeRW8AAZEWRXMAAZEiRRcAAZEuRRsAAZE6RR3mRSHmRSYGjBI7bCpDxCJFlAWEDAWADwAD8BWADkU4DkWfAAGR4kWh5kWnAAGR7BI7dCJFDAWEDAWADwAD8BWADkU4FkUXAAGSfkUaBnpFHwABkfpFIeZFJiLIEjt8EjuAEjuEEjuIHYAPAAP3rAcAAZNQIkVkAB5FbwABky5FcwABkzpFFwABk0ZFGgZ6RR3mRSMAAZNeRSYGjBI7lBI7mBI7nCJFZAAeRW8AAZQuRXMAAZQ6RRcAAZRGRRoM0kUd5kUh5kUmBowSO6gSO6wSO7ASO7QdgA8AA/esBwABlQgiRWQAHkVvAAGU5kVzAAGU8kUXAAGU/kUaBnpFHeZFIwABlRZFJgaMEjvAKkPIIkWUBYQMBYAPAAP3rYAORTgORZ8AAZXmRaHmRacAAZXwEjvIIkUMBYQMBYAPAAP3rYAORTgWRRcAAZaCRRoGekUfAAGV/kUh5kUmGMQSO9ASO9QqQ8wiRZQFhAwJgA8AA/etdA8AA/KkBYAPAAP3rYAORTgORZ8AAZcyRaMAAZc+RacAAZdIEjvcEjvgHYAPAAP3rAcAAZgkIkUMBYQMCYAPAAP3rXQPAAPypAWADwAD962ADkU4FkUXAAGYGkUaBnpFHwABl1ZFIwABmDJFJgaMEjvwEjv0Ejv4Ejv8HYAPAAP3rAcAAZloIkVkAB5FbwABmUZFcwABmVJFFwABmV5FGgZ6RR3mRSMAAZl2RSYGjBI8CBI8DBI8EAjcfCJFZAAeRW8AAZpGRXMAAZpSRRcAAZpeRRsAAZpqRR3mRSHmRSYGjBI8HCpD0CJFlAWEDAWADwAD+bGADkU4DkWfAAGbEkWh5kWnAAGbHBI8JBI8KB2ADwAD96wHAAGbuCJFDAWEDAWADwAD+bGADkU4FkUXAAGbrkUaBnpFHwABmypFIwABm8ZFJgaMEjwwEjw0Ejw4CNx4IkVkAB5FbwABnKZFcwABnLJFFwABnL5FGwABnMpFHeZFIeZFJgaMEjxEEjxIEjxMEjxQHYAPAAP3rAcAAZ2UIkVkAB5FbwABnXJFcwABnX5FFwABnYpFGgZ6RR3mRSMAAZ2iRSYGjBI8XCpD1CJFlAWEDA2ADiLhgA4i4YAOIuGADkU4DkWfAAGeckWh5kWnAAGefBI8ZBI8aB2ADwAD96wHAAGfMCJFDAWEDA2ADiLhgA4i4YAOIuGADkU4FkUXAAGfJkUaBnpFHwABnopFIwABnz5FJgaMEjxwKkPYIkWUBYQMDYAPAAP3rYAPAAP3rYAOIuGADkU4DkWfAAGgNkWh5kWnAAGgQBI8eBI8fB2ADwAD96wHAAGhBCJFDAWEDA2ADwAD962ADwAD962ADiLhgA5FOBZFFwABoPpFGgZ6RR8AAaBORSMAAaESRSYGjBI8hBI8iCpD3CJFlAWEDAmADwAD962ADwAD962ADkU4DkWfAAGiGkWjAAGiJkWnAAGiMBI8kAjc4CJFDAWEDAmADwAD962ADwAD962ADkU4FkUXAAGi5kUbAAGi8kUfAAGiPkUh5kUmBowSPJgSPJwSPKAdgA8AA/esBwABo9giRWQAHkVvAAGjwkVx5kUXAAGjzkUaBnpFHeZFIwABo+ZFJgaMEjysEjywEjy0CNxwIkVkAB5FbwABpKpFcwABpLZFFwABpMJFGwABpM5FHeZFIeZFJgaMEjzAEjzEEjzIEjzMHYAPAAP3rAcAAaWYIkVkAB5FbwABpXZFcwABpYJFFwABpY5FGgZ6RR3mRSMAAaWmRSYGjBI82BI83BI84AjcbCJFZAAeRW8AAaZ2RXMAAaaCRRcAAaaORRsAAaaaRR3mRSHmRSYGjBI87BI88BI89AjcaCJFZAAeRW8AAadCRXMAAadORRcAAadaRRsAAadmRR3mRSHmRSYGjBI9ABI9BBI9CAjcYCJFZAAeRW8AAagORXMAAagaRRcAAagmRRsAAagyRR3mRSHmRSYGjBI9FBI9GBI9HB2ADwAD96wHAAGo8CJFZAAeRW8AAajaRXHmRRcAAajmRRoGekUd5kUjAAGo/kUmBowSPSgqQ+AiRZQFhAwFgA8AA/etgA5FOA5FnwABqcJFoeZFpwABqcwSPTAiRQwFhAwFgA8AA/etgA5FOBZFFwABql5FGgZ6RR8AAanaRSHmRSYYxBI9OBI9PBI9QAjcXCJFZAAeRW8AAasORXMAAasaRRcAAasmRRsAAasyRR3mRSHmRSYGjBI9TBI9UCpD5CJFlAWEDAWADnrFgA5FOA5FnwABq9pFowABq+ZFpwABq/ASPVgiRQwFhAwFgA56xYAORTgWRRcAAayGRRoGekUfAAGr/kUjAAGVFkUmBowSPWAqQ+giRZQFhAwFgA8AA/etgA5FOA5FnwABrTpFoeZFpwABrUQSPWgSPWwdgA8AA/esBwABreAiRQwFhAwFgA8AA/etgA5FOBZFFwABrdZFGgZ6RR8AAa1SRSMAAa3uRSYijBI9dBI9eCJFZAAeRW8AAa7ORXHmRRcAAa7aRRoGekUd5kUh5kUmBowSPYQSPYgqQ+wiRZQFhAwJgA8AA/etgA8AA/AVgA5FOA5FnwABr25FowABr3pFpwABr4QSPZAiRQwFhAwJgA8AA/etgA8AA/AVgA5FOBZFFwABsDpFGgZ6RR8AAa+SRSIuEkUmBowSPZgqQ/AiRZQFhAwFgA8AA/AVgA5FOA5FnwABsQZFoeZFpwABsRASPaAiRQwFhAwFgA8AA/AVgA5FOBZFFwABsaJFGgZ6RR8AAbEeRSIuEkUmBowSPagSPawSPbAiRWQAHkVvAAGyVkVzAAGyYkUXAAGybkUaBnpFHeZFIke2RSYGjBI9vBI9wCJFZAAeRW8AAbMSRXMAAbJiRRcAAbMeRRoGekUd5kUiR7ZFJgaMEj3MEj3QEj3UHYAPAAP3rAcAAbPYIkVkAB5FbwABs8JFceZFFwABs85FGgZ6RR3mRSMAAbPmRSYijBI94BI95CJFZAAeRW8AAbSqRXHmRRcAAbS2RRoGekUd5kUh5kUmBowSPfASPfQSPfgSPfwdgA8AA/esBwABtWwiRWQAHkVvAAG1SkVzAAG1VkUXAAG1YkUaBnpFHeZFIwABtXpFJgaMEj4IKkP0IkWUBYQMBYAPAAP3rYAORTgORZ8AAbZKRaHmRacAAbZUEj4QIkUMBYQMBYAPAAP3rYAORTgWRRcAAbbmRRoGekUfAAG2YkUh5kUmGMQSPhgqQ/giRZQFhAwFgA8AA/etgA5FOA5FnwABt5ZFoeZFpwABt6ASPiAiRQwFhAwFgA8AA/etgA5FOBZFFwABuDJFGgZ6RR8AAbeuRSHmRSYYxBI+KBI+LCJFZAAeRW8AAbjiRXHmRRcAAbjuRRoGekUd5kUiR7ZFJgaMEj44KkP8IkWUBYQMCYAPAAP3rYAPAAP3rYAORTgORZ8AAbmGRaHmRacAAbmQEj5AEj5EHYAPAAP3rAcAAbpEIkUMBYQMCYAPAAP3rYAPAAP3rYAORTgWRRcAAbo6RRoGekUfAAG5nkUjAAG6UkUmIowSPkwqRAAiRZQFhAwFgA8AA/etgA5FOA5FnwABu0pFoeZFpwABu1QSPlQiRQwFhAwFgA8AA/etgA5FOBZFFwABu+ZFGgZ6RR8AAbtiRSMAAbpSRSYijBI+XBI+YCJFZAAeRW8AAbyiRXHmRRcAAbyuRRoGekUd5kUh5kUmGMQSPmwSPnAiRWQAHkVvAAG9QkVx5kUXAAG9TkUaBnpFHeZFIj+aRSYGjBI+fCpEBCJFlAWEDAWADnrFgA5FOA5FnwABveZFoeZFpwABvfASPoQiRQwFhAwFgA56xYAORTgWRRcAAb56RRoGekUfAAG9/kUh5kUmBowSPowqRAgiRZQFhAwFgA8AA/etgA5FOA5FnwABvyJFoeZFpwABvywSPpQiRQwFhAwFgA8AA/etgA5FOBZFFwABv75FGgZ6RR8AAb86RSJHtkUmBowSPpwSPqAiRWQAHkVvAAHAckVx5kUXAAHAfkUaBnpFHeZFIeZFJgaMEj6sEj6wIkVkAB5FbwABwRJFceZFFwABwR5FGgZ6RR3mRSHmRSYGjBI+vBI+wCJFZAAeRW8AAcGyRXHmRRcAAcG+RRoGekUd5kUh5kUmBowSPswSPtASPtQI3FAiRWQAHkVvAAHCUkVzAAHCXkUXAAHCakUbAAHCdkUd5kUh5kUmBowSPuASPuQqRAwiRZQFhAwFgA8AA/etgA5FOA5FnwABwx5FowABwypFpwABwzQSPuwSPvAdgA8AA/esBwABw9wiRQwFhAwFgA8AA/etgA5FOBZFFwABw9JFGgZ6RR8AAcNCRSMAAcPqRSYGjBI++CpEECJFlAWEDAWADwAD962ADkU4DkWfAAHEykWh5kWnAAHE1BI/ACJFDAWEDAWADwAD962ADkU4FkUXAAHFZkUaBnpFHwABxOJFIeZFJgaMEj8IKkQUIkWUBYQMBYAPAAP3rYAORTgORZ8AAcYWRaHmRacAAcYgEj8QEj8UHYAPAAP3rAcAAca8IkUMBYQMBYAPAAP3rYAORTgWRRcAAcayRRoGekUfAAHGLkUjAAHGykUmBowSPxwqRBgiRZQFhAwFgA8AA/etgA5FOA5FnwABx6pFoeZFpwABx7QSPyQiRQwFhAwFgA8AA/etgA5FOBZFFwAByEZFGgZ6RR8AAcfCRSMAAcbKRSYGjBI/LBI/MCJFZAAeRW8AAckCRXHmRRcAAckORRoGekUd5kUh5kUmBowSPzwqRBwiRZQFhAwFgA8AA/etgA5FOA5FnwAByaJFoeZFpwAByawSP0QiRQwFhAwFgA8AA/etgA5FOBZFFwAByj5FGgZ6RR8AAcm6RSHmRSYYxBI/TCpEICJFlAWEDAmADwAD962ADwAD962ADkU4DkWfAAHK7kWh5kWnAAHK+BI/VBI/WB2ADwAD96wHAAHLrCJFDAWEDAmADwAD962ADwAD962ADkU4FkUXAAHLokUaBnpFHwABywZFIwABy7pFJiKMEj9gKkQkIkWUBYQMCYAPAAP3rYAPAAP3rYAORTgORZ8AAcyyRaHmRacAAcy8Ej9oEj9sHYAPAAP3rAcAAc1wIkUMBYQMCYAPAAP3rYAPAAP3rYAORTgWRRcAAc1mRRoGekUfAAHMykUjAAHNfkUmIowSP3QqRCgiRZQFhAwNgA8AA/etgA8AA/etgA8AA/etgA5FOA5FnwABznZFoeZFpwABzoASP3wiRQwFhAwNgA8AA/etgA8AA/etgA8AA/etgA5FOBZFFwABz0JFGgZ6RR8AAc6ORSMAAcu6RSYijBI/hCpELCJFlAWEDAmADwAD962ADwAD962ADkU4DkWfAAHQLkWh5kWnAAHQOBI/jBI/kB2ADwAD96wHAAHQ7CJFDAWEDAmADwAD962ADwAD962ADkU4FkUXAAHQ4kUaBnpFHwAB0EZFIwAB0PpFJiKMEj+YEj+cKkQwIkWUBYQMFYAPAAP3rYAPAAP3rYAOIuGADiLhgA8AA/etgA5FOA5FnwAB0fJFowAB0f5FpwAB0ggSP6QiRQwFhAwVgA8AA/etgA8AA/etgA4i4YAOIuGADwAD962ADkU4FkUXAAHS9kUaBnpFHwAB0hZFIkLCRSYGjBI/rBI/sCpENCJFlAWEDBGADwAD962ADiLhgA4i4YAPAAP3rYAORTgORZ8AAdP6RaMAAdQGRacAAdQQEj+4IkUMBYQMEYAPAAP3rYAOIuGADiLhgA8AA/etgA5FOBZFFwAB1OZFGgZ6RR8AAdQeRSJCwkUmBowSP8AqRDgiRZQFhAwJgA8AA/etgA8AA/etgA5FOA5FnwAB1dJFoeZFpwAB1dwSP8gSP8wdgA8AA/esBwAB1pAiRQwFhAwJgA8AA/etgA8AA/etgA5FOBZFFwAB1oZFGgZ6RR8AAdXqRSMAAdaeRSYijBI/1CpEPCJFlAWEDAmADwAD962ADwAD+bGADkU4DkWfAAHXlkWh5kWnAAHXoBI/3CJFDAWEDAmADwAD962ADwAD+bGADkU4FkUXAAHYSkUaBnpFHwAB165FIeZFJgaMEj/kIkUMBYQMBYAPAAP3rYAORTgWRRcAAdkSRRoGekUeH1JFIeZFJgaMEj/sEj/wEj/0HYAPAAP3rAcAAdnQIkVkAB5FbwAB2bpFceZFFwAB2cZFGgZ6RR3mRSMAAdneRSYGjBJAABJABCJFZAAeRW8AAdqiRXHmRRcAAdquRRoGekUd5kUh5kUmGMQSQBASQBQSQBgiRWQAHkVvAAHbQkVzAAHbTkUXAAHbWkUaBnpFHeZFIwABtXpFJgaMEkAkEkAoIkVkAB5FbwAB3AZFceZFFwAB3BJFGgZ6RR3mRSHmRSYYxBJANBJAOCpERCJFlAWEDAWADwAD+bGADkU4DkWfAAHcpkWjAAHcskWnAAHcvBJAQBJARB2ADwAD96wHAAHdZCJFDAWEDAWADwAD+bGADkU4FkUXAAHdWkUaBnpFHwAB3MpFIwAB3XJFJgaMEkBMKkRIIkWUBYQMDYAPAAP5sYAPAAP3rYAPAAP3rYAORTgORZ8AAd5SRaHmRacAAd5cEkBUEkBYHYAPAAP3rAcAAd8oIkUMBYQMDYAPAAP5sYAPAAP3rYAPAAP3rYAORTgWRRcAAd8eRRoGekUfAAHeakUjAAHfNkUmIowSQGASQGQiRWQAHkVvAAHgRkVx5kUXAAHgUkUaBnpFHeZFIwABm8ZFJgaMEkBwEkB0EkB4CNxkIkVkAB5FbwAB4PJFcwAB4P5FFwAB4QpFGwAB4RZFHeZFIeZFJgaMEkCEEkCIEkCMIkVkAB5FbwAB4b5FcwAB4cpFFwAB4dZFGgZ6RR3mRSMAAd82RSYGjBJAmBJAnCJFZAAeRW8AAeKCRXHmRRcAAeKORRoGekUd5kUh5kUmGMQSQKgqREwiRZQFhAwNgA8AA/mxgA8AA/mxgA8AA/mxgA5FOA5FnwAB4yJFoeZFpwAB4ywSQLAiRQwFhAwNgA8AA/mxgA8AA/mxgA8AA/mxgA5FOBZFFwAB4+5FGgZ6RR8AAeM6RSMAAd82RSYijBJAuBJAvCpEUCJFlAWEDA2ADwAD+bGADwAD+bGADwAD962ADkU4DkWfAAHk2kWjAAHk5kWnAAHk8BJAxBJAyB2ADwAD96wHAAHlyCJFDAWEDA2ADwAD+bGADwAD+bGADwAD962ADkU4FkUXAAHlvkUaBnpFHwAB5P5FIwAB5dZFJiKMEkDQEkDUEkDYIkVkAB5FbwAB5uZFcwAB5vJFFwAB5v5FGgZ6RR3mRSHmRSYGjBJA5CpEVCJFlAWEDAWADwAD+bGADkU4DkWfAAHnnkWh5kWnAAHnqBJA7BJA8B2ADwAD96wHAAHoRCJFDAWEDAWADwAD+bGADkU4FkUXAAHoOkUaBnpFHwAB57ZFIwAB6FJFJgaMEkD4EkD8IkVkAB5FbwAB6TJFceZFFwAB6T5FGgZ6RR3mRSHmRSYYxBJBCBJBDCJFZAAeRW8AAenSRXHmRRcAAeneRRoGekUd5kUh5kUmBowSQRgSQRwiRWQAHkVvAAHqckVx5kUXAAHqfkUaBnpFHeZFIeZFJgaMEkEoEkEsIkVkAB5FbwAB6xJFceZFFwAB6x5FGgZ6RR3mRSHmRSYYxBJBOBJBPCpEWCJFlAWEDAmADwAD962ADwAD+bGADkU4DkWfAAHrskWjAAHrvkWnAAHryBJBRCJFDAWEDAmADwAD962ADwAD+bGADkU4FkUXAAHsfkUaBnpFHwAB69ZFIeZFJgaMEkFMEkFQEkFUIkVkAB5FbwAB7UZFcwAB7VJFFwAB7V5FGgZ6RR3mRSHmRSYGjBJBYBJBZBJBaB2ADwAD96wHAAHuFCJFZAAeRW8AAe3+RXHmRRcAAe4KRRoGekUd5kUjAAHuIkUmBowSQXQSQXgSQXwSQYAdgA8AA/esBwAB7wgiRWQAHkVvAAHu5kVzAAHu8kUXAAHu/kUaBnpFHeZFIwAB7xZFJgaMEkGMEkGQEkGUEkGYHYAPAAP3rAcAAfAIIkVkAB5FbwAB7+ZFcwAB7/JFFwAB7/5FGgZ6RR3mRSMAAfAWRSYGjBJBpBJBqBJBrCJFZAAeRW8AAfDmRXMAAfDyRRcAAfD+RRoQUkUd5kUh5kUmBowSQbgSQbwSQcAdgA8AA/esBwAB8bQiRWQAHkVvAAHxnkVx5kUXAAHxqkUaBnpFHeZFIwAB8cJFJgaMEkHMEkHQEkHUCNxYIkVkAB5FbwAB8oZFcwAB8pJFFwAB8p5FGwAB8qpFHeZFIeZFJgaMEkHgEkHkKkRcIkWUBYQMCYAOIuGADiLhgA5FOA5FnwAB81JFowAB815FpwAB82gSQewiRQwFhAwJgA4i4YAOIuGADkU4FkUXAAH0DkUaBnpFHwAB83ZFIwABJzpFJgaMEkH0EkH4EkH8CNxUIkVkAB5FbwAB9NJFcwAB9N5FFwAB9OpFGwAB9PZFHeZFIeZFJgaMEkIIKkRgIkWUBYQMBYAPAAP3rYAORTgORZ8AAfWeRaHmRacAAfWoEkIQEkIUHYAPAAP3rAcAAfZEIkUMBYQMBYAPAAP3rYAORTgWRRcAAfY6RRoGekUfAAH1tkUjAAH2UkUmIowSQhwSQiASQiQSQigdgA8AA/esBwAB91QiRWQAHkVvAAH3MkVzAAH3PkUXAAH3SkUaBnpFHeZFIwAB92JFJgaMEkI0EkI4EkI8HYAPAAP3rAcAAfhIIkVkAB5FbwAB+DJFceZFFwAB+D5FGgZ6RR3mRSMAAfhWRSYGjBJCSBJCTBJCUB2ADwAD96wHAAH5MCJFZAAeRW8AAfkaRXHmRRcAAfkmRRoGekUd5kUjAAH5PkUmBowSQlwSQmAiRWQAHkVvAAH6AkVx5kUXAAH6DkUaBnpFHeZFIeZFJiKMEkJsEkJwEkJ0HYAPAAP3rAcAAfq4IkVkAB5FbwAB+qJFceZFFwAB+q5FGgZ6RR3mRSMAAfrGRSYjBBJCgCJFDAWEDAWADwAD+bGADkU4FkUXAAH7ikUaBnpFHhmyRSHmRSYGjBJCiCJFDAWEDAWADwAD+bGADkU4FkUXAAH8MkUaBnpFHhxKRSHmRSYGjBJCkCJFDAWEDAWADwAD+bGADkU4FkUXAAH82kUaBnpFHho+RSHmRSYGjBJCmBJCnCJFZAAeRW8AAf2CRXHmRRcAAf2ORRoGekUd5kUh5kUmIowSQqgSQqwiRWQAHkVvAAH+IkVx5kUXAAH+LkUaBnpFHeZFIeZFJiKMEkK4KkRwIkWUBYQMBYAPAAP3rYAORTgORZ8AAf7CRaHmRacAAf7MEkLAEkLEHYAPAAP3rAcAAf9oIkUMBYQMBYAPAAP3rYAORTgWRRcAAf9eRRoGekUfAAH+2kUjAAH/dkUmIowSQswSQtASQtQdgA8AA/esBwACAGwiRWQAHkVvAAIAVkVx5kUXAAIAYkUaBnpFHeZFIwACAHpFJgaMEkLgEkLkEkLoHYAPAAP3rAcAAgFUIkVkAB5FbwACAT5FceZFFwACAUpFGgZ6RR3mRSMAAgFiRSYGjBJC9CpEdCJFlAWEDBWADwAD8BWADwAD8BWADwAD9G2ADwAD9G2ADwAD9G2ADkU4DkWfAAICJkWh5kWnAAICMBJC/CJFDAWEDBWADwAD8BWADwAD8BWADwAD9G2ADwAD9G2ADwAD9G2ADkU4FkUXAAIDIkUaBnpFHwACAj5FIeZFJgaMEkMEKkR4IkWUBYQMFYAPAAPwFYAPAAPwFYAPAAP0bYAPAAP0bYAPAAP0bYAORTgORZ8AAgQyRaHmRacAAgQ8EkMMIkUMBYQMFYAPAAPwFYAPAAPwFYAPAAP0bYAPAAP0bYAPAAP0bYAORTgWRRcAAgUuRRoGekUfAAIESkUh5kUmBowSQxQSQxgiRWQAHkVvAAIGPkVx5kUXAAIGSkUaBnpFHeZFIeZFJhjEEkMkKkR8IkWUBYQMCYAOIuGADiLhgA5FOA5FnwACBt5FoeZFpwACBugSQywSQzAdgA8AA/esBwACB4wiRQwFhAwJgA4i4YAOIuGADkU4FkUXAAIHgkUaBnpFHwACBvZFIwACB5pFJgaMEkM4EkM8IkVkAB5FbwACCIJFceZFFwACCI5FGgZ6RR3mRSHmRSYYxBJDSCpEgCJFlAWEDAmADiLhgA4i4YAORTgORZ8AAgkiRaHmRacAAgksEkNQEkNUHYAPAAP3rAcAAgnQIkUMBYQMCYAOIuGADiLhgA5FOBZFFwACCcZFGgZ6RR8AAgk6RSMAAgneRSYGjBJDXCpEhCJFlAWEDAmADiLhgA4i4YAORTgORZ8AAgrGRaHmRacAAgrQEkNkEkNoHYAPAAP3rAcAAgt0IkUMBYQMCYAOIuGADiLhgA5FOBZFFwACC2pFGgZ6RR8AAgreRSMAAguCRSYGjBJDcCpEiCJFlAWEDAWADiLhgA5FOA5FnwACDGpFoeZFpwACDHQSQ3giRQwFhAwFgA4i4YAORTgWRRcAAgz+RRoGekUfAAIMgkUh5kUmBowSQ4AqRIwiRZQFhAwFgA4i4YAORTgORZ8AAg2mRaHmRacAAg2wEkOIIkUMBYQMBYAOIuGADkU4FkUXAAIOOkUaBnpFHwACDb5FIeZFJgaMEkOQEkOUEkOYCNxMIkVkAB5FbwACDuJFcwACDu5FFwACDvpFGwACDwZFHeZFIeZFJgaMEkOkEkOoEkOsHYAPAAP3rAcAAg/EIkVkAB5FbwACD65FceZFFwACD7pFGgZ6RR3mRSMAAg/SRSYGjBJDuBJDvCJFZAAeRW8AAhCWRXHmRRcAAhCiRRoGekUd5kUh5kUmGMQSQ8gSQ8wSQ9AiRWQAHkVvAAIRNkVzAAIRQkUXAAIRTkUaBV5FHeZFIeZFJgaMEkPcEkPgCNxEIkVkAB5FbwACEe5FcwACEUJFFwACEfpFGwACEgZFHeZFIeZFJgaMEkPsEkPwEkP0EkP4HYAPAAP3rAcAAhLQIkVkAB5FbwACEq5FcwACErpFFwACEsZFGgZ6RR3mRSMAAhLeRSYGjBJEBBJECCJFZAAeRW8AAhOuRXHmRRcAAhO6RRoGekUd5kUjAAIS3kUmBowSRBQSRBgSRBwdgA8AA/esBwACFHAiRWQAHkVvAAIUWkVx5kUXAAIUZkUaBnpFHeZFIwACFH5FJgaMEkQoEkQsEkQwCNxIIkVkAB5FbwACFUJFcwACFU5FFwACFVpFGwACFWZFHeZFIeZFJgaMEkQ8KkSQIkWUBYQMBYAPAAP3rYAORTgORZ8AAhYORaHmRacAAhYYEkREEkRIEkRMHYAPAAP3rAsAAha3AAIWwCJFDAWEDAWADwAD962ADkU4FkUXAAIWqkUaBnpFHwACFiZFIwACFs5FJiKMEkRUKkSUIkWUBYQMBYAPAAP3rYAORTgORZ8AAhe+RaHmRacAAhfIEkRcEkRgHYAPAAP3rAcAAhhkIkUMBYQMBYAPAAP3rYAORTgWRRcAAhhaRRoGekUfAAIX1kUjAAIYckUmBowSRGgqRJgiRZQFhAwFgA8AA/etgA5FOA5FnwACGVJFoeZFpwACGVwSRHASRHQdgA8AA/esBwACGfgiRQwFhAwFgA8AA/etgA5FOBZFFwACGe5FGgZ6RR8AAhlqRSMAAhoGRSYijBJEfCpEnCJFlAWEDAWADwAD962ADkU4DkWfAAIa5kWh5kWnAAIa8BJEhBJEiB2ADwAD96wHAAIbjCJFDAWEDAWADwAD962ADkU4FkUXAAIbgkUaBnpFHwACGv5FIwACG5pFJiKMEkSQKkSgIkWUBYQMBYAPAAP3rYAORTgORZ8AAhx6RaHmRacAAhyEEkSYEkScHYAPAAP3rAcAAh0gIkUMBYQMBYAPAAP3rYAORTgWRRcAAh0WRRoGekUfAAIckkUjAAIdLkUmIowSRKQqRKQiRZQFhAwFgA8AA/etgA5FOA5FnwACHg5FoeZFpwACHhgSRKwiRQwFhAwFgA8AA/etgA5FOBZFFwACHqpFGgZ6RR8AAh4mRSHmRSYijBJEtBJEuCJFZAAeRW8AAh9aRXHmRRcAAh9mRRoGekUd5kUh5kUmBowSRMQqRKgiRZQFhAwFgA8AA/etgA5FOA5FnwACH/pFoeZFpwACIAQSRMwSRNAdgA8AA/esBwACIKAiRQwFhAwFgA8AA/etgA5FOBZFFwACIJZFGgZ6RR8AAiASRSMAAiCuRSYGjBJE2CpErCJFlAWEDAWADwAD962ADkU4DkWfAAIhjkWh5kWnAAIhmBJE4CJFDAWEDAWADwAD962ADkU4FkUXAAIiKkUaBnpFHwACIaZFIwACIK5FJgaMEkToEkTsEkTwHYAPAAP3rAcAAiL8IkVkAB5FbwACIuZFceZFFwACIvJFGgZ6RR3mRSMAAiMKRSYijBJE/CpEsCJFlAWEDAmADiLhgA4i4YAORTgORZ8AAiPORaHmRacAAiPYEkUEEkUIHYAPAAP3rAcAAiR8IkUMBYQMCYAOIuGADiLhgA5FOBZFFwACJHJFGgZ6RR8AAiPmRSMAAiSKRSYGjBJFEBJFFCJFZAAeRW8AAiVyRXHmRRcAAiV+RRoGekUd5kUh5kUmGMQSRSASRSQSRSgiRWQAHkVvAAImEkVzAAImHkUXAAImKkUaDWpFHeZFIeZFJgaMEkU0EkU4EkU8CNw8IkVkAB5FbwACJspFcwACJtZFFwACJuJFGwACJu5FHeZFIeZFJgaMEkVIEkVMIkVkAB5FbwACJ5ZFceZFFwACJ6JFGgZ6RR3mRSHmRSYGjBJFWCpEtCJFlAWEDAWADwAD962ADkU4DkWfAAIoNkWh5kWnAAIoQBJFYBJFZB2ADwAD96wHAAIo3CJFDAWEDAWADwAD962ADkU4FkUXAAIo0kUaBnpFHwACKE5FIwACKOpFJgaMEkVsEkVwEkV0HYAPAAP3rAcAAingIkVkAB5FbwACKcpFceZFFwACKdZFGgZ6RR3mRSMAAinuRSYGjBJFgBJFhBJFiB2ADwAD96wHAAIqyCJFZAAeRW8AAiqyRXHmRRcAAiq+RRoGekUd5kUjAAIq1kUmBowSRZQqRLgiRZQFhAwFgA8AA/etgA5FOA5FnwACK5pFoeZFpwACK6QSRZwSRaAdgA8AA/esBwACLEAiRQwFhAwFgA8AA/etgA5FOBZFFwACLDZFGgZ6RR8AAiuyRSMAAixORSYGjBJFqCpEvCJFlAWEDAmADwAD8BWADwAD8BWADkU4DkWfAAItLkWh5kWnAAItOBJFsBJFtB2ADwAD96wHAAIt7CJFDAWEDAmADwAD8BWADwAD8BWADkU4FkUXAAIt4kUaBnpFHwACLUZFIwACLfpFJiKMEkW8EkXAKkTAIkWUBYQMCYAPAAPwFYAPAAPwFYAORTgORZ8AAi7yRaMAAi7+RacAAi8IEkXIIkUMBYQMCYAPAAPwFYAPAAPwFYAORTgWRRcAAi++RRoGekUfAAIvFkUi0OJFJiKMEkXQEkXUEkXYCNw4IkVkAB5FbwACMIpFcwACMJZFFwACMKJFGwACMK5FHeZFIeZFJgaMEkXkEkXoEkXsCN1kIkVkAB5FbwACMVZFcwACMWJFFwACMW5FGwACMXpFHeZFIeZFJgaMEkX4KkTEIkWUBYQMBYAPAAPwFYAORTgORZ8AAjIiRaHmRacAAjIsEkYAEkYEHYAPAAP3rAcAAjLIIkUMBYQMBYAPAAPwFYAORTgWRRcAAjK+RRoGekUfAAIyOkUjAAIy1kUmIowSRgwSRhAqRMgiRZQFhAwFgA8AA/etgA5FOA5FnwACM7ZFowACM8JFpwACM8wSRhgiRQwFhAwFgA8AA/etgA5FOBZFFwACNGpFGhAGRR8AAjPaRSHmRSYijBJGIBJGJBJGKAjc5CJFZAAeRW8AAjUaRXMAAjUmRRcAAjUyRRsAAjU+RR3mRSHmRSYGjBJGNCpEzCJFlAWEDAWADwAD962ADkU4DkWfAAI15kWh5kWnAAI18BJGPBJGQB2ADwAD96wHAAI2jCJFDAWEDAWADwAD962ADkU4FkUXAAI2gkUaBnpFHwACNf5FIwACNppFJiKMEkZIKkTQIkWUBYQMCYAPAAP3rYAPAAP5sYAORTgORZ8AAjd6RaHmRacAAjeEEkZQIkUMBYQMCYAPAAP3rYAPAAP5sYAORTgWRRcAAjguRRoGekUfAAI3kkUh5kUmBowSRlgqRNQiRZQFhAwNgA8AA/etgA8AA/mxgA8AA/mxgA5FOA5FnwACOPZFoeZFpwACOQASRmAiRQwFhAwNgA8AA/etgA8AA/mxgA8AA/mxgA5FOBZFFwACOcJFGgZ6RR8AAjkORSHmRSYGjBJGaBJGbCJFZAAeRW8AAjqiRXHmRRcAAjquRRoGekUd5kUio7JFJgaMEkZ4KkTYIkWUBYQMBYAPAAP3rYAORTgORZ8AAjtGRaHmRacAAjtQEkaAIkUMBYQMBYAPAAP3rYAORTgWRRcAAjviRRoGekUfAAI7XkUh5kUmGMQSRogSRowSRpAdgA8AA/esBwACPKgiRWQAHkVvAAI8kkVx5kUXAAI8nkUaBnpFHeZFIwACPLZFJgaMEkacEkagIkVkAB5FbwACPXpFceZFFwACPYZFGgZ6RR3mRSMAAbPmRSYijBJGrBJGsBJGtB2ADwAD96wHAAI+PCJFZAAeRW8AAj4mRXHmRRcAAj4yRRoGekUd5kUjAAI+SkUmBowSRsASRsQSRsgiRWQAHkVvAAI/DkVzAAI/GkUXAAI/JkUaE8JFHeZFIeZFJgaMEkbUEkbYEkbcHYAPAAP3rAcAAj/cIkVkAB5FbwACP8ZFceZFFwACP9JFGgZ6RR3mRSMAAj/qRSYGjBJG6BJG7CpE3CJFlAWEDAmADwAD962ADiLhgA5FOA5FnwACQK5FowACQLpFpwACQMQSRvQiRQwFhAwJgA8AA/etgA4i4YAORTgWRRcAAkFyRRoGekUfAAJA0kUjAAEMTkUmBowSRvwSRwAqROAiRZQFhAwJgA8AA/etgA4i4YAORTgORZ8AAkI+RaMAAkJKRacAAkJUEkcIIkUMBYQMCYAPAAP3rYAOIuGADkU4FkUXAAJDAkUaBnpFHwACQmJFIwABjh5FJgaMEkcQEkcUKkTkIkWUBYQMCYAPAAP3rYAOIuGADkU4DkWfAAJDzkWjAAJD2kWnAAJD5BJHHCJFDAWEDAmADwAD962ADiLhgA5FOBZFFwACRJJFGgZ6RR8AAkPyRSMAAf92RSYGjBJHJBJHKBJHLBJHMB2ADwAD96wHAAJFgCJFZAAeRW8AAkVeRXMAAkVqRRcAAkV2RRoGekUd5kUjAAJFjkUmBowSRzwqROgiRZQFhAwFgA56xYAORTgORZ8AAkZeRaHmRacAAkZoEkdEEkdIHYAPAAP3rAcAAkb8IkUMBYQMBYAOesWADkU4FkUXAAJG8kUaBnpFHwACRnZFIwACRwpFJgaMEkdQKkTsIkWUBYQMCYAPAAP3rYAOesWADkU4DkWfAAJH4kWh5kWnAAJH7BJHWCJFDAWEDAmADwAD962ADnrFgA5FOBZFFwACSI5FGgZ6RR8AAkf6RSLCEkUmBowSR2AqRPAiRZQFhAwJgA8AA/etgA8AA/etgA5FOA5FnwACSVJFoeZFpwACSVwSR2giRQwFhAwJgA8AA/etgA8AA/etgA5FOBZFFwACSgZFGgZ6RR8AAklqRSMAAbpSRSYijBJHcCpE9CJFlAWEDAWADwAD962ADkU4DkWfAAJK2kWh5kWnAAJK5BJHeCJFDAWEDAWADwAD962ADkU4FkUXAAJLdkUaBnpFHwACSvJFIeZFJgaMEkeAKkT4IkWUBYQMBYAOesWADkU4DkWfAAJMJkWh5kWnAAJMMBJHiBJHjB2ADwAD96wHAAJMxCJFDAWEDAWADnrFgA5FOBZFFwACTLpFGgZ6RR8AAkw+RSMAAkzSRSYGjBJHlBJHmBJHnCJFZAAeRW8AAk2qRXMAAk22RRcAAk3CRRoGekUd5kUiu1ZFJgaMEkeoEkesEkewHYAPAAP3rAcAAk58IkVkAB5FbwACTmZFceZFFwACTnJFGgZ6RR3mRSMAAk6KRSYGjBJHvCpE/CJFlAWEDAmADwAD962ADwAD962ADkU4DkWfAAJPTkWh5kWnAAJPWBJHxBJHyB2ADwAD96wHAAJQDCJFDAWEDAmADwAD962ADwAD962ADkU4FkUXAAJQAkUaBnpFHwACT2ZFIwACUBpFJgaMEkfQEkfUIkVkAB5FbwACURJFceZFFwACUR5FGgZ6RR3mRSHmRSYGjBJH4CpFACJFlAWEDAWADwAD+bGADkU4DkWfAAJRskWh5kWnAAJRvBJH6CJFDAWEDAWADwAD+bGADkU4FkUXAAJSTkUaBnpFHwACUcpFIkZCRSYGjBJH8CpFBCJFlAWEDAWADwAD962ADkU4DkWfAAJTAkWh5kWnAAJTDBJH+CJFDAWEDAWADwAD962ADkU4FkUXAAJTnkUaBnpFHwACUxpFIeZFJiLIEkgAEkgECNz0IkVkAB5FbwACVE5FceZFFwACVFpFGwACVGZFHeZFIeZFJgaMEkgQEkgUEkgYCNwwIkVkAB5FbwACVQJFcwACVQ5FFwACVRpFGwACVSZFHeZFIeZFJgaMEkgkEkgoEkgsHYAPAAP3rAcAAlXkIkVkAB5FbwACVc5FceZFFwACVdpFGgZ6RR3mRSMAAlXyRSYGjBJIOBJIPCpFCCJFlAWEDAmADwAD962ADwAD962ADkU4DkWfAAJWtkWjAAJWwkWnAAJWzBJIRCJFDAWEDAmADwAD962ADwAD962ADkU4FkUXAAJXgkUaBnpFHwACVtpFIeZFJgaMEkhMEkhQEkhUCNwsIkVkAB5FbwACWEpFcwACWFZFFwACWGJFGwACWG5FHeZFIeZFJgaMEkhgEkhkIkVkAB5FbwACWRZFceZFFwACWSJFGgZ6RR3mRSIwFkUmBowSSHASSHQSSHgdgA8AA/esBwACWdAiRWQAHkVvAAJZukVx5kUXAAJZxkUaBnpFHeZFIwACWd5FJgaMElPUEglMElPYElPcElPIElPgEge8ElPkElPMElPoHWwzAAJaowACWq8AAlq6BesAAlrHAAJa0wACWt8AAlrrAAJa9wACWwMAAlsODbQjAAPezAmADwAD962ADwAD96wHAAPe2wACWxgdbDMAAlqiGMcAAlq6Bo8AAlrGIo8AAlreIssAAlr2GtcAAlsOIwQjAAPezAmADwAD962ADkaYBwAD3tsAAlxAElP0ElP4ElP8ElQAHWwiBo8AAl1CGtcAAl1OIwcAAl1aGMcAAl1kIwAD3swJgA5GmYAPAAP3rAcAA97bAAJdcBJUCB1sIgaOBeoa1wACXkIjBg22GMcAAlqsIwAD3swJgA5GmYAPAAP3rAcAA97bAAJeTAjfAAP/9BJWMCJJBAAKSQwmSRcAAl8kElY0IkkEAApJDFZJFwACX2gSVjgiSQQACkkMhkkXAAJfrBJWPCJJBAAKSQ1OSRcAAl/wElZAIkkEAApJDgVeSRcAAmA0ElZEIkkEAApJDgj+SRcAAmB8ElZIIkkEAApJDhBSSRcAAmDEElZMIkkEAApJDhPCSRcAAmEMElZQIkkEAApJDg0eSRcAAmFUElZUIkkEAApJDg/uSRcAAmGcElZYIkkEAApJDg/6SRcAAmHkElZcIkkEAApJDwACWG5JFwACYiwSVmAiSQQACkkPAAJVJkkXAAJifBJWZCJJBAAKSQ4QBkkXAAJizBJWaCJJBAAKSQ8AAjCuSRcAAmMUElZsIkkEAApJDwACJu5JFwACY2QSVnAiSQQACkkODWpJFwACY7QSVnQiSQQACkkPAAISBkkXAAJj/BJWeCJJBAAKSQ8AAhVmSRcAAmRMElZ8IkkEAApJDwACDwZJFwACZJwSVoAiSQQACkkPAAHCdkkXAAJk7B2ADkkEVwACXzMAAl93AAJfuwACX/8AAmBDAAJgiwACYNMAAmEbAAJhYwACYasAAmHzAAJiOwACYosAAmLbAAJjIwACY3MAAmPDAAJkCwACZFsAAmSrAAJk+BJW5CJJhAAKSYwmSZcAAmakElboIkmEAApJjFZJlwACZugSVuwiSYQACkmMhkmXAAJnLBJW8CJJhAAKSY1OSZcAAmdwHYAOSYQTAAJmswACZvcAAmc7AAJnfAjdaAjdbAjddAjdeAjdfAjdgAjdhAjdiAjdjAjdkAjdlAjdmAjdnAjdoAjdpAjdqAjdrAjdsAjdtAjduAjdvAjdwAjdxAjdyAjdzAjd0Ajd1Ajd2Ajd3Ajd4Ajd5Ajd6Ajd7Ajd8Ajd9Ajd+AjeAoAI3wADYAAI3wADf/wI3wBD//wiS5wFgA8AA/Q4ACMAA+tsAAcAA+u4JBJa4BJa/BJbBBJbDBJbFBJbHBJbJBJbLBJbNBJbPCJQ1AAAIlFMAAAiUmAAACpR/AjfAAQAAAjmXjAdgA8AA/AUACMAA97MCYAOCwGADwAD8BQHAAPe2gmYCN4CIBJfKBJfLAjeAkAI3wAGGoAI3wAGGmwI3pxAIwADJkgABwADJlQACN4D4AjewOQiIwwABiMXAAJsjAjfAAeDxCIjbAAGI3cAAmzIEgNkEmesESASZ7ASAlwSBbQRjBIFrBIEGBIO7BIN3BIO8BIO6BGQEgY0Eg4gElbQEUASGhwdbKsAAmvmCP8AAmvyBV8AAm0ZTwACbSYQUwACbS4QUwACbToTwwACbUYTwwACbVITwwACbVoTwwACbWYNHwACbXIP7wACbX4P+wACbYsAAlhvAAJtlwACWG8AAm2jAAJVJwACbasAAlUnAAJtthAHAAJtwhAHAAJtzhAHAAJt1hAF5FQjAAPezAmADwAD962ADwAD8BQHAAPe2wACbeAdgA5p/AAia0gAACMAA97MCYAOJT2ADiLgBwAD3toJmCpu8B2ADg14ACMAA97MCYAPAAP3rYAPAAP5sAcAA97aCZgScpAScqwqdQAqdQQWdS5cMB2ADwAD+aQAIwAD3swJgA8AA/l1bAcAA97aCZgWdS5z5BZ1LnPsEnHgEnQEInvkACZ9NwACab59OAJ9PAJ9QAJ9RAJ9SwACckJ9TwACck59UCZ9VeQSdCASdEQie+QAJn02WyJ9OAJ9Pd59QAJ9Rd59SwACbVJ9TwACcwp9Ug0efVcAAm1QEmbYEnRIInvkACZ9NwACaY59OAJ9PAJ9QAJ9RAJ9SwACc8J9TwACc859UCZ9VwACc8ASD1wSdEwie+QAJn03AAF3Dn04An08An1AAn1EAn1LAAJ0in1PAAJ0ln1TAAISBn1XAAJ0iBJmWBJ0UCJ75AAmfTcAAmgafTgCfTwCfUACfUQCfUsAAnVefU8AAnVqfVMAAhIGfVcAAnVcCN4CqBJ0VBJ0WCJ75AAmfTcAAnYyfTgCfTwCfUACfUQCfUsAAnZCfU8AAnZOfVMAAhIGfVcAAnZAEmfMEnRcInvkACZ9NhKCfTgCfTwCfUACfUQCfUsAAncWfU8AAncifVAmfVcAAncUEhCQEnRoInfQAC547d548AJ9NwACaM59Od59PAJ9QAJ9RAJ9SwACd9Z9TwACd+J9UCZ9VwACd9QSZiwSdGwid9AALnjt3njwAn03AAJozn04An08An1AAn1EAn1LAAJ4tn1PAAJ4wn1SDR59VwACeLQSaAwSdHAid9AALnjsAnjwAn03AAJozn04An08An1AAn1EAn1LAAJ5mn1PAAJ5pn1QJn1XAAJ5mBJmxBJ0dCJ30AAueOwCePHefTcAAmjOfTgCfTwCfUACfUQCfUsAAnp6fU8AAnqGfVAmfVcAAnp4EmfwEnR4InfQAC547AJ48d59NwACaM59OAJ9PAJ9QAJ9RAJ9SwACe1p9TwACe2Z9UCZ9VwACe1gSaBQSdHwid9AALnjsAnjwAn03AAJozn04An08An1AAn1EAn1LAAJ8On1PAAJ8Rn1QJn1XAAJ8OBJoMBJ0gCJ30AAueOwCePACfTcAAmjOfTgCfTwCfUACfUQCfUsAAn0afU8AAn0mfVAmfVcAAn0YEmhQEnSEInfQAC547AJ48AJ9NwACaM59OAJ9PAJ9QAJ9RAJ9SwACffp9TwACfgZ9UCZ9VwACffgSZ3QSdIgid9AALnjsAnjwAn03AAJozn04An08An1B3n1EAn1LAAJ+2n1PAAJ+5n1QJn1XAAJ+2BIQnBJ0jCJ30AAueOwCePACfTcAAmjOfTnefTwCfUACfUQCfUsAAn+6fU8AAn/GfVAmfVcAAn+4Emg4EnSQInfQAC547AJ48AJ9NwACaM59OAJ9PAJ9QAJ9RAJ9SwACgJp9TwACgKZ9UCZ9VwACgJgSEKgSdJQid9AALnjt3njwAn03AAJozn053n08An1AAn1EAn1LAAKBen1PAAKBhn1QJn1XAAKBeBJoNBJ0mCJ30AAueOwCePACfTcAAmjOfTgCfTwCfUACfUQCfUsAAoJafU8AAoJmfVAmfVcAAoJYEmgIEnScInfQAC547d548AJ9NwACaM59OAJ9PAJ9QAJ9RAJ9SwACgzp9TwACg0Z9UCZ9VwACgzgSaBwSdKAid9AALnjsAnjwAn03AAJozn04An08An1AAn1EAn1LAAKEGn1PAAKEJn1QJn1XAAKEGBJoeBJ0pCJ30AAueO3eePACfTcAAmjOfTgCfTwCfUACfUQCfUsAAoT6fU8AAoUGfVAmfVcAAoT4EmhAEnSoInfQAC547AJ48AJ9NwACaM59OAJ9PAJ9QAJ9RAJ9SwAChdp9TwACheZ9UCZ9VwAChdgSdLASdKwid9AALnjsAnjwAn03AAJozn04An08An1B3n1EAn1LAAKGun1PAAKGxn1QJn1XAAKGuBISpBJ0tCJ30AAueO3eePACfTcAAmjOfTgCfTwCfUHefUQCfUsAAoeafU8AAoemfVAmfVcAAoeYEmd8EnS4InfQAC547AJ48AJ9NwACaM59OAJ9PAJ9QAJ9RAJ9SwACiHp9TwACiIZ9UCZ9VwACiHgSCjwSdLwid9AALnjt3njwAn03AAJozn04An08An1B3n1EAn1LAAKJWn1PAAKJZn1QJn1XAAKJWBIQpBJ0wCJ30AAueO3eePACfTcAAmjOfTnefTwCfUACfUQCfUsAAoo6fU8AAopGfVAmfVcAAoo4EhCgEnTEInfQAC547d548AJ9NwACaM59OAJ9PAJ9QAJ9RAJ9SwACixp9TwACiyZ9UCZ9VwACixgSdMwSdMgid9AALnjsAnjwAn03AAJozn04An08An1AAn1EAn1LAAKL+n1PAAKMBn1QJn1XAAKL+BIQlBJ00CJ30AAueOwCePACfTcAAmjOfTnefTwCfUACfUQCfUsAAozafU8AAozmfVAmfVcAAozYEmhYEnTUInfQAC547AJ48AJ9NwACaM59OAJ9PAJ9QAJ9RAJ9SwACjbp9TwACjcZ9UCZ9VwACjbgSaCASdNgid9AALnjsAnjwAn03AAJozn04An08An1AAn1EAn1LAAKOmn1PAAKOpn1QJn1XAAKOmBJvUBJ03CJ30AAueOwCePHefTcAAmjOfTgCfTwCfUACfUQCfUsAAo96fU8AAo+GfVAmfVcAAo94EmkkEnTgInfQAC547d548AJ9NwACaM59OAJ9PAJ9QAJ9RAJ9SwACkFp9TwACkGZ9UCZ9VwACkFgSEuQSdOQid9AALnjsAnjx3n03AAJozn04An08An1AAn1EAn1LAAKROn1PAAKRRn1QJn1XAAKROBJoPBJ06CJ30AAueOwCePACfTcAAmjOfTgCfTwCfUACfUQCfUsAApIafU8AApImfVAmfVcAApIYEmeAEnTsInfQAC547d548AJ9NwACaM59OAJ9PAJ9QAJ9RAJ9SwACkvp9TwACkwZ9UCZ9VwACkvgSEqASdPAid9AALnjt3njwAn03AAJozn04An08An1B3n1EAn1LAAKT2n1PAAKT5n1QJn1XAAKT2BJn+BJ09CJ30AAueOwCePACfTcAAmjOfTgCfTwCfUACfUQCfUsAApS6fU8AApTGfVAmfVcAApS4EnT8EnT4InfQAC547d548AJ9NwACaM59OAJ9PAJ9QAJ9RAJ9SwAClZp9TwAClaZ9UCZ9VwAClZgSZ9wSdQAid9AALnjsAnjwAn03AAJozn04An08An1AAn1EAn1LAAKWen1PAAKWhn1SDR59VwAClngSdQgSdQQid9AALnjsAnjwAn03AAJozn053n08An1AAn1EAn1LAAKXXn1PAAKXan1QJn1XAAKXXBIRDBJ1DCJ30AAueO3eePACfTcAAmjOfTgCfTwCfUHefUQCfUsAApg+fU8AAphKfVAmfVcAApg8EhO4EnUQInfQAC547d548AJ9NwACaM59OAJ9PAJ9Qd59RAJ9SwACmR59TwACmSp9UCZ9VwACmRwSdRgSdRQid9AALnjsAnjx3n03AAJozn04An08An1AAn1EAn1LAAKZ/n1PAAKaCn1QJn1XAAKZ/BJnoBJ1HCJ30AAueOwCePACfTcAAmjOfTgCfTwCfUACfUQCfUsAAprefU8AAprqfVAmfVcAAprcEhDwEnUgInfQAC547AJ48AJ9NwACaM59OAJ9PAJ9QAJ9RAJ9SwACm759TwACm8p9UCZ9VwACm7wSaOQSdSQid9AALnjsAnjx3n03AAJozn04An08An1AAn1EAn1LAAKcnn1PAAKcqn1QJn1XAAKcnBJoTBJ1KCJ30AAueOwCePHefTcAAmjOfTgCfTwCfUACfUQCfUsAAp1+fU8AAp2KfVAmfVcAAp18EhbYEnUsInfQAC547d548AJ9NwACaM59OAJ9PAJ9QAJ9RAJ9SwACnl59TwACnmp9UCZ9VwACnlwSZ8gSdTAid9AALnjt3njwAn03AAJozn04An08An1B3n1EAn1LAAKfPn1PAAKfSn1QJn1XAAKfPBJ1OBJ1NCJ30AAueOwCePHefTcAAmjOfTgCfTwCfUACfUQCfUsAAqAefU8AAqAqfVAmfVcAAqAcEnVAEnU8InfQAC547d548AJ9NwACaM59Od59PAJ9QAJ9RAJ9SwACoP59TwACoQp9UCZ9VwACoPwSZ+gSdUQid9AALnjsAnjwAn03AAJozn04An08An1AAn1EAn1LAAKh3n1PAAKh6n1QJn1XAAKh3BJoRBJ1SCJ30AAueOwCePACfTcAAmjOfTgCfTwCfUACfUQCfUsAAqK+fU8AAqLKfVAmfVcAAqK8ElyQEnVMInfQAC547d548AJ9NwACaM59OAJ9PAJ9QAJ9RAJ9SwACo559TwACo6p9UCZ9VwACo5wSEuASdVAid9AALnjsAnjx3n03AAJozn04An08An1AAn1EAn1LAAKkfn1PAAKkin1QJn1XAAKkfBINEBJ1VCJ30AAueOwCePHefTcAAmjOfTgCfTwCfUACfUQCfUsAAqVefU8AAqVqfVAmfVcAAqVcEhCMEnVYInfQAC547d548AJ9NwACaM59Od59PAJ9QAJ9RAJ9SwACpj59TwACpkp9UCZ9VwACpjwSZ5wSdVwid9AALnjsAnjwAn03AAJozn04An08An1AAn1EAn1LAAKnHn1PAAKnKn1QJn1XAAKnHBJoKBJ1YCJ30AAueOwCePACfTcAAmjOfTgCfTwCfUACfUQCfUsAAqf+fU8AAqgKfVAmfVcAAqf8Ema8EnVkInfQAC547AJ48d59NwACaM59OAJ9PAJ9QAJ9RAJ9SwACqN59TwACqOp9UCZ9VwACqNwSZ+QSdWgid9AALnjsAnjwAn03AAJozn04An08An1AAn1EAn1LAAKpvn1PAAKpyn1QJn1XAAKpvBJn7BJ1bCJ30AAueOwCePACfTcAAmjOfTgCfTwCfUACfUQCfUsAAqqefU8AAqqqfVAmfVcAAqqcElrkEnVwInfQAC547AJ48AJ9NwACaM59OAJ9PAJ9QAJ9RAJ9SwACq359TwACq4p9UCZ9VwACq3wSaEgSdXQid9AALnjsAnjwAn03AAJozn04An08An1AAn1EAn1LAAKsXn1PAAKsan1QJn1XAAKsXBIaBBJ1eCJ30AAueO3eePACfTcAAmjOfTgCfTwCfUHefUQCfUsAAq0+fU8AAq1KfVAmfVcAAq08EhCYEnV8InfQAC547AJ48AJ9NwACaM59Od59PAJ9QAJ9RAJ9SwACrh59TwACrip9UCZ9VwACrhwSaHwSdYAid9AALnjsAnjwAn03AAJozn04An08An1AAn1EAn1LAAKu/n1PAAKvCn1QJn1XAAKu/BJoGBJ1hCJ30AAueOwCePACfTcAAmjOfTgCfTwCfUACfUQCfUsAAq/efU8AAq/qfVAmfVcAAq/cEmd4EnWIInfQAC547AJ48AJ9NwACaM59OAJ9PAJ9QAJ9RAJ9SwACsL59TwACsMp9UCZ9VwACsLwSaGQSdYwid9AALnjsAnjx3n03AAJozn04An08An1AAn1EAn1LAAKxnn1PAAKxqn1QJn1XAAKxnB2ADnfRDwACd+8AAnjPAAJ5swACepMAAntzAAJ8UwACfTMAAn4TAAJ+8wACf9MAAoCzAAKBkwACgnMAAoNTAAKEMwAChRMAAoXzAAKG0wACh7MAAoiTAAKJcwACilMAAoszAAKMEwACjPMAAo3TAAKOswACj5MAApBzAAKRUwACkjMAApMTAAKT8wAClNMAApWzAAKWkwACl3cAAphXAAKZNwACmhcAApr3AAKb1wACnLcAAp2XAAKedwACn1cAAqA3AAKhFwACofcAAqLXAAKjtwACpJcAAqV3AAKmVwACpzcAAqgXAAKo9wACqdcAAqq3AAKrlwACrHcAAq1XAAKuNwACrxcAAq/3AAKw1wACsbQSdeAie+QAJn00Jn04An08An1AAn1EAn1KEEp9TwACtsZ9UCZ9VhBIEnYMInuAAAp7zwACt2Z70CQSdhAie4AACnvPAAK3qnvSEAQSdhQie4AACnvPAAK38nvQVBJ2GCJ7gAAKe88AArg2e9MAAlhsEnYcInuAAAp7zwACuIZ70g/sEnYgInuAAAp7zwACuM570g/4EnYkInuAAAp7zwACuRZ70IQSdigie4AACnvPAAK5WnvRTBJ2LCJ7gAAKe88AArmee9ITwBJ2MCJ7gAAKe88AArnme9IFXBJ2NCJ7gAAKe88AAroue9IQUBJ2OCJ7gAAKe88AArp2e9II/BJ2PCJ7gAAKe88AArq+e9MAAjCsEnZAInuAAAp7zwACuw570g0cEnZEInuAAAp7zwACu1Z70wACVSQSdkgie4AACnvPAAK7pnvSDWgSdkwie4AACnvPAAK77nvTAAIm7BJvNBJ2UCJ75AAmfTcAAmh6fTgCfTwCfUACfUQCfUsAArw+fU8AArxKfVAmfVXkEnZYEnZUInvkACZ9NwACaWp9OAJ9PAJ9QAJ9RAJ9SwACvPp9TwACvQZ9UCZ9VeQSdmASdlwie+QAJn03AAJoVn04An08An1AAn1EAn1LAAK9tn1PAAK9wn1QJn1V5BJvLBJ2ZCJ75AAmfTcAAmi2fTgCfTwCfUACfUQCfUsAAr5yfU8AAr5+fVAmfVXkEnZoInvkACZ9NwACab59OAJ9PAJ9QAJ9RAJ9SwACckJ9TwACvy59UCZ9VeQSBqgSdmwie+QAJn03AAJoYn04An08An1AAn1EAn1LAAK/3n1PAAK/6n1QJn1XAAK/3BIPsBJ2cCJ75AAmfTcAAXoCfTgCfTwCfUACfUQCfUsAAsCmfU8AAsCyfVAmfVXkEnZ0InvkACZ9NwABfq59OAJ9Pd59QAJ9Rd59SwACbX59TwACwWJ9UwACWG59VwACbXwSdngie+QAJn03AAJr/n04An093n1AAn1EAn1LAAJr5n1PAALCKn1SEFJ9VwACa+QI3gJEEnaAEnZ8InvkACZ9NwACwup9OAJ9Pd59QAJ9RAJ9SwACwvp9TwACwwZ9UFZ9VwACwvgI3gJIEnaIEnaEInvkACZ9NwACw8J9OAJ9Pd59QAJ9RAJ9SwACw9J9TwACw959UFZ9VwACw9ASDfwSdowie+QAJn02EeZ9OAJ9PAJ9QAJ9RAJ9SwACxJp9TwACxKZ9UCZ9VwACxJgSZ6QSdpAie+QAJn03AAGROn04An093n1AAn1EAn1LAALFWn1PAALFZn1TAAIm7n1XAALFWAjeAjwSdpQie+QAJn03AALGLn04An093n1AAn1EAn1LAAJtLn1PAALGPn1SE8J9VwACbSwI3gI4EnacEnaYInvkACZ9NwACxv59OAJ9PAJ9QAJ9RAJ9SwACxw59TwACxxp9UhPCfVcAAscMEnagInvkACZ9NwACaZp9OAJ9Pd59QAJ9Rd59SwACbWZ9TwACx9p9Ug/ufVcAAm1kCN4CTBJ2pCJ75AAmfTcAAsiafTgCfT3efUACfUQCfUsAAmvyfU8AAsiqfVII/n1XAAJr8AjeAlASdqwSdqgie+QAJn03AALJan04An093n1AAn1EAn1LAALJen1PAALJhn1QVn1XAALJeAjeAlQSdrQSdrAie+QAJn03AALKQn04An093n1AAn1EAn1LAALKUn1PAALKXn1QVn1XAALKUBILmBJ2uCJ75AAmfTZadn04An08An1AAn1EAn1LAALLGn1PAALLJn1QJn1XAALLGBJ2vCJ75AAmfTcAARiufTgCfTwCfUACfUQCfUoFrn1PAALL2n1QJn1WBawSdsAie+QAJn03AAJoMn04An093n1AAn1F3n1LAAJtcn1PAALMhn1SD/p9VwACbXAI3gJ8EnbIEnbEInvkACZ9NwACzUZ9OAJ9Pd59QAJ9RAJ9SwACzVZ9TwACzWJ9UFZ9VwACzVQSGxgSdswie+QAJn03AAJppn04An08An1AAn1EAn1LAALOHn1PAALOKn1QJn1XAALOHBIMhBJ20CJ75AAmfTbQHn04An08An1AAn1EAn1LAALO5n1PAALO8n1QJn1XAALO5BJmXBJ21CJ75AAmfTcAAmgmfTgCfTwCfUACfUQCfUsAAs+mfU8AAs+yfVAmfVcAAs+kEgLwEnbYInvkACZ9NwACVGZ9OAJ9Pd59QAJ9RAJ9SwAC0G59TwAC0Hp9UFZ9VwAC0GwI3gIcEnbcInvkACZ9NwAC0TZ9OAJ9Pd59QAJ9Rd59SwACbSZ9TwAC0UZ9UhPCfVcAAm0kCN4CGBJ25BJ24CJ75AAmfTcAAtIGfTgCfTwCfUACfUQCfUsAAtIWfU8AAtIifVITwn1XAALSFAjeAggSZtwie+QAJn03AALS4n04An08An1AAn1EAn1LAALS8n1PAAKPhn1QJn1XAALS8BJ26CJ75AAmfTZ9sn04An093n1AAn1F3n1LAAJtOn1PAALTrn1SDR59VwACbTgI3gIoEnbsInvkACZ9NwAC1GZ9OAJ9Pd59QAJ9Rd59SwACbUZ9TwAC1HZ9Ug0efVcAAm1ECN4CeBJ28CJ75AAmfTcAAtU2fTgCfT3efUACfUXefUsAAm2KfU8AAtVGfVMAAlUmfVcAAm2ICN4CLBJ2+BJ29CJ75AAmfTcAAtYOfTgCfT3efUACfUQCfUsAAtYefU8AAtYqfVBWfVcAAtYcCN4CnBJW1BJ2/CJ75AAmfTcAAtbmfTgCfT3efUACfUXefUsAAtb2fU8AAtcCfVMAAlUmfVcAAtb0CN4CpBJ3BBJ3ACJ75AAmfTcAAtfKfTgCfT3efUACfUQCfUsAAtfafU8AAtfmfVBWfVcAAtfYEhrUEncIInvkACZ9NwABj8J9OAJ9PAJ9QAJ9RAJ9SwAC2KJ9TwAC2K59UCZ9VwAC2KAI3gI0ESwSdwwie+QAJn03AALZan04An093n1AAn1F3n1LAALZen1PAALZgn1TAAISBn1XAALZeAjeAjASAvwSdxAie+QAJn03AALaSn04An093n1AAn1F3n1LAALaWn1PAALaZn1QJn1XAALaWAjeAgQSdxQie+QAJn03AALbIn04An093n1AAn1F3n1LAAJtWn1PAALbMn1SDR59VwACbVgI3gIkEncYInvkACZ9NwAC2/J9OAJ9Pd59QAJ9Rd59SwACbZZ9TwAC3AJ9UwACVSZ9VwACbZQSdyASdxwie+QAJn03AAJr1n04An093n1AAn1EAn1LAALcyn1PAALc1n1QVn1XAALcyBJ3JCJ75AAmfTcAAQ5GfTgCfT3efUACfUXefUsAAm2qfU8AAt2SfVIQBn1XAAJtqAjeAmgSdywSdygie+QAJn03AALeUn04An093n1AAn1EAn1LAALeYn1PAALebn1QVn1XAALeYAjeAmQSdzQSdzAie+QAJn03AALfKn04An093n1AAn1EAn1LAALfOn1PAALfRn1SDWp9VwAC3zgSdzgie+QAJn03AAGEJn04An093n1AAn1F3n1LAAJtwn1PAALgBn1TAAIwrn1XAAJtwAjeAnQSd0ASdzwie+QAJn03AALgzn04An093n1AAn1EAn1LAALg3n1PAALg6n1QVn1XAALg3BIFqBJ3RCJ75AAmfTbKln04An08An1AAn1EAn1LAALhpn1PAALhsn1TAAISBn1XAALhpAjeAhQSIQASd0gie+QAJn03AALicn04An093n1AAn1EAn1LAALign1PAALijn1Qhn1XAALigBJ3TCJ75AAmfTcAARl6fTgCfT3efUACfUXefUsAAm2ifU8AAuNKfVIQBn1XAAJtoAjeAmASd1QSd1Aie+QAJn03AALkCn04An093n1AAn1EAn1LAALkGn1PAALkJn1QVn1XAALkGAjeAlwSd1wSd1gie+QAJn03AALk4n04An093n1AAn1EAn1LAALk8n1PAALk/n1SDWp9VwAC5PASd2Aie+QAJn02gYJ9OAJ9Pd59QAJ9RAJ9SgJufU8AAuW+fVFOfVYCbAjeAogSd2gSd2Qie+QAJn03AALmYn04An093n1AAn1EAn1LAALmcn1PAALmfn1TAAISBn1XAALmcAjeAowSd2wie+QAJn03AALnRn04An093n1AAn1EAn1LAAJtGn1PAALnVn1SBV59VwACbRgI3gKQEnd0EndwInvkACZ9NwAC6BZ9OAJ9Pd59QAJ9RAJ9SwAC6CZ9TwAC6DJ9UFZ9VwAC6CQSWpASd3gie+QAJn02UDp9OAJ9PAJ9QAJ9RAJ9SwAC6O59TwAC6Pp9UCZ9VwAC6OwSd3wie+QAJn03AAF8Rn04An093n1AAn1F3n1LAAJtzn1PAALprn1TAAIwrn1XAAJtzAjeAgwSd4QSd4Aie+QAJn03AALqdn04An093n1AAn1EAn1LAALqhn1PAALqkn1QVn1XAALqhBJ3iCJ75AAmfTcAARpGfTgCfT3efUACfUXefUsAAm22fU8AAutOfVMAAjCufVcAAm20CN4CWBJ3kBJ3jCJ75AAmfTcAAuwWfTgCfT3efUACfUQCfUsAAuwmfU8AAuwyfVBWfVcAAuwkCN4ChBJ3mBJ3lCJ75AAmfTcAAuzufTgCfTwCfUACfUQCfUsAAuz+fU8AAu0KfVAmfVcAAuz8EhIwEnecInvkACZ9NwACabJ9OAJ9Pd59QAJ9Rd59SwAC7cZ9TwAC7dJ9UwACJu59VwAC7cQI3gJwEnegInvkACZ9NwAC7pp9OAJ9Pd59QAJ9Rd59SwACbdZ9TwAC7qp9UwACMK59VwACbdQI3gJsEneoEnekInvkACZ9NwAC73J9OAJ9Pd59QAJ9RAJ9SwAC74J9TwAC7459UFZ9VwAC74ASd7ASd6wie+QAJn03AAJoSn04An08An1AAn1EAn1LAALwSn1PAALwVn1QJn1XAALwSBJ3tCJ75AAmfTYQPn04An08An1AAn1EAn1KDrJ9TwAC8RJ9UCZ9Vg6wCN4CEBJy6BJ3uCJ75AAmfTcAAvG2fTgCfTwCfUACfUQCfUsAAvHGfU8AAvHSfVAmfVcAAvHECN4CoBJ3wBJ3vCJ75AAmfTcAAvKOfTgCfTwCfUACfUQCfUsAAvKefU8AAvKqfVAmfVcAAvKcEnfIEnfEInvkACZ9Nva6fTgCfTwCfUACfUQCfUsAAvNmfU8AAvNyfVAmfVXkEnfQEnfMInvkACZ9NwACaSJ9OAJ9PAJ9QAJ9RAJ9SwAC9Bp9TwAC9CZ9UCZ9VeQdgA575RsAArbTAAK8VwACvRMAAr3PAAK+iwACvzsAAr/3AAJyWwACwL8AAsFvAALCNwACw+sAAsSzAALFcwACxksAAsfnAALItwACymsAAsszAALL5wACzJMAAs1vAALONwACzv8AAs+/AALQhwAC0VMAAtL/AALTuwAC1IMAAtVTAALWNwAC2LsAAtmPAALacwACcxcAAts/AALcDwAC3OMAAt2fAALeewAC31MAAnPbAAJ0owACdXcAAuATAALg9wAC4b8AAuKbAALjVwAC5DMAAuULAALlywAC5osAAudjAALoPwAC6QcAAum7AALqnwAC61sAAuw/AAJ3LwAC7RcAAu3fAALutwAC75sAAvBjAALxHwAC8d8AAvK0EnfYEm8oEm8wEm84Em8kHYAPAAP3rBsAAvlbAAK+cwAC+WcAArw/AAL5cwAC+XwSeMwSB2QSHbwQSBJvXBJvYBJ6/BJvHBJxF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gaTuwADFlwSlfQik6gACpOwJpO7AAMWrBKV+CKTqAAKk7BWk7sAAxbwEpX8IpOoAAqTsU6TuwADFzQSlgAik6gACpOyBV6TuwADF3gSlgQik6gACpOyCP6TuwADF8ASlggik6gACpOyEFKTuwADGAgSlgwik6gACpOyE8KTuwADGFASlhAik6gACpOyDR6TuwADGJgSlhQik6gACpOyD+6TuwADGOASlhgik6gACpOyD/qTuwADGSgSlhwik6gACpOzAAJYbpO7AAMZcBKWICKTqAAKk7MAAlUmk7sAAxnAEpYkIpOoAAqTshAGk7sAAxoQEpYoIpOoAAqTswACMK6TuwADGlgSliwik6gACpOzAAIPBpO7AAMaqBKWMCKTqAAKk7MAAcJ2k7sAAxr4EpY0IpOoAAqTswAB9PaTuwADG0gSljgik6gACpOzAAHyqpO7AAMbmBKWPCKTqAAKk7MAAasyk7sAAxvoEpZAIpOoAAqTswABqDKTuwADHDgSlkQik6gACpOzAAHhFpO7AAMciBKWSCKTqAAKk7MAAadmk7sAAxzYEpZMIpOoAAqTswABppqTuwADHSgSllAik6gACpOzAAGkzpO7AAMdeBKWVCKTqAAKk7LSvpO7AAMdyBKWWCKTqAAKk7MAAZzKk7sAAx4QEpZcIpOoAAqTswABmmqTuwADHmASlmAik6gACpOyDNKTuwADHrASlmQik6gACpOzAAGROpO7AAMe+BKWaCKTqAAKk7IP4pO7AAMfSBKWbCKTqAAKk7MAAY/Ck7sAAx+QEpZwIpOoAAqTssLqk7sAAx/gEpZ0IpOoAAqTswABhCaTuwADICgSlngik6gACpOzAAF+rpO7AAMgeBKWfCKTqAAKk7MAAXoCk7sAAyDIEpaAIpOoAAqTswABdw6TuwADIRgSloQik6gACpOy0B6TuwADIWgSlogik6gACpOzAAEaRpO7AAMhsBKWjCKTqAAKk7MAARl6k7sAAyIAEpaQIpOoAAqTssqWk7sAAyJQEpaUIpOoAAqTswABfEaTuwADIpgSlpgik6gACpOy2FKTuwADIugSlpwik6gACpOy40aTuwADIzASlqAik6gACpOy4qaTuwADI3gSlqQik6gACpOyJQqTuwADI8ASlqgik6gACpOyN/KTuwADJAgSlqwik6gACpOyTKKTuwADJFASl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2oOlVHmlVYMjBKbGBKbHCKVPAAWlUcAAydGlUsAA2sWlU8AA2silVHmlVYMjBKbICKVPAAWlUcAAya2lUsAA2umlU3mlVHmlVYMjBKbJCKVPAAWlUcAAy3OlUsAA2welU3mlVHmlVYMjBKbKCKVPAAWlUcAAy2GlUsAA2yWlU3mlVHmlVYMjBKbLCKVPAAWlUcAAy4WlUsAA20OlU3mlVHmlVYMjBKbMCKVPAAWlUcAAy5mlUsAA22GlU3mlVHmlVYMjB1uAkMAAxS/AANHswADFv8AA0grAAMnjwADSKMAAxinAANJGwADK88AA0mTAAMp1wADSgsAAyM/AANKtwADJF8AA0uXAAMlhwADTFsAAySnAANM6wADJO8AA01vAAMjhwADTf8AAyPPAANOtwADJTcAA097AAMatwADUBcAAyQXAANQmwADJh8AA1EfAAMiXwADUaMAAyKnAANShwADJdcAA1MjAAMsZwADU6cAAyyvAANUEwADLPcAA1SLAAMtPwADVQMAAxa7AANVrwADEosAA1aPAAMS2wADV1MAAxk3AANYFwADGX8AA1jbAAMVRwADWWsAAxWLAANZ4wADFdMAA1pbAAMWawADWtMAAxYjAANbSwADKCcAA1vDAAMd1wADXDsAAx8HAANcswADHTcAA10rAAMf7wADXaMAAyCHAANeGwADINcAA16TAAMebwADXwsAAyA3AANfgwADG/cAA1/7AAMcRwADYHMAAxznAANg6wADHJcAA2FjAAMfnwADYdsAAx9XAANiUwADHYcAA2LLAAMevwADY0MAAyEnAANjuwADG6cAA2QzAAMhdwADZKsAAyL3AANlIwADIb8AA2WbAAMiDwADZhMAAx4fAANmiwADGwcAA2cDAAMbVwADZ3sAAxPfAANn8wADGO8AA2h3AAMXhwADaPsAAxdDAANpiwADKUcAA2obAAMpjwADap8AAydHAANrLwADJrcAA2uzAAMtzwADbCsAAy2HAANsowADLhcAA20bAAMuZwADbZAjAAPezAmADpOpgA6VPAcAA97bAANt/BKciBKckBIZgBKekAjfA////CMAA97MCYAPAAP3rYAPAAFTlAcAA97aCZgqnbwSogASorQSo2gipbwACqXEhqXPAAN4OBKjcCKlvAAKpcVOpc8AA3h8CN4gABKjpCKlvAAKpcYQU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wABoj8AA78rAAGiQAASCSwjAAGiNAALAAGiPwADv4cAAaJAABIQLCMAAaI0AAsAAaI/AAO/4wABokAAEsq8EsrMEsrQEsrUEszQIwABNBAABwABNBsAA8BsEs1YIwABniQACwABni8AAlhvAAGeNwADwLQSzVwjAAGeJAALAAGeLwACVScAAZ43AAPBHBLNYCMAAZ4kAAsAAZ4vAAIm7wABnjcAA8GEEs1kIwABniQACwABni4P7wABnjcAA8HsEs1oIwABniQACwABni4QBwABnjcAA8JMEs1sIwABn2wACwABn3VPAAGffwADwqwSzXQjAAGfbAALAAGfdhBTAAGffwADwwgSzXgjAAGfbAALAAGfdgVfAAGffwADw2gSzXwjAAGfbAALAAGfdgj/AAGffwADw8gSzYAjAAGfbAALAAGfdCcAAZ9/AAPEKBLNhCMAAZ9sAAsAAZ90hwABn38AA8SEEs2IIwABn2wACwABn3RXAAGffwADxOASzZAjAAGfbAALAAGfdhPDAAGffwADxTwSzZgjAAGfbAALAAGfdg0fAAGffwADxZwSzaAjAAGfbAALAAGfdg/vAAGffwADxfwSzaQjAAGfbAALAAGfdg/7AAGffwADxlwdgA7uKAASzzgjAAPezAmADvQxgA7s3AcAA97aCZgS0WAjAAE0EAAHAAE0GwADxzQdgA7xyAAdgA8AAbKQABIPcCMAAx+YAAsAAx+jAAPHtwADH6nkEtKkEpJkIwABNBAABwABNBsAA8gcEtN8EtOkIwABvAQACwABvAwnAAG8FwADyHAS06gjAAG8BAALAAG8DFcAAbwXAAPIzBLTrCMAAbwEAAsAAbwMhwABvBcAA8koHYAPAAG8BA8AA8h/AAPI2wADyTQS08AjAAG8mAALAAG8oCcAAbyrAAPJ1BLTyCMAAbyYAAsAAbygVwABvKsAA8owIvc0AAb3Qdwi9zQABvdAACL3NAAG90HkEtTgIwABwDAACwABwDgnAAHAQwADyuwi+aAAACL3qAAK97MAA8tK97QAIvm0AAAi+6AAACL7uAAAIv9QAAr/beb/cFQi/1AACv9t5v9wJBLXTCMAAcAwAAsAAcA4hwABwEMAA8woEtdQIwABwDAACwABwDhXAAHAQwADzIQS19gS1+QjAAECVAALAAECXIcAAQJnAAPM7BLYFBLYI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hIHAAIcGwAEBWAS8xQjAAIcCAALAAIcEg/vAAIcGwAEBcgS8xgjAAIcCAALAAIcEg/7AAIcGwAEBigS8xwjAAIcCAALAAIcEwACWG8AAhwbAAQGiBLzICMAAhwIAAsAAhwRTwACHBsABAbwEvMkIwACHAgACwACHBIFXwACHBsABAdMEvMoIwACHAgACwACHBII/wACHBsABAesEvMsIwACHAgACwACHBIQUwACHBsABAgMEvMwIwACHAgACwACHBITwwACHBsABAhsEvM0IwACHAgACwACHBIQBwACHBsABAjMEvM4IwACHAgACwACHBMAAibvAAIcGwAECSwS8zwjAAIcCAALAAIcEwACVScAAhwbAAQJlBLzQCMAAhwIAAsAAhwTAAIwrwACHBsABAn8EvNEIwACHAgACwACHBINHwACHBsABApkEvNIIwACHAgACwACHBMAAfT3AAIcGwAECsQS80wjAAIcCAALAAIcEIcAAhwbAAQLLB1sswAEAx4QUwAEA3oQUwAEA9YI/wAEBD4FXwAEBKYP7wAEBQ4P+wAEBW4NHwAEBdcAAlhvAAQGNwACWG8ABAaXAAJYbwAEBv8AAlUnAAQHWwACVScABAe6EAcABAgaEAcABAh6EAcABAjaE8MABAk6E8MABAmiE8MABAoKE8MABApyEAcABArRTwAECzlMIwAD3swJgA8AAhwJgA8AA/AUBwAD3tsABAuIIwABp+gABwABp/MAAm0kEvOcIwACG5AACwACG5gnAAIbowAEDmwdbBsABA57AAIwrwAD6iMAAjCvAAPpSwACMKwjAAPezAmADwACG5GADwAD8BQHAAPe2wAEDsgrAAFDYBL1wCMAAUOEAAsAAUOMJwABQ5cABA+0EvXEIwABQ4QACwABQ4xXAAFDlwAEEBAS9dgjAAFDhAALAAFDjhBTAAFDlwAEEGwS9dwjAAFDhAALAAFDjhPDAAFDlwAEEMwS9egjAAFDhAALAAFDjIcAAUOXAAQRLBL17CMAAUOEAAsAAUONTwABQ5cABBGIEvXwIwABQ4QACwABQ44FXwABQ5cABBHkEvX0IwABQ4QACwABQ44I/wABQ5cABBJEKwABQcQrAAFBnB2ADwABQ4QjAAQPwwAEEB8ABBE7AAQRlwAEEfMABBJTAAQQewAEENgrAAFBwBL5dBL5eB2ADwABR/wAEvvgIwABZnwACwABZoYNHwABZo8ABBO4EvxkIwABZ0wACwABZ1cAAZprAAFnXwAEFBgS/JwjAAFmfAALAAFmhFcAAWaPAAQUgBL8xCMAAWZ8AAsAAWaGE8MAAWaPAAQU3BL8yCMAAWZ8AAsAAWaGEFMAAWaPAAQVPCMAAWlUBYAPAAP3rAAS/YQjAAFMkAALAAFMmCcAAUyjAAQV0BL9iCMAAUyQAAsAAUyYVwABTKMABBYsEv2MIwABTJAACwABTJiHAAFMowAEFogdgA8AAUyQDwAEFd8ABBY7AAQWlCMAAWlUBYAPAAFZAAAjAAFpVAWADtVoABL9qCMAAWdMAAsAAWdWEFMAAWdfAAQXlCMAAWlUBYAPAAFIVAAS/bgjAAFnTAALAAFnVg0fAAFnXwAEGCgS/cQjAAFnTAALAAFnVwACMK8AAWdfAAQYiBL9yCMAAi6EACcAAWYLAAQY8wABZg3fAAFmEAMAAWYUAwABZhgDAAFmHAMAAWYh3wABZiXfAAFmKs58Ev3MIwACL6gAJwABZgsABBnfAAFmDd8AAWYQAwABZhQDAAFmGAMAAWYcAwABZiHfAAFmJd8AAWYqznwS/eAjAAFnTAALAAFnVwABqDMAAWdfAAQayBL98CMAAWZEAAsAAWZMhwABZlcABBswIwABaVQFgA8AAVoAABL+BCMAAWdMAAsAAWdXAAGEJwABZ18ABBvAIwABaVQFgA8AAVsAACMAAWlUBYAPAAFUhAAS/rQjAAFO+AALAAFPAFcAAU8LAAQckBL+uCMAAU74AAsAAU8AhwABTwsABBzsHYAPAAFO+A8AA5JzAAQcnwAEHPgTAAEEBCMAAitEAAsAAitMJwACK1cABB2YEwABBCwjAAIrRAALAAIrTIcAAitXAAQd/BIZcCMAAi9YACcAAWYLAAQeYwABZgwDAAFmEd8AAWYUAwABZhgDAAFmHAMAAWYh3wABZiQDAAFmKs58EwABBMAjAAIvWAAnAAFmCwAEH08AAWYMAwABZhHfAAFmFAMAAWYZ3wABZhwDAAFmId8AAWYl3wABZirOfBMAAQTUIwACLuwAJwABZgsABCBDAAFmDd8AAWYQAwABZhQDAAFmGAMAAWYcAwABZiADAAFmJd8AAWYqznwdgA8AA/esGwACkhsAAoM7AAJ4twACkTsAAqR/AALo7BKinCMAAi5YACcAAWYLAAQhtwABZgwDAAFmEAMAAWYUAwABZhgDAAFmHAMAAWYh3wABZiQDAAFmKs58EwABBRQjAAIuWAAnAAFmCwAEIqMAAWYMAwABZhADAAFmFAMAAWYZ3wABZhwDAAFmId8AAWYl3wABZirOfBKQwCMAAi4oACcAAWYLAAQjlwABZgwDAAFmEAMAAWYUAwABZhgDAAFmHAMAAWYh3wABZiQDAAFmKs58EwABBTwjAAIvWAAnAAFmCwAEJIMAAWYMAwABZhHfAAFmFAMAAWYYAwABZhwDAAFmId8AAWYkAwABZirOfBMAAQVAIwACL1gAJwABZgsABCV3AAFmDAMAAWYR3wABZhQDAAFmGd8AAWYcAwABZiHfAAFmJd8AAWYqznwTAAEFSCMAAi+MACcAAWYLAAQmawABZgwDAAFmEAMAAWYUAwABZhgDAAFmHd8AAWYh3wABZiQDAAFmKs58EwABBVAjAAIvjAAnAAFmCwAEJ18AAWYMAwABZhADAAFmFAMAAWYZ3wABZhwDAAFmId8AAWYl3wABZirOfBMAAQVYIwACL4wAJwABZgsABChTAAFmDAMAAWYQAwABZhQDAAFmGd8AAWYcAwABZiHfAAFmJd8AAWYqznwjAAKspAAAEwABBWQjAAIv9AAnAAFmCwAEKWMAAWYN3wABZhADAAFmFAMAAWYYAwABZhwDAAFmIAMAAWYl3wABZirOfBMAAQV0IwABZnwACwABZoSHAAFmjwAEKlQTAAEFyCMAAi7YACcAAWYLAAQquwABZg3fAAFmEAMAAWYUAwABZhgDAAFmHAMAAWYh3wABZiXfAAFmKs58EwABBcwjAAIuxAAnAAFmCwAEK68AAWYMAwABZhADAAFmFAMAAWYZ3wABZhwDAAFmId8AAWYl3wABZirOfCMAAq54AAATAAEF3CMAAWZ8AAsAAWaFTwABZo8ABCy8EwABBfAjAAIucAAnAAFmCwAELSMAAWYN3wABZhADAAFmFAMAAWYYAwABZhwDAAFmIAMAAWYl3wABZirOfBMAAQX0IwACLhQAJwABZgsABC4XAAFmDd8AAWYQAwABZhQDAAFmGAMAAWYcAwABZiADAAFmJd8AAWYqznwTAAEGFCMAAWZEAAsAAWZMJwABZlcABC8IHYAPAAP3rBMAAoh7AAKwvwACkvsAAnPAEoX0HYAPAAP3rAsABC/PAAKdfBMAAQZEIwABZkQACwABZkxXAAFmVwAEMBgdgA8AA/esDwACnX8AApL7AAJzwB2ADwAD96wLAAQvzwACiHgdgA8AA/esEwACbVMAAnSLAAJzwwAC0vATAAEGjCMAAi/YACsAAi/jAAQxDwABZgsABDFvAAFmDd8AAWYQAwABZhQDAAFmGAMAAWYcAwABZiHfAAFmJd8AAWYqznwSCawjAAIumAAnAAFmCwAEMoMAAWYMAwABZhADAAFmFAMAAWYYAwABZh3fAAFmId8AAWYkAwABZirOfBMAAQa0IwACLpgAJwABZgsABDNvAAFmDAMAAWYQAwABZhQDAAFmGd8AAWYcAwABZiHfAAFmJd8AAWYqznwTAAEHCCMAAi+oACcAAWYLAAQ0YwABZg3fAAFmEAMAAWYUAwABZhnfAAFmHAMAAWYh3wABZiXfAAFmKs58EwABBygjAAFmfAALAAFmhgj/AAFmjwAENVQTAAEHPCMAAi8YACcAAWYLAAQ1vwABZg3fAAFmEAMAAWYUAwABZhgDAAFmHAMAAWYh3wABZiXfAAFmKs58EwABB0gjAAIuPAAnAAFmCwAENrMAAWYMAwABZhADAAFmFAMAAWYYAwABZh3fAAFmId8AAWYkAwABZirOfBMAAQdMIwACLjwAJwABZgsABDenAAFmDAMAAWYQAwABZhQDAAFmGd8AAWYcAwABZiHfAAFmJd8AAWYqznwTAAEHUCMAAi48ACcAAWYLAAQ4mwABZgwDAAFmEAMAAWYUAwABZhnfAAFmHAMAAWYh3wABZiXfAAFmKs58EwABB8gjAAIvMAAnAAFmCwAEOY8AAWYN3wABZhADAAFmFAMAAWYYAwABZhwDAAFmId8AAWYl3wABZirOfB2ADwAD96wTAALO5wACz6cAAs4fAALo7CMAAiscAAsAAisl3wACKygkEwABCJwjAAIvAAAnAAFmCwAEOycAAWYMAwABZhADAAFmFd8AAWYYAwABZhwDAAFmId8AAWYl3wABZirOfBMAAQigIwACLwAAJwABZgsABDwbAAFmDAMAAWYQAwABZhXfAAFmGd8AAWYcAwABZiHfAAFmJd8AAWYqznwTAAEIqCMAAi/EACcAAWYLAAQ9DwABZgwDAAFmEAMAAWYUAwABZhgDAAFmHAMAAWYh3wABZ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AER5CMAAXr4AAsAAXsAVwABewsABFn4EwABEfAjAAF6+AALAAF7ACcAAXsLAARaXBMAARH4IwABeogACwABepIQUwABepsABFrAEwABEfwjAAF6iAALAAF6khPDAAF6mwAEWygTAAESBCMAAXqIAAsAAXqSCP8AAXqbAARbkBMAARIIIwABeogACwABepFPAAF6mwAEW/gTAAESDCMAAXqIAAsAAXqQJwABepsABFxcEwABEhQjAAF6iAALAAF6kgVfAAF6mwAEXMATAAESGCMAAXqIAAsAAXqQhwABepsABF0oEwABEhwjAAF6iAALAAF6kFcAAXqbAARdjBMAARIgIwABeogACwABepIP7wABepsABF3wEwABEjgjAAF7ZAALAAF7bCcAAXt3AAReWBMAARI8IwABe2QACwABe2xXAAF7dwAEXrwTAAESQCMAAXtkAAsAAXtuCP8AAXt3AARfIBMAARJEIwABe2QACwABe21PAAF7dwAEX4gTAAESTCMAAXtkAAsAAXtuBV8AAXt3AARf7BMAARJUIwABe2QACwABe24QUwABe3cABGBUEwABElwjAAF7ZAALAAF7bIcAAXt3AARgvBMAARJsIwABe6gACwABe7AnAAF7uwAEYSATAAEScCMAAXuoAAsAAXuwVwABe7sABGGEEwABEnQjAAF7qAALAAF7sIcAAXu7AARh6BMAARJ4IwABe6gACwABe7FPAAF7uwAEYkwTAAESgCMAAXqIAAsAAXqSD/sAAXqbAARisBMAARKEIwABe+AACwABe+gnAAF78wAEYxgTAAESiCMAAXvgAAsAAXvoVwABe/MABGN8EwABEpAjAAF7KAALAAF7MCcAAXs7AARj4BMAARKYIwABeygACwABezBXAAF7OwAEZEQTAAESnCMAAXsoAAsAAXswhwABezsABGSoEwABEqAjAAF7KAALAAF7MU8AAXs7AARlDBMAARKkIwABeygACwABezIFXwABezsABGVwEwABEqwjAAF6iAALAAF6kwACMK8AAXqbAARl2BMAARK0IwABeogACwABepINawABepsABGZIEwABEsQjAAF6iAALAAF6kwACEgcAAXqbAARmsBMAARLQIwABgoAACwABgooFXwABgpMABGcgEwABEtQjAAGCgAALAAGCiIcAAYKTAARniBMAARLYIwABgoAACwABgolPAAGCkwAEZ+wTAAES3CMAAYKAAAsAAYKKCP8AAYKTAARoUBMAARLgIwABgoAACwABgohXAAGCkwAEaLgTAAES5CMAAYKAAAsAAYKIJwABgpMABGkcEwABEugjAAGCgAALAAGCihBTAAGCkwAEaYATAAES7CMAAYKAAAsAAYKKE8MAAYKTAARp6BMAARLwIwABgoAACwABgooNHwABgpMABGpQEwABEvwjAAGCgAALAAGCig/vAAGCkwAEargTAAETACMAAYKAAAsAAYKKD/sAAYKTAARrIBMAARMEIwABgoAACwABgosAAibvAAGCkwAEa4gTAAETCCMAAYKAAAsAAYKLAAISBwABgpMABGv4EwABEwwjAAGCgAALAAGCiwACWG8AAYKTAARsaBMAARMQIwABgoAACwABgooNawABgpMABGzYEwABExgjAAGCgAALAAGCihAHAAGCkwAEbUATAAETHCMAAYKAAAsAAYKLAAIwrwABgpMABG2oEwABEyAjAAGCgAALAAGCiwACVScAAYKTAARuGBMAARMsIwABeogACwABepMAAibvAAF6mwAEbogjAAF2aAAAEwABE3QjAAF8OAALAAF8QFcAAXxLAARvFBMAARN4IwABfDgACwABfECHAAF8SwAEb3gTAAETfCMAAXw4AAsAAXxBTwABfEsABG/cEwABE4AjAAF8OAALAAF8QgVfAAF8SwAEcEATAAEThCMAAXw4AAsAAXxCCP8AAXxLAARwqBMAAROIIwABfDgACwABfEIQUwABfEsABHEQEwABE4wjAAF8OAALAAF8QhPDAAF8SwAEcXgTAAETkCMAAXw4AAsAAXxCDR8AAXxLAARx4B2ADwABfDgnAARYbwAEbysABG+PAARv8wAEcFcABHC/AARxJwAEcY8ABHH0IwABi4AAACMAAYuwAAATAAETnCMAAXzIAAsAAXzQVwABfNsABHMwEwABE6AjAAF8yAALAAF80IcAAXzbAARzlBMAAROkIwABfMgACwABfNFPAAF82wAEc/gTAAETqCMAAXzIAAsAAXzSBV8AAXzbAAR0XBMAAROsIwABfMgACwABfNII/wABfNsABHTEEwABE7AjAAF8yAALAAF80hBTAAF82wAEdSwTAAETtCMAAXzIAAsAAXzSE8MAAXzbAAR1lBMAARO4IwABfMgACwABfNINHwABfNsABHX8EwABE7wjAAF8yAALAAF80g/vAAF82wAEdmQTAAETwCMAAXzIAAsAAXzSD/sAAXzbAAR2zBMAARPEIwABfMgACwABfNMAAlhvAAF82wAEdzQTAAETyCMAAXzIAAsAAXzTAAJVJwABfNsABHekHYAPAAF8yDcABFlDAARzRwAEc6sABHQPAAR0cwAEdNsABHVDAAR1qwAEdhMABHZ7AAR24wAEd0sABHe4IwACO7wABiOmEkQTAAETzB2ADwABevgLAARacwAEWgwdgA8AAYKASwAEaTMABGjPAARnnwAEaAMABGc3AARoZwAEaZcABGn/AARqZwAEas8ABGs3AARsfwAEbi8ABG1XAARtvwAEa58ABGzvAARsDB2ADwABe2QfAARebwAEXtMABGDTAARfnwAEYAMABF83AARgaB2ADwABe6gTAARhNwAEYZsABGH/AARiYB2ADwABe+ALAARjLwAEY5AdgA8AAXqISwAEXHMABF2jAARdPwAEXA8ABFzXAARbpwAEWtcABFs/AARZpwAEXgcABGLHAARX/wAEWNMABFeXAARl7wAEbp8ABGZfAARmxB2ADwABeygXAARj9wAEZFsABGS/AARlIwAEZYQjAAJeAAAAIwABorgACwABothXAAGi3CQjAAGiuAALAAGi2FcAAaLcVB2ADwABg0gADAAAAAAAA+P8IwABhRQABwABhR8ABH5oDAAAAAAAA8H8IwABhRQABwABhR8ABH7IDAAAAAAAA8P8IwABhRQABwABhR8ABH8oDAAAAAAAAAAAIwABhRQABwABhR8ABH+IDAAAAAAAA8D8IwABhRQABwABhR8ABH/oIwABhbAAACMAAYXoAAAdgA8AAYssACsAAmBoIwAB4nQAABMAARqIEwABGowTAAEakBIJqBMAARqUEmf0Eq+EEwABGpgTAAEanB2ADwAD961bAAJ8OwAChBsABIDTAASA5wACfRsAAoXbAAKa3wACrh8AAn37AAKNuwACor8AAq7/AAKAmwACjpsAAqf/AAKv3wAEgPsABIEPAAKpvwACsL8AAoJbAAKSGwACqp8ABIEbAAKUuwACrF8AAn7bAAKGuwACiHsAAqcfAAJ/uwACh5sAApPbAAKS+wAEgS8ABIE7AASBRwACsZ8AApWbAAL6FwAEgVsAAqY/AAJ8OwAChBsAApS7AASA5wACfRsAAoXbAASA0wACrh8AAn37AAKHmwACmt8AAq7/AAJ+2wACiHsAAqK/AAKv3wACf7sAAo27AAKnHwACsL8AAoCbAAKOmwACp/8AArGfAASA+wAEgQ8AAqm/AAKCWwACkhsAAqqfAASBGwACk9sAAqxfAAKxnwAEgS8AAqY/AAKGuwACe1sAApL7AAL6FwAEgVsAApWbAASBOwAEgUQTAAEapBMAARqoEmNsEmiQEWwdgA8AA/esGwAEhu8ABIcDAASHFwADuWsABIcjAASHLBMAAReUEwABF5gTAAEasBMAARq0EwABGrgSGrQSqNATAAEavBMAARrAEwABGsQTAAEayBJvIBMAARrMEwABGtATAAEa1BMAARrYEwABGtwTAAEa4BMAARrkEwABGugTAAEa7BLr+BMAARrwEwABGvQTAAEN3BKB9BMAARr4EwABGvwTAAEbABJbwBMAARsEEwABGwgTAAEbDBMAARsQEwABGxQTAAEbGBMAARscEvTYEwABGyATAAEbJBMAARsoEwABGywTAAEbMBIRbBMAARs0EwABGzgTAAEbPBMAARtAEwABG0QTAAEbSBIC9BMAARtMEwABG1ATAAEbVBMAARtYEwABG1wTAAEbYBIRSBMAARtkEwABG2gTAAEbbBMAARtwEwABG3QTAAEbeBMAARt8EmYAEwABG4ATAAEbhBLkQBMAARuIEwABG4wSn6ATAAEbkBMAARuUEwABG5gTAAEbnBMAARugEwABG6QTAAEbqBMAARusEwABG7ATAAEbtBIKIBMAARu4EwABG7wTAAEbwBLOYBMAARvEEwABG8gTAAEbzBMAARvQEwABG9QTAAEb2BMAARvcEwABG+ATAAEb5BMAARvoEwABG+wTAAEb8BMAARv0EwABG/gSlKgTAAEb/BMAARwAEwABHAQTAAEcCBMAARwMEwABHBATAAEcFBMAARwYEwABHBwTAAEY1BMAARwgEwABHCQTAAEcKBMAARwsEwABHDATAAEcNBMAARw4EwABHDwTAAEcQBMAARxEEwABHEgSkawTAAEcTBMAARxQEwABHFQTAAEcWBMAARxcEwABHGATAAEcZBMAARxoEwABHGwTAAEccBMAARx0EwABHHgTAAEcfBMAARyAEwABHIQTAAEciBMAARyMEwABHJATAAEclBMAARyYEwABHJwTAAEcoBMAARykEwABHKgTAAEcrBMAARywEwABHLQTAAEcuBMAARy8EwABHMATAAEcxBMAARzIEwABHMwTAAEc0BMAARzUEwABHNgTAAEc3BMAARzgEwABHOQTAAEc6BMAARzsEwABHPATAAEc9BMAARz4EwABHPwTAAEdABMAAR0EEwABHQgTAAEdDBMAAR0QEwABHRQTAAEdGBMAAR0cEwABHSATAAEdJBJu6BMAAR0oEwABHSwTAAEdMBMAAR00EwABHTgTAAEdPBJwaBJa3BMAAR1AEwABHUQTAAEdSBMAAR1MEwABHVATAAEdVBMAAR1YEwABHVwTAAEdYBMAAR1kEwABHWgTAAEdbBMAAR1wEwABHXQTAAEdeBMAAR18EwABHYATAAEdhBMAAR2IEwABHYwTAAEdkBMAAR2UEwABHZgTAAEdnBMAAR2gEwABHaQTAAEdqBMAAR2sEwABHbATAAEdtBIJ1BMAAR24EwABHbwSCPQSG6ATAAEdwBMAAR3EEwABHcgSETATAAEdzBILfBMAAR3QEwABHdQTAAEd2BMAAR3cEwABHeATAAEd5BMAAR3oEwABHewTAAEd8BMAAR30EwABHfgTAAEd/BMAAR4AEwABHgQTAAEeCBMAAR4MEwABHhATAAEeFBMAAR4YEwABHhwSHzATAAEeIBMAAR4kEwABHigTAAEeLBMAAR4wEwABHjQSb0AScQQdgA8AA/euBEcABIe3AASHywAEh98ABIcjAASH8wAEiAcABIgbAASIJwAEiDMABIhHAASIWwAEiG8ABIiDAAKPewAEiI8AAvlzAASIowAEiLcABIjLAASI3wACXUMABIjzAASJBwAEiRsABIkvAASJQwAEiU8ABIljAASHLwAEiXcABImLAASJlwAEiasABIm/AASJ0wAEid8ABInzAASKBwAEihsABIovAASKQwAEilcABIprAASKdwAEiosABIqfAASKswAEiscAA7m/AASK2wAEiucABIr7AASLDwAEiyMABIs3AASLSwAEi18ABItrAASLfwAEi5MABIunAASLuwAEi88ABIvjAASL7wAEjAMABIwXAASMKwAEjD8ABIxTAASMZwAEjHsABIyHAASMmwAEjK8ABIy7AASMzwAEjOMABIzvAASNAwAEjRcABI0rAASNPwAEjVMABI1nAASNewAEjY8ABI2jAASNtwAEjcMABI3XAASN6wAEjf8ABI4LAASJdwAEjh8ABI4zAASORwAEjlsABI5vAASOgwAEjpcABI6rAASOvwAEjtMABI7nAASO+wAEjw8ABI8jAASPLwAEj0MABI9XAASPawAEj38ABI+TAASPpwAEj7sABI/PAASP4wAEj/cABJALAASQHwAEkDMABJBHAASQWwAEkG8ABJCDAASQlwAEkKsABJC/AASQ0wAEkN8ABJDzAASRBwAEkRsABJEvAASRQwAEkVcABJFrAASRfwAEkZMABJGnAASRuwAEkc8ABJHjAASR9wAEkgsABJIfAASSMwAEkkcABJJbAASSbwAEkoMABJKXAASSqwAEkr8ABJLTAASS5wAEkvsABJMPAASTIwAEkzcABJNLAASTXwAEk3MABJOHAASTmwAEk68ABJPDAAST1wAEk+sABIEvAAKxnwAEk/8ABJQTAASUJwAElDsABJRPAASUYwAElHcABJSLAASUnwAElLMABJTHAASU2wAElO8ABJUDAASVFwAElSsAAoo7AASVNwAElUsABJVfAASVcwAElYcABJWbAASJvwADvAMABJWvAASHFwAEhwMABJW7AASVxwAEldsABJXvAASWAwAElhcABJYrAASWPwAEllMABJZnAASWewAElo8ABJajAASWtwAElssABJbfAASW8wAElwcABJcbAASXLwAEl0MABJdXAASXawAEl38ABJeTAASXpwAEl7sABJfPAASX4wAEl/cABJgLAASVcwAEmB8ABJgrAASYPwAEmFMABJhfAASYawAEmH8ABJiTAASYpwAEmLMABJjHAASY0wAEmOcABJj7AASZDwAEmSMABJk3AASZSwAEmV8ABJlzAASZhwAEmZsABJmvAASZwwAEmdcABJnrAASZ/wAEmhMABJonAASaOwAEmk8ABJpjAASabwAEmoMABJqXAASaqwAEmr8ABJrTAASa5wAEmvASD1ASD1QSHUwTAAEePBIPLBMAAR5AEwABHkQTAAEeSBK0KBIQDBJlGBIcaBIPjBMAAR5MEmnoEwABHlASW+QSWTQSCdgSZIgSEBATAAEeVBMAAR5YEwABHlwTAAEeYB2ADwAD96xnAASsMwAErD8ABKxLAASsVwAErGsABKx3AASsiwAErJ8ABKyzAASsvwAErMsABKzXAASs4wAErO8ABK0DAAStDwAErSMABK0vAAStOwAErUcABK1TAAStXwAErXMABK2HAAStmBKpPBAwHYAPAAP3rAsABK9fAASvaBMAAR6wCN9////8COcAASHIEwABIqwjAAJowAALAAJoyCcAAmjTAASv9BMAASKwIwACaMAACwACaMhXAAJo0wAEsFgTAAEitCMAAmjAAAsAAmjIhwACaNMABLC8EwABIrgjAAJowAALAAJoyU8AAmjTAASxIBMAASK8IwACaMAACwACaMoFXwACaNMABLGEEwABIsAjAAJowAALAAJoygj/AAJo0wAEsewTAAEixCMAAmjAAAsAAmjKEFMAAmjTAASyVBMAASLIIwACaMAACwACaMoTwwACaNMABLK8EwABIswjAAJowAALAAJoyg0fAAJo0wAEsyQTAAEi0CMAAmjAAAsAAmjKD+8AAmjTAASzjBMAASLUIwACaMAACwACaMoP+wACaNMABLP0EwABItgjAAJowAALAAJoywACWG8AAmjTAAS0XBMAASLcIwACaMAACwACaMsAAlUnAAJo0wAEtMwTAAEi4CMAAmjAAAsAAmjKEAcAAmjTAAS1PBMAASLkIwACaMAACwACaMsAAjCvAAJo0wAEtaQTAAEi6CMAAmjAAAsAAmjLAAIm7wACaNMABLYUEwABIuwjAAJowAALAAJoyg1rAAJo0wAEtoQTAAEi8CMAAmjAAAsAAmjLAAISBwACaNMABLbsEwABIvQjAAJowAALAAJoywACFWcAAmjTAAS3XBMAASL4IwACaMAACwACaMsAAg8HAAJo0wAEt8wTAAEjACMAAmjAAAsAAmjLAAHCdwACaNMABLg8EwABIwgjAAJowAALAAJoywAB9PcAAmjTAAS4rBMAASMQIwACaMAACwACaMsAAfKrAAJo0wAEuRwTAAEjGCMAAmjAAAsAAmjLAAGrMwACaNMABLmMEwABIyAjAAJowAALAAJoywABqDMAAmjTAAS5/BMAASMoIwACaMAACwACaMsAAeEXAAJo0wAEumwTAAEjMCMAAmjAAAsAAmjLAAGnZwACaNMABLrcEwABIzgjAAJowAALAAJoywABppsAAmjTAAS7TBMAASNAIwACaMAACwACaMsAAaTPAAJo0wAEu7wTAAEjSCMAAmjAAAsAAmjLAAGcywACaNMABLwsEwABI0wjAAJowAALAAJoywABmmsAAmjTAAS8nBMAASNQIwACaMAACwACaMoM0wACaNMABL0MEwABI1QjAAJowAALAAJoywABkTsAAmjTAAS9dBMAASNYIwACaMAACwACaMrSvwACaNMABL3kEwABI1wjAAJowAALAAJoyg/jAAJo0wAEvkwTAAEjYCMAAmjAAAsAAmjLAAGPwwACaNMABL60EwABI2QjAAJowAALAAJoysLrAAJo0wAEvyQTAAEjaCMAAmjAAAsAAmjLAAGEJwACaNMABL+MEwABI2wjAAJowAALAAJoywABfq8AAmjTAAS//BMAASNwIwACaMAACwACaMsAAXoDAAJo0wAEwGwSB1QSWnASDTQSDewS8MwTAAEg5BMAAQmQEwABI6ATAAEjpBMAASOoEwABI6wTAAEjsBMAASO0EwABI7gTAAEjvBMAASPAEs5oEwABI8QTAAEjyBMAASPMEwABI9ATAAEj1BMAASPYEwABI9wTAAEj4BMAASPkEwABI+gTAAEj7BMAASPwEVgSd9QTAAEj9BMAASP4EwABI/wSzLgSDmgSCjATAAEkABMAASQEEg9EElngEg74EwABJAgTAAEkDBMAASQQEwABJBQTAAEkGBMAASQcEwABJCATAAEkJBMAASQoEwABJCwTAAEkMBMAASQ0EwABJDgTAAEkPBMAASRAEwABJEQTAAEkSBJyvBMAASRMEwABJFASXWQSW0gTAAEkVBMAASRYEwABJFwTAAEkYBMAASRkEg+cEwABJGgSArATAAEkbBMAASRwEwABJHQTAAEkeBMAASR8EwABJIATAAEkhBMAASSIEwABJIwSW1QTAAEkkBIJpBLxWBMAASSUEwABJJgTAAEknBMAASSgEgpMEwABJKQTAAEkqBMAASSsEwABJLATAAEktBIG7BAcEn80EwABJLgTAAEkvBMAASTAEg8gEg+oEg70EllwEwABJMQTAAEkyBMAASTMEwABJNATAAEk1BMAASTYEhygEwABJNwSCZwTAAEk4BMAASTkEhbUEwABJOgSB+gSWKQSDWwSk4QS+oASBvwTAAEk7BMAASTwEwABJPQTAAEk+BMAAST8EwABJQASWXQTAAElBBMAASUIEwABJQwTAAElEBMAASUUEhtgEwABJRgTAAElHBMAASUgEwABJSQShlwTAAElKBJiGBJasBMAASUsEwABDggTAAElMBIGwBKV0BIKQBMAASU0EwABJTgSW0ATAAElPB2ADwAD964C0wAEwN4OdgJ7AATA6wAEwPYOjg5HAATBAwAEwQ8ABMEbAAStDwAEwS8ABMFDAATBVwAEwWsABMF/AATBkwAEwacABMG7AATBzwAEweMABMH3AATCAwAEwhcABMIrAATCPwAEwlMABMJnAATCewAEwo8ABMKjAATCtwAEwssABMLfAATC8wAEwvsABMMHAATDGwAEwy8ABMNDAATDTwAEw1sAApBbAATDZwAEw3sAAr5/AATDjwAEw5sABMOnAATDswAEw8cABMPbAATD7wAExAMABMQXAATEKwAExD8ABMRTAATEZwAExHsABMSPAATEowAExLcABMTLAATE3wAExPMABMUHAATFEwAExScABMU7AATFRwAExVMABMVnAATFewAExY8AAqOfAATFowAExbcABIzjAATFwwAExdcABMXjAATF9wAExgsABI0rAASV7wAExh8ABMYzAASNPwAExkcABMZbAATGbwAExoMABMaXAASNUwAExqMABMa3AATGwwAExs8ABI1nAATG4wAExvcABMcLAATHHwAExysABMc/AAL6LwAEx1MABMdnAATHewAEx48ABMebAATHowAEjh8ABMevAATHwwAEx9cABMfrAATH9wAEyAIFZwAEyA8ABMgbAATILwAEyEMABMhWDSsABMhrAATIfwAEyJMABMifAATIswAEyL8ABMjTAATI5wAEyPMABMkHAATJEwAEyR8ABMkrAATJNwAEyUMABItfAASYpwAEyU8ABMljAATJdwAEjyMABMmLAATJnwAEybMABMnHAATJ0wAEyecABMn7AATKDwAEyiMABMo3AATKQwAEylcABMprAATKfwAEjHsABMqTAAKkfwAEyp8ABMqzAATKvwAEyssABMrfAASQ0wAEyvMABMsHAASZmwAEyxMABMsfAATLKwAEyz8ABMtTAATLXCJQaAWADwAD96wAEwABITwTAAEmEBMAASFUEwABIVwTAAEhRBMAASEcEwABJhQTAAEhJBMAASEoEwABIVgTAAEmGBKeEBKeJBMAASFQEwABIUwTAAEmHBIPuBMAASFgEoNQEagSCRQTAAEhQBICWBIG0BMAASYgEwABJiQTAAEhLBMAASEwEp10EwABISATAAEhNBMAASE4EwABJigdgA8AA/esmwAE1tMABNbnAATW+wAE1w8AA7lzAATXIwAE1zcABNdLAATXXwAE13MABNeHAATXmwADuYcAA7m/AATXrwAE17sABNfHAATX2wAE1+8ABNgDAAKdfwAE2A8ABNgjAASMewAE2C8ABNg3AATYQwAE2FcABNhjAATYbwAE2IMABNiXAATYqwAE2L8ABNjLAATY3wAE2PMABNkEEssUEsr8EwABJiwSyvgTAAEmMBLKrBLKqBMAASY0EwABIOgTAAEmOBMAASY8EwABJkATAAEmRBMAASZIEsooEsowEsosEsaQEsZAEsaIHYAPAAP3rJcABIiDAATbmwAE1zcABK0vAATbpwAE27MAA7m/AATYvwAE1tMABNe7AATX2wAE168ABNfHAATC8wAE28cABNvTAATb5wAE2/MABNv/AATcEwAExPMABNiXAASa5wAE3CcABNirAATcOwAE3E8ABNxjAATFBwAE3HcABNyLAATclwAE3KMABNyvAAL5cwAE3LsABNzEHYAO9AAAEwABJrAjAAGYXAALAAGYZCcAAZhvAATfWBMAASa0IwABmFwACwABmGRXAAGYbwAE37wTAAEmuCMAAZhcAAsAAZhkhwABmG8ABOAgEwABJrwjAAGYXAALAAGYZU8AAZhvAATghBMAASbAIwABmFwACwABmGYFXwABmG8ABODoEwABJsQjAAGYXAALAAGYZgj/AAGYbwAE4VAdgA8AAZhcGwAE328ABN/TAATgNwAE4JsABOD/AAThZBcAAY8WvxwTAAEnLCMAAZqcAAcAAZqnAATiVCMAAZrMAAcAAZroJCMAAZrMAAcAAZrohCMAAZrMAAcAAZrpTB2ADwABmswTAATipwAD4J8ABOLXAATjBBMAASdwEwABKAQTAAEoCBMAASgMEuhYEwABKBATAAEoFB2ADwAD96wfAATjqwAE478ABOPTAATj5wAE4/MABOQHAAKa3BMAASdQEwABJ1QTAAEnWBMAASdcHWwjAATkqwAE4qcABOS/AAPgnwAE5NMABOLXAATk5wAE4wQjAAPezAmADwAD962ADwABmswHAAPe2wAE5PgdbBMAAqt93wACi/gAIwAD3swJgA8AA/etgA8AA+j8BwAD3tsABOXwEwABKGATAAEoaBMAAShwEwABKQwjAAGcEAALAAGcGCcAAZwjAATmzBMAASkQIwABnBAACwABnBhXAAGcIwAE5zATAAEpFCMAAZwQAAsAAZwYhwABnCMABOeUEwABKRgjAAGcEAALAAGcGU8AAZwjAATn+BMAASkcIwABnBAACwABnBoFXwABnCMABOhcEwABKSAjAAGcEAALAAGcGgj/AAGcIwAE6MQTAAEpJCMAAZwQAAsAAZwaEFMAAZwjAATpLBMAASkoIwABnBAACwABnBoTwwABnCMABOmUEwABKSwjAAGcEAALAAGcGg0fAAGcIwAE6fwTAAEpMCMAAZwQAAsAAZwaD+8AAZwjAATqZBMAASk0IwABnBAACwABnBoP+wABnCMABOrMEwABKTgjAAGcEAALAAGcGwACWG8AAZwjAATrNBMAASk8IwABnBAACwABnBsAAlUnAAGcIwAE66QTAAEpQCMAAZwQAAsAAZwaEAcAAZwjAATsFBMAASlEIwABnBAACwABnBsAAjCvAAGcIwAE7HwTAAEpSCMAAZwQAAsAAZwbAAIm7wABnCMABOzsEwABKUwjAAGcEAALAAGcGg1rAAGcIwAE7VwTAAEpUCMAAZwQAAsAAZwbAAISBwABnCMABO3EEwABKVQjAAGcEAALAAGcGwACFWcAAZwjAATuNBMAASlYIwABnBAACwABnBsAAg8HAAGcIwAE7qQTAAEpXCMAAZwQAAsAAZwbAAHCdwABnCMABO8UEwABKWAjAAGcEAALAAGcGwAB9PcAAZwjAATvhBMAASlkIwABnBAACwABnBsAAfKrAAGcIwAE7/QTAAEpaCMAAZwQAAsAAZwbAAGrMwABnCMABPBkHYAPAAGcEGMABObjAATnRwAE56sABOgPAATocwAE6NsABOlDAATpqwAE6hMABOp7AATq4wAE60sABOu7AATsKwAE7JMABO0DAATtcwAE7dsABO5LAATuuwAE7ysABO+bAATwCwAE8HgTAAEp5CMAAmr0AAsAAmr8hwACawcABPJ0EwABKewjAAJq9AALAAJq/FcAAmsHAATy2BMAASn0IwACavQACwACavwnAAJrBwAE8zwTAAEqDB2ADwABnaAPAAPrpwAD7EsAA+ykEwABKiQdgA8AAZ4kUwAD7QMAA/CXAAPvcwAD8PMAA+/PAAPuxwAD7acAA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wAB0pQPAAU53wAFOkMABTqkEwABQpgjAAHTTAALAAHTVCcAAdNfAAU7RBMAAUKcIwAB00wACwAB01RXAAHTXwAFO6gTAAFCoCMAAdNMAAsAAdNUhwAB018ABTwMEwABQqQjAAHTTAALAAHTVU8AAdNfAAU8cBMAAUKoIwAB00wACwAB01YFXwAB018ABTzUEwABQqwjAAHTTAALAAHTVgj/AAHTXwAFPTwTAAFCsCMAAdNMAAsAAdNWEFMAAdNfAAU9pBMAAUK0IwAB00wACwAB01YTwwAB018ABT4MEwABQrgjAAHTTAALAAHTVg0fAAHTXwAFPnQTAAFCvCMAAdNMAAsAAdNWD+8AAdNfAAU+3BMAAULAIwAB00wACwAB01YP+wAB018ABT9EEwABQsQjAAHTTAALAAHTVwACWG8AAdNfAAU/rB2ADwAB00wzAAU7WwAFO78ABTwjAAU8hwAFPOsABT1TAAU9uwAFPiMABT6LAAU+8wAFP1sABT/AEwABQvATAAFC+BMAAUMAElkcEwABQwwTAAFDHBMAAUMoEwABQzAjAAHWiAALAAHWkCcAAdabAAVBgBMAAUM0IwAB1ogACwAB1pBXAAHWmwAFQeQTAAFDOCMAAdaIAAsAAdaQhwAB1psABUJIEwABQzwjAAHWiAALAAHWkU8AAdabAAVCrB2ADwAB1ogTAAVBlwAFQfsABUJfAAVCwBMAAUNEEwABQ+QjAAHXiAAHAAHXkwAFQ4QTAAFD6CMAAdeIAAcAAdeTAAVD1BMAAUPsIwAB14gABwAB15MABUQkEwABQ/AjAAHXiAAHAAHXkwAFRHQTAAFD9CMAAdeIAAcAAdeTAAVExBMAAUP4IwAB14gABwAB15MABUUUEsX4IwAB14gABwAB15MABUVkEwABQ/wjAAHXiAAHAAHXkwAFRawTAAFEACMAAdeIAAcAAdeTAAVF/BMAAUQEIwAB14gABwAB15MABUZMEwABRAgjAAHXiAAHAAHXkwAFRpwTAAFEDCMAAdewAAcAAdeTAAVG7BMAAUQQIwAB17AABwAB15MABUc8EwABRBQjAAHXsAAHAAHXkwAFR4wTAAFEGCMAAdewAAcAAdeTAAVH3BMAAUQcIwAB17AABwAB15MABUgsEwABRCAjAAHXsAAHAAHXkwAFSHwTAAFEJCMAAdewAAcAAdeTAAVIzBMAAUQoIwAB17AABwAB15MABUkcEwABRCwjAAHXiAAHAAHXkwAFSWwTAAFEMCMAAdeIAAcAAdeTAAVJvBMAAUQ0IwAB17AABwAB15MABUoMEwABRDgjAAHXsAAHAAHXkwAFSlwTAAFEPCMAAdewAAcAAdeTAAVKrBMAAURAIwAB17AABwAB15MABUr8EwABREQjAAHXsAAHAAHXkwAFS0wTAAFESCMAAdewAAcAAdeTAAVLnBLGaCMAAdggAAcAAdeTAAVL7BLGZCMAAdggAAcAAdeTAAVMNBLGfCMAAdfMAAcAAdeTAAVMfBLGeCMAAdfMAAcAAdeTAAVMxBMAAURMIwAB17AABwAB15MABU0MEwABRFAjAAHXsAAHAAHXkwAFTVwTAAFEVCMAAdfoAAcAAdeTAAVNrBMAAURYIwAB1+gABwAB15MABU38EwABRFwjAAHYBAAHAAHXkwAFTkwTAAFEYCMAAdgEAAcAAdeTAAVOnB2ADwAB14iXAAVDmwAFQ+sABUQ7AAVEiwAFRNsABUUrAAVFcwAFRcMABUYTAAVGYwAFRrMABUcDAAVHUwAFR6MABUfzAAVIQwAFSJMABUjjAAVJMwAFSYMABUnTAAVKIwAFSnMABUrDAAVLEwAFS2MABUuzAAVL+wAFTEMABUyLAAVM0wAFTSMABU1zAAVNwwAFThMABU5jAAVOsCMAAd2QABcAAd2Z3wAB3ZwDAAHdowAD4H8AAd2nAAPgfwAB3ankEwABReAjAAHcLAALAAHcNFcAAdw/AAVR9BMAAUXkIwAB3CwACwAB3DSHAAHcPwAFUlgTAAFF6CMAAdwsAAsAAdw1TwAB3D8ABVK8EwABRewjAAHcLAALAAHcNCcAAdw/AAVTICMAA97MCYAO8wWADwAB3QwHAAPe2gmYIwAB3TwACwAB3UsABVOHAAHdTeQdgA8AAdwsEwAFUzcABVILAAVSbwAFUtATAAFIIB2ADwAB4MQAIwAB4xAAABMAAUlEIwAB4ygACwAB4zAnAAHjOwAFVOATAAFJSCMAAeMoAAsAAeMwVwAB4zsABVVEHYAPAAHjKAsABVT3AAVVWB2ADwABijQAHYAPAAHjWAAjAAGhWAWADwAB4ygHAAGhYCQTAAFMrBMAAU5wEwABTnQTAAFOeBMAAU58KwAB7EwrAAHwKCsAAezcHYAPAAJowKMABLALAASwbwAEsNMABLE3AASxmwAEsgMABLJrAASy0wAEszsABLOjAAS0CwAEtHMABLTjAAS1UwAEtbsABLYrAAS2mwAEtwMABLdzAAS34wAEuFMABLjDAAS5MwAEuaMABLoTAAS6gwAEuvMABLtjAAS70wAEvfsABLxDAAS8swAEvSMABL2LAAS+YwAEvssABL87AAS/owAEwBMABMCAEwABVEgjAAJpiAALAAJpkCcAAmmbAAVZsBMAAVRMIwACaYgACwACaZBXAAJpmwAFWhQTAAFUUCMAAmmIAAsAAmmQhwACaZsABVp4EwABVFQjAAJpiAALAAJpkU8AAmmbAAVa3BMAAVRYIwACaYgACwACaZIFXwACaZsABVtAEwABVFwjAAJpiAALAAJpkgj/AAJpmwAFW6gTAAFUYCMAAmmIAAsAAmmSEFMAAmmbAAVcEBMAAVRkIwACaYgACwACaZITwwACaZsABVx4EwABVGgjAAJpiAALAAJpkg0fAAJpmwAFXOATAAFUbCMAAmmIAAsAAmmSD+8AAmmbAAVdSBMAAVRwIwACaYgACwACaZIP+wACaZsABV2wEwABVHQjAAJpiAALAAJpkwACWG8AAmmbAAVeGBMAAVR4IwACaYgACwACaZMAAlUnAAJpmwAFXogTAAFUfCMAAmmIAAsAAmmSEAcAAmmbAAVe+B2ADwACaYg7AAVZxwAFWisABVqPAAVa8wAFW1cABVu/AAVcJwAFXI8ABVz3AAVdXwAFXccABV4vAAVenwAFXwwSG2wSFbQTAAFYOCMAAhTQAAAjAAIU8AAAEwABWHwjAAIBpAALAAIBrCcAAgG3AAVgxBMAAViAIwACAaQACwACAayHAAIBtwAFYSgTAAFYhCMAAgGkAAsAAgGsVwACAbcABWGMEwABWIgjAAIBpAALAAIBrhBTAAIBtwAFYfATAAFYjCMAAgGkAAsAAgGuE8MAAgG3AAViWBMAAViQIwACAaQACwACAa4NHwACAbcABWLAEwABWJQjAAIBpAALAAIBrg/vAAIBtwAFYygTAAFYnCMAAgGkAAsAAgGuD/sAAgG3AAVjkBMAAVigIwACAaQACwACAa8AAlhvAAIBtwAFY/gTAAFYqCMAAgGkAAsAAgGvAAJVJwACAbcABWRoEwABWKwjAAIBpAALAAIBrhAHAAIBtwAFZNgTAAFYsCMAAgGkAAsAAgGvAAIwrwACAbcABWVAEwABWLQjAAIBpAALAAIBrU8AAgG3AAVlsBMAAVi4IwACAaQACwACAa4FXwACAbcABWYUEwABWLwjAAIBpAALAAIBrgj/AAIBtwAFZnwTAAFYwCMAAgGkAAsAAgGvAAIm7wACAbcABWbkEwABWQQTAAFZICMAAhRoAAsAAhRwJwACFHsABWdoEwABWSgTAAFZLCMAAhRoAAsAAhRwVwACFHsABWfgEwABWTQTAAFZQCMAAhRoAAsAAhRwhwACFHsABWhYEwABWUgTAAFZXCMAAhRoAAsAAhRxTwACFHsABWjQEwABWXQTAAFZiBMAAVmQEwABWZgjAAKSPAALAAKSRIcAApJPAAVpcBKnFBMAAVmkEwABWawTAAFZsCMAApI8AAsAApJEVwACkk8ABWoIEwABWbgdgA8AAYrkABMAAVngEwABWegjAAJ7GAALAAJ7ICcAAnsrAAVqtBMAAVnsIwACexgACwACeyBXAAJ7KwAFaxgTAAFZ8CMAAnsYAAsAAnsghwACeysABWt8EwABWfQjAAJ7GAALAAJ7IU8AAnsrAAVr4B2ADwACexgTAAVqywAFay8ABWuTAAVr9BMAAVn4IwACkwgACwACkxIQUwACkxsABWykEwABWgATAAFaBCMAApMIAAsAApMSE8MAApMbAAVtIBMAAVokEwABWjATAAFaWBIbZBISDBISCBISOBMAAVpsEwABWnQTAAFafBMAAVqEEwABWowTAAFalBMAAVqcIkucBYAPAAGKNAAjAAPezAmADhK5gA4i4AcAA97aCZgjAAJxYAALAAJxcwAFbq8AAnF15BMAAV3IIwAB+6QACwAB+6wnAAH7twAFb1ATAAFdzCMAAfukAAsAAfusVwAB+7cABW+0HYAPAAH7pAsABW9nAAVvyBMAAV30EwABXigjAAIgiAALAAIgkFcAAiCbAAVwbCJLnAWADwAClogAKwAB/aQjAAH+FAAAHYAPAAGcEAAdgA8AAZyYAB2ADwABnMgAHYAPAAGc+AAdgA8AATbIAB2ADwABnSgAHYAPAAIAvAAdgA8AAgGkQwAFYNsABWGjAAVhPwAFZccABWYrAAVmkwAFYgcABWJvAAVi1wAFYz8ABWOnAAVkDwAFZH8ABWTvAAVlVwAFZvgjAAICDAAXAAICFwAFYNsAAgIZ5wACAh3nAAICIecAAgIl5CMAAgIMABcAAgIXAAVhowACAhnnAAICHecAAgIh5wACAiXkIwACAgwAFwACAhcABWE/AAICGecAAgId5wACAiHnAAICJeQjAAICDAAXAAICFwAFZccAAgIZ5wACAh3nAAICIecAAgIl5CMAAgIMABcAAgIXAAVmKwACAhnnAAICHecAAgIh5wACAiXkIwACAgwAFwACAhcABWaTAAICGecAAgId5wACAiHnAAICJeQjAAICDAAXAAICFwAFZVcAAgIZ5wACAh3nAAICIecAAgIl5BMAAWEMIwACAogACwACApAnAAICmwAFdwATAAFhECMAAgKIAAsAAgKQVwACApsABXdkEwABYRQjAAICiAALAAICkIcAAgKbAAV3yBMAAWEYIwACAogACwACApFPAAICmwAFeCwdgA8AAgKIEwAFdxcABXd7AAV33wAFeEATAAFicCMAAqSoAAsAAqSwJwACpLsABXjwEwABYnQjAAKlJAALAAKlLCcAAqU3AAV5VBMAAWJ8IwACpKgACwACpLBXAAKkuwAFebgTAAFiiCMAAqUkAAsAAqUsVwACpTcABXocEwABYowjAAKkqAALAAKksIcAAqS7AAV6gBMAAWKQIwACpKgACwACpLFPAAKkuwAFeuQTAAFimCMAAqSoAAsAAqSyBV8AAqS7AAV7SBMAAWKcIwACpSQACwACpSyHAAKlNwAFe7ATAAFioCMAAqUkAAsAAqUtTwACpTcABXwUEwABYqQjAAKlJAALAAKlLgVfAAKlNwAFfHgTAAFiqCMAAqSoAAsAAqSyCP8AAqS7AAV84BMAAWKsIwACpKgACwACpLIQUwACpLsABX1IEwABYrAjAAKlJAALAAKlLgj/AAKlNwAFfbATAAFitCMAAqUkAAsAAqUuEFMAAqU3AAV+GBMAAWK4IwACpSQACwACpS4TwwACpTcABX6AEwABYrwjAAKkqAALAAKkshPDAAKkuwAFfugTAAFiwCMAAqSoAAsAAqSyDR8AAqS7AAV/UBMAAWLcIwACpKgACwACpLIP7wACpLsABX+4EwABY8AdgA8AAmr0DwAE81MABPLvAATyiB2ADwACCjAAHYAO8rQAIwACC5wAABMAAWT0HYAO8twAEwABZewjAAIOoAALAAIOqCcAAg6zAAWBBBMAAWXwIwACDqAACwACDqhXAAIOswAFgWgTAAFl9CMAAg6gAAsAAg6ohwACDrMABYHMEwABZfgjAAIOoAALAAIOqU8AAg6zAAWCMBMAAWX8IwACDqAACwACDqoFXwACDrMABYKUHYAPAAIOoBcABYEbAAWBfwAFgeMABYJHAAWCqB2ADwAD96wPAAK+cwAC+VsAAvlwHYAPAAIUaBMABWd/AAVn9wAFaG8ABWjkIwACF5AAACMAAhd0AAAjAAIXwAAAIwACF6QAACMAAhgsAAAjAAIYzAAAIwACGKwAACMAAhhMAAAjAAIY6AAAIwACGGwAACMAAhlYAAAjAAIZOAAAIwACGZwAACMAAhl8AAAjAAIZvAAAIwACGfwAACMAAhocAAAjAAIacAAAIwACGjgAACMAAhpUAAAjAAIX3AAAIwACGwwAACMAAhrkAAAjAAIajAAAIwACGqQAACMAAhiMAAAjAAIa0AAAIwACGvgAAB2ADwACG5APAAQOewAD6UsAA+ogIwACG8QADwACG88ABA57AAIb0wACxVsAAhvV5B2ADwACHAhbAAQDHwAEA3sABAs7AAQG/wAEB1sABAe7AAQIGwAECHsABApzAAQF1wAEBjcABAaXAAQJowAECNsABAoLAAQJOwAEBQ8ABAVvAAQEpwAEA9cABAQ/AAQK0CMAAhyIAAsAAhyTAAQDHwACHJcAAm0kIwACHRwACwACHJMABAN7AAIclwACbSwjAAIciAALAAIckwAECzsAAhyXAALZeCMAAhyIAAsAAhyTAAQG/wACHJcAAm2gIwACHIgACwACHJMABAdbAAIclwACbagjAAIciAALAAIckwAEB7sAAhyXAAJttCMAAhyIAAsAAhyTAAQIGwACHJcAAm3MIwACHIgACwACHJMABAh7AAIclwACbdQjAAIciAALAAIckwAECnMAAhyXAAJtwCMAAhyIAAsAAhyTAAQF1wACHJcAAm2UIwACHIgACwACHJMABAY3AAIclwACbYgjAAIciAALAAIckwAEBpcAAhyXAAJtiCMAAhyIAAsAAhyTAAQJowACHJcAAm1EIwACHIgACwACHJMABAjbAAIclwACbTgjAAIciAALAAIckwAECgsAAhyXAAJtWCMAAhyIAAsAAhyTAAQJOwACHJcAAm1QIwACHIgACwACHJMAB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acAA7mzAAWy1wAFsuMAA7m/AAWybwAFsqsABMLzAAW7YwAFs2cABbtvAAWzcwAFu58ABbuoHYAPAAP3rDcAAm0nAAO/KwADvAMAA7mnAAO5swAFstcABbLjAAO5vwAFs2cABbojAAW6LwAC2lsABboMHWwjAAJ1XwACz6cAAnPDAALOHwACdIsAAs7nAAJtUwACbTgjAAPezAmADwAD962ADwAD96wHAAPe2wAF13QjAAMapAAHAAMasAAjAAMaaAAHAAMadwAF2GwTAAGyyCMAAtHoAAAXAALSkwABrEQXAALSkwABryQTAAG0CBJzmB2ADwAD96wPAAXZUwAE+g8ABdlkEwABtagTAAG2BCMAAtUUAAsAAtUcJwAC1ScABdnUEwABtggjAALVFAALAALVHFcAAtUnAAXaOBMAAbYMIwAC1RQACwAC1RyHAALVJwAF2pwTAAG2ECMAAtUUAAsAAtUdTwAC1ScABdsAEwABthQjAALVFAALAALVHgVfAALVJwAF22QTAAG2GCMAAtUUAAsAAtUeCP8AAtUnAAXbzBMAAbYcIwAC1RQACwAC1R4QUwAC1ScABdw0EwABtiAjAALVFAALAALVHhPDAALVJwAF3JwTAAG2JCMAAtUUAAsAAtUeDR8AAtUnAAXdBBMAAbYoIwAC1RQACwAC1R4P7wAC1ScABd1sEwABtiwjAALVFAALAALVHg/7AALVJwAF3dQdgA8AAtUULwAF2esABdpPAAXaswAF2xcABdt7AAXb4wAF3EsABdyzAAXdGwAF3YMABd3oEwABtjwS8EQTAAG2SBMAAbZMEwABtlQTAAG2XBMAAbZkEwABtmwTAAG2dBMAAbZ8EwABtoQjAALCCAVsBwACwhcABdEUIwAC2jgAACMAA4voAAcAA4v13AjnAAEmcAjnAAG3WAjnAAG3XAjfkIHDbAjnAAG3YAjnAAG3ZAjnAAG3aAjnAAG3bAjnAAG3cAjnAAG3dAjnAAG3eAjnAAG3fAjnAAG3gAjnAAG3hAjnAAG3iAjnAAG3jAjnAAG3kAjnAAG3lAjnAAG3mAjfmXlpRAjnAAG3nAjnAAG3oAjfCRBRTAjnAAG3pAjnAAG3qAjfh4c3mAjnAAG3rAjnAAG3sAjnAAG3tAjnAAG3uAjnAAG3vAjnAAG3wAjnAAG3xAjnAAG3yAjnAAG3zAjnAAG30AjnAAG31AjnAAG32AjnAAG33AjnAAG34AjnAAG35Ajfom37GAjnAAG36AjnAAG37AjfEiB0FAjnAAG38AjnAAG39Ajffonz4AjnAAG3+AjnAAG3/AjnAAG4AAjnAAG4BAjnAAG4CAjnAAG4DAjnAAG4EAjnAAG4FAjnAAG4GAjnAAG4HAjnAAG4IAjnAAG4JAjnAAG4KAjnAAG4LAjnAAG4MAjfq19K7AjnAAG4NB2ADwAD8BUDAAXghwAF4J8ABeC3AAXgzwAF4OcABeD/AAXhFwAF4S8ABeFHAAXhXwAF4XcABeGPAAXhpwAF4b8ABeHXAAXh7wAF4gcABeIfAAXiNwAF4k8ABeJnAAXifwAF4pcABeKvAAXixwAF4t8ABeL3AAXjDwAF4ycABeM/AAXjVwAF428ABeOHAAXjnwAF47cABePPAAXj5wAF4/8ABeQXAAXkLwAF5EcABeRfAAXkdwAF5I8ABeSnAAXkvwAF5NcABeTvAAXlBwAF5R8ABeU3AAXlTwAF5WcABeV/AAXllwAF5a8ABeXHAAXl3wAF5fcABeYPAAXmJwAF5j8ABeZXAAXmbB2ADwAD8BUCE8MAAlUnAAISBwAB8qoTwwACVScAAhIHAAHyqhPDAAJVJwACEgcAAfKqE8MAAlUnAAISBwAB8qoI/g/vAAIwrwABwnYI/g/vAAIwrwABwnYI/g/vAAIwrwABwnYI/g/vAAIwrwABwnYFXwACWG4NawABqzIFXwACWG4NawABqzIFXwACWG4NawABqzIFXwACWG4NawABqzIQUg/7AAIm7wAB9PYQUg/7AAIm7wAB9PYQUg/7AAIm7wAB9PYQUg/7AAIm7wAB9PQI5wABuKwI5wABuLAI5wABuLQI5wABuLgI3+VbCWwI5wABuLwI5wABuMAI5wABuMQI5wABuMgI30oNbAQI35DGFvgI5wABuMwI5wABuNAI5wABuNQI5wABuNgI5wABuNwI5wABuOAI5wABuOQI3z8GdxgI35AyhzAI37eksbwI5wABuOgI5wABuOwI5wABuPAI5wABuPQI5wABuPgI5wABuPwI5wABuQAI5wABuQQI5wABuQgI3xspjUQI31CkpZwI357cKhQI37hshOAI5wABuQwI5wABuRAI5wABuRQI5wABuRgI5wABuRwI5wABuSAI5wABuSQI5wABuSgI5wABuSwI5wABuTAI5wABuTQI5wABuTgI5wABuTwI30GqgcAI32aTBFgI33jdsCAI350h3TAI39LC8tQI3+RwMswI5wABuUAI5wABuUQI5wABuUgI5wABuUwI5wABuVAI5wABuVQI5wABuVgI5wABuVwI5wABuWAI5wABuWQI5wABuWgdgA8AA/AVAwAF7ecABe3/AAXuFwAF7i8ABe5HAAXuXwAF7ncABe6PAAXupwAF7r8ABe7XAAXu7wAF7wcABe8fAAXvNwAF708ABe9nAAXvfwAF75cABe+vAAXvxwAF798ABe/3AAXwDwAF8CcABfA/AAXwVwAF8G8ABfCHAAXwnwAF8LcABfDPAAXw5wAF8P8ABfEXAAXxLwAF8UcABfFfAAXxdwAF8Y8ABfGnAAXxvwAF8dcABfHvAAXyBwAF8h8ABfI3AAXyTwAF8mcABfJ/AAXylwAF8q8ABfLHAAXy3wAF8vcABfMPAAXzJwAF8z8ABfNXAAXzbwAF84cABfOfAAXztwAF88wI5wABuYgjAAOL6AAHAAOL9AAjAALa3AAAIwAC2zgAACMAAtvYAAAjAALcQAAAIwAC2mAAABMAAbx8IwAD6BgACwAD6CMABfjbAAPoJeQrAALgKCMAAu1IAAAjAAMstAAAEwABvdgjAAPnyAAHAAPn0wAF+YgjAAL2aAAAKwAC47wTAAG/qCMAAy0AAAcAAy0LAAX6CBMAAcBYIwADLQAABwADLQsABfpYKwAC4CArAALgJCMAAzeUBYAPAAP0OAAXAALe9wABwyAXAALe9wABwyQrAALgUCMAAvNkBYAPAAPv7AsAAvNvAAX52wAC83MABftMKwAC4FQjAALzZAWADwAD7+wLAALzbwAF+dsAAvNzAAX71CsAAuBYIwAC82QFgA8AA+/sCwAC828ABfnbAALzcwAF/FwrAALgXCMAAvNkBYAPAAPv7AsAAvNvAAX52wAC83MABfzkKwAC4GAjAALzZAWADwAD7+wLAALzbwAF+dsAAvNzAAX9bCsAAuBkIwAC82QFgA8AA+/sCwAC828ABfnbAALzcwAF/fQrAALgaCMAAvNkBXgMABQUFYAPAAL0WYAPAAL0FYAPAAL0WYAPAAP1RYAPAAP2/AAFXA8AAt+EAYAPAALzLAsAAvNvAAX52wAC83MABf58KwAC4GwjAALzZ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AMs9wAGxIwTAAIBGCMAAyzsAAcAAyz3AAbE3BMAAgEcIwADLOwABwADLPcABsUsEwACASQjAAMs7AAHAAMs9wAGxXwTAAIBLCMAAyzsAAcAAyz3AAbFzBMAAgE4IwADLOwABwADLPcABsYcEwACAVAjAAMs7AAHAAMs9wAGxmwTAAIBYCMAAyzsAAcAAyz3AAbGvBMAAgFwIwADLOwABwADLPcABscMEwACAYAjAAMs7AAHAAMs9wAGx1wTAAIBkCMAAyzsAAcAAyz3AAbHrBMAAgGoIwADLOwABwADLPcABsf8EwACAawjAAMs7AAHAAMs9wAGyEwTAAIBxCMAAyzsAAcAAyz3AAbInBMAAgHQIwADLOwABwADLPcABsjsEwACAdwjAAMs7AAHAAMs9wAGyTwTAAIB5CMAAyzsAAcAAyz3AAbJjBMAAgHsIwADLOwABwADLPcABsncEwACAgQjAAMs7AAHAAMs9wAGyiwTAAICCCMAAyzsAAcAAyz3AAbKfBMAAgJ0IwADLOwABwADLPcABsrMEwACAngjAAMs7AAHAAMs9wAGyxwTAAICfCMAAyzsAAcAAyz3AAbLbBMAAgKAIwADLOwABwADLPcABsu8EwACAoQjAAMs7AAHAAMs9wAGzAwTAAICiCMAAyzsAAcAAyz3AAbMXBMAAgKMIwADLOwABwADLPcABsysEwACApAjAAMs7AAHAAMs9wAGzPwTAAIClCMAAyzsAAcAAyz3AAbNTBMAAgKYIwADLOwABwADLPcABs2cEwACApwjAAMs7AAHAAMs9wAGzewTAAIC5CMAAyzsAAcAAyz3AAbOPBMAAgL0IwAD58gABwAD59MABs6MEwACAwAjAAPnyAAHAAPn0wAGztwTAAIDDCMAA+fIAAcAA+fTAAbPLBMAAgMYIwAD58gABwAD59MABs98EwACAyQjAAPnyAAHAAPn0wAGz8wTAAIDMCMAA+fIAAcAA+fTAAbQHBMAAgM8IwAD58gABwAD59MABtBsEwACA0gjAAPnyAAHAAPn0wAG0LwTAAIDVCMAA+fIAAcAA+fTAAbRDBMAAgNgIwAD58gABwAD59MABtFcEwACA2wjAAPnyAAHAAPn0wAG0awTAAIDeCMAA+fIAAcAA+fTAAbR/BMAAgOEIwAD58gABwAD59MABtJMEwACA5AjAAPnyAAHA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AburBMAAg0IIwADLOwABwADLPcABu78EwACDRAjAAPJ2AALAAPKzFcAA8rTAAbvTBMAAg0UIwADydgACwADysyHAAPK0wAG77ATAAINGCMAA8nYAAsAA8rOD/sAA8rTAAbwFBMAAg0cIwADydgACwADys8AAlUnAAPK0wAG8HwTAAINICMAA8nYAAsAA8rPAAGkzwADytMABvDsEwACDTQjAAMs7AAHAAMs9wAG8VwTAAINPCMAAyzsAAcAAyz3AAbxrBMAAg1MIwAD58gABwAD59MABvH8EwACDVgjAAPnyAAHAAPn0wAG8kwjAAPJMAAHAAPJXIQTAAINZCMAA+fIAAcAA+fTAAbyzBMAAg1wIwAD58gABwAD59MABvMcHYAPAAPJMBMABrYHAAa2NwAG8p8ABrZkEwAB/fgTAAINUBMAAg1cEwACDWgdgA8AA/esEwAG888ABvPjAAbz9wAG9AgjAAPVdAAAEwACDZAjAAPJ2AALAAPKzgVfAAPK0wAG9JgTAAINmCMAA8nYAAsAA8rOCP8AA8rTAAb1ABMAAg2gIwADydgACwADys4QUwADytMABvVoEwACDagjAAPJ2AALAAPKzhPDAAPK0wAG9dATAAINsCMAA8nYAAsAA8rODR8AA8rTAAb2OBMAAg24IwADydgACwADys4P7wADytMABvagEwACDcQjAAPJ2AALAAPKzwACWG8AA8rTAAb3CBMAAg3QIwADydgACwADys4QBwADytMABvd4EwACDdgjAAPJ2AALAAPKzwACMK8AA8rTAAb34BMAAg3kIwADydgACwADys8AAhIHAAPK0wAG+FATAAIN7CMAA8nYAAsAA8rPAAIVZwADytMABvjAEwACDfQjAAPJ2AALAAPKzwACDwcAA8rTAAb5MBMAAg38IwADydgACwADys8AAcJ3AAPK0wAG+aATAAIOBCMAA8nYAAsAA8rPAAH09wADytMABvoQEwACDgwjAAPJ2AALAAPKzwAB8qsAA8rTAAb6gBMAAg4UIwADydgACwADys8AAaszAAPK0wAG+vATAAIOHCMAA8nYAAsAA8rPAAGoMwADytMABvtgEwACDiQjAAPJ2AALAAPKzwAB4RcAA8rTAAb70BMAAg4sIwADydgACwADys8AAadnAAPK0wAG/EATAAIONCMAA8nYAAsAA8rPAAGmm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AIeEBMAAh4UEwACHhgTAAIeHBMAAh4gEwACHiQTAAIeKBMAAh4sEwACHjATAAIeNBMAAh44EwACHjwTAAIeQBMAAh5EEwACHkgTAAIeTBMAAh5QEwACHlQTAAIeWBMAAh5cEwACHmATAAIeZBMAAh5oEwACHmwTAAIecBMAAh50EwACHngTAAIefBMAAh6AEwACHoQTAAIeiBMAAh6MEwACHpATAAIelBMAAh6YHYAPAAP3rgMfAAc2owAHNrcABzbLAAc23wAHNvMABzcHAAc3GwAHNy8ABzdDAAc3VwAHN2sABzd/AAc3kwAHN6cABze7AAc3zwAHN+MABzf3AAc4CwAHOB8ABzgzAAc4RwAHOFsABzhvAAc4gwAHOJcABzirAAc4vwAHONMABzjnAAc4+wAHOQ8ABzkjAAc5NwAHOUsABzlfAAc5cwAHOYcABzmbAAc5rwAHOcMABznXAAc56wAHOf8ABzoTAAc6JwAHOjsABzpPAAc6YwAHOncABzqLAAc6nwAHOrMABzrHAAc62wAHOu8ABzsDAAc7FwAHOysABzs/AAc7UwAHO2cABzt7AAc7jwAHO6MABzu3AAc7ywAHO98ABzvzAAc8BwAHPBsABzwvAAc8QwAHPFcABzxrAAc8fwAHPJMABzynAAc8uwAHPM8ABzzjAAc89wAHPQsABz0fAAc9MwAHPUcABz1bAAc9bwAHPYMABz2XAAc9qwAHPb8ABz3TAAc95wAHPfsABz4PAAc+IwAHPjcABz5LAAW/KwAFvzcABz5fAAc+cwAHPocABz6bAAc+rwAHPsMABz7XAAc+6wAHPv8ABz8TAAc/JwAHPzsABz9PAAc/YwAHP3cABz+LAAc/nwAHP7MABz/HAAc/2wAHP+8AB0ADAAdAFwAHQCsAB0A/AAdAUwAHQGcAB0B7AAdAjwAHQKMAB0C3AAdAywAHQN8AB0DzAAdBBwAHQRsAB0EvAAdBQwAHQVcAB0FrAAdBfwAHQZMAB0GnAAdBuwAHQc8AB0HjAAdB9wAHQgsAB0IfAAdCMwAHQkcAB0JbAAdCbwAHQoMAB0KXAAdCqwAHQr8AB0LTAAdC5wAHQvsAB0MPAAdDIwAHQzcAB0NLAAdDXwAHQ3MAB0OHAAdDmwAHQ68AB0PDAAdD1wAHQ+sAB0P/AAdEEwAHRCcAB0Q7AAdETwAHRGMAB0R3AAdEiwAHRJ8AB0SzAAdExwAHRNsAB0TvAAdFAwAHRRcAB0UrAAdFPwAHRVMAB0VnAAdFewAHRY8AB0WjAAdFtwAHRcsAB0XfAAdF8AjfAmJaAAjfF9eEAAjf7msoABMAAh6oIwADLOwABwADLPcAB1LgEwACHqwjAAMs7AAHAAMs9wAHUzATAAIesCMAAyzsAAcAAyz3AAdTgBMAAh7QIwADLOwABwADLPcAB1PQEwACHtQjAAMs7AAHAAMs9wAHVCATAAIfWCMAAyzsAAcAAyz3AAdUcBMAAh+MIwADLOwABwADLPcAB1TAEwACH5QjAAMs7AAHAAMs9wAHVRATAAIfmCMAAyzsAAcAAyz3AAdVYBMAAh+gIwADLOwABwADLPcAB1WwHYAPAAPwFgQAJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQnAAYW9wAGFvcABhb3AAYW9wAGFvcABhb3AAYW9wAGFvcABhb3AAYW9CQkJCQkJCcABhb3AAYW9wAGFvcABhb3AAYW9wAGFvcABhb3AAYW9wAGFvcABhb3AAYW9wAGFvcABhb3AAYW9wAGFvcABhb3AAYW9wAGFvcABhb3AAYW9wAGFvcABhb3AAYW9wAGFvcABhb3AAYW9CQkJCcABhb0JwAGFvcABhb3AAYW9wAGFvcABhb3AAYW9wAGFvcABhb3AAYW9wAGFvcABhb3AAYW9wAGFvcABhb3AAYW9wAGFvcABhb3AAYW9wAGFvcABhb3AAYW9wAGFvcABhb3AAYW9wAGFvcABhb0JCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJBMAAiAAIwADLOwABwADLPcAB10YEwACIBAjAAMs7AAHAAMs9wAHXWgTAAIgFCMAAyzsAAcAAyz3AAdduBMAAiAcIwADLOwABwADLPcAB14IEwACICQjAAMs7AAHAAMs9wAHXlgTAAIgLCMAAyzsAAcAAyz3AAdeqBMAAiAwIwADLOwABwADLPcAB174EwACIDgjAAMs7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TsAB5FPAAeRYwAHkZ8AB5HsEwACMiwjAAPnyAAHAAPn0wAHpgQTAAIyXCMAA+fIAAcAA+fTAAemVBMAAjJkIwAD58gABwAD59MAB6akEwACMmwjAAPnyAAHAAPn0wAHpvQTAAIydCMAA+fIAAcAA+fTAAenRBMAAjK8IwAD58gABwAD59MAB6eUCN4G7BMAAjLIIwAD58gABwAD59MAB6f0EwACMzQjAAQDXAALAAQDZCcABANvAAeoRBMAAjM4IwAEA1wACwAEA2RXAAQDbwAHqKgTAAIzPCMABANcAAsABANkhwAEA28AB6kMHYAPAAQDXA8AB6hbAAeovwAHqSAdgA8AA/AWBAMABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbaBnsABhbbAAYW2gZ7AAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtp9swAGFtp9swAGFtqBgjfyTKJNToUzAAGi8wACNT5adlA6WyMAAlRnAAYW2wAGFtsABhbYJwAGFtsABhbbAAYW2CRUhU4FXgj+EFITwg0eD+4P+wACWG8AAlUmEAcAAjCvAAIm7g1rAAISBwACFWcAAg8HAAHCdwAB9PcAAfKrAAGrMwABqDMAAeEXAAYW2wAGFtsABhbbAAYW2oGDAAYW2wABp2cAAaabAAGkztK/AAGcywABmmoM0wABkToP4wABj8LC6wABhCcAAX6vAAF6AwABdw7QHwABGkcAARl7AAEYrwABDkbKlwABfEbYUuNG4qYlCwAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtsABhbbAAYW2wAGFtgTAAI0RBMAAjRIEwACNEwTAAI0UBMAAjRUEwACNFgTAAI0XB1sHwAHuKsAB7i/AAe40wAHuOcAB7j7AAe5DwAHuSATAAI0YBMAAjRkEwACNGgTAAI0bBMAAjRwEwACNHQTAAI0eBMAAjR8EwACNIATAAI0hBMAAjSIEwACNIwdbDMAB7mzAAe5xwAHudsAB7nvAAe6AwAHuhcAB7orAAe6PwAHulMAB7pnAAe6ewAHuowTAAI0tBMAAjS4EwACNLwTAAI0wBMAAjTEEwACNMgTAAI0zB1sHwAHu28AB7uDAAe7lwAHu6sAB7u/AAe70wAHu+QTAAI0+BMAAjT8EwACNQATAAI1BBMAAjUIEwACNQwTAAI1EBMAAgCUEwACNRQTAAI1GBMAAjUcHWwzAAe8dwAHvIsAB7yfAAe8swAE5L8AB7zHAAe82wAHvO8AB70DAAe9FwAHvSsAB708HYAPAAP3rEcAAnSLAALO5wACbVMAAm07AALEmgWvAALo7wACyxoOswAC/w8AAm3PAAJ1XwACz6YCbwAC0G8AAnPDAALOHBMAAja0IwAECYAAACMABBEoAAcABBE0JCMABBEoAAcABBE0VB2ADwAD8BQiocJLYkti+BMAAXxG40bKluNEHYAPAAPwFCKhwktiS2L4EwABfEbjRsqW2FAdgA8AA/AUHhAGD/rYUhAGD/oQBg/4HYAPAAPwFBbYUhAGD/oQBg/4HYAPAAPwFELYUuNG4qYlCjfyTKJNToUzAAGi8wACNT8AAX36jgKOrpf2n+a0PCsABAKsCN8Dk4cAIwAD62wABwAD67sAB8IAIwAEEFAAFwAEEFnnAAQQXecABBBh5wAEEGXnAAQQadwdgA8ABBBQBwAHwlQjAAQQMAAHAAQQQwAHwtQI3xycOAAjAAPrbAAHAAPruwAHw0ATAAI6VBMAAjpIIwAEESgABwAEETYGeB2ADwAD8BQSocJLYkti+BAdgA8AA/AUHqHCS2JLYvgTAAF8RuNGypQdgA8AA+j+BAAAAAAAAAAAAAHcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdwB3AAAAAAB3dwAAdwAAdwAAAAAAAAAAAAB3d3d3d3d3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3d3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHcAdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACN4PsAjeD7QI3g+4CN4PvAjeD8AI3g/ECN4PyAjeD8wI3g/cEwACPfQjAAPnyAAHAAPn0wAHyUQTAAI9/CMAA+fIAAcAA+fTAAfJlBMAAj4EIwAD58gABwAD59MAB8nkEwACPgwjAAPnyAAHAAPn0wAHyjQTAAI+FCMAA+fIAAcAA+fTAAfKhBMAAj4cIwAD58gABwAD59MAB8rUEwACPiQjAAPnyAAHAAPn0wAHyyQTAAI+LCMAA+fIAAcAA+fTAAfLdBMAAj40IwAD58gABwAD59MAB8vEEwACPjwjAAPnyAAHAAPn0wAHzBQTAAI+RCMAA+fIAAcAA+fTAAfMZBMAAj5MIwAD58gABwAD59MAB8y0IwAEFygAFwAEF0ADAAQXRAMABBdJ5wAEF03nAAQXUdwTAAI+WCMAA+fIAAcAA+fTAAfNhCMABBcoABcABBdAAwAEF0QDAAQXSecABBdN5wAEF1AAEwACPmQjAAPnyAAHAAPn0wAHzlQTAAI+hBMAAj6gEwACPqQTAAI+rBMAAj7QIwAD58gABwAD59MAB870EwACPtQjAAPnyAAHAAPn0wAHz0QTAAI+2CMAA+fIAAcAA+fTAAfPlBMAAj7gIwAD58gABwAD59MAB8/kEwACQBgdgA8AA/AUECQnAAYW9wAGFvQTAAJBEAjfATEtACMAA+tsAAcAA+u7AAfQpAAAAhNJNAUGUpQFHuXABSQLCAUnKRgFXCAYAAAAgAAAACQAAAFAAAFg1AABnvQAAccsAAHrZAAB9ywAAoagAANf0AADdAAABBMkAAQwvAAPQKAAD5KoAA+vaAAPwoAAD878AA/aBAARDsAAEUykABF6cAAaFXwAGh/UABp1EAAakEQAGtKMABrjmAAa8HwAGxpwABtg+AAbeWwAG6PAABuqCAAb8EAAHECcAByJ7AAcqCQAHMKcAB0cLAAdLegAHZBMAB2t6AAeHfAAHqGcACLwCAAnIoQAKrtgAC0uNAAtZdgALWiwAC6IxAAu8HQALvawADE5nAAxz2AAMdSsADISYAAyMGwAMkRAADJznAAypUgAMrssADLG2AAy6GAAMvM8ADNnZAAzjzwANL8EADU46AA1g5AANZxkADbXKAA3BhAANz9sADer0AA6tmgAOteUADsZJAA7KmQAO2r0ADuTzABEZ6AARinEAEZJzABGn/wARqUQAEf6ZABITlgASFHcAEhiCABIomAASN0UAEjiYABI+/AASU+gAEmd+ABJtqAASeqMAEnuRABJ8gQASfNUAEoEeABKK9QASolwAEqssABLwQAAS+BYAEyOBABM/WwAUV04AFMhoABW4EAAVubwAFbrlABW/YgAV+GcAFgDdABd2sAAXePEAF4mNABeLBAAXk8QAF5d1ABeaewAXtm0AF8cLABfQQgAYenAAGKRzABjgQAAY4cIAGhMRABohJwAaVuUAGm2tABpwLQAawsIAGsadABrIhgAazPUAGtt+ABrhMwAa43MAGuTgABrwlwAa9RAAGvmSABr/5gAbASsAGwQsABsGtQAbDukAGxNjABwKVQAcFrAAHBeUABz+mAAdmbQAHaClAB3lFgAd/DEAHiPtAB4obwAeSE8AHm+3AB+j8gAf2vUAIAQtACAZIgAgMoUAIGRhACCIDgAgmfsAILQWACC+RwAi80QAIxSeACNrZQAjyhIAI/CpACQCxAAkAzEAJQ9fACUnpgAlKQkAJmhZACZrSQAmbjcAJnKoACZ1lgAmd+IAJnkcACaFoQAmipUAJpVCACbFTQAmxrkAJsgAACbK3QAm0vgAJtj+ACcZaQAnIv8AJya5ACd9ZwAnfoUAKDLMACg2WgAoQ1wAKE1rACh+NAAojD8AKI42ACkvVgApNUUAKTxPACk9ZQApV80AKWi2ACl0gQApvnwAKcusACnO7gAp43gAKefMACnsIgAp8aIAKfneACn6pQAqEtwAKhfnACoptwAqLsEAKjHLACo+mQAqQVUAKkJrACqjBwAs3uAALOEKACzivAAs5ZoALPKUACz0SAAs9zoALPhvAC0KGgAtPyQALV8UAC1kiwAtgpIALbtgAC3LswAt3D4ALi56AC5BegAuWMsALmhlAC/u3AAwCfoAMAxDADCKxQAxHr0AMTDXADKQBgAy2c0AMvDpADNDsAAzXRMAM2kLADN+uwAz6mMANDn9ADR1FAA0gvMANKArADTPAQA1H2wANVbTADWNPAA1jrMANbpSADYVmwA2KNYANj84ADcDLgA3VyMAN2T/ADdwpAA3nqcAODe4ADi7gAA5FL4AOR4FADkzKwA5zb4AOdlUADoTiQA6MzoAOltTADpj7AA6tPUAOtH6ADrg8AA7Bv4AOzFCADsyJQA7TjEAPg9ZAD4VxQA+oPIAP9h9AEAYvwBAg4IAQIRrAECIEABArSQAQMyaAEFGKgBBSRgAQVbbAEF6OABBqGYAQhn/AEIoMgBCOvYAQkeYAENkNABDcoQAQ4ghAEOL9gBDmacARCkwAEQ6owBESGoARGDsAERhfABEc8EARMNVAETGHgBE5GAARPiLAEUSJwBFNZgARYQqAEWFggBFhmwARZCLAEZDTwBGR2IARkkcAEZs/wBGc+QARobmAEaaaABG5L0AR46kAEejNQBHvXcAR/DdAEgK5QBID9YASCxVAEg5BQBIS38ASVQOAErFiwBMOkQAT1YWAE9meABPdZ4AT42qAE+kzABPpogAT64MAE/UJABP7KsAUFtSAFBqaQBQb5sAUUbKAFFH5gBRcvYAUmPTAFJxswBScngAUrFWAFK5iwBSwVMAUscWAFLxUQBTNMQAU4txAFOqMwBTxNkAU9LnAFPzugBT9XEAU/4mAFQbPQBUOZgAVDwDAFRR7wBUVw4AVI5HAFSoOQBUvBYAVMWDAFTLbwBVRPEAVWGOAFVjJwBVakQAVXtJAFWOoABV3oQAVj4mAFZXgQBXJUEAVyWUAFfHRgBX4lYAV/qkAFhiWABYksEAWVUKAFlVmABZwmUAWgIBAFoHCABaLDoAWlWDAFrhRQBa8KsAWv96AFsa5gBbMW0AWzb0AFs8twBbP10AW1/CAFuOcABbkG0AW5JGAFui5wBbp+IAW7+IAFwRZwBcG8sAXB4rAFwyfABcgfMAXKD0AFzGcQBcym8AXN7lAFz4VgBc/REAXSnXAF0q7ABdTh8AXU9sAF1RHwBdWkgAXaiJAF2pEwBdvPkAXeN+AF3lrABd57MAXfBRAF35bwBeA48AXhRjAF4U7ABeFscAXiOuAF4lxQBeKEoAXivBAF4tSgBeLtEAXjIUAF4yfQBeOwkAXkngAF5THABeZdQAXo4EAF6QGgBhSl4AZMykAGbpYwBnLEkAZ0DJAGiZigBpCTYAaUqCAGosCgBqLIAAdIC6AHU/SAB2J70Adj/+AHZBhwB6yXwAes8RAIEO4gCE0k0AAAH8AVkEYA==